nip2-8.7.0/0000755000175000017500000000000013350464161007402 500000000000000nip2-8.7.0/configure.ac0000644000175000017500000002727013330327415011616 00000000000000# Process this file with autoconf to produce a configure script. AC_INIT([nip2], [8.7.0], [vipsip@jiscmail.ac.uk]) # foreign stops complaints about a missing README (we use README.md instead) # and missing INSTALL (the standard Gnu INSTALL is not very useful) AM_INIT_AUTOMAKE([-Wno-portability foreign]) AC_CONFIG_HEADERS(config.h) AC_CONFIG_MACRO_DIR([m4]) dnl dnl We do the version number components as m4 macros dnl so that we can base configure --help output off dnl of them. dnl m4_define([nip_major_version], [8]) m4_define([nip_minor_version], [7]) m4_define([nip_micro_version], [0]) m4_define([nip_version], [nip_major_version.nip_minor_version.nip_micro_version]) MAJOR_VERSION=nip_major_version() MINOR_VERSION=nip_minor_version() MICRO_VERSION=nip_micro_version() AC_DEFINE_UNQUOTED(MAJOR_VERSION, $MAJOR_VERSION, [Major version number]) AC_DEFINE_UNQUOTED(MINOR_VERSION, $MINOR_VERSION, [Minor version number]) AC_DEFINE_UNQUOTED(MICRO_VERSION, $MICRO_VERSION, [Micro version number]) AC_CANONICAL_HOST AC_MSG_CHECKING([for native Win32]) case "$host" in *-*-mingw*) nip_os_win32=yes ;; *) nip_os_win32=no ;; esac AC_MSG_RESULT([$nip_os_win32]) if test x"$nip_os_win32" = "xyes"; then AC_DEFINE(OS_WIN32,1,[native win32]) # makes gcc use win native alignment IP_CFLAGS="-mms-bitfields $IP_CFLAGS" fi # src/Makeile.am uses this to add an icon to the .exe AM_CONDITIONAL(OS_WIN32, test x"$nip_os_win32" = "xyes") AC_MSG_CHECKING([for Mac OS X]) case "$host" in *-*-darwin*) nip_os_darwin=yes ;; *) nip_os_darwin=no ;; esac AC_MSG_RESULT([$nip_os_darwin]) if test x"$nip_os_darwin" = "xyes"; then AC_DEFINE(OS_DARWIN,1,[native Mac OS X]) fi AC_ARG_ENABLE(debug, AC_HELP_STRING([--enable-debug=@<:@no/minimum/yes@:>@], [turn on debugging @<:@default=debug_default()@:>@]),, enable_debug=no) if test "x$enable_debug" = "xyes"; then NIP_DEBUG_FLAGS="-DDEBUG_FATAL -DDEBUG_LEAK" else NIP_DEBUG_FLAGS="-DG_DISABLE_CAST_CHECKS" if test "x$enable_debug" = "xno"; then NIP_DEBUG_FLAGS="$GLIB_DEBUG_FLAGS -DG_DISABLE_ASSERT -DG_DISABLE_CHECKS" fi fi IP_CFLAGS="$NIP_DEBUG_FLAGS $IP_CFLAGS" # we want largefile support, if possible AC_SYS_LARGEFILE # Checks for programs. AC_PROG_AWK AC_PROG_CC AM_PROG_CC_C_O AC_PROG_LEX # we must have flex or lex if test x"$LEX" = x:; then AC_MSG_ERROR([lex/flex not found: $PACKAGE requires one of these]) fi IP_LIBS="$IP_LIBS $LEXLIB" AC_PROG_INSTALL AC_PROG_LN_S AC_CHECK_TOOL(WINDRES, windres) AC_CHECK_TOOL(DLLWRAP, dllwrap) AC_CHECK_TOOL(DLLTOOL, dlltool) AC_CHECK_TOOL(OBJDUMP, objdump) AC_CHECK_TOOL(RANLIB, ranlib) AC_CHECK_TOOL(STRIP, strip) AC_CHECK_TOOL(BISON, bison) # we have to have bison :-( maybe we could ship the generated .c/.h files? not # clear on their portability if test x"$BISON" = x; then AC_MSG_ERROR([bison not found: $PACKAGE uses bison-only features]) fi AC_CHECK_TOOL(AR, ar) AC_CHECK_TOOL(AS, as) AC_CHECK_TOOL(LD, ld) AC_LIBTOOL_WIN32_DLL AC_PROG_LIBTOOL # dmalloc option AM_WITH_DMALLOC # i18n GETTEXT_PACKAGE=nip2 AC_SUBST(GETTEXT_PACKAGE) AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GETTEXT_PACKAGE", [The prefix for our gettext translation domains.]) # ALL_LINGUAS="en_GB malkovich" ALL_LINGUAS="en_GB" AM_GLIB_GNU_GETTEXT # check for flex ... nip needs to adjust itself a bit if test "${LEX}" = "flex"; then AC_DEFINE(HAVE_FLEX,1,[using flex, rather than lex]) fi # flex >= 2.5.36 uses a nonstandard type for yyleng AC_MSG_CHECKING([whether yyleng is yy_size_t]) cat > conftest.l <= 2.4.9 libxml-2.0 vips >= 7.30) IP_CFLAGS="$REQUIRED_PACKAGES_CFLAGS $IP_CFLAGS" IP_LIBS="$REQUIRED_PACKAGES_LIBS $IP_LIBS" # gdk_window_set_opacity() was added in gtk 2.12 PKG_CHECK_EXISTS(gtk+-2.0 >= 2.12, [nip_set_opacity=yes], [nip_set_opacity=no] ) if test x"$nip_set_opacity" = x"yes"; then AC_DEFINE(HAVE_SET_OPACITY,1,[define if you have gdk_window_set_opacity()]) fi # GtkInfoBar was added in gtk 2.18 PKG_CHECK_EXISTS(gtk+-2.0 >= 2.18, [nip_use_infobar=yes], [nip_use_infobar=no] ) if test x"$nip_use_infobar" = x"yes"; then AC_DEFINE(USE_INFOBAR,1,[define if you have GtkInfoBar]) fi # notebook action widgets came in 2.20 PKG_CHECK_EXISTS(gtk+-2.0 >= 2.20, [nip_use_notebook_action=yes], [nip_use_notebook_action=no] ) if test x"$nip_use_notebook_action" = x"yes"; then AC_DEFINE(USE_NOTEBOOK_ACTION,1,[define if you have gtk_notebook_set_action_widget()]) fi # notebook group names widgets came in 2.24 PKG_CHECK_EXISTS(gtk+-2.0 >= 2.24, [nip_use_notebook_group_name=yes], [nip_use_notebook_group_name=no] ) if test x"$nip_use_notebook_group_name" = x"yes"; then AC_DEFINE(USE_NOTEBOOK_GROUP_NAME,1,[define if you have gtk_notebook_set_group_name()]) fi # GRegex was added in glib-2.14 # we need it for regex searching in the program window PKG_CHECK_EXISTS(glib-2.0 >= 2.14, [nip_use_gregex=yes], [nip_use_gregex=no] ) if test x"$nip_use_gregex" = x"yes"; then AC_DEFINE(HAVE_GREGEX,1,[define if you have GRegex]) fi # Check for the function strccpy in libgen AC_CHECK_HEADER(libgen.h, AC_CHECK_LIB(gen, strccpy, AC_DEFINE(HAVE_STRCCPY,1,[have strccpy() in -lgen]) IP_LIBS="$IP_LIBS -lgen" ), ) # Checks for header files. AC_HEADER_DIRENT AC_HEADER_STDC AC_HEADER_SYS_WAIT AC_CHECK_HEADERS(limits.h pwd.h fnmatch.h sys/statvfs.h sys/vfs.h sys/mount.h sys/resource.h sys/wait.h malloc.h sys/time.h sys/param.h unistd.h) # Checks for typedefs, structures, and compiler characteristics. AC_C_CONST AC_STRUCT_TM # Checks for library functions. AC_FUNC_ALLOCA AC_FUNC_FNMATCH AC_FUNC_VPRINTF AC_CHECK_FUNCS(geteuid getcwd getpwnam getrlimit getpwent getwd putenv regcomp strcspn strspn strstr) # need fftw so we load and unload wisdom on startup/shutdown AC_ARG_WITH([fftw3], AS_HELP_STRING([--without-fftw3], [build without fftw3 (default: test)])) if test "x$with_fftw3" != "xno"; then PKG_CHECK_MODULES(FFTW3, fftw3, [AC_DEFINE(HAVE_FFTW3,1,[define if you have fftw3 installed.]) with_fftw3=yes ], [AC_MSG_WARN([fftw3 not found; disabling fftw support]) with_fftw3=no ]) IP_CFLAGS="$FFTW3_INCLUDES $FFTW3_CFLAGS $IP_CFLAGS" IP_LIBS="$FFTW3_LIBS $IP_LIBS" fi # goffice needs libgsf to save plots to files AC_ARG_WITH([libgsf], AS_HELP_STRING([--without-libgsf], [build without libgsf (default: test)])) if test "x$with_libgsf" != "xno"; then PKG_CHECK_MODULES(LIBGSF, libgsf-1, [AC_DEFINE(HAVE_LIBGSF,1,[define if you have libgsf installed.]) with_libgsf=yes ], [AC_MSG_WARN([libgsf not found; disabling save plot to file]) with_libgsf=no ]) IP_CFLAGS="$LIBGSF_CFLAGS $LIBGSF_INCLUDES $IP_CFLAGS" IP_LIBS="$LIBGSF_LIBS $IP_LIBS" fi # optional ... use libgoffice to draw plots # pretty basic functionality, really, but we need to be able to build without # it for testing AC_ARG_WITH([libgoffice], AS_HELP_STRING([--without-libgoffice], [build without libgoffice (default: test)])) if test "x$with_libgoffice" != "xno"; then PKG_CHECK_MODULES(LIBGOFFICE, libgoffice-0.8, [AC_DEFINE(HAVE_LIBGOFFICE,1,[define if you have libgoffice installed.]) with_libgoffice=yes ], [AC_MSG_WARN([libgoffice not found; disabling plot display]) with_libgoffice=no ]) IP_CFLAGS="$LIBGOFFICE_CFLAGS $LIBGOFFICE_INCLUDES $IP_CFLAGS" IP_LIBS="$LIBGOFFICE_LIBS $IP_LIBS" fi # optional ... use libgvc to draw graphs of workspace dependencies AC_ARG_WITH([libgvc], AS_HELP_STRING([--without-libgvc], [build without libgvc (default: test)])) # gvc 2.30 is broken in a number of ways and we can't use it, see for example # http://lists.research.att.com/pipermail/graphviz-devel/2012/001544.html if test "x$with_libgvc" != "xno"; then PKG_CHECK_MODULES(LIBGVC, libgvc > 2.30, [AC_DEFINE(HAVE_LIBGVC,1,[define if you have libgvc installed.]) with_libgvc=yes ], [AC_MSG_WARN([libgvc not found; disabling workspace dep graph display]) with_libgvc=no ]) IP_CFLAGS="$LIBGVC_CFLAGS $LIBGVC_INCLUDES $IP_CFLAGS" IP_LIBS="$LIBGVC_LIBS $IP_LIBS" fi # optional ... we add some gsl funcs as builtins if available AC_ARG_WITH([gsl], AS_HELP_STRING([--without-gsl], [build without gsl (default: test)])) if test "x$with_gsl" != "xno"; then PKG_CHECK_MODULES(GSL, gsl, [AC_DEFINE(HAVE_GSL,1,[define if you have gsl installed.]) with_gsl=yes ], [AC_MSG_WARN([gsl not found; disabling extra numerical functions]) with_gsl=no ]) IP_CFLAGS="$GSL_CFLAGS $GSL_INCLUDES $IP_CFLAGS" IP_LIBS="$GSL_LIBS $IP_LIBS" fi # optional ... use this to open the help browser, if available AC_PATH_PROG(XDG_OPEN, xdg-open, no) if test "x$XDG_OPEN" != "xno"; then AC_DEFINE(HAVE_XDG_OPEN,1,[define if you have xdg-open]) AC_DEFINE_UNQUOTED(XDG_OPEN, "$XDG_OPEN", [path of xdg-open binary]) fi # optional ... use these to update desktop after install AC_PATH_PROG(UPDATE_MIME_DATABASE, update-mime-database, no) AC_PATH_PROG(UPDATE_DESKTOP_DATABASE, update-desktop-database, no) nip_desktop_update=no if test "x$UPDATE_MIME_DATABASE" != "xno"; then if test "x$UPDATE_DESKTOP_DATABASE" != "xno"; then nip_desktop_update=yes fi fi # stop the DBs being updated: useful for packagers AC_ARG_ENABLE(update-desktop, AC_HELP_STRING([--disable-update-desktop], [disable update of desktop database]), [nip_desktop_update=$enableval],) if test x"$nip_desktop_update" = "xyes"; then AM_CONDITIONAL(UPDATE_DESKTOP, true) else AM_CONDITIONAL(UPDATE_DESKTOP, false) fi # we always need -lm IP_LIBS="$IP_LIBS -lm" AC_SUBST(IP_CFLAGS) AC_SUBST(IP_LIBS) # needed by test/test_all.sh # :( what's a better way to do this, argh TOP_SRCDIR=$ac_pwd AC_SUBST(TOP_SRCDIR) AC_OUTPUT([ nip2.desktop Makefile man/Makefile man/man1/Makefile share/Makefile share/nip2/Makefile share/nip2/data/Makefile share/nip2/rc/Makefile share/nip2/start/Makefile share/nip2/compat/Makefile share/nip2/compat/7.8/Makefile share/nip2/compat/7.9/Makefile share/nip2/compat/7.10/Makefile share/nip2/compat/7.12/Makefile share/nip2/compat/7.14/Makefile share/nip2/compat/7.16/Makefile share/nip2/compat/7.24/Makefile share/nip2/compat/7.26/Makefile share/nip2/compat/7.28/Makefile share/nip2/compat/7.38/Makefile share/nip2/compat/7.40/Makefile share/nip2/compat/8.2/Makefile share/nip2/compat/8.3/Makefile share/nip2/compat/8.4/Makefile share/nip2/compat/8.5/Makefile share/nip2/compat/8.6/Makefile src/BITMAPS/Makefile src/Makefile test/Makefile test/test_all.sh po/Makefile.in nip2.spec ]) # generated script needs to be executable chmod +x test/test_all.sh AC_MSG_RESULT([ * general build options native win32: $nip_os_win32 native os x: $nip_os_darwin update desktop after install: $nip_desktop_update debug: $enable_debug * optional packages and modules use fftw3 for FFT: $with_fftw3 use gsl for numeric functions: $with_gsl use libgoffice to show plots: $with_libgoffice use libgsf to save plots to files: $with_libgsf use libgvc to show ws dep graphs: $with_libgvc (requires gvc > 2.30) use gtkinfobar to show messages: $nip_use_infobar (requires gtk+-2.0 >= 2.18) use notebook action widget: $nip_use_notebook_action (requires gtk+-2.0 >= 2.20) use notebook group name: $nip_use_notebook_group_name (requires gtk+-2.0 >= 2.24) allow regex searches: $nip_use_gregex (requires glib-2.0 >= 2.14) display help files with xdg: $XDG_OPEN ]) nip2-8.7.0/COPYING0000644000175000017500000004325413224651032010360 00000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. nip2-8.7.0/NEWS0000644000175000017500000000000113224651032010003 00000000000000 nip2-8.7.0/THANKS0000644000175000017500000000025213224651032010227 00000000000000nip THANKS file nip is a rewrite of ip, so see the THANKS file for that package. We've had very helpful funding from the European Commission and from Hewlett-Packard. nip2-8.7.0/src/0000755000175000017500000000000013350464160010170 500000000000000nip2-8.7.0/src/toolkit.c0000644000175000017500000001457013224651032011744 00000000000000/* Manage toolkits and their display. */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #include "ip.h" static FilemodelClass *parent_class = NULL; Tool * toolkit_map( Toolkit *kit, tool_map_fn fn, void *a, void *b ) { return( (Tool *) icontainer_map( ICONTAINER( kit ), (icontainer_map_fn) fn, a, b ) ); } static void toolkit_changed( iObject *iobject ) { /* If we change, signal change on our parent too (toolkitgroup) ... * things like Program and Toolkitbrowser which need to spot any * change to any kit can connect to that, rather than having to * connect to all kits independently. */ if( IS_ICONTAINER( iobject ) && ICONTAINER( iobject )->parent ) iobject_changed( IOBJECT( ICONTAINER( iobject )->parent ) ); } static void toolkit_info( iObject *iobject, VipsBuf *buf ) { Toolkit *kit = TOOLKIT( iobject ); IOBJECT_CLASS( parent_class )->info( iobject, buf ); vips_buf_appendf( buf, "group = \"%s\"\n", IOBJECT( kit->kitg )->name ); } static View * toolkit_view_new( Model *model, View *parent ) { return( toolkitview_new() ); } static gboolean toolkit_save_text( Model *model, iOpenFile *of ) { if( icontainer_map( ICONTAINER( model ), (icontainer_map_fn) model_save_text, of, NULL ) ) return( FALSE ); return( TRUE ); } /* Load from an iOpenFile. */ static gboolean toolkit_load_text( Model *model, Model *parent, iOpenFile *of ) { Toolkit *kit = TOOLKIT( model ); int pos = icontainer_pos_last( ICONTAINER( model ) ) + 1; gboolean res; /* Load up definitions. */ filemodel_set_filename( FILEMODEL( model ), of->fname_real ); attach_input_file( of ); if( !(res = parse_toplevel( kit, pos )) ) /* The sub won't have filename or line number: zap them in. */ error_sub( "%s:%d\n%s\n", FILEMODEL( kit )->filename, input_state.lineno, error_get_sub() ); #ifdef DEBUG (void) dump_kit( kit ); #endif /*DEBUG*/ return( res ); } static void toolkit_class_init( ToolkitClass *class ) { iObjectClass *iobject_class = (iObjectClass *) class; ModelClass *model_class = (ModelClass *) class; FilemodelClass *filemodel_class = (FilemodelClass *) class; parent_class = g_type_class_peek_parent( class ); /* Create signals. */ /* Init methods. */ iobject_class->info = toolkit_info; iobject_class->changed = toolkit_changed; model_class->view_new = toolkit_view_new; model_class->save_text = toolkit_save_text; model_class->load_text = toolkit_load_text; filemodel_class->filetype = filesel_type_definition; } static void toolkit_init( Toolkit *kit ) { kit->kitg = NULL; kit->pseudo = FALSE; } GType toolkit_get_type( void ) { static GType type = 0; if( !type ) { static const GTypeInfo info = { sizeof( ToolkitClass ), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) toolkit_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof( Toolkit ), 32, /* n_preallocs */ (GInstanceInitFunc) toolkit_init, }; type = g_type_register_static( TYPE_FILEMODEL, "Toolkit", &info, 0 ); } return( type ); } static void toolkit_link( Toolkit *kit, Toolkitgroup *kitg, const char *name ) { iobject_set( IOBJECT( kit ), name, NULL ); icontainer_child_add( ICONTAINER( kitg ), ICONTAINER( kit ), -1 ); kit->kitg = kitg; filemodel_register( FILEMODEL( kit ) ); if( name[0] == '_' ) MODEL( kit )->display = FALSE; toolkitgroup_sort( kitg ); } /* Find a kit by kit name. */ Toolkit * toolkit_find( Toolkitgroup *kitg, const char *name ) { return( (Toolkit *) icontainer_map( ICONTAINER( kitg ), (icontainer_map_fn) iobject_test_name, (char *) name, NULL ) ); } Toolkit * toolkit_new( Toolkitgroup *kitg, const char *name ) { Toolkit *kit; #ifdef DEBUG printf( "toolkit_new: %s\n", name ); #endif /*DEBUG*/ /* Exists already? */ if( (kit = toolkit_find( kitg, name )) ) IDESTROY( kit ); /* Make a new kit. */ kit = TOOLKIT( g_object_new( TYPE_TOOLKIT, NULL ) ); toolkit_link( kit, kitg, name ); return( kit ); } Toolkit * toolkit_new_filename( Toolkitgroup *kitg, const char *filename ) { char name[FILENAME_MAX]; Toolkit *kit; name_from_filename( filename, name ); kit = toolkit_new( kitg, name ); filemodel_set_filename( FILEMODEL( kit ), filename ); return( kit ); } /* Load a file as a toolkit. */ Toolkit * toolkit_new_from_file( Toolkitgroup *kitg, const char *filename ) { Toolkit *kit = toolkit_new_filename( kitg, filename ); gboolean res; res = filemodel_load_all( FILEMODEL( kit ), MODEL( kitg ), filename, NULL ); filemodel_set_modified( FILEMODEL( kit ), FALSE ); /* Don't remove the kit if load failed, we want to leave it so the * user can try to fix the problem. */ if( res ) return( kit ); else return( NULL ); } /* Load from an iOpenFile. */ Toolkit * toolkit_new_from_openfile( Toolkitgroup *kitg, iOpenFile *of ) { Toolkit *kit = toolkit_new_filename( kitg, of->fname ); gboolean res; res = filemodel_load_all_openfile( FILEMODEL( kit ), MODEL( kitg ), of ); filemodel_set_modified( FILEMODEL( kit ), FALSE ); /* Don't remove the kit if load failed, we want to leave it so the * user can try to fix the problem. */ if( res ) return( kit ); else return( NULL ); } /* Look up a toolkit, make an empty one if not there. */ Toolkit * toolkit_by_name( Toolkitgroup *kitg, const char *name ) { Toolkit *kit; if( !(kit = toolkit_find( kitg, name )) ) { char file[FILENAME_MAX]; im_snprintf( file, FILENAME_MAX, "$SAVEDIR" G_DIR_SEPARATOR_S "start" G_DIR_SEPARATOR_S "%s.def", name ); kit = toolkit_new_filename( kitg, file ); } return( kit ); } nip2-8.7.0/src/doubleclick.h0000644000175000017500000000223313224651032012535 00000000000000/* Declarations for doubleclick determiner. */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ typedef void (*DoubleclickFunc)( GtkWidget *, GdkEvent *, void * ); #define DOUBLECLICK_FUNC( fn ) ((DoubleclickFunc) (fn)) void doubleclick_add( GtkWidget *wid, gboolean dsingle, DoubleclickFunc single, void *clients, DoubleclickFunc dub, void *clientd ); nip2-8.7.0/src/option.c0000644000175000017500000000607213224651032011565 00000000000000/* an input option ... put/get methods */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #include "ip.h" static ClassmodelClass *parent_class = NULL; static void option_finalize( GObject *gobject ) { Option *option; g_return_if_fail( gobject != NULL ); g_return_if_fail( IS_OPTION( gobject ) ); option = OPTION( gobject ); /* My instance finalize stuff. */ IM_FREEF( slist_free_all, option->labels ); G_OBJECT_CLASS( parent_class )->finalize( gobject ); } static View * option_view_new( Model *model, View *parent ) { return( optionview_new() ); } /* Members of option we automate. */ static ClassmodelMember option_members[] = { { CLASSMODEL_MEMBER_STRING, NULL, 0, MEMBER_CAPTION, "caption", N_( "Caption" ), G_STRUCT_OFFSET( iObject, caption ) }, { CLASSMODEL_MEMBER_STRING_LIST, NULL, 0, MEMBER_LABELS, "labels", N_( "Labels" ), G_STRUCT_OFFSET( Option, labels ) }, { CLASSMODEL_MEMBER_INT, NULL, 0, MEMBER_VALUE, "value", N_( "Value" ), G_STRUCT_OFFSET( Option, value ) } }; static void option_class_init( OptionClass *class ) { GObjectClass *gobject_class = (GObjectClass *) class; ModelClass *model_class = (ModelClass *) class; ClassmodelClass *classmodel_class = (ClassmodelClass *) class; parent_class = g_type_class_peek_parent( class ); /* Create signals. */ /* Init methods. */ gobject_class->finalize = option_finalize; model_class->view_new = option_view_new; /* Static init. */ model_register_loadable( MODEL_CLASS( class ) ); classmodel_class->members = option_members; classmodel_class->n_members = IM_NUMBER( option_members ); } static void option_init( Option *option ) { option->labels = NULL; option->value = 0; iobject_set( IOBJECT( option ), CLASS_OPTION, NULL ); } GType option_get_type( void ) { static GType type = 0; if( !type ) { static const GTypeInfo info = { sizeof( OptionClass ), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) option_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof( Option ), 32, /* n_preallocs */ (GInstanceInitFunc) option_init, }; type = g_type_register_static( TYPE_CLASSMODEL, "Option", &info, 0 ); } return( type ); } nip2-8.7.0/src/formula.h0000644000175000017500000000552013224651032011724 00000000000000/* display a caption/value label pair, on a click display the formula */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_FORMULA (formula_get_type()) #define FORMULA( obj ) (GTK_CHECK_CAST( (obj), \ TYPE_FORMULA, Formula )) #define FORMULA_CLASS( klass ) \ (GTK_CHECK_CLASS_CAST( (klass), \ TYPE_FORMULA, FormulaClass )) #define IS_FORMULA( obj ) (GTK_CHECK_TYPE( (obj), TYPE_FORMULA )) #define IS_FORMULA_CLASS( klass ) \ (GTK_CHECK_CLASS_TYPE( (klass), TYPE_FORMULA )) typedef struct _Formula { GtkEventBox parent_object; /* State. */ char *caption; char *value; char *expr; gboolean edit; /* In edit mode */ gboolean sensitive; /* Flick to edit on click */ gboolean changed; /* ->entry changed since we set it */ gboolean refresh_queued; /* Awaiting refresh */ gboolean needs_focus; /* Grab focus on refresh */ /* Widgets. */ GtkWidget *hbox; /* Container for our stuff */ GtkWidget *left_label; /* Caption label */ GtkWidget *right_label; /* Display value here */ GtkWidget *entry_frame; /* Frame edit text with this */ GtkWidget *entry; /* Edit formula here */ } Formula; typedef struct _FormulaClass { GtkEventBoxClass parent_class; /* My methods. */ void (*edit)( Formula * ); /* Formula has flicked to edit mode */ void (*changed)( Formula * ); /* Formula change */ void (*activate)( Formula * ); /* Pressed "Enter" key in formula */ void (*enter)( Formula * ); /* Highlight change */ void (*leave)( Formula * ); /* on eg. mouse enter/exit */ } FormulaClass; void formula_set_edit( Formula *formula, gboolean edit ); void formula_set_sensitive( Formula *formula, gboolean sensitive ); void formula_set_needs_focus( Formula *formula, gboolean needs_focus ); gboolean formula_scan( Formula *formula ); GType formula_get_type( void ); Formula *formula_new( void ); void formula_set_caption( Formula *formula, const char *caption ); void formula_set_value_expr( Formula *formula, const char *value, const char *expr ); nip2-8.7.0/src/plot.c0000644000175000017500000004700213224651032011231 00000000000000/* an input plot */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #include "ip.h" static ClassmodelClass *parent_class = NULL; static void plot_free_columns( Plot *plot ) { int i; for( i = 0; i < plot->columns; i++ ) { IM_FREE( plot->xcolumn[i] ); IM_FREE( plot->ycolumn[i] ); } IM_FREE( plot->xcolumn ); IM_FREE( plot->ycolumn ); plot->columns = 0; plot->rows = 0; } static void plot_finalize( GObject *gobject ) { Plot *plot; g_return_if_fail( gobject != NULL ); g_return_if_fail( IS_PLOT( gobject ) ); plot = PLOT( gobject ); #ifdef DEBUG printf( "plot_finalize\n" ); #endif /*DEBUG*/ /* My instance finalize stuff. */ image_value_destroy( &plot->value ); plot_free_columns( plot ); vips_buf_destroy( &plot->caption_buffer ); G_OBJECT_CLASS( parent_class )->finalize( gobject ); } char * plot_f2c( PlotFormat format ) { switch( format ) { case PLOT_FORMAT_YYYY: return( _( "YYYY" ) ); case PLOT_FORMAT_XYYY: return( _( "XYYY" ) ); case PLOT_FORMAT_XYXY: return( _( "XYXY" ) ); default: g_assert( 0 ); /* Keep gcc happy. */ return( 0 ); } } char * plot_s2c( PlotStyle style ) { switch( style ) { case PLOT_STYLE_POINT: return( _( "Point" ) ); case PLOT_STYLE_LINE: return( _( "Line" ) ); case PLOT_STYLE_SPLINE: return( _( "Spline" ) ); case PLOT_STYLE_BAR: return( _( "Bar" ) ); default: g_assert( 0 ); /* Keep gcc happy. */ return( 0 ); } } static const char * plot_generate_caption( iObject *iobject ) { Plot *plot = PLOT( iobject ); VipsBuf *buf = &plot->caption_buffer; vips_buf_rewind( buf ); image_value_caption( &plot->value, buf ); vips_buf_appendf( buf, ", %d series, %d points", plot->columns, plot->rows ); vips_buf_appendf( buf, ", xrange [%g, %g]", plot->xmin, plot->xmax ); vips_buf_appendf( buf, ", yrange [%g, %g]", plot->ymin, plot->ymax ); return( vips_buf_all( buf ) ); } /* Unpack all data formats to XYXYXY. * * FIXME ... could save mem by reusing columns of Xes in YYYY and XYYY * cases */ static gboolean plot_unpack( Plot *plot, DOUBLEMASK *mask ) { int rows, columns; int r, c; double xmin, xmax; double ymin, ymax; rows = mask->ysize; switch( plot->format ) { case PLOT_FORMAT_YYYY: columns = mask->xsize; break; case PLOT_FORMAT_XYYY: if( mask->xsize < 2 ) { error_top( _( "Bad value." ) ); error_sub( _( "More than one column " "needed or XY plots" ) ); return( FALSE ); } columns = mask->xsize - 1; break; case PLOT_FORMAT_XYXY: if( (mask->xsize & 1) != 0 ) { error_top( _( "Bad value." ) ); error_sub( _( "Even number of columns only for " "XY format plots" ) ); return( FALSE ); } columns = mask->xsize / 2; break; default: columns = 1; g_assert( 0 ); } if( plot->columns != columns || plot->rows != rows ) { plot_free_columns( plot ); plot->xcolumn = IM_ARRAY( NULL, columns, double * ); plot->ycolumn = IM_ARRAY( NULL, columns, double * ); if( !plot->xcolumn || !plot->ycolumn ) { plot_free_columns( plot ); return( FALSE ); } plot->columns = columns; plot->rows = rows; for( c = 0; c < columns; c++ ) { plot->xcolumn[c] = NULL; plot->ycolumn[c] = NULL; } for( c = 0; c < columns; c++ ) { plot->xcolumn[c] = IM_ARRAY( NULL, rows, double ); plot->ycolumn[c] = IM_ARRAY( NULL, rows, double ); if( !plot->xcolumn[c] || !plot->ycolumn[c] ) { plot_free_columns( plot ); return( FALSE ); } } } switch( plot->format ) { case PLOT_FORMAT_YYYY: for( c = 0; c < columns; c++ ) for( r = 0; r < rows; r++ ) { plot->xcolumn[c][r] = r; plot->ycolumn[c][r] = mask->coeff[c + r * mask->xsize]; } break; case PLOT_FORMAT_XYYY: for( c = 0; c < columns; c++ ) for( r = 0; r < rows; r++ ) { plot->xcolumn[c][r] = mask->coeff[r * mask->xsize]; plot->ycolumn[c][r] = mask->coeff[c + 1 + r * mask->xsize]; } break; case PLOT_FORMAT_XYXY: for( c = 0; c < columns; c++ ) for( r = 0; r < rows; r++ ) { plot->xcolumn[c][r] = mask->coeff[c * 2 + r * mask->xsize]; plot->ycolumn[c][r] = mask->coeff[c * 2 + 1 + r * mask->xsize]; } break; default: g_assert( 0 ); } xmin = plot->xcolumn[0][0]; xmax = plot->xcolumn[0][0]; ymin = plot->ycolumn[0][0]; ymax = plot->ycolumn[0][0]; for( c = 0; c < columns; c++ ) for( r = 0; r < rows; r++ ) { if( plot->xcolumn[c][r] > xmax ) xmax = plot->xcolumn[c][r]; if( plot->xcolumn[c][r] < xmin ) xmin = plot->xcolumn[c][r]; if( plot->ycolumn[c][r] > ymax ) ymax = plot->ycolumn[c][r]; if( plot->ycolumn[c][r] < ymin ) ymin = plot->ycolumn[c][r]; } if( plot->xmin == PLOT_RANGE_UNSET ) plot->xmin = xmin; if( plot->xmax == PLOT_RANGE_UNSET ) plot->xmax = xmax; if( plot->ymin == PLOT_RANGE_UNSET ) plot->ymin = ymin; if( plot->ymax == PLOT_RANGE_UNSET ) plot->ymax = ymax; return( TRUE ); } #ifdef HAVE_LIBGOFFICE static View * plot_view_new( Model *model, View *parent ) { return( plotview_new() ); return( NULL ); } #endif /*HAVE_LIBGOFFICE*/ static void plot_edit( GtkWidget *parent, Model *model ) { #ifdef HAVE_LIBGOFFICE Plot *plot = PLOT( model ); Plotwindow *plotwindow; plotwindow = plotwindow_new( plot, parent ); gtk_widget_show( GTK_WIDGET( plotwindow ) ); #endif /*HAVE_LIBGOFFICE*/ } static xmlNode * plot_save( Model *model, xmlNode *xnode ) { Plot *plot = PLOT( model ); xmlNode *xthis; if( !(xthis = MODEL_CLASS( parent_class )->save( model, xnode )) ) return( NULL ); if( !set_iprop( xthis, "plot_left", plot->left ) || !set_iprop( xthis, "plot_top", plot->top ) || !set_iprop( xthis, "plot_mag", plot->mag ) || !set_sprop( xthis, "show_status", bool_to_char( plot->show_status ) ) ) return( NULL ); return( xthis ); } static gboolean plot_load( Model *model, ModelLoadState *state, Model *parent, xmlNode *xnode ) { Plot *plot = PLOT( model ); g_assert( IS_RHS( parent ) ); (void) get_iprop( xnode, "plot_left", &plot->left ); (void) get_iprop( xnode, "plot_top", &plot->top ); (void) get_iprop( xnode, "plot_mag", &plot->mag ); (void) get_bprop( xnode, "show_status", &plot->show_status ); return( MODEL_CLASS( parent_class )->load( model, state, parent, xnode ) ); } /* Members of plot we automate. */ static ClassmodelMember plot_options[] = { { CLASSMODEL_MEMBER_ENUM, NULL, PLOT_FORMAT_LAST - 1, "format", "format", N_( "Format" ), G_STRUCT_OFFSET( Plot, format ) }, { CLASSMODEL_MEMBER_ENUM, NULL, PLOT_STYLE_LAST - 1, "style", "style", N_( "Style" ), G_STRUCT_OFFSET( Plot, style ) }, { CLASSMODEL_MEMBER_DOUBLE, NULL, 0, "xmin", "xmin", N_( "Xmin" ), G_STRUCT_OFFSET( Plot, xmin ) }, { CLASSMODEL_MEMBER_DOUBLE, NULL, 0, "xmax", "xmax", N_( "Xmax" ), G_STRUCT_OFFSET( Plot, xmax ) }, { CLASSMODEL_MEMBER_DOUBLE, NULL, 0, "ymin", "ymin", N_( "Ymin" ), G_STRUCT_OFFSET( Plot, ymin ) }, { CLASSMODEL_MEMBER_DOUBLE, NULL, 0, "ymax", "ymax", N_( "Ymax" ), G_STRUCT_OFFSET( Plot, ymax ) }, { CLASSMODEL_MEMBER_STRING, NULL, 0, MEMBER_CAPTION, "caption", N_( "Caption" ), G_STRUCT_OFFSET( Plot, caption ) }, { CLASSMODEL_MEMBER_STRING, NULL, 0, MEMBER_XCAPTION, "xcaption", N_( "X Axis Caption" ), G_STRUCT_OFFSET( Plot, xcaption ) }, { CLASSMODEL_MEMBER_STRING, NULL, 0, MEMBER_YCAPTION, "ycaption", N_( "Y Axis Caption" ), G_STRUCT_OFFSET( Plot, ycaption ) }, { CLASSMODEL_MEMBER_STRING_LIST, NULL, 0, MEMBER_SERIES_CAPTIONS, "series_captions", N_( "Series Captions" ), G_STRUCT_OFFSET( Plot, series_captions ) } }; static ClassmodelMember plot_members[] = { { CLASSMODEL_MEMBER_OPTIONS, &plot_options, IM_NUMBER( plot_options ), MEMBER_OPTIONS, NULL, N_( "Options" ), 0 }, { CLASSMODEL_MEMBER_IMAGE, NULL, 0, MEMBER_VALUE, "value", N_( "Value" ), G_STRUCT_OFFSET( Plot, value ) } }; /* Come here after we've read in new values from the heap. */ static gboolean plot_class_get( Classmodel *classmodel, PElement *root ) { Plot *plot = PLOT( classmodel ); ImageValue *value = &plot->value; IMAGE *im = imageinfo_get( FALSE, value->ii ); Imageinfo *ii2; IMAGE *t; DOUBLEMASK *mask; int (*fn)(); /* nx1 or 1xm images only ... use Bands for columns. */ if( im->Xsize != 1 && im->Ysize != 1 ) { error_top( _( "Bad value." ) ); error_sub( _( "1xn or nx1 images only for Plot" ) ); return( FALSE ); } /* Don't ref this and it'll be removed on the next GC. */ if( !(ii2 = imageinfo_new_temp( main_imageinfogroup, reduce_context->heap, NULL, "p" )) ) return( FALSE ); t = imageinfo_get( FALSE, ii2 ); /* Rotate so that our mask will be in the correct orientation. */ if( im->Ysize == 1 ) fn = im_rot90; else fn = im_copy; if( fn( im, t ) ) { error_top( _( "Bad value." ) ); error_sub( _( "Unable to prepare image." ) ); error_vips(); return( FALSE ); } /* Unpack the image to a dmask, then unpack the dmask into a set of XY * columns. * * FIXME ... yuk! */ if( !(mask = im_vips2mask( t, "plot_class_get" )) ) { error_top( _( "Bad value." ) ); error_sub( _( "1xn or nx1 images only" ) ); error_vips(); return( FALSE ); } if( !plot_unpack( plot, mask ) ) { im_free_dmask( mask ); return( FALSE ); } im_free_dmask( mask ); return( TRUE ); } static void plot_reset( Classmodel *classmodel ) { Plot *plot = PLOT( classmodel ); image_value_destroy( &plot->value ); plot->format = PLOT_FORMAT_YYYY; plot->style = PLOT_STYLE_LINE; plot->xmin = PLOT_RANGE_UNSET; plot->xmax = PLOT_RANGE_UNSET; plot->ymin = PLOT_RANGE_UNSET; plot->ymax = PLOT_RANGE_UNSET; IM_SETSTR( plot->caption, NULL ); IM_SETSTR( plot->xcaption, NULL ); IM_SETSTR( plot->ycaption, NULL ); IM_FREEF( slist_free_all, plot->series_captions ); } static gboolean plot_graphic_save( Classmodel *classmodel, GtkWidget *parent, const char *filename ) { Plot *plot = PLOT( classmodel ); ImageValue *value = &plot->value; char buf[FILENAME_MAX]; expand_variables( filename, buf ); filesel_add_mode( buf ); if( value->ii ) if( !imageinfo_write( value->ii, buf ) ) return( FALSE ); mainw_recent_add( &mainw_recent_image, filename ); return( TRUE ); } static void plot_class_init( PlotClass *class ) { GObjectClass *gobject_class = (GObjectClass *) class; iObjectClass *iobject_class = (iObjectClass *) class; ModelClass *model_class = (ModelClass *) class; ClassmodelClass *classmodel_class = (ClassmodelClass *) class; parent_class = g_type_class_peek_parent( class ); /* Create signals. */ /* Init methods. */ gobject_class->finalize = plot_finalize; iobject_class->generate_caption = plot_generate_caption; #ifdef HAVE_LIBGOFFICE model_class->view_new = plot_view_new; #endif /*HAVE_LIBGOFFICE*/ model_class->edit = plot_edit; model_class->save = plot_save; model_class->load = plot_load; classmodel_class->class_get = plot_class_get; classmodel_class->members = plot_members; classmodel_class->n_members = IM_NUMBER( plot_members ); classmodel_class->reset = plot_reset; classmodel_class->graphic_save = plot_graphic_save; classmodel_class->filetype = filesel_type_image; classmodel_class->filetype_pref = "IMAGE_FILE_TYPE"; /* Static init. */ model_register_loadable( MODEL_CLASS( class ) ); } static void plot_init( Plot *plot ) { #ifdef DEBUG printf( "plot_init\n" ); #endif /*DEBUG*/ image_value_init( &plot->value, CLASSMODEL( plot ) ); plot->xcolumn = NULL; plot->ycolumn = NULL; plot->rows = 0; plot->columns = 0; plot->show_status = FALSE; plot->mag = 100; plot->left = 0; plot->top = 0; vips_buf_init_dynamic( &plot->caption_buffer, MAX_LINELENGTH ); iobject_set( IOBJECT( plot ), CLASS_PLOT, NULL ); plot_reset( CLASSMODEL( plot ) ); } GtkType plot_get_type( void ) { static GType type = 0; if( !type ) { static const GTypeInfo info = { sizeof( PlotClass ), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) plot_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof( Plot ), 32, /* n_preallocs */ (GInstanceInitFunc) plot_init, }; type = g_type_register_static( TYPE_CLASSMODEL, "Plot", &info, 0 ); } return( type ); } #ifdef HAVE_LIBGOFFICE /* Make a GOColor from an RGB triple. Different versions of goffice have * different ways of doing this :( */ #ifdef GO_COLOR_FROM_RGB #define RGB( R, G, B ) GO_COLOR_FROM_RGB( R, G, B ) #else #define RGB( R, G, B ) RGB_TO_RGBA( RGB_TO_UINT( R, G, B ), 0xff ) #endif /* Choose line colours with this. RGB first, then mostly random. We can't use * goffice's default colours because we really want the first three to be: red, * green, blue. */ static GOColor default_colour[] = { RGB( 255, 0, 0 ), RGB( 0, 255, 0 ), RGB( 0, 0, 255 ), RGB( 100, 0, 102 ), RGB( 17, 0, 102 ), RGB( 0, 0, 180 ), RGB( 0, 53, 255 ), RGB( 0, 104, 234 ), RGB( 0, 150, 188 ), RGB( 0, 205, 170 ), RGB( 0, 255, 139 ), RGB( 0, 255, 55 ), RGB( 40, 255, 40 ), RGB( 106, 255, 74 ), RGB( 155, 255, 48 ), RGB( 209, 255, 21 ), RGB( 239, 255, 7 ), RGB( 255, 176, 0 ), RGB( 255, 110, 0 ), RGB( 255, 50, 0 ), RGB( 196, 0, 0 ) }; /* Build a GogPlot from a Plot. */ GogPlot * plot_new_gplot( Plot *plot ) { GogPlot *gplot; int i; if( plot->style == PLOT_STYLE_BAR ) gplot = gog_plot_new_by_name( "GogHistogramPlot" ); else gplot = gog_plot_new_by_name( "GogXYPlot" ); switch( plot->style ) { case PLOT_STYLE_POINT: g_object_set( gplot, "default-style-has-lines", FALSE, NULL ); break; case PLOT_STYLE_LINE: g_object_set( gplot, "default-style-has-markers", FALSE, NULL ); break; case PLOT_STYLE_SPLINE: g_object_set( gplot, "default-style-has-markers", FALSE, NULL ); g_object_set( gplot, "use-splines", TRUE, NULL ); break; case PLOT_STYLE_BAR: break; default: g_assert( FALSE ); } for( i = 0; i < plot->columns; i++ ) { GogSeries *series; GOData *data; GError *error; char *caption; series = gog_plot_new_series( gplot ); data = go_data_vector_val_new( plot->xcolumn[i], plot->rows, NULL ); gog_series_set_dim( series, 0, data, &error ); data = go_data_vector_val_new( plot->ycolumn[i], plot->rows, NULL ); gog_series_set_dim( series, 1, data, &error ); if( (caption = (char *) g_slist_nth_data( plot->series_captions, i )) ) caption = g_strdup( caption ); else caption = g_strdup_printf( "Band %d", i ); data = go_data_scalar_str_new( caption, TRUE ); gog_series_set_name( series, (GODataScalar *) data, &error ); if( i < IM_NUMBER( default_colour ) ) { GOStyle *style; style = go_styled_object_get_style( GO_STYLED_OBJECT( series ) ); style->line.color = default_colour[i]; style->line.auto_color = FALSE; go_marker_set_fill_color( style->marker.mark, default_colour[i] ); style->marker.auto_fill_color = FALSE; /* Could match fill, but black everywhere looks nicer. */ go_marker_set_outline_color( style->marker.mark, RGB( 0, 0, 0 ) ); style->marker.auto_outline_color = FALSE; gog_object_request_update( GOG_OBJECT( series ) ); } } return( gplot ); } static void plot_grid_add( GogAxis *axis ) { GogGridLine *ggl; if( !gog_object_get_child_by_name( GOG_OBJECT( axis ), "MajorGrid" ) ) { ggl = g_object_new( GOG_TYPE_GRID_LINE, "is-minor", FALSE, NULL ); gog_object_add_by_name( GOG_OBJECT( axis ), "MajorGrid", GOG_OBJECT( ggl ) ); } if( !gog_object_get_child_by_name( GOG_OBJECT( axis ), "MinorGrid" ) ) { ggl = g_object_new( GOG_TYPE_GRID_LINE, "is-minor", TRUE, NULL ); gog_object_add_by_name( GOG_OBJECT( axis ), "MinorGrid", GOG_OBJECT( ggl ) ); } g_object_set( axis, "pos", GOG_AXIS_CROSS, NULL ); } static void plot_set_title( GogObject *thing, const char *role, const char *text ) { GogObject *title; title = gog_object_get_child_by_name( thing, role ); if( text && !title ) { title = g_object_new( GOG_TYPE_LABEL, NULL ); gog_object_add_by_name( thing, role, title ); } else if( !text && title ) { gog_object_clear_parent( title ); UNREF( title ); } if( text && title ) { GOData *data; data = go_data_scalar_str_new( text, FALSE ); gog_dataset_set_dim( GOG_DATASET( title ), 0, data, NULL ); } } void plot_style_main( Plot *plot, GogChart *gchart ) { GSList *axes; GogAxis *axis; GogObject *legend; axes = gog_chart_get_axes( gchart, GOG_AXIS_X ); axis = GOG_AXIS( axes->data ); g_slist_free( axes ); gog_axis_set_bounds( axis, plot->xmin, plot->xmax ); plot_set_title( GOG_OBJECT( axis ), "Label", plot->xcaption ); plot_grid_add( axis ); axes = gog_chart_get_axes( gchart, GOG_AXIS_Y ); axis = GOG_AXIS( axes->data ); g_slist_free( axes ); gog_axis_set_bounds( axis, plot->ymin, plot->ymax ); plot_set_title( GOG_OBJECT( axis ), "Label", plot->ycaption ); plot_grid_add( axis ); legend = gog_object_get_child_by_name( GOG_OBJECT( gchart ), "Legend" ); if( plot->columns > 1 && !legend ) { legend = g_object_new( GOG_TYPE_LEGEND, NULL ); gog_object_add_by_name( GOG_OBJECT( gchart ), "Legend", GOG_OBJECT( legend ) ); } else if( plot->columns == 1 && legend ) { gog_object_clear_parent( legend ); UNREF( legend ); } plot_set_title( GOG_OBJECT( gchart ), "Title", plot->caption ); } void plot_style_thumbnail( Plot *plot, GogChart *gchart ) { GSList *axes; GogAxis *axis; axes = gog_chart_get_axes( gchart, GOG_AXIS_X ); axis = GOG_AXIS( axes->data ); g_slist_free( axes ); g_object_set( axis, "major-tick-labeled", FALSE, "major-tick-size-pts", 0, "pos", GOG_AXIS_CROSS, NULL ); gog_axis_set_bounds( axis, plot->xmin, plot->xmax ); axes = gog_chart_get_axes( gchart, GOG_AXIS_Y ); axis = GOG_AXIS( axes->data ); g_slist_free( axes ); g_object_set( axis, "major-tick-labeled", FALSE, "major-tick-size-pts", 0, "pos", GOG_AXIS_CROSS, NULL ); gog_axis_set_bounds( axis, plot->ymin, plot->ymax ); } Imageinfo * plot_to_image( Plot *plot, Reduce *rc, double dpi ) { GogGraph *ggraph; GogChart *gchart; GogPlot *gplot; GogRenderer *renderer; GdkPixbuf *pixbuf; double width_in_pts, height_in_pts; Imageinfo *ii; ggraph = g_object_new( GOG_TYPE_GRAPH, NULL ); gchart = g_object_new( GOG_TYPE_CHART, NULL ); gog_object_add_by_name( GOG_OBJECT( ggraph ), "Chart", GOG_OBJECT( gchart ) ); gplot = plot_new_gplot( plot ); gog_object_add_by_name( GOG_OBJECT( gchart ), "Plot", GOG_OBJECT( gplot ) ); plot_style_main( plot, gchart ); renderer = gog_renderer_new( ggraph ); gog_graph_force_update( ggraph ); gog_graph_get_size( ggraph, &width_in_pts, &height_in_pts); gog_renderer_update( renderer, width_in_pts * dpi / 72.0, height_in_pts * dpi / 72.0 ); pixbuf = gog_renderer_get_pixbuf( renderer ); if( !(ii = imageinfo_new_from_pixbuf( main_imageinfogroup, rc->heap, pixbuf )) ) { UNREF( renderer ); UNREF( ggraph ); return( NULL ); } /* Don't unref the pixbuf, we don't own it. */ UNREF( renderer ); UNREF( ggraph ); return( ii ); } #endif /*HAVE_LIBGOFFICE*/ nip2-8.7.0/src/compile.c0000644000175000017500000017167513224651032011721 00000000000000/* Stuff to parse and compile text. */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG_RESOLVE */ /* regular (and very slow) sanity checks on symbols ... needs DEBUG in * symbol.c as well #define DEBUG_SANITY */ /* count how many nodes we find with common sub-expression removal. #define DEBUG_COMMON */ /* show what everything compiled to #define DEBUG_RESULT */ /* trace list comp compile #define DEBUG_LCOMP */ /* trace pattern LHS generation #define DEBUG_PATTERN */ /* #define DEBUG */ #include "ip.h" static iContainerClass *parent_class = NULL; Compile * compile_get_parent( Compile *compile ) { if( !ICONTAINER( compile->sym )->parent ) return( NULL ); return( COMPILE( ICONTAINER( compile->sym )->parent ) ); } void * compile_name_print( Compile *compile ) { printf( "compile(%p) ", compile ); symbol_name_print( compile->sym ); return( NULL ); } static void * compile_name_sub( Expr *expr, VipsBuf *buf ) { if( expr->row ) { if( !vips_buf_is_empty( buf ) ) vips_buf_appends( buf, ", " ); row_qualified_name( expr->row, buf ); } return( NULL ); } void compile_name( Compile *compile, VipsBuf *buf ) { char txt[256]; VipsBuf buf2 = VIPS_BUF_STATIC( txt ); vips_buf_appends( buf, "\"" ); symbol_qualified_name( compile->sym, buf ); vips_buf_appends( buf, "\"" ); slist_map( compile->exprs, (SListMapFn) compile_name_sub, &buf2 ); if( !vips_buf_is_empty( &buf2 ) ) vips_buf_appendf( buf, " (%s)", vips_buf_all( &buf2 ) ); } static Compile * compile_map_all_sub( Symbol *sym, map_compile_fn fn, void *a ) { if( !sym->expr || !sym->expr->compile ) return( NULL ); else return( compile_map_all( sym->expr->compile, fn, a ) ); } /* Apply a function to a compile ... and any local compiles. Do top-down. */ Compile * compile_map_all( Compile *compile, map_compile_fn fn, void *a ) { Compile *res; /* Us first. */ if( (res = fn( compile, a )) ) return( res ); /* Then any children. */ if( (res = (Compile *) icontainer_map( ICONTAINER( compile ), (icontainer_map_fn) compile_map_all_sub, (void *) fn, a )) ) return( res ); return( NULL ); } /* Look up by name. */ Symbol * compile_lookup( Compile *compile, const char *name ) { return( SYMBOL( icontainer_child_lookup( ICONTAINER( compile ), name ) ) ); } /* Make a dependency. Text in compile refers to sym. */ void compile_link_make( Compile *compile, Symbol *child ) { /* Already a dependency? Don't make a second link. */ if( !g_slist_find( compile->children, child ) ) { /* New link, each direction. */ compile->children = g_slist_prepend( compile->children, child ); child->parents = g_slist_prepend( child->parents, compile ); /* If the child is a forward reference, we may have to patch * this later. Save the pointer-to-child pointer on child. */ if( child->type == SYM_ZOMBIE ) (void) symbol_patch_add( &compile->children->data, child ); } #ifdef DEBUG_SANITY /* Sanity check. */ symbol_sanity( child ); symbol_leaf_set_sanity(); #endif /*DEBUG_SANITY*/ } /* Break a dependency. Text in compile referred to child. */ void * compile_link_break( Compile *compile, Symbol *child ) { /* Sanity check. */ #ifdef DEBUG_SANITY symbol_sanity( child ); symbol_leaf_set_sanity(); #endif /*DEBUG_SANITY*/ /* Must be there. */ g_assert( g_slist_find( compile->children, child ) && g_slist_find( child->parents, compile ) ); compile->children = g_slist_remove( compile->children, child ); child->parents = g_slist_remove( child->parents, compile ); /* Sanity check. */ #ifdef DEBUG_SANITY symbol_sanity( child ); symbol_leaf_set_sanity(); #endif /*DEBUG_SANITY*/ return( NULL ); } void * compile_expr_link_break( Compile *compile, Expr *expr ) { g_assert( expr->compile == compile ); g_assert( g_slist_find( compile->exprs, expr ) ); expr->compile = NULL; compile->exprs = g_slist_remove( compile->exprs, expr ); g_object_unref( G_OBJECT( compile ) ); return( NULL ); } void * compile_expr_link_break_rev( Expr *expr, Compile *compile ) { return( compile_expr_link_break( compile, expr ) ); } void compile_expr_link_make( Compile *compile, Expr *expr ) { g_assert( !expr->compile ); g_assert( !g_slist_find( compile->exprs, expr ) ); g_assert( compile->sym == expr->sym ); expr->compile = compile; compile->exprs = g_slist_prepend( compile->exprs, expr ); g_object_ref( G_OBJECT( compile ) ); iobject_sink( IOBJECT( compile ) ); } static void compile_finalize( GObject *gobject ) { Compile *compile; g_return_if_fail( gobject != NULL ); g_return_if_fail( IS_COMPILE( gobject ) ); compile = COMPILE( gobject ); #ifdef DEBUG printf( "compile_finalize: " ); compile_name_print( compile ); printf( "\n" ); #endif /*DEBUG*/ /* My instance destroy stuff. */ /* Junk parse tree. */ slist_map( compile->treefrag, (SListMapFn) tree_node_destroy, NULL ); IM_FREEF( g_slist_free, compile->treefrag ); compile->tree = NULL; /* Break links to all locals. */ IM_FREEF( g_slist_free, compile->param ); compile->nparam = 0; IM_FREEF( g_slist_free, compile->secret ); compile->nsecret = 0; compile->this = NULL; compile->super = NULL; (void) slist_map( compile->children, (SListMapFn) symbol_link_break, compile ); IM_FREEF( g_slist_free, compile->children ); /* Remove static strings we created. */ slist_map( compile->statics, (SListMapFn) managed_destroy_nonheap, NULL ); IM_FREEF( g_slist_free, compile->statics ); /* Junk heap. */ if( compile->heap ) { compile->base.type = ELEMENT_NOVAL; compile->base.ele = (void *) 1; heap_unregister_element( compile->heap, &compile->base ); UNREF( compile->heap ); } /* Junk text. */ IM_FREE( compile->text ); IM_FREE( compile->prhstext ); IM_FREE( compile->rhstext ); compile->sym = NULL; /* If we're being finalized, we must have a ref count of zero, so * there shouldn't be any exprs looking at us. */ g_assert( !compile->exprs ); G_OBJECT_CLASS( parent_class )->finalize( gobject ); } static void compile_class_init( CompileClass *class ) { GObjectClass *gobject_class = (GObjectClass *) class; parent_class = g_type_class_peek_parent( class ); gobject_class->finalize = compile_finalize; /* Create signals. */ /* Init default methods. */ } static void compile_init( Compile *compile ) { /* Init our instance fields. */ compile->sym = NULL; compile->exprs = NULL; compile->is_klass = FALSE; compile->has_super = FALSE; compile->text = NULL; compile->prhstext = NULL; compile->rhstext = NULL; compile->tree = NULL; compile->treefrag = NULL; compile->last_sym = NULL; compile->nparam = 0; compile->param = NULL; compile->nsecret = 0; compile->secret = NULL; compile->this = NULL; compile->super = NULL; compile->children = NULL; compile->base.type = ELEMENT_NOVAL; compile->heap = NULL; compile->statics = NULL; } GType compile_get_type( void ) { static GType type = 0; if( !type ) { static const GTypeInfo info = { sizeof( CompileClass ), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) compile_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof( Compile ), 32, /* n_preallocs */ (GInstanceInitFunc) compile_init, }; type = g_type_register_static( TYPE_ICONTAINER, "Compile", &info, 0 ); } return( type ); } /* Make a compile linked to an expr. */ Compile * compile_new( Expr *expr ) { Compile *compile = COMPILE( g_object_new( TYPE_COMPILE, NULL ) ); compile->sym = expr->sym; /* Junk any old compile. */ if( expr->compile ) compile_expr_link_break( expr->compile, expr ); compile_expr_link_make( compile, expr ); /* We'll want to be able to do name lookups. */ icontainer_set_hash( ICONTAINER( compile ) ); #ifdef DEBUG printf( "compile_new: " ); compile_name_print( compile ); printf( "\n" ); #endif /*DEBUG*/ return( compile ); } /* Max cells function for symbols. Enough to compile something big. */ static int compile_heap_max_fn( Heap *heap ) { return( 10000 ); } /* Make a exprinfo suitable for a top-level symbol. */ Compile * compile_new_toplevel( Expr *expr ) { Compile *compile = compile_new( expr ); compile->heap = heap_new( compile, compile_heap_max_fn, 100, 1000 ); g_object_ref( G_OBJECT( compile->heap ) ); iobject_sink( IOBJECT( compile->heap ) ); heap_register_element( compile->heap, &compile->base ); return( compile ); } /* Make a exprinfo suitable for a local. */ Compile * compile_new_local( Expr *expr ) { Compile *compile = compile_new( expr ); compile->heap = heap_new( compile, compile_heap_max_fn, 100, 100 ); g_object_ref( G_OBJECT( compile->heap ) ); iobject_sink( IOBJECT( compile->heap ) ); heap_register_element( compile->heap, &compile->base ); return( compile ); } /* Code generation. */ /* Generate a binop. Point arg1 and arg2 at the elements to be filled in: * caller sets them later. First arg is the compile that this operator came * from. */ static gboolean compile_binop( Compile *compile, BinOp bop, PElement *arg1, PElement *arg2, PElement *out ) { Heap *heap = compile->heap; HeapNode *hn1, *hn2, *hn3; PElement e1, e2; if( NEWNODE( heap, hn1 ) ) return( FALSE ); hn1->type = TAG_APPL; PPUT( hn1, ELEMENT_ELIST, NULL, ELEMENT_ELIST, NULL ); PEPUTP( out, ELEMENT_NODE, hn1 ); PEPOINTLEFT( hn1, &e1 ); PEPOINTRIGHT( hn1, arg2 ); if( NEWNODE( heap, hn2 ) ) return( FALSE ); hn2->type = TAG_APPL; PPUT( hn2, ELEMENT_ELIST, NULL, ELEMENT_ELIST, NULL ); PEPUTP( &e1, ELEMENT_NODE, hn2 ); PEPOINTRIGHT( hn2, arg1 ); PEPOINTLEFT( hn2, &e2 ); if( NEWNODE( heap, hn3 ) ) return( FALSE ); hn3->type = TAG_APPL; PPUT( hn3, ELEMENT_BINOP, bop, ELEMENT_COMPILEREF, compile ); PEPUTP( &e2, ELEMENT_NODE, hn3 ); return( TRUE ); } /* Generate "x.sym". Set x to be NULL and point rhs at it .. caller * fills in later. */ static gboolean compile_dotsym( Compile *compile, Symbol *sym, PElement *rhs, PElement *out ) { PElement e; if( !compile_binop( compile, BI_DOT, rhs, &e, out ) ) return( FALSE ); PEPUTP( &e, ELEMENT_SYMREF, sym ); return( TRUE ); } /* Compile a reference to sym from expr. */ static gboolean compile_reference( Compile *compile, Symbol *sym, PElement *out ) { Heap *heap = compile->heap; Compile *parent = compile_get_parent( compile ); #ifdef DEBUG printf( "generate_reference: ref to " ); symbol_name_print( sym ); printf( "inside " ); compile_name_print( compile ); printf( "\n" ); #endif /*DEBUG*/ if( g_slist_find( compile->param, sym ) || g_slist_find( compile->secret, sym ) ) { /* sym is a simple parameter, easy! */ PEPUTP( out, ELEMENT_SYMBOL, sym ); } else if( is_class( parent ) && (symbol_get_parent( sym ) == parent->sym || g_slist_find( parent->secret, sym )) ) { Symbol *ths = parent->this; /* sym is a member of the same class as expr, or sym is a * secret to our constructor (in which case it'll be in this * as well) ... generate (.sym this) * * Optimisation: don't generate (.this this) */ if( sym == ths ) { PEPUTP( out, ELEMENT_SYMBOL, ths ); } else { PElement rhs; if( !compile_dotsym( compile, sym, &rhs, out ) ) return( FALSE ); PEPUTP( &rhs, ELEMENT_SYMBOL, ths ); } } else if( is_member_enclosing( compile, sym ) ) { Symbol *sths = symbol_get_parent( sym )->expr->compile->this; PElement rhs; /* Sym is a member of an enclosing class ... * generate (.sym ref-to-this-for-that-class) */ if( !compile_dotsym( compile, sym, &rhs, out ) || !compile_reference( compile, sths, &rhs ) ) return( FALSE ); } else { /* some other reference ... generate (sym secret1 .. secretn) * recurse for secrets, since we may have to fetch them from * "this" */ PElement e = *out; PElement f; GSList *l; PEPUTP( &e, ELEMENT_SYMBOL, sym ); /* Build secret args to this sym. */ if( sym->expr && sym->expr->compile ) for( l = sym->expr->compile->secret; l; l = l->next ) { Symbol *arg = SYMBOL( l->data ); HeapNode *hn1; if( NEWNODE( heap, hn1 ) ) return( FALSE ); hn1->type = TAG_APPL; PEPUTLEFT( hn1, &e ); PPUTRIGHT( hn1, ELEMENT_ELIST, NULL ); PEPUTP( &e, ELEMENT_NODE, hn1 ); PEPOINTRIGHT( hn1, &f ); if( !compile_reference( compile, arg, &f ) ) return( FALSE ); } } return( TRUE ); } /* Build a graph with vars still in it. Write result to *out. */ static gboolean compile_graph( Compile *compile, ParseNode *pn, PElement *out ) { Heap *heap = compile->heap; HeapNode *hn1, *hn2, *hn3; PElement e1, e2, e3; GSList *l; switch( pn->type ) { case NODE_APPLY: /* Build apply node. */ if( NEWNODE( heap, hn1 ) ) return( FALSE ); hn1->type = TAG_APPL; PPUT( hn1, ELEMENT_ELIST, NULL, ELEMENT_ELIST, NULL ); PEPUTP( out, ELEMENT_NODE, hn1 ); /* Make sides. */ PEPOINTLEFT( hn1, &e1 ); PEPOINTRIGHT( hn1, &e2 ); if( !compile_graph( compile, pn->arg1, &e1 ) || !compile_graph( compile, pn->arg2, &e2 ) ) return( FALSE ); break; case NODE_UOP: /* Build apply node. */ if( NEWNODE( heap, hn1 ) ) return( FALSE ); hn1->type = TAG_APPL; PPUT( hn1, ELEMENT_ELIST, NULL, ELEMENT_ELIST, NULL ); PEPUTP( out, ELEMENT_NODE, hn1 ); PEPOINTLEFT( hn1, &e1 ); if( NEWNODE( heap, hn2 ) ) return( FALSE ); hn2->type = TAG_APPL; PPUT( hn2, ELEMENT_UNOP, pn->uop, ELEMENT_COMPILEREF, compile ); PEPUTP( &e1, ELEMENT_NODE, hn2 ); /* Build arg. */ PEPOINTRIGHT( hn1, &e2 ); if( !compile_graph( compile, pn->arg1, &e2 ) ) return( FALSE ); break; case NODE_BINOP: if( !compile_binop( compile, pn->biop, &e1, &e2, out ) || !compile_graph( compile, pn->arg1, &e1 ) || !compile_graph( compile, pn->arg2, &e2 ) ) return( FALSE ); break; case NODE_COMPOSE: if( NEWNODE( heap, hn1 ) ) return( FALSE ); hn1->type = TAG_APPL; PPUT( hn1, ELEMENT_ELIST, NULL, ELEMENT_ELIST, NULL ); PEPUTP( out, ELEMENT_NODE, hn1 ); PEPOINTLEFT( hn1, &e1 ); if( NEWNODE( heap, hn2 ) ) return( FALSE ); hn2->type = TAG_APPL; PPUT( hn2, ELEMENT_COMB, COMB_SR, ELEMENT_ELIST, NULL ); PEPUTP( &e1, ELEMENT_NODE, hn2 ); /* Build args. */ PEPOINTRIGHT( hn1, &e2 ); PEPOINTRIGHT( hn2, &e3 ); if( !compile_graph( compile, pn->arg1, &e3 ) || !compile_graph( compile, pn->arg2, &e2 ) ) return( FALSE ); break; case NODE_LEAF: /* A reference to a symbol. */ if( !compile_reference( compile, pn->leaf, out ) ) return( FALSE ); break; case NODE_CLASS: /* Output constructor. */ PEPUTP( out, ELEMENT_CONSTRUCTOR, pn->klass ); break; case NODE_TAG: /* RHS of projection. */ PEPUTP( out, ELEMENT_TAG, pn->tag ); break; case NODE_GENERATOR: /* Build apply nodes. */ if( NEWNODE( heap, hn1 ) ) return( FALSE ); hn1->type = TAG_APPL; PPUT( hn1, ELEMENT_ELIST, NULL, ELEMENT_ELIST, NULL ); PEPUTP( out, ELEMENT_NODE, hn1 ); PEPOINTLEFT( hn1, &e1 ); if( NEWNODE( heap, hn2 ) ) return( FALSE ); hn2->type = TAG_APPL; PPUT( hn2, ELEMENT_ELIST, NULL, ELEMENT_ELIST, NULL ); PEPUTP( &e1, ELEMENT_NODE, hn2 ); PEPOINTLEFT( hn2, &e2 ); if( NEWNODE( heap, hn3 ) ) return( FALSE ); hn3->type = TAG_APPL; PPUT( hn3, ELEMENT_COMB, COMB_GEN, ELEMENT_ELIST, NULL ); PEPUTP( &e2, ELEMENT_NODE, hn3 ); /* Build args. */ PEPOINTRIGHT( hn1, &e3 ); PEPOINTRIGHT( hn2, &e2 ); PEPOINTRIGHT( hn3, &e1 ); if( !compile_graph( compile, pn->arg1, &e1 ) ) return( FALSE ); if( pn->arg2 ) if( !compile_graph( compile, pn->arg2, &e2 ) ) return( FALSE ); if( pn->arg3 ) if( !compile_graph( compile, pn->arg3, &e3 ) ) return( FALSE ); break; case NODE_LISTCONST: case NODE_SUPER: /* List of expressions. */ /* Make first RHS ... the end of the list. */ e1 = *out; PEPUTP( &e1, ELEMENT_ELIST, NULL ); /* Build @':' for each element. */ for( l = pn->elist; l; l = l->next ) { ParseNode *arg = (ParseNode *) l->data; /* Build apply nodes. */ if( NEWNODE( heap, hn1 ) ) return( FALSE ); hn1->type = TAG_APPL; PPUT( hn1, ELEMENT_ELIST, NULL, ELEMENT_ELIST, NULL ); PEPUTP( &e1, ELEMENT_NODE, hn1 ); PEPOINTLEFT( hn1, &e2 ); if( NEWNODE( heap, hn2 ) ) return( FALSE ); hn2->type = TAG_APPL; PPUT( hn2, ELEMENT_ELIST, NULL, ELEMENT_ELIST, NULL ); PEPUTP( &e2, ELEMENT_NODE, hn2 ); PEPOINTLEFT( hn2, &e2 ); if( NEWNODE( heap, hn3 ) ) return( FALSE ); hn3->type = TAG_APPL; PPUT( hn3, ELEMENT_BINOP, BI_CONS, ELEMENT_COMPILEREF, compile ); PEPUTP( &e2, ELEMENT_NODE, hn3 ); /* Build arg. */ PEPOINTRIGHT( hn2, &e3 ); if( !compile_graph( compile, arg, &e3 ) ) return( FALSE ); /* APPL is now our LHS. */ PEPOINTRIGHT( hn1, &e1 ); } break; case NODE_CONST: /* Constant. */ switch( pn->con.type ) { case PARSE_CONST_STR: { Managedstring *managedstring; if( !(managedstring = managedstring_find( reduce_context->heap, pn->con.val.str )) ) return( FALSE ); MANAGED_REF( managedstring ); compile->statics = g_slist_prepend( compile->statics, managedstring ); PEPUTP( out, ELEMENT_MANAGED, managedstring ); } break; case PARSE_CONST_CHAR: PEPUTP( out, ELEMENT_CHAR, pn->con.val.ch ); break; case PARSE_CONST_BOOL: PEPUTP( out, ELEMENT_BOOL, pn->con.val.bool ); break; case PARSE_CONST_ELIST: PEPUTP( out, ELEMENT_ELIST, NULL ); break; case PARSE_CONST_NUM: if( !heap_real_new( heap, pn->con.val.num, out ) ) return( FALSE ); break; case PARSE_CONST_COMPLEX: if( !heap_complex_new( heap, 0, pn->con.val.num, out ) ) return( FALSE ); break; default: g_assert( FALSE ); } break; case NODE_NONE: default: g_assert( FALSE ); } return( TRUE ); } /* Parameter abstraction. */ /* Abstract a symbol from the body of a piece of graph. Set *used if we found * the symbol in this piece of graph ... ie. if our caller should add an * Sx-combinator for us. Update *root with the new piece of graph. */ static int compile_abstract_body( Compile *compile, PElement *root, Symbol *sym, gboolean *used ) { Heap *heap = compile->heap; HeapNode *hn; HeapNode *hn1; PElement e1, e2; gboolean b1, b2; CombinatorType comb; switch( PEGETTYPE( root ) ) { case ELEMENT_NODE: hn = PEGETVAL( root ); switch( hn->type ) { case TAG_APPL: case TAG_CONS: b1 = FALSE; b2 = FALSE; PEPOINTLEFT( hn, &e1 ); PEPOINTRIGHT( hn, &e2 ); if( compile_abstract_body( compile, &e1, sym, &b1 ) || compile_abstract_body( compile, &e2, sym, &b2 ) ) return( -1 ); if( PEISCOMB( &e2 ) && PEGETCOMB( &e2 ) == COMB_I && !b1 && b2 && hn->type == TAG_APPL ) { PEPUTPE( root, &e1 ); *used = TRUE; } else if( b1 || b2 ) { if( b1 && !b2 ) comb = COMB_SL; else if( !b1 && b2 ) comb = COMB_SR; else comb = COMB_S; /* Generate Sx combinator. */ if( NEWNODE( heap, hn1 ) ) return( -1 ); hn1->type = TAG_APPL; PPUTLEFT( hn1, ELEMENT_COMB, comb ); PEPUTRIGHT( hn1, &e1 ); PEPUTP( &e1, ELEMENT_NODE, hn1 ); /* We've used the var too! */ *used = TRUE; } break; case TAG_DOUBLE: case TAG_COMPLEX: case TAG_CLASS: case TAG_GEN: break; case TAG_FILE: case TAG_FREE: default: g_assert( FALSE ); } break; case ELEMENT_SYMBOL: if( SYMBOL( PEGETVAL( root ) ) == sym ) { /* Found an instance! Make an I combinator. */ *used = TRUE; PEPUTP( root, ELEMENT_COMB, COMB_I ); } break; case ELEMENT_CONSTRUCTOR: /* set used .. to stop K being generated for this * class parameter. */ *used = TRUE; break; case ELEMENT_MANAGED: case ELEMENT_CHAR: case ELEMENT_BOOL: case ELEMENT_BINOP: case ELEMENT_UNOP: case ELEMENT_COMB: case ELEMENT_ELIST: case ELEMENT_SYMREF: case ELEMENT_COMPILEREF: case ELEMENT_NOVAL: case ELEMENT_TAG: /* Leave alone. */ break; default: g_assert( FALSE ); } return( 0 ); } /* Abstract a symbol from a graph. As above, but make a K if the symbol is * entirely unused. */ static void * compile_abstract_symbol( Symbol *sym, Compile *compile, PElement *root ) { Heap *heap = compile->heap; gboolean b; #ifdef DEBUG printf( "abstracting " ); symbol_name_print( sym ); printf( "\n" ); #endif /*DEBUG*/ b = FALSE; if( compile_abstract_body( compile, root, sym, &b ) ) return( sym ); if( !b ) { HeapNode *hn1; /* Parameter not used! Need a K. */ if( NEWNODE( heap, hn1 ) ) return( sym ); hn1->type = TAG_APPL; PPUTLEFT( hn1, ELEMENT_COMB, COMB_K ); PEPUTRIGHT( hn1, root ); /* Update root. */ PEPUTP( root, ELEMENT_NODE, hn1 ); } return( NULL ); } /* Common sub-expression elimination. */ #ifdef DEBUG_COMMON static void * compile_node_count_sub( HeapNode *hn, int *n ) { *n += 1; return( NULL ); } static int compile_node_count( HeapNode *hn ) { int n; n = 0; heap_map( hn, (heap_map_fn) compile_node_count_sub, &n, NULL ); return( n ); } /* Accumulate total saved here during walk of this tree. */ static int compile_node_sum; #endif /*DEBUG_COMMON*/ /* A hash code we calculate from a bit of heap. */ typedef gpointer CompileHash; /* Combine two hashes. */ #define COMPILEHASH_ADD( A, B ) \ GUINT_TO_POINTER( GPOINTER_TO_UINT( A ) + GPOINTER_TO_UINT( B ) ) /* An int to a hash. */ #define INT_TO_HASH GUINT_TO_POINTER /* Build one of these during sharing analysis. From node pointers to * hash codes, and from hash codes to a list of matching node pointers. */ typedef struct _CompileShare { Compile *compile; GHashTable *node2hash; GHashTable *hash2nodel; } CompileShare; static gboolean compile_share_destroy_sub( gpointer key, gpointer value, gpointer user_data ) { if( value ) g_slist_free( (GSList *) value ); return( TRUE ); } static void compile_share_destroy( CompileShare *share ) { share->compile = NULL; if( share->node2hash ) { g_hash_table_destroy( share->node2hash ); share->node2hash = NULL; } if( share->hash2nodel ) { g_hash_table_foreach_remove( share->hash2nodel, compile_share_destroy_sub, NULL ); g_hash_table_destroy( share->hash2nodel ); share->hash2nodel = NULL; } } static void compile_share_init( CompileShare *share, Compile *compile ) { share->compile = compile; share->node2hash = g_hash_table_new( NULL, g_direct_equal ); share->hash2nodel = g_hash_table_new( NULL, g_direct_equal ); } /* Remove a heapnode from the share. */ static void * compile_share_remove( HeapNode *hn, CompileShare *share ) { CompileHash hash; if( (hash = g_hash_table_lookup( share->node2hash, hn )) ) { GSList *nodel; if( (nodel = g_hash_table_lookup( share->hash2nodel, hash )) ) { nodel = slist_remove_all( nodel, hn ); g_hash_table_replace( share->hash2nodel, hash, nodel ); } g_hash_table_remove( share->node2hash, hn ); } return( NULL ); } /* Add a new heapnode. */ static void compile_share_add( CompileShare *share, HeapNode *hn, CompileHash hash ) { /* Make sure hash is non-zero (very unlikely). */ if( !hash ) hash = INT_TO_HASH( 1 ); if( !g_hash_table_lookup( share->node2hash, hn ) ) { GSList *nodel; g_hash_table_insert( share->node2hash, hn, hash ); if( (nodel = g_hash_table_lookup( share->hash2nodel, hash )) ) { nodel = g_slist_prepend( nodel, hn ); g_hash_table_replace( share->hash2nodel, hash, nodel ); } else { nodel = g_slist_prepend( NULL, hn ); g_hash_table_insert( share->hash2nodel, hash, nodel ); } } } /* From a HeapNode, find a list of the other heapnodes which hashed to the same * value. */ static GSList * compile_share_lookup( CompileShare *share, HeapNode *hn ) { CompileHash hash; if( (hash = (CompileHash) g_hash_table_lookup( share->node2hash, hn )) ) return( g_hash_table_lookup( share->hash2nodel, (gpointer) hash ) ); return( NULL ); } static CompileHash compile_share_scan_node( CompileShare *share, HeapNode *hn ); static CompileHash compile_share_scan_element( CompileShare *share, PElement *e ) { CompileHash hash; switch( PEGETTYPE( e ) ) { case ELEMENT_NODE: hash = compile_share_scan_node( share, PEGETVAL( e ) ); break; case ELEMENT_SYMBOL: case ELEMENT_SYMREF: case ELEMENT_COMPILEREF: case ELEMENT_CHAR: case ELEMENT_BOOL: case ELEMENT_BINOP: case ELEMENT_UNOP: case ELEMENT_COMB: case ELEMENT_CONSTRUCTOR: hash = INT_TO_HASH( PEGETTYPE( e ) + PEGETVAL( e ) ); break; case ELEMENT_ELIST: hash = INT_TO_HASH( ELEMENT_ELIST ); break; case ELEMENT_TAG: hash = INT_TO_HASH( g_str_hash( PEGETTAG( e ) ) ); break; case ELEMENT_MANAGED: hash = INT_TO_HASH( PEGETMANAGED( e )->hash ); break; case ELEMENT_NOVAL: default: hash = 0; g_assert( 0 ); } return( hash ); } /* Calculate a hash for every node in a tree. We can just recurse and * calculate bottom-up, since we'll never get very deep. If we were scanning * run-time code, we'd need a better scheme. */ static CompileHash compile_share_scan_node( CompileShare *share, HeapNode *hn ) { CompileHash hash; PElement a; hash = INT_TO_HASH( 0 ); switch( hn->type ) { case TAG_CONS: case TAG_GEN: case TAG_CLASS: case TAG_COMPLEX: case TAG_APPL: PEPOINTLEFT( hn, &a ); hash = COMPILEHASH_ADD( hash, compile_share_scan_element( share, &a ) ); PEPOINTRIGHT( hn, &a ); hash = COMPILEHASH_ADD( hash, compile_share_scan_element( share, &a ) ); hash = COMPILEHASH_ADD( hash, INT_TO_HASH( (int) hn->type ) ); break; case TAG_DOUBLE: hash = COMPILEHASH_ADD( hash, INT_TO_HASH( (int) hn->body.num ) ); hash = COMPILEHASH_ADD( hash, INT_TO_HASH( (int) hn->type ) ); break; case TAG_FILE: case TAG_REFERENCE: case TAG_SHARED: case TAG_FREE: default: g_assert( FALSE ); } /* Add to accumulated table. */ compile_share_add( share, hn, hash ); return( hash ); } /* Test two sub-trees for equality. */ static gboolean compile_equal_node( HeapNode *hn1, HeapNode *hn2 ) { /* Test for pointer equality. */ if( hn1 == hn2 ) return( TRUE ); /* Test type tags for equality. */ if( hn1->type != hn2->type ) return( FALSE ); /* If double, test immediately. */ if( hn1->type == TAG_DOUBLE ) { if( hn1->body.num == hn2->body.num ) return( TRUE ); else return( FALSE ); } /* If complex, test immediately. */ if( hn1->type == TAG_COMPLEX ) { if( GETLEFT( hn1 )->body.num == GETLEFT( hn2 )->body.num && GETRIGHT( hn1 )->body.num == GETRIGHT( hn2 )->body.num ) return( TRUE ); else return( FALSE ); } /* If compound type, something is wrong! Only built by reduce. */ g_assert( hn1->type != TAG_CLASS ); /* In two parts, test tags. */ if( GETLT( hn1 ) != GETLT( hn2 ) ) return( FALSE ); if( GETRT( hn1 ) != GETRT( hn2 ) ) return( FALSE ); /* Test non-subtree parts. */ if( GETLT( hn1 ) != ELEMENT_NODE ) if( GETLEFT( hn1 ) != GETLEFT( hn2 ) ) return( FALSE ); if( GETRT( hn1 ) != ELEMENT_NODE ) if( GETRIGHT( hn1 ) != GETRIGHT( hn2 ) ) return( FALSE ); /* If sub-trees, test them. */ if( GETLT( hn1 ) == ELEMENT_NODE ) if( !compile_equal_node( GETLEFT( hn1 ), GETLEFT( hn2 ) ) ) return( FALSE ); if( GETRT( hn1 ) == ELEMENT_NODE ) if( !compile_equal_node( GETRIGHT( hn1 ), GETRIGHT( hn2 ) ) ) return( FALSE ); return( TRUE ); } /* Found two equal sub-expressions. We can change hn1 to just be a reference * to hn2. */ static int compile_transform_reference( Compile *compile, HeapNode *hn1, HeapNode *hn2 ) { #ifdef DEBUG { Heap *heap = compile->heap; char txt[100]; VipsBuf buf = VIPS_BUF_STATIC( txt ); graph_node( heap, &buf, hn1, TRUE ); printf( "Found common subexpression: %s\n", vips_buf_all( &buf ) ); } #endif /*DEBUG*/ #ifdef DEBUG_COMMON compile_node_sum += compile_node_count( hn1 ); #endif /*DEBUG_COMMON*/ /* Zap nodes to indicate sharing. */ hn1->type = TAG_REFERENCE; PPUTLEFT( hn1, ELEMENT_NODE, hn2 ); PPUTRIGHT( hn1, ELEMENT_NODE, NULL ); return( 0 ); } /* Node other hashes to the same value as our node. Test for equality, and if * they match, turn us into a share point and turn the other node into a ref. */ static void * compile_share_test( HeapNode *other, CompileShare *share, HeapNode *hn ) { if( hn != other && compile_equal_node( hn, other ) ) { heap_map( other, (heap_map_fn) compile_share_remove, share, NULL ); compile_transform_reference( share->compile, other, hn ); } return( NULL ); } /* Scan a chunk of tree top-down, looking for and eliminating common nodes. */ static void compile_share_trim( CompileShare *share, HeapNode *hn ) { PElement a; GSList *nodel; if( (nodel = compile_share_lookup( share, hn )) ) slist_map2( nodel, (SListMap2Fn) compile_share_test, share, hn ); switch( hn->type ) { case TAG_CONS: case TAG_GEN: case TAG_CLASS: case TAG_COMPLEX: case TAG_APPL: PEPOINTLEFT( hn, &a ); if( PEISNODE( &a ) ) compile_share_trim( share, PEGETVAL( &a ) ); PEPOINTRIGHT( hn, &a ); if( PEISNODE( &a ) ) compile_share_trim( share, PEGETVAL( &a ) ); break; case TAG_DOUBLE: case TAG_REFERENCE: break; case TAG_SHARED: case TAG_FREE: case TAG_FILE: default: g_assert( FALSE ); } } static void compile_share_scan( Compile *compile, PElement *a ) { if( PEISNODE( a ) ) { HeapNode *hn = PEGETVAL( a ); CompileShare share; compile_share_init( &share, compile ); compile_share_scan_node( &share, hn ); compile_share_trim( &share, hn ); compile_share_destroy( &share ); } } /* Use this to generate an id for each SHARE node. */ static int compile_share_number = 0; /* If this is a REF node, make sure dest is a SHARE node. */ static void * compile_transform_share( HeapNode *hn, Compile *compile ) { Heap *heap = compile->heap; if( hn->type == TAG_REFERENCE ) { HeapNode *hn1 = GETLEFT( hn ); if( hn1->type != TAG_SHARED ) { HeapNode *hn2; #ifdef DEBUG { char txt[100]; VipsBuf buf = VIPS_BUF_STATIC( txt ); graph_node( heap, &buf, hn1, TRUE ); printf( "Found shared code: %s\n", vips_buf_all( &buf ) ); } #endif /*DEBUG*/ if( NEWNODE( heap, hn2 ) ) return( hn ); *hn2 = *hn1; hn1->type = TAG_SHARED; PPUT( hn1, ELEMENT_NODE, hn2, ELEMENT_CHAR, GUINT_TO_POINTER( compile_share_number ) ); compile_share_number++; if( compile_share_number == MAX_RELOC ) { error_top( _( "Too many shared nodes in " "graph." ) ); error_sub( _( "Raise MAX_RELOC" ) ); return( hn ); } } } return( NULL ); } /* Do common-subexpression elimination. */ static gboolean compile_remove_subexpr( Compile *compile, PElement *root ) { HeapNode *rootn = PEGETVAL( root ); #ifdef DEBUG_COMMON static int compile_node_total = 0; #endif /*DEBUG_COMMON*/ if( PEGETTYPE( root ) != ELEMENT_NODE ) /* Nowt to do. */ return( TRUE ); #ifdef DEBUG_COMMON compile_node_sum = 0; #endif /*DEBUG_COMMON*/ /* Scan for common nodes, replace stuff we remove with REFERENCE * nodes. */ compile_share_scan( compile, root ); /* Now search for destinations of reference nodes and mark all shared * sections. Each shared section is given a number ... saves a lookup * during copy. */ compile_share_number = 0; if( heap_map( rootn, (heap_map_fn) compile_transform_share, compile, NULL ) ) { /* We can't leave the graph half-done, it'll confuse the copier * later. Zap the graph. */ PEPUTP( root, ELEMENT_NOVAL, NULL ); return( FALSE ); } #ifdef DEBUG_COMMON if( compile_node_sum ) { compile_node_total += compile_node_sum; printf( "compile_remove_subexpr: " ); symbol_name_print( compile->sym ); printf( "saved %d nodes (total %d)\n", compile_node_sum, compile_node_total ); } #endif /*DEBUG_COMMON*/ return( TRUE ); } /* Top-level compiler driver. */ /* Compile a symbol into a heap. */ static void * compile_heap( Compile *compile ) { PElement base; /* Don't generate code for parser temps. */ if( compile->sym->placeholder ) return( NULL ); PEPOINTE( &base, &compile->base ); /* Is there an existing function base? GC it away. */ if( PEGETTYPE( &base ) != ELEMENT_NOVAL ) { PEPUTP( &base, ELEMENT_NOVAL, (void *) 2 ); if( !heap_gc( compile->heap ) ) return( compile->sym ); return( NULL ); } #ifdef DEBUG printf( "*** compile_expr: about to compile " ); symbol_name_print( compile->sym ); printf( "\n" ); if( compile->tree ) dump_tree( compile->tree ); #endif /*DEBUG*/ /* Compile function body. Tree can be NULL for classes. */ if( compile->tree ) { if( !compile_graph( compile, compile->tree, &base ) ) return( compile->sym ); } else { PEPUTP( &base, ELEMENT_NOVAL, (void *) 3 ); } #ifdef DEBUG { char txt[1024]; VipsBuf buf = VIPS_BUF_STATIC( txt ); graph_pelement( compile->heap, &buf, &base, TRUE ); printf( "before var abstraction, compiled \"%s\" to: %s\n", IOBJECT( compile->sym )->name, vips_buf_all( &buf ) ); } #endif /*DEBUG*/ /* Abstract real parameters. */ #ifdef DEBUG printf( "abstracting real params ...\n" ); #endif /*DEBUG*/ if( slist_map2_rev( compile->param, (SListMap2Fn) compile_abstract_symbol, compile, &base ) ) return( compile->sym ); /* Abstract secret parameters. */ #ifdef DEBUG printf( "abstracting secret params ...\n" ); #endif /*DEBUG*/ if( slist_map2_rev( compile->secret, (SListMap2Fn) compile_abstract_symbol, compile, &base ) ) return( compile->sym ); /* Remove common sub-expressions. */ if( !compile_remove_subexpr( compile, &base ) ) return( compile->sym ); #ifdef DEBUG_RESULT { char txt[1024]; VipsBuf buf = VIPS_BUF_STATIC( txt ); printf( "compiled " ); symbol_name_print( compile->sym ); printf( "to: " ); graph_pelement( compile->heap, &buf, &base, TRUE ); printf( "%s\n", vips_buf_all( &buf ) ); } #endif /*DEBUG_RESULT*/ return( NULL ); } static void *compile_object_sub( Compile *compile ); static void * compile_symbol_sub( Symbol *sym ) { Compile *compile; if( sym->expr && (compile = sym->expr->compile) ) if( compile_object_sub( compile ) ) return( sym ); return( NULL ); } static void * compile_object_sub( Compile *compile ) { if( icontainer_map( ICONTAINER( compile ), (icontainer_map_fn) compile_symbol_sub, NULL, NULL ) ) return( compile ); if( compile_heap( compile ) ) return( compile ); return( NULL ); } /* Top-level compile a thing entry point. */ void * compile_object( Compile *compile ) { /* Walk this tree of symbols computing the secret lists. */ secret_build( compile ); /* Compile all definitions from the inside out. */ if( compile_object_sub( compile ) ) return( compile ); return( NULL ); } static void * compile_toolkit_sub( Tool *tool ) { Compile *compile; if( tool->sym && tool->sym->expr && (compile = tool->sym->expr->compile )) /* Only if we have no code. */ if( compile->base.type == ELEMENT_NOVAL ) if( compile_object( compile ) ) return( tool ); return( NULL ); } /* Scan a toolkit and make sure all the symbols have been compiled. */ void * compile_toolkit( Toolkit *kit ) { return( toolkit_map( kit, (tool_map_fn) compile_toolkit_sub, NULL, NULL ) ); } /* Parse support. */ static ParseNode * compile_check_i18n( Compile *compile, ParseNode *pn ) { switch( pn->type ) { case NODE_APPLY: if( pn->arg1->type == NODE_LEAF && strcmp( IOBJECT( pn->arg1->leaf )->name, "_" ) == 0 && pn->arg2->type == NODE_CONST && pn->arg2->con.type == PARSE_CONST_STR ) { const char *text = pn->arg2->con.val.str; if( main_option_i18n ) { /* Remove msgid duplicates with this. */ static GHashTable *msgid = NULL; if( !msgid ) msgid = g_hash_table_new( g_str_hash, g_str_equal ); if( !g_hash_table_lookup( msgid, text ) ) { char buf[MAX_STRSIZE]; g_hash_table_insert( msgid, (void *) text, NULL ); my_strecpy( buf, text, TRUE ); printf( "msgid \"%s\"\n", buf ); printf( "msgstr \"\"\n\n" ); } } /* We can gettext these at compile time. Replace the * APPLY node with a fixed-up text string. */ pn->type = NODE_CONST; pn->con.type = PARSE_CONST_STR; pn->con.val.str = im_strdupn( _( text ) ); } break; default: break; } return( NULL ); } static ParseNode * compile_check_more( Compile *compile, ParseNode *pn ) { switch( pn->type ) { case NODE_BINOP: switch( pn->biop ) { case BI_MORE: pn->biop = BI_LESS; SWAPP( pn->arg1, pn->arg2 ); break; case BI_MOREEQ: pn->biop = BI_LESSEQ; SWAPP( pn->arg1, pn->arg2 ); break; default: break; } break; default: break; } return( NULL ); } /* Do end-of-parse checks. Called after every 'A = ...' style definition (not * just top-level syms). Used to do lots of checks, not much left now. */ gboolean compile_check( Compile *compile ) { Symbol *sym = compile->sym; Symbol *parent = symbol_get_parent( sym ); /* Check "check" member. */ if( is_member( sym ) && strcmp( IOBJECT( sym )->name, MEMBER_CHECK ) == 0 ) { if( compile->nparam != 0 ) { error_top( _( "Too many arguments." ) ); error_sub( _( "Member \"%s\" of class " "\"%s\" should have no arguments." ), MEMBER_CHECK, symbol_name( parent ) ); return( FALSE ); } } /* Look for (_ "string constant") and pump it through gettext. We can * do a lot of i18n at compile-time. */ #ifdef DEBUG printf( "compile_check_i18n: " ); compile_name_print( compile ); printf( "\n" ); #endif /*DEBUG*/ (void) tree_map( compile, (tree_map_fn) compile_check_i18n, compile->tree, NULL, NULL ); /* Swap MORE and MOREEQ for LESS and LESSEQ. Reduces the number of * cases for the compiler. */ (void) tree_map( compile, (tree_map_fn) compile_check_more, compile->tree, NULL, NULL ); return( TRUE ); } /* Mark error on all exprs using this compile. */ void compile_error_set( Compile *compile ) { (void) slist_map( compile->exprs, (SListMapFn) expr_error_set, NULL ); } /* Patch a pointer on a patch list. */ static void * compile_patch_pointers_sub( void **pnt, void *nsym, void *osym ) { g_assert( *pnt == osym ); *pnt = nsym; return( NULL ); } /* Patch pointers to old to point to new instead. */ static void compile_patch_pointers( Symbol *nsym, Symbol *osym ) { (void) slist_map2( osym->patch, (SListMap2Fn) compile_patch_pointers_sub, nsym, osym ); } /* Sub fn of below. */ static void * compile_resolve_sub( Compile *pnt, Symbol *sym ) { if( !g_slist_find( sym->parents, pnt ) ) sym->parents = g_slist_prepend( sym->parents, pnt ); return( NULL ); } /* Sub fn 2 of below. */ static void * compile_resolve_sub1( Compile *compile ) { return( symbol_fix_counts( compile->sym ) ); } /* We've found a symbol which is the true definition of an unresolved symbol. * We fiddle references to zombie to refer to sym instead. */ static void compile_resolve( Symbol *sym, Symbol *zombie ) { #ifdef DEBUG_RESOLVE printf( "compile_resolve: resolving zombie " ); symbol_name_print( zombie ); printf( "to symbol " ); symbol_name_print( sym ); printf( "\n" ); #endif /*DEBUG_RESOLVE*/ /* Symbol on outer table. Patch pointers to zombie to point to * sym instead. */ compile_patch_pointers( sym, zombie ); /* Also unresolved in outer scope? */ if( sym->type == SYM_ZOMBIE ) /* We may need to move it again - so add the patch * pointers we have just used to the patch list on * sym. */ (void) slist_map( zombie->patch, (SListMapFn) symbol_patch_add, sym ); /* Add other information the ZOMBIE has picked up. We only * need to make the link one way: the patching will make the * other half for us. */ (void) slist_map( zombie->parents, (SListMapFn) compile_resolve_sub, sym ); /* Make sure the dirty counts are set correctly. We have * changed dep (maybe), so need a fiddle. */ (void) slist_map( zombie->parents, (SListMapFn) compile_resolve_sub1, NULL ); /* No one refers to the zombie now. */ IM_FREEF( g_slist_free, zombie->parents ); IDESTROY( zombie ); } /* Sub-function of below. */ static void * compile_resolve_names_sub( Symbol *sym, Compile *outer ) { const char *name = IOBJECT( sym )->name; Symbol *old; /* Is it the sort of thing we are looking for? ZOMBIEs only, please. */ if( sym->type != SYM_ZOMBIE ) return( NULL ); if( (old = compile_lookup( outer, name )) ) compile_resolve( old, sym ); else { /* Nothing on the outer table of that name. Can just move the * symbol across. */ g_object_ref( G_OBJECT( sym ) ); icontainer_child_remove( ICONTAINER( sym ) ); icontainer_child_add( ICONTAINER( outer ), ICONTAINER( sym ), -1 ); g_object_unref( G_OBJECT( sym ) ); } return( NULL ); } /* End of definition parse: we search the symbol table we have built for this * definition, looking for unresolved names (ZOMBIEs). If we find any, we move * the zombie to the enclosing symbol table, since the name may be * resolved one level up. If we find a symbol on the enclosing table of the * same name, we have to patch pointers to our inner ZOMBIE to point to this * new symbol. Nasty! */ void compile_resolve_names( Compile *inner, Compile *outer ) { (void) icontainer_map( ICONTAINER( inner ), (icontainer_map_fn) compile_resolve_names_sub, outer, NULL ); } /* Hit a top-level zombie during reduction. Search outwards to root looking on * enclosing tables for a match. */ Symbol * compile_resolve_top( Symbol *sym ) { Compile *enclosing; for( enclosing = COMPILE( ICONTAINER( sym )->parent ); enclosing; enclosing = compile_get_parent( enclosing ) ) { Symbol *outer_sym; if( (outer_sym = compile_lookup( enclosing, IOBJECT( sym )->name )) && outer_sym->type != SYM_ZOMBIE ) return( outer_sym ); } return( NULL ); } /* Search outwards for this sym. */ static void * compile_resolve_dynamic_sub( Symbol *sym, Compile *context ) { Compile *tab; if( sym->type != SYM_ZOMBIE ) return( NULL ); for( tab = context; tab; tab = compile_get_parent( tab ) ) { Symbol *def = compile_lookup( tab, IOBJECT( sym )->name ); if( def && def->type != SYM_ZOMBIE ) { /* We've found a non-zombie! Bind and we're done. */ compile_resolve( def, sym ); break; } } return( NULL ); } /* Resolve ZOMBIEs in tab by searching outwards from context. We only move * and patch if we find a match ... otherwise we leave the zombie where is is. * * This is used for dynamic exprs in the tally display: we don't care about * fwd refs, but we want to be able to handle multiple scope contexts. */ void compile_resolve_dynamic( Compile *tab, Compile *context ) { (void) icontainer_map( ICONTAINER( tab ), (icontainer_map_fn) compile_resolve_dynamic_sub, context, NULL ); } Symbol * compile_get_member( Compile *compile, const char *name ) { iContainer *child; if( is_class( compile ) && (child = icontainer_child_lookup( ICONTAINER( compile ), name )) ) return( SYMBOL( child ) ); return( NULL ); } const char * compile_get_member_string( Compile *compile, const char *name ) { Symbol *member; Compile *member_compile; if( (member = compile_get_member( compile, name )) && is_value( member ) && (member_compile = member->expr->compile) && member_compile->tree && member_compile->tree->type == NODE_CONST && member_compile->tree->con.type == PARSE_CONST_STR ) return( member_compile->tree->con.val.str ); return( NULL ); } static void * compile_find_generated_node( Compile *compile, ParseNode *node, GSList **list ) { Symbol *sym = node->leaf; if( node->type == NODE_LEAF && sym->generated && symbol_get_parent( sym ) && symbol_get_parent( sym )->expr->compile == compile ) *list = g_slist_prepend( *list, sym ); return( NULL ); } /* Search a scrap of tree and build a list of all the lambdas/lcomps/etc. it * generated. */ static GSList * compile_find_generated( Compile *compile, ParseNode *tree ) { GSList *list; list = NULL; tree_map( compile, (tree_map_fn) compile_find_generated_node, tree, &list, NULL ); return( list ); } /* Make a copy of sym (and all it's children and trees) in the destination * scope. This only works for stuff from the parse stage. Symbols which have * values and stuff attached are too complicated to copy easily. */ static void * compile_copy_sym( Symbol *sym, Compile *dest ) { const char *name = IOBJECT( sym )->name; Symbol *copy_sym; #ifdef DEBUG printf( "compile_copy_sym: copying " ); symbol_name_print( sym ); printf( "to scope of " ); compile_name_print( dest ); printf( "\n" ); #endif /*DEBUG*/ /* Must be a different place. */ g_assert( symbol_get_parent( sym )->expr->compile != dest ); /* Must not be an existing sym of that name. Or if there is, it has to * be a zombie. */ g_assert( !compile_lookup( dest, name ) || compile_lookup( dest, name )->type == SYM_ZOMBIE ); switch( sym->type ) { case SYM_VALUE: copy_sym = symbol_new_defining( dest, name ); copy_sym->generated = sym->generated; (void) symbol_user_init( copy_sym ); (void) compile_new_local( copy_sym->expr ); /* Copy any locals over. We have to do this before we copy the * tree so that the new tree links to the new syms. */ icontainer_map( ICONTAINER( sym->expr->compile ), (icontainer_map_fn) compile_copy_sym, copy_sym->expr->compile, NULL ); copy_sym->expr->compile->tree = tree_copy( copy_sym->expr->compile, sym->expr->compile->tree ); /* Copying the tree may have made some zombies. Resolve * outwards. */ compile_resolve_names( copy_sym->expr->compile, dest ); break; case SYM_PARAM: copy_sym = symbol_new_defining( dest, name ); copy_sym->generated = sym->generated; symbol_parameter_init( copy_sym ); break; case SYM_ZOMBIE: break; case SYM_WORKSPACE: case SYM_WORKSPACEROOT: case SYM_ROOT: case SYM_EXTERNAL: case SYM_BUILTIN: default: g_assert( 0 ); } return( NULL ); } /* tree is a scrap of graph in fromscope's context. It may have caused the * generation of a number of lambdas, lcomps etc. in fromscope. Make a copy * of the tree in toscope and copy over any generated syms too. fromscope and * toscope can be the same, in which case we can just copy the tree. */ ParseNode * compile_copy_tree( Compile *fromscope, ParseNode *tree, Compile *toscope ) { ParseNode *copy_tree; #ifdef DEBUG printf( "compile_copy_tree: copying tree from " ); compile_name_print( fromscope ); printf( " to " ); compile_name_print( toscope ); printf( "\n" ); #endif /*DEBUG*/ /* A new context? Copy generated syms over. */ if( fromscope != toscope ) { GSList *generated; generated = compile_find_generated( fromscope, tree ); #ifdef DEBUG printf( "with generated children: " ); (void) slist_map( generated, (SListMapFn) dump_tiny, NULL ); printf( "\n" ); #endif /*DEBUG*/ slist_map( generated, (SListMapFn) compile_copy_sym, toscope ); g_slist_free( generated ); } copy_tree = tree_copy( toscope, tree ); /* Copying the tree may have made some zombies. Resolve * outwards. */ compile_resolve_names( toscope, compile_get_parent( toscope ) ); return( copy_tree ); } /* Generate the parse tree for this list comprehension. Example: after parse we have: [(x, y) :: x <- [1..3]; y <- [x..3]; x + y > 3]; ... $$lcomp1 ... { $$lcomp1 = NULL { $$result = (x, y); // elements in left-to-right order // in compile->children x = [1..3] y = [x..3] $$filter1 = x + y > 3 } } and we generate this code: z = $$lcomp1 { $$lcomp1 = foldr $f1 [] [1..3] { $f1 x $sofar = foldr $f2 $sofar [x..3] { $f2 y $sofar = if x + y > 3 then $f3 else $sofar { $f3 = (x, y) : $sofar; } } } } */ /* Find the placeholders generated by the parser. Filters, generators, * patterns and $$result. */ static void * compile_lcomp_find( Symbol *sym, GSList **children ) { if( sym->placeholder ) *children = g_slist_append( *children, sym ); return( NULL ); } static Symbol * compile_lcomp_find_pattern( GSList *children, const char *generator ) { int n; char pattern[256]; GSList *p; if( sscanf( generator, "$$generator%d", &n ) != 1 ) return( NULL ); im_snprintf( pattern, 256, "$$pattern%d", n ); for( p = children; p; p = p->next ) { Symbol *sym = (Symbol *) p->data; if( strcmp( IOBJECT( sym )->name, pattern ) == 0 ) return( sym ); } return( NULL ); } void compile_lcomp( Compile *compile ) { /* Number nested locals with this. Keep numbering global so debugging * nested lcomps is easier. */ static int count = 1; GSList *children; gboolean sofar; Compile *scope; Symbol *result; GSList *p; Symbol *child; char name[256]; ParseNode *n1, *n2, *n3; #ifdef DEBUG_LCOMP printf( "before compile_lcomp:\n" ); dump_compile( compile ); #endif /*DEBUG_LCOMP*/ /* Find all the elements of the lcomp: generators, filters, patterns * and $$result. */ children = NULL; (void) icontainer_map( ICONTAINER( compile ), (icontainer_map_fn) compile_lcomp_find, &children, NULL ); #ifdef DEBUG_LCOMP printf( "list comp " ); compile_name_print( compile ); printf( " has children: " ); (void) slist_map( children, (SListMapFn) dump_tiny, NULL ); printf( "\n" ); #endif /*DEBUG_LCOMP*/ /* As yet no list to build on. */ sofar = FALSE; /* Start by building a tree in this scope. */ scope = compile; /* Not seen the result element yet, but we should. */ result = NULL; /* Now generate code for each element, either a filter or a generator. * If we do a generator, we need to search for the associated pattern * and expand it. */ for( p = children; p; p = p->next ) { Symbol *element = (Symbol *) p->data; /* Just note the result element ... we use it right at the end. */ if( strcmp( "$$result", IOBJECT( element )->name ) == 0 ) { result = element; continue; } /* And only process filter/gen. */ if( !is_prefix( "$$filter", IOBJECT( element )->name ) && !is_prefix( "$$gen", IOBJECT( element )->name ) ) continue; /* Start the next nest in. child is the local we will make for * this scope. */ im_snprintf( name, 256, "$$fn%d", count++ ); child = symbol_new_defining( scope, name ); child->generated = TRUE; (void) symbol_user_init( child ); (void) compile_new_local( child->expr ); if( is_prefix( "$$filter", IOBJECT( element )->name ) ) { /* A filter. */ n1 = compile_copy_tree( compile, element->expr->compile->tree, scope ); n2 = tree_leafsym_new( scope, child ); n3 = tree_leaf_new( scope, "$$sofar" ); n1 = tree_ifelse_new( scope, n1, n2, n3 ); scope->tree = n1; } else if( is_prefix( "$$gen", IOBJECT( element )->name ) ) { Symbol *param1; Symbol *param2; Symbol *pattern; GSList *built_syms; /* A generator. */ param1 = symbol_new_defining( child->expr->compile, IOBJECT( element )->name ); param1->generated = TRUE; symbol_parameter_init( param1 ); param2 = symbol_new_defining( child->expr->compile, "$$sofar" ); param2->generated = TRUE; symbol_parameter_init( param2 ); /* Now expand the pattern: it will access parts of the * $$generator argument. */ pattern = compile_lcomp_find_pattern( children, IOBJECT( element )->name ); g_assert( pattern ); built_syms = compile_pattern_lhs( child->expr->compile, param1, pattern->expr->compile->tree ); g_slist_free( built_syms ); /* Make the "foldr $$fn $sofar expr" tree. */ n1 = tree_leaf_new( scope, "foldr" ); n2 = tree_leafsym_new( scope, child ); n3 = tree_appl_new( scope, n1, n2 ); if( sofar ) n2 = tree_leaf_new( scope, "$$sofar" ); else { ParseConst con; con.type = PARSE_CONST_ELIST; n2 = tree_const_new( scope, con ); } n3 = tree_appl_new( scope, n3, n2 ); n2 = compile_copy_tree( compile, element->expr->compile->tree, scope ); n3 = tree_appl_new( scope, n3, n2 ); scope->tree = n3; /* There's now an enclosing sofar we can use. */ sofar = TRUE; } /* Nest in again. */ scope = child->expr->compile; } /* Copy the code for the final result. */ g_assert( result ); n1 = compile_copy_tree( result->expr->compile, result->expr->compile->tree, scope ); n2 = tree_leaf_new( scope, "$$sofar" ); n3 = tree_binop_new( compile, BI_CONS, n1, n2 ); scope->tree = n3; /* Loop outwards again, closing the scopes we made. */ while( scope != compile ) { /* We know check can't fail on generated code. FIXME ... yuk, maybe compile_lcomp should be failable too */ (void) compile_check( scope ); compile_resolve_names( scope, compile_get_parent( scope ) ); scope = compile_get_parent( scope ); } #ifdef DEBUG_LCOMP printf( "after compile_lcomp:\n" ); dump_compile( compile ); #endif /*DEBUG_LCOMP*/ g_slist_free( children ); } /* Compile a pattern LHS. Generate a sym for each pattern variable, each of * which checks and accesses sym. For example: * * [a] = x; * * compiles to: * * sym = x; * a = if is_list sym && len sym == 1 then sym?0 else error ".."; */ /* Generate code to access element n of a pattern trail. Eg, pattern is * [[[a]]] * the trail will be * 0) LISTCONST 1) LISTCONST 2) LISTCONST 3) LEAF * then access(0) will be * leaf * and access(1) will be * leaf?0 * and access(3) (to get the value for a) will be * leaf?0?0?0 */ static ParseNode * compile_pattern_access( Compile *compile, Symbol *leaf, ParseNode **trail, int n ) { ParseNode *node; ParseNode *left; ParseNode *right; ParseConst c; int i; /* The initial leaf ref we access from. */ node = tree_leafsym_new( compile, leaf ); for( i = 0; i < n; i++ ) switch( trail[i]->type ) { case NODE_CONST: case NODE_PATTERN_CLASS: case NODE_LEAF: break; case NODE_BINOP: switch( trail[i]->biop ) { case BI_COMMA: /* Generate re or im? */ if( trail[i]->arg1 == trail[i + 1] ) left = tree_leaf_new( compile, "re" ); else left = tree_leaf_new( compile, "im" ); node = tree_appl_new( compile, left, node ); break; case BI_CONS: /* Generate hd or tl? */ if( trail[i]->arg1 == trail[i + 1] ) left = tree_leaf_new( compile, "hd" ); else left = tree_leaf_new( compile, "tl" ); node = tree_appl_new( compile, left, node ); break; default: g_assert( 0 ); } break; case NODE_LISTCONST: /* Which list element do we need? Look for the next * item in the trail in the list of elements. */ c.type = PARSE_CONST_NUM; c.val.num = g_slist_index( trail[i]->elist, trail[i + 1] ); right = tree_const_new( compile, c ); node = tree_binop_new( compile, BI_SELECT, node, right ); break; default: g_assert( 0 ); } return( node ); } /* Generate a parsetree for the condition test. The array of nodes represents * the set of conditions we have to test, left to right. */ static ParseNode * compile_pattern_condition( Compile *compile, Symbol *leaf, ParseNode **trail, int depth ) { ParseConst n; ParseNode *node; ParseNode *node2; ParseNode *left; ParseNode *right; int i; n.type = PARSE_CONST_BOOL; n.val.bool = TRUE; node = tree_const_new( compile, n ); for( i = depth - 1; i >= 0; i-- ) { switch( trail[i]->type ) { case NODE_LEAF: break; case NODE_BINOP: switch( trail[i]->biop ) { case BI_COMMA: /* Generate is_complex x. */ left = tree_leaf_new( compile, "is_complex" ); right = compile_pattern_access( compile, leaf, trail, i ); node2 = tree_appl_new( compile, left, right ); node = tree_binop_new( compile, BI_LAND, node2, node ); break; case BI_CONS: /* Generate is_list x && x != []. */ left = tree_leaf_new( compile, "is_list" ); right = compile_pattern_access( compile, leaf, trail, i ); node2 = tree_appl_new( compile, left, right ); node = tree_binop_new( compile, BI_LAND, node2, node ); left = compile_pattern_access( compile, leaf, trail, i ); n.type = PARSE_CONST_ELIST; right = tree_const_new( compile, n ); node2 = tree_binop_new( compile, BI_NOTEQ, left, right ); node = tree_binop_new( compile, BI_LAND, node, node2 ); break; default: g_assert( 0 ); } break; case NODE_LISTCONST: /* Generate is_list x && is_list_len n x. */ left = tree_leaf_new( compile, "is_list" ); right = compile_pattern_access( compile, leaf, trail, i ); node2 = tree_appl_new( compile, left, right ); node = tree_binop_new( compile, BI_LAND, node2, node ); left = tree_leaf_new( compile, "is_list_len" ); n.type = PARSE_CONST_NUM; n.val.num = g_slist_length( trail[i]->elist ); right = tree_const_new( compile, n ); left = tree_appl_new( compile, left, right ); right = compile_pattern_access( compile, leaf, trail, i ); node2 = tree_appl_new( compile, left, right ); node = tree_binop_new( compile, BI_LAND, node, node2 ); break; case NODE_CONST: /* Generate x == n. */ left = compile_pattern_access( compile, leaf, trail, i ); right = tree_const_new( compile, trail[i]->con ); node2 = tree_binop_new( compile, BI_EQ, left, right ); node = tree_binop_new( compile, BI_LAND, node2, node ); break; case NODE_PATTERN_CLASS: /* Generate is_instanceof "class-name" x. */ left = tree_leaf_new( compile, "is_instanceof" ); n.type = PARSE_CONST_STR; n.val.str = im_strdupn( trail[i]->tag ); right = tree_const_new( compile, n ); node2 = tree_appl_new( compile, left, right ); right = compile_pattern_access( compile, leaf, trail, i ); node2 = tree_appl_new( compile, node2, right ); node = tree_binop_new( compile, BI_LAND, node2, node ); break; default: g_assert( 0 ); } } return( node ); } /* Generate a parsetree for a "pattern match failed" error. */ static ParseNode * compile_pattern_error( Compile *compile, Symbol *leaf ) { ParseNode *left; ParseConst n; ParseNode *right; ParseNode *node; left = tree_leaf_new( compile, "error" ); n.type = PARSE_CONST_STR; n.val.str = im_strdupn( _( "pattern match failed" ) ); right = tree_const_new( compile, n ); node = tree_appl_new( compile, left, right ); return( node ); } /* Depth of trail we keep as we walk the pattern. */ #define MAX_TRAIL (10) typedef struct _PatternLhs { Compile *compile; /* Scope in which we generate new symbols */ Symbol *sym; /* Thing we access */ /* The trail of nodes representing this slice of the pattern. */ ParseNode *trail[MAX_TRAIL]; int depth; GSList *built_syms; } PatternLhs; /* Generate one reference. leaf is the new sym we generate. */ static void compile_pattern_lhs_leaf( PatternLhs *lhs, Symbol *leaf ) { Symbol *sym; Compile *compile; sym = symbol_new_defining( lhs->compile, IOBJECT( leaf )->name ); sym->generated = TRUE; (void) symbol_user_init( sym ); (void) compile_new_local( sym->expr ); lhs->built_syms = g_slist_prepend( lhs->built_syms, sym ); compile = sym->expr->compile; compile->tree = tree_ifelse_new( compile, compile_pattern_condition( compile, lhs->sym, lhs->trail, lhs->depth ), compile_pattern_access( compile, lhs->sym, lhs->trail, lhs->depth ), compile_pattern_error( compile, leaf ) ); #ifdef DEBUG_PATTERN printf( "compile_pattern_lhs_leaf: generated\n" ); dump_compile( compile ); #endif /*DEBUG_PATTERN*/ } /* Recurse over the pattern generating references. */ static void * compile_pattern_lhs_sub( ParseNode *node, PatternLhs *lhs ) { lhs->trail[lhs->depth++] = node; switch( node->type ) { case NODE_LEAF: compile_pattern_lhs_leaf( lhs, node->leaf ); break; case NODE_PATTERN_CLASS: compile_pattern_lhs_sub( node->arg1, lhs ); break; case NODE_BINOP: compile_pattern_lhs_sub( node->arg1, lhs ); compile_pattern_lhs_sub( node->arg2, lhs ); break; case NODE_LISTCONST: slist_map( node->elist, (SListMapFn) compile_pattern_lhs_sub, lhs ); break; case NODE_CONST: break; default: g_assert( 0 ); } lhs->depth--; return( NULL ); } /* Something like "[a] = [1];". sym is the $$pattern we are generating access * syms for, node is the pattern tree, compile is the scope in which we * generate the new defining symbols. Return a list of the syms we built: they * will need any final finishing up and then having symbol_made() called on * them. You need to free the list, too. */ GSList * compile_pattern_lhs( Compile *compile, Symbol *sym, ParseNode *node ) { PatternLhs lhs; #ifdef DEBUG_PATTERN printf( "compile_pattern_lhs: building access fns for %s\n", symbol_name( sym ) ); #endif /*DEBUG_PATTERN*/ lhs.compile = compile; lhs.sym = sym; lhs.depth = 0; lhs.built_syms = NULL; compile_pattern_lhs_sub( node, &lhs ); g_assert( lhs.depth == 0 ); return( lhs.built_syms ); } static ParseNode * compile_pattern_has_leaf_sub( Compile *compile, ParseNode *node, void *a, void *b ) { if( node->type == NODE_LEAF ) return( node ); return( NULL ); } /* Does a pattern contain a leaf? We don't allow const-only patterns in * definitions. */ gboolean compile_pattern_has_leaf( ParseNode *node ) { return( tree_map( NULL, (tree_map_fn) compile_pattern_has_leaf_sub, node, NULL, NULL ) != NULL ); } nip2-8.7.0/src/panechild.h0000644000175000017500000000323513224651032012207 00000000000000/* The thing that sits in a pane showing the title and close button. */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_PANECHILD (panechild_get_type()) #define PANECHILD( obj ) \ (GTK_CHECK_CAST( (obj), TYPE_PANECHILD, Panechild )) #define PANECHILD_CLASS( klass ) \ (GTK_CHECK_CLASS_CAST( (klass), TYPE_PANECHILD, PanechildClass )) #define IS_PANECHILD( obj ) \ (GTK_CHECK_TYPE( (obj), TYPE_PANECHILD )) #define IS_PANECHILD_CLASS( klass ) \ (GTK_CHECK_CLASS_TYPE( (klass), TYPE_PANECHILD )) struct _Panechild { vObject parent_object; Pane *pane; /* The pane we are part of */ const char *title; /* Title we display */ GtkWidget *label; /* Titlebar label */ }; typedef struct _PanechildClass { vObjectClass parent_class; } PanechildClass; GtkType panechild_get_type( void ); Panechild *panechild_new( Pane *pane, const char *title ); nip2-8.7.0/src/numberview.c0000644000175000017500000000606113224651032012436 00000000000000/* a view of a text thingy */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #include "ip.h" static EditviewClass *parent_class = NULL; /* Re-read the text in a tally entry. */ static void * numberview_scan( View *view ) { Numberview *numberview = NUMBERVIEW( view ); Number *number = NUMBER( VOBJECT( numberview )->iobject ); Expr *expr = HEAPMODEL( number )->row->expr; double value; #ifdef DEBUG Row *row = HEAPMODEL( number )->row; printf( "numberview_scan: " ); row_name_print( row ); printf( "\n" ); #endif /*DEBUG*/ expr_error_clear( expr ); if( !get_geditable_double( EDITVIEW( numberview )->text, &value ) ) { expr_error_set( expr ); return( view ); } if( number->value != value ) { number->value = value; classmodel_update( CLASSMODEL( number ) ) ; } return( VIEW_CLASS( parent_class )->scan( view ) ); } static void numberview_refresh( vObject *vobject ) { Numberview *numberview = NUMBERVIEW( vobject ); Number *number = NUMBER( VOBJECT( numberview )->iobject ); #ifdef DEBUG Row *row = HEAPMODEL( number )->row; printf( "numberview_refresh: " ); row_name_print( row ); printf( " (%p)\n", vobject ); #endif /*DEBUG*/ editview_set_entry( EDITVIEW( numberview ), "%g", number->value ); VOBJECT_CLASS( parent_class )->refresh( vobject ); } static void numberview_class_init( NumberviewClass *class ) { ViewClass *view_class = (ViewClass *) class; vObjectClass *vobject_class = (vObjectClass *) class; parent_class = g_type_class_peek_parent( class ); /* Create signals. */ /* Init methods. */ vobject_class->refresh = numberview_refresh; view_class->scan = numberview_scan; } static void numberview_init( Numberview *numberview ) { } GtkType numberview_get_type( void ) { static GtkType type = 0; if( !type ) { static const GtkTypeInfo info = { "Numberview", sizeof( Numberview ), sizeof( NumberviewClass ), (GtkClassInitFunc) numberview_class_init, (GtkObjectInitFunc) numberview_init, /* reserved_1 */ NULL, /* reserved_2 */ NULL, (GtkClassInitFunc) NULL, }; type = gtk_type_unique( TYPE_EDITVIEW, &info ); } return( type ); } View * numberview_new( void ) { Numberview *numberview = gtk_type_new( TYPE_NUMBERVIEW ); return( VIEW( numberview ) ); } nip2-8.7.0/src/view.h0000644000175000017500000001112413224651032011226 00000000000000/* abstract base class for our UI widgets */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_VIEW (view_get_type()) #define VIEW( obj ) (GTK_CHECK_CAST( (obj), TYPE_VIEW, View )) #define VIEW_CLASS( klass ) \ (GTK_CHECK_CLASS_CAST( (klass), TYPE_VIEW, ViewClass )) #define IS_VIEW( obj ) (GTK_CHECK_TYPE( (obj), TYPE_VIEW )) #define IS_VIEW_CLASS( klass ) \ (GTK_CHECK_CLASS_TYPE( (klass), TYPE_VIEW )) #define VIEW_GET_CLASS( obj ) \ (GTK_CHECK_GET_CLASS( (obj), TYPE_VIEW, ViewClass )) /* We track all of the children of our model, listening to "changed", so we * can lazily add or remove child views of us as the model requests. */ typedef struct { View *parent_view; /* Us */ Model *child_model; /* The child we are watching */ guint child_model_changed_sid; /* Listen to "changed" on child here */ View *child_view; /* The child view for this model */ } ViewChild; struct _View { vObject parent_object; /* My instance vars. */ guint pos_changed_sid; /* Signals we use to watch iObject */ guint scrollto_sid; guint layout_sid; guint front_sid; guint reset_sid; guint child_add_sid; guint child_remove_sid; guint child_detach_sid; guint child_attach_sid; View *parent; /* Enclosing view (if any) */ GSList *managed; /* List of ViewChild for us */ gboolean scannable; /* On scannable list */ gboolean resettable; /* On resettable list */ }; typedef struct _ViewClass { vObjectClass parent_class; /* Create/destroy link this view is about to be linked to this model with this parent view child_add this view has just gained a child child_remove this view is about to lose a child child_position this child needs repositioning child_front pop this child to the front display should this child be displayed */ void (*link)( View *, Model *, View * ); void (*child_add)( View *parent, View *child ); void (*child_remove)( View *parent, View *child ); void (*child_position)( View *parent, View *child ); void (*child_front)( View *parent, View *child ); gboolean (*display)( View *parent, Model *child ); /* State change reset reset edit mode ... eg. text pops back to value display scan scan widgets, reading any new text off the display scrollto try to make this view visible layout try to lay children out */ void (*reset)( View * ); void *(*scan)( View * ); void (*scrollto)( View *, ModelScrollPosition ); void (*layout)( View * ); } ViewClass; void view_scannable_register( View *view ); void view_scannable_unregister( View *view ); gboolean view_scan_all( void ); void view_resettable_register( View *view ); void view_resettable_unregister( View *view ); void view_reset_all( void ); gboolean view_hasmodel( View *view ); void *view_model_test( View *child, Model *model ); GtkType view_get_type( void ); void view_link( View *view, Model *model, View *parent ); void view_unlink( View *view ); void view_child_add( View *parent, View *child ); void view_child_remove( View *child ); void view_child_position( View *child ); void view_child_front( View *child ); void *view_reset( View *view ); void *view_scan( View *view ); void *view_scrollto( View *view, ModelScrollPosition ); void *view_layout( View *view ); void *view_map( View *view, view_map_fn fn, void *a, void *b ); void *view_map_all( View *view, view_map_fn fn, void *a ); void view_save_as_cb( GtkWidget *menu, GtkWidget *host, View *view ); void view_save_cb( GtkWidget *menu, GtkWidget *host, View *view ); void view_close_cb( GtkWidget *menu, GtkWidget *host, View *view ); void view_activate_cb( View *view ); void view_changed_cb( View *view ); void view_not_implemented_cb( GtkWidget *menu, GtkWidget *host, View *view ); GtkWidget *view_get_toplevel( View *view ); Columnview *view_get_columnview( View *child ); void *view_resize( View *view ); nip2-8.7.0/src/filesel.c0000644000175000017500000007544013224651032011705 00000000000000/* ip's file selectors. */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #include "ip.h" /* Define for debugging output. #define DEBUG */ /* TIFF save possibilities. Needs to be kept in sync with the Option in * preferences. */ typedef enum { TIFF_COMPRESSION_NONE = 0, /* No compression */ TIFF_COMPRESSION_LZW, /* Lempel-Ziv compression */ TIFF_COMPRESSION_DEFLATE, /* Zip (deflate) compression */ TIFF_COMPRESSION_PACKBITS, /* Packbits compression */ TIFF_COMPRESSION_JPEG, /* JPEG compression */ TIFF_COMPRESSION_CCITTFAX4 /* Fax compression */ } TiffCompression; typedef enum { TIFF_LAYOUT_STRIP = 0, /* Strip TIFF */ TIFF_LAYOUT_TILE /* Tiled TIFF */ } TiffLayout; typedef enum { TIFF_MULTIRES_FLAT = 0, /* Flat file */ TIFF_MULTIRES_PYRAMID /* Pyramidal TIFF */ } TiffMultires; typedef enum { TIFF_FORMAT_MANYBIT = 0, /* No bit reduction */ TIFF_FORMAT_ONEBIT /* Reduce to 1 bit, where poss */ } TiffFormat; /* Keep a list of all filesels currently active ... we use this for refresh on * new file. */ static GSList *filesel_all = NULL; static iDialogClass *parent_class = NULL; /* For filesels which don't have a suggested filename, track the last dir we * went to and use that as the start dir next time. */ static char *filesel_last_dir = NULL; static const char *icc_suffs[] = { ".icc", ".icm", NULL }; static const char *workspace_suffs[] = { ".ws", NULL }; static const char *rec_suffs[] = { ".rec", NULL }; static const char *mor_suffs[] = { ".mor", NULL }; static const char *con_suffs[] = { ".con", NULL }; static const char *mat_suffs[] = { ".mat", NULL }; static const char *def_suffs[] = { ".def", NULL }; static const char *all_suffs[] = { "", NULL }; FileselFileType filesel_wfile_type = { N_( "Workspace files (*.ws)" ), workspace_suffs }, filesel_rfile_type = { N_( "Recombination matrix files (*.rec)" ), rec_suffs }, filesel_mfile_type = { N_( "Morphology matrix files (*.mor)" ), mor_suffs }, filesel_cfile_type = { N_( "Convolution matrix files (*.con)" ), con_suffs }, filesel_xfile_type = { N_( "Matrix files (*.mat)" ), mat_suffs }, filesel_dfile_type = { N_( "Definition files (*.def)" ), def_suffs }, filesel_ifile_type = { N_( "ICC profiles (*.icc, *.icm)" ), icc_suffs }, filesel_allfile_type = { N_( "All files (*)" ), all_suffs }; FileselFileType *filesel_type_definition[] = { &filesel_dfile_type, NULL }, *filesel_type_workspace[] = { &filesel_wfile_type, NULL }, *filesel_type_matrix[] = { &filesel_xfile_type, &filesel_cfile_type, &filesel_rfile_type, &filesel_mfile_type, NULL }, /* Set during startup. */ **filesel_type_image = NULL, **filesel_type_mainw = NULL, **filesel_type_any = NULL; static void * build_vips_formats_sub( VipsFormatClass *format, GSList **types ) { FileselFileType *type = g_new( FileselFileType, 1 ); char txt[MAX_STRSIZE]; VipsBuf buf = VIPS_BUF_STATIC( txt ); const char **i; vips_buf_appendf( &buf, "%s ", VIPS_OBJECT_CLASS( format )->description ); /* Used as eg. "VIPS image files (*.v)" */ vips_buf_appends( &buf, _( "image files" ) ); vips_buf_appends( &buf, " (" ); if( *format->suffs ) for( i = format->suffs; *i; i++ ) { vips_buf_appendf( &buf, "*%s", *i ); if( i[1] ) vips_buf_appends( &buf, "; " ); } else /* No suffix means any allowed. */ vips_buf_appendf( &buf, "*" ); vips_buf_appends( &buf, ")" ); type->name = g_strdup( vips_buf_all( &buf ) ); type->suffixes = format->suffs; *types = g_slist_append( *types, type ); return( NULL ); } /* Look at the registered VIPS formats, build a file type list. Call from * filesel class init. */ static FileselFileType ** build_image_file_type( void ) { GSList *types; FileselFileType **type_array; types = NULL; vips_format_map( (VSListMap2Fn) build_vips_formats_sub, &types, NULL ); type_array = (FileselFileType **) slist_to_array( types ); g_slist_free( types ); return( type_array ); } /* Combine a NULL-terminated list of FileselFileType arrays into one. */ static FileselFileType ** build_file_type_va( FileselFileType **first, ... ) { va_list args; int len; FileselFileType **i; FileselFileType **array; int j; int k; /* Count total number of items. */ len = 0; va_start( args, first ); for( i = first; i; i = va_arg( args, FileselFileType ** ) ) len += array_len( (void **) i ); va_end( args ); /* Copy and NULL-terminate. */ array = g_new( FileselFileType *, len + 1 ); va_start( args, first ); j = 0; for( i = first; i; i = va_arg( args, FileselFileType ** ) ) for( k = 0; i[k]; k++ ) array[j++] = i[k]; va_end( args ); array[j] = NULL; return( array ); } /* Here from main() during startup. We can't just put this in class_init, * because we want to be sure this happens early on. */ void filesel_startup( void ) { filesel_type_image = build_image_file_type(); filesel_type_mainw = build_file_type_va( filesel_type_image, filesel_type_matrix, filesel_type_workspace, NULL ); filesel_type_any = build_file_type_va( filesel_type_mainw, filesel_type_definition, NULL ); } /* Is a file of type ... just look at the suffix. */ gboolean is_file_type( const FileselFileType *type, const char *filename ) { const char **p; const char *suf; if( (suf = strrchr( filename, '.' )) ) { for( p = type->suffixes; *p; p++ ) if( strcasecmp( suf, *p ) == 0 ) return( TRUE ); } return( FALSE ); } /* Map TIFF formats to char* for VIPS. */ static char * decode_tiff_compression( TiffCompression tc ) { switch( tc ) { case TIFF_COMPRESSION_LZW: return( "lzw" ); case TIFF_COMPRESSION_DEFLATE: return( "deflate" ); case TIFF_COMPRESSION_PACKBITS: return( "packbits" ); case TIFF_COMPRESSION_JPEG: return( "jpeg" ); case TIFF_COMPRESSION_CCITTFAX4:return( "ccittfax4" ); case TIFF_COMPRESSION_NONE: default: return( "none" ); } } static char * decode_tiff_layout( TiffLayout tf ) { switch( tf ) { case TIFF_LAYOUT_TILE: return( "tile" ); case TIFF_LAYOUT_STRIP: default: return( "strip" ); } } static char * decode_tiff_multires( TiffMultires tm ) { switch( tm ) { case TIFF_MULTIRES_PYRAMID: return( "pyramid" ); case TIFF_MULTIRES_FLAT: default: return( "flat" ); } } static char * decode_tiff_format( TiffFormat tm ) { switch( tm ) { case TIFF_FORMAT_ONEBIT: return( "onebit" ); case TIFF_FORMAT_MANYBIT: default: return( "manybit" ); } } /* Make a TIFF save format string. */ static void filesel_tiff_mode( char *out ) { char ctype[FILENAME_MAX]; char ltype[FILENAME_MAX]; char buf[FILENAME_MAX]; strcpy( ctype, decode_tiff_compression( IP_TIFF_COMPRESSION ) ); if( IP_TIFF_COMPRESSION == TIFF_COMPRESSION_JPEG ) { im_snprintf( buf, FILENAME_MAX, ":%d", IP_TIFF_JPEG_Q ); strcat( ctype, buf ); } if( IP_TIFF_COMPRESSION == TIFF_COMPRESSION_DEFLATE || IP_TIFF_COMPRESSION == TIFF_COMPRESSION_LZW ) { im_snprintf( buf, FILENAME_MAX, ":%d", IP_TIFF_PREDICTOR + 1 ); strcat( ctype, buf ); } strcpy( ltype, decode_tiff_layout( IP_TIFF_LAYOUT ) ); if( IP_TIFF_LAYOUT == TIFF_LAYOUT_TILE ) { im_snprintf( buf, FILENAME_MAX, ":%dx%d", IP_TIFF_TILE_WIDTH, IP_TIFF_TILE_WIDTH ); strcat( ltype, buf ); } im_snprintf( out, 256, "%s,%s,%s,%s,,,%s", ctype, ltype, decode_tiff_multires( IP_TIFF_MULTI_RES ), decode_tiff_format( IP_TIFF_FORMAT ), IP_TIFF_BIGTIFF ? "8" : "" ); } /* Make a JPEG save format string. */ static void filesel_jpeg_mode( char *out ) { char profile[FILENAME_MAX]; switch( IP_JPEG_ICC_PROFILE ) { case 0: /* Use embedded profile ... do nothing. */ strcpy( profile, "" ); break; case 1: { /* Embed from file. */ char buf[FILENAME_MAX]; char buf2[FILENAME_MAX]; im_strncpy( buf, IP_JPEG_ICC_PROFILE_FILE, FILENAME_MAX ); expand_variables( buf, buf2 ); nativeize_path( buf2 ); im_snprintf( profile, FILENAME_MAX, ",%s", buf2 ); break; } case 2: /* Don't attach a profile. */ im_snprintf( profile, FILENAME_MAX, ",none" ); break; default: /* Again, do nothing. */ strcpy( profile, "" ); break; } im_snprintf( out, 256, "%d%s", IP_JPEG_Q, profile ); } /* Make a PNG save format string. */ static void filesel_png_mode( char *out ) { im_snprintf( out, 256, "%d,%d", IP_PNG_COMPRESSION, IP_PNG_INTERLACE ); } /* Make a PPM save format string. */ static void filesel_ppm_mode( char *out ) { switch( IP_PPM_MODE ) { case 0: im_snprintf( out, 256, "binary" ); break; default: im_snprintf( out, 256, "ascii" ); break; } } /* Make a CSV save format string. */ static void filesel_csv_mode( char *out ) { /* We have to escape ":" and "," characters in the separator string. */ char separator[256]; escape_mode( IP_CSV_SEPARATOR, separator, 256 ); im_snprintf( out, 256, "sep:%s", separator ); } typedef void (*make_mode_fn)( char *buf ); typedef struct { const char *caption_filter; /* nip2 column name for the format */ const char *name; /* vips nickname for the format */ make_mode_fn mode_fn; /* Build a mode string */ } FileselMode; static FileselMode filesel_mode_table[] = { { "JPEG", "jpeg", filesel_jpeg_mode }, { "PNG", "png", filesel_png_mode }, { "TIFF", "tiff", filesel_tiff_mode }, { "CSV", "csv", filesel_csv_mode }, { "PPM", "ppm", filesel_ppm_mode } }; static FileselMode * filesel_get_mode( const char *filename ) { int i; VipsFormatClass *format; if( (format = vips_format_for_name( filename )) ) { VipsObjectClass *object_class = VIPS_OBJECT_CLASS( format ); for( i = 0; i < IM_NUMBER( filesel_mode_table ); i++ ) if( strcmp( filesel_mode_table[i].name, object_class->nickname ) == 0 ) return( &filesel_mode_table[i] ); } else im_error_clear(); return( NULL ); } /* Add our image save settings to the end of a filename. filename must be * at least FILENAME_MAX characters in size. */ void filesel_add_mode( char *filename ) { FileselMode *mode; if( (mode = filesel_get_mode( filename )) ) { char ext[256]; int l = strlen( filename ); mode->mode_fn( ext ); im_snprintf( filename + l, FILENAME_MAX - l, ":%s", ext ); } } static const char * filesel_get_filter( const char *filename ) { FileselMode *mode; if( (mode = filesel_get_mode( filename )) ) return( mode->caption_filter ); return( NULL ); } static void filesel_destroy( GtkObject *object ) { Filesel *filesel; g_return_if_fail( object != NULL ); g_return_if_fail( IS_FILESEL( object ) ); filesel = FILESEL( object ); filesel_all = g_slist_remove( filesel_all, filesel ); IM_FREEF( g_free, filesel->current_dir ); GTK_OBJECT_CLASS( parent_class )->destroy( object ); } /* Update `space free' label. */ static void filesel_space_update( Filesel *filesel, const char *dirname ) { double sz = find_space( dirname ); if( filesel->space ) { if( sz < 0 ) set_glabel( filesel->space, _( "Unable to determine " "space free in \"%s\"." ), dirname ); else { char txt[MAX_STRSIZE]; VipsBuf buf = VIPS_BUF_STATIC( txt ); vips_buf_append_size( &buf, sz ); vips_buf_appendf( &buf, " " ); /* Expands to (eg.) '6GB free in "/pics/tmp"' */ vips_buf_appendf( &buf, _( "free in \"%s\"" ), dirname ); set_glabel( filesel->space, "%s", vips_buf_all( &buf ) ); } } } static void * filesel_add_volume( const char *dir, Filesel *filesel ) { char buf[FILENAME_MAX]; im_strncpy( buf, dir, FILENAME_MAX ); path_expand( buf ); gtk_file_chooser_add_shortcut_folder( GTK_FILE_CHOOSER( filesel->chooser ), buf, NULL ); return( NULL ); } static void filesel_suffix_to_glob( const char *suffix, VipsBuf *patt ) { int i; char ch; vips_buf_appends( patt, "*" ); for( i = 0; (ch = suffix[i]); i++ ) { if( isalpha( ch ) ) { vips_buf_appends( patt, "[" ); vips_buf_appendf( patt, "%c", toupper( ch ) ); vips_buf_appendf( patt, "%c", tolower( ch ) ); vips_buf_appends( patt, "]" ); } else vips_buf_appendf( patt, "%c", ch ); } } /* Make a shell glob from a filetype. */ void filesel_make_patt( FileselFileType *type, VipsBuf *patt ) { int i; /* Only use {} braces if there's more than one suffix to match. */ if( type->suffixes[1] ) vips_buf_appends( patt, "{" ); for( i = 0; type->suffixes[i]; i++ ) { if( i > 0 ) vips_buf_appends( patt, "," ); filesel_suffix_to_glob( type->suffixes[i], patt ); } if( type->suffixes[1] ) vips_buf_appends( patt, "}" ); } static char * filesel_get_dir( Filesel *filesel ) { return( gtk_file_chooser_get_current_folder( GTK_FILE_CHOOSER( filesel->chooser ) ) ); } static void filesel_dir_enter( Filesel *filesel ) { char *dir = filesel_get_dir( filesel ); if( !filesel->current_dir || (dir && strcmp( filesel->current_dir, dir ) != 0) ) { filesel_space_update( filesel, dir ); if( !filesel->start_name ) IM_SETSTR( filesel_last_dir, dir ); filesel->current_dir = dir; dir = NULL; } g_free( dir ); } /* New dir entered signal. */ static void filesel_current_folder_changed_cb( GtkWidget *widget, gpointer data ) { filesel_dir_enter( FILESEL( data ) ); } /* Update file info display. */ static void filesel_info_update( Filesel *filesel, const char *name ) { if( filesel->info ) { char txt[MAX_STRSIZE]; VipsBuf buf = VIPS_BUF_STATIC( txt ); get_image_info( &buf, name ); set_glabel( filesel->info, "%s", vips_buf_firstline( &buf ) ); } } int filesel_get_filetype( Filesel *filesel ) { int type; GtkFileFilter *filter; type = filesel->default_type; if( filesel->chooser && (filter = gtk_file_chooser_get_filter( GTK_FILE_CHOOSER( filesel->chooser ) )) ) { int i; for( i = 0; filesel->filter[i]; i++ ) if( filter == filesel->filter[i] ) break; g_assert( filesel->filter[i] ); type = i; } #ifdef DEBUG printf( "filesel_get_filetype: %d\n", type ); #endif /*DEBUG*/ return( type ); } /* Find the index of the type which matches this filename. */ static int filesel_find_file_type( FileselFileType **type, const char *filename ) { int i, j; for( i = 0; type[i]; i++ ) for( j = 0; type[i]->suffixes[j]; j++ ) if( is_casepostfix( type[i]->suffixes[j], filename ) ) return( i ); return( -1 ); } static void filesel_set_filter( Filesel *filesel, GtkFileFilter *filter ) { #ifdef DEBUG printf( "filesel_set_filter: %p\n", filter ); #endif /*DEBUG*/ g_assert( filter ); gtk_file_chooser_set_filter( GTK_FILE_CHOOSER( filesel->chooser ), filter ); } static void filesel_set_filetype_from_filename( Filesel *filesel, const char *name ) { int type; int i; char *p; /* If we're showing "all", any filename is OK, so don't change the file * type. */ type = filesel_get_filetype( filesel ); if( type == filesel->ntypes - 1 ) return; /* If we've not got a sensible filename, don't bother. */ if( (p = strrchr( name, G_DIR_SEPARATOR )) && strspn( p + 1, " \n\t" ) == strlen( p + 1 ) ) return; if( (i = filesel_find_file_type( filesel->type, name )) >= 0 ) filesel_set_filter( filesel, filesel->filter[i] ); else /* No match, or no suffix. Set the last type (should be "All"). */ filesel_set_filter( filesel, filesel->filter[filesel->ntypes - 1] ); } gboolean filesel_set_filename( Filesel *filesel, const char *name ) { char buf[FILENAME_MAX]; if( !is_valid_filename( name ) ) return( FALSE ); im_strncpy( buf, name, FILENAME_MAX ); path_expand( buf ); #ifdef DEBUG printf( "filesel_set_filename: %s\n", buf ); #endif /*DEBUG*/ /* set_filename() will only select existing files, we need to be able * to set any filename (eg. for increment filename), so we have to * set_current_name() as well. */ gtk_file_chooser_set_filename( GTK_FILE_CHOOSER( filesel->chooser ), buf ); if( filesel->save ) gtk_file_chooser_set_current_name( GTK_FILE_CHOOSER( filesel->chooser ), im_skip_dir( buf ) ); filesel->start_name = TRUE; /* We have to set this after setting the filename. */ filesel_set_filetype_from_filename( filesel, buf ); return( TRUE ); } /* Read the filename out ... test for sanity. */ char * filesel_get_filename( Filesel *filesel ) { char *name; char tmp[FILENAME_MAX]; name = gtk_file_chooser_get_filename( GTK_FILE_CHOOSER( filesel->chooser ) ); #ifdef DEBUG printf( "filesel_get_filename: %s\n", name ); #endif /*DEBUG*/ if( !name ) { error_top( _( "Bad filename." ) ); error_sub( _( "No file selected." ) ); return( NULL ); } if( !is_valid_filename( name ) ) { g_free( name ); return( NULL ); } /* Rewrite to compact form, eg. "$HOME/fred". */ im_strncpy( tmp, name, FILENAME_MAX ); path_compact( tmp ); g_free( name ); return( g_strdup( tmp ) ); } /* Get filename multi ... map over the selected filenames. */ void * filesel_map_filename_multi( Filesel *filesel, FileselMapFn fn, void *a, void *b ) { GSList *names = gtk_file_chooser_get_filenames( GTK_FILE_CHOOSER( filesel->chooser ) ); GSList *p; for( p = names; p; p = p->next ) { char *filename = (char *) p->data; char tmp[FILENAME_MAX]; void *res; im_strncpy( tmp, filename, FILENAME_MAX ); path_compact( tmp ); if( (res = fn( filesel, tmp, a, b )) ) { IM_FREEF( slist_free_all, names ); return( res ); } } IM_FREEF( slist_free_all, names ); return( NULL ); } /* New file selected signal. */ static void filesel_selection_changed_cb( GtkWidget *widget, gpointer data ) { Filesel *filesel = FILESEL( data ); char *filename; #ifdef DEBUG printf( "filesel_selection_changed_cb: %s\n", NN( IWINDOW( filesel )->title ) ); #endif /*DEBUG*/ if( (filename = filesel_get_filename( filesel )) ) { #ifdef DEBUG printf( "filesel_selection_changed_cb: %s - \"%s\"\n", NN( IWINDOW( filesel )->title ), filename ); #endif /*DEBUG*/ filesel_info_update( filesel, filename ); g_free( filename ); } } static void filesel_file_activated_cb( GtkWidget *widget, gpointer data ) { idialog_done_trigger( IDIALOG( data ), 0 ); } /* Increment filename on OK. */ static void filesel_auto_incr_cb( GtkWidget *tog, Filesel *filesel ) { filesel->incr = GTK_TOGGLE_BUTTON( tog )->active; if( filesel->incr ) idialog_set_pinup( IDIALOG( filesel ), TRUE ); } static void filesel_update_preview_cb( GtkFileChooser *chooser, Filesel *filesel ) { char *filename; if( (filename = gtk_file_chooser_get_preview_filename( GTK_FILE_CHOOSER( filesel->chooser ) )) ) { preview_set_filename( filesel->preview, filename ); g_free( filename ); } } static GtkFileFilter * file_filter_from_file_type( FileselFileType *type ) { GtkFileFilter *filter; int j; filter = gtk_file_filter_new(); gtk_file_filter_set_name( filter, _( type->name ) ); if( type->suffixes[0] ) for( j = 0; type->suffixes[j]; j++ ) { char txt[FILENAME_MAX]; VipsBuf buf = VIPS_BUF_STATIC( txt ); filesel_suffix_to_glob( type->suffixes[j], &buf ); gtk_file_filter_add_pattern( filter, vips_buf_all( &buf ) ); } else /* No suffix list means any suffix allowed. */ gtk_file_filter_add_pattern( filter, "*" ); return( filter ); } static void filesel_add_filter( Filesel *filesel, FileselFileType *type, int i ) { filesel->filter[i] = file_filter_from_file_type( type ); #ifdef DEBUG printf( "filesel_add_filter: %p (%d)\n", filesel->filter[i], i ); #endif /*DEBUG*/ gtk_file_chooser_add_filter( GTK_FILE_CHOOSER( filesel->chooser ), filesel->filter[i] ); if( i == filesel->default_type ) filesel_set_filter( filesel, filesel->filter[i] ); } static void filesel_build( GtkWidget *widget ) { Filesel *filesel = FILESEL( widget ); iDialog *idlg = IDIALOG( widget ); int i; FileselFileType *type; GtkWidget *vb; GtkWidget *tog; #ifdef DEBUG printf( "filesel_build: %s\n", NN( IWINDOW( filesel )->title ) ); #endif /*DEBUG*/ /* Call all builds in superclasses. */ if( IWINDOW_CLASS( parent_class )->build ) IWINDOW_CLASS( parent_class )->build( widget ); filesel->chooser = gtk_file_chooser_widget_new( filesel->save ? GTK_FILE_CHOOSER_ACTION_SAVE : GTK_FILE_CHOOSER_ACTION_OPEN ); gtk_file_chooser_set_select_multiple( GTK_FILE_CHOOSER( filesel->chooser ), filesel->multi ); gtk_box_pack_start( GTK_BOX( idlg->work ), filesel->chooser, TRUE, TRUE, 0 ); gtk_widget_show( filesel->chooser ); /* Add data path to volumes. */ slist_map( PATH_SEARCH, (SListMapFn) filesel_add_volume, filesel ); /* Add all the supported file types. Add "all" to the end. */ for( i = 0; (type = filesel->type[i]); i++ ) filesel_add_filter( filesel, type, i ); filesel_add_filter( filesel, &filesel_allfile_type, i ); /* Spot changes. */ gtk_signal_connect( GTK_OBJECT( filesel->chooser ), "current-folder-changed", GTK_SIGNAL_FUNC( filesel_current_folder_changed_cb ), filesel ); gtk_signal_connect( GTK_OBJECT( filesel->chooser ), "selection-changed", GTK_SIGNAL_FUNC( filesel_selection_changed_cb ), filesel ); gtk_signal_connect( GTK_OBJECT( filesel->chooser ), "file-activated", GTK_SIGNAL_FUNC( filesel_file_activated_cb ), filesel ); /* Pack extra widgets. */ vb = gtk_vbox_new( FALSE, 6 ); gtk_file_chooser_set_extra_widget( GTK_FILE_CHOOSER( filesel->chooser ), vb ); gtk_widget_show( vb ); /* Space free label. */ if( filesel->save ) { filesel->space = gtk_label_new( "" ); gtk_misc_set_alignment( GTK_MISC( filesel->space ), 0, 0.5 ); gtk_box_pack_start( GTK_BOX( vb ), filesel->space, FALSE, FALSE, 0 ); gtk_widget_show( filesel->space ); } /* File info label. */ if( !filesel->save ) { filesel->info = gtk_label_new( "" ); gtk_misc_set_alignment( GTK_MISC( filesel->info ), 0, 0.5 ); gtk_box_pack_start( GTK_BOX( vb ), filesel->info, FALSE, FALSE, 0 ); gtk_widget_show( filesel->info ); } /* Auto-increment toggle. */ if( filesel->save ) { tog = gtk_check_button_new_with_label( _( "Increment filename" ) ); gtk_signal_connect( GTK_OBJECT( tog ), "toggled", GTK_SIGNAL_FUNC( filesel_auto_incr_cb ), filesel ); gtk_box_pack_start( GTK_BOX( vb ), tog, FALSE, FALSE, 0 ); gtk_widget_show( tog ); set_tooltip( tog, _( "After Save, add 1 to the last number in the " "file name" ) ); } if( filesel->imls ) { filesel->preview = preview_new(); gtk_file_chooser_set_preview_widget( GTK_FILE_CHOOSER( filesel->chooser ), GTK_WIDGET( filesel->preview ) ); gtk_signal_connect( GTK_OBJECT( filesel->chooser ), "update-preview", GTK_SIGNAL_FUNC( filesel_update_preview_cb ), filesel ); gtk_widget_show( GTK_WIDGET( filesel->preview ) ); gtk_file_chooser_set_preview_widget_active( GTK_FILE_CHOOSER( filesel->chooser ), TRUE ); } if( filesel_last_dir ) gtk_file_chooser_set_current_folder( GTK_FILE_CHOOSER( filesel->chooser ), filesel_last_dir ); /* Save boxes can be much smaller. */ if( !filesel->save ) gtk_window_set_default_size( GTK_WINDOW( filesel ), 600, 500 ); } static void filesel_class_init( FileselClass *class ) { GtkObjectClass *object_class = (GtkObjectClass *) class; iWindowClass *iwindow_class = (iWindowClass *) class; object_class->destroy = filesel_destroy; iwindow_class->build = filesel_build; parent_class = g_type_class_peek_parent( class ); } /* Increment filename. If there's no number there now, assume zero. */ static void filesel_increment_filename( Filesel *filesel ) { char *filename; if( (filename = filesel_get_filename( filesel )) ) { char name[FILENAME_MAX]; im_strncpy( name, filename, FILENAME_MAX ); g_free( filename ); increment_filename( name ); (void) filesel_set_filename( filesel, name ); } } static void * filesel_refresh( Filesel *filesel ) { char *dir; if( (dir = gtk_file_chooser_get_current_folder( GTK_FILE_CHOOSER( filesel->chooser ) )) ) { gtk_file_chooser_set_current_folder( GTK_FILE_CHOOSER( filesel->chooser ), dir ); g_free( dir ); } return( NULL ); } /* There may be a new file ... ask all fsb's to refresh. */ void filesel_refresh_all( void ) { (void) slist_map( filesel_all, (SListMapFn) filesel_refresh, NULL ); } static void filesel_init( Filesel *filesel ) { int i; #ifdef DEBUG printf( "filesel_init: %s\n", NN( IWINDOW( filesel )->title ) ); #endif /*DEBUG*/ filesel->chooser = NULL; filesel->space = NULL; filesel->info = NULL; filesel->preview = NULL; for( i = 0; i < FILESEL_MAX_FILTERS; i++ ) filesel->filter[i] = NULL; filesel->incr = FALSE; filesel->imls = FALSE; filesel->save = FALSE; filesel->multi = FALSE; filesel->start_name = FALSE; filesel->type = NULL; filesel->default_type = 0; filesel->type_pref = NULL; filesel->current_dir = NULL; filesel->done_cb = NULL; filesel->client = NULL; idialog_set_callbacks( IDIALOG( filesel ), iwindow_true_cb, NULL, NULL, NULL ); idialog_set_pinup( IDIALOG( filesel ), TRUE ); idialog_set_nosep( IDIALOG( filesel ), TRUE ); idialog_set_button_focus( IDIALOG( filesel ), FALSE ); idialog_set_help_tag( IDIALOG( filesel ), "sec:loadsave" ); filesel_all = g_slist_prepend( filesel_all, filesel ); } GtkType filesel_get_type( void ) { static GtkType type = 0; if( !type ) { static const GtkTypeInfo info = { "Filesel", sizeof( Filesel ), sizeof( FileselClass ), (GtkClassInitFunc) filesel_class_init, (GtkObjectInitFunc) filesel_init, /* reserved_1 */ NULL, /* reserved_2 */ NULL, (GtkClassInitFunc) NULL, }; type = gtk_type_unique( TYPE_IDIALOG, &info ); } return( type ); } GtkWidget * filesel_new( void ) { Filesel *filesel = (Filesel *) gtk_type_new( TYPE_FILESEL ); iwindow_set_size_prefs( IWINDOW( filesel ), "FILESEL_WINDOW_WIDTH", "FILESEL_WINDOW_HEIGHT" ); return( GTK_WIDGET( filesel ) ); } void filesel_set_done( Filesel *filesel, iWindowFn done_cb, void *client ) { filesel->done_cb = done_cb; filesel->client = client; } /* Back from the user function ... unset the hourglass, and update. */ static void filesel_trigger2( void *sys, iWindowResult result ) { iWindowSusp *susp = (iWindowSusp *) sys; Filesel *filesel = FILESEL( susp->client ); progress_end(); /* If this is a save, assume that there is now a new file, * and ask all fsb's to update. */ if( filesel->save && result != IWINDOW_ERROR ) filesel_refresh_all(); if( result != IWINDOW_YES ) { /* Failure ... bomb out. */ iwindow_susp_return( susp, result ); return; } /* Increment the filename, if required. */ if( filesel->incr ) { filesel_increment_filename( filesel ); filesel_refresh( filesel ); } /* Success! */ iwindow_susp_return( susp, result ); } /* Start of user done ... shut down our suspension, and set the hglass. */ static void filesel_trigger( Filesel *filesel, iWindow *iwnd, iWindowNotifyFn nfn, void *sys ) { /* Suspend the callback for a bit. */ iWindowSusp *susp = iwindow_susp_new( NULL, iwnd, filesel, nfn, sys ); /* If there's a filetype pref, update it. */ if( filesel->type_pref ) prefs_set( filesel->type_pref, "%d", filesel_get_filetype( filesel ) ); progress_begin(); filesel->done_cb( IWINDOW( filesel ), filesel->client, filesel_trigger2, susp ); } static void filesel_prefs_ok_cb( iWindow *iwnd, void *client, iWindowNotifyFn nfn, void *sys ) { Filesel *filesel = FILESEL( client ); /* Force a recalc, in case we've changed the autorecalc * settings. Also does a scan on any widgets. */ symbol_recalculate_all_force( TRUE ); filesel_trigger( filesel, iwnd, nfn, sys ); } static void filesel_prefs( Filesel *filesel, iWindow *iwnd, const char *caption_filter, iWindowNotifyFn nfn, void *sys ) { Prefs *prefs; if( !(prefs = prefs_new( caption_filter )) ) { nfn( sys, IWINDOW_ERROR ); return; } /* Expands to (eg.) "TIFF Save Preferences". */ iwindow_set_title( IWINDOW( prefs ), _( "%s Save Preferences" ), caption_filter ); iwindow_set_parent( IWINDOW( prefs ), GTK_WIDGET( iwnd ) ); idialog_set_callbacks( IDIALOG( prefs ), iwindow_true_cb, NULL, NULL, filesel ); idialog_add_ok( IDIALOG( prefs ), filesel_prefs_ok_cb, GTK_STOCK_SAVE ); idialog_set_notify( IDIALOG( prefs ), nfn, sys ); iwindow_build( IWINDOW( prefs ) ); gtk_widget_show( GTK_WIDGET( prefs ) ); } /* We have a filename and it's OK to overwrite. Is it a type for which we have * to offer preferences? */ static void filesel_yesno_cb( iWindow *iwnd, void *client, iWindowNotifyFn nfn, void *sys ) { Filesel *filesel = FILESEL( client ); char *filename; const char *caption_filter; if( filesel->save ) { if( !(filename = filesel_get_filename( filesel )) ) nfn( sys, IWINDOW_ERROR ); else { if( (caption_filter = filesel_get_filter( filename )) ) filesel_prefs( filesel, iwnd, caption_filter, nfn, sys ); else filesel_trigger( filesel, iwnd, nfn, sys ); g_free( filename ); } } else filesel_trigger( filesel, iwnd, nfn, sys ); } static void filesel_done_cb( iWindow *iwnd, void *client, iWindowNotifyFn nfn, void *sys ) { Filesel *filesel = FILESEL( iwnd ); char *filename; #ifdef DEBUG printf( "filesel_done\n" ); #endif /*DEBUG*/ if( !(filename = filesel_get_filename( filesel )) ) nfn( sys, IWINDOW_ERROR ); else if( isdir( "%s", filename ) ) { nfn( sys, IWINDOW_NO ); } else { /* File exists and we are saving? Do a yesno before we carry on. */ if( filesel->save && existsf( "%s", filename ) ) { box_yesno( GTK_WIDGET( filesel ), filesel_yesno_cb, iwindow_true_cb, filesel, nfn, sys, _( "Overwrite" ), _( "Overwrite file?" ), _( "File \"%s\" exists. " "OK to overwrite?" ), filename ); } else /* Just call the user function directly. */ filesel_yesno_cb( iwnd, filesel, nfn, sys ); g_free( filename ); } } void filesel_set_flags( Filesel *filesel, gboolean imls, gboolean save ) { filesel->imls = imls; filesel->save = save; idialog_add_ok( IDIALOG( filesel ), filesel_done_cb, save ? GTK_STOCK_SAVE : GTK_STOCK_OPEN ); } void filesel_set_filetype( Filesel *filesel, FileselFileType **type, int default_type ) { /* Reset the widget, if it's there. */ if( filesel->chooser ) filesel_set_filter( filesel, filesel->filter[default_type] ); filesel->type = type; filesel->ntypes = array_len( (void **) type ); filesel->default_type = default_type; } void filesel_set_filetype_pref( Filesel *filesel, const char *type_pref ) { filesel->type_pref = type_pref; } void filesel_set_multi( Filesel *filesel, gboolean multi ) { filesel->multi = multi; } nip2-8.7.0/src/nip2-icon.rc0000644000175000017500000000002713224651032012227 000000000000001 ICON "nip2-icon.ico" nip2-8.7.0/src/imageheader.c0000644000175000017500000002157013273071606012517 00000000000000/* display an image header */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #include "ip.h" static iDialogClass *imageheader_parent_class = NULL; /* Our columns. */ enum { NAME_COLUMN, VALUE_COLUMN, N_COLUMNS }; static void imageheader_destroy( GtkObject *object ) { Imageheader *imageheader; g_return_if_fail( object != NULL ); g_return_if_fail( IS_IMAGEHEADER( object ) ); imageheader = IMAGEHEADER( object ); /* My instance destroy stuff. */ UNREF( imageheader->store ); if( GTK_OBJECT_CLASS( imageheader_parent_class )->destroy ) GTK_OBJECT_CLASS( imageheader_parent_class )->destroy( object ); } static void * imageheader_add_item( IMAGE *im, const char *field, GValue *value, Imageheader *imageheader ) { char txt[256]; VipsBuf buf = VIPS_BUF_STATIC( txt ); GtkTreeIter iter; /* Show the nicks for enums. */ if( G_VALUE_HOLDS_ENUM( value ) ) vips_buf_appendf( &buf, "%s", vips_enum_nick( G_VALUE_TYPE( value ), g_value_get_enum( value ) ) ); else { char *value_str; value_str = g_strdup_value_contents( value ); vips_buf_appendf( &buf, "%s", value_str ); g_free( value_str ); } gtk_list_store_append( imageheader->store, &iter ); gtk_list_store_set( imageheader->store, &iter, NAME_COLUMN, field, VALUE_COLUMN, vips_buf_all( &buf ), -1 ); return( NULL ); } static void imageheader_refresh( Imageheader *imageheader ) { gtk_list_store_clear( imageheader->store ); if( imageheader->iimage && imageheader->iimage->value.ii ) { Imageinfo *ii = imageheader->iimage->value.ii; IMAGE *im = imageinfo_get( FALSE, ii ); im_header_map( im, (im_header_map_fn) imageheader_add_item, imageheader ); gtk_text_buffer_set_text( gtk_text_view_get_buffer( GTK_TEXT_VIEW( imageheader->history ) ), im_history_get( im ), -1 ); } else { gtk_editable_delete_text( GTK_EDITABLE( imageheader->history ), 0, -1 ); } } static void imageheader_entry_changed_cb( GtkEditable *editable, Imageheader *imageheader ) { gtk_tree_model_filter_refilter( GTK_TREE_MODEL_FILTER( imageheader->filter ) ); } static gboolean imageheader_visible_func( GtkTreeModel *model, GtkTreeIter *iter, gpointer data ) { Imageheader *imageheader = IMAGEHEADER( data ); const char *text = gtk_entry_get_text( GTK_ENTRY( imageheader->entry ) ); char *name; char *value; gboolean found; found = FALSE; gtk_tree_model_get( model, iter, NAME_COLUMN, &name, -1 ); if( name ) { found = my_strcasestr( name, text ) != NULL; g_free( name ); } if( found ) return( TRUE ); gtk_tree_model_get( model, iter, VALUE_COLUMN, &value, -1 ); if( value ) { found = my_strcasestr( value, text ) != NULL; g_free( value ); } return( found ); } static void imageheader_build( GtkWidget *widget ) { Imageheader *imageheader = IMAGEHEADER( widget ); iDialog *idlg = IDIALOG( widget ); GtkCellRenderer *renderer; GtkTreeViewColumn *column; GtkWidget *top; GtkWidget *label; GtkWidget *swin; GtkWidget *pane; GtkWidget *vbox; PangoFontDescription *font_desc; #ifdef DEBUG printf( "imageheader_build: %s\n", IWINDOW( imageheader )->title ); #endif /*DEBUG*/ /* Call all builds in superclasses. */ if( IWINDOW_CLASS( imageheader_parent_class )->build ) (*IWINDOW_CLASS( imageheader_parent_class )->build)( widget ); pane = gtk_vpaned_new(); gtk_box_pack_start( GTK_BOX( idlg->work ), pane, TRUE, TRUE, 2 ); vbox = gtk_vbox_new( FALSE, 2 ); gtk_paned_pack1( GTK_PANED( pane ), vbox, TRUE, FALSE ); top = gtk_hbox_new( FALSE, 12 ); gtk_box_pack_start( GTK_BOX( vbox ), top, FALSE, FALSE, 2 ); imageheader->entry = gtk_entry_new(); gtk_signal_connect( GTK_OBJECT( imageheader->entry ), "changed", GTK_SIGNAL_FUNC( imageheader_entry_changed_cb ), imageheader ); gtk_box_pack_end( GTK_BOX( top ), imageheader->entry, FALSE, FALSE, 2 ); label = gtk_image_new_from_stock( GTK_STOCK_FIND, GTK_ICON_SIZE_MENU ); gtk_box_pack_end( GTK_BOX( top ), label, FALSE, FALSE, 0 ); swin = gtk_scrolled_window_new( NULL, NULL ); gtk_scrolled_window_set_policy( GTK_SCROLLED_WINDOW( swin ), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC ); gtk_box_pack_start( GTK_BOX( vbox ), swin, TRUE, TRUE, 2 ); imageheader->store = gtk_list_store_new( N_COLUMNS, G_TYPE_STRING, G_TYPE_STRING ); imageheader->filter = gtk_tree_model_filter_new( GTK_TREE_MODEL( imageheader->store ), NULL ); gtk_tree_model_filter_set_visible_func( GTK_TREE_MODEL_FILTER( imageheader->filter ), imageheader_visible_func, imageheader, NULL ); imageheader->tree = gtk_tree_view_new_with_model( GTK_TREE_MODEL( imageheader->filter ) ); gtk_tree_view_set_rules_hint( GTK_TREE_VIEW( imageheader->tree ), TRUE ); gtk_container_add( GTK_CONTAINER( swin ), imageheader->tree ); renderer = gtk_cell_renderer_text_new(); column = gtk_tree_view_column_new_with_attributes( _( "Field" ), renderer, "text", NAME_COLUMN, NULL ); gtk_tree_view_column_set_resizable( column, TRUE ); gtk_tree_view_append_column( GTK_TREE_VIEW( imageheader->tree ), column ); renderer = gtk_cell_renderer_text_new(); column = gtk_tree_view_column_new_with_attributes( _( "Value" ), renderer, "text", VALUE_COLUMN, NULL ); gtk_tree_view_column_set_resizable( column, TRUE ); gtk_tree_view_append_column( GTK_TREE_VIEW( imageheader->tree ), column ); vbox = gtk_vbox_new( FALSE, 2 ); gtk_paned_pack2( GTK_PANED( pane ), vbox, TRUE, FALSE ); label = gtk_label_new( _( "Image history" ) ); gtk_misc_set_alignment( GTK_MISC( label ), 0.0, 0.5 ); gtk_box_pack_start( GTK_BOX( vbox ), label, FALSE, FALSE, 2 ); swin = gtk_scrolled_window_new( NULL, NULL ); gtk_scrolled_window_set_policy( GTK_SCROLLED_WINDOW( swin ), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC ); gtk_box_pack_end( GTK_BOX( vbox ), swin, TRUE, TRUE, 2 ); imageheader->history = gtk_text_view_new(); gtk_text_view_set_editable( GTK_TEXT_VIEW( imageheader->history ), FALSE ); gtk_text_view_set_cursor_visible( GTK_TEXT_VIEW( imageheader->history ), FALSE ); font_desc = pango_font_description_from_string( "Monospace" ); gtk_widget_modify_font( imageheader->history, font_desc ); pango_font_description_free( font_desc ); gtk_container_add( GTK_CONTAINER( swin ), imageheader->history ); imageheader_refresh( imageheader ); gtk_window_set_default_size( GTK_WINDOW( imageheader ), 550, 550 ); gtk_paned_set_position( GTK_PANED( pane ), 350 ); gtk_widget_show_all( idlg->work ); } static void imageheader_class_init( ImageheaderClass *class ) { GtkObjectClass *object_class; iWindowClass *iwindow_class; object_class = (GtkObjectClass *) class; iwindow_class = (iWindowClass *) class; object_class->destroy = imageheader_destroy; iwindow_class->build = imageheader_build; imageheader_parent_class = g_type_class_peek_parent( class ); } static void imageheader_init( Imageheader *imageheader ) { #ifdef DEBUG printf( "imageheader_init: %s\n", IWINDOW( imageheader )->title ); #endif /*DEBUG*/ imageheader->iimage = NULL; } GtkType imageheader_get_type( void ) { static GtkType imageheader_type = 0; if( !imageheader_type ) { static const GtkTypeInfo info = { "Imageheader", sizeof( Imageheader ), sizeof( ImageheaderClass ), (GtkClassInitFunc) imageheader_class_init, (GtkObjectInitFunc) imageheader_init, /* reserved_1 */ NULL, /* reserved_2 */ NULL, (GtkClassInitFunc) NULL, }; imageheader_type = gtk_type_unique( TYPE_IDIALOG, &info ); } return( imageheader_type ); } /* Conversion has changed signal. */ static void imageheader_ii_changed( Model *model, Imageheader *imageheader ) { g_assert( IS_MODEL( model ) ); g_assert( IS_IMAGEHEADER( imageheader ) ); imageheader_refresh( imageheader ); } static void imageheader_link( Imageheader *imageheader, iImage *iimage ) { imageheader->iimage = iimage; listen_add( G_OBJECT( imageheader ), (GObject **) &imageheader->iimage, "changed", G_CALLBACK( imageheader_ii_changed ) ); } GtkWidget * imageheader_new( iImage *iimage ) { Imageheader *imageheader = gtk_type_new( TYPE_IMAGEHEADER ); imageheader_link( imageheader, iimage ); return( GTK_WIDGET( imageheader ) ); } nip2-8.7.0/src/link.c0000644000175000017500000003415713224651032011217 00000000000000/* Links between top-level syms and the exprs which reference them */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG #define DEBUG_DIRTY */ #include "ip.h" void * link_expr_destroy( LinkExpr *le ) { GSList **llinks = le->dynamic ? &le->link->dynamic_links : &le->link->static_links; GSList **elinks = le->dynamic ? &le->expr->dynamic_links : &le->expr->static_links; #ifdef DEBUG printf( "link_expr_destroy: removing expr " ); symbol_name_print( le->expr->sym ); printf( "referencing link->child = " ); symbol_name_print( le->link->child ); printf( "\n" ); #endif /*DEBUG*/ *llinks = slist_remove_all( *llinks, le ); *elinks = slist_remove_all( *elinks, le ); im_free( le ); return( NULL ); } static LinkExpr * link_expr_new( Link *link, Expr *expr, gboolean dynamic ) { GSList **llinks = dynamic ? &link->dynamic_links : &link->static_links; GSList **elinks = dynamic ? &expr->dynamic_links : &expr->static_links; LinkExpr *le; g_assert( expr_get_root_dynamic( expr )->sym == link->parent ); #ifdef DEBUG printf( "link_expr_new: expr " ); symbol_name_print( expr->sym ); printf( "references link->child = " ); symbol_name_print( link->child ); printf( "\n" ); #endif /*DEBUG*/ if( !(le = INEW( NULL, LinkExpr )) ) return( NULL ); le->link = link; le->expr = expr; le->count = 1; le->dynamic = dynamic; *llinks = g_slist_prepend( *llinks, le ); *elinks = g_slist_prepend( *elinks, le ); return( le ); } /* Make a new serial number. */ int link_serial_new( void ) { static int serial = 0; return( serial++ ); } /* Fwd ref. */ static void *symbol_dirty_set( Symbol *sym ); /* child has become dirty ... update parent's dirty count. */ static void * link_dirty_child( Link *link ) { g_assert( link->parent->ndirtychildren >= 0 ); link->parent->ndirtychildren += 1; if( link->parent->ndirtychildren == 1 ) /* Parent had no dirty children ... it does now. */ symbol_dirty_set( link->parent ); symbol_state_change( link->parent ); return( NULL ); } /* link->parent no longer has link->child as a dirty child (cleaned or * removed) ... update counts. */ static void * link_clean_child( Link *link ) { Symbol *parent = link->parent; /* One fewer dirty children! */ parent->ndirtychildren--; g_assert( parent->ndirtychildren >= 0 ); /* Have we just cleaned the last dirty child of link->parent? If we * have and if link->parent has an error, clear the error so that * link->parent gets a chance to recalc. The new value of * link->child might fix the problem. */ if( parent->ndirtychildren == 0 ) expr_error_clear( parent->expr ); symbol_state_change( parent ); return( NULL ); } /* Junk a link. */ void * link_destroy( Link *link ) { #ifdef DEBUG printf( "link_destroy: destroying link from " ); symbol_name_print( link->parent ); printf( "to " ); symbol_name_print( link->child ); printf( "\n" ); #endif /*DEBUG*/ if( link->child->dirty ) (void) link_clean_child( link ); link->parent->topchildren = slist_remove_all( link->parent->topchildren, link ); link->child->topparents = slist_remove_all( link->child->topparents, link ); slist_map( link->static_links, (SListMapFn) link_expr_destroy, NULL ); slist_map( link->dynamic_links, (SListMapFn) link_expr_destroy, NULL ); im_free( link ); return( NULL ); } /* Make a new link. */ static Link * link_new( Symbol *child, Symbol *parent ) { Link *link; g_assert( is_top( parent ) && is_top( child ) ); g_assert( parent != child ); #ifdef DEBUG printf( "link_new: making link from " ); symbol_name_print( parent ); printf( "to " ); symbol_name_print( child ); printf( "\n" ); #endif /*DEBUG*/ if( !(link = INEW( NULL, Link )) ) return( NULL ); link->parent = parent; link->child = child; link->serial = 0; link->static_links = NULL; link->dynamic_links = NULL; parent->topchildren = g_slist_prepend( parent->topchildren, link ); child->topparents = g_slist_prepend( child->topparents, link ); /* If the new child is dirty, note it. */ if( child->dirty ) link_dirty_child( link ); return( link ); } static Link * link_find_child_sub( Link *link, Symbol *child ) { if( link->child == child ) return( link ); return( NULL ); } /* Look up connection between child and parent. */ static Link * link_find_child( Symbol *child, Symbol *parent ) { return( (Link *) slist_map( parent->topchildren, (SListMapFn) link_find_child_sub, child ) ); } static void * link_expr_find_expr_sub( LinkExpr *le, Expr *expr ) { if( le->expr == expr ) return( le ); return( NULL ); } /* Look up a linkexpr by expr. */ static LinkExpr * link_expr_find_expr( Link *link, Expr *expr, gboolean dynamic ) { GSList *links = dynamic ? link->dynamic_links : link->static_links; return( (LinkExpr *) slist_map( links, (SListMapFn) link_expr_find_expr_sub, expr ) ); } /* Add a reference from expr to child to the link graph. */ void * link_add( Symbol *child, Expr *expr, gboolean dynamic ) { Expr *parent = expr_get_root_dynamic( expr ); Link *link; LinkExpr *le; #ifdef DEBUG printf( "link_add: child = " ); symbol_name_print( child ); printf( "; expr = " ); expr_name_print( expr ); printf( "; dynamic = %s\n", bool_to_char( dynamic ) ); #endif /*DEBUG*/ g_assert( parent ); g_assert( parent->sym ); g_assert( is_top( child ) && is_top( parent->sym ) ); g_assert( child != parent->sym ); if( !(link = link_find_child( child, parent->sym )) ) { if( !(link = link_new( child, parent->sym )) ) return( child ); } if( !(le = link_expr_find_expr( link, expr, dynamic )) ) { if( !(le = link_expr_new( link, expr, dynamic )) ) return( child ); } else le->count++; return( NULL ); } /* Remove a ref from expr to child. */ void * link_remove( Symbol *child, Expr *expr, gboolean dynamic ) { Symbol *parent = expr_get_root_dynamic( expr )->sym; Link *link = link_find_child( child, parent ); LinkExpr *le = link_expr_find_expr( link, expr, dynamic ); g_assert( is_top( parent ) && is_top( child ) ); g_assert( parent != child ); g_assert( link ); le->count--; if( le->count == 0 ) { if( link_expr_destroy( le ) ) return( child ); } if( !link->static_links && !link->dynamic_links ) { if( link_destroy( link ) ) return( child ); } return( NULL ); } /* Is this a ref to a top-level? Add to link graph if it is. */ static void * link_children_expr_sub( Symbol *child, Expr *expr ) { if( is_top( child ) ) { Expr *root = expr_get_root_dynamic( expr ); /* Don't need to record recursive refs. */ if( root && root->sym && root->sym != child ) { if( link_add( child, expr, FALSE ) ) return( child ); } } return( NULL ); } /* Fwd. */ static void *link_children( Symbol *child, Symbol *parent ); /* Add any refs to top-level syms within this local to the * top-level sym we are within. */ static void * link_children_expr( Expr *expr, Symbol *parent ) { if( expr->compile ) { Compile *compile = expr->compile; /* Add refs which local makes directly. */ if( slist_map( compile->children, (SListMapFn) link_children_expr_sub, expr ) ) return( expr ); /* ... and recurse for sub-children. */ (void) icontainer_map( ICONTAINER( compile ), (icontainer_map_fn) link_children, parent, NULL ); } return( NULL ); } /* Add any refs to top-level syms within this local to the * top-level sym we are within. */ static void * link_children( Symbol *child, Symbol *parent ) { if( child->expr ) { if( link_children_expr( child->expr, parent ) ) return( child ); } return( NULL ); } /* row is editing sym's value ... add any dependancies the user has included * there. */ static void * link_row( Model *model, Symbol *parent ) { if( !IS_ROW( model ) || !ROW( model )->expr ) return( NULL ); /* Add any stuff in this row. */ return( link_children_expr( ROW( model )->expr, parent ) ); } static void * symbol_ndirty_sub( Link *link, int *nd ) { if( link->child->dirty ) *nd += 1; return( NULL ); } /* Count the number of dirty children. Used to generate initial leaf counts * and for assert() checking. */ int symbol_ndirty( Symbol *sym ) { int nd = 0; (void) slist_map( sym->topchildren, (SListMapFn) symbol_ndirty_sub, &nd ); return( nd ); } /* Fix a leaf count. */ void * symbol_fix_counts( Symbol *sym ) { #ifdef DEBUG int old_count = sym->ndirtychildren; #endif /*DEBUG*/ sym->ndirtychildren = symbol_ndirty( sym ); #ifdef DEBUG g_assert( sym->ndirtychildren == old_count ); #endif /*DEBUG*/ symbol_state_change( sym ); return( NULL ); } /* Junk all old links, static + dynamic. */ void symbol_link_destroy( Symbol *sym ) { (void) slist_map( sym->topchildren, (SListMapFn) link_destroy, NULL ); } /* Scan a symbol, remaking all the links. */ void symbol_link_build( Symbol *sym ) { g_assert( is_top( sym ) ); /* Make static links for our expr and all subexprs. If this symbol * is being edited, get stuff from the edited value. */ if( sym->expr ) { if( sym->expr->row ) (void) icontainer_map_all( ICONTAINER( sym->expr->row ), (icontainer_map_fn) link_row, sym ); else (void) link_children_expr( sym->expr, sym ); } #ifdef DEBUG printf( "symbol_link_build: " ); symbol_name_print( sym ); printf( "\n" ); dump_links( sym ); #endif /*DEBUG*/ } static void * link_dirty_set_sub( LinkExpr *le, int serial ) { return( expr_dirty( le->expr, serial ) ); } /* Mark exprs in parent dirty. These may be sub exprs, so parent is not * necessarily going to be symbol_dirty_set() ... eg. A2 may be displaying an * instance of class "fred", and we might have edited one of A2's members to * refer to A1 ... but A2 depends on A1, fred does not. */ static void * link_dirty_set( Link *link, int serial ) { /* Mark exprs in parent dirty. */ if( slist_map( link->static_links, (SListMapFn) link_dirty_set_sub, GINT_TO_POINTER( serial ) ) || slist_map( link->dynamic_links, (SListMapFn) link_dirty_set_sub, GINT_TO_POINTER( serial ) ) ) return( link ); return( NULL ); } /* Walk the link graph, marking stuff for recomputation ... link->child has * changed, mark link->parent dirty. */ static void * link_dirty_walk( Link *link, int serial ) { /* Have we walked down this link before? */ if( link->serial == serial ) return( NULL ); link->serial = serial; /* Mark all exprs in parent dirty. */ return( link_dirty_set( link, serial ) ); } /* A symbol has changed ... walk the link graph, marking stuff dirty as * required. We don't mark this sym dirty. */ void * symbol_dirty_intrans( Symbol *sym, int serial ) { g_assert( is_top( sym ) ); return( slist_map( sym->topparents, (SListMapFn) link_dirty_walk, GINT_TO_POINTER( serial ) ) ); } static void * symbol_dirty_set( Symbol *sym ) { g_assert( is_top( sym ) ); /* Clear error, to make sure we will recomp it. */ if( sym->expr ) expr_error_clear( sym->expr ); if( !sym->dirty ) { #ifdef DEBUG_DIRTY printf( "symbol_dirty_set: " ); symbol_name_print( sym ); printf( "(%p)\n", sym ); #endif /*DEBUG_DIRTY*/ /* Change of state. */ sym->dirty = TRUE; /* Update dirty counts on our parents. */ (void) slist_map( sym->topparents, (SListMapFn) link_dirty_child, NULL ); /* Note change in leaf set and display. */ symbol_state_change( sym ); } return( NULL ); } /* ... mark this one as well. */ void * symbol_dirty( Symbol *sym, int serial ) { g_assert( is_top( sym ) ); symbol_dirty_set( sym ); return( symbol_dirty_intrans( sym, serial ) ); } void * link_dirty_total( Link *link, int serial ) { static int recursion_depth = 0; /* Entering: note new recursion. */ if( recursion_depth++ > 1000 ) { error_top( _( "Circular dependency." ) ); error_sub( _( "Circular dependency detected near " "symbol \"%s\"." ), IOBJECT( link->parent )->name ); recursion_depth = 0; return( link ); } /* Mark this sub-tree as dirty. */ symbol_dirty( link->child, serial ); /* ... and repeat for any parents. */ if( link->child->type != SYM_ZOMBIE ) if( slist_map( link->child->topchildren, (SListMapFn) link_dirty_total, GINT_TO_POINTER( serial ) ) ) return( link ); /* Pop recursion measure. */ recursion_depth--; return( NULL ); } /* As above, but mark children as dirty as well. Used by force recalc to make * sure that everything is completely rebuilt. Be careful of cycles! */ void * symbol_dirty_total( Symbol *sym, int serial ) { if( sym->type == SYM_ZOMBIE ) return( NULL ); /* No children: just mark this sub-tree as dirty. */ if( !sym->topchildren && symbol_dirty( sym, serial ) ) return( sym ); if( slist_map( sym->topchildren, (SListMapFn) link_dirty_total, GINT_TO_POINTER( serial ) ) ) return( sym ); return( NULL ); } /* Mark a symbol as clean. Knock down the leaf count of the things which refer * to us ... one of them may turn into a leaf as a result. */ void * symbol_dirty_clear( Symbol *sym ) { g_assert( is_top( sym ) ); if( sym->dirty ) { #ifdef DEBUG_DIRTY printf( "symbol_dirty_clear: " ); symbol_name_print( sym ); printf( "(%p)\n", sym ); #endif /*DEBUG_DIRTY*/ /* Change of state. */ sym->dirty = FALSE; symbol_state_change( sym ); /* Update dirty counts on our parents. */ (void) slist_map( sym->topparents, (SListMapFn) link_clean_child, NULL ); } return( NULL ); } nip2-8.7.0/src/floatwindow.h0000644000175000017500000000320013224651032012605 00000000000000/* abstract base class for imageview / plotwindow etc. */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_FLOATWINDOW (floatwindow_get_type()) #define FLOATWINDOW( obj ) \ (GTK_CHECK_CAST( (obj), TYPE_FLOATWINDOW, Floatwindow )) #define FLOATWINDOW_CLASS( klass ) \ (GTK_CHECK_CLASS_CAST( (klass), TYPE_FLOATWINDOW, FloatwindowClass )) #define IS_FLOATWINDOW( obj ) (GTK_CHECK_TYPE( (obj), TYPE_FLOATWINDOW )) #define IS_FLOATWINDOW_CLASS( klass ) \ (GTK_CHECK_CLASS_TYPE( (klass), TYPE_FLOATWINDOW )) typedef struct _Floatwindow { iWindow parent_class; /* Model stuff here. */ Model *model; } Floatwindow; typedef struct _FloatwindowClass { iWindowClass parent_class; /* My methods. */ } FloatwindowClass; GtkType floatwindow_get_type( void ); void floatwindow_link( Floatwindow *floatwindow, Model *model ); nip2-8.7.0/src/colour.c0000644000175000017500000002146313224651032011561 00000000000000/* an image class object in a workspace */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #include "ip.h" /* Set of allowed colour_space strings. Do a case-insensitive match. */ static const char *colour_colour_space[] = { "xyz", /* index 0 */ "yxy", /* index 1 */ "lab", /* index 2 */ "lch", /* index 3 */ "ucs", /* index 4 */ "rgb", /* index 5 */ "srgb", /* index 6 */ "rgb16", /* index 7 */ "grey16" /* index 8 */ }; /* For each allowed colourspace, the corresponding VIPS Type value. */ static const int colour_type[] = { IM_TYPE_XYZ, IM_TYPE_YXY, IM_TYPE_LAB, IM_TYPE_LCH, IM_TYPE_UCS, IM_TYPE_RGB, IM_TYPE_sRGB, IM_TYPE_RGB16, IM_TYPE_GREY16 }; static ClassmodelClass *parent_class = NULL; static void colour_finalize( GObject *gobject ) { Colour *colour = COLOUR( gobject ); IM_FREE( colour->colour_space ); vips_buf_destroy( &colour->caption ); G_OBJECT_CLASS( parent_class )->finalize( gobject ); } /* Widgets for colour edit. */ typedef struct _ColourEdit { iDialog *idlg; Colour *colour; GtkWidget *colour_widget; } ColourEdit; /* Find the VIPS type for a colour space string. */ static int colour_get_vips_type( Colour *colour ) { int type; int i; /* Default to something harmless. */ type = IM_TYPE_MULTIBAND; if( colour->colour_space ) for( i = 0; i < IM_NUMBER( colour_colour_space ); i++ ) if( strcasecmp( colour->colour_space, colour_colour_space[i] ) == 0 ) { type = colour_type[i]; break; } return( type ); } /* Are two doubles more or less equal. We need this when we check * for update to stop loops. The 0.0001 is a bit of a fudge :-( */ #define DEQ( A, B ) (ABS((A) - (B)) < 0.0001) /* Update non-model stuff in object from the model params. */ static void colour_refresh( Colour *colour ) { vips_buf_rewind( &colour->caption ); vips_buf_appendf( &colour->caption, CLASS_COLOUR " %s [%g, %g, %g]", NN( colour->colour_space ), colour->value[0], colour->value[1], colour->value[2] ); } void colour_set_colour( Colour *colour, const char *colour_space, double value[3] ) { int i; /* No change? */ for( i = 0; i < 3; i++ ) if( !DEQ( value[i], colour->value[i] ) ) break; if( i == 3 && colour_space && strcmp( colour_space, colour->colour_space ) == 0 ) return; for( i = 0; i < 3; i++ ) colour->value[i] = value[i]; IM_SETSTR( colour->colour_space, colour_space ); colour_refresh( colour ); classmodel_update( CLASSMODEL( colour ) ); symbol_recalculate_all(); } /* Code up a colour as an ii. Refcount zero! Will go on next GC. */ Imageinfo * colour_ii_new( Colour *colour ) { Imageinfo *imageinfo; int i; if( !(imageinfo = imageinfo_new_temp( main_imageinfogroup, reduce_context->heap, NULL, "t" )) ) return( NULL ); /* Make a 3 band 32-bit FLOAT memory image. */ im_initdesc( imageinfo->im, 1, 1, 3, IM_BBITS_FLOAT, IM_BANDFMT_FLOAT, IM_CODING_NONE, colour_get_vips_type( colour ), 1.0, 1.0, 0, 0 ); if( im_setupout( imageinfo->im ) ) return( NULL ); for( i = 0; i < 3; i++ ) ((float *) imageinfo->im->data)[i] = colour->value[i]; return( imageinfo ); } /* Convert our colour to rgb. Slow! */ static void colour_get_rgb( Colour *colour, double rgb[4] ) { int i; Imageinfo *imageinfo; for( i = 0; i < 4; i++ ) rgb[i] = 0.0; if( (imageinfo = colour_ii_new( colour )) ) imageinfo_to_rgb( imageinfo, rgb ); } void colour_set_rgb( Colour *colour, double rgb[4] ) { Imageinfo *imageinfo; if( (imageinfo = colour_ii_new( colour )) ) { double old_rgb[4]; double value[3]; int i; /* Setting as RGB can't express small differences since we're * going via 8 bit RGB. So only accept the new value if it's * sufficiently different from * what we have now. */ colour_get_rgb( colour, old_rgb ); if( fabs( rgb[0] - old_rgb[0] ) > (0.5 / 255) || fabs( rgb[1] - old_rgb[1] ) > (0.5 / 255) || fabs( rgb[2] - old_rgb[2] ) > (0.5 / 255) ) { imageinfo_from_rgb( imageinfo, rgb ); for( i = 0; i < 3; i++ ) value[i] = ((float *) imageinfo->im->data)[i]; colour_set_colour( colour, colour->colour_space, value ); } } } /* Done button hit. */ static void colour_done_cb( iWindow *iwnd, void *client, iWindowNotifyFn nfn, void *sys ) { ColourEdit *eds = (ColourEdit *) client; Colour *colour = eds->colour; double rgb[4]; gtk_color_selection_get_color( GTK_COLOR_SELECTION( eds->colour_widget ), rgb ); colour_set_rgb( colour, rgb ); nfn( sys, IWINDOW_YES ); } /* Build the insides of colour edit. */ static void colour_buildedit( iDialog *idlg, GtkWidget *work, ColourEdit *eds ) { Colour *colour = eds->colour; double rgb[4]; eds->colour_widget = gtk_color_selection_new(); gtk_color_selection_set_has_opacity_control( GTK_COLOR_SELECTION( eds->colour_widget ), FALSE ); colour_get_rgb( colour, rgb ); gtk_color_selection_set_color( GTK_COLOR_SELECTION( eds->colour_widget ), rgb ); gtk_box_pack_start( GTK_BOX( work ), eds->colour_widget, TRUE, TRUE, 2 ); gtk_widget_show_all( work ); } static void colour_edit( GtkWidget *parent, Model *model ) { Colour *colour = COLOUR( model ); ColourEdit *eds = INEW( NULL, ColourEdit ); GtkWidget *idlg; eds->colour = colour; idlg = idialog_new(); iwindow_set_title( IWINDOW( idlg ), _( "Edit %s %s" ), IOBJECT_GET_CLASS_NAME( model ), IOBJECT( HEAPMODEL( model )->row )->name ); idialog_set_build( IDIALOG( idlg ), (iWindowBuildFn) colour_buildedit, eds, NULL, NULL ); idialog_set_callbacks( IDIALOG( idlg ), iwindow_true_cb, NULL, idialog_free_client, eds ); idialog_add_ok( IDIALOG( idlg ), colour_done_cb, _( "Set %s" ), IOBJECT_GET_CLASS_NAME( model ) ); iwindow_set_parent( IWINDOW( idlg ), parent ); idialog_set_iobject( IDIALOG( idlg ), IOBJECT( model ) ); idialog_set_pinup( IDIALOG( idlg ), TRUE ); iwindow_build( IWINDOW( idlg ) ); gtk_widget_show( GTK_WIDGET( idlg ) ); } static View * colour_view_new( Model *model, View *parent ) { return( colourview_new() ); } static void * colour_update_model( Heapmodel *heapmodel ) { Colour *colour = COLOUR( heapmodel ); if( HEAPMODEL_CLASS( parent_class )->update_model( heapmodel ) ) return( heapmodel ); colour_refresh( colour ); return( NULL ); } /* Members of colour we automate. */ static ClassmodelMember colour_members[] = { { CLASSMODEL_MEMBER_STRING, NULL, 0, MEMBER_COLOUR_SPACE, "colour_space", N_( "Color Space" ), G_STRUCT_OFFSET( Colour, colour_space ) }, { CLASSMODEL_MEMBER_REALVEC_FIXED, NULL, 3, MEMBER_VALUE, "value", N_( "Value" ), G_STRUCT_OFFSET( Colour, value ) } }; static void colour_class_init( ColourClass *class ) { GObjectClass *gobject_class = (GObjectClass *) class; ModelClass *model_class = (ModelClass *) class; HeapmodelClass *heapmodel_class = (HeapmodelClass *) class; ClassmodelClass *classmodel_class = (ClassmodelClass *) class; parent_class = g_type_class_peek_parent( class ); /* Create signals. */ /* Init methods. */ gobject_class->finalize = colour_finalize; model_class->view_new = colour_view_new; model_class->edit = colour_edit; heapmodel_class->update_model = colour_update_model; /* Static init. */ model_register_loadable( MODEL_CLASS( class ) ); classmodel_class->members = colour_members; classmodel_class->n_members = IM_NUMBER( colour_members ); } static void colour_init( Colour *colour ) { colour->value[0] = 0.0; colour->value[1] = 0.0; colour->value[2] = 0.0; colour->colour_space = NULL; vips_buf_init_dynamic( &colour->caption, MAX_LINELENGTH ); iobject_set( IOBJECT( colour ), CLASS_COLOUR, NULL ); } GType colour_get_type( void ) { static GType type = 0; if( !type ) { static const GTypeInfo info = { sizeof( ColourClass ), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) colour_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof( Colour ), 32, /* n_preallocs */ (GInstanceInitFunc) colour_init, }; type = g_type_register_static( TYPE_CLASSMODEL, "Colour", &info, 0 ); } return( type ); } nip2-8.7.0/src/iregiongroup.c0000644000175000017500000000610513224651032012763 00000000000000/* base model for a client regions on an imageview */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #include "ip.h" static ClassmodelClass *parent_class = NULL; static void * iregiongroup_update_model( Heapmodel *heapmodel ) { #ifdef DEBUG printf( "iregiongroup_update_model: " ); row_name_print( heapmodel->row ); printf( "\n" ); #endif /*DEBUG*/ if( HEAPMODEL_CLASS( parent_class )->update_model( heapmodel ) ) return( heapmodel ); /* Only display most-derived classes. Don't display "this". */ if( heapmodel->row->sym ) model_display( MODEL( heapmodel ), !is_super( heapmodel->row->sym ) && !is_this( heapmodel->row->sym ) ); return( NULL ); } static View * iregiongroup_view_new( Model *model, View *parent ) { return( iregiongroupview_new() ); } static void iregiongroup_class_init( iRegiongroupClass *class ) { ModelClass *model_class = (ModelClass *) class; HeapmodelClass *heapmodel_class = (HeapmodelClass *) class; parent_class = g_type_class_peek_parent( class ); /* Create signals. */ /* Init methods. */ heapmodel_class->update_model = iregiongroup_update_model; model_class->view_new = iregiongroup_view_new; } static void iregiongroup_init( iRegiongroup *iregiongroup ) { /* Display turned on in _update_model() above. */ MODEL( iregiongroup )->display = FALSE; } GType iregiongroup_get_type( void ) { static GType type = 0; if( !type ) { static const GTypeInfo info = { sizeof( iRegiongroupClass ), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) iregiongroup_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof( iRegiongroup ), 32, /* n_preallocs */ (GInstanceInitFunc) iregiongroup_init, }; type = g_type_register_static( TYPE_CLASSMODEL, "iRegiongroup", &info, 0 ); } return( type ); } iRegiongroup * iregiongroup_new( Classmodel *classmodel ) { iRegiongroup *iregiongroup; iregiongroup = IREGIONGROUP( g_object_new( TYPE_IREGIONGROUP, NULL ) ); icontainer_child_add( ICONTAINER( classmodel ), ICONTAINER( iregiongroup ), -1 ); #ifdef DEBUG printf( "iregiongroup_new: " ); row_name_print( HEAPMODEL( classmodel )->row ); printf( "\n" ); #endif /*DEBUG*/ return( iregiongroup ); } nip2-8.7.0/src/columnview.h0000644000175000017500000000675413224651032012461 00000000000000/* view of a column */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_COLUMNVIEW (columnview_get_type()) #define COLUMNVIEW( obj ) \ (GTK_CHECK_CAST( (obj), TYPE_COLUMNVIEW, Columnview )) #define COLUMNVIEW_CLASS( klass ) \ (GTK_CHECK_CLASS_CAST( (klass), TYPE_COLUMNVIEW, ColumnviewClass )) #define IS_COLUMNVIEW( obj ) (GTK_CHECK_TYPE( (obj), TYPE_COLUMNVIEW )) #define IS_COLUMNVIEW_CLASS( klass ) \ (GTK_CHECK_CLASS_TYPE( (klass), TYPE_COLUMNVIEW )) /* State ... for mouse titlebar interactions. */ typedef enum { COL_WAIT, /* Rest state */ COL_SELECT, /* Select start, but no drag yet */ COL_DRAG, /* Drag state */ COL_EDIT /* Editing caption */ } ColumnviewState; struct _Columnview { View view; /* Our enclosing workspaceview. */ Workspaceview *wview; /* Display parts. */ GtkWidget *main; /* Enclosing window for whole cview */ GtkWidget *lab; /* Columnview name label */ GtkWidget *vbox; /* Outermost vbox for cview */ GtkWidget *frame; /* Enclosing frame for tally stuff */ GtkWidget *title; /* Eventbox wrapper for title bar */ GtkWidget *titlehb; /* Title bar hbox */ GtkWidget *updown; /* Fold up/down arrow */ GtkWidget *updownb; /* Fold up/down button */ GtkWidget *head; /* Label on columnview */ GtkWidget *headfr; /* Frame wrapper around label */ GtkWidget *text; /* Text entry at bottom */ GtkWidget *textfr; /* Enclosing stuff for text entry */ GtkWidget *capedit; /* Shadow text for editing caption */ /* A shadow for this cview, used during drag to show where this column * will end up. * * And if we are a shadow, the master cview we are the shadow for. */ Columnview *shadow; Columnview *master; /* Appearance state info. */ int lx, ly; /* last pos we set */ ColumnviewState state; /* Waiting or dragging */ int sx, sy; /* Drag start point */ int rx, ry; /* Drag offset */ int tx, ty; /* Tally window pos in root cods */ gboolean selected; /* Last drawn in selected state? */ /* We watch resize events and trigger a workspace relayout with these. */ int old_width; int old_height; }; typedef struct _ColumnviewClass { ViewClass parent_class; /* My methods. */ } ColumnviewClass; void columnview_get_position( Columnview *cview, int *x, int *y, int *w, int *h ); GtkType columnview_get_type( void ); View *columnview_new( void ); nip2-8.7.0/src/value.h0000644000175000017500000000313713224651032011375 00000000000000/* abstract base class for real/group/vector */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_VALUE (value_get_type()) #define VALUE( obj ) \ (G_TYPE_CHECK_INSTANCE_CAST( (obj), TYPE_VALUE, Value )) #define VALUE_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_CAST( (klass), TYPE_VALUE, ValueClass)) #define IS_VALUE( obj ) \ (G_TYPE_CHECK_INSTANCE_TYPE( (obj), TYPE_VALUE )) #define IS_VALUE_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_TYPE( (klass), TYPE_VALUE )) #define VALUE_GET_CLASS( obj ) \ (G_TYPE_INSTANCE_GET_CLASS( (obj), TYPE_VALUE, ValueClass )) typedef struct _Value { Classmodel model; /* Build caption buffer here. */ VipsBuf caption_buffer; } Value; typedef struct _ValueClass { ClassmodelClass parent_class; /* My methods. */ } ValueClass; GType value_get_type( void ); nip2-8.7.0/src/colourdisplay.h0000644000175000017500000000341213224651032013146 00000000000000/* subclass imagedisplay ... show a patch of plain colour from a 1x1 pixel * imageinfo */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_COLOURDISPLAY (colourdisplay_get_type()) #define COLOURDISPLAY( obj ) \ (GTK_CHECK_CAST( (obj), TYPE_COLOURDISPLAY, Colourdisplay )) #define COLOURDISPLAY_CLASS( klass ) \ (GTK_CHECK_CLASS_CAST( (klass), \ TYPE_COLOURDISPLAY, ColourdisplayClass )) #define IS_COLOURDISPLAY( obj ) (GTK_CHECK_TYPE( (obj), TYPE_COLOURDISPLAY )) #define IS_COLOURDISPLAY_CLASS( klass ) \ (GTK_CHECK_CLASS_TYPE( (klass), TYPE_COLOURDISPLAY )) typedef struct _Colourdisplay { Imagedisplay parent_class; /* Set this to indicate that we prefer to drag as text rather than * colour. */ gboolean drag_as_text; } Colourdisplay; typedef struct _ColourdisplayClass { ImagedisplayClass parent_class; /* My methods. */ } ColourdisplayClass; GtkType colourdisplay_get_type( void ); Colourdisplay *colourdisplay_new( Conversion *conv ); nip2-8.7.0/src/iregion.c0000644000175000017500000003313313224651032011707 00000000000000/* an ip region class object in a workspace */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #include "ip.h" static iImageClass *parent_class = NULL; void iregion_instance_destroy( iRegionInstance *instance ) { instance->image_class.type = ELEMENT_NOVAL; instance->image_class.ele = (void *) 8; MANAGED_UNREF( instance->ii ); instance->classmodel = NULL; instance->iregiongroup = NULL; heap_unregister_element( reduce_context->heap, &instance->image_class ); } void iregion_instance_init( iRegionInstance *instance, Classmodel *classmodel ) { instance->image_class.type = ELEMENT_NOVAL; instance->image_class.ele = (void *) 9; instance->ii = NULL; instance->area.left = 0; instance->area.top = 0; instance->area.width = 0; instance->area.height = 0; instance->classmodel = classmodel; instance->iregiongroup = NULL; heap_register_element( reduce_context->heap, &instance->image_class ); } gboolean iregion_instance_update( iRegionInstance *instance, PElement *root ) { PElement image; PElement image_class; Imageinfo *value; int left, top, width, height; if( !class_get_member_class( root, MEMBER_IMAGE, "Image", &image ) || !class_get_member_image( &image, MEMBER_VALUE, &value ) || !class_get_member_int( root, MEMBER_LEFT, &left ) || !class_get_member_int( root, MEMBER_TOP, &top ) || !class_get_member_int( root, MEMBER_WIDTH, &width ) || !class_get_member_int( root, MEMBER_HEIGHT, &height ) ) return( FALSE ); instance->area.left = left; instance->area.top = top; instance->area.width = width; instance->area.height = height; MANAGED_UNREF( instance->ii ); instance->ii = value; MANAGED_REF( value ); PEPOINTE( &image_class, &instance->image_class ); PEPUTPE( &image_class, &image ); return( TRUE ); } static void iregion_finalize( GObject *gobject ) { iRegion *iregion; #ifdef DEBUG printf( "iregion_finalize\n" ); #endif /*DEBUG*/ g_return_if_fail( gobject != NULL ); g_return_if_fail( IS_IREGION( gobject ) ); iregion = IREGION( gobject ); /* My instance finalize stuff. */ iregion_instance_destroy( &iregion->instance ); G_OBJECT_CLASS( parent_class )->finalize( gobject ); } static void * iregion_generate_caption_sub( iImage *iimage, iRegion *iregion, gboolean *first ) { iImage *our_iimage = IIMAGE( iregion ); Workspace *ws = HEAPMODEL( iregion )->row->ws; Row *row = HEAPMODEL( iimage )->row; /* Supress this name in the caption if it's a superclass. If this * thing is on a super, it's on the subclass too ... not helpful to * have it twice. */ if( row->sym && !is_super( row->sym ) ) { if( *first ) *first = FALSE; else vips_buf_appends( &our_iimage->caption_buffer, ", " ); row_qualified_name_relative( ws->sym, row, &our_iimage->caption_buffer ); } return( NULL ); } static const char * iregion_generate_caption( iObject *iobject ) { iRegion *iregion = IREGION( iobject ); iImage *iimage = IIMAGE( iregion ); const int nimages = g_slist_length( CLASSMODEL( iregion )->iimages ); VipsBuf *buf = &iimage->caption_buffer; gboolean first; vips_buf_rewind( buf ); heapmodel_name( HEAPMODEL( iregion ), buf ); vips_buf_appendf( buf, " " ); /* Expands to (eg.) "Region on A1 at (10, 10), size (50, 50)" */ vips_buf_appendf( buf, _( "on" ) ); vips_buf_appendf( buf, " " ); if( nimages > 1 ) vips_buf_appendf( buf, "[" ); first = TRUE; slist_map2( CLASSMODEL( iregion )->iimages, (SListMap2Fn) iregion_generate_caption_sub, iregion, &first ); if( nimages > 1 ) vips_buf_appendf( buf, "]" ); vips_buf_appendf( buf, " " ); vips_buf_appendf( buf, _( "at (%d, %d), size (%d, %d)" ), iregion->instance.area.left, iregion->instance.area.top, iregion->instance.area.width, iregion->instance.area.height ); return( vips_buf_all( buf ) ); } static void iregion_done_cb( iWindow *iwnd, void *client, iWindowNotifyFn nfn, void *sys ) { Classmodel *classmodel = CLASSMODEL( client ); iRegionInstance *instance = classmodel_get_instance( classmodel ); Stringset *ss = STRINGSET( iwnd ); Rect area; StringsetChild *left = stringset_child_get( ss, _( "Left" ) ); StringsetChild *top = stringset_child_get( ss, _( "Top" ) ); StringsetChild *width = stringset_child_get( ss, _( "Width" ) ); StringsetChild *height = stringset_child_get( ss, _( "Height" ) ); if( !get_geditable_int( left->entry, &area.left ) || !get_geditable_int( top->entry, &area.top ) || !get_geditable_int( width->entry, &area.width ) || !get_geditable_int( height->entry, &area.height ) ) { nfn( sys, IWINDOW_ERROR ); return; } if( instance ) { instance->area = area; classmodel_update( classmodel ); symbol_recalculate_all(); } nfn( sys, IWINDOW_YES ); } static View * iregion_view_new( Model *model, View *parent ) { return( iregionview_new() ); } /* Pop up a iregion edit box. Shared with iarrow.c. */ void iregion_edit( GtkWidget *parent, Model *model ) { Classmodel *classmodel = CLASSMODEL( model ); iRegionInstance *instance = classmodel_get_instance( classmodel ); GtkWidget *ss = stringset_new(); if( instance ) { char txt[256]; im_snprintf( txt, 256, "%d", instance->area.left ); stringset_child_new( STRINGSET( ss ), _( "Left" ), txt, _( "Left edge of region" ) ); im_snprintf( txt, 256, "%d", instance->area.top ); stringset_child_new( STRINGSET( ss ), _( "Top" ), txt, _( "Top edge of region" ) ); im_snprintf( txt, 256, "%d", instance->area.width ); stringset_child_new( STRINGSET( ss ), _( "Width" ), txt, _( "Width of region" ) ); im_snprintf( txt, 256, "%d", instance->area.height ); stringset_child_new( STRINGSET( ss ), _( "Height" ), txt, _( "Height of region" ) ); } iwindow_set_title( IWINDOW( ss ), _( "Edit %s %s" ), IOBJECT_GET_CLASS_NAME( model ), IOBJECT( HEAPMODEL( model )->row )->name ); idialog_set_callbacks( IDIALOG( ss ), iwindow_true_cb, NULL, NULL, classmodel ); idialog_add_ok( IDIALOG( ss ), iregion_done_cb, _( "Set %s" ), IOBJECT_GET_CLASS_NAME( model ) ); iwindow_set_parent( IWINDOW( ss ), GTK_WIDGET( parent ) ); idialog_set_iobject( IDIALOG( ss ), IOBJECT( model ) ); idialog_set_pinup( IDIALOG( ss ), TRUE ); iwindow_build( IWINDOW( ss ) ); gtk_widget_show( ss ); } /* Shared with iarrow.c. */ void iregion_parent_add( iContainer *child ) { ICONTAINER_CLASS( parent_class )->parent_add( child ); /* Now we're all linked up, make a child model to handle client * displays on imageviews. */ (void) iregiongroup_new( CLASSMODEL( child ) ); } /* Shared with iarrow.c. */ xmlNode * iregion_save( Model *model, xmlNode *xnode ) { /* Get our parent class. We can't just use the global parent_class, * since due to our lame MI scheme, this method may be called for * iarrow/ipoint etc. as well as iregion ... look up dynamically. */ gpointer parent_class = PARENT_CLASS_DYNAMIC( model ); iRegionInstance *instance = classmodel_get_instance( CLASSMODEL( model ) ); xmlNode *xthis; if( !(xthis = MODEL_CLASS( parent_class )->save( model, xnode )) ) return( NULL ); if( instance && CLASSMODEL( model )->edited ) { Rect *area = &instance->area; if( !set_iprop( xthis, "left", area->left ) || !set_iprop( xthis, "top", area->top ) || !set_iprop( xthis, "width", area->width ) || !set_iprop( xthis, "height", area->height ) ) return( NULL ); } return( xthis ); } /* Shared with iarrow.c. */ gboolean iregion_load( Model *model, ModelLoadState *state, Model *parent, xmlNode *xnode ) { gpointer parent_class = PARENT_CLASS_DYNAMIC( model ); iRegionInstance *instance = classmodel_get_instance( CLASSMODEL( model ) ); g_assert( IS_RHS( parent ) ); if( instance ) { Rect *area = &instance->area; if( get_iprop( xnode, "left", &area->left ) && get_iprop( xnode, "top", &area->top ) && get_iprop( xnode, "width", &area->width ) && get_iprop( xnode, "height", &area->height ) ) classmodel_set_edited( CLASSMODEL( model ), TRUE ); } return( MODEL_CLASS( parent_class )->load( model, state, parent, xnode ) ); } /* Need to implement _update_heap(), as not all model fields are directly * editable ... some are set only from expr. See also iimage.c. Shared with * iarrow.c. */ void * iregion_update_heap( Heapmodel *heapmodel ) { gpointer parent_class = PARENT_CLASS_DYNAMIC( heapmodel ); iRegionInstance *instance = classmodel_get_instance( CLASSMODEL( heapmodel ) ); Expr *expr = heapmodel->row->expr; Rect area; PElement pe; if( instance ) { /* Save any model fields that may have been set by _load() and * which might be zapped by _get_instance(). */ area = instance->area; /* Look for the base instance and update from that. */ if( !class_get_exact( &expr->root, IOBJECT( heapmodel )->name, &pe ) ) return( FALSE ); if( !iregion_instance_update( instance, &pe ) ) return( heapmodel ); /* Restore model fields from _load(). */ instance->area = area; } /* Classmodel _update_heap() will do _instance_new() from the fixed up * model. */ return( HEAPMODEL_CLASS( parent_class )->update_heap( heapmodel ) ); } static void * iregion_update_model( Heapmodel *heapmodel ) { iRegion *iregion = IREGION( heapmodel ); if( HEAPMODEL_CLASS( parent_class )->update_model( heapmodel ) ) return( heapmodel ); /* Update who-has-displays-on-what stuff. */ classmodel_iimage_update( CLASSMODEL( iregion ), iregion->instance.ii ); /* Make sure the caption is regenerated. */ iobject_changed( IOBJECT( heapmodel ) ); return( NULL ); } /* Update iRegion from heap. Shared with iarrow.c. */ gboolean iregion_class_get( Classmodel *classmodel, PElement *root ) { gpointer parent_class = PARENT_CLASS_DYNAMIC( classmodel ); iRegionInstance *instance = classmodel_get_instance( classmodel ); #ifdef DEBUG printf( "iregion_class_get: " ); row_name_print( HEAPMODEL( classmodel )->row ); printf( "\n" ); #endif /*DEBUG*/ if( instance && !iregion_instance_update( instance, root ) ) return( FALSE ); return( CLASSMODEL_CLASS( parent_class )->class_get( classmodel, root ) ); } /* Make a new "fn value" application. Shared with iarrow.c. */ gboolean iregion_class_new( Classmodel *classmodel, PElement *fn, PElement *out ) { Heap *heap = reduce_context->heap; iRegionInstance *instance = classmodel_get_instance( classmodel ); PElement rhs; #ifdef DEBUG printf( "iregion_class_new\n" ); #endif /*DEBUG*/ /* Make application nodes. */ if( instance ) { heap_appl_init( out, fn ); if( !heap_appl_add( heap, out, &rhs ) || !heap_element_new( heap, &instance->image_class, &rhs ) || !heap_appl_add( heap, out, &rhs ) || !heap_real_new( heap, instance->area.left, &rhs ) || !heap_appl_add( heap, out, &rhs ) || !heap_real_new( heap, instance->area.top, &rhs ) || !heap_appl_add( heap, out, &rhs ) || !heap_real_new( heap, instance->area.width, &rhs ) || !heap_appl_add( heap, out, &rhs ) || !heap_real_new( heap, instance->area.height, &rhs ) ) return( FALSE ); } return( TRUE ); } static void * iregion_get_instance( Classmodel *classmodel ) { iRegion *iregion = IREGION( classmodel ); return( &iregion->instance ); } static void iregion_class_init( iRegionClass *class ) { GObjectClass *gobject_class = (GObjectClass *) class; iObjectClass *iobject_class = (iObjectClass *) class; iContainerClass *icontainer_class = (iContainerClass *) class; ModelClass *model_class = (ModelClass *) class; HeapmodelClass *heapmodel_class = (HeapmodelClass *) class; ClassmodelClass *classmodel_class = (ClassmodelClass *) class; parent_class = g_type_class_peek_parent( class ); /* Create signals. */ /* Init methods. */ gobject_class->finalize = iregion_finalize; iobject_class->user_name = _( "Region" ); iobject_class->generate_caption = iregion_generate_caption; icontainer_class->parent_add = iregion_parent_add; model_class->view_new = iregion_view_new; model_class->edit = iregion_edit; model_class->save = iregion_save; model_class->load = iregion_load; heapmodel_class->update_heap = iregion_update_heap; heapmodel_class->update_model = iregion_update_model; classmodel_class->class_get = iregion_class_get; classmodel_class->class_new = iregion_class_new; classmodel_class->get_instance = iregion_get_instance; /* Static init. */ model_register_loadable( MODEL_CLASS( class ) ); } static void iregion_init( iRegion *iregion ) { iregion_instance_init( &iregion->instance, CLASSMODEL( iregion ) ); iobject_set( IOBJECT( iregion ), CLASS_REGION, NULL ); } GType iregion_get_type( void ) { static GType type = 0; if( !type ) { static const GTypeInfo info = { sizeof( iRegionClass ), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) iregion_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof( iRegion ), 32, /* n_preallocs */ (GInstanceInitFunc) iregion_init, }; type = g_type_register_static( TYPE_IIMAGE, "iRegion", &info, 0 ); } return( type ); } nip2-8.7.0/src/formula.c0000644000175000017500000003466213224651032011730 00000000000000/* display a caption/value label pair, on a click display the formula in an * entry widget */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #include "ip.h" /* Our signals. */ enum { EDIT, CHANGED, ACTIVATE, ENTER, LEAVE, LAST_SIGNAL }; static GtkEventBoxClass *parent_class = NULL; static guint formula_signals[LAST_SIGNAL] = { 0 }; /* Formula needing a refresh. */ static GSList *formula_refresh_all = NULL; /* The idle we add if there are any formula needing a refresh. */ static gint formula_refresh_idle = 0; /* Unqueue a refresh. */ static void formula_refresh_unqueue( Formula *formula ) { if( formula->refresh_queued ) { formula_refresh_all = g_slist_remove( formula_refresh_all, formula ); formula->refresh_queued = FALSE; if( !formula_refresh_all ) IM_FREEF( g_source_remove, formula_refresh_idle ); } } /* Detect cancel in a text field. */ static gboolean formula_key_press_event_cb( GtkWidget *widget, GdkEventKey *ev, Formula *formula ) { gboolean handled; handled = FALSE; if( ev->keyval == GDK_Escape ) { set_gentry( formula->entry, "%s", formula->expr ); /* FIXME ... really we want to go back to the edit mode set by our environment (eg. if we're in a show_formula workspace, should stay in show formula). */ formula_set_edit( formula, FALSE ); handled = TRUE; } return( handled ); } /* Activated! */ static void formula_activate( Formula *formula ) { g_signal_emit( G_OBJECT( formula ), formula_signals[ACTIVATE], 0 ); } static void formula_activate_cb( GtkWidget *wid, Formula *formula ) { formula_activate( formula ); } /* A char has changed in the entry (we will need scanning on activate). */ static void formula_changed( Formula *formula ) { g_signal_emit( G_OBJECT( formula ), formula_signals[CHANGED], 0 ); } /* Add an edit box. */ static void formula_add_edit( Formula *formula ) { if( formula->entry_frame ) return; /* We need to use an alignment since if the left label is hidden we'll * have nothing to hold us to the right height. */ formula->entry_frame = gtk_alignment_new( 0.5, 0.5, 1, 1 ); gtk_alignment_set_padding( GTK_ALIGNMENT( formula->entry_frame ), 3, 3, 2, 2 ); gtk_box_pack_start( GTK_BOX( formula->hbox ), formula->entry_frame, TRUE, TRUE, 0 ); formula->entry = gtk_entry_new(); set_tooltip( formula->entry, _( "Press Escape to cancel edit, " "press Return to accept edit and recalculate" ) ); gtk_signal_connect( GTK_OBJECT( formula->entry ), "key_press_event", GTK_SIGNAL_FUNC( formula_key_press_event_cb ), GTK_OBJECT( formula ) ); gtk_signal_connect_object( GTK_OBJECT( formula->entry ), "changed", GTK_SIGNAL_FUNC( formula_changed ), GTK_OBJECT( formula ) ); gtk_signal_connect( GTK_OBJECT( formula->entry ), "activate", GTK_SIGNAL_FUNC( formula_activate_cb ), formula ); gtk_container_add( GTK_CONTAINER( formula->entry_frame ), formula->entry ); gtk_widget_show( formula->entry ); /* Tell everyone we are in edit mode ... used to add to resettable, * for example. */ g_signal_emit( G_OBJECT( formula ), formula_signals[EDIT], 0 ); } static void formula_refresh( Formula *formula ) { #ifdef DEBUG printf( "formula_refresh\n" ); #endif /*DEBUG*/ /* Set edit mode. */ if( formula->edit ) { formula_add_edit( formula ); gtk_widget_show( formula->entry_frame ); gtk_widget_hide( formula->right_label ); formula->changed = FALSE; } else { gtk_widget_show( formula->right_label ); IM_FREEF( gtk_widget_destroy, formula->entry ); IM_FREEF( gtk_widget_destroy, formula->entry_frame ); } /* Don't update the formula display if the user has edited the text ... * we shouldn't destroy their work. */ if( formula->entry && formula->expr && !formula->changed ) { /* Make sure we don't trigger "changed" when we zap in new * text. */ gtk_signal_handler_block_by_data( GTK_OBJECT( formula->entry ), formula ); set_gentry( formula->entry, "%s", formula->expr ); gtk_signal_handler_unblock_by_data( GTK_OBJECT( formula->entry ), formula ); } if( formula->caption ) { set_glabel( formula->left_label, _( "%s:" ), formula->caption ); gtk_widget_show( formula->left_label ); } else gtk_widget_hide( formula->left_label ); if( formula->value ) /* Just display the first line of the formula ... it can be * mutiline for class members, for example. */ set_glabel1( formula->right_label, "%s", formula->value ); if( formula->edit && formula->needs_focus ) { if( formula->expr ) gtk_editable_select_region( GTK_EDITABLE( formula->entry ), 0, -1 ); gtk_widget_grab_focus( formula->entry ); formula->needs_focus = FALSE; } } static gboolean formula_refresh_idle_cb( void ) { formula_refresh_idle = 0; while( formula_refresh_all ) { Formula *formula = FORMULA( formula_refresh_all->data ); formula_refresh_unqueue( formula ); formula_refresh( formula ); } return( FALSE ); } static void formula_refresh_queue( Formula *formula ) { if( !formula->refresh_queued ) { formula_refresh_all = g_slist_prepend( formula_refresh_all, formula ); formula->refresh_queued = TRUE; if( !formula_refresh_idle ) formula_refresh_idle = g_idle_add( (GSourceFunc) formula_refresh_idle_cb, NULL ); } } static void formula_destroy( GtkObject *object ) { Formula *formula; #ifdef DEBUG printf( "formula_destroy\n" ); #endif /*DEBUG*/ g_return_if_fail( object != NULL ); g_return_if_fail( IS_FORMULA( object ) ); /* My instance destroy stuff. */ formula = FORMULA( object ); formula_refresh_unqueue( formula ); IM_FREE( formula->caption ); IM_FREE( formula->value ); IM_FREE( formula->expr ); GTK_OBJECT_CLASS( parent_class )->destroy( object ); } /* Change edit mode. */ void formula_set_edit( Formula *formula, gboolean edit ) { #ifdef DEBUG printf( "formula_set_edit: %d\n", edit ); #endif /*DEBUG*/ if( formula->edit != edit ) { formula->edit = edit; formula_refresh_queue( formula ); } /* Can't have been edited yet, whichever way we're turning edit. */ formula->changed = FALSE; } /* Grab focus on next refresh. */ void formula_set_needs_focus( Formula *formula, gboolean needs_focus ) { #ifdef DEBUG printf( "formula_set_needs_focus: %d\n", needs_focus ); #endif /*DEBUG*/ if( formula->needs_focus != needs_focus ) { formula->needs_focus = needs_focus; formula_refresh_queue( formula ); } } /* Change sensitive mode. */ void formula_set_sensitive( Formula *formula, gboolean sensitive ) { #ifdef DEBUG printf( "formula_set_sensitive: %d\n", sensitive ); #endif /*DEBUG*/ if( formula->sensitive != sensitive ) { formula->sensitive = sensitive; if( !formula->sensitive ) formula_set_edit( formula, FALSE ); formula_refresh_queue( formula ); } } /* Re-read the text. TRUE if we saw a change. */ gboolean formula_scan( Formula *formula ) { gboolean changed; #ifdef DEBUG printf( "formula_scan\n" ); #endif /*DEBUG*/ changed = FALSE; /* Should be in edit mode. */ if( formula->edit && formula->entry && GTK_WIDGET_VISIBLE( formula->entry ) ) { const char *expr; /* There should be some edited text. */ expr = gtk_entry_get_text( GTK_ENTRY( formula->entry ) ); if( expr && strspn( expr, WHITESPACE ) != strlen( expr ) ) { IM_SETSTR( formula->expr, expr ); changed = TRUE; } formula_set_edit( formula, FALSE ); } return( changed ); } static gboolean formula_enter_notify_event( GtkWidget *widget, GdkEventCrossing *event ) { GtkWidget *event_widget; event_widget = gtk_get_event_widget( (GdkEvent *) event ); if( event_widget == widget && event->detail != GDK_NOTIFY_INFERIOR ) { gtk_widget_set_state( widget, GTK_STATE_PRELIGHT ); /* Tell people about our highlight change ... used to (eg.) set * flash help. */ g_signal_emit( G_OBJECT( widget ), formula_signals[ENTER], 0 ); } return( FALSE ); } static gboolean formula_leave_notify_event( GtkWidget *widget, GdkEventCrossing *event ) { GtkWidget *event_widget; event_widget = gtk_get_event_widget( (GdkEvent *) event ); if( event_widget == widget && event->detail != GDK_NOTIFY_INFERIOR ) { gtk_widget_set_state( widget, GTK_STATE_NORMAL ); /* Tell people about our highlight change ... used to (eg.) set * flash help. */ g_signal_emit( G_OBJECT( widget ), formula_signals[LEAVE], 0 ); } return( FALSE ); } /* Event in us somewhere. */ static gboolean formula_button_press_event( GtkWidget *widget, GdkEventButton *event ) { gboolean handled = FALSE; if( event->type == GDK_BUTTON_PRESS ) { Formula *formula = FORMULA( widget ); if( event->button == 1 && formula->sensitive ) { if( !formula->edit ) { formula_set_edit( formula, TRUE ); formula_set_needs_focus( formula, TRUE ); } handled = TRUE; } } return( handled ); } static void formula_real_changed( Formula *formula ) { #ifdef DEBUG printf( "formula_real_changed\n" ); #endif /*DEBUG*/ formula->changed = TRUE; } static void formula_class_init( FormulaClass *class ) { GtkObjectClass *gobject_class = (GtkObjectClass *) class; GtkWidgetClass *widget_class = (GtkWidgetClass *) class; parent_class = g_type_class_peek_parent( class ); gobject_class->destroy = formula_destroy; widget_class->enter_notify_event = formula_enter_notify_event; widget_class->leave_notify_event = formula_leave_notify_event; widget_class->button_press_event = formula_button_press_event; /* Create signals. */ formula_signals[EDIT] = g_signal_new( "edit", G_OBJECT_CLASS_TYPE( gobject_class ), G_SIGNAL_RUN_FIRST, G_STRUCT_OFFSET( FormulaClass, changed ), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0 ); formula_signals[CHANGED] = g_signal_new( "changed", G_OBJECT_CLASS_TYPE( gobject_class ), G_SIGNAL_RUN_FIRST, G_STRUCT_OFFSET( FormulaClass, changed ), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0 ); formula_signals[ACTIVATE] = g_signal_new( "activate", G_OBJECT_CLASS_TYPE( gobject_class ), G_SIGNAL_RUN_FIRST, G_STRUCT_OFFSET( FormulaClass, activate ), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0 ); formula_signals[ENTER] = g_signal_new( "enter", G_OBJECT_CLASS_TYPE( gobject_class ), G_SIGNAL_RUN_FIRST, G_STRUCT_OFFSET( FormulaClass, enter ), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0 ); formula_signals[LEAVE] = g_signal_new( "leave", G_OBJECT_CLASS_TYPE( gobject_class ), G_SIGNAL_RUN_FIRST, G_STRUCT_OFFSET( FormulaClass, leave ), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0 ); /* Init methods. */ class->changed = formula_real_changed; } static void formula_init( Formula *formula ) { /* How annoying! To avoid vertical resizes on edit/view toggles we * need to add differing amounts of padding to the label depending on * the theme. FIXME ... get this from the style somehow */ #ifdef OS_WIN32 /* with either wimp theme or gtk default. */ const int vpadding = 7; #else /*!OS_WIN32*/ /* clearlooks */ const int vpadding = 8; #endif /*OS_WIN32*/ formula->caption = NULL; formula->value = NULL; formula->expr = NULL; formula->edit = FALSE; formula->sensitive = TRUE; formula->changed = FALSE; formula->refresh_queued = FALSE; formula->needs_focus = FALSE; formula->entry_frame = NULL; gtk_widget_add_events( GTK_WIDGET( formula ), GDK_POINTER_MOTION_HINT_MASK ); formula->hbox = gtk_hbox_new( FALSE, 12 ); gtk_container_add( GTK_CONTAINER( formula ), formula->hbox ); gtk_widget_show( formula->hbox ); formula->left_label = gtk_label_new( "" ); gtk_misc_set_alignment( GTK_MISC( formula->left_label ), 0, 0.5 ); gtk_misc_set_padding( GTK_MISC( formula->left_label ), 2, vpadding ); gtk_box_pack_start( GTK_BOX( formula->hbox ), formula->left_label, FALSE, FALSE, 2 ); gtk_widget_show( formula->left_label ); formula->right_label = gtk_label_new( "" ); gtk_misc_set_alignment( GTK_MISC( formula->right_label ), 0, 0.5 ); gtk_misc_set_padding( GTK_MISC( formula->right_label ), 7, vpadding ); gtk_box_pack_start( GTK_BOX( formula->hbox ), formula->right_label, TRUE, TRUE, 0 ); gtk_widget_show( formula->right_label ); } GtkType formula_get_type( void ) { static GtkType formula_type = 0; if( !formula_type ) { static const GtkTypeInfo formula_info = { "Formula", sizeof( Formula ), sizeof( FormulaClass ), (GtkClassInitFunc) formula_class_init, (GtkObjectInitFunc) formula_init, /* reserved_1 */ NULL, /* reserved_2 */ NULL, (GtkClassInitFunc) NULL, }; formula_type = gtk_type_unique( GTK_TYPE_EVENT_BOX, &formula_info ); } return( formula_type ); } Formula * formula_new( void ) { Formula *formula = gtk_type_new( TYPE_FORMULA ); return( formula ); } void formula_set_caption( Formula *formula, const char *caption ) { if( !caption && formula->caption ) { IM_FREE( formula->caption ); formula_refresh_queue( formula ); } else if( caption && (!formula->caption || strcmp( caption, formula->caption ) != 0) ) { IM_SETSTR( formula->caption, caption ); formula_refresh_queue( formula ); } } void formula_set_value_expr( Formula *formula, const char *value, const char *expr ) { #ifdef DEBUG printf( "formula_set_value_expr: value=\"%s\", expr=\"%s\"\n", value, expr ); #endif /*DEBUG*/ if( value && (!formula->value || strcmp( value, formula->value ) != 0) ) { IM_SETSTR( formula->value, value ); formula_refresh_queue( formula ); } if( expr && (!formula->expr || strcmp( expr, formula->expr ) != 0) ) { IM_SETSTR( formula->expr, expr ); formula_refresh_queue( formula ); } } nip2-8.7.0/src/imagedisplay.h0000644000175000017500000000470613224651032012734 00000000000000/* Imagedisplay widget stuff. */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_IMAGEDISPLAY (imagedisplay_get_type()) #define IMAGEDISPLAY( obj ) \ (G_TYPE_CHECK_INSTANCE_CAST( (obj), TYPE_IMAGEDISPLAY, Imagedisplay )) #define IMAGEDISPLAY_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_CAST( (klass), \ TYPE_IMAGEDISPLAY, ImagedisplayClass)) #define IS_IMAGEDISPLAY( obj ) \ (G_TYPE_CHECK_INSTANCE_TYPE( (obj), TYPE_IMAGEDISPLAY )) #define IS_IMAGEDISPLAY_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_TYPE( (klass), TYPE_IMAGEDISPLAY )) #define IMAGEDISPLAY_GET_CLASS( obj ) \ (G_TYPE_INSTANCE_GET_CLASS( (obj), \ TYPE_IMAGEDISPLAY, ImagedisplayClass )) /* Display an entire image. Put in a scrolled window to see just part of it. */ struct _Imagedisplay { GtkDrawingArea parent_object; /* Image we display. */ Conversion *conv; /* Conversion we display */ guint changed_sid; /* Watch conv with these */ guint area_changed_sid; gboolean shrink_to_fit; /* Auto-shrink mode */ /* GCs also used by region paint. */ GdkGC *back_gc; GdkGC *top_gc; GdkGC *bottom_gc; }; /* Class structure. */ typedef struct _ImagedisplayClass { /* Drawing area we paint in. */ GtkDrawingAreaClass parent_class; /* Virtual methods. */ void (*conversion_changed)( Imagedisplay * ); void (*area_changed)( Imagedisplay *, Rect * ); } ImagedisplayClass; void imagedisplay_queue_draw_area( Imagedisplay *id, Rect *area ); GType imagedisplay_get_type( void ); void imagedisplay_set_conversion( Imagedisplay *id, Conversion *conv ); Imagedisplay *imagedisplay_new( Conversion *conv ); void imagedisplay_set_shrink_to_fit( Imagedisplay *id, gboolean shrink_to_fit ); nip2-8.7.0/src/rhs.c0000644000175000017500000002350313224651032011047 00000000000000/* the rhs of a tallyrow ... group together everything to the right of the * button */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #include "ip.h" /* #define DEBUG */ static HeapmodelClass *parent_class = NULL; /* child is about to be added ... update our graphic/scol/text shortcuts. */ static void rhs_child_add( iContainer *parent, iContainer *child, int pos ) { Rhs *rhs = RHS( parent ); if( IS_SUBCOLUMN( child ) ) { IDESTROY( rhs->scol ); rhs->scol = MODEL( child ); } else if( IS_ITEXT( child ) ) { IDESTROY( rhs->itext ); rhs->itext = MODEL( child ); } else { IDESTROY( rhs->graphic ); rhs->graphic = MODEL( child ); } ICONTAINER_CLASS( parent_class )->child_add( parent, child, pos ); } static void rhs_child_remove( iContainer *parent, iContainer *child ) { Rhs *rhs = RHS( parent ); if( (void *) child == (void *) rhs->graphic ) rhs->graphic = NULL; else if( (void *) child == (void *) rhs->scol ) rhs->scol = NULL; else if( (void *) child == (void *) rhs->itext ) rhs->itext = NULL; ICONTAINER_CLASS( parent_class )->child_remove( parent, child ); } static void rhs_parent_add( iContainer *child ) { g_assert( IS_ROW( child->parent ) ); ICONTAINER_CLASS( parent_class )->parent_add( child ); } static View * rhs_view_new( Model *model, View *parent ) { return( rhsview_new() ); } static gboolean rhs_load( Model *model, ModelLoadState *state, Model *parent, xmlNode *xnode ) { Rhs *rhs = RHS( model ); g_assert( IS_ROW( parent ) ); /* Hmm. Is this guaranteed? */ g_assert( sizeof( RhsFlags ) == sizeof( int ) ); if( !get_iprop( xnode, "vislevel", &rhs->vislevel ) || !get_iprop( xnode, "flags", (int *) &rhs->flags ) ) return( FALSE ); if( !MODEL_CLASS( parent_class )->load( model, state, parent, xnode ) ) return( FALSE ); return( TRUE ); } static xmlNode * rhs_save( Model *model, xmlNode *xnode ) { Rhs *rhs = RHS( model ); xmlNode *xthis; if( !(xthis = MODEL_CLASS( parent_class )->save( model, xnode )) ) return( NULL ); if( !set_iprop( xthis, "vislevel", rhs->vislevel ) || !set_iprop( xthis, "flags", rhs->flags ) ) return( NULL ); return( xthis ); } /* How to spot and make a graphic display. */ typedef struct { const char *name; GType (*type)( void ); } RhsGraphic; /* All our graphicdisplay widgets. Order is important! Most-derived classes * first. */ static RhsGraphic rhs_graphic[] = { { CLASS_CLOCK, clock_get_type }, { CLASS_EXPRESSION, expression_get_type }, { CLASS_GROUP, group_get_type }, { CLASS_LIST, group_get_type }, { CLASS_PATHNAME, pathname_get_type }, { CLASS_FONTNAME, fontname_get_type }, { CLASS_TOGGLE, toggle_get_type }, { CLASS_SLIDER, slider_get_type }, { CLASS_COLOUR, colour_get_type }, { CLASS_OPTION, option_get_type }, { CLASS_MATRIX, matrix_get_type }, { CLASS_ARROW, iarrow_get_type }, { CLASS_REGION, iregion_get_type }, { CLASS_PLOT, plot_get_type }, { CLASS_IMAGE, iimage_get_type }, { CLASS_NUMBER, number_get_type }, { CLASS_REAL, real_get_type }, { CLASS_VECTOR, vector_get_type }, { CLASS_STRING, string_get_type } }; /* Create/destroy the graphic display. */ static gboolean rhs_refresh_graphic( Rhs *rhs, PElement *root ) { gboolean result; Row *row = HEAPMODEL( rhs )->row; int i; if( !heap_is_class( root, &result ) ) return( FALSE ); /* Only for non-parameter class objects. */ if( result && row->sym && row->sym->type != SYM_PARAM ) { for( i = 0; i < IM_NUMBER( rhs_graphic ); i++ ) { const char *name = rhs_graphic[i].name; if( !heap_is_instanceof( name, root, &result ) ) return( FALSE ); if( result ) break; } if( i != IM_NUMBER( rhs_graphic ) ) { GType type = rhs_graphic[i].type(); if( !rhs->graphic || !TYPE_EXACT( rhs->graphic, type ) ) classmodel_new_classmodel( type, rhs ); } else /* Not a class we know about. */ IDESTROY( rhs->graphic ); } else /* Should be no graphic display. */ IDESTROY( rhs->graphic ); return( TRUE ); } static void * rhs_new_heap( Heapmodel *heapmodel, PElement *root ) { gboolean result; Rhs *rhs = RHS( heapmodel ); Row *row = HEAPMODEL( rhs )->row; #ifdef DEBUG printf( "rhs_new_heap: " ); row_name_print( HEAPMODEL( rhs )->row ); printf( "\n" ); #endif /*DEBUG*/ /* Create/reuse/destroy the graphic display. */ if( !rhs_refresh_graphic( rhs, root ) ) return( rhs ); /* Create/reuse/destroy class display. Only for non-param symbols. */ if( !heap_is_class( root, &result ) ) return( rhs ); if( result && row->sym && row->sym->type != SYM_PARAM ) { if( !rhs->scol || !IS_SUBCOLUMN( rhs->scol ) ) subcolumn_new( rhs, NULL ); } else /* Should be no klass display. */ IDESTROY( rhs->scol ); /* Create/reuse/destroy text display. */ if( !rhs->itext ) itext_new( rhs ); /* Recurse for children. */ if( rhs->graphic ) if( heapmodel_new_heap( HEAPMODEL( rhs->graphic ), root ) ) return( rhs ); if( rhs->scol ) if( heapmodel_new_heap( HEAPMODEL( rhs->scol ), root ) ) return( rhs ); if( rhs->itext ) if( heapmodel_new_heap( HEAPMODEL( rhs->itext ), root ) ) return( rhs ); return( HEAPMODEL_CLASS( parent_class )->new_heap( heapmodel, root ) ); } /* Rethink child visibility. */ void rhs_set_vislevel( Rhs *rhs, int vislevel ) { vislevel = IM_MAX( 0, vislevel ); #ifdef DEBUG printf( "rhs_set_vislevel: %d ...\n", vislevel ); #endif /*DEBUG*/ if( rhs->scol ) { Subcolumn *scol = SUBCOLUMN( rhs->scol ); if( rhs->graphic ) { switch( vislevel ) { case 0: rhs->flags = RHS_ITEXT; break; case 1: rhs->flags = RHS_GRAPHIC; break; case 2: rhs->flags = RHS_ITEXT | RHS_GRAPHIC; break; default: rhs->flags = RHS_ITEXT | RHS_GRAPHIC | RHS_SCOL; } subcolumn_set_vislevel( scol, vislevel - 2 ); if( vislevel < 3 ) rhs->vislevel = vislevel; else rhs->vislevel = scol->vislevel + 2; } else { vislevel = IM_MAX( 1, vislevel ); if( vislevel == 1 ) rhs->flags = RHS_ITEXT; else rhs->flags = RHS_ITEXT | RHS_SCOL; subcolumn_set_vislevel( scol, vislevel - 1 ); rhs->vislevel = scol->vislevel + 1; } } else { rhs->flags = RHS_ITEXT; rhs->vislevel = vislevel; } #ifdef DEBUG printf( "... set to: %d\n", rhs->vislevel ); #endif /*DEBUG*/ iobject_changed( IOBJECT( rhs ) ); } void rhs_vislevel_up( Rhs *rhs ) { rhs_set_vislevel( rhs, rhs->vislevel + 1 ); } void rhs_vislevel_down( Rhs *rhs ) { rhs_set_vislevel( rhs, rhs->vislevel - 1 ); } static void * rhs_update_model( Heapmodel *heapmodel ) { Rhs *rhs = RHS( heapmodel ); /* Update visibility. */ rhs_set_vislevel( rhs, rhs->vislevel ); return( HEAPMODEL_CLASS( parent_class )->update_model( heapmodel ) ); } static void rhs_class_init( RhsClass *class ) { iContainerClass *icontainer_class = (iContainerClass *) class; ModelClass *model_class = (ModelClass *) class; HeapmodelClass *heapmodel_class = (HeapmodelClass *) class; parent_class = g_type_class_peek_parent( class ); /* Create signals. */ /* Init methods. */ icontainer_class->child_add = rhs_child_add; icontainer_class->child_remove = rhs_child_remove; icontainer_class->parent_add = rhs_parent_add; model_class->view_new = rhs_view_new; model_class->load = rhs_load; model_class->save = rhs_save; heapmodel_class->new_heap = rhs_new_heap; heapmodel_class->update_model = rhs_update_model; /* Static init. */ model_register_loadable( MODEL_CLASS( class ) ); } static void rhs_init( Rhs *rhs ) { #ifdef DEBUG printf( "rhs_init\n" ); #endif /*DEBUG*/ /* -1 means not set yet ... default vislevel set by row_new_heap() * when the class members become available. */ rhs->vislevel = -1; rhs->graphic = NULL; rhs->scol = NULL; rhs->itext = NULL; } GType rhs_get_type( void ) { static GType type = 0; if( !type ) { static const GTypeInfo info = { sizeof( RhsClass ), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) rhs_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof( Rhs ), 32, /* n_preallocs */ (GInstanceInitFunc) rhs_init, }; type = g_type_register_static( TYPE_HEAPMODEL, "Rhs", &info, 0 ); } return( type ); } Rhs * rhs_new( Row *row ) { Rhs *rhs = RHS( g_object_new( TYPE_RHS, NULL ) ); icontainer_child_add( ICONTAINER( row ), ICONTAINER( rhs ), -1 ); #ifdef DEBUG printf( "rhs_new: " ); row_name_print( HEAPMODEL( rhs )->row ); printf( " (%p)\n", rhs ); #endif /*DEBUG*/ return( rhs ); } static void * rhs_child_edited_sub( Model *model ) { Row *row = ROW( model ); if( row->child_rhs && rhs_child_edited( row->child_rhs ) ) return( row ); return( NULL ); } /* Does this RHS have any edited children? text, graphic, or recursive. */ gboolean rhs_child_edited( Rhs *rhs ) { if( rhs->itext && ITEXT( rhs->itext )->edited ) return( TRUE ); else if( rhs->graphic && CLASSMODEL( rhs->graphic )->edited ) return( TRUE ); else if( rhs->scol ) return( icontainer_map( ICONTAINER( rhs->scol ), (icontainer_map_fn) rhs_child_edited_sub, NULL, NULL ) != NULL ); else return( FALSE ); } nip2-8.7.0/src/iobject.c0000644000175000017500000001516013224651032011672 00000000000000/* abstract base class for all nip objects */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #include "ip.h" /* Our signals. */ enum { SIG_DESTROY, /* End lifetime */ SIG_CHANGED, /* iObject has changed somehow */ SIG_LAST }; static GObjectClass *parent_class = NULL; static guint iobject_signals[SIG_LAST] = { 0 }; /* Don't emit "destroy" immediately, do it from the _dispose handler. */ void * iobject_destroy( iObject *iobject ) { #ifdef DEBUG printf( "iobject_destroy: " ); iobject_print( iobject ); #endif /*DEBUG*/ if( !iobject->in_destruction ) g_object_run_dispose( G_OBJECT( iobject ) ); return( NULL ); } void * iobject_changed( iObject *iobject ) { g_return_val_if_fail( iobject != NULL, NULL ); g_return_val_if_fail( IS_IOBJECT( iobject ), NULL ); #ifdef DEBUG printf( "iobject_changed: " ); iobject_print( iobject ); #endif /*DEBUG*/ g_signal_emit( G_OBJECT( iobject ), iobject_signals[SIG_CHANGED], 0 ); return( NULL ); } void * iobject_info( iObject *iobject, VipsBuf *buf ) { iObjectClass *iobject_class = IOBJECT_GET_CLASS( iobject ); g_return_val_if_fail( iobject != NULL, NULL ); g_return_val_if_fail( IS_IOBJECT( iobject ), NULL ); if( iobject_class->info ) iobject_class->info( iobject, buf ); return( NULL ); } static void iobject_dispose( GObject *gobject ) { iObject *iobject = IOBJECT( gobject ); #ifdef DEBUG printf( "iobject_dispose: " ); iobject_print( iobject ); #endif /*DEBUG*/ if( !iobject->in_destruction ) { iobject->in_destruction = TRUE; g_signal_emit( G_OBJECT( iobject ), iobject_signals[SIG_DESTROY], 0 ); iobject->in_destruction = FALSE; } G_OBJECT_CLASS( parent_class )->dispose( gobject ); } static void iobject_finalize( GObject *gobject ) { iObject *iobject = IOBJECT( gobject ); #ifdef DEBUG printf( "iobject_finalize: " ); iobject_print( iobject ); #endif /*DEBUG*/ /* Unlike GTK, we allow floating objects to be finalized. Handy if a * _new() fails. So don't assert( !iobject->floating ); */ IM_FREE( iobject->name ); IM_FREE( iobject->caption ); G_OBJECT_CLASS( parent_class )->finalize( gobject ); } static void iobject_real_destroy( iObject *iobject ) { } static void iobject_real_changed( iObject *iobject ) { iObjectClass *iobject_class = IOBJECT_GET_CLASS( iobject ); if( iobject_class->generate_caption ) IM_SETSTR( iobject->caption, iobject_class->generate_caption( iobject ) ); } static void iobject_real_info( iObject *iobject, VipsBuf *buf ) { if( iobject->name ) vips_buf_appendf( buf, "name = \"%s\"\n", iobject->name ); if( iobject->caption ) vips_buf_appendf( buf, "caption = \"%s\"\n", iobject->caption ); vips_buf_appendf( buf, "iObject :: \"%s\"\n", G_OBJECT_TYPE_NAME( iobject ) ); } static void iobject_class_init( iObjectClass *class ) { GObjectClass *gobject_class = G_OBJECT_CLASS( class ); parent_class = g_type_class_peek_parent( class ); gobject_class->dispose = iobject_dispose; gobject_class->finalize = iobject_finalize; class->destroy = iobject_real_destroy; class->changed = iobject_real_changed; class->info = iobject_real_info; class->generate_caption = NULL; class->user_name = _( "Object" ); /* Create signals. */ iobject_signals[SIG_DESTROY] = g_signal_new( "destroy", G_TYPE_FROM_CLASS( gobject_class ), G_SIGNAL_RUN_CLEANUP | G_SIGNAL_NO_RECURSE | G_SIGNAL_NO_HOOKS, G_STRUCT_OFFSET( iObjectClass, destroy ), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0 ); iobject_signals[SIG_CHANGED] = g_signal_new( "changed", G_OBJECT_CLASS_TYPE( gobject_class ), G_SIGNAL_RUN_FIRST, G_STRUCT_OFFSET( iObjectClass, changed ), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0 ); } static void iobject_init( iObject *iobject ) { #ifdef DEBUG printf( "iobject_init: " ); iobject_print( iobject ); #endif /*DEBUG*/ /* Init our instance fields. */ iobject->name = NULL; iobject->caption = NULL; iobject->floating = TRUE; iobject->in_destruction = FALSE; } GType iobject_get_type( void ) { static GType iobject_type = 0; if( !iobject_type ) { static const GTypeInfo info = { sizeof( iObjectClass ), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) iobject_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof( iObject ), 32, /* n_preallocs */ (GInstanceInitFunc) iobject_init, }; iobject_type = g_type_register_static( G_TYPE_OBJECT, "iObject", &info, 0 ); } return( iobject_type ); } /* Test the name field ... handy with map. */ void * iobject_test_name( iObject *iobject, const char *name ) { g_return_val_if_fail( iobject != NULL, NULL ); g_return_val_if_fail( IS_IOBJECT( iobject ), NULL ); if( iobject->name && strcmp( iobject->name, name ) == 0 ) return( iobject ); return( NULL ); } void * iobject_print( iObject *iobject ) { g_print( "%s \"%s\" (%p)\n", G_OBJECT_TYPE_NAME( iobject ), NN( iobject->name ), iobject ); return( NULL ); } void iobject_set( iObject *iobject, const char *name, const char *caption ) { gboolean changed = FALSE; g_return_if_fail( iobject != NULL ); g_return_if_fail( IS_IOBJECT( iobject ) ); if( name && name != iobject->name ) { IM_SETSTR( iobject->name, name ); changed = TRUE; } if( caption && caption != iobject->caption ) { IM_SETSTR( iobject->caption, caption ); changed = TRUE; } if( changed ) iobject_changed( iobject ); #ifdef DEBUG printf( "iobject_set: " ); iobject_print( iobject ); #endif /*DEBUG*/ } void iobject_sink( iObject *iobject ) { g_assert( IS_IOBJECT( iobject ) ); if( iobject->floating ) { iobject->floating = FALSE; g_object_unref( G_OBJECT( iobject ) ); } } void iobject_dump( iObject *iobject ) { char txt[1000]; VipsBuf buf = VIPS_BUF_STATIC( txt ); iobject_info( iobject, &buf ); printf( "%s", vips_buf_all( &buf ) ); } nip2-8.7.0/src/icontainer.c0000644000175000017500000005220713224651032012411 00000000000000/* abstract base class for containers */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG_SANITY #define DEBUG_VERBOSE #define DEBUG */ #include "ip.h" /* Our signals. */ enum { SIG_POS_CHANGED, /* Member has moved */ SIG_CHILD_ADD, /* iContainer is about to gain a child */ SIG_CHILD_REMOVE, /* iContainer is about to loose a child */ SIG_CURRENT, /* Make child current of parent */ SIG_CHILD_DETACH, /* Used as a pair to do reparent */ SIG_CHILD_ATTACH, SIG_LAST }; static iObjectClass *parent_class = NULL; static guint icontainer_signals[SIG_LAST] = { 0 }; int icontainer_get_n_children( iContainer *icontainer ) { return( g_slist_length( icontainer->children ) ); } iContainer * icontainer_get_nth_child( iContainer *icontainer, int n ) { return( ICONTAINER( g_slist_nth_data( icontainer->children, n ) ) ); } GSList * icontainer_get_children( iContainer *icontainer ) { return( g_slist_copy( icontainer->children ) ); } void * icontainer_map( iContainer *icontainer, icontainer_map_fn fn, void *a, void *b ) { return( slist_map2( icontainer->children, (SListMap2Fn) fn, a, b ) ); } void * icontainer_map3( iContainer *icontainer, icontainer_map3_fn fn, void *a, void *b, void *c ) { return( slist_map3( icontainer->children, (SListMap3Fn) fn, a, b, c ) ); } void * icontainer_map4( iContainer *icontainer, icontainer_map4_fn fn, void *a, void *b, void *c, void *d ) { return( slist_map4( icontainer->children, (SListMap4Fn) fn, a, b, c, d ) ); } void * icontainer_map5( iContainer *icontainer, icontainer_map5_fn fn, void *a, void *b, void *c, void *d, void *e ) { return( slist_map5( icontainer->children, (SListMap5Fn) fn, a, b, c, d, e ) ); } /* Map in reverse order. */ void * icontainer_map_rev( iContainer *icontainer, icontainer_map_fn fn, void *a, void *b ) { return( slist_map2_rev( icontainer->children, (SListMap2Fn) fn, a, b ) ); } /* Apply a function to a tree of icontainers, bottom up. */ void * icontainer_map_all( iContainer *icontainer, icontainer_map_fn fn, void *a ) { iContainer *result; if( (result = icontainer_map( icontainer, (icontainer_map_fn) icontainer_map_all, (void *) fn, a )) ) return( result ); return( fn( icontainer, a, NULL ) ); } void * icontainer_map2_all( iContainer *icontainer, icontainer_map_fn fn, void *a, void *b ) { iContainer *result; if( (result = icontainer_map3( icontainer, (icontainer_map3_fn) icontainer_map2_all, (void *) fn, a, b )) ) return( result ); return( fn( icontainer, a, b ) ); } void * icontainer_map3_all( iContainer *icontainer, icontainer_map3_fn fn, void *a, void *b, void *c ) { iContainer *result; if( (result = icontainer_map4( icontainer, (icontainer_map4_fn) icontainer_map3_all, (void *) fn, a, b, c )) ) return( result ); return( fn( icontainer, a, b, c ) ); } void * icontainer_map4_all( iContainer *icontainer, icontainer_map4_fn fn, void *a, void *b, void *c, void *d ) { iContainer *result; if( (result = icontainer_map5( icontainer, (icontainer_map5_fn) icontainer_map4_all, (void *) fn, a, b, c, d )) ) return( result ); return( fn( icontainer, a, b, c, d ) ); } /* Apply a function to the children of a icontainer. */ void * icontainer_map_all_intrans( iContainer *icontainer, icontainer_map_fn fn, void *a ) { return( icontainer_map( icontainer, (icontainer_map_fn) icontainer_map_all, (void *) fn, a ) ); } static void * icontainer_sanity_child( iContainer *child, iContainer *parent ) { g_assert( IS_ICONTAINER( child ) ); g_assert( IS_ICONTAINER( parent ) ); g_assert( child->parent == parent ); g_assert( child->pos >= 0 ); g_assert( g_slist_find( parent->children, child ) ); if( parent->child_hash ) g_assert( g_hash_table_lookup( parent->child_hash, IOBJECT( child )->name ) ); return( NULL ); } void icontainer_sanity( iContainer *icontainer ) { g_assert( IS_ICONTAINER( icontainer ) ); if( icontainer->parent ) icontainer_sanity_child( icontainer, icontainer->parent ); icontainer_map( icontainer, (icontainer_map_fn) icontainer_sanity_child, icontainer, NULL ); } static gint icontainer_pos_compare( iContainer *a, iContainer *b ) { return( a->pos - b->pos ); } void icontainer_pos_sort( iContainer *icontainer ) { icontainer->children = g_slist_sort( icontainer->children, (GCompareFunc) icontainer_pos_compare ); iobject_changed( IOBJECT( icontainer ) ); } static void * icontainer_pos_last_sub( iContainer *icontainer, int *max ) { if( icontainer->pos > *max ) *max = icontainer->pos; return( NULL ); } int icontainer_pos_last( iContainer *icontainer ) { int max = -1; icontainer_map( icontainer, (icontainer_map_fn) icontainer_pos_last_sub, &max, NULL ); return( max ); } static void * icontainer_pos_changed( iContainer *icontainer ) { #ifdef DEBUG printf( "icontainer_pos_changed: " ); iobject_print( IOBJECT( icontainer ) ); #endif /*DEBUG*/ g_signal_emit( G_OBJECT( icontainer ), icontainer_signals[SIG_POS_CHANGED], 0 ); return( NULL ); } static void * icontainer_pos_renumber_sub( iContainer *icontainer, int *n, GSList **changed ) { if( icontainer->pos != *n ) { icontainer->pos = *n; *changed = g_slist_prepend( *changed, icontainer ); } *n += 1; return( NULL ); } #ifdef DEBUG_VERBOSE static void * icontainer_print_element( iContainer *element, int *n ) { printf( "\t%3d) pos = %d ", *n, element->pos ); iobject_print( IOBJECT( element ) ); *n += 1; return( NULL ); } #endif /*DEBUG_VERBOSE*/ void icontainer_pos_renumber( iContainer *icontainer ) { int n = 0; GSList *changed; #ifdef DEBUG_VERBOSE { int i; printf( "icontainer_pos_renumber: " ); iobject_print( IOBJECT( icontainer ) ); printf( "\tbefore:\n" ); i = 0; icontainer_map( icontainer, (icontainer_map_fn) icontainer_print_element, &i, NULL ); } #endif /*DEBUG_VERBOSE*/ changed = NULL; icontainer_map( icontainer, (icontainer_map_fn) icontainer_pos_renumber_sub, &n, &changed ); /* Tell all the children that have been renumbered. */ #ifdef DEBUG_VERBOSE if( g_slist_length( changed ) > 1 ) { printf( "icontainer_pos_renumber: renumbering %d children! ", g_slist_length( changed ) ); iobject_print( IOBJECT( icontainer ) ); } #endif /*DEBUG_VERBOSE*/ slist_map( changed, (SListMapFn) icontainer_pos_changed, NULL ); g_slist_free( changed ); iobject_changed( IOBJECT( icontainer ) ); #ifdef DEBUG_VERBOSE { int i; printf( "icontainer_pos_renumber: " ); iobject_print( IOBJECT( icontainer ) ); printf( "\tafter:\n" ); i = 0; icontainer_map( icontainer, (icontainer_map_fn) icontainer_print_element, &i, NULL ); } #endif /*DEBUG_VERBOSE*/ } gint icontainer_name_compare( iContainer *a, iContainer *b ) { return( strcasecmp( IOBJECT( a )->name, IOBJECT( b )->name ) ); } void icontainer_custom_sort( iContainer *icontainer, GCompareFunc fn ) { icontainer->children = g_slist_sort( icontainer->children, fn ); icontainer_pos_renumber( icontainer ); iobject_changed( IOBJECT( icontainer ) ); } /* Add a child. */ void icontainer_child_add( iContainer *parent, iContainer *child, int pos ) { g_assert( IS_ICONTAINER( parent ) ); g_assert( IS_ICONTAINER( child ) ); #ifdef DEBUG_SANITY icontainer_sanity( parent ); icontainer_sanity( child ); #endif /*DEBUG_SANITY*/ g_signal_emit( G_OBJECT( parent ), icontainer_signals[SIG_CHILD_ADD], 0, child, pos ); #ifdef DEBUG_SANITY icontainer_sanity( parent ); icontainer_sanity( child ); #endif /*DEBUG_SANITY*/ } /* Add a child before another child. after == NULL means append. */ void icontainer_child_add_before( iContainer *parent, iContainer *child, iContainer *before ) { int pos; g_assert( !before || IS_ICONTAINER( before ) ); g_assert( !before || before->parent == parent ); pos = g_slist_index( parent->children, before ); icontainer_child_add( parent, child, pos ); } /* pos == 0 ... move to start * pos == -1 ... move to end * pos == n ... move before sibling at position n */ void icontainer_child_move( iContainer *child, int pos ) { iContainer *parent = child->parent; parent->children = g_slist_remove( parent->children, child ); if( pos >= 0 ) parent->children = g_slist_insert( parent->children, child, pos ); else parent->children = g_slist_append( parent->children, child ); icontainer_pos_renumber( parent ); iobject_changed( IOBJECT( child ) ); } void * icontainer_child_remove( iContainer *child ) { iContainer *parent; if( (parent = child->parent) ) { g_assert( ICONTAINER_IS_CHILD( parent, child ) ); #ifdef DEBUG printf( "icontainer_child_remove: (child %p)\n", child ); printf( "\tchild: %s \"%s\"\n", G_OBJECT_TYPE_NAME( child ), NN( IOBJECT( child )->name ) ); #endif /*DEBUG*/ #ifdef DEBUG_SANITY icontainer_sanity( parent ); icontainer_sanity( child ); #endif /*DEBUG_SANITY*/ g_signal_emit( G_OBJECT( parent ), icontainer_signals[SIG_CHILD_REMOVE], 0, child ); #ifdef DEBUG_SANITY icontainer_sanity( parent ); #endif /*DEBUG_SANITY*/ } return( NULL ); } void icontainer_current( iContainer *parent, iContainer *child ) { g_assert( parent ); g_assert( !child || ICONTAINER_IS_CHILD( parent, child ) ); if( parent->current == child ) return; #ifdef DEBUG printf( "icontainer_current: (child %p)\n", child ); printf( "\tchild: %s \"%s\"\n", G_OBJECT_TYPE_NAME( child ), NN( IOBJECT( child )->name ) ); #endif /*DEBUG*/ #ifdef DEBUG_SANITY icontainer_sanity( parent ); if( child ) icontainer_sanity( child ); #endif /*DEBUG_SANITY*/ g_signal_emit( G_OBJECT( parent ), icontainer_signals[SIG_CURRENT], 0, child ); #ifdef DEBUG_SANITY icontainer_sanity( parent ); if( child ) icontainer_sanity( child ); #endif /*DEBUG_SANITY*/ } iContainer * icontainer_next( iContainer *parent ) { iContainer *child; int i; if( !parent->children ) return( NULL ); if( !parent->current ) i = 0; else i = g_slist_index( parent->children, parent->current ) + 1; if( !(child = g_slist_nth_data( parent->children, i )) ) child = ICONTAINER( parent->children->data ); icontainer_current( parent, child ); return( child ); } void icontainer_reparent( iContainer *parent, iContainer *child, int pos ) { iContainer *old_parent = child->parent; g_assert( parent ); g_assert( child ); #ifdef DEBUG_SANITY icontainer_sanity( old_parent ); icontainer_sanity( parent ); icontainer_sanity( child ); #endif /*DEBUG_SANITY*/ /* These must always happen as a pair. */ g_signal_emit( G_OBJECT( old_parent ), icontainer_signals[SIG_CHILD_DETACH], 0, child ); g_signal_emit( G_OBJECT( parent ), icontainer_signals[SIG_CHILD_ATTACH], 0, child, pos ); icontainer_pos_renumber( parent ); iobject_changed( IOBJECT( parent ) ); iobject_changed( IOBJECT( old_parent ) ); iobject_changed( IOBJECT( child ) ); #ifdef DEBUG_SANITY icontainer_sanity( old_parent ); icontainer_sanity( parent ); icontainer_sanity( child ); #endif /*DEBUG_SANITY*/ } static void icontainer_dispose( GObject *gobject ) { iContainer *icontainer; g_return_if_fail( gobject != NULL ); g_return_if_fail( IS_ICONTAINER( gobject ) ); icontainer = ICONTAINER( gobject ); #ifdef DEBUG printf( "icontainer_dispose: (%p) %s \"%s\"\n", icontainer, G_OBJECT_TYPE_NAME( icontainer ), NN( IOBJECT( icontainer )->name ) ); #endif /*DEBUG*/ icontainer_map( icontainer, (icontainer_map_fn) icontainer_child_remove, NULL, NULL ); icontainer_child_remove( icontainer ); G_OBJECT_CLASS( parent_class )->dispose( gobject ); } static void icontainer_finalize( GObject *gobject ) { iContainer *icontainer; g_return_if_fail( gobject != NULL ); g_return_if_fail( IS_ICONTAINER( gobject ) ); icontainer = ICONTAINER( gobject ); IM_FREEF( g_hash_table_destroy, icontainer->child_hash ); G_OBJECT_CLASS( parent_class )->finalize( gobject ); } static void icontainer_info( iObject *iobject, VipsBuf *buf ) { iContainer *icontainer = ICONTAINER( iobject ); vips_buf_appendf( buf, "pos = \"%d\"\n", icontainer->pos ); IOBJECT_CLASS( parent_class )->info( iobject, buf ); } static void icontainer_real_pos_changed( iContainer *icontainer ) { } static void icontainer_link( iContainer *parent, iContainer *child, int pos ) { if( pos >= 0 ) parent->children = g_slist_insert( parent->children, child, pos ); else parent->children = g_slist_append( parent->children, child ); child->parent = parent; child->pos = pos; if( parent->child_hash ) { g_assert( !g_hash_table_lookup( parent->child_hash, IOBJECT( child )->name ) ); g_hash_table_insert( parent->child_hash, IOBJECT( child )->name, child ); } } static void icontainer_real_child_add( iContainer *parent, iContainer *child, int pos ) { iContainerClass *icontainer_class = ICONTAINER_GET_CLASS( child ); g_assert( IS_ICONTAINER( parent ) && IS_ICONTAINER( child ) ); g_assert( child->parent == NULL ); #ifdef DEBUG printf( "icontainer_real_child_add:\n\tparent " ); iobject_print( IOBJECT( parent ) ); printf( "\tchild " ); iobject_print( IOBJECT( child ) ); printf( "\tpos = %d\n", pos ); #endif /*DEBUG*/ icontainer_link( parent, child, pos ); g_object_ref( G_OBJECT( child ) ); iobject_sink( IOBJECT( child ) ); /* Renumber to get all the pos set. */ icontainer_pos_renumber( parent ); iobject_changed( IOBJECT( child ) ); /* We've made the link ... trigger the parent_add() on the child. */ icontainer_class->parent_add( child ); #ifdef DEBUG_VERBOSE printf( "icontainer_real_child_add: " ); iobject_print( IOBJECT( parent ) ); #endif /*DEBUG_VERBOSE*/ } static void icontainer_unlink( iContainer *child ) { iContainer *parent = child->parent; parent->children = g_slist_remove( parent->children, child ); child->parent = NULL; if( parent->child_hash ) { g_assert( g_hash_table_lookup( parent->child_hash, IOBJECT( child )->name ) ); g_hash_table_remove( parent->child_hash, IOBJECT( child )->name ); } } static void icontainer_real_child_remove( iContainer *parent, iContainer *child ) { iContainerClass *icontainer_child_class = ICONTAINER_GET_CLASS( child ); g_assert( IS_ICONTAINER( parent ) && IS_ICONTAINER( child ) ); #ifdef DEBUG printf( "icontainer_real_child_remove: parent %s \"%s\"; " "child %s \"%s\"\n", G_OBJECT_TYPE_NAME( parent ), NN( IOBJECT( parent )->name ), G_OBJECT_TYPE_NAME( child ), NN( IOBJECT( child )->name ) ); #endif /*DEBUG*/ if( parent->current == child ) icontainer_current( parent, NULL ); /* We're about to break the link ... trigger the parent_remove() on * the child. */ icontainer_child_class->parent_remove( child ); icontainer_unlink( child ); UNREF( child ); iobject_changed( IOBJECT( parent ) ); } static void icontainer_real_parent_add( iContainer *child ) { #ifdef DEBUG printf( "icontainer_real_parent_add: child %s \"%s\"; " "parent %s \"%s\"\n", G_OBJECT_TYPE_NAME( child ), NN( IOBJECT( child )->name ), G_OBJECT_TYPE_NAME( child->parent ), NN( IOBJECT( child->parent )->name ) ); #endif /*DEBUG*/ } static void icontainer_real_parent_remove( iContainer *child ) { #ifdef DEBUG { iContainer *parent = child->parent; printf( "icontainer_real_parent_remove: child %s \"%s\"; " "parent %s \"%s\"\n", G_OBJECT_TYPE_NAME( child ), NN( IOBJECT( child )->name ), G_OBJECT_TYPE_NAME( parent ), NN( IOBJECT( parent )->name ) ); } #endif /*DEBUG*/ } static void icontainer_real_current( iContainer *parent, iContainer *child ) { iContainer *old_current; g_assert( IS_ICONTAINER( parent ) ); g_assert( !child || IS_ICONTAINER( child ) ); g_assert( !child || ICONTAINER_IS_CHILD( parent, child ) ); #ifdef DEBUG printf( "icontainer_real_current: parent %s \"%s\"; " "child %s \"%s\"\n", G_OBJECT_TYPE_NAME( parent ), NN( IOBJECT( parent )->name ), child ? G_OBJECT_TYPE_NAME( child ) : "NULL", child ? NN( IOBJECT( child )->name ) : "NULL" ); #endif /*DEBUG*/ old_current = parent->current; parent->current = child; if( old_current != child ) { if( old_current ) iobject_changed( IOBJECT( old_current ) ); if( child ) iobject_changed( IOBJECT( child ) ); iobject_changed( IOBJECT( parent ) ); } if( child ) model_front( MODEL( child ) ); } static void icontainer_real_child_detach( iContainer *parent, iContainer *child ) { g_assert( IS_ICONTAINER( parent ) ); g_assert( IS_ICONTAINER( child ) ); g_assert( child->parent != NULL ); g_assert( ICONTAINER_IS_CHILD( parent, child ) ); icontainer_unlink( child ); } static void icontainer_real_child_attach( iContainer *parent, iContainer *child, int pos ) { g_assert( IS_ICONTAINER( parent ) ); g_assert( IS_ICONTAINER( child ) ); g_assert( child->parent == NULL ); icontainer_link( parent, child, pos ); } static void icontainer_class_init( iContainerClass *class ) { GObjectClass *gobject_class = G_OBJECT_CLASS( class ); iObjectClass *iobject_class = IOBJECT_CLASS( class ); parent_class = g_type_class_peek_parent( class ); gobject_class->dispose = icontainer_dispose; gobject_class->finalize = icontainer_finalize; iobject_class->info = icontainer_info; class->pos_changed = icontainer_real_pos_changed; class->child_add = icontainer_real_child_add; class->child_remove = icontainer_real_child_remove; class->parent_add = icontainer_real_parent_add; class->parent_remove = icontainer_real_parent_remove; class->current = icontainer_real_current; class->child_detach = icontainer_real_child_detach; class->child_attach = icontainer_real_child_attach; /* Create signals. */ icontainer_signals[SIG_POS_CHANGED] = g_signal_new( "pos_changed", G_OBJECT_CLASS_TYPE( gobject_class ), G_SIGNAL_RUN_FIRST, G_STRUCT_OFFSET( iContainerClass, pos_changed ), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0 ); icontainer_signals[SIG_CHILD_ADD] = g_signal_new( "child_add", G_OBJECT_CLASS_TYPE( gobject_class ), G_SIGNAL_RUN_FIRST, G_STRUCT_OFFSET( iContainerClass, child_add ), NULL, NULL, nip_VOID__OBJECT_INT, G_TYPE_NONE, 2, TYPE_ICONTAINER, GTK_TYPE_INT ); icontainer_signals[SIG_CHILD_REMOVE] = g_signal_new( "child_remove", G_OBJECT_CLASS_TYPE( gobject_class ), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET( iContainerClass, child_remove ), NULL, NULL, g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1, TYPE_ICONTAINER ); icontainer_signals[SIG_CURRENT] = g_signal_new( "current", G_OBJECT_CLASS_TYPE( gobject_class ), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET( iContainerClass, current ), NULL, NULL, g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1, TYPE_ICONTAINER ); icontainer_signals[SIG_CHILD_DETACH] = g_signal_new( "child_detach", G_OBJECT_CLASS_TYPE( gobject_class ), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET( iContainerClass, child_detach ), NULL, NULL, g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1, TYPE_ICONTAINER ); icontainer_signals[SIG_CHILD_ATTACH] = g_signal_new( "child_attach", G_OBJECT_CLASS_TYPE( gobject_class ), G_SIGNAL_RUN_FIRST, G_STRUCT_OFFSET( iContainerClass, child_attach ), NULL, NULL, nip_VOID__OBJECT_INT, G_TYPE_NONE, 2, TYPE_ICONTAINER, GTK_TYPE_INT ); #ifdef DEBUG_SANITY printf( "*** DEBUG_SANITY is on ... expect slowness\n" ); #endif /*DEBUG_SANITY*/ } static void icontainer_init( iContainer *icontainer ) { /* Init our instance fields. */ icontainer->children = NULL; icontainer->pos = -1; icontainer->parent = NULL; icontainer->child_hash = NULL; } GType icontainer_get_type( void ) { static GType type = 0; if( !type ) { static const GTypeInfo info = { sizeof( iContainerClass ), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) icontainer_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof( iContainer ), 32, /* n_preallocs */ (GInstanceInitFunc) icontainer_init, }; type = g_type_register_static( TYPE_IOBJECT, "iContainer", &info, 0 ); } return( type ); } /* Put the container into lookup-by-child-name mode. */ void icontainer_set_hash( iContainer *icontainer ) { /* Can only do this once just after startup, and before there are any * children. */ g_assert( !icontainer->children ); g_assert( !icontainer->child_hash ); icontainer->child_hash = g_hash_table_new( g_str_hash, g_str_equal ); } iContainer * icontainer_child_lookup( iContainer *parent, const char *name ) { g_assert( parent->child_hash ); return( ICONTAINER( g_hash_table_lookup( parent->child_hash, name ) ) ); } nip2-8.7.0/src/iregiongroupview.h0000644000175000017500000000335013224651032013662 00000000000000/* coordinate the display of regionviews on imageviews */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_IREGIONGROUPVIEW (iregiongroupview_get_type()) #define IREGIONGROUPVIEW( obj ) \ (GTK_CHECK_CAST( (obj), TYPE_IREGIONGROUPVIEW, iRegiongroupview )) #define IREGIONGROUPVIEW_CLASS( klass ) \ (GTK_CHECK_CLASS_CAST( (klass), TYPE_IREGIONGROUPVIEW, \ iRegiongroupviewClass )) #define IS_IREGIONGROUPVIEW( obj ) \ (GTK_CHECK_TYPE( (obj), TYPE_IREGIONGROUPVIEW )) #define IS_IREGIONGROUPVIEW_CLASS( klass ) \ (GTK_CHECK_CLASS_TYPE( (klass), TYPE_IREGIONGROUPVIEW )) typedef struct _iRegiongroupview { View parent_class; /* Keep our classmodel here, we need it during destroy. */ Classmodel *classmodel; } iRegiongroupview; typedef struct _iRegiongroupviewClass { ViewClass parent_class; /* My methods. */ } iRegiongroupviewClass; GtkType iregiongroupview_get_type( void ); View *iregiongroupview_new( void ); nip2-8.7.0/src/paintboxview.c0000644000175000017500000003360113224651032012772 00000000000000/* widgets for the paintbox bar */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #include "ip.h" static GtkFrameClass *parent_class = NULL; /* The popup menu. */ static GtkWidget *paintboxview_menu = NULL; static void paintboxview_destroy( GtkObject *object ) { Paintboxview *pbv; g_return_if_fail( object != NULL ); g_return_if_fail( IS_PAINTBOXVIEW( object ) ); pbv = PAINTBOXVIEW( object ); #ifdef DEBUG printf( "paintboxview_destroy: %p\n", pbv ); #endif /*DEBUG*/ /* My instance destroy stuff. */ FREESID( pbv->ii_undo_changed_sid, pbv->ii ); FREESID( pbv->ii_destroy_sid, pbv->ii ); GTK_OBJECT_CLASS( parent_class )->destroy( object ); } static void paintboxview_realize( GtkWidget *widget ) { Paintboxview *pbv = PAINTBOXVIEW( widget ); iWindow *iwnd = IWINDOW( iwindow_get_root( widget ) ); guint key; GdkModifierType mods; gtk_accelerator_parse( "z", &key, &mods ); gtk_widget_add_accelerator( GTK_WIDGET( pbv->undo ), "clicked", iwnd->accel_group, key, mods, 0 ); gtk_accelerator_parse( "z", &key, &mods ); gtk_widget_add_accelerator( GTK_WIDGET( pbv->redo ), "clicked", iwnd->accel_group, key, mods, 0 ); GTK_WIDGET_CLASS( parent_class )->realize( widget ); } /* Hide this paintboxview. */ static void paintboxview_hide_cb( GtkWidget *menu, GtkWidget *host, Paintboxview *pbv ) { imagemodel_set_paintbox( pbv->imagemodel, FALSE ); } static void paintboxview_class_init( PaintboxviewClass *class ) { GtkObjectClass *object_class = (GtkObjectClass *) class; GtkWidgetClass *widget_class = (GtkWidgetClass *) class; GtkWidget *pane; parent_class = g_type_class_peek_parent( class ); object_class->destroy = paintboxview_destroy; widget_class->realize = paintboxview_realize; /* Create signals. */ /* Init methods. */ pane = paintboxview_menu = popup_build( _( "Paintbox bar menu" ) ); popup_add_but( pane, GTK_STOCK_CLOSE, POPUP_FUNC( paintboxview_hide_cb ) ); } /* "toggled" on a tool select button */ static void paintboxview_tool_toggled_cb( GtkWidget *wid, Paintboxview *pbv ) { if( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( wid ) ) ) { Imagemodel *imagemodel = pbv->imagemodel; int i; for( i = 0; i < IMAGEMODEL_LAST; i++ ) if( wid == pbv->tool[i] ) break; if( i != (int) IMAGEMODEL_LAST ) imagemodel_set_state( imagemodel, i, wid ); } } /* New nib selected. */ static void paintboxview_scale_change_cb( Tslider *tslider, Paintboxview *pbv ) { Imagemodel *imagemodel = pbv->imagemodel; if( imagemodel->nib_radius != tslider->value ) { imagemodel->nib_radius = tslider->value; iobject_changed( IOBJECT( imagemodel ) ); } } static void paintboxview_double_cb( GtkWidget *wid, GdkEvent *event, Paintboxview *pbv ) { imageinfo_colour_edit( wid, IMAGEDISPLAY( pbv->ink )->conv->ii ); } static void paintboxview_font_changed_cb( GtkWidget *widget, Paintboxview *pbv ) { Fontbutton *fontbutton = FONTBUTTON( widget ); Imagemodel *imagemodel = pbv->imagemodel; const char *font_name; font_name = fontbutton_get_font_name( fontbutton ); if( strcmp( font_name, imagemodel->font_name ) != 0 ) { IM_SETSTR( imagemodel->font_name, font_name ); iobject_changed( IOBJECT( imagemodel ) ); } } static void paintboxview_undo_cb( GtkWidget *widget, Paintboxview *pbv ) { if( !imageinfo_undo( pbv->ii ) ) iwindow_alert( widget, GTK_MESSAGE_ERROR ); /* Ask everyone to drop cache, the image has changed. */ im_invalidate( imageinfo_get( FALSE, pbv->ii ) ); imagemodel_paint_recalc( pbv->imagemodel ); } static void paintboxview_redo_cb( GtkWidget *widget, Paintboxview *pbv ) { if( !imageinfo_redo( pbv->ii ) ) iwindow_alert( widget, GTK_MESSAGE_ERROR ); /* Ask everyone to drop cache, the image has changed. */ im_invalidate( imageinfo_get( FALSE, pbv->ii ) ); imagemodel_paint_recalc( pbv->imagemodel ); } static void paintboxview_clear_cb2( iWindow *iwnd, void *client, iWindowNotifyFn nfn, void *sys ) { Paintboxview *pbv = PAINTBOXVIEW( client ); imageinfo_undo_clear( pbv->ii ); nfn( sys, IWINDOW_YES ); } static void paintboxview_clear_cb( GtkWidget *widget, Paintboxview *pbv ) { box_yesno( GTK_WIDGET( widget ), paintboxview_clear_cb2, iwindow_true_cb, pbv, iwindow_notify_null, NULL, GTK_STOCK_CLEAR, _( "Clear undo history?" ), _( "Are you sure you want to clear all undo and redo? " "This will free up memory, but you will no longer be " "able to undo or redo any of the painting you have " "done so far." ) ); } static void paintboxview_text_changed_cb( GtkWidget *widget, Paintboxview *pbv ) { const char *text = gtk_entry_get_text( GTK_ENTRY( pbv->text ) ); IM_SETSTR( pbv->imagemodel->text, text ); } static void paintboxview_init( Paintboxview *pbv ) { /* Order important! Keep in sync with ImagemodelState. */ static const char *tool_names[IMAGEMODEL_LAST] = { STOCK_SELECT, /* IMAGEMODEL_SELECT */ STOCK_MOVE, /* IMAGEMODEL_PAN */ GTK_STOCK_ZOOM_IN, /* IMAGEMODEL_MAGIN */ GTK_STOCK_ZOOM_OUT, /* IMAGEMODEL_MAGOUT*/ STOCK_DROPPER, /* IMAGEMODEL_DROPPER */ STOCK_PAINTBRUSH, /* IMAGEMODEL_PEN */ STOCK_LINE, /* IMAGEMODEL_LINE */ STOCK_RECT, /* IMAGEMODEL_RECT */ STOCK_FLOOD, /* IMAGEMODEL_FLOOD */ STOCK_FLOOD_BLOB, /* IMAGEMODEL_BLOB */ STOCK_TEXT, /* IMAGEMODEL_TEXT */ STOCK_SMUDGE /* IMAGEMODEL_SMUDGE */ }; static const char *tool_tooltips[] = { N_( "Manipulate regions" ), /* IMAGEMODEL_SELECT */ N_( "Pan window" ), /* IMAGEMODEL_PAN */ N_( "Zoom in on mouse" ), /* IMAGEMODEL_MAGIN */ N_( "Zoom out" ), /* IMAGEMODEL_MAGOUT*/ N_( "Read pixel into inkwell" ), /* IMAGEMODEL_DROPPER */ N_( "Freehand draw " ), /* IMAGEMODEL_PEN */ N_( "Draw straight lines" ), /* IMAGEMODEL_LINE */ N_( "Fill rectangles" ), /* IMAGEMODEL_RECT */ N_( "Flood while pixel not equal to ink" ), /* IMAGEMODEL_FLOOD */ N_( "Flood while pixel equal to click" ), /* IMAGEMODEL_BLOB */ N_( "Draw text" ), /* IMAGEMODEL_TEXT */ N_( "Smudge" ) /* IMAGEMODEL_SMUDGE */ }; GtkWidget *eb; GtkWidget *hb, *hb2; GtkWidget *image; int i; pbv->imagemodel = NULL; pbv->ii_undo_changed_sid = 0; pbv->ii_destroy_sid = 0; pbv->ii = NULL; gtk_frame_set_shadow_type( GTK_FRAME( pbv ), GTK_SHADOW_OUT ); eb = gtk_event_box_new(); gtk_container_add( GTK_CONTAINER( pbv ), eb ); popup_attach( eb, paintboxview_menu, pbv ); hb = gtk_hbox_new( FALSE, 4 ); gtk_container_set_border_width( GTK_CONTAINER( hb ), 1 ); gtk_container_add( GTK_CONTAINER( eb ), hb ); /* The first 4 tools are harmless (region, move, zoom in, zoom out) * and not linked to the paint actions .. so have them first on their * own. */ hb2 = gtk_hbox_new( FALSE, 0 ); for( i = 0; i < 4; i++ ) { pbv->tool[i] = gtk_toggle_button_new(); gtk_signal_connect( GTK_OBJECT( pbv->tool[i] ), "toggled", GTK_SIGNAL_FUNC( paintboxview_tool_toggled_cb ), pbv ); image = gtk_image_new_from_stock( tool_names[i], GTK_ICON_SIZE_BUTTON ); set_tooltip( pbv->tool[i], "%s", tool_tooltips[i] ); gtk_container_add( GTK_CONTAINER( pbv->tool[i] ), image ); gtk_box_pack_start( GTK_BOX( hb2 ), pbv->tool[i], FALSE, FALSE, 0 ); } gtk_box_pack_start( GTK_BOX( hb ), hb2, FALSE, FALSE, 0 ); hb2 = gtk_hbox_new( FALSE, 0 ); pbv->undo = gtk_button_new(); image = gtk_image_new_from_stock( GTK_STOCK_UNDO, GTK_ICON_SIZE_BUTTON ); gtk_container_add( GTK_CONTAINER( pbv->undo ), image ); gtk_signal_connect( GTK_OBJECT( pbv->undo ), "clicked", GTK_SIGNAL_FUNC( paintboxview_undo_cb ), pbv ); set_tooltip( pbv->undo, _( "Undo last paint action" ) ); gtk_box_pack_start( GTK_BOX( hb2 ), pbv->undo, FALSE, FALSE, 0 ); pbv->redo = gtk_button_new(); image = gtk_image_new_from_stock( GTK_STOCK_REDO, GTK_ICON_SIZE_BUTTON ); gtk_container_add( GTK_CONTAINER( pbv->redo ), image ); gtk_signal_connect( GTK_OBJECT( pbv->redo ), "clicked", GTK_SIGNAL_FUNC( paintboxview_redo_cb ), pbv ); set_tooltip( pbv->redo, _( "Redo last paint action" ) ); gtk_box_pack_start( GTK_BOX( hb2 ), pbv->redo, FALSE, FALSE, 0 ); pbv->clear = gtk_button_new(); image = gtk_image_new_from_stock( GTK_STOCK_CLEAR, GTK_ICON_SIZE_BUTTON ); gtk_container_add( GTK_CONTAINER( pbv->clear ), image ); gtk_signal_connect( GTK_OBJECT( pbv->clear ), "clicked", GTK_SIGNAL_FUNC( paintboxview_clear_cb ), pbv ); set_tooltip( pbv->clear, _( "Clear all undo and redo buffers" ) ); gtk_box_pack_start( GTK_BOX( hb2 ), pbv->clear, FALSE, FALSE, 0 ); gtk_box_pack_start( GTK_BOX( hb ), hb2, FALSE, FALSE, 0 ); hb2 = gtk_hbox_new( FALSE, 0 ); for( i = 4; i < IM_NUMBER( tool_names ); i++ ) { pbv->tool[i] = gtk_toggle_button_new(); gtk_signal_connect( GTK_OBJECT( pbv->tool[i] ), "toggled", GTK_SIGNAL_FUNC( paintboxview_tool_toggled_cb ), pbv ); image = gtk_image_new_from_stock( tool_names[i], GTK_ICON_SIZE_BUTTON ); set_tooltip( pbv->tool[i], "%s", tool_tooltips[i] ); gtk_container_add( GTK_CONTAINER( pbv->tool[i] ), image ); gtk_box_pack_start( GTK_BOX( hb2 ), pbv->tool[i], FALSE, FALSE, 0 ); } gtk_box_pack_start( GTK_BOX( hb ), hb2, FALSE, FALSE, 0 ); pbv->nib = tslider_new(); pbv->nib->from = 0; pbv->nib->to = 64; pbv->nib->value = 0; pbv->nib->svalue = 1; pbv->nib->digits = 2; tslider_changed( pbv->nib ); gtk_box_pack_start( GTK_BOX( hb ), GTK_WIDGET( pbv->nib ), FALSE, TRUE, 0 ); gtk_signal_connect( GTK_OBJECT( pbv->nib ), "changed", GTK_SIGNAL_FUNC( paintboxview_scale_change_cb ), pbv ); tslider_set_ignore_scroll( pbv->nib, FALSE ); pbv->ink = (GtkWidget *) colourdisplay_new( NULL ); doubleclick_add( GTK_WIDGET( pbv->ink ), FALSE, NULL, NULL, DOUBLECLICK_FUNC( paintboxview_double_cb ), pbv ); gtk_widget_set_size_request( GTK_WIDGET( pbv->ink ), 20, 10 ); gtk_box_pack_start( GTK_BOX( hb ), pbv->ink, FALSE, TRUE, 0 ); pbv->font = GTK_WIDGET( fontbutton_new() ); gtk_box_pack_start( GTK_BOX( hb ), pbv->font, FALSE, TRUE, 0 ); gtk_signal_connect( GTK_OBJECT( pbv->font ), "changed", GTK_SIGNAL_FUNC( paintboxview_font_changed_cb ), pbv ); pbv->text = gtk_entry_new(); gtk_box_pack_start( GTK_BOX( hb ), pbv->text, TRUE, TRUE, 0 ); gtk_signal_connect( GTK_OBJECT( pbv->text ), "changed", GTK_SIGNAL_FUNC( paintboxview_text_changed_cb ), pbv ); set_tooltip( pbv->text, _( "Enter text for text tool" ) ); gtk_widget_show_all( eb ); } GtkType paintboxview_get_type( void ) { static GtkType paintboxview_type = 0; if( !paintboxview_type ) { static const GtkTypeInfo sinfo = { "Paintboxview", sizeof( Paintboxview ), sizeof( PaintboxviewClass ), (GtkClassInitFunc) paintboxview_class_init, (GtkObjectInitFunc) paintboxview_init, /* reserved_1 */ NULL, /* reserved_2 */ NULL, (GtkClassInitFunc) NULL, }; paintboxview_type = gtk_type_unique( GTK_TYPE_FRAME, &sinfo ); } return( paintboxview_type ); } static void paintboxview_ii_undo_changed_cb( Imageinfo *imageinfo, Paintboxview *pbv ) { gtk_widget_set_sensitive( GTK_WIDGET( pbv->undo ), imageinfo->undo != NULL ); gtk_widget_set_sensitive( GTK_WIDGET( pbv->redo ), imageinfo->redo != NULL ); gtk_widget_set_sensitive( GTK_WIDGET( pbv->clear ), imageinfo->undo != NULL || imageinfo->redo != NULL ); } static void paintboxview_ii_destroy_cb( Imageinfo *imageinfo, Paintboxview *pbv ) { pbv->ii_destroy_sid = 0; pbv->ii_undo_changed_sid = 0; pbv->ii = NULL; } /* Our model has changed ... update. */ static void paintboxview_changed_cb( Imagemodel *imagemodel, Paintboxview *pbv ) { Conversion *conv = imagemodel->conv; Colourdisplay *ink = COLOURDISPLAY( pbv->ink ); int i; #ifdef DEBUG printf( "paintboxview_conv_changed_cb: %p\n", conv ); #endif /*DEBUG*/ /* Has the ii changed? Link to it for undo/redo changes. */ if( pbv->ii != conv->ii ) { FREESID( pbv->ii_undo_changed_sid, pbv->ii ); FREESID( pbv->ii_destroy_sid, pbv->ii ); pbv->ii = conv->ii; if( conv->ii ) { pbv->ii_undo_changed_sid = g_signal_connect( G_OBJECT( conv->ii ), "undo_changed", G_CALLBACK( paintboxview_ii_undo_changed_cb ), pbv ); pbv->ii_destroy_sid = g_signal_connect( G_OBJECT( conv->ii ), "destroy", G_CALLBACK( paintboxview_ii_destroy_cb ), pbv ); paintboxview_ii_undo_changed_cb( conv->ii, pbv ); } /* Update ink display for the new image. */ conversion_set_image( IMAGEDISPLAY( ink )->conv, imagemodel->ink ); } widget_visible( GTK_WIDGET( pbv ), imagemodel->show_paintbox ); if( !imagemodel->show_paintbox ) return; for( i = 0; i < IMAGEMODEL_LAST; i++ ) gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( pbv->tool[i] ), i == (int) imagemodel->state ); fontbutton_set_font_name( FONTBUTTON( pbv->font ), pbv->imagemodel->font_name ); } static void paintboxview_link( Paintboxview *pbv, Imagemodel *imagemodel ) { #ifdef DEBUG printf( "paintboxview_link: %p\n", pbv ); #endif /*DEBUG*/ pbv->imagemodel = imagemodel; g_signal_connect( G_OBJECT( imagemodel ), "changed", G_CALLBACK( paintboxview_changed_cb ), pbv ); } Paintboxview * paintboxview_new( Imagemodel *imagemodel ) { Paintboxview *pbv = gtk_type_new( TYPE_PAINTBOXVIEW ); paintboxview_link( pbv, imagemodel ); return( pbv ); } nip2-8.7.0/src/imagemodel.c0000644000175000017500000003406713224651032012365 00000000000000/* All the model stuff for an imageview window. */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #include "ip.h" /* Our signals. */ enum { SIG_IMAGEINFO_CHANGED, /* Imageinfo we hold has been replaced */ SIG_LAST }; static iObjectClass *parent_class = NULL; static guint imagemodel_signals[SIG_LAST] = { 0 }; void * imagemodel_imageinfo_changed( Imagemodel *imagemodel ) { #ifdef DEBUG printf( "imagemodel_imageinfo_changed: " ); iobject_print( IOBJECT( imagemodel ) ); #endif /*DEBUG*/ g_signal_emit( G_OBJECT( imagemodel ), imagemodel_signals[SIG_IMAGEINFO_CHANGED], 0 ); return( NULL ); } /* Is a state a paint state, ie. one which might alter the image? We warn * before going to one of these. */ gboolean imagemodel_state_paint( ImagemodelState state ) { static gboolean state_paint[IMAGEMODEL_LAST] = { FALSE, /* IMAGEMODEL_SELECT */ FALSE, /* IMAGEMODEL_PAN */ FALSE, /* IMAGEMODEL_MAGIN */ FALSE, /* IMAGEMODEL_MAGOUT */ FALSE, /* IMAGEMODEL_DROPPER */ TRUE, /* IMAGEMODEL_PEN */ TRUE, /* IMAGEMODEL_LINE */ TRUE, /* IMAGEMODEL_RECT */ TRUE, /* IMAGEMODEL_FLOOD */ TRUE, /* IMAGEMODEL_BLOB */ TRUE, /* IMAGEMODEL_TEXT */ TRUE /* IMAGEMODEL_SMUDGE */ }; g_assert( state < IMAGEMODEL_LAST ); return( state_paint[state] ); } #ifdef DEBUG static const char * imagemodel_state( ImagemodelState state ) { switch( state ) { case IMAGEMODEL_SELECT: return( "IMAGEMODEL_SELECT" ); case IMAGEMODEL_PAN: return( "IMAGEMODEL_PAN" ); case IMAGEMODEL_MAGIN: return( "IMAGEMODEL_MAGIN" ); case IMAGEMODEL_MAGOUT: return( "IMAGEMODEL_MAGOUT" ); case IMAGEMODEL_DROPPER: return( "IMAGEMODEL_DROPPER" ); case IMAGEMODEL_PEN: return( "IMAGEMODEL_PEN" ); case IMAGEMODEL_LINE: return( "IMAGEMODEL_LINE" ); case IMAGEMODEL_RECT: return( "IMAGEMODEL_RECT" ); case IMAGEMODEL_FLOOD: return( "IMAGEMODEL_FLOOD" ); case IMAGEMODEL_BLOB: return( "IMAGEMODEL_BLOB" ); case IMAGEMODEL_TEXT: return( "IMAGEMODEL_TEXT" ); case IMAGEMODEL_SMUDGE: return( "IMAGEMODEL_SMUDGE" ); default: g_assert( FALSE ); } } #endif /*DEBUG*/ static void imagemodel_dispose( GObject *gobject ) { Imagemodel *imagemodel; g_return_if_fail( gobject != NULL ); g_return_if_fail( IS_IMAGEMODEL( gobject ) ); imagemodel = IMAGEMODEL( gobject ); #ifdef DEBUG printf( "imagemodel_dispose %p: ", imagemodel ); iobject_print( IOBJECT( imagemodel ) ); #endif /*DEBUG*/ FREESID( imagemodel->iimage_changed_sid, imagemodel->iimage ); FREESID( imagemodel->iimage_destroy_sid, imagemodel->iimage ); FREESID( imagemodel->conv_changed_sid, imagemodel->conv ); FREESID( imagemodel->conv_imageinfo_changed_sid, imagemodel->conv ); UNREF( imagemodel->conv ); MANAGED_UNREF( imagemodel->ink ); IM_FREE( imagemodel->font_name ); IM_FREE( imagemodel->text ); MANAGED_UNREF( imagemodel->text_mask ); MANAGED_UNREF( imagemodel->nib ); G_OBJECT_CLASS( parent_class )->dispose( gobject ); } static void imagemodel_changed( iObject *iobject ) { Imagemodel *imagemodel = IMAGEMODEL( iobject ); #ifdef DEBUG printf( "imagemodel_changed: state = %s ", imagemodel_state( imagemodel->state ) ); iobject_print( IOBJECT( imagemodel ) ); #endif /*DEBUG*/ conversion_set_params( imagemodel->conv, imagemodel->show_convert, imagemodel->scale, imagemodel->offset, imagemodel->falsecolour, imagemodel->type ); /* Update prefs. */ prefs_set( "DISPLAY_RULERS", "%s", bool_to_char( imagemodel->show_rulers ) ); prefs_set( "DISPLAY_STATUS", "%s", bool_to_char( imagemodel->show_status ) ); prefs_set( "DISPLAY_CONVERSION", "%s", bool_to_char( imagemodel->show_convert ) ); /* If the paint bar is on, we want to be in synchronous paint * mode. Even if we're not painting, we need this for * undo/redo to work. */ conversion_set_synchronous( imagemodel->conv, imagemodel->show_paintbox ); IOBJECT_CLASS( parent_class )->changed( iobject ); } static void imagemodel_class_init( ImagemodelClass *class ) { GObjectClass *gobject_class = (GObjectClass *) class; iObjectClass *iobject_class = (iObjectClass *) class; parent_class = g_type_class_peek_parent( class ); gobject_class->dispose = imagemodel_dispose; iobject_class->changed = imagemodel_changed; imagemodel_signals[SIG_IMAGEINFO_CHANGED] = g_signal_new( "imageinfo_changed", G_OBJECT_CLASS_TYPE( gobject_class ), G_SIGNAL_RUN_FIRST, G_STRUCT_OFFSET( ImagemodelClass, imageinfo_changed ), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0 ); } /* Remake the ink image to match ii. */ static void imagemodel_refresh_ink( Imagemodel *imagemodel, Imageinfo *ii ) { IMAGE *main_im = imageinfo_get( FALSE, ii ); IMAGE *ink_im = imageinfo_get( FALSE, imagemodel->ink ); if( ink_im && ink_im->Bands == main_im->Bands && ink_im->BandFmt == main_im->BandFmt && ink_im->Coding == main_im->Coding && ink_im->Type == main_im->Type ) return; MANAGED_UNREF( imagemodel->ink ); if( (imagemodel->ink = imageinfo_new_temp( main_imageinfogroup, reduce_context->heap, NULL, "t" )) ) { MANAGED_REF( imagemodel->ink ); im_initdesc( imagemodel->ink->im, 1, 1, main_im->Bands, main_im->Bbits, main_im->BandFmt, main_im->Coding, main_im->Type, 1.0, 1.0, 0, 0 ); if( im_setupout( imagemodel->ink->im ) ) MANAGED_UNREF( imagemodel->ink ); } if( imagemodel->ink && imagemodel->ink->im && imagemodel->ink->im->data ) memset( imagemodel->ink->im->data, 0, IM_IMAGE_SIZEOF_LINE( imagemodel->ink->im ) ); } static void imagemodel_conv_changed_cb( Conversion *conv, Imagemodel *imagemodel ) { if( conv->ii ) imagemodel_refresh_ink( imagemodel, conv->ii ); iobject_changed( IOBJECT( imagemodel ) ); } static void imagemodel_conv_imageinfo_changed_cb( Conversion *conv, Imagemodel *imagemodel ) { imagemodel_imageinfo_changed( imagemodel ); } static void imagemodel_init( Imagemodel *imagemodel ) { imagemodel->iimage = NULL; imagemodel->iimage_changed_sid = 0; imagemodel->iimage_destroy_sid = 0; imagemodel->conv = conversion_new( NULL ); g_object_ref( G_OBJECT( imagemodel->conv ) ); iobject_sink( IOBJECT( imagemodel->conv ) ); imagemodel->conv_changed_sid = g_signal_connect( G_OBJECT( imagemodel->conv ), "changed", G_CALLBACK( imagemodel_conv_changed_cb ), imagemodel ); imagemodel->conv_imageinfo_changed_sid = g_signal_connect( G_OBJECT( imagemodel->conv ), "imageinfo_changed", G_CALLBACK( imagemodel_conv_imageinfo_changed_cb ), imagemodel ); imagemodel->conv->priority = 1; imagemodel->show_rulers = DISPLAY_RULERS; imagemodel->rulers_mm = FALSE; imagemodel->rulers_offset = FALSE; imagemodel->show_status = DISPLAY_STATUS; imagemodel->show_paintbox = FALSE; imagemodel->nib_radius = 0; imagemodel->nib = NULL; imagemodel->ink = NULL; imagemodel->font_name = im_strdup( NULL, PAINTBOX_FONT ); imagemodel->text = NULL; imagemodel->text_mask = NULL; imagemodel->show_convert = DISPLAY_CONVERSION; imagemodel->scale = 1.0; imagemodel->offset = 0.0; imagemodel->falsecolour = FALSE; imagemodel->type = TRUE; } GType imagemodel_get_type( void ) { static GType type = 0; if( !type ) { static const GTypeInfo info = { sizeof( ImagemodelClass ), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) imagemodel_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof( Imagemodel ), 32, /* n_preallocs */ (GInstanceInitFunc) imagemodel_init, }; type = g_type_register_static( TYPE_IOBJECT, "Imagemodel", &info, 0 ); } return( type ); } static void imagemodel_iimage_destroy_cb( iImage *iimage, Imagemodel *imagemodel ) { imagemodel->iimage = NULL; imagemodel->iimage_destroy_sid = 0; imagemodel->iimage_changed_sid = 0; } static void imagemodel_iimage_changed_cb( iImage *iimage, Imagemodel *imagemodel ) { conversion_set_image( imagemodel->conv, iimage->value.ii ); } static void imagemodel_link( Imagemodel *imagemodel, iImage *iimage ) { Row *row = HEAPMODEL( iimage )->row; imagemodel->iimage = iimage; imagemodel->iimage_destroy_sid = g_signal_connect( G_OBJECT( iimage ), "destroy", G_CALLBACK( imagemodel_iimage_destroy_cb ), imagemodel ); imagemodel->iimage_changed_sid = g_signal_connect( G_OBJECT( iimage ), "changed", G_CALLBACK( imagemodel_iimage_changed_cb ), imagemodel ); imagemodel->scale = row->ws->scale; imagemodel->offset = row->ws->offset; /* Install image. */ conversion_set_image( imagemodel->conv, iimage->value.ii ); /* Set name ... handy for debugging. */ iobject_set( IOBJECT( imagemodel ), row_name( HEAPMODEL( iimage )->row ), NULL ); } Imagemodel * imagemodel_new( iImage *iimage ) { Imagemodel *imagemodel; imagemodel = g_object_new( TYPE_IMAGEMODEL, NULL ); if( iimage ) imagemodel_link( imagemodel, iimage ); #ifdef DEBUG printf( "imagemodel_new: " ); iobject_print( IOBJECT( imagemodel ) ); #endif /*DEBUG*/ return( imagemodel ); } /* Callback for check_paintable() in imagemodel_set_state. */ static void imagemodel_set_paintbox_cb( void *client, iWindowResult result ) { Imagemodel *imagemodel = IMAGEMODEL( client ); #ifdef DEBUG printf( "imagemodel_set_paintbox_cb: pend_state = %s\n", imagemodel_state( imagemodel->pend_state ) ); #endif /*DEBUG*/ if( result == IWINDOW_YES ) { imagemodel_set_paintbox( imagemodel, TRUE ); if( imagemodel->state != imagemodel->pend_state ) { imagemodel->state = imagemodel->pend_state; iobject_changed( IOBJECT( imagemodel ) ); } } } /* Set the viewer state. We can't always do this immediately, we may need to * ask the user if the change is OK. Return TRUE if we were able to make the * change now. */ gboolean imagemodel_set_state( Imagemodel *imagemodel, ImagemodelState state, GtkWidget *parent ) { gboolean changed = FALSE; #ifdef DEBUG printf( "imagemodel_set_state: %s\n", imagemodel_state( state ) ); #endif /*DEBUG*/ if( state != imagemodel->state && imagemodel_state_paint( state ) ) { /* Check and warn on this image first. */ imagemodel->pend_state = state; imageinfo_check_paintable( imagemodel->conv->ii, parent, imagemodel_set_paintbox_cb, imagemodel ); /* We may not have set the state yet ... signal "changed" * to flick whatever asked for this change (eg. View * menu) back to the old state. */ changed = TRUE; } else if( state != imagemodel->state ) { imagemodel->state = state; changed = TRUE; } if( changed ) iobject_changed( IOBJECT( imagemodel ) ); return( imagemodel->state == state ); } void imagemodel_set_rulers( Imagemodel *imagemodel, gboolean show_rulers ) { if( imagemodel->show_rulers != show_rulers ) { imagemodel->show_rulers = show_rulers; iobject_changed( IOBJECT( imagemodel ) ); } } void imagemodel_set_paintbox( Imagemodel *imagemodel, gboolean show_paintbox ) { if( imagemodel->show_paintbox != show_paintbox ) { #ifdef DEBUG printf( "imagemodel_set_paintbox: " ); iobject_print( IOBJECT( imagemodel ) ); #endif /*DEBUG*/ imagemodel->show_paintbox = show_paintbox; /* If the paint bar is off, we want to not be in a paint mode. */ if( !imagemodel->show_paintbox && imagemodel_state_paint( imagemodel->state ) ) imagemodel_set_state( imagemodel, IMAGEMODEL_SELECT, NULL ); iobject_changed( IOBJECT( imagemodel ) ); } } void imagemodel_set_status( Imagemodel *imagemodel, gboolean show_status ) { if( imagemodel->show_status != show_status ) { imagemodel->show_status = show_status; iobject_changed( IOBJECT( imagemodel ) ); } } void imagemodel_set_convert( Imagemodel *imagemodel, gboolean show_convert ) { if( imagemodel->show_convert != show_convert ) { imagemodel->show_convert = show_convert; iobject_changed( IOBJECT( imagemodel ) ); } } /* Update the text_mask. imagemodel->text is kept up to date with what's in the * paintbox text widget, call this just before a paint action to render the * mask. */ gboolean imagemodel_refresh_text( Imagemodel *imagemodel ) { const char *text = imagemodel->text; if( !text || strspn( text, WHITESPACE ) == strlen( text ) ) { error_top( _( "No text specified." ) ); error_sub( _( "Enter some text to paint in the entry widget at " "the top of the window." ) ); return( FALSE ); } MANAGED_UNREF( imagemodel->text_mask ); if( !(imagemodel->text_mask = imageinfo_new_temp( main_imageinfogroup, reduce_context->heap, NULL, "t" )) ) return( FALSE ); MANAGED_REF( imagemodel->text_mask ); if( !imageinfo_paint_text( imagemodel->text_mask, imagemodel->font_name, imagemodel->text, &imagemodel->text_area ) ) return( FALSE ); return( TRUE ); } gboolean imagemodel_refresh_nib( Imagemodel *imagemodel ) { MANAGED_UNREF( imagemodel->nib ); if( !(imagemodel->nib = imageinfo_new_temp( main_imageinfogroup, reduce_context->heap, NULL, "t" )) ) return( FALSE ); MANAGED_REF( imagemodel->nib ); if( !imageinfo_paint_nib( imagemodel->nib, imagemodel->nib_radius ) ) return( FALSE ); return( TRUE ); } /* After a paint action: mark all subsequent things dirty, recalc if prefs say * so. */ void imagemodel_paint_recalc( Imagemodel *imagemodel ) { Classmodel *classmodel = CLASSMODEL( imagemodel->iimage ); Row *row = HEAPMODEL( classmodel )->row; #ifdef DEBUG printf( "imagemodel_paint_recalc: " ); iobject_print( IOBJECT( imagemodel ) ); #endif /*DEBUG*/ expr_dirty_intrans( row->expr, link_serial_new() ); if( PAINTBOX_RECOMP ) symbol_recalculate_all(); } nip2-8.7.0/src/itextview.h0000644000175000017500000000303013224651032012301 00000000000000/* a textview button in a workspace */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_ITEXTVIEW (itextview_get_type()) #define ITEXTVIEW( obj ) (GTK_CHECK_CAST( (obj), TYPE_ITEXTVIEW, iTextview )) #define ITEXTVIEW_CLASS( klass ) \ (GTK_CHECK_CLASS_CAST( (klass), TYPE_ITEXTVIEW, iTextviewClass )) #define IS_ITEXTVIEW( obj ) (GTK_CHECK_TYPE( (obj), TYPE_ITEXTVIEW )) #define IS_ITEXTVIEW_CLASS( klass ) \ (GTK_CHECK_CLASS_TYPE( (klass), TYPE_ITEXTVIEW )) typedef struct _iTextview { View view; /* Widgets. */ Formula *formula; } iTextview; typedef struct _iTextviewClass { ViewClass parent_class; /* My methods. */ } iTextviewClass; GtkType itextview_get_type( void ); View *itextview_new( void ); nip2-8.7.0/src/prefcolumnview.c0000644000175000017500000000603713224651032013323 00000000000000/* a view of a column */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #include "ip.h" static ViewClass *parent_class = NULL; static void prefcolumnview_refresh( vObject *vobject ) { Prefcolumnview *pcview = PREFCOLUMNVIEW( vobject ); Column *col = COLUMN( VOBJECT( pcview )->iobject ); char buf[256]; char buf2[256]; escape_markup( IOBJECT( col )->caption, buf2, 256 ); im_snprintf( buf, 256, "%s", buf2 ); gtk_label_set_markup( GTK_LABEL( pcview->lab ), buf ); /* Closed columns are hidden. */ widget_visible( GTK_WIDGET( pcview ), col->open ); VOBJECT_CLASS( parent_class )->refresh( vobject ); } static void prefcolumnview_child_add( View *parent, View *child ) { Prefcolumnview *pcview = PREFCOLUMNVIEW( parent ); Subcolumnview *sview = SUBCOLUMNVIEW( child ); VIEW_CLASS( parent_class )->child_add( parent, child ); gtk_box_pack_end( GTK_BOX( pcview ), GTK_WIDGET( sview ), FALSE, FALSE, 0 ); } static void prefcolumnview_class_init( PrefcolumnviewClass *class ) { vObjectClass *vobject_class = (vObjectClass *) class; ViewClass *view_class = (ViewClass *) class; parent_class = g_type_class_peek_parent( class ); /* Create signals. */ /* Init methods. */ vobject_class->refresh = prefcolumnview_refresh; view_class->child_add = prefcolumnview_child_add; } static void prefcolumnview_init( Prefcolumnview *pcview ) { pcview->lab = gtk_label_new( "" ); gtk_box_pack_start( GTK_BOX( pcview ), pcview->lab, FALSE, FALSE, 2 ); gtk_misc_set_padding( GTK_MISC( pcview->lab ), 2, 6 ); gtk_misc_set_alignment( GTK_MISC( pcview->lab ), 0, 0.5 ); gtk_widget_show_all( GTK_WIDGET( pcview ) ); } GtkType prefcolumnview_get_type( void ) { static GtkType type = 0; if( !type ) { static const GtkTypeInfo info = { "Prefcolumnview", sizeof( Prefcolumnview ), sizeof( PrefcolumnviewClass ), (GtkClassInitFunc) prefcolumnview_class_init, (GtkObjectInitFunc) prefcolumnview_init, /* reserved_1 */ NULL, /* reserved_2 */ NULL, (GtkClassInitFunc) NULL, }; type = gtk_type_unique( TYPE_VIEW, &info ); } return( type ); } View * prefcolumnview_new( void ) { Prefcolumnview *pcview = gtk_type_new( TYPE_PREFCOLUMNVIEW ); return( VIEW( pcview ) ); } nip2-8.7.0/src/predicate.h0000644000175000017500000000261413224651032012220 00000000000000/* Declarations for predicate.c */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ gboolean is_system( Symbol *sym ); gboolean is_separator( Symbol *sym ); gboolean is_member( Symbol *sym ); gboolean is_class( Compile *compile ); gboolean is_super( Symbol *sym ); gboolean is_this( Symbol *sym ); gboolean is_member_enclosing( Compile *compile, Symbol *sym ); gboolean is_top( Symbol *sym ); gboolean is_scope( Symbol *sym ); gboolean is_memberfunc( Compile *compile ); gboolean is_value( Symbol *sym ); gboolean is_ancestor( Symbol *context, Symbol *sym ); gboolean is_menuable( Symbol *sym ); nip2-8.7.0/src/prefcolumnview.h0000644000175000017500000000325313224651032013325 00000000000000/* view of a column in a preferences window */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_PREFCOLUMNVIEW (prefcolumnview_get_type()) #define PREFCOLUMNVIEW( obj ) \ (GTK_CHECK_CAST( (obj), TYPE_PREFCOLUMNVIEW, Prefcolumnview )) #define PREFCOLUMNVIEW_CLASS( klass ) \ (GTK_CHECK_CLASS_CAST( (klass), \ TYPE_PREFCOLUMNVIEW, PrefcolumnviewClass )) #define IS_PREFCOLUMNVIEW( obj ) (GTK_CHECK_TYPE( (obj), TYPE_PREFCOLUMNVIEW )) #define IS_PREFCOLUMNVIEW_CLASS( klass ) \ (GTK_CHECK_CLASS_TYPE( (klass), TYPE_PREFCOLUMNVIEW )) struct _Prefcolumnview { View view; /* Display parts. */ GtkWidget *lab; /* Prefcolumnview name label */ }; typedef struct _PrefcolumnviewClass { ViewClass parent_class; /* My methods. */ } PrefcolumnviewClass; GtkType prefcolumnview_get_type( void ); View *prefcolumnview_new( void ); nip2-8.7.0/src/group.h0000644000175000017500000000270713224651032011417 00000000000000/* a group in a workspace */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_GROUP (group_get_type()) #define GROUP( obj ) (GTK_CHECK_CAST( (obj), TYPE_GROUP, Group )) #define GROUP_CLASS( klass ) \ (GTK_CHECK_CLASS_CAST( (klass), TYPE_GROUP, GroupClass )) #define IS_GROUP( obj ) (GTK_CHECK_TYPE( (obj), TYPE_GROUP )) #define IS_GROUP_CLASS( klass ) \ (GTK_CHECK_CLASS_TYPE( (klass), TYPE_GROUP )) typedef struct _Group { Value parent_object; } Group; typedef struct _GroupClass { ValueClass parent_class; /* My methods. */ } GroupClass; GType group_get_type( void ); gboolean group_save_item( PElement *item, char *filename ); nip2-8.7.0/src/heap.h0000644000175000017500000003751613224651032011206 00000000000000/* Heap management. */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* Node type. Generally represent data objects. * * Don't use enum, as we want this to fit in 1 byte. */ typedef unsigned char NodeType; #define TAG_APPL (0) /* Application */ #define TAG_CONS (1) /* List cons */ #define TAG_FREE (2) /* On free list */ #define TAG_DOUBLE (3) /* Constant double */ #define TAG_COMPLEX (4) /* Constant complex */ #define TAG_GEN (5) /* List generator */ #define TAG_CLASS (8) /* Class object */ #define TAG_SHARED (9) /* Root of a common sub-expression */ #define TAG_REFERENCE (10) /* Reference to a common sub-expression */ #define TAG_FILE (12) /* Generate list from file */ /* Element types. Generally represent operators. */ typedef unsigned char EType; #define ELEMENT_NOVAL (0) /* No value */ #define ELEMENT_NODE (1) /* Pointer to another node */ #define ELEMENT_SYMBOL (2) /* Pointer to Symbol, reduces to value */ #define ELEMENT_SYMREF (3) /* Pointer to Symbol, does not reduce */ #define ELEMENT_COMPILEREF (4) /* Pointer to Compile, does not reduce */ #define ELEMENT_CHAR (5) /* Boxed char type */ #define ELEMENT_BOOL (6) /* Boxed bool type */ #define ELEMENT_BINOP (7) /* Binary operator */ #define ELEMENT_UNOP (8) /* Unary operator */ #define ELEMENT_COMB (9) /* Combinator */ #define ELEMENT_TAG (10) /* RHS of '.' operator */ #define ELEMENT_MANAGED (11) /* A managed object */ #define ELEMENT_CONSTRUCTOR (12)/* Class constructor */ #define ELEMENT_ELIST (13) /* Empty list */ /* Flags we attach to a node. */ typedef unsigned char NodeFlags; #define FLAG_SERIAL (31) /* Serial number mask .. must be 1st */ #define FLAG_PRINT (32) /* Marked (for decompile print) */ #define FLAG_DEBUG (64) /* Marked (for debug traverse) */ #define FLAG_MARK (128) /* Marked (for mark-sweep) */ #define FLAG_ALL (255) /* All flags mask */ /* Set the serial number without disturbing other stuff. */ #define SETSERIAL( FLAGS, SERIAL ) { \ (FLAGS) = ((FLAGS) & (FLAG_SERIAL ^ FLAG_ALL)) | \ ((SERIAL) & FLAG_SERIAL); \ } /* Combinators. Don't change the order of these! See reduce.c for an array * indexed with a CombinatorType. */ typedef enum combinator_type { COMB_S = 0, /* S combinator */ COMB_SL, /* S-left combinator */ COMB_SR, /* S-right combinator */ COMB_I, /* Identity combinator */ COMB_K, /* K combinator */ COMB_GEN /* List generator combinator */ } CombinatorType; /* An element ... a tag plus a pointer. Use one of these to hold a pointer * into a heap. */ typedef struct _Element { EType type; void *ele; } Element; /* A node on the heap. Should fit in 12 bytes on most machines. */ typedef struct _HeapNode { /* Elements: either a pair of pointers, or a double. Sensible on most * 32-bit systems, not so great on 64 bitters. */ union { struct { void *left; void *right; } ptrs; double num; } body; /* Flags ... should fit in 4 bytes. */ NodeType type; /* What this is */ NodeFlags flgs; /* GC flags etc */ EType ltype; /* Type of left element */ EType rtype; /* Type of right element */ } HeapNode; /* Put type/value pairs into nodes. Make sure we completely read before we * write. */ #define PPUTLEFT(N,T,V) {\ EType t99 = (T);\ void *v99 = (void*)(V);\ \ (N)->ltype = t99;\ (N)->body.ptrs.left = v99;\ } #define PPUTRIGHT(N,T,V) {\ EType t99 = (T);\ void *v99 = (void*)(V);\ \ (N)->rtype = t99;\ (N)->body.ptrs.right = v99;\ } #define PPUT(N,Tl,Vl,Tr,Vr) {PPUTLEFT( N, Tl, Vl ); PPUTRIGHT( N, Tr, Vr );} /* Get value as a HeapNode pointer (most common case). */ #define GETLEFT(N) ((HeapNode*)((N)->body.ptrs.left)) #define GETRIGHT(N) ((HeapNode*)((N)->body.ptrs.right)) #define GETLT(N) ((N)->ltype) #define GETRT(N) ((N)->rtype) /* A pointer to an element inside a HeapNode, or to an Element. */ typedef struct pelement { EType *type; void **ele; } PElement; /* Make a PElement point to a node. */ #define PEPOINTLEFT(N,P) \ {(P)->type=&((N)->ltype);(P)->ele=&((N)->body.ptrs.left);} #define PEPOINTRIGHT(N,P) \ {(P)->type=&((N)->rtype);(P)->ele=&((N)->body.ptrs.right);} /* Make a PElement point to an element. */ #define PEPOINTE(PE,E) \ {(PE)->type=&((E)->type);(PE)->ele=&((E)->ele);} /* Get from a PE. */ #define PEGETTYPE(P) (*((P)->type)) #define PEGETVAL(P) ((HeapNode*)(*((P)->ele))) #define PEGETE(P,E) ((E)->type = PEGETTYPE(P),(E)->ele = PEGETVAL(P)) #define PEGETP(PE,T,V) ((T)=*((PE)->type),(V)=*((PE)->ele)) /* Write to a PE. We are careful to eval all args before writing, in case we * are writing to one of the inputs. */ #define PEPUTE(PE,E) {*((PE)->type)=(E)->type;*((PE)->ele)=(E)->ele;} #define PEPUTPE(PEto,PEfrom) {\ EType t99 = PEGETTYPE(PEfrom);\ void *v99 = PEGETVAL(PEfrom);\ \ *((PEto)->type) = t99;\ *((PEto)->ele) = v99;\ } #define PEPUTP(PE,T,V) {\ EType t99 = (T);\ void *v99 = GUINT_TO_POINTER(V);\ \ *((PE)->type) = t99;\ *((PE)->ele) = v99;\ } /* Write a PE to a node. Again, make sure we read both before we write, in * case we are writing an expression to ourselves. */ #define PEPUTLEFT(N,PE) {\ EType t99 = PEGETTYPE(PE);\ void *v99 = PEGETVAL(PE);\ \ (N)->ltype = t99;\ (N)->body.ptrs.left = v99;\ } #define PEPUTRIGHT(N,PE) {\ EType t99 = PEGETTYPE(PE);\ void *v99 = PEGETVAL(PE);\ \ (N)->rtype = t99;\ (N)->body.ptrs.right = v99;\ } /* Predicates. */ #define PEISBINOP(P) (PEGETTYPE(P) == ELEMENT_BINOP) #define PEISBOOL(P) (PEGETTYPE(P) == ELEMENT_BOOL) #define PEISCHAR(P) (PEGETTYPE(P) == ELEMENT_CHAR) #define PEISCLASS(P) (PEISNODE(P) && PEGETVAL(P)->type == TAG_CLASS) #define PEISCONSTRUCTOR(P) (PEGETTYPE(P) == ELEMENT_CONSTRUCTOR) #define PEISCOMB(P) (PEGETTYPE(P) == ELEMENT_COMB) #define PEISCOMPLEX(P) (PEISNODE(P) && PEGETVAL(P)->type == TAG_COMPLEX) #define PEISTAG(P) (PEGETTYPE(P) == ELEMENT_TAG) #define PEISMANAGED(P) (PEGETTYPE(P) == ELEMENT_MANAGED) #define PEISMANAGEDGOBJECT(P) (PEISMANAGED(P) && \ IS_MANAGEDGOBJECT( PEGETVAL(P) )) #define PEISMANAGEDSTRING(P) (PEISMANAGED(P) && \ IS_MANAGEDSTRING(PEGETVAL(P))) #define PEISIMAGE(P) (PEISMANAGED(P) && IS_IMAGEINFO( PEGETVAL(P) )) #define PEISVIPSOBJECT(P) \ (PEISMANAGEDGOBJECT(P) && VIPS_IS_OBJECT( PEGETMANAGEDGOBJECT(P) )) #define PEISFILE(P) (PEISMANAGED(P) && IS_MANAGEDFILE(PEGETVAL(P))) #define PEISELIST(P) (PEGETTYPE(P) == ELEMENT_ELIST) #define PEISFLIST(P) ((PEISNODE(P) && PEGETVAL(P)->type == TAG_CONS) || \ PEISMANAGEDSTRING(P)) #define PEISLIST(P) (PEISELIST(P) || PEISFLIST(P)) #define PEISNOVAL(P) (PEGETTYPE(P) == ELEMENT_NOVAL) #define PEISNUM(P) (PEISREAL(P) || PEISCOMPLEX(P)) #define PEISNODE(P) (PEGETTYPE(P) == ELEMENT_NODE) #define PEISREAL(P) (PEISNODE(P) && PEGETVAL(P)->type == TAG_DOUBLE) #define PEISSYMBOL(P) (PEGETTYPE(P) == ELEMENT_SYMBOL) #define PEISSYMREF(P) (PEGETTYPE(P) == ELEMENT_SYMREF) #define PEISCOMPILEREF(P) (PEGETTYPE(P) == ELEMENT_COMPILEREF) #define PEISUNOP(P) (PEGETTYPE(P) == ELEMENT_UNOP) /* Extract bits of primitive compound types. */ #define PEGETSYMBOL(P) ((Symbol*)PEGETVAL(P)) #define PEGETSYMREF(P) ((Symbol*)PEGETVAL(P)) #define PEGETCOMPILE(P) ((Compile*)(PEGETVAL(P))) #define PEGETBINOP(P) ((BinOp)PEGETVAL(P)) #define PEGETUNOP(P) ((UnOp)PEGETVAL(P)) #define PEGETCOMB(P) ((CombinatorType)PEGETVAL(P)) #define PEGETTAG(P) ((char*)PEGETVAL(P)) #define PEGETREAL(P) (PEGETVAL(P)->body.num) #define PEGETBOOL(P) ((gboolean)GPOINTER_TO_UINT(PEGETVAL(P))) #define PEGETCHAR(P) ((unsigned char)(GPOINTER_TO_UINT(PEGETVAL(P)))) #define PEGETIMAGE(P) (((Imageinfo*)PEGETVAL(P))->im) #define PEGETII(P) ((Imageinfo*)PEGETVAL(P)) #define PEGETFILE(P) ((Managedfile*)PEGETVAL(P)) #define PEGETMANAGED(P) ((Managed*)PEGETVAL(P)) #define PEGETMANAGEDSTRING(P) ((Managedstring*)PEGETVAL(P)) #define PEGETMANAGEDGOBJECT(P) (((Managedgobject*)PEGETVAL(P))->object) #define PEGETVIPSOBJECT(P) \ ((VipsObject*)(((Managedgobject*)PEGETVAL(P))->object)) #define PEGETHD(P1,P2) PEPOINTLEFT(PEGETVAL(P2), P1) #define PEGETTL(P1,P2) PEPOINTRIGHT(PEGETVAL(P2), P1) #define PEGETREALPART(P) (GETLEFT(PEGETVAL(P))->body.num) #define PEGETIMAGPART(P) (GETRIGHT(PEGETVAL(P))->body.num) #define PEGETCLASSCOMPILE(P) (COMPILE(GETLEFT(PEGETVAL(P)))) #define PEGETCLASSSECRET(P1,P2) PEPOINTLEFT(GETRIGHT(PEGETVAL(P2)),P1) #define PEGETCLASSMEMBER(P1,P2) PEPOINTRIGHT(GETRIGHT(PEGETVAL(P2)),P1) /* A block on the heap. */ struct _HeapBlock { Heap *heap; /* Heap we are part of */ HeapBlock *next; /* Next block in chain */ HeapNode *node; /* Nodes on this block */ int sz; /* Number of nodes in this block */ }; /* Function to get max heap size. */ typedef int (*heap_max_fn)( Heap * ); #define TYPE_HEAP (heap_get_type()) #define HEAP( obj ) \ (G_TYPE_CHECK_INSTANCE_CAST( (obj), TYPE_HEAP, Heap )) #define HEAP_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_CAST( (klass), TYPE_HEAP, HeapClass)) #define IS_HEAP( obj ) \ (G_TYPE_CHECK_INSTANCE_TYPE( (obj), TYPE_HEAP )) #define IS_HEAP_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_TYPE( (klass), TYPE_HEAP )) #define HEAP_GET_CLASS( obj ) \ (G_TYPE_INSTANCE_GET_CLASS( (obj), TYPE_HEAP, HeapClass )) struct _Heap { iObject parent_object; Compile *compile; /* If non-null, assoc. compile */ heap_max_fn max_fn; /* Max nodes in this heap */ int mxb; /* Max blocks until next check */ int rsz; /* Nodes to allocate in each extra block */ int nb; /* Number of blocks attached */ HeapBlock *hb; /* List of current blocks */ HeapNode *free; /* Start of free-node chain (sweep to here) */ int ncells; /* Cells allocated */ int nfree; /* Cells free */ int serial; /* Last serial number we used */ gboolean filled; /* Set on heap full */ GHashTable *emark; /* Set of elements to mark on GC */ GHashTable *rmark; /* Set of Reduce to mark on GC */ GHashTable *mtable; /* Managed associated with this heap */ guint gc_tid; /* id of gc delay timer */ /* Set this to force unreffed objects out immediately. Handy for leak * testing. */ gboolean flush; }; typedef struct _HeapClass { iObjectClass parent_class; /* My methods. */ } HeapClass; /* Get a node from the free-list. No check for free-list exhausted! Set sym * pointer in node to heap sym pointer. */ #ifdef DEBUG_HEAP #define EXTRACTNODE( H, A ) \ (heap_sanity( H ), (A) = (H)->free, (H)->free = GETLEFT( A ), 0) #else /*!DEBUG_HEAP*/ #define EXTRACTNODE( H, A ) \ ((A) = (H)->free, (H)->free = GETLEFT( A ), 0) #endif /*DEBUG_HEAP*/ /* Allocate a new node from heap H, pop the pointer into A, return non-zero if * alloc failed. Node is uninitialised! */ #define NEWNODE( H, A ) ( \ (H)->free ? \ EXTRACTNODE( H, A ): \ (((A) = heap_getmem( H )) ? 0 : -1) \ ) typedef void *(*heap_safe_pointer_fn)( Heap *heap, PElement *, void *, void *, void *, void * ); void *heap_safe_pointer( Heap *heap, heap_safe_pointer_fn fn, void *a, void *b, void *c, void *d ); typedef void *(*heap_map_fn)( HeapNode *, void *, void *); void *heap_map( HeapNode *hn, heap_map_fn fn, void *a, void *b ); int heap_sanity( Heap *heap ); void heap_check_all_destroyed( void ); void heap_destroy( Heap *heap ); GType heap_get_type( void ); Heap *heap_new( Compile *compile, heap_max_fn max_fn, int stsz, int rsz ); HeapNode *heap_getmem( Heap *heap ); gboolean heap_gc( Heap *heap ); void heap_gc_request( Heap *heap ); void heap_register_element( Heap *heap, Element *root ); void heap_unregister_element( Heap *heap, Element *root ); void heap_register_reduce( Heap *heap, Reduce *rc ); void heap_unregister_reduce( Heap *heap, Reduce *rc ); void heap_set( Heap *heap, NodeFlags setmask ); void heap_clear( Heap *heap, NodeFlags clearmask ); int heap_serial_new( Heap *heap ); gboolean heap_bool_new( Heap *heap, gboolean val, PElement *out ); gboolean heap_real_new( Heap *heap, double in, PElement *out ); gboolean heap_element_new( Heap *heap, Element *e, PElement *out ); gboolean heap_complex_element_new( Heap *heap, PElement *rp, PElement *ip, PElement *out ); gboolean heap_complex_new( Heap *heap, double rp, double ip, PElement *out ); gboolean heap_realvec_new( Heap *heap, int n, double *vec, PElement *out ); gboolean heap_intvec_new( Heap *heap, int n, int *vec, PElement *out ); void heap_list_init( PElement *list ); gboolean heap_list_add( Heap *heap, PElement *list, PElement *data ); gboolean heap_list_next( PElement *list ); gboolean heap_list_cat( Reduce *rc, PElement *a, PElement *b, PElement *out ); void heap_appl_init( PElement *base, PElement *func ); gboolean heap_appl_add( Heap *heap, PElement *base, PElement *parm ); gboolean heap_matrix_new( Heap *heap, int xsize, int ysize, double *vec, PElement *out ); gboolean heap_string_new( Heap *heap, const char *str, PElement *out ); gboolean heap_managedstring_new( Heap *heap, const char *str, PElement *out ); gboolean heap_lstring_new( Heap *heap, GSList *labels, PElement *out ); gboolean heap_file_new( Heap *heap, const char *filename, PElement *out ); gboolean heap_error_typecheck( PElement *e, const char *name, const char *type ); typedef void *(*heap_map_list_fn)( PElement *, void *, void * ); void *heap_map_list( PElement *base, heap_map_list_fn fn, void *a, void *b ); typedef void *(*heap_map_dict_fn)( const char *, PElement *, void *a, void *b ); void *heap_map_dict( PElement *base, heap_map_dict_fn fn, void *a, void *b ); gboolean heap_get_list( PElement *list ); gboolean heap_get_list_next( PElement *list, PElement *data ); gboolean heap_get_string( PElement *base, char *buf, int n ); gboolean heap_get_lstring( PElement *base, GSList **labels ); gboolean heap_get_bool( PElement *base, gboolean *out ); gboolean heap_get_real( PElement *base, double *out ); gboolean heap_get_class( PElement *base, PElement *out ); gboolean heap_get_image( PElement *base, Imageinfo **out ); int heap_get_realvec( PElement *base, double *buf, int n ); int heap_get_imagevec( PElement *base, Imageinfo **buf, int n ); gboolean heap_get_matrix_size( PElement *base, int *xsize, int *ysize ); gboolean heap_get_matrix( PElement *base, double *buf, int n, int *xsize, int *ysize ); gboolean heap_is_elist( PElement *base, gboolean *out ); gboolean heap_is_list( PElement *base, gboolean *out ); gboolean heap_is_string( PElement *base, gboolean *out ); gboolean heap_is_realvec( PElement *base, gboolean *out ); gboolean heap_is_imagevec( PElement *base, gboolean *out ); gboolean heap_is_matrix( PElement *base, gboolean *out ); gboolean heap_is_class( PElement *base, gboolean *out ); gboolean heap_is_instanceof_exact( const char *name, PElement *klass, gboolean *out); gboolean heap_is_instanceof( const char *name, PElement *klass, gboolean *out ); int heap_list_length( PElement *base ); int heap_list_length_max( PElement *base, int max_length ); gboolean heap_list_index( PElement *base, int n, PElement *out ); gboolean heap_reduce_strict( PElement *base ); gboolean heap_copy( Heap *heap, Compile *compile, PElement *out ); gboolean heap_ip_to_gvalue( PElement *in, GValue *out ); gboolean heap_gvalue_to_ip( GValue *in, PElement *out ); void graph_node( Heap *heap, VipsBuf *buf, HeapNode *root, gboolean fn ); void graph_pelement( Heap *heap, VipsBuf *buf, PElement *root, gboolean fn ); void graph_element( Heap *heap, VipsBuf *buf, Element *root, gboolean fn ); void graph_pointer( PElement *root ); /* Reduce and print, csh-style output. */ void graph_value( PElement *root ); nip2-8.7.0/src/pathnameview.c0000644000175000017500000001170613224651032012745 00000000000000/* run the display for an arrow in a workspace */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #include "ip.h" static GraphicviewClass *parent_class = NULL; static void pathnameview_link( View *view, Model *model, View *parent ) { Pathnameview *pathnameview = PATHNAMEVIEW( view ); VIEW_CLASS( parent_class )->link( view, model, parent ); if( GRAPHICVIEW( view )->sview ) gtk_size_group_add_widget( GRAPHICVIEW( view )->sview->group, pathnameview->label ); } static void pathnameview_refresh( vObject *vobject ) { Pathnameview *pathnameview = PATHNAMEVIEW( vobject ); Pathname *pathname = PATHNAME( VOBJECT( vobject )->iobject ); #ifdef DEBUG printf( "pathnameview_refresh: " ); row_name_print( HEAPMODEL( pathname )->row ); printf( "\n" ); #endif /*DEBUG*/ if( vobject->iobject->caption ) set_glabel( pathnameview->label, _( "%s:" ), vobject->iobject->caption ); if( pathname->value ) gtk_button_set_label( GTK_BUTTON( pathnameview->button ), im_skip_dir( pathname->value ) ); VOBJECT_CLASS( parent_class )->refresh( vobject ); } static void pathnameview_class_init( PathnameviewClass *class ) { vObjectClass *vobject_class = (vObjectClass *) class; ViewClass *view_class = (ViewClass *) class; parent_class = g_type_class_peek_parent( class ); /* Create signals. */ /* Init methods. */ vobject_class->refresh = pathnameview_refresh; view_class->link = pathnameview_link; } static void pathnameview_edit_ok( iWindow *iwnd, void *client, iWindowNotifyFn nfn, void *sys ) { Filesel *filesel = FILESEL( iwnd ); Pathname *pathname = PATHNAME( client ); char *fname; if( (fname = filesel_get_filename( filesel )) ) { IM_SETSTR( pathname->value, fname ); classmodel_update( CLASSMODEL( pathname ) ); symbol_recalculate_all(); g_free( fname ); nfn( sys, IWINDOW_YES ); } else nfn( sys, IWINDOW_ERROR ); } static void pathnameview_clicked_cb( GtkWidget *widget, Pathnameview *pathnameview ) { Pathname *pathname = PATHNAME( VOBJECT( pathnameview )->iobject ); GtkWidget *filesel = filesel_new(); iwindow_set_title( IWINDOW( filesel ), "%s", IOBJECT( pathname )->caption ); filesel_set_flags( FILESEL( filesel ), TRUE, FALSE ); filesel_set_filetype( FILESEL( filesel ), filesel_type_any, 0 ); iwindow_set_parent( IWINDOW( filesel ), widget ); idialog_set_iobject( IDIALOG( filesel ), IOBJECT( pathname ) ); filesel_set_done( FILESEL( filesel ), pathnameview_edit_ok, pathname ); iwindow_build( IWINDOW( filesel ) ); filesel_set_filename( FILESEL( filesel ), pathname->value ); gtk_widget_show( GTK_WIDGET( filesel ) ); } static void pathnameview_init( Pathnameview *pathnameview ) { GtkWidget *hbox; #ifdef DEBUG printf( "pathnameview_init\n" ); #endif /*DEBUG*/ hbox = gtk_hbox_new( FALSE, 12 ); gtk_box_pack_start( GTK_BOX( pathnameview ), hbox, TRUE, FALSE, 0 ); pathnameview->label = gtk_label_new( "" ); gtk_misc_set_alignment( GTK_MISC( pathnameview->label ), 0, 0.5 ); gtk_misc_set_padding( GTK_MISC( pathnameview->label ), 2, 7 ); gtk_box_pack_start( GTK_BOX( hbox ), pathnameview->label, FALSE, FALSE, 2 ); pathnameview->button = gtk_button_new_with_label( "" ); gtk_box_pack_start( GTK_BOX( hbox ), pathnameview->button, TRUE, TRUE, 0 ); gtk_signal_connect( GTK_OBJECT( pathnameview->button ), "clicked", GTK_SIGNAL_FUNC( pathnameview_clicked_cb ), pathnameview ); set_tooltip( pathnameview->button, _( "Select a new file name" ) ); gtk_widget_show_all( GTK_WIDGET( hbox ) ); } GtkType pathnameview_get_type( void ) { static GtkType pathnameview_type = 0; if( !pathnameview_type ) { static const GtkTypeInfo info = { "Pathnameview", sizeof( Pathnameview ), sizeof( PathnameviewClass ), (GtkClassInitFunc) pathnameview_class_init, (GtkObjectInitFunc) pathnameview_init, /* reserved_1 */ NULL, /* reserved_2 */ NULL, (GtkClassInitFunc) NULL, }; pathnameview_type = gtk_type_unique( TYPE_GRAPHICVIEW, &info ); } return( pathnameview_type ); } View * pathnameview_new( void ) { Pathnameview *pathnameview = gtk_type_new( TYPE_PATHNAMEVIEW ); return( VIEW( pathnameview ) ); } nip2-8.7.0/src/workspacegroup.c0000644000175000017500000006012113224651032013323 00000000000000/* A set of workspaces loaded and saved from a ws file. */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #include "ip.h" static FilemodelClass *parent_class = NULL; void workspacegroup_set_load_type( Workspacegroup *wsg, WorkspacegroupLoadType load_type ) { wsg->load_type = load_type; } void workspacegroup_set_save_type( Workspacegroup *wsg, WorkspacegroupSaveType save_type ) { wsg->save_type = save_type; } Workspace * workspacegroup_get_workspace( Workspacegroup *wsg ) { if( ICONTAINER( wsg )->current ) return( WORKSPACE( ICONTAINER( wsg )->current ) ); if( ICONTAINER( wsg )->children ) return( WORKSPACE( ICONTAINER( wsg )->children->data ) ); return( NULL ); } static Workspace * workspacegroup_workspace_pick( Workspacegroup *wsg ) { Workspace *ws; if( (ws = workspacegroup_get_workspace( wsg )) ) return( ws ); if( ICONTAINER( wsg )->children ) { ws = WORKSPACE( ICONTAINER( wsg )->children->data ); icontainer_current( ICONTAINER( wsg ), ICONTAINER( ws ) ); return( ws ); } ws = workspace_new_blank( wsg ); (void) workspace_column_pick( ws ); return( ws ); } Workspace * workspacegroup_map( Workspacegroup *wsg, workspace_map_fn fn, void *a, void *b ) { return( (Workspace *) icontainer_map( ICONTAINER( wsg ), (icontainer_map_fn) fn, a, b ) ); } static void * workspacegroup_is_empty_sub( Workspace *ws, gboolean *empty ) { if( !workspace_is_empty( ws ) ) { *empty = FALSE; return( ws ); } return( NULL ); } gboolean workspacegroup_is_empty( Workspacegroup *wsg ) { gboolean empty; empty = TRUE; (void) workspacegroup_map( wsg, (workspace_map_fn) workspacegroup_is_empty_sub, &empty, NULL ); return( empty ); } static void * workspacegroup_get_n_objects_sub( Workspace *ws, int *n_objects ) { Compile *compile = ws->sym->expr->compile; *n_objects += g_slist_length( ICONTAINER( compile )->children ); return( NULL ); } int workspacegroup_get_n_objects( Workspacegroup *wsg ) { int n_objects; n_objects = 0; workspacegroup_map( wsg, (workspace_map_fn) workspacegroup_get_n_objects_sub, &n_objects, NULL ); return( n_objects ); } static void workspacegroup_dispose( GObject *gobject ) { Workspacegroup *wsg; g_return_if_fail( gobject != NULL ); g_return_if_fail( IS_WORKSPACEGROUP( gobject ) ); wsg = WORKSPACEGROUP( gobject ); #ifdef DEBUG printf( "workspacegroup_dispose %s\n", IOBJECT( wsg )->name ); #endif /*DEBUG*/ IM_FREEF( g_source_remove, wsg->autosave_timeout ); G_OBJECT_CLASS( parent_class )->dispose( gobject ); } static View * workspacegroup_view_new( Model *model, View *parent ) { return( workspacegroupview_new() ); } static void * workspacegroup_save_sub( iContainer *icontainer, void *a, void *b ) { Workspace *ws = WORKSPACE( icontainer ); xmlNode *xnode = (xmlNode *) a; Workspacegroup *wsg = WORKSPACEGROUP( b ); /* Only save all workspaces in save-all mode. */ if( wsg->save_type != WORKSPACEGROUP_SAVE_ALL && WORKSPACE( ICONTAINER( wsg )->current ) != ws ) return( NULL ); return( model_save( MODEL( ws ), xnode ) ); } static xmlNode * workspacegroup_save( Model *model, xmlNode *xnode ) { /* We normally chain up like this: * * xthis = MODEL_CLASS( parent_class )->save( model, xnode ) * * but that will make a workspacegroup holding our workspaces. Instead * we want to save all our workspaces directly to xnode with nothing * about us in there. * * See model_real_save(). */ if( icontainer_map( ICONTAINER( model ), workspacegroup_save_sub, xnode, model ) ) return( NULL ); return( xnode ); } /* Loops over xml trees follow this pattern. */ #define FOR_ALL_XML( ROOT, CHILD, CHILD_NAME ) { \ xmlNode *CHILD; \ \ for( CHILD = ROOT->children; CHILD; CHILD = CHILD->next ) { \ if( strcmp( (char *) CHILD->name, CHILD_NAME ) != 0 ) \ continue; #define FOR_ALL_XML_END } } static void workspacegroup_rename_workspace_node( Workspacegroup *wsg, ModelLoadState *state, xmlNode *xws ) { Workspaceroot *wsr = wsg->wsr; char name[MAX_STRSIZE]; char new_name[MAX_STRSIZE]; if( !get_sprop( xws, "name", name, MAX_STRSIZE ) ) return; strcpy( new_name, name ); while( compile_lookup( wsr->sym->expr->compile, new_name ) || model_loadstate_taken( state, new_name ) ) increment_name( new_name ); (void) set_sprop( xws, "name", new_name ); (void) model_loadstate_rename_new( state, name, new_name ); } /* Does a scrap of XML need compat defs? */ static gboolean workspacegroup_xml_needs_compat( ModelLoadState *state, xmlNode *xws, int *best_major, int *best_minor ) { int major; int minor; /* What version is the XML expecting? A combination of the version of * nip that saved the file, and any compat notes on the workspace XML */ if( !get_iprop( xws, "major", &major ) || !get_iprop( xws, "minor", &minor ) ) { /* Fall back to the version number in the xml header. */ major = state->major; minor = state->minor; } /* Find the best set of compat we have. */ return( workspace_have_compat( major, minor, best_major, best_minor ) ); } /* Load all workspaces into this wsg. */ static gboolean workspacegroup_load_new( Workspacegroup *wsg, ModelLoadState *state, xmlNode *xroot ) { Workspace *first_ws; /* Rename ... new names for any workspaces which clash. */ FOR_ALL_XML( xroot, xws, "Workspace" ) { workspacegroup_rename_workspace_node( wsg, state, xws ); } FOR_ALL_XML_END /* _front() the first ws we load. Needed for things like duplicate ws * and merge wses. */ first_ws = NULL; FOR_ALL_XML( xroot, xws, "Workspace" ) { char name[MAX_STRSIZE]; Workspace *ws; int major; int minor; column_set_offset( WORKSPACEVIEW_MARGIN_LEFT, WORKSPACEVIEW_MARGIN_TOP ); if( !get_sprop( xws, "name", name, FILENAME_MAX ) || !(ws = workspace_new( wsg, name )) ) return( FALSE ); if( workspacegroup_xml_needs_compat( state, xws, &major, &minor ) && !workspace_load_compat( ws, major, minor ) ) return( FALSE ); if( model_load( MODEL( ws ), state, MODEL( wsg ), xws ) ) return( FALSE ); if( !first_ws ) first_ws = ws; } FOR_ALL_XML_END if( first_ws ) icontainer_current( ICONTAINER( wsg ), ICONTAINER( first_ws ) ); return( TRUE ); } static void workspacegroup_rename_row_node( Workspace *ws, ModelLoadState *state, const char *col_name, xmlNode *xrow ) { char old_name[MAX_STRSIZE]; char new_name[MAX_STRSIZE]; if( !get_sprop( xrow, "name", old_name, MAX_STRSIZE ) ) return; im_snprintf( new_name, MAX_STRSIZE, "%s1", col_name ); while( compile_lookup( ws->sym->expr->compile, new_name ) || model_loadstate_taken( state, new_name ) ) increment_name( new_name ); (void) set_sprop( xrow, "name", new_name ); (void) model_loadstate_rename_new( state, old_name, new_name ); #ifdef DEBUG printf( "workspacegroup_rename_row_node: renaming " "'%s' to '%s'\n", old_name, new_name ); #endif } /* Rename column if there's one of that name in workspace. */ static void workspacegroup_rename_column_node( Workspacegroup *wsg, Workspace *ws, ModelLoadState *state, xmlNode *xcol ) { char name[MAX_STRSIZE]; char new_name[256]; if( !get_sprop( xcol, "name", name, MAX_STRSIZE ) ) return; im_strncpy( new_name, name, 256 ); while( workspace_column_find( ws, new_name ) || model_loadstate_column_taken( state, new_name ) ) workspace_column_name_new( ws, new_name ); if( strcmp( name, new_name ) != 0 ) { #ifdef DEBUG printf( "workspace_rename_column_node: renaming column " "%s to %s\n", name, new_name ); #endif /*DEBUG*/ (void) set_sprop( xcol, "name", new_name ); (void) model_loadstate_column_rename_new( state, name, new_name ); /* And allocate new names for all rows in the subcolumn. */ FOR_ALL_XML( xcol, xsub, "Subcolumn" ) { FOR_ALL_XML( xsub, xrow, "Row" ) { workspacegroup_rename_row_node( ws, state, new_name, xrow ); } FOR_ALL_XML_END } FOR_ALL_XML_END } } /* Load at column level ... rename columns which clash with * columns in the current workspace. Also look out for clashes * with columns we will load. */ static gboolean workspacegroup_load_columns( Workspacegroup *wsg, ModelLoadState *state, xmlNode *xroot ) { Workspace *ws = workspacegroup_workspace_pick( wsg ); int xml_major; int xml_minor; gboolean found; int ws_major; int ws_minor; /* Look for any compat problems. */ found = FALSE; FOR_ALL_XML( xroot, xws, "Workspace" ) { if( workspacegroup_xml_needs_compat( state, xws, &xml_major, &xml_minor ) ) { found = TRUE; break; } } FOR_ALL_XML_END workspace_get_version( ws, &ws_major, &ws_minor ); if( found && (xml_major != ws_major || xml_minor != ws_minor) ) { error_top( _( "Version mismatch." ) ); error_sub( _( "File \"%s\" needs version %d.%d. Merging " "into this tab may cause compatibility problems." ), state->filename, xml_major, xml_minor ); iwindow_alert( GTK_WIDGET( wsg->iwnd ), GTK_MESSAGE_INFO ); } /* Search all the columns we will load for their names and add rename * rules. */ FOR_ALL_XML( xroot, xws, "Workspace" ) { FOR_ALL_XML( xws, xcol, "Column" ) { workspacegroup_rename_column_node( wsg, ws, state, xcol ); } FOR_ALL_XML_END } FOR_ALL_XML_END /* Load those columns. */ FOR_ALL_XML( xroot, xws, "Workspace" ) { FOR_ALL_XML( xws, xcol, "Column" ) { if( !model_new_xml( state, MODEL( ws ), xcol ) ) return( FALSE ); } FOR_ALL_XML_END } FOR_ALL_XML_END return( TRUE ); } /* Load at row level ... merge into the current column. */ static gboolean workspacegroup_load_rows( Workspacegroup *wsg, ModelLoadState *state, xmlNode *xroot ) { Workspace *ws = workspacegroup_workspace_pick( wsg ); Column *col = workspace_column_pick( ws ); int xml_major; int xml_minor; gboolean found; int ws_major; int ws_minor; /* Look for any compat problems. */ found = FALSE; FOR_ALL_XML( xroot, xws, "Workspace" ) { if( workspacegroup_xml_needs_compat( state, xws, &xml_major, &xml_minor ) ) { found = TRUE; break; } } FOR_ALL_XML_END workspace_get_version( ws, &ws_major, &ws_minor ); if( found && (xml_major != ws_major || xml_minor != ws_minor) ) { error_top( _( "Version mismatch." ) ); error_sub( _( "File \"%s\" needs version %d.%d. Merging " "into this tab may cause compatibility problems." ), state->filename, xml_major, xml_minor ); iwindow_alert( GTK_WIDGET( wsg->iwnd ), GTK_MESSAGE_INFO ); } FOR_ALL_XML( xroot, xws, "Workspace" ) { FOR_ALL_XML( xws, xcol, "Column" ) { FOR_ALL_XML( xcol, xsub, "Subcolumn" ) { FOR_ALL_XML( xsub, xrow, "Row" ) { workspacegroup_rename_row_node( ws, state, IOBJECT( col )->name, xrow ); } FOR_ALL_XML_END } FOR_ALL_XML_END } FOR_ALL_XML_END } FOR_ALL_XML_END FOR_ALL_XML( xroot, xws, "Workspace" ) { FOR_ALL_XML( xws, xcol, "Column" ) { FOR_ALL_XML( xcol, xsub, "Subcolumn" ) { FOR_ALL_XML( xsub, xrow, "Row" ) { if( !model_new_xml( state, MODEL( col->scol ), xrow ) ) return( FALSE ); } FOR_ALL_XML_END } FOR_ALL_XML_END } FOR_ALL_XML_END } FOR_ALL_XML_END return( TRUE ); } static gboolean workspacegroup_top_load( Filemodel *filemodel, ModelLoadState *state, Model *parent, xmlNode *xroot ) { Workspacegroup *wsg = WORKSPACEGROUP( filemodel ); xmlNode *xnode; char name[FILENAME_MAX]; #ifdef DEBUG printf( "workspacegroup_top_load: from %s\n", state->filename ); #endif /*DEBUG*/ /* The top node should be the first workspace. Get the filename this * workspace was saved as so we can work out how to rewrite embedded * filenames. * * The filename field can be missing. */ if( (xnode = get_node( xroot, "Workspace" )) && get_sprop( xnode, "filename", name, FILENAME_MAX ) ) { char *new_dir; /* The old filename could be non-native, so we must rewrite * to native form first so g_path_get_dirname() can work. */ path_compact( name ); state->old_dir = g_path_get_dirname( name ); new_dir = g_path_get_dirname( state->filename_user ); path_rewrite_add( state->old_dir, new_dir, FALSE ); g_free( new_dir ); } switch( wsg->load_type ) { case WORKSPACEGROUP_LOAD_NEW: if( !workspacegroup_load_new( wsg, state, xroot ) ) return( FALSE ); break; case WORKSPACEGROUP_LOAD_COLUMNS: if( !workspacegroup_load_columns( wsg, state, xroot ) ) return( FALSE ); break; case WORKSPACEGROUP_LOAD_ROWS: if( !workspacegroup_load_rows( wsg, state, xroot ) ) return( FALSE ); break; default: g_assert( FALSE ); } return( FILEMODEL_CLASS( parent_class )->top_load( filemodel, state, parent, xnode ) ); } static gboolean workspacegroup_top_save( Filemodel *filemodel, const char *filename ) { gboolean result; #ifdef DEBUG printf( "workspacegroup_top_save: %s to %s\n", NN( IOBJECT( filemodel )->name ), filename ); #endif /*DEBUG*/ if( (result = FILEMODEL_CLASS( parent_class )-> top_save( filemodel, filename )) ) /* This will add save-as files to recent too. Don't note * auto_load on recent, since it won't have been loaded by the * user. */ if( !filemodel->auto_load ) mainw_recent_add( &mainw_recent_workspace, filename ); return( result ); } /* Backup the last WS_RETAIN workspaces. */ #define WS_RETAIN (10) /* Array of names of workspace files we are keeping. */ static char *retain_files[WS_RETAIN] = { NULL }; /* On safe exit, remove all ws checkmarks. */ void workspacegroup_autosave_clean( void ) { int i; for( i = 0; i < WS_RETAIN; i++ ) { if( retain_files[i] ) { unlinkf( "%s", retain_files[i] ); IM_FREE( retain_files[i] ); } } } /* Save the workspace to one of our temp files. */ static gboolean workspacegroup_checkmark_timeout( Workspacegroup *wsg ) { /* The next one we allocate. */ static int retain_next = 0; wsg->autosave_timeout = 0; if( !AUTO_WS_SAVE ) return( FALSE ); /* Don't backup auto loaded workspace (eg. preferences). These are * system things and don't need it. */ if( FILEMODEL( wsg )->auto_load ) return( FALSE ); /* Do we have a name for this retain file? */ if( !retain_files[retain_next] ) { char filename[FILENAME_MAX]; /* No name yet - make one up. */ if( !temp_name( filename, "ws" ) ) return( FALSE ); retain_files[retain_next] = im_strdup( NULL, filename ); } if( !filemodel_top_save( FILEMODEL( wsg ), retain_files[retain_next] ) ) return( FALSE ); retain_next = (retain_next + 1) % WS_RETAIN; return( FALSE ); } /* Save the workspace to one of our temp files. Don't save directly (pretty * slow), instead set a timeout and save when we're quiet for >1s. */ static void workspacegroup_checkmark( Workspacegroup *wsg ) { if( !AUTO_WS_SAVE ) return; if( FILEMODEL( wsg )->auto_load ) return; IM_FREEF( g_source_remove, wsg->autosave_timeout ); wsg->autosave_timeout = g_timeout_add( 1000, (GSourceFunc) workspacegroup_checkmark_timeout, wsg ); } typedef struct { /* Best so far filename. */ char filename[FILENAME_MAX]; /* Best-so-far file date. */ time_t time; } AutoRecover; /* This file any better than the previous best candidate? Subfn of below. */ static void * workspacegroup_test_file( const char *name, void *a, void *b, void *c ) { AutoRecover *recover = (AutoRecover *) a; char buf[FILENAME_MAX]; time_t time; int i; im_strncpy( buf, name, FILENAME_MAX ); path_expand( buf ); for( i = 0; i < WS_RETAIN; i++ ) if( retain_files[i] && strcmp( buf, retain_files[i] ) == 0 ) return( NULL ); if( !(time = mtime( "%s", buf )) ) return( NULL ); if( recover->time > 0 && time < recover->time ) return( NULL ); strcpy( recover->filename, buf ); recover->time = time; return( NULL ); } /* Search for the most recent "*.ws" file * in the tmp area owned by us, with a size > 0, that's not in our * retain_files[] set. */ char * workspacegroup_autosave_recover( void ) { AutoRecover recover; strcpy( recover.filename, "" ); recover.time = 0; (void) path_map_dir( PATH_TMP, "*.ws", (path_map_fn) workspacegroup_test_file, &recover ); if( !recover.time ) return( NULL ); return( g_strdup( recover.filename ) ); } static void workspacegroup_set_modified( Filemodel *filemodel, gboolean modified ) { Workspacegroup *wsg = WORKSPACEGROUP( filemodel ); workspacegroup_checkmark( wsg ); FILEMODEL_CLASS( parent_class )->set_modified( filemodel, modified ); } static void workspacegroup_class_init( WorkspacegroupClass *class ) { GObjectClass *gobject_class = (GObjectClass *) class; iObjectClass *iobject_class = (iObjectClass *) class; ModelClass *model_class = (ModelClass *) class; FilemodelClass *filemodel_class = (FilemodelClass *) class; parent_class = g_type_class_peek_parent( class ); /* Create signals. */ /* Init methods. */ gobject_class->dispose = workspacegroup_dispose; iobject_class->user_name = _( "Workspace" ); /* ->load() is done by workspace_top_load(). */ model_class->view_new = workspacegroup_view_new; model_class->save = workspacegroup_save; filemodel_class->filetype = filesel_type_workspace; filemodel_class->top_load = workspacegroup_top_load; filemodel_class->top_save = workspacegroup_top_save; filemodel_class->set_modified = workspacegroup_set_modified; } static void workspacegroup_init( Workspacegroup *wsg ) { } GType workspacegroup_get_type( void ) { static GType type = 0; if( !type ) { static const GTypeInfo info = { sizeof( WorkspacegroupClass ), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) workspacegroup_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof( Workspacegroup ), 32, /* n_preallocs */ (GInstanceInitFunc) workspacegroup_init, }; type = g_type_register_static( TYPE_FILEMODEL, "Workspacegroup", &info, 0 ); } return( type ); } static void workspacegroup_link( Workspacegroup *wsg, Workspaceroot *wsr ) { icontainer_child_add( ICONTAINER( wsr ), ICONTAINER( wsg ), -1 ); wsg->wsr = wsr; filemodel_register( FILEMODEL( wsg ) ); } Workspacegroup * workspacegroup_new( Workspaceroot *wsr ) { Workspacegroup *wsg; #ifdef DEBUG printf( "workspacegroup_new:\n" ); #endif /*DEBUG*/ wsg = WORKSPACEGROUP( g_object_new( TYPE_WORKSPACEGROUP, NULL ) ); /* Changed later. */ iobject_set( IOBJECT( wsg ), "untitled", _( "Empty workspace" ) ); workspacegroup_link( wsg, wsr ); filemodel_set_modified( FILEMODEL( wsg ), FALSE ); return( wsg ); } /* Make the blank workspacegroup we present the user with (in the absence of * anything else). */ Workspacegroup * workspacegroup_new_blank( Workspaceroot *wsr, const char *name ) { Workspacegroup *wsg; if( !(wsg = workspacegroup_new( wsr )) ) return( NULL ); iobject_set( IOBJECT( wsg ), name, NULL ); (void) workspacegroup_workspace_pick( wsg ); filemodel_set_modified( FILEMODEL( wsg ), FALSE ); return( wsg ); } Workspacegroup * workspacegroup_new_filename( Workspaceroot *wsr, const char *filename ) { Workspacegroup *wsg; char name[FILENAME_MAX]; if( !(wsg = workspacegroup_new( wsr )) ) return( NULL ); name_from_filename( filename, name ); iobject_set( IOBJECT( wsg ), name, _( "Default empty workspace" ) ); filemodel_set_filename( FILEMODEL( wsg ), filename ); filemodel_set_modified( FILEMODEL( wsg ), FALSE ); return( wsg ); } /* Load a file as a workspacegroup. */ Workspacegroup * workspacegroup_new_from_file( Workspaceroot *wsr, const char *filename, const char *filename_user ) { Workspacegroup *wsg; if( !(wsg = workspacegroup_new( wsr )) ) return( NULL ); workspacegroup_set_load_type( wsg, WORKSPACEGROUP_LOAD_NEW ); if( !filemodel_load_all( FILEMODEL( wsg ), MODEL( wsr ), filename, filename_user ) ) return( NULL ); filemodel_set_filename( FILEMODEL( wsg ), filename_user ); filemodel_set_modified( FILEMODEL( wsg ), FALSE ); if( filename_user ) { char name[FILENAME_MAX]; name_from_filename( filename_user, name ); iobject_set( IOBJECT( wsg ), name, NULL ); } else iobject_set( IOBJECT( wsg ), "untitled", NULL ); return( wsg ); } /* New workspacegroup from a file. */ Workspacegroup * workspacegroup_new_from_openfile( Workspaceroot *wsr, iOpenFile *of ) { Workspacegroup *wsg; char name[FILENAME_MAX]; #ifdef DEBUG printf( "workspacegroup_new_from_openfile: %s\n", of->fname ); #endif /*DEBUG*/ if( !(wsg = workspacegroup_new( wsr )) ) return( NULL ); workspacegroup_set_load_type( wsg, WORKSPACEGROUP_LOAD_NEW ); if( !filemodel_load_all_openfile( FILEMODEL( wsg ), MODEL( wsr ), of ) ) { g_object_unref( G_OBJECT( wsg ) ); return( NULL ); } filemodel_set_filename( FILEMODEL( wsg ), of->fname ); filemodel_set_modified( FILEMODEL( wsg ), FALSE ); name_from_filename( of->fname, name ); iobject_set( IOBJECT( wsg ), name, NULL ); return( wsg ); } /* Merge into workspacegroup as a set of new workspaces. */ gboolean workspacegroup_merge_workspaces( Workspacegroup *wsg, const char *filename ) { workspacegroup_set_load_type( wsg, WORKSPACEGROUP_LOAD_NEW ); if( !filemodel_load_all( FILEMODEL( wsg ), MODEL( wsg->wsr ), filename, NULL ) ) return( FALSE ); filemodel_set_modified( FILEMODEL( wsg ), TRUE ); return( TRUE ); } /* Merge into the current workspace as a set of columns. */ gboolean workspacegroup_merge_columns( Workspacegroup *wsg, const char *filename ) { Workspace *ws; if( (ws = workspacegroup_get_workspace( wsg )) ) /* We'll do a layout after load, so just load to a huge x and * we'll be OK. */ column_set_offset( 2 * IM_RECT_RIGHT( &ws->area ) + WORKSPACEVIEW_MARGIN_LEFT, WORKSPACEVIEW_MARGIN_TOP ); workspacegroup_set_load_type( wsg, WORKSPACEGROUP_LOAD_COLUMNS ); if( !filemodel_load_all( FILEMODEL( wsg ), MODEL( wsg->wsr ), filename, NULL ) ) return( FALSE ); filemodel_set_modified( FILEMODEL( wsg ), TRUE ); return( TRUE ); } /* Merge into the current workspace as a set of rows. */ gboolean workspacegroup_merge_rows( Workspacegroup *wsg, const char *filename ) { workspacegroup_set_load_type( wsg, WORKSPACEGROUP_LOAD_ROWS ); if( !filemodel_load_all( FILEMODEL( wsg ), MODEL( wsg->wsr ), filename, NULL ) ) return( FALSE ); filemodel_set_modified( FILEMODEL( wsg ), TRUE ); return( TRUE ); } /* Save just the selected objects in the current workspace. */ gboolean workspacegroup_save_selected( Workspacegroup *wsg, const char *filename ) { workspacegroup_set_save_type( wsg, WORKSPACEGROUP_SAVE_SELECTED ); if( !filemodel_top_save( FILEMODEL( wsg ), filename ) ) { unlinkf( "%s", filename ); return( FALSE ); } return( TRUE ); } /* Save just the current workspace. */ gboolean workspacegroup_save_current( Workspacegroup *wsg, const char *filename ) { workspacegroup_set_save_type( wsg, WORKSPACEGROUP_SAVE_WORKSPACE ); if( !filemodel_top_save( FILEMODEL( wsg ), filename ) ) { unlinkf( "%s", filename ); return( FALSE ); } return( TRUE ); } /* Save an entire workspacegroup. */ gboolean workspacegroup_save_all( Workspacegroup *wsg, const char *filename ) { workspacegroup_set_save_type( wsg, WORKSPACEGROUP_SAVE_ALL ); if( !filemodel_top_save( FILEMODEL( wsg ), filename ) ) { unlinkf( "%s", filename ); return( FALSE ); } return( TRUE ); } Workspacegroup * workspacegroup_duplicate( Workspacegroup *wsg ) { Workspaceroot *wsr = wsg->wsr; Workspacegroup *new_wsg; char filename[FILENAME_MAX]; if( !temp_name( filename, "ws" ) || !workspacegroup_save_all( wsg, filename ) ) return( NULL ); if( !(new_wsg = workspacegroup_new_from_file( wsr, filename, FILEMODEL( wsg )->filename )) ) { unlinkf( "%s", filename ); return( NULL ); } unlinkf( "%s", filename ); return( new_wsg ); } nip2-8.7.0/src/trace.h0000644000175000017500000000452613224651032011362 00000000000000/* Decls for trace.c ... a trace window */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_TRACE (trace_get_type()) #define TRACE( obj ) (GTK_CHECK_CAST( (obj), TYPE_TRACE, Trace )) #define TRACE_CLASS( klass ) \ (GTK_CHECK_CLASS_CAST( (klass), TYPE_TRACE, TraceClass )) #define IS_TRACE( obj ) (GTK_CHECK_TYPE( (obj), TYPE_TRACE )) #define IS_TRACE_CLASS( klass ) \ (GTK_CHECK_CLASS_TYPE( (klass), TYPE_TRACE )) /* The various things we can trace. */ typedef enum { TRACE_BUILTIN = 1, /* Calls to built in functions */ TRACE_OPERATOR = 2, /* +, -, etc. */ TRACE_CLASS_NEW = 4, /* Class construction */ TRACE_VIPS = 8 /* VIPS operations */ } TraceFlags; struct _Trace { Log parent_class; TraceFlags flags; }; typedef struct _TraceClass { LogClass parent_class; /* My methods. */ } TraceClass; extern TraceFlags trace_flags; void trace_block( void ); void trace_unblock( void ); void trace_reset( void ); void trace_check( void ); VipsBuf *trace_push( void ); void trace_pop( void ); VipsBuf *trace_current( void ); void trace_pop_to( int n ); int trace_get_mark( void ); GtkType trace_get_type( void ); Trace *trace_new( void ); void trace_text( TraceFlags flags, const char *fmt, ... ) __attribute__((format(printf, 2, 3))); void trace_pelement( PElement *pe ); void trace_node( HeapNode *node ); void trace_args( HeapNode **arg, int n ); void trace_binop( Compile *compile, PElement *left, BinOp bop, PElement *right ); void trace_uop( UnOp uop, PElement *arg ); void trace_result( TraceFlags flags, PElement *out ); nip2-8.7.0/src/expression.c0000644000175000017500000001060013224651032012444 00000000000000/* an editable expression */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #include "ip.h" static ClassmodelClass *parent_class = NULL; /* Sub fn. of below. */ static void * expression_get_itext_sub( Row *row ) { Model *itext; /* FIXME ... yuk, map + strcmp could make subcolumn indexed by symbol name? probably not worth it */ if( row->sym && strcmp( IOBJECT( row->sym )->name, MEMBER_EXPR ) == 0 && row->child_rhs && (itext = row->child_rhs->itext) ) return( itext ); return( NULL ); } /* Look down our RHS and try to grab the itext for our MEMBER_EXPR. * Expressionview presents this as the editable formula. * * We can't call the editable member "value", since this imples (elsewhere in * nip anway) an unboxed value. Our editable member could also be boxed .. so * have a different name of reduce confusion a little. Also means we can * define an Expression which inherits from expr. */ iText * expression_get_itext( Expression *expression ) { Row *row = HEAPMODEL( expression )->row; if( row->child_rhs && row->child_rhs->scol ) return( (iText *) subcolumn_map( SUBCOLUMN( row->child_rhs->scol ), (row_map_fn) expression_get_itext_sub, NULL, NULL ) ); return( NULL ); } static View * expression_view_new( Model *model, View *parent ) { return( expressionview_new() ); } static xmlNode * expression_save( Model *model, xmlNode *xnode ) { xmlNode *xthis; if( !(xthis = MODEL_CLASS( parent_class )->save( model, xnode )) ) return( NULL ); if( !set_sprop( xthis, "caption", IOBJECT( model )->caption ) ) return( NULL ); return( xthis ); } static gboolean expression_load( Model *model, ModelLoadState *state, Model *parent, xmlNode *xnode ) { char caption[MAX_STRSIZE]; g_assert( IS_RHS( parent ) ); if( get_sprop( xnode, "caption", caption, MAX_STRSIZE ) ) iobject_set( IOBJECT( model ), NULL, caption ); return( MODEL_CLASS( parent_class )->load( model, state, parent, xnode ) ); } /* Update Expression from heap. */ static gboolean expression_class_get( Classmodel *classmodel, PElement *root ) { char caption[MAX_STRSIZE]; #ifdef DEBUG printf( "expression_class_get: " ); row_name_print( HEAPMODEL( classmodel )->row ); printf( "\n" ); #endif /*DEBUG*/ if( !class_get_member_string( root, MEMBER_CAPTION, caption, MAX_STRSIZE ) ) return( FALSE ); iobject_set( IOBJECT( classmodel ), NULL, caption ); return( TRUE ); } static void expression_class_init( ExpressionClass *class ) { ModelClass *model_class = (ModelClass *) class; ClassmodelClass *classmodel_class = (ClassmodelClass *) class; parent_class = g_type_class_peek_parent( class ); /* Create signals. */ /* Init methods. */ model_class->view_new = expression_view_new; model_class->save = expression_save; model_class->load = expression_load; classmodel_class->class_get = expression_class_get; /* Static init. */ model_register_loadable( MODEL_CLASS( class ) ); } static void expression_init( Expression *expression ) { iobject_set( IOBJECT( expression ), CLASS_EXPRESSION, NULL ); } GType expression_get_type( void ) { static GType type = 0; if( !type ) { static const GTypeInfo info = { sizeof( ExpressionClass ), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) expression_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof( Expression ), 32, /* n_pexpressionlocs */ (GInstanceInitFunc) expression_init, }; type = g_type_register_static( TYPE_CLASSMODEL, "Expression", &info, 0 ); } return( type ); } nip2-8.7.0/src/log.h0000644000175000017500000000372013224651032011040 00000000000000/* Abstract base class for a log window: errors, link report, log, etc. */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_LOG (log_get_type()) #define LOG( obj ) (G_TYPE_CHECK_INSTANCE_CAST( (obj), TYPE_LOG, Log )) #define LOG_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_CAST( (klass), TYPE_LOG, LogClass)) #define IS_LOG( obj ) (G_TYPE_CHECK_INSTANCE_TYPE( (obj), TYPE_LOG )) #define IS_LOG_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_TYPE( (klass), TYPE_LOG )) #define LOG_GET_CLASS( obj ) \ (G_TYPE_INSTANCE_GET_CLASS( (obj), TYPE_LOG, LogClass )) struct _Log { iWindow parent_class; GtkWidget *view; /* The textview we use to show the log */ }; typedef struct _LogClass { iWindowClass parent_class; /* How we want the menu bar built. */ GtkActionEntry *actions; int n_actions; GtkToggleActionEntry *toggle_actions; int n_toggle_actions; const char *action_name; const char *ui_description; const char *menu_bar_name; } LogClass; GtkType log_get_type( void ); void log_clear_action_cb( GtkAction *action, Log *log ); void log_text( Log *log, const char *buf ); void log_textf( Log *log, const char *fmt, ... ) __attribute__((format(printf, 2, 3))); nip2-8.7.0/src/toolkitgroup.c0000644000175000017500000000672013224651032013017 00000000000000/* Group toolkitgroup files together. */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #include "ip.h" static ModelClass *parent_class = NULL; Toolkit * toolkitgroup_map( Toolkitgroup *kitg, toolkit_map_fn fn, void *a, void *b ) { return( (Toolkit *) icontainer_map( ICONTAINER( kitg ), (icontainer_map_fn) fn, a, b ) ); } static void toolkitgroup_changed( iObject *iobject ) { #ifdef DEBUG g_print( "toolkitgroup_changed: " ); iobject_print( iobject ); #endif /*DEBUG*/ IOBJECT_CLASS( parent_class )->changed( iobject ); } static View * toolkitgroup_view_new( Model *model, View *parent ) { return( toolkitgroupview_new() ); } static void toolkitgroup_class_init( ToolkitgroupClass *class ) { iObjectClass *iobject_class = (iObjectClass *) class; ModelClass *model_class = (ModelClass *) class; parent_class = g_type_class_peek_parent( class ); /* Create signals. */ /* Init methods. */ iobject_class->changed = toolkitgroup_changed; model_class->view_new = toolkitgroup_view_new; } static void toolkitgroup_init( Toolkitgroup *kitg ) { } GType toolkitgroup_get_type( void ) { static GType type = 0; if( !type ) { static const GTypeInfo info = { sizeof( ToolkitgroupClass ), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) toolkitgroup_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof( Toolkitgroup ), 32, /* n_preallocs */ (GInstanceInitFunc) toolkitgroup_init, }; type = g_type_register_static( TYPE_MODEL, "Toolkitgroup", &info, 0 ); } return( type ); } static void toolkitgroup_link( Toolkitgroup *kitg, Symbol *root ) { char buf[256]; g_assert( root ); kitg->root = root; im_snprintf( buf, 256, _( "Toolkits for %s" ), IOBJECT( root )->name ); iobject_set( IOBJECT( kitg ), buf, NULL ); } Toolkitgroup * toolkitgroup_new( Symbol *root ) { Toolkitgroup *kitg; kitg = TOOLKITGROUP( g_object_new( TYPE_TOOLKITGROUP, NULL ) ); toolkitgroup_link( kitg, root ); return( kitg ); } /* Need a special sort function ... put kits not being displayed at the end so * they don't mess up the numbering of the visible kits. */ static gint toolkitgroup_sort_compare( Model *a, Model *b ) { if( !a->display && b->display ) return( 1 ); if( a->display && !b->display ) return( -1 ); return( strcasecmp( IOBJECT( a )->name, IOBJECT( b )->name ) ); } void toolkitgroup_sort( Toolkitgroup *kitg ) { iContainer *icontainer = ICONTAINER( kitg ); icontainer->children = g_slist_sort( icontainer->children, (GCompareFunc) toolkitgroup_sort_compare ); icontainer_pos_renumber( icontainer ); } nip2-8.7.0/src/imageinfo.h0000644000175000017500000002054313224651032012217 00000000000000/* Decls for imageinfo.c */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* Meta we attach for the filename we loaded from. */ #define ORIGINAL_FILENAME "original-filename" /* Group imageinfo with this. */ #define TYPE_IMAGEINFOGROUP (imageinfogroup_get_type()) #define IMAGEINFOGROUP( obj ) \ (G_TYPE_CHECK_INSTANCE_CAST( (obj), \ TYPE_IMAGEINFOGROUP, Imageinfogroup )) #define IMAGEINFOGROUP_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_CAST( (klass), \ TYPE_IMAGEINFOGROUP, ImageinfogroupClass)) #define IS_IMAGEINFOGROUP( obj ) \ (G_TYPE_CHECK_INSTANCE_TYPE( (obj), TYPE_IMAGEINFOGROUP )) #define IS_IMAGEINFOGROUP_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_TYPE( (klass), TYPE_IMAGEINFOGROUP )) #define IMAGEINFOGROUP_GET_CLASS( obj ) \ (G_TYPE_INSTANCE_GET_CLASS( (obj), \ TYPE_IMAGEINFOGROUP, ImageinfogroupClass )) typedef struct _Imageinfogroup { iContainer parent_object; /* Hash from filename to list of imageinfo. We can't use the * icontainer hash, since our filenames are not unique (we can have * the same file loaded several times, if some other application is * changing our files behind our back). */ GHashTable *filename_hash; } Imageinfogroup; typedef struct _ImageinfogroupClass { iContainerClass parent_class; } ImageinfogroupClass; GType imageinfogroup_get_type( void ); Imageinfogroup *imageinfogroup_new( void ); /* An image. */ #define TYPE_IMAGEINFO (imageinfo_get_type()) #define IMAGEINFO( obj ) \ (G_TYPE_CHECK_INSTANCE_CAST( (obj), TYPE_IMAGEINFO, Imageinfo )) #define IMAGEINFO_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_CAST( (klass), TYPE_IMAGEINFO, ImageinfoClass)) #define IS_IMAGEINFO( obj ) \ (G_TYPE_CHECK_INSTANCE_TYPE( (obj), TYPE_IMAGEINFO )) #define IS_IMAGEINFO_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_TYPE( (klass), TYPE_IMAGEINFO )) #define IMAGEINFO_GET_CLASS( obj ) \ (G_TYPE_INSTANCE_GET_CLASS( (obj), TYPE_IMAGEINFO, ImageinfoClass )) /* A fragment of an undo buffer. */ typedef struct _Undofragment { struct _Undobuffer *undo; /* Main undo area */ IMAGE *im; /* Old area */ Rect pos; /* Where we took it from */ } Undofragment; /* Hold a list of the above, a bounding box for this list and a link back to * the main imageinfo. */ typedef struct _Undobuffer { struct _Imageinfo *imageinfo; /* Main paint area */ GSList *frags; /* List of paint fragments */ Rect bbox; /* Bounding box for frags */ } Undobuffer; /* Attach one of these to any IMAGE we monitor. It has the same lifetime as * the IMAGE and gets zapped by the imageinfo on dispose. This lets us spot * IMAGE events after the holding Imageinfo has gone. */ typedef struct _Imageinfoproxy { IMAGE *im; Imageinfo *imageinfo; } Imageinfoproxy; /* A VIPS image wrapped up nicely. */ struct _Imageinfo { Managed parent_object; IMAGE *im; /* Image we manage, LUT if delayed */ IMAGE *mapped_im; /* Cache image mapped-thru-lut here */ IMAGE *identity_lut; /* For base images, keep an id lut if poss */ Imageinfo *underlying; /* If we're a LUT, the image we are a LUT of */ Imageinfoproxy *proxy; /* Proxy for IMAGE callbacks */ gboolean dfile; /* delete_file on final close */ char *delete_filename; /* and the file we delete */ gboolean from_file; /* Set if ->name is a user file */ time_t mtime; /* What mtime was when we loaded this file */ /* Exprs which are thought to have this image as their value. See * expr_value_new(). */ GSList *exprs; /* Set if we've checked with the user that it's OK to paint on this * imageinfo. */ gboolean ok_to_paint; /* Undo/redo buffers. */ GSList *undo; /* List of undo buffers */ GSList *redo; /* List of redo buffers */ Undobuffer *cundo; /* Current buffer */ /* Have we attached progress stuff to this ii? */ gboolean monitored; /* If we're from a file, the timestamp on the file we loaded from ... * used to spot changes. */ time_t check_mtime; guint check_tid; }; typedef struct _ImageinfoClass { ManagedClass parent_class; /* An area of the screen needs repainting. This can happen for regions * being dragged, for example, and doesn't always mean pixels have * changed. */ void (*area_changed)( Imageinfo *, Rect * ); /* An area of the image has been paintboxed ... invalidate caches and * trigger area_changed. */ void (*area_painted)( Imageinfo *, Rect * ); /* Our IMAGE* has signaled "invalidate". This can happen indirectly: * if we paint on an image, im_invalidate() will trigger on that image * and all derived images. */ void (*invalidate)( Imageinfo * ); /* Update undo/redo button sensitivities. */ void (*undo_changed)( Imageinfo * ); /* The underlying file has changed ... higher levels should try to * reload. */ void (*file_changed)( Imageinfo * ); } ImageinfoClass; void *imageinfo_area_changed( Imageinfo *imageinfo, Rect *dirty ); void *imageinfo_area_painted( Imageinfo *imageinfo, Rect *dirty ); void *imageinfo_expr_remove( Expr *expr, Imageinfo *imageinfo ); void imageinfo_expr_add( Imageinfo *imageinfo, Expr *expr ); GSList *imageinfo_expr_which( Imageinfo *imageinfo ); IMAGE *imageinfo_get_underlying( Imageinfo *imageinfo ); GType imageinfo_get_type( void ); Imageinfo *imageinfo_new( Imageinfogroup *imageinfogroup, Heap *heap, IMAGE *im, const char *name ); Imageinfo *imageinfo_new_temp( Imageinfogroup *imageinfogroup, Heap *heap, const char *name, const char *mode ); Imageinfo *imageinfo_new_from_pixbuf( Imageinfogroup *imageinfogroup, Heap *heap, GdkPixbuf *pixbuf ); void imageinfo_set_underlying( Imageinfo *top_imageinfo, Imageinfo *imageinfo ); gboolean imageinfo_is_from_file( Imageinfo *imageinfo ); Imageinfo *imageinfo_new_input( Imageinfogroup *imageinfogroup, GtkWidget *parent, Heap *heap, const char *name ); IMAGE *imageinfo_get( gboolean use_lut, Imageinfo *imageinfo ); gboolean imageinfo_same_underlying( Imageinfo *imageinfo[], int n ); gboolean imageinfo_write( Imageinfo *imageinfo, const char *filename ); gboolean imageinfo_check_paintable( Imageinfo *imageinfo, GtkWidget *parent, iWindowNotifyFn nfn, void *sys ); void imageinfo_note( Symbol *sym, Imageinfo *imageinfo ); void imageinfo_forget( Symbol *sym, Imageinfo *imageinfo ); GSList *imageinfo_which( Imageinfo *im ); void imageinfo_make_sub( Imageinfo *out, int n, Imageinfo **in ); void imageinfo_mark( Imageinfo *imageinfo ); Imageinfo *imageinfo_sym_image( Symbol *sym ); void imageinfo_undo_mark( Imageinfo *imageinfo ); gboolean imageinfo_undo( Imageinfo *imageinfo ); gboolean imageinfo_redo( Imageinfo *imageinfo ); void imageinfo_undo_clear( Imageinfo *imageinfo ); gboolean imageinfo_paint_line( Imageinfo *imageinfo, Imageinfo *ink, Imageinfo *mask, int x1, int y1, int x2, int y2 ); gboolean imageinfo_paint_flood( Imageinfo *imageinfo, Imageinfo *ink, int x, int y, gboolean blob ); gboolean imageinfo_paint_smudge( Imageinfo *imageinfo, Rect *oper, int x1, int y1, int x2, int y2 ); gboolean imageinfo_paint_dropper( Imageinfo *imageinfo, Imageinfo *ink, int x, int iy ); gboolean imageinfo_paint_rect( Imageinfo *imageinfo, Imageinfo *ink, Rect *area ); gboolean imageinfo_paint_text( Imageinfo *imageinfo, const char *font_name, const char *text, Rect *tarea ); gboolean imageinfo_paint_nib( Imageinfo *imageinfo, int nib_radius ); gboolean imageinfo_paint_mask( Imageinfo *imageinfo, Imageinfo *ink, Imageinfo *mask, int x, int y ); void imageinfo_to_text( Imageinfo *imageinfo, VipsBuf *buf ); gboolean imageinfo_from_text( Imageinfo *imageinfo, const char *text ); void imageinfo_to_rgb( Imageinfo *imageinfo, double *rgb ); void imageinfo_from_rgb( Imageinfo *imageinfo, double *rgb ); void imageinfo_colour_edit( GtkWidget *parent, Imageinfo *imageinfo ); nip2-8.7.0/src/dump.c0000644000175000017500000004430013224651032011216 00000000000000/* Prettyprint various things for debugging. */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #include "ip.h" /* A lot of this file is just for debugging. Uncomment to enable all the * debugging code. #define DEBUG */ /* Dump a binary operator. */ char * decode_BinOp( BinOp op ) { switch( op ) { case BI_NONE: return( "(none)" ); case BI_ADD: return( "+" ); case BI_SUB: return( "-" ); case BI_POW: return( "**" ); case BI_REM: return( "%" ); case BI_LSHIFT: return( "<<" ); case BI_RSHIFT: return( ">>" ); case BI_SELECT: return( "?" ); case BI_DIV: return( "/" ); case BI_JOIN: return( "++" ); case BI_COMMA: return( "," ); case BI_DOT: return( "." ); case BI_MUL: return( "*" ); case BI_LAND: return( "&&" ); case BI_LOR: return( "||" ); case BI_BAND: return( "&" ); case BI_BOR: return( "|" ); case BI_EOR: return( "^" ); case BI_EQ: return( "==" ); case BI_NOTEQ: return( "!=" ); case BI_PEQ: return( "===" ); case BI_PNOTEQ: return( "!==" ); case BI_LESS: return( "<" ); case BI_LESSEQ: return( "<=" ); case BI_MORE: return( ">" ); case BI_MOREEQ: return( ">=" ); case BI_IF: return( "if_then_else" ); case BI_CONS: return( ":" ); default: g_assert( FALSE ); /* Keep gcc happy. */ return( NULL ); } } /* Dump a unary operator. */ char * decode_UnOp( UnOp op ) { switch( op ) { case UN_NONE: return( "(none)" ); case UN_CSCHAR: return( "(signed char)" ); case UN_CUCHAR: return( "(unsigned char)" ); case UN_CSSHORT: return( "(signed short)" ); case UN_CUSHORT: return( "(unsigned short)" ); case UN_CSINT: return( "(signed int)" ); case UN_CUINT: return( "(unsigned int)" ); case UN_CFLOAT: return( "(float)" ); case UN_CDOUBLE: return( "(double)" ); case UN_CCOMPLEX: return( "(complex)" ); case UN_CDCOMPLEX: return( "(double complex)" ); case UN_MINUS: return( "-" ); case UN_NEG: return( "!" ); case UN_COMPLEMENT: return( "~" ); case UN_PLUS: return( "+" ); default: g_assert( FALSE ); /* Keep gcc happy. */ return( NULL ); } } /* Decode a node tag. */ char * decode_NodeType( NodeType tag ) { switch( tag ) { case TAG_APPL: return( "TAG_APPL" ); case TAG_CONS: return( "TAG_CONS" ); case TAG_FREE: return( "TAG_FREE" ); case TAG_DOUBLE: return( "TAG_DOUBLE" ); case TAG_COMPLEX: return( "TAG_COMPLEX" ); case TAG_CLASS: return( "TAG_CLASS" ); case TAG_GEN: return( "TAG_GEN" ); case TAG_FILE: return( "TAG_FILE" ); case TAG_SHARED: return( "TAG_SHARED" ); case TAG_REFERENCE: return( "TAG_REFERENCE" ); default: g_assert( FALSE ); /* Keep gcc happy. */ return( NULL ); } } /* Decode a CombinatorType. */ char * decode_CombinatorType( CombinatorType comb ) { switch( comb ) { case COMB_S: return( "S" ); case COMB_SL: return( "Sl" ); case COMB_SR: return( "Sr" ); case COMB_I: return( "I" ); case COMB_K: return( "K" ); case COMB_GEN: return( "G" ); default: g_assert( FALSE ); /* Keep gcc happy. */ return( NULL ); } } /* Decode a symbol type. */ char * decode_SymbolType( SymbolType t ) { switch( t ) { case SYM_VALUE: return( "SYM_VALUE" ); case SYM_PARAM: return( "SYM_PARAM" ); case SYM_ZOMBIE: return( "SYM_ZOMBIE" ); case SYM_WORKSPACE: return( "SYM_WORKSPACE" ); case SYM_WORKSPACEROOT: return( "SYM_WORKSPACEROOT" ); case SYM_ROOT: return( "SYM_ROOT" ); case SYM_EXTERNAL: return( "SYM_EXTERNAL" ); case SYM_BUILTIN: return( "SYM_BUILTIN" ); default: g_assert( FALSE ); return( NULL ); } } /* Decode a symbol type into something users might like to see. */ char * decode_SymbolType_user( SymbolType t ) { switch( t ) { case SYM_VALUE: return( _( "value" ) ); case SYM_PARAM: return( _( "parameter" ) ); case SYM_ZOMBIE: return( _( "zombie" ) ); case SYM_WORKSPACE: return( _( "workspace" ) ); case SYM_WORKSPACEROOT: return( _( "workspace root" ) ); case SYM_ROOT: return( _( "root symbol" ) ); case SYM_EXTERNAL: return( _( "external symbol" ) ); case SYM_BUILTIN: return( _( "built-in symbol" ) ); default: g_assert( FALSE ); return( NULL ); } } /* From here on, just used for debugging. */ #ifdef DEBUG #warning "DEBUG on in dump.c" /* Do a tiny dump of a symbol. Just a few characters. */ void * dump_tiny( Symbol *sym ) { char txt[100]; VipsBuf buf = VIPS_BUF_STATIC( txt ); printf( "(%p) ", sym ); symbol_qualified_name( sym, &buf ); if( sym->dirty ) printf( "*" ); printf( "%s %s; ", decode_SymbolType( sym->type ), vips_buf_all( &buf ) ); return( NULL ); } /* Dump a expr, tiny. */ static void * dump_expr_tiny( Expr *expr ) { printf( "(expr->sym->name = " ); symbol_name_print( expr->sym ); printf( ") " ); return( NULL ); } /* Dump a expr info. */ void dump_expr( Expr *expr ) { Symbol *sym = expr->sym; printf( "expr (%p)->sym->name = \"%s\"\n", expr, IOBJECT( sym )->name ); if( expr->row ) printf( "%s->row = (set)\n", IOBJECT( sym )->name ); if( expr->compile ) { printf( "%s->compile:\n", IOBJECT( sym )->name ); dump_compile( expr->compile ); } if( sym->dirty ) printf( "\n" ); else if( !PEISNOVAL( &expr->root ) ) { printf( "%s->expr->root = ", IOBJECT( sym )->name ); pgraph( &expr->root ); } if( expr->err ) printf( "%s->expr->err = %s\n", IOBJECT( sym )->name, bool_to_char( expr->err ) ); if( expr->error_top ) printf( "%s->expr->error_top = \"%s\"\n", IOBJECT( sym )->name, NN( expr->error_top ) ); if( expr->error_sub ) printf( "%s->expr->error_sub = \"%s\"\n", IOBJECT( sym )->name, NN( expr->error_sub ) ); } /* Dump a compile, tiny. */ static void * dump_compile_tiny( Compile *compile ) { printf( "(compile->sym->name = " ); symbol_name_print( compile->sym ); printf( ") " ); return( NULL ); } /* Dump a compile. */ void dump_compile( Compile *compile ) { Symbol *sym = compile->sym; printf( "compile (%p)->sym->name = \"%s\"\n", compile, IOBJECT( sym )->name ); #ifdef VERBOSE printf( "%s->class = %s\n", IOBJECT( sym )->name, bool_to_char( compile->is_klass ) ); printf( "%s->super = %s\n", IOBJECT( sym )->name, bool_to_char( compile->has_super ) ); printf( "%s->compile->text = \"%s\"\n", IOBJECT( sym )->name, NN( compile->text ) ); printf( "%s->compile->prhstext = \"%s\"\n", IOBJECT( sym )->name, NN( compile->prhstext ) ); printf( "%s->compile->rhstext = \"%s\"\n", IOBJECT( sym )->name, NN( compile->rhstext ) ); #endif /*VERBOSE*/ if( compile->tree ) { printf( "%s->compile->tree = \n", IOBJECT( sym )->name ); (void) dump_tree( compile->tree ); } #ifdef VERBOSE printf( "%s->compile->treefrag = %d pointers\n", IOBJECT( sym )->name, g_slist_length( compile->treefrag ) ); #endif /*VERBOSE*/ if( icontainer_get_n_children( ICONTAINER( compile ) ) > 0 ) { printf( "%s->compile->children =\n", IOBJECT( sym )->name ); (void) icontainer_map( ICONTAINER( compile ), (icontainer_map_fn) dump_symbol, NULL, NULL ); } #ifdef VERBOSE { char txt[100]; VipsBuf buf = VIPS_BUF_STATIC( txt ); printf( "%s->compile->nparam = %d\n", IOBJECT( sym )->name, compile->nparam ); printf( "%s->compile->param = ", IOBJECT( sym )->name ); (void) slist_map( compile->param, (SListMapFn) dump_tiny, NULL ); printf( "\n" ); printf( "%s->compile->nsecret = %d\n", IOBJECT( sym )->name, compile->nsecret ); printf( "%s->compile->secret = ", IOBJECT( sym )->name ); (void) slist_map( compile->secret, (SListMapFn) dump_tiny, NULL ); printf( "\n" ); printf( "%s->compile->this = ", IOBJECT( sym )->name ); if( compile->this ) dump_tiny( compile->this ); else printf( "(null)" ); printf( "\n" ); printf( "%s->compile->super = ", IOBJECT( sym )->name ); if( compile->super ) dump_tiny( compile->super ); else printf( "(null)" ); printf( "\n" ); printf( "%s->compile->children = ", IOBJECT( sym )->name ); (void) slist_map( compile->children, (SListMapFn) dump_tiny, NULL ); printf( "\n" ); graph_element( compile->heap, &buf, &compile->base, FALSE ); printf( "%s->compile->base = %s\n", IOBJECT( sym )->name, vips_buf_all( &buf ) ); if( compile->heap ) iobject_dump( IOBJECT( compile->heap ) ); } #endif /*VERBOSE*/ } /* Print a full symbol and all it's children. */ void * dump_symbol( Symbol *sym ) { printf( "\n\nsym->name = " ); (void) dump_tiny( sym ); printf( "\n" ); #ifdef VERBOSE printf( "%s->patch = %d pointers\n", IOBJECT( sym )->name, g_slist_length( sym->patch ) ); #endif /*VERBOSE*/ if( sym->expr ) dump_expr( sym->expr ); #ifdef VERBOSE printf( "%s->base = ", IOBJECT( sym )->name ); if( !sym->dirty ) { PElement root; PEPOINTE( &root, &sym->base ); pgraph( &root ); } else printf( "" ); printf( "\n" ); printf( "%s->dirty = %s\n", IOBJECT( sym )->name, bool_to_char( sym->dirty ) ); printf( "%s->parents = ", IOBJECT( sym )->name ); (void) slist_map( sym->parents, (SListMapFn) dump_compile_tiny, NULL ); printf( "\n" ); /* Prints topchildren and topparents. */ dump_links( sym ); printf( "%s->ndirtychildren = %d\n", IOBJECT( sym )->name, sym->ndirtychildren ); printf( "%s->leaf = %s\n", IOBJECT( sym )->name, bool_to_char( sym->leaf ) ); printf( "%s->tool = kit ", IOBJECT( sym )->name ); if( sym->tool ) dump_kit( sym->tool->kit ); else printf( "\n" ); #endif /*VERBOSE*/ return( NULL ); } /* Pretty print the whole of the symbol table. */ void dump_symbol_table( void ) { (void) icontainer_map( ICONTAINER( symbol_root->expr->compile ), (icontainer_map_fn) dump_symbol, NULL, NULL ); } /* Tiny dump a tool. */ static void * dump_tiny_tool( Tool *tool ) { switch( tool->type ) { case TOOL_SEP: printf( " " ); break; case TOOL_DIA: printf( " ", FILEMODEL( tool )->filename ); break; case TOOL_SYM: dump_tiny( tool->sym ); break; default: g_assert( FALSE ); } return( NULL ); } /* Print out the syms in a kit. */ void * dump_kit( Toolkit *kit ) { printf( "kit->name = %s; ", IOBJECT( kit )->name ); printf( "%s->tools = ", IOBJECT( kit )->name ); icontainer_map( ICONTAINER( kit ), (icontainer_map_fn) dump_tiny_tool, NULL, NULL ); printf( "\n" ); return( NULL ); } /* Easy find-a-symbol for gdb. */ Symbol * sym( char *name ) { return( compile_lookup( symbol_root->expr->compile, name ) ); } /* Print from a name. */ void psym( char *name ) { Symbol *s; if( (s = sym( name )) ) (void) dump_symbol( s ); else printf( "Symbol \"%s\" not found\n", name ); } /* Print scrap of graph. */ void pgraph( PElement *graph ) { char txt[10240]; VipsBuf buf = VIPS_BUF_STATIC( txt ); graph_pelement( reduce_context->heap, &buf, graph, TRUE ); printf( "%s\n", vips_buf_all( &buf ) ); } /* Print symbol value from name. */ void psymv( char *name ) { Symbol *s; if( (s = sym( name )) ) { char txt[1024]; VipsBuf buf = VIPS_BUF_STATIC( txt ); graph_pelement( reduce_context->heap, &buf, &s->expr->root, TRUE ); printf( "%s = %s\n", name, vips_buf_all( &buf ) ); } } /* Pretty-print an element. */ static void print_element( int nsp, EType type, void *arg ) { switch( type ) { case ELEMENT_NOVAL: printf( "no value (%d)\n", GPOINTER_TO_INT( arg ) ); break; case ELEMENT_NODE: printf( "node ->\n" ); graph_heap( nsp + 1, arg ); break; case ELEMENT_SYMBOL: printf( "symbol \"%s\"", IOBJECT( arg )->name ); break; case ELEMENT_SYMREF: printf( "symref \"%s\"", IOBJECT( arg )->name ); break; case ELEMENT_COMPILEREF: printf( "compileref " ); compile_name_print( COMPILE( arg ) ); break; case ELEMENT_CONSTRUCTOR: printf( "constructor \"%s\"", IOBJECT( arg )->name ); break; case ELEMENT_CHAR: printf( "char \"%c\"", GPOINTER_TO_UINT( arg ) ); break; case ELEMENT_BOOL: printf( "bool \"%s\"", bool_to_char( (gboolean) GPOINTER_TO_UINT( arg ) ) ); break; case ELEMENT_BINOP: printf( "binop \"%s\"", decode_BinOp( (BinOp)arg ) ); break; case ELEMENT_UNOP: printf( "unop \"%s\"", decode_UnOp( (UnOp)arg ) ); break; case ELEMENT_COMB: printf( "combinator \"%s\"", decode_CombinatorType( (CombinatorType)arg ) ); break; case ELEMENT_TAG: printf( "tag \"%s\"", (char*)arg ); break; case ELEMENT_MANAGED: printf( "Managed* %p", arg ); break; case ELEMENT_ELIST: printf( "empty-list []" ); break; default: g_assert( FALSE ); } } /* Pretty-print a heap graph. */ void graph_heap( int nsp, HeapNode *hn ) { if( !hn ) return; printf( "%s", spc( nsp ) ); printf( "Node: " ); printf( "serial = %d, ", hn->flgs & FLAG_SERIAL ); if( hn->flgs & FLAG_PRINT ) printf( "print, " ); else printf( "noprint, " ); if( hn->flgs & FLAG_DEBUG ) printf( "debug, " ); else printf( "nodebug, " ); if( hn->flgs & FLAG_MARK ) printf( "marked, " ); else printf( "notmarked, " ); printf( "%s ", decode_NodeType( hn->type ) ); switch( hn->type ) { case TAG_APPL: case TAG_CONS: printf( "\n" ); printf( "%s", spc( nsp ) ); printf( "left: " ); print_element( nsp, hn->ltype, hn->body.ptrs.left ); printf( "\n" ); printf( "%s", spc( nsp ) ); printf( "right: " ); print_element( nsp, hn->rtype, hn->body.ptrs.right ); printf( "\n" ); break; case TAG_DOUBLE: printf( "real \"%g\"\n", hn->body.num ); break; case TAG_CLASS: printf( "instance-of-class \"%s\"\n", IOBJECT( hn->body.ptrs.left )->name ); printf( " secrets=(" ); print_element( nsp, GETRIGHT( hn )->ltype, GETRIGHT( hn )->body.ptrs.left ); printf( ") members=(" ); print_element( nsp, GETRIGHT( hn )->rtype, GETRIGHT( hn )->body.ptrs.right ); printf( ")\n" ); break; case TAG_COMPLEX: printf( "complex \"(%g,%g)\"\n", GETLEFT( hn )->body.num, GETRIGHT( hn )->body.num ); break; case TAG_GEN: printf( "list generator start=%g next=%g final=%g\n", GETLEFT( hn )->body.num, GETLEFT( GETRIGHT( hn ) )->body.num, GETRIGHT( GETRIGHT( hn ) )->body.num ); break; case TAG_FILE: printf( "list generator file=%s\n", MANAGEDFILE( GETLEFT( hn ) )->file->fname ); break; case TAG_FREE: default: g_assert( FALSE ); } } /* Pretty-print a const. */ static void dump_parseconst( ParseConst *pc ) { switch( pc->type ) { case PARSE_CONST_NUM: printf( "%G", pc->val.num ); break; case PARSE_CONST_COMPLEX: printf( "%Gj", pc->val.num ); case PARSE_CONST_STR: printf( "\"%s\"", pc->val.str ); break; case PARSE_CONST_BOOL: printf( "%s", bool_to_char( pc->val.bool ) ); break; case PARSE_CONST_CHAR: printf( "'%c'", pc->val.ch ); break; case PARSE_CONST_ELIST: printf( "[]" ); break; default: g_assert( FALSE ); } } /* Dump a parse tree. */ void * dump_tree( ParseNode *n ) { switch( n->type ) { case NODE_NONE: printf( "node->type == NODE_NONE\n" ); break; case NODE_APPLY: printf( "Function application\n" ); printf( "LHS = " ); (void) dump_tree( n->arg1 ); printf( "RHS = " ); (void) dump_tree( n->arg2 ); break; case NODE_CLASS: printf( "Class: " ); (void) dump_compile_tiny( n->klass ); printf( "\n" ); break; case NODE_LEAF: printf( "Leaf symbol (%p): ", n->leaf ); (void) dump_tiny( n->leaf ); printf( "\n" ); break; case NODE_TAG: printf( "Tag: %s\n", n->tag ); break; case NODE_BINOP: printf( "Binary operator %s\n", decode_BinOp( n->biop ) ); printf( "Left expression:\n" ); (void) dump_tree( n->arg1 ); printf( "Right expression:\n" ); (void) dump_tree( n->arg2 ); break; case NODE_UOP: printf( "Unary operator %s\n", decode_UnOp( n->uop ) ); printf( "Arg expression:\n" ); (void) dump_tree( n->arg1 ); break; case NODE_CONST: printf( "Constant " ); dump_parseconst( &n->con ); printf( "\n" ); break; case NODE_GENERATOR: printf( "List generator\n" ); printf( "Start:\n" ); (void) dump_tree( n->arg1 ); if( n->arg2 ) { printf( "Next:\n" ); (void) dump_tree( n->arg2 ); } if( n->arg3 ) { printf( "End:\n" ); (void) dump_tree( n->arg3 ); } break; case NODE_COMPOSE: printf( "Function compose\n" ); printf( "Left:\n" ); (void) dump_tree( n->arg1 ); printf( "Right:\n" ); (void) dump_tree( n->arg2 ); break; case NODE_LISTCONST: case NODE_SUPER: if( n->type == NODE_LISTCONST ) printf( "List constant\n" ); else printf( "Superclass construct\n" ); printf( "***[\n" ); slist_map_rev( n->elist, (SListMapFn) dump_tree, NULL ); printf( "***]\n" ); break; default: g_assert( FALSE ); } return( NULL ); } static void * dump_link_expr( LinkExpr *le ) { dump_expr_tiny( le->expr ); printf( " count = %d ; ", le->count ); return( NULL ); } void * dump_link( Link *link ) { printf( "link->parent = " ); symbol_name_print( link->parent ); if( link->parent->dirty ) printf( "(dirty)" ); printf( "\n" ); printf( "link->child = " ); symbol_name_print( link->child ); if( link->child->dirty ) printf( "(dirty)" ); printf( "\n" ); printf( "link->serial = %d\n", link->serial ); printf( "link->static_links = " ); slist_map( link->static_links, (SListMapFn) dump_link_expr, NULL ); printf( "\n" ); printf( "link->dynamic_links = " ); slist_map( link->dynamic_links, (SListMapFn) dump_link_expr, NULL ); printf( "\n" ); return( NULL ); } void dump_links( Symbol *sym ) { symbol_name_print( sym ); printf( "->topchildren = \n" ); slist_map( sym->topchildren, (SListMapFn) dump_link, NULL ); symbol_name_print( sym ); printf( "->topparents = \n" ); slist_map( sym->topparents, (SListMapFn) dump_link, NULL ); } void dump_symbol_heap( Symbol *sym ) { printf( "symbol " ); symbol_name_print( sym ); printf( "has graph:\n" ); if( sym->expr ) pgraph( &sym->expr->root ); printf( "\n" ); } #endif /*DEBUG*/ nip2-8.7.0/src/imagedisplay.c0000644000175000017500000003313513224651032012725 00000000000000/* Imagedisplay widget code ... display entire image, place this widget in a * scrolledwindow to get clipping/scrolling behaviour. */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ /* Trace painting actions #define DEBUG_PAINT */ /* #define DEBUG_GEO */ #include "ip.h" enum { SIG_AREA_CHANGED, /* xywh area changed, canvas cods */ SIG_LAST }; static GtkDrawingAreaClass *parent_class = NULL; static guint imagedisplay_signals[SIG_LAST] = { 0 }; /* Handy! */ void imagedisplay_queue_draw_area( Imagedisplay *id, Rect *area ) { #ifdef DEBUG_PAINT printf( "imagedisplay_queue_draw_area: " "left = %d, top = %d, width = %d, height = %d\n", area->left, area->top, area->width, area->height ); #endif /*DEBUG_PAINT*/ gtk_widget_queue_draw_area( GTK_WIDGET( id ), area->left, area->top, area->width, area->height ); } /* Repaint an area of the image. */ static void imagedisplay_paint_image( Imagedisplay *id, Rect *area ) { Conversion *conv = id->conv; guchar *buf; int lsk; #ifdef DEBUG_PAINT g_print( "imagedisplay_paint_image: at %d x %d, size %d x %d ", area->left, area->top, area->width, area->height ); gobject_print( G_OBJECT( id ) ); #endif /*DEBUG_PAINT*/ /* Request pixels. We ask the mask first, to get an idea of what's * currently in cache, then request tiles of pixels. We must always * request pixels, even if the mask is blank, because the request * will trigger a notify later which will reinvoke us. */ if( conv->mreg && im_prepare( conv->mreg, area ) ) { #ifdef DEBUG_PAINT printf( "imagedisplay_paint_image: mask paint error\n" ); printf( "\t%s\n", im_error_buffer() ); #endif /*DEBUG_PAINT*/ return; } if( im_prepare( conv->ireg, area ) ) { #ifdef DEBUG_PAINT printf( "imagedisplay_paint_image: paint error\n" ); printf( "\t%s\n", im_error_buffer() ); #endif /*DEBUG_PAINT*/ im_error_clear(); return; } /* Is the mask all zero? Skip the paint. */ if( conv->mreg ) { gboolean found; int x, y; buf = (guchar *) IM_REGION_ADDR( conv->mreg, area->left, area->top ); lsk = IM_REGION_LSKIP( conv->mreg ); found = FALSE; for( y = 0; y < area->height; y++ ) { for( x = 0; x < area->width; x++ ) if( buf[x] ) { found = TRUE; break; } if( found ) break; buf += lsk; } if( !found ) { #ifdef DEBUG_PAINT printf( "imagedisplay_paint_image: zero mask\n" ); #endif /*DEBUG_PAINT*/ return; } } /* Paint into window. */ buf = (guchar *) IM_REGION_ADDR( conv->ireg, area->left, area->top ); lsk = IM_REGION_LSKIP( conv->ireg ); if( conv->ireg->im->Bands == 3 ) gdk_draw_rgb_image( GTK_WIDGET( id )->window, GTK_WIDGET( id )->style->white_gc, area->left, area->top, area->width, area->height, GDK_RGB_DITHER_MAX, buf, lsk ); else if( conv->ireg->im->Bands == 1 ) gdk_draw_gray_image( GTK_WIDGET( id )->window, GTK_WIDGET( id )->style->white_gc, area->left, area->top, area->width, area->height, GDK_RGB_DITHER_MAX, buf, lsk ); } /* Paint an area with the background pattern. */ static void imagedisplay_paint_background( Imagedisplay *id, Rect *expose ) { #ifdef DEBUG_PAINT g_print( "imagedisplay_paint_background: at %d x %d, size %d x %d\n", expose->left, expose->top, expose->width, expose->height ); #endif /*DEBUG_PAINT*/ gdk_draw_rectangle( GTK_WIDGET( id )->window, id->back_gc, TRUE, expose->left, expose->top, expose->width, expose->height ); } /* Paint areas outside the image. */ static void imagedisplay_paint_background_clipped( Imagedisplay *id, Rect *expose ) { Conversion *conv = id->conv; Rect clip; #ifdef DEBUG_PAINT g_print( "imagedisplay_paint_background_clipped: canvas %d x %d\n", conv->canvas.width, conv->canvas.height ); #endif /*DEBUG_PAINT*/ /* If the expose touches the image, we cut it into two parts: * everything to the right of the image, and everything strictly * below. */ im_rect_intersectrect( expose, &conv->canvas, &clip ); if( !im_rect_isempty( &clip ) ) { Rect area; area = *expose; area.left = conv->canvas.width; area.width -= clip.width; if( area.width > 0 ) imagedisplay_paint_background( id, &area ); area = *expose; area.top = conv->canvas.height; area.width = clip.width; area.height -= clip.height; if( area.height > 0 ) imagedisplay_paint_background( id, &area ); } else imagedisplay_paint_background( id, expose ); } static void imagedisplay_paint( Imagedisplay *id, Rect *area ) { Conversion *conv = id->conv; const int tsize = conv->tile_size; Rect clip; int xs, ys; int x, y; /* There's no image to paint. */ if( !conv->ireg ) return; /* Clip non-image parts of the expose. */ im_rect_intersectrect( area, &conv->canvas, &clip ); if( im_rect_isempty( &clip ) ) return; #ifdef DEBUG_PAINT g_print( "imagedisplay_paint: at %d x %d, size %d x %d\n", clip.left, clip.top, clip.width, clip.height ); #endif /*DEBUG_PAINT*/ /* Round left/top down to the start tile. */ xs = (clip.left / tsize) * tsize; ys = (clip.top / tsize) * tsize; /* Now loop painting image tiles. */ for( y = ys; y < IM_RECT_BOTTOM( &clip ); y += tsize ) for( x = xs; x < IM_RECT_RIGHT( &clip ); x += tsize ) { Rect tile; Rect tile2; tile.left = x; tile.top = y; tile.width = conv->tile_size; tile.height = conv->tile_size; im_rect_intersectrect( &tile, &clip, &tile2 ); imagedisplay_paint_image( id, &tile2 ); } } /* Expose signal handler. */ static gint imagedisplay_expose( GtkWidget *widget, GdkEventExpose *event ) { Imagedisplay *id = IMAGEDISPLAY( widget ); GdkRectangle *rect; int i, n; if( !GTK_WIDGET_DRAWABLE( id ) || event->area.width == 0 || event->area.height == 0 || !GTK_WIDGET( id )->window || !GTK_WIDGET_VISIBLE( id ) ) return( FALSE ); gdk_region_get_rectangles( event->region, &rect, &n ); #ifdef DEBUG_PAINT g_print( "imagedisplay_expose: %d rectangles\n", n ); #endif /*DEBUG_PAINT*/ for( i = 0; i < n; i++ ) { Rect area; area.left = rect[i].x; area.top = rect[i].y; area.width = rect[i].width; area.height = rect[i].height; /* Clear to background. Always do this, to make sure we paint * outside the image area. */ imagedisplay_paint_background_clipped( id, &area ); /* And paint pixels. */ imagedisplay_paint( id, &area ); } g_free( rect ); return( FALSE ); } /* Resize signal. */ static gboolean imagedisplay_configure_event( GtkWidget *widget, GdkEventConfigure *event ) { Imagedisplay *id = IMAGEDISPLAY( widget ); #ifdef DEBUG_GEO g_print( "imagedisplay_configure_event: %d x %d:\n", event->width, event->height ); #endif /*DEBUG_GEO*/ /* Note new size in visible hint. Except if parent is a viewport ... * if it's a viewport, someone else will have to track the visible * area. */ if( !GTK_IS_VIEWPORT( gtk_widget_get_parent( widget ) ) ) { id->conv->visible.width = event->width; id->conv->visible.height = event->height; } /* Recalculate shrink to fit, if necessary. */ if( id->shrink_to_fit ) { #ifdef DEBUG_GEO g_print( "imagedisplay_configure_event_cb: shrink-to-fit\n" ); #endif /*DEBUG_GEO*/ conversion_set_mag( id->conv, 0 ); } return( FALSE ); } static void imagedisplay_destroy( GtkObject *object ) { Imagedisplay *id = IMAGEDISPLAY( object ); #ifdef DEBUG g_print( "imagedisplay_destroy: " ); gobject_print( G_OBJECT( id ) ); #endif /*DEBUG*/ FREESID( id->changed_sid, id->conv ); FREESID( id->area_changed_sid, id->conv ); UNREF( id->conv ); UNREF( id->back_gc ); UNREF( id->top_gc ); UNREF( id->bottom_gc ); GTK_OBJECT_CLASS( parent_class )->destroy( object ); } /* Conversion has changed ... resize to fit. */ static void imagedisplay_real_conversion_changed( Imagedisplay *id ) { GtkRequisition *requisition = >K_WIDGET( id )->requisition; Rect *canvas = &id->conv->canvas; g_assert( IS_IMAGEDISPLAY( id ) ); #ifdef DEBUG g_print( "imagedisplay_real_conversion_changed: " ); gobject_print( G_OBJECT( id ) ); #endif /*DEBUG*/ /* If we're in shrink-to-fit mode, do a shrink. * Otherwise resize to hold the new image. */ if( id->shrink_to_fit ) conversion_set_mag( id->conv, 0 ); else if( requisition->width != canvas->width || requisition->height != canvas->height ) { #ifdef DEBUG_GEO g_print( "imagedisplay_real_conversion_" "changed: requesting new size " "%d x %d\n", id->conv->canvas.width, id->conv->canvas.height ); #endif /*DEBUG_GEO*/ requisition->width = canvas->width; requisition->height = canvas->height; gtk_widget_queue_resize( GTK_WIDGET( id ) ); } } static void imagedisplay_real_area_changed( Imagedisplay *id, Rect *dirty ) { imagedisplay_queue_draw_area( id, dirty ); } static void imagedisplay_realize( GtkWidget *widget ) { Imagedisplay *id = IMAGEDISPLAY( widget ); GdkColor fg, bg; GTK_WIDGET_CLASS( parent_class )->realize( widget ); gdk_window_set_back_pixmap( widget->window, NULL, FALSE ); gtk_widget_set_double_buffered( widget, FALSE ); id->back_gc = gdk_gc_new( widget->window ); fg.red = fg.green = fg.blue = 0x90 << 8; bg.red = bg.green = bg.blue = 0xA0 << 8; gdk_gc_set_rgb_fg_color( id->back_gc, &fg ); gdk_gc_set_rgb_bg_color( id->back_gc, &bg ); id->top_gc = gdk_gc_new( widget->window ); id->bottom_gc = gdk_gc_new( widget->window ); } /* Init Imagedisplay class. */ static void imagedisplay_class_init( ImagedisplayClass *class ) { GtkObjectClass *object_class = (GtkObjectClass *) class; GtkWidgetClass *widget_class = (GtkWidgetClass *) class; parent_class = g_type_class_peek_parent( class ); object_class->destroy = imagedisplay_destroy; widget_class->expose_event = imagedisplay_expose; widget_class->configure_event = imagedisplay_configure_event; widget_class->realize = imagedisplay_realize; class->conversion_changed = imagedisplay_real_conversion_changed; class->area_changed = imagedisplay_real_area_changed; imagedisplay_signals[SIG_AREA_CHANGED] = g_signal_new( "area_changed", G_OBJECT_CLASS_TYPE( class ), G_SIGNAL_RUN_FIRST, G_STRUCT_OFFSET( ImagedisplayClass, area_changed ), NULL, NULL, g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1, G_TYPE_POINTER ); } static void imagedisplay_init( Imagedisplay *id ) { id->conv = NULL; id->changed_sid = 0; id->area_changed_sid = 0; id->shrink_to_fit = FALSE; id->back_gc = NULL; id->top_gc = NULL; id->bottom_gc = NULL; } GType imagedisplay_get_type( void ) { static GType type = 0; if( !type ) { static const GTypeInfo info = { sizeof( ImagedisplayClass ), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) imagedisplay_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof( Imagedisplay ), 32, /* n_preallocs */ (GInstanceInitFunc) imagedisplay_init, }; type = g_type_register_static( GTK_TYPE_DRAWING_AREA, "Imagedisplay", &info, 0 ); } return( type ); } /* Conversion has changed ... repaint everything. */ static void imagedisplay_conversion_changed_cb( Conversion *conv, Imagedisplay *id ) { #ifdef DEBUG printf( "imagedisplay_conversion_changed_cb: " ); gobject_print( G_OBJECT( id ) ); #endif /*DEBUG*/ IMAGEDISPLAY_GET_CLASS( id )->conversion_changed( id ); g_signal_emit( G_OBJECT( id ), imagedisplay_signals[SIG_AREA_CHANGED], 0, &conv->canvas ); } /* Part of the repaint has changed. */ static void imagedisplay_conversion_area_changed_cb( Conversion *conv, Rect *dirty, Imagedisplay *id ) { #ifdef DEBUG printf( "imagedisplay_conversion_area_changed_cb: " "left = %d, top = %d, width = %d, height = %d, ", dirty->left, dirty->top, dirty->width, dirty->height ); gobject_print( G_OBJECT( id ) ); #endif /*DEBUG*/ g_signal_emit( G_OBJECT( id ), imagedisplay_signals[SIG_AREA_CHANGED], 0, dirty ); } /* Install a conversion. Only allow this once. */ void imagedisplay_set_conversion( Imagedisplay *id, Conversion *conv ) { g_assert( !id->conv ); if( conv ) { id->conv = conv; id->changed_sid = g_signal_connect( id->conv, "changed", G_CALLBACK( imagedisplay_conversion_changed_cb ), id ); id->area_changed_sid = g_signal_connect( id->conv, "area_changed", G_CALLBACK( imagedisplay_conversion_area_changed_cb ), id ); g_object_ref( G_OBJECT( conv ) ); iobject_sink( IOBJECT( conv ) ); /* Trigger a change on the conv so we update. */ iobject_changed( IOBJECT( conv ) ); } } /* Make a new Imagedisplay. Pass in the conversion we should show, conv can * be NULL ... wait for one to be installed. */ Imagedisplay * imagedisplay_new( Conversion *conv ) { Imagedisplay *id = g_object_new( TYPE_IMAGEDISPLAY, NULL ); #ifdef DEBUG g_print( "imagedisplay_new: " ); gobject_print( G_OBJECT( id ) ); #endif /*DEBUG*/ imagedisplay_set_conversion( id, conv ); return( id ); } void imagedisplay_set_shrink_to_fit( Imagedisplay *id, gboolean shrink_to_fit ) { id->shrink_to_fit = shrink_to_fit; if( shrink_to_fit ) conversion_set_mag( id->conv, 0 ); } nip2-8.7.0/src/workspacedefs.c0000644000175000017500000002121413224651032013110 00000000000000/* Workspace-local defs. */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #include "ip.h" static ViewClass *parent_class = NULL; static void workspacedefs_text_changed( GtkTextBuffer *buffer, Workspacedefs *workspacedefs ) { #ifdef DEBUG printf( "workspacedefs_text_changed\n" ); #endif /*DEBUG*/ if( !workspacedefs->changed ) { workspacedefs->changed = TRUE; #ifdef DEBUG printf( "\t(changed = TRUE)\n" ); #endif /*DEBUG*/ /* The workspace hasn't changed, but this will queue a refresh * on us. */ iobject_changed( IOBJECT( workspacedefs->ws ) ); } } static void workspacedefs_refresh( vObject *vobject ) { Workspacedefs *workspacedefs = WORKSPACEDEFS( vobject ); Workspace *ws = workspacedefs->ws; char txt[256]; VipsBuf buf = VIPS_BUF_STATIC( txt ); #ifdef DEBUG printf( "workspacedefs_refresh:\n" ); #endif /*DEBUG*/ if( !workspacedefs->changed ) { guint text_hash = g_str_hash( ws->local_defs ); if( text_hash != workspacedefs->text_hash ) { g_signal_handlers_block_by_func( gtk_text_view_get_buffer( GTK_TEXT_VIEW( workspacedefs->text ) ), workspacedefs_text_changed, workspacedefs ); text_view_set_text( GTK_TEXT_VIEW( workspacedefs->text ), ws->local_defs, TRUE ); g_signal_handlers_unblock_by_func( gtk_text_view_get_buffer( GTK_TEXT_VIEW( workspacedefs->text ) ), workspacedefs_text_changed, workspacedefs ); workspacedefs->text_hash = text_hash; } } if( ws->local_kit ) { int n = icontainer_get_n_children( ICONTAINER( ws->local_kit ) ); vips_buf_appendf( &buf, ngettext( "%d definition", "%d definitions", n ), n ); } if( workspacedefs->errors ) { if( !vips_buf_is_empty( &buf ) ) vips_buf_appendf( &buf, ", " ); vips_buf_appendf( &buf, _( "errors" ) ); } if( workspacedefs->changed ) { if( !vips_buf_is_empty( &buf ) ) vips_buf_appendf( &buf, ", " ); vips_buf_appendf( &buf, _( "modified" ) ); } set_glabel( workspacedefs->status, "%s", vips_buf_all( &buf ) ); VOBJECT_CLASS( parent_class )->refresh( vobject ); } static void workspacedefs_link( vObject *vobject, iObject *iobject ) { Workspacedefs *workspacedefs = WORKSPACEDEFS( vobject ); Workspace *ws = WORKSPACE( iobject ); g_assert( !workspacedefs->ws ); workspacedefs->ws = ws; VOBJECT_CLASS( parent_class )->link( vobject, iobject ); } static void workspacedefs_class_init( WorkspacedefsClass *class ) { vObjectClass *vobject_class = (vObjectClass *) class; parent_class = g_type_class_peek_parent( class ); vobject_class->refresh = workspacedefs_refresh; vobject_class->link = workspacedefs_link; } static gboolean workspacedefs_set_text_from_file( Workspacedefs *workspacedefs, const char *fname ) { Workspace *ws = workspacedefs->ws; workspacedefs->changed = FALSE; workspacedefs->errors = FALSE; if( !workspace_local_set_from_file( ws, fname ) ) { text_view_select_text( GTK_TEXT_VIEW( workspacedefs->text ), input_state.charpos - yyleng, input_state.charpos ); workspacedefs->errors = TRUE; return( FALSE ); } symbol_recalculate_all(); return( TRUE ); } /* Callback from load browser. */ static void workspacedefs_load_file_cb( iWindow *iwnd, void *client, iWindowNotifyFn nfn, void *sys ) { Filesel *filesel = FILESEL( iwnd ); Workspacedefs *workspacedefs = WORKSPACEDEFS( client ); char *fname; if( !(fname = filesel_get_filename( filesel )) ) { nfn( sys, IWINDOW_ERROR ); return; } if( !workspacedefs_set_text_from_file( workspacedefs, fname ) ) { g_free( fname ); nfn( sys, IWINDOW_ERROR ); return; } g_free( fname ); nfn( sys, IWINDOW_YES ); } static void workspacedefs_replace_cb( GtkWidget *wid, Workspacedefs *workspacedefs ) { GtkWidget *filesel; filesel = filesel_new(); iwindow_set_title( IWINDOW( filesel ), _( "Replace Definition From File" ) ); filesel_set_flags( FILESEL( filesel ), FALSE, FALSE ); filesel_set_filetype( FILESEL( filesel ), filesel_type_definition, 0 ); iwindow_set_parent( IWINDOW( filesel ), GTK_WIDGET( wid ) ); filesel_set_done( FILESEL( filesel ), workspacedefs_load_file_cb, workspacedefs ); iwindow_build( IWINDOW( filesel ) ); gtk_widget_show( GTK_WIDGET( filesel ) ); } static void workspacedefs_save_as_cb( GtkWidget *wid, Workspacedefs *workspacedefs ) { Workspace *ws = workspacedefs->ws; if( ws->local_kit ) filemodel_inter_saveas( IWINDOW( wid ), FILEMODEL( ws->local_kit ) ); } static gboolean workspacedefs_set_text( Workspacedefs *workspacedefs, const char *txt ) { Workspace *ws = workspacedefs->ws; workspacedefs->changed = FALSE; workspacedefs->errors = FALSE; workspacedefs->text_hash = g_str_hash( txt ); if( !workspace_local_set( ws, txt ) ) { text_view_select_text( GTK_TEXT_VIEW( workspacedefs->text ), input_state.charpos - yyleng, input_state.charpos ); workspacedefs->errors = TRUE; return( FALSE ); } symbol_recalculate_all(); return( TRUE ); } /* "Process" in defs area. */ static void workspacedefs_process_cb( GtkWidget *wid, Workspacedefs *workspacedefs ) { char *txt; #ifdef DEBUG printf( "workspacedefs_process_cb:\n" ); printf( "\tchanged = FALSE\n" ); #endif /*DEBUG*/ txt = text_view_get_text( GTK_TEXT_VIEW( workspacedefs->text ) ); if( !workspacedefs_set_text( workspacedefs, txt ) ) iwindow_alert( wid, GTK_MESSAGE_ERROR ); g_free( txt ); } static void workspacedefs_init( Workspacedefs *workspacedefs ) { GtkWidget *pane; Popupbutton *popupbutton; GtkWidget *swin; GtkWidget *hbox; GtkWidget *but; #ifdef DEBUG printf( "workspacedefs_init:\n" ); #endif /*DEBUG*/ workspacedefs->changed = FALSE; workspacedefs->errors = FALSE; workspacedefs->text_hash = 0; pane = menu_build( _( "Workspace definitions" ) ); menu_add_but( pane, _( "Replace From _File" ), GTK_SIGNAL_FUNC( workspacedefs_replace_cb ), workspacedefs ); menu_add_but( pane, GTK_STOCK_SAVE_AS, GTK_SIGNAL_FUNC( workspacedefs_save_as_cb ), workspacedefs ); hbox = gtk_hbox_new( FALSE, 7 ); gtk_box_pack_start( GTK_BOX( workspacedefs ), hbox, FALSE, FALSE, 0 ); gtk_widget_show( hbox ); popupbutton = popupbutton_new(); popupbutton_set_menu( popupbutton, pane ); gtk_box_pack_start( GTK_BOX( hbox ), GTK_WIDGET( popupbutton ), FALSE, FALSE, 0 ); gtk_widget_show( GTK_WIDGET( popupbutton ) ); but = gtk_button_new_with_label( _( "Process" ) ); g_signal_connect( G_OBJECT( but ), "clicked", G_CALLBACK( workspacedefs_process_cb ), workspacedefs ); gtk_box_pack_start( GTK_BOX( hbox ), but, FALSE, FALSE, 0 ); gtk_widget_show( but ); workspacedefs->status = gtk_label_new( NULL ); gtk_misc_set_alignment( GTK_MISC( workspacedefs->status ), 0, 0.5 ); gtk_box_pack_start( GTK_BOX( hbox ), workspacedefs->status, TRUE, TRUE, 0 ); gtk_widget_show( workspacedefs->status ); swin = gtk_scrolled_window_new( NULL, NULL ); gtk_scrolled_window_set_policy( GTK_SCROLLED_WINDOW( swin ), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC ); gtk_box_pack_end( GTK_BOX( workspacedefs ), swin, TRUE, TRUE, 0 ); gtk_widget_show( swin ); workspacedefs->text = program_text_new(); g_signal_connect( gtk_text_view_get_buffer( GTK_TEXT_VIEW( workspacedefs->text ) ), "changed", G_CALLBACK( workspacedefs_text_changed ), workspacedefs ); gtk_container_add( GTK_CONTAINER( swin ), workspacedefs->text ); gtk_widget_show( workspacedefs->text ); } GtkType workspacedefs_get_type( void ) { static GtkType type = 0; if( !type ) { static const GtkTypeInfo info = { "Workspacedefs", sizeof( Workspacedefs ), sizeof( WorkspacedefsClass ), (GtkClassInitFunc) workspacedefs_class_init, (GtkObjectInitFunc) workspacedefs_init, /* reserved_1 */ NULL, /* reserved_2 */ NULL, (GtkClassInitFunc) NULL, }; type = gtk_type_unique( TYPE_VOBJECT, &info ); } return( type ); } Workspacedefs * workspacedefs_new( void ) { Workspacedefs *workspacedefs = gtk_type_new( TYPE_WORKSPACEDEFS ); return( workspacedefs ); } nip2-8.7.0/src/vobject.c0000644000175000017500000001731113224651032011707 00000000000000/* abstract base class for a vobject object ... watch an iobject and call * _refresh in idle if it changes. */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ /* Time each refresh #define DEBUG_TIME */ #include "ip.h" static GtkVBoxClass *parent_class = NULL; static Queue *vobject_dirty = NULL; static gint vobject_refresh_timeout = 0; /* Remove from refresh queue. */ static void vobject_refresh_dequeue( vObject *vobject ) { if( vobject->dirty ) { #ifdef DEBUG printf( "vobject_refresh_dequeue: \"%s\"\n", G_OBJECT_TYPE_NAME( vobject ) ); #endif /*DEBUG*/ vobject->dirty = FALSE; queue_remove( vobject_dirty, vobject ); } } #ifdef DEBUG_TIME /* Refresh all vobjects at once and time them. */ static gboolean vobject_refresh_timeout_cb( gpointer user_data ) { static GTimer *refresh_timer = NULL; double last_elapsed; double worst_time = 0.0; int worst_index = -1; void *data; int n; vobject_refresh_timeout = 0; if( !refresh_timer ) refresh_timer = g_timer_new(); g_timer_reset( refresh_timer ); printf( "vobject_idle_refresh: starting ...\n" ); for( n = 0; (data = queue_head( vobject_dirty )); n++ ) { vObject *vobject = VOBJECT( data ); double elapsed; vobject->dirty = FALSE; vobject_refresh( vobject ); elapsed = g_timer_elapsed( refresh_timer, NULL ); if( elapsed - last_elapsed > worst_time ) { worst_time = elapsed - last_elapsed; worst_index = n; } last_elapsed = elapsed; } printf( "vobject_idle_refresh: done after %gs (%d refreshes)\n", g_timer_elapsed( refresh_timer, NULL ), n ); printf( "vobject_idle_refresh: worst %gs (refresh %d)\n", worst_time, worst_index ); return( FALSE ); } #else /*DEBUG_TIME*/ /* Refresh stuff off the dirty list. */ static gboolean vobject_refresh_timeout_cb( gpointer user_data ) { void *data; #ifdef DEBUG printf( "vobject_refresh_timeout_cb:\n" ); #endif /*DEBUG*/ vobject_refresh_timeout = 0; while( (data = queue_head( vobject_dirty ) ) ) { vObject *vobject = VOBJECT( data ); #ifdef DEBUG printf( "vobject_refresh_timeout_cb: starting \"%s\" (%p)\n", G_OBJECT_TYPE_NAME( vobject ), vobject ); #endif /*DEBUG*/ /* We must clear dirty before we _refresh() so that if the * _refresh() indirectly triggers another update, we will * _refresh() again. */ vobject->dirty = FALSE; vobject_refresh( vobject ); } return( FALSE ); } #endif /*DEBUG_TIME*/ /* Mark something for refresh. Seldom call this directly ... just change the * iobject and all vobjects will have a refresh queued. */ void * vobject_refresh_queue( vObject *vobject ) { if( !vobject->dirty ) { #ifdef DEBUG printf( "vobject_refresh_queue: %s (%p)", G_OBJECT_TYPE_NAME( vobject ), vobject ); if( vobject->iobject ) printf( ", iobject %s \"%s\"", G_OBJECT_TYPE_NAME( vobject->iobject ), NN( vobject->iobject->name ) ); printf( "\n" ); #endif /*DEBUG*/ vobject->dirty = TRUE; queue_add( vobject_dirty, vobject ); IM_FREEF( g_source_remove, vobject_refresh_timeout ); vobject_refresh_timeout = g_timeout_add( 20, (GSourceFunc) vobject_refresh_timeout_cb, NULL ); } return( NULL ); } /* Called for iobject changed signal ... queue a refresh. */ static void vobject_iobject_changed( iObject *iobject, vObject *vobject ) { #ifdef DEBUG printf( "vobject_iobject_changed: %s %s \"%s\"\n", G_OBJECT_TYPE_NAME( vobject ), G_OBJECT_TYPE_NAME( iobject ), NN( iobject->name ) ); #endif /*DEBUG*/ vobject_refresh_queue( vobject ); } /* Called for iobject destroy signal ... kill the vobject too. */ static void vobject_iobject_destroy( iObject *iobject, vObject *vobject ) { #ifdef DEBUG printf( "vobject_iobject_destroy: iobject %s \"%s\"\n", G_OBJECT_TYPE_NAME( iobject ), NN( iobject->name ) ); #endif /*DEBUG*/ gtk_widget_destroy( GTK_WIDGET( vobject ) ); } /* Link to iobject. */ void vobject_link( vObject *vobject, iObject *iobject ) { vObjectClass *vobject_class = VOBJECT_GET_CLASS( vobject ); g_assert( !vobject->iobject ); if( vobject_class->link ) vobject_class->link( vobject, iobject ); /* Queue a refresh ... we always need at least one. */ vobject_refresh_queue( vobject ); } static void vobject_destroy( GtkObject *object ) { vObject *vobject; g_return_if_fail( object != NULL ); g_return_if_fail( IS_VOBJECT( object ) ); vobject = VOBJECT( object ); #ifdef DEBUG printf( "vobject_destroy: \"%s\"\n", G_OBJECT_TYPE_NAME( object ) ); #endif /*DEBUG*/ if( vobject->iobject ) { FREESID( vobject->changed_sid, vobject->iobject ); FREESID( vobject->destroy_sid, vobject->iobject ); vobject->iobject = NULL; } vobject_refresh_dequeue( vobject ); GTK_OBJECT_CLASS( parent_class )->destroy( object ); } static void vobject_finalize( GObject *gobject ) { #ifdef DEBUG printf( "vobject_finalize: \"%s\"\n", G_OBJECT_TYPE_NAME( gobject ) ); #endif /*DEBUG*/ G_OBJECT_CLASS( parent_class )->finalize( gobject ); } static void vobject_real_refresh( vObject *vobject ) { #ifdef DEBUG printf( "vobject_real_refresh: %p %s\n", vobject, G_OBJECT_TYPE_NAME( vobject ) ); #endif /*DEBUG*/ } static void vobject_real_link( vObject *vobject, iObject *iobject ) { vobject->iobject = iobject; vobject->changed_sid = g_signal_connect( iobject, "changed", G_CALLBACK( vobject_iobject_changed ), vobject ); vobject->destroy_sid = g_signal_connect( iobject, "destroy", G_CALLBACK( vobject_iobject_destroy ), vobject ); } static void vobject_class_init( vObjectClass *class ) { GObjectClass *gobject_class = G_OBJECT_CLASS( class ); GtkObjectClass *object_class = (GtkObjectClass*) class; parent_class = g_type_class_peek_parent( class ); gobject_class->finalize = vobject_finalize; object_class->destroy = vobject_destroy; /* Create signals. */ /* Init default methods. */ class->refresh = vobject_real_refresh; class->link = vobject_real_link; /* Static init. */ vobject_dirty = queue_new(); } static void vobject_init( vObject *vobject ) { /* Init our instance fields. */ vobject->iobject = NULL; vobject->changed_sid = 0; vobject->destroy_sid = 0; vobject->dirty = FALSE; /* All new vobjects will need refreshing. */ vobject_refresh_queue( vobject ); } GtkType vobject_get_type( void ) { static GtkType vobject_type = 0; if( !vobject_type ) { static const GtkTypeInfo vobject_info = { "vObject", sizeof( vObject ), sizeof( vObjectClass ), (GtkClassInitFunc) vobject_class_init, (GtkObjectInitFunc) vobject_init, /* reserved_1 */ NULL, /* reserved_2 */ NULL, (GtkClassInitFunc) NULL, }; vobject_type = gtk_type_unique( GTK_TYPE_VBOX, &vobject_info ); } return( vobject_type ); } /* Trigger the refresh method for a vobject immediately ... we usually queue * and wait for idle, but this can be better for interactive stuff. */ void * vobject_refresh( vObject *vobject ) { vObjectClass *vobject_class = VOBJECT_GET_CLASS( vobject ); if( vobject_class->refresh ) vobject_class->refresh( vobject ); return( NULL ); } nip2-8.7.0/src/statusview.h0000644000175000017500000000423413224651032012476 00000000000000/* Decls for statusview.c ... display image info and mouse posn */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_STATUSVIEW (statusview_get_type()) #define STATUSVIEW( obj ) (GTK_CHECK_CAST( (obj), TYPE_STATUSVIEW, Statusview )) #define STATUSVIEW_CLASS( klass ) \ (GTK_CHECK_CLASS_CAST( (klass), TYPE_STATUSVIEW, StatusviewClass )) #define IS_STATUSVIEW( obj ) (GTK_CHECK_TYPE( (obj), TYPE_STATUSVIEW )) #define IS_STATUSVIEW_CLASS( klass ) \ (GTK_CHECK_CLASS_TYPE( (klass), TYPE_STATUSVIEW )) /* A band element display in the status bar. */ typedef struct _StatusviewBand { Statusview *sv; /* Bar we're in */ int bandno; /* Band we extract */ GtkWidget *val; /* Label we write to */ } StatusviewBand; struct _Statusview { GtkFrame parent_class; Imagemodel *imagemodel; guint changed_sid; GtkWidget *top; /* Top label */ GtkWidget *pos; /* Position */ GtkWidget *hb; /* Band element hbox */ GtkWidget *mag; /* Magnification display */ GSList *bands; /* List of StatusviewBand */ int nb; /* Last number of bands we saw */ int fmt; /* The last bandfmt we set ... for spacing */ }; typedef struct _StatusviewClass { GtkFrameClass parent_class; /* My methods. */ } StatusviewClass; GtkType statusview_get_type( void ); Statusview *statusview_new( Imagemodel *imagemodel ); void statusview_mouse( Statusview *sv, int x, int y ); nip2-8.7.0/src/tree.c0000644000175000017500000002337113224651032011215 00000000000000/* Build parse trees. */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #include "ip.h" /* Free any stuff attached to a ParseConst. */ void tree_const_destroy( ParseConst *pc ) { if( pc->type == PARSE_CONST_STR ) IM_FREE( pc->val.str ); pc->type = PARSE_CONST_NONE; } void tree_const_copy( ParseConst *from, ParseConst *to ) { *to = *from; if( to->type == PARSE_CONST_STR && to->val.str ) to->val.str = im_strdupn( to->val.str ); } /* Free a parse node. */ void * tree_node_destroy( ParseNode *n ) { switch( n->type ) { case NODE_PATTERN_CLASS: case NODE_TAG: IM_FREE( n->tag ); break; case NODE_CONST: tree_const_destroy( &n->con ); break; case NODE_LISTCONST: case NODE_SUPER: IM_FREEF( g_slist_free, n->elist ); break; case NODE_APPLY: case NODE_CLASS: case NODE_BINOP: case NODE_UOP: case NODE_LEAF: case NODE_GENERATOR: case NODE_NONE: case NODE_COMPOSE: break; default: g_assert( FALSE ); } IM_FREE( n ); return( NULL ); } /* Make an empty parse node. */ static ParseNode * tree_new( Compile *compile ) { ParseNode *no = INEW( NULL, ParseNode ); no->compile = compile; no->type = NODE_NONE; no->biop = BI_NONE; no->uop = UN_NONE; no->arg1 = NULL; no->arg2 = NULL; no->arg3 = NULL; no->leaf = NULL; no->klass = NULL; no->elist = NULL; no->tag = NULL; no->con.type = PARSE_CONST_NONE; no->con.val.str = NULL; compile->treefrag = g_slist_prepend( compile->treefrag, no ); return( no ); } /* Make a binary operator node. */ ParseNode * tree_binop_new( Compile *compile, BinOp op, ParseNode *l, ParseNode *r ) { ParseNode *no = tree_new( compile ); no->type = NODE_BINOP; no->biop = op; no->arg1 = l; no->arg2 = r; return( no ); } /* Make a function compose node. */ ParseNode * tree_compose_new( Compile *compile, ParseNode *f, ParseNode *g ) { ParseNode *no = tree_new( compile ); no->type = NODE_COMPOSE; no->arg1 = f; no->arg2 = g; return( no ); } /* Make a generator node. */ ParseNode * tree_generator_new( Compile *compile, ParseNode *s, ParseNode *n, ParseNode *f ) { ParseNode *no = tree_new( compile ); no->type = NODE_GENERATOR; no->arg1 = s; no->arg2 = n; no->arg3 = f; return( no ); } /* Make an IF node. */ ParseNode * tree_ifelse_new( Compile *compile, ParseNode *c, ParseNode *t, ParseNode *e ) { ParseNode *else_node = tree_lconst_new( compile, e ); ParseNode *then_node = tree_lconst_extend( compile, else_node, t ); ParseNode *if_node = tree_binop_new( compile, BI_IF, c, then_node ); return( if_node ); } /* Make a class node. */ ParseNode * tree_class_new( Compile *compile ) { ParseNode *no = tree_new( compile ); Symbol *this, *super, *name, *cons; g_assert( !compile->is_klass ); g_assert( !compile->this ); g_assert( !compile->super ); no->type = NODE_CLASS; no->klass = compile; /* Make enclosing into a class. */ compile->is_klass = TRUE; /* Add builtin syms. */ this = symbol_new_defining( compile, MEMBER_THIS ); (void) symbol_parameter_builtin_init( this ); compile->this = this; super = symbol_new_defining( compile, MEMBER_SUPER ); (void) symbol_user_init( super ); (void) compile_new_local( super->expr ); symbol_made( super ); compile->super = super; name = symbol_new_defining( compile, MEMBER_NAME ); (void) symbol_parameter_builtin_init( name ); cons = symbol_new_defining( compile, IOBJECT( compile->sym )->name ); (void) symbol_user_init( cons ); (void) compile_new_local( cons->expr ); cons->expr->compile->tree = tree_leafsym_new( compile, compile->sym ); symbol_made( cons ); return( no ); } /* Make a tag node. */ ParseNode * tree_tag_new( Compile *compile, const char *r ) { ParseNode *no = tree_new( compile ); no->type = NODE_TAG; no->tag = im_strdupn( r ); return( no ); } /* Make a unary operator node. */ ParseNode * tree_unop_new( Compile *compile, UnOp op, ParseNode *a ) { ParseNode *no = tree_new( compile ); no->type = NODE_UOP; no->uop = op; no->arg1 = a; return( no ); } ParseNode * tree_leaf_new( Compile *compile, const char *name ) { ParseNode *no = tree_new( compile ); no->type = NODE_LEAF; no->leaf = symbol_new_reference( compile, name ); /* Have we a reference to a ZOMBIE? If yes, we may need to patch this * leaf to point to a new symbol. Add the leaf's pointer to the * refedat list on the ZOMBIE. */ if( no->leaf->type == SYM_ZOMBIE ) (void) symbol_patch_add( (void **) &no->leaf, no->leaf ); return( no ); } /* Make a new leaf node ... except we know the final symbol now. */ ParseNode * tree_leafsym_new( Compile *compile, Symbol *sym ) { ParseNode *no = tree_new( compile ); /* Fill fields. */ no->type = NODE_LEAF; no->leaf = sym; /* Note that this compile refs this sym. */ compile_link_make( compile, sym ); /* Have we a reference to a ZOMBIE? If yes, we may need to patch this * leaf to point to a new symbol. Add the leaf's pointer to the * refedat list on the ZOMBIE. */ if( sym->type == SYM_ZOMBIE ) (void) symbol_patch_add( (void **) &no->leaf, sym ); return( no ); } /* Init a clist. */ ParseNode * tree_lconst_new( Compile *compile, ParseNode *a ) { ParseNode *no = tree_new( compile ); /* Fill fields. */ no->type = NODE_LISTCONST; no->elist = NULL; no->elist = g_slist_prepend( no->elist, a ); return( no ); } /* Extend a clist. */ ParseNode * tree_lconst_extend( Compile *compile, ParseNode *base, ParseNode *new ) { g_assert( base->type == NODE_LISTCONST ); base->elist = g_slist_prepend( base->elist, new ); return( base ); } /* Init a super. */ ParseNode * tree_super_new( Compile *compile ) { ParseNode *no = tree_new( compile ); no->type = NODE_SUPER; return( no ); } /* Extend a super. */ ParseNode * tree_super_extend( Compile *compile, ParseNode *base, ParseNode *new ) { g_assert( base->type == NODE_SUPER ); base->elist = g_slist_append( base->elist, new ); return( base ); } /* Make a new constant node. */ ParseNode * tree_const_new( Compile *compile, ParseConst n ) { ParseNode *no = tree_new( compile ); no->type = NODE_CONST; no->con = n; return( no ); } /* Make a new apply node. */ ParseNode * tree_appl_new( Compile *compile, ParseNode *l, ParseNode *r ) { ParseNode *no = tree_new( compile ); no->type = NODE_APPLY; no->arg1 = l; no->arg2 = r; return( no ); } ParseNode * tree_pattern_class_new( Compile *compile, const char *class_name, ParseNode *l ) { ParseNode *no = tree_new( compile ); no->type = NODE_PATTERN_CLASS; no->arg1 = l; no->tag = im_strdupn( class_name ); return( no ); } ParseNode * tree_map( Compile *compile, tree_map_fn fn, ParseNode *node, void *a, void *b ) { ParseNode *result; GSList *l; g_assert( node ); if( (result = fn( compile, node, a, b )) ) return( result ); switch( node->type ) { case NODE_GENERATOR: if( (result = tree_map( compile, fn, node->arg1, a, b )) ) return( result ); if( node->arg2 && (result = tree_map( compile, fn, node->arg2, a, b )) ) return( result ); if( node->arg3 && (result = tree_map( compile, fn, node->arg3, a, b )) ) return( result ); break; case NODE_APPLY: case NODE_BINOP: case NODE_COMPOSE: if( (result = tree_map( compile, fn, node->arg1, a, b )) || (result = tree_map( compile, fn, node->arg2, a, b )) ) return( result ); break; case NODE_UOP: if( (result = tree_map( compile, fn, node->arg1, a, b )) ) return( result ); break; case NODE_SUPER: case NODE_LISTCONST: for( l = node->elist; l; l = l->next ) { ParseNode *arg = (ParseNode *) l->data; if( (result = tree_map( compile, fn, arg, a, b )) ) return( result ); } break; case NODE_LEAF: case NODE_CLASS: case NODE_TAG: case NODE_CONST: break; case NODE_NONE: default: g_assert( FALSE ); } return( NULL ); } /* Copy a tree to a new context. Make all symbols afresh ... you need to link * after calling this. */ ParseNode * tree_copy( Compile *compile, ParseNode *node ) { ParseNode *copy; GSList *l; g_assert( node ); switch( node->type ) { case NODE_GENERATOR: case NODE_APPLY: case NODE_BINOP: case NODE_COMPOSE: case NODE_UOP: case NODE_TAG: case NODE_CONST: case NODE_PATTERN_CLASS: copy = tree_new( compile ); copy->type = node->type; copy->uop = node->uop; copy->biop = node->biop; if( node->tag ) copy->tag = im_strdupn( node->tag ); tree_const_copy( &node->con, ©->con ); if( node->arg1 ) copy->arg1 = tree_copy( compile, node->arg1 ); if( node->arg2 ) copy->arg2 = tree_copy( compile, node->arg2 ); if( node->arg3 ) copy->arg3 = tree_copy( compile, node->arg3 ); break; case NODE_SUPER: case NODE_LISTCONST: copy = tree_new( compile ); for( l = node->elist; l; l = l->next ) { ParseNode *arg = (ParseNode *) l->data; copy->elist = g_slist_append( copy->elist, tree_copy( compile, arg ) ); } copy->type = node->type; break; case NODE_CLASS: copy = tree_class_new( compile ); break; case NODE_LEAF: copy = tree_leaf_new( compile, IOBJECT( node->leaf )->name ); break; case NODE_NONE: default: copy = NULL; g_assert( FALSE ); } return( copy ); } nip2-8.7.0/src/iregionview.c0000644000175000017500000000366313224651032012607 00000000000000/* display a region in a workspace */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #include "ip.h" static iImageviewClass *parent_class = NULL; static void iregionview_class_init( iRegionviewClass *class ) { parent_class = g_type_class_peek_parent( class ); /* Create signals. */ /* Init methods. */ } static void iregionview_init( iRegionview *iregionview ) { #ifdef DEBUG printf( "iregionview_init\n" ); #endif /*DEBUG*/ } GtkType iregionview_get_type( void ) { static GtkType iregionview_type = 0; if( !iregionview_type ) { static const GtkTypeInfo info = { "iRegionview", sizeof( iRegionview ), sizeof( iRegionviewClass ), (GtkClassInitFunc) iregionview_class_init, (GtkObjectInitFunc) iregionview_init, /* reserved_1 */ NULL, /* reserved_2 */ NULL, (GtkClassInitFunc) NULL, }; iregionview_type = gtk_type_unique( TYPE_IIMAGEVIEW, &info ); } return( iregionview_type ); } View * iregionview_new( void ) { iRegionview *iregionview = gtk_type_new( TYPE_IREGIONVIEW ); #ifdef DEBUG printf( "iregionview_new\n" ); #endif /*DEBUG*/ return( VIEW( iregionview ) ); } nip2-8.7.0/src/plot.h0000644000175000017500000000530213224651032011233 00000000000000/* a plot in a workspace */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_PLOT (plot_get_type()) #define PLOT( obj ) \ (G_TYPE_CHECK_INSTANCE_CAST( (obj), TYPE_PLOT, Plot )) #define PLOT_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_CAST( (klass), TYPE_PLOT, PlotClass)) #define IS_PLOT( obj ) \ (G_TYPE_CHECK_INSTANCE_TYPE( (obj), TYPE_PLOT )) #define IS_PLOT_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_TYPE( (klass), TYPE_PLOT )) #define PLOT_GET_CLASS( obj ) \ (G_TYPE_INSTANCE_GET_CLASS( (obj), TYPE_PLOT, PlotClass )) typedef enum { PLOT_FORMAT_YYYY = 0, PLOT_FORMAT_XYYY, PLOT_FORMAT_XYXY, PLOT_FORMAT_LAST } PlotFormat; typedef enum { PLOT_STYLE_POINT = 0, PLOT_STYLE_LINE, PLOT_STYLE_SPLINE, PLOT_STYLE_BAR, PLOT_STYLE_LAST } PlotStyle; /* Magic number for 'range value unset' (ie. should auto-range). */ #define PLOT_RANGE_UNSET (-999999) struct _Plot { Classmodel model; /* Base class fields. */ ImageValue value; PlotFormat format; PlotStyle style; char *caption; char *xcaption; char *ycaption; GSList *series_captions; double xmin; double xmax; double ymin; double ymax; /* Unpack image to a set of xy columns here. */ double **xcolumn; double **ycolumn; int rows; int columns; /* Save x/y/mag/status here. Init plot windows from this, save and * load from workspaces. */ gboolean show_status; int mag; int left, top; /* Private ... build iobject caption here. */ VipsBuf caption_buffer; }; typedef struct _PlotClass { ClassmodelClass parent_class; /* My methods. */ } PlotClass; GType plot_get_type( void ); char *plot_f2c( PlotFormat format ); char *plot_s2c( PlotStyle style ); #ifdef HAVE_LIBGOFFICE GogPlot *plot_new_gplot( Plot *plot ); void plot_style_main( Plot *plot, GogChart *gchart ); void plot_style_thumbnail( Plot *plot, GogChart *gchart ); Imageinfo *plot_to_image( Plot *plot, Reduce *rc, double dpi ); #endif /*HAVE_LIBGOFFICE*/ nip2-8.7.0/src/action.h0000644000175000017500000000167013224651032011536 00000000000000/* Graph actions. */ /* A strict action on the graph. */ typedef void (*ActionFn)( Reduce *, Compile *, int, const char *, HeapNode **, PElement *, void * ); /* A sort of reducer (eg. lazy or strict, or hyperstrict) */ typedef void (*ReduceFunction)( Reduce *, PElement * ); #define OPERATOR_NAME( OP ) ( \ (int) (OP) >= 0 && (int) (OP) < noperator_table ? \ operator_table[(int) (OP)] : "" \ ) extern const char *operator_table[]; extern const int noperator_table; void action_proc_uop( Reduce *rc, Compile *compile, int op, const char *name, HeapNode **arg, PElement *out ); void action_proc_construct( Reduce *rc, Compile *compile, HeapNode **arg, PElement *out ); void action_proc_bop( Reduce *rc, Compile *compile, BinOp bop, HeapNode **arg ); void action_dispatch( Reduce *rc, Compile *compile, ReduceFunction rfn, int op, const char *name, gboolean override, ActionFn afn, int nargs, HeapNode **arg, void *user ); nip2-8.7.0/src/iwindow.h0000644000175000017500000001577313224651032011752 00000000000000/* make and manage windows ... subclass off this for dialog boxes */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifndef IWINDOW_H #define IWINDOW_H #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #define TYPE_IWINDOW (iwindow_get_type()) #define IWINDOW( obj ) (GTK_CHECK_CAST( (obj), TYPE_IWINDOW, iWindow )) #define IWINDOW_CLASS( klass ) \ (GTK_CHECK_CLASS_CAST( (klass), TYPE_IWINDOW, iWindowClass )) #define IS_IWINDOW( obj ) (GTK_CHECK_TYPE( (obj), TYPE_IWINDOW )) #define IS_IWINDOW_CLASS( klass ) \ (GTK_CHECK_CLASS_TYPE( (klass), TYPE_IWINDOW )) #define IWINDOW_GET_CLASS( obj ) \ (GTK_CHECK_GET_CLASS( (obj), TYPE_IWINDOW, iWindowClass )) typedef struct _iWindow iWindow; /* Our cursor shapes. */ typedef enum _iWindowShape { /* Tool shapes. */ IWINDOW_SHAPE_DROPPER = 0, IWINDOW_SHAPE_PEN, IWINDOW_SHAPE_SMUDGE, IWINDOW_SHAPE_SMEAR, IWINDOW_SHAPE_TEXT, IWINDOW_SHAPE_RECT, IWINDOW_SHAPE_FLOOD, IWINDOW_SHAPE_MOVE, IWINDOW_SHAPE_EDIT, IWINDOW_SHAPE_MAGIN, IWINDOW_SHAPE_MAGOUT, /* Resize shapes. */ IWINDOW_SHAPE_TOP, IWINDOW_SHAPE_BOTTOM, IWINDOW_SHAPE_LEFT, IWINDOW_SHAPE_RIGHT, IWINDOW_SHAPE_TOPRIGHT, IWINDOW_SHAPE_TOPLEFT, IWINDOW_SHAPE_BOTTOMRIGHT, IWINDOW_SHAPE_BOTTOMLEFT, /* Watch positions. */ IWINDOW_SHAPE_HGLASS1, IWINDOW_SHAPE_HGLASS2, IWINDOW_SHAPE_HGLASS3, IWINDOW_SHAPE_HGLASS4, IWINDOW_SHAPE_HGLASS5, IWINDOW_SHAPE_HGLASS6, IWINDOW_SHAPE_HGLASS7, IWINDOW_SHAPE_HGLASS8, /* No shape set (shape we inherit). */ IWINDOW_SHAPE_NONE, IWINDOW_SHAPE_LAST } iWindowShape; /* Keep a set of these, one for each of the clients who might want to set the * shape for a window. */ typedef struct { iWindow *iwnd; int priority; /* Higher priority == more on top */ const char *name; /* For debugging */ /* Shape currently requested by this user. */ iWindowShape shape; } iWindowCursorContext; /* The result from a window/dialog/whatever ... not just a bool. */ typedef enum iwindow_result { IWINDOW_ERROR = 0, /* Tried but failed */ IWINDOW_YES, /* User tried the action */ IWINDOW_NO /* User cancelled */ } iWindowResult; /* Our callbacks don't return iWindowResult, instead * they are given a notify function (plus an environment parameter) which * they use to inform their caller of their iWindowResult. */ typedef void (*iWindowNotifyFn)( void *, iWindowResult ); /* What our callbacks look like. */ typedef void (*iWindowFn)( iWindow *, void *, iWindowNotifyFn, void * ); /* Build function for window contents. */ typedef void (*iWindowBuildFn)( iWindow *, GtkWidget *, void *, void *, void * ); /* A suspension ... an iWindowFn plus a set of args we are saving for later. */ typedef struct { iWindowFn fn; iWindow *iwnd; void *client; iWindowNotifyFn nfn; void *sys; } iWindowSusp; #define IWINDOW_SUSP( X ) ((iWindowSusp *) (X)) struct _iWindow { GtkWindow parent_object; /* Parent window. Used for (eg.) image displays windows which we need * to float over the main workspace. */ GtkWidget *parent; /* Our parent widget */ iWindow *parent_window; /* Our parent window */ guint parent_unmap_sid; /* Watch parent death here */ GtkWidget *work; GtkAccelGroup *accel_group; Infobar *infobar; char *title; /* Action stuff. We init this and add a few common actions to help out * subclasses. */ GtkActionGroup *action_group; GtkUIManager *ui_manager; /* Per instance build function. */ iWindowBuildFn build; void *build_a, *build_b, *build_c; /* Called before cancellable popdown ... _TRUE from this will * destroy window, _FALSE won't, _ERROR won't and pops an error box. */ iWindowFn popdown; void *popdown_a; /* Notify handling. */ gboolean destroy; /* True if being destroyed */ int pending; /* Number of notifies waiting on */ /* Cursor handling. */ iWindowShape shape; /* Global shape ... for hglass */ GSList *contexts; /* Set of other requested shapes */ GdkWindow *work_window; /* The window we actually set */ /* Size memorization. */ const char *width_pref; /* Prefs we save width/height in */ const char *height_pref; }; typedef struct _iWindowClass { GtkWindowClass parent_class; /* Per class build/popdown functions. */ void (*build)( GtkWidget * ); void (*popdown)( GtkWidget * ); /* Whether windows of this class should be marked as transient for * their parents (eg. dialogs usually are). */ gboolean transient; } iWindowClass; int iwindow_number( void ); iWindow *iwindow_pick_one( void ); typedef void (*iWindowMapFn)( iWindow *, void * ); void *iwindow_map_all( iWindowMapFn fn, void *a ); iWindowCursorContext *iwindow_cursor_context_new( iWindow *, int, const char * ); void iwindow_cursor_context_set_cursor( iWindowCursorContext *, iWindowShape ); void iwindow_cursor_context_destroy( iWindowCursorContext *cntxt ); iWindowSusp *iwindow_susp_new( iWindowFn, iWindow *, void *, iWindowNotifyFn, void * ); void iwindow_susp_trigger( iWindowSusp * ); void iwindow_susp_return( void *, iWindowResult ); void iwindow_susp_comp( void *, iWindowResult ); void iwindow_notify_send( iWindow *iwnd, iWindowFn fn, void *client, iWindowNotifyFn back, void *sys ); void iwindow_notify_return( iWindow *iwnd ); void iwindow_true_cb( iWindow *, void *, iWindowNotifyFn nfn, void *sys ); void iwindow_false_cb( iWindow *, void *, iWindowNotifyFn nfn, void *sys ); void iwindow_notify_null( void *client, iWindowResult result ); GtkType iwindow_get_type( void ); GtkWidget *iwindow_new( GtkWindowType ); void iwindow_set_title( iWindow *, const char *, ... ) __attribute__((format(printf, 2, 3))); void iwindow_set_build( iWindow *, iWindowBuildFn, void *, void *, void * ); void iwindow_set_popdown( iWindow *, iWindowFn, void * ); void iwindow_set_size_prefs( iWindow *, const char *, const char * ); void iwindow_set_work_window( iWindow *iwnd, GdkWindow *work_window ); void iwindow_set_parent( iWindow *, GtkWidget *par ); void iwindow_build( iWindow * ); void *iwindow_kill( iWindow * ); void iwindow_kill_action_cb( GtkAction *action, iWindow *iwnd ); GtkWidget *iwindow_get_root( GtkWidget *widget ); GtkWidget *iwindow_get_root_noparent( GtkWidget *widget ); void iwindow_alert( GtkWidget *parent, GtkMessageType type ); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* IWINDOW_H */ nip2-8.7.0/src/matrix.h0000644000175000017500000000565313224651032011572 00000000000000/* a matrix in a workspace */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_MATRIX (matrix_get_type()) #define MATRIX( obj ) \ (G_TYPE_CHECK_INSTANCE_CAST( (obj), TYPE_MATRIX, Matrix )) #define MATRIX_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_CAST( (klass), TYPE_MATRIX, MatrixClass)) #define IS_MATRIX( obj ) \ (G_TYPE_CHECK_INSTANCE_TYPE( (obj), TYPE_MATRIX )) #define IS_MATRIX_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_TYPE( (klass), TYPE_MATRIX )) #define MATRIX_GET_CLASS( obj ) \ (G_TYPE_INSTANCE_GET_CLASS( (obj), TYPE_MATRIX, MatrixClass )) /* What kind of ui bits have we asked for for this matrix? */ typedef enum { MATRIX_DISPLAY_TEXT = 0, /* Set of text widgets */ MATRIX_DISPLAY_SLIDER, /* Set of sliders */ MATRIX_DISPLAY_TOGGLE, /* Set of 3 value toggles */ MATRIX_DISPLAY_TEXT_SCALE_OFFSET,/* Text, with scale/offset widgets */ MATRIX_DISPLAY_LAST } MatrixDisplayType; typedef struct _Matrix { Classmodel model; /* Base class fields. */ MatrixValue value; /* Other class fields. */ MatrixDisplayType display; /* Display as */ double scale; double offset; /* Is there a current selection on the matrixview? And if there is, * the cells it covers. */ gboolean selected; Rect range; } Matrix; typedef struct _MatrixClass { ClassmodelClass parent_class; /* My methods. */ } MatrixClass; gboolean matrix_value_resize( MatrixValue *value, int width, int height ); GType matrix_get_type( void ); /* Select rectangular areas of matricies. */ void matrix_select( Matrix *matrix, int left, int top, int width, int height ); void matrix_deselect( Matrix *matrix ); void matrix_dmask_to_ip( DOUBLEMASK *dmask, VipsBuf *buf ); gboolean matrix_dmask_to_heap( Heap *heap, DOUBLEMASK *dmask, PElement *out ); DOUBLEMASK *matrix_imask_to_dmask( INTMASK *imask ); INTMASK *matrix_dmask_to_imask( DOUBLEMASK *dmask ); gboolean matrix_imask_to_heap( Heap *heap, INTMASK *imask, PElement *out ); DOUBLEMASK *matrix_ip_to_dmask( PElement *root ); INTMASK *matrix_ip_to_imask( PElement *root ); DOUBLEMASK *matrix_model_to_dmask( Matrix *matrix ); gboolean matrix_dmask_to_model( Matrix *matrix, DOUBLEMASK *dmask ); nip2-8.7.0/src/iregion.h0000644000175000017500000000535713224651032011723 00000000000000/* a ip region class in a workspace */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_IREGION (iregion_get_type()) #define IREGION( obj ) \ (G_TYPE_CHECK_INSTANCE_CAST( (obj), TYPE_IREGION, iRegion )) #define IREGION_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_CAST( (klass), TYPE_IREGION, iRegionClass)) #define IS_IREGION( obj ) \ (G_TYPE_CHECK_INSTANCE_TYPE( (obj), TYPE_IREGION )) #define IS_IREGION_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_TYPE( (klass), TYPE_IREGION )) #define IREGION_GET_CLASS( obj ) \ (G_TYPE_INSTANCE_GET_CLASS( (obj), TYPE_IREGION, iRegionClass )) /* Handy for indexing arrays. */ typedef enum iRegionType { IREGION_MARK = 0, IREGION_HGUIDE, IREGION_VGUIDE, IREGION_ARROW, IREGION_REGION, IREGION_AREA } iRegionType; /* Our instance vars ... packaged up for code sharing. */ typedef struct { /* Stuff from the heap. */ Element image_class; /* Child image class */ Imageinfo *ii; Rect area; /* Client display stuff. */ Classmodel *classmodel; iRegiongroup *iregiongroup; } iRegionInstance; struct _iRegion { iImage parent_class; /* Class fields shared with iarrow.c. */ iRegionInstance instance; }; typedef struct _iRegionClass { iImageClass parent_class; /* My methods. */ } iRegionClass; void iregion_instance_destroy( iRegionInstance *instance ); void iregion_instance_init( iRegionInstance *instance, Classmodel *classmodel ); gboolean iregion_instance_update( iRegionInstance *instance, PElement *root ); void iregion_edit( GtkWidget *parent, Model *model ); void iregion_parent_add( iContainer *child ); xmlNode *iregion_save( Model *model, xmlNode *xnode ); gboolean iregion_load( Model *model, ModelLoadState *state, Model *parent, xmlNode *xnode ); void *iregion_update_heap( Heapmodel *heapmodel ); gboolean iregion_class_get( Classmodel *classmodel, PElement *root ); gboolean iregion_class_new( Classmodel *classmodel, PElement *fn, PElement *out ); GType iregion_get_type( void ); nip2-8.7.0/src/rhsview.h0000644000175000017500000000325213224651032011746 00000000000000/* the rhs of a tallyrow ... group together everything to the right of the * button */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_RHSVIEW (rhsview_get_type()) #define RHSVIEW( obj ) (GTK_CHECK_CAST( (obj), TYPE_RHSVIEW, Rhsview )) #define RHSVIEW_CLASS( klass ) \ (GTK_CHECK_CLASS_CAST( (klass), TYPE_RHSVIEW, RhsviewClass )) #define IS_RHSVIEW( obj ) (GTK_CHECK_TYPE( (obj), TYPE_RHSVIEW )) #define IS_RHSVIEW_CLASS( klass ) \ (GTK_CHECK_CLASS_TYPE( (klass), TYPE_RHSVIEW )) struct _Rhsview { View item; Rowview *rview; View *graphic; /* Our three elements */ View *scol; View *itext; GtkWidget *table; /* Lay out elements in this */ RhsFlags flags; /* Last vis set we set */ }; typedef struct _RhsviewClass { ViewClass parent_class; /* My methods. */ } RhsviewClass; GtkType rhsview_get_type( void ); View *rhsview_new( void ); nip2-8.7.0/src/cache.h0000644000175000017500000000213413224651032011320 00000000000000/* Call vips functions from the graph reducer. */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ extern int cache_history_size; void cache_tochar_trace( CallInfo *vi, int i, VipsBuf *buf ); void cache_history_remove( CallInfo *vi ); CallInfo *cache_dispatch( CallInfo *vi, PElement *out ); nip2-8.7.0/src/optionview.h0000644000175000017500000000332513224651032012463 00000000000000/* a optionview in a workspace */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_OPTIONVIEW (optionview_get_type()) #define OPTIONVIEW( obj ) (GTK_CHECK_CAST( (obj), TYPE_OPTIONVIEW, Optionview )) #define OPTIONVIEW_CLASS( klass ) \ (GTK_CHECK_CLASS_CAST( (klass), TYPE_OPTIONVIEW, OptionviewClass )) #define IS_OPTIONVIEW( obj ) (GTK_CHECK_TYPE( (obj), TYPE_OPTIONVIEW )) #define IS_OPTIONVIEW_CLASS( klass ) \ (GTK_CHECK_CLASS_TYPE( (klass), TYPE_OPTIONVIEW )) typedef struct _Optionview { Graphicview parent_object; GtkWidget *label; GtkWidget *hbox; GtkWidget *options; /* The [[char]] we set on the previous refresh. Use this to avoid * rebuilding the optionmenu unless we have to. */ GSList *labels; } Optionview; typedef struct _OptionviewClass { GraphicviewClass parent_class; /* My methods. */ } OptionviewClass; GtkType optionview_get_type( void ); View *optionview_new( void ); nip2-8.7.0/src/toolkitgroupview.h0000644000175000017500000000342313224651032013714 00000000000000/* a view of a toolkitgroup */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_TOOLKITGROUPVIEW (toolkitgroupview_get_type()) #define TOOLKITGROUPVIEW( obj ) \ (GTK_CHECK_CAST( (obj), TYPE_TOOLKITGROUPVIEW, Toolkitgroupview )) #define TOOLKITGROUPVIEW_CLASS( klass ) \ (GTK_CHECK_CLASS_CAST( (klass), TYPE_TOOLKITGROUPVIEW, \ ToolkitgroupviewClass )) #define IS_TOOLKITGROUPVIEW( obj ) \ (GTK_CHECK_TYPE( (obj), TYPE_TOOLKITGROUPVIEW )) #define IS_TOOLKITGROUPVIEW_CLASS( klass ) \ (GTK_CHECK_CLASS_TYPE( (klass), TYPE_TOOLKITGROUPVIEW )) struct _Toolkitgroupview { View parent_class; GtkWidget *menu; /* Display the toolkits in this */ Mainw *mainw; /* Mainw these menu items act on */ }; typedef struct _ToolkitgroupviewClass { ViewClass parent_class; /* My methods. */ } ToolkitgroupviewClass; GtkType toolkitgroupview_get_type( void ); View *toolkitgroupview_new( void ); void toolkitgroupview_set_mainw( Toolkitgroupview *kitgview, Mainw *mainw ); nip2-8.7.0/src/stringview.h0000644000175000017500000000277413224651032012470 00000000000000/* edit a string */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_STRINGVIEW (stringview_get_type()) #define STRINGVIEW( obj ) (GTK_CHECK_CAST( (obj), TYPE_STRINGVIEW, Stringview )) #define STRINGVIEW_CLASS( klass ) \ (GTK_CHECK_CLASS_CAST( (klass), TYPE_STRINGVIEW, StringviewClass )) #define IS_STRINGVIEW( obj ) (GTK_CHECK_TYPE( (obj), TYPE_STRINGVIEW )) #define IS_STRINGVIEW_CLASS( klass ) \ (GTK_CHECK_CLASS_TYPE( (klass), TYPE_STRINGVIEW )) typedef struct _Stringview { Editview parent_object; } Stringview; typedef struct _StringviewClass { EditviewClass parent_class; /* My methods. */ } StringviewClass; GtkType stringview_get_type( void ); View *stringview_new( void ); nip2-8.7.0/src/imageinfo.c0000644000175000017500000015671513224651032012225 00000000000000/* image management ... a layer over the VIPS IMAGE type */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* jobs: - reference counting layer ... in Managed base class, plus links to heap garbage collection - filesystem tracking: we stat open files and signal file_changed if we see a change - cache: several open( "fred.v" )s share a single Imageinfo, provided their mtimes are all the same - lookup table management ... if an operation can work with pixel lookup tables (found by examining a flag in the VIPS function descriptor), then instead of operating on the image, the operation runs on the LUT associated with that image ... Imageinfo tracks the LUTs representing delayed eval - dependency tracking ... an imageinfo can require several other imageinfos to be open for it to work properly; we follow these dependencies, and delay destroying an imageinfo until it's not required by any others - temp file management ... we can make temp images on disc; we unlink() these temps when they're no longer needed - imageinfo/expr association tracking ... we track when an expr receives an imageinfo as its value; the info is used to get region views to display in the right image ... see expr_real_new_value() - paint stuff: also undo/redo buffers, each with a "*_changed" signal */ /* more stuff: while we transition to vips8, also use imageinfo to wrap VipsImage most of the jobs above are pushed down into vips8 now ... except for - reference counting layer ... in Managed base class - filesystem tracking: we stat open files and signal file_changed if we see a change - cache: several open( "fred.v" )s share a single Imageinfo, provided their mtimes are all the same */ #include "ip.h" /* #define DEBUG #define DEBUG_MAKE #define DEBUG_RGB #define DEBUG_OPEN #define DEBUG_CHECK */ static iContainerClass *imageinfogroup_parent_class = NULL; static void imageinfogroup_finalize( GObject *gobject ) { Imageinfogroup *imageinfogroup = IMAGEINFOGROUP( gobject ); IM_FREEF( g_hash_table_destroy, imageinfogroup->filename_hash ); G_OBJECT_CLASS( imageinfogroup_parent_class )->finalize( gobject ); } static void imageinfogroup_child_add( iContainer *parent, iContainer *child, int pos ) { Imageinfogroup *imageinfogroup = IMAGEINFOGROUP( parent ); Imageinfo *imageinfo = IMAGEINFO( child ); const char *name = IOBJECT( imageinfo )->name; GSList *hits; hits = (GSList *) g_hash_table_lookup( imageinfogroup->filename_hash, name ); hits = g_slist_prepend( hits, imageinfo ); g_hash_table_insert( imageinfogroup->filename_hash, (gpointer) name, (gpointer) hits ); ICONTAINER_CLASS( imageinfogroup_parent_class )-> child_add( parent, child, pos ); } static void imageinfogroup_child_remove( iContainer *parent, iContainer *child ) { Imageinfogroup *imageinfogroup = IMAGEINFOGROUP( parent ); Imageinfo *imageinfo = IMAGEINFO( child ); const char *name = IOBJECT( imageinfo )->name; GSList *hits; hits = (GSList *) g_hash_table_lookup( imageinfogroup->filename_hash, name ); g_assert( hits ); hits = g_slist_remove( hits, imageinfo ); /* child is going away (probably), so we don't want to link hits back * on again with child->name as the key ... if possible, look down * hits for another name we can use instead. */ if( hits ) { const char *new_name = IOBJECT( hits->data )->name; g_hash_table_replace( imageinfogroup->filename_hash, (gpointer) new_name, (gpointer) hits ); } else g_hash_table_remove( imageinfogroup->filename_hash, (gpointer) name ); ICONTAINER_CLASS( imageinfogroup_parent_class )-> child_remove( parent, child ); } static void imageinfogroup_class_init( ImageinfogroupClass *class ) { GObjectClass *gobject_class = G_OBJECT_CLASS( class ); iContainerClass *icontainer_class = ICONTAINER_CLASS( class ); imageinfogroup_parent_class = g_type_class_peek_parent( class ); gobject_class->finalize = imageinfogroup_finalize; icontainer_class->child_add = imageinfogroup_child_add; icontainer_class->child_remove = imageinfogroup_child_remove; } static void imageinfogroup_init( Imageinfogroup *imageinfogroup ) { #ifdef DEBUG printf( "imageinfogroup_init\n" ); #endif /*DEBUG*/ imageinfogroup->filename_hash = g_hash_table_new( g_str_hash, g_str_equal ); } GType imageinfogroup_get_type( void ) { static GType imageinfogroup_type = 0; if( !imageinfogroup_type ) { static const GTypeInfo info = { sizeof( ImageinfogroupClass ), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) imageinfogroup_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof( Imageinfogroup ), 32, /* n_preallocs */ (GInstanceInitFunc) imageinfogroup_init, }; imageinfogroup_type = g_type_register_static( TYPE_ICONTAINER, "Imageinfogroup", &info, 0 ); } return( imageinfogroup_type ); } Imageinfogroup * imageinfogroup_new( void ) { Imageinfogroup *imageinfogroup = IMAGEINFOGROUP( g_object_new( TYPE_IMAGEINFOGROUP, NULL ) ); return( imageinfogroup ); } static void * imageinfogroup_lookup_test( Imageinfo *imageinfo, struct stat *buf ) { const char *name = IOBJECT( imageinfo )->name; if( name && buf->st_mtime == imageinfo->mtime ) return( imageinfo ); return( NULL ); } /* Look up by filename ... mtimes have to match too. */ static Imageinfo * imageinfogroup_lookup( Imageinfogroup *imageinfogroup, const char *filename ) { GSList *hits; Imageinfo *imageinfo; struct stat buf; if( stat( filename, &buf ) == 0 && (hits = (GSList *) g_hash_table_lookup( imageinfogroup->filename_hash, filename )) && (imageinfo = IMAGEINFO( slist_map( hits, (SListMapFn) imageinfogroup_lookup_test, &buf ) )) ) return( imageinfo ); return( NULL ); } /* Our signals. */ enum { SIG_AREA_CHANGED, /* Area of image has changed: update screen */ SIG_AREA_PAINTED, /* Area of image has been painted */ SIG_UNDO_CHANGED, /* Undo/redo state has changed */ SIG_FILE_CHANGED, /* Underlying file seems to have changed */ SIG_INVALIDATE, /* IMAGE* has been invalidated */ SIG_LAST }; static ManagedClass *parent_class = NULL; static guint imageinfo_signals[SIG_LAST] = { 0 }; #if defined(DEBUG) || defined(DEBUG_OPEN) || defined(DEBUG_RGB) || \ defined(DEBUG_CHECK) || defined(DEBUG_MAKE) static void imageinfo_print( Imageinfo *imageinfo ) { printf( " \"%s\" mtime = %d (%p)\n", IOBJECT( imageinfo )->name, (int) imageinfo->mtime, imageinfo ); } #endif void * imageinfo_area_changed( Imageinfo *imageinfo, Rect *dirty ) { g_assert( IS_IMAGEINFO( imageinfo ) ); #ifdef DEBUG printf( "imageinfo_area_changed: " "left = %d, top = %d, width = %d, height = %d\n", dirty->left, dirty->top, dirty->width, dirty->height ); #endif /*DEBUG*/ g_signal_emit( G_OBJECT( imageinfo ), imageinfo_signals[SIG_AREA_CHANGED], 0, dirty ); return( NULL ); } void * imageinfo_area_painted( Imageinfo *imageinfo, Rect *dirty ) { g_assert( IS_IMAGEINFO( imageinfo ) ); #ifdef DEBUG printf( "imageinfo_area_painted: left = %d, top = %d, " "width = %d, height = %d\n", dirty->left, dirty->top, dirty->width, dirty->height ); #endif /*DEBUG*/ g_signal_emit( G_OBJECT( imageinfo ), imageinfo_signals[SIG_AREA_PAINTED], 0, dirty ); return( NULL ); } static void * imageinfo_undo_changed( Imageinfo *imageinfo ) { g_assert( IS_IMAGEINFO( imageinfo ) ); g_signal_emit( G_OBJECT( imageinfo ), imageinfo_signals[SIG_UNDO_CHANGED], 0 ); return( NULL ); } static void * imageinfo_file_changed( Imageinfo *imageinfo ) { g_assert( IS_IMAGEINFO( imageinfo ) ); #ifdef DEBUG_CHECK printf( "imageinfo_file_changed:" ); imageinfo_print( imageinfo ); #endif /*DEBUG_CHECK*/ g_signal_emit( G_OBJECT( imageinfo ), imageinfo_signals[SIG_FILE_CHANGED], 0 ); return( NULL ); } static void * imageinfo_invalidate( Imageinfo *imageinfo ) { g_assert( IS_IMAGEINFO( imageinfo ) ); #ifdef DEBUG_CHECK printf( "imageinfo_invalidate:" ); imageinfo_print( imageinfo ); #endif /*DEBUG_CHECK*/ g_signal_emit( G_OBJECT( imageinfo ), imageinfo_signals[SIG_INVALIDATE], 0 ); return( NULL ); } void imageinfo_expr_add( Imageinfo *imageinfo, Expr *expr ) { #ifdef DEBUG printf( "imageinfo_expr_add: " ); expr_name_print( expr ); printf( "has imageinfo \"%s\" as value\n", imageinfo->im->filename ); #endif /*DEBUG*/ g_assert( !g_slist_find( imageinfo->exprs, expr ) ); g_assert( !expr->imageinfo ); expr->imageinfo = imageinfo; imageinfo->exprs = g_slist_prepend( imageinfo->exprs, expr ); } void * imageinfo_expr_remove( Expr *expr, Imageinfo *imageinfo ) { #ifdef DEBUG printf( "imageinfo_expr_remove: " ); expr_name_print( expr ); printf( "has lost imageinfo \"%s\" as value\n", imageinfo->im->filename ); #endif /*DEBUG*/ g_assert( expr->imageinfo ); g_assert( g_slist_find( imageinfo->exprs, expr ) ); g_assert( expr->imageinfo == imageinfo ); expr->imageinfo = NULL; imageinfo->exprs = g_slist_remove( imageinfo->exprs, expr ); return( NULL ); } GSList * imageinfo_expr_which( Imageinfo *imageinfo ) { return( imageinfo->exprs ); } /* Find the underlying image in an imageinfo. */ IMAGE * imageinfo_get_underlying( Imageinfo *imageinfo ) { if( imageinfo->underlying ) return( imageinfo_get_underlying( imageinfo->underlying ) ); else return( imageinfo->im ); } /* Free up an undo fragment. */ static void imageinfo_undofragment_free( Undofragment *frag ) { IM_FREEF( im_close, frag->im ); IM_FREE( frag ); } /* Free an undo buffer. */ static void imageinfo_undobuffer_free( Undobuffer *undo ) { slist_map( undo->frags, (SListMapFn) imageinfo_undofragment_free, NULL ); IM_FREEF( g_slist_free, undo->frags ); IM_FREE( undo ); } /* Free all undo information attached to an imageinfo. */ static void imageinfo_undo_free( Imageinfo *imageinfo ) { slist_map( imageinfo->redo, (SListMapFn) imageinfo_undobuffer_free, NULL ); IM_FREEF( g_slist_free, imageinfo->redo ); slist_map( imageinfo->undo, (SListMapFn) imageinfo_undobuffer_free, NULL ); IM_FREEF( g_slist_free, imageinfo->undo ); IM_FREEF( imageinfo_undobuffer_free, imageinfo->cundo ); } static void imageinfo_dispose_eval( Imageinfo *imageinfo ) { imageinfo->monitored = FALSE; /* Make sure any callbacks from the IMAGE stop working. */ if( imageinfo->proxy ) { imageinfo->proxy->imageinfo = NULL; imageinfo->proxy = NULL; } } static void imageinfo_dispose( GObject *gobject ) { Imageinfo *imageinfo = IMAGEINFO( gobject ); #ifdef DEBUG_OPEN printf( "imageinfo_dispose:" ); imageinfo_print( imageinfo ); #endif /*DEBUG_OPEN*/ slist_map( imageinfo->exprs, (SListMapFn) imageinfo_expr_remove, imageinfo ); g_assert( !imageinfo->exprs ); imageinfo_dispose_eval( imageinfo ); IM_FREEF( g_source_remove, imageinfo->check_tid ); G_OBJECT_CLASS( parent_class )->dispose( gobject ); } /* Final death! */ static void imageinfo_finalize( GObject *gobject ) { Imageinfo *imageinfo = IMAGEINFO( gobject ); gboolean isfile = imageinfo->im && im_isfile( imageinfo->im ); #ifdef DEBUG_MAKE printf( "imageinfo_finalize:" ); imageinfo_print( imageinfo ); #endif /*DEBUG_MAKE*/ IM_FREEF( im_close, imageinfo->im ); IM_FREEF( im_close, imageinfo->mapped_im ); IM_FREEF( im_close, imageinfo->identity_lut ); if( imageinfo->dfile && imageinfo->delete_filename && isfile ) { #ifdef DEBUG_OPEN printf( "imageinfo_destroy: unlinking \"%s\"\n", name ); #endif /*DEBUG_OPEN*/ unlinkf( "%s", imageinfo->delete_filename ); iobject_changed( IOBJECT( main_imageinfogroup ) ); } VIPS_FREE( imageinfo->delete_filename ); MANAGED_UNREF( imageinfo->underlying ); imageinfo_undo_free( imageinfo ); G_OBJECT_CLASS( parent_class )->finalize( gobject ); } /* Make an info string about an imageinfo. */ static void imageinfo_info( iObject *iobject, VipsBuf *buf ) { Imageinfo *imageinfo = IMAGEINFO( iobject ); vips_buf_appendi( buf, imageinfo_get( FALSE, imageinfo ) ); /* Don't chain up to parent->info(), we don't want all the other * stuff, this is going to be used for a caption. */ } static void imageinfo_real_area_changed( Imageinfo *imageinfo, Rect *dirty ) { } static void imageinfo_real_area_painted( Imageinfo *imageinfo, Rect *dirty ) { /* Cache attaches to this signal and invalidates on paint. Trigger a * repaint in turn. */ imageinfo_area_changed( imageinfo, dirty ); } static void imageinfo_real_undo_changed( Imageinfo *imageinfo ) { } static void imageinfo_real_file_changed( Imageinfo *imageinfo ) { } static void imageinfo_real_invalidate( Imageinfo *imageinfo ) { } static void imageinfo_class_init( ImageinfoClass *class ) { GObjectClass *gobject_class = G_OBJECT_CLASS( class ); iObjectClass *iobject_class = IOBJECT_CLASS( class ); ManagedClass *managed_class = MANAGED_CLASS( class ); parent_class = g_type_class_peek_parent( class ); gobject_class->dispose = imageinfo_dispose; gobject_class->finalize = imageinfo_finalize; iobject_class->info = imageinfo_info; /* Timeout on unreffed images. */ managed_class->keepalive = 60.0; class->area_changed = imageinfo_real_area_changed; class->area_painted = imageinfo_real_area_painted; class->undo_changed = imageinfo_real_undo_changed; class->file_changed = imageinfo_real_file_changed; class->invalidate = imageinfo_real_invalidate; /* Create signals. */ imageinfo_signals[SIG_AREA_CHANGED] = g_signal_new( "area_changed", G_OBJECT_CLASS_TYPE( gobject_class ), G_SIGNAL_RUN_FIRST, G_STRUCT_OFFSET( ImageinfoClass, area_changed ), NULL, NULL, g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1, G_TYPE_POINTER ); imageinfo_signals[SIG_AREA_PAINTED] = g_signal_new( "area_painted", G_OBJECT_CLASS_TYPE( gobject_class ), G_SIGNAL_RUN_FIRST, G_STRUCT_OFFSET( ImageinfoClass, area_painted ), NULL, NULL, g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1, G_TYPE_POINTER ); imageinfo_signals[SIG_UNDO_CHANGED] = g_signal_new( "undo_changed", G_OBJECT_CLASS_TYPE( gobject_class ), G_SIGNAL_RUN_FIRST, G_STRUCT_OFFSET( ImageinfoClass, undo_changed ), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0 ); imageinfo_signals[SIG_FILE_CHANGED] = g_signal_new( "file_changed", G_OBJECT_CLASS_TYPE( gobject_class ), G_SIGNAL_RUN_FIRST, G_STRUCT_OFFSET( ImageinfoClass, file_changed ), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0 ); imageinfo_signals[SIG_INVALIDATE] = g_signal_new( "invalidate", G_OBJECT_CLASS_TYPE( gobject_class ), G_SIGNAL_RUN_FIRST, G_STRUCT_OFFSET( ImageinfoClass, invalidate ), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0 ); } static void imageinfo_init( Imageinfo *imageinfo ) { #ifdef DEBUG_MAKE printf( "imageinfo_init: %p\n", imageinfo ); #endif /*DEBUG_MAKE*/ imageinfo->im = NULL; imageinfo->mapped_im = NULL; imageinfo->identity_lut = NULL; imageinfo->underlying = NULL; imageinfo->proxy = NULL; imageinfo->dfile = FALSE; imageinfo->delete_filename = NULL; imageinfo->from_file = FALSE; imageinfo->mtime = 0; imageinfo->exprs = NULL; imageinfo->ok_to_paint = FALSE; imageinfo->undo = NULL; imageinfo->redo = NULL; imageinfo->cundo = NULL; imageinfo->monitored = FALSE; imageinfo->check_mtime = 0; imageinfo->check_tid = 0; } GType imageinfo_get_type( void ) { static GType type = 0; if( !type ) { static const GTypeInfo info = { sizeof( ImageinfoClass ), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) imageinfo_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof( Imageinfo ), 32, /* n_preallocs */ (GInstanceInitFunc) imageinfo_init, }; type = g_type_register_static( TYPE_MANAGED, "Imageinfo", &info, 0 ); } return( type ); } static int imageinfo_proxy_eval( Imageinfoproxy *proxy ) { Imageinfo *imageinfo = proxy->imageinfo; if( imageinfo && imageinfo->im->time ) if( progress_update_percent( imageinfo->im->time->percent, imageinfo->im->time->eta ) ) return( -1 ); return( 0 ); } static int imageinfo_proxy_invalidate( Imageinfoproxy *proxy ) { Imageinfo *imageinfo = proxy->imageinfo; if( imageinfo ) imageinfo_invalidate( imageinfo ); return( 0 ); } static int imageinfo_proxy_preclose( Imageinfoproxy *proxy ) { Imageinfo *imageinfo = proxy->imageinfo; /* Remove everything related to progress. */ if( imageinfo ) imageinfo_dispose_eval( imageinfo ); return( 0 ); } /* Add a proxy to track IMAGE events. */ static void imageinfo_proxy_add( Imageinfo *imageinfo ) { /* Only if we're running interactively. */ if( main_option_batch ) return; /* Already being monitored? */ if( imageinfo->monitored ) return; imageinfo->monitored = TRUE; /* Need a proxy on IMAGE. */ g_assert( !imageinfo->proxy ); if( !(imageinfo->proxy = IM_NEW( imageinfo->im, Imageinfoproxy )) ) if( !(imageinfo->proxy = IM_NEW( NULL, Imageinfoproxy )) ) return; imageinfo->proxy->im = imageinfo->im; imageinfo->proxy->imageinfo = imageinfo; (void) im_add_eval_callback( imageinfo->im, (im_callback_fn) imageinfo_proxy_eval, imageinfo->proxy, NULL ); (void) im_add_invalidate_callback( imageinfo->im, (im_callback_fn) imageinfo_proxy_invalidate, imageinfo->proxy, NULL ); /* Has to be preclose, because we want to be sure we disconnect before * the proxy is freed on a close callback. */ (void) im_add_preclose_callback( imageinfo->im, (im_callback_fn) imageinfo_proxy_preclose, imageinfo->proxy, NULL ); } /* Make a basic imageinfo. No refs, will be destroyed on next GC. If name is * NULL, make a temp name up; otherwise name needs to be unique. */ Imageinfo * imageinfo_new( Imageinfogroup *imageinfogroup, Heap *heap, IMAGE *im, const char *name ) { Imageinfo *imageinfo = IMAGEINFO( g_object_new( TYPE_IMAGEINFO, NULL ) ); char buf[FILENAME_MAX]; #ifdef DEBUG_OPEN printf( "imageinfo_new: %p \"%s\"\n", imageinfo, im->filename ); #endif /*DEBUG_OPEN*/ managed_link_heap( MANAGED( imageinfo ), heap ); if( !name ) { if( !temp_name( buf, "v" ) ) /* Will be freed on next GC. */ return( NULL ); name = buf; } iobject_set( IOBJECT( imageinfo ), name, NULL ); /* Only record the pointer when we know we will make the imageinfo * successfully. */ imageinfo->im = im; icontainer_child_add( ICONTAINER( imageinfogroup ), ICONTAINER( imageinfo ), -1 ); imageinfo_proxy_add( imageinfo ); return( imageinfo ); } /* An image is a result of a LUT operation on an earlier imageinfo. */ void imageinfo_set_underlying( Imageinfo *top_imageinfo, Imageinfo *imageinfo ) { g_assert( !top_imageinfo->underlying ); top_imageinfo->underlying = imageinfo; MANAGED_REF( top_imageinfo->underlying ); } /* Make a temp image. Deleted on close. No refs: closed on next GC. If you * want it to stick around, ref it! */ Imageinfo * imageinfo_new_temp( Imageinfogroup *imageinfogroup, Heap *heap, const char *name, const char *mode ) { IMAGE *im; char tname[FILENAME_MAX]; Imageinfo *imageinfo; if( !temp_name( tname, "v" ) || !(im = im_open( tname, mode )) ) return( NULL ); if( !(imageinfo = imageinfo_new( imageinfogroup, heap, im, name )) ) { im_close( im ); return( NULL ); } imageinfo->dfile = TRUE; VIPS_SETSTR( imageinfo->delete_filename, tname ); return( imageinfo ); } /* Need this context during imageinfo_open_image_input(). */ typedef struct _ImageinfoOpen { Imageinfogroup *imageinfogroup; Heap *heap; const char *filename; GtkWidget *parent; } ImageinfoOpen; /* Open for read ... returns a non-heap pointer, destroy if it goes in the * heap. */ static Imageinfo * imageinfo_open_image_input( const char *filename, ImageinfoOpen *open ) { Imageinfo *imageinfo; VipsFormatClass *format; if( !(format = vips_format_for_file( filename )) ) return( NULL ); if( strcmp( VIPS_OBJECT_CLASS( format )->nickname, "vips" ) == 0 ) { IMAGE *im; if( !(im = im_open( filename, "r" )) ) return( NULL ); if( !(imageinfo = imageinfo_new( open->imageinfogroup, open->heap, im, open->filename )) ) { im_close( im ); return( NULL ); } MANAGED_REF( imageinfo ); #ifdef DEBUG_OPEN printf( "imageinfo_open_image_input: opened VIPS \"%s\"\n", filename ); #endif /*DEBUG_OPEN*/ } else { VipsFormatFlags flags = vips_format_get_flags( format, filename ); const char *mode = flags & VIPS_FORMAT_PARTIAL ? "p" : "w"; if( !(imageinfo = imageinfo_new_temp( open->imageinfogroup, open->heap, open->filename, mode )) ) return( NULL ); MANAGED_REF( imageinfo ); if( format->load( filename, imageinfo->im ) || im_histlin( imageinfo->im, "im_copy %s %s", filename, imageinfo->im->filename ) ) { MANAGED_UNREF( imageinfo ); return( NULL ); } #ifdef DEBUG_OPEN printf( "imageinfo_open_image_input: opened %s \"%s\"\n", VIPS_OBJECT_CLASS( format )->nickname, filename ); #endif /*DEBUG_OPEN*/ } /* Get ready for input. */ if( im_pincheck( imageinfo->im ) ) return( NULL ); /* The rewind will have removed everything from the IMAGE. Reattach * progress. */ imageinfo_proxy_add( imageinfo ); /* Attach the original filename ... pick this up again later as a * save default. */ if( im_meta_set_string( imageinfo->im, ORIGINAL_FILENAME, filename ) ) return( NULL ); return( imageinfo ); } Imageinfo * imageinfo_new_from_pixbuf( Imageinfogroup *imageinfogroup, Heap *heap, GdkPixbuf *pixbuf ) { int width; int height; int bands; guchar *bytes; Imageinfo *ii; size_t vips_length; width = gdk_pixbuf_get_width( pixbuf ); height = gdk_pixbuf_get_height( pixbuf ); bands = gdk_pixbuf_get_n_channels( pixbuf ); /* 2.26 and later have gdk_pixbuf_get_pixels_with_length() * which would let us check the size, but we can't reslly use it yet. * Another time! guint length; bytes = gdk_pixbuf_get_pixels_with_length( pixbuf, &length ); if( vips_length != length ) { error_top( _( "Unable to create image." ) ); error_sub( _( "vips expected %zd bytes, gdkpixbuf made %d" ), vips_length, length ); return( NULL ); } */ bytes = gdk_pixbuf_get_pixels( pixbuf ); if( !(ii = imageinfo_new_temp( imageinfogroup, heap, NULL, "t" )) ) return( NULL ); im_initdesc( ii->im, width, height, bands, IM_BBITS_BYTE, IM_BANDFMT_UCHAR, IM_CODING_NONE, IM_TYPE_sRGB, 1.0, 1.0, 0, 0 ); if( im_setupout( ii->im ) ) return( NULL ); vips_length = VIPS_IMAGE_SIZEOF_LINE( ii->im ) * height; memcpy( ii->im->data, bytes, vips_length ); return( ii ); } /* Was this ii loaded from a file (ie. ->name contains a filename the user * might recognise). */ gboolean imageinfo_is_from_file( Imageinfo *imageinfo ) { return( IOBJECT( imageinfo )->name && imageinfo->from_file ); } static gint imageinfo_attach_check_cb( Imageinfo *imageinfo ) { if( imageinfo_is_from_file( imageinfo ) && imageinfo->check_tid ) { struct stat buf; if( !stat( IOBJECT( imageinfo )->name, &buf ) && buf.st_mtime != imageinfo->check_mtime ) { imageinfo->check_mtime = buf.st_mtime; imageinfo_file_changed( imageinfo ); } } return( TRUE ); } /* Start checking this file for updates, signal reload if there is one. */ static void imageinfo_attach_check( Imageinfo *imageinfo ) { if( imageinfo_is_from_file( imageinfo ) && !imageinfo->check_tid ) { struct stat buf; /* Need to be able to stat() to be able to track a file. */ if( stat( IOBJECT( imageinfo )->name, &buf ) ) return; imageinfo->mtime = buf.st_mtime; imageinfo->check_mtime = imageinfo->mtime; imageinfo->check_tid = g_timeout_add( 1000, (GSourceFunc) imageinfo_attach_check_cb, imageinfo ); #ifdef DEBUG_CHECK printf( "imageinfo_attach_check: starting to check" ); imageinfo_print( imageinfo ); #endif /*DEBUG_CHECK*/ } else IM_FREEF( g_source_remove, imageinfo->check_tid ); } /* Open a filename for input. The filenmae can have an embedded mode. */ Imageinfo * imageinfo_new_input( Imageinfogroup *imageinfogroup, GtkWidget *parent, Heap *heap, const char *name ) { Imageinfo *imageinfo; ImageinfoOpen open; if( (imageinfo = imageinfogroup_lookup( imageinfogroup, name )) ) { /* We always make a new non-heap pointer. */ MANAGED_REF( imageinfo ); return( imageinfo ); } open.imageinfogroup = imageinfogroup; open.heap = heap; open.filename = name; open.parent = parent; if( !(imageinfo = (Imageinfo *) callv_string_filename( (callv_string_fn) imageinfo_open_image_input, name, &open, NULL, NULL )) ) { error_top( _( "Unable to open image." ) ); error_sub( _( "Unable to open file \"%s\" as image." ), name ); error_vips(); return( NULL ); } imageinfo->from_file = TRUE; imageinfo_attach_check( imageinfo ); return( imageinfo ); } /* Add an identity lut, if this is a LUTtable image. */ static IMAGE * imageinfo_get_identity_lut( Imageinfo *imageinfo ) { if( imageinfo->im->Coding == IM_CODING_NONE && imageinfo->im->BandFmt == IM_BANDFMT_UCHAR ) { if( !imageinfo->identity_lut ) { char tname[FILENAME_MAX]; IMAGE *im; if( !temp_name( tname, "v" ) || !(im = im_open( tname, "p" )) ) return( NULL ); imageinfo->identity_lut = im; if( im_identity( imageinfo->identity_lut, imageinfo->im->Bands ) || im_histlin( imageinfo->identity_lut, "im_identity %s %d", imageinfo->identity_lut->filename, imageinfo->im->Bands ) ) return( NULL ); } return( imageinfo->identity_lut ); } else return( NULL ); } static IMAGE * imageinfo_get_mapped( Imageinfo *imageinfo ) { if( !imageinfo->mapped_im ) { IMAGE *im = imageinfo_get_underlying( imageinfo ); IMAGE *mapped_im; char name[FILENAME_MAX]; char *argv[4]; if( !temp_name( name, "v" ) || !(mapped_im = im_open( name, "p" )) ) return( NULL ); argv[0] = im->filename; argv[1] = mapped_im->filename; argv[2] = imageinfo->im->filename; argv[3] = NULL; if( im_maplut( im, mapped_im, imageinfo->im ) || im_updatehist( mapped_im, "im_maplut", 3, argv ) ) { im_close( mapped_im ); error_vips_all(); return( NULL ); } imageinfo->mapped_im = mapped_im; } return( imageinfo->mapped_im ); } /* Get a lut ... or not! */ IMAGE * imageinfo_get( gboolean use_lut, Imageinfo *imageinfo ) { if( !imageinfo ) return( NULL ); if( use_lut && imageinfo->underlying ) return( imageinfo->im ); if( use_lut && !imageinfo->underlying ) { IMAGE *lut; if( (lut = imageinfo_get_identity_lut( imageinfo )) ) return( lut ); else return( imageinfo->im ); } else if( !use_lut && imageinfo->underlying ) return( imageinfo_get_mapped( imageinfo ) ); else return( imageinfo->im ); } /* Do a set of II all refer to the same underlying image? Used to spot * LUTable optimisations. */ gboolean imageinfo_same_underlying( Imageinfo *imageinfo[], int n ) { int i; if( n < 2 ) return( TRUE ); else { IMAGE *first = imageinfo_get_underlying( imageinfo[0] ); for( i = 1; i < n; i++ ) if( imageinfo_get_underlying( imageinfo[i] ) != first ) return( FALSE ); return( TRUE ); } } /* Write to a filename. */ gboolean imageinfo_write( Imageinfo *imageinfo, const char *name ) { IMAGE *im = imageinfo_get( FALSE, imageinfo ); if( vips_format_write( im, name ) ) { char filename[FILENAME_MAX]; char mode[FILENAME_MAX]; im_filename_split( name, filename, mode ); error_top( _( "Unable to write to file." ) ); error_sub( _( "Error writing image to file \"%s\"." ), filename ); error_vips(); return( FALSE ); } return( TRUE ); } static gboolean imageinfo_make_paintable( Imageinfo *imageinfo ) { progress_begin(); if( im_rwcheck( imageinfo->im ) ) { progress_end(); error_top( _( "Unable to paint on image." ) ); error_sub( _( "Unable to get write permission for " "file \"%s\".\nCheck permission settings." ), imageinfo->im->filename ); error_vips(); return( FALSE ); } progress_end(); imageinfo->ok_to_paint = TRUE; return( TRUE ); } static void imageinfo_check_paintable_cb( iWindow *iwnd, void *client, iWindowNotifyFn nfn, void *sys ) { Imageinfo *imageinfo = IMAGEINFO( client ); if( !imageinfo_make_paintable( imageinfo ) ) { nfn( sys, IWINDOW_ERROR ); return; } nfn( sys, IWINDOW_YES ); } /* Check painting is OK. nfn() called on "ok!". Returns FALSE if it's * not immediately obvious that we can paint. */ gboolean imageinfo_check_paintable( Imageinfo *imageinfo, GtkWidget *parent, iWindowNotifyFn nfn, void *sys ) { IMAGE *im = imageinfo_get( FALSE, imageinfo ); if( im && im_isfile( im ) && !imageinfo->dfile && !imageinfo->ok_to_paint ) { iDialog *idlg; idlg = box_yesno( parent, imageinfo_check_paintable_cb, iwindow_true_cb, imageinfo, nfn, sys, _( "Modify" ), _( "Modify disc file?" ), _( "This image is being shown directly from the " "disc file:\n\n" " %s\n\n" "If you paint on this file, it will be permanently " "changed. If something goes wrong, you may lose work. " "Are you sure you want to modify this file?" ), IOBJECT( imageinfo )->name ); idialog_set_iobject( idlg, IOBJECT( imageinfo ) ); return( FALSE ); } else if( im && !im_isfile( im ) && !imageinfo->ok_to_paint ) { if( !imageinfo_make_paintable( imageinfo ) ) { nfn( sys, IWINDOW_ERROR ); return( FALSE ); } } nfn( sys, IWINDOW_YES ); return( TRUE ); } /* Try to get an Imageinfo from a symbol. */ Imageinfo * imageinfo_sym_image( Symbol *sym ) { PElement *root = &sym->expr->root; if( sym->type == SYM_VALUE && PEISIMAGE( root ) ) return( PEGETII( root ) ); else return( NULL ); } static Undofragment * imageinfo_undofragment_new( Undobuffer *undo ) { Undofragment *frag = INEW( NULL, Undofragment ); frag->undo = undo; frag->im = NULL; return( frag ); } static Undobuffer * imageinfo_undobuffer_new( Imageinfo *imageinfo ) { Undobuffer *undo = INEW( NULL, Undobuffer ); undo->imageinfo = imageinfo; undo->frags = NULL; /* No pixels in bounding box at the moment. */ undo->bbox.left = 0; undo->bbox.top = 0; undo->bbox.width = 0; undo->bbox.height = 0; return( undo ); } /* Grab from the image into an IMAGE buffer. Always grab to memory. */ static IMAGE * imageinfo_undo_grab_area( IMAGE *im, Rect *dirty ) { IMAGE *save; /* Make new image to extract to. */ if( !(save = im_open( "undo buffer", "t" )) ) return( NULL ); /* Try to extract from im. */ if( im_extract_area( im, save, dirty->left, dirty->top, dirty->width, dirty->height ) ) { im_close( save ); error_vips_all(); return( NULL ); } return( save ); } /* Grab into an undo fragment. Add frag to frag list on undo buffer, expand * bounding box. */ static Undofragment * imageinfo_undo_grab( Undobuffer *undo, Rect *dirty ) { Imageinfo *imageinfo = undo->imageinfo; Undofragment *frag = imageinfo_undofragment_new( undo ); IMAGE *im = imageinfo_get( FALSE, imageinfo ); Rect bbox; /* Try to extract from im. Memory allocation happens at this * point, so we must be careful! */ if( !(frag->im = imageinfo_undo_grab_area( im, dirty )) ) { imageinfo_undofragment_free( frag ); error_vips_all(); return( NULL ); } /* Note position of this frag. */ frag->pos = *dirty; /* Add frag to frag list on undo buffer. */ undo->frags = g_slist_prepend( undo->frags, frag ); /* Find bounding box for saved pixels. */ im_rect_unionrect( dirty, &undo->bbox, &bbox ); undo->bbox = bbox; /* Return new frag. */ return( frag ); } /* Trim the undo buffer if we have more than x items on it. */ static void imageinfo_undo_trim( Imageinfo *imageinfo ) { int max = PAINTBOX_MAX_UNDO; int len = g_slist_length( imageinfo->undo ); if( max >= 0 && len > max ) { GSList *l; int i; l = g_slist_reverse( imageinfo->undo ); for( i = 0; i < len - max; i++ ) { Undobuffer *undo = (Undobuffer *) l->data; imageinfo_undobuffer_free( undo ); l = g_slist_remove( l, undo ); } imageinfo->undo = g_slist_reverse( l ); } #ifdef DEBUG printf( "imageinfo_undo_trim: %d items in undo buffer\n", g_slist_length( imageinfo->undo ) ); #endif /*DEBUG*/ } /* Mark the start or end of an undo session. Copy current undo information * to the undo buffers and NULL out the current undo pointer. Junk all redo * information: this new undo action makes all that out of date. */ void imageinfo_undo_mark( Imageinfo *imageinfo ) { /* Is there an existing undo save area? */ if( imageinfo->cundo ) { /* Left over from the last undo save. Copy to undo save list * and get ready for new undo buffer. */ imageinfo->undo = g_slist_prepend( imageinfo->undo, imageinfo->cundo ); imageinfo->cundo = NULL; } /* Junk all redo information. */ slist_map( imageinfo->redo, (SListMapFn) imageinfo_undobuffer_free, NULL ); IM_FREEF( g_slist_free, imageinfo->redo ); /* Trim undo buffer. */ imageinfo_undo_trim( imageinfo ); /* Update menus. */ imageinfo_undo_changed( imageinfo ); } /* Add to the undo buffer. If there is no undo buffer currently under * construction, make a new one. If there is an existing undo buffer, try to * grow it left/right/up/down so as to just enclose the new bounding box. We * assume that our dirty areas are not going to be disconnected. Is this * always true? No - if you move smudge or smear quickly, you can get * non-overlapping areas. However: if you do lots of little operations in more * or less the same place (surely the usual case), then this technique will be * far better. */ static gboolean imageinfo_undo_add( Imageinfo *imageinfo, Rect *dirty ) { IMAGE *im = imageinfo_get( FALSE, imageinfo ); Undobuffer *undo = imageinfo->cundo; Rect over, image, clipped; /* Undo disabled? Do nothing. */ if( PAINTBOX_MAX_UNDO == 0 ) return( TRUE ); /* Clip dirty against image size. */ image.left = 0; image.top = 0; image.width = im->Xsize; image.height = im->Ysize; im_rect_intersectrect( &image, dirty, &clipped ); /* Is there anything left? If not, can return immediately. */ if( im_rect_isempty( &clipped ) ) return( TRUE ); if( !undo ) { /* No current undo buffer ... start a new one for this action. */ if( !(imageinfo->cundo = undo = imageinfo_undobuffer_new( imageinfo )) ) return( FALSE ); return( imageinfo_undo_grab( undo, &clipped ) != NULL ); } /* Existing stuff we are to add to. Try to expand our undo * area to just enclose the new bounding box. We assume that * there is an overlap between the new and old stuff. */ /* Do we need to expand our saved area to the right? */ if( IM_RECT_RIGHT( &clipped ) > IM_RECT_RIGHT( &undo->bbox ) ) { /* Expand to the right. Calculate the section we need * to add to our bounding box. */ over.left = IM_RECT_RIGHT( &undo->bbox ); over.top = undo->bbox.top; over.width = IM_RECT_RIGHT( &clipped ) - IM_RECT_RIGHT( &undo->bbox ); over.height = undo->bbox.height; /* Grab new fragment. */ if( !imageinfo_undo_grab( undo, &over ) ) return( FALSE ); } /* Do we need to expand our saved area to the left? */ if( undo->bbox.left > clipped.left ) { over.left = clipped.left; over.top = undo->bbox.top; over.width = undo->bbox.left - clipped.left; over.height = undo->bbox.height; if( !imageinfo_undo_grab( undo, &over ) ) return( FALSE ); } /* Do we need to expand our saved area upwards? */ if( undo->bbox.top > clipped.top ) { over.left = undo->bbox.left; over.top = clipped.top; over.width = undo->bbox.width; over.height = undo->bbox.top - clipped.top; if( !imageinfo_undo_grab( undo, &over ) ) return( FALSE ); } /* Do we need to expand our saved area downwards? */ if( IM_RECT_BOTTOM( &clipped ) > IM_RECT_BOTTOM( &undo->bbox ) ) { over.left = undo->bbox.left; over.top = IM_RECT_BOTTOM( &undo->bbox ); over.width = undo->bbox.width; over.height = IM_RECT_BOTTOM( &clipped ) - IM_RECT_BOTTOM( &undo->bbox ); if( !imageinfo_undo_grab( undo, &over ) ) return( FALSE ); } return( TRUE ); } /* Paste an undo fragment back into the image. */ static void * imageinfo_undofragment_paste( Undofragment *frag ) { Undobuffer *undo = frag->undo; Imageinfo *imageinfo = undo->imageinfo; IMAGE *im = imageinfo_get( FALSE, imageinfo ); im_insertplace( im, frag->im, frag->pos.left, frag->pos.top ); imageinfo_area_painted( imageinfo, &frag->pos ); return( NULL ); } /* Paste a whole undo buffer back into the image. */ static void imageinfo_undobuffer_paste( Undobuffer *undo ) { slist_map( undo->frags, (SListMapFn) imageinfo_undofragment_paste, NULL ); } /* Undo a paint action. */ gboolean imageinfo_undo( Imageinfo *imageinfo ) { Undobuffer *undo; /* Find the undo action we are to perform. */ if( !imageinfo->undo ) return( TRUE ); undo = (Undobuffer *) imageinfo->undo->data; /* We are going to undo the first action on the undo list. We must * save the area under the first undo action to the redo list. Do * the save, even if undo is disabled. */ if( !imageinfo_undo_add( imageinfo, &undo->bbox ) ) return( FALSE ); /* Add new undo area. */ imageinfo->redo = g_slist_prepend( imageinfo->redo, imageinfo->cundo ); imageinfo->cundo = NULL; /* Paint undo back. */ imageinfo_undobuffer_paste( undo ); /* Junk the undo action we have performed. */ imageinfo->undo = g_slist_remove( imageinfo->undo, undo ); imageinfo_undobuffer_free( undo ); /* Trim undo buffer. */ imageinfo_undo_trim( imageinfo ); /* Update menus. */ imageinfo_undo_changed( imageinfo ); return( TRUE ); } /* Redo a paint action, if possible. */ gboolean imageinfo_redo( Imageinfo *imageinfo ) { Undobuffer *undo; /* Find the redo action we are to perform. */ if( !imageinfo->redo ) return( TRUE ); undo = (Undobuffer *) imageinfo->redo->data; /* We are going to redo the first action on the redo list. We must * save the area under the first redo action to the undo list. Save * even if undo is disabled. */ if( !imageinfo_undo_add( imageinfo, &undo->bbox ) ) return( FALSE ); /* Add this new buffer to the undo list. */ imageinfo->undo = g_slist_prepend( imageinfo->undo, imageinfo->cundo ); imageinfo->cundo = NULL; /* Paint redo back. */ imageinfo_undobuffer_paste( undo ); /* We can junk the head of the undo list now. */ imageinfo->redo = g_slist_remove( imageinfo->redo, undo ); imageinfo_undobuffer_free( undo ); /* Trim undo buffer. */ imageinfo_undo_trim( imageinfo ); /* Update menus. */ imageinfo_undo_changed( imageinfo ); return( TRUE ); } void imageinfo_undo_clear( Imageinfo *imageinfo ) { imageinfo_undo_free( imageinfo ); imageinfo_undo_changed( imageinfo ); } static int imageinfo_draw_point_cb( IMAGE *im, int x, int y, void *a, void *b, void *c ) { IMAGE *mask = (IMAGE *) a; PEL *ink = (PEL *) b; return( im_draw_mask( im, mask, x - mask->Xsize / 2, y - mask->Ysize / 2, ink ) ); } /* Draw a line. */ gboolean imageinfo_paint_line( Imageinfo *imageinfo, Imageinfo *ink, Imageinfo *mask, int x1, int y1, int x2, int y2 ) { IMAGE *im = imageinfo_get( FALSE, imageinfo ); IMAGE *ink_im = imageinfo_get( FALSE, ink ); IMAGE *mask_im = imageinfo_get( FALSE, mask ); PEL *data = (PEL *) ink_im->data; Rect dirty, p1, p2, image, clipped; p1.width = mask_im->Xsize; p1.height = mask_im->Ysize; p1.left = x1 - mask_im->Xsize / 2; p1.top = y1 - mask_im->Ysize / 2; p2.width = mask_im->Xsize; p2.height = mask_im->Ysize; p2.left = x2 - mask_im->Xsize / 2; p2.top = y2 - mask_im->Ysize / 2; im_rect_unionrect( &p1, &p2, &dirty ); image.left = 0; image.top = 0; image.width = im->Xsize; image.height = im->Ysize; im_rect_intersectrect( &dirty, &image, &clipped ); if( im_rect_isempty( &clipped ) ) return( TRUE ); if( !imageinfo_undo_add( imageinfo, &clipped ) ) return( FALSE ); if( im_draw_line_user( im, x1, y1, x2, y2, (VipsPlotFn) imageinfo_draw_point_cb, mask_im, data, NULL ) ) { error_vips_all(); return( FALSE ); } imageinfo_area_painted( imageinfo, &dirty ); return( TRUE ); } /* Smudge a line. */ gboolean imageinfo_paint_smudge( Imageinfo *imageinfo, Rect *oper, int x1, int y1, int x2, int y2 ) { IMAGE *im = imageinfo_get( FALSE, imageinfo ); Rect p1, p2, dirty; /* Calculate bounding box for smudge. */ p1 = *oper; p1.left += x1; p1.top += y1; p2 = *oper; p2.left += x2; p2.top += y2; im_rect_unionrect( &p1, &p2, &dirty ); if( !imageinfo_undo_add( imageinfo, &dirty ) ) return( FALSE ); /* Smudge line connecting old and new points. */ if( im_draw_line_user( im, x1, y1, x2, y2, (VipsPlotFn) im_smudge, oper, NULL, NULL ) ) { error_vips_all(); return( FALSE ); } imageinfo_area_painted( imageinfo, &dirty ); return( TRUE ); } /* Flood an area. */ gboolean imageinfo_paint_flood( Imageinfo *imageinfo, Imageinfo *ink, int x, int y, gboolean blob ) { IMAGE *im = imageinfo_get( FALSE, imageinfo ); IMAGE *ink_im = imageinfo_get( FALSE, ink ); PEL *data = (PEL *) ink_im->data; Rect dirty; int result; /* Save undo area. We have to save the entire image since we don't know * how much the flood will change :( */ dirty.left = 0; dirty.top = 0; dirty.width = im->Xsize; dirty.height = im->Ysize; if( !imageinfo_undo_add( imageinfo, &dirty ) ) return( FALSE ); /* Flood! */ if( blob ) result = im_flood_blob( im, x, y, data, &dirty ); else result = im_flood( im, x, y, data, &dirty ); if( result ) { error_vips_all(); return( FALSE ); } imageinfo_area_painted( imageinfo, &dirty ); return( TRUE ); } gboolean imageinfo_paint_dropper( Imageinfo *imageinfo, Imageinfo *ink, int x, int y ) { IMAGE *im = imageinfo_get( FALSE, imageinfo ); IMAGE *ink_im = imageinfo_get( FALSE, ink ); PEL *data = (PEL *) ink_im->data; Rect dirty; if( im_readpoint( im, x, y, data ) ) { error_vips_all(); return( FALSE ); } im_invalidate( ink_im ); dirty.left = 0; dirty.top = 0; dirty.width = ink_im->Xsize; dirty.height = ink_im->Ysize; imageinfo_area_painted( ink, &dirty ); return( TRUE ); } /* Fill a rect. */ gboolean imageinfo_paint_rect( Imageinfo *imageinfo, Imageinfo *ink, Rect *area ) { IMAGE *im = imageinfo_get( FALSE, imageinfo ); IMAGE *ink_im = imageinfo_get( FALSE, ink ); PEL *data = (PEL *) ink_im->data; if( !imageinfo_undo_add( imageinfo, area ) ) return( FALSE ); if( im_draw_rect( im, area->left, area->top, area->width, area->height, 1, data ) ) { error_vips_all(); return( FALSE ); } imageinfo_area_painted( imageinfo, area ); return( TRUE ); } /* Paint text into imageinfo, return width/height in tarea. */ gboolean imageinfo_paint_text( Imageinfo *imageinfo, const char *font_name, const char *text, Rect *tarea ) { IMAGE *im = imageinfo_get( FALSE, imageinfo ); if( im_text( im, text, font_name, 0, 0, get_dpi() ) ) { error_top( _( "Unable to paint text." ) ); error_sub( _( "Unable to paint text \"%s\" in font \"%s\"." ), text, font_name ); error_vips(); return( FALSE ); } tarea->left = 0; tarea->top = 0; tarea->width = im->Xsize; tarea->height = im->Ysize; return( TRUE ); } /* Draw a nib mask. Radius 0 means a single-pixel mask. */ gboolean imageinfo_paint_nib( Imageinfo *imageinfo, int radius ) { static PEL ink[1] = { 255 }; IMAGE *im = imageinfo_get( FALSE, imageinfo ); if( radius ) { int r2 = radius * 2; IMAGE *t; if( !(t = im_open( "imageinfo_paint_nib", "p" )) ) { error_vips(); return( FALSE ); } if( im_black( t, 2 * (r2 + 1), 2 * (r2 + 1), 1 ) || im_draw_circle( t, r2, r2, r2, 1, ink ) || im_shrink( t, im, 2, 2 ) ) { im_close( t ); error_vips(); return( FALSE ); } im_close( t ); } else { if( im_black( im, 1, 1, 1 ) || im_draw_circle( im, 0, 0, 0, 1, ink ) ) return( FALSE ); } return( TRUE ); } /* Paint a mask. */ gboolean imageinfo_paint_mask( Imageinfo *imageinfo, Imageinfo *ink, Imageinfo *mask, int x, int y ) { IMAGE *im = imageinfo_get( FALSE, imageinfo ); IMAGE *ink_im = imageinfo_get( FALSE, ink ); IMAGE *mask_im = imageinfo_get( FALSE, mask ); Rect dirty, image, clipped; dirty.left = x; dirty.top = y; dirty.width = mask_im->Xsize; dirty.height = mask_im->Ysize; image.left = 0; image.top = 0; image.width = im->Xsize; image.height = im->Ysize; im_rect_intersectrect( &dirty, &image, &clipped ); if( im_rect_isempty( &clipped ) ) return( TRUE ); if( !imageinfo_undo_add( imageinfo, &clipped ) ) return( FALSE ); if( im_plotmask( im, 0, 0, (PEL *) ink_im->data, (PEL *) mask_im->data, &dirty ) ) { error_vips_all(); return( FALSE ); } imageinfo_area_painted( imageinfo, &dirty ); return( TRUE ); } /* Print a pixel. Output has to be parseable by imageinfo_from_text(). */ void imageinfo_to_text( Imageinfo *imageinfo, VipsBuf *buf ) { IMAGE *im = imageinfo_get( FALSE, imageinfo ); PEL *p = (PEL *) im->data; int i; #define PRINT_INT( T, I ) vips_buf_appendf( buf, "%d", ((T *)p)[I] ); #define PRINT_FLOAT( T, I ) vips_buf_appendg( buf, ((T *)p)[I] ); for( i = 0; i < im->Bands; i++ ) { if( i ) vips_buf_appends( buf, ", " ); switch( im->BandFmt ) { case IM_BANDFMT_UCHAR: PRINT_INT( unsigned char, i ); break; case IM_BANDFMT_CHAR: PRINT_INT( char, i ); break; case IM_BANDFMT_USHORT: PRINT_INT( unsigned short, i ); break; case IM_BANDFMT_SHORT: PRINT_INT( short, i ); break; case IM_BANDFMT_UINT: PRINT_INT( unsigned int, i ); break; case IM_BANDFMT_INT: PRINT_INT( int, i ); break; case IM_BANDFMT_FLOAT: PRINT_FLOAT( float, i ); break; case IM_BANDFMT_COMPLEX: vips_buf_appends( buf, "(" ); PRINT_FLOAT( float, (i << 1) ); vips_buf_appends( buf, ", " ); PRINT_FLOAT( float, (i << 1) + 1 ); vips_buf_appends( buf, ")" ); break; case IM_BANDFMT_DOUBLE: PRINT_FLOAT( double, i ); break; case IM_BANDFMT_DPCOMPLEX: vips_buf_appends( buf, "(" ); PRINT_FLOAT( double, i << 1 ); vips_buf_appends( buf, ", " ); PRINT_FLOAT( double, (i << 1) + 1 ); vips_buf_appends( buf, ")" ); break; default: vips_buf_appends( buf, "???" ); break; } } } /* Set band i to value. */ static void imageinfo_from_text_band( Imageinfo *imageinfo, int i, double re, double im ) { IMAGE *image = imageinfo_get( FALSE, imageinfo ); PEL *p = (PEL *) image->data; double mod = sqrt( re*re + im*im ); if( i < 0 || i >= image->Bands ) return; #define SET_INT( T, I, X ) (((T *)p)[I] = (T) IM_RINT(X)) #define SET_FLOAT( T, I, X ) (((T *)p)[I] = (T) (X)) switch( image->BandFmt ) { case IM_BANDFMT_UCHAR: SET_INT( unsigned char, i, mod ); break; case IM_BANDFMT_CHAR: SET_INT( char, i, mod ); break; case IM_BANDFMT_USHORT: SET_INT( unsigned short, i, mod ); break; case IM_BANDFMT_SHORT: SET_INT( short, i, mod ); break; case IM_BANDFMT_UINT: SET_INT( unsigned int, i, mod ); break; case IM_BANDFMT_INT: SET_INT( int, i, mod ); break; case IM_BANDFMT_FLOAT: SET_FLOAT( float, i, mod ); break; case IM_BANDFMT_COMPLEX: SET_FLOAT( float, (i << 1), re ); SET_FLOAT( float, (i << 1) + 1, im ); break; case IM_BANDFMT_DOUBLE: SET_FLOAT( double, i, mod ); break; case IM_BANDFMT_DPCOMPLEX: SET_FLOAT( double, i << 1, re ); SET_FLOAT( double, (i << 1) + 1, im ); break; default: break; } } /* Parse a string to an imageinfo. * Strings are from imageinfo_to_text(), ie. of the form: * * 50, 0, 0 * (12,13), (14,15) * */ gboolean imageinfo_from_text( Imageinfo *imageinfo, const char *text ) { char buf[MAX_LINELENGTH]; char *p; int i; Rect dirty; #ifdef DEBUG_RGB printf( "imageinfo_from_text: in: \"\%s\"\n", text ); #endif /*DEBUG_RGB*/ im_strncpy( buf, text, MAX_LINELENGTH ); for( i = 0, p = buf; p += strspn( p, WHITESPACE ), *p; i++ ) { double re, im; if( p[0] == '(' ) { /* Complex constant. */ re = g_ascii_strtod( p + 1, NULL ); p = break_token( p, "," ); im = g_ascii_strtod( p, NULL ); p = break_token( p, ")" ); } else { /* Real constant. */ re = g_ascii_strtod( p, NULL ); im = 0; } p = break_token( p, "," ); imageinfo_from_text_band( imageinfo, i, re, im ); } #ifdef DEBUG_RGB { char txt[256]; VipsBuf buf = VIPS_BUF_STATIC( txt ); printf( "imageinfo_from_text: out: " ); imageinfo_to_text( imageinfo, &buf ); printf( "%s\n", vips_buf_all( &buf ) ); } #endif /*DEBUG_RGB*/ dirty.left = 0; dirty.top = 0; dirty.width = 1; dirty.height = 1; imageinfo_area_painted( imageinfo, &dirty ); return( TRUE ); } /* Get the image as display RGB in rgb[0-2]. */ void imageinfo_to_rgb( Imageinfo *imageinfo, double *rgb ) { Conversion *conv; Rect area; PEL *p; int i; #ifdef DEBUG_RGB { char txt[256]; VipsBuf buf = VIPS_BUF_STATIC( txt ); printf( "imageinfo_to_rgb: in: " ); imageinfo_to_text( imageinfo, &buf ); printf( "%s\n", vips_buf_all( &buf ) ); } #endif /*DEBUG_RGB*/ /* Make a temporary conv ... we hold the ref. */ conv = conversion_new( NULL ); conversion_set_synchronous( conv, TRUE ); conversion_set_image( conv, imageinfo ); g_object_ref( G_OBJECT( conv ) ); iobject_sink( IOBJECT( conv ) ); area.left = 0; area.top = 0; area.width = 1; area.height = 1; if( im_prepare( conv->ireg, &area ) ) { UNREF( conv ); return; } p = (PEL *) IM_REGION_ADDR( conv->ireg, area.left, area.top ); if( imageinfo->im->Bands < 3 ) for( i = 0; i < 3; i++ ) rgb[i] = p[0] / 255.0; else for( i = 0; i < 3; i++ ) rgb[i] = p[i] / 255.0; #ifdef DEBUG_RGB printf( "imageinfo_to_rgb: out: r = %g, g = %g, b = %g\n", rgb[0], rgb[1], rgb[2] ); #endif /*DEBUG_RGB*/ UNREF( conv ); } /* Try to overwrite an imageinfo with a display RGB colour. */ void imageinfo_from_rgb( Imageinfo *imageinfo, double *rgb ) { Imageinfogroup *imageinfogroup = IMAGEINFOGROUP( ICONTAINER( imageinfo )->parent ); IMAGE *im = imageinfo_get( FALSE, imageinfo ); Imageinfo *in, *out; IMAGE *t1, *t2; int i; Rect dirty; /* Interchange format is sRGB. FIXME ... should let other displays be used here, see ../scraps/calibrate.[hc] */ struct im_col_display *display = im_col_displays( 7 ); #ifdef DEBUG_RGB printf( "imageinfo_from_rgb: in: r = %g, g = %g, b = %g\n", rgb[0], rgb[1], rgb[2] ); #endif /*DEBUG_RGB*/ /* Make 1 pixel images for conversion. */ in = imageinfo_new_temp( imageinfogroup, reduce_context->heap, NULL, "t" ); out = imageinfo_new_temp( imageinfogroup, reduce_context->heap, NULL, "t" ); if( !in || !out ) return; if( !(t1 = im_open_local( out->im, "imageinfo_from_rgb:1", "t" )) || !(t2 = im_open_local( out->im, "imageinfo_from_rgb:1", "t" )) ) return; /* Fill in with rgb. */ im_initdesc( in->im, 1, 1, 3, IM_BBITS_BYTE, IM_BANDFMT_UCHAR, IM_CODING_NONE, IM_TYPE_sRGB, 1.0, 1.0, 0, 0 ); if( im_setupout( in->im ) ) return; for( i = 0; i < 3; i++ ) ((PEL *) in->im->data)[i] = IM_RINT( rgb[i] * 255.0 ); /* To imageinfo->type. Make sure we get a float ... except for LABQ * and RAD. */ if( im->Coding == IM_CODING_LABQ ) { if( im_disp2Lab( in->im, t1, display ) || im_Lab2LabQ( t1, out->im ) ) return; } else if( im->Coding == IM_CODING_RAD ) { if( im_disp2XYZ( in->im, t1, display ) || im_float2rad( t1, out->im ) ) return; } else if( im->Coding == IM_CODING_NONE ) { switch( im->Type ) { case IM_TYPE_XYZ: if( im_disp2XYZ( in->im, out->im, display ) ) return; break; case IM_TYPE_YXY: if( im_disp2XYZ( in->im, t1, display ) || im_XYZ2Yxy( t1, out->im ) ) return; break; case IM_TYPE_LAB: if( im_disp2Lab( in->im, out->im, display ) ) return; break; case IM_TYPE_LCH: if( im_disp2Lab( in->im, t1, display ) || im_Lab2LCh( t1, out->im ) ) return; break; case IM_TYPE_UCS: if( im_disp2Lab( in->im, t1, display ) || im_Lab2LCh( t1, t2 ) || im_LCh2UCS( t2, out->im ) ) return; break; case IM_TYPE_RGB16: case IM_TYPE_GREY16: if( im_lintra( 1.0 / 256.0, in->im, 0.0, out->im ) ) return; break; case IM_TYPE_RGB: case IM_TYPE_sRGB: default: if( im_clip2fmt( in->im, out->im, IM_BANDFMT_FLOAT ) ) return; break; } } #define SET( TYPE, i ) ((TYPE *) im->data)[i] = ((float *) out->im->data)[i]; /* Now ... overwrite imageinfo. */ if( im->Coding == IM_CODING_LABQ || im->Coding == IM_CODING_RAD ) { for( i = 0; i < im->Bands; i++ ) ((PEL *) im->data)[i] = ((PEL *) out->im->data)[i]; } else { for( i = 0; i < im->Bands; i++ ) switch( im->BandFmt ) { case IM_BANDFMT_UCHAR: SET( unsigned char, i ); break; case IM_BANDFMT_CHAR: SET( signed char, i ); break; case IM_BANDFMT_USHORT: SET( unsigned short, i ); break; case IM_BANDFMT_SHORT: SET( signed short, i ); break; case IM_BANDFMT_UINT: SET( unsigned int, i ); break; case IM_BANDFMT_INT: SET( signed int, i ); break; case IM_BANDFMT_FLOAT: SET( float, i ); break; case IM_BANDFMT_DOUBLE: SET( double, i ); break; case IM_BANDFMT_COMPLEX: SET( float, i * 2 ); SET( float, i * 2 + 1 ); break; case IM_BANDFMT_DPCOMPLEX: SET( double, i * 2 ); SET( double, i * 2 + 1 ); break; default: g_assert( FALSE ); } } im_invalidate( im ); #ifdef DEBUG_RGB { char txt[256]; VipsBuf buf = VIPS_BUF_STATIC( txt ); printf( "imageinfo_from_rgb: out: " ); imageinfo_to_text( imageinfo, &buf ); printf( "%s\n", vips_buf_all( &buf ) ); } #endif /*DEBUG_RGB*/ dirty.left = 0; dirty.top = 0; dirty.width = 1; dirty.height = 1; imageinfo_area_painted( imageinfo, &dirty ); } /* Widgets for colour edit. */ typedef struct _ColourEdit { iDialog *idlg; Imageinfo *imageinfo; GtkWidget *colour_widget; } ColourEdit; /* Done button hit. */ static void imageinfo_colour_done_cb( iWindow *iwnd, void *client, iWindowNotifyFn nfn, void *sys ) { ColourEdit *eds = (ColourEdit *) client; Imageinfo *imageinfo = eds->imageinfo; double rgb[4]; gtk_color_selection_get_color( GTK_COLOR_SELECTION( eds->colour_widget ), rgb ); /* This will emit "area_painted" on our imageinfo. */ imageinfo_from_rgb( imageinfo, rgb ); nfn( sys, IWINDOW_YES ); } /* Build the insides of colour edit. */ static void imageinfo_colour_buildedit( iDialog *idlg, GtkWidget *work, ColourEdit *eds ) { Imageinfo *imageinfo = eds->imageinfo; double rgb[4]; eds->colour_widget = gtk_color_selection_new(); gtk_color_selection_set_has_opacity_control( GTK_COLOR_SELECTION( eds->colour_widget ), FALSE ); imageinfo_to_rgb( imageinfo, rgb ); gtk_color_selection_set_color( GTK_COLOR_SELECTION( eds->colour_widget ), rgb ); gtk_box_pack_start( GTK_BOX( work ), eds->colour_widget, TRUE, TRUE, 2 ); gtk_widget_show_all( work ); } void imageinfo_colour_edit( GtkWidget *parent, Imageinfo *imageinfo ) { ColourEdit *eds = INEW( NULL, ColourEdit ); GtkWidget *idlg; eds->imageinfo = imageinfo; idlg = idialog_new(); iwindow_set_title( IWINDOW( idlg ), "Edit Colour" ); idialog_set_build( IDIALOG( idlg ), (iWindowBuildFn) imageinfo_colour_buildedit, eds, NULL, NULL ); idialog_set_callbacks( IDIALOG( idlg ), iwindow_true_cb, NULL, idialog_free_client, eds ); idialog_add_ok( IDIALOG( idlg ), imageinfo_colour_done_cb, "Set Colour" ); iwindow_set_parent( IWINDOW( idlg ), parent ); idialog_set_iobject( IDIALOG( idlg ), IOBJECT( imageinfo ) ); iwindow_build( IWINDOW( idlg ) ); gtk_widget_show( GTK_WIDGET( idlg ) ); } nip2-8.7.0/src/spin.h0000644000175000017500000000300513224651032011224 00000000000000/* a pair of spin buttons */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_SPIN (spin_get_type()) #define SPIN( obj ) (GTK_CHECK_CAST( (obj), TYPE_SPIN, Spin )) #define SPIN_CLASS( klass ) \ (GTK_CHECK_CLASS_CAST( (klass), TYPE_SPIN, SpinClass )) #define IS_SPIN( obj ) (GTK_CHECK_TYPE( (obj), TYPE_SPIN )) #define IS_SPIN_CLASS( klass ) (GTK_CHECK_CLASS_TYPE( (klass), TYPE_SPIN )) typedef struct _Spin { View view; /* My instance vars. */ GtkWidget *up; /* Arrow buttons */ GtkWidget *down; } Spin; typedef struct _SpinClass { ViewClass parent_class; void (*up_click)( Spin * ); void (*down_click)( Spin * ); } SpinClass; GtkType spin_get_type( void ); GtkWidget *spin_new( void ); nip2-8.7.0/src/cache.c0000644000175000017500000005716213224651032011326 00000000000000/* Call vips functions, cache recent results */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #include "ip.h" /* #define DEBUG_TIME #define DEBUG_HISTORY_SANITY #define DEBUG_HISTORY_MISS #define DEBUG_HISTORY #define DEBUG */ /* This is usually turned on from a -D in cflags. #define DEBUG_LEAK */ /* Often want it off ... we get spurious complaints about leaks if an * operation has no images in or out (eg. im_version) because it'll never * get GCed. #undef DEBUG_LEAK */ /* The previous function calls we are caching, plus an LRU queue for flushing. */ static GHashTable *cache_history_table = NULL; static Queue *cache_history_lru = NULL; int cache_history_size = 0; /* Hash from a vargv ... just look at input args and the function name. */ static unsigned int cache_hash( CallInfo *vi ) { int i; unsigned int hash; if( vi->found_hash ) return( vi->hash ); hash = 0; /* add ints, floats, pointers and strings to the hash. FIXME ... could do better on double? could or top and bottom 32 bits but would this be stupid on a 64 bit machine? */ #define HASH_I( I ) hash = (hash << 1) | ((unsigned int) (I)); #define HASH_D( D ) hash = (hash << 1) | ((unsigned int) (D)); #define HASH_P( P ) hash = (hash << 1) | (GPOINTER_TO_UINT( P )); #define HASH_S( S ) hash = (hash << 1) | g_str_hash( S ); /* Add the function to the hash. We often call many functions on * the same args, we'd like these calls to hash to different numbers. */ HASH_P( vi->fn ); for( i = 0; i < vi->fn->argc; i++ ) { im_type_desc *ty = vi->fn->argv[i].desc; if( call_type_needs_input( ty ) ) { switch( call_lookup_type( ty->type ) ) { case CALL_DOUBLE: HASH_D( *((double *) vi->vargv[i]) ); break; case CALL_INT: HASH_I( *((int *) vi->vargv[i]) ); break; case CALL_COMPLEX: HASH_D( ((double *) vi->vargv[i])[0] ); HASH_D( ((double *) vi->vargv[i])[1] ); break; case CALL_STRING: HASH_S( (char *) vi->vargv[i] ); break; case CALL_GVALUE: case CALL_INTERPOLATE: break; case CALL_DOUBLEVEC: { im_doublevec_object *v = (im_doublevec_object *) vi->vargv[i]; int j; for( j = 0; j < v->n; j++ ) HASH_D( v->vec[j] ); break; } case CALL_INTVEC: { im_intvec_object *v = (im_intvec_object *) vi->vargv[i]; int j; for( j = 0; j < v->n; j++ ) HASH_I( v->vec[j] ); break; } case CALL_DMASK: { im_mask_object *mo = vi->vargv[i]; DOUBLEMASK *mask = mo->mask; /* mask can be NULL if we are called after * call_new() but before we've built the arg * list. */ if( mask ) { int ne = mask->xsize * mask->ysize; int j; for( j = 0; j < ne; j++ ) HASH_D( mask->coeff[j] ); HASH_D( mask->scale ); HASH_D( mask->offset ); } break; } case CALL_IMASK: { im_mask_object *mo = vi->vargv[i]; INTMASK *mask = mo->mask; /* mask can be NULL if we are called after * call_new() but before we've built the arg * list. */ if( mask ) { int ne = mask->xsize * mask->ysize; int j; for( j = 0; j < ne; j++ ) HASH_I( mask->coeff[j] ); HASH_I( mask->scale ); HASH_I( mask->offset ); } break; } default: case CALL_NONE: break; } } } /* And the input images. */ for( i = 0; i < vi->ninii; i++ ) HASH_P( vi->inii[i] ); vi->found_hash = TRUE; vi->hash = hash; return( hash ); } /* Are two function calls equal. Check the func and the input args. */ static gboolean cache_equal( CallInfo *vi1, CallInfo *vi2 ) { int i; im_function *fn = vi1->fn; if( vi1 == vi2 ) return( TRUE ); if( vi1->fn != vi2->fn ) return( FALSE ); for( i = 0; i < fn->argc; i++ ) { im_type_desc *ty = fn->argv[i].desc; if( call_type_needs_input( ty ) ) { switch( call_lookup_type( ty->type ) ) { case CALL_DOUBLE: if( *((double *) vi1->vargv[i]) != *((double *) vi2->vargv[i]) ) return( FALSE ); break; case CALL_INT: if( *((int *) vi1->vargv[i]) != *((int *) vi2->vargv[i]) ) return( FALSE ); break; case CALL_COMPLEX: if( ((double *) vi1->vargv[i])[0] != ((double *) vi2->vargv[i])[0] ) return( FALSE ); if( ((double *) vi1->vargv[i])[1] != ((double *) vi2->vargv[i])[1] ) return( FALSE ); break; case CALL_STRING: if( strcmp( (char *) vi1->vargv[i], (char *) vi2->vargv[i] ) != 0 ) return( FALSE ); break; case CALL_DOUBLEVEC: { im_doublevec_object *v1 = (im_doublevec_object *) vi1->vargv[i]; im_doublevec_object *v2 = (im_doublevec_object *) vi2->vargv[i]; int j; for( j = 0; j < v1->n; j++ ) if( v1->vec[j] != v2->vec[j] ) return( FALSE ); break; } case CALL_INTVEC: { im_intvec_object *v1 = (im_intvec_object *) vi1->vargv[i]; im_intvec_object *v2 = (im_intvec_object *) vi2->vargv[i]; int j; for( j = 0; j < v1->n; j++ ) if( v1->vec[j] != v2->vec[j] ) return( FALSE ); break; } case CALL_DMASK: { im_mask_object *mo1 = (im_mask_object *) vi1->vargv[i]; im_mask_object *mo2 = (im_mask_object *) vi2->vargv[i]; DOUBLEMASK *mask1 = mo1->mask; DOUBLEMASK *mask2 = mo2->mask; int ne = mask1->xsize * mask2->ysize; int j; if( mask1->xsize != mask2->xsize || mask1->ysize != mask2->ysize ) return( FALSE ); for( j = 0; j < ne; j++ ) if( mask1->coeff[j] != mask2->coeff[j] ) return( FALSE ); if( mask1->scale != mask2->scale ) return( FALSE ); if( mask1->offset != mask2->offset ) return( FALSE ); break; } case CALL_IMASK: { im_mask_object *mo1 = (im_mask_object *) vi1->vargv[i]; im_mask_object *mo2 = (im_mask_object *) vi2->vargv[i]; INTMASK *mask1 = mo1->mask; INTMASK *mask2 = mo2->mask; int ne = mask1->xsize * mask2->ysize; int j; if( mask1->xsize != mask2->xsize || mask1->ysize != mask2->ysize ) return( FALSE ); for( j = 0; j < ne; j++ ) if( mask1->coeff[j] != mask2->coeff[j] ) return( FALSE ); if( mask1->scale != mask2->scale ) return( FALSE ); if( mask1->offset != mask2->offset ) return( FALSE ); break; } case CALL_IMAGEVEC: { im_imagevec_object *v1 = (im_imagevec_object *) vi1->vargv[i]; im_imagevec_object *v2 = (im_imagevec_object *) vi2->vargv[i]; if( v1->n != v2->n ) return( FALSE ); break; } /* Very strict. Could be more generous here: we'd need * to have a pspec for each argument type and then use * g_param_values_cmp() to test equality. */ case CALL_GVALUE: if( vi1->vargv[i] != vi2->vargv[i] ) return( FALSE ); break; case CALL_INTERPOLATE: if( vi1->vargv[i] != vi2->vargv[i] ) return( FALSE ); break; default: case CALL_NONE: break; } } } /* And the input images. */ if( vi1->ninii != vi2->ninii ) return( FALSE ); for( i = 0; i < vi1->ninii; i++ ) if( vi1->inii[i] != vi2->inii[i] ) return( FALSE ); return( TRUE ); } #ifdef DEBUG_HISTORY_SANITY static void cache_history_sanity_sub( CallInfo *vi ) { g_assert( g_slist_find( cache_history_lru->list, vi ) ); } static void cache_history_sanity( void ) { GSList *p; if( !cache_history_lru || !cache_history_table ) return; /* Everything that's on the LRU should be in the history table. */ for( p = cache_history_lru->list; p; p = p->next ) { CallInfo *vi = (CallInfo *) p->data; g_assert( g_hash_table_lookup( cache_history_table, vi ) ); g_assert( vi->fn ); g_assert( vi->fn->argc > 0 && vi->fn->argc < MAX_CALL_ARGS ); g_assert( vi->in_cache ); } /* Everything that's on the history table should be in the LRU. */ g_hash_table_foreach( cache_history_table, (GHFunc) cache_history_sanity_sub, NULL ); } #endif /*DEBUG_HISTORY_SANITY */ /* Is a function call in our history? Return the old one. */ static CallInfo * cache_history_lookup( CallInfo *vi ) { CallInfo *old_vi; if( !cache_history_table ) { cache_history_table = g_hash_table_new( (GHashFunc) cache_hash, (GEqualFunc) cache_equal ); cache_history_lru = queue_new(); } old_vi = (CallInfo *) g_hash_table_lookup( cache_history_table, vi ); #ifdef DEBUG_HISTORY if( old_vi ) printf( "cache_history_lookup: found \"%s\"\n", old_vi->name ); #endif /*DEBUG_HISTORY*/ #ifdef DEBUG_HISTORY_SANITY cache_history_sanity(); #endif /*DEBUG_HISTORY_SANITY*/ return( old_vi ); } /* Bump to end of LRU. */ static void cache_history_touch( CallInfo *vi ) { g_assert( vi->in_cache ); queue_remove( cache_history_lru, vi ); queue_add( cache_history_lru, vi ); #ifdef DEBUG_HISTORY_SANITY cache_history_sanity(); #endif /*DEBUG_HISTORY_SANITY*/ #ifdef DEBUG_HISTORY printf( "cache_history_touch: bumping \"%s\"\n", vi->name ); #endif /*DEBUG_HISTORY*/ } /* Are we in the history? Remove us. Called from cache_info_dispose() on unref, * don't call this directly. */ void cache_history_remove( CallInfo *vi ) { int i; if( vi->in_cache ) { queue_remove( cache_history_lru, vi ); g_hash_table_remove( cache_history_table, vi ); cache_history_size -= 1; vi->in_cache = FALSE; #ifdef DEBUG_HISTORY printf( "cache_history_remove: removing \"%s\"\n", vi->name ); #endif /*DEBUG_HISTORY*/ } /* Disconnect signals. */ for( i = 0; i < vi->noutii; i++ ) FREESID( vi->outii_destroy_sid[i], vi->outii[i] ); for( i = 0; i < vi->ninii; i++ ) { FREESID( vi->inii_destroy_sid[i], vi->inii[i] ); FREESID( vi->inii_invalidate_sid[i], vi->inii[i] ); } #ifdef DEBUG_HISTORY_SANITY cache_history_sanity(); #endif /*DEBUG_HISTORY_SANITY*/ } static void cache_history_remove_lru( void ) { CallInfo *vi; vi = (CallInfo *) queue_head( cache_history_lru ); #ifdef DEBUG_HISTORY printf( "cache_history_remove_lru: flushing \"%s\"\n", vi->name ); #endif /*DEBUG_HISTORY*/ g_object_unref( vi ); #ifdef DEBUG_HISTORY_SANITY cache_history_sanity(); #endif /*DEBUG_HISTORY_SANITY*/ } static void cache_history_destroy_cb( Imageinfo *ii, CallInfo *vi ) { #ifdef DEBUG_HISTORY printf( "cache_history_destroy_cb: on death of ii, uncaching \"%s\"\n", vi->name ); #endif /*DEBUG_HISTORY*/ g_object_unref( vi ); } static void cache_history_invalidate_cb( Imageinfo *ii, CallInfo *vi ) { #ifdef DEBUG_HISTORY printf( "cache_history_invalidate_cb: " "on invalidate of ii, uncaching \"%s\"\n", vi->name ); #endif /*DEBUG_HISTORY*/ g_object_unref( vi ); } /* Add a function call to the history. */ static void cache_history_add( CallInfo *vi ) { int i; #ifdef DEBUG_HISTORY_SANITY cache_history_sanity(); #endif /*DEBUG_HISTORY_SANITY*/ #ifdef DEBUG_HISTORY printf( "cache_history_add: adding \"%s\" (%p), hash = %u\n", vi->name, vi, vi->hash ); #endif /*DEBUG_HISTORY*/ g_assert( !g_hash_table_lookup( cache_history_table, vi ) ); g_assert( !vi->in_cache ); g_hash_table_insert( cache_history_table, vi, vi ); cache_history_size += 1; g_assert( g_hash_table_lookup( cache_history_table, vi ) ); queue_add( cache_history_lru, vi ); vi->in_cache = TRUE; g_object_ref( vi ); /* If any of our ii are destroyed, we must go too. */ for( i = 0; i < vi->noutii; i++ ) vi->outii_destroy_sid[i] = g_signal_connect( vi->outii[i], "destroy", G_CALLBACK( cache_history_destroy_cb ), vi ); /* If any of our input ii are destroyed or painted on, we must also * uncache. */ for( i = 0; i < vi->ninii; i++ ) { vi->inii_destroy_sid[i] = g_signal_connect( vi->inii[i], "destroy", G_CALLBACK( cache_history_destroy_cb ), vi ); vi->inii_invalidate_sid[i] = g_signal_connect( vi->inii[i], "invalidate", G_CALLBACK( cache_history_invalidate_cb ), vi ); } /* History too big? Flush! */ if( queue_length( cache_history_lru ) > CALL_HISTORY_MAX ) cache_history_remove_lru(); #ifdef DEBUG_HISTORY_SANITY cache_history_sanity(); #endif /*DEBUG_HISTORY_SANITY*/ } /* Sort out the input images. */ static gboolean cache_gather( CallInfo *vi ) { int i, j; int ni; /* No input images. */ if( vi->ninii == 0 ) return( TRUE ); /* Can we LUT? Function needs to be LUTable, all input images * have to be the same underlying image, and image must be uncoded * IM_BANDFMT_UCHAR. */ vi->use_lut = (vi->fn->flags & IM_FN_PTOP) && imageinfo_same_underlying( vi->inii, vi->ninii ) && imageinfo_get_underlying( vi->inii[0] )->Coding == IM_CODING_NONE && imageinfo_get_underlying( vi->inii[0] )->BandFmt == IM_BANDFMT_UCHAR; if( vi->use_lut ) for( i = 0; i < vi->noutii; i++ ) imageinfo_set_underlying( vi->outii[i], vi->inii[0] ); /* Now fill the vargv vector with the IMAGE pointers. */ ni = 0; for( i = 0; i < vi->fn->argc; i++ ) { im_type_desc *ty = vi->fn->argv[i].desc; if( !call_type_needs_input( ty ) ) continue; if( strcmp( ty->type, IM_TYPE_IMAGE ) == 0 ) { Imageinfo *inii = vi->inii[ni++]; IMAGE *im; if( !(im = imageinfo_get( vi->use_lut, inii )) ) return( FALSE ); /* RW operations need an extra copy. Tyhe vargv will * already have been created by cache_build_output(). */ if( ty->flags & IM_TYPE_RW ) { if( im_copy( im, vi->vargv[i] ) ) return( FALSE ); } else vi->vargv[i] = im; } if( strcmp( ty->type, IM_TYPE_IMAGEVEC ) == 0 ) { im_imagevec_object *iv = (im_imagevec_object *) vi->vargv[i]; /* Found an input image vector. Add all the imageinfo * in the vector. */ for( j = 0; j < iv->n; j++ ) { Imageinfo *inii = vi->inii[ni++]; IMAGE *im; if( !(im = imageinfo_get( vi->use_lut, inii )) ) return( FALSE ); iv->vec[j] = im; } } } /* We should have used up all the images exactly. */ g_assert( ni == vi->ninii ); return( TRUE ); } /* VIPS types -> a string buffer. Yuk! Should be a method on object type. This * is used to generate vips history, so it has to be in sh format. */ void cache_tochar_shell( CallInfo *vi, int i, VipsBuf *buf ) { im_object obj = vi->vargv[i]; im_type_desc *ty = vi->fn->argv[i].desc; switch( call_lookup_type( ty->type ) ) { case CALL_DOUBLE: vips_buf_appendf( buf, "%g", *((double*)obj) ); break; case CALL_INT: vips_buf_appendf( buf, "%d", *((int*)obj) ); break; case CALL_COMPLEX: vips_buf_appendf( buf, "(%g, %g)", ((double*)obj)[0], ((double*)obj)[1] ); break; case CALL_STRING: vips_buf_appendf( buf, "\"%s\"", (char*)obj ); break; case CALL_IMAGE: { IMAGE *im = (IMAGE *) obj; /* In quotes, in case there are spaces in the * filename. We also need to test im, as we might be called * before the im has been generated. */ vips_buf_appendf( buf, "\"%s\"", im ? im->filename : "null" ); break; } case CALL_DMASK: case CALL_IMASK: { im_mask_object *mo = obj; vips_buf_appendf( buf, "%s", NN( mo->name ) ); break; } case CALL_DOUBLEVEC: { im_doublevec_object *v = (im_doublevec_object *) obj; int j; vips_buf_appendf( buf, "\"" ); for( j = 0; j < v->n; j++ ) vips_buf_appendf( buf, "%g ", v->vec[j] ); vips_buf_appendf( buf, "\"" ); break; } case CALL_INTVEC: { im_intvec_object *v = (im_intvec_object *) obj; int j; vips_buf_appendf( buf, "\"" ); for( j = 0; j < v->n; j++ ) vips_buf_appendf( buf, "%d ", v->vec[j] ); vips_buf_appendf( buf, "\"" ); break; } case CALL_IMAGEVEC: { im_imagevec_object *v = (im_imagevec_object *) obj; int j; vips_buf_appendf( buf, "\"" ); for( j = 0; j < v->n; j++ ) vips_buf_appendf( buf, "%s ", v->vec[j]->filename ); vips_buf_appendf( buf, "\"" ); break; } case CALL_GVALUE: { GValue *value = (GValue *) obj; vips_buf_appendgv( buf, value ); break; } case CALL_INTERPOLATE: vips_object_to_string( VIPS_OBJECT( obj ), buf ); break; case CALL_NONE: if( strcmp( ty->type, IM_TYPE_DISPLAY ) == 0 ) /* Just assume sRGB. */ vips_buf_appendf( buf, "sRGB" ); break; default: g_assert( FALSE ); } } /* VIPS types -> a buffer. For tracing calls and debug. */ void cache_tochar_trace( CallInfo *vi, int i, VipsBuf *buf ) { im_object obj = vi->vargv[i]; im_type_desc *vips = vi->fn->argv[i].desc; switch( call_lookup_type( vips->type ) ) { case CALL_DOUBLE: vips_buf_appendf( buf, "%g", *((double*)obj) ); break; case CALL_INT: vips_buf_appendf( buf, "%d", *((int*)obj) ); break; case CALL_COMPLEX: vips_buf_appendf( buf, "(%g, %g)", ((double*)obj)[0], ((double*)obj)[1] ); break; case CALL_STRING: vips_buf_appendf( buf, "\"%s\"", (char*) obj ); break; case CALL_IMAGE: vips_buf_appendi( buf, (IMAGE *) obj ); break; case CALL_DMASK: vips_buf_appendf( buf, "dmask" ); break; case CALL_IMASK: vips_buf_appendf( buf, "imask" ); break; case CALL_DOUBLEVEC: vips_buf_appendf( buf, "doublevec" ); break; case CALL_INTVEC: vips_buf_appendf( buf, "intvec" ); break; case CALL_IMAGEVEC: vips_buf_appendf( buf, "imagevec" ); break; case CALL_GVALUE: { GValue *value = (GValue *) obj; vips_buf_appends( buf, "(gvalue" ); vips_buf_appendgv( buf, value ); vips_buf_appendf( buf, ")" ); break; } case CALL_INTERPOLATE: vips_object_to_string( VIPS_OBJECT( obj ), buf ); break; default: g_assert( FALSE ); } } /* Get the args from the VIPS call buffer. */ static void cache_args_vips( CallInfo *vi, VipsBuf *buf ) { int i; vips_buf_appendf( buf, _( "You passed:" ) ); vips_buf_appendf( buf, "\n" ); for( i = 0; i < vi->fn->argc; i++ ) { im_type_desc *ty = vi->fn->argv[i].desc; char *name = vi->fn->argv[i].name; if( call_type_needs_input( ty ) ) { vips_buf_appendf( buf, " %s - ", name ); cache_tochar_trace( vi, i, buf ); vips_buf_appendf( buf, "\n" ); } } } /* There's a problem calling the function. Show args from the vips call * struct. */ static void cache_error_fn_vips( CallInfo *vi ) { char txt[1000]; VipsBuf buf = VIPS_BUF_STATIC( txt ); error_top( _( "VIPS library error." ) ); vips_buf_appendf( &buf, _( "Error calling library function \"%s\" (%s)." ), vi->name, vi->fn->desc ); vips_buf_appendf( &buf, "\n" ); vips_buf_appendf( &buf, _( "VIPS library: %s" ), im_error_buffer() ); im_error_clear(); vips_buf_appendf( &buf, "\n" ); cache_args_vips( vi, &buf ); vips_buf_appendf( &buf, "\n" ); call_usage( &buf, vi->fn ); error_sub( "%s", vips_buf_all( &buf ) ); } static gboolean cache_build_argv( CallInfo *vi, char **argv ) { int i; for( i = 0; i < vi->fn->argc; i++ ) { char txt[512]; VipsBuf buf = VIPS_BUF_STATIC( txt ); cache_tochar_shell( vi, i, &buf ); if( !(argv[i] = im_strdup( NULL, vips_buf_all( &buf ) )) ) return( FALSE ); } #ifdef DEBUG printf( "cache_build_argv: argv for %s is:\n ", vi->fn->name ); for( i = 0; i < vi->fn->argc; i++ ) printf( "%s ", NN( argv[i] ) ); printf( "\n" ); #endif /*DEBUG*/ return( TRUE ); } static void cache_free_argv( int argc, char **argv ) { int i; for( i = 0; i < argc; i++ ) { IM_FREE( argv[i] ); } IM_FREE( argv ); } /* Update the VIPS hist for all output images. */ static void cache_update_hist( CallInfo *vi ) { int argc = vi->fn->argc; char **argv; int i; #ifdef DEBUG printf( "cache_update_hist: %s\n", vi->name ); #endif /*DEBUG*/ /* No output images? Nothing to do. */ if( vi->nires == 0 ) return; /* Build an argv for this call. +1 for NULL termination. */ if( !(argv = IM_ARRAY( NULL, argc + 1, char * )) ) return; for( i = 0; i < argc + 1; i++ ) argv[i] = NULL; if( !cache_build_argv( vi, argv ) ) { cache_free_argv( argc, argv ); return; } for( i = 0; i < vi->nres; i++ ) { int j = vi->outpos[i]; im_type_desc *ty = vi->fn->argv[j].desc; /* Image output. */ if( call_lookup_type( ty->type ) == CALL_IMAGE ) { #ifdef DEBUG printf( "cache_update_hist: adding to arg %d\n", j ); #endif /*DEBUG*/ im_updatehist( vi->vargv[j], vi->fn->name, argc, argv ); } } cache_free_argv( argc, argv ); } /* Call a vips operation. * * The cache takes ownership of the CallInfo passed in, and returns a ref to a * CallInfo (might be a different one) that contains the result. Should be * unreffed when you're done with it. * * On error, return NULL. */ CallInfo * cache_dispatch( CallInfo *vi, PElement *out ) { CallInfo *old_vi; #ifdef DEBUG_HISTORY_SANITY cache_history_sanity(); #endif /*DEBUG_HISTORY_SANITY*/ /* Calculate the hash for this vi after building it, but before we do * cache_gather(); * * We want the hash to reflect the args as supplied by nip2, not the * args as transformed by cache_gather() for this specific call. */ (void) cache_hash( vi ); /* Look over the images we have and turn input Imageinfos to IMAGEs. * If we can do this with a lut, set all that up. */ if( !cache_gather( vi ) ) { g_object_unref( vi ); return( NULL ); } /* We have to show args after gather, since the tracer wants IMAGE not * Imageinfo. */ #ifdef DEBUG { int i; for( i = 0; i < vi->fn->argc; i++ ) { im_type_desc *ty = vi->fn->argv[i].desc; char txt[512]; VipsBuf buf = VIPS_BUF_STATIC( txt ); printf( "cache_fill_spine: arg[%d] (%s) = ", i, ty->type ); cache_tochar_trace( vi, i, &buf ); printf( "%s\n", vips_buf_all( &buf ) ); } } #endif /*DEBUG*/ /* Is this function call in the history? */ if( (old_vi = cache_history_lookup( vi )) ) { /* Yes: reuse! unref our arg to junk it, adda ref to the * cached call for our caller. */ g_object_unref( vi ); vi = old_vi; g_object_ref( vi ); if( trace_flags & TRACE_VIPS ) vips_buf_appendf( trace_current(), "(from cache) " ); #ifdef DEBUG_HISTORY printf( "cache_dispatch: found %s in history\n", vi->name ); #endif /*DEBUG_HISTORY*/ } else { /* No: call function. */ int result; #ifdef DEBUG_TIME static GTimer *timer = NULL; if( !timer ) timer = g_timer_new(); g_timer_reset( timer ); #endif /*DEBUG_TIME*/ #ifdef DEBUG_HISTORY_MISS printf( "cache_dispatch: calling %s\n", vi->name ); #endif /*DEBUG_HISTORY_MISS*/ /* Be careful. Eval callbacks from this may do anything, * including call cache_dispatch(). */ result = vi->fn->disp( vi->vargv ); #ifdef DEBUG_TIME printf( "cache_dispatch: %s - %g seconds\n", vi->name, g_timer_elapsed( timer, NULL ) ); #endif /*DEBUG_TIME*/ if( result ) { cache_error_fn_vips( vi ); g_object_unref( vi ); return( NULL ); } cache_update_hist( vi ); } /* Add to our operation cache, if necessary. */ if( !(vi->fn->flags & IM_FN_NOCACHE) ) { if( vi->in_cache ) /* Already in the history. Just touch the time. */ cache_history_touch( vi ); else if( (old_vi = cache_history_lookup( vi )) ) { /* We have an equal but older item there? This can * happen with nested calls. Touch the old one. */ cache_history_touch( old_vi ); vi = old_vi; } else cache_history_add( vi ); } #ifdef DEBUG_HISTORY_SANITY cache_history_sanity(); #endif /*DEBUG_HISTORY_SANITY*/ return( vi ); } nip2-8.7.0/src/tool.c0000644000175000017500000005325613224651032011240 00000000000000/* Manage toolkits and their display. */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG_VERBOSE #define DEBUG_MENUS #define DEBUG #define DEBUG_TOOLITEM */ #include "ip.h" static FilemodelClass *parent_class = NULL; /* Largest string we let the user set for name/tip/etc. */ #define MAX_NAME (256) void tool_error( Tool *tool, VipsBuf *buf ) { if( tool->lineno != -1 ) { vips_buf_appends( buf, " (" ); if( FILEMODEL( tool->kit )->filename ) vips_buf_appends( buf, FILEMODEL( tool->kit )->filename ); else vips_buf_appends( buf, IOBJECT( tool->kit )->name ); vips_buf_appendf( buf, ":%d)", tool->lineno ); } } static void * tool_linkreport_sym_sym( Symbol *child, Symbol *parent, VipsBuf *buf, gboolean *found ) { /* Don't report generated syms eg. from lcomps or pattern * matches. */ if( child->type == SYM_ZOMBIE && !child->generated && !parent->generated && !compile_resolve_top( child ) ) { symbol_name_error( parent, buf ); vips_buf_appendf( buf, " " ); /* used as in "fred refers to undefined symbol jim" */ vips_buf_appendf( buf, _( "refers to undefined symbol" ) ); vips_buf_appendf( buf, " " ); symbol_qualified_name( child, buf ); vips_buf_appendf( buf, "\n" ); *found = TRUE; } return( NULL ); } static void * tool_linkreport_sym( Symbol *sym, VipsBuf *buf, gboolean *found ) { if( sym->expr ) return( slist_map3( sym->expr->compile->children, (SListMap3Fn) tool_linkreport_sym_sym, sym, buf, found ) ); return( NULL ); } void * tool_linkreport_tool( Tool *tool, VipsBuf *buf, gboolean *found ) { if( tool->type != TOOL_SYM ) return( NULL ); return( symbol_map_all( tool->sym, (symbol_map_fn) tool_linkreport_sym, buf, found ) ); } static void tool_finalize( GObject *gobject ) { Tool *tool; #ifdef DEBUG printf( "tool_finalize: %p %s\n", gobject, NN( IOBJECT( gobject )->name ) ); #endif /*DEBUG*/ g_return_if_fail( gobject != NULL ); g_return_if_fail( IS_TOOL( gobject ) ); tool = TOOL( gobject ); IM_FREE( tool->help ); G_OBJECT_CLASS( parent_class )->finalize( gobject ); } static void *toolitem_free( Toolitem *toolitem ); /* Remove a tool. Also strip the sym, if any. */ static void tool_dispose( GObject *gobject ) { Tool *tool = TOOL( gobject ); #ifdef DEBUG printf( "tool_dispose: destroying tool for " ); if( tool->sym ) symbol_name_print( tool->sym ); else printf( "anonymous-tool" ); printf( "at addr %p\n", tool ); #endif /*DEBUG*/ FREESID( tool->new_value_sid, tool->link_sym ); /* Unlink from symbol and toolkit. This changes the kit - mark it as * dirty. */ if( tool->sym ) { Symbol *sym = tool->sym; sym->tool = NULL; tool->sym = NULL; symbol_strip( sym ); /* Anything that referred to this symbol is going to need a * recalc. */ } if( tool->kit ) { filemodel_set_modified( FILEMODEL( tool->kit ), TRUE ); tool->kit = NULL; } IM_FREEF( toolitem_free, tool->toolitem ); G_OBJECT_CLASS( parent_class )->dispose( gobject ); } static View * tool_view_new( Model *model, View *parent ) { return( toolview_new() ); } /* Save a tool's definition to a file. */ static gboolean tool_save_text( Model *model, iOpenFile *of ) { Tool *tool = TOOL( model ); Symbol *sym = tool->sym; switch( tool->type ) { case TOOL_SYM: if( sym->expr ) if( !ifile_write( of, "%s;\n\n", sym->expr->compile->text ) ) return( FALSE ); break; case TOOL_SEP: if( !ifile_write( of, "#separator\n\n" ) ) return( FALSE ); break; case TOOL_DIA: if( !ifile_write( of, "#dialog \"%s\" \"%s\"\n\n", IOBJECT( tool )->name, FILEMODEL( tool )->filename ) ) return( FALSE ); break; default: g_assert( FALSE ); } return( TRUE ); } static char * tool_type_to_char( Tooltype type ) { switch( type ) { case TOOL_SYM: return( "symbol" ); case TOOL_DIA: return( "dialog" ); case TOOL_SEP: return( "separator" ); default: g_assert( FALSE ); /* Keep gcc happy. */ return( FALSE ); } } static void tool_info( iObject *iobject, VipsBuf *buf ) { Tool *tool = TOOL( iobject ); IOBJECT_CLASS( parent_class )->info( iobject, buf ); vips_buf_appendf( buf, "type = \"%s\"\n", tool_type_to_char( tool->type ) ); if( tool->type == TOOL_SYM ) vips_buf_appendf( buf, "symbol = \"%s\"\n", IOBJECT( tool->sym )->name ); if( tool->lineno != -1 ) vips_buf_appendf( buf, "lineno = %d\n", tool->lineno ); if( tool->kit ) vips_buf_appendf( buf, "toolkit = \"%s\"\n", IOBJECT( tool->kit )->name ); } static void tool_parent_add( iContainer *child ) { Tool *tool = TOOL( child ); Toolkit *kit = TOOLKIT( child->parent ); tool->kit = kit; ICONTAINER_CLASS( parent_class )->parent_add( child ); } static void tool_class_init( ToolClass *class ) { GObjectClass *gobject_class = (GObjectClass *) class; iObjectClass *iobject_class = (iObjectClass *) class; iContainerClass *icontainer_class = (iContainerClass *) class; ModelClass *model_class = (ModelClass *) class; parent_class = g_type_class_peek_parent( class ); /* Create signals. */ /* Init methods. */ gobject_class->finalize = tool_finalize; gobject_class->dispose = tool_dispose; iobject_class->info = tool_info; icontainer_class->parent_add = tool_parent_add; model_class->view_new = tool_view_new; model_class->save_text = tool_save_text; } static void tool_init( Tool *tool ) { tool->type = TOOL_SEP; tool->sym = NULL; tool->kit = NULL; tool->lineno = -1; } GType tool_get_type( void ) { static GType type = 0; if( !type ) { static const GTypeInfo info = { sizeof( ToolClass ), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) tool_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof( Tool ), 32, /* n_preallocs */ (GInstanceInitFunc) tool_init, }; type = g_type_register_static( TYPE_FILEMODEL, "Tool", &info, 0 ); } return( type ); } /* Add a tool to a toolkit. */ static void tool_link( Tool *tool, Toolkit *kit, int pos, const char *name ) { #ifdef DEBUG printf( "tool_link: %s\n", name ); #endif /*DEBUG*/ filemodel_set_modified( FILEMODEL( kit ), TRUE ); iobject_set( IOBJECT( tool ), name, NULL ); icontainer_child_add( ICONTAINER( kit ), ICONTAINER( tool ), pos ); } static void * toolitem_free( Toolitem *toolitem ) { Toolitem *parent = toolitem->parent; #ifdef DEBUG_TOOLITEM printf( "toolitem_free: %s\n", toolitem->name ); #endif /*DEBUG_TOOLITEM*/ slist_map( toolitem->children, (SListMapFn) toolitem_free, NULL ); g_assert( !toolitem->children ); if( parent ) { parent->children = g_slist_remove( parent->children, toolitem ); toolitem->parent = NULL; } IM_FREE( toolitem->label ); IM_FREE( toolitem->name ); IM_FREE( toolitem->icon ); IM_FREE( toolitem->tooltip ); IM_FREE( toolitem->help ); IM_FREE( toolitem->action ); IM_FREE( toolitem->path ); IM_FREE( toolitem->user_path ); IM_FREE( toolitem ); return( NULL ); } static Toolitem * toolitem_new( Toolitem *parent, Compile *compile, Tool *tool ) { Toolitem *toolitem; if( !(toolitem = INEW( NULL, Toolitem )) ) return( NULL ); toolitem->compile = compile; toolitem->tool = tool; toolitem->action_sym = NULL; toolitem->is_separator = FALSE; toolitem->is_pullright = FALSE; toolitem->children = NULL; toolitem->parent = parent; toolitem->is_action = FALSE; toolitem->label = NULL; toolitem->name = NULL; toolitem->icon = NULL; toolitem->tooltip = NULL; toolitem->help = NULL; toolitem->action = NULL; toolitem->path = NULL; toolitem->user_path = NULL; if( parent ) parent->children = g_slist_append( parent->children, toolitem ); return( toolitem ); } /* Set label & name & icon. FIXME ... we will do repeated heap_is_instanceof() during item build, do it once and set a flag instead */ static void toolitem_set_name( Toolitem *toolitem, PElement *root ) { gboolean result; char value[MAX_NAME]; int i; if( root && heap_is_instanceof( CLASS_MENUITEM, root, &result ) && result ) { if( class_get_member_string( root, MEMBER_LABEL, value, MAX_NAME ) ) { char *p, *q; /* Save the i18n-ed version. */ IM_SETSTR( toolitem->label, _( value ) ); /* Strip underscores (they mark mnemonics). Can't use * strrcpy() or memccpy(), we have overlapping blocks. */ im_strncpy( value, toolitem->label, MAX_NAME ); for( p = q = value; *p; p++ ) if( *p != '_' ) *q++ = *p; *q = '\0'; IM_SETSTR( toolitem->name, value ); } if( class_get_member_string( root, MEMBER_ICON, value, MAX_NAME ) ) IM_SETSTR( toolitem->icon, value ); } else { /* Remove underscores from the object name ... we don't want * them to be mnemonics. */ im_strncpy( value, IOBJECT( toolitem->compile->sym )->name, MAX_NAME ); for( i = 0; value[i]; i++ ) if( value[i] == '_' ) value[i] = ' '; IM_SETSTR( toolitem->label, value ); IM_SETSTR( toolitem->name, toolitem->label ); } if( root && heap_is_instanceof( CLASS_MENUSEPARATOR, root, &result ) && result ) toolitem->is_separator = TRUE; } static void toolitem_set_tooltip( Toolitem *toolitem, PElement *root ) { gboolean result; char value[MAX_NAME]; if( root && heap_is_instanceof( CLASS_MENUITEM, root, &result ) && result && class_get_member_string( root, MEMBER_TOOLTIP, value, MAX_NAME ) ) { IM_SETSTR( toolitem->tooltip, _( value ) ); } else if( toolitem->tool && toolitem->tool->help ) IM_SETSTR( toolitem->tooltip, toolitem->tool->help ); } static void toolitem_set_pullright( Toolitem *toolitem, PElement *root ) { gboolean result; /* New-style pullright? */ if( root && heap_is_instanceof( CLASS_MENUPULLRIGHT, root, &result ) && result ) toolitem->is_pullright = TRUE; /* Old-style pullright? */ else if( is_value( toolitem->compile->sym ) && is_class( toolitem->compile ) && !toolitem->compile->has_super && toolitem->compile->nparam == 0 ) toolitem->is_pullright = TRUE; } static void toolitem_set_action( Toolitem *toolitem, PElement *root ) { gboolean result; char txt[256]; VipsBuf buf = VIPS_BUF_STATIC( txt ); if( toolitem->parent ) vips_buf_appendf( &buf, "%s.", toolitem->parent->action ); vips_buf_appendf( &buf, "%s", IOBJECT( toolitem->compile->sym )->name ); /* If this is a Menuaction, we need the action member. */ if( root && heap_is_instanceof( CLASS_MENUACTION, root, &result ) && result ) { PElement out; toolitem->is_action = TRUE; (void) class_get_member( root, MEMBER_ACTION, &toolitem->action_sym, &out ); } /* If there's an action member, use that. */ if( toolitem->is_action ) vips_buf_appends( &buf, "." MEMBER_ACTION ); IM_SETSTR( toolitem->action, vips_buf_all( &buf ) ); /* No action member found and this is an item (ie. not a pullright)? * Default to the sym itself. */ if( !toolitem->action_sym && !toolitem->is_pullright ) toolitem->action_sym = toolitem->compile->sym; } static void toolitem_set_path( Toolitem *toolitem ) { char txt[256]; VipsBuf buf = VIPS_BUF_STATIC( txt ); if( toolitem->parent ) vips_buf_appendf( &buf, "%s", toolitem->parent->path ); else vips_buf_appendf( &buf, "/Toolkits/%s", IOBJECT( toolitem->tool->kit )->name ); vips_buf_appendf( &buf, "/%s", toolitem->name ); IM_SETSTR( toolitem->path, vips_buf_all( &buf ) ); } static void toolitem_set_user_path( Toolitem *toolitem ) { char txt[256]; VipsBuf buf = VIPS_BUF_STATIC( txt ); if( toolitem->parent ) vips_buf_appends( &buf, toolitem->parent->user_path ); else vips_buf_appends( &buf, IOBJECT( toolitem->tool->kit )->name ); vips_buf_appendf( &buf, " / %s", toolitem->name ); IM_SETSTR( toolitem->user_path, vips_buf_all( &buf ) ); } static void * toolitem_set_help_sub( Symbol *param, VipsBuf *buf ) { vips_buf_appends( buf, " " ); vips_buf_appends( buf, IOBJECT( param )->name ); return( NULL ); } static void toolitem_set_help( Toolitem *toolitem ) { char txt[256]; VipsBuf buf = VIPS_BUF_STATIC( txt ); vips_buf_appends( &buf, toolitem->name ); /* Get the params from the action member if we can. */ if( toolitem->action_sym && toolitem->action_sym->expr && toolitem->action_sym->expr->compile->param ) slist_map( toolitem->action_sym->expr->compile->param, (SListMapFn) toolitem_set_help_sub, &buf ); vips_buf_appends( &buf, ": " ); if( toolitem->tooltip ) vips_buf_appends( &buf, toolitem->tooltip ); IM_SETSTR( toolitem->help, vips_buf_firstline( &buf ) ); } static Toolitem * toolitem_build( Tool *tool, Compile *compile, PElement *root, Toolitem *parent ) { Toolitem *toolitem; if( !(toolitem = toolitem_new( parent, compile, tool )) ) return( NULL ); toolitem_set_name( toolitem, root ); toolitem_set_tooltip( toolitem, root ); toolitem_set_pullright( toolitem, root ); toolitem_set_action( toolitem, root ); toolitem_set_path( toolitem ); toolitem_set_user_path( toolitem ); toolitem_set_help( toolitem ); #ifdef DEBUG_TOOLITEM printf( "toolitem_build: %s\n", toolitem->name ); #endif /*DEBUG_TOOLITEM*/ #ifdef DEBUG_VERBOSE printf( "toolitem_build:\n" ); printf( "\tpullright = %d\n", toolitem->is_pullright ); printf( "\tlabel = \"%s\"\n", toolitem->label ); printf( "\tname = \"%s\"\n", toolitem->name ); printf( "\ticon = \"%s\"\n", toolitem->icon ); printf( "\ttooltip = \"%s\"\n", toolitem->tooltip ); printf( "\thelp = \"%s\"\n", toolitem->help ); printf( "\taction = \"%s\"\n", toolitem->action ); printf( "\tpath = \"%s\"\n", toolitem->path ); printf( "\tuser_path = \"%s\"\n", toolitem->user_path ); #endif /*DEBUG_VERBOSE*/ return( toolitem ); } static Toolitem * toolitem_build_all( Tool *tool, Compile *compile, PElement *root, Toolitem *parent ); static void * toolitem_build_all_sub( Symbol *sym, Toolitem *parent ) { if( is_menuable( sym ) ) (void) toolitem_build_all( parent->tool, sym->expr->compile, NULL, parent ); return( NULL ); } static Toolitem * toolitem_build_all( Tool *tool, Compile *compile, PElement *root, Toolitem *parent ) { Toolitem *toolitem; gboolean result; if( !(toolitem = toolitem_build( tool, compile, root, parent )) ) return( NULL ); /* If this is a dynamic pullright, walk the heap to find the members. */ if( toolitem->is_pullright && root && heap_is_instanceof( CLASS_MENUPULLRIGHT, root, &result ) && result ) { PElement member; HeapNode *p; PEGETCLASSMEMBER( &member, root ); if( PEISNODE( &member ) ) for( p = PEGETVAL( &member ); p; p = GETRIGHT( p ) ) { PElement s, v; HeapNode *hn; Symbol *sym; /* Get the sym/value pair. */ hn = GETLEFT( p ); PEPOINTLEFT( hn, &s ); PEPOINTRIGHT( hn, &v ); sym = SYMBOL( PEGETSYMREF( &s ) ); /* Ignore this/super/check etc. */ if( !is_menuable( sym ) ) continue; /* For dynamic menus, only make items for * things which are subclasses of menu. */ if( !heap_is_instanceof( CLASS_MENU, &v, &result ) || !result ) continue; (void) toolitem_build_all( tool, sym->expr->compile, &v, toolitem ); } } else if( toolitem->is_pullright ) { /* A static pullright... just walk the container. */ (void) icontainer_map( ICONTAINER( compile ), (icontainer_map_fn) toolitem_build_all_sub, toolitem, NULL ); } return( toolitem ); } #ifdef DEBUG_MENUS static void toolitem_print( Toolitem *toolitem ) { if( toolitem->is_separator ) printf( "-----------\n" ); else printf( "%s --- %s\n", NN( toolitem->user_path ), NN( toolitem->help ) ); } static void * toolitem_print_all( Toolitem *toolitem ) { if( toolitem->is_pullright ) slist_map( toolitem->children, (SListMapFn) toolitem_print_all, NULL ); else toolitem_print( toolitem ); return( NULL ); } #endif /*DEBUG_MENUS*/ /* Rebuild the toolitem tree. */ static void tool_toolitem_rebuild( Tool *tool ) { IM_FREEF( toolitem_free, tool->toolitem ); switch( tool->type ) { case TOOL_SYM: if( is_menuable( tool->sym ) ) tool->toolitem = toolitem_build_all( tool, tool->sym->expr->compile, &tool->sym->expr->root, NULL ); break; case TOOL_DIA: if( (tool->toolitem = toolitem_new( NULL, NULL, tool )) ) IM_SETSTR( tool->toolitem->label, IOBJECT( tool )->name ); break; case TOOL_SEP: if( (tool->toolitem = toolitem_new( NULL, NULL, tool )) ) tool->toolitem->is_separator = TRUE; break; default: g_assert( 0 ); } iobject_changed( IOBJECT( tool ) ); #ifdef DEBUG_MENUS if( tool->toolitem ) toolitem_print_all( tool->toolitem ); #endif /*DEBUG_MENUS*/ } /* The expr has a new value. */ static void tool_new_value_cb( Symbol *sym, Tool *tool ) { #ifdef DEBUG printf( "tool_new_value_cb: new value for " ); symbol_name_print( sym ); printf( "\n" ); #endif /*DEBUG*/ tool_toolitem_rebuild( tool ); } static void tool_set_help( Tool *tool ) { char *p; char value[MAX_NAME]; if( tool->sym && tool->sym->expr && tool->sym->expr->compile && (p = tool->sym->expr->compile->text) ) { /* Skip leading whitespace. */ while( isspace( (int)(*p) ) ) p++; /* Skip leading comment, if any. */ if( p[0] == '/' && p[1] == '*' ) p += 2; else if( p[0] == '/' && p[1] == '/' ) p += 2; /* Skip more whitespace. */ while( isspace( (int)(*p) ) ) p++; /* Limit to MAX_NAME chars or 1st line. Strip trailing * whitespace. */ im_strncpy( value, p, MAX_NAME ); if( (p = strchr( value, '\n' )) ) *p = '\0'; *((char *) my_strrspn( value, WHITESPACE )) = '\0'; IM_SETSTR( tool->help, value ); } else if( tool->sym && tool->sym->type == SYM_EXTERNAL ) IM_SETSTR( tool->help, tool->sym->function->desc ); else if( tool->sym && tool->sym->type == SYM_BUILTIN ) IM_SETSTR( tool->help, tool->sym->builtin->desc ); else IM_SETSTR( tool->help, NULL ); } /* Add a symbol to a toolkit. */ Tool * tool_new_sym( Toolkit *kit, int pos, Symbol *sym ) { Tool *tool; g_assert( kit && sym ); /* Is there a tool we can reuse? Don't update pos .. assume we want to * keep the old one. */ if( (tool = sym->tool) && tool->kit == kit ) { tool->lineno = -1; tool_set_help( tool ); return( tool ); } /* Junk any existing tool for this sym. */ if( (tool = sym->tool) ) { sym->tool = NULL; tool->sym = NULL; IDESTROY( tool ); } tool = TOOL( g_object_new( TYPE_TOOL, NULL ) ); tool->type = TOOL_SYM; tool->sym = sym; sym->tool = tool; tool->new_value_sid = g_signal_connect( sym, "new_value", G_CALLBACK( tool_new_value_cb ), tool ); tool->link_sym = sym; tool_link( tool, kit, pos, IOBJECT( sym )->name ); tool_set_help( tool ); #ifdef DEBUG printf( "tool_new_sym: new tool for " ); symbol_name_print( sym ); printf( "at %p\n", tool ); #endif /*DEBUG*/ return( tool ); } /* Add a separator to a toolkit. */ Tool * tool_new_sep( Toolkit *kit, int pos ) { Tool *tool; g_assert( kit ); tool = TOOL( g_object_new( TYPE_TOOL, NULL ) ); tool->type = TOOL_SEP; iobject_set( IOBJECT( tool ), "separator", NULL ); tool_link( tool, kit, pos, NULL ); tool_toolitem_rebuild( tool ); return( tool ); } /* Search a kit for a tool by tool name. Used for searching for dialogs ... we * can't use the symtable stuff, as they're not syms. */ static Tool * tool_find( Toolkit *kit, const char *name ) { return( (Tool *) icontainer_map( ICONTAINER( kit ), (icontainer_map_fn) iobject_test_name, (char *) name, NULL ) ); } /* Add a dialog entry to a toolkit. */ Tool * tool_new_dia( Toolkit *kit, int pos, const char *name, const char *filename ) { Tool *tool; g_assert( kit && name && filename ); if( (tool = tool_find( kit, name )) ) { if( tool->type != TOOL_DIA ) { error_top( _( "Name clash." ) ); error_sub( _( "Can't create dialog with name \"%s\", " "an object with that name already exists in " "kit \"%s\"." ), name, IOBJECT( kit )->name ); return( NULL ); } /* Just update the filename. */ filemodel_set_filename( FILEMODEL( tool ), filename ); tool->lineno = -1; } else { tool = TOOL( g_object_new( TYPE_TOOL, NULL ) ); tool->type = TOOL_DIA; filemodel_set_filename( FILEMODEL( tool ), filename ); iobject_set( IOBJECT( tool ), name, NULL ); tool_link( tool, kit, pos, NULL ); } tool_toolitem_rebuild( tool ); return( tool ); } static Toolitem * toolitem_lookup_toolitem( Toolitem *toolitem, Symbol *action ) { if( toolitem->action_sym == action ) return( toolitem ); else return( (Toolitem *) slist_map( toolitem->children, (SListMapFn) toolitem_lookup_toolitem, action ) ); } static Toolitem * toolitem_lookup_tool( Tool *tool, Symbol *action ) { if( tool->toolitem ) return( toolitem_lookup_toolitem( tool->toolitem, action ) ); else return( NULL ); } static Toolitem * toolitem_lookup_toolkit( Toolkit *kit, Symbol *action ) { return( (Toolitem *) toolkit_map( kit, (tool_map_fn) toolitem_lookup_tool, action, NULL ) ); } /* Just walk the whole kit. Could use a hash in kitg, but we don't call this * so often. */ Toolitem * toolitem_lookup( Toolkitgroup *kitg, Symbol *action ) { return( (Toolitem *) toolkitgroup_map( kitg, (toolkit_map_fn) toolitem_lookup_toolkit, action, NULL ) ); } nip2-8.7.0/src/idialog.c0000644000175000017500000004213413224651032011664 00000000000000/* make and manage base dialogs ... subclass off this for others */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #include "ip.h" /* #define DEBUG */ static iWindowClass *parent_class = NULL; /* An OK button: label (can be a stock) plus a callback. */ typedef struct { char *label; iWindowFn done_cb; } OKButton; static void * okbutton_free( OKButton *ok ) { IM_FREEF( g_free, ok->label ); ok->done_cb = NULL; IM_FREEF( g_free, ok ); return( NULL ); } static OKButton * okbutton_new( char *label, iWindowFn done_cb ) { OKButton *ok; ok = g_new( OKButton, 1 ); ok->label = g_strdup( label ); ok->done_cb = done_cb; return( ok ); } /* Handy destroy callback ... just free client. */ void idialog_free_client( iDialog *idlg, void *client ) { IM_FREE( client ); } /* Notify our parent. */ static void idialog_notify_parent( iDialog *idlg, iWindowResult result ) { if( idlg->nfn ) { iWindowNotifyFn nfn = idlg->nfn; idlg->nfn = NULL; nfn( idlg->sys, result ); } } static void * idialog_set_sensitive( GtkWidget *w, gboolean state ) { gtk_widget_set_sensitive( w, state ); return( NULL ); } /* Set OK sensitivities. */ void idialog_set_ok_button_state( iDialog *idlg, gboolean state ) { slist_map( idlg->ok_but_l, (SListMapFn) idialog_set_sensitive, GINT_TO_POINTER( state ) ); } /* Set all the button sensitivities. */ static void idialog_set_button_state( iDialog *idlg, gboolean state ) { idialog_set_ok_button_state( idlg, state ); if( idlg->but_cancel ) gtk_widget_set_sensitive( idlg->but_cancel, state ); if( idlg->but_help ) gtk_widget_set_sensitive( idlg->but_help, state ); } /* Sub-fn of below. Come back from a popdown notify. */ static void idialog_popdown_notify( void *sys, iWindowResult result ) { iWindowSusp *susp = IWINDOW_SUSP( sys ); iDialog *idlg = IDIALOG( susp->client ); if( result == IWINDOW_YES ) /* If our caller hasn't been notified yet, post off a FALSE. */ idialog_notify_parent( idlg, IWINDOW_NO ); /* Pass result on to our suspension (ie. back to iwindow). */ iwindow_susp_return( susp, result ); /* Housekeeping. */ iwindow_notify_return( IWINDOW( idlg ) ); } /* Our popdown callback ... here from iwindow. */ static void idialog_popdown_cb( iWindow *iwnd, void *client, iWindowNotifyFn nfn, void *sys ) { iDialog *idlg = IDIALOG( client ); iWindowSusp *susp = iwindow_susp_new( NULL, iwnd, idlg, nfn, sys ); #ifdef DEBUG printf( "idialog_popdown_cb: %s\n", IWINDOW( idlg )->title ); #endif /*DEBUG*/ /* Trigger user popdown. */ iwindow_notify_send( IWINDOW( idlg ), idlg->popdown_cb, idlg->client, idialog_popdown_notify, susp ); } /* Sub-fn of below. Come back from a done notify. */ static void idialog_done_notify( void *sys, iWindowResult result ) { iDialog *idlg = IDIALOG( sys ); #ifdef DEBUG printf( "idialog_done_notify: %s\n", IWINDOW( idlg )->title ); #endif /*DEBUG*/ idialog_set_button_state( idlg, TRUE ); /* If all ok, popdown and tell our parent. */ if( result == IWINDOW_YES ) { /* Unless we're pinned up, that is. */ if( !(idlg->tog_pin && gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( idlg->tog_pin ) )) ) { idialog_notify_parent( idlg, result ); iwindow_kill( IWINDOW( idlg ) ); } } /* Alert on failure. */ if( result == IWINDOW_ERROR ) iwindow_alert( GTK_WIDGET( idlg ), GTK_MESSAGE_ERROR ); /* Clean up. */ iwindow_notify_return( IWINDOW( idlg ) ); } /* Make a DONE event happen. Used (for example) by the browse window to force * a done in the enclosing FSB on double click on icon. */ void idialog_done_trigger( iDialog *idlg, int pos ) { OKButton *ok = (OKButton *) g_slist_nth_data( idlg->ok_disp_l, pos ); #ifdef DEBUG printf( "idialog_done_trigger: %s, %d\n", IWINDOW( idlg )->title, pos ); #endif /*DEBUG*/ /* Trigger user done callback. */ g_assert( pos >= 0 ); g_assert( ok->done_cb ); idialog_set_button_state( idlg, FALSE ); iwindow_notify_send( IWINDOW( idlg ), ok->done_cb, idlg->client, idialog_done_notify, idlg ); } /* Sub-fn of below. */ static void idialog_cancel_notify( void *sys, iWindowResult result ) { iDialog *idlg = IDIALOG( sys ); #ifdef DEBUG printf( "idialog_cancel_notify: %s\n", IWINDOW( idlg )->title ); #endif /*DEBUG*/ idialog_set_button_state( idlg, TRUE ); /* Send cancel message back to parent if our client cancel was OK. */ if( result == IWINDOW_YES ) { idialog_notify_parent( idlg, IWINDOW_NO ); iwindow_kill( IWINDOW( idlg ) ); } /* Alert on error. */ if( result == IWINDOW_ERROR ) iwindow_alert( GTK_WIDGET( idlg ), GTK_MESSAGE_ERROR ); /* Clean up. */ iwindow_notify_return( IWINDOW( idlg ) ); } static void idialog_cancel_trigger( iDialog *idlg ) { #ifdef DEBUG printf( "idialog_cancel_trigger: %s\n", IWINDOW( idlg )->title ); #endif /*DEBUG*/ /* Trigger user cancel function. */ idialog_set_button_state( idlg, FALSE ); iwindow_notify_send( IWINDOW( idlg ), idlg->cancel_cb, idlg->client, idialog_cancel_notify, idlg ); } /* Button callbacks from gtk. */ static void idialog_done_cb( GtkWidget *w, iDialog *idlg ) { int pos = g_slist_index( idlg->ok_but_l, w ); g_assert( pos != -1 ); idialog_done_trigger( idlg, pos ); } static void idialog_cancel_cb( GtkWidget *w, iDialog *idlg ) { idialog_cancel_trigger( idlg ); } static void idialog_help_cb( GtkWidget *w, iDialog *idlg ) { if( idlg->help_tag ) box_help( GTK_WIDGET( idlg ), idlg->help_tag ); } static void idialog_destroy( GtkObject *object ) { iDialog *idlg; #ifdef DEBUG printf( "idialog_destroy\n" ); #endif /*DEBUG*/ g_return_if_fail( object != NULL ); g_return_if_fail( IS_IDIALOG( object ) ); idlg = IDIALOG( object ); #ifdef DEBUG printf( "... %s\n", IWINDOW( idlg )->title ); #endif /*DEBUG*/ /* My instance destroy stuff. */ if( idlg->destroy_cb ) { idlg->destroy_cb( idlg, idlg->client ); idlg->destroy_cb = NULL; } FREESID( idlg->destroy_sid, idlg->iobject ); slist_map( idlg->ok_l, (SListMapFn) okbutton_free, NULL ); IM_FREEF( g_slist_free, idlg->ok_l ); IM_FREEF( g_slist_free, idlg->ok_disp_l ); IM_FREEF( g_slist_free, idlg->ok_but_l ); GTK_OBJECT_CLASS( parent_class )->destroy( object ); } static void idialog_realize( GtkWidget *widget ) { iDialog *idlg = IDIALOG( widget ); #ifdef DEBUG printf( "idialog_realize: %s\n", IWINDOW( idlg )->title ); #endif /*DEBUG*/ GTK_WIDGET_CLASS( parent_class )->realize( widget ); if( idlg->entry ) gtk_widget_grab_focus( GTK_WIDGET( idlg->entry ) ); } /* The object we represent has been destroyed, kill us too. */ static void idialog_iobject_destroy( iObject *iobject, iDialog *idlg ) { #ifdef DEBUG printf( "idialog_iobject_destroy: %s\n", IWINDOW( idlg )->title ); #endif /*DEBUG*/ /* This object has gone. */ idlg->iobject = NULL; iwindow_kill( IWINDOW( idlg ) ); } static void * idialog_build_ok( OKButton *ok, iDialog *idlg ) { GtkWidget *but; but = build_button( ok->label, GTK_SIGNAL_FUNC( idialog_done_cb ), idlg ); idlg->ok_disp_l = g_slist_prepend( idlg->ok_disp_l, ok ); idlg->ok_but_l = g_slist_prepend( idlg->ok_but_l, but ); gtk_box_pack_start( GTK_BOX( idlg->bb ), but, TRUE, TRUE, 0 ); gtk_widget_show( but ); return( NULL ); } static void * idialog_build_cancel( iDialog *idlg ) { idlg->but_cancel = build_button( idlg->cancel_text, GTK_SIGNAL_FUNC( idialog_cancel_cb ), idlg ); gtk_box_pack_start( GTK_BOX( idlg->bb ), idlg->but_cancel, TRUE, TRUE, 0 ); gtk_widget_show( idlg->but_cancel ); return( NULL ); } /* Set a button to be the dialog default. Turn off button_focus for complex * dialogs like file_chooser which have their on focus systems. */ static void idialog_set_default( iDialog *idlg, GtkWidget *widget ) { if( idlg->button_focus ) gtk_widget_grab_focus( widget ); GTK_WIDGET_SET_FLAGS( widget, GTK_CAN_DEFAULT ); gtk_window_set_default( GTK_WINDOW( idlg ), widget ); } static void idialog_build( GtkWidget *widget ) { iDialog *idlg = IDIALOG( widget ); iWindow *iwnd = IWINDOW( idlg ); #ifdef DEBUG printf( "idialog_build: %s\n", iwnd->title ); #endif /*DEBUG*/ /* Call all builds in superclasses. */ if( IWINDOW_CLASS( parent_class )->build ) (*IWINDOW_CLASS( parent_class )->build)( widget ); /* delete_event and destroy handled by our superclass. */ iwindow_set_popdown( iwnd, idialog_popdown_cb, idlg ); gtk_window_set_modal( GTK_WINDOW( idlg ), idlg->modal ); idlg->work = gtk_vbox_new( FALSE, 6 ); gtk_container_set_border_width( GTK_CONTAINER( idlg->work ), 12 ); gtk_box_pack_start( GTK_BOX( iwnd->work ), idlg->work, TRUE, TRUE, 0 ); if( !idlg->nosep ) { GtkWidget *sep; sep = gtk_hseparator_new(); gtk_box_pack_start( GTK_BOX( iwnd->work ), sep, FALSE, FALSE, 2 ); gtk_widget_show( sep ); } idlg->hb = gtk_hbox_new( FALSE, 6 ); gtk_container_set_border_width( GTK_CONTAINER( idlg->hb ), 12 ); gtk_box_pack_start( GTK_BOX( iwnd->work ), idlg->hb, FALSE, FALSE, 0 ); gtk_widget_show( idlg->hb ); if( idlg->pinup ) { idlg->tog_pin = gtk_check_button_new_with_label( _( "Pin up" ) ); set_tooltip( idlg->tog_pin, _( "Check this to pin the dialog up" ) ); gtk_box_pack_start( GTK_BOX( idlg->hb ), idlg->tog_pin, FALSE, FALSE, 0 ); gtk_widget_show( idlg->tog_pin ); } idlg->bb = gtk_hbutton_box_new(); gtk_button_box_set_layout( GTK_BUTTON_BOX( idlg->bb ), GTK_BUTTONBOX_END ); gtk_box_set_spacing( GTK_BOX( idlg->bb ), 6 ); gtk_box_pack_end( GTK_BOX( idlg->hb ), idlg->bb, FALSE, FALSE, 0 ); gtk_widget_show( idlg->bb ); /* Default button order: * * Help OK3 OK2 Cancel OK1 * * win32 button order: * * OK1 OK2 OK3 Cancel Help */ #ifdef OS_WIN32 /* OK buttons. */ slist_map( idlg->ok_l, (SListMapFn) idialog_build_ok, idlg ); if( idlg->cancel_cb ) { idialog_build_cancel( idlg ); /* Cancel grabs default if it's the only button. Set focus * too; user build can change this later. */ if( !idlg->ok_l ) idialog_set_default( idlg, idlg->but_cancel ); } if( idlg->help_tag ) { idlg->but_help = build_button( GTK_STOCK_HELP, GTK_SIGNAL_FUNC( idialog_help_cb ), idlg ); gtk_widget_show( idlg->but_help ); } #else /*!OS_WIN32*/ if( idlg->help_tag ) { idlg->but_help = build_button( GTK_STOCK_HELP, GTK_SIGNAL_FUNC( idialog_help_cb ), idlg ); gtk_box_pack_end( GTK_BOX( idlg->bb ), idlg->but_help, TRUE, TRUE, 0 ); gtk_button_box_set_child_secondary( GTK_BUTTON_BOX( idlg->bb ), idlg->but_help, TRUE ); gtk_widget_show( idlg->but_help ); } /* Add OK2, 3, etc. */ if( idlg->ok_l && idlg->ok_l->next ) slist_map_rev( idlg->ok_l->next, (SListMapFn) idialog_build_ok, idlg ); if( idlg->cancel_cb ) { idialog_build_cancel( idlg ); /* Cancel grabs default if it's the only button. Set focus * too; user build can change this later. */ if( !idlg->ok_l ) idialog_set_default( idlg, idlg->but_cancel ); } /* Make OK1 */ if( idlg->ok_l ) { OKButton *ok1 = (OKButton *) idlg->ok_l->data; idialog_build_ok( ok1, idlg ); } #endif /*lots*/ /* OK1 grabs the default. */ if( idlg->ok_but_l ) idialog_set_default( idlg, idlg->ok_but_l->data ); /* Escape triggers cancel, if there is a cancel. */ if( idlg->cancel_cb ) gtk_widget_add_accelerator( idlg->but_cancel, "clicked", iwnd->accel_group, GDK_Escape, 0, 0 ); else { /* If there's just 1 OK, that gets Esc too. */ if( idlg->ok_but_l && g_slist_length( idlg->ok_but_l ) == 1 ) gtk_widget_add_accelerator( GTK_WIDGET( idlg->ok_but_l->data ), "clicked", iwnd->accel_group, GDK_Escape, 0, 0 ); } /* F1 triggers help. */ if( idlg->but_help ) gtk_widget_add_accelerator( idlg->but_help, "clicked", iwnd->accel_group, GDK_F1, 0, 0 ); /* Build user dialog contents. */ if( idlg->build ) idlg->build( iwnd, idlg->work, idlg->build_a, idlg->build_b, idlg->build_c ); if( idlg->iobject ) idlg->destroy_sid = g_signal_connect( idlg->iobject, "destroy", G_CALLBACK( idialog_iobject_destroy ), idlg ); gtk_widget_show( idlg->work ); } static void idialog_class_init( iDialogClass *class ) { GtkObjectClass *object_class = (GtkObjectClass *) class; GtkWidgetClass *widget_class = (GtkWidgetClass *) class; iWindowClass *iwindow_class = (iWindowClass *) class; parent_class = g_type_class_peek_parent( class ); object_class->destroy = idialog_destroy; widget_class->realize = idialog_realize; iwindow_class->build = idialog_build; iwindow_class->transient = TRUE; /* Create signals. */ /* Init methods. */ } static void idialog_init( iDialog *idlg ) { #ifdef DEBUG printf( "idialog_init: %s\n", IWINDOW( idlg )->title ); #endif /*DEBUG*/ /* Init our instance fields. */ idlg->iobject = NULL; idlg->destroy_sid = 0; idlg->work = NULL; idlg->ok_l = NULL; idlg->ok_disp_l = NULL; idlg->ok_but_l = NULL; idlg->but_cancel = NULL; idlg->but_help = NULL; idlg->tog_pin = NULL; idlg->entry = NULL; idlg->modal = FALSE; idlg->pinup = FALSE; idlg->nosep = FALSE; idlg->button_focus = TRUE; idlg->help_tag = NULL; idlg->cancel_text = GTK_STOCK_CANCEL; idlg->cancel_cb = NULL; idlg->popdown_cb = NULL; idlg->destroy_cb = NULL; idlg->client = NULL; idlg->arg = NULL; idlg->nfn = iwindow_notify_null; idlg->sys = NULL; gtk_window_set_position( GTK_WINDOW( idlg ), GTK_WIN_POS_CENTER_ON_PARENT ); } GtkType idialog_get_type( void ) { static GtkType type = 0; if( !type ) { static const GtkTypeInfo info = { "iDialog", sizeof( iDialog ), sizeof( iDialogClass ), (GtkClassInitFunc) idialog_class_init, (GtkObjectInitFunc) idialog_init, /* reserved_1 */ NULL, /* reserved_2 */ NULL, (GtkClassInitFunc) NULL, }; type = gtk_type_unique( TYPE_IWINDOW, &info ); } return( type ); } GtkWidget * idialog_new() { iDialog *idlg = gtk_type_new( TYPE_IDIALOG ); GtkWindow *gwnd = GTK_WINDOW( idlg ); /* Init gtk base class. */ gwnd->type = GTK_WINDOW_TOPLEVEL; return( GTK_WIDGET( idlg ) ); } void idialog_set_iobject( iDialog *idlg, iObject *iobject ) { idlg->iobject = iobject; } void idialog_set_pinup( iDialog *idlg, gboolean pinup ) { idlg->pinup = pinup; if( idlg->tog_pin ) gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( idlg->tog_pin ), TRUE ); } void idialog_set_modal( iDialog *idlg, gboolean modal ) { idlg->modal = modal; } void idialog_set_nosep( iDialog *idlg, gboolean nosep ) { idlg->nosep = nosep; } void idialog_set_button_focus( iDialog *idlg, gboolean button_focus ) { idlg->button_focus = button_focus; } void idialog_set_help_tag( iDialog *idlg, const char *help_tag ) { IM_SETSTR( idlg->help_tag, help_tag ); } void idialog_set_callbacks( iDialog *idlg, iWindowFn cancel_cb, iWindowFn popdown_cb, iDialogFreeFn destroy_cb, void *client ) { idlg->cancel_cb = cancel_cb; idlg->popdown_cb = popdown_cb; idlg->destroy_cb = destroy_cb; idlg->client = client; } void idialog_add_ok( iDialog *idlg, iWindowFn done_cb, const char *fmt, ... ) { va_list ap; char buf[1024]; va_start( ap, fmt ); (void) im_vsnprintf( buf, 1024, fmt, ap ); va_end( ap ); /* So the last OK button added is the default one (and at the head of * the list). [OK1, OK2, OK3, OK4] */ idlg->ok_l = g_slist_prepend( idlg->ok_l, okbutton_new( buf, done_cb ) ); } void idialog_set_notify( iDialog *idlg, iWindowNotifyFn nfn, void *sys ) { idlg->nfn = nfn; idlg->sys = sys; } void idialog_set_build( iDialog *idlg, iWindowBuildFn build, void *build_a, void *build_b, void *build_c ) { idlg->build = build; idlg->build_a = build_a; idlg->build_b = build_b; idlg->build_c = build_c; } void idialog_set_cancel_text( iDialog *idlg, const char *cancel_text ) { idlg->cancel_text = cancel_text; } void idialog_set_default_entry( iDialog *idlg, GtkEntry *entry ) { gtk_entry_set_activates_default( entry, TRUE ); idlg->entry = entry; } /* Set up an entry inside a dialog ... set tooltip, set start * value, link to OK button in enclosing dialog. */ void idialog_init_entry( iDialog *idlg, GtkWidget *entry, const char *tip, const char *fmt, ... ) { va_list ap; va_start( ap, fmt ); set_gentryv( entry, fmt, ap ); va_end( ap ); set_tooltip( entry, "%s", tip ); idialog_set_default_entry( idlg, GTK_ENTRY( entry ) ); } nip2-8.7.0/src/filesel.h0000644000175000017500000001071713224651032011706 00000000000000/* Declarations for ifileselect.c */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* How we define a file type. Pass a NULL-terminated array of pointers * to these puppies to gtk_file_selection2_set_file_types(). * gtk_file_selection2_set_file_types() makes a copy of the data itself, * so you can free if you want. */ typedef struct _FileselFileType { /* Descriptive name for this file type. Eg: * "TIFF image file (*.tif; *.tiff)" */ const char *name; /* NULL-terminated array of suffixes identifying this * file type. Put the default first. Eg: * { ".tif", ".tiff", NULL }, or * { ".htm", ".html", NULL } */ const char **suffixes; } FileselFileType; /* Basic types. */ extern FileselFileType filesel_wfile_type, filesel_rfile_type, filesel_mfile_type, filesel_cfile_type, filesel_xfile_type, filesel_dfile_type, filesel_ifile_type; /* Suffix sets we support. */ extern FileselFileType *filesel_type_definition[]; extern FileselFileType *filesel_type_workspace[]; extern FileselFileType *filesel_type_matrix[]; extern FileselFileType **filesel_type_image; extern FileselFileType **filesel_type_mainw; extern FileselFileType **filesel_type_any; /* Subclass off gtkfilesel2.c to make one of our fileselectors. */ #define TYPE_FILESEL (filesel_get_type()) #define FILESEL( obj ) \ (GTK_CHECK_CAST( (obj), TYPE_FILESEL, Filesel )) #define FILESEL_CLASS( klass ) \ (GTK_CHECK_CLASS_CAST( (klass), TYPE_FILESEL, FileselClass )) #define IS_FILESEL( obj ) (GTK_CHECK_TYPE( (obj), TYPE_FILESEL )) #define IS_FILESEL_CLASS( klass ) \ (GTK_CHECK_CLASS_TYPE( (klass), TYPE_FILESEL )) /* Must be enough. */ #define FILESEL_MAX_FILTERS (100) typedef struct _Filesel { iDialog parent; /* Widgets. */ GtkWidget *chooser; /* Filechooser widget */ GtkWidget *space; /* Space available */ GtkWidget *info; /* File info */ Preview *preview; /* Selected file preview */ GtkFileFilter *filter[FILESEL_MAX_FILTERS]; /* State. */ gboolean incr; /* True for increment filename */ gboolean imls; /* True if this is image load/save */ gboolean save; /* True if this is a save dialog */ gboolean multi; /* Multiple-select */ gboolean start_name; /* True if we have a suggested name */ FileselFileType **type; /* Allowable types for this filesel */ int ntypes; int default_type; const char *type_pref; /* Pref to set on type change */ /* Last dir we entered. Used to stop dir_changed being emitted too * often. */ char *current_dir; iWindowFn done_cb; /* On OK */ void *client; } Filesel; typedef struct _FileselClass { iDialogClass parent_class; /* My methods. */ } FileselClass; void filesel_startup( void ); gboolean is_file_type( const FileselFileType *type, const char *filename ); typedef void *(*FileselMapFn)( Filesel *, const char *, void *, void * ); void filesel_add_mode( char *filename ); GtkType filesel_get_type( void ); GtkWidget *filesel_new( void ); gboolean filesel_set_filename( Filesel *filesel, const char *name ); char *filesel_get_filename( Filesel *filesel ); void *filesel_map_filename_multi( Filesel *filesel, FileselMapFn fn, void *a, void *b ); void filesel_set_done( Filesel *filesel, iWindowFn done_cb, void *client ); void filesel_set_filetype( Filesel *filesel, FileselFileType **type, int default_type ); void filesel_set_filetype_pref( Filesel *filesel, const char *type_pref ); int filesel_get_filetype( Filesel *filesel ); void filesel_make_patt( FileselFileType *type, VipsBuf *patt ); void filesel_set_flags( Filesel *filesel, gboolean imls, gboolean save ); void filesel_set_multi( Filesel *filesel, gboolean multi ); nip2-8.7.0/src/boxes.c0000644000175000017500000007746313273071606011420 00000000000000/* Make various little popup dialogs ... error, info, question. */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #include "ip.h" /* Max amount of text in a info/error/question dialog. */ #define MAX_DIALOG_TEXT (2000) /* Find a window to use as dialog parent. */ static GtkWidget * box_pick_parent( GtkWidget *par ) { if( !par ) return( GTK_WIDGET( mainw_pick_one() ) ); else return( par ); } /* Make the insides of a error, info or question dialog. */ static void box_build( iDialog *idlg, GtkWidget *work, char *s, const char *stock_id ) { GtkWidget *icon; GtkWidget *hb; GtkWidget *lab; hb = gtk_hbox_new( FALSE, 12 ); gtk_container_border_width( GTK_CONTAINER( hb ), 0 ); gtk_container_add( GTK_CONTAINER( work ), hb ); gtk_widget_show( hb ); icon = gtk_image_new_from_stock( stock_id, GTK_ICON_SIZE_DIALOG ); gtk_misc_set_alignment( GTK_MISC( icon ), 0.0, 0.0 ); gtk_box_pack_start( GTK_BOX( hb ), icon, FALSE, FALSE, 0 ); gtk_widget_show( icon ); lab = gtk_label_new( NULL ); gtk_label_set_markup( GTK_LABEL( lab ), s ); gtk_label_set_justify( GTK_LABEL( lab ), GTK_JUSTIFY_LEFT ); gtk_label_set_selectable( GTK_LABEL( lab ), TRUE ); gtk_label_set_line_wrap( GTK_LABEL( lab ), TRUE ); gtk_box_pack_start( GTK_BOX( hb ), lab, FALSE, FALSE, 0 ); gtk_widget_show( lab ); } /* Make an error dialog. */ /*VARARGS2*/ static void box_error( GtkWidget *par, const char *fmt, ... ) { va_list ap; char buf[MAX_DIALOG_TEXT]; GtkWidget *idlg; va_start( ap, fmt ); (void) im_vsnprintf( buf, MAX_DIALOG_TEXT, fmt, ap ); va_end( ap ); idlg = idialog_new(); idialog_set_build( IDIALOG( idlg ), (iWindowBuildFn) box_build, buf, GTK_STOCK_DIALOG_ERROR, NULL ); idialog_set_callbacks( IDIALOG( idlg ), NULL, NULL, NULL, NULL ); idialog_add_ok( IDIALOG( idlg ), iwindow_true_cb, GTK_STOCK_OK ); iwindow_set_parent( IWINDOW( idlg ), box_pick_parent( par ) ); iwindow_build( IWINDOW( idlg ) ); gtk_widget_show( GTK_WIDGET( idlg ) ); } /* Mark up a top/sub pair for a dialog box. */ static void box_vmarkup( char *out, const char *top, const char *sub, va_list ap ) { char buf1[MAX_DIALOG_TEXT]; char buf2[MAX_DIALOG_TEXT]; char buf3[MAX_DIALOG_TEXT]; escape_markup( top, buf1, MAX_DIALOG_TEXT ); (void) im_vsnprintf( buf2, MAX_DIALOG_TEXT, sub, ap ); escape_markup( buf2, buf3, MAX_DIALOG_TEXT ); (void) im_snprintf( out, MAX_DIALOG_TEXT, "%s", buf1 ); if( strcmp( buf3, "" ) != 0 ) { int len = strlen( out ); (void) im_snprintf( out + len, MAX_DIALOG_TEXT - len, "\n\n%s", buf3 ); } } static void box_markup( char *out, const char *top, const char *sub, ... ) { va_list ap; va_start( ap, sub ); box_vmarkup( out, top, sub, ap ); va_end( ap ); } /* Display buffered errors in an error dialog. */ void box_alert( GtkWidget *par ) { char buf[MAX_DIALOG_TEXT]; if( main_option_batch ) { /* No X, just print. */ fprintf( stderr, "%s\n", error_get_top() ); fprintf( stderr, "%s\n", error_get_sub() ); return; } box_markup( buf, error_get_top(), "%s", error_get_sub() ); box_error( par, "%s", buf ); } /* Make an information dialog. */ void box_vinfo( GtkWidget *par, const char *top, const char *sub, va_list ap ) { char buf[MAX_DIALOG_TEXT]; GtkWidget *idlg; box_vmarkup( buf, top, sub, ap ); idlg = idialog_new(); idialog_set_build( IDIALOG( idlg ), (iWindowBuildFn) box_build, buf, GTK_STOCK_DIALOG_INFO, NULL ); idialog_set_callbacks( IDIALOG( idlg ), NULL, NULL, NULL, NULL ); idialog_add_ok( IDIALOG( idlg ), iwindow_true_cb, GTK_STOCK_OK ); iwindow_set_parent( IWINDOW( idlg ), box_pick_parent( par ) ); iwindow_build( IWINDOW( idlg ) ); gtk_widget_show( GTK_WIDGET( idlg ) ); } /* Make an information dialog. */ void box_info( GtkWidget *par, const char *top, const char *sub, ... ) { va_list ap; va_start( ap, sub ); box_vinfo( par, top, sub, ap ); va_end( ap ); } /* Pop up an 'Are you sure?' window. */ iDialog * box_yesno( GtkWidget *par, iWindowFn okcb, iWindowFn cancelcb, void *client, /* Call client */ iWindowNotifyFn nfn, void *sys, /* Call parent */ const char *yes_label, const char *top, const char *sub, ... ) { va_list ap; char buf[MAX_DIALOG_TEXT]; GtkWidget *idlg; va_start( ap, sub ); box_vmarkup( buf, top, sub, ap ); va_end( ap ); idlg = idialog_new(); idialog_set_build( IDIALOG( idlg ), (iWindowBuildFn) box_build, buf, GTK_STOCK_DIALOG_QUESTION, NULL ); idialog_set_callbacks( IDIALOG( idlg ), cancelcb, NULL, NULL, client ); idialog_add_ok( IDIALOG( idlg ), okcb, "%s", yes_label ); idialog_set_notify( IDIALOG( idlg ), nfn, sys ); iwindow_set_parent( IWINDOW( idlg ), box_pick_parent( par ) ); iwindow_build( IWINDOW( idlg ) ); gtk_widget_show( GTK_WIDGET( idlg ) ); return( IDIALOG( idlg ) ); } /* Pop up a `save'/`don't save'/`cancel' dialog. */ void box_savenosave( GtkWidget *par, iWindowFn save, iWindowFn nosave, void *client, /* Call client */ iWindowNotifyFn nfn, void *sys, /* Call parent */ const char *top, const char *sub, ... ) { va_list ap; char buf[MAX_DIALOG_TEXT]; GtkWidget *idlg; va_start( ap, sub ); box_vmarkup( buf, top, sub, ap ); va_end( ap ); idlg = idialog_new(); idialog_set_build( IDIALOG( idlg ), (iWindowBuildFn) box_build, buf, GTK_STOCK_DIALOG_QUESTION, NULL ); idialog_set_callbacks( IDIALOG( idlg ), iwindow_true_cb, NULL, NULL, client ); idialog_add_ok( IDIALOG( idlg ), nosave, _( "Close _without Saving" ) ); idialog_add_ok( IDIALOG( idlg ), save, GTK_STOCK_SAVE ); idialog_set_notify( IDIALOG( idlg ), nfn, sys ); iwindow_set_parent( IWINDOW( idlg ), box_pick_parent( par ) ); iwindow_build( IWINDOW( idlg ) ); gtk_widget_show( GTK_WIDGET( idlg ) ); } #define ABOUT(A) ((About *) (A)) /* Make the insides of an about box. */ static void about_build( iDialog *idlg, GtkWidget *work ) { /* Translators: translate this to a credit for you, and it'll appear in * the About box. */ char *translator_credits = _( "translator_credits" ); GtkWidget *hb; GtkWidget *lab; char txt[MAX_DIALOG_TEXT]; char txt2[MAX_DIALOG_TEXT]; VipsBuf buf = VIPS_BUF_STATIC( txt ); GtkWidget *image; im_snprintf( txt2, MAX_DIALOG_TEXT, _( "About %s." ), PACKAGE ); vips_buf_appendf( &buf, "%s\n\n", txt2 ); im_snprintf( txt2, MAX_DIALOG_TEXT, _( "%s is an image processing package." ), PACKAGE ); vips_buf_appendf( &buf, "%s\n\n", txt2 ); im_snprintf( txt2, MAX_DIALOG_TEXT, _( "%s comes with ABSOLUTELY NO WARRANTY. This is " "free software and you are welcome to redistribute " "it under certain conditions, see http://www.gnu.org." ), PACKAGE ); vips_buf_appendf( &buf, "%s\n\n", txt2 ); im_snprintf( txt2, MAX_DIALOG_TEXT, _( NIP_COPYRIGHT ), PACKAGE ); vips_buf_appendf( &buf, "%s\n\n", txt2 ); { char buf1[FILENAME_MAX]; char buf2[FILENAME_MAX]; im_snprintf( buf1, FILENAME_MAX, "%s" G_DIR_SEPARATOR_S "start", get_savedir() ); expand_variables( buf1, buf2 ); nativeize_path( buf2 ); escape_markup( buf2, buf1, FILENAME_MAX ); vips_buf_appendf( &buf, "%s: %s\n", _( "Personal start folder" ), buf1 ); } vips_buf_appendf( &buf, "%s: %s\n", _( "Homepage" ), VIPS_HOMEPAGE ); escape_markup( im_version_string(), txt2, MAX_DIALOG_TEXT ); vips_buf_appendf( &buf, "%s: %s\n", _( "Linked to VIPS" ), txt2 ); escape_markup( IM_VERSION_STRING, txt2, MAX_DIALOG_TEXT ); vips_buf_appendf( &buf, "%s: %s\n", _( "Built against VIPS" ), txt2 ); escape_markup( PACKAGE, txt2, MAX_DIALOG_TEXT ); vips_buf_appendf( &buf, "$PACKAGE: %s\n", txt2 ); escape_markup( VERSION, txt2, MAX_DIALOG_TEXT ); vips_buf_appendf( &buf, "$VERSION: %s\n", txt2 ); escape_markup( NN( g_getenv( "VIPSHOME" ) ), txt2, MAX_DIALOG_TEXT ); vips_buf_appendf( &buf, "$VIPSHOME: %s\n", txt2 ); escape_markup( NN( g_getenv( "HOME" ) ), txt2, MAX_DIALOG_TEXT ); vips_buf_appendf( &buf, "$HOME: %s\n", txt2 ); escape_markup( NN( g_getenv( "SAVEDIR" ) ), txt2, MAX_DIALOG_TEXT ); vips_buf_appendf( &buf, "$SAVEDIR: %s\n", txt2 ); escape_markup( PATH_TMP, txt2, MAX_DIALOG_TEXT ); vips_buf_appendf( &buf, "%s: %s\n", _( "Temp files in" ), txt2 ); if( strcmp( translator_credits, "translator_credits" ) != 0 ) { vips_buf_appendf( &buf, "\n" ); vips_buf_appends( &buf, translator_credits ); } vips_buf_appendf( &buf, "\n" ); mainw_find_disc( &buf ); /* Expands to (eg.) "14GB free in /pics/tmp" */ vips_buf_appendf( &buf, _( " in \"%s\"" ), PATH_TMP ); vips_buf_appends( &buf, "\n" ); vips_buf_appendf( &buf, _( "%d cells in heap, %d cells free, %d cells maximum" ), reduce_context->heap->ncells, reduce_context->heap->nfree, reduce_context->heap->max_fn( reduce_context->heap ) ); vips_buf_appends( &buf, "\n" ); vips_buf_appendf( &buf, _( "%d vips calls cached by nip2" ), cache_history_size ); vips_buf_appends( &buf, "\n" ); vips_buf_appendf( &buf, _( "%d vips operations cached by libvips" ), vips_cache_get_size() ); vips_buf_appends( &buf, "\n" ); vips_buf_appendf( &buf, _( "using %d threads" ), im_concurrency_get() ); vips_buf_appends( &buf, "\n" ); vips_buf_appendf( &buf, _( "%d pixel buffers in vips" ), vips_tracked_get_allocs() ); vips_buf_appends( &buf, "\n" ); vips_buf_append_size( &buf, vips_tracked_get_mem() ); vips_buf_appendf( &buf, _( " of ram in pixel buffers" ) ); vips_buf_appends( &buf, "\n" ); vips_buf_append_size( &buf, vips_tracked_get_mem_highwater() ); vips_buf_appendf( &buf, _( " of ram highwater mark" ) ); vips_buf_appends( &buf, "\n" ); hb = gtk_hbox_new( FALSE, 0 ); gtk_container_border_width( GTK_CONTAINER( hb ), 10 ); gtk_container_add( GTK_CONTAINER( work ), hb ); gtk_widget_show( hb ); image = image_new_from_file( "$VIPSHOME/share/$PACKAGE/data/vips-128.png" ); gtk_box_pack_start( GTK_BOX( hb ), image, FALSE, FALSE, 2 ); gtk_widget_show( image ); lab = gtk_label_new( "" ); gtk_label_set_markup( GTK_LABEL( lab ), vips_buf_all( &buf ) ); gtk_label_set_justify( GTK_LABEL( lab ), GTK_JUSTIFY_LEFT ); gtk_label_set_selectable( GTK_LABEL( lab ), TRUE ); gtk_label_set_line_wrap( GTK_LABEL( lab ), TRUE ); gtk_box_pack_start( GTK_BOX( hb ), lab, FALSE, FALSE, 2 ); gtk_widget_show( lab ); } /* Pop up an "about" window. */ void box_about( GtkWidget *par ) { GtkWidget *idlg; idlg = idialog_new(); idialog_set_build( IDIALOG( idlg ), (iWindowBuildFn) about_build, NULL, NULL, NULL ); idialog_add_ok( IDIALOG( idlg ), iwindow_true_cb, GTK_STOCK_OK ); iwindow_set_parent( IWINDOW( idlg ), box_pick_parent( par ) ); iwindow_build( IWINDOW( idlg ) ); gtk_widget_show( GTK_WIDGET( idlg ) ); } /* A big list of all the help tags, plus the file and anchor they are defined * in. See makehelpindex.pl. */ static const char *box_helpindex[][2] = { #include "helpindex.h" }; /* Pop up a help window for a tag. */ void box_help( GtkWidget *par, const char *name ) { int i; for( i = 0; i < IM_NUMBER( box_helpindex ); i++ ) if( strcmp( name, box_helpindex[i][0] ) == 0 ) { char url[512]; im_snprintf( url, 512, "file://%s/%s", NIP_DOCPATH, box_helpindex[i][1] ); box_url( par, url ); return; } error_top( _( "Help page not found." ) ); error_sub( _( "No indexed help page found for tag \"%s\"" ), name ); iwindow_alert( par, GTK_MESSAGE_ERROR ); } /* Name + caption dialog ... for new workspace / new column. */ static iDialogClass *stringset_parent_class = NULL; void * stringset_child_destroy( StringsetChild *ssc ) { ssc->ss->children = g_slist_remove( ssc->ss->children, ssc ); IM_FREE( ssc->label ); IM_FREE( ssc->text ); IM_FREE( ssc->tooltip ); IM_FREE( ssc ); return( NULL ); } StringsetChild * stringset_child_new( Stringset *ss, const char *label, const char *text, const char *tooltip ) { StringsetChild *ssc = INEW( NULL, StringsetChild ); ssc->ss = ss; ssc->label = im_strdup( NULL, label ); ssc->text = im_strdup( NULL, text ); ssc->tooltip = im_strdup( NULL, tooltip ); ss->children = g_slist_append( ss->children, ssc ); return( ssc ); } static void stringset_destroy( GtkObject *object ) { Stringset *ss; g_return_if_fail( object != NULL ); g_return_if_fail( IS_STRINGSET( object ) ); ss = STRINGSET( object ); slist_map( ss->children, (SListMapFn) stringset_child_destroy, NULL ); UNREF( ss->group ); if( GTK_OBJECT_CLASS( stringset_parent_class )->destroy ) GTK_OBJECT_CLASS( stringset_parent_class )->destroy( object ); } static void * stringset_build_set_default( StringsetChild *ssc, iDialog *idlg ) { idialog_set_default_entry( idlg, GTK_ENTRY( ssc->entry ) ); return( NULL ); } static void stringset_build( GtkWidget *widget ) { Stringset *ss = STRINGSET( widget ); iDialog *idlg = IDIALOG( widget ); GSList *p; #ifdef DEBUG printf( "stringset_build: %s\n", IWINDOW( ss )->title ); #endif /*DEBUG*/ /* Call all builds in superclasses. */ if( IWINDOW_CLASS( stringset_parent_class )->build ) IWINDOW_CLASS( stringset_parent_class )->build( widget ); ss->group = gtk_size_group_new( GTK_SIZE_GROUP_HORIZONTAL ); for( p = ss->children; p; p = p->next ) { StringsetChild *ssc = (StringsetChild *) p->data; ssc->entry = build_glabeltext4( idlg->work, ss->group, ssc->label ); if( ssc->text ) set_gentry( ssc->entry, "%s", ssc->text ); if( ssc->tooltip ) set_tooltip( ssc->entry, "%s", ssc->tooltip ); } /* Set defaults in reverse, so we get top item with focus. */ (void) slist_map_rev( ss->children, (SListMapFn) stringset_build_set_default, idlg ); gtk_widget_show_all( idlg->work ); } static void stringset_class_init( StringsetClass *class ) { GtkObjectClass *object_class; iWindowClass *iwindow_class; object_class = (GtkObjectClass *) class; iwindow_class = (iWindowClass *) class; object_class->destroy = stringset_destroy; iwindow_class->build = stringset_build; stringset_parent_class = g_type_class_peek_parent( class ); } static void stringset_init( Stringset *ss ) { #ifdef DEBUG printf( "stringset_init: %s\n", IWINDOW( ss )->title ); #endif /*DEBUG*/ ss->children = NULL; } GtkType stringset_get_type( void ) { static GtkType stringset_type = 0; if( !stringset_type ) { static const GtkTypeInfo info = { "Stringset", sizeof( Stringset ), sizeof( StringsetClass ), (GtkClassInitFunc) stringset_class_init, (GtkObjectInitFunc) stringset_init, /* reserved_1 */ NULL, /* reserved_2 */ NULL, (GtkClassInitFunc) NULL, }; stringset_type = gtk_type_unique( TYPE_IDIALOG, &info ); } return( stringset_type ); } GtkWidget * stringset_new( void ) { Stringset *ss = gtk_type_new( TYPE_STRINGSET ); return( GTK_WIDGET( ss ) ); } StringsetChild * stringset_child_get( Stringset *ss, const char *label ) { GSList *p; for( p = ss->children; p; p = p->next ) { StringsetChild *ssc = (StringsetChild *) p->data; if( strcmp( label, ssc->label ) == 0 ) return( ssc ); } return( NULL ); } /* Find dialog. */ static iDialogClass *find_parent_class = NULL; static void find_build( GtkWidget *widget ) { Find *find = FIND( widget ); iDialog *idlg = IDIALOG( widget ); #ifdef DEBUG printf( "find_build: %s\n", IWINDOW( find )->title ); #endif /*DEBUG*/ /* Call all builds in superclasses. */ if( IWINDOW_CLASS( find_parent_class )->build ) (*IWINDOW_CLASS( find_parent_class )->build)( widget ); find->search = build_glabeltext4( idlg->work, NULL, _( "Search for" ) ); find->csens = build_gtoggle( idlg->work, _( "Case sensitive" ) ); #ifdef HAVE_GREGEX find->regexp = build_gtoggle( idlg->work, _( "Regular expression" ) ); #endif /*HAVE_GREGEX*/ find->fromtop = build_gtoggle( idlg->work, _( "Search from start" ) ); idialog_set_default_entry( idlg, GTK_ENTRY( find->search ) ); gtk_widget_show_all( idlg->work ); } static void find_class_init( FindClass *class ) { iWindowClass *iwindow_class = (iWindowClass *) class; iwindow_class->build = find_build; find_parent_class = g_type_class_peek_parent( class ); } static void find_init( Find *find ) { #ifdef DEBUG printf( "find_init: %s\n", IWINDOW( find )->title ); #endif /*DEBUG*/ idialog_set_pinup( IDIALOG( find ), TRUE ); } GtkType find_get_type( void ) { static GtkType find_type = 0; if( !find_type ) { static const GtkTypeInfo info = { "Find", sizeof( Find ), sizeof( FindClass ), (GtkClassInitFunc) find_class_init, (GtkObjectInitFunc) find_init, /* reserved_1 */ NULL, /* reserved_2 */ NULL, (GtkClassInitFunc) NULL, }; find_type = gtk_type_unique( TYPE_IDIALOG, &info ); } return( find_type ); } GtkWidget * find_new( void ) { Find *find = gtk_type_new( TYPE_FIND ); return( GTK_WIDGET( find ) ); } /* Launch a viewer on a URL. */ void box_url( GtkWidget *par, const char *url ) { #ifdef OS_WIN32 char url2[FILENAME_MAX]; int v; expand_variables( url, url2 ); v = (int) ShellExecute( NULL, "open", url2, NULL, NULL, SW_SHOWNORMAL ); if( v <= 32 ) { error_top( _( "Unable to view help file." ) ); error_sub( _( "Unable to open URL \"%s\", " "windows error code = %d." ), url, v ); iwindow_alert( par, GTK_MESSAGE_ERROR ); } #elif defined OS_DARWIN (void) systemf( "open %s", url ); #elif defined HAVE_XDG_OPEN static gboolean shown = FALSE; if( systemf( "%s %s", XDG_OPEN, url ) ) { error_top( _( "Unable to view help file." ) ); error_sub( _( "Attempt to view URL with xdg-open failed\n%s" ), url ); iwindow_alert( par, GTK_MESSAGE_ERROR ); } else if( !shown ) { error_top( _( "Browser window opened." ) ); error_sub( "%s", _( "You may need to switch desktops to see the " "new window." ) ); iwindow_alert( par, GTK_MESSAGE_INFO ); shown = TRUE; } #else /*default unix-y*/ static gboolean shown = FALSE; char txt[512]; VipsBuf buf = VIPS_BUF_STATIC( txt ); char txt2[512]; VipsBuf buf2 = VIPS_BUF_STATIC( txt2 ); char url2[FILENAME_MAX]; expand_variables( url, url2 ); vips_buf_appendf( &buf, "%s %s", BOX_BROWSER, BOX_BROWSER_REMOTE ); vips_buf_appendf( &buf2, vips_buf_all( &buf ), url2 ); if( systemf( "%s", vips_buf_all( &buf2 ) ) ) { error_top( _( "Unable to view help file." ) ); error_sub( _( "Attempted to launch browser with command:\n" " %s\n" "You can change this command in Preferences." ), vips_buf_all( &buf2 ) ); iwindow_alert( par, GTK_MESSAGE_ERROR ); } else if( !shown ) { error_top( _( "Browser window opened." ) ); error_sub( "%s", _( "You may need to switch desktops to see the " "new window." ) ); iwindow_alert( par, GTK_MESSAGE_INFO ); shown = TRUE; } #endif /*lots*/ } /* Fontchooser dialog. */ static iDialogClass *fontchooser_parent_class = NULL; static void fontchooser_build( GtkWidget *widget ) { Fontchooser *fontchooser = FONTCHOOSER( widget ); iDialog *idlg = IDIALOG( widget ); #ifdef DEBUG printf( "fontchooser_build: %s\n", IWINDOW( fontchooser )->title ); #endif /*DEBUG*/ /* Call all builds in superclasses. */ if( IWINDOW_CLASS( fontchooser_parent_class )->build ) (*IWINDOW_CLASS( fontchooser_parent_class )->build)( widget ); fontchooser->fontchooser = gtk_font_selection_new(); gtk_box_pack_start( GTK_BOX( idlg->work ), fontchooser->fontchooser, TRUE, TRUE, 2 ); iwindow_set_title( IWINDOW( idlg ), _( "Select Font" ) ); gtk_widget_show_all( idlg->work ); } static void fontchooser_class_init( FontchooserClass *class ) { iWindowClass *iwindow_class; fontchooser_parent_class = g_type_class_peek_parent( class ); iwindow_class = (iWindowClass *) class; iwindow_class->build = fontchooser_build; } static void fontchooser_init( Fontchooser *fontchooser ) { } GtkType fontchooser_get_type( void ) { static GtkType fontchooser_type = 0; if( !fontchooser_type ) { static const GtkTypeInfo info = { "Fontchooser", sizeof( Fontchooser ), sizeof( FontchooserClass ), (GtkClassInitFunc) fontchooser_class_init, (GtkObjectInitFunc) fontchooser_init, /* reserved_1 */ NULL, /* reserved_2 */ NULL, (GtkClassInitFunc) NULL, }; fontchooser_type = gtk_type_unique( TYPE_IDIALOG, &info ); } return( fontchooser_type ); } Fontchooser * fontchooser_new( void ) { Fontchooser *fontchooser = gtk_type_new( TYPE_FONTCHOOSER ); return( fontchooser ); } gboolean fontchooser_set_font_name( Fontchooser *fontchooser, const char *font_name ) { if( !gtk_font_selection_set_font_name( GTK_FONT_SELECTION( fontchooser->fontchooser ), font_name ) ) { error_top( _( "Font not found." ) ); error_sub( _( "Font \"%s\" not found on system." ), font_name ); return( FALSE ); } return( TRUE ); } char * fontchooser_get_font_name( Fontchooser *fontchooser ) { return( gtk_font_selection_get_font_name( GTK_FONT_SELECTION( fontchooser->fontchooser ) ) ); } /* Fontbutton. */ /* Our signals. */ enum { SIG_CHANGED, /* New font selected */ SIG_LAST }; static GtkButtonClass *fontbutton_parent_class = NULL; static guint fontbutton_signals[SIG_LAST] = { 0 }; static void fontbutton_finalize( GObject *gobject ) { Fontbutton *fontbutton; g_return_if_fail( gobject != NULL ); g_return_if_fail( IS_FONTBUTTON( gobject ) ); fontbutton = FONTBUTTON( gobject ); IM_FREE( fontbutton->font_name ); G_OBJECT_CLASS( fontbutton_parent_class )->finalize( gobject ); } static void fontbutton_ok_cb( iWindow *iwnd, void *client, iWindowNotifyFn nfn, void *sys ) { Fontchooser *fontchooser = FONTCHOOSER( iwnd ); Fontbutton *fontbutton = FONTBUTTON( client ); char *font_name; font_name = fontchooser_get_font_name( fontchooser ); fontbutton_set_font_name( fontbutton, font_name ); g_free( font_name ); nfn( sys, IWINDOW_YES ); } static void fontbutton_popdown_cb( iWindow *iwnd, void *client, iWindowNotifyFn nfn, void *sys ) { Fontbutton *fontbutton = FONTBUTTON( client ); fontbutton->fontchooser = NULL; nfn( sys, IWINDOW_YES ); } static void fontbutton_clicked( GtkButton *button ) { Fontbutton *fontbutton = FONTBUTTON( button ); if( fontbutton->fontchooser ) gtk_window_present( GTK_WINDOW( fontbutton->fontchooser ) ); else { fontbutton->fontchooser = fontchooser_new(); iwindow_set_title( IWINDOW( fontbutton->fontchooser ), _( "Pick a font" ) ); idialog_set_callbacks( IDIALOG( fontbutton->fontchooser ), iwindow_true_cb, fontbutton_popdown_cb, NULL, fontbutton ); idialog_add_ok( IDIALOG( fontbutton->fontchooser ), fontbutton_ok_cb, _( "Set Font" ) ); iwindow_set_parent( IWINDOW( fontbutton->fontchooser ), GTK_WIDGET( button ) ); idialog_set_pinup( IDIALOG( fontbutton->fontchooser ), TRUE ); iwindow_build( IWINDOW( fontbutton->fontchooser ) ); fontchooser_set_font_name( fontbutton->fontchooser, fontbutton->font_name ); gtk_widget_show( GTK_WIDGET( fontbutton->fontchooser ) ); } } static void fontbutton_real_changed( Fontbutton *fontbutton ) { } static void fontbutton_class_init( FontbuttonClass *class ) { GObjectClass *gobject_class = (GObjectClass *) class; GtkButtonClass *bobject_class = (GtkButtonClass *) class; fontbutton_parent_class = g_type_class_peek_parent( class ); gobject_class->finalize = fontbutton_finalize; bobject_class->clicked = fontbutton_clicked; class->changed = fontbutton_real_changed; fontbutton_signals[SIG_CHANGED] = g_signal_new( "changed", G_OBJECT_CLASS_TYPE( gobject_class ), G_SIGNAL_RUN_FIRST, G_STRUCT_OFFSET( FontbuttonClass, changed ), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0 ); } static void fontbutton_init( Fontbutton *fontbutton ) { fontbutton->font_name = NULL; fontbutton->fontchooser = NULL; set_tooltip( GTK_WIDGET( fontbutton ), _( "Click to select font" ) ); } GtkType fontbutton_get_type( void ) { static GtkType fontbutton_type = 0; if( !fontbutton_type ) { static const GtkTypeInfo info = { "Fontbutton", sizeof( Fontbutton ), sizeof( FontbuttonClass ), (GtkClassInitFunc) fontbutton_class_init, (GtkObjectInitFunc) fontbutton_init, /* reserved_1 */ NULL, /* reserved_2 */ NULL, (GtkClassInitFunc) NULL, }; fontbutton_type = gtk_type_unique( GTK_TYPE_BUTTON, &info ); } return( fontbutton_type ); } Fontbutton * fontbutton_new( void ) { Fontbutton *fontbutton = g_object_new( TYPE_FONTBUTTON, "label", "Sans 12", NULL ); return( fontbutton ); } void fontbutton_set_font_name( Fontbutton *fontbutton, const char *font_name ) { char font[256]; char button_text[256]; int i; if( !fontbutton->font_name || strcmp( fontbutton->font_name, font_name ) != 0 ) { IM_SETSTR( fontbutton->font_name, font_name ); im_strncpy( font, font_name, 256 ); for( i = strlen( font ) - 1; i > 0 && isdigit( font[i] ); i-- ) font[i] = '\0'; im_snprintf( button_text, 256, "%s", font, font_name ); gtk_label_set_markup( GTK_LABEL( gtk_bin_get_child( GTK_BIN( fontbutton ) ) ), button_text ); if( fontbutton->fontchooser ) fontchooser_set_font_name( fontbutton->fontchooser, font_name ); g_signal_emit( G_OBJECT( fontbutton ), fontbutton_signals[SIG_CHANGED], 0 ); } } const char * fontbutton_get_font_name( Fontbutton *fontbutton ) { return( fontbutton->font_name ); } /* Infobar. Optional: it's only in quite recent gtk. */ #ifdef USE_INFOBAR static GtkInfoBarClass *infobar_parent_class = NULL; static void infobar_destroy( GtkObject *object ) { Infobar *infobar; g_return_if_fail( object != NULL ); g_return_if_fail( IS_INFOBAR( object ) ); infobar = INFOBAR( object ); IM_FREEF( g_source_remove, infobar->close_timeout ); IM_FREEF( g_source_remove, infobar->close_animation_timeout ); GTK_OBJECT_CLASS( infobar_parent_class )->destroy( object ); } static void infobar_class_init( InfobarClass *class ) { GtkObjectClass *object_class = (GtkObjectClass *) class; infobar_parent_class = g_type_class_peek_parent( class ); object_class->destroy = infobar_destroy; } static void infobar_init( Infobar *infobar ) { infobar->top = NULL; infobar->sub = NULL; infobar->close_timeout = 0; infobar->close_animation_timeout = 0; infobar->height = 0; } GType infobar_get_type( void ) { static GType type = 0; if( !type ) { static const GTypeInfo info = { sizeof( InfobarClass ), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) infobar_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof( Infobar ), 32, /* n_preallocs */ (GInstanceInitFunc) infobar_init, }; type = g_type_register_static( GTK_TYPE_INFO_BAR, "Infobar", &info, 0 ); } return( type ); } static void infobar_cancel_close( Infobar *infobar ) { IM_FREEF( g_source_remove, infobar->close_timeout ); IM_FREEF( g_source_remove, infobar->close_animation_timeout ); gtk_widget_set_size_request( GTK_WIDGET( infobar ), -1, -1 ); } static void infobar_hide( Infobar *infobar ) { infobar_cancel_close( infobar ); gtk_widget_hide( GTK_WIDGET( infobar ) ); gtk_widget_hide( GTK_WIDGET( infobar->sub ) ); gtk_widget_set_sensitive( GTK_WIDGET( infobar->info ), TRUE ); } static gboolean infobar_close_animation_timeout( Infobar *infobar ) { infobar->height -= 20; if( infobar->height <= 0 ) { infobar_hide( infobar ); return( FALSE ); } gtk_widget_set_size_request( GTK_WIDGET( infobar ), -1, infobar->height ); return( TRUE ); } static void infobar_start_close( Infobar *infobar ) { infobar_cancel_close( infobar ); infobar->height = GTK_WIDGET( infobar )->allocation.height; infobar->close_animation_timeout = g_timeout_add( 50, (GSourceFunc) infobar_close_animation_timeout, infobar ); } static gboolean infobar_close_timeout( Infobar *infobar ) { infobar_start_close( infobar ); return( FALSE ); } static void infobar_show( Infobar *infobar ) { infobar_cancel_close( infobar ); infobar->close_timeout = g_timeout_add( 5000, (GSourceFunc) infobar_close_timeout, infobar ); gtk_widget_show( GTK_WIDGET( infobar ) ); } static void infobar_info_cb( GtkWidget *button, Infobar *infobar ) { infobar_cancel_close( infobar ); gtk_widget_show( GTK_WIDGET( infobar->sub ) ); gtk_widget_set_sensitive( GTK_WIDGET( infobar->info ), FALSE ); } static void infobar_close_cb( GtkWidget *button, Infobar *infobar ) { infobar_start_close( infobar ); } Infobar * infobar_new( void ) { Infobar *infobar; GtkWidget *vbox; GtkWidget *content_area; GtkWidget *hbox; GtkWidget *action_area; GtkWidget *button; infobar = g_object_new( TYPE_INFOBAR, NULL ); vbox = gtk_vbox_new( FALSE, 10 ); content_area = gtk_info_bar_get_content_area( GTK_INFO_BAR( infobar ) ); gtk_container_add( GTK_CONTAINER( content_area ), vbox ); gtk_widget_show( vbox ); infobar->top = gtk_label_new( "" ); gtk_label_set_justify( GTK_LABEL( infobar->top ), GTK_JUSTIFY_LEFT ); gtk_label_set_selectable( GTK_LABEL( infobar->top ), TRUE ); gtk_label_set_line_wrap( GTK_LABEL( infobar->top ), TRUE ); gtk_container_add( GTK_CONTAINER( vbox ), infobar->top ); gtk_widget_show( infobar->top ); infobar->sub = gtk_label_new( "" ); gtk_label_set_justify( GTK_LABEL( infobar->sub ), GTK_JUSTIFY_LEFT ); gtk_label_set_selectable( GTK_LABEL( infobar->sub ), TRUE ); gtk_label_set_line_wrap( GTK_LABEL( infobar->sub ), TRUE ); gtk_container_add( GTK_CONTAINER( vbox ), infobar->sub ); /* We can't use gtk_info_bar_add_button(), we need the buttons * horizontally. */ hbox = gtk_hbox_new( FALSE, 2 ); action_area = gtk_info_bar_get_action_area( GTK_INFO_BAR( infobar ) ); gtk_container_add( GTK_CONTAINER( action_area ), hbox ); gtk_widget_show( hbox ); button = gtk_button_new_from_stock( GTK_STOCK_CLOSE ); gtk_box_pack_end( GTK_BOX( hbox ), button, TRUE, TRUE, 2 ); g_signal_connect( button, "clicked", G_CALLBACK( infobar_close_cb ), infobar ); gtk_widget_show( button ); infobar->info = gtk_button_new_from_stock( GTK_STOCK_INFO ); gtk_box_pack_end( GTK_BOX( hbox ), infobar->info, TRUE, TRUE, 2 ); g_signal_connect( infobar->info, "clicked", G_CALLBACK( infobar_info_cb ), infobar ); gtk_widget_show( infobar->info ); return( infobar ); } #else /*!USE_INFOBAR*/ Infobar * infobar_new( void ) { return( NULL ); } #endif /*USE_INFOBAR*/ /* Set the label on an infobar to some marked-up text. */ void infobar_vset( Infobar *infobar, GtkMessageType type, const char *top, const char *sub, va_list ap ) { #ifdef USE_INFOBAR char buf1[MAX_DIALOG_TEXT]; char buf2[MAX_DIALOG_TEXT]; char *p; escape_markup( top, buf1, MAX_DIALOG_TEXT ); im_snprintf( buf2, MAX_DIALOG_TEXT, "%s", buf1 ); gtk_label_set_markup( GTK_LABEL( infobar->top ), buf2 ); (void) im_vsnprintf( buf1, MAX_DIALOG_TEXT, sub, ap ); escape_markup( buf1, buf2, MAX_DIALOG_TEXT ); /* Remove any trailing newlines, they make infobars rather large. */ while( (p = buf2 + strlen( buf2 )) > buf2 && p[-1] == '\n' ) p[-1] = '\0'; gtk_label_set_markup( GTK_LABEL( infobar->sub ), buf2 ); gtk_info_bar_set_message_type( GTK_INFO_BAR( infobar ), type ); infobar_show( infobar ); #endif /*USE_INFOBAR*/ } /* Set the label on an infobar to some marked-up text. */ void infobar_set( Infobar *infobar, GtkMessageType type, const char *top, const char *sub, ... ) { va_list ap; va_start( ap, sub ); infobar_vset( infobar, type, top, sub, ap ); va_end( ap ); } nip2-8.7.0/src/workspaceroot.c0000644000175000017500000000746213224651032013163 00000000000000/* The root of all workspaces. A singleton all workspaces are children of. */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #include "ip.h" static ModelClass *parent_class = NULL; static void workspaceroot_dispose( GObject *gobject ) { Workspaceroot *wsr; #ifdef DEBUG printf( "workspaceroot_dispose\n" ); #endif /*DEBUG*/ g_return_if_fail( gobject != NULL ); g_return_if_fail( IS_WORKSPACEROOT( gobject ) ); wsr = WORKSPACEROOT( gobject ); wsr->sym = NULL; G_OBJECT_CLASS( parent_class )->dispose( gobject ); } static void workspaceroot_child_add( iContainer *parent, iContainer *child, int pos ) { ICONTAINER_CLASS( parent_class )->child_add( parent, child, pos ); #ifdef DEBUG printf( "workspaceroot_child_add: added %s\n", IOBJECT( child )->name ); #endif /*DEBUG*/ } static void workspaceroot_child_remove( iContainer *parent, iContainer *child ) { ICONTAINER_CLASS( parent_class )->child_remove( parent, child ); } static void workspaceroot_class_init( WorkspacerootClass *class ) { GObjectClass *gobject_class = (GObjectClass *) class; iContainerClass *icontainer_class = (iContainerClass *) class; parent_class = g_type_class_peek_parent( class ); /* Create signals. */ /* Init methods. */ gobject_class->dispose = workspaceroot_dispose; icontainer_class->child_add = workspaceroot_child_add; icontainer_class->child_remove = workspaceroot_child_remove; } static void workspaceroot_init( Workspaceroot *wsr ) { wsr->sym = NULL; } GType workspaceroot_get_type( void ) { static GType type = 0; if( !type ) { static const GTypeInfo info = { sizeof( WorkspacerootClass ), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) workspaceroot_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof( Workspaceroot ), 32, /* n_preallocs */ (GInstanceInitFunc) workspaceroot_init, }; type = g_type_register_static( TYPE_MODEL, "Workspaceroot", &info, 0 ); } return( type ); } static void workspaceroot_link( Workspaceroot *wsr, const char *name ) { Symbol *sym; iobject_set( IOBJECT( wsr ), name, NULL ); wsr->sym = sym = symbol_new( symbol_root->expr->compile, name ); sym->type = SYM_WORKSPACEROOT; sym->wsr = wsr; sym->expr = expr_new( sym ); (void) compile_new( sym->expr ); symbol_made( sym ); } Workspaceroot * workspaceroot_new( const char *name ) { Workspaceroot *wsr; if( compile_lookup( symbol_root->expr->compile, name ) ) { error_top( _( "Name clash." ) ); error_sub( _( "Can't create workspaceroot \"%s\". " "A symbol with that name already exists." ), name ); return( NULL ); } wsr = WORKSPACEROOT( g_object_new( TYPE_WORKSPACEROOT, NULL ) ); workspaceroot_link( wsr, name ); return( wsr ); } /* Make up a new workspace name. */ void workspaceroot_name_new( Workspaceroot *wsr, char *name ) { Compile *compile = wsr->sym->expr->compile; strcpy( name, "tab1" ); while( compile_lookup( compile, name ) ) increment_name( name ); } nip2-8.7.0/src/compile.h0000644000175000017500000001052413224651032011707 00000000000000/* Stuff to parse and compile text. */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* Maximum number of shared sections of code in a copy. */ #define MAX_RELOC (1000) #define TYPE_COMPILE (compile_get_type()) #define COMPILE( obj ) \ (G_TYPE_CHECK_INSTANCE_CAST( (obj), TYPE_COMPILE, Compile )) #define COMPILE_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_CAST( (klass), TYPE_COMPILE, CompileClass)) #define IS_COMPILE( obj ) \ (G_TYPE_CHECK_INSTANCE_TYPE( (obj), TYPE_COMPILE )) #define IS_COMPILE_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_TYPE( (klass), TYPE_COMPILE )) #define COMPILE_GET_CLASS( obj ) \ (G_TYPE_INSTANCE_GET_CLASS( (obj), TYPE_COMPILE, CompileClass )) /* What we track to parse and compile some text. Our children are our locals. */ struct _Compile { iContainer parent_object; Symbol *sym; /* We are part of this symbol, scopewise */ GSList *exprs; /* We are used by these expressions */ gboolean is_klass; /* True if this is a class */ gboolean has_super; /* True if has a super-class */ char *text; /* The original text */ char *prhstext; /* Parameters plus the RHS of the definition */ char *rhstext; /* Just the RHS of the definition */ ParseNode *tree; /* Parse tree we built */ GSList *treefrag; /* List of tree bits for easy freeing */ Symbol *last_sym; /* The last child we added in this context */ int nparam; /* Number of real parameters */ GSList *param; /* Pointers into locals for real params */ int nsecret; /* Number of secret parameters */ GSList *secret; /* Pointers into locals for secret params */ Symbol *this; /* If we are a class, the "this" local */ Symbol *super; /* If we are a class, the "super" local */ GSList *children; /* Symbols which we directly refer to */ Element base; /* Base of compiled code */ Heap *heap; /* Heap containing compiled code */ GSList *statics; /* Static strings we built */ }; typedef struct _CompileClass { iContainerClass parent_class; /* My methods. */ } CompileClass; Compile *compile_get_parent( Compile *compile ); void *compile_name_print( Compile *compile ); void compile_name( Compile *compile, VipsBuf *buf ); typedef void *(*map_compile_fn)( Compile *, void * ); Compile *compile_map_all( Compile *compile, map_compile_fn fn, void *a ); Symbol *compile_lookup( Compile *compile, const char *name ); void compile_link_make( Compile *compile, Symbol *child ); void *compile_link_break( Compile *compile, Symbol *child ); GtkType compile_get_type( void ); void *compile_expr_link_break( Compile *compile, Expr *expr ); void *compile_expr_link_break_rev( Expr *expr, Compile *compile ); void compile_expr_link_make( Compile *compile, Expr *expr ); Compile *compile_new( Expr *expr ); Compile *compile_new_toplevel( Expr *expr ); Compile *compile_new_local( Expr *expr ); void *compile_object( Compile *compile ); void *compile_toolkit( Toolkit *kit ); void compile_error_set( Compile *compile ); gboolean compile_check( Compile *compile ); void compile_resolve_names( Compile *inner, Compile *outer ); Symbol *compile_resolve_top( Symbol *sym ); void compile_resolve_dynamic( Compile *tab, Compile *context ); Symbol *compile_get_member( Compile *compile, const char *name ); const char *compile_get_member_string( Compile *compile, const char *name ); ParseNode *compile_copy_tree( Compile *fromscope, ParseNode *tree, Compile *toscope ); void compile_lcomp( Compile *compile ); GSList *compile_pattern_lhs( Compile *compile, Symbol *sym, ParseNode *node ); gboolean compile_pattern_has_leaf( ParseNode *node ); gboolean compile_pattern_has_args( Compile *compile ); nip2-8.7.0/src/Makefile.in0000644000175000017500000106370613350464104012170 00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @OS_WIN32_FALSE@bin_PROGRAMS = nip2$(EXEEXT) @OS_WIN32_TRUE@bin_PROGRAMS = nip2$(EXEEXT) nip2-cli$(EXEEXT) @OS_WIN32_TRUE@am__append_1 = \ @OS_WIN32_TRUE@ nip2-icon.rc subdir = src ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) am__nip2_SOURCES_DIST = vipsobject.c vipsobject.h plotmodel.c \ plotmodel.h progress.c progress.h panechild.c panechild.h \ plotpresent.c plotpresent.h plotstatus.c plotstatus.h \ floatwindow.c floatwindow.h vobject.c vobject.h action.c \ action.h boxes.c boxes.h popupbutton.c popupbutton.h \ imageheader.c imageheader.h preview.c preview.h builtin.c \ builtin.h icontainer.c icontainer.h iobject.c iobject.h \ class.c class.h classmodel.c classmodel.h colour.c colour.h \ colourdisplay.c colourdisplay.h colourview.c colourview.h \ column.c column.h columnview.c columnview.h compile.c \ compile.h conversion.c conversion.h conversionview.c \ conversionview.h doubleclick.c doubleclick.h dump.c dump.h \ expr.c expr.h filemodel.c filemodel.h pane.c pane.h pathname.c \ pathname.h fontname.c fontname.h group.c group.h \ pathnameview.c pathnameview.h fontnameview.c fontnameview.h \ filesel.c filesel.h graphwindow.c graphwindow.h graphicview.c \ graphicview.h gtkutil.c gtkutil.h heap.c heap.h heapmodel.c \ heapmodel.h helpindex.h nipmarshal.h nipmarshal.c iarrow.c \ iarrow.h value.c value.h valueview.c valueview.h idialog.c \ idialog.h iimage.c iimage.h iimageview.c iimageview.h \ imagedisplay.c imagedisplay.h log.c log.h error.c error.h \ managed.c managed.h managedfile.c managedfile.h \ managedgvalue.c managedgvalue.h managedgobject.c \ managedgobject.h managedstring.c managedstring.h imageinfo.c \ imageinfo.h imagemodel.c imagemodel.h imagepresent.c \ imagepresent.h imageview.c imageview.h ip.h iregion.c \ iregion.h iregiongroup.c iregiongroup.h iregiongroupview.c \ iregiongroupview.h iregionview.c iregionview.h itext.c itext.h \ itextview.c itextview.h iwindow.c iwindow.h parse.y parser.h \ prefs.c prefs.h prefworkspaceview.c prefworkspaceview.h \ prefcolumnview.c prefcolumnview.h lex.l link.c link.h main.c \ main.h mainw.c mainw.h matrix.c matrix.h matrixview.c \ matrixview.h plot.c plot.h plotview.c plotview.h plotwindow.c \ plotwindow.h model.c model.h option.c option.h optionview.c \ optionview.h formula.c formula.h paintboxview.c paintboxview.h \ path.c path.h predicate.c predicate.h program.c program.h \ string.c istring.h number.c number.h expression.c expression.h \ expressionview.c expressionview.h stringview.c stringview.h \ editview.c editview.h numberview.c numberview.h real.c real.h \ vector.c vector.h reduce.c reduce.h regionview.c regionview.h \ rhs.c rhs.h rhsview.c rhsview.h row.c row.h rowview.c \ rowview.h secret.c secret.h slider.c slider.h sliderview.c \ sliderview.h clock.c clock.h spin.c spin.h statusview.c \ statusview.h subcolumn.c subcolumn.h subcolumnview.c \ subcolumnview.h symbol.c symbol.h toggle.c toggle.h \ toggleview.c toggleview.h tool.c tool.h toolkit.c toolkit.h \ toolkitgroup.c toolkitgroup.h toolkitgroupview.c \ toolkitgroupview.h toolkitview.c toolkitview.h defbrowser.c \ defbrowser.h toolkitbrowser.c toolkitbrowser.h toolview.c \ toolview.h trace.c trace.h tree.c tree.h tslider.c tslider.h \ util.c util.h view.c view.h call.c call.h cache.c cache.h \ watch.c watch.h workspace.c workspace.h workspacegroup.c \ workspacegroup.h workspacegroupview.c workspacegroupview.h \ workspacedefs.c workspacedefs.h workspaceroot.c \ workspaceroot.h workspaceview.c workspaceview.h nip2-icon.rc @OS_WIN32_TRUE@am__objects_1 = nip2-icon.$(OBJEXT) am_nip2_OBJECTS = nip2-vipsobject.$(OBJEXT) nip2-plotmodel.$(OBJEXT) \ nip2-progress.$(OBJEXT) nip2-panechild.$(OBJEXT) \ nip2-plotpresent.$(OBJEXT) nip2-plotstatus.$(OBJEXT) \ nip2-floatwindow.$(OBJEXT) nip2-vobject.$(OBJEXT) \ nip2-action.$(OBJEXT) nip2-boxes.$(OBJEXT) \ nip2-popupbutton.$(OBJEXT) nip2-imageheader.$(OBJEXT) \ nip2-preview.$(OBJEXT) nip2-builtin.$(OBJEXT) \ nip2-icontainer.$(OBJEXT) nip2-iobject.$(OBJEXT) \ nip2-class.$(OBJEXT) nip2-classmodel.$(OBJEXT) \ nip2-colour.$(OBJEXT) nip2-colourdisplay.$(OBJEXT) \ nip2-colourview.$(OBJEXT) nip2-column.$(OBJEXT) \ nip2-columnview.$(OBJEXT) nip2-compile.$(OBJEXT) \ nip2-conversion.$(OBJEXT) nip2-conversionview.$(OBJEXT) \ nip2-doubleclick.$(OBJEXT) nip2-dump.$(OBJEXT) \ nip2-expr.$(OBJEXT) nip2-filemodel.$(OBJEXT) \ nip2-pane.$(OBJEXT) nip2-pathname.$(OBJEXT) \ nip2-fontname.$(OBJEXT) nip2-group.$(OBJEXT) \ nip2-pathnameview.$(OBJEXT) nip2-fontnameview.$(OBJEXT) \ nip2-filesel.$(OBJEXT) nip2-graphwindow.$(OBJEXT) \ nip2-graphicview.$(OBJEXT) nip2-gtkutil.$(OBJEXT) \ nip2-heap.$(OBJEXT) nip2-heapmodel.$(OBJEXT) \ nip2-nipmarshal.$(OBJEXT) nip2-iarrow.$(OBJEXT) \ nip2-value.$(OBJEXT) nip2-valueview.$(OBJEXT) \ nip2-idialog.$(OBJEXT) nip2-iimage.$(OBJEXT) \ nip2-iimageview.$(OBJEXT) nip2-imagedisplay.$(OBJEXT) \ nip2-log.$(OBJEXT) nip2-error.$(OBJEXT) nip2-managed.$(OBJEXT) \ nip2-managedfile.$(OBJEXT) nip2-managedgvalue.$(OBJEXT) \ nip2-managedgobject.$(OBJEXT) nip2-managedstring.$(OBJEXT) \ nip2-imageinfo.$(OBJEXT) nip2-imagemodel.$(OBJEXT) \ nip2-imagepresent.$(OBJEXT) nip2-imageview.$(OBJEXT) \ nip2-iregion.$(OBJEXT) nip2-iregiongroup.$(OBJEXT) \ nip2-iregiongroupview.$(OBJEXT) nip2-iregionview.$(OBJEXT) \ nip2-itext.$(OBJEXT) nip2-itextview.$(OBJEXT) \ nip2-iwindow.$(OBJEXT) nip2-parse.$(OBJEXT) \ nip2-prefs.$(OBJEXT) nip2-prefworkspaceview.$(OBJEXT) \ nip2-prefcolumnview.$(OBJEXT) nip2-lex.$(OBJEXT) \ nip2-link.$(OBJEXT) nip2-main.$(OBJEXT) nip2-mainw.$(OBJEXT) \ nip2-matrix.$(OBJEXT) nip2-matrixview.$(OBJEXT) \ nip2-plot.$(OBJEXT) nip2-plotview.$(OBJEXT) \ nip2-plotwindow.$(OBJEXT) nip2-model.$(OBJEXT) \ nip2-option.$(OBJEXT) nip2-optionview.$(OBJEXT) \ nip2-formula.$(OBJEXT) nip2-paintboxview.$(OBJEXT) \ nip2-path.$(OBJEXT) nip2-predicate.$(OBJEXT) \ nip2-program.$(OBJEXT) nip2-string.$(OBJEXT) \ nip2-number.$(OBJEXT) nip2-expression.$(OBJEXT) \ nip2-expressionview.$(OBJEXT) nip2-stringview.$(OBJEXT) \ nip2-editview.$(OBJEXT) nip2-numberview.$(OBJEXT) \ nip2-real.$(OBJEXT) nip2-vector.$(OBJEXT) \ nip2-reduce.$(OBJEXT) nip2-regionview.$(OBJEXT) \ nip2-rhs.$(OBJEXT) nip2-rhsview.$(OBJEXT) nip2-row.$(OBJEXT) \ nip2-rowview.$(OBJEXT) nip2-secret.$(OBJEXT) \ nip2-slider.$(OBJEXT) nip2-sliderview.$(OBJEXT) \ nip2-clock.$(OBJEXT) nip2-spin.$(OBJEXT) \ nip2-statusview.$(OBJEXT) nip2-subcolumn.$(OBJEXT) \ nip2-subcolumnview.$(OBJEXT) nip2-symbol.$(OBJEXT) \ nip2-toggle.$(OBJEXT) nip2-toggleview.$(OBJEXT) \ nip2-tool.$(OBJEXT) nip2-toolkit.$(OBJEXT) \ nip2-toolkitgroup.$(OBJEXT) nip2-toolkitgroupview.$(OBJEXT) \ nip2-toolkitview.$(OBJEXT) nip2-defbrowser.$(OBJEXT) \ nip2-toolkitbrowser.$(OBJEXT) nip2-toolview.$(OBJEXT) \ nip2-trace.$(OBJEXT) nip2-tree.$(OBJEXT) \ nip2-tslider.$(OBJEXT) nip2-util.$(OBJEXT) nip2-view.$(OBJEXT) \ nip2-call.$(OBJEXT) nip2-cache.$(OBJEXT) nip2-watch.$(OBJEXT) \ nip2-workspace.$(OBJEXT) nip2-workspacegroup.$(OBJEXT) \ nip2-workspacegroupview.$(OBJEXT) nip2-workspacedefs.$(OBJEXT) \ nip2-workspaceroot.$(OBJEXT) nip2-workspaceview.$(OBJEXT) \ $(am__objects_1) nip2_OBJECTS = $(am_nip2_OBJECTS) nip2_LDADD = $(LDADD) nip2_DEPENDENCIES = AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = nip2_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(nip2_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ am__nip2_cli_SOURCES_DIST = nip2-cli.c @OS_WIN32_TRUE@am_nip2_cli_OBJECTS = nip2-cli.$(OBJEXT) nip2_cli_OBJECTS = $(am_nip2_cli_OBJECTS) nip2_cli_LDADD = $(LDADD) nip2_cli_DEPENDENCIES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/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_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = LEXCOMPILE = $(LEX) $(AM_LFLAGS) $(LFLAGS) LTLEXCOMPILE = $(LIBTOOL) $(AM_V_lt) $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(LEX) $(AM_LFLAGS) $(LFLAGS) AM_V_LEX = $(am__v_LEX_@AM_V@) am__v_LEX_ = $(am__v_LEX_@AM_DEFAULT_V@) am__v_LEX_0 = @echo " LEX " $@; am__v_LEX_1 = YLWRAP = $(top_srcdir)/ylwrap am__yacc_c2h = sed -e s/cc$$/hh/ -e s/cpp$$/hpp/ -e s/cxx$$/hxx/ \ -e s/c++$$/h++/ -e s/c$$/h/ YACCCOMPILE = $(YACC) $(AM_YFLAGS) $(YFLAGS) LTYACCCOMPILE = $(LIBTOOL) $(AM_V_lt) $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(YACC) $(AM_YFLAGS) $(YFLAGS) AM_V_YACC = $(am__v_YACC_@AM_V@) am__v_YACC_ = $(am__v_YACC_@AM_DEFAULT_V@) am__v_YACC_0 = @echo " YACC " $@; am__v_YACC_1 = SOURCES = $(nip2_SOURCES) $(nip2_cli_SOURCES) DIST_SOURCES = $(am__nip2_SOURCES_DIST) $(am__nip2_cli_SOURCES_DIST) RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ $(top_srcdir)/ylwrap lex.c parse.c DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BISON = @BISON@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DLLWRAP = @DLLWRAP@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FFTW3_CFLAGS = @FFTW3_CFLAGS@ FFTW3_LIBS = @FFTW3_LIBS@ FGREP = @FGREP@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_LIBS = @GSL_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ IP_CFLAGS = @IP_CFLAGS@ IP_LIBS = @IP_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBGOFFICE_CFLAGS = @LIBGOFFICE_CFLAGS@ LIBGOFFICE_LIBS = @LIBGOFFICE_LIBS@ LIBGSF_CFLAGS = @LIBGSF_CFLAGS@ LIBGSF_LIBS = @LIBGSF_LIBS@ LIBGVC_CFLAGS = @LIBGVC_CFLAGS@ LIBGVC_LIBS = @LIBGVC_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ 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@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ REQUIRED_PACKAGES_CFLAGS = @REQUIRED_PACKAGES_CFLAGS@ REQUIRED_PACKAGES_LIBS = @REQUIRED_PACKAGES_LIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOP_SRCDIR = @TOP_SRCDIR@ UPDATE_DESKTOP_DATABASE = @UPDATE_DESKTOP_DATABASE@ UPDATE_MIME_DATABASE = @UPDATE_MIME_DATABASE@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XDG_OPEN = @XDG_OPEN@ XGETTEXT = @XGETTEXT@ 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@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = BITMAPS # need this to keep autoconf quiet, but we don't actually use it ... see the # bison rule below YACC = bison # windows resource files ... see .rc.o rule later SUFFIXES = .rc @OS_WIN32_TRUE@nip2_cli_SOURCES = nip2-cli.c @OS_WIN32_TRUE@nip2_CFLAGS = "-mwindows" @OS_WIN32_FALSE@CLI_DIST = nip2-cli.c @OS_WIN32_TRUE@CLI_DIST = nip2_SOURCES = vipsobject.c vipsobject.h plotmodel.c plotmodel.h \ progress.c progress.h panechild.c panechild.h plotpresent.c \ plotpresent.h plotstatus.c plotstatus.h floatwindow.c \ floatwindow.h vobject.c vobject.h action.c action.h boxes.c \ boxes.h popupbutton.c popupbutton.h imageheader.c \ imageheader.h preview.c preview.h builtin.c builtin.h \ icontainer.c icontainer.h iobject.c iobject.h class.c class.h \ classmodel.c classmodel.h colour.c colour.h colourdisplay.c \ colourdisplay.h colourview.c colourview.h column.c column.h \ columnview.c columnview.h compile.c compile.h conversion.c \ conversion.h conversionview.c conversionview.h doubleclick.c \ doubleclick.h dump.c dump.h expr.c expr.h filemodel.c \ filemodel.h pane.c pane.h pathname.c pathname.h fontname.c \ fontname.h group.c group.h pathnameview.c pathnameview.h \ fontnameview.c fontnameview.h filesel.c filesel.h \ graphwindow.c graphwindow.h graphicview.c graphicview.h \ gtkutil.c gtkutil.h heap.c heap.h heapmodel.c heapmodel.h \ helpindex.h nipmarshal.h nipmarshal.c iarrow.c iarrow.h \ value.c value.h valueview.c valueview.h idialog.c idialog.h \ iimage.c iimage.h iimageview.c iimageview.h imagedisplay.c \ imagedisplay.h log.c log.h error.c error.h managed.c managed.h \ managedfile.c managedfile.h managedgvalue.c managedgvalue.h \ managedgobject.c managedgobject.h managedstring.c \ managedstring.h imageinfo.c imageinfo.h imagemodel.c \ imagemodel.h imagepresent.c imagepresent.h imageview.c \ imageview.h ip.h iregion.c iregion.h iregiongroup.c \ iregiongroup.h iregiongroupview.c iregiongroupview.h \ iregionview.c iregionview.h itext.c itext.h itextview.c \ itextview.h iwindow.c iwindow.h parse.y parser.h prefs.c \ prefs.h prefworkspaceview.c prefworkspaceview.h \ prefcolumnview.c prefcolumnview.h lex.l link.c link.h main.c \ main.h mainw.c mainw.h matrix.c matrix.h matrixview.c \ matrixview.h plot.c plot.h plotview.c plotview.h plotwindow.c \ plotwindow.h model.c model.h option.c option.h optionview.c \ optionview.h formula.c formula.h paintboxview.c paintboxview.h \ path.c path.h predicate.c predicate.h program.c program.h \ string.c istring.h number.c number.h expression.c expression.h \ expressionview.c expressionview.h stringview.c stringview.h \ editview.c editview.h numberview.c numberview.h real.c real.h \ vector.c vector.h reduce.c reduce.h regionview.c regionview.h \ rhs.c rhs.h rhsview.c rhsview.h row.c row.h rowview.c \ rowview.h secret.c secret.h slider.c slider.h sliderview.c \ sliderview.h clock.c clock.h spin.c spin.h statusview.c \ statusview.h subcolumn.c subcolumn.h subcolumnview.c \ subcolumnview.h symbol.c symbol.h toggle.c toggle.h \ toggleview.c toggleview.h tool.c tool.h toolkit.c toolkit.h \ toolkitgroup.c toolkitgroup.h toolkitgroupview.c \ toolkitgroupview.h toolkitview.c toolkitview.h defbrowser.c \ defbrowser.h toolkitbrowser.c toolkitbrowser.h toolview.c \ toolview.h trace.c trace.h tree.c tree.h tslider.c tslider.h \ util.c util.h view.c view.h call.c call.h cache.c cache.h \ watch.c watch.h workspace.c workspace.h workspacegroup.c \ workspacegroup.h workspacegroupview.c workspacegroupview.h \ workspacedefs.c workspacedefs.h workspaceroot.c \ workspaceroot.h workspaceview.c workspaceview.h \ $(am__append_1) AM_CPPFLAGS = @IP_CFLAGS@ LDADD = @IP_CFLAGS@ @IP_LIBS@ AM_LDFLAGS = @LDFLAGS@ CLEANFILES = parse.c parse.h lex.c tags EXTRA_DIST = makehelpindex.pl helpindex.h \ nipmarshal.h nipmarshal.c nipmarshal.list \ $(CLI_DIST) all: all-recursive .SUFFIXES: .SUFFIXES: .rc .c .l .lo .o .obj .y $(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) --foreign src/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign src/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__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) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ || test -f $$p1 \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list nip2$(EXEEXT): $(nip2_OBJECTS) $(nip2_DEPENDENCIES) $(EXTRA_nip2_DEPENDENCIES) @rm -f nip2$(EXEEXT) $(AM_V_CCLD)$(nip2_LINK) $(nip2_OBJECTS) $(nip2_LDADD) $(LIBS) nip2-cli$(EXEEXT): $(nip2_cli_OBJECTS) $(nip2_cli_DEPENDENCIES) $(EXTRA_nip2_cli_DEPENDENCIES) @rm -f nip2-cli$(EXEEXT) $(AM_V_CCLD)$(LINK) $(nip2_cli_OBJECTS) $(nip2_cli_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-action.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-boxes.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-builtin.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-cache.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-call.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-class.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-classmodel.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-cli.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-clock.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-colour.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-colourdisplay.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-colourview.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-column.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-columnview.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-compile.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-conversion.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-conversionview.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-defbrowser.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-doubleclick.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-dump.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-editview.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-error.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-expr.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-expression.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-expressionview.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-filemodel.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-filesel.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-floatwindow.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-fontname.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-fontnameview.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-formula.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-graphicview.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-graphwindow.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-group.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-gtkutil.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-heap.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-heapmodel.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-iarrow.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-icontainer.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-idialog.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-iimage.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-iimageview.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-imagedisplay.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-imageheader.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-imageinfo.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-imagemodel.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-imagepresent.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-imageview.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-iobject.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-iregion.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-iregiongroup.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-iregiongroupview.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-iregionview.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-itext.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-itextview.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-iwindow.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-lex.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-link.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-log.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-mainw.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-managed.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-managedfile.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-managedgobject.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-managedgvalue.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-managedstring.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-matrix.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-matrixview.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-model.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-nipmarshal.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-number.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-numberview.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-option.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-optionview.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-paintboxview.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-pane.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-panechild.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-parse.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-path.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-pathname.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-pathnameview.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-plot.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-plotmodel.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-plotpresent.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-plotstatus.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-plotview.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-plotwindow.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-popupbutton.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-predicate.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-prefcolumnview.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-prefs.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-prefworkspaceview.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-preview.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-program.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-progress.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-real.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-reduce.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-regionview.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-rhs.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-rhsview.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-row.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-rowview.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-secret.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-slider.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-sliderview.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-spin.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-statusview.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-string.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-stringview.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-subcolumn.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-subcolumnview.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-symbol.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-toggle.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-toggleview.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-tool.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-toolkit.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-toolkitbrowser.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-toolkitgroup.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-toolkitgroupview.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-toolkitview.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-toolview.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-trace.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-tree.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-tslider.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-util.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-value.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-valueview.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-vector.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-view.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-vipsobject.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-vobject.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-watch.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-workspace.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-workspacedefs.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-workspacegroup.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-workspacegroupview.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-workspaceroot.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nip2-workspaceview.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 -o $@ $< .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 -o $@ `$(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 $@ $< nip2-vipsobject.o: vipsobject.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-vipsobject.o -MD -MP -MF $(DEPDIR)/nip2-vipsobject.Tpo -c -o nip2-vipsobject.o `test -f 'vipsobject.c' || echo '$(srcdir)/'`vipsobject.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-vipsobject.Tpo $(DEPDIR)/nip2-vipsobject.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='vipsobject.c' object='nip2-vipsobject.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-vipsobject.o `test -f 'vipsobject.c' || echo '$(srcdir)/'`vipsobject.c nip2-vipsobject.obj: vipsobject.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-vipsobject.obj -MD -MP -MF $(DEPDIR)/nip2-vipsobject.Tpo -c -o nip2-vipsobject.obj `if test -f 'vipsobject.c'; then $(CYGPATH_W) 'vipsobject.c'; else $(CYGPATH_W) '$(srcdir)/vipsobject.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-vipsobject.Tpo $(DEPDIR)/nip2-vipsobject.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='vipsobject.c' object='nip2-vipsobject.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-vipsobject.obj `if test -f 'vipsobject.c'; then $(CYGPATH_W) 'vipsobject.c'; else $(CYGPATH_W) '$(srcdir)/vipsobject.c'; fi` nip2-plotmodel.o: plotmodel.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-plotmodel.o -MD -MP -MF $(DEPDIR)/nip2-plotmodel.Tpo -c -o nip2-plotmodel.o `test -f 'plotmodel.c' || echo '$(srcdir)/'`plotmodel.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-plotmodel.Tpo $(DEPDIR)/nip2-plotmodel.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='plotmodel.c' object='nip2-plotmodel.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-plotmodel.o `test -f 'plotmodel.c' || echo '$(srcdir)/'`plotmodel.c nip2-plotmodel.obj: plotmodel.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-plotmodel.obj -MD -MP -MF $(DEPDIR)/nip2-plotmodel.Tpo -c -o nip2-plotmodel.obj `if test -f 'plotmodel.c'; then $(CYGPATH_W) 'plotmodel.c'; else $(CYGPATH_W) '$(srcdir)/plotmodel.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-plotmodel.Tpo $(DEPDIR)/nip2-plotmodel.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='plotmodel.c' object='nip2-plotmodel.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-plotmodel.obj `if test -f 'plotmodel.c'; then $(CYGPATH_W) 'plotmodel.c'; else $(CYGPATH_W) '$(srcdir)/plotmodel.c'; fi` nip2-progress.o: progress.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-progress.o -MD -MP -MF $(DEPDIR)/nip2-progress.Tpo -c -o nip2-progress.o `test -f 'progress.c' || echo '$(srcdir)/'`progress.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-progress.Tpo $(DEPDIR)/nip2-progress.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='progress.c' object='nip2-progress.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-progress.o `test -f 'progress.c' || echo '$(srcdir)/'`progress.c nip2-progress.obj: progress.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-progress.obj -MD -MP -MF $(DEPDIR)/nip2-progress.Tpo -c -o nip2-progress.obj `if test -f 'progress.c'; then $(CYGPATH_W) 'progress.c'; else $(CYGPATH_W) '$(srcdir)/progress.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-progress.Tpo $(DEPDIR)/nip2-progress.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='progress.c' object='nip2-progress.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-progress.obj `if test -f 'progress.c'; then $(CYGPATH_W) 'progress.c'; else $(CYGPATH_W) '$(srcdir)/progress.c'; fi` nip2-panechild.o: panechild.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-panechild.o -MD -MP -MF $(DEPDIR)/nip2-panechild.Tpo -c -o nip2-panechild.o `test -f 'panechild.c' || echo '$(srcdir)/'`panechild.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-panechild.Tpo $(DEPDIR)/nip2-panechild.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='panechild.c' object='nip2-panechild.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-panechild.o `test -f 'panechild.c' || echo '$(srcdir)/'`panechild.c nip2-panechild.obj: panechild.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-panechild.obj -MD -MP -MF $(DEPDIR)/nip2-panechild.Tpo -c -o nip2-panechild.obj `if test -f 'panechild.c'; then $(CYGPATH_W) 'panechild.c'; else $(CYGPATH_W) '$(srcdir)/panechild.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-panechild.Tpo $(DEPDIR)/nip2-panechild.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='panechild.c' object='nip2-panechild.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-panechild.obj `if test -f 'panechild.c'; then $(CYGPATH_W) 'panechild.c'; else $(CYGPATH_W) '$(srcdir)/panechild.c'; fi` nip2-plotpresent.o: plotpresent.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-plotpresent.o -MD -MP -MF $(DEPDIR)/nip2-plotpresent.Tpo -c -o nip2-plotpresent.o `test -f 'plotpresent.c' || echo '$(srcdir)/'`plotpresent.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-plotpresent.Tpo $(DEPDIR)/nip2-plotpresent.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='plotpresent.c' object='nip2-plotpresent.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-plotpresent.o `test -f 'plotpresent.c' || echo '$(srcdir)/'`plotpresent.c nip2-plotpresent.obj: plotpresent.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-plotpresent.obj -MD -MP -MF $(DEPDIR)/nip2-plotpresent.Tpo -c -o nip2-plotpresent.obj `if test -f 'plotpresent.c'; then $(CYGPATH_W) 'plotpresent.c'; else $(CYGPATH_W) '$(srcdir)/plotpresent.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-plotpresent.Tpo $(DEPDIR)/nip2-plotpresent.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='plotpresent.c' object='nip2-plotpresent.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-plotpresent.obj `if test -f 'plotpresent.c'; then $(CYGPATH_W) 'plotpresent.c'; else $(CYGPATH_W) '$(srcdir)/plotpresent.c'; fi` nip2-plotstatus.o: plotstatus.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-plotstatus.o -MD -MP -MF $(DEPDIR)/nip2-plotstatus.Tpo -c -o nip2-plotstatus.o `test -f 'plotstatus.c' || echo '$(srcdir)/'`plotstatus.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-plotstatus.Tpo $(DEPDIR)/nip2-plotstatus.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='plotstatus.c' object='nip2-plotstatus.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-plotstatus.o `test -f 'plotstatus.c' || echo '$(srcdir)/'`plotstatus.c nip2-plotstatus.obj: plotstatus.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-plotstatus.obj -MD -MP -MF $(DEPDIR)/nip2-plotstatus.Tpo -c -o nip2-plotstatus.obj `if test -f 'plotstatus.c'; then $(CYGPATH_W) 'plotstatus.c'; else $(CYGPATH_W) '$(srcdir)/plotstatus.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-plotstatus.Tpo $(DEPDIR)/nip2-plotstatus.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='plotstatus.c' object='nip2-plotstatus.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-plotstatus.obj `if test -f 'plotstatus.c'; then $(CYGPATH_W) 'plotstatus.c'; else $(CYGPATH_W) '$(srcdir)/plotstatus.c'; fi` nip2-floatwindow.o: floatwindow.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-floatwindow.o -MD -MP -MF $(DEPDIR)/nip2-floatwindow.Tpo -c -o nip2-floatwindow.o `test -f 'floatwindow.c' || echo '$(srcdir)/'`floatwindow.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-floatwindow.Tpo $(DEPDIR)/nip2-floatwindow.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='floatwindow.c' object='nip2-floatwindow.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-floatwindow.o `test -f 'floatwindow.c' || echo '$(srcdir)/'`floatwindow.c nip2-floatwindow.obj: floatwindow.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-floatwindow.obj -MD -MP -MF $(DEPDIR)/nip2-floatwindow.Tpo -c -o nip2-floatwindow.obj `if test -f 'floatwindow.c'; then $(CYGPATH_W) 'floatwindow.c'; else $(CYGPATH_W) '$(srcdir)/floatwindow.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-floatwindow.Tpo $(DEPDIR)/nip2-floatwindow.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='floatwindow.c' object='nip2-floatwindow.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-floatwindow.obj `if test -f 'floatwindow.c'; then $(CYGPATH_W) 'floatwindow.c'; else $(CYGPATH_W) '$(srcdir)/floatwindow.c'; fi` nip2-vobject.o: vobject.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-vobject.o -MD -MP -MF $(DEPDIR)/nip2-vobject.Tpo -c -o nip2-vobject.o `test -f 'vobject.c' || echo '$(srcdir)/'`vobject.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-vobject.Tpo $(DEPDIR)/nip2-vobject.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='vobject.c' object='nip2-vobject.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-vobject.o `test -f 'vobject.c' || echo '$(srcdir)/'`vobject.c nip2-vobject.obj: vobject.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-vobject.obj -MD -MP -MF $(DEPDIR)/nip2-vobject.Tpo -c -o nip2-vobject.obj `if test -f 'vobject.c'; then $(CYGPATH_W) 'vobject.c'; else $(CYGPATH_W) '$(srcdir)/vobject.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-vobject.Tpo $(DEPDIR)/nip2-vobject.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='vobject.c' object='nip2-vobject.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-vobject.obj `if test -f 'vobject.c'; then $(CYGPATH_W) 'vobject.c'; else $(CYGPATH_W) '$(srcdir)/vobject.c'; fi` nip2-action.o: action.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-action.o -MD -MP -MF $(DEPDIR)/nip2-action.Tpo -c -o nip2-action.o `test -f 'action.c' || echo '$(srcdir)/'`action.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-action.Tpo $(DEPDIR)/nip2-action.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='action.c' object='nip2-action.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-action.o `test -f 'action.c' || echo '$(srcdir)/'`action.c nip2-action.obj: action.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-action.obj -MD -MP -MF $(DEPDIR)/nip2-action.Tpo -c -o nip2-action.obj `if test -f 'action.c'; then $(CYGPATH_W) 'action.c'; else $(CYGPATH_W) '$(srcdir)/action.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-action.Tpo $(DEPDIR)/nip2-action.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='action.c' object='nip2-action.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-action.obj `if test -f 'action.c'; then $(CYGPATH_W) 'action.c'; else $(CYGPATH_W) '$(srcdir)/action.c'; fi` nip2-boxes.o: boxes.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-boxes.o -MD -MP -MF $(DEPDIR)/nip2-boxes.Tpo -c -o nip2-boxes.o `test -f 'boxes.c' || echo '$(srcdir)/'`boxes.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-boxes.Tpo $(DEPDIR)/nip2-boxes.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='boxes.c' object='nip2-boxes.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-boxes.o `test -f 'boxes.c' || echo '$(srcdir)/'`boxes.c nip2-boxes.obj: boxes.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-boxes.obj -MD -MP -MF $(DEPDIR)/nip2-boxes.Tpo -c -o nip2-boxes.obj `if test -f 'boxes.c'; then $(CYGPATH_W) 'boxes.c'; else $(CYGPATH_W) '$(srcdir)/boxes.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-boxes.Tpo $(DEPDIR)/nip2-boxes.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='boxes.c' object='nip2-boxes.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-boxes.obj `if test -f 'boxes.c'; then $(CYGPATH_W) 'boxes.c'; else $(CYGPATH_W) '$(srcdir)/boxes.c'; fi` nip2-popupbutton.o: popupbutton.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-popupbutton.o -MD -MP -MF $(DEPDIR)/nip2-popupbutton.Tpo -c -o nip2-popupbutton.o `test -f 'popupbutton.c' || echo '$(srcdir)/'`popupbutton.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-popupbutton.Tpo $(DEPDIR)/nip2-popupbutton.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='popupbutton.c' object='nip2-popupbutton.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-popupbutton.o `test -f 'popupbutton.c' || echo '$(srcdir)/'`popupbutton.c nip2-popupbutton.obj: popupbutton.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-popupbutton.obj -MD -MP -MF $(DEPDIR)/nip2-popupbutton.Tpo -c -o nip2-popupbutton.obj `if test -f 'popupbutton.c'; then $(CYGPATH_W) 'popupbutton.c'; else $(CYGPATH_W) '$(srcdir)/popupbutton.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-popupbutton.Tpo $(DEPDIR)/nip2-popupbutton.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='popupbutton.c' object='nip2-popupbutton.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-popupbutton.obj `if test -f 'popupbutton.c'; then $(CYGPATH_W) 'popupbutton.c'; else $(CYGPATH_W) '$(srcdir)/popupbutton.c'; fi` nip2-imageheader.o: imageheader.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-imageheader.o -MD -MP -MF $(DEPDIR)/nip2-imageheader.Tpo -c -o nip2-imageheader.o `test -f 'imageheader.c' || echo '$(srcdir)/'`imageheader.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-imageheader.Tpo $(DEPDIR)/nip2-imageheader.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='imageheader.c' object='nip2-imageheader.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-imageheader.o `test -f 'imageheader.c' || echo '$(srcdir)/'`imageheader.c nip2-imageheader.obj: imageheader.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-imageheader.obj -MD -MP -MF $(DEPDIR)/nip2-imageheader.Tpo -c -o nip2-imageheader.obj `if test -f 'imageheader.c'; then $(CYGPATH_W) 'imageheader.c'; else $(CYGPATH_W) '$(srcdir)/imageheader.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-imageheader.Tpo $(DEPDIR)/nip2-imageheader.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='imageheader.c' object='nip2-imageheader.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-imageheader.obj `if test -f 'imageheader.c'; then $(CYGPATH_W) 'imageheader.c'; else $(CYGPATH_W) '$(srcdir)/imageheader.c'; fi` nip2-preview.o: preview.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-preview.o -MD -MP -MF $(DEPDIR)/nip2-preview.Tpo -c -o nip2-preview.o `test -f 'preview.c' || echo '$(srcdir)/'`preview.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-preview.Tpo $(DEPDIR)/nip2-preview.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='preview.c' object='nip2-preview.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-preview.o `test -f 'preview.c' || echo '$(srcdir)/'`preview.c nip2-preview.obj: preview.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-preview.obj -MD -MP -MF $(DEPDIR)/nip2-preview.Tpo -c -o nip2-preview.obj `if test -f 'preview.c'; then $(CYGPATH_W) 'preview.c'; else $(CYGPATH_W) '$(srcdir)/preview.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-preview.Tpo $(DEPDIR)/nip2-preview.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='preview.c' object='nip2-preview.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-preview.obj `if test -f 'preview.c'; then $(CYGPATH_W) 'preview.c'; else $(CYGPATH_W) '$(srcdir)/preview.c'; fi` nip2-builtin.o: builtin.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-builtin.o -MD -MP -MF $(DEPDIR)/nip2-builtin.Tpo -c -o nip2-builtin.o `test -f 'builtin.c' || echo '$(srcdir)/'`builtin.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-builtin.Tpo $(DEPDIR)/nip2-builtin.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='builtin.c' object='nip2-builtin.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-builtin.o `test -f 'builtin.c' || echo '$(srcdir)/'`builtin.c nip2-builtin.obj: builtin.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-builtin.obj -MD -MP -MF $(DEPDIR)/nip2-builtin.Tpo -c -o nip2-builtin.obj `if test -f 'builtin.c'; then $(CYGPATH_W) 'builtin.c'; else $(CYGPATH_W) '$(srcdir)/builtin.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-builtin.Tpo $(DEPDIR)/nip2-builtin.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='builtin.c' object='nip2-builtin.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-builtin.obj `if test -f 'builtin.c'; then $(CYGPATH_W) 'builtin.c'; else $(CYGPATH_W) '$(srcdir)/builtin.c'; fi` nip2-icontainer.o: icontainer.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-icontainer.o -MD -MP -MF $(DEPDIR)/nip2-icontainer.Tpo -c -o nip2-icontainer.o `test -f 'icontainer.c' || echo '$(srcdir)/'`icontainer.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-icontainer.Tpo $(DEPDIR)/nip2-icontainer.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='icontainer.c' object='nip2-icontainer.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-icontainer.o `test -f 'icontainer.c' || echo '$(srcdir)/'`icontainer.c nip2-icontainer.obj: icontainer.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-icontainer.obj -MD -MP -MF $(DEPDIR)/nip2-icontainer.Tpo -c -o nip2-icontainer.obj `if test -f 'icontainer.c'; then $(CYGPATH_W) 'icontainer.c'; else $(CYGPATH_W) '$(srcdir)/icontainer.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-icontainer.Tpo $(DEPDIR)/nip2-icontainer.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='icontainer.c' object='nip2-icontainer.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-icontainer.obj `if test -f 'icontainer.c'; then $(CYGPATH_W) 'icontainer.c'; else $(CYGPATH_W) '$(srcdir)/icontainer.c'; fi` nip2-iobject.o: iobject.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-iobject.o -MD -MP -MF $(DEPDIR)/nip2-iobject.Tpo -c -o nip2-iobject.o `test -f 'iobject.c' || echo '$(srcdir)/'`iobject.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-iobject.Tpo $(DEPDIR)/nip2-iobject.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='iobject.c' object='nip2-iobject.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-iobject.o `test -f 'iobject.c' || echo '$(srcdir)/'`iobject.c nip2-iobject.obj: iobject.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-iobject.obj -MD -MP -MF $(DEPDIR)/nip2-iobject.Tpo -c -o nip2-iobject.obj `if test -f 'iobject.c'; then $(CYGPATH_W) 'iobject.c'; else $(CYGPATH_W) '$(srcdir)/iobject.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-iobject.Tpo $(DEPDIR)/nip2-iobject.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='iobject.c' object='nip2-iobject.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-iobject.obj `if test -f 'iobject.c'; then $(CYGPATH_W) 'iobject.c'; else $(CYGPATH_W) '$(srcdir)/iobject.c'; fi` nip2-class.o: class.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-class.o -MD -MP -MF $(DEPDIR)/nip2-class.Tpo -c -o nip2-class.o `test -f 'class.c' || echo '$(srcdir)/'`class.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-class.Tpo $(DEPDIR)/nip2-class.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='class.c' object='nip2-class.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-class.o `test -f 'class.c' || echo '$(srcdir)/'`class.c nip2-class.obj: class.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-class.obj -MD -MP -MF $(DEPDIR)/nip2-class.Tpo -c -o nip2-class.obj `if test -f 'class.c'; then $(CYGPATH_W) 'class.c'; else $(CYGPATH_W) '$(srcdir)/class.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-class.Tpo $(DEPDIR)/nip2-class.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='class.c' object='nip2-class.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-class.obj `if test -f 'class.c'; then $(CYGPATH_W) 'class.c'; else $(CYGPATH_W) '$(srcdir)/class.c'; fi` nip2-classmodel.o: classmodel.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-classmodel.o -MD -MP -MF $(DEPDIR)/nip2-classmodel.Tpo -c -o nip2-classmodel.o `test -f 'classmodel.c' || echo '$(srcdir)/'`classmodel.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-classmodel.Tpo $(DEPDIR)/nip2-classmodel.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='classmodel.c' object='nip2-classmodel.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-classmodel.o `test -f 'classmodel.c' || echo '$(srcdir)/'`classmodel.c nip2-classmodel.obj: classmodel.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-classmodel.obj -MD -MP -MF $(DEPDIR)/nip2-classmodel.Tpo -c -o nip2-classmodel.obj `if test -f 'classmodel.c'; then $(CYGPATH_W) 'classmodel.c'; else $(CYGPATH_W) '$(srcdir)/classmodel.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-classmodel.Tpo $(DEPDIR)/nip2-classmodel.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='classmodel.c' object='nip2-classmodel.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-classmodel.obj `if test -f 'classmodel.c'; then $(CYGPATH_W) 'classmodel.c'; else $(CYGPATH_W) '$(srcdir)/classmodel.c'; fi` nip2-colour.o: colour.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-colour.o -MD -MP -MF $(DEPDIR)/nip2-colour.Tpo -c -o nip2-colour.o `test -f 'colour.c' || echo '$(srcdir)/'`colour.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-colour.Tpo $(DEPDIR)/nip2-colour.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='colour.c' object='nip2-colour.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-colour.o `test -f 'colour.c' || echo '$(srcdir)/'`colour.c nip2-colour.obj: colour.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-colour.obj -MD -MP -MF $(DEPDIR)/nip2-colour.Tpo -c -o nip2-colour.obj `if test -f 'colour.c'; then $(CYGPATH_W) 'colour.c'; else $(CYGPATH_W) '$(srcdir)/colour.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-colour.Tpo $(DEPDIR)/nip2-colour.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='colour.c' object='nip2-colour.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-colour.obj `if test -f 'colour.c'; then $(CYGPATH_W) 'colour.c'; else $(CYGPATH_W) '$(srcdir)/colour.c'; fi` nip2-colourdisplay.o: colourdisplay.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-colourdisplay.o -MD -MP -MF $(DEPDIR)/nip2-colourdisplay.Tpo -c -o nip2-colourdisplay.o `test -f 'colourdisplay.c' || echo '$(srcdir)/'`colourdisplay.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-colourdisplay.Tpo $(DEPDIR)/nip2-colourdisplay.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='colourdisplay.c' object='nip2-colourdisplay.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-colourdisplay.o `test -f 'colourdisplay.c' || echo '$(srcdir)/'`colourdisplay.c nip2-colourdisplay.obj: colourdisplay.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-colourdisplay.obj -MD -MP -MF $(DEPDIR)/nip2-colourdisplay.Tpo -c -o nip2-colourdisplay.obj `if test -f 'colourdisplay.c'; then $(CYGPATH_W) 'colourdisplay.c'; else $(CYGPATH_W) '$(srcdir)/colourdisplay.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-colourdisplay.Tpo $(DEPDIR)/nip2-colourdisplay.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='colourdisplay.c' object='nip2-colourdisplay.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-colourdisplay.obj `if test -f 'colourdisplay.c'; then $(CYGPATH_W) 'colourdisplay.c'; else $(CYGPATH_W) '$(srcdir)/colourdisplay.c'; fi` nip2-colourview.o: colourview.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-colourview.o -MD -MP -MF $(DEPDIR)/nip2-colourview.Tpo -c -o nip2-colourview.o `test -f 'colourview.c' || echo '$(srcdir)/'`colourview.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-colourview.Tpo $(DEPDIR)/nip2-colourview.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='colourview.c' object='nip2-colourview.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-colourview.o `test -f 'colourview.c' || echo '$(srcdir)/'`colourview.c nip2-colourview.obj: colourview.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-colourview.obj -MD -MP -MF $(DEPDIR)/nip2-colourview.Tpo -c -o nip2-colourview.obj `if test -f 'colourview.c'; then $(CYGPATH_W) 'colourview.c'; else $(CYGPATH_W) '$(srcdir)/colourview.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-colourview.Tpo $(DEPDIR)/nip2-colourview.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='colourview.c' object='nip2-colourview.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-colourview.obj `if test -f 'colourview.c'; then $(CYGPATH_W) 'colourview.c'; else $(CYGPATH_W) '$(srcdir)/colourview.c'; fi` nip2-column.o: column.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-column.o -MD -MP -MF $(DEPDIR)/nip2-column.Tpo -c -o nip2-column.o `test -f 'column.c' || echo '$(srcdir)/'`column.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-column.Tpo $(DEPDIR)/nip2-column.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='column.c' object='nip2-column.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-column.o `test -f 'column.c' || echo '$(srcdir)/'`column.c nip2-column.obj: column.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-column.obj -MD -MP -MF $(DEPDIR)/nip2-column.Tpo -c -o nip2-column.obj `if test -f 'column.c'; then $(CYGPATH_W) 'column.c'; else $(CYGPATH_W) '$(srcdir)/column.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-column.Tpo $(DEPDIR)/nip2-column.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='column.c' object='nip2-column.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-column.obj `if test -f 'column.c'; then $(CYGPATH_W) 'column.c'; else $(CYGPATH_W) '$(srcdir)/column.c'; fi` nip2-columnview.o: columnview.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-columnview.o -MD -MP -MF $(DEPDIR)/nip2-columnview.Tpo -c -o nip2-columnview.o `test -f 'columnview.c' || echo '$(srcdir)/'`columnview.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-columnview.Tpo $(DEPDIR)/nip2-columnview.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='columnview.c' object='nip2-columnview.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-columnview.o `test -f 'columnview.c' || echo '$(srcdir)/'`columnview.c nip2-columnview.obj: columnview.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-columnview.obj -MD -MP -MF $(DEPDIR)/nip2-columnview.Tpo -c -o nip2-columnview.obj `if test -f 'columnview.c'; then $(CYGPATH_W) 'columnview.c'; else $(CYGPATH_W) '$(srcdir)/columnview.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-columnview.Tpo $(DEPDIR)/nip2-columnview.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='columnview.c' object='nip2-columnview.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-columnview.obj `if test -f 'columnview.c'; then $(CYGPATH_W) 'columnview.c'; else $(CYGPATH_W) '$(srcdir)/columnview.c'; fi` nip2-compile.o: compile.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-compile.o -MD -MP -MF $(DEPDIR)/nip2-compile.Tpo -c -o nip2-compile.o `test -f 'compile.c' || echo '$(srcdir)/'`compile.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-compile.Tpo $(DEPDIR)/nip2-compile.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='compile.c' object='nip2-compile.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-compile.o `test -f 'compile.c' || echo '$(srcdir)/'`compile.c nip2-compile.obj: compile.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-compile.obj -MD -MP -MF $(DEPDIR)/nip2-compile.Tpo -c -o nip2-compile.obj `if test -f 'compile.c'; then $(CYGPATH_W) 'compile.c'; else $(CYGPATH_W) '$(srcdir)/compile.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-compile.Tpo $(DEPDIR)/nip2-compile.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='compile.c' object='nip2-compile.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-compile.obj `if test -f 'compile.c'; then $(CYGPATH_W) 'compile.c'; else $(CYGPATH_W) '$(srcdir)/compile.c'; fi` nip2-conversion.o: conversion.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-conversion.o -MD -MP -MF $(DEPDIR)/nip2-conversion.Tpo -c -o nip2-conversion.o `test -f 'conversion.c' || echo '$(srcdir)/'`conversion.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-conversion.Tpo $(DEPDIR)/nip2-conversion.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='conversion.c' object='nip2-conversion.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-conversion.o `test -f 'conversion.c' || echo '$(srcdir)/'`conversion.c nip2-conversion.obj: conversion.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-conversion.obj -MD -MP -MF $(DEPDIR)/nip2-conversion.Tpo -c -o nip2-conversion.obj `if test -f 'conversion.c'; then $(CYGPATH_W) 'conversion.c'; else $(CYGPATH_W) '$(srcdir)/conversion.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-conversion.Tpo $(DEPDIR)/nip2-conversion.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='conversion.c' object='nip2-conversion.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-conversion.obj `if test -f 'conversion.c'; then $(CYGPATH_W) 'conversion.c'; else $(CYGPATH_W) '$(srcdir)/conversion.c'; fi` nip2-conversionview.o: conversionview.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-conversionview.o -MD -MP -MF $(DEPDIR)/nip2-conversionview.Tpo -c -o nip2-conversionview.o `test -f 'conversionview.c' || echo '$(srcdir)/'`conversionview.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-conversionview.Tpo $(DEPDIR)/nip2-conversionview.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='conversionview.c' object='nip2-conversionview.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-conversionview.o `test -f 'conversionview.c' || echo '$(srcdir)/'`conversionview.c nip2-conversionview.obj: conversionview.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-conversionview.obj -MD -MP -MF $(DEPDIR)/nip2-conversionview.Tpo -c -o nip2-conversionview.obj `if test -f 'conversionview.c'; then $(CYGPATH_W) 'conversionview.c'; else $(CYGPATH_W) '$(srcdir)/conversionview.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-conversionview.Tpo $(DEPDIR)/nip2-conversionview.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='conversionview.c' object='nip2-conversionview.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-conversionview.obj `if test -f 'conversionview.c'; then $(CYGPATH_W) 'conversionview.c'; else $(CYGPATH_W) '$(srcdir)/conversionview.c'; fi` nip2-doubleclick.o: doubleclick.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-doubleclick.o -MD -MP -MF $(DEPDIR)/nip2-doubleclick.Tpo -c -o nip2-doubleclick.o `test -f 'doubleclick.c' || echo '$(srcdir)/'`doubleclick.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-doubleclick.Tpo $(DEPDIR)/nip2-doubleclick.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='doubleclick.c' object='nip2-doubleclick.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-doubleclick.o `test -f 'doubleclick.c' || echo '$(srcdir)/'`doubleclick.c nip2-doubleclick.obj: doubleclick.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-doubleclick.obj -MD -MP -MF $(DEPDIR)/nip2-doubleclick.Tpo -c -o nip2-doubleclick.obj `if test -f 'doubleclick.c'; then $(CYGPATH_W) 'doubleclick.c'; else $(CYGPATH_W) '$(srcdir)/doubleclick.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-doubleclick.Tpo $(DEPDIR)/nip2-doubleclick.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='doubleclick.c' object='nip2-doubleclick.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-doubleclick.obj `if test -f 'doubleclick.c'; then $(CYGPATH_W) 'doubleclick.c'; else $(CYGPATH_W) '$(srcdir)/doubleclick.c'; fi` nip2-dump.o: dump.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-dump.o -MD -MP -MF $(DEPDIR)/nip2-dump.Tpo -c -o nip2-dump.o `test -f 'dump.c' || echo '$(srcdir)/'`dump.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-dump.Tpo $(DEPDIR)/nip2-dump.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dump.c' object='nip2-dump.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-dump.o `test -f 'dump.c' || echo '$(srcdir)/'`dump.c nip2-dump.obj: dump.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-dump.obj -MD -MP -MF $(DEPDIR)/nip2-dump.Tpo -c -o nip2-dump.obj `if test -f 'dump.c'; then $(CYGPATH_W) 'dump.c'; else $(CYGPATH_W) '$(srcdir)/dump.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-dump.Tpo $(DEPDIR)/nip2-dump.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dump.c' object='nip2-dump.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-dump.obj `if test -f 'dump.c'; then $(CYGPATH_W) 'dump.c'; else $(CYGPATH_W) '$(srcdir)/dump.c'; fi` nip2-expr.o: expr.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-expr.o -MD -MP -MF $(DEPDIR)/nip2-expr.Tpo -c -o nip2-expr.o `test -f 'expr.c' || echo '$(srcdir)/'`expr.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-expr.Tpo $(DEPDIR)/nip2-expr.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='expr.c' object='nip2-expr.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-expr.o `test -f 'expr.c' || echo '$(srcdir)/'`expr.c nip2-expr.obj: expr.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-expr.obj -MD -MP -MF $(DEPDIR)/nip2-expr.Tpo -c -o nip2-expr.obj `if test -f 'expr.c'; then $(CYGPATH_W) 'expr.c'; else $(CYGPATH_W) '$(srcdir)/expr.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-expr.Tpo $(DEPDIR)/nip2-expr.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='expr.c' object='nip2-expr.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-expr.obj `if test -f 'expr.c'; then $(CYGPATH_W) 'expr.c'; else $(CYGPATH_W) '$(srcdir)/expr.c'; fi` nip2-filemodel.o: filemodel.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-filemodel.o -MD -MP -MF $(DEPDIR)/nip2-filemodel.Tpo -c -o nip2-filemodel.o `test -f 'filemodel.c' || echo '$(srcdir)/'`filemodel.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-filemodel.Tpo $(DEPDIR)/nip2-filemodel.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='filemodel.c' object='nip2-filemodel.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-filemodel.o `test -f 'filemodel.c' || echo '$(srcdir)/'`filemodel.c nip2-filemodel.obj: filemodel.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-filemodel.obj -MD -MP -MF $(DEPDIR)/nip2-filemodel.Tpo -c -o nip2-filemodel.obj `if test -f 'filemodel.c'; then $(CYGPATH_W) 'filemodel.c'; else $(CYGPATH_W) '$(srcdir)/filemodel.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-filemodel.Tpo $(DEPDIR)/nip2-filemodel.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='filemodel.c' object='nip2-filemodel.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-filemodel.obj `if test -f 'filemodel.c'; then $(CYGPATH_W) 'filemodel.c'; else $(CYGPATH_W) '$(srcdir)/filemodel.c'; fi` nip2-pane.o: pane.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-pane.o -MD -MP -MF $(DEPDIR)/nip2-pane.Tpo -c -o nip2-pane.o `test -f 'pane.c' || echo '$(srcdir)/'`pane.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-pane.Tpo $(DEPDIR)/nip2-pane.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='pane.c' object='nip2-pane.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-pane.o `test -f 'pane.c' || echo '$(srcdir)/'`pane.c nip2-pane.obj: pane.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-pane.obj -MD -MP -MF $(DEPDIR)/nip2-pane.Tpo -c -o nip2-pane.obj `if test -f 'pane.c'; then $(CYGPATH_W) 'pane.c'; else $(CYGPATH_W) '$(srcdir)/pane.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-pane.Tpo $(DEPDIR)/nip2-pane.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='pane.c' object='nip2-pane.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-pane.obj `if test -f 'pane.c'; then $(CYGPATH_W) 'pane.c'; else $(CYGPATH_W) '$(srcdir)/pane.c'; fi` nip2-pathname.o: pathname.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-pathname.o -MD -MP -MF $(DEPDIR)/nip2-pathname.Tpo -c -o nip2-pathname.o `test -f 'pathname.c' || echo '$(srcdir)/'`pathname.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-pathname.Tpo $(DEPDIR)/nip2-pathname.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='pathname.c' object='nip2-pathname.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-pathname.o `test -f 'pathname.c' || echo '$(srcdir)/'`pathname.c nip2-pathname.obj: pathname.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-pathname.obj -MD -MP -MF $(DEPDIR)/nip2-pathname.Tpo -c -o nip2-pathname.obj `if test -f 'pathname.c'; then $(CYGPATH_W) 'pathname.c'; else $(CYGPATH_W) '$(srcdir)/pathname.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-pathname.Tpo $(DEPDIR)/nip2-pathname.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='pathname.c' object='nip2-pathname.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-pathname.obj `if test -f 'pathname.c'; then $(CYGPATH_W) 'pathname.c'; else $(CYGPATH_W) '$(srcdir)/pathname.c'; fi` nip2-fontname.o: fontname.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-fontname.o -MD -MP -MF $(DEPDIR)/nip2-fontname.Tpo -c -o nip2-fontname.o `test -f 'fontname.c' || echo '$(srcdir)/'`fontname.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-fontname.Tpo $(DEPDIR)/nip2-fontname.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fontname.c' object='nip2-fontname.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-fontname.o `test -f 'fontname.c' || echo '$(srcdir)/'`fontname.c nip2-fontname.obj: fontname.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-fontname.obj -MD -MP -MF $(DEPDIR)/nip2-fontname.Tpo -c -o nip2-fontname.obj `if test -f 'fontname.c'; then $(CYGPATH_W) 'fontname.c'; else $(CYGPATH_W) '$(srcdir)/fontname.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-fontname.Tpo $(DEPDIR)/nip2-fontname.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fontname.c' object='nip2-fontname.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-fontname.obj `if test -f 'fontname.c'; then $(CYGPATH_W) 'fontname.c'; else $(CYGPATH_W) '$(srcdir)/fontname.c'; fi` nip2-group.o: group.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-group.o -MD -MP -MF $(DEPDIR)/nip2-group.Tpo -c -o nip2-group.o `test -f 'group.c' || echo '$(srcdir)/'`group.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-group.Tpo $(DEPDIR)/nip2-group.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='group.c' object='nip2-group.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-group.o `test -f 'group.c' || echo '$(srcdir)/'`group.c nip2-group.obj: group.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-group.obj -MD -MP -MF $(DEPDIR)/nip2-group.Tpo -c -o nip2-group.obj `if test -f 'group.c'; then $(CYGPATH_W) 'group.c'; else $(CYGPATH_W) '$(srcdir)/group.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-group.Tpo $(DEPDIR)/nip2-group.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='group.c' object='nip2-group.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-group.obj `if test -f 'group.c'; then $(CYGPATH_W) 'group.c'; else $(CYGPATH_W) '$(srcdir)/group.c'; fi` nip2-pathnameview.o: pathnameview.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-pathnameview.o -MD -MP -MF $(DEPDIR)/nip2-pathnameview.Tpo -c -o nip2-pathnameview.o `test -f 'pathnameview.c' || echo '$(srcdir)/'`pathnameview.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-pathnameview.Tpo $(DEPDIR)/nip2-pathnameview.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='pathnameview.c' object='nip2-pathnameview.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-pathnameview.o `test -f 'pathnameview.c' || echo '$(srcdir)/'`pathnameview.c nip2-pathnameview.obj: pathnameview.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-pathnameview.obj -MD -MP -MF $(DEPDIR)/nip2-pathnameview.Tpo -c -o nip2-pathnameview.obj `if test -f 'pathnameview.c'; then $(CYGPATH_W) 'pathnameview.c'; else $(CYGPATH_W) '$(srcdir)/pathnameview.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-pathnameview.Tpo $(DEPDIR)/nip2-pathnameview.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='pathnameview.c' object='nip2-pathnameview.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-pathnameview.obj `if test -f 'pathnameview.c'; then $(CYGPATH_W) 'pathnameview.c'; else $(CYGPATH_W) '$(srcdir)/pathnameview.c'; fi` nip2-fontnameview.o: fontnameview.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-fontnameview.o -MD -MP -MF $(DEPDIR)/nip2-fontnameview.Tpo -c -o nip2-fontnameview.o `test -f 'fontnameview.c' || echo '$(srcdir)/'`fontnameview.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-fontnameview.Tpo $(DEPDIR)/nip2-fontnameview.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fontnameview.c' object='nip2-fontnameview.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-fontnameview.o `test -f 'fontnameview.c' || echo '$(srcdir)/'`fontnameview.c nip2-fontnameview.obj: fontnameview.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-fontnameview.obj -MD -MP -MF $(DEPDIR)/nip2-fontnameview.Tpo -c -o nip2-fontnameview.obj `if test -f 'fontnameview.c'; then $(CYGPATH_W) 'fontnameview.c'; else $(CYGPATH_W) '$(srcdir)/fontnameview.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-fontnameview.Tpo $(DEPDIR)/nip2-fontnameview.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fontnameview.c' object='nip2-fontnameview.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-fontnameview.obj `if test -f 'fontnameview.c'; then $(CYGPATH_W) 'fontnameview.c'; else $(CYGPATH_W) '$(srcdir)/fontnameview.c'; fi` nip2-filesel.o: filesel.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-filesel.o -MD -MP -MF $(DEPDIR)/nip2-filesel.Tpo -c -o nip2-filesel.o `test -f 'filesel.c' || echo '$(srcdir)/'`filesel.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-filesel.Tpo $(DEPDIR)/nip2-filesel.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='filesel.c' object='nip2-filesel.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-filesel.o `test -f 'filesel.c' || echo '$(srcdir)/'`filesel.c nip2-filesel.obj: filesel.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-filesel.obj -MD -MP -MF $(DEPDIR)/nip2-filesel.Tpo -c -o nip2-filesel.obj `if test -f 'filesel.c'; then $(CYGPATH_W) 'filesel.c'; else $(CYGPATH_W) '$(srcdir)/filesel.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-filesel.Tpo $(DEPDIR)/nip2-filesel.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='filesel.c' object='nip2-filesel.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-filesel.obj `if test -f 'filesel.c'; then $(CYGPATH_W) 'filesel.c'; else $(CYGPATH_W) '$(srcdir)/filesel.c'; fi` nip2-graphwindow.o: graphwindow.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-graphwindow.o -MD -MP -MF $(DEPDIR)/nip2-graphwindow.Tpo -c -o nip2-graphwindow.o `test -f 'graphwindow.c' || echo '$(srcdir)/'`graphwindow.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-graphwindow.Tpo $(DEPDIR)/nip2-graphwindow.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='graphwindow.c' object='nip2-graphwindow.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-graphwindow.o `test -f 'graphwindow.c' || echo '$(srcdir)/'`graphwindow.c nip2-graphwindow.obj: graphwindow.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-graphwindow.obj -MD -MP -MF $(DEPDIR)/nip2-graphwindow.Tpo -c -o nip2-graphwindow.obj `if test -f 'graphwindow.c'; then $(CYGPATH_W) 'graphwindow.c'; else $(CYGPATH_W) '$(srcdir)/graphwindow.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-graphwindow.Tpo $(DEPDIR)/nip2-graphwindow.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='graphwindow.c' object='nip2-graphwindow.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-graphwindow.obj `if test -f 'graphwindow.c'; then $(CYGPATH_W) 'graphwindow.c'; else $(CYGPATH_W) '$(srcdir)/graphwindow.c'; fi` nip2-graphicview.o: graphicview.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-graphicview.o -MD -MP -MF $(DEPDIR)/nip2-graphicview.Tpo -c -o nip2-graphicview.o `test -f 'graphicview.c' || echo '$(srcdir)/'`graphicview.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-graphicview.Tpo $(DEPDIR)/nip2-graphicview.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='graphicview.c' object='nip2-graphicview.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-graphicview.o `test -f 'graphicview.c' || echo '$(srcdir)/'`graphicview.c nip2-graphicview.obj: graphicview.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-graphicview.obj -MD -MP -MF $(DEPDIR)/nip2-graphicview.Tpo -c -o nip2-graphicview.obj `if test -f 'graphicview.c'; then $(CYGPATH_W) 'graphicview.c'; else $(CYGPATH_W) '$(srcdir)/graphicview.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-graphicview.Tpo $(DEPDIR)/nip2-graphicview.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='graphicview.c' object='nip2-graphicview.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-graphicview.obj `if test -f 'graphicview.c'; then $(CYGPATH_W) 'graphicview.c'; else $(CYGPATH_W) '$(srcdir)/graphicview.c'; fi` nip2-gtkutil.o: gtkutil.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-gtkutil.o -MD -MP -MF $(DEPDIR)/nip2-gtkutil.Tpo -c -o nip2-gtkutil.o `test -f 'gtkutil.c' || echo '$(srcdir)/'`gtkutil.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-gtkutil.Tpo $(DEPDIR)/nip2-gtkutil.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gtkutil.c' object='nip2-gtkutil.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-gtkutil.o `test -f 'gtkutil.c' || echo '$(srcdir)/'`gtkutil.c nip2-gtkutil.obj: gtkutil.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-gtkutil.obj -MD -MP -MF $(DEPDIR)/nip2-gtkutil.Tpo -c -o nip2-gtkutil.obj `if test -f 'gtkutil.c'; then $(CYGPATH_W) 'gtkutil.c'; else $(CYGPATH_W) '$(srcdir)/gtkutil.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-gtkutil.Tpo $(DEPDIR)/nip2-gtkutil.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gtkutil.c' object='nip2-gtkutil.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-gtkutil.obj `if test -f 'gtkutil.c'; then $(CYGPATH_W) 'gtkutil.c'; else $(CYGPATH_W) '$(srcdir)/gtkutil.c'; fi` nip2-heap.o: heap.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-heap.o -MD -MP -MF $(DEPDIR)/nip2-heap.Tpo -c -o nip2-heap.o `test -f 'heap.c' || echo '$(srcdir)/'`heap.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-heap.Tpo $(DEPDIR)/nip2-heap.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='heap.c' object='nip2-heap.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-heap.o `test -f 'heap.c' || echo '$(srcdir)/'`heap.c nip2-heap.obj: heap.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-heap.obj -MD -MP -MF $(DEPDIR)/nip2-heap.Tpo -c -o nip2-heap.obj `if test -f 'heap.c'; then $(CYGPATH_W) 'heap.c'; else $(CYGPATH_W) '$(srcdir)/heap.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-heap.Tpo $(DEPDIR)/nip2-heap.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='heap.c' object='nip2-heap.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-heap.obj `if test -f 'heap.c'; then $(CYGPATH_W) 'heap.c'; else $(CYGPATH_W) '$(srcdir)/heap.c'; fi` nip2-heapmodel.o: heapmodel.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-heapmodel.o -MD -MP -MF $(DEPDIR)/nip2-heapmodel.Tpo -c -o nip2-heapmodel.o `test -f 'heapmodel.c' || echo '$(srcdir)/'`heapmodel.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-heapmodel.Tpo $(DEPDIR)/nip2-heapmodel.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='heapmodel.c' object='nip2-heapmodel.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-heapmodel.o `test -f 'heapmodel.c' || echo '$(srcdir)/'`heapmodel.c nip2-heapmodel.obj: heapmodel.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-heapmodel.obj -MD -MP -MF $(DEPDIR)/nip2-heapmodel.Tpo -c -o nip2-heapmodel.obj `if test -f 'heapmodel.c'; then $(CYGPATH_W) 'heapmodel.c'; else $(CYGPATH_W) '$(srcdir)/heapmodel.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-heapmodel.Tpo $(DEPDIR)/nip2-heapmodel.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='heapmodel.c' object='nip2-heapmodel.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-heapmodel.obj `if test -f 'heapmodel.c'; then $(CYGPATH_W) 'heapmodel.c'; else $(CYGPATH_W) '$(srcdir)/heapmodel.c'; fi` nip2-nipmarshal.o: nipmarshal.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-nipmarshal.o -MD -MP -MF $(DEPDIR)/nip2-nipmarshal.Tpo -c -o nip2-nipmarshal.o `test -f 'nipmarshal.c' || echo '$(srcdir)/'`nipmarshal.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-nipmarshal.Tpo $(DEPDIR)/nip2-nipmarshal.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nipmarshal.c' object='nip2-nipmarshal.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-nipmarshal.o `test -f 'nipmarshal.c' || echo '$(srcdir)/'`nipmarshal.c nip2-nipmarshal.obj: nipmarshal.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-nipmarshal.obj -MD -MP -MF $(DEPDIR)/nip2-nipmarshal.Tpo -c -o nip2-nipmarshal.obj `if test -f 'nipmarshal.c'; then $(CYGPATH_W) 'nipmarshal.c'; else $(CYGPATH_W) '$(srcdir)/nipmarshal.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-nipmarshal.Tpo $(DEPDIR)/nip2-nipmarshal.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nipmarshal.c' object='nip2-nipmarshal.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-nipmarshal.obj `if test -f 'nipmarshal.c'; then $(CYGPATH_W) 'nipmarshal.c'; else $(CYGPATH_W) '$(srcdir)/nipmarshal.c'; fi` nip2-iarrow.o: iarrow.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-iarrow.o -MD -MP -MF $(DEPDIR)/nip2-iarrow.Tpo -c -o nip2-iarrow.o `test -f 'iarrow.c' || echo '$(srcdir)/'`iarrow.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-iarrow.Tpo $(DEPDIR)/nip2-iarrow.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='iarrow.c' object='nip2-iarrow.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-iarrow.o `test -f 'iarrow.c' || echo '$(srcdir)/'`iarrow.c nip2-iarrow.obj: iarrow.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-iarrow.obj -MD -MP -MF $(DEPDIR)/nip2-iarrow.Tpo -c -o nip2-iarrow.obj `if test -f 'iarrow.c'; then $(CYGPATH_W) 'iarrow.c'; else $(CYGPATH_W) '$(srcdir)/iarrow.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-iarrow.Tpo $(DEPDIR)/nip2-iarrow.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='iarrow.c' object='nip2-iarrow.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-iarrow.obj `if test -f 'iarrow.c'; then $(CYGPATH_W) 'iarrow.c'; else $(CYGPATH_W) '$(srcdir)/iarrow.c'; fi` nip2-value.o: value.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-value.o -MD -MP -MF $(DEPDIR)/nip2-value.Tpo -c -o nip2-value.o `test -f 'value.c' || echo '$(srcdir)/'`value.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-value.Tpo $(DEPDIR)/nip2-value.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='value.c' object='nip2-value.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-value.o `test -f 'value.c' || echo '$(srcdir)/'`value.c nip2-value.obj: value.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-value.obj -MD -MP -MF $(DEPDIR)/nip2-value.Tpo -c -o nip2-value.obj `if test -f 'value.c'; then $(CYGPATH_W) 'value.c'; else $(CYGPATH_W) '$(srcdir)/value.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-value.Tpo $(DEPDIR)/nip2-value.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='value.c' object='nip2-value.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-value.obj `if test -f 'value.c'; then $(CYGPATH_W) 'value.c'; else $(CYGPATH_W) '$(srcdir)/value.c'; fi` nip2-valueview.o: valueview.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-valueview.o -MD -MP -MF $(DEPDIR)/nip2-valueview.Tpo -c -o nip2-valueview.o `test -f 'valueview.c' || echo '$(srcdir)/'`valueview.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-valueview.Tpo $(DEPDIR)/nip2-valueview.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='valueview.c' object='nip2-valueview.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-valueview.o `test -f 'valueview.c' || echo '$(srcdir)/'`valueview.c nip2-valueview.obj: valueview.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-valueview.obj -MD -MP -MF $(DEPDIR)/nip2-valueview.Tpo -c -o nip2-valueview.obj `if test -f 'valueview.c'; then $(CYGPATH_W) 'valueview.c'; else $(CYGPATH_W) '$(srcdir)/valueview.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-valueview.Tpo $(DEPDIR)/nip2-valueview.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='valueview.c' object='nip2-valueview.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-valueview.obj `if test -f 'valueview.c'; then $(CYGPATH_W) 'valueview.c'; else $(CYGPATH_W) '$(srcdir)/valueview.c'; fi` nip2-idialog.o: idialog.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-idialog.o -MD -MP -MF $(DEPDIR)/nip2-idialog.Tpo -c -o nip2-idialog.o `test -f 'idialog.c' || echo '$(srcdir)/'`idialog.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-idialog.Tpo $(DEPDIR)/nip2-idialog.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='idialog.c' object='nip2-idialog.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-idialog.o `test -f 'idialog.c' || echo '$(srcdir)/'`idialog.c nip2-idialog.obj: idialog.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-idialog.obj -MD -MP -MF $(DEPDIR)/nip2-idialog.Tpo -c -o nip2-idialog.obj `if test -f 'idialog.c'; then $(CYGPATH_W) 'idialog.c'; else $(CYGPATH_W) '$(srcdir)/idialog.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-idialog.Tpo $(DEPDIR)/nip2-idialog.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='idialog.c' object='nip2-idialog.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-idialog.obj `if test -f 'idialog.c'; then $(CYGPATH_W) 'idialog.c'; else $(CYGPATH_W) '$(srcdir)/idialog.c'; fi` nip2-iimage.o: iimage.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-iimage.o -MD -MP -MF $(DEPDIR)/nip2-iimage.Tpo -c -o nip2-iimage.o `test -f 'iimage.c' || echo '$(srcdir)/'`iimage.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-iimage.Tpo $(DEPDIR)/nip2-iimage.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='iimage.c' object='nip2-iimage.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-iimage.o `test -f 'iimage.c' || echo '$(srcdir)/'`iimage.c nip2-iimage.obj: iimage.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-iimage.obj -MD -MP -MF $(DEPDIR)/nip2-iimage.Tpo -c -o nip2-iimage.obj `if test -f 'iimage.c'; then $(CYGPATH_W) 'iimage.c'; else $(CYGPATH_W) '$(srcdir)/iimage.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-iimage.Tpo $(DEPDIR)/nip2-iimage.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='iimage.c' object='nip2-iimage.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-iimage.obj `if test -f 'iimage.c'; then $(CYGPATH_W) 'iimage.c'; else $(CYGPATH_W) '$(srcdir)/iimage.c'; fi` nip2-iimageview.o: iimageview.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-iimageview.o -MD -MP -MF $(DEPDIR)/nip2-iimageview.Tpo -c -o nip2-iimageview.o `test -f 'iimageview.c' || echo '$(srcdir)/'`iimageview.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-iimageview.Tpo $(DEPDIR)/nip2-iimageview.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='iimageview.c' object='nip2-iimageview.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-iimageview.o `test -f 'iimageview.c' || echo '$(srcdir)/'`iimageview.c nip2-iimageview.obj: iimageview.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-iimageview.obj -MD -MP -MF $(DEPDIR)/nip2-iimageview.Tpo -c -o nip2-iimageview.obj `if test -f 'iimageview.c'; then $(CYGPATH_W) 'iimageview.c'; else $(CYGPATH_W) '$(srcdir)/iimageview.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-iimageview.Tpo $(DEPDIR)/nip2-iimageview.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='iimageview.c' object='nip2-iimageview.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-iimageview.obj `if test -f 'iimageview.c'; then $(CYGPATH_W) 'iimageview.c'; else $(CYGPATH_W) '$(srcdir)/iimageview.c'; fi` nip2-imagedisplay.o: imagedisplay.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-imagedisplay.o -MD -MP -MF $(DEPDIR)/nip2-imagedisplay.Tpo -c -o nip2-imagedisplay.o `test -f 'imagedisplay.c' || echo '$(srcdir)/'`imagedisplay.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-imagedisplay.Tpo $(DEPDIR)/nip2-imagedisplay.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='imagedisplay.c' object='nip2-imagedisplay.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-imagedisplay.o `test -f 'imagedisplay.c' || echo '$(srcdir)/'`imagedisplay.c nip2-imagedisplay.obj: imagedisplay.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-imagedisplay.obj -MD -MP -MF $(DEPDIR)/nip2-imagedisplay.Tpo -c -o nip2-imagedisplay.obj `if test -f 'imagedisplay.c'; then $(CYGPATH_W) 'imagedisplay.c'; else $(CYGPATH_W) '$(srcdir)/imagedisplay.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-imagedisplay.Tpo $(DEPDIR)/nip2-imagedisplay.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='imagedisplay.c' object='nip2-imagedisplay.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-imagedisplay.obj `if test -f 'imagedisplay.c'; then $(CYGPATH_W) 'imagedisplay.c'; else $(CYGPATH_W) '$(srcdir)/imagedisplay.c'; fi` nip2-log.o: log.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-log.o -MD -MP -MF $(DEPDIR)/nip2-log.Tpo -c -o nip2-log.o `test -f 'log.c' || echo '$(srcdir)/'`log.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-log.Tpo $(DEPDIR)/nip2-log.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='log.c' object='nip2-log.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-log.o `test -f 'log.c' || echo '$(srcdir)/'`log.c nip2-log.obj: log.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-log.obj -MD -MP -MF $(DEPDIR)/nip2-log.Tpo -c -o nip2-log.obj `if test -f 'log.c'; then $(CYGPATH_W) 'log.c'; else $(CYGPATH_W) '$(srcdir)/log.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-log.Tpo $(DEPDIR)/nip2-log.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='log.c' object='nip2-log.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-log.obj `if test -f 'log.c'; then $(CYGPATH_W) 'log.c'; else $(CYGPATH_W) '$(srcdir)/log.c'; fi` nip2-error.o: error.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-error.o -MD -MP -MF $(DEPDIR)/nip2-error.Tpo -c -o nip2-error.o `test -f 'error.c' || echo '$(srcdir)/'`error.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-error.Tpo $(DEPDIR)/nip2-error.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='error.c' object='nip2-error.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-error.o `test -f 'error.c' || echo '$(srcdir)/'`error.c nip2-error.obj: error.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-error.obj -MD -MP -MF $(DEPDIR)/nip2-error.Tpo -c -o nip2-error.obj `if test -f 'error.c'; then $(CYGPATH_W) 'error.c'; else $(CYGPATH_W) '$(srcdir)/error.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-error.Tpo $(DEPDIR)/nip2-error.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='error.c' object='nip2-error.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-error.obj `if test -f 'error.c'; then $(CYGPATH_W) 'error.c'; else $(CYGPATH_W) '$(srcdir)/error.c'; fi` nip2-managed.o: managed.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-managed.o -MD -MP -MF $(DEPDIR)/nip2-managed.Tpo -c -o nip2-managed.o `test -f 'managed.c' || echo '$(srcdir)/'`managed.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-managed.Tpo $(DEPDIR)/nip2-managed.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='managed.c' object='nip2-managed.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-managed.o `test -f 'managed.c' || echo '$(srcdir)/'`managed.c nip2-managed.obj: managed.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-managed.obj -MD -MP -MF $(DEPDIR)/nip2-managed.Tpo -c -o nip2-managed.obj `if test -f 'managed.c'; then $(CYGPATH_W) 'managed.c'; else $(CYGPATH_W) '$(srcdir)/managed.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-managed.Tpo $(DEPDIR)/nip2-managed.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='managed.c' object='nip2-managed.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-managed.obj `if test -f 'managed.c'; then $(CYGPATH_W) 'managed.c'; else $(CYGPATH_W) '$(srcdir)/managed.c'; fi` nip2-managedfile.o: managedfile.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-managedfile.o -MD -MP -MF $(DEPDIR)/nip2-managedfile.Tpo -c -o nip2-managedfile.o `test -f 'managedfile.c' || echo '$(srcdir)/'`managedfile.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-managedfile.Tpo $(DEPDIR)/nip2-managedfile.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='managedfile.c' object='nip2-managedfile.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-managedfile.o `test -f 'managedfile.c' || echo '$(srcdir)/'`managedfile.c nip2-managedfile.obj: managedfile.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-managedfile.obj -MD -MP -MF $(DEPDIR)/nip2-managedfile.Tpo -c -o nip2-managedfile.obj `if test -f 'managedfile.c'; then $(CYGPATH_W) 'managedfile.c'; else $(CYGPATH_W) '$(srcdir)/managedfile.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-managedfile.Tpo $(DEPDIR)/nip2-managedfile.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='managedfile.c' object='nip2-managedfile.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-managedfile.obj `if test -f 'managedfile.c'; then $(CYGPATH_W) 'managedfile.c'; else $(CYGPATH_W) '$(srcdir)/managedfile.c'; fi` nip2-managedgvalue.o: managedgvalue.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-managedgvalue.o -MD -MP -MF $(DEPDIR)/nip2-managedgvalue.Tpo -c -o nip2-managedgvalue.o `test -f 'managedgvalue.c' || echo '$(srcdir)/'`managedgvalue.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-managedgvalue.Tpo $(DEPDIR)/nip2-managedgvalue.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='managedgvalue.c' object='nip2-managedgvalue.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-managedgvalue.o `test -f 'managedgvalue.c' || echo '$(srcdir)/'`managedgvalue.c nip2-managedgvalue.obj: managedgvalue.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-managedgvalue.obj -MD -MP -MF $(DEPDIR)/nip2-managedgvalue.Tpo -c -o nip2-managedgvalue.obj `if test -f 'managedgvalue.c'; then $(CYGPATH_W) 'managedgvalue.c'; else $(CYGPATH_W) '$(srcdir)/managedgvalue.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-managedgvalue.Tpo $(DEPDIR)/nip2-managedgvalue.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='managedgvalue.c' object='nip2-managedgvalue.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-managedgvalue.obj `if test -f 'managedgvalue.c'; then $(CYGPATH_W) 'managedgvalue.c'; else $(CYGPATH_W) '$(srcdir)/managedgvalue.c'; fi` nip2-managedgobject.o: managedgobject.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-managedgobject.o -MD -MP -MF $(DEPDIR)/nip2-managedgobject.Tpo -c -o nip2-managedgobject.o `test -f 'managedgobject.c' || echo '$(srcdir)/'`managedgobject.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-managedgobject.Tpo $(DEPDIR)/nip2-managedgobject.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='managedgobject.c' object='nip2-managedgobject.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-managedgobject.o `test -f 'managedgobject.c' || echo '$(srcdir)/'`managedgobject.c nip2-managedgobject.obj: managedgobject.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-managedgobject.obj -MD -MP -MF $(DEPDIR)/nip2-managedgobject.Tpo -c -o nip2-managedgobject.obj `if test -f 'managedgobject.c'; then $(CYGPATH_W) 'managedgobject.c'; else $(CYGPATH_W) '$(srcdir)/managedgobject.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-managedgobject.Tpo $(DEPDIR)/nip2-managedgobject.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='managedgobject.c' object='nip2-managedgobject.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-managedgobject.obj `if test -f 'managedgobject.c'; then $(CYGPATH_W) 'managedgobject.c'; else $(CYGPATH_W) '$(srcdir)/managedgobject.c'; fi` nip2-managedstring.o: managedstring.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-managedstring.o -MD -MP -MF $(DEPDIR)/nip2-managedstring.Tpo -c -o nip2-managedstring.o `test -f 'managedstring.c' || echo '$(srcdir)/'`managedstring.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-managedstring.Tpo $(DEPDIR)/nip2-managedstring.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='managedstring.c' object='nip2-managedstring.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-managedstring.o `test -f 'managedstring.c' || echo '$(srcdir)/'`managedstring.c nip2-managedstring.obj: managedstring.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-managedstring.obj -MD -MP -MF $(DEPDIR)/nip2-managedstring.Tpo -c -o nip2-managedstring.obj `if test -f 'managedstring.c'; then $(CYGPATH_W) 'managedstring.c'; else $(CYGPATH_W) '$(srcdir)/managedstring.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-managedstring.Tpo $(DEPDIR)/nip2-managedstring.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='managedstring.c' object='nip2-managedstring.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-managedstring.obj `if test -f 'managedstring.c'; then $(CYGPATH_W) 'managedstring.c'; else $(CYGPATH_W) '$(srcdir)/managedstring.c'; fi` nip2-imageinfo.o: imageinfo.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-imageinfo.o -MD -MP -MF $(DEPDIR)/nip2-imageinfo.Tpo -c -o nip2-imageinfo.o `test -f 'imageinfo.c' || echo '$(srcdir)/'`imageinfo.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-imageinfo.Tpo $(DEPDIR)/nip2-imageinfo.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='imageinfo.c' object='nip2-imageinfo.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-imageinfo.o `test -f 'imageinfo.c' || echo '$(srcdir)/'`imageinfo.c nip2-imageinfo.obj: imageinfo.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-imageinfo.obj -MD -MP -MF $(DEPDIR)/nip2-imageinfo.Tpo -c -o nip2-imageinfo.obj `if test -f 'imageinfo.c'; then $(CYGPATH_W) 'imageinfo.c'; else $(CYGPATH_W) '$(srcdir)/imageinfo.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-imageinfo.Tpo $(DEPDIR)/nip2-imageinfo.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='imageinfo.c' object='nip2-imageinfo.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-imageinfo.obj `if test -f 'imageinfo.c'; then $(CYGPATH_W) 'imageinfo.c'; else $(CYGPATH_W) '$(srcdir)/imageinfo.c'; fi` nip2-imagemodel.o: imagemodel.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-imagemodel.o -MD -MP -MF $(DEPDIR)/nip2-imagemodel.Tpo -c -o nip2-imagemodel.o `test -f 'imagemodel.c' || echo '$(srcdir)/'`imagemodel.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-imagemodel.Tpo $(DEPDIR)/nip2-imagemodel.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='imagemodel.c' object='nip2-imagemodel.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-imagemodel.o `test -f 'imagemodel.c' || echo '$(srcdir)/'`imagemodel.c nip2-imagemodel.obj: imagemodel.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-imagemodel.obj -MD -MP -MF $(DEPDIR)/nip2-imagemodel.Tpo -c -o nip2-imagemodel.obj `if test -f 'imagemodel.c'; then $(CYGPATH_W) 'imagemodel.c'; else $(CYGPATH_W) '$(srcdir)/imagemodel.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-imagemodel.Tpo $(DEPDIR)/nip2-imagemodel.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='imagemodel.c' object='nip2-imagemodel.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-imagemodel.obj `if test -f 'imagemodel.c'; then $(CYGPATH_W) 'imagemodel.c'; else $(CYGPATH_W) '$(srcdir)/imagemodel.c'; fi` nip2-imagepresent.o: imagepresent.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-imagepresent.o -MD -MP -MF $(DEPDIR)/nip2-imagepresent.Tpo -c -o nip2-imagepresent.o `test -f 'imagepresent.c' || echo '$(srcdir)/'`imagepresent.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-imagepresent.Tpo $(DEPDIR)/nip2-imagepresent.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='imagepresent.c' object='nip2-imagepresent.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-imagepresent.o `test -f 'imagepresent.c' || echo '$(srcdir)/'`imagepresent.c nip2-imagepresent.obj: imagepresent.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-imagepresent.obj -MD -MP -MF $(DEPDIR)/nip2-imagepresent.Tpo -c -o nip2-imagepresent.obj `if test -f 'imagepresent.c'; then $(CYGPATH_W) 'imagepresent.c'; else $(CYGPATH_W) '$(srcdir)/imagepresent.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-imagepresent.Tpo $(DEPDIR)/nip2-imagepresent.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='imagepresent.c' object='nip2-imagepresent.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-imagepresent.obj `if test -f 'imagepresent.c'; then $(CYGPATH_W) 'imagepresent.c'; else $(CYGPATH_W) '$(srcdir)/imagepresent.c'; fi` nip2-imageview.o: imageview.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-imageview.o -MD -MP -MF $(DEPDIR)/nip2-imageview.Tpo -c -o nip2-imageview.o `test -f 'imageview.c' || echo '$(srcdir)/'`imageview.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-imageview.Tpo $(DEPDIR)/nip2-imageview.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='imageview.c' object='nip2-imageview.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-imageview.o `test -f 'imageview.c' || echo '$(srcdir)/'`imageview.c nip2-imageview.obj: imageview.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-imageview.obj -MD -MP -MF $(DEPDIR)/nip2-imageview.Tpo -c -o nip2-imageview.obj `if test -f 'imageview.c'; then $(CYGPATH_W) 'imageview.c'; else $(CYGPATH_W) '$(srcdir)/imageview.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-imageview.Tpo $(DEPDIR)/nip2-imageview.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='imageview.c' object='nip2-imageview.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-imageview.obj `if test -f 'imageview.c'; then $(CYGPATH_W) 'imageview.c'; else $(CYGPATH_W) '$(srcdir)/imageview.c'; fi` nip2-iregion.o: iregion.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-iregion.o -MD -MP -MF $(DEPDIR)/nip2-iregion.Tpo -c -o nip2-iregion.o `test -f 'iregion.c' || echo '$(srcdir)/'`iregion.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-iregion.Tpo $(DEPDIR)/nip2-iregion.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='iregion.c' object='nip2-iregion.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-iregion.o `test -f 'iregion.c' || echo '$(srcdir)/'`iregion.c nip2-iregion.obj: iregion.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-iregion.obj -MD -MP -MF $(DEPDIR)/nip2-iregion.Tpo -c -o nip2-iregion.obj `if test -f 'iregion.c'; then $(CYGPATH_W) 'iregion.c'; else $(CYGPATH_W) '$(srcdir)/iregion.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-iregion.Tpo $(DEPDIR)/nip2-iregion.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='iregion.c' object='nip2-iregion.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-iregion.obj `if test -f 'iregion.c'; then $(CYGPATH_W) 'iregion.c'; else $(CYGPATH_W) '$(srcdir)/iregion.c'; fi` nip2-iregiongroup.o: iregiongroup.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-iregiongroup.o -MD -MP -MF $(DEPDIR)/nip2-iregiongroup.Tpo -c -o nip2-iregiongroup.o `test -f 'iregiongroup.c' || echo '$(srcdir)/'`iregiongroup.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-iregiongroup.Tpo $(DEPDIR)/nip2-iregiongroup.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='iregiongroup.c' object='nip2-iregiongroup.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-iregiongroup.o `test -f 'iregiongroup.c' || echo '$(srcdir)/'`iregiongroup.c nip2-iregiongroup.obj: iregiongroup.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-iregiongroup.obj -MD -MP -MF $(DEPDIR)/nip2-iregiongroup.Tpo -c -o nip2-iregiongroup.obj `if test -f 'iregiongroup.c'; then $(CYGPATH_W) 'iregiongroup.c'; else $(CYGPATH_W) '$(srcdir)/iregiongroup.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-iregiongroup.Tpo $(DEPDIR)/nip2-iregiongroup.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='iregiongroup.c' object='nip2-iregiongroup.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-iregiongroup.obj `if test -f 'iregiongroup.c'; then $(CYGPATH_W) 'iregiongroup.c'; else $(CYGPATH_W) '$(srcdir)/iregiongroup.c'; fi` nip2-iregiongroupview.o: iregiongroupview.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-iregiongroupview.o -MD -MP -MF $(DEPDIR)/nip2-iregiongroupview.Tpo -c -o nip2-iregiongroupview.o `test -f 'iregiongroupview.c' || echo '$(srcdir)/'`iregiongroupview.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-iregiongroupview.Tpo $(DEPDIR)/nip2-iregiongroupview.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='iregiongroupview.c' object='nip2-iregiongroupview.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-iregiongroupview.o `test -f 'iregiongroupview.c' || echo '$(srcdir)/'`iregiongroupview.c nip2-iregiongroupview.obj: iregiongroupview.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-iregiongroupview.obj -MD -MP -MF $(DEPDIR)/nip2-iregiongroupview.Tpo -c -o nip2-iregiongroupview.obj `if test -f 'iregiongroupview.c'; then $(CYGPATH_W) 'iregiongroupview.c'; else $(CYGPATH_W) '$(srcdir)/iregiongroupview.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-iregiongroupview.Tpo $(DEPDIR)/nip2-iregiongroupview.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='iregiongroupview.c' object='nip2-iregiongroupview.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-iregiongroupview.obj `if test -f 'iregiongroupview.c'; then $(CYGPATH_W) 'iregiongroupview.c'; else $(CYGPATH_W) '$(srcdir)/iregiongroupview.c'; fi` nip2-iregionview.o: iregionview.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-iregionview.o -MD -MP -MF $(DEPDIR)/nip2-iregionview.Tpo -c -o nip2-iregionview.o `test -f 'iregionview.c' || echo '$(srcdir)/'`iregionview.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-iregionview.Tpo $(DEPDIR)/nip2-iregionview.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='iregionview.c' object='nip2-iregionview.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-iregionview.o `test -f 'iregionview.c' || echo '$(srcdir)/'`iregionview.c nip2-iregionview.obj: iregionview.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-iregionview.obj -MD -MP -MF $(DEPDIR)/nip2-iregionview.Tpo -c -o nip2-iregionview.obj `if test -f 'iregionview.c'; then $(CYGPATH_W) 'iregionview.c'; else $(CYGPATH_W) '$(srcdir)/iregionview.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-iregionview.Tpo $(DEPDIR)/nip2-iregionview.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='iregionview.c' object='nip2-iregionview.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-iregionview.obj `if test -f 'iregionview.c'; then $(CYGPATH_W) 'iregionview.c'; else $(CYGPATH_W) '$(srcdir)/iregionview.c'; fi` nip2-itext.o: itext.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-itext.o -MD -MP -MF $(DEPDIR)/nip2-itext.Tpo -c -o nip2-itext.o `test -f 'itext.c' || echo '$(srcdir)/'`itext.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-itext.Tpo $(DEPDIR)/nip2-itext.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='itext.c' object='nip2-itext.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-itext.o `test -f 'itext.c' || echo '$(srcdir)/'`itext.c nip2-itext.obj: itext.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-itext.obj -MD -MP -MF $(DEPDIR)/nip2-itext.Tpo -c -o nip2-itext.obj `if test -f 'itext.c'; then $(CYGPATH_W) 'itext.c'; else $(CYGPATH_W) '$(srcdir)/itext.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-itext.Tpo $(DEPDIR)/nip2-itext.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='itext.c' object='nip2-itext.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-itext.obj `if test -f 'itext.c'; then $(CYGPATH_W) 'itext.c'; else $(CYGPATH_W) '$(srcdir)/itext.c'; fi` nip2-itextview.o: itextview.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-itextview.o -MD -MP -MF $(DEPDIR)/nip2-itextview.Tpo -c -o nip2-itextview.o `test -f 'itextview.c' || echo '$(srcdir)/'`itextview.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-itextview.Tpo $(DEPDIR)/nip2-itextview.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='itextview.c' object='nip2-itextview.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-itextview.o `test -f 'itextview.c' || echo '$(srcdir)/'`itextview.c nip2-itextview.obj: itextview.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-itextview.obj -MD -MP -MF $(DEPDIR)/nip2-itextview.Tpo -c -o nip2-itextview.obj `if test -f 'itextview.c'; then $(CYGPATH_W) 'itextview.c'; else $(CYGPATH_W) '$(srcdir)/itextview.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-itextview.Tpo $(DEPDIR)/nip2-itextview.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='itextview.c' object='nip2-itextview.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-itextview.obj `if test -f 'itextview.c'; then $(CYGPATH_W) 'itextview.c'; else $(CYGPATH_W) '$(srcdir)/itextview.c'; fi` nip2-iwindow.o: iwindow.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-iwindow.o -MD -MP -MF $(DEPDIR)/nip2-iwindow.Tpo -c -o nip2-iwindow.o `test -f 'iwindow.c' || echo '$(srcdir)/'`iwindow.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-iwindow.Tpo $(DEPDIR)/nip2-iwindow.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='iwindow.c' object='nip2-iwindow.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-iwindow.o `test -f 'iwindow.c' || echo '$(srcdir)/'`iwindow.c nip2-iwindow.obj: iwindow.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-iwindow.obj -MD -MP -MF $(DEPDIR)/nip2-iwindow.Tpo -c -o nip2-iwindow.obj `if test -f 'iwindow.c'; then $(CYGPATH_W) 'iwindow.c'; else $(CYGPATH_W) '$(srcdir)/iwindow.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-iwindow.Tpo $(DEPDIR)/nip2-iwindow.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='iwindow.c' object='nip2-iwindow.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-iwindow.obj `if test -f 'iwindow.c'; then $(CYGPATH_W) 'iwindow.c'; else $(CYGPATH_W) '$(srcdir)/iwindow.c'; fi` nip2-parse.o: parse.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-parse.o -MD -MP -MF $(DEPDIR)/nip2-parse.Tpo -c -o nip2-parse.o `test -f 'parse.c' || echo '$(srcdir)/'`parse.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-parse.Tpo $(DEPDIR)/nip2-parse.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='parse.c' object='nip2-parse.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-parse.o `test -f 'parse.c' || echo '$(srcdir)/'`parse.c nip2-parse.obj: parse.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-parse.obj -MD -MP -MF $(DEPDIR)/nip2-parse.Tpo -c -o nip2-parse.obj `if test -f 'parse.c'; then $(CYGPATH_W) 'parse.c'; else $(CYGPATH_W) '$(srcdir)/parse.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-parse.Tpo $(DEPDIR)/nip2-parse.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='parse.c' object='nip2-parse.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-parse.obj `if test -f 'parse.c'; then $(CYGPATH_W) 'parse.c'; else $(CYGPATH_W) '$(srcdir)/parse.c'; fi` nip2-prefs.o: prefs.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-prefs.o -MD -MP -MF $(DEPDIR)/nip2-prefs.Tpo -c -o nip2-prefs.o `test -f 'prefs.c' || echo '$(srcdir)/'`prefs.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-prefs.Tpo $(DEPDIR)/nip2-prefs.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='prefs.c' object='nip2-prefs.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-prefs.o `test -f 'prefs.c' || echo '$(srcdir)/'`prefs.c nip2-prefs.obj: prefs.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-prefs.obj -MD -MP -MF $(DEPDIR)/nip2-prefs.Tpo -c -o nip2-prefs.obj `if test -f 'prefs.c'; then $(CYGPATH_W) 'prefs.c'; else $(CYGPATH_W) '$(srcdir)/prefs.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-prefs.Tpo $(DEPDIR)/nip2-prefs.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='prefs.c' object='nip2-prefs.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-prefs.obj `if test -f 'prefs.c'; then $(CYGPATH_W) 'prefs.c'; else $(CYGPATH_W) '$(srcdir)/prefs.c'; fi` nip2-prefworkspaceview.o: prefworkspaceview.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-prefworkspaceview.o -MD -MP -MF $(DEPDIR)/nip2-prefworkspaceview.Tpo -c -o nip2-prefworkspaceview.o `test -f 'prefworkspaceview.c' || echo '$(srcdir)/'`prefworkspaceview.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-prefworkspaceview.Tpo $(DEPDIR)/nip2-prefworkspaceview.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='prefworkspaceview.c' object='nip2-prefworkspaceview.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-prefworkspaceview.o `test -f 'prefworkspaceview.c' || echo '$(srcdir)/'`prefworkspaceview.c nip2-prefworkspaceview.obj: prefworkspaceview.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-prefworkspaceview.obj -MD -MP -MF $(DEPDIR)/nip2-prefworkspaceview.Tpo -c -o nip2-prefworkspaceview.obj `if test -f 'prefworkspaceview.c'; then $(CYGPATH_W) 'prefworkspaceview.c'; else $(CYGPATH_W) '$(srcdir)/prefworkspaceview.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-prefworkspaceview.Tpo $(DEPDIR)/nip2-prefworkspaceview.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='prefworkspaceview.c' object='nip2-prefworkspaceview.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-prefworkspaceview.obj `if test -f 'prefworkspaceview.c'; then $(CYGPATH_W) 'prefworkspaceview.c'; else $(CYGPATH_W) '$(srcdir)/prefworkspaceview.c'; fi` nip2-prefcolumnview.o: prefcolumnview.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-prefcolumnview.o -MD -MP -MF $(DEPDIR)/nip2-prefcolumnview.Tpo -c -o nip2-prefcolumnview.o `test -f 'prefcolumnview.c' || echo '$(srcdir)/'`prefcolumnview.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-prefcolumnview.Tpo $(DEPDIR)/nip2-prefcolumnview.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='prefcolumnview.c' object='nip2-prefcolumnview.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-prefcolumnview.o `test -f 'prefcolumnview.c' || echo '$(srcdir)/'`prefcolumnview.c nip2-prefcolumnview.obj: prefcolumnview.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-prefcolumnview.obj -MD -MP -MF $(DEPDIR)/nip2-prefcolumnview.Tpo -c -o nip2-prefcolumnview.obj `if test -f 'prefcolumnview.c'; then $(CYGPATH_W) 'prefcolumnview.c'; else $(CYGPATH_W) '$(srcdir)/prefcolumnview.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-prefcolumnview.Tpo $(DEPDIR)/nip2-prefcolumnview.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='prefcolumnview.c' object='nip2-prefcolumnview.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-prefcolumnview.obj `if test -f 'prefcolumnview.c'; then $(CYGPATH_W) 'prefcolumnview.c'; else $(CYGPATH_W) '$(srcdir)/prefcolumnview.c'; fi` nip2-lex.o: lex.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-lex.o -MD -MP -MF $(DEPDIR)/nip2-lex.Tpo -c -o nip2-lex.o `test -f 'lex.c' || echo '$(srcdir)/'`lex.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-lex.Tpo $(DEPDIR)/nip2-lex.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lex.c' object='nip2-lex.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-lex.o `test -f 'lex.c' || echo '$(srcdir)/'`lex.c nip2-lex.obj: lex.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-lex.obj -MD -MP -MF $(DEPDIR)/nip2-lex.Tpo -c -o nip2-lex.obj `if test -f 'lex.c'; then $(CYGPATH_W) 'lex.c'; else $(CYGPATH_W) '$(srcdir)/lex.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-lex.Tpo $(DEPDIR)/nip2-lex.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lex.c' object='nip2-lex.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-lex.obj `if test -f 'lex.c'; then $(CYGPATH_W) 'lex.c'; else $(CYGPATH_W) '$(srcdir)/lex.c'; fi` nip2-link.o: link.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-link.o -MD -MP -MF $(DEPDIR)/nip2-link.Tpo -c -o nip2-link.o `test -f 'link.c' || echo '$(srcdir)/'`link.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-link.Tpo $(DEPDIR)/nip2-link.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='link.c' object='nip2-link.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-link.o `test -f 'link.c' || echo '$(srcdir)/'`link.c nip2-link.obj: link.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-link.obj -MD -MP -MF $(DEPDIR)/nip2-link.Tpo -c -o nip2-link.obj `if test -f 'link.c'; then $(CYGPATH_W) 'link.c'; else $(CYGPATH_W) '$(srcdir)/link.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-link.Tpo $(DEPDIR)/nip2-link.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='link.c' object='nip2-link.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-link.obj `if test -f 'link.c'; then $(CYGPATH_W) 'link.c'; else $(CYGPATH_W) '$(srcdir)/link.c'; fi` nip2-main.o: main.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-main.o -MD -MP -MF $(DEPDIR)/nip2-main.Tpo -c -o nip2-main.o `test -f 'main.c' || echo '$(srcdir)/'`main.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-main.Tpo $(DEPDIR)/nip2-main.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='main.c' object='nip2-main.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-main.o `test -f 'main.c' || echo '$(srcdir)/'`main.c nip2-main.obj: main.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-main.obj -MD -MP -MF $(DEPDIR)/nip2-main.Tpo -c -o nip2-main.obj `if test -f 'main.c'; then $(CYGPATH_W) 'main.c'; else $(CYGPATH_W) '$(srcdir)/main.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-main.Tpo $(DEPDIR)/nip2-main.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='main.c' object='nip2-main.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-main.obj `if test -f 'main.c'; then $(CYGPATH_W) 'main.c'; else $(CYGPATH_W) '$(srcdir)/main.c'; fi` nip2-mainw.o: mainw.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-mainw.o -MD -MP -MF $(DEPDIR)/nip2-mainw.Tpo -c -o nip2-mainw.o `test -f 'mainw.c' || echo '$(srcdir)/'`mainw.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-mainw.Tpo $(DEPDIR)/nip2-mainw.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mainw.c' object='nip2-mainw.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-mainw.o `test -f 'mainw.c' || echo '$(srcdir)/'`mainw.c nip2-mainw.obj: mainw.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-mainw.obj -MD -MP -MF $(DEPDIR)/nip2-mainw.Tpo -c -o nip2-mainw.obj `if test -f 'mainw.c'; then $(CYGPATH_W) 'mainw.c'; else $(CYGPATH_W) '$(srcdir)/mainw.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-mainw.Tpo $(DEPDIR)/nip2-mainw.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mainw.c' object='nip2-mainw.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-mainw.obj `if test -f 'mainw.c'; then $(CYGPATH_W) 'mainw.c'; else $(CYGPATH_W) '$(srcdir)/mainw.c'; fi` nip2-matrix.o: matrix.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-matrix.o -MD -MP -MF $(DEPDIR)/nip2-matrix.Tpo -c -o nip2-matrix.o `test -f 'matrix.c' || echo '$(srcdir)/'`matrix.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-matrix.Tpo $(DEPDIR)/nip2-matrix.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='matrix.c' object='nip2-matrix.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-matrix.o `test -f 'matrix.c' || echo '$(srcdir)/'`matrix.c nip2-matrix.obj: matrix.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-matrix.obj -MD -MP -MF $(DEPDIR)/nip2-matrix.Tpo -c -o nip2-matrix.obj `if test -f 'matrix.c'; then $(CYGPATH_W) 'matrix.c'; else $(CYGPATH_W) '$(srcdir)/matrix.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-matrix.Tpo $(DEPDIR)/nip2-matrix.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='matrix.c' object='nip2-matrix.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-matrix.obj `if test -f 'matrix.c'; then $(CYGPATH_W) 'matrix.c'; else $(CYGPATH_W) '$(srcdir)/matrix.c'; fi` nip2-matrixview.o: matrixview.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-matrixview.o -MD -MP -MF $(DEPDIR)/nip2-matrixview.Tpo -c -o nip2-matrixview.o `test -f 'matrixview.c' || echo '$(srcdir)/'`matrixview.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-matrixview.Tpo $(DEPDIR)/nip2-matrixview.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='matrixview.c' object='nip2-matrixview.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-matrixview.o `test -f 'matrixview.c' || echo '$(srcdir)/'`matrixview.c nip2-matrixview.obj: matrixview.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-matrixview.obj -MD -MP -MF $(DEPDIR)/nip2-matrixview.Tpo -c -o nip2-matrixview.obj `if test -f 'matrixview.c'; then $(CYGPATH_W) 'matrixview.c'; else $(CYGPATH_W) '$(srcdir)/matrixview.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-matrixview.Tpo $(DEPDIR)/nip2-matrixview.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='matrixview.c' object='nip2-matrixview.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-matrixview.obj `if test -f 'matrixview.c'; then $(CYGPATH_W) 'matrixview.c'; else $(CYGPATH_W) '$(srcdir)/matrixview.c'; fi` nip2-plot.o: plot.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-plot.o -MD -MP -MF $(DEPDIR)/nip2-plot.Tpo -c -o nip2-plot.o `test -f 'plot.c' || echo '$(srcdir)/'`plot.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-plot.Tpo $(DEPDIR)/nip2-plot.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='plot.c' object='nip2-plot.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-plot.o `test -f 'plot.c' || echo '$(srcdir)/'`plot.c nip2-plot.obj: plot.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-plot.obj -MD -MP -MF $(DEPDIR)/nip2-plot.Tpo -c -o nip2-plot.obj `if test -f 'plot.c'; then $(CYGPATH_W) 'plot.c'; else $(CYGPATH_W) '$(srcdir)/plot.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-plot.Tpo $(DEPDIR)/nip2-plot.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='plot.c' object='nip2-plot.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-plot.obj `if test -f 'plot.c'; then $(CYGPATH_W) 'plot.c'; else $(CYGPATH_W) '$(srcdir)/plot.c'; fi` nip2-plotview.o: plotview.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-plotview.o -MD -MP -MF $(DEPDIR)/nip2-plotview.Tpo -c -o nip2-plotview.o `test -f 'plotview.c' || echo '$(srcdir)/'`plotview.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-plotview.Tpo $(DEPDIR)/nip2-plotview.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='plotview.c' object='nip2-plotview.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-plotview.o `test -f 'plotview.c' || echo '$(srcdir)/'`plotview.c nip2-plotview.obj: plotview.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-plotview.obj -MD -MP -MF $(DEPDIR)/nip2-plotview.Tpo -c -o nip2-plotview.obj `if test -f 'plotview.c'; then $(CYGPATH_W) 'plotview.c'; else $(CYGPATH_W) '$(srcdir)/plotview.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-plotview.Tpo $(DEPDIR)/nip2-plotview.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='plotview.c' object='nip2-plotview.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-plotview.obj `if test -f 'plotview.c'; then $(CYGPATH_W) 'plotview.c'; else $(CYGPATH_W) '$(srcdir)/plotview.c'; fi` nip2-plotwindow.o: plotwindow.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-plotwindow.o -MD -MP -MF $(DEPDIR)/nip2-plotwindow.Tpo -c -o nip2-plotwindow.o `test -f 'plotwindow.c' || echo '$(srcdir)/'`plotwindow.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-plotwindow.Tpo $(DEPDIR)/nip2-plotwindow.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='plotwindow.c' object='nip2-plotwindow.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-plotwindow.o `test -f 'plotwindow.c' || echo '$(srcdir)/'`plotwindow.c nip2-plotwindow.obj: plotwindow.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-plotwindow.obj -MD -MP -MF $(DEPDIR)/nip2-plotwindow.Tpo -c -o nip2-plotwindow.obj `if test -f 'plotwindow.c'; then $(CYGPATH_W) 'plotwindow.c'; else $(CYGPATH_W) '$(srcdir)/plotwindow.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-plotwindow.Tpo $(DEPDIR)/nip2-plotwindow.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='plotwindow.c' object='nip2-plotwindow.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-plotwindow.obj `if test -f 'plotwindow.c'; then $(CYGPATH_W) 'plotwindow.c'; else $(CYGPATH_W) '$(srcdir)/plotwindow.c'; fi` nip2-model.o: model.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-model.o -MD -MP -MF $(DEPDIR)/nip2-model.Tpo -c -o nip2-model.o `test -f 'model.c' || echo '$(srcdir)/'`model.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-model.Tpo $(DEPDIR)/nip2-model.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='model.c' object='nip2-model.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-model.o `test -f 'model.c' || echo '$(srcdir)/'`model.c nip2-model.obj: model.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-model.obj -MD -MP -MF $(DEPDIR)/nip2-model.Tpo -c -o nip2-model.obj `if test -f 'model.c'; then $(CYGPATH_W) 'model.c'; else $(CYGPATH_W) '$(srcdir)/model.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-model.Tpo $(DEPDIR)/nip2-model.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='model.c' object='nip2-model.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-model.obj `if test -f 'model.c'; then $(CYGPATH_W) 'model.c'; else $(CYGPATH_W) '$(srcdir)/model.c'; fi` nip2-option.o: option.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-option.o -MD -MP -MF $(DEPDIR)/nip2-option.Tpo -c -o nip2-option.o `test -f 'option.c' || echo '$(srcdir)/'`option.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-option.Tpo $(DEPDIR)/nip2-option.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='option.c' object='nip2-option.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-option.o `test -f 'option.c' || echo '$(srcdir)/'`option.c nip2-option.obj: option.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-option.obj -MD -MP -MF $(DEPDIR)/nip2-option.Tpo -c -o nip2-option.obj `if test -f 'option.c'; then $(CYGPATH_W) 'option.c'; else $(CYGPATH_W) '$(srcdir)/option.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-option.Tpo $(DEPDIR)/nip2-option.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='option.c' object='nip2-option.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-option.obj `if test -f 'option.c'; then $(CYGPATH_W) 'option.c'; else $(CYGPATH_W) '$(srcdir)/option.c'; fi` nip2-optionview.o: optionview.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-optionview.o -MD -MP -MF $(DEPDIR)/nip2-optionview.Tpo -c -o nip2-optionview.o `test -f 'optionview.c' || echo '$(srcdir)/'`optionview.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-optionview.Tpo $(DEPDIR)/nip2-optionview.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='optionview.c' object='nip2-optionview.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-optionview.o `test -f 'optionview.c' || echo '$(srcdir)/'`optionview.c nip2-optionview.obj: optionview.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-optionview.obj -MD -MP -MF $(DEPDIR)/nip2-optionview.Tpo -c -o nip2-optionview.obj `if test -f 'optionview.c'; then $(CYGPATH_W) 'optionview.c'; else $(CYGPATH_W) '$(srcdir)/optionview.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-optionview.Tpo $(DEPDIR)/nip2-optionview.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='optionview.c' object='nip2-optionview.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-optionview.obj `if test -f 'optionview.c'; then $(CYGPATH_W) 'optionview.c'; else $(CYGPATH_W) '$(srcdir)/optionview.c'; fi` nip2-formula.o: formula.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-formula.o -MD -MP -MF $(DEPDIR)/nip2-formula.Tpo -c -o nip2-formula.o `test -f 'formula.c' || echo '$(srcdir)/'`formula.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-formula.Tpo $(DEPDIR)/nip2-formula.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='formula.c' object='nip2-formula.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-formula.o `test -f 'formula.c' || echo '$(srcdir)/'`formula.c nip2-formula.obj: formula.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-formula.obj -MD -MP -MF $(DEPDIR)/nip2-formula.Tpo -c -o nip2-formula.obj `if test -f 'formula.c'; then $(CYGPATH_W) 'formula.c'; else $(CYGPATH_W) '$(srcdir)/formula.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-formula.Tpo $(DEPDIR)/nip2-formula.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='formula.c' object='nip2-formula.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-formula.obj `if test -f 'formula.c'; then $(CYGPATH_W) 'formula.c'; else $(CYGPATH_W) '$(srcdir)/formula.c'; fi` nip2-paintboxview.o: paintboxview.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-paintboxview.o -MD -MP -MF $(DEPDIR)/nip2-paintboxview.Tpo -c -o nip2-paintboxview.o `test -f 'paintboxview.c' || echo '$(srcdir)/'`paintboxview.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-paintboxview.Tpo $(DEPDIR)/nip2-paintboxview.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='paintboxview.c' object='nip2-paintboxview.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-paintboxview.o `test -f 'paintboxview.c' || echo '$(srcdir)/'`paintboxview.c nip2-paintboxview.obj: paintboxview.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-paintboxview.obj -MD -MP -MF $(DEPDIR)/nip2-paintboxview.Tpo -c -o nip2-paintboxview.obj `if test -f 'paintboxview.c'; then $(CYGPATH_W) 'paintboxview.c'; else $(CYGPATH_W) '$(srcdir)/paintboxview.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-paintboxview.Tpo $(DEPDIR)/nip2-paintboxview.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='paintboxview.c' object='nip2-paintboxview.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-paintboxview.obj `if test -f 'paintboxview.c'; then $(CYGPATH_W) 'paintboxview.c'; else $(CYGPATH_W) '$(srcdir)/paintboxview.c'; fi` nip2-path.o: path.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-path.o -MD -MP -MF $(DEPDIR)/nip2-path.Tpo -c -o nip2-path.o `test -f 'path.c' || echo '$(srcdir)/'`path.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-path.Tpo $(DEPDIR)/nip2-path.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='path.c' object='nip2-path.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-path.o `test -f 'path.c' || echo '$(srcdir)/'`path.c nip2-path.obj: path.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-path.obj -MD -MP -MF $(DEPDIR)/nip2-path.Tpo -c -o nip2-path.obj `if test -f 'path.c'; then $(CYGPATH_W) 'path.c'; else $(CYGPATH_W) '$(srcdir)/path.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-path.Tpo $(DEPDIR)/nip2-path.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='path.c' object='nip2-path.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-path.obj `if test -f 'path.c'; then $(CYGPATH_W) 'path.c'; else $(CYGPATH_W) '$(srcdir)/path.c'; fi` nip2-predicate.o: predicate.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-predicate.o -MD -MP -MF $(DEPDIR)/nip2-predicate.Tpo -c -o nip2-predicate.o `test -f 'predicate.c' || echo '$(srcdir)/'`predicate.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-predicate.Tpo $(DEPDIR)/nip2-predicate.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='predicate.c' object='nip2-predicate.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-predicate.o `test -f 'predicate.c' || echo '$(srcdir)/'`predicate.c nip2-predicate.obj: predicate.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-predicate.obj -MD -MP -MF $(DEPDIR)/nip2-predicate.Tpo -c -o nip2-predicate.obj `if test -f 'predicate.c'; then $(CYGPATH_W) 'predicate.c'; else $(CYGPATH_W) '$(srcdir)/predicate.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-predicate.Tpo $(DEPDIR)/nip2-predicate.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='predicate.c' object='nip2-predicate.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-predicate.obj `if test -f 'predicate.c'; then $(CYGPATH_W) 'predicate.c'; else $(CYGPATH_W) '$(srcdir)/predicate.c'; fi` nip2-program.o: program.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-program.o -MD -MP -MF $(DEPDIR)/nip2-program.Tpo -c -o nip2-program.o `test -f 'program.c' || echo '$(srcdir)/'`program.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-program.Tpo $(DEPDIR)/nip2-program.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='program.c' object='nip2-program.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-program.o `test -f 'program.c' || echo '$(srcdir)/'`program.c nip2-program.obj: program.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-program.obj -MD -MP -MF $(DEPDIR)/nip2-program.Tpo -c -o nip2-program.obj `if test -f 'program.c'; then $(CYGPATH_W) 'program.c'; else $(CYGPATH_W) '$(srcdir)/program.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-program.Tpo $(DEPDIR)/nip2-program.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='program.c' object='nip2-program.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-program.obj `if test -f 'program.c'; then $(CYGPATH_W) 'program.c'; else $(CYGPATH_W) '$(srcdir)/program.c'; fi` nip2-string.o: string.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-string.o -MD -MP -MF $(DEPDIR)/nip2-string.Tpo -c -o nip2-string.o `test -f 'string.c' || echo '$(srcdir)/'`string.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-string.Tpo $(DEPDIR)/nip2-string.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='string.c' object='nip2-string.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-string.o `test -f 'string.c' || echo '$(srcdir)/'`string.c nip2-string.obj: string.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-string.obj -MD -MP -MF $(DEPDIR)/nip2-string.Tpo -c -o nip2-string.obj `if test -f 'string.c'; then $(CYGPATH_W) 'string.c'; else $(CYGPATH_W) '$(srcdir)/string.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-string.Tpo $(DEPDIR)/nip2-string.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='string.c' object='nip2-string.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-string.obj `if test -f 'string.c'; then $(CYGPATH_W) 'string.c'; else $(CYGPATH_W) '$(srcdir)/string.c'; fi` nip2-number.o: number.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-number.o -MD -MP -MF $(DEPDIR)/nip2-number.Tpo -c -o nip2-number.o `test -f 'number.c' || echo '$(srcdir)/'`number.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-number.Tpo $(DEPDIR)/nip2-number.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='number.c' object='nip2-number.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-number.o `test -f 'number.c' || echo '$(srcdir)/'`number.c nip2-number.obj: number.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-number.obj -MD -MP -MF $(DEPDIR)/nip2-number.Tpo -c -o nip2-number.obj `if test -f 'number.c'; then $(CYGPATH_W) 'number.c'; else $(CYGPATH_W) '$(srcdir)/number.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-number.Tpo $(DEPDIR)/nip2-number.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='number.c' object='nip2-number.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-number.obj `if test -f 'number.c'; then $(CYGPATH_W) 'number.c'; else $(CYGPATH_W) '$(srcdir)/number.c'; fi` nip2-expression.o: expression.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-expression.o -MD -MP -MF $(DEPDIR)/nip2-expression.Tpo -c -o nip2-expression.o `test -f 'expression.c' || echo '$(srcdir)/'`expression.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-expression.Tpo $(DEPDIR)/nip2-expression.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='expression.c' object='nip2-expression.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-expression.o `test -f 'expression.c' || echo '$(srcdir)/'`expression.c nip2-expression.obj: expression.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-expression.obj -MD -MP -MF $(DEPDIR)/nip2-expression.Tpo -c -o nip2-expression.obj `if test -f 'expression.c'; then $(CYGPATH_W) 'expression.c'; else $(CYGPATH_W) '$(srcdir)/expression.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-expression.Tpo $(DEPDIR)/nip2-expression.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='expression.c' object='nip2-expression.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-expression.obj `if test -f 'expression.c'; then $(CYGPATH_W) 'expression.c'; else $(CYGPATH_W) '$(srcdir)/expression.c'; fi` nip2-expressionview.o: expressionview.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-expressionview.o -MD -MP -MF $(DEPDIR)/nip2-expressionview.Tpo -c -o nip2-expressionview.o `test -f 'expressionview.c' || echo '$(srcdir)/'`expressionview.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-expressionview.Tpo $(DEPDIR)/nip2-expressionview.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='expressionview.c' object='nip2-expressionview.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-expressionview.o `test -f 'expressionview.c' || echo '$(srcdir)/'`expressionview.c nip2-expressionview.obj: expressionview.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-expressionview.obj -MD -MP -MF $(DEPDIR)/nip2-expressionview.Tpo -c -o nip2-expressionview.obj `if test -f 'expressionview.c'; then $(CYGPATH_W) 'expressionview.c'; else $(CYGPATH_W) '$(srcdir)/expressionview.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-expressionview.Tpo $(DEPDIR)/nip2-expressionview.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='expressionview.c' object='nip2-expressionview.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-expressionview.obj `if test -f 'expressionview.c'; then $(CYGPATH_W) 'expressionview.c'; else $(CYGPATH_W) '$(srcdir)/expressionview.c'; fi` nip2-stringview.o: stringview.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-stringview.o -MD -MP -MF $(DEPDIR)/nip2-stringview.Tpo -c -o nip2-stringview.o `test -f 'stringview.c' || echo '$(srcdir)/'`stringview.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-stringview.Tpo $(DEPDIR)/nip2-stringview.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='stringview.c' object='nip2-stringview.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-stringview.o `test -f 'stringview.c' || echo '$(srcdir)/'`stringview.c nip2-stringview.obj: stringview.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-stringview.obj -MD -MP -MF $(DEPDIR)/nip2-stringview.Tpo -c -o nip2-stringview.obj `if test -f 'stringview.c'; then $(CYGPATH_W) 'stringview.c'; else $(CYGPATH_W) '$(srcdir)/stringview.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-stringview.Tpo $(DEPDIR)/nip2-stringview.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='stringview.c' object='nip2-stringview.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-stringview.obj `if test -f 'stringview.c'; then $(CYGPATH_W) 'stringview.c'; else $(CYGPATH_W) '$(srcdir)/stringview.c'; fi` nip2-editview.o: editview.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-editview.o -MD -MP -MF $(DEPDIR)/nip2-editview.Tpo -c -o nip2-editview.o `test -f 'editview.c' || echo '$(srcdir)/'`editview.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-editview.Tpo $(DEPDIR)/nip2-editview.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='editview.c' object='nip2-editview.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-editview.o `test -f 'editview.c' || echo '$(srcdir)/'`editview.c nip2-editview.obj: editview.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-editview.obj -MD -MP -MF $(DEPDIR)/nip2-editview.Tpo -c -o nip2-editview.obj `if test -f 'editview.c'; then $(CYGPATH_W) 'editview.c'; else $(CYGPATH_W) '$(srcdir)/editview.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-editview.Tpo $(DEPDIR)/nip2-editview.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='editview.c' object='nip2-editview.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-editview.obj `if test -f 'editview.c'; then $(CYGPATH_W) 'editview.c'; else $(CYGPATH_W) '$(srcdir)/editview.c'; fi` nip2-numberview.o: numberview.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-numberview.o -MD -MP -MF $(DEPDIR)/nip2-numberview.Tpo -c -o nip2-numberview.o `test -f 'numberview.c' || echo '$(srcdir)/'`numberview.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-numberview.Tpo $(DEPDIR)/nip2-numberview.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='numberview.c' object='nip2-numberview.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-numberview.o `test -f 'numberview.c' || echo '$(srcdir)/'`numberview.c nip2-numberview.obj: numberview.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-numberview.obj -MD -MP -MF $(DEPDIR)/nip2-numberview.Tpo -c -o nip2-numberview.obj `if test -f 'numberview.c'; then $(CYGPATH_W) 'numberview.c'; else $(CYGPATH_W) '$(srcdir)/numberview.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-numberview.Tpo $(DEPDIR)/nip2-numberview.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='numberview.c' object='nip2-numberview.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-numberview.obj `if test -f 'numberview.c'; then $(CYGPATH_W) 'numberview.c'; else $(CYGPATH_W) '$(srcdir)/numberview.c'; fi` nip2-real.o: real.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-real.o -MD -MP -MF $(DEPDIR)/nip2-real.Tpo -c -o nip2-real.o `test -f 'real.c' || echo '$(srcdir)/'`real.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-real.Tpo $(DEPDIR)/nip2-real.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='real.c' object='nip2-real.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-real.o `test -f 'real.c' || echo '$(srcdir)/'`real.c nip2-real.obj: real.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-real.obj -MD -MP -MF $(DEPDIR)/nip2-real.Tpo -c -o nip2-real.obj `if test -f 'real.c'; then $(CYGPATH_W) 'real.c'; else $(CYGPATH_W) '$(srcdir)/real.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-real.Tpo $(DEPDIR)/nip2-real.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='real.c' object='nip2-real.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-real.obj `if test -f 'real.c'; then $(CYGPATH_W) 'real.c'; else $(CYGPATH_W) '$(srcdir)/real.c'; fi` nip2-vector.o: vector.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-vector.o -MD -MP -MF $(DEPDIR)/nip2-vector.Tpo -c -o nip2-vector.o `test -f 'vector.c' || echo '$(srcdir)/'`vector.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-vector.Tpo $(DEPDIR)/nip2-vector.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='vector.c' object='nip2-vector.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-vector.o `test -f 'vector.c' || echo '$(srcdir)/'`vector.c nip2-vector.obj: vector.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-vector.obj -MD -MP -MF $(DEPDIR)/nip2-vector.Tpo -c -o nip2-vector.obj `if test -f 'vector.c'; then $(CYGPATH_W) 'vector.c'; else $(CYGPATH_W) '$(srcdir)/vector.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-vector.Tpo $(DEPDIR)/nip2-vector.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='vector.c' object='nip2-vector.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-vector.obj `if test -f 'vector.c'; then $(CYGPATH_W) 'vector.c'; else $(CYGPATH_W) '$(srcdir)/vector.c'; fi` nip2-reduce.o: reduce.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-reduce.o -MD -MP -MF $(DEPDIR)/nip2-reduce.Tpo -c -o nip2-reduce.o `test -f 'reduce.c' || echo '$(srcdir)/'`reduce.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-reduce.Tpo $(DEPDIR)/nip2-reduce.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='reduce.c' object='nip2-reduce.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-reduce.o `test -f 'reduce.c' || echo '$(srcdir)/'`reduce.c nip2-reduce.obj: reduce.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-reduce.obj -MD -MP -MF $(DEPDIR)/nip2-reduce.Tpo -c -o nip2-reduce.obj `if test -f 'reduce.c'; then $(CYGPATH_W) 'reduce.c'; else $(CYGPATH_W) '$(srcdir)/reduce.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-reduce.Tpo $(DEPDIR)/nip2-reduce.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='reduce.c' object='nip2-reduce.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-reduce.obj `if test -f 'reduce.c'; then $(CYGPATH_W) 'reduce.c'; else $(CYGPATH_W) '$(srcdir)/reduce.c'; fi` nip2-regionview.o: regionview.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-regionview.o -MD -MP -MF $(DEPDIR)/nip2-regionview.Tpo -c -o nip2-regionview.o `test -f 'regionview.c' || echo '$(srcdir)/'`regionview.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-regionview.Tpo $(DEPDIR)/nip2-regionview.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='regionview.c' object='nip2-regionview.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-regionview.o `test -f 'regionview.c' || echo '$(srcdir)/'`regionview.c nip2-regionview.obj: regionview.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-regionview.obj -MD -MP -MF $(DEPDIR)/nip2-regionview.Tpo -c -o nip2-regionview.obj `if test -f 'regionview.c'; then $(CYGPATH_W) 'regionview.c'; else $(CYGPATH_W) '$(srcdir)/regionview.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-regionview.Tpo $(DEPDIR)/nip2-regionview.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='regionview.c' object='nip2-regionview.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-regionview.obj `if test -f 'regionview.c'; then $(CYGPATH_W) 'regionview.c'; else $(CYGPATH_W) '$(srcdir)/regionview.c'; fi` nip2-rhs.o: rhs.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-rhs.o -MD -MP -MF $(DEPDIR)/nip2-rhs.Tpo -c -o nip2-rhs.o `test -f 'rhs.c' || echo '$(srcdir)/'`rhs.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-rhs.Tpo $(DEPDIR)/nip2-rhs.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rhs.c' object='nip2-rhs.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-rhs.o `test -f 'rhs.c' || echo '$(srcdir)/'`rhs.c nip2-rhs.obj: rhs.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-rhs.obj -MD -MP -MF $(DEPDIR)/nip2-rhs.Tpo -c -o nip2-rhs.obj `if test -f 'rhs.c'; then $(CYGPATH_W) 'rhs.c'; else $(CYGPATH_W) '$(srcdir)/rhs.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-rhs.Tpo $(DEPDIR)/nip2-rhs.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rhs.c' object='nip2-rhs.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-rhs.obj `if test -f 'rhs.c'; then $(CYGPATH_W) 'rhs.c'; else $(CYGPATH_W) '$(srcdir)/rhs.c'; fi` nip2-rhsview.o: rhsview.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-rhsview.o -MD -MP -MF $(DEPDIR)/nip2-rhsview.Tpo -c -o nip2-rhsview.o `test -f 'rhsview.c' || echo '$(srcdir)/'`rhsview.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-rhsview.Tpo $(DEPDIR)/nip2-rhsview.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rhsview.c' object='nip2-rhsview.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-rhsview.o `test -f 'rhsview.c' || echo '$(srcdir)/'`rhsview.c nip2-rhsview.obj: rhsview.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-rhsview.obj -MD -MP -MF $(DEPDIR)/nip2-rhsview.Tpo -c -o nip2-rhsview.obj `if test -f 'rhsview.c'; then $(CYGPATH_W) 'rhsview.c'; else $(CYGPATH_W) '$(srcdir)/rhsview.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-rhsview.Tpo $(DEPDIR)/nip2-rhsview.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rhsview.c' object='nip2-rhsview.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-rhsview.obj `if test -f 'rhsview.c'; then $(CYGPATH_W) 'rhsview.c'; else $(CYGPATH_W) '$(srcdir)/rhsview.c'; fi` nip2-row.o: row.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-row.o -MD -MP -MF $(DEPDIR)/nip2-row.Tpo -c -o nip2-row.o `test -f 'row.c' || echo '$(srcdir)/'`row.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-row.Tpo $(DEPDIR)/nip2-row.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='row.c' object='nip2-row.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-row.o `test -f 'row.c' || echo '$(srcdir)/'`row.c nip2-row.obj: row.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-row.obj -MD -MP -MF $(DEPDIR)/nip2-row.Tpo -c -o nip2-row.obj `if test -f 'row.c'; then $(CYGPATH_W) 'row.c'; else $(CYGPATH_W) '$(srcdir)/row.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-row.Tpo $(DEPDIR)/nip2-row.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='row.c' object='nip2-row.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-row.obj `if test -f 'row.c'; then $(CYGPATH_W) 'row.c'; else $(CYGPATH_W) '$(srcdir)/row.c'; fi` nip2-rowview.o: rowview.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-rowview.o -MD -MP -MF $(DEPDIR)/nip2-rowview.Tpo -c -o nip2-rowview.o `test -f 'rowview.c' || echo '$(srcdir)/'`rowview.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-rowview.Tpo $(DEPDIR)/nip2-rowview.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rowview.c' object='nip2-rowview.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-rowview.o `test -f 'rowview.c' || echo '$(srcdir)/'`rowview.c nip2-rowview.obj: rowview.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-rowview.obj -MD -MP -MF $(DEPDIR)/nip2-rowview.Tpo -c -o nip2-rowview.obj `if test -f 'rowview.c'; then $(CYGPATH_W) 'rowview.c'; else $(CYGPATH_W) '$(srcdir)/rowview.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-rowview.Tpo $(DEPDIR)/nip2-rowview.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rowview.c' object='nip2-rowview.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-rowview.obj `if test -f 'rowview.c'; then $(CYGPATH_W) 'rowview.c'; else $(CYGPATH_W) '$(srcdir)/rowview.c'; fi` nip2-secret.o: secret.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-secret.o -MD -MP -MF $(DEPDIR)/nip2-secret.Tpo -c -o nip2-secret.o `test -f 'secret.c' || echo '$(srcdir)/'`secret.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-secret.Tpo $(DEPDIR)/nip2-secret.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='secret.c' object='nip2-secret.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-secret.o `test -f 'secret.c' || echo '$(srcdir)/'`secret.c nip2-secret.obj: secret.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-secret.obj -MD -MP -MF $(DEPDIR)/nip2-secret.Tpo -c -o nip2-secret.obj `if test -f 'secret.c'; then $(CYGPATH_W) 'secret.c'; else $(CYGPATH_W) '$(srcdir)/secret.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-secret.Tpo $(DEPDIR)/nip2-secret.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='secret.c' object='nip2-secret.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-secret.obj `if test -f 'secret.c'; then $(CYGPATH_W) 'secret.c'; else $(CYGPATH_W) '$(srcdir)/secret.c'; fi` nip2-slider.o: slider.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-slider.o -MD -MP -MF $(DEPDIR)/nip2-slider.Tpo -c -o nip2-slider.o `test -f 'slider.c' || echo '$(srcdir)/'`slider.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-slider.Tpo $(DEPDIR)/nip2-slider.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='slider.c' object='nip2-slider.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-slider.o `test -f 'slider.c' || echo '$(srcdir)/'`slider.c nip2-slider.obj: slider.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-slider.obj -MD -MP -MF $(DEPDIR)/nip2-slider.Tpo -c -o nip2-slider.obj `if test -f 'slider.c'; then $(CYGPATH_W) 'slider.c'; else $(CYGPATH_W) '$(srcdir)/slider.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-slider.Tpo $(DEPDIR)/nip2-slider.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='slider.c' object='nip2-slider.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-slider.obj `if test -f 'slider.c'; then $(CYGPATH_W) 'slider.c'; else $(CYGPATH_W) '$(srcdir)/slider.c'; fi` nip2-sliderview.o: sliderview.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-sliderview.o -MD -MP -MF $(DEPDIR)/nip2-sliderview.Tpo -c -o nip2-sliderview.o `test -f 'sliderview.c' || echo '$(srcdir)/'`sliderview.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-sliderview.Tpo $(DEPDIR)/nip2-sliderview.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='sliderview.c' object='nip2-sliderview.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-sliderview.o `test -f 'sliderview.c' || echo '$(srcdir)/'`sliderview.c nip2-sliderview.obj: sliderview.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-sliderview.obj -MD -MP -MF $(DEPDIR)/nip2-sliderview.Tpo -c -o nip2-sliderview.obj `if test -f 'sliderview.c'; then $(CYGPATH_W) 'sliderview.c'; else $(CYGPATH_W) '$(srcdir)/sliderview.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-sliderview.Tpo $(DEPDIR)/nip2-sliderview.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='sliderview.c' object='nip2-sliderview.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-sliderview.obj `if test -f 'sliderview.c'; then $(CYGPATH_W) 'sliderview.c'; else $(CYGPATH_W) '$(srcdir)/sliderview.c'; fi` nip2-clock.o: clock.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-clock.o -MD -MP -MF $(DEPDIR)/nip2-clock.Tpo -c -o nip2-clock.o `test -f 'clock.c' || echo '$(srcdir)/'`clock.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-clock.Tpo $(DEPDIR)/nip2-clock.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='clock.c' object='nip2-clock.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-clock.o `test -f 'clock.c' || echo '$(srcdir)/'`clock.c nip2-clock.obj: clock.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-clock.obj -MD -MP -MF $(DEPDIR)/nip2-clock.Tpo -c -o nip2-clock.obj `if test -f 'clock.c'; then $(CYGPATH_W) 'clock.c'; else $(CYGPATH_W) '$(srcdir)/clock.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-clock.Tpo $(DEPDIR)/nip2-clock.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='clock.c' object='nip2-clock.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-clock.obj `if test -f 'clock.c'; then $(CYGPATH_W) 'clock.c'; else $(CYGPATH_W) '$(srcdir)/clock.c'; fi` nip2-spin.o: spin.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-spin.o -MD -MP -MF $(DEPDIR)/nip2-spin.Tpo -c -o nip2-spin.o `test -f 'spin.c' || echo '$(srcdir)/'`spin.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-spin.Tpo $(DEPDIR)/nip2-spin.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='spin.c' object='nip2-spin.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-spin.o `test -f 'spin.c' || echo '$(srcdir)/'`spin.c nip2-spin.obj: spin.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-spin.obj -MD -MP -MF $(DEPDIR)/nip2-spin.Tpo -c -o nip2-spin.obj `if test -f 'spin.c'; then $(CYGPATH_W) 'spin.c'; else $(CYGPATH_W) '$(srcdir)/spin.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-spin.Tpo $(DEPDIR)/nip2-spin.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='spin.c' object='nip2-spin.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-spin.obj `if test -f 'spin.c'; then $(CYGPATH_W) 'spin.c'; else $(CYGPATH_W) '$(srcdir)/spin.c'; fi` nip2-statusview.o: statusview.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-statusview.o -MD -MP -MF $(DEPDIR)/nip2-statusview.Tpo -c -o nip2-statusview.o `test -f 'statusview.c' || echo '$(srcdir)/'`statusview.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-statusview.Tpo $(DEPDIR)/nip2-statusview.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='statusview.c' object='nip2-statusview.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-statusview.o `test -f 'statusview.c' || echo '$(srcdir)/'`statusview.c nip2-statusview.obj: statusview.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-statusview.obj -MD -MP -MF $(DEPDIR)/nip2-statusview.Tpo -c -o nip2-statusview.obj `if test -f 'statusview.c'; then $(CYGPATH_W) 'statusview.c'; else $(CYGPATH_W) '$(srcdir)/statusview.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-statusview.Tpo $(DEPDIR)/nip2-statusview.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='statusview.c' object='nip2-statusview.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-statusview.obj `if test -f 'statusview.c'; then $(CYGPATH_W) 'statusview.c'; else $(CYGPATH_W) '$(srcdir)/statusview.c'; fi` nip2-subcolumn.o: subcolumn.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-subcolumn.o -MD -MP -MF $(DEPDIR)/nip2-subcolumn.Tpo -c -o nip2-subcolumn.o `test -f 'subcolumn.c' || echo '$(srcdir)/'`subcolumn.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-subcolumn.Tpo $(DEPDIR)/nip2-subcolumn.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='subcolumn.c' object='nip2-subcolumn.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-subcolumn.o `test -f 'subcolumn.c' || echo '$(srcdir)/'`subcolumn.c nip2-subcolumn.obj: subcolumn.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-subcolumn.obj -MD -MP -MF $(DEPDIR)/nip2-subcolumn.Tpo -c -o nip2-subcolumn.obj `if test -f 'subcolumn.c'; then $(CYGPATH_W) 'subcolumn.c'; else $(CYGPATH_W) '$(srcdir)/subcolumn.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-subcolumn.Tpo $(DEPDIR)/nip2-subcolumn.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='subcolumn.c' object='nip2-subcolumn.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-subcolumn.obj `if test -f 'subcolumn.c'; then $(CYGPATH_W) 'subcolumn.c'; else $(CYGPATH_W) '$(srcdir)/subcolumn.c'; fi` nip2-subcolumnview.o: subcolumnview.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-subcolumnview.o -MD -MP -MF $(DEPDIR)/nip2-subcolumnview.Tpo -c -o nip2-subcolumnview.o `test -f 'subcolumnview.c' || echo '$(srcdir)/'`subcolumnview.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-subcolumnview.Tpo $(DEPDIR)/nip2-subcolumnview.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='subcolumnview.c' object='nip2-subcolumnview.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-subcolumnview.o `test -f 'subcolumnview.c' || echo '$(srcdir)/'`subcolumnview.c nip2-subcolumnview.obj: subcolumnview.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-subcolumnview.obj -MD -MP -MF $(DEPDIR)/nip2-subcolumnview.Tpo -c -o nip2-subcolumnview.obj `if test -f 'subcolumnview.c'; then $(CYGPATH_W) 'subcolumnview.c'; else $(CYGPATH_W) '$(srcdir)/subcolumnview.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-subcolumnview.Tpo $(DEPDIR)/nip2-subcolumnview.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='subcolumnview.c' object='nip2-subcolumnview.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-subcolumnview.obj `if test -f 'subcolumnview.c'; then $(CYGPATH_W) 'subcolumnview.c'; else $(CYGPATH_W) '$(srcdir)/subcolumnview.c'; fi` nip2-symbol.o: symbol.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-symbol.o -MD -MP -MF $(DEPDIR)/nip2-symbol.Tpo -c -o nip2-symbol.o `test -f 'symbol.c' || echo '$(srcdir)/'`symbol.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-symbol.Tpo $(DEPDIR)/nip2-symbol.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='symbol.c' object='nip2-symbol.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-symbol.o `test -f 'symbol.c' || echo '$(srcdir)/'`symbol.c nip2-symbol.obj: symbol.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-symbol.obj -MD -MP -MF $(DEPDIR)/nip2-symbol.Tpo -c -o nip2-symbol.obj `if test -f 'symbol.c'; then $(CYGPATH_W) 'symbol.c'; else $(CYGPATH_W) '$(srcdir)/symbol.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-symbol.Tpo $(DEPDIR)/nip2-symbol.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='symbol.c' object='nip2-symbol.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-symbol.obj `if test -f 'symbol.c'; then $(CYGPATH_W) 'symbol.c'; else $(CYGPATH_W) '$(srcdir)/symbol.c'; fi` nip2-toggle.o: toggle.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-toggle.o -MD -MP -MF $(DEPDIR)/nip2-toggle.Tpo -c -o nip2-toggle.o `test -f 'toggle.c' || echo '$(srcdir)/'`toggle.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-toggle.Tpo $(DEPDIR)/nip2-toggle.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='toggle.c' object='nip2-toggle.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-toggle.o `test -f 'toggle.c' || echo '$(srcdir)/'`toggle.c nip2-toggle.obj: toggle.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-toggle.obj -MD -MP -MF $(DEPDIR)/nip2-toggle.Tpo -c -o nip2-toggle.obj `if test -f 'toggle.c'; then $(CYGPATH_W) 'toggle.c'; else $(CYGPATH_W) '$(srcdir)/toggle.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-toggle.Tpo $(DEPDIR)/nip2-toggle.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='toggle.c' object='nip2-toggle.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-toggle.obj `if test -f 'toggle.c'; then $(CYGPATH_W) 'toggle.c'; else $(CYGPATH_W) '$(srcdir)/toggle.c'; fi` nip2-toggleview.o: toggleview.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-toggleview.o -MD -MP -MF $(DEPDIR)/nip2-toggleview.Tpo -c -o nip2-toggleview.o `test -f 'toggleview.c' || echo '$(srcdir)/'`toggleview.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-toggleview.Tpo $(DEPDIR)/nip2-toggleview.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='toggleview.c' object='nip2-toggleview.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-toggleview.o `test -f 'toggleview.c' || echo '$(srcdir)/'`toggleview.c nip2-toggleview.obj: toggleview.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-toggleview.obj -MD -MP -MF $(DEPDIR)/nip2-toggleview.Tpo -c -o nip2-toggleview.obj `if test -f 'toggleview.c'; then $(CYGPATH_W) 'toggleview.c'; else $(CYGPATH_W) '$(srcdir)/toggleview.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-toggleview.Tpo $(DEPDIR)/nip2-toggleview.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='toggleview.c' object='nip2-toggleview.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-toggleview.obj `if test -f 'toggleview.c'; then $(CYGPATH_W) 'toggleview.c'; else $(CYGPATH_W) '$(srcdir)/toggleview.c'; fi` nip2-tool.o: tool.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-tool.o -MD -MP -MF $(DEPDIR)/nip2-tool.Tpo -c -o nip2-tool.o `test -f 'tool.c' || echo '$(srcdir)/'`tool.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-tool.Tpo $(DEPDIR)/nip2-tool.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tool.c' object='nip2-tool.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-tool.o `test -f 'tool.c' || echo '$(srcdir)/'`tool.c nip2-tool.obj: tool.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-tool.obj -MD -MP -MF $(DEPDIR)/nip2-tool.Tpo -c -o nip2-tool.obj `if test -f 'tool.c'; then $(CYGPATH_W) 'tool.c'; else $(CYGPATH_W) '$(srcdir)/tool.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-tool.Tpo $(DEPDIR)/nip2-tool.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tool.c' object='nip2-tool.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-tool.obj `if test -f 'tool.c'; then $(CYGPATH_W) 'tool.c'; else $(CYGPATH_W) '$(srcdir)/tool.c'; fi` nip2-toolkit.o: toolkit.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-toolkit.o -MD -MP -MF $(DEPDIR)/nip2-toolkit.Tpo -c -o nip2-toolkit.o `test -f 'toolkit.c' || echo '$(srcdir)/'`toolkit.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-toolkit.Tpo $(DEPDIR)/nip2-toolkit.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='toolkit.c' object='nip2-toolkit.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-toolkit.o `test -f 'toolkit.c' || echo '$(srcdir)/'`toolkit.c nip2-toolkit.obj: toolkit.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-toolkit.obj -MD -MP -MF $(DEPDIR)/nip2-toolkit.Tpo -c -o nip2-toolkit.obj `if test -f 'toolkit.c'; then $(CYGPATH_W) 'toolkit.c'; else $(CYGPATH_W) '$(srcdir)/toolkit.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-toolkit.Tpo $(DEPDIR)/nip2-toolkit.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='toolkit.c' object='nip2-toolkit.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-toolkit.obj `if test -f 'toolkit.c'; then $(CYGPATH_W) 'toolkit.c'; else $(CYGPATH_W) '$(srcdir)/toolkit.c'; fi` nip2-toolkitgroup.o: toolkitgroup.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-toolkitgroup.o -MD -MP -MF $(DEPDIR)/nip2-toolkitgroup.Tpo -c -o nip2-toolkitgroup.o `test -f 'toolkitgroup.c' || echo '$(srcdir)/'`toolkitgroup.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-toolkitgroup.Tpo $(DEPDIR)/nip2-toolkitgroup.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='toolkitgroup.c' object='nip2-toolkitgroup.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-toolkitgroup.o `test -f 'toolkitgroup.c' || echo '$(srcdir)/'`toolkitgroup.c nip2-toolkitgroup.obj: toolkitgroup.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-toolkitgroup.obj -MD -MP -MF $(DEPDIR)/nip2-toolkitgroup.Tpo -c -o nip2-toolkitgroup.obj `if test -f 'toolkitgroup.c'; then $(CYGPATH_W) 'toolkitgroup.c'; else $(CYGPATH_W) '$(srcdir)/toolkitgroup.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-toolkitgroup.Tpo $(DEPDIR)/nip2-toolkitgroup.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='toolkitgroup.c' object='nip2-toolkitgroup.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-toolkitgroup.obj `if test -f 'toolkitgroup.c'; then $(CYGPATH_W) 'toolkitgroup.c'; else $(CYGPATH_W) '$(srcdir)/toolkitgroup.c'; fi` nip2-toolkitgroupview.o: toolkitgroupview.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-toolkitgroupview.o -MD -MP -MF $(DEPDIR)/nip2-toolkitgroupview.Tpo -c -o nip2-toolkitgroupview.o `test -f 'toolkitgroupview.c' || echo '$(srcdir)/'`toolkitgroupview.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-toolkitgroupview.Tpo $(DEPDIR)/nip2-toolkitgroupview.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='toolkitgroupview.c' object='nip2-toolkitgroupview.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-toolkitgroupview.o `test -f 'toolkitgroupview.c' || echo '$(srcdir)/'`toolkitgroupview.c nip2-toolkitgroupview.obj: toolkitgroupview.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-toolkitgroupview.obj -MD -MP -MF $(DEPDIR)/nip2-toolkitgroupview.Tpo -c -o nip2-toolkitgroupview.obj `if test -f 'toolkitgroupview.c'; then $(CYGPATH_W) 'toolkitgroupview.c'; else $(CYGPATH_W) '$(srcdir)/toolkitgroupview.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-toolkitgroupview.Tpo $(DEPDIR)/nip2-toolkitgroupview.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='toolkitgroupview.c' object='nip2-toolkitgroupview.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-toolkitgroupview.obj `if test -f 'toolkitgroupview.c'; then $(CYGPATH_W) 'toolkitgroupview.c'; else $(CYGPATH_W) '$(srcdir)/toolkitgroupview.c'; fi` nip2-toolkitview.o: toolkitview.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-toolkitview.o -MD -MP -MF $(DEPDIR)/nip2-toolkitview.Tpo -c -o nip2-toolkitview.o `test -f 'toolkitview.c' || echo '$(srcdir)/'`toolkitview.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-toolkitview.Tpo $(DEPDIR)/nip2-toolkitview.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='toolkitview.c' object='nip2-toolkitview.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-toolkitview.o `test -f 'toolkitview.c' || echo '$(srcdir)/'`toolkitview.c nip2-toolkitview.obj: toolkitview.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-toolkitview.obj -MD -MP -MF $(DEPDIR)/nip2-toolkitview.Tpo -c -o nip2-toolkitview.obj `if test -f 'toolkitview.c'; then $(CYGPATH_W) 'toolkitview.c'; else $(CYGPATH_W) '$(srcdir)/toolkitview.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-toolkitview.Tpo $(DEPDIR)/nip2-toolkitview.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='toolkitview.c' object='nip2-toolkitview.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-toolkitview.obj `if test -f 'toolkitview.c'; then $(CYGPATH_W) 'toolkitview.c'; else $(CYGPATH_W) '$(srcdir)/toolkitview.c'; fi` nip2-defbrowser.o: defbrowser.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-defbrowser.o -MD -MP -MF $(DEPDIR)/nip2-defbrowser.Tpo -c -o nip2-defbrowser.o `test -f 'defbrowser.c' || echo '$(srcdir)/'`defbrowser.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-defbrowser.Tpo $(DEPDIR)/nip2-defbrowser.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='defbrowser.c' object='nip2-defbrowser.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-defbrowser.o `test -f 'defbrowser.c' || echo '$(srcdir)/'`defbrowser.c nip2-defbrowser.obj: defbrowser.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-defbrowser.obj -MD -MP -MF $(DEPDIR)/nip2-defbrowser.Tpo -c -o nip2-defbrowser.obj `if test -f 'defbrowser.c'; then $(CYGPATH_W) 'defbrowser.c'; else $(CYGPATH_W) '$(srcdir)/defbrowser.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-defbrowser.Tpo $(DEPDIR)/nip2-defbrowser.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='defbrowser.c' object='nip2-defbrowser.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-defbrowser.obj `if test -f 'defbrowser.c'; then $(CYGPATH_W) 'defbrowser.c'; else $(CYGPATH_W) '$(srcdir)/defbrowser.c'; fi` nip2-toolkitbrowser.o: toolkitbrowser.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-toolkitbrowser.o -MD -MP -MF $(DEPDIR)/nip2-toolkitbrowser.Tpo -c -o nip2-toolkitbrowser.o `test -f 'toolkitbrowser.c' || echo '$(srcdir)/'`toolkitbrowser.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-toolkitbrowser.Tpo $(DEPDIR)/nip2-toolkitbrowser.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='toolkitbrowser.c' object='nip2-toolkitbrowser.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-toolkitbrowser.o `test -f 'toolkitbrowser.c' || echo '$(srcdir)/'`toolkitbrowser.c nip2-toolkitbrowser.obj: toolkitbrowser.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-toolkitbrowser.obj -MD -MP -MF $(DEPDIR)/nip2-toolkitbrowser.Tpo -c -o nip2-toolkitbrowser.obj `if test -f 'toolkitbrowser.c'; then $(CYGPATH_W) 'toolkitbrowser.c'; else $(CYGPATH_W) '$(srcdir)/toolkitbrowser.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-toolkitbrowser.Tpo $(DEPDIR)/nip2-toolkitbrowser.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='toolkitbrowser.c' object='nip2-toolkitbrowser.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-toolkitbrowser.obj `if test -f 'toolkitbrowser.c'; then $(CYGPATH_W) 'toolkitbrowser.c'; else $(CYGPATH_W) '$(srcdir)/toolkitbrowser.c'; fi` nip2-toolview.o: toolview.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-toolview.o -MD -MP -MF $(DEPDIR)/nip2-toolview.Tpo -c -o nip2-toolview.o `test -f 'toolview.c' || echo '$(srcdir)/'`toolview.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-toolview.Tpo $(DEPDIR)/nip2-toolview.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='toolview.c' object='nip2-toolview.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-toolview.o `test -f 'toolview.c' || echo '$(srcdir)/'`toolview.c nip2-toolview.obj: toolview.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-toolview.obj -MD -MP -MF $(DEPDIR)/nip2-toolview.Tpo -c -o nip2-toolview.obj `if test -f 'toolview.c'; then $(CYGPATH_W) 'toolview.c'; else $(CYGPATH_W) '$(srcdir)/toolview.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-toolview.Tpo $(DEPDIR)/nip2-toolview.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='toolview.c' object='nip2-toolview.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-toolview.obj `if test -f 'toolview.c'; then $(CYGPATH_W) 'toolview.c'; else $(CYGPATH_W) '$(srcdir)/toolview.c'; fi` nip2-trace.o: trace.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-trace.o -MD -MP -MF $(DEPDIR)/nip2-trace.Tpo -c -o nip2-trace.o `test -f 'trace.c' || echo '$(srcdir)/'`trace.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-trace.Tpo $(DEPDIR)/nip2-trace.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='trace.c' object='nip2-trace.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-trace.o `test -f 'trace.c' || echo '$(srcdir)/'`trace.c nip2-trace.obj: trace.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-trace.obj -MD -MP -MF $(DEPDIR)/nip2-trace.Tpo -c -o nip2-trace.obj `if test -f 'trace.c'; then $(CYGPATH_W) 'trace.c'; else $(CYGPATH_W) '$(srcdir)/trace.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-trace.Tpo $(DEPDIR)/nip2-trace.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='trace.c' object='nip2-trace.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-trace.obj `if test -f 'trace.c'; then $(CYGPATH_W) 'trace.c'; else $(CYGPATH_W) '$(srcdir)/trace.c'; fi` nip2-tree.o: tree.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-tree.o -MD -MP -MF $(DEPDIR)/nip2-tree.Tpo -c -o nip2-tree.o `test -f 'tree.c' || echo '$(srcdir)/'`tree.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-tree.Tpo $(DEPDIR)/nip2-tree.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tree.c' object='nip2-tree.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-tree.o `test -f 'tree.c' || echo '$(srcdir)/'`tree.c nip2-tree.obj: tree.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-tree.obj -MD -MP -MF $(DEPDIR)/nip2-tree.Tpo -c -o nip2-tree.obj `if test -f 'tree.c'; then $(CYGPATH_W) 'tree.c'; else $(CYGPATH_W) '$(srcdir)/tree.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-tree.Tpo $(DEPDIR)/nip2-tree.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tree.c' object='nip2-tree.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-tree.obj `if test -f 'tree.c'; then $(CYGPATH_W) 'tree.c'; else $(CYGPATH_W) '$(srcdir)/tree.c'; fi` nip2-tslider.o: tslider.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-tslider.o -MD -MP -MF $(DEPDIR)/nip2-tslider.Tpo -c -o nip2-tslider.o `test -f 'tslider.c' || echo '$(srcdir)/'`tslider.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-tslider.Tpo $(DEPDIR)/nip2-tslider.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tslider.c' object='nip2-tslider.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-tslider.o `test -f 'tslider.c' || echo '$(srcdir)/'`tslider.c nip2-tslider.obj: tslider.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-tslider.obj -MD -MP -MF $(DEPDIR)/nip2-tslider.Tpo -c -o nip2-tslider.obj `if test -f 'tslider.c'; then $(CYGPATH_W) 'tslider.c'; else $(CYGPATH_W) '$(srcdir)/tslider.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-tslider.Tpo $(DEPDIR)/nip2-tslider.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tslider.c' object='nip2-tslider.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-tslider.obj `if test -f 'tslider.c'; then $(CYGPATH_W) 'tslider.c'; else $(CYGPATH_W) '$(srcdir)/tslider.c'; fi` nip2-util.o: util.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-util.o -MD -MP -MF $(DEPDIR)/nip2-util.Tpo -c -o nip2-util.o `test -f 'util.c' || echo '$(srcdir)/'`util.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-util.Tpo $(DEPDIR)/nip2-util.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util.c' object='nip2-util.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-util.o `test -f 'util.c' || echo '$(srcdir)/'`util.c nip2-util.obj: util.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-util.obj -MD -MP -MF $(DEPDIR)/nip2-util.Tpo -c -o nip2-util.obj `if test -f 'util.c'; then $(CYGPATH_W) 'util.c'; else $(CYGPATH_W) '$(srcdir)/util.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-util.Tpo $(DEPDIR)/nip2-util.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='util.c' object='nip2-util.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-util.obj `if test -f 'util.c'; then $(CYGPATH_W) 'util.c'; else $(CYGPATH_W) '$(srcdir)/util.c'; fi` nip2-view.o: view.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-view.o -MD -MP -MF $(DEPDIR)/nip2-view.Tpo -c -o nip2-view.o `test -f 'view.c' || echo '$(srcdir)/'`view.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-view.Tpo $(DEPDIR)/nip2-view.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='view.c' object='nip2-view.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-view.o `test -f 'view.c' || echo '$(srcdir)/'`view.c nip2-view.obj: view.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-view.obj -MD -MP -MF $(DEPDIR)/nip2-view.Tpo -c -o nip2-view.obj `if test -f 'view.c'; then $(CYGPATH_W) 'view.c'; else $(CYGPATH_W) '$(srcdir)/view.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-view.Tpo $(DEPDIR)/nip2-view.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='view.c' object='nip2-view.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-view.obj `if test -f 'view.c'; then $(CYGPATH_W) 'view.c'; else $(CYGPATH_W) '$(srcdir)/view.c'; fi` nip2-call.o: call.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-call.o -MD -MP -MF $(DEPDIR)/nip2-call.Tpo -c -o nip2-call.o `test -f 'call.c' || echo '$(srcdir)/'`call.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-call.Tpo $(DEPDIR)/nip2-call.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='call.c' object='nip2-call.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-call.o `test -f 'call.c' || echo '$(srcdir)/'`call.c nip2-call.obj: call.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-call.obj -MD -MP -MF $(DEPDIR)/nip2-call.Tpo -c -o nip2-call.obj `if test -f 'call.c'; then $(CYGPATH_W) 'call.c'; else $(CYGPATH_W) '$(srcdir)/call.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-call.Tpo $(DEPDIR)/nip2-call.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='call.c' object='nip2-call.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-call.obj `if test -f 'call.c'; then $(CYGPATH_W) 'call.c'; else $(CYGPATH_W) '$(srcdir)/call.c'; fi` nip2-cache.o: cache.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-cache.o -MD -MP -MF $(DEPDIR)/nip2-cache.Tpo -c -o nip2-cache.o `test -f 'cache.c' || echo '$(srcdir)/'`cache.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-cache.Tpo $(DEPDIR)/nip2-cache.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='cache.c' object='nip2-cache.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-cache.o `test -f 'cache.c' || echo '$(srcdir)/'`cache.c nip2-cache.obj: cache.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-cache.obj -MD -MP -MF $(DEPDIR)/nip2-cache.Tpo -c -o nip2-cache.obj `if test -f 'cache.c'; then $(CYGPATH_W) 'cache.c'; else $(CYGPATH_W) '$(srcdir)/cache.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-cache.Tpo $(DEPDIR)/nip2-cache.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='cache.c' object='nip2-cache.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-cache.obj `if test -f 'cache.c'; then $(CYGPATH_W) 'cache.c'; else $(CYGPATH_W) '$(srcdir)/cache.c'; fi` nip2-watch.o: watch.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-watch.o -MD -MP -MF $(DEPDIR)/nip2-watch.Tpo -c -o nip2-watch.o `test -f 'watch.c' || echo '$(srcdir)/'`watch.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-watch.Tpo $(DEPDIR)/nip2-watch.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='watch.c' object='nip2-watch.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-watch.o `test -f 'watch.c' || echo '$(srcdir)/'`watch.c nip2-watch.obj: watch.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-watch.obj -MD -MP -MF $(DEPDIR)/nip2-watch.Tpo -c -o nip2-watch.obj `if test -f 'watch.c'; then $(CYGPATH_W) 'watch.c'; else $(CYGPATH_W) '$(srcdir)/watch.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-watch.Tpo $(DEPDIR)/nip2-watch.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='watch.c' object='nip2-watch.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-watch.obj `if test -f 'watch.c'; then $(CYGPATH_W) 'watch.c'; else $(CYGPATH_W) '$(srcdir)/watch.c'; fi` nip2-workspace.o: workspace.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-workspace.o -MD -MP -MF $(DEPDIR)/nip2-workspace.Tpo -c -o nip2-workspace.o `test -f 'workspace.c' || echo '$(srcdir)/'`workspace.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-workspace.Tpo $(DEPDIR)/nip2-workspace.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='workspace.c' object='nip2-workspace.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-workspace.o `test -f 'workspace.c' || echo '$(srcdir)/'`workspace.c nip2-workspace.obj: workspace.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-workspace.obj -MD -MP -MF $(DEPDIR)/nip2-workspace.Tpo -c -o nip2-workspace.obj `if test -f 'workspace.c'; then $(CYGPATH_W) 'workspace.c'; else $(CYGPATH_W) '$(srcdir)/workspace.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-workspace.Tpo $(DEPDIR)/nip2-workspace.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='workspace.c' object='nip2-workspace.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-workspace.obj `if test -f 'workspace.c'; then $(CYGPATH_W) 'workspace.c'; else $(CYGPATH_W) '$(srcdir)/workspace.c'; fi` nip2-workspacegroup.o: workspacegroup.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-workspacegroup.o -MD -MP -MF $(DEPDIR)/nip2-workspacegroup.Tpo -c -o nip2-workspacegroup.o `test -f 'workspacegroup.c' || echo '$(srcdir)/'`workspacegroup.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-workspacegroup.Tpo $(DEPDIR)/nip2-workspacegroup.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='workspacegroup.c' object='nip2-workspacegroup.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-workspacegroup.o `test -f 'workspacegroup.c' || echo '$(srcdir)/'`workspacegroup.c nip2-workspacegroup.obj: workspacegroup.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-workspacegroup.obj -MD -MP -MF $(DEPDIR)/nip2-workspacegroup.Tpo -c -o nip2-workspacegroup.obj `if test -f 'workspacegroup.c'; then $(CYGPATH_W) 'workspacegroup.c'; else $(CYGPATH_W) '$(srcdir)/workspacegroup.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-workspacegroup.Tpo $(DEPDIR)/nip2-workspacegroup.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='workspacegroup.c' object='nip2-workspacegroup.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-workspacegroup.obj `if test -f 'workspacegroup.c'; then $(CYGPATH_W) 'workspacegroup.c'; else $(CYGPATH_W) '$(srcdir)/workspacegroup.c'; fi` nip2-workspacegroupview.o: workspacegroupview.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-workspacegroupview.o -MD -MP -MF $(DEPDIR)/nip2-workspacegroupview.Tpo -c -o nip2-workspacegroupview.o `test -f 'workspacegroupview.c' || echo '$(srcdir)/'`workspacegroupview.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-workspacegroupview.Tpo $(DEPDIR)/nip2-workspacegroupview.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='workspacegroupview.c' object='nip2-workspacegroupview.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-workspacegroupview.o `test -f 'workspacegroupview.c' || echo '$(srcdir)/'`workspacegroupview.c nip2-workspacegroupview.obj: workspacegroupview.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-workspacegroupview.obj -MD -MP -MF $(DEPDIR)/nip2-workspacegroupview.Tpo -c -o nip2-workspacegroupview.obj `if test -f 'workspacegroupview.c'; then $(CYGPATH_W) 'workspacegroupview.c'; else $(CYGPATH_W) '$(srcdir)/workspacegroupview.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-workspacegroupview.Tpo $(DEPDIR)/nip2-workspacegroupview.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='workspacegroupview.c' object='nip2-workspacegroupview.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-workspacegroupview.obj `if test -f 'workspacegroupview.c'; then $(CYGPATH_W) 'workspacegroupview.c'; else $(CYGPATH_W) '$(srcdir)/workspacegroupview.c'; fi` nip2-workspacedefs.o: workspacedefs.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-workspacedefs.o -MD -MP -MF $(DEPDIR)/nip2-workspacedefs.Tpo -c -o nip2-workspacedefs.o `test -f 'workspacedefs.c' || echo '$(srcdir)/'`workspacedefs.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-workspacedefs.Tpo $(DEPDIR)/nip2-workspacedefs.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='workspacedefs.c' object='nip2-workspacedefs.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-workspacedefs.o `test -f 'workspacedefs.c' || echo '$(srcdir)/'`workspacedefs.c nip2-workspacedefs.obj: workspacedefs.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-workspacedefs.obj -MD -MP -MF $(DEPDIR)/nip2-workspacedefs.Tpo -c -o nip2-workspacedefs.obj `if test -f 'workspacedefs.c'; then $(CYGPATH_W) 'workspacedefs.c'; else $(CYGPATH_W) '$(srcdir)/workspacedefs.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-workspacedefs.Tpo $(DEPDIR)/nip2-workspacedefs.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='workspacedefs.c' object='nip2-workspacedefs.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-workspacedefs.obj `if test -f 'workspacedefs.c'; then $(CYGPATH_W) 'workspacedefs.c'; else $(CYGPATH_W) '$(srcdir)/workspacedefs.c'; fi` nip2-workspaceroot.o: workspaceroot.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-workspaceroot.o -MD -MP -MF $(DEPDIR)/nip2-workspaceroot.Tpo -c -o nip2-workspaceroot.o `test -f 'workspaceroot.c' || echo '$(srcdir)/'`workspaceroot.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-workspaceroot.Tpo $(DEPDIR)/nip2-workspaceroot.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='workspaceroot.c' object='nip2-workspaceroot.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-workspaceroot.o `test -f 'workspaceroot.c' || echo '$(srcdir)/'`workspaceroot.c nip2-workspaceroot.obj: workspaceroot.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-workspaceroot.obj -MD -MP -MF $(DEPDIR)/nip2-workspaceroot.Tpo -c -o nip2-workspaceroot.obj `if test -f 'workspaceroot.c'; then $(CYGPATH_W) 'workspaceroot.c'; else $(CYGPATH_W) '$(srcdir)/workspaceroot.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-workspaceroot.Tpo $(DEPDIR)/nip2-workspaceroot.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='workspaceroot.c' object='nip2-workspaceroot.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-workspaceroot.obj `if test -f 'workspaceroot.c'; then $(CYGPATH_W) 'workspaceroot.c'; else $(CYGPATH_W) '$(srcdir)/workspaceroot.c'; fi` nip2-workspaceview.o: workspaceview.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-workspaceview.o -MD -MP -MF $(DEPDIR)/nip2-workspaceview.Tpo -c -o nip2-workspaceview.o `test -f 'workspaceview.c' || echo '$(srcdir)/'`workspaceview.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-workspaceview.Tpo $(DEPDIR)/nip2-workspaceview.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='workspaceview.c' object='nip2-workspaceview.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-workspaceview.o `test -f 'workspaceview.c' || echo '$(srcdir)/'`workspaceview.c nip2-workspaceview.obj: workspaceview.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -MT nip2-workspaceview.obj -MD -MP -MF $(DEPDIR)/nip2-workspaceview.Tpo -c -o nip2-workspaceview.obj `if test -f 'workspaceview.c'; then $(CYGPATH_W) 'workspaceview.c'; else $(CYGPATH_W) '$(srcdir)/workspaceview.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nip2-workspaceview.Tpo $(DEPDIR)/nip2-workspaceview.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='workspaceview.c' object='nip2-workspaceview.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nip2_CFLAGS) $(CFLAGS) -c -o nip2-workspaceview.obj `if test -f 'workspaceview.c'; then $(CYGPATH_W) 'workspaceview.c'; else $(CYGPATH_W) '$(srcdir)/workspaceview.c'; fi` .l.c: $(AM_V_LEX)$(am__skiplex) $(SHELL) $(YLWRAP) $< $(LEX_OUTPUT_ROOT).c $@ -- $(LEXCOMPILE) mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-hook check-am: all-am check: check-recursive all-am: Makefile $(PROGRAMS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(bindir)"; 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: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) 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." -rm -f lex.c -rm -f parse.c clean: clean-recursive clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-binPROGRAMS 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 -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-binPROGRAMS .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-binPROGRAMS clean-generic clean-libtool \ cscopelist-am ctags ctags-am 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-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 installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-binPROGRAMS .PRECIOUS: Makefile helpindex.h: ./makehelpindex.pl $(prefix) > helpindex.h nipmarshal.h: glib-genmarshal --prefix=nip --header nipmarshal.list > nipmarshal.h nipmarshal.c: echo "#include \"nipmarshal.h\"" > nipmarshal.c glib-genmarshal --prefix=nip --body nipmarshal.list >> nipmarshal.c .rc.o: cp ${top_srcdir}/share/nip2/data/nip2-icon.ico . ${WINDRES} $< -o $@ # we have to replace the standard .y.c rule: we are a bison-only GLR parser, # so we can't use autoconf's preferred -y yacc-compatibility stuff .y.c: $(BISON) --defines=$*.h -o $*.c $< nip2-model.o model.o: model.c parse.c dist-hook: ${RM} ${distdir}/parse.c ${distdir}/lex.c # 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: nip2-8.7.0/src/prefs.c0000644000175000017500000001273713224651032011401 00000000000000/* preferences dialog */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #include "ip.h" /* #define DEBUG */ static iDialogClass *parent_class = NULL; static void prefs_destroy( GtkObject *object ) { Prefs *prefs = PREFS( object ); #ifdef DEBUG printf( "prefs_destroy\n" ); #endif /*DEBUG*/ if( prefs->ws ) { Workspacegroup *wsg = workspace_get_workspacegroup( prefs->ws ); Filemodel *filemodel = FILEMODEL( wsg ); /* Force a recalc, in case we've changed the autorecalc * settings. Also does a scan on any widgets. */ symbol_recalculate_all_force( TRUE ); if( filemodel->modified && filemodel_top_save( filemodel, filemodel->filename ) ) filemodel_set_modified( filemodel, FALSE ); } /* My instance destroy stuff. */ FREESID( prefs->destroy_sid, prefs->ws ); IM_FREE( prefs->caption_filter ); prefs->ws = NULL; GTK_OBJECT_CLASS( parent_class )->destroy( object ); } static void prefs_build( GtkWidget *widget ) { Prefs *prefs = PREFS( widget ); GtkWidget *work; #ifdef DEBUG printf( "prefs_build: %p\n", prefs ); #endif /*DEBUG*/ /* Call all builds in superclasses. */ IWINDOW_CLASS( parent_class )->build( widget ); work = IDIALOG( prefs )->work; prefs->pwview = PREFWORKSPACEVIEW( prefworkspaceview_new() ); prefworkspaceview_set_caption_filter( prefs->pwview, prefs->caption_filter ); view_link( VIEW( prefs->pwview ), MODEL( prefs->ws ), NULL ); if( prefs->caption_filter ) { gtk_box_pack_start( GTK_BOX( work ), GTK_WIDGET( prefs->pwview ), TRUE, TRUE, 0 ); gtk_widget_show( GTK_WIDGET( prefs->pwview ) ); } else { /* No caption_filter set, so this is probably a big prefs * window. Build a scrolledwindow for the content. */ GtkWidget *window; window = gtk_scrolled_window_new( NULL, NULL ); gtk_scrolled_window_set_policy( GTK_SCROLLED_WINDOW( window ), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC ); gtk_scrolled_window_add_with_viewport( GTK_SCROLLED_WINDOW( window ), GTK_WIDGET( prefs->pwview ) ); gtk_viewport_set_shadow_type( GTK_VIEWPORT( GTK_BIN( window )->child ), GTK_SHADOW_NONE ); gtk_box_pack_start( GTK_BOX( work ), GTK_WIDGET( window ), TRUE, TRUE, 0 ); gtk_widget_show( GTK_WIDGET( prefs->pwview ) ); gtk_widget_show( window ); } } static void prefs_class_init( PrefsClass *class ) { GtkObjectClass *gobject_class = (GtkObjectClass *) class; iWindowClass *iwindow_class = (iWindowClass *) class; parent_class = g_type_class_peek_parent( class ); gobject_class->destroy = prefs_destroy; iwindow_class->build = prefs_build; /* Create signals. */ /* Init methods. */ } static void prefs_init( Prefs *prefs ) { prefs->ws = NULL; prefs->destroy_sid = 0; } GType prefs_get_type( void ) { static GType type = 0; if( !type ) { static const GTypeInfo info = { sizeof( PrefsClass ), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) prefs_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof( Prefs ), 32, /* n_preallocs */ (GInstanceInitFunc) prefs_init, }; type = g_type_register_static( TYPE_IDIALOG, "Prefs", &info, 0 ); } return( type ); } static void prefs_workspace_destroy_cb( Workspace *ws, Prefs *prefs ) { prefs->destroy_sid = 0; prefs->ws = NULL; iwindow_kill( IWINDOW( prefs ) ); } static void prefs_link( Prefs *prefs, Workspace *ws ) { g_assert( !prefs->ws ); prefs->ws = ws; prefs->ws->mode = WORKSPACE_MODE_NOEDIT; prefs->destroy_sid = g_signal_connect( ws, "destroy", G_CALLBACK( prefs_workspace_destroy_cb ), prefs ); } static gint prefs_column_compare( Column *a, Column *b ) { return( b->y - a->y ); } Prefs * prefs_new( const char *caption_filter ) { Symbol *wsr_sym = main_workspaceroot->sym; Symbol *ws_sym = SYMBOL( icontainer_child_lookup( ICONTAINER( wsr_sym->expr->compile ), "Preferences" ) ); Prefs *prefs; if( !ws_sym ) { /* Probably failed to load prefs on startup for some reason. */ error_top( _( "Unable to display preferences." ) ); error_sub( _( "No preferences workspace was found. " "Preferences probably failed to load when " "%s started." ), PACKAGE ); return( NULL ); } icontainer_custom_sort( ICONTAINER( ws_sym->ws ), (GCompareFunc) prefs_column_compare ); prefs = PREFS( g_object_new( TYPE_PREFS, NULL ) ); IM_SETSTR( prefs->caption_filter, caption_filter ); prefs_link( prefs, ws_sym->ws ); return( prefs ); } gboolean prefs_set( const char *name, const char *fmt, ... ) { Watch *watch; if( main_watchgroup && (watch = watch_find( main_watchgroup, name )) ) { va_list args; va_start( args, fmt ); watch_vset( watch, fmt, args ); va_end( args ); } return( TRUE ); } nip2-8.7.0/src/secret.c0000644000175000017500000001705013224651032011540 00000000000000/* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ /* Just show secrets we added #define DEBUG_ADD */ #include "ip.h" /* build secret sets for exprs cases: fred a = jim 12 { jim b = a + b; } jim refers to a parameter in an enclosing scope ... we add extra secret parameters to jim like this: fred a = jim [a] 12 { jim [a] b = a + b; } across class boundaries: fred a = jim { jim = class { b = a; } } now fred.jim.b refers to fred.a ... a needs to be added to the secrets on jim's constructor like this: fred a = jim [a] { jim [a] = class { b = a; } } if the secret is a class member, pass "this" instead and the inner thing then gets from that fred a = class { jim [fred.this] b = fred.this.a + b; } if the inner thing is also a class, need to get in two stages ... first get the right this, then get from that fred a = class { jim [fred.this] = class { b = jim.this.fred.this.a; } } need to work for any sort of nesting of functions and classes fred = class { b = c { c = this; } } not just params ... can involve locals of parents */ /* Add a secret. Set changed if we make a change. */ static void * secret_add( Symbol *secret, Compile *compile, gboolean *changed ) { Compile *parent = compile_get_parent( compile ); #ifdef DEBUG printf( "secret_add: considering secret " ); symbol_name_print( secret ); printf( "for " ); compile_name_print( compile ); printf( " ...\n" ); #endif /*DEBUG*/ /* If expr is a class, don't add our own this. */ if( is_class( compile ) && secret == compile->this ) return( NULL ); /* If expr already has secret as a param or secret, don't add again. */ if( g_slist_find( compile->secret, secret ) || g_slist_find( compile->param, secret ) ) return( NULL ); /* If secret is a member (param, func, whatever), add secret's * enclosing "this" instead ... expr can then get secret from there. * Unless the secret is already a "this", of course. */ if( is_class( COMPILE( ICONTAINER( secret )->parent ) ) && !is_this( secret ) ) secret = COMPILE( ICONTAINER( secret )->parent )->this; /* If compile is a member (and not a class itself), add the secret to * compile's constructor instead ... compile can get from "this". */ if( is_class( parent ) && secret != parent->this && !is_class( compile ) ) compile = parent; /* We may have moved stuff about ... check for dupes again. */ if( g_slist_find( compile->secret, secret ) || g_slist_find( compile->param, secret ) ) return( NULL ); #ifdef DEBUG_ADD printf( "secret_add: adding secret " ); symbol_name_print( secret ); printf( "to " ); compile_name_print( compile ); printf( "\n" ); #endif /*DEBUG_ADD*/ compile->secret = g_slist_append( compile->secret, secret ); compile->nsecret += 1; *changed = TRUE; return( NULL ); } /* If compile is a member, then secret lists are easy ... just use "this". */ static void * secret_set_class( Compile *compile ) { if( is_class( compile_get_parent( compile ) ) ) { Compile *parent = compile_get_parent( compile ); Symbol *ths = parent->this; gboolean changed; if( secret_add( ths, compile, &changed ) ) return( (void *) ths ); } return( NULL ); } /* child is one of compile's children ... is it reference to a parameter * in an enclosing scope? If yes, we've found a secret! */ static void * secret_is_nonlocal( Symbol *child, Compile *compile ) { gboolean changed; if( child->type == SYM_PARAM && COMPILE( ICONTAINER( child )->parent ) != compile ) { if( secret_add( child, compile, &changed ) ) return( child ); } return( NULL ); } /* Make initial secret list ... if this is a member/function, search for * references to symbols in an enclosing scope. */ static void * secret_find_nonlocal( Compile *compile ) { /* Look for any secrets. */ if( slist_map( compile->children, (SListMapFn) secret_is_nonlocal, compile ) ) return( compile ); return( NULL ); } /* Does child have any secrets that compile does not? */ static void * secret_test( Symbol *child, Compile *compile, gboolean *changed ) { /* If this is a parameter or a zombie, nothing to do. */ if( !is_value( child ) ) return( NULL ); if( child->expr->compile ) if( slist_map2( child->expr->compile->secret, (SListMap2Fn) secret_add, compile, changed ) ) return( child ); return( NULL ); } /* Close secret list ... if sym has a child with a secret sym does not have, * sym needs child's secret too. */ static void * secret_close( Compile *compile, gboolean *changed ) { if( is_class( compile ) ) { /* For classes, need to consider all of their locals. Any * secrets our locals have, we need too. */ if( icontainer_map( ICONTAINER( compile ), (icontainer_map_fn) secret_test, compile, changed ) ) return( compile ); } else { /* Look at our immediate children, any of them have secrets * we don't? */ if( slist_map2( compile->children, (SListMap2Fn) secret_test, compile, changed ) ) return( compile ); } return( NULL ); } #ifdef DEBUG /* Sub-fn of below ... add param as a secret to sym. */ static void * secret_all_add( Compile *compile, Symbol *param ) { gboolean changed; return( secret_add( param, compile, &changed ) ); } /* Sub-fn of below ... add param as a secret for all of compile's locals. */ static void * secret_all_sym( Symbol *param, Compile *compile ) { return( compile_map_all( compile, (map_compile_fn) secret_all_add, param ) ); } /* Make syms params and secrets secrets for all sub-syms. Only handy for * debugging. */ static void * secret_all( Compile *compile ) { if( slist_map( compile->param, (SListMapFn) secret_all_sym, compile ) || slist_map( compile->secret, (SListMapFn) secret_all_sym, compile ) ) return( compile ); return( NULL ); } #endif /*DEBUG*/ /* Make secret param lists for compile and all of it's sub-defs. */ void secret_build( Compile *compile ) { gboolean changed; #ifdef DEBUG_ADD printf( "secret_build: " ); symbol_name_print( compile->sym ); printf( "\n" ); #endif /*DEBUG_ADD*/ /* Look for class definitions ... all members of a * class should take a single secret, their "this" parameter. * When they in turn call their locals, they can get the * secrets they need from "this". */ (void) compile_map_all( compile, (map_compile_fn) secret_set_class, NULL ); /* Now look for non-member functions ... if they reference * parameters in an enclosing scope, add that parameter to * the secret list. */ (void) compile_map_all( compile, (map_compile_fn) secret_find_nonlocal, NULL ); /* Now take the closure of the secret lists ... have to * fix() this to get limit of secret_close(). */ do { changed = FALSE; (void) compile_map_all( compile, (map_compile_fn) secret_close, &changed ); } while( changed ); } nip2-8.7.0/src/imageheader.h0000644000175000017500000000340713224651032012514 00000000000000/* display an image header */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_IMAGEHEADER (imageheader_get_type()) #define IMAGEHEADER( obj ) \ (GTK_CHECK_CAST( (obj), TYPE_IMAGEHEADER, Imageheader )) #define IMAGEHEADER_CLASS( klass ) \ (GTK_CHECK_CLASS_CAST( (klass), TYPE_IMAGEHEADER, ImageheaderClass )) #define IS_IMAGEHEADER( obj ) (GTK_CHECK_TYPE( (obj), TYPE_IMAGEHEADER )) #define IS_IMAGEHEADER_CLASS( klass ) \ (GTK_CHECK_CLASS_TYPE( (klass), TYPE_IMAGEHEADER )) typedef struct _Imageheader { iDialog parent; iImage *iimage; GtkListStore *store; /* Model for list view */ GtkTreeModel *filter; /* After filtering with search box */ GtkWidget *tree; /* Displayed tree */ GtkWidget *entry; /* Search widget */ GtkWidget *history; } Imageheader; typedef struct _ImageheaderClass { iDialogClass parent_class; /* My methods. */ } ImageheaderClass; GtkType imageheader_get_type( void ); GtkWidget *imageheader_new( iImage *iimage ); nip2-8.7.0/src/colourview.c0000644000175000017500000001153613224651032012454 00000000000000/* run the display for an image in a workspace */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #include "ip.h" static GraphicviewClass *parent_class = NULL; static void colourview_link( View *view, Model *model, View *parent ) { Colourview *colourview = COLOURVIEW( view ); Rowview *rview = ROWVIEW( parent->parent ); VIEW_CLASS( parent_class )->link( view, model, parent ); rowview_menu_attach( rview, GTK_WIDGET( colourview->colourdisplay ) ); } static void colourview_refresh( vObject *vobject ) { Colourview *colourview = COLOURVIEW( vobject ); Colour *colour = COLOUR( vobject->iobject ); #ifdef DEBUG printf( "colourview_refresh\n" ); #endif /*DEBUG*/ conversion_set_image( colourview->conv, colour_ii_new( colour ) ); set_gcaption( colourview->label, "%s", vips_buf_all( &colour->caption ) ); VOBJECT_CLASS( parent_class )->refresh( vobject ); } static void colourview_class_init( ColourviewClass *class ) { vObjectClass *vobject_class = (vObjectClass *) class; ViewClass *view_class = (ViewClass *) class; parent_class = g_type_class_peek_parent( class ); /* Create signals. */ /* Init methods. */ vobject_class->refresh = colourview_refresh; view_class->link = colourview_link; } static void colourview_area_changed_cb( Imagedisplay *id, Rect *area, Colourview *colourview ) { double rgb[4]; imageinfo_to_rgb( id->conv->ii, rgb ); colour_set_rgb( COLOUR( VOBJECT( colourview )->iobject ), rgb ); } static void colourview_doubleclick_one_cb( GtkWidget *widget, GdkEvent *event, Colourview *colourview ) { Heapmodel *heapmodel = HEAPMODEL( VOBJECT( colourview )->iobject ); Row *row = heapmodel->row; row_select_modifier( row, event->button.state ); } static void colourview_doubleclick_two_cb( GtkWidget *widget, GdkEvent *event, Colourview *colourview ) { model_edit( widget, MODEL( VOBJECT( colourview )->iobject ) ); } static void colourview_init( Colourview *colourview ) { GtkWidget *eb; GtkWidget *vbox; #ifdef DEBUG printf( "colourview_init\n" ); #endif /*DEBUG*/ eb = gtk_event_box_new(); gtk_widget_add_events( GTK_WIDGET( eb ), GDK_POINTER_MOTION_HINT_MASK ); gtk_box_pack_start( GTK_BOX( colourview ), eb, FALSE, FALSE, 0 ); vbox = gtk_vbox_new( FALSE, 0 ); gtk_container_add( GTK_CONTAINER( eb ), vbox ); gtk_widget_show( vbox ); colourview->colourdisplay = colourdisplay_new( NULL ); colourview->conv = IMAGEDISPLAY( colourview->colourdisplay )->conv; gtk_widget_set_size_request( GTK_WIDGET( colourview->colourdisplay ), DISPLAY_THUMBNAIL, DISPLAY_THUMBNAIL ); gtk_box_pack_start( GTK_BOX( vbox ), GTK_WIDGET( colourview->colourdisplay ), FALSE, FALSE, 0 ); g_signal_connect( colourview->colourdisplay, "area_changed", G_CALLBACK( colourview_area_changed_cb ), colourview ); gtk_widget_show( GTK_WIDGET( colourview->colourdisplay ) ); colourview->label = gtk_label_new( "" ); gtk_misc_set_alignment( GTK_MISC( colourview->label ), 0, 0.5 ); gtk_misc_set_padding( GTK_MISC( colourview->label ), 2, 0 ); gtk_box_pack_start( GTK_BOX( vbox ), GTK_WIDGET( colourview->label ), FALSE, FALSE, 0 ); gtk_widget_show( GTK_WIDGET( colourview->label ) ); doubleclick_add( GTK_WIDGET( colourview ), FALSE, DOUBLECLICK_FUNC( colourview_doubleclick_one_cb ), colourview, DOUBLECLICK_FUNC( colourview_doubleclick_two_cb ), colourview ); gtk_widget_set_name( eb, "caption_widget" ); gtk_widget_show( eb ); } GtkType colourview_get_type( void ) { static GtkType colourview_type = 0; if( !colourview_type ) { static const GtkTypeInfo info = { "Colourview", sizeof( Colourview ), sizeof( ColourviewClass ), (GtkClassInitFunc) colourview_class_init, (GtkObjectInitFunc) colourview_init, /* reserved_1 */ NULL, /* reserved_2 */ NULL, (GtkClassInitFunc) NULL, }; colourview_type = gtk_type_unique( TYPE_GRAPHICVIEW, &info ); } return( colourview_type ); } View * colourview_new( void ) { Colourview *colourview = gtk_type_new( TYPE_COLOURVIEW ); return( VIEW( colourview ) ); } nip2-8.7.0/src/symbol.h0000644000175000017500000001270513224651032011567 00000000000000/* Types for the symbol table. */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_SYMBOL (symbol_get_type()) #define SYMBOL( obj ) \ (G_TYPE_CHECK_INSTANCE_CAST( (obj), TYPE_SYMBOL, Symbol )) #define SYMBOL_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_CAST( (klass), TYPE_SYMBOL, SymbolClass)) #define IS_SYMBOL( obj ) \ (G_TYPE_CHECK_INSTANCE_TYPE( (obj), TYPE_SYMBOL )) #define IS_SYMBOL_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_TYPE( (klass), TYPE_SYMBOL )) #define SYMBOL_GET_CLASS( obj ) \ (G_TYPE_INSTANCE_GET_CLASS( (obj), TYPE_SYMBOL, SymbolClass )) /* The types of symbol we can have. */ typedef enum { SYM_VALUE, /* Symbol with a value attached */ SYM_PARAM, /* A parameter to a user function */ SYM_ZOMBIE, /* A referred to but not defined */ SYM_WORKSPACE, /* A loaded workspace */ SYM_WORKSPACEROOT, /* Base of all workspaces */ SYM_ROOT, /* The root symbol */ SYM_EXTERNAL, /* A reference to an external function */ SYM_BUILTIN /* A reference to a built-in function */ } SymbolType; /* A symbol. */ struct _Symbol { Filemodel parent_class; /* The type of this symbol. */ SymbolType type; /* Track during parse. A list of pointers to pointers to this * symbol which we need to patch if we resolve to an outer scope. */ GSList *patch; /* Main expression for this sym. All expressions are icontainer * children of us. */ Expr *expr; /* Base of graph for value of this symbol. Use sym->expr->root to get * value though .. we just hold pointer for GC here. Expressions on * ext_expr have their GC handled by their enclosing Subcolumn. */ Element base; /* Value for this expr */ /* Recomputation links. Use these to work out what to build next. */ gboolean dirty; /* True if this sym needs recalc */ GSList *parents; /* Compiles which refer to this sym */ GSList *topchildren; /* For top syms, all top-level children */ GSList *topparents; /* For top syms, all top-level parents */ int ndirtychildren; /* Number of dirty top syms we refer to */ gboolean leaf; /* True for in recomp set */ /* This is a generated symbol, like $$result, $$fn1, whatever. */ gboolean generated; /* A temporary intermediate symbol generated during parse to hold * stuff until we need it. Don't generate code for these. */ gboolean placeholder; /* X-tras for definitions. */ Tool *tool; /* Tool and toolkit defined in */ /* X-tras for SYM_EXTERNAL ... our im_function. */ im_function *function; /* Function we run */ int fn_nargs; /* Number of args fn needs from nip */ /* X-tras for SYM_BUILTIN ... our function. */ BuiltinInfo *builtin; /* For WORKSPACEROOT ... the wsr we represent. */ Workspaceroot *wsr; /* For WORKSPACE ... the ws we represent. */ Workspace *ws; }; typedef struct _SymbolClass { FilemodelClass parent_class; /* new_value sym->expr has a new value (this signal is fwd'd from sym->expr) */ void (*new_value)( Symbol *sym ); } SymbolClass; GType symbol_get_type( void ); /* All symbols come off this. */ extern Symbol *symbol_root; Symbol *symbol_map_all( Symbol *sym, symbol_map_fn fn, void *a, void *b ); Symbol *symbol_get_parent( Symbol *sym ); Workspace *symbol_get_workspace( Symbol *sym ); Tool *symbol_get_tool( Symbol *sym ); Symbol *symbol_get_scope( Symbol *sym ); void symbol_qualified_name( Symbol *sym, VipsBuf *buf ); void symbol_qualified_name_relative( Symbol *context, Symbol *sym, VipsBuf *buf ); void *symbol_name_error( Symbol *sym, VipsBuf *buf ); const char *symbol_name( Symbol *sym ); void *symbol_name_print( Symbol *sym ); const char *symbol_name_scope( Symbol *sym ); void symbol_name_scope_print( Symbol *sym ); void symbol_new_value( Symbol *sym ); void *symbol_patch_add( void **pnt, Symbol *sym ); Symbol *symbol_root_init( void ); Symbol *symbol_new( Compile *compile, const char *name ); gboolean symbol_rename( Symbol *sym, const char *new_name ); void symbol_error_redefine( Symbol *sym ); Symbol *symbol_new_defining( Compile *compile, const char *name ); Symbol *symbol_new_reference( Compile *compile, const char *name ); void symbol_made( Symbol *sym ); void symbol_not_defined( Symbol *sym ); void *symbol_link_break( Symbol *child, Compile *compile ); gboolean symbol_user_init( Symbol *sym ); gboolean symbol_parameter_init( Symbol *sym ); gboolean symbol_parameter_builtin_init( Symbol *sym ); gboolean symbol_busy( void ); void *symbol_sanity( Symbol *sym ); void symbol_leaf_set_sanity( void ); void *symbol_strip( Symbol *sym ); void symbol_state_change( Symbol *sym ); const char *symbol_get_last_calc( void ); gboolean symbol_recalculate_check( Symbol *sym ); void symbol_recalculate_all_force( gboolean now ); void symbol_recalculate_all( void ); nip2-8.7.0/src/numberview.h0000644000175000017500000000277413224651032012452 00000000000000/* edit a number */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_NUMBERVIEW (numberview_get_type()) #define NUMBERVIEW( obj ) (GTK_CHECK_CAST( (obj), TYPE_NUMBERVIEW, Numberview )) #define NUMBERVIEW_CLASS( klass ) \ (GTK_CHECK_CLASS_CAST( (klass), TYPE_NUMBERVIEW, NumberviewClass )) #define IS_NUMBERVIEW( obj ) (GTK_CHECK_TYPE( (obj), TYPE_NUMBERVIEW )) #define IS_NUMBERVIEW_CLASS( klass ) \ (GTK_CHECK_CLASS_TYPE( (klass), TYPE_NUMBERVIEW )) typedef struct _Numberview { Editview parent_object; } Numberview; typedef struct _NumberviewClass { EditviewClass parent_class; /* My methods. */ } NumberviewClass; GtkType numberview_get_type( void ); View *numberview_new( void ); nip2-8.7.0/src/plotstatus.c0000644000175000017500000001542413224651032012500 00000000000000/* widgets for the status bar */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #include "ip.h" static GtkFrameClass *parent_class = NULL; /* The popup menu. */ static GtkWidget *plotstatus_menu = NULL; static void plotstatus_columns_destroy( Plotstatus *plotstatus ) { int i; for( i = 0; i < plotstatus->columns; i++ ) DESTROY_GTK( plotstatus->label[i] ); IM_FREE( plotstatus->label ); plotstatus->columns = 0; } static void plotstatus_destroy( GtkObject *object ) { Plotstatus *plotstatus; g_return_if_fail( object != NULL ); g_return_if_fail( IS_PLOTSTATUS( object ) ); plotstatus = PLOTSTATUS( object ); #ifdef DEBUG printf( "plotstatus_destroy\n" ); #endif /*DEBUG*/ plotstatus_columns_destroy( plotstatus ); GTK_OBJECT_CLASS( parent_class )->destroy( object ); } /* Hide this plotstatus. */ static void plotstatus_hide_cb( GtkWidget *menu, GtkWidget *host, Plotstatus *plotstatus ) { plotmodel_set_status( plotstatus->plotmodel, FALSE ); } static void plotstatus_class_init( PlotstatusClass *class ) { GtkObjectClass *object_class = (GtkObjectClass *) class; GtkWidget *pane; parent_class = g_type_class_peek_parent( class ); object_class->destroy = plotstatus_destroy; /* Create signals. */ /* Init methods. */ pane = plotstatus_menu = popup_build( _( "Status bar menu" ) ); popup_add_but( pane, GTK_STOCK_CLOSE, POPUP_FUNC( plotstatus_hide_cb ) ); } static void plotstatus_init( Plotstatus *plotstatus ) { GtkWidget *vb, *hb; GtkWidget *eb; plotstatus->plotmodel = NULL; plotstatus->label = NULL; plotstatus->columns = 0; gtk_frame_set_shadow_type( GTK_FRAME( plotstatus ), GTK_SHADOW_OUT ); eb = gtk_event_box_new(); gtk_container_add( GTK_CONTAINER( plotstatus ), eb ); popup_attach( eb, plotstatus_menu, plotstatus ); vb = gtk_vbox_new( FALSE, 0 ); gtk_container_set_border_width( GTK_CONTAINER( vb ), 1 ); gtk_container_add( GTK_CONTAINER( eb ), vb ); plotstatus->top = gtk_label_new( "" ); gtk_misc_set_alignment( GTK_MISC( plotstatus->top ), 0.0, 0.5 ); gtk_box_pack_start( GTK_BOX( vb ), plotstatus->top, TRUE, TRUE, 0 ); hb = gtk_hbox_new( FALSE, 5 ); gtk_box_pack_start( GTK_BOX( vb ), hb, TRUE, TRUE, 0 ); plotstatus->pos = gtk_label_new( "" ); set_fixed( plotstatus->pos, strlen( "(8888888,8888888)" ) ); gtk_misc_set_alignment( GTK_MISC( plotstatus->pos ), 0.0, 0.5 ); gtk_box_pack_start( GTK_BOX( hb ), plotstatus->pos, FALSE, FALSE, 0 ); plotstatus->hb = gtk_hbox_new( FALSE, 5 ); gtk_box_pack_start( GTK_BOX( hb ), plotstatus->hb, TRUE, TRUE, 0 ); plotstatus->mag = gtk_label_new( "" ); gtk_misc_set_alignment( GTK_MISC( plotstatus->mag ), 0.0, 0.5 ); gtk_box_pack_end( GTK_BOX( hb ), plotstatus->mag, FALSE, FALSE, 0 ); gtk_widget_show_all( eb ); } GtkType plotstatus_get_type( void ) { static GtkType type = 0; if( !type ) { static const GtkTypeInfo info = { "Plotstatus", sizeof( Plotstatus ), sizeof( PlotstatusClass ), (GtkClassInitFunc) plotstatus_class_init, (GtkObjectInitFunc) plotstatus_init, /* reserved_1 */ NULL, /* reserved_2 */ NULL, (GtkClassInitFunc) NULL, }; type = gtk_type_unique( GTK_TYPE_FRAME, &info ); } return( type ); } /* Model has changed: rebuild everything. */ static void plotstatus_refresh( Plotstatus *plotstatus ) { Plotmodel *plotmodel = plotstatus->plotmodel; Plot *plot = plotmodel->plot; #ifdef DEBUG printf( "plotstatus_refresh: %p\n", plotstatus ); printf( " show_status = %d\n", plotmodel->show_status ); #endif /*DEBUG*/ widget_visible( GTK_WIDGET( plotstatus ), plotmodel->show_status ); /* If we're hidden, no need to do any more. */ if( !plotmodel->show_status ) return; set_glabel( plotstatus->mag, "%s %d%%", _( "Magnification" ), plotmodel->mag ); set_gcaption( plotstatus->top, "%s", IOBJECT( plot )->caption ); if( plotstatus->columns != plot->columns ) { /* Bands/fmt has changed ... rebuild band display widgets. */ int columns; int i; /* Don't display more than 8 series ... it'll make the window * too large. FIXME ... not very kewl */ plotstatus_columns_destroy( plotstatus ); columns = IM_MIN( 8, plot->columns ); if( !(plotstatus->label = IM_ARRAY( NULL, columns, GtkWidget * )) ) return; for( i = 0; i < columns; i++ ) plotstatus->label[i] = NULL; plotstatus->columns = columns; for( i = 0; i < columns; i++ ) { GtkWidget *label; plotstatus->label[i] = label = gtk_label_new( "" ); gtk_misc_set_alignment( GTK_MISC( label ), 0.0, 0.5 ); set_fixed( label, 8 ); gtk_box_pack_start( GTK_BOX( plotstatus->hb ), label, FALSE, FALSE, 0 ); gtk_widget_show( label ); } } } static void plotstatus_changed_cb( Plotmodel *plotmodel, Plotstatus *plotstatus ) { plotstatus_refresh( plotstatus ); } Plotstatus * plotstatus_new( Plotmodel *plotmodel ) { Plotstatus *plotstatus = gtk_type_new( TYPE_PLOTSTATUS ); plotstatus->plotmodel = plotmodel; g_signal_connect( G_OBJECT( plotmodel ), "changed", G_CALLBACK( plotstatus_changed_cb ), plotstatus ); return( plotstatus ); } /* Find nearest x, display that y. */ static void plotstatus_series_update( GtkWidget *widget, Plot *plot, int column, double x, double y ) { double *xcolumn = plot->xcolumn[column]; double *ycolumn = plot->ycolumn[column]; int i; int best; gdouble best_score; best = 0; best_score = IM_ABS( x - xcolumn[0] ); for( i = 1; i < plot->rows; i++ ) { double score = IM_ABS( x - xcolumn[i] ); if( score < best_score ) { best_score = score; best = i; } } set_glabel( widget, "%g", ycolumn[best] ); } void plotstatus_mouse( Plotstatus *plotstatus, double x, double y ) { Plotmodel *plotmodel = plotstatus->plotmodel; Plot *plot = plotmodel->plot; int i; set_glabel( plotstatus->pos, "(%05g, %05g)", x, y ); g_assert( plotstatus->columns <= plot->columns ); for( i = 0; i < plotstatus->columns; i++ ) plotstatus_series_update( plotstatus->label[i], plot, i, x, y ); } nip2-8.7.0/src/managed.c0000644000175000017500000002307713224651032011655 00000000000000/* managed objects ... things like Imageinfo which are lifetime managed by * both the GC and by pointers from C: we need to both mark/sweep and refcount * * abstract class: Managedgvalue, Imageinfo, etc. build off this */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #include "ip.h" /* get -DDEBUG_LEAK from the gcc command-line #define DEBUG */ static iContainerClass *parent_class = NULL; #ifdef DEBUG_LEAK static GSList *managed_all = NULL; #endif /*DEBUG_LEAK*/ #ifdef DEBUG_LEAK static void * managed_print_info( Managed *managed, VipsBuf *buf ) { iobject_info( IOBJECT( managed ), buf ); vips_buf_appends( buf, "\n" ); return( NULL ); } #endif /*DEBUG_LEAK*/ /* Debugging ... check that all manageds have been closed, dump any which * haven't. */ void managed_check_all_destroyed( void ) { #ifdef DEBUG_LEAK if( managed_all ) { char txt[1000]; VipsBuf buf = VIPS_BUF_STATIC( txt ); printf( "managed_check_all_destroyed:\n" ); slist_map( managed_all, (SListMapFn) managed_print_info, &buf ); printf( "%s", vips_buf_all( &buf ) ); } #endif /*DEBUG_LEAK*/ } void managed_link_heap( Managed *managed, Heap *heap ) { g_assert( !managed->heap ); if( heap == NULL ) heap = reduce_context->heap; managed->heap = heap; g_hash_table_insert( heap->mtable, managed, managed ); managed->attached = TRUE; /* The mtable owns our ref. */ g_object_ref( G_OBJECT( managed ) ); iobject_sink( IOBJECT( managed ) ); } static void managed_unlink_heap( Managed *managed ) { if( managed->attached && managed->heap ) { g_hash_table_remove( managed->heap->mtable, managed ); managed->attached = FALSE; g_object_unref( G_OBJECT( managed ) ); } } /* managed no longer depends upon in. */ void * managed_sub_remove( Managed *in, Managed *managed ) { g_assert( g_slist_find( managed->sub, in ) ); managed->sub = g_slist_remove( managed->sub, in ); managed_destroy_nonheap( in ); return( NULL ); } static void managed_dispose( GObject *gobject ) { Managed *managed = MANAGED( gobject ); #ifdef DEBUG printf( "managed_dispose: " ); iobject_print( IOBJECT( managed ) ); #endif /*DEBUG*/ g_assert( managed->count == 0 ); managed_unlink_heap( managed ); slist_map( managed->sub, (SListMapFn) managed_sub_remove, managed ); g_assert( !managed->sub ); G_OBJECT_CLASS( parent_class )->dispose( gobject ); } /* Final death! */ static void managed_finalize( GObject *gobject ) { #ifdef DEBUG Managed *managed = MANAGED( gobject ); printf( "managed_finalize:" ); iobject_print( IOBJECT( managed ) ); #endif /*DEBUG*/ #ifdef DEBUG_LEAK managed_all = g_slist_remove( managed_all, gobject ); #endif /*DEBUG_LEAK*/ G_OBJECT_CLASS( parent_class )->finalize( gobject ); } /* _info() is used by itext.c to display managed objects. Don't chain * up, don't print more than one line. */ static void managed_info( iObject *iobject, VipsBuf *buf ) { #ifdef DEBUG Managed *managed = MANAGED( iobject ); vips_buf_appendf( buf, "managed-object %p\n", managed ); vips_buf_appendf( buf, "managed->count = %d\n", managed->count ); vips_buf_appendf( buf, "managed->marked = %d\n", managed->marked ); #endif /*DEBUG*/ vips_buf_appendf( buf, "%s %p", G_OBJECT_TYPE_NAME( iobject ), iobject ); } static void managed_class_init( ManagedClass *class ) { GObjectClass *gobject_class = G_OBJECT_CLASS( class ); iObjectClass *iobject_class = IOBJECT_CLASS( class ); parent_class = g_type_class_peek_parent( class ); gobject_class->dispose = managed_dispose; gobject_class->finalize = managed_finalize; iobject_class->info = managed_info; class->keepalive = 0; } static void managed_init( Managed *managed ) { #ifdef DEBUG printf( "managed_init: %p\n", managed ); #endif /*DEBUG*/ managed->heap = NULL; managed->attached = FALSE; /* Init to TRUE, so we won't close until (at least) the next GC. */ managed->marked = TRUE; /* Start with a count of zero (unlike gobject!). We will be deleted * on the next GC unless our caller refs us. */ managed->count = 0; /* When we're unreffed, become a zombie first, then destroy after a * (possibly zero) interval. */ managed->zombie = FALSE; managed->time = 0; managed->sub = NULL; #ifdef DEBUG_LEAK managed_all = g_slist_prepend( managed_all, managed ); #endif /*DEBUG_LEAK*/ } GType managed_get_type( void ) { static GType type = 0; if( !type ) { static const GTypeInfo info = { sizeof( ManagedClass ), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) managed_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof( Managed ), 32, /* n_preallocs */ (GInstanceInitFunc) managed_init, }; type = g_type_register_static( TYPE_ICONTAINER, "Managed", &info, 0 ); } return( type ); } /* From heap_gc() ... no heap pointers left, delete if there are no * non-heap pointers either. */ void managed_destroy_heap( Managed *managed ) { #ifdef DEBUG printf( "managed_destroy_heap: " ); iobject_print( IOBJECT( managed ) ); #endif /*DEBUG*/ /* All non-heaps gone too? */ if( !managed->count ) IDESTROY( managed ); } /* destroy() for non-heap pointers. */ void * managed_destroy_nonheap( Managed *managed ) { g_assert( managed->count > 0 ); #ifdef DEBUG printf( "managed_destroy_nonheap: count = %d ", managed->count ); iobject_print( IOBJECT( managed ) ); #endif /*DEBUG*/ managed->count--; /* We can't destroy the managed if count == 0 && it's not marked, * since a heap pointer might have been created to it since the last * GC. Queue a GC to clean off stray manageds. */ heap_gc_request( managed->heap ); return( NULL ); } /* Create a new non-heap pointer. */ void managed_dup_nonheap( Managed *managed ) { g_assert( managed->count >= 0 ); managed->count++; #ifdef DEBUG printf( "managed_dup_nonheap: count = %d ", managed->count ); iobject_print( IOBJECT( managed ) ); #endif /*DEBUG*/ } /* managed depends on in ... add a dependency. */ void managed_sub_add( Managed *managed, Managed *in ) { g_assert( managed && in ); managed->sub = g_slist_prepend( managed->sub, in ); managed_dup_nonheap( in ); } /* out needs all of in[], add to sub-mark-list. */ void managed_sub_add_all( Managed *out, int nin, Managed **in ) { int i; if( out ) for( i = 0; i < nin; i++ ) managed_sub_add( out, in[i] ); } static void managed_clear_sub( void *key, Managed *managed ) { managed->marked = FALSE; } void managed_clear( Heap *heap ) { g_hash_table_foreach( heap->mtable, (GHFunc) managed_clear_sub, NULL ); } /* Mark as being used ... also mark all sub-objects. */ void managed_mark( Managed *managed ) { if( !managed->marked ) { managed->marked = TRUE; (void) slist_map( managed->sub, (SListMapFn) managed_mark, NULL ); } } /* Use a timer to remove unreffed keepalive objects after some * interval. */ static GTimer *zombie_timer = NULL; static double zombie_elapsed; static gboolean managed_free_unused_sub( void *key, Managed *managed, gboolean *changed ) { ManagedClass *managed_class = MANAGED_GET_CLASS( managed ); Heap *heap = managed->heap; gboolean remove = FALSE; if( !managed->marked && !managed->count ) { if( !managed->zombie ) { /* Unreffed, but not marked as a zombie. */ #ifdef DEBUG printf( "managed_free: zombiefying: " ); iobject_print( IOBJECT( managed ) ); #endif /*DEBUG*/ managed->zombie = TRUE; managed->time = zombie_elapsed; } } else { if( managed->zombie ) { /* Reffed, but marked as a zombie. Back to life again. */ #ifdef DEBUG printf( "managed_free: resuscitating: " ); iobject_print( IOBJECT( managed ) ); #endif /*DEBUG*/ managed->zombie = FALSE; managed->time = 0; } } /* Is this an old zombie? Or a not-so-old one and we're flushing? * Junk. */ if( managed->zombie && zombie_elapsed - managed->time >= managed_class->keepalive ) remove = TRUE; if( managed->zombie && heap->flush ) remove = TRUE; if( remove ) { #ifdef DEBUG printf( "managed_free: closing unreferenced object: " ); iobject_print( IOBJECT( managed ) ); printf( "managed_free: after %g s as a zombie\n", zombie_elapsed - managed->time ); #endif /*DEBUG*/ /* We will return TRUE to unlink us from the hash table. Stop * managed_dispose unlinking for us, and drop the hash table's * reference. */ managed->attached = FALSE; managed_destroy_heap( managed ); g_object_unref( G_OBJECT( managed ) ); *changed = TRUE; } return( remove ); } /* Make one sweep and destroy all unused managed objects. Return TRUE if we * removed any. */ gboolean managed_free_unused( Heap *heap ) { gboolean changed; if( !zombie_timer ) zombie_timer = g_timer_new(); zombie_elapsed = g_timer_elapsed( zombie_timer, NULL ); changed = FALSE; g_hash_table_foreach_remove( heap->mtable, (GHRFunc) managed_free_unused_sub, &changed ); return( changed ); } nip2-8.7.0/src/plotpresent.c0000644000175000017500000001651713224651032012641 00000000000000/* a plot widget, plus some navigation stuff */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG_EVENT #define DEBUG */ #include "ip.h" #ifdef HAVE_LIBGOFFICE static GtkBinClass *parent_class = NULL; enum { SIG_MOUSE_MOVE, /* mose drag, axies cods */ SIG_LAST }; static guint plotpresent_signals[SIG_LAST] = { 0 }; static void plotpresent_mouse_move( Plotpresent *plotpresent, double x, double y ) { g_signal_emit( G_OBJECT( plotpresent ), plotpresent_signals[SIG_MOUSE_MOVE], 0, x, y ); } static void plotpresent_destroy( GtkObject *object ) { Plotpresent *plotpresent; g_return_if_fail( object != NULL ); g_return_if_fail( IS_PLOTPRESENT( object ) ); plotpresent = PLOTPRESENT( object ); #ifdef DEBUG printf( "plotpresent_destroy: %p\n", plotpresent ); #endif /*DEBUG*/ /* My instance destroy stuff. */ UNREF( plotpresent->grend ); GTK_OBJECT_CLASS( parent_class )->destroy( object ); } static void plotpresent_size_request( GtkWidget *widget, GtkRequisition *requisition ) { GtkBin *bin = GTK_BIN( widget ); if( bin->child && GTK_WIDGET_VISIBLE( bin->child ) ) gtk_widget_size_request( bin->child, requisition ); } static void plotpresent_size_allocate( GtkWidget *widget, GtkAllocation *allocation ) { GtkBin *bin = GTK_BIN( widget ); if( bin->child && GTK_WIDGET_VISIBLE( bin->child ) ) gtk_widget_size_allocate( bin->child, allocation ); } /* Spot mouse motion events, to update status bar. */ static gboolean plotpresent_motion_notify_event( GtkWidget *widget, GdkEventMotion *event ) { Plotpresent *plotpresent = PLOTPRESENT( widget ); GtkAllocation *allocation = >K_WIDGET( plotpresent->canvas )->allocation; GogView *view; GSList *axes; GogAxis *x_axis; GogAxis *y_axis; GogChartMap *map; #ifdef DEBUG_EVENT printf( "plotpresent_motion_notify_event: %p\n", plotpresent ); printf( "event->x = %g, event->y = %g\n", event->x, event->y ); #endif /*DEBUG_EVENT*/ gog_renderer_update( plotpresent->grend, allocation->width, allocation->height ); g_object_get( G_OBJECT( plotpresent->grend ), "view", &view, NULL ); view = gog_view_find_child_view( view, GOG_OBJECT( plotpresent->gplot ) ); axes = gog_chart_get_axes( plotpresent->gchart, GOG_AXIS_X ); x_axis = GOG_AXIS( axes->data ); g_slist_free( axes ); axes = gog_chart_get_axes( plotpresent->gchart, GOG_AXIS_Y ); y_axis = GOG_AXIS( axes->data ); g_slist_free( axes ); map = gog_chart_map_new( plotpresent->gchart, &(view->allocation), x_axis, y_axis, NULL, FALSE ); if( gog_chart_map_is_valid( map ) && event->x >= view->allocation.x && event->x < view->allocation.x + view->allocation.w && event->y >= view->allocation.y && event->y < view->allocation.y + view->allocation.h ) { GogAxisMap *x_map; GogAxisMap *y_map; double x; double y; x_map = gog_chart_map_get_axis_map( map, 0 ); y_map = gog_chart_map_get_axis_map( map, 1 ); x = gog_axis_map_from_view( x_map, event->x ); y = gog_axis_map_from_view( y_map, event->y ); plotpresent_mouse_move( plotpresent, x, y ); } gog_chart_map_free( map ); return( FALSE ); } static void plotpresent_class_init( PlotpresentClass *class ) { GtkObjectClass *object_class = (GtkObjectClass *) class; GtkWidgetClass *widget_class = (GtkWidgetClass *) class; parent_class = g_type_class_peek_parent( class ); object_class->destroy = plotpresent_destroy; widget_class->size_request = plotpresent_size_request; widget_class->size_allocate = plotpresent_size_allocate; widget_class->motion_notify_event = plotpresent_motion_notify_event; /* Create signals. */ plotpresent_signals[SIG_MOUSE_MOVE] = g_signal_new( "mouse_move", G_OBJECT_CLASS_TYPE( class ), G_SIGNAL_RUN_FIRST, G_STRUCT_OFFSET( PlotpresentClass, mouse_move ), NULL, NULL, nip_VOID__DOUBLE_DOUBLE, G_TYPE_NONE, 2, G_TYPE_DOUBLE, G_TYPE_DOUBLE ); /* Init methods. */ } static void plotpresent_init( Plotpresent *plotpresent ) { #ifdef DEBUG printf( "plotpresent_init: %p\n", plotpresent ); #endif /*DEBUG*/ plotpresent->gplot = NULL; plotpresent->canvas = go_graph_widget_new( NULL ); gtk_container_add( GTK_CONTAINER( plotpresent ), plotpresent->canvas ); gtk_widget_show( GTK_WIDGET( plotpresent->canvas ) ); plotpresent->ggraph = go_graph_widget_get_graph( GO_GRAPH_WIDGET( plotpresent->canvas ) ); plotpresent->gchart = go_graph_widget_get_chart( GO_GRAPH_WIDGET( plotpresent->canvas ) ); gtk_widget_add_events( plotpresent->canvas, GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK ); /* You'd think we could set up the axies too, but we can't get them * from the chart until it's realized. Wait for the first refresh. */ plotpresent->grend = gog_renderer_new( plotpresent->ggraph ); } GType plotpresent_get_type( void ) { static GType type = 0; if( !type ) { static const GTypeInfo info = { sizeof( PlotpresentClass ), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) plotpresent_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof( Plotpresent ), 32, /* n_preallocs */ (GInstanceInitFunc) plotpresent_init, }; type = g_type_register_static( GTK_TYPE_BIN, "Plotpresent", &info, 0 ); } return( type ); } static void plotpresent_build_plot( Plotpresent *plotpresent ) { Plotmodel *plotmodel = plotpresent->plotmodel; Plot *plot = plotmodel->plot; #ifdef DEBUG printf( "plotpresent_build_plot: %p\n", plotpresent ); #endif /*DEBUG*/ GOG_UNREF( plotpresent->gplot ); plotpresent->gplot = plot_new_gplot( plot ); gog_object_add_by_name( GOG_OBJECT( plotpresent->gchart ), "Plot", GOG_OBJECT( plotpresent->gplot ) ); plot_style_main( plot, plotpresent->gchart ); } static void plotpresent_changed_cb( Plotmodel *plotmodel, Plotpresent *plotpresent ) { Plot *plot = plotmodel->plot; #ifdef DEBUG printf( "plotpresent_changed_cb: %p\n", plotpresent ); #endif /*DEBUG*/ /* Can refresh before model build. */ if( plot->rows == 0 || plot->columns == 0 ) return; /* Rebuild plot and data. */ plotpresent_build_plot( plotpresent ); } static void plotpresent_link( Plotpresent *plotpresent, Plotmodel *plotmodel ) { /* All the model parts for our set of views. */ plotpresent->plotmodel = plotmodel; g_signal_connect( G_OBJECT( plotmodel ), "changed", G_CALLBACK( plotpresent_changed_cb ), plotpresent ); } Plotpresent * plotpresent_new( Plotmodel *plotmodel ) { Plotpresent *plotpresent = gtk_type_new( TYPE_PLOTPRESENT ); plotpresent_link( plotpresent, plotmodel ); return( plotpresent ); } #endif /*HAVE_LIBGOFFICE*/ nip2-8.7.0/src/filemodel.c0000644000175000017500000006063113224651032012216 00000000000000/* abstract base class for things which form the filemodel half of a * filemodel/view pair */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ /* Don't compress save files. FIXME ... some prebuilt libxml2s on win32 don't support libz compression, so don't turn this off */ #define DEBUG_SAVEFILE #include "ip.h" static ModelClass *parent_class = NULL; static GSList *filemodel_registered = NULL; /* Register a file model. Registered models are part of the "xxx has been * modified, save before quit?" check. */ void filemodel_register( Filemodel *filemodel ) { if( !filemodel->registered ) { filemodel->registered = TRUE; filemodel_registered = g_slist_prepend( filemodel_registered, filemodel ); #ifdef DEBUG printf( "filemodel_register: %s \"%s\" (%p)\n", G_OBJECT_TYPE_NAME( filemodel ), IOBJECT( filemodel )->name, filemodel ); #endif /*DEBUG*/ } } void filemodel_unregister( Filemodel *filemodel ) { if( filemodel->registered ) { filemodel->registered = FALSE; filemodel_registered = g_slist_remove( filemodel_registered, filemodel ); #ifdef DEBUG printf( "filemodel_unregister: %s \"%s\" (%p)\n", G_OBJECT_TYPE_NAME( filemodel ), IOBJECT( filemodel )->name, filemodel ); #endif /*DEBUG*/ } } /* Trigger the top_load method for a filemodel. */ void * filemodel_top_load( Filemodel *filemodel, ModelLoadState *state, Model *parent, xmlNode *xnode ) { FilemodelClass *filemodel_class = FILEMODEL_GET_CLASS( filemodel ); if( filemodel_class->top_load ) { if( !filemodel_class->top_load( filemodel, state, parent, xnode ) ) return( filemodel ); } else { error_top( _( "Not implemented." ) ); error_sub( _( "_%s() not implemented for class \"%s\"." ), "top_load", G_OBJECT_CLASS_NAME( filemodel_class ) ); return( filemodel ); } return( NULL ); } /* Trigger the set_modified method for a filemodel. */ void filemodel_set_modified( Filemodel *filemodel, gboolean modified ) { FilemodelClass *filemodel_class = FILEMODEL_GET_CLASS( filemodel ); if( filemodel_class->set_modified ) filemodel_class->set_modified( filemodel, modified ); } void filemodel_set_window_hint( Filemodel *filemodel, iWindow *iwnd ) { /* This can be called repeatedly if objects are moved between windows. */ filemodel->window_hint = iwnd; } iWindow * filemodel_get_window_hint( Filemodel *filemodel ) { if( filemodel->window_hint ) return( filemodel->window_hint ); else return( IWINDOW( mainw_pick_one() ) ); } gboolean filemodel_top_save( Filemodel *filemodel, const char *filename ) { FilemodelClass *filemodel_class = FILEMODEL_GET_CLASS( filemodel ); if( filemodel_class->top_save ) { char *old_filename; int result; /* We must always have the new filename in the save file or * auto path rewriting will get confused on reload. * * Equally, we must not change the filename on the model, in * case this save is not something initiated by the user, for * example, an auto-backup of the workspace. * * Save and restore the filename. Our caller must set the * final filename, if required (after save-as, for example). */ old_filename = g_strdup( filemodel->filename ); filemodel_set_filename( filemodel, filename ); result = filemodel_class->top_save( filemodel, filename ); filemodel_set_filename( filemodel, old_filename ); g_free( old_filename ); return( result ); } else { error_top( _( "Not implemented." ) ); error_sub( _( "_%s() not implemented for class \"%s\"." ), "top_save", G_OBJECT_CLASS_NAME( filemodel_class ) ); return( FALSE ); } } static void filemodel_info( iObject *iobject, VipsBuf *buf ) { Filemodel *filemodel = FILEMODEL( iobject ); IOBJECT_CLASS( parent_class )->info( iobject, buf ); vips_buf_appendf( buf, "filename = \"%s\"\n", NN( filemodel->filename ) ); vips_buf_appendf( buf, "modified = \"%s\"\n", bool_to_char( filemodel->modified ) ); vips_buf_appendf( buf, "registered = \"%s\"\n", bool_to_char( filemodel->registered ) ); vips_buf_appendf( buf, "auto_load = \"%s\"\n", bool_to_char( filemodel->auto_load ) ); } /* filename can be NULL for unset. */ void filemodel_set_filename( Filemodel *filemodel, const char *filename ) { if( filemodel->filename != filename ) { char buf[FILENAME_MAX]; /* We want to keep the absolute, compact form of the filename * inside the object so we don't get a dependency on CWD. */ if( filename ) { im_strncpy( buf, filename, FILENAME_MAX ); path_compact( buf ); filename = buf; } IM_SETSTR( filemodel->filename, filename ); iobject_changed( IOBJECT( filemodel ) ); } } static void filemodel_finalize( GObject *gobject ) { Filemodel *filemodel; g_return_if_fail( gobject != NULL ); g_return_if_fail( IS_FILEMODEL( gobject ) ); filemodel = FILEMODEL( gobject ); #ifdef DEBUG printf( "filemodel_finalize: %s \"%s\" (%s)\n", G_OBJECT_TYPE_NAME( filemodel ), NN( IOBJECT( filemodel )->name ), NN( filemodel->filename ) ); #endif /*DEBUG*/ IM_FREE( filemodel->filename ); G_OBJECT_CLASS( parent_class )->finalize( gobject ); } static void filemodel_dispose( GObject *gobject ) { Filemodel *filemodel; g_return_if_fail( gobject != NULL ); g_return_if_fail( IS_FILEMODEL( gobject ) ); filemodel = FILEMODEL( gobject ); #ifdef DEBUG printf( "filemodel_dispose: %s \"%s\" (%s)\n", G_OBJECT_TYPE_NAME( filemodel ), NN( IOBJECT( filemodel )->name ), NN( filemodel->filename ) ); #endif /*DEBUG*/ filemodel_unregister( filemodel ); G_OBJECT_CLASS( parent_class )->dispose( gobject ); } static xmlNode * filemodel_save( Model *model, xmlNode *xnode ) { Filemodel *filemodel = FILEMODEL( model ); xmlNode *xthis; if( !(xthis = MODEL_CLASS( parent_class )->save( model, xnode )) ) return( NULL ); if( !set_sprop( xthis, "filename", filemodel->filename ) ) return( NULL ); return( xthis ); } static gboolean filemodel_load( Model *model, ModelLoadState *state, Model *parent, xmlNode *xnode ) { Filemodel *filemodel = FILEMODEL( model ); char buf[MAX_STRSIZE]; if( get_sprop( xnode, "filename", buf, MAX_STRSIZE ) ) filemodel_set_filename( filemodel, buf ); if( !MODEL_CLASS( parent_class )->load( model, state, parent, xnode ) ) return( FALSE ); return( TRUE ); } static gboolean filemodel_real_top_load( Filemodel *filemodel, ModelLoadState *state, Model *parent, xmlNode *xnode ) { return( TRUE ); } static void filemodel_real_set_modified( Filemodel *filemodel, gboolean modified ) { if( filemodel->modified != modified ) { #ifdef DEBUG printf( "filemodel_real_set_modified: %s \"%s\" (%s) %s\n", G_OBJECT_TYPE_NAME( filemodel ), NN( IOBJECT( filemodel )->name ), NN( filemodel->filename ), bool_to_char( modified ) ); #endif /*DEBUG*/ filemodel->modified = modified; iobject_changed( IOBJECT( filemodel ) ); } } static int filemodel_xml_save_format_file( const char *filename, xmlDoc *doc ) { return( xmlSaveFormatFile( filename, doc, 1 ) == -1 ); } /* Save to filemodel->filename. */ static gboolean filemodel_top_save_xml( Filemodel *filemodel, const char *filename ) { xmlDoc *xdoc; char namespace[256]; if( !(xdoc = xmlNewDoc( (xmlChar *) "1.0" )) ) { error_top( _( "XML library error." ) ); error_sub( _( "model_save_filename: xmlNewDoc() failed" ) ); return( FALSE ); } #ifndef DEBUG_SAVEFILE xmlSetDocCompressMode( xdoc, 1 ); #endif /*!DEBUG_SAVEFILE*/ im_snprintf( namespace, 256, "%s/%d.%d.%d", NAMESPACE, filemodel->major, filemodel->minor, filemodel->micro ); if( !(xdoc->children = xmlNewDocNode( xdoc, NULL, (xmlChar *) "root", NULL )) || !set_sprop( xdoc->children, "xmlns", namespace ) ) { error_top( _( "XML library error." ) ); error_sub( _( "model_save_filename: xmlNewDocNode() failed" ) ); xmlFreeDoc( xdoc ); return( FALSE ); } column_set_offset( filemodel->x_off, filemodel->y_off ); if( model_save( MODEL( filemodel ), xdoc->children ) ) { xmlFreeDoc( xdoc ); return( FALSE ); } if( calli_string_filename( (calli_string_fn) filemodel_xml_save_format_file, filename, xdoc, NULL, NULL ) ) { error_top( _( "Save failed." ) ); error_sub( _( "Save of %s \"%s\" to file \"%s\" failed.\n%s" ), IOBJECT_GET_CLASS_NAME( filemodel ), NN( IOBJECT( filemodel )->name ), NN( filename ), g_strerror( errno ) ); xmlFreeDoc( xdoc ); return( FALSE ); } xmlFreeDoc( xdoc ); return( TRUE ); } static gboolean filemodel_top_save_text( Filemodel *filemodel, const char *filename ) { iOpenFile *of; if( !(of = ifile_open_write( "%s", filename )) ) return( FALSE ); column_set_offset( filemodel->x_off, filemodel->y_off ); if( model_save_text( MODEL( filemodel ), of ) ) { ifile_close( of ); return( FALSE ); } ifile_close( of ); return( TRUE ); } static gboolean filemodel_real_top_save( Filemodel *filemodel, const char *filename ) { ModelClass *model_class = MODEL_GET_CLASS( filemodel ); #ifdef DEBUG printf( "filemodel_real_top_save: save %s \"%s\" to file \"%s\"\n", G_OBJECT_TYPE_NAME( filemodel ), NN( IOBJECT( filemodel )->name ), filename ); #endif /*DEBUG*/ if( model_class->save_text ) { if( !filemodel_top_save_text( filemodel, filename ) ) return( FALSE ); } else if( model_class->save ) { if( !filemodel_top_save_xml( filemodel, filename ) ) return( FALSE ); } else { error_top( _( "Not implemented." ) ); error_sub( _( "filemodel_real_top_save: no save method" ) ); return( FALSE ); } return( TRUE ); } static void filemodel_class_init( FilemodelClass *class ) { GObjectClass *gobject_class = G_OBJECT_CLASS( class ); iObjectClass *iobject_class = IOBJECT_CLASS( class ); ModelClass *model_class = (ModelClass*) class; parent_class = g_type_class_peek_parent( class ); gobject_class->finalize = filemodel_finalize; gobject_class->dispose = filemodel_dispose; iobject_class->info = filemodel_info; model_class->save = filemodel_save; model_class->load = filemodel_load; class->top_load = filemodel_real_top_load; class->set_modified = filemodel_real_set_modified; class->top_save = filemodel_real_top_save; /* NULL isn't an allowed value -- this gets overridden by our * subclasses. */ class->filetype = NULL; class->filetype_pref = NULL; } static void filemodel_init( Filemodel *filemodel ) { /* Init our instance fields. */ filemodel->filename = NULL; filemodel->modified = FALSE; filemodel->registered = FALSE; filemodel->auto_load = FALSE; filemodel->x_off = 0; filemodel->y_off = 0; /* Default version. */ filemodel->versioned = FALSE; filemodel->major = MAJOR_VERSION; filemodel->minor = MINOR_VERSION; filemodel->micro = MICRO_VERSION; filemodel->window_hint = NULL; } GtkType filemodel_get_type( void ) { static GtkType filemodel_type = 0; if( !filemodel_type ) { static const GTypeInfo info = { sizeof( FilemodelClass ), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) filemodel_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof( Filemodel ), 32, /* n_preallocs */ (GInstanceInitFunc) filemodel_init, }; filemodel_type = g_type_register_static( TYPE_MODEL, "Filemodel", &info, 0 ); } return( filemodel_type ); } void filemodel_set_offset( Filemodel *filemodel, int x_off, int y_off ) { #ifdef DEBUG printf( "filemodel_set_offset: %s \"%s\" %d x %d\n", G_OBJECT_TYPE_NAME( filemodel ), NN( IOBJECT( filemodel )->name ), x_off, y_off ); #endif /*DEBUG*/ filemodel->x_off = x_off; filemodel->y_off = y_off; } static gboolean filemodel_load_all_xml( Filemodel *filemodel, Model *parent, ModelLoadState *state ) { xmlNode *xnode; /* Check the root element for type/version compatibility. */ if( !(xnode = xmlDocGetRootElement( state->xdoc )) || !xnode->nsDef || !is_prefix( NAMESPACE, (char *) xnode->nsDef->href ) ) { error_top( _( "Load failed." ) ); error_sub( _( "Can't load XML file \"%s\", " "it's not a %s save file." ), state->filename, PACKAGE ); return( FALSE ); } if( sscanf( (char *) xnode->nsDef->href + strlen( NAMESPACE ) + 1, "%d.%d.%d", &state->major, &state->minor, &state->micro ) != 3 ) { error_top( _( "Load failed." ) ); error_sub( _( "Can't load XML file \"%s\", " "unable to extract version information from " "namespace." ), state->filename ); return( FALSE ); } #ifdef DEBUG printf( "filemodel_load_all_xml: major = %d, minor = %d, micro = %d\n", state->major, state->minor, state->micro ); #endif /*DEBUG*/ if( filemodel_top_load( filemodel, state, parent, xnode ) ) return( FALSE ); return( TRUE ); } static gboolean filemodel_load_all_xml_file( Filemodel *filemodel, Model *parent, const char *filename, const char *filename_user ) { ModelLoadState *state; if( !(state = model_loadstate_new( filename, filename_user )) ) return( FALSE ); if( !filemodel_load_all_xml( filemodel, parent, state ) ) { model_loadstate_destroy( state ); return( FALSE ); } model_loadstate_destroy( state ); return( TRUE ); } static gboolean filemodel_load_all_xml_openfile( Filemodel *filemodel, Model *parent, iOpenFile *of ) { ModelLoadState *state; if( !(state = model_loadstate_new_openfile( of )) ) return( FALSE ); if( !filemodel_load_all_xml( filemodel, parent, state ) ) { model_loadstate_destroy( state ); return( FALSE ); } model_loadstate_destroy( state ); return( TRUE ); } static gboolean filemodel_load_all_text( Filemodel *filemodel, Model *parent, const char *filename, const char *filename_user ) { iOpenFile *of; if( !(of = ifile_open_read( "%s", filename )) ) return( FALSE ); if( model_load_text( MODEL( filemodel ), parent, of ) ) { ifile_close( of ); return( FALSE ); } ifile_close( of ); return( TRUE ); } /* Load filename into filemodel ... can mean merge as well as init. * * We load from @filename. If @filename_user is non-NULL, that's the filename * we should record in the model. */ gboolean filemodel_load_all( Filemodel *filemodel, Model *parent, const char *filename, const char *filename_user ) { ModelClass *model_class = MODEL_GET_CLASS( filemodel ); const char *tname = G_OBJECT_CLASS_NAME( model_class ); #ifdef DEBUG printf( "filemodel_load_all: load file \"%s\" into parent %s \"%s\"\n", filename, G_OBJECT_TYPE_NAME( parent ), NN( IOBJECT( parent )->name ) ); #endif /*DEBUG*/ if( model_class->load_text ) { if( !filemodel_load_all_text( filemodel, parent, filename, filename_user ) ) return( FALSE ); } else if( model_class->load ) { if( !filemodel_load_all_xml_file( filemodel, parent, filename, filename_user ) ) return( FALSE ); } else { error_top( _( "Not implemented." ) ); error_sub( _( "_%s() not implemented for class \"%s\"." ), "load", tname ); return( FALSE ); } /* Don't recomp here, we may be loading a bunch of interdependent * files. */ return( TRUE ); } /* Load iOpenFile into filemodel ... can mean merge as well as init. */ gboolean filemodel_load_all_openfile( Filemodel *filemodel, Model *parent, iOpenFile *of ) { ModelClass *model_class = MODEL_GET_CLASS( filemodel ); const char *tname = G_OBJECT_CLASS_NAME( model_class ); #ifdef DEBUG printf( "filemodel_load_all_openfile: load \"%s\" " "into parent %s \"%s\"\n", of->fname, G_OBJECT_TYPE_NAME( parent ), NN( IOBJECT( parent )->name ) ); #endif /*DEBUG*/ if( model_class->load_text ) { if( model_load_text( MODEL( filemodel ), parent, of ) ) return( FALSE ); } else if( model_class->load ) { if( !filemodel_load_all_xml_openfile( filemodel, parent, of ) ) return( FALSE ); } else { error_top( _( "Not implemented." ) ); error_sub( _( "_%s() not implemented for class \"%s\"." ), "load", tname ); return( FALSE ); } /* Don't recomp here, we may be loading a bunch of interdependent * files. */ return( TRUE ); } /* Interactive stuff ... save first. */ static void filemodel_inter_saveas_sub_cb( iWindow *iwnd, void *client, iWindowNotifyFn nfn, void *sys ) { Filesel *filesel = FILESEL( iwnd ); Filemodel *filemodel = FILEMODEL( client ); char *filename; if( (filename = filesel_get_filename( filesel )) ) { if( filemodel_top_save( filemodel, filename ) ) { filemodel_set_filename( filemodel, filename ); filemodel_set_modified( filemodel, FALSE ); nfn( sys, IWINDOW_YES ); } else nfn( sys, IWINDOW_ERROR ); g_free( filename ); } else nfn( sys, IWINDOW_ERROR ); } static void filemodel_inter_saveas_cb( iWindow *iwnd, void *client, iWindowNotifyFn nfn, void *sys ) { Filemodel *filemodel = FILEMODEL( client ); FilemodelClass *class = FILEMODEL_GET_CLASS( filemodel ); Filesel *filesel = FILESEL( filesel_new() ); /* Expands to (eg.) "Save Column A2". */ iwindow_set_title( IWINDOW( filesel ), _( "Save %s %s" ), IOBJECT_GET_CLASS_NAME( filemodel ), NN( IOBJECT( filemodel )->name ) ); filesel_set_flags( filesel, FALSE, TRUE ); filesel_set_filetype( filesel, class->filetype, watch_int_get( main_watchgroup, class->filetype_pref, 0 ) ); iwindow_set_parent( IWINDOW( filesel ), GTK_WIDGET( iwnd ) ); filesel_set_done( filesel, filemodel_inter_saveas_sub_cb, filemodel ); idialog_set_notify( IDIALOG( filesel ), nfn, sys ); iwindow_build( IWINDOW( filesel ) ); if( filemodel->filename ) filesel_set_filename( filesel, filemodel->filename ); gtk_widget_show( GTK_WIDGET( filesel ) ); } void filemodel_inter_saveas( iWindow *parent, Filemodel *filemodel ) { filemodel_inter_saveas_cb( parent, filemodel, iwindow_notify_null, NULL ); } void filemodel_inter_save( iWindow *parent, Filemodel *filemodel ) { if( filemodel->filename ) { if( !filemodel_top_save( filemodel, filemodel->filename ) ) iwindow_alert( GTK_WIDGET( parent ), GTK_MESSAGE_ERROR ); else filemodel_set_modified( filemodel, FALSE ); } else filemodel_inter_saveas( parent, filemodel ); } /* Now "empty" ... do an 'are you sure' check if modified has been set. */ static void filemodel_inter_empty_cb( iWindow *iwnd, void *client, iWindowNotifyFn nfn, void *sys ) { Filemodel *filemodel = FILEMODEL( client ); (void) model_empty( MODEL( filemodel ) ); filemodel_set_modified( filemodel, FALSE ); nfn( sys, IWINDOW_YES ); } static void filemodel_inter_savenempty_ok_cb( iWindow *iwnd, void *client, iWindowNotifyFn nfn, void *sys ) { iWindowSusp *susp = iwindow_susp_new( filemodel_inter_empty_cb, iwnd, client, nfn, sys ); filemodel_inter_saveas_cb( iwnd, client, iwindow_susp_comp, susp ); } void filemodel_inter_savenempty_cb( iWindow *iwnd, void *client, iWindowNotifyFn nfn, void *sys ) { Filemodel *filemodel = FILEMODEL( client ); const char *tname = IOBJECT_GET_CLASS_NAME( filemodel ); if( filemodel->modified ) { if( filemodel->filename ) box_savenosave( GTK_WIDGET( iwnd ), filemodel_inter_savenempty_ok_cb, filemodel_inter_empty_cb, filemodel, nfn, sys, _( "Object has been modified." ), _( "%s has been modified since you " "loaded it from file \"%s\".\n\n" "Do you want to save your changes?" ), tname, NN( filemodel->filename ) ); else box_savenosave( GTK_WIDGET( iwnd ), filemodel_inter_savenempty_ok_cb, filemodel_inter_empty_cb, filemodel, nfn, sys, _( "Object has been modified." ), _( "%s has been modified. " "Do you want to save your changes?" ), tname ); } else filemodel_inter_empty_cb( NULL, filemodel, nfn, sys ); } void filemodel_inter_savenempty( iWindow *parent, Filemodel *filemodel ) { filemodel_inter_savenempty_cb( parent, filemodel, iwindow_notify_null, NULL ); } /* Now "close" ... easy: just savenempty, then destroy. */ static void filemodel_inter_close_cb( iWindow *iwnd, void *client, iWindowNotifyFn nfn, void *sys ) { Filemodel *filemodel = FILEMODEL( client ); iwindow_kill( filemodel_get_window_hint( filemodel ) ); nfn( sys, IWINDOW_YES ); } void filemodel_inter_savenclose_cb( iWindow *iwnd, void *client, iWindowNotifyFn nfn, void *sys ) { iWindowSusp *susp = iwindow_susp_new( filemodel_inter_close_cb, iwnd, client, nfn, sys ); filemodel_inter_savenempty_cb( iwnd, client, iwindow_susp_comp, susp ); } void filemodel_inter_savenclose( iWindow *parent, Filemodel *filemodel ) { filemodel_inter_savenclose_cb( parent, filemodel, iwindow_notify_null, NULL ); } /* Now "load" ... add stuff to a model from a file. */ static void filemodel_inter_load_cb( iWindow *iwnd, void *client, iWindowNotifyFn nfn, void *sys ) { Filesel *filesel = FILESEL( iwnd ); Filemodel *filemodel = FILEMODEL( client ); iContainer *parent = ICONTAINER( filemodel )->parent; char *filename; if( (filename = filesel_get_filename( filesel )) ) { filemodel_set_filename( filemodel, filename ); if( filemodel_load_all( filemodel, MODEL( parent ), filename, NULL ) ) nfn( sys, IWINDOW_YES ); else nfn( sys, IWINDOW_ERROR ); g_free( filename ); } else nfn( sys, IWINDOW_ERROR ); } static void filemodel_inter_loadas_cb( iWindow *iwnd, void *client, iWindowNotifyFn nfn, void *sys ) { Filemodel *filemodel = FILEMODEL( client ); FilemodelClass *class = FILEMODEL_GET_CLASS( filemodel ); Filesel *filesel = FILESEL( filesel_new() ); iwindow_set_title( IWINDOW( filesel ), "Load %s", IOBJECT_GET_CLASS_NAME( filemodel ) ); filesel_set_flags( filesel, FALSE, TRUE ); filesel_set_filetype( filesel, class->filetype, watch_int_get( main_watchgroup, class->filetype_pref, 0 ) ); iwindow_set_parent( IWINDOW( filesel ), GTK_WIDGET( iwnd ) ); filesel_set_done( filesel, filemodel_inter_load_cb, filemodel ); idialog_set_notify( IDIALOG( filesel ), nfn, sys ); iwindow_build( IWINDOW( filesel ) ); if( filemodel->filename ) filesel_set_filename( filesel, filemodel->filename ); gtk_widget_show( GTK_WIDGET( filesel ) ); } void filemodel_inter_loadas( iWindow *parent, Filemodel *filemodel ) { filemodel_inter_loadas_cb( parent, filemodel, iwindow_notify_null, NULL ); } /* Finally "replace" ... empty, then load. */ static void filemodel_inter_replace_cb( iWindow *iwnd, void *client, iWindowNotifyFn nfn, void *sys ) { iWindowSusp *susp = iwindow_susp_new( filemodel_inter_loadas_cb, iwnd, client, nfn, sys ); filemodel_inter_savenempty_cb( iwnd, client, iwindow_susp_comp, susp ); } void filemodel_inter_replace( iWindow *parent, Filemodel *filemodel ) { filemodel_inter_replace_cb( parent, filemodel, iwindow_notify_null, NULL ); } /* Close all registered filemodels. */ /* The first registered, modified filemodel the user hasn't said "ok!!! ffs" * to. */ static Filemodel * filemodel_inter_close_get_filemodel( void ) { GSList *p; for( p = filemodel_registered; p; p = p->next ) { Filemodel *filemodel = FILEMODEL( p->data ); if( filemodel->modified ) return( filemodel ); } return( NULL ); } void filemodel_inter_close_registered_cb( iWindow *iwnd, void *client, iWindowNotifyFn nfn, void *sys ) { Filemodel *filemodel; if( (filemodel = filemodel_inter_close_get_filemodel()) ) { iWindowSusp *susp = iwindow_susp_new( filemodel_inter_close_registered_cb, iwnd, client, nfn, sys ); filemodel_inter_savenclose_cb( filemodel_get_window_hint( filemodel ), filemodel, iwindow_susp_comp, susp ); } else nfn( sys, IWINDOW_YES ); } /* Mark something as having been loaded (or made) during startup. If we loaded * from one of the system areas, zap the filename so that we will save to the * user's area on changes. */ void filemodel_set_auto_load( Filemodel *filemodel ) { filemodel->auto_load = TRUE; /* FIXME ... not very futureproof */ if( filemodel->filename && strstr( filemodel->filename, "share" G_DIR_SEPARATOR_S PACKAGE ) ) { char *p = strrchr( filemodel->filename, G_DIR_SEPARATOR ); char buf[FILENAME_MAX]; g_assert( p ); im_snprintf( buf, FILENAME_MAX, "$SAVEDIR" G_DIR_SEPARATOR_S "start" G_DIR_SEPARATOR_S "%s", p + 1 ); filemodel_set_filename( filemodel, buf ); } } nip2-8.7.0/src/workspacegroupview.h0000644000175000017500000000336613224651032014233 00000000000000/* A view for a Workspacegroup (a set of workspaces) ... display as a notebook. */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_WORKSPACEGROUPVIEW (workspacegroupview_get_type()) #define WORKSPACEGROUPVIEW( obj ) (GTK_CHECK_CAST( (obj), \ TYPE_WORKSPACEGROUPVIEW, Workspacegroupview )) #define WORKSPACEGROUPVIEW_CLASS( klass ) \ (GTK_CHECK_CLASS_CAST( (klass), \ TYPE_WORKSPACEGROUPVIEW, WorkspacegroupviewClass )) #define IS_WORKSPACEGROUPVIEW( obj ) (GTK_CHECK_TYPE( (obj), \ TYPE_WORKSPACEGROUPVIEW )) #define IS_WORKSPACEGROUPVIEW_CLASS( klass ) \ (GTK_CHECK_CLASS_TYPE( (klass), TYPE_WORKSPACEGROUPVIEW )) struct _Workspacegroupview { View parent_object; GtkWidget *tab_menu; GtkWidget *gutter_menu; GtkWidget *notebook; }; typedef struct _WorkspacegroupviewClass { ViewClass parent_class; /* My methods. */ } WorkspacegroupviewClass; GType workspacegroupview_get_type( void ); View *workspacegroupview_new( void ); nip2-8.7.0/src/trace.c0000644000175000017500000002160013224651032011345 00000000000000/* trace window */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #include "ip.h" /* OR of the flags in all the trace windows. */ TraceFlags trace_flags = (TraceFlags) 0; static LogClass *parent_class = NULL; /* All trace windows. */ static GSList *trace_all = NULL; /* Trace buffer stack. */ static VipsBuf trace_buffer_stack[SPINE_SIZE]; static int trace_buffer_stack_p = 0; /* Number of active trace blocks. */ static int trace_block_count = 0; /* All the trace menus we have. */ typedef struct _TraceTypeMenu { const char *name; TraceFlags flag; } TraceTypeMenu; /* Map action names to trace flags for the radio menu. */ static const TraceTypeMenu trace_types[] = { { "Operator", TRACE_OPERATOR }, { "Builtin", TRACE_BUILTIN }, { "Class", TRACE_CLASS_NEW }, { "VIPS", TRACE_VIPS } }; static TraceFlags trace_get_trace_flag( GtkAction *action ) { const char *name = gtk_action_get_name( action ); int i; for( i = 0; i < IM_NUMBER( trace_types ); i++ ) if( strcmp( name, trace_types[i].name ) == 0 ) return( trace_types[i].flag ); g_assert( FALSE ); /* Keep gcc happy. */ return( FALSE ); } void trace_block( void ) { trace_block_count += 1; } void trace_unblock( void ) { trace_block_count -= 1; g_assert( trace_block_count >= 0 ); } void trace_reset( void ) { int i; for( i = 0; i < trace_buffer_stack_p; i++ ) vips_buf_destroy( &trace_buffer_stack[i] ); trace_buffer_stack_p = 0; } void trace_check( void ) { g_assert( trace_buffer_stack_p == 0 ); } VipsBuf * trace_push( void ) { int i; #ifdef DEBUG printf( "trace_push: %d\n", trace_buffer_stack_p ); #endif if( trace_buffer_stack_p >= SPINE_SIZE ) { error_top( _( "Overflow error." ) ); error_sub( _( "Trace buffer stack overflow." ) ); reduce_throw( reduce_context ); } i = trace_buffer_stack_p++; vips_buf_init_dynamic( &trace_buffer_stack[i], MAX_TRACE ); return( &trace_buffer_stack[i] ); } void trace_pop( void ) { int i; #ifdef DEBUG printf( "trace_pop: %d\n", trace_buffer_stack_p ); #endif g_assert( trace_buffer_stack_p > 0 ); i = --trace_buffer_stack_p; vips_buf_destroy( &trace_buffer_stack[i] ); } VipsBuf * trace_current( void ) { g_assert( trace_buffer_stack_p > 0 ); return( &trace_buffer_stack[trace_buffer_stack_p - 1] ); } int trace_get_mark( void ) { return( trace_buffer_stack_p ); } void trace_pop_to( int n ) { g_assert( n >= 0 && n <= trace_buffer_stack_p ); while( trace_buffer_stack_p > n ) trace_pop(); } static void * trace_global_rethink_sub( Trace *trace ) { trace_flags |= trace->flags; return( NULL ); } /* Rethink the global trace_flags. */ static void trace_global_rethink( void ) { trace_flags = 0; slist_map( trace_all, (SListMapFn) trace_global_rethink_sub, NULL ); } static void trace_destroy( GtkObject *object ) { Trace *trace; g_return_if_fail( object != NULL ); g_return_if_fail( IS_TRACE( object ) ); trace = TRACE( object ); /* My instance destroy stuff. */ trace_all = g_slist_remove( trace_all, trace ); GTK_OBJECT_CLASS( parent_class )->destroy( object ); trace_global_rethink(); } static void trace_view_action_cb( GtkToggleAction *action, Trace *trace ) { TraceFlags flag = trace_get_trace_flag( GTK_ACTION( action ) ); if( gtk_toggle_action_get_active( action ) ) trace->flags |= flag; else trace->flags &= flag ^ ((TraceFlags) -1); trace_global_rethink(); } /* Our actions. */ static GtkActionEntry trace_actions[] = { { "Clear", NULL, N_( "_Clear" ), NULL, N_( "Clear trace window" ), G_CALLBACK( log_clear_action_cb ) } }; static GtkToggleActionEntry trace_toggle_actions[] = { { "Operator", NULL, N_( "_Operators" ), NULL, N_( "trace operators" ), G_CALLBACK( trace_view_action_cb ), FALSE }, { "Builtin", NULL, N_( "_Builtin Functions" ), NULL, N_( "trace calls to built in functions" ), G_CALLBACK( trace_view_action_cb ), FALSE }, { "Class", NULL, N_( "_Class Construction" ), NULL, N_( "trace class constructors" ), G_CALLBACK( trace_view_action_cb ), FALSE }, { "VIPS", NULL, N_( "_VIPS Operations" ), NULL, N_( "trace calls to VIPS" ), G_CALLBACK( trace_view_action_cb ), FALSE } }; static const char *trace_menubar_ui_description = "" " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " ""; static void trace_class_init( TraceClass *class ) { GtkObjectClass *object_class = (GtkObjectClass *) class; LogClass *log_class = (LogClass *) class; parent_class = g_type_class_peek_parent( class ); object_class->destroy = trace_destroy; log_class->actions = trace_actions; log_class->n_actions = IM_NUMBER( trace_actions ); log_class->toggle_actions = trace_toggle_actions; log_class->n_toggle_actions = IM_NUMBER( trace_toggle_actions ); log_class->action_name = "TraceActions"; log_class->ui_description = trace_menubar_ui_description; log_class->menu_bar_name = "/TraceMenubar"; } static void trace_init( Trace *trace ) { trace->flags = 0; } GtkType trace_get_type( void ) { static GtkType type = 0; if( !type ) { static const GtkTypeInfo info = { "Trace", sizeof( Trace ), sizeof( TraceClass ), (GtkClassInitFunc) trace_class_init, (GtkObjectInitFunc) trace_init, /* reserved_1 */ NULL, /* reserved_2 */ NULL, (GtkClassInitFunc) NULL, }; type = gtk_type_unique( TYPE_LOG, &info ); } return( type ); } static void trace_link( Trace *trace ) { iwindow_set_title( IWINDOW( trace ), _( "Trace" ) ); gtk_window_set_default_size( GTK_WINDOW( trace ), 640, 480 ); iwindow_set_size_prefs( IWINDOW( trace ), "TRACE_WIDTH", "TRACE_HEIGHT" ); iwindow_build( IWINDOW( trace ) ); trace_all = g_slist_prepend( trace_all, trace ); gtk_widget_show( GTK_WIDGET( trace ) ); } Trace * trace_new( void ) { Trace *trace = gtk_type_new( TYPE_TRACE ); trace_link( trace ); return( trace ); } static void * trace_text_sub( Trace *trace, const char *buf, TraceFlags flags ) { if( !trace_block_count && trace->flags & flags ) log_text( LOG( trace ), buf ); return( NULL ); } void trace_text( TraceFlags flags, const char *fmt, ... ) { va_list ap; char buf[MAX_STRSIZE]; if( !(trace_flags & flags) ) return; va_start( ap, fmt ); (void) im_vsnprintf( buf, MAX_STRSIZE, fmt, ap ); va_end( ap ); slist_map2( trace_all, (SListMap2Fn) trace_text_sub, buf, (void *) flags ); } void trace_pelement( PElement *pe ) { VipsBuf *buf = trace_current(); Heap *heap = reduce_context->heap; graph_pelement( heap, buf, pe, TRACE_FUNCTIONS ); } void trace_node( HeapNode *node ) { Element e; PElement pe; PEPOINTE( &pe, &e ); PEPUTP( &pe, ELEMENT_NODE, node ); trace_pelement( &pe ); } void trace_args( HeapNode **arg, int n ) { VipsBuf *buf = trace_current(); int i; for( i = n - 1; i >= 0; i-- ) { PElement rhs; PEPOINTRIGHT( arg[i], &rhs ); trace_pelement( &rhs ); vips_buf_appends( buf, " " ); } vips_buf_appendf( buf, "->\n" ); } void trace_binop( Compile *compile, PElement *left, BinOp bop, PElement *right ) { VipsBuf *buf = trace_current(); vips_buf_appendf( buf, "\"%s\" ", decode_BinOp( bop ) ); trace_pelement( left ); vips_buf_appends( buf, " " ); trace_pelement( right ); vips_buf_appends( buf, " -> (" ); compile_name( compile, buf ); vips_buf_appends( buf, ")\n" ); } void trace_uop( UnOp uop, PElement *arg ) { VipsBuf *buf = trace_current(); vips_buf_appendf( buf, "\"%s\" ", decode_UnOp( uop ) ); trace_pelement( arg ); vips_buf_appends( buf, " ->\n" ); } void trace_result( TraceFlags flags, PElement *out ) { VipsBuf *buf = trace_current(); vips_buf_appendf( buf, " " ); trace_pelement( out ); vips_buf_appends( buf, "\n" ); trace_text( flags, "%s", vips_buf_all( buf ) ); } nip2-8.7.0/src/call.c0000644000175000017500000007757313224651032011206 00000000000000/* Call vips functions from the graph reducer. */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with CALL - http://www.vips.ecs.soton.ac.uk */ #include "ip.h" /* #define DEBUG_TIME #define DEBUG */ /* This is usually turned on from a -D in cflags. #define DEBUG_LEAK */ /* Often want it off ... we get spurious complaints about leaks if an * operation has no images in or out (eg. im_version) because it'll never * get GCed. #undef DEBUG_LEAK */ /* CALL argument types we support. Keep order in sync with CallArgumentType. */ static im_arg_type call_supported[] = { IM_TYPE_DOUBLE, IM_TYPE_INT, IM_TYPE_COMPLEX, IM_TYPE_STRING, IM_TYPE_IMAGE, IM_TYPE_DOUBLEVEC, IM_TYPE_DMASK, IM_TYPE_IMASK, IM_TYPE_IMAGEVEC, IM_TYPE_INTVEC, IM_TYPE_GVALUE, IM_TYPE_INTERPOLATE }; static iObjectClass *parent_class = NULL; /* All the CallInfo we make ... for leak and sanity testing. Build this file * with DEBUG_LEAK to enable add/remove to this list. */ GSList *call_info_all = NULL; void call_check_all_destroyed( void ) { #ifdef DEBUG_LEAK int n_leaks; GSList *p; n_leaks = 0; for( p = call_info_all; p; p = p->next ) { CallInfo *vi = (CallInfo *) p->data; /* Operations which don't take an image as either an input or * output will stay in the cache. Don't report them. */ if( vi->ninii || vi->noutii ) { n_leaks += 1; printf( "\t%s\n", vi->name ); } } if( n_leaks ) printf( "** %d CallInfo leaked!\n", n_leaks ); #endif /*DEBUG_LEAK*/ } /* Does a vips argument type require an argument from nip2? */ gboolean call_type_needs_input( im_type_desc *ty ) { /* We supply these. */ if( strcmp( ty->type, IM_TYPE_DISPLAY ) == 0 ) return( FALSE ); if( !(ty->flags & IM_TYPE_OUTPUT) ) return( TRUE ); if( ty->flags & IM_TYPE_RW ) return( TRUE ); return( FALSE ); } /* Will a vips argument type generate a result for nip2? */ gboolean call_type_makes_output( im_type_desc *ty ) { /* We ignore these. */ if( strcmp( ty->type, IM_TYPE_DISPLAY ) == 0 ) return( FALSE ); if( ty->flags & (IM_TYPE_OUTPUT | IM_TYPE_RW) ) return( TRUE ); return( FALSE ); } /* Error early on .. we can't print args yet. */ void call_error( CallInfo *vi ) { error_top( _( "CALL library error." ) ); error_sub( _( "Error calling library function \"%s\" (%s)." ), vi->name, vi->fn->desc ); } /* Get the args from the heap. */ static void call_args_heap( CallInfo *vi, HeapNode **arg, VipsBuf *buf ) { int i; vips_buf_appendf( buf, _( "You passed:" ) ); vips_buf_appendf( buf, "\n" ); for( i = 0; i < vi->nargs; i++ ) { im_arg_desc *varg = &vi->fn->argv[vi->inpos[i]]; PElement rhs; PEPOINTRIGHT( arg[vi->nargs - i - 1], &rhs ); vips_buf_appendf( buf, " %s - ", varg->name ); itext_value_ev( vi->rc, buf, &rhs ); vips_buf_appendf( buf, "\n" ); } } /* Make a usage error for a CALL function. */ void call_usage( VipsBuf *buf, im_function *fn ) { im_package *pack = im_package_of_function( fn->name ); char input[MAX_STRSIZE]; char output[MAX_STRSIZE]; int nout, nin; int i; strcpy( input, "" ); strcpy( output, "" ); nin = 0; nout = 0; for( i = 0; i < fn->argc; i++ ) { im_arg_desc *arg = &fn->argv[i]; char line[256]; /* Format name, type message. */ im_snprintf( line, 256, " %s - %s\n", arg->name, arg->desc->type ); if( call_type_makes_output( arg->desc ) ) { strcat( output, line ); nout++; } if( call_type_needs_input( arg->desc ) ) { strcat( input, line ); nin++; } } vips_buf_appendf( buf, _( "Usage:" ) ); vips_buf_appends( buf, "\n" ); vips_buf_appendf( buf, _( "CALL operator \"%s\"" ), fn->name ); vips_buf_appends( buf, "\n" ); vips_buf_appendf( buf, _( "%s, from package \"%s\"" ), fn->desc, pack->name ); vips_buf_appends( buf, "\n" ); vips_buf_appendf( buf, ngettext( "\"%s\" takes %d argument:", "\"%s\" takes %d arguments:", nin ), fn->name, nin ); vips_buf_appendf( buf, "\n%s", input ); vips_buf_appendf( buf, ngettext( "And produces %d result:", "And produces %d results:", nout ), nout ); vips_buf_appendf( buf, "\n%s", output ); /* Print any flags this function has. */ vips_buf_appendf( buf, _( "Flags:" ) ); vips_buf_appends( buf, "\n" ); vips_buf_appendf( buf, " (" ); if( fn->flags & IM_FN_PIO ) vips_buf_appendf( buf, _( "PIO function" ) ); else vips_buf_appendf( buf, _( "WIO function" ) ); vips_buf_appendf( buf, ") (" ); if( fn->flags & IM_FN_TRANSFORM ) vips_buf_appendf( buf, _( "coordinate transformer" ) ); else vips_buf_appendf( buf, _( "no coordinate transformation" ) ); vips_buf_appendf( buf, ") (" ); if( fn->flags & IM_FN_PTOP ) vips_buf_appendf( buf, _( "point-to-point operation" ) ); else vips_buf_appendf( buf, _( "area operation" ) ); vips_buf_appendf( buf, ") (" ); if( fn->flags & IM_FN_NOCACHE ) vips_buf_appendf( buf, _( "uncacheable operation" ) ); else vips_buf_appendf( buf, _( "operation can be cached" ) ); vips_buf_appendf( buf, ")\n" ); } /* We know there's a problem exporting a particular arg to CALL. */ static void call_error_arg( CallInfo *vi, HeapNode **arg, int argi ) { char txt[10000]; VipsBuf buf = VIPS_BUF_STATIC( txt ); error_top( _( "Bad argument." ) ); vips_buf_appendf( &buf, _( "Argument %d (%s) to \"%s\" is the wrong type." ), argi + 1, vi->fn->argv[vi->inpos[argi]].name, vi->name ); vips_buf_appendf( &buf, "\n" ); call_args_heap( vi, arg, &buf ); vips_buf_appendf( &buf, "\n" ); call_usage( &buf, vi->fn ); error_sub( "%s", vips_buf_all( &buf ) ); } /* Too many args. */ void call_error_toomany( CallInfo *vi ) { char txt[1000]; VipsBuf buf = VIPS_BUF_STATIC( txt ); error_top( _( "Too many arguments." ) ); vips_buf_appendf( &buf, _( "Too many arguments to \"%s\"." ), vi->name ); vips_buf_appendf( &buf, "\n" ); call_usage( &buf, vi->fn ); error_sub( "%s", vips_buf_all( &buf ) ); } /* Look up a CALL type. */ CallArgumentType call_lookup_type( im_arg_type type ) { int i; for( i = 0; i < IM_NUMBER( call_supported ); i++ ) if( strcmp( type, call_supported[i] ) == 0 ) return( (CallArgumentType) i ); error_top( _( "Unknown type." ) ); error_sub( _( "CALL type \"%s\" not supported" ), type ); return( CALL_NONE ); } /* Is this the sort of CALL function we can call? */ gboolean call_is_callable( im_function *fn ) { int i; int nout; int nin; if( fn->argc >= MAX_CALL_ARGS ) return( FALSE ); /* Check all argument types are supported. As well as the arg types * spotted by call_lookup_type, we also allow IM_TYPE_DISPLAY. */ for( i = 0; i < fn->argc; i++ ) { im_arg_desc *arg = &fn->argv[i]; im_arg_type vt = arg->desc->type; if( call_lookup_type( vt ) == CALL_NONE ) { /* Unknown type .. if DISPLAY it's OK. */ if( strcmp( vt, IM_TYPE_DISPLAY ) != 0 ) return( FALSE ); } } nin = nout = 0; for( i = 0; i < fn->argc; i++ ) { im_type_desc *ty = fn->argv[i].desc; if( call_type_makes_output( ty ) ) nout += 1; if( call_type_needs_input( ty ) ) nin += 1; } /* Must be at least one output argument. */ /* Must be at least one output argument. */ if( nout == 0 ) return( FALSE ); /* Need at least 1 input argument: we reply on having an application * node to overwrite with (I result). */ if( nin == 0 ) return( FALSE ); return( TRUE ); } /* Count the number of args a CALL function needs. */ int call_n_args( im_function *fn ) { int i; int nin; for( nin = 0, i = 0; i < fn->argc; i++ ) { im_type_desc *ty = fn->argv[i].desc; if( call_type_needs_input( ty ) ) nin += 1; } return( nin ); } /* Make an im_doublevec_object. */ static int call_make_doublevec( im_doublevec_object *dv, int n, double *vec ) { int i; dv->n = n; dv->vec = NULL; if( n > 0 ) { if( !(dv->vec = IARRAY( NULL, n, double )) ) return( -1 ); for( i = 0; i < n; i++ ) dv->vec[i] = vec[i]; } return( 0 ); } /* Make an im_intvec_object. Make from a vec of doubles, because that's what * we get from nip. */ static int call_make_intvec( im_intvec_object *dv, int n, double *vec ) { int i; dv->n = n; dv->vec = NULL; if( n > 0 ) { if( !(dv->vec = IARRAY( NULL, n, int )) ) return( -1 ); for( i = 0; i < n; i++ ) dv->vec[i] = vec[i]; } return( 0 ); } /* Make an im_imagevec_object. */ static int call_make_imagevec( im_imagevec_object *iv, int n ) { int i; iv->n = n; iv->vec = NULL; if( n > 0 ) { if( !(iv->vec = IARRAY( NULL, n, IMAGE * )) ) return( -1 ); for( i = 0; i < n; i++ ) iv->vec[i] = NULL; } return( 0 ); } /* Add another ii to inii. */ static gboolean call_add_input_ii( CallInfo *vi, Imageinfo *ii ) { if( vi->ninii > MAX_CALL_ARGS ) { call_error_toomany( vi ); return( FALSE ); } vi->inii[vi->ninii] = ii; vi->ninii += 1; /* We hold a ref to the ii until the call is done and the result * written back to nip2. If we cache the result, we make a new * weakref. */ managed_dup_nonheap( MANAGED( ii ) ); vi->must_drop = TRUE; return( TRUE ); } /* ip types -> CALL types. Write to obj. FALSE for no conversion possible. */ static gboolean call_fromip( CallInfo *vi, int i, PElement *arg ) { im_type_desc *ty = vi->fn->argv[i].desc; CallArgumentType vt = call_lookup_type( ty->type ); im_object *obj = &vi->vargv[i]; /* If call_lookup_type failed, is it the special DISPLAY type? */ if( vt == CALL_NONE && strcmp( ty->type, IM_TYPE_DISPLAY ) != 0 ) /* Unknown type, and it's not DISPLAY. Flag an error. */ return( FALSE ); switch( vt ) { case CALL_NONE: /* IM_TYPE_DISPLAY */ /* Just use IM_TYPE_sRGB. */ *obj = im_col_displays( 7 ); break; case CALL_DOUBLE: { double *a = *obj; if( !PEISREAL( arg ) ) return( FALSE ); *a = PEGETREAL( arg ); break; } case CALL_INT: { int *i = *obj; if( PEISREAL( arg ) ) { double t = PEGETREAL( arg ); *i = (int) t; } else if( PEISBOOL( arg ) ) *i = PEGETBOOL( arg ); else return( FALSE ); break; } case CALL_COMPLEX: { double *c = *obj; if( !PEISCOMPLEX( arg ) ) return( FALSE ); c[0] = PEGETREALPART( arg ); c[1] = PEGETIMAGPART( arg ); break; } case CALL_STRING: { char **c = (char **) obj; char buf[MAX_STRSIZE]; if( !heap_get_string( arg, buf, MAX_STRSIZE ) ) return( FALSE ); *c = im_strdup( NULL, buf ); break; } case CALL_IMAGE: /* Just note the Imageinfo for now ... a later pass sets vargv * once we've checked all the LUTs. */ if( !PEISIMAGE( arg ) || !call_add_input_ii( vi, IMAGEINFO( PEGETII( arg ) ) ) ) return( FALSE ); break; case CALL_DOUBLEVEC: { double buf[MAX_VEC]; int n; if( (n = heap_get_realvec( arg, buf, MAX_VEC )) < 0 || call_make_doublevec( *obj, n, buf ) ) return( FALSE ); break; } case CALL_INTVEC: { double buf[MAX_VEC]; int n; if( (n = heap_get_realvec( arg, buf, MAX_VEC )) < 0 || call_make_intvec( *obj, n, buf ) ) return( FALSE ); break; } case CALL_IMAGEVEC: { Imageinfo *buf[MAX_VEC]; int n; int i; /* Put Imageinfo in for now ... a later pass changes this to * IMAGE* once we've checked all the LUTs. */ if( (n = heap_get_imagevec( arg, buf, MAX_VEC )) < 0 || call_make_imagevec( *obj, n ) ) return( FALSE ); for( i = 0; i < n; i++ ) if( !call_add_input_ii( vi, buf[i] ) ) return( FALSE ); break; } case CALL_DMASK: case CALL_IMASK: { im_mask_object **mo = (im_mask_object **) obj; if( vt == 6 ) { DOUBLEMASK *mask; if( !(mask = matrix_ip_to_dmask( arg )) ) return( FALSE ); (*mo)->mask = mask; (*mo)->name = im_strdupn( mask->filename ); } else { INTMASK *mask; if( !(mask = matrix_ip_to_imask( arg )) ) return( FALSE ); (*mo)->mask = mask; (*mo)->name = im_strdupn( mask->filename ); } break; } case CALL_GVALUE: { GValue *value = *obj; memset( value, 0, sizeof( GValue ) ); if( !heap_ip_to_gvalue( arg, value ) ) return( FALSE ); break; } case CALL_INTERPOLATE: if( !PEISMANAGEDGOBJECT( arg ) ) return( FALSE ); *obj = PEGETMANAGEDGOBJECT( arg ); break; default: g_assert( FALSE ); } return( TRUE ); } /* CALL types -> ip types. Write to arg. Use outiiindex to iterate through * outii[] as we find output imageinfo. */ static gboolean call_toip( CallInfo *vi, int i, int *outiiindex, PElement *arg ) { im_object obj = vi->vargv[i]; im_type_desc *ty = vi->fn->argv[i].desc; #ifdef DEBUG printf( "call_toip: arg[%d] (%s) = ", i, ty->type ); #endif /*DEBUG*/ switch( call_lookup_type( ty->type ) ) { case CALL_DOUBLE: if( !heap_real_new( vi->rc->heap, *((double*)obj), arg ) ) return( FALSE ); break; case CALL_INT: if( !heap_real_new( vi->rc->heap, *((int*)obj), arg ) ) return( FALSE ); break; case CALL_DOUBLEVEC: { im_doublevec_object *dv = obj; if( !heap_realvec_new( vi->rc->heap, dv->n, dv->vec, arg ) ) return( FALSE ); break; } case CALL_INTVEC: { im_intvec_object *iv = obj; if( !heap_intvec_new( vi->rc->heap, iv->n, iv->vec, arg ) ) return( FALSE ); break; } case CALL_COMPLEX: if( !heap_complex_new( vi->rc->heap, ((double*)obj)[0], ((double*)obj)[1], arg ) ) return( FALSE ); break; case CALL_STRING: if( !heap_managedstring_new( vi->rc->heap, (char *) obj, arg ) ) return( FALSE ); break; case CALL_IMAGE: { Imageinfo *outii; outii = vi->outii[*outiiindex]; *outiiindex += 1; PEPUTP( arg, ELEMENT_MANAGED, outii ); break; } case CALL_DMASK: { im_mask_object *mo = obj; DOUBLEMASK *mask = mo->mask; if( !matrix_dmask_to_heap( vi->rc->heap, mask, arg ) ) return( FALSE ); break; } case CALL_IMASK: { im_mask_object *mo = obj; INTMASK *mask = mo->mask; if( !matrix_imask_to_heap( vi->rc->heap, mask, arg ) ) return( FALSE ); break; } case CALL_GVALUE: if( !heap_gvalue_to_ip( (GValue *) obj, arg ) ) return( FALSE ); break; case CALL_IMAGEVEC: case CALL_INTERPOLATE: default: g_assert( FALSE ); } #ifdef DEBUG pgraph( arg ); #endif /*DEBUG*/ return( TRUE ); } static void * call_write_result_sub( Reduce *rc, PElement *safe, CallInfo *vi, PElement *out ) { int outiiindex; /* call_toip() uses this to iterate through outii[]. */ outiiindex = 0; /* Write result. */ if( vi->nres == 1 ) { /* Single result. */ if( !call_toip( vi, vi->outpos[0], &outiiindex, safe ) ) return( out ); } else { /* Have to build a list of results. */ PElement list; PElement t; int i; list = *safe; heap_list_init( &list ); for( i = 0; i < vi->nres; i++ ) { if( !heap_list_add( vi->rc->heap, &list, &t ) || !call_toip( vi, vi->outpos[i], &outiiindex, &t ) ) return( out ); (void) heap_list_next( &list ); } } /* Now overwrite out with safe. */ PEPUTPE( out, safe ); return( NULL ); } /* Write the results back to the heap. We have to so this in two stages: * build the output object linked off a new managed Element, then once it's * built, overwrite our output */ static gboolean call_write_result( CallInfo *vi, PElement *out ) { if( reduce_safe_pointer( vi->rc, (reduce_safe_pointer_fn) call_write_result_sub, vi, out, NULL, NULL ) ) return( FALSE ); return( TRUE ); } /* Junk all the refs we were holding during the call. See call_add_input_ii() * and call_add_output_ii(). * * This gets called explicitly after we have handed the ii refs back to nip2 * during normal processing, or from _dispose() if we bomb out early and * unref. */ static void call_drop_refs( CallInfo *vi ) { if( vi->must_drop ) { int i; #ifdef DEBUG printf( "call_drop_refs: dropping %d in refs\n", vi->ninii ); printf( "call_drop_refs: dropping %d out refs\n", vi->noutii ); #endif /*DEBUG*/ for( i = 0; i < vi->ninii; i++ ) managed_destroy_nonheap( MANAGED( vi->inii[i] ) ); for( i = 0; i < vi->noutii; i++ ) managed_destroy_nonheap( MANAGED( vi->outii[i] ) ); vi->must_drop = FALSE; } } static void call_info_dispose( GObject *gobject ) { CallInfo *vi; g_return_if_fail( gobject != NULL ); g_return_if_fail( IS_CALL_INFO( gobject ) ); vi = CALL_INFO( gobject ); #ifdef DEBUG printf( "call_info_dispose: (%p) %s \"%s\"\n", vi, G_OBJECT_TYPE_NAME( vi ), vi->name ); #endif /*DEBUG*/ /* Are we in the history? Remove us. */ cache_history_remove( vi ); /* Drop any refs we may have left dangling. */ call_drop_refs( vi ); G_OBJECT_CLASS( parent_class )->dispose( gobject ); } /* Junk stuff we may have attached to vargv. */ static void call_vargv_free( im_function *fn, im_object *vargv ) { int i; /* Free any CALL args we built and haven't used. */ for( i = 0; i < fn->argc; i++ ) { im_type_desc *ty = fn->argv[i].desc; im_object *obj = vargv[i]; CallArgumentType vt; /* Make sure we don't damage any error message we might * have. */ error_block(); vt = call_lookup_type( ty->type ); error_unblock(); switch( vt ) { case CALL_NONE: /* IM_TYPE_DISPLAY */ case CALL_DOUBLE: case CALL_INT: case CALL_COMPLEX: case CALL_GVALUE: case CALL_INTERPOLATE: case CALL_IMAGE: /* Do nothing. */ break; case CALL_STRING: IM_FREE( obj ); break; case CALL_IMAGEVEC: IM_FREE( ((im_imagevec_object *) obj)->vec ); break; case CALL_DOUBLEVEC: IM_FREE( ((im_doublevec_object *) obj)->vec ); break; case CALL_INTVEC: IM_FREE( ((im_intvec_object *) obj)->vec ); break; case CALL_DMASK: IM_FREE( ((im_mask_object *) obj)->name ); IM_FREEF( im_free_dmask, ((im_mask_object *) obj)->mask ); break; case CALL_IMASK: IM_FREE( ((im_mask_object *) obj)->name ); IM_FREEF( im_free_imask, ((im_mask_object *) obj)->mask ); break; default: g_assert( FALSE ); } } } static void call_info_finalize( GObject *gobject ) { CallInfo *vi; g_return_if_fail( gobject != NULL ); g_return_if_fail( IS_CALL_INFO( gobject ) ); vi = CALL_INFO( gobject ); #ifdef DEBUG_LEAK call_info_all = g_slist_remove( call_info_all, vi ); #endif /*DEBUG_LEAK*/ if( vi->vargv ) { call_vargv_free( vi->fn, vi->vargv ); im_free_vargv( vi->fn, vi->vargv ); IM_FREE( vi->vargv ); } G_OBJECT_CLASS( parent_class )->finalize( gobject ); } static void call_info_info( iObject *iobject, VipsBuf *buf ) { CallInfo *vi = CALL_INFO( iobject ); vips_buf_appendf( buf, "call_info_info: (%p) %s \"%s\"\n", vi, G_OBJECT_TYPE_NAME( vi ), NN( IOBJECT( vi )->name ) ); } static void call_info_class_init( CallInfoClass *class ) { GObjectClass *gobject_class = G_OBJECT_CLASS( class ); iObjectClass *iobject_class = IOBJECT_CLASS( class ); parent_class = g_type_class_peek_parent( class ); gobject_class->dispose = call_info_dispose; gobject_class->finalize = call_info_finalize; iobject_class->info = call_info_info; } static void call_info_init( CallInfo *vi ) { int i; vi->name = NULL; vi->fn = NULL; vi->rc = NULL; vi->vargv = NULL; vi->nargs = 0; vi->nres = 0; vi->nires = 0; vi->ninii = 0; vi->noutii = 0; vi->use_lut = FALSE; /* Set this properly later */ vi->found_hash = FALSE; vi->in_cache = FALSE; vi->must_drop = FALSE; #ifdef DEBUG_LEAK call_info_all = g_slist_prepend( call_info_all, vi ); #endif /*DEBUG_LEAK*/ for( i = 0; i < MAX_CALL_ARGS; i++ ) { vi->outii_destroy_sid[i] = 0; vi->inii_destroy_sid[i] = 0; vi->inii_invalidate_sid[i] = 0; } } GType call_info_get_type( void ) { static GType type = 0; if( !type ) { static const GTypeInfo info = { sizeof( CallInfoClass ), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) call_info_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof( CallInfo ), 32, /* n_preallocs */ (GInstanceInitFunc) call_info_init, }; type = g_type_register_static( TYPE_IOBJECT, "CallInfo", &info, 0 ); } return( type ); } static CallInfo * call_new( Reduce *rc, im_function *fn ) { CallInfo *vi; int i; g_assert( fn->argc < MAX_CALL_ARGS - 1 ); if( !fn || !(vi = CALL_INFO( g_object_new( TYPE_CALL_INFO, NULL ) )) ) return( NULL ); vi->name = fn->name; vi->fn = fn; vi->rc = rc; /* Look over the args ... count the number of inputs we need, and * the number of outputs we generate. Note the position of each. */ for( i = 0; i < vi->fn->argc; i++ ) { im_type_desc *ty = vi->fn->argv[i].desc; if( call_type_makes_output( ty ) ) { vi->outpos[vi->nres] = i; vi->nres += 1; /* Image output. */ if( strcmp( ty->type, IM_TYPE_IMAGE ) == 0 ) vi->nires += 1; } if( call_type_needs_input( ty ) ) { vi->inpos[vi->nargs] = i; vi->nargs += 1; } } /* Make the call spine, alloc memory. */ if( !(vi->vargv = IM_ARRAY( NULL, vi->fn->argc + 1, im_object )) || im_allocate_vargv( vi->fn, vi->vargv ) ) { call_error( vi ); g_object_unref( vi ); return( NULL ); } return( vi ); } /* Add another ii to outii. */ static gboolean call_add_output_ii( CallInfo *vi, Imageinfo *ii ) { if( vi->noutii > MAX_CALL_ARGS ) { call_error_toomany( vi ); return( FALSE ); } vi->outii[vi->noutii] = ii; vi->noutii += 1; /* We hold a ref to the ii until the call is done and the result * written back to nip2. If we cache the result, we make a new * weakref. */ managed_dup_nonheap( MANAGED( ii ) ); vi->must_drop = TRUE; return( TRUE ); } /* Init an output slot in vargv. */ static gboolean call_build_output( CallInfo *vi, int i ) { im_type_desc *ty = vi->fn->argv[i].desc; /* Provide output objects for the function to write to. */ switch( call_lookup_type( ty->type ) ) { case CALL_DOUBLE: case CALL_INT: case CALL_COMPLEX: case CALL_STRING: break; case CALL_IMAGE: { Imageinfo *ii; if( !(ii = imageinfo_new_temp( main_imageinfogroup, vi->rc->heap, NULL, "p" )) || !call_add_output_ii( vi, ii ) || !(vi->vargv[i] = imageinfo_get( FALSE, ii )) ) return( FALSE ); break; } case CALL_DMASK: case CALL_IMASK: { im_mask_object *mo = vi->vargv[i]; mo->mask = NULL; mo->name = im_strdup( NULL, "" ); break; } case CALL_GVALUE: { GValue *value = vi->vargv[i]; memset( value, 0, sizeof( GValue ) ); break; } case CALL_DOUBLEVEC: case CALL_INTVEC: { /* intvec is also int + pointer. */ im_doublevec_object *dv = vi->vargv[i]; dv->n = 0; dv->vec = NULL; break; } default: g_assert( FALSE ); } return( TRUE ); } static gboolean call_build_inputva( CallInfo *vi, int i, va_list *ap ) { im_type_desc *ty = vi->fn->argv[i].desc; switch( call_lookup_type( ty->type ) ) { case CALL_DOUBLE: { double v = va_arg( *ap, double ); #ifdef DEBUG printf( "%g\n", v ); #endif /*DEBUG*/ *((double*)vi->vargv[i]) = v; if( trace_flags & TRACE_VIPS ) vips_buf_appendf( trace_current(), "%g ", v ); break; } case CALL_INT: { int v = va_arg( *ap, int ); #ifdef DEBUG printf( "%d\n", v ); #endif /*DEBUG*/ *((int*)vi->vargv[i]) = v; if( trace_flags & TRACE_VIPS ) vips_buf_appendf( trace_current(), "%d ", v ); break; } case CALL_GVALUE: { GValue *value = va_arg( *ap, GValue * ); #ifdef DEBUG printf( "gvalue %p\n", value ); #endif /*DEBUG*/ vi->vargv[i] = value; if( trace_flags & TRACE_VIPS ) { vips_buf_appendgv( trace_current(), value ); vips_buf_appends( trace_current(), " " ); } break; } case CALL_INTERPOLATE: { VipsInterpolate *value = va_arg( *ap, VipsInterpolate * ); #ifdef DEBUG printf( "interpolate %p\n", value ); #endif /*DEBUG*/ vi->vargv[i] = value; if( trace_flags & TRACE_VIPS ) { vips_object_to_string( VIPS_OBJECT( value ), trace_current() ); vips_buf_appends( trace_current(), " " ); } break; } case CALL_IMAGE: { Imageinfo *ii = va_arg( *ap, Imageinfo * ); #ifdef DEBUG printf( "imageinfo %p\n", ii ); #endif /*DEBUG*/ if( !call_add_input_ii( vi, ii ) ) return( FALSE ); /* Filled in later. */ vi->vargv[i] = NULL; if( trace_flags & TRACE_VIPS ) { VipsBuf *buf = trace_current(); if( ii && ii->im ) { vips_buf_appends( buf, "<" ); vips_buf_appendf( buf, _( "image \"%s\"" ), ii->im->filename ); vips_buf_appends( buf, "> " ); } else { vips_buf_appends( buf, "<" ); vips_buf_appends( buf, _( "no image" ) ); vips_buf_appends( buf, "> " ); } } break; } case CALL_DOUBLEVEC: { int n = va_arg( *ap, int ); double *vec = va_arg( *ap, double * ); #ifdef DEBUG { int i; for( i = 0; i < n; i++ ) printf( "%g, ", vec[i] ); printf( "\n" ); } #endif /*DEBUG*/ if( call_make_doublevec( vi->vargv[i], n, vec ) ) return( FALSE ); if( trace_flags & TRACE_VIPS ) { VipsBuf *buf = trace_current(); int i; vips_buf_appendf( buf, "<" ); vips_buf_appendf( buf, _( "doublevec" ) ); for( i = 0; i < n; i++ ) vips_buf_appendf( buf, " %g", vec[i] ); vips_buf_appends( buf, "> " ); } break; } /* FIXME ... add intvec perhaps */ case CALL_IMAGEVEC: { int n = va_arg( *ap, int ); Imageinfo **vec = va_arg( *ap, Imageinfo ** ); #ifdef DEBUG { int i; for( i = 0; i < n; i++ ) printf( "%p, ", vec[i] ); printf( "\n" ); } #endif /*DEBUG*/ if( call_make_imagevec( vi->vargv[i], n ) ) return( FALSE ); for( i = 0; i < n; i++ ) if( !call_add_input_ii( vi, vec[i] ) ) return( FALSE ); if( trace_flags & TRACE_VIPS ) { VipsBuf *buf = trace_current(); int i; vips_buf_appendf( buf, "<" ); vips_buf_appendf( buf, _( "imagevec" ) ); for( i = 0; i < n; i++ ) { vips_buf_appendf( buf, " <" ); vips_buf_appendf( buf, _( "image \"%s\"" ), vec[i]->im->filename ); vips_buf_appendf( buf, ">" ); } vips_buf_appends( buf, "> " ); } break; } default: g_assert( FALSE ); } return( TRUE ); } /* Fill an argument vector from the C stack. */ static gboolean call_fillva( CallInfo *vi, va_list *ap ) { int i; g_assert( vi->ninii == 0 ); g_assert( vi->noutii == 0 ); for( i = 0; i < vi->fn->argc; i++ ) { im_type_desc *ty = vi->fn->argv[i].desc; #ifdef DEBUG printf( "call_fillva: arg[%d] (%s) = ", i, ty->type ); #endif /*DEBUG*/ if( call_type_makes_output( ty ) ) { if( !call_build_output( vi, i ) ) return( FALSE ); #ifdef DEBUG printf( " output\n" ); #endif /*DEBUG*/ } if( strcmp( ty->type, IM_TYPE_DISPLAY ) == 0 ) { /* DISPLAY argument ... just IM_TYPE_sRGB. */ vi->vargv[i] = im_col_displays( 7 ); #ifdef DEBUG printf( " display\n" ); #endif /*DEBUG*/ } if( call_type_needs_input( ty ) ) { if( !call_build_inputva( vi, i, ap ) ) return( FALSE ); } } /* Every output ii depends upon all of the input ii. */ for( i = 0; i < vi->noutii; i++ ) managed_sub_add_all( MANAGED( vi->outii[i] ), vi->ninii, (Managed **) vi->inii ); #ifdef DEBUG printf( "call_fill_spine: reffed %d in\n", vi->ninii ); printf( "call_fill_spine: created %d out\n", vi->noutii ); #endif /*DEBUG*/ return( TRUE ); } static gboolean callva_sub( Reduce *rc, const char *name, PElement *out, va_list *ap ) { CallInfo *vi; gboolean result; if( trace_flags & TRACE_VIPS ) trace_push(); if( !(vi = call_new( rc, im_find_function( name ) )) ) return( FALSE ); if( trace_flags & TRACE_VIPS ) vips_buf_appendf( trace_current(), "\"%s\" ", vi->name ); result = TRUE; if( !call_fillva( vi, ap ) ) result = FALSE; if( trace_flags & TRACE_VIPS ) vips_buf_appends( trace_current(), " ->\n" ); if( result && ( !(vi = cache_dispatch( vi, out )) || !call_write_result( vi, out ) ) ) result = FALSE; if( trace_flags & TRACE_VIPS ) { trace_result( TRACE_VIPS, out ); trace_pop(); } if( vi ) { /* We must drop refs explicitly, since this unref might not * dispose the vi. */ call_drop_refs( vi ); g_object_unref( vi ); } return( result ); } /* Call a CALL function picking up args from the function call. */ void callva( Reduce *rc, PElement *out, const char *name, ... ) { va_list ap; gboolean result; #ifdef DEBUG printf( "** callva: starting for %s\n", name ); #endif /*DEBUG*/ va_start( ap, name ); result = callva_sub( rc, name, out, &ap ); va_end( ap ); #ifdef DEBUG printf( "callva: done\n" ); #endif /*DEBUG*/ if( !result ) reduce_throw( rc ); } /* Fill an argument vector from our stack frame. Number of args already * checked. */ static gboolean call_fill_spine( CallInfo *vi, HeapNode **arg ) { int i, j; g_assert( vi->ninii == 0 ); g_assert( vi->noutii == 0 ); /* Fully reduce all arguments. Once we've done this, we can be sure * there will not be a GC while we gather, and therefore that no * pointers will become invalid during this call. */ for( i = 0; i < vi->nargs; i++ ) { PElement rhs; PEPOINTRIGHT( arg[i], &rhs ); if( !heap_reduce_strict( &rhs ) ) return( FALSE ); } for( j = 0, i = 0; i < vi->fn->argc; i++ ) { im_type_desc *ty = vi->fn->argv[i].desc; if( call_type_makes_output( ty ) ) if( !call_build_output( vi, i ) ) return( FALSE ); if( strcmp( ty->type, IM_TYPE_DISPLAY ) == 0 ) { /* Special DISPLAY argument - don't fetch another ip * argument for it. */ (void) call_fromip( vi, i, NULL ); } if( call_type_needs_input( ty ) ) { PElement rhs; /* Convert ip type to CALL type. */ PEPOINTRIGHT( arg[vi->nargs - j - 1], &rhs ); if( !call_fromip( vi, i, &rhs ) ) { call_error_arg( vi, arg, j ); return( FALSE ); } j += 1; } } /* Every output ii depends upon all of the input ii. */ for( i = 0; i < vi->noutii; i++ ) managed_sub_add_all( MANAGED( vi->outii[i] ), vi->ninii, (Managed **) vi->inii ); #ifdef DEBUG printf( "call_fill_spine: reffed %d inii\n", vi->ninii ); printf( "call_fill_spine: created %d outii\n", vi->noutii ); #endif /*DEBUG*/ return( TRUE ); } static gboolean call_spine_sub( Reduce *rc, const char *name, im_function *fn, PElement *out, HeapNode **arg ) { CallInfo *vi; gboolean result; #ifdef DEBUG printf( "** call_spine: starting for %s\n", name ); #endif /*DEBUG*/ if( !(vi = call_new( rc, fn )) ) return( FALSE ); if( trace_flags & TRACE_VIPS ) { VipsBuf *buf = trace_push(); vips_buf_appendf( buf, "\"%s\" ", name ); trace_args( arg, vi->nargs ); } result = TRUE; if( !call_fill_spine( vi, arg ) || !(vi = cache_dispatch( vi, out )) || !call_write_result( vi, out ) ) result = FALSE; if( trace_flags & TRACE_VIPS ) { trace_result( TRACE_VIPS, out ); trace_pop(); } if( vi ) { /* We must drop refs explicitly, since this unref might not * dispose the vi. */ call_drop_refs( vi ); g_object_unref( vi ); } #ifdef DEBUG printf( "call_spine: done\n" ); #endif /*DEBUG*/ return( result ); } /* Call a CALL function, pick up args from the graph. */ void call_spine( Reduce *rc, const char *name, HeapNode **arg, PElement *out ) { if( !call_spine_sub( rc, name, im_find_function( name ), out, arg ) ) reduce_throw( rc ); } /* As an ActionFn. */ void call_run( Reduce *rc, Compile *compile, int op, const char *name, HeapNode **arg, PElement *out, im_function *function ) { if( !call_spine_sub( rc, name, function, out, arg ) ) reduce_throw( rc ); } nip2-8.7.0/src/graphwindow.c0000644000175000017500000002612513224651032012607 00000000000000/* display workspaces with graphviz */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* TODO Don't generate DOT in a file, build the graph ourselves. We'd need some sort of graph hash thing to avoid relayouts. Or perhaps a workspace hash? A hash by column? After layout, don't render to a file, instead draw directly to the output window with cairo. Copy/paste code from the png:cairo render. Have some simple culling stuff to only render visible parts of the graph. As well as "view workspace as graph", have a "view column as graph" item. Don't show nodes which are not inside this workspace. Possibly add graph editing, or at least edge highlighting as you mouse. Let columns be collapsed / expanded, and start the view with columns collapsed if there's more than 1. This might be easier if columns were separate scopes, I suppose. Do we should dynamic dependencies? How about (A2 = untitled."A1") ? */ /* #define DEBUG */ #include "ip.h" #ifdef HAVE_LIBGVC static FloatwindowClass *parent_class = NULL; static int graph_write_cluster_index = 0; static void * graph_write_row_child( Link *link, VipsBuf *buf ) { if( link->child->expr && link->child->expr->row ) { vips_buf_appendf( buf, "\t\t%s -> %s;\n", IOBJECT( link->child )->name, IOBJECT( link->parent )->name ); } return( NULL ); } static void * graph_write_row( Row *row, VipsBuf *buf ) { if( row->sym ) slist_map( row->sym->topchildren, (SListMapFn) graph_write_row_child, buf ); return( NULL ); } static void * graph_write_column( Column *col, VipsBuf *buf ) { vips_buf_appendf( buf, "\tsubgraph cluster_%d {\n", graph_write_cluster_index++ ); vips_buf_appendf( buf, "\t\tlabel = \"%s", IOBJECT( col )->name ); if( IOBJECT( col )->caption ) vips_buf_appendf( buf, " - %s", IOBJECT( col )->caption ); vips_buf_appends( buf, "\"\n" ); vips_buf_appends( buf, "\t\tstyle=filled;\n" ); vips_buf_appends( buf, "\t\tcolor=lightgrey;\n" ); vips_buf_appends( buf, "\t\tnode [style=filled,color=white];\n" ); (void) column_map( col, (row_map_fn) graph_write_row, buf, NULL ); vips_buf_appends( buf, "\t}\n" ); return( NULL ); } /* Generate the workspace in dot format. */ static void graph_write_dot( Workspace *ws, VipsBuf *buf ) { graph_write_cluster_index = 0; vips_buf_appends( buf, "digraph G {\n" ); workspace_map_column( ws, (column_map_fn) graph_write_column, buf ); vips_buf_appends( buf, "}\n" ); } /* Print the workspace in dot format. Display with something like: * $ dot test1.dot -o test1.png -Tpng:cairo -v * $ eog test1.png */ void graph_write( Workspace *ws ) { char txt[1024]; VipsBuf buf = VIPS_BUF_STATIC( txt ); graph_write_dot( ws, &buf ); printf( "%s", vips_buf_all( &buf ) ); } static void graphwindow_destroy( GtkObject *object ) { Graphwindow *graphwindow; g_return_if_fail( object != NULL ); g_return_if_fail( IS_GRAPHWINDOW( object ) ); graphwindow = GRAPHWINDOW( object ); #ifdef DEBUG printf( "graphwindow_destroy: %p\n", graphwindow ); #endif /*DEBUG*/ /* My instance destroy stuff. */ IM_FREE( graphwindow->dot ); IM_FREEF( g_source_remove, graphwindow->layout_timeout ); UNREF( graphwindow->imagemodel ); IM_FREEF( agclose, graphwindow->graph ); IM_FREEF( gvFreeContext, graphwindow->gvc ); FREESID( graphwindow->workspace_changed_sid, FLOATWINDOW( graphwindow )->model ); GTK_OBJECT_CLASS( parent_class )->destroy( object ); } static void graphwindow_class_init( GraphwindowClass *class ) { GtkObjectClass *object_class = (GtkObjectClass *) class; parent_class = g_type_class_peek_parent( class ); object_class->destroy = graphwindow_destroy; /* Create signals. */ /* Init methods. */ } static void graphwindow_init( Graphwindow *graphwindow ) { #ifdef DEBUG printf( "graphwindow_init: %p\n", graphwindow ); #endif /*DEBUG*/ graphwindow->dot = NULL; graphwindow->layout_timeout = 0; graphwindow->gvc = gvContext(); } GType graphwindow_get_type( void ) { static GType type = 0; if( !type ) { static const GTypeInfo info = { sizeof( GraphwindowClass ), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) graphwindow_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof( Graphwindow ), 32, /* n_preallocs */ (GInstanceInitFunc) graphwindow_init, }; type = g_type_register_static( TYPE_FLOATWINDOW, "Graphwindow", &info, 0 ); } return( type ); } static void graphwindow_refresh_title( Graphwindow *graphwindow ) { Workspace *ws = WORKSPACE( FLOATWINDOW( graphwindow )->model ); VipsBuf buf; char txt[512]; #ifdef DEBUG printf( "graphwindow_refresh_title\n" ); #endif /*DEBUG*/ vips_buf_init_static( &buf, txt, 512 ); if( ws->sym ) symbol_qualified_name( ws->sym, &buf ); iwindow_set_title( IWINDOW( graphwindow ), "%s", vips_buf_all( &buf ) ); } static gboolean graphwindow_build_graph( Graphwindow *graphwindow ) { char tname[FILENAME_MAX]; iOpenFile *of; if( !temp_name( tname, "dot" ) || !(of = ifile_open_write( "%s", tname )) ) return( FALSE ); if( !ifile_write( of, "%s", graphwindow->dot ) ) { ifile_close( of ); unlinkf( "%s", tname ); return( FALSE ); } ifile_close( of ); if( !(of = ifile_open_read( "%s", tname )) ) { unlinkf( "%s", tname ); return( FALSE ); } IM_FREEF( agclose, graphwindow->graph ); graphwindow->graph = agread( of->fp, NULL ); ifile_close( of ); unlinkf( "%s", tname ); return( TRUE ); } static gboolean graphwindow_update_image( Graphwindow *graphwindow ) { char tname[FILENAME_MAX]; iOpenFile *of; Imageinfo *ii; if( !temp_name( tname, "png" ) || !(of = ifile_open_write( "%s", tname )) ) return( FALSE ); gvRender( graphwindow->gvc, graphwindow->graph, "png:cairo", of->fp ); ifile_close( of ); if( !(ii = imageinfo_new_input( main_imageinfogroup, GTK_WIDGET( graphwindow ), NULL, tname )) ) { unlinkf( "%s", tname ); return( FALSE ); } conversion_set_image( graphwindow->imagemodel->conv, ii ); MANAGED_UNREF( ii ); /* We can unlink now: the png will have been converted to vips * format. */ unlinkf( "%s", tname ); return( TRUE ); } static gboolean graphwindow_layout( Graphwindow *graphwindow ) { if( !graphwindow_build_graph( graphwindow ) ) return( FALSE ); gvLayout( graphwindow->gvc, graphwindow->graph, "dot" ); if( !graphwindow_update_image( graphwindow ) ) return( FALSE ); return( TRUE ); } static gboolean graphwindow_layout_cb( Graphwindow *graphwindow ) { Workspace *ws = WORKSPACE( FLOATWINDOW( graphwindow )->model ); char txt[MAX_STRSIZE]; VipsBuf buf = VIPS_BUF_STATIC( txt ); graphwindow->layout_timeout = 0; graph_write_dot( ws, &buf ); if( !graphwindow->dot || strcmp( vips_buf_all( &buf ), graphwindow->dot ) != 0 ) { IM_FREE( graphwindow->dot ); graphwindow->dot = im_strdup( NULL, vips_buf_all( &buf ) ); #ifdef DEBUG printf( "graphwindow_changed_cb:\n%s\n", graphwindow->dot ); #endif /*DEBUG*/ if( !graphwindow_layout( graphwindow ) ) iwindow_alert( GTK_WIDGET( graphwindow ), GTK_MESSAGE_ERROR ); } /* Clear the timeout. */ return( FALSE ); } static void graphwindow_layout_queue( Graphwindow *graphwindow ) { IM_FREEF( g_source_remove, graphwindow->layout_timeout ); graphwindow->layout_timeout = g_timeout_add( 200, (GSourceFunc) graphwindow_layout_cb, graphwindow ); } /* The model has changed. */ static void graphwindow_changed_cb( Workspace *ws, Graphwindow *graphwindow ) { #ifdef DEBUG printf( "graphwindow_changed_cb: %p\n", graphwindow ); #endif /*DEBUG*/ graphwindow_refresh_title( graphwindow ); graphwindow_layout_queue( graphwindow ); } static const char *graphwindow_menubar_ui_description = "" " " " " " " " " " " " " " " " " " " " " " " " " ""; static void graphwindow_build( Graphwindow *graphwindow, GtkWidget *vbox, Workspace *ws ) { iWindow *iwnd = IWINDOW( graphwindow ); GError *error; GtkWidget *mbar; GtkWidget *frame; /* Make our model. */ graphwindow->imagemodel = imagemodel_new( NULL ); g_object_ref( G_OBJECT( graphwindow->imagemodel ) ); iobject_sink( IOBJECT( graphwindow->imagemodel ) ); graphwindow->workspace_changed_sid = g_signal_connect( G_OBJECT( ws ), "changed", G_CALLBACK( graphwindow_changed_cb ), graphwindow ); /* Make main menu bar */ error = NULL; if( !gtk_ui_manager_add_ui_from_string( iwnd->ui_manager, graphwindow_menubar_ui_description, -1, &error ) ) { g_message( "building menus failed: %s", error->message ); g_error_free( error ); exit( EXIT_FAILURE ); } mbar = gtk_ui_manager_get_widget( iwnd->ui_manager, "/GraphwindowMenubar" ); gtk_box_pack_start( GTK_BOX( vbox ), mbar, FALSE, FALSE, 0 ); gtk_widget_show( mbar ); /* This will set to NULL if we don't have infobar support. */ if( (iwnd->infobar = infobar_new()) ) gtk_box_pack_start( GTK_BOX( vbox ), GTK_WIDGET( iwnd->infobar ), FALSE, FALSE, 0 ); /* Graph area. */ frame = gtk_frame_new( NULL ); gtk_frame_set_shadow_type( GTK_FRAME( frame ), GTK_SHADOW_OUT ); gtk_widget_show( frame ); gtk_box_pack_start( GTK_BOX( vbox ), GTK_WIDGET( frame ), TRUE, TRUE, 0 ); graphwindow->ip = imagepresent_new( graphwindow->imagemodel ); gtk_container_add( GTK_CONTAINER( frame ), GTK_WIDGET( graphwindow->ip ) ); gtk_widget_show( GTK_WIDGET( graphwindow->ip ) ); } static void graphwindow_link( Graphwindow *graphwindow, Workspace *ws, GtkWidget *parent ) { iwindow_set_build( IWINDOW( graphwindow ), (iWindowBuildFn) graphwindow_build, ws, NULL, NULL ); iwindow_set_parent( IWINDOW( graphwindow ), parent ); floatwindow_link( FLOATWINDOW( graphwindow ), MODEL( ws ) ); iwindow_set_size_prefs( IWINDOW( graphwindow ), "GRAPH_WINDOW_WIDTH", "GRAPH_WINDOW_HEIGHT" ); iwindow_build( IWINDOW( graphwindow ) ); /* Initial "changed" on the model to get all views to init. */ iobject_changed( IOBJECT( ws ) ); } Graphwindow * graphwindow_new( Workspace *ws, GtkWidget *parent ) { Graphwindow *graphwindow = gtk_type_new( TYPE_GRAPHWINDOW ); graphwindow_link( graphwindow, ws, parent ); return( graphwindow ); } #endif /*HAVE_LIBGVC*/ nip2-8.7.0/src/real.c0000644000175000017500000000335113224651032011175 00000000000000/* an input real ... put/get methods */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #include "ip.h" static ValueClass *parent_class = NULL; static void real_class_init( RealClass *class ) { parent_class = g_type_class_peek_parent( class ); /* Create signals. */ model_register_loadable( MODEL_CLASS( class ) ); } static void real_init( Real *real ) { iobject_set( IOBJECT( real ), CLASS_REAL, NULL ); } GType real_get_type( void ) { static GType type = 0; if( !type ) { static const GTypeInfo info = { sizeof( RealClass ), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) real_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof( Real ), 32, /* n_preallocs */ (GInstanceInitFunc) real_init, }; type = g_type_register_static( TYPE_VALUE, "Real", &info, 0 ); } return( type ); } nip2-8.7.0/src/iobject.h0000644000175000017500000000644113224651032011701 00000000000000/* abstract base class for all nip objects */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_IOBJECT (iobject_get_type()) #define IOBJECT( obj ) \ (G_TYPE_CHECK_INSTANCE_CAST( (obj), TYPE_IOBJECT, iObject )) #define IOBJECT_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_CAST( (klass), TYPE_IOBJECT, iObjectClass)) #define IS_IOBJECT( obj ) \ (G_TYPE_CHECK_INSTANCE_TYPE( (obj), TYPE_IOBJECT )) #define IS_IOBJECT_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_TYPE( (klass), TYPE_IOBJECT )) #define IOBJECT_GET_CLASS( obj ) \ (G_TYPE_INSTANCE_GET_CLASS( (obj), TYPE_IOBJECT, iObjectClass )) /* Handy iobject_destroy() shortcut. */ #define IDESTROY( O ) { \ if( O ) { \ (void) iobject_destroy( IOBJECT( O ) ); \ ( O ) = NULL; \ } \ } struct _iObject { GObject parent_object; /* My instance vars. */ char *name; /* iObject name */ char *caption; /* Comment of some sort */ /* True when created ... the 1 reference that gobject makes is * 'floating' and not owned by anyone. Do _sink() after every _ref() * to transfer ownership to the parent container. Upshot: no need to * _unref() after _add() in _new(). */ gboolean floating; /* Stop destroy loops with this. */ gboolean in_destruction; }; typedef struct _iObjectClass { GObjectClass parent_class; /* End object's lifetime, just like gtk_object_destroy. */ void (*destroy)( iObject * ); /* Something about the object has changed. Should use glib's properties * but fix this later. */ void (*changed)( iObject * ); /* Try and say something useful about us. */ void (*info)( iObject *, VipsBuf * ); /* Called on _changed() to update the caption. Define this if you want * the caption to be an explanatory note about the object. */ const char *(*generate_caption)( iObject * ); /* The i18n name for this class we show the user. FOr example, * Workspace is referred to as "tab" by the user. */ const char *user_name; } iObjectClass; #define IOBJECT_GET_CLASS_NAME( obj ) \ ((G_TYPE_INSTANCE_GET_CLASS( (obj), \ TYPE_IOBJECT, iObjectClass ))->user_name) void *iobject_destroy( iObject *iobject ); void *iobject_changed( iObject *iobject ); void *iobject_info( iObject *iobject, VipsBuf * ); GType iobject_get_type( void ); void *iobject_test_name( iObject *iobject, const char *name ); void *iobject_print( iObject *iobject ); void iobject_set( iObject *iobject, const char *name, const char *caption ); void iobject_sink( iObject *iobject ); void iobject_dump( iObject *iobject ); nip2-8.7.0/src/managed.h0000644000175000017500000000616613224651032011662 00000000000000/* managed objects ... things like Imageinfo which are lifetime managed by * both the GC and by pointers from C: we need to both mark/sweep and refcount * * abstract class: Managedgvalue, Imageinfo, etc. build off this */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_MANAGED (managed_get_type()) #define MANAGED( obj ) \ (G_TYPE_CHECK_INSTANCE_CAST( (obj), TYPE_MANAGED, Managed )) #define MANAGED_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_CAST( (klass), TYPE_MANAGED, ManagedClass)) #define IS_MANAGED( obj ) \ (G_TYPE_CHECK_INSTANCE_TYPE( (obj), TYPE_MANAGED )) #define IS_MANAGED_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_TYPE( (klass), TYPE_MANAGED )) #define MANAGED_GET_CLASS( obj ) \ (G_TYPE_INSTANCE_GET_CLASS( (obj), TYPE_MANAGED, ManagedClass )) #define MANAGED_UNREF( X ) { \ if( X ) { \ managed_destroy_nonheap( MANAGED( X ) ); \ X = NULL; \ } \ } #define MANAGED_REF( X ) managed_dup_nonheap( MANAGED( X ) ) struct _Managed { iContainer parent_object; /* Can't just set ->heap = NULL to mean unattached, our subclasses * rely on ->heap being valid even during dispose. */ Heap *heap; /* Heap we are attached to */ gboolean attached; /* If we are attached to the heap */ gboolean marked; /* For mark-sweep */ int count; /* Number of non-heap pointers to us */ gboolean zombie; /* Unreffed, but being kept alive */ double time; /* When we became a zombie */ /* FIXME ... This should go with vips8: it does dependency tracking for us. */ GSList *sub; /* Sub-objects ... mark these if we mark this */ /* Set by subclasses as part of construction. */ guint hash; }; typedef struct _ManagedClass { iContainerClass parent_class; /* How long after zombiefying before we unref. */ double keepalive; } ManagedClass; void managed_check_all_destroyed( void ); void managed_link_heap( Managed *managed, Heap *heap ); void managed_destroy_heap( Managed *managed ); void *managed_destroy_nonheap( Managed *managed ); void managed_dup_nonheap( Managed *managed ); void *managed_sub_remove( Managed *in, Managed *managed ); void managed_sub_add( Managed *managed, Managed *in ); void managed_sub_add_all( Managed *out, int nin, Managed **in ); GType managed_get_type( void ); void managed_clear( Heap *heap ); void managed_mark( Managed *managed ); gboolean managed_free_unused( Heap *heap ); nip2-8.7.0/src/tool.h0000644000175000017500000000760513224651032011242 00000000000000/* Tools ... mostly a menu item. */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* Build a tree of these for each tool we make. */ struct _Toolitem { /* The thing for which we are making an item. Eg. if the .def file * has 'fred = class Menuitem "poop" "lots of poop" {}', this is the * Compile for fred. * * compile is not always valid .. eg. for #dialog or #separator */ Compile *compile; /* The top-level tool we come from. */ Tool *tool; /* The symbol we perform the action with (eg. get nparam from this). */ Symbol *action_sym; /* Set for a separator. */ gboolean is_separator; /* Set if we decide during build that this item should be a pullright. */ gboolean is_pullright; /* If this is a pullright, the children of this item. If we are a * child, the parent. */ GSList *children; Toolitem *parent; /* Set if we decide this should have an action. */ gboolean is_action; char *label; /* eg. "W_hite Balance" */ char *name; /* eg. "White Balance" */ char *icon; /* eg. "$VIPSHOME/icons/wb.png" */ char *tooltip; /* eg. "move whitepoint to region neutral" */ char *help; /* eg. "White Balance r: move ..." */ char *action; /* eg. "White_balance_widget._action" */ char *path; /* eg. "/Toolkits/Image" */ char *user_path; /* eg. "Image / White Balance" */ }; #define TYPE_TOOL (tool_get_type()) #define TOOL( obj ) \ (G_TYPE_CHECK_INSTANCE_CAST( (obj), TYPE_TOOL, Tool )) #define TOOL_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_CAST( (klass), TYPE_TOOL, ToolClass)) #define IS_TOOL( obj ) \ (G_TYPE_CHECK_INSTANCE_TYPE( (obj), TYPE_TOOL )) #define IS_TOOL_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_TYPE( (klass), TYPE_TOOL )) #define TOOL_GET_CLASS( obj ) \ (G_TYPE_INSTANCE_GET_CLASS( (obj), TYPE_TOOL, ToolClass )) /* Tool types: a def (sym points to symbol for this def), a dialog (keep * filename and prompt name), or a separator. */ typedef enum { TOOL_SYM, TOOL_DIA, TOOL_SEP } Tooltype; /* What we hold for each tool. */ struct _Tool { Filemodel parent_class; Tooltype type; Symbol *sym; /* For SYM tools: symbol this tool represents */ guint new_value_sid; /* Watch for new_value with this */ Symbol *link_sym; /* the sym we are watching (in case ->sym is NULLed before we try to disconnect */ Toolkit *kit; /* Link back to toolkit */ int lineno; /* -1 for not known, or lineno in kit */ Toolitem *toolitem; /* Items made by this tool */ /* The first line of the comment prior to the definition. Toolitem help * and tooltip can be generated from the Menuitem members. */ char *help; /* eg. "concat l: join a list of .." */ }; typedef struct _ToolClass { FilemodelClass parent_class; /* My methods. */ } ToolClass; void tool_error( Tool *tool, VipsBuf *buf ); void *tool_linkreport_tool( Tool *tool, VipsBuf *buf, gboolean *found ); GType tool_get_type( void ); Tool *tool_new_sym( Toolkit *kit, int pos, Symbol *sym ); Tool *tool_new_sep( Toolkit *kit, int pos ); Tool *tool_new_dia( Toolkit *kit, int pos, const char *filename, const char *name ); Toolitem *toolitem_lookup( Toolkitgroup *kitg, Symbol *action ); nip2-8.7.0/src/row.c0000644000175000017500000013375513224651032011075 00000000000000/* A row in a workspace ... not a widget, part of subcolumn */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* Mad detail. #define DEBUG */ /* Show each row being calculated. #define DEBUG_ROW */ /* Making and removing links between rows. #define DEBUG_LINK */ /* Time row recomp. #define DEBUG_TIME_SORT */ /* Trace create/destroy. #define DEBUG_NEW */ /* Dirty/clean stuff. #define DEBUG_DIRTY */ /* Error set/clear. #define DEBUG_ERROR */ /* Show row recomp order decisions. #define DEBUG_SORT_VERBOSE #define DEBUG_SORT */ #include "ip.h" static HeapmodelClass *parent_class = NULL; static void * row_map_all_sub( Model *model, row_map_fn fn, void *a, void *b, void *c ) { if( IS_ROW( model ) ) return( fn( ROW( model ), a, b, c ) ); return( NULL ); } static void * row_map_all( Row *row, row_map_fn fn, void *a, void *b, void *c ) { return( icontainer_map4_all( ICONTAINER( row ), (icontainer_map4_fn) row_map_all_sub, (void *) fn, a, b, c ) ); } const char * row_name( Row *row ) { if( row->sym ) return( IOBJECT( row->sym )->name ); else return( IOBJECT( row )->name ); } static Row * row_get_parent( Row *row ) { return( HEAPMODEL( row )->row ); } /* Make a fully-qualified name for a row's symbol ... walk back up the tally * hierarchy. eg. "A1.fred.x" ... produce a name which will find this row from * a local of context. */ void row_qualified_name_relative( Symbol *context, Row *row, VipsBuf *buf ) { if( !row_get_parent( row ) ) { if( !row->sym ) vips_buf_appends( buf, "(null)" ); else symbol_qualified_name_relative( context, row->sym, buf ); } else { /* Qualify our parents, then do us. */ row_qualified_name_relative( context, row_get_parent( row ), buf ); vips_buf_appends( buf, "." ); vips_buf_appends( buf, row_name( row ) ); } } /* Make a fully-qualified name for a row's symbol ... walk back up the tally * hierarchy. eg. "A1.fred.x". */ void row_qualified_name( Row *row, VipsBuf *buf ) { if( row->ws ) row_qualified_name_relative( row->ws->sym, row, buf ); } /* Convenience ... print a row name out, identifying by tally heirarchy. */ void * row_name_print( Row *row ) { if( row ) { char txt[100]; VipsBuf buf = VIPS_BUF_STATIC( txt ); row_qualified_name( row, &buf ); printf( "%s ", vips_buf_all( &buf ) ); } else printf( "(null)" ); return( NULL ); } static void * row_dirty_clear( Row *row ) { #ifdef DEBUG_DIRTY { Row *top_row = row->top_row; if( row->dirty ) g_assert( g_slist_find( top_row->recomp, row ) ); } #endif /*DEBUG_DIRTY*/ if( row->dirty ) { Row *top_row = row->top_row; row->dirty = FALSE; top_row->recomp = g_slist_remove( top_row->recomp, row ); #ifdef DEBUG_DIRTY printf( "row_dirty_clear: " ); row_name_print( row ); printf( "\n" ); #endif /*DEBUG_DIRTY*/ iobject_changed( IOBJECT( row ) ); } return( NULL ); } /* Set a single row dirty. */ static void * row_dirty_set_single( Row *row, gboolean clear_error ) { #ifdef DEBUG_DIRTY { Row *top_row = row->top_row; if( row->dirty ) g_assert( g_slist_find( top_row->recomp, row ) ); if( !row->dirty ) g_assert( !g_slist_find( top_row->recomp, row ) ); } #endif /*DEBUG_DIRTY*/ if( !row->dirty ) { Row *top_row = row->top_row; row->dirty = TRUE; top_row->recomp = g_slist_prepend( top_row->recomp, row ); iobject_changed( IOBJECT( row ) ); #ifdef DEBUG_DIRTY printf( "row_dirty_set_single: " ); row_name_print( row ); printf( " clear_error = %s\n", bool_to_char( clear_error ) ); #endif /*DEBUG_DIRTY*/ /* Make sure error is clear ... we want to recomp. */ if( row->expr && clear_error ) expr_error_clear( row->expr ); } return( NULL ); } static void * row_dirty_set_sub( Model *model, gboolean clear_error ) { if( IS_ROW( model ) ) { Row *row = ROW( model ); Rhs *rhs = row->child_rhs; g_assert( !rhs || IS_RHS( rhs ) ); if( rhs && rhs->itext && ITEXT( rhs->itext )->edited ) row_dirty_set_single( row, clear_error ); else if( rhs && rhs->graphic && CLASSMODEL( rhs->graphic )->edited ) row_dirty_set_single( row, clear_error ); } return( NULL ); } /* When we mark a row dirty, we need to mark any subrows with non-default * values dirty too so that they will get a chance to reapply their edits over * the top of the new value we will make for this row. */ static void * row_dirty_set( Row *row, gboolean clear_error ) { row_dirty_set_single( row, clear_error ); return( icontainer_map_all( ICONTAINER( row ), (icontainer_map_fn) row_dirty_set_sub, GINT_TO_POINTER( clear_error ) ) ); } /* Mark a row as containing an error ... called from expr_error_set() * ... don't call this directly. */ void row_error_set( Row *row ) { if( !row->err ) { Workspace *ws = row->ws; gboolean was_clear = ws->errors == NULL; ws->errors = g_slist_prepend( ws->errors, row ); row->err = TRUE; #ifdef DEBUG_ERROR printf( "row_error_set: " ); row_name_print( row ); printf( "\n" ); #endif /*DEBUG_ERROR*/ iobject_changed( IOBJECT( row ) ); /* First error? State change on workspace. */ if( was_clear ) iobject_changed( IOBJECT( ws ) ); /* If this is a local row, mark the top row in error too to end * recomp on this tree. */ if( row != row->top_row ) { char txt[100]; VipsBuf buf = VIPS_BUF_STATIC( txt ); row_qualified_name( row, &buf ); error_top( _( "Error in row." ) ); /* Elements are name of row, principal error, * secondary error. */ error_sub( _( "Error in row %s: %s\n%s" ), vips_buf_all( &buf ), row->expr->error_top, row->expr->error_sub ); expr_error_set( row->top_row->expr ); } } } /* Clear error state ... called from expr_error_clear() ... don't call this * directly. */ void row_error_clear( Row *row ) { if( row->err ) { Workspace *ws = row->ws; ws->errors = g_slist_remove( ws->errors, row ); row->err = FALSE; iobject_changed( IOBJECT( row ) ); #ifdef DEBUG_ERROR printf( "row_error_clear: " ); row_name_print( row ); printf( "\n" ); #endif /*DEBUG_ERROR*/ /* Mark our text modified to make sure we reparse and compile. * The code may contain pointers to dead symbols if we were in * error because they were undefined. */ if( row->child_rhs && row->child_rhs->itext ) heapmodel_set_modified( HEAPMODEL( row->child_rhs->itext ), TRUE ); /* All errors gone? Ws changed too. */ if( !ws->errors ) iobject_changed( IOBJECT( ws ) ); /* Is this a local row? Clear the top row error as well, in * case it's in error because of us. */ if( row != row->top_row && row->top_row->expr ) { expr_error_clear( row->top_row->expr ); row_dirty_set( row->top_row, TRUE ); } } } /* Break a dependency. */ static void * row_link_break( Row *parent, Row *child ) { /* Must be there. */ g_assert( g_slist_find( parent->children, child ) && g_slist_find( child->parents, parent ) ); parent->children = g_slist_remove( parent->children, child ); child->parents = g_slist_remove( child->parents, parent ); #ifdef DEBUG_LINK printf( "row_link_break: breaking link from " ); row_name_print( parent ); printf( "to " ); row_name_print( child ); printf( "\n" ); #endif /*DEBUG_LINK*/ return( NULL ); } static void * row_link_break_rev( Row *child, Row *parent ) { return( row_link_break( parent, child ) ); } static void row_dispose( GObject *gobject ) { Row *row = ROW( gobject ); #ifdef DEBUG_NEW /* Can't use row_name_print(), we may not have a parent. */ printf( "row_dispose: %s", NN( IOBJECT( row )->name ) ); if( row->sym ) printf( " (%s)", symbol_name( row->sym ) ); printf( "\n" ); #endif /*DEBUG_NEW*/ /* Reset state. Also see row_parent_remove(). */ row_hide_dependents( row ); if( row->expr ) expr_error_clear( row->expr ); if( row->top_col && row->top_col->last_select == row ) row->top_col->last_select = NULL; row_deselect( row ); /* Break all recomp links. */ slist_map( row->parents, (SListMapFn) row_link_break, row ); slist_map( row->children, (SListMapFn) row_link_break_rev, row ); g_assert( !row->parents && !row->children ); (void) slist_map( row->recomp, (SListMapFn) row_dirty_clear, NULL ); if( row->top_row ) row->top_row->recomp_save = g_slist_remove( row->top_row->recomp_save, row ); IM_FREEF( g_slist_free, row->recomp_save ); g_assert( !row->recomp ); if( row->expr ) { g_assert( row->expr->row == row ); /* If we're a local row, we will have a private expr * allocated for us. Junk it. */ if( row != row->top_row ) icontainer_child_remove( ICONTAINER( row->expr ) ); else { /* Top-level row, we were zapping the sym's expr. * Break the link to it. */ row->expr->row = NULL; row->expr = NULL; } } /* Is this a top-level row? Kill the symbol too. Need to do this after * sorting out row->expr, since otherwise killing the symbol will kill * us again in turn. */ if( row == row->top_row ) IDESTROY( row->sym ); G_OBJECT_CLASS( parent_class )->dispose( gobject ); } static void * row_add_parent_name( Link *link, VipsBuf *buf ) { Row *row; if( link->parent->expr && (row = link->parent->expr->row) ) { row_qualified_name_relative( link->child, row, buf ); vips_buf_appends( buf, " " ); } return( NULL ); } static void * row_add_child_name( Link *link, VipsBuf *buf ) { Row *row; if( link->child->expr && (row = link->child->expr->row) ) { row_qualified_name_relative( link->parent, row, buf ); vips_buf_appends( buf, " " ); } return( NULL ); } static void * row_add_dirty_child_name( Link *link, VipsBuf *buf ) { if( link->child->dirty ) { symbol_qualified_name_relative( link->parent, link->child, buf ); vips_buf_appends( buf, " " ); } return( NULL ); } static void row_info( iObject *iobject, VipsBuf *buf ) { Row *row = ROW( iobject ); vips_buf_appends( buf, _( "Name" ) ); vips_buf_appends( buf, ": " ); row_qualified_name( row, buf ); vips_buf_appends( buf, "\n" ); if( row->expr ) iobject_info( IOBJECT( row->expr ), buf ); if( row->child_rhs && row->child_rhs->itext ) iobject_info( IOBJECT( row->child_rhs->itext ), buf ); if( row->child_rhs && row->child_rhs->graphic ) iobject_info( IOBJECT( row->child_rhs->graphic ), buf ); if( row->top_row->sym ) { if( row->top_row->sym->topchildren ) { row_qualified_name( row, buf ); vips_buf_appends( buf, " " ); /* Expands to eg. "B1 refers to: B2, B3". */ vips_buf_appends( buf, _( "refers to" ) ); vips_buf_appends( buf, ": " ); slist_map_rev( row->top_row->sym->topchildren, (SListMapFn) row_add_child_name, buf ); vips_buf_appends( buf, "\n" ); } if( row->top_row->sym->topparents ) { row_qualified_name( row, buf ); vips_buf_appends( buf, " " ); /* Expands to eg. "B1 is referred to by: B2, B3". */ vips_buf_appends( buf, _( "is referred to by" ) ); vips_buf_appends( buf, ": " ); slist_map_rev( row->top_row->sym->topparents, (SListMapFn) row_add_parent_name, buf ); vips_buf_appends( buf, "\n" ); } } if( row == row->top_row && row->sym && row->sym->dirty ) { Symbol *sym = row->sym; if( sym->ndirtychildren ) { row_qualified_name( row, buf ); vips_buf_appends( buf, " " ); vips_buf_appends( buf, _( "is blocked on" ) ); vips_buf_appends( buf, ": " ); slist_map_rev( sym->topchildren, (SListMapFn) row_add_dirty_child_name, buf ); vips_buf_appends( buf, "\n" ); } } } static Rhs * row_get_rhs( Row *row ) { g_assert( g_slist_length( ICONTAINER( row )->children ) == 1 ); return( RHS( ICONTAINER( row )->children->data ) ); } static void row_child_add( iContainer *parent, iContainer *child, int pos ) { Row *row = ROW( parent ); ICONTAINER_CLASS( parent_class )->child_add( parent, child, pos ); /* Update our context. */ row->child_rhs = row_get_rhs( row ); } static Subcolumn * row_get_subcolumn( Row *row ) { return( SUBCOLUMN( ICONTAINER( row )->parent ) ); } static Column * row_get_column( Row *row ) { Subcolumn *scol = row_get_subcolumn( row ); if( scol ) return( scol->top_col ); else return( NULL ); } /* Search back up the widget hierarchy for the base row for this * row ... eg "A7"->expr->row. */ static Row * row_get_root( Row *row ) { Row *enclosing = row_get_parent( row ); if( !enclosing ) return( row ); else return( row_get_root( enclosing ) ); } Workspace * row_get_workspace( Row *row ) { Column *col = row_get_column( row ); if( col ) return( col->ws ); else return( NULL ); } static void row_parent_add( iContainer *child ) { Row *row = ROW( child ); g_assert( IS_SUBCOLUMN( child->parent ) ); ICONTAINER_CLASS( parent_class )->parent_add( child ); /* Update our context. */ row->scol = row_get_subcolumn( row ); row->top_col = row_get_column( row ); row->ws = row_get_workspace( row ); row->top_row = row_get_root( row ); } static void row_parent_remove( iContainer *child ) { Row *row = ROW( child ); /* Reset the parts of state which touch our parent. */ row_dirty_clear( row ); row_deselect( row ); /* Don't clear error ... we may no longer have the link to expr. See * row_dispose() for that. */ ICONTAINER_CLASS( parent_class )->parent_remove( child ); } static View * row_view_new( Model *model, View *parent ) { return( rowview_new() ); } static void row_scrollto( Model *model, ModelScrollPosition position ) { Row *row = ROW( model ); Column *col = row->top_col; /* If our column is closed, there won't be a view to scrollto, ouch! * Need to open the column first, then scroll to that column. We can't * scroll to the exact row, since there's no view for it, and won't be * for a while after we hit the idle loop again. */ if( !col->open ) { column_set_open( col, TRUE ); column_scrollto( col, position ); } MODEL_CLASS( parent_class )->scrollto( model, position ); } static gboolean row_load( Model *model, ModelLoadState *state, Model *parent, xmlNode *xnode ) { Row *row = ROW( model ); Subcolumn *scol = SUBCOLUMN( parent ); char name[256]; g_assert( IS_SUBCOLUMN( parent ) ); if( !get_sprop( xnode, "name", name, 256 ) ) return( FALSE ); IM_SETSTR( IOBJECT( row )->name, name ); #ifdef DEBUG printf( "row_load: loading row %s (xmlNode %p)\n", name, xnode ); #endif /*DEBUG*/ /* Popup is optional (top level only) */ (void) get_bprop( xnode, "popup", &row->popup ); if( scol->is_top ) { Column *col = scol->top_col; Workspace *ws = col->ws; Symbol *sym; sym = symbol_new( ws->sym->expr->compile, name ); symbol_user_init( sym ); (void) compile_new_local( sym->expr ); row_link_symbol( row, sym, NULL ); /* We can't symbol_made() here, we've not parsed our value * yet. See below ... we just make sure we're on the recomp * lists. */ } if( !MODEL_CLASS( parent_class )->load( model, state, parent, xnode ) ) return( FALSE ); /* If we've loaded a complete row system, mark this row plus any * edited subrows dirty, and make sure this sym is dirty too. */ if( scol->is_top ) { row_dirty_set( row, TRUE ); expr_dirty( row->sym->expr, link_serial_new() ); } return( TRUE ); } /* Should we display this row. Non-displayed rows don't have rhs, don't * appear on the screen, and aren't saved. They do have rows though, so their * dependencies are tracked. * * We work off sym rather than row so that we can work before the row is fully * built. */ static gboolean row_is_displayable( Symbol *sym ) { if( is_system( sym ) ) return( FALSE ); if( sym->expr && sym->expr->compile && sym->expr->compile->nparam > 0 ) return( FALSE ); if( is_super( sym ) && sym->expr ) { Expr *expr = sym->expr; PElement *root = &expr->root; /* Empty superclass. */ if( PEISELIST( root ) ) return( FALSE ); } return( TRUE ); } static xmlNode * row_save( Model *model, xmlNode *xnode ) { Row *row = ROW( model ); xmlNode *xthis; /* Don't save system rows, or empty superclasses. */ if( row->sym ) { if( !row_is_displayable( row->sym ) ) /* Need to return non-NULL for abort with no error. */ return( (xmlNode *) -1 ); } if( !(xthis = MODEL_CLASS( parent_class )->save( model, xnode )) ) return( NULL ); /* Top-level only. */ if( row->top_row == row ) if( !set_sprop( xthis, "popup", bool_to_char( row->popup ) ) ) return( NULL ); if( !set_sprop( xthis, "name", IOBJECT( row )->name ) ) return( NULL ); return( xthis ); } static void * row_clear_to_save( Model *model ) { if( IS_ROW( model ) ) ROW( model )->to_save = FALSE; return( NULL ); } static void * row_set_to_save( Row *row ) { Row *enclosing; if( !row->to_save ) { row->to_save = TRUE; /* All peers must be saved. When we reload, we want to keep * row ordering. If we just save modded row, they'll move to * the front of the row list on reload, since they'll be made * first. */ icontainer_map( ICONTAINER( row->scol ), (icontainer_map_fn) row_set_to_save, NULL, NULL ); /* All rows back up to the top level must also be saved. */ for( enclosing = row; enclosing != row->top_row; enclosing = row_get_parent( enclosing ) ) row_set_to_save( enclosing ); } return( NULL ); } static void * row_calculate_to_save( Model *model ) { if( IS_ROW( model ) ) { Row *row = ROW( model ); Rhs *rhs = row->child_rhs; if( row != row->top_row && rhs && !row->to_save ) { if( rhs->itext && ITEXT( rhs->itext )->edited ) row_set_to_save( row ); else if( rhs->graphic && CLASSMODEL( rhs->graphic )->edited ) row_set_to_save( row ); } } return( NULL ); } static gboolean row_save_test( Model *model ) { Row *row = ROW( model ); Workspace *ws = row->ws; Workspacegroup *wsg = workspace_get_workspacegroup( ws ); gboolean save; if( row == row->top_row ) { /* This is a top-level row ... save unless we're in * only-save-selected mode. */ if( wsg->save_type == WORKSPACEGROUP_SAVE_SELECTED ) save = row->selected; else save = TRUE; /* If we're going to save this row, clear all the to_save * flags, then walk the tree working out which bits we will need * to write. */ if( save ) { icontainer_map_all( ICONTAINER( row ), (icontainer_map_fn) row_clear_to_save, NULL ); icontainer_map_all( ICONTAINER( row ), (icontainer_map_fn) row_calculate_to_save, NULL ); } } else save = row->to_save; return( save ); } static void * row_new_heap( Heapmodel *heapmodel, PElement *root ) { Row *row = ROW( heapmodel ); Expr *expr = row->expr; #ifdef DEBUG printf( "row_new_heap: " ); row_name_print( row ); printf( "\n" ); printf( "row_new_heap: new value is " ); pgraph( root ); printf( "row_new_heap: top value is " ); pgraph( &row->top_row->expr->root ); #endif /*DEBUG*/ if( row_is_displayable( row->sym ) ) { /* Hide superclasses whose constructor starts with "_". */ if( is_super( row->sym ) && PEISCLASS( root ) && *IOBJECT( PEGETCLASSCOMPILE( root )->sym )->name == '_' ) model_display( MODEL( row ), FALSE ); } /* New value ... reset error state. */ expr_error_clear( expr ); expr->root = *root; expr_new_value( expr ); if( row->child_rhs && heapmodel_new_heap( HEAPMODEL( row->child_rhs ), root ) ) return( row ); /* Class display only for non-param classes. */ row->is_class = PEISCLASS( root ) && row->sym->type != SYM_PARAM; /* Set the default vis level. */ if( row->child_rhs && row->child_rhs->vislevel == -1 ) { PElement member; double value; gboolean is_class; if( !heap_is_class( root, &is_class ) ) return( row ); /* If it's a class with a vis hint, use that. */ if( is_class && class_get_member( root, MEMBER_VISLEVEL, NULL, &member ) && heap_get_real( &member, &value ) ) rhs_set_vislevel( row->child_rhs, value ); /* Non-parameter rows get higher vislevel, except for super. */ else if( row->sym->type != SYM_PARAM && !is_super( row->sym ) ) rhs_set_vislevel( row->child_rhs, 1 ); else rhs_set_vislevel( row->child_rhs, 0 ); } return( HEAPMODEL_CLASS( parent_class )->new_heap( heapmodel, root ) ); } static void * row_update_model( Heapmodel *heapmodel ) { Row *row = ROW( heapmodel ); if( row->expr ) expr_new_value( row->expr ); return( HEAPMODEL_CLASS( parent_class )->update_model( heapmodel ) ); } static void row_class_init( RowClass *class ) { GObjectClass *gobject_class = (GObjectClass *) class; iObjectClass *iobject_class = (iObjectClass *) class; iContainerClass *icontainer_class = (iContainerClass *) class; ModelClass *model_class = (ModelClass *) class; HeapmodelClass *heapmodel_class = (HeapmodelClass *) class; parent_class = g_type_class_peek_parent( class ); /* Create signals. */ /* Init methods. */ gobject_class->dispose = row_dispose; iobject_class->info = row_info; icontainer_class->child_add = row_child_add; icontainer_class->parent_add = row_parent_add; icontainer_class->parent_remove = row_parent_remove; model_class->view_new = row_view_new; model_class->scrollto = row_scrollto; model_class->load = row_load; model_class->save = row_save; model_class->save_test = row_save_test; heapmodel_class->new_heap = row_new_heap; heapmodel_class->update_model = row_update_model; /* Static init. */ model_register_loadable( MODEL_CLASS( class ) ); } static void row_init( Row *row ) { #ifdef DEBUG printf( "row_init\n" ); #endif /*DEBUG*/ row->scol = NULL; row->child_rhs = NULL; row->top_col = NULL; row->ws = NULL; row->top_row = NULL; row->sym = NULL; row->expr = NULL; row->err = FALSE; row->selected = FALSE; row->is_class = FALSE; row->popup = POPUP_NEW_ROWS; row->to_save = FALSE; /* Init recomp stuff. */ row->parents = NULL; row->children = NULL; row->dirty = FALSE; row->recomp = NULL; row->recomp_save = NULL; row->depend = FALSE; row->show = ROW_SHOW_NONE; } GType row_get_type( void ) { static GType row_type = 0; if( !row_type ) { static const GTypeInfo info = { sizeof( RowClass ), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) row_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof( Row ), 32, /* n_preallocs */ (GInstanceInitFunc) row_init, }; row_type = g_type_register_static( TYPE_HEAPMODEL, "Row", &info, 0 ); } return( row_type ); } /* After making a row and adding it to model tree ... attach the symbol and * value this row displays. */ void row_link_symbol( Row *row, Symbol *sym, PElement *root ) { g_assert( !row->sym ); g_assert( !row->expr ); g_assert( !sym->expr || !sym->expr->row ); row->sym = sym; /* Code we display/update ... if this is a top-level row, we * directly change the symbol's expr. If it's a sub-row, we need a * cloned expr for us to fiddle with. */ if( is_top( sym ) ) { row->expr = sym->expr; g_assert( !row->expr->row ); row->expr->row = row; } else { row->expr = expr_clone( sym ); row->expr->row = row; if( root ) { row->expr->root = *root; expr_new_value( row->expr ); } } } Row * row_new( Subcolumn *scol, Symbol *sym, PElement *root ) { Row *row = g_object_new( TYPE_ROW, NULL ); #ifdef DEBUG_NEW printf( "row_new: " ); dump_tiny( sym ); printf( "\n" ); #endif /*DEBUG_NEW*/ /* Don't make a display or a RHS for invisible rows. */ if( !row_is_displayable( sym ) ) MODEL( row )->display = FALSE; else (void) rhs_new( row ); iobject_set( IOBJECT( row ), IOBJECT( sym )->name, NULL ); icontainer_child_add( ICONTAINER( scol ), ICONTAINER( row ), -1 ); row_link_symbol( row, sym, root ); return( row ); } /* Make a dependency. parent is displaying an expression which * refers to the symbol being displayed by child. */ static void * row_link_make( Row *parent, Row *child ) { /* Already a dependency? Don't make a second link. */ if( g_slist_find( parent->children, child ) ) return( NULL ); /* Don't link to self (harmless, but pointless too). */ if( parent == child ) return( NULL ); /* New link, each direction. */ parent->children = g_slist_prepend( parent->children, child ); child->parents = g_slist_prepend( child->parents, parent ); #ifdef DEBUG_LINK printf( "row_link_make: " ); row_name_print( parent ); printf( "refers to " ); row_name_print( child ); printf( "\n" ); #endif /*DEBUG_LINK*/ return( NULL ); } static void * row_link_build4( Expr *child_expr, Row *row ) { if( child_expr->row && child_expr->row->top_row == row ) return( child_expr->row ); return( NULL ); } /* Does child have a display in the same tally heirarchy as row? Make a link! */ static void * row_link_build3( Symbol *child, Row *row ) { Row *child_row; child_row = (Row *) icontainer_map( ICONTAINER( child ), (icontainer_map_fn) row_link_build4, row->top_row, NULL ); if( child_row ) (void) row_link_make( row, child_row ); return( NULL ); } static void *row_link_build2( Expr *expr, Row *row ); static void * row_link_build2_sym( Symbol *sym, Row *row ) { if( sym->expr && row_link_build2( sym->expr, row ) ) return( row ); return( NULL ); } static void * row_link_build2( Expr *expr, Row *row ) { /* Make links to anything expr refers to in this tree. */ if( expr->compile && slist_map( expr->compile->children, (SListMapFn) row_link_build3, row ) ) return( expr ); /* Recurse for any locals of expr. * Exception: * * f = class { * g = class { * a = 12; * } * } * * zero-arg local classes will have rows anyway, so we don't need to * check inside them for locals, since we'll do them anyway at the top * level. * * zero-arg hidden classes do need to be checked inside though :-( * since we will only have a row for the top element. */ if( expr->compile && !(is_class( expr->compile ) && expr->compile->nparam == 0 && expr->row && MODEL( expr->row )->display) && icontainer_map( ICONTAINER( expr->compile ), (icontainer_map_fn) row_link_build2_sym, row, NULL ) ) return( expr ); return( NULL ); } /* Scan a row, adding links for any dependencies we find. */ static void * row_link_build( Row *row ) { #ifdef DEBUG_LINK printf( "row_link_build: " ); row_name_print( row ); printf( "\n" ); #endif /*DEBUG_LINK*/ /* Build new recomp list. Only for class displays. */ if( !row->scol->is_top && row->expr && row_link_build2( row->expr, row ) ) return( row ); return( NULL ); } /* Remove any links on a row. */ static void * row_link_destroy( Row *row ) { slist_map( row->children, (SListMapFn) row_link_break_rev, row ); return( NULL ); } static void *row_dependent_map_sub( Row *row, row_map_fn fn, void *a ); /* Do this row, and any that depend on it. */ static void * row_dependent_mark( Row *row, row_map_fn fn, void *a ) { void *res; /* Done this one already? */ if( row->depend ) return( NULL ); row->depend = TRUE; if( (res = fn( row, a, NULL, NULL )) ) return( res ); return( row_dependent_map_sub( row, fn, a ) ); } /* Apply to all dependents of row. */ static void * row_dependent_map_sub( Row *row, row_map_fn fn, void *a ) { Row *i; void *res; /* Things that refer to us. */ if( (res = slist_map2( row->parents, (SListMap2Fn) row_dependent_mark, (void *) fn, a )) ) return( res ); /* Things that refer to our enclosing syms ... eg. if A1.fred.x * changes, we don't want to recalc A1.fred, we do want to recalc * anything that refers to A1.fred. */ for( i = row; (i = HEAPMODEL( i )->row); ) if( (res = row_dependent_map_sub( i, fn, a )) ) return( res ); /* We are not going to spot things that refer to this.us :-( we could * say anything that depends on "this" depends on us, but that's much * too broad (and much too slow). FIXME ... could use dynamic dependency stuff to find things that refer to this.us? */ return( NULL ); } static void * row_dependent_clear( Row *row ) { row->depend = FALSE; return( NULL ); } /* Apply a function to all rows in this tree which depend on this row. */ void * row_dependent_map( Row *row, row_map_fn fn, void *a ) { /* Clear the flags we use to spot loops. */ row_map_all( row->top_row, (row_map_fn) row_dependent_clear, NULL, NULL, NULL ); return( row_dependent_map_sub( row, fn, a ) ); } /* This row has changed ... mark all dependents (direct and indirect) * dirty. */ void * row_dirty( Row *row, gboolean clear_error ) { (void) row_dirty_set( row, clear_error ); (void) row_dependent_map( row, (row_map_fn) row_dirty_set, GINT_TO_POINTER( clear_error ) ); return( NULL ); } /* This tally has changed ... mark all dependents (but not this one!) * dirty. */ void * row_dirty_intrans( Row *row, gboolean clear_error ) { (void) row_dependent_map( row, (row_map_fn) row_dirty_set, GINT_TO_POINTER( clear_error ) ); return( NULL ); } /* Find the 'depth' of a row ... 0 is top level. */ static int row_recomp_depth( Row *row ) { if( row == row->top_row ) return( 0 ); return( 1 + row_recomp_depth( row_get_parent( row ) ) ); } /* Compare func for row recomp sort. */ static int row_recomp_sort_func( Row *a, Row *b ) { int order; #ifdef DEBUG_TIME_SORT static GTimer *sort_func_timer = NULL; if( !sort_func_timer ) sort_func_timer = g_timer_new(); g_timer_reset( sort_func_timer ); #endif /*DEBUG_TIME_SORT*/ #ifdef DEBUG_SORT_VERBOSE printf( "row_recomp_sort_func: " ); #endif /*DEBUG_SORT_VERBOSE*/ /* If b depends on a, want a first. */ if( row_dependent_map( a, (row_map_fn) map_equal, b ) ) { #ifdef DEBUG_SORT_VERBOSE row_name_print( a ); printf( "before " ); row_name_print( b ); printf( "(2nd depends on 1st)\n" ); #endif /*DEBUG_SORT_VERBOSE*/ order = -1; } else if( row_dependent_map( b, (row_map_fn) map_equal, a ) ) { #ifdef DEBUG_SORT_VERBOSE row_name_print( b ); printf( "before " ); row_name_print( a ); printf( "(2nd depends on 1st #2)\n" ); #endif /*DEBUG_SORT_VERBOSE*/ order = 1; } else { int adepth = row_recomp_depth( a ); int bdepth = row_recomp_depth( b ); #ifdef DEBUG_SORT_VERBOSE if( adepth < bdepth ) { row_name_print( a ); printf( "before " ); row_name_print( b ); printf( "(1st shallower)\n" ); } else if( bdepth < adepth ) { row_name_print( b ); printf( "before " ); row_name_print( a ); printf( "(1st shallower)\n" ); } else { row_name_print( a ); printf( "and " ); row_name_print( b ); printf( "independent\n" ); } #endif /*DEBUG_SORT_VERBOSE*/ /* No dependency ... want shallower first. */ order = adepth - bdepth; } #ifdef DEBUG_TIME_SORT printf( "row_recomp_sort_func: took %gs\n", g_timer_elapsed( sort_func_timer, NULL ) ); #endif /*DEBUG_TIME_SORT*/ return( order ); } /* Insert-sort an slist. */ static GSList * row_recomp_sort_slist( GSList *old ) { GSList *new; GSList *p; new = NULL; for( p = old; p; p = p->next ) { Row *a = (Row *) p->data; Row *b; GSList *q; for( q = new; q; q = q->next ) { b = (Row *) q->data; if( row_recomp_sort_func( a, b ) < 0 ) break; } if( q ) { q->data = a; q->next = g_slist_prepend( q->next, b ); } else new = g_slist_append( new, a ); } g_slist_free( old ); return( new ); } /* Sort dirties into recomp order. */ static void row_recomp_sort( Row *row ) { #ifdef DEBUG_TIME_SORT static GTimer *sort_timer = NULL; if( !sort_timer ) sort_timer = g_timer_new(); g_timer_reset( sort_timer ); #endif /*DEBUG_TIME_SORT*/ g_assert( row == row->top_row ); /* Nope, can't use g_slist_sort(). We have a partial order and * g_slist_sort() uses an algorithm that assumes a full order. Do a * simple insert-sort, it'll do enough comparisons that we won't miss * things. row->recomp = g_slist_sort( row->recomp, (GCompareFunc) row_recomp_sort_func ); */ row->recomp = row_recomp_sort_slist( row->recomp ); #ifdef DEBUG_TIME_SORT printf( "row_recomp_sort: took %gs\n", g_timer_elapsed( sort_timer, NULL ) ); #endif /*DEBUG_TIME_SORT*/ #ifdef DEBUG_SORT printf( "row_recomp: sorted dirties are: " ); slist_map( row->recomp, (SListMapFn) row_name_print, NULL ); printf( "\n" ); #endif /*DEBUG_SORT*/ } static gboolean row_regenerate( Row *row ) { Expr *expr = row->expr; PElement base; /* Regenerate any compiled code. */ if( expr->compile ) { PEPOINTE( &base, &expr->compile->base ); if( !PEISNOVAL( &base ) ) { PElement *root = &expr->root; if( row == row->top_row ) { /* Recalcing base of tally display ... not a * class member, must be a sym with a value. */ gboolean res; res = reduce_regenerate( expr, root ); expr_new_value( expr ); if( !res ) return( FALSE ); } else { /* Recalcing a member somewhere inside ... * regen (member this) pair. Get the "this" * for the enclosing class instance ... the * top one won't always be right (eg. for * local classes); the enclosing one should * be the same as the most enclosing this. */ Row *this = row->scol->this; gboolean res; res = reduce_regenerate_member( expr, &this->expr->root, root ); expr_new_value( expr ); if( !res ) return( FALSE ); } /* We may have made a new class instance ... all our * children need to update their heap pointers. */ if( heapmodel_new_heap( HEAPMODEL( row ), root ) ) return( FALSE ); } } return( TRUE ); } static gboolean row_recomp_row( Row *row ) { Rhs *rhs = row->child_rhs; #ifdef DEBUG printf( "row_recomp_row: " ); row_name_print( row ); printf( "\n" ); #endif /*DEBUG*/ /* Not much we can do. */ if( !row->expr ) return( TRUE ); /* Clear old error state. */ expr_error_clear( row->expr ); /* Parse and compile any changes to our text since we last came through. */ if( rhs && rhs->itext && heapmodel_update_heap( HEAPMODEL( rhs->itext ) ) ) return( FALSE ); /* We're about to zap the graph: make sure this tree of rows has a * private copy. */ if( !subcolumn_make_private( row->scol ) ) return( FALSE ); /* Regenerate from the expr. */ if( !row_regenerate( row ) ) return( FALSE ); /* Reapply any graphic mods. */ if( rhs && rhs->graphic ) { Classmodel *classmodel = CLASSMODEL( rhs->graphic ); /* If the graphic is non-default, need to set modified to make * sure we reapply the changes. */ if( classmodel->edited ) heapmodel_set_modified( HEAPMODEL( classmodel ), TRUE ); if( heapmodel_update_heap( HEAPMODEL( classmodel ) ) ) return( FALSE ); } progress_update_tick(); return( TRUE ); } static void row_recomp_all( Row *top_row ) { /* Rebuild all dirty rows. */ while( !top_row->err && top_row->recomp ) { Row *dirty_row = ROW( top_row->recomp->data ); #ifdef DEBUG_ROW static GTimer *timer = NULL; if( !timer ) timer = g_timer_new(); g_timer_reset( timer ); #endif /*DEBUG_ROW*/ #ifdef DEBUG_ROW printf( "row_recomp_all: starting " ); row_name_print( dirty_row ); printf( "\n" ); #endif /*DEBUG_ROW*/ if( !row_recomp_row( dirty_row ) ) { /* This will set top_row->err and end the loop. */ if( dirty_row->expr ) expr_error_set( dirty_row->expr ); } else row_dirty_clear( dirty_row ); #ifdef DEBUG_ROW printf( "\t%gs\n", g_timer_elapsed( timer, NULL ) ); #endif /*DEBUG_ROW*/ #ifdef DEBUG printf( "row_recomp_all: after row recomp, top value now " ); pgraph( &top_row->expr->root ); #endif /*DEBUG*/ } } void row_recomp( Row *row ) { Row *top_row = row->top_row; static GTimer *recomp_timer = NULL; if( !recomp_timer ) recomp_timer = g_timer_new(); g_timer_reset( recomp_timer ); /* Sort dirties into recomp order. */ row_recomp_sort( top_row ); /* Take a copy of the recomp list for later testing. */ IM_FREEF( g_slist_free, top_row->recomp_save ); top_row->recomp_save = g_slist_copy( top_row->recomp ); /* Remove all top-level dependencies. */ symbol_link_destroy( top_row->sym ); /* Remove any row recomp links we have. */ (void) row_map_all( top_row, (row_map_fn) row_link_destroy, NULL, NULL, NULL ); /* Rebuild all dirty rows. This may add some dynamic top links. */ row_recomp_all( top_row ); /* Our workspace may have been closed in a callback: bail out. */ if( !top_row->sym ) return; /* Add all static row links. Have to do this after any * parsing in row_recomp_all(). */ (void) row_map_all( top_row, (row_map_fn) row_link_build, NULL, NULL, NULL ); /* Remake all static top-level links. */ (void) symbol_link_build( top_row->sym ); /* Now we know dependencies ... mark everything dirty again. This may * pick up stuff we missed last time and may change the order we * recomp rows in. * * Be careful not to wipe out any errors we found on this first pass. */ slist_map( top_row->recomp_save, (SListMapFn) row_dirty, FALSE ); /* Is this topsym still a leaf? We may have discovered an external * reference to another dirty top-level sym. We can come back here * later. */ if( top_row->sym->ndirtychildren != 0 ) { IM_FREEF( g_slist_free, top_row->recomp_save ); return; } /* Sort dirties into recomp order. */ row_recomp_sort( top_row ); /* Now: if the recomp list is the same as last time, we don't need to * recalc again. */ if( slist_equal( top_row->recomp_save, top_row->recomp ) ) { /* Provided we didn't abandon recomp on an error, we can * just mark all rows clean. */ if( !top_row->err ) slist_map( top_row->recomp, (SListMapFn) row_dirty_clear, NULL ); } else { #ifdef DEBUG_DIRTY printf( "row_recomp: recomp list has changed ... pass 2\n" ); #endif /*DEBUG_DIRTY*/ /* Rebuild all dirty rows in a second pass. */ row_recomp_all( top_row ); /* Our workspace may have been closed in a callback: bail out. */ if( !top_row->sym ) return; } IM_FREEF( g_slist_free, top_row->recomp_save ); /* The symbol can be cleared as well. */ if( !top_row->err ) symbol_dirty_clear( top_row->sym ); /* Now we're clean, all models can update from the heap. Rows * containing errors can have bad pointers in, so careful. */ if( !top_row->err && icontainer_map_all( ICONTAINER( top_row ), (icontainer_map_fn) heapmodel_update_model, NULL ) ) expr_error_set( top_row->expr ); if( main_option_profile ) { char txt[100]; VipsBuf buf = VIPS_BUF_STATIC( txt ); Symbol *context = symbol_get_parent( top_row->ws->sym ); row_qualified_name_relative( context, top_row, &buf ); printf( "%s\t%g\n", vips_buf_all( &buf ), g_timer_elapsed( recomp_timer, NULL ) ); } #ifdef DEBUG printf( "row_recomp: value of " ); row_name_print( top_row ); printf( "is " ); pgraph( &top_row->expr->root ); #endif /*DEBUG*/ } /* Test, suitable for mapping. */ void * row_is_selected( Row *row ) { if( row->selected ) return( row ); return( NULL ); } /* Deselect a row. */ void * row_deselect( Row *row ) { Workspace *ws = row->ws; if( !row->selected ) return( NULL ); g_assert( ws && IS_WORKSPACE( ws ) ); g_assert( g_slist_find( ws->selected, row ) ); ws->selected = g_slist_remove( ws->selected, row ); row->selected = FALSE; /* Hack: if this is a matrix with selected cells, deselect the matrix * sellection too. We should really have a row method for this I * guess :-( See also workspace_selected_names_sub(). */ if( row->child_rhs && row->child_rhs->graphic && IS_MATRIX( row->child_rhs->graphic ) && MATRIX( row->child_rhs->graphic )->selected ) matrix_deselect( MATRIX( row->child_rhs->graphic ) ); iobject_changed( IOBJECT( row ) ); iobject_changed( IOBJECT( ws ) ); return( NULL ); } /* Select a row. */ static void row_select2( Row *row ) { if( !row->selected ) { Workspace *ws = row->ws; row->selected = TRUE; ws->selected = g_slist_append( ws->selected, row ); iobject_changed( IOBJECT( row ) ); iobject_changed( IOBJECT( ws ) ); } } /* Make sure a row is selected ... used for (eg.) select changed on gktsheet. * No deselection. */ void * row_select_ensure( Row *row ) { row_select2( row ); /* Note for extend select. */ row->top_col->last_select = row; return( NULL ); } /* Select a row, deselecting others first. */ void * row_select( Row *row ) { Workspace *ws = row->ws; workspace_deselect_all( ws ); row_select2( row ); /* Note for extend select. */ row->top_col->last_select = row; return( NULL ); } /* Extend the previous selection. */ void * row_select_extend( Row *row ) { Column *col = row->top_col; Row *last_select = col->last_select; /* Range select if there was a previous selection, and it was in the * same subcolumn. */ if( last_select && row->scol == last_select->scol ) { Subcolumn *scol = row->scol; GSList *rows = ICONTAINER( scol )->children; int pos = g_slist_index( rows, row ); int pos_last = g_slist_index( rows, last_select ); int step = pos > pos_last ? 1 : -1; int i; g_assert( pos != -1 && pos_last != -1 ); for( i = pos_last; i != pos + step; i += step ) row_select2( ROW( g_slist_nth_data( rows, i ) ) ); } else row_select2( row ); /* Note for extend select. */ col->last_select = row; return( NULL ); } /* Toggle a selection. */ void * row_select_toggle( Row *row ) { if( row->selected ) { row_deselect( row ); row->top_col->last_select = NULL; } else { row_select2( row ); row->top_col->last_select = row; } return( NULL ); } /* Do a select action using a modifier. */ void row_select_modifier( Row *row, guint state ) { if( state & GDK_CONTROL_MASK ) row_select_toggle( row ); else if( state & GDK_SHIFT_MASK ) row_select_extend( row ); else row_select( row ); } static void row_set_show( Row *row, RowShowState show ) { if( row->show != show ) { row->show = show; iobject_changed( IOBJECT( row ) ); } } static void * row_show_parent( Link *link, RowShowState show ) { if( link->parent->expr && link->parent->expr->row ) row_set_show( link->parent->expr->row, show ); return( NULL ); } static void * row_show_child( Link *link, RowShowState show ) { if( link->child->expr && link->child->expr->row ) row_set_show( link->child->expr->row, show ); return( NULL ); } void row_show_dependents( Row *row ) { Symbol *topsym = row->top_row->sym; #ifdef DEBUG printf( "row_show_dependents: " ); row_name_print( row ); printf( "\n" ); #endif /*DEBUG*/ if( topsym ) { slist_map( topsym->topparents, (SListMapFn) row_show_parent, GUINT_TO_POINTER( ROW_SHOW_PARENT ) ); slist_map( topsym->topchildren, (SListMapFn) row_show_child, GUINT_TO_POINTER( ROW_SHOW_CHILD ) ); } } void row_hide_dependents( Row *row ) { Symbol *topsym; #ifdef DEBUG printf( "row_hide_dependents: " ); row_name_print( row ); printf( "\n" ); #endif /*DEBUG*/ if( row->top_row && (topsym = row->top_row->sym) ) { slist_map( topsym->topparents, (SListMapFn) row_show_parent, GUINT_TO_POINTER( ROW_SHOW_NONE ) ); slist_map( topsym->topchildren, (SListMapFn) row_show_child, GUINT_TO_POINTER( ROW_SHOW_NONE ) ); } } /* Set help for a row. Used by rowview and itextview etc. on mouseover. */ void row_set_status( Row *row ) { Expr *expr = row->expr; char txt[MAX_LINELENGTH]; VipsBuf buf = VIPS_BUF_STATIC( txt ); /* No symbol? eg. on load error. */ if( !expr ) return; row_qualified_name( row, &buf ); if( expr->err ) { vips_buf_appends( &buf, ": " ); vips_buf_appends( &buf, expr->error_top ); } else if( row->child_rhs->itext ) { iText *itext = ITEXT( row->child_rhs->itext ); vips_buf_appends( &buf, " = " ); if( row->ws && row->ws->mode != WORKSPACE_MODE_FORMULA ) vips_buf_appends( &buf, NN( itext->formula ) ); else vips_buf_appends( &buf, vips_buf_all( &itext->value ) ); } workspace_set_status( row->ws, "%s", vips_buf_firstline( &buf ) ); } /* Sub fn of below ... search inside a row hierarcy. Context is (eg.) row * "A1", path is (eg.) "super.name". */ static Row * row_parse_name_row( Row *context, const char *path ) { char name[256]; char *tail; Row *row; Subcolumn *scol; #ifdef DEBUG printf( "row_parse_name_row: \"%s\"\n", path ); #endif /*DEBUG*/ /* Break the name into "thing.tail", where tail could contain other * "." qualifiers. */ im_strncpy( name, path, 256 ); if( !(tail = break_token( name, "." )) ) /* Passed empty string. */ return( context ); /* Needs to be a subcolumn to look inside. We could search the value, * but it's safer to look inside the model we've built from the value. */ if( !context->child_rhs || !context->child_rhs->scol || !(scol = SUBCOLUMN( context->child_rhs->scol )) ) return( NULL ); if( !(row = subcolumn_map( scol, (row_map_fn) iobject_test_name, name, NULL )) ) return( NULL ); return( row_parse_name_row( row, tail ) ); } /* Parse a qualified name .. eg. "untitled.A1.name" and find the row. Find * relative to context. Context is a sym, so we can have workspaceroot etc. */ Row * row_parse_name( Symbol *context, const char *path ) { char name[256]; char *tail; Symbol *sym; Row *row; #ifdef DEBUG printf( "row_parse_name: \"%s\"\n", path ); #endif /*DEBUG*/ /* Break the name into "thing.tail", where tail could contain other * "." qualifiers. */ im_strncpy( name, path, 256 ); if( !(tail = break_token( name, "." )) ) { /* Run out of names ... return this row, if we've found one. */ if( context->expr ) return( context->expr->row ); else return( NULL ); } /* Try to look up name in context. For scopes, we can do it * statically. For other syms, look up in the value of the symbol. */ switch( context->type ) { case SYM_WORKSPACE: case SYM_WORKSPACEROOT: case SYM_ROOT: if( !(sym = compile_lookup( context->expr->compile, name )) ) return( NULL ); break; case SYM_VALUE: if( !(row = context->expr->row) ) return( NULL ); /* Hand off to the row searcher. */ return( row_parse_name_row( row, path ) ); case SYM_ZOMBIE: case SYM_PARAM: case SYM_EXTERNAL: case SYM_BUILTIN: default: /* How odd. */ return( NULL ); } return( row_parse_name( sym, tail ) ); } nip2-8.7.0/src/toolkitview.h0000644000175000017500000000321013224651032012631 00000000000000/* View for toolkit. */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_TOOLKITVIEW (toolkitview_get_type()) #define TOOLKITVIEW( obj ) \ (GTK_CHECK_CAST( (obj), TYPE_TOOLKITVIEW, Toolkitview )) #define TOOLKITVIEW_CLASS( klass ) \ (GTK_CHECK_CLASS_CAST( (klass), TYPE_TOOLKITVIEW, ToolkitviewClass )) #define IS_TOOLKITVIEW( obj ) (GTK_CHECK_TYPE( (obj), TYPE_TOOLKITVIEW )) #define IS_TOOLKITVIEW_CLASS( klass ) \ (GTK_CHECK_CLASS_TYPE( (klass), TYPE_TOOLKITVIEW )) struct _Toolkitview { View parent_class; Toolkitgroupview *kitgview; GtkWidget *menu; /* Menu for this kit */ GtkWidget *item; /* Menu item in enclosing menu */ guint destroy_sid; }; typedef struct _ToolkitviewClass { ViewClass parent_class; /* My methods. */ } ToolkitviewClass; GtkType toolkitview_get_type( void ); View *toolkitview_new( void ); nip2-8.7.0/src/iregionview.h0000644000175000017500000000304713224651032012610 00000000000000/* display a region in a workspace */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_IREGIONVIEW (iregionview_get_type()) #define IREGIONVIEW( obj ) \ (GTK_CHECK_CAST( (obj), TYPE_IREGIONVIEW, iRegionview )) #define IREGIONVIEW_CLASS( klass ) \ (GTK_CHECK_CLASS_CAST( (klass), TYPE_IREGIONVIEW, iRegionviewClass )) #define IS_IREGIONVIEW( obj ) (GTK_CHECK_TYPE( (obj), TYPE_IREGIONVIEW )) #define IS_IREGIONVIEW_CLASS( klass ) \ (GTK_CHECK_CLASS_TYPE( (klass), TYPE_IREGIONVIEW )) typedef struct _iRegionview { iImageview parent_class; } iRegionview; typedef struct _iRegionviewClass { iImageviewClass parent_class; /* My methods. */ } iRegionviewClass; GtkType iregionview_get_type( void ); View *iregionview_new( void ); nip2-8.7.0/src/panechild.c0000644000175000017500000000744113224651032012205 00000000000000/* The thing that sits in a pane showing the title and close button. */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #include "ip.h" static ViewClass *parent_class = NULL; static void panechild_finalize( GObject *gobject ) { Panechild *panechild = PANECHILD( gobject ); #ifdef DEBUG printf( "panechild_finalize\n" ); #endif /*DEBUG*/ /* My instance finalize stuff. */ IM_FREE( panechild->title ); G_OBJECT_CLASS( parent_class )->finalize( gobject ); } static void panechild_refresh( vObject *vobject ) { Panechild *panechild = PANECHILD( vobject ); #ifdef DEBUG printf( "panechild_refresh:\n" ); #endif /*DEBUG*/ set_glabel( panechild->label, "%s", panechild->title ); VOBJECT_CLASS( parent_class )->refresh( vobject ); } static void panechild_class_init( PanechildClass *class ) { GObjectClass *gobject_class = (GObjectClass *) class; vObjectClass *vobject_class = (vObjectClass *) class; parent_class = g_type_class_peek_parent( class ); gobject_class->finalize = panechild_finalize; vobject_class->refresh = panechild_refresh; } static void panechild_hide_cb( GtkWidget *wid, Panechild *panechild ) { pane_animate_closed( panechild->pane ); } static void panechild_init( Panechild *panechild ) { GtkWidget *hbox; GtkWidget *but; GtkWidget *icon; #ifdef DEBUG printf( "panechild_init:\n" ); #endif /*DEBUG*/ panechild->pane = NULL; panechild->title = NULL; panechild->label = NULL; hbox = gtk_hbox_new( FALSE, 7 ); gtk_box_pack_start( GTK_BOX( panechild ), hbox, FALSE, FALSE, 0 ); but = gtk_button_new(); gtk_button_set_relief( GTK_BUTTON( but ), GTK_RELIEF_NONE ); gtk_box_pack_end( GTK_BOX( hbox ), but, FALSE, FALSE, 0 ); set_tooltip( but, _( "Close the pane" ) ); icon = gtk_image_new_from_stock( GTK_STOCK_CLOSE, GTK_ICON_SIZE_MENU ); gtk_container_add( GTK_CONTAINER( but ), icon ); gtk_signal_connect( GTK_OBJECT( but ), "clicked", GTK_SIGNAL_FUNC( panechild_hide_cb ), panechild ); panechild->label = gtk_label_new( "" ); gtk_misc_set_alignment( GTK_MISC( panechild->label ), 0.0, 0.5 ); gtk_box_pack_start( GTK_BOX( hbox ), panechild->label, TRUE, TRUE, 2 ); gtk_widget_show_all( hbox ); } GtkType panechild_get_type( void ) { static GType type = 0; if( !type ) { static const GTypeInfo info = { sizeof( PanechildClass ), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) panechild_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof( Panechild ), 32, /* n_preallocs */ (GInstanceInitFunc) panechild_init, }; type = g_type_register_static( TYPE_VOBJECT, "Panechild", &info, 0 ); } return( type ); } Panechild * panechild_new( Pane *pane, const char *title ) { Panechild *panechild = gtk_type_new( TYPE_PANECHILD ); IM_SETSTR( panechild->title, title ); panechild->pane = pane; pane_set_child( pane, panechild ); return( panechild ); } nip2-8.7.0/src/itext.c0000644000175000017500000005125713224651032011417 00000000000000/* a text item in a workspace */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #include "ip.h" static HeapmodelClass *parent_class = NULL; static void itext_finalize( GObject *gobject ) { iText *itext; g_return_if_fail( gobject != NULL ); g_return_if_fail( IS_ITEXT( gobject ) ); itext = ITEXT( gobject ); #ifdef DEBUG printf( "itext_destroy\n" ); #endif /*DEBUG*/ /* My instance destroy stuff. */ IM_FREE( itext->formula ); IM_FREE( itext->formula_default ); vips_buf_destroy( &itext->value ); vips_buf_destroy( &itext->decompile ); G_OBJECT_CLASS( parent_class )->finalize( gobject ); } static void itext_info( iObject *iobject, VipsBuf *buf ) { iText *itext = ITEXT( iobject ); vips_buf_appends( buf, _( "Formula" ) ); vips_buf_appendf( buf, ": %s\n", NN( itext->formula ) ); } /* Fwd ref this. */ static gboolean itext_add_element( VipsBuf *buf, PElement *base, gboolean top, gboolean bracket ); /* Sub-fn of below, callback for list print. Eval and print the item into * the buffer, separating with commas as required. */ static void * itext_add_list( PElement *base, VipsBuf *buf, gboolean *first ) { Reduce *rc = reduce_context; if( *first ) *first = FALSE; else vips_buf_appends( buf, ", " ); /* Reduce the head, and print. */ if( !reduce_pelement( rc, reduce_spine, base ) ) return( base ); if( !itext_add_element( buf, base, FALSE, FALSE ) ) return( base ); /* Buffer full? Abort list print. */ if( buf->full ) return( base ); return( NULL ); } /* Sub-fn of below, callback for string print. Print the chars into the * buffer. */ static void * itext_add_string( PElement *base, VipsBuf *buf ) { Reduce *rc = reduce_context; /* Reduce the head, and add the char. */ if( !reduce_pelement( rc, reduce_spine, base ) ) return( base ); if( PEISCHAR( base ) ) /* Don't escape chars in string mode. */ vips_buf_appendf( buf, "%c", PEGETCHAR( base ) ); else { /* Help! Fall back to ordinary item print. */ vips_buf_appends( buf, ", " ); if( !itext_add_element( buf, base, FALSE, FALSE ) ) return( base ); } /* Buffer full? Abort string print. */ if( buf->full ) return( base ); return( NULL ); } /* Print a char ... we need to escape \n etc. */ static void itext_add_char( int ch, VipsBuf *buf ) { char in[2]; char out[3]; in[0] = ch; in[1] = '\0'; my_strecpy( out, in, FALSE ); vips_buf_appends( buf, out ); } /* Print a complex. */ static void itext_add_complex( double rp, double ip, VipsBuf *buf ) { if( PRINT_CARTESIAN ) vips_buf_appendf( buf, "(%.12g, %.12g)", rp, ip ); else { if( rp == 0 ) { if( ip == 0 ) vips_buf_appendf( buf, "0" ); else vips_buf_appendf( buf, "%.12gj", ip ); } else if( ip == 0 ) vips_buf_appendf( buf, "%.12g", rp ); else vips_buf_appendf( buf, "%.12g + %.12gj", rp, ip ); } } /* Try to decompile. */ static gboolean itext_decompile_element( VipsBuf *buf, PElement *base, gboolean top ) { Reduce *rc = reduce_context; gboolean result; /* Set the value label for a tally entry. */ if( PEISNOVAL( base ) ) vips_buf_appends( buf, _( "no value" ) ); else if( PEISREAL( base ) ) vips_buf_appendf( buf, "%g", PEGETREAL( base ) ); else if( PEISBOOL( base ) ) vips_buf_appends( buf, bool_to_char( PEGETBOOL( base ) ) ); else if( PEISCHAR( base ) ) { vips_buf_appends( buf, "'" ); itext_add_char( (int) PEGETCHAR( base ), buf ); vips_buf_appends( buf, "'" ); } else if( PEISCOMPLEX( base ) ) itext_add_complex( PEGETREALPART( base ), PEGETIMAGPART( base ), buf ); else if( PEISMANAGEDSTRING( base ) ) { Managedstring *managedstring = PEGETMANAGEDSTRING( base ); vips_buf_appendf( buf, "\"%s\"", managedstring->string ); } else if( PEISELIST( base ) ) { vips_buf_appends( buf, "[ ]" ); } else if( !heap_is_string( base, &result ) ) /* Eval error. */ return( FALSE ); else if( result ) { vips_buf_appends( buf, "\"" ); if( heap_map_list( base, (heap_map_list_fn) itext_add_string, buf, NULL ) ) return( FALSE ); vips_buf_appends( buf, "\"" ); } else if( PEISLIST( base ) ) { gboolean first = TRUE; vips_buf_appends( buf, "[" ); if( heap_map_list( base, (heap_map_list_fn) itext_add_list, buf, &first ) ) return( FALSE ); vips_buf_appends( buf, "]" ); } else if( PEISIMAGE( base ) ) { Imageinfo *ii = PEGETII( base ); if( !top ) vips_buf_appends( buf, "(" ); if( ii && IOBJECT( ii )->name ) vips_buf_appendf( buf, "vips_image \"%s\"", IOBJECT( ii )->name ); else vips_buf_appendf( buf, "vips_image " ); if( !top ) vips_buf_appends( buf, ")" ); } else if( PEISMANAGED( base ) ) { Managed *managed; if( !(managed = PEGETMANAGED( base )) ) vips_buf_appendf( buf, "" ); else { vips_buf_appendf( buf, "<%s ", G_OBJECT_TYPE_NAME( managed ) ); iobject_info( IOBJECT( managed ), buf ); vips_buf_appends( buf, ">" ); } } else if( PEISCLASS( base ) ) { Compile *compile = PEGETCLASSCOMPILE( base ); PElement params; int i; if( !top ) vips_buf_appends( buf, "(" ); symbol_qualified_name( compile->sym, buf ); /* Skip over the secrets, then decompile all the args. */ PEGETCLASSSECRET( ¶ms, base ); for( i = 0; i < compile->nsecret; i++ ) { HeapNode *hn = PEGETVAL( ¶ms ); PEPOINTRIGHT( hn, ¶ms ); } for( i = 0; i < compile->nparam; i++ ) { HeapNode *hn = PEGETVAL( ¶ms ); HeapNode *sv = GETLEFT( hn ); PElement value; PEPOINTRIGHT( sv, &value ); vips_buf_appends( buf, " " ); if( !itext_decompile_element( buf, &value, FALSE ) ) return( FALSE ); PEPOINTRIGHT( hn, ¶ms ); } if( !top ) vips_buf_appends( buf, ")" ); } else if( PEISSYMREF( base ) ) vips_buf_appends( buf, IOBJECT( PEGETSYMREF( base ) )->name ); else if( PEISTAG( base ) ) vips_buf_appends( buf, PEGETTAG( base ) ); else graph_pelement( rc->heap, buf, base, TRACE_FUNCTIONS ); return( TRUE ); } /* Little wrapper ... used for formatting error messages, etc. FALSE for eval * error. */ static gboolean itext_decompile( Reduce *rc, VipsBuf *buf, PElement *root ) { /* Evaluate and print off values. */ if( !reduce_pelement( rc, reduce_spine, root ) ) return( FALSE ); if( !itext_decompile_element( buf, root, TRUE ) && !buf->full ) /* Tally eval failed, and buffer is not full ... must * have been an eval error. */ return( FALSE ); return( TRUE ); } /* Print function for computed values. top is TRUE only for the very top level * output. bracket means we should bracket compound expressions. */ static gboolean itext_add_element( VipsBuf *buf, PElement *base, gboolean top, gboolean bracket ) { gboolean result; /* Set the value label for a tally entry. */ if( PEISNOVAL( base ) ) vips_buf_appends( buf, _( "no value" ) ); else if( PEISREAL( base ) ) vips_buf_appendf( buf, "%.7g", PEGETREAL( base ) ); else if( PEISBOOL( base ) ) vips_buf_appends( buf, bool_to_char( PEGETBOOL( base ) ) ); else if( PEISCHAR( base ) ) { vips_buf_appends( buf, "'" ); itext_add_char( (int) PEGETCHAR( base ), buf ); vips_buf_appends( buf, "'" ); } else if( PEISCOMPLEX( base ) ) { itext_add_complex( PEGETREALPART( base ), PEGETIMAGPART( base ), buf ); } else if( PEISMANAGEDSTRING( base ) ) { Managedstring *managedstring = PEGETMANAGEDSTRING( base ); if( !top ) vips_buf_appends( buf, "\"" ); vips_buf_appends( buf, managedstring->string ); if( !top ) vips_buf_appends( buf, "\"" ); } else if( PEISELIST( base ) ) { vips_buf_appends( buf, "[ ]" ); } else if( !heap_is_string( base, &result ) ) /* Eval error. */ return( FALSE ); else if( result ) { /* Only generate quotes for non-top-level string objects. */ if( !top ) vips_buf_appends( buf, "\"" ); /* Print string contents. */ if( heap_map_list( base, (heap_map_list_fn) itext_add_string, buf, NULL ) ) return( FALSE ); if( !top ) vips_buf_appends( buf, "\"" ); } else if( PEISLIST( base ) ) { gboolean first = TRUE; vips_buf_appends( buf, "[" ); if( heap_map_list( base, (heap_map_list_fn) itext_add_list, buf, &first ) ) return( FALSE ); vips_buf_appends( buf, "]" ); } else if( PEISIMAGE( base ) ) { vips_buf_appendf( buf, "<" ); vips_buf_appendi( buf, imageinfo_get( FALSE, PEGETII( base ) ) ); vips_buf_appendf( buf, ">" ); } else if( PEISMANAGED( base ) ) { Managed *managed = PEGETMANAGED( base ); vips_buf_appends( buf, "<" ); iobject_info( IOBJECT( managed ), buf ); vips_buf_appends( buf, ">" ); } else if( PEISCLASS( base ) ) { Compile *compile = PEGETCLASSCOMPILE( base ); PElement params; int i; if( bracket && compile->nparam ) vips_buf_appends( buf, "(" ); /* Name. */ symbol_qualified_name( compile->sym, buf ); /* Skip over the secrets, then value-ize all the args. */ PEGETCLASSSECRET( ¶ms, base ); for( i = 0; i < compile->nsecret; i++ ) { HeapNode *hn = PEGETVAL( ¶ms ); PEPOINTRIGHT( hn, ¶ms ); } for( i = 0; i < compile->nparam; i++ ) { HeapNode *hn = PEGETVAL( ¶ms ); HeapNode *sv = GETLEFT( hn ); PElement value; PEPOINTRIGHT( sv, &value ); vips_buf_appends( buf, " " ); if( !itext_add_element( buf, &value, FALSE, TRUE ) ) return( FALSE ); PEPOINTRIGHT( hn, ¶ms ); } if( bracket && compile->nparam ) vips_buf_appends( buf, ")" ); } else if( PEISSYMREF( base ) ) { Symbol *sym = PEGETSYMREF( base ); if( is_scope( sym ) ) { vips_buf_appendf( buf, "" ); } else { vips_buf_appendf( buf, "" ); } } else if( PEISTAG( base ) ) vips_buf_appendf( buf, ".%s", PEGETTAG( base ) ); else { vips_buf_appendf( buf, "<" ); vips_buf_appends( buf, _( "function" ) ); vips_buf_appendf( buf, ">" ); } return( TRUE ); } /* Little wrapper ... used for formatting error messages, etc. FALSE for eval * error. */ gboolean itext_value( Reduce *rc, VipsBuf *buf, PElement *root ) { /* Evaluate and print off values. */ if( !reduce_pelement( rc, reduce_spine, root ) ) return( FALSE ); if( !itext_add_element( buf, root, TRUE, FALSE ) && !buf->full ) /* Tally eval failed, and buffer is not full ... must * have been an eval error. */ return( FALSE ); return( TRUE ); } /* Same, but everror on eval fail. */ void itext_value_ev( Reduce *rc, VipsBuf *buf, PElement *root ) { if( !itext_value( rc, buf, root ) ) reduce_throw( rc ); } /* Decompile an Expr. */ static gboolean itext_make_decompiled_string( Expr *expr, VipsBuf *buf ) { /* Old error on this expression? */ if( expr->err ) { expr_error_get( expr ); return( FALSE ); } /* Dirty? We can't print dirty values, since we might have pointers * to deleted symbols in the heap (if we are dirty because one of our * parents has been deleted). FIXME ... this seem a bit restrictive :-( ... could just block reads of symbol pointers instead? */ if( expr->sym->dirty ) { vips_buf_appendf( buf, _( "Dirty value" ) ); return( TRUE ); } /* Evaluate and print off values. */ if( !itext_decompile( reduce_context, buf, &expr->root ) ) return( FALSE ); return( TRUE ); } /* Make a value string from an Expr. */ gboolean itext_make_value_string( Expr *expr, VipsBuf *buf ) { /* Old error on this expression? */ if( expr->err ) { expr_error_get( expr ); return( FALSE ); } /* Dirty? We can't print dirty values, since we might have pointers * to deleted symbols in the heap (if we are dirty because one of our * parents has been deleted). FIXME ... this seem a bit restrictive :-( ... could just block reads of symbol pointers instead? */ if( expr->sym->dirty ) { vips_buf_appendf( buf, _( "Dirty value" ) ); return( TRUE ); } /* Evaluate and print off values. */ if( !itext_value( reduce_context, buf, &expr->root ) ) return( FALSE ); return( TRUE ); } static void * itext_update_model( Heapmodel *heapmodel ) { iText *itext = ITEXT( heapmodel ); Row *row = HEAPMODEL( itext )->row; Expr *expr = row->expr; #ifdef DEBUG printf( "itext_update_model: " ); row_name_print( row ); if( row->sym && row->sym->dirty ) printf( " (dirty)" ); printf( "\n" ); #endif /*DEBUG*/ vips_buf_set_dynamic( &itext->value, LINELENGTH ); vips_buf_set_dynamic( &itext->decompile, LINELENGTH ); if( expr ) { if( !itext_make_value_string( expr, &itext->value ) || !itext_make_decompiled_string( expr, &itext->decompile ) ) expr_error_set( expr ); } #ifdef DEBUG printf( "itext_update_model: " ); row_name_print( row ); printf( " has value: %s\n", vips_buf_all( &itext->value ) ); #endif /*DEBUG*/ /* If this is a non-edited row, update the source. */ if( !itext->edited || row == row->top_row ) { const char *new_formula; if( expr && expr->compile && expr->compile->rhstext ) new_formula = expr->compile->rhstext; else new_formula = vips_buf_all( &itext->decompile ); IM_SETSTR( itext->formula_default, new_formula ); /* Don't use itext_set_formula(), as we don't want to set * _modified or recomp. */ IM_SETSTR( itext->formula, itext->formula_default ); } return( HEAPMODEL_CLASS( parent_class )->update_model( heapmodel ) ); } /* Build param lists. */ static void * itext_update_heap_sub( Symbol *sym, VipsBuf *buf ) { vips_buf_appendf( buf, "%s ", IOBJECT( sym )->name ); return( NULL ); } /* heapmodel->modified is set ... parse, compile, and mark for recomp. */ static void * itext_update_heap( Heapmodel *heapmodel ) { iText *itext = ITEXT( heapmodel ); Row *row = heapmodel->row; Expr *expr = row->expr; #ifdef DEBUG printf( "itext_update_heap: " ); row_name_print( HEAPMODEL( itext )->row ); printf( "\n" ); #endif /*DEBUG*/ /* We can have no modified text, but come here anyway. For example, we * could try eval, find an error due to an undefined symbol, and have * to retry later. Clearing the row error later will mark us modified, * even though we have no text of our own. */ if( itext->formula ) { char txt[MAX_STRSIZE]; VipsBuf buf = VIPS_BUF_STATIC( txt ); ParseRhsSyntax syntax; if( row->sym && is_super( row->sym ) ) { /* A super member ... special syntax. */ vips_buf_appendf( &buf, "%s", itext->formula ); syntax = PARSE_SUPER; } else { /* Build a new params + '=' + rhs string. */ if( expr->compile ) (void) slist_map( expr->compile->param, (SListMapFn) itext_update_heap_sub, &buf ); vips_buf_appendf( &buf, "= %s;", itext->formula ); syntax = PARSE_PARAMS; } /* Parse and compile. */ expr_error_clear( expr ); attach_input_string( vips_buf_all( &buf ) ); if( !parse_rhs( expr, syntax ) ) { expr_error_set( expr ); return( heapmodel ); } } /* Mark for recomp. */ (void) expr_dirty( expr, link_serial_new() ); return( HEAPMODEL_CLASS( parent_class )->update_heap( heapmodel ) ); } static void * itext_clear_edited( Heapmodel *heapmodel ) { iText *itext = ITEXT( heapmodel ); #ifdef DEBUG printf( "itext_clear_edited: " ); row_name_print( HEAPMODEL( itext )->row ); printf( "\n" ); #endif /*DEBUG*/ if( itext->edited ) { itext_set_edited( itext, FALSE ); /* FIXME ... formula_default is not always set for cloned edited rows! fix this properly */ if( itext->formula_default ) itext_set_formula( itext, itext->formula_default ); else printf( "itext_clear_edited: FIXME!\n" ); if( heapmodel->row->expr ) expr_dirty( heapmodel->row->expr, link_serial_new() ); /* Don't clear HEAPMODEL( itext )->modified, we want to make * sure we re-parse and compile the default value to break any * old links we might have. */ } return( HEAPMODEL_CLASS( parent_class )->clear_edited( heapmodel ) ); } static void itext_parent_add( iContainer *child ) { iText *itext = ITEXT( child ); Row *row; g_assert( IS_RHS( child->parent ) ); ICONTAINER_CLASS( parent_class )->parent_add( child ); row = HEAPMODEL( itext )->row; #ifdef DEBUG printf( "itext_new: " ); row_name_print( row ); printf( "\n" ); #endif /*DEBUG*/ /* Top rows default to edited. */ if( row == row->top_row ) itext->edited = TRUE; } static gboolean itext_load( Model *model, ModelLoadState *state, Model *parent, xmlNode *xnode ) { iText *itext = ITEXT( model ); char formula[MAX_STRSIZE]; char formula2[MAX_STRSIZE]; g_assert( IS_RHS( parent ) ); if( get_sprop( xnode, "formula", formula, MAX_STRSIZE ) ) { model_loadstate_rewrite( state, formula, formula2 ); itext_set_formula( itext, formula2 ); itext_set_edited( itext, TRUE ); } return( MODEL_CLASS( parent_class )->load( model, state, parent, xnode ) ); } static View * itext_view_new( Model *model, View *parent ) { return( itextview_new() ); } static xmlNode * itext_save( Model *model, xmlNode *xnode ) { iText *itext = ITEXT( model ); Row *row = HEAPMODEL( model )->row; xmlNode *xthis; if( !(xthis = MODEL_CLASS( parent_class )->save( model, xnode )) ) return( NULL ); if( itext->edited || row->top_row == row ) if( !set_sprop( xthis, "formula", itext->formula ) ) return( NULL ); return( xthis ); } static void itext_class_init( iTextClass *class ) { GObjectClass *gobject_class = (GObjectClass *) class; iObjectClass *iobject_class = (iObjectClass *) class; iContainerClass *icontainer_class = (iContainerClass *) class; ModelClass *model_class = (ModelClass *) class; HeapmodelClass *heapmodel_class = (HeapmodelClass *) class; parent_class = g_type_class_peek_parent( class ); /* Create signals. */ /* Init methods. */ gobject_class->finalize = itext_finalize; iobject_class->info = itext_info; icontainer_class->parent_add = itext_parent_add; model_class->view_new = itext_view_new; model_class->save = itext_save; model_class->load = itext_load; heapmodel_class->update_model = itext_update_model; heapmodel_class->update_heap = itext_update_heap; heapmodel_class->clear_edited = itext_clear_edited; /* Static init. */ model_register_loadable( MODEL_CLASS( class ) ); } static void itext_init( iText *itext ) { Model *model = MODEL( itext ); model->display = FALSE; itext->formula = NULL; itext->formula_default = NULL; vips_buf_init( &itext->value ); vips_buf_init( &itext->decompile ); vips_buf_set_dynamic( &itext->value, LINELENGTH ); vips_buf_set_dynamic( &itext->decompile, LINELENGTH ); itext->edited = FALSE; /* Some defaults changed in _parent_add() above. */ } GType itext_get_type( void ) { static GType type = 0; if( !type ) { static const GTypeInfo info = { sizeof( iTextClass ), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) itext_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof( iText ), 32, /* n_preallocs */ (GInstanceInitFunc) itext_init, }; type = g_type_register_static( TYPE_HEAPMODEL, "iText", &info, 0 ); } return( type ); } iText * itext_new( Rhs *rhs ) { iText *itext; itext = ITEXT( g_object_new( TYPE_ITEXT, NULL ) ); icontainer_child_add( ICONTAINER( rhs ), ICONTAINER( itext ), -1 ); return( itext ); } void itext_set_edited( iText *itext, gboolean edited ) { Heapmodel *heapmodel = HEAPMODEL( itext ); if( itext->edited != edited ) { #ifdef DEBUG printf( "itext_set_edited: " ); row_name_print( heapmodel->row ); printf( " %s\n", bool_to_char( edited ) ); #endif /*DEBUG*/ itext->edited = edited; iobject_changed( IOBJECT( itext ) ); } if( edited ) heapmodel_set_modified( heapmodel, TRUE ); } gboolean itext_set_formula( iText *itext, const char *formula ) { if( !itext->formula || strcmp( itext->formula, formula ) != 0 ) { #ifdef DEBUG printf( "itext_set_formula: " ); row_name_print( HEAPMODEL( itext )->row ); printf( " \"%s\"\n", formula ); #endif /*DEBUG*/ IM_SETSTR( itext->formula, formula ); heapmodel_set_modified( HEAPMODEL( itext ), TRUE ); iobject_changed( IOBJECT( itext ) ); return( TRUE ); } return( FALSE ); } nip2-8.7.0/src/toolkitgroupview.c0000644000175000017500000000611613224651032013711 00000000000000/* a toolkitgroupview button in a toolkitgroup */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #include "ip.h" static ViewClass *parent_class = NULL; static void * toolkitgroupview_dispose_sub( View *view, void *a, void *b ) { DESTROY_GTK( view ); return( NULL ); } static void toolkitgroupview_dispose( GObject *gobject ) { #ifdef DEBUG printf( "toolkitgroupview_dispose: %p\n", gobject ); #endif /*DEBUG*/ /* Toolkitviews are not child widgets of us, they are menu items pased * into the TK. Destroy them explicitly. */ view_map( VIEW( gobject ), toolkitgroupview_dispose_sub, NULL, NULL ); G_OBJECT_CLASS( parent_class )->dispose( gobject ); } static void toolkitgroupview_refresh( vObject *vobject ) { /* Toolkitgroupview *kitgview = TOOLKITGROUPVIEW( view ); */ /* FIXME ... should update display for reordering of toolkits (to keep * menu sorted) */ #ifdef DEBUG printf( "toolkitgroup changed\n" ); #endif /*DEBUG*/ VOBJECT_CLASS( parent_class )->refresh( vobject ); } static void toolkitgroupview_class_init( ToolkitgroupviewClass *class ) { GObjectClass *gobject_class = (GObjectClass *) class; vObjectClass *vobject_class = (vObjectClass *) class; parent_class = g_type_class_peek_parent( class ); gobject_class->dispose = toolkitgroupview_dispose; /* Create signals. */ /* Set methods. */ vobject_class->refresh = toolkitgroupview_refresh; } static void toolkitgroupview_init( Toolkitgroupview *kitgview ) { } GtkType toolkitgroupview_get_type( void ) { static GtkType toolkitgroupview_type = 0; if( !toolkitgroupview_type ) { static const GtkTypeInfo info = { "Toolkitgroupview", sizeof( Toolkitgroupview ), sizeof( ToolkitgroupviewClass ), (GtkClassInitFunc) toolkitgroupview_class_init, (GtkObjectInitFunc) toolkitgroupview_init, /* reserved_1 */ NULL, /* reserved_2 */ NULL, (GtkClassInitFunc) NULL, }; toolkitgroupview_type = gtk_type_unique( TYPE_VIEW, &info ); } return( toolkitgroupview_type ); } View * toolkitgroupview_new( void ) { Toolkitgroupview *kitgview = gtk_type_new( TYPE_TOOLKITGROUPVIEW ); return( VIEW( kitgview ) ); } void toolkitgroupview_set_mainw( Toolkitgroupview *kitgview, Mainw *mainw ) { kitgview->mainw = mainw; kitgview->menu = mainw->toolkit_menu; } nip2-8.7.0/src/toggle.h0000644000175000017500000000313513224651032011540 00000000000000/* a toggle button in a workspace */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_TOGGLE (toggle_get_type()) #define TOGGLE( obj ) \ (G_TYPE_CHECK_INSTANCE_CAST( (obj), TYPE_TOGGLE, Toggle )) #define TOGGLE_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_CAST( (klass), TYPE_TOGGLE, ToggleClass)) #define IS_TOGGLE( obj ) \ (G_TYPE_CHECK_INSTANCE_TYPE( (obj), TYPE_TOGGLE )) #define IS_TOGGLE_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_TYPE( (klass), TYPE_TOGGLE )) #define TOGGLE_GET_CLASS( obj ) \ (G_TYPE_INSTANCE_GET_CLASS( (obj), TYPE_TOGGLE, ToggleClass )) typedef struct _Toggle { Classmodel parent_class; /* My instance vars. */ gboolean value; } Toggle; typedef struct _ToggleClass { ClassmodelClass parent_class; /* My methods. */ } ToggleClass; GType toggle_get_type( void ); nip2-8.7.0/src/valueview.c0000644000175000017500000000774213224651032012271 00000000000000/* display a minimal graphic for an object (just the caption) */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #include "ip.h" static GraphicviewClass *parent_class = NULL; static void valueview_refresh( vObject *vobject ) { Valueview *valueview = VALUEVIEW( vobject ); Model *model = MODEL( vobject->iobject ); #ifdef DEBUG printf( "valueview_refresh: " ); row_name_print( HEAPMODEL( model )->row ); printf( "\n" ); #endif /*DEBUG*/ set_gcaption( valueview->label, "%s", NN( IOBJECT( model )->caption ) ); VOBJECT_CLASS( parent_class )->refresh( vobject ); } static void valueview_link( View *view, Model *model, View *parent ) { Valueview *valueview = VALUEVIEW( view ); Rowview *rview = ROWVIEW( parent->parent ); VIEW_CLASS( parent_class )->link( view, model, parent ); (void) rowview_menu_attach( rview, valueview->eb ); } static void valueview_class_init( ValueviewClass *class ) { vObjectClass *vobject_class = (vObjectClass *) class; ViewClass *view_class = (ViewClass *) class; parent_class = g_type_class_peek_parent( class ); /* Create signals. */ /* Init methods. */ vobject_class->refresh = valueview_refresh; view_class->link = valueview_link; } static gboolean valueview_event_cb( GtkWidget *widget, GdkEvent *ev, Valueview *valueview ) { Model *model = MODEL( VOBJECT( valueview )->iobject ); Row *row = HEAPMODEL( model )->row; gboolean handled = FALSE; switch( ev->type ) { case GDK_BUTTON_PRESS: if( ev->button.button == 1 ) { row_select_modifier( row, ev->button.state ); handled = TRUE; } break; case GDK_2BUTTON_PRESS: if( ev->button.button == 1 ) { model_edit( widget, MODEL( model ) ); handled = TRUE; } break; default: break; } return( handled ); } static void valueview_init( Valueview *valueview ) { #ifdef DEBUG printf( "valueview_init\n" ); #endif /*DEBUG*/ valueview->eb = gtk_event_box_new(); gtk_widget_add_events( GTK_WIDGET( valueview->eb ), GDK_POINTER_MOTION_HINT_MASK ); gtk_box_pack_start( GTK_BOX( valueview ), valueview->eb, FALSE, FALSE, 0 ); valueview->label = gtk_label_new( "" ); gtk_misc_set_alignment( GTK_MISC( valueview->label ), 0, 0.5 ); gtk_misc_set_padding( GTK_MISC( valueview->label ), 2, 0 ); gtk_container_add( GTK_CONTAINER( valueview->eb ), valueview->label ); gtk_widget_set_name( valueview->eb, "caption_widget" ); gtk_signal_connect( GTK_OBJECT( valueview->eb ), "event", GTK_SIGNAL_FUNC( valueview_event_cb ), valueview ); gtk_widget_show_all( GTK_WIDGET( valueview->eb ) ); } GtkType valueview_get_type( void ) { static GtkType valueview_type = 0; if( !valueview_type ) { static const GtkTypeInfo info = { "Valueview", sizeof( Valueview ), sizeof( ValueviewClass ), (GtkClassInitFunc) valueview_class_init, (GtkObjectInitFunc) valueview_init, /* reserved_1 */ NULL, /* reserved_2 */ NULL, (GtkClassInitFunc) NULL, }; valueview_type = gtk_type_unique( TYPE_GRAPHICVIEW, &info ); } return( valueview_type ); } View * valueview_new( void ) { Valueview *valueview = gtk_type_new( TYPE_VALUEVIEW ); return( VIEW( valueview ) ); } nip2-8.7.0/src/pathname.c0000644000175000017500000000651413224651032012053 00000000000000/* an input pathname ... put/get methods */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #include "ip.h" static ClassmodelClass *parent_class = NULL; static void pathname_dispose( GObject *gobject ) { Pathname *pathname = PATHNAME( gobject ); #ifdef DEBUG printf( "pathname_dispose\n" ); #endif /*DEBUG*/ IM_FREE( pathname->value ); G_OBJECT_CLASS( parent_class )->dispose( gobject ); } static View * pathname_view_new( Model *model, View *parent ) { return( pathnameview_new() ); } static void * pathname_update_model( Heapmodel *heapmodel ) { #ifdef DEBUG printf( "pathname_update_model\n" ); #endif /*DEBUG*/ if( HEAPMODEL_CLASS( parent_class )->update_model( heapmodel ) ) return( heapmodel ); return( NULL ); } /* Members of pathname we automate. */ static ClassmodelMember pathname_members[] = { { CLASSMODEL_MEMBER_STRING, NULL, 0, MEMBER_CAPTION, "caption", N_( "Caption" ), G_STRUCT_OFFSET( iObject, caption ) }, { CLASSMODEL_MEMBER_STRING, NULL, 0, MEMBER_VALUE, "value", N_( "Value" ), G_STRUCT_OFFSET( Pathname, value ) } }; static void pathname_class_init( PathnameClass *class ) { GObjectClass *gobject_class = (GObjectClass *) class; ModelClass *model_class = (ModelClass *) class; HeapmodelClass *heapmodel_class = (HeapmodelClass *) class; ClassmodelClass *classmodel_class = (ClassmodelClass *) class; parent_class = g_type_class_peek_parent( class ); /* Create signals. */ /* Init methods. */ gobject_class->dispose = pathname_dispose; model_class->view_new = pathname_view_new; heapmodel_class->update_model = pathname_update_model; /* Static init. */ model_register_loadable( MODEL_CLASS( class ) ); classmodel_class->members = pathname_members; classmodel_class->n_members = IM_NUMBER( pathname_members ); } static void pathname_init( Pathname *pathname ) { /* Overridden later. Just something sensible. */ pathname->value = NULL; IM_SETSTR( pathname->value, "no-file" ); iobject_set( IOBJECT( pathname ), CLASS_PATHNAME, NULL ); } GType pathname_get_type( void ) { static GType type = 0; if( !type ) { static const GTypeInfo info = { sizeof( PathnameClass ), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) pathname_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof( Pathname ), 32, /* n_preallocs */ (GInstanceInitFunc) pathname_init, }; type = g_type_register_static( TYPE_CLASSMODEL, "Pathname", &info, 0 ); } return( type ); } nip2-8.7.0/src/prefworkspaceview.h0000644000175000017500000000362013224651032014024 00000000000000/* a view of a workspace for the preferences window */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_PREFWORKSPACEVIEW (prefworkspaceview_get_type()) #define PREFWORKSPACEVIEW( obj ) \ (GTK_CHECK_CAST( (obj), TYPE_PREFWORKSPACEVIEW, Prefworkspaceview )) #define PREFWORKSPACEVIEW_CLASS( klass ) \ (GTK_CHECK_CLASS_CAST( (klass), \ TYPE_PREFWORKSPACEVIEW, PrefworkspaceviewClass )) #define IS_PREFWORKSPACEVIEW( obj ) \ (GTK_CHECK_TYPE( (obj), TYPE_PREFWORKSPACEVIEW )) #define IS_PREFWORKSPACEVIEW_CLASS( klass ) \ (GTK_CHECK_CLASS_TYPE( (klass), TYPE_PREFWORKSPACEVIEW )) struct _Prefworkspaceview { View view; /* If set, only display the columns whose caption includes this string * (eg. "JPEG"). Used to display tiny prefs windows for jpeg save etc. */ char *caption_filter; }; typedef struct _PrefworkspaceviewClass { ViewClass parent_class; /* My methods. */ } PrefworkspaceviewClass; GtkType prefworkspaceview_get_type( void ); View *prefworkspaceview_new( void ); void prefworkspaceview_set_caption_filter( Prefworkspaceview *pwview, const char *caption_filter ); nip2-8.7.0/src/plotwindow.c0000644000175000017500000002361313224651032012463 00000000000000/* a plotpresent / plotmodel in a floating window */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #include "ip.h" static FloatwindowClass *parent_class = NULL; static void plotwindow_destroy( GtkObject *object ) { Plotwindow *plotwindow; g_return_if_fail( object != NULL ); g_return_if_fail( IS_PLOTWINDOW( object ) ); plotwindow = PLOTWINDOW( object ); #ifdef DEBUG printf( "plotwindow_destroy: %p\n", plotwindow ); #endif /*DEBUG*/ /* My instance destroy stuff. */ UNREF( plotwindow->plotmodel ); GTK_OBJECT_CLASS( parent_class )->destroy( object ); } static void plotwindow_class_init( PlotwindowClass *class ) { GtkObjectClass *object_class = (GtkObjectClass *) class; parent_class = g_type_class_peek_parent( class ); object_class->destroy = plotwindow_destroy; /* Create signals. */ /* Init methods. */ } static void plotwindow_init( Plotwindow *plotwindow ) { #ifdef DEBUG printf( "plotwindow_init: %p\n", plotwindow ); #endif /*DEBUG*/ plotwindow->plotmodel = NULL; } GtkType plotwindow_get_type( void ) { static GtkType type = 0; if( !type ) { static const GtkTypeInfo info = { "Plotwindow", sizeof( Plotwindow ), sizeof( PlotwindowClass ), (GtkClassInitFunc) plotwindow_class_init, (GtkObjectInitFunc) plotwindow_init, /* reserved_1 */ NULL, /* reserved_2 */ NULL, (GtkClassInitFunc) NULL, }; type = gtk_type_unique( TYPE_FLOATWINDOW, &info ); } return( type ); } static void plotwindow_refresh_title( Plotwindow *plotwindow ) { Plotmodel *plotmodel = plotwindow->plotmodel; Plot *plot = plotmodel->plot; Row *row = HEAPMODEL( plot )->row; Workspace *ws = row_get_workspace( row ); #ifdef DEBUG printf( "plotwindow_refresh_title\n" ); #endif /*DEBUG*/ /* Can come here during ws destroy. */ if( ws ) { VipsBuf buf; char txt[512]; vips_buf_init_static( &buf, txt, 512 ); row_qualified_name_relative( ws->sym, row, &buf ); iwindow_set_title( IWINDOW( plotwindow ), "%s", vips_buf_all( &buf ) ); } } /* The model has changed ... update our menus and titlebar. */ static void plotwindow_changed_cb( Plotmodel *plotmodel, Plotwindow *plotwindow ) { iWindow *iwnd = IWINDOW( plotwindow ); GtkAction *action; plotwindow_refresh_title( plotwindow ); action = gtk_action_group_get_action( iwnd->action_group, "Status" ); gtk_toggle_action_set_active( GTK_TOGGLE_ACTION( action ), plotmodel->show_status ); } static void plotwindow_mouse_move_cb( Plotpresent *plotpresent, double x, double y, Plotwindow *plotwindow ) { plotstatus_mouse( plotwindow->plotstatus, x, y ); } static void plotwindow_show_status_action_cb( GtkToggleAction *action, Plotwindow *plotwindow ) { plotmodel_set_status( plotwindow->plotmodel, gtk_toggle_action_get_active( action ) ); } static void plotwindow_export_done_cb( iWindow *iwnd, void *client, iWindowNotifyFn nfn, void *sys ) { #ifdef HAVE_LIBGOFFICE #ifdef HAVE_LIBGSF Filesel *filesel = FILESEL( iwnd ); Plotwindow *plotwindow = (Plotwindow *) client; Plotpresent *plotpresent = plotwindow->plotpresent; GogGraph *ggraph = plotpresent->ggraph; char *filename; char buf[FILENAME_MAX]; char *extension; GOImageFormat format; GsfOutput *output; GError *err = NULL; gboolean result; if( !(filename = filesel_get_filename( filesel )) ) { nfn( sys, IWINDOW_ERROR ); return; } expand_variables( filename, buf ); if( !(output = gsf_output_stdio_new( buf, &err )) ) { error_top( _( "Unable to write." ) ); if( err ) error_sub( "%s", err->message ); IM_FREEF( g_error_free, err ); g_free( filename ); nfn( sys, IWINDOW_ERROR ); return; } if( (extension = strrchr( buf, '.' )) ) extension += 1; else extension = buf; format = go_image_get_format_from_name( extension ); g_free( filename ); result = gog_graph_export_image( ggraph, format, output, 72, 72 ); UNREF( output ); nfn( sys, result ? IWINDOW_YES : IWINDOW_ERROR ); #endif /*HAVE_LIBGSF*/ #endif /*HAVE_LIBGOFFICE*/ } static void plotwindow_export_action_cb( GtkAction *action, Plotwindow *plotwindow ) { Filesel *filesel = FILESEL( filesel_new() ); iwindow_set_title( IWINDOW( filesel ), "%s", _( "Export Plot As" ) ); filesel_set_flags( filesel, TRUE, TRUE ); filesel_set_filetype( filesel, filesel_type_image, IMAGE_FILE_TYPE ); iwindow_set_parent( IWINDOW( filesel ), GTK_WIDGET( plotwindow ) ); filesel_set_done( filesel, plotwindow_export_done_cb, plotwindow ); iwindow_build( IWINDOW( filesel ) ); gtk_widget_show( GTK_WIDGET( filesel ) ); } static GtkToggleActionEntry plotwindow_toggle_actions[] = { { "Status", NULL, N_( "_Status" ), NULL, N_( "Show status bar" ), G_CALLBACK( plotwindow_show_status_action_cb ), TRUE } }; static GtkActionEntry plotwindow_actions[] = { { "Export", GTK_STOCK_SAVE_AS, N_( "Export Plot" ), NULL, N_( "Export plot to file" ), G_CALLBACK( plotwindow_export_action_cb ) } }; static const char *plotwindow_menubar_ui_description = "" " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " ""; static void plotwindow_build( Plotwindow *plotwindow, GtkWidget *vbox, Plot *plot ) { iWindow *iwnd = IWINDOW( plotwindow ); GError *error; GtkWidget *mbar; GtkWidget *frame; GList *focus_chain; int w, h; /* Make our model. */ plotwindow->plotmodel = plotmodel_new( plot ); g_object_ref( G_OBJECT( plotwindow->plotmodel ) ); iobject_sink( IOBJECT( plotwindow->plotmodel ) ); g_signal_connect( G_OBJECT( plotwindow->plotmodel ), "changed", G_CALLBACK( plotwindow_changed_cb ), plotwindow ); /* Make main menu bar */ gtk_action_group_add_actions( iwnd->action_group, plotwindow_actions, G_N_ELEMENTS( plotwindow_actions ), GTK_WINDOW( plotwindow ) ); gtk_action_group_add_toggle_actions( iwnd->action_group, plotwindow_toggle_actions, G_N_ELEMENTS( plotwindow_toggle_actions ), GTK_WINDOW( plotwindow ) ); error = NULL; if( !gtk_ui_manager_add_ui_from_string( iwnd->ui_manager, plotwindow_menubar_ui_description, -1, &error ) ) { g_message( "building menus failed: %s", error->message ); g_error_free( error ); exit( EXIT_FAILURE ); } mbar = gtk_ui_manager_get_widget( iwnd->ui_manager, "/PlotwindowMenubar" ); gtk_box_pack_start( GTK_BOX( vbox ), mbar, FALSE, FALSE, 0 ); gtk_widget_show( mbar ); /* Status bar. Show/hide set on first refresh. */ plotwindow->plotstatus = plotstatus_new( plotwindow->plotmodel ); gtk_box_pack_start( GTK_BOX( vbox ), GTK_WIDGET( plotwindow->plotstatus ), FALSE, FALSE, 0 ); /* Plot area. */ frame = gtk_frame_new( NULL ); gtk_frame_set_shadow_type( GTK_FRAME( frame ), GTK_SHADOW_OUT ); gtk_widget_show( frame ); gtk_box_pack_start( GTK_BOX( vbox ), GTK_WIDGET( frame ), TRUE, TRUE, 0 ); #ifdef HAVE_LIBGOFFICE plotwindow->plotpresent = plotpresent_new( plotwindow->plotmodel ); #endif /*HAVE_LIBGOFFICE*/ gtk_container_add( GTK_CONTAINER( frame ), GTK_WIDGET( plotwindow->plotpresent ) ); gtk_widget_show( GTK_WIDGET( plotwindow->plotpresent ) ); g_signal_connect( G_OBJECT( plotwindow->plotpresent ), "mouse_move", G_CALLBACK( plotwindow_mouse_move_cb ), plotwindow ); /* Initial window size. */ if( MODEL( plot )->window_width == -1 ) { w = IM_MIN( IMAGE_WINDOW_WIDTH, 500 ); h = IM_MIN( IMAGE_WINDOW_HEIGHT, 500 ); gtk_window_set_default_size( GTK_WINDOW( plotwindow ), w, h ); } /* Override the focus_chain ... we want the imagedisplay first. */ focus_chain = NULL; focus_chain = g_list_append( focus_chain, plotwindow->plotpresent ); gtk_container_set_focus_chain( GTK_CONTAINER( vbox ), focus_chain ); gtk_widget_grab_focus( GTK_WIDGET( plotwindow->plotpresent ) ); } static void plotwindow_popdown( iWindow *iwnd, void *client, iWindowNotifyFn nfn, void *sys ) { Plotwindow *plotwindow = PLOTWINDOW( iwnd ); Plotmodel *plotmodel = plotwindow->plotmodel; Plot *plot = plotmodel->plot; /* We have to note position/size in popdown rather than destroy, since * the widgets have to all still be extant. */ plot->show_status = plotmodel->show_status; nfn( sys, IWINDOW_YES ); } static void plotwindow_link( Plotwindow *plotwindow, Plot *plot, GtkWidget *parent ) { iwindow_set_build( IWINDOW( plotwindow ), (iWindowBuildFn) plotwindow_build, plot, NULL, NULL ); iwindow_set_parent( IWINDOW( plotwindow ), parent ); iwindow_set_popdown( IWINDOW( plotwindow ), plotwindow_popdown, NULL ); floatwindow_link( FLOATWINDOW( plotwindow ), MODEL( plot ) ); iwindow_build( IWINDOW( plotwindow ) ); /* Initial "changed" on the model to get all views to init. */ iobject_changed( IOBJECT( plotwindow->plotmodel ) ); } Plotwindow * plotwindow_new( Plot *plot, GtkWidget *parent ) { Plotwindow *plotwindow = gtk_type_new( TYPE_PLOTWINDOW ); plotwindow_link( plotwindow, plot, parent ); return( plotwindow ); } nip2-8.7.0/src/iregiongroup.h0000644000175000017500000000335013224651032012767 00000000000000/* base model for a client regions on an imageview */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_IREGIONGROUP (iregiongroup_get_type()) #define IREGIONGROUP( obj ) \ (G_TYPE_CHECK_INSTANCE_CAST( (obj), TYPE_IREGIONGROUP, iRegiongroup )) #define IREGIONGROUP_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_CAST( (klass), \ TYPE_IREGIONGROUP, iRegiongroupClass)) #define IS_IREGIONGROUP( obj ) \ (G_TYPE_CHECK_INSTANCE_TYPE( (obj), TYPE_IREGIONGROUP )) #define IS_IREGIONGROUP_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_TYPE( (klass), TYPE_IREGIONGROUP )) #define IREGIONGROUP_GET_CLASS( obj ) \ (G_TYPE_INSTANCE_GET_CLASS( (obj), \ TYPE_IREGIONGROUP, iRegiongroupClass )) struct _iRegiongroup { Classmodel parent_class; }; typedef struct _iRegiongroupClass { ClassmodelClass parent_class; /* My methods. */ } iRegiongroupClass; GType iregiongroup_get_type( void ); iRegiongroup *iregiongroup_new( Classmodel *classmodel ); nip2-8.7.0/src/clock.h0000644000175000017500000000327513224651032011357 00000000000000/* a clock in a workspace */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_CLOCK (clock_get_type()) #define CLOCK( obj ) \ (G_TYPE_CHECK_INSTANCE_CAST( (obj), TYPE_CLOCK, Clock )) #define CLOCK_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_CAST( (klass), TYPE_CLOCK, ClockClass)) #define IS_CLOCK( obj ) \ (G_TYPE_CHECK_INSTANCE_TYPE( (obj), TYPE_CLOCK )) #define IS_CLOCK_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_TYPE( (klass), TYPE_CLOCK )) #define CLOCK_GET_CLASS( obj ) \ (G_TYPE_INSTANCE_GET_CLASS( (obj), TYPE_CLOCK, ClockClass )) typedef struct _Clock { Value parent_object; double interval; double value; GTimer *elapsed_timer; double time_offset; /* Offset timer by this to get new value */ guint recalc_timeout; /* Timeout for next recalc */ } Clock; typedef struct _ClockClass { ValueClass parent_class; /* My methods. */ } ClockClass; GType clock_get_type( void ); nip2-8.7.0/src/column.c0000644000175000017500000002551713224651032011557 00000000000000/* a column button in a workspace */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #include "ip.h" static FilemodelClass *parent_class = NULL; /* Offset for this column load/save. */ static int column_left_offset = 0; static int column_top_offset = 0; /* When we merge workspaces we need to scroll to position the last new column * in view. */ static Column *column_last_new = NULL; /* Map down a column. */ void * column_map( Column *col, row_map_fn fn, void *a, void *b ) { Subcolumn *scol = col->scol; return( subcolumn_map( scol, fn, a, b ) ); } void * column_map_symbol_sub( Row *row, symbol_map_fn fn, void *a ) { return( fn( row->sym, a, NULL, NULL ) ); } /* Map down a column, applying to the symbol of the row. */ void * column_map_symbol( Column *col, symbol_map_fn fn, void *a ) { return( column_map( col, (row_map_fn) column_map_symbol_sub, (void *) fn, a ) ); } static void column_finalize( GObject *gobject ) { Column *col; #ifdef DEBUG printf( "column_finalize\n" ); #endif /*DEBUG*/ g_return_if_fail( gobject != NULL ); g_return_if_fail( IS_COLUMN( gobject ) ); col = COLUMN( gobject ); if( col == column_last_new ) column_last_new = NULL; IM_FREEF( g_source_remove, col->scrollto_timeout ); G_OBJECT_CLASS( parent_class )->finalize( gobject ); } /* Select all things in a column. */ void * column_select_symbols( Column *col ) { return( column_map( col, (row_map_fn) row_select_extend, NULL, NULL ) ); } static Subcolumn * column_get_subcolumn( Column *col ) { g_assert( g_slist_length( ICONTAINER( col )->children ) == 1 ); return( SUBCOLUMN( ICONTAINER( col )->children->data ) ); } static void column_child_add( iContainer *parent, iContainer *child, int pos ) { Column *col = COLUMN( parent ); ICONTAINER_CLASS( parent_class )->child_add( parent, child, pos ); /* Update our context. */ col->scol = column_get_subcolumn( col ); } static void column_child_remove( iContainer *parent, iContainer *child ) { Column *col = COLUMN( parent ); workspace_set_modified( col->ws, TRUE ); ICONTAINER_CLASS( parent_class )->child_remove( parent, child ); } static Workspace * column_get_workspace( Column *col ) { return( WORKSPACE( ICONTAINER( col )->parent ) ); } static void column_parent_add( iContainer *child ) { Column *col = COLUMN( child ); g_assert( IS_WORKSPACE( child->parent ) ); ICONTAINER_CLASS( parent_class )->parent_add( child ); g_assert( IS_WORKSPACE( child->parent ) ); /* Update our context. */ col->ws = column_get_workspace( col ); g_assert( IS_WORKSPACE( child->parent ) ); } static View * column_view_new( Model *model, View *parent ) { if( IS_PREFWORKSPACEVIEW( parent ) ) return( prefcolumnview_new() ); else return( columnview_new() ); } static xmlNode * column_save( Model *model, xmlNode *xnode ) { Column *col = COLUMN( model ); int x = IM_MAX( 0, col->x - column_left_offset ); int y = IM_MAX( 0, col->y - column_top_offset ); xmlNode *xthis; if( !(xthis = MODEL_CLASS( parent_class )->save( model, xnode )) ) return( NULL ); /* Save sform for backwards compat with nip 7.8 ... now a workspace * property. */ if( !set_iprop( xthis, "x", x ) || !set_iprop( xthis, "y", y ) || !set_sprop( xthis, "open", bool_to_char( col->open ) ) || !set_sprop( xthis, "selected", bool_to_char( col->selected ) ) || !set_sprop( xthis, "sform", bool_to_char( FALSE ) ) || !set_iprop( xthis, "next", col->next ) || !set_sprop( xthis, "name", IOBJECT( col )->name ) ) return( NULL ); /* Caption can be NULL for untitled columns. */ if( IOBJECT( col )->caption ) if( !set_sprop( xthis, "caption", IOBJECT( col )->caption ) ) return( NULL ); return( xthis ); } static gboolean column_save_test( Model *model ) { Column *col = COLUMN( model ); Workspace *ws = col->ws; Workspacegroup *wsg = workspace_get_workspacegroup( ws ); if( wsg->save_type == WORKSPACEGROUP_SAVE_SELECTED ) /* Only save columns containing selected rows. */ return( column_map( col, (row_map_fn) row_is_selected, NULL, NULL ) != NULL ); return( TRUE ); } static void column_set_last_new( Column *col ) { if( !column_last_new ) column_last_new = col; } static gboolean column_load( Model *model, ModelLoadState *state, Model *parent, xmlNode *xnode ) { Column *col = COLUMN( model ); int x = col->x; int y = col->y; char buf[256]; g_assert( IS_WORKSPACE( parent ) ); if( !get_iprop( xnode, "x", &x ) || !get_iprop( xnode, "y", &y ) || !get_bprop( xnode, "open", &col->open ) || !get_bprop( xnode, "selected", &col->selected ) || !get_iprop( xnode, "next", &col->next ) ) return( FALSE ); col->x = x + column_left_offset; col->y = y + column_top_offset; /* Don't use iobject_set(): we don't want to trigger _changed during * load. */ if( get_sprop( xnode, "caption", buf, 256 ) ) { IM_SETSTR( IOBJECT( col )->caption, buf ); } if( get_sprop( xnode, "name", buf, 256 ) ) { IM_SETSTR( IOBJECT( col )->name, buf ); } column_set_last_new( col ); return( MODEL_CLASS( parent_class )->load( model, state, parent, xnode ) ); } static void column_class_init( ColumnClass *class ) { GObjectClass *gobject_class = (GObjectClass *) class; iObjectClass *iobject_class = (iObjectClass *) class; iContainerClass *icontainer_class = (iContainerClass *) class; ModelClass *model_class = (ModelClass *) class; FilemodelClass *filemodel_class = (FilemodelClass *) class; parent_class = g_type_class_peek_parent( class ); gobject_class->finalize = column_finalize; /* Create signals. */ /* Init methods. */ iobject_class->user_name = _( "Column" ); icontainer_class->child_add = column_child_add; icontainer_class->child_remove = column_child_remove; icontainer_class->parent_add = column_parent_add; model_class->view_new = column_view_new; model_class->save = column_save; model_class->save_test = column_save_test; model_class->load = column_load; filemodel_class->filetype = filesel_type_workspace; /* Static init. */ model_register_loadable( MODEL_CLASS( class ) ); } static void column_init( Column *col ) { #ifdef DEBUG printf( "column_init\n" ); #endif /*DEBUG*/ col->scol = NULL; col->ws = NULL; col->x = 0; col->y = 0; col->open = TRUE; col->selected = FALSE; col->next = 1; col->last_select = NULL; } GType column_get_type( void ) { static GType column_type = 0; if( !column_type ) { static const GTypeInfo info = { sizeof( ColumnClass ), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) column_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof( Column ), 32, /* n_preallocs */ (GInstanceInitFunc) column_init, }; column_type = g_type_register_static( TYPE_FILEMODEL, "Column", &info, 0 ); } return( column_type ); } Column * column_new( Workspace *ws, const char *name ) { Column *col; if( workspace_column_find( ws, name ) ) { error_top( _( "Name clash." ) ); error_sub( _( "Can't create column \"%s\". A column with that " "name already exists." ), name ); return( NULL ); } col = COLUMN( g_object_new( TYPE_COLUMN, NULL ) ); iobject_set( IOBJECT( col ), name, NULL ); icontainer_child_add( ICONTAINER( ws ), ICONTAINER( col ), -1 ); subcolumn_new( NULL, col ); col->x = ws->vp.left + 50; col->y = ws->vp.top; column_set_last_new( col ); return( col ); } Column * column_get_last_new( void ) { return( column_last_new ); } void column_clear_last_new( void ) { column_last_new = NULL; } /* Find the bottom of the column. */ Row * column_get_bottom( Column *col ) { Subcolumn *scol = col->scol; GSList *children = ICONTAINER( scol )->children; if( children ) { Row *row = ROW( g_slist_last( children )->data ); return( row ); } return( NULL ); } /* Add the last n names from a column to a buffer. Error if there are too few * there. */ gboolean column_add_n_names( Column *col, const char *name, VipsBuf *buf, int nparam ) { Subcolumn *scol = col->scol; GSList *children = ICONTAINER( scol )->children; int len = g_slist_length( children ); GSList *i; g_assert( nparam >= 0 ); if( nparam > 0 && nparam > len ) { error_top( _( "Too few items." ) ); error_sub( _( "This column only has %d items, " "but %s needs %d items." ), len, name, nparam ); return( FALSE ); } for( i = g_slist_nth( children, len - nparam ); i; i = i->next ) { Row *row = ROW( i->data ); if( row->sym ) { vips_buf_appends( buf, " " ); vips_buf_appends( buf, IOBJECT( row->sym )->name ); } } return( TRUE ); } /* Is a column empty? */ gboolean column_is_empty( Column *col ) { Subcolumn *scol = col->scol; GSList *children = ICONTAINER( scol )->children; return( children == NULL ); } /* Set the load/save offsets. */ void column_set_offset( int x_off, int y_off ) { #ifdef DEBUG printf( "column_set_offset: load offset %d x %d\n", x_off, y_off ); #endif /*DEBUG*/ column_left_offset = x_off; column_top_offset = y_off; } char * column_name_new( Column *col ) { char buf[256]; do { im_snprintf( buf, 256, "%s%d", IOBJECT( col )->name, col->next++ ); } while( compile_lookup( col->ws->sym->expr->compile, buf ) ); return( im_strdup( NULL, buf ) ); } void column_set_open( Column *col, gboolean open ) { if( col->open != open ) { Workspace *ws = col->ws; col->open = open; workspace_set_modified( ws, TRUE ); iobject_changed( IOBJECT( col ) ); } } static gboolean column_scrollto_timeout_cb( Column *col ) { #ifdef DEBUG printf( "column_scrollto_timeout_cb: %p\n", col ); #endif /*DEBUG*/ col->scrollto_timeout = 0; model_scrollto( MODEL( col ), col->pending_position ); return( FALSE ); } void column_scrollto( Column *col, ModelScrollPosition position ) { #ifdef DEBUG printf( "column_scrollto: %p %s\n", col, IOBJECT( col )->name ); #endif /*DEBUG*/ IM_FREEF( g_source_remove, col->scrollto_timeout ); col->pending_position = position; /* We need a longer timeout here than the one in mainw_layout(). */ col->scrollto_timeout = g_timeout_add( 400, (GSourceFunc) column_scrollto_timeout_cb, col ); } nip2-8.7.0/src/pane.c0000644000175000017500000002421313224651032011175 00000000000000/* a side panel that can slide in and out of view */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #include "ip.h" /* #define DEBUG */ /* Our signals. */ enum { SIG_CHANGED, /* Change to position or openness */ SIG_LAST }; static GtkHPanedClass *parent_class = NULL; static guint pane_signals[SIG_LAST] = { 0 }; #ifdef DEBUG static char * pane_handedness2char( PaneHandedness handedness ) { switch( handedness ) { case PANE_HIDE_LEFT: return( "PANE_HIDE_LEFT" ); case PANE_HIDE_RIGHT: return( "PANE_HIDE_RIGHT" ); default: g_assert( 0 ); } } #endif /*DEBUG*/ static void pane_changed( Pane *pane ) { g_assert( IS_PANE( pane ) ); #ifdef DEBUG printf( "pane_changed: %p %s\n", pane, pane_handedness2char( pane->handedness ) ); #endif /*DEBUG*/ g_signal_emit( G_OBJECT( pane ), pane_signals[SIG_CHANGED], 0 ); } static int pane_closed_position( Pane *pane ) { /* Can't use max/min since we need to be able to work before our * window has been built. */ return( pane->handedness == PANE_HIDE_RIGHT ? 10000 : 0 ); } /* An open position ... used in case we are asked to open, but the position is * already closed. */ static int pane_open_position( Pane *pane ) { int max_position; int min_position; g_object_get( pane, "max_position", &max_position, "min_position", &min_position, NULL ); return( pane->handedness == PANE_HIDE_RIGHT ? max_position - 200: min_position + 200 ); } static void pane_destroy( GtkObject *object ) { Pane *pane; g_return_if_fail( object != NULL ); g_return_if_fail( IS_PANE( object ) ); pane = PANE( object ); #ifdef DEBUG printf( "pane_destroy: %p %s\n", pane, pane_handedness2char( pane->handedness ) ); #endif /*DEBUG*/ /* My instance destroy stuff. */ IM_FREEF( g_source_remove, pane->animate_timeout ); GTK_OBJECT_CLASS( parent_class )->destroy( object ); } static void pane_class_init( PaneClass *class ) { GtkObjectClass *object_class = (GtkObjectClass *) class; parent_class = g_type_class_peek_parent( class ); object_class->destroy = pane_destroy; class->changed = NULL; pane_signals[SIG_CHANGED] = g_signal_new( "changed", G_OBJECT_CLASS_TYPE( object_class ), G_SIGNAL_RUN_FIRST, G_STRUCT_OFFSET( PaneClass, changed ), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0 ); } /* Position property has changed. We block the notify signal before we set * position, so this change must have come from a user drag or parent window * resize. */ static void pane_notify_position_cb( Pane *pane ) { int max_position; int min_position; int position; /* Can get here even though we block notify during position set in * animate, because of delays in window setup. */ if( pane->animate_timeout ) return; g_object_get( pane, "max_position", &max_position, "min_position", &min_position, NULL ); /* We can have 10,000 as position (meaning way to the * right), take account of any clipping there may be. */ pane->position = IM_CLIP( min_position, pane->position, max_position ); /* And the new value. */ position = gtk_paned_get_position( GTK_PANED( pane ) ); #ifdef DEBUG printf( "pane_notify_position_cb: %p %s %d\n", pane, pane_handedness2char( pane->handedness ), position ); #endif /*DEBUG*/ pane_set_position( pane, position ); pane_set_user_position( pane, position ); /* Look for dragged close. */ if( pane->open && pane->handedness == PANE_HIDE_LEFT && position == min_position ) pane_set_open( pane, FALSE ); if( pane->open && pane->handedness == PANE_HIDE_RIGHT && position == max_position ) pane_set_open( pane, FALSE ); } static void pane_init( Pane *pane ) { pane->handedness = PANE_HIDE_LEFT; pane->panechild = NULL; pane->open = FALSE; pane->position = 0; pane->user_position = 0; /* overwritten on _link() */ pane->target_position = 0; pane->close_on_end = FALSE; pane->last_set_position = 0; pane->animate_timeout = 0; g_signal_connect( pane, "notify::position", G_CALLBACK( pane_notify_position_cb ), NULL ); } GType pane_get_type( void ) { static GType type = 0; if( !type ) { static const GTypeInfo info = { sizeof( PaneClass ), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) pane_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof( Pane ), 32, /* n_preallocs */ (GInstanceInitFunc) pane_init, }; type = g_type_register_static( GTK_TYPE_HPANED, "Pane", &info, 0 ); } return( type ); } /* Operations on the model. */ void pane_set_position( Pane *pane, int position ) { if( pane->position != position ) { #ifdef DEBUG printf( "pane_set_position: %p %s %d\n", pane, pane_handedness2char( pane->handedness ), position ); #endif /*DEBUG*/ g_signal_handlers_block_by_func( pane, pane_notify_position_cb, NULL ); gtk_paned_set_position( GTK_PANED( pane ), position ); g_signal_handlers_unblock_by_func( pane, pane_notify_position_cb, NULL ); pane->position = position; pane_changed( pane ); } } void pane_set_user_position( Pane *pane, int user_position ) { if( pane->user_position != user_position ) { #ifdef DEBUG printf( "pane_set_user_position: %p %s %d\n", pane, pane_handedness2char( pane->handedness ), user_position ); #endif /*DEBUG*/ pane->user_position = user_position; pane_changed( pane ); } } void pane_set_open( Pane *pane, gboolean open ) { if( pane->open != open ) { #ifdef DEBUG printf( "pane_set_open: %p %s %d\n", pane, pane_handedness2char( pane->handedness ), open ); #endif /*DEBUG*/ widget_visible( GTK_WIDGET( pane->panechild ), open ); pane->open = open; pane_changed( pane ); } } /* Set everything all at once on startup. */ void pane_set_state( Pane *pane, gboolean open, int user_position ) { if( pane->open != open || pane->user_position != user_position ) { g_signal_handlers_block_by_func( pane, pane_notify_position_cb, NULL ); gtk_paned_set_position( GTK_PANED( pane ), user_position ); g_signal_handlers_unblock_by_func( pane, pane_notify_position_cb, NULL ); widget_visible( GTK_WIDGET( pane->panechild ), open ); pane->open = open; pane->user_position = user_position; pane->position = user_position; pane_changed( pane ); } } void pane_set_child( Pane *pane, Panechild *panechild ) { g_assert( !pane->panechild ); pane->panechild = panechild; if( pane->handedness == PANE_HIDE_LEFT ) gtk_paned_pack1( GTK_PANED( pane ), GTK_WIDGET( panechild ), TRUE, TRUE ); else gtk_paned_pack2( GTK_PANED( pane ), GTK_WIDGET( panechild ), TRUE, TRUE ); } /* Control. */ static gboolean pane_animate_timeout_cb( Pane *pane ) { int position = pane->position; int target = pane->target_position; int new; gboolean more; #ifdef DEBUG printf( "pane_animate_timeout_cb: %p %s\n", pane, pane_handedness2char( pane->handedness ) ); #endif /*DEBUG*/ more = TRUE; new = position + (target - position) / 2; if( ABS( position - target ) < 5 || new == pane->last_set_position ) { /* At our target! */ new = target; more = FALSE; pane->animate_timeout = 0; } pane_set_position( pane, new ); pane->last_set_position = new; if( !more && pane->close_on_end ) pane_set_open( pane, FALSE ); return( more ); } /* Close the pane with an animation. */ void pane_animate_closed( Pane *pane ) { if( !pane->animate_timeout && pane->open ) { int max_position; int min_position; int target_position; target_position = pane_closed_position( pane ); g_object_get( pane, "max_position", &max_position, "min_position", &min_position, NULL ); /* Can be zero if we're here very early. */ if( max_position > 0 ) target_position = IM_CLIP( min_position, target_position, max_position ); pane->target_position = target_position; pane->close_on_end = TRUE; pane->last_set_position = -1; pane->animate_timeout = g_timeout_add( 50, (GSourceFunc) pane_animate_timeout_cb, pane ); } } /* Open the pane with an animation. */ void pane_animate_open( Pane *pane ) { if( !pane->animate_timeout && !pane->open ) { int max_position; int min_position; int target_position; target_position = pane->user_position; g_object_get( pane, "max_position", &max_position, "min_position", &min_position, NULL ); /* Can be zero if we're here very early. */ if( max_position > 0 ) target_position = IM_CLIP( min_position, target_position, max_position ); /* user_position can be max or min if the pane was dragged * closed. */ if( target_position == max_position || target_position == min_position ) target_position = pane_open_position( pane ); #ifdef DEBUG printf( "pane_animate_open: %p %s %d\n", pane, pane_handedness2char( pane->handedness ), target_position ); #endif /*DEBUG*/ pane->target_position = target_position; pane->close_on_end = FALSE; pane->last_set_position = -1; pane_set_open( pane, TRUE ); pane->animate_timeout = g_timeout_add( 50, (GSourceFunc) pane_animate_timeout_cb, pane ); } } static void pane_link( Pane *pane, PaneHandedness handedness ) { #ifdef DEBUG printf( "pane_link: %p %s\n", pane, pane_handedness2char( handedness ) ); #endif /*DEBUG*/ pane->handedness = handedness; pane_set_open( pane, FALSE ); } Pane * pane_new( PaneHandedness handedness ) { Pane *pane; pane = PANE( g_object_new( TYPE_PANE, NULL ) ); pane_link( pane, handedness ); return( pane ); } nip2-8.7.0/src/floatwindow.c0000644000175000017500000001077213224651032012614 00000000000000/* abstract base class for floatwindow / plotwindow etc. */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #include "ip.h" static iWindowClass *parent_class = NULL; static void floatwindow_popdown( GtkWidget *widget ) { Floatwindow *floatwindow = FLOATWINDOW( widget ); Model *model = floatwindow->model; #ifdef DEBUG printf( "floatwindow_popdown\n" ); #endif /*DEBUG*/ /* We have to note position/size in popdown rather than destroy, since * the widgets have to all still be extant. */ /* Note position/size for later reuse. */ model->window_width = GTK_WIDGET( floatwindow )->allocation.width; model->window_height = GTK_WIDGET( floatwindow )->allocation.height; gdk_window_get_root_origin( gtk_widget_get_toplevel( GTK_WIDGET( floatwindow ) )->window, &model->window_x, &model->window_y ); IWINDOW_CLASS( parent_class )->popdown( widget ); } static void floatwindow_build( GtkWidget *widget ) { Floatwindow *floatwindow = FLOATWINDOW( widget ); Model *model = floatwindow->model; IWINDOW_CLASS( parent_class )->build( widget ); /* Must be set with floatmodel_link before build. */ g_assert( floatwindow->model ); /* Position and size to restore? Come here after parent build, so we * can override any default settings from there. */ if( model->window_width != -1 ) { GdkScreen *screen = gtk_widget_get_screen( GTK_WIDGET( floatwindow ) ); int screen_width = gdk_screen_get_width( screen ); int screen_height = gdk_screen_get_height( screen ); /* We need to clip x/y against the desktop size ... we may be * loading a workspace made on a machine with a big screen on * a machine with a small screen. FIXME ... we could only clip if the window will be completely off the screen? ie. ignore iimage->window_width etc. */ int window_x = IM_CLIP( 0, model->window_x, screen_width - model->window_width ); int window_y = IM_CLIP( 0, model->window_y, screen_height - model->window_height ); int window_width = IM_MIN( model->window_width, screen_width ); int window_height = IM_MIN( model->window_height, screen_height ); gtk_widget_set_uposition( GTK_WIDGET( floatwindow ), window_x, window_y ); gtk_window_set_default_size( GTK_WINDOW( floatwindow ), window_width, window_height ); } } static void floatwindow_class_init( FloatwindowClass *class ) { iWindowClass *iwindow_class = (iWindowClass *) class; parent_class = g_type_class_peek_parent( class ); iwindow_class->build = floatwindow_build; iwindow_class->popdown = floatwindow_popdown; /* Hmm, this rather negates the point of this class. If we make plot * and image windows transient for the main window, we don't get * maximise buttons :-( (on gnome and win anyway). * * Keep this class around for now, maybe it'll still be useful. */ iwindow_class->transient = FALSE; /* Create signals. */ /* Init methods. */ } static void floatwindow_init( Floatwindow *floatwindow ) { floatwindow->model = NULL; } GType floatwindow_get_type( void ) { static GType type = 0; if( !type ) { static const GTypeInfo info = { sizeof( FloatwindowClass ), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) floatwindow_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof( Floatwindow ), 32, /* n_preallocs */ (GInstanceInitFunc) floatwindow_init, }; type = g_type_register_static( TYPE_IWINDOW, "Floatwindow", &info, 0 ); } return( type ); } void floatwindow_link( Floatwindow *floatwindow, Model *model ) { floatwindow->model = model; destroy_if_destroyed( G_OBJECT( floatwindow ), G_OBJECT( model ), (DestroyFn) gtk_widget_destroy ); } nip2-8.7.0/src/value.c0000644000175000017500000000572413224651032011374 00000000000000/* an input value ... put/get methods */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #include "ip.h" static ClassmodelClass *parent_class = NULL; static void value_finalize( GObject *gobject ) { Value *value; #ifdef DEBUG printf( "value_finalize\n" ); #endif /*DEBUG*/ g_return_if_fail( gobject != NULL ); g_return_if_fail( IS_VALUE( gobject ) ); value = VALUE( gobject ); /* My instance finalize stuff. */ vips_buf_destroy( &value->caption_buffer ); G_OBJECT_CLASS( parent_class )->finalize( gobject ); } /* Default caption: just "class-name class.value". */ static const char * value_generate_caption( iObject *iobject ) { Value *value = VALUE( iobject ); ValueClass *value_class = VALUE_GET_CLASS( value ); VipsBuf *buf = &value->caption_buffer; vips_buf_rewind( buf ); if( !heapmodel_name( HEAPMODEL( value ), buf ) ) vips_buf_appends( buf, G_OBJECT_CLASS_NAME( value_class ) ); vips_buf_appends( buf, " " ); heapmodel_value( HEAPMODEL( value ), buf ); return( vips_buf_all( buf ) ); } static View * value_view_new( Model *model, View *parent ) { return( valueview_new() ); } static void value_class_init( ValueClass *class ) { GObjectClass *gobject_class = (GObjectClass *) class; iObjectClass *iobject_class = (iObjectClass *) class; ModelClass *model_class = (ModelClass *) class; parent_class = g_type_class_peek_parent( class ); /* Create signals. */ gobject_class->finalize = value_finalize; iobject_class->generate_caption = value_generate_caption; model_class->view_new = value_view_new; } static void value_init( Value *value ) { vips_buf_init_dynamic( &value->caption_buffer, MAX_LINELENGTH ); } GType value_get_type( void ) { static GType type = 0; if( !type ) { static const GTypeInfo info = { sizeof( ValueClass ), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) value_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof( Value ), 32, /* n_preallocs */ (GInstanceInitFunc) value_init, }; type = g_type_register_static( TYPE_CLASSMODEL, "Value", &info, 0 ); } return( type ); } nip2-8.7.0/src/fontname.h0000644000175000017500000000272113224651032012066 00000000000000/* a fontname in a workspace */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_FONTNAME (fontname_get_type()) #define FONTNAME( obj ) (GTK_CHECK_CAST( (obj), TYPE_FONTNAME, Fontname )) #define FONTNAME_CLASS( klass ) \ (GTK_CHECK_CLASS_CAST( (klass), TYPE_FONTNAME, FontnameClass )) #define IS_FONTNAME( obj ) (GTK_CHECK_TYPE( (obj), TYPE_FONTNAME )) #define IS_FONTNAME_CLASS( klass ) \ (GTK_CHECK_CLASS_TYPE( (klass), TYPE_FONTNAME )) typedef struct _Fontname { Classmodel model; char *value; } Fontname; typedef struct _FontnameClass { ClassmodelClass parent_class; /* My methods. */ } FontnameClass; GType fontname_get_type( void ); nip2-8.7.0/src/column.h0000644000175000017500000000530613224651032011556 00000000000000/* a column in a workspace */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_COLUMN (column_get_type()) #define COLUMN( obj ) \ (G_TYPE_CHECK_INSTANCE_CAST( (obj), TYPE_COLUMN, Column )) #define COLUMN_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_CAST( (klass), TYPE_COLUMN, ColumnClass)) #define IS_COLUMN( obj ) \ (G_TYPE_CHECK_INSTANCE_TYPE( (obj), TYPE_COLUMN )) #define IS_COLUMN_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_TYPE( (klass), TYPE_COLUMN )) #define COLUMN_GET_CLASS( obj ) \ (G_TYPE_INSTANCE_GET_CLASS( (obj), TYPE_COLUMN, ColumnClass )) struct _Column { Filemodel parent_object; /* Our context. */ Subcolumn *scol; /* Subcolumn we enclose */ Workspace *ws; /* Enclosing workspace */ /* Appearance state info. */ int x, y; /* Position */ gboolean open; /* Currently popped down */ gboolean selected; /* Other state. */ int next; /* Index of next symbol we make */ Row *last_select; /* Last row clicked ... for x sel */ /* A pending scrollto. */ guint scrollto_timeout; ModelScrollPosition pending_position; }; typedef struct _ColumnClass { FilemodelClass parent_class; /* My methods. */ } ColumnClass; void *column_map( Column *col, row_map_fn fn, void *a, void *b ); void *column_map_symbol( Column *col, symbol_map_fn fn, void *a ); void *column_select_symbols( Column *col ); GtkType column_get_type( void ); Column *column_new( Workspace *ws, const char *name ); Column *column_get_last_new( void ); void column_clear_last_new( void ); Row *column_get_bottom( Column *col ); gboolean column_add_n_names( Column *col, const char *name, VipsBuf *buf, int nparam ); gboolean column_is_empty( Column *col ); void column_set_offset( int x_off, int y_off ); char *column_name_new( Column *col ); void column_set_open( Column *col, gboolean open ); void column_scrollto( Column *col, ModelScrollPosition position ); nip2-8.7.0/src/util.c0000644000175000017500000015260713224651032011240 00000000000000/* Some basic util functions. */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ /* Handy for tracing errors. #define DEBUG_ERROR */ /* Prettyprint xml save files. FIXME ... slight mem leak, and save files are much larger ... but leave it on for convenience */ #define DEBUG_SAVEFILE #include "ip.h" /* Track errors messages in this thing. We keep two messages: a principal * error, and extra informative text. For example "Unable to load file.", * "Read failed for file blah, permission denied.". */ static char error_top_text[MAX_STRSIZE]; static char error_sub_text[MAX_STRSIZE]; VipsBuf error_top_buf = VIPS_BUF_STATIC( error_top_text ); VipsBuf error_sub_buf = VIPS_BUF_STATIC( error_sub_text ); /* Useful: Error message and quit. Emergencies only ... we don't tidy up * properly. */ void error( const char *fmt, ... ) { va_list args; fprintf( stderr, IP_NAME ": " ); va_start( args, fmt ); (void) vfprintf( stderr, fmt, args ); va_end( args ); fprintf( stderr, "\n" ); #ifdef DEBUG /* Make a coredump. */ abort(); #endif /*DEBUG*/ exit( 1 ); } /* Set this to block error messages. Useful if we've found an error, we want * to clean up, but we don't want any of the clean-up code to touch the error * buffer. */ static int error_level = 0; void error_block( void ) { error_level++; } void error_unblock( void ) { g_assert( error_level ); error_level--; } /* Set an error buffer. */ static void error_set( VipsBuf *buf, const char *fmt, va_list ap ) { if( !error_level ) { char txt[MAX_STRSIZE]; VipsBuf tmp = VIPS_BUF_STATIC( txt ); /* The string we write may contain itself ... write to an * intermediate, then copy to main. */ vips_buf_vappendf( &tmp, fmt, ap ); vips_buf_rewind( buf ); (void) vips_buf_appends( buf, vips_buf_all( &tmp ) ); #ifdef DEBUG_ERROR printf( "error: %p %s\n", buf, vips_buf_all( buf ) ); #endif /*DEBUG_ERROR*/ } } void error_clear_nip( void ) { if( !error_level ) { vips_buf_rewind( &error_top_buf ); vips_buf_rewind( &error_sub_buf ); #ifdef DEBUG_ERROR printf( "error_clear_nip\n" ); #endif /*DEBUG_ERROR*/ } } void error_clear( void ) { if( !error_level ) { error_clear_nip(); im_error_clear(); } } void error_top( const char *fmt, ... ) { va_list ap; va_start( ap, fmt ); error_set( &error_top_buf, fmt, ap ); va_end( ap ); /* We could use error_clear_nip() before calling error_set(), but that * fails if the arg to us uses the contents of either error buffer. */ if( !error_level ) vips_buf_rewind( &error_sub_buf ); } void error_sub( const char *fmt, ... ) { va_list ap; va_start( ap, fmt ); error_set( &error_sub_buf, fmt, ap ); va_end( ap ); } /* Append any VIPS errors to sub buffer. */ void error_vips( void ) { if( !error_level && strlen( im_error_buffer() ) > 0 ) { if( !vips_buf_is_empty( &error_sub_buf ) ) (void) vips_buf_appendf( &error_sub_buf, "\n" ); (void) vips_buf_appendf( &error_sub_buf, "%s", im_error_buffer() ); im_error_clear(); } } void error_vips_all( void ) { error_top( _( "VIPS library error." ) ); error_vips(); } const char *error_get_top( void ) { return( vips_buf_all( &error_top_buf ) ); } const char *error_get_sub( void ) { return( vips_buf_all( &error_sub_buf ) ); } /* Set an xml property printf() style. */ gboolean set_prop( xmlNode *xnode, const char *name, const char *fmt, ... ) { va_list ap; char value[MAX_STRSIZE]; va_start( ap, fmt ); (void) im_vsnprintf( value, MAX_STRSIZE, fmt, ap ); va_end( ap ); if( !xmlSetProp( xnode, (xmlChar *) name, (xmlChar *) value ) ) { error_top( _( "Unable to set XML property." ) ); error_sub( _( "Unable to set property \"%s\" " "to value \"%s\"." ), name, value ); return( FALSE ); } return( TRUE ); } /* Set an xml property from an optionally NULL string. */ gboolean set_sprop( xmlNode *xnode, const char *name, const char *value ) { if( value && !set_prop( xnode, name, "%s", value ) ) return( FALSE ); return( TRUE ); } /* Set an xml property from an optionally NULL string. */ gboolean set_iprop( xmlNode *xnode, const char *name, int value ) { return( set_prop( xnode, name, "%d", value ) ); } /* Save a list of strings. For name=="fred" and n strings in list, save as * "fredn" == n, "fred0" == list[0], etc. */ gboolean set_slprop( xmlNode *xnode, const char *name, GSList *labels ) { if( labels ) { char buf[256]; int i; (void) im_snprintf( buf, 256, "%sn", name ); if( !set_prop( xnode, buf, "%d", g_slist_length( labels ) ) ) return( FALSE ); for( i = 0; labels; i++, labels = labels->next ) { const char *label = (const char *) labels->data; (void) im_snprintf( buf, 256, "%s%d", name, i ); if( !set_sprop( xnode, buf, label ) ) return( FALSE ); } } return( TRUE ); } /* Set a double ... use non-localisable conversion, rather than %g. */ gboolean set_dprop( xmlNode *xnode, const char *name, double value ) { char buf[G_ASCII_DTOSTR_BUF_SIZE]; g_ascii_dtostr( buf, sizeof( buf ), value ); return( set_sprop( xnode, name, buf ) ); } /* Save an array of double. For name=="fred" and n doubles in array, save as * "fredn" == n, "fred0" == array[0], etc. */ gboolean set_dlprop( xmlNode *xnode, const char *name, double *values, int n ) { char buf[256]; int i; (void) im_snprintf( buf, 256, "%sn", name ); if( !set_prop( xnode, buf, "%d", n ) ) return( FALSE ); for( i = 0; i < n; i++ ) { (void) im_snprintf( buf, 256, "%s%d", name, i ); if( !set_dprop( xnode, buf, values[i] ) ) return( FALSE ); } return( TRUE ); } gboolean get_sprop( xmlNode *xnode, const char *name, char *buf, int sz ) { char *value = (char *) xmlGetProp( xnode, (xmlChar *) name ); if( !value ) return( FALSE ); im_strncpy( buf, value, sz ); IM_FREEF( xmlFree, value ); return( TRUE ); } gboolean get_spropb( xmlNode *xnode, const char *name, VipsBuf *buf ) { char *value = (char *) xmlGetProp( xnode, (xmlChar *) name ); if( !value ) return( FALSE ); vips_buf_appends( buf, value ); IM_FREEF( xmlFree, value ); return( TRUE ); } gboolean get_iprop( xmlNode *xnode, const char *name, int *out ) { char buf[256]; if( !get_sprop( xnode, name, buf, 256 ) ) return( FALSE ); *out = atoi( buf ); return( TRUE ); } gboolean get_dprop( xmlNode *xnode, const char *name, double *out ) { char buf[256]; if( !get_sprop( xnode, name, buf, 256 ) ) return( FALSE ); *out = g_ascii_strtod( buf, NULL ); return( TRUE ); } gboolean get_bprop( xmlNode *xnode, const char *name, gboolean *out ) { char buf[256]; if( !get_sprop( xnode, name, buf, 256 ) ) return( FALSE ); *out = strcasecmp( buf, "true" ) == 0; return( TRUE ); } /* Load a list of strings. For name=="fred", look for "fredn" == number of * strings to load, "fred0" == list[0], etc. */ gboolean get_slprop( xmlNode *xnode, const char *name, GSList **out ) { char buf[256]; int n, i; (void) im_snprintf( buf, 256, "%sn", name ); if( !get_iprop( xnode, buf, &n ) ) return( FALSE ); *out = NULL; for( i = n - 1; i >= 0; i-- ) { (void) im_snprintf( buf, 256, "%s%d", name, i ); if( !get_sprop( xnode, buf, buf, 256 ) ) return( FALSE ); *out = g_slist_prepend( *out, g_strdup( buf ) ); } return( TRUE ); } /* Load an array of double. For name=="fred", look for "fredn" == length of * array, "fred0" == array[0], etc. */ gboolean get_dlprop( xmlNode *xnode, const char *name, double **out ) { char buf[256]; int n, i; (void) im_snprintf( buf, 256, "%sn", name ); if( !get_iprop( xnode, buf, &n ) ) return( FALSE ); if( !(*out = IARRAY( NULL, n, double )) ) return( FALSE ); for( i = 0; i < n; i++ ) { (void) im_snprintf( buf, 256, "%s%d", name, i ); if( !get_dprop( xnode, buf, *out + i ) ) return( FALSE ); } return( TRUE ); } /* Find the first child node with a name. */ xmlNode * get_node( xmlNode *base, const char *name ) { xmlNode *i; for( i = base->children; i; i = i->next ) if( strcmp( (char *) i->name, name ) == 0 ) return( i ); return( NULL ); } static int rect_n_rects = 0; /* Allocate and free rects. */ Rect * rect_dup( Rect *init ) { Rect *new_rect; if( !(new_rect = INEW( NULL, Rect )) ) return( NULL ); *new_rect = *init; rect_n_rects += 1; return( new_rect ); } void * rect_free( Rect *rect ) { im_free( rect ); rect_n_rects -= 1; return( NULL ); } /* Test two lists for eqality. */ gboolean slist_equal( GSList *l1, GSList *l2 ) { while( l1 && l2 ) { if( l1->data != l2->data ) return( FALSE ); l1 = l1->next; l2 = l2->next; } if( l1 || l2 ) return( FALSE ); return( TRUE ); } /* Map over an slist. */ void * slist_map( GSList *list, SListMapFn fn, gpointer a ) { GSList *copy; GSList *i; void *result; copy = g_slist_copy( list ); result = NULL; for( i = copy; i && !(result = fn( i->data, a )); i = i->next ) ; g_slist_free( copy ); return( result ); } void * slist_map2( GSList *list, SListMap2Fn fn, gpointer a, gpointer b ) { GSList *copy; GSList *i; void *result; copy = g_slist_copy( list ); result = NULL; for( i = copy; i && !(result = fn( i->data, a, b )); i = i->next ) ; g_slist_free( copy ); return( result ); } void * slist_map3( GSList *list, SListMap3Fn fn, gpointer a, gpointer b, gpointer c ) { GSList *copy; GSList *i; void *result; copy = g_slist_copy( list ); result = NULL; for( i = copy; i && !(result = fn( i->data, a, b, c )); i = i->next ) ; g_slist_free( copy ); return( result ); } void * slist_map4( GSList *list, SListMap4Fn fn, gpointer a, gpointer b, gpointer c, gpointer d ) { GSList *copy; GSList *i; void *result; copy = g_slist_copy( list ); result = NULL; for( i = copy; i && !(result = fn( i->data, a, b, c, d )); i = i->next ) ; g_slist_free( copy ); return( result ); } void * slist_map5( GSList *list, SListMap5Fn fn, gpointer a, gpointer b, gpointer c, gpointer d, gpointer e ) { GSList *copy; GSList *i; void *result; copy = g_slist_copy( list ); result = NULL; for( i = copy; i && !(result = fn( i->data, a, b, c, d, e )); i = i->next ) ; g_slist_free( copy ); return( result ); } /* Map backwards. */ void * slist_map_rev( GSList *list, SListMapFn fn, gpointer a ) { GSList *copy; GSList *i; void *result; copy = g_slist_copy( list ); copy = g_slist_reverse( copy ); result = NULL; for( i = copy; i && !(result = fn( i->data, a )); i = i->next ) ; g_slist_free( copy ); return( result ); } void * slist_map2_rev( GSList *list, SListMap2Fn fn, gpointer a, gpointer b ) { GSList *copy; GSList *i; void *result; copy = g_slist_copy( list ); copy = g_slist_reverse( copy ); result = NULL; for( i = copy; i && !(result = fn( i->data, a, b )); i = i->next ) ; g_slist_free( copy ); return( result ); } void * slist_map3_rev( GSList *list, SListMap3Fn fn, void *a, void *b, void *c ) { GSList *copy; GSList *i; void *result; copy = g_slist_copy( list ); copy = g_slist_reverse( copy ); result = NULL; for( i = copy; i && !(result = fn( i->data, a, b, c )); i = i->next ) ; g_slist_free( copy ); return( result ); } void * map_equal( void *a, void *b ) { if( a == b ) return( a ); return( NULL ); } void * slist_fold( GSList *list, void *start, SListFoldFn fn, void *a ) { void *c; GSList *ths, *next; for( c = start, ths = list; ths; ths = next ) { next = ths->next; if( !(c = fn( ths->data, c, a )) ) return( NULL ); } return( c ); } void * slist_fold2( GSList *list, void *start, SListFold2Fn fn, void *a, void *b ) { void *c; GSList *ths, *next; for( c = start, ths = list; ths; ths = next ) { next = ths->next; if( !(c = fn( ths->data, c, a, b )) ) return( NULL ); } return( c ); } static void slist_free_all_cb( gpointer thing, gpointer dummy ) { g_free( thing ); } /* Free a g_slist of things which need g_free()ing. */ void slist_free_all( GSList *list ) { g_slist_foreach( list, slist_free_all_cb, NULL ); g_slist_free( list ); } /* Remove all occurences of an item from a list. */ GSList * slist_remove_all( GSList *list, gpointer data ) { GSList *tmp; GSList *prev; prev = NULL; tmp = list; while( tmp ) { if( tmp->data == data ) { GSList *next = tmp->next; if( prev ) prev->next = next; if( list == tmp ) list = next; tmp->next = NULL; g_slist_free( tmp ); tmp = next; } else { prev = tmp; tmp = tmp->next; } } return( list ); } Queue * queue_new( void ) { Queue *q = INEW( NULL, Queue ); q->list = NULL; q->tail = NULL; q->length = 0; return( q ); } void * queue_head( Queue *q ) { void *data; g_assert( q ); if( !q->list ) return( NULL ); data = q->list->data; q->list = g_slist_remove( q->list, data ); if( !q->list ) q->tail = NULL; q->length -= 1; return( data ); } void queue_add( Queue *q, void *data ) { if( !q->tail ) { g_assert( !q->list ); q->list = q->tail = g_slist_append( q->list, data ); } else { g_assert( q->list ); q->tail = g_slist_append( q->tail, data ); q->tail = q->tail->next; } q->length += 1; } /* Not very fast! But used infrequently. TRUE if the data was in the queue and * has now been removed. */ gboolean queue_remove( Queue *q, void *data ) { GSList *ele; if( !(ele = g_slist_find( q->list, data )) ) return( FALSE ); q->list = g_slist_remove( q->list, data ); if( ele == q->tail ) q->tail = g_slist_last( q->list ); q->length -= 1; return( TRUE ); } int queue_length( Queue *q ) { return( q->length ); } /* Make an info string about an image. */ void vips_buf_appendi( VipsBuf *buf, IMAGE *im ) { if( !im ) { vips_buf_appends( buf, _( "(no image)" ) ); return; } /* Coded? Special warning. */ if( im->Coding != IM_CODING_NONE ) vips_buf_appendf( buf, "%s, ", NN( im_Coding2char( im->Coding ) ) ); /* Format string expands to (eg.) * "2000x3000 128-bit complex, 3 bands, Lab" */ vips_buf_appendf( buf, ngettext( "%dx%d %s, %d band, %s", "%dx%d %s, %d bands, %s", im->Bands ), im->Xsize, im->Ysize, decode_bandfmt( im->BandFmt ), im->Bands, decode_type( im->Type ) ); } /* Append a string, escaping C stuff. Escape double quotes if quote is set. */ gboolean vips_buf_appendsc( VipsBuf *buf, gboolean quote, const char *str ) { char buffer[FILENAME_MAX]; char buffer2[FILENAME_MAX]; /* /2 to leave a bit of space. */ im_strncpy( buffer, str, FILENAME_MAX / 2 ); /* FIXME ... possible buffer overflow :-( */ my_strecpy( buffer2, buffer, quote ); return( vips_buf_appends( buf, buffer2 ) ); } /* Test for string a ends string b. */ gboolean is_postfix( const char *a, const char *b ) { int n = strlen( a ); int m = strlen( b ); if( m < n ) return( FALSE ); return( !strcmp( a, b + m - n ) ); } /* Test for string a ends string b, case independent. */ gboolean is_casepostfix( const char *a, const char *b ) { int n = strlen( a ); int m = strlen( b ); if( m < n ) return( FALSE ); return( !strcasecmp( a, b + m - n ) ); } /* Test for string a starts string b. */ gboolean is_prefix( const char *a, const char *b ) { int n = strlen( a ); int m = strlen( b ); int i; if( m < n ) return( FALSE ); for( i = 0; i < n; i++ ) if( a[i] != b[i] ) return( FALSE ); return( TRUE ); } /* Test for string a starts string b ... case insensitive. */ gboolean is_caseprefix( const char *a, const char *b ) { int n = strlen( a ); int m = strlen( b ); int i; if( m < n ) return( FALSE ); for( i = 0; i < n; i++ ) if( toupper( a[i] ) != toupper( b[i] ) ) return( FALSE ); return( TRUE ); } /* Like strstr(), but case-insensitive. */ char * my_strcasestr( const char *haystack, const char *needle ) { int i; int hlen = strlen( haystack ); int nlen = strlen( needle ); for( i = 0; i <= hlen - nlen; i++ ) if( is_caseprefix( needle, haystack + i ) ) return( (char *) (haystack + i) ); return( NULL ); } /* Copy a string, interpreting (a few) C-language escape codes. FIXME ... yuk! dangerous and not that useful, needs a proper function to do this */ char * my_strccpy( char *output, const char *input ) { const char *p; char *q; for( p = input, q = output; *p; p++, q++ ) if( p[0] == '\\' ) { switch( p[1] ) { case 'n': q[0] = '\n'; break; case 't': q[0] = '\t'; break; case 'r': q[0] = '\r'; break; case '"': q[0] = '\"'; break; case '\'': q[0] = '\''; break; case '\\': q[0] = '\\'; break; default: /* Leave uninterpreted. */ q[0] = p[0]; q[1] = p[1]; q++; break; } p++; } else q[0] = p[0]; q[0] = '\0'; return( output ); } /* Copy a string, expanding escape characters into C-language escape codes. * Escape double quotes if quote is set. */ char * my_strecpy( char *output, const char *input, gboolean quote ) { const char *p; char *q; for( p = input, q = output; *p; p++, q++ ) switch( p[0] ) { case '\n': q[0] = '\\'; q[1] = 'n'; q++; break; case '\t': q[0] = '\\'; q[1] = 't'; q++; break; case '\r': q[0] = '\\'; q[1] = 'r'; q++; break; case '\"': if( quote ) { q[0] = '\\'; q[1] = '\"'; q++; } else q[0] = p[0]; break; case '\'': q[0] = '\\'; q[1] = '\''; q++; break; case '\\': q[0] = '\\'; q[1] = '\\'; q++; break; default: q[0] = p[0]; break; } q[0] = '\0'; return( output ); } /* Is a character in a string? */ static int instr( char c, const char *spn ) { const char *p; for( p = spn; *p; p++ ) if( *p == c ) return( 1 ); return( 0 ); } /* Doh ... not everyone has strrspn(), define one. Return a pointer to the * start of the trailing segment of p which contains only chars in spn. */ const char * my_strrspn( const char *p, const char *spn ) { const char *p1; for( p1 = p + strlen( p ) - 1; p1 >= p && instr( *p1, spn ); p1-- ) ; p1++; return( p1 ); } /* Find a pointer to the start of the trailing segment of p which contains * only chars not in spn. */ const char * my_strrcspn( const char *p, const char *spn ) { const char *p1; for( p1 = p + strlen( p ) - 1; p1 >= p && !instr( *p1, spn ); p1-- ) ; p1++; return( p1 ); } /* Find the rightmost occurence of string a in string b. */ const char * findrightmost( const char *a, const char *b ) { int la = strlen( a ); int lb = strlen( b ); int i; if( lb < la ) return( NULL ); for( i = lb - la; i > 0; i-- ) if( strncmp( a, &b[i], la ) == 0 ) return( &b[i] ); return( NULL ); } /* Useful transformation: strip off a set of suffixes (eg. ".v", ".icon", * ".hr"), add a single new suffix (eg. ".hr.v"). */ void change_suffix( const char *name, char *out, const char *new, const char **olds, int nolds ) { char *p; int i; /* Copy start string. */ strcpy( out, name ); /* Drop all matching suffixes. */ while( (p = strrchr( out, '.' )) ) { /* Found suffix - test against list of alternatives. Ignore * case. */ for( i = 0; i < nolds; i++ ) if( strcasecmp( p, olds[i] ) == 0 ) { *p = '\0'; break; } /* Found match? If not, break from loop. */ if( *p ) break; } /* Add new suffix. */ strcat( out, new ); } /* Drop leading and trim trailing non-alphanum characters. NULL if nothing * left. The result can be a variable name. */ char * trim_nonalpha( char *text ) { char *p, *q; /* Skip any initial non-alpha characters. */ for( q = text; *q && !isalpha( (int)(*q) ); q++ ) ; /* Find next non-alphanumeric character. */ for( p = q; *p && isalnum( (int)(*p) ); p++ ) ; *p = '\0'; if( strlen( q ) == 0 ) return( NULL ); else return( q ); } /* Drop leading and trim trailing whitespace characters. NULL if nothing * left. */ char * trim_white( char *text ) { char *p, *q; /* Skip any initial whitespace characters. */ for( q = text; *q && isspace( (int)(*q) ); q++ ) ; /* Find rightmost non-space char. */ for( p = q + strlen( q ) - 1; p > q && isspace( (int)(*p) ); p-- ) ; p[1] = '\0'; if( strlen( q ) == 0 ) return( NULL ); else return( q ); } /* Get a pointer to a band element in a region. */ void * get_element( REGION *ireg, int x, int y, int b ) { IMAGE *im = ireg->im; /* Return a pointer to this on error. */ static PEL empty[50] = { 0 }; PEL *data; int es = IM_IMAGE_SIZEOF_ELEMENT( im ); Rect iarea; /* Make sure we can read from this descriptor. */ if( im_pincheck( im ) ) /* Help! */ return( empty ); /* Ask for the area we need. */ iarea.left = x; iarea.top = y; iarea.width = 1; iarea.height = 1; if( im_prepare( ireg, &iarea ) ) return( empty ); /* Find a pointer to the start of the data. */ data = (PEL *) IM_REGION_ADDR( ireg, x, y ) + b * es; return( (void *) data ); } /* Decode band formats in a friendly way. */ static const char *bandfmt_names[] = { N_( "8-bit unsigned integer" ), /* IM_BANDFMT_UCHAR */ N_( "8-bit signed integer" ), /* IM_BANDFMT_CHAR */ N_( "16-bit unsigned integer" ),/* IM_BANDFMT_USHORT */ N_( "16-bit signed integer" ), /* IM_BANDFMT_SHORT */ N_( "32-bit unsigned integer" ),/* IM_BANDFMT_UINT */ N_( "32-bit signed integer" ), /* IM_BANDFMT_INT */ N_( "32-bit float" ), /* IM_BANDFMT_FLOAT */ N_( "64-bit complex" ), /* IM_BANDFMT_COMPLEX */ N_( "64-bit float" ), /* IM_BANDFMT_DOUBLE */ N_( "128-bit complex" ) /* IM_BANDFMT_DPCOMPLEX */ }; static const int nbandfmt_names = IM_NUMBER( bandfmt_names ); const char * decode_bandfmt( int f ) { if( f > nbandfmt_names - 1 || f < 0 ) return( _( "" ) ); else return( _( bandfmt_names[f] ) ); } /* Decode type names in a way consistent with the menus. */ static const char *type_names[] = { "multiband", /* IM_TYPE_MULTIBAND 0 */ "mono", /* IM_TYPE_B_W 1 */ "luminance", /* LUMINACE 2 */ "xray", /* XRAY 3 */ "infrared", /* IR 4 */ "Yuv", /* YUV 5 */ "red_only", /* RED_ONLY 6 */ "green_only", /* GREEN_ONLY 7 */ "blue_only", /* BLUE_ONLY 8 */ "power_spectrum", /* POWER_SPECTRUM 9 */ "histogram", /* IM_TYPE_HISTOGRAM 10 */ "lookup_table", /* LUT 11 */ "XYZ", /* IM_TYPE_XYZ 12 */ "Lab", /* IM_TYPE_LAB 13 */ "CMC", /* CMC 14 */ "CMYK", /* IM_TYPE_CMYK 15 */ "LabQ", /* IM_TYPE_LABQ 16 */ "RGB", /* IM_TYPE_RGB 17 */ "UCS", /* IM_TYPE_UCS 18 */ "LCh", /* IM_TYPE_LCH 19 */ "", /* ?? 20 */ "LabS", /* IM_TYPE_LABS 21 */ "sRGB", /* IM_TYPE_sRGB 22 */ "Yxy", /* IM_TYPE_YXY 23 */ "Fourier", /* IM_TYPE_FOURIER 24 */ "RGB16", /* IM_TYPE_RGB16 25 */ "GREY16", /* IM_TYPE_GREY16 26 */ "Array", /* VIPS_INTERPRETATION_ARRAY = 27 */ "scRGB" /* VIPS_INTERPRETATION_scRGB = 28 */ }; static const int ntype_names = IM_NUMBER( type_names ); const char * decode_type( int t ) { if( t > ntype_names - 1 || t < 0 ) return( _( "" ) ); else return( type_names[t] ); } /* Make an info string about a file. */ void get_image_info( VipsBuf *buf, const char *name ) { char name2[FILENAME_MAX]; struct stat st; expand_variables( name, name2 ); vips_buf_appendf( buf, "%s, ", im_skip_dir( name ) ); /* Read size and file/dir. */ if( stat( name2, &st ) == -1 ) { vips_buf_appendf( buf, "%s", g_strerror( errno ) ); return; } if( S_ISDIR( st.st_mode ) ) vips_buf_appends( buf, _( "directory" ) ); else if( S_ISREG( st.st_mode ) ) { IMAGE *im; /* Spot workspace files from the filename. These are XML files * and if imagemagick sees them it'll try to load them as SVG * or somethiing awful like that. */ if( is_file_type( &filesel_wfile_type, name2 ) ) { vips_buf_appends( buf, _( "workspace" ) ); } else if( (im = im_open( name2, "r" )) ) { vips_buf_appendi( buf, im ); im_close( im ); } else /* No idea wtf this is, just put the size in. */ vips_buf_append_size( buf, st.st_size ); } } /* A char that can be part of an environment variable name? A-Za-z0-9_ */ static gboolean isvariable( int ch ) { return( isalnum( ch ) || ch == '_' ); } /* Expand environment variables from in to out. Return true if we performed an * expansion, false for no variables there. */ static gboolean expand_once( char *in, char *out ) { char *p, *q; gboolean have_substituted = FALSE; /* Scan and copy. */ for( p = in, q = out; (*q = *p) && (q - out) < FILENAME_MAX; p++, q++ ) /* Did we just copy a '$'? */ if( *p == '$' ) { char vname[FILENAME_MAX]; char *r; const char *subst; const char *s; /* Extract the variable name. */ p++; for( r = vname; isvariable( (int)(*r = *p) ) && (r - vname) < FILENAME_MAX; p++, r++ ) ; *r = '\0'; p--; /* Look up variable. */ subst = g_getenv( vname ); /* Copy variable contents. */ if( subst ) { for( s = subst; (*q = *s) && (q - out) < FILENAME_MAX; s++, q++ ) ; } q--; /* Remember we have performed a substitution. */ have_substituted = TRUE; } /* Or a '~' at the start of the string? */ else if( *p == '~' && p == in ) { const char *subst = g_getenv( "HOME" ); const char *r; /* Copy variable contents. */ if( subst ) { for( r = subst; (*q = *r) && (q - out) < FILENAME_MAX; r++, q++ ) ; } q--; /* Remember we have performed a substitution. */ have_substituted = TRUE; } return( have_substituted ); } /* Expand all variables! Don't touch in, assume out[] is at least * FILENAME_MAX bytes. in and out must not point to the same place! */ void expand_variables( const char *in, char *out ) { char buf[FILENAME_MAX]; char *p1 = (char *) in; /* Discard const, but safe */ char *p2 = out; g_assert( in != out ); /* Expand any environment variables in component. */ while( expand_once( p1, p2 ) ) /* We have expanded --- swap the buffers and try * again. */ if( p2 == out ) { p1 = out; p2 = buf; } else { p1 = buf; p2 = out; } } static void swap_chars( char *buf, char from, char to ) { int i; for( i = 0; buf[i]; i++ ) if( buf[i] == from ) buf[i] = to; } /* If we use '/' seps, swap all '\' for '/' ... likewise vice versa. Only in * the filename part, though. We don't want to junk '\,', for example. */ void nativeize_path( char *buf ) { char filename[FILENAME_MAX]; char mode[FILENAME_MAX]; im_filename_split( buf, filename, mode ); if( G_DIR_SEPARATOR == '/' ) swap_chars( filename, '\\', '/' ); else swap_chars( filename, '/', '\\' ); if( strcmp( mode, "" ) != 0 ) im_snprintf( buf, FILENAME_MAX, "%s:%s", filename, mode ); else im_snprintf( buf, FILENAME_MAX, "%s", filename ); } /* Change all occurences of "from" into "to". This will loop if "to" contains * "from", beware. */ static void swap_string( char *buffer, const char *from, const char *to ) { char *p; while( (p = strstr( buffer, from )) ) { int off = p - buffer; char buf2[FILENAME_MAX]; im_strncpy( buf2, buffer, FILENAME_MAX ); buf2[off] = '\0'; im_snprintf( buffer, FILENAME_MAX, "%s%s%s", buf2, to, buf2 + off + strlen( from ) ); } } /* Remove "." and ".." from an absolute path (if we can). */ void canonicalize_path( char *path ) { gboolean found; g_assert( is_absolute( path ) ); /* Any "/./" can go. */ swap_string( path, G_DIR_SEPARATOR_S "." G_DIR_SEPARATOR_S, G_DIR_SEPARATOR_S ); /* Any "//" can go. */ swap_string( path, G_DIR_SEPARATOR_S G_DIR_SEPARATOR_S, G_DIR_SEPARATOR_S ); /* Repeatedly search for "/[^/]+/../" and remove it. FIXME ... yuk, should search backwards from the end of the string */ do { char *p; found = FALSE; for( p = path; (p = strchr( p, G_DIR_SEPARATOR )); p++ ) { char *q; q = strchr( p + 1, G_DIR_SEPARATOR ); if( q && is_prefix( G_DIR_SEPARATOR_S "..", q ) ) { memmove( p, q + 3, strlen( q + 3 ) + 1 ); found = TRUE; break; } } } while( found ); /* We may have the empty string ... that's just '/'. */ if( strcmp( path, "" ) == 0 ) strcpy( path, G_DIR_SEPARATOR_S ); } /* Absoluteize a path. Must be FILENAME_MAX chars available. */ void absoluteize_path( char *path ) { if( !is_absolute( path ) ) { char buf[FILENAME_MAX]; char *cwd; im_strncpy( buf, path, FILENAME_MAX ); cwd = g_get_current_dir(); im_snprintf( path, FILENAME_MAX, "%s%s%s", cwd, G_DIR_SEPARATOR_S, buf ); g_free( cwd ); canonicalize_path( path ); } } /* Call a void*-valued function, building a string arg. We expand env. * variables, but that's all. */ void * callv_string( callv_string_fn fn, const char *arg, void *a, void *b, void *c ) { char buf[FILENAME_MAX]; expand_variables( arg, buf ); return( fn( buf, a, b, c ) ); } void * callv_stringva( callv_string_fn fn, const char *fmt, va_list ap, void *a, void *b, void *c ) { char buf[FILENAME_MAX]; (void) im_vsnprintf( buf, FILENAME_MAX, fmt, ap ); return( callv_string( fn, buf, a, b, c ) ); } void * callv_stringf( callv_string_fn fn, const char *fmt, ... ) { va_list ap; void *res; va_start( ap, fmt ); res = callv_stringva( fn, fmt, ap, NULL, NULL, NULL ); va_end( ap ); return( res ); } /* Call a function, building a filename arg. Nativize and absoluteize too. */ void * callv_string_filename( callv_string_fn fn, const char *filename, void *a, void *b, void *c ) { char buf[FILENAME_MAX]; expand_variables( filename, buf ); nativeize_path( buf ); absoluteize_path( buf ); return( fn( buf, a, b, c ) ); } void * callv_string_filenameva( callv_string_fn fn, const char *fmt, va_list ap, void *a, void *b, void *c ) { char buf[FILENAME_MAX]; (void) im_vsnprintf( buf, FILENAME_MAX, fmt, ap ); return( callv_string_filename( fn, buf, a, b, c ) ); } void * callv_string_filenamef( callv_string_fn fn, const char *fmt, ... ) { va_list ap; void *res; va_start( ap, fmt ); res = callv_string_filenameva( fn, fmt, ap, NULL, NULL, NULL ); va_end( ap ); return( res ); } /* Call an int-valued function, building a string arg. We expand env. * variables, but that's all. */ int calli_string( calli_string_fn fn, const char *arg, void *a, void *b, void *c ) { char buf[FILENAME_MAX]; expand_variables( arg, buf ); return( fn( buf, a, b, c ) ); } int calli_stringva( calli_string_fn fn, const char *fmt, va_list ap, void *a, void *b, void *c ) { char buf[FILENAME_MAX]; (void) im_vsnprintf( buf, FILENAME_MAX, fmt, ap ); return( calli_string( fn, buf, a, b, c ) ); } int calli_stringf( calli_string_fn fn, const char *fmt, ... ) { va_list ap; int res; va_start( ap, fmt ); res = calli_stringva( fn, fmt, ap, NULL, NULL, NULL ); va_end( ap ); return( res ); } /* Call a function, building a filename arg. Nativize and absoluteize too. */ int calli_string_filename( calli_string_fn fn, const char *filename, void *a, void *b, void *c ) { char buf[FILENAME_MAX]; expand_variables( filename, buf ); nativeize_path( buf ); absoluteize_path( buf ); return( fn( buf, a, b, c ) ); } int calli_string_filenameva( calli_string_fn fn, const char *fmt, va_list ap, void *a, void *b, void *c ) { char buf[FILENAME_MAX]; (void) im_vsnprintf( buf, FILENAME_MAX, fmt, ap ); return( calli_string_filename( fn, buf, a, b, c ) ); } int calli_string_filenamef( calli_string_fn fn, const char *fmt, ... ) { va_list ap; int res; va_start( ap, fmt ); res = calli_string_filenameva( fn, fmt, ap, NULL, NULL, NULL ); va_end( ap ); return( res ); } /* Convert a filename to utf8 ... g_free the result. */ char * f2utf8( const char *filename ) { char *utf8; if( !(utf8 = g_filename_to_utf8( filename, -1, NULL, NULL, NULL )) ) utf8 = g_strdup( _( "" ) ); return( utf8 ); } void setenvf( const char *name, const char *fmt, ... ) { va_list ap; char buf[FILENAME_MAX]; va_start( ap, fmt ); (void) im_vsnprintf( buf, FILENAME_MAX, fmt, ap ); va_end( ap ); g_setenv( name, buf, TRUE ); } int check( const char *filename ) { /* Need to work on filenames containing %. */ return( im_existsf( "%s", filename ) ); } /* File exists? */ gboolean existsf( const char *name, ... ) { va_list ap; gboolean res; va_start( ap, name ); res = calli_string_filenameva( (calli_string_fn) check, name, ap, NULL, NULL, NULL ); va_end( ap ); return( res ); } int isdir_sub( const char *filename ) { struct stat st; /* Read size and file/dir. */ if( stat( filename, &st ) == -1 ) return( FALSE ); if( !S_ISDIR( st.st_mode ) ) return( FALSE ); return( TRUE ); } gboolean isdir( const char *filename, ... ) { va_list ap; gboolean res; va_start( ap, filename ); res = calli_string_filenameva( (calli_string_fn) isdir_sub, filename, ap, NULL, NULL, NULL ); va_end( ap ); return( res ); } static void * mtime_sub( const char *filename, time_t *time ) { struct stat st; if( stat( filename, &st ) == -1 ) return( NULL ); #ifdef HAVE_GETEUID if( st.st_uid != geteuid() ) return( NULL ); #endif /*HAVE_GETEUID*/ *time = st.st_mtime; return( NULL ); } time_t mtime( const char *filename, ... ) { va_list ap; time_t time; time = 0; va_start( ap, filename ); (void) callv_string_filenameva( (callv_string_fn) mtime_sub, filename, ap, &time, NULL, NULL ); va_end( ap ); return( time ); } gboolean mkdirf( const char *name, ... ) { va_list ap; gboolean res; va_start( ap, name ); res = calli_string_filenameva( (calli_string_fn) g_mkdir, name, ap, GINT_TO_POINTER( 0755 ), NULL, NULL ) == 0; va_end( ap ); return( res ); } /* system(), with printf() args and $xxx expansion. */ int systemf( const char *fmt, ... ) { va_list ap; int res; va_start( ap, fmt ); res = calli_stringva( (calli_string_fn) system, fmt, ap, NULL, NULL, NULL ); va_end( ap ); return( res ); } gboolean touchf( const char *fmt, ... ) { va_list ap; int fd; va_start( ap, fmt ); fd = calli_string_filenameva( (calli_string_fn) creat, fmt, ap, GINT_TO_POINTER( S_IRUSR | S_IWUSR ), NULL, NULL ); va_end( ap ); (void) close( fd ); return( fd != -1 ); } int unlinkf( const char *fmt, ... ) { va_list ap; int res; va_start( ap, fmt ); res = calli_string_filenameva( (calli_string_fn) unlink, fmt, ap, NULL, NULL, NULL ); va_end( ap ); return( res ); } /* Relative or absolute dir path? Have to expand env vars to see. */ gboolean is_absolute( const char *fname ) { char buf[FILENAME_MAX]; expand_variables( fname, buf ); nativeize_path( buf ); /* We can't use g_path_is_absolute(), we might be given a Windows path * including a drive specifier, and g_path_is_absolute() on unix does * not know about Windows paths. * * We should probably look out for whitespace. */ if( buf[0] == '/' || (buf[0] != '\0' && buf[1] == ':') ) return( TRUE ); else return( FALSE ); } /* OK filename? Ban ':' characters, they may confuse im_open(). Except on * winders :-( */ gboolean is_valid_filename( const char *name ) { const char *p; if( strlen( name ) > FILENAME_MAX ) { error_top( _( "Bad filename." ) ); error_sub( _( "Filename is too long." ) ); return( FALSE ); } if( (p = im_skip_dir( name )) && strspn( p, WHITESPACE ) == strlen( p ) ) { error_top( _( "Bad filename." ) ); error_sub( _( "Filename contains only blank characters." ) ); return( FALSE ); } return( TRUE ); } /* im_strdup(), with NULL supplied. */ char *im_strdupn( const char *txt ) { return( im_strdup( NULL, txt ) ); } /* Free an iOpenFile. */ void ifile_close( iOpenFile *of ) { IM_FREEF( fclose, of->fp ); IM_FREE( of->fname ); IM_FREE( of->fname_real ); IM_FREE( of ); } /* Make an iOpenFile*. */ static iOpenFile * ifile_build( const char *fname ) { iOpenFile *of; if( !(of = INEW( NULL, iOpenFile )) ) return( NULL ); of->fp = NULL; of->fname = NULL; of->fname_real = NULL; of->last_errno = 0; IM_SETSTR( of->fname, fname ); if( !of->fname ) { ifile_close( of ); return( NULL ); } return( of ); } /* Find and open for read. */ iOpenFile * ifile_open_read( const char *name, ... ) { va_list ap; char buf[FILENAME_MAX]; iOpenFile *of; va_start( ap, name ); (void) im_vsnprintf( buf, FILENAME_MAX, name, ap ); va_end( ap ); of = ifile_build( buf ); if( !of ) return( NULL ); if( !(of->fname_real = path_find_file( of->fname )) ) { error_top( _( "Unable to open." ) ); error_sub( _( "Unable to open file \"%s\" for reading.\n%s." ), of->fname, g_strerror( errno ) ); ifile_close( of ); return( NULL ); } if( !(of->fp = (FILE *) callv_string_filename( (callv_string_fn) fopen, of->fname_real, "r", NULL, NULL )) ) { error_top( _( "Unable to open." ) ); error_sub( _( "Unable to open file \"%s\" for reading.\n%s." ), of->fname_real, g_strerror( errno ) ); ifile_close( of ); return( NULL ); } of->read = TRUE; return( of ); } /* Open stdin for read. */ iOpenFile * ifile_open_read_stdin() { iOpenFile *of; if( !(of = ifile_build( "stdin" )) ) return( NULL ); IM_SETSTR( of->fname_real, of->fname ); if( !of->fname_real ) { ifile_close( of ); return( NULL ); } of->fp = stdin; of->read = TRUE; return( of ); } /* Find and open for write. */ iOpenFile * ifile_open_write( const char *name, ... ) { va_list ap; char buf[FILENAME_MAX]; iOpenFile *of; va_start( ap, name ); (void) im_vsnprintf( buf, FILENAME_MAX, name, ap ); va_end( ap ); of = ifile_build( buf ); if( !of ) return( NULL ); IM_SETSTR( of->fname_real, of->fname ); if( !of->fname_real ) { ifile_close( of ); return( NULL ); } if( !(of->fp = (FILE *) callv_string_filename( (callv_string_fn) fopen, of->fname_real, "w", NULL, NULL )) ) { error_top( _( "Unable to open." ) ); error_sub( _( "Unable to open file \"%s\" for writing.\n%s." ), of->fname_real, g_strerror( errno ) ); ifile_close( of ); return( NULL ); } of->read = FALSE; return( of ); } /* fprintf() to a file, checking result. */ gboolean ifile_write( iOpenFile *of, const char *fmt, ... ) { va_list ap; va_start( ap, fmt ); if( vfprintf( of->fp, fmt, ap ) == EOF ) { of->last_errno = errno; error_top( _( "Unable to write." ) ); error_sub( _( "Unable to write to file \"%s\".\n%s." ), of->fname_real, g_strerror( of->last_errno ) ); return( FALSE ); } va_end( ap ); return( TRUE ); } /* Save a string ... if non-NULL. Eg. * fred="boink!" */ gboolean ifile_write_var( iOpenFile *of, const char *name, const char *value ) { if( value ) return( ifile_write( of, " %s=\"%s\"", name, value ) ); return( TRUE ); } /* Load up a file as a string. */ char * ifile_read( iOpenFile *of ) { long len; size_t len2; char *str; /* Find length. */ fseek( of->fp, 0L, 2 ); len = ftell( of->fp ); rewind( of->fp ); if( len < 0 || len > 1024 * 1024 ) { error_top( _( "Unable to read." ) ); error_sub( _( "File \"%s\" too large." ), of->fname_real ); return( NULL ); } /* Allocate memory and fill. */ if( !(str = imalloc( NULL, len + 1 )) ) return( NULL ); /* We can't check len2 against len, since we may be reading a text * file on Windows, in which case this fread will change CRLF to LF * and len2 will be less than len. */ len2 = fread( str, sizeof( char ), (size_t) len, of->fp ); str[len2] = '\0'; return( str ); } /* Load a file into a buffer. Useful for OpenFiles we can't seek in, like * stdin. */ char * ifile_read_buffer( iOpenFile *of, char *buffer, size_t max ) { size_t len; /* -1 off max to leave space for the '\0'. */ len = fread( buffer, sizeof( char ), max - 1, of->fp ); if( !feof( of->fp ) ) { /* File too large for buffer. */ of->last_errno = errno; error_top( _( "Unable to read." ) ); error_sub( _( "Unable to read from file \"%s\".\n%s." ), of->fname_real, g_strerror( of->last_errno ) ); return( NULL ); } buffer[len] = '\0'; return( buffer ); } /* Return '\0' for EOF, -1 for error. */ int ifile_getc( iOpenFile *of ) { int ch; ch = fgetc( of->fp ); if( ch == EOF && feof( of->fp ) ) return( 0 ); else if( ch == EOF ) return( -1 ); else return( ch ); } off_t statf( const char *fmt, ... ) { va_list ap; struct stat st; int result; va_start( ap, fmt ); result = calli_string_filenameva( (calli_string_fn) stat, fmt, ap, &st, NULL, NULL ); va_end( ap ); if( result == -1 || S_ISDIR( st.st_mode ) ) return( 0 ); else return( st.st_size ); } static void * directory_size_sub( const char *filename, double *total ) { *total += statf( "%s", filename ); return( NULL ); } /* Find the amount of 'stuff' in a directory. Result in bytes. Don't look in * sub-dirs. */ double directory_size( const char *dirname ) { double total; total = 0; path_map_dir( dirname, "*", (path_map_fn) directory_size_sub, &total ); return( total ); } /* Escape "%" characters in a string. */ char * escape_percent( const char *in, char *out, int len ) { const char *p; char *q; for( p = in, q = out; *p && q - out < len - 3; p++, q++ ) if( *p == '%' ) { q[0] = '%'; q[1] = '%'; q++; } else *q = *p; *q = '\0'; return( out ); } char * escape_markup( const char *in, char *out, int len ) { const char *p; char *q; for( p = in, q = out; *p && q - out < len - 5; p++, q++ ) if( *p == '<' ) { strcpy( q, "<" ); q += 3; } else if( *p == '>' ) { strcpy( q, ">" ); q += 3; } else if( *p == '&' ) { strcpy( q, "&" ); q += 4; } else *q = *p; *q = '\0'; return( out ); } /* VIPS filenames can have embedded modes. Mode strings are punctuated with * ',' and ':' chars. So strings in modes must have these chars escaped. */ char * escape_mode( const char *in, char *out, int len ) { const char *p; char *q; for( p = in, q = out; *p && q - out < len - 5; p++, q++ ) { if( *p == ':' || *p == ',' ) *q++ = '\\'; *q = *p; } *q = '\0'; return( out ); } /* Return a string of n characters. Buffer is zapped each time! */ const char * rpt( char ch, int n ) { int i; static char buf[200]; n = IM_MIN( 190, n ); for( i = 0; i < n; i++ ) buf[i] = ch; buf[i] = '\0'; return( buf ); } /* Return a string of n spaces. Buffer is zapped each time! */ const char * spc( int n ) { return( rpt( ' ', n ) ); } /* Like strtok(), but better. Give a string and a list of break characters; * write a '\0' into the string over the first break character and return a * pointer to the next non-break character. If there are no break characters, * then return a pointer to the end of the string. If passed a pointer to an * empty string or NULL, then return NULL. */ char * break_token( char *str, const char *brk ) { char *p; /* Is the string empty? If yes, return NULL immediately. */ if( !str || !*str ) return( NULL ); /* Skip initial break characters. */ p = str + strspn( str, brk ); /* Search for the first break character after the token. */ p += strcspn( p, brk ); /* Is there string left? */ if( *p ) { /* Write in an end-of-string mark and return the start of the * next token. */ *p++ = '\0'; p += strspn( p, brk ); } return( p ); } /* Turn a number to a string. 0 is "A", 1 is "B", 25 is "Z", 26 is "AA", 27 is * "AB", etc. */ void number_to_string( int n, char *buf ) { do { int rem = n % 26; *buf++ = (char) (rem + (int) 'A'); n /= 26; } while( n > 0 ); *buf ='\0'; } /* Find the space remaining in a directory, in bytes. A double for >32bit * problem avoidance. <0 for error. */ #ifdef HAVE_SYS_STATVFS_H double find_space( const char *name ) { struct statvfs st; double sz; if( calli_string_filename( (calli_string_fn) statvfs, (gpointer) name, &st, NULL, NULL ) ) /* Set to error value. */ sz = -1; else sz = IM_MAX( 0, (double) st.f_frsize * st.f_bavail ); return( sz ); } #elif (HAVE_SYS_VFS_H || HAVE_SYS_MOUNT_H) double find_space( const char *name ) { struct statfs st; double sz; if( calli_string_filename( (calli_string_fn) statfs, (gpointer) name, &st, NULL, NULL ) ) sz = -1; else sz = IM_MAX( 0, (double) st.f_bsize * st.f_bavail ); return( sz ); } #elif defined OS_WIN32 double find_space( const char *name ) { ULARGE_INTEGER avail; ULARGE_INTEGER total; ULARGE_INTEGER free; double sz; char name2[FILENAME_MAX]; expand_variables( name, name2 ); /* Truncate to just the drive letter. */ if( name2[1] == ':' ) name2[3] = 0; if( !GetDiskFreeSpaceEx( name2, &avail, &total, &free ) ) sz = -1; else sz = IM_MAX( 0, (double) free.QuadPart ); return( sz ); } #else double find_space( const char *name ) { return( -1 ); } #endif /*HAVE_SYS_STATVFS_H*/ /* Make a name for a temp file. Add the specified extension. */ gboolean temp_name( char *name, const char *type ) { /* Some mkstemp() require files to actually exist before they don't * reuse the filename :-( add an extra field. */ static int n = 0; const char *dir; int fd; char buf[FILENAME_MAX]; dir = PATH_TMP; if( !existsf( "%s", dir ) ) dir = G_DIR_SEPARATOR_S; im_snprintf( name, FILENAME_MAX, "%s" G_DIR_SEPARATOR_S "untitled-" PACKAGE "-%d-XXXXXXX", dir, n++ ); expand_variables( name, buf ); fd = g_mkstemp( buf ); if( fd == -1 ) { error_top( _( "Unable to create temporary file." ) ); error_sub( _( "Unable to make file \"%s\"\n%s" ), buf, g_strerror( errno ) ); return( FALSE ); } close( fd ); unlinkf( "%s", buf ); im_snprintf( name, FILENAME_MAX, "%s.%s", buf, type ); return( TRUE ); } /* Max/min of an area. */ int findmaxmin( IMAGE *in, int left, int top, int width, int height, double *min, double *max ) { DOUBLEMASK *msk; IMAGE *t1; if( !(t1 = im_open( "temp", "p" )) ) return( -1 ); if( im_extract_area( in, t1, left, top, width, height ) || !(msk = im_stats( t1 )) ) return( -1 ); im_close( t1 ); *min = msk->coeff[0]; *max = msk->coeff[1]; im_free_dmask( msk ); #ifdef DEBUG printf( "findmaxmin: left = %d, top = %d, width = %d, height = %d\n", left, top, width, height ); printf( "findmaxmin: max = %g, min = %g\n", *max, *min ); #endif /*DEBUG*/ return( 0 ); } gboolean char_to_bool( char *str, void *out ) { gboolean *t = (gboolean *) out; if( strcasecmp( "TRUE", str ) == 0 ) *t = TRUE; else *t = FALSE; return( TRUE ); } char * bool_to_char( gboolean b ) { if( b ) return( "true" ); else return( "false" ); } /* Increment a name ... strip any trailing numbers, add one, put numbers back. * Start at 1 if no number there. buf should be at least namelen chars. Keep * leading zeros, if any. */ void increment_name( char *buf ) { char *p; int n; char fmt[256]; /* If there's no number, p will point at the '\0'. */ p = (char *) my_strrspn( buf, NUMERIC ); if( *p ) { n = atoi( p ); im_snprintf( fmt, 256, "%%0%dd", (int) strlen( p ) ); } else { strcpy( fmt, "%d" ); n = 0; } im_snprintf( p, MAX_STRSIZE - (p - buf), fmt, n + 1 ); } /* Increment filename. Eg. "/home/jim/fred_00_tn.tif" becomes * "/home/jim/fred_01_tn.tif" */ void increment_filename( char *filename ) { char buf[FILENAME_MAX]; char suf[FILENAME_MAX]; char tail[FILENAME_MAX]; char *file, *p; im_strncpy( buf, filename, FILENAME_MAX ); /* Save and replace the suffix around an increment_name. */ file = (char *) im_skip_dir( buf ); if( !(p = strrchr( file, '.' )) ) p = file + strlen( file ); im_strncpy( suf, p, FILENAME_MAX ); *p = '\0'; /* Also save any chars to the right of the number component (if any) of * the filename. */ p = (char *) my_strrcspn( file, NUMERIC ); /* No numbers there? Take nothing as the tail and put the number at * the end. */ if( p == file ) p = file + strlen( file ); im_strncpy( tail, p, FILENAME_MAX ); *p = '\0'; increment_name( buf ); strcpy( filename, buf ); strcat( filename, tail ); strcat( filename, suf ); } /* Extract the first line of a string in to buf, extract no more than len * chars. */ int extract_first_line( char *buf, char *str, int len ) { char *p; int n; /* Find next '\n' or '\0'. */ if( (p = strchr( str, '\n' )) ) n = p - str; else n = strlen( str ); n = IM_MIN( len - 1, n ); /* Copy those characters and make sure we have a '\0'. */ strncpy( buf, str, n ); buf[n] = '\0'; return( n ); } /* Make a valid ip name from a filename. */ void name_from_filename( const char *in, char *out ) { const char *p; /* Skip leading path prefix, and any non-alpha. * Don't use isalnum(), since we don't want leading digits. */ p = im_skip_dir( in ); while( *p && !(isalpha( *p ) || *p == '_') ) p += 1; if( !*p ) strcpy( out, "untitled" ); else { char *q; /* Filter non-identifier chars. Stop at the first '.' * character, so we don't get the suffix in there too. */ for( q = out; *p && *p != '.'; p++ ) if( isalnum( *p ) || *p == '_' || *p == '\'' ) *q++ = *p; *q = '\0'; } } /* Do any leak checking we can. */ void util_check_all_destroyed( void ) { if( rect_n_rects ) printf( "rect_n_rects == %d\n", rect_n_rects ); } /* Like im_malloc(), but set our error stuff. */ void * imalloc( IMAGE *im, size_t len ) { void *mem; if( !(mem = im_malloc( im, len )) ) { char txt[256]; VipsBuf buf = VIPS_BUF_STATIC( txt ); vips_buf_append_size( &buf, len ); error_top( _( "Out of memory." ) ); error_sub( _( "Request for %s of RAM triggered memory " "allocation failure." ), vips_buf_all( &buf ) ); error_vips(); return( NULL ); } return( mem ); } /* Add a filename to a recent list. If there are more than MAX_RECENT items, * drop the last one off. If this is a dupe, move it to the head of the list. */ GSList * recent_add( GSList *recent, const char *filename ) { char absolute[FILENAME_MAX]; int n; GSList *p; im_strncpy( absolute, filename, FILENAME_MAX ); absoluteize_path( absolute ); for( p = recent; p; p = p->next ) { const char *stored = p->data; if( strcmp( absolute, stored ) == 0 ) { recent = g_slist_remove( recent, stored ); recent = g_slist_prepend( recent, (void *) stored ); return( recent ); } } recent = g_slist_prepend( recent, g_strdup( absolute ) ); if( (n = g_slist_length( recent )) > MAX_RECENT ) { const char *item; item = g_slist_nth_data( recent, n - 1 ); recent = g_slist_remove( recent, item ); g_free( (char *) item ); } return( recent ); } GSList * recent_load( const char *filename ) { iOpenFile *of; GSList *recent; recent = NULL; if( (of = ifile_open_read( "%s" G_DIR_SEPARATOR_S "%s", get_savedir(), filename )) ) { char buf[256]; while( fgets( buf, 256, of->fp ) ) { int n; if( (n = strlen( buf )) > 0 ) { if( buf[n - 1] == '\n' ) buf[n - 1] = '\0'; recent = recent_add( recent, buf ); } } ifile_close( of ); } return( recent ); } void recent_free( GSList *recent ) { GSList *p; for( p = recent; p; p = p->next ) { const char *item = (const char *) p->data; g_free( (char *) item ); } g_slist_free( recent ); } static void * recent_save_sub( const char *filename, GSList **old_recent ) { *old_recent = recent_add( *old_recent, filename ); return( NULL ); } static void * recent_save_sub2( const char *filename, iOpenFile *of ) { fprintf( of->fp, "%s\n", filename ); return( NULL ); } void recent_save( GSList *recent, const char *filename ) { iOpenFile *of; GSList *old_recent; /* If there are several nips running, we could be saving over a file * that's been modified since we loaded it. Try to make this less * awful by merging our recent list over the one in the file. */ old_recent = recent_load( filename ); slist_map_rev( recent, (SListMapFn) recent_save_sub, &old_recent ); if( (of = ifile_open_write( "%s" G_DIR_SEPARATOR_S "%s", get_savedir(), filename )) ) { slist_map_rev( old_recent, (SListMapFn) recent_save_sub2, of ); ifile_close( of ); } recent_free( old_recent ); } /* Return the name of the save dir we use ... eg. "$HOME/.nip2-7.10.8", * or maybe "C:\Documents and Settings\john\Application Data" */ const char * get_savedir( void ) { #ifdef OS_WIN32 /* If APPDATA is not defined, default to HOME, we know that will * exist (since we make it if necessary in main()). */ if( g_getenv( "APPDATA" ) && existsf( "%s", g_getenv( "APPDATA" ) ) ) return( "$APPDATA" G_DIR_SEPARATOR_S IP_NAME ); else return( "$HOME" G_DIR_SEPARATOR_S "." IP_NAME ); #elif OS_DARWIN /* Darwin ... in ~/Library */ return( "$HOME" G_DIR_SEPARATOR_S "Library" G_DIR_SEPARATOR_S IP_NAME ); #else /* *nix-style system .. .dot file in home area. */ return( "$HOME" G_DIR_SEPARATOR_S "." IP_NAME ); #endif /*OS_WIN32*/ } /* Turn an slist into a null-terminated array. */ void ** slist_to_array( GSList *list ) { void **array; int i; array = g_new( void *, g_slist_length( list ) + 1 ); for( i = 0; list ; list = list->next, i++ ) array[i] = list->data; array[i] = NULL; return( array ); } /* Length of a NULL-terminated array. */ int array_len( void **array ) { int i; for( i = 0; array[i]; i++ ) ; return( i ); } nip2-8.7.0/src/view.c0000644000175000017500000005334013224651032011227 00000000000000/* abstract base class for items which can form a row in a tally */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG #define DEBUG_VIEWCHILD */ /* Time each refresh #define DEBUG_TIME */ #include "ip.h" static vObjectClass *parent_class = NULL; static GSList *view_scannable = NULL; static GSList *view_resettable = NULL; void view_scannable_register( View *view ) { /* Must have a scan method. */ g_assert( VIEW_GET_CLASS( view )->scan ); if( !view->scannable ) { view_scannable = g_slist_prepend( view_scannable, view ); view->scannable = TRUE; } } void view_scannable_unregister( View *view ) { if( view->scannable ) { view_scannable = g_slist_remove( view_scannable, view ); view->scannable = FALSE; } } gboolean view_scan_all( void ) { if( slist_map( view_scannable, (SListMapFn) view_scan, NULL ) ) return( FALSE ); view_reset_all(); return( TRUE ); } void view_resettable_register( View *view ) { /* Must have a reset method. */ g_assert( VIEW_GET_CLASS( view )->reset ); if( !view->resettable ) { view_resettable = g_slist_prepend( view_resettable, view ); view->resettable = TRUE; } } void view_resettable_unregister( View *view ) { if( view->resettable ) { view_resettable = g_slist_remove( view_resettable, view ); view->resettable = FALSE; } } void view_reset_all( void ) { (void) slist_map( view_resettable, (SListMapFn) view_reset, NULL ); } /* Should a viewchild be displayed? If model->display is true, also give the * enclosing view a chance to filter. */ static gboolean view_viewchild_display( ViewChild *viewchild ) { View *parent_view = viewchild->parent_view; Model *child_model = viewchild->child_model; ViewClass *parent_view_class = VIEW_GET_CLASS( parent_view ); if( child_model->display && parent_view_class->display ) return( parent_view_class->display( parent_view, child_model ) ); return( child_model->display ); } /* One of the children of the model we watch has changed ... create or destroy * the child view as required. */ static void view_viewchild_changed( Model *model, ViewChild *viewchild ) { gboolean display = view_viewchild_display( viewchild ); View *child = viewchild->child_view; if( !display && child ) { #ifdef DEBUG_VIEWCHILD printf( "view_viewchild_changed: %s \"%s\", removing view\n", G_OBJECT_TYPE_NAME( model ), NN( IOBJECT( model )->name ) ); printf( "view_viewchild_changed: %s\n", G_OBJECT_TYPE_NAME( child ) ); #endif /*DEBUG_VIEWCHILD*/ DESTROY_GTK( child ); } else if( display && !child ) { #ifdef DEBUG_VIEWCHILD printf( "view_viewchild_changed: %s \"%s\", adding view\n", G_OBJECT_TYPE_NAME( model ), NN( IOBJECT( model )->name ) ); #endif /*DEBUG_VIEWCHILD*/ model_view_new( model, viewchild->parent_view ); } } static ViewChild * view_viewchild_new( View *parent_view, Model *child_model ) { ViewChild *viewchild; #ifdef DEBUG_VIEWCHILD printf( "view_viewchild_new: view \"%s\" watching %s \"%s\"\n", G_OBJECT_TYPE_NAME( parent_view ), G_OBJECT_TYPE_NAME( child_model ), NN( IOBJECT( child_model )->name ) ); #endif /*DEBUG_VIEWCHILD*/ if( !(viewchild = INEW( NULL, ViewChild )) ) return( NULL ); viewchild->parent_view = parent_view; viewchild->child_model = child_model; viewchild->child_model_changed_sid = g_signal_connect( child_model, "changed", G_CALLBACK( view_viewchild_changed ), viewchild ); viewchild->child_view = NULL; parent_view->managed = g_slist_append( parent_view->managed, viewchild ); return( viewchild ); } static void * view_viewchild_destroy( ViewChild *viewchild ) { View *parent_view = viewchild->parent_view; View *child_view = viewchild->child_view; #ifdef DEBUG_VIEWCHILD printf( "view_viewchild_destroy: view %s watching model %s\n", G_OBJECT_TYPE_NAME( viewchild->parent_view ), G_OBJECT_TYPE_NAME( viewchild->child_model ) ); #endif /*DEBUG_VIEWCHILD*/ if( child_view ) { g_assert( child_view->parent == parent_view ); child_view->parent = NULL; } FREESID( viewchild->child_model_changed_sid, viewchild->child_model ); parent_view->managed = g_slist_remove( parent_view->managed, viewchild ); im_free( viewchild ); return( NULL ); } static void * view_viewchild_test_child_model( ViewChild *viewchild, Model *child_model ) { #ifdef DEBUG printf( "view_viewchild_test_child_model: model %s \"%s\"\n", G_OBJECT_TYPE_NAME( child_model ), NN( IOBJECT( child_model )->name ) ); #endif /*DEBUG*/ if( viewchild->child_model == child_model ) return( viewchild ); return( NULL ); } /* Do we have a model? */ gboolean view_hasmodel( View *view ) { return( VOBJECT( view )->iobject != NULL ); } void * view_model_test( View *view, Model *model ) { if( VOBJECT( view )->iobject == IOBJECT( model ) ) return( view ); return( NULL ); } /* Link to enclosing model and view. */ void view_link( View *view, Model *model, View *parent ) { VIEW_GET_CLASS( view )->link( view, model, parent ); } /* Add a child. */ void view_child_add( View *parent, View *child ) { VIEW_GET_CLASS( parent )->child_add( parent, child ); } /* Remove a child. */ void view_child_remove( View *child ) { View *parent = child->parent; VIEW_GET_CLASS( parent )->child_remove( parent, child ); } /* Child needs repositioning. */ void view_child_position( View *child ) { View *parent = child->parent; VIEW_GET_CLASS( parent )->child_position( parent, child ); } /* Pop child to front of stacking order. */ void view_child_front( View *child ) { View *parent = child->parent; if( parent ) VIEW_GET_CLASS( parent )->child_front( parent, child ); } /* Break link to model. */ void view_unlink( View *view ) { g_assert( view != NULL ); g_assert( VOBJECT( view )->iobject != NULL ); g_assert( IS_VIEW( view ) && IS_MODEL( VOBJECT( view )->iobject ) ); FREESID( view->pos_changed_sid, VOBJECT( view )->iobject ); FREESID( view->scrollto_sid, VOBJECT( view )->iobject ); FREESID( view->layout_sid, VOBJECT( view )->iobject ); FREESID( view->reset_sid, VOBJECT( view )->iobject ); FREESID( view->front_sid, VOBJECT( view )->iobject ); FREESID( view->child_add_sid, VOBJECT( view )->iobject ); FREESID( view->child_remove_sid, VOBJECT( view )->iobject ); FREESID( view->child_detach_sid, VOBJECT( view )->iobject ); FREESID( view->child_attach_sid, VOBJECT( view )->iobject ); } static void view_destroy( GtkObject *object ) { View *view; g_return_if_fail( object != NULL ); g_return_if_fail( IS_VIEW( object ) ); view = VIEW( object ); #ifdef DEBUG printf( "view_destroy: \"%s\"\n", G_OBJECT_TYPE_NAME( object ) ); #endif /*DEBUG*/ /* We're probably changing the size of our enclosing column. */ view_resize( view ); if( view->scannable ) view_scannable_unregister( view ); if( view->resettable ) view_resettable_unregister( view ); if( VOBJECT( view )->iobject ) view_unlink( view ); if( view->parent ) view_child_remove( view ); slist_map( view->managed, (SListMapFn) view_viewchild_destroy, NULL ); GTK_OBJECT_CLASS( parent_class )->destroy( object ); } static void view_finalize( GObject *gobject ) { #ifdef DEBUG printf( "view_finalize: \"%s\"\n", G_OBJECT_TYPE_NAME( gobject ) ); #endif /*DEBUG*/ G_OBJECT_CLASS( parent_class )->finalize( gobject ); } /* Called for model pos_changed signal ... queue a refresh. */ static void view_model_pos_changed( Model *model, View *view ) { g_assert( IS_MODEL( model ) ); g_assert( IS_VIEW( view ) ); #ifdef DEBUG printf( "view_model_pos_changed: %s %s \"%s\"\n", G_OBJECT_TYPE_NAME( view ), G_OBJECT_TYPE_NAME( model ), NN( IOBJECT( model )->name ) ); #endif /*DEBUG*/ vobject_refresh_queue( VOBJECT( view ) ); } /* Called for model scrollto signal ... try scrolling. */ static void view_model_scrollto( Model *model, ModelScrollPosition position, View *view ) { g_assert( IS_MODEL( model ) ); g_assert( IS_VIEW( view ) ); #ifdef DEBUG printf( "view_model_scrollto: %s\n", IOBJECT( model )->name ); #endif /*DEBUG*/ view_scrollto( view, position ); } /* Called for model layout signal ... try to lay out children. */ static void view_model_layout( Model *model, View *view ) { g_assert( IS_MODEL( model ) ); g_assert( IS_VIEW( view ) ); #ifdef DEBUG printf( "view_model_layout: %s\n", IOBJECT( model )->name ); #endif /*DEBUG*/ view_layout( view ); } /* Called for model reset signal ... try resetting. */ static void view_model_reset( Model *model, View *view ) { g_assert( IS_MODEL( model ) ); g_assert( IS_VIEW( view ) ); #ifdef DEBUG printf( "view_model_reset: %s\n", IOBJECT( model )->name ); #endif /*DEBUG*/ view_reset( view ); } /* Called for model front signal ... bring view to front. */ static void view_model_front( Model *model, View *view ) { g_assert( IS_MODEL( model ) ); g_assert( IS_VIEW( view ) ); #ifdef DEBUG printf( "view_model_front: model %s \"%s\"\n", G_OBJECT_TYPE_NAME( model ), NN( IOBJECT( model )->name ) ); printf( "\tview %s\n", G_OBJECT_TYPE_NAME( view ) ); #endif /*DEBUG*/ view_child_front( view ); } /* Called for model child_add signal ... start watching that child. */ static void view_model_child_add( Model *parent, Model *child, int pos, View *parent_view ) { ViewChild *viewchild; #ifdef DEBUG printf( "view_model_child_add: parent %s \"%s\"\n", G_OBJECT_TYPE_NAME( parent ), NN( IOBJECT( parent )->name ) ); #endif /*DEBUG*/ g_assert( IS_MODEL( parent ) ); g_assert( IS_MODEL( child ) ); g_assert( IS_VIEW( parent_view ) ); #ifdef DEBUG viewchild = slist_map( parent_view->managed, (SListMapFn) view_viewchild_test_child_model, child ); g_assert( !viewchild ); #endif /*DEBUG*/ viewchild = view_viewchild_new( parent_view, child ); view_viewchild_changed( child, viewchild ); } /* Called for model child_remove signal ... stop watching that child. child * may have been finalized already. */ static void view_model_child_remove( iContainer *parent, iContainer *child, View *parent_view ) { ViewChild *viewchild; #ifdef DEBUG { printf( "view_model_child_remove: child %s \"%s\"; " "parent %s \"%s\"\n", G_OBJECT_TYPE_NAME( child ), NN( IOBJECT( child )->name ), G_OBJECT_TYPE_NAME( parent ), NN( IOBJECT( parent )->name ) ); printf( "view_model_child_remove: parent_view = view of %s \"%s\"\n", G_OBJECT_TYPE_NAME( VOBJECT( parent_view )->iobject ), NN( IOBJECT( VOBJECT( parent_view )->iobject )->name ) ); } #endif /*DEBUG*/ viewchild = slist_map( parent_view->managed, (SListMapFn) view_viewchild_test_child_model, child ); g_assert( viewchild ); (void) view_viewchild_destroy( viewchild ); } /* Called for model parent_detach signal ... remove the viewchild for this * child. child_attach will build a new one. */ static void view_model_child_detach( iContainer *old_parent, iContainer *child, View *old_parent_view ) { ViewChild *viewchild; #ifdef DEBUG { printf( "view_model_child_detach: child %s \"%s\"; " "old_parent %s \"%s\"\n", G_OBJECT_TYPE_NAME( child ), NN( IOBJECT( child )->name ), G_OBJECT_TYPE_NAME( old_parent ), NN( IOBJECT( old_parent )->name ) ); printf( "view_model_child_detach: old_parent_view = " "view of %s \"%s\"\n", G_OBJECT_TYPE_NAME( VOBJECT( old_parent_view )->iobject ), NN( IOBJECT( VOBJECT( old_parent_view )->iobject )->name ) ); } #endif /*DEBUG*/ viewchild = slist_map( old_parent_view->managed, (SListMapFn) view_viewchild_test_child_model, child ); g_assert( viewchild ); g_assert( !child->temp_view ); child->temp_view = viewchild->child_view; (void) view_viewchild_destroy( viewchild ); } /* Called for model child_attach signal ... make a new viewchild on the new * parent view. */ static void view_model_child_attach( iContainer *new_parent, iContainer *child, int pos, View *new_parent_view ) { ViewChild *viewchild; g_assert( !slist_map( new_parent_view->managed, (SListMapFn) view_viewchild_test_child_model, child ) ); viewchild = view_viewchild_new( new_parent_view, MODEL( child ) ); g_assert( child->temp_view && IS_VIEW( child->temp_view ) ); viewchild->child_view = child->temp_view; child->temp_view = NULL; viewchild->child_view->parent = new_parent_view; } static void * view_real_link_sub( Model *child_model, View *parent_view ) { ViewChild *viewchild; viewchild = view_viewchild_new( parent_view, child_model ); view_viewchild_changed( child_model, viewchild ); return( NULL ); } /* Link to model and to enclosing view. */ static void view_real_link( View *view, Model *model, View *parent_view ) { g_assert( view != NULL ); g_assert( IS_VIEW( view ) && IS_MODEL( model ) ); g_assert( !VOBJECT( view )->iobject ); #ifdef DEBUG printf( "view_real_link: linking %s to model %s \"%s\"\n", G_OBJECT_TYPE_NAME( view ), G_OBJECT_TYPE_NAME( model ), NN( IOBJECT( model )->name ) ); #endif /*DEBUG*/ vobject_link( VOBJECT( view ), IOBJECT( model ) ); if( parent_view ) view_child_add( parent_view, view ); view->pos_changed_sid = g_signal_connect( model, "pos_changed", G_CALLBACK( view_model_pos_changed ), view ); view->scrollto_sid = g_signal_connect( model, "scrollto", G_CALLBACK( view_model_scrollto ), view ); view->layout_sid = g_signal_connect( model, "layout", G_CALLBACK( view_model_layout ), view ); view->reset_sid = g_signal_connect( model, "reset", G_CALLBACK( view_model_reset ), view ); view->front_sid = g_signal_connect( model, "front", G_CALLBACK( view_model_front ), view ); view->child_add_sid = g_signal_connect( model, "child_add", G_CALLBACK( view_model_child_add ), view ); view->child_remove_sid = g_signal_connect( model, "child_remove", G_CALLBACK( view_model_child_remove ), view ); view->child_detach_sid = g_signal_connect( model, "child_detach", G_CALLBACK( view_model_child_detach ), view ); view->child_attach_sid = g_signal_connect( model, "child_attach", G_CALLBACK( view_model_child_attach ), view ); icontainer_map( ICONTAINER( model ), (icontainer_map_fn) view_real_link_sub, view, NULL ); gtk_widget_show( GTK_WIDGET( view ) ); } static void view_real_child_add( View *parent, View *child ) { ViewChild *viewchild; g_assert( IS_VIEW( parent ) && IS_VIEW( child ) ); g_assert( child->parent == NULL ); #ifdef DEBUG printf( "view_real_child_add: parent %p %s, child %p %s\n", parent, G_OBJECT_TYPE_NAME( parent ), child, G_OBJECT_TYPE_NAME( child ) ); #endif /*DEBUG*/ viewchild = slist_map( parent->managed, (SListMapFn) view_viewchild_test_child_model, VOBJECT( child)->iobject ); g_assert( viewchild ); g_assert( viewchild->child_view == NULL ); /* Not all views are true widgets (ie. get _ref()'s and _sink()'d by a * parent in gtk_container()). Ref and sink ourselves to ensure that * even these odd views get unfloated. See also * view_real_child_remove(). Affects the tool/toolkit views, and * rowview at least. */ child->parent = parent; viewchild->child_view = child; g_object_ref( GTK_OBJECT( child ) ); gtk_object_sink( GTK_OBJECT( child ) ); } static void view_real_child_remove( View *parent, View *child ) { ViewChild *viewchild; #ifdef DEBUG printf( "view_real_child_remove: parent %s, child %s\n", G_OBJECT_TYPE_NAME( parent ), G_OBJECT_TYPE_NAME( child ) ); #endif /*DEBUG*/ viewchild = slist_map( parent->managed, (SListMapFn) view_viewchild_test_child_model, VOBJECT( child )->iobject ); /* Can have floating views which are not part of the viewchild system. */ if( viewchild && viewchild->child_view == child ) { viewchild->child_view = NULL; g_object_unref( G_OBJECT( child ) ); } child->parent = NULL; } static void view_real_child_position( View *parent, View *child ) { } static void view_real_child_front( View *parent, View *child ) { } static void view_real_reset( View *view ) { view_resettable_unregister( view ); } static void * view_real_scan( View *view ) { Model *model = MODEL( VOBJECT( view )->iobject ); Heapmodel *heapmodel; view_scannable_unregister( view ); /* If we've changed something in this model, mark it for recomp. */ if( model && IS_HEAPMODEL( model ) && (heapmodel = HEAPMODEL( model ))->modified && heapmodel->row ) { Expr *expr = heapmodel->row->expr; if( expr ) (void) expr_dirty( expr, link_serial_new() ); } return( NULL ); } static void view_class_init( ViewClass *class ) { GObjectClass *gobject_class = G_OBJECT_CLASS( class ); GtkObjectClass *object_class = (GtkObjectClass*) class; parent_class = g_type_class_peek_parent( class ); gobject_class->finalize = view_finalize; object_class->destroy = view_destroy; /* Create signals. */ /* Init default methods. */ class->link = view_real_link; class->child_add = view_real_child_add; class->child_remove = view_real_child_remove; class->child_position = view_real_child_position; class->child_front = view_real_child_front; class->display = NULL; class->reset = view_real_reset; class->scan = view_real_scan; class->scrollto = NULL; class->layout = NULL; } static void view_init( View *view ) { /* Init our instance fields. */ view->pos_changed_sid = 0; view->scrollto_sid = 0; view->layout_sid = 0; view->reset_sid = 0; view->front_sid = 0; view->child_add_sid = 0; view->child_remove_sid = 0; view->child_detach_sid = 0; view->child_attach_sid = 0; view->parent = NULL; view->scannable = FALSE; view->resettable = FALSE; } GtkType view_get_type( void ) { static GtkType view_type = 0; if( !view_type ) { static const GtkTypeInfo view_info = { "View", sizeof( View ), sizeof( ViewClass ), (GtkClassInitFunc) view_class_init, (GtkObjectInitFunc) view_init, /* reserved_1 */ NULL, /* reserved_2 */ NULL, (GtkClassInitFunc) NULL, }; view_type = gtk_type_unique( TYPE_VOBJECT, &view_info ); } return( view_type ); } /* Trigger the reset method for a view. */ void * view_reset( View *view ) { ViewClass *view_class = VIEW_GET_CLASS( view ); if( view_class->reset ) view_class->reset( view ); return( NULL ); } /* Trigger the scan method for a view. */ void * view_scan( View *view ) { ViewClass *view_class = VIEW_GET_CLASS( view ); if( view_class->scan ) return( view_class->scan( view ) ); return( NULL ); } /* Trigger the scrollto method for a view. */ void * view_scrollto( View *view, ModelScrollPosition position ) { ViewClass *view_class = VIEW_GET_CLASS( view ); if( view_class->scrollto ) view_class->scrollto( view, position ); return( NULL ); } /* Trigger the layout method for a view. */ void * view_layout( View *view ) { ViewClass *view_class = VIEW_GET_CLASS( view ); if( view_class->layout ) view_class->layout( view ); return( NULL ); } static void * view_map_sub( ViewChild *viewchild, view_map_fn fn, void *a, void *b ) { if( viewchild->child_view ) return( fn( viewchild->child_view, a, b ) ); return( NULL ); } /* Map over a view's children. */ void * view_map( View *view, view_map_fn fn, void *a, void *b ) { return( slist_map3( view->managed, (SListMap3Fn) view_map_sub, (void *) fn, a, b ) ); } /* Apply a function to view, and to all it's children. */ void * view_map_all( View *view, view_map_fn fn, void *a ) { View *result; if( (result = fn( view, a, NULL )) ) return( result ); return( view_map( view, (view_map_fn) view_map_all, (void *) fn, a ) ); } void view_save_as_cb( GtkWidget *menu, GtkWidget *host, View *view ) { Model *model = MODEL( VOBJECT( view )->iobject ); if( IS_FILEMODEL( model ) ) { iWindow *iwnd = IWINDOW( view_get_toplevel( view ) ); filemodel_inter_saveas( iwnd, FILEMODEL( model ) ); } } void view_save_cb( GtkWidget *menu, GtkWidget *host, View *view ) { Model *model = MODEL( VOBJECT( view )->iobject ); if( IS_FILEMODEL( model ) ) { iWindow *iwnd = IWINDOW( view_get_toplevel( view ) ); filemodel_inter_save( iwnd, FILEMODEL( model ) ); } } void view_close_cb( GtkWidget *menu, GtkWidget *host, View *view ) { Model *model = MODEL( VOBJECT( view )->iobject ); if( IS_FILEMODEL( model ) ) { iWindow *iwnd = IWINDOW( view_get_toplevel( view ) ); filemodel_inter_savenclose( iwnd, FILEMODEL( model ) ); } } /* Callback for "activate" on a view. */ void view_activate_cb( View *view ) { view_scannable_register( view ); symbol_recalculate_all(); } /* Callback for "changed" on a view. */ void view_changed_cb( View *view ) { /* Make sure it's on the scannable list. */ view_scannable_register( view ); } void view_not_implemented_cb( GtkWidget *menu, GtkWidget *host, View *view ) { error_top( _( "Not implemented." ) ); iwindow_alert( GTK_WIDGET( view ), GTK_MESSAGE_ERROR ); } GtkWidget * view_get_toplevel( View *view ) { while( IS_VIEW( view ) && view->parent ) view = view->parent; return( gtk_widget_get_toplevel( GTK_WIDGET( view ) ) ); } Columnview * view_get_columnview( View *child ) { View *view; for( view = child; view && !IS_COLUMNVIEW( view ); view = view->parent ) ; if( !view ) return( NULL ); return( COLUMNVIEW( view ) ); } /* A view has changed size ... rethink the enclosing column geo. Helps table * to not break. */ void * view_resize( View *view ) { Columnview *cview = view_get_columnview( view ); if( cview ) gtk_widget_queue_resize( GTK_WIDGET( cview ) ); return( NULL ); } nip2-8.7.0/src/managedstring.c0000644000175000017500000001341513224651032013077 00000000000000/* a managed FILE* ... for lazy file read */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #include "ip.h" /* #define DEBUG */ static ManagedClass *parent_class = NULL; /* Track all instances here. */ static GHashTable *managedstring_all = NULL; #ifdef DEBUG /* Number of managed strings, number we have expanded to the heap. */ int managed_total = 0; int managed_expanded = 0; #endif /*DEBUG*/ static void managedstring_finalize( GObject *gobject ) { Managedstring *managedstring = MANAGEDSTRING( gobject ); #ifdef DEBUG printf( "managedstring_finalize: \"%s\", ", managedstring->string ); iobject_print( IOBJECT( managedstring ) ); #endif /*DEBUG*/ #ifdef DEBUG { PElement pe; PEPOINTE( &pe, &managedstring->e ); if( !PEISNOVAL( &pe ) ) managed_expanded -= 1; managed_total -= 1; } #endif /*DEBUG*/ heap_unregister_element( MANAGED( managedstring )->heap, &managedstring->e ); g_hash_table_remove( managedstring_all, managedstring ); IM_FREE( managedstring->string ); G_OBJECT_CLASS( parent_class )->finalize( gobject ); } static void managedstring_info( iObject *iobject, VipsBuf *buf ) { Managedstring *managedstring = MANAGEDSTRING( iobject ); vips_buf_appendf( buf, "managedstring->string = \"%s\"\n", managedstring->string ); IOBJECT_CLASS( parent_class )->info( iobject, buf ); } /* Hash and equality for a managed string: we need the string and the heap to * match. */ static unsigned int managedstring_hash( Managedstring *managedstring ) { return( g_str_hash( managedstring->string ) | GPOINTER_TO_UINT( ((Managed *) managedstring)->heap ) ); } static gboolean managedstring_equal( Managedstring *a, Managedstring *b ) { return( ((Managed *) a)->heap == ((Managed *) b)->heap && g_str_equal( a->string, b->string ) ); } static void managedstring_all_init( void ) { if( !managedstring_all ) managedstring_all = g_hash_table_new( (GHashFunc) managedstring_hash, (GEqualFunc) managedstring_equal ); } static void managedstring_class_init( ManagedstringClass *class ) { GObjectClass *gobject_class = G_OBJECT_CLASS( class ); iObjectClass *iobject_class = IOBJECT_CLASS( class ); parent_class = g_type_class_peek_parent( class ); gobject_class->finalize = managedstring_finalize; iobject_class->info = managedstring_info; managedstring_all_init(); } static void managedstring_init( Managedstring *managedstring ) { #ifdef DEBUG printf( "managedstring_init: %p\n", managedstring ); #endif /*DEBUG*/ #ifdef DEBUG managed_total += 1; #endif /*DEBUG*/ managedstring->string = NULL; managedstring->e.type = ELEMENT_NOVAL; managedstring->e.ele = NULL; } GType managedstring_get_type( void ) { static GType type = 0; if( !type ) { static const GTypeInfo info = { sizeof( ManagedstringClass ), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) managedstring_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof( Managedstring ), 32, /* n_preallocs */ (GInstanceInitFunc) managedstring_init, }; type = g_type_register_static( TYPE_MANAGED, "Managedstring", &info, 0 ); } return( type ); } static Managedstring * managedstring_new( Heap *heap, const char *string ) { Managedstring *managedstring; #ifdef DEBUG printf( "managedstring_new: %p, %s\n", heap, string ); #endif /*DEBUG*/ /* Disallow "" as string, we want to represent that as []. */ g_assert( strcmp( string, "" ) != 0 ); managedstring = g_object_new( TYPE_MANAGEDSTRING, NULL ); managed_link_heap( MANAGED( managedstring ), heap ); heap_register_element( heap, &managedstring->e ); if( !(managedstring->string = im_strdup( NULL, string )) ) return( NULL ); g_assert( !g_hash_table_lookup( managedstring_all, managedstring ) ); g_hash_table_insert( managedstring_all, managedstring, managedstring ); MANAGED( managedstring )->hash = managedstring_hash( managedstring ); return( managedstring ); } Managedstring * managedstring_lookup( Heap *heap, const char *string ) { Managedstring managedstring; ((Managed *) &managedstring)->heap = heap; managedstring.string = string; managedstring_all_init(); return( g_hash_table_lookup( managedstring_all, &managedstring ) ); } Managedstring * managedstring_find( Heap *heap, const char *string ) { Managedstring *managedstring; if( !(managedstring = managedstring_lookup( heap, string )) ) if( !(managedstring = managedstring_new( heap, string )) ) return( NULL ); return( managedstring ); } gboolean managedstring_get( Managedstring *managedstring, PElement *out ) { PElement pe; PEPOINTE( &pe, &managedstring->e ); if( PEISNOVAL( &pe ) ) { if( !heap_string_new( MANAGED( managedstring )->heap, managedstring->string, &pe ) ) return( FALSE ); #ifdef DEBUG managed_expanded += 1; printf( "expanding %s to the heap\n", managedstring->string ); printf( "\t(%d of %d now expanded)\n", managed_expanded, managed_total ); #endif /*DEBUG*/ } PEPUTE( out, &managedstring->e ); return( TRUE ); } nip2-8.7.0/src/iimageview.c0000644000175000017500000002624313224651032012405 00000000000000/* run the display for an image in a workspace */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #include "ip.h" static GraphicviewClass *parent_class = NULL; static void iimageview_realize( GtkWidget *widget ) { GTK_WIDGET_CLASS( parent_class )->realize( widget ); /* Mark us as a symbol drag-to widget. */ set_symbol_drag_type( widget ); } GtkWidget * iimageview_drag_window_new( int width, int height ) { GtkWidget *window; window = gtk_window_new( GTK_WINDOW_POPUP ); gtk_widget_set_app_paintable( GTK_WIDGET( window ), TRUE ); gtk_widget_set_size_request( window, width, height ); gtk_widget_realize( window ); #ifdef HAVE_SET_OPACITY gdk_window_set_opacity( window->window, 0.5 ); #endif /*HAVE_SET_OPACITY*/ return( window ); } static void iimageview_drag_begin( GtkWidget *widget, GdkDragContext *context ) { iImageview *iimageview = IIMAGEVIEW( widget ); Conversion *conv = iimageview->conv; GtkWidget *window; Imagedisplay *id; #ifdef DEBUG printf( "iimageview_drag_begin: \n" ); #endif /*DEBUG*/ window = iimageview_drag_window_new( conv->canvas.width, conv->canvas.height ); gtk_object_set_data_full( GTK_OBJECT( widget ), "nip2-drag-window", window, (GtkDestroyNotify) gtk_widget_destroy ); id = imagedisplay_new( conv ); gtk_container_add( GTK_CONTAINER( window ), GTK_WIDGET( id ) ); gtk_widget_show( GTK_WIDGET( id ) ); gtk_drag_set_icon_widget( context, window, -2, -2 ); } static void iimageview_drag_end( GtkWidget *widget, GdkDragContext *context ) { #ifdef DEBUG printf( "iimageview_drag_end:\n" ); #endif /*DEBUG*/ gtk_object_set_data( GTK_OBJECT( widget ), "nip2-drag-window", NULL ); } static void iimageview_drag_data_get( GtkWidget *widget, GdkDragContext *context, GtkSelectionData *selection_data, guint info, guint time ) { #ifdef DEBUG printf( "iimageview_drag_data_get:\n" ); #endif /*DEBUG*/ if( info == TARGET_SYMBOL ) { iImageview *iimageview = IIMAGEVIEW( widget ); iImage *iimage = IIMAGE( VOBJECT( iimageview )->iobject ); Row *row = HEAPMODEL( iimage )->row; char txt[256]; VipsBuf buf = VIPS_BUF_STATIC( txt ); /* Drag the fully-qualified row name. */ row_qualified_name_relative( main_workspaceroot->sym, row, &buf ); gtk_selection_data_set( selection_data, gdk_atom_intern( "text/symbol", FALSE ), 8, (guchar *) vips_buf_all( &buf ), strlen( vips_buf_all( &buf ) ) ); } } static void iimageview_drag_data_received( GtkWidget *widget, GdkDragContext *context, gint x, gint y, GtkSelectionData *selection_data, guint info, guint time ) { #ifdef DEBUG printf( "iimageview_drag_data_received:\n" ); #endif /*DEBUG*/ if( info == TARGET_SYMBOL && selection_data->length > 0 && selection_data->format == 8 ) { const char *from_row_path = (const char *) selection_data->data; iImageview *iimageview = IIMAGEVIEW( widget ); iImage *iimage = IIMAGE( VOBJECT( iimageview )->iobject ); Row *row = HEAPMODEL( iimage )->row; Row *from_row; #ifdef DEBUG printf( " seen TARGET_SYMBOL \"%s\"\n", from_row_path ); #endif /*DEBUG*/ /* Block drags to ourselves ... pointless. */ if( (from_row = row_parse_name( main_workspaceroot->sym, from_row_path )) && from_row != row ) { iText *itext = ITEXT( HEAPMODEL( iimage )->rhs->itext ); char txt[256]; VipsBuf buf = VIPS_BUF_STATIC( txt ); /* Qualify relative to us. We don't want to embed * workspace names unless we have to. */ if( row->top_row->sym ) row_qualified_name_relative( row->top_row->sym, from_row, &buf ); if( itext_set_formula( itext, vips_buf_all( &buf ) ) ) { itext_set_edited( itext, TRUE ); (void) expr_dirty( row->expr, link_serial_new() ); workspace_set_modified( row->ws, TRUE ); symbol_recalculate_all(); } /* Usually the drag-from row will be selected, very * annoying. Select the drag-to row. */ row_select( row ); } } } /* Not the same as model->edit :-( if this is a region, don't pop the region * edit box, pop a viewer on the image. */ static void iimageview_edit( GtkWidget *parent, iImageview *iimageview ) { iImage *iimage = IIMAGE( VOBJECT( iimageview )->iobject ); if( IS_IREGION( iimage ) && iimage->value.ii ) imageview_new( iimage, parent ); else model_edit( parent, MODEL( iimage ) ); } static void iimageview_link( View *view, Model *model, View *parent ) { iImageview *iimageview = IIMAGEVIEW( view ); Rowview *rview; VIEW_CLASS( parent_class )->link( view, model, parent ); if( (rview = ROWVIEW( parent->parent )) ) { Row *row = ROW( VOBJECT( rview )->iobject ); rowview_menu_attach( rview, GTK_WIDGET( iimageview->id ) ); if( row->popup && row->top_row == row ) { row->popup = FALSE; iimageview_edit( GTK_WIDGET( view ), iimageview ); } } } static void iimageview_refresh( vObject *vobject ) { iImageview *iimageview = IIMAGEVIEW( vobject ); iImage *iimage = IIMAGE( vobject->iobject ); Row *row = HEAPMODEL( iimage )->row; int w, h; gboolean enabled; double scale, offset; gboolean falsecolour, type; #ifdef DEBUG printf( "iimageview_refresh\n" ); #endif /*DEBUG*/ w = IM_MAX( GTK_WIDGET( iimageview->id )->requisition.width, DISPLAY_THUMBNAIL ); h = DISPLAY_THUMBNAIL; conversion_set_image( iimageview->conv, iimage->value.ii ); gtk_widget_set_size_request( GTK_WIDGET( iimageview->id ), w, h ); gtk_widget_queue_draw( GTK_WIDGET( iimageview->id ) ); set_gcaption( iimageview->label, "%s", NN( IOBJECT( iimage )->caption ) ); /* Set scale/offset for the thumbnail. Use the prefs setting, or if * there's a setting for this image, override with that. */ enabled = DISPLAY_CONVERSION; scale = row->ws->scale; offset = row->ws->offset; falsecolour = FALSE; type = TRUE; /* If the image_width has been set, a viewer must have popped down and * set it, so the recorded settings must be valid. */ if( MODEL( iimage )->window_width != -1 ) { enabled = iimage->show_convert; scale = iimage->scale; offset = iimage->offset; falsecolour = iimage->falsecolour; type = iimage->type; } conversion_set_params( iimageview->conv, enabled, scale, offset, falsecolour, type ); VOBJECT_CLASS( parent_class )->refresh( vobject ); } static void iimageview_class_init( iImageviewClass *class ) { GtkWidgetClass *widget_class = (GtkWidgetClass *) class; vObjectClass *vobject_class = (vObjectClass *) class; ViewClass *view_class = (ViewClass *) class; parent_class = g_type_class_peek_parent( class ); /* Create signals. */ /* Init methods. */ widget_class->realize = iimageview_realize; widget_class->drag_begin = iimageview_drag_begin; widget_class->drag_end = iimageview_drag_end; widget_class->drag_data_get = iimageview_drag_data_get; widget_class->drag_data_received = iimageview_drag_data_received; vobject_class->refresh = iimageview_refresh; view_class->link = iimageview_link; } static void iimageview_doubleclick_one_cb( GtkWidget *widget, GdkEvent *event, iImageview *iimageview ) { Heapmodel *heapmodel = HEAPMODEL( VOBJECT( iimageview )->iobject ); Row *row = heapmodel->row; row_select_modifier( row, event->button.state ); } static void iimageview_doubleclick_two_cb( GtkWidget *widget, GdkEvent *event, iImageview *iimageview ) { iimageview_edit( widget, iimageview ); } static gboolean iimageview_filedrop( iImageview *iimageview, const char *file ) { iImage *iimage = IIMAGE( VOBJECT( iimageview )->iobject ); gboolean result; if( (result = iimage_replace( iimage, file )) ) symbol_recalculate_all(); return( result ); } static void iimageview_tooltip_generate( GtkWidget *widget, VipsBuf *buf, iImageview *iimageview ) { iImage *iimage = IIMAGE( VOBJECT( iimageview )->iobject ); Imageinfo *ii = iimage->value.ii; IMAGE *im = imageinfo_get( FALSE, ii ); vips_buf_rewind( buf ); vips_buf_appends( buf, vips_buf_all( &iimage->caption_buffer ) ); if( im ) { double size = (double) im->Ysize * IM_IMAGE_SIZEOF_LINE( im ); vips_buf_appends( buf, ", " ); vips_buf_append_size( buf, size ); vips_buf_appendf( buf, ", %.3gx%.3g p/mm", im->Xres, im->Yres ); } } static void iimageview_init( iImageview *iimageview ) { GtkWidget *eb; GtkWidget *vbox; #ifdef DEBUG printf( "iimageview_init\n" ); #endif /*DEBUG*/ eb = gtk_event_box_new(); gtk_box_pack_start( GTK_BOX( iimageview ), eb, FALSE, FALSE, 0 ); vbox = gtk_vbox_new( FALSE, 0 ); gtk_container_add( GTK_CONTAINER( eb ), vbox ); gtk_widget_show( vbox ); iimageview->conv = conversion_new( NULL ); iimageview->conv->tile_size = 16; iimageview->id = imagedisplay_new( iimageview->conv ); imagedisplay_set_shrink_to_fit( iimageview->id, TRUE ); gtk_box_pack_start( GTK_BOX( vbox ), GTK_WIDGET( iimageview->id ), FALSE, FALSE, 0 ); gtk_widget_show( GTK_WIDGET( iimageview->id ) ); /* Need these events in the enclosing workspaceview. */ gtk_widget_add_events( GTK_WIDGET( iimageview->id ), GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK ); iimageview->label = gtk_label_new( "" ); gtk_misc_set_alignment( GTK_MISC( iimageview->label ), 0, 0.5 ); gtk_misc_set_padding( GTK_MISC( iimageview->label ), 2, 0 ); gtk_box_pack_start( GTK_BOX( vbox ), GTK_WIDGET( iimageview->label ), FALSE, FALSE, 0 ); gtk_widget_show( GTK_WIDGET( iimageview->label ) ); /* Set as file drop destination */ filedrop_register( GTK_WIDGET( iimageview ), (FiledropFunc) iimageview_filedrop, iimageview ); doubleclick_add( GTK_WIDGET( iimageview ), FALSE, DOUBLECLICK_FUNC( iimageview_doubleclick_one_cb ), iimageview, DOUBLECLICK_FUNC( iimageview_doubleclick_two_cb ), iimageview ); set_tooltip_generate( eb, (TooltipGenerateFn) iimageview_tooltip_generate, iimageview, NULL ); gtk_widget_set_name( eb, "caption_widget" ); gtk_widget_show( GTK_WIDGET( eb ) ); } GtkType iimageview_get_type( void ) { static GtkType iimageview_type = 0; if( !iimageview_type ) { static const GtkTypeInfo info = { "iImageview", sizeof( iImageview ), sizeof( iImageviewClass ), (GtkClassInitFunc) iimageview_class_init, (GtkObjectInitFunc) iimageview_init, /* reserved_1 */ NULL, /* reserved_2 */ NULL, (GtkClassInitFunc) NULL, }; iimageview_type = gtk_type_unique( TYPE_GRAPHICVIEW, &info ); } return( iimageview_type ); } View * iimageview_new( void ) { iImageview *iimageview = gtk_type_new( TYPE_IIMAGEVIEW ); return( VIEW( iimageview ) ); } nip2-8.7.0/src/tslider.c0000644000175000017500000002742013224651032011723 00000000000000/* a slider with an entry widget */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #include "ip.h" /* Our signals. */ enum { CHANGED, ACTIVATE, SLIDER_CHANGED, TEXT_CHANGED, LAST_SIGNAL }; static GtkHBoxClass *parent_class = NULL; static guint tslider_signals[LAST_SIGNAL] = { 0 }; /* Are two doubles more or less equal. We need this when we check the sliders * for update to stop loops. The 0.0001 is a bit of a fudge :-( */ #define DEQ( A, B ) (ABS((A) - (B)) < 0.0001) static void tslider_destroy( GtkObject *object ) { Tslider *tslider; g_return_if_fail( object != NULL ); g_return_if_fail( IS_TSLIDER( object ) ); tslider = TSLIDER( object ); #ifdef DEBUG printf( "tslider_destroy: %p\n", tslider ); #endif /*DEBUG*/ /* My instance destroy stuff. */ if( tslider->adj ) { gtk_signal_disconnect_by_data( GTK_OBJECT( tslider->adj ), (gpointer) tslider ); tslider->adj = NULL; } GTK_OBJECT_CLASS( parent_class )->destroy( object ); } /* Map a value to a slider position. */ static double tslider_value_to_slider( Tslider *tslider, double value ) { /* Map our range to 0-1. */ const double scale = 1.0 / (tslider->to - tslider->from); const double to01 = (value - tslider->from) * scale; /* Pass through user fn. */ const double mapped = tslider->value_to_slider( tslider->from, tslider->to, to01 ); const double nvalue = mapped / scale + tslider->from; #ifdef DEBUG printf( "tslider_value_to_slider: %g, to %g\n", value, nvalue ); #endif /*DEBUG*/ /* Map back to main range. */ return( nvalue ); } /* Map a slider position to a value. */ static double tslider_slider_to_value( Tslider *tslider, double value ) { /* Map our range to 0-1. */ const double scale = 1.0 / (tslider->to - tslider->from); const double to01 = (value - tslider->from) * scale; /* Pass through user fn. */ const double mapped = tslider->slider_to_value( tslider->from, tslider->to, to01 ); const double nvalue = mapped / scale + tslider->from; #ifdef DEBUG printf( "tslider_slider_to_value: %g, to %g\n", value, nvalue ); #endif /*DEBUG*/ /* Map back to main range. */ return( nvalue ); } /* from/to/value have changed ... update the widgets. */ static void tslider_real_changed( Tslider *tslider ) { GtkAdjustment *adj = tslider->adj; GtkWidget *entry = tslider->entry; #ifdef DEBUG printf( "tslider_real_changed: %p, val = %g\n", tslider, tslider->value ); #endif /*DEBUG*/ if( tslider->auto_link ) tslider->svalue = tslider_value_to_slider( tslider, tslider->value ); gtk_signal_handler_block_by_data( GTK_OBJECT( adj ), tslider ); gtk_signal_handler_block_by_data( GTK_OBJECT( entry ), tslider ); /* Some libc's hate out-of-bounds precision, so clip, just in case. */ set_gentry( tslider->entry, "%.*f", IM_CLIP( 0, tslider->digits, 100 ), tslider->value ); gtk_scale_set_digits( GTK_SCALE( tslider->slider ), tslider->digits ); if( !DEQ( tslider->from, tslider->last_from ) || !DEQ( tslider->to, tslider->last_to ) ) { double range = tslider->to - tslider->from; adj->step_increment = range / 100; adj->page_increment = range / 10; adj->page_size = range / 10; adj->lower = tslider->from; adj->upper = tslider->to + adj->page_size; tslider->last_to = tslider->to; tslider->last_from = tslider->from; gtk_adjustment_changed( adj ); } if( !DEQ( tslider->svalue, tslider->last_svalue ) ) { adj->value = tslider->svalue; tslider->last_svalue = tslider->svalue; gtk_adjustment_value_changed( adj ); } gtk_signal_handler_unblock_by_data( GTK_OBJECT( adj ), tslider ); gtk_signal_handler_unblock_by_data( GTK_OBJECT( entry ), tslider ); } static void tslider_class_init( TsliderClass *class ) { GObjectClass *gobject_class = G_OBJECT_CLASS( class ); GtkObjectClass *object_class = (GtkObjectClass *) class; parent_class = g_type_class_peek_parent( class ); object_class->destroy = tslider_destroy; class->changed = tslider_real_changed; class->slider_changed = NULL; class->activate = NULL; /* Create signals. */ tslider_signals[CHANGED] = g_signal_new( "changed", G_OBJECT_CLASS_TYPE( gobject_class ), G_SIGNAL_RUN_FIRST, G_STRUCT_OFFSET( TsliderClass, changed ), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0 ); tslider_signals[ACTIVATE] = g_signal_new( "activate", G_OBJECT_CLASS_TYPE( gobject_class ), G_SIGNAL_RUN_FIRST, G_STRUCT_OFFSET( TsliderClass, activate ), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0 ); tslider_signals[SLIDER_CHANGED] = g_signal_new( "slider_changed", G_OBJECT_CLASS_TYPE( gobject_class ), G_SIGNAL_RUN_FIRST, G_STRUCT_OFFSET( TsliderClass, slider_changed ), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0 ); tslider_signals[TEXT_CHANGED] = g_signal_new( "text_changed", G_OBJECT_CLASS_TYPE( gobject_class ), G_SIGNAL_RUN_FIRST, G_STRUCT_OFFSET( TsliderClass, text_changed ), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0 ); /* Init methods. */ } /* From/to/value have changed ... tell everyone. */ void tslider_changed( Tslider *tslider ) { #ifdef DEBUG printf( "tslider_changed\n" ); #endif /*DEBUG*/ g_signal_emit( G_OBJECT( tslider ), tslider_signals[CHANGED], 0 ); } /* Activated! */ static void tslider_activate( Tslider *tslider ) { #ifdef DEBUG printf( "tslider_activate\n" ); #endif /*DEBUG*/ g_signal_emit( G_OBJECT( tslider ), tslider_signals[ACTIVATE], 0 ); } /* Just the slider changed. */ static void tslider_slider_changed( Tslider *tslider ) { #ifdef DEBUG printf( "tslider_slider_changed\n" ); #endif /*DEBUG*/ g_signal_emit( G_OBJECT( tslider ), tslider_signals[SLIDER_CHANGED], 0 ); } /* Text has been touched. */ static void tslider_text_changed( Tslider *tslider ) { #ifdef DEBUG printf( "tslider_text_changed\n" ); #endif /*DEBUG*/ g_signal_emit( G_OBJECT( tslider ), tslider_signals[TEXT_CHANGED], 0 ); } /* Enter in entry widget */ static void tslider_value_activate_cb( GtkWidget *entry, Tslider *tslider ) { double value; if( !get_geditable_double( entry, &value ) ) { iwindow_alert( entry, GTK_MESSAGE_ERROR ); return; } if( tslider->value != value ) { tslider->value = value; if( tslider->auto_link ) tslider_changed( tslider ); else tslider_activate( tslider ); } } /* Drag on slider. */ static void tslider_value_changed_cb( GtkAdjustment *adj, Tslider *tslider ) { #ifdef DEBUG printf( "tslider_value_changed_cb\n" ); #endif /*DEBUG*/ if( tslider->svalue != adj->value ) { tslider->svalue = adj->value; if( tslider->auto_link ) { tslider->value = tslider_slider_to_value( tslider, adj->value ); tslider_changed( tslider ); } else tslider_slider_changed( tslider ); } } /* Text has changed (and may need to be scanned later). */ static void tslider_text_changed_cb( GtkWidget *widget, Tslider *tslider ) { #ifdef DEBUG printf( "tslider_text_changed_cb\n" ); #endif /*DEBUG*/ tslider_text_changed( tslider ); } /* Default identity conversion. */ static double tslider_conversion_id( double from, double to, double value ) { return( value ); } static gboolean tslider_scroll_cb( GtkWidget *wid, GdkEvent *event, Tslider *tslider ) { gboolean handled; handled = FALSE; /* Stop any other scroll handlers running. We don't want the scroll * wheel to change widgets while we're moving. */ if( tslider->ignore_scroll ) handled = TRUE; return( handled ); } static void tslider_init( Tslider *tslider ) { #ifdef DEBUG printf( "tslider_init: %p\n", tslider ); #endif /*DEBUG*/ /* Any old start values ... overridden later. */ tslider->from = -1; tslider->to = -1; tslider->value = -1; tslider->svalue = -1; tslider->digits = -1; tslider->last_to = -1; tslider->last_from = -1; tslider->last_svalue = -1; tslider->ignore_scroll = TRUE; gtk_box_set_spacing( GTK_BOX( tslider ), 2 ); tslider->entry = build_entry( 5 ); gtk_entry_set_max_length( GTK_ENTRY( tslider->entry ), 10 ); set_tooltip( tslider->entry, _( "Slider value ... edit!" ) ); gtk_box_pack_start( GTK_BOX( tslider ), tslider->entry, FALSE, FALSE, 0 ); gtk_signal_connect( GTK_OBJECT( tslider->entry ), "activate", GTK_SIGNAL_FUNC( tslider_value_activate_cb ), tslider ); gtk_signal_connect( GTK_OBJECT( tslider->entry ), "changed", GTK_SIGNAL_FUNC( tslider_text_changed_cb ), tslider ); gtk_widget_show( tslider->entry ); tslider->slider = gtk_hscale_new( NULL ); tslider->adj = gtk_range_get_adjustment( GTK_RANGE( tslider->slider ) ); gtk_range_set_update_policy( GTK_RANGE( tslider->slider ), GTK_UPDATE_CONTINUOUS ); #ifdef DEBUG gtk_range_set_update_policy( GTK_RANGE( tslider->slider ), GTK_UPDATE_DISCONTINUOUS ); #endif /*DEBUG*/ gtk_scale_set_draw_value( GTK_SCALE( tslider->slider ), FALSE ); gtk_widget_set_size_request( GTK_WIDGET( tslider->slider ), 100, -1 ); gtk_box_pack_start( GTK_BOX( tslider ), tslider->slider, TRUE, TRUE, 0 ); set_tooltip( tslider->slider, _( "Left-drag to set number" ) ); gtk_signal_connect( GTK_OBJECT( tslider->adj ), "value_changed", GTK_SIGNAL_FUNC( tslider_value_changed_cb ), tslider ); g_signal_connect( tslider->slider, "scroll-event", G_CALLBACK( tslider_scroll_cb ), tslider ); gtk_widget_show( tslider->slider ); tslider->auto_link = TRUE; tslider->slider_to_value = tslider_conversion_id; tslider->value_to_slider = tslider_conversion_id; } GtkType tslider_get_type( void ) { static GtkType tslider_type = 0; if( !tslider_type ) { static const GtkTypeInfo sinfo = { "Tslider", sizeof( Tslider ), sizeof( TsliderClass ), (GtkClassInitFunc) tslider_class_init, (GtkObjectInitFunc) tslider_init, /* reserved_1 */ NULL, /* reserved_2 */ NULL, (GtkClassInitFunc) NULL, }; tslider_type = gtk_type_unique( GTK_TYPE_HBOX, &sinfo ); } return( tslider_type ); } Tslider * tslider_new() { Tslider *tslider = gtk_type_new( TYPE_TSLIDER ); return( tslider ); } void tslider_set_conversions( Tslider *tslider, tslider_fn value_to_slider, tslider_fn slider_to_value ) { tslider->value_to_slider = value_to_slider; tslider->slider_to_value = slider_to_value; tslider->auto_link = value_to_slider && slider_to_value; } double tslider_log_value_to_slider( double from, double to, double value ) { /* What does 1.0 map to on our [0,1] scale? */ const double mapped1 = (1.0 - from) / (to - from); /* We want an exponent which maps the mid point on the slider to 1. */ const double a = log( mapped1 ) / log( 0.5 ); const double nvalue = pow( value, 1.0 / a ); return( nvalue ); } double tslider_log_slider_to_value( double from, double to, double value ) { /* What does 1.0 map to on our [0,1] scale? */ const double mapped1 = (1.0 - from) / (to - from); /* We want an exponent which maps the mid point on the slider to 1. */ const double a = log( mapped1 ) / log( 0.5 ); const double nvalue = pow( value, a ); return( nvalue ); } void tslider_set_ignore_scroll( Tslider *tslider, gboolean ignore_scroll ) { tslider->ignore_scroll = ignore_scroll; } nip2-8.7.0/src/toolkitbrowser.c0000644000175000017500000002306313224651032013345 00000000000000/* Toolkitbrowser dialog. */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #include "ip.h" static ViewClass *parent_class = NULL; /* Our columns. */ enum { TOOLTIP_COLUMN, /* Visible columns */ MENU_COLUMN, NPARAM_COLUMN, TOOLITEM_COLUMN, /* Secret column */ N_COLUMNS }; static void toolkitbrowser_destroy( GtkObject *object ) { Toolkitbrowser *toolkitbrowser = TOOLKITBROWSER( object ); UNREF( toolkitbrowser->filter ); UNREF( toolkitbrowser->store ); GTK_OBJECT_CLASS( parent_class )->destroy( object ); } static void * toolkitbrowser_rebuild_item_sub( Symbol *param, VipsBuf *buf ) { vips_buf_appends( buf, " " ); vips_buf_appends( buf, IOBJECT( param )->name ); return( NULL ); } static void * toolkitbrowser_rebuild_item3( Toolitem *toolitem, Toolkitbrowser *toolkitbrowser ) { if( !toolitem->is_pullright && !toolitem->is_separator && toolitem->compile ) { char txt[256]; VipsBuf buf = VIPS_BUF_STATIC( txt ); GtkTreeIter iter; if( toolitem->action_sym && toolitem->action_sym->expr && toolitem->action_sym->expr->compile->param ) slist_map( toolitem->action_sym->expr->compile->param, (SListMapFn) toolkitbrowser_rebuild_item_sub, &buf ); gtk_list_store_append( toolkitbrowser->store, &iter ); gtk_list_store_set( toolkitbrowser->store, &iter, TOOLTIP_COLUMN, toolitem->tooltip, MENU_COLUMN, toolitem->user_path, NPARAM_COLUMN, vips_buf_all( &buf ), TOOLITEM_COLUMN, toolitem, -1 ); } slist_map( toolitem->children, (SListMapFn) toolkitbrowser_rebuild_item3, toolkitbrowser ); return( NULL ); } static void * toolkitbrowser_rebuild_item2( Tool *tool, Toolkitbrowser *toolkitbrowser ) { if( tool->toolitem ) toolkitbrowser_rebuild_item3( tool->toolitem, toolkitbrowser ); return( NULL ); } static void * toolkitbrowser_rebuild_item( Toolkit *kit, Toolkitbrowser *toolkitbrowser ) { toolkit_map( kit, (tool_map_fn) toolkitbrowser_rebuild_item2, toolkitbrowser, NULL ); return( NULL ); } static void toolkitbrowser_refresh( vObject *vobject ) { Toolkitbrowser *toolkitbrowser = TOOLKITBROWSER( vobject ); #ifdef DEBUG printf( "toolkitbrowser_refresh:\n" ); #endif /*DEBUG*/ gtk_list_store_clear( toolkitbrowser->store ); toolkitgroup_map( toolkitbrowser->kitg, (toolkit_map_fn) toolkitbrowser_rebuild_item, toolkitbrowser, NULL ); VOBJECT_CLASS( parent_class )->refresh( vobject ); } static void toolkitbrowser_link( vObject *vobject, iObject *iobject ) { Toolkitbrowser *toolkitbrowser = TOOLKITBROWSER( vobject ); Toolkitgroup *kitg = TOOLKITGROUP( iobject ); g_assert( !toolkitbrowser->kitg ); toolkitbrowser->kitg = kitg; VOBJECT_CLASS( parent_class )->link( vobject, iobject ); } static void toolkitbrowser_class_init( ToolkitbrowserClass *class ) { GtkObjectClass *object_class = (GtkObjectClass *) class; vObjectClass *vobject_class = (vObjectClass *) class; parent_class = g_type_class_peek_parent( class ); object_class->destroy = toolkitbrowser_destroy; vobject_class->refresh = toolkitbrowser_refresh; vobject_class->link = toolkitbrowser_link; } static void toolkitbrowser_entry_changed_cb( GtkEditable *editable, Toolkitbrowser *toolkitbrowser ) { gtk_tree_model_filter_refilter( GTK_TREE_MODEL_FILTER( toolkitbrowser->filter ) ); } static gboolean toolkitbrowser_rebuild_test( Toolitem *toolitem, const char *text ) { if( my_strcasestr( toolitem->user_path, text ) || my_strcasestr( toolitem->tooltip, text ) ) return( TRUE ); return( FALSE ); } static gboolean toolkitbrowser_visible_func( GtkTreeModel *model, GtkTreeIter *iter, gpointer data ) { Toolkitbrowser *toolkitbrowser = TOOLKITBROWSER( data ); const char *text = gtk_entry_get_text( GTK_ENTRY( toolkitbrowser->entry ) ); Toolitem *toolitem; gtk_tree_model_get( model, iter, TOOLITEM_COLUMN, &toolitem, -1 ); if( !toolitem ) return( FALSE ); return( toolkitbrowser_rebuild_test( toolitem, text ) ); } static Toolitem * toolkitbrowser_get_selected( Toolkitbrowser *toolkitbrowser ) { GtkTreeSelection *selection = gtk_tree_view_get_selection( GTK_TREE_VIEW( toolkitbrowser->tree ) ); GtkTreeIter iter; GtkTreeModel *model; Toolitem *toolitem; if( gtk_tree_selection_get_selected( selection, &model, &iter ) ) { gtk_tree_model_get( model, &iter, TOOLITEM_COLUMN, &toolitem, -1 ); return( toolitem ); } return( NULL ); } static gboolean toolkitbrowser_activate_selected( Toolkitbrowser *toolkitbrowser ) { Toolitem *toolitem; if( (toolitem = toolkitbrowser_get_selected( toolkitbrowser )) ) { if( !workspace_add_action( toolkitbrowser->ws, toolitem->name, toolitem->action, toolitem->action_sym->expr->compile->nparam ) ) return( FALSE ); } return( TRUE ); } static void toolkitbrowser_row_activated_cb( GtkTreeView *treeview, GtkTreePath *arg1, GtkTreeViewColumn *arg2, Toolkitbrowser *toolkitbrowser ) { if( !toolkitbrowser_activate_selected( toolkitbrowser ) ) iwindow_alert( GTK_WIDGET( toolkitbrowser ), GTK_MESSAGE_ERROR ); } static void toolkitbrowser_init( Toolkitbrowser *toolkitbrowser ) { GtkCellRenderer *renderer; GtkTreeViewColumn *column; GtkWidget *label; GtkWidget *swin; toolkitbrowser->top = gtk_hbox_new( FALSE, 12 ); toolkitbrowser->entry = gtk_entry_new(); gtk_signal_connect( GTK_OBJECT( toolkitbrowser->entry ), "changed", GTK_SIGNAL_FUNC( toolkitbrowser_entry_changed_cb ), toolkitbrowser ); gtk_box_pack_end( GTK_BOX( toolkitbrowser->top ), toolkitbrowser->entry, FALSE, FALSE, 2 ); label = gtk_image_new_from_stock( GTK_STOCK_FIND, GTK_ICON_SIZE_MENU ); gtk_box_pack_end( GTK_BOX( toolkitbrowser->top ), label, FALSE, FALSE, 0 ); gtk_box_pack_start( GTK_BOX( toolkitbrowser ), toolkitbrowser->top, FALSE, FALSE, 2 ); gtk_widget_show_all( toolkitbrowser->top ); toolkitbrowser->store = gtk_list_store_new( N_COLUMNS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_POINTER ); toolkitbrowser->filter = gtk_tree_model_filter_new( GTK_TREE_MODEL( toolkitbrowser->store ), NULL ); gtk_tree_model_filter_set_visible_func( GTK_TREE_MODEL_FILTER( toolkitbrowser->filter ), toolkitbrowser_visible_func, toolkitbrowser, NULL ); toolkitbrowser->tree = gtk_tree_view_new_with_model( GTK_TREE_MODEL( toolkitbrowser->filter ) ); gtk_tree_view_set_rules_hint( GTK_TREE_VIEW( toolkitbrowser->tree ), TRUE ); renderer = gtk_cell_renderer_text_new(); column = gtk_tree_view_column_new_with_attributes( _( "Action" ), renderer, "text", TOOLTIP_COLUMN, NULL ); gtk_tree_view_column_set_resizable( column, TRUE ); gtk_tree_view_column_set_reorderable( column, TRUE ); gtk_tree_view_append_column( GTK_TREE_VIEW( toolkitbrowser->tree ), column ); renderer = gtk_cell_renderer_text_new(); column = gtk_tree_view_column_new_with_attributes( _( "Parameters" ), renderer, "text", NPARAM_COLUMN, NULL ); gtk_tree_view_column_set_resizable( column, TRUE ); gtk_tree_view_column_set_reorderable( column, TRUE ); gtk_tree_view_append_column( GTK_TREE_VIEW( toolkitbrowser->tree ), column ); renderer = gtk_cell_renderer_text_new(); column = gtk_tree_view_column_new_with_attributes( _( "Menu Item" ), renderer, "text", MENU_COLUMN, NULL ); gtk_tree_view_column_set_resizable( column, TRUE ); gtk_tree_view_column_set_reorderable( column, TRUE ); gtk_tree_view_append_column( GTK_TREE_VIEW( toolkitbrowser->tree ), column ); g_signal_connect( G_OBJECT( toolkitbrowser->tree ), "row-activated", G_CALLBACK( toolkitbrowser_row_activated_cb ), toolkitbrowser ); swin = gtk_scrolled_window_new( NULL, NULL ); gtk_scrolled_window_set_policy( GTK_SCROLLED_WINDOW( swin ), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC ); gtk_container_add( GTK_CONTAINER( swin ), toolkitbrowser->tree ); gtk_box_pack_start( GTK_BOX( toolkitbrowser ), swin, TRUE, TRUE, 2 ); gtk_widget_show_all( swin ); } GtkType toolkitbrowser_get_type( void ) { static GtkType type = 0; if( !type ) { static const GtkTypeInfo info = { "Toolkitbrowser", sizeof( Toolkitbrowser ), sizeof( ToolkitbrowserClass ), (GtkClassInitFunc) toolkitbrowser_class_init, (GtkObjectInitFunc) toolkitbrowser_init, /* reserved_1 */ NULL, /* reserved_2 */ NULL, (GtkClassInitFunc) NULL, }; type = gtk_type_unique( TYPE_VOBJECT, &info ); } return( type ); } Toolkitbrowser * toolkitbrowser_new( void ) { Toolkitbrowser *toolkitbrowser = gtk_type_new( TYPE_TOOLKITBROWSER ); return( toolkitbrowser ); } /* Find the 'natural' width of the browser. */ int toolkitbrowser_get_width( Toolkitbrowser *toolkitbrowser ) { if( toolkitbrowser->top ) return( toolkitbrowser->top->requisition.width ); else return( 200 ); } void toolkitbrowser_set_workspace( Toolkitbrowser *toolkitbrowser, Workspace *ws ) { g_assert( !toolkitbrowser->ws ); toolkitbrowser->ws = ws; } nip2-8.7.0/src/columnview.c0000644000175000017500000010062313224651032012442 00000000000000/* a view of a column */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #include "ip.h" static ViewClass *parent_class = NULL; /* The columnview popup menu. */ static GtkWidget *columnview_menu = NULL; /* Edit caption ... right button menu on title bar. */ static void columnview_caption_cb( GtkWidget *wid, GtkWidget *host, Columnview *cview ) { /* Edit caption! */ if( cview->state == COL_EDIT ) return; cview->state = COL_EDIT; vobject_refresh_queue( VOBJECT( cview ) ); } /* Select all objects in menu's column. */ static void columnview_select_cb( GtkWidget *wid, GtkWidget *host, Columnview *cview ) { Column *col = COLUMN( VOBJECT( cview )->iobject ); Workspace *ws = col->ws; workspace_deselect_all( ws ); column_select_symbols( col ); } /* Clone a column. */ static void columnview_clone_cb( GtkWidget *wid, GtkWidget *host, Columnview *cview ) { Column *col = COLUMN( VOBJECT( cview )->iobject ); Workspace *ws = col->ws; char new_name[MAX_STRSIZE]; Column *newcol; workspace_column_name_new( ws, new_name ); newcol = workspace_column_get( ws, new_name ); iobject_set( IOBJECT( newcol ), NULL, IOBJECT( col )->caption ); newcol->x = col->x + 100; newcol->y = col->y; workspace_deselect_all( ws ); column_select_symbols( col ); workspace_column_select( ws, newcol ); if( !workspace_selected_duplicate( ws ) ) iwindow_alert( GTK_WIDGET( cview ), GTK_MESSAGE_ERROR ); workspace_deselect_all( ws ); symbol_recalculate_all(); } static void columnview_merge_sub( iWindow *iwnd, void *client, iWindowNotifyFn nfn, void *sys ) { Filesel *filesel = FILESEL( iwnd ); Column *col = COLUMN( client ); Workspace *ws = col->ws; Workspacegroup *wsg = workspace_get_workspacegroup( ws ); char *filename; iWindowResult result; result = IWINDOW_YES; progress_begin(); if( (filename = filesel_get_filename( filesel )) ) { if( !workspacegroup_merge_rows( wsg, filename ) ) result = IWINDOW_ERROR; g_free( filename ); } symbol_recalculate_all(); progress_end(); nfn( sys, result ); } static void columnview_merge_cb( GtkWidget *wid, GtkWidget *host, Columnview *cview ) { Column *col = COLUMN( VOBJECT( cview )->iobject ); iWindow *iwnd = IWINDOW( view_get_toplevel( VIEW( cview ) ) ); GtkWidget *filesel = filesel_new(); iwindow_set_title( IWINDOW( filesel ), _( "Merge Into Column \"%s\"" ), IOBJECT( col )->name ); filesel_set_flags( FILESEL( filesel ), FALSE, FALSE ); filesel_set_filetype( FILESEL( filesel ), filesel_type_workspace, 0 ); iwindow_set_parent( IWINDOW( filesel ), GTK_WIDGET( iwnd ) ); idialog_set_iobject( IDIALOG( filesel ), IOBJECT( col ) ); filesel_set_done( FILESEL( filesel ), columnview_merge_sub, col ); iwindow_build( IWINDOW( filesel ) ); gtk_widget_show( GTK_WIDGET( filesel ) ); } /* Callback from save browser. */ static void columnview_save_as_sub( iWindow *iwnd, void *client, iWindowNotifyFn nfn, void *sys ) { Filesel *filesel = FILESEL( iwnd ); Column *col = COLUMN( client ); Workspace *ws = col->ws; char *filename; workspace_deselect_all( ws ); column_select_symbols( col ); if( (filename = filesel_get_filename( filesel )) ) { if( workspace_selected_save( ws, filename ) ) { workspace_deselect_all( ws ); nfn( sys, IWINDOW_YES ); } else nfn( sys, IWINDOW_ERROR ); g_free( filename ); } else nfn( sys, IWINDOW_ERROR ); } /* Save a column ... can't just do view_save_as_cb(), since we need to save * the enclosing workspace too. Hence we have to save_selected on the ws, but * only after we have the filename. */ static void columnview_save_as_cb( GtkWidget *wid, GtkWidget *host, Columnview *cview ) { Column *col = COLUMN( VOBJECT( cview )->iobject ); iWindow *iwnd = IWINDOW( view_get_toplevel( VIEW( cview ) ) ); GtkWidget *filesel = filesel_new(); iwindow_set_title( IWINDOW( filesel ), _( "Save Column \"%s\"" ), IOBJECT( col )->name ); filesel_set_flags( FILESEL( filesel ), FALSE, TRUE ); filesel_set_filetype( FILESEL( filesel ), filesel_type_workspace, 0 ); iwindow_set_parent( IWINDOW( filesel ), GTK_WIDGET( iwnd ) ); idialog_set_iobject( IDIALOG( filesel ), IOBJECT( col ) ); filesel_set_done( FILESEL( filesel ), columnview_save_as_sub, col ); iwindow_build( IWINDOW( filesel ) ); gtk_widget_show( GTK_WIDGET( filesel ) ); } /* Make a name for a column menu file, based on what we're going to call the * menu item. */ static void columnview_filename( char *file, const char *caption ) { int i; char name[FILENAME_MAX]; im_strncpy( name, caption, 10 ); for( i = 0; i < strlen( name ); i++ ) if( name[i] == ' ' ) name[i] = '_'; for( i = 0; ; i++ ) { im_snprintf( file, FILENAME_MAX, "$SAVEDIR" G_DIR_SEPARATOR_S "data" G_DIR_SEPARATOR_S "%s-%d.ws", name, i ); if( !existsf( "%s", file ) ) break; } } /* Remember the name of the last toolkit the user asked to add to. */ static char *columnview_to_menu_last_toolkit = NULL; /* Done button hit. */ static void columnview_to_menu_done_cb( iWindow *iwnd, void *client, iWindowNotifyFn nfn, void *sys ) { Column *col = COLUMN( client ); Workspace *ws = col->ws; Stringset *ss = STRINGSET( iwnd ); StringsetChild *name = stringset_child_get( ss, _( "Name" ) ); StringsetChild *toolkit = stringset_child_get( ss, _( "Toolkit" ) ); StringsetChild *file = stringset_child_get( ss, _( "Filename" ) ); char name_text[1024]; char toolkit_text[1024]; char file_text[1024]; if( !get_geditable_string( name->entry, name_text, 1024 ) || !get_geditable_name( toolkit->entry, toolkit_text, 1024 ) || !get_geditable_filename( file->entry, file_text, 1024 ) ) { nfn( sys, IWINDOW_ERROR ); return; } /* Save column to file. */ workspace_deselect_all( ws ); column_select_symbols( col ); if( !workspace_selected_save( ws, file_text ) ) { nfn( sys, IWINDOW_ERROR ); return; } workspace_deselect_all( ws ); if( !tool_new_dia( toolkit_by_name( ws->kitg, toolkit_text ), -1, name_text, file_text ) ) { unlinkf( "%s", file_text ); nfn( sys, IWINDOW_ERROR ); return; } IM_SETSTR( columnview_to_menu_last_toolkit, toolkit_text ); nfn( sys, IWINDOW_YES ); } /* Make a column into a menu item. */ static void columnview_to_menu_cb( GtkWidget *wid, GtkWidget *host, Columnview *cview ) { Column *col = COLUMN( VOBJECT( cview )->iobject ); iWindow *iwnd = IWINDOW( view_get_toplevel( VIEW( cview ) ) ); GtkWidget *ss = stringset_new(); char *name; char *kit_name; char filename[FILENAME_MAX]; if( !(name = IOBJECT( col )->caption) ) name = "untitled"; columnview_filename( filename, name ); if( columnview_to_menu_last_toolkit ) kit_name = columnview_to_menu_last_toolkit; else kit_name = "untitled"; stringset_child_new( STRINGSET( ss ), _( "Name" ), name, _( "Set menu item text here" ) ); stringset_child_new( STRINGSET( ss ), _( "Toolkit" ), kit_name, _( "Add to this toolkit" ) ); stringset_child_new( STRINGSET( ss ), _( "Filename" ), filename, _( "Store column in this file" ) ); iwindow_set_title( IWINDOW( ss ), _( "New Menu Item from Column \"%s\"" ), IOBJECT( col )->name ); idialog_set_callbacks( IDIALOG( ss ), iwindow_true_cb, NULL, NULL, col ); idialog_set_help_tag( IDIALOG( ss ), "sec:diaref" ); idialog_add_ok( IDIALOG( ss ), columnview_to_menu_done_cb, _( "Menuize" ) ); iwindow_set_parent( IWINDOW( ss ), GTK_WIDGET( iwnd ) ); iwindow_build( IWINDOW( ss ) ); gtk_widget_show( ss ); } /* Find the position and size of a columnview. */ void columnview_get_position( Columnview *cview, int *x, int *y, int *w, int *h ) { Column *col = COLUMN( VOBJECT( cview )->iobject ); if( GTK_WIDGET( cview )->allocation.x < 2 || GTK_WIDGET( cview )->allocation.y < 2 ) { /* Nothing there yet, guess. */ *x = col->x; *y = col->y; *w = 200; *h = 50; } else { *x = GTK_WIDGET( cview )->allocation.x; *y = GTK_WIDGET( cview )->allocation.y; *w = GTK_WIDGET( cview )->allocation.width; *h = GTK_WIDGET( cview )->allocation.height; #ifdef DEBUG printf( "columnview_get_position: %s, " "x = %d, y = %d, w = %d, h = %d\n", IOBJECT( col )->name, *x, *y, *w, *h ); #endif /*DEBUG*/ } } /* Transition functions for mouse stuff on columnviews. */ static void columnview_left_press( Columnview *cview, GdkEvent *ev ) { Workspaceview *wview = cview->wview; int ix, iy; int jx, jy; int kx, ky; int wx, wy, ww, wh; #ifdef DEBUG printf( "columnview_left_press\n" ); #endif /*DEBUG*/ /* Find pos of columnview. */ columnview_get_position( cview, &wx, &wy, &ww, &wh ); /* Position in virtual tally window. */ ix = ev->button.x + wx; iy = ev->button.y + wy; /* Position in tally viewport. */ jx = ix - wview->vp.left; jy = iy - wview->vp.top; /* So ... position of top LH corner of tally viewport in root window. */ kx = ev->button.x_root - jx; ky = ev->button.y_root - jy; switch( cview->state ) { case COL_WAIT: cview->state = COL_SELECT; /* Record offset of mouse in columnview title bar. */ cview->rx = ev->button.x; cview->ry = ev->button.y; /* Position of tally window in root window. */ cview->tx = kx; cview->ty = ky; /* Start position of mouse in virtual tally window. */ cview->sx = ix; cview->sy = iy; break; case COL_SELECT: case COL_DRAG: case COL_EDIT: break; default: g_assert( FALSE ); } } static void columnview_add_shadow( Columnview *old_cview ) { Column *col = COLUMN( VOBJECT( old_cview )->iobject ); Workspaceview *wview = old_cview->wview; if( !old_cview->shadow ) { Columnview *new_cview; new_cview = COLUMNVIEW( columnview_new() ); new_cview->wview = wview; VIEW( new_cview )->parent = VIEW( wview ); VOBJECT( new_cview )->iobject = IOBJECT( col ); gtk_fixed_put( GTK_FIXED( wview->fixed ), GTK_WIDGET( new_cview ), col->x, col->y ); gtk_widget_show( GTK_WIDGET( new_cview ) ); old_cview->shadow = new_cview; new_cview->master = old_cview; /* The shadow will be on top of the real column and hide it. * Put the real column to the front. */ model_front( MODEL( col ) ); } } static void columnview_left_motion( Columnview *cview, GdkEvent *ev ) { Column *col = COLUMN( VOBJECT( cview )->iobject ); Workspace *ws = col->ws; Workspaceview *wview = cview->wview; int u, v; /* Posn of pointer in tally viewport. */ int ix = ev->motion.x_root - cview->tx; int iy = ev->motion.y_root - cview->ty; /* Posn in virtual tally cods. */ int jx = ix + wview->vp.left; int jy = iy + wview->vp.top; /* Amount of drag since we started. */ int xoff = jx - cview->sx; int yoff = jy - cview->sy; /* New columnview position. */ int xnew = IM_MAX( 0, jx - cview->rx ); int ynew = IM_MAX( 0, jy - cview->ry ); #ifdef DEBUG printf( "columnview_left_motion\n" ); #endif /*DEBUG*/ switch( cview->state ) { case COL_EDIT: case COL_WAIT: break; case COL_SELECT: /* How much drag? */ if( abs( xoff ) > 5 || abs( yoff ) > 5 ) { cview->state = COL_DRAG; workspaceview_set_cursor( wview, IWINDOW_SHAPE_MOVE ); gtk_grab_add( cview->title ); columnview_add_shadow( cview ); } break; case COL_DRAG: col->x = xnew; col->y = ynew; iobject_changed( IOBJECT( col ) ); #ifdef DEBUG printf( "drag columnview: x=%d, y=%d", col->x, col->y ); #endif /*DEBUG*/ /* Set vars for bg scroll. */ u = 0; if( ix > wview->vp.width ) u = 10; else if( ix < 0 ) u = -10; v = 0; if( iy > wview->vp.height ) v = 10; else if( iy < 0 ) v = -10; workspaceview_scroll_background( wview, u, v ); /* Move other columns about. */ model_layout( MODEL( ws ) ); break; default: g_assert( FALSE ); } } static void columnview_left_release( Columnview *cview, GdkEvent *ev ) { Column *col = COLUMN( VOBJECT( cview )->iobject ); Workspace *ws = col->ws; Workspaceview *wview = cview->wview; #ifdef DEBUG printf( "columnview_left_release\n" ); #endif /*DEBUG*/ /* Back to wait. */ switch( cview->state ) { case COL_SELECT: cview->state = COL_WAIT; workspace_column_select( ws, col ); break; case COL_DRAG: cview->state = COL_WAIT; workspaceview_scroll_background( wview, 0, 0 ); workspaceview_set_cursor( wview, IWINDOW_SHAPE_NONE ); gtk_grab_remove( cview->title ); DESTROY_GTK( cview->shadow ); /* Move columns to their final position. */ model_layout( MODEL( ws ) ); workspace_set_modified( ws, TRUE ); break; case COL_EDIT: case COL_WAIT: break; default: g_assert( FALSE ); } } /* Event in columnview title bar. */ static gboolean columnview_title_event_cb( GtkWidget *widget, GdkEvent *ev, Columnview *cview ) { gboolean handled = FALSE; #ifdef DEBUG { Column *col = COLUMN( VOBJECT( cview )->iobject ); printf( "columnview_title_event_cb: %s %d\n", IOBJECT( col )->name, ev->type ); } #endif /*DEBUG*/ switch( ev->type ) { case GDK_BUTTON_PRESS: if( ev->button.button == 1 ) { columnview_left_press( cview, ev ); handled = TRUE; } break; case GDK_2BUTTON_PRESS: if( ev->button.button == 1 ) { if( cview->state != COL_EDIT ) { cview->state = COL_EDIT; vobject_refresh_queue( VOBJECT( cview ) ); } handled = TRUE; } break; case GDK_MOTION_NOTIFY: if( ev->motion.state & GDK_BUTTON1_MASK ) { columnview_left_motion( cview, ev ); handled = TRUE; } break; case GDK_BUTTON_RELEASE: if( ev->button.button == 1 ) { columnview_left_release( cview, ev ); handled = TRUE; } break; default: break; } return( handled ); } static void columnview_destroy( GtkObject *object ) { Columnview *cview; Column *col; g_return_if_fail( object != NULL ); g_return_if_fail( IS_COLUMNVIEW( object ) ); cview = COLUMNVIEW( object ); col = COLUMN( VOBJECT( cview )->iobject ); #ifdef DEBUG printf( "columnview_destroy:\n" ); #endif /*DEBUG*/ DESTROY_GTK( cview->shadow ); /* The column has gone .. relayout. */ if( col && col->ws ) { workspace_set_needs_layout( col->ws, TRUE ); mainw_layout(); } GTK_OBJECT_CLASS( parent_class )->destroy( object ); } static void columnview_size_allocate( GtkWidget *widget, GtkAllocation *allocation ) { Columnview *cview = COLUMNVIEW( widget ); if( cview->old_width != allocation->width || cview->old_height != allocation->height ) { Column *col = COLUMN( VOBJECT( cview )->iobject ); Workspace *ws = col->ws; cview->old_width = allocation->width; cview->old_height = allocation->height; workspace_set_needs_layout( ws, TRUE ); mainw_layout(); } GTK_WIDGET_CLASS( parent_class )->size_allocate( widget, allocation ); } /* Arrow button on title bar. */ static void columnview_updown_cb( GtkWidget *wid, Columnview *cview ) { Column *col = COLUMN( VOBJECT( cview )->iobject ); column_set_open( col, !col->open ); } /* Delete this column from the popup menu. */ static void columnview_destroy_cb( GtkWidget *wid, GtkWidget *host, Columnview *cview ) { Column *col = COLUMN( VOBJECT( cview )->iobject ); model_check_destroy( view_get_toplevel( VIEW( cview ) ), MODEL( col ), NULL ); } /* Delete this column with a click on the 'x' button. */ static void columnview_destroy2_cb( GtkWidget *wid, Columnview *cview ) { Column *col = COLUMN( VOBJECT( cview )->iobject ); model_check_destroy( view_get_toplevel( VIEW( cview ) ), MODEL( col ), NULL ); } /* Callback for enter in caption edit box. */ static void columnview_caption_enter_cb( GtkWidget *wid, Columnview *cview ) { const char *text = gtk_entry_get_text( GTK_ENTRY( cview->capedit ) ); Column *col = COLUMN( VOBJECT( cview )->iobject ); Workspace *ws = col->ws; cview->state = COL_WAIT; iobject_changed( IOBJECT( col ) ); if( strcmp( text, "" ) != 0 ) iobject_set( IOBJECT( col ), NULL, text ); workspace_set_modified( ws, TRUE ); /* The ws view needs to update the jumpto menus. */ iobject_changed( IOBJECT( ws ) ); } /* Detect cancel in a caption field. */ static gboolean columnview_caption_cancel_cb( GtkWidget *widget, GdkEvent *ev, Columnview *cview ) { if( ev->type != GDK_KEY_PRESS || ev->key.keyval != GDK_Escape ) return( FALSE ); /* Turn off edit. */ cview->state = COL_WAIT; vobject_refresh_queue( VOBJECT( cview ) ); return( TRUE ); } /* Add a caption entry to a columnview if not there. */ static void columnview_add_caption( Columnview *cview ) { if( cview->capedit ) return; cview->capedit = gtk_entry_new(); gtk_entry_set_has_frame( GTK_ENTRY( cview->capedit ), FALSE ); gtk_box_pack_start( GTK_BOX( cview->titlehb ), cview->capedit, FALSE, FALSE, 0 ); set_tooltip( cview->capedit, _( "Edit caption, press enter to " "accept changes, press escape to cancel" ) ); gtk_signal_connect( GTK_OBJECT( cview->capedit ), "activate", GTK_SIGNAL_FUNC( columnview_caption_enter_cb ), cview ); gtk_signal_connect( GTK_OBJECT( cview->capedit ), "event", GTK_SIGNAL_FUNC( columnview_caption_cancel_cb ), cview ); } /* Callback for enter in new def widget. */ static void columnview_text_enter_cb( GtkWidget *wid, Columnview *cview ) { const char *text = gtk_entry_get_text( GTK_ENTRY( cview->text ) ); Column *col = COLUMN( VOBJECT( cview )->iobject ); Workspace *ws = col->ws; Symbol *sym; if( !text || strspn( text, WHITESPACE ) == strlen( text ) ) return; if( !(sym = workspace_add_def_recalc( ws, text )) ) { iwindow_alert( wid, GTK_MESSAGE_ERROR ); symbol_recalculate_all(); return; } set_gentry( cview->text, NULL ); } /* Add bottom entry widget. */ static void columnview_add_text( Columnview *cview ) { GtkWidget *inv; if( cview->textfr ) return; cview->textfr = gtk_hbox_new( FALSE, 0 ); gtk_box_pack_end( GTK_BOX( cview->vbox ), cview->textfr, FALSE, FALSE, 0 ); inv = gtk_label_new( "" ); gtk_box_pack_start( GTK_BOX( cview->textfr ), inv, FALSE, FALSE, 25 ); gtk_widget_show( inv ); cview->text = gtk_entry_new(); gtk_box_pack_start( GTK_BOX( cview->textfr ), cview->text, TRUE, TRUE, 0 ); gtk_signal_connect( GTK_OBJECT( cview->text ), "activate", GTK_SIGNAL_FUNC( columnview_text_enter_cb ), cview ); gtk_widget_show( cview->text ); set_tooltip( cview->text, _( "Enter expressions here" ) ); } static void columnview_refresh( vObject *vobject ) { Columnview *cview = COLUMNVIEW( vobject ); Columnview *shadow = cview->shadow; Column *col = COLUMN( VOBJECT( cview )->iobject ); gboolean editable = col->ws->mode != WORKSPACE_MODE_NOEDIT; #ifdef DEBUG printf( "columnview_refresh: %s\n", IOBJECT( col )->name ); #endif /*DEBUG*/ /* If this column has a shadow, workspaceview will have put a layout * position into it. See workspaceview_layout_set_pos(). */ if( shadow ) view_child_position( VIEW( shadow ) ); if( shadow ) { gtk_widget_set_size_request( GTK_WIDGET( shadow->frame ), GTK_WIDGET( cview->frame )->allocation.width, GTK_WIDGET( cview->frame )->allocation.height ); gtk_frame_set_shadow_type( GTK_FRAME( shadow->frame ), GTK_SHADOW_IN ); } if( col->x != cview->lx || col->y != cview->ly ) { #ifdef DEBUG printf( "columnview_refresh: move column %s to %d x %d\n", IOBJECT( col )->name, col->x, col->y ); #endif /*DEBUG*/ cview->lx = col->x; cview->ly = col->y; view_child_position( VIEW( cview ) ); /* Update the save offset hints too. */ filemodel_set_offset( FILEMODEL( col ), cview->lx, cview->ly ); } /* Turn titlebar on/off. */ widget_visible( cview->title, editable ); if( editable ) gtk_frame_set_label( GTK_FRAME( cview->frame ), NULL ); else if( IOBJECT( col )->caption ) { GtkWidget *label; char buf[256]; char buf2[256]; gtk_frame_set_label( GTK_FRAME( cview->frame ), "x" ); label = gtk_frame_get_label_widget( GTK_FRAME( cview->frame ) ); escape_markup( IOBJECT( col )->caption, buf2, 256 ); im_snprintf( buf, 256, "%s", buf2 ); gtk_label_set_markup( GTK_LABEL( label ), buf ); gtk_misc_set_padding( GTK_MISC( label ), 2, 6 ); } /* Update names. */ set_glabel( cview->lab, "%s - ", IOBJECT( col )->name ); if( IOBJECT( col )->caption ) set_glabel( cview->head, "%s", IOBJECT( col )->caption ); else { char buf[256]; im_snprintf( buf, 256, "%s", _( "doubleclick to set title" ) ); gtk_label_set_markup( GTK_LABEL( cview->head ), buf ); } /* Set open/closed. */ if( col->open ) { gtk_arrow_set( GTK_ARROW( cview->updown ), GTK_ARROW_DOWN, GTK_SHADOW_OUT ); set_tooltip( cview->updownb, _( "Fold the column away" ) ); } else { gtk_arrow_set( GTK_ARROW( cview->updown ), GTK_ARROW_RIGHT, GTK_SHADOW_OUT ); set_tooltip( cview->updownb, _( "Open the column" ) ); } model_display( MODEL( col->scol ), col->open ); /* Closed columns are hidden in NOEDIT mode. */ widget_visible( GTK_WIDGET( cview ), editable || col->open ); /* Set caption edit. */ if( cview->state == COL_EDIT ) { columnview_add_caption( cview ); gtk_widget_show( cview->capedit ); gtk_widget_hide( cview->headfr ); if( IOBJECT( col )->caption ) { set_gentry( cview->capedit, "%s", IOBJECT( col )->caption ); gtk_editable_select_region( GTK_EDITABLE( cview->capedit ), 0, -1 ); } gtk_widget_grab_focus( cview->capedit ); } else { gtk_widget_show( cview->headfr ); DESTROY_GTK( cview->capedit ); } /* Set bottom entry. */ if( col->selected && col->open && editable && !cview->master ) { columnview_add_text( cview ); gtk_widget_show( cview->textfr ); } else DESTROY_GTK( cview->textfr ); /* Set select state. */ if( cview->master ) gtk_widget_set_name( cview->title, "shadow_widget" ); else if( col->selected && !cview->selected ) { gtk_widget_set_name( cview->title, "selected_widget" ); cview->selected = TRUE; if( cview->textfr ) gtk_widget_grab_focus( cview->text ); } else if( !col->selected ) { /* Always do this, even if cview->selected, so we set on the * first _refresh(). */ gtk_widget_set_name( cview->title, "column_widget" ); cview->selected = FALSE; } VOBJECT_CLASS( parent_class )->refresh( vobject ); } static void columnview_link( View *view, Model *model, View *parent ) { Columnview *cview = COLUMNVIEW( view ); Workspaceview *wview = WORKSPACEVIEW( parent ); VIEW_CLASS( parent_class )->link( view, model, parent ); cview->wview = wview; } static void columnview_child_add( View *parent, View *child ) { Columnview *cview = COLUMNVIEW( parent ); Subcolumnview *sview = SUBCOLUMNVIEW( child ); VIEW_CLASS( parent_class )->child_add( parent, child ); gtk_container_add( GTK_CONTAINER( cview->frame ), GTK_WIDGET( sview ) ); } /* Scroll to keep the text entry at the bottom of the columnview on screen. * We can't use the position/size of the text widget for positioning, since it * may not be properly realized yet ... make the bottom of the column visible * instead. */ static void columnview_scrollto( View *view, ModelScrollPosition position ) { Columnview *cview = COLUMNVIEW( view ); Workspaceview *wview = cview->wview; int x, y, w, h; columnview_get_position( cview, &x, &y, &w, &h ); if( position == MODEL_SCROLL_BOTTOM ) /* 35 is supposed to be enough to ensure the whole of the edit * box gets on the screen. */ workspaceview_scroll( wview, x, y + h, w, 35 ); else workspaceview_scroll( wview, x, y, w, cview->title->allocation.height ); } static void columnview_class_init( ColumnviewClass *class ) { GtkObjectClass *object_class = (GtkObjectClass *) class; GtkWidgetClass *widget_class = (GtkWidgetClass *) class; vObjectClass *vobject_class = (vObjectClass *) class; ViewClass *view_class = (ViewClass *) class; GtkWidget *pane; parent_class = g_type_class_peek_parent( class ); /* Create signals. */ /* Init methods. */ object_class->destroy = columnview_destroy; widget_class->size_allocate = columnview_size_allocate; vobject_class->refresh = columnview_refresh; view_class->link = columnview_link; view_class->child_add = columnview_child_add; view_class->scrollto = columnview_scrollto; pane = columnview_menu = popup_build( _( "Column menu" ) ); popup_add_but( pane, _( "_Edit Caption" ), POPUP_FUNC( columnview_caption_cb ) ); popup_add_but( pane, _( "Select _All" ), POPUP_FUNC( columnview_select_cb ) ); popup_add_but( pane, STOCK_DUPLICATE, POPUP_FUNC( columnview_clone_cb ) ); popup_add_but( pane, _( "Merge Into Column" ), POPUP_FUNC( columnview_merge_cb ) ); popup_add_but( pane, GTK_STOCK_SAVE_AS, POPUP_FUNC( columnview_save_as_cb ) ); menu_add_sep( pane ); popup_add_but( pane, _( "Make Column Into _Menu Item" ), POPUP_FUNC( columnview_to_menu_cb ) ); menu_add_sep( pane ); popup_add_but( pane, GTK_STOCK_DELETE, POPUP_FUNC( columnview_destroy_cb ) ); } static gboolean columnview_event_cb( GtkWidget *wid, GdkEvent *ev, Columnview *cview ) { gboolean handled; handled = FALSE; switch( ev->type ) { case GDK_BUTTON_PRESS: if( ev->button.button == 1 ) /* We want to sop our enclosing notebook seeing * left doubleclicks and creating new tabs. We want to * not block things like scroll events and * middle-drag. */ handled = TRUE; default: break; } return( handled ); } static void columnview_init( Columnview *cview ) { GtkWidget *sb; GtkWidget *frame; GtkWidget *icon; GtkWidget *but; /* No position yet. */ cview->lx = -1; cview->ly = -1; cview->state = COL_WAIT; cview->selected = FALSE; cview->old_width = -1; cview->old_height = -1; /* Make outer vb. */ cview->main = gtk_event_box_new(); gtk_widget_add_events( GTK_WIDGET( cview->main ), GDK_BUTTON_PRESS_MASK ); cview->vbox = gtk_vbox_new( FALSE, 0 ); gtk_container_add( GTK_CONTAINER( cview->main ), cview->vbox ); /* Frame for whole title bar. Need an event_box to catch clicks. */ cview->title = gtk_event_box_new(); gtk_widget_add_events( GTK_WIDGET( cview->title ), GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK ); gtk_box_pack_start( GTK_BOX( cview->vbox ), cview->title, FALSE, FALSE, 0 ); set_tooltip( cview->title, _( "Left-drag to move, left-double-click to " "set title, right-click for menu" ) ); frame = gtk_frame_new( NULL ); gtk_frame_set_shadow_type( GTK_FRAME( frame ), GTK_SHADOW_NONE ); gtk_container_add( GTK_CONTAINER( cview->title ), frame ); popup_attach( cview->title, columnview_menu, cview ); gtk_signal_connect( GTK_OBJECT( cview->title ), "event", GTK_SIGNAL_FUNC( columnview_title_event_cb ), cview ); /* Layout contents of title bar. */ cview->titlehb = gtk_hbox_new( FALSE, 0 ); gtk_container_add( GTK_CONTAINER( frame ), cview->titlehb ); /* Up/down button. */ cview->updownb = gtk_button_new(); gtk_button_set_relief( GTK_BUTTON( cview->updownb ), GTK_RELIEF_NONE ); gtk_container_set_border_width( GTK_CONTAINER( cview->updownb ), 0 ); gtk_box_pack_start( GTK_BOX( cview->titlehb ), cview->updownb, FALSE, FALSE, 0 ); cview->updown = gtk_arrow_new( GTK_ARROW_DOWN, GTK_SHADOW_OUT ); gtk_container_add( GTK_CONTAINER( cview->updownb ), cview->updown ); gtk_signal_connect( GTK_OBJECT( cview->updownb ), "clicked", GTK_SIGNAL_FUNC( columnview_updown_cb ), cview ); /* Remove columnview button. */ sb = gtk_vbox_new( FALSE, 0 ); gtk_box_pack_end( GTK_BOX( cview->titlehb ), sb, FALSE, FALSE, 1 ); but = gtk_button_new(); gtk_button_set_relief( GTK_BUTTON( but ), GTK_RELIEF_NONE ); gtk_box_pack_start( GTK_BOX( sb ), but, TRUE, FALSE, 0 ); set_tooltip( but, _( "Delete the column" ) ); icon = gtk_image_new_from_stock( GTK_STOCK_CLOSE, GTK_ICON_SIZE_MENU ); gtk_container_add( GTK_CONTAINER( but ), icon ); gtk_signal_connect( GTK_OBJECT( but ), "clicked", GTK_SIGNAL_FUNC( columnview_destroy2_cb ), cview ); /* Columnview name. */ cview->lab = gtk_label_new( "" ); gtk_box_pack_start( GTK_BOX( cview->titlehb ), cview->lab, FALSE, FALSE, 2 ); /* Comment. Wrap a frame around it, to make it the same size as * an entry widget. */ cview->headfr = gtk_frame_new( NULL ); gtk_frame_set_shadow_type( GTK_FRAME( cview->headfr ), GTK_SHADOW_NONE ); gtk_box_pack_start( GTK_BOX( cview->titlehb ), cview->headfr, FALSE, FALSE, 0 ); cview->head = gtk_label_new( "" ); gtk_container_add( GTK_CONTAINER( cview->headfr ), cview->head ); /* Make centre table for tally roll. */ cview->frame = gtk_frame_new( NULL ); gtk_frame_set_shadow_type( GTK_FRAME( cview->frame ), GTK_SHADOW_NONE ); gtk_box_pack_start( GTK_BOX( cview->vbox ), cview->frame, TRUE, TRUE, 0 ); gtk_box_pack_start( GTK_BOX( cview ), cview->main, FALSE, FALSE, 0 ); /* We need to stop our enclosing thing seeing doubeclicks and all * that. */ gtk_signal_connect( GTK_OBJECT( cview ), "event", GTK_SIGNAL_FUNC( columnview_event_cb ), cview ); gtk_widget_show_all( GTK_WIDGET( cview ) ); } GtkType columnview_get_type( void ) { static GtkType type = 0; if( !type ) { static const GtkTypeInfo info = { "Columnview", sizeof( Columnview ), sizeof( ColumnviewClass ), (GtkClassInitFunc) columnview_class_init, (GtkObjectInitFunc) columnview_init, /* reserved_1 */ NULL, /* reserved_2 */ NULL, (GtkClassInitFunc) NULL, }; type = gtk_type_unique( TYPE_VIEW, &info ); } return( type ); } View * columnview_new( void ) { Columnview *cview = gtk_type_new( TYPE_COLUMNVIEW ); return( VIEW( cview ) ); } nip2-8.7.0/src/secret.h0000644000175000017500000000165213224651032011546 00000000000000/* Decls for secret.c */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ void secret_build( Compile *compile ); nip2-8.7.0/src/iarrow.h0000644000175000017500000000324213224651032011561 00000000000000/* a ip region class in a workspace */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_IARROW (iarrow_get_type()) #define IARROW( obj ) \ (G_TYPE_CHECK_INSTANCE_CAST( (obj), TYPE_IARROW, iArrow )) #define IARROW_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_CAST( (klass), TYPE_IARROW, iArrowClass)) #define IS_IARROW( obj ) \ (G_TYPE_CHECK_INSTANCE_TYPE( (obj), TYPE_IARROW )) #define IS_IARROW_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_TYPE( (klass), TYPE_IARROW )) #define IARROW_GET_CLASS( obj ) \ (G_TYPE_INSTANCE_GET_CLASS( (obj), TYPE_IARROW, iArrowClass )) struct _iArrow { Classmodel parent_class; /* Class fields. */ iRegionInstance instance; /* Private ... build iobject caption here. */ VipsBuf caption_buffer; }; typedef struct _iArrowClass { ClassmodelClass parent_class; /* My methods. */ } iArrowClass; GType iarrow_get_type( void ); nip2-8.7.0/src/colourview.h0000644000175000017500000000312513224651032012454 00000000000000/* a colourview in a workspace */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_COLOURVIEW (colourview_get_type()) #define COLOURVIEW( obj ) (GTK_CHECK_CAST( (obj), TYPE_COLOURVIEW, Colourview )) #define COLOURVIEW_CLASS( klass ) \ (GTK_CHECK_CLASS_CAST( (klass), TYPE_COLOURVIEW, ColourviewClass )) #define IS_COLOURVIEW( obj ) (GTK_CHECK_TYPE( (obj), TYPE_COLOURVIEW )) #define IS_COLOURVIEW_CLASS( klass ) \ (GTK_CHECK_CLASS_TYPE( (klass), TYPE_COLOURVIEW )) typedef struct _Colourview { Graphicview parent_object; Colourdisplay *colourdisplay; Conversion *conv; GtkWidget *label; } Colourview; typedef struct _ColourviewClass { GraphicviewClass parent_class; /* My methods. */ } ColourviewClass; GtkType colourview_get_type( void ); View *colourview_new( void ); nip2-8.7.0/src/iarrow.c0000644000175000017500000001500613224651032011555 00000000000000/* an ip arrow class object in a workspace */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #include "ip.h" static ClassmodelClass *parent_class = NULL; static void iarrow_finalize( GObject *gobject ) { iArrow *iarrow; #ifdef DEBUG printf( "iarrow_finalize\n" ); #endif /*DEBUG*/ g_return_if_fail( gobject != NULL ); g_return_if_fail( IS_IARROW( gobject ) ); iarrow = IARROW( gobject ); /* My instance finalize stuff. */ iregion_instance_destroy( &iarrow->instance ); vips_buf_destroy( &iarrow->caption_buffer ); G_OBJECT_CLASS( parent_class )->finalize( gobject ); } static void * iarrow_generate_caption_sub( iImage *iimage, iArrow *iarrow, gboolean *first ) { Workspace *ws = HEAPMODEL( iarrow )->row->ws; Row *row = HEAPMODEL( iimage )->row; /* Suppress this name in the caption if it's a superclass. If this * thing is on a super, it's on the subclass too ... not helpful to * have it twice. */ if( !is_super( row->sym ) ) { if( *first ) *first = FALSE; else vips_buf_appends( &iarrow->caption_buffer, ", " ); row_qualified_name_relative( ws->sym, row, &iarrow->caption_buffer ); } return( NULL ); } static const char * iarrow_generate_caption( iObject *iobject ) { static const char *names[] = { CLASS_HGUIDE, CLASS_VGUIDE, CLASS_MARK, CLASS_ARROW, NULL }; iArrow *iarrow = IARROW( iobject ); VipsBuf *buf = &iarrow->caption_buffer; const int nimages = g_slist_length( CLASSMODEL( iarrow )->iimages ); Expr *expr; gboolean result; gboolean first; int i; if( !HEAPMODEL( iarrow )->row || !(expr = HEAPMODEL( iarrow )->row->expr) || !heap_is_class( &expr->root, &result ) || !result ) return( _( "No image" ) ); vips_buf_rewind( buf ); heapmodel_name( HEAPMODEL( iarrow ), buf ); vips_buf_appendf( buf, " " ); /* Used in (eg.) "Mark at (10, 10) on [A1, A2]" */ vips_buf_appendf( buf, _( "on" ) ); vips_buf_appendf( buf, " " ); if( nimages > 1 ) vips_buf_appendf( buf, "[" ); first = TRUE; slist_map2( CLASSMODEL( iarrow )->iimages, (SListMap2Fn) iarrow_generate_caption_sub, iarrow, &first ); if( nimages > 1 ) vips_buf_appendf( buf, "]" ); vips_buf_appendf( buf, " " ); for( i = 0; names[i]; i++ ) { if( !heap_is_instanceof( names[i], &expr->root, &result ) ) break; if( result ) { switch( i ) { case 0: vips_buf_appendf( buf, _( "at %d" ), iarrow->instance.area.top ); break; case 1: vips_buf_appendf( buf, _( "at %d" ), iarrow->instance.area.left ); break; case 2: vips_buf_appendf( buf, _( "at (%d, %d)" ), iarrow->instance.area.left, iarrow->instance.area.top ); break; case 3: vips_buf_appendf( buf, _( "at (%d, %d), offset (%d, %d)" ), iarrow->instance.area.left, iarrow->instance.area.top, iarrow->instance.area.width, iarrow->instance.area.height ); break; default: g_assert( 0 ); } break; } } return( vips_buf_all( buf ) ); } static View * iarrow_view_new( Model *model, View *parent ) { return( valueview_new() ); } static void * iarrow_update_model( Heapmodel *heapmodel ) { /* Parent first ... this will update our instance vars. */ if( HEAPMODEL_CLASS( parent_class )->update_model( heapmodel ) ) return( heapmodel ); if( heapmodel->row->expr ) { iArrow *iarrow = IARROW( heapmodel ); /* Update who-has-displays-on-what stuff. */ classmodel_iimage_update( CLASSMODEL( iarrow ), iarrow->instance.ii ); /* Need to make sure the caption is regenerated. */ iobject_changed( IOBJECT( heapmodel ) ); } return( NULL ); } static void * iarrow_get_instance( Classmodel *classmodel ) { iArrow *iarrow = IARROW( classmodel ); return( &iarrow->instance ); } static void iarrow_class_init( iArrowClass *class ) { GObjectClass *gobject_class = (GObjectClass *) class; iObjectClass *iobject_class = (iObjectClass *) class; iContainerClass *icontainer_class = (iContainerClass *) class; ModelClass *model_class = (ModelClass *) class; HeapmodelClass *heapmodel_class = (HeapmodelClass *) class; ClassmodelClass *classmodel_class = (ClassmodelClass *) class; /* We share methods with iregion in a sort of MI way ... iregion needs * to be initialised before we can work. Force it to start up. */ (void) iregion_get_type(); parent_class = g_type_class_peek_parent( class ); /* Create signals. */ /* Init methods. */ gobject_class->finalize = iarrow_finalize; iobject_class->generate_caption = iarrow_generate_caption; icontainer_class->parent_add = iregion_parent_add; model_class->view_new = iarrow_view_new; model_class->edit = iregion_edit; model_class->save = iregion_save; model_class->load = iregion_load; heapmodel_class->update_model = iarrow_update_model; heapmodel_class->update_heap = iregion_update_heap; classmodel_class->class_get = iregion_class_get; classmodel_class->class_new = iregion_class_new; classmodel_class->get_instance = iarrow_get_instance; /* Static init. */ model_register_loadable( MODEL_CLASS( class ) ); } static void iarrow_init( iArrow *iarrow ) { iregion_instance_init( &iarrow->instance, CLASSMODEL( iarrow ) ); vips_buf_init_dynamic( &iarrow->caption_buffer, MAX_LINELENGTH ); iobject_set( IOBJECT( iarrow ), CLASS_ARROW, NULL ); } GType iarrow_get_type( void ) { static GType type = 0; if( !type ) { static const GTypeInfo info = { sizeof( iArrowClass ), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) iarrow_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof( iArrow ), 32, /* n_preallocs */ (GInstanceInitFunc) iarrow_init, }; type = g_type_register_static( TYPE_CLASSMODEL, "iArrow", &info, 0 ); } return( type ); } nip2-8.7.0/src/string.c0000644000175000017500000000564413224651032011567 00000000000000/* an editable string */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #include "ip.h" static ClassmodelClass *parent_class = NULL; static void string_finalize( GObject *gobject ) { String *string; #ifdef DEBUG printf( "string_finalize\n" ); #endif /*DEBUG*/ g_return_if_fail( gobject != NULL ); g_return_if_fail( IS_STRING( gobject ) ); string = STRING( gobject ); IM_FREE( string->value ); G_OBJECT_CLASS( parent_class )->finalize( gobject ); } static View * string_view_new( Model *model, View *parent ) { return( stringview_new() ); } /* Members of string we automate. */ static ClassmodelMember string_members[] = { { CLASSMODEL_MEMBER_STRING, NULL, 0, MEMBER_CAPTION, "caption", N_( "Caption" ), G_STRUCT_OFFSET( iObject, caption ) }, { CLASSMODEL_MEMBER_STRING, NULL, 0, MEMBER_VALUE, "value", N_( "Value" ), G_STRUCT_OFFSET( String, value ) } }; static void string_class_init( StringClass *class ) { GObjectClass *gobject_class = (GObjectClass *) class; ModelClass *model_class = (ModelClass *) class; ClassmodelClass *classmodel_class = (ClassmodelClass *) class; parent_class = g_type_class_peek_parent( class ); /* Init methods. */ gobject_class->finalize = string_finalize; model_class->view_new = string_view_new; /* Static init. */ model_register_loadable( MODEL_CLASS( class ) ); classmodel_class->members = string_members; classmodel_class->n_members = IM_NUMBER( string_members ); } static void string_init( String *string ) { string->value = NULL; IM_SETSTR( string->value, "" ); iobject_set( IOBJECT( string ), CLASS_STRING, NULL ); } GType string_get_type( void ) { static GType type = 0; if( !type ) { static const GTypeInfo info = { sizeof( StringClass ), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) string_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof( String ), 32, /* n_pstringlocs */ (GInstanceInitFunc) string_init, }; type = g_type_register_static( TYPE_CLASSMODEL, "String", &info, 0 ); } return( type ); } nip2-8.7.0/src/builtin.c0000644000175000017500000006720613224651032011731 00000000000000/* Run builtin functions ... sin/error etc. */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #include "ip.h" #ifdef HAVE_GSL #include #include #endif /*HAVE_GSL*/ /* Trace builtin calls. #define DEBUG */ /* Spot something that might be an arg to sin/cos/tan etc. */ static gboolean ismatharg( Reduce *rc, PElement *base ) { return( PEISIMAGE( base ) || PEISREAL( base ) || PEISCOMPLEX( base ) ); } /* Spot something that might be an arg to re/im etc. */ static gboolean iscomplexarg( Reduce *rc, PElement *base ) { return( PEISIMAGE( base ) || PEISCOMPLEX( base ) ); } /* Spot anything. */ static gboolean isany( Reduce *rc, PElement *base ) { return( TRUE ); } /* Other PEIS as functions. */ static gboolean pe_is_image( Reduce *rc, PElement *base ) { return( PEISIMAGE( base ) ); } static gboolean pe_is_real( Reduce *rc, PElement *base ) { return( PEISREAL( base ) ); } static gboolean pe_is_complex( Reduce *rc, PElement *base ) { return( PEISCOMPLEX( base ) ); } static gboolean pe_is_bool( Reduce *rc, PElement *base ) { return( PEISBOOL( base ) ); } static gboolean pe_is_char( Reduce *rc, PElement *base ) { return( PEISCHAR( base ) ); } static gboolean pe_is_list( Reduce *rc, PElement *base ) { return( PEISLIST( base ) ); } static gboolean pe_is_flist( Reduce *rc, PElement *base ) { return( PEISFLIST( base ) ); } static gboolean pe_is_class( Reduce *rc, PElement *base ) { return( PEISCLASS( base ) ); } /* The types we might want to spot for builtins. * * Others, eg.: * static BuiltinTypeSpot vimage_spot = { "vips_image", pe_is_image }; static BuiltinTypeSpot bool_spot = { "bool", pe_is_bool }; static BuiltinTypeSpot realvec_spot = { "[real]", reduce_is_realvec }; static BuiltinTypeSpot matrix_spot = { "[[real]]", reduce_is_matrix }; static BuiltinTypeSpot instance_spot = { "class instance", pe_is_class }; static gboolean pe_is_gobject( Reduce *rc, PElement *base ) { return( PEISMANAGEDGOBJECT( base ) ); } static BuiltinTypeSpot gobject_spot = { "GObject", pe_is_gobject }; * */ static BuiltinTypeSpot real_spot = { "real", pe_is_real }; static BuiltinTypeSpot complex_spot = { "complex|image", iscomplexarg }; static BuiltinTypeSpot flist_spot = { "non-empty list", pe_is_flist }; static BuiltinTypeSpot string_spot = { "[char]", reduce_is_finitestring }; static BuiltinTypeSpot list_spot = { "[*]", reduce_is_list }; static BuiltinTypeSpot math_spot = { "image|real|complex", ismatharg }; static BuiltinTypeSpot any_spot = { "any", isany }; /* Args for "_". */ static BuiltinTypeSpot *underscore_args[] = { &string_spot }; /* Do a _ call. Args already spotted. */ static void apply_underscore_call( Reduce *rc, const char *name, HeapNode **arg, PElement *out ) { PElement rhs; char text[MAX_STRSIZE]; PEPOINTRIGHT( arg[0], &rhs ); (void) reduce_get_string( rc, &rhs, text, MAX_STRSIZE ); /* Pump though gettext. */ if( !heap_managedstring_new( rc->heap, _( text ), out ) ) reduce_throw( rc ); } /* Args for "has_member". */ static BuiltinTypeSpot *has_member_args[] = { &string_spot, &any_spot }; /* Do a has_member call. Args already spotted. */ static void apply_has_member_call( Reduce *rc, const char *name, HeapNode **arg, PElement *out ) { PElement rhs; char mname[MAX_STRSIZE]; PElement member; PEPOINTRIGHT( arg[1], &rhs ); (void) reduce_get_string( rc, &rhs, mname, MAX_STRSIZE ); PEPOINTRIGHT( arg[0], &rhs ); PEPUTP( out, ELEMENT_BOOL, class_get_member( &rhs, mname, NULL, &member ) ); } /* Args for "is_instanceof". */ static BuiltinTypeSpot *is_instanceof_args[] = { &string_spot, &any_spot }; /* Do an is_instance call. Args already spotted. */ static void apply_is_instanceof_call( Reduce *rc, const char *name, HeapNode **arg, PElement *out ) { PElement rhs; char kname[MAX_STRSIZE]; PEPOINTRIGHT( arg[1], &rhs ); (void) reduce_get_string( rc, &rhs, kname, MAX_STRSIZE ); PEPOINTRIGHT( arg[0], &rhs ); PEPUTP( out, ELEMENT_BOOL, reduce_is_instanceof( rc, kname, &rhs ) ); } /* Args for builtin on complex. */ static BuiltinTypeSpot *complex_args[] = { &complex_spot }; /* Do a complex op. Args already spotted. */ static void apply_complex_call( Reduce *rc, const char *name, HeapNode **arg, PElement *out ) { PElement rhs; PEPOINTRIGHT( arg[0], &rhs ); if( PEISIMAGE( &rhs ) ) { if( strcmp( name, "re" ) == 0 ) call_spine( rc, "im_c2real", arg, out ); else if( strcmp( name, "im" ) == 0 ) call_spine( rc, "im_c2imag", arg, out ); } else if( PEISCOMPLEX( &rhs ) ) { if( strcmp( name, "re" ) == 0 ) { PEPUTP( out, ELEMENT_NODE, GETLEFT( PEGETVAL( &rhs ) ) ); } else if( strcmp( name, "im" ) == 0 ) { PEPUTP( out, ELEMENT_NODE, GETRIGHT( PEGETVAL( &rhs ) ) ); } } else error( "internal error #98743698437639487" ); } /* Args for builtin on list. */ static BuiltinTypeSpot *flist_args[] = { &flist_spot }; /* Do a list op. Args already spotted. */ static void apply_list_call( Reduce *rc, const char *name, HeapNode **arg, PElement *out ) { PElement rhs; PElement a; PEPOINTRIGHT( arg[0], &rhs ); g_assert( PEISFLIST( &rhs ) ); reduce_get_list( rc, &rhs ); if( strcmp( name, "hd" ) == 0 ) { PEGETHD( &a, &rhs ); PEPUTPE( out, &a ); } else if( strcmp( name, "tl" ) == 0 ) { PEGETTL( &a, &rhs ); PEPUTPE( out, &a ); } else error( "internal error #098734953" ); } /* "gammq" */ static BuiltinTypeSpot *gammq_args[] = { &real_spot, &real_spot }; static void apply_gammq_call( Reduce *rc, const char *name, HeapNode **arg, PElement *out ) { PElement rhs; double a, x, Q; PEPOINTRIGHT( arg[1], &rhs ); a = PEGETREAL( &rhs ); PEPOINTRIGHT( arg[0], &rhs ); x = PEGETREAL( &rhs ); if( a <= 0 || x < 0 ) { error_top( _( "Out of range." ) ); error_sub( _( "gammq arguments must be a > 0, x >= 0." ) ); reduce_throw( rc ); } #ifdef HAVE_GSL Q = gsl_sf_gamma_inc_Q( a, x ); #else /*!HAVE_GSL*/ error_top( _( "Not available." ) ); error_sub( _( "No GSL library available for gammq." ) ); reduce_throw( rc ); #endif /*HAVE_GSL*/ if( !heap_real_new( rc->heap, Q, out ) ) reduce_throw( rc ); } /* Args for "vips_image". */ static BuiltinTypeSpot *image_args[] = { &string_spot }; /* Do a image call. */ static void apply_image_call( Reduce *rc, const char *name, HeapNode **arg, PElement *out ) { Heap *heap = rc->heap; PElement rhs; char buf[FILENAME_MAX]; char filename[FILENAME_MAX]; char mode[FILENAME_MAX]; char *fn; Imageinfo *ii; /* Get string. */ PEPOINTRIGHT( arg[0], &rhs ); (void) reduce_get_string( rc, &rhs, buf, FILENAME_MAX ); /* The buf might be something like n3862.pyr.tif:1, ie. contain some * load options. Split and search just for the filename component. */ im_filename_split( buf, filename, mode ); /* Try to load image from given string. */ if( !(fn = path_find_file( filename )) ) reduce_throw( rc ); /* Reattach the mode and load. */ im_snprintf( buf, FILENAME_MAX, "%s:%s", fn, mode ); if( !(ii = imageinfo_new_input( main_imageinfogroup, NULL, heap, buf )) ) { IM_FREE( fn ); reduce_throw( rc ); } IM_FREE( fn ); PEPUTP( out, ELEMENT_MANAGED, ii ); MANAGED_UNREF( ii ); } /* Args for "read". */ static BuiltinTypeSpot *read_args[] = { &string_spot }; /* Do a read call. */ static void apply_read_call( Reduce *rc, const char *name, HeapNode **arg, PElement *out ) { PElement rhs; char buf[FILENAME_MAX]; /* Get string. */ PEPOINTRIGHT( arg[0], &rhs ); (void) reduce_get_string( rc, &rhs, buf, FILENAME_MAX ); if( !heap_file_new( rc->heap, buf, out ) ) reduce_throw( rc ); } /* Args for "graph_export_image". */ static BuiltinTypeSpot *graph_export_image_args[] = { &real_spot, &any_spot }; /* Do a graph_export_image call. */ static void apply_graph_export_image_call( Reduce *rc, const char *name, HeapNode **arg, PElement *out ) { #ifdef HAVE_LIBGOFFICE PElement rhs; double dpi; Plot *plot; Imageinfo *ii; PEPOINTRIGHT( arg[1], &rhs ); dpi = PEGETREAL( &rhs ); PEPOINTRIGHT( arg[0], &rhs ); if( !reduce_is_instanceof( rc, CLASS_PLOT, &rhs ) ) { char txt[100]; VipsBuf buf = VIPS_BUF_STATIC( txt ); itext_value_ev( rc, &buf, &rhs ); error_top( _( "Bad argument." ) ); error_sub( _( "Argument 2 to \"%s\" should " "be instance of \"%s\", you passed:\n %s" ), name, CLASS_PLOT, vips_buf_all( &buf ) ); reduce_throw( rc ); } plot = g_object_new( TYPE_PLOT, NULL ); if( !classmodel_update_members( CLASSMODEL( plot ), &rhs ) ) { UNREF( plot ); reduce_throw( rc ); } if( !(ii = plot_to_image( plot, rc, dpi )) ) { UNREF( plot ); reduce_throw( rc ); } UNREF( plot ); PEPUTP( out, ELEMENT_MANAGED, ii ); #else /*!HAVE_LIBGOFFICE*/ PEPUTP( out, ELEMENT_BOOL, TRUE ); #endif /*HAVE_LIBGOFFICE*/ } /* Args for "math". */ static BuiltinTypeSpot *math_args[] = { &math_spot }; /* A math function ... name, number implementation, image implementation. */ typedef struct { const char *name; /* ip name */ double (*rfn)( double ); /* Number implementation */ const char *ifn; /* VIPS name */ } MathFn; static double ip_sin( double a ) { return( sin( IM_RAD( a ) ) ); } static double ip_cos( double a ) { return( cos( IM_RAD( a ) ) ); } static double ip_tan( double a ) { return( tan( IM_RAD( a ) ) ); } static double ip_asin( double a ) { return( IM_DEG( asin( a ) ) ); } static double ip_acos( double a ) { return( IM_DEG( acos( a ) ) ); } static double ip_atan( double a ) { return( IM_DEG( atan( a ) ) ); } static double ip_exp10( double a ) { return( pow( 10.0, a ) ); } static double ip_ceil( double a ) { return( ceil( a ) ); } static double ip_floor( double a ) { return( floor( a ) ); } /* Table of math functions ... number implementations, image implementations. */ static MathFn math_fn[] = { { "sin", &ip_sin, "im_sintra" }, { "cos", &ip_cos, "im_costra" }, { "tan", &ip_tan, "im_tantra" }, { "asin", &ip_asin, "im_asintra" }, { "acos", &ip_acos, "im_acostra" }, { "atan", &ip_atan, "im_atantra" }, { "log", &log, "im_logtra" }, { "log10", &log10, "im_log10tra" }, { "exp", &exp, "im_exptra" }, { "exp10", &ip_exp10, "im_exp10tra" }, { "ceil", &ip_ceil, "im_ceil" }, { "floor", &ip_floor, "im_floor" } }; /* Do a math function (eg. sin, cos, tan). */ static void apply_math_call( Reduce *rc, const char *name, HeapNode **arg, PElement *out ) { PElement rhs; int i; /* Find implementation. */ for( i = 0; i < IM_NUMBER( math_fn ); i++ ) if( strcmp( name, math_fn[i].name ) == 0 ) break; if( i == IM_NUMBER( math_fn ) ) error( "internal error #928456936" ); /* Get arg type ... real/complex/image */ PEPOINTRIGHT( arg[0], &rhs ); if( PEISIMAGE( &rhs ) ) { /* Easy ... pass to VIPS. */ call_spine( rc, math_fn[i].ifn, arg, out ); } else if( PEISREAL( &rhs ) ) { double a = PEGETREAL( &rhs ); double b = math_fn[i].rfn( a ); if( !heap_real_new( rc->heap, b, out ) ) reduce_throw( rc ); } else if( PEISCOMPLEX( &rhs ) ) { error_top( _( "Not implemented." ) ); error_sub( _( "Complex math ops not implemented." ) ); reduce_throw( rc ); } else error( "internal error #92870653" ); } /* Args for "predicate". */ static BuiltinTypeSpot *pred_args[] = { &any_spot }; /* A predicate function ... name, implementation. */ typedef struct { const char *name; /* ip name */ gboolean (*fn)( Reduce *, PElement * ); /* Implementation */ } PredicateFn; /* Table of predicate functions ... name and implementation. */ static PredicateFn predicate_fn[] = { { "is_image", &pe_is_image }, { "is_bool", &pe_is_bool }, { "is_real", &pe_is_real }, { "is_char", &pe_is_char }, { "is_class", &pe_is_class }, { "is_list", &pe_is_list }, { "is_complex", &pe_is_complex } }; /* Do a predicate function (eg. is_bool) */ static void apply_pred_call( Reduce *rc, const char *name, HeapNode **arg, PElement *out ) { PElement rhs; gboolean res; int i; /* Find implementation. */ for( i = 0; i < IM_NUMBER( predicate_fn ); i++ ) if( strcmp( name, predicate_fn[i].name ) == 0 ) break; if( i == IM_NUMBER( predicate_fn ) ) error( "internal error #928456936" ); /* Call! */ PEPOINTRIGHT( arg[0], &rhs ); res = predicate_fn[i].fn( rc, &rhs ); PEPUTP( out, ELEMENT_BOOL, res ); } /* Args for "error". */ static BuiltinTypeSpot *error_args[] = { &string_spot }; /* Do "error". */ static void apply_error_call( Reduce *rc, const char *name, HeapNode **arg, PElement *out ) { char buf[MAX_STRSIZE]; PElement rhs; /* Get string. */ PEPOINTRIGHT( arg[0], &rhs ); (void) reduce_get_string( rc, &rhs, buf, MAX_STRSIZE ); error_top( _( "Macro error." ) ); error_sub( "%s", buf ); reduce_throw( rc ); } /* Args for "search". */ static BuiltinTypeSpot *search_args[] = { &string_spot }; /* Do "search". */ static void apply_search_call( Reduce *rc, const char *name, HeapNode **arg, PElement *out ) { char buf[MAX_STRSIZE]; PElement rhs; char *fn; /* Get string. */ PEPOINTRIGHT( arg[0], &rhs ); (void) reduce_get_string( rc, &rhs, buf, MAX_STRSIZE ); if( !(fn = path_find_file( buf )) ) /* If not found, return []. */ fn = im_strdup( NULL, "" ); if( !heap_managedstring_new( rc->heap, fn, out ) ) { IM_FREE( fn ); reduce_throw( rc ); } IM_FREE( fn ); } /* Args for "print". */ static BuiltinTypeSpot *print_args[] = { &any_spot }; /* Do "print". */ static void apply_print_call( Reduce *rc, const char *name, HeapNode **arg, PElement *out ) { PElement rhs; char txt[MAX_STRSIZE]; VipsBuf buf = VIPS_BUF_STATIC( txt ); PEPOINTRIGHT( arg[0], &rhs ); itext_value_ev( rc, &buf, &rhs ); if( !heap_managedstring_new( rc->heap, vips_buf_all( &buf ), out ) ) reduce_throw( rc ); } /* Args for "dir". */ static BuiltinTypeSpot *dir_args[] = { &any_spot }; static void * dir_object_member( Symbol *sym, PElement *value, Reduce *rc, PElement *list ) { PElement t; if( !heap_list_add( rc->heap, list, &t ) || !heap_managedstring_new( rc->heap, IOBJECT( sym )->name, &t ) ) reduce_throw( rc ); (void) heap_list_next( list ); return( NULL ); } static void * dir_object( Reduce *rc, PElement *list, PElement *instance, PElement *out ) { PElement p; /* p walks down the list as we build it, list stays pointing at the * head ready to be written to out. */ p = *list; heap_list_init( &p ); class_map( instance, (class_map_fn) dir_object_member, rc, &p ); PEPUTPE( out, list ); return( NULL ); } static void * dir_scope( Symbol *sym, Reduce *rc, PElement *list ) { PElement t; if( !heap_list_add( rc->heap, list, &t ) || !heap_managedstring_new( rc->heap, IOBJECT( sym )->name, &t ) ) reduce_throw( rc ); (void) heap_list_next( list ); return( NULL ); } static void * dir_gtype( GType type, void *a, void *b ) { Reduce *rc = (Reduce *) a; PElement *list = (PElement *) b; PElement t; if( !heap_list_add( rc->heap, list, &t ) || !heap_real_new( rc->heap, type, &t ) ) return( rc ); (void) heap_list_next( list ); return( NULL ); } static void dir_gobject( Reduce *rc, GParamSpec **properties, guint n_properties, PElement *out ) { int i; PElement list; list = *out; heap_list_init( &list ); for( i = 0; i < n_properties; i++ ) { PElement t; if( !heap_list_add( rc->heap, &list, &t ) || !heap_managedstring_new( rc->heap, properties[i]->name, &t ) ) reduce_throw( rc ); (void) heap_list_next( &list ); } } /* Do "dir". */ static void apply_dir_call( Reduce *rc, const char *name, HeapNode **arg, PElement *out ) { PElement rhs; PEPOINTRIGHT( arg[0], &rhs ); if( PEISCLASS( &rhs ) ) /* This is more complex than it looks. We have to walk a class * instance generating a list of member names, while not * destroying the instance as we go, in the case that out will * overwrite (rhs) arg[0]. */ reduce_safe_pointer( rc, (reduce_safe_pointer_fn) dir_object, &rhs, out, NULL, NULL ); else if( PEISSYMREF( &rhs ) ) { Symbol *sym = PEGETSYMREF( &rhs ); if( is_scope( sym ) && sym->expr && sym->expr->compile ) { PElement list; list = *out; heap_list_init( &list ); icontainer_map( ICONTAINER( sym->expr->compile ), (icontainer_map_fn) dir_scope, rc, &list ); } } else if( PEISREAL( &rhs ) ) { /* Assume this is a gtype and try to get the children of that * type. */ GType type = PEGETREAL( &rhs ); PElement list; list = *out; heap_list_init( &list ); if( !g_type_name( type ) ) { error_top( _( "No such type" ) ); error_sub( _( "GType %u not found." ), (unsigned int) type ); reduce_throw( rc ); } if( vips_type_map( type, dir_gtype, rc, &list ) ) reduce_throw( rc ); } else if( PEISMANAGEDGOBJECT( &rhs ) ) { guint n_properties; ManagedgobjectClass *class = MANAGEDGOBJECT_GET_CLASS( PEGETMANAGEDGOBJECT( &rhs ) ); GParamSpec **properties; properties = g_object_class_list_properties( G_OBJECT_CLASS( class ), &n_properties ); dir_gobject( rc, properties, n_properties, out ); g_free( properties); } else /* Just [], ie. no names possible. */ heap_list_init( out ); } /* Args for "expand". */ static BuiltinTypeSpot *expand_args[] = { &string_spot }; /* Do "expand". */ static void apply_expand_call( Reduce *rc, const char *name, HeapNode **arg, PElement *out ) { PElement rhs; char txt[FILENAME_MAX]; char txt2[FILENAME_MAX]; PEPOINTRIGHT( arg[0], &rhs ); (void) reduce_get_string( rc, &rhs, txt, FILENAME_MAX ); expand_variables( txt, txt2 ); if( !heap_managedstring_new( rc->heap, txt2, out ) ) reduce_throw( rc ); } /* Args for "name2gtype". */ static BuiltinTypeSpot *name2gtype_args[] = { &string_spot }; /* Do "name2gtype". */ static void apply_name2gtype_call( Reduce *rc, const char *name, HeapNode **arg, PElement *out ) { PElement rhs; char txt[FILENAME_MAX]; int gtype; PEPOINTRIGHT( arg[0], &rhs ); (void) reduce_get_string( rc, &rhs, txt, FILENAME_MAX ); gtype = g_type_from_name( txt ); if( !heap_real_new( rc->heap, gtype, out ) ) reduce_throw( rc ); } /* Args for "gtype2name". */ static BuiltinTypeSpot *gtype2name_args[] = { &real_spot }; /* Do "gtype2name". */ static void apply_gtype2name_call( Reduce *rc, const char *name, HeapNode **arg, PElement *out ) { PElement rhs; int gtype; PEPOINTRIGHT( arg[0], &rhs ); gtype = PEGETREAL( &rhs ); if( !heap_managedstring_new( rc->heap, g_type_name( gtype ), out ) ) reduce_throw( rc ); } /* Args for "vips_object_new". */ static BuiltinTypeSpot *vo_new_args[] = { &string_spot, &list_spot, &list_spot }; /* Do a vips_object_new call. */ static void apply_vo_new_call( Reduce *rc, const char *name, HeapNode **arg, PElement *out ) { PElement rhs; char buf[256]; PElement required; PElement optional; PEPOINTRIGHT( arg[2], &rhs ); reduce_get_string( rc, &rhs, buf, 256 ); PEPOINTRIGHT( arg[1], &required ); PEPOINTRIGHT( arg[0], &optional ); vo_object_new( rc, buf, &required, &optional, out ); } /* Args for "vips_call". */ static BuiltinTypeSpot *vo_call_args[] = { &string_spot, &list_spot, &list_spot }; /* Do a vips_call call. */ static void apply_vo_call_call( Reduce *rc, const char *name, HeapNode **arg, PElement *out ) { PElement rhs; char buf[256]; PElement required; PElement optional; PEPOINTRIGHT( arg[2], &rhs ); reduce_get_string( rc, &rhs, buf, 256 ); PEPOINTRIGHT( arg[1], &required ); PEPOINTRIGHT( arg[0], &optional ); vo_call( rc, buf, &required, &optional, out ); } /* All ip's builtin functions. */ static BuiltinInfo builtin_table[] = { /* Other. */ { "dir", N_( "return list of names of members" ), FALSE, IM_NUMBER( dir_args ), &dir_args[0], &apply_dir_call }, { "search", N_( "search for file" ), FALSE, IM_NUMBER( search_args ), &search_args[0], &apply_search_call }, { "error", N_( "raise error" ), FALSE, IM_NUMBER( error_args ), &error_args[0], &apply_error_call }, { "print", N_( "convert to [char]" ), FALSE, IM_NUMBER( print_args ), &print_args[0], &apply_print_call }, { "expand", N_( "expand environment variables" ), FALSE, IM_NUMBER( expand_args ), &expand_args[0], &apply_expand_call }, { "name2gtype", N_( "convert [char] to GType" ), FALSE, IM_NUMBER( name2gtype_args ), &name2gtype_args[0], &apply_name2gtype_call }, { "gtype2name", N_( "convert GType to [char]" ), FALSE, IM_NUMBER( gtype2name_args ), >ype2name_args[0], &apply_gtype2name_call }, { "_", N_( "look up localised string" ), FALSE, IM_NUMBER( underscore_args ), &underscore_args[0], &apply_underscore_call }, /* vips8 wrapper. */ { "vips_object_new", N_( "create new vips8 object" ), FALSE, IM_NUMBER( vo_new_args ), &vo_new_args[0], apply_vo_new_call }, { "vips_call", N_( "call vips8 operator" ), FALSE, IM_NUMBER( vo_call_args ), &vo_call_args[0], apply_vo_call_call }, /* Predicates. */ { "is_image", N_( "true if argument is primitive image" ), FALSE, IM_NUMBER( pred_args ), &pred_args[0], apply_pred_call }, { "is_bool", N_( "true if argument is primitive bool" ), FALSE, IM_NUMBER( pred_args ), &pred_args[0], apply_pred_call }, { "is_real", N_( "true if argument is primitive real number" ), FALSE, IM_NUMBER( pred_args ), &pred_args[0], apply_pred_call }, { "is_class", N_( "true if argument is class" ), FALSE, IM_NUMBER( pred_args ), &pred_args[0], apply_pred_call }, { "is_char", N_( "true if argument is primitive char" ), FALSE, IM_NUMBER( pred_args ), &pred_args[0], apply_pred_call }, { "is_list", N_( "true if argument is primitive list" ), FALSE, IM_NUMBER( pred_args ), &pred_args[0], apply_pred_call }, { "is_complex", N_( "true if argument is primitive complex" ), FALSE, IM_NUMBER( pred_args ), &pred_args[0], apply_pred_call }, { "is_instanceof", N_( "true if argument class instance of type" ), FALSE, IM_NUMBER( is_instanceof_args ), &is_instanceof_args[0], apply_is_instanceof_call }, { "has_member", N_( "true if class has named member" ), FALSE, IM_NUMBER( has_member_args ), &has_member_args[0], apply_has_member_call }, /* List and complex projections. */ { "re", N_( "real part of complex" ), TRUE, IM_NUMBER( complex_args ), &complex_args[0], apply_complex_call }, { "im", N_( "imaginary part of complex" ), TRUE, IM_NUMBER( complex_args ), &complex_args[0], apply_complex_call }, { "hd", N_( "head of list" ), TRUE, IM_NUMBER( flist_args ), &flist_args[0], apply_list_call }, { "tl", N_( "tail of list" ), TRUE, IM_NUMBER( flist_args ), &flist_args[0], apply_list_call }, /* Math. */ { "sin", N_( "sine of real number" ), TRUE, IM_NUMBER( math_args ), &math_args[0], apply_math_call }, { "cos", N_( "cosine of real number" ), TRUE, IM_NUMBER( math_args ), &math_args[0], apply_math_call }, { "tan", N_( "tangent of real number" ), TRUE, IM_NUMBER( math_args ), &math_args[0], apply_math_call }, { "asin", N_( "arc sine of real number" ), TRUE, IM_NUMBER( math_args ), &math_args[0], apply_math_call }, { "acos", N_( "arc cosine of real number" ), TRUE, IM_NUMBER( math_args ), &math_args[0], apply_math_call }, { "atan", N_( "arc tangent of real number" ), TRUE, IM_NUMBER( math_args ), &math_args[0], apply_math_call }, { "log", N_( "log base e of real number" ), TRUE, IM_NUMBER( math_args ), &math_args[0], apply_math_call }, { "log10", N_( "log base 10 of real number" ), TRUE, IM_NUMBER( math_args ), &math_args[0], apply_math_call }, { "exp", N_( "e to the power of real number" ), TRUE, IM_NUMBER( math_args ), &math_args[0], apply_math_call }, { "exp10", N_( "10 to the power of real number" ), TRUE, IM_NUMBER( math_args ), &math_args[0], apply_math_call }, { "ceil", N_( "real to int, rounding up" ), TRUE, IM_NUMBER( math_args ), &math_args[0], apply_math_call }, { "floor", N_( "real to int, rounding down" ), TRUE, IM_NUMBER( math_args ), &math_args[0], apply_math_call }, /* Optional GSL funcs. */ { "gammq", N_( "gamma function" ), TRUE, IM_NUMBER( gammq_args ), &gammq_args[0], apply_gammq_call }, /* Constructors. */ { "vips_image", N_( "load vips image" ), FALSE, IM_NUMBER( image_args ), &image_args[0], apply_image_call }, { "read", N_( "load text file" ), FALSE, IM_NUMBER( read_args ), &read_args[0], apply_read_call }, { "graph_export_image", N_( "generate image from Plot object" ), FALSE, IM_NUMBER( graph_export_image_args ), &graph_export_image_args[0], apply_graph_export_image_call }, }; #ifdef HAVE_GSL static void builtin_gsl_error( const char *reason, const char *file, int line, int gsl_errno ) { error_top( _( "GSL library error." ) ); error_sub( "%s - (%s:%d) - %s", reason, file, line, gsl_strerror( gsl_errno ) ); reduce_throw( reduce_context ); } #endif /*HAVE_GSL*/ void builtin_init( void ) { Toolkit *kit; int i; /* Make the _builtin toolkit and populate. */ kit = toolkit_new( main_toolkitgroup, "_builtin" ); for( i = 0; i < IM_NUMBER( builtin_table ); i++ ) { Symbol *sym; sym = symbol_new( symbol_root->expr->compile, builtin_table[i].name ); g_assert( sym->type == SYM_ZOMBIE ); sym->type = SYM_BUILTIN; sym->builtin = &builtin_table[i]; (void) tool_new_sym( kit, -1, sym ); symbol_made( sym ); } filemodel_set_auto_load( FILEMODEL( kit ) ); filemodel_set_modified( FILEMODEL( kit ), FALSE ); kit->pseudo = TRUE; /* Start up GSL, if we have it. */ #ifdef HAVE_GSL gsl_set_error_handler( builtin_gsl_error ); #endif /*HAVE_GSL*/ } /* Make a usage error. */ void builtin_usage( VipsBuf *buf, BuiltinInfo *builtin ) { int i; vips_buf_appendf( buf, ngettext( "Builtin \"%s\" takes %d argument.", "Builtin \"%s\" takes %d arguments.", builtin->nargs ), builtin->name, builtin->nargs ); vips_buf_appends( buf, "\n" ); for( i = 0; i < builtin->nargs; i++ ) vips_buf_appendf( buf, " %d - %s\n", i + 1, builtin->args[i]->name ); } #ifdef DEBUG static void builtin_trace_args( Heap *heap, const char *name, int n, HeapNode **arg ) { int i; char txt[100]; VipsBuf buf = VIPS_BUF_STATIC( txt ); for( i = 0; i < n; i++ ) { PElement t; PEPOINTRIGHT( arg[n - i - 1], &t ); vips_buf_appends( &buf, "(" ); graph_pelement( heap, &buf, &t, FALSE ); vips_buf_appends( &buf, ") " ); } printf( "builtin: %s %s\n", name, vips_buf_all( &buf ) ); } #endif /*DEBUG*/ /* Execute the internal implementation of a builtin function. */ void builtin_run( Reduce *rc, Compile *compile, int op, const char *name, HeapNode **arg, PElement *out, BuiltinInfo *builtin ) { int i; /* Typecheck args. */ for( i = 0; i < builtin->nargs; i++ ) { BuiltinTypeSpot *ts = builtin->args[i]; PElement base; PEPOINTRIGHT( arg[builtin->nargs - i - 1], &base ); if( !ts->pred( rc, &base ) ) { char txt[100]; VipsBuf buf = VIPS_BUF_STATIC( txt ); itext_value_ev( rc, &buf, &base ); error_top( _( "Bad argument." ) ); error_sub( _( "Argument %d to builtin \"%s\" should " "be \"%s\", you passed:\n %s" ), i + 1, name, ts->name, vips_buf_all( &buf ) ); reduce_throw( rc ); } } #ifdef DEBUG builtin_trace_args( rc->heap, name, builtin->nargs, arg ); #endif /*DEBUG*/ builtin->fn( rc, name, arg, out ); } nip2-8.7.0/src/main.h0000644000175000017500000000370113330327245011206 00000000000000/* Declarations supporting main.c. */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ extern Workspaceroot *main_workspaceroot; /* All the workspaces */ extern Toolkitgroup *main_toolkitgroup; /* All the toolkits */ extern Symbol *main_symbol_root; /* Root of symtable */ extern Watchgroup *main_watchgroup; /* All of the watches */ extern Imageinfogroup *main_imageinfogroup; /* All of the images */ extern void *main_c_stack_base; /* Base of C stack */ extern gboolean main_starting; /* In startup */ extern gboolean main_option_time_save; /* Time save image ops */ extern gboolean main_option_profile; /* Profile calcualtion */ extern gboolean main_option_i18n; /* Output i18n strings */ extern gboolean main_option_batch; /* Running in batch mode */ extern gboolean main_option_verbose; /* Verbose output */ /* Styles for buttons etc. */ extern GtkStyle *default_style; extern GtkStyle *selected_style; extern GtkStyle *error_style; extern GtkStyle *ok_style; extern GtkStyle *tooltip_style; extern GtkStyle *leaf_style; extern GtkStyle *dirty_style; void main_quit_test( void ); void main_reload( void ); const char *get_prefix( void ); nip2-8.7.0/src/error.h0000644000175000017500000000300213224651032011401 00000000000000/* Decls for ierror.c ... show all ierrors */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_IERROR (ierror_get_type()) #define IERROR( obj ) (GTK_CHECK_CAST( (obj), TYPE_IERROR, iError )) #define IERROR_CLASS( klass ) \ (GTK_CHECK_CLASS_CAST( (klass), TYPE_IERROR, iErrorClass )) #define IS_IERROR( obj ) (GTK_CHECK_TYPE( (obj), TYPE_IERROR )) #define IS_IERROR_CLASS( klass ) \ (GTK_CHECK_CLASS_TYPE( (klass), TYPE_IERROR )) struct _iError { Log parent_class; Toolkitgroup *kitg; /* Where we search for link ierrors */ }; typedef struct _iErrorClass { LogClass parent_class; /* My methods. */ } iErrorClass; GtkType ierror_get_type( void ); iError *ierror_new( Toolkitgroup *kitg ); nip2-8.7.0/src/BITMAPS/0000755000175000017500000000000013350464160011267 500000000000000nip2-8.7.0/src/BITMAPS/morph.xbm0000644000175000017500000000156713224651032013051 00000000000000#define morph_width 32 #define morph_height 32 static unsigned char morph_bits[] = { 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0xc4, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0xd8, 0x01, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0x10, 0x07, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0xfe, 0x30, 0x00, 0x00, 0xba, 0x28, 0x00, 0x00, 0x12, 0x99, 0x00, 0x00, 0xd6, 0xde, 0x00, 0x00, 0xe0, 0x6d, 0x03, 0x00, 0xb8, 0x10, 0x00, 0x00, 0x7c, 0x07, 0x00, 0x00, 0xce, 0x03, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xc0, 0x01, 0xc0, 0x00, 0xe0, 0x03, 0xe6, 0x00, 0xf0, 0x07, 0xfe, 0x00, 0xf8, 0x0f, 0xfc, 0x01, 0x60, 0x13, 0xf0, 0x03, 0x60, 0x33, 0xfc, 0x07, 0x60, 0x7e, 0xfe, 0x3f, 0xe0, 0xfe, 0xfe, 0x7f, 0xc0, 0xf1, 0xff, 0x7f, 0xc0, 0xff, 0xfe, 0x7f, 0x00, 0x7f, 0xfa, 0xff, 0x00, 0x30, 0xfc, 0xff, 0x00, 0x10, 0xfe, 0x7f, 0x00, 0x00, 0xff, 0x33, 0x00, 0x00, 0x87, 0x01}; nip2-8.7.0/src/BITMAPS/col.xpm0000644000175000017500000000074213224651032012511 00000000000000/* XPM */ static char *col[]={ "16 16 8 1", ". c None", "# c #000000", "f c #303030", "e c #585858", "b c #808080", "d c #a0a0a0", "c c #c3c3c3", "a c #ffffff", "....#aaaaaaaaaa#", "....#aaaaaaaaaa#", "....############", "......#bca#bc#..", "......#bca#bc#..", "......#bca#bc#..", "......#bca#bc#..", "d.....#bca#bc#..", "ddd...#bca#bc#..", "eedd..#bca#bc#..", "eeeddd#bca#bc#..", "eeeeee#bca#bc#..", "ffeeee#bca#bc#..", "#ffe############", "##ff#aaaaaaaaaa#", "###f#aaaaaaaaaa#"}; nip2-8.7.0/src/BITMAPS/automatic.xbm0000644000175000017500000000161113224651032013700 00000000000000#define automatic_width 32 #define automatic_height 32 static const unsigned char automatic_bits[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xaa, 0xaa, 0x00, 0x40, 0x55, 0x55, 0x01, 0x80, 0xff, 0xff, 0x00, 0x40, 0x01, 0x40, 0x01, 0x80, 0x01, 0xc0, 0x00, 0x40, 0xe1, 0x47, 0x01, 0x80, 0x11, 0xc8, 0x00, 0x40, 0x09, 0x50, 0x01, 0x80, 0x75, 0xd7, 0x00, 0x40, 0xf5, 0x5f, 0x01, 0x80, 0x95, 0xd9, 0x00, 0x40, 0x65, 0x56, 0x01, 0x80, 0x35, 0xd0, 0x00, 0x40, 0xf5, 0x50, 0x01, 0x80, 0xc5, 0xd4, 0x00, 0x40, 0x05, 0x56, 0x01, 0x80, 0x05, 0xd6, 0x00, 0x40, 0xed, 0x53, 0x01, 0x80, 0xd9, 0xd8, 0x00, 0x40, 0x31, 0x4c, 0x01, 0x80, 0x21, 0xc2, 0x00, 0x40, 0xff, 0x7f, 0x01, 0x80, 0xaa, 0xaa, 0x00, 0x40, 0x55, 0x55, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; nip2-8.7.0/src/BITMAPS/kill.xbm0000644000175000017500000000043413224651032012647 00000000000000#define kill_width 16 #define kill_height 16 static unsigned char kill_bits[] = { 0x04, 0xc0, 0x0a, 0xe0, 0x16, 0x70, 0x2e, 0xb8, 0x5c, 0x5c, 0xb8, 0x2e, 0x70, 0x17, 0xe0, 0x0a, 0xc0, 0x05, 0xe0, 0x0a, 0x70, 0x17, 0xb8, 0x2e, 0x5c, 0x5c, 0x2e, 0xb8, 0x16, 0x70, 0x0a, 0xe0}; nip2-8.7.0/src/BITMAPS/automatic1.xbm0000644000175000017500000000161413224651032013764 00000000000000#define automatic1_width 32 #define automatic1_height 32 static const unsigned char automatic1_bits[] = { 0x50, 0x00, 0x00, 0x00, 0xd1, 0x00, 0x00, 0x00, 0x93, 0x00, 0x00, 0x00, 0x9e, 0x01, 0x00, 0x00, 0x0c, 0x01, 0x00, 0x00, 0x64, 0x03, 0x00, 0x00, 0x67, 0x06, 0x00, 0x00, 0x04, 0x0e, 0x00, 0x00, 0x08, 0x53, 0x55, 0x55, 0x90, 0xa3, 0xaa, 0xaa, 0x10, 0xcf, 0xff, 0x7f, 0x20, 0xaa, 0x00, 0xa0, 0x20, 0xd6, 0x00, 0x60, 0x40, 0xa4, 0x00, 0xa0, 0x80, 0xc8, 0xe0, 0x67, 0x80, 0xb0, 0x10, 0xa8, 0x00, 0xd1, 0x08, 0x70, 0x00, 0xa1, 0x74, 0xa7, 0x00, 0xa2, 0xb4, 0x6b, 0x00, 0xc4, 0xf4, 0xab, 0x00, 0x84, 0x64, 0x66, 0x00, 0x88, 0x35, 0xa0, 0x00, 0x08, 0xf5, 0x60, 0x00, 0xf0, 0xc7, 0xb0, 0x00, 0xc0, 0x64, 0x70, 0x00, 0xa0, 0xe4, 0xb1, 0x00, 0xc0, 0xcc, 0x73, 0x00, 0xa0, 0x18, 0xbb, 0x00, 0xc0, 0x10, 0x6c, 0x00, 0xa0, 0xff, 0xbf, 0x00, 0x40, 0x55, 0x55, 0x00, 0xa0, 0xaa, 0xaa}; nip2-8.7.0/src/BITMAPS/watch_5.xbm0000644000175000017500000000044513224651032013250 00000000000000#define watch_5_width 16 #define watch_5_height 16 static unsigned char watch_5_bits[] = { 0x1f, 0x9c, 0x07, 0x10, 0xe3, 0x23, 0xf9, 0xcf, 0xf9, 0xcf, 0xfc, 0x9f, 0xfc, 0x9f, 0x7c, 0x90, 0x7c, 0x9f, 0x7c, 0x9f, 0x79, 0xcf, 0x79, 0xcf, 0xe3, 0xe3, 0x07, 0xf0, 0x1f, 0xfc, 0xff, 0xff}; nip2-8.7.0/src/BITMAPS/book_closed.xpm0000644000175000017500000000075713224651032014225 00000000000000/* XPM */ static char * book_closed_xpm[] = { "16 16 6 1", " c None s None", ". c black", "X c red", "o c yellow", "O c #808080", "# c white", " ", " .. ", " ..XX. ", " ..XXXXX. ", " ..XXXXXXXX. ", ".ooXXXXXXXXX. ", "..ooXXXXXXXXX. ", ".X.ooXXXXXXXXX. ", ".XX.ooXXXXXX.. ", " .XX.ooXXX..#O ", " .XX.oo..##OO. ", " .XX..##OO.. ", " .X.#OO.. ", " ..O.. ", " .. ", " "}; nip2-8.7.0/src/BITMAPS/paint.xpm0000644000175000017500000000111113224651032013036 00000000000000/* XPM */ static char * paint_xpm[] = { /* width height ncolors cpp [x_hot y_hot] */ "16 16 4 1 -1 -1", /* colors */ " s none m none c none", ". s iconColor2 m white c white", "x s iconColor1 m black c black", "a s iconGray2 m gray c #909090909090", /* pixels */ " x..xa", " x..xaa", " x..xa ", " x..xaa ", " x..xa ", " x..xaa ", " x..xa ", " xxxxaa ", " x..xxa ", " x...xxa ", " x..axxa ", " x..axxaa ", " x.axxaa ", " x.axxaa ", " xxxxaaa ", " aaaa "}; nip2-8.7.0/src/BITMAPS/book_open.xpm0000644000175000017500000000071213224651032013704 00000000000000/* XPM */ static char * book_open_xpm[] = { "16 16 4 1", " c None s None", ". c black", "X c #808080", "o c white", " ", " .. ", " .Xo. ... ", " .Xoo. ..oo. ", " .Xooo.Xooo... ", " .Xooo.oooo.X. ", " .Xooo.Xooo.X. ", " .Xooo.oooo.X. ", " .Xooo.Xooo.X. ", " .Xooo.oooo.X. ", " .Xoo.Xoo..X. ", " .Xo.o..ooX. ", " .X..XXXXX. ", " ..X....... ", " .. ", " "}; nip2-8.7.0/src/BITMAPS/watch_2.xbm0000644000175000017500000000044513224651032013245 00000000000000#define watch_2_width 16 #define watch_2_height 16 static unsigned char watch_2_bits[] = { 0x1f, 0x9c, 0x07, 0x10, 0xe3, 0x23, 0xf9, 0xcf, 0xe9, 0xcf, 0xdc, 0x9f, 0xbc, 0x9f, 0x7c, 0x9f, 0x7c, 0x9f, 0x7c, 0x9f, 0x79, 0xcf, 0x79, 0xcf, 0xe3, 0xe3, 0x07, 0xf0, 0x1f, 0xfc, 0xff, 0xff}; nip2-8.7.0/src/BITMAPS/automatic1.xpm0000644000175000017500000000245113224651032014002 00000000000000/* XPM */ static char *automatic1[]={ "32 32 8 1", ". c None", "# c #000000", "d c #585858", "c c #808000", "b c #a0a0a0", "e c #c0c000", "f c #ffc0c0", "a c #ffffff", "....#a#.........................", "#...#a##........................", "##..#aa#........................", "a####aa##.......................", "aa##aaaa#.......................", "aa#aa##a##......................", "###aa##aa##.....................", "..#aaaaaa###....................", "...#aaaa##aa#bbbbbbbbbbbbbbbbbbb", "....#aa###aa.bcccccccccccccccccd", "....#aaa####abcddddddddddddddbcd", ".....#aaa#.#.bcdeeeeeeeeeeeeebcd", ".....#aaa##.#bcdeeeeeeeeeeeeebcd", "......#aaa#..bcdeeeeeeeeeeeeebcd", ".......#aaa#.bcdeeeee######eebcd", ".......#aaaa#bcdeeee#ffffff#ebcd", "........#aaa#bcdeee#ffffffff#bcd", "........#aaaa#cdee#f###f###ffbcd", ".........#aaa#cdee#f##a###a#fbcd", "..........#aaa#dee#f######a#fbcd", "..........#aaaa#ee#ff##ff##ffbcd", "...........#aaa##e#f##fffffffbcd", "...........#aaaa#e#f####fffffbcd", "............#####e#fff##ffff#bcd", ".............bcdee#ff##fffff#bcd", ".............bcdee#ff####fff#bcd", ".............bcdee##ff####ff#bcd", ".............bcdeee##fff##f##bcd", ".............bcdeeee#fffff##ebcd", ".............bcbbbbbbbbbbbbbbbcd", ".............bcccccccccccccccccd", ".............bdddddddddddddddddd"}; nip2-8.7.0/src/BITMAPS/mini_page.xpm0000644000175000017500000000071213224651032013661 00000000000000/* XPM */ static char * mini_page_xpm[] = { "16 16 4 1", " c None s None", ". c black", "X c white", "o c #808080", " ", " ....... ", " .XXXXX.. ", " .XoooX.X. ", " .XXXXX.... ", " .XooooXoo.o ", " .XXXXXXXX.o ", " .XooooooX.o ", " .XXXXXXXX.o ", " .XooooooX.o ", " .XXXXXXXX.o ", " .XooooooX.o ", " .XXXXXXXX.o ", " ..........o ", " oooooooooo ", " "}; nip2-8.7.0/src/BITMAPS/dropper.xpm0000644000175000017500000000111313224651032013400 00000000000000/* XPM */ static char * dropper_xpm[] = { /* width height ncolors cpp [x_hot y_hot] */ "16 16 4 1 -1 -1", /* colors */ " s none m none c none", ". s iconColor1 m black c black", "X s iconColor2 m white c white", "o s iconGray2 m gray c #909090909090", /* pixels */ " ... ", " .XX... ", " .X.... ", " .......", " .......", " .........", " XX......o", " X.XX.oooo ", " X.XXX.o ", " X.XXXooo ", " X.XXXo ", " X.XXXo ", " X.XXXo ", " XXXXo ", "XXXXo ", "XXoo "}; nip2-8.7.0/src/BITMAPS/separator.xpm0000644000175000017500000000063413224651032013734 00000000000000/* XPM */ static char *separator[]={ "64 4 6 1", "# c #000040", ". c #0000ff", "c c #0080ff", "a c #58a8ff", "b c #a8dcff", "d c #ffffff", ".##############################################################.", "a..............................................................a", "bbccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccbb", "dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd"}; nip2-8.7.0/src/BITMAPS/automatic3.xpm0000644000175000017500000000245113224651032014004 00000000000000/* XPM */ static char *automatic3[]={ "32 32 8 1", "a c None", ". c #000000", "d c #585858", "c c #808000", "b c #a0a0a0", "e c #c0c000", "f c #ffc0c0", "# c #ffffff", "..##..aaaaaaaaaaaaaaaaaaaaaaaaaa", "#..###..aaaaaaaaaaaaaaaaaaaaaaaa", "##...##.aaaaaaaaaaaaaaaaaaaaaaaa", "##...##..aaaaaaaaaaaaaaaaaaaaaaa", ".#..####.aaaaaaaaaaaaaaaaaaaaaaa", "a..##..#..aaaaaaaaaaaaaaaaaaaaaa", "aa.##..##..aaaaaaaaaaaaaaaaaaaaa", "aa.######...aaaaaaaaaaaaaaaaaaaa", "aaa.####..##.bbbbbbbbbbbbbbbbbbb", "aaaa.##...###bcccccccccccccccccd", "aaaa..###.###bcddddddddddddddbcd", "aaaaa.####.##bcdeeeeeeeeeeeeebcd", "aaaaaa.####.#bcdeeeeeeeeeeeeebcd", "aaaaaaa.###.#bcdeeeeeeeeeeeeebcd", "aaaaaaa.####.bcdeeeee......eebcd", "aaaaaaaa.####.cdeeee.ffffff.ebcd", "aaaaaaaaa.####.deee.ffffffff.bcd", "aaaaaaaaaa.###.dee.f...f...ffbcd", "aaaaaaaaaa.####..e.f..#...#.fbcd", "aaaaaaaaaaa.####.e.f......#.fbcd", "aaaaaaaaaaaa.####..ff..ff..ffbcd", "aaaaaaaaaaaaa.####.f..fffffffbcd", "aaaaaaaaaaaaab.###......fffffbcd", "aaaaaaaaaaaaabc.....ff..ffff.bcd", "aaaaaaaaaaaaabcdee.ff..fffff.bcd", "aaaaaaaaaaaaabcdee.ff....fff.bcd", "aaaaaaaaaaaaabcdee..ff....ff.bcd", "aaaaaaaaaaaaabcdeee..fff..f..bcd", "aaaaaaaaaaaaabcdeeee.fffff..ebcd", "aaaaaaaaaaaaabcbbbbbbbbbbbbbbbcd", "aaaaaaaaaaaaabcccccccccccccccccd", "aaaaaaaaaaaaabdddddddddddddddddd"}; nip2-8.7.0/src/BITMAPS/automatic2.xbm0000644000175000017500000000161413224651032013765 00000000000000#define automatic2_width 32 #define automatic2_height 32 static const unsigned char automatic2_bits[] = { 0xe0, 0x00, 0x00, 0x00, 0xd0, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x00, 0x9e, 0x01, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x00, 0x64, 0x0f, 0x00, 0x00, 0x64, 0x12, 0x00, 0x00, 0x07, 0x72, 0x00, 0x00, 0x0c, 0x43, 0x55, 0x55, 0x88, 0xa6, 0xaa, 0xaa, 0x10, 0xc9, 0xff, 0x7f, 0x10, 0xb2, 0x00, 0xa0, 0x20, 0xc2, 0x00, 0x60, 0x20, 0xa4, 0x00, 0xa0, 0x40, 0xc4, 0xe0, 0x67, 0x40, 0xa8, 0x10, 0xa8, 0x80, 0xc8, 0x08, 0x70, 0x80, 0xb0, 0x74, 0xa7, 0x00, 0xd1, 0xb4, 0x6b, 0x00, 0xa1, 0xf4, 0xab, 0x00, 0xe2, 0x64, 0x66, 0x00, 0xc2, 0x34, 0xa0, 0x00, 0xc4, 0xf4, 0x60, 0x00, 0xc4, 0xc4, 0xb0, 0x00, 0xf8, 0x64, 0x70, 0x00, 0xa0, 0xe4, 0xb1, 0x00, 0xc0, 0xcc, 0x73, 0x00, 0xa0, 0x18, 0xbb, 0x00, 0xc0, 0x10, 0x6c, 0x00, 0xa0, 0xff, 0xbf, 0x00, 0x40, 0x55, 0x55, 0x00, 0xa0, 0xaa, 0xaa}; nip2-8.7.0/src/BITMAPS/dropper_msk.xbm0000644000175000017500000000046113224651032014241 00000000000000#define dropper_msk_width 16 #define dropper_msk_height 16 static unsigned char dropper_msk_bits[] = { 0x00, 0x3c, 0x00, 0x7e, 0x00, 0xfe, 0x00, 0xfe, 0x00, 0xfe, 0x80, 0xff, 0x80, 0x7f, 0xc0, 0x07, 0xe0, 0x07, 0xf0, 0x01, 0xf8, 0x00, 0x7c, 0x00, 0x3e, 0x00, 0x1e, 0x00, 0x0f, 0x00, 0x03, 0x00}; nip2-8.7.0/src/BITMAPS/Makefile.in0000644000175000017500000003323413350464104013257 00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/BITMAPS ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BISON = @BISON@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DLLWRAP = @DLLWRAP@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FFTW3_CFLAGS = @FFTW3_CFLAGS@ FFTW3_LIBS = @FFTW3_LIBS@ FGREP = @FGREP@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_LIBS = @GSL_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ IP_CFLAGS = @IP_CFLAGS@ IP_LIBS = @IP_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBGOFFICE_CFLAGS = @LIBGOFFICE_CFLAGS@ LIBGOFFICE_LIBS = @LIBGOFFICE_LIBS@ LIBGSF_CFLAGS = @LIBGSF_CFLAGS@ LIBGSF_LIBS = @LIBGSF_LIBS@ LIBGVC_CFLAGS = @LIBGVC_CFLAGS@ LIBGVC_LIBS = @LIBGVC_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ 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@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ REQUIRED_PACKAGES_CFLAGS = @REQUIRED_PACKAGES_CFLAGS@ REQUIRED_PACKAGES_LIBS = @REQUIRED_PACKAGES_LIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOP_SRCDIR = @TOP_SRCDIR@ UPDATE_DESKTOP_DATABASE = @UPDATE_DESKTOP_DATABASE@ UPDATE_MIME_DATABASE = @UPDATE_MIME_DATABASE@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XDG_OPEN = @XDG_OPEN@ XGETTEXT = @XGETTEXT@ 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@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = \ ant.xbm \ automatic.xbm \ automatic.xpm \ automatic1.xbm \ automatic1.xpm \ automatic2.xbm \ automatic2.xpm \ automatic3.xbm \ automatic3.xpm \ change.xbm \ convol.xbm \ dropper.xpm \ dropper_msk.xbm \ dropper_src.xbm \ image.xbm \ kill.xbm \ mag_msk.xbm \ magin.xpm \ magin_src.xbm \ magout.xpm \ magout_src.xbm \ morph.xbm \ pan.xpm \ paint.xpm \ program.xbm \ select.xpm \ slider.xbm \ watch_1.xbm \ watch_2.xbm \ watch_3.xbm \ watch_4.xbm \ watch_5.xbm \ watch_6.xbm \ watch_7.xbm \ watch_8.xbm \ watch_msk.xbm \ book_open.xpm \ book_closed.xpm \ toolbox_open.xpm \ toolbox_closed.xpm \ tools.xpm \ col.xpm \ separator.xpm \ floppy.xpm \ mini_page.xpm all: all-am .SUFFIXES: $(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) --foreign src/BITMAPS/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign src/BITMAPS/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): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags TAGS: ctags CTAGS: cscope cscopelist: 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 check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: nip2-8.7.0/src/BITMAPS/tools.xpm0000644000175000017500000000072513224651032013075 00000000000000/* XPM */ static char *tools[]={ "16 16 7 1", ". c None", "# c #000000", "e c #00c0c0", "c c #808080", "a c #a0a0a0", "b c #c0ffff", "d c #c3c3c3", "................", "..........####..", ".........#abc...", ".........#b#..#.", ".........#bd#c#.", "........#bdeee#.", ".......#bde###..", "......#bde#.....", ".....#bde#......", "....#bde#.......", "...#bde#........", "..#bde#.........", ".#bde#..........", "#bee#...........", "#ee#............", ".##............."}; nip2-8.7.0/src/BITMAPS/dropper_src.xbm0000644000175000017500000000046113224651032014236 00000000000000#define dropper_src_width 16 #define dropper_src_height 16 static unsigned char dropper_src_bits[] = { 0x00, 0x00, 0x00, 0x0c, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x40, 0x03, 0xa0, 0x03, 0xd0, 0x01, 0xe8, 0x00, 0x74, 0x00, 0x3a, 0x00, 0x1e, 0x00, 0x0f, 0x00, 0x03, 0x00}; nip2-8.7.0/src/BITMAPS/automatic3.xbm0000644000175000017500000000161413224651032013766 00000000000000#define automatic3_width 32 #define automatic3_height 32 static const unsigned char automatic3_bits[] = { 0x33, 0x00, 0x00, 0x00, 0xc6, 0x00, 0x00, 0x00, 0x9c, 0x00, 0x00, 0x00, 0x9c, 0x01, 0x00, 0x00, 0x0d, 0x01, 0x00, 0x00, 0x66, 0x03, 0x00, 0x00, 0x64, 0x06, 0x00, 0x00, 0x04, 0x0e, 0x00, 0x00, 0x08, 0x53, 0x55, 0x55, 0x90, 0xa3, 0xaa, 0xaa, 0x30, 0xc2, 0xff, 0x7f, 0x20, 0xa4, 0x00, 0xa0, 0x40, 0xc8, 0x00, 0x60, 0x80, 0xa8, 0x00, 0xa0, 0x80, 0xd0, 0xe0, 0x67, 0x00, 0xa1, 0x10, 0xa8, 0x00, 0xc2, 0x08, 0x70, 0x00, 0xc4, 0x74, 0xa7, 0x00, 0x84, 0xb5, 0x6b, 0x00, 0x08, 0xf5, 0xab, 0x00, 0x10, 0x66, 0x66, 0x00, 0x30, 0x34, 0xa0, 0x00, 0x20, 0xfc, 0x60, 0x00, 0xe0, 0xcf, 0xb0, 0x00, 0xc0, 0x64, 0x70, 0x00, 0xa0, 0xe4, 0xb1, 0x00, 0xc0, 0xcc, 0x73, 0x00, 0xa0, 0x18, 0xbb, 0x00, 0xc0, 0x10, 0x6c, 0x00, 0xa0, 0xff, 0xbf, 0x00, 0x40, 0x55, 0x55, 0x00, 0xa0, 0xaa, 0xaa}; nip2-8.7.0/src/BITMAPS/slider.xbm0000644000175000017500000000157213224651032013202 00000000000000#define slider_width 32 #define slider_height 32 static unsigned char slider_bits[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x93, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0x3f, 0x04, 0x36, 0x00, 0x20, 0x04, 0x36, 0x00, 0x20, 0xfc, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0x80, 0x0f, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; nip2-8.7.0/src/BITMAPS/pan.xpm0000644000175000017500000000102213224651032012502 00000000000000/* XPM */ static char * pan_xpm[] = { /* width height ncolors cpp [x_hot y_hot] */ "16 16 3 1 -1 -1", /* colors */ " s none m none c none", ". s iconColor1 m black c black", "X c #929292929292", /* pixels */ " . ", " ... ", " ..... ", " .XXX ", " .X ", " . .X . ", " .. .X .. ", "............... ", " ..XXXX.XXXX..XX", " .X .X .XX ", " X .X X ", " .X ", " ..... ", " ...X ", " .X ", " X "}; nip2-8.7.0/src/BITMAPS/automatic.xpm0000644000175000017500000000245013224651032013720 00000000000000/* XPM */ static char *automatic[]={ "32 32 8 1", ". c None", "d c #000000", "b c #585858", "a c #808000", "# c #a0a0a0", "c c #c0c000", "e c #ffc0c0", "f c #ffffff", "................................", "................................", "................................", "......###################.......", "......#aaaaaaaaaaaaaaaaab.......", "......#abbbbbbbbbbbbbb#ab.......", "......#abccccccccccccc#ab.......", "......#abccccccccccccc#ab.......", "......#abccccddddddccc#ab.......", "......#abcccdeeeeeedcc#ab.......", "......#abccdeeeeeeeedc#ab.......", "......#abcdedddedddedc#ab.......", "......#abcdedddddddddc#ab.......", "......#abcdedffddffddc#ab.......", "......#abcdeeddeeddedc#ab.......", "......#abcdeddeeeeeedc#ab.......", "......#abcdeddddeeeedc#ab.......", "......#abcdeeeddeededc#ab.......", "......#abcdeeeeeeddedc#ab.......", "......#abcdeeeeeeddedc#ab.......", "......#abcddedddddeedc#ab.......", "......#abccddeddeeeddc#ab.......", "......#abcccddeeeeddcc#ab.......", "......#abccccdeeedcccc#ab.......", "......#a###############ab.......", "......#aaaaaaaaaaaaaaaaab.......", "......#bbbbbbbbbbbbbbbbbb.......", "................................", "................................", "................................", "................................", "................................"}; nip2-8.7.0/src/BITMAPS/magout.xpm0000644000175000017500000000111313224651032013221 00000000000000/* XPM */ static char * magout_xpm[] = { /* width height ncolors cpp [x_hot y_hot] */ "16 16 4 1 -1 -1", /* colors */ " s none m none c none", ". s iconColor1 m black c black", "X s iconColor2 m white c white", "o s iconGray1 m white c #dededededede", /* pixels */ " .... ", " ..XXXX.. ", " .XXXXXXXX. ", " .XXXXXXXX. ", ".XXXXXXXXXX. ", ".XX......XX.o ", ".XX......XX.o ", ".XXXXXXXXXX.o ", " .XXXXXXXX.o ", " .XXXXXXXX..o ", " ..XXXX...X. ", " ....o.X.X. ", " ooo o...X. ", " ...X.", " ...X", " ..."}; nip2-8.7.0/src/BITMAPS/program.xbm0000644000175000017500000000157513224651032013372 00000000000000#define program_width 32 #define program_height 32 static unsigned char program_bits[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x20, 0x00, 0x00, 0x20, 0x20, 0x00, 0x00, 0x30, 0xf8, 0x38, 0x00, 0x28, 0x20, 0x44, 0x7c, 0x24, 0x10, 0x44, 0x00, 0x22, 0x10, 0x44, 0x7c, 0x7e, 0x10, 0x64, 0x01, 0x20, 0x10, 0x98, 0x00, 0x20, 0x12, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x84, 0x03, 0x40, 0x00, 0x46, 0x04, 0x30, 0x00, 0x04, 0x04, 0x48, 0x7c, 0x04, 0x02, 0x48, 0x00, 0x04, 0x01, 0x30, 0x7c, 0x84, 0x00, 0x08, 0x00, 0x44, 0x00, 0x70, 0x00, 0xce, 0x07, 0x88, 0x01, 0x00, 0x00, 0x08, 0x01, 0x00, 0x00, 0x08, 0x01, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; nip2-8.7.0/src/BITMAPS/watch_1.xbm0000644000175000017500000000044513224651032013244 00000000000000#define watch_1_width 16 #define watch_1_height 16 static unsigned char watch_1_bits[] = { 0x1f, 0x9c, 0x07, 0x10, 0xe3, 0x23, 0xf9, 0xcf, 0xf9, 0xcf, 0xfc, 0x9f, 0xfc, 0x9f, 0x04, 0x9f, 0x7c, 0x9f, 0x7c, 0x9f, 0x79, 0xcf, 0x79, 0xcf, 0xe3, 0xe3, 0x07, 0xf0, 0x1f, 0xfc, 0xff, 0xff}; nip2-8.7.0/src/BITMAPS/magin_src.xbm0000644000175000017500000000045313224651032013657 00000000000000#define magin_src_width 16 #define magin_src_height 16 static unsigned char magin_src_bits[] = { 0x00, 0x00, 0xf0, 0x00, 0xfc, 0x03, 0x9c, 0x03, 0x9e, 0x07, 0x06, 0x06, 0x06, 0x06, 0x9e, 0x07, 0x9c, 0x03, 0xfc, 0x03, 0xf0, 0x08, 0x00, 0x14, 0x00, 0x20, 0x00, 0x40, 0x00, 0x80, 0x00, 0x00}; nip2-8.7.0/src/BITMAPS/select.xpm0000644000175000017500000000116413224651032013212 00000000000000/* XPM */ static char * select_xpm[] = { /* width height ncolors cpp [x_hot y_hot] */ "16 16 5 1 -1 -1", /* colors */ " s iconColor2 m white c white", ". s iconColor1 m black c black", "X s iconGray2 m white c #bdbdbdbdbdbd", "o s none m none c none", "O s iconGray3 m white c #adadadadadad", /* pixels */ " .", " XXXXXXXXXXXXXX.", " X............X.", " X. .ooo X.", " X. OOOOO.ooo X.", " X. OX.XO.ooo X.", " X. O...O.ooo X.", " X. O.X.O.ooo X.", " X. OOOOO.ooo X.", " X........ooo X.", " X.oooooooooo X.", " X.oooooooooo X.", " X.oooooooooo X.", " X. X.", " XXXXXXXXXXXXXX.", "................"}; nip2-8.7.0/src/BITMAPS/change.xbm0000644000175000017500000000157213224651032013145 00000000000000#define change_width 32 #define change_height 32 static unsigned char change_bits[] = { 0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xfd, 0xff, 0xb2, 0x01, 0x0b, 0xd8, 0xb3, 0x01, 0x0d, 0xd8, 0xfe, 0xff, 0xfb, 0xff, 0x55, 0x55, 0x55, 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xfd, 0xff, 0x02, 0x1b, 0x8b, 0x0d, 0x03, 0x1b, 0x8d, 0x0d, 0xfe, 0xff, 0xfb, 0xff, 0x55, 0x55, 0x55, 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xfd, 0xff, 0xda, 0x00, 0x6b, 0x03, 0xdb, 0x00, 0x6d, 0x03, 0xfe, 0xff, 0xfb, 0xff, 0x55, 0x55, 0x55, 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xfd, 0xff, 0x02, 0x1b, 0x8b, 0x0d, 0x03, 0x1b, 0x8d, 0x0d, 0xfe, 0xff, 0xfb, 0xff, 0x55, 0x55, 0x55, 0x55, 0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55}; nip2-8.7.0/src/BITMAPS/toolbox_open.xpm0000644000175000017500000000105013224651032014434 00000000000000/* XPM */ static char *toolbox_open[]={ "16 16 12 1", ". c None", "b c #000000", "h c #2b1702", "a c #482704", "c c #82683b", "i c #8c4c07", "e c #8e8e8e", "j c #ca6d0a", "# c #cacbcb", "g c #ed800c", "d c #ffc0c0", "f c #ffff00", ".............#..", "...aab..........", ".baacca.........", "aaddccca........", "dddddccca.......", "dddddddaaaaaaaaa", "aadddaaeeecaafga", "gabaaeeeebafffga", "cchhhaaaaaafbggi", "haaijjjjhggfgggi", "..aiijjjaggggggi", "..aiiijjaggggii.", "..aaiijjaggii...", "..baaiijaii.....", "..bbaaaaa.......", "................"}; nip2-8.7.0/src/BITMAPS/watch_3.xbm0000644000175000017500000000044513224651032013246 00000000000000#define watch_3_width 16 #define watch_3_height 16 static unsigned char watch_3_bits[] = { 0x1f, 0x9c, 0x07, 0x10, 0xe3, 0x23, 0x79, 0xcf, 0x79, 0xcf, 0x7c, 0x9f, 0x7c, 0x9f, 0x7c, 0x9f, 0x7c, 0x9f, 0x7c, 0x9f, 0x79, 0xcf, 0x79, 0xcf, 0xe3, 0xe3, 0x07, 0xf0, 0x1f, 0xfc, 0xff, 0xff}; nip2-8.7.0/src/BITMAPS/floppy.xpm0000644000175000017500000000100413224651032013235 00000000000000/* XPM */ static char *floppy[]={ "16 16 10 1", ". c None", "# c #000000", "e c #000080", "c c #0000c0", "a c #0000ff", "b c #303030", "g c #808080", "h c #a0a0a4", "f c #c0c0c0", "d c #ffffff", "................", ".......#........", "......#ab#......", ".....#acdd##....", "....#acddddd##..", "...#acdddddddc##", "..#aeaacddddcae#", ".#aefeeaacdcae#.", "#aefaffeeacae#..", "#egfffhaaeae#...", ".##g.haaeae#....", "...##gaeae#.....", ".....##ee#......", ".......##.......", "................", "................"}; nip2-8.7.0/src/BITMAPS/watch_7.xbm0000644000175000017500000000044513224651032013252 00000000000000#define watch_7_width 16 #define watch_7_height 16 static unsigned char watch_7_bits[] = { 0x1f, 0x9c, 0x07, 0x10, 0xe3, 0x23, 0xf9, 0xcf, 0xf9, 0xcf, 0xfc, 0x9f, 0xfc, 0x9f, 0x7c, 0x9f, 0x7c, 0x9f, 0x7c, 0x9f, 0x79, 0xcf, 0x79, 0xcf, 0xe3, 0xe3, 0x07, 0xf0, 0x1f, 0xfc, 0xff, 0xff}; nip2-8.7.0/src/BITMAPS/automatic2.xpm0000644000175000017500000000245113224651032014003 00000000000000/* XPM */ static char *automatic2[]={ "32 32 8 1", ". c None", "# c #000000", "d c #585858", "c c #808000", "b c #a0a0a0", "e c #c0c000", "f c #ffc0c0", "a c #ffffff", ".....#a#........................", "....#aa#........................", "#...#aa#........................", "a####aa##.......................", "aa##aaaa##......................", "aa#aa##a####....................", "aa#aa##aa#aa#...................", "###aaaaaa#aa###.................", "..##aaaa##aaabbbbbbbbbbbbbbbbbbb", "...#aaa#.##aabcccccccccccccccccd", "....#aaa#..#abcddddddddddddddbcd", "....#aaaa#..#bcdeeeeeeeeeeeeebcd", ".....#aaa#...bcdeeeeeeeeeeeeebcd", ".....#aaaa#..bcdeeeeeeeeeeeeebcd", "......#aaa#..bcdeeeee######eebcd", "......#aaaa#.bcdeeee#ffffff#ebcd", ".......#aaa#.bcdeee#ffffffff#bcd", ".......#aaaa#bcdee#f###f###ffbcd", "........#aaa#bcdee#f##a###a#fbcd", "........#aaaa#cdee#f######a#fbcd", ".........#aaa#cdee#ff##ff##ffbcd", ".........#aaaa#dee#f##fffffffbcd", "..........#aaa#dee#f####fffffbcd", "..........#aaa#dee#fff##ffff#bcd", "...........####dee#ff##fffff#bcd", ".............bcdee#ff####fff#bcd", ".............bcdee##ff####ff#bcd", ".............bcdeee##fff##f##bcd", ".............bcdeeee#fffff##ebcd", ".............bcbbbbbbbbbbbbbbbcd", ".............bcccccccccccccccccd", ".............bdddddddddddddddddd"}; nip2-8.7.0/src/BITMAPS/magin.xpm0000644000175000017500000000111213224651032013017 00000000000000/* XPM */ static char * magin_xpm[] = { /* width height ncolors cpp [x_hot y_hot] */ "16 16 4 1 -1 -1", /* colors */ " s none m none c none", ". s iconColor1 m black c black", "X s iconColor2 m white c white", "o s iconGray1 m white c #dededededede", /* pixels */ " .... ", " ..XXXX.. ", " .XXXXXXXX. ", " .XXX..XXX. ", ".XXXX..XXXX. ", ".XX......XX.o ", ".XX......XX.o ", ".XXXX..XXXX.o ", " .XXX..XXX.o ", " .XXXXXXXX..o ", " ..XXXX...X. ", " ....o.X.X. ", " ooo o...X. ", " ...X.", " ...X", " ..."}; nip2-8.7.0/src/BITMAPS/watch_6.xbm0000644000175000017500000000044513224651032013251 00000000000000#define watch_6_width 16 #define watch_6_height 16 static unsigned char watch_6_bits[] = { 0x1f, 0x9c, 0x07, 0x10, 0xe3, 0x23, 0xf9, 0xcf, 0xf9, 0xcf, 0xfc, 0x9f, 0xfc, 0x9f, 0x7c, 0x9f, 0x7c, 0x9e, 0x7c, 0x9d, 0x79, 0xcb, 0x79, 0xcf, 0xe3, 0xe3, 0x07, 0xf0, 0x1f, 0xfc, 0xff, 0xff}; nip2-8.7.0/src/BITMAPS/mag_msk.xbm0000644000175000017500000000044513224651032013334 00000000000000#define mag_msk_width 16 #define mag_msk_height 16 static unsigned char mag_msk_bits[] = { 0xf0, 0x00, 0xfc, 0x03, 0xfe, 0x07, 0xfe, 0x07, 0xff, 0x0f, 0xff, 0x0f, 0xff, 0x0f, 0xff, 0x0f, 0xfe, 0x07, 0xfe, 0x0f, 0xfc, 0x1f, 0xf0, 0x3e, 0x00, 0x7c, 0x00, 0xf8, 0x00, 0xf0, 0x00, 0xe0}; nip2-8.7.0/src/BITMAPS/convol.xbm0000644000175000017500000000157213224651032013220 00000000000000#define convol_width 32 #define convol_height 32 static unsigned char convol_bits[] = { 0x00, 0x00, 0x00, 0x00, 0x84, 0x3c, 0xf3, 0x1e, 0xc6, 0xa0, 0x44, 0x02, 0xa4, 0x10, 0x62, 0x0e, 0xe4, 0x09, 0x81, 0x10, 0x84, 0x88, 0x80, 0x10, 0x8e, 0x88, 0x77, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x8c, 0x31, 0x86, 0x08, 0x42, 0x4a, 0xc9, 0x0c, 0x8e, 0x49, 0xa9, 0x08, 0x52, 0x4a, 0xee, 0x09, 0x52, 0x4a, 0x88, 0x08, 0x8c, 0x31, 0x86, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x91, 0x67, 0x0c, 0x92, 0x99, 0x90, 0x12, 0x52, 0x91, 0x43, 0x08, 0xd2, 0x13, 0x24, 0x04, 0x12, 0x11, 0x14, 0x02, 0x0c, 0xb9, 0xf3, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x9e, 0x21, 0xe6, 0x19, 0x48, 0x32, 0x09, 0x25, 0x0c, 0x29, 0x86, 0x10, 0x90, 0x78, 0x49, 0x08, 0x50, 0x20, 0x49, 0x04, 0xce, 0x23, 0x46, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; nip2-8.7.0/src/BITMAPS/ant.xbm0000644000175000017500000000632113224651032012477 00000000000000#define ant_width 64 #define ant_height 64 static unsigned char ant_bits[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0x6a, 0x77, 0x77, 0xef, 0xfe, 0x5b, 0x55, 0x55, 0xb5, 0xad, 0xad, 0xb5, 0x6b, 0x17, 0xaa, 0x6a, 0x6b, 0xdb, 0x76, 0xdf, 0xde, 0x3d, 0xaa, 0x56, 0xd5, 0xb6, 0xad, 0xf5, 0x75, 0x57, 0x55, 0xd5, 0x2a, 0xd5, 0xf6, 0x5e, 0xdf, 0x2d, 0xaa, 0xad, 0xa4, 0x54, 0xad, 0xfb, 0x75, 0x3f, 0x55, 0x5b, 0x4a, 0x49, 0xdb, 0xae, 0xdf, 0x75, 0xaa, 0xaa, 0x28, 0x92, 0x74, 0xf7, 0xf6, 0x5f, 0xd5, 0x16, 0x45, 0x55, 0xad, 0xbd, 0x5b, 0x3b, 0xba, 0xaa, 0xa8, 0x88, 0xe8, 0xef, 0xfe, 0x2f, 0xa5, 0x45, 0x05, 0x25, 0x55, 0xbd, 0xab, 0x6a, 0x5d, 0x29, 0xaa, 0x48, 0xd2, 0xeb, 0xfe, 0x2d, 0x55, 0x42, 0x91, 0x92, 0x54, 0xbf, 0x95, 0x2a, 0xd5, 0x14, 0x24, 0x25, 0xa5, 0x6a, 0xb7, 0x56, 0x35, 0xa1, 0x42, 0x4a, 0xaa, 0xdf, 0xad, 0x2a, 0xad, 0x14, 0x94, 0x90, 0x54, 0x7a, 0x55, 0x55, 0x55, 0xa0, 0x22, 0x25, 0xd1, 0xaf, 0xa5, 0x2a, 0x55, 0x05, 0x48, 0x4a, 0x2a, 0xbd, 0xaa, 0x2a, 0x2a, 0xa8, 0x92, 0x90, 0xca, 0xaa, 0x54, 0x55, 0xad, 0x02, 0x44, 0x4a, 0xb2, 0x5e, 0x55, 0x2a, 0x2a, 0xa8, 0x90, 0x24, 0xa5, 0xb5, 0xaa, 0x52, 0x95, 0x04, 0x0a, 0x91, 0x28, 0xad, 0x4a, 0x55, 0x16, 0x42, 0x20, 0x42, 0xaa, 0xaa, 0x52, 0x6a, 0x55, 0x08, 0x82, 0x94, 0xaa, 0x7a, 0x55, 0x35, 0x0a, 0x91, 0x10, 0x20, 0x49, 0xa5, 0xaa, 0x6a, 0x55, 0x04, 0x40, 0x55, 0xaa, 0x7a, 0x91, 0x3a, 0x0d, 0x51, 0x02, 0x80, 0x4a, 0x65, 0x55, 0x55, 0x55, 0x04, 0x48, 0xaa, 0x54, 0xda, 0xaa, 0x3a, 0x0a, 0x91, 0x00, 0x11, 0xa9, 0x6a, 0xa9, 0x16, 0x55, 0x44, 0x52, 0xa4, 0x52, 0xd5, 0x52, 0x35, 0x8a, 0x10, 0x08, 0x29, 0x95, 0xaa, 0xaa, 0x4a, 0x55, 0x4a, 0xa1, 0x52, 0x6a, 0xad, 0x55, 0x1d, 0x95, 0x24, 0x0a, 0x85, 0xaa, 0x56, 0x55, 0x23, 0x15, 0x91, 0x54, 0x69, 0x79, 0x4b, 0x55, 0x2d, 0x6b, 0x4a, 0x51, 0x4a, 0xca, 0x92, 0xaa, 0x52, 0x96, 0x24, 0x95, 0xaa, 0xb5, 0xa4, 0x92, 0x15, 0x55, 0x49, 0xaa, 0xb4, 0x2a, 0x09, 0x25, 0x25, 0xad, 0x92, 0x12, 0xd5, 0x55, 0x52, 0x92, 0x54, 0x5b, 0xa4, 0xa4, 0xba, 0xa2, 0x84, 0x4a, 0x55, 0xaa, 0x55, 0x49, 0x6a, 0x95, 0x52, 0x11, 0x2a, 0xbb, 0x12, 0x92, 0xaa, 0x24, 0x25, 0xa6, 0x24, 0x56, 0xd5, 0xa4, 0xf2, 0x49, 0x45, 0x29, 0x29, 0xed, 0x2a, 0xa9, 0xb6, 0x52, 0x5b, 0x4b, 0x2a, 0x5b, 0x55, 0x45, 0x29, 0xd4, 0xaa, 0x54, 0x55, 0xb6, 0xab, 0x2a, 0xaa, 0x55, 0x55, 0x95, 0x2a, 0xd5, 0xde, 0x4a, 0x21, 0x48, 0xaa, 0x52, 0x25, 0xad, 0xaa, 0x55, 0x4a, 0x95, 0xad, 0xaa, 0x6a, 0xdb, 0xb6, 0x96, 0x24, 0x62, 0x6b, 0x95, 0x54, 0xaa, 0x6d, 0x55, 0x49, 0x59, 0xda, 0xaa, 0x2a, 0x6d, 0xb5, 0x57, 0x12, 0x52, 0xa7, 0x56, 0x55, 0xd5, 0x6a, 0xad, 0xa2, 0x94, 0x68, 0x55, 0x35, 0xad, 0x57, 0xb5, 0x14, 0x55, 0xaa, 0x55, 0x6b, 0xb5, 0xac, 0xaa, 0xa2, 0x24, 0x75, 0xd5, 0x36, 0x6d, 0xab, 0x54, 0x15, 0xa9, 0xac, 0xad, 0x6a, 0xaa, 0xaa, 0x4a, 0x4a, 0x55, 0xdb, 0x5a, 0x5d, 0x55, 0x15, 0x14, 0x54, 0x55, 0xb5, 0xd7, 0x36, 0xaa, 0x4a, 0x85, 0xa2, 0xaa, 0x7f, 0x55, 0x6b, 0x55, 0x91, 0x02, 0x54, 0x7d, 0xd5, 0x6a, 0x37, 0xaa, 0x4a, 0x4a, 0x48, 0xa5, 0x7f, 0x5b, 0x6d, 0x55, 0xa4, 0x02, 0x92, 0xea, 0xea, 0x56, 0x2b, 0x92, 0x12, 0x01, 0x40, 0xa8, 0xbd, 0x55, 0x55, 0x2a, 0xa4, 0x0a, 0x12, 0x45, 0xd7, 0xb5, 0x2e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; nip2-8.7.0/src/BITMAPS/watch_msk.xbm0000644000175000017500000000053713224651032013700 00000000000000#define watch_msk_width 16 #define watch_msk_height 16 #define watch_msk_x_hot 7 #define watch_msk_y_hot 7 static unsigned char watch_msk_bits[] = { 0xe0, 0x63, 0xf8, 0xef, 0xfc, 0xdf, 0xfe, 0xbf, 0xfe, 0x7f, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xfe, 0x7f, 0xfc, 0x7f, 0xf8, 0x3f, 0xf0, 0x1f, 0xc0, 0x07}; nip2-8.7.0/src/BITMAPS/watch_4.xbm0000644000175000017500000000044513224651032013247 00000000000000#define watch_4_width 16 #define watch_4_height 16 static unsigned char watch_4_bits[] = { 0x1f, 0x9c, 0x07, 0x10, 0xe3, 0x23, 0xf9, 0xcf, 0xf9, 0xcb, 0xfc, 0x9d, 0xfc, 0x9e, 0x7c, 0x9f, 0x7c, 0x9f, 0x7c, 0x9f, 0x79, 0xcf, 0x79, 0xcf, 0xe3, 0xe3, 0x07, 0xf0, 0x1f, 0xfc, 0xff, 0xff}; nip2-8.7.0/src/BITMAPS/image.xbm0000644000175000017500000000157513224651032013005 00000000000000#define program_width 32 #define program_height 32 static unsigned char program_bits[] = { 0x55, 0x55, 0x55, 0x55, 0xfe, 0xff, 0xff, 0xff, 0x03, 0x10, 0x00, 0x40, 0x02, 0x18, 0x00, 0xc0, 0x03, 0x08, 0x00, 0x40, 0x02, 0x00, 0x38, 0xc0, 0x03, 0x1c, 0xcc, 0x40, 0x02, 0x34, 0xc4, 0xc0, 0x03, 0xa0, 0x00, 0x40, 0x02, 0x90, 0x78, 0xc0, 0x03, 0x90, 0x5c, 0x40, 0x02, 0xc0, 0x18, 0xc0, 0x03, 0x20, 0x00, 0x40, 0x02, 0x30, 0x00, 0xc0, 0x03, 0x10, 0x00, 0x40, 0x02, 0x18, 0x06, 0xc0, 0x03, 0x08, 0x0c, 0x40, 0x02, 0xd0, 0x08, 0xc0, 0x03, 0xb0, 0x0f, 0x40, 0x02, 0x00, 0x00, 0xc0, 0x03, 0x80, 0x00, 0x40, 0x02, 0xc0, 0x01, 0xc0, 0x03, 0x80, 0x7f, 0x40, 0x02, 0x00, 0x39, 0xc0, 0x03, 0x00, 0x00, 0x40, 0x02, 0x00, 0x01, 0xe0, 0x03, 0x00, 0x1f, 0x60, 0x02, 0x00, 0x1c, 0xf0, 0x03, 0x00, 0x30, 0x58, 0x02, 0x00, 0xe0, 0xfe, 0xff, 0xff, 0xff, 0x7f, 0xaa, 0xaa, 0xaa, 0xaa}; nip2-8.7.0/src/BITMAPS/Makefile.am0000644000175000017500000000131513224651032013237 00000000000000EXTRA_DIST = \ ant.xbm \ automatic.xbm \ automatic.xpm \ automatic1.xbm \ automatic1.xpm \ automatic2.xbm \ automatic2.xpm \ automatic3.xbm \ automatic3.xpm \ change.xbm \ convol.xbm \ dropper.xpm \ dropper_msk.xbm \ dropper_src.xbm \ image.xbm \ kill.xbm \ mag_msk.xbm \ magin.xpm \ magin_src.xbm \ magout.xpm \ magout_src.xbm \ morph.xbm \ pan.xpm \ paint.xpm \ program.xbm \ select.xpm \ slider.xbm \ watch_1.xbm \ watch_2.xbm \ watch_3.xbm \ watch_4.xbm \ watch_5.xbm \ watch_6.xbm \ watch_7.xbm \ watch_8.xbm \ watch_msk.xbm \ book_open.xpm \ book_closed.xpm \ toolbox_open.xpm \ toolbox_closed.xpm \ tools.xpm \ col.xpm \ separator.xpm \ floppy.xpm \ mini_page.xpm nip2-8.7.0/src/BITMAPS/magout_src.xbm0000644000175000017500000000045613224651032014063 00000000000000#define magout_src_width 16 #define magout_src_height 16 static unsigned char magout_src_bits[] = { 0x00, 0x00, 0xf0, 0x00, 0xfc, 0x03, 0xfc, 0x03, 0xfe, 0x07, 0x06, 0x06, 0x06, 0x06, 0xfe, 0x07, 0xfc, 0x03, 0xfc, 0x03, 0xf0, 0x08, 0x00, 0x14, 0x00, 0x20, 0x00, 0x40, 0x00, 0x80, 0x00, 0x00}; nip2-8.7.0/src/BITMAPS/watch_8.xbm0000644000175000017500000000044513224651032013253 00000000000000#define watch_8_width 16 #define watch_8_height 16 static unsigned char watch_8_bits[] = { 0x1f, 0x9c, 0x07, 0x10, 0xe3, 0x23, 0xf9, 0xcf, 0xf9, 0xcf, 0xfc, 0x9f, 0xfc, 0x9f, 0x7c, 0x9f, 0x3c, 0x9f, 0x5c, 0x9f, 0x69, 0xcf, 0x79, 0xcf, 0xe3, 0xe3, 0x07, 0xf0, 0x1f, 0xfc, 0xff, 0xff}; nip2-8.7.0/src/BITMAPS/toolbox_closed.xpm0000644000175000017500000000101413224651032014744 00000000000000/* XPM */ static char *toolbox_closed[]={ "16 16 10 1", ". c None", "a c #000000", "b c #2b1702", "c c #482704", "f c #8c4c07", "h c #ca6d0a", "# c #cacbcb", "d c #ed800c", "g c #ffff00", "e c #ffffff", ".............#..", ".........abcc...", ".......ccabdec..", ".....cccfabeecc.", "...ccccffaddddc.", "..cfffccddddcfc.", ".bfffffcddccgfc.", ".afffffcacgggdc.", ".bbbcccccfgaddf.", ".cfhhhhbffgdddf.", ".cffhhhcddddddf.", ".cfffhhcddddff..", ".ccffhhcddff....", ".accffhcff......", ".aaccccc........", "................"}; nip2-8.7.0/src/watch.c0000644000175000017500000005514413224651032011367 00000000000000/* Watch stuff in the prefs workspace. */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your watch) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #include "ip.h" static iContainerClass *watchgroup_parent_class = NULL; /* Our signals. */ enum { SIG_WATCH_CHANGED, /* "changed" on one of our watches */ SIG_LAST }; static guint watchgroup_signals[SIG_LAST] = { 0 }; static void watchgroup_changed( Watchgroup *watchgroup, Watch *watch ) { g_signal_emit( G_OBJECT( watchgroup ), watchgroup_signals[SIG_WATCH_CHANGED], 0, watch ); } static void watchgroup_class_init( WatchgroupClass *class ) { watchgroup_parent_class = g_type_class_peek_parent( class ); watchgroup_signals[SIG_WATCH_CHANGED] = g_signal_new( "watch_changed", G_OBJECT_CLASS_TYPE( class ), G_SIGNAL_RUN_FIRST, G_STRUCT_OFFSET( WatchgroupClass, watch_changed ), NULL, NULL, g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1, G_TYPE_POINTER ); } static void watchgroup_init( Watchgroup *watchgroup ) { #ifdef DEBUG printf( "watchgroup_init\n" ); #endif /*DEBUG*/ watchgroup->auto_save_timeout = 0; } GType watchgroup_get_type( void ) { static GType watchgroup_type = 0; if( !watchgroup_type ) { static const GTypeInfo info = { sizeof( WatchgroupClass ), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) watchgroup_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof( Watchgroup ), 32, /* n_preallocs */ (GInstanceInitFunc) watchgroup_init, }; watchgroup_type = g_type_register_static( TYPE_ICONTAINER, "Watchgroup", &info, 0 ); } return( watchgroup_type ); } Watchgroup * watchgroup_new( Workspaceroot *workspaceroot, const char *name ) { Watchgroup *watchgroup = WATCHGROUP( g_object_new( TYPE_WATCHGROUP, NULL ) ); /* Assume it's a static string. */ watchgroup->name = name; watchgroup->workspaceroot = workspaceroot; icontainer_set_hash( ICONTAINER( watchgroup ) ); return( watchgroup ); } /* Get the ws we are storing prefs in, and check it looks OK. */ static Workspace * watchgroup_get_workspace( Watchgroup *watchgroup ) { Compile *compile; Symbol *sym; if( !watchgroup->workspaceroot->sym ) return( NULL ); compile = watchgroup->workspaceroot->sym->expr->compile; if( !(sym = compile_lookup( compile, watchgroup->name )) || !sym->expr->compile || sym->type != SYM_WORKSPACE || !sym->ws ) return( NULL ); return( sym->ws ); } static void watchgroup_save( Watchgroup *watchgroup ) { Workspace *ws; if( (ws = watchgroup_get_workspace( watchgroup )) ) { Workspacegroup *wsg = workspace_get_workspacegroup( ws ); Filemodel *filemodel = FILEMODEL( wsg ); if( filemodel->modified ) { symbol_recalculate_all(); /* Ignore error returns ... hmm! Tricky: we can come * here during shutdown. */ (void) filemodel_top_save( filemodel, filemodel->filename ); filemodel_set_modified( filemodel, FALSE ); } } } static gboolean watchgroup_dirty_timeout_cb( Watchgroup *watchgroup ) { watchgroup->auto_save_timeout = 0; watchgroup_save( watchgroup ); return( FALSE ); } void watchgroup_dirty( Watchgroup *watchgroup ) { Workspace *ws; /* Find the preferences workspace. */ if( (ws = watchgroup_get_workspace( watchgroup )) ) { Workspacegroup *wsg = workspace_get_workspacegroup( ws ); /* Mark ws dirty, start save timer. */ filemodel_set_modified( FILEMODEL( wsg ), TRUE ); IM_FREEF( g_source_remove, watchgroup->auto_save_timeout ); watchgroup->auto_save_timeout = g_timeout_add( 1000, (GSourceFunc) watchgroup_dirty_timeout_cb, watchgroup ); } } void watchgroup_flush( Watchgroup *watchgroup ) { /* Do we have a pending save? */ if( watchgroup->auto_save_timeout ) { watchgroup_save( watchgroup ); IM_FREEF( g_source_remove, watchgroup->auto_save_timeout ); } } static iContainerClass *watch_parent_class = NULL; static GSList *watch_all = NULL; static void watch_finalize( GObject *gobject ) { Watch *watch; g_return_if_fail( gobject != NULL ); g_return_if_fail( IS_WATCH( gobject ) ); watch = WATCH( gobject ); #ifdef DEBUG printf( "watch_finalize: %s\n", NN( IOBJECT( watch )->name ) ); #endif /*DEBUG*/ watch_all = g_slist_remove( watch_all, watch ); G_OBJECT_CLASS( watch_parent_class )->finalize( gobject ); } static void watch_dispose( GObject *gobject ) { Watch *watch; g_return_if_fail( gobject != NULL ); g_return_if_fail( IS_WATCH( gobject ) ); watch = WATCH( gobject ); #ifdef DEBUG printf( "watch_dispose: %s\n", NN( IOBJECT( watch )->name ) ); #endif /*DEBUG*/ /* My instance destroy stuff. */ FREESID( watch->destroy_sid, watch->row ); FREESID( watch->changed_sid, watch->row ); watch->row = NULL; G_OBJECT_CLASS( watch_parent_class )->dispose( gobject ); } static void watch_changed( iObject *iobject ) { Watch *watch = WATCH( iobject ); Watchgroup *watchgroup = WATCHGROUP( ICONTAINER( watch )->parent ); /* Emit on our group too. Can get here before our parent is linked on, * careful. */ if( watchgroup ) watchgroup_changed( WATCHGROUP( ICONTAINER( watch )->parent ), watch ); IOBJECT_CLASS( watch_parent_class )->changed( iobject ); } static void watch_class_init( WatchClass *class ) { GObjectClass *gobject_class = (GObjectClass *) class; iObjectClass *iobject_class = (iObjectClass *) class; WatchClass *watch_class = (WatchClass *) class; watch_parent_class = g_type_class_peek_parent( class ); gobject_class->finalize = watch_finalize; gobject_class->dispose = watch_dispose; iobject_class->changed = watch_changed; watch_class->update = NULL; watch_class->get_value = NULL; } static void watch_init( Watch *watch ) { watch->row = NULL; watch->ok = FALSE; watch->destroy_sid = 0; watch->changed_sid = 0; watch_all = g_slist_prepend( watch_all, watch ); } GType watch_get_type( void ) { static GType watch_type = 0; if( !watch_type ) { static const GTypeInfo info = { sizeof( WatchClass ), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) watch_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof( Watch ), 32, /* n_preallocs */ (GInstanceInitFunc) watch_init, }; watch_type = g_type_register_static( TYPE_ICONTAINER, "Watch", &info, 0 ); } return( watch_type ); } static void watch_link( Watch *watch, Watchgroup *watchgroup, const char *name ) { iobject_set( IOBJECT( watch ), name, NULL ); icontainer_child_add( ICONTAINER( watchgroup ), ICONTAINER( watch ), -1 ); } static void watch_destroy_cb( Row *row, Watch *watch ) { #ifdef DEBUG printf( "watch_destroy_cb\n" ); #endif /*DEBUG*/ watch->row = NULL; watch->ok = FALSE; watch->destroy_sid = 0; watch->changed_sid = 0; } /* The row we are watching has changed. */ static void watch_changed_cb( Row *row, Watch *watch ) { #ifdef DEBUG printf( "watch_changed_cb: %s\n", NN( IOBJECT( watch )->name ) ); #endif /*DEBUG*/ if( row->expr ) watch->ok = WATCH_GET_CLASS( watch )->update( watch ); iobject_changed( IOBJECT( watch ) ); } /* Make sure we're linked to the thing we watch. */ static void watch_attach( Watch *watch ) { Watchgroup *watchgroup = WATCHGROUP( ICONTAINER( watch )->parent ); const char *name = IOBJECT( watch )->name; Workspace *ws; Symbol *sym; if( watch->row ) return; if( (ws = watchgroup_get_workspace( watchgroup )) && ws->sym->expr && ws->sym->expr->compile && (sym = compile_lookup( ws->sym->expr->compile, name )) && sym->expr->row ) { watch->row = sym->expr->row; watch->destroy_sid = g_signal_connect( G_OBJECT( watch->row ), "destroy", G_CALLBACK( watch_destroy_cb ), watch ); watch->changed_sid = g_signal_connect( G_OBJECT( watch->row ), "changed", G_CALLBACK( watch_changed_cb ), watch ); } } Watch * watch_find( Watchgroup *watchgroup, const char *name ) { return( (Watch *) (icontainer_child_lookup( ICONTAINER( watchgroup ), name )) ); } static gboolean watch_get( Watch *watch, void **out ) { #ifdef DEBUG printf( "watch_get: %s\n", NN( IOBJECT( watch )->name ) ); #endif /*DEBUG*/ watch_attach( watch ); if( !watch->row ) return( FALSE ); if( !watch->ok ) watch->ok = WATCH_GET_CLASS( watch )->update( watch ); if( !watch->ok ) return( FALSE ); *out = WATCH_GET_CLASS( watch )->get_value( watch ); return( TRUE ); } static void * watch_relink( Watch *watch ) { if( !watch->row ) { watch_attach( watch ); if( watch->row ) iobject_changed( IOBJECT( watch ) ); } return( NULL ); } void watch_relink_all( void ) { slist_map( watch_all, (SListMapFn) watch_relink, NULL ); } void watch_vset( Watch *watch, const char *fmt, va_list args ) { Watchgroup *watchgroup = WATCHGROUP( ICONTAINER( watch )->parent ); Workspace *ws; /* In case we try to set after prefs has gone. */ if( !(ws = watchgroup_get_workspace( watchgroup )) || ws->in_dispose ) return; if( watch->row && watch->row->child_rhs && watch->row->child_rhs->itext ) { iText *itext = ITEXT( watch->row->child_rhs->itext ); char buf[256]; (void) im_vsnprintf( buf, 256, fmt, args ); if( itext_set_formula( itext, buf ) ) { #ifdef DEBUG printf( "watch_vset: %s = %s\n", IOBJECT( watch )->name, buf ); #endif /*DEBUG*/ itext_set_edited( itext, TRUE ); if( watch->row->sym ) expr_dirty( watch->row->sym->expr, link_serial_new() ); watchgroup_dirty( WATCHGROUP( ICONTAINER( watch )->parent ) ); } } } void watch_set( Watch *watch, const char *fmt, ... ) { va_list args; va_start( args, fmt ); watch_vset( watch, fmt, args ); va_end( args ); } static WatchClass *watch_double_parent_class = NULL; static gboolean watch_double_update( Watch *watch ) { WatchDouble *watch_double = WATCH_DOUBLE( watch ); PElement *root = &watch->row->expr->root; #ifdef DEBUG printf( "watch_double_update\n" ); #endif /*DEBUG*/ if( PEISNOVAL( root ) ) return( FALSE ); if( !PEISREAL( root ) ) { heap_error_typecheck( root, IOBJECT( watch )->name, "real" ); return( FALSE ); } watch_double->value = PEGETREAL( root ); return( TRUE ); } static void * watch_double_get_value( Watch *watch ) { WatchDouble *watch_double = WATCH_DOUBLE( watch ); return( (void *) &watch_double->value ); } static void watch_double_class_init( WatchDoubleClass *class ) { WatchClass *watch_class = (WatchClass *) class; watch_double_parent_class = g_type_class_peek_parent( class ); watch_class->update = watch_double_update; watch_class->get_value = watch_double_get_value; } static void watch_double_init( WatchDouble *watch_double ) { #ifdef DEBUG printf( "watch_double_init\n" ); #endif /*DEBUG*/ watch_double->value = -1.0; } GType watch_double_get_type( void ) { static GType watch_double_type = 0; if( !watch_double_type ) { static const GTypeInfo info = { sizeof( WatchDoubleClass ), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) watch_double_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof( WatchDouble ), 32, /* n_preallocs */ (GInstanceInitFunc) watch_double_init, }; watch_double_type = g_type_register_static( TYPE_WATCH, "WatchDouble", &info, 0 ); } return( watch_double_type ); } static Watch * watch_double_new( Watchgroup *watchgroup, const char *name ) { WatchDouble *watch_double = WATCH_DOUBLE( g_object_new( TYPE_WATCH_DOUBLE, NULL ) ); watch_link( WATCH( watch_double ), watchgroup, name ); return( WATCH( watch_double ) ); } double watch_double_get( Watchgroup *watchgroup, const char *name, double fallback ) { Watch *watch; void *value; if( !watchgroup ) return( fallback ); if( !(watch = watch_find( watchgroup, name )) ) watch = watch_double_new( watchgroup, name ); g_assert( IS_WATCH_DOUBLE( watch ) ); if( !watch_get( watch, &value ) ) return( fallback ); return( *((double *) value) ); } static WatchClass *watch_int_parent_class = NULL; static gboolean watch_int_update( Watch *watch ) { WatchInt *watch_int = WATCH_INT( watch ); Expr *expr = watch->row->expr; PElement *root; #ifdef DEBUG printf( "watch_int_update: %s\n", NN( IOBJECT( watch )->name ) ); #endif /*DEBUG*/ /* Can get called during shutdown :-( main_watchgroup_changed_cb() can * call us before destroying the row, but after killing the expr. */ if( !expr ) return( FALSE ); root = &expr->root; if( PEISNOVAL( root ) ) return( FALSE ); if( !PEISREAL( root ) ) { heap_error_typecheck( root, IOBJECT( watch )->name, "real" ); return( FALSE ); } watch_int->value = IM_RINT( PEGETREAL( root ) ); return( TRUE ); } static void * watch_int_get_value( Watch *watch ) { WatchInt *watch_int = WATCH_INT( watch ); return( (void *) &watch_int->value ); } static void watch_int_class_init( WatchIntClass *class ) { WatchClass *watch_class = (WatchClass *) class; watch_int_parent_class = g_type_class_peek_parent( class ); watch_class->update = watch_int_update; watch_class->get_value = watch_int_get_value; } static void watch_int_init( WatchInt *watch_int ) { #ifdef DEBUG printf( "watch_int_init\n" ); #endif /*DEBUG*/ watch_int->value = -1; } GType watch_int_get_type( void ) { static GType watch_int_type = 0; if( !watch_int_type ) { static const GTypeInfo info = { sizeof( WatchIntClass ), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) watch_int_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof( WatchInt ), 32, /* n_preallocs */ (GInstanceInitFunc) watch_int_init, }; watch_int_type = g_type_register_static( TYPE_WATCH, "WatchInt", &info, 0 ); } return( watch_int_type ); } static Watch * watch_int_new( Watchgroup *watchgroup, const char *name ) { WatchInt *watch_int = WATCH_INT( g_object_new( TYPE_WATCH_INT, NULL ) ); watch_link( WATCH( watch_int ), watchgroup, name ); return( WATCH( watch_int ) ); } int watch_int_get( Watchgroup *watchgroup, const char *name, int fallback ) { Watch *watch; void *value; if( !watchgroup || !name ) return( fallback ); if( !(watch = watch_find( watchgroup, name )) ) watch = watch_int_new( watchgroup, name ); g_assert( IS_WATCH_INT( watch ) ); if( !watch_get( watch, &value ) ) return( fallback ); return( *((int *) value) ); } static WatchClass *watch_path_parent_class = NULL; static void watch_path_finalize( GObject *gobject ) { WatchPath *watch_path; g_return_if_fail( gobject != NULL ); g_return_if_fail( IS_WATCH_PATH( gobject ) ); #ifdef DEBUG printf( "watch_path_finalize\n" ); #endif /*DEBUG*/ watch_path = WATCH_PATH( gobject ); /* My instance destroy stuff. */ IM_FREEF( slist_free_all, watch_path->value ); G_OBJECT_CLASS( watch_path_parent_class )->finalize( gobject ); } static gboolean watch_path_update( Watch *watch ) { WatchPath *watch_path = WATCH_PATH( watch ); PElement *root = &watch->row->expr->root; GSList *value; #ifdef DEBUG printf( "watch_path_update\n" ); #endif /*DEBUG*/ if( !heap_get_lstring( root, &value ) ) return( FALSE ); IM_FREEF( slist_free_all, watch_path->value ); watch_path->value = value; return( TRUE ); } static void * watch_path_get_value( Watch *watch ) { WatchPath *watch_path = WATCH_PATH( watch ); return( (void *) &watch_path->value ); } static void watch_path_class_init( WatchPathClass *class ) { GObjectClass *gobject_class = (GObjectClass *) class; WatchClass *watch_class = (WatchClass *) class; watch_path_parent_class = g_type_class_peek_parent( class ); gobject_class->finalize = watch_path_finalize; watch_class->update = watch_path_update; watch_class->get_value = watch_path_get_value; } static void watch_path_init( WatchPath *watch_path ) { #ifdef DEBUG printf( "watch_path_init\n" ); #endif /*DEBUG*/ watch_path->value = NULL; } GType watch_path_get_type( void ) { static GType watch_path_type = 0; if( !watch_path_type ) { static const GTypeInfo info = { sizeof( WatchPathClass ), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) watch_path_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof( WatchPath ), 32, /* n_preallocs */ (GInstanceInitFunc) watch_path_init, }; watch_path_type = g_type_register_static( TYPE_WATCH, "WatchPath", &info, 0 ); } return( watch_path_type ); } static Watch * watch_path_new( Watchgroup *watchgroup, const char *name ) { WatchPath *watch_path = WATCH_PATH( g_object_new( TYPE_WATCH_PATH, NULL ) ); watch_link( WATCH( watch_path ), watchgroup, name ); return( WATCH( watch_path ) ); } GSList * watch_path_get( Watchgroup *watchgroup, const char *name, GSList *fallback ) { Watch *watch; void *value; if( !watchgroup ) return( fallback ); if( !(watch = watch_find( watchgroup, name )) ) watch = watch_path_new( watchgroup, name ); g_assert( IS_WATCH_PATH( watch ) ); if( !watch_get( watch, &value ) ) return( fallback ); return( *((GSList **) value) ); } static WatchClass *watch_bool_parent_class = NULL; static gboolean watch_bool_update( Watch *watch ) { WatchBool *watch_bool = WATCH_BOOL( watch ); PElement *root = &watch->row->expr->root; #ifdef DEBUG printf( "watch_bool_update: %s\n", NN( IOBJECT( watch )->name ) ); #endif /*DEBUG*/ if( PEISNOVAL( root ) ) return( FALSE ); if( !PEISBOOL( root ) ) { heap_error_typecheck( root, IOBJECT( watch )->name, "bool" ); return( FALSE ); } watch_bool->value = PEGETBOOL( root ); return( TRUE ); } static void * watch_bool_get_value( Watch *watch ) { WatchBool *watch_bool = WATCH_BOOL( watch ); return( (void *) &watch_bool->value ); } static void watch_bool_class_init( WatchBoolClass *class ) { WatchClass *watch_class = (WatchClass *) class; watch_bool_parent_class = g_type_class_peek_parent( class ); watch_class->update = watch_bool_update; watch_class->get_value = watch_bool_get_value; } static void watch_bool_init( WatchBool *watch_bool ) { #ifdef DEBUG printf( "watch_bool_init\n" ); #endif /*DEBUG*/ watch_bool->value = FALSE; } GType watch_bool_get_type( void ) { static GType watch_bool_type = 0; if( !watch_bool_type ) { static const GTypeInfo info = { sizeof( WatchBoolClass ), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) watch_bool_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof( WatchBool ), 32, /* n_preallocs */ (GInstanceInitFunc) watch_bool_init, }; watch_bool_type = g_type_register_static( TYPE_WATCH, "WatchBool", &info, 0 ); } return( watch_bool_type ); } static Watch * watch_bool_new( Watchgroup *watchgroup, const char *name ) { WatchBool *watch_bool = WATCH_BOOL( g_object_new( TYPE_WATCH_BOOL, NULL ) ); watch_link( WATCH( watch_bool ), watchgroup, name ); return( WATCH( watch_bool ) ); } gboolean watch_bool_get( Watchgroup *watchgroup, const char *name, gboolean fallback ) { Watch *watch; void *value; if( !watchgroup ) return( fallback ); if( !(watch = watch_find( watchgroup, name )) ) watch = watch_bool_new( watchgroup, name ); g_assert( IS_WATCH_BOOL( watch ) ); if( !watch_get( watch, &value ) ) return( fallback ); return( *((gboolean *) value) ); } static WatchClass *watch_string_parent_class = NULL; static void watch_string_finalize( GObject *gobject ) { WatchString *watch_string; g_return_if_fail( gobject != NULL ); g_return_if_fail( IS_WATCH_STRING( gobject ) ); #ifdef DEBUG printf( "watch_string_finalize\n" ); #endif /*DEBUG*/ watch_string = WATCH_STRING( gobject ); /* My instance destroy stuff. */ IM_FREE( watch_string->value ); G_OBJECT_CLASS( watch_string_parent_class )->finalize( gobject ); } static gboolean watch_string_update( Watch *watch ) { WatchString *watch_string = WATCH_STRING( watch ); PElement *root = &watch->row->expr->root; char value[1024]; #ifdef DEBUG printf( "watch_string_update\n" ); #endif /*DEBUG*/ if( !heap_get_string( root, value, 1024 ) ) return( FALSE ); IM_SETSTR( watch_string->value, value ); return( TRUE ); } static void * watch_string_get_value( Watch *watch ) { WatchString *watch_string = WATCH_STRING( watch ); return( (void *) &watch_string->value ); } static void watch_string_class_init( WatchStringClass *class ) { GObjectClass *gobject_class = (GObjectClass *) class; WatchClass *watch_class = (WatchClass *) class; watch_string_parent_class = g_type_class_peek_parent( class ); gobject_class->finalize = watch_string_finalize; watch_class->update = watch_string_update; watch_class->get_value = watch_string_get_value; } static void watch_string_init( WatchString *watch_string ) { #ifdef DEBUG printf( "watch_string_init\n" ); #endif /*DEBUG*/ watch_string->value = NULL; } GType watch_string_get_type( void ) { static GType watch_string_type = 0; if( !watch_string_type ) { static const GTypeInfo info = { sizeof( WatchStringClass ), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) watch_string_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof( WatchString ), 32, /* n_preallocs */ (GInstanceInitFunc) watch_string_init, }; watch_string_type = g_type_register_static( TYPE_WATCH, "WatchString", &info, 0 ); } return( watch_string_type ); } static Watch * watch_string_new( Watchgroup *watchgroup, const char *name ) { WatchString *watch_string = WATCH_STRING( g_object_new( TYPE_WATCH_STRING, NULL ) ); watch_link( WATCH( watch_string ), watchgroup, name ); return( WATCH( watch_string ) ); } const char * watch_string_get( Watchgroup *watchgroup, const char *name, const char *fallback ) { Watch *watch; void *value; if( !watchgroup ) return( fallback ); if( !(watch = watch_find( watchgroup, name )) ) watch = watch_string_new( watchgroup, name ); g_assert( IS_WATCH_STRING( watch ) ); if( !watch_get( watch, &value ) ) return( fallback ); return( *((const char **) value) ); } nip2-8.7.0/src/regionview.c0000644000175000017500000014723313224651032012440 00000000000000/* run the displays for regions on images */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* Verbose. #define DEBUG */ /* Just trace create/destroy. #define DEBUG_MAKE */ /* Trace grab/ungrab #define DEBUG_GRAB */ /* Define this to trace event propogation #define EVENT */ /* See paint events. #define DEBUG_PAINT */ /* Define this to make region drags default to no-update during drag/resize. #define NO_UPDATE */ #include "ip.h" typedef void *(*regionview_rect_fn)( Regionview *, Rect *, void * ); typedef void (*regionview_paint_fn)( Regionview * ); /* Cursor shape for each resize type. */ iWindowShape regionview_cursors[REGIONVIEW_RESIZE_LAST] = { IWINDOW_SHAPE_EDIT, /* REGIONVIEW_RESIZE_NONE */ IWINDOW_SHAPE_MOVE, /* REGIONVIEW_RESIZE_MOVE */ IWINDOW_SHAPE_MOVE, /* REGIONVIEW_RESIZE_EDIT */ IWINDOW_SHAPE_TOPLEFT, /* REGIONVIEW_RESIZE_TOPLEFT */ IWINDOW_SHAPE_TOP, /* REGIONVIEW_RESIZE_TOP */ IWINDOW_SHAPE_TOPRIGHT, /* REGIONVIEW_RESIZE_TOPRIGHT */ IWINDOW_SHAPE_RIGHT, /* REGIONVIEW_RESIZE_RIGHT */ IWINDOW_SHAPE_BOTTOMRIGHT, /* REGIONVIEW_RESIZE_BOTTOMRIGHT */ IWINDOW_SHAPE_BOTTOM, /* REGIONVIEW_RESIZE_BOTTOM */ IWINDOW_SHAPE_BOTTOMLEFT, /* REGIONVIEW_RESIZE_BOTTOMLEFT */ IWINDOW_SHAPE_LEFT /* REGIONVIEW_RESIZE_LEFT */ }; /* Region border width, without shadows. */ static const int regionview_border_width = 2; /* Space around text in label. */ static const int regionview_label_border = 5; /* Length of crosshair bars. */ static const int regionview_crosshair_length = 5; /* The center of the crosshair is also sensitive for arrows. */ static const int regionview_crosshair_centre = 8; /* How close you need to get to switch the type. */ static const int regionview_morph_threshold = 20; static ViewClass *parent_class = NULL; /* Just one popup for all regions. */ static GtkWidget *regionview_popup_menu = NULL; /* Paint a rectangle. */ void regionview_paint_rect( GdkDrawable *draw, GdkGC *gc, Rect *r ) { gdk_draw_rectangle( draw, gc, FALSE, r->left, r->top, IM_MAX( 0, r->width - 1 ), IM_MAX( 0, r->height - 1 ) ); } /* Paint a thick rectangle. */ void regionview_paint_rect_thick( GdkDrawable *draw, GdkGC *gc, Rect *r, int n ) { Rect our_r; int i; our_r = *r; for( i = 0; i < n; i++ ) { regionview_paint_rect( draw, gc, &our_r ); im_rect_marginadjust( &our_r, 1 ); } } /* Paint a rect in 3D --- pass a GC for the top-left and a gc for the * bottom-right shadows. */ static void regionview_paint_rect_3d( GdkDrawable *draw, GdkGC *tl, GdkGC *br, Rect *r ) { /* Bottom and right. */ gdk_draw_line( draw, br, IM_RECT_RIGHT( r ) - 1, r->top, IM_RECT_RIGHT( r ) - 1, IM_RECT_BOTTOM( r ) - 1 ); gdk_draw_line( draw, br, IM_RECT_RIGHT( r ) - 1, IM_RECT_BOTTOM( r ) - 1, r->left, IM_RECT_BOTTOM( r ) - 1 ); /* Top and left. */ gdk_draw_line( draw, tl, r->left, IM_RECT_BOTTOM( r ) - 1, r->left, r->top ); gdk_draw_line( draw, tl, r->left, r->top, IM_RECT_RIGHT( r ) - 1, r->top ); } /* Paint little ticks ... for marking the edges of the resize handles. */ static void regionview_paint_vtick( GdkDrawable *draw, GdkGC *tl, GdkGC *br, int x, int y, int n ) { gdk_draw_line( draw, br, x, y - 1, x, y - n ); gdk_draw_line( draw, tl, x + 1, y - 1, x + 1, y - n ); } static void regionview_paint_htick( GdkDrawable *draw, GdkGC *tl, GdkGC *br, int x, int y, int n ) { gdk_draw_line( draw, br, x - 1, y, x - n, y ); gdk_draw_line( draw, tl, x - 1, y + 1, x - n, y + 1 ); } /* Paint a region border, enclosing the pixels in r. */ static void regionview_paint_border( GdkDrawable *draw, GdkGC *tl, GdkGC *bg, GdkGC *br, Rect *r, gboolean locked ) { int n = regionview_border_width; Rect our_r = *r; im_rect_marginadjust( &our_r, 1 ); regionview_paint_rect_3d( draw, br, tl, &our_r ); im_rect_marginadjust( &our_r, 1 ); regionview_paint_rect_thick( draw, bg, &our_r, n ); im_rect_marginadjust( &our_r, n ); regionview_paint_rect_3d( draw, tl, br, &our_r ); /* Add little tick marks for corner resizing. Don't bother for very * small rects, or for locked rects. */ if( !locked && r->width > 20 ) { /* Top edge. */ regionview_paint_vtick( draw, tl, br, r->left + 10, r->top - 1, n ); regionview_paint_vtick( draw, tl, br, IM_RECT_RIGHT( r ) - 11, r->top - 1, n ); /* Bottom edge. */ regionview_paint_vtick( draw, tl, br, r->left + 10, IM_RECT_BOTTOM( r ) + n + 1, n ); regionview_paint_vtick( draw, tl, br, IM_RECT_RIGHT( r ) - 11, IM_RECT_BOTTOM( r ) + n + 1, n ); } if( !locked && r->height > 20 ) { /* Left edge. */ regionview_paint_htick( draw, tl, br, r->left - 1, r->top + 10, n ); regionview_paint_htick( draw, tl, br, r->left - 1, IM_RECT_BOTTOM( r ) - 12, n ); /* Right edge. */ regionview_paint_htick( draw, tl, br, IM_RECT_RIGHT( r ) + n + 1, r->top + 10, n ); regionview_paint_htick( draw, tl, br, IM_RECT_RIGHT( r ) + n + 1, IM_RECT_BOTTOM( r ) - 12, n ); } } /* Paint a square area, with a beveled edge. */ static void regionview_paint_area( GdkDrawable *draw, GdkGC *tl, GdkGC *bg, GdkGC *br, Rect *r ) { gdk_draw_rectangle( draw, bg, TRUE, r->left, r->top, r->width, r->height ); regionview_paint_rect_3d( draw, tl, br, r ); } /* Paint a region label. */ static void regionview_paint_label( Regionview *regionview, GdkDrawable *draw, Rect *r, int ascent, const char *txt ) { GtkWidget *widget = GTK_WIDGET( regionview->ip->id ); int n = regionview_label_border; PangoLayout *layout; GdkRectangle grect; /* Clip to this area ... don't want to paint outside label. */ grect.x = r->left; grect.y = r->top; grect.width = r->width; grect.height = r->height; gtk_paint_flat_box( widget->style, draw, regionview->paint_state, GTK_SHADOW_OUT, &grect, widget, "buttondefault", grect.x, grect.y, grect.width, grect.height ); /* Paint text over the top. */ layout = gtk_widget_create_pango_layout( widget, txt ); gtk_paint_layout( widget->style, draw, regionview->paint_state, FALSE, &grect, widget, NULL, r->left + n, r->top + n + ascent, layout ); g_object_unref( layout ); } /* Paint a crosshair, centered at x, y. */ static void regionview_paint_crosshair( GdkDrawable *draw, GdkGC *tl, GdkGC *bg, GdkGC *br, int x, int y ) { const int bw = regionview_border_width / 2 + 1; const int l = regionview_crosshair_length + 2; Rect area; area.left = x - bw - 1 - l; area.top = y - bw; area.width = l; area.height = bw * 2; regionview_paint_area( draw, tl, bg, br, &area ); area.left = x + bw + 1; regionview_paint_area( draw, tl, bg, br, &area ); area.left = x - bw; area.top = y - bw - 1 - l; area.width = bw * 2; area.height = l; regionview_paint_area( draw, tl, bg, br, &area ); area.top = y + bw + 1; regionview_paint_area( draw, tl, bg, br, &area ); } /* Paint the dotted line connecting an arrow or a guide. */ static void regionview_paint_arrow( GdkDrawable *draw, GdkGC *fg, int off, Rect *r ) { static gint8 dash_list[] = { 10, 10 }; gdk_gc_set_dashes( fg, off, dash_list, 2 ); gdk_gc_set_line_attributes( fg, 2, GDK_LINE_DOUBLE_DASH, GDK_CAP_BUTT, GDK_JOIN_MITER ); gdk_draw_line( draw, fg, r->left, r->top, IM_RECT_RIGHT( r ), IM_RECT_BOTTOM( r ) ); gdk_gc_set_line_attributes( fg, 0, GDK_LINE_SOLID, GDK_CAP_BUTT, GDK_JOIN_MITER ); } /* Paint the dotted box for a text preview, or rectangle paint preview. */ static void regionview_paint_box( GdkDrawable *draw, GdkGC *fg, int off, Rect *r ) { static gint8 dash_list[] = { 10, 10 }; gdk_gc_set_dashes( fg, off, dash_list, 2 ); gdk_gc_set_line_attributes( fg, 2, GDK_LINE_DOUBLE_DASH, GDK_CAP_BUTT, GDK_JOIN_MITER ); gdk_draw_line( draw, fg, r->left, r->top, IM_RECT_RIGHT( r ), r->top ); gdk_draw_line( draw, fg, IM_RECT_RIGHT( r ), r->top, IM_RECT_RIGHT( r ), IM_RECT_BOTTOM( r ) ); gdk_draw_line( draw, fg, IM_RECT_RIGHT( r ), IM_RECT_BOTTOM( r ), r->left, IM_RECT_BOTTOM( r ) ); gdk_draw_line( draw, fg, r->left, IM_RECT_BOTTOM( r ), r->left, r->top ); gdk_gc_set_line_attributes( fg, 0, GDK_LINE_SOLID, GDK_CAP_BUTT, GDK_JOIN_MITER ); } /* Apply a function to every rect in a crosshair positioned at (x, y). */ static void * regionview_crosshair_foreach( Regionview *regionview, int x, int y, regionview_rect_fn fn, void *data ) { const int n = regionview_border_width + 2; const int l = regionview_crosshair_length + 2; Rect area; void *res; area.left = x - n/2 - 1 - l; area.top = y - n/2; area.width = l; area.height = n; if( (res = fn( regionview, &area, data )) ) return( res ); area.left = x + n/2 + 1; if( (res = fn( regionview, &area, data )) ) return( res ); area.left = x - n/2; area.top = y - n/2 - 1 - l; area.width = n; area.height = l; if( (res = fn( regionview, &area, data )) ) return( res ); area.top = y + n/2 + 1; if( (res = fn( regionview, &area, data )) ) return( res ); return( NULL ); } /* Apply a function to every rect in a region border positioned at border. */ static void * regionview_border_foreach( Regionview *regionview, Rect *border, regionview_rect_fn fn, void *data ) { const int n = regionview_border_width + 2; Rect area; void *res; area.left = border->left - n; area.top = border->top - n; area.width = border->width + 2*n; area.height = n; if( (res = fn( regionview, &area, data )) ) return( res ); area.top = IM_RECT_BOTTOM( border ); if( (res = fn( regionview, &area, data )) ) return( res ); area.left = border->left - n; area.top = border->top; area.width = n; area.height = border->height; if( (res = fn( regionview, &area, data )) ) return( res ); area.left = IM_RECT_RIGHT( border ); if( (res = fn( regionview, &area, data )) ) return( res ); return( NULL ); } /* Repaint ... as a rect_foreach function. */ static void * regionview_queue_draw_area( Regionview *regionview, Rect *area, void *dummy ) { #ifdef DEBUG_PAINT printf( "regionview_queue_draw_area: at %dx%d size %dx%d\n", area->left, area->top, area->width, area->height ); #endif /*DEBUG_PAINT*/ imagedisplay_queue_draw_area( regionview->ip->id, area ); return( NULL ); } /* Queue draws for all the pixels a region might touch. */ static void regionview_queue_draw( Regionview *regionview ) { Imagedisplay *id = regionview->ip->id; Conversion *conv = id->conv; Rect *area = ®ionview->area; Rect dr; int x, y; switch( regionview->last_type ) { case REGIONVIEW_AREA: case REGIONVIEW_REGION: conversion_im_to_disp_rect( conv, area, &dr ); (void) regionview_border_foreach( regionview, &dr, regionview_queue_draw_area, NULL ); break; case REGIONVIEW_MARK: conversion_im_to_disp( conv, area->left, area->top, &x, &y ); (void) regionview_crosshair_foreach( regionview, x, y, regionview_queue_draw_area, NULL ); break; case REGIONVIEW_ARROW: conversion_im_to_disp_rect( conv, area, &dr ); (void) regionview_crosshair_foreach( regionview, dr.left, dr.top, regionview_queue_draw_area, NULL ); (void) regionview_crosshair_foreach( regionview, IM_RECT_RIGHT( &dr ), IM_RECT_BOTTOM( &dr ), regionview_queue_draw_area, NULL ); im_rect_normalise( &dr ); im_rect_marginadjust( &dr, 2 ); regionview_queue_draw_area( regionview, &dr, NULL ); break; case REGIONVIEW_HGUIDE: case REGIONVIEW_VGUIDE: case REGIONVIEW_LINE: conversion_im_to_disp_rect( conv, area, &dr ); im_rect_normalise( &dr ); im_rect_marginadjust( &dr, 2 ); regionview_queue_draw_area( regionview, &dr, NULL ); break; case REGIONVIEW_BOX: conversion_im_to_disp_rect( conv, area, &dr ); im_rect_normalise( &dr ); im_rect_marginadjust( &dr, -2 ); (void) regionview_border_foreach( regionview, &dr, regionview_queue_draw_area, NULL ); break; default: g_assert( FALSE ); } if( regionview->classmodel ) imagedisplay_queue_draw_area( id, ®ionview->label ); } /* Paint a region ... assume the screen has only the background visible (ie. * we've nothing of this region visible). Clip paints against clip rect (in * xev coordinates) ... either the expose area, or the imagedisplay area. */ static void regionview_paint( Regionview *regionview ) { Imagepresent *ip = regionview->ip; Imagedisplay *id = ip->id; Conversion *conv = id->conv; GtkStyle *style = gtk_widget_get_style( GTK_WIDGET( id ) ); GdkDrawable *draw = GTK_WIDGET( id )->window; int state = regionview->last_paint_state; GdkGC *tl, *br, *bg; Rect dr; tl = style->light_gc[state]; br = style->dark_gc[state]; bg = style->bg_gc[state]; conversion_im_to_disp_rect( conv, ®ionview->area, &dr ); switch( regionview->last_type ) { case REGIONVIEW_REGION: regionview_paint_border( draw, tl, bg, br, &dr, FALSE ); break; case REGIONVIEW_AREA: regionview_paint_border( draw, tl, bg, br, &dr, TRUE ); break; case REGIONVIEW_MARK: regionview_paint_crosshair( draw, tl, bg, br, dr.left, dr.top ); break; case REGIONVIEW_ARROW: regionview_paint_arrow( draw, tl, regionview->dash_offset, &dr ); regionview_paint_crosshair( draw, tl, bg, br, dr.left, dr.top ); regionview_paint_crosshair( draw, tl, bg, br, IM_RECT_RIGHT( &dr ), IM_RECT_BOTTOM( &dr ) ); break; case REGIONVIEW_HGUIDE: case REGIONVIEW_VGUIDE: case REGIONVIEW_LINE: regionview_paint_arrow( draw, tl, regionview->dash_offset, &dr ); break; case REGIONVIEW_BOX: im_rect_normalise( &dr ); regionview_paint_box( draw, tl, regionview->dash_offset, &dr ); break; default: g_assert( FALSE ); } if( regionview->classmodel ) regionview_paint_label( regionview, draw, ®ionview->label, regionview->ascent, vips_buf_all( ®ionview->caption ) ); } /* Stop tracking. */ static void regionview_detach( Regionview *regionview ) { if( regionview->grabbed ) { g_assert( regionview->ip->grabbed == regionview ); #ifdef DEBUG_GRAB printf( "regionview_detach: %p\n", regionview ); #endif /*DEBUG_GRAB*/ regionview->state = REGIONVIEW_WAIT; regionview->paint_state = GTK_STATE_PRELIGHT; regionview->grabbed = FALSE; regionview->ip->grabbed = NULL; imagepresent_scroll_stop( regionview->ip ); } } static void regionview_destroy( GtkObject *object ) { Regionview *regionview; Imagedisplay *id; #ifdef DEBUG_MAKE printf( "regionview_destroy: %p\n", object ); #endif /*DEBUG_MAKE*/ g_return_if_fail( object != NULL ); g_return_if_fail( IS_REGIONVIEW( object ) ); regionview = REGIONVIEW( object ); if( !regionview->first ) regionview_queue_draw( regionview ); regionview->first = FALSE; regionview_detach( regionview ); if( (id = regionview->ip->id) ) { FREESID( regionview->expose_sid, id ); FREESID( regionview->destroy_sid, id ); FREESID( regionview->event_sid, id ); FREESID( regionview->changed_sid, id->conv ); FREESID( regionview->conv_destroy_sid, id->conv ); } FREESID( regionview->model_changed_sid, regionview->classmodel ); IM_FREEF( g_source_remove, regionview->dash_crawl ); IM_FREEF( iwindow_cursor_context_destroy, regionview->cntxt ); vips_buf_destroy( ®ionview->caption ); if( regionview->ip ) { if( regionview->ip->regionview == regionview ) regionview->ip->regionview = NULL; regionview->ip->regionviews = g_slist_remove( regionview->ip->regionviews, regionview ); regionview->ip = NULL; } if( regionview->classmodel ) { regionview->classmodel->views = g_slist_remove( regionview->classmodel->views, regionview ); regionview->classmodel = NULL; } GTK_OBJECT_CLASS( parent_class )->destroy( object ); } /* Compute the label geometry. */ static void regionview_label_geo( Regionview *regionview ) { int n = regionview_label_border; const char *str = vips_buf_all( ®ionview->caption ); int width, height; PangoLayout *layout; layout = gtk_widget_create_pango_layout( GTK_WIDGET( regionview->ip->id ), str ); pango_layout_get_pixel_size( layout, &width, &height ); g_object_unref( layout ); regionview->label.width = width + 2 * n; regionview->label.height = height + 2 * n; regionview->ascent = 0; } static void regionview_refresh_label( Regionview *regionview ) { if( regionview->classmodel ) { Row *row = HEAPMODEL( regionview->classmodel )->row; vips_buf_rewind( ®ionview->caption ); row_qualified_name_relative( row->ws->sym, row, ®ionview->caption ); regionview_label_geo( regionview ); } } /* Move label to try to keep it within the window, and away from the * selected pixels. */ static void regionview_position_label( Regionview *regionview ) { Imagepresent *ip = regionview->ip; Conversion *conv = ip->id->conv; Rect *visible = &conv->visible; Rect *label = ®ionview->label; const int b = regionview_border_width + 2; Rect dr; if( regionview->label_geo ) { regionview_refresh_label( regionview ); regionview->label_geo = FALSE; } conversion_im_to_disp_rect( conv, ®ionview->area, &dr ); switch( regionview->type ) { case REGIONVIEW_REGION: case REGIONVIEW_AREA: case REGIONVIEW_BOX: if( dr.top > visible->top + label->height + b ) { /* Space above region for label. */ label->left = dr.left - b; label->top = dr.top - label->height - b; } else if( dr.left > visible->left + label->width + b ) { /* Space to left of region for label */ label->left = dr.left - label->width - b; label->top = dr.top - b; } else if( IM_RECT_RIGHT( &dr ) < IM_RECT_RIGHT( visible ) - label->width - b ) { /* Space at right. */ label->left = IM_RECT_RIGHT( &dr ) + b; label->top = dr.top - b; } else if( IM_RECT_BOTTOM( &dr ) < IM_RECT_BOTTOM( visible ) - label->height - b ) { /* Space at bottom. */ label->left = dr.left - b; label->top = IM_RECT_BOTTOM( &dr ) + b; } else { /* Inside top left. */ label->left = dr.left; label->top = dr.top; } break; case REGIONVIEW_HGUIDE: case REGIONVIEW_VGUIDE: case REGIONVIEW_MARK: case REGIONVIEW_ARROW: case REGIONVIEW_LINE: /* Space above? */ if( dr.top > visible->top + label->height + b/2 + 2 ) { if( dr.left > IM_RECT_RIGHT( visible ) - label->width - b/2 - 2 ) { /* Above left. */ label->left = dr.left - b/2 - 2 - label->width; label->top = dr.top - b/2 - 2 - label->height; } else { /* Above right. */ label->left = dr.left + b/2 + 2; label->top = dr.top - b/2 - 2 - label->height; } } else if( dr.left > IM_RECT_RIGHT( visible ) - label->width - b/2 - 2 ) { /* Below left. */ label->left = dr.left - b/2 - 2 - label->width; label->top = dr.top + b/2 + 2; } else { /* Below right. */ label->left = dr.left + b/2 + 2; label->top = dr.top + b/2 + 2; } break; default: g_assert( FALSE ); } } static Rect * regionview_get_model( Regionview *regionview ) { Classmodel *classmodel = regionview->classmodel; iRegionInstance *instance; Rect *model_area; /* If we have a class, update from the inside of that. */ if( classmodel && (instance = classmodel_get_instance( classmodel )) ) model_area = &instance->area; else model_area = regionview->model_area; return( model_area ); } /* Update our_area from the model. Translate to our cods too: we always have * x/y in 0 to xsize/ysize. */ static void regionview_update_from_model( Regionview *regionview ) { Rect *model_area = regionview_get_model( regionview ); #ifdef DEBUG printf( "regionview_update_from_model: model is %dx%d size %dx%d\n", model_area->left, model_area->top, model_area->width, model_area->height ); #endif /*DEBUG*/ regionview->our_area = *model_area; #ifdef DEBUG printf( "regionview_update_from_model: set regionview to %dx%d size %dx%d\n", regionview->our_area.left, regionview->our_area.top, regionview->our_area.width, regionview->our_area.height ); #endif /*DEBUG*/ } /* Update the model from our_area. */ static void regionview_model_update( Regionview *regionview ) { Classmodel *classmodel = regionview->classmodel; Rect *model_area = regionview_get_model( regionview ); #ifdef DEBUG printf( "regionview_model_update: regionview is %dx%d size %dx%d\n", regionview->our_area.left, regionview->our_area.top, regionview->our_area.width, regionview->our_area.height ); #endif /*DEBUG*/ *model_area = regionview->our_area; if( classmodel ) { classmodel_update( classmodel ); if( CALC_RECOMP_REGION ) symbol_recalculate_all(); } /* Refresh immediately .. gives faster feedback during drag. */ vobject_refresh( VOBJECT( regionview ) ); #ifdef DEBUG printf( "regionview_model_update: set model to %dx%d size %dx%d\n", model_area->left, model_area->top, model_area->width, model_area->height ); #endif /*DEBUG*/ } /* Our model has changed ... undraw in the old position, draw in the new * position. */ static void regionview_refresh( vObject *vobject ) { Regionview *regionview = REGIONVIEW( vobject ); #ifdef DEBUG printf( "regionview_refresh1: %dx%d size %dx%d\n", regionview->our_area.left, regionview->our_area.top, regionview->our_area.width, regionview->our_area.height ); #endif /*DEBUG*/ /* Update our_area from model. */ regionview_update_from_model( regionview ); #ifdef DEBUG printf( "regionview_refresh2: %dx%d size %dx%d\n", regionview->our_area.left, regionview->our_area.top, regionview->our_area.width, regionview->our_area.height ); #endif /*DEBUG*/ if( !regionview->first ) regionview_queue_draw( regionview ); regionview->first = FALSE; /* Set new position. */ regionview->area = regionview->our_area; regionview->last_paint_state = regionview->paint_state; regionview->last_type = regionview->type; /* Choose a new label position. */ regionview_position_label( regionview ); /* Draw in the new place, clip against imagedisplay draw area. */ regionview_queue_draw( regionview ); VOBJECT_CLASS( parent_class )->refresh( vobject ); } static void regionview_edit_cb( GtkWidget *menu, Regionview *regionview, Imagepresent *ip ) { model_edit( GTK_WIDGET( ip ), MODEL( regionview->classmodel ) ); } static void regionview_clone_cb( GtkWidget *menu, Regionview *regionview, Imagepresent *ip ) { Row *row = HEAPMODEL( regionview->classmodel )->row; Workspace *ws = row->top_col->ws; if( row->top_row != row ) { error_top( _( "Can't duplicate." ) ); error_sub( "%s", _( "You can only duplicate top level regions." ) ); iwindow_alert( GTK_WIDGET( regionview->ip ), GTK_MESSAGE_INFO ); return; } workspace_deselect_all( ws ); row_select( row ); if( !workspace_selected_duplicate( ws ) ) iwindow_alert( GTK_WIDGET( regionview ), GTK_MESSAGE_ERROR ); workspace_deselect_all( ws ); symbol_recalculate_all(); } static void regionview_clear_edited_cb( GtkWidget *menu, Regionview *regionview, Imagepresent *ip ) { (void) icontainer_map_all( ICONTAINER( regionview->classmodel ), (icontainer_map_fn) model_clear_edited, NULL ); symbol_recalculate_all(); } static void regionview_remove_yes( iWindow *iwnd, void *client, iWindowNotifyFn nfn, void *sys ) { Regionview *regionview = REGIONVIEW( client ); Row *row = HEAPMODEL( regionview->classmodel )->row; IDESTROY( row->sym ); nfn( sys, IWINDOW_YES ); } static void regionview_remove_cb( GtkWidget *menu, Regionview *regionview, Imagepresent *ip ) { Row *row = HEAPMODEL( regionview->classmodel )->row; if( row->top_row != row ) { error_top( _( "Can't delete." ) ); error_sub( _( "You can only delete top level regions." ) ); iwindow_alert( GTK_WIDGET( regionview->ip ), GTK_MESSAGE_INFO ); return; } box_yesno( GTK_WIDGET( ip ), regionview_remove_yes, iwindow_true_cb, regionview, iwindow_notify_null, NULL, GTK_STOCK_DELETE, _( "Delete Region?" ), _( "Are you sure you want to delete Region \"%s\"?" ), vips_buf_all( ®ionview->caption ) ); } static void regionview_class_init( RegionviewClass *class ) { GtkObjectClass *object_class = (GtkObjectClass *) class; vObjectClass *vobject_class = (vObjectClass *) class; GtkWidget *pane; parent_class = g_type_class_peek_parent( class ); object_class->destroy = regionview_destroy; /* Create signals. */ /* Init methods. */ vobject_class->refresh = regionview_refresh; /* Other init. */ pane = regionview_popup_menu = popup_build( _( "Region menu" ) ); popup_add_but( pane, _( "_Edit" ), POPUP_FUNC( regionview_edit_cb ) ); popup_add_but( pane, STOCK_DUPLICATE, POPUP_FUNC( regionview_clone_cb ) ); popup_add_but( pane, _( "_Reset" ), POPUP_FUNC( regionview_clear_edited_cb ) ); menu_add_sep( pane ); popup_add_but( pane, GTK_STOCK_DELETE, POPUP_FUNC( regionview_remove_cb ) ); } static void regionview_init( Regionview *regionview ) { static Rect empty_rect = { -1, -1, -1, -1 }; #ifdef DEBUG_MAKE printf( "regionview_init\n" ); #endif /*DEBUG_MAKE*/ regionview->type = REGIONVIEW_MARK; regionview->frozen = TRUE; regionview->state = REGIONVIEW_WAIT; regionview->resize = REGIONVIEW_RESIZE_NONE; regionview->dx = -1; regionview->dy = -1; regionview->grabbed = FALSE; regionview->classmodel = NULL; regionview->ip = NULL; regionview->cntxt = NULL; regionview->expose_sid = 0; regionview->destroy_sid = 0; regionview->event_sid = 0; regionview->changed_sid = 0; regionview->conv_destroy_sid = 0; regionview->model_area = NULL; regionview->paint_state = GTK_STATE_NORMAL; regionview->area = empty_rect; regionview->label = empty_rect; regionview->ascent = 0; regionview->dash_offset = 0; regionview->dash_crawl = 0; regionview->last_paint_state = (GtkStateType) -1; regionview->last_type = (RegionviewType) -1; regionview->first = TRUE; regionview->label_geo = TRUE; vips_buf_init_dynamic( ®ionview->caption, REGIONVIEW_LABEL_MAX ); gtk_widget_set_name( GTK_WIDGET( regionview ), "regionview_widget" ); } GtkType regionview_get_type( void ) { static GtkType regionview_type = 0; if( !regionview_type ) { static const GtkTypeInfo info = { "Regionview", sizeof( Regionview ), sizeof( RegionviewClass ), (GtkClassInitFunc) regionview_class_init, (GtkObjectInitFunc) regionview_init, /* reserved_1 */ NULL, /* reserved_2 */ NULL, (GtkClassInitFunc) NULL, }; regionview_type = gtk_type_unique( TYPE_VIEW, &info ); } return( regionview_type ); } /* Test for rect touches rect (non-empty intersection). */ static void * regionview_rect_touching( Regionview *regionview, Rect *a, Rect *b ) { Rect overlap; im_rect_intersectrect( a, b, &overlap ); if( !im_rect_isempty( &overlap ) ) return( regionview ); else return( NULL ); } /* Does expose rect touch the mark positioned at mark_x/mark_y. Include a big * grab handle in the centre of the crosshair. */ static gboolean regionview_rect_touches_mark( Regionview *regionview, int mark_x, int mark_y, Rect *expose ) { Conversion *conv = regionview->ip->id->conv; Rect tiny; int x, y; conversion_im_to_disp( conv, mark_x, mark_y, &x, &y ); if( regionview_crosshair_foreach( regionview, x, y, (regionview_rect_fn) regionview_rect_touching, expose ) ) return( TRUE ); /* ... and the centre of the crosshairs. */ tiny.left = x; tiny.top = y; tiny.width = 1; tiny.height = 1; im_rect_marginadjust( &tiny, regionview_crosshair_centre ); if( regionview_rect_touching( regionview, &tiny, expose ) ) return( TRUE ); return( FALSE ); } /* Test for rect intersects some part of region. */ static gboolean regionview_rect_touches_region( Regionview *regionview, Rect *expose ) { Conversion *conv = regionview->ip->id->conv; Rect canvas_area; if( regionview->classmodel && regionview_rect_touching( regionview, ®ionview->label, expose ) ) return( TRUE ); switch( regionview->type ) { case REGIONVIEW_REGION: case REGIONVIEW_AREA: case REGIONVIEW_BOX: case REGIONVIEW_LINE: conversion_im_to_disp_rect( conv, ®ionview->area, &canvas_area ); im_rect_normalise( &canvas_area ); if( regionview_border_foreach( regionview, &canvas_area, (regionview_rect_fn) regionview_rect_touching, expose ) ) return( TRUE ); break; case REGIONVIEW_MARK: if( regionview_rect_touches_mark( regionview, regionview->area.left, regionview->area.top, expose ) ) return( TRUE ); break; case REGIONVIEW_ARROW: /* Test two marks first. */ if( regionview_rect_touches_mark( regionview, regionview->area.left, regionview->area.top, expose ) ) return( TRUE ); if( regionview_rect_touches_mark( regionview, IM_RECT_RIGHT( ®ionview->area ), IM_RECT_BOTTOM( ®ionview->area ), expose ) ) return( TRUE ); /* Spot in main area too ... for the dotted line. Also avoid * zero-width/height areas for h and v lines. */ conversion_im_to_disp_rect( conv, ®ionview->area, &canvas_area ); im_rect_normalise( &canvas_area ); im_rect_marginadjust( &canvas_area, 1 ); if( regionview_rect_touching( regionview, &canvas_area, expose ) ) return( TRUE ); break; case REGIONVIEW_HGUIDE: case REGIONVIEW_VGUIDE: conversion_im_to_disp_rect( conv, ®ionview->area, &canvas_area ); im_rect_marginadjust( &canvas_area, 5 ); if( regionview_rect_touching( regionview, &canvas_area, expose ) ) return( TRUE ); break; default: g_assert( FALSE ); } return( FALSE ); } /* From the expose event. */ static void regionview_expose( Regionview *regionview, Rect *expose ) { #ifdef DEBUG_PAINT printf( "regionview_expose: at %dx%d size %dx%d\n", expose->left, expose->top, expose->width, expose->height ); #endif /*DEBUG_PAINT*/ g_assert( expose->width >= 0 && expose->height >= 0 ); /* If we've not finished init, don't paint. */ if( regionview->first ) return; /* If the expose doesn't touch the region, don't bother painting. */ if( !regionview_rect_touches_region( regionview, expose ) ) return; regionview_paint( regionview ); } static void regionview_model_changed_cb( Classmodel *classmodel, Regionview *regionview ) { vobject_refresh_queue( VOBJECT( regionview ) ); } static gboolean regionview_expose_cb( Imagedisplay *id, GdkEventExpose *event, Regionview *regionview ) { Rect expose; expose.left = event->area.x; expose.top = event->area.y; expose.width = event->area.width; expose.height = event->area.height; regionview_expose( regionview, &expose ); return( FALSE ); } /* Test for point is in the grab area of a region border or label. */ static gboolean regionview_point_in_region( Regionview *regionview, int x, int y ) { Rect r; r.left = x; r.top = y; r.width = 1; r.height = 1; return( regionview_rect_touches_region( regionview, &r ) ); } /* Given a position, find the sort of resize we should allow. */ static RegionviewResize regionview_find_resize( Regionview *regionview, int x, int y ) { Conversion *conv = regionview->ip->id->conv; Rect canvas_area, tiny; int dx, dy; if( im_rect_includespoint( ®ionview->label, x, y ) ) return( REGIONVIEW_RESIZE_EDIT ); conversion_im_to_disp_rect( conv, ®ionview->area, &canvas_area ); dx = x - canvas_area.left; dy = y - canvas_area.top; switch( regionview->type ) { case REGIONVIEW_REGION: if( dx > canvas_area.width - 10 ) { if( dy > canvas_area.height - 10 ) return( REGIONVIEW_RESIZE_BOTTOMRIGHT ); else if( dy < 10 ) return( REGIONVIEW_RESIZE_TOPRIGHT ); else return( REGIONVIEW_RESIZE_RIGHT ); } else if( dx < 10 ) { if( dy > canvas_area.height - 10 ) return( REGIONVIEW_RESIZE_BOTTOMLEFT ); else if( dy < 10 ) return( REGIONVIEW_RESIZE_TOPLEFT ); else return( REGIONVIEW_RESIZE_LEFT ); } else { if( dy < canvas_area.height / 2 ) return( REGIONVIEW_RESIZE_TOP ); else return( REGIONVIEW_RESIZE_BOTTOM ); } break; case REGIONVIEW_MARK: case REGIONVIEW_AREA: return( REGIONVIEW_RESIZE_MOVE ); case REGIONVIEW_ARROW: tiny.left = x; tiny.top = y; tiny.width = 1; tiny.height = 1; if( regionview_crosshair_foreach( regionview, canvas_area.left, canvas_area.top, (regionview_rect_fn) regionview_rect_touching, &tiny ) ) return( REGIONVIEW_RESIZE_TOPLEFT ); if( regionview_crosshair_foreach( regionview, IM_RECT_RIGHT( &canvas_area ), IM_RECT_BOTTOM( &canvas_area ), (regionview_rect_fn) regionview_rect_touching, &tiny ) ) return( REGIONVIEW_RESIZE_BOTTOMRIGHT ); /* Extra tests ... allow grabs in the centre of the crosshairs * too. */ tiny.left = IM_RECT_RIGHT( &canvas_area ); tiny.top = IM_RECT_BOTTOM( &canvas_area ); tiny.width = 1; tiny.height = 1; im_rect_marginadjust( &tiny, regionview_crosshair_centre ); if( im_rect_includespoint( &tiny, x, y ) ) return( REGIONVIEW_RESIZE_BOTTOMRIGHT ); tiny.left = canvas_area.left; tiny.top = canvas_area.top; tiny.width = 1; tiny.height = 1; im_rect_marginadjust( &tiny, regionview_crosshair_centre ); if( im_rect_includespoint( &tiny, x, y ) ) return( REGIONVIEW_RESIZE_TOPLEFT ); break; case REGIONVIEW_VGUIDE: case REGIONVIEW_HGUIDE: im_rect_marginadjust( &canvas_area, 5 ); if( im_rect_includespoint( &canvas_area, x, y ) ) return( REGIONVIEW_RESIZE_MOVE ); break; case REGIONVIEW_BOX: case REGIONVIEW_LINE: break; default: g_assert( FALSE ); } return( REGIONVIEW_RESIZE_NONE ); } /* Right button press event. */ static gint regionview_right_press( Regionview *regionview, GdkEvent *ev, int x, int y ) { if( im_rect_includespoint( ®ionview->label, x, y ) ) { popup_show( GTK_WIDGET( regionview ), ev ); return( TRUE ); } return( FALSE ); } /* Get ready to track this region. See imagepresent.c. */ void regionview_attach( Regionview *regionview, int x, int y ) { Imagepresent *ip = regionview->ip; Conversion *conv = ip->id->conv; int dx, dy; g_assert( !regionview->grabbed ); g_assert( !regionview->ip->grabbed ); #ifdef DEBUG_GRAB printf( "regionview_attach: %p\n", regionview ); #endif /*DEBUG_GRAB*/ switch( regionview->resize ) { case REGIONVIEW_RESIZE_NONE: regionview->resize = REGIONVIEW_RESIZE_BOTTOMRIGHT; regionview->state = REGIONVIEW_RESIZE; break; case REGIONVIEW_RESIZE_MOVE: case REGIONVIEW_RESIZE_EDIT: regionview->state = REGIONVIEW_MOVE; break; default: regionview->state = REGIONVIEW_RESIZE; break; } regionview->paint_state = GTK_STATE_ACTIVE; iwindow_cursor_context_set_cursor( regionview->cntxt, regionview_cursors[regionview->resize] ); regionview->grabbed = TRUE; regionview->ip->grabbed = regionview; conversion_im_to_disp( conv, regionview->our_area.left, regionview->our_area.top, &dx, &dy ); regionview->dx = dx - x; regionview->dy = dy - y; } /* Left button press event. */ static gint regionview_left_press( Regionview *regionview, GdkEvent *ev, int x, int y ) { gboolean handled = FALSE; if( !regionview_point_in_region( regionview, x, y ) ) return( FALSE ); switch( regionview->state ) { case REGIONVIEW_WAIT: regionview->resize = regionview_find_resize( regionview, x, y ); if( regionview->resize != REGIONVIEW_RESIZE_NONE ) { regionview_attach( regionview, x, y ); handled = TRUE; } break; case REGIONVIEW_MOVE: case REGIONVIEW_RESIZE: break; default: g_assert( FALSE ); } return( handled ); } /* Left button release event. */ static gint regionview_left_release( Regionview *regionview, GdkEvent *ev ) { switch( regionview->state ) { case REGIONVIEW_WAIT: break; case REGIONVIEW_MOVE: case REGIONVIEW_RESIZE: regionview_detach( regionview ); if( !CALC_RECOMP_REGION ) symbol_recalculate_all(); break; } return( FALSE ); } static void regionview_resize_area( Regionview *regionview, int ix, int iy ) { Imagepresent *ip = regionview->ip; Conversion *conv = ip->id->conv; IMAGE *im = imageinfo_get( FALSE, conv->ii ); Rect *our_area = ®ionview->our_area; int th = regionview_morph_threshold / conversion_dmag( conv->mag ); int bot = our_area->top + our_area->height; int ri = our_area->left + our_area->width; int rx = ix - our_area->left; int ry = iy - our_area->top; /* If we're not frozen, do an unconstrained resize. */ if( !regionview->frozen ) { switch( regionview->resize ) { case REGIONVIEW_RESIZE_RIGHT: our_area->width = IM_CLIP( -our_area->left, rx, im->Xsize - our_area->left ); break; case REGIONVIEW_RESIZE_BOTTOM: our_area->height = IM_CLIP( -our_area->top, ry, im->Ysize - our_area->top ); break; case REGIONVIEW_RESIZE_MOVE: /* Get this for POINT on create ... treat as * BOTTOMRIGHT. */ case REGIONVIEW_RESIZE_BOTTOMRIGHT: our_area->width = IM_CLIP( -our_area->left, rx, im->Xsize - our_area->left ); our_area->height = IM_CLIP( -our_area->top, ry, im->Ysize - our_area->top ); break; case REGIONVIEW_RESIZE_LEFT: our_area->left = IM_CLIP( 0, ix, im->Xsize - 1 ); our_area->width = ri - our_area->left; break; case REGIONVIEW_RESIZE_TOP: our_area->top = IM_CLIP( 0, iy, im->Ysize - 1 ); our_area->height = bot - our_area->top; break; case REGIONVIEW_RESIZE_TOPLEFT: our_area->top = IM_CLIP( 0, iy, im->Ysize - 1 ); our_area->left = IM_CLIP( 0, ix, im->Xsize - 1 ); our_area->width = ri - our_area->left; our_area->height = bot - our_area->top; break; case REGIONVIEW_RESIZE_TOPRIGHT: our_area->top = IM_CLIP( 0, iy, im->Ysize - 1 ); our_area->height = bot - our_area->top; our_area->width = IM_CLIP( -our_area->left, rx, im->Xsize - our_area->left ); break; case REGIONVIEW_RESIZE_BOTTOMLEFT: our_area->left = IM_CLIP( 0, ix, im->Xsize - 1 ); our_area->width = ri - our_area->left; our_area->height = IM_CLIP( -our_area->top, ry, im->Ysize - our_area->top ); break; default: g_assert( FALSE ); } if( abs( our_area->width ) < th && abs( our_area->height - im->Ysize ) < th ) regionview->type = REGIONVIEW_VGUIDE; else if( abs( our_area->height ) < th && abs( our_area->width - im->Xsize ) < th ) regionview->type = REGIONVIEW_HGUIDE; else if( abs( our_area->width ) < th && abs( our_area->height ) < th ) regionview->type = REGIONVIEW_MARK; else if( our_area->width > 0 && our_area->height > 0 ) regionview->type = REGIONVIEW_REGION; else regionview->type = REGIONVIEW_ARROW; } else { /* We're frozen ... resize should be tightly constrained. */ switch( regionview->type ) { case REGIONVIEW_REGION: switch( regionview->resize ) { case REGIONVIEW_RESIZE_RIGHT: our_area->width = IM_CLIP( 1, rx, im->Xsize - our_area->left ); break; case REGIONVIEW_RESIZE_BOTTOM: our_area->height = IM_CLIP( 1, ry, im->Ysize - our_area->top ); break; case REGIONVIEW_RESIZE_BOTTOMRIGHT: our_area->width = IM_CLIP( 1, rx, im->Xsize - our_area->left ); our_area->height = IM_CLIP( 1, ry, im->Ysize - our_area->top ); break; case REGIONVIEW_RESIZE_TOP: our_area->top = IM_CLIP( 0, iy, bot - 1 ); our_area->height = bot - our_area->top; break; case REGIONVIEW_RESIZE_LEFT: our_area->left = IM_CLIP( 0, ix, ri - 1 ); our_area->width = ri - our_area->left; break; case REGIONVIEW_RESIZE_TOPLEFT: our_area->left = IM_CLIP( 0, ix, ri - 1 ); our_area->width = ri - our_area->left; our_area->top = IM_CLIP( 0, iy, bot - 1 ); our_area->height = bot - our_area->top; break; case REGIONVIEW_RESIZE_TOPRIGHT: our_area->top = IM_CLIP( 0, iy, bot - 1 ); our_area->height = bot - our_area->top; our_area->width = IM_CLIP( 1, rx, im->Xsize - our_area->left ); break; case REGIONVIEW_RESIZE_BOTTOMLEFT: our_area->left = IM_CLIP( 0, ix, ri - 1 ); our_area->width = ri - our_area->left; our_area->height = IM_CLIP( 1, ry, im->Ysize - our_area->top ); break; default: g_assert( FALSE ); } break; case REGIONVIEW_ARROW: case REGIONVIEW_LINE: case REGIONVIEW_BOX: switch( regionview->resize ) { case REGIONVIEW_RESIZE_TOPLEFT: our_area->left = IM_CLIP( 0, ix, im->Xsize ); our_area->width = ri - our_area->left; our_area->top = IM_CLIP( 0, iy, im->Ysize ); our_area->height = bot - our_area->top; break; case REGIONVIEW_RESIZE_BOTTOMRIGHT: our_area->width = IM_CLIP( -our_area->left, rx, im->Xsize - our_area->left ); our_area->height = IM_CLIP( -our_area->top, ry, im->Ysize - our_area->top ); break; default: g_assert( FALSE ); } break; case REGIONVIEW_MARK: our_area->left = IM_CLIP( 0, ix, im->Xsize - 1 ); our_area->top = IM_CLIP( 0, iy, im->Ysize - 1 ); our_area->width = 0; our_area->height = 0; break; case REGIONVIEW_HGUIDE: our_area->top = IM_CLIP( 0, iy, im->Ysize - 1 ); break; case REGIONVIEW_VGUIDE: our_area->left = IM_CLIP( 0, ix, im->Xsize - 1 ); break; default: g_assert( FALSE ); } } } /* Change the state. */ static void regionview_set_paint_state( Regionview *regionview, GtkStateType paint_state ) { if( regionview->paint_state != paint_state ) { regionview->paint_state = paint_state; vobject_refresh_queue( VOBJECT( regionview ) ); } } /* A motion event while we're grabbed. */ static void regionview_motion_grab( Regionview *regionview, int x, int y ) { Imagepresent *ip = regionview->ip; Imagemodel *imagemodel = ip->imagemodel; Conversion *conv = imagemodel->conv; Rect *visible = &imagemodel->visible; Rect *our_area = ®ionview->our_area; Rect snap; IMAGE *im; int ix, iy; #ifdef DEBUG printf( "regionview_motion_grab:\n" ); printf( "cods: %dx%d size %dx%d\n", our_area->left, our_area->top, our_area->width, our_area->height ); #endif /*DEBUG*/ switch( regionview->state ) { case REGIONVIEW_MOVE: conversion_disp_to_im( conv, x + regionview->dx, y + regionview->dy, &ix, &iy ); im = imageinfo_get( FALSE, conv->ii ); switch( regionview->type ) { case REGIONVIEW_REGION: case REGIONVIEW_AREA: our_area->left = IM_CLIP( 0, ix, im->Xsize - our_area->width ); our_area->top = IM_CLIP( 0, iy, im->Ysize - our_area->height ); break; case REGIONVIEW_ARROW: our_area->left = IM_CLIP( IM_MAX( 0, -our_area->width ), ix, IM_MIN( im->Xsize - 1, im->Xsize - our_area->width ) ); our_area->top = IM_CLIP( IM_MAX( 0, -our_area->height ), iy, IM_MIN( im->Ysize - 1, im->Ysize - our_area->height ) ); break; case REGIONVIEW_MARK: case REGIONVIEW_HGUIDE: case REGIONVIEW_VGUIDE: our_area->left = IM_CLIP( 0, ix, im->Xsize - our_area->width - 1 ); our_area->top = IM_CLIP( 0, iy, im->Ysize - our_area->height - 1 ); break; case REGIONVIEW_LINE: case REGIONVIEW_BOX: our_area->left = ix; our_area->top = iy; break; default: g_assert( FALSE ); } snap = *our_area; conversion_im_to_disp_rect( conv, &snap, &snap ); if( imagepresent_snap_rect( ip, &snap, &snap ) ) { conversion_disp_to_im_rect( conv, &snap, &snap ); our_area->left = snap.left; our_area->top = snap.top; } regionview_model_update( regionview ); break; case REGIONVIEW_RESIZE: imagepresent_snap_point( ip, x, y, &x, &y ); conversion_disp_to_im( conv, x, y, &ix, &iy ); regionview_resize_area( regionview, ix, iy ); regionview_model_update( regionview ); break; default: break; } if( !im_rect_includespoint( visible, x, y ) ) { int u, v; if( x < visible->left ) u = -8; else if( x > IM_RECT_RIGHT( visible ) ) u = 8; else u = 0; if( y < visible->top ) v = -8; else if( y > IM_RECT_BOTTOM( visible ) ) v = 8; else v = 0; imagepresent_scroll_start( regionview->ip, u, v ); } else imagepresent_scroll_stop( regionview->ip ); } #ifdef EVENT static char * resize_to_str( RegionviewResize resize ) { switch( resize ) { case REGIONVIEW_RESIZE_NONE: return( "REGIONVIEW_RESIZE_NONE" ); case REGIONVIEW_RESIZE_MOVE: return( "REGIONVIEW_RESIZE_MOVE" ); case REGIONVIEW_RESIZE_EDIT: return( "REGIONVIEW_RESIZE_EDIT" ); case REGIONVIEW_RESIZE_TOPLEFT: return( "REGIONVIEW_RESIZE_TOPLEFT" ); case REGIONVIEW_RESIZE_TOP: return( "REGIONVIEW_RESIZE_TOP" ); case REGIONVIEW_RESIZE_TOPRIGHT: return( "REGIONVIEW_RESIZE_TOPRIGHT" ); case REGIONVIEW_RESIZE_RIGHT: return( "REGIONVIEW_RESIZE_RIGHT" ); case REGIONVIEW_RESIZE_BOTTOMRIGHT: return( "REGIONVIEW_RESIZE_BOTTOMRIGHT" ); case REGIONVIEW_RESIZE_BOTTOM: return( "REGIONVIEW_RESIZE_BOTTOM" ); case REGIONVIEW_RESIZE_BOTTOMLEFT: return( "REGIONVIEW_RESIZE_BOTTOMLEFT" ); case REGIONVIEW_RESIZE_LEFT: return( "REGIONVIEW_RESIZE_LEFT" ); case REGIONVIEW_RESIZE_LAST: return( "REGIONVIEW_RESIZE_LAST" ); default: g_assert( 0 ); } } #endif /*EVENT*/ /* Motion event. */ static gint regionview_motion( Regionview *regionview, GdkEvent *ev, int x, int y ) { GdkWindow *win = GTK_WIDGET( regionview->ip->id )->window; RegionviewResize resize; #ifdef EVENT printf( "regionview_motion: %p, %d x %d\n", regionview, x, y ); #endif /*EVENT*/ /* We've got hints turned on, so we have to read the pointer. */ gdk_window_get_pointer( win, &x, &y, NULL ); switch( regionview->state ) { case REGIONVIEW_WAIT: if( regionview_point_in_region( regionview, x, y ) ) { resize = regionview_find_resize( regionview, x, y ); iwindow_cursor_context_set_cursor( regionview->cntxt, regionview_cursors[resize] ); regionview_set_paint_state( regionview, GTK_STATE_PRELIGHT ); } else { iwindow_cursor_context_set_cursor( regionview->cntxt, IWINDOW_SHAPE_NONE ); regionview_set_paint_state( regionview, GTK_STATE_NORMAL ); } break; case REGIONVIEW_MOVE: case REGIONVIEW_RESIZE: if( regionview->grabbed ) regionview_motion_grab( regionview, x, y ); break; default: g_assert( FALSE ); } return( FALSE ); } /* Main event loop. */ static gint regionview_event_cb( GtkWidget *widget, GdkEvent *ev, Regionview *regionview ) { Imagepresent *ip = regionview->ip; Imagemodel *imagemodel = ip->imagemodel; gboolean handled = FALSE; #ifdef EVENT if( ev->type == GDK_BUTTON_PRESS ) printf( "regionview_event: GDK_BUTTON_PRESS\n" ); if( ev->type == GDK_MOTION_NOTIFY ) printf( "regionview_event: GDK_MOTION_NOTIFY\n" ); #endif /*EVENT*/ /* Only manipulate regions if we're in SELECT mode ... don't want to * drag regions while we're panning, for example. Exception ... we can * drag/resize floating regions any time. */ if( imagemodel->state != IMAGEMODEL_SELECT && regionview->classmodel ) return( FALSE ); /* If there's a regionview grabbed, only that regionview responds to * events. */ if( regionview->ip->grabbed && regionview->ip->grabbed != regionview ) return( FALSE ); switch( ev->type ) { case GDK_BUTTON_PRESS: switch( ev->button.button ) { case 1: handled = regionview_left_press( regionview, ev, ev->button.x, ev->button.y ); break; case 3: handled = regionview_right_press( regionview, ev, ev->button.x, ev->button.y ); break; default: break; } break; case GDK_2BUTTON_PRESS: switch( ev->button.button ) { case 1: if( regionview->state == REGIONVIEW_MOVE && regionview->resize == REGIONVIEW_RESIZE_EDIT && regionview->classmodel ) { model_edit( GTK_WIDGET( ip ), MODEL( regionview->classmodel ) ); handled = TRUE; } break; default: break; } break; case GDK_BUTTON_RELEASE: switch( ev->button.button ) { case 1: handled = regionview_left_release( regionview, ev ); break; default: break; } break; case GDK_MOTION_NOTIFY: handled = regionview_motion( regionview, ev, ev->button.x, ev->button.y ); break; default: break; } return( handled ); } /* The conversion on our image has changed ... eg. on zoom in/out we need to * rethink the label position. */ static void regionview_changed_cb( Model *model, Regionview *regionview ) { #ifdef DEBUG printf( "regionview_changed\n" ); #endif /*DEBUG*/ vobject_refresh_queue( VOBJECT( regionview ) ); } /* The conversion on our image has been destroyed ... make sure we won't try * to disconnect when we go too. */ static void regionview_conv_destroy_cb( Model *model, Regionview *regionview ) { regionview->changed_sid = 0; regionview->conv_destroy_sid = 0; } static gboolean regionview_dash_crawl_cb( Regionview *regionview ) { /* Don't for regions, areas and points ... no lines in 'em. */ if( regionview->type != REGIONVIEW_REGION && regionview->type != REGIONVIEW_MARK && regionview->type != REGIONVIEW_AREA ) { regionview->dash_offset += 3; /* Don't repaint before the first expose. last_type etc. * won't have been inited properly yet. */ if( !regionview->first ) regionview_queue_draw( regionview ); } return( TRUE ); } static void regionview_setup( Regionview *regionview, Classmodel *classmodel, Rect *model_area, Imagepresent *ip ) { iWindow *iwnd; regionview->classmodel = classmodel; regionview->ip = ip; regionview->model_area = model_area; regionview->our_area = *model_area; regionview->model_changed_sid = 0; ip->regionviews = g_slist_prepend( ip->regionviews, regionview ); if( classmodel ) { classmodel->views = g_slist_prepend( classmodel->views, regionview ); regionview->model_changed_sid = g_signal_connect( G_OBJECT( classmodel ), "changed", G_CALLBACK( regionview_model_changed_cb ), regionview ); } regionview->expose_sid = g_signal_connect_after( GTK_OBJECT( ip->id ), "expose_event", GTK_SIGNAL_FUNC( regionview_expose_cb ), regionview ); regionview->destroy_sid = gtk_signal_connect_object( GTK_OBJECT( ip->id ), "destroy", GTK_SIGNAL_FUNC( gtk_widget_destroy ), GTK_OBJECT( regionview ) ); regionview->event_sid = gtk_signal_connect( GTK_OBJECT( ip->id ), "event", GTK_SIGNAL_FUNC( regionview_event_cb ), regionview ); regionview->changed_sid = g_signal_connect( G_OBJECT( ip->id->conv ), "changed", G_CALLBACK( regionview_changed_cb ), regionview ); regionview->conv_destroy_sid = g_signal_connect( G_OBJECT( ip->id->conv ), "destroy", G_CALLBACK( regionview_conv_destroy_cb ), regionview ); iwnd = IWINDOW( gtk_widget_get_toplevel( GTK_WIDGET( ip ) ) ); regionview->cntxt = iwindow_cursor_context_new( iwnd, 1, "regionview" ); popup_link( GTK_WIDGET( regionview ), regionview_popup_menu, ip ); regionview->dash_crawl = g_timeout_add( 200, (GSourceFunc) regionview_dash_crawl_cb, regionview ); } Regionview * regionview_new( Classmodel *classmodel, Rect *model_area, Imagepresent *ip ) { Regionview *regionview = gtk_type_new( TYPE_REGIONVIEW ); regionview_setup( regionview, classmodel, model_area, ip ); #ifdef DEBUG_MAKE printf( "regionview_new: %dx%d size %dx%d\n", model_area->left, model_area->top, model_area->width, model_area->height ); #endif /*DEBUG_MAKE*/ return( regionview ); } /* Type we display for each of the classes. Order is important! */ typedef struct { const char *name; RegionviewType type; } RegionviewDisplay; static RegionviewDisplay regionview_display_table[] = { { CLASS_HGUIDE, REGIONVIEW_HGUIDE }, { CLASS_VGUIDE, REGIONVIEW_VGUIDE }, { CLASS_MARK, REGIONVIEW_MARK }, { CLASS_AREA, REGIONVIEW_AREA }, { CLASS_REGION, REGIONVIEW_REGION }, { CLASS_ARROW, REGIONVIEW_ARROW } }; /* Look at the class we are drawing, set the display type. */ void regionview_set_type( Regionview *regionview, PElement *root ) { gboolean result; int i; if( heap_is_class( root, &result ) && result ) for( i = 0; i < IM_NUMBER( regionview_display_table ); i++ ) { const char *name = regionview_display_table[i].name; if( !heap_is_instanceof( name, root, &result ) ) continue; if( result ) { regionview->type = regionview_display_table[i].type; vobject_refresh_queue( VOBJECT( regionview ) ); break; } } } nip2-8.7.0/src/helpindex.h0000644000175000017500000001313613224651032012241 00000000000000{ "sec:object", "nipguidese34.html#nip_label_sec:object" }, { "sec:menu-colour", "nipguidese14.html#nip_label_sec:menu-colour" }, { "tb:colour", "nipguidese14.html#nip_label_tb:colour" }, { "sec:pattern", "nipguidese30.html#nip_label_sec:pattern" }, { "sec:nerdtour", "nipguidese3.html#nip_label_sec:nerdtour" }, { "fg:Fred", "nipguidese3.html#nip_label_fg:Fred" }, { "fg:mainFred", "nipguidese3.html#nip_label_fg:mainFred" }, { "fg:slideFred", "nipguidese3.html#nip_label_fg:slideFred" }, { "fg:Jim", "nipguidese3.html#nip_label_fg:Jim" }, { "fg:twomoreregions", "nipguidese3.html#nip_label_fg:twomoreregions" }, { "fg:myjoin", "nipguidese3.html#nip_label_fg:myjoin" }, { "sec:menu-object", "nipguidese20.html#nip_label_sec:menu-object" }, { "sec:operators", "nipguidese27.html#nip_label_sec:operators" }, { "tb:precedence", "nipguidese27.html#nip_label_tb:precedence" }, { "sec:listsyntax", "nipguidese27.html#nip_label_sec:listsyntax" }, { "sec:func", "nipguidese27.html#nip_label_sec:func" }, { "sec:vidpref", "nipguidese4.html#nip_label_sec:vidpref" }, { "fg:vidpref", "nipguidese4.html#nip_label_fg:vidpref" }, { "sec:imcap", "nipguidese4.html#nip_label_sec:imcap" }, { "sec:grey", "nipguidese4.html#nip_label_sec:grey" }, { "sec:linuxgrey", "nipguidese4.html#nip_label_sec:linuxgrey" }, { "sec:wingrey", "nipguidese4.html#nip_label_sec:wingrey" }, { "sec:lists", "nipguidese28.html#nip_label_sec:lists" }, { "tb:list", "nipguidese28.html#nip_label_tb:list" }, { "sec:cmdline", "nipguidese13.html#nip_label_sec:cmdline" }, { "sec:menu-histogram", "nipguidese16.html#nip_label_sec:menu-histogram" }, { "sec:menu-matrix", "nipguidese19.html#nip_label_sec:menu-matrix" }, { "sec:quicktour", "nipguidese1.html#nip_label_sec:quicktour" }, { "fg:loadedimage", "nipguidese1.html#nip_label_fg:loadedimage" }, { "fg:imageview", "nipguidese1.html#nip_label_fg:imageview" }, { "tb:shortcuts", "nipguidese1.html#nip_label_tb:shortcuts" }, { "fg:imageviewregion", "nipguidese1.html#nip_label_fg:imageviewregion" }, { "fg:main2regions", "nipguidese1.html#nip_label_fg:main2regions" }, { "fg:rotate", "nipguidese1.html#nip_label_fg:rotate" }, { "fg:join", "nipguidese1.html#nip_label_fg:join" }, { "fg:browse", "nipguidese1.html#nip_label_fg:browse" }, { "tb:builtin", "nipguidese24.html#nip_label_tb:builtin" }, { "tb:toolkits", "nipguidese31.html#nip_label_tb:toolkits" }, { "sec:menu-filter", "nipguidese15.html#nip_label_sec:menu-filter" }, { "sec:progwin", "nipguidese12.html#nip_label_sec:progwin" }, { "sec:trace", "nipguidese12.html#nip_label_sec:trace" }, { "sec:menu-tasks", "nipguidese21.html#nip_label_sec:menu-tasks" }, { "sec:menu-capture", "nipguidese21.html#nip_label_sec:menu-capture" }, { "sec:menu-mosaic", "nipguidese21.html#nip_label_sec:menu-mosaic" }, { "sec:menu-picture-frame", "nipguidese21.html#nip_label_sec:menu-picture-frame" }, { "sec:menu-print", "nipguidese21.html#nip_label_sec:menu-print" }, { "sec:bowser", "nipguidese33.html#nip_label_sec:bowser" }, { "sec:tools", "nipguidese33.html#nip_label_sec:tools" }, { "fg:toolkit", "nipguidese33.html#nip_label_fg:toolkit" }, { "fg:toolkit2", "nipguidese33.html#nip_label_fg:toolkit2" }, { "fg:toolkit3", "nipguidese33.html#nip_label_fg:toolkit3" }, { "sec:workspaces", "nipguidese33.html#nip_label_sec:workspaces" }, { "fg:row2", "nipguidese33.html#nip_label_fg:row2" }, { "tb:classes", "nipguidese33.html#nip_label_tb:classes" }, { "sec:Image", "nipguidese33.html#nip_label_sec:Image" }, { "sec:colour", "nipguidese33.html#nip_label_sec:colour" }, { "sec:loadsave", "nipguidese10.html#nip_label_sec:loadsave" }, { "fg:open", "nipguidese10.html#nip_label_fg:open" }, { "fg:save", "nipguidese10.html#nip_label_fg:save" }, { "sec:view", "nipguidese9.html#nip_label_sec:view" }, { "fg:scr3", "nipguidese9.html#nip_label_fg:scr3" }, { "fg:scr4", "nipguidese9.html#nip_label_fg:scr4" }, { "sec:paintbox", "nipguidese9.html#nip_label_sec:paintbox" }, { "fg:paint", "nipguidese9.html#nip_label_fg:paint" }, { "sec:program", "nipguidech6.html#nip_label_sec:program" }, { "sec:lazy", "nipguidese29.html#nip_label_sec:lazy" }, { "sec:optimise", "nipguidese35.html#nip_label_sec:optimise" }, { "sec:menus", "nipguidech5.html#nip_label_sec:menus" }, { "sec:ipwindow", "nipguidese11.html#nip_label_sec:ipwindow" }, { "fg:startup", "nipguidese11.html#nip_label_fg:startup" }, { "sec:column", "nipguidese11.html#nip_label_sec:column" }, { "sec:row", "nipguidese11.html#nip_label_sec:row" }, { "fg:row", "nipguidese11.html#nip_label_fg:row" }, { "sec:apply", "nipguidese11.html#nip_label_sec:apply" }, { "sec:batch", "nipguidese11.html#nip_label_sec:batch" }, { "sec:error", "nipguidese11.html#nip_label_sec:error" }, { "sec:diaref", "nipguidese11.html#nip_label_sec:diaref" }, { "sec:menu-math", "nipguidese18.html#nip_label_sec:menu-math" }, { "sec:ir", "nipguidech3.html#nip_label_sec:ir" }, { "sec:mosaicing", "nipguidese5.html#nip_label_sec:mosaicing" }, { "sec:pieces", "nipguidese5.html#nip_label_sec:pieces" }, { "sec:tutorial", "nipguidech2.html#nip_label_sec:tutorial" }, { "sec:reference", "nipguidech4.html#nip_label_sec:reference" }, { "sec:class", "nipguidese32.html#nip_label_sec:class" }, { "sec:inheritance", "nipguidese32.html#nip_label_sec:inheritance" }, { "sec:balance", "nipguidese6.html#nip_label_sec:balance" }, { "sec:irtut", "nipguidese2.html#nip_label_sec:irtut" }, { "fg:loadsamples", "nipguidese2.html#nip_label_fg:loadsamples" }, { "fg:readyjoin", "nipguidese2.html#nip_label_fg:readyjoin" }, { "fg:joined", "nipguidese2.html#nip_label_fg:joined" }, { "sec:config", "nipguideap1.html#nip_label_sec:config" }, { "sec:menu-image", "nipguidese17.html#nip_label_sec:menu-image" }, { "sec:callvips", "nipguidese36.html#nip_label_sec:callvips" }, nip2-8.7.0/src/rowview.c0000644000175000017500000004645313224651032011766 00000000000000/* A rowview in a workspace ... not a widget, part of column */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #include "ip.h" static ModelClass *parent_class = NULL; enum { ROWVIEW_TARGET_STRING, }; static GtkTargetEntry rowview_target_table[] = { { "STRING", 0, ROWVIEW_TARGET_STRING }, { "text/plain", 0, ROWVIEW_TARGET_STRING } }; /* Just one popup for all tally buttons. */ static GtkWidget *rowview_popup_menu = NULL; static void rowview_destroy( GtkObject *object ) { Rowview *rview; g_return_if_fail( object != NULL ); g_return_if_fail( IS_ROWVIEW( object ) ); rview = ROWVIEW( object ); #ifdef DEBUG printf( "rowview_destroy: " ); row_name_print( ROW( VOBJECT( rview )->iobject ) ); printf( "\n" ); #endif /*DEBUG*/ IM_FREE( rview->last_tooltip ); /* Kill children ... must do this ourselves, since we are not a * self-contained widget. */ DESTROY_GTK( rview->but ); DESTROY_GTK( rview->spin ); DESTROY_GTK( rview->led ); GTK_OBJECT_CLASS( parent_class )->destroy( object ); } static void rowview_attach( Rowview *rview, GtkWidget *child, int x, GtkAttachOptions xoptions, GtkAttachOptions yoptions ) { Subcolumnview *sview = rview->sview; gtk_widget_ref( child ); if( child->parent ) gtk_container_remove( GTK_CONTAINER( sview->table ), child ); gtk_table_attach( GTK_TABLE( sview->table ), child, x, x + 1, rview->rnum, rview->rnum + 1, xoptions, yoptions, 0, 0 ); gtk_widget_unref( child ); } static void rowview_update_widgets( Rowview *rview ) { Row *row = ROW( VOBJECT( rview )->iobject ); int pos = ICONTAINER( row )->pos; gboolean editable = row->ws->mode != WORKSPACE_MODE_NOEDIT; #ifdef DEBUG printf( "rowview_refresh: " ); row_name_print( row ); printf( "\n" ); printf( "\teditable == %d\n", editable ); #endif /*DEBUG*/ /* Attach widgets to parent in new place. */ if( rview->rnum != pos ) { #ifdef DEBUG printf( "rowview_refresh: move from row %d to row %d\n", rview->rnum, pos ); #endif /*DEBUG*/ rview->rnum = pos; rowview_attach( rview, rview->spin, 0, GTK_FILL, GTK_FILL ); rowview_attach( rview, rview->but, 1, GTK_FILL, GTK_EXPAND | GTK_FILL ); rowview_attach( rview, rview->led, 2, GTK_FILL, GTK_EXPAND | GTK_FILL ); if( rview->rhsview ) rowview_attach( rview, GTK_WIDGET( rview->rhsview ), 3, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL ); } /* Set colours. */ if( CALC_DISPLAY_LED ) { char *stock_id; stock_id = STOCK_LED_OFF; if( row->selected ) stock_id = STOCK_LED_GREEN; else if( row->show == ROW_SHOW_PARENT ) stock_id = STOCK_LED_CYAN; else if( row->show == ROW_SHOW_CHILD ) stock_id = STOCK_LED_BLUE; else if( row->err ) stock_id = STOCK_LED_RED; else if( row->dirty ) stock_id = STOCK_LED_YELLOW; gtk_image_set_from_stock( GTK_IMAGE( rview->led ), stock_id, GTK_ICON_SIZE_MENU ); } else { gchar *name = ""; if( row->selected ) name = "selected_widget"; else if( row->show == ROW_SHOW_PARENT ) name = "parent_widget"; else if( row->show == ROW_SHOW_CHILD ) name = "child_widget"; else if( row->err ) name = "error_widget"; else if( row->dirty ) name = "dirty_widget"; gtk_widget_set_name( rview->but, name ); } widget_visible( rview->led, rview->visible && CALC_DISPLAY_LED && editable ); /* Update button. */ set_glabel( rview->label, "%s", row_name( row ) ); widget_visible( rview->but, rview->visible && editable ); /* Spin visible only if this is a class. */ widget_visible( rview->spin, rview->visible && row->is_class && editable ); if( rview->rhsview ) widget_visible( GTK_WIDGET( rview->rhsview ), rview->visible ); } static void rowview_reset( View *view ) { Rowview *rview = ROWVIEW( view ); rowview_update_widgets( rview ); VIEW_CLASS( parent_class )->reset( view ); } static void rowview_refresh( vObject *vobject ) { Rowview *rview = ROWVIEW( vobject ); rowview_update_widgets( rview ); VOBJECT_CLASS( parent_class )->refresh( vobject ); } /* Single click on button callback. */ static void rowview_single_cb( GtkWidget *wid, GdkEvent *event, Rowview *rview ) { Row *row = ROW( VOBJECT( rview )->iobject ); row_select_modifier( row, event->button.state ); } /* Edit our object. */ static gboolean rowview_edit( Rowview *rview ) { Row *row = ROW( VOBJECT( rview )->iobject ); Model *graphic = row->child_rhs->graphic; if( graphic ) model_edit( GTK_WIDGET( rview->sview ), graphic ); return( TRUE ); } /* Double click on button callback. */ static void rowview_double_cb( GtkWidget *button, GdkEvent *event, Rowview *rview ) { if( !rowview_edit( rview ) ) iwindow_alert( button, GTK_MESSAGE_ERROR ); } /* Edit in menu. */ static void rowview_edit_cb( GtkWidget *menu, GtkWidget *button, Rowview *rview ) { if( !rowview_edit( rview ) ) iwindow_alert( button, GTK_MESSAGE_ERROR ); } /* Show info. */ static gboolean rowview_header( Rowview *rview ) { Row *row = ROW( VOBJECT( rview )->iobject ); Model *graphic = row->child_rhs->graphic; if( graphic ) model_header( GTK_WIDGET( rview->sview ), graphic ); return( TRUE ); } /* Info in menu. */ static void rowview_header_cb( GtkWidget *menu, GtkWidget *button, Rowview *rview ) { if( !rowview_header( rview ) ) iwindow_alert( button, GTK_MESSAGE_ERROR ); } /* Clone the current item. */ static void rowview_clone_cb( GtkWidget *menu, GtkWidget *button, Rowview *rview ) { Row *row = ROW( VOBJECT( rview )->iobject ); Workspace *ws = row->top_col->ws; /* Only allow clone of top level rows. */ if( row->top_row != row ) { error_top( _( "Can't duplicate." ) ); error_sub( "%s", _( "You can only duplicate top level rows." ) ); iwindow_alert( button, GTK_MESSAGE_INFO ); return; } workspace_deselect_all( ws ); row_select( row ); if( !workspace_selected_duplicate( ws ) ) iwindow_alert( button, GTK_MESSAGE_ERROR ); workspace_deselect_all( ws ); symbol_recalculate_all(); } /* Ungroup the current item. */ static void rowview_ungroup_cb( GtkWidget *menu, GtkWidget *button, Rowview *rview ) { Row *row = ROW( VOBJECT( rview )->iobject ); workspace_deselect_all( row->ws ); row_select( row ); if( !workspace_selected_ungroup( row->ws ) ) iwindow_alert( button, GTK_MESSAGE_ERROR ); symbol_recalculate_all(); } /* Save the current item. */ static void rowview_save_cb( GtkWidget *menu, GtkWidget *button, Rowview *rview ) { iWindow *iwnd = IWINDOW( view_get_toplevel( VIEW( rview ) ) ); Row *row = ROW( VOBJECT( rview )->iobject ); Model *graphic = row->child_rhs->graphic; if( graphic ) classmodel_graphic_save( CLASSMODEL( graphic ), GTK_WIDGET( iwnd ) ); } /* Replace the current item. */ static void rowview_replace_cb( GtkWidget *menu, GtkWidget *button, Rowview *rview ) { iWindow *iwnd = IWINDOW( view_get_toplevel( VIEW( rview ) ) ); Row *row = ROW( VOBJECT( rview )->iobject ); Model *graphic = row->child_rhs->graphic; if( graphic ) classmodel_graphic_replace( CLASSMODEL( graphic ), GTK_WIDGET( iwnd ) ); } /* Recalculate the current item. */ static void rowview_recalc_cb( GtkWidget *menu, GtkWidget *button, Rowview *rview ) { Row *row = ROW( VOBJECT( rview )->iobject ); Workspace *ws = row->top_col->ws; /* Mark dirty from this sym on, and force a recalc even if recalc is * off. */ workspace_deselect_all( ws ); row_select( row ); if( !workspace_selected_recalc( ws ) ) iwindow_alert( button, GTK_MESSAGE_ERROR ); workspace_deselect_all( ws ); /* Now ... pick up any errors. */ if( row->sym && !symbol_recalculate_check( row->sym ) ) iwindow_alert( button, GTK_MESSAGE_ERROR ); } /* Reset the current item. */ static void rowview_clear_edited_cb( GtkWidget *menu, GtkWidget *button, Rowview *rview ) { Row *row = ROW( VOBJECT( rview )->iobject ); (void) icontainer_map_all( ICONTAINER( row ), (icontainer_map_fn) model_clear_edited, NULL ); symbol_recalculate_all(); } /* Remove the current item. */ static void rowview_remove_cb( GtkWidget *menu, GtkWidget *button, Rowview *rview ) { Row *row = ROW( VOBJECT( rview )->iobject ); Workspace *ws = row->top_col->ws; workspace_deselect_all( ws ); row_select( row ); workspace_selected_remove_yesno( ws, button ); } /* Callback for up/down spin button. */ static void rowview_spin_up_cb( GtkWidget *widget, gpointer client ) { Rowview *rview = ROWVIEW( client ); Row *row = ROW( VOBJECT( rview )->iobject ); Rhs *rhs = row->child_rhs; rhs_vislevel_down( rhs ); workspace_set_modified( row->ws, TRUE ); } static void rowview_spin_down_cb( GtkWidget *widget, gpointer client ) { Rowview *rview = ROWVIEW( client ); Row *row = ROW( VOBJECT( rview )->iobject ); Rhs *rhs = row->child_rhs; rhs_vislevel_up( rhs ); workspace_set_modified( row->ws, TRUE ); } /* Scroll to make tally entry visible. */ static void rowview_scrollto( View *view, ModelScrollPosition position ) { Rowview *rview = ROWVIEW( view ); Columnview *cview = view_get_columnview( VIEW( rview ) ); Workspaceview *wview = cview->wview; int x, y, w, h; /* Extract position of tally row in RC widget. */ rowview_get_position( rview, &x, &y, &w, &h ); workspaceview_scroll( wview, x, y, w, h ); } static void rowview_drag( Rowview *rview_from, Rowview *rview_to ) { Row *row_from = ROW( VOBJECT( rview_from )->iobject ); Row *row_to = ROW( VOBJECT( rview_to )->iobject ); if( row_from->top_col != row_to->top_col ) { error_top( _( "Not implemented." ) ); error_sub( _( "Drag between columns not yet implemented." ) ); iwindow_alert( GTK_WIDGET( rview_from ), GTK_MESSAGE_ERROR ); return; } icontainer_child_move( ICONTAINER( row_from ), ICONTAINER( row_to )->pos ); /* Refresh all the rows, to make sure we move all rows to their new * slots. */ icontainer_map( ICONTAINER( row_from->scol ), (icontainer_map_fn) iobject_changed, NULL, NULL ); workspace_deselect_all( row_from->ws ); } static void rowview_drag_data_get( GtkWidget *but, GdkDragContext *context, GtkSelectionData *selection_data, guint info, guint time, Rowview *rview ) { if( info == ROWVIEW_TARGET_STRING ) { /* Send a pointer to us. */ gtk_selection_data_set( selection_data, selection_data->target, 8, (const guchar *) &rview, sizeof( Rowview * ) ); } } static void rowview_drag_data_received( GtkWidget *but, GdkDragContext *context, gint x, gint y, GtkSelectionData *data, guint info, guint time, Rowview *rview_to ) { if( data->length == sizeof( Rowview * ) && data->format == 8 && info == ROWVIEW_TARGET_STRING ) { Rowview *rview_from = *((Rowview **) data->data); if( IS_ROWVIEW( rview_from ) ) { rowview_drag( rview_from, rview_to ); gtk_drag_finish( context, TRUE, FALSE, time ); return; } } gtk_drag_finish( context, FALSE, FALSE, time ); } /* Attach the rowview menu to a widget ... also used by iimageview */ guint rowview_menu_attach( Rowview *rview, GtkWidget *widget ) { return( popup_attach( widget, rowview_popup_menu, rview ) ); } static void rowview_link( View *view, Model *model, View *parent ) { Row *row = ROW( model ); Rowview *rview = ROWVIEW( view ); Subcolumnview *sview = SUBCOLUMNVIEW( parent ); VIEW_CLASS( parent_class )->link( view, model, parent ); rview->sview = sview; /* Only drag n drop top level rows. */ if( row->top_row == row ) { gtk_drag_source_set( rview->but, GDK_BUTTON1_MASK, rowview_target_table, IM_NUMBER( rowview_target_table ), GDK_ACTION_COPY ); gtk_signal_connect( GTK_OBJECT( rview->but ), "drag_data_get", GTK_SIGNAL_FUNC( rowview_drag_data_get ), rview ); gtk_drag_dest_set( rview->but, GTK_DEST_DEFAULT_ALL, rowview_target_table, IM_NUMBER( rowview_target_table ), GDK_ACTION_COPY ); gtk_signal_connect( GTK_OBJECT( rview->but ), "drag_data_received", GTK_SIGNAL_FUNC( rowview_drag_data_received ), rview ); } rowview_menu_attach( rview, rview->but ); } static void rowview_child_add( View *parent, View *child ) { Rowview *rowview = ROWVIEW( parent ); g_assert( IS_RHSVIEW( child ) ); g_assert( !rowview->rhsview ); rowview->rhsview = RHSVIEW( child ); VIEW_CLASS( parent_class )->child_add( parent, child ); } static void rowview_child_remove( View *parent, View *child ) { Rowview *rowview = ROWVIEW( parent ); g_assert( IS_RHSVIEW( child ) ); g_assert( rowview->rhsview ); rowview->rhsview = NULL; VIEW_CLASS( parent_class )->child_remove( parent, child ); } static void rowview_class_init( RowviewClass *class ) { GtkObjectClass *object_class = (GtkObjectClass *) class; vObjectClass *vobject_class = (vObjectClass *) class; ViewClass *view_class = (ViewClass *) class; GtkWidget *pane; parent_class = g_type_class_peek_parent( class ); /* Create signals. */ /* Init methods. */ object_class->destroy = rowview_destroy; vobject_class->refresh = rowview_refresh; view_class->link = rowview_link; view_class->child_add = rowview_child_add; view_class->child_remove = rowview_child_remove; view_class->reset = rowview_reset; view_class->scrollto = rowview_scrollto; /* Other init. */ pane = rowview_popup_menu = popup_build( _( "Row menu" ) ); popup_add_but( pane, _( "_Edit" ), POPUP_FUNC( rowview_edit_cb ) ); popup_add_but( pane, _( "_Header" ), POPUP_FUNC( rowview_header_cb ) ); popup_add_but( pane, STOCK_DUPLICATE, POPUP_FUNC( rowview_clone_cb ) ); popup_add_but( pane, _( "U_ngroup" ), POPUP_FUNC( rowview_ungroup_cb ) ); popup_add_but( pane, GTK_STOCK_SAVE_AS, POPUP_FUNC( rowview_save_cb ) ); popup_add_but( pane, _( "Replace From _File" ), POPUP_FUNC( rowview_replace_cb ) ); popup_add_but( pane, _( "_Recalculate" ), POPUP_FUNC( rowview_recalc_cb ) ); popup_add_but( pane, _( "Re_set" ), POPUP_FUNC( rowview_clear_edited_cb ) ); menu_add_sep( pane ); popup_add_but( pane, GTK_STOCK_DELETE, POPUP_FUNC( rowview_remove_cb ) ); } static void rowview_enter_cb( GtkWidget *widget, Rowview *rview ) { Row *row = ROW( VOBJECT( rview )->iobject ); row_set_status( row ); row_show_dependents( row ); } static void rowview_leave_cb( GtkWidget *widget, Rowview *rview ) { Row *row = ROW( VOBJECT( rview )->iobject ); row_hide_dependents( row ); } static gboolean rowview_focus_cb( GtkWidget *widget, GtkDirectionType dir, Rowview *rview ) { view_scrollto( VIEW( rview ), MODEL_SCROLL_TOP ); return( FALSE ); } static void rowview_tooltip_generate( GtkWidget *widget, VipsBuf *buf, Rowview *rview ) { Row *row = ROW( VOBJECT( rview )->iobject ); iobject_info( IOBJECT( row ), buf ); vips_buf_removec( buf, '\n' ); } static void rowview_init( Rowview *rview ) { rview->visible = TRUE; rview->rnum = -1; rview->last_tooltip = NULL; /* Make leds. */ rview->led = gtk_image_new_from_stock( STOCK_LED_OFF, GTK_ICON_SIZE_MENU ); gtk_misc_set_alignment( GTK_MISC( rview->led ), 0.5, 0.0 ); gtk_misc_set_padding( GTK_MISC( rview->led ), 2, 2 ); /* Make fold/unfold button. */ rview->spin = spin_new(); gtk_signal_connect( GTK_OBJECT( rview->spin ), "up_click", GTK_SIGNAL_FUNC( rowview_spin_up_cb ), rview ); gtk_signal_connect( GTK_OBJECT( rview->spin ), "down_click", GTK_SIGNAL_FUNC( rowview_spin_down_cb ), rview ); gtk_widget_show( rview->spin ); set_tooltip( rview->spin, _( "Click to open or close class" ) ); /* Make name button. */ rview->but = gtk_button_new(); gtk_widget_show( rview->but ); doubleclick_add( rview->but, FALSE, DOUBLECLICK_FUNC( rowview_single_cb ), rview, DOUBLECLICK_FUNC( rowview_double_cb ), rview ); rview->label = gtk_label_new( "" ); gtk_misc_set_alignment( GTK_MISC( rview->label ), 1, 0 ); gtk_misc_set_padding( GTK_MISC( rview->label ), 2, 0 ); gtk_container_add( GTK_CONTAINER( rview->but ), rview->label ); gtk_widget_show( rview->label ); gtk_signal_connect( GTK_OBJECT( rview->but ), "enter", GTK_SIGNAL_FUNC( rowview_enter_cb ), rview ); gtk_signal_connect( GTK_OBJECT( rview->but ), "leave", GTK_SIGNAL_FUNC( rowview_leave_cb ), rview ); gtk_signal_connect( GTK_OBJECT( rview->but ), "focus", GTK_SIGNAL_FUNC( rowview_focus_cb ), rview ); set_tooltip_generate( rview->but, (TooltipGenerateFn) rowview_tooltip_generate, rview, NULL ); } GtkType rowview_get_type( void ) { static GtkType rowview_type = 0; if( !rowview_type ) { static const GtkTypeInfo rview_info = { "Rowview", sizeof( Rowview ), sizeof( RowviewClass ), (GtkClassInitFunc) rowview_class_init, (GtkObjectInitFunc) rowview_init, /* reserved_1 */ NULL, /* reserved_2 */ NULL, (GtkClassInitFunc) NULL, }; rowview_type = gtk_type_unique( TYPE_VIEW, &rview_info ); } return( rowview_type ); } View * rowview_new( void ) { Rowview *rview = gtk_type_new( TYPE_ROWVIEW ); return( VIEW( rview ) ); } /* Find the position and size of a row in the enclosing GtkFixed. */ void rowview_get_position( Rowview *rview, int *x, int *y, int *w, int *h ) { Columnview *cview = view_get_columnview( VIEW( rview ) ); if( GTK_WIDGET_VISIBLE( rview->spin ) ) { *x = rview->spin->allocation.x; *y = rview->spin->allocation.y; *w = rview->spin->allocation.width; *h = rview->spin->allocation.height; } else { *x = rview->but->allocation.x; *y = rview->but->allocation.y; *w = 0; *h = 0; } *w += rview->but->allocation.width; *h = IM_MAX( rview->but->allocation.height, *h ); if( GTK_WIDGET_VISIBLE( rview->led ) ) { *w += rview->led->allocation.width; *h = IM_MAX( rview->led->allocation.height, *h ); } *w += GTK_WIDGET( rview->rhsview )->allocation.width; *h = IM_MAX( GTK_WIDGET( rview->rhsview )->allocation.height, *h ); /* Title bar, plus separator. */ *y += cview->title->allocation.height + 2; *x += cview->main->allocation.x; *y += cview->main->allocation.y; #ifdef DEBUG printf( "rowview_get_position: " ); row_name_print( ROW( VOBJECT( rview )->iobject ) ); printf( ": x = %d, y = %d, w = %d, h = %d\n", *x, *y, *w, *h ); #endif /*DEBUG*/ } /* Hide/show a row. */ void rowview_set_visible( Rowview *rview, gboolean visible ) { if( rview->visible != visible ) { rview->visible = visible; rowview_update_widgets( rview ); } } gboolean rowview_get_visible( Rowview *rview ) { return( rview->visible ); } nip2-8.7.0/src/ip.h0000644000175000017500000003212513330327245010674 00000000000000/* All ip headers. */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* We can get multiple includes sometimes, gah, thank you bison. */ #ifndef IP_H #define IP_H /* DEBUG everywhere. #define DEBUG */ /* Turn off VIPS's old and broken defines, we don't need them. */ #define IM_NO_VIPS7_COMPAT /* Enable heap sanity checks on every alloc ... very slow ... also see heap.c #define DEBUG_HEAP */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #ifdef ENABLE_NLS #include #define _(String) gettext(String) #ifdef gettext_noop #define N_(String) gettext_noop(String) #else #define N_(String) (String) #endif #else /* NLS is disabled */ #define _(String) (String) #define N_(String) (String) #define textdomain(String) (String) #define gettext(String) (String) #define dgettext(Domain,String) (String) #define dcgettext(Domain,String,Type) (String) #define bindtextdomain(Domain,Directory) (Domain) #define bind_textdomain_codeset(Domain,Codeset) (Codeset) #define ngettext(S, P, N) ((N) == 1 ? (S) : (P)) #endif /* ENABLE_NLS */ #include #include #include #include #include #include #include #include #include #include #include #include #ifdef HAVE_PWD_H #include #endif /*HAVE_PWD_H*/ #ifdef HAVE_FNMATCH_H #include #endif /*HAVE_FNMATCH_H*/ #ifdef HAVE_SYS_PARAM_H #include #endif /*HAVE_SYS_PARAM_H*/ #include #ifdef HAVE_SYS_TIME_H #include #endif /*HAVE_SYS_TIME_H*/ #include #ifdef HAVE_SYS_RESOURCE_H #include #endif /*HAVE_SYS_RESOURCE_H*/ #ifdef HAVE_SYS_WAIT_H #include #endif /*HAVE_SYS_WAIT_H*/ #ifdef HAVE_UNISTD_H #include #endif /*HAVE_UNISTD_H*/ #ifdef HAVE_SYS_STATVFS_H #include #endif /*HAVE_SYS_STATVFS_H*/ #ifdef HAVE_SYS_VFS_H #include extern int statfs(); #endif /*HAVE_SYS_VFS_H*/ #ifdef HAVE_SYS_MOUNT_H #include #endif /*HAVE_SYS_MOUNT_H*/ #ifdef OS_WIN32 #include #endif /*OS_WIN32*/ #ifdef HAVE_FFTW #include #endif /*HAVE_FFTW*/ #ifdef HAVE_FFTW3 #include #endif /*HAVE_FFTW3*/ #include /* Have to include glib before dmalloc ... dmalloc may be included by vips.h */ #include #include #ifdef HAVE_LIBGOFFICE #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #endif /*HAVE_LIBGOFFICE*/ #ifdef HAVE_LIBGVC #include #endif /*HAVE_LIBGVC*/ #include #include #include #include #include /* If we're not using GNU C, elide __attribute__ */ #ifndef __GNUC__ # ifndef __attribute__ # define __attribute__(x) /*NOTHING*/ # endif #endif /* Our general widgets. */ #include "formula.h" #include "doubleclick.h" /* Generated marshallers. */ #include "nipmarshal.h" /* XML namespace ... note, not nip2! We can't change this. */ #define NAMESPACE "http://www.vips.ecs.soton.ac.uk/nip" #define MAXFILES (4000) /* Max. no of files in path */ #define STACK_SIZE (1000) /* Depth of eval stack */ #define LEN_LABEL (512) /* Label on windows */ #define MAX_SYSTEM (50) /* Max number of args we allow */ #define MAX_BANDS (64) /* Max number of bands in image */ #define MAX_CSTACK (10) /* Max number of cursors we stack */ #define MAX_STRSIZE (100000) /* Size of text for user defs */ #define MAX_TRACE (1024) /* Biggest thing we print in trace */ #define MAX_SSTACK (40) /* Scope stack for parser */ #define VIPS_HOMEPAGE "https://github.com/jcupitt/nip2" #define IP_NAME PACKAGE "-" VERSION #define NIP_DOCPATH "$VIPSHOME" G_DIR_SEPARATOR_S "share" G_DIR_SEPARATOR_S \ "doc" G_DIR_SEPARATOR_S PACKAGE G_DIR_SEPARATOR_S "html" #define VIPS_DOCPATH "$VIPSHOME" G_DIR_SEPARATOR_S "share" G_DIR_SEPARATOR_S \ "doc" G_DIR_SEPARATOR_S "vips" G_DIR_SEPARATOR_S "html" #define IP_NAME PACKAGE "-" VERSION #define MAX_LINELENGTH (120) /* Max chars we display of value */ #define MAX_RECENT (10) /* Number of recent items in file menu */ #define NIP_COPYRIGHT "%s: ©2018 Imperial College, London" /* Our stock_ids. */ #define STOCK_NEXT_ERROR "nip-next-error" #define STOCK_DROPPER "nip-dropper" #define STOCK_DUPLICATE "nip-duplicate" #define STOCK_PAINTBRUSH "nip-paintbrush" #define STOCK_LINE "nip-linedraw" #define STOCK_TEXT "nip-text" #define STOCK_SMUDGE "nip-smudge" #define STOCK_FLOOD "nip-flood" #define STOCK_FLOOD_BLOB "nip-floodblob" #define STOCK_RECT "nip-rect" #define STOCK_MOVE "nip-move" #define STOCK_LOCK "nip-lock" #define STOCK_ALERT "nip-alert" #define STOCK_SELECT "nip-select" #define STOCK_LED_RED "nip-led-red" #define STOCK_LED_GREEN "nip-led-green" #define STOCK_LED_BLUE "nip-led-blue" #define STOCK_LED_YELLOW "nip-led-yellow" #define STOCK_LED_CYAN "nip-led-cyan" #define STOCK_LED_OFF "nip-led-off" /* How much we decompile for error messages. */ #define MAX_ERROR_FRAG (100) /* win32 adds '_', sometimes. */ #ifdef OS_WIN32 #ifndef popen #define popen(b,m) _popen(b,m) #endif /*popen*/ #ifndef pclose #define pclose(f) _pclose(f) #endif /*pclose*/ #define mktemp(f) _mktemp(f) #endif /*OS_WIN32*/ /* Fwd ref these. */ typedef struct _Watch Watch; typedef struct _Toolitem Toolitem; typedef struct _BuiltinInfo BuiltinInfo; typedef struct _Classmodel Classmodel; typedef struct _Colour Colour; typedef struct _Column Column; typedef struct _Columnview Columnview; typedef struct _Compile Compile; typedef struct _Conversion Conversion; typedef struct _Conversionview Conversionview; typedef struct _Expr Expr; typedef struct _Filemodel Filemodel; typedef struct _Heap Heap; typedef struct _HeapBlock HeapBlock; typedef struct _Heapmodel Heapmodel; typedef struct _iArrow iArrow; typedef struct _iImage iImage; typedef struct _Imagedisplay Imagedisplay; typedef struct _Managed Managed; typedef struct _Managedfile Managedfile; typedef struct _Managedgvalue Managedgvalue; typedef struct _Managedgobject Managedgobject; typedef struct _Managedstring Managedstring; typedef struct _Imageinfo Imageinfo; typedef struct _Imagepresent Imagepresent; typedef struct _Imagemodel Imagemodel; typedef struct _iRegion iRegion; typedef struct _iRegiongroup iRegiongroup; typedef struct _Link Link; typedef struct _LinkExpr LinkExpr; typedef struct _Model Model; typedef struct _iObject iObject; typedef struct _iContainer iContainer; typedef struct _Paintboxview Paintboxview; typedef struct _ParseConst ParseConst; typedef struct _ParseNode ParseNode; typedef struct _Program Program; typedef struct _String String; typedef struct _Number Number; typedef struct _Reduce Reduce; typedef struct _Regionview Regionview; typedef struct _Rhs Rhs; typedef struct _Rhsview Rhsview; typedef struct _Row Row; typedef struct _Rowview Rowview; typedef struct _Statusview Statusview; typedef struct _Plotstatus Plotstatus; typedef struct _Plot Plot; typedef struct _Plotwindow Plotwindow; typedef struct _Plotpresent Plotpresent; typedef struct _Plotmodel Plotmodel; typedef struct _Graphwindow Graphwindow; typedef struct _Subcolumn Subcolumn; typedef struct _Subcolumnview Subcolumnview; typedef struct _Symbol Symbol; typedef struct _Tool Tool; typedef struct _Toolkit Toolkit; typedef struct _Toolkitgroup Toolkitgroup; typedef struct _Toolkitgroupview Toolkitgroupview; typedef struct _Toolkitview Toolkitview; typedef struct _Toolview Toolview; typedef struct _Trace Trace; typedef struct _Preview Preview; typedef struct _Infobar Infobar; typedef struct _iError iError; typedef struct _Log Log; typedef struct _vObject vObject; typedef struct _View View; typedef struct _Workspace Workspace; typedef struct _Workspaceview Workspaceview; typedef struct _Workspaceroot Workspaceroot; typedef struct _Workspacegroup Workspacegroup; typedef struct _Workspacegroupview Workspacegroupview; typedef struct _Prefworkspaceview Prefworkspaceview; typedef struct _Prefcolumnview Prefcolumnview; typedef struct _iText iText; typedef struct _Expression Expression; typedef struct _Mainw Mainw; typedef struct _Toolviewitemgroup Toolviewitemgroup; typedef struct _Panechild Panechild; typedef struct _Toolkitbrowser Toolkitbrowser; typedef struct _Workspacedefs Workspacedefs; /* container map function typedefs. */ typedef void *(*row_map_fn)( Row *, void *, void *, void * ); typedef void *(*symbol_map_fn)( Symbol *, void *, void *, void * ); typedef void *(*column_map_fn)( Column *, void * ); typedef void *(*view_map_fn)( View *, void *, void * ); typedef void *(*rowview_map_fn)( Rowview *, void * ); typedef void *(*workspace_map_fn)( Workspace *, void * ); typedef void *(*toolkit_map_fn)( Toolkit *, void *, void * ); typedef void *(*tool_map_fn)( Tool *, void *, void * ); /* Util stuff. */ #include "util.h" #include "gtkutil.h" #include "path.h" #include "iobject.h" #include "icontainer.h" #include "iwindow.h" #include "idialog.h" #include "boxes.h" #include "popupbutton.h" #include "imageheader.h" #include "filesel.h" #include "managed.h" #include "managedfile.h" #include "managedgvalue.h" #include "managedgobject.h" #include "imageinfo.h" #include "imagedisplay.h" #include "colourdisplay.h" #include "imagemodel.h" #include "imagepresent.h" #include "floatwindow.h" #include "imageview.h" #include "tslider.h" #include "pane.h" #include "progress.h" /* Basic ip includes (order important). */ #include "tree.h" #include "heap.h" #include "managedstring.h" #include "class.h" #include "link.h" #include "expr.h" #include "model.h" #include "paintboxview.h" #include "conversion.h" #include "heapmodel.h" #include "classmodel.h" #include "filemodel.h" #include "symbol.h" #include "workspace.h" #include "workspaceroot.h" #include "workspacegroup.h" #include "toolkitgroup.h" #include "secret.h" #include "action.h" #include "reduce.h" #include "vobject.h" #include "vipsobject.h" #include "view.h" #include "graphicview.h" #include "spin.h" #include "row.h" #include "rowview.h" #include "subcolumn.h" #include "subcolumnview.h" #include "rhs.h" #include "rhsview.h" #include "workspaceview.h" #include "workspacegroupview.h" #include "toolkitgroupview.h" #include "column.h" #include "columnview.h" #include "toolkit.h" #include "tool.h" #include "toolkitview.h" #include "toolview.h" #include "watch.h" #include "value.h" #include "panechild.h" /* Per module includes, any order */ #include "workspacedefs.h" #include "toolkitbrowser.h" #include "defbrowser.h" #include "log.h" #include "error.h" #include "trace.h" #include "program.h" #include "conversionview.h" #include "statusview.h" #include "plotstatus.h" #include "mainw.h" #include "preview.h" #include "builtin.h" #include "compile.h" #include "dump.h" #include "main.h" #include "predicate.h" #include "slider.h" #include "clock.h" #include "pathname.h" #include "fontname.h" #include "group.h" #include "real.h" #include "vector.h" #include "colour.h" #include "number.h" #include "istring.h" #include "editview.h" #include "expression.h" #include "expressionview.h" #include "stringview.h" #include "numberview.h" #include "matrix.h" #include "matrixview.h" #include "plot.h" #ifdef HAVE_LIBGOFFICE #include "plotview.h" #endif /*HAVE_LIBGOFFICE*/ #include "plotmodel.h" #include "plotpresent.h" #include "plotwindow.h" #include "graphwindow.h" #include "option.h" #include "optionview.h" #include "iimage.h" #include "iregion.h" #include "iregiongroup.h" #include "iarrow.h" #include "valueview.h" #include "sliderview.h" #include "pathnameview.h" #include "fontnameview.h" #include "colourview.h" #include "iimageview.h" #include "iregionview.h" #include "iregiongroupview.h" #include "prefs.h" #include "prefworkspaceview.h" #include "prefcolumnview.h" #include "regionview.h" #include "itext.h" #include "itextview.h" #include "toggle.h" #include "toggleview.h" #include "call.h" #include "cache.h" #include "parser.h" #ifdef WITH_DMALLOC #include #endif /*WITH_DMALLOC*/ #endif /*IP_H*/ nip2-8.7.0/src/managedfile.c0000644000175000017500000000700113224651032012502 00000000000000/* a managed FILE* ... for lazy file read */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #include "ip.h" /* #define DEBUG */ static ManagedClass *parent_class = NULL; static void managedfile_dispose( GObject *gobject ) { Managedfile *managedfile = MANAGEDFILE( gobject ); #ifdef DEBUG printf( "managedfile_dispose: " ); iobject_print( IOBJECT( managedfile ) ); #endif /*DEBUG*/ IM_FREEF( ifile_close, managedfile->file ); G_OBJECT_CLASS( parent_class )->dispose( gobject ); } static void managedfile_info( iObject *iobject, VipsBuf *buf ) { Managedfile *managedfile = MANAGEDFILE( iobject ); vips_buf_appendf( buf, "managedfile->fp = %p\n", managedfile->file->fp ); vips_buf_appendf( buf, "managedfile->file->filename = %s\n", managedfile->file->fname ); vips_buf_appendf( buf, "managedfile->file->last_errno = %d\n", managedfile->file->last_errno ); IOBJECT_CLASS( parent_class )->info( iobject, buf ); } static void managedfile_class_init( ManagedfileClass *class ) { GObjectClass *gobject_class = G_OBJECT_CLASS( class ); iObjectClass *iobject_class = IOBJECT_CLASS( class ); parent_class = g_type_class_peek_parent( class ); gobject_class->dispose = managedfile_dispose; iobject_class->info = managedfile_info; } static void managedfile_init( Managedfile *managedfile ) { #ifdef DEBUG printf( "managedfile_init: %p\n", managedfile ); #endif /*DEBUG*/ managedfile->file = NULL; } GType managedfile_get_type( void ) { static GType type = 0; if( !type ) { static const GTypeInfo info = { sizeof( ManagedfileClass ), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) managedfile_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof( Managedfile ), 32, /* n_preallocs */ (GInstanceInitFunc) managedfile_init, }; type = g_type_register_static( TYPE_MANAGED, "Managedfile", &info, 0 ); } return( type ); } Managedfile * managedfile_new( Heap *heap, const char *filename ) { Managedfile *managedfile; iOpenFile *file; #ifdef DEBUG printf( "managedfile_new: %p: %s\n", managedfile, filename ); #endif /*DEBUG*/ if( !(file = ifile_open_read( "%s", filename )) ) return( NULL ); managedfile = g_object_new( TYPE_MANAGEDFILE, NULL ); managed_link_heap( MANAGED( managedfile ), heap ); managedfile->file = file; MANAGED( managedfile )->hash = g_str_hash( filename ); return( managedfile ); } int managedfile_getc( Managedfile *managedfile ) { int ch = ifile_getc( managedfile->file ); #ifdef DEBUG { char in[2]; char out[3]; in[0] = ch; in[1] = '\0'; my_strecpy( out, in, FALSE ); printf( "managedfile_getc: '%s' (%d)\n", out, ch ); } #endif /*DEBUG*/ return( ch ); } nip2-8.7.0/src/conversion.c0000644000175000017500000007577413224651032012461 00000000000000/* Manage display conversion parameters. */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #include "ip.h" /* Our signals. */ enum { SIG_AREA_CHANGED, /* Area of repaint image has changed */ SIG_IMAGEINFO_CHANGED, /* The imageinfo we hold has been replaced */ SIG_LAST }; static guint conversion_signals[SIG_LAST] = { 0 }; static ModelClass *parent_class = NULL; /* All active conversions. */ static GSList *conversion_all = NULL; static void * conversion_imageinfo_changed( Conversion *conv ) { #ifdef DEBUG g_print( "conversion_imageinfo_changed: " ); iobject_print( IOBJECT( conv ) ); #endif /*DEBUG*/ g_signal_emit( G_OBJECT( conv ), conversion_signals[SIG_IMAGEINFO_CHANGED], 0 ); return( NULL ); } static void conversion_area_changed( Conversion *conv, Rect *dirty ) { g_signal_emit( G_OBJECT( conv ), conversion_signals[SIG_AREA_CHANGED], 0, dirty ); } static void conversion_dispose( GObject *gobject ) { Conversion *conv; g_return_if_fail( gobject != NULL ); g_return_if_fail( IS_CONVERSION( gobject ) ); conv = CONVERSION( gobject ); #ifdef DEBUG g_print( "conversion_dispose: " ); iobject_print( IOBJECT( conv ) ); #endif /*DEBUG*/ FREESID( conv->changed_sid, conv->ii ); FREESID( conv->area_changed_sid, conv->ii ); G_OBJECT_CLASS( parent_class )->dispose( gobject ); } static void conversion_finalize( GObject *gobject ) { Conversion *conv; g_return_if_fail( gobject != NULL ); g_return_if_fail( IS_CONVERSION( gobject ) ); conv = CONVERSION( gobject ); #ifdef DEBUG g_print( "conversion_finalize: " ); iobject_print( IOBJECT( conv ) ); #endif /*DEBUG*/ conversion_all = g_slist_remove( conversion_all, conv ); IM_FREEF( im_region_free, conv->ireg ); IM_FREEF( im_region_free, conv->mreg ); IM_FREEF( im_region_free, conv->reg ); MANAGED_UNREF( conv->repaint_ii ); MANAGED_UNREF( conv->display_ii ); MANAGED_UNREF( conv->visual_ii ); MANAGED_UNREF( conv->ii ); G_OBJECT_CLASS( parent_class )->finalize( gobject ); } /* Make the visualisation image ... eg. we im_histplot histograms, and we * log scale fourier images. */ static IMAGE * conversion_make_visualise( Conversion *conv, IMAGE *in ) { IMAGE *out = im_open( "conversion_make_visualise", "p" ); int tconv = !(conv && conv->enabled && !conv->type); /* Histogram type ... plot the histogram. Keep this old hist display * method in case the goffice plotter is not available. */ if( tconv && in->Type == IM_TYPE_HISTOGRAM && (in->Xsize == 1 || in->Ysize == 1) ) { IMAGE *t[3]; if( in->Coding == IM_CODING_LABQ ) { IMAGE *t = im_open_local( out, "conv:1", "p" ); if( !t || im_LabQ2Lab( in, t ) ) { im_close( out ); return( NULL ); } in = t; } if( in->Coding == IM_CODING_RAD ) { IMAGE *t = im_open_local( out, "conv:1", "p" ); if( !t || im_rad2float( in, t ) ) { im_close( out ); return( NULL ); } in = t; } if( im_open_local_array( out, t, 3, "conv-1", "p" ) || im_histnorm( in, t[0] ) || im_histplot( t[0], t[1] ) ) { im_close( out ); return( NULL ); } /* Scale to a sensible size ... aim for a height of 256 * elements. */ if( in->Xsize == 1 && t[1]->Xsize > 256 ) { if( im_subsample( t[1], t[2], t[1]->Xsize / 256, 1 ) ) { im_close( out ); return( NULL ); } } else if( in->Ysize == 1 && t[1]->Ysize > 256 ) { if( im_subsample( t[1], t[2], 1, t[1]->Ysize / 256 ) ) { im_close( out ); return( NULL ); } } else t[2] = t[1]; in = t[2]; } /* IM_TYPE_FOURIER type ... pow/log scale, good for fourier * transforms. */ if( tconv && in->Type == IM_TYPE_FOURIER ) { IMAGE *t[2]; if( im_open_local_array( out, t, 2, "conv-1", "p" ) || im_abs( in, t[0] ) || im_scaleps( t[0], t[1] ) ) { im_close( out ); return( NULL ); } in = t[1]; } if( im_copy( in, out ) ) { im_close( out ); return( NULL ); } return( out ); } /* What we send from the notify callback to the main GUI thread. */ typedef struct _ConversionUpdate { Conversion *conv; IMAGE *im; Rect area; } ConversionUpdate; static gboolean conversion_render_idle_cb( gpointer data ) { ConversionUpdate *update = (ConversionUpdate *) data; Conversion *conv = update->conv; /* Must be a valid conversion, must be for the image that that * conversion is still using for display. */ if( g_slist_find( conversion_all, conv ) && imageinfo_get( FALSE, conv->display_ii ) == update->im ) { #ifdef DEBUG g_print( "conversion_update_dispatch: left = %d, top = %d, " "width = %d, height = %d\n", update->area.left, update->area.top, update->area.width, update->area.height ); #endif /*DEBUG*/ /* We need to invalid the main image too, since those * regions will have black in from the failed first calc. * * im_render() can't do this invalidate for us, * it needs to be done from the main loop. * * commented out, vips_sink_screen() now does this for us. * im_invalidate( conv->mask ); im_invalidate( imageinfo_get( FALSE, conv->display_ii ) ); */ conversion_area_changed( conv, &update->area ); } #ifdef DEBUG else g_print( "conversion_render_idle_cb: skipping dead update\n" ); #endif /*DEBUG*/ g_free( update ); return( FALSE ); } /* Here from the im_render() background thread. */ static void conversion_render_notify_cb( IMAGE *im, Rect *area, void *client ) { ConversionUpdate *update = g_new( ConversionUpdate, 1 ); /* Can't use CONVERSION() in this thread ... the GUI thread will check * this pointer for us when it reads from the queue. */ update->conv = (Conversion *) client; update->im = im; update->area = *area; g_idle_add( conversion_render_idle_cb, update ); } /* How many tiles should we ask for? A bit more than the number needed to * paint the screen. */ static int conversion_get_default_tiles( Conversion *conv ) { GdkScreen *screen = gdk_screen_get_default(); int width = gdk_screen_get_width( screen ) / conv->tile_size; int height = gdk_screen_get_height( screen ) / conv->tile_size; return( 2 * width * height ); } /* Resize to screen coordinates and cache it. */ static IMAGE * conversion_make_display( Conversion *conv, IMAGE *in, IMAGE **mask_out ) { IMAGE *out = im_open( "conversion_display:1", "p" ); if( !out ) return( NULL ); if( conv->mag < 0 ) { /* Ordinary image ... use im_subsample(). FIXME ... look for pyramid TIFFs here */ IMAGE *t = im_open_local( out, "conv:s", "p" ); /* Don't shrink by more than the image size (ie. to less than * 1 pixel). */ int xshrink = IM_MIN( -conv->mag, in->Xsize ); int yshrink = IM_MIN( -conv->mag, in->Ysize ); if( DISPLAY_THUMBNAIL_HQ ) { if( !t || im_shrink( in, t, xshrink, yshrink ) ) { im_close( out ); return( NULL ); } } else { if( !t || im_subsample( in, t, xshrink, yshrink ) ) { im_close( out ); return( NULL ); } } in = t; } /* Zoom, if necessary. */ if( conv->mag > 1 ) { IMAGE *t = im_open_local( out, "conv:z", "p" ); if( !t || im_zoom( in, t, conv->mag, conv->mag ) ) { im_close( out ); return( NULL ); } in = t; } /* Cache it. */ if( conv->synchronous ) { if( im_copy( in, out ) ) { im_close( out ); return( NULL ); } } else { IMAGE *mask = im_open_local( out, "conv:r", "p" ); if( im_render_priority( in, out, mask, conv->tile_size, conv->tile_size, conversion_get_default_tiles( conv ), conv->priority, conversion_render_notify_cb, conv ) ) { im_close( out ); return( NULL ); } if( mask_out ) *mask_out = mask; } return( out ); } /* Track during lintrauc. */ typedef struct { double a, b; IMAGE *in, *out; } LintraInfo; /* Define what we do for each band element type. Non-complex input, uchar * output. */ #define LOOP(IN) { \ IN *p = (IN *) in; \ PEL *q = (PEL *) out; \ \ for( x = 0; x < sz; x++ ) { \ double t; \ \ t = a * p[x] + b; \ \ if( t > 255 ) \ t = 255; \ else if( t < 0 ) \ t = 0; \ \ q[x] = t; \ } \ } /* Complex input, uchar output. */ #define LOOPCMPLX(IN) { \ IN *p = (IN *) in; \ PEL *q = (PEL *) out; \ \ for( x = 0; x < sz; x++ ) { \ double t; \ \ t = a * p[x << 1] + b; \ \ if( t > 255 ) \ t = 255; \ else if( t < 0 ) \ t = 0; \ \ q[x] = t; \ } \ } /* Lintra a buffer, 1 set of scale/offset. */ static int lintrauc_gen( PEL *in, PEL *out, int width, IMAGE *im, LintraInfo *inf ) { double a = inf->a; double b = inf->b; int sz = width * im->Bands; int x; /* Lintra all input types. */ switch( im->BandFmt ) { case IM_BANDFMT_UCHAR: LOOP( unsigned char ); break; case IM_BANDFMT_CHAR: LOOP( signed char ); break; case IM_BANDFMT_USHORT: LOOP( unsigned short ); break; case IM_BANDFMT_SHORT: LOOP( signed short ); break; case IM_BANDFMT_UINT: LOOP( unsigned int ); break; case IM_BANDFMT_INT: LOOP( signed int ); break; case IM_BANDFMT_FLOAT: LOOP( float ); break; case IM_BANDFMT_DOUBLE: LOOP( double ); break; case IM_BANDFMT_COMPLEX: LOOPCMPLX( float ); break; case IM_BANDFMT_DPCOMPLEX: LOOPCMPLX( double ); break; default: g_assert( 0 ); } return( 0 ); } /* im_lintra() that writes uchar (the VIPS one writes float/double). */ static int im_lintrauc( double a, IMAGE *in, double b, IMAGE *out ) { LintraInfo *inf; if( in->Coding != IM_CODING_NONE ) { im_error( "im_lintrauc", _( "not uncoded" ) ); return( -1 ); } if( im_cp_desc( out, in ) ) return( -1 ); out->Bbits = IM_BBITS_BYTE; out->BandFmt = IM_BANDFMT_UCHAR; if( !(inf = IM_NEW( out, LintraInfo )) ) return( -1 ); inf->a = a; inf->b = b; inf->in = in; inf->out = out; if( im_wrapone( in, out, (im_wrapone_fn) lintrauc_gen, in, inf ) ) return( -1 ); return( 0 ); } /* Turn any IMAGE into a 1/3 band IM_BANDFMT_UCHAR ready for gdk_rgb_*(). */ static IMAGE * conversion_make_repaint( Conversion *conv, IMAGE *in ) { IMAGE *out = im_open( "conversion_apply:1", "p" ); /* 7 is sRGB. this is all deprecated and unused now with vips-7.31 and later tag as unused to stop gcc complaints */ struct im_col_display *display __attribute__ ((unused)) = im_col_displays( 7 ); /* Do we do colorimetric type conversions? Look for * interpret-type-toggle. */ int tconv = !(conv && conv->enabled && !conv->type); if( !out ) return( NULL ); /* Special case: if this is a IM_CODING_LABQ and the display control * bar is turned off, we can go straight to RGB for speed. */ if( in->Coding == IM_CODING_LABQ && !(conv && conv->enabled) ) { IMAGE *t = im_open_local( out, "conv:1", "p" ); static void *table = NULL; /* Make sure fast LabQ2disp tables are built. */ if( !table ) table = im_LabQ2disp_build_table( NULL, display ); if( !t || im_LabQ2disp_table( in, t, table ) ) { im_close( out ); return( NULL ); } in = t; } /* Get the bands right. If we have >3, drop down to 3. If we have 2, * drop down to 1. */ if( in->Coding == IM_CODING_NONE ) { if( in->Bands == 2 ) { IMAGE *t = im_open_local( out, "conv:1", "p" ); if( !t || im_extract_band( in, t, 0 ) ) { im_close( out ); return( NULL ); } in = t; } else if( in->Bands > 3 ) { IMAGE *t = im_open_local( out, "conv:1", "p" ); if( !t || im_extract_bands( in, t, 0, 3 ) ) { im_close( out ); return( NULL ); } in = t; } } /* Interpret the Type field for colorimetric images. */ if( tconv && in->Bands == 3 && in->BandFmt == IM_BANDFMT_SHORT && in->Type == IM_TYPE_LABS ) { IMAGE *t = im_open_local( out, "conv:1", "p" ); if( !t || im_LabS2LabQ( in, t ) ) { im_close( out ); return( NULL ); } in = t; } if( in->Coding == IM_CODING_LABQ ) { IMAGE *t = im_open_local( out, "conv:1", "p" ); if( !t || im_LabQ2Lab( in, t ) ) { im_close( out ); return( NULL ); } in = t; } if( in->Coding == IM_CODING_RAD ) { IMAGE *t = im_open_local( out, "conv:1", "p" ); if( !t || im_rad2float( in, t ) ) { im_close( out ); return( NULL ); } in = t; } if( in->Coding != IM_CODING_NONE ) { im_close( out ); return( NULL ); } /* One of the colorimetric types? */ if( tconv && in->Bands == 3 && (in->Type == IM_TYPE_LCH || in->Type == IM_TYPE_YXY || in->Type == IM_TYPE_UCS || #if VIPS_MAJOR_VERSION > 7 || VIPS_MINOR_VERSION > 32 /* scRGB colourspace added in 7.32. */ in->Type == VIPS_INTERPRETATION_scRGB || #endif in->Type == IM_TYPE_LAB || in->Type == IM_TYPE_XYZ) ) { IMAGE *t[2]; /* We need to scale/offset before we go to 8 bit to work well * with HDR. */ if( conv && conv->enabled && (conv->scale != 1.0 || conv->offset != 0.0) ) { IMAGE *t = im_open_local( out, "conv:1", "p" ); if( !t || im_lintra( conv->scale, in, conv->offset, t ) ) { im_close( out ); return( NULL ); } in = t; } if( in->Type == IM_TYPE_LCH ) { if( im_open_local_array( out, t, 2, "conv-1", "p" ) || im_clip2fmt( in, t[0], IM_BANDFMT_FLOAT ) || im_LCh2Lab( t[0], t[1] ) ) { im_close( out ); return( NULL ); } in = t[1]; } #if VIPS_MAJOR_VERSION > 7 || VIPS_MINOR_VERSION > 32 if( in->Type == VIPS_INTERPRETATION_scRGB ) { VipsImage *x; if( vips_scRGB2sRGB( in, &x, NULL ) ) { im_close( out ); return( NULL ); } vips_object_local( out, x ); in = x; } #endif if( in->Type == IM_TYPE_YXY ) { if( im_open_local_array( out, t, 2, "conv-1", "p" ) || im_clip2fmt( in, t[0], IM_BANDFMT_FLOAT ) || im_Yxy2XYZ( t[0], t[1] ) ) { im_close( out ); return( NULL ); } in = t[1]; } if( in->Type == IM_TYPE_UCS ) { if( im_open_local_array( out, t, 2, "conv-1", "p" ) || im_clip2fmt( in, t[0], IM_BANDFMT_FLOAT ) || im_UCS2XYZ( t[0], t[1] ) ) { im_close( out ); return( NULL ); } in = t[1]; } if( in->Type == IM_TYPE_LAB ) { if( im_open_local_array( out, t, 2, "conv-1", "p" ) || im_clip2fmt( in, t[0], IM_BANDFMT_FLOAT ) || im_Lab2XYZ( t[0], t[1] ) ) { im_close( out ); return( NULL ); } in = t[1]; } if( in->Type == IM_TYPE_XYZ ) { if( im_open_local_array( out, t, 2, "conv-1", "p" ) || im_clip2fmt( in, t[0], IM_BANDFMT_FLOAT ) || im_XYZ2disp( t[0], t[1], display ) ) { im_close( out ); return( NULL ); } in = t[1]; } } else { /* Not colorimetric. We can use a special ->uchar lintra for * scale/offset. Don't scale/offset fourier or histogram * images, they are presented above. */ if( conv && conv->enabled && (!tconv || in->Type != IM_TYPE_FOURIER) && (!tconv || in->Type != IM_TYPE_HISTOGRAM) && (conv->scale != 1.0 || conv->offset != 0.0) ) { IMAGE *t = im_open_local( out, "conv:1", "p" ); if( !t || im_lintrauc( conv->scale, in, conv->offset, t ) ) { im_close( out ); return( NULL ); } in = t; } } if( tconv && (in->Type == IM_TYPE_RGB16 || in->Type == IM_TYPE_GREY16) ) { IMAGE *t[1]; if( im_open_local_array( out, t, 1, "conv-1", "p" ) ) { im_close( out ); return( NULL ); } /* im_msb() only works for the int formats. */ if( vips_bandfmt_isint( in->BandFmt ) ) { if( im_msb( in, t[0] ) ) { im_close( out ); return( NULL ); } } else { if( im_lintrauc( 1 / 256.0, in, 0.0, t[0] ) ) { im_close( out ); return( NULL ); } } in = t[0]; } /* Clip to uchar if not there already. */ if( in->BandFmt != IM_BANDFMT_UCHAR ) { IMAGE *t = im_open_local( out, "conv:1", "p" ); if( !t || im_clip2fmt( in, t, IM_BANDFMT_UCHAR ) ) { im_close( out ); return( NULL ); } in = t; } /* Falsecolour. Just use the green channel if we're RGB. */ if( conv && conv->enabled && conv->falsecolour ) { IMAGE *t1 = im_open_local( out, "conv:1", "p" ); if( !t1 ) { im_close( out ); return( NULL ); } if( in->Bands == 3 ) { IMAGE *t2 = im_open_local( out, "conv:1", "p" ); if( im_extract_band( in, t2, 1 ) ) { im_close( out ); return( NULL ); } in = t2; } if( im_falsecolour( in, t1 ) ) { im_close( out ); return( NULL ); } in = t1; } if( im_copy( in, out ) ) { im_close( out ); return( NULL ); } return( out ); } /* Controls in the display conversion bar, or the display image have changed. * Remake the repaint image. */ static void conversion_rebuild_repaint( Conversion *conv ) { IMAGE *display_im; IMAGE *new_repaint_im; Imageinfo *new_repaint_ii; REGION *new_ireg; #ifdef DEBUG g_print( "conversion_remake_repaint: %p\n", conv ); #endif /*DEBUG*/ if( conv->display_ii ) display_im = imageinfo_get( FALSE, conv->display_ii ); else display_im = NULL; /* Keep gcc quiet about annoying possible-used-before-set warnings. */ new_repaint_ii = NULL; new_ireg = NULL; /* Make the new stuff first. */ if( display_im ) { if( !(new_repaint_im = conversion_make_repaint( conv, display_im )) ) return; if( !(new_repaint_ii = imageinfo_new( main_imageinfogroup, NULL, new_repaint_im, NULL )) ) { im_close( new_repaint_im ); return; } managed_sub_add( MANAGED( new_repaint_ii ), MANAGED( conv->display_ii ) ); if( !(new_ireg = im_region_create( new_repaint_im )) ) return; } IM_FREEF( im_region_free, conv->ireg ); MANAGED_UNREF( conv->repaint_ii ); if( display_im ) { conv->repaint_ii = new_repaint_ii; MANAGED_REF( conv->repaint_ii ); conv->ireg = new_ireg; } } /* The magnification or the visual image have changed ... remake the * display image. */ static void conversion_rebuild_display( Conversion *conv ) { IMAGE *visual_im; IMAGE *new_display_im; Imageinfo *new_display_ii; IMAGE *mask; REGION *new_mreg; #ifdef DEBUG g_print( "conversion_remake_display: %p\n", conv ); #endif /*DEBUG*/ if( conv->visual_ii ) visual_im = imageinfo_get( FALSE, conv->visual_ii ); else visual_im = NULL; /* Keep gcc quiet about annoying possible-used-before-set warnings. */ new_display_ii = NULL; new_display_im = NULL; new_mreg = NULL; mask = NULL; /* Make the new stuff first. */ if( visual_im ) { if( !(new_display_im = conversion_make_display( conv, visual_im, &mask )) ) return; if( !(new_display_ii = imageinfo_new( main_imageinfogroup, NULL, new_display_im, NULL )) ) { im_close( new_display_im ); return; } managed_sub_add( MANAGED( new_display_ii ), MANAGED( conv->visual_ii ) ); if( mask && !(new_mreg = im_region_create( mask )) ) return; } IM_FREEF( im_region_free, conv->mreg ); MANAGED_UNREF( conv->display_ii ); if( visual_im ) { conv->display_ii = new_display_ii; conv->mask = mask; conv->mreg = new_mreg; MANAGED_REF( conv->display_ii ); conv->canvas.width = new_display_im->Xsize; conv->canvas.height = new_display_im->Ysize; } /* Certainly need a new repaint image. */ conversion_rebuild_repaint( conv ); } /* The underlying ii has changed. Remake the visualisation image. */ static void conversion_rebuild_visual( Conversion *conv ) { IMAGE *im = imageinfo_get( FALSE, conv->ii ); IMAGE *new_visual_im; Imageinfo *new_visual_ii; REGION *new_reg; #ifdef DEBUG g_print( "conversion_rebuild_visual: %p\n", conv ); #endif /*DEBUG*/ /* Keep gcc quiet about annoying possible-used-before-set warnings. */ new_visual_im = NULL; new_visual_ii = NULL; new_reg = NULL; /* Make new visualization image. */ if( im ) { if( !(new_visual_im = conversion_make_visualise( conv, im )) ) return; if( !(new_visual_ii = imageinfo_new( main_imageinfogroup, NULL, new_visual_im, NULL )) ) { im_close( new_visual_im ); return; } managed_sub_add( MANAGED( new_visual_ii ), MANAGED( conv->ii ) ); if( !(new_reg = im_region_create( im )) ) return; } /* Junk old stuff. */ IM_FREEF( im_region_free, conv->reg ); MANAGED_UNREF( conv->visual_ii ); /* Install new stuff. */ if( im ) { conv->visual_ii = new_visual_ii; MANAGED_REF( conv->visual_ii ); conv->image.width = new_visual_im->Xsize; conv->image.height = new_visual_im->Ysize; conv->reg = new_reg; } /* Certainly need a new display. */ conversion_rebuild_display( conv ); } /* Something has changed ... check it out. */ static void conversion_changed( iObject *iobject ) { Conversion *conv = CONVERSION( iobject ); gboolean rebuild_display = FALSE; gboolean rebuild_repaint = FALSE; #ifdef DEBUG g_print( "conversion_changed: %p\n", conv ); #endif /*DEBUG*/ /* Need to remake the display image if mag has changed. */ if( conv->mag != conv->display_mag ) { rebuild_display = TRUE; conv->display_mag = conv->mag; } /* Need to rebuild repaint if display control bar has changed. */ if( conv->changed ) { conv->changed = FALSE; rebuild_repaint = TRUE; } if( rebuild_display ) conversion_rebuild_display( conv ); else if( rebuild_repaint ) conversion_rebuild_repaint( conv ); IOBJECT_CLASS( parent_class )->changed( iobject ); } static void conversion_class_init( ConversionClass *class ) { GObjectClass *gobject_class = (GObjectClass *) class; iObjectClass *iobject_class = (iObjectClass *) class; parent_class = g_type_class_peek_parent( class ); gobject_class->dispose = conversion_dispose; gobject_class->finalize = conversion_finalize; iobject_class->changed = conversion_changed; /* Create signals. */ conversion_signals[SIG_AREA_CHANGED] = g_signal_new( "area_changed", G_OBJECT_CLASS_TYPE( gobject_class ), G_SIGNAL_RUN_FIRST, G_STRUCT_OFFSET( ConversionClass, area_changed ), NULL, NULL, g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1, G_TYPE_POINTER ); conversion_signals[SIG_IMAGEINFO_CHANGED] = g_signal_new( "imageinfo_changed", G_OBJECT_CLASS_TYPE( gobject_class ), G_SIGNAL_RUN_FIRST, G_STRUCT_OFFSET( ConversionClass, imageinfo_changed ), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0 ); } static void conversion_init( Conversion *conv ) { static const Rect emptyrect = { 0, 0, 0, 0 }; #ifdef DEBUG g_print( "conversion_init: " ); iobject_print( IOBJECT( conv ) ); #endif /*DEBUG*/ conv->ii = NULL; conv->changed_sid = 0; conv->area_changed_sid = 0; conv->reg = NULL; conv->synchronous = FALSE; conv->priority = 0; conv->visual_ii = NULL; conv->display_ii = NULL; conv->display_mag = 99999999; conv->repaint_ii = NULL; conv->ireg = NULL; conv->mreg = NULL; /* Default tile size ... OK for image display, too big for * thumbnails. */ conv->tile_size = 64; conv->underlay = emptyrect; conv->image = emptyrect; conv->canvas = emptyrect; conv->visible = emptyrect; conv->mag = 1; conv->changed = FALSE; conv->enabled = FALSE; conv->scale = 1.0; conv->offset = 0.0; conv->falsecolour = FALSE; conv->type = TRUE; conversion_all = g_slist_prepend( conversion_all, conv ); } GType conversion_get_type( void ) { static GType type = 0; if( !type ) { static const GTypeInfo info = { sizeof( ConversionClass ), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) conversion_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof( Conversion ), 32, /* n_preallocs */ (GInstanceInitFunc) conversion_init, }; type = g_type_register_static( TYPE_MODEL, "Conversion", &info, 0 ); } return( type ); } static void conversion_link( Conversion *conv, Imageinfo *ii ) { iobject_set( IOBJECT( conv ), "display_conversion", NULL ); conversion_set_image( conv, ii ); } Conversion * conversion_new( Imageinfo *ii ) { Conversion *conv; conv = CONVERSION( g_object_new( TYPE_CONVERSION, NULL ) ); conversion_link( conv, ii ); return( conv ); } /* Imageinfo has changed signal. The ii is the same, but the image it * represents may have changed from "p" to "r" or whatever. Assume size/etc. * stay the same. */ static void conversion_ii_changed_cb( Imageinfo *ii, Conversion *conv ) { conversion_rebuild_visual( conv ); iobject_changed( IOBJECT( conv ) ); } /* Something like a paint action on the ii. */ static void conversion_ii_area_changed_cb( Imageinfo *imageinfo, Rect *dirty, Conversion *conv ) { Rect repaint; conversion_im_to_disp_rect( conv, dirty, &repaint ); conversion_area_changed( conv, &repaint ); } /* Install a new image. */ void conversion_set_image( Conversion *conv, Imageinfo *ii ) { /* Pointer compare is safe, since we hold a ref to conv->ii and it * can't have been freed. So we can't have a new ii at the same * address as the old ii. */ if( conv->ii != ii ) { IMAGE *im; if( ii ) im = imageinfo_get( FALSE, ii ); else im = NULL; /* Junk old stuff. */ FREESID( conv->changed_sid, conv->ii ); FREESID( conv->area_changed_sid, conv->ii ); MANAGED_UNREF( conv->ii ); conv->image.width = -1; conv->image.height = -1; /* Install new stuff. */ if( ii ) { conv->ii = ii; MANAGED_REF( conv->ii ); conv->changed_sid = g_signal_connect( G_OBJECT( ii ), "changed", G_CALLBACK( conversion_ii_changed_cb ), conv ); conv->area_changed_sid = g_signal_connect( G_OBJECT( ii ), "area_changed", G_CALLBACK( conversion_ii_area_changed_cb ), conv ); } if( im ) { conv->underlay.width = im->Xsize; conv->underlay.height = im->Ysize; } /* Make new visualization image. */ conversion_rebuild_visual( conv ); /* Tell everyone about our new ii. */ conversion_imageinfo_changed( conv ); } iobject_changed( IOBJECT( conv ) ); } double conversion_dmag( int mag ) { g_assert( mag != 0 ); if( mag > 0 ) return( mag ); else return( 1.0 / (-mag) ); } /* Zoom in and zoom out scale factors ... a little tricky with our funny -ve * representation for subsample. */ int conversion_double( int mag ) { g_assert( mag != -1 ); if( mag == -3 ) return( -2 ); else if( mag == -2 ) return( 1 ); else if( mag > 0 ) return( mag * 2 ); else return( mag / 2 ); } int conversion_halve( int mag ) { g_assert( mag != -1 ); if( mag == 1 ) return( -2 ); else if( mag > 1 ) return( mag / 2 ); else return( mag * 2 ); } /* Convert display to image coordinates and back. */ void conversion_disp_to_im( Conversion *conv, int dx, int dy, int *ix, int *iy ) { double fmag = conversion_dmag( conv->mag ); *ix = (int) (dx / fmag); *iy = (int) (dy / fmag); } void conversion_im_to_disp( Conversion *conv, int ix, int iy, int *dx, int *dy ) { double fmag = conversion_dmag( conv->mag ); *dx = (int) (ix * fmag); *dy = (int) (iy * fmag); } /* Same for rects. */ void conversion_disp_to_im_rect( Conversion *conv, Rect *dr, Rect *ir ) { double fmag = conversion_dmag( conv->mag ); int brx, bry; Rect out; out.left = floor( dr->left / fmag ); out.top = floor( dr->top / fmag ); brx = ceil( IM_RECT_RIGHT( dr ) / fmag ); bry = ceil( IM_RECT_BOTTOM( dr ) / fmag ); out.width = brx - out.left; out.height = bry - out.top; *ir = out; } void conversion_im_to_disp_rect( Conversion *conv, Rect *ir, Rect *dr ) { double fmag = conversion_dmag( conv->mag ); int brx, bry; Rect out; out.left = floor( ir->left * fmag ); out.top = floor( ir->top * fmag ); brx = ceil( IM_RECT_RIGHT( ir ) * fmag ); bry = ceil( IM_RECT_BOTTOM( ir ) * fmag ); out.width = brx - out.left; out.height = bry - out.top; *dr = out; } void conversion_set_mag( Conversion *conv, int mag ) { int x, y; /* Mag 0 means scale image to fit window. Use visible hint in * conversion to pick the mag. */ if( mag == 0 ) { float xfac; float yfac; float fac; /* Need to have image and visible set. */ if( conv->visible.width <= 0 || conv->image.width <= 0 || !conv->ii || !conv->ii->im ) return; xfac = (float) conv->visible.width / conv->image.width; yfac = (float) conv->visible.height / conv->image.height; fac = IM_MIN( xfac, yfac ); if( fac >= 1 ) mag = (int) fac; else /* 0.999 means we don't round up on an exact fit. FIXME ... yuk */ mag = -((int) (0.99999999 + 1.0/fac)); #ifdef DEBUG g_print( "conversion_set_mag: shrink to fit:\n" ); g_print( " visible %dx%d, image %dx%d\n", conv->visible.width, conv->visible.height, conv->image.width, conv->image.height ); g_print( " picked mag of %d\n", mag ); #endif /*DEBUG*/ } /* Check for this-mag-will-cause-integer-overflow. Should flag an * error, but we just bail out instead. */ if( mag > 0 && ((double) conv->image.width * mag > (double) INT_MAX / 2 || (double) conv->image.height * mag > (double) INT_MAX / 2) ) return; /* Will this mag result in width/height of <1? If it will, pick a * mag that most nearly gives us width/height 1. */ conv->mag = mag; conversion_im_to_disp( conv, conv->image.width, conv->image.height, &x, &y ); if( x <= 0 || y <= 0 ) { conv->mag = IM_MAX( -conv->image.width, -conv->image.height ); if( conv->mag == -1 ) conv->mag = 1; } if( conv->mag != conv->display_mag ) iobject_changed( IOBJECT( conv ) ); } void conversion_set_synchronous( Conversion *conv, gboolean synchronous ) { if( conv->synchronous != synchronous ) { #ifdef DEBUG printf( "conversion_set_synchronous: %d", synchronous ); iobject_print( IOBJECT( conv ) ); #endif /*DEBUG*/ conv->synchronous = synchronous; if( conv->ii ) iobject_changed( IOBJECT( conv->ii ) ); } } void conversion_set_params( Conversion *conv, gboolean enabled, double scale, double offset, gboolean falsecolour, gboolean type ) { gboolean changed = FALSE; if( conv->enabled != enabled ) changed = TRUE; if( enabled ) if( conv->scale != scale || conv->offset != offset || conv->falsecolour != falsecolour || conv->type != type ) changed = TRUE; if( changed ) { conv->enabled = enabled; conv->scale = scale; conv->offset = offset; conv->falsecolour = falsecolour; conv->type = type; conv->changed = TRUE; iobject_changed( IOBJECT( conv ) ); } } nip2-8.7.0/src/model.c0000644000175000017500000005135713224651032011363 00000000000000/* abstract base class for things which form the model half of a model/view * pair */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #include "ip.h" /* Stuff from bison ... needed as we call the lexer directly to rewrite * expressions. */ #include "parse.h" /* Our signals. */ enum { SIG_SCROLLTO, /* Views should try to make themselves visible */ SIG_LAYOUT, /* Views should lay out their children */ SIG_RESET, /* Reset edit mode in views */ SIG_FRONT, /* Bring views to front */ SIG_DISPLAY, /* Display on/off */ SIG_LAST }; static iContainerClass *parent_class = NULL; static guint model_signals[SIG_LAST] = { 0 }; /* Base model ... built at startup. */ static Model *model_base = NULL; /* All the model classes which can be built from XML. */ static GSList *model_registered_loadable = NULL; /* The loadstate the lexer gets its rename stuff from. */ ModelLoadState *model_loadstate = NULL; /* Rename list functions. */ static void * model_rename_destroy( ModelRename *rename ) { IM_FREE( rename->old_name ); IM_FREE( rename->new_name ); IM_FREE( rename ); return( NULL ); } static ModelRename * model_rename_new( const char *old_name, const char *new_name ) { ModelRename *rename; if( !(rename = INEW( NULL, ModelRename )) ) return( NULL ); rename->old_name = im_strdup( NULL, old_name ); rename->new_name = im_strdup( NULL, new_name ); if( !rename->old_name || !rename->new_name ) { model_rename_destroy( rename ); return( NULL ); } return( rename ); } gboolean model_loadstate_rename_new( ModelLoadState *state, const char *old_name, const char *new_name ) { /* Make a rename, even if old_name == new_name, since we want to have * new_name on the taken list. */ ModelRename *rename; if( !(rename = model_rename_new( old_name, new_name )) ) return( FALSE ); state->renames = g_slist_prepend( state->renames, rename ); return( TRUE ); } static void * model_loadstate_taken_sub( ModelRename *rename, const char *name ) { if( strcmp( rename->new_name, name ) == 0 ) return( rename ); return( NULL ); } /* Is something already being renamed to @name. */ gboolean model_loadstate_taken( ModelLoadState *state, const char *name ) { return( slist_map( state->renames, (SListMapFn) model_loadstate_taken_sub, (char *) name ) != NULL ); } gboolean model_loadstate_column_rename_new( ModelLoadState *state, const char *old_name, const char *new_name ) { if( strcmp( old_name, new_name ) != 0 ) { ModelRename *rename; if( !(rename = model_rename_new( old_name, new_name )) ) return( FALSE ); state->column_renames = g_slist_prepend( state->column_renames, rename ); } return( TRUE ); } /* Is something already being renamed to @name. */ gboolean model_loadstate_column_taken( ModelLoadState *state, const char *name ) { return( !!slist_map( state->column_renames, (SListMapFn) model_loadstate_taken_sub, (char *) name ) ); } void model_loadstate_destroy( ModelLoadState *state ) { /* We are probably registered as the xml error handler ... unregister! */ xmlSetGenericErrorFunc( NULL, NULL ); IM_FREE( state->filename ); IM_FREE( state->filename_user ); IM_FREEF( xmlFreeDoc, state->xdoc ); slist_map( state->renames, (SListMapFn) model_rename_destroy, NULL ); slist_map( state->column_renames, (SListMapFn) model_rename_destroy, NULL ); g_slist_free( state->renames ); if( state->old_dir ) { path_rewrite_add( state->old_dir, NULL, FALSE ); IM_FREE( state->old_dir ); } IM_FREE( state ); } static void model_loadstate_error( ModelLoadState *state, const char *fmt, ... ) { va_list ap; va_start( ap, fmt ); (void) vips_buf_vappendf( &state->error_log, fmt, ap ); va_end( ap ); } static void model_loadstate_error_get( ModelLoadState *state ) { char *utf8; utf8 = f2utf8( vips_buf_all( &state->error_log ) ); error_top( _( "Load failed." ) ); error_sub( _( "Unable to load from file \"%s\". Error log is:\n%s" ), state->filename, utf8 ); g_free( utf8 ); } ModelLoadState * model_loadstate_new( const char *filename, const char *filename_user ) { ModelLoadState *state; if( !(state = INEW( NULL, ModelLoadState )) ) return( NULL ); state->xdoc = NULL; state->renames = NULL; state->column_renames = NULL; state->major = MAJOR_VERSION; state->minor = MINOR_VERSION; state->micro = MICRO_VERSION; state->rewrite_path = FALSE; state->old_dir = FALSE; state->filename = im_strdup( NULL, filename ); if( filename_user ) state->filename_user = im_strdup( NULL, filename_user ); else state->filename_user = im_strdup( NULL, filename ); if( !state->filename || !state->filename_user ) { model_loadstate_destroy( state ); return( NULL ); } vips_buf_init_static( &state->error_log, state->error_log_buffer, MAX_STRSIZE ); xmlSetGenericErrorFunc( state, (xmlGenericErrorFunc) model_loadstate_error ); if( !(state->xdoc = (xmlDoc *) callv_string_filename( (callv_string_fn) xmlParseFile, state->filename, NULL, NULL, NULL )) ) { model_loadstate_error_get( state ); model_loadstate_destroy( state ); return( NULL ); } return( state ); } ModelLoadState * model_loadstate_new_openfile( iOpenFile *of ) { ModelLoadState *state; char load_buffer[MAX_STRSIZE]; if( !(state = INEW( NULL, ModelLoadState )) ) return( NULL ); state->renames = NULL; state->xdoc = NULL; if( !(state->filename = im_strdup( NULL, of->fname )) ) { model_loadstate_destroy( state ); return( NULL ); } vips_buf_init_static( &state->error_log, state->error_log_buffer, MAX_STRSIZE ); xmlSetGenericErrorFunc( state, (xmlGenericErrorFunc) model_loadstate_error ); if( !ifile_read_buffer( of, load_buffer, MAX_STRSIZE ) ) { model_loadstate_destroy( state ); return( NULL ); } if( !(state->xdoc = xmlParseMemory( load_buffer, MAX_STRSIZE )) ) { model_loadstate_error_get( state ); model_loadstate_destroy( state ); return( NULL ); } return( state ); } /* If old_name is on the global rewrite list, rewrite it! Called from the * lexer. */ char * model_loadstate_rewrite_name( char *name ) { ModelLoadState *state = model_loadstate; GSList *i; if( !state || !state->renames ) return( NULL ); for( i = state->renames; i; i = i->next ) { ModelRename *rename = (ModelRename *) (i->data); if( strcmp( name, rename->old_name ) == 0 ) return( rename->new_name ); } return( NULL ); } /* Use the lexer to rewrite an expression, swapping all symbols on the rewrite * list. */ void model_loadstate_rewrite( ModelLoadState *state, char *old_rhs, char *new_rhs ) { int yychar; extern int yylex( void ); model_loadstate = state; attach_input_string( old_rhs ); if( setjmp( parse_error_point ) ) { /* Here for yyerror in lex. Just ignore errors --- the parser * will spot them later anyway. */ model_loadstate = NULL; return; } /* Lex and rewrite. */ state->rewrite_path = FALSE; while( (yychar = yylex()) > 0 ) { /* If we see an Image_file or Matrix_file token, rewrite the * following token if it's a string constant. */ state->rewrite_path = FALSE; if( yychar == TK_IDENT && strcmp( yylval.yy_name, "Image_file" ) == 0 ) state->rewrite_path = TRUE; if( yychar == TK_IDENT && strcmp( yylval.yy_name, "Matrix_file" ) == 0 ) state->rewrite_path = TRUE; free_lex( yychar ); } model_loadstate = NULL; /* Take copy of lexed and rewritten stuff. */ im_strncpy( new_rhs, vips_buf_all( &lex_text ), MAX_STRSIZE ); } View * model_view_new( Model *model, View *parent ) { ModelClass *model_class = MODEL_GET_CLASS( model ); View *view; if( !model_class->view_new ) return( NULL ); view = model_class->view_new( model, parent ); view_link( view, model, parent ); return( view ); } /* Register a model subclass as loadable ... what we allow when we load an * XML node's children. */ void model_register_loadable( ModelClass *model_class ) { model_registered_loadable = g_slist_prepend( model_registered_loadable, model_class ); } void model_scrollto( Model *model, ModelScrollPosition position ) { g_assert( IS_MODEL( model ) ); g_signal_emit( G_OBJECT( model ), model_signals[SIG_SCROLLTO], 0, position ); } void model_layout( Model *model ) { g_assert( IS_MODEL( model ) ); g_signal_emit( G_OBJECT( model ), model_signals[SIG_LAYOUT], 0 ); } void model_front( Model *model ) { g_assert( IS_MODEL( model ) ); g_signal_emit( G_OBJECT( model ), model_signals[SIG_FRONT], 0 ); } void model_display( Model *model, gboolean display ) { if( model ) { g_assert( IS_MODEL( model ) ); g_signal_emit( G_OBJECT( model ), model_signals[SIG_DISPLAY], 0, display ); } } void * model_reset( Model *model ) { g_assert( IS_MODEL( model ) ); g_signal_emit( G_OBJECT( model ), model_signals[SIG_RESET], 0 ); return( NULL ); } void * model_edit( GtkWidget *parent, Model *model ) { ModelClass *model_class = MODEL_GET_CLASS( model ); if( model_class->edit ) model_class->edit( parent, model ); else { error_top( _( "Not implemented." ) ); error_sub( _( "_%s() not implemented for class \"%s\"." ), "edit", G_OBJECT_CLASS_NAME( model_class ) ); } return( NULL ); } void * model_header( GtkWidget *parent, Model *model ) { ModelClass *model_class = MODEL_GET_CLASS( model ); if( model_class->header ) model_class->header( parent, model ); else { error_top( _( "Not implemented." ) ); error_sub( _( "_%s() not implemented for class \"%s\"." ), "header", G_OBJECT_CLASS_NAME( model_class ) ); } return( NULL ); } void * model_save( Model *model, xmlNode *xnode ) { ModelClass *model_class = MODEL_GET_CLASS( model ); if( model_save_test( model ) ) { if( model_class->save && !model_class->save( model, xnode ) ) return( model ); } return( NULL ); } gboolean model_save_test( Model *model ) { ModelClass *model_class = MODEL_GET_CLASS( model ); if( model_class->save_test ) return( model_class->save_test( model ) ); return( TRUE ); } void * model_save_text( Model *model, iOpenFile *of ) { ModelClass *model_class = MODEL_GET_CLASS( model ); if( model_class->save_text && !model_class->save_text( model, of ) ) return( model ); return( NULL ); } void * model_load( Model *model, ModelLoadState *state, Model *parent, xmlNode *xnode ) { ModelClass *model_class = MODEL_GET_CLASS( model ); if( model_class->load ) { if( !model_class->load( model, state, parent, xnode ) ) return( model ); } else { error_top( _( "Not implemented." ) ); error_sub( _( "_%s() not implemented for class \"%s\"." ), "load", G_OBJECT_CLASS_NAME( model_class ) ); } return( NULL ); } void * model_load_text( Model *model, Model *parent, iOpenFile *of ) { ModelClass *model_class = MODEL_GET_CLASS( model ); if( model_class->load_text ) { if( !model_class->load_text( model, parent, of ) ) return( model ); } else { error_top( "Not implemented." ); error_sub( _( "_%s() not implemented for class \"%s\"." ), "load_text", G_OBJECT_CLASS_NAME( model_class ) ); } return( NULL ); } void * model_empty( Model *model ) { ModelClass *model_class = MODEL_GET_CLASS( model ); if( model_class->empty ) model_class->empty( model ); return( NULL ); } static void model_real_scrollto( Model *model, ModelScrollPosition position ) { } static void model_real_front( Model *model ) { } static void model_real_display( Model *model, gboolean display ) { if( display != model->display ) { model->display = display; iobject_changed( IOBJECT( model ) ); } } static xmlNode * model_real_save( Model *model, xmlNode *xnode ) { const char *tname = G_OBJECT_TYPE_NAME( model ); xmlNode *xthis; if( !(xthis = xmlNewChild( xnode, NULL, (xmlChar *) tname, NULL )) ) { error_top( _( "XML library error." ) ); error_sub( _( "model_save: xmlNewChild() failed" ) ); return( NULL ); } if( icontainer_map( ICONTAINER( model ), (icontainer_map_fn) model_save, xthis, NULL ) ) return( NULL ); if( model->window_width != -1 ) { if( !set_iprop( xthis, "window_x", model->window_x ) || !set_iprop( xthis, "window_y", model->window_y ) || !set_iprop( xthis, "window_width", model->window_width ) || !set_iprop( xthis, "window_height", model->window_height ) ) return( NULL ); } return( xthis ); } static void * model_new_xml_sub( ModelClass *model_class, ModelLoadState *state, Model *parent, xmlNode *xnode ) { GtkType type = GTK_CLASS_TYPE( model_class ); const char *tname = gtk_type_name( type ); if( strcasecmp( (char *) xnode->name, tname ) == 0 ) { Model *model = MODEL( g_object_new( type, NULL ) ); if( model_load( model, state, parent, xnode ) ) { g_object_unref( model ); return( model_class ); } return( NULL ); } return( NULL ); } gboolean model_new_xml( ModelLoadState *state, Model *parent, xmlNode *xnode ) { /* FIXME ... slow! some sort of hash? time this at some point */ if( slist_map3( model_registered_loadable, (SListMap3Fn) model_new_xml_sub, state, parent, xnode ) ) return( FALSE ); return( TRUE ); } static gboolean model_real_load( Model *model, ModelLoadState *state, Model *parent, xmlNode *xnode ) { const char *tname = G_OBJECT_TYPE_NAME( model ); xmlNode *i; /* Should just be a sanity check. */ if( strcasecmp( (char *) xnode->name, tname ) != 0 ) { error_top( _( "XML load error." ) ); error_sub( _( "Can't load node of type \"%s\" into " "object of type \"%s\"" ), xnode->name, tname ); return( FALSE ); } (void) get_iprop( xnode, "window_x", &model->window_x ); (void) get_iprop( xnode, "window_y", &model->window_y ); (void) get_iprop( xnode, "window_width", &model->window_width ); (void) get_iprop( xnode, "window_height", &model->window_height ); if( !ICONTAINER( model )->parent ) icontainer_child_add( ICONTAINER( parent ), ICONTAINER( model ), -1 ); for( i = xnode->children; i; i = i->next ) if( !model_new_xml( state, MODEL( model ), i ) ) return( FALSE ); #ifdef DEBUG printf( "model_real_load: finished loading %s (name = %s)\n", tname, NN( IOBJECT( model )->name ) ); #endif /*DEBUG*/ return( TRUE ); } static void model_real_empty( Model *model ) { icontainer_map( ICONTAINER( model ), (icontainer_map_fn) icontainer_child_remove, NULL, NULL ); } static void model_class_init( ModelClass *class ) { iObjectClass *object_class = IOBJECT_CLASS( class ); parent_class = g_type_class_peek_parent( class ); class->view_new = NULL; class->edit = NULL; class->scrollto = model_real_scrollto; class->layout = NULL; class->front = model_real_front; class->display = model_real_display; class->reset = NULL; class->save = model_real_save; class->save_test = NULL; class->save_text = NULL; class->load = model_real_load; class->load_text = NULL; class->empty = model_real_empty; /* Create signals. */ model_signals[SIG_SCROLLTO] = g_signal_new( "scrollto", G_OBJECT_CLASS_TYPE( object_class ), G_SIGNAL_RUN_FIRST, G_STRUCT_OFFSET( ModelClass, scrollto ), NULL, NULL, g_cclosure_marshal_VOID__INT, G_TYPE_NONE, 1, G_TYPE_INT ); model_signals[SIG_LAYOUT] = g_signal_new( "layout", G_OBJECT_CLASS_TYPE( object_class ), G_SIGNAL_RUN_FIRST, G_STRUCT_OFFSET( ModelClass, layout ), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0 ); model_signals[SIG_FRONT] = g_signal_new( "front", G_OBJECT_CLASS_TYPE( object_class ), G_SIGNAL_RUN_FIRST, G_STRUCT_OFFSET( ModelClass, front ), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0 ); model_signals[SIG_RESET] = g_signal_new( "reset", G_OBJECT_CLASS_TYPE( object_class ), G_SIGNAL_RUN_FIRST, G_STRUCT_OFFSET( ModelClass, reset ), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0 ); model_signals[SIG_DISPLAY] = g_signal_new( "display", G_OBJECT_CLASS_TYPE( object_class ), G_SIGNAL_RUN_FIRST, G_STRUCT_OFFSET( ModelClass, display ), NULL, NULL, g_cclosure_marshal_VOID__BOOLEAN, G_TYPE_NONE, 1, G_TYPE_BOOLEAN ); } static void model_init( Model *model ) { model->display = TRUE; /* Magic: -1 means none of these saved settings are valid. It'd be * nice to do something better, but we'd break old workspaces. */ model->window_x = 0; model->window_y = 0; model->window_width = -1; model->window_height = 0; } GType model_get_type( void ) { static GType model_type = 0; if( !model_type ) { static const GTypeInfo info = { sizeof( ModelClass ), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) model_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof( Model ), 32, /* n_preallocs */ (GInstanceInitFunc) model_init, }; model_type = g_type_register_static( TYPE_ICONTAINER, "Model", &info, 0 ); } return( model_type ); } void model_base_init( void ) { model_base = MODEL( g_object_new( TYPE_MODEL, NULL ) ); /* We have to init some of our other classes to get them registered * with the class loader. */ (void) g_type_class_ref( TYPE_CLOCK ); (void) g_type_class_ref( TYPE_COLOUR ); (void) g_type_class_ref( TYPE_EXPRESSION ); (void) g_type_class_ref( TYPE_FONTNAME ); (void) g_type_class_ref( TYPE_GROUP ); (void) g_type_class_ref( TYPE_IARROW ); (void) g_type_class_ref( TYPE_IIMAGE ); (void) g_type_class_ref( TYPE_IREGION ); (void) g_type_class_ref( TYPE_ITEXT ); (void) g_type_class_ref( TYPE_MATRIX ); (void) g_type_class_ref( TYPE_NUMBER ); (void) g_type_class_ref( TYPE_OPTION ); (void) g_type_class_ref( TYPE_PATHNAME ); (void) g_type_class_ref( TYPE_PLOT ); (void) g_type_class_ref( TYPE_REAL ); (void) g_type_class_ref( TYPE_SLIDER ); (void) g_type_class_ref( TYPE_STRING ); (void) g_type_class_ref( TYPE_TOGGLE ); (void) g_type_class_ref( TYPE_VECTOR ); (void) g_type_class_ref( TYPE_RHS ); (void) g_type_class_ref( TYPE_ROW ); (void) g_type_class_ref( TYPE_SUBCOLUMN ); (void) g_type_class_ref( TYPE_WORKSPACE ); (void) g_type_class_ref( TYPE_COLUMN ); } typedef struct { iDialog *idlg; /* The yesno we run */ Model *model; /* The model we watch */ guint destroy_sid; /* sid for the destroy */ iWindowFn done_cb; /* Call this at the end */ } ModelCheckDestroy; /* OK to destroy. */ static void model_check_destroy_sub( iWindow *iwnd, void *client, iWindowNotifyFn nfn, void *sys ) { ModelCheckDestroy *mcd = (ModelCheckDestroy *) client; mcd->idlg = NULL; IDESTROY( mcd->model ); symbol_recalculate_all(); mcd->done_cb( iwnd, NULL, nfn, sys ); } /* The model we are watching has been killed, maybe by us. */ static void model_check_destroy_destroy_cb( Model *model, ModelCheckDestroy *mcd ) { g_assert( IS_MODEL( model ) ); g_assert( IS_MODEL( mcd->model ) ); g_assert( !mcd->idlg || IS_IDIALOG( mcd->idlg ) ); mcd->model = NULL; mcd->destroy_sid = 0; if( mcd->idlg ) { iWindow *iwnd = IWINDOW( mcd->idlg ); mcd->idlg = NULL; iwindow_kill( iwnd ); } } /* Our dialog is done. */ static void model_check_destroy_finished( void *client, iWindowResult result ) { ModelCheckDestroy *mcd = (ModelCheckDestroy *) client; FREESID( mcd->destroy_sid, mcd->model ); IM_FREE( mcd ); } void model_check_destroy( GtkWidget *parent, Model *model, iWindowFn done_cb ) { char txt[30]; VipsBuf buf = VIPS_BUF_STATIC( txt ); const char *name; ModelCheckDestroy *mcd = INEW( NULL, ModelCheckDestroy ); mcd->idlg = NULL; mcd->model = model; mcd->done_cb = done_cb ? done_cb : iwindow_true_cb; if( IS_SYMBOL( model ) ) { symbol_qualified_name( SYMBOL( model ), &buf ); name = vips_buf_all( &buf ); } else name = IOBJECT( model )->name; mcd->idlg = box_yesno( parent, model_check_destroy_sub, iwindow_true_cb, mcd, model_check_destroy_finished, mcd, GTK_STOCK_DELETE, _( "Delete?" ), _( "Are you sure you want to delete %s \"%s\"?" ), IOBJECT_GET_CLASS_NAME( model ), name ); /* In case someone else kills this model before we do. */ mcd->destroy_sid = g_signal_connect( model, "destroy", G_CALLBACK( model_check_destroy_destroy_cb ), mcd ); } /* Useful for icontainer_map_all() ... trigger all heapmodel_clear_edited() * methods. */ void * model_clear_edited( Model *model ) { void *result; if( IS_HEAPMODEL( model ) && (result = heapmodel_clear_edited( HEAPMODEL( model ) )) ) return( result ); return( NULL ); } nip2-8.7.0/src/imageview.c0000644000175000017500000006375113224651032012241 00000000000000/* display an image in a window ... watching an iImage model. */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ /* Define to trace button press events. #define EVENT */ #include "ip.h" static FloatwindowClass *parent_class = NULL; /* All the magnification menus we have. */ typedef struct _ImageviewMagmenu { const char *name; int mag; } ImageviewMagmenu; static const ImageviewMagmenu imageview_mags[] = { { "Zoom6Mode", -16 }, { "Zoom12Mode", -8 }, { "Zoom25Mode", -4 }, { "Zoom50Mode", -2 }, { "Zoom100Mode", 1 }, { "Zoom200Mode", 2 }, { "Zoom400Mode", 4 }, { "Zoom800Mode", 8 }, { "Zoom1600Mode", 16 } }; static void imageview_destroy( GtkObject *object ) { Imageview *iv; g_return_if_fail( object != NULL ); g_return_if_fail( IS_IMAGEVIEW( object ) ); iv = IMAGEVIEW( object ); #ifdef DEBUG printf( "imageview_destroy\n" ); #endif /*DEBUG*/ /* My instance destroy stuff. */ UNREF( iv->imagemodel ); GTK_OBJECT_CLASS( parent_class )->destroy( object ); } static void imageview_class_init( ImageviewClass *class ) { GtkObjectClass *object_class = (GtkObjectClass *) class; parent_class = g_type_class_peek_parent( class ); object_class->destroy = imageview_destroy; /* Create signals. */ /* Init methods. */ } static void imageview_init( Imageview *iv ) { iv->imagemodel = NULL; } GtkType imageview_get_type( void ) { static GtkType type = 0; if( !type ) { static const GtkTypeInfo info = { "Imageview", sizeof( Imageview ), sizeof( ImageviewClass ), (GtkClassInitFunc) imageview_class_init, (GtkObjectInitFunc) imageview_init, /* reserved_1 */ NULL, /* reserved_2 */ NULL, (GtkClassInitFunc) NULL, }; type = gtk_type_unique( TYPE_FLOATWINDOW, &info ); } return( type ); } static void imageview_refresh_title( Imageview *iv ) { Imagemodel *imagemodel = iv->imagemodel; iImage *iimage = imagemodel->iimage; Row *row = HEAPMODEL( iimage )->row; Workspace *ws = row_get_workspace( row ); /* Can come here during ws destroy. */ if( ws ) { Conversion *conv = imagemodel->conv; Imageinfo *ii = iimage->value.ii; char txt[512]; VipsBuf buf = VIPS_BUF_STATIC( txt ); row_qualified_name_relative( ws->sym, row, &buf ); if( ii && imageinfo_is_from_file( ii ) ) vips_buf_appendf( &buf, " - %s", IOBJECT( ii )->name ); vips_buf_appendf( &buf, " - %.0f%%", 100.0 * conversion_dmag( conv->mag ) ); iwindow_set_title( IWINDOW( iv ), "%s", vips_buf_all( &buf ) ); } } /* The model has changed ... update our menus and titlebar. */ static void imageview_imagemodel_changed_cb( Imagemodel *imagemodel, Imageview *iv ) { iWindow *iwnd = IWINDOW( iv ); Conversion *conv = imagemodel->conv; GtkAction *action; int i; action = gtk_action_group_get_action( iwnd->action_group, "Status" ); gtk_toggle_action_set_active( GTK_TOGGLE_ACTION( action ), imagemodel->show_status ); action = gtk_action_group_get_action( iwnd->action_group, "Control" ); gtk_toggle_action_set_active( GTK_TOGGLE_ACTION( action ), imagemodel->show_convert ); action = gtk_action_group_get_action( iwnd->action_group, "Paint" ); gtk_toggle_action_set_active( GTK_TOGGLE_ACTION( action ), imagemodel->show_paintbox ); action = gtk_action_group_get_action( iwnd->action_group, "Rulers" ); gtk_toggle_action_set_active( GTK_TOGGLE_ACTION( action ), imagemodel->show_rulers ); for( i = 0; i < IM_NUMBER( imageview_mags ); i++ ) if( conv->mag == imageview_mags[i].mag ) { action = gtk_action_group_get_action( iwnd->action_group, imageview_mags[i].name ); gtk_toggle_action_set_active( GTK_TOGGLE_ACTION( action ), TRUE ); break; } imageview_refresh_title( iv ); } /* Region class names indexed by iRegionType. */ static const char *imageview_region_name[] = { CLASS_MARK, CLASS_HGUIDE, CLASS_VGUIDE, CLASS_ARROW, CLASS_REGION, CLASS_AREA }; /* Look up a iRegionType from an action name. */ static iRegionType imageview_get_region_type( GtkAction *action ) { /* Action names indexed by iRegionType. */ static const char *action_names[] = { "NewMark", "NewHGuide", "NewVGuide", "NewArrow", "NewRegion" }; const char *name = gtk_action_get_name( action ); int i; for( i = 0; i < IM_NUMBER( action_names ); i++ ) if( strcmp( name, action_names[i] ) == 0 ) return( (iRegionType) i ); g_assert( FALSE ); /* Keep gcc happy. */ return( FALSE ); } static void imageview_new_arrow2_action_cb( GtkAction *action, Imageview *iv ) { iRegionType rt = imageview_get_region_type( action ); Imagemodel *imagemodel = iv->imagemodel; iImage *iimage = imagemodel->iimage; Row *row = HEAPMODEL( iimage )->row; Workspace *ws = row_get_workspace( row ); Conversion *conv = imagemodel->conv; int dx = imagemodel->visible.left + imagemodel->visible.width / 2; int dy = imagemodel->visible.top + imagemodel->visible.height / 2; char txt[MAX_STRSIZE]; VipsBuf buf = VIPS_BUF_STATIC( txt ); Symbol *sym; int ix, iy; conversion_disp_to_im( conv, dx, dy, &ix, &iy ); vips_buf_appendf( &buf, "%s ", imageview_region_name[rt] ); row_qualified_name_relative( ws->sym, row, &buf ); switch( rt ) { case IREGION_MARK: vips_buf_appendf( &buf, " (%d) (%d)", ix, iy ); break; case IREGION_HGUIDE: vips_buf_appendf( &buf, " (%d)", iy ); break; case IREGION_VGUIDE: vips_buf_appendf( &buf, " (%d)", ix ); break; default: g_assert( FALSE ); } if( !(sym = workspace_add_def_recalc( ws, vips_buf_all( &buf ) )) ) { iwindow_alert( GTK_WIDGET( iv ), GTK_MESSAGE_ERROR ); return; } workspace_deselect_all( ws ); } static void imageview_new_arrow4_action_cb( GtkAction *action, Imageview *iv ) { iRegionType rt = imageview_get_region_type( action ); Imagemodel *imagemodel = iv->imagemodel; iImage *iimage = imagemodel->iimage; Row *row = HEAPMODEL( iimage )->row; Workspace *ws = row_get_workspace( row ); Conversion *conv = imagemodel->conv; Rect dr, ir; char txt[MAX_STRSIZE]; VipsBuf buf = VIPS_BUF_STATIC( txt ); Symbol *sym; Column *col; dr.left = imagemodel->visible.left + imagemodel->visible.width / 4; dr.top = imagemodel->visible.top + imagemodel->visible.height / 4; dr.width = imagemodel->visible.width / 2; dr.height = imagemodel->visible.height / 2; conversion_disp_to_im_rect( conv, &dr, &ir ); vips_buf_appendf( &buf, "%s ", imageview_region_name[rt] ); row_qualified_name_relative( ws->sym, row, &buf ); vips_buf_appendf( &buf, " (%d) (%d) %d %d", ir.left, ir.top, ir.width, ir.height ); if( !(sym = workspace_add_def_recalc( ws, vips_buf_all( &buf ) )) ) { iwindow_alert( GTK_WIDGET( iv ), GTK_MESSAGE_ERROR ); return; } col = sym->expr->row->top_col; column_scrollto( col, MODEL_SCROLL_BOTTOM ); } static void imageview_replace_action_cb( GtkAction *action, Imageview *iv ) { Imagemodel *imagemodel = iv->imagemodel; iImage *iimage = imagemodel->iimage; classmodel_graphic_replace( CLASSMODEL( iimage ), GTK_WIDGET( iv ) ); } static void imageview_save_action_cb( GtkAction *action, Imageview *iv ) { Imagemodel *imagemodel = iv->imagemodel; iImage *iimage = imagemodel->iimage; classmodel_graphic_save( CLASSMODEL( iimage ), GTK_WIDGET( iv ) ); } static void imageview_recalc_action_cb( GtkAction *action, Imageview *iv ) { Imagemodel *imagemodel = iv->imagemodel; iImage *iimage = imagemodel->iimage; Row *row = HEAPMODEL( iimage )->row; workspace_deselect_all( row->ws ); row_select( row ); if( !workspace_selected_recalc( row->ws ) ) iwindow_alert( GTK_WIDGET( iv ), GTK_MESSAGE_ERROR ); workspace_deselect_all( row->ws ); } static void imageview_header_action_cb( GtkAction *action, Imageview *iv ) { Imagemodel *imagemodel = iv->imagemodel; iImage *iimage = imagemodel->iimage; iimage_header( GTK_WIDGET( iv ), MODEL( iimage ) ); } static void imageview_zoom_in_action_cb( GtkAction *action, Imageview *iv ) { Imagemodel *imagemodel = iv->imagemodel; Conversion *conv = imagemodel->conv; conversion_set_mag( conv, conversion_double( conv->mag ) ); } static void imageview_zoom_out_action_cb( GtkAction *action, Imageview *iv ) { Imagemodel *imagemodel = iv->imagemodel; Conversion *conv = imagemodel->conv; conversion_set_mag( conv, conversion_halve( conv->mag ) ); } static void imageview_zoom_100_action_cb( GtkAction *action, Imageview *iv ) { if( iv->ip ) imagepresent_zoom_to( iv->ip, 1 ); } static void imageview_zoom_fit_action_cb( GtkAction *action, Imageview *iv ) { imagepresent_zoom_to( iv->ip, 0 ); } static void imageview_show_status_action_cb( GtkToggleAction *action, Imageview *iv ) { imagemodel_set_status( iv->imagemodel, gtk_toggle_action_get_active( action ) ); } static void imageview_show_convert_action_cb( GtkToggleAction *action, Imageview *iv ) { imagemodel_set_convert( iv->imagemodel, gtk_toggle_action_get_active( action ) ); } static void imageview_show_paintbox_action_cb( GtkToggleAction *action, Imageview *iv ) { imagemodel_set_paintbox( iv->imagemodel, gtk_toggle_action_get_active( action ) ); } static void imageview_show_rulers_action_cb( GtkToggleAction *action, Imageview *iv ) { imagemodel_set_rulers( iv->imagemodel, gtk_toggle_action_get_active( action ) ); } static void imageview_mode_action_cb( GtkRadioAction *action, GtkRadioAction *current, Imageview *iv ) { ImagemodelState state = (ImagemodelState) gtk_radio_action_get_current_value( action ); imagemodel_set_state( iv->imagemodel, state, GTK_WIDGET( iv ) ); } static void imageview_mag_action_cb( GtkRadioAction *action, GtkRadioAction *current, Imageview *iv ) { if( iv->ip ) imagepresent_zoom_to( iv->ip, gtk_radio_action_get_current_value( action ) ); } /* Our actions. */ static GtkActionEntry imageview_actions[] = { /* Menu items. */ { "ViewToolbarMenu", NULL, "_Toolbar" }, { "ViewModeMenu", NULL, "M_ode" }, { "ViewZoomMenu", NULL, "_Zoom" }, /* Actions. */ { "NewMark", NULL, N_( "_Mark" ), NULL, N_( "Create a new mark" ), G_CALLBACK( imageview_new_arrow2_action_cb ) }, { "NewHGuide", NULL, N_( "_Horizontal Guide" ), NULL, N_( "Create a new horizontal guide" ), G_CALLBACK( imageview_new_arrow2_action_cb ) }, { "NewVGuide", NULL, N_( "_Vertical Guide" ), NULL, N_( "Create a new vertical guide" ), G_CALLBACK( imageview_new_arrow2_action_cb ) }, { "NewArrow", NULL, N_( "_Arrow" ), NULL, N_( "Create a new arrow" ), G_CALLBACK( imageview_new_arrow4_action_cb ) }, { "NewRegion", NULL, N_( "_Region" ), NULL, N_( "Create a new region" ), G_CALLBACK( imageview_new_arrow4_action_cb ) }, { "Replace", NULL, N_( "Replace Image" ), NULL, N_( "Replace image from file" ), G_CALLBACK( imageview_replace_action_cb ) }, { "SaveAs", GTK_STOCK_SAVE_AS, N_( "Save Image As" ), NULL, N_( "Save image to file" ), G_CALLBACK( imageview_save_action_cb ) }, { "Recalculate", NULL, N_( "Recalculate" ), "C", N_( "Recalculate image" ), G_CALLBACK( imageview_recalc_action_cb ) }, { "Header", NULL, N_( "_Header" ), NULL, N_( "View image header" ), G_CALLBACK( imageview_header_action_cb ) }, { "ZoomIn", GTK_STOCK_ZOOM_IN, N_( "Zoom _In" ), "plus", N_( "Zoom in on mouse cursor" ), G_CALLBACK( imageview_zoom_in_action_cb ) }, { "ZoomOut", GTK_STOCK_ZOOM_OUT, N_( "Zoom _Out" ), "minus", N_( "Zoom out" ), G_CALLBACK( imageview_zoom_out_action_cb ) }, { "Zoom100", GTK_STOCK_ZOOM_100, N_( "Zoom _100%" ), "equal", N_( "Zoom to 100%" ), G_CALLBACK( imageview_zoom_100_action_cb ) }, { "ZoomFit", GTK_STOCK_ZOOM_FIT, N_( "Zoom to _Fit" ), NULL, N_( "Zoom to fit image to window" ), G_CALLBACK( imageview_zoom_fit_action_cb ) } }; static GtkToggleActionEntry imageview_toggle_actions[] = { { "Status", NULL, N_( "_Status" ), NULL, N_( "Show status bar" ), G_CALLBACK( imageview_show_status_action_cb ), TRUE }, { "Control", NULL, N_( "_Display Control" ), NULL, N_( "Show display control bar" ), G_CALLBACK( imageview_show_convert_action_cb ), TRUE }, { "Paint", NULL, N_( "_Paint" ), NULL, N_( "Show paint bar" ), G_CALLBACK( imageview_show_paintbox_action_cb ), FALSE }, { "Rulers", NULL, N_( "_Rulers" ), NULL, N_( "Show rulers" ), G_CALLBACK( imageview_show_rulers_action_cb ), FALSE } }; static GtkRadioActionEntry imageview_mode_radio_actions[] = { { "SelectMode", NULL, N_( "_Select" ), NULL, N_( "Select and modify selections" ), IMAGEMODEL_SELECT }, { "PanMode", NULL, N_( "_Pan" ), NULL, N_( "Pan image" ), IMAGEMODEL_PAN }, { "ZoomInMode", NULL, N_( "Zoom _In" ), NULL, N_( "Zoom in on mouse cursor" ), IMAGEMODEL_MAGIN }, { "ZoomOutMode", NULL, N_( "Zoom _Out" ), NULL, N_( "Zoom out" ), IMAGEMODEL_MAGOUT } }; static GtkRadioActionEntry imageview_zoom_radio_actions[] = { { "Zoom6Mode", NULL, N_( "6%" ), NULL, N_( "Zoom to 6%" ), -16 }, { "Zoom12Mode", NULL, N_( "12%" ), NULL, N_( "Zoom to 12%" ), -8 }, { "Zoom25Mode", NULL, N_( "25%" ), NULL, N_( "Zoom to 25%" ), -4 }, { "Zoom50Mode", NULL, N_( "50%" ), NULL, N_( "Zoom to 50%" ), -2 }, { "Zoom100Mode", NULL, N_( "100%" ), NULL, N_( "Zoom to 100%" ), 1 }, { "Zoom200Mode", NULL, N_( "200%" ), NULL, N_( "Zoom to 200%" ), 2 }, { "Zoom400Mode", NULL, N_( "400%" ), NULL, N_( "Zoom to 400%" ), 4 }, { "Zoom800Mode", NULL, N_( "800%" ), NULL, N_( "Zoom to 800%" ), 8 }, { "Zoom1600Mode", NULL, N_( "1600%" ), NULL, N_( "Zoom to 1600%" ), 16 } }; static const char *imageview_menubar_ui_description = "" " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " ""; static gint imageview_event( GtkWidget *widget, GdkEvent *event, Imageview *iv ) { gboolean handled = FALSE; #ifdef EVENT if( event->type == GDK_BUTTON_PRESS ) printf( "imageview_event: GDK_BUTTON_PRESS\n" ); #endif /*EVENT*/ switch( event->type ) { case GDK_MOTION_NOTIFY: { Imagemodel *imagemodel = iv->imagemodel; Conversion *conv = imagemodel->conv; int ix, iy; conversion_disp_to_im( conv, event->button.x, event->button.y, &ix, &iy ); statusview_mouse( iv->sv, ix, iy ); } break; case GDK_BUTTON_PRESS: switch( event->button.button ) { case 3: { iWindow *iwnd = IWINDOW( iv ); GtkWidget *popup; popup = gtk_ui_manager_get_widget( iwnd->ui_manager, "/ImageviewPopup" ); gtk_menu_popup( GTK_MENU( popup ), NULL, NULL, (GtkMenuPositionFunc) NULL, NULL, 3, event->button.time ); handled = TRUE; } break; default: break; } break; default: break; } return( handled ); } static gboolean imageview_filedrop( Imageview *iv, const char *file ) { gboolean result; if( (result = iimage_replace( iv->imagemodel->iimage, file )) ) symbol_recalculate_all(); return( result ); } static void imageview_build( Imageview *iv, GtkWidget *vbox, iImage *iimage ) { iWindow *iwnd = IWINDOW( iv ); GError *error; GtkWidget *mbar; GtkWidget *frame; GList *focus_chain; /* All the model parts for our set of views. */ iv->imagemodel = imagemodel_new( iimage ); g_object_ref( G_OBJECT( iv->imagemodel ) ); iobject_sink( IOBJECT( iv->imagemodel ) ); iv->imagemodel_changed_sid = g_signal_connect( G_OBJECT( iv->imagemodel ), "changed", G_CALLBACK( imageview_imagemodel_changed_cb ), iv ); /* Make main menu bar */ gtk_action_group_add_actions( iwnd->action_group, imageview_actions, G_N_ELEMENTS( imageview_actions ), GTK_WINDOW( iv ) ); gtk_action_group_add_toggle_actions( iwnd->action_group, imageview_toggle_actions, G_N_ELEMENTS( imageview_toggle_actions ), GTK_WINDOW( iv ) ); gtk_action_group_add_radio_actions( iwnd->action_group, imageview_mode_radio_actions, G_N_ELEMENTS( imageview_mode_radio_actions ), IMAGEMODEL_SELECT, G_CALLBACK( imageview_mode_action_cb ), GTK_WINDOW( iv ) ); gtk_action_group_add_radio_actions( iwnd->action_group, imageview_zoom_radio_actions, G_N_ELEMENTS( imageview_zoom_radio_actions ), 1, G_CALLBACK( imageview_mag_action_cb ), GTK_WINDOW( iv ) ); error = NULL; if( !gtk_ui_manager_add_ui_from_string( iwnd->ui_manager, imageview_menubar_ui_description, -1, &error ) ) { g_message( "building menus failed: %s", error->message ); g_error_free( error ); exit( EXIT_FAILURE ); } mbar = gtk_ui_manager_get_widget( iwnd->ui_manager, "/ImageviewMenubar" ); gtk_box_pack_start( GTK_BOX( vbox ), mbar, FALSE, FALSE, 0 ); gtk_widget_show( mbar ); /* This will set to NULL if we don't have infobar support. */ if( (IWINDOW( iv )->infobar = infobar_new()) ) gtk_box_pack_start( GTK_BOX( vbox ), GTK_WIDGET( IWINDOW( iv )->infobar ), FALSE, FALSE, 0 ); /* Status bar. */ iv->sv = statusview_new( iv->imagemodel ); gtk_box_pack_start( GTK_BOX( vbox ), GTK_WIDGET( iv->sv ), FALSE, FALSE, 0 ); /* Conversion bar. */ iv->cv = conversionview_new( iv->imagemodel ); gtk_box_pack_start( GTK_BOX( vbox ), GTK_WIDGET( iv->cv ), FALSE, FALSE, 0 ); /* Paintbox bar. */ iv->pbv = paintboxview_new( iv->imagemodel ); gtk_box_pack_start( GTK_BOX( vbox ), GTK_WIDGET( iv->pbv ), FALSE, FALSE, 0 ); /* Image area. */ frame = gtk_frame_new( NULL ); gtk_frame_set_shadow_type( GTK_FRAME( frame ), GTK_SHADOW_OUT ); gtk_widget_show( frame ); gtk_box_pack_start( GTK_BOX( vbox ), GTK_WIDGET( frame ), TRUE, TRUE, 0 ); iv->ip = imagepresent_new( iv->imagemodel ); gtk_container_add( GTK_CONTAINER( frame ), GTK_WIDGET( iv->ip ) ); gtk_widget_show( GTK_WIDGET( iv->ip ) ); gtk_signal_connect_after( GTK_OBJECT( iv->ip->id ), "event", GTK_SIGNAL_FUNC( imageview_event ), iv ); /* Position and size to restore? */ if( MODEL( iimage )->window_width != -1 ) { /* Floatwindow will set pos/size. */ iv->imagemodel->show_status = iimage->show_status; iv->imagemodel->show_paintbox = iimage->show_paintbox; iv->imagemodel->show_convert = iimage->show_convert; iv->imagemodel->show_rulers = iimage->show_rulers; iv->imagemodel->scale = iimage->scale; iv->imagemodel->offset = iimage->offset; iv->imagemodel->falsecolour = iimage->falsecolour; iv->imagemodel->type = iimage->type; /* Our caller must call imagepresent_set_mag_pos() after * _show(). Not accurate if we set it here. */ } else { int w, h; /* Set initial size. This is really hard to do right :-( These * magic numbers will break with different themes. FIXME ... maybe realize the window but don't map it, calculate border size, then set default size and map? yuk! the magic numbers here are hard to derive, there are many, many widgets piled up together to make this window last set correctly for clearlooks */ w = IM_MIN( IMAGE_WINDOW_WIDTH, iv->imagemodel->conv->image.width + 14 ); h = IM_MIN( IMAGE_WINDOW_HEIGHT, iv->imagemodel->conv->image.height + 39 ); gtk_window_set_default_size( GTK_WINDOW( iv ), w, h ); conversion_set_mag( iv->imagemodel->conv, 1 ); } /* Set as file drop destination */ filedrop_register( GTK_WIDGET( iv ), (FiledropFunc) imageview_filedrop, iv ); /* Override the focus_chain ... we want the imagedisplay first. */ focus_chain = NULL; focus_chain = g_list_append( focus_chain, iv->ip ); focus_chain = g_list_append( focus_chain, iv->cv ); focus_chain = g_list_append( focus_chain, iv->pbv ); gtk_container_set_focus_chain( GTK_CONTAINER( vbox ), focus_chain ); g_list_free( focus_chain ); gtk_widget_grab_focus( GTK_WIDGET( iv->ip->id ) ); } static void * imageview_add_region( Classmodel *classmodel, Imageview *iv ) { iRegionInstance *instance; if( MODEL( classmodel )->display && (instance = classmodel_get_instance( classmodel )) ) { Regionview *regionview = regionview_new( classmodel, &instance->area, iv->ip ); PElement *root = &HEAPMODEL( classmodel )->row->expr->root; /* Look at the class we are drawing, set the display type. */ regionview_set_type( regionview, root ); } return( NULL ); } static void imageview_popdown( iWindow *iwnd, void *client, iWindowNotifyFn nfn, void *sys ) { Imageview *iv = IMAGEVIEW( iwnd ); Imagemodel *imagemodel = iv->imagemodel; iImage *iimage = imagemodel->iimage; Conversion *conv = imagemodel->conv; /* We have to note position/size in popdown rather than destroy, since * the widgets have to all still be extant. */ /* Save the centre of the window in image cods. */ conversion_disp_to_im( conv, imagemodel->visible.left + imagemodel->visible.width / 2, imagemodel->visible.top + imagemodel->visible.height / 2, &iimage->image_left, &iimage->image_top ); iimage->image_mag = conv->mag; iimage->show_status = imagemodel->show_status; iimage->show_paintbox = imagemodel->show_paintbox; iimage->show_rulers = imagemodel->show_rulers; /* Signal changed on iimage if we save the convert settings. This will * make the thumbnail update. */ if( iimage->show_convert != imagemodel->show_convert || iimage->scale != imagemodel->scale || iimage->offset != imagemodel->offset || iimage->falsecolour != imagemodel->falsecolour || iimage->type != imagemodel->type ) { iimage->show_convert = imagemodel->show_convert; iimage->scale = imagemodel->scale; iimage->offset = imagemodel->offset; iimage->falsecolour = imagemodel->falsecolour; iimage->type = imagemodel->type; iobject_changed( IOBJECT( iimage ) ); } nfn( sys, IWINDOW_YES ); } static void imageview_link( Imageview *iv, iImage *iimage, GtkWidget *parent ) { iwindow_set_build( IWINDOW( iv ), (iWindowBuildFn) imageview_build, iimage, NULL, NULL ); iwindow_set_popdown( IWINDOW( iv ), imageview_popdown, NULL ); iwindow_set_parent( IWINDOW( iv ), parent ); floatwindow_link( FLOATWINDOW( iv ), MODEL( iimage ) ); iwindow_build( IWINDOW( iv ) ); slist_map( iimage->classmodels, (SListMapFn) imageview_add_region, iv ); /* Initial "changed" on the model to get all views to init. */ iobject_changed( IOBJECT( iv->imagemodel ) ); } Imageview * imageview_new( iImage *iimage, GtkWidget *parent ) { Imageview *iv = gtk_type_new( TYPE_IMAGEVIEW ); imageview_link( iv, iimage, parent ); /* This is odd ... we wouldn't normally _show() the widget in _new(), * but restoring the scroll position doesn't work unless the window is * visible. We have to show here. */ gtk_widget_show( GTK_WIDGET( iv ) ); if( MODEL( iimage )->window_width != -1 ) imagepresent_set_mag_pos( iv->ip, iimage->image_mag, iimage->image_left, iimage->image_top ); return( iv ); } /* Make an imageview, and try to make area (image cods) visible. width/height * can be -ve */ Imageview * imageview_new_area( iImage *iimage, Rect *area, GtkWidget *parent ) { Imageview *iv = imageview_new( iimage, parent ); Imagemodel *imagemodel = iv->imagemodel; Conversion *conv = imagemodel->conv; int shrink_x, shrink_y, shrink; /* Calculate a shrink factor which should make all the region * visible ... don't zoom. */ shrink_x = (abs( area->width ) + conv->canvas.width) / conv->canvas.width; shrink_y = (abs( area->height ) + conv->canvas.height) / conv->canvas.height; shrink = -IM_MAX( 1, IM_MAX( shrink_x, shrink_y ) ); if( shrink == -1 ) shrink = 1; imagepresent_set_mag_pos( iv->ip, shrink, area->left + area->width / 2, area->top + area->height / 2 ); return( iv ); } nip2-8.7.0/src/managedgobject.c0000644000175000017500000000602113224651032013201 00000000000000/* a managed gobject */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #include "ip.h" /* #define DEBUG */ static ManagedClass *parent_class = NULL; static void managedgobject_dispose( GObject *gobject ) { Managedgobject *managedgobject = MANAGEDGOBJECT( gobject ); #ifdef DEBUG printf( "managedgobject_dispose: " ); iobject_print( IOBJECT( managedgobject ) ); #endif /*DEBUG*/ IM_FREEF( g_object_unref, managedgobject->object ); G_OBJECT_CLASS( parent_class )->dispose( gobject ); } static void managedgobject_info( iObject *iobject, VipsBuf *buf ) { Managedgobject *managedgobject = MANAGEDGOBJECT( iobject ); if( VIPS_IS_OBJECT( managedgobject->object ) ) vips_object_summary( VIPS_OBJECT( managedgobject->object ), buf ); else IOBJECT_CLASS( parent_class )->info( iobject, buf ); } static void managedgobject_class_init( ManagedgobjectClass *class ) { GObjectClass *gobject_class = G_OBJECT_CLASS( class ); iObjectClass *iobject_class = IOBJECT_CLASS( class ); parent_class = g_type_class_peek_parent( class ); gobject_class->dispose = managedgobject_dispose; iobject_class->info = managedgobject_info; } static void managedgobject_init( Managedgobject *managedgobject ) { #ifdef DEBUG printf( "managedgobject_init: %p\n", managedgobject ); #endif /*DEBUG*/ managedgobject->object = NULL; } GType managedgobject_get_type( void ) { static GType type = 0; if( !type ) { static const GTypeInfo info = { sizeof( ManagedgobjectClass ), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) managedgobject_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof( Managedgobject ), 32, /* n_preallocs */ (GInstanceInitFunc) managedgobject_init, }; type = g_type_register_static( TYPE_MANAGED, "Managedgobject", &info, 0 ); } return( type ); } Managedgobject * managedgobject_new( Heap *heap, GObject *object ) { Managedgobject *managedgobject = g_object_new( TYPE_MANAGEDGOBJECT, NULL ); managed_link_heap( MANAGED( managedgobject ), heap ); managedgobject->object = object; g_object_ref( object ); MANAGED( managedgobject )->hash = GPOINTER_TO_UINT( object ); return( managedgobject ); } nip2-8.7.0/src/workspaceview.c0000644000175000017500000010035613224651032013146 00000000000000/* a workspaceview button in a workspace */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ /* Define to trace button press events. #define EVENT */ #include "ip.h" static ViewClass *parent_class = NULL; /* Params for "Align Columns" function. */ static const int workspaceview_layout_snap_threshold = 30; static const int workspaceview_layout_hspacing = 10; static const int workspaceview_layout_vspacing = 10; static const int workspaceview_layout_left = WORKSPACEVIEW_MARGIN_LEFT; static const int workspaceview_layout_top = WORKSPACEVIEW_MARGIN_TOP; static void workspaceview_scroll_to( Workspaceview *wview, int x, int y ) { GtkAdjustment *hadj = gtk_scrolled_window_get_hadjustment( GTK_SCROLLED_WINDOW( wview->window ) ); GtkAdjustment *vadj = gtk_scrolled_window_get_vadjustment( GTK_SCROLLED_WINDOW( wview->window ) ); int nx, ny; nx = IM_CLIP( 0, x, wview->width - wview->vp.width ); ny = IM_CLIP( 0, y, wview->height - wview->vp.height ); adjustments_set_value( hadj, vadj, nx, ny ); } /* Scroll by an amount horizontally and vertically. */ static void workspaceview_displace( Workspaceview *wview, int u, int v ) { workspaceview_scroll_to( wview, wview->vp.left + u, wview->vp.top + v ); } /* Scroll to make an xywh area visible. If the area is larger than the * viewport, position the view at the bottom left if the xywh area ... * this is usually right for workspaces. */ void workspaceview_scroll( Workspaceview *wview, int x, int y, int w, int h ) { GtkAdjustment *hadj = gtk_scrolled_window_get_hadjustment( GTK_SCROLLED_WINDOW( wview->window ) ); GtkAdjustment *vadj = gtk_scrolled_window_get_vadjustment( GTK_SCROLLED_WINDOW( wview->window ) ); Rect *vp = &wview->vp; int nx, ny; nx = hadj->value; if( x + w > IM_RECT_RIGHT( vp ) ) nx = IM_MAX( 0, (x + w) - vp->width ); if( x < nx ) nx = x; ny = vadj->value; if( y + h > IM_RECT_BOTTOM( vp ) ) ny = IM_MAX( 0, (y + h) - vp->height ); if( y < ny ) ny = y; #ifdef DEBUG printf( "workspaceview_scroll: x=%d, y=%d, w=%d, h=%d, " "nx = %d, ny = %d\n", x, y, w, h, nx, ny ); #endif /*DEBUG*/ adjustments_set_value( hadj, vadj, nx, ny ); } /* Update our geometry from the fixed widget. */ static void workspaceview_scroll_update( Workspaceview *wview ) { Workspace *ws = WORKSPACE( VOBJECT( wview )->iobject ); GtkAdjustment *hadj = gtk_scrolled_window_get_hadjustment( GTK_SCROLLED_WINDOW( wview->window ) ); GtkAdjustment *vadj = gtk_scrolled_window_get_vadjustment( GTK_SCROLLED_WINDOW( wview->window ) ); wview->vp.left = hadj->value; wview->vp.top = vadj->value; wview->vp.width = hadj->page_size; wview->vp.height = vadj->page_size; wview->width = hadj->upper; wview->height = vadj->upper; /* Update vp hint in model too. */ ws->vp = wview->vp; #ifdef DEBUG printf( "workspaceview_scroll_update: %s\n", IOBJECT( ws )->name ); printf( " wview->vp: l=%d, t=%d, w=%d, h=%d; fixed w=%d; h=%d\n", wview->vp.left, wview->vp.top, wview->vp.width, wview->vp.height, wview->width, wview->height ); #endif /*DEBUG*/ } static void workspaceview_watch_changed_cb( Watchgroup *watchgroup, Watch *watch, Workspaceview *wview ) { /* Names of prefs we watch. These are really rowview preferences, but * we follow them here to prevent every rowview having to have it's * own connection. */ static char *watch_names[] = { "CALC_DISPLAY_LED" }; int i; for( i = 0; i < IM_NUMBER( watch_names ); i++ ) if( strcmp( IOBJECT( watch )->name, watch_names[i] ) == 0 ) { view_map_all( VIEW( wview ), (view_map_fn) vobject_refresh_queue, NULL ); break; } } /* Scroll events ... handle mousewheel shortcuts here. Do this ourselves * (rather than just relying on the scrollbars) so we can do shift + wheel == * left/right. */ static gboolean workspaceview_scroll_event_cb( GtkWidget *widget, GdkEventScroll *ev, Workspaceview *wview ) { gboolean handled = FALSE; /* Gimp uses page_incr / 4 I think, but then scroll speed varies with * window size, which is pretty odd. Just use a constant. */ const int incr = 50; if( ev->direction == GDK_SCROLL_UP || ev->direction == GDK_SCROLL_DOWN ) { if( ev->state & GDK_SHIFT_MASK ) { if( ev->direction == GDK_SCROLL_UP ) workspaceview_scroll_to( wview, wview->vp.left + incr, wview->vp.top ); else workspaceview_scroll_to( wview, wview->vp.left - incr, wview->vp.top ); handled = TRUE; } else { if( ev->direction == GDK_SCROLL_UP ) workspaceview_scroll_to( wview, wview->vp.left, wview->vp.top - incr ); else workspaceview_scroll_to( wview, wview->vp.left, wview->vp.top + incr ); handled = TRUE; } } return( handled ); } static void workspaceview_realize_cb( GtkWidget *wid, Workspaceview *wview ) { g_assert( wid->window ); gtk_widget_add_events( wid, GDK_BUTTON_PRESS_MASK ); } void workspaceview_set_cursor( Workspaceview *wview, iWindowShape shape ) { if( !wview->context ) wview->context = iwindow_cursor_context_new( IWINDOW( view_get_toplevel( VIEW( wview ) ) ), 0, "workspaceview" ); iwindow_cursor_context_set_cursor( wview->context, shape ); } typedef struct _WorkspaceviewFindColumnview { Workspaceview *wview; int x; int y; } WorkspaceviewFindColumnview; static void * workspaceview_find_columnview_sub( View *view, WorkspaceviewFindColumnview *args ) { Columnview *cview = COLUMNVIEW( view ); Rect col; int x, y, w, h; columnview_get_position( cview, &x, &y, &w, &h ); col.left = x; col.top = y; col.width = w; col.height = h; if( im_rect_includespoint( &col, args->x, args->y ) ) return( cview ); return( NULL ); } /* Test for a point is workspaceview background ... ie. is not enclosed by one * of our columns. */ static Columnview * workspaceview_find_columnview( Workspaceview *wview, int x, int y ) { WorkspaceviewFindColumnview args; void *res; args.wview = wview; args.x = x; args.y = y; res = view_map( VIEW( wview ), (view_map_fn) workspaceview_find_columnview_sub, &args, NULL ); if( res ) return( COLUMNVIEW( res ) ); else return( NULL ); } /* Is this event on the workspaceview background. */ static gboolean workspaceview_is_background( Workspaceview *wview, GdkWindow *window, int x, int y ) { /* If the event window is not our window, it must have occured in a * sub-GdkWindow (eg. an image thumbnail), so can't be a background * click. */ if( window != wview->fixed->window ) return( FALSE ); /* Could be a click in a non-window widget (eg. a label); search * all columnviews for a hit. */ return( !workspaceview_find_columnview( wview, x, y ) ); } static gboolean workspaceview_fixed_event_cb( GtkWidget *widget, GdkEvent *ev, Workspaceview *wview ) { gboolean handled = FALSE; #ifdef EVENT printf( "workspaceview_fixed_event_cb: %d\n", ev->type ); #endif /*EVENT*/ switch( ev->type ) { case GDK_BUTTON_PRESS: if( ev->button.button == 1 ) { Workspace *ws = WORKSPACE( VOBJECT( wview )->iobject ); if( workspaceview_is_background( wview, ev->button.window, ev->button.x, ev->button.y ) ) { workspace_deselect_all( ws ); handled = TRUE; } } else if( ev->button.button == 2 ) { #ifdef EVENT printf( "workspaceview_fixed_event_cb: start drag\n" ); #endif /*EVENT*/ wview->drag_x = ev->button.x_root + wview->vp.left; wview->drag_y = ev->button.y_root + wview->vp.top; workspaceview_set_cursor( wview, IWINDOW_SHAPE_MOVE ); wview->dragging = TRUE; handled = TRUE; } break; case GDK_BUTTON_RELEASE: if( ev->button.button == 2 ) { #ifdef EVENT printf( "workspaceview_fixed_event_cb: stop drag\n" ); #endif /*EVENT*/ workspaceview_set_cursor( wview, IWINDOW_SHAPE_NONE ); wview->dragging = FALSE; handled = TRUE; } break; case GDK_MOTION_NOTIFY: if( wview->dragging && ev->motion.state & GDK_BUTTON2_MASK ) { #ifdef EVENT printf( "workspaceview_fixed_event_cb: motion\n" ); #endif /*EVENT*/ /* We're using hints. */ widget_update_pointer( GTK_WIDGET( wview ), ev ); workspaceview_scroll_to( wview, wview->drag_x - ev->motion.x_root, wview->drag_y - ev->motion.y_root ); handled = TRUE; } break; default: break; } return( handled ); } static void workspaceview_scroll_adjustment_cb( GtkAdjustment *adj, Workspaceview *wview ) { workspaceview_scroll_update( wview ); } /* Timer callback for background scroll. */ static gboolean workspaceview_scroll_time_cb( Workspaceview *wview ) { /* Perform scroll. */ workspaceview_scroll_update( wview ); if( wview->u != 0 || wview->v != 0 ) workspaceview_displace( wview, wview->u, wview->v ); /* Start timer again. */ return( TRUE ); } /* Stop the tally_scroll timer. */ static void workspaceview_scroll_stop( Workspaceview *wview ) { IM_FREEF( g_source_remove, wview->timer ); } /* Start the tally_scroll timer. */ static void workspaceview_scroll_start( Workspaceview *wview ) { workspaceview_scroll_stop( wview ); wview->timer = g_timeout_add( 30, (GSourceFunc) workspaceview_scroll_time_cb, wview ); } /* Set a background scroll. Pass both zero to stop scroll. */ void workspaceview_scroll_background( Workspaceview *wview, int u, int v ) { wview->u = u; wview->v = v; if( u == 0 && v == 0 ) workspaceview_scroll_stop( wview ); else workspaceview_scroll_start( wview ); } static void workspaceview_destroy( GtkObject *object ) { Workspaceview *wview; #ifdef DEBUG printf( "workspaceview_destroy: %p\n", object ); #endif /*DEBUG*/ g_return_if_fail( object != NULL ); g_return_if_fail( IS_WORKSPACEVIEW( object ) ); wview = WORKSPACEVIEW( object ); /* Instance destroy. */ workspaceview_scroll_stop( wview ); IM_FREEF( iwindow_cursor_context_destroy, wview->context ); FREESID( wview->watch_changed_sid, main_watchgroup ); DESTROY_GTK( wview->popup ); GTK_OBJECT_CLASS( parent_class )->destroy( object ); } static void workspaceview_realize( GtkWidget *widget ) { #ifdef DEBUG { Workspaceview *wview = WORKSPACEVIEW( widget ); Workspace *ws = WORKSPACE( VOBJECT( wview )->iobject ); printf( "workspaceview_realize: %s\n", IOBJECT( ws )->name ); } #endif /*DEBUG*/ GTK_WIDGET_CLASS( parent_class )->realize( widget ); /* Mark us as a symbol drag-to widget. */ set_symbol_drag_type( widget ); } static void workspaceview_drag_data_received( GtkWidget *widget, GdkDragContext *context, gint x, gint y, GtkSelectionData *selection_data, guint info, guint time ) { Workspaceview *wview = WORKSPACEVIEW( widget ); Workspace *ws = WORKSPACE( VOBJECT( wview )->iobject ); const char *from_row_path = (const char *) selection_data->data; Row *from_row; #ifdef DEBUG printf( "workspaceview_drag_data_received:\n" ); #endif /*DEBUG*/ /* We seem to rx drag events with x/y relative to the viewport. */ x += wview->vp.left; y += wview->vp.top; if( info == TARGET_SYMBOL && selection_data->length > 0 && selection_data->format == 8 && workspaceview_is_background( wview, GTK_WIDGET( wview->fixed )->window, x, y ) && (from_row = row_parse_name( main_workspaceroot->sym, from_row_path )) ) { char new_name[MAX_STRSIZE]; Column *col; char vips_buf_text[256]; VipsBuf buf = VIPS_BUF_STATIC( vips_buf_text ); Symbol *sym; workspace_column_name_new( ws, new_name ); col = column_new( ws, new_name ); col->x = x; col->y = y; workspace_column_select( ws, col ); /* Qualify relative to us. We don't want to embed * workspace names unless we have to. */ row_qualified_name_relative( ws->sym, from_row, &buf ); if( !(sym = workspace_add_def( ws, vips_buf_all( &buf ) )) ) iwindow_alert( widget, GTK_MESSAGE_ERROR ); symbol_recalculate_all(); /* Usually the drag-from row will be selected, very * annoying. Select the drag-to row. */ if( sym && sym->expr && sym->expr->row ) row_select( sym->expr->row ); } } static void * workspaceview_child_size_sub( Columnview *cview, Rect *area ) { int x, y, w, h; Rect col; columnview_get_position( cview, &x, &y, &w, &h ); col.left = x; col.top = y; col.width = w; col.height = h; im_rect_unionrect( area, &col, area ); return( NULL ); } static void workspaceview_child_size_cb( Columnview *cview, GtkAllocation *allocation, Workspaceview *wview ) { Workspace *ws = WORKSPACE( VOBJECT( wview )->iobject ); Workspacegroup *wsg = workspace_get_workspacegroup( ws ); int right, bottom; g_assert( IS_WORKSPACEVIEW( wview ) ); /* Compute a new bounding box for our children. */ wview->bounding.left = 0; wview->bounding.top = 0; wview->bounding.width = 0; wview->bounding.height = 0; (void) view_map( VIEW( wview ), (view_map_fn) workspaceview_child_size_sub, &wview->bounding, NULL ); wview->bounding.width += 1000; wview->bounding.height += 1000; #ifdef DEBUG { Column *col = COLUMN( VOBJECT( cview )->iobject ); printf( "workspaceview_child_size_cb: cview %s " "bb left=%d, top=%d, width=%d, height=%d\n", IOBJECT( col )->name, wview->bounding.left, wview->bounding.top, wview->bounding.width, wview->bounding.height ); } #endif /*DEBUG*/ /* Resize our fixed if necessary. */ right = IM_RECT_RIGHT( &wview->bounding ); bottom = IM_RECT_BOTTOM( &wview->bounding ); if( right != wview->width || bottom != wview->height ) { gtk_widget_set_size_request( GTK_WIDGET( wview->fixed ), right, bottom ); /* Update the model hints ... it uses bounding to position * loads and saves. */ ws->area = wview->bounding; filemodel_set_offset( FILEMODEL( wsg ), ws->area.left, ws->area.top ); } } /* Pick an xy position for the next column. */ static void workspaceview_pick_xy( Workspaceview *wview, int *x, int *y ) { /* Position already set? No change. */ if( *x >= 0 ) return; /* Set this position. */ *x = wview->next_x + wview->vp.left; *y = wview->next_y + wview->vp.top; /* And move on. */ wview->next_x += 30; wview->next_y += 30; if( wview->next_x > 300 ) wview->next_x = 3; if( wview->next_y > 200 ) wview->next_y = 3; } static void workspaceview_link( View *view, Model *model, View *parent ) { Workspaceview *wview = WORKSPACEVIEW( view ); Workspace *ws = WORKSPACE( model ); VIEW_CLASS( parent_class )->link( view, model, parent ); vobject_link( VOBJECT( wview->toolkitbrowser ), IOBJECT( ws->kitg ) ); vobject_link( VOBJECT( wview->workspacedefs ), IOBJECT( ws ) ); toolkitbrowser_set_workspace( wview->toolkitbrowser, ws ); pane_set_state( wview->rpane, ws->rpane_open, ws->rpane_position ); pane_set_state( wview->lpane, ws->lpane_open, ws->lpane_position ); } static void workspaceview_child_add( View *parent, View *child ) { Columnview *cview = COLUMNVIEW( child ); Column *column = COLUMN( VOBJECT( cview )->iobject ); Workspaceview *wview = WORKSPACEVIEW( parent ); gtk_signal_connect( GTK_OBJECT( child ), "size_allocate", GTK_SIGNAL_FUNC( workspaceview_child_size_cb ), parent ); VIEW_CLASS( parent_class )->child_add( parent, child ); /* Pick start xy pos. */ workspaceview_pick_xy( wview, &column->x, &column->y ); gtk_fixed_put( GTK_FIXED( wview->fixed ), GTK_WIDGET( cview ), column->x, column->y ); cview->lx = column->x; cview->ly = column->y; } static void workspaceview_child_position( View *parent, View *child ) { Workspaceview *wview = WORKSPACEVIEW( parent ); Columnview *cview = COLUMNVIEW( child ); gtk_fixed_move( GTK_FIXED( wview->fixed ), GTK_WIDGET( cview ), cview->lx, cview->ly ); VIEW_CLASS( parent_class )->child_position( parent, child ); } static void workspaceview_child_front( View *parent, View *child ) { Workspaceview *wview = WORKSPACEVIEW( parent ); Columnview *cview = COLUMNVIEW( child ); gtk_widget_ref( GTK_WIDGET( cview ) ); gtk_container_remove( GTK_CONTAINER( wview->fixed ), GTK_WIDGET( cview ) ); gtk_fixed_put( GTK_FIXED( wview->fixed ), GTK_WIDGET( cview ), cview->lx, cview->ly ); gtk_widget_unref( GTK_WIDGET( cview ) ); } static void workspaceview_refresh( vObject *vobject ) { Workspaceview *wview = WORKSPACEVIEW( vobject ); Workspace *ws = WORKSPACE( VOBJECT( wview )->iobject ); #ifdef DEBUG printf( "workspaceview_refresh: %p %s\n", ws, IOBJECT( ws )->name ); #endif /*DEBUG*/ gtk_widget_set_sensitive( GTK_WIDGET( wview ), !ws->locked ); workspace_jump_update( ws, wview->popup_jump ); if( ws->rpane_open && !wview->rpane->open ) pane_animate_open( wview->rpane ); if( !ws->rpane_open && wview->rpane->open ) pane_animate_closed( wview->rpane ); if( ws->lpane_open && !wview->lpane->open ) pane_animate_open( wview->lpane ); if( !ws->lpane_open && wview->lpane->open ) pane_animate_closed( wview->lpane ); if( wview->label ) { gtk_label_set_text( GTK_LABEL( wview->label ), IOBJECT( ws )->name ); if( IOBJECT( ws )->caption ) set_tooltip( wview->label, "%s", IOBJECT( ws )->caption ); if( ws->locked ) gtk_image_set_from_stock( GTK_IMAGE( wview->padlock ), STOCK_LOCK, GTK_ICON_SIZE_MENU ); else gtk_image_clear( GTK_IMAGE( wview->padlock ) ); if( ws->errors ) gtk_image_set_from_stock( GTK_IMAGE( wview->alert ), STOCK_ALERT, GTK_ICON_SIZE_MENU ); else gtk_image_clear( GTK_IMAGE( wview->alert ) ); } VOBJECT_CLASS( parent_class )->refresh( vobject ); } /* What we track during a layout. */ typedef struct _WorkspaceLayout { /* Context. */ Workspaceview *wview; /* Set of columnviews still to be laid out. */ GSList *undone_columns; /* Track the current set of columns here. */ GSList *current_columns; /* Current position for write. */ int out_x, out_y; /* Accumulate the size of the current set of columns here. */ Rect area; /* Track the current columnview here. */ Columnview *cview; } WorkspaceLayout; static void * workspaceview_layout_add( View *view, WorkspaceLayout *layout ) { layout->undone_columns = g_slist_prepend( layout->undone_columns, view ); return( NULL ); } static void * workspaceview_layout_find_leftmost( Columnview *cview, WorkspaceLayout *layout ) { if( GTK_WIDGET( cview )->allocation.x < layout->area.left ) { layout->area.left = GTK_WIDGET( cview )->allocation.x; layout->cview = cview; } return( NULL ); } static void * workspaceview_layout_find_similar_x( Columnview *cview, WorkspaceLayout *layout ) { int x = GTK_WIDGET( cview )->allocation.x; gboolean snap; snap = FALSE; /* Special case: a colum at zero makes a new column on the far left. */ if( layout->area.left == 0 && x == 0 ) snap = TRUE; if( layout->area.left > 0 && ABS( x - layout->area.left ) < workspaceview_layout_snap_threshold ) snap = TRUE; if( snap ) { layout->current_columns = g_slist_prepend( layout->current_columns, cview ); layout->area.width = IM_MAX( layout->area.width, GTK_WIDGET( cview )->allocation.width ); } return( NULL ); } /* Compare func for row recomp sort. */ static int workspaceview_layout_sort_y( Columnview *a, Columnview *b ) { return( GTK_WIDGET( a )->allocation.y - GTK_WIDGET( b )->allocation.y ); } static void * workspaceview_layout_set_pos( Columnview *cview, WorkspaceLayout *layout ) { Column *column = COLUMN( VOBJECT( cview )->iobject ); gboolean changed; changed = FALSE; /* If this column is being dragged, put the xy we allocate into the * shadow instead. */ if( cview->shadow ) { if( cview->shadow->lx != layout->out_x || cview->shadow->ly != layout->out_y ) { cview->shadow->lx = layout->out_x; cview->shadow->ly = layout->out_y; changed = TRUE; } } else { if( column->x != layout->out_x || column->y != layout->out_y ) { column->x = layout->out_x; column->y = layout->out_y; changed = TRUE; } } layout->out_y += GTK_WIDGET( cview )->allocation.height + workspaceview_layout_vspacing; if( changed ) iobject_changed( IOBJECT( column ) ); return( NULL ); } static void * workspaceview_layout_strike( Columnview *cview, WorkspaceLayout *layout ) { layout->undone_columns = g_slist_remove( layout->undone_columns, cview ); return( NULL ); } static void workspaceview_layout_loop( WorkspaceLayout *layout ) { layout->cview = NULL; layout->area.left = INT_MAX; slist_map( layout->undone_columns, (SListMapFn) workspaceview_layout_find_leftmost, layout ); layout->current_columns = NULL; layout->area.width = GTK_WIDGET( layout->cview )->allocation.width; slist_map( layout->undone_columns, (SListMapFn) workspaceview_layout_find_similar_x, layout ); layout->current_columns = g_slist_sort( layout->current_columns, (GCompareFunc) workspaceview_layout_sort_y ); layout->out_y = workspaceview_layout_top; slist_map( layout->current_columns, (SListMapFn) workspaceview_layout_set_pos, layout ); layout->out_x += layout->area.width + workspaceview_layout_hspacing; slist_map( layout->current_columns, (SListMapFn) workspaceview_layout_strike, layout ); IM_FREEF( g_slist_free, layout->current_columns ); } /* Autolayout ... try to rearrange columns so they don't overlap. Strategy: search for left-most column search for all columns with a 'small' overlap lay those columns out vertically with some space between them ... keep the vertical ordering we had before find the width of the widest, move output over that much strike that set of columns from the list of columns to be laid out */ static void workspaceview_layout( View *view ) { Workspaceview *wview = WORKSPACEVIEW( view ); WorkspaceLayout layout; layout.wview = wview; layout.undone_columns = NULL; layout.current_columns = NULL; layout.out_x = workspaceview_layout_left; view_map( VIEW( wview ), (view_map_fn) workspaceview_layout_add, &layout, NULL ); while( layout.undone_columns ) workspaceview_layout_loop( &layout ); } static void workspaceview_class_init( WorkspaceviewClass *class ) { GtkObjectClass *object_class = (GtkObjectClass *) class; GtkWidgetClass *widget_class = (GtkWidgetClass *) class; vObjectClass *vobject_class = (vObjectClass *) class; ViewClass *view_class = (ViewClass *) class; parent_class = g_type_class_peek_parent( class ); object_class->destroy = workspaceview_destroy; widget_class->realize = workspaceview_realize; widget_class->drag_data_received = workspaceview_drag_data_received; vobject_class->refresh = workspaceview_refresh; view_class->link = workspaceview_link; view_class->child_add = workspaceview_child_add; view_class->child_position = workspaceview_child_position; view_class->child_front = workspaceview_child_front; view_class->layout = workspaceview_layout; } /* Can't use main_load(), we want to select wses after load. */ static gboolean workspaceview_load( Workspace *ws, const char *filename ) { Workspacegroup *wsg = workspace_get_workspacegroup( ws ); Workspaceroot *wsr = wsg->wsr; Workspacegroup *new_wsg; if( (new_wsg = mainw_open_workspace( wsr, filename )) ) return( TRUE ); error_clear(); /* workspace_load_file() needs to recalc to work, try to avoid that by * doing .defs first. */ if( is_file_type( &filesel_dfile_type, filename ) ) { if( toolkit_new_from_file( main_toolkitgroup, filename ) ) return( TRUE ); error_clear(); } /* Try as matrix or image. Have to do these via definitions. */ if( workspace_load_file( ws, filename ) ) return( TRUE ); error_clear(); error_top( _( "Unknown file type." ) ); error_sub( _( "Unable to load \"%s\"." ), filename ); return( FALSE ); } static void workspaceview_lpane_changed_cb( Pane *pane, Workspaceview *wview ) { Workspace *ws; if( (ws = WORKSPACE( VOBJECT( wview )->iobject )) ) if( ws->lpane_open != pane->open || ws->lpane_position != pane->user_position ) { ws->lpane_open = pane->open; ws->lpane_position = pane->user_position; prefs_set( "WORKSPACE_LPANE_OPEN", "%d", ws->lpane_open ); prefs_set( "WORKSPACE_LPANE_POSITION", "%d", ws->lpane_position ); iobject_changed( IOBJECT( ws ) ); } } static void workspaceview_rpane_changed_cb( Pane *pane, Workspaceview *wview ) { Workspace *ws; if( (ws = WORKSPACE( VOBJECT( wview )->iobject )) ) if( ws->rpane_open != pane->open || ws->rpane_position != pane->user_position ) { ws->rpane_open = pane->open; ws->rpane_position = pane->user_position; prefs_set( "WORKSPACE_RPANE_OPEN", "%d", ws->rpane_open ); prefs_set( "WORKSPACE_RPANE_POSITION", "%d", ws->rpane_position ); iobject_changed( IOBJECT( ws ) ); } } static gboolean workspaceview_filedrop( Workspaceview *wview, const char *filename ) { Workspace *ws = WORKSPACE( VOBJECT( wview )->iobject ); gboolean result; result = workspaceview_load( ws, filename ); if( result ) symbol_recalculate_all(); return( result ); } static void workspaceview_column_new_action_cb2( GtkWidget *wid, GtkWidget *host, Workspaceview *wview ) { Workspace *ws = WORKSPACE( VOBJECT( wview )->iobject ); if( !workspace_column_new( ws ) ) iwindow_alert( GTK_WIDGET( wview ), GTK_MESSAGE_ERROR ); } static void workspaceview_group_action_cb2( GtkWidget *wid, GtkWidget *host, Workspaceview *wview ) { Workspace *ws = WORKSPACE( VOBJECT( wview )->iobject ); workspace_selected_group( ws ); } static void workspaceview_next_error_action_cb2( GtkWidget *wid, GtkWidget *host, Workspaceview *wview ) { Workspace *ws = WORKSPACE( VOBJECT( wview )->iobject ); if( !workspace_next_error( ws ) ) { error_top( _( "No errors in tab." ) ); error_sub( "%s", _( "There are no errors (that I can see) " "in this tab." ) ); iwindow_alert( GTK_WIDGET( wview ), GTK_MESSAGE_INFO ); } } static void workspaceview_init( Workspaceview *wview ) { GtkAdjustment *hadj; GtkAdjustment *vadj; Panechild *panechild; GtkWidget *ebox; wview->fixed = NULL; wview->window = NULL; wview->timer = 0; wview->u = 0; wview->v = 0; wview->dragging = FALSE; wview->drag_x = 0; wview->drag_y = 0; wview->vp.left = 0; wview->vp.top = 0; wview->vp.width = 0; wview->vp.height = 0; wview->width = -1; wview->height = -1; wview->bounding.left = 0; wview->bounding.top = 0; wview->bounding.width = 0; wview->bounding.height = 0; wview->next_x = 3; wview->next_y = 3; wview->context = NULL; wview->watch_changed_sid = g_signal_connect( main_watchgroup, "watch_changed", G_CALLBACK( workspaceview_watch_changed_cb ), wview ); wview->rpane = pane_new( PANE_HIDE_RIGHT ); g_signal_connect( wview->rpane, "changed", G_CALLBACK( workspaceview_rpane_changed_cb ), wview ); gtk_box_pack_start( GTK_BOX( wview ), GTK_WIDGET( wview->rpane ), TRUE, TRUE, 2 ); gtk_widget_show( GTK_WIDGET( wview->rpane ) ); wview->lpane = pane_new( PANE_HIDE_LEFT ); g_signal_connect( wview->lpane, "changed", G_CALLBACK( workspaceview_lpane_changed_cb ), wview ); gtk_paned_pack1( GTK_PANED( wview->rpane ), GTK_WIDGET( wview->lpane ), TRUE, FALSE ); gtk_widget_show( GTK_WIDGET( wview->lpane ) ); /* Ask for our own window so we can spot events on the window * background. */ wview->fixed = gtk_fixed_new(); gtk_widget_add_events( GTK_WIDGET( wview->fixed ), GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK ); gtk_fixed_set_has_window( GTK_FIXED( wview->fixed ), TRUE ); wview->window = gtk_scrolled_window_new( NULL, NULL ); gtk_scrolled_window_set_policy( GTK_SCROLLED_WINDOW( wview->window ), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC ); gtk_scrolled_window_add_with_viewport( GTK_SCROLLED_WINDOW( wview->window ), wview->fixed ); gtk_viewport_set_shadow_type( GTK_VIEWPORT( GTK_BIN( wview->window )->child ), GTK_SHADOW_NONE ); gtk_signal_connect( GTK_OBJECT( wview->window ), "scroll_event", GTK_SIGNAL_FUNC( workspaceview_scroll_event_cb ), wview ); gtk_signal_connect( GTK_OBJECT( wview->fixed ), "realize", GTK_SIGNAL_FUNC( workspaceview_realize_cb ), wview ); gtk_signal_connect( GTK_OBJECT( wview->fixed ), "event", GTK_SIGNAL_FUNC( workspaceview_fixed_event_cb ), wview ); gtk_widget_add_events( GTK_WIDGET( wview->fixed ), GDK_BUTTON_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK ); hadj = gtk_scrolled_window_get_hadjustment( GTK_SCROLLED_WINDOW( wview->window ) ); vadj = gtk_scrolled_window_get_vadjustment( GTK_SCROLLED_WINDOW( wview->window ) ); gtk_signal_connect( GTK_OBJECT( hadj ), "value_changed", GTK_SIGNAL_FUNC( workspaceview_scroll_adjustment_cb ), wview ); gtk_signal_connect( GTK_OBJECT( hadj ), "changed", GTK_SIGNAL_FUNC( workspaceview_scroll_adjustment_cb ), wview ); gtk_signal_connect( GTK_OBJECT( vadj ), "value_changed", GTK_SIGNAL_FUNC( workspaceview_scroll_adjustment_cb ), wview ); gtk_signal_connect( GTK_OBJECT( vadj ), "changed", GTK_SIGNAL_FUNC( workspaceview_scroll_adjustment_cb ), wview ); /* We can't use gtk_container_set_focus_hadjustment() etc. since our * workspace contains a lot of nested structures, and hadjustment() * only works for single-layer things. Instead, do focus scrolling * ourselves .. see rowview.c. */ gtk_paned_pack2( GTK_PANED( wview->lpane ), GTK_WIDGET( wview->window ), TRUE, FALSE ); /* Toolkit Browser pane. */ panechild = panechild_new( wview->rpane, _( "Toolkit Browser" ) ); /* Have to put toolkitbrowser in an ebox so the search entry gets * clipped to the pane size. */ ebox = gtk_event_box_new(); gtk_container_add( GTK_CONTAINER( panechild ), GTK_WIDGET( ebox ) ); gtk_widget_show( ebox ); wview->toolkitbrowser = toolkitbrowser_new(); gtk_container_add( GTK_CONTAINER( ebox ), GTK_WIDGET( wview->toolkitbrowser ) ); gtk_widget_show( GTK_WIDGET( wview->toolkitbrowser ) ); /* Workspace-local defs pane. */ panechild = panechild_new( wview->lpane, _( "Tab Definitions" ) ); wview->workspacedefs = workspacedefs_new(); gtk_container_add( GTK_CONTAINER( panechild ), GTK_WIDGET( wview->workspacedefs ) ); gtk_widget_show( GTK_WIDGET( wview->workspacedefs ) ); filedrop_register( GTK_WIDGET( wview ), (FiledropFunc) workspaceview_filedrop, wview ); wview->popup = popup_build( _( "Workspace menu" ) ); popup_add_but( wview->popup, _( "New C_olumn" ), POPUP_FUNC( workspaceview_column_new_action_cb2 ) ); wview->popup_jump = popup_add_pullright( wview->popup, _( "Jump to _Column" ) ); menu_add_sep( wview->popup ); popup_add_but( wview->popup, _( "_Group Selected" ), POPUP_FUNC( workspaceview_group_action_cb2 ) ); menu_add_sep( wview->popup ); popup_add_but( wview->popup, STOCK_NEXT_ERROR, POPUP_FUNC( workspaceview_next_error_action_cb2 ) ); popup_attach( wview->fixed, wview->popup, wview ); gtk_widget_show_all( wview->window ); } GtkType workspaceview_get_type( void ) { static GtkType type = 0; if( !type ) { static const GtkTypeInfo info = { "Workspaceview", sizeof( Workspaceview ), sizeof( WorkspaceviewClass ), (GtkClassInitFunc) workspaceview_class_init, (GtkObjectInitFunc) workspaceview_init, /* reserved_1 */ NULL, /* reserved_2 */ NULL, (GtkClassInitFunc) NULL, }; type = gtk_type_unique( TYPE_VIEW, &info ); } return( type ); } View * workspaceview_new( void ) { Workspaceview *wview = gtk_type_new( TYPE_WORKSPACEVIEW ); return( VIEW( wview ) ); } void workspaceview_set_label( Workspaceview *wview, GtkWidget *label, GtkWidget *padlock, GtkWidget *alert ) { g_assert( !wview->label ); g_assert( !wview->padlock ); g_assert( !wview->alert ); wview->label = label; wview->padlock = padlock; wview->alert = alert; } nip2-8.7.0/src/stringview.c0000644000175000017500000000646713224651032012466 00000000000000/* a view of a text thingy */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #include "ip.h" static EditviewClass *parent_class = NULL; /* Re-read the text in a tally entry. */ static void * stringview_scan( View *view ) { Stringview *stringview = STRINGVIEW( view ); String *string = STRING( VOBJECT( stringview )->iobject ); Expr *expr = HEAPMODEL( string )->row->expr; char value[MAX_STRSIZE]; char value2[MAX_STRSIZE]; #ifdef DEBUG Row *row = HEAPMODEL( string )->row; printf( "stringview_scan: " ); row_name_print( row ); printf( "\n" ); #endif /*DEBUG*/ expr_error_clear( expr ); if( !get_geditable_string( EDITVIEW( stringview )->text, value, MAX_STRSIZE ) ) { expr_error_set( expr ); return( view ); } my_strccpy( value2, value ); if( strcmp( string->value, value2 ) != 0 ) { IM_SETSTR( string->value, value2 ); classmodel_update( CLASSMODEL( string ) ) ; } return( VIEW_CLASS( parent_class )->scan( view ) ); } static void stringview_refresh( vObject *vobject ) { Stringview *stringview = STRINGVIEW( vobject ); String *string = STRING( VOBJECT( stringview )->iobject ); #ifdef DEBUG Row *row = HEAPMODEL( string )->row; printf( "stringview_refresh: " ); row_name_print( row ); printf( " (%p)\n", vobject ); #endif /*DEBUG*/ if( string->value ) { char txt[MAX_STRSIZE]; VipsBuf buf = VIPS_BUF_STATIC( txt ); vips_buf_appendsc( &buf, FALSE, string->value ); editview_set_entry( EDITVIEW( stringview ), "%s", vips_buf_all( &buf ) ); } VOBJECT_CLASS( parent_class )->refresh( vobject ); } static void stringview_class_init( StringviewClass *class ) { vObjectClass *vobject_class = (vObjectClass *) class; ViewClass *view_class = (ViewClass *) class; parent_class = g_type_class_peek_parent( class ); /* Create signals. */ /* Init methods. */ vobject_class->refresh = stringview_refresh; view_class->scan = stringview_scan; } static void stringview_init( Stringview *stringview ) { } GtkType stringview_get_type( void ) { static GtkType type = 0; if( !type ) { static const GtkTypeInfo info = { "Stringview", sizeof( Stringview ), sizeof( StringviewClass ), (GtkClassInitFunc) stringview_class_init, (GtkObjectInitFunc) stringview_init, /* reserved_1 */ NULL, /* reserved_2 */ NULL, (GtkClassInitFunc) NULL, }; type = gtk_type_unique( TYPE_EDITVIEW, &info ); } return( type ); } View * stringview_new( void ) { Stringview *stringview = gtk_type_new( TYPE_STRINGVIEW ); return( VIEW( stringview ) ); } nip2-8.7.0/src/plotstatus.h0000644000175000017500000000357213224651032012506 00000000000000/* display plot info and mouse posn */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_PLOTSTATUS (plotstatus_get_type()) #define PLOTSTATUS( obj ) (GTK_CHECK_CAST( (obj), TYPE_PLOTSTATUS, Plotstatus )) #define PLOTSTATUS_CLASS( klass ) \ (GTK_CHECK_CLASS_CAST( (klass), TYPE_PLOTSTATUS, PlotstatusClass )) #define IS_PLOTSTATUS( obj ) (GTK_CHECK_TYPE( (obj), TYPE_PLOTSTATUS )) #define IS_PLOTSTATUS_CLASS( klass ) \ (GTK_CHECK_CLASS_TYPE( (klass), TYPE_PLOTSTATUS )) struct _Plotstatus { GtkFrame parent_class; Plotmodel *plotmodel; GtkWidget *top; /* Top label */ GtkWidget *pos; /* Position */ GtkWidget *hb; /* Band element hbox */ GtkWidget *mag; /* Magnification display */ GtkWidget **label; /* A label for displaying each series */ int columns; /* Last number of columns we saw */ }; typedef struct _PlotstatusClass { GtkFrameClass parent_class; /* My methods. */ } PlotstatusClass; GtkType plotstatus_get_type( void ); Plotstatus *plotstatus_new( Plotmodel *plotmodel ); void plotstatus_mouse( Plotstatus *plotstatus, double x, double y ); nip2-8.7.0/src/log.c0000644000175000017500000001067413224651032011041 00000000000000/* Abstract base class for a log window: errors, link report, log, etc. */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ /* Send log to stdout as well #define DEBUG_FILE */ #include "ip.h" static iWindowClass *parent_class = NULL; static void log_build( GtkWidget *widget ) { Log *log = LOG( widget ); iWindow *iwnd = IWINDOW( widget ); LogClass *log_class = LOG_GET_CLASS( log ); GError *error; GtkWidget *mbar; GtkWidget *swin; PangoFontDescription *font_desc; IWINDOW_CLASS( parent_class )->build( widget ); gtk_action_group_add_actions( iwnd->action_group, log_class->actions, log_class->n_actions, GTK_WINDOW( log ) ); gtk_action_group_add_toggle_actions( iwnd->action_group, log_class->toggle_actions, log_class->n_toggle_actions, GTK_WINDOW( log ) ); if( !gtk_ui_manager_add_ui_from_string( iwnd->ui_manager, log_class->ui_description, -1, &error ) ) { g_message( "building menus failed: %s", error->message ); g_error_free( error ); exit( EXIT_FAILURE ); } mbar = gtk_ui_manager_get_widget( iwnd->ui_manager, log_class->menu_bar_name ); gtk_box_pack_start( GTK_BOX( iwnd->work ), mbar, FALSE, FALSE, 0 ); gtk_widget_show( mbar ); swin = gtk_scrolled_window_new( NULL, NULL ); gtk_scrolled_window_set_policy( GTK_SCROLLED_WINDOW( swin ), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC ); gtk_box_pack_start( GTK_BOX( iwnd->work ), swin, TRUE, TRUE, 0 ); gtk_widget_show( swin ); log->view = gtk_text_view_new(); gtk_text_view_set_editable( GTK_TEXT_VIEW( log->view ), FALSE ); gtk_text_view_set_cursor_visible( GTK_TEXT_VIEW( log->view ), FALSE ); font_desc = pango_font_description_from_string( "Monospace" ); gtk_widget_modify_font( log->view, font_desc ); pango_font_description_free( font_desc ); gtk_container_add( GTK_CONTAINER( swin ), log->view ); gtk_widget_show( log->view ); } static void log_class_init( LogClass *class ) { iWindowClass *iwindow_class = (iWindowClass *) class; parent_class = g_type_class_peek_parent( class ); iwindow_class->build = log_build; class->actions = NULL; class->n_actions = 0; class->toggle_actions = NULL; class->n_toggle_actions = 0; class->action_name = NULL; class->ui_description = NULL; class->menu_bar_name = NULL; } static void log_init( Log *log ) { } GtkType log_get_type( void ) { static GtkType type = 0; if( !type ) { static const GtkTypeInfo info = { "Log", sizeof( Log ), sizeof( LogClass ), (GtkClassInitFunc) log_class_init, (GtkObjectInitFunc) log_init, /* reserved_1 */ NULL, /* reserved_2 */ NULL, (GtkClassInitFunc) NULL, }; type = gtk_type_unique( TYPE_IWINDOW, &info ); } return( type ); } void log_clear_action_cb( GtkAction *action, Log *log ) { GtkTextView *text_view = GTK_TEXT_VIEW( log->view ); GtkTextBuffer *text_buffer = gtk_text_view_get_buffer( text_view ); gtk_text_buffer_set_text( text_buffer, "", 0 ); } void log_text( Log *log, const char *buf ) { GtkTextView *text_view = GTK_TEXT_VIEW( log->view ); GtkTextBuffer *text_buffer = gtk_text_view_get_buffer( text_view ); GtkTextMark *mark = gtk_text_buffer_get_insert( text_buffer ); GtkTextIter iter; gtk_text_buffer_get_end_iter( text_buffer, &iter ); gtk_text_buffer_move_mark( text_buffer, mark, &iter ); gtk_text_buffer_insert_at_cursor( text_buffer, buf, -1 ); gtk_text_view_scroll_to_mark( text_view, mark, 0.0, TRUE, 0.5, 1 ); #ifdef DEBUG_FILE printf( "%s", buf ); #endif } void log_textf( Log *log, const char *fmt, ... ) { va_list ap; char buf[MAX_STRSIZE]; va_start( ap, fmt ); (void) im_vsnprintf( buf, MAX_STRSIZE, fmt, ap ); va_end( ap ); log_text( log, buf ); } nip2-8.7.0/src/colour.h0000644000175000017500000000337113224651032011564 00000000000000/* a colour colour in a workspace */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_COLOUR (colour_get_type()) #define COLOUR( obj ) \ (G_TYPE_CHECK_INSTANCE_CAST( (obj), TYPE_COLOUR, Colour )) #define COLOUR_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_CAST( (klass), TYPE_COLOUR, ColourClass)) #define IS_COLOUR( obj ) \ (G_TYPE_CHECK_INSTANCE_TYPE( (obj), TYPE_COLOUR )) #define IS_COLOUR_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_TYPE( (klass), TYPE_COLOUR )) #define COLOUR_GET_CLASS( obj ) \ (G_TYPE_INSTANCE_GET_CLASS( (obj), TYPE_COLOUR, ColourClass )) struct _Colour { Classmodel parent_class; /* Class fields. */ double value[3]; char *colour_space; /* Build view caption here. */ VipsBuf caption; }; typedef struct _ColourClass { ClassmodelClass parent_class; /* My methods. */ } ColourClass; Imageinfo *colour_ii_new( Colour *colour ); void colour_set_rgb( Colour *colour, double rgb[3] ); GType colour_get_type( void ); nip2-8.7.0/src/plotmodel.h0000644000175000017500000000362213224651032012257 00000000000000/* the model parts of a plot window .. all the window components watch this */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_PLOTMODEL (plotmodel_get_type()) #define PLOTMODEL( obj ) \ (GTK_CHECK_CAST( (obj), TYPE_PLOTMODEL, Plotmodel )) #define PLOTMODEL_CLASS( klass ) \ (GTK_CHECK_CLASS_CAST( (klass), TYPE_PLOTMODEL, PlotmodelClass )) #define IS_PLOTMODEL( obj ) (GTK_CHECK_TYPE( (obj), TYPE_PLOTMODEL )) #define IS_PLOTMODEL_CLASS( klass ) \ (GTK_CHECK_CLASS_TYPE( (klass), TYPE_PLOTMODEL )) struct _Plotmodel { iObject parent_class; /* The class model we watch. */ Plot *plot; guint changed_sid; guint destroy_sid; /* The last canvas size we set ... stop resize loops with these. */ int width; int height; /* Viewer state. */ int mag; gboolean show_status; }; typedef struct _PlotmodelClass { iObjectClass parent_class; /* My methods. */ } PlotmodelClass; GtkType plotmodel_get_type( void ); Plotmodel *plotmodel_new( Plot *plot ); void plotmodel_set_mag( Plotmodel *plotmodel, int mag ); void plotmodel_set_status( Plotmodel *plotmodel, gboolean show_status ); nip2-8.7.0/src/slider.h0000644000175000017500000000310513224651032011536 00000000000000/* a slider in a workspace */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_SLIDER (slider_get_type()) #define SLIDER( obj ) \ (G_TYPE_CHECK_INSTANCE_CAST( (obj), TYPE_SLIDER, Slider )) #define SLIDER_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_CAST( (klass), TYPE_SLIDER, SliderClass)) #define IS_SLIDER( obj ) \ (G_TYPE_CHECK_INSTANCE_TYPE( (obj), TYPE_SLIDER )) #define IS_SLIDER_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_TYPE( (klass), TYPE_SLIDER )) #define SLIDER_GET_CLASS( obj ) \ (G_TYPE_INSTANCE_GET_CLASS( (obj), TYPE_SLIDER, SliderClass )) typedef struct _Slider { Classmodel parent_object; double from, to, value; } Slider; typedef struct _SliderClass { ClassmodelClass parent_class; /* My methods. */ } SliderClass; GType slider_get_type( void ); nip2-8.7.0/src/iimage.h0000644000175000017500000000440113224651032011507 00000000000000/* a ip image class in a workspace */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_IIMAGE (iimage_get_type()) #define IIMAGE( obj ) \ (G_TYPE_CHECK_INSTANCE_CAST( (obj), TYPE_IIMAGE, iImage )) #define IIMAGE_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_CAST( (klass), TYPE_IIMAGE, iImageClass)) #define IS_IIMAGE( obj ) \ (G_TYPE_CHECK_INSTANCE_TYPE( (obj), TYPE_IIMAGE )) #define IS_IIMAGE_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_TYPE( (klass), TYPE_IIMAGE )) #define IIMAGE_GET_CLASS( obj ) \ (G_TYPE_INSTANCE_GET_CLASS( (obj), TYPE_IIMAGE, iImageClass )) struct _iImage { Classmodel parent_class; /* Class fields. */ ImageValue value; /* List of classmodel which have displays on us. */ GSList *classmodels; /* List of popup imageview windows we've made. */ GSList *views; /* Track display pos/size/etc. here. */ int image_left, image_top; /* Scroll position */ int image_mag; /* Scale */ /* View attachments. */ gboolean show_status; gboolean show_paintbox; gboolean show_convert; gboolean show_rulers; /* Bar settings we remember. */ double scale, offset; gboolean falsecolour; gboolean type; /* Private ... build iobject caption here. */ VipsBuf caption_buffer; }; typedef struct _iImageClass { ClassmodelClass parent_class; /* My methods. */ } iImageClass; GType iimage_get_type( void ); gboolean iimage_replace( iImage *iimage, const char *filename ); void iimage_header( GtkWidget *parent, Model *model ); nip2-8.7.0/src/iimage.c0000644000175000017500000003070113224651032011504 00000000000000/* an image class object in a workspace */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #include "ip.h" static ClassmodelClass *parent_class = NULL; static void iimage_dispose( GObject *gobject ) { iImage *iimage; #ifdef DEBUG printf( "iimage_dispose %p\n", gobject ); #endif /*DEBUG*/ g_return_if_fail( gobject != NULL ); g_return_if_fail( IS_IIMAGE( gobject ) ); iimage = IIMAGE( gobject ); slist_map( iimage->classmodels, (SListMapFn) classmodel_iimage_unlink, iimage ); g_assert( !iimage->classmodels ); G_OBJECT_CLASS( parent_class )->dispose( gobject ); } static void iimage_finalize( GObject *gobject ) { iImage *iimage; #ifdef DEBUG printf( "iimage_finalize\n" ); #endif /*DEBUG*/ g_return_if_fail( gobject != NULL ); g_return_if_fail( IS_IIMAGE( gobject ) ); iimage = IIMAGE( gobject ); image_value_destroy( &iimage->value ); IM_FREEF( g_slist_free, iimage->views ); vips_buf_destroy( &iimage->caption_buffer ); G_OBJECT_CLASS( parent_class )->finalize( gobject ); } /* Return the main caption. */ static const char * iimage_generate_caption( iObject *iobject ) { iImage *iimage = IIMAGE( iobject ); Imageinfo *ii = iimage->value.ii; VipsBuf *buf = &iimage->caption_buffer; vips_buf_rewind( buf ); image_value_caption( &iimage->value, buf ); if( ii ) { vips_buf_appends( buf, ", " ); iobject_info( IOBJECT( iimage->value.ii ), buf ); } return( vips_buf_all( buf ) ); } static void iimage_info( iObject *iobject, VipsBuf *buf ) { iImage *iimage = IIMAGE( iobject ); Imageinfo *ii = iimage->value.ii; IMAGE *im; if( ii && (im = imageinfo_get( FALSE, ii )) ) { char *filename; if( im_header_get_typeof( im, ORIGINAL_FILENAME ) != 0 ) { if( !im_header_string( im, ORIGINAL_FILENAME, &filename ) ) { vips_buf_appends( buf, _( "Original filename" ) ); vips_buf_appendf( buf, ": %s\n", filename ); } } } } static View * iimage_view_new( Model *model, View *parent ) { return( iimageview_new() ); } static void iimage_edit( GtkWidget *parent, Model *model ) { iImage *iimage = IIMAGE( model ); if( iimage->value.ii ) (void) imageview_new( iimage, parent ); } void iimage_header( GtkWidget *parent, Model *model ) { iImage *iimage = IIMAGE( model ); Row *row = HEAPMODEL( iimage )->row; Workspace *ws = row_get_workspace( row ); GtkWidget *imageheader; char txt[512]; VipsBuf buf = VIPS_BUF_STATIC( txt ); imageheader = imageheader_new( iimage ); row_qualified_name_relative( ws->sym, row, &buf ); iwindow_set_title( IWINDOW( imageheader ), _( "Header for \"%s\"" ), vips_buf_all( &buf ) ); idialog_set_callbacks( IDIALOG( imageheader ), NULL, NULL, NULL, NULL ); idialog_add_ok( IDIALOG( imageheader ), iwindow_true_cb, _( "OK" ) ); iwindow_set_parent( IWINDOW( imageheader ), parent ); idialog_set_iobject( IDIALOG( imageheader ), IOBJECT( iimage ) ); iwindow_build( IWINDOW( imageheader ) ); gtk_widget_show( imageheader ); } static xmlNode * iimage_save( Model *model, xmlNode *xnode ) { iImage *iimage = IIMAGE( model ); xmlNode *xthis; if( !(xthis = MODEL_CLASS( parent_class )->save( model, xnode )) ) return( NULL ); /* We always rebuild the value from the expr ... don't save. */ if( !set_iprop( xthis, "image_left", iimage->image_left ) || !set_iprop( xthis, "image_top", iimage->image_top ) || !set_iprop( xthis, "image_mag", iimage->image_mag ) || !set_sprop( xthis, "show_status", bool_to_char( iimage->show_status ) ) || !set_sprop( xthis, "show_paintbox", bool_to_char( iimage->show_paintbox ) ) || !set_sprop( xthis, "show_convert", bool_to_char( iimage->show_convert ) ) || !set_sprop( xthis, "show_rulers", bool_to_char( iimage->show_rulers ) ) || !set_dprop( xthis, "scale", iimage->scale ) || !set_dprop( xthis, "offset", iimage->offset ) || !set_sprop( xthis, "falsecolour", bool_to_char( iimage->falsecolour ) ) || !set_sprop( xthis, "type", bool_to_char( iimage->type ) ) ) return( NULL ); return( xthis ); } static gboolean iimage_load( Model *model, ModelLoadState *state, Model *parent, xmlNode *xnode ) { iImage *iimage = IIMAGE( model ); g_assert( IS_RHS( parent ) ); (void) get_iprop( xnode, "image_left", &iimage->image_left ); (void) get_iprop( xnode, "image_top", &iimage->image_top ); (void) get_iprop( xnode, "image_mag", &iimage->image_mag ); (void) get_bprop( xnode, "show_status", &iimage->show_status ); (void) get_bprop( xnode, "show_paintbox", &iimage->show_paintbox ); (void) get_bprop( xnode, "show_convert", &iimage->show_convert ); (void) get_bprop( xnode, "show_rulers", &iimage->show_rulers ); (void) get_dprop( xnode, "scale", &iimage->scale ); (void) get_dprop( xnode, "offset", &iimage->offset ); (void) get_bprop( xnode, "falsecolour", &iimage->falsecolour ); (void) get_bprop( xnode, "type", &iimage->type ); return( MODEL_CLASS( parent_class )->load( model, state, parent, xnode ) ); } /* Need to implement _update_heap(), as not all model fields are directly * editable ... some are set only from expr. See also iregion.c. */ static void * iimage_update_heap( Heapmodel *heapmodel ) { Expr *expr = heapmodel->row->expr; iImage *iimage = IIMAGE( heapmodel ); ImageValue *value = &iimage->value; PElement pe; Imageinfo *ii; #ifdef DEBUG printf( "iimage_update_heap: " ); row_name_print( HEAPMODEL( iimage )->row ); printf( "\n" ); #endif /*DEBUG*/ /* Read the heap into the model, over the top of the unapplied edits. */ if( !class_get_exact( &expr->root, IOBJECT( heapmodel )->name, &pe ) ) return( FALSE ); if( !class_get_member_image( &pe, MEMBER_VALUE, &ii ) ) return( FALSE ); image_value_set( value, ii ); IM_FREE( CLASSMODEL( iimage )->filename ); if( value->ii && imageinfo_is_from_file( value->ii ) ) IM_SETSTR( CLASSMODEL( iimage )->filename, IOBJECT( value->ii )->name ); /* Classmodel _update_heap() will do _instance_new() from the fixed up * model. */ return( HEAPMODEL_CLASS( parent_class )->update_heap( heapmodel ) ); } /* Update iImage from heap. */ static gboolean iimage_class_get( Classmodel *classmodel, PElement *root ) { iImage *iimage = IIMAGE( classmodel ); ImageValue *value = &iimage->value; Imageinfo *ii; #ifdef DEBUG printf( "iimage_class_get: " ); row_name_print( HEAPMODEL( iimage )->row ); printf( "\n" ); #endif /*DEBUG*/ if( !class_get_member_image( root, MEMBER_VALUE, &ii ) ) return( FALSE ); image_value_set( value, ii ); /* Try to update the filename for this row ... get from the meta if we * can. */ IM_FREE( classmodel->filename ); if( ii ) { IMAGE *im; char *filename; if( (im = imageinfo_get( FALSE, ii )) && im_header_get_typeof( im, ORIGINAL_FILENAME ) != 0 ) { if( im_header_string( im, ORIGINAL_FILENAME, &filename ) ) return( FALSE ); } else if( imageinfo_is_from_file( ii ) ) filename = IOBJECT( ii )->name; else filename = NULL; IM_SETSTR( classmodel->filename, filename ); } return( CLASSMODEL_CLASS( parent_class )->class_get( classmodel, root ) ); } /* Make a new "fn value" application. */ static gboolean iimage_class_new( Classmodel *classmodel, PElement *fn, PElement *out ) { Heap *heap = reduce_context->heap; iImage *iimage = IIMAGE( classmodel ); ImageValue *value = &iimage->value; PElement rhs; #ifdef DEBUG printf( "iimage_class_new: " ); row_name_print( HEAPMODEL( iimage )->row ); printf( "\n" ); #endif /*DEBUG*/ /* Make application nodes. */ heap_appl_init( out, fn ); if( !heap_appl_add( heap, out, &rhs ) ) return( FALSE ); PEPUTP( &rhs, ELEMENT_MANAGED, value->ii ); return( TRUE ); } static gboolean iimage_graphic_save( Classmodel *classmodel, GtkWidget *parent, const char *filename ) { iImage *iimage = IIMAGE( classmodel ); ImageValue *value = &iimage->value; char buf[FILENAME_MAX]; /* Can't happen nested-ly, so a static is OK. */ static GTimer *timer = NULL; /* We don't want $VAR etc. in the filename we pass down to the file * ops. */ im_strncpy( buf, filename, FILENAME_MAX ); path_expand( buf ); /* Append the mode string. This needs an expanded filename. */ filesel_add_mode( buf ); if( !timer ) timer = g_timer_new(); g_timer_reset( timer ); if( value->ii ) if( !imageinfo_write( value->ii, buf ) ) return( FALSE ); mainw_recent_add( &mainw_recent_image, filename ); if( main_option_time_save ) { double elapsed; elapsed = g_timer_elapsed( timer, NULL ); error_top( _( "Save timer." ) ); error_sub( _( "Image save took %g seconds." ), elapsed ); return( FALSE ); } return( TRUE ); } gboolean iimage_replace( iImage *iimage, const char *filename ) { Row *row = HEAPMODEL( iimage )->row; iText *itext = ITEXT( HEAPMODEL( iimage )->rhs->itext ); char txt[MAX_STRSIZE]; VipsBuf buf = VIPS_BUF_STATIC( txt ); vips_buf_appends( &buf, "Image_file \"" ); vips_buf_appendsc( &buf, TRUE, filename ); vips_buf_appends( &buf, "\"" ); if( itext_set_formula( itext, vips_buf_all( &buf ) ) ) { itext_set_edited( itext, TRUE ); workspace_set_modified( row->ws, TRUE ); (void) expr_dirty( row->expr, link_serial_new() ); mainw_recent_add( &mainw_recent_image, filename ); } return( TRUE ); } static gboolean iimage_graphic_replace( Classmodel *classmodel, GtkWidget *parent, const char *filename ) { return( iimage_replace( IIMAGE( classmodel ), filename ) ); } static void iimage_class_init( iImageClass *class ) { GObjectClass *gobject_class = (GObjectClass *) class; iObjectClass *iobject_class = (iObjectClass *) class; ModelClass *model_class = (ModelClass *) class; HeapmodelClass *heapmodel_class = (HeapmodelClass *) class; ClassmodelClass *classmodel_class = (ClassmodelClass *) class; parent_class = g_type_class_peek_parent( class ); /* Create signals. */ /* Init methods. */ gobject_class->dispose = iimage_dispose; gobject_class->finalize = iimage_finalize; iobject_class->user_name = _( "Image" ); iobject_class->generate_caption = iimage_generate_caption; iobject_class->info = iimage_info; model_class->view_new = iimage_view_new; model_class->edit = iimage_edit; model_class->header = iimage_header; model_class->save = iimage_save; model_class->load = iimage_load; heapmodel_class->update_heap = iimage_update_heap; classmodel_class->class_get = iimage_class_get; classmodel_class->class_new = iimage_class_new; classmodel_class->graphic_save = iimage_graphic_save; classmodel_class->graphic_replace = iimage_graphic_replace; classmodel_class->filetype = filesel_type_image; classmodel_class->filetype_pref = "IMAGE_FILE_TYPE"; /* Static init. */ model_register_loadable( MODEL_CLASS( class ) ); } static void iimage_init( iImage *iimage ) { image_value_init( &iimage->value, CLASSMODEL( iimage ) ); iimage->classmodels = NULL; iimage->views = NULL; iimage->image_left = 0; iimage->image_top = 0; iimage->image_mag = 0; iimage->show_status = FALSE; iimage->show_paintbox = FALSE; iimage->show_convert = FALSE; iimage->show_rulers = FALSE; iimage->scale = 0.0; iimage->offset = 0.0; iimage->falsecolour = FALSE; iimage->type = TRUE; vips_buf_init_dynamic( &iimage->caption_buffer, MAX_LINELENGTH ); iobject_set( IOBJECT( iimage ), CLASS_IMAGE, NULL ); } GtkType iimage_get_type( void ) { static GType type = 0; if( !type ) { static const GTypeInfo info = { sizeof( iImageClass ), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) iimage_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof( iImage ), 32, /* n_preallocs */ (GInstanceInitFunc) iimage_init, }; type = g_type_register_static( TYPE_CLASSMODEL, "iImage", &info, 0 ); } return( type ); } nip2-8.7.0/src/parse.y0000644000175000017500000010651513224651032011420 00000000000000%{ /* Parse ip's macro language. */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #include "ip.h" /* #define DEBUG */ /* trace text read system #define DEBUG_CHARACTER */ /* The lexer from lex.l. */ int yylex( void ); void yyrestart( FILE *input_file ); /* Declare file-private stuff, shared with the lexer. Bison will put this * stuff into parse.h, so just declare, don't define. Sadly we can't have * these things static :( */ /* Global .. the symbol whose definition we are currently parsing, the symbol * which all defs in this parse action should be made local to. */ extern Symbol *current_symbol; extern Symbol *root_symbol; /* The current parse context. */ extern Compile *current_compile; extern ParseNode *current_parsenode; /* The kit we are adding new symbols to. */ extern Toolkit *current_kit; /* Where it should go in the kit. */ extern int tool_position; /* Lineno of start of last top-level def. */ extern int last_top_lineno; /* Text we've gathered in this lex. */ extern char lex_text_buffer[MAX_STRSIZE]; /* Stack of symbols for parser - each represents a new scope level. */ extern Symbol *scope_stack_symbol[MAX_SSTACK]; extern Compile *scope_stack_compile[MAX_SSTACK]; extern int scope_sp; /* Use to generate unique ids for anonymouse parse objects (eg. lambdas etc). */ extern int parse_object_id; /* Get text for parsed objects. */ char *input_text( char *out ); void input_reset( void ); void input_push( int n ); void input_backtoch( char ch ); void input_back1( void ); void input_pop( void ); /* Nest and unnest scopes. */ void scope_push( void ); void scope_pop( void ); void scope_pop_all( void ); void scope_reset( void ); /* Helper functions. */ void *parse_toplevel_end( Symbol *sym ); void *parse_access_end( Symbol *sym, Symbol *main ); %} %union { struct sym_table *yy_symtab; ParseNode *yy_node; char *yy_name; ParseConst yy_const; UnOp yy_uop; BinOp yy_binop; } %token TK_TAG TK_IDENT TK_CONST TK_DOTDOTDOT TK_LAMBDA TK_FROM TK_TO TK_SUCHTHAT %token TK_UMINUS TK_UPLUS TK_POW %token TK_LESS TK_LESSEQ TK_MORE TK_MOREEQ TK_NOTEQ %token TK_LAND TK_LOR TK_BAND TK_BOR TK_JOIN TK_DIFF %token TK_IF TK_THEN TK_ELSE %token TK_CHAR TK_SHORT TK_CLASS TK_SCOPE %token TK_INT TK_FLOAT TK_DOUBLE TK_SIGNED TK_UNSIGNED TK_COMPLEX %token TK_SEPARATOR TK_DIALOG TK_LSHIFT TK_RSHIFT %type expr binop uop rhs list_expression comma_list body %type simple_pattern complex_pattern list_pattern %type leaf_pattern %type crhs cexprlist prhs lambda %type TK_CONST %type TK_IDENT TK_TAG %left TK_SUCHTHAT %left TK_LAMBDA %nonassoc TK_IF %left ',' %left TK_TO %left TK_LOR %left TK_LAND '@' %left TK_BOR %left '^' %left TK_BAND %nonassoc TK_EQ TK_NOTEQ TK_PEQ TK_PNOTEQ %nonassoc TK_LESS TK_LESSEQ TK_MORE TK_MOREEQ %left TK_LSHIFT TK_RSHIFT %left '+' '-' %left '*' '/' '%' %left '!' '~' TK_JOIN TK_DIFF TK_UMINUS TK_UPLUS %right TK_POW ':' %right TK_CONST '(' %right TK_IDENT TK_TAG TK_SCOPE '[' %right TK_APPLICATION %left '?' '.' %start select /* Our syntax for list comprehensions is not LALR(1). We have: simple_pattern '<-' expr ';' | expr ';' simple_pattern can be something like a:x which is also an expr. We don't know which branch to take until we see a '<' or a ';'. Use bison's GLR system to parse this, and ignore the first 13 reduce/reduce conflicts caused by this ambiguity. FIXME ... we now depend on bison, but we still have some yacc compatibility stuff in here, and we don't use all of bison's nice features (eg. for tracking line numbers in the source file). Fix this up at some stage. */ %glr-parser %expect-rr 13 %error-verbose %% select: ',' main | '^' single_definition | '*' params_plus_rhs optsemi { compile_check( current_compile ); } | prhs { char buf[MAX_STRSIZE]; current_compile->tree = $1; /* Junk any old text. */ IM_FREE( current_compile->text ); IM_FREE( current_compile->prhstext ); IM_FREE( current_compile->rhstext ); /* Set new text. */ IM_SETSTR( current_compile->rhstext, input_text( buf ) ); compile_check( current_compile ); } ; prhs: TK_BAND expr { $$ = $2; } | '@' cexprlist { $$ = $2; } ; main: /* Empty */ | main single_definition ; single_definition: directive { tool_position += 1; } | toplevel_definition optsemi { tool_position += 1; } ; directive: TK_SEPARATOR { Tool *tool; if( !is_top( current_symbol ) ) yyerror( _( "not top level" ) ); tool = tool_new_sep( current_kit, tool_position ); tool->lineno = input_state.lineno; input_reset(); } | TK_DIALOG TK_CONST TK_CONST { Tool *tool; if( !is_top( current_symbol ) ) yyerror( _( "not top level" ) ); /* Should have two strings. */ if( $2.type != PARSE_CONST_STR || $3.type != PARSE_CONST_STR ) yyerror( _( "not strings" ) ); /* Add tool. */ tool = tool_new_dia( current_kit, tool_position, $2.val.str, $3.val.str ); if( !tool ) yyerror( error_get_sub() ); tool->lineno = input_state.lineno; /* Cast away const here. */ tree_const_destroy( (ParseConst *) &$2 ); tree_const_destroy( (ParseConst *) &$3 ); input_reset(); } ; toplevel_definition: { last_top_lineno = input_state.lineno; scope_reset(); current_compile = root_symbol->expr->compile; } definition { input_reset(); } ; /* Parse a new defining occurence. This can be a local or a top-level. */ definition: simple_pattern { Symbol *sym; /* Two forms: , or . * Enforce the no-args-to-pattern-assignment rule in the arg * pattern parser. */ if( $1->type == NODE_LEAF ) { const char *name = IOBJECT( $1->leaf )->name; /* Make a new defining occurence. */ sym = symbol_new_defining( current_compile, name ); (void) symbol_user_init( sym ); (void) compile_new_local( sym->expr ); } else { char name[256]; /* We have . Make an anon symbol for this * value, then the variables in the pattern become * toplevels which access that. */ if( !compile_pattern_has_leaf( $1 ) ) yyerror( _( "left-hand-side pattern " "contains no identifiers" ) ); im_snprintf( name, 256, "$$pattern_lhs%d", parse_object_id++ ); sym = symbol_new_defining( current_compile, name ); sym->generated = TRUE; (void) symbol_user_init( sym ); (void) compile_new_local( sym->expr ); } /* Note on the enclosing last_sym. Things like the program * window use this to work out what sym to display after a * parse. symbol_dispose() is careful to NULL this out. */ current_compile->last_sym = sym; /* Initialise symbol parsing variables. Save old current symbol, * add new one. */ scope_push(); current_symbol = sym; current_compile = sym->expr->compile; g_assert( !current_compile->param ); g_assert( current_compile->nparam == 0 ); /* Junk any old def text. */ IM_FREE( current_compile->text ); IM_FREE( current_compile->prhstext ); IM_FREE( current_compile->rhstext ); } params_plus_rhs { compile_check( current_compile ); /* Link unresolved names into the outer scope. */ compile_resolve_names( current_compile, compile_get_parent( current_compile ) ); /* Is this the end of a top-level? Needs extra work to add to * the enclosing toolkit etc. */ if( is_scope( symbol_get_parent( current_symbol ) ) ) parse_toplevel_end( current_symbol ); /* Is this a pattern definition? Expand the pattern to a * set of access defs. */ if( $1->type != NODE_LEAF ) { Compile *parent = compile_get_parent( current_compile ); GSList *built_syms; built_syms = compile_pattern_lhs( parent, current_symbol, $1 ); if( is_scope( symbol_get_parent( current_symbol ) ) ) slist_map( built_syms, (SListMapFn) parse_toplevel_end, NULL ); slist_map( built_syms, (SListMapFn) parse_access_end, current_symbol ); g_slist_free( built_syms ); } scope_pop(); } ; /* Parse params/body/locals into current_expr */ params_plus_rhs: { input_push( 1 ); /* We've already read the character past the end of the * identifier (that's why we know the identifier is over). */ input_back1(); } params { input_push( 2 ); input_backtoch( '=' ); } body { current_compile->tree = $4; g_assert( current_compile->tree ); input_push( 4 ); } locals { char buf[MAX_STRSIZE]; input_pop(); /* Save body text as rhstext. */ IM_SETSTR( current_compile->rhstext, input_text( buf ) ); input_pop(); /* Save params '=' body as prhstext. */ IM_SETSTR( current_compile->prhstext, input_text( buf ) ); input_pop(); /* Save full text of definition. */ IM_SETSTR( current_compile->text, input_text( buf ) ); #ifdef DEBUG printf( "%s->compile->text = \"%s\"\n", IOBJECT( current_compile->sym )->name, current_compile->text ); printf( "%s->compile->prhstext = \"%s\"\n", IOBJECT( current_compile->sym )->name, current_compile->prhstext ); printf( "%s->compile->rhstext = \"%s\"\n", IOBJECT( current_compile->sym )->name, current_compile->rhstext ); #endif /*DEBUG*/ } ; params: /* Empty */ | params simple_pattern { Symbol *sym; /* If the pattern is just an identifier, make it a direct * parameter. Otherwise make an anon param and put the pattern * in as a local with the same id. * * fred [a] = 12; * * parses to: * * fred $$arg42 = 12 { $$patt42 = [a]; } * * A later pass creates the "a = $$arg42?0" definition. */ if( $2->type == NODE_LEAF ) { const char *name = IOBJECT( $2->leaf )->name; /* Make defining occurence. */ sym = symbol_new_defining( current_compile, name ); (void) symbol_parameter_init( sym ); } else { char name[256]; im_snprintf( name, 256, "$$arg%d", parse_object_id ); sym = symbol_new_defining( current_compile, name ); sym->generated = TRUE; (void) symbol_parameter_init( sym ); im_snprintf( name, 256, "$$patt%d", parse_object_id++ ); sym = symbol_new_defining( current_compile, name ); sym->generated = TRUE; (void) symbol_user_init( sym ); (void) compile_new_local( sym->expr ); sym->expr->compile->tree = $2; } } ; body : '=' TK_CLASS crhs { $$ = $3; } | rhs { $$ = $1; } ; crhs: { ParseNode *pn = tree_class_new( current_compile ); input_push( 3 ); scope_push(); current_symbol = current_compile->super; current_compile = current_symbol->expr->compile; current_parsenode = pn; } cexprlist { Compile *parent = compile_get_parent( current_compile ); char buf[MAX_STRSIZE]; int len; (void) input_text( buf ); /* Always read 1 char too many. */ if( (len = strlen( buf )) > 0 ) buf[len - 1] = '\0'; IM_SETSTR( current_compile->rhstext, buf ); input_pop(); current_compile->tree = $2; if( current_compile->tree->elist ) parent->has_super = TRUE; /* Do some checking. */ compile_check( current_compile ); /* Link unresolved names. */ compile_resolve_names( current_compile, parent ); scope_pop(); $$ = current_parsenode; current_parsenode = NULL; } ; rhs: '=' expr { $$ = $2; } | '=' expr ',' expr optsemi rhs { $$ = tree_ifelse_new( current_compile, $4, $2, $6 ); } ; locals: ';' | '{' deflist '}' | '{' '}' ; optsemi: /* Empty */ | ';' optsemi ; deflist: definition { input_pop(); input_push( 5 ); } optsemi | deflist definition { input_pop(); input_push( 6 ); } optsemi ; cexprlist: /* Empty */ { $$ = tree_super_new( current_compile ); } | cexprlist expr %prec TK_APPLICATION { $$ = tree_super_extend( current_compile, $1, $2 ); } ; expr: '(' expr ')' { $$ = $2; } | TK_CONST { $$ = tree_const_new( current_compile, $1 ); } | TK_IDENT { $$ = tree_leaf_new( current_compile, $1 ); im_free( $1 ); } | TK_TAG { $$ = tree_tag_new( current_compile, $1 ); im_free( $1 ); } | TK_SCOPE { $$ = tree_leaf_new( current_compile, IOBJECT( symbol_get_scope( current_symbol ) )->name ); } | TK_IF expr TK_THEN expr TK_ELSE expr %prec TK_IF { $$ = tree_ifelse_new( current_compile, $2, $4, $6 ); } | expr expr %prec TK_APPLICATION { $$ = tree_appl_new( current_compile, $1, $2 ); } | lambda | list_expression { $$ = $1; } | '(' expr ',' expr ')' { $$ = tree_binop_new( current_compile, BI_COMMA, $2, $4 ); } | binop | uop ; lambda: TK_LAMBDA TK_IDENT %prec TK_LAMBDA { char name[256]; Symbol *sym; /* Make an anonymous symbol local to the current sym, compile * the expr inside that. */ im_snprintf( name, 256, "$$lambda%d", parse_object_id++ ); sym = symbol_new_defining( current_compile, name ); sym->generated = TRUE; (void) symbol_user_init( sym ); (void) compile_new_local( sym->expr ); /* Initialise symbol parsing variables. Save old current symbol, * add new one. */ scope_push(); current_symbol = sym; current_compile = sym->expr->compile; /* Make the parameter. */ sym = symbol_new_defining( current_compile, $2 ); symbol_parameter_init( sym ); im_free( $2 ); } expr { Symbol *sym; current_compile->tree = $4; if( !compile_check( current_compile ) ) yyerror( error_get_sub() ); /* Link unresolved names in to the outer scope. */ compile_resolve_names( current_compile, compile_get_parent( current_compile ) ); /* The value of the expr is the anon we defined. */ sym = current_symbol; scope_pop(); $$ = tree_leafsym_new( current_compile, sym ); } ; list_expression: '[' expr TK_DOTDOTDOT ']' { $$ = tree_generator_new( current_compile, $2, NULL, NULL ); } | '[' expr TK_DOTDOTDOT expr ']' { $$ = tree_generator_new( current_compile, $2, NULL, $4 ); } | '[' expr ',' expr TK_DOTDOTDOT ']' { $$ = tree_generator_new( current_compile, $2, $4, NULL ); } | '[' expr ',' expr TK_DOTDOTDOT expr ']' { $$ = tree_generator_new( current_compile, $2, $4, $6 ); } | '[' expr TK_SUCHTHAT { char name[256]; Symbol *sym; Compile *enclosing = current_compile; /* Make an anonymous symbol local to the current sym, copy * the map expr inside that. */ im_snprintf( name, 256, "$$lcomp%d", parse_object_id++ ); sym = symbol_new_defining( current_compile, name ); (void) symbol_user_init( sym ); sym->generated = TRUE; (void) compile_new_local( sym->expr ); /* Push a new scope. */ scope_push(); current_symbol = sym; current_compile = sym->expr->compile; /* Somewhere to save the result expr. We have to copy the * expr, as we want it to be bound in $$lcomp's context so * that it can see the generators. */ sym = symbol_new_defining( current_compile, "$$result" ); sym->generated = TRUE; sym->placeholder = TRUE; (void) symbol_user_init( sym ); (void) compile_new_local( sym->expr ); sym->expr->compile->tree = compile_copy_tree( enclosing, $2, sym->expr->compile ); } generator frompred_list ']' { Symbol *sym; /* The map expr can refer to generator names. Resolve inwards * so it links to the generators. */ compile_resolve_names( compile_get_parent( current_compile ), current_compile ); /* Generate the code for the list comp. */ compile_lcomp( current_compile ); compile_check( current_compile ); /* Link unresolved names outwards. */ compile_resolve_names( current_compile, compile_get_parent( current_compile ) ); /* The value of the expr is the anon we defined. */ sym = current_symbol; scope_pop(); $$ = tree_leafsym_new( current_compile, sym ); } | '[' comma_list ']' { $$ = $2; } | '[' ']' { ParseConst elist; elist.type = PARSE_CONST_ELIST; $$ = tree_const_new( current_compile, elist ); } ; frompred_list: /* Empty */ { } | frompred_list ';' frompred { } ; generator: simple_pattern TK_FROM expr { char name[256]; Symbol *sym; im_snprintf( name, 256, "$$pattern%d", parse_object_id ); sym = symbol_new_defining( current_compile, name ); sym->generated = TRUE; sym->placeholder = TRUE; (void) symbol_user_init( sym ); (void) compile_new_local( sym->expr ); sym->expr->compile->tree = $1; im_snprintf( name, 256, "$$generator%d", parse_object_id++ ); sym = symbol_new_defining( current_compile, name ); sym->generated = TRUE; sym->placeholder = TRUE; (void) symbol_user_init( sym ); (void) compile_new_local( sym->expr ); sym->expr->compile->tree = $3; } ; frompred: generator | expr { char name[256]; Symbol *sym; im_snprintf( name, 256, "$$filter%d", parse_object_id++ ); sym = symbol_new_defining( current_compile, name ); sym->generated = TRUE; sym->placeholder = TRUE; (void) symbol_user_init( sym ); (void) compile_new_local( sym->expr ); sym->expr->compile->tree = $1; } ; comma_list: expr ',' comma_list { $$ = tree_lconst_extend( current_compile, $3, $1 ); } | expr { $$ = tree_lconst_new( current_compile, $1 ); } ; /* How odd, break the "'+' { BI_ADD } | ..." into a separate production and we * get reduce/reduce conflits. Copypaste a lot instead. */ binop: expr '+' expr { $$ = tree_binop_new( current_compile, BI_ADD, $1, $3 ); } | expr ':' expr { $$ = tree_binop_new( current_compile, BI_CONS, $1, $3 ); } | expr '-' expr { $$ = tree_binop_new( current_compile, BI_SUB, $1, $3 ); } | expr '?' expr { $$ = tree_binop_new( current_compile, BI_SELECT, $1, $3 ); } | expr '/' expr { $$ = tree_binop_new( current_compile, BI_DIV, $1, $3 ); } | expr '*' expr { $$ = tree_binop_new( current_compile, BI_MUL, $1, $3 ); } | expr '%' expr { $$ = tree_binop_new( current_compile, BI_REM, $1, $3 ); } | expr TK_JOIN expr { $$ = tree_binop_new( current_compile, BI_JOIN, $1, $3 ); } | expr TK_POW expr { $$ = tree_binop_new( current_compile, BI_POW, $1, $3 ); } | expr TK_LSHIFT expr { $$ = tree_binop_new( current_compile, BI_LSHIFT, $1, $3 ); } | expr TK_RSHIFT expr { $$ = tree_binop_new( current_compile, BI_RSHIFT, $1, $3 ); } | expr '^' expr { $$ = tree_binop_new( current_compile, BI_EOR, $1, $3 ); } | expr TK_LAND expr { $$ = tree_binop_new( current_compile, BI_LAND, $1, $3 ); } | expr TK_BAND expr { $$ = tree_binop_new( current_compile, BI_BAND, $1, $3 ); } | expr '@' expr { $$ = tree_compose_new( current_compile, $1, $3 ); } | expr TK_LOR expr { $$ = tree_binop_new( current_compile, BI_LOR, $1, $3 ); } | expr TK_BOR expr { $$ = tree_binop_new( current_compile, BI_BOR, $1, $3 ); } | expr TK_LESS expr { $$ = tree_binop_new( current_compile, BI_LESS, $1, $3 ); } | expr TK_LESSEQ expr { $$ = tree_binop_new( current_compile, BI_LESSEQ, $1, $3 ); } | expr TK_MORE expr { $$ = tree_binop_new( current_compile, BI_MORE, $1, $3 ); } | expr TK_MOREEQ expr { $$ = tree_binop_new( current_compile, BI_MOREEQ, $1, $3 ); } | expr TK_EQ expr { $$ = tree_binop_new( current_compile, BI_EQ, $1, $3 ); } | expr TK_NOTEQ expr { $$ = tree_binop_new( current_compile, BI_NOTEQ, $1, $3 ); } | expr TK_PEQ expr { $$ = tree_binop_new( current_compile, BI_PEQ, $1, $3 ); } | expr TK_PNOTEQ expr { $$ = tree_binop_new( current_compile, BI_PNOTEQ, $1, $3 ); } | expr '.' expr { $$ = tree_binop_new( current_compile, BI_DOT, $1, $3 ); } | expr TK_DIFF expr { ParseNode *pn1, *pn2; pn1 = tree_leaf_new( current_compile, "difference" ); pn2 = tree_leaf_new( current_compile, "equal" ); pn1 = tree_appl_new( current_compile, pn1, pn2 ); pn1 = tree_appl_new( current_compile, pn1, $1 ); pn1 = tree_appl_new( current_compile, pn1, $3 ); $$ = pn1; } | expr TK_TO expr { ParseNode *pn; pn = tree_leaf_new( current_compile, "mknvpair" ); pn = tree_appl_new( current_compile, pn, $1 ); pn = tree_appl_new( current_compile, pn, $3 ); $$ = pn; } ; signed: /* Nothing */ | TK_SIGNED ; unsigned: /* Nothing */ | TK_UNSIGNED ; uop: '(' unsigned TK_CHAR ')' expr %prec TK_UMINUS { $$ = tree_unop_new( current_compile, UN_CUCHAR, $5 ); } | '(' TK_SIGNED TK_CHAR ')' expr %prec TK_UMINUS { $$ = tree_unop_new( current_compile, UN_CSCHAR, $5 ); } | '(' signed TK_SHORT ')' expr %prec TK_UMINUS { $$ = tree_unop_new( current_compile, UN_CSSHORT, $5 ); } | '(' TK_UNSIGNED TK_SHORT ')' expr %prec TK_UMINUS { $$ = tree_unop_new( current_compile, UN_CUSHORT, $5 ); } | '(' signed TK_INT ')' expr %prec TK_UMINUS { $$ = tree_unop_new( current_compile, UN_CSINT, $5 ); } | '(' TK_UNSIGNED TK_INT ')' expr %prec TK_UMINUS { $$ = tree_unop_new( current_compile, UN_CUINT, $5 ); } | '(' TK_FLOAT ')' expr %prec TK_UMINUS { $$ = tree_unop_new( current_compile, UN_CFLOAT, $4 ); } | '(' TK_DOUBLE ')' expr %prec TK_UMINUS { $$ = tree_unop_new( current_compile, UN_CDOUBLE, $4 ); } | '(' TK_COMPLEX ')' expr %prec TK_UMINUS { $$ = tree_unop_new( current_compile, UN_CCOMPLEX, $4 ); } | '(' TK_DOUBLE TK_COMPLEX ')' expr %prec TK_UMINUS { $$ = tree_unop_new( current_compile, UN_CDCOMPLEX, $5 ); } | TK_UMINUS expr { $$ = tree_unop_new( current_compile, UN_MINUS, $2 ); } | '!' expr { $$ = tree_unop_new( current_compile, UN_NEG, $2 ); } | '~' expr { $$ = tree_unop_new( current_compile, UN_COMPLEMENT, $2 ); } | TK_UPLUS expr { $$ = tree_unop_new( current_compile, UN_PLUS, $2 ); } ; /* Stuff that can appear on the LHS of an equals, or as a parameter pattern. */ simple_pattern: leaf_pattern | '(' leaf_pattern ',' leaf_pattern ')' { $$ = tree_binop_new( current_compile, BI_COMMA, $2, $4 ); } | simple_pattern ':' simple_pattern { $$ = tree_binop_new( current_compile, BI_CONS, $1, $3 ); } | '(' complex_pattern ')' { $$ = $2; } | '[' list_pattern ']' { $$ = $2; } | '[' ']' { ParseConst elist; elist.type = PARSE_CONST_ELIST; $$ = tree_const_new( current_compile, elist ); } ; /* Stuff that can appear in a complex (a, b) pattern. */ leaf_pattern: TK_IDENT { $$ = tree_leaf_new( current_compile, $1 ); im_free( $1 ); } | TK_CONST { $$ = tree_const_new( current_compile, $1 ); } ; /* What can appear in round brackets or a comma list. */ complex_pattern: TK_IDENT TK_IDENT { $$ = tree_pattern_class_new( current_compile, $1, tree_leaf_new( current_compile, $2 ) ); im_free( $1 ); im_free( $2 ); } | simple_pattern ; list_pattern: complex_pattern ',' list_pattern { $$ = tree_lconst_extend( current_compile, $3, $1 ); } | complex_pattern { $$ = tree_lconst_new( current_compile, $1 ); } ; %% /* Return point on syntax error. */ jmp_buf parse_error_point; /* Text we've lexed. */ char lex_text_buffer[MAX_STRSIZE]; VipsBuf lex_text = VIPS_BUF_STATIC( lex_text_buffer ); /* State of input system. */ InputState input_state; /* Defintions for the static decls at the top. We have to put the defs down * here to mkake sure they don't creep in to the generated parser.h. */ /* Actually, we can't make these static :-( since they are declared extern at * the top of the file. */ Symbol *current_symbol; Symbol *root_symbol; Compile *current_compile = NULL; ParseNode *current_parsenode = NULL; Toolkit *current_kit; int tool_position; int last_top_lineno; Symbol *scope_stack_symbol[MAX_SSTACK]; Compile *scope_stack_compile[MAX_SSTACK]; int scope_sp = 0; int parse_object_id = 0; /* Here for errors in parse. * * Bison calls yyerror with only a char* arg. This printf() version is called * from nip2 in a few places during parse. */ void nip2yyerror( const char *sub, ... ) { va_list ap; char buf[4096]; va_start( ap, sub ); (void) im_vsnprintf( buf, 4096, sub, ap ); va_end( ap ); error_top( _( "Parse error." ) ); if( current_compile && current_compile->last_sym ) error_sub( _( "Error in %s: %s" ), IOBJECT( current_compile->last_sym )->name, buf ); else error_sub( _( "Error: %s" ), buf ); longjmp( parse_error_point, -1 ); } /* Bison calls this. */ void yyerror( const char *msg ) { nip2yyerror( "%s", msg ); } /* Attach yyinput to a file. */ void attach_input_file( iOpenFile *of ) { InputState *is = &input_state; #ifdef DEBUG printf( "attach_input_file: \"%s\"\n", of->fname ); #endif /*DEBUG*/ /* Need to clear flex/bison's buffers in case we abandoned the * previous parse. */ yyrestart( NULL ); is->of = of; is->str = NULL; is->strpos = NULL; is->bwp = 0; is->bspsp = 0; is->bsp[is->bspsp] = 0; is->lineno = 1; is->charno = 0; is->pcharno = 0; is->charpos = 0; is->oldchar = -1; /* Init text gatherer. */ vips_buf_rewind( &lex_text ); } /* Attach yyinput to a string. */ void attach_input_string( const char *str ) { InputState *is = &input_state; #ifdef DEBUG printf( "attach_input_string: \"%s\"\n", str ); #endif /*DEBUG*/ yyrestart( NULL ); is->of = NULL; is->str = (char *) str; is->strpos = (char *) str; is->bwp = 0; is->bspsp = 0; is->bsp[is->bspsp] = 0; is->lineno = 1; is->charno = 0; is->pcharno = 0; is->charpos = 0; is->oldchar = -1; /* Init text gatherer. */ vips_buf_rewind( &lex_text ); } /* Read a character from the input. */ int ip_input( void ) { InputState *is = &input_state; int ch; if( is->oldchar >= 0 ) { /* From unget buffer. */ ch = is->oldchar; is->oldchar = -1; } else if( is->of ) { /* Input from file. */ if( (ch = getc( is->of->fp )) == EOF ) return( 0 ); } else { /* Input from string. */ if( (ch = *is->strpos) ) is->strpos++; else /* No counts to update! */ return( 0 ); } /* Update counts. */ if( ch == '\n' ) { is->lineno++; is->pcharno = is->charno + 1; is->charno = 0; } is->charno++; is->charpos++; /* Add this character to the characters we have accumulated for this * definition. */ if( is->bwp >= MAX_STRSIZE ) yyerror( _( "definition is too long" ) ); if( is->bwp >= 0 ) is->buf[is->bwp] = ch; is->bwp++; /* Add to lex text buffer. */ if( is->charno > 0 ) vips_buf_appendc( &lex_text, ch ); #ifdef DEBUG_CHARACTER printf( "ip_input: returning '%c'\n", ch ); #endif /*DEBUG_CHARACTER*/ return( ch ); } /* Unget an input character. */ void ip_unput( int ch ) { InputState *is = &input_state; #ifdef DEBUG_CHARACTER printf( "ip_unput: ungetting '%c'\n", ch ); #endif /*DEBUG_CHARACTER*/ /* Is lex trying to unget the end-of-file marker? Do nothing if it is. */ if( !ch ) return; if( is->of ) { if( ungetc( ch, is->of->fp ) == EOF ) error( "unget buffer overflow" ); } else /* Save extra char here. */ is->oldchar = ch; /* Redo counts. */ if( ch == '\n' ) { is->lineno--; /* Restore previous charno. */ is->charno = is->pcharno; is->pcharno = 0; } is->charno--; is->charpos--; is->bwp--; /* Unget from lex text buffer. */ if( is->charno > 0 ) vips_buf_removec( &lex_text, ch ); } /* Test for end-of-input. */ gboolean is_EOF( void ) { InputState *is = &input_state; if( is->of ) return( feof( is->of->fp ) ); else return( *is->str == '\0' ); } /* Return the text we have accumulated for the current definition. Remove * leading and trailing whitespace and spare semicolons. out needs to be * MAX_STRSIZE. */ char * input_text( char *out ) { InputState *is = &input_state; const char *buf = is->buf; int start = is->bsp[is->bspsp]; int end = is->bwp; int len; int i; for( i = start; i < end && (isspace( buf[i] ) || buf[i] == ';'); i++ ) ; start = i; for( i = end - 1; i > start && (isspace( buf[i] ) || buf[i] == ';'); i-- ) ; end = i + 1; len = end - start; g_assert( len < MAX_STRSIZE - 1 ); im_strncpy( out, buf + start, len + 1 ); out[len] = '\0'; #ifdef DEBUG_CHARACTER printf( "input_text: level %d, returning \"%s\"\n", is->bspsp, out ); #endif /*DEBUG_CHARACTER*/ return( out ); } /* Reset/push/pop input stacks. */ void input_reset( void ) { InputState *is = &input_state; #ifdef DEBUG_CHARACTER printf( "input_reset:\n" ); #endif /*DEBUG_CHARACTER*/ is->bwp = 0; is->bspsp = 0; is->bsp[0] = 0; vips_buf_rewind( &lex_text ); } void input_push( int n ) { InputState *is = &input_state; #ifdef DEBUG_CHARACTER printf( "input_push(%d): going to level %d, %d bytes into buffer\n", n, is->bspsp + 1, is->bwp ); { const int len = IM_MIN( is->bwp, 20 ); int i; for( i = is->bwp - len; i < is->bwp; i++ ) if( is->buf[i] == '\n' ) printf( "@" ); else if( is->buf[i] == ' ' || is->buf[i] == '\t' ) printf( "_" ); else printf( "%c", is->buf[i] ); printf( "\n" ); for( i = 0; i < len; i++ ) printf( "-" ); printf( "^\n" ); } #endif /*DEBUG_CHARACTER*/ is->bspsp += 1; if( is->bspsp >= MAX_SSTACK ) error( "bstack overflow" ); is->bsp[is->bspsp] = is->bwp; } /* Yuk! We've just done an input_push() to try to grab the RHS of a * definition ... unfortunately, due to token readahead, we've probably * already read the start of the RHS. * * Back up the start point to just after the last ch character. */ void input_backtoch( char ch ) { InputState *is = &input_state; int i; for( i = is->bsp[is->bspsp] - 1; i > 0 && is->buf[i] != ch; i-- ) ; if( is->buf[i] == ch ) is->bsp[is->bspsp] = i + 1; } /* Move the last input_push() point back 1 character. */ void input_back1( void ) { InputState *is = &input_state; if( is->bsp[is->bspsp] > 0 ) is->bsp[is->bspsp] -= 1; } void input_pop( void ) { InputState *is = &input_state; #ifdef DEBUG_CHARACTER printf( "input_pop: %d bytes into buffer\n", input_state.bwp ); #endif /*DEBUG_CHARACTER*/ if( is->bspsp <= 0 ) error( "bstack underflow" ); is->bspsp--; } void scope_push( void ) { if( scope_sp == MAX_SSTACK ) error( "sstack overflow" ); scope_stack_symbol[scope_sp] = current_symbol; scope_stack_compile[scope_sp] = current_compile; scope_sp += 1; } void scope_pop( void ) { if( scope_sp <= 0 ) error( "sstack underflow" ); scope_sp -= 1; current_symbol = scope_stack_symbol[scope_sp]; current_compile = scope_stack_compile[scope_sp]; } /* Back to the outermost scope. */ void scope_pop_all( void ) { if( scope_sp > 0 ) { scope_sp = 0; current_symbol = scope_stack_symbol[scope_sp]; current_compile = scope_stack_compile[scope_sp]; } } /* Reset/push/pop parser stacks. */ void scope_reset( void ) { scope_sp = 0; } /* End of top level parse. Fix up the symbol. */ void * parse_toplevel_end( Symbol *sym ) { Tool *tool; tool = tool_new_sym( current_kit, tool_position, sym ); tool->lineno = last_top_lineno; symbol_made( sym ); return( NULL ); } /* Built a pattern access definition. Set the various text fragments from the * def we are drived from. */ void * parse_access_end( Symbol *sym, Symbol *main ) { IM_SETSTR( sym->expr->compile->rhstext, main->expr->compile->rhstext ); IM_SETSTR( sym->expr->compile->prhstext, main->expr->compile->prhstext ); IM_SETSTR( sym->expr->compile->text, main->expr->compile->text ); return( NULL ); } /* Interface to parser. */ static gboolean parse_input( int ch, Symbol *sym, Toolkit *kit, int pos ) { current_kit = kit; current_symbol = sym; root_symbol = sym; tool_position = pos; scope_reset(); input_reset(); /* Signal start nonterminal to parser. */ ip_unput( ch ); if( setjmp( parse_error_point ) ) { /* Restore current_compile. */ scope_pop_all(); if( current_compile ) compile_error_set( current_compile ); return( FALSE ); } yyparse(); /* All ok. */ return( TRUE ); } /* Parse the input into a set of symbols at a position in a kit. * kit may be NULL for no kit. */ gboolean parse_toplevel( Toolkit *kit, int pos ) { gboolean result; current_compile = NULL; result = parse_input( ',', kit->kitg->root, kit, pos ); iobject_changed( IOBJECT( kit ) ); return( result ); } /* Parse a single top-level definition. */ gboolean parse_onedef( Toolkit *kit, int pos ) { gboolean result; current_compile = NULL; result = parse_input( '^', kit->kitg->root, kit, pos ); iobject_changed( IOBJECT( kit ) ); return( result ); } /* Parse new text into "expr". If params is set, str should be "a b = a+b" * (ie. include params), if not, then just rhs (eg. "a+b"). */ gboolean parse_rhs( Expr *expr, ParseRhsSyntax syntax ) { static const char start_ch_table[] = { '&', /* PARSE_RHS */ '*', /* PARSE_PARAMS */ '@' /* PARSE_SUPER */ }; char start_ch = start_ch_table[(int) syntax]; Compile *compile = compile_new_local( expr ); current_compile = compile; if( !parse_input( start_ch, expr->sym, NULL, -1 ) ) { current_compile = NULL; return( FALSE ); } current_compile = NULL; #ifdef DEBUG printf( "parse_rhs:\n" ); dump_tree( compile->tree ); #endif /*DEBUG*/ /* Resolve any dynamic refs. */ expr_resolve( expr ); /* Compile. */ if( compile_object( compile ) ) return( FALSE ); return( TRUE ); } /* Free any stuff the lexer might have allocated. */ void free_lex( int yychar ) { switch( yychar ) { case TK_CONST: tree_const_destroy( &yylval.yy_const ); break; case TK_IDENT: case TK_TAG: IM_FREE( yylval.yy_name ); break; default: break; } } /* Do we have a string of the form "IDENT = .."? Use the lexer to look along * the string checking components, return the IDENT if we do, NULL otherwise. */ char * parse_test_define( void ) { extern int yylex( void ); int yychar; char *ident; ident = NULL; if( setjmp( parse_error_point ) ) { /* Here for yyerror in lex. */ IM_FREE( ident ); return( NULL ); } if( (yychar = yylex()) != TK_IDENT ) { free_lex( yychar ); return( NULL ); } ident = yylval.yy_name; if( (yychar = yylex()) != '=' ) { free_lex( yychar ); IM_FREE( ident ); return( NULL ); } return( ident ); } /* Do we have a string like "Workspaces.untitled.A1 = .."? Check for the * symbols as we see them, make the last one and return it. Used by --set. */ Symbol * parse_set_symbol( void ) { int yychar; extern int yylex( void ); Compile *compile = symbol_root->expr->compile; char *ident; Symbol *sym; ident = NULL; if( setjmp( parse_error_point ) ) { /* Here for yyerror in lex. */ IM_FREE( ident ); return( NULL ); } do { if( (yychar = yylex()) != TK_IDENT && yychar != TK_TAG ) { free_lex( yychar ); yyerror( _( "identifier expected" ) ); } ident = yylval.yy_name; switch( (yychar = yylex()) ) { case '.': /* There's a dot, so we expect another identifier to * come. Look up this one and move to that context. */ if( !(sym = compile_lookup( compile, ident )) ) nip2yyerror( _( "'%s' does not exist" ), ident ); if( !sym->expr || !sym->expr->compile ) nip2yyerror( _( "'%s' has no members" ), ident ); compile = sym->expr->compile; IM_FREE( ident ); break; case '=': /* This is the final identifier: create the symbol in * this context. */ sym = symbol_new_defining( compile, ident ); IM_FREE( ident ); break; default: free_lex( yychar ); yyerror( _( "'.' or '=' expected" ) ); } } while( yychar != '=' ); return( sym ); } nip2-8.7.0/src/error.c0000644000175000017500000001165113224651032011405 00000000000000/* ierror window */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #include "ip.h" static LogClass *parent_class = NULL; static void * ierror_print( Expr *expr, iError *ierror, gboolean *found ) { char txt[1024]; VipsBuf buf = VIPS_BUF_STATIC( txt ); expr_error_print( expr, &buf ); log_text( LOG( ierror ), vips_buf_all( &buf ) ); *found = TRUE; return( NULL ); } static void ierror_show_all( iError *ierror ) { gboolean found; found = FALSE; slist_map2( expr_error_all, (SListMap2Fn) ierror_print, ierror, &found ); if( !found ) { log_text( LOG( ierror ), _( "No ierrors found." ) ); log_text( LOG( ierror ), "\n" ); } } static void ierror_show_all_action_cb( GtkAction *action, iError *ierror ) { ierror_show_all( ierror ); } static void * unresolved_print_tool( Tool *tool, iError *ierror, gboolean *found ) { char txt[MAX_STRSIZE]; VipsBuf buf = VIPS_BUF_STATIC( txt ); tool_linkreport_tool( tool, &buf, found ); log_text( LOG( ierror ), vips_buf_all( &buf ) ); return( NULL ); } static void * unresolved_print( Toolkit *kit, iError *ierror, gboolean *found ) { toolkit_map( kit, (tool_map_fn) unresolved_print_tool, ierror, found ); return( NULL ); } static void unresolved_show_all( iError *ierror ) { gboolean found; found = FALSE; (void) toolkitgroup_map( ierror->kitg, (toolkit_map_fn) unresolved_print, ierror, &found ); if( !found ) { log_text( LOG( ierror ), _( "No unresolved symbols found." ) ); log_text( LOG( ierror ), "\n" ); } } static void unresolved_show_all_action_cb( GtkAction *action, iError *ierror ) { unresolved_show_all( ierror ); } /* Our actions. */ static GtkActionEntry ierror_actions[] = { { "Clear", NULL, N_( "_Clear" ), NULL, N_( "Clear ierror window" ), G_CALLBACK( log_clear_action_cb ) }, { "iErrors", NULL, N_( "List _iErrors" ), NULL, N_( "Search for all ierrors" ), G_CALLBACK( ierror_show_all_action_cb ) }, { "Unresolved", NULL, N_( "List _Unresolved" ), NULL, N_( "Search for all unresolved references" ), G_CALLBACK( unresolved_show_all_action_cb ) } }; static const char *ierror_menubar_ui_description = "" " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " ""; static void ierror_class_init( iErrorClass *class ) { LogClass *log_class = (LogClass *) class; parent_class = g_type_class_peek_parent( class ); log_class->actions = ierror_actions; log_class->n_actions = IM_NUMBER( ierror_actions ); log_class->action_name = "iErrorActions"; log_class->ui_description = ierror_menubar_ui_description; log_class->menu_bar_name = "/iErrorMenubar"; } static void ierror_init( iError *ierror ) { } GtkType ierror_get_type( void ) { static GtkType type = 0; if( !type ) { static const GtkTypeInfo info = { "iError", sizeof( iError ), sizeof( iErrorClass ), (GtkClassInitFunc) ierror_class_init, (GtkObjectInitFunc) ierror_init, /* reserved_1 */ NULL, /* reserved_2 */ NULL, (GtkClassInitFunc) NULL, }; type = gtk_type_unique( TYPE_LOG, &info ); } return( type ); } static void ierror_link( iError *ierror, Toolkitgroup *kitg ) { ierror->kitg = kitg; destroy_if_destroyed( G_OBJECT( ierror ), G_OBJECT( kitg ), (DestroyFn) gtk_widget_destroy ); iwindow_set_title( IWINDOW( ierror ), _( "iError - %s" ), IOBJECT( kitg )->name ); gtk_window_set_default_size( GTK_WINDOW( ierror ), 640, 480 ); iwindow_set_size_prefs( IWINDOW( ierror ), "IERROR_WIDTH", "IERROR_HEIGHT" ); iwindow_build( IWINDOW( ierror ) ); } iError * ierror_new( Toolkitgroup *kitg ) { iError *ierror = gtk_type_new( TYPE_IERROR ); ierror_link( ierror, kitg ); ierror_show_all( ierror ); unresolved_show_all( ierror ); return( ierror ); } nip2-8.7.0/src/expressionview.c0000644000175000017500000001404413224651032013345 00000000000000/* a view of a text thingy */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #include "ip.h" static GraphicviewClass *parent_class = NULL; /* Re-read the text in a tally entry. */ static void * expressionview_scan( View *view ) { Expressionview *expressionview = EXPRESSIONVIEW( view ); Expression *expression = EXPRESSION( VOBJECT( expressionview )->iobject ); iText *itext = expression_get_itext( expression ); #ifdef DEBUG { Row *row = HEAPMODEL( expression )->row; printf( "expressionview_scan: " ); row_name_print( row ); printf( "\n" ); } #endif /*DEBUG*/ if( itext && formula_scan( expressionview->formula ) && itext_set_formula( itext, expressionview->formula->expr ) ) { itext_set_edited( itext, TRUE ); /* ... make sure MEMBER_VALUE gets marked dirty too. */ expr_dirty( HEAPMODEL( itext )->row->expr, link_serial_new() ); } return( VIEW_CLASS( parent_class )->scan( view ) ); } void expressionview_activate_cb( GtkWidget *wid, Expressionview *expressionview ) { Expression *expression = EXPRESSION( VOBJECT( expressionview )->iobject ); Row *row = HEAPMODEL( expression )->row; /* Reset edits on this row and all children. */ (void) icontainer_map_all( ICONTAINER( row ), (icontainer_map_fn) heapmodel_clear_edited, NULL ); /* Make sure we scan this text, even if it's not been edited. */ view_scannable_register( VIEW( expressionview ) ); workspace_set_modified( row->ws, TRUE ); symbol_recalculate_all(); } static void expressionview_refresh( vObject *vobject ) { Expressionview *expressionview = EXPRESSIONVIEW( vobject ); Expression *expression = EXPRESSION( VOBJECT( expressionview )->iobject ); iText *itext = expression_get_itext( expression ); Row *row = HEAPMODEL( expression )->row; #ifdef DEBUG printf( "expressionview_refresh: " ); row_name_print( row ); printf( " (%p)\n", vobject ); #endif /*DEBUG*/ formula_set_edit( expressionview->formula, row->ws->mode == WORKSPACE_MODE_FORMULA ); if( itext ) formula_set_value_expr( expressionview->formula, vips_buf_all( &itext->value ), itext->formula ); if( vobject->iobject->caption ) formula_set_caption( expressionview->formula, vobject->iobject->caption ); VOBJECT_CLASS( parent_class )->refresh( vobject ); } static void expressionview_set_edit( Expressionview *expressionview, gboolean edit ) { formula_set_edit( expressionview->formula, edit ); if( edit ) view_resettable_register( VIEW( expressionview ) ); } static void expressionview_link( View *view, Model *model, View *parent ) { Expressionview *expressionview = EXPRESSIONVIEW( view ); Expression *expression = EXPRESSION( model ); Row *row = HEAPMODEL( expression )->row; #ifdef DEBUG printf( "expressionview_link: " ); row_name_print( row ); printf( "\n" ); #endif /*DEBUG*/ VIEW_CLASS( parent_class )->link( view, model, parent ); if( GRAPHICVIEW( view )->sview ) gtk_size_group_add_widget( GRAPHICVIEW( view )->sview->group, expressionview->formula->left_label ); /* Edit mode defaults to edit mode for workspace. */ expressionview_set_edit( expressionview, row->ws->mode == WORKSPACE_MODE_FORMULA ); } /* Reset edit mode ... go back to whatever is set for this ws. */ static void expressionview_reset( View *view ) { Expressionview *expressionview = EXPRESSIONVIEW( view ); Expression *expression = EXPRESSION( VOBJECT( expressionview )->iobject ); Row *row = HEAPMODEL( expression )->row; expressionview_set_edit( expressionview, row->ws->mode == WORKSPACE_MODE_FORMULA ); } static void expressionview_class_init( ExpressionviewClass *class ) { vObjectClass *vobject_class = (vObjectClass *) class; ViewClass *view_class = (ViewClass *) class; parent_class = g_type_class_peek_parent( class ); /* Create signals. */ /* Init methods. */ vobject_class->refresh = expressionview_refresh; view_class->link = expressionview_link; view_class->reset = expressionview_reset; view_class->scan = expressionview_scan; } static void expressionview_init( Expressionview *expressionview ) { expressionview->formula = formula_new(); gtk_signal_connect_object( GTK_OBJECT( expressionview->formula ), "changed", GTK_SIGNAL_FUNC( view_changed_cb ), GTK_OBJECT( expressionview ) ); gtk_signal_connect( GTK_OBJECT( expressionview->formula ), "activate", GTK_SIGNAL_FUNC( expressionview_activate_cb ), expressionview ); gtk_box_pack_start( GTK_BOX( expressionview ), GTK_WIDGET( expressionview->formula ), TRUE, FALSE, 0 ); gtk_widget_show( GTK_WIDGET( expressionview->formula ) ); } GtkType expressionview_get_type( void ) { static GtkType expressionview_type = 0; if( !expressionview_type ) { static const GtkTypeInfo expressionview_info = { "Expressionview", sizeof( Expressionview ), sizeof( ExpressionviewClass ), (GtkClassInitFunc) expressionview_class_init, (GtkObjectInitFunc) expressionview_init, /* reserved_1 */ NULL, /* reserved_2 */ NULL, (GtkClassInitFunc) NULL, }; expressionview_type = gtk_type_unique( TYPE_GRAPHICVIEW, &expressionview_info ); } return( expressionview_type ); } View * expressionview_new( void ) { Expressionview *expressionview = gtk_type_new( TYPE_EXPRESSIONVIEW ); return( VIEW( expressionview ) ); } nip2-8.7.0/src/real.h0000644000175000017500000000265213224651032011205 00000000000000/* a real in a workspace */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_REAL (real_get_type()) #define REAL( obj ) (GTK_CHECK_CAST( (obj), TYPE_REAL, Real )) #define REAL_CLASS( klass ) \ (GTK_CHECK_CLASS_CAST( (klass), TYPE_REAL, RealClass )) #define IS_REAL( obj ) (GTK_CHECK_TYPE( (obj), TYPE_REAL )) #define IS_REAL_CLASS( klass ) \ (GTK_CHECK_CLASS_TYPE( (klass), TYPE_REAL )) typedef struct _Real { Value parent_object; /* Private ... build iobject caption here. */ } Real; typedef struct _RealClass { ValueClass parent_class; /* My methods. */ } RealClass; GType real_get_type( void ); nip2-8.7.0/src/managedgvalue.c0000644000175000017500000000644613224651032013062 00000000000000/* a managedgvalue gvalue */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #include "ip.h" /* #define DEBUG */ static ManagedClass *parent_class = NULL; static void managedgvalue_dispose( GObject *gobject ) { Managedgvalue *managedgvalue = MANAGEDGVALUE( gobject ); #ifdef DEBUG printf( "managedgvalue_dispose: " ); iobject_print( IOBJECT( managedgvalue ) ); #endif /*DEBUG*/ g_value_unset( &managedgvalue->value ); G_OBJECT_CLASS( parent_class )->dispose( gobject ); } static void managedgvalue_info( iObject *iobject, VipsBuf *buf ) { Managedgvalue *managedgvalue = MANAGEDGVALUE( iobject ); char *value_str; value_str = g_strdup_value_contents( &managedgvalue->value ); vips_buf_appendf( buf, "managedgvalue->value = %s\n", value_str ); g_free( value_str ); IOBJECT_CLASS( parent_class )->info( iobject, buf ); } static void managedgvalue_class_init( ManagedgvalueClass *class ) { GObjectClass *gobject_class = G_OBJECT_CLASS( class ); iObjectClass *iobject_class = IOBJECT_CLASS( class ); parent_class = g_type_class_peek_parent( class ); gobject_class->dispose = managedgvalue_dispose; iobject_class->info = managedgvalue_info; } static void managedgvalue_init( Managedgvalue *managedgvalue ) { #ifdef DEBUG printf( "managedgvalue_init: %p\n", managedgvalue ); #endif /*DEBUG*/ memset( &managedgvalue->value, 0, sizeof( GValue ) ); } GType managedgvalue_get_type( void ) { static GType type = 0; if( !type ) { static const GTypeInfo info = { sizeof( ManagedgvalueClass ), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) managedgvalue_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof( Managedgvalue ), 32, /* n_preallocs */ (GInstanceInitFunc) managedgvalue_init, }; type = g_type_register_static( TYPE_MANAGED, "Managedgvalue", &info, 0 ); } return( type ); } void managedgvalue_set_value( Managedgvalue *managedgvalue, GValue *value ) { g_value_unset( &managedgvalue->value ); g_value_init( &managedgvalue->value, G_VALUE_TYPE( value ) ); g_value_copy( &managedgvalue->value, value ); } Managedgvalue * managedgvalue_new( Heap *heap, GValue *value ) { Managedgvalue *managedgvalue = g_object_new( TYPE_MANAGEDGVALUE, NULL ); managed_link_heap( MANAGED( managedgvalue ), heap ); managedgvalue_set_value( managedgvalue, value ); /* Not a very good hash. */ MANAGED( managedgvalue )->hash = (guint) G_VALUE_TYPE( value ); return( managedgvalue ); } nip2-8.7.0/src/rhsview.c0000644000175000017500000001256713224651032011752 00000000000000/* the rhs of a tallyrow ... group together everything to the right of the * button */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #include "ip.h" static ViewClass *parent_class = NULL; /* Get this if ws->mode changes. */ static void rhsview_reset( View *view ) { Rhsview *rhsview = RHSVIEW( view ); Rhs *rhs = RHS( VOBJECT( rhsview )->iobject ); Row *row = HEAPMODEL( rhs )->row; model_display( rhs->itext, row->ws->mode == WORKSPACE_MODE_FORMULA || rhs->flags & RHS_ITEXT ); VIEW_CLASS( parent_class )->reset( view ); } static void rhsview_refresh( vObject *vobject ) { Rhsview *rhsview = RHSVIEW( vobject ); Rhs *rhs = RHS( VOBJECT( rhsview )->iobject ); Row *row = HEAPMODEL( rhs )->row; #ifdef DEBUG printf( "rhsview_refresh: " ); row_name_print( HEAPMODEL( rhs )->row ); printf( " " ); if( rhs->flags & RHS_GRAPHIC ) printf( "RHS_GRAPHIC " ); if( rhs->flags & RHS_SCOL ) printf( "RHS_SCOL " ); if( rhs->flags & RHS_ITEXT ) printf( "RHS_ITEXT " ); printf( "\n" ); #endif /*DEBUG*/ /* Add/remove children according to rhs->flags. */ model_display( rhs->graphic, rhs->flags & RHS_GRAPHIC ); model_display( rhs->scol, rhs->flags & RHS_SCOL ); switch( row->ws->mode ) { case WORKSPACE_MODE_REGULAR: model_display( rhs->itext, rhs->flags & RHS_ITEXT ); break; case WORKSPACE_MODE_FORMULA: model_display( rhs->itext, TRUE ); break; case WORKSPACE_MODE_NOEDIT: /* Only show the text if it's the only this we have for this * row. */ if( rhs->graphic && rhs->flags & RHS_GRAPHIC ) model_display( rhs->itext, FALSE ); else if( rhs->scol && rhs->flags & RHS_SCOL ) model_display( rhs->itext, FALSE ); else model_display( rhs->itext, rhs->flags & RHS_ITEXT ); break; default: g_assert( 0 ); } VOBJECT_CLASS( parent_class )->refresh( vobject ); } static void rhsview_link( View *view, Model *model, View *parent ) { Rhsview *rhsview = RHSVIEW( view ); Rowview *rview = ROWVIEW( parent ); #ifdef DEBUG printf( "rhsview_link: " ); row_name_print( ROW( VOBJECT( rview )->iobject ) ); printf( "\n" ); #endif /*DEBUG*/ VIEW_CLASS( parent_class )->link( view, model, parent ); rhsview->rview = rview; } static void rhsview_child_add( View *parent, View *child ) { Rhsview *rhsview = RHSVIEW( parent ); if( IS_SUBCOLUMNVIEW( child ) ) { gtk_table_attach_defaults( GTK_TABLE( rhsview->table ), GTK_WIDGET( child ), 0, 1, 1, 2 ); rhsview->scol = child; } else if( IS_ITEXTVIEW( child ) ) { gtk_table_attach_defaults( GTK_TABLE( rhsview->table ), GTK_WIDGET( child ), 0, 1, 2, 3 ); rhsview->itext = child; } else { gtk_table_attach_defaults( GTK_TABLE( rhsview->table ), GTK_WIDGET( child ), 0, 1, 0, 1 ); rhsview->graphic = child; g_assert( IS_GRAPHICVIEW( child ) ); } VIEW_CLASS( parent_class )->child_add( parent, child ); } static void rhsview_child_remove( View *parent, View *child ) { Rhsview *rhsview = RHSVIEW( parent ); if( IS_SUBCOLUMNVIEW( child ) ) rhsview->scol = NULL; else if( IS_ITEXTVIEW( child ) ) rhsview->itext = NULL; else rhsview->graphic = NULL; VIEW_CLASS( parent_class )->child_remove( parent, child ); } static void rhsview_class_init( RhsviewClass *class ) { vObjectClass *vobject_class = (vObjectClass*) class; ViewClass *view_class = (ViewClass*) class; parent_class = g_type_class_peek_parent( class ); /* Create signals. */ /* Init methods. */ vobject_class->refresh = rhsview_refresh; view_class->link = rhsview_link; view_class->child_add = rhsview_child_add; view_class->child_remove = rhsview_child_remove; view_class->reset = rhsview_reset; } static void rhsview_init( Rhsview *rhsview ) { rhsview->rview = NULL; /* Attached on refresh. */ rhsview->graphic = NULL; rhsview->scol = NULL; rhsview->itext = NULL; rhsview->table = gtk_table_new( 3, 1, FALSE ); gtk_box_pack_start( GTK_BOX( rhsview ), rhsview->table, TRUE, FALSE, 0 ); gtk_widget_show( rhsview->table ); rhsview->flags = 0; gtk_widget_show( GTK_WIDGET( rhsview ) ); } GtkType rhsview_get_type( void ) { static GtkType rhsview_type = 0; if( !rhsview_type ) { static const GtkTypeInfo rhsview_info = { "Rhsview", sizeof( Rhsview ), sizeof( RhsviewClass ), (GtkClassInitFunc) rhsview_class_init, (GtkObjectInitFunc) rhsview_init, /* reserved_1 */ NULL, /* reserved_2 */ NULL, (GtkClassInitFunc) NULL, }; rhsview_type = gtk_type_unique( TYPE_VIEW, &rhsview_info ); } return( rhsview_type ); } View * rhsview_new( void ) { Rhsview *rhsview = gtk_type_new( TYPE_RHSVIEW ); return( VIEW( rhsview ) ); } nip2-8.7.0/src/graphwindow.h0000644000175000017500000000373213224651032012613 00000000000000/* display workspaces with graphviz */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_GRAPHWINDOW (graphwindow_get_type()) #define GRAPHWINDOW( obj ) \ (GTK_CHECK_CAST( (obj), TYPE_GRAPHWINDOW, Graphwindow )) #define GRAPHWINDOW_CLASS( klass ) \ (GTK_CHECK_CLASS_CAST( (klass), TYPE_GRAPHWINDOW, GraphwindowClass )) #define IS_GRAPHWINDOW( obj ) (GTK_CHECK_TYPE( (obj), TYPE_GRAPHWINDOW )) #define IS_GRAPHWINDOW_CLASS( klass ) \ (GTK_CHECK_CLASS_TYPE( (klass), TYPE_GRAPHWINDOW )) struct _Graphwindow { Floatwindow parent_class; /* The last dot graph we generated. */ char *dot; /* Regenerate the graph on a timeout to avoid regen on many small * changes. */ guint layout_timeout; /* The imagedisplay we make. */ Imagemodel *imagemodel; Imagepresent *ip; /* Watch the ws with this. */ guint workspace_changed_sid; #ifdef HAVE_LIBGVC GVC_t *gvc; graph_t *graph; #endif /*HAVE_LIBGVC*/ }; typedef struct _GraphwindowClass { FloatwindowClass parent_class; /* My methods. */ } GraphwindowClass; void graph_write( Workspace *ws ); GtkType graphwindow_get_type( void ); Graphwindow *graphwindow_new( Workspace *ws, GtkWidget *parent ); nip2-8.7.0/src/subcolumn.h0000644000175000017500000000532313224651032012267 00000000000000/* a column of rows in a workspace */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_SUBCOLUMN (subcolumn_get_type()) #define SUBCOLUMN( obj ) \ (G_TYPE_CHECK_INSTANCE_CAST( (obj), TYPE_SUBCOLUMN, Subcolumn )) #define SUBCOLUMN_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_CAST( (klass), TYPE_SUBCOLUMN, SubcolumnClass)) #define IS_SUBCOLUMN( obj ) \ (G_TYPE_CHECK_INSTANCE_TYPE( (obj), TYPE_SUBCOLUMN )) #define IS_SUBCOLUMN_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_TYPE( (klass), TYPE_SUBCOLUMN )) #define SUBCOLUMN_GET_CLASS( obj ) \ (G_TYPE_INSTANCE_GET_CLASS( (obj), TYPE_SUBCOLUMN, SubcolumnClass )) /* Predicate on a row. */ typedef gboolean (*RowPred)( Row * ); /* Control class member visibility with these. */ typedef struct { const char *name; RowPred pred; } SubcolumnVisibility; struct _Subcolumn { Heapmodel parent_class; /* Our context. */ Column *col; /* Enclosing column (or NULL) */ Subcolumn *scol; /* Enclosing subcolumn (or NULL) */ Column *top_col; /* Topmost enclosing column */ Subcolumn *top_scol; /* Topmost enclosing subcolumn */ int vislevel; /* Visibility level */ gboolean is_top; /* TRUE if parent is a column */ Element base; /* "this" for our members */ gboolean known_private; /* TRUE after top-level clone .. can write! */ /* For subcolumns representing a class instance, the rows for the * "this" and "super" members. */ Row *this; Row *super; }; typedef struct _SubcolumnClass { HeapmodelClass parent_class; /* My methods. */ } SubcolumnClass; extern const SubcolumnVisibility subcolumn_visibility[]; extern const int subcolumn_nvisibility; void *subcolumn_map( Subcolumn *scol, row_map_fn fn, void *a, void *b ); GType subcolumn_get_type( void ); void *subcolumn_new_view( Subcolumn *scol ); Subcolumn *subcolumn_new( Rhs *rhs, Column *col ); void subcolumn_set_vislevel( Subcolumn *scol, int vislevel ); gboolean subcolumn_make_private( Subcolumn *scol ); nip2-8.7.0/src/plotview.c0000644000175000017500000001326713224651032012132 00000000000000/* run the display for a plotview in a workspace */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG_GEO #define DEBUG */ #include "ip.h" #ifdef HAVE_LIBGOFFICE static GraphicviewClass *parent_class = NULL; static void plotview_destroy( GtkObject *object ) { Plotview *plotview; g_return_if_fail( object != NULL ); g_return_if_fail( IS_PLOTVIEW( object ) ); #ifdef DEBUG printf( "plotview_destroy\n" ); #endif /*DEBUG*/ plotview = PLOTVIEW( object ); GOG_UNREF( plotview->gplot ); GTK_OBJECT_CLASS( parent_class )->destroy( object ); } static void plotview_refresh( vObject *vobject ) { Plotview *plotview = PLOTVIEW( vobject ); Plot *plot = PLOT( VOBJECT( plotview )->iobject ); #ifdef DEBUG printf( "plotview_refresh\n" ); #endif /*DEBUG*/ /* Can't refresh before model build. */ if( plot->rows == 0 || plot->columns == 0 ) return; set_gcaption( plotview->label, "%s", NN( IOBJECT( plot )->caption ) ); GOG_UNREF( plotview->gplot ); plotview->gplot = plot_new_gplot( plot ); gog_object_add_by_name( GOG_OBJECT( plotview->gchart ), "Plot", GOG_OBJECT( plotview->gplot ) ); plot_style_thumbnail( plot, plotview->gchart ); gtk_widget_show_all( plotview->canvas ); VOBJECT_CLASS( parent_class )->refresh( vobject ); } static void plotview_link( View *view, Model *model, View *parent ) { Plotview *plotview = PLOTVIEW( view ); Rowview *rview = ROWVIEW( parent->parent ); VIEW_CLASS( parent_class )->link( view, model, parent ); rowview_menu_attach( rview, GTK_WIDGET( plotview->box ) ); } static void plotview_class_init( PlotviewClass *class ) { GtkObjectClass *object_class = (GtkObjectClass *) class; vObjectClass *vobject_class = (vObjectClass *) class; ViewClass *view_class = (ViewClass *) class; parent_class = g_type_class_peek_parent( class ); object_class->destroy = plotview_destroy; vobject_class->refresh = plotview_refresh; view_class->link = plotview_link; } static void plotview_tooltip_generate( GtkWidget *widget, VipsBuf *buf, Plotview *plotview ) { Plot *plot = PLOT( VOBJECT( plotview )->iobject ); IMAGE *im; vips_buf_rewind( buf ); vips_buf_appends( buf, vips_buf_all( &plot->caption_buffer ) ); vips_buf_appendf( buf, ", %s, %s", plot_f2c( plot->format ), plot_s2c( plot->style ) ); if( (im = imageinfo_get( FALSE, plot->value.ii )) ) { vips_buf_appends( buf, ", " ); vips_buf_appendi( buf, im ); } } static void plotview_doubleclick_one_cb( GtkWidget *widget, GdkEvent *event, Plotview *plotview ) { Heapmodel *heapmodel = HEAPMODEL( VOBJECT( plotview )->iobject ); Row *row = heapmodel->row; row_select_modifier( row, event->button.state ); } static void plotview_doubleclick_two_cb( GtkWidget *widget, GdkEvent *event, Plotview *plotview ) { Plot *plot = PLOT( VOBJECT( plotview )->iobject ); model_edit( widget, MODEL( plot ) ); } static void plotview_init( Plotview *plotview ) { GtkWidget *eb; #ifdef DEBUG printf( "plotview_init\n" ); #endif /*DEBUG*/ eb = gtk_event_box_new(); gtk_box_pack_start( GTK_BOX( plotview ), eb, FALSE, FALSE, 0 ); gtk_widget_show( eb ); gtk_widget_set_name( eb, "caption_widget" ); set_tooltip_generate( eb, (TooltipGenerateFn) plotview_tooltip_generate, plotview, NULL ); doubleclick_add( eb, FALSE, DOUBLECLICK_FUNC( plotview_doubleclick_one_cb ), plotview, DOUBLECLICK_FUNC( plotview_doubleclick_two_cb ), plotview ); plotview->box = gtk_vbox_new( FALSE, 0 ); gtk_container_add( GTK_CONTAINER( eb ), plotview->box ); gtk_widget_show( plotview->box ); plotview->canvas = go_graph_widget_new( NULL ); gtk_box_pack_start( GTK_BOX( plotview->box ), plotview->canvas, FALSE, FALSE, 0 ); plotview->gchart = go_graph_widget_get_chart( GO_GRAPH_WIDGET( plotview->canvas ) ); gtk_widget_set_size_request( GTK_WIDGET( plotview->canvas ), DISPLAY_THUMBNAIL, DISPLAY_THUMBNAIL ); plotview->gplot = NULL; plotview->label = gtk_label_new( "" ); gtk_misc_set_alignment( GTK_MISC( plotview->label ), 0, 0.5 ); gtk_misc_set_padding( GTK_MISC( plotview->label ), 2, 0 ); gtk_box_pack_end( GTK_BOX( plotview->box ), GTK_WIDGET( plotview->label ), FALSE, FALSE, 0 ); gtk_widget_show( GTK_WIDGET( plotview->label ) ); } GtkType plotview_get_type( void ) { static GtkType type = 0; if( !type ) { static const GtkTypeInfo info = { "Plotview", sizeof( Plotview ), sizeof( PlotviewClass ), (GtkClassInitFunc) plotview_class_init, (GtkObjectInitFunc) plotview_init, /* reserved_1 */ NULL, /* reserved_2 */ NULL, (GtkClassInitFunc) NULL, }; type = gtk_type_unique( TYPE_GRAPHICVIEW, &info ); } return( type ); } View * plotview_new( void ) { Plotview *plotview = gtk_type_new( TYPE_PLOTVIEW ); return( VIEW( plotview ) ); } #endif /*HAVE_LIBGOFFICE*/ nip2-8.7.0/src/managedfile.h0000644000175000017500000000337713224651032012523 00000000000000/* a managed FILE* ... for lazy file read */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_MANAGEDFILE (managedfile_get_type()) #define MANAGEDFILE( obj ) \ (G_TYPE_CHECK_INSTANCE_CAST( (obj), TYPE_MANAGEDFILE, Managedfile )) #define MANAGEDFILE_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_CAST( (klass), \ TYPE_MANAGEDFILE, ManagedfileClass)) #define IS_MANAGEDFILE( obj ) \ (G_TYPE_CHECK_INSTANCE_TYPE( (obj), TYPE_MANAGEDFILE )) #define IS_MANAGEDFILE_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_TYPE( (klass), TYPE_MANAGEDFILE )) #define MANAGEDFILE_GET_CLASS( obj ) \ (G_TYPE_INSTANCE_GET_CLASS( (obj), \ TYPE_MANAGEDFILE, ManagedfileClass )) struct _Managedfile { Managed parent_object; iOpenFile *file; }; typedef struct _ManagedfileClass { ManagedClass parent_class; } ManagedfileClass; GType managedfile_get_type( void ); Managedfile *managedfile_new( Heap *heap, const char *filename ); int managedfile_getc( Managedfile *managedfile ); nip2-8.7.0/src/heapmodel.h0000644000175000017500000000563413224651032012223 00000000000000/* like a model, but something that represents a part of the heap (eg. * toggle/slider/text etc.) */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_HEAPMODEL (heapmodel_get_type()) #define HEAPMODEL( obj ) \ (G_TYPE_CHECK_INSTANCE_CAST( (obj), TYPE_HEAPMODEL, Heapmodel )) #define HEAPMODEL_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_CAST( (klass), TYPE_HEAPMODEL, HeapmodelClass)) #define IS_HEAPMODEL( obj ) \ (G_TYPE_CHECK_INSTANCE_TYPE( (obj), TYPE_HEAPMODEL )) #define IS_HEAPMODEL_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_TYPE( (klass), TYPE_HEAPMODEL )) #define HEAPMODEL_GET_CLASS( obj ) \ (G_TYPE_INSTANCE_GET_CLASS( (obj), TYPE_HEAPMODEL, HeapmodelClass )) struct _Heapmodel { Model parent_class; /* Context. */ Row *row; /* Enclosing row */ Rhs *rhs; /* Enclosing rhs */ /* Set if model has changes which have not yet been applied to the * heap ... update_model() blocks, update_heap() clears. */ gboolean modified; }; typedef struct _HeapmodelClass { ModelClass parent_class; /* Building heaps from models, building models from heaps. new_heap the heap has changed ... recurse down adding, updating (with a recursive new_heap()) and removing children update_model read the heap into the model ... eg. update text representation update_heap if the heapmodel has any unapplied user edits, use them to update the heap ... update the heap area pointed to by the last update_model clear_edited set back to default values */ void *(*new_heap)( Heapmodel *, PElement * ); void *(*update_model)( Heapmodel * ); void *(*update_heap)( Heapmodel * ); void *(*clear_edited)( Heapmodel * ); } HeapmodelClass; void *heapmodel_new_heap( Heapmodel *heapmodel, PElement *root ); void *heapmodel_update_model( Heapmodel *heapmodel ); void *heapmodel_update_heap( Heapmodel *heapmodel ); void *heapmodel_clear_edited( Heapmodel *heapmodel ); GType heapmodel_get_type( void ); void heapmodel_set_modified( Heapmodel *heapmodel, gboolean modified ); gboolean heapmodel_name( Heapmodel *heapmodel, VipsBuf *buf ); gboolean heapmodel_value( Heapmodel *heapmodel, VipsBuf *buf ); nip2-8.7.0/src/managedgobject.h0000644000175000017500000000336213224651032013213 00000000000000/* a managed gobject */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_MANAGEDGOBJECT (managedgobject_get_type()) #define MANAGEDGOBJECT( obj ) \ (G_TYPE_CHECK_INSTANCE_CAST( (obj), TYPE_MANAGEDGOBJECT, Managedgobject )) #define MANAGEDGOBJECT_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_CAST( (klass), \ TYPE_MANAGEDGOBJECT, ManagedgobjectClass)) #define IS_MANAGEDGOBJECT( obj ) \ (G_TYPE_CHECK_INSTANCE_TYPE( (obj), TYPE_MANAGEDGOBJECT )) #define IS_MANAGEDGOBJECT_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_TYPE( (klass), TYPE_MANAGEDGOBJECT )) #define MANAGEDGOBJECT_GET_CLASS( obj ) \ (G_TYPE_INSTANCE_GET_CLASS( (obj), \ TYPE_MANAGEDGOBJECT, ManagedgobjectClass )) struct _Managedgobject { Managed parent_object; GObject *object; }; typedef struct _ManagedgobjectClass { ManagedClass parent_class; } ManagedgobjectClass; GType managedgobject_get_type( void ); Managedgobject *managedgobject_new( Heap *heap, GObject *value ); nip2-8.7.0/src/predicate.c0000644000175000017500000001113113224651032012205 00000000000000/* Symbol classifiers. */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #include "ip.h" /* Is it one of the system members? Hidden in menus and class display. We * can't safely use is_super()/is_this() (they are fast), because we can get * called during build (before they are working). Use strcmp() instead. */ gboolean is_system( Symbol *sym ) { Symbol *parent = symbol_get_parent( sym ); /* Something like $$lambda1 and friends. */ if( sym->generated ) return( TRUE ); if( strcmp( IOBJECT( sym )->name, MEMBER_CHECK ) == 0 || strcmp( IOBJECT( sym )->name, MEMBER_NAME ) == 0 || strcmp( IOBJECT( sym )->name, MEMBER_THIS ) == 0 || IOBJECT( sym )->name[0] == '_' ) return( TRUE ); if( parent && !is_scope( parent ) && strcmp( IOBJECT( sym )->name, IOBJECT( parent )->name ) == 0 ) return( TRUE ); return( FALSE ); } /* Something like "a = Separator;" */ gboolean is_separator( Symbol *sym ) { if( sym->expr && sym->expr->compile && sym->expr->compile->tree && sym->expr->compile->tree->type == NODE_LEAF ) { Symbol *leaf = sym->expr->compile->tree->leaf; return( strcmp( IOBJECT( leaf )->name, CLASS_SEPARATOR ) == 0 ); } return( FALSE ); } /* Is a symbol a class. */ gboolean is_class( Compile *compile ) { return( compile->is_klass ); } /* Is a sym the super member of some class. */ gboolean is_super( Symbol *sym ) { Symbol *parent = symbol_get_parent( sym ); Compile *parent_compile = parent->expr->compile; return( parent_compile && is_class( parent_compile ) && sym == parent_compile->super ); } /* Is a sym the this member of some class. */ gboolean is_this( Symbol *sym ) { Symbol *parent = symbol_get_parent( sym ); Compile *parent_compile = parent->expr->compile; return( is_class( parent_compile ) && sym == parent_compile->this ); } /* Is sym a member of an enclosing class of compile. */ gboolean is_member_enclosing( Compile *compile, Symbol *sym ) { for( compile = compile_get_parent( compile ); compile; compile = compile_get_parent( compile ) ) if( is_class( compile ) && compile->sym != sym && ICONTAINER( sym )->parent == ICONTAINER( compile ) ) return( TRUE ); return( FALSE ); } /* Is a symbol a compile-time scope (eg. workspace) */ gboolean is_scope( Symbol *sym ) { return( sym->type == SYM_ROOT || sym->type == SYM_WORKSPACE || sym->type == SYM_WORKSPACEROOT || !symbol_get_parent( sym ) ); } /* Is a symbol a top-level definition. Tops are symbols whose parents are * SYM_ROOT, SYM_WORKSPACE and friends. */ gboolean is_top( Symbol *sym ) { if( is_scope( sym ) || is_scope( symbol_get_parent( sym ) ) ) return( TRUE ); return( FALSE ); } /* Is a symbol a member of a class? Params don't count. */ gboolean is_member( Symbol *sym ) { return( is_value( sym ) && is_class( COMPILE( ICONTAINER( sym )->parent ) ) ); } /* Is a compile a member function (not a sub-class)? */ gboolean is_memberfunc( Compile *compile ) { return( is_class( compile_get_parent( compile ) ) && !is_class( compile ) ); } /* Something that ought to have a value. */ gboolean is_value( Symbol *sym ) { return( sym->type == SYM_VALUE && sym->expr ); } /* Is sym an ancestor of context? */ gboolean is_ancestor( Symbol *context, Symbol *sym ) { if( context == sym ) return( TRUE ); if( context == symbol_root ) return( FALSE ); return( is_ancestor( symbol_get_parent( context ), sym ) ); } gboolean is_menuable( Symbol *sym ) { /* In a hidden kit? */ if( sym->tool && IOBJECT( sym->tool->kit )->name[0] == '_' ) return( FALSE ); /* A hidden item? */ if( IOBJECT( sym )->name[0] == '_' ) return( FALSE ); /* We also hide all supers, system things */ if( !is_value( sym ) || !sym->expr->compile || is_system( sym ) || strcmp( IOBJECT( sym )->name, MEMBER_SUPER ) == 0 ) return( FALSE ); return( TRUE ); } nip2-8.7.0/src/program.h0000644000175000017500000000562313224651032011732 00000000000000/* Decls for program.c ... edit window */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_PROGRAM (program_get_type()) #define PROGRAM( obj ) (GTK_CHECK_CAST( (obj), TYPE_PROGRAM, Program )) #define PROGRAM_CLASS( klass ) \ (GTK_CHECK_CLASS_CAST( (klass), TYPE_PROGRAM, ProgramClass )) #define IS_PROGRAM( obj ) (GTK_CHECK_TYPE( (obj), TYPE_PROGRAM )) #define IS_PROGRAM_CLASS( klass ) \ (GTK_CHECK_CLASS_TYPE( (klass), TYPE_PROGRAM )) struct _Program { iWindow parent_class; /* The set of kits we manage. */ Toolkitgroup *kitg; GtkWidget *text; gboolean dirty; /* Has the text changed since we set it */ guint text_hash; /* Hash of the last text we set */ GtkWidget *tree; Pane *lpane; int pane_position; Pane *rpane; int rpane_position; gboolean rpane_open; Defbrowser *defbrowser; guint refresh_timeout; /* Timeout for UI refresh */ guint select_changed_sid; guint row_inserted_sid; guint row_deleted_sid; /* Track during drags. */ Toolkit *to_kit; int to_pos; /* Store for kit/tool view. */ GtkTreeStore *store; /* Listen for all kit changes here. */ guint kitgroup_changed_sid; guint kitgroup_destroy_sid; /* The current kit. */ Toolkit *kit; guint kit_destroy_sid; /* The selected tool. */ Tool *tool; int pos; /* Position of tool in kit */ guint tool_destroy_sid; /* Current search settings. */ char *search; gboolean csens; /* Case sensitive */ gboolean fromtop; /* Start search from beginning again */ #ifdef HAVE_GREGEX gboolean regexp; /* Interpret as regexp */ GRegex *comp; /* Compiled pattern */ #endif /*HAVE_GREGEX*/ /* Current search position. */ Symbol *find_sym; /* Tool containing search point */ size_t find_start; /* Offset into tool text of found string */ size_t find_end; guint find_sym_destroy_sid;/* Watch for find_sym death here */ }; typedef struct _ProgramClass { iWindowClass parent_class; /* My methods. */ } ProgramClass; GtkType program_get_type( void ); GtkWidget *program_text_new( void ); Program *program_new( Toolkitgroup *kitg ); gboolean program_select( Program *program, Model *model ); nip2-8.7.0/src/toolview.c0000644000175000017500000001653113224651032012126 00000000000000/* Manage toolviewkits and their display. */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #include "ip.h" static ViewClass *parent_class = NULL; /* Link menu items to toolview with this. */ static GQuark toolview_quark = 0; static Mainw * toolview_get_mainw( Toolview *tview ) { if( !tview->kview || !tview->kview->kitgview ) return( NULL ); return( tview->kview->kitgview->mainw ); } static Workspace * toolview_get_workspace( Toolview *tview ) { Mainw *mainw; if( !(mainw = toolview_get_mainw( tview )) ) return( NULL ); return( mainw_get_workspace( mainw ) ); } static Workspace * item_get_workspace( GtkWidget *item ) { Toolview *tview; if( !(tview = gtk_object_get_data_by_id( GTK_OBJECT( item ), toolview_quark )) ) return( NULL ); return( toolview_get_workspace( tview ) ); } static void toolview_destroy( GtkObject *object ) { Toolview *tview; g_return_if_fail( object != NULL ); g_return_if_fail( IS_TOOLVIEW( object ) ); tview = TOOLVIEW( object ); #ifdef DEBUG printf( "toolview_destroy: %p\n", object ); #endif /*DEBUG*/ DESTROY_GTK( tview->item ); GTK_OBJECT_CLASS( parent_class )->destroy( object ); } static void toolview_finalize( GObject *gobject ) { #ifdef DEBUG printf( "toolview_finalize: %p\n", gobject ); #endif /*DEBUG*/ G_OBJECT_CLASS( parent_class )->finalize( gobject ); } static void toolview_activate_cb( GtkWidget *widget, Toolitem *toolitem ) { Workspace *ws = item_get_workspace( widget ); switch( toolitem->tool->type ) { case TOOL_DIA: if( !workspace_merge_file( ws, FILEMODEL( toolitem->tool )->filename ) ) iwindow_alert( widget, GTK_MESSAGE_ERROR ); symbol_recalculate_all(); break; case TOOL_SYM: if( !workspace_add_action( ws, toolitem->name, toolitem->action, toolitem->action_sym->expr->compile->nparam ) ) iwindow_alert( widget, GTK_MESSAGE_ERROR ); break; default: g_assert( FALSE ); } } /* Flash help for a toolview. */ static void toolview_select_cb( GtkWidget *widget, Toolitem *toolitem ) { Workspace *ws = item_get_workspace( widget ); if( ws && toolitem->help ) workspace_set_status( ws, "%s", toolitem->help ); } /* Sub fn of below ... build a menu item for a TOOL_SYM. */ static GtkWidget * toolview_refresh_sub( Toolview *tview, Toolitem *toolitem, Workspace *ws, GtkWidget *menu ) { Mainw *mainw = toolview_get_mainw( tview ); GtkWidget *item; if( toolitem->is_separator ) item = gtk_menu_item_new(); else { item = gtk_image_menu_item_new_with_mnemonic( toolitem->label ); gtk_object_set_data_by_id( GTK_OBJECT( item ), toolview_quark, tview ); if( toolitem->icon ) gtk_image_menu_item_set_image( GTK_IMAGE_MENU_ITEM( item ), image_new_from_file( toolitem->icon ) ); if( !toolitem->is_pullright ) gtk_signal_connect( GTK_OBJECT( item ), "activate", GTK_SIGNAL_FUNC( toolview_activate_cb ), toolitem ); if( toolitem->help && !toolitem->is_pullright ) set_tooltip( item, "%s", toolitem->help ); gtk_signal_connect( GTK_OBJECT( item ), "select", GTK_SIGNAL_FUNC( toolview_select_cb ), toolitem ); /* Make a pullright and recurse if necessary */ if( toolitem->is_pullright ) { GtkWidget *submenu = gtk_menu_new(); GSList *p; gtk_menu_set_accel_group( GTK_MENU( submenu ), IWINDOW( mainw )->accel_group ); gtk_menu_set_accel_path( GTK_MENU( submenu ), toolitem->path ); for( p = toolitem->children; p; p = p->next ) { Toolitem *child = p->data; toolview_refresh_sub( tview, child, ws, submenu ); } gtk_menu_item_set_submenu( GTK_MENU_ITEM( item ), submenu ); } } /* Is a top-level toolitem? */ if( toolitem == toolitem->tool->toolitem ) gtk_menu_shell_insert( GTK_MENU_SHELL( menu ), item, ICONTAINER( toolitem->tool )->pos + 1 ); else /* Submenus are always completely rebuilt, so we can just * append. */ gtk_menu_shell_append( GTK_MENU_SHELL( menu ), item ); gtk_widget_show( item ); return( item ); } /* Our widget has been destroyed. NULL out or pointer to it, to stop us * destroying it again later. */ void toolview_destroy_cb( GtkWidget *widget, Toolview *tview ) { g_assert( tview->item == widget ); tview->item = NULL; } /* Update toolview display. */ static void toolview_refresh( vObject *vobject ) { Toolview *tview = TOOLVIEW( vobject ); Workspace *ws = toolview_get_workspace( tview ); Tool *tool = TOOL( VOBJECT( tview )->iobject ); Toolkitview *kview = tview->kview; #ifdef DEBUG printf( "toolview_refresh: " ); iobject_print( VOBJECT( tview )->iobject ); #endif /*DEBUG*/ if( !toolview_quark ) toolview_quark = g_quark_from_static_string( "toolview_quark" ); DESTROY_GTK( tview->item ); if( tool->toolitem ) tview->item = toolview_refresh_sub( tview, tool->toolitem, ws, kview->menu ); if( tview->item ) gtk_signal_connect( GTK_OBJECT( tview->item ), "destroy", GTK_SIGNAL_FUNC( toolview_destroy_cb ), tview ); VOBJECT_CLASS( parent_class )->refresh( vobject ); } static void toolview_link( View *view, Model *model, View *parent ) { Toolview *tview = TOOLVIEW( view ); Toolkitview *kview = TOOLKITVIEW( parent ); VIEW_CLASS( parent_class )->link( view, model, parent ); #ifdef DEBUG printf( "toolview_link: " ); iobject_print( VOBJECT( tview )->iobject ); #endif /*DEBUG*/ tview->kview = kview; } static void toolview_class_init( ToolviewClass *class ) { GtkObjectClass *object_class = (GtkObjectClass*) class; GObjectClass *gobject_class = (GObjectClass*) class; vObjectClass *vobject_class = (vObjectClass *) class; ViewClass *view_class = (ViewClass *) class; parent_class = g_type_class_peek_parent( class ); object_class->destroy = toolview_destroy; gobject_class->finalize = toolview_finalize; /* Create signals. */ /* Init methods. */ vobject_class->refresh = toolview_refresh; view_class->link = toolview_link; } static void toolview_init( Toolview *toolview ) { toolview->item = NULL; } GtkType toolview_get_type( void ) { static GtkType toolview_type = 0; if( !toolview_type ) { static const GtkTypeInfo toolview_info = { "Toolview", sizeof( Toolview ), sizeof( ToolviewClass ), (GtkClassInitFunc) toolview_class_init, (GtkObjectInitFunc) toolview_init, /* reserved_1 */ NULL, /* reserved_2 */ NULL, (GtkClassInitFunc) NULL, }; toolview_type = gtk_type_unique( TYPE_VIEW, &toolview_info ); } return( toolview_type ); } View * toolview_new( void ) { Toolview *tview = gtk_type_new( TYPE_TOOLVIEW ); #ifdef DEBUG printf( "toolview_new: %p\n", tview ); #endif /*DEBUG*/ return( VIEW( tview ) ); } nip2-8.7.0/src/subcolumnview.h0000644000175000017500000000362313224651032013163 00000000000000/* a column of tallyrows in a workspace */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_SUBCOLUMNVIEW (subcolumnview_get_type()) #define SUBCOLUMNVIEW( obj ) \ (GTK_CHECK_CAST( (obj), TYPE_SUBCOLUMNVIEW, Subcolumnview )) #define SUBCOLUMNVIEW_CLASS( klass ) \ (GTK_CHECK_CLASS_CAST( (klass), TYPE_SUBCOLUMNVIEW, SubcolumnviewClass )) #define IS_SUBCOLUMNVIEW( obj ) (GTK_CHECK_TYPE( (obj), TYPE_SUBCOLUMNVIEW )) #define IS_SUBCOLUMNVIEW_CLASS( klass ) \ (GTK_CHECK_CLASS_TYPE( (klass), TYPE_SUBCOLUMNVIEW )) struct _Subcolumnview { View view; /* Enclosing rhsview, if any. */ Rhsview *rhsview; /* My instance vars. */ GtkWidget *align; /* Alignment widget */ GtkWidget *table; /* Central tally area for column */ int rows; /* Number of rows atm */ int nvis; /* Number of children currently visible */ GtkSizeGroup *group; /* Align captions with this */ }; typedef struct _SubcolumnviewClass { ViewClass parent_class; /* My methods. */ } SubcolumnviewClass; GtkType subcolumnview_get_type( void ); View *subcolumnview_new( void ); nip2-8.7.0/src/prefworkspaceview.c0000644000175000017500000000673513224651032014031 00000000000000/* a prefworkspaceview button in a workspace */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ /* Define to trace button press events. #define EVENT */ #include "ip.h" static ViewClass *parent_class = NULL; static void prefworkspaceview_destroy( GtkObject *object ) { Prefworkspaceview *pwview; #ifdef DEBUG printf( "prefworkspaceview_destroy\n" ); #endif /*DEBUG*/ g_return_if_fail( object != NULL ); g_return_if_fail( IS_PREFWORKSPACEVIEW( object ) ); pwview = PREFWORKSPACEVIEW( object ); /* Instance destroy. */ IM_FREE( pwview->caption_filter ); GTK_OBJECT_CLASS( parent_class )->destroy( object ); } static void prefworkspaceview_child_add( View *parent, View *child ) { Prefworkspaceview *pwview = PREFWORKSPACEVIEW( parent ); VIEW_CLASS( parent_class )->child_add( parent, child ); gtk_box_pack_end( GTK_BOX( pwview ), GTK_WIDGET( child ), FALSE, FALSE, 0 ); } /* Should a child model have a display? */ static gboolean prefworkspaceview_display( View *parent, Model *child ) { Prefworkspaceview *pwview = PREFWORKSPACEVIEW( parent ); Column *column = COLUMN( child ); if( pwview->caption_filter ) return( strstr( IOBJECT( column )->caption, pwview->caption_filter ) != NULL ); else return( TRUE ); } static void prefworkspaceview_class_init( PrefworkspaceviewClass *class ) { GtkObjectClass *object_class = (GtkObjectClass *) class; ViewClass *view_class = (ViewClass *) class; parent_class = g_type_class_peek_parent( class ); object_class->destroy = prefworkspaceview_destroy; view_class->child_add = prefworkspaceview_child_add; view_class->display = prefworkspaceview_display; } static void prefworkspaceview_init( Prefworkspaceview *pwview ) { pwview->caption_filter = NULL; } GtkType prefworkspaceview_get_type( void ) { static GtkType type = 0; if( !type ) { static const GtkTypeInfo info = { "Prefworkspaceview", sizeof( Prefworkspaceview ), sizeof( PrefworkspaceviewClass ), (GtkClassInitFunc) prefworkspaceview_class_init, (GtkObjectInitFunc) prefworkspaceview_init, /* reserved_1 */ NULL, /* reserved_2 */ NULL, (GtkClassInitFunc) NULL, }; type = gtk_type_unique( TYPE_VIEW, &info ); } return( type ); } View * prefworkspaceview_new( void ) { Prefworkspaceview *pwview = gtk_type_new( TYPE_PREFWORKSPACEVIEW ); return( VIEW( pwview ) ); } void prefworkspaceview_set_caption_filter( Prefworkspaceview *pwview, const char *caption_filter ) { IM_SETSTR( pwview->caption_filter, caption_filter ); /* caption_filter is a property of the view, not the model, so we have * to queue a refresh rather than just signalling change. */ vobject_refresh_queue( VOBJECT( pwview ) ); } nip2-8.7.0/src/plotmodel.c0000644000175000017500000001161613224651032012254 00000000000000/* the model parts of a plot window .. all the window components watch this */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #include "ip.h" static iObjectClass *parent_class = NULL; static void plotmodel_dispose( GObject *gobject ) { Plotmodel *plotmodel; g_return_if_fail( gobject != NULL ); g_return_if_fail( IS_PLOTMODEL( gobject ) ); plotmodel = PLOTMODEL( gobject ); #ifdef DEBUG printf( "plotmodel_dispose %p: ", plotmodel ); iobject_print( IOBJECT( plotmodel ) ); #endif /*DEBUG*/ /* My instance destroy stuff. */ FREESID( plotmodel->changed_sid, plotmodel->plot ); FREESID( plotmodel->destroy_sid, plotmodel->plot ); G_OBJECT_CLASS( parent_class )->dispose( gobject ); } static void plotmodel_finalize( GObject *gobject ) { #ifdef DEBUG Plotmodel *plotmodel = PLOTMODEL( gobject ); printf( "plotmodel_finalize: %p\n", plotmodel ); #endif /*DEBUG*/ G_OBJECT_CLASS( parent_class )->finalize( gobject ); } static void plotmodel_changed( iObject *iobject ) { Plotmodel *plotmodel = PLOTMODEL( iobject ); #ifdef DEBUG printf( "plotmodel_changed:\n" ); #endif /*DEBUG*/ prefs_set( "DISPLAY_STATUS", "%s", bool_to_char( plotmodel->show_status ) ); IOBJECT_CLASS( parent_class )->changed( iobject ); } static void plotmodel_class_init( PlotmodelClass *class ) { GObjectClass *gobject_class = (GObjectClass *) class; iObjectClass *iobject_class = (iObjectClass *) class; parent_class = g_type_class_peek_parent( class ); gobject_class->dispose = plotmodel_dispose; gobject_class->finalize = plotmodel_finalize; iobject_class->changed = plotmodel_changed; /* Create signals. */ /* Init methods. */ } static void plotmodel_init( Plotmodel *plotmodel ) { #ifdef DEBUG printf( "plotmodel_init: %p\n", plotmodel ); #endif /*DEBUG*/ plotmodel->changed_sid = 0; plotmodel->destroy_sid = 0; plotmodel->width = -1; plotmodel->height = -1; plotmodel->mag = 100; plotmodel->show_status = DISPLAY_STATUS; } GType plotmodel_get_type( void ) { static GType type = 0; if( !type ) { static const GTypeInfo info = { sizeof( PlotmodelClass ), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) plotmodel_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof( Plotmodel ), 32, /* n_preallocs */ (GInstanceInitFunc) plotmodel_init, }; type = g_type_register_static( TYPE_IOBJECT, "Plotmodel", &info, 0 ); } return( type ); } static void plotmodel_plot_destroy_cb( Plot *plot, Plotmodel *plotmodel ) { plotmodel->plot = NULL; plotmodel->destroy_sid = 0; plotmodel->changed_sid = 0; } static void plotmodel_plot_changed_cb( Plot *plot, Plotmodel *plotmodel ) { iobject_changed( IOBJECT( plotmodel ) ); } static void plotmodel_link( Plotmodel *plotmodel, Plot *plot ) { /* Don't need to listen for "destroy": our enclosing Floatwindow does * that. */ plotmodel->plot = plot; plotmodel->destroy_sid = g_signal_connect( G_OBJECT( plot ), "destroy", G_CALLBACK( plotmodel_plot_destroy_cb ), plotmodel ); plotmodel->changed_sid = g_signal_connect( G_OBJECT( plot ), "changed", G_CALLBACK( plotmodel_plot_changed_cb ), plotmodel ); } Plotmodel * plotmodel_new( Plot *plot ) { Plotmodel *plotmodel = g_object_new( TYPE_PLOTMODEL, NULL ); plotmodel_link( plotmodel, plot ); return( plotmodel ); } void plotmodel_set_mag( Plotmodel *plotmodel, int mag ) { /* Don't let mag get too large or small. GtkPlotCanvas does not * display large magnifications at all well. */ mag = IM_CLIP( 100, mag, 800 ); if( plotmodel->mag != mag ) { #ifdef DEBUG printf( "plotmodel_set_mag: %d\n", mag ); #endif /*DEBUG*/ plotmodel->mag = mag; /* Invaidate width so the canvas is regenerated. */ plotmodel->width = -1; iobject_changed( IOBJECT( plotmodel ) ); } } void plotmodel_set_status( Plotmodel *plotmodel, gboolean show_status ) { if( plotmodel->show_status != show_status ) { #ifdef DEBUG printf( "plotmodel_set_status: %d\n", show_status ); #endif /*DEBUG*/ plotmodel->show_status = show_status; iobject_changed( IOBJECT( plotmodel ) ); } } nip2-8.7.0/src/graphicview.h0000644000175000017500000000321613224651032012567 00000000000000/* abstract base class for graphic views, ie. things we can display as part of * the graphic component of a rhsview */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_GRAPHICVIEW (graphicview_get_type()) #define GRAPHICVIEW( obj ) \ (GTK_CHECK_CAST( (obj), TYPE_GRAPHICVIEW, Graphicview )) #define GRAPHICVIEW_CLASS( klass ) \ (GTK_CHECK_CLASS_CAST( (klass), TYPE_GRAPHICVIEW, GraphicviewClass )) #define IS_GRAPHICVIEW( obj ) (GTK_CHECK_TYPE( (obj), TYPE_GRAPHICVIEW )) #define IS_GRAPHICVIEW_CLASS( klass ) \ (GTK_CHECK_CLASS_TYPE( (klass), TYPE_GRAPHICVIEW )) typedef struct _Graphicview { View view; /* My instance vars. */ Subcolumnview *sview; /* Enclosing subc. */ } Graphicview; typedef struct _GraphicviewClass { ViewClass parent_class; /* My methods. */ } GraphicviewClass; GtkType graphicview_get_type( void ); nip2-8.7.0/src/toolkitbrowser.h0000644000175000017500000000404213224651032013346 00000000000000/* Toolkit browser */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_TOOLKITBROWSER (toolkitbrowser_get_type()) #define TOOLKITBROWSER( obj ) \ (GTK_CHECK_CAST( (obj), TYPE_TOOLKITBROWSER, Toolkitbrowser )) #define TOOLKITBROWSER_CLASS( klass ) \ (GTK_CHECK_CLASS_CAST( (klass), \ TYPE_TOOLKITBROWSER, ToolkitbrowserClass )) #define IS_TOOLKITBROWSER( obj ) \ (GTK_CHECK_TYPE( (obj), TYPE_TOOLKITBROWSER )) #define IS_TOOLKITBROWSER_CLASS( klass ) \ (GTK_CHECK_CLASS_TYPE( (klass), TYPE_TOOLKITBROWSER )) struct _Toolkitbrowser { vObject parent_object; Toolkitgroup *kitg; Workspace *ws; GtkListStore *store; /* Model for list view */ GtkTreeModel *filter; /* After filtering with search box */ GtkWidget *tree; /* Displayed tree */ GtkWidget *entry; /* Search widget */ GtkWidget *top; /* hbox for top bar */ }; typedef struct _ToolkitbrowserClass { vObjectClass parent_class; } ToolkitbrowserClass; GtkType toolkitbrowser_get_type( void ); void toolkitbrowser_set_mainw( Toolkitbrowser *toolkitbrowser, Mainw *mainw ); Toolkitbrowser *toolkitbrowser_new( void ); int toolkitbrowser_get_width( Toolkitbrowser *toolkitbrowser ); void toolkitbrowser_set_workspace( Toolkitbrowser *toolkitbrowser, Workspace *ws ); nip2-8.7.0/src/conversionview.c0000644000175000017500000002116513224651032013335 00000000000000/* display an image in a window ... watching an Image model. */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #include "ip.h" static GtkEventBoxClass *parent_class = NULL; /* Find max and min of visible area of image. */ static gboolean conversionview_findmaxmin( Imagemodel *imagemodel, double *min, double *max ) { Conversion *conv = imagemodel->conv; Rect a, b; conversion_disp_to_im_rect( conv, &imagemodel->visible, &a ); im_rect_intersectrect( &a, &conv->image, &b ); if( findmaxmin( imageinfo_get( FALSE, conv->ii ), b.left, b.top, b.width, b.height, min, max ) ) { error_top( _( "Unable to find image range." ) ); error_sub( _( "Find image range failed." ) ); error_vips(); return( FALSE ); } return( TRUE ); } static void conversionview_scale_cb( GtkWidget *wid, Conversionview *cv ) { Imagemodel *imagemodel = cv->imagemodel; double min, max; progress_begin(); if( !conversionview_findmaxmin( imagemodel, &min, &max ) ) { progress_end(); iwindow_alert( wid, GTK_MESSAGE_ERROR ); return; } progress_end(); if( max - min < 1e-20 ) { error_top( _( "Unable to scale image." ) ); error_sub( _( "Maximum and minimum pixel values are equal." ) ); iwindow_alert( wid, GTK_MESSAGE_ERROR ); return; } imagemodel->scale = 255.0 / (max - min); imagemodel->offset = -(min * imagemodel->scale); iobject_changed( IOBJECT( imagemodel ) ); } static void conversionview_falsecolour_cb( GtkWidget *wid, Conversionview *cv ) { Imagemodel *imagemodel = cv->imagemodel; GtkCheckMenuItem *item = GTK_CHECK_MENU_ITEM( wid ); imagemodel->falsecolour = item->active; iobject_changed( IOBJECT( imagemodel ) ); } static void conversionview_interpret_cb( GtkWidget *wid, Conversionview *cv ) { Imagemodel *imagemodel = cv->imagemodel; GtkCheckMenuItem *item = GTK_CHECK_MENU_ITEM( wid ); imagemodel->type = item->active; iobject_changed( IOBJECT( imagemodel ) ); } static void conversionview_reset_cb( GtkWidget *wid, Conversionview *cv ) { Imagemodel *imagemodel = cv->imagemodel; if( imagemodel->iimage ) { Row *row = HEAPMODEL( imagemodel->iimage )->row; imagemodel->scale = row->ws->scale; imagemodel->offset = row->ws->offset; } else { imagemodel->scale = 1.0; imagemodel->offset = 0.0; } imagemodel->falsecolour = FALSE; imagemodel->type = TRUE; iobject_changed( IOBJECT( imagemodel ) ); } static void conversionview_set_default_cb( GtkWidget *wid, Conversionview *cv ) { Imagemodel *imagemodel = cv->imagemodel; if( imagemodel->iimage ) { Row *row = HEAPMODEL( imagemodel->iimage )->row; row->ws->scale = imagemodel->scale; row->ws->offset = imagemodel->offset; } } static void conversionview_hide_cb( GtkWidget *wid, Conversionview *cv ) { Imagemodel *imagemodel = cv->imagemodel; imagemodel_set_convert( imagemodel, FALSE ); } static void conversionview_class_init( ConversionviewClass *class ) { parent_class = g_type_class_peek_parent( class ); /* Create signals. */ /* Init methods. */ } /* Value changed in scale adjustment. */ static void conversionview_scale_change_cb( Tslider *tslider, Conversionview *cv ) { Imagemodel *imagemodel = cv->imagemodel; if( imagemodel->scale != tslider->value ) { imagemodel->scale = tslider->value; iobject_changed( IOBJECT( imagemodel ) ); } } /* Value changed in offset adjustment. */ static void conversionview_offset_change_cb( Tslider *tslider, Conversionview *cv ) { Imagemodel *imagemodel = cv->imagemodel; if( imagemodel->offset != tslider->value ) { imagemodel->offset = tslider->value; iobject_changed( IOBJECT( imagemodel ) ); } } static void conversionview_init( Conversionview *cv ) { Popupbutton *popupbutton; GtkWidget *hb; GtkWidget *sep; GtkWidget *pane; cv->imagemodel = NULL; gtk_frame_set_shadow_type( GTK_FRAME( cv ), GTK_SHADOW_OUT ); hb = gtk_hbox_new( FALSE, 2 ); gtk_container_set_border_width( GTK_CONTAINER( hb ), 2 ); gtk_container_add( GTK_CONTAINER( cv ), hb ); /* Build menu. One for each window, as we need to track falsecolour * etc. toggles. Could just have one, and modify pre-popup, but this * is easier. */ pane = menu_build( _( "Convert menu" ) ); menu_add_but( pane, _( "_Scale" ), GTK_SIGNAL_FUNC( conversionview_scale_cb ), cv ); cv->falsecolour = menu_add_tog( pane, _( "_False Color" ), GTK_SIGNAL_FUNC( conversionview_falsecolour_cb ), cv ); cv->type = menu_add_tog( pane, _( "_Interpret" ), GTK_SIGNAL_FUNC( conversionview_interpret_cb ), cv ); menu_add_but( pane, _( "_Reset" ), GTK_SIGNAL_FUNC( conversionview_reset_cb ), cv ); menu_add_but( pane, _( "Set As Workspace _Default" ), GTK_SIGNAL_FUNC( conversionview_set_default_cb ), cv ); menu_add_sep( pane ); menu_add_but( pane, GTK_STOCK_CLOSE, GTK_SIGNAL_FUNC( conversionview_hide_cb ), cv ); popupbutton = popupbutton_new(); popupbutton_set_menu( popupbutton, pane ); gtk_box_pack_start( GTK_BOX( hb ), GTK_WIDGET( popupbutton ), FALSE, FALSE, 0 ); cv->scale = tslider_new(); tslider_set_conversions( cv->scale, tslider_log_value_to_slider, tslider_log_slider_to_value ); cv->scale->from = 0.001; cv->scale->to = 255.0; cv->scale->value = 1.0; cv->scale->svalue = 128; cv->scale->digits = 3; tslider_changed( cv->scale ); gtk_box_pack_start( GTK_BOX( hb ), GTK_WIDGET( cv->scale ), TRUE, TRUE, 0 ); gtk_signal_connect( GTK_OBJECT( cv->scale ), "changed", GTK_SIGNAL_FUNC( conversionview_scale_change_cb ), cv ); tslider_set_ignore_scroll( cv->scale, FALSE ); sep = gtk_vseparator_new(); gtk_box_pack_start( GTK_BOX( hb ), sep, FALSE, FALSE, 0 ); cv->offset = tslider_new(); cv->offset->from = -128; cv->offset->to = 128; cv->offset->value = 0; cv->offset->svalue = 0; cv->offset->digits = 1; tslider_changed( cv->offset ); gtk_box_pack_start( GTK_BOX( hb ), GTK_WIDGET( cv->offset ), TRUE, TRUE, 0 ); gtk_signal_connect( GTK_OBJECT( cv->offset ), "changed", GTK_SIGNAL_FUNC( conversionview_offset_change_cb ), cv ); tslider_set_ignore_scroll( cv->offset, FALSE ); gtk_widget_show_all( hb ); } GtkType conversionview_get_type( void ) { static GtkType conversionview_type = 0; if( !conversionview_type ) { static const GtkTypeInfo sinfo = { "Conversionview", sizeof( Conversionview ), sizeof( ConversionviewClass ), (GtkClassInitFunc) conversionview_class_init, (GtkObjectInitFunc) conversionview_init, /* reserved_1 */ NULL, /* reserved_2 */ NULL, (GtkClassInitFunc) NULL, }; conversionview_type = gtk_type_unique( GTK_TYPE_FRAME, &sinfo ); } return( conversionview_type ); } /* Our conversion has changed ... update. */ static void conversionview_changed_cb( Imagemodel *imagemodel, Conversionview *cv ) { GtkCheckMenuItem *item; widget_visible( GTK_WIDGET( cv ), imagemodel->show_convert ); if( !imagemodel->show_convert ) return; if( cv->scale->value != imagemodel->scale ) { cv->scale->value = imagemodel->scale; tslider_changed( cv->scale ); } if( cv->offset->value != imagemodel->offset ) { cv->offset->value = imagemodel->offset; tslider_changed( cv->offset ); } item = GTK_CHECK_MENU_ITEM( cv->falsecolour ); if( item->active != imagemodel->falsecolour ) gtk_check_menu_item_set_active( item, imagemodel->falsecolour ); item = GTK_CHECK_MENU_ITEM( cv->type ); if( item->active != imagemodel->type ) gtk_check_menu_item_set_active( item, imagemodel->type ); } static void conversionview_link( Conversionview *cv, Imagemodel *imagemodel ) { g_assert( !cv->imagemodel ); cv->imagemodel = imagemodel; g_signal_connect( G_OBJECT( cv->imagemodel ), "changed", G_CALLBACK( conversionview_changed_cb ), cv ); } Conversionview * conversionview_new( Imagemodel *imagemodel ) { Conversionview *cv = gtk_type_new( TYPE_CONVERSIONVIEW ); conversionview_link( cv, imagemodel ); return( cv ); } nip2-8.7.0/src/iregiongroupview.c0000644000175000017500000001362213224651032013660 00000000000000/* coordinate the display of regionviews on imageviews */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #include "ip.h" static ViewClass *parent_class = NULL; static iRegiongroup * iregiongroupview_get_iregiongroup( iRegiongroupview *iregiongroupview ) { return( IREGIONGROUP( VOBJECT( iregiongroupview )->iobject ) ); } static Classmodel * iregiongroupview_get_classmodel( iRegiongroupview *iregiongroupview ) { iRegiongroup *iregiongroup; if( (iregiongroup = iregiongroupview_get_iregiongroup( iregiongroupview )) ) return( CLASSMODEL( ICONTAINER( iregiongroup )->parent ) ); return( NULL ); } static void iregiongroupview_destroy( GtkObject *object ) { iRegiongroupview *iregiongroupview; #ifdef DEBUG printf( "iregiongroupview_destroy: %p\n", object ); #endif /*DEBUG*/ g_return_if_fail( object != NULL ); g_return_if_fail( IS_IREGIONGROUPVIEW( object ) ); iregiongroupview = IREGIONGROUPVIEW( object ); /* Destroy all regionviews we manage. */ slist_map( iregiongroupview->classmodel->views, (SListMapFn) object_destroy, NULL ); GTK_OBJECT_CLASS( parent_class )->destroy( object ); } /* What we track during a refresh. */ typedef struct { GSList *notused; iRegiongroupview *iregiongroupview; Classmodel *classmodel; iImage *iimage; Imagepresent *ip; } iRegiongroupviewRefreshState; static Regionview * iregiongroupview_refresh_imageview_test( Regionview *regionview, iRegiongroupviewRefreshState *irs ) { if( regionview->classmodel == irs->classmodel && regionview->ip == irs->ip ) return( regionview ); return( NULL ); } static void * iregiongroupview_refresh_imageview( Imagepresent *ip, iRegiongroupviewRefreshState *irs ) { Regionview *regionview; irs->ip = ip; /* Do we have a Regionview for this iv already? */ if( (regionview = slist_map( irs->notused, (SListMapFn) iregiongroupview_refresh_imageview_test, irs )) ) { /* Yes ... reuse. */ irs->notused = g_slist_remove( irs->notused, regionview ); } else { /* Nope ... make a new one. */ iRegionInstance *instance = classmodel_get_instance( irs->classmodel ); PElement *root = &HEAPMODEL( irs->classmodel )->row->expr->root; if( instance ) { Regionview *regionview = regionview_new( irs->classmodel, &instance->area, ip ); #ifdef DEBUG printf( "iregiongroupview_refresh_imageview: " "creating new regionview\n" ); #endif /*DEBUG*/ /* Set the display type from the heap class name. */ regionview_set_type( regionview, root ); } } return( NULL ); } static void * iregiongroupview_refresh_iimage( iImage *iimage, iRegiongroupviewRefreshState *irs ) { irs->iimage = iimage; slist_map( iimage->views, (SListMapFn) iregiongroupview_refresh_imageview, irs ); return( NULL ); } static void iregiongroupview_refresh( vObject *vobject ) { iRegiongroupview *iregiongroupview = IREGIONGROUPVIEW( vobject ); iRegiongroupviewRefreshState irs; #ifdef DEBUG printf( "iregiongroupview_refresh\n" ); printf( "watching model %s %s\n", G_OBJECT_TYPE_NAME( vobject->iobject ), NN( IOBJECT( vobject->iobject )->name ) ); #endif /*DEBUG*/ iregiongroupview->classmodel = iregiongroupview_get_classmodel( iregiongroupview ); if( iregiongroupview->classmodel ) { /* Make a note of all the displays we have now, loop over the * displays we should have, reusing when possible ... remove * any unused displays at the end. */ irs.classmodel = iregiongroupview->classmodel; irs.notused = g_slist_copy( irs.classmodel->views ); irs.iregiongroupview = iregiongroupview; slist_map( irs.classmodel->iimages, (SListMapFn) iregiongroupview_refresh_iimage, &irs ); /* Remove all the regionviews we've not used. */ slist_map( irs.notused, (SListMapFn) object_destroy, NULL ); IM_FREEF( g_slist_free, irs.notused ); } VOBJECT_CLASS( parent_class )->refresh( vobject ); } static void iregiongroupview_class_init( iRegiongroupviewClass *class ) { GtkObjectClass *object_class = (GtkObjectClass *) class; vObjectClass *vobject_class = (vObjectClass *) class; parent_class = g_type_class_peek_parent( class ); object_class->destroy = iregiongroupview_destroy; /* Create signals. */ /* Init methods. */ vobject_class->refresh = iregiongroupview_refresh; } static void iregiongroupview_init( iRegiongroupview *iregiongroupview ) { #ifdef DEBUG printf( "iregiongroupview_init\n" ); #endif /*DEBUG*/ } GtkType iregiongroupview_get_type( void ) { static GtkType iregiongroupview_type = 0; if( !iregiongroupview_type ) { static const GtkTypeInfo info = { "iRegiongroupview", sizeof( iRegiongroupview ), sizeof( iRegiongroupviewClass ), (GtkClassInitFunc) iregiongroupview_class_init, (GtkObjectInitFunc) iregiongroupview_init, /* reserved_1 */ NULL, /* reserved_2 */ NULL, (GtkClassInitFunc) NULL, }; iregiongroupview_type = gtk_type_unique( TYPE_VIEW, &info ); } return( iregiongroupview_type ); } View * iregiongroupview_new( void ) { iRegiongroupview *iregiongroupview = gtk_type_new( TYPE_IREGIONGROUPVIEW ); #ifdef DEBUG printf( "iregiongroupview_new\n" ); #endif /*DEBUG*/ return( VIEW( iregiongroupview ) ); } nip2-8.7.0/src/matrixview.h0000644000175000017500000000405013224651032012453 00000000000000/* a matrixview in a workspace */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_MATRIXVIEW (matrixview_get_type()) #define MATRIXVIEW( obj ) (GTK_CHECK_CAST( (obj), TYPE_MATRIXVIEW, Matrixview )) #define MATRIXVIEW_CLASS( klass ) \ (GTK_CHECK_CLASS_CAST( (klass), TYPE_MATRIXVIEW, MatrixviewClass )) #define IS_MATRIXVIEW( obj ) (GTK_CHECK_TYPE( (obj), TYPE_MATRIXVIEW )) #define IS_MATRIXVIEW_CLASS( klass ) \ (GTK_CHECK_CLASS_TYPE( (klass), TYPE_MATRIXVIEW )) typedef struct _Matrixview { Graphicview parent_object; GtkWidget *box; /* Top level hbox we lay out in */ /* If we're displaying a matrix with a gtktreeview. */ GtkListStore *store; GtkWidget *sheet; GtkWidget *swin; /* Displaying a table of widgets: sliders or toggles. */ GtkWidget *table; /* Matrix table */ GSList *items; /* Widgets for elems */ MatrixDisplayType display; /* What's in items at the mo */ int width; /* Size of mat panel we have */ int height; GtkWidget *cbox; /* Convolution only: scale & offset */ GtkWidget *scale; GtkWidget *offset; } Matrixview; typedef struct _MatrixviewClass { GraphicviewClass parent_class; /* My methods. */ } MatrixviewClass; GtkType matrixview_get_type( void ); View *matrixview_new( void ); nip2-8.7.0/src/gtkutil.c0000644000175000017500000007157013224651032011745 00000000000000/* gtkutil functions. */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #include "ip.h" /* #define DEBUG */ /* All our tooltips. */ static GtkTooltips *our_tooltips = NULL; /* Set two adjustments together. */ void adjustments_set_value( GtkAdjustment *hadj, GtkAdjustment *vadj, float hval, float vval ) { gboolean hchanged = FALSE; gboolean vchanged = FALSE; if( hval != hadj->value ) { hadj->value = hval; hchanged = TRUE; } if( vval != vadj->value ) { vadj->value = vval; vchanged = TRUE; } #ifdef DEBUG if( hchanged ) printf( "adjustments_set_value: hadj = %g\n", hval ); if( vchanged ) printf( "adjustments_set_value: vadj = %g\n", vval ); #endif /*DEBUG*/ if( hchanged ) gtk_adjustment_value_changed( hadj ); if( vchanged ) gtk_adjustment_value_changed( vadj ); } void * object_destroy( void *obj ) { gtk_object_destroy( GTK_OBJECT( obj ) ); return( NULL ); } /* Like g_free, but return NULL for list maps. */ void * null_g_free( void *obj ) { g_free( obj ); return( NULL ); } /* Set visible/not. */ void widget_visible( GtkWidget *widget, gboolean visible ) { if( widget && visible ) gtk_widget_show( widget ); else if( widget && !visible ) gtk_widget_hide( widget ); } /* Make a button widget. */ GtkWidget * build_button( const char *stock_id, GtkSignalFunc cb, gpointer user ) { GtkWidget *but; but = gtk_button_new_from_stock( stock_id ); GTK_WIDGET_SET_FLAGS( but, GTK_CAN_DEFAULT ); gtk_signal_connect( GTK_OBJECT( but ), "clicked", cb, user ); return( but ); } /* Calculate the bounding box for a string rendered with a widget's default * font. Set geo to a rect with 0,0 positioned on the left-hand baseline. */ void get_geo( GtkWidget *widget, const char *text, Rect *geo ) { PangoLayout *layout; int width, height; layout = gtk_widget_create_pango_layout( widget, text ); pango_layout_get_pixel_size( layout, &width, &height ); g_object_unref( layout ); /* FIXME ... we left/top to 0 for now. */ geo->width = width; geo->height = height; geo->left = 0; geo->top = 0; } /* Set a widget to a fixed size ... width in characters. */ void set_fixed( GtkWidget *widget, int nchars ) { Rect geo; get_geo( widget, "8", &geo ); gtk_widget_set_size_request( widget, geo.width * nchars, geo.height ); } /* Build a GtkEntry, with a widget width specified in characters. */ GtkWidget * build_entry( int nchars ) { GtkWidget *entry; entry = gtk_entry_new(); gtk_entry_set_width_chars( GTK_ENTRY( entry ), nchars ); return( entry ); } /* Build a new menu. */ GtkWidget * menu_build( const char *name ) { GtkWidget *menu; menu = gtk_menu_new(); gtk_menu_set_title( GTK_MENU( menu ), name ); return( menu ); } /* Add a menu item. */ GtkWidget * menu_add_but( GtkWidget *menu, const char *stock_id, GtkSignalFunc cb, void *user ) { GtkWidget *but; /* We don't provide an accel group for popup menus. */ but = gtk_image_menu_item_new_from_stock( stock_id, NULL ); gtk_menu_shell_append( GTK_MENU_SHELL( menu ), but ); gtk_widget_show( but ); gtk_signal_connect( GTK_OBJECT( but ), "activate", cb, user ); return( but ); } /* Add a toggle item. */ GtkWidget * menu_add_tog( GtkWidget *menu, const char *name, GtkSignalFunc cb, void *user ) { GtkWidget *tog; tog = gtk_check_menu_item_new_with_mnemonic( name ); gtk_menu_shell_append( GTK_MENU_SHELL( menu ), tog ); gtk_widget_show( tog ); gtk_signal_connect( GTK_OBJECT( tog ), "toggled", cb, user ); return( tog ); } /* Add a separator. */ GtkWidget * menu_add_sep( GtkWidget *menu ) { GtkWidget *sep; sep = gtk_menu_item_new(); gtk_widget_set_sensitive( GTK_WIDGET( sep ), FALSE ); gtk_menu_shell_append( GTK_MENU_SHELL( menu ), sep ); gtk_widget_show( sep ); return( sep ); } /* Add a pullright. */ GtkWidget * menu_add_pullright( GtkWidget *menu, const char *stock_id ) { GtkWidget *pullright; GtkWidget *subpane; subpane = gtk_menu_new(); pullright = gtk_image_menu_item_new_from_stock( stock_id, NULL ); gtk_menu_item_set_submenu( GTK_MENU_ITEM( pullright ), subpane ); gtk_menu_shell_append( GTK_MENU_SHELL( menu ), pullright ); gtk_widget_show( pullright ); return( subpane ); } /* Four quarks: each menu item has a quark linking back to the main pane, * plus a quark for the user signal. The main pane has a quark linking to the * widget the menu was popped from, and that has the userdata for this context. * One more quark holds the popup in a host. */ static GQuark quark_main = 0; static GQuark quark_host = 0; static GQuark quark_data = 0; static GQuark quark_popup = 0; /* Build a new popup menu. */ GtkWidget * popup_build( const char *name ) { /* Build our quarks. */ if( !quark_main ) { quark_main = g_quark_from_static_string( "quark_main" ); quark_host = g_quark_from_static_string( "quark_host" ); quark_data = g_quark_from_static_string( "quark_data" ); quark_popup = g_quark_from_static_string( "quark_popup" ); } return( menu_build( name ) ); } /* Activate function for a popup menu item. */ static void popup_activate_cb( GtkWidget *item, PopupFunc cb ) { GtkWidget *qmain = gtk_object_get_data_by_id( GTK_OBJECT( item ), quark_main ); GtkWidget *qhost = gtk_object_get_data_by_id( GTK_OBJECT( qmain ), quark_host ); void *qdata = gtk_object_get_data_by_id( GTK_OBJECT( qhost ), quark_data ); (*cb)( item, qhost, qdata ); } /* Add a menu item to a popup. */ GtkWidget * popup_add_but( GtkWidget *popup, const char *name, PopupFunc cb ) { GtkWidget *but = menu_add_but( popup, name, GTK_SIGNAL_FUNC( popup_activate_cb ), (void *) cb ); gtk_object_set_data_by_id( GTK_OBJECT( but ), quark_main, popup ); return( but ); } /* Add a toggle item to a popup. */ GtkWidget * popup_add_tog( GtkWidget *popup, const char *name, PopupFunc cb ) { GtkWidget *tog = menu_add_tog( popup, name, GTK_SIGNAL_FUNC( popup_activate_cb ), (void *) cb ); gtk_object_set_data_by_id( GTK_OBJECT( tog ), quark_main, popup ); return( tog ); } /* Add a pullright item to a popup. Return the empty sub-pane. */ GtkWidget * popup_add_pullright( GtkWidget *popup, const char *name ) { GtkWidget *pullright = menu_add_pullright( popup, name ); gtk_object_set_data_by_id( GTK_OBJECT( pullright ), quark_main, popup ); return( pullright ); } /* Show the popup. */ void popup_show( GtkWidget *host, GdkEvent *ev ) { GtkWidget *popup = gtk_object_get_data_by_id( GTK_OBJECT( host ), quark_popup ); gtk_object_set_data_by_id( GTK_OBJECT( popup ), quark_host, host ); gtk_menu_popup( GTK_MENU( popup ), NULL, NULL, (GtkMenuPositionFunc) NULL, NULL, 3, ev->button.time ); } /* Event handler for popupshow. */ static gboolean popup_handle_event( GtkWidget *host, GdkEvent *ev, gpointer dummy ) { gboolean handled = FALSE; if( ev->type == GDK_BUTTON_PRESS && ev->button.button == 3 ) { popup_show( host, ev ); handled = TRUE; } else if( ev->type == GDK_KEY_PRESS && ev->key.keyval == GDK_F10 && ev->key.state & GDK_SHIFT_MASK ) { popup_show( host, ev ); handled = TRUE; } return( handled ); } /* Link a host to a popup. */ void popup_link( GtkWidget *host, GtkWidget *popup, void *data ) { gtk_object_set_data_by_id( GTK_OBJECT( host ), quark_popup, popup ); gtk_object_set_data_by_id( GTK_OBJECT( host ), quark_data, data ); } /* Add a callback to show a popup. */ guint popup_attach( GtkWidget *host, GtkWidget *popup, void *data ) { guint sid; popup_link( host, popup, data ); /* We can't just use gtk_menu_attach_to_widget(), since that can only * attach a menu to a single widget. We want to be able to attach a * single menu to meny widgets. */ sid = gtk_signal_connect( GTK_OBJECT( host ), "event", GTK_SIGNAL_FUNC( popup_handle_event ), NULL ); return( sid ); } void popup_detach( GtkWidget *host, guint sid ) { gtk_signal_disconnect( GTK_OBJECT( host ), sid ); } static void set_tooltip_events( GtkWidget *wid ) { gtk_widget_add_events( wid, GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK ); } /* Set the tooltip on a widget. */ void set_tooltip( GtkWidget *wid, const char *fmt, ... ) { va_list ap; char *txt; if( !wid ) return; if( !fmt ) fmt = ""; va_start( ap, fmt ); txt = g_strdup_vprintf( fmt, ap ); va_end( ap ); if( !our_tooltips ) our_tooltips = gtk_tooltips_new(); gtk_tooltips_set_tip( our_tooltips, wid, txt, NULL ); if( !GTK_WIDGET_REALIZED( wid ) ) gtk_signal_connect( GTK_OBJECT( wid ), "realize", GTK_SIGNAL_FUNC( set_tooltip_events ), NULL ); else set_tooltip_events( wid ); g_free( txt ); } /* Track tooltips we generate with one of these. */ typedef struct _TooltipGenerate { GtkWidget *widget; TooltipGenerateFn generate; void *a; void *b; VipsBuf buf; char txt[256]; } TooltipGenerate; static void tooltip_generate_free( GtkWidget *widget, TooltipGenerate *gen ) { gen->widget = NULL; gen->generate = NULL; gen->a = NULL; gen->b = NULL; IM_FREE( gen ); } static gboolean tooltip_generate_rebuild( GtkWidget *widget, GdkEventCrossing *event, TooltipGenerate *gen ) { gboolean handled = FALSE; if( gen->widget ) { vips_buf_rewind( &gen->buf ); gen->generate( widget, &gen->buf, gen->a, gen->b ); set_tooltip( gen->widget, "%s", vips_buf_all( &gen->buf ) ); } return( handled ); } static void tooltip_generate_attach( GtkWidget *widget, TooltipGenerate *gen ) { /* Must have enter/leave. */ gtk_widget_add_events( widget, GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK ); /* On enter, regenerate the tooltip. */ g_signal_connect( widget, "enter_notify_event", G_CALLBACK( tooltip_generate_rebuild ), gen ); } /* Set a callback to be used to generate the tooltip. */ void set_tooltip_generate( GtkWidget *widget, TooltipGenerateFn generate, void *a, void *b ) { TooltipGenerate *gen; if( !(gen = INEW( NULL, TooltipGenerate )) ) return; gen->widget = widget; gen->generate = generate; gen->a = a; gen->b = b; vips_buf_init_static( &gen->buf, gen->txt, 256 ); g_signal_connect( widget, "destroy", G_CALLBACK( tooltip_generate_free ), gen ); if( !GTK_WIDGET_REALIZED( widget ) ) g_signal_connect( widget, "realize", G_CALLBACK( tooltip_generate_attach ), gen ); else tooltip_generate_attach( widget, gen ); } /* Junk all tooltips, helps trim valgrind noise. */ void junk_tooltips( void ) { if( our_tooltips ) g_object_ref_sink( GTK_OBJECT( our_tooltips ) ); } /* Set a GtkEditable. */ void set_gentryv( GtkWidget *edit, const char *fmt, va_list ap ) { char buf[1000]; gint position; int i; int len; if( !edit ) return; if( !fmt ) fmt = ""; (void) im_vsnprintf( buf, 1000, fmt, ap ); /* Filter out /n and /t ... they confuse gtkentry terribly */ len = strlen( buf ); for( i = 0; i < len; i++ ) if( buf[i] == '\n' || buf[i] == '\t' ) buf[i] = ' '; gtk_editable_delete_text( GTK_EDITABLE( edit ), 0, -1 ); position = 0; gtk_editable_insert_text( GTK_EDITABLE( edit ), buf, strlen( buf ), &position ); } /* Set a GtkEditable. */ void set_gentry( GtkWidget *edit, const char *fmt, ... ) { va_list ap; va_start( ap, fmt ); set_gentryv( edit, fmt, ap ); va_end( ap ); } void set_glabel( GtkWidget *label, const char *fmt, ... ) { va_list ap; char buf[1000]; va_start( ap, fmt ); (void) im_vsnprintf( buf, 1000, fmt, ap ); va_end( ap ); gtk_label_set_text( GTK_LABEL( label ), buf ); } /* Like set_glabel(), but don't display multi-line strings (just display the * first line). */ void set_glabel1( GtkWidget *label, const char *fmt, ... ) { va_list ap; char txt[1000]; VipsBuf buf = VIPS_BUF_STATIC( txt ); va_start( ap, fmt ); vips_buf_vappendf( &buf, fmt, ap ); va_end( ap ); gtk_label_set_text( GTK_LABEL( label ), vips_buf_firstline( &buf ) ); } /* Like set_glabel, but do it caption-style. */ void set_gcaption( GtkWidget *label, const char *fmt, ... ) { va_list ap; char buf1[1000]; char buf2[1000]; va_start( ap, fmt ); (void) im_vsnprintf( buf1, 1000, fmt, ap ); va_end( ap ); escape_markup( buf1, buf2, 1000 ); (void) im_snprintf( buf1, 1000, "%s", buf2 ); gtk_label_set_markup( GTK_LABEL( label ), buf1 ); } gboolean get_geditable_name( GtkWidget *text, char *out, int sz ) { char *name; char *tname; name = gtk_editable_get_chars( GTK_EDITABLE( text ), 0, -1 ); tname = trim_nonalpha( name ); if( !tname ) { IM_FREEF( g_free, name ); error_top( _( "Bad identifier." ) ); error_sub( _( "Enter an identifier. Identifiers start with " "a letter, and then contain only letters, numbers, " "apostrophy and underscore." ) ); return( FALSE ); } im_strncpy( out, tname, sz ); g_free( name ); return( TRUE ); } gboolean get_geditable_string( GtkWidget *text, char *out, int sz ) { char *str; str = gtk_editable_get_chars( GTK_EDITABLE( text ), 0, -1 ); im_strncpy( out, str, sz ); g_free( str ); return( TRUE ); } gboolean get_geditable_filename( GtkWidget *text, char *out, int sz ) { char *filename; char *tfilename; filename = gtk_editable_get_chars( GTK_EDITABLE( text ), 0, -1 ); tfilename = trim_white( filename ); if( !is_valid_filename( tfilename ) ) { g_free( filename ); return( FALSE ); } im_strncpy( out, tfilename, sz ); g_free( filename ); return( TRUE ); } /* Get a geditable as a double. */ gboolean get_geditable_double( GtkWidget *text, double *out ) { char *txt; char *end; double t; txt = gtk_editable_get_chars( GTK_EDITABLE( text ), 0, -1 ); t = strtod( txt, &end ); if( end == txt ) { error_top( _( "Bad floating point number." ) ); error_sub( _( "\"%s\" is not a floating point number." ), txt ); g_free( txt ); return( FALSE ); } if( strspn( end, WHITESPACE ) != strlen( end ) ) { error_top( _( "Bad floating point number." ) ); error_sub( _( "Extra characters \"%s\" after number." ), end ); g_free( txt ); return( FALSE ); } g_free( txt ); *out = t; return( TRUE ); } /* Get as int. */ gboolean get_geditable_int( GtkWidget *text, int *n ) { int i; char *txt; /* Parse values. */ txt = gtk_editable_get_chars( GTK_EDITABLE( text ), 0, -1 ); if( sscanf( txt, "%i", &i ) != 1 ) { error_top( _( "Bad integer." ) ); error_sub( _( "\"%s\" is not an integer." ), txt ); g_free( txt ); return( FALSE ); } g_free( txt ); *n = i; return( TRUE ); } /* Get as unsigned int. */ gboolean get_geditable_uint( GtkWidget *text, int *n ) { int i; if( !get_geditable_int( text, &i ) || i < 0 ) { error_top( _( "Bad unsigned integer." ) ); return( FALSE ); } *n = i; return( TRUE ); } /* Get as positive int. */ gboolean get_geditable_pint( GtkWidget *text, int *n ) { int i; if( !get_geditable_int( text, &i ) || i <= 0 ) { error_top( _( "Bad positive integer." ) ); return( FALSE ); } *n = i; return( TRUE ); } /* Indent widget, label above. */ GtkWidget * build_glabelframe2( GtkWidget *widget, const char *name ) { GtkWidget *lab; GtkWidget *vb; GtkWidget *hb; GtkWidget *inv; char buf[1000]; hb = gtk_hbox_new( FALSE, 2 ); inv = gtk_label_new( "" ); gtk_box_pack_start( GTK_BOX( hb ), inv, FALSE, FALSE, 15 ); gtk_box_pack_start( GTK_BOX( hb ), widget, TRUE, TRUE, 0 ); vb = gtk_vbox_new( FALSE, 2 ); im_snprintf( buf, 1000, _( "%s:" ), name ); lab = gtk_label_new( buf ); gtk_misc_set_alignment( GTK_MISC( lab ), 0.0, 0.5 ); gtk_box_pack_start( GTK_BOX( vb ), lab, FALSE, FALSE, 0 ); gtk_box_pack_start( GTK_BOX( vb ), hb, TRUE, TRUE, 0 ); return( vb ); } /* Make a text field + label. Indent the text on a new line. */ GtkWidget * build_glabeltext3( GtkWidget *box, const char *label ) { GtkWidget *txt; GtkWidget *vb; txt = gtk_entry_new(); vb = build_glabelframe2( txt, label ); gtk_box_pack_start( GTK_BOX( box ), vb, FALSE, FALSE, 0 ); return( txt ); } /* Make text field plus label .. use a sizegroup for alignment. */ GtkWidget * build_glabeltext4( GtkWidget *box, GtkSizeGroup *group, const char *text ) { GtkWidget *hbox; GtkWidget *label; GtkWidget *entry; char buf[256]; hbox = gtk_hbox_new( FALSE, 12 ); im_snprintf( buf, 256, _( "%s:" ), text ); label = gtk_label_new( buf ); gtk_misc_set_alignment( GTK_MISC( label ), 0.0, 0.5 ); if( group ) gtk_size_group_add_widget( group, label ); gtk_box_pack_start( GTK_BOX( hbox ), label, FALSE, FALSE, 0 ); entry = gtk_entry_new(); gtk_box_pack_start( GTK_BOX( hbox ), entry, TRUE, TRUE, 0 ); gtk_box_pack_start( GTK_BOX( box ), hbox, FALSE, FALSE, 0 ); gtk_widget_show_all( hbox ); return( entry ); } /* Make a labeled toggle. */ GtkWidget * build_gtoggle( GtkWidget *box, const char *caption ) { GtkWidget *hb; GtkWidget *inv; GtkWidget *toggle; /* Indent left a bit. */ inv = gtk_label_new( "" ); hb = gtk_hbox_new( FALSE, 0 ); gtk_box_pack_start( GTK_BOX( hb ), inv, FALSE, FALSE, 2 ); toggle = gtk_check_button_new_with_label( caption ); gtk_container_set_border_width( GTK_CONTAINER( toggle ), 4 ); gtk_box_pack_start( GTK_BOX( hb ), toggle, TRUE, TRUE, 0 ); gtk_box_pack_start( GTK_BOX( box ), hb, FALSE, FALSE, 0 ); return( toggle ); } /* Make a label plus option menu. */ GtkWidget * build_goption( GtkWidget *box, GtkSizeGroup *group, const char *name, const char *item_names[], int nitem, GtkSignalFunc fn, void *value ) { GtkWidget *hb; GtkWidget *label; GtkWidget *om; int i; char buf[1000]; hb = gtk_hbox_new( FALSE, 12 ); im_snprintf( buf, 1000, _( "%s:" ), name ); label = gtk_label_new( buf ); if( group ) gtk_size_group_add_widget( group, label ); gtk_box_pack_start( GTK_BOX( hb ), label, FALSE, TRUE, 0 ); om = gtk_combo_box_new_text(); gtk_box_pack_start( GTK_BOX( hb ), om, FALSE, TRUE, 0 ); set_tooltip( om, _( "Left-click to change value" ) ); for( i = 0; i < nitem; i++ ) gtk_combo_box_append_text( GTK_COMBO_BOX( om ), _( item_names[i] ) ); if( fn ) gtk_signal_connect( GTK_OBJECT( om ), "changed", fn, value ); gtk_box_pack_start( GTK_BOX( box ), hb, FALSE, TRUE, 0 ); gtk_widget_show_all( hb ); return( om ); } /* Register a widget as a filename drag receiver. */ typedef struct { GtkWidget *widget; FiledropFunc fn; void *client; } FiledropInfo; static gboolean filedrop_trigger( FiledropInfo *fdi, const char *path ) { char buf[FILENAME_MAX]; gboolean result; im_strncpy( buf, path, FILENAME_MAX ); path_compact( buf ); result = fdi->fn( fdi->client, buf ); return( result ); } static void filedrop_drag_data_received( GtkWidget *widget, GdkDragContext *context, gint x, gint y, GtkSelectionData *data, guint info, guint time, FiledropInfo *fdi ) { gchar *sPath = NULL; gchar *pFrom, *pTo; gboolean result; pFrom = strstr( (char *) data->data, "file:" ); while( pFrom ) { #if !GLIB_CHECK_VERSION (2,0,0) pFrom += 5; /* remove 'file:' */ #else GError *error = NULL; #endif pTo = pFrom; while( *pTo != 0 && *pTo != 0xd && *pTo != 0xa ) pTo += 1; sPath = g_strndup( pFrom, pTo - pFrom ); #if !GLIB_CHECK_VERSION (2,0,0) result = filedrop_trigger( fdi, sPath ); #else /* format changed with Gtk+1.3, use conversion */ pFrom = g_filename_from_uri( sPath, NULL, &error ); result = filedrop_trigger( fdi, pFrom ); g_free( pFrom ); #endif g_free( sPath ); if( !result ) iwindow_alert( fdi->widget, GTK_MESSAGE_ERROR ); pFrom = strstr( pTo, "file:" ); } gtk_drag_finish( context, TRUE, FALSE, time ); } /* HB: file dnd stuff lent by The Gimp via Dia, not fully understood * but working ... */ enum { TARGET_URI_LIST, TARGET_TEXT_PLAIN }; static void filedrop_destroy( GtkWidget *widget, FiledropInfo *fdi ) { im_free( fdi ); } void filedrop_register( GtkWidget *widget, FiledropFunc fn, void *client ) { static GtkTargetEntry target_table[] = { { "text/uri-list", 0, TARGET_URI_LIST }, { "text/plain", 0, TARGET_TEXT_PLAIN } }; FiledropInfo *fdi = INEW( NULL, FiledropInfo ); fdi->widget = widget; fdi->fn = fn; fdi->client = client; gtk_signal_connect( GTK_OBJECT( widget ), "destroy", GTK_SIGNAL_FUNC( filedrop_destroy ), fdi ); gtk_drag_dest_set( GTK_WIDGET( widget ), GTK_DEST_DEFAULT_ALL, target_table, IM_NUMBER( target_table ), GDK_ACTION_COPY | /* That's all you need to get draggable URIs in GNOME and * win32, but KDE needs these other flags too, apparently. */ GDK_ACTION_MOVE | GDK_ACTION_LINK | GDK_ACTION_ASK ); gtk_signal_connect( GTK_OBJECT( widget ), "drag_data_received", GTK_SIGNAL_FUNC( filedrop_drag_data_received ), fdi ); } /* Add symbol drag to the target list. */ void set_symbol_drag_type( GtkWidget *widget ) { static const GtkTargetEntry targets[] = { { "text/symbol", 0, TARGET_SYMBOL } }; GtkTargetList *target_list; if( !GTK_WIDGET_REALIZED( widget ) ) return; /* We can't always set the dest types, since we're probably already a * filedrop. Just add to the target list. */ if( (target_list = gtk_drag_dest_get_target_list( widget )) ) gtk_target_list_add_table( target_list, targets, IM_NUMBER( targets ) ); else gtk_drag_dest_set( widget, GTK_DEST_DEFAULT_HIGHLIGHT | GTK_DEST_DEFAULT_MOTION | GTK_DEST_DEFAULT_DROP, targets, IM_NUMBER( targets ), GDK_ACTION_COPY ); gtk_drag_source_set( widget, GDK_BUTTON1_MASK | GDK_BUTTON3_MASK, targets, IM_NUMBER( targets ), GDK_ACTION_COPY | GDK_ACTION_MOVE ); } typedef struct _Listen { GObject *gobject; /* This object */ GObject *source; /* Listens for signals from this */ GObject **zap; /* NULL this on destroy */ const char *name; /* Signal name */ GCallback gcallback; /* Call this handler */ guint name_sid; guint gobject_destroy_sid; guint source_destroy_sid; } Listen; static void listen_gobject_destroy_cb( GObject *gobject, Listen *listen ) { /* gobject has gone ... source should no longer send us signals. */ FREESID( listen->name_sid, listen->source ); FREESID( listen->source_destroy_sid, listen->source ); g_free( listen ); } static void listen_source_destroy_cb( GObject *gobject, Listen *listen ) { /* Source has gone, these signals have been destroyed. */ listen->name_sid = 0; listen->source_destroy_sid = 0; /* Link broken, no need to auto-free us on gobject destroy. */ FREESID( listen->gobject_destroy_sid, listen->gobject ); /* Zap gobject member pointer to source. */ if( listen->zap ) { g_assert( !*(listen->zap) || *(listen->zap) == listen->source ); *(listen->zap) = NULL; } g_free( listen ); } void listen_add( GObject *gobject, GObject **zap, const char *name, GCallback gcallback ) { Listen *listen = g_new( Listen, 1 ); listen->gobject = gobject; listen->source = *zap; listen->zap = zap; listen->name = name; listen->gcallback = gcallback; listen->name_sid = g_signal_connect( listen->source, listen->name, listen->gcallback, listen->gobject ); listen->source_destroy_sid = g_signal_connect( listen->source, "destroy", G_CALLBACK( listen_source_destroy_cb ), listen ); listen->gobject_destroy_sid = g_signal_connect( gobject, "destroy", G_CALLBACK( listen_gobject_destroy_cb ), listen ); } void widget_update_pointer( GtkWidget *widget, GdkEvent *ev ) { if( ev->type == GDK_MOTION_NOTIFY && ev->motion.is_hint ) { GdkDisplay *display = gtk_widget_get_display( widget ); GdkScreen *screen; int x_root, y_root; gdk_display_get_pointer( display, &screen, &x_root, &y_root, NULL ); ev->motion.x_root = x_root; ev->motion.y_root = y_root; } } void * gobject_print( GObject *gobject ) { printf( "%s (%p)\n", G_OBJECT_TYPE_NAME( gobject ), gobject ); return( NULL ); } /* Get the default DPI. */ int get_dpi( void ) { GdkScreen *screen = gdk_screen_get_default(); if( screen ) { int width_pixels = gdk_screen_get_width( screen ); int width_mm = gdk_screen_get_width_mm( screen ); return( width_pixels / (width_mm / 25.4) ); } else return( 72 ); } GtkWidget * image_new_from_file( const char *name ) { GtkWidget *image; char *file; if( (file = path_find_file( name )) ) { image = (GtkWidget *) callv_string_filename( (callv_string_fn) gtk_image_new_from_file, file, NULL, NULL, NULL ); im_free( file ); } else /* We get a broken image icon if this fails. */ image = gtk_image_new_from_file( name ); return( image ); } void vfatal( GError **error ) { fprintf( stderr, PACKAGE ": fatal error\n" ); if( *error ) { fprintf( stderr, "%s\n", (*error)->message ); IM_FREEF( g_error_free, *error ); } exit( -1 ); } char * text_view_get_text( GtkTextView *text_view ) { GtkTextBuffer *text_buffer = gtk_text_view_get_buffer( text_view ); GtkTextIter start_iter; GtkTextIter end_iter; char *text; gtk_text_buffer_get_start_iter( text_buffer, &start_iter ); gtk_text_buffer_get_end_iter( text_buffer, &end_iter ); text = gtk_text_buffer_get_text( text_buffer, &start_iter, &end_iter, FALSE ); return( text ); } void text_view_set_text( GtkTextView *text_view, const char *text, gboolean editable ) { GtkTextBuffer *text_buffer = gtk_text_view_get_buffer( text_view ); gtk_text_buffer_set_text( text_buffer, text ? text : "", -1 ); gtk_text_view_set_editable( text_view, editable ); gtk_text_view_set_cursor_visible( text_view, editable ); } void text_view_select_text( GtkTextView *text_view, int start, int end ) { GtkTextBuffer *text_buffer = gtk_text_view_get_buffer( text_view ); GtkTextMark *mark = gtk_text_buffer_get_insert( text_buffer ); GtkTextIter start_iter; GtkTextIter end_iter; gtk_text_buffer_get_iter_at_offset( text_buffer, &start_iter, start ); gtk_text_buffer_get_iter_at_offset( text_buffer, &end_iter, end ); gtk_text_buffer_select_range( text_buffer, &start_iter, &end_iter ); gtk_text_view_scroll_mark_onscreen( text_view, mark ); } /* If parent dies, kill us too. Parent can be anything, but child must be an * iobject. */ typedef struct _DestroyIfDestroyed { GObject *child; GObject *parent; DestroyFn destroy_fn; } DestroyIfDestroyed; static void destroy_if_destroyed_parent_cb( DestroyIfDestroyed *difd, GObject *parent ); static void destroy_if_destroyed_child_cb( DestroyIfDestroyed *difd, GObject *child ); static void destroy_if_destroyed_parent_cb( DestroyIfDestroyed *difd, GObject *parent ) { GObject *child; DestroyFn destroy_fn; #ifdef DEBUG printf( "destroy_if_destroyed_parent_cb: %p\n", difd ); #endif /*DEBUG*/ /* Destroying the child will trigger the other half of difd, make sure * we remove the link first. */ child = difd->child; destroy_fn = difd->destroy_fn; g_object_weak_unref( difd->child, (GWeakNotify) destroy_if_destroyed_child_cb, difd ); destroy_fn( child ); difd->child = NULL; difd->parent = NULL; difd->destroy_fn = NULL; g_free( difd ); } static void destroy_if_destroyed_child_cb( DestroyIfDestroyed *difd, GObject *child ) { #ifdef DEBUG printf( "destroy_if_destroyed_child_cb: %p\n", difd ); #endif /*DEBUG*/ g_object_weak_unref( difd->parent, (GWeakNotify) destroy_if_destroyed_parent_cb, difd ); difd->child = NULL; difd->parent = NULL; difd->destroy_fn = NULL; g_free( difd ); } void destroy_if_destroyed( GObject *child, GObject *parent, DestroyFn destroy_fn ) { DestroyIfDestroyed *difd = g_new( DestroyIfDestroyed, 1 ); #ifdef DEBUG printf( "destroy_if_destroyed %p: parent=%p, child=%p\n", difd, parent, child ); #endif /*DEBUG*/ difd->child = child; difd->parent = parent; difd->destroy_fn = destroy_fn; g_object_weak_ref( parent, (GWeakNotify) destroy_if_destroyed_parent_cb, difd ); g_object_weak_ref( child, (GWeakNotify) destroy_if_destroyed_child_cb, difd ); } /* A 'safe' way to run a few events. */ void process_events( void ) { /* Max events we process before signalling a timeout. Without this we * can get stuck in event loops in some circumstances. */ static const int max_events = 100; /* Block too much recursion. 0 is from the top-level, 1 is from a * callback, we don't want any more than that. */ if( g_main_depth() < 2 ) { int n; #ifdef DEBUG printf( "progress_update: starting event dispatch\n" ); #endif /*DEBUG*/ for( n = 0; n < max_events && g_main_context_iteration( NULL, FALSE ); n++ ) ; #ifdef DEBUG printf( "progress_update: event dispatch done\n" ); if( n == max_events ) printf( "progress_update: event dispatch timeout\n" ); #endif /*DEBUG*/ } } nip2-8.7.0/src/iwindow.c0000644000175000017500000006053413224651032011740 00000000000000/* make and manage base windows ... dialog (messagebox, file box), top * level windows */ /* Copyright (C) 1991-2001, The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* build interface: iwnd = iwindow_new( type ); iwindow_set_*( iwnd, ... ); iwindow_build( iwnd ); destroy interface: iwindow_kill() 'cancellable' kill ... user popdown can return IWINDOW_ERROR or IWINDOW_NO to prevent popdown gtk_widget_destroy() non-cancellable ... popdown is not called so ... don't free() in popdown, subclass iwnd and free() in _destroy() */ /* #define DEBUG */ #include "ip.h" /* Cursor bitmaps. */ #include "BITMAPS/dropper_src.xbm" #include "BITMAPS/dropper_msk.xbm" #include "BITMAPS/magin_src.xbm" #include "BITMAPS/magout_src.xbm" #include "BITMAPS/mag_msk.xbm" #include "BITMAPS/watch_1.xbm" #include "BITMAPS/watch_2.xbm" #include "BITMAPS/watch_3.xbm" #include "BITMAPS/watch_4.xbm" #include "BITMAPS/watch_5.xbm" #include "BITMAPS/watch_6.xbm" #include "BITMAPS/watch_7.xbm" #include "BITMAPS/watch_8.xbm" #include "BITMAPS/watch_msk.xbm" static GtkWindowClass *parent_class = NULL; /* List of all iwindows. */ static GSList *iwindow_all = NULL; /* All our cursors. */ static GdkCursor *iwindow_cursor[IWINDOW_SHAPE_LAST] = { NULL }; #ifdef DEBUG /* Human-readable names for cursor shapes. */ static const char *iwindow_cursor_name[] = { "IWINDOW_SHAPE_DROPPER", "IWINDOW_SHAPE_PEN", "IWINDOW_SHAPE_SMUDGE", "IWINDOW_SHAPE_SMEAR", "IWINDOW_SHAPE_TEXT", "IWINDOW_SHAPE_RECT", "IWINDOW_SHAPE_FLOOD", "IWINDOW_SHAPE_MOVE", "IWINDOW_SHAPE_EDIT", "IWINDOW_SHAPE_MAGIN", "IWINDOW_SHAPE_MAGOUT", "IWINDOW_SHAPE_TOP", "IWINDOW_SHAPE_BOTTOM", "IWINDOW_SHAPE_LEFT", "IWINDOW_SHAPE_RIGHT", "IWINDOW_SHAPE_TOPRIGHT", "IWINDOW_SHAPE_TOPLEFT", "IWINDOW_SHAPE_BOTTOMRIGHT", "IWINDOW_SHAPE_BOTTOMLEFT", "IWINDOW_SHAPE_HGLASS1", "IWINDOW_SHAPE_HGLASS2", "IWINDOW_SHAPE_HGLASS3", "IWINDOW_SHAPE_HGLASS4", "IWINDOW_SHAPE_HGLASS5", "IWINDOW_SHAPE_HGLASS6", "IWINDOW_SHAPE_HGLASS7", "IWINDOW_SHAPE_HGLASS8", "IWINDOW_SHAPE_NONE" }; #endif /*DEBUG*/ int iwindow_number( void ) { return( g_slist_length( iwindow_all ) ); } /* Pick an iwindow at random. Used if we need a window for a dialog, and we're * not sure which to pick. During shutdown we can have no windows. */ iWindow * iwindow_pick_one( void ) { if( !iwindow_all ) return( NULL ); return( IWINDOW( iwindow_all->data ) ); } /* Over all windows. */ void * iwindow_map_all( iWindowMapFn fn, void *a ) { return( slist_map( iwindow_all, (SListMapFn) fn, a ) ); } /* Make a custom cursor ... source, mask, width, height and hot spot position. */ static GdkCursor * iwindow_make_cursor_data( guchar *src_bits, guchar *msk_bits, int w, int h, int x, int y ) { GdkPixmap *src; GdkPixmap *msk; GdkCursor *cursor; GdkColor fg = { 0, 255 << 8, 255 << 8, 255 << 8 }; GdkColor bg = { 0, 0, 0, 0 }; src = gdk_bitmap_create_from_data( NULL, (const char *) src_bits, w, h ); msk = gdk_bitmap_create_from_data( NULL, (const char *) msk_bits, w, h ); cursor = gdk_cursor_new_from_pixmap( src, msk, &fg, &bg, x, y ); gdk_pixmap_unref( src ); gdk_pixmap_unref( msk ); return( cursor ); } /* Build all the cursors. */ static void iwindow_make_cursors( void ) { /* Init standard cursors with this table. */ static GdkCursorType standards[] = { GDK_CURSOR_IS_PIXMAP, /* IWINDOW_SHAPE_DROPPER */ GDK_PENCIL, /* IWINDOW_SHAPE_PEN */ GDK_HAND2, /* IWINDOW_SHAPE_SMUDGE */ GDK_SPIDER, /* IWINDOW_SHAPE_SMEAR */ GDK_GOBBLER, /* IWINDOW_SHAPE_TEXT */ GDK_SIZING, /* IWINDOW_SHAPE_RECT */ GDK_TREK, /* IWINDOW_SHAPE_FLOOD */ GDK_FLEUR, /* IWINDOW_SHAPE_MOVE */ GDK_CROSSHAIR, /* IWINDOW_SHAPE_EDIT */ GDK_CURSOR_IS_PIXMAP, /* IWINDOW_SHAPE_MAGIN */ GDK_CURSOR_IS_PIXMAP, /* IWINDOW_SHAPE_MAGOUT */ GDK_TOP_SIDE, /* IWINDOW_SHAPE_TOP */ GDK_BOTTOM_SIDE, /* IWINDOW_SHAPE_BOTTOM */ GDK_LEFT_SIDE, /* IWINDOW_SHAPE_LEFT */ GDK_RIGHT_SIDE, /* IWINDOW_SHAPE_RIGHT */ GDK_TOP_RIGHT_CORNER, /* IWINDOW_SHAPE_TOPRIGHT */ GDK_TOP_LEFT_CORNER, /* IWINDOW_SHAPE_TOPLEFT */ GDK_BOTTOM_RIGHT_CORNER,/* IWINDOW_SHAPE_BOTTOMRIGHT, */ GDK_BOTTOM_LEFT_CORNER, /* IWINDOW_SHAPE_BOTTOMLEFT */ }; /* All the bits for the rotating cursor. */ static guchar *watch_bits[] = { watch_1_bits, watch_2_bits, watch_3_bits, watch_4_bits, watch_5_bits, watch_6_bits, watch_7_bits, watch_8_bits, }; int i; if( iwindow_cursor[0] ) return; /* Easy ones first. */ for( i = 0; i < IM_NUMBER( standards ); i++ ) if( standards[i] != GDK_CURSOR_IS_PIXMAP ) iwindow_cursor[i] = gdk_cursor_new( standards[i] ); /* Custom cursors. */ iwindow_cursor[IWINDOW_SHAPE_DROPPER] = iwindow_make_cursor_data( dropper_src_bits, dropper_msk_bits, dropper_src_width, dropper_src_height, 0, 15 ); iwindow_cursor[IWINDOW_SHAPE_MAGIN] = iwindow_make_cursor_data( magin_src_bits, mag_msk_bits, mag_msk_width, mag_msk_height, 6, 6 ); iwindow_cursor[IWINDOW_SHAPE_MAGOUT] = iwindow_make_cursor_data( magout_src_bits, mag_msk_bits, mag_msk_width, mag_msk_height, 6, 6 ); /* The hglasses. */ for( i = 0; i < IM_NUMBER( watch_bits ); i++ ) iwindow_cursor[IWINDOW_SHAPE_HGLASS1 + i] = iwindow_make_cursor_data( watch_bits[i], watch_msk_bits, watch_1_width, watch_1_height, 7, 7 ); } /* Get the work window. */ static GdkWindow * iwindow_get_work_window( iWindow *iwnd ) { if( iwnd->work_window ) return( iwnd->work_window ); else return( GTK_WIDGET( iwnd )->window ); } /* Update the cursor for a window. */ static void * iwindow_cursor_update( iWindow *iwnd ) { if( GTK_WIDGET_REALIZED( GTK_WIDGET( iwnd ) ) ) { GSList *p; iWindowShape best_shape; int best_priority; /* Global shape set? Use that for the whole window. */ if( iwnd->shape != IWINDOW_SHAPE_NONE ) { gdk_window_set_cursor( GTK_WIDGET( iwnd )->window, iwindow_cursor[iwnd->shape] ); gdk_window_set_cursor( iwindow_get_work_window( iwnd ), iwindow_cursor[iwnd->shape] ); gdk_flush(); return( NULL ); } /* No global shape ... make sure there's no global cursor on * this window. */ gdk_window_set_cursor( GTK_WIDGET( iwnd )->window, NULL ); gdk_window_set_cursor( iwindow_get_work_window( iwnd ), NULL ); /* And set the work area to the highest priority non-NONE * shape we can find . FIXME ... could avoid the search if we sorted the context list by priority on each context_new(), but not very important. */ best_shape = IWINDOW_SHAPE_NONE; best_priority = -1; for( p = iwnd->contexts; p; p = p->next ) { iWindowCursorContext *cntxt = (iWindowCursorContext *) p->data; if( cntxt->shape != IWINDOW_SHAPE_NONE && cntxt->priority > best_priority ) { best_shape = cntxt->shape; best_priority = cntxt->priority; } } /* Pref to disable crosshair. */ if( best_shape == IWINDOW_SHAPE_EDIT && !DISPLAY_CROSSHAIR ) best_shape = IWINDOW_SHAPE_NONE; gdk_window_set_cursor( iwindow_get_work_window( iwnd ), iwindow_cursor[best_shape] ); gdk_flush(); } return( NULL ); } /* Set a global cursor for a window. */ static void * iwindow_cursor_set( iWindow *iwnd, iWindowShape *shape ) { if( iwnd->shape != *shape ) { iwnd->shape = *shape; iwindow_cursor_update( iwnd ); } return( NULL ); } static gboolean hourglass_showing = FALSE; static void hourglass_begin( void ) { hourglass_showing = TRUE; } static void hourglass_update( void ) { if( hourglass_showing ) { static iWindowShape shape = IWINDOW_SHAPE_HGLASS1; iwindow_map_all( (iWindowMapFn) iwindow_cursor_set, &shape ); shape += 1; if( shape > IWINDOW_SHAPE_HGLASS8 ) shape = IWINDOW_SHAPE_HGLASS1; } } static void hourglass_end( void ) { if( hourglass_showing ) { iWindowShape shape = IWINDOW_SHAPE_NONE; iwindow_map_all( (iWindowMapFn) iwindow_cursor_set, &shape ); hourglass_showing = FALSE; } } iWindowCursorContext * iwindow_cursor_context_new( iWindow *iwnd, int priority, const char *name ) { iWindowCursorContext *cntxt = INEW( NULL, iWindowCursorContext ); #ifdef DEBUG printf( "iwindow_cursor_context_new: %s\n", name ); #endif /*DEBUG*/ cntxt->iwnd = iwnd; cntxt->priority = priority; cntxt->name = name; cntxt->shape = IWINDOW_SHAPE_NONE; iwnd->contexts = g_slist_prepend( iwnd->contexts, cntxt ); return( cntxt ); } void iwindow_cursor_context_destroy( iWindowCursorContext *cntxt ) { iWindow *iwnd = cntxt->iwnd; iwnd->contexts = g_slist_remove( iwnd->contexts, cntxt ); IM_FREE( cntxt ); iwindow_cursor_update( iwnd ); } void iwindow_cursor_context_set_cursor( iWindowCursorContext *cntxt, iWindowShape shape ) { if( cntxt->shape != shape ) { #ifdef DEBUG printf( "iwindow_cursor_context_set_cursor: %s = %s\n", cntxt->name, iwindow_cursor_name[shape] ); #endif /*DEBUG*/ cntxt->shape = shape; iwindow_cursor_update( cntxt->iwnd ); } } iWindowSusp * iwindow_susp_new( iWindowFn fn, iWindow *iwnd, void *client, iWindowNotifyFn nfn, void *sys ) { iWindowSusp *susp; if( !(susp = INEW( NULL, iWindowSusp )) ) return( NULL ); susp->fn = fn; susp->iwnd = iwnd; susp->client = client; susp->nfn = nfn; susp->sys = sys; return( susp ); } /* Trigger a suspension's reply, and free it. */ void iwindow_susp_return( void *sys, iWindowResult result ) { iWindowSusp *susp = IWINDOW_SUSP( sys ); susp->nfn( susp->sys, result ); im_free( susp ); } void iwindow_susp_trigger( iWindowSusp *susp ) { susp->fn( susp->iwnd, susp->client, susp->nfn, susp->sys ); im_free( susp ); } /* Compose two iWindowFns ... if this one succeeded, trigger the next in turn. * Otherwise bail out. */ void iwindow_susp_comp( void *sys, iWindowResult result ) { iWindowSusp *susp = IWINDOW_SUSP( sys ); if( result == IWINDOW_YES ) iwindow_susp_trigger( susp ); else iwindow_susp_return( sys, result ); } /* Null window callback. */ void iwindow_true_cb( iWindow *iwnd, void *client, iWindowNotifyFn nfn, void *sys ) { nfn( sys, IWINDOW_YES ); } void iwindow_false_cb( iWindow *iwnd, void *client, iWindowNotifyFn nfn, void *sys ) { nfn( sys, IWINDOW_NO ); } /* Null notify callback. */ void iwindow_notify_null( void *client, iWindowResult result ) { } /* Final end of a window. Destroy! */ static void iwindow_final_death( iWindow *iwnd ) { #ifdef DEBUG printf( "iwindow_final_death: %s\n", iwnd->title ); #endif /*DEBUG*/ g_assert( iwnd->pending == 0 && iwnd->destroy ); /* Clean up. */ gtk_widget_destroy( GTK_WIDGET( iwnd ) ); } /* A notify comes back ... adjust the pending count. If this is a zombie and * this is the final pending, it's final death. */ void iwindow_notify_return( iWindow *iwnd ) { #ifdef DEBUG printf( "iwindow_notify_return: %s (pending = %d)\n", iwnd->title, iwnd->pending ); #endif /*DEBUG*/ g_assert( iwnd->pending > 0 ); iwnd->pending--; if( iwnd->destroy && iwnd->pending == 0 ) { #ifdef DEBUG printf( "iwindow_notify_return: zombie death %s\n", iwnd->title ); #endif /*DEBUG*/ iwindow_final_death( iwnd ); } } /* Send a notify off, tell the client to come back to back. */ void iwindow_notify_send( iWindow *iwnd, iWindowFn fn, void *client, iWindowNotifyFn back, void *sys ) { #ifdef DEBUG printf( "iwindow_notify_send: %s (pending = %d)\n", iwnd->title, iwnd->pending ); #endif /*DEBUG*/ iwnd->pending++; if( fn ) fn( iwnd, client, back, sys ); else back( sys, IWINDOW_YES ); } static void iwindow_finalize( GObject *gobject ) { iWindow *iwnd = IWINDOW( gobject ); #ifdef DEBUG printf( "iwindow_finalize: %s\n", iwnd->title ); #endif /*DEBUG*/ /* My instance destroy stuff. */ iwindow_all = g_slist_remove( iwindow_all, iwnd ); IM_FREE( iwnd->title ); G_OBJECT_CLASS( parent_class )->finalize( gobject ); /* Last window and we've got through startup? Quit the application. */ if( iwindow_number() == 0 && !main_starting ) main_quit_test(); } static void iwindow_destroy( GtkObject *gobject ) { iWindow *iwnd = IWINDOW( gobject ); #ifdef DEBUG printf( "iwindow_destroy: %s\n", iwnd->title ); #endif /*DEBUG*/ /* My instance destroy stuff. */ FREESID( iwnd->parent_unmap_sid, iwnd->parent_window ); UNREF( iwnd->action_group ); UNREF( iwnd->ui_manager ); /* Now we've destroyed, we must stop popdown from being called, since * the view will have junked a lot of stuff. */ iwnd->destroy = TRUE; GTK_OBJECT_CLASS( parent_class )->destroy( gobject ); } static void iwindow_popdown_notify( iWindow *iwnd, iWindowResult result ) { #ifdef DEBUG printf( "iwindow_popdown_notify: %p %s\n", iwnd, iwnd->title ); #endif /*DEBUG*/ if( result == IWINDOW_ERROR ) iwindow_alert( GTK_WIDGET( iwnd ), GTK_MESSAGE_ERROR ); else if( result == IWINDOW_YES ) iwindow_kill( iwnd ); if( result != IWINDOW_YES ) { #ifdef DEBUG printf( "iwindow_popdown_notify: %s: kill cancelled!\n", iwnd->title ); #endif /*DEBUG*/ /* Cancel popdown. */ iwnd->destroy = FALSE; } else { /* Popdown confirmed! Trigger class popdown. _real_popdown() * does an unmap to hide the window during the rest of the * destroy. */ IWINDOW_GET_CLASS( iwnd )->popdown( GTK_WIDGET( iwnd ) ); } calli_string_filenamef( (calli_string_fn) gtk_accel_map_save, "%s" G_DIR_SEPARATOR_S "accel_map", get_savedir() ); /* If this is the final pending response and ->destroy is true, this * will destroy the window. */ iwindow_notify_return( iwnd ); } static gboolean iwindow_delete_event( GtkWidget *widget, GdkEventAny *event ) { iWindow *iwnd = IWINDOW( widget ); #ifdef DEBUG printf( "iwindow_delete_event: %s\n", iwnd->title ); #endif /*DEBUG*/ if( !iwnd->destroy ) { #ifdef DEBUG printf( "iwindow_delete_event: starting destroy\n" ); #endif /*DEBUG*/ iwindow_kill( iwnd ); } /* Never delete here ... wait for iwindow_popdown_notify to * confirm the kill. */ return( TRUE ); } static gboolean iwindow_configure_event( GtkWidget *widget, GdkEventConfigure *event ) { iWindow *iwnd = IWINDOW( widget ); if( iwnd->width_pref ) { /* Save window size in global prefs. */ prefs_set( iwnd->width_pref, "%d", event->width ); prefs_set( iwnd->height_pref, "%d", event->height ); } return( GTK_WIDGET_CLASS( parent_class )-> configure_event( widget, event ) ); } /* Our parent has been destroyed, kill us too. */ static void iwindow_parent_unmap_cb( GtkWidget *par, iWindow *iwnd ) { #ifdef DEBUG printf( "iwindow_parent_unmap_cb: %s\n", iwnd->title ); #endif /*DEBUG*/ /* Here for dead parent ... if parent is dead, we won't need to remove * the dead-dad signal. */ iwnd->parent_unmap_sid = 0; iwindow_kill( iwnd ); } static GtkActionEntry iwnd_actions[] = { /* Common menus. */ { "FileMenu", NULL, N_( "_File" ) }, { "NewMenu", NULL, N_( "_New" ) }, { "EditMenu", NULL, N_( "_Edit" ) }, { "ViewMenu", NULL, N_( "_View" ) }, { "HelpMenu", NULL, N_( "_Help" ) }, /* Common items. */ { "Close", GTK_STOCK_CLOSE, N_( "_Close" ), NULL, N_( "Close" ), G_CALLBACK( iwindow_kill_action_cb ) }, { "Quit", GTK_STOCK_QUIT, N_( "_Quit" ), "q", N_( "Quit nip2" ), G_CALLBACK( main_quit_test ) }, { "Guide", GTK_STOCK_HELP, N_( "_Contents" ), "F1", N_( "Open the users guide" ), G_CALLBACK( mainw_guide_action_cb ) }, { "About", NULL, N_( "_About" ), NULL, N_( "About this program" ), G_CALLBACK( mainw_about_action_cb ) }, { "Homepage", NULL, N_( "_Website" ), NULL, N_( "Open the VIPS Homepage" ), G_CALLBACK( mainw_homepage_action_cb ) } }; static void iwindow_real_build( GtkWidget *widget ) { iWindow *iwnd = IWINDOW( widget ); GdkScreen *screen = gtk_widget_get_screen( GTK_WIDGET( iwnd ) ); GtkAccelGroup *accel_group; #ifdef DEBUG printf( "iwindow_real_build: %s\n", iwnd->title ); #endif /*DEBUG*/ gtk_container_set_border_width( GTK_CONTAINER( iwnd ), 0 ); iwnd->work = gtk_vbox_new( FALSE, 0 ); gtk_container_add( GTK_CONTAINER( iwnd ), iwnd->work ); /* Use the type name (eg. "Imageview") for the name of the * actiongroup. */ iwnd->action_group = gtk_action_group_new( G_OBJECT_TYPE_NAME( iwnd ) ); gtk_action_group_set_translation_domain( iwnd->action_group, GETTEXT_PACKAGE ); gtk_action_group_add_actions( iwnd->action_group, iwnd_actions, G_N_ELEMENTS( iwnd_actions ), GTK_WINDOW( iwnd ) ); iwnd->ui_manager = gtk_ui_manager_new(); gtk_ui_manager_insert_action_group( iwnd->ui_manager, iwnd->action_group, 0 ); accel_group = gtk_ui_manager_get_accel_group( iwnd->ui_manager ); gtk_window_add_accel_group( GTK_WINDOW( iwnd ), accel_group ); /* Call per-instance build. */ if( iwnd->build ) iwnd->build( iwnd, iwnd->work, iwnd->build_a, iwnd->build_b, iwnd->build_c ); if( iwnd->title ) gtk_window_set_title( GTK_WINDOW( iwnd ), iwnd->title ); if( iwnd->width_pref ) { int width = watch_int_get( main_watchgroup, iwnd->width_pref, 640 ); int height = watch_int_get( main_watchgroup, iwnd->height_pref, 480 ); gtk_window_set_default_size( GTK_WINDOW( iwnd ), IM_MIN( width, gdk_screen_get_width( screen ) ), IM_MIN( height, gdk_screen_get_height( screen ) ) ); } /* Link to parent. */ if( iwnd->parent_window ) { if( IWINDOW_GET_CLASS( iwnd )->transient && iwnd->parent_window && iwnd != iwnd->parent_window ) gtk_window_set_transient_for( GTK_WINDOW( iwnd ), GTK_WINDOW( iwnd->parent_window ) ); /* We watch our parent's "unmap" rather than "destroy" since * we use gtk_widget_unmap() to hide killed windows during * popdown (see iwindow_popdown_notify()). */ iwnd->parent_unmap_sid = gtk_signal_connect( GTK_OBJECT( iwnd->parent_window ), "unmap", GTK_SIGNAL_FUNC( iwindow_parent_unmap_cb ), iwnd ); /* Show the parent. For example, if this is the ^Q * save-or-quit dialog and the parent is a mainw, we want to * pop the mainw up. */ gtk_window_present( GTK_WINDOW( iwnd->parent_window ) ); } gtk_widget_show( iwnd->work ); } static void iwindow_real_popdown( GtkWidget *widget ) { gtk_widget_unmap( widget ); } static void iwindow_class_init( iWindowClass *class ) { GObjectClass *object_class = (GObjectClass *) class; GtkObjectClass *gobject_class = (GtkObjectClass *) class; GtkWidgetClass *widget_class = (GtkWidgetClass *) class; parent_class = g_type_class_peek_parent( class ); /* Init methods. */ object_class->finalize = iwindow_finalize; gobject_class->destroy = iwindow_destroy; widget_class->delete_event = iwindow_delete_event; widget_class->configure_event = iwindow_configure_event; class->build = iwindow_real_build; class->popdown = iwindow_real_popdown; class->transient = FALSE; /* Create signals. */ /* Static class data init. */ iwindow_make_cursors(); /* Link to busy signals. */ g_signal_connect( progress_get(), "begin", hourglass_begin, NULL ); g_signal_connect( progress_get(), "update", hourglass_update, NULL ); g_signal_connect( progress_get(), "end", hourglass_end, NULL ); } static void iwindow_init( iWindow *iwnd ) { #ifdef DEBUG printf( "iwindow_init: %s\n", iwnd->title ); #endif /*DEBUG*/ iwnd->work = NULL; iwnd->parent = NULL; iwnd->parent_window = NULL; iwnd->parent_unmap_sid = 0; /* Might as well. */ iwnd->accel_group = gtk_accel_group_new(); gtk_window_add_accel_group( GTK_WINDOW( iwnd ), iwnd->accel_group ); g_object_unref( iwnd->accel_group ); iwnd->infobar = NULL; iwnd->title = NULL; iwnd->build = NULL; iwnd->popdown = iwindow_true_cb; iwnd->destroy = FALSE; iwnd->pending = 0; iwnd->shape = IWINDOW_SHAPE_NONE; iwnd->contexts = NULL; iwnd->work_window = NULL; iwnd->width_pref = NULL; iwnd->height_pref = NULL; iwindow_all = g_slist_prepend( iwindow_all, iwnd ); } GtkType iwindow_get_type( void ) { static GtkType type = 0; if( !type ) { static const GtkTypeInfo info = { "iWindow", sizeof( iWindow ), sizeof( iWindowClass ), (GtkClassInitFunc) iwindow_class_init, (GtkObjectInitFunc) iwindow_init, /* reserved_1 */ NULL, /* reserved_2 */ NULL, (GtkClassInitFunc) NULL, }; type = gtk_type_unique( GTK_TYPE_WINDOW, &info ); } return( type ); } GtkWidget * iwindow_new( GtkWindowType type ) { iWindow *iwnd = gtk_type_new( TYPE_IWINDOW ); GtkWindow *gwnd = GTK_WINDOW( iwnd ); /* Init superclass. */ gwnd->type = type; return( GTK_WIDGET( iwnd ) ); } void iwindow_set_title( iWindow *iwnd, const char *title, ... ) { va_list ap; char buf[1024]; va_start( ap, title ); (void) im_vsnprintf( buf, 1024, title, ap ); va_end( ap ); if( !iwnd->title || strcmp( iwnd->title, buf ) != 0 ) { IM_SETSTR( iwnd->title, buf ); gtk_window_set_title( GTK_WINDOW( iwnd ), iwnd->title ); } } void iwindow_set_build( iWindow *iwnd, iWindowBuildFn build, void *build_a, void *build_b, void *build_c ) { iwnd->build = build; iwnd->build_a = build_a; iwnd->build_b = build_b; iwnd->build_c = build_c; } void iwindow_set_popdown( iWindow *iwnd, iWindowFn popdown, void *popdown_a ) { iwnd->popdown = popdown; iwnd->popdown_a = popdown_a; } void iwindow_set_size_prefs( iWindow *iwnd, const char *width_pref, const char *height_pref ) { iwnd->width_pref = width_pref; iwnd->height_pref = height_pref; } void iwindow_set_work_window( iWindow *iwnd, GdkWindow *work_window ) { iwnd->work_window = work_window; iwindow_cursor_update( iwnd ); } void iwindow_set_parent( iWindow *iwnd, GtkWidget *parent ) { g_assert( !iwnd->parent ); iwnd->parent = parent; /* Get parent window now, we sometimes need it after parent has been * destroyed. */ if( parent ) iwnd->parent_window = IWINDOW( iwindow_get_root( GTK_WIDGET( parent ) ) ); } void * iwindow_kill( iWindow *iwnd ) { #ifdef DEBUG printf( "iwindow_kill: %p %s\n", iwnd, iwnd->title ); #endif /*DEBUG*/ if( !iwnd->destroy ) { #ifdef DEBUG printf( "... starting destroy for %s\n", iwnd->title ); #endif /*DEBUG*/ iwnd->destroy = TRUE; /* Don't kill directly, wait for popdown_notify to do it. */ iwindow_notify_send( iwnd, iwnd->popdown, iwnd->popdown_a, (iWindowNotifyFn) iwindow_popdown_notify, iwnd ); } return( NULL ); } /* ... as an action. */ void iwindow_kill_action_cb( GtkAction *action, iWindow *iwnd ) { iwindow_kill( iwnd ); } void iwindow_build( iWindow *iwnd ) { #ifdef DEBUG printf( "iwindow_build: %s\n", iwnd->title ); #endif /*DEBUG*/ IWINDOW_GET_CLASS( iwnd )->build( GTK_WIDGET( iwnd ) ); } /* Get the enclosing window for a widget. */ GtkWidget * iwindow_get_root( GtkWidget *widget ) { GtkWidget *toplevel = gtk_widget_get_toplevel( widget ); GtkWidget *child = gtk_bin_get_child( GTK_BIN( toplevel ) ); /* If this is a menu pane, get the widget that popped this menu up. */ if( GTK_IS_MENU( child ) ) { GtkWidget *parent = gtk_menu_get_attach_widget( GTK_MENU( child ) ); return( iwindow_get_root( parent ) ); } else return( toplevel ); } /* Get the enclosing no-parent window for a widget. */ GtkWidget * iwindow_get_root_noparent( GtkWidget *widget ) { GtkWidget *toplevel = iwindow_get_root( widget ); /* If this is a transient, get the window we popped up from. */ if( IS_IWINDOW( toplevel ) && IWINDOW( toplevel )->parent ) return( iwindow_get_root_noparent( IWINDOW( toplevel )->parent ) ); else return( toplevel ); } void iwindow_alert( GtkWidget *parent, GtkMessageType type ) { GtkWidget *toplevel; if( !parent ) parent = GTK_WIDGET( mainw_pick_one() ); if( parent && (toplevel = iwindow_get_root( parent )) && IS_IWINDOW( toplevel ) && IWINDOW( toplevel )->infobar ) infobar_set( IWINDOW( toplevel )->infobar, type, error_get_top(), "%s", error_get_sub() ); else switch( type ) { case GTK_MESSAGE_INFO: box_info( parent, error_get_top(), "%s", error_get_sub() ); break; case GTK_MESSAGE_ERROR: box_alert( parent ); break; default: break; } } nip2-8.7.0/src/model.h0000644000175000017500000001501013224651032011352 00000000000000/* abstract base class for things which form the model of a model/view pair */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* When scrolling, do we want the top or the bottom of the object visible. * Important for Columns, since we sometimes want to see the title bar and * sometimes the edit box at the bottom. */ typedef enum { MODEL_SCROLL_TOP, MODEL_SCROLL_BOTTOM } ModelScrollPosition; /* How to rename symbols. */ typedef struct _ModelRename { char *old_name; char *new_name; } ModelRename; /* What we track during a load operation. */ typedef struct _ModelLoadState { char *filename; /* Name we loaded from */ char *filename_user; /* The filename to record in the model */ xmlDoc *xdoc; /* Document we load from */ /* FIXME ... a linked list? try a hash sometime see model_loadstate_rewrite_name() would probably only see a speedup for merging very large workspaces, not something we do often */ GSList *renames; /* Rename table for this load context */ /* The column renames we have planned. Don't rewrite exprs with these. */ GSList *column_renames; /* Version info we read from this XML file. */ int major; int minor; int micro; /* Log error messages here. */ char error_log_buffer[MAX_STRSIZE]; VipsBuf error_log; /* Set this bool to rewrite string constants using the filename * rewrite system. */ gboolean rewrite_path; /* The old_dir we added with path_rewrite_add() ... if non, NULL, * unset this rewrite rule on close. */ char *old_dir; } ModelLoadState; #define TYPE_MODEL (model_get_type()) #define MODEL( obj ) \ (G_TYPE_CHECK_INSTANCE_CAST( (obj), TYPE_MODEL, Model )) #define MODEL_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_CAST( (klass), TYPE_MODEL, ModelClass)) #define IS_MODEL( obj ) \ (G_TYPE_CHECK_INSTANCE_TYPE( (obj), TYPE_MODEL )) #define IS_MODEL_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_TYPE( (klass), TYPE_MODEL )) #define MODEL_GET_CLASS( obj ) \ (G_TYPE_INSTANCE_GET_CLASS( (obj), TYPE_MODEL, ModelClass )) struct _Model { iContainer parent_object; /* My instance vars. */ gboolean display; /* This model should have a view */ /* For things that have a pop-up window (eg. iimage, plot), the * position and size of the window. */ int window_x, window_y; int window_width, window_height; }; typedef struct _ModelClass { iContainerClass parent_class; /* Build display methods. view_new make a view for this model ... make the top view yourself, thereafter view will watch child_add etc. and manage subviews automatically ... use model->display to create and destroy views */ View *(*view_new)( Model *model, View *parent ); /* Change methods edit open an editor on the model header view model header scrollto try to make views visible reset signals views to reset ... eg. textview pops back to whatever the ws says it should be displaying (value or formula) layout try to lay child view out front trigger view_child_front() for all views display create and destroy views */ void (*edit)( GtkWidget *, Model * ); void (*header)( GtkWidget *, Model * ); void (*scrollto)( Model *, ModelScrollPosition ); void (*reset)( Model * ); void (*layout)( Model * ); void (*front)( Model * ); void (*display)( Model *, gboolean display ); /* Load and save methods. save write model as child of node save_test predicate ... save model if save_test is defined and true save_text plain text save ... eg. for toolkits load _init() model from xmlNode load_text _init() from plain text ... eg. toolkit empty remove contents of model */ xmlNode *(*save)( Model *, xmlNode * ); gboolean (*save_test)( Model * ); gboolean (*save_text)( Model *, iOpenFile * ); gboolean (*load)( Model *model, ModelLoadState *state, Model *parent, xmlNode *xnode ); gboolean (*load_text)( Model *model, Model *parent, iOpenFile * ); void (*empty)( Model * ); } ModelClass; extern ModelLoadState *model_loadstate; gboolean model_loadstate_rename_new( ModelLoadState *state, const char *old_name, const char *new_name ); gboolean model_loadstate_taken( ModelLoadState *state, const char *name ); gboolean model_loadstate_column_rename_new( ModelLoadState *state, const char *old_name, const char *new_name ); gboolean model_loadstate_column_taken( ModelLoadState *state, const char *name ); ModelLoadState *model_loadstate_new( const char *filename, const char *filename_user ); ModelLoadState *model_loadstate_new_openfile( iOpenFile *of ); void model_loadstate_destroy( ModelLoadState *state ); char *model_loadstate_rewrite_name( char *name ); void model_loadstate_rewrite( ModelLoadState *state, char *old_rhs, char *new_rhs ); void model_register_loadable( ModelClass *model_class ); View *model_view_new( Model *model, View *parent ); void model_scrollto( Model *model, ModelScrollPosition position ); void model_layout( Model *model ); void *model_reset( Model *model ); void *model_edit( GtkWidget *parent, Model *model ); void *model_header( GtkWidget *parent, Model *model ); void model_front( Model *model ); void model_display( Model *model, gboolean display ); void *model_save( Model *model, xmlNode * ); gboolean model_save_test( Model *model ); void *model_save_text( Model *model, iOpenFile * ); void *model_load( Model *model, ModelLoadState *state, Model *parent, xmlNode *xnode ); void *model_load_text( Model *model, Model *parent, iOpenFile * ); void *model_empty( Model *model ); gboolean model_new_xml( ModelLoadState *state, Model *parent, xmlNode *xnode ); GType model_get_type( void ); void model_base_init( void ); View *model_build_display_all( Model *model, View *parent ); void model_check_destroy( GtkWidget *parent, Model *model, iWindowFn done_cb ); void *model_clear_edited( Model *model ); nip2-8.7.0/src/expr.c0000644000175000017500000003415313224651032011234 00000000000000/* Expressions! */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* Trace error_set()/_clear(). #define DEBUG_ERROR */ /* Trace expr_clone() #define DEBUG_CLONE */ /* #define DEBUG */ #include "ip.h" /* Our signals. */ enum { SIG_NEW_VALUE, /* new value for root */ SIG_LAST }; static iContainerClass *parent_class = NULL; static guint expr_signals[SIG_LAST] = { 0 }; /* Set of expressions containing errors. */ GSList *expr_error_all = NULL; void * expr_error_print( Expr *expr, VipsBuf *buf ) { g_assert( expr->err ); vips_buf_appendf( buf, _( "error in \"%s\"" ), IOBJECT( expr->sym )->name ); if( expr->sym->tool ) tool_error( expr->sym->tool, buf ); else if( expr->row ) { Workspace *ws = expr->row->ws; Workspacegroup *wsg = workspace_get_workspacegroup( ws ); vips_buf_appendf( buf, " (" ); row_qualified_name( expr->row, buf ); if( FILEMODEL( wsg )->filename ) vips_buf_appendf( buf, " - %s", FILEMODEL( wsg )->filename ); vips_buf_appendf( buf, ")" ); } /* Don't show error_top, it's just a summary of error_sub. */ vips_buf_appendf( buf, ": %s\n", expr->error_sub ); return( NULL ); } static Expr * expr_map_all_sub( Symbol *sym, map_expr_fn fn, void *a ) { if( !sym->expr ) return( NULL ); else return( expr_map_all( sym->expr, fn, a ) ); } /* Apply a function to a expr ... and any local exprs. */ Expr * expr_map_all( Expr *expr, map_expr_fn fn, void *a ) { Expr *res; /* Apply to this expr. */ if( (res = fn( expr, a, NULL )) ) return( res ); /* And over any locals. */ if( expr->compile && (res = (Expr *) icontainer_map( ICONTAINER( expr->compile ), (icontainer_map_fn) expr_map_all_sub, (void *) fn, a )) ) return( res ); return( NULL ); } void * expr_name_print( Expr *expr ) { printf( "expr(%p) ", expr ); symbol_name_print( expr->sym ); if( expr->row ) { printf( "(row " ); row_name_print( expr->row ); printf( ") " ); } return( NULL ); } void expr_name( Expr *expr, VipsBuf *buf ) { if( expr->row ) row_qualified_name( expr->row, buf ); else symbol_qualified_name( expr->sym, buf ); } Expr * expr_get_parent( Expr *expr ) { Symbol *sym_parent = symbol_get_parent( expr->sym ); if( !sym_parent ) return( NULL ); return( sym_parent->expr ); } /* Find the enclosing expr in the dynamic scope hierarchy. */ static Expr * expr_get_parent_dynamic( Expr *expr ) { Row *row; if( !expr->row ) return( expr_get_parent( expr ) ); else if( (row = HEAPMODEL( expr->row )->row) ) /* Enclosing row expr. */ return( row->expr ); else { /* Enclosing workspace expr. */ Workspace *ws = expr->row->top_col->ws; return( ws->sym->expr ); } } /* Look back up to find the root expr. */ Expr * expr_get_root( Expr *expr ) { if( is_top( expr->sym ) ) return( expr ); else return( expr_get_root( expr_get_parent( expr ) ) ); } /* Look back up to find the root expr using the dynamic hierarchy (if it's * there). */ Expr * expr_get_root_dynamic( Expr *expr ) { Expr *parent; if( is_top( expr->sym ) ) return( expr ); else if( expr->row && expr->row->top_row && expr->row->top_row->expr ) return( expr->row->top_row->expr ); else if( (parent = expr_get_parent_dynamic( expr )) ) return( expr_get_root_dynamic( parent ) ); else return( NULL ); } /* Is an expr part of a row, including enclosing exprs. * * For example, row A1 could be "[x::x<-A2]", that would be expanded to * something like * "$lcomp0 {$lcomp0 = foldr $f0 [] A2 {$f0 x $sofar = x : $sofar}}" * Now, row A1 depends on A2, but expr A1 will not ... it's $lcomp0, the local * expr of A1, that will get called for expr_dirty. * * Return NULL for expr is not a row and has no enclosing rows. */ static Row * expr_get_row( Expr *expr ) { if( expr->row ) return( expr->row ); else if( is_top( expr->sym ) ) return( NULL ); else return( expr_get_row( expr_get_parent( expr ) ) ); } void expr_new_value( Expr *expr ) { #ifdef DEBUG { PElement *root = &expr->root; printf( "expr_new_value: " ); symbol_name_print( expr->sym ); printf( ": " ); graph_pointer( root ); } #endif /*DEBUG*/ g_signal_emit( G_OBJECT( expr ), expr_signals[SIG_NEW_VALUE], 0 ); } /* An expr has lost a value. */ void expr_value_destroy( Expr *expr ) { /* Break ImageInfo link (if any). */ if( expr->imageinfo ) imageinfo_expr_remove( expr, expr->imageinfo ); } /* Clean up an expr, ready to have a new def parsed into it. */ void * expr_strip( Expr *expr ) { expr_error_clear( expr ); /* Break top links we're part of. */ if( slist_map( expr->static_links, (SListMapFn) link_expr_destroy, NULL ) ) return( expr ); if( slist_map( expr->dynamic_links, (SListMapFn) link_expr_destroy, NULL ) ) return( expr ); g_assert( !expr->static_links ); g_assert( !expr->dynamic_links ); /* Junk error stuff. */ IM_FREE( expr->error_top ); IM_FREE( expr->error_sub ); /* Unref the compile. */ if( expr->compile ) (void) compile_expr_link_break( expr->compile, expr ); return( NULL ); } static void expr_dispose( GObject *gobject ) { Expr *expr = EXPR( gobject ); Symbol *sym = expr->sym; #ifdef DEBUG printf( "expr_dispose: " ); expr_name_print( expr ); printf( "\n" ); #endif /*DEBUG*/ expr_strip( expr ); /* Break the value link. */ expr_value_destroy( expr ); /* Unlink from symbol. */ if( sym->expr == expr ) sym->expr = NULL; if( expr->row ) { Row *row = expr->row; /* If this is the sym for a top row, kill the row too. * Otherwise just break the link and wait for the next row * refresh to do the kill for us. */ if( row == row->top_row ) { IDESTROY( row ); } else { row->expr = NULL; row->sym = NULL; expr->row = NULL; /* Make sure we will re-parse and compile any text * with this sym that might have been modified from * the default. */ if( row->child_rhs && row->child_rhs->itext ) { iText *itext = ITEXT( row->child_rhs->itext ); if( itext->edited ) heapmodel_set_modified( HEAPMODEL( itext ), TRUE ); } } } G_OBJECT_CLASS( parent_class )->dispose( gobject ); } static void expr_info( iObject *iobject, VipsBuf *buf ) { Expr *expr = EXPR( iobject ); if( expr->err ) { vips_buf_appends( buf, _( "Error" ) ); vips_buf_appendf( buf, ": %s\n%s\n", expr->error_top, expr->error_sub ); } } static void expr_real_new_value( Expr *expr ) { PElement *root = &expr->root; expr_value_destroy( expr ); if( PEISIMAGE( root ) && PEGETII( root ) ) imageinfo_expr_add( PEGETII( root ), expr ); /* If this is the main expr for this symbol, signal new value there * too. */ if( expr->sym->expr == expr ) symbol_new_value( expr->sym ); } static void expr_class_init( ExprClass *class ) { GObjectClass *gobject_class = (GObjectClass *) class; iObjectClass *iobject_class = (iObjectClass *) class; parent_class = g_type_class_peek_parent( class ); /* Create signals. */ expr_signals[SIG_NEW_VALUE] = g_signal_new( "new_value", G_OBJECT_CLASS_TYPE( gobject_class ), G_SIGNAL_RUN_FIRST, G_STRUCT_OFFSET( ExprClass, new_value ), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0 ); /* Init methods. */ gobject_class->dispose = expr_dispose; iobject_class->info = expr_info; class->new_value = expr_real_new_value; /* Static init. */ } static void expr_init( Expr *expr ) { expr->sym = NULL; expr->row = NULL; expr->compile = NULL; expr->static_links = NULL; expr->dynamic_links = NULL; expr->imageinfo = NULL; expr->err = FALSE; expr->error_top = NULL; expr->error_sub = NULL; } GType expr_get_type( void ) { static GType type = 0; if( !type ) { static const GTypeInfo info = { sizeof( ExprClass ), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) expr_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof( Expr ), 32, /* n_preallocs */ (GInstanceInitFunc) expr_init, }; type = g_type_register_static( TYPE_ICONTAINER, "Expr", &info, 0 ); } return( type ); } Expr * expr_new( Symbol *sym ) { Expr *expr; expr = EXPR( g_object_new( TYPE_EXPR, NULL ) ); expr->sym = sym; PEPOINTE( &expr->root, &sym->base ); icontainer_child_add( ICONTAINER( sym ), ICONTAINER( expr ), -1 ); #ifdef DEBUG printf( "expr_new: " ); expr_name_print( expr ); printf( "\n" ); #endif /*DEBUG*/ return( expr ); } /* Clone an existing expr. */ Expr * expr_clone( Symbol *sym ) { Expr *expr; if( sym->expr && sym->expr->compile ) { /* Make a new expr, share the compile. */ expr = expr_new( sym ); compile_expr_link_make( sym->expr->compile, expr ); } else { /* No existing expr to copy, make a bare one for the * row, at the same scope level as sym. */ expr = expr_new( sym ); } return( expr ); } /* Mark an expression as containing an error, save the error buffers. */ void * expr_error_set( Expr *expr ) { /* Was not in error? Add to error set. */ if( !expr->err ) { #ifdef DEBUG_ERROR printf( "expr_error_set: error in " ); symbol_name_print( expr->sym ); printf( ": %s %s\n", error_get_top(), error_get_sub() ); #endif /*DEBUG_ERROR*/ IM_SETSTR( expr->error_top, error_get_top() ); IM_SETSTR( expr->error_sub, error_get_sub() ); /* Zap the value of the expr ... it may contain pointers to * dead stuff. */ PEPUTP( &expr->root, ELEMENT_NOVAL, (void *) 99 ); expr_error_all = g_slist_prepend( expr_error_all, expr ); expr->err = TRUE; if( expr->row ) row_error_set( expr->row ); /* If this is the value of a top-level sym, note state * change on symbol. */ if( is_top( expr->sym ) && expr->sym->expr == expr ) symbol_state_change( expr->sym ); } return( NULL ); } /* Extract the error from an expression. */ void expr_error_get( Expr *expr ) { if( !expr->err ) error_clear(); else { g_assert( expr->error_top ); g_assert( expr->error_sub ); error_top( "%s", expr->error_top ); error_sub( "%s", expr->error_sub ); } } /* Clear error state. */ void expr_error_clear( Expr *expr ) { if( expr->err ) { #ifdef DEBUG_ERROR printf( "expr_error_clear: " ); symbol_name_print( expr->sym ); printf( "\n" ); #endif /*DEBUG_ERROR*/ expr->err = FALSE; expr_error_all = g_slist_remove( expr_error_all, expr ); if( expr->row ) row_error_clear( expr->row ); if( is_top( expr->sym ) && expr->sym->expr == expr ) symbol_state_change( expr->sym ); } } /* Mark an expr dirty. * * Two cases: if expr has a row, this is part of a display. Use the row * stuff to mark this expr dirty. Then use symbol_dirty() to mark on from the * root of this row. * * Case two: this must be an expr inside a top-level ... just * symbol_dirty() on from that top level. * * FIXME ... we should be able to scrap this expr_get_root() ... we want the * 'parent' field in the Link we are probably being called from. */ void * expr_dirty( Expr *expr, int serial ) { Row *row; #ifdef DEBUG printf( "expr_dirty: " ); symbol_name_print( expr->sym ); printf( "\n" ); #endif /*DEBUG*/ if( (row = expr_get_row( expr )) && row->top_row->sym ) { Symbol *top_sym = row->top_row->sym; row_dirty( row, TRUE ); symbol_dirty( top_sym, serial ); } else symbol_dirty( expr_get_root( expr )->sym, serial ); return( NULL ); } void * expr_dirty_intrans( Expr *expr, int serial ) { if( expr->row && expr->row->top_row->sym ) { row_dirty_intrans( expr->row, TRUE ); symbol_dirty( expr->row->top_row->sym, serial ); } else symbol_dirty_intrans( expr->sym, serial ); return( NULL ); } void expr_tip_sub( Expr *expr, VipsBuf *buf ) { Compile *compile = expr->compile; if( is_top( expr->sym ) ) { vips_buf_appends( buf, _( "top level" ) ); vips_buf_appends( buf, " " ); } if( compile && is_class( compile ) ) { vips_buf_appends( buf, _( "class" ) ); vips_buf_appends( buf, " " ); if( compile->nparam == 0 ) { vips_buf_appends( buf, _( "instance" ) ); vips_buf_appends( buf, " " ); } else { vips_buf_appends( buf, _( "definition" ) ); vips_buf_appends( buf, " " ); } vips_buf_appendf( buf, "\"%s\"", IOBJECT( expr->sym )->name ); } else if( expr->sym->type == SYM_PARAM ) vips_buf_appendf( buf, _( "parameter \"%s\"" ), IOBJECT( expr->sym )->name ); else if( compile ) { if( is_member( expr->sym ) ) { vips_buf_appends( buf, _( "member" ) ); vips_buf_appends( buf, " " ); } if( compile->nparam == 0 ) { vips_buf_appends( buf, _( "value" ) ); vips_buf_appends( buf, " " ); } else { vips_buf_appends( buf, _( "function" ) ); vips_buf_appends( buf, " " ); } vips_buf_appendf( buf, "\"%s\"", IOBJECT( expr->sym )->name ); } if( !is_top( expr->sym ) ) { vips_buf_appends( buf, " " ); vips_buf_appends( buf, _( "of" ) ); vips_buf_appends( buf, " " ); expr_tip_sub( expr_get_parent( expr ), buf ); } } /* Look at an expr, make a tooltip. */ void expr_tip( Expr *expr, VipsBuf *buf ) { expr_name( expr, buf ); vips_buf_appends( buf, ": " ); expr_tip_sub( expr, buf ); } /* Bind unresolved refs in an expr. Bind for every enclosing dynamic scope. */ void expr_resolve( Expr *expr ) { Expr *top = symbol_root->expr; Expr *i; #ifdef DEBUG printf( "expr_resolve: " ); expr_name_print( expr ); printf( "\n" ); #endif /*DEBUG*/ for( i = expr; i != top; i = expr_get_parent_dynamic( i ) ) /* May try to resolve out through a parameter. */ if( i->compile ) compile_resolve_dynamic( expr->compile, i->compile ); } nip2-8.7.0/src/toggleview.c0000644000175000017500000000571713224651032012436 00000000000000/* the display part of a toggle button */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #include "ip.h" /* #define DEBUG */ static GraphicviewClass *parent_class = NULL; /* Toggleview callback. */ static void toggleview_change_cb( GtkWidget *widget, Toggleview *togview ) { Toggle *tog = TOGGLE( VOBJECT( togview )->iobject ); Classmodel *classmodel = CLASSMODEL( tog ); if( tog->value != GTK_TOGGLE_BUTTON( widget )->active ) { tog->value = GTK_TOGGLE_BUTTON( widget )->active; classmodel_update( classmodel ); symbol_recalculate_all(); } } static void toggleview_refresh( vObject *vobject ) { Toggleview *togview = TOGGLEVIEW( vobject ); Toggle *tog = TOGGLE( VOBJECT( togview )->iobject ); gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( togview->toggle ), tog->value ); set_glabel( GTK_BIN( togview->toggle )->child, "%s", IOBJECT( tog )->caption ); VOBJECT_CLASS( parent_class )->refresh( vobject ); } static void toggleview_class_init( ToggleviewClass *class ) { vObjectClass *vobject_class = (vObjectClass *) class; parent_class = g_type_class_peek_parent( class ); /* Create signals. */ /* Init methods. */ vobject_class->refresh = toggleview_refresh; } static void toggleview_init( Toggleview *togview ) { togview->toggle = build_gtoggle( GTK_WIDGET( togview ), "" ); set_tooltip( togview->toggle, _( "Left-click to change value" ) ); gtk_signal_connect( GTK_OBJECT( togview->toggle ), "clicked", GTK_SIGNAL_FUNC( toggleview_change_cb ), togview ); gtk_widget_show_all( GTK_WIDGET( togview ) ); } GtkType toggleview_get_type( void ) { static GtkType toggleview_type = 0; if( !toggleview_type ) { static const GtkTypeInfo info = { "Toggleview", sizeof( Toggleview ), sizeof( ToggleviewClass ), (GtkClassInitFunc) toggleview_class_init, (GtkObjectInitFunc) toggleview_init, /* reserved_1 */ NULL, /* reserved_2 */ NULL, (GtkClassInitFunc) NULL, }; toggleview_type = gtk_type_unique( TYPE_GRAPHICVIEW, &info ); } return( toggleview_type ); } View * toggleview_new( void ) { Toggleview *togview = gtk_type_new( TYPE_TOGGLEVIEW ); return( VIEW( togview ) ); } nip2-8.7.0/src/valueview.h0000644000175000017500000000307313224651032012267 00000000000000/* a basic view of a model ... just show the caption */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_VALUEVIEW (valueview_get_type()) #define VALUEVIEW( obj ) \ (GTK_CHECK_CAST( (obj), TYPE_VALUEVIEW, Valueview )) #define VALUEVIEW_CLASS( klass ) \ (GTK_CHECK_CLASS_CAST( (klass), TYPE_VALUEVIEW, ValueviewClass )) #define IS_VALUEVIEW( obj ) (GTK_CHECK_TYPE( (obj), TYPE_VALUEVIEW )) #define IS_VALUEVIEW_CLASS( klass ) \ (GTK_CHECK_CLASS_TYPE( (klass), TYPE_VALUEVIEW )) typedef struct _Valueview { Graphicview parent_object; GtkWidget *eb; GtkWidget *label; } Valueview; typedef struct _ValueviewClass { GraphicviewClass parent_class; /* My methods. */ } ValueviewClass; GtkType valueview_get_type( void ); View *valueview_new( void ); nip2-8.7.0/src/statusview.c0000644000175000017500000002627113224651032012476 00000000000000/* widgets for the status bar */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #include "ip.h" static GtkFrameClass *parent_class = NULL; /* The popup menu. */ static GtkWidget *statusview_menu = NULL; /* Sub. fn. of below. Junk the widgets inside a band display. */ static void * statusviewband_destroy_sub( StatusviewBand *svb ) { DESTROY_GTK( svb->val ); IM_FREE( svb ); return( NULL ); } /* Junk the widgets inside a band display. */ static void statusviewband_destroy( Statusview *sv ) { slist_map( sv->bands, (SListMapFn) statusviewband_destroy_sub, NULL ); IM_FREEF( g_slist_free, sv->bands ); } static void statusview_destroy( GtkObject *object ) { Statusview *sv; g_return_if_fail( object != NULL ); g_return_if_fail( IS_STATUSVIEW( object ) ); sv = STATUSVIEW( object ); #ifdef DEBUG printf( "statusview_destroy\n" ); #endif /*DEBUG*/ statusviewband_destroy( sv ); GTK_OBJECT_CLASS( parent_class )->destroy( object ); } /* Hide this statusview. */ static void statusview_hide_cb( GtkWidget *menu, GtkWidget *host, Statusview *sv ) { sv->imagemodel->show_status = FALSE; iobject_changed( IOBJECT( sv->imagemodel ) ); } static void statusview_class_init( StatusviewClass *class ) { GtkObjectClass *object_class = (GtkObjectClass *) class; GtkWidget *pane; parent_class = g_type_class_peek_parent( class ); object_class->destroy = statusview_destroy; /* Create signals. */ /* Init methods. */ pane = statusview_menu = popup_build( _( "Status bar menu" ) ); popup_add_but( pane, GTK_STOCK_CLOSE, POPUP_FUNC( statusview_hide_cb ) ); } static void statusview_init( Statusview *sv ) { GtkWidget *vb, *hb; GtkWidget *eb; sv->imagemodel = NULL; sv->bands = NULL; sv->fmt = -1; sv->nb = -1; gtk_frame_set_shadow_type( GTK_FRAME( sv ), GTK_SHADOW_OUT ); eb = gtk_event_box_new(); gtk_container_add( GTK_CONTAINER( sv ), eb ); popup_attach( eb, statusview_menu, sv ); vb = gtk_vbox_new( FALSE, 0 ); gtk_container_set_border_width( GTK_CONTAINER( vb ), 1 ); gtk_container_add( GTK_CONTAINER( eb ), vb ); sv->top = gtk_label_new( "" ); gtk_misc_set_alignment( GTK_MISC( sv->top ), 0.0, 0.5 ); gtk_box_pack_start( GTK_BOX( vb ), sv->top, TRUE, TRUE, 0 ); hb = gtk_hbox_new( FALSE, 5 ); gtk_box_pack_start( GTK_BOX( vb ), hb, TRUE, TRUE, 0 ); sv->pos = gtk_label_new( "" ); set_fixed( sv->pos, strlen( "(888888,888888)" ) ); gtk_misc_set_alignment( GTK_MISC( sv->pos ), 0.0, 0.5 ); gtk_box_pack_start( GTK_BOX( hb ), sv->pos, FALSE, FALSE, 0 ); sv->hb = gtk_hbox_new( FALSE, 5 ); gtk_box_pack_start( GTK_BOX( hb ), sv->hb, TRUE, TRUE, 0 ); sv->mag = gtk_label_new( "" ); gtk_misc_set_alignment( GTK_MISC( sv->mag ), 0.0, 0.5 ); gtk_box_pack_end( GTK_BOX( hb ), sv->mag, FALSE, FALSE, 0 ); gtk_widget_show_all( eb ); } GtkType statusview_get_type( void ) { static GtkType statusview_type = 0; if( !statusview_type ) { static const GtkTypeInfo sinfo = { "Statusview", sizeof( Statusview ), sizeof( StatusviewClass ), (GtkClassInitFunc) statusview_class_init, (GtkObjectInitFunc) statusview_init, /* reserved_1 */ NULL, /* reserved_2 */ NULL, (GtkClassInitFunc) NULL, }; statusview_type = gtk_type_unique( GTK_TYPE_FRAME, &sinfo ); } return( statusview_type ); } /* Our model has changed ... update. */ static void statusview_changed_cb( Imagemodel *imagemodel, Statusview *sv ) { static char *sample[] = { /* Sample text for each BandFmt. Used to try to get * the spacing right. */ "888", /* uchar */ "-888", /* char */ "88888", /* ushort */ "-88888", /* short */ "888888888", /* int */ "-888888888", /* uint */ "888888888", /* float */ "(88888888,888888888)", /* complex */ "88888888888", /* double */ "(8888888888,888888888)" /* dpcomplex */ }; Conversion *conv = imagemodel->conv; iImage *iimage = imagemodel->iimage; IMAGE *im = imageinfo_get( FALSE, iimage->value.ii ); double size = (double) im->Ysize * IM_IMAGE_SIZEOF_LINE( im ); unsigned int nb; int fmt; char txt[MAX_LINELENGTH]; VipsBuf buf = VIPS_BUF_STATIC( txt ); #ifdef DEBUG printf( "statusview_changed_cb: %p\n", imagemodel ); #endif /*DEBUG*/ widget_visible( GTK_WIDGET( sv ), imagemodel->show_status ); /* If we're hidden, no need to do any more. */ if( !imagemodel->show_status ) return; if( conv->mag > 0 ) set_glabel( sv->mag, "%s %d:1", _( "Magnification" ), conv->mag ); else set_glabel( sv->mag, "%s 1:%d", _( "Magnification" ), -conv->mag ); vips_buf_appendf( &buf, "%s, ", NN( IOBJECT( iimage )->caption ) ); vips_buf_append_size( &buf, size ); vips_buf_appendf( &buf, ", %.3gx%.3g p/mm", im->Xres, im->Yres ); set_gcaption( sv->top, "%s", vips_buf_all( &buf ) ); if( im->Coding == IM_CODING_LABQ || im->Coding == IM_CODING_RAD ) { nb = 3; fmt = 6; } else { nb = im->Bands; fmt = im->BandFmt; } if( sv->nb != nb || sv->fmt != fmt ) { /* Bands/fmt has changed ... rebuild band display widgets. */ unsigned int i; int width; statusviewband_destroy( sv ); sv->fmt = fmt; sv->nb = nb; if( sv->fmt >= 0 && sv->fmt < IM_NUMBER( sample ) ) width = strlen( sample[sv->fmt] ); else width = 10; /* Don't display more than 8 bands ... it'll make the window * too large. FIXME ... now very kewl */ for( i = 0; i < IM_MIN( 8, nb ); i++ ) { StatusviewBand *band = INEW( NULL, StatusviewBand ); band->sv = sv; band->bandno = i; band->val = gtk_label_new( "" ); gtk_misc_set_alignment( GTK_MISC( band->val ), 0.0, 0.5 ); set_fixed( band->val, width ); gtk_box_pack_start( GTK_BOX( sv->hb ), band->val, FALSE, FALSE, 0 ); gtk_widget_show( band->val ); sv->bands = g_slist_append( sv->bands, band ); } } } static void statusview_link( Statusview *sv, Imagemodel *imagemodel ) { sv->imagemodel = imagemodel; g_signal_connect( G_OBJECT( sv->imagemodel ), "changed", G_CALLBACK( statusview_changed_cb ), sv ); } Statusview * statusview_new( Imagemodel *imagemodel ) { Statusview *sv = gtk_type_new( TYPE_STATUSVIEW ); statusview_link( sv, imagemodel ); return( sv ); } /* Turn a IM_CODING_LABQ 4-band image into three floats. */ static void statusview_mouse_LABPACK( Statusview *sv, int x, int y ) { Imagemodel *imagemodel = sv->imagemodel; Conversion *conv = imagemodel->conv; GSList *bands = sv->bands; /* Three widgets we update. */ StatusviewBand *b1; StatusviewBand *b2; StatusviewBand *b3; unsigned char *e = (unsigned char *) get_element( conv->reg, x, y, 0 ); unsigned int iL = (e[0] << 2) | (e[3] >> 6); float L = 100.0 * iL / 1023.0; signed int ia = ((signed char) e[1] << 3) | ((e[3] >> 3) & 0x7); float a = 0.125 * ia; signed int ib = ((signed char) e[2] << 3) | (e[3] & 0x7); float b = 0.125 * ib; if( g_slist_length( sv->bands ) == 3 ) { b1 = (StatusviewBand *) bands->data; b2 = (StatusviewBand *) bands->next->data; b3 = (StatusviewBand *) bands->next->next->data; set_glabel( b1->val, "%g", L ); set_glabel( b2->val, "%g", a ); set_glabel( b3->val, "%g", b ); } } /* Turn a IM_CODING_RAD 4-band image into three floats. */ static void statusview_mouse_RAD( Statusview *sv, int x, int y ) { Imagemodel *imagemodel = sv->imagemodel; Conversion *conv = imagemodel->conv; GSList *bands = sv->bands; /* Three widgets we update. */ StatusviewBand *b1; StatusviewBand *b2; StatusviewBand *b3; unsigned char *e = (unsigned char *) get_element( conv->reg, x, y, 0 ); double f = ldexp( 1.0, e[3] - (128 + 8) ); float r = (e[0] + 0.5) * f; float g = (e[1] + 0.5) * f; float b = (e[2] + 0.5) * f; if( g_slist_length( sv->bands ) == 3 ) { b1 = (StatusviewBand *) bands->data; b2 = (StatusviewBand *) bands->next->data; b3 = (StatusviewBand *) bands->next->next->data; set_glabel( b1->val, "%g", r ); set_glabel( b2->val, "%g", g ); set_glabel( b3->val, "%g", b ); } } /* Sub-fn of below. Remake a band in the bar. */ static void * statusview_mouse_band( StatusviewBand *svb, void *e ) { Imagemodel *imagemodel = svb->sv->imagemodel; Conversion *conv = imagemodel->conv; REGION *reg = conv->reg; IMAGE *im = reg->im; /* Generate string for contents of band element. */ if( im->Coding == IM_CODING_NONE ) switch( im->BandFmt ) { case IM_BANDFMT_UCHAR: set_glabel( svb->val, "%d", ((unsigned char *)e)[svb->bandno] ); break; case IM_BANDFMT_CHAR: set_glabel( svb->val, "%d", ((char *)e)[svb->bandno] ); break; case IM_BANDFMT_USHORT: set_glabel( svb->val, "%d", ((unsigned short *)e)[svb->bandno] ); break; case IM_BANDFMT_SHORT: set_glabel( svb->val, "%d", ((short *)e)[svb->bandno] ); break; case IM_BANDFMT_UINT: set_glabel( svb->val, "%d", ((unsigned int *)e)[svb->bandno] ); break; case IM_BANDFMT_INT: set_glabel( svb->val, "%d", ((int *)e)[svb->bandno] ); break; case IM_BANDFMT_FLOAT: set_glabel( svb->val, "%g", ((float *)e)[svb->bandno] ); break; case IM_BANDFMT_COMPLEX: set_glabel( svb->val, "(%g,%g)", ((float *)e)[svb->bandno << 1], ((float *)e)[(svb->bandno << 1) + 1] ); break; case IM_BANDFMT_DOUBLE: set_glabel( svb->val, "%g", ((double *)e)[svb->bandno] ); break; case IM_BANDFMT_DPCOMPLEX: set_glabel( svb->val, "(%g,%g)", ((double *)e)[svb->bandno << 1], ((double *)e)[(svb->bandno << 1) + 1] ); break; default: set_glabel( svb->val, "???" ); break; } else set_glabel( svb->val, "???" ); return( NULL ); } void statusview_mouse( Statusview *sv, int x, int y ) { Imagemodel *imagemodel = sv->imagemodel; Conversion *conv = imagemodel->conv; IMAGE *im = imageinfo_get( FALSE, conv->ii ); REGION *reg = conv->reg; double dx, dy; x = IM_CLIP( 0, x, conv->underlay.width - 1 ); y = IM_CLIP( 0, y, conv->underlay.height - 1 ); /* Calculate x/y pos we display. */ dx = x; dy = y; if( imagemodel->rulers_offset ) { dx -= im->Xoffset; dy -= im->Yoffset; } if( imagemodel->rulers_mm ) { dx /= im->Xres; dy /= im->Yres; } set_glabel( sv->pos, "(%5g, %5g)", dx, dy ); /* Update value list. */ if( reg ) { if( reg->im->Coding == IM_CODING_LABQ ) statusview_mouse_LABPACK( sv, x, y ); else if( reg->im->Coding == IM_CODING_RAD ) statusview_mouse_RAD( sv, x, y ); else slist_map( sv->bands, (SListMapFn) statusview_mouse_band, get_element( reg, x, y, 0 ) ); } } nip2-8.7.0/src/rhs.h0000644000175000017500000000420613224651032011053 00000000000000/* the rhs of a row ... group together everything to the right of the * button */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_RHS (rhs_get_type()) #define RHS( obj ) \ (G_TYPE_CHECK_INSTANCE_CAST( (obj), TYPE_RHS, Rhs )) #define RHS_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_CAST( (klass), TYPE_RHS, RhsClass)) #define IS_RHS( obj ) \ (G_TYPE_CHECK_INSTANCE_TYPE( (obj), TYPE_RHS )) #define IS_RHS_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_TYPE( (klass), TYPE_RHS )) #define RHS_GET_CLASS( obj ) \ (G_TYPE_INSTANCE_GET_CLASS( (obj), TYPE_RHS, RhsClass )) /* Which children are visible. */ typedef enum { RHS_GRAPHIC = 1, /* Graphical display */ RHS_SCOL = 2, /* Class browser display */ RHS_ITEXT = 4 /* Textual display */ } RhsFlags; struct _Rhs { Heapmodel parent_class; int vislevel; /* Visibility level */ RhsFlags flags; /* Which children we want visible */ Model *graphic; /* Graphic display ... toggle/slider/etc */ Model *scol; /* Class display */ Model *itext; /* Text display */ }; typedef struct _RhsClass { HeapmodelClass parent_class; /* My methods. */ } RhsClass; GType rhs_get_type( void ); Rhs *rhs_new( Row *row ); void rhs_set_vislevel( Rhs *rhs, int vislevel ); void rhs_vislevel_up( Rhs *rhs ); void rhs_vislevel_down( Rhs *rhs ); gboolean rhs_child_edited( Rhs *rhs ); nip2-8.7.0/src/nipmarshal.list0000644000175000017500000000241613224651032013142 00000000000000# see glib-genmarshal(1) for a detailed description of the file format, # possible parameter types are: # VOID indicates no return type, or no extra # parameters. if VOID is used as the parameter # list, no additional parameters may be present. # BOOLEAN for boolean types (gboolean) # CHAR for signed char types (gchar) # UCHAR for unsigned char types (guchar) # INT for signed integer types (gint) # UINT for unsigned integer types (guint) # LONG for signed long integer types (glong) # ULONG for unsigned long integer types (gulong) # ENUM for enumeration types (gint) # FLAGS for flag enumeration types (guint) # FLOAT for single-precision float types (gfloat) # DOUBLE for double-precision float types (gdouble) # STRING for string types (gchar*) # BOXED for boxed (anonymous but reference counted) types (GBoxed*) # POINTER for anonymous pointer types (gpointer) # PARAM for GParamSpec or derived types (GParamSpec*) # OBJECT for GObject or derived types (GObject*) # NONE deprecated alias for VOID # BOOL deprecated alias for BOOLEAN VOID: OBJECT, INT VOID: DOUBLE, DOUBLE BOOLEAN: INT, INT nip2-8.7.0/src/action.c0000644000175000017500000014506313224651032011536 00000000000000/* actions on the graph */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #include "ip.h" /* Index with binop or uop. */ const char *operator_table[] = { "none", /* BI_NONE */ "add", /* BI_ADD */ "subtract", /* BI_SUB */ "remainder", /* BI_REM */ "power", /* BI_POW */ "subscript", /* BI_SELECT */ "left_shift", /* BI_LSHIFT */ "right_shift", /* BI_RSHIFT */ "divide", /* BI_DIV */ "join", /* BI_JOIN */ "dot", /* BI_DOT */ "comma", /* BI_COMMA */ "multiply", /* BI_MUL */ "logical_and", /* BI_LAND */ "logical_or", /* BI_LOR */ "bitwise_and", /* BI_BAND */ "bitwise_or", /* BI_BOR */ "eor", /* BI_EOR */ "equal", /* BI_EQ */ "not_equal", /* BI_NOTEQ */ "pointer_equal", /* BI_PEQ */ "pointer_not_equal", /* BI_PNOTEQ */ "less", /* BI_LESS */ "less_equal", /* BI_LESSEQ */ "none", /* BI_MORE */ "none", /* BI_MOREEQ */ "if_then_else", /* BI_IF */ "cons", /* BI_CONS */ "none", /* UN_NONE */ "cast_signed_char", /* UN_CSCHAR */ "cast_unsigned_char", /* UN_CUCHAR */ "cast_signed_short", /* UN_CSSHORT */ "cast_unsigned_short", /* UN_CUSHORT */ "cast_signed_int", /* UN_CSINT */ "cast_unsigned_int", /* UN_CUINT */ "cast_float", /* UN_CFLOAT */ "cast_double", /* UN_CDOUBLE */ "cast_complex", /* UN_CCOMPLEX */ "cast_double_complex", /* UN_CDCOMPLEX */ "unary_minus", /* UN_MINUS */ "negate", /* UN_NEG */ "complement", /* UN_COMPLEMENT */ "unary_plus" /* UN_PLUS */ }; const int noperator_table = IM_NUMBER( operator_table ); /* Bad bop error. */ static void action_boperror( Reduce *rc, Compile *compile, const char *str, int op, const char *name, PElement *a, PElement *b ) { const char *top_str = str ? str : _( "Bad arguments." ); const char *op_name = op >= 0 ? decode_BinOp( op ) : name; char txt[MAX_ERROR_FRAG]; VipsBuf buf = VIPS_BUF_STATIC( txt ); char txt2[MAX_ERROR_FRAG]; VipsBuf buf2 = VIPS_BUF_STATIC( txt2 ); char txt3[MAX_ERROR_FRAG]; VipsBuf buf3 = VIPS_BUF_STATIC( txt3 ); itext_value_ev( rc, &buf, a ); itext_value_ev( rc, &buf2, b ); if( compile ) { /* Expands to eg. 'bad args to "+", called from "fred"' */ vips_buf_appends( &buf3, _( "Called from" ) ); vips_buf_appends( &buf3, " " ); compile_name( compile, &buf3 ); } error_top( "%s", top_str ); error_sub( _( "Error in binary %s.\n" "left = %s\n" "right = %s\n%s" ), op_name, vips_buf_all( &buf ), vips_buf_all( &buf2 ), vips_buf_all( &buf3 ) ); reduce_throw( rc ); } /* Member not found in class instance error. */ static void action_nomerror( Reduce *rc, Compile *compile, PElement *a, PElement *b ) { char txt[500]; VipsBuf buf = VIPS_BUF_STATIC( txt ); char txt2[MAX_ERROR_FRAG]; VipsBuf buf2 = VIPS_BUF_STATIC( txt2 ); char txt3[MAX_ERROR_FRAG]; VipsBuf buf3 = VIPS_BUF_STATIC( txt3 ); if( PEISCLASS( a ) ) symbol_qualified_name( PEGETCLASSCOMPILE( a )->sym, &buf3 ); else if( PEISSYMREF( a ) ) symbol_qualified_name( PEGETSYMREF( a ), &buf3 ); else if( PEISSYMBOL( a ) ) symbol_qualified_name( PEGETSYMBOL( a ), &buf3 ); else if( PEISCOMPILEREF( a ) ) symbol_qualified_name( PEGETCOMPILE( a )->sym, &buf3 ); else vips_buf_appends( &buf3, "" ); itext_value_ev( rc, &buf2, b ); vips_buf_appendf( &buf, _( "Member \"%s\" not found in class \"%s\"." ), vips_buf_all( &buf2 ), vips_buf_all( &buf3 ) ); vips_buf_appendf( &buf, "\n" ); vips_buf_rewind( &buf3 ); itext_value_ev( rc, &buf3, a ); vips_buf_appendf( &buf, " " ); vips_buf_appendf( &buf, _( "object = %s" ), vips_buf_all( &buf3 ) ); vips_buf_appendf( &buf, "\n" ); vips_buf_appendf( &buf, " " ); vips_buf_appendf( &buf, _( "tag = %s" ), vips_buf_all( &buf2 ) ); vips_buf_appendf( &buf, "\n" ); vips_buf_rewind( &buf3 ); symbol_qualified_name( compile->sym, &buf3 ); vips_buf_appendf( &buf, _( "Reference attempted in \"%s\"." ), vips_buf_all( &buf3 ) ); vips_buf_appendf( &buf, "\n" ); error_top( _( "Member not found." ) ); error_sub( "%s", vips_buf_all( &buf ) ); reduce_throw( rc ); } /* Bad uop error. */ static void action_uoperror( Reduce *rc, Compile *compile, const char *str, int op, const char *name, PElement *a ) { const char *top_str = str ? str : _( "Bad argument." ); const char *op_name = op >= 0 ? decode_UnOp( op ) : name; char txt[MAX_ERROR_FRAG]; VipsBuf buf = VIPS_BUF_STATIC( txt ); char txt2[MAX_ERROR_FRAG]; VipsBuf buf2 = VIPS_BUF_STATIC( txt2 ); itext_value_ev( rc, &buf, a ); if( compile ) { /* Expands to eg. 'bad args to "+", called from "fred"' */ vips_buf_appends( &buf2, _( "Called from" ) ); vips_buf_appends( &buf2, " " ); compile_name( compile, &buf2 ); } error_top( "%s", top_str ); error_sub( _( "Error in unary %s.\n" "argument = %s\n%s" ), op_name, vips_buf_all( &buf ), vips_buf_all( &buf2 ) ); reduce_throw( rc ); } /* Clip real part of number a to a range. */ static void action_set_range( Reduce *rc, double mn, double mx, PElement *a, PElement *out ) { Heap *heap = rc->heap; double d; /* Get real part. */ if( PEISREAL( a ) ) d = PEGETREAL( a ); else d = PEGETREALPART( a ); if( d < mn ) d = mn; else if( d > mx ) d = mx; else d = (int) d; if( !heap_real_new( heap, d, out ) ) reduce_throw( rc ); } /* EOR two things. */ static void action_proc_eor( Reduce *rc, Compile *compile, int op, const char *name, PElement *a, PElement *b, PElement *out ) { Heap *heap = rc->heap; if( PEISBOOL( a ) && PEISBOOL( b ) ) { PEPUTP( out, ELEMENT_BOOL, PEGETBOOL( a ) ^ PEGETBOOL( b ) ); } else if( PEISREAL( a ) && PEISREAL( b ) ) { int v1 = PEGETREAL( a ); int v2 = PEGETREAL( b ); if( !heap_real_new( heap, v1 ^ v2, out ) ) action_boperror( rc, compile, error_get_sub(), op, name, a, b ); } else if( PEISIMAGE( a ) && PEISIMAGE( b ) ) callva( rc, out, "im_eorimage", PEGETII( a ), PEGETII( b ) ); else if( PEISIMAGE( a ) && PEISREAL( b ) ) callva( rc, out, "im_eorimageconst", PEGETII( a ), (int) PEGETREAL( b ) ); else if( PEISREAL( a ) && PEISIMAGE( b ) ) callva( rc, out, "im_eorimageconst", PEGETII( b ), (int) PEGETREAL( a ) ); else action_boperror( rc, compile, NULL, op, name, a, b ); } /* OR two things. */ static void action_proc_bor( Reduce *rc, Compile *compile, int op, const char *name, PElement *a, PElement *b, PElement *out ) { Heap *heap = rc->heap; if( PEISREAL( a ) && PEISREAL( b ) ) { int v1 = PEGETREAL( a ); int v2 = PEGETREAL( b ); if( !heap_real_new( heap, v1 | v2, out ) ) action_boperror( rc, compile, error_get_sub(), op, name, a, b ); } else if( PEISIMAGE( a ) && PEISIMAGE( b ) ) callva( rc, out, "im_orimage", PEGETII( a ), PEGETII( b ) ); else if( PEISIMAGE( a ) && PEISREAL( b ) ) callva( rc, out, "im_orimageconst", PEGETII( a ), (int) PEGETREAL( b ) ); else if( PEISREAL( a ) && PEISIMAGE( b ) ) callva( rc, out, "im_orimageconst", PEGETII( b ), (int) PEGETREAL( a ) ); else action_boperror( rc, compile, NULL, op, name, a, b ); } /* AND two things. */ static void action_proc_band( Reduce *rc, Compile *compile, int op, const char *name, PElement *a, PElement *b, PElement *out ) { Heap *heap = rc->heap; if( PEISIMAGE( a ) && PEISIMAGE( b ) ) callva( rc, out, "im_andimage", PEGETII( a ), PEGETII( b ) ); else if( PEISREAL( a ) && PEISREAL( b ) ) { int v1 = PEGETREAL( a ); int v2 = PEGETREAL( b ); if( !heap_real_new( heap, v1 & v2, out ) ) action_boperror( rc, compile, error_get_sub(), op, name, a, b ); } else if( PEISIMAGE( a ) && PEISREAL( b ) ) callva( rc, out, "im_andimageconst", PEGETII( a ), (int) PEGETREAL( b ) ); else if( PEISREAL( a ) && PEISIMAGE( b ) ) callva( rc, out, "im_andimageconst", PEGETII( b ), (int) PEGETREAL( a ) ); else action_boperror( rc, compile, NULL, op, name, a, b ); } static void * action_proc_dot_add_link( Expr *expr, Symbol *child ) { return( link_add( child, expr, TRUE ) ); } static char * action_proc_dot_tag( Reduce *rc, PElement *b, char *tag, int n ) { if( PEISTAG( b ) ) return( PEGETTAG( b ) ); else if( reduce_is_string( rc, b ) ) { (void) reduce_get_string( rc, b, tag, n ); return( tag ); } return( NULL ); } /* Extract field from object. Be careful, a can be equal to out. */ static void action_proc_dot( Reduce *rc, Compile *compile, int op, const char *name, PElement *a, PElement *b, PElement *out ) { char tag[256]; char *p; if( PEISCLASS( a ) ) { PElement c; if( (p = action_proc_dot_tag( rc, b, tag, 256 )) ) { if( !class_get_member( a, p, NULL, &c ) ) action_nomerror( rc, compile, a, b ); PEPUTPE( out, &c ); } else if( PEISSYMREF( b ) ) { if( !class_get_symbol( a, PEGETSYMREF( b ), &c ) ) action_nomerror( rc, compile, a, b ); PEPUTPE( out, &c ); } else action_boperror( rc, compile, _( "Bad right hand side of '.'." ), op, name, a, b ); } else if( PEISSYMREF( a ) ) { Symbol *sym = PEGETSYMREF( a ); Symbol *child; if( !is_scope( sym ) ) action_boperror( rc, compile, _( "Symbol on left hand side of '.' " "is not scope" ), op, name, a, b ); g_assert( sym->expr ); if( !(p = action_proc_dot_tag( rc, b, tag, 256 )) ) action_boperror( rc, compile, _( "Bad right hand side of '.'." ), op, name, a, b ); if( !(child = compile_lookup( sym->expr->compile, p )) ) action_nomerror( rc, compile, a, b ); /* Add all exprs which use compile to dynamic link graph. */ if( slist_map( compile->exprs, (SListMapFn) action_proc_dot_add_link, child ) ) action_boperror( rc, compile, error_get_sub(), op, name, a, b ); /* Don't check for dirty here ... wait for * link. */ if( child->type == SYM_VALUE ) { PEPUTP( out, ELEMENT_SYMBOL, child ); } else { PEPUTP( out, ELEMENT_SYMREF, child ); } } else if( PEISMANAGEDGOBJECT( a ) ) { GObject *gobject = PEGETMANAGEDGOBJECT( a ); GObjectClass *gclass = G_OBJECT_GET_CLASS( gobject ); GValue value = { 0 }; GParamSpec *pspec; if( !(p = action_proc_dot_tag( rc, b, tag, 256 )) ) action_boperror( rc, compile, _( "Bad right hand side of '.'." ), op, name, a, b ); if( !(pspec = g_object_class_find_property( gclass, p )) ) action_boperror( rc, compile, _( "Property not found." ), op, name, a, b ); g_value_init( &value, G_PARAM_SPEC_VALUE_TYPE( pspec ) ); g_object_get_property( gobject, p, &value); if( !heap_gvalue_to_ip( &value, out ) ) { g_value_unset( &value ); reduce_throw( rc ); } g_value_unset( &value ); } else action_boperror( rc, compile, _( "Bad left hand side of '.'." ), op, name, a, b ); } /* Less than or equal to. */ static void action_proc_lesseq( Reduce *rc, Compile *compile, int op, const char *name, PElement *a, PElement *b, PElement *out ) { if( PEISREAL( a ) && PEISREAL( b ) ) { PEPUTP( out, ELEMENT_BOOL, PEGETREAL( a ) <= PEGETREAL( b ) ); } else if( PEISCHAR( a ) && PEISCHAR( b ) ) { PEPUTP( out, ELEMENT_BOOL, PEGETCHAR( a ) <= PEGETCHAR( b ) ); } else if( PEISLIST( a ) && PEISLIST( b ) && reduce_is_string( rc, a ) && reduce_is_string( rc, b ) ) { char a_string[MAX_STRSIZE]; char b_string[MAX_STRSIZE]; reduce_get_string( rc, a, a_string, MAX_STRSIZE ); reduce_get_string( rc, b, b_string, MAX_STRSIZE ); PEPUTP( out, ELEMENT_BOOL, strcmp( a_string, b_string ) <= 0 ); } else if( PEISIMAGE( a ) && PEISREAL( b ) ) callva( rc, out, "im_lesseqconst", PEGETII( a ), PEGETREAL( b ) ); else if( PEISREAL( a ) && PEISIMAGE( b ) ) callva( rc, out, "im_moreeqconst", PEGETII( b ), PEGETREAL( a ) ); else if( PEISIMAGE( a ) && PEISIMAGE( b ) ) callva( rc, out, "im_lesseq", PEGETII( a ), PEGETII( b ) ); else action_boperror( rc, compile, NULL, op, name, a, b ); } /* Strict less than. */ static void action_proc_less( Reduce *rc, Compile *compile, int op, const char *name, PElement *a, PElement *b, PElement *out ) { if( PEISREAL( a ) && PEISREAL( b ) ) { PEPUTP( out, ELEMENT_BOOL, PEGETREAL( a ) < PEGETREAL( b ) ); } else if( PEISCHAR( a ) && PEISCHAR( b ) ) { PEPUTP( out, ELEMENT_BOOL, PEGETCHAR( a ) < PEGETCHAR( b ) ); } else if( PEISLIST( a ) && PEISLIST( b ) && reduce_is_string( rc, a ) && reduce_is_string( rc, b ) ) { char a_string[MAX_STRSIZE]; char b_string[MAX_STRSIZE]; reduce_get_string( rc, a, a_string, MAX_STRSIZE ); reduce_get_string( rc, b, b_string, MAX_STRSIZE ); PEPUTP( out, ELEMENT_BOOL, strcmp( a_string, b_string ) < 0 ); } else if( PEISIMAGE( a ) && PEISREAL( b ) ) callva( rc, out, "im_lessconst", PEGETII( a ), PEGETREAL( b ) ); else if( PEISREAL( a ) && PEISIMAGE( b ) ) callva( rc, out, "im_moreconst", PEGETII( b ), PEGETREAL( a ) ); else if( PEISIMAGE( a ) && PEISIMAGE( b ) ) callva( rc, out, "im_less", PEGETII( a ), PEGETII( b ) ); else action_boperror( rc, compile, NULL, op, name, a, b ); } /* Forward ref. */ static gboolean action_element_equal( Reduce *rc, PElement *a, PElement *b ); /* Test two nodes for equality. */ static gboolean action_node_equal( Reduce *rc, HeapNode *a, HeapNode *b ) { PElement la, ra; PElement lb, rb; /* Easy! */ if( a->type != b->type ) return( FALSE ); switch( a->type ) { case TAG_APPL: case TAG_CLASS: /* Function compare ... don't allow it. */ return( FALSE ); case TAG_CONS: /* Compare the elements. */ PEPOINTLEFT( a, &la ); PEPOINTLEFT( b, &lb ); PEPOINTRIGHT( a, &ra ); PEPOINTRIGHT( b, &rb ); return( action_element_equal( rc, &la, &lb ) && action_element_equal( rc, &ra, &rb ) ); case TAG_DOUBLE: return( a->body.num == b->body.num ); case TAG_COMPLEX: return( GETLEFT( a )->body.num == GETLEFT( b )->body.num && GETRIGHT( a )->body.num == GETRIGHT( b )->body.num ); case TAG_GEN: case TAG_FILE: case TAG_FREE: case TAG_SHARED: case TAG_REFERENCE: default: g_assert( FALSE ); /* Keep gcc happy. */ return( FALSE ); } } static gboolean action_image_equal( Reduce *rc, Imageinfo *a, Imageinfo *b ) { Imageinfo *ii[2]; IMAGE *t1; IMAGE *ai, *bi; gboolean use_luts; double mn; /* Easy tests first. */ ii[0] = a; ii[1] = b; g_assert( !ii[0] && !ii[1] ); if( ii[0] == ii[1] ) /* Trivial! */ return( TRUE ); /* Extract images ... get LUTs if the underlying image is the * same. */ use_luts = imageinfo_same_underlying( ii, 2 ); if( !(ai = imageinfo_get( use_luts, ii[0] )) || !(bi = imageinfo_get( use_luts, ii[1] )) ) { reduce_throw( rc ); /* Never get here, but keeps gcc happy. */ return( FALSE ); } /* Size and bands must be the same. */ if( ai->Xsize != bi->Xsize || ai->Ysize != bi->Ysize || ai->Bands != bi->Bands || ai->Coding != bi->Coding ) return( FALSE ); /* Exhaustive test. */ if( !(t1 = im_open( "equals:1", "p" )) ) { error_vips_all(); reduce_throw( rc ); } if( im_equal( ai, bi, t1 ) || im_min( t1, &mn ) ) { im_close( t1 ); error_vips_all(); reduce_throw( rc ); } im_close( t1 ); return( mn == 255 ); } /* One of p1/p2 is a managedstring. * * This is pretty dumb. We could have a special loop down the list side which * compared to the managedstring directly, but I doubt if this will ever be a * performance issue. */ static gboolean action_string_equal( Reduce *rc, PElement *p1, PElement *p2 ) { char a_string[MAX_STRSIZE]; char b_string[MAX_STRSIZE]; reduce_get_string( rc, p1, a_string, MAX_STRSIZE ); reduce_get_string( rc, p2, b_string, MAX_STRSIZE ); return( strcmp( a_string, b_string ) == 0 ); } /* Test two elements for equality. Force computation as required. */ static gboolean action_element_equal( Reduce *rc, PElement *p1, PElement *p2 ) { /* Reduce a bit. */ reduce_spine( rc, p1 ); reduce_spine( rc, p2 ); /* We can often test for eg. "fred" == "fred" by just checking * pointers. */ if( PEGETTYPE( p1 ) == PEGETTYPE( p2 ) ) { switch( PEGETTYPE( p1 ) ) { case ELEMENT_CHAR: case ELEMENT_NODE: case ELEMENT_BOOL: case ELEMENT_MANAGED: if( PEGETVAL( p1 ) == PEGETVAL( p2 ) ) return( TRUE ); break; case ELEMENT_ELIST: return( TRUE ); } } /* Special case if either is a managedstring. */ if( PEISMANAGEDSTRING( p1 ) || PEISMANAGEDSTRING( p2 ) ) return( action_string_equal( rc, p1, p2 ) ); /* No other implicit conversions, so types must match. */ if( PEGETTYPE( p1 ) != PEGETTYPE( p2 ) ) return( FALSE ); switch( PEGETTYPE( p1 ) ) { case ELEMENT_TAG: case ELEMENT_BINOP: case ELEMENT_UNOP: case ELEMENT_SYMBOL: case ELEMENT_SYMREF: case ELEMENT_COMPILEREF: case ELEMENT_CONSTRUCTOR: case ELEMENT_COMB: /* Don't allow function compare. */ return( FALSE ); case ELEMENT_NODE: /* Compare the HeapNodes. */ return( action_node_equal( rc, PEGETVAL( p1 ), PEGETVAL( p2 ) ) ); case ELEMENT_CHAR: return( PEGETCHAR( p1 ) == PEGETCHAR( p2 ) ); case ELEMENT_BOOL: return( PEGETBOOL( p1 ) == PEGETBOOL( p2 ) ); case ELEMENT_MANAGED: if( PEISIMAGE( p1 ) && PEISIMAGE( p2 ) ) return( action_image_equal( rc, PEGETII( p1 ), PEGETII( p2 ) ) ); else return( FALSE ); case ELEMENT_ELIST: return( TRUE ); case ELEMENT_NOVAL: default: g_assert( FALSE ); /* Keep gcc happy. */ return( FALSE ); } } /* Top-level == ... special form for image args. */ static void action_proc_equal( Reduce *rc, Compile *compile, int op, const char *name, HeapNode **arg, PElement *out ) { gboolean res; PElement left, right; PElement *a = &left; PElement *b = &right; PEPOINTRIGHT( arg[1], &left ); PEPOINTRIGHT( arg[0], &right ); if( PEISIMAGE( a ) || PEISIMAGE( b ) ) { /* Special image equals form. Hyperstrict. */ reduce_spine_strict( rc, a ); reduce_spine_strict( rc, b ); if( PEISIMAGE( a ) && PEISREAL( b ) ) callva( rc, out, "im_equalconst", PEGETII( a ), PEGETREAL( b ) ); else if( PEISREAL( a ) && PEISIMAGE( b ) ) callva( rc, out, "im_equalconst", PEGETII( b ), PEGETREAL( a ) ); else if( PEISIMAGE( a ) && PEISIMAGE( b ) ) callva( rc, out, "im_equal", PEGETII( a ), PEGETII( b ) ); else PEPUTP( out, ELEMENT_BOOL, FALSE ); } else { /* Lazy form. */ res = action_element_equal( rc, a, b ); PEPUTP( out, ELEMENT_BOOL, res ); } } /* Top-level != ... special form for image args. */ static void action_proc_notequal( Reduce *rc, Compile *compile, int op, const char *name, HeapNode **arg, PElement *out ) { gboolean res; PElement left, right; PElement *a = &left; PElement *b = &right; PEPOINTRIGHT( arg[1], &left ); PEPOINTRIGHT( arg[0], &right ); if( PEISIMAGE( a ) || PEISIMAGE( b ) ) { /* Special image equals form. Hyperstrict. */ reduce_spine_strict( rc, a ); reduce_spine_strict( rc, b ); if( PEISIMAGE( a ) && PEISREAL( b ) ) callva( rc, out, "im_notequalconst", PEGETII( a ), PEGETREAL( b ) ); else if( PEISREAL( a ) && PEISIMAGE( b ) ) callva( rc, out, "im_notequalconst", PEGETII( b ), PEGETREAL( a ) ); else if( PEISIMAGE( a ) && PEISIMAGE( b ) ) callva( rc, out, "im_notequal", PEGETII( a ), PEGETII( b ) ); else PEPUTP( out, ELEMENT_BOOL, TRUE ); } else { res = action_element_equal( rc, a, b ); PEPUTP( out, ELEMENT_BOOL, !res ); } } static void * action_proc_join_sub( Reduce *rc, PElement *pe, PElement *a, PElement *b, PElement *out ) { if( !heap_list_cat( rc, a, b, pe ) ) return( a ); PEPUTPE( out, pe ); return( NULL ); } static void action_proc_join( Reduce *rc, Compile *compile, int op, const char *name, HeapNode **arg, PElement *out ) { PElement left, right; PElement *a = &left; PElement *b = &right; PEPOINTRIGHT( arg[1], &left ); PEPOINTRIGHT( arg[0], &right ); if( PEISIMAGE( a ) && PEISIMAGE( b ) ) callva( rc, out, "im_bandjoin", PEGETII( a ), PEGETII( b ) ); else if( PEISLIST( a ) && PEISLIST( b ) ) { if( reduce_safe_pointer( rc, (reduce_safe_pointer_fn) action_proc_join_sub, a, b, out, NULL ) ) action_boperror( rc, compile, error_get_sub(), op, name, a, b ); } else if( PEISIMAGE( a ) && PEISELIST( b ) ) { PEPUTPE( out, a ); } else if( PEISIMAGE( b ) && PEISELIST( a ) ) { PEPUTPE( out, b ); } else action_boperror( rc, compile, NULL, op, name, a, b ); } static void action_proc_index( Reduce *rc, Compile *compile, int op, const char *name, HeapNode **arg, PElement *out ) { PElement left, right; PElement *a = &left; PElement *b = &right; PEPOINTRIGHT( arg[1], &left ); PEPOINTRIGHT( arg[0], &right ); if( PEISLIST( a ) && PEISREAL( b ) ) { PElement result; reduce_list_index( rc, a, PEGETREAL( b ), &result ); PEPUTPE( out, &result ); } else if( PEISIMAGE( a ) && PEISREAL( b ) ) { callva( rc, out, "im_extract_band", PEGETII( a ), (int) PEGETREAL( b ) ); } else action_boperror( rc, compile, NULL, op, name, a, b ); } /* Raise to power. */ static void action_proc_exp( Reduce *rc, Compile *compile, int op, const char *name, PElement *a, PElement *b, PElement *out ) { Heap *heap = rc->heap; if( PEISREAL( a ) && PEISREAL( b ) ) { if( !heap_real_new( heap, pow( PEGETREAL( a ), PEGETREAL( b ) ), out ) ) action_boperror( rc, compile, error_get_sub(), op, name, a, b ); } else if( PEISIMAGE( a ) && PEISREAL( b ) ) callva( rc, out, "im_powtra", PEGETII( a ), PEGETREAL( b ) ); else if( PEISREAL( a ) && PEISIMAGE( b ) ) callva( rc, out, "im_expntra", PEGETII( b ), PEGETREAL( a ) ); else action_boperror( rc, compile, NULL, op, name, a, b ); } /* Left shift. */ static void action_proc_lshift( Reduce *rc, Compile *compile, int op, const char *name, PElement *a, PElement *b, PElement *out ) { Heap *heap = rc->heap; if( PEISREAL( a ) && PEISREAL( b ) ) { int v1 = PEGETREAL( a ); int v2 = PEGETREAL( b ); if( !heap_real_new( heap, v1 << v2, out ) ) action_boperror( rc, compile, error_get_sub(), op, name, a, b ); } else if( PEISIMAGE( a ) && PEISREAL( b ) ) callva( rc, out, "im_shiftleft", PEGETII( a ), (int) PEGETREAL( b ) ); else action_boperror( rc, compile, NULL, op, name, a, b ); } /* Right shift. */ static void action_proc_rshift( Reduce *rc, Compile *compile, int op, const char *name, PElement *a, PElement *b, PElement *out ) { Heap *heap = rc->heap; if( PEISREAL( a ) && PEISREAL( b ) ) { int v1 = PEGETREAL( a ); int v2 = PEGETREAL( b ); if( !heap_real_new( heap, v1 >> v2, out ) ) action_boperror( rc, compile, error_get_sub(), op, name, a, b ); } else if( PEISIMAGE( a ) && PEISREAL( b ) ) callva( rc, out, "im_shiftright", PEGETII( a ), (int) PEGETREAL( b ) ); else action_boperror( rc, compile, NULL, op, name, a, b ); } /* Remainder. */ static void action_proc_rem( Reduce *rc, Compile *compile, int op, const char *name, PElement *a, PElement *b, PElement *out ) { Heap *heap = rc->heap; if( PEISREAL( a ) && PEISREAL( b ) ) { int v1 = PEGETREAL( a ); int v2 = PEGETREAL( b ); if( v2 == 0 ) action_boperror( rc, compile, _( "Division by zero." ), op, name, a, b ); if( !heap_real_new( heap, v1 % v2, out ) ) action_boperror( rc, compile, error_get_sub(), op, name, a, b ); } else if( PEISIMAGE( a ) && PEISIMAGE( b ) ) callva( rc, out, "im_remainder", PEGETII( a ), PEGETII( b ) ); else if( PEISIMAGE( a ) && PEISREAL( b ) ) callva( rc, out, "im_remainderconst", PEGETII( a ), PEGETREAL( b ) ); else action_boperror( rc, compile, NULL, op, name, a, b ); } /* Divide two objects. */ static void action_proc_div( Reduce *rc, Compile *compile, int op, const char *name, PElement *a, PElement *b, PElement *out ) { Heap *heap = rc->heap; if( PEISREAL( a ) && PEISREAL( b ) ) { if( !heap_real_new( heap, PEGETREAL( a ) / PEGETREAL( b ), out ) ) action_boperror( rc, compile, error_get_sub(), op, name, a, b ); } else if( PEISCOMPLEX( a ) && PEISCOMPLEX( b ) ) { double x1 = PEGETREALPART( a ); double y1 = PEGETIMAGPART( a ); double x2 = PEGETREALPART( b ); double y2 = PEGETIMAGPART( b ); if( !heap_complex_new( heap, (x1 * x2 + y1 * y2) / (x2 * x2 + y2 * y2), (y1 * x2 - x1 * y2) / (x2 * x2 + y2 * y2), out ) ) action_boperror( rc, compile, error_get_sub(), op, name, a, b ); } else if( PEISCOMPLEX( a ) && PEISREAL( b ) ) { double x1 = PEGETREALPART( a ); double y1 = PEGETIMAGPART( a ); double x2 = PEGETREAL( b ); if( !heap_complex_new( heap, (x1 * x2) / (x2 * x2), (y1 * x2) / (x2 * x2), out ) ) action_boperror( rc, compile, error_get_sub(), op, name, a, b ); } else if( PEISREAL( a ) && PEISCOMPLEX( b ) ) { double x1 = PEGETREAL( a ); double x2 = PEGETREALPART( b ); double y2 = PEGETIMAGPART( b ); if( !heap_complex_new( heap, (x1 * x2) / (x2 * x2 + y2 * y2), (-x1 * y2) / (x2 * x2 + y2 * y2), out ) ) action_boperror( rc, compile, error_get_sub(), op, name, a, b ); } else if( PEISIMAGE( a ) && PEISIMAGE( b ) ) callva( rc, out, "im_divide", PEGETII( a ), PEGETII( b ) ); else if( PEISIMAGE( a ) && PEISREAL( b ) ) callva( rc, out, "im_lintra", 1.0 / PEGETREAL( b ), PEGETII( a ), 0.0 ); else if( PEISREAL( a ) && PEISIMAGE( b ) ) { HeapNode hn; PElement rhs; /* Use this for intermediates. */ PEPOINTRIGHT( &hn, &rhs ); /* Take recip. */ callva( rc, &rhs, "im_powtra", PEGETII( b ), -1.0 ); /* Now multiply by const. */ callva( rc, out, "im_lintra", PEGETREAL( a ), PEGETII( &rhs ), 0.0 ); } else action_boperror( rc, compile, NULL, op, name, a, b ); } /* Multiply two objects. */ static void action_proc_mul( Reduce *rc, Compile *compile, int op, const char *name, PElement *a, PElement *b, PElement *out ) { Heap *heap = rc->heap; if( PEISREAL( a ) && PEISREAL( b ) ) { if( !heap_real_new( heap, PEGETREAL( a ) * PEGETREAL( b ), out ) ) action_boperror( rc, compile, error_get_sub(), op, name, a, b ); } else if( PEISCOMPLEX( a ) && PEISCOMPLEX( b ) ) { double x1 = PEGETREALPART( a ); double y1 = PEGETIMAGPART( a ); double x2 = PEGETREALPART( b ); double y2 = PEGETIMAGPART( b ); if( !heap_complex_new( heap, x1*x2 - y1*y2, x1*y2 + x2*y1, out ) ) action_boperror( rc, compile, error_get_sub(), op, name, a, b ); } else if( PEISCOMPLEX( a ) && PEISREAL( b ) ) { if( !heap_complex_new( heap, PEGETREALPART( a ) * PEGETREAL( b ), PEGETIMAGPART( a ) * PEGETREAL( b ), out ) ) action_boperror( rc, compile, error_get_sub(), op, name, a, b ); } else if( PEISREAL( a ) && PEISCOMPLEX( b ) ) { if( !heap_complex_new( heap, PEGETREAL( a ) * PEGETREALPART( b ), PEGETREAL( a ) * PEGETIMAGPART( b ), out ) ) action_boperror( rc, compile, error_get_sub(), op, name, a, b ); } else if( PEISIMAGE( a ) && PEISIMAGE( b ) ) callva( rc, out, "im_multiply", PEGETII( a ), PEGETII( b ) ); else if( PEISIMAGE( a ) && PEISREAL( b ) ) callva( rc, out, "im_lintra", PEGETREAL( b ), PEGETII( a ), 0.0 ); else if( PEISREAL( a ) && PEISIMAGE( b ) ) callva( rc, out, "im_lintra", PEGETREAL( a ), PEGETII( b ), 0.0 ); else action_boperror( rc, compile, NULL, op, name, a, b ); } /* Subtract two objects. */ static void action_proc_sub( Reduce *rc, Compile *compile, int op, const char *name, PElement *a, PElement *b, PElement *out ) { Heap *heap = rc->heap; if( PEISREAL( a ) && PEISREAL( b ) ) { if( !heap_real_new( heap, PEGETREAL( a ) - PEGETREAL( b ), out ) ) action_boperror( rc, compile, error_get_sub(), op, name, a, b ); } else if( PEISCOMPLEX( a ) && PEISCOMPLEX( b ) ) { if( !heap_complex_new( heap, PEGETREALPART( a ) - PEGETREALPART( b ), PEGETIMAGPART( a ) - PEGETIMAGPART( b ), out ) ) action_boperror( rc, compile, error_get_sub(), op, name, a, b ); } else if( PEISCOMPLEX( a ) && PEISREAL( b ) ) { if( !heap_complex_new( heap, PEGETREALPART( a ) - PEGETREAL( b ), PEGETIMAGPART( a ), out ) ) action_boperror( rc, compile, error_get_sub(), op, name, a, b ); } else if( PEISREAL( a ) && PEISCOMPLEX( b ) ) { if( !heap_complex_new( heap, PEGETREAL( a ) - PEGETREALPART( b ), PEGETIMAGPART( b ), out ) ) action_boperror( rc, compile, error_get_sub(), op, name, a, b ); } else if( PEISIMAGE( a ) && PEISIMAGE( b ) ) callva( rc, out, "im_subtract", PEGETII( a ), PEGETII( b ) ); else if( PEISIMAGE( a ) && PEISREAL( b ) ) callva( rc, out, "im_lintra", 1.0, PEGETII( a ), -PEGETREAL( b ) ); else if( PEISREAL( a ) && PEISIMAGE( b ) ) callva( rc, out, "im_lintra", -1.0, PEGETII( b ), PEGETREAL( a ) ); else action_boperror( rc, compile, NULL, op, name, a, b ); } /* Add two objects. */ static void action_proc_add( Reduce *rc, Compile *compile, int op, const char *name, PElement *a, PElement *b, PElement *out ) { Heap *heap = rc->heap; if( PEISREAL( a ) && PEISREAL( b ) ) { if( !heap_real_new( heap, PEGETREAL( a ) + PEGETREAL( b ), out ) ) action_boperror( rc, compile, error_get_sub(), op, name, a, b ); } else if( PEISCOMPLEX( a ) && PEISCOMPLEX( b ) ) { if( !heap_complex_new( heap, PEGETREALPART( a ) + PEGETREALPART( b ), PEGETIMAGPART( a ) + PEGETIMAGPART( b ), out ) ) action_boperror( rc, compile, error_get_sub(), op, name, a, b ); } else if( PEISCOMPLEX( a ) && PEISREAL( b ) ) { if( !heap_complex_new( heap, PEGETREALPART( a ) + PEGETREAL( b ), PEGETIMAGPART( a ), out ) ) action_boperror( rc, compile, error_get_sub(), op, name, a, b ); } else if( PEISREAL( a ) && PEISCOMPLEX( b ) ) { if( !heap_complex_new( heap, PEGETREAL( a ) + PEGETREALPART( b ), PEGETIMAGPART( b ), out ) ) action_boperror( rc, compile, error_get_sub(), op, name, a, b ); } else if( PEISIMAGE( a ) && PEISIMAGE( b ) ) callva( rc, out, "im_add", PEGETII( a ), PEGETII( b ) ); else if( PEISIMAGE( a ) && PEISREAL( b ) ) callva( rc, out, "im_lintra", 1.0, PEGETII( a ), PEGETREAL( b ) ); else if( PEISREAL( a ) && PEISIMAGE( b ) ) callva( rc, out, "im_lintra", 1.0, PEGETII( b ), PEGETREAL( a ) ); else action_boperror( rc, compile, NULL, op, name, a, b ); } /* Evaluate a binary operator on args a and b, write the result to out. a and * b already reduced. * * Call one of the things above. Not all combinations implemented, got bored :/ * Implement simple things in the switch, break to the functions above for * the rest. * * out can be rhs of argv[0], careful. */ static void action_proc_bop_strict( Reduce *rc, Compile *compile, int op, const char *name, HeapNode **arg, PElement *out ) { Heap *heap = rc->heap; HeapNode *hn; PElement left, right; PElement *a = &left; PElement *b = &right; PEPOINTRIGHT( arg[1], &left ); PEPOINTRIGHT( arg[0], &right ); switch( op ) { case BI_SELECT: action_proc_index( rc, compile, op, name, arg, out ); break; case BI_JOIN: action_proc_join( rc, compile, op, name, arg, out ); break; case BI_EQ: action_proc_equal( rc, compile, op, name, arg, out ); break; case BI_NOTEQ: action_proc_notequal( rc, compile, op, name, arg, out ); break; case BI_PEQ: PEPUTP( out, ELEMENT_BOOL, PEGETTYPE( a ) == PEGETTYPE( b ) && PEGETVAL( a ) == PEGETVAL( b ) ); break; case BI_PNOTEQ: PEPUTP( out, ELEMENT_BOOL, PEGETTYPE( a ) != PEGETTYPE( b ) || PEGETVAL( a ) != PEGETVAL( b ) ); break; case BI_ADD: action_proc_add( rc, compile, op, name, a, b, out ); break; case BI_SUB: action_proc_sub( rc, compile, op, name, a, b, out ); break; case BI_MUL: action_proc_mul( rc, compile, op, name, a, b, out ); break; case BI_DIV: action_proc_div( rc, compile, op, name, a, b, out ); break; case BI_DOT: action_proc_dot( rc, compile, op, name, a, b, out ); break; case BI_POW: action_proc_exp( rc, compile, op, name, a, b, out ); break; case BI_LSHIFT: action_proc_lshift( rc, compile, op, name, a, b, out ); break; case BI_RSHIFT: action_proc_rshift( rc, compile, op, name, a, b, out ); break; case BI_REM: action_proc_rem( rc, compile, op, name, a, b, out ); break; case BI_LESS: action_proc_less( rc, compile, op, name, a, b, out ); break; case BI_LESSEQ: action_proc_lesseq( rc, compile, op, name, a, b, out ); break; case BI_COMMA: if( PEISREAL( a ) && PEISREAL( b ) ) { if( NEWNODE( heap, hn ) ) action_boperror( rc, compile, error_get_sub(), op, name, a, b ); /* Form complex node. */ hn->type = TAG_COMPLEX; PPUT( hn, ELEMENT_NODE, PEGETVAL( a ), ELEMENT_NODE, PEGETVAL( b ) ); PEPUTP( out, ELEMENT_NODE, hn ); } else if( PEISIMAGE( a ) && PEISIMAGE( b ) ) { callva( rc, out, "im_ri2c", PEGETII( a ), PEGETII( b ) ); } else action_boperror( rc, compile, NULL, op, name, a, b ); break; case BI_BAND: action_proc_band( rc, compile, op, name, a, b, out ); break; case BI_BOR: action_proc_bor( rc, compile, op, name, a, b, out ); break; case BI_EOR: action_proc_eor( rc, compile, op, name, a, b, out ); break; case BI_NONE: default: action_boperror( rc, compile, _( "Unimplemented." ), op, name, a, b ); break; } } /* Evaluate a unary operator on arg a, write the result to out. a * already reduced. */ void action_proc_uop( Reduce *rc, Compile *compile, int op, const char *name, HeapNode **arg, PElement *out ) { Heap *heap = rc->heap; PElement pe, *a = &pe; PElement rhs; PEPOINTRIGHT( arg[0], &pe ); switch( op ) { case UN_NEG: if( PEISREAL( a ) ) { if( !heap_real_new( heap, !PEGETREAL( a ), out ) ) reduce_throw( rc ); } else if( PEISCOMPLEX( a ) ) { if( !heap_complex_new( heap, !PEGETREALPART( a ), !PEGETIMAGPART( a ), out ) ) reduce_throw( rc ); } else if( PEISBOOL( a ) ) { PEPUTP( out, ELEMENT_BOOL, !PEGETBOOL( a ) ); } else if( PEISIMAGE( a ) ) callva( rc, out, "im_equalconst", PEGETII( a ), 0.0 ); else action_uoperror( rc, compile, NULL, op, name, a ); break; case UN_MINUS: if( PEISREAL( a ) ) { if( !heap_real_new( heap, -PEGETREAL( a ), out ) ) reduce_throw( rc ); } else if( PEISCOMPLEX( a ) ) { if( !heap_complex_new( heap, -PEGETREALPART( a ), -PEGETIMAGPART( a ), out ) ) reduce_throw( rc ); } else if( PEISIMAGE( a ) ) callva( rc, out, "im_lintra", -1.0, PEGETII( a ), 0.0 ); else action_uoperror( rc, compile, NULL, op, name, a ); break; case UN_COMPLEMENT: if( PEISREAL( a ) ) { int v = PEGETREAL( a ); if( !heap_real_new( heap, ~v, out ) ) reduce_throw( rc ); } else if( PEISIMAGE( a ) ) callva( rc, out, "im_eorimageconst", PEGETII( a ), -1 ); else action_uoperror( rc, compile, NULL, op, name, a ); break; case UN_PLUS: PEPUTPE( out, a ); break; case UN_CSCHAR: /* Convert to signed char. */ if( PEISNUM( a ) ) { action_set_range( rc, SCHAR_MIN, SCHAR_MAX, a, out ); } else if( PEISCHAR( a ) ) { if( !heap_real_new( heap, PEGETCHAR( a ), out ) ) reduce_throw( rc ); } else if( PEISIMAGE( a ) ) callva( rc, out, "im_clip2c", PEGETII( a ) ); else action_uoperror( rc, compile, NULL, op, name, a ); break; case UN_CUCHAR: /* Convert to unsigned char, eg. 65 => 'A'. */ if( PEISREAL( a ) ) { double v = PEGETREAL( a ); v = IM_CLIP( 0, v, UCHAR_MAX ); PEPUTP( out, ELEMENT_CHAR, (int) v ); } else if( PEISCOMPLEX( a ) ) { double v = PEGETREALPART( a ); v = IM_CLIP( 0, v, UCHAR_MAX ); PEPUTP( out, ELEMENT_CHAR, (int) v ); } else if( PEISCHAR( a ) ) { PEPUTPE( out, a ); } else if( PEISIMAGE( a ) ) callva( rc, out, "im_clip", PEGETII( a ) ); else action_uoperror( rc, compile, NULL, op, name, a ); break; case UN_CSINT: /* Convert to signed int. */ if( PEISNUM( a ) ) action_set_range( rc, INT_MIN, INT_MAX, a, out ); else if( PEISCHAR( a ) ) { if( !heap_real_new( heap, PEGETCHAR( a ), out ) ) reduce_throw( rc ); } else if( PEISIMAGE( a ) ) callva( rc, out, "im_clip2i", PEGETII( a ) ); else action_uoperror( rc, compile, NULL, op, name, a ); break; case UN_CUINT: /* Convert to unsigned int. */ if( PEISREAL( a ) || PEISCOMPLEX( a ) ) action_set_range( rc, 0, UINT_MAX, a, out ); else if( PEISCHAR( a ) ) { if( !heap_real_new( heap, PEGETCHAR( a ), out ) ) reduce_throw( rc ); } else if( PEISIMAGE( a ) ) callva( rc, out, "im_clip2ui", PEGETII( a ) ); else action_uoperror( rc, compile, NULL, op, name, a ); break; case UN_CSSHORT: /* Convert to signed short. */ if( PEISREAL( a ) || PEISCOMPLEX( a ) ) action_set_range( rc, SHRT_MIN, SHRT_MAX, a, out ); else if( PEISCHAR( a ) ) { if( !heap_real_new( heap, PEGETCHAR( a ), out ) ) reduce_throw( rc ); } else if( PEISIMAGE( a ) ) callva( rc, out, "im_clip2s", PEGETII( a ) ); else action_uoperror( rc, compile, NULL, op, name, a ); break; case UN_CUSHORT: /* Convert to unsigned short. */ if( PEISREAL( a ) || PEISCOMPLEX( a ) ) action_set_range( rc, 0, USHRT_MAX, a, out ); else if( PEISCHAR( a ) ) { if( !heap_real_new( heap, PEGETCHAR( a ), out ) ) reduce_throw( rc ); } else if( PEISIMAGE( a ) ) callva( rc, out, "im_clip2us", PEGETII( a ) ); else action_uoperror( rc, compile, NULL, op, name, a ); break; case UN_CFLOAT: /* Convert to float ... just drop imag part. */ if( PEISCOMPLEX( a ) ) { if( !heap_real_new( heap, PEGETREALPART( a ), out ) ) reduce_throw( rc ); } else if( PEISREAL( a ) ) { PEPUTPE( out, a ); } else if( PEISCHAR( a ) ) { if( !heap_real_new( heap, PEGETCHAR( a ), out ) ) reduce_throw( rc ); } else if( PEISIMAGE( a ) ) callva( rc, out, "im_clip2f", PEGETII( a ) ); else action_uoperror( rc, compile, NULL, op, name, a ); break; case UN_CDOUBLE: /* Convert to double ... just drop imag part. */ if( PEISCOMPLEX( a ) ) { if( !heap_real_new( heap, PEGETREALPART( a ), out ) ) reduce_throw( rc ); } else if( PEISREAL( a ) ) { PEPUTPE( out, a ); } else if( PEISCHAR( a ) ) { if( !heap_real_new( heap, PEGETCHAR( a ), out ) ) reduce_throw( rc ); } else if( PEISIMAGE( a ) ) callva( rc, out, "im_clip2d", PEGETII( a ) ); else action_uoperror( rc, compile, NULL, op, name, a ); break; case UN_CDCOMPLEX: case UN_CCOMPLEX: /* Convert to complex ... set imag = 0. */ if( PEISREAL( a ) ) { /* Make base node. */ if( !heap_complex_element_new( heap, a, a, out ) ) reduce_throw( rc ); /* Install new imag part. */ PEPOINTRIGHT( PEGETVAL( out ), &rhs ); if( !heap_real_new( heap, 0, &rhs ) ) reduce_throw( rc ); } else if( PEISCOMPLEX( a ) ) { PEPUTPE( out, a ); } else if( PEISCHAR( a ) ) { /* Make base node. */ if( !heap_complex_element_new( heap, a, a, out ) ) reduce_throw( rc ); /* Install new real and imag parts. */ PEPOINTLEFT( PEGETVAL( out ), &rhs ); if( !heap_real_new( heap, PEGETCHAR( a ), &rhs ) ) reduce_throw( rc ); PEPOINTRIGHT( PEGETVAL( out ), &rhs ); if( !heap_real_new( heap, 0, &rhs ) ) reduce_throw( rc ); } else if( PEISIMAGE( a ) ) { if( op == UN_CCOMPLEX ) callva( rc, out, "im_clip2cm", PEGETII( a ) ); else callva( rc, out, "im_clip2dcm", PEGETII( a ) ); } else action_uoperror( rc, compile, NULL, op, name, a ); break; case UN_NONE: default: action_uoperror( rc, compile, _( "Unimplemented." ), op, name, a ); break; } } static void * action_proc_construct_sub( Reduce *rc, PElement *pe, Compile *compile, HeapNode **arg, PElement *out ) { if( !class_new( rc->heap, compile, arg, pe ) ) reduce_throw( rc ); PEPUTPE( out, pe ); return( NULL ); } /* Eval a constructor. Nasty: out can be RHS of arg[0], so we have to build * instance in a safe spot, then write back to out afterwards. */ void action_proc_construct( Reduce *rc, Compile *compile, HeapNode **arg, PElement *out ) { if( trace_flags & TRACE_CLASS_NEW ) { VipsBuf *buf = trace_push(); vips_buf_appendf( buf, "constructor \"%s\" ", IOBJECT( compile->sym )->name ); trace_args( arg, compile->nparam + compile->nsecret ); } if( reduce_safe_pointer( rc, (reduce_safe_pointer_fn) action_proc_construct_sub, compile, arg, out, NULL ) ) reduce_throw( rc ); /* Is it a class with a typecheck member? Return that instead. */ if( compile_lookup( compile, MEMBER_CHECK ) && class_get_member( out, MEMBER_CHECK, NULL, out ) ) { #ifdef DEBUG printf( "reduce: invoking arg checker\n" ); #endif } if( trace_flags & TRACE_CLASS_NEW ) { trace_result( TRACE_CLASS_NEW, out ); trace_pop(); } } static void * action_proc_class_binary_sub( Reduce *rc, PElement *pe, PElement *fn, const char *name, PElement *b, PElement *out ) { PElement rhs; PElement base; base = *pe; heap_appl_init( &base, fn ); if( !heap_appl_add( rc->heap, &base, &rhs ) || !heap_managedstring_new( rc->heap, name, &rhs ) || !heap_appl_add( rc->heap, &base, &rhs ) ) return( out ); PEPUTPE( &rhs, b ); PEPUTPE( out, pe ); return( NULL ); } /* Something like "class + 12" ... call (class.add 12) */ static void action_proc_class_binary( Reduce *rc, Compile *compile, int op, const char *name, PElement *a, PElement *b, PElement *out ) { TraceFlags flags = op >= 0 ? TRACE_OPERATOR : TRACE_BUILTIN; PElement fn; if( trace_flags & flags ) { VipsBuf *buf = trace_push(); vips_buf_appendf( buf, "%s\n", _( "invoking method:" ) ); vips_buf_appends( buf, " " ); trace_pelement( a ); vips_buf_appendf( buf, ".%s \"%s\" ", MEMBER_OO_BINARY, name ); trace_pelement( b ); vips_buf_appends( buf, "\n" ); trace_text( flags, "%s", vips_buf_all( buf ) ); trace_pop(); } /* Look up a.oo_binary and build (a.dispatch_binary "add" b) * application. */ if( !class_get_member( a, MEMBER_OO_BINARY, NULL, &fn ) ) action_boperror( rc, compile, error_get_sub(), op, name, a, b ); if( reduce_safe_pointer( rc, (reduce_safe_pointer_fn) action_proc_class_binary_sub, &fn, (void *) name, b, out ) ) action_boperror( rc, compile, error_get_sub(), op, name, a, b ); } /* Something like "12 + class" ... call (class.add' 12) */ static void action_proc_class_binary2( Reduce *rc, Compile *compile, int op, const char *name, PElement *a, PElement *b, PElement *out ) { TraceFlags flags = op >= 0 ? TRACE_OPERATOR : TRACE_BUILTIN; PElement fn; if( trace_flags & flags ) { VipsBuf *buf = trace_push(); vips_buf_appendf( buf, "%s\n", _( "invoking method:" ) ); vips_buf_appends( buf, " " ); trace_pelement( b ); vips_buf_appendf( buf, ".%s \"%s\" ", MEMBER_OO_BINARY2, name ); trace_pelement( a ); vips_buf_appends( buf, "\n" ); trace_text( flags, "%s", vips_buf_all( buf ) ); trace_pop(); } /* Look up b.dispatch_binary2 and build * (b.dispatch_binary2 "add" a) application. */ if( !class_get_member( b, MEMBER_OO_BINARY2, NULL, &fn ) ) action_boperror( rc, compile, error_get_sub(), op, name, a, b ); if( reduce_safe_pointer( rc, (reduce_safe_pointer_fn) action_proc_class_binary_sub, &fn, (void *) name, a, out ) ) action_boperror( rc, compile, error_get_sub(), op, name, a, b ); } static void action_landlor( Reduce *rc, Compile *compile, int op, const char *name, PElement *a, PElement *b, PElement *out ) { reduce_spine( rc, a ); if( PEISCOMB( a ) && PEGETCOMB( a ) == COMB_I ) /* The reduce_spine() did us recursively ... bounce back. */ return; if( trace_flags & TRACE_OPERATOR ) trace_push(); /* Examine the LHS and see if we can avoid RHS eval. */ if( PEISCLASS( a ) ) action_proc_class_binary( rc, compile, op, name, a, b, out ); else if( PEISBOOL( a ) ) { if( op == BI_LOR && PEGETBOOL( a ) ) { if( trace_flags & TRACE_OPERATOR ) trace_binop( compile, a, op, b ); PEPUTP( out, ELEMENT_BOOL, TRUE ); if( trace_flags & TRACE_OPERATOR ) trace_result( TRACE_OPERATOR, out ); } else if( op == BI_LAND && !PEGETBOOL( a ) ) { if( trace_flags & TRACE_OPERATOR ) trace_binop( compile, a, op, b ); PEPUTP( out, ELEMENT_BOOL, FALSE ); if( trace_flags & TRACE_OPERATOR ) trace_result( TRACE_OPERATOR, out ); } else { /* Need to look at RHS too. */ reduce_spine( rc, b ); if( PEISCOMB( b ) && PEGETCOMB( b ) != COMB_I ) { if( trace_flags & TRACE_OPERATOR ) trace_pop(); return; } if( PEISCLASS( b ) ) action_proc_class_binary2( rc, compile, op, name, a, b, out ); else if( PEISBOOL( b ) ) { if( trace_flags & TRACE_OPERATOR ) trace_binop( compile, a, op, b ); PEPUTP( out, ELEMENT_BOOL, PEGETBOOL( b ) ); if( trace_flags & TRACE_OPERATOR ) trace_result( TRACE_OPERATOR, out ); } else action_boperror( rc, compile, NULL, op, name, a, b ); } } else action_boperror( rc, compile, NULL, op, name, a, b ); if( trace_flags & TRACE_OPERATOR ) trace_pop(); } static void action_if( Reduce *rc, Compile *compile, int op, const char *name, PElement *a, PElement *b, PElement *out ) { reduce_spine( rc, a ); if( PEISCOMB( a ) && PEGETCOMB( a ) == COMB_I ) /* The reduce_spine() did us recursively ... bounce back. */ return; if( PEISCLASS( a ) ) action_proc_class_binary( rc, compile, op, name, a, b, out ); else { PElement t, e; /* a is condition, b should be [then-part, else-part] ... * look down b and find them. Block trace for this, not very * interesting. */ trace_block(); reduce_list_index( rc, b, 0, &t ); reduce_list_index( rc, b, 1, &e ); trace_unblock(); /* Can be BOOL or image. */ if( PEISBOOL( a ) ) { if( trace_flags & TRACE_OPERATOR ) { VipsBuf *buf = trace_push(); vips_buf_appendf( buf, "if " ); trace_pelement( a ); vips_buf_appendf( buf, " then " ); trace_pelement( &t ); vips_buf_appendf( buf, " else " ); trace_pelement( &e ); vips_buf_appendf( buf, " ->\n" ); } if( PEGETBOOL( a ) ) { PEPUTPE( out, &t ); } else { PEPUTPE( out, &e ); } if( trace_flags & TRACE_OPERATOR ) { trace_result( TRACE_OPERATOR, out ); trace_pop(); } } else if( PEISIMAGE( a ) ) { reduce_spine_strict( rc, &t ); reduce_spine_strict( rc, &e ); /* then/else parts must both be image. */ if( !PEISIMAGE( &t ) || !PEISIMAGE( &e ) ) action_boperror( rc, compile, NULL, op, name, a, b ); callva( rc, out, "im_ifthenelse", PEGETII( a ), PEGETII( &t ), PEGETII( &e ) ); } else action_boperror( rc, compile, NULL, op, name, a, b ); } } /* Do a binary operator. Result in arg[0]. */ void action_proc_bop( Reduce *rc, Compile *compile, BinOp bop, HeapNode **arg ) { PElement a, b, out; switch( bop ) { case BI_LAND: case BI_LOR: /* Special ninja magic :-( we need to handle reduce carefully * here. */ PEPOINTRIGHT( arg[0], &b ); PEPOINTRIGHT( arg[1], &a ); PEPOINTRIGHT( arg[0], &out ); action_landlor( rc, compile, bop, OPERATOR_NAME( bop ), &a, &b, &out ); /* Overwrite arg[0] with I node, in case this is a * shared node. */ PPUTLEFT( arg[0], ELEMENT_COMB, COMB_I ); break; case BI_IF: /* If is lazy-ish in it's 2nd argument too. */ PEPOINTRIGHT( arg[0], &b ); PEPOINTRIGHT( arg[1], &a ); PEPOINTRIGHT( arg[0], &out ); action_if( rc, compile, bop, OPERATOR_NAME( bop ), &a, &b, &out ); /* Overwrite arg[0] with I node, in case this is a * shared node. */ PPUTLEFT( arg[0], ELEMENT_COMB, COMB_I ); break; case BI_DOT: case BI_PEQ: case BI_PNOTEQ: /* Strict, not overrideable. */ action_dispatch( rc, compile, reduce_spine, bop, OPERATOR_NAME( bop ), FALSE, (ActionFn) action_proc_bop_strict, 2, arg, NULL ); break; default: /* Strict, overrideable. */ action_dispatch( rc, compile, reduce_spine, bop, OPERATOR_NAME( bop ), TRUE, (ActionFn) action_proc_bop_strict, 2, arg, NULL ); } } static void * action_proc_class_unary_sub( Reduce *rc, PElement *pe, PElement *fn, const char *name, PElement *out ) { PElement rhs; PElement base; base = *pe; heap_appl_init( &base, fn ); if( !heap_appl_add( rc->heap, &base, &rhs ) || !heap_managedstring_new( rc->heap, name, &rhs ) ) return( out ); PEPUTPE( out, pe ); return( NULL ); } static void action_proc_class_unary( Reduce *rc, Compile *compile, int op, const char *name, PElement *a, PElement *out ) { TraceFlags flags = op >= 0 ? TRACE_OPERATOR : TRACE_BUILTIN; PElement fn; if( trace_flags & flags ) { VipsBuf *buf = trace_push(); vips_buf_appendf( buf, "%s\n", _( "invoking method:" ) ); vips_buf_appends( buf, " " ); trace_pelement( a ); vips_buf_appendf( buf, ".%s \"%s\"\n", MEMBER_OO_UNARY, name ); trace_text( flags, "%s", vips_buf_all( buf ) ); trace_pop(); } /* Look up a.dispatch_unary and build * (a.oo_unary "minus") application. */ if( !class_get_member( a, MEMBER_OO_UNARY, NULL, &fn ) ) action_uoperror( rc, compile, error_get_sub(), op, name, a ); if( reduce_safe_pointer( rc, (reduce_safe_pointer_fn) action_proc_class_unary_sub, &fn, (void *) name, out, NULL ) ) action_uoperror( rc, compile, error_get_sub(), op, name, a ); } /* Run a function on the graph ... eval all the args, avoid eval if we reduce * ourselves as a side effect (happens on recursive calls). Result in RHS of * arg[0]. */ void action_dispatch( Reduce *rc, Compile *compile, ReduceFunction rfn, int op, const char *name, gboolean override, ActionFn afn, int nargs, HeapNode **arg, void *user ) { TraceFlags flags = op >= 0 ? TRACE_OPERATOR : TRACE_BUILTIN; PElement a, b; int i; /* Don't allow nargs == 0. We rely on having a bit of graph we can * replace with (I result) for caching. */ g_assert( nargs > 0 ); /* We need to have the */ g_assert( noperator_table == UN_LAST ); /* Reduce all the args. */ for( i = 0; i < nargs; i++ ) { PElement rhs; PEPOINTRIGHT( arg[i], &rhs ); rfn( rc, &rhs ); } /* We may have evaled ourselves already. */ PEPOINTLEFT( arg[0], &b ); if( PEISCOMB( &b ) && PEGETCOMB( &b ) == COMB_I ) return; PEPOINTRIGHT( arg[0], &b ); PEPOINTRIGHT( arg[1], &a ); if( trace_flags & flags ) { VipsBuf *buf = trace_push(); vips_buf_appendf( buf, "\"%s\" ", name ); trace_args( arg, nargs ); } if( override && nargs == 2 && PEISCLASS( &a ) ) action_proc_class_binary( rc, compile, op, name, &a, &b, &b ); else if( override && nargs == 2 && PEISCLASS( &b ) ) action_proc_class_binary2( rc, compile, op, name, &a, &b, &b ); else if( override && nargs == 1 && PEISCLASS( &b ) ) action_proc_class_unary( rc, compile, op, name, &b, &b ); else afn( rc, compile, op, name, arg, &b, user ); PPUTLEFT( arg[0], ELEMENT_COMB, COMB_I ); if( trace_flags & flags ) { trace_result( flags, &b ); trace_pop(); } } nip2-8.7.0/src/pane.h0000644000175000017500000000530413224651032011202 00000000000000/* a side panel that can slide in and out of view */ /* Copyright (C) 2007 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_PANE (pane_get_type()) #define PANE( obj ) (GTK_CHECK_CAST( (obj), TYPE_PANE, Pane )) #define PANE_CLASS( klass ) \ (GTK_CHECK_CLASS_CAST( (klass), TYPE_PANE, PaneClass )) #define IS_PANE( obj ) (GTK_CHECK_TYPE( (obj), TYPE_PANE )) #define IS_PANE_CLASS( klass ) \ (GTK_CHECK_CLASS_TYPE( (klass), TYPE_PANE )) /* Can hide on the left or the right hand side of a window. */ typedef enum { PANE_HIDE_LEFT, PANE_HIDE_RIGHT } PaneHandedness; typedef struct _Pane { GtkHPaned parent_object; PaneHandedness handedness; /* Hide on left or right */ /* The child pane we show on left or right. */ Panechild *panechild; /* Are we visible or not. */ gboolean open; /* The position of the divider. This changes as the pane is animated * open and closed and does not reflect the position the user has * selected by dragging. */ int position; /* The position the user wants the pane to sit at. */ int user_position; /* Animating towards this position. If close_on_end is true, close the * pane at the end of animation. */ int target_position; gboolean close_on_end; /* Set animation speed with this. */ int last_set_position; /* Timeout for animation. */ guint animate_timeout; } Pane; typedef struct _PaneClass { GtkHPanedClass parent_class; /* Either position or open have changed. */ void (*changed)( Pane * ); } PaneClass; GType pane_get_type( void ); Pane *pane_new( PaneHandedness handedness ); void pane_set_position( Pane *pane, int position ); void pane_set_user_position( Pane *pane, int user_position ); void pane_set_open( Pane *pane, gboolean open ); void pane_set_state( Pane *pane, gboolean open, int user_position ); void pane_set_child( Pane *pane, Panechild *panechild ); void pane_animate_closed( Pane *pane ); void pane_animate_open( Pane *pane ); nip2-8.7.0/src/plotpresent.h0000644000175000017500000000365613224651032012646 00000000000000/* a plot widget, plus some navigation stuff */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_PLOTPRESENT (plotpresent_get_type()) #define PLOTPRESENT( obj ) \ (GTK_CHECK_CAST( (obj), TYPE_PLOTPRESENT, Plotpresent )) #define PLOTPRESENT_CLASS( klass ) \ (GTK_CHECK_CLASS_CAST( (klass), TYPE_PLOTPRESENT, PlotpresentClass )) #define IS_PLOTPRESENT( obj ) (GTK_CHECK_TYPE( (obj), TYPE_PLOTPRESENT )) #define IS_PLOTPRESENT_CLASS( klass ) \ (GTK_CHECK_CLASS_TYPE( (klass), TYPE_PLOTPRESENT )) struct _Plotpresent { GtkBin parent_class; /* Context. */ Plotmodel *plotmodel; /* Keep model parts of widgets here */ /* Widgets. */ GtkWidget *canvas; #ifdef HAVE_LIBGOFFICE GogRenderer *grend; GogChart *gchart; GogGraph *ggraph; GogPlot *gplot; #endif /*HAVE_LIBGOFFICE*/ }; typedef struct _PlotpresentClass { GtkBinClass parent_class; /* My methods. */ /* A mouse movement within the plot area. xy are in axies coordinates. */ void (*mouse_move)( Plotpresent *, double, double ); } PlotpresentClass; GtkType plotpresent_get_type( void ); Plotpresent *plotpresent_new( Plotmodel *plotmodel ); nip2-8.7.0/src/itextview.c0000644000175000017500000001542613224651032012310 00000000000000/* a view of a text thingy */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #include "ip.h" static ViewClass *parent_class = NULL; static void itextview_refresh( vObject *vobject ) { iTextview *itextview = ITEXTVIEW( vobject ); iText *itext = ITEXT( VOBJECT( itextview )->iobject ); Row *row = HEAPMODEL( itext )->row; const char *display; #ifdef DEBUG printf( "itextview_refresh: " ); row_name_print( row ); printf( " (%p)\n", vobject ); #endif /*DEBUG*/ /* Only reset edit mode if the text hasn't been changed. We * don't want the user to lose work. */ if( !itextview->formula->changed ) switch( row->ws->mode ) { case WORKSPACE_MODE_REGULAR: formula_set_edit( itextview->formula, FALSE ); formula_set_sensitive( itextview->formula, TRUE ); break; case WORKSPACE_MODE_FORMULA: formula_set_edit( itextview->formula, TRUE ); formula_set_sensitive( itextview->formula, TRUE ); break; case WORKSPACE_MODE_NOEDIT: formula_set_edit( itextview->formula, FALSE ); formula_set_sensitive( itextview->formula, FALSE ); break; default: g_assert_not_reached(); } /* We display the formula if this is a class ... we assume the members * and/or the graphic will represent the value. */ if( row->is_class ) display = itext->formula; else display = vips_buf_all( &itext->value ); if( itextview->formula && itext->value.base ) formula_set_value_expr( itextview->formula, display, itext->formula ); VOBJECT_CLASS( parent_class )->refresh( vobject ); } static void itextview_link( View *view, Model *model, View *parent ) { iTextview *itextview = ITEXTVIEW( view ); iText *itext = ITEXT( model ); Row *row = HEAPMODEL( itext )->row; #ifdef DEBUG printf( "itextview_link: " ); row_name_print( row ); printf( "\n" ); #endif /*DEBUG*/ VIEW_CLASS( parent_class )->link( view, model, parent ); /* Edit mode defaults to edit mode for workspace. */ formula_set_edit( itextview->formula, row->ws->mode == WORKSPACE_MODE_FORMULA ); } /* Reset edit mode ... go back to whatever is set for this ws. */ static void itextview_reset( View *view ) { iTextview *itextview = ITEXTVIEW( view ); iText *itext = ITEXT( VOBJECT( itextview )->iobject ); Row *row = HEAPMODEL( itext )->row; #ifdef DEBUG printf( "itextview_reset: " ); row_name_print( row ); printf( "\n" ); #endif /*DEBUG*/ formula_set_edit( ITEXTVIEW( view )->formula, row->ws->mode == WORKSPACE_MODE_FORMULA ); VIEW_CLASS( parent_class )->reset( view ); } /* Re-read the text in a tally entry. */ static void * itextview_scan( View *view ) { iTextview *itextview = ITEXTVIEW( view ); iText *itext = ITEXT( VOBJECT( itextview )->iobject ); #ifdef DEBUG Row *row = HEAPMODEL( itext )->row; printf( "itextview_scan: " ); row_name_print( row ); printf( "\n" ); #endif /*DEBUG*/ if( formula_scan( itextview->formula ) && itext_set_formula( itext, itextview->formula->expr ) ) itext_set_edited( itext, TRUE ); return( VIEW_CLASS( parent_class )->scan( view ) ); } static void itextview_class_init( iTextviewClass *class ) { vObjectClass *vobject_class = (vObjectClass *) class; ViewClass *view_class = (ViewClass *) class; parent_class = g_type_class_peek_parent( class ); /* Create signals. */ /* Init methods. */ vobject_class->refresh = itextview_refresh; view_class->link = itextview_link; view_class->reset = itextview_reset; view_class->scan = itextview_scan; } void itextview_edit_cb( Formula *formula, iTextview *itextview ) { view_resettable_register( VIEW( itextview ) ); } void itextview_activate_cb( Formula *formula, iTextview *itextview ) { iText *itext = ITEXT( VOBJECT( itextview )->iobject ); Row *row = HEAPMODEL( itext )->row; /* Reset edits on this row and all children. Our (potentially) next * text will invlidate all of them. */ (void) icontainer_map_all( ICONTAINER( row ), (icontainer_map_fn) heapmodel_clear_edited, NULL ); /* Make sure we scan this text, even if it's not been edited. */ view_scannable_register( VIEW( itextview ) ); workspace_set_modified( row->ws, TRUE ); symbol_recalculate_all(); } static void itextview_enter_cb( Formula *formula, iTextview *itextview ) { iText *itext = ITEXT( VOBJECT( itextview )->iobject ); Row *row = HEAPMODEL( itext )->row; row_set_status( row ); row_show_dependents( row ); } static void itextview_leave_cb( Formula *formula, iTextview *itextview ) { iText *itext = ITEXT( VOBJECT( itextview )->iobject ); Row *row = HEAPMODEL( itext )->row; row_hide_dependents( row ); } static void itextview_init( iTextview *itextview ) { itextview->formula = formula_new(); gtk_signal_connect( GTK_OBJECT( itextview->formula ), "edit", GTK_SIGNAL_FUNC( itextview_edit_cb ), itextview ); gtk_signal_connect_object( GTK_OBJECT( itextview->formula ), "changed", GTK_SIGNAL_FUNC( view_changed_cb ), itextview ); gtk_signal_connect( GTK_OBJECT( itextview->formula ), "activate", GTK_SIGNAL_FUNC( itextview_activate_cb ), itextview ); gtk_signal_connect( GTK_OBJECT( itextview->formula ), "enter", GTK_SIGNAL_FUNC( itextview_enter_cb ), itextview ); gtk_signal_connect( GTK_OBJECT( itextview->formula ), "leave", GTK_SIGNAL_FUNC( itextview_leave_cb ), itextview ); gtk_box_pack_start( GTK_BOX( itextview ), GTK_WIDGET( itextview->formula ), TRUE, FALSE, 0 ); gtk_widget_show( GTK_WIDGET( itextview->formula ) ); } GtkType itextview_get_type( void ) { static GtkType itextview_type = 0; if( !itextview_type ) { static const GtkTypeInfo itextview_info = { "iTextview", sizeof( iTextview ), sizeof( iTextviewClass ), (GtkClassInitFunc) itextview_class_init, (GtkObjectInitFunc) itextview_init, /* reserved_1 */ NULL, /* reserved_2 */ NULL, (GtkClassInitFunc) NULL, }; itextview_type = gtk_type_unique( TYPE_VIEW, &itextview_info ); } return( itextview_type ); } View * itextview_new( void ) { iTextview *itextview = gtk_type_new( TYPE_ITEXTVIEW ); return( VIEW( itextview ) ); } nip2-8.7.0/src/pathnameview.h0000644000175000017500000000314213224651032012745 00000000000000/* a pathname view in a workspace */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_PATHNAMEVIEW (pathnameview_get_type()) #define PATHNAMEVIEW( obj ) \ (GTK_CHECK_CAST( (obj), TYPE_PATHNAMEVIEW, Pathnameview )) #define PATHNAMEVIEW_CLASS( klass ) \ (GTK_CHECK_CLASS_CAST( (klass), TYPE_PATHNAMEVIEW, PathnameviewClass )) #define IS_PATHNAMEVIEW( obj ) (GTK_CHECK_TYPE( (obj), TYPE_PATHNAMEVIEW )) #define IS_PATHNAMEVIEW_CLASS( klass ) \ (GTK_CHECK_CLASS_TYPE( (klass), TYPE_PATHNAMEVIEW )) typedef struct _Pathnameview { Graphicview parent_object; GtkWidget *label; GtkWidget *button; } Pathnameview; typedef struct _PathnameviewClass { GraphicviewClass parent_class; /* My methods. */ } PathnameviewClass; GtkType pathnameview_get_type( void ); View *pathnameview_new( void ); nip2-8.7.0/src/vipsobject.h0000644000175000017500000000213613224651032012427 00000000000000/* Links to VipsObject. */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ void vo_object_new( Reduce *rc, const char *name, PElement *required, PElement *optional, PElement *out ); void vo_call( Reduce *rc, const char *name, PElement *required, PElement *optional, PElement *out ); nip2-8.7.0/src/class.c0000644000175000017500000006761513224651032011374 00000000000000/* Class functions ... really part of heap.c, but split out here to make it * more manageable. */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #include "ip.h" /* #define DEBUG_MEMBER #define DEBUG_VERBOSE #define DEBUG #define DEBUG_BUILD */ static gboolean class_is_class( PElement *instance ) { if( !PEISCLASS( instance ) ) { char txt[50]; VipsBuf buf = VIPS_BUF_STATIC( txt ); if( !itext_value( reduce_context, &buf, instance ) ) return( FALSE ); error_top( _( "Bad argument." ) ); error_sub( _( "Object %s is not a class." ), vips_buf_all( &buf ) ); return( FALSE ); } return( TRUE ); } Compile * class_get_compile( PElement *instance ) { if( !class_is_class( instance ) ) return( NULL ); return( PEGETCLASSCOMPILE( instance ) ); } /* Look up "super" in a class ... try to do it quickly. */ gboolean class_get_super( PElement *instance, PElement *out ) { Compile *compile; if( !(compile = class_get_compile( instance )) ) return( FALSE ); g_assert( compile->super ); return( class_get_symbol( instance, compile->super, out ) ); } void * class_map( PElement *instance, class_map_fn fn, void *a, void *b ) { PElement member; HeapNode *p; if( !PEISCLASS( instance ) ) return( NULL ); /* Loop over the instance member list. */ PEGETCLASSMEMBER( &member, instance ); if( !PEISELIST( &member ) ) for( p = PEGETVAL( &member ); p; p = GETRIGHT( p ) ) { HeapNode *hn; PElement s, v; Symbol *sym; void *result; /* Get the sym/value pair, get the sym. */ hn = GETLEFT( p ); PEPOINTLEFT( hn, &s ); PEPOINTRIGHT( hn, &v ); sym = PEGETSYMREF( &s ); if( (result = fn( sym, &v, a, b )) ) return( result ); } return( NULL ); } /* Look up a member in a class instance by name. If lookup fails in this * instance, try the superclass. Don't search secrets. Point sym and value * at the symbol we found and its value. sym can be NULL for no result * required. */ gboolean class_get_member( PElement *instance, const char *name, Symbol **sym_out, PElement *out ) { PElement member; PElement super; HeapNode *p; #ifdef DEBUG_MEMBER printf( "class_get_member: looking up \"%s\" in class ", name ); pgraph( instance ); #endif /*DEBUG_MEMBER*/ if( !class_is_class( instance ) ) return( FALSE ); /* Search this instance member list. */ PEGETCLASSMEMBER( &member, instance ); if( !PEISELIST( &member ) ) for( p = PEGETVAL( &member ); p; p = GETRIGHT( p ) ) { HeapNode *hn; PElement s; Symbol *sym; /* Get the sym/value pair, get the sym. */ hn = GETLEFT( p ); PEPOINTLEFT( hn, &s ); /* Match? */ sym = PEGETSYMREF( &s ); if( strcmp( IOBJECT( sym )->name, name ) == 0 ) { /* Found! */ PEPOINTRIGHT( hn, out ); if( sym_out ) *sym_out = sym; #ifdef DEBUG_MEMBER printf( "class_get_member: found: " ); pgraph( out ); #endif /*DEBUG_MEMBER*/ return( TRUE ); } } /* Nope ... try the superclass. */ if( !class_get_super( instance, &super ) || !PEISELIST( &super ) ) { /* FIXME ... gcc 2.95.2 gets this wrong, tries to eliminate the tail recursion with -O2 and makes bad code ... guess how long that took to find ... put this back at some point return( class_get_member( &super, name, sym_out, value ) ); */ gboolean result = class_get_member( &super, name, sym_out, out ); return( result ); } error_top( _( "Member not found." ) ); error_sub( _( "Member \"%s\" not found in class \"%s\"." ), name, IOBJECT( PEGETCLASSCOMPILE( instance )->sym )->name ); return( FALSE ); } /* Look up a symbol in a class. Write to out, or FALSE for not found. Look up * by symbol pointer. Search secrets as well. Try the superclass if lookup * fails. */ gboolean class_get_symbol( PElement *instance, Symbol *sym, PElement *out ) { HeapNode *p; PElement secret; PElement super; #ifdef DEBUG_MEMBER printf( "class_get_symbol: looking up " ); symbol_name_print( sym ); printf( "in class " ); pgraph( instance ); #endif /*DEBUG_MEMBER*/ if( !class_is_class( instance ) ) return( FALSE ); PEGETCLASSSECRET( &secret, instance ); if( PEISNODE( &secret ) ) for( p = PEGETVAL( &secret ); p; p = GETRIGHT( p ) ) { PElement s; HeapNode *hn; /* Get the sym/value pair, get the sym. */ hn = GETLEFT( p ); PEPOINTLEFT( hn, &s ); /* Match? */ if( PEGETSYMREF( &s ) == sym ) { /* Found! */ PEPOINTRIGHT( hn, out ); #ifdef DEBUG_MEMBER printf( "class_get_symbol: found: " ); pgraph( out ); #endif /*DEBUG_MEMBER*/ return( TRUE ); } } /* Nope ... try the superclass. */ if( !class_get_super( instance, &super ) || !PEISELIST( &super ) ) { /* FIXME ... gcc 2.95.2 gets this wrong, tries to eliminate the tail recursion with -O2 and makes bad code ... guess how long that took to find ... put this back at some point return( class_get_member( &super, name, out ) ); */ gboolean result = class_get_symbol( &super, sym, out ); return( result ); } return( FALSE ); } /* Search back up the inheritance tree for an exact instance of this * class. */ gboolean class_get_exact( PElement *instance, const char *name, PElement *out ) { PElement pe; pe = *instance; while( !reduce_is_instanceof_exact( reduce_context, name, &pe ) ) { if( !class_get_super( &pe, &pe ) || PEISELIST( &pe ) ) return( FALSE ); } *out = pe; return( TRUE ); } /* Stuff we need for class build. */ typedef struct { Heap *heap; /* Heap to build on */ Symbol *sym; /* Sym we are local to */ PElement *arg; /* Args to constructor */ PElement *this; /* Base of instance we are building */ int i; /* Index in arg list */ Compile *compile; /* Compile for our class */ } ClassBuildInfo; /* Member sym of class pbi->sym needs secret as an argument ... add it! */ static gboolean class_member_secret( ClassBuildInfo *pbi, Symbol *sym, GSList *secret, PElement *out ) { Symbol *ssym; Heap *heap = pbi->heap; HeapNode *apl; if( !secret ) return( TRUE ); ssym = SYMBOL( secret->data ); /* Make function application for this member. */ if( NEWNODE( heap, apl ) ) return( FALSE ); apl->type = TAG_APPL; PEPUTLEFT( apl, out ); /* Is the secret "this"? Easy. */ if( ssym == pbi->sym->expr->compile->this ) { PEPUTRIGHT( apl, pbi->this ); } else { /* Look up ssym in pbi->sym's secrets ... should be there * somewhere. Use it's index to find the pbi->arg[] we need. */ int pos = g_slist_index( pbi->sym->expr->compile->secret, ssym ); /* FIXME ... may not be if we've regenerated one of these * stupid things :-( change this so we always go through * 'this'. */ if( pos < 0 || pos >= pbi->sym->expr->compile->nsecret ) { error_top( _( "No such secret." ) ); error_sub( _( "Editing local classes which reference " "non-local objects is a bit broken at the " "moment :-(" ) ); return( FALSE ); } PEPUTRIGHT( apl, &pbi->arg[pbi->sym->expr->compile->nsecret - pos - 1] ); } PEPUTP( out, ELEMENT_NODE, apl ); #ifdef DEBUG_VERBOSE { PElement p1; char txt[1024]; VipsBuf buf = VIPS_BUF_STATIC( txt ); PEPOINTRIGHT( apl, &p1 ); graph_pelement( pbi->heap, &buf, &p1, TRUE ); printf( "class_member_secret: secret arg " ); symbol_name_print( ssym ); printf( "to member " ); symbol_name_print( sym ); printf( "= %s\n", vips_buf_all( &buf ) ); } #endif /*DEBUG_VERBOSE*/ return( class_member_secret( pbi, sym, secret->next, out ) ); } /* Add a member to a class. */ static void * add_class_member( Symbol *sym, ClassBuildInfo *pbi, PElement *out ) { Heap *heap = pbi->heap; HeapNode *base, *sv; PElement v; /* Is this something that should be part of a class. */ if( sym->type != SYM_VALUE ) return( NULL ); /* Make new class-local-list element for this local. */ if( NEWNODE( heap, base ) ) return( sym ); base->type = TAG_CONS; PPUTLEFT( base, ELEMENT_ELIST, NULL ); PEPUTRIGHT( base, out ); PEPUTP( out, ELEMENT_NODE, base ); /* Make sym/value pair for this local. */ if( NEWNODE( heap, sv ) ) return( sym ); sv->type = TAG_CONS; PPUT( sv, ELEMENT_SYMREF, sym, ELEMENT_SYMBOL, sym ); PPUTLEFT( base, ELEMENT_NODE, sv ); /* Build value ... apply args to the symbol. */ PEPOINTRIGHT( sv, &v ); if( !class_member_secret( pbi, sym, sym->expr->compile->secret, &v ) ) return( sym ); #ifdef DEBUG_VERBOSE { char txt[1024]; VipsBuf buf = VIPS_BUF_STATIC( txt ); graph_pelement( heap, &buf, &v, TRUE ); printf( "add_class_member: member \"%s\" of class \"%s\" = %s\n", IOBJECT( sym )->name, IOBJECT( pbi->sym )->name, vips_buf_all( &buf ) ); } #endif /*DEBUG_VERBOSE*/ return( NULL ); } /* Add a symbol/value pair to a class. */ static gboolean add_class_svpair( ClassBuildInfo *pbi, Symbol *sym, PElement *val, PElement *out ) { Heap *heap = pbi->heap; HeapNode *base, *sv; #ifdef DEBUG_VERBOSE { char txt[1024]; VipsBuf buf = VIPS_BUF_STATIC( txt ); graph_pelement( heap, &buf, val, TRUE ); printf( "add_class_svpair: adding parameter \"%s\" to class " "\"%s\" = %s\n", IOBJECT( sym )->name, IOBJECT( pbi->sym )->name, vips_buf_all( &buf ) ); } #endif /*DEBUG_VERBOSE*/ /* Make new class-local-list element for this parameter. */ if( NEWNODE( heap, base ) ) return( FALSE ); base->type = TAG_CONS; PPUTLEFT( base, ELEMENT_ELIST, NULL ); PEPUTRIGHT( base, out ); PEPUTP( out, ELEMENT_NODE, base ); /* Make sym/value pair for this parameter. */ if( NEWNODE( heap, sv ) ) return( FALSE ); sv->type = TAG_CONS; PPUTLEFT( sv, ELEMENT_SYMREF, sym ) PEPUTRIGHT( sv, val ); PPUTLEFT( base, ELEMENT_NODE, sv ); return( TRUE ); } /* Add a parameter (secret or real) to a class. */ static void * add_class_parameter( Symbol *sym, ClassBuildInfo *pbi, PElement *out ) { /* Add this symbol/value pair. */ if( !add_class_svpair( pbi, sym, &pbi->arg[pbi->i], out ) ) return( sym ); /* Move arg index on. */ pbi->i += 1; return( NULL ); } /* Add the name member ... build the name string carefully. */ static void * class_new_single_name( Heap *heap, PElement *pe, ClassBuildInfo *pbi, PElement *instance ) { Symbol *snm = compile_lookup( pbi->compile, MEMBER_NAME ); char txt[256]; VipsBuf buf = VIPS_BUF_STATIC( txt ); /* Make class name string. */ symbol_qualified_name( pbi->sym, &buf ); PEPUTP( pe, ELEMENT_ELIST, NULL ); if( !heap_managedstring_new( heap, vips_buf_all( &buf ), pe ) ) return( heap ); /* Add as a member. */ if( !add_class_svpair( pbi, snm, pe, instance ) ) return( heap ); return( NULL ); } /* Make a single level class instance ... fn below then loops over a class * hierarchy with this. */ static gboolean class_new_single( Heap *heap, Compile *compile, PElement *arg, PElement *this, PElement *out ) { Symbol *sym = compile->sym; Symbol *sths = compile->this; HeapNode *base, *sm; PElement p1; ClassBuildInfo pbi; #ifdef DEBUG { int i; printf( "class_new_single: starting for " ); symbol_name_print( sym ); printf( "%d secrets, %d params\n", compile->nsecret, compile->nparam ); for( i = 0; i < compile->nsecret; i++ ) { char txt[256]; VipsBuf buf = VIPS_BUF_STATIC( txt ); graph_pelement( heap, &buf, &arg[i], TRUE ); printf( "\tsecret %2d = %s\n", i, vips_buf_all( &buf ) ); } for( i = 0; i < compile->nparam; i++ ) { char txt[256]; VipsBuf buf = VIPS_BUF_STATIC( txt ); graph_pelement( heap, &buf, &arg[i + compile->nsecret], TRUE ); printf( "\targ %2d = %s\n", i, vips_buf_all( &buf ) ); } } #endif /*DEBUG*/ /* Make class base. */ if( NEWNODE( heap, base ) ) return( FALSE ); base->type = TAG_CLASS; PPUT( base, ELEMENT_COMPILEREF, compile, ELEMENT_ELIST, NULL ); PEPUTP( out, ELEMENT_NODE, base ); /* Make node for holding secrets and members. */ if( NEWNODE( heap, sm ) ) return( FALSE ); sm->type = TAG_CONS; PPUT( sm, ELEMENT_ELIST, NULL, ELEMENT_ELIST, NULL ); PPUTRIGHT( base, ELEMENT_NODE, sm ); /* Build list of members. */ pbi.heap = heap; pbi.sym = sym; pbi.arg = arg; pbi.this = this; pbi.compile = compile; PEPOINTRIGHT( sm, &p1 ); if( icontainer_map_rev( ICONTAINER( compile ), (icontainer_map_fn) add_class_member, &pbi, &p1 ) ) return( FALSE ); /* Add name member. */ if( heap_safe_pointer( heap, (heap_safe_pointer_fn) class_new_single_name, &pbi, &p1, NULL, NULL ) ) return( FALSE ); /* Add this member. */ if( !add_class_svpair( &pbi, sths, this, &p1 ) ) return( FALSE ); /* Add class parameters to member list. */ pbi.i = 0; if( slist_map2_rev( compile->param, (SListMap2Fn) add_class_parameter, &pbi, &p1 ) ) return( FALSE ); /* Now ... secret list starts off pointing to head of member list. */ PEPUTLEFT( sm, &p1 ); /* Add all secret parameters to secret list. */ PEPOINTLEFT( sm, &p1 ); if( slist_map2_rev( compile->secret, (SListMap2Fn) add_class_parameter, &pbi, &p1 ) ) return( FALSE ); #ifdef DEBUG { char txt[256]; VipsBuf buf = VIPS_BUF_STATIC( txt ); graph_pelement( heap, &buf, out, TRUE ); printf( "class_new_single: built instance of " ); symbol_name_print( sym ); printf( ":\n%s\n", vips_buf_all( &buf ) ); } #endif /*DEBUG*/ return( TRUE ); } /* Look at a scrap of graph and try to find a constructor it might be using. * This will only work for really basic functions :-( but it's enough to allow * us to pass extra secrets through the superclass. Used by (eg.) Colour when * it overrides Value and adds the colourspace arg. */ static Compile * class_guess_constructor( PElement *fn ) { if( PEISCONSTRUCTOR( fn ) ) return( PEGETCOMPILE( fn ) ); else if( PEISNODE( fn ) ) { HeapNode *hn = PEGETVAL( fn ); if( hn->type == TAG_APPL ) { PElement left; PEPOINTLEFT( hn, &left ); return( class_guess_constructor( &left ) ); } } return( NULL ); } /* Look at arg0 and try to extract the arguments (all the RHS of the @ nodes). * Return the number of args we found, or -1 if we find crazy stuff. */ static int class_guess_args( PElement arg[], PElement *fn ) { if( PEISCONSTRUCTOR( fn ) ) return( 0 ); else if( PEISNODE( fn ) ) { PElement left; int i; PEPOINTLEFT( PEGETVAL( fn ), &left ); if( (i = class_guess_args( arg, &left )) == -1 ) return( -1 ); if( i >= MAX_SYSTEM ) { error_top( _( "Too many arguments." ) ); error_sub( _( "You can't have more than %d " "arguments to a superclass constructor." ), MAX_SYSTEM ); return( -1 ); } PEPOINTRIGHT( PEGETVAL( fn ), &arg[i] ); return( i + 1 ); } else return( -1 ); } static void * class_new_super_sub( Heap *heap, PElement *p1, Compile *compile, PElement *arg, PElement *this, PElement *super ) { /* Build the superclass ... we overwrite the super * list with the constructed class, so make a copy of * the pointer to stop it being GCed. */ PEPUTPE( p1, super ); if( !class_new_single( heap, compile, arg, this, super ) ) return( heap ); return( NULL ); } /* Clone a class instance. Copy pointers to the the args, secrets and super; * rebuild with the specified "this". Instance and out can be equal. */ static gboolean class_clone_super( Heap *heap, Compile *compile, PElement *instance, PElement *this, PElement *out ) { PElement arg[MAX_SYSTEM]; const int nargs = compile->nsecret + compile->nparam; PElement secret; int i; g_assert( nargs <= MAX_SYSTEM ); #ifdef DEBUG_VERBOSE { char txt[MAX_STRSIZE]; VipsBuf buf = VIPS_BUF_STATIC( txt ); graph_pelement( heap, &buf, instance, TRUE ); printf( "class_new_clone: about to clone \"%s\": %s\n", IOBJECT( compile->sym )->name, vips_buf_all( &buf ) ); } #endif /*DEBUG_VERBOSE*/ /* Pull out values of secrets and class args into arg[]. */ PEGETCLASSSECRET( &secret, instance ); for( i = 0; i < nargs; i++ ) { HeapNode *hn = PEGETVAL( &secret ); HeapNode *sv = GETLEFT( hn ); int index = nargs - i - 1; PEPOINTRIGHT( sv, &arg[index] ); PEPOINTRIGHT( hn, &secret ); } /* Build class again. */ return( class_new_single( heap, compile, arg, this, out ) ); } static void * class_clone_super_sub( Heap *heap, PElement *p1, Compile *compile, PElement *instance, PElement *this, PElement *out ) { /* instance and out can point to the same node, so save a pointer to * instance to stop it being GCed. */ PEPUTPE( p1, instance ); if( !class_clone_super( heap, compile, instance, this, out ) ) return( heap ); return( NULL ); } /* Does this class have a "super"? Build it and recurse. */ gboolean class_new_super( Heap *heap, Compile *compile, PElement *this, PElement *instance ) { PElement super; if( compile->has_super && class_get_super( instance, &super ) ) { Compile *super_compile; int len, fn_len; PElement arg0; /* It must be a list whose first element is the superclass * constructor, or a partially parameterised constructor, or * the superclass itself (if it has already * been constructed, or has no args). Other elements in the * list are the remaining args. * * We keep the list form, since we want to not build the * superclass until now if we can help it ... otherwise we * have to construct once, then construct again when we clone. */ if( (len = heap_list_length( &super )) < 1 || !heap_list_index( &super, 0, &arg0 ) || !heap_reduce_strict( &arg0 ) ) return( FALSE ); if( (super_compile = class_guess_constructor( &arg0 )) ) { PElement fn_arg[MAX_SYSTEM]; PElement arg[MAX_SYSTEM]; int i; /* How many function args are there? */ if( (fn_len = class_guess_args( fn_arg, &arg0 )) < 0 ) return( FALSE ); /* Check total arg count. */ if( super_compile->nsecret != 0 ) { char txt[1024]; VipsBuf buf = VIPS_BUF_STATIC( txt ); slist_map2( super_compile->secret, (SListMap2Fn) symbol_name_error, &buf, NULL ); error_top( _( "Bad superclass." ) ); error_sub( _( "Superclass constructor \"%s\" " "refers to non-local symbols %s" ), symbol_name( super_compile->sym ), vips_buf_all( &buf ) ); return( FALSE ); } if( len - 1 + fn_len != super_compile->nparam ) { error_top( _( "Wrong number of arguments." ) ); error_sub( _( "Superclass constructor \"%s\" " "expects %d arguments, not %d." ), symbol_name( super_compile->sym ), super_compile->nparam, len - 1 + fn_len ); return( FALSE ); } /* Grab the explicit args from the super list. */ for( i = 0; i < len - 1; i++ ) { if( !heap_list_index( &super, len - 1 - i, &arg[i] ) ) return( FALSE ); } /* Append the function args, but reverse them as we * go so we get most-nested arg last. */ for( i = 0; i < fn_len; i++ ) arg[i + len - 1] = fn_arg[fn_len - 1 - i]; /* Build the superclass ... we overwrite the super * list with the constructed class, so make a copy of * the pointer to stop it being GCed. */ if( heap_safe_pointer( heap, (heap_safe_pointer_fn) class_new_super_sub, super_compile, arg, this, &super ) ) return( FALSE ); } else if( PEISCLASS( &arg0 ) ) { /* Super is a constructed class ... clone it, but with * our "this" in there. Slow, but useful. */ super_compile = PEGETCLASSCOMPILE( &arg0 ); if( heap_safe_pointer( heap, (heap_safe_pointer_fn) class_clone_super_sub, super_compile, &arg0, this, &super ) ) return( FALSE ); } else { char txt1[300]; VipsBuf buf1 = VIPS_BUF_STATIC( txt1 ); char txt2[300]; VipsBuf buf2 = VIPS_BUF_STATIC( txt2 ); error_top( _( "Bad superclass." ) ); itext_value( reduce_context, &buf1, &arg0 ); vips_buf_appendf( &buf2, _( "First element in superclass of \"%s\" " "must be class or constructor." ), symbol_name( compile->sym ) ); vips_buf_appendf( &buf2, "\n" ); vips_buf_appendf( &buf2, _( "You passed:" ) ); error_sub( "%s\n %s", vips_buf_all( &buf2 ), vips_buf_all( &buf1 ) ); return( FALSE ); } /* And recursively build any superclasses. */ if( !class_new_super( heap, super_compile, this, &super ) ) return( FALSE ); } return( TRUE ); } /* Make a class instance. */ gboolean class_new( Heap *heap, Compile *compile, HeapNode **arg, PElement *out ) { int i; PElement pe_arg[MAX_SYSTEM]; /* Make a set of arg pointers. */ if( compile->nparam + compile->nsecret >= MAX_SYSTEM ) { error_top( _( "Too many arguments." ) ); error_sub( _( "Too many arguments to class constructor \"%s\". " "No more than %d arguments are supported." ), symbol_name( compile->sym ), MAX_SYSTEM ); return( FALSE ); } for( i = 0; i < compile->nparam + compile->nsecret; i++ ) { PEPOINTRIGHT( arg[i], &pe_arg[i] ); } /* Build the base instance. */ if( !class_new_single( heap, compile, pe_arg, out, out ) ) return( FALSE ); /* And recursively build any superclasses. */ if( !class_new_super( heap, compile, out, out ) ) return( FALSE ); #ifdef DEBUG_BUILD { char txt[MAX_STRSIZE]; VipsBuf buf = VIPS_BUF_STATIC( txt ); graph_pelement( heap, &buf, out, TRUE ); printf( "class_new: built instance of \"%s\": %s\n", IOBJECT( compile->sym )->name, vips_buf_all( &buf ) ); } #endif /*DEBUG_BUILD*/ return( TRUE ); } /* Clone a class instance. Copy pointers to the the args, secrets and super; * regenerate all the members. instance and out can be equal. */ gboolean class_clone_args( Heap *heap, PElement *instance, PElement *out ) { HeapNode *arg[MAX_SYSTEM]; Compile *compile = PEGETCLASSCOMPILE( instance ); const int nargs = compile->nsecret + compile->nparam; PElement secret; int i; g_assert( nargs <= MAX_SYSTEM ); #ifdef DEBUG_VERBOSE { char txt[MAX_STRSIZE]; VipsBuf buf = VIPS_BUF_STATIC( txt ); graph_pelement( heap, &buf, instance, TRUE ); printf( "class_clone_args: about to clone \"%s\": %s\n", IOBJECT( compile->sym )->name, vips_buf_all( &buf ) ); } #endif /*DEBUG_VERBOSE*/ /* Pull out values of secrets and class args into RHS of arg[]. */ PEGETCLASSSECRET( &secret, instance ); for( i = 0; i < nargs; i++ ) { HeapNode *hn = PEGETVAL( &secret ); HeapNode *sv = GETLEFT( hn ); int index = nargs - i - 1; arg[index] = sv; PEPOINTRIGHT( hn, &secret ); } /* Build class again. */ return( class_new( heap, compile, &arg[0], out ) ); } /* Build a class instance picking parameters from C args ... handy for * making a new toggle instance on a click, for example. */ gboolean class_newv( Heap *heap, const char *name, PElement *out, ... ) { va_list ap; Symbol *sym; Compile *compile; HeapNode args[MAX_SYSTEM]; HeapNode *pargs[MAX_SYSTEM]; int i; if( !(sym = compile_lookup( symbol_root->expr->compile, name )) || !is_value( sym ) || !is_class( sym->expr->compile ) ) { error_top( _( "Class not found." ) ); error_sub( _( "Class \"%s\" not found." ), name ); return( FALSE ); } compile = sym->expr->compile; if( compile->nparam >= MAX_SYSTEM ) { error_top( _( "Too many arguments." ) ); error_sub( _( "Too many arguments to class constructor \"%s\". " "No more than %d arguments are supported." ), symbol_name( compile->sym ), MAX_SYSTEM ); return( FALSE ); } va_start( ap, out ); for( i = 0; i < compile->nparam; i++ ) { PElement *arg = va_arg( ap, PElement * ); PElement rhs; pargs[i] = &args[i]; PEPOINTRIGHT( pargs[i], &rhs ); PEPUTPE( &rhs, arg ); } va_end( ap ); return( class_new( heap, compile, &pargs[0], out ) ); } static void class_typecheck_error( PElement *instance, const char *name, const char *type ) { char txt[1024]; VipsBuf buf = VIPS_BUF_STATIC( txt ); PElement val; vips_buf_appendf( &buf, _( "Member \"%s\" of class \"%s\" " "should be of type \"%s\", instead it's:" ), name, IOBJECT( PEGETCLASSCOMPILE( instance )->sym )->name, type ); vips_buf_appends( &buf, "\n " ); if( class_get_member( instance, name, NULL, &val ) && !itext_value( reduce_context, &buf, &val ) ) return; error_top( _( "Bad argument." ) ); error_sub( "%s", vips_buf_all( &buf ) ); } /* A function that gets a type from a class. */ typedef gboolean (*ClassGetFn)( PElement *, void * ); static gboolean class_get_member_check( PElement *instance, const char *name, const char *type, ClassGetFn fn, void *a ) { PElement val; if( !class_get_member( instance, name, NULL, &val ) ) return( FALSE ); if( !fn( &val, a ) ) { class_typecheck_error( instance, name, type ); return( FALSE ); } return( TRUE ); } gboolean class_get_member_bool( PElement *instance, const char *name, gboolean *out ) { return( class_get_member_check( instance, name, "bool", (ClassGetFn) heap_get_bool, out ) ); } gboolean class_get_member_real( PElement *instance, const char *name, double *out ) { return( class_get_member_check( instance, name, "real", (ClassGetFn) heap_get_real, out ) ); } gboolean class_get_member_int( PElement *instance, const char *name, int *out ) { double d; if( !class_get_member_check( instance, name, "real", (ClassGetFn) heap_get_real, &d ) ) return( FALSE ); *out = IM_RINT( d ); return( TRUE ); } gboolean class_get_member_class( PElement *instance, const char *name, const char *type, PElement *out ) { gboolean result; if( !class_get_member_check( instance, name, type, (ClassGetFn) heap_get_class, out ) ) return( FALSE ); if( !heap_is_instanceof( type, out, &result ) ) return( FALSE ); if( !result ) { class_typecheck_error( instance, name, type ); return( FALSE ); } return( TRUE ); } gboolean class_get_member_image( PElement *instance, const char *name, Imageinfo **out ) { return( class_get_member_check( instance, name, "image", (ClassGetFn) heap_get_image, out ) ); } gboolean class_get_member_lstring( PElement *instance, const char *name, GSList **labels ) { return( class_get_member_check( instance, name, "finite [[char]]", (ClassGetFn) heap_get_lstring, labels ) ); } gboolean class_get_member_string( PElement *instance, const char *name, char *buf, int sz ) { PElement val; if( !class_get_member( instance, name, NULL, &val ) ) return( FALSE ); if( !heap_get_string( &val, buf, sz ) ) { class_typecheck_error( instance, name, "finite [char]" ); return( FALSE ); } return( TRUE ); } gboolean class_get_member_instance( PElement *instance, const char *name, const char *klass, PElement *out ) { gboolean result; return( class_get_member( instance, name, NULL, out ) && heap_is_instanceof( klass, out, &result ) && result ); } gboolean class_get_member_matrix_size( PElement *instance, const char *name, int *xsize, int *ysize ) { PElement val; if( !class_get_member( instance, name, NULL, &val ) ) return( FALSE ); if( !heap_get_matrix_size( &val, xsize, ysize ) ) { class_typecheck_error( instance, name, "finite rectangular [[real]]" ); return( FALSE ); } return( TRUE ); } gboolean class_get_member_matrix( PElement *instance, const char *name, double *buf, int n, int *xsize, int *ysize ) { PElement val; if( !class_get_member( instance, name, NULL, &val ) ) return( FALSE ); if( !heap_get_matrix( &val, buf, n, xsize, ysize ) ) { class_typecheck_error( instance, name, "finite rectangular [[real]]" ); return( FALSE ); } return( TRUE ); } gboolean class_get_member_realvec( PElement *instance, const char *name, double *buf, int n, int *length ) { PElement val; int l; if( !class_get_member( instance, name, NULL, &val ) ) return( FALSE ); if( (l = heap_get_realvec( &val, buf, n )) < 0 ) { class_typecheck_error( instance, name, "finite [real]" ); return( FALSE ); } *length = l; return( TRUE ); } nip2-8.7.0/src/toggleview.h0000644000175000017500000000310613224651032012431 00000000000000/* a toggleview button in a workspace */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_TOGGLEVIEW (toggleview_get_type()) #define TOGGLEVIEW( obj ) (GTK_CHECK_CAST( (obj), TYPE_TOGGLEVIEW, Toggleview )) #define TOGGLEVIEW_CLASS( klass ) \ (GTK_CHECK_CLASS_CAST( (klass), TYPE_TOGGLEVIEW, ToggleviewClass )) #define IS_TOGGLEVIEW( obj ) (GTK_CHECK_TYPE( (obj), TYPE_TOGGLEVIEW )) #define IS_TOGGLEVIEW_CLASS( klass ) \ (GTK_CHECK_CLASS_TYPE( (klass), TYPE_TOGGLEVIEW )) typedef struct _Toggleview { Graphicview parent_object; /* My instance vars. */ GtkWidget *toggle; } Toggleview; typedef struct _ToggleviewClass { GraphicviewClass parent_class; /* My methods. */ } ToggleviewClass; GtkType toggleview_get_type( void ); View *toggleview_new( void ); nip2-8.7.0/src/expression.h0000644000175000017500000000324713224651032012462 00000000000000/* an editable expression in a workspace */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_EXPRESSION (expression_get_type()) #define EXPRESSION( obj ) (GTK_CHECK_CAST( (obj), TYPE_EXPRESSION, Expression )) #define EXPRESSION_CLASS( klass ) \ (GTK_CHECK_CLASS_CAST( (klass), TYPE_EXPRESSION, ExpressionClass )) #define IS_EXPRESSION( obj ) (GTK_CHECK_TYPE( (obj), TYPE_EXPRESSION )) #define IS_EXPRESSION_CLASS( klass ) \ (GTK_CHECK_CLASS_TYPE( (klass), TYPE_EXPRESSION )) struct _Expression { Classmodel parent_class; /* We don't have a model for the expression: instead we just grab the * value/formula from our MEMBER_VALUE itext. Much simpler. */ }; typedef struct _ExpressionClass { ClassmodelClass parent_class; /* My methods. */ } ExpressionClass; GType expression_get_type( void ); iText *expression_get_itext( Expression *expression ); nip2-8.7.0/src/path.c0000644000175000017500000003506213224651032011212 00000000000000/* Search paths for files. */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* just load .defs/.wses from "." #define DEBUG_LOCAL */ /* show path searches #define DEBUG_SEARCH */ /* show path rewrites #define DEBUG_REWRITE */ #include "ip.h" /* Default search paths if prefs fail. */ GSList *path_start_default = NULL; GSList *path_search_default = NULL; const char *path_tmp_default = NULL; /* We rewrite paths to try to handle files referenced in workspaces in * directories that move. * * For example, suppose we have workspace.ws in /some/directory which loads * image.v in that directory. The workspace will include a line like * (Image_file "/some/directory/image"). Now if directory is moved to * /other/directory and workspace.ws reloaded, we want to rewrite the string * "/some/directory/image.v" to "/other/directory/image.v". * * Also consider picking ICC profiles in export/import: we want to avoid * putting the path into the ws file, we need to go back to "$VIPSHOME" again. * * Rewrite rules can be "locked". For example, we don't want the rewrite from * "/home/john" to "$HOME" to ever be removed. */ typedef struct _Rewrite { char *old; char *new; gboolean lock; } Rewrite; static GSList *rewrite_list = NULL; static void path_rewrite_free( Rewrite *rewrite ) { rewrite_list = g_slist_remove( rewrite_list, rewrite ); IM_FREE( rewrite->old ); IM_FREE( rewrite->new ); IM_FREE( rewrite ); } void path_rewrite_free_all( void ) { while( rewrite_list ) { Rewrite *rewrite = (Rewrite *) rewrite_list->data; IM_FREEF( path_rewrite_free, rewrite ); } } static Rewrite * path_rewrite_new( const char *old, const char *new, gboolean lock ) { Rewrite *rewrite; rewrite = g_new( Rewrite, 1 ); rewrite->old = g_strdup( old ); rewrite->new = g_strdup( new ); rewrite->lock = lock; rewrite_list = g_slist_prepend( rewrite_list, rewrite ); return( rewrite ); } static gint path_rewrite_sort_fn( Rewrite *a, Rewrite *b ) { return( strlen( b->old ) - strlen( a->old ) ); } static Rewrite * path_rewrite_lookup( const char *old ) { GSList *p; Rewrite *rewrite; for( p = rewrite_list; p; p = p->next ) { rewrite = (Rewrite *) p->data; if( strcmp( old, rewrite->old ) == 0 ) return( rewrite ); } return( NULL ); } /* Add a new rewrite pair to the rewrite list. @new can be NULL, meaning * remove a rewrite rule. */ void path_rewrite_add( const char *old, const char *new, gboolean lock ) { char old_buf[FILENAME_MAX + 1]; char new_buf[FILENAME_MAX + 1]; Rewrite *rewrite; #ifdef DEBUG_REWRITE printf( "path_rewrite_add: old = %s, new = %s, lock = %d\n", old, new, lock ); #endif /*DEBUG_REWRITE*/ g_return_if_fail( old ); /* We want the old path in long form, with a trailing '/'. The * trailing '/' will stop us rewriting filenames. * * If we keep all @old paths in long form we can avoid rewrite loops. */ im_strncpy( old_buf, old, FILENAME_MAX ); strcat( old_buf, G_DIR_SEPARATOR_S ); path_expand( old_buf ); old = old_buf; if( new ) { /* We must keep the new path in short (unexpanded) form, * obviously. */ im_strncpy( new_buf, new, FILENAME_MAX ); strcat( new_buf, G_DIR_SEPARATOR_S ); new = new_buf; } /* If old is a prefix of new we will get endless expansion. */ if( new && is_prefix( old, new ) ) return; if( (rewrite = path_rewrite_lookup( old )) ) { if( !rewrite->lock && (!new || strcmp( old, new ) == 0) ) { #ifdef DEBUG_REWRITE printf( "path_rewrite_add: removing\n" ); #endif /*DEBUG_REWRITE*/ IM_FREEF( path_rewrite_free, rewrite ); } else if( !rewrite->lock && new ) { #ifdef DEBUG_REWRITE printf( "path_rewrite_add: updating\n" ); #endif /*DEBUG_REWRITE*/ IM_SETSTR( rewrite->new, new ); } else { #ifdef DEBUG_REWRITE printf( "path_rewrite_add: rewrite rule locked\n" ); #endif /*DEBUG_REWRITE*/ } } else if( new && strcmp( old, new ) != 0 ) { #ifdef DEBUG_REWRITE printf( "path_rewrite_add: adding\n" ); #endif /*DEBUG_REWRITE*/ (void) path_rewrite_new( old, new, lock ); } /* Keep longest old first, in case one old is a prefix of * another. */ rewrite_list = g_slist_sort( rewrite_list, (GCompareFunc) path_rewrite_sort_fn ); #ifdef DEBUG_REWRITE { GSList *p; printf( "path_rewrite_add: state:\n" ); for( p = rewrite_list; p; p = p->next ) { rewrite = (Rewrite *) p->data; printf( "\told = %s, new = %s\n", rewrite->old, rewrite->new ); } } #endif /*DEBUG_REWRITE*/ } /* Rewrite a string using the rewrite list. buf must be FILENAME_MAX * characters. */ void path_rewrite( char *buf ) { GSList *p; gboolean changed; #ifdef DEBUG_REWRITE printf( "path_rewrite: %s\n", buf ); #endif /*DEBUG_REWRITE*/ do { changed = FALSE; for( p = rewrite_list; p; p = p->next ) { Rewrite *rewrite = (Rewrite *) p->data; if( is_prefix( rewrite->old, buf ) ) { int olen = strlen( rewrite->old ); int nlen = strlen( rewrite->new ); int blen = strlen( buf ); if( blen - olen + nlen > FILENAME_MAX - 3 ) break; memmove( buf + nlen, buf + olen, blen - olen + 1 ); memcpy( buf, rewrite->new, nlen ); changed = TRUE; break; } } } while( changed ); #ifdef DEBUG_REWRITE printf( "\t-> %s\n", buf ); #endif /*DEBUG_REWRITE*/ } /* The inverse: rewrite in long form ready for file ops. */ void path_expand( char *path ) { char buf[FILENAME_MAX]; expand_variables( path, buf ); nativeize_path( buf ); absoluteize_path( buf ); canonicalize_path( buf ); im_strncpy( path, buf, FILENAME_MAX ); } /* Rewite a path to compact form. @path must be FILENAME_MAX characters. * * Examples: * * /home/john/../somefile -> $HOME/../somefile * /home/./john/../somefile -> $HOME/../somefile * fred -> ./fred */ void path_compact( char *path ) { path_expand( path ); path_rewrite( path ); } /* Turn a search path (eg. "/pics/lr:/pics/hr") into a list of directory names. */ GSList * path_parse( const char *path ) { GSList *op = NULL; const char *p; const char *e; int len; char name[FILENAME_MAX + 1]; for( p = path; *p; p = e ) { /* Find the start of the next component, or the NULL * character. */ if( !(e = strchr( p, G_SEARCHPATH_SEPARATOR )) ) e = p + strlen( p ); len = e - p + 1; /* Copy to our buffer, turn to string. */ im_strncpy( name, p, IM_MIN( len, FILENAME_MAX ) ); /* Add to path list. */ op = g_slist_append( op, im_strdupn( name ) ); /* Skip G_SEARCHPATH_SEPARATOR. */ if( *e == G_SEARCHPATH_SEPARATOR ) e++; } return( op ); } /* Free a path. path_free() is reserved n OS X :( */ void path_free2( GSList *path ) { slist_map( path, (SListMapFn) im_free, NULL ); g_slist_free( path ); } /* Sub-fn of below. Add length of this string + 1 (for ':'). */ static int path_add_component( const char *str, int c ) { return( c + strlen( str ) + 1 ); } /* Sub-fn of below. Copy string to buffer, append ':', return new end. */ static char * path_add_string( const char *str, char *buf ) { strcpy( buf, str ); strcat( buf, G_SEARCHPATH_SEPARATOR_S ); return( buf + strlen( buf ) ); } /* Turn a list of directory names into a search path. */ char * path_unparse( GSList *path ) { int len = GPOINTER_TO_INT( slist_fold( path, 0, (SListFoldFn) path_add_component, NULL ) ); char *buf = imalloc( NULL, len + 1 ); /* Build new string. */ slist_fold( path, buf, (SListFoldFn) path_add_string, NULL ); /* Fix '\0' to remove trailing G_SEARCHPATH_SEPARATOR. */ if( len > 0 ) buf[len - 1] = '\0'; return( buf ); } /* Track this stuff during a file search. */ typedef struct _Search { /* Pattern we search for, and it's compiled form. This does not * include any directory components. */ char *basename; GPatternSpec *wild; /* Directory offset. If the original pattern is a relative path, eg. * "poop/x*.v", we search every directory on path for a subdirectory * called "poop" and then search all files within that. */ char *dirname; /* User function to call for every matching file. */ path_map_fn fn; void *a; /* Files we've previously offered to the user function: we remove * duplicates. So "path1/wombat.def" hides "path2/wombat.def". */ GSList *previous; } Search; static void path_search_free( Search *search ) { IM_FREEF( g_free, search->basename ); IM_FREEF( g_free, search->dirname ); IM_FREEF( slist_free_all, search->previous ); IM_FREEF( g_pattern_spec_free, search->wild ); } static gboolean path_search_init( Search *search, const char *patt, path_map_fn fn, void *a ) { search->basename = g_path_get_basename( patt ); search->dirname = g_path_get_dirname( patt ); search->wild = NULL; search->fn = fn; search->a = a; search->previous = NULL; if( !(search->wild = g_pattern_spec_new( search->basename )) ) { path_search_free( search ); return( FALSE ); } return( TRUE ); } static void * path_str_eq( const char *s1, const char *s2 ) { if( strcmp( s1, s2 ) == 0 ) return( (void *) s1 ); else return( NULL ); } /* Test for string matches pattern. If the match is successful, call a user * function. */ static void * path_search_match( Search *search, const char *dir_name, const char *name ) { if( g_pattern_match_string( search->wild, name ) && !slist_map( search->previous, (SListMapFn) path_str_eq, (gpointer) name ) ) { char buf[FILENAME_MAX + 10]; void *result; /* Add to exclusion list. */ search->previous = g_slist_prepend( search->previous, g_strdup( name ) ); im_snprintf( buf, FILENAME_MAX, "%s" G_DIR_SEPARATOR_S "%s", dir_name, name ); path_compact( buf ); #ifdef DEBUG_SEARCH printf( "path_search_match: matched \"%s\"\n", buf ); #endif /*DEBUG_SEARCH*/ if( (result = search->fn( buf, search->a, NULL, NULL )) ) return( result ); } return( NULL ); } /* Scan a directory, calling a function for every entry. Abort scan if * function returns non-NULL. */ static void * path_scan_dir( const char *dir_name, Search *search ) { char buf[FILENAME_MAX]; GDir *dir; const char *name; void *result; /* Add the pattern offset, if any. It's '.' for no offset. */ im_snprintf( buf, FILENAME_MAX, "%s" G_DIR_SEPARATOR_S "%s", dir_name, search->dirname ); if( !(dir = (GDir *) callv_string_filename( (callv_string_fn) g_dir_open, buf, NULL, NULL, NULL )) ) return( NULL ); while( (name = g_dir_read_name( dir )) ) if( (result = path_search_match( search, buf, name )) ) { g_dir_close( dir ); return( result ); } g_dir_close( dir ); return( NULL ); } /* Scan a search path, applying a function to every file name which matches a * pattern. If the user function returns NULL, keep looking, otherwise return * its result. We return NULL on error, or if the user function returns NULL * for all filenames which match. * * Remove duplicates: if fred.wombat is in the first and second dirs on the * path, only apply to the first occurence. FIXME ... speed up with a hash and a (date based) cache at some point */ void * path_map( GSList *path, const char *patt, path_map_fn fn, void *a ) { Search search; void *result; #ifdef DEBUG_SEARCH printf( "path_map: searching for \"%s\"\n", patt ); #endif /*DEBUG_SEARCH*/ if( !path_search_init( &search, patt, fn, a ) ) return( NULL ); result = slist_map( path, (SListMapFn) path_scan_dir, &search ); path_search_free( &search ); return( result ); } /* As above, but scan a single directory. */ void * path_map_dir( const char *dir, const char *patt, path_map_fn fn, void *a ) { Search search; void *result; #ifdef DEBUG_SEARCH printf( "path_map_dir: searching for \"%s\"\n", patt ); #endif /*DEBUG_SEARCH*/ if( !path_search_init( &search, patt, fn, a ) ) return( NULL ); if( !(result = path_scan_dir( dir, &search )) ) { /* Not found? Maybe - error message anyway. */ error_top( _( "Not found." ) ); error_sub( _( "File \"%s\" not found." ), patt ); } path_search_free( &search ); return( result ); } /* Search for a file on the search path. */ char * path_find_file( const char *filename ) { char *fname; #ifdef DEBUG_SEARCH printf( "path_find_file: \"%s\"\n", filename ); #endif /*DEBUG_SEARCH*/ /* Try file name exactly. */ if( existsf( "%s", filename ) ) return( im_strdupn( filename ) ); /* Search everywhere. */ if( (fname = path_map( PATH_SEARCH, filename, (path_map_fn) im_strdupn, NULL )) ) return( fname ); error_top( _( "Not found." ) ); error_sub( _( "File \"%s\" not found on path" ), filename ); return( NULL ); } void path_init( void ) { char buf[FILENAME_MAX]; path_rewrite_add( get_prefix(), "$VIPSHOME", TRUE ); path_rewrite_add( g_get_home_dir(), "$HOME", TRUE ); path_rewrite_add( get_savedir(), "$SAVEDIR", TRUE ); /* You might think we could add a rule to swap '.' for * g_get_current_dir(), but that would then make workspaces depend on * a certain value of cwd before they could work. */ /* And the expanded form too. */ expand_variables( get_savedir(), buf ); path_rewrite_add( buf, "$SAVEDIR", TRUE ); #ifdef DEBUG_LOCAL printf( "path_init: loading start from \".\" only\n" ); path_start_default = path_parse( "." ); path_search_default = path_parse( "." ); path_tmp_default = im_strdup( NULL, "." ); #else /*!DEBUG_LOCAL*/ im_snprintf( buf, FILENAME_MAX, "%s" G_DIR_SEPARATOR_S "start" G_SEARCHPATH_SEPARATOR_S "$VIPSHOME" G_DIR_SEPARATOR_S "share" G_DIR_SEPARATOR_S "$PACKAGE" G_DIR_SEPARATOR_S "start", get_savedir() ); path_start_default = path_parse( buf ); im_snprintf( buf, FILENAME_MAX, "%s" G_DIR_SEPARATOR_S "data" G_SEARCHPATH_SEPARATOR_S "$VIPSHOME" G_DIR_SEPARATOR_S "share" G_DIR_SEPARATOR_S "$PACKAGE" G_DIR_SEPARATOR_S "data" G_SEARCHPATH_SEPARATOR_S ".", get_savedir() ); path_search_default = path_parse( buf ); im_snprintf( buf, FILENAME_MAX, "%s" G_DIR_SEPARATOR_S "tmp", get_savedir() ); path_tmp_default = im_strdup( NULL, buf ); #endif /*DEBUG_LOCAL*/ } nip2-8.7.0/src/boxes.h0000644000175000017500000001457513224651032011411 00000000000000/* decls for boxes. */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ void box_alert( GtkWidget *par ); void box_vinfo( GtkWidget *par, const char *top, const char *sub, va_list ap ); void box_info( GtkWidget *par, const char *top, const char *sub, ... ) __attribute__((format(printf, 3, 4))); iDialog *box_yesno( GtkWidget *par, iWindowFn okcb, iWindowFn cancelcb, void *client, /* Call client */ iWindowNotifyFn nfn, void *sys, /* Call parent */ const char *yes_label, const char *top, const char *sub, ... ) __attribute__((format(printf, 9, 10))); void box_savenosave( GtkWidget *par, iWindowFn save, iWindowFn nosave, void *client, /* Call client */ iWindowNotifyFn nfn, void *sys, /* Call parent */ const char *top, const char *sub, ... ) __attribute__((format(printf, 8, 9))); void box_about( GtkWidget *par ); void box_help( GtkWidget *par, const char *name ); /* A dialog showing a bunch of editable strings ... eg. name and caption for * new toolkit etc. etc. */ #define TYPE_STRINGSET (stringset_get_type()) #define STRINGSET( obj ) \ (GTK_CHECK_CAST( (obj), TYPE_STRINGSET, Stringset )) #define STRINGSET_CLASS( klass ) \ (GTK_CHECK_CLASS_CAST( (klass), TYPE_STRINGSET, StringsetClass )) #define IS_STRINGSET( obj ) (GTK_CHECK_TYPE( (obj), TYPE_STRINGSET )) #define IS_STRINGSET_CLASS( klass ) \ (GTK_CHECK_CLASS_TYPE( (klass), TYPE_STRINGSET )) /* A Stringset is a bunch of these. */ typedef struct { struct _Stringset *ss; GtkWidget *entry; char *label; char *text; /* Current text value */ char *tooltip; } StringsetChild; typedef struct _Stringset { iDialog parent; GSList *children; GtkSizeGroup *group; /* Align labels with this */ } Stringset; typedef struct _StringsetClass { iDialogClass parent_class; /* My methods. */ } StringsetClass; void *stringset_child_destroy( StringsetChild *ssc ); StringsetChild *stringset_child_new( Stringset *ss, const char *label, const char *text, const char *tooltip ); GtkType stringset_get_type( void ); GtkWidget *stringset_new( void ); StringsetChild *stringset_child_get( Stringset *, const char *label ); /* Find dialog. */ #define TYPE_FIND (find_get_type()) #define FIND( obj ) \ (GTK_CHECK_CAST( (obj), TYPE_FIND, Find )) #define FIND_CLASS( klass ) \ (GTK_CHECK_CLASS_CAST( (klass), TYPE_FIND, FindClass )) #define IS_FIND( obj ) (GTK_CHECK_TYPE( (obj), TYPE_FIND )) #define IS_FIND_CLASS( klass ) \ (GTK_CHECK_CLASS_TYPE( (klass), TYPE_FIND )) typedef struct _Find { iDialog parent; /* My instance vars. */ GtkWidget *search; #ifdef HAVE_GREGEX GtkWidget *regexp; #endif /*HAVE_GREGEX*/ GtkWidget *csens; GtkWidget *fromtop; } Find; typedef struct _FindClass { iDialogClass parent_class; /* My methods. */ } FindClass; GtkType find_get_type( void ); GtkWidget *find_new( void ); void box_url( GtkWidget *par, const char *url ); /* Font chooser window. */ #define TYPE_FONTCHOOSER (fontchooser_get_type()) #define FONTCHOOSER( obj ) \ (GTK_CHECK_CAST( (obj), TYPE_FONTCHOOSER, Fontchooser )) #define FONTCHOOSER_CLASS( klass ) \ (GTK_CHECK_CLASS_CAST( (klass), TYPE_FONTCHOOSER, FontchooserClass )) #define IS_FONTCHOOSER( obj ) (GTK_CHECK_TYPE( (obj), TYPE_FONTCHOOSER )) #define IS_FONTCHOOSER_CLASS( klass ) \ (GTK_CHECK_CLASS_TYPE( (klass), TYPE_FONTCHOOSER )) typedef struct _Fontchooser { iDialog parent_object; GtkWidget *fontchooser; /* gtk font select widget */ } Fontchooser; typedef struct _FontchooserClass { iDialogClass parent_class; /* My methods. */ } FontchooserClass; GtkType fontchooser_get_type( void ); Fontchooser *fontchooser_new( void ); gboolean fontchooser_set_font_name( Fontchooser *fontchooser, const char *font_name ); char *fontchooser_get_font_name( Fontchooser * ); /* Font button. */ #define TYPE_FONTBUTTON (fontbutton_get_type()) #define FONTBUTTON( obj ) \ (GTK_CHECK_CAST( (obj), TYPE_FONTBUTTON, Fontbutton )) #define FONTBUTTON_CLASS( klass ) \ (GTK_CHECK_CLASS_CAST( (klass), TYPE_FONTBUTTON, FontbuttonClass )) #define IS_FONTBUTTON( obj ) (GTK_CHECK_TYPE( (obj), TYPE_FONTBUTTON )) #define IS_FONTBUTTON_CLASS( klass ) \ (GTK_CHECK_CLASS_TYPE( (klass), TYPE_FONTBUTTON )) typedef struct _Fontbutton { GtkButton parent_object; char *font_name; /* Current name */ Fontchooser *fontchooser; /* Pop up dialog */ } Fontbutton; typedef struct _FontbuttonClass { GtkButtonClass parent_class; void (*changed)( Fontbutton * ); } FontbuttonClass; GtkType fontbutton_get_type( void ); Fontbutton *fontbutton_new( void ); void fontbutton_set_font_name( Fontbutton *fontbutton, const char *font_name ); const char *fontbutton_get_font_name( Fontbutton * ); /* Infobar subclass, with a close animation and a label. */ #define TYPE_INFOBAR (infobar_get_type()) #define INFOBAR( obj ) \ (GTK_CHECK_CAST( (obj), TYPE_INFOBAR, Infobar )) #define INFOBAR_CLASS( klass ) \ (GTK_CHECK_CLASS_CAST( (klass), TYPE_INFOBAR, InfobarClass )) #define IS_INFOBAR( obj ) (GTK_CHECK_TYPE( (obj), TYPE_INFOBAR )) #define IS_INFOBAR_CLASS( klass ) \ (GTK_CHECK_CLASS_TYPE( (klass), TYPE_INFOBAR )) struct _Infobar { #ifdef USE_INFOBAR GtkInfoBar parent_object; #endif /*USE_INFOBAR*/ GtkWidget *top; GtkWidget *sub; GtkWidget *info; guint close_timeout; guint close_animation_timeout; int height; }; typedef struct _InfobarClass { #ifdef USE_INFOBAR GtkInfoBarClass parent_class; #endif /*USE_INFOBAR*/ } InfobarClass; GtkType infobar_get_type( void ); Infobar *infobar_new( void ); void infobar_vset( Infobar *infobar, GtkMessageType type, const char *top, const char *sub, va_list ap ); void infobar_set( Infobar *infobar, GtkMessageType type, const char *top, const char *sub, ... ); nip2-8.7.0/src/slider.c0000644000175000017500000000561113224651032011535 00000000000000/* an input slider ... put/get methods */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #include "ip.h" static ClassmodelClass *parent_class = NULL; static View * slider_view_new( Model *model, View *parent ) { return( sliderview_new() ); } /* Members of slider we automate. */ static ClassmodelMember slider_members[] = { { CLASSMODEL_MEMBER_STRING, NULL, 0, MEMBER_CAPTION, "caption", N_( "Caption" ), G_STRUCT_OFFSET( iObject, caption ) }, { CLASSMODEL_MEMBER_DOUBLE, NULL, 0, MEMBER_FROM, "from", N_( "From" ), G_STRUCT_OFFSET( Slider, from ) }, { CLASSMODEL_MEMBER_DOUBLE, NULL, 0, MEMBER_TO, "to", N_( "To" ), G_STRUCT_OFFSET( Slider, to ) }, { CLASSMODEL_MEMBER_DOUBLE, NULL, 0, MEMBER_VALUE, "value", N_( "Value" ), G_STRUCT_OFFSET( Slider, value ) } }; static void slider_class_init( SliderClass *class ) { ModelClass *model_class = (ModelClass *) class; ClassmodelClass *classmodel_class = (ClassmodelClass *) class; parent_class = g_type_class_peek_parent( class ); /* Create signals. */ /* Init methods. */ model_class->view_new = slider_view_new; /* Static init. */ model_register_loadable( MODEL_CLASS( class ) ); classmodel_class->members = slider_members; classmodel_class->n_members = IM_NUMBER( slider_members ); } static void slider_init( Slider *slider ) { /* Overridden later. Just something sensible. */ slider->from = 0; slider->to = 255; slider->value = 128; /* Need to set caption to something too, since it's an automated * member. */ iobject_set( IOBJECT( slider ), CLASS_SLIDER, "" ); } GType slider_get_type( void ) { static GType type = 0; if( !type ) { static const GTypeInfo info = { sizeof( SliderClass ), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) slider_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof( Slider ), 32, /* n_preallocs */ (GInstanceInitFunc) slider_init, }; type = g_type_register_static( TYPE_CLASSMODEL, "Slider", &info, 0 ); } return( type ); } nip2-8.7.0/src/sliderview.c0000644000175000017500000001315413224651032012431 00000000000000/* run the display for a slider in a workspace */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #include "ip.h" static GraphicviewClass *parent_class = NULL; static void sliderview_refresh( vObject *vobject ) { Sliderview *sliderview = SLIDERVIEW( vobject ); Slider *slider = SLIDER( VOBJECT( sliderview )->iobject ); Tslider *tslider = sliderview->tslider; const double range = slider->to - slider->from; const double lrange = log10( range ); const char *caption = IOBJECT( slider )->caption; #ifdef DEBUG printf( "sliderview_refresh\n" ); #endif /*DEBUG*/ /* Compatibility ... we used to not have a caption. Don't display * anything if there's o caption. */ if( caption ) { if( strcmp( caption, "" ) != 0 ) set_glabel( sliderview->label, _( "%s:" ), caption ); else set_glabel( sliderview->label, "%s", "" ); } tslider->from = slider->from; tslider->to = slider->to; tslider->svalue = slider->value; tslider->value = slider->value; tslider->digits = IM_MAX( 0, ceil( 2 - lrange ) ); if( CALC_RECOMP_SLIDER ) gtk_range_set_update_policy( GTK_RANGE( tslider->slider ), GTK_UPDATE_CONTINUOUS ); else gtk_range_set_update_policy( GTK_RANGE( tslider->slider ), GTK_UPDATE_DISCONTINUOUS ); #ifdef DEBUG gtk_range_set_update_policy( GTK_RANGE( tslider->slider ), GTK_UPDATE_DISCONTINUOUS ); #endif /*DEBUG*/ tslider_changed( tslider ); VOBJECT_CLASS( parent_class )->refresh( vobject ); } static void * sliderview_scan( View *view ) { Sliderview *sliderview = SLIDERVIEW( view ); Slider *slider = SLIDER( VOBJECT( sliderview )->iobject ); Classmodel *classmodel = CLASSMODEL( slider ); Expr *expr = HEAPMODEL( classmodel )->row->expr; double value; if( !get_geditable_double( sliderview->tslider->entry, &value ) ) { expr_error_set( expr ); return( view ); } if( slider->value != value ) { slider->value = value; classmodel_update( classmodel ); } return( VIEW_CLASS( parent_class )->scan( view ) ); } static void sliderview_link( View *view, Model *model, View *parent ) { Sliderview *sliderview = SLIDERVIEW( view ); VIEW_CLASS( parent_class )->link( view, model, parent ); if( GRAPHICVIEW( view )->sview ) gtk_size_group_add_widget( GRAPHICVIEW( view )->sview->group, sliderview->label ); } static void sliderview_class_init( SliderviewClass *class ) { vObjectClass *vobject_class = (vObjectClass *) class; ViewClass *view_class = (ViewClass *) class; parent_class = g_type_class_peek_parent( class ); /* Create signals. */ /* Init methods. */ vobject_class->refresh = sliderview_refresh; view_class->scan = sliderview_scan; view_class->link = sliderview_link; } /* Drag on slider. */ static void sliderview_change_cb( Tslider *tslider, Sliderview *sliderview ) { Slider *slider = SLIDER( VOBJECT( sliderview )->iobject ); #ifdef DEBUG printf( "sliderview_change_cb\n" ); #endif /*DEBUG*/ if( slider->value != tslider->svalue ) { slider->value = tslider->svalue; classmodel_update( CLASSMODEL( slider ) ); symbol_recalculate_all(); } } static void sliderview_init( Sliderview *sliderview ) { GtkWidget *hbox; hbox = gtk_hbox_new( FALSE, 12 ); gtk_box_pack_start( GTK_BOX( sliderview ), hbox, TRUE, FALSE, 0 ); sliderview->label = gtk_label_new( "" ); gtk_misc_set_alignment( GTK_MISC( sliderview->label ), 0, 0.5 ); gtk_misc_set_padding( GTK_MISC( sliderview->label ), 2, 1 ); gtk_box_pack_start( GTK_BOX( hbox ), sliderview->label, FALSE, FALSE, 0 ); sliderview->tslider = tslider_new(); tslider_set_conversions( sliderview->tslider, NULL, NULL ); gtk_box_pack_start( GTK_BOX( hbox ), GTK_WIDGET( sliderview->tslider ), TRUE, TRUE, 6 ); gtk_signal_connect_object( GTK_OBJECT( sliderview->tslider ), "text_changed", GTK_SIGNAL_FUNC( view_changed_cb ), GTK_OBJECT( sliderview ) ); gtk_signal_connect_object( GTK_OBJECT( sliderview->tslider ), "activate", GTK_SIGNAL_FUNC( view_activate_cb ), GTK_OBJECT( sliderview ) ); gtk_signal_connect( GTK_OBJECT( sliderview->tslider ), "slider_changed", GTK_SIGNAL_FUNC( sliderview_change_cb ), sliderview ); gtk_widget_show_all( GTK_WIDGET( sliderview ) ); } GtkType sliderview_get_type( void ) { static GtkType sliderview_type = 0; if( !sliderview_type ) { static const GtkTypeInfo sinfo = { "Sliderview", sizeof( Sliderview ), sizeof( SliderviewClass ), (GtkClassInitFunc) sliderview_class_init, (GtkObjectInitFunc) sliderview_init, /* reserved_1 */ NULL, /* reserved_2 */ NULL, (GtkClassInitFunc) NULL, }; sliderview_type = gtk_type_unique( TYPE_GRAPHICVIEW, &sinfo ); } return( sliderview_type ); } View * sliderview_new( void ) { Sliderview *sliderview = gtk_type_new( TYPE_SLIDERVIEW ); return( VIEW( sliderview ) ); } nip2-8.7.0/src/toolview.h0000644000175000017500000000310713224651032012126 00000000000000/* View a tool as a menu item. */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_TOOLVIEW (toolview_get_type()) #define TOOLVIEW( obj ) (GTK_CHECK_CAST( (obj), TYPE_TOOLVIEW, Toolview )) #define TOOLVIEW_CLASS( klass ) \ (GTK_CHECK_CLASS_CAST( (klass), TYPE_TOOLVIEW, ToolviewClass )) #define IS_TOOLVIEW( obj ) (GTK_CHECK_TYPE( (obj), TYPE_TOOLVIEW )) #define IS_TOOLVIEW_CLASS( klass ) \ (GTK_CHECK_CLASS_TYPE( (klass), TYPE_TOOLVIEW )) /* One of these for each top-level menu. */ struct _Toolview { View parent_class; Toolkitview *kview; GtkWidget *item; /* Menu item we made for this tool */ }; typedef struct _ToolviewClass { ViewClass parent_class; /* My methods. */ } ToolviewClass; GtkType toolview_get_type( void ); View *toolview_new( void ); nip2-8.7.0/src/number.c0000644000175000017500000000507113224651032011543 00000000000000/* an editable number */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #include "ip.h" static ClassmodelClass *parent_class = NULL; static View * number_view_new( Model *model, View *parent ) { return( numberview_new() ); } /* Members of number we automate. */ static ClassmodelMember number_members[] = { { CLASSMODEL_MEMBER_STRING, NULL, 0, MEMBER_CAPTION, "caption", N_( "Caption" ), G_STRUCT_OFFSET( iObject, caption ) }, { CLASSMODEL_MEMBER_DOUBLE, NULL, 0, MEMBER_VALUE, "value", N_( "Value" ), G_STRUCT_OFFSET( Number, value ) } }; static void number_class_init( NumberClass *class ) { iObjectClass *iobject_class = (iObjectClass *) class; ModelClass *model_class = (ModelClass *) class; ClassmodelClass *classmodel_class = (ClassmodelClass *) class; parent_class = g_type_class_peek_parent( class ); /* Init methods. */ iobject_class->user_name = _( "Number" ); model_class->view_new = number_view_new; /* Static init. */ model_register_loadable( MODEL_CLASS( class ) ); classmodel_class->members = number_members; classmodel_class->n_members = IM_NUMBER( number_members ); } static void number_init( Number *number ) { number->value = 0.0; iobject_set( IOBJECT( number ), CLASS_NUMBER, NULL ); } GType number_get_type( void ) { static GType type = 0; if( !type ) { static const GTypeInfo info = { sizeof( NumberClass ), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) number_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof( Number ), 32, /* n_pnumberlocs */ (GInstanceInitFunc) number_init, }; type = g_type_register_static( TYPE_CLASSMODEL, "Number", &info, 0 ); } return( type ); } nip2-8.7.0/src/row.h0000644000175000017500000000704413224651032011071 00000000000000/* a row in a workspace ... part of a subcolumn */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_ROW (row_get_type()) #define ROW( obj ) \ (G_TYPE_CHECK_INSTANCE_CAST( (obj), TYPE_ROW, Row )) #define ROW_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_CAST( (klass), TYPE_ROW, RowClass)) #define IS_ROW( obj ) \ (G_TYPE_CHECK_INSTANCE_TYPE( (obj), TYPE_ROW )) #define IS_ROW_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_TYPE( (klass), TYPE_ROW )) #define ROW_GET_CLASS( obj ) \ (G_TYPE_INSTANCE_GET_CLASS( (obj), TYPE_ROW, RowClass )) /* For when we're flashing the showstate up. */ typedef enum { ROW_SHOW_NONE, ROW_SHOW_PARENT, ROW_SHOW_CHILD } RowShowState; struct _Row { Heapmodel parent_class; /* Our context. */ Subcolumn *scol; /* Enclosing subcolumn */ Rhs *child_rhs; /* Child RHS */ Column *top_col; /* Enclosing top level column */ Workspace *ws; /* Enclosing workspace */ Row *top_row; /* Enclosing root row */ Symbol *sym; /* Symbol we represent */ Expr *expr; /* The expr we edit */ gboolean err; /* Set if this row is on the error list */ gboolean selected; /* Selected or not */ gboolean is_class; /* Display spin buttons */ gboolean popup; /* Set to pop up view on 1st display */ gboolean to_save; /* Should be saved (part of only-save-modded) */ GSList *parents; /* rows which depend on us */ GSList *children; /* rows we depend on */ gboolean dirty; /* If we're marked for recomp */ GSList *recomp; /* If root of class display, subs to recomp */ GSList *recomp_save; /* Previous recomp list */ gboolean depend; /* For spotting dependency loops */ RowShowState show; /* For showing parent/child stuff */ }; typedef struct _RowClass { HeapmodelClass parent_class; /* My methods. */ } RowClass; const char *row_name( Row *row ); void row_qualified_name_relative( Symbol *context, Row *row, VipsBuf *buf ); void row_qualified_name( Row *row, VipsBuf *buf ); void *row_name_print( Row *row ); void row_error_set( Row *row ); void row_error_clear( Row *row ); Workspace *row_get_workspace( Row *row ); GType row_get_type( void ); void row_link_symbol( Row *row, Symbol *sym, PElement *root ); Row *row_new( Subcolumn *scol, Symbol *sym, PElement *root ); void *row_dirty( Row *row, gboolean clear_dirty ); void *row_dirty_intrans( Row *row, gboolean clear_dirty ); void row_recomp( Row *row ); void *row_is_selected( Row *row ); void *row_deselect( Row *row ); void *row_select_ensure( Row *row ); void *row_select( Row *row ); void *row_select_extend( Row *row ); void *row_select_toggle( Row *row ); void row_select_modifier( Row *row, guint state ); void row_show_dependents( Row *row ); void row_hide_dependents( Row *row ); void row_set_status( Row *row ); Row *row_parse_name( Symbol *context, const char *path ); nip2-8.7.0/src/popupbutton.h0000644000175000017500000000325613224651032012662 00000000000000/* a button that displays a popup menu * * quick hack from totem-plugin-viewer.c */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_POPUPBUTTON (popupbutton_get_type()) #define POPUPBUTTON( obj ) \ (GTK_CHECK_CAST( (obj), TYPE_POPUPBUTTON, Popupbutton )) #define POPUPBUTTON_CLASS( klass ) \ (GTK_CHECK_CLASS_CAST( (klass), TYPE_POPUPBUTTON, PopupbuttonClass )) #define IS_POPUPBUTTON( obj ) (GTK_CHECK_TYPE( (obj), TYPE_POPUPBUTTON )) #define IS_POPUPBUTTON_CLASS( klass ) \ (GTK_CHECK_CLASS_TYPE( (klass), TYPE_POPUPBUTTON )) typedef struct _Popupbutton { GtkToggleButton parent_object; GtkWidget *menu; } Popupbutton; typedef struct _PopupbuttonClass { GtkToggleButtonClass parent_class; } PopupbuttonClass; GtkType popupbutton_get_type( void ); Popupbutton *popupbutton_new( void ); void popupbutton_set_menu( Popupbutton *Popupbutton, GtkWidget *menu ); nip2-8.7.0/src/makehelpindex.pl0000755000175000017500000000176613224651032013274 00000000000000#!/usr/bin/perl # html docs in $VIPSHOME/share/nip2/doc/html include extra anchor tags # generated from \mylabel{} stuff in doc src (nip2-xx/doc/src/nipguide) # # latex source # # \section{Image view window} # \mylabel{sec:view} # # generates html which includes # # # # scan all html files in $VIPSHOME/share/nip2/doc/html for patterns like this, # and generate C along the lines of: # # { "sec:view", "node4.html#nip_label_sec:view" }, # # this is includes in boxes.c ... then on # # box_help( par, "sec:view" ) # # we can pop up a web browser pointing at the right place in the docs $prefix = @ARGV[0]; $docbase = "$prefix/share/doc/nip2/html"; opendir( SDIR, "$docbase" ); while( $filename = readdir SDIR ) { if( $filename =~ /.html$/ ) { open( HTMLFILE, "$docbase/$filename" ); while( ) { if( /"nip_label_([^"]*)"/ ) { print "{ \"$1\", \"$filename#nip_label_" . "$1\" },\n"; } } close( HTMLFILE ); } } closedir( SDIR ); nip2-8.7.0/src/toolkitview.c0000644000175000017500000001221513224651032012631 00000000000000/* Manage toolkitviews and their display. */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #include "ip.h" /* The top n items in the toolkits menu are made by the system for us ... we * pop toolkit items in after these. */ #define TOOLKITVIEW_MENU_OFFSET 3 static ViewClass *parent_class = NULL; static void toolkitview_destroy( GtkObject *object ) { Toolkitview *kview; g_return_if_fail( object != NULL ); g_return_if_fail( IS_TOOLKITVIEW( object ) ); kview = TOOLKITVIEW( object ); #ifdef DEBUG printf( "toolkitview_destroy: %p\n", object ); printf( "toolkitview_destroy: menu = %p\n", kview->menu ); printf( "toolkitview_destroy: item = %p\n", kview->item ); #endif /*DEBUG*/ DESTROY_GTK( kview->menu ); DESTROY_GTK( kview->item ); GTK_OBJECT_CLASS( parent_class )->destroy( object ); } static void toolkitview_finalize( GObject *gobject ) { #ifdef DEBUG printf( "toolkitview_finalize: %p\n", gobject ); #endif /*DEBUG*/ G_OBJECT_CLASS( parent_class )->finalize( gobject ); } /* Our widgets have been killed ... kill us in turn. */ static void toolkitview_destroy_cb( GtkWidget *widget, Toolkitview *kview ) { /* printf( "toolkitview_destroy_cb: %p\n", kview ); */ kview->menu = NULL; kview->item = NULL; kview->destroy_sid = 0; DESTROY_GTK( kview ); } static void toolkitview_refresh( vObject *vobject ) { Toolkitview *kview = TOOLKITVIEW( vobject ); Toolkit *kit = TOOLKIT( VOBJECT( kview )->iobject ); Toolkitgroupview *kitgview = kview->kitgview; GtkWidget *menu = kitgview->menu; gboolean changed = FALSE; #ifdef DEBUG printf( "toolkitview_refresh: " ); iobject_print( VOBJECT( kview )->iobject ); #endif /*DEBUG*/ /* Make a button ready for the sub-menu. */ if( !kview->item ) { kview->item = gtk_menu_item_new_with_label( IOBJECT( kit )->name ); gtk_menu_shell_insert( GTK_MENU_SHELL( menu ), kview->item, ICONTAINER( kit )->pos + TOOLKITVIEW_MENU_OFFSET ); gtk_widget_show( kview->item ); kview->destroy_sid = g_signal_connect( kview->item, "destroy", G_CALLBACK( toolkitview_destroy_cb ), kview ); changed = TRUE; } if( !kview->menu ) { iWindow *iwnd = IWINDOW( iwindow_get_root( menu ) ); char path[256]; kview->menu = gtk_menu_new(); gtk_menu_set_accel_group( GTK_MENU( kview->menu ), iwnd->accel_group ); im_snprintf( path, 256, "/Toolkits/%s", IOBJECT( kit )->name ); gtk_menu_set_accel_path( GTK_MENU( kview->menu ), path ); changed = TRUE; } if( changed ) gtk_menu_item_set_submenu( GTK_MENU_ITEM( kview->item ), kview->menu ); widget_visible( kview->item, ICONTAINER( kit )->children != NULL ); VOBJECT_CLASS( parent_class )->refresh( vobject ); } static void toolkitview_link( View *view, Model *model, View *parent ) { Toolkitview *kview = TOOLKITVIEW( view ); Toolkitgroupview *kitgview = TOOLKITGROUPVIEW( parent ); kview->kitgview = kitgview; VIEW_CLASS( parent_class )->link( view, model, parent ); #ifdef DEBUG printf( "toolkitview_link: " ); iobject_print( VOBJECT( kview )->iobject ); #endif /*DEBUG*/ } static void toolkitview_class_init( ToolkitviewClass *class ) { GObjectClass *gobject_class = (GObjectClass *) class; GtkObjectClass *object_class = (GtkObjectClass *) class; vObjectClass *vobject_class = (vObjectClass *) class; ViewClass *view_class = (ViewClass *) class; parent_class = g_type_class_peek_parent( class ); gobject_class->finalize = toolkitview_finalize; object_class->destroy = toolkitview_destroy; /* Create signals. */ /* Init methods. */ vobject_class->refresh = toolkitview_refresh; view_class->link = toolkitview_link; } static void toolkitview_init( Toolkitview *kview ) { kview->item = NULL; kview->menu = NULL; kview->destroy_sid = 0; } GtkType toolkitview_get_type( void ) { static GtkType kview_type = 0; if( !kview_type ) { static const GtkTypeInfo kview_info = { "Toolkitview", sizeof( Toolkitview ), sizeof( ToolkitviewClass ), (GtkClassInitFunc) toolkitview_class_init, (GtkObjectInitFunc) toolkitview_init, /* reserved_1 */ NULL, /* reserved_2 */ NULL, (GtkClassInitFunc) NULL, }; kview_type = gtk_type_unique( TYPE_VIEW, &kview_info ); } return( kview_type ); } View * toolkitview_new( void ) { Toolkitview *kview = gtk_type_new( TYPE_TOOLKITVIEW ); return( VIEW( kview ) ); } nip2-8.7.0/src/imagemodel.h0000644000175000017500000001023413224651032012360 00000000000000/* All the model stuff for the widgets making up a single imageview window. */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_IMAGEMODEL (imagemodel_get_type()) #define IMAGEMODEL( obj ) \ (G_TYPE_CHECK_INSTANCE_CAST( (obj), TYPE_IMAGEMODEL, Imagemodel )) #define IMAGEMODEL_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_CAST( (klass), TYPE_IMAGEMODEL, ImagemodelClass)) #define IS_IMAGEMODEL( obj ) \ (G_TYPE_CHECK_INSTANCE_TYPE( (obj), TYPE_IMAGEMODEL )) #define IS_IMAGEMODEL_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_TYPE( (klass), TYPE_IMAGEMODEL )) #define IMAGEMODEL_GET_CLASS( obj ) \ (G_TYPE_INSTANCE_GET_CLASS( (obj), TYPE_IMAGEMODEL, ImagemodelClass )) /* Input states. */ typedef enum _ImagemodelState { IMAGEMODEL_SELECT = 0, /* Pointer */ IMAGEMODEL_PAN, /* Hand panner */ IMAGEMODEL_MAGIN, /* Zoom in */ IMAGEMODEL_MAGOUT, /* Zoom out */ IMAGEMODEL_DROPPER, /* Ink dropper */ IMAGEMODEL_PEN, /* Pen */ IMAGEMODEL_LINE, /* Line drawing tool */ IMAGEMODEL_RECT, /* Rectangle tool */ IMAGEMODEL_FLOOD, /* Flood-fill tool */ IMAGEMODEL_BLOB, /* Blob flood-fill tool */ IMAGEMODEL_TEXT, /* Text tool */ IMAGEMODEL_SMUDGE, /* Blur */ IMAGEMODEL_LAST } ImagemodelState; struct _Imagemodel { iObject parent_class; /* Context. */ iImage *iimage; /* iImage we represent, if any */ guint iimage_changed_sid; guint iimage_destroy_sid; /* State held in sub-objects. */ Conversion *conv; /* Conversion to screen */ guint conv_changed_sid; guint conv_imageinfo_changed_sid; Rect visible; /* Visible part of canvas */ /* Input state. */ ImagemodelState state; ImagemodelState save_state; /* Old state, during temp actions */ ImagemodelState pend_state; /* To-be state, during delayed switch */ /* Rulers. */ gboolean show_rulers; gboolean rulers_mm; gboolean rulers_offset; /* Status bar. */ gboolean show_status; /* Paintbox. */ gboolean show_paintbox; /* Visible/not */ int nib_radius; /* Selected radius */ Imageinfo *nib; /* Generated nib mask */ Imageinfo *ink; /* 1x1 pixel ink image */ char *font_name; /* Selected font name */ char *text; /* Text to render */ Imageinfo *text_mask; /* As a bitmap */ Rect text_area; /* Text geometry */ /* Display control bar. */ gboolean show_convert; double scale; /* Contrast/brightness */ double offset; gboolean falsecolour; /* False colour display on */ gboolean type; /* Interpret type field */ }; typedef struct _ImagemodelClass { iObjectClass parent_class; /* Imagemodel has a new imageinfo. */ void (*imageinfo_changed)( Imagemodel * ); } ImagemodelClass; void *imagemodel_imageinfo_changed( Imagemodel *imagemodel ); gboolean imagemodel_state_paint( ImagemodelState state ); GType imagemodel_get_type( void ); Imagemodel *imagemodel_new( iImage *iimage ); gboolean imagemodel_set_state( Imagemodel *imagemodel, ImagemodelState state, GtkWidget *parent ); void imagemodel_set_rulers( Imagemodel *imagemodel, gboolean show_rulers ); void imagemodel_set_paintbox( Imagemodel *imagemodel, gboolean show_paintbox ); void imagemodel_set_status( Imagemodel *imagemodel, gboolean show_status ); void imagemodel_set_convert( Imagemodel *imagemodel, gboolean show_convert ); gboolean imagemodel_refresh_text( Imagemodel *imagemodel ); gboolean imagemodel_refresh_nib( Imagemodel *imagemodel ); void imagemodel_paint_recalc( Imagemodel *imagemodel ); nip2-8.7.0/src/pathname.h0000644000175000017500000000272113224651032012054 00000000000000/* a pathname in a workspace */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_PATHNAME (pathname_get_type()) #define PATHNAME( obj ) (GTK_CHECK_CAST( (obj), TYPE_PATHNAME, Pathname )) #define PATHNAME_CLASS( klass ) \ (GTK_CHECK_CLASS_CAST( (klass), TYPE_PATHNAME, PathnameClass )) #define IS_PATHNAME( obj ) (GTK_CHECK_TYPE( (obj), TYPE_PATHNAME )) #define IS_PATHNAME_CLASS( klass ) \ (GTK_CHECK_CLASS_TYPE( (klass), TYPE_PATHNAME )) typedef struct _Pathname { Classmodel model; char *value; } Pathname; typedef struct _PathnameClass { ClassmodelClass parent_class; /* My methods. */ } PathnameClass; GType pathname_get_type( void ); nip2-8.7.0/src/expr.h0000644000175000017500000000650513224651032011241 00000000000000/* Expressions. */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_EXPR (expr_get_type()) #define EXPR( obj ) \ (G_TYPE_CHECK_INSTANCE_CAST( (obj), TYPE_EXPR, Expr )) #define EXPR_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_CAST( (klass), TYPE_EXPR, ExprClass)) #define IS_EXPR( obj ) \ (G_TYPE_CHECK_INSTANCE_TYPE( (obj), TYPE_EXPR )) #define IS_EXPR_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_TYPE( (klass), TYPE_EXPR )) #define EXPR_GET_CLASS( obj ) \ (G_TYPE_INSTANCE_GET_CLASS( (obj), TYPE_EXPR, ExprClass )) /* What we track to parse and compile some text. Can have several * of these for a symbol, all with different values. */ struct _Expr { /* We don't contain anything, but we are contained by Symbol, so we * need to be an iContainer subclass. */ iContainer parent_object; Symbol *sym; /* We are an expr for this symbol, scopewise */ Row *row; /* (optional) we have this display */ Compile *compile; /* Our compiled code */ GSList *static_links; /* Static LinkExprs which reference us */ GSList *dynamic_links; /* Dynamic LinkExprs which reference us */ PElement root; /* Pointer to value of this expr */ /* Are we recorded as having an Imageinfo as a value? Use this to * unlink us from the last ii we were linked to. */ Imageinfo *imageinfo; gboolean err; /* TRUE if there is an error in this expr */ char *error_top; char *error_sub; }; typedef struct _ExprClass { iContainerClass parent_class; /* new_value expr has been recalced and root points to a new piece of graph */ void (*new_value)( Expr *expr ); } ExprClass; extern GSList *expr_error_all; void *expr_error_print( Expr *expr, VipsBuf *buf ); typedef void *(*map_expr_fn)( Expr *, void *, void * ); Expr *expr_map_all( Expr *expr, map_expr_fn fn, void *a ); void *expr_name_print( Expr *expr ); void expr_name( Expr *expr, VipsBuf *buf ); Expr *expr_get_parent( Expr *expr ); Expr *expr_get_root( Expr *expr ); Expr *expr_get_root_dynamic( Expr *expr ); GType expr_get_type( void ); void *expr_strip( Expr *expr ); Expr *expr_new( Symbol *sym ); Expr *expr_clone( Symbol *sym ); /* Set and clear error state. */ void *expr_error_set( Expr *expr ); void expr_error_clear( Expr *expr ); void expr_error_get( Expr *expr ); void expr_link_make( Expr *expr, Symbol *child ); void *expr_link_break( Expr *expr, Symbol *child ); void *expr_dirty( Expr *expr, int serial ); void *expr_dirty_intrans( Expr *expr, int serial ); void expr_tip( Expr *expr, VipsBuf *buf ); void expr_new_value( Expr *expr ); void expr_resolve( Expr *expr ); nip2-8.7.0/src/matrixview.c0000644000175000017500000006106713224651032012461 00000000000000/* run the display for an input matrixview in a workspace */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #include "ip.h" /* Round N down to P boundary. */ #define ROUND_DOWN(N,P) ((N) - ((N) % P)) /* Round N up to P boundary. */ #define ROUND_UP(N,P) (ROUND_DOWN( (N) + (P) - 1, (P) )) /* The size in cells at which we switch from displaying the whole matrix to * displaying part of it in a scrolled window. */ static const int matrixview_max_width = 7; static const int matrixview_max_height = 10; /* Show a matrix with fixed-width columns. */ static const int matrixview_column_width = 70; /* Limit number of sub-widgets with this ... could be prefs? */ static const int matrixview_max_cells = 100; static GraphicviewClass *parent_class = NULL; static void matrixview_destroy( GtkObject *object ) { Matrixview *matrixview; g_return_if_fail( object != NULL ); g_return_if_fail( IS_MATRIXVIEW( object ) ); #ifdef DEBUG printf( "matrixview_destroy\n" ); #endif /*DEBUG*/ matrixview = MATRIXVIEW( object ); /* My instance destroy stuff. */ IM_FREEF( g_slist_free, matrixview->items ); GTK_OBJECT_CLASS( parent_class )->destroy( object ); } static gboolean matrixview_scan_text( Matrixview *matrixview, GtkWidget *txt, double *out, gboolean *changed ) { double v; if( !get_geditable_double( txt, &v ) ) return( FALSE ); if( *out != v ) { *out = v; *changed = TRUE; } return( TRUE ); } /* Search and read all text widgets and refill matrix. set_dirty this symbol * if there was a change. Return non-NULL if we found an error. */ static void * matrixview_scan( View *view ) { Matrixview *matrixview = MATRIXVIEW( view ); Matrix *matrix = MATRIX( VOBJECT( matrixview )->iobject ); int width = matrix->value.width; int height = matrix->value.height; Expr *expr = HEAPMODEL( matrix )->row->expr; gboolean changed; int x, y; GSList *p; #ifdef DEBUG printf( "matrixview_scan\n" ); #endif /*DEBUG*/ /* Should be text widgets there ... either text or tslider. */ if( matrixview->display != MATRIX_DISPLAY_TEXT && matrixview->display != MATRIX_DISPLAY_TEXT_SCALE_OFFSET && matrixview->display != MATRIX_DISPLAY_SLIDER ) return( NULL ); expr_error_clear( expr ); changed = FALSE; /* Check for scale and offset, if present. */ if( matrixview->scale && !matrixview_scan_text( matrixview, matrixview->scale, &matrix->scale, &changed ) ) { expr_error_set( expr ); return( view ); } if( matrixview->offset && !matrixview_scan_text( matrixview, matrixview->offset, &matrix->offset, &changed ) ) { expr_error_set( expr ); return( view ); } /* Loop thru' all matrix widgets. tsliders have text fields we must * scan too. */ if( matrixview->items ) for( p = matrixview->items, y = 0; y < height; y++ ) for( x = 0; x < width; x++, p = p->next ) { GtkWidget *item = GTK_WIDGET( p->data ); GtkWidget *entry = TSLIDER( item )->entry; int i = x + y * width; if( !matrixview_scan_text( matrixview, entry, &matrix->value.coeff[i], &changed ) ) { error_top( _( "Bad value." ) ); error_sub( _( "Cell (%d, %d):\n%s" ), x, y, error_get_sub() ); expr_error_set( expr ); return( view ); } } if( matrixview->store ) { GtkTreeModel *tree = GTK_TREE_MODEL( matrixview->store ); GtkTreeIter iter; gtk_tree_model_get_iter_first( tree, &iter ); for( y = 0; y < height; y++ ) { for( x = 0; x < width; x++ ) { double *out = &matrix->value.coeff[x + y * width]; double d; gtk_tree_model_get( tree, &iter, x, &d, -1 ); if( *out != d ) { *out = d; changed = TRUE; } } gtk_tree_model_iter_next( tree, &iter ); } } if( changed ) classmodel_update( CLASSMODEL( matrix ) ) ; return( VIEW_CLASS( parent_class )->scan( view ) ); } /* Change to a toggle widget. */ /*ARGSUSED*/ static void matrixview_toggle_change_cb( GtkWidget *widget, Matrixview *matrixview ) { Matrix *matrix = MATRIX( VOBJECT( matrixview )->iobject ); int pos = g_slist_index( matrixview->items, widget ); int x = pos % matrixview->width; int y = pos / matrixview->width; int i = x + y * matrix->value.width; #ifdef DEBUG printf( "matrixview_toggle_change_cb\n" ); #endif /*DEBUG*/ /* Cycle value. */ switch( (int) matrix->value.coeff[i] ) { case 0: matrix->value.coeff[i] = 128.0; break; case 255: matrix->value.coeff[i] = 0.0; break; default: matrix->value.coeff[i] = 255.0; break; } classmodel_update( CLASSMODEL( matrix ) ); symbol_recalculate_all(); } /* Build a set of toggle items for a matrix. */ static void matrixview_toggle_build( Matrixview *matrixview ) { Matrix *matrix = MATRIX( VOBJECT( matrixview )->iobject ); int x, y; int cx, cy; matrixview->table = gtk_table_new( matrixview->height, matrixview->width, TRUE ); gtk_box_pack_start( GTK_BOX( matrixview->box ), matrixview->table, FALSE, FALSE, 0 ); /* Find the centre position, if there is one. We give this a special * name; it is highlit by our resource file. */ cx = -1; cy = -1; if( matrix->value.height & 0x1 ) cy = matrix->value.height >> 1; if( matrix->value.width & 0x1 ) cx = matrix->value.width >> 1; /* Build contents. */ for( y = 0; y < matrixview->height; y++ ) for( x = 0; x < matrixview->width; x++ ) { GtkWidget *but; but = gtk_button_new_with_label( "0" ); gtk_signal_connect( GTK_OBJECT( but ), "clicked", GTK_SIGNAL_FUNC( matrixview_toggle_change_cb ), matrixview ); if( x == cx && y == cy ) gtk_widget_set_name( but, "centre_widget" ); /* FIXME ... this b0rks thanks to pangolayout confusion set_fixed( GTK_BIN( but )->child, 1 ); */ gtk_table_attach( GTK_TABLE( matrixview->table ), but, x, x + 1, y, y + 1, GTK_FILL, GTK_FILL, 2, 2 ); matrixview->items = g_slist_append( matrixview->items, but ); } } /* Change to a scale in a Tslider. */ /*ARGSUSED*/ static void matrixview_slider_change_cb( Tslider *tslider, Matrixview *matrixview ) { Matrix *matrix = MATRIX( VOBJECT( matrixview )->iobject ); int pos = g_slist_index( matrixview->items, tslider ); int x = pos % matrixview->width; int y = pos / matrixview->width; int i = x + y * matrix->value.width; g_assert( pos >= 0 ); /* Install value. */ if( matrix->value.coeff[i] != tslider->svalue ) { matrix->value.coeff[i] = tslider->svalue; classmodel_update( CLASSMODEL( matrix ) ); symbol_recalculate_all(); } } /* Build a set of slider items for a matrix. */ static void matrixview_slider_build( Matrixview *matrixview ) { int x, y; matrixview->table = gtk_table_new( matrixview->height, matrixview->width, TRUE ); gtk_box_pack_start( GTK_BOX( matrixview->box ), matrixview->table, TRUE, TRUE, 0 ); for( y = 0; y < matrixview->height; y++ ) for( x = 0; x < matrixview->width; x++ ) { Tslider *tslider = tslider_new(); tslider_set_conversions( tslider, NULL, NULL ); tslider->from = -2; tslider->to = 2; tslider->digits = 3; gtk_signal_connect_object( GTK_OBJECT( tslider ), "text_changed", GTK_SIGNAL_FUNC( view_changed_cb ), GTK_OBJECT( matrixview ) ); gtk_signal_connect_object( GTK_OBJECT( tslider ), "activate", GTK_SIGNAL_FUNC( view_activate_cb ), GTK_OBJECT( matrixview ) ); gtk_signal_connect( GTK_OBJECT( tslider ), "slider_changed", GTK_SIGNAL_FUNC( matrixview_slider_change_cb ), matrixview ); gtk_container_set_border_width( GTK_CONTAINER( tslider ), 2 ); gtk_table_attach_defaults( GTK_TABLE( matrixview->table ), GTK_WIDGET( tslider ), x, x + 1, y, y + 1 ); matrixview->items = g_slist_append( matrixview->items, tslider ); } } static gboolean matrixview_text_focus_in( GtkWidget *entry, GdkEvent *event, void *data ) { gtk_editable_select_region( GTK_EDITABLE( entry ), 0, -1 ); return( FALSE ); } static gboolean matrixview_text_focus_out( GtkWidget *entry, GdkEvent *event, void *data ) { gtk_editable_select_region( GTK_EDITABLE( entry ), 0, 0 ); return( FALSE ); } static void matrixview_text_connect( Matrixview *matrixview, GtkWidget *txt ) { gtk_signal_connect_object( GTK_OBJECT( txt ), "changed", GTK_SIGNAL_FUNC( view_changed_cb ), GTK_OBJECT( matrixview ) ); gtk_signal_connect_object( GTK_OBJECT( txt ), "activate", GTK_SIGNAL_FUNC( view_activate_cb ), GTK_OBJECT( matrixview ) ); /* Select text on focus-in, deselect on focus out. */ gtk_signal_connect( GTK_OBJECT( txt ), "focus_in_event", GTK_SIGNAL_FUNC( matrixview_text_focus_in ), NULL ); gtk_signal_connect( GTK_OBJECT( txt ), "focus_out_event", GTK_SIGNAL_FUNC( matrixview_text_focus_out ), NULL ); } static void matrixview_text_build_scale_offset( Matrixview *matrixview ) { GtkSizeGroup *group; matrixview->cbox = gtk_vbox_new( FALSE, 2 ); gtk_box_pack_end( GTK_BOX( matrixview->box ), GTK_WIDGET( matrixview->cbox ), FALSE, FALSE, 0 ); group = gtk_size_group_new( GTK_SIZE_GROUP_HORIZONTAL ); matrixview->scale = build_glabeltext4( matrixview->cbox, group, _( "Scale" ) ); gtk_entry_set_width_chars( GTK_ENTRY( matrixview->scale ), 6 ); matrixview_text_connect( matrixview, matrixview->scale ); matrixview->offset = build_glabeltext4( matrixview->cbox, group, _( "Offset" ) ); gtk_entry_set_width_chars( GTK_ENTRY( matrixview->offset ), 6 ); matrixview_text_connect( matrixview, matrixview->offset ); UNREF( group ); } /* Make a GtkListStore from a MatrixValue. */ GtkListStore * matrixview_liststore_new( MatrixValue *matrixvalue ) { int width = matrixvalue->width; int height = matrixvalue->height; GType *types; int i, y; GtkListStore *store; types = g_new( GType, width ); for( i = 0; i < width; i++ ) types[i] = G_TYPE_DOUBLE; store = gtk_list_store_newv( width, types ); g_free( types ); for( y = 0; y < height; y++ ) { GtkTreeIter iter; gtk_list_store_append( store, &iter ); for( i = 0; i < width; i++ ) gtk_list_store_set( store, &iter, i, matrixvalue->coeff[y * width + i], -1 ); } return( store ); } static void matrixview_edited_cb( GtkCellRendererText *renderer, char *path, char *new_text, void *user_data ) { Matrixview *matrixview = MATRIXVIEW( user_data ); GtkTreeModel *tree = GTK_TREE_MODEL( matrixview->store ); GtkTreeIter iter; if( gtk_tree_model_get_iter_from_string( tree, &iter, path ) ) { int col = GPOINTER_TO_INT( g_object_get_data( G_OBJECT( renderer ), "nip2_column_num" ) ); gtk_list_store_set( GTK_LIST_STORE( tree ), &iter, col, atof( new_text ), -1 ); view_scannable_register( VIEW( matrixview ) ); symbol_recalculate_all(); } } static void matrixview_cell_data_cb( GtkTreeViewColumn *tree_column, GtkCellRenderer *cell, GtkTreeModel *tree, GtkTreeIter *iter, void *data ) { int col = GPOINTER_TO_INT( g_object_get_data( G_OBJECT( cell ), "nip2_column_num" ) ); double d; char buf[256]; gtk_tree_model_get( tree, iter, col, &d, -1 ); vips_snprintf( buf, 256, "%g", d ); g_object_set( cell, "text", buf, NULL ); } /* Build a set of text items for a matrix. */ static void matrixview_text_build( Matrixview *matrixview ) { Matrix *matrix = MATRIX( VOBJECT( matrixview )->iobject ); int i; GtkTreeViewColumn *column; int cell_height; GtkTreeSelection *selection; if( !matrix->value.coeff ) return; matrixview->store = matrixview_liststore_new( &matrix->value ); matrixview->sheet = gtk_tree_view_new_with_model( GTK_TREE_MODEL( matrixview->store ) ); gtk_tree_view_set_headers_visible( GTK_TREE_VIEW( matrixview->sheet ), FALSE ); /* Stops a harmless compiler warning. */ column = NULL; for( i = 0; i < matrix->value.width; i++ ) { GtkCellRenderer *renderer; char buf[256]; renderer = gtk_cell_renderer_text_new(); g_object_set( renderer, "editable", TRUE, NULL ); g_object_set_data( G_OBJECT( renderer ), "nip2_column_num", GINT_TO_POINTER( i ) ); g_signal_connect( G_OBJECT( renderer ), "edited", G_CALLBACK( matrixview_edited_cb ), matrixview ); column = gtk_tree_view_column_new(); gtk_tree_view_column_set_sizing( column, GTK_TREE_VIEW_COLUMN_FIXED ); gtk_tree_view_column_set_fixed_width( column, matrixview_column_width ); im_snprintf( buf, 256, "%d", i ); gtk_tree_view_column_set_title( column, buf ); gtk_tree_view_column_pack_start( column, renderer, FALSE ); gtk_tree_view_column_set_attributes( column, renderer, "text", i, NULL ); gtk_tree_view_column_set_cell_data_func( column, renderer, matrixview_cell_data_cb, NULL, NULL ); gtk_tree_view_append_column( GTK_TREE_VIEW( matrixview->sheet ), column ); } gtk_tree_view_set_fixed_height_mode( GTK_TREE_VIEW( matrixview->sheet ), TRUE ); gtk_tree_view_column_cell_get_size( column, NULL, NULL, NULL, NULL, &cell_height ); selection = gtk_tree_view_get_selection( GTK_TREE_VIEW( matrixview->sheet ) ); gtk_tree_selection_set_mode( selection, GTK_SELECTION_MULTIPLE ); gtk_tree_view_set_rubber_banding( GTK_TREE_VIEW( matrixview->sheet ), TRUE ); gtk_tree_view_set_grid_lines( GTK_TREE_VIEW( matrixview->sheet ), GTK_TREE_VIEW_GRID_LINES_BOTH ); if( matrix->value.width > matrixview_max_width || matrix->value.height > matrixview_max_height ) { GtkRequisition requisition; gint spacing; int border; int width, height; if( matrix->value.width > matrixview_max_width ) gtk_tree_view_set_headers_visible( GTK_TREE_VIEW( matrixview->sheet ), TRUE ); matrixview->swin = gtk_scrolled_window_new( NULL, NULL ); gtk_scrolled_window_set_policy( GTK_SCROLLED_WINDOW( matrixview->swin ), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC ); gtk_container_add( GTK_CONTAINER( matrixview->swin ), matrixview->sheet ); /* Calculate how big we should make the scrolled window. We * need to leave space for the scrollbars. */ gtk_widget_size_request( gtk_scrolled_window_get_hscrollbar( GTK_SCROLLED_WINDOW( matrixview->swin ) ), &requisition ); gtk_widget_style_get( GTK_WIDGET( matrixview->swin ), "scrollbar-spacing", &spacing, NULL ); border = requisition.height + spacing; /* Subarea of matrix we show, in cells. */ width = IM_MIN( matrix->value.width, matrixview_max_width ); height = IM_MIN( matrix->value.height, matrixview_max_height ); /* Convert to pixels. */ width *= matrixview_column_width; height *= cell_height; /* Will we be showing scrollbars? Need to add a bit. */ if( matrixview->width > matrixview_max_width ) height += border; if( matrixview->height > matrixview_max_height ) width += border; gtk_widget_set_size_request( GTK_WIDGET( matrixview->swin ), width + 5, height + 5 ); gtk_box_pack_start( GTK_BOX( matrixview->box ), matrixview->swin, FALSE, FALSE, 0 ); } else { gtk_box_pack_start( GTK_BOX( matrixview->box ), matrixview->sheet, FALSE, FALSE, 0 ); } if( matrixview->display == MATRIX_DISPLAY_TEXT_SCALE_OFFSET ) /* Make the scale/offset widgets too. */ matrixview_text_build_scale_offset( matrixview ); } /* Set the label on a toggle button to reflect its value. */ static void matrixview_toggle_set_label( GtkWidget *button, double v ) { GtkWidget *label = GTK_BIN( button )->child; g_return_if_fail( GTK_IS_LABEL( label ) ); switch( (int) v ) { case 0: set_glabel( label, "0" ); break; case 255: set_glabel( label, "1" ); break; default: set_glabel( label, "*" ); break; } } /* Refresh a set of toggle items for a matrix. */ static void matrixview_toggle_refresh( Matrixview *matrixview ) { Matrix *matrix = MATRIX( VOBJECT( matrixview )->iobject ); int x, y; GSList *p; for( p = matrixview->items, y = 0; y < matrixview->height; y++ ) for( x = 0; x < matrixview->width; x++, p = p->next ) { GtkWidget *wid = GTK_WIDGET( p->data ); int i = x + y * matrix->value.width; matrixview_toggle_set_label( wid, matrix->value.coeff[i] ); } } /* Refresh a set of slider items for a matrix. */ static void matrixview_slider_refresh( Matrixview *matrixview ) { Matrix *matrix = MATRIX( VOBJECT( matrixview )->iobject ); int x, y; GSList *p; for( p = matrixview->items, y = 0; y < matrixview->height; y++ ) for( x = 0; x < matrixview->width; x++, p = p->next ) { Tslider *tslider = TSLIDER( p->data ); int i = x + y * matrix->value.width; tslider->value = matrix->value.coeff[i]; tslider->svalue = matrix->value.coeff[i]; tslider_changed( tslider ); } } static void matrixview_text_set( Matrixview *matrixview, GtkWidget *txt, double val ) { if( txt ) { gtk_signal_handler_block_by_data( GTK_OBJECT( txt ), matrixview ); set_gentry( txt, "%g", val ); gtk_signal_handler_unblock_by_data( GTK_OBJECT( txt ), matrixview ); } } /* Fill the widgets! */ static void matrixview_text_refresh( Matrixview *matrixview ) { Matrix *matrix = MATRIX( VOBJECT( matrixview )->iobject ); MatrixValue *matrixvalue = &matrix->value; int width = matrixvalue->width; int height = matrixvalue->height; GtkTreeModel *tree = GTK_TREE_MODEL( matrixview->store ); int x, y; GtkTreeIter iter; if( !matrixvalue->coeff ) return; matrixview_text_set( matrixview, matrixview->scale, matrix->scale ); matrixview_text_set( matrixview, matrixview->offset, matrix->offset ); gtk_tree_model_get_iter_first( tree, &iter ); for( y = 0; y < height; y++ ) { for( x = 0; x < width; x++ ) gtk_list_store_set( matrixview->store, &iter, x, matrixvalue->coeff[x + y * width], -1 ); gtk_tree_model_iter_next( tree, &iter ); } } static void matrixview_refresh( vObject *vobject ) { Matrixview *matrixview = MATRIXVIEW( vobject ); Matrix *matrix = MATRIX( VOBJECT( matrixview )->iobject ); gboolean built; gboolean hclip; gboolean vclip; int width, height; int i; built = FALSE; hclip = FALSE; vclip = FALSE; /* Find required size ... limit displays which are tables of widgets * to avoid huge slowness. */ width = matrix->value.width; height = matrix->value.height; if( matrix->display == MATRIX_DISPLAY_TOGGLE || matrix->display == MATRIX_DISPLAY_SLIDER ) { if( width * height > matrixview_max_cells ) { if( width > height ) { width = IM_CLIP( 1, matrixview_max_cells / height, matrix->value.width ); hclip = TRUE; } else { height = IM_CLIP( 1, matrixview_max_cells / width, matrix->value.height ); vclip = TRUE; } } /* Clip twice to make sure we clip in both directions if * necessary. */ if( width * height > matrixview_max_cells ) { if( width > height ) { width = IM_CLIP( 1, matrixview_max_cells / height, matrix->value.width ); hclip = TRUE; } else { height = IM_CLIP( 1, matrixview_max_cells / width, matrix->value.height ); vclip = TRUE; } } } #ifdef DEBUG printf( "matrixview_refresh\n" ); #endif /*DEBUG*/ /* Is there a UI already there we can reuse? Has to be same size and * type. */ if( matrixview->display != matrix->display || matrixview->width != width || matrixview->height != height ) { /* Kill old UI stuff. */ IM_FREEF( gtk_widget_destroy, matrixview->sheet ); IM_FREEF( gtk_widget_destroy, matrixview->table ); IM_FREEF( gtk_widget_destroy, matrixview->swin ); IM_FREEF( g_slist_free, matrixview->items ); IM_FREEF( gtk_widget_destroy, matrixview->cbox ); matrixview->scale = NULL; matrixview->offset = NULL; /* So the builders know how many widgets to make. */ matrixview->width = width; matrixview->height = height; matrixview->display = matrix->display; /* Make new contents. */ switch( matrix->display ) { case MATRIX_DISPLAY_TOGGLE: matrixview_toggle_build( matrixview ); break; case MATRIX_DISPLAY_SLIDER: matrixview_slider_build( matrixview ); break; case MATRIX_DISPLAY_TEXT: case MATRIX_DISPLAY_TEXT_SCALE_OFFSET: matrixview_text_build( matrixview ); break; default: g_assert( FALSE ); } if( hclip ) { gtk_table_resize( GTK_TABLE( matrixview->table ), matrixview->height, matrixview->width + 1 ); for( i = 0; i < matrixview->height; i++ ) { GtkWidget *lab; lab = gtk_label_new( "---" ); gtk_table_attach( GTK_TABLE( matrixview->table ), lab, matrixview->width, matrixview->width + 1, i, i + 1, GTK_FILL, GTK_FILL, 2, 2 ); } } if( vclip ) { gtk_table_resize( GTK_TABLE( matrixview->table ), matrixview->height + 1, matrixview->width ); for( i = 0; i < matrixview->width; i++ ) { GtkWidget *lab; lab = gtk_label_new( "|" ); gtk_table_attach( GTK_TABLE( matrixview->table ), lab, i, i + 1, matrixview->height, matrixview->height + 1, GTK_FILL, GTK_FILL, 2, 2 ); } } built = TRUE; } switch( matrixview->display ) { case MATRIX_DISPLAY_TOGGLE: matrixview_toggle_refresh( matrixview ); break; case MATRIX_DISPLAY_SLIDER: matrixview_slider_refresh( matrixview ); break; case MATRIX_DISPLAY_TEXT: case MATRIX_DISPLAY_TEXT_SCALE_OFFSET: matrixview_text_refresh( matrixview ); break; default: g_assert( FALSE ); } /* If we've built a new display, need to show after _refresh. */ if( built ) { gtk_widget_show_all( GTK_WIDGET( matrixview ) ); view_resize( VIEW( matrixview ) ); } VOBJECT_CLASS( parent_class )->refresh( vobject ); } static void matrixview_class_init( MatrixviewClass *class ) { GtkObjectClass *object_class = (GtkObjectClass *) class; vObjectClass *vobject_class = (vObjectClass *) class; ViewClass *view_class = (ViewClass *) class; parent_class = g_type_class_peek_parent( class ); object_class->destroy = matrixview_destroy; /* Create signals. */ /* Init methods. */ vobject_class->refresh = matrixview_refresh; view_class->scan = matrixview_scan; } static void matrixview_init( Matrixview *matrixview ) { #ifdef DEBUG printf( "matrixview_init\n" ); #endif /*DEBUG*/ matrixview->box = gtk_hbox_new( FALSE, 12 ); gtk_box_pack_start( GTK_BOX( matrixview ), GTK_WIDGET( matrixview->box ), FALSE, FALSE, 0 ); /* Build on 1st refresh. */ matrixview->store = NULL; matrixview->sheet = NULL; matrixview->swin = NULL; matrixview->table = NULL; matrixview->items = NULL; matrixview->width = -1; matrixview->height = -1; matrixview->cbox = NULL; matrixview->scale = NULL; matrixview->offset = NULL; } GtkType matrixview_get_type( void ) { static GtkType matrixview_type = 0; if( !matrixview_type ) { static const GtkTypeInfo info = { "Matrixview", sizeof( Matrixview ), sizeof( MatrixviewClass ), (GtkClassInitFunc) matrixview_class_init, (GtkObjectInitFunc) matrixview_init, /* reserved_1 */ NULL, /* reserved_2 */ NULL, (GtkClassInitFunc) NULL, }; matrixview_type = gtk_type_unique( TYPE_GRAPHICVIEW, &info ); } return( matrixview_type ); } View * matrixview_new( void ) { Matrixview *matrixview = gtk_type_new( TYPE_MATRIXVIEW ); return( VIEW( matrixview ) ); } nip2-8.7.0/src/toolkitgroup.h0000644000175000017500000000410313224651032013015 00000000000000/* Declarations for toolkitgroup.c */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_TOOLKITGROUP (toolkitgroup_get_type()) #define TOOLKITGROUP( obj ) \ (G_TYPE_CHECK_INSTANCE_CAST( (obj), TYPE_TOOLKITGROUP, Toolkitgroup )) #define TOOLKITGROUP_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_CAST( (klass), TYPE_TOOLKITGROUP, \ ToolkitgroupClass)) #define IS_TOOLKITGROUP( obj ) \ (G_TYPE_CHECK_INSTANCE_TYPE( (obj), TYPE_TOOLKITGROUP )) #define IS_TOOLKITGROUP_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_TYPE( (klass), TYPE_TOOLKITGROUP )) #define TOOLKITGROUP_GET_CLASS( obj ) \ (G_TYPE_INSTANCE_GET_CLASS( (obj), TYPE_TOOLKITGROUP, \ ToolkitgroupClass )) /* A toolkitgroup. */ struct _Toolkitgroup { Model parent_class; /* Defs in toolkits in this group are created as locals of this * symbol. This is symbol_root for the main toolkitgroup, but can be * local to a workspace if we are loading a set of compatibility defs. */ Symbol *root; }; typedef struct _ToolkitgroupClass { ModelClass parent_class; /* Methods. */ } ToolkitgroupClass; Toolkit *toolkitgroup_map( Toolkitgroup *kitg, toolkit_map_fn fn, void *a, void *b ); GType toolkitgroup_get_type( void ); Toolkitgroup *toolkitgroup_new( Symbol *root ); void toolkitgroup_sort( Toolkitgroup *kitg ); nip2-8.7.0/src/progress.c0000644000175000017500000001626713224651032012130 00000000000000/* Handle feedback about eval progress. */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your watch) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG_MEMUSE #define DEBUG */ #include "ip.h" static iContainerClass *progress_parent_class = NULL; /* Our signals. */ enum { SIG_BEGIN, /* Switch to busy state */ SIG_UPDATE, /* Busy progress update */ SIG_END, /* End busy state */ SIG_LAST }; static guint progress_signals[SIG_LAST] = { 0 }; /* Delay before we start showing busy feedback. */ static const double progress_busy_delay = 1.0; /* Delay between busy updates. */ static const double progress_update_interval = 0.1; void progress_begin( void ) { Progress *progress = progress_get(); g_assert( progress->count >= 0 ); #ifdef DEBUG printf( "progress_begin: %d\n", progress->count ); #endif /*DEBUG*/ progress->count += 1; if( progress->count == 1 ) { g_timer_start( progress->busy_timer ); g_timer_start( progress->update_timer ); #ifdef DEBUG_MEMUSE printf( "progress_begin:\n" ); im__print_all(); #endif /*DEBUG_MEMUSE*/ } } static void progress_update( Progress *progress ) { /* Don't show the process and cancel button for a bit. */ if( progress->count ) { double elapsed = g_timer_elapsed( progress->busy_timer, NULL ); if( !progress->busy && elapsed > progress_busy_delay ) { #ifdef DEBUG printf( "progress_update: displaying progress bar\n" ); #endif /*DEBUG*/ g_signal_emit( G_OBJECT( progress ), progress_signals[SIG_BEGIN], 0 ); progress->busy = TRUE; } } /* Update regularly, even if we're not inside a begin/end * block. */ if( g_timer_elapsed( progress->update_timer, NULL ) > progress_update_interval ) { gboolean cancel; #ifdef DEBUG printf( "progress_update:\n" ); #endif /*DEBUG*/ g_timer_start( progress->update_timer ); /* Overwrite the message if we're cancelling. */ if( progress->cancel ) { vips_buf_rewind( &progress->feedback ); vips_buf_appends( &progress->feedback, _( "Cancelling" ) ); vips_buf_appends( &progress->feedback, " ..." ); } cancel = FALSE; g_signal_emit( progress, progress_signals[SIG_UPDATE], 0, &cancel ); if( cancel ) progress->cancel = TRUE; /* Rather dangerous, but we need this to give nice updates * for the feedback thing. */ process_events(); #ifdef DEBUG_MEMUSE printf( "progress_update:\n" ); im__print_all(); #endif /*DEBUG_MEMUSE*/ } } gboolean progress_update_percent( int percent, int eta ) { Progress *progress = progress_get(); vips_buf_rewind( &progress->feedback ); if( eta > 30 ) { int minutes = (eta + 30) / 60; vips_buf_appendf( &progress->feedback, ngettext( "%d minute left", "%d minutes left", minutes ), minutes ); } else if( eta > 5 ) vips_buf_appendf( &progress->feedback, ngettext( "%d second left", "%d seconds left", eta ), eta ); else /* The empty string changes the height of the progress bar * argh. */ vips_buf_appendf( &progress->feedback, " " ); progress->percent = percent; progress_update( progress ); return( progress->cancel ); } gboolean progress_update_expr( Expr *expr ) { Progress *progress = progress_get(); vips_buf_rewind( &progress->feedback ); vips_buf_appends( &progress->feedback, _( "Calculating" ) ); vips_buf_appends( &progress->feedback, " " ); if( expr ) expr_name( expr, &progress->feedback ); else vips_buf_appends( &progress->feedback, symbol_get_last_calc() ); vips_buf_appends( &progress->feedback, " ..." ); progress->percent = 0; progress_update( progress ); return( progress->cancel ); } gboolean progress_update_loading( int percent, const char *filename ) { Progress *progress = progress_get(); vips_buf_rewind( &progress->feedback ); vips_buf_appends( &progress->feedback, _( "Loading" ) ); vips_buf_appendf( &progress->feedback, " \"%s\"", filename ); progress->percent = percent; progress_update( progress ); return( progress->cancel ); } gboolean progress_update_tick( void ) { Progress *progress = progress_get(); progress_update( progress ); return( progress->cancel ); } void progress_end( void ) { Progress *progress = progress_get(); progress->count -= 1; #ifdef DEBUG printf( "progress_end: %d\n", progress->count ); #endif /*DEBUG*/ g_assert( progress->count >= 0 ); if( !progress->count ) { if( progress->busy ) g_signal_emit( G_OBJECT( progress ), progress_signals[SIG_END], 0 ); progress->cancel = FALSE; progress->busy = FALSE; #ifdef DEBUG_MEMUSE printf( "progress_end:\n" ); im__print_all(); #endif /*DEBUG_MEMUSE*/ } } static void progress_class_init( ProgressClass *class ) { progress_parent_class = g_type_class_peek_parent( class ); progress_signals[SIG_BEGIN] = g_signal_new( "begin", G_OBJECT_CLASS_TYPE( class ), G_SIGNAL_RUN_FIRST, G_STRUCT_OFFSET( ProgressClass, begin ), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0 ); progress_signals[SIG_UPDATE] = g_signal_new( "update", G_OBJECT_CLASS_TYPE( class ), G_SIGNAL_RUN_FIRST, G_STRUCT_OFFSET( ProgressClass, update ), NULL, NULL, g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1, G_TYPE_POINTER ); progress_signals[SIG_END] = g_signal_new( "end", G_OBJECT_CLASS_TYPE( class ), G_SIGNAL_RUN_FIRST, G_STRUCT_OFFSET( ProgressClass, end ), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0 ); } static void progress_init( Progress *progress ) { #ifdef DEBUG printf( "progress_init\n" ); #endif /*DEBUG*/ progress->count = 0; progress->busy_timer = g_timer_new(); progress->update_timer = g_timer_new(); progress->cancel = FALSE; progress->busy = FALSE; vips_buf_init_static( &progress->feedback, progress->buf, PROGRESS_FEEDBACK_SIZE ); } GType progress_get_type( void ) { static GType type = 0; if( !type ) { static const GTypeInfo info = { sizeof( ProgressClass ), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) progress_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof( Progress ), 32, /* n_preallocs */ (GInstanceInitFunc) progress_init, }; type = g_type_register_static( TYPE_IOBJECT, "Progress", &info, 0 ); } return( type ); } static Progress * progress_new( void ) { Progress *progress = PROGRESS( g_object_new( TYPE_PROGRESS, NULL ) ); return( progress ); } Progress * progress_get( void ) { static Progress *progress = NULL; if( !progress ) progress = progress_new(); return( progress ); } nip2-8.7.0/src/defbrowser.h0000644000175000017500000000373613224651032012430 00000000000000/* Def browser */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_DEFBROWSER (defbrowser_get_type()) #define DEFBROWSER( obj ) \ (GTK_CHECK_CAST( (obj), TYPE_DEFBROWSER, Defbrowser )) #define DEFBROWSER_CLASS( klass ) \ (GTK_CHECK_CLASS_CAST( (klass), \ TYPE_DEFBROWSER, DefbrowserClass )) #define IS_DEFBROWSER( obj ) \ (GTK_CHECK_TYPE( (obj), TYPE_DEFBROWSER )) #define IS_DEFBROWSER_CLASS( klass ) \ (GTK_CHECK_CLASS_TYPE( (klass), TYPE_DEFBROWSER )) typedef struct _Defbrowser { vObject parent_object; Program *program; /* Program whose kits we explore */ GtkListStore *store; /* Model for list view */ GtkTreeModel *filter; /* After filtering with search box */ GtkWidget *tree; /* Displayed tree */ GtkWidget *entry; /* Search widget */ GtkWidget *top; /* hbox for top bar */ } Defbrowser; typedef struct _DefbrowserClass { vObjectClass parent_class; } DefbrowserClass; GtkType defbrowser_get_type( void ); void defbrowser_set_program( Defbrowser *defbrowser, Program *program ); Defbrowser *defbrowser_new( void ); int defbrowser_get_width( Defbrowser *defbrowser ); void defbrowser_set_filter( Defbrowser *defbrowser, const char *filter ); nip2-8.7.0/src/reduce.c0000644000175000017500000012560113224651032011524 00000000000000/* Graph reducer. */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #include "ip.h" /* trace each regeneration #define DEBUG_REGEN */ /* trace each reduction #define DEBUG_TRACE */ /* trace copies of code from compile heap to main heap. #define DEBUG_COPY */ /* trace just member regeneration #define DEBUG_REGEN_MEMBER */ /* Turn on WHNF tests. #define WHNF_DEBUG */ /* regular tests that we stay in weak head normal form #define WHNF_DEBUG */ /* State of the reduction engine. */ Reduce *reduce_context; /* Index with a CombinatorType, get the number of args that combinator takes. COMB_S = 0, COMB_SL, COMB_SR, COMB_I, COMB_K, COMB_GEN, */ static int nargs[] = {3, 3, 3, 1, 2, 3}; /* Recomps this time. */ int reduce_total_recomputations = 0; /* The current expr being reduced. Used for computation feedback messages. */ static Expr *reduce_current_expr = NULL; /* Eval error here. Longjmp back a ways. */ void reduce_throw( Reduce *rc ) { if( !rc->running ) error( "panic: uncaught exception in reduce_throw()!" ); else longjmp( rc->error[--rc->running], -1 ); } static gboolean reduce_safe_pointer_wrap( Reduce *rc, PElement *out, reduce_safe_pointer_fn fn, void *a, void *b, void *c, void *d, void **result ) { REDUCE_CATCH_START( FALSE ); *result = fn( rc, out, a, b, c, d ); REDUCE_CATCH_STOP; return( TRUE ); } /* Call a function, passing in a "safe" PElement ... ie. the PElement points * at a fresh element which will be safe from the GC. */ void * reduce_safe_pointer( Reduce *rc, reduce_safe_pointer_fn fn, void *a, void *b, void *c, void *d ) { Element e; PElement pe; void *result; e.type = ELEMENT_NOVAL; e.ele = (void *) 12; PEPOINTE( &pe, &e ); heap_register_element( rc->heap, &e ); if( !reduce_safe_pointer_wrap( rc, &pe, fn, a, b, c, d, &result ) ) { heap_unregister_element( rc->heap, &e ); reduce_throw( rc ); } heap_unregister_element( rc->heap, &e ); return( result ); } void reduce_error_typecheck( Reduce *rc, PElement *e, const char *name, const char *type ) { char txt[1024]; VipsBuf buf = VIPS_BUF_STATIC( txt ); error_top( _( "Typecheck error." ) ); vips_buf_appendf( &buf, _( "%s expected %s, instead saw:" ), name, type ); vips_buf_appends( &buf, "\n " ); itext_value_ev( rc, &buf, e ); error_sub( "%s", vips_buf_all( &buf ) ); reduce_throw( rc ); } static void reduce_error_toobig( Reduce *rc, const char *name ) { error_top( _( "Overflow error." ) ); error_sub( _( "%s too long." ), name ); reduce_throw( rc ); } /* 'get' a list: convert a MANAGEDSTRING into a list, if necessary. */ void reduce_get_list( Reduce *rc, PElement *list ) { if( !heap_get_list( list ) ) reduce_throw( rc ); } /* Map over a heap list. Reduce the list spine as we go, don't reduce the * heads. */ void * reduce_map_list( Reduce *rc, PElement *base, reduce_map_list_fn fn, void *a, void *b ) { PElement e = *base; reduce_spine( rc, &e ); if( !PEISLIST( &e ) ) reduce_error_typecheck( rc, &e, "reduce_map_list", "list" ); while( PEISFLIST( &e ) ) { PElement head; void *res; reduce_get_list( rc, &e ); /* Apply user function to the head. */ PEGETHD( &head, &e ); if( (res = fn( rc, &head, a, b )) ) return( res ); /* Reduce the tail. */ PEGETTL( &e, &e ); reduce_spine( rc, &e ); } return( NULL ); } typedef struct _ReduceMapDict { reduce_map_dict_fn fn; void *a; void *b; } ReduceMapDict; static void * reduce_map_dict_entry( Reduce *rc, PElement *head, ReduceMapDict *map_dict ) { char key[256]; PElement p1, p2; void *result; reduce_spine( rc, head ); if( !PEISFLIST( head ) ) reduce_error_typecheck( rc, head, "reduce_map_dict", "[*]" ); reduce_get_list( rc, head ); PEGETHD( &p1, head ); reduce_get_string( rc, &p1, key, 256 ); PEGETTL( &p2, head ); reduce_spine( rc, &p2 ); if( !PEISFLIST( &p2 ) ) reduce_error_typecheck( rc, &p2, "reduce_map_dict", "[*]" ); reduce_get_list( rc, &p2 ); PEGETHD( &p1, &p2 ); if( (result = map_dict->fn( rc, key, &p1, map_dict->a, map_dict->b )) ) return( result ); PEGETTL( &p1, &p2 ); reduce_spine( rc, &p1 ); if( !PEISELIST( &p1 ) ) reduce_error_typecheck( rc, &p1, "reduce_map_dict", "[]" ); return( NULL ); } /* Map over a list of ["key", value] pairs. */ void * reduce_map_dict( Reduce *rc, PElement *base, reduce_map_dict_fn fn, void *a, void *b ) { ReduceMapDict map_dict; map_dict.fn = fn; map_dict.a = a; map_dict.b = b; return( reduce_map_list( rc, base, (reduce_map_list_fn) reduce_map_dict_entry, &map_dict, NULL ) ); } static void * reduce_clone_list_sub( Reduce *rc, PElement *head, PElement *out ) { PElement lhs; if( !heap_list_add( rc->heap, out, &lhs ) ) reduce_throw( rc ); PEPUTPE( &lhs, head ); heap_list_next( out ); return( NULL ); } /* Clone a list ... just clone the spine, copy pointers to the heads. Reduce * the list as we go (strict shallow clone). We update out as we go, so that * on return it points to the tail (always []) of the cloned list. */ void reduce_clone_list( Reduce *rc, PElement *base, PElement *out ) { heap_list_init( out ); (void) reduce_map_list( rc, base, (reduce_map_list_fn) reduce_clone_list_sub, out, NULL ); } /* Sub-fn of below. Add a character to the buffer. */ static void * reduce_add_char( Reduce *rc, PElement *base, char **buf, int *sz ) { /* Overflow? */ if( *sz == 0 ) reduce_error_toobig( rc, "[char]" ); /* Reduce this list element. */ reduce_spine( rc, base ); /* Should be a char. */ if( !PEISCHAR( base ) ) reduce_error_typecheck( rc, base, "reduce_add_char", "char" ); /* Add to buffer. */ **buf = PEGETCHAR( base ); (*buf)++; (*sz)--; return( NULL ); } /* Evaluate a PElement into a string buffer. Return the number of characters * in string, not including '\0' terminator. */ int reduce_get_string( Reduce *rc, PElement *base, char *buf, int n ) { int sz = n - 1; reduce_spine( rc, base ); if( PEISMANAGEDSTRING( base ) ) { /* A static string ... rather than expanding to a list and * parsing, we can copy directly. */ Managedstring *managedstring = PEGETMANAGEDSTRING( base ); im_strncpy( buf, managedstring->string, n ); sz -= strlen( buf ); } else { (void) reduce_map_list( rc, base, (reduce_map_list_fn) reduce_add_char, &buf, &sz ); /* Add '\0' terminator. */ *buf = '\0'; } return( n - sz - 1 ); } static void * reduce_get_lstring_sub( Reduce *rc, PElement *base, GSList **labels, int *n ) { char buf[MAX_STRSIZE]; (void) reduce_get_string( rc, base, buf, MAX_STRSIZE ); *labels = g_slist_append( *labels, g_strdup( buf ) ); return( NULL ); } /* Evaluate to [[char]]. Return the number of strings we read. */ int reduce_get_lstring( Reduce *rc, PElement *base, GSList **labels ) { int n; n = 0; *labels = NULL; (void) reduce_map_list( rc, base, (reduce_map_list_fn) reduce_get_lstring_sub, labels, &n ); return( n ); } /* Get an element as a boolean. */ gboolean reduce_get_bool( Reduce *rc, PElement *base ) { reduce_spine( rc, base ); if( !PEISBOOL( base ) ) reduce_error_typecheck( rc, base, "reduce_get_bool", "bool" ); return( PEGETBOOL( base ) ); } /* Get an element as a real. */ double reduce_get_real( Reduce *rc, PElement *base ) { /* Reduce this element. */ reduce_spine( rc, base ); /* Should be a real. */ if( !PEISREAL( base ) ) reduce_error_typecheck( rc, base, "reduce_get_real", "real" ); return( PEGETREAL( base ) ); } /* Get an element as a class. */ void reduce_get_class( Reduce *rc, PElement *base ) { /* Reduce this element. */ reduce_spine( rc, base ); /* Should be a class. */ if( !PEISCLASS( base ) ) reduce_error_typecheck( rc, base, "reduce_get_class", "class" ); } /* Get an element as an image. */ Imageinfo * reduce_get_image( Reduce *rc, PElement *base ) { /* Reduce this element. */ reduce_spine( rc, base ); /* Should be an image. */ if( !PEISIMAGE( base ) ) reduce_error_typecheck( rc, base, "reduce_get_image", "image" ); return( PEGETII( base ) ); } /* Sub-fn of below. Add a real to the buffer. */ static void * reduce_add_real( Reduce *rc, PElement *base, double **buf, int *sz ) { /* Overflow? */ if( *sz == 0 ) reduce_error_toobig( rc, "[real]" ); /* Add to buffer. */ **buf = reduce_get_real( rc, base ); (*buf)++; (*sz)--; return( NULL ); } /* Get an element as a realvec. Return length of vector. */ int reduce_get_realvec( Reduce *rc, PElement *base, double *buf, int n ) { int sz = n; (void) reduce_map_list( rc, base, (reduce_map_list_fn) reduce_add_real, &buf, &sz ); return( n - sz ); } /* Sub-fn of below. Add an ii to the buffer. */ static void * reduce_add_image( Reduce *rc, PElement *base, Imageinfo ***buf, int *sz ) { /* Overflow? */ if( *sz == 0 ) reduce_error_toobig( rc, "[image]" ); /* Add to buffer. */ **buf = reduce_get_image( rc, base ); (*buf)++; (*sz)--; return( NULL ); } /* Get an element as a realvec. Return length of vector. */ int reduce_get_imagevec( Reduce *rc, PElement *base, Imageinfo **buf, int n ) { int sz = n; (void) reduce_map_list( rc, base, (reduce_map_list_fn) reduce_add_image, &buf, &sz ); return( n - sz ); } /* Test for 1st sz elements are reals. Init sz < 0 for unlimited test. */ static void * reduce_test_real( Reduce *rc, PElement *base, int *sz ) { /* Tested enough? */ if( *sz == 0 ) return( NULL ); (void) reduce_get_real( rc, base ); (*sz)--; return( NULL ); } /* Sub fn ... get the length of a list of real. */ int reduce_get_real_size( Reduce *rc, PElement *base ) { int n; n = -1; (void) reduce_map_list( rc, base, (reduce_map_list_fn) reduce_test_real, &n, NULL ); return( -1 - n ); } /* Sub fn of below ... get the length of one line from a matrix. */ static void * reduce_get_line_size( Reduce *rc, PElement *base, int *w, int *h ) { int l; l = reduce_get_real_size( rc, base ); if( *w == 0 ) *w = l; else if( *w != l ) { error_top( _( "Not rectangular." ) ); error_sub( _( "Matrix of real is not rectangular. " "Found row of length %d, should be %d." ), l, *w ); reduce_throw( rc ); } *h += 1; return( NULL ); } /* Find the size of a matrix. Write xsize/ysize to args. */ void reduce_get_matrix_size( Reduce *rc, PElement *base, int *xsize, int *ysize ) { int w, h; w = 0; h = 0; (void) reduce_map_list( rc, base, (reduce_map_list_fn) reduce_get_line_size, &w, &h ); if( w == 0 || h == 0 ) { error_top( _( "Zero dimension." ) ); error_sub( _( "Matrix has width %d, height %d." ), w, h ); reduce_throw( rc ); } *xsize = w; *ysize = h; } /* Track stuff during a get_matrix in one of these. */ typedef struct { double *buf; /* Start of output buffer */ int mx; /* Size of output buffer */ int w, h; /* Size of matrix we have generated */ int i; /* Current write point */ } GetMatrixInfo; /* Sub-fn of below ... get another line of the matrix. */ static void * reduce_get_line( Reduce *rc, PElement *base, GetMatrixInfo *gmi ) { int l; int remain = gmi->mx - gmi->i; /* Read next line from matrix. */ l = reduce_get_realvec( rc, base, gmi->buf + gmi->i, remain ); /* Overflow? */ if( l > remain ) reduce_error_toobig( rc, "Matrix" ); /* 1st line? */ if( gmi->h == 0 ) gmi->w = l; else if( l != gmi->w ) { error_top( _( "Not rectangular." ) ); error_sub( _( "Matrix of real is not rectangular. " "Found row of length %d, should be %d." ), l, gmi->w ); reduce_throw( rc ); } /* Move pointers on! */ gmi->h++; gmi->i += l; return( NULL ); } /* Get an element as a matrix. Return length of buffer used. * Write xsize/ysize to args. */ int reduce_get_matrix( Reduce *rc, PElement *base, double *buf, int n, int *xsize, int *ysize ) { GetMatrixInfo gmi; gmi.buf = buf; gmi.mx = n; gmi.w = gmi.h = 0; gmi.i = 0; (void) reduce_map_list( rc, base, (reduce_map_list_fn) reduce_get_line, &gmi, NULL ); *xsize = gmi.w; *ysize = gmi.h; return( gmi.i ); } /* Test for object is the empty list. */ gboolean reduce_is_elist( Reduce *rc, PElement *base ) { reduce_spine( rc, base ); if( PEISELIST( base ) ) return( TRUE ); return( FALSE ); } /* Test for object is any list. */ gboolean reduce_is_list( Reduce *rc, PElement *base ) { reduce_spine( rc, base ); if( PEISLIST( base ) ) return( TRUE ); return( FALSE ); } /* Sub-fn of below. Test for 1st sz elements are char. We have several * possible return values :-( * * - evaluation error ... we can throw an exception * - we find a non-char in the first n elements ... return -1 * - we have tested the first n and want to stop looking ... return -2 * - all OK so far, but we want to keep looking ... return NULL */ static void * reduce_test_char( Reduce *rc, PElement *base, int *sz ) { /* Tested enough? */ if( *sz == 0 ) return( (void *) -2 ); /* Reduce this list element. */ reduce_spine( rc, base ); /* Should be a char. */ if( !PEISCHAR( base ) ) return( (void *) -1 ); /* Move on. */ (*sz)--; return( NULL ); } /* Test the first n elements of a list are char. n < 0 means test all * elements. */ static gboolean reduce_n_is_string( Reduce *rc, PElement *base, int sz ) { void *result; reduce_spine( rc, base ); /* We know managedstrings are strings without needing to expand them. */ if( PEISMANAGEDSTRING( base ) ) return( TRUE ); /* reduce_map_list() will throw an exeception if we give it a * non-list. */ if( !PEISLIST( base ) ) return( FALSE ); result = reduce_map_list( rc, base, (reduce_map_list_fn) reduce_test_char, &sz, NULL ); if( result == (void *) -1 ) return( FALSE ); return( TRUE ); } /* Test for object is string. Just test the first few elements, so we * allow infinite strings. */ gboolean reduce_is_string( Reduce *rc, PElement *base ) { return( reduce_n_is_string( rc, base, 4 ) ); } /* Test for list is a finite string. */ gboolean reduce_is_finitestring( Reduce *rc, PElement *base ) { return( reduce_n_is_string( rc, base, -1 ) ); } /* Test for list is realvec. */ gboolean reduce_is_realvec( Reduce *rc, PElement *base ) { int sz = 4; reduce_spine( rc, base ); if( !PEISLIST( base ) ) return( FALSE ); if( reduce_map_list( rc, base, (reduce_map_list_fn) reduce_test_real, &sz, NULL ) ) return( FALSE ); return( TRUE ); } /* Test for 1st sz elements are reals. Init sz < 0 for unlimited test. */ static void * reduce_test_image( Reduce *rc, PElement *base, int *sz ) { /* Tested enough? */ if( *sz == 0 ) return( NULL ); (void) reduce_get_image( rc, base ); (*sz)--; return( NULL ); } /* Test for list is imagevec. */ gboolean reduce_is_imagevec( Reduce *rc, PElement *base ) { int sz = 4; reduce_spine( rc, base ); if( !PEISLIST( base ) ) return( FALSE ); if( reduce_map_list( rc, base, (reduce_map_list_fn) reduce_test_image, &sz, NULL ) ) return( FALSE ); return( TRUE ); } /* Sub-fn of below ... test another line of the matrix. */ static void * reduce_test_line( Reduce *rc, PElement *base, int *w, int *h ) { /* Test next line from matrix. */ if( !reduce_is_realvec( rc, base ) ) return( base ); return( NULL ); } /* Test for object is [[real]] .. don't test for rectangularness. */ gboolean reduce_is_matrix( Reduce *rc, PElement *base ) { reduce_spine( rc, base ); if( !PEISLIST( base ) ) return( FALSE ); if( reduce_map_list( rc, base, (reduce_map_list_fn) reduce_test_line, NULL, NULL ) ) return( FALSE ); return( TRUE ); } /* Test for object is a class. */ gboolean reduce_is_class( Reduce *rc, PElement *klass ) { reduce_spine( rc, klass ); if( PEISCLASS( klass ) ) return( TRUE ); return( FALSE ); } /* Test for instance is an exact instance ... ie. no inheritance. FIXME ... yuk! strcmp()!! */ gboolean reduce_is_instanceof_exact( Reduce *rc, const char *name, PElement *instance ) { char txt[256]; VipsBuf buf = VIPS_BUF_STATIC( txt ); if( !reduce_is_class( rc, instance ) ) return( FALSE ); symbol_qualified_name( PEGETCLASSCOMPILE( instance )->sym, &buf ); if( strcmp( name, vips_buf_all( &buf ) ) == 0 ) return( TRUE ); return( FALSE ); } /* Test for thing is an instance of the named class symbol. */ gboolean reduce_is_instanceof( Reduce *rc, const char *name, PElement *instance ) { PElement super; reduce_spine( rc, instance ); if( !PEISCLASS( instance ) ) return( FALSE ); if( reduce_is_instanceof_exact( rc, name, instance ) ) return( TRUE ); if( class_get_super( instance, &super ) && !PEISELIST( &super ) ) return( reduce_is_instanceof( rc, name, &super ) ); return( FALSE ); } /* Find the length of a list, with a bailout for the largest size we test. * Handy for avoiding finding the length of "[1..]". */ int reduce_list_length_max( Reduce *rc, PElement *base, int max_length ) { PElement p; int i; /* Reduce to first element. */ p = *base; reduce_spine( rc, &p ); /* Does it look like the start of a list? */ if( !PEISLIST( &p ) ) reduce_error_typecheck( rc, &p, _( "List length" ), "list" ); if( PEISMANAGEDSTRING( &p ) ) { Managedstring *managedstring = PEGETMANAGEDSTRING( &p ); i = strlen( managedstring->string ); } else { /* Loop down list. */ for( i = 0; PEISFLIST( &p ); i++ ) { HeapNode *hn; if( max_length != -1 && i > max_length ) reduce_error_toobig( rc, "list" ); reduce_get_list( rc, &p ); hn = PEGETVAL( &p ); PEPOINTRIGHT( hn, &p ); reduce_spine( rc, &p ); } g_assert( PEISELIST( &p ) ); } return( i ); } /* Find the length of a list. */ int reduce_list_length( Reduce *rc, PElement *base ) { return( reduce_list_length_max( rc, base, -1 ) ); } /* Point "out" at the nth element of a list. Index from 0. */ void reduce_list_index( Reduce *rc, PElement *base, int n, PElement *out ) { PElement p; int i; HeapNode *hn; if( n < 0 ) { error_top( _( "Bad argument." ) ); error_sub( _( "List index must be positive, not %d" ), n ); reduce_throw( rc ); } p = *base; reduce_spine( rc, &p ); if( !PEISLIST( &p ) ) reduce_error_typecheck( rc, &p, _( "List index" ), "list" ); for( i = n;; ) { if( PEISELIST( &p ) ) { error_top( _( "Bad argument." ) ); error_sub( _( "List only has %d elements, " "unable to get element %d." ), n - i, n ); reduce_throw( rc ); } g_assert( PEISFLIST( &p ) ); reduce_get_list( rc, &p ); hn = PEGETVAL( &p ); PEPOINTRIGHT( hn, &p ); if( --i < 0 ) break; reduce_spine( rc, &p ); } if( trace_flags & TRACE_OPERATOR ) { VipsBuf *buf = trace_push(); trace_pelement( base ); vips_buf_appendf( buf, " \"?\" %d ->\n", n ); } PEPOINTLEFT( hn, out ); if( trace_flags & TRACE_OPERATOR ) { trace_result( TRACE_OPERATOR, out ); trace_pop(); } } /* No args allowed error. */ static void argserror( Reduce *rc, PElement *a ) { char txt[MAX_ERROR_FRAG]; VipsBuf buf = VIPS_BUF_STATIC( txt ); itext_value_ev( rc, &buf, a ); error_top( _( "No arguments allowed." ) ); error_sub( _( "Object \"%s\" should have no arguments." ), vips_buf_all( &buf ) ); reduce_throw( rc ); } #ifdef WHNF_DEBUG /* Test for PElement is in weak head-normal form. */ static gboolean is_WHNF( PElement *out ) { PElement spine; int i; HeapNode *hn; Symbol *sym; Compile *compile; int na; /* Might be a base type ... */ if( PEISREAL( out ) || PEISCOMPLEX( out ) || PEISNUM( out ) || PEISCHAR( out ) || PEISBOOL( out ) || PEISTAG( out ) || PEISIMAGE( out ) || PEISLIST( out ) || PEISCLASS( out ) || PEISSYMREF( out ) || PEISCOMPILEREF( out ) || PEISNOVAL( out ) ) return( TRUE ); /* Must be a function or generator ... loop down the spine, counting * args. */ for( spine = *out, i = 0; PEGETTYPE( &spine ) == ELEMENT_NODE; i++ ) { hn = PEGETVAL( &spine ); if( hn->type != TAG_APPL ) break; PEPOINTLEFT( PEGETVAL( &spine ), &spine ); } if( PEISBINOP( &spine ) ) { if( i > 1 ) return( FALSE ); } else if( PEISUNOP( &spine ) ) { if( i > 0 ) return( FALSE ); } else if( PEISCOMB( &spine ) ) { if( i > nargs[(int) PEGETCOMB( &spine )] - 1 ) return( FALSE ); } else if( PEISCONSTRUCTOR( &spine ) ) { compile = PEGETCOMPILE( &spine ); na = compile->nparam + compile->nsecret; if( i > na ) { printf( "constructor %s with %d args ", symbol_name( sym ), i ); printf( "should have %d args\n", compile->nparam ); return( FALSE ); } } else if( PEISSYMBOL( &spine ) ) { /* If it's a VIPS or a builtin with too few args, it's OK. */ sym = SYMBOL( PEGETVAL( &spine ) ); if( sym->type == SYM_EXTERNAL ) { if( i < sym->fn_nargs ) return( TRUE ); } else if( sym->type == SYM_BUILTIN ) { if( i < sym->builtin->nargs ) return( TRUE ); } /* Nope ... should have been reduced. */ return( FALSE ); } else { return( FALSE ); } return( TRUE ); } #endif /*WHNF_DEBUG*/ /* Main reduction machine loop. */ void reduce_spine( Reduce *rc, PElement *out ) { Heap *heap = rc->heap; PElement np; /* Check for possible C stack overflow ... can't go over 2M on most * systems if we're using (or any of our libs are using) threads. */ if( (char *) main_c_stack_base - (char *) &rc > 2000000 ) { error_top( _( "Overflow error." ) ); error_sub( _( "C stack overflow. Expression too complex." ) ); reduce_throw( rc ); } /* Point node pointer at reduction start. */ np = *out; /* Start a new frame. */ RSPUSHFRAME( rc, out ); reduce_start: reduce_total_recomputations += 1; if( (reduce_total_recomputations % 100000) == 0 ) { if( progress_update_expr( reduce_current_expr ) ) { error_top( _( "Cancelled." ) ); error_sub( _( "Evaluation cancelled." ) ); reduce_throw( rc ); } } #ifdef DEBUG_TRACE { char txt[1024]; VipsBuf buf = VIPS_BUF_STATIC( txt ); graph_pelement( rc->heap, &buf, out, TRUE ); printf( "reduce_spine: %s\n", vips_buf_all( &buf ) ); } #endif /*DEBUG_TRACE*/ switch( PEGETTYPE( &np ) ) { case ELEMENT_CHAR: case ELEMENT_BOOL: case ELEMENT_ELIST: case ELEMENT_TAG: case ELEMENT_SYMREF: case ELEMENT_COMPILEREF: case ELEMENT_MANAGED: /* Base type .. no more reduction needed. */ /* Should have no args. */ if( RSFRAMESIZE( rc ) != 0 ) argserror( rc, &np ); break; case ELEMENT_CONSTRUCTOR: { Compile *compile; HeapNode **arg; PElement rhs1; int na; /* Class constructor. */ compile = PEGETCOMPILE( &np ); g_assert( is_class( compile ) ); /* Class args ... real params, secret params. */ na = compile->nparam + compile->nsecret; /* Get args. */ if( !RSCHECKARGS( rc, na ) ) break; arg = &RSGET( rc, na - 1 ); if( na == 0 ) { /* Zero args ... just construct on top of the current * node pointer. */ action_proc_construct( rc, compile, arg, &np ); goto reduce_start; } /* Overwrite RHS of arg[0], make LHS into COMB_I. */ PEPOINTRIGHT( arg[0], &rhs1 ); action_proc_construct( rc, compile, arg, &rhs1 ); PPUTLEFT( arg[0], ELEMENT_COMB, COMB_I ); RSPOP( rc, na ); if( RSFRAMEEMPTY( rc ) ) np = RSGETWB( rc ); else PEPOINTLEFT( RSGET( rc, 0 ), &np ); PEPUTP( &np, GETRT( arg[0] ), GETRIGHT( arg[0] ) ); goto reduce_start; } case ELEMENT_SYMBOL: { Symbol *sym = PEGETSYMBOL( &np ); g_assert( sym ); switch( sym->type ) { case SYM_VALUE: { Compile *compile = sym->expr->compile; /* Make sure it's clean ... we can get * links to dirty syms through dynamic dependencies. */ if( sym->dirty ) { error_top( _( "No value." ) ); error_sub( _( "Symbol \"%s\" has no value." ), symbol_name( sym ) ); reduce_throw( rc ); } /* We copy code, but link to values. We have to take a * fresh copy of code as (together with any args our * context might supply) it will expand to a value, * which we might then edit in a row. We want to make * sure any edits do not zap the original code. */ if( compile->nparam + compile->nsecret == 0 ) { /* Make sure the value has copied to the main * heap. */ if( PEISNOVAL( &sym->expr->root ) ) { gboolean res; res = reduce_regenerate( sym->expr, &sym->expr->root ); expr_new_value( sym->expr ); if( !res ) reduce_throw( rc ); } /* Link to this sym's value. */ PEPUTPE( &np, &sym->expr->root ); } else /* Copy compiled code from the private compile * heap. */ if( !heap_copy( rc->heap, compile, &np ) ) reduce_throw( rc ); goto reduce_start; } case SYM_PARAM: /* All params should be taken out by var abstract. */ printf( "sym-param found, argh: " ); symbol_name_print( sym ); printf( "\n" ); g_assert( FALSE ); break; case SYM_EXTERNAL: { HeapNode **arg; int na; /* A VIPS function. */ na = sym->fn_nargs; /* Get args. */ if( !RSCHECKARGS( rc, na ) ) /* Not enough ... function result. */ break; /* Run strictly. */ arg = &RSGET( rc, na - 1 ); action_dispatch( rc, NULL, reduce_spine, -1, sym->function->name, FALSE, (ActionFn) call_run, na, arg, sym->function ); /* Find output element. */ RSPOP( rc, na ); if( RSFRAMEEMPTY( rc ) ) np = RSGETWB( rc ); else PEPOINTLEFT( RSGET( rc, 0 ), &np ); /* Write to node above. */ PEPUTP( &np, GETRT( arg[0] ), GETRIGHT( arg[0] ) ); goto reduce_start; } case SYM_BUILTIN: { HeapNode **arg; int na; /* A builtin function. */ na = sym->builtin->nargs; /* Get args. */ if( !RSCHECKARGS( rc, na ) ) /* Not enough ... function result. */ break; /* Run strictly. */ arg = &RSGET( rc, na - 1 ); action_dispatch( rc, NULL, reduce_spine, -1, sym->builtin->name, sym->builtin->override, (ActionFn) builtin_run, na, arg, sym->builtin ); /* Find output element. */ RSPOP( rc, na ); if( RSFRAMEEMPTY( rc ) ) np = RSGETWB( rc ); else PEPOINTLEFT( RSGET( rc, 0 ), &np ); /* Write to node above. */ PEPUTP( &np, GETRT( arg[0] ), GETRIGHT( arg[0] ) ); goto reduce_start; } case SYM_ZOMBIE: { Symbol *new_sym; /* Could be defined on an enclosing scope. Search * outwards for a definition. */ if( !(new_sym = compile_resolve_top( sym )) ) { symbol_not_defined( sym ); reduce_throw( rc ); } /* Zap linked symbol into graph. */ PEPUTP( &np, ELEMENT_SYMBOL, new_sym ); goto reduce_start; } case SYM_ROOT: case SYM_WORKSPACE: case SYM_WORKSPACEROOT: /* Becomes a symref ... base type. */ PEPUTP( &np, ELEMENT_SYMREF, sym ); /* Should have no args. */ if( RSFRAMESIZE( rc ) != 0 ) argserror( rc, &np ); break; default: g_assert( FALSE ); } break; } case ELEMENT_NODE: { HeapNode *hn; /* Get the node that np points to. */ hn = PEGETVAL( &np ); switch( hn->type ) { case TAG_CONS: case TAG_DOUBLE: case TAG_COMPLEX: case TAG_CLASS: /* Base type ... reduction all done! We don't test * that class's superclasses are base, as they aren't * always for non-top-level base types ... see * reduce_pelement(). */ /* Should have no args. */ if( RSFRAMESIZE( rc ) != 0 ) argserror( rc, &np ); break; case TAG_APPL: /* Function application ... push this node and loop * down the LHS looking for a combinator. */ /* Push this node. */ RSPUSH( rc, hn ); /* Move down left branch. */ PEPOINTLEFT( hn, &np ); goto reduce_start; case TAG_GEN: { double d1; double d2; double d3 = 0.0; /* keeps gcc happy */ gboolean limit; HeapNode *hn1, *hn2; /* Extract next, step, final. */ d1 = GETLEFT( hn )->body.num; d2 = GETLEFT( GETRIGHT( hn ) )->body.num; limit = GETRT( GETRIGHT( hn ) ) != ELEMENT_ELIST; if( limit ) d3 = GETRIGHT( GETRIGHT( hn ) )->body.num; if( trace_flags & TRACE_OPERATOR ) { VipsBuf *buf = trace_push(); if( limit ) vips_buf_appendf( buf, "generator %g %g %g ->\n", d1, d2, d3 ); else vips_buf_appendf( buf, "generator %g %g ->\n", d1, d2 ); } /* At end? */ if( GETRT( GETRIGHT( hn ) ) != ELEMENT_ELIST && ((d2 > 0 && d1 > d3) || (d2 < 0 && d1 < d3)) ) { /* Make I node for end. */ hn->type = TAG_APPL; PPUT( hn, ELEMENT_COMB, COMB_I, ELEMENT_ELIST, NULL ); /* Write back to node above. */ PEPUTP( &np, ELEMENT_ELIST, NULL ); if( trace_flags & TRACE_OPERATOR ) { trace_result( TRACE_OPERATOR, &np ); trace_pop(); } /* All done! */ break; } /* Not at end, or no final. Generate new gen node. */ if( NEWNODE( heap, hn1 ) ) reduce_throw( rc ); *hn1 = *hn; /* Change hn into CONS node. */ hn->type = TAG_CONS; PPUTRIGHT( hn, ELEMENT_NODE, hn1 ); /* Generate new number. */ if( NEWNODE( heap, hn2 ) ) reduce_throw( rc ); hn2->type = TAG_DOUBLE; hn2->body.num = d1 + d2; PPUTLEFT( hn1, ELEMENT_NODE, hn2 ); if( trace_flags & TRACE_OPERATOR ) { trace_result( TRACE_OPERATOR, &np ); trace_pop(); } /* And loop! */ goto reduce_start; } case TAG_FILE: { Managedfile *managedfile = MANAGEDFILE( GETLEFT( hn ) ); int ch = managedfile_getc( managedfile ); /* -1 means error, 0 means EOF. */ if( ch == -1 ) reduce_throw( rc ); else if( ch == 0 ) { /* Turn us into []. */ hn->type = TAG_APPL; PPUT( hn, ELEMENT_COMB, COMB_I, ELEMENT_ELIST, NULL ); } else { HeapNode *hn1; /* Not at end ... make another CONS. */ if( NEWNODE( heap, hn1 ) ) reduce_throw( rc ); *hn1 = *hn; hn->type = TAG_CONS; PPUT( hn, ELEMENT_CHAR, GUINT_TO_POINTER( ch ), ELEMENT_NODE, hn1 ); } /* Loop again with new np. */ goto reduce_start; } case TAG_FREE: g_assert( FALSE ); default: g_assert( FALSE ); } break; } case ELEMENT_COMB: { CombinatorType comb = PEGETCOMB( &np ); HeapNode *hn1, *hn2; HeapNode **arg; int na; na = nargs[(int) comb]; /* Get args. */ if( !RSCHECKARGS( rc, na ) ) /* Not enough ... function result. */ break; /* Extract args. */ arg = &RSGET( rc, na - 1 ); switch( comb ) { case COMB_S: /* Rewrite graph for S a b c => (a c) (b c). */ /* Make (b c) appl node. */ if( NEWNODE( heap, hn1 ) ) reduce_throw( rc ); *hn1 = *arg[0]; PPUTLEFT( hn1, GETRT( arg[1] ), GETRIGHT( arg[1] ) ); PPUTRIGHT( arg[0], ELEMENT_NODE, hn1 ); /* Make (a c) appl node. */ if( NEWNODE( heap, hn2 ) ) reduce_throw( rc ); *hn2 = *hn1; PPUTLEFT( hn2, GETRT( arg[2] ), GETRIGHT( arg[2] ) ); PPUTLEFT( arg[0], ELEMENT_NODE, hn2 ); /* End of S ... now pop three, push 1 and loop. */ RSPOP( rc, 2 ); PEPOINTLEFT( arg[0], &np ); goto reduce_start; case COMB_SL: /* Rewrite graph for Sl a b c => (a c) b. */ /* Make (a c) appl node. */ if( NEWNODE( heap, hn1 ) ) reduce_throw( rc ); *hn1 = *arg[0]; PPUTLEFT( hn1, GETRT( arg[2] ), GETRIGHT( arg[2] ) ); PPUT( arg[0], ELEMENT_NODE, hn1, GETRT( arg[1] ), GETRIGHT( arg[1] ) ); /* End of SL ... now pop three, push 1 and loop. */ RSPOP( rc, 2 ); PEPOINTLEFT( arg[0], &np ); goto reduce_start; case COMB_SR: /* Rewrite graph for Sr a b c => a (b c). */ /* Make (b c) appl node. */ if( NEWNODE( heap, hn1 ) ) reduce_throw( rc ); *hn1 = *arg[0]; PPUTLEFT( hn1, GETRT( arg[1] ), GETRIGHT( arg[1] ) ); PPUT( arg[0], GETRT( arg[2] ), GETRIGHT( arg[2] ), ELEMENT_NODE, hn1 ); /* End of SR ... now pop three, push 1 and loop. */ RSPOP( rc, 2 ); PEPOINTLEFT( arg[0], &np ); goto reduce_start; case COMB_I: /* No action necessary. */ break; case COMB_K: /* Make I node. */ PPUT( arg[0], ELEMENT_COMB, COMB_I, GETRT( arg[1] ), GETRIGHT( arg[1] ) ); break; case COMB_GEN: { double d1; double d2 = 0.0; /* Don't need to init, but */ double d3 = 0.0; /* keeps gcc happy */ PElement rhs1, rhs2, rhs3; PEPOINTRIGHT( arg[2], &rhs1 ); PEPOINTRIGHT( arg[1], &rhs2 ); PEPOINTRIGHT( arg[0], &rhs3 ); reduce_spine_strict( rc, &rhs1 ); reduce_spine_strict( rc, &rhs2 ); reduce_spine_strict( rc, &rhs3 ); /* May have done ourselves in the process. */ if( arg[0]->type != TAG_APPL ) break; /* Typecheck. */ if( !PEISREAL( &rhs1 ) ) reduce_error_typecheck( rc, &rhs1, _( "List generator" ), "real" ); d1 = PEGETREAL( &rhs1 ); if( !PEISELIST( &rhs2 ) && !PEISREAL( &rhs2 ) ) reduce_error_typecheck( rc, &rhs2, _( "List generator" ), "real" ); if( PEISREAL( &rhs2 ) ) d2 = PEGETREAL( &rhs2 ); if( !PEISELIST( &rhs3 ) && !PEISREAL( &rhs3 ) ) reduce_error_typecheck( rc, &rhs3, _( "List generator" ), "real" ); if( PEISREAL( &rhs3 ) ) d3 = PEGETREAL( &rhs3 ); if( trace_flags & TRACE_OPERATOR ) { VipsBuf *buf = trace_push(); vips_buf_appends( buf, "generator constructor " ); trace_args( arg, 3 ); } /* If next is missing, set default. */ if( PEISREAL( &rhs2 ) ) /* Next is there, calculate step. */ d2 = d2 - d1; else { /* If final is missing, default is 1. */ if( PEISELIST( &rhs3 ) ) d2 = 1; else { /* Final is there, choose 1 or -1. */ if( d1 < d3 ) d2 = 1; else d2 = -1; } } /* Make node for pairing next and final fields. */ if( NEWNODE( heap, hn1 ) ) reduce_throw( rc ); hn1->type = TAG_COMPLEX; PPUT( hn1, GETRT( arg[1] ), GETRIGHT( arg[1] ), GETRT( arg[0] ), GETRIGHT( arg[0] ) ); /* Link to old root, make gen node. */ arg[0]->type = TAG_GEN; PPUT( arg[0], GETRT( arg[2] ), GETRIGHT( arg[2] ), ELEMENT_NODE, hn1 ); /* Make step node. */ if( NEWNODE( heap, hn2 ) ) reduce_throw( rc ); hn2->type = TAG_DOUBLE; hn2->body.num = d2; PPUTLEFT( hn1, ELEMENT_NODE, hn2 ); if( trace_flags & TRACE_OPERATOR ) { VipsBuf *buf = trace_current(); vips_buf_appends( buf, " " ); trace_node( arg[0] ); vips_buf_appends( buf, "\n" ); trace_text( TRACE_OPERATOR, "%s", vips_buf_all( buf ) ); trace_pop(); } /* Find output element. */ RSPOP( rc, 3 ); if( RSFRAMEEMPTY( rc ) ) np = RSGETWB( rc ); else PEPOINTLEFT( RSGET( rc, 0 ), &np ); /* Restart from there. */ goto reduce_start; } default: g_assert( FALSE ); } /* Find output element. */ RSPOP( rc, na ); if( RSFRAMEEMPTY( rc ) ) np = RSGETWB( rc ); else PEPOINTLEFT( RSGET( rc, 0 ), &np ); /* Write to above node. */ PEPUTP( &np, GETRT( arg[0] ), GETRIGHT( arg[0] ) ); /* Loop again with new np. */ goto reduce_start; /*NOTREACHED*/ } case ELEMENT_BINOP: { BinOp bop = PEGETBINOP( &np ); HeapNode **arg; Compile *compile; PElement rhs1, rhs2; /* Three args to binops ... first is the Compile that built us * (for error messages), other two are actual args. */ if( !RSCHECKARGS( rc, 3 ) ) /* Not enough ... function result. */ break; /* Extract args. */ arg = &RSGET( rc, 2 ); compile = COMPILE( GETRIGHT( arg[2] ) ); /* CONS is very, very lazy ... more like a combinator. */ if( bop == BI_CONS ) { PEPOINTRIGHT( arg[1], &rhs1 ); if( trace_flags & TRACE_OPERATOR ) { trace_push(); PEPOINTRIGHT( arg[0], &rhs2 ); trace_binop( compile, &rhs1, bop, &rhs2 ); } arg[0]->type = TAG_CONS; PPUTLEFT( arg[0], PEGETTYPE( &rhs1 ), PEGETVAL( &rhs1 ) ); if( trace_flags & TRACE_OPERATOR ) { VipsBuf *buf = trace_current(); vips_buf_appends( buf, " " ); trace_node( arg[0] ); vips_buf_appends( buf, "\n" ); trace_text( TRACE_OPERATOR, "%s", vips_buf_all( buf ) ); trace_pop(); } RSPOP( rc, 3 ); break; } action_proc_bop( rc, compile, bop, arg ); /* Find output element. */ RSPOP( rc, 3 ); if( RSFRAMEEMPTY( rc ) ) np = RSGETWB( rc ); else PEPOINTLEFT( RSGET( rc, 0 ), &np ); /* Write to node above. */ PEPUTP( &np, GETRT( arg[0] ), GETRIGHT( arg[0] ) ); /* Loop again with new np. */ goto reduce_start; } case ELEMENT_UNOP: { HeapNode **arg; Compile *compile; /* Some unary operator. First arg is the compile that built * us, 2nd is the actual arg that might need reducing. */ if( !RSCHECKARGS( rc, 2 ) ) /* Not enough ... function result. */ break; /* Extract arg. */ arg = &RSGET( rc, 1 ); compile = COMPILE( GETRIGHT( arg[1] ) ); action_dispatch( rc, compile, reduce_spine, PEGETUNOP( &np ), OPERATOR_NAME( PEGETUNOP( &np ) ), TRUE, (ActionFn) action_proc_uop, 1, arg, NULL ); /* Find output element. */ RSPOP( rc, 2 ); if( RSFRAMEEMPTY( rc ) ) np = RSGETWB( rc ); else PEPOINTLEFT( RSGET( rc, 0 ), &np ); /* Write to above node. */ PEPUTP( &np, GETRT( arg[0] ), GETRIGHT( arg[0] ) ); /* Loop again with new np. */ goto reduce_start; } case ELEMENT_NOVAL: break; default: g_assert( FALSE ); } /* Unwind stack, restore frame pointer. */ RSPOPFRAME( rc ); #ifdef WHNF_DEBUG /* Should now be in WHNF ... test! */ if( !is_WHNF( out ) ) { char txt[1000]; VipsBuf buf = VIPS_BUF_STATIC( txt ); graph_pelement( heap, &buf, out, TRUE ); printf( "*** internal error:\n" ); printf( "result of reduce_spine not in WHNF: " ); printf( "%s\n", vips_buf_all( &buf ) ); reduce_throw( rc ); } #endif /*WHNF_DEBUG*/ } /* Strict reduction ... fully eval all lists etc. */ void reduce_spine_strict( Reduce *rc, PElement *np ) { PElement rhs, lhs; /* Make sure this element is reduced. */ reduce_spine( rc, np ); /* If it's a non-empty list, may need to reduce inside. Not managed * strings though, we can leave them unevaluated. */ if( PEISFLIST( np ) && !PEISMANAGEDSTRING( np ) ) { /* Recurse for head and tail. */ HeapNode *hn = PEGETVAL( np ); PEPOINTLEFT( hn, &lhs ); PEPOINTRIGHT( hn, &rhs ); reduce_spine_strict( rc, &lhs ); reduce_spine_strict( rc, &rhs ); } } /* Free a Reduce. */ void reduce_destroy( Reduce *rc ) { heap_unregister_reduce( rc->heap, rc ); UNREF( rc->heap ); IM_FREE( rc ); } /* Max cells function for main reduce engine. Read from Preferences, and scale * by the number of workspaces we have open. */ static int reduce_heap_max_fn( Heap *heap ) { return( workspace_number() * MAX_HEAPSIZE ); } /* Build a Reduce. */ Reduce * reduce_new( void ) { /* Initial heap size. Big enough that we won't need to grow just * loading prefs and standard stuff. */ const int stsz = 100000; /* Heap increment.. */ const int incr = 2000; Reduce *rc = INEW( NULL, Reduce ); if( !rc ) return( NULL ); rc->sp = 0; rc->fsp = 0; rc->heap = NULL; rc->running = 0; rc->heap = heap_new( NULL, reduce_heap_max_fn, stsz, incr ); g_object_ref( G_OBJECT( rc->heap ) ); iobject_sink( IOBJECT( rc->heap ) ); heap_register_reduce( rc->heap, rc ); iobject_set( IOBJECT( rc->heap ), "reduce-heap", NULL ); return( rc ); } /* Reduce a PElement to a base type. Return TRUE/FALSE, no longjmp. */ gboolean reduce_pelement( Reduce *rc, ReduceFunction fn, PElement *out ) { gboolean res = TRUE; REDUCE_CATCH_START( FALSE ); fn( reduce_context, out ); REDUCE_CATCH_STOP; return( res ); } /* Make sure a symbol's value is registered with the main GC. */ void reduce_register( Symbol *sym ) { Reduce *rc = reduce_context; Heap *heap = rc->heap; heap_register_element( heap, &sym->base ); } /* Make sure a symbol's value is not registered with the main GC. */ void reduce_unregister( Symbol *sym ) { Reduce *rc = reduce_context; Heap *heap = rc->heap; heap_unregister_element( heap, &sym->base ); } /* Copy and evaluate compiled code into element pointed to by out. */ gboolean reduce_regenerate( Expr *expr, PElement *out ) { Reduce *rc = reduce_context; Heap *heap = rc->heap; /* Clear any run state from old expr value. */ expr_error_clear( expr ); if( slist_map( expr->dynamic_links, (SListMapFn) link_expr_destroy, NULL ) ) return( FALSE ); /* Copy new code in. */ if( !heap_copy( heap, expr->compile, out ) ) { expr_error_set( expr ); return( FALSE ); } #ifdef DEBUG_REGEN { char txt[1024]; VipsBuf buf = VIPS_BUF_STATIC( txt ); graph_pelement( heap, &buf, out, TRUE ); printf( "reduce_regenerate: reducing " ); expr_name_print( expr ); printf( "graph: %s\n", vips_buf_all( &buf ) ); } #endif /*DEBUG_REGEN*/ reduce_current_expr = expr; if( !reduce_pelement( rc, reduce_spine, out ) ) { reduce_current_expr = NULL; expr_error_set( expr ); (void) heap_gc( heap ); return( FALSE ); } reduce_current_expr = NULL; #ifdef DEBUG_REGEN { char txt[1024]; VipsBuf buf = VIPS_BUF_STATIC( txt ); /* Force immediate GC to pick up any stray pointers. */ if( !heap_gc( heap ) ) { expr_error_set( expr ); return( FALSE ); } graph_pelement( heap, &buf, out, TRUE ); printf( "reduce_regenerate: reduced " ); expr_name_print( expr ); printf( " to: %s\n", vips_buf_all( &buf ) ); } #endif /*DEBUG_REGEN*/ return( TRUE ); } /* Regenerate an (expr this) pair. */ gboolean reduce_regenerate_member( Expr *expr, PElement *ths, PElement *out ) { Reduce *rc = reduce_context; Heap *heap = rc->heap; PElement e; HeapNode *apl; /* New (NULL this) pair. */ if( NEWNODE( heap, apl ) ) { expr_error_set( expr ); return( FALSE ); } apl->type = TAG_APPL; PPUT( apl, ELEMENT_NOVAL, (void *) 10, PEGETTYPE( ths ), PEGETVAL( ths ) ); PEPUTP( out, ELEMENT_NODE, apl ); /* Link code to node. */ PEPOINTLEFT( apl, &e ); if( !reduce_regenerate( expr, &e ) ) return( FALSE ); #ifdef DEBUG_REGEN_MEMBER { char txt[1024]; VipsBuf buf = VIPS_BUF_STATIC( txt ); graph_pelement( heap, &buf, out, TRUE ); printf( "reduce_regenerate_member: " ); expr_name_print( expr ); printf( " new code: %s\n", vips_buf_all( &buf ) ); } #endif /*DEBUG_REGEN_MEMBER*/ /* Do initial reduction. */ if( !reduce_pelement( rc, reduce_spine, out ) ) { /* Failure! Junk the half-made value. */ expr_error_set( expr ); (void) heap_gc( heap ); return( FALSE ); } /* Special case: if this is a "super" row, we need to rebuild the * class. */ if( is_super( expr->compile->sym ) ) { Compile *parent = compile_get_parent( expr->compile ); PElement instance; PEPOINTE( &instance, &expr->row->scol->base ); if( !class_new_super( heap, parent, ths, &instance ) ) return( FALSE ); } return( TRUE ); } nip2-8.7.0/src/classmodel.h0000644000175000017500000001132313224651032012403 00000000000000/* like a heapmodel, but we represent a class in the heap */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* Member types we automate. */ typedef enum { CLASSMODEL_MEMBER_INT, CLASSMODEL_MEMBER_ENUM, /* Like int, but extent has max value */ CLASSMODEL_MEMBER_BOOLEAN, CLASSMODEL_MEMBER_DOUBLE, CLASSMODEL_MEMBER_STRING, CLASSMODEL_MEMBER_STRING_LIST, CLASSMODEL_MEMBER_REALVEC_FIXED,/* Eg. Colour's triplet */ CLASSMODEL_MEMBER_MATRIX, CLASSMODEL_MEMBER_OPTIONS, CLASSMODEL_MEMBER_IMAGE } ClassmodelMemberType; /* A matrix value. */ typedef struct _MatrixValue { double *coeff; /* Base coeffs */ int width; /* Size of matrix */ int height; } MatrixValue; /* An image value. */ typedef struct { Imageinfo *ii; /* Can get "changed" for reload if the file changes behind our backs. * Recalc the classmodel if this happens. */ guint file_changed_sid; Classmodel *classmodel; } ImageValue; /* A member needing automation. */ typedef struct { ClassmodelMemberType type; void *details; /* eg. the set of allowed options */ int extent; /* Vector length, enum max, etc. */ const char *member_name; /* Name as known in nip class defs */ const char *save_name; /* As known in save files */ const char *user_name; /* i18n'd name for dialogs */ guint offset; /* Struct offset */ } ClassmodelMember; #define TYPE_CLASSMODEL (classmodel_get_type()) #define CLASSMODEL( obj ) \ (G_TYPE_CHECK_INSTANCE_CAST( (obj), TYPE_CLASSMODEL, Classmodel )) #define CLASSMODEL_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_CAST( (klass), TYPE_CLASSMODEL, ClassmodelClass)) #define IS_CLASSMODEL( obj ) \ (G_TYPE_CHECK_INSTANCE_TYPE( (obj), TYPE_CLASSMODEL )) #define IS_CLASSMODEL_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_TYPE( (klass), TYPE_CLASSMODEL )) #define CLASSMODEL_GET_CLASS( obj ) \ (G_TYPE_INSTANCE_GET_CLASS( (obj), TYPE_CLASSMODEL, ClassmodelClass )) struct _Classmodel { Heapmodel parent_class; /* Set if we have graphic mods applied which should be saved. */ gboolean edited; /* xtras for Region/Arrow/etc. */ GSList *iimages; /* All the iimage we are defined on */ GSList *views; /* All the regionview we have made */ /* For things which have been loaded or saved from files (eg. image * and matrix). Used to set the filename for the "save" dialog. */ char *filename; }; typedef struct _ClassmodelClass { HeapmodelClass parent_class; /* Get a pointer to the class instance vars ... just used by * iarrow/iregion for code sharing. */ void *(*get_instance)( Classmodel * ); /* Read from heap into model, and create new heap class from model. */ gboolean (*class_get)( Classmodel *, PElement *root ); gboolean (*class_new)( Classmodel *, PElement *fn, PElement *out ); /* Save and replace graphic displays ... eg. image/matrix. */ gboolean (*graphic_save)( Classmodel *, GtkWidget *, const char * ); gboolean (*graphic_replace)( Classmodel *, GtkWidget *, const char * ); FileselFileType **filetype; const char *filetype_pref; ClassmodelMember *members; int n_members; void (*reset)( Classmodel * ); } ClassmodelClass; void image_value_init( ImageValue *image, Classmodel *classmodel ); void image_value_destroy( ImageValue *image ); void image_value_set( ImageValue *image, Imageinfo *ii ); void image_value_caption( ImageValue *value, VipsBuf *buf ); void *classmodel_get_instance( Classmodel *classmodel ); void classmodel_graphic_save( Classmodel *classmodel, GtkWidget *parent ); void classmodel_graphic_replace( Classmodel *classmodel, GtkWidget *parent ); void *classmodel_iimage_unlink( Classmodel *classmodel, iImage *iimage ); void classmodel_iimage_update( Classmodel *classmodel, Imageinfo *ii ); gboolean classmodel_update_members( Classmodel *classmodel, PElement *root ); GType classmodel_get_type( void ); void classmodel_update( Classmodel *classmodel ); void classmodel_set_edited( Classmodel *classmodel, gboolean edited ); Classmodel *classmodel_new_classmodel( GType type, Rhs *rhs ); nip2-8.7.0/src/fontnameview.h0000644000175000017500000000314713224651032012764 00000000000000/* a fontname view in a workspace */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_FONTNAMEVIEW (fontnameview_get_type()) #define FONTNAMEVIEW( obj ) \ (GTK_CHECK_CAST( (obj), TYPE_FONTNAMEVIEW, Fontnameview )) #define FONTNAMEVIEW_CLASS( klass ) \ (GTK_CHECK_CLASS_CAST( (klass), TYPE_FONTNAMEVIEW, FontnameviewClass )) #define IS_FONTNAMEVIEW( obj ) (GTK_CHECK_TYPE( (obj), TYPE_FONTNAMEVIEW )) #define IS_FONTNAMEVIEW_CLASS( klass ) \ (GTK_CHECK_CLASS_TYPE( (klass), TYPE_FONTNAMEVIEW )) typedef struct _Fontnameview { Graphicview parent_object; GtkWidget *label; Fontbutton *fontbutton; } Fontnameview; typedef struct _FontnameviewClass { GraphicviewClass parent_class; /* My methods. */ } FontnameviewClass; GtkType fontnameview_get_type( void ); View *fontnameview_new( void ); nip2-8.7.0/src/graphicview.c0000644000175000017500000000413313224651032012561 00000000000000/* run the display for a graphic in a workspace */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #include "ip.h" static ViewClass *parent_class = NULL; static void graphicview_link( View *view, Model *model, View *parent ) { Graphicview *graphicview = GRAPHICVIEW( view ); View *v; VIEW_CLASS( parent_class )->link( view, model, parent ); /* Find the enclosing subcolumnview. */ for( v = parent; v && !IS_SUBCOLUMNVIEW( v ); v = v->parent ) ; if( v ) graphicview->sview = SUBCOLUMNVIEW( v ); } static void graphicview_class_init( GraphicviewClass *class ) { ViewClass *view_class = (ViewClass *) class; parent_class = g_type_class_peek_parent( class ); view_class->link = graphicview_link; } static void graphicview_init( Graphicview *graphicview ) { graphicview->sview = NULL; } GtkType graphicview_get_type( void ) { static GtkType graphicview_type = 0; if( !graphicview_type ) { static const GtkTypeInfo sinfo = { "Graphicview", sizeof( Graphicview ), sizeof( GraphicviewClass ), (GtkClassInitFunc) graphicview_class_init, (GtkObjectInitFunc) graphicview_init, /* reserved_1 */ NULL, /* reserved_2 */ NULL, (GtkClassInitFunc) NULL, }; graphicview_type = gtk_type_unique( TYPE_VIEW, &sinfo ); } return( graphicview_type ); } nip2-8.7.0/src/preview.h0000644000175000017500000000316613224651032011744 00000000000000/* thumbnail widget */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_PREVIEW (preview_get_type()) #define PREVIEW( obj ) \ (GTK_CHECK_CAST( (obj), TYPE_PREVIEW, Preview )) #define PREVIEW_CLASS( klass ) \ (GTK_CHECK_CLASS_CAST( (klass), TYPE_PREVIEW, PreviewClass )) #define IS_PREVIEW( obj ) (GTK_CHECK_TYPE( (obj), TYPE_PREVIEW )) #define IS_PREVIEW_CLASS( klass ) \ (GTK_CHECK_CLASS_TYPE( (klass), TYPE_PREVIEW )) struct _Preview { Imagedisplay parent; char *filename; /* The file we are trying to display */ Conversion *conv; /* Hold a ref to the convert object */ }; typedef struct _PreviewClass { ImagedisplayClass parent_class; /* My methods. */ } PreviewClass; GtkType preview_get_type( void ); Preview *preview_new( void ); void preview_set_filename( Preview *preview, char *filename ); nip2-8.7.0/src/heapmodel.c0000644000175000017500000001462513224651032012216 00000000000000/* base class for models of heap classes */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #include "ip.h" static ModelClass *parent_class = NULL; void * heapmodel_new_heap( Heapmodel *heapmodel, PElement *root ) { HeapmodelClass *heapmodel_class = HEAPMODEL_GET_CLASS( heapmodel ); if( heapmodel_class->new_heap ) { void *res; res = heapmodel_class->new_heap( heapmodel, root ); return( res ); } return( NULL ); } void * heapmodel_update_model( Heapmodel *heapmodel ) { HeapmodelClass *heapmodel_class = HEAPMODEL_GET_CLASS( heapmodel ); #ifdef DEBUG printf( "heapmodel_update_model: %s ", G_OBJECT_TYPE_NAME( heapmodel ) ); row_name_print( heapmodel->row ); printf( " modified = %d\n", heapmodel->modified ); #endif /*DEBUG*/ if( heapmodel_class->update_model && !heapmodel->modified ) { void *res; res = heapmodel_class->update_model( heapmodel ); return( res ); } return( NULL ); } void * heapmodel_update_heap( Heapmodel *heapmodel ) { HeapmodelClass *heapmodel_class = HEAPMODEL_GET_CLASS( heapmodel ); if( heapmodel_class->update_heap && heapmodel->modified ) { void *res; res = heapmodel_class->update_heap( heapmodel ); return( res ); } return( NULL ); } void * heapmodel_clear_edited( Heapmodel *heapmodel ) { HeapmodelClass *heapmodel_class = HEAPMODEL_GET_CLASS( heapmodel ); if( heapmodel_class->clear_edited ) return( heapmodel_class->clear_edited( heapmodel ) ); return( NULL ); } static Rhs * heapmodel_get_rhs( Heapmodel *heapmodel ) { iContainer *p; /* Search for the enclosing RHS ... may not be one if (eg.) this is a * top-level row. */ for( p = ICONTAINER( heapmodel )->parent; p; p = p->parent ) if( IS_RHS( p ) ) return( RHS( p ) ); return( NULL ); } static Row * heapmodel_get_row( Heapmodel *heapmodel ) { Rhs *rhs; if( IS_RHS( heapmodel ) ) return( ROW( ICONTAINER( heapmodel )->parent ) ); else if( (rhs = heapmodel_get_rhs( heapmodel )) ) return( HEAPMODEL( rhs )->row ); else return( NULL ); } static void heapmodel_parent_add( iContainer *child ) { Heapmodel *heapmodel = HEAPMODEL( child ); g_assert( IS_HEAPMODEL( child->parent ) || IS_FILEMODEL( child->parent ) ); ICONTAINER_CLASS( parent_class )->parent_add( child ); /* Update our context. */ heapmodel->rhs = heapmodel_get_rhs( heapmodel ); heapmodel->row = heapmodel_get_row( heapmodel ); } static void * heapmodel_real_new_heap( Heapmodel *heapmodel, PElement *root ) { iobject_changed( IOBJECT( heapmodel ) ); return( NULL ); } static void * heapmodel_real_update_model( Heapmodel *heapmodel ) { iobject_changed( IOBJECT( heapmodel ) ); return( NULL ); } static void * heapmodel_real_update_heap( Heapmodel *heapmodel ) { g_assert( heapmodel->modified ); heapmodel_set_modified( heapmodel, FALSE ); return( NULL ); } static void * heapmodel_real_clear_edited( Heapmodel *heapmodel ) { return( NULL ); } static void heapmodel_class_init( HeapmodelClass *class ) { HeapmodelClass *heapmodel_class = (HeapmodelClass *) class; iContainerClass *icontainer_class = (iContainerClass *) class; parent_class = g_type_class_peek_parent( class ); /* Init methods. */ icontainer_class->parent_add = heapmodel_parent_add; heapmodel_class->new_heap = heapmodel_real_new_heap; heapmodel_class->update_heap = heapmodel_real_update_heap; heapmodel_class->update_model = heapmodel_real_update_model; heapmodel_class->clear_edited = heapmodel_real_clear_edited; } static void heapmodel_init( Heapmodel *heapmodel ) { heapmodel->row = NULL; heapmodel->rhs = NULL; heapmodel->modified = FALSE; } GType heapmodel_get_type( void ) { static GType heapmodel_type = 0; if( !heapmodel_type ) { static const GTypeInfo info = { sizeof( HeapmodelClass ), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) heapmodel_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof( Heapmodel ), 32, /* n_preallocs */ (GInstanceInitFunc) heapmodel_init, }; heapmodel_type = g_type_register_static( TYPE_MODEL, "Heapmodel", &info, 0 ); } return( heapmodel_type ); } void heapmodel_set_modified( Heapmodel *heapmodel, gboolean modified ) { if( heapmodel->modified != modified ) { #ifdef DEBUG { HeapmodelClass *heapmodel_class = HEAPMODEL_GET_CLASS( heapmodel ); printf( "heapmodel_set_modified: %s::", G_OBJECT_CLASS_NAME( heapmodel_class ) ); row_name_print( heapmodel->row ); printf( " %s\n", bool_to_char( modified ) ); } #endif /*DEBUG*/ heapmodel->modified = modified; iobject_changed( IOBJECT( heapmodel ) ); } } /* Generate a descriptive name for a heapmodel. Used for captions. */ gboolean heapmodel_name( Heapmodel *heapmodel, VipsBuf *buf ) { Row *row = heapmodel->row; Expr *expr; Symbol *sym; Toolitem *toolitem; if( !row || !(expr = row->expr) || !PEISCLASS( &expr->root ) ) return( FALSE ); sym = PEGETCLASSCOMPILE( &expr->root )->sym; /* If this is an action member we should be able to look up * it's sym and get a descriptive label. */ if( (toolitem = toolitem_lookup( row->ws->kitg, sym )) ) vips_buf_appends( buf, toolitem->name ); else symbol_qualified_name_relative( row->ws->sym, sym, buf ); return( TRUE ); } /* Print the value member to a buf. */ gboolean heapmodel_value( Heapmodel *heapmodel, VipsBuf *buf ) { Expr *expr; PElement value; if( !heapmodel->row || !(expr = heapmodel->row->expr) || expr->err || expr->sym->dirty || !class_get_member( &expr->root, MEMBER_VALUE, NULL, &value ) ) return( FALSE ); itext_value( reduce_context, buf, &value ); return( TRUE ); } nip2-8.7.0/src/editview.c0000644000175000017500000001114313224651032012070 00000000000000/* a view of a text thingy */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #include "ip.h" static GraphicviewClass *parent_class = NULL; static void editview_link( View *view, Model *model, View *parent ) { Editview *editview = EDITVIEW( view ); VIEW_CLASS( parent_class )->link( view, model, parent ); if( GRAPHICVIEW( view )->sview ) gtk_size_group_add_widget( GRAPHICVIEW( view )->sview->group, editview->label ); } static void editview_refresh( vObject *vobject ) { Editview *editview = EDITVIEW( vobject ); #ifdef DEBUG printf( "editview_refresh:\n" ); #endif /*DEBUG*/ if( vobject->iobject->caption ) set_glabel( editview->label, _( "%s:" ), vobject->iobject->caption ); VOBJECT_CLASS( parent_class )->refresh( vobject ); } static void editview_class_init( EditviewClass *class ) { vObjectClass *vobject_class = (vObjectClass *) class; ViewClass *view_class = (ViewClass *) class; parent_class = g_type_class_peek_parent( class ); /* Create signals. */ /* Init methods. */ vobject_class->refresh = editview_refresh; view_class->link = editview_link; } /* Detect cancel in a text field. */ static gboolean editview_event_cb( GtkWidget *widget, GdkEvent *ev, Editview *editview ) { gboolean handled; handled = FALSE; if( ev->key.keyval == GDK_Escape ) { handled = TRUE; /* Zap model value back into edit box. */ vobject_refresh_queue( VOBJECT( editview ) ); } return( handled ); } static void editview_activate_cb( GtkWidget *wid, Editview *editview ) { Expr *expr = HEAPMODEL( VOBJECT( editview )->iobject )->row->expr; /* If we've been changed, we'll be on the scannable list ... just * recomp. */ symbol_recalculate_all(); if( expr->err ) { expr_error_get( expr ); iwindow_alert( wid, GTK_MESSAGE_ERROR ); } } static void editview_init( Editview *editview ) { GtkWidget *hbox; gtk_container_set_border_width( GTK_CONTAINER( editview ), 2 ); hbox = gtk_hbox_new( FALSE, 12 ); gtk_box_pack_start( GTK_BOX( editview ), hbox, TRUE, FALSE, 0 ); editview->label = gtk_label_new( "" ); gtk_misc_set_alignment( GTK_MISC( editview->label ), 0, 0.5 ); gtk_box_pack_start( GTK_BOX( hbox ), editview->label, FALSE, FALSE, 2 ); editview->text = gtk_entry_new(); gtk_box_pack_start( GTK_BOX( hbox ), editview->text, TRUE, TRUE, 0 ); set_tooltip( editview->text, _( "Escape to cancel edit, " "press Return to accept edit and recalculate" ) ); gtk_signal_connect_object( GTK_OBJECT( editview->text ), "changed", GTK_SIGNAL_FUNC( view_changed_cb ), GTK_OBJECT( editview ) ); gtk_signal_connect( GTK_OBJECT( editview->text ), "activate", GTK_SIGNAL_FUNC( editview_activate_cb ), editview ); gtk_signal_connect( GTK_OBJECT( editview->text ), "event", GTK_SIGNAL_FUNC( editview_event_cb ), editview ); gtk_widget_show_all( hbox ); } GtkType editview_get_type( void ) { static GtkType type = 0; if( !type ) { static const GtkTypeInfo info = { "Editview", sizeof( Editview ), sizeof( EditviewClass ), (GtkClassInitFunc) editview_class_init, (GtkObjectInitFunc) editview_init, /* reserved_1 */ NULL, /* reserved_2 */ NULL, (GtkClassInitFunc) NULL, }; type = gtk_type_unique( TYPE_GRAPHICVIEW, &info ); } return( type ); } void editview_set_entry( Editview *editview, const char *fmt, ... ) { va_list ap; char buf[1000]; va_start( ap, fmt ); (void) im_vsnprintf( buf, 1000, fmt, ap ); va_end( ap ); /* Make sure we don't trigger "changed" when we zap in the * text. */ gtk_signal_handler_block_by_data( GTK_OBJECT( editview->text ), editview ); set_gentry( editview->text, "%s", buf ); gtk_signal_handler_unblock_by_data( GTK_OBJECT( editview->text ), editview ); } nip2-8.7.0/src/group.c0000644000175000017500000001047013224651032011406 00000000000000/* an input group ... put/get methods */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #include "ip.h" static ValueClass *parent_class = NULL; static gboolean group_save_list( PElement *list, char *filename ); /* Exported, since main.c uses this to save 'main' to a file. @filename is * incremented. */ gboolean group_save_item( PElement *item, char *filename ) { gboolean result; Imageinfo *ii; char buf[FILENAME_MAX]; /* We don't want $VAR etc. in the filename we pass down to the file * ops. */ im_strncpy( buf, filename, FILENAME_MAX ); path_expand( buf ); if( !heap_is_instanceof( CLASS_GROUP, item, &result ) ) return( FALSE ); if( result ) { PElement value; if( !class_get_member( item, MEMBER_VALUE, NULL, &value ) || !group_save_list( &value, filename ) ) return( FALSE ); } if( !heap_is_instanceof( CLASS_IMAGE, item, &result ) ) return( FALSE ); if( result ) { PElement value; filesel_add_mode( buf ); if( !class_get_member( item, MEMBER_VALUE, NULL, &value ) || !heap_get_image( &value, &ii ) || !imageinfo_write( ii, buf ) ) return( FALSE ); increment_filename( filename ); } if( !heap_is_instanceof( CLASS_MATRIX, item, &result ) ) return( FALSE ); if( result ) { DOUBLEMASK *dmask; if( !(dmask = matrix_ip_to_dmask( item )) ) return( FALSE ); if( im_write_dmask_name( dmask, buf ) ) { error_vips_all(); IM_FREEF( im_free_dmask, dmask ); return( FALSE ); } IM_FREEF( im_free_dmask, dmask ); increment_filename( filename ); } if( PEISIMAGE( item ) ) { filesel_add_mode( buf ); if( !heap_get_image( item, &ii ) || !imageinfo_write( ii, buf ) ) return( FALSE ); increment_filename( filename ); } if( PEISLIST( item ) ) { if( !group_save_list( item, filename ) ) return( FALSE ); } return( TRUE ); } static gboolean group_save_list( PElement *list, char *filename ) { int i; int length; if( (length = heap_list_length( list )) < 0 ) return( FALSE ); for( i = 0; i < length; i++ ) { PElement item; if( !heap_list_index( list, i, &item ) || !group_save_item( &item, filename ) ) return( FALSE ); } return( TRUE ); } static gboolean group_graphic_save( Classmodel *classmodel, GtkWidget *parent, const char *filename ) { Group *group = GROUP( classmodel ); Row *row = HEAPMODEL( group )->row; PElement *root = &row->expr->root; char buf[FILENAME_MAX]; /* We are going to increment the filename ... make sure there's some * space at the end of the string. */ im_strncpy( buf, filename, FILENAME_MAX - 5 ); if( !group_save_item( root, buf ) ) return( FALSE ); return( TRUE ); } static void group_class_init( GroupClass *class ) { ClassmodelClass *classmodel_class = (ClassmodelClass *) class; parent_class = g_type_class_peek_parent( class ); /* Create signals. */ classmodel_class->graphic_save = group_graphic_save; model_register_loadable( MODEL_CLASS( class ) ); } static void group_init( Group *group ) { iobject_set( IOBJECT( group ), CLASS_GROUP, NULL ); } GType group_get_type( void ) { static GType type = 0; if( !type ) { static const GTypeInfo info = { sizeof( GroupClass ), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) group_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof( Group ), 32, /* n_preallocs */ (GInstanceInitFunc) group_init, }; type = g_type_register_static( TYPE_VALUE, "Group", &info, 0 ); } return( type ); } nip2-8.7.0/src/number.h0000644000175000017500000000270413224651032011550 00000000000000/* a colour number in a workspace */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_NUMBER (number_get_type()) #define NUMBER( obj ) (GTK_CHECK_CAST( (obj), TYPE_NUMBER, Number )) #define NUMBER_CLASS( klass ) \ (GTK_CHECK_CLASS_CAST( (klass), TYPE_NUMBER, NumberClass )) #define IS_NUMBER( obj ) (GTK_CHECK_TYPE( (obj), TYPE_NUMBER )) #define IS_NUMBER_CLASS( klass ) \ (GTK_CHECK_CLASS_TYPE( (klass), TYPE_NUMBER )) struct _Number { Classmodel parent_class; /* Class fields. */ double value; }; typedef struct _NumberClass { ClassmodelClass parent_class; /* My methods. */ } NumberClass; GType number_get_type( void ); nip2-8.7.0/src/workspace.c0000644000175000017500000012205413273071606012261 00000000000000/* Manage workspace objects. */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG_VERBOSE #define DEBUG */ #include "ip.h" static ModelClass *parent_class = NULL; static GSList *workspace_all = NULL; static GSList *workspace_needs_layout = NULL; void workspace_set_needs_layout( Workspace *ws, gboolean needs_layout ) { #ifdef DEBUG_VERBOSE printf( "workspace_set_needs_layout: %p %s %d\n", ws, NN( IOBJECT( ws )->name ), needs_layout ); #endif /*DEBUG_VERBOSE*/ if( !ws->needs_layout && needs_layout && !ws->in_dispose ) { g_assert( !g_slist_find( workspace_needs_layout, ws ) ); ws->needs_layout = TRUE; workspace_needs_layout = g_slist_prepend( workspace_needs_layout, ws ); } if( ws->needs_layout && !needs_layout ) { g_assert( g_slist_find( workspace_needs_layout, ws ) ); ws->needs_layout = FALSE; workspace_needs_layout = g_slist_remove( workspace_needs_layout, ws ); } } GSList * workspace_get_needs_layout() { return( workspace_needs_layout ); } Workspacegroup * workspace_get_workspacegroup( Workspace *ws ) { iContainer *parent; if( (parent = ICONTAINER( ws )->parent) ) return( WORKSPACEGROUP( parent ) ); return( NULL ); } Workspaceroot * workspace_get_workspaceroot( Workspace *ws ) { return( workspace_get_workspacegroup( ws )->wsr ); } void workspace_set_modified( Workspace *ws, gboolean modified ) { Workspacegroup *wsg; if( (wsg = workspace_get_workspacegroup( ws )) ) filemodel_set_modified( FILEMODEL( wsg ), modified ); } static void * workspace_map_sub( Workspacegroup *wsg, workspace_map_fn fn, void *a, void *b ) { g_assert( IS_WORKSPACEGROUP( wsg ) ); return( icontainer_map( ICONTAINER( wsg ), (icontainer_map_fn) fn, a, b ) ); } /* Over all workspaces. */ void * workspace_map( workspace_map_fn fn, void *a, void *b ) { return( icontainer_map3( ICONTAINER( main_workspaceroot ), (icontainer_map3_fn) workspace_map_sub, fn, a, b ) ); } /* Map across the columns in a workspace. */ void * workspace_map_column( Workspace *ws, column_map_fn fn, void *a ) { return( icontainer_map( ICONTAINER( ws ), (icontainer_map_fn) fn, a, NULL ) ); } /* Map across a Workspace, applying to the symbols of the top-level rows. */ void * workspace_map_symbol( Workspace *ws, symbol_map_fn fn, void *a ) { return( icontainer_map( ICONTAINER( ws ), (icontainer_map_fn) column_map_symbol, (void *) fn, a ) ); } static void * workspace_is_empty_sub( Symbol *sym ) { return( sym ); } /* Does a workspace contain no rows? */ gboolean workspace_is_empty( Workspace *ws ) { return( workspace_map_symbol( ws, (symbol_map_fn) workspace_is_empty_sub, NULL ) == NULL ); } /* Map a function over all selected rows in a workspace. */ void * workspace_selected_map( Workspace *ws, row_map_fn fn, void *a, void *b ) { return( slist_map2( ws->selected, (SListMap2Fn) fn, a, b ) ); } static void * workspace_selected_map_sym_sub( Row *row, symbol_map_fn fn, void *a ) { return( fn( row->sym, a, NULL, NULL ) ); } /* Map a function over all selected symbols in a workspace. */ void * workspace_selected_map_sym( Workspace *ws, symbol_map_fn fn, void *a, void *b ) { return( workspace_selected_map( ws, (row_map_fn) workspace_selected_map_sym_sub, (void *) fn, a ) ); } /* Are there any selected rows? */ gboolean workspace_selected_any( Workspace *ws ) { return( ws->selected != NULL ); } /* Number of selected rows. */ int workspace_selected_num( Workspace *ws ) { return( g_slist_length( ws->selected ) ); } static void * workspace_selected_sym_sub( Row *row, Symbol *sym ) { if( row->sym == sym ) return( row ); return( NULL ); } /* Is sym selected? */ gboolean workspace_selected_sym( Workspace *ws, Symbol *sym ) { return( workspace_selected_map( ws, (row_map_fn) workspace_selected_sym_sub, sym, NULL ) != NULL ); } /* Is just one row selected? If yes, return it. */ Row * workspace_selected_one( Workspace *ws ) { int len = g_slist_length( ws->selected ); if( len == 1 ) return( (Row *)(ws->selected->data) ); else if( len == 0 ) { error_top( _( "No objects selected." ) ); error_sub( _( "Select exactly one object and try again." ) ); return( NULL ); } else { error_top( _( "More than one object selected." ) ); error_sub( _( "Select exactly one object and try again." ) ); return( NULL ); } } static void * workspace_deselect_all_sub( Column *col ) { col->last_select = NULL; return( NULL ); } /* Deselect all rows. */ void workspace_deselect_all( Workspace *ws ) { (void) workspace_selected_map( ws, (row_map_fn) row_deselect, NULL, NULL ); (void) workspace_map_column( ws, (column_map_fn) workspace_deselect_all_sub, NULL ); } /* Track this while we build a names list. */ typedef struct { VipsBuf *buf; const char *separator; gboolean first; } NamesInfo; /* Add a name to a string for a symbol. */ static void * workspace_selected_names_sub( Row *row, NamesInfo *names ) { if( !names->first ) vips_buf_appends( names->buf, names->separator ); /* Hack: if this is a matrix with selected cells, use an extract to * get those cells out. We should really have a row method for this I * guess :-( */ if( row->child_rhs && row->child_rhs->graphic && IS_MATRIX( row->child_rhs->graphic ) && MATRIX( row->child_rhs->graphic )->selected ) { Matrix *matrix = MATRIX( row->child_rhs->graphic ); vips_buf_appends( names->buf, "(" ); row_qualified_name( row, names->buf ); vips_buf_appendf( names->buf, ".extract %d %d %d %d)", matrix->range.left, matrix->range.top, matrix->range.width, matrix->range.height ); } else row_qualified_name( row, names->buf ); names->first = FALSE; return( NULL ); } /* Add a list of selected symbol names to a string. */ void workspace_selected_names( Workspace *ws, VipsBuf *buf, const char *separator ) { NamesInfo names; names.buf = buf; names.separator = separator; names.first = TRUE; (void) workspace_selected_map( ws, (row_map_fn) workspace_selected_names_sub, &names, NULL ); } void workspace_column_names( Column *col, VipsBuf *buf, const char *separator ) { NamesInfo names; names.buf = buf; names.separator = separator; names.first = TRUE; (void) column_map( col, (row_map_fn) workspace_selected_names_sub, &names, NULL ); } /* Select all objects in all columns. */ void workspace_select_all( Workspace *ws ) { (void) icontainer_map( ICONTAINER( ws ), (icontainer_map_fn) column_select_symbols, NULL, NULL ); } /* Is there just one column, and is it empty? */ Column * workspace_is_one_empty( Workspace *ws ) { GSList *children = ICONTAINER( ws )->children; Column *col; if( g_slist_length( children ) != 1 ) return( NULL ); col = COLUMN( children->data ); if( !column_is_empty( col ) ) return( NULL ); return( col ); } /* Search for a column by name. */ Column * workspace_column_find( Workspace *ws, const char *name ) { Model *model; if( !(model = icontainer_map( ICONTAINER( ws ), (icontainer_map_fn) iobject_test_name, (void *) name, NULL )) ) return( NULL ); return( COLUMN( model ) ); } /* Return the column for a name ... an existing column, or a new one. */ Column * workspace_column_get( Workspace *ws, const char *name ) { Column *col; /* Exists? */ if( (col = workspace_column_find( ws, name )) ) return( col ); /* No - build new column and return a pointer to that. */ return( column_new( ws, name ) ); } /* Make up a new column name. Check for not already in workspace. */ void workspace_column_name_new( Workspace *ws, char *name ) { do { number_to_string( ws->next++, name ); } while( workspace_column_find( ws, name ) ); } Column * workspace_get_column( Workspace *ws ) { if( ICONTAINER( ws )->current ) return( COLUMN( ICONTAINER( ws )->current ) ); return( NULL ); } /* Select a column. Can select NULL for no current col in this ws. */ void workspace_column_select( Workspace *ws, Column *col ) { icontainer_current( ICONTAINER( ws ), ICONTAINER( col ) ); } /* Make sure we have a column selected ... pick one of the existing columns; if * there are none, make a column. */ Column * workspace_column_pick( Workspace *ws ) { Column *col; if( (col = workspace_get_column( ws )) ) return( col ); if( (col = COLUMN( icontainer_get_nth_child( ICONTAINER( ws ), 0 ) )) ) { workspace_column_select( ws, col ); return( col ); } /* Make an empty column ... always at the top left. */ col = column_new( ws, "A" ); col->x = WORKSPACEVIEW_MARGIN_LEFT; col->y = WORKSPACEVIEW_MARGIN_TOP; workspace_column_select( ws, col ); return( col ); } /* Make and select a column. Used for "new column" UI actions. */ Column * workspace_column_new( Workspace *ws ) { char new_name[MAX_STRSIZE]; Column *old_col; Column *col; workspace_column_name_new( ws, new_name ); if( !(col = column_new( ws, new_name )) ) return( NULL ); /* Position just to right of currently selected column. */ if( (old_col = workspace_get_column( ws )) ) { col->x = old_col->x + 50; col->y = old_col->y; } workspace_column_select( ws, col ); column_scrollto( col, MODEL_SCROLL_TOP ); return( col ); } /* Make a new symbol, part of the current column. */ static Symbol * workspace_add_symbol( Workspace *ws ) { Column *col = workspace_column_pick( ws ); Symbol *sym; char *name; name = column_name_new( col ); sym = symbol_new( ws->sym->expr->compile, name ); IM_FREE( name ); return( sym ); } /* Make up a new definition. */ Symbol * workspace_add_def( Workspace *ws, const char *str ) { Column *col = workspace_column_pick( ws ); Symbol *sym; char *name; #ifdef DEBUG printf( "workspace_add_def: %s\n", str ); #endif /*DEBUG*/ if( !str || strspn( str, WHITESPACE ) == strlen( str ) ) return( NULL ); /* Try parsing as a "fred = 12" style def. */ attach_input_string( str ); if( (name = parse_test_define()) ) { sym = symbol_new( ws->sym->expr->compile, name ); IM_FREE( name ); attach_input_string( str + IM_CLIP( 0, input_state.charpos - 1, strlen( str ) ) ); } else { /* That didn't work. Make a sym from the col name. */ sym = workspace_add_symbol( ws ); attach_input_string( str ); } if( !symbol_user_init( sym ) || !parse_rhs( sym->expr, PARSE_RHS ) ) { /* Another parse error. */ expr_error_get( sym->expr ); /* Block changes to error_string ... symbol_destroy() * can set this for compound objects. */ error_block(); IDESTROY( sym ); error_unblock(); return( NULL ); } /* If we're redefining a sym, it might have a row already. */ if( !sym->expr->row ) (void) row_new( col->scol, sym, &sym->expr->root ); symbol_made( sym ); workspace_set_modified( ws, TRUE ); return( sym ); } /* Make up a new definition, recalc and scroll to make it visible. */ Symbol * workspace_add_def_recalc( Workspace *ws, const char *str ) { Column *col = workspace_column_pick( ws ); Symbol *sym; #ifdef DEBUG printf( "workspace_add_def_recalc: %s\n", str ); #endif /*DEBUG*/ if( !(sym = workspace_add_def( ws, str )) ) return( NULL ); if( !symbol_recalculate_check( sym ) ) { /* Eval error. */ expr_error_get( sym->expr ); error_block(); IDESTROY( sym ); error_unblock(); return( NULL ); } /* Jump to column containing object. */ column_scrollto( col, MODEL_SCROLL_BOTTOM ); return( sym ); } gboolean workspace_load_file_buf( VipsBuf *buf, const char *filename ) { if( callv_string_filenamef( (callv_string_fn) vips_format_for_file, "%s", filename ) ) vips_buf_appends( buf, "Image_file" ); else vips_buf_appends( buf, "Matrix_file" ); vips_buf_appends( buf, " \"" ); vips_buf_appendsc( buf, TRUE, filename ); vips_buf_appends( buf, "\"" ); return( TRUE ); } /* Load a matrix or image. Don't recalc: you need to recalc later to test for * success/fail. See eg. workspace_add_def_recalc() */ Symbol * workspace_load_file( Workspace *ws, const char *filename ) { char txt[MAX_STRSIZE]; VipsBuf buf = VIPS_BUF_STATIC( txt ); Symbol *sym; if( !workspace_load_file_buf( &buf, filename ) ) return( NULL ); if( !(sym = workspace_add_def( ws, vips_buf_all( &buf ) )) ) return( NULL ); mainw_recent_add( &mainw_recent_image, filename ); return( sym ); } static void workspace_dispose( GObject *gobject ) { Workspace *ws; #ifdef DEBUG printf( "workspace_dispose: %p %s\n", gobject, NN( IOBJECT( gobject )->name ) ); #endif /*DEBUG*/ g_return_if_fail( gobject != NULL ); g_return_if_fail( IS_WORKSPACE( gobject ) ); ws = WORKSPACE( gobject ); workspace_set_needs_layout( ws, FALSE ); ws->in_dispose = TRUE; UNREF( ws->kitg ); UNREF( ws->local_kitg ); IDESTROY( ws->sym ); G_OBJECT_CLASS( parent_class )->dispose( gobject ); } static void workspace_finalize( GObject *gobject ) { Workspace *ws; #ifdef DEBUG printf( "workspace_finalize: %p %s\n", gobject, NN( IOBJECT( gobject )->name ) ); #endif /*DEBUG*/ g_return_if_fail( gobject != NULL ); g_return_if_fail( IS_WORKSPACE( gobject ) ); ws = WORKSPACE( gobject ); IM_FREE( ws->status ); IM_FREE( ws->local_defs ); workspace_all = g_slist_remove( workspace_all, ws ); G_OBJECT_CLASS( parent_class )->finalize( gobject ); } static void workspace_changed( iObject *iobject ) { Workspace *ws; Workspacegroup *wsg; #ifdef DEBUG_VERBOSE printf( "workspace_changed: %s\n", NN( iobject->name ) ); #endif /*DEBUG_VERBOSE*/ g_return_if_fail( iobject != NULL ); g_return_if_fail( IS_WORKSPACE( iobject ) ); ws = WORKSPACE( iobject ); wsg = workspace_get_workspacegroup( ws ); /* Signal changed on our workspacegroup, if we're the current object. */ if( wsg && ICONTAINER( wsg )->current == ICONTAINER( iobject ) ) iobject_changed( IOBJECT( wsg ) ); IOBJECT_CLASS( parent_class )->changed( iobject ); } static void workspace_child_add( iContainer *parent, iContainer *child, int pos ) { Workspace *ws = WORKSPACE( parent ); Column *col = COLUMN( child ); ICONTAINER_CLASS( parent_class )->child_add( parent, child, pos ); if( col->selected ) workspace_column_select( ws, col ); } static void workspace_child_remove( iContainer *parent, iContainer *child ) { Workspace *ws = WORKSPACE( parent ); workspace_set_modified( ws, TRUE ); ICONTAINER_CLASS( parent_class )->child_remove( parent, child ); } static void workspace_current( iContainer *parent, iContainer *child ) { Workspace *ws = WORKSPACE( parent ); Column *col = COLUMN( child ); Column *current = workspace_get_column( ws ); if( current ) current->selected = FALSE; if( col ) col->selected = TRUE; ICONTAINER_CLASS( parent_class )->current( parent, child ); } static void workspace_link( Workspace *ws, Workspacegroup *wsg, const char *name ) { Workspaceroot *wsr = wsg->wsr; Symbol *sym; #ifdef DEBUG printf( "workspace_link: naming ws %p as %s\n", ws, name ); #endif /*DEBUG*/ sym = symbol_new_defining( wsr->sym->expr->compile, name ); ws->sym = sym; sym->type = SYM_WORKSPACE; sym->ws = ws; sym->expr = expr_new( sym ); (void) compile_new( sym->expr ); symbol_made( sym ); iobject_set( IOBJECT( ws ), name, NULL ); ws->local_kitg = toolkitgroup_new( ws->sym ); g_object_ref( G_OBJECT( ws->local_kitg ) ); iobject_sink( IOBJECT( ws->local_kitg ) ); } static const char * workspacemode_to_char( WorkspaceMode mode ) { switch( mode ) { case WORKSPACE_MODE_REGULAR: return( "WORKSPACE_MODE_REGULAR" ); case WORKSPACE_MODE_FORMULA: return( "WORKSPACE_MODE_FORMULA" ); case WORKSPACE_MODE_NOEDIT: return( "WORKSPACE_MODE_NOEDIT" ); default: return( NULL ); } } static WorkspaceMode char_to_workspacemode( const char *mode ) { if( strcasecmp( mode, "WORKSPACE_MODE_REGULAR" ) == 0 ) return( WORKSPACE_MODE_REGULAR ); else if( strcasecmp( mode, "WORKSPACE_MODE_FORMULA" ) == 0 ) return( WORKSPACE_MODE_FORMULA ); else if( strcasecmp( mode, "WORKSPACE_MODE_NOEDIT" ) == 0 ) return( WORKSPACE_MODE_NOEDIT ); else return( (WorkspaceMode) -1 ); } static View * workspace_view_new( Model *model, View *parent ) { return( workspaceview_new() ); } static gboolean workspace_load( Model *model, ModelLoadState *state, Model *parent, xmlNode *xnode ) { Workspace *ws = WORKSPACE( model ); char buf[FILENAME_MAX]; char *txt; g_assert( IS_WORKSPACEGROUP( parent ) ); /* "view" is optional, for backwards compatibility. */ if( get_sprop( xnode, "view", buf, FILENAME_MAX ) ) { WorkspaceMode mode = char_to_workspacemode( buf ); if( (int) mode >= 0 ) /* Could call workspace_set_mode(), but this is only a * load, so so what. */ ws->mode = mode; } /* Also optional. */ (void) get_dprop( xnode, "scale", &ws->scale ); (void) get_dprop( xnode, "offset", &ws->offset ); (void) get_bprop( xnode, "locked", &ws->locked ); (void) get_bprop( xnode, "lpane_open", &ws->lpane_open ); (void) get_iprop( xnode, "lpane_position", &ws->lpane_position ); (void) get_bprop( xnode, "rpane_open", &ws->rpane_open ); (void) get_iprop( xnode, "rpane_position", &ws->rpane_position ); if( get_sprop( xnode, "name", buf, FILENAME_MAX ) ) { IM_SETSTR( IOBJECT( ws )->name, buf ); } if( get_sprop( xnode, "caption", buf, FILENAME_MAX ) ) { IM_SETSTR( IOBJECT( ws )->caption, buf ); } /* Don't use get_sprop() and avoid a limit on def size. */ if( (txt = (char *) xmlGetProp( xnode, (xmlChar *) "local_defs" )) ) { (void) workspace_local_set( ws, txt ); IM_FREEF( xmlFree, txt ); } (void) get_iprop( xnode, "major", &ws->major ); (void) get_iprop( xnode, "minor", &ws->minor ); if( !MODEL_CLASS( parent_class )->load( model, state, parent, xnode ) ) return( FALSE ); return( TRUE ); } static xmlNode * workspace_save( Model *model, xmlNode *xnode ) { Workspace *ws = WORKSPACE( model ); Workspacegroup *wsg = workspace_get_workspacegroup( ws ); xmlNode *xthis; if( !(xthis = MODEL_CLASS( parent_class )->save( model, xnode )) ) return( NULL ); if( !set_sprop( xthis, "view", workspacemode_to_char( ws->mode ) ) || !set_dprop( xthis, "scale", ws->scale ) || !set_dprop( xthis, "offset", ws->offset ) || !set_sprop( xthis, "locked", bool_to_char( ws->locked ) ) || !set_iprop( xthis, "lpane_position", ws->lpane_position ) || !set_sprop( xthis, "lpane_open", bool_to_char( ws->lpane_open ) ) || !set_iprop( xthis, "rpane_position", ws->rpane_position ) || !set_sprop( xthis, "rpane_open", bool_to_char( ws->rpane_open ) ) || !set_sprop( xthis, "local_defs", ws->local_defs ) || !set_sprop( xthis, "name", IOBJECT( ws )->name ) || !set_sprop( xthis, "caption", IOBJECT( ws )->caption ) ) return( NULL ); /* We have to save our workspacegroup's filename here for compt with * older nip2. */ if( !set_sprop( xthis, "filename", FILEMODEL( wsg )->filename ) ) return( NULL ); if( !set_iprop( xthis, "major", ws->major ) || !set_iprop( xthis, "minor", ws->minor ) ) return( NULL ); return( xthis ); } static void workspace_empty( Model *model ) { Workspace *ws = WORKSPACE( model ); /* Make sure this gets reset. */ ws->area.left = 0; ws->area.top = 0; ws->area.width = 0; ws->area.height = 0; MODEL_CLASS( parent_class )->empty( model ); } static void * workspace_load_toolkit( const char *filename, Toolkitgroup *toolkitgroup ) { if( !toolkit_new_from_file( toolkitgroup, filename ) ) iwindow_alert( NULL, GTK_MESSAGE_ERROR ); return( NULL ); } /* The compat modes this version of nip2 has. Search the compat dir and make a * list of these things. */ #define MAX_COMPAT (100) static int compat_major[MAX_COMPAT]; static int compat_minor[MAX_COMPAT]; static int n_compat = 0; static void * workspace_build_compat_fn( const char *filename ) { char *basename; int major; int minor; basename = g_path_get_basename( filename ); if( sscanf( basename, "%d.%d", &major, &minor ) != 2 ) { g_free( basename ); return( NULL ); } g_free( basename ); compat_major[n_compat] = major; compat_minor[n_compat] = minor; n_compat += 1; #ifdef DEBUG printf( "workspace_build_compat_fn: found major = %d, minor = %d\n", major, minor ); #endif /*DEBUG*/ return( NULL ); } /* Build the list of ws compatibility defs we have. */ static void workspace_build_compat( void ) { if( n_compat > 0 ) return; path_map_dir( "$VIPSHOME/share/" PACKAGE "/compat", "*.*", (path_map_fn) workspace_build_compat_fn, NULL ); } /* Given a major/minor (eg. read from a ws header), return non-zero if we have * a set of compat defs. */ int workspace_have_compat( int major, int minor, int *best_major, int *best_minor ) { int i; int best; #ifdef DEBUG printf( "workspace_have_compat: searching for %d.%d\n", major, minor ); #endif /*DEBUG*/ /* Sets of ws compatibility defs cover themselves and any earlier * releases, as far back as the next set of compat defs. We need to * search for the smallest compat version that's greater than the * version number in the file. */ workspace_build_compat(); best = -1; for( i = 0; i < n_compat; i++ ) if( major <= compat_major[i] && minor <= compat_minor[i] ) /* Found a possible compat set, is it better than the * best we've seen so far? */ if( best == -1 || compat_major[i] < compat_major[best] || compat_minor[i] < compat_minor[best] ) best = i; if( best == -1 ) return( 0 ); #ifdef DEBUG printf( "\tfound %d.%d\n", compat_major[best], compat_minor[best] ); #endif /*DEBUG*/ if( best_major ) *best_major = compat_major[best]; if( best_minor ) *best_minor = compat_minor[best]; return( 1 ); } void workspace_get_version( Workspace *ws, int *major, int *minor ) { *major = ws->major; *minor = ws->minor; } gboolean workspace_load_compat( Workspace *ws, int major, int minor ) { char pathname[FILENAME_MAX]; GSList *path; int best_major; int best_minor; if( workspace_have_compat( major, minor, &best_major, &best_minor ) ) { /* Make a private toolkitgroup local to this workspace to * hold the compatibility defs we are planning to load. */ UNREF( ws->kitg ); ws->kitg = toolkitgroup_new( ws->sym ); g_object_ref( G_OBJECT( ws->kitg ) ); iobject_sink( IOBJECT( ws->kitg ) ); im_snprintf( pathname, FILENAME_MAX, "$VIPSHOME/share/" PACKAGE "/compat/%d.%d", best_major, best_minor ); path = path_parse( pathname ); if( path_map( path, "*.def", (path_map_fn) workspace_load_toolkit, ws->kitg ) ) { path_free2( path ); return( FALSE ); } path_free2( path ); #ifdef DEBUG printf( "workspace_load_compat: loaded %d.%d\n", best_major, best_minor ); #endif /*DEBUG*/ ws->compat_major = best_major; ws->compat_minor = best_minor; } else { #ifdef DEBUG printf( "workspace_load_compat: no compat necessary\n" ); #endif /*DEBUG*/ /* No compat defs necessary for this ws. */ ws->compat_major = 0; ws->compat_minor = 0; } return( TRUE ); } static void workspace_class_init( WorkspaceClass *class ) { GObjectClass *gobject_class = G_OBJECT_CLASS( class ); iObjectClass *iobject_class = IOBJECT_CLASS( class ); iContainerClass *icontainer_class = (iContainerClass *) class; ModelClass *model_class = (ModelClass *) class; parent_class = g_type_class_peek_parent( class ); /* Create signals. */ /* Init methods. */ gobject_class->dispose = workspace_dispose; gobject_class->finalize = workspace_finalize; iobject_class->changed = workspace_changed; iobject_class->user_name = _( "Tab" ); icontainer_class->child_add = workspace_child_add; icontainer_class->child_remove = workspace_child_remove; icontainer_class->current = workspace_current; model_class->view_new = workspace_view_new; model_class->load = workspace_load; model_class->save = workspace_save; model_class->empty = workspace_empty; /* Static init. */ model_register_loadable( MODEL_CLASS( class ) ); } static void workspace_init( Workspace *ws ) { ws->sym = NULL; /* We default to using the main toolkitgroup for our definitions. * Unref and load private defs if we need compatibility. */ ws->kitg = main_toolkitgroup; g_object_ref( G_OBJECT( ws->kitg ) ); ws->next = 0; ws->selected = NULL; ws->errors = NULL; ws->mode = WORKSPACE_MODE_REGULAR; ws->major = MAJOR_VERSION; ws->minor = MINOR_VERSION; ws->compat_major = 0; ws->compat_minor = 0; ws->area.left = 0; ws->area.top = 0; ws->area.width = 0; ws->area.height = 0; ws->vp = ws->area; ws->lpane_open = WORKSPACE_LPANE_OPEN; ws->lpane_position = WORKSPACE_LPANE_POSITION; ws->rpane_open = WORKSPACE_RPANE_OPEN; ws->rpane_position = WORKSPACE_RPANE_POSITION; ws->status = NULL; ws->scale = 1.0; ws->offset = 0.0; ws->local_defs = im_strdupn( _( "// private definitions for this tab\n" ) ); ws->local_kitg = NULL; ws->local_kit = NULL; workspace_all = g_slist_prepend( workspace_all, ws ); } GType workspace_get_type( void ) { static GType workspace_type = 0; if( !workspace_type ) { static const GTypeInfo info = { sizeof( WorkspaceClass ), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) workspace_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof( Workspace ), 32, /* n_preallocs */ (GInstanceInitFunc) workspace_init, }; workspace_type = g_type_register_static( TYPE_MODEL, "Workspace", &info, 0 ); } return( workspace_type ); } Workspace * workspace_new( Workspacegroup *wsg, const char *name ) { Workspaceroot *wsr = wsg->wsr; Workspace *ws; #ifdef DEBUG printf( "workspace_new: %s\n", name ); #endif /*DEBUG*/ if( compile_lookup( wsr->sym->expr->compile, name ) ) { error_top( _( "Name clash." ) ); error_sub( _( "Can't create workspace \"%s\". " "A symbol with that name already exists." ), name ); return( NULL ); } ws = WORKSPACE( g_object_new( TYPE_WORKSPACE, NULL ) ); workspace_link( ws, wsg, name ); icontainer_child_add( ICONTAINER( wsg ), ICONTAINER( ws ), -1 ); return( ws ); } /* Make the blank workspace we present the user with (in the absence of * anything else). */ Workspace * workspace_new_blank( Workspacegroup *wsg ) { char name[256]; Workspace *ws; workspaceroot_name_new( wsg->wsr, name ); if( !(ws = workspace_new( wsg, name )) ) return( NULL ); /* Make an empty column. */ (void) workspace_column_pick( ws ); icontainer_current( ICONTAINER( wsg ), ICONTAINER( ws ) ); iobject_set( IOBJECT( ws ), NULL, _( "Default empty tab" ) ); return( ws ); } /* Get the bottom row from the current column. */ static Row * workspace_get_bottom( Workspace *ws ) { return( column_get_bottom( workspace_column_pick( ws ) ) ); } gboolean workspace_add_action( Workspace *ws, const char *name, const char *action, int nparam ) { Column *col = workspace_column_pick( ws ); char txt[1024]; VipsBuf buf = VIPS_BUF_STATIC( txt ); /* Are there any selected symbols? */ vips_buf_appends( &buf, action ); if( nparam > 0 && workspace_selected_any( ws ) ) { if( nparam != workspace_selected_num( ws ) ) { error_top( _( "Wrong number of arguments." ) ); error_sub( _( "%s needs %d arguments, " "there are %d selected." ), name, nparam, workspace_selected_num( ws ) ); return( FALSE ); } vips_buf_appends( &buf, " " ); workspace_selected_names( ws, &buf, " " ); if( vips_buf_is_full( &buf ) ) { error_top( _( "Overflow error." ) ); error_sub( _( "Too many names selected." ) ); return( FALSE ); } if( !workspace_add_def_recalc( ws, vips_buf_all( &buf ) ) ) return( FALSE ); workspace_deselect_all( ws ); } else { /* Try to use the previous n items in this column as the * arguments. */ if( !column_add_n_names( col, name, &buf, nparam ) || !workspace_add_def_recalc( ws, vips_buf_all( &buf ) ) ) return( FALSE ); } return( TRUE ); } int workspace_number( void ) { return( g_slist_length( workspace_all ) ); } static void * workspace_row_dirty( Row *row, int serial ) { return( expr_dirty( row->expr, serial ) ); } /* Recalculate selected items. */ gboolean workspace_selected_recalc( Workspace *ws ) { if( workspace_selected_map( ws, (row_map_fn) workspace_row_dirty, GINT_TO_POINTER( link_serial_new() ), NULL ) ) return( FALSE ); /* Recalc even if autorecomp is off. */ symbol_recalculate_all_force( TRUE ); workspace_deselect_all( ws ); return( TRUE ); } static void * workspace_selected_remove2( Row *row ) { if( row != row->top_row ) return( row ); return( NULL ); } static void * workspace_selected_remove3( Row *row, int *nsel ) { if( row->selected ) *nsel += 1; return( NULL ); } static void * workspace_selected_remove4( Column *col, GSList **cs ) { int nsel = 0; (void) column_map( col, (row_map_fn) workspace_selected_remove3, &nsel, NULL ); if( nsel > 0 ) *cs = g_slist_prepend( *cs, col ); return( NULL ); } static void * workspace_selected_remove5( Column *col ) { Subcolumn *scol = col->scol; int nmembers = g_slist_length( ICONTAINER( scol )->children ); if( nmembers > 0 ) icontainer_pos_renumber( ICONTAINER( scol ) ); else IDESTROY( col ); return( NULL ); } /* Remove selected items. * * 0. check all objects to be destroyed are top level rows * 1. look for and note all columns containing items we are going to delete * 2. loop over selected items, and delete them one-by-one. * 3. loop over the columns we noted in 1 and delete empty ones * 4. renumber affected columns */ static gboolean workspace_selected_remove( Workspace *ws ) { Row *row; GSList *cs = NULL; if( (row = (Row *) workspace_selected_map( ws, (row_map_fn) workspace_selected_remove2, NULL, NULL )) ) { error_top( _( "You can only remove top level rows." ) ); error_sub( _( "Not all selected objects are top level " "rows." ) ); return( FALSE ); } (void) workspace_map_column( ws, (column_map_fn) workspace_selected_remove4, &cs ); (void) workspace_selected_map_sym( ws, (symbol_map_fn) iobject_destroy, NULL, NULL ); (void) slist_map( cs, (SListMapFn) workspace_selected_remove5, NULL ); IM_FREEF( g_slist_free, cs ); symbol_recalculate_all(); workspace_set_modified( ws, TRUE ); return( TRUE ); } /* Callback for workspace_selected_remove_yesno. Remove selected items. */ static void workspace_selected_remove_yesno_cb( iWindow *iwnd, void *client, iWindowNotifyFn nfn, void *sys ) { Workspace *ws = WORKSPACE( client ); if( workspace_selected_remove( ws ) ) nfn( sys, IWINDOW_YES ); else nfn( sys, IWINDOW_ERROR ); } /* Ask before removing selected. */ void workspace_selected_remove_yesno( Workspace *ws, GtkWidget *parent ) { char txt[30]; VipsBuf buf = VIPS_BUF_STATIC( txt ); if( !workspace_selected_any( ws ) ) return; workspace_selected_names( ws, &buf, ", " ); box_yesno( parent, workspace_selected_remove_yesno_cb, iwindow_true_cb, ws, iwindow_notify_null, NULL, GTK_STOCK_DELETE, _( "Delete selected objects?" ), _( "Are you sure you want to delete %s?" ), vips_buf_all( &buf ) ); } /* Sub fn of below ... add a new index expression. */ static gboolean workspace_ungroup_add_index( Row *row, const char *fmt, int i ) { static char txt[200]; static VipsBuf buf = VIPS_BUF_STATIC( txt ); vips_buf_rewind( &buf ); row_qualified_name( row, &buf ); vips_buf_appendf( &buf, fmt, i ); if( !workspace_add_def_recalc( row->ws, vips_buf_all( &buf ) ) ) return( FALSE ); return( TRUE ); } static void * workspace_ungroup_row( Row *row ) { PElement *root = &row->expr->root; gboolean result; PElement value; int length; int i; if( !heap_is_instanceof( CLASS_GROUP, root, &result ) ) return( row ); if( result ) { if( !class_get_member( root, MEMBER_VALUE, NULL, &value ) || (length = heap_list_length_max( &value, 100 )) < 0 ) return( row ); for( i = 0; i < length; i++ ) if( !workspace_ungroup_add_index( row, ".value?%d", i ) ) return( row ); } else { if( !heap_is_list( root, &result ) ) return( row ); if( result ) { if( (length = heap_list_length_max( root, 100 )) < 0 ) return( row ); for( i = 0; i < length; i++ ) if( !workspace_ungroup_add_index( row, "?%d", i ) ) return( row ); } else { char txt[100]; VipsBuf buf = VIPS_BUF_STATIC( txt ); row_qualified_name( row, &buf ); error_top( _( "Unable to ungroup." ) ); error_sub( _( "Row \"%s\" is not a Group or a list." ), vips_buf_all( &buf ) ); return( row ); } } return( NULL ); } /* Ungroup the selected object(s), or the bottom object. */ gboolean workspace_selected_ungroup( Workspace *ws ) { if( !workspace_selected_any( ws ) ) { Row *row; if( (row = workspace_get_bottom( ws )) ) { if( workspace_ungroup_row( row ) ) return( FALSE ); symbol_recalculate_all(); } } else { /* Ungroup selected symbols. */ if( workspace_selected_map( ws, (row_map_fn) workspace_ungroup_row, NULL, NULL ) ) { symbol_recalculate_all(); return( FALSE ); } symbol_recalculate_all(); workspace_deselect_all( ws ); } return( TRUE ); } /* Group the selected object(s). */ gboolean workspace_selected_group( Workspace *ws ) { char txt[MAX_STRSIZE]; VipsBuf buf = VIPS_BUF_STATIC( txt ); if( !workspace_selected_any( ws ) ) { Row *row; if( (row = workspace_get_bottom( ws )) ) row_select( row ); } vips_buf_appends( &buf, "Group [" ); workspace_selected_names( ws, &buf, "," ); vips_buf_appends( &buf, "]" ); if( !workspace_add_def_recalc( ws, vips_buf_all( &buf ) ) ) return( FALSE ); workspace_deselect_all( ws ); return( TRUE ); } static Row * workspace_test_error( Row *row, Workspace *ws, int *found ) { g_assert( row->err ); /* Found next? */ if( *found ) return( row ); if( row == ws->last_error ) { /* Found the last one ... return the next one. */ *found = 1; return( NULL ); } return( NULL ); } /* FALSE for no errors. */ gboolean workspace_next_error( Workspace *ws ) { char txt[MAX_LINELENGTH]; VipsBuf buf = VIPS_BUF_STATIC( txt ); int found; if( !ws->errors ) return( FALSE ); /* Search for the one after the last one. */ found = 0; ws->last_error = (Row *) slist_map2( ws->errors, (SListMap2Fn) workspace_test_error, ws, &found ); /* NULL? We've hit end of table, start again. */ if( !ws->last_error ) { found = 1; ws->last_error = (Row *) slist_map2( ws->errors, (SListMap2Fn) workspace_test_error, ws, &found ); } /* *must* have one now. */ g_assert( ws->last_error && ws->last_error->err ); model_scrollto( MODEL( ws->last_error ), MODEL_SCROLL_TOP ); row_qualified_name( ws->last_error->expr->row, &buf ); vips_buf_appends( &buf, ": " ); vips_buf_appends( &buf, ws->last_error->expr->error_top ); workspace_set_status( ws, "%s", vips_buf_firstline( &buf ) ); return( TRUE ); } void workspace_set_status( Workspace *ws, const char *fmt, ... ) { va_list ap; char buf[256]; va_start( ap, fmt ); (void) im_vsnprintf( buf, 256, fmt, ap ); va_end( ap ); IM_SETSTR( ws->status, buf ); iobject_changed( IOBJECT( ws ) ); } void workspace_set_mode( Workspace *ws, WorkspaceMode mode ) { if( ws->mode != mode ) { ws->mode = mode; /* Rebuild all the views. Yuk! It would be better to get the * views that change with workspace mode to watch the * enclosing workspace and update on that. But we'd have * connections from almost every object in the ws. We don't * change mode very often, so just loop over them all. */ icontainer_map_all( ICONTAINER( ws ), (icontainer_map_fn) iobject_changed, NULL ); } } /* New ws private defs. */ gboolean workspace_local_set( Workspace *ws, const char *txt ) { /* New kit for defs ... will destroy any old defs, since we can't have * two kits with the same name. Don't register it, we don't want it * to be autosaved on quit. */ ws->local_kit = toolkit_new( ws->local_kitg, "Workspace Locals" ); filemodel_unregister( FILEMODEL( ws->local_kit ) ); IM_SETSTR( ws->local_defs, txt ); iobject_changed( IOBJECT( ws ) ); workspace_set_modified( ws, TRUE ); attach_input_string( txt ); if( !parse_toplevel( ws->local_kit, 0 ) ) return( FALSE ); return( TRUE ); } gboolean workspace_local_set_from_file( Workspace *ws, const char *fname ) { iOpenFile *of; char *txt; if( !(of = ifile_open_read( "%s", fname )) ) return( FALSE ); if( !(txt = ifile_read( of )) ) { ifile_close( of ); return( FALSE ); } if( !workspace_local_set( ws, txt ) ) { g_free( txt ); ifile_close( of ); return( FALSE ); } filemodel_set_filename( FILEMODEL( ws->local_kit ), fname ); g_free( txt ); ifile_close( of ); return( TRUE ); } static gint workspace_jump_name_compare( iContainer *a, iContainer *b ) { int la = strlen( IOBJECT( a )->name ); int lb = strlen( IOBJECT( b )->name ); /* Smaller names first. */ if( la == lb ) return( strcmp( IOBJECT( a )->name, IOBJECT( b )->name ) ); else return( la - lb ); } static void workspace_jump_column_cb( GtkWidget *item, Column *column ) { column_scrollto( column, MODEL_SCROLL_TOP ); } static void * workspace_jump_build( Column *column, GtkWidget *menu ) { GtkWidget *item; char txt[256]; VipsBuf buf = VIPS_BUF_STATIC( txt ); vips_buf_appendf( &buf, "%s - %s", IOBJECT( column )->name, IOBJECT( column )->caption ); item = gtk_menu_item_new_with_label( vips_buf_all( &buf ) ); g_signal_connect( item, "activate", G_CALLBACK( workspace_jump_column_cb ), column ); gtk_menu_append( GTK_MENU( menu ), item ); gtk_widget_show( item ); return( NULL ); } /* Update a menu with the set of current columns. */ void workspace_jump_update( Workspace *ws, GtkWidget *menu ) { GSList *columns; gtk_container_foreach( GTK_CONTAINER( menu ), (GtkCallback) gtk_widget_destroy, NULL ); columns = icontainer_get_children( ICONTAINER( ws ) ); columns = g_slist_sort( columns, (GCompareFunc) workspace_jump_name_compare ); slist_map( columns, (SListMapFn) workspace_jump_build, menu ); g_slist_free( columns ); } /* Merge file into this workspace. */ gboolean workspace_merge_file( Workspace *ws, const char *filename ) { Workspacegroup *wsg = workspace_get_workspacegroup( ws ); icontainer_current( ICONTAINER( wsg ), ICONTAINER( ws ) ); return( workspacegroup_merge_columns( wsg, filename ) ); } /* Duplicate selected rows in this workspace. */ gboolean workspace_selected_duplicate( Workspace *ws ) { Workspacegroup *wsg = workspace_get_workspacegroup( ws ); char filename[FILENAME_MAX]; if( !workspace_selected_any( ws ) ) { Row *row; if( (row = workspace_get_bottom( ws )) ) row_select( row ); } if( !temp_name( filename, "ws" ) ) return( FALSE ); if( !workspace_selected_save( ws, filename ) ) return( FALSE ); progress_begin(); if( !workspacegroup_merge_rows( wsg, filename ) ) { progress_end(); unlinkf( "%s", filename ); return( FALSE ); } unlinkf( "%s", filename ); symbol_recalculate_all(); workspace_deselect_all( ws ); column_scrollto( workspace_get_column( ws ), MODEL_SCROLL_BOTTOM ); progress_end(); return( TRUE ); } /* Bounding box of columns to be saved. Though we only really set top/left. */ static void * workspace_selected_save_box( Column *col, Rect *box ) { if( model_save_test( MODEL( col ) ) ) { if( im_rect_isempty( box ) ) { box->left = col->x; box->top = col->y; box->width = 100; box->height = 100; } else { box->left = IM_MIN( box->left, col->x ); box->top = IM_MIN( box->top, col->y ); } } return( NULL ); } /* Save just the selected objects. */ gboolean workspace_selected_save( Workspace *ws, const char *filename ) { Workspacegroup *wsg = workspace_get_workspacegroup( ws ); Rect box = { 0 }; icontainer_current( ICONTAINER( wsg ), ICONTAINER( ws ) ); workspace_map_column( ws, (column_map_fn) workspace_selected_save_box, &box ); filemodel_set_offset( FILEMODEL( wsg ), box.left, box.top ); if( !workspacegroup_save_selected( wsg, filename ) ) return( FALSE ); return( TRUE ); } gboolean workspace_rename( Workspace *ws, const char *name, const char *caption ) { if( !symbol_rename( ws->sym, name ) ) return( FALSE ); iobject_set( IOBJECT( ws ), IOBJECT( ws->sym )->name, caption ); workspace_set_modified( ws, TRUE ); symbol_recalculate_all(); return( TRUE ); } void workspace_set_locked( Workspace *ws, gboolean locked ) { if( ws->locked != locked ) { ws->locked = locked; iobject_changed( IOBJECT( ws ) ); workspace_set_modified( ws, TRUE ); } } gboolean workspace_duplicate( Workspace *ws ) { Workspacegroup *wsg = workspace_get_workspacegroup( ws ); char filename[FILENAME_MAX]; if( !temp_name( filename, "ws" ) ) return( FALSE ); icontainer_current( ICONTAINER( wsg ), ICONTAINER( ws ) ); if( !workspacegroup_save_current( wsg, filename ) ) return( FALSE ); progress_begin(); if( !workspacegroup_merge_workspaces( wsg, filename ) ) { progress_end(); unlinkf( "%s", filename ); return( FALSE ); } unlinkf( "%s", filename ); symbol_recalculate_all(); progress_end(); return( TRUE ); } nip2-8.7.0/src/vipsobject.c0000644000175000017500000002474513224651032012434 00000000000000/* Interface to VipsObject. */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #include "ip.h" /* #define DEBUG */ /* Maxiumum number of args to constructor. */ #define MAX_VIPS_ARGS (100) /* What we track during construct. */ typedef struct _Vo { Reduce *rc; /* Object we are building. */ VipsObject *object; const char *name; /* Required args supplied to us from nip. */ PElement args[MAX_VIPS_ARGS]; int nargs_supplied; /* Number of required input args the object has. */ int nargs_required; /* Number of output args the object has. */ int nargs_output; /* A place to build the output, safe from the GC. */ Element out; } Vo; static void vo_free( Vo *vo ) { heap_unregister_element( vo->rc->heap, &vo->out ); VIPS_UNREF( vo->object ); im_free( vo ); } static Vo * vo_new( Reduce *rc, const char *name ) { const VipsObjectClass *class; Vo *vo; if( !(class = vips_class_find( "VipsObject", name )) ) return( NULL ); if( !(vo = INEW( NULL, Vo )) ) return( NULL ); vo->rc = rc; vo->object = g_object_new( G_OBJECT_CLASS_TYPE( class ), NULL ); vo->name = class->nickname; vo->nargs_supplied = 0; vo->nargs_required = 0; vo->nargs_output = 0; vo->out.type = ELEMENT_NOVAL; vo->out.ele = (void *) 12; heap_register_element( rc->heap, &vo->out ); return( vo ); } static void * vo_gather_required( PElement *item, Vo *vo ) { if( vo->nargs_supplied >= MAX_VIPS_ARGS ) { error_top( _( "Too many arguments." ) ); error_sub( _( "No more than %d arguments allowed." ), MAX_VIPS_ARGS ); return( item ); } vo->args[vo->nargs_supplied] = *item; vo->nargs_supplied += 1; return( NULL ); } static int vo_set_property( Vo *vo, const char *name, GParamSpec *pspec, GValue *value ) { /* If we're setting an enum from a string, look up the enum nickname. */ if( G_IS_PARAM_SPEC_ENUM( pspec ) && G_VALUE_TYPE( value ) == VIPS_TYPE_REF_STRING ) { const char *str = vips_value_get_ref_string( value, NULL ); if( vips_object_set_argument_from_string( vo->object, name, str ) ) return( -1 ); } else g_object_set_property( G_OBJECT( vo->object ), name, value ); return( 0 ); } static void * vo_set_required_input( VipsObject *object, GParamSpec *pspec, VipsArgumentClass *argument_class, VipsArgumentInstance *argument_instance, Vo *vo ) { /* Looking for required input args ... these are the ones we can set * from the supplied required list. */ if( (argument_class->flags & VIPS_ARGUMENT_REQUIRED) && (argument_class->flags & VIPS_ARGUMENT_CONSTRUCT) && (argument_class->flags & VIPS_ARGUMENT_INPUT) && !argument_instance->assigned && vo->nargs_required < vo->nargs_supplied ) { const char *name = g_param_spec_get_name( pspec ); int i = vo->nargs_required; GValue gvalue = { 0 }; if( !heap_ip_to_gvalue( &vo->args[i], &gvalue ) ) return( object ); if( vo_set_property( vo, name, pspec, &gvalue ) ) { g_value_unset( &gvalue ); return( object ); } g_value_unset( &gvalue ); vo->nargs_required += 1; } return( NULL ); } static void * vo_set_optional_arg( const char *name, PElement *value, Vo *vo ) { GParamSpec *pspec; VipsArgumentClass *argument_class; VipsArgumentInstance *argument_instance; /* Looking for construct-time optional input args. */ /* For optional args, we should ignore properties that don't exist. For * example, we might supply ($sharpening => 12) to all interpolators, * though only one interpolator uses this property. */ if( vips_object_get_argument( vo->object, name, &pspec, &argument_class, &argument_instance ) ) return( NULL ); if( !(argument_class->flags & VIPS_ARGUMENT_REQUIRED) && (argument_class->flags & VIPS_ARGUMENT_CONSTRUCT) && (argument_class->flags & VIPS_ARGUMENT_INPUT) && !argument_instance->assigned ) { GValue gvalue = { 0 }; if( !heap_ip_to_gvalue( value, &gvalue ) ) { g_value_unset( &gvalue ); return( value ); } if( vo_set_property( vo, name, pspec, &gvalue ) ) { g_value_unset( &gvalue ); return( value ); } g_value_unset( &gvalue ); } return( NULL ); } /* Set a set of optional args ... of the form [["caption", 12], ["label", 42]] * etc. */ static gboolean vo_set_optional( Vo *vo, PElement *optional ) { if( heap_map_dict( optional, (heap_map_dict_fn) vo_set_optional_arg, vo, NULL ) ) return( FALSE ); return( TRUE ); } /* Make a vo and supply args from nip2. */ static gboolean vo_args( Vo *vo, PElement *required, PElement *optional ) { /* Gather supplied required input args list. */ if( heap_map_list( required, (heap_map_list_fn) vo_gather_required, vo, NULL ) ) return( FALSE ); /* Set required input arguments. */ if( vips_argument_map( VIPS_OBJECT( vo->object ), (VipsArgumentMapFn) vo_set_required_input, vo, NULL ) ) return( FALSE ); if( vo->nargs_supplied != vo->nargs_required ) { error_top( _( "Wrong number of required arguments." ) ); error_sub( _( "Operation \"%s\" has %d required arguments, " "you supplied %d." ), vo->name, vo->nargs_required, vo->nargs_supplied ); return( FALSE ); } /* Set all optional input args. */ if( !vo_set_optional( vo, optional ) ) return( FALSE ); return( TRUE ); } /* Make a VipsObject. */ void vo_object_new( Reduce *rc, const char *name, PElement *required, PElement *optional, PElement *out ) { Vo *vo; Managedgobject *managedgobject; if( !(vo = vo_new( rc, name )) ) reduce_throw( rc ); if( !vo_args( vo, required, optional ) ) { vo_free( vo ); reduce_throw( rc ); } /* Ask the object to construct. */ if( vips_object_build( vo->object ) ) { error_top( _( "VIPS library error." ) ); error_sub( "%s", im_error_buffer() ); im_error_clear(); vo_free( vo ); reduce_throw( rc ); } /* Return the constructed object. */ if( !(managedgobject = managedgobject_new( vo->rc->heap, G_OBJECT( vo->object ) )) ) { vo_free( vo ); reduce_throw( rc ); } PEPUTP( out, ELEMENT_MANAGED, managedgobject ); #ifdef DEBUG { char txt[1000]; VipsBuf buf = VIPS_BUF_STATIC( txt ); vips_object_to_string( vo->object, &buf ); printf( "vo_object_new: built %s\n", vips_buf_all( &buf ) ); } #endif /*DEBUG*/ vo_free( vo ); } /* Looking for required output args ... append to out. */ static void * vo_get_required_output( VipsObject *object, GParamSpec *pspec, VipsArgumentClass *argument_class, VipsArgumentInstance *argument_instance, Vo *vo, PElement *out ) { if( (argument_class->flags & VIPS_ARGUMENT_REQUIRED) && (argument_class->flags & VIPS_ARGUMENT_OUTPUT) && argument_instance->assigned ) { const char *name = g_param_spec_get_name( pspec ); GType type = G_PARAM_SPEC_VALUE_TYPE( pspec ); PElement lhs; GValue value = { 0 }; if( !heap_list_add( vo->rc->heap, out, &lhs ) ) return( object ); g_value_init( &value, type ); g_object_get_property( G_OBJECT( object ), name, &value ); if( !heap_gvalue_to_ip( &value, &lhs ) ) { g_value_unset( &value ); return( object ); } g_value_unset( &value ); (void) heap_list_next( out ); } return( NULL ); } /* Looking for construct-time optional output args. Append them to out. */ static void * vo_get_optional_arg( const char *name, PElement *value, Vo *vo, PElement *out ) { GParamSpec *pspec; VipsArgumentClass *argument_class; VipsArgumentInstance *argument_instance; if( vips_object_get_argument( vo->object, name, &pspec, &argument_class, &argument_instance ) ) return( NULL ); if( !(argument_class->flags & VIPS_ARGUMENT_REQUIRED) && (argument_class->flags & VIPS_ARGUMENT_OUTPUT) && argument_instance->assigned ) { GType type = G_PARAM_SPEC_VALUE_TYPE( pspec ); GValue gvalue = { 0 }; PElement lhs; if( !heap_list_add( vo->rc->heap, out, &lhs ) ) return( value ); g_value_init( &gvalue, type ); g_object_get_property( G_OBJECT( vo->object ), name, &gvalue ); if( !heap_gvalue_to_ip( &gvalue, &lhs ) ) { g_value_unset( &gvalue ); return( value ); } g_value_unset( &gvalue ); (void) heap_list_next( out ); } return( NULL ); } /* Get a set of optional args ... of the form [["caption", []], ["label", []]] * etc. */ static gboolean vo_get_optional( Vo *vo, PElement *optional, PElement *out ) { if( heap_map_dict( optional, (heap_map_dict_fn) vo_get_optional_arg, vo, out ) ) return( FALSE ); return( TRUE ); } /* Run a VipsOperation. Like vo_object_new(), but we return the output args * rather than the operation. */ void vo_call( Reduce *rc, const char *name, PElement *required, PElement *optional, PElement *out ) { Vo *vo; PElement pe; if( !(vo = vo_new( rc, name )) ) reduce_throw( rc ); if( !vo_args( vo, required, optional ) ) { vo_free( vo ); reduce_throw( rc ); } /* Ask the object to construct. This can update vo->operation with an * old one from the cache. */ if( vips_cache_operation_buildp( (VipsOperation **) &vo->object ) ) { error_top( _( "VIPS library error." ) ); error_sub( "%s", im_error_buffer() ); im_error_clear(); vips_object_unref_outputs( vo->object ); vo_free( vo ); reduce_throw( rc ); } /* We can't build the output object directly on out, since it might be * one of our inputs. We use the safe Element in vo for the build, * then copy at the end. */ /* Empty output list. */ PEPOINTE( &pe, &vo->out ); heap_list_init( &pe ); /* Append required outputs. */ if( vips_argument_map( VIPS_OBJECT( vo->object ), (VipsArgumentMapFn) vo_get_required_output, vo, &pe ) ) { vips_object_unref_outputs( vo->object ); vo_free( vo ); reduce_throw( rc ); } /* Append optional outputs. */ if( !vo_get_optional( vo, optional, &pe ) ) { vips_object_unref_outputs( vo->object ); vo_free( vo ); reduce_throw( rc ); } /* Now write the output object to out. */ PEPUTE( out, &vo->out ); vips_object_unref_outputs( vo->object ); vo_free( vo ); } nip2-8.7.0/src/imagepresent.c0000644000175000017500000012257113224651032012743 00000000000000/* Imagepresent widget code. */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #include "ip.h" /* #define DEBUG */ /* Define to trace button press events. #define EVENT */ /* Snap if closer than this. */ const int imagepresent_snap_threshold = 10; /* Cursor shape in id for each state. */ iWindowShape imagepresent_cursors[IMAGEMODEL_LAST] = { IWINDOW_SHAPE_EDIT, /* IMAGEMODEL_SELECT */ IWINDOW_SHAPE_MOVE, /* IMAGEMODEL_PAN */ IWINDOW_SHAPE_MAGIN, /* IMAGEMODEL_MAGIN */ IWINDOW_SHAPE_MAGOUT, /* IMAGEMODEL_MAGOUT */ IWINDOW_SHAPE_DROPPER, /* IMAGEMODEL_DROPPER */ IWINDOW_SHAPE_PEN, /* IMAGEMODEL_PEN */ IWINDOW_SHAPE_PEN, /* IMAGEMODEL_LINE */ IWINDOW_SHAPE_RECT, /* IMAGEMODEL_RECT */ IWINDOW_SHAPE_FLOOD, /* IMAGEMODEL_FLOOD */ IWINDOW_SHAPE_FLOOD, /* IMAGEMODEL_BLOB */ IWINDOW_SHAPE_TEXT, /* IMAGEMODEL_TEXT */ IWINDOW_SHAPE_SMUDGE /* IMAGEMODEL_SMUDGE */ }; /* Gdk keysyms, and the zooms we set for each. */ typedef struct _ImagepresentKeymap { guint keyval; int zoom; } ImagepresentKeymap; static ImagepresentKeymap imagepresent_keymap[] = { { GDK_1, 1 }, { GDK_2, 2 }, { GDK_3, 3 }, { GDK_4, 4 }, { GDK_5, 5 }, { GDK_6, 6 }, { GDK_7, 7 }, { GDK_8, 8 }, { GDK_9, 9 } }; /* Parent class. */ static GtkBinClass *parent_class = NULL; static void imagepresent_destroy( GtkObject *object ) { Imagepresent *ip = IMAGEPRESENT( object ); #ifdef DEBUG printf( "imagepresent_destroy\n" ); #endif /*DEBUG*/ IM_FREEF( g_source_remove, ip->scroll_tid ); IM_FREEF( iwindow_cursor_context_destroy, ip->cntxt ); DESTROY_GTK( ip->ruler_menu ); if( ip->imagemodel ) { iImage *iimage = ip->imagemodel->iimage; if( iimage ) iimage->views = g_slist_remove( iimage->views, ip ); UNREF( ip->imagemodel ); } GTK_OBJECT_CLASS( parent_class )->destroy( object ); /* Child views should all have removed themselves. */ g_assert( ip->regionviews == NULL ); } static void imagepresent_size_request( GtkWidget *widget, GtkRequisition *requisition ) { GtkBin *bin = GTK_BIN( widget ); gint focus_width; gint focus_pad; gtk_widget_style_get( widget, "focus-line-width", &focus_width, "focus-padding", &focus_pad, NULL ); requisition->width = 2 * (focus_width + focus_pad); requisition->height = 2 * (focus_width + focus_pad); if( bin->child && GTK_WIDGET_VISIBLE( bin->child ) ) { GtkRequisition child_requisition; gtk_widget_size_request( bin->child, &child_requisition ); requisition->width += child_requisition.width; requisition->height += child_requisition.height; } } static void imagepresent_size_allocate( GtkWidget *widget, GtkAllocation *allocation ) { GtkBin *bin = GTK_BIN( widget ); widget->allocation = *allocation; if( bin->child && GTK_WIDGET_VISIBLE( bin->child ) ) { gint focus_width; gint focus_pad; GtkAllocation child_allocation; gtk_widget_style_get( widget, "focus-line-width", &focus_width, "focus-padding", &focus_pad, NULL ); child_allocation.x = allocation->x + focus_width + focus_pad; child_allocation.y = allocation->y + focus_width + focus_pad; child_allocation.width = IM_MAX( 1, allocation->width - 2 * (focus_width + focus_pad) ); child_allocation.height = IM_MAX( 1, allocation->height - 2 * (focus_width + focus_pad) ); gtk_widget_size_allocate( bin->child, &child_allocation ); } } static gboolean imagepresent_expose_event( GtkWidget *widget, GdkEventExpose *event ) { if( GTK_WIDGET_DRAWABLE( widget ) ) { if( GTK_WIDGET_HAS_FOCUS( widget ) ) { gint focus_pad; int x, y, width, height; gtk_widget_style_get( widget, "focus-padding", &focus_pad, NULL ); x = widget->allocation.x + focus_pad; y = widget->allocation.y + focus_pad; width = widget->allocation.width - 2 * focus_pad; height = widget->allocation.height - 2 * focus_pad; gtk_paint_focus( widget->style, widget->window, GTK_WIDGET_STATE( widget ), &event->area, widget, "imagepresent", x, y, width, height ); } GTK_WIDGET_CLASS( parent_class )->expose_event( widget, event ); } return( FALSE ); } /* Connect to our enclosing iwnd on realize. */ static void imagepresent_realize( GtkWidget *widget ) { Imagepresent *ip = IMAGEPRESENT( widget ); iWindow *iwnd = IWINDOW( gtk_widget_get_toplevel( widget ) ); if( !ip->cntxt ) ip->cntxt = iwindow_cursor_context_new( iwnd, 0, "imagepresent" ); /* Set initial state. _realize() is too late ... the _refresh() has * already happened. */ iwindow_cursor_context_set_cursor( ip->cntxt, imagepresent_cursors[ip->imagemodel->state] ); GTK_WIDGET_CLASS( parent_class )->realize( widget ); } static void imagepresent_class_init( ImagepresentClass *class ) { GtkObjectClass *object_class = (GtkObjectClass *) class; GtkWidgetClass *widget_class = (GtkWidgetClass *) class; /* Init parent class. */ parent_class = g_type_class_peek_parent( class ); object_class->destroy = imagepresent_destroy; widget_class->size_request = imagepresent_size_request; widget_class->size_allocate = imagepresent_size_allocate; widget_class->expose_event = imagepresent_expose_event; widget_class->realize = imagepresent_realize; /* Init default methods. */ /* Static class init. */ } /* Rethink rulers. */ static void imagepresent_hruler_rethink( Imagepresent *ip ) { Imagemodel *imagemodel = ip->imagemodel; Conversion *conv = imagemodel->conv; IMAGE *im = imageinfo_get( FALSE, conv->ii ); /* Try to get the ruler width: same as the whole of the scrolled * window. */ int ruler_width = GTK_WIDGET( ip->swin )->allocation.width; double from = imagemodel->visible.left; double to = from + ruler_width; double pos = ip->last_x; double scale; if( imagemodel->rulers_offset && im ) { from -= im->Xoffset; to -= im->Xoffset; pos -= im->Xoffset; } scale = conversion_dmag( conv->mag ); if( imagemodel->rulers_mm && im ) scale *= im->Xres; from /= scale; to /= scale; pos /= scale; gtk_ruler_set_range( GTK_RULER( ip->hrule ), from, to, pos, to - from ); } static void imagepresent_vruler_rethink( Imagepresent *ip ) { Imagemodel *imagemodel = ip->imagemodel; Conversion *conv = imagemodel->conv; IMAGE *im = imageinfo_get( FALSE, conv->ii ); /* Try to get the ruler height: same as the whole of the scrolled * window. */ int ruler_height = GTK_WIDGET( ip->swin )->allocation.height; double from = imagemodel->visible.top; double to = from + ruler_height; double pos = ip->last_y; double scale; if( imagemodel->rulers_offset && im ) { from -= im->Yoffset; to -= im->Yoffset; pos -= im->Yoffset; } scale = conversion_dmag( conv->mag ); if( imagemodel->rulers_mm && im ) scale *= im->Yres; from /= scale; to /= scale; pos /= scale; gtk_ruler_set_range( GTK_RULER( ip->vrule ), from, to, pos, to - from ); } /* Zoom with the mouse clicked at position x, y in canvas coordinates. */ static void imagepresent_zoom_in( Imagepresent *ip, int x, int y ) { Conversion *conv = ip->imagemodel->conv; int ix, iy; conversion_disp_to_im( conv, x, y, &ix, &iy ); imagepresent_set_mag_pos( ip, conversion_double( conv->mag ), ix, iy ); } static void imagepresent_zoom_in_centre( Imagepresent *ip ) { Imagemodel *imagemodel = ip->imagemodel; imagepresent_zoom_in( ip, IM_RECT_HCENTRE( &imagemodel->visible ), IM_RECT_VCENTRE( &imagemodel->visible ) ); } static void imagepresent_zoom_out( Imagepresent *ip ) { Imagemodel *imagemodel = ip->imagemodel; Conversion *conv = imagemodel->conv; int ix, iy; /* Current centre of window, image cods. */ conversion_disp_to_im( conv, IM_RECT_HCENTRE( &imagemodel->visible ), IM_RECT_VCENTRE( &imagemodel->visible ), &ix, &iy ); imagepresent_set_mag_pos( ip, conversion_halve( conv->mag ), ix, iy ); } /* Scroll events ... handle mousewheel shortcuts here. */ static gboolean imagepresent_scroll_event_cb( GtkWidget *widget, GdkEventScroll *ev, Imagepresent *ip ) { Imagemodel *imagemodel = ip->imagemodel; Rect *visible = &imagemodel->visible; gboolean handled; /* Gimp uses page_incr / 4 I think, but then scroll speed varies with * window size, which is pretty odd. Just use a constant. */ const int incr = 50; handled = FALSE; if( ev->direction == GDK_SCROLL_UP || ev->direction == GDK_SCROLL_DOWN ) { if( ev->state & GDK_CONTROL_MASK ) { if( ev->direction == GDK_SCROLL_UP ) imagepresent_zoom_in_centre( ip ); else imagepresent_zoom_out( ip ); handled = TRUE; } else if( ev->state & GDK_SHIFT_MASK ) { if( ev->direction == GDK_SCROLL_UP ) imagepresent_set_position( ip, visible->left + incr, visible->top ); else imagepresent_set_position( ip, visible->left - incr, visible->top ); handled = TRUE; } else { if( ev->direction == GDK_SCROLL_UP ) imagepresent_set_position( ip, visible->left, visible->top - incr ); else imagepresent_set_position( ip, visible->left, visible->top + incr ); handled = TRUE; } } return( handled ); } /* Our adjustments have changed (scroll or resize). */ static void imagepresent_hadj_changed_cb( GtkAdjustment *adj, Imagepresent *ip ) { Imagemodel *imagemodel = ip->imagemodel; Conversion *conv = imagemodel->conv; imagemodel->visible.left = adj->value; imagemodel->visible.width = adj->page_size; /* Update the visible hint on the conversion. */ conv->visible = imagemodel->visible; #ifdef DEBUG printf( "imagepresent_hadj_changed_cb: left = %d, width = %d\n", imagemodel->visible.left, imagemodel->visible.width ); #endif /*DEBUG*/ imagepresent_hruler_rethink( ip ); } static void imagepresent_vadj_changed_cb( GtkAdjustment *adj, Imagepresent *ip ) { Imagemodel *imagemodel = ip->imagemodel; Conversion *conv = imagemodel->conv; imagemodel->visible.top = adj->value; imagemodel->visible.height = adj->page_size; /* Update the visible hint on the conversion. */ conv->visible = imagemodel->visible; #ifdef DEBUG printf( "imagepresent_vadj_changed_cb: top = %d, height = %d\n", imagemodel->visible.top, imagemodel->visible.height ); #endif /*DEBUG*/ imagepresent_vruler_rethink( ip ); } static void imagepresent_floating_new( Imagepresent *ip, int left, int top, int width, int height, gboolean frozen, RegionviewType type, RegionviewResize resize, int x, int y ) { g_assert( !ip->regionview ); ip->floating.left = left; ip->floating.top = top; ip->floating.width = width; ip->floating.height = height; ip->regionview = regionview_new( NULL, &ip->floating, ip ); ip->regionview->frozen = frozen; ip->regionview->type = type; ip->regionview->resize = resize; regionview_attach( ip->regionview, x, y ); } /* Need to fwd ref this. */ static void imagepresent_left_release( Imagepresent *ip, GdkEvent *ev, int x, int y ); static gint imagepresent_hruler_event( GtkWidget *widget, GdkEvent *ev, Imagepresent *ip ) { Imagemodel *imagemodel = ip->imagemodel; Conversion *conv = imagemodel->conv; IMAGE *im = imageinfo_get( FALSE, conv->ii ); gboolean handled = FALSE; switch( ev->type ) { case GDK_BUTTON_PRESS: switch( ev->button.button ) { case 1: (void) imagemodel_set_state( imagemodel, IMAGEMODEL_SELECT, NULL ); imagepresent_floating_new( ip, 0, 0, im->Xsize, 0, TRUE, REGIONVIEW_HGUIDE, REGIONVIEW_RESIZE_BOTTOM, ev->button.x, ev->button.y ); /* The pointer will be grabbed for the drag on the * ruler window. We want to track in the main image * display window, so we have to explicitly ungrab. */ gdk_pointer_ungrab( ev->button.time ); handled = TRUE; break; default: break; } break; case GDK_BUTTON_RELEASE: switch( ev->button.button ) { case 1: imagepresent_left_release( ip, ev, ev->button.x, ev->button.y ); handled = TRUE; break; default: break; } break; default: break; } return( handled ); } static gint imagepresent_vruler_event( GtkWidget *widget, GdkEvent *ev, Imagepresent *ip ) { Imagemodel *imagemodel = ip->imagemodel; Conversion *conv = imagemodel->conv; IMAGE *im = imageinfo_get( FALSE, conv->ii ); gboolean handled = FALSE; switch( ev->type ) { case GDK_BUTTON_PRESS: switch( ev->button.button ) { case 1: (void) imagemodel_set_state( imagemodel, IMAGEMODEL_SELECT, NULL ); imagepresent_floating_new( ip, 0, 0, 0, im->Ysize, TRUE, REGIONVIEW_VGUIDE, REGIONVIEW_RESIZE_RIGHT, ev->button.x, ev->button.y ); gdk_pointer_ungrab( ev->button.time ); handled = TRUE; break; default: break; } break; case GDK_BUTTON_RELEASE: switch( ev->button.button ) { case 1: imagepresent_left_release( ip, ev, ev->button.x, ev->button.y ); handled = TRUE; break; default: break; } break; default: break; } return( handled ); } /* Track this during a snap. */ typedef struct { Imagepresent *ip; int x; /* Start point */ int y; int off_x; /* Current snap offset */ int off_y; int best_x; /* 'Closeness' of best snap so far */ int best_y; } ImagepresentSnap; static void * imagepresent_snap_sub( Regionview *regionview, ImagepresentSnap *snap, gboolean *snapped ) { Imagemodel *imagemodel = snap->ip->imagemodel; Conversion *conv = imagemodel->conv; Rect area; /* Only static h/v guides. */ if( regionview->type != REGIONVIEW_HGUIDE && regionview->type != REGIONVIEW_VGUIDE ) return( NULL ); if( regionview->state != REGIONVIEW_WAIT ) return( NULL ); /* Work in display cods. */ conversion_im_to_disp_rect( conv, ®ionview->area, &area ); if( regionview->type == REGIONVIEW_HGUIDE ) { int score = abs( area.top - snap->y ); if( score < snap->best_y ) { snap->off_y = area.top - snap->y; snap->best_y = score; *snapped = TRUE; } } else { int score = abs( area.left - snap->x ); if( score < snap->best_x ) { snap->off_x = area.left - snap->x; snap->best_x = score; *snapped = TRUE; } } return( NULL ); } static gboolean imagepresent_snap( Imagepresent *ip, ImagepresentSnap *snap ) { gboolean snapped; snap->ip = ip; snap->off_x = 0; snap->off_y = 0; snap->best_x = imagepresent_snap_threshold; snap->best_y = imagepresent_snap_threshold; snapped = FALSE; slist_map2( ip->regionviews, (SListMap2Fn) imagepresent_snap_sub, snap, &snapped ); return( snapped ); } gboolean imagepresent_snap_point( Imagepresent *ip, int x, int y, int *sx, int *sy ) { ImagepresentSnap snap; gboolean snapped; snap.x = x; snap.y = y; snapped = imagepresent_snap( ip, &snap ); *sx = x + snap.off_x; *sy = y + snap.off_y; return( snapped ); } gboolean imagepresent_snap_rect( Imagepresent *ip, Rect *in, Rect *out ) { ImagepresentSnap snap[8]; int i, best, best_score; gboolean snapped; /* Snap the corners plus the edge centres, take the best score. */ snap[0].x = in->left; snap[0].y = in->top; snap[1].x = in->left + in->width; snap[1].y = in->top; snap[2].x = in->left + in->width; snap[2].y = in->top + in->height; snap[3].x = in->left; snap[3].y = in->top + in->height; snap[4].x = in->left + in->width / 2; snap[4].y = in->top; snap[5].x = in->left + in->width; snap[5].y = in->top + in->height / 2; snap[6].x = in->left + in->width / 2; snap[6].y = in->top + in->height; snap[7].x = in->left; snap[7].y = in->top + in->height / 2; for( snapped = FALSE, i = 0; i < 8; i++ ) snapped |= imagepresent_snap( ip, &snap[i] ); best = 0; best_score = snap[0].best_x; for( i = 1; i < 7; i++ ) if( snap[i].best_x < best_score ) { best = i; best_score = snap[i].best_x; } out->left = in->left + snap[best].off_x; best = 0; best_score = snap[0].best_y; for( i = 1; i < 7; i++ ) if( snap[i].best_y < best_score ) { best = i; best_score = snap[i].best_y; } out->top = in->top + snap[best].off_y; out->width = in->width; out->height = in->height; return( snapped ); } /* Set position x, y in canvas coordinates as the top left of the window. */ void imagepresent_set_position( Imagepresent *ip, int x, int y ) { Imagemodel *imagemodel = ip->imagemodel; Conversion *conv = imagemodel->conv; int maxx = conv->canvas.width - imagemodel->visible.width; int maxy = conv->canvas.height - imagemodel->visible.height; #ifdef DEBUG printf( "imagepresent_set_position: %d x %d\n", x, y ); #endif /*DEBUG*/ adjustments_set_value( ip->hadj, ip->vadj, IM_CLIP( 0, x, maxx ), IM_CLIP( 0, y, maxy ) ); } /* Set a new magnification, and scroll for the passed x/y position in image * coordinates to be in the centre of the screen. */ void imagepresent_set_mag_pos( Imagepresent *ip, int mag, int ix, int iy ) { Imagemodel *imagemodel = ip->imagemodel; Conversion *conv = imagemodel->conv; int nx, ny; int last_x, last_y; #ifdef DEBUG printf( "imagepresent_set_mag_pos: %d, %d x %d\n", mag, ix, iy ); #endif /*DEBUG*/ /* Need to update last_x/y as well ... go to image cods around zoom * operation. */ conversion_disp_to_im( conv, ip->last_x, ip->last_y, &last_x, &last_y ); /* Take mouse pos to image cods around zoom operation. */ conversion_set_mag( conv, mag ); conversion_im_to_disp( conv, ix, iy, &nx, &ny ); /* ... and try to get that point in the centre of the window. We need * to zap in the new adjustment upper value, since this won't * otherwise get set until we get back to idle. */ ip->hadj->upper = conv->canvas.width; ip->vadj->upper = conv->canvas.height; imagepresent_set_position( ip, nx - imagemodel->visible.width / 2, ny - imagemodel->visible.height / 2 ); conversion_im_to_disp( conv, last_x, last_y, &ip->last_x, &ip->last_y ); } /* Set a magnification, keeping the centre of the screen in the centre. */ void imagepresent_zoom_to( Imagepresent *ip, int mag ) { Imagemodel *imagemodel = ip->imagemodel; Conversion *conv = imagemodel->conv; /* If window is larger than image. */ int w = IM_MIN( imagemodel->visible.width, conv->canvas.width ); int h = IM_MIN( imagemodel->visible.height, conv->canvas.height ); int ix, iy; conversion_disp_to_im( conv, imagemodel->visible.left + w / 2, imagemodel->visible.top + h / 2, &ix, &iy ); imagepresent_set_mag_pos( ip, mag, ix, iy ); } /* Left button press event. */ static gboolean imagepresent_left_press( Imagepresent *ip, GdkEvent *ev, int x, int y ) { Imagemodel *imagemodel = ip->imagemodel; Conversion *conv = imagemodel->conv; gboolean handled = FALSE; IMAGE *im2; int ix, iy; /* If there's a regionview grabbed already, block other actions. This * can happen with, for example, the win32 backend where we don't * always see a RELEASE for every PRESS. */ if( ip->regionview ) return( FALSE ); switch( imagemodel->state ) { case IMAGEMODEL_SELECT: if( ev->button.state & GDK_CONTROL_MASK ) { imagepresent_snap_point( ip, x, y, &x, &y ); conversion_disp_to_im( conv, x, y, &ix, &iy ); imagepresent_floating_new( ip, ix, iy, 0, 0, FALSE, REGIONVIEW_MARK, REGIONVIEW_RESIZE_BOTTOMRIGHT, x, y ); handled = TRUE; } break; case IMAGEMODEL_PAN: /* Save how much we have to add to x_root to get x. */ ip->dx = ev->button.x_root + imagemodel->visible.left; ip->dy = ev->button.y_root + imagemodel->visible.top; break; case IMAGEMODEL_MAGIN: imagepresent_zoom_in( ip, x, y ); handled = TRUE; break; case IMAGEMODEL_MAGOUT: imagepresent_zoom_out( ip ); handled = TRUE; break; case IMAGEMODEL_DROPPER: case IMAGEMODEL_FLOOD: case IMAGEMODEL_BLOB: break; case IMAGEMODEL_PEN: case IMAGEMODEL_SMUDGE: imagepresent_snap_point( ip, x, y, &x, &y ); conversion_disp_to_im( conv, x, y, &ix, &iy ); ip->paint_last_x = ix; ip->paint_last_y = iy; handled = TRUE; /* This can take ages and, via progress, actually process a * few events. Do it at the end. */ imagemodel_refresh_nib( imagemodel ); break; case IMAGEMODEL_LINE: imagepresent_snap_point( ip, x, y, &x, &y ); conversion_disp_to_im( conv, x, y, &ix, &iy ); ip->paint_last_x = ix; ip->paint_last_y = iy; imagepresent_floating_new( ip, ix, iy, 0, 0, TRUE, REGIONVIEW_LINE, REGIONVIEW_RESIZE_BOTTOMRIGHT, x, y ); handled = TRUE; /* This can take ages and, via progress, actually process a * few events. Do it at the end. */ imagemodel_refresh_nib( imagemodel ); break; case IMAGEMODEL_RECT: imagepresent_snap_point( ip, x, y, &x, &y ); conversion_disp_to_im( conv, x, y, &ix, &iy ); imagepresent_floating_new( ip, ix, iy, 0, 0, TRUE, REGIONVIEW_BOX, REGIONVIEW_RESIZE_BOTTOMRIGHT, x, y ); handled = TRUE; break; case IMAGEMODEL_TEXT: imagepresent_snap_point( ip, x, y, &x, &y ); conversion_disp_to_im( conv, x, y, &ix, &iy ); ip->paint_last_x = ix; ip->paint_last_y = iy; if( !imagemodel_refresh_text( imagemodel ) ) { iwindow_alert( GTK_WIDGET( ip ), GTK_MESSAGE_ERROR ); break; } im2 = imageinfo_get( FALSE, imagemodel->text_mask ); imagepresent_floating_new( ip, ix, iy + imagemodel->text_area.top, im2->Xsize, im2->Ysize, TRUE, REGIONVIEW_BOX, REGIONVIEW_RESIZE_EDIT, x, y ); handled = TRUE; break; default: break; } return( handled ); } static void imagepresent_paint_stop( Imagepresent *ip, int x, int y ) { Imagemodel *imagemodel = ip->imagemodel; Conversion *conv = imagemodel->conv; Imageinfo *imageinfo = conv->ii; Rect oper; int ix, iy; imagepresent_snap_point( ip, x, y, &x, &y ); conversion_disp_to_im( conv, x, y, &ix, &iy ); switch( imagemodel->state ) { case IMAGEMODEL_DROPPER: if( im_rect_includespoint( &conv->underlay, ix, iy ) ) if( !imageinfo_paint_dropper( imageinfo, imagemodel->ink, ix, iy ) ) iwindow_alert( GTK_WIDGET( ip ), GTK_MESSAGE_ERROR ); break; case IMAGEMODEL_PEN: if( !imageinfo_paint_line( imageinfo, imagemodel->ink, imagemodel->nib, ip->paint_last_x, ip->paint_last_y, ix, iy ) ) iwindow_alert( GTK_WIDGET( ip ), GTK_MESSAGE_ERROR ); break; case IMAGEMODEL_LINE: if( ip->regionview ) { DESTROY_GTK( ip->regionview ); if( !imageinfo_paint_line( imageinfo, imagemodel->ink, imagemodel->nib, ip->floating.left, ip->floating.top, IM_RECT_RIGHT( &ip->floating ), IM_RECT_BOTTOM( &ip->floating ) ) ) iwindow_alert( GTK_WIDGET( ip ), GTK_MESSAGE_ERROR ); } break; case IMAGEMODEL_RECT: if( ip->regionview ) { DESTROY_GTK( ip->regionview ); im_rect_normalise( &ip->floating ); if( !imageinfo_paint_rect( imageinfo, imagemodel->ink, &ip->floating ) ) iwindow_alert( GTK_WIDGET( ip ), GTK_MESSAGE_ERROR ); } break; case IMAGEMODEL_FLOOD: if( !imageinfo_paint_flood( imageinfo, imagemodel->ink, ix, iy, FALSE ) ) iwindow_alert( GTK_WIDGET( ip ), GTK_MESSAGE_ERROR ); break; case IMAGEMODEL_BLOB: if( !imageinfo_paint_flood( imageinfo, imagemodel->ink, ix, iy, TRUE ) ) iwindow_alert( GTK_WIDGET( ip ), GTK_MESSAGE_ERROR ); break; case IMAGEMODEL_TEXT: if( ip->regionview ) { DESTROY_GTK( ip->regionview ); if( !imageinfo_paint_mask( imageinfo, imagemodel->ink, imagemodel->text_mask, ip->floating.left, ip->floating.top ) ) iwindow_alert( GTK_WIDGET( ip ), GTK_MESSAGE_ERROR ); } break; case IMAGEMODEL_SMUDGE: /* Area to smudge in display cods. */ oper.left = -10; oper.top = -10; oper.width = 20; oper.height = 20; /* Translate to IMAGE cods. */ conversion_disp_to_im_rect( conv, &oper, &oper ); if( !imageinfo_paint_smudge( imageinfo, &oper, ip->paint_last_x, ip->paint_last_y, ix, iy ) ) iwindow_alert( GTK_WIDGET( ip ), GTK_MESSAGE_ERROR ); break; default: break; } imagemodel_paint_recalc( imagemodel ); imageinfo_undo_mark( imageinfo ); /* Ask everyone to drop cache, the image has changed. */ im_invalidate( imageinfo_get( FALSE, imageinfo ) ); } /* Left button release event. */ static void imagepresent_left_release( Imagepresent *ip, GdkEvent *ev, int x, int y ) { Imagemodel *imagemodel = ip->imagemodel; Row *row = imagemodel->iimage ? HEAPMODEL( imagemodel->iimage )->row : NULL; switch( imagemodel->state ) { case IMAGEMODEL_SELECT: if( ip->regionview && row ) { /* Make a new region. */ char txt[MAX_STRSIZE]; VipsBuf buf = VIPS_BUF_STATIC( txt ); Symbol *sym; switch( ip->regionview->type ) { case REGIONVIEW_MARK: vips_buf_appendf( &buf, "%s ", CLASS_MARK ); row_qualified_name( row, &buf ); vips_buf_appendd( &buf, ip->floating.left ); vips_buf_appendd( &buf, ip->floating.top ); break; case REGIONVIEW_REGION: vips_buf_appendf( &buf, "%s ", CLASS_REGION ); row_qualified_name( row, &buf ); vips_buf_appendd( &buf, ip->floating.left ); vips_buf_appendd( &buf, ip->floating.top ); vips_buf_appendd( &buf, ip->floating.width ); vips_buf_appendd( &buf, ip->floating.height ); break; case REGIONVIEW_ARROW: vips_buf_appendf( &buf, "%s ", CLASS_ARROW ); row_qualified_name( row, &buf ); vips_buf_appendd( &buf, ip->floating.left ); vips_buf_appendd( &buf, ip->floating.top ); vips_buf_appendd( &buf, ip->floating.width ); vips_buf_appendd( &buf, ip->floating.height ); break; case REGIONVIEW_HGUIDE: vips_buf_appendf( &buf, "%s ", CLASS_HGUIDE ); row_qualified_name( row, &buf ); vips_buf_appendd( &buf, ip->floating.top ); break; case REGIONVIEW_VGUIDE: vips_buf_appendf( &buf, "%s ", CLASS_VGUIDE ); row_qualified_name( row, &buf ); vips_buf_appendd( &buf, ip->floating.left ); break; default: g_assert( FALSE ); } DESTROY_GTK( ip->regionview ); if( !(sym = workspace_add_def_recalc( row->ws, vips_buf_all( &buf ) )) ) iwindow_alert( GTK_WIDGET( ip ), GTK_MESSAGE_ERROR ); workspace_deselect_all( row->ws ); } break; case IMAGEMODEL_DROPPER: case IMAGEMODEL_PEN: case IMAGEMODEL_LINE: case IMAGEMODEL_RECT: case IMAGEMODEL_FLOOD: case IMAGEMODEL_BLOB: case IMAGEMODEL_TEXT: case IMAGEMODEL_SMUDGE: imagepresent_paint_stop( ip, x, y ); break; default: break; } } /* Button motion event. */ static void imagepresent_button_motion( Imagepresent *ip, GdkEvent *ev ) { Imagemodel *imagemodel = ip->imagemodel; Conversion *conv = imagemodel->conv; Imageinfo *imageinfo = conv->ii; Rect oper; int x, y; int ix, iy; imagepresent_snap_point( ip, ev->motion.x, ev->motion.y, &x, &y ); conversion_disp_to_im( conv, x, y, &ix, &iy ); switch( imagemodel->state ) { case IMAGEMODEL_SELECT: break; case IMAGEMODEL_PAN: imagepresent_set_position( ip, (int) ip->dx - ev->motion.x_root, (int) ip->dy - ev->motion.y_root ); break; case IMAGEMODEL_MAGIN: break; case IMAGEMODEL_MAGOUT: break; case IMAGEMODEL_DROPPER: if( im_rect_includespoint( &conv->underlay, ix, iy ) ) if( !imageinfo_paint_dropper( imageinfo, imagemodel->ink, ix, iy ) ) iwindow_alert( GTK_WIDGET( ip ), GTK_MESSAGE_ERROR ); break; case IMAGEMODEL_PEN: if( !imageinfo_paint_line( imageinfo, imagemodel->ink, imagemodel->nib, ip->paint_last_x, ip->paint_last_y, ix, iy ) ) iwindow_alert( GTK_WIDGET( ip ), GTK_MESSAGE_ERROR ); im_invalidate( imageinfo_get( FALSE, imageinfo ) ); ip->paint_last_x = ix; ip->paint_last_y = iy; break; case IMAGEMODEL_LINE: /* rubberband */ break; case IMAGEMODEL_SMUDGE: /* Area to smudge in display cods. */ oper.left = -10; oper.top = -10; oper.width = 20; oper.height = 20; /* Translate to IMAGE cods. */ conversion_disp_to_im_rect( conv, &oper, &oper ); if( !imageinfo_paint_smudge( imageinfo, &oper, ip->paint_last_x, ip->paint_last_y, ix, iy ) ) iwindow_alert( GTK_WIDGET( ip ), GTK_MESSAGE_ERROR ); im_invalidate( imageinfo_get( FALSE, imageinfo ) ); ip->paint_last_x = ix; ip->paint_last_y = iy; break; default: break; } } /* Main event loop. */ static gboolean imagepresent_event_cb( GtkWidget *widget, GdkEvent *ev, Imagepresent *ip ) { Imagemodel *imagemodel = ip->imagemodel; gboolean handled; #ifdef EVENT printf( "imagepresent_event_cb %d\n", ev->type ); #endif /*EVENT*/ handled = FALSE; switch( ev->type ) { case GDK_BUTTON_PRESS: if( !GTK_WIDGET_HAS_FOCUS( GTK_WIDGET( ip ) ) ) gtk_widget_grab_focus( GTK_WIDGET( ip ) ); switch( ev->button.button ) { case 1: handled = imagepresent_left_press( ip, ev, ev->button.x, ev->button.y ); break; case 2: #ifdef EVENT printf( "button2 press: at %gx%g\n", ev->button.x, ev->button.y ); #endif /*EVENT*/ /* Switch to pan, for this drag. */ imagemodel->save_state = imagemodel->state; (void) imagemodel_set_state( imagemodel, IMAGEMODEL_PAN, NULL ); handled = imagepresent_left_press( ip, ev, ev->button.x, ev->button.y ); break; default: break; } break; case GDK_BUTTON_RELEASE: switch( ev->button.button ) { case 1: imagepresent_left_release( ip, ev, ev->button.x, ev->button.y ); break; case 2: #ifdef EVENT printf( "button2 release: at %gx%g\n", ev->button.x, ev->button.y ); #endif /*EVENT*/ /* Should always succeed. */ (void) imagemodel_set_state( imagemodel, imagemodel->save_state, NULL ); break; default: break; } break; case GDK_MOTION_NOTIFY: /* We're using motion hints, so we need to read the pointer to * get the next one. */ widget_update_pointer( GTK_WIDGET( ip ), ev ); ip->last_x = ev->motion.x; ip->last_y = ev->motion.y; if( ev->motion.state & GDK_BUTTON1_MASK || ev->motion.state & GDK_BUTTON2_MASK ) imagepresent_button_motion( ip, ev ); /* Update tick marks on rulers, if they're being drawn. */ if( GTK_WIDGET_VISIBLE( ip->hrule ) ) { imagepresent_hruler_rethink( ip ); imagepresent_vruler_rethink( ip ); } break; case GDK_ENTER_NOTIFY: ip->inside = TRUE; break; case GDK_LEAVE_NOTIFY: ip->inside = FALSE; break; default: break; } return( handled ); } static gboolean imagepresent_key_press_event_cb( GtkWidget *widget, GdkEventKey *event, Imagepresent *ip ) { Imagemodel *imagemodel = ip->imagemodel; Conversion *conv = imagemodel->conv; Rect *visible = &imagemodel->visible; GtkAdjustment *hadj = ip->hadj; GtkAdjustment *vadj = ip->vadj; gboolean handled; int i; #ifdef DEBUG printf( "imagepresent_key_press_event_cb\n" ); #endif /*DEBUG*/ handled = FALSE; switch( event->keyval ) { case GDK_Left: if( !(event->state & (GDK_SHIFT_MASK | GDK_CONTROL_MASK)) ) imagepresent_set_position( ip, visible->left - hadj->step_increment, visible->top ); else if( event->state & GDK_SHIFT_MASK ) imagepresent_set_position( ip, visible->left - hadj->page_increment, visible->top ); else if( event->state & GDK_CONTROL_MASK ) imagepresent_set_position( ip, 0, visible->top ); handled = TRUE; break; case GDK_Right: if( !(event->state & (GDK_SHIFT_MASK | GDK_CONTROL_MASK)) ) imagepresent_set_position( ip, visible->left + hadj->step_increment, visible->top ); else if( event->state & GDK_SHIFT_MASK ) imagepresent_set_position( ip, visible->left + hadj->page_increment, visible->top ); else if( event->state & GDK_CONTROL_MASK ) imagepresent_set_position( ip, conv->canvas.width, visible->top ); handled = TRUE; break; case GDK_Up: if( !(event->state & (GDK_SHIFT_MASK | GDK_CONTROL_MASK)) ) imagepresent_set_position( ip, visible->left, visible->top - vadj->step_increment ); else if( event->state & GDK_SHIFT_MASK ) imagepresent_set_position( ip, visible->left, visible->top - vadj->page_increment ); else if( event->state & GDK_CONTROL_MASK ) imagepresent_set_position( ip, visible->left, 0 ); handled = TRUE; break; case GDK_Down: if( !(event->state & (GDK_SHIFT_MASK | GDK_CONTROL_MASK)) ) imagepresent_set_position( ip, visible->left, visible->top + vadj->step_increment ); else if( event->state & GDK_SHIFT_MASK ) imagepresent_set_position( ip, visible->left, visible->top + vadj->page_increment ); else if( event->state & GDK_CONTROL_MASK ) imagepresent_set_position( ip, visible->left, conv->canvas.height ); handled = TRUE; break; /* FIXME + and = are not always on the same key, of course :( */ case GDK_i: case GDK_plus: case GDK_equal: if( ip->inside ) imagepresent_zoom_in( ip, ip->last_x, ip->last_y ); else imagepresent_zoom_in_centre( ip ); handled = TRUE; break; case GDK_o: case GDK_minus: imagepresent_zoom_out( ip ); handled = TRUE; break; case GDK_0: conversion_set_mag( conv, 0 ); handled = TRUE; break; default: break; } /* Check the number zoom keys too. */ if( !handled ) for( i = 0; i < IM_NUMBER( imagepresent_keymap ); i++ ) if( event->keyval == imagepresent_keymap[i].keyval ) { int mask = event->state & GDK_CONTROL_MASK; int zoom = imagepresent_keymap[i].zoom; imagepresent_zoom_to( ip, mask ? -zoom : zoom ); handled = TRUE; break; } return( handled ); } /* ... and set the work window once that's there. */ static void imagepresent_realize_id_cb( Imagedisplay *id ) { iWindow *iwnd = IWINDOW( gtk_widget_get_toplevel( GTK_WIDGET( id ) ) ); iwindow_set_work_window( iwnd, GTK_WIDGET( id )->window ); } static void imagepresent_rulers_mm_cb( GtkWidget *wid, GtkWidget *host, Imagepresent *ip ) { ip->imagemodel->rulers_mm = gtk_check_menu_item_get_active( GTK_CHECK_MENU_ITEM( wid ) ); iobject_changed( IOBJECT( ip->imagemodel ) ); } static void imagepresent_rulers_offset_cb( GtkWidget *wid, GtkWidget *host, Imagepresent *ip ) { ip->imagemodel->rulers_offset = gtk_check_menu_item_get_active( GTK_CHECK_MENU_ITEM( wid ) ); iobject_changed( IOBJECT( ip->imagemodel ) ); } static void imagepresent_ruler_hide_cb( GtkWidget *wid, GtkWidget *host, Imagepresent *ip ) { imagemodel_set_rulers( ip->imagemodel, FALSE ); } static void imagepresent_init( Imagepresent *ip ) { GtkWidget *bar; GtkWidget *table; /* Basic init. */ ip->imagemodel = NULL; ip->dx = 0; ip->dy = 0; ip->last_x = 0; ip->last_y = 0; ip->inside = FALSE; ip->scroll_tid = 0; ip->u = 0; ip->v = 0; ip->regionview = NULL; ip->paint_last_x = 0; ip->paint_last_y = 0; ip->regionviews = NULL; ip->grabbed = NULL; /* Make main imagedisplay table. */ table = GTK_WIDGET( gtk_table_new( 2, 2, FALSE ) ); gtk_container_add( GTK_CONTAINER( ip ), table ); gtk_widget_show( table ); /* Make canvas. */ ip->id = imagedisplay_new( NULL ); GTK_WIDGET_SET_FLAGS( ip, GTK_CAN_FOCUS ); gtk_signal_connect( GTK_OBJECT( ip->id ), "realize", GTK_SIGNAL_FUNC( imagepresent_realize_id_cb ), NULL ); /* Press/release/motion-notify stuff. */ gtk_widget_add_events( GTK_WIDGET( ip->id ), GDK_KEY_PRESS_MASK | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK ); gtk_signal_connect_after( GTK_OBJECT( ip->id ), "event", GTK_SIGNAL_FUNC( imagepresent_event_cb ), ip ); gtk_signal_connect( GTK_OBJECT( ip ), "key_press_event", GTK_SIGNAL_FUNC( imagepresent_key_press_event_cb ), ip ); ip->swin = GTK_SCROLLED_WINDOW( gtk_scrolled_window_new( NULL, NULL ) ); gtk_scrolled_window_add_with_viewport( ip->swin, GTK_WIDGET( ip->id ) ); gtk_scrolled_window_set_policy( ip->swin, GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC ); ip->hadj = gtk_scrolled_window_get_hadjustment( ip->swin ); ip->vadj = gtk_scrolled_window_get_vadjustment( ip->swin ); gtk_signal_connect( GTK_OBJECT( ip->swin ), "scroll_event", GTK_SIGNAL_FUNC( imagepresent_scroll_event_cb ), ip ); gtk_signal_connect( GTK_OBJECT( ip->hadj ), "changed", GTK_SIGNAL_FUNC( imagepresent_hadj_changed_cb ), ip ); gtk_signal_connect( GTK_OBJECT( ip->hadj ), "value_changed", GTK_SIGNAL_FUNC( imagepresent_hadj_changed_cb ), ip ); gtk_signal_connect( GTK_OBJECT( ip->vadj ), "changed", GTK_SIGNAL_FUNC( imagepresent_vadj_changed_cb ), ip ); gtk_signal_connect( GTK_OBJECT( ip->vadj ), "value_changed", GTK_SIGNAL_FUNC( imagepresent_vadj_changed_cb ), ip ); bar = ip->swin->hscrollbar; g_assert( GTK_IS_SCROLLBAR( bar ) ); GTK_WIDGET_UNSET_FLAGS( bar, GTK_CAN_FOCUS ); bar = ip->swin->vscrollbar; g_assert( GTK_IS_SCROLLBAR( bar ) ); GTK_WIDGET_UNSET_FLAGS( bar, GTK_CAN_FOCUS ); /* Need one menu per image window (could have a single menu for all * windows, but then we'd have to set the state of the toggle buttons * before mapping) */ ip->ruler_menu = popup_build( _( "Ruler menu" ) ); popup_add_tog( ip->ruler_menu, _( "Rulers In _mm" ), POPUP_FUNC( imagepresent_rulers_mm_cb ) ); popup_add_tog( ip->ruler_menu, _( "Show _Offset" ), POPUP_FUNC( imagepresent_rulers_offset_cb ) ); menu_add_sep( ip->ruler_menu ); popup_add_but( ip->ruler_menu, GTK_STOCK_CLOSE, POPUP_FUNC( imagepresent_ruler_hide_cb ) ); /* Make rulers. */ ip->hrule = GTK_HRULER( gtk_hruler_new() ); gtk_ruler_set_metric( GTK_RULER( ip->hrule ), GTK_PIXELS ); GTK_WIDGET_UNSET_FLAGS( GTK_WIDGET( ip->hrule ), GTK_CAN_FOCUS ); gtk_widget_show( GTK_WIDGET( ip->hrule ) ); ip->vrule = GTK_VRULER( gtk_vruler_new() ); gtk_ruler_set_metric( GTK_RULER( ip->vrule ), GTK_PIXELS ); GTK_WIDGET_UNSET_FLAGS( GTK_WIDGET( ip->vrule ), GTK_CAN_FOCUS ); gtk_widget_show( GTK_WIDGET( ip->vrule ) ); ip->heb = GTK_EVENT_BOX( gtk_event_box_new() ); gtk_container_add( GTK_CONTAINER( ip->heb ), GTK_WIDGET( ip->hrule ) ); gtk_signal_connect( GTK_OBJECT( ip->heb ), "event", GTK_SIGNAL_FUNC( imagepresent_hruler_event ), ip ); popup_attach( GTK_WIDGET( ip->heb ), ip->ruler_menu, ip ); ip->veb = GTK_EVENT_BOX( gtk_event_box_new() ); gtk_container_add( GTK_CONTAINER( ip->veb ), GTK_WIDGET( ip->vrule ) ); gtk_signal_connect( GTK_OBJECT( ip->veb ), "event", GTK_SIGNAL_FUNC( imagepresent_vruler_event ), ip ); popup_attach( GTK_WIDGET( ip->veb ), ip->ruler_menu, ip ); /* Attach all widgets to table. */ gtk_table_attach( GTK_TABLE( table ), GTK_WIDGET( ip->heb ), 1, 2, 0, 1, GTK_EXPAND | GTK_SHRINK | GTK_FILL, GTK_FILL, 2, 2 ); gtk_table_attach( GTK_TABLE( table ), GTK_WIDGET( ip->veb ), 0, 1, 1, 2, GTK_FILL, GTK_EXPAND | GTK_SHRINK | GTK_FILL, 2, 2 ); gtk_table_attach( GTK_TABLE( table ), GTK_WIDGET( ip->swin ), 1, 2, 1, 2, GTK_FILL | GTK_EXPAND | GTK_SHRINK, GTK_FILL | GTK_EXPAND | GTK_SHRINK, 2, 2 ); gtk_widget_show( GTK_WIDGET( ip->id ) ); gtk_widget_show( GTK_WIDGET( ip->swin ) ); /* Set initial ruler visibility on first refresh from imagemodel. */ } GType imagepresent_get_type( void ) { static GType type = 0; if( !type ) { static const GTypeInfo info = { sizeof( ImagepresentClass ), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) imagepresent_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof( Imagepresent ), 32, /* n_preallocs */ (GInstanceInitFunc) imagepresent_init, }; type = g_type_register_static( GTK_TYPE_BIN, "Imagepresent", &info, 0 ); } return( type ); } /* The model has changed ... update! */ static void imagepresent_imagemodel_changed_cb( Imagemodel *imagemodel, Imagepresent *ip ) { if( ip->cntxt ) iwindow_cursor_context_set_cursor( ip->cntxt, imagepresent_cursors[imagemodel->state] ); widget_visible( GTK_WIDGET( ip->heb ), imagemodel->show_rulers ); widget_visible( GTK_WIDGET( ip->veb ), imagemodel->show_rulers ); imagepresent_hruler_rethink( ip ); imagepresent_vruler_rethink( ip ); } /* The model has a new imageinfo. */ static void imagepresent_imagemodel_imageinfo_changed_cb( Imagemodel *imagemodel, Imagepresent *ip ) { /* Reset our mode. We don't want to stay painting. */ if( imagemodel_state_paint( imagemodel->state ) ) imagemodel_set_state( imagemodel, IMAGEMODEL_SELECT, NULL ); } static void imagepresent_link( Imagepresent *ip, Imagemodel *imagemodel ) { ip->imagemodel = imagemodel; g_object_ref( G_OBJECT( ip->imagemodel ) ); iobject_sink( IOBJECT( ip->imagemodel ) ); g_signal_connect( G_OBJECT( imagemodel ), "changed", G_CALLBACK( imagepresent_imagemodel_changed_cb ), ip ); g_signal_connect( G_OBJECT( imagemodel ), "imageinfo_changed", G_CALLBACK( imagepresent_imagemodel_imageinfo_changed_cb ), ip ); imagedisplay_set_conversion( ip->id, imagemodel->conv ); if( imagemodel->iimage ) imagemodel->iimage->views = g_slist_prepend( imagemodel->iimage->views, ip ); } /* Make a new Imagepresent. */ Imagepresent * imagepresent_new( Imagemodel *imagemodel ) { Imagepresent *ip = g_object_new( TYPE_IMAGEPRESENT, NULL ); imagepresent_link( ip, imagemodel ); return( ip ); } /* Background scroller. */ static gboolean imagepresent_scroll_cb( Imagepresent *ip ) { imagepresent_set_position( ip, ip->imagemodel->visible.left + ip->u, ip->imagemodel->visible.top + ip->v ); return( TRUE ); } void imagepresent_scroll_start( Imagepresent *ip, int u, int v ) { if( !ip->scroll_tid ) ip->scroll_tid = g_timeout_add( 100, (GSourceFunc) imagepresent_scroll_cb, ip ); ip->u = u; ip->v = v; } void imagepresent_scroll_stop( Imagepresent *ip ) { IM_FREEF( g_source_remove, ip->scroll_tid ); ip->u = 0; ip->v = 0; } nip2-8.7.0/src/option.h0000644000175000017500000000324513224651032011571 00000000000000/* a option in a workspace */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_OPTION (option_get_type()) #define OPTION( obj ) \ (G_TYPE_CHECK_INSTANCE_CAST( (obj), TYPE_OPTION, Option )) #define OPTION_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_CAST( (klass), TYPE_OPTION, OptionClass)) #define IS_OPTION( obj ) \ (G_TYPE_CHECK_INSTANCE_TYPE( (obj), TYPE_OPTION )) #define IS_OPTION_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_TYPE( (klass), TYPE_OPTION )) #define OPTION_GET_CLASS( obj ) \ (G_TYPE_INSTANCE_GET_CLASS( (obj), TYPE_OPTION, OptionClass )) typedef struct _Option { Classmodel parent_class; /* Base class fields. */ GSList *labels; /* [[char]] for option fields */ int value; /* Index of current option */ } Option; typedef struct _OptionClass { ClassmodelClass parent_class; /* My methods. */ } OptionClass; GType option_get_type( void ); nip2-8.7.0/src/subcolumnview.c0000644000175000017500000001412013224651032013150 00000000000000/* a subcolumnview button in a workspace */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #include "ip.h" static ViewClass *parent_class = NULL; static void * subcolumnview_destroy_sub( Rowview *rview, Subcolumnview *sview ) { DESTROY_GTK( rview ); return( NULL ); } static void subcolumnview_destroy( GtkObject *object ) { Subcolumnview *sview; #ifdef DEBUG printf( "subcolumnview_destroy\n" ); #endif /*DEBUG*/ g_return_if_fail( object != NULL ); g_return_if_fail( IS_SUBCOLUMNVIEW( object ) ); sview = SUBCOLUMNVIEW( object ); UNREF( sview->group ); /* Destroying us won't automatically destroy our rowviews, since they * are not true child-widgets. Do it by hand. */ (void) view_map( VIEW( sview ), (view_map_fn) subcolumnview_destroy_sub, sview, NULL ); DESTROY_GTK( sview->table ); GTK_OBJECT_CLASS( parent_class )->destroy( object ); } static void subcolumnview_link( View *view, Model *model, View *parent ) { Subcolumnview *sview = SUBCOLUMNVIEW( view ); Subcolumn *scol = SUBCOLUMN( model ); #ifdef DEBUG printf( "subcolumnview_link: " ); if( HEAPMODEL( scol )->row ) row_name_print( HEAPMODEL( scol )->row ); else printf( "(null)" ); printf( "\n" ); #endif /*DEBUG*/ VIEW_CLASS( parent_class )->link( view, model, parent ); /* Add to enclosing column, if there is one. Attached to enclosing row * by rowview_refresh() if we're a subcolumn. */ if( !scol->is_top ) sview->rhsview = RHSVIEW( parent ); gtk_widget_show( GTK_WIDGET( sview ) ); } static void * subcolumnview_refresh_sub( Rowview *rview, Subcolumnview *sview ) { Subcolumn *scol = SUBCOLUMN( VOBJECT( sview )->iobject ); Row *row = ROW( VOBJECT( rview )->iobject ); int i; /* Most predicates need a sym. */ if( !row->sym ) return( NULL ); for( i = 0; i <= scol->vislevel; i++ ) if( subcolumn_visibility[i].pred( row ) ) { rowview_set_visible( rview, TRUE ); sview->nvis++; break; } if( i > scol->vislevel ) rowview_set_visible( rview, FALSE ); return( NULL ); } static void subcolumnview_refresh( vObject *vobject ) { Subcolumnview *sview = SUBCOLUMNVIEW( vobject ); Subcolumn *scol = SUBCOLUMN( VOBJECT( sview )->iobject ); int model_rows = icontainer_get_n_children( ICONTAINER( scol ) ); int old_nvis = sview->nvis; gboolean editable = scol->top_col->ws->mode != WORKSPACE_MODE_NOEDIT; #ifdef DEBUG printf( "subcolumnview_refresh\n" ); #endif /*DEBUG*/ if( sview->rows != model_rows ) { sview->rows = model_rows; if( sview->rows ) gtk_table_resize( GTK_TABLE( sview->table ), sview->rows, 4 ); #ifdef DEBUG printf( "subcolumnview_refresh: resize to %d rows\n", sview->rows ); #endif /*DEBUG*/ } /* Top-level subcolumns look different in no-edit mode. */ if( scol->is_top && editable ) { gtk_alignment_set_padding( GTK_ALIGNMENT( sview->align ), 0, 0, 0, 0 ); gtk_table_set_row_spacings( GTK_TABLE( sview->table ), 0 ); gtk_table_set_col_spacings( GTK_TABLE( sview->table ), 0 ); } else if( scol->is_top && !editable ) { gtk_alignment_set_padding( GTK_ALIGNMENT( sview->align ), 5, 5, 5, 5 ); gtk_table_set_row_spacings( GTK_TABLE( sview->table ), 5 ); gtk_table_set_col_spacings( GTK_TABLE( sview->table ), 5 ); } /* Nested subcols: we just change the left indent. */ if( !scol->is_top && editable ) { gtk_alignment_set_padding( GTK_ALIGNMENT( sview->align ), 0, 0, 0, 0 ); } else if( !scol->is_top && !editable ) { gtk_alignment_set_padding( GTK_ALIGNMENT( sview->align ), 0, 0, 15, 0 ); } sview->nvis = 0; (void) view_map( VIEW( sview ), (view_map_fn) subcolumnview_refresh_sub, sview, NULL ); if( sview->nvis != old_nvis ) { view_resize( VIEW( sview ) ); iobject_changed( IOBJECT( scol->top_col ) ); } VOBJECT_CLASS( parent_class )->refresh( vobject ); } static void subcolumnview_class_init( SubcolumnviewClass *class ) { GtkObjectClass *object_class = (GtkObjectClass*) class; vObjectClass *vobject_class = (vObjectClass*) class; ViewClass *view_class = (ViewClass*) class; parent_class = g_type_class_peek_parent( class ); object_class->destroy = subcolumnview_destroy; /* Create signals. */ /* Init methods. */ vobject_class->refresh = subcolumnview_refresh; view_class->link = subcolumnview_link; } static void subcolumnview_init( Subcolumnview *sview ) { sview->rhsview = NULL; sview->rows = 0; sview->nvis = 0; sview->align = gtk_alignment_new( 0, 0, 1, 1 ); gtk_box_pack_start( GTK_BOX( sview ), sview->align, FALSE, FALSE, 0 ); sview->table = gtk_table_new( sview->rows, 4, FALSE ); gtk_container_add( GTK_CONTAINER( sview->align ), sview->table ); gtk_widget_show_all( sview->align ); sview->group = gtk_size_group_new( GTK_SIZE_GROUP_HORIZONTAL ); } GtkType subcolumnview_get_type( void ) { static GtkType type = 0; if( !type ) { static const GtkTypeInfo info = { "Subcolumnview", sizeof( Subcolumnview ), sizeof( SubcolumnviewClass ), (GtkClassInitFunc) subcolumnview_class_init, (GtkObjectInitFunc) subcolumnview_init, /* reserved_1 */ NULL, /* reserved_2 */ NULL, (GtkClassInitFunc) NULL, }; type = gtk_type_unique( TYPE_VIEW, &info ); } return( type ); } View * subcolumnview_new( void ) { Subcolumnview *sview = gtk_type_new( TYPE_SUBCOLUMNVIEW ); return( VIEW( sview ) ); } nip2-8.7.0/src/editview.h0000644000175000017500000000331313224651032012075 00000000000000/* abstract base class for text editable view widgets */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_EDITVIEW (editview_get_type()) #define EDITVIEW( obj ) (GTK_CHECK_CAST( (obj), TYPE_EDITVIEW, Editview )) #define EDITVIEW_CLASS( klass ) \ (GTK_CHECK_CLASS_CAST( (klass), TYPE_EDITVIEW, EditviewClass )) #define IS_EDITVIEW( obj ) (GTK_CHECK_TYPE( (obj), TYPE_EDITVIEW )) #define IS_EDITVIEW_CLASS( klass ) \ (GTK_CHECK_CLASS_TYPE( (klass), TYPE_EDITVIEW )) typedef struct _Editview { Graphicview parent_object; /* Widgets. */ GtkWidget *label; /* Display caption here */ GtkWidget *text; /* Edit value here */ } Editview; typedef struct _EditviewClass { GraphicviewClass parent_class; /* My methods. */ } EditviewClass; GtkType editview_get_type( void ); void editview_set_entry( Editview *editview, const char *fmt, ... ) __attribute__((format(printf, 2, 3))); nip2-8.7.0/src/popupbutton.c0000644000175000017500000001125513224651032012653 00000000000000/* a button that displays a popup menu * * quick hack from totem-plugin-viewer.c */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #include "ip.h" static GtkToggleButtonClass *popupbutton_parent_class = NULL; static void popupbutton_class_init( PopupbuttonClass *class ) { popupbutton_parent_class = g_type_class_peek_parent( class ); } static void popupbutton_init( Popupbutton *popupbutton ) { popupbutton->menu = NULL; } GType popupbutton_get_type( void ) { static GType type = 0; if( !type ) { static const GTypeInfo info = { sizeof( PopupbuttonClass ), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) popupbutton_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof( Popupbutton ), 32, /* n_preallocs */ (GInstanceInitFunc) popupbutton_init, }; type = g_type_register_static( GTK_TYPE_TOGGLE_BUTTON, "Popupbutton", &info, 0 ); } return( type ); } static void popupbutton_position_func( GtkMenu *menu, gint *x, gint *y, gboolean *push_in, GtkWidget *button ) { GtkRequisition menu_req; GtkTextDirection direction; GtkAllocation allocation; gtk_widget_size_request( GTK_WIDGET( menu ), &menu_req ); direction = gtk_widget_get_direction( button ); gdk_window_get_origin( gtk_widget_get_window( button ), x, y ); gtk_widget_get_allocation( button, &allocation ); *x += allocation.x; *y += allocation.y; if( direction == GTK_TEXT_DIR_LTR ) *x += VIPS_MAX( allocation.width - menu_req.width, 0 ); else if( menu_req.width > allocation.width ) *x -= menu_req.width - allocation.width; *y += allocation.height; *push_in = FALSE; } static void popupbutton_over_arrow( Popupbutton *popupbutton, GdkEventButton *event ) { GtkWidget *menu = popupbutton->menu; gtk_menu_popup( GTK_MENU( menu ), NULL, NULL, (GtkMenuPositionFunc) popupbutton_position_func, popupbutton, event ? event->button : 0, event ? event->time : gtk_get_current_event_time() ); } static void popupbutton_toggled_cb( Popupbutton *popupbutton ) { GtkWidget *menu = popupbutton->menu; if( gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON( popupbutton ) ) && !gtk_widget_get_visible( menu ) ) { /* We get here only when the menu is activated by a key * press, so that we can select the first menu item. */ popupbutton_over_arrow( popupbutton, NULL ); gtk_menu_shell_select_first( GTK_MENU_SHELL( menu ), FALSE ); } } static gboolean popupbutton_button_press_event_cb( Popupbutton *popupbutton, GdkEventButton *event ) { if( event->button == 1 ) { GtkWidget *menu = popupbutton->menu; if( !gtk_widget_get_visible( menu ) ) { popupbutton_over_arrow( popupbutton, event ); gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( popupbutton ), TRUE ); } else { gtk_menu_popdown( GTK_MENU( menu ) ); gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( popupbutton ), FALSE ); } return TRUE; } return FALSE; } Popupbutton * popupbutton_new( void ) { Popupbutton *popupbutton; GtkWidget *image; popupbutton = g_object_new( TYPE_POPUPBUTTON, NULL ); image = gtk_image_new_from_stock( GTK_STOCK_EXECUTE, GTK_ICON_SIZE_MENU ); gtk_container_add( GTK_CONTAINER( popupbutton ), image ); gtk_widget_show( image ); g_signal_connect( popupbutton, "toggled", G_CALLBACK( popupbutton_toggled_cb ), NULL ); g_signal_connect( popupbutton, "button-press-event", G_CALLBACK( popupbutton_button_press_event_cb ), NULL ); return( popupbutton ); } static void popupbutton_menu_unmap_cb( GtkWidget *menu, Popupbutton *popupbutton ) { gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( popupbutton ), FALSE ); } void popupbutton_set_menu( Popupbutton *popupbutton, GtkWidget *menu ) { g_assert( !popupbutton->menu ); popupbutton->menu = menu; g_signal_connect( menu, "unmap", G_CALLBACK( popupbutton_menu_unmap_cb ), popupbutton ); } nip2-8.7.0/src/prefs.h0000644000175000017500000000333413224651032011377 00000000000000/* Declarations for the preferences dialog. */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_PREFS (prefs_get_type()) #define PREFS( obj ) (GTK_CHECK_CAST( (obj), TYPE_PREFS, Prefs )) #define PREFS_CLASS( klass ) \ (GTK_CHECK_CLASS_CAST( (klass), TYPE_PREFS, PrefsClass )) #define IS_PREFS( obj ) (GTK_CHECK_TYPE( (obj), TYPE_PREFS )) #define IS_PREFS_CLASS( klass ) \ (GTK_CHECK_CLASS_TYPE( (klass), TYPE_PREFS )) typedef struct _Prefs { iDialog parent_object; /* Workspace we display. */ Workspace *ws; guint destroy_sid; Prefworkspaceview *pwview; /* (optionally) filter prefs with this. */ char *caption_filter; } Prefs; typedef struct _PrefsClass { iWindowClass parent_class; /* My methods. */ } PrefsClass; GType prefs_get_type( void ); Prefs *prefs_new( const char *caption_filter ); gboolean prefs_set( const char *name, const char *fmt, ... ) __attribute__((format(printf, 2, 3))); nip2-8.7.0/src/defbrowser.c0000644000175000017500000002022013224651032012406 00000000000000/* Defbrowser dialog. */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #include "ip.h" static ViewClass *parent_class = NULL; /* Our columns. */ enum { NAME_COLUMN, /* Kit or tool name */ TOOLTIP_COLUMN, TOOL_POINTER_COLUMN, /* Pointer to tool */ KIT_POINTER_COLUMN, /* Pointer to kit (if no tool) */ N_COLUMNS }; static void defbrowser_destroy( GtkObject *object ) { Defbrowser *defbrowser = DEFBROWSER( object ); UNREF( defbrowser->store ); GTK_OBJECT_CLASS( parent_class )->destroy( object ); } static void defbrowser_rebuild_item3( Defbrowser *defbrowser, const char *name, const char *tip, Tool *tool, Toolkit *kit ) { GtkTreeIter iter; gtk_list_store_append( defbrowser->store, &iter ); gtk_list_store_set( defbrowser->store, &iter, NAME_COLUMN, name, TOOLTIP_COLUMN, tip, TOOL_POINTER_COLUMN, tool, KIT_POINTER_COLUMN, kit, -1 ); } static void * defbrowser_rebuild_item2( Tool *tool, Defbrowser *defbrowser ) { if( tool->toolitem && tool->toolitem->tooltip ) defbrowser_rebuild_item3( defbrowser, IOBJECT( tool )->name, tool->toolitem->tooltip, tool, tool->kit ); else defbrowser_rebuild_item3( defbrowser, IOBJECT( tool )->name, tool->help, tool, tool->kit ); return( NULL ); } static void * defbrowser_rebuild_item( Toolkit *kit, Defbrowser *defbrowser ) { toolkit_map( kit, (tool_map_fn) defbrowser_rebuild_item2, defbrowser, NULL ); return( NULL ); } static void defbrowser_refresh( vObject *vobject ) { Defbrowser *defbrowser = DEFBROWSER( vobject ); #ifdef DEBUG printf( "defbrowser_refresh:\n" ); #endif /*DEBUG*/ gtk_list_store_clear( defbrowser->store ); toolkitgroup_map( defbrowser->program->kitg, (toolkit_map_fn) defbrowser_rebuild_item, defbrowser, NULL ); VOBJECT_CLASS( parent_class )->refresh( vobject ); } static void defbrowser_class_init( DefbrowserClass *class ) { GtkObjectClass *object_class = (GtkObjectClass *) class; vObjectClass *vobject_class = (vObjectClass *) class; parent_class = g_type_class_peek_parent( class ); object_class->destroy = defbrowser_destroy; vobject_class->refresh = defbrowser_refresh; } static void defbrowser_entry_changed_cb( GtkEditable *editable, Defbrowser *defbrowser ) { gtk_tree_model_filter_refilter( GTK_TREE_MODEL_FILTER( defbrowser->filter ) ); } static gboolean defbrowser_rebuild_test( Tool *tool, const char *text ) { if( tool->toolitem && tool->toolitem->tooltip ) { if( my_strcasestr( tool->toolitem->tooltip, text ) ) return( TRUE ); } if( my_strcasestr( IOBJECT( tool )->name, text ) ) return( TRUE ); return( FALSE ); } static gboolean defbrowser_visible_func( GtkTreeModel *model, GtkTreeIter *iter, gpointer data ) { Defbrowser *defbrowser = DEFBROWSER( data ); const char *text = gtk_entry_get_text( GTK_ENTRY( defbrowser->entry ) ); Tool *tool; gtk_tree_model_get( model, iter, TOOL_POINTER_COLUMN, &tool, -1 ); if( !tool ) return( FALSE ); return( defbrowser_rebuild_test( tool, text ) ); } static Tool * defbrowser_get_selected( Defbrowser *defbrowser ) { GtkTreeSelection *selection = gtk_tree_view_get_selection( GTK_TREE_VIEW( defbrowser->tree ) ); GtkTreeIter iter; GtkTreeModel *model; Tool *tool; if( gtk_tree_selection_get_selected( selection, &model, &iter ) ) { gtk_tree_model_get( model, &iter, TOOL_POINTER_COLUMN, &tool, -1 ); return( tool ); } return( NULL ); } static gboolean defbrowser_activate_selected( Defbrowser *defbrowser ) { Tool *tool; if( (tool = defbrowser_get_selected( defbrowser )) ) if( !program_select( defbrowser->program, MODEL( tool ) ) ) return( FALSE ); return( TRUE ); } static void defbrowser_selection_changed_cb( GtkTreeSelection *select, Defbrowser *defbrowser ) { if( !defbrowser_activate_selected( defbrowser ) ) iwindow_alert( GTK_WIDGET( defbrowser ), GTK_MESSAGE_ERROR ); } static void defbrowser_init( Defbrowser *defbrowser ) { GtkCellRenderer *renderer; GtkTreeViewColumn *column; GtkWidget *label; GtkWidget *swin; GtkTreeSelection *select; defbrowser->top = gtk_hbox_new( FALSE, 12 ); defbrowser->entry = gtk_entry_new(); gtk_signal_connect( GTK_OBJECT( defbrowser->entry ), "changed", GTK_SIGNAL_FUNC( defbrowser_entry_changed_cb ), defbrowser ); gtk_box_pack_end( GTK_BOX( defbrowser->top ), defbrowser->entry, FALSE, FALSE, 2 ); label = gtk_image_new_from_stock( GTK_STOCK_FIND, GTK_ICON_SIZE_MENU ); gtk_box_pack_end( GTK_BOX( defbrowser->top ), label, FALSE, FALSE, 0 ); gtk_box_pack_start( GTK_BOX( defbrowser ), defbrowser->top, FALSE, FALSE, 2 ); gtk_widget_show_all( defbrowser->top ); defbrowser->store = gtk_list_store_new( N_COLUMNS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_POINTER, G_TYPE_POINTER ); defbrowser->filter = gtk_tree_model_filter_new( GTK_TREE_MODEL( defbrowser->store ), NULL ); gtk_tree_model_filter_set_visible_func( GTK_TREE_MODEL_FILTER( defbrowser->filter ), defbrowser_visible_func, defbrowser, NULL ); defbrowser->tree = gtk_tree_view_new_with_model( GTK_TREE_MODEL( defbrowser->filter ) ); gtk_tree_view_set_rules_hint( GTK_TREE_VIEW( defbrowser->tree ), TRUE ); gtk_tree_view_set_headers_visible( GTK_TREE_VIEW( defbrowser->tree ), FALSE ); renderer = gtk_cell_renderer_text_new(); column = gtk_tree_view_column_new_with_attributes( _( "Name" ), renderer, "text", NAME_COLUMN, NULL ); gtk_tree_view_append_column( GTK_TREE_VIEW( defbrowser->tree ), column ); renderer = gtk_cell_renderer_text_new(); column = gtk_tree_view_column_new_with_attributes( _( "Tooltip" ), renderer, "text", TOOLTIP_COLUMN, NULL ); gtk_tree_view_append_column( GTK_TREE_VIEW( defbrowser->tree ), column ); select = gtk_tree_view_get_selection( GTK_TREE_VIEW( defbrowser->tree ) ); gtk_tree_selection_set_mode( select, GTK_SELECTION_SINGLE ); g_signal_connect( G_OBJECT( select ), "changed", G_CALLBACK( defbrowser_selection_changed_cb ), defbrowser ); swin = gtk_scrolled_window_new( NULL, NULL ); gtk_scrolled_window_set_policy( GTK_SCROLLED_WINDOW( swin ), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC ); gtk_container_add( GTK_CONTAINER( swin ), defbrowser->tree ); gtk_box_pack_start( GTK_BOX( defbrowser ), swin, TRUE, TRUE, 2 ); gtk_widget_show_all( swin ); } GtkType defbrowser_get_type( void ) { static GtkType type = 0; if( !type ) { static const GtkTypeInfo info = { "Defbrowser", sizeof( Defbrowser ), sizeof( DefbrowserClass ), (GtkClassInitFunc) defbrowser_class_init, (GtkObjectInitFunc) defbrowser_init, /* reserved_1 */ NULL, /* reserved_2 */ NULL, (GtkClassInitFunc) NULL, }; type = gtk_type_unique( TYPE_VOBJECT, &info ); } return( type ); } void defbrowser_set_program( Defbrowser *defbrowser, Program *program ) { g_assert( !defbrowser->program ); #ifdef DEBUG printf( "defbrowser_set_program:\n" ); #endif /*DEBUG*/ defbrowser->program = program; } Defbrowser * defbrowser_new( void ) { Defbrowser *defbrowser = gtk_type_new( TYPE_DEFBROWSER ); return( defbrowser ); } /* Find the 'natural' width of the browser. */ int defbrowser_get_width( Defbrowser *defbrowser ) { if( defbrowser->top ) return( defbrowser->top->requisition.width ); else return( 200 ); } /* Set the filter string. */ void defbrowser_set_filter( Defbrowser *defbrowser, const char *filter ) { gtk_entry_set_text( GTK_ENTRY( defbrowser->entry ), filter ); } nip2-8.7.0/src/watch.h0000644000175000017500000003327313224651032011373 00000000000000/* Watch stuff in the prefs workspace. */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your watch) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* Group watches with this. */ #define TYPE_WATCHGROUP (watchgroup_get_type()) #define WATCHGROUP( obj ) \ (G_TYPE_CHECK_INSTANCE_CAST( (obj), TYPE_WATCHGROUP, Watchgroup )) #define WATCHGROUP_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_CAST( (klass), TYPE_WATCHGROUP, WatchgroupClass)) #define IS_WATCHGROUP( obj ) \ (G_TYPE_CHECK_INSTANCE_TYPE( (obj), TYPE_WATCHGROUP )) #define IS_WATCHGROUP_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_TYPE( (klass), TYPE_WATCHGROUP )) #define WATCHGROUP_GET_CLASS( obj ) \ (G_TYPE_INSTANCE_GET_CLASS( (obj), TYPE_WATCHGROUP, WatchgroupClass )) typedef struct _Watchgroup { iContainer parent_object; /* Workspaces we work within. Assume we are destroyed before this. */ Workspaceroot *workspaceroot; /* Name of workspace our watchers check for their syms. */ const char *name; /* Autosave timeout ... save our workspace automatically when this * ticks away. */ guint auto_save_timeout; } Watchgroup; typedef struct _WatchgroupClass { iContainerClass parent_class; /* One of the watches in this group has changed. * People interested in several watches can connect to * this, rather than having to try listening for many "changed" signals * on the watches. */ void (*watch_changed)( Watchgroup *, Watch * ); } WatchgroupClass; GType watchgroup_get_type( void ); Watchgroup *watchgroup_new( Workspaceroot *workspaceroot, const char *name ); void watchgroup_flush( Watchgroup *watchgroup ); /* Abstract base class for something that watches a row. */ #define TYPE_WATCH (watch_get_type()) #define WATCH( obj ) \ (G_TYPE_CHECK_INSTANCE_CAST( (obj), TYPE_WATCH, Watch )) #define WATCH_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_CAST( (klass), TYPE_WATCH, WatchClass)) #define IS_WATCH( obj ) \ (G_TYPE_CHECK_INSTANCE_TYPE( (obj), TYPE_WATCH )) #define IS_WATCH_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_TYPE( (klass), TYPE_WATCH )) #define WATCH_GET_CLASS( obj ) \ (G_TYPE_INSTANCE_GET_CLASS( (obj), TYPE_WATCH, WatchClass )) typedef void (*WatchCallbackFn)( void * ); struct _Watch { iContainer parent_class; Row *row; /* Row we watch */ gboolean ok; /* Value read OK on last change */ guint destroy_sid; /* Listen for events */ guint changed_sid; }; typedef struct _WatchClass { iContainerClass parent_class; /* Update value from row. */ gboolean (*update)( Watch * ); /* Get a pointer to value. */ void *(*get_value)( Watch * ); } WatchClass; Watch *watch_find( Watchgroup *watchgroup, const char *name ); GtkType watch_get_type( void ); void watch_relink_all( void ); void watch_vset( Watch *watch, const char *fmt, va_list args ); void watch_set( Watch *watch, const char *fmt, ... ) __attribute__((format(printf, 2, 3))); /* A watch that watches something with an int value. */ typedef struct _WatchInt WatchInt; #define TYPE_WATCH_INT (watch_int_get_type()) #define WATCH_INT( obj ) \ (G_TYPE_CHECK_INSTANCE_CAST( (obj), TYPE_WATCH_INT, WatchInt )) #define WATCH_INT_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_CAST( (klass), TYPE_WATCH_INT, WatchIntClass)) #define IS_WATCH_INT( obj ) \ (G_TYPE_CHECK_INSTANCE_TYPE( (obj), TYPE_WATCH_INT )) #define IS_WATCH_INT_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_TYPE( (klass), TYPE_WATCH_INT )) #define WATCH_INT_GET_CLASS( obj ) \ (G_TYPE_INSTANCE_GET_CLASS( (obj), TYPE_WATCH_INT, WatchIntClass )) struct _WatchInt { Watch parent_class; int value; }; typedef struct _WatchIntClass { WatchClass parent_class; } WatchIntClass; GtkType watch_int_get_type( void ); int watch_int_get( Watchgroup *, const char *name, int fallback ); /* A watch that watches something with a double value. */ typedef struct _WatchDouble WatchDouble; #define TYPE_WATCH_DOUBLE (watch_double_get_type()) #define WATCH_DOUBLE( obj ) \ (G_TYPE_CHECK_INSTANCE_CAST( (obj), TYPE_WATCH_DOUBLE, WatchDouble )) #define WATCH_DOUBLE_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_CAST( (klass), TYPE_WATCH_DOUBLE, WatchDoubleClass)) #define IS_WATCH_DOUBLE( obj ) \ (G_TYPE_CHECK_INSTANCE_TYPE( (obj), TYPE_WATCH_DOUBLE )) #define IS_WATCH_DOUBLE_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_TYPE( (klass), TYPE_WATCH_DOUBLE )) #define WATCH_DOUBLE_GET_CLASS( obj ) \ (G_TYPE_INSTANCE_GET_CLASS( (obj), TYPE_WATCH_DOUBLE, \ WatchDoubleClass )) struct _WatchDouble { Watch parent_class; double value; }; typedef struct _WatchDoubleClass { WatchClass parent_class; } WatchDoubleClass; GtkType watch_double_get_type( void ); double watch_double_get( Watchgroup *, const char *name, double fallback ); /* A watch that watches a path. */ typedef struct _WatchPath WatchPath; #define TYPE_WATCH_PATH (watch_path_get_type()) #define WATCH_PATH( obj ) \ (G_TYPE_CHECK_INSTANCE_CAST( (obj), TYPE_WATCH_PATH, WatchPath )) #define WATCH_PATH_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_CAST( (klass), TYPE_WATCH_PATH, WatchPathClass)) #define IS_WATCH_PATH( obj ) \ (G_TYPE_CHECK_INSTANCE_TYPE( (obj), TYPE_WATCH_PATH )) #define IS_WATCH_PATH_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_TYPE( (klass), TYPE_WATCH_PATH )) #define WATCH_PATH_GET_CLASS( obj ) \ (G_TYPE_INSTANCE_GET_CLASS( (obj), TYPE_WATCH_PATH, WatchPathClass )) struct _WatchPath { Watch parent_class; GSList *value; }; typedef struct _WatchPathClass { WatchClass parent_class; } WatchPathClass; GtkType watch_path_get_type( void ); GSList *watch_path_get( Watchgroup *, const char *name, GSList *fallback ); typedef struct _WatchBool WatchBool; #define TYPE_WATCH_BOOL (watch_bool_get_type()) #define WATCH_BOOL( obj ) \ (G_TYPE_CHECK_INSTANCE_CAST( (obj), TYPE_WATCH_BOOL, WatchBool )) #define WATCH_BOOL_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_CAST( (klass), TYPE_WATCH_BOOL, WatchBoolClass)) #define IS_WATCH_BOOL( obj ) \ (G_TYPE_CHECK_INSTANCE_TYPE( (obj), TYPE_WATCH_BOOL )) #define IS_WATCH_BOOL_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_TYPE( (klass), TYPE_WATCH_BOOL )) #define WATCH_BOOL_GET_CLASS( obj ) \ (G_TYPE_INSTANCE_GET_CLASS( (obj), TYPE_WATCH_BOOL, WatchBoolClass )) struct _WatchBool { Watch parent_class; gboolean value; }; typedef struct _WatchBoolClass { WatchClass parent_class; } WatchBoolClass; GtkType watch_bool_get_type( void ); gboolean watch_bool_get( Watchgroup *, const char *name, gboolean fallback ); typedef struct _WatchString WatchString; #define TYPE_WATCH_STRING (watch_string_get_type()) #define WATCH_STRING( obj ) \ (G_TYPE_CHECK_INSTANCE_CAST( (obj), TYPE_WATCH_STRING, WatchString )) #define WATCH_STRING_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_CAST( (klass), TYPE_WATCH_STRING, WatchStringClass)) #define IS_WATCH_STRING( obj ) \ (G_TYPE_CHECK_INSTANCE_TYPE( (obj), TYPE_WATCH_STRING )) #define IS_WATCH_STRING_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_TYPE( (klass), TYPE_WATCH_STRING )) #define WATCH_STRING_GET_CLASS( obj ) \ (G_TYPE_INSTANCE_GET_CLASS( (obj), TYPE_WATCH_STRING, \ WatchStringClass )) struct _WatchString { Watch parent_class; char *value; }; typedef struct _WatchStringClass { WatchClass parent_class; } WatchStringClass; GtkType watch_string_get_type( void ); const char *watch_string_get( Watchgroup *, const char *name, const char *fallback ); /* Prefs we follow from C. */ /* Default show states. */ #define DISPLAY_RULERS \ (watch_bool_get( main_watchgroup, "DISPLAY_RULERS", FALSE )) #define DISPLAY_STATUS \ (watch_bool_get( main_watchgroup, "DISPLAY_STATUS", FALSE )) #define DISPLAY_CONVERSION \ (watch_bool_get( main_watchgroup, "DISPLAY_CONVERSION", FALSE )) /* Display a crosshair on image windows ... turn-off-able, since some desktop * themes have almost invisible crosshairs. */ #define DISPLAY_CROSSHAIR \ (watch_bool_get( main_watchgroup, "DISPLAY_CROSSHAIR", TRUE )) /* Update children during paint. */ #define PAINTBOX_RECOMP \ (watch_bool_get( main_watchgroup, "PAINTBOX_RECOMP", TRUE )) /* Help browser. */ #define BOX_BROWSER (watch_string_get( main_watchgroup, "BROWSER", "mozilla" )) #define BOX_BROWSER_REMOTE (watch_string_get( main_watchgroup, \ "BROWSER_REMOTE", "-remote 'openURL(%s)'" )) /* Thumbnail size. */ #define DISPLAY_THUMBNAIL \ (watch_int_get( main_watchgroup, "DISPLAY_THUMBNAIL", 64 )) /* High-quality thumbnails. */ #define DISPLAY_THUMBNAIL_HQ \ (watch_bool_get( main_watchgroup, "DISPLAY_THUMBNAIL_HQ", FALSE )) /* File stuff. */ #define PIN_FILESEL \ (watch_bool_get( main_watchgroup, "CALC_PIN_FILESEL", FALSE )) #define IP_JPEG_Q \ (watch_int_get( main_watchgroup, "JPEG_Q", 75 )) #define IP_JPEG_ICC_PROFILE \ (watch_int_get( main_watchgroup, "JPEG_ICC_PROFILE", 0 )) #define IP_JPEG_ICC_PROFILE_FILE \ (watch_string_get( main_watchgroup, "JPEG_ICC_PROFILE_FILE", \ "$VIPSHOME/share/nip2/data/sRGB.icm" )) #define IP_PPM_MODE \ (watch_int_get( main_watchgroup, "PPM_MODE", 0 )) #define IP_CSV_SEPARATOR \ (watch_string_get( main_watchgroup, "CSV_SEPARATOR", "\t" )) #define IP_PNG_COMPRESSION \ (watch_int_get( main_watchgroup, "PNG_COMPRESSION", 6 )) #define IP_PNG_INTERLACE \ (watch_int_get( main_watchgroup, "PNG_INTERLACE", 0 )) #define IP_TIFF_COMPRESSION \ (watch_int_get( main_watchgroup, "TIFF_COMPRESSION", 0 )) #define IP_TIFF_JPEG_Q \ (watch_int_get( main_watchgroup, "TIFF_JPEG_Q", 75 )) #define IP_TIFF_LAYOUT \ (watch_int_get( main_watchgroup, "TIFF_LAYOUT", 0 )) #define IP_TIFF_TILE_WIDTH \ (watch_int_get( main_watchgroup, "TIFF_TILE_WIDTH", 128 )) #define IP_TIFF_TILE_HEIGHT \ (watch_int_get( main_watchgroup, "TIFF_TILE_HEIGHT", 128 )) #define IP_TIFF_MULTI_RES \ (watch_int_get( main_watchgroup, "TIFF_MULTI_RES", 0 )) #define IP_TIFF_FORMAT \ (watch_int_get( main_watchgroup, "TIFF_FORMAT", 0 )) #define IP_TIFF_PREDICTOR \ (watch_int_get( main_watchgroup, "TIFF_PREDICTOR", 0 )) #define IP_TIFF_BIGTIFF \ (watch_bool_get( main_watchgroup, "TIFF_BIGTIFF", FALSE )) /* Autoreload. */ #define CALC_RELOAD (watch_bool_get( main_watchgroup, "CALC_RELOAD", FALSE )) /* Max chars we print. */ #define LINELENGTH \ IM_CLIP( 10, \ watch_int_get( main_watchgroup, "CALC_LINELENGTH", 80 ), \ MAX_LINELENGTH ) /* CPUs we work over. */ #define VIPS_CPUS \ (watch_int_get( main_watchgroup, "VIPS_CPUS", 1 )) /* Bar prefs. */ #define MAINW_TOOLBAR \ (watch_bool_get( main_watchgroup, "MAINW_TOOLBAR", TRUE )) #define MAINW_TOOLBAR_STYLE \ (watch_int_get( main_watchgroup, "MAINW_TOOLBAR_STYLE", 0 )) #define MAINW_STATUSBAR \ (watch_bool_get( main_watchgroup, "MAINW_STATUSBAR", TRUE )) #define WORKSPACE_LPANE_OPEN \ (watch_bool_get( main_watchgroup, "WORKSPACE_LPANE_OPEN", FALSE )) #define WORKSPACE_LPANE_POSITION \ (watch_int_get( main_watchgroup, "WORKSPACE_LPANE_POSITION", 200 )) #define WORKSPACE_RPANE_OPEN \ (watch_bool_get( main_watchgroup, "WORKSPACE_RPANE_OPEN", FALSE )) #define WORKSPACE_RPANE_POSITION \ (watch_int_get( main_watchgroup, "WORKSPACE_RPANE_POSITION", 400 )) /* Heap size. Big enough to always load prefs, small enough that it doesn't * trash the computer. */ #define MAX_HEAPSIZE \ IM_CLIP( 100000, \ watch_int_get( main_watchgroup, "CALC_MAX_HEAP", 200000 ), \ 10000000 ) /* Region dragging. */ #ifdef NO_UPDATE #define CALC_RECOMP_REGION \ (watch_bool_get( main_watchgroup, "CALC_RECOMP_REGION", FALSE )) #else #define CALC_RECOMP_REGION \ (watch_bool_get( main_watchgroup, "CALC_RECOMP_REGION", TRUE )) #endif /* Slider dragging. */ #define CALC_RECOMP_SLIDER \ (watch_bool_get( main_watchgroup, "CALC_RECOMP_SLIDER", FALSE )) /* Popup new objects. */ #define POPUP_NEW_ROWS \ (watch_bool_get( main_watchgroup, "POPUP_NEW_ROWS", FALSE )) /* Draw LEDs rather than recolouring tally buttons. */ #define CALC_DISPLAY_LED \ (watch_bool_get( main_watchgroup, "CALC_DISPLAY_LED", FALSE )) /* Number of vips calls to memoise. */ #define CALL_HISTORY_MAX \ (watch_int_get( main_watchgroup, "VIPS_HISTORY_MAX", 200 )) /* Auto save wses. */ #define AUTO_WS_SAVE \ (watch_bool_get( main_watchgroup, "CALC_AUTO_WS_SAVE", TRUE )) /* Image window geometry. */ #define IMAGE_WINDOW_WIDTH \ (watch_int_get( main_watchgroup, "IMAGE_WINDOW_WIDTH", 600 )) #define IMAGE_WINDOW_HEIGHT \ (watch_int_get( main_watchgroup, "IMAGE_WINDOW_HEIGHT", 650 )) /* Default font. */ #define PAINTBOX_FONT \ (watch_string_get( main_watchgroup, "PAINTBOX_FONT", "Sans 12" )) /* Max undo steps ... -1 == unlimited. */ #define PAINTBOX_MAX_UNDO \ (watch_int_get( main_watchgroup, "PAINTBOX_MAX_UNDO", -1 )) /* Default image file type. */ #define IMAGE_FILE_TYPE \ (watch_int_get( main_watchgroup, "IMAGE_FILE_TYPE", 0 )) /* Prefs we watch. */ #define PATH_SEARCH (watch_path_get( main_watchgroup, "CALC_PATH_SEARCH", \ path_search_default )) #define PATH_START (watch_path_get( main_watchgroup, "CALC_PATH_START", \ path_start_default )) #define PATH_TMP (watch_string_get( main_watchgroup, "CALC_PATH_TMP", \ path_tmp_default )) /* How we print stuff. */ #define TRACE_FUNCTIONS \ (watch_bool_get( main_watchgroup, "CALC_TRACE_FUNCTIONS", FALSE )) #define PRINT_CARTESIAN \ (watch_bool_get( main_watchgroup, "CALC_PRINT_CARTIESIAN", FALSE )) /* Program window. */ #define PROGRAM_PANE_POSITION \ (watch_double_get( main_watchgroup, "PROGRAM_PANE_POSITION", 200 )) nip2-8.7.0/src/workspaceview.h0000644000175000017500000000577413224651032013163 00000000000000/* a view of a workspace */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_WORKSPACEVIEW (workspaceview_get_type()) #define WORKSPACEVIEW( obj ) \ (GTK_CHECK_CAST( (obj), TYPE_WORKSPACEVIEW, Workspaceview )) #define WORKSPACEVIEW_CLASS( klass ) \ (GTK_CHECK_CLASS_CAST( (klass), \ TYPE_WORKSPACEVIEW, WorkspaceviewClass )) #define IS_WORKSPACEVIEW( obj ) (GTK_CHECK_TYPE( (obj), TYPE_WORKSPACEVIEW )) #define IS_WORKSPACEVIEW_CLASS( klass ) \ (GTK_CHECK_CLASS_TYPE( (klass), TYPE_WORKSPACEVIEW )) /* Column margins. */ #define WORKSPACEVIEW_MARGIN_LEFT (5) #define WORKSPACEVIEW_MARGIN_TOP (5) struct _Workspaceview { View view; GtkWidget *fixed; /* GtkFixed for tally */ GtkWidget *window; /* ScrolledWindow holding fixed */ Toolkitbrowser *toolkitbrowser; Workspacedefs *workspacedefs; GtkWidget *label; /* Tab label */ GtkWidget *padlock; /* The padlock icon */ GtkWidget *alert; /* The alert icon */ /* Left and right panes ... program window and toolkit browser. */ Pane *lpane; Pane *rpane; GtkWidget *popup; GtkWidget *popup_jump; /* Background window scroll. */ guint timer; int u; /* Set by columnview for bg scroll */ int v; /* Middle button drag scroll. */ gboolean dragging; int drag_x; int drag_y; /* Geometry. */ Rect vp; /* Viewport pos and size */ int width; /* Size of fixed area */ int height; Rect bounding; /* Bounding box of columnviews */ /* Placement hints for new columns. */ int next_x; int next_y; /* Context we use to change cursor shape. */ iWindowCursorContext *context; /* Follow prefs changes. */ guint watch_changed_sid; /* Only show the compat warning once. */ gboolean popped_compat; }; typedef struct _WorkspaceviewClass { ViewClass parent_class; /* My methods. */ } WorkspaceviewClass; void workspaceview_scroll( Workspaceview *wview, int x, int y, int w, int h ); void workspaceview_scroll_background( Workspaceview *wview, int u, int v ); void workspaceview_set_cursor( Workspaceview *wview, iWindowShape shape ); GtkType workspaceview_get_type( void ); View *workspaceview_new( void ); void workspaceview_set_label( Workspaceview *wview, GtkWidget *label, GtkWidget *padlock, GtkWidget *alert ); nip2-8.7.0/src/path.h0000644000175000017500000000326313224651032011215 00000000000000/* Declarations supporting search.c */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ extern GSList *path_search_default; extern GSList *path_start_default; extern const char *path_tmp_default; /* Type of path_map functions. */ typedef void *(*path_map_fn)( const char *, void *, void *, void * ); void path_rewrite_free_all( void ); void path_rewrite_add( const char *old, const char *new, gboolean lock ); void path_rewrite( char *buf ); void path_compact( char *path ); void path_expand( char *path ); char *path_rewrite_file( const char *patt ); GSList *path_parse( const char *path ); char *path_unparse( GSList *path ); void path_free2( GSList *path ); void *path_map( GSList *path, const char *patt, path_map_fn fn, void *a ); void *path_map_dir( const char *dir, const char *patt, path_map_fn fn, void *a ); char *path_find_file( const char *patt ); void path_init( void ); nip2-8.7.0/src/heap.c0000644000175000017500000015520313224651032011173 00000000000000/* Heap management. */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ /* GC on every alloc too! Extraordinarily slow. Turn on DEBUG_HEAP in ip.h * first. Good for spotting heap pointer errors. #define DEBUG_HEAP_GC */ /* Count GCs and %full, handy for tuning. #define DEBUG_GETMEM */ /* Time each GC, handy for benchmarking. #define DEBUG_GC_TIME */ #include "ip.h" static iObjectClass *parent_class = NULL; static GSList *heap_all = NULL; /* Call a function, passing in a "safe" PElement ... ie. the PElement points * at a fresh element which will be safe from the GC. */ void * heap_safe_pointer( Heap *heap, heap_safe_pointer_fn fn, void *a, void *b, void *c, void *d ) { Element e; PElement pe; void *result; e.type = ELEMENT_NOVAL; e.ele = (void *) 5; PEPOINTE( &pe, &e ); heap_register_element( heap, &e ); result = fn( heap, &pe, a, b, c, d ); heap_unregister_element( heap, &e ); return( result ); } /* Map a function over a piece of graph. */ void * heap_map( HeapNode *hn, heap_map_fn fn, void *a, void *b ) { void *c; if( !hn ) return( NULL ); switch( hn->type ) { case TAG_APPL: case TAG_CONS: if( (c = fn( hn, a, b )) ) return( c ); if( GETLT( hn ) == ELEMENT_NODE && (c = heap_map( GETLEFT( hn ), fn, a, b )) ) return( c ); if( GETRT( hn ) == ELEMENT_NODE && (c = heap_map( GETRIGHT( hn ), fn, a, b )) ) return( c ); return( NULL ); case TAG_REFERENCE: case TAG_COMPLEX: case TAG_GEN: case TAG_FILE: case TAG_CLASS: case TAG_DOUBLE: return( fn( hn, a, b ) ); case TAG_SHARED: if( (c = fn( hn, a, b )) ) return( c ); return( heap_map( GETLEFT( hn ), fn, a, b ) ); case TAG_FREE: default: g_assert( FALSE ); /* Keep gcc happy. */ return( NULL ); } } #ifdef DEBUG_HEAP_GC /* Debugging ... check that all nodes on the free list are TAG_FREE, and that * all other nodes are not TAG_FREE. */ static void heap_check_free( Heap *heap ) { HeapNode *hn; HeapBlock *hb; /* Clear all the DEBUG flags. */ for( hb = heap->hb; hb; hb = hb->next ) { int i; for( i = 0; i < hb->sz; i++ ) { HeapNode *hn = &hb->node[i]; hn->flgs &= FLAG_DEBUG ^ FLAG_ALL; } } /* Check free list. */ for( hn = heap->free; hn; hn = GETLEFT( hn ) ) { g_assert( hn->type == TAG_FREE ); hn->flgs |= FLAG_DEBUG; } /* Check for all non-free. */ for( hb = heap->hb; hb; hb = hb->next ) { int i; for( i = 0; i < hb->sz; i++ ) { HeapNode *hn = &hb->node[i]; g_assert( hn->type != TAG_FREE || (hn->flgs & FLAG_DEBUG) ); } } } #endif /*DEBUG_HEAP_GC*/ #ifdef DEBUG_HEAP_GC static void heap_check_managed( void *key, void *value, Heap *heap ) { /* Validate pointer. */ (void) MANAGED( value ); } #endif /*DEBUG_HEAP_GC*/ /* Test for sanity. */ int heap_sanity( Heap *heap ) { #ifdef DEBUG_HEAP_GC heap_check_free( heap ); heap_gc( heap ); heap_check_free( heap ); g_hash_table_foreach( heap->mtable, (GHFunc) heap_check_managed, heap ); #endif /*DEBUG_HEAP_GC*/ return( 0 ); } /* Debugging ... check that all heaps have been closed, dump any which * haven't. */ void heap_check_all_destroyed( void ) { slist_map( heap_all, (SListMapFn) iobject_dump, NULL ); } /* Free a HeapBlock. */ static void heapblock_free( HeapBlock *hb ) { #ifdef DEBUG printf( "heapblock_free\n" ); #endif /*DEBUG*/ if( hb->next ) heapblock_free( hb->next ); if( hb->node ) IM_FREE( hb->node ); IM_FREE( hb ); } static void heap_set_flush( Heap *heap, gboolean flush ) { heap->flush = flush; } static void heap_dispose_print( void *key, void *value ) { Managed *managed = MANAGED( value ); iobject_print( IOBJECT( managed ) ); } static void heap_dispose( GObject *gobject ) { Heap *heap = HEAP( gobject ); /* Repeatedly close managed objects. Each close can trigger other * closes, so we need to loop until done. */ managed_clear( heap ); heap_set_flush( heap, TRUE ); while( managed_free_unused( heap ) ) ; /* Check all managed objects are dead. */ g_hash_table_foreach( heap->mtable, (GHFunc) heap_dispose_print, NULL ); IM_FREEF( g_source_remove, heap->gc_tid ); G_OBJECT_CLASS( parent_class )->dispose( gobject ); } static void heap_finalize( GObject *gobject ) { Heap *heap = HEAP( gobject ); if( heap->hb ) heapblock_free( heap->hb ); IM_FREEF( g_hash_table_destroy, heap->emark ); IM_FREEF( g_hash_table_destroy, heap->rmark ); IM_FREEF( g_hash_table_destroy, heap->mtable ); heap_all = g_slist_remove( heap_all, heap ); G_OBJECT_CLASS( parent_class )->finalize( gobject ); } static void heap_info( iObject *iobject, VipsBuf *buf ) { Heap *heap = HEAP( iobject ); vips_buf_appendf( buf, "compile = " ); if( heap->compile ) if( heap->compile->sym ) { symbol_qualified_name( heap->compile->sym, buf ); vips_buf_appendf( buf, "(%p) (sym)\n", heap->compile->sym ); } else vips_buf_appendf( buf, "(compile, but no sym)\n" ); else vips_buf_appendf( buf, "(no compile)\n" ); vips_buf_appendf( buf, "mxb (max blocks) = %d\n", heap->mxb ); vips_buf_appendf( buf, "rsz (nodes per block) = %d\n", heap->rsz ); vips_buf_appendf( buf, "nb (number of blocks) = %d\n", heap->nb ); vips_buf_appendf( buf, "emark = %d pointers\n", g_hash_table_size( heap->emark ) ); vips_buf_appendf( buf, "rmark = %d pointers\n", g_hash_table_size( heap->rmark ) ); vips_buf_appendf( buf, "ncells (cells allocated) = %d\n", heap->ncells ); vips_buf_appendf( buf, "nfree (cells free at last GC) = %d\n", heap->nfree ); vips_buf_appendf( buf, "mtable (Managed blocks) = %d pointers\n", g_hash_table_size( heap->mtable ) ); IOBJECT_CLASS( parent_class )->info( iobject, buf ); } /* Empty a heap block. */ static void heapblock_empty( HeapBlock *hb ) { int i; /* Set as empty free-list. */ for( i = 0; i < hb->sz; i++ ) { HeapNode *hn = &hb->node[i]; hn->type = TAG_FREE; hn->flgs = 0; PPUTLEFT( hn, ELEMENT_NODE, hn + 1 ); } PPUTLEFT( &hb->node[hb->sz - 1], ELEMENT_NODE, NULL ); } /* Add another HeapBlock, if we can. */ static gboolean heapblock_create( Heap *heap, int sz ) { HeapBlock *hb; if( heap->nb > heap->mxb ) { heap->mxb = 1 + (heap->max_fn( heap ) / heap->rsz); if( heap->nb > heap->mxb ) /* Hit limit ... caller detects full by ->free becomng * NULL. */ return( TRUE ); } #ifdef DEBUG printf( "heapblock_create: new block, size %d\n", sz ); #endif /*DEBUG*/ if( !(hb = INEW( NULL, HeapBlock )) ) return( FALSE ); hb->heap = heap; hb->next = NULL; hb->node = NULL; hb->sz = sz; if( !(hb->node = IARRAY( NULL, sz, HeapNode )) ) { heapblock_free( hb ); return( FALSE ); } heapblock_empty( hb ); /* Link to existing blocks. */ hb->next = heap->hb; heap->hb = hb; PPUTLEFT( &hb->node[hb->sz - 1], ELEMENT_NODE, heap->free ); heap->free = &hb->node[0]; heap->nb++; return( TRUE ); } static void heap_class_init( HeapClass *class ) { GObjectClass *gobject_class = G_OBJECT_CLASS( class ); iObjectClass *iobject_class = IOBJECT_CLASS( class ); parent_class = g_type_class_peek_parent( class ); gobject_class->dispose = heap_dispose; gobject_class->finalize = heap_finalize; iobject_class->info = heap_info; } static void heap_init( Heap *heap ) { heap->compile = NULL; heap->max_fn = NULL; heap->mxb = -1; heap->rsz = 0; heap->nb = 0; heap->hb = NULL; heap->free = NULL; heap->ncells = 0; heap->nfree = 0; heap->serial = 0; heap->filled = FALSE; heap->emark = g_hash_table_new( NULL, g_direct_equal ); heap->rmark = g_hash_table_new( NULL, g_direct_equal ); heap->mtable = g_hash_table_new( NULL, g_direct_equal ); heap->gc_tid = 0; heap->flush = FALSE; heap_all = g_slist_prepend( heap_all, heap ); } GType heap_get_type( void ) { static GType type = 0; if( !type ) { static const GTypeInfo info = { sizeof( HeapClass ), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) heap_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof( Heap ), 32, /* n_preallocs */ (GInstanceInitFunc) heap_init, }; type = g_type_register_static( TYPE_IOBJECT, "Heap", &info, 0 ); } return( type ); } static void heap_link( Heap *heap, Compile *compile, heap_max_fn max_fn, int stsz, int rsz ) { heap->compile = compile; heap->max_fn = max_fn; heap->rsz = rsz; (void) heapblock_create( heap, stsz ); if( compile ) iobject_set( IOBJECT( heap ), IOBJECT( compile->sym )->name, NULL ); /* Can now set max blocks. */ heap->mxb = 1 + (heap->max_fn( heap ) / rsz); } /* Create an empty heap. mxsz is maximum size of heap in units of nodes, * stsz is start size, rsz is heap growth unit. */ Heap * heap_new( Compile *compile, heap_max_fn max_fn, int stsz, int rsz ) { Heap *heap; heap = HEAP( g_object_new( TYPE_HEAP, NULL ) ); heap_link( heap, compile, max_fn, stsz, rsz ); return( heap ); } /* Set flags on a heap. */ void heap_set( Heap *heap, NodeFlags setmask ) { HeapBlock *hb; int i; for( hb = heap->hb; hb; hb = hb->next ) for( i = 0; i < hb->sz; i++ ) hb->node[i].flgs |= setmask; } /* Clear flags on a heap. */ void heap_clear( Heap *heap, NodeFlags clearmask ) { HeapBlock *hb; int i; int cmask = clearmask ^ FLAG_ALL; for( hb = heap->hb; hb; hb = hb->next ) for( i = 0; i < hb->sz; i++ ) hb->node[i].flgs &= cmask; } /* Allocate a new serial number for a heap. On return, we guarantee that * heap->serial is a value not used by any nodes in the heap. */ int heap_serial_new( Heap *heap ) { heap->serial += 1; if( heap->serial > FLAG_SERIAL ) { heap->serial = 1; heap_clear( heap, FLAG_SERIAL ); } return( heap->serial ); } /* Mark a tree. Avoid recursion because of the danger of C stack overflow on * large heaps. */ static void heap_mark_tree( Heap *heap, HeapNode *hn ) { GSList *pending = NULL; pending = g_slist_prepend( pending, hn ); while( pending ) { hn = (HeapNode *) pending->data; pending = g_slist_remove( pending, hn ); /* Chase down the LHS of the nodes, add the RHS nodes we pass * to the pending list. */ for(;;) { if( hn->flgs & FLAG_MARK ) break; hn->flgs |= FLAG_MARK; /* Don't modify hn for the do-nothing case: we'll * break on the next loop. */ switch( hn->type ) { case TAG_GEN: case TAG_COMPLEX: case TAG_CLASS: case TAG_APPL: case TAG_CONS: if( GETRT( hn ) == ELEMENT_MANAGED ) managed_mark( (Managed *) GETRIGHT( hn ) ); if( GETLT( hn ) == ELEMENT_MANAGED ) managed_mark( (Managed *) GETLEFT( hn ) ); if( GETRT( hn ) == ELEMENT_NODE ) { if( GETLT( hn ) == ELEMENT_NODE ) { pending = g_slist_prepend( pending, GETRIGHT( hn ) ); hn = GETLEFT( hn ); } else hn = GETRIGHT( hn ); } else if( GETLT( hn ) == ELEMENT_NODE ) hn = GETLEFT( hn ); break; case TAG_FILE: g_assert( GETLT( hn ) == ELEMENT_MANAGED ); managed_mark( (Managed *) GETLEFT( hn ) ); break; case TAG_DOUBLE: break; case TAG_SHARED: case TAG_REFERENCE: if( GETLT( hn ) == ELEMENT_NODE ) hn = GETLEFT( hn ); break; case TAG_FREE: default: g_assert( FALSE ); } } } } /* Mark an element. */ static void * mark_pelement( PElement *base, Heap *heap ) { if( PEISMANAGED( base ) ) managed_mark( MANAGED( PEGETVAL( base ) ) ); else if( PEISNODE( base ) ) heap_mark_tree( heap, PEGETVAL( base ) ); return( NULL ); } /* Mark an element. */ static void mark_element( void *key, void *value, Heap *heap ) { Element *root = (Element *) value; PElement base; PEPOINTE( &base, root ); (void) mark_pelement( &base, heap ); } /* Mark a reduce context ... the heapnodes on the spine stack etc. */ static void * mark_reduce( void *key, void *value, Heap *heap ) { Reduce *rc = (Reduce *) value; int i; #ifdef DEBUG printf( "mark_reduce: marking %d stack elements\n", rc->sp ); #endif /*DEBUG*/ for( i = 0; i < rc->sp; i++ ) heap_mark_tree( heap, rc->nstack[i] ); return( NULL ); } /* Do a garbage collect. */ gboolean heap_gc( Heap *heap ) { HeapBlock *hb; int nfree; int ncells; int nblocks; #ifdef DEBUG_GC_TIME static GTimer *GC_timer = NULL; if( !GC_timer ) GC_timer = g_timer_new(); g_timer_reset( GC_timer ); printf( "heap_gc: starting GC for heap %s\n", IOBJECT( heap )->name ); #endif /*DEBUG_GC_TIME*/ /* Clear marks on managed objects. Nodes should all be clear already. */ managed_clear( heap ); /* All flags should be clear, so just mark. */ g_hash_table_foreach( heap->emark, (GHFunc) mark_element, heap ); g_hash_table_foreach( heap->rmark, (GHFunc) mark_reduce, heap ); /* And sweep up unmarked into new free list. */ heap->free = NULL; ncells = nfree = nblocks = 0; for( hb = heap->hb; hb; hb = hb->next ) { const int sz = hb->sz; int i; for( i = 0; i < sz; i++ ) { HeapNode * const hn = &hb->node[i]; if( !(hn->flgs & FLAG_MARK) ) { hn->type = TAG_FREE; PPUTLEFT( hn, ELEMENT_NODE, heap->free ); #ifdef DEBUG_HEAP_GC /* Not necessary, but may be helpful to zap * any pointer in there. */ PPUTRIGHT( hn, ELEMENT_NODE, NULL ); #endif /*DEBUG_HEAP_GC*/ heap->free = hn; nfree += 1; } hn->flgs &= FLAG_MARK ^ FLAG_ALL; } ncells += hb->sz; nblocks += 1; } heap->ncells = ncells; heap->nfree = nfree; /* Close unused managed objects. It can (potentially) take a couple of * passes through mtable to free everything ... but we'll do more on * the next GC. */ managed_free_unused( heap ); #ifdef DEBUG_GC_TIME printf( "heap_gc: %d cells in %d blocks, %d in use\n", ncells, nblocks, ncells - nfree ); printf( "(GC took %gs)\n", g_timer_elapsed( GC_timer, NULL ) ); #endif /*DEBUG_GC_TIME*/ return( TRUE ); } static gint heap_gc_request_cb( Heap *heap ) { heap->gc_tid = 0; if( !heap_gc( heap ) ) printf( "help! delayed GC failed!\n" ); iobject_changed( IOBJECT( heap ) ); return( FALSE ); } /* Request a delayed garbage collect. */ void heap_gc_request( Heap *heap ) { IM_FREEF( g_source_remove, heap->gc_tid ); heap->gc_tid = g_timeout_add( 1000, (GSourceFunc) heap_gc_request_cb, heap ); } /* Register a pointer into a heap. */ void heap_register_element( Heap *heap, Element *root ) { g_hash_table_insert( heap->emark, root, root ); } /* Unregister a pointer into a heap. */ void heap_unregister_element( Heap *heap, Element *root ) { if( g_hash_table_remove( heap->emark, root ) ) { #ifdef DEBUG printf( "heap_unregister_element: %d pointers\n", g_hash_table_size( heap->emark ) ); #endif } } /* Register a Reduce working on this heap. */ void heap_register_reduce( Heap *heap, Reduce *rc ) { g_hash_table_insert( heap->rmark, rc, rc ); } /* Unregister a reduce context. */ void heap_unregister_reduce( Heap *heap, Reduce *rc ) { g_hash_table_remove( heap->rmark, rc ); } /* Allocate a new HeapNode ... long version. See NEWNODE() macro. */ HeapNode * heap_getmem( Heap *heap ) { HeapNode *hn; int pcused; #ifdef DEBUG_GETMEM static int n_heap_getmem = 0; #endif /*DEBUG_GETMEM*/ /* Easy case ... this should be handled by the NEWNODE macro, but do * it here as well just in case. */ if( heap->free ) { (void) EXTRACTNODE( heap, hn ); return( hn ); } #ifdef DEBUG printf( "heap_getmem: GC on full heap for heap %s\n", IOBJECT( heap )->name ); #endif /*DEBUG*/ /* Try a GC. */ if( !heap_gc( heap ) ) return( NULL ); /* Is heap over x% full? Add another heap block if we can. */ pcused = 100 * (heap->ncells - heap->nfree) / heap->ncells; #ifdef DEBUG_GETMEM n_heap_getmem += 1; printf( "heap_getmem: %d%% (%d)\n", pcused, n_heap_getmem ); #endif /*DEBUG_GETMEM*/ if( pcused > 50 ) { int nblocks = 1 + (heap->ncells - heap->nfree) / heap->rsz; int i; #ifdef DEBUG_GETMEM printf( "heap_getmem: %d more blocks added\n", nblocks ); #endif /*DEBUG_GETMEM*/ for( i = 0; i < nblocks; i++ ) if( !heapblock_create( heap, heap->rsz ) ) return( NULL ); } if( !heap->free ) { error_top( _( "Heap full." ) ); if( heap->compile ) { char txt[100]; VipsBuf buf = VIPS_BUF_STATIC( txt ); compile_name( heap->compile, &buf ); error_sub( _( "The compile heap for %s has filled. " "Make it smaller and less complicated." ), vips_buf_all( &buf ) ); } else error_sub( _( "The main calculation heap has filled. " "Raise the heap size limit in Preferences." ) ); heap->filled = TRUE; return( NULL ); } (void) EXTRACTNODE( heap, hn ); return( hn ); } gboolean heap_bool_new( Heap *heap, gboolean val, PElement *out ) { PEPUTP( out, ELEMENT_BOOL, val ); return( TRUE ); } /* Write a real to an element. */ gboolean heap_real_new( Heap *heap, double in, PElement *out ) { HeapNode *hn; if( NEWNODE( heap, hn ) ) return( FALSE ); hn->type = TAG_DOUBLE; hn->body.num = in; PEPUTP( out, ELEMENT_NODE, hn ); return( TRUE ); } /* Write an element to an element. */ gboolean heap_element_new( Heap *heap, Element *e, PElement *out ) { PEPUTE( out, e ); return( TRUE ); } /* Make a complex node from two elements. */ gboolean heap_complex_element_new( Heap *heap, PElement *rp, PElement *ip, PElement *out ) { HeapNode *hn; if( NEWNODE( heap, hn ) ) return( FALSE ); hn->type = TAG_COMPLEX; PPUT( hn, PEGETTYPE( rp ), PEGETVAL( rp ), PEGETTYPE( ip ), PEGETVAL( ip ) ); PEPUTP( out, ELEMENT_NODE, hn ); return( TRUE ); } /* Make a complex node. */ gboolean heap_complex_new( Heap *heap, double rp, double ip, PElement *out ) { Element dummy; PElement t; /* Form complex node. */ dummy.type = ELEMENT_NOVAL; dummy.ele = (void *) 6; PEPOINTE( &t, &dummy ); if( !heap_complex_element_new( heap, &t, &t, out ) ) return( FALSE ); /* Install real and imag parts. */ PEPOINTLEFT( PEGETVAL( out ), &t ); if( !heap_real_new( heap, rp, &t ) ) return( FALSE ); PEPOINTRIGHT( PEGETVAL( out ), &t ); if( !heap_real_new( heap, ip, &t ) ) return( FALSE ); return( TRUE ); } /* 'get' a list: move the PE to point at the list. */ gboolean heap_get_list( PElement *list ) { g_assert( PEISLIST( list ) ); if( PEISMANAGEDSTRING( list ) ) { if( !managedstring_get( PEGETMANAGEDSTRING( list ), list ) ) return( FALSE ); } return( TRUE ); } /* Set list to []. */ void heap_list_init( PElement *list ) { PEPUTP( list, ELEMENT_ELIST, NULL ); } /* Add new node to list, point data at new CONS LHS. */ gboolean heap_list_add( Heap *heap, PElement *list, PElement *data ) { HeapNode *hn; /* Build CONS node. */ if( NEWNODE( heap, hn ) ) return( FALSE ); hn->type = TAG_CONS; PPUTLEFT( hn, ELEMENT_NOVAL, (void *) 7 ); PEPUTRIGHT( hn, list ); PEPUTP( list, ELEMENT_NODE, hn ); /* Point data to new LHS. */ PEPOINTLEFT( hn, data ); return( TRUE ); } /* Move list on to the next RHS. list points at [], or pointer to next node. * Used with heap_list_init()/heap_list_add() to build lists. */ gboolean heap_list_next( PElement *list ) { HeapNode *hn = PEGETVAL( list ); if( hn ) { PEPOINTRIGHT( hn, list ); return( TRUE ); } else return( FALSE ); } gboolean heap_list_cat( Reduce *rc, PElement *a, PElement *b, PElement *out ) { PElement list = *out; REDUCE_CATCH_START( FALSE ); reduce_clone_list( rc, a, &list ); PEPUTPE( &list, b ); REDUCE_CATCH_STOP; return( TRUE ); } /* Start off a function application. */ void heap_appl_init( PElement *base, PElement *func ) { PEPUTPE( base, func ); } /* Add a new parameter to a function application. base points at the * function built so far ... update base to point to new node (old base * becomes LHS), return parm pointing to new RHS */ gboolean heap_appl_add( Heap *heap, PElement *base, PElement *parm ) { HeapNode *hn; /* Build appl node. */ if( NEWNODE( heap, hn ) ) return( FALSE ); hn->type = TAG_APPL; PEPUTLEFT( hn, base ); PPUTRIGHT( hn, ELEMENT_ELIST, NULL ); PEPUTP( base, ELEMENT_NODE, hn ); /* Point parm to new RHS. */ PEPOINTRIGHT( hn, parm ); return( TRUE ); } /* Make a lazy file read node. */ gboolean heap_file_new( Heap *heap, const char *filename, PElement *out ) { Managedfile *managedfile; HeapNode *hn; if( !(managedfile = managedfile_new( heap, filename )) ) return( FALSE ); /* Make sure the managedfile survives a GC. */ MANAGED_REF( managedfile ); if( NEWNODE( heap, hn ) ) { MANAGED_UNREF( managedfile ); return( FALSE ); } hn->type = TAG_FILE; PPUT( hn, ELEMENT_MANAGED, managedfile, ELEMENT_ELIST, NULL ); PEPUTP( out, ELEMENT_NODE, hn ); MANAGED_UNREF( managedfile ); return( TRUE ); } /* Make a heap string. */ gboolean heap_string_new( Heap *heap, const char *str, PElement *out ) { PElement list = *out; const int n = strlen( str ); int i; heap_list_init( &list ); for( i = 0; i < n; i++ ) { PElement t; if( !heap_list_add( heap, &list, &t ) ) return( FALSE ); PEPUTP( &t, ELEMENT_CHAR, (int) str[i] ); (void) heap_list_next( &list ); } return( TRUE ); } /* Make a managed string. */ gboolean heap_managedstring_new( Heap *heap, const char *str, PElement *out ) { Managedstring *managedstring; if( strcmp( str, "" ) == 0 ) { PEPUTP( out, ELEMENT_ELIST, NULL ); } else { if( !(managedstring = managedstring_find( heap, str )) ) return( FALSE ); PEPUTP( out, ELEMENT_MANAGED, managedstring ); } return( TRUE ); } /* Make a [[char]]. */ gboolean heap_lstring_new( Heap *heap, GSList *labels, PElement *out ) { PElement list = *out; const int n = g_slist_length( labels ); int i; /* Make first RHS ... the end of the list. */ heap_list_init( &list ); /* Build a CONS node for each element. */ for( i = 0; i < n; i++ ) { PElement t; if( !heap_list_add( heap, &list, &t ) || !heap_managedstring_new( heap, g_slist_nth_data( labels, i ), &t ) ) return( FALSE ); (void) heap_list_next( &list ); } return( TRUE ); } /* Make a realvec. */ gboolean heap_realvec_new( Heap *heap, int n, double *vec, PElement *out ) { PElement list = *out; int i; /* Make first RHS ... the end of the list. */ heap_list_init( &list ); /* Build a CONS node for each element. */ for( i = 0; i < n; i++ ) { PElement t; if( !heap_list_add( heap, &list, &t ) ) return( FALSE ); if( !heap_real_new( heap, vec[i], &t ) ) return( FALSE ); (void) heap_list_next( &list ); } return( TRUE ); } /* Make a realvec, but from an int*. */ gboolean heap_intvec_new( Heap *heap, int n, int *vec, PElement *out ) { PElement list = *out; int i; /* Make first RHS ... the end of the list. */ heap_list_init( &list ); /* Build a CONS node for each element. */ for( i = 0; i < n; i++ ) { PElement t; if( !heap_list_add( heap, &list, &t ) ) return( FALSE ); if( !heap_real_new( heap, (double) vec[i], &t ) ) return( FALSE ); (void) heap_list_next( &list ); } return( TRUE ); } /* Make a matrix. */ gboolean heap_matrix_new( Heap *heap, int xsize, int ysize, double *vec, PElement *out ) { PElement list = *out; int y, i; /* Make first RHS ... the end of the list. */ heap_list_init( &list ); /* Build a CONS node for each element. */ for( i = 0, y = 0; y < ysize; y++ ) { PElement t; if( !heap_list_add( heap, &list, &t ) ) return( FALSE ); if( !heap_realvec_new( heap, xsize, vec + i, &t ) ) return( FALSE ); i += xsize; (void) heap_list_next( &list ); } return( TRUE ); } /* Make a typecheck error. Always return FALSE ... the gboolean is just there * for REDUCE_CATCH. */ gboolean heap_error_typecheck( PElement *e, const char *name, const char *type ) { Reduce *rc = reduce_context; REDUCE_CATCH_START( FALSE ); (void) reduce_error_typecheck( reduce_context, e, name, type ); REDUCE_CATCH_STOP; return( FALSE ); } /* Map over a heap list. Reduce the list spine as we go, don't reduce the * heads. Return base on error, or whatever the user function returns (unlike * reduce_map_list(), which we can't just wrap). */ void * heap_map_list( PElement *base, heap_map_list_fn fn, void *a, void *b ) { Reduce *rc = reduce_context; PElement e = *base; if( !reduce_pelement( rc, reduce_spine, &e ) ) return( base ); if( !PEISLIST( &e ) ) { heap_error_typecheck( &e, "heap_map_list", "[*]" ); return( base ); } while( PEISFLIST( &e ) ) { PElement head; void *res; if( !heap_get_list( &e ) ) return( base ); /* Apply user function to the head. */ PEGETHD( &head, &e ); if( (res = fn( &head, a, b )) ) return( res ); /* Reduce the tail. */ PEGETTL( &e, &e ); if( !reduce_pelement( rc, reduce_spine, &e ) ) return( base ); } return( NULL ); } /* Iterate over a list. Move list on to the next tl, point data at the * head of the current node, FALSE for []. */ gboolean heap_get_list_next( PElement *list, PElement *data ) { Reduce *rc = reduce_context; if( !reduce_pelement( rc, reduce_spine, list ) ) return( FALSE ); if( PEISFLIST( list ) ) { HeapNode *hn; if( !heap_get_list( list ) ) return( FALSE ); hn = PEGETVAL( list ); PEPOINTRIGHT( hn, list ); PEPOINTLEFT( hn, data ); return( TRUE ); } else return( FALSE ); } typedef struct _HeapMapDict { heap_map_dict_fn fn; void *a; void *b; } HeapMapDict; static void * heap_map_dict_entry( PElement *head, HeapMapDict *map_dict ) { Reduce *rc = reduce_context; char key[256]; PElement p1, p2; void *result; if( !reduce_pelement( rc, reduce_spine, head ) ) return( head ); if( !PEISFLIST( head ) ) { heap_error_typecheck( head, "heap_map_dict", "[*]" ); return( head ); } if( !heap_get_list( head ) ) return( head ); PEGETHD( &p1, head ); if( !heap_get_string( &p1, key, 256 ) ) return( head ); PEGETTL( &p2, head ); if( !reduce_pelement( rc, reduce_spine, &p2 ) ) return( head ); if( !PEISFLIST( &p2 ) ) { heap_error_typecheck( &p2, "heap_map_dict", "[*]" ); return( head ); } if( !heap_get_list( &p2 ) ) return( head ); PEGETHD( &p1, &p2 ); if( (result = map_dict->fn( key, &p1, map_dict->a, map_dict->b )) ) return( result ); PEGETTL( &p1, &p2 ); if( !reduce_pelement( rc, reduce_spine, &p1 ) ) return( head ); if( !PEISELIST( &p1 ) ) { heap_error_typecheck( &p1, "heap_map_dict", "[]" ); return( head ); } return( NULL ); } /* Map over a list of ["key", value] pairs. */ void * heap_map_dict( PElement *base, heap_map_dict_fn fn, void *a, void *b ) { HeapMapDict map_dict; map_dict.fn = fn; map_dict.a = a; map_dict.b = b; return( heap_map_list( base, (heap_map_list_fn) heap_map_dict_entry, &map_dict, NULL ) ); } /* Evaluate a PElement into a string buffer. */ gboolean heap_get_string( PElement *base, char *buf, int n ) { Reduce *rc = reduce_context; REDUCE_CATCH_START( FALSE ); (void) reduce_get_string( reduce_context, base, buf, n ); REDUCE_CATCH_STOP; return( TRUE ); } /* Evaluate a PElement to a [[char]]. */ gboolean heap_get_lstring( PElement *base, GSList **labels ) { Reduce *rc = reduce_context; REDUCE_CATCH_START( FALSE ); (void) reduce_get_lstring( reduce_context, base, labels ); REDUCE_CATCH_STOP; return( TRUE ); } /* Get an element as a bool. */ gboolean heap_get_bool( PElement *base, gboolean *out ) { Reduce *rc = reduce_context; REDUCE_CATCH_START( FALSE ); *out = reduce_get_bool( reduce_context, base ); REDUCE_CATCH_STOP; return( TRUE ); } /* Get an element as a real. */ gboolean heap_get_real( PElement *base, double *out ) { Reduce *rc = reduce_context; REDUCE_CATCH_START( FALSE ); *out = reduce_get_real( reduce_context, base ); REDUCE_CATCH_STOP; return( TRUE ); } /* Get an element as a class ... just reduce and typecheck. */ gboolean heap_get_class( PElement *base, PElement *out ) { Reduce *rc = reduce_context; REDUCE_CATCH_START( FALSE ); reduce_get_class( reduce_context, base ); REDUCE_CATCH_STOP; /* Point out at base ... for consistency with other getters. */ *out = *base; return( TRUE ); } /* Get an element as an image. */ gboolean heap_get_image( PElement *base, Imageinfo **out ) { Reduce *rc = reduce_context; REDUCE_CATCH_START( FALSE ); *out = reduce_get_image( reduce_context, base ); REDUCE_CATCH_STOP; return( TRUE ); } /* Get an element as a realvec. Return -1 on error, or length of vector. */ int heap_get_realvec( PElement *base, double *buf, int n ) { Reduce *rc = reduce_context; int l; REDUCE_CATCH_START( -1 ); l = reduce_get_realvec( reduce_context, base, buf, n ); REDUCE_CATCH_STOP; return( l ); } /* Get an element as a imagevec. Return -1 on error, or length of vector. */ int heap_get_imagevec( PElement *base, Imageinfo **buf, int n ) { Reduce *rc = reduce_context; int l; REDUCE_CATCH_START( -1 ); l = reduce_get_imagevec( reduce_context, base, buf, n ); REDUCE_CATCH_STOP; return( l ); } /* Get an element as a matrix. Return -1 on error, or length of buffer used. * Write xsize/ysize to args. */ gboolean heap_get_matrix_size( PElement *base, int *xsize, int *ysize ) { Reduce *rc = reduce_context; REDUCE_CATCH_START( FALSE ); (void) reduce_get_matrix_size( reduce_context, base, xsize, ysize ); REDUCE_CATCH_STOP; return( TRUE ); } /* Get an element as a matrix. Return -1 on error, or length of buffer used. * Write xsize/ysize to args. */ gboolean heap_get_matrix( PElement *base, double *buf, int n, int *xsize, int *ysize ) { Reduce *rc = reduce_context; REDUCE_CATCH_START( FALSE ); (void) reduce_get_matrix( reduce_context, base, buf, n, xsize, ysize ); REDUCE_CATCH_STOP; return( TRUE ); } gboolean heap_is_elist( PElement *base, gboolean *out ) { Reduce *rc = reduce_context; REDUCE_CATCH_START( FALSE ); *out = reduce_is_elist( rc, base ); REDUCE_CATCH_STOP; return( TRUE ); } gboolean heap_is_list( PElement *base, gboolean *out ) { Reduce *rc = reduce_context; REDUCE_CATCH_START( FALSE ); *out = reduce_is_list( rc, base ); REDUCE_CATCH_STOP; return( TRUE ); } /* Do a get, check it's OK. We don't get very much, in case it's a long * string and will take a while to eval. */ gboolean heap_is_string( PElement *base, gboolean *out ) { Reduce *rc = reduce_context; REDUCE_CATCH_START( FALSE ); *out = reduce_is_string( rc, base ); REDUCE_CATCH_STOP; return( TRUE ); } gboolean heap_is_realvec( PElement *base, gboolean *out ) { Reduce *rc = reduce_context; REDUCE_CATCH_START( FALSE ); *out = reduce_is_realvec( rc, base ); REDUCE_CATCH_STOP; return( TRUE ); } gboolean heap_is_imagevec( PElement *base, gboolean *out ) { Reduce *rc = reduce_context; REDUCE_CATCH_START( FALSE ); *out = reduce_is_imagevec( rc, base ); REDUCE_CATCH_STOP; return( TRUE ); } gboolean heap_is_matrix( PElement *base, gboolean *out ) { Reduce *rc = reduce_context; REDUCE_CATCH_START( FALSE ); *out = reduce_is_matrix( rc, base ); REDUCE_CATCH_STOP; return( TRUE ); } gboolean heap_is_class( PElement *base, gboolean *out ) { Reduce *rc = reduce_context; REDUCE_CATCH_START( FALSE ); *out = reduce_is_class( rc, base ); REDUCE_CATCH_STOP; return( TRUE ); } gboolean heap_is_instanceof_exact( const char *name, PElement *klass, gboolean *out ) { Reduce *rc = reduce_context; REDUCE_CATCH_START( FALSE ); *out = reduce_is_instanceof_exact( rc, name, klass ); REDUCE_CATCH_STOP; return( TRUE ); } gboolean heap_is_instanceof( const char *name, PElement *klass, gboolean *out ) { Reduce *rc = reduce_context; REDUCE_CATCH_START( FALSE ); *out = reduce_is_instanceof( rc, name, klass ); REDUCE_CATCH_STOP; return( TRUE ); } int heap_list_length( PElement *base ) { Reduce *rc = reduce_context; int result; REDUCE_CATCH_START( -1 ); result = reduce_list_length( rc, base ); REDUCE_CATCH_STOP; return( result ); } int heap_list_length_max( PElement *base, int max_length ) { Reduce *rc = reduce_context; int result; REDUCE_CATCH_START( -1 ); result = reduce_list_length_max( rc, base, max_length ); REDUCE_CATCH_STOP; return( result ); } gboolean heap_list_index( PElement *base, int n, PElement *out ) { Reduce *rc = reduce_context; REDUCE_CATCH_START( FALSE ); reduce_list_index( rc, base, n, out ); REDUCE_CATCH_STOP; return( TRUE ); } gboolean heap_reduce_strict( PElement *base ) { Reduce *rc = reduce_context; REDUCE_CATCH_START( FALSE ); reduce_spine_strict( rc, base ); REDUCE_CATCH_STOP; return( TRUE ); } /* hn is a node in a compiled function, out is part of a node in reduce * space to which it should be copied. * * Have to be careful to copy sym pointers in nodes from compile heap. */ static gboolean copy_node( Heap *heap, HeapNode *ri[], HeapNode *hn, PElement *out ) { HeapNode *hn1; PElement pleft, pright; int i; /* Look for relocation nodes. */ if( hn->type == TAG_SHARED ) { /* RHS of SHARE is the index of this share node. */ i = GPOINTER_TO_INT( GETRIGHT( hn ) ); /* Skip to shared section. */ hn = GETLEFT( hn ); /* Copy and link on this node. */ if( NEWNODE( heap, hn1 ) ) return( FALSE ); *hn1 = *hn; PEPUTP( out, ELEMENT_NODE, hn1 ); /* Note pointer in relocation table. */ ri[i] = hn1; } else if( hn->type == TAG_REFERENCE ) { /* Must have already copied this SHARE, just link back. */ hn1 = GETLEFT( hn ); i = GPOINTER_TO_INT( GETRIGHT( hn1 ) ); PEPUTP( out, ELEMENT_NODE, ri[i] ); /* Done! */ return( TRUE ); } else { /* Copy and link on this node. */ if( NEWNODE( heap, hn1 ) ) return( FALSE ); *hn1 = *hn; PEPUTP( out, ELEMENT_NODE, hn1 ); } /* If it's a DOUBLE, no more to do. */ if( hn->type == TAG_DOUBLE ) return( TRUE ); if( hn->ltype != ELEMENT_NODE && hn->rtype == ELEMENT_NODE ) { /* Right pointer only. Zap pointer so we can GC * safely. */ hn1->rtype = ELEMENT_CHAR; /* Recurse for RHS of node. */ PEPOINTRIGHT( hn1, &pright ); if( !copy_node( heap, ri, GETRIGHT( hn ), &pright ) ) return( FALSE ); } else if( hn->ltype == ELEMENT_NODE && hn->rtype != ELEMENT_NODE ) { /* Left pointer only. Zap pointer so we can GC * safely. */ hn1->ltype = ELEMENT_CHAR; /* Recurse for LHS of node. */ PEPOINTLEFT( hn1, &pleft ); if( !copy_node( heap, ri, GETLEFT( hn ), &pleft ) ) return( FALSE ); } else if( hn->ltype == ELEMENT_NODE && hn->rtype == ELEMENT_NODE ) { /* Both pointers. Zap pointers so we can GC safely. */ hn1->ltype = ELEMENT_CHAR; hn1->rtype = ELEMENT_CHAR; /* Recurse for boths sides of node. */ PEPOINTLEFT( hn1, &pleft ); PEPOINTRIGHT( hn1, &pright ); if( !copy_node( heap, ri, GETLEFT( hn ), &pleft ) || !copy_node( heap, ri, GETRIGHT( hn ), &pright ) ) return( FALSE ); } return( TRUE ); } /* Copy a compiled graph into the main reduce space. Overwrite the node at * out. */ gboolean heap_copy( Heap *heap, Compile *compile, PElement *out ) { Element *root = &compile->base; HeapNode *ri[MAX_RELOC]; /* Check for possible C stack overflow ... can't go over 2M on most * systems if we're using (or any of our libs are using) threads. */ if( (char *) main_c_stack_base - (char *) &heap > 2000000 ) { error_top( _( "Overflow error." ) ); error_sub( _( "C stack overflow. Circular definition." ) ); return( FALSE ); } #ifdef DEBUG printf( "heap_copy: " ); symbol_name_print( compile->sym ); printf( "\n" ); #endif /*DEBUG*/ /* Check for possible C stack overflow ... can't go over 2M on most * systems if we're using (or any of our libs are using) threads. */ if( (char *) main_c_stack_base - (char *) &heap > 2000000 ) { error_top( _( "Overflow error." ) ); error_sub( _( "C stack overflow. Expression too complex." ) ); return( FALSE ); } switch( root->type ) { case ELEMENT_NODE: /* Need a tree copy. */ if( !copy_node( heap, &ri[0], (HeapNode *) root->ele, out ) ) return( FALSE ); break; case ELEMENT_SYMBOL: case ELEMENT_CHAR: case ELEMENT_BOOL: case ELEMENT_BINOP: case ELEMENT_SYMREF: case ELEMENT_COMPILEREF: case ELEMENT_CONSTRUCTOR: case ELEMENT_UNOP: case ELEMENT_COMB: case ELEMENT_TAG: case ELEMENT_ELIST: case ELEMENT_MANAGED: /* Copy value. */ PEPUTP( out, root->type, root->ele ); break; case ELEMENT_NOVAL: /* Not compiled yet: compile now, then copy. */ if( compile_object( compile ) ) return( FALSE ); if( !heap_copy( heap, compile, out ) ) return( FALSE ); break; default: g_assert( FALSE ); } return( TRUE ); } /* Try to make a gvalue from a heap object. */ gboolean heap_ip_to_gvalue( PElement *in, GValue *out ) { Reduce *rc = reduce_context; if( !reduce_pelement( rc, reduce_spine_strict, in ) ) return( FALSE ); if( PEISREAL( in ) ) { g_value_init( out, G_TYPE_DOUBLE ); g_value_set_double( out, PEGETREAL( in ) ); } else if( PEISBOOL( in ) ) { g_value_init( out, G_TYPE_BOOLEAN ); g_value_set_boolean( out, PEGETBOOL( in ) ); } else if( PEISCOMPLEX( in ) ) { printf( "ip_to_gvalue: no complex gtype!\n" ); return( FALSE ); } else if( PEISIMAGE( in ) ) { Imageinfo *ii = PEGETII( in ); VipsImage *im = imageinfo_get( FALSE, ii ); g_value_init( out, VIPS_TYPE_IMAGE ); g_value_set_object( out, im ); } else if( PEISLIST( in ) ) { gboolean result; if( heap_is_string( in, &result ) && result ) { char name[256]; if( !heap_get_string( in, name, 256 ) ) return( FALSE ); /* We want a refstring, not a G_TYPE_STRING, since * this GValue will (probably) be used by vips with * im_header_string() etc. */ g_value_init( out, IM_TYPE_REF_STRING ); im_ref_string_set( out, name ); } #if VIPS_MAJOR_VERSION > 7 || VIPS_MINOR_VERSION > 39 /* vips_value_set_array_*() is a 7.40 feature. */ else if( heap_is_imagevec( in, &result ) && result ) { Imageinfo *iivec[100]; VipsImage **ivec; int n; int i; if( (n = heap_get_imagevec( in, iivec, 100 )) < 0 ) return( FALSE ); g_value_init( out, VIPS_TYPE_ARRAY_IMAGE ); vips_value_set_array_image( out, n ); ivec = vips_value_get_array_image( out, NULL ); for( i = 0; i < n; i++ ) { ivec[i] = imageinfo_get( FALSE, iivec[i] ); /* g_value_unset() on out will unref every * array element, so we need to ref. */ g_object_ref( ivec[i] ); } } else if( heap_is_realvec( in, &result ) && result ) { double realvec[100]; int n; if( (n = heap_get_realvec( in, realvec, 100 )) < 0 ) return( FALSE ); g_value_init( out, VIPS_TYPE_ARRAY_DOUBLE ); vips_value_set_array_double( out, realvec, n ); } #endif else { error_top( _( "Unimplemented list type." ) ); return( FALSE ); } } else if( PEISMANAGED( in ) && IS_MANAGEDGOBJECT( PEGETVAL( in ) ) ) { g_value_init( out, G_TYPE_OBJECT ); g_value_set_object( out, MANAGEDGOBJECT( PEGETMANAGED( in ) )->object ); } else { char txt[100]; VipsBuf buf = VIPS_BUF_STATIC( txt ); error_top( _( "Unimplemented argument type." ) ); (void) itext_value( rc, &buf, in ); error_sub( _( "Cannot convert %s to GValue." ), vips_buf_all( &buf ) ); return( FALSE ); } return( TRUE ); } /* Try to make a heap object from a gvalue. */ gboolean heap_gvalue_to_ip( GValue *in, PElement *out ) { Reduce *rc = reduce_context; Heap *heap = rc->heap; if( G_VALUE_HOLDS_BOOLEAN( in ) ) { PEPUTP( out, ELEMENT_BOOL, (int) g_value_get_boolean( in ) ); } else if( G_VALUE_HOLDS_CHAR( in ) ) { /* g_value_get_schar() is not in older glibs. */ PEPUTP( out, ELEMENT_CHAR, (int) g_value_get_uchar( in ) ); } else if( G_VALUE_HOLDS_UCHAR( in ) ) { PEPUTP( out, ELEMENT_CHAR, (int) g_value_get_uchar( in ) ); } else if( G_VALUE_HOLDS_INT( in ) ) { if( !heap_real_new( heap, g_value_get_int( in ), out ) ) return( FALSE ); } else if( G_VALUE_HOLDS_UINT( in ) ) { if( !heap_real_new( heap, g_value_get_uint( in ), out ) ) return( FALSE ); } else if( G_VALUE_HOLDS_LONG( in ) ) { if( !heap_real_new( heap, g_value_get_long( in ), out ) ) return( FALSE ); } else if( G_VALUE_HOLDS_ULONG( in ) ) { if( !heap_real_new( heap, g_value_get_ulong( in ), out ) ) return( FALSE ); } else if( G_VALUE_HOLDS_INT64( in ) ) { if( !heap_real_new( heap, g_value_get_int64( in ), out ) ) return( FALSE ); } else if( G_VALUE_HOLDS_UINT64( in ) ) { if( !heap_real_new( heap, g_value_get_uint64( in ), out ) ) return( FALSE ); } else if( G_VALUE_HOLDS_FLOAT( in ) ) { if( !heap_real_new( heap, g_value_get_float( in ), out ) ) return( FALSE ); } else if( G_VALUE_HOLDS_DOUBLE( in ) ) { if( !heap_real_new( heap, g_value_get_double( in ), out ) ) return( FALSE ); } else if( G_VALUE_HOLDS_ENUM( in ) ) { if( !heap_real_new( heap, g_value_get_enum( in ), out ) ) return( FALSE ); } else if( G_VALUE_HOLDS_STRING( in ) ) { if( !heap_managedstring_new( heap, g_value_get_string( in ), out ) ) return( FALSE ); } else if( G_VALUE_HOLDS_OBJECT( in ) ) { GObject *object; Managed *managed; object = g_value_get_object( in ); if( VIPS_IS_IMAGE( object ) ) { VipsImage *image = VIPS_IMAGE( object ); g_object_ref( image ); managed = MANAGED( imageinfo_new( main_imageinfogroup, heap, image, image->filename ) ); } else managed = MANAGED( managedgobject_new( heap, object ) ); PEPUTP( out, ELEMENT_MANAGED, managed ); } else if( g_value_type_transformable( G_VALUE_TYPE( in ), G_TYPE_STRING ) ) { GValue temp = { 0 }; g_value_init( &temp, G_TYPE_STRING ); g_value_transform( in, &temp ); if( !heap_managedstring_new( heap, g_value_get_string( &temp ), out ) ) { return( FALSE ); g_value_unset( &temp ); } g_value_unset( &temp ); } else { error_top( _( "Unimplemented type." ) ); error_sub( _( "Unable to convert %s to a nip type." ), G_VALUE_TYPE_NAME( in ) ); return( FALSE ); } return( TRUE ); } /* Indent step. */ #define TAB (2) /* Fwd ref. */ static void lisp_pelement( VipsBuf *buf, PElement *base, GSList **back, gboolean fn, int indent ); /* Print a sym-value list. */ static void lisp_symval( VipsBuf *buf, PElement *base, GSList **back, gboolean fn, int indent, PElement *stop ) { gboolean error = FALSE; /* Reached the "stop" element? */ if( stop && *base->type == *stop->type && *base->ele == *stop->ele ) return; if( PEISNODE( base ) ) { HeapNode *hn = PEGETVAL( base ); PElement pe; if( hn->type != TAG_CONS ) error = TRUE; PEPOINTLEFT( hn, &pe ); if( !error && PEISNODE( &pe ) ) { HeapNode *hn2 = PEGETVAL( &pe ); if( hn2->type != TAG_CONS ) error = TRUE; PEPOINTLEFT( hn2, &pe ); if( !error && PEISSYMREF( &pe ) ) { vips_buf_appendf( buf, "\n%s", spc( indent ) ); symbol_qualified_name( PEGETSYMREF( &pe ), buf ); vips_buf_appendf( buf, " = " ); PEPOINTRIGHT( hn2, &pe ); lisp_pelement( buf, &pe, back, fn, indent + TAB ); PEPOINTRIGHT( hn, &pe ); lisp_symval( buf, &pe, back, fn, indent, stop ); } else error = TRUE; } else error = TRUE; } else if( !PEISELIST( base ) ) error = TRUE; if( error ) vips_buf_appendf( buf, "\n%s<*** malformed symval list>", spc( indent ) ); } /* Print a [*] ... our caller has printed the enclosing [ ] and the first * element, so we print a ", " followed by us. */ static void lisp_list( VipsBuf *buf, PElement *base, GSList **back, gboolean fn, int indent ) { if( PEISNODE( base ) ) { HeapNode *hn = PEGETVAL( base ); PElement pe; vips_buf_appends( buf, ", " ); if( hn->type == TAG_CONS ) { PEPOINTLEFT( hn, &pe ); lisp_pelement( buf, &pe, back, fn, indent ); PEPOINTRIGHT( hn, &pe ); lisp_list( buf, &pe, back, fn, indent ); } else lisp_pelement( buf, base, back, fn, indent ); } else if( PEISMANAGEDSTRING( base ) ) { vips_buf_appends( buf, ", Managedstring <" ); vips_buf_appends( buf, PEGETMANAGEDSTRING( base )->string ); vips_buf_appends( buf, ">" ); } else if( !PEISELIST( base ) ) lisp_pelement( buf, base, back, fn, indent ); } /* Print a [char] ... fall back to lisp_list() if we hit a non-char * element. base is the RHS of a cons, so it can be a managedstring too. */ static gboolean lisp_string( VipsBuf *buf, PElement *base, GSList **back, gboolean fn, int indent ) { gboolean error = FALSE; if( PEISNODE( base ) ) { HeapNode *hn = PEGETVAL( base ); PElement pe; if( hn->type != TAG_CONS ) error = TRUE; PEPOINTLEFT( hn, &pe ); if( !error ) { if( PEISCHAR( &pe ) ) { vips_buf_appendf( buf, "%c", PEGETCHAR( &pe ) ); PEPOINTRIGHT( hn, &pe ); (void) lisp_string( buf, &pe, back, fn, indent ); } else { vips_buf_appends( buf, "\":[" ); lisp_pelement( buf, &pe, back, fn, indent ); PEPOINTRIGHT( hn, &pe ); lisp_list( buf, &pe, back, fn, indent ); vips_buf_appends( buf, "]" ); error = TRUE; } } else error = TRUE; } else if( PEISMANAGEDSTRING( base ) ) vips_buf_appends( buf, PEGETMANAGEDSTRING( base )->string ); else if( !PEISELIST( base ) ) error = TRUE; return( error ); } /* Print a graph LISP-style. */ static void lisp_node( VipsBuf *buf, HeapNode *hn, GSList **back, gboolean fn, int indent ) { int i; PElement p1, p2; /* Have we printed this node before? */ if( hn->flgs & FLAG_PRINT ) { if( (i = g_slist_index( *back, hn )) == -1 ) { *back = g_slist_prepend( *back, hn ); vips_buf_appendf( buf, "<" ); vips_buf_appendf( buf, _( "circular" ) ); vips_buf_appendf( buf, " (%p)>", hn ); } else { vips_buf_appendf( buf, "<" ); vips_buf_appendf( buf, _( "circular to label %d" ), i ); vips_buf_appendf( buf, ">" ); } return; } hn->flgs |= FLAG_PRINT; if( (i = g_slist_index( *back, hn )) != -1 ) { vips_buf_appendf( buf, "*" ); vips_buf_appendf( buf, _( "label %d" ), i ); vips_buf_appendf( buf, ": " ); } switch( hn->type ) { case TAG_APPL: if( fn ) { PEPOINTLEFT( hn, &p1 ); PEPOINTRIGHT( hn, &p2 ); vips_buf_appends( buf, "(" ); lisp_pelement( buf, &p1, back, fn, indent ); vips_buf_appends( buf, " " ); lisp_pelement( buf, &p2, back, fn, indent ); vips_buf_appends( buf, ")" ); } else { vips_buf_appends( buf, "<" ); vips_buf_appends( buf, _( "unevaluated" ) ); vips_buf_appends( buf, ">" ); } break; case TAG_CONS: PEPOINTLEFT( hn, &p1 ); if( PEISCHAR( &p1 ) ) { vips_buf_appendf( buf, "\"%c", PEGETCHAR( &p1 ) ); PEPOINTRIGHT( hn, &p2 ); (void) lisp_string( buf, &p2, back, fn, indent ); vips_buf_appends( buf, "\"" ); } else { vips_buf_appends( buf, "[" ); lisp_pelement( buf, &p1, back, fn, indent ); PEPOINTRIGHT( hn, &p2 ); lisp_list( buf, &p2, back, fn, indent ); vips_buf_appends( buf, "]" ); } break; case TAG_DOUBLE: vips_buf_appendf( buf, "%g", hn->body.num ); break; case TAG_COMPLEX: vips_buf_appendf( buf, "(%g,%g)", GETLEFT( hn )->body.num, GETRIGHT( hn )->body.num ); break; case TAG_CLASS: if( fn ) { vips_buf_appendf( buf, "\n%s", spc( indent ) ); vips_buf_appendf( buf, _( "class (%p)" ), hn ); vips_buf_appendf( buf, " " ); } PEPOINTLEFT( hn, &p1 ); lisp_pelement( buf, &p1, back, fn, indent ); if( fn ) { hn = GETRIGHT( hn ); vips_buf_appendf( buf, "\n%s", spc( indent + TAB ) ); vips_buf_appendf( buf, _( "members" ) ); vips_buf_appendf( buf, " = { " ); PEPOINTRIGHT( hn, &p1 ); lisp_symval( buf, &p1, back, fn, indent + TAB * 2, NULL ); vips_buf_appendf( buf, "\n%s}", spc( indent + TAB ) ); PEPOINTLEFT( hn, &p2 ); if( *p1.type != *p2.type || *p1.ele != *p2.ele ) { vips_buf_appendf( buf, "\n%s", spc( indent + TAB ) ); vips_buf_appendf( buf, _( "secret" ) ); vips_buf_appendf( buf, " = { " ); lisp_symval( buf, &p2, back, fn, indent + TAB * 2, &p1 ); vips_buf_appendf( buf, "\n%s} ", spc( indent + TAB ) ); } } break; case TAG_GEN: vips_buf_appendf( buf, "[%g,%g...", GETLEFT( hn )->body.num, GETLEFT( GETRIGHT( hn ) )->body.num ); if( GETRT( GETRIGHT( hn ) ) == ELEMENT_ELIST ) vips_buf_appends( buf, "[ ]]" ); else vips_buf_appendf( buf, "%g]", GETRIGHT( GETRIGHT( hn ) )->body.num ); break; case TAG_SHARED: PEPOINTLEFT( hn, &p1 ); i = GPOINTER_TO_INT( GETRIGHT( hn ) ); vips_buf_appendf( buf, "SHARE%d[", i ); lisp_pelement( buf, &p1, back, fn, indent ); vips_buf_appends( buf, "]" ); break; case TAG_REFERENCE: i = GPOINTER_TO_INT( GETRIGHT( GETLEFT( hn ) ) ); vips_buf_appendf( buf, "REF%d", i ); break; case TAG_FREE: default: g_assert( FALSE ); } } /* Print a pelement LISP-style. */ static void lisp_pelement( VipsBuf *buf, PElement *base, GSList **back, gboolean fn, int indent ) { HeapNode *hn; EType type = PEGETTYPE( base ); switch( type ) { case ELEMENT_NOVAL: vips_buf_appends( buf, "<" ); vips_buf_appendf( buf, _( "no value (type %d)" ), GPOINTER_TO_INT( PEGETVAL( base ) ) ); vips_buf_appends( buf, ">" ); break; case ELEMENT_NODE: if( !(hn = PEGETVAL( base )) ) { vips_buf_appends( buf, "<" ); vips_buf_appends( buf, _( "NULL pointer" ) ); vips_buf_appends( buf, ">" ); } else lisp_node( buf, hn, back, fn, indent ); break; case ELEMENT_SYMBOL: vips_buf_appends( buf, "<" ); vips_buf_appends( buf, _( "symbol" ) ); vips_buf_appends( buf, " \"" ); symbol_qualified_name( PEGETSYMBOL( base ), buf ); vips_buf_appends( buf, "\">" ); break; case ELEMENT_CONSTRUCTOR: vips_buf_appends( buf, "<" ); vips_buf_appends( buf, _( "constructor" ) ); vips_buf_appends( buf, " \"" ); symbol_qualified_name( PEGETCOMPILE( base )->sym, buf ); vips_buf_appends( buf, "\">" ); break; case ELEMENT_SYMREF: vips_buf_appends( buf, "<" ); vips_buf_appends( buf, _( "symref" ) ); vips_buf_appends( buf, " \"" ); symbol_qualified_name( PEGETSYMBOL( base ), buf ); vips_buf_appends( buf, "\">" ); break; case ELEMENT_COMPILEREF: vips_buf_appends( buf, "<" ); vips_buf_appends( buf, _( "compileref" ) ); vips_buf_appends( buf, " \"" ); symbol_qualified_name( PEGETCOMPILE( base )->sym, buf ); vips_buf_appends( buf, "\">" ); break; case ELEMENT_CHAR: vips_buf_appendf( buf, "'%c'", (int) PEGETCHAR( base ) ); break; case ELEMENT_BOOL: vips_buf_appends( buf, bool_to_char( PEGETBOOL( base ) ) ); break; case ELEMENT_BINOP: vips_buf_appends( buf, decode_BinOp( PEGETBINOP( base ) ) ); break; case ELEMENT_UNOP: vips_buf_appends( buf, decode_UnOp( PEGETUNOP( base ) ) ); break; case ELEMENT_ELIST: vips_buf_appends( buf, "[ ]" ); break; case ELEMENT_TAG: vips_buf_appendf( buf, "<" ); vips_buf_appendf( buf, _( "tag \"%s\"" ), PEGETTAG( base ) ); vips_buf_appendf( buf, ">" ); break; case ELEMENT_MANAGED: vips_buf_appendf( buf, "", PEGETVAL( base ) ); break; case ELEMENT_COMB: vips_buf_appends( buf, decode_CombinatorType( PEGETCOMB( base ) ) ); break; default: vips_buf_appendf( buf, "<" ); vips_buf_appendf( buf, _( "unknown element tag %d" ), type ); vips_buf_appendf( buf, ">" ); break; } } /* Print a node to a buffer. If fn is true, trace into functions. */ void graph_node( Heap *heap, VipsBuf *buf, HeapNode *root, gboolean fn ) { GSList *back; char txt[4]; VipsBuf buf2 = VIPS_BUF_STATIC( txt ); /* May be called before heap is built. */ if( !heap ) return; back = NULL; heap_clear( heap, FLAG_PRINT ); lisp_node( &buf2, root, &back, fn, 0 ); heap_clear( heap, FLAG_PRINT ); lisp_node( buf, root, &back, fn, 0 ); IM_FREEF( g_slist_free, back ); } /* As above, but start from a pelement. */ void graph_pelement( Heap *heap, VipsBuf *buf, PElement *root, gboolean fn ) { GSList *back; char txt[4]; VipsBuf buf2 = VIPS_BUF_STATIC( txt ); /* May be called before heap is built. */ if( !heap ) return; /* We print twice ... the first time through we build the list of back * pointers so we can label the graph correctly. */ back = NULL; heap_clear( heap, FLAG_PRINT ); lisp_pelement( &buf2, root, &back, fn, 0 ); heap_clear( heap, FLAG_PRINT ); lisp_pelement( buf, root, &back, fn, 0 ); IM_FREEF( g_slist_free, back ); } /* As above, but start from an element. */ void graph_element( Heap *heap, VipsBuf *buf, Element *root, gboolean fn ) { PElement base; PEPOINTE( &base, root ); graph_pelement( heap, buf, &base, fn ); } void graph_pointer( PElement *root ) { char txt[1000]; VipsBuf buf = VIPS_BUF_STATIC( txt ); graph_pelement( reduce_context->heap, &buf, root, TRUE ); printf( "%s\n", vips_buf_all( &buf ) ); } /* Fwd ref. */ static void shell_pelement( PElement *base ); /* Print a graph shell-style. */ static void shell_node( HeapNode *hn ) { PElement p1, p2; /* Have we printed this node before? */ if( hn->flgs & FLAG_PRINT ) { printf( "<*circular*>" ); return; } hn->flgs |= FLAG_PRINT; switch( hn->type ) { case TAG_CLASS: case TAG_APPL: case TAG_REFERENCE: case TAG_SHARED: case TAG_GEN: break; case TAG_CONS: { gboolean string_mode; PEPOINTLEFT( hn, &p1 ); string_mode = PEISCHAR( &p1 ); for(;;) { if( string_mode ) printf( "%c", PEGETCHAR( &p1 ) ); else shell_pelement( &p1 ); PEPOINTRIGHT( hn, &p2 ); if( PEISMANAGEDSTRING( &p2 ) ) { printf( "%s\n", PEGETMANAGEDSTRING( &p2 )->string ); break; } else if( PEISELIST( &p2 ) ) break; if( !string_mode ) printf( "\n" ); hn = PEGETVAL( &p2 ); PEPOINTLEFT( hn, &p1 ); if( string_mode && !PEISCHAR( &p1 ) ) string_mode = FALSE; } } break; case TAG_DOUBLE: printf( "%g", hn->body.num ); break; case TAG_COMPLEX: printf( "%g %g", GETLEFT( hn )->body.num, GETRIGHT( hn )->body.num ); break; case TAG_FREE: default: g_assert( FALSE ); } } /* Print a pelement shell-style. */ static void shell_pelement( PElement *base ) { switch( PEGETTYPE( base ) ) { /* Only allow concrete base types. */ case ELEMENT_SYMREF: case ELEMENT_COMPILEREF: case ELEMENT_CONSTRUCTOR: case ELEMENT_BINOP: case ELEMENT_UNOP: case ELEMENT_COMB: case ELEMENT_TAG: case ELEMENT_SYMBOL: case ELEMENT_NOVAL: printf( "no-value" ); break; case ELEMENT_NODE: shell_node( PEGETVAL( base ) ); break; case ELEMENT_CHAR: printf( "%c", (int)PEGETCHAR( base ) ); break; case ELEMENT_BOOL: printf( "%s", bool_to_char( PEGETBOOL( base ) ) ); break; case ELEMENT_ELIST: printf( "[ ]" ); break; case ELEMENT_MANAGED: if( PEISIMAGE( base ) ) printf( "%s", PEGETIMAGE( base )->filename ); else if( PEISMANAGEDSTRING( base ) ) printf( "%s", PEGETMANAGEDSTRING( base )->string ); break; default: g_assert( FALSE ); } } /* Print a pelement shell-style. */ void graph_value( PElement *root ) { Reduce *rc = reduce_context; if( !reduce_pelement( rc, reduce_spine_strict, root ) ) { iwindow_alert( NULL, GTK_MESSAGE_ERROR ); return; } heap_clear( reduce_context->heap, FLAG_PRINT ); shell_pelement( root ); printf( "\n" ); } nip2-8.7.0/src/nipmarshal.h0000644000175000017500000000260413224651032012415 00000000000000 #ifndef __nip_MARSHAL_H__ #define __nip_MARSHAL_H__ #include G_BEGIN_DECLS /* VOID:OBJECT,INT (nipmarshal.list:25) */ extern void nip_VOID__OBJECT_INT (GClosure *closure, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer invocation_hint, gpointer marshal_data); /* VOID:DOUBLE,DOUBLE (nipmarshal.list:26) */ extern void nip_VOID__DOUBLE_DOUBLE (GClosure *closure, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer invocation_hint, gpointer marshal_data); /* BOOLEAN:INT,INT (nipmarshal.list:27) */ extern void nip_BOOLEAN__INT_INT (GClosure *closure, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer invocation_hint, gpointer marshal_data); G_END_DECLS #endif /* __nip_MARSHAL_H__ */ nip2-8.7.0/src/mainw.h0000644000175000017500000000777513224651032011410 00000000000000/* A top level window holding some workspaces */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_MAINW (mainw_get_type()) #define MAINW( obj ) (GTK_CHECK_CAST( (obj), TYPE_MAINW, Mainw )) #define MAINW_CLASS( klass ) \ (GTK_CHECK_CLASS_CAST( (klass), TYPE_MAINW, MainwClass )) #define IS_MAINW( obj ) (GTK_CHECK_TYPE( (obj), TYPE_MAINW )) #define IS_MAINW_CLASS( klass ) \ (GTK_CHECK_CLASS_TYPE( (klass), TYPE_MAINW )) /* Get a widget's enclosing Mainw. */ #define GET_MAINW( W ) \ MAINW( idialog_get_root( GTK_WIDGET( W ) ) ) struct _Mainw { iWindow parent_object; /* Our model. */ Workspacegroup *wsg; guint changed_sid; guint destroy_sid; /* Watch for changed on heap and image, and prefs. Use to update * status bar and space free. */ guint imageinfo_changed_sid; guint heap_changed_sid; guint watch_changed_sid; /* Link to progress system. */ guint begin_sid; guint update_sid; guint end_sid; gboolean cancel; /* Batch refresh with this, it's slow. */ guint refresh_timeout; /* Display MB free in tmp, or cells free in heap. */ gboolean free_type; /* View menu show/hide toggle states. The pane states are in the ws as * we need to save them to the ws file. */ gboolean toolbar_visible; gboolean statusbar_visible; /* The kitg the toolkit menu is currently displaying. Use this to * avoid rebuilding the toolkit menu on every tab switch. */ Toolkitgroup *kitg; /* Component widgets. */ Toolkitgroupview *kitgview; GtkWidget *toolbar; GtkWidget *recent_menu; GtkWidget *jump_to_column_menu; GtkWidget *toolkit_menu; Workspacegroupview *wsgview; GtkWidget *statusbar_main; GtkWidget *statusbar; GtkWidget *space_free; GtkWidget *space_free_eb; GtkWidget *progress_box; GtkWidget *progress; }; typedef struct _MainwClass { iWindowClass parent_class; /* My methods. */ } MainwClass; extern GSList *mainw_recent_workspace; extern GSList *mainw_recent_image; extern GSList *mainw_recent_matrix; extern gboolean mainw_auto_recalc; extern gboolean mainw_cancel; void mainw_startup( void ); void mainw_shutdown( void ); void mainw_recent_freeze( void ); void mainw_recent_thaw( void ); void mainw_recent_add( GSList **recent, const char *filename ); Mainw *mainw_pick_one( void ); GType mainw_get_type( void ); void mainw_find_disc( VipsBuf *buf ); void mainw_find_heap( VipsBuf *buf, Heap *heap ); Workspace *mainw_get_workspace( Mainw *mainw ); void mainw_homepage_action_cb( GtkAction *action, iWindow *iwnd ); void mainw_about_action_cb( GtkAction *action, iWindow *iwnd ); void mainw_guide_action_cb( GtkAction *action, iWindow *iwnd ); void mainw_column_new_action_cb( GtkAction *action, Mainw *mainw ); void mainw_workspace_merge( Mainw *mainw ); void mainw_workspace_merge_action_cb( GtkAction *action, Mainw *mainw ); void mainw_layout_action_cb( GtkAction *action, Mainw *mainw ); void mainw_group_action_cb( GtkAction *action, Mainw *mainw ); void mainw_next_error_action_cb( GtkAction *action, Mainw *mainw ); void mainw_open_action_cb( GtkAction *action, Mainw *mainw ); Workspacegroup *mainw_open_workspace( Workspaceroot *wsr, const char *filename ); Mainw *mainw_new( Workspacegroup *wsg ); void mainw_cull( void ); void mainw_layout( void ); nip2-8.7.0/src/managedgvalue.h0000644000175000017500000000344513224651032013063 00000000000000/* a managed gvalue */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_MANAGEDGVALUE (managedgvalue_get_type()) #define MANAGEDGVALUE( obj ) \ (G_TYPE_CHECK_INSTANCE_CAST( (obj), TYPE_MANAGEDGVALUE, Managedgvalue )) #define MANAGEDGVALUE_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_CAST( (klass), \ TYPE_MANAGEDGVALUE, ManagedgvalueClass)) #define IS_MANAGEDGVALUE( obj ) \ (G_TYPE_CHECK_INSTANCE_TYPE( (obj), TYPE_MANAGEDGVALUE )) #define IS_MANAGEDGVALUE_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_TYPE( (klass), TYPE_MANAGEDGVALUE )) #define MANAGEDGVALUE_GET_CLASS( obj ) \ (G_TYPE_INSTANCE_GET_CLASS( (obj), \ TYPE_MANAGEDGVALUE, ManagedgvalueClass )) struct _Managedgvalue { Managed parent_object; GValue value; }; typedef struct _ManagedgvalueClass { ManagedClass parent_class; } ManagedgvalueClass; GType managedgvalue_get_type( void ); void managedgvalue_set_value( Managedgvalue *managedgvalue, GValue *value ); Managedgvalue *managedgvalue_new( Heap *heap, GValue *value ); nip2-8.7.0/src/rowview.h0000644000175000017500000000423113224651032011757 00000000000000/* a rowview in a workspace ... part of a tallycolumn, not a separate widget */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_ROWVIEW (rowview_get_type()) #define ROWVIEW( obj ) \ (GTK_CHECK_CAST( (obj), TYPE_ROWVIEW, Rowview )) #define ROWVIEW_CLASS( klass ) \ (GTK_CHECK_CLASS_CAST( (klass), TYPE_ROWVIEW, RowviewClass )) #define IS_ROWVIEW( obj ) (GTK_CHECK_TYPE( (obj), TYPE_ROWVIEW )) #define IS_ROWVIEW_CLASS( klass ) \ (GTK_CHECK_CLASS_TYPE( (klass), TYPE_ROWVIEW )) struct _Rowview { View view; Subcolumnview *sview; /* Enclosing subcolumnview */ Rhsview *rhsview; /* Our rhs */ gboolean visible; /* Currently visible */ int rnum; /* Row of tallycolumn we are in */ GtkWidget *spin; /* Class display open/close widgets */ GtkWidget *but; /* Name button */ GtkWidget *led; /* Indicators */ GtkWidget *label; /* Name label */ char *last_tooltip; /* Last tooltip we set */ }; typedef struct _RowviewClass { ViewClass parent_class; /* My methods. */ } RowviewClass; guint rowview_menu_attach( Rowview *rview, GtkWidget *widget ); GtkType rowview_get_type( void ); View *rowview_new( void ); void rowview_get_position( Rowview *rview, int *x, int *y, int *w, int *h ); void rowview_set_visible( Rowview *rview, gboolean visible ); gboolean rowview_get_visible( Rowview *rview ); nip2-8.7.0/src/spin.c0000644000175000017500000001376413224651032011234 00000000000000/* a pair of spin buttons, with no entry ... don't actually use buttons, * since we may have lots and lots of these, and we don't want to make an X * window for each one * * we do the event handling ourselves ... our enclosing view passes the ev * to spin_event(), this triggers signals as required */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #include "ip.h" static ViewClass *parent_class = NULL; /* Our signals. Up and down click. */ enum { UP_CLICK, DOWN_CLICK, LAST_SIGNAL }; static guint spin_signals[LAST_SIGNAL] = { 0 }; /* Default up and down signal handlers. */ static void spin_real_up_click( Spin *spin ) { #ifdef DEBUG printf( "spin_real_up_click\n" ); #endif /*DEBUG*/ } static void spin_real_down_click( Spin *spin ) { #ifdef DEBUG printf( "spin_real_down_click\n" ); #endif /*DEBUG*/ } static void spin_class_init( SpinClass *class ) { GObjectClass *gobject_class = (GObjectClass *) class; parent_class = g_type_class_peek_parent( class ); /* Create signals. */ spin_signals[UP_CLICK] = g_signal_new( "up_click", G_OBJECT_CLASS_TYPE( gobject_class ), G_SIGNAL_RUN_FIRST, G_STRUCT_OFFSET( SpinClass, up_click ), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0 ); spin_signals[DOWN_CLICK] = g_signal_new( "down_click", G_OBJECT_CLASS_TYPE( gobject_class ), G_SIGNAL_RUN_FIRST, G_STRUCT_OFFSET( SpinClass, down_click ), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0 ); class->up_click = spin_real_up_click; class->down_click = spin_real_down_click; } typedef struct { Spin *spin; int x, y; /* Click position */ gboolean handled; } SpinEvent; static void allocation2rect( GtkAllocation *from, Rect *to ) { to->left = from->x; to->top = from->y; to->width = from->width; to->height = from->height; } static void spin_button_press_event_test( GtkWidget *widget, gpointer data ) { SpinEvent *sev = (SpinEvent *) data; Rect pos; if( sev->handled ) return; allocation2rect( &widget->allocation, &pos ); if( im_rect_includespoint( &pos, sev->x, sev->y ) ) { if( GTK_IS_ARROW( widget ) ) { sev->handled = TRUE; if( GTK_ARROW( widget )->arrow_type == GTK_ARROW_UP ) g_signal_emit( GTK_OBJECT( sev->spin ), spin_signals[UP_CLICK], 0 ); else g_signal_emit( GTK_OBJECT( sev->spin ), spin_signals[DOWN_CLICK], 0 ); } } } /* Event in us somewhere. */ static gboolean spin_button_press_event_cb( GtkWidget *widget, GdkEventButton *event, Spin *spin ) { gboolean handled = FALSE; if( event->type == GDK_BUTTON_PRESS ) { SpinEvent sev; if( event->button == 1 ) { sev.spin = spin; /* Find button x/y relative to top LH corner of spin. */ sev.x = event->x + GTK_WIDGET( spin )->allocation.x; sev.y = event->y + GTK_WIDGET( spin )->allocation.y; sev.handled = FALSE; spin_button_press_event_test( spin->up, &sev ); spin_button_press_event_test( spin->down, &sev ); handled = sev.handled; } } return( handled ); } static gboolean spin_button_enter_notify_event_cb( GtkWidget *widget, GdkEventCrossing *event, Spin *spin ) { gboolean handled = FALSE; if( event->detail != GDK_NOTIFY_INFERIOR ) gtk_widget_set_state( widget, GTK_STATE_PRELIGHT ); return( handled ); } static gboolean spin_button_leave_notify_event_cb( GtkWidget *widget, GdkEventCrossing *event, Spin *spin ) { gboolean handled = FALSE; if( event->detail != GDK_NOTIFY_INFERIOR ) gtk_widget_set_state( widget, GTK_STATE_NORMAL ); return( handled ); } static void spin_init( Spin *spin ) { GtkWidget *ebox; GtkWidget *vbox; ebox = gtk_event_box_new(); set_tooltip( ebox, _( "Expand or collapse row" ) ); gtk_event_box_set_visible_window( GTK_EVENT_BOX( ebox ), FALSE ); gtk_signal_connect( GTK_OBJECT( ebox ), "button_press_event", GTK_SIGNAL_FUNC( spin_button_press_event_cb ), spin ); gtk_signal_connect( GTK_OBJECT( ebox ), "enter_notify_event", GTK_SIGNAL_FUNC( spin_button_enter_notify_event_cb ), spin ); gtk_signal_connect( GTK_OBJECT( ebox ), "leave_notify_event", GTK_SIGNAL_FUNC( spin_button_leave_notify_event_cb ), spin ); gtk_box_pack_start( GTK_BOX( spin ), ebox, FALSE, FALSE, 0 ); gtk_widget_show( ebox ); vbox = gtk_vbox_new( 0, FALSE ); gtk_container_add( GTK_CONTAINER( ebox ), vbox ); gtk_widget_show( vbox ); spin->up = gtk_arrow_new( GTK_ARROW_UP, GTK_SHADOW_OUT ); spin->down = gtk_arrow_new( GTK_ARROW_DOWN, GTK_SHADOW_OUT ); gtk_box_pack_start( GTK_BOX( vbox ), spin->up, FALSE, FALSE, 0 ); gtk_box_pack_end( GTK_BOX( vbox ), spin->down, FALSE, FALSE, 0 ); gtk_widget_show( spin->up ); gtk_widget_show( spin->down ); } GtkType spin_get_type( void ) { static GtkType type = 0; if( !type ) { static const GtkTypeInfo info = { "Spin", sizeof( Spin ), sizeof( SpinClass ), (GtkClassInitFunc) spin_class_init, (GtkObjectInitFunc) spin_init, /* reserved_1 */ NULL, /* reserved_2 */ NULL, (GtkClassInitFunc) NULL, }; type = gtk_type_unique( TYPE_VIEW, &info ); } return( type ); } GtkWidget * spin_new( void ) { Spin *spin = (Spin *) gtk_type_new( TYPE_SPIN ); return( GTK_WIDGET( spin ) ); } nip2-8.7.0/src/toggle.c0000644000175000017500000000501113224651032011526 00000000000000/* a toggle button ... put/get methods */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #include "ip.h" /* #define DEBUG */ static ClassmodelClass *parent_class = NULL; static View * toggle_view_new( Model *model, View *parent ) { return( toggleview_new() ); } /* Members of toggle we automate. */ static ClassmodelMember toggle_members[] = { { CLASSMODEL_MEMBER_STRING, NULL, 0, MEMBER_CAPTION, "caption", N_( "Caption" ), G_STRUCT_OFFSET( iObject, caption ) }, { CLASSMODEL_MEMBER_BOOLEAN, NULL, 0, MEMBER_VALUE, "value", N_( "Value" ), G_STRUCT_OFFSET( Toggle, value ) } }; static void toggle_class_init( ToggleClass *class ) { ModelClass *model_class = (ModelClass *) class; ClassmodelClass *classmodel_class = (ClassmodelClass *) class; parent_class = g_type_class_peek_parent( class ); /* Create signals. */ /* Init methods. */ model_class->view_new = toggle_view_new; /* Static init. */ model_register_loadable( MODEL_CLASS( class ) ); classmodel_class->members = toggle_members; classmodel_class->n_members = IM_NUMBER( toggle_members ); } static void toggle_init( Toggle *toggle ) { toggle->value = FALSE; iobject_set( IOBJECT( toggle ), CLASS_TOGGLE, NULL ); } GType toggle_get_type( void ) { static GType type = 0; if( !type ) { static const GTypeInfo info = { sizeof( ToggleClass ), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) toggle_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof( Toggle ), 32, /* n_preallocs */ (GInstanceInitFunc) toggle_init, }; type = g_type_register_static( TYPE_CLASSMODEL, "Toggle", &info, 0 ); } return( type ); } nip2-8.7.0/src/vobject.h0000644000175000017500000000443413224651032011716 00000000000000/* abstract base class for a view ... watch an iobject and call _refresh in * idle if it changes. */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_VOBJECT (vobject_get_type()) #define VOBJECT( obj ) (GTK_CHECK_CAST( (obj), TYPE_VOBJECT, vObject )) #define VOBJECT_CLASS( klass ) \ (GTK_CHECK_CLASS_CAST( (klass), TYPE_VOBJECT, vObjectClass )) #define IS_VOBJECT( obj ) (GTK_CHECK_TYPE( (obj), TYPE_VOBJECT )) #define IS_VOBJECT_CLASS( klass ) \ (GTK_CHECK_CLASS_TYPE( (klass), TYPE_VOBJECT )) #define VOBJECT_GET_CLASS( obj ) \ (GTK_CHECK_GET_CLASS( (obj), TYPE_VOBJECT, vObjectClass )) struct _vObject { GtkVBox vbox; /* My instance vars. */ iObject *iobject; /* iObject we are watching */ guint changed_sid; /* Signals we use to watch model */ guint destroy_sid; gboolean dirty; /* In need of refreshment */ }; typedef struct _vObjectClass { GtkVBoxClass parent_class; /* State change refresh refresh widgets (don't look at heap value, look at model) link this vobject has been linked to an iobject we also have View::link() -- vObject::link is a lower-level link which is handy for views which are not Views, eg. toolkitbrowser */ void (*refresh)( vObject * ); void (*link)( vObject *, iObject * ); } vObjectClass; void *vobject_refresh_queue( vObject *vobject ); GtkType vobject_get_type( void ); void vobject_base_init( void ); void vobject_link( vObject *vobject, iObject *iobject ); void *vobject_refresh( vObject *vobject ); nip2-8.7.0/src/imageview.h0000644000175000017500000000354713224651032012243 00000000000000/* Decls for imageview.c ... display an image in a window. */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_IMAGEVIEW (imageview_get_type()) #define IMAGEVIEW( obj ) (GTK_CHECK_CAST( (obj), TYPE_IMAGEVIEW, Imageview )) #define IMAGEVIEW_CLASS( klass ) \ (GTK_CHECK_CLASS_CAST( (klass), TYPE_IMAGEVIEW, ImageviewClass )) #define IS_IMAGEVIEW( obj ) (GTK_CHECK_TYPE( (obj), TYPE_IMAGEVIEW )) #define IS_IMAGEVIEW_CLASS( klass ) \ (GTK_CHECK_CLASS_TYPE( (klass), TYPE_IMAGEVIEW )) typedef struct _Imageview { Floatwindow parent_class; /* Model stuff here. */ Imagemodel *imagemodel; guint imagemodel_changed_sid; Imagepresent *ip; Conversionview *cv; Statusview *sv; Paintboxview *pbv; } Imageview; typedef struct _ImageviewClass { FloatwindowClass parent_class; /* My methods. */ } ImageviewClass; GtkType imageview_get_type( void ); void imageview_set_paint( Imageview *iv, gboolean paint ); Imageview *imageview_new( iImage *iimage, GtkWidget *parent ); Imageview *imageview_new_area( iImage *iimage, Rect *area, GtkWidget *parent ); nip2-8.7.0/src/colourdisplay.c0000644000175000017500000002074213224651032013146 00000000000000/* run the display for an image in a workspace */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #include "ip.h" /* Tag our drag-n-drops with these. */ enum { TARGET_COLOUR, TARGET_TEXT }; static ImagedisplayClass *parent_class = NULL; /* Prefer x-color drags for 3 band non-complex imageinfos, and for LABQ */ static void colourdisplay_set_drag_type( Colourdisplay *colourdisplay ) { static const GtkTargetEntry text_targets[] = { { "text/plain", 0, TARGET_TEXT }, { "application/x-color", 0, TARGET_COLOUR } }; static const GtkTargetEntry colour_targets[] = { { "application/x-color", 0, TARGET_COLOUR }, { "text/plain", 0, TARGET_TEXT } }; Imageinfo *imageinfo = IMAGEDISPLAY( colourdisplay )->conv->ii; IMAGE *im = imageinfo_get( FALSE, imageinfo ); const GtkTargetEntry *targets; if( !GTK_WIDGET_REALIZED( GTK_WIDGET( colourdisplay ) ) || !im ) return; if( im->Bands == 3 && !vips_bandfmt_iscomplex( im->BandFmt ) ) targets = colour_targets; else if( im->Coding == IM_CODING_LABQ ) targets = colour_targets; else targets = text_targets; gtk_drag_dest_unset( GTK_WIDGET( colourdisplay ) ); gtk_drag_dest_set( GTK_WIDGET( colourdisplay ), GTK_DEST_DEFAULT_HIGHLIGHT | GTK_DEST_DEFAULT_MOTION | GTK_DEST_DEFAULT_DROP, targets, IM_NUMBER( text_targets ), GDK_ACTION_COPY ); gtk_drag_source_unset( GTK_WIDGET( colourdisplay ) ); gtk_drag_source_set( GTK_WIDGET( colourdisplay ), GDK_BUTTON1_MASK | GDK_BUTTON3_MASK, targets, IM_NUMBER( text_targets ), GDK_ACTION_COPY | GDK_ACTION_MOVE ); } static void colourdisplay_realize( GtkWidget *widget ) { Colourdisplay *colourdisplay = COLOURDISPLAY( widget ); GTK_WIDGET_CLASS( parent_class )->realize( widget ); colourdisplay_set_drag_type( colourdisplay ); } static void colourdisplay_drag_begin( GtkWidget *widget, GdkDragContext *context ) { Colourdisplay *colourdisplay = COLOURDISPLAY( widget ); GtkWidget *window; double colours[4]; GdkColor bg; window = iimageview_drag_window_new( 48, 32 ); gtk_object_set_data_full( GTK_OBJECT( widget ), "nip2-drag-window", window, (GtkDestroyNotify) gtk_widget_destroy ); #ifdef DEBUG printf( "colourdisplay_drag_begin: generating drag swatch colour\n" ); #endif /*DEBUG*/ imageinfo_to_rgb( IMAGEDISPLAY( colourdisplay )->conv->ii, colours ); bg.red = 0xffff * colours[0]; bg.green = 0xffff * colours[1]; bg.blue = 0xffff * colours[2]; gtk_widget_modify_bg( window, GTK_STATE_NORMAL, &bg ); gtk_drag_set_icon_widget( context, window, -2, -2 ); } static void colourdisplay_drag_end( GtkWidget *widget, GdkDragContext *context ) { gtk_object_set_data( GTK_OBJECT( widget ), "nip2-drag-window", NULL ); } static void colourdisplay_drag_data_get( GtkWidget *widget, GdkDragContext *context, GtkSelectionData *selection_data, guint info, guint time ) { Colourdisplay *colourdisplay = COLOURDISPLAY( widget ); Imageinfo *imageinfo = IMAGEDISPLAY( colourdisplay )->conv->ii; double colours[3]; guint16 vals[4]; char vips_buf_text[256]; VipsBuf buf = VIPS_BUF_STATIC( vips_buf_text ); switch( info ) { case TARGET_COLOUR: imageinfo_to_rgb( imageinfo, colours ); vals[0] = IM_RINT( colours[0] * 0xffff ); vals[1] = IM_RINT( colours[1] * 0xffff ); vals[2] = IM_RINT( colours[2] * 0xffff ); vals[3] = 0xffff; gtk_selection_data_set( selection_data, gdk_atom_intern( "application/x-color", FALSE ), 16, (guchar *) vals, 8 ); #ifdef DEBUG printf( "colourdisplay_drag_data_get: sending x-color\n" ); #endif /*DEBUG*/ break; case TARGET_TEXT: imageinfo_to_text( imageinfo, &buf ); gtk_selection_data_set( selection_data, gdk_atom_intern( "text/plain", FALSE ), 8, (guchar *) vips_buf_all( &buf ), strlen( vips_buf_all( &buf ) ) ); #ifdef DEBUG printf( "colourdisplay_drag_data_get: sending text/plain\n" ); #endif /*DEBUG*/ break; default: g_assert( FALSE ); break; } } static void colourdisplay_drag_data_received( GtkWidget *widget, GdkDragContext *context, gint x, gint y, GtkSelectionData *selection_data, guint info, guint time ) { Colourdisplay *colourdisplay = COLOURDISPLAY( widget ); Imageinfo *imageinfo = IMAGEDISPLAY( colourdisplay )->conv->ii; guint16 *vals; gdouble old_rgb[4]; gdouble rgb[4]; if( selection_data->length < 0 ) return; switch( info ) { case TARGET_COLOUR: if( selection_data->format != 16 || selection_data->length != 8 ) return; #ifdef DEBUG printf( "colourdisplay_drag_data_received: seen x-color\n" ); #endif /*DEBUG*/ vals = (guint16 *)selection_data->data; rgb[0] = (double) vals[0] / 0xffff; rgb[1] = (double) vals[1] / 0xffff; rgb[2] = (double) vals[2] / 0xffff; /* Dragging as RGB can't express small differences. So only * accept the new value if it's sufficiently different from * what we have now. */ imageinfo_to_rgb( imageinfo, old_rgb ); if( fabs( rgb[0] - old_rgb[0] ) > (0.5 / 255) || fabs( rgb[1] - old_rgb[1] ) > (0.5 / 255) || fabs( rgb[2] - old_rgb[2] ) > (0.5 / 255) ) imageinfo_from_rgb( imageinfo, rgb ); break; case TARGET_TEXT: if( selection_data->format != 8 ) return; #ifdef DEBUG printf( "colourdisplay_drag_data_received: seen text/plain\n" ); #endif /*DEBUG*/ if( !imageinfo_from_text( imageinfo, (char *) selection_data->data ) ) iwindow_alert( widget, GTK_MESSAGE_ERROR ); break; default: g_assert( FALSE ); break; } } static void colourdisplay_generate_tooltip( Colourdisplay *colourdisplay, VipsBuf *buf ) { Imagedisplay *id = IMAGEDISPLAY( colourdisplay ); if( id->conv && id->conv->ii ) { imageinfo_to_text( id->conv->ii, buf ); vips_buf_appends( buf, "\n" ); vips_buf_appends( buf, _( "Double-click to edit this color, or " "drag-and-drop between colors" ) ); } } static void colourdisplay_conversion_changed( Imagedisplay *id ) { Colourdisplay *colourdisplay = COLOURDISPLAY( id ); IMAGEDISPLAY_CLASS( parent_class )->conversion_changed( id ); if( id->conv ) conversion_set_mag( id->conv, 5000 ); colourdisplay_set_drag_type( colourdisplay ); } static void colourdisplay_class_init( ColourdisplayClass *class ) { GtkWidgetClass *widget_class = (GtkWidgetClass *) class; ImagedisplayClass *imagedisplay_class = (ImagedisplayClass *) class; parent_class = g_type_class_peek_parent( class ); widget_class->realize = colourdisplay_realize; widget_class->drag_begin = colourdisplay_drag_begin; widget_class->drag_end = colourdisplay_drag_end; widget_class->drag_data_get = colourdisplay_drag_data_get; widget_class->drag_data_received = colourdisplay_drag_data_received; imagedisplay_class->conversion_changed = colourdisplay_conversion_changed; } static void colourdisplay_init( Colourdisplay *colourdisplay ) { #ifdef DEBUG printf( "colourdisplay_init\n" ); #endif /*DEBUG*/ /* Who wants to focus one of these :/ */ GTK_WIDGET_UNSET_FLAGS( GTK_WIDGET( colourdisplay ), GTK_CAN_FOCUS ); set_tooltip_generate( GTK_WIDGET( colourdisplay ), (TooltipGenerateFn) colourdisplay_generate_tooltip, NULL, NULL ); } GtkType colourdisplay_get_type( void ) { static GtkType type = 0; if( !type ) { static const GtkTypeInfo info = { "Colourdisplay", sizeof( Colourdisplay ), sizeof( ColourdisplayClass ), (GtkClassInitFunc) colourdisplay_class_init, (GtkObjectInitFunc) colourdisplay_init, /* reserved_1 */ NULL, /* reserved_2 */ NULL, (GtkClassInitFunc) NULL, }; type = gtk_type_unique( TYPE_IMAGEDISPLAY, &info ); } return( type ); } Colourdisplay * colourdisplay_new( Conversion *conv ) { Colourdisplay *colourdisplay = gtk_type_new( TYPE_COLOURDISPLAY ); if( !conv ) conv = conversion_new( NULL ); conversion_set_synchronous( conv, TRUE ); imagedisplay_set_conversion( IMAGEDISPLAY( colourdisplay ), conv ); return( colourdisplay ); } nip2-8.7.0/src/tree.h0000644000175000017500000001321113224651032011212 00000000000000/* Declarations for the tree builder. */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* The kinds of nodes we can have in a parse tree. */ typedef enum { NODE_NONE, /* Empty */ NODE_APPLY, /* A function application */ NODE_BINOP, /* A binary operator */ NODE_UOP, /* A unary operator */ NODE_LEAF, /* A leaf .. a symbol of some sort */ NODE_CLASS, /* A class */ NODE_TAG, /* A tag .. rhs of '.' */ NODE_CONST, /* A constant */ NODE_GENERATOR, /* A list generator */ NODE_COMPOSE, /* Function composition */ NODE_SUPER, /* Superclass constructor */ NODE_PATTERN_CLASS, /* A class pattern match */ NODE_LISTCONST /* A list expression "[1, 2, 3]" */ } NodeTypes; /* Binary operators. Order important! Keep changes in step with operator_table[] in action.c */ typedef enum { BI_NONE = 0, /* Nothing */ BI_ADD, /* Addition and subtraction */ BI_SUB, BI_REM, /* Remainder after division */ BI_POW, /* Raise to power */ BI_SELECT, /* Select a channel/subscript */ BI_LSHIFT, /* Shift left */ BI_RSHIFT, /* Shift right */ BI_DIV, /* Divide by a constant */ BI_JOIN, /* Join of two objects */ BI_DOT, /* Projection operator */ BI_COMMA, /* Form complex number */ BI_MUL, /* Mult by a constant */ BI_LAND, /* Logical and */ BI_LOR, /* Logical or */ BI_BAND, /* Bitwise and */ BI_BOR, /* Bitwise or */ BI_EOR, /* Either - or */ BI_EQ, /* Equality */ BI_NOTEQ, BI_PEQ, /* Pointer equality */ BI_PNOTEQ, BI_LESS, /* Relational ops */ BI_LESSEQ, BI_MORE, BI_MOREEQ, BI_IF, /* if-then-else */ BI_CONS /* List cons ... has to be last, see below */ } BinOp; /* Unary operators. Order important! Keep changes in step with operator_table[] in action.c */ typedef enum { UN_NONE = BI_CONS + 1, /* Nothing */ UN_CSCHAR, /* Convert to signed char */ UN_CUCHAR, /* Convert to unsigned char */ UN_CSSHORT, /* Convert to signed short */ UN_CUSHORT, /* Convert to unsigned short */ UN_CSINT, /* Convert to signed int */ UN_CUINT, /* Convert to unsigned int */ UN_CFLOAT, /* Convert to signed float */ UN_CDOUBLE, /* Convert to signed double */ UN_CCOMPLEX, /* Convert to complex */ UN_CDCOMPLEX, /* Convert to double complex */ UN_MINUS, /* Unary minus */ UN_NEG, /* Logical negation, "!" */ UN_COMPLEMENT, /* 1s complement, "~" */ UN_PLUS, /* Unary plus */ UN_LAST /* Sanity check with this */ } UnOp; /* The sorts of constants we can have in expressions. */ typedef enum { PARSE_CONST_NONE, PARSE_CONST_STR, PARSE_CONST_BOOL, PARSE_CONST_NUM, PARSE_CONST_COMPLEX, /* Eg. 12j == (0, 12) */ PARSE_CONST_CHAR, PARSE_CONST_ELIST /* Empty list [] */ } ParseConstTypes; /* Constants in expressions. */ struct _ParseConst { ParseConstTypes type; union { double num; char *str; gboolean bool; int ch; } val; }; /* A parse tree node. */ struct _ParseNode { /* Compiled in here. */ Compile *compile; NodeTypes type; /* Bundle for node types with up to two arguments. */ BinOp biop; UnOp uop; ParseNode *arg1; ParseNode *arg2; /* Just for generators, eg. [a, b .. c] */ ParseNode *arg3; /* A symbol reference. */ Symbol *leaf; /* A class. */ Compile *klass; /* Expression list ... super constructor plus args, or list constant. */ GSList *elist; /* A tag. */ char *tag; /* A constant. */ ParseConst con; }; void tree_const_destroy( ParseConst *pc ); ParseNode *tree_binop_new( Compile *compile, BinOp op, ParseNode *l, ParseNode *r ); ParseNode *tree_generator_new( Compile *compile, ParseNode *s, ParseNode *i, ParseNode *f ); ParseNode *tree_lconst_new( Compile *compile, ParseNode *s ); ParseNode *tree_lconst_extend( Compile *compile, ParseNode *s, ParseNode *n ); ParseNode *tree_super_new( Compile *compile ); ParseNode *tree_super_extend( Compile *compile, ParseNode *base, ParseNode *n ); ParseNode *tree_ifelse_new( Compile *compile, ParseNode *c, ParseNode *t, ParseNode *e ); ParseNode *tree_appl_new( Compile *compile, ParseNode *l, ParseNode *r ); ParseNode *tree_tag_new( Compile *compile, const char *r ); ParseNode *tree_unop_new( Compile *compile, UnOp op, ParseNode *a ); ParseNode *tree_leaf_new( Compile *compile, const char *name ); ParseNode *tree_leafsym_new( Compile *compile, Symbol *sym ); ParseNode *tree_const_new( Compile *compile, ParseConst n ); ParseNode *tree_class_new( Compile *compile ); ParseNode *tree_compose_new( Compile *compile, ParseNode *f, ParseNode *g ); ParseNode *tree_pattern_new( Compile *compile ); ParseNode *tree_pattern_class_new( Compile *compile, const char *class_name, ParseNode *l ); void *tree_node_destroy( ParseNode *n ); typedef ParseNode *(*tree_map_fn)( Compile *, ParseNode *, void *, void * ); ParseNode *tree_map( Compile *compile, tree_map_fn fn, ParseNode *node, void *a, void *b ); /* Copy a tree into a new context. */ ParseNode *tree_copy( Compile *compile, ParseNode *node ); nip2-8.7.0/src/workspacegroupview.c0000644000175000017500000004675413224651032014236 00000000000000/* main processing window */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #include "ip.h" /* #define DEBUG */ static ViewClass *parent_class = NULL; static void workspacegroupview_realize( GtkWidget *widget ) { #ifdef DEBUG { Workspacegroupview *wsgview = WORKSPACEGROUPVIEW( widget ); Workspace *ws = WORKSPACE( VOBJECT( wsgview )->iobject ); printf( "workspacegroupview_realize: %s\n", IOBJECT( ws )->name ); } #endif /*DEBUG*/ GTK_WIDGET_CLASS( parent_class )->realize( widget ); /* Mark us as a symbol drag-to widget. */ set_symbol_drag_type( widget ); } static void workspacegroupview_rename_sub( iWindow *iwnd, void *client, iWindowNotifyFn nfn, void *sys ) { Workspace *ws = WORKSPACE( client ); Stringset *ss = STRINGSET( iwnd ); StringsetChild *name = stringset_child_get( ss, _( "Name" ) ); StringsetChild *caption = stringset_child_get( ss, _( "Caption" ) ); char name_text[1024]; char caption_text[1024]; if( !get_geditable_name( name->entry, name_text, 1024 ) || !get_geditable_string( caption->entry, caption_text, 1024 ) ) { nfn( sys, IWINDOW_ERROR ); return; } if( !workspace_rename( ws, name_text, caption_text ) ) { nfn( sys, IWINDOW_ERROR ); return; } nfn( sys, IWINDOW_YES ); } static void workspacegroupview_rename_cb( GtkWidget *wid, GtkWidget *host, Workspaceview *wview ) { Workspace *ws = WORKSPACE( VOBJECT( wview )->iobject ); GtkWidget *ss = stringset_new(); if( ws->locked ) return; stringset_child_new( STRINGSET( ss ), _( "Name" ), IOBJECT( ws )->name, _( "Set tab name here" ) ); stringset_child_new( STRINGSET( ss ), _( "Caption" ), IOBJECT( ws )->caption, _( "Set tab caption here" ) ); iwindow_set_title( IWINDOW( ss ), _( "Rename Tab \"%s\"" ), IOBJECT( ws )->name ); idialog_set_callbacks( IDIALOG( ss ), iwindow_true_cb, NULL, NULL, ws ); idialog_add_ok( IDIALOG( ss ), workspacegroupview_rename_sub, _( "Rename Tab" ) ); iwindow_set_parent( IWINDOW( ss ), GTK_WIDGET( wview ) ); iwindow_build( IWINDOW( ss ) ); gtk_widget_show( ss ); } static void workspacegroupview_rename_cb2( GtkWidget *wid, GdkEvent *event, Workspaceview *wview ) { workspacegroupview_rename_cb( wid, NULL, wview ); } static void workspacegroupview_child_add( View *parent, View *child ) { Workspacegroupview *wsgview = WORKSPACEGROUPVIEW( parent ); Workspaceview *wview = WORKSPACEVIEW( child ); Workspace *ws = WORKSPACE( VOBJECT( child )->iobject ); GtkWidget *ebox; GtkWidget *hbox; GtkWidget *label; GtkWidget *padlock; GtkWidget *alert; VIEW_CLASS( parent_class )->child_add( parent, child ); ebox = gtk_event_box_new(); gtk_widget_add_events( GTK_WIDGET( ebox ), GDK_BUTTON_PRESS_MASK ); hbox = gtk_hbox_new( FALSE, 0 ); gtk_container_add( GTK_CONTAINER( ebox ), hbox ); gtk_widget_show( GTK_WIDGET( hbox ) ); padlock = gtk_image_new(); gtk_box_pack_start( GTK_BOX( hbox ), padlock, FALSE, FALSE, 0 ); gtk_widget_show( GTK_WIDGET( padlock ) ); set_tooltip( padlock, "%s", _( "unlock from Edit menu" ) ); alert = gtk_image_new(); gtk_box_pack_start( GTK_BOX( hbox ), alert, FALSE, FALSE, 0 ); gtk_widget_show( GTK_WIDGET( alert ) ); set_tooltip( alert, "%s", _( "errors in tab" ) ); label = gtk_label_new( NN( IOBJECT( ws->sym )->name ) ); gtk_box_pack_end( GTK_BOX( hbox ), label, FALSE, FALSE, 0 ); gtk_widget_show( GTK_WIDGET( label ) ); workspaceview_set_label( wview, label, padlock, alert ); popup_attach( ebox, wsgview->tab_menu, wview ); doubleclick_add( ebox, FALSE, NULL, NULL, DOUBLECLICK_FUNC( workspacegroupview_rename_cb2 ), wview ); gtk_notebook_insert_page( GTK_NOTEBOOK( wsgview->notebook ), GTK_WIDGET( wview ), ebox, ICONTAINER( ws )->pos ); gtk_notebook_set_tab_reorderable( GTK_NOTEBOOK( wsgview->notebook ), GTK_WIDGET( wview ), TRUE ); gtk_notebook_set_tab_detachable( GTK_NOTEBOOK( wsgview->notebook ), GTK_WIDGET( wview ), TRUE ); } static void workspacegroupview_child_remove( View *parent, View *child ) { /* Stuff. Workspacegroupview *wsgview = WORKSPACEGROUPVIEW( parent ); Workspaceview *wview = WORKSPACEVIEW( child ); */ VIEW_CLASS( parent_class )->child_remove( parent, child ); } static void workspacegroupview_child_position( View *parent, View *child ) { Workspacegroupview *wsgview = WORKSPACEGROUPVIEW( parent ); Workspaceview *wview = WORKSPACEVIEW( child ); gtk_notebook_reorder_child( GTK_NOTEBOOK( wsgview->notebook ), GTK_WIDGET( wview ), ICONTAINER( wview )->pos ); VIEW_CLASS( parent_class )->child_position( parent, child ); } static void workspacegroupview_child_front( View *parent, View *child ) { Workspacegroupview *wsgview = WORKSPACEGROUPVIEW( parent ); Workspaceview *wview = WORKSPACEVIEW( child ); int page; GtkWidget *current_front; page = gtk_notebook_get_current_page( GTK_NOTEBOOK( wsgview->notebook ) ); current_front = gtk_notebook_get_nth_page( GTK_NOTEBOOK( wsgview->notebook ), page ); if( current_front != GTK_WIDGET( wview ) ) { page = gtk_notebook_page_num( GTK_NOTEBOOK( wsgview->notebook ), GTK_WIDGET( wview ) ); gtk_notebook_set_current_page( GTK_NOTEBOOK( wsgview->notebook ), page ); } } static void workspacegroupview_class_init( WorkspacegroupviewClass *class ) { GtkWidgetClass *widget_class = (GtkWidgetClass *) class; ViewClass *view_class = (ViewClass *) class; parent_class = g_type_class_peek_parent( class ); widget_class->realize = workspacegroupview_realize; view_class->child_add = workspacegroupview_child_add; view_class->child_remove = workspacegroupview_child_remove; view_class->child_position = workspacegroupview_child_position; view_class->child_front = workspacegroupview_child_front; } typedef struct _nip2GtkNotebookPage { GtkWidget *child; /* A lot of stuff follows in the real struct, which we ignore. */ } nip2GtkNotebookPage; /* gtk+-2.20 and earlier had a bug whereby switch_page would be given a * GtkNotebookPage rather than the actual page widget. */ static Workspaceview * notebookpage_get_workspaceview( GtkWidget *page ) { #ifdef USE_NOTEBOOK_GROUP_NAME return( WORKSPACEVIEW( page ) ); #else /*!USE_NOTEBOOK_GROUP_NAME*/ /* Buggy argh. */ return( WORKSPACEVIEW( ((nip2GtkNotebookPage *) page)->child ) ); #endif } /* Called for switching the current page, and for page drags between * notebooks. */ static void workspacegroupview_switch_page_cb( GtkNotebook *notebook, GtkWidget *page, guint page_num, gpointer user_data ) { Workspaceview *wview = notebookpage_get_workspaceview( page ); Workspace *ws = WORKSPACE( VOBJECT( wview )->iobject ); Workspacegroup *old_wsg = WORKSPACEGROUP( ICONTAINER( ws )->parent ); Workspacegroupview *wsgview = WORKSPACEGROUPVIEW( user_data ); Workspacegroup *wsg = WORKSPACEGROUP( VOBJECT( wsgview )->iobject ); if( ICONTAINER( ws )->parent != ICONTAINER( wsg ) ) { icontainer_reparent( ICONTAINER( wsg ), ICONTAINER( ws ), -1 ); filemodel_set_modified( FILEMODEL( wsg ), TRUE ); filemodel_set_modified( FILEMODEL( old_wsg ), TRUE ); /* If dragging the tab has emptied the old wsg, we can junk * the window. */ mainw_cull(); } icontainer_current( ICONTAINER( wsg ), ICONTAINER( ws ) ); if( ws->compat_major ) { error_top( _( "Compatibility mode." ) ); error_sub( _( "This workspace was created by version %d.%d. " "A set of compatibility menus have been loaded " "for this window." ), ws->compat_major, ws->compat_minor ); iwindow_alert( GTK_WIDGET( wview ), GTK_MESSAGE_INFO ); } /* How bizarre, pages sometimes fail to set up correctly. Force a * resize to get everything to init. */ if( wview && wview->fixed ) gtk_container_check_resize( GTK_CONTAINER( wview->fixed ) ); } static void workspacegroupview_page_added_cb( GtkNotebook *notebook, GtkWidget *page, guint page_num, gpointer user_data ) { Workspacegroupview *wsgview = WORKSPACEGROUPVIEW( user_data ); Workspacegroup *wsg = WORKSPACEGROUP( VOBJECT( wsgview )->iobject ); Mainw *mainw = MAINW( iwindow_get_root( GTK_WIDGET( notebook ) ) ); filemodel_set_window_hint( FILEMODEL( wsg ), IWINDOW( mainw ) ); } static GtkNotebook * workspacegroupview_create_window_cb( GtkNotebook *notebook, GtkWidget *page, int x, int y, gpointer user_data ) { Workspaceview *wview = WORKSPACEVIEW( page ); Workspace *ws = WORKSPACE( VOBJECT( wview )->iobject ); Workspacegroup *wsg = WORKSPACEGROUP( ICONTAINER( ws )->parent ); Workspaceroot *wsr = wsg->wsr; Mainw *new_mainw; Workspacegroup *new_wsg; char name[256]; /* printf( "workspacegroupview_create_window_cb: wsg = %s, ws = %s\n", NN( IOBJECT( wsg )->name ), NN( IOBJECT( ws )->name ) ); printf( "workspacegroupview_create_window_cb: x = %d, y = %d\n", x, y ); */ workspaceroot_name_new( wsr, name ); new_wsg = workspacegroup_new( wsr ); /* printf( "workspacegroupview_create_window_cb: new wsg = %s\n", name ); */ iobject_set( IOBJECT( new_wsg ), name, NULL ); new_mainw = mainw_new( new_wsg ); gtk_window_move( GTK_WINDOW( new_mainw ), x, y ); gtk_widget_show( GTK_WIDGET( new_mainw ) ); return( GTK_NOTEBOOK( new_mainw->wsgview->notebook ) ); } static void workspacegroupview_page_reordered_cb( GtkNotebook *notebook, GtkWidget *page, guint page_num, gpointer user_data ) { Workspaceview *wview = WORKSPACEVIEW( page ); Workspacegroupview *wsgview = WORKSPACEGROUPVIEW( VIEW( wview )->parent ); Workspacegroup *wsg = WORKSPACEGROUP( VOBJECT( wsgview )->iobject ); int i; gboolean changed; changed = FALSE; for( i = 0; i < gtk_notebook_get_n_pages( notebook ); i++ ) { GtkWidget *page_n = gtk_notebook_get_nth_page( notebook, i ); Workspaceview *wview = WORKSPACEVIEW( page_n ); Workspace *ws = WORKSPACE( VOBJECT( wview )->iobject ); if( ICONTAINER( ws )->pos != i ) { ICONTAINER( ws )->pos = i; changed = TRUE; } } if( changed ) { icontainer_pos_sort( ICONTAINER ( wsg ) ); filemodel_set_modified( FILEMODEL( wsg ), TRUE ); } } static void workspacegroupview_tab_double_cb( GtkNotebook *notebook, GdkEvent *event, Workspacegroupview *wsgview ) { Workspacegroup *wsg = WORKSPACEGROUP( VOBJECT( wsgview )->iobject ); int i; GtkWidget *page; GtkWidget *tab; /* Doubleclick in a tab row background. This could be the gutter or * the edge of a label. Get the position of the right-most tab and * check our click x against that. */ i = gtk_notebook_get_n_pages( notebook ); page = gtk_notebook_get_nth_page( notebook, i - 1 ); tab = gtk_notebook_get_tab_label( notebook, page ); if( event->button.x > tab->allocation.x + tab->allocation.width && !workspace_new_blank( wsg ) ) iwindow_alert( GTK_WIDGET( wsgview ), GTK_MESSAGE_ERROR ); } static void workspacegroupview_add_workspace_cb( GtkWidget *wid, Workspacegroupview *wsgview ) { Workspacegroup *wsg = WORKSPACEGROUP( VOBJECT( wsgview )->iobject ); if( !workspace_new_blank( wsg ) ) iwindow_alert( GTK_WIDGET( wsgview ), GTK_MESSAGE_ERROR ); } static void workspacegroupview_add_workspace_cb2( GtkWidget *wid, GtkWidget *host, Workspacegroupview *wsgview ) { workspacegroupview_add_workspace_cb( wid, wsgview ); } static void workspacegroupview_load_workspace_cb2( GtkWidget *wid, GtkWidget *host, Workspacegroupview *wsgview ) { Mainw *mainw = MAINW( iwindow_get_root( GTK_WIDGET( wsgview ) ) ); mainw_workspace_merge( mainw ); } static void workspacegroupview_select_all_cb( GtkWidget *wid, GtkWidget *host, Workspaceview *wview ) { Workspace *ws = WORKSPACE( VOBJECT( wview )->iobject ); if( !ws->locked ) workspace_select_all( ws ); } static void workspacegroupview_duplicate_cb( GtkWidget *wid, GtkWidget *host, Workspaceview *wview ) { Workspace *ws = WORKSPACE( VOBJECT( wview )->iobject ); if( !workspace_duplicate( ws ) ) { iwindow_alert( host, GTK_MESSAGE_ERROR ); return; } } static void workspacegroupview_merge_sub( iWindow *iwnd, void *client, iWindowNotifyFn nfn, void *sys ) { Filesel *filesel = FILESEL( iwnd ); Workspace *ws = WORKSPACE( client ); Workspacegroup *wsg = workspace_get_workspacegroup( ws ); char *filename; Column *col; if( (filename = filesel_get_filename( filesel )) ) { icontainer_current( ICONTAINER( wsg ), ICONTAINER( ws ) ); progress_begin(); column_clear_last_new(); if( !workspace_merge_file( ws, filename ) ) nfn( sys, IWINDOW_ERROR ); else { symbol_recalculate_all(); nfn( sys, IWINDOW_YES ); } if( (col = column_get_last_new()) ) column_scrollto( col, MODEL_SCROLL_TOP ); progress_end(); g_free( filename ); } else nfn( sys, IWINDOW_ERROR ); } static void workspacegroupview_merge_cb( GtkWidget *wid, GtkWidget *host, Workspaceview *wview ) { Workspace *ws = WORKSPACE( VOBJECT( wview )->iobject ); iWindow *iwnd = IWINDOW( view_get_toplevel( VIEW( wview ) ) ); GtkWidget *filesel = filesel_new(); if( ws->locked ) return; iwindow_set_title( IWINDOW( filesel ), _( "Merge Into Tab \"%s\"" ), IOBJECT( ws )->name ); filesel_set_flags( FILESEL( filesel ), FALSE, FALSE ); filesel_set_filetype( FILESEL( filesel ), filesel_type_workspace, 0 ); iwindow_set_parent( IWINDOW( filesel ), GTK_WIDGET( iwnd ) ); idialog_set_iobject( IDIALOG( filesel ), IOBJECT( ws ) ); filesel_set_done( FILESEL( filesel ), workspacegroupview_merge_sub, ws ); iwindow_build( IWINDOW( filesel ) ); gtk_widget_show( GTK_WIDGET( filesel ) ); } static void workspacegroupview_save_as_sub( iWindow *iwnd, void *client, iWindowNotifyFn nfn, void *sys ) { Filesel *filesel = FILESEL( iwnd ); Workspace *ws = WORKSPACE( client ); Workspacegroup *wsg = workspace_get_workspacegroup( ws ); char *filename; if( (filename = filesel_get_filename( filesel )) ) { icontainer_current( ICONTAINER( wsg ), ICONTAINER( ws ) ); if( !workspacegroup_save_current( wsg, filename ) ) nfn( sys, IWINDOW_ERROR ); else nfn( sys, IWINDOW_YES ); g_free( filename ); } else nfn( sys, IWINDOW_ERROR ); } static void workspacegroupview_save_as_cb( GtkWidget *wid, GtkWidget *host, Workspaceview *wview ) { Workspace *ws = WORKSPACE( VOBJECT( wview )->iobject ); iWindow *iwnd = IWINDOW( view_get_toplevel( VIEW( wview ) ) ); GtkWidget *filesel = filesel_new(); iwindow_set_title( IWINDOW( filesel ), _( "Save Tab \"%s\"" ), IOBJECT( ws )->name ); filesel_set_flags( FILESEL( filesel ), FALSE, TRUE ); filesel_set_filetype( FILESEL( filesel ), filesel_type_workspace, 0 ); iwindow_set_parent( IWINDOW( filesel ), GTK_WIDGET( iwnd ) ); idialog_set_iobject( IDIALOG( filesel ), IOBJECT( ws ) ); filesel_set_done( FILESEL( filesel ), workspacegroupview_save_as_sub, ws ); iwindow_build( IWINDOW( filesel ) ); gtk_widget_show( GTK_WIDGET( filesel ) ); } /* ws has been destroyed. */ static void workspacegroupview_delete_done_cb( iWindow *iwnd, void *client, iWindowNotifyFn nfn, void *sys ) { mainw_cull(); nfn( sys, IWINDOW_YES ); } static void workspacegroupview_delete_cb( GtkWidget *wid, GtkWidget *host, Workspaceview *wview ) { Workspace *ws = WORKSPACE( VOBJECT( wview )->iobject ); if( !ws->locked ) model_check_destroy( view_get_toplevel( VIEW( wview ) ), MODEL( ws ), workspacegroupview_delete_done_cb ); } static void workspacegroupview_init( Workspacegroupview *wsgview ) { wsgview->notebook = gtk_notebook_new(); gtk_notebook_set_scrollable( GTK_NOTEBOOK( wsgview->notebook ), TRUE ); #ifdef USE_NOTEBOOK_GROUP_NAME gtk_notebook_set_group_name( GTK_NOTEBOOK( wsgview->notebook ), "wsgview" ); #endif /*USE_NOTEBOOK_GROUP_NAME*/ gtk_notebook_set_tab_pos( GTK_NOTEBOOK( wsgview->notebook ), GTK_POS_TOP ); g_signal_connect( wsgview->notebook, "switch_page", G_CALLBACK( workspacegroupview_switch_page_cb ), wsgview ); g_signal_connect( wsgview->notebook, "page_added", G_CALLBACK( workspacegroupview_page_added_cb ), wsgview ); g_signal_connect( wsgview->notebook, "page_reordered", G_CALLBACK( workspacegroupview_page_reordered_cb ), wsgview ); g_signal_connect( wsgview->notebook, "create_window", G_CALLBACK( workspacegroupview_create_window_cb ), wsgview ); doubleclick_add( wsgview->notebook, FALSE, NULL, NULL, DOUBLECLICK_FUNC( workspacegroupview_tab_double_cb ), wsgview ); wsgview->gutter_menu = popup_build( _( "Tab gutter menu" ) ); popup_add_but( wsgview->gutter_menu, _( "New Tab" ), POPUP_FUNC( workspacegroupview_add_workspace_cb2 ) ); popup_add_but( wsgview->gutter_menu, _( "Merge Into Workspace" ), POPUP_FUNC( workspacegroupview_load_workspace_cb2 ) ); popup_attach( wsgview->notebook, wsgview->gutter_menu, wsgview ); #ifdef USE_NOTEBOOK_ACTION { GtkWidget *but; GtkWidget *icon; but = gtk_button_new(); gtk_button_set_relief( GTK_BUTTON( but ), GTK_RELIEF_NONE ); set_tooltip( but, _( "Add a workspace" ) ); icon = gtk_image_new_from_stock( GTK_STOCK_ADD, GTK_ICON_SIZE_MENU ); gtk_container_add( GTK_CONTAINER( but ), icon ); gtk_widget_show( icon ); gtk_widget_show( but ); gtk_notebook_set_action_widget( GTK_NOTEBOOK( wsgview->notebook ), but, GTK_PACK_END ); g_signal_connect( but, "clicked", G_CALLBACK( workspacegroupview_add_workspace_cb ), wsgview ); } #endif /*USE_NOTEBOOK_ACTION*/ gtk_box_pack_start( GTK_BOX( wsgview ), wsgview->notebook, TRUE, TRUE, 0 ); gtk_widget_show( wsgview->notebook ); wsgview->tab_menu = popup_build( _( "Tab menu" ) ); popup_add_but( wsgview->tab_menu, _( "Rename" ), POPUP_FUNC( workspacegroupview_rename_cb ) ); popup_add_but( wsgview->tab_menu, _( "Select All" ), POPUP_FUNC( workspacegroupview_select_all_cb ) ); popup_add_but( wsgview->tab_menu, STOCK_DUPLICATE, POPUP_FUNC( workspacegroupview_duplicate_cb ) ); popup_add_but( wsgview->tab_menu, _( "Merge Into Tab" ), POPUP_FUNC( workspacegroupview_merge_cb ) ); popup_add_but( wsgview->tab_menu, GTK_STOCK_SAVE_AS, POPUP_FUNC( workspacegroupview_save_as_cb ) ); menu_add_sep( wsgview->tab_menu ); popup_add_but( wsgview->tab_menu, GTK_STOCK_DELETE, POPUP_FUNC( workspacegroupview_delete_cb ) ); } GtkType workspacegroupview_get_type( void ) { static GType type = 0; if( !type ) { static const GTypeInfo info = { sizeof( WorkspacegroupviewClass ), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) workspacegroupview_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof( Workspacegroupview ), 32, /* n_preallocs */ (GInstanceInitFunc) workspacegroupview_init, }; type = g_type_register_static( TYPE_VIEW, "Workspacegroupview", &info, 0 ); } return( type ); } View * workspacegroupview_new( void ) { Workspacegroupview *wsgview = gtk_type_new( TYPE_WORKSPACEGROUPVIEW ); return( VIEW( wsgview ) ); } nip2-8.7.0/src/optionview.c0000644000175000017500000001432413224651032012457 00000000000000/* run the display for a option in a workspace */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #include "ip.h" static GraphicviewClass *parent_class = NULL; /* Copy a gslist of strings. */ static GSList * lstring_copy( GSList *lstring ) { GSList *new; GSList *p; new = NULL; for( p = lstring; p; p = p->next ) new = g_slist_prepend( new, g_strdup( (const char *) p->data ) ); new = g_slist_reverse( new ); return( new ); } /* Are two lstrings equal? */ static gboolean lstring_equal( GSList *a, GSList *b ) { for( ; a && b; a = a->next, b = b->next ) if( strcmp( (const char *) a->data, (const char *) b->data ) != 0 ) return( FALSE ); if( a || b ) return( FALSE ); return( TRUE ); } static void optionview_destroy( GtkObject *object ) { Optionview *optionview; g_return_if_fail( object != NULL ); g_return_if_fail( IS_OPTIONVIEW( object ) ); optionview = OPTIONVIEW( object ); /* My instance destroy stuff. */ IM_FREEF( slist_free_all, optionview->labels ); GTK_OBJECT_CLASS( parent_class )->destroy( object ); } static void optionview_link( View *view, Model *model, View *parent ) { Optionview *optionview = OPTIONVIEW( view ); VIEW_CLASS( parent_class )->link( view, model, parent ); if( GRAPHICVIEW( view )->sview ) gtk_size_group_add_widget( GRAPHICVIEW( view )->sview->group, optionview->label ); } /* Change to a optionview widget ... update the model. */ static void optionview_change_cb( GtkWidget *wid, Optionview *optionview ) { Option *option = OPTION( VOBJECT( optionview )->iobject ); Classmodel *classmodel = CLASSMODEL( option ); const int nvalue = gtk_combo_box_get_active( GTK_COMBO_BOX( optionview->options ) ); if( option->value != nvalue ) { option->value = nvalue; classmodel_update( classmodel ); symbol_recalculate_all(); } } static gboolean optionview_scroll_cb( GtkWidget *wid, GdkEvent *event, Optionview *optionview ) { /* Stop any other scroll handlers running. We don't want the scroll * wheel to change widgets while we're moving. */ return( TRUE ); } static void optionview_refresh( vObject *vobject ) { Optionview *optionview = OPTIONVIEW( vobject ); Option *option = OPTION( VOBJECT( optionview )->iobject ); GSList *p; int i; #ifdef DEBUG printf( "optionview_refresh: " ); row_name_print( HEAPMODEL( option )->row ); printf( "\n" ); #endif /*DEBUG*/ /* Only rebuild the menu if there's been a change. */ if( !lstring_equal( optionview->labels, option->labels ) ) { /* If the menu is currently up, we can get strange things * happening if we destroy it. */ if( optionview->options ) gtk_combo_box_popdown( GTK_COMBO_BOX( optionview->options ) ); IM_FREEF( gtk_widget_destroy, optionview->options ); optionview->options = gtk_combo_box_new_text(); for( p = option->labels, i = 0; p; p = p->next, i++ ) gtk_combo_box_append_text( GTK_COMBO_BOX( optionview->options ), (const char *) p->data ); gtk_box_pack_start( GTK_BOX( optionview->hbox ), optionview->options, TRUE, TRUE, 0 ); gtk_signal_connect( GTK_OBJECT( optionview->options ), "changed", GTK_SIGNAL_FUNC( optionview_change_cb ), optionview ); gtk_widget_show( optionview->options ); IM_FREEF( slist_free_all, optionview->labels ); optionview->labels = lstring_copy( option->labels ); g_signal_connect( GTK_OBJECT( optionview->options ), "scroll-event", GTK_SIGNAL_FUNC( optionview_scroll_cb ), optionview ); } if( optionview->options ) { gtk_signal_handler_block_by_data( GTK_OBJECT( optionview->options ), optionview ); gtk_combo_box_set_active( GTK_COMBO_BOX( optionview->options ), option->value ); gtk_signal_handler_unblock_by_data( GTK_OBJECT( optionview->options ), optionview ); } set_glabel( optionview->label, _( "%s:" ), IOBJECT( option )->caption ); VOBJECT_CLASS( parent_class )->refresh( vobject ); } static void optionview_class_init( OptionviewClass *class ) { GtkObjectClass *object_class = (GtkObjectClass *) class; vObjectClass *vobject_class = (vObjectClass *) class; ViewClass *view_class = (ViewClass *) class; parent_class = g_type_class_peek_parent( class ); object_class->destroy = optionview_destroy; /* Create signals. */ /* Init methods. */ vobject_class->refresh = optionview_refresh; view_class->link = optionview_link; } static void optionview_init( Optionview *optionview ) { optionview->hbox = gtk_hbox_new( FALSE, 12 ); gtk_box_pack_start( GTK_BOX( optionview ), optionview->hbox, TRUE, FALSE, 0 ); optionview->label = gtk_label_new( "" ); gtk_misc_set_alignment( GTK_MISC( optionview->label ), 0, 0.5 ); gtk_box_pack_start( GTK_BOX( optionview->hbox ), optionview->label, FALSE, FALSE, 2 ); optionview->options = NULL; optionview->labels = NULL; gtk_widget_show_all( optionview->hbox ); } GtkType optionview_get_type( void ) { static GtkType optionview_type = 0; if( !optionview_type ) { static const GtkTypeInfo sinfo = { "Optionview", sizeof( Optionview ), sizeof( OptionviewClass ), (GtkClassInitFunc) optionview_class_init, (GtkObjectInitFunc) optionview_init, /* reserved_1 */ NULL, /* reserved_2 */ NULL, (GtkClassInitFunc) NULL, }; optionview_type = gtk_type_unique( TYPE_GRAPHICVIEW, &sinfo ); } return( optionview_type ); } View * optionview_new( void ) { Optionview *optionview = gtk_type_new( TYPE_OPTIONVIEW ); return( VIEW( optionview ) ); } nip2-8.7.0/src/sliderview.h0000644000175000017500000000312113224651032012427 00000000000000/* a sliderview in a workspace */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_SLIDERVIEW (sliderview_get_type()) #define SLIDERVIEW( obj ) (GTK_CHECK_CAST( (obj), TYPE_SLIDERVIEW, Sliderview )) #define SLIDERVIEW_CLASS( klass ) \ (GTK_CHECK_CLASS_CAST( (klass), TYPE_SLIDERVIEW, SliderviewClass )) #define IS_SLIDERVIEW( obj ) (GTK_CHECK_TYPE( (obj), TYPE_SLIDERVIEW )) #define IS_SLIDERVIEW_CLASS( klass ) \ (GTK_CHECK_CLASS_TYPE( (klass), TYPE_SLIDERVIEW )) typedef struct _Sliderview { Graphicview parent_object; /* My instance vars. */ GtkWidget *label; Tslider *tslider; } Sliderview; typedef struct _SliderviewClass { GraphicviewClass parent_class; /* My methods. */ } SliderviewClass; GtkType sliderview_get_type( void ); View *sliderview_new( void ); nip2-8.7.0/src/imagepresent.h0000644000175000017500000000650213224651032012743 00000000000000/* Imagepresent widget stuff. */ /* Copyright (C) 1991-2001 The Natoinal Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_IMAGEPRESENT (imagepresent_get_type()) #define IMAGEPRESENT( obj ) \ (G_TYPE_CHECK_INSTANCE_CAST( (obj), TYPE_IMAGEPRESENT, Imagepresent )) #define IMAGEPRESENT_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_CAST( (klass), \ TYPE_IMAGEPRESENT, ImagepresentClass)) #define IS_IMAGEPRESENT( obj ) \ (G_TYPE_CHECK_INSTANCE_TYPE( (obj), TYPE_IMAGEPRESENT )) #define IS_IMAGEPRESENT_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_TYPE( (klass), TYPE_IMAGEPRESENT )) #define IMAGEPRESENT_GET_CLASS( obj ) \ (G_TYPE_INSTANCE_GET_CLASS( (obj), \ TYPE_IMAGEPRESENT, ImagepresentClass )) /* Track an image view canvas in one of these. */ struct _Imagepresent { GtkBin parent_object; /* Context. */ Imagemodel *imagemodel; /* Keep model parts of widgets here */ /* Sub-widgets. */ Imagedisplay *id; /* Image we display */ GtkScrolledWindow *swin; GtkAdjustment *hadj; GtkAdjustment *vadj; GtkHRuler *hrule; /* Rulers */ GtkVRuler *vrule; GtkEventBox *heb; /* EventBoxes holding rulers */ GtkEventBox *veb; iWindowCursorContext *cntxt; GtkWidget *ruler_menu; /* Panning stuff. */ guint dx, dy; /* Drag start position */ /* Last known mouse position, mouse in window. */ int last_x, last_y; gboolean inside; /* Background scroll stuff. */ guint scroll_tid; int u, v; /* Rubberbanding. */ Regionview *regionview; /* region rubberband display */ Rect floating; /* rubberband area */ /* Painting stuff. */ int paint_last_x; int paint_last_y; /* Regionviews drawing on us. Used for snap-to-guide stuff. */ GSList *regionviews; /* The regionview that's currently grabbed ... maintained for us by * regionview.c ... see regionview_attach()/_detach() */ Regionview *grabbed; }; /* Class structure. */ typedef struct _ImagepresentClass { /* Our parent. */ GtkBinClass parent_class; } ImagepresentClass; gboolean imagepresent_snap_point( Imagepresent *ip, int x, int y, int *sx, int *sy ); gboolean imagepresent_snap_rect( Imagepresent *ip, Rect *in, Rect *out ); void imagepresent_paint_recalc( Imagepresent *ip ); GType imagepresent_get_type( void ); Imagepresent *imagepresent_new( Imagemodel *imagemodel ); void imagepresent_set_position( Imagepresent *ip, int x, int w ); void imagepresent_set_mag_pos( Imagepresent *ip, int mag, int ix, int iy ); void imagepresent_zoom_to( Imagepresent *ip, int mag ); void imagepresent_scroll_start( Imagepresent *ip, int u, int v ); void imagepresent_scroll_stop( Imagepresent *ip ); nip2-8.7.0/src/program.c0000644000175000017500000017042113224651032011724 00000000000000/* program window */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG #define DEBUG_TREE */ #include "ip.h" /* Keep tools/kits in a treestore. Also pointers to managed objects. */ enum { NAME_COLUMN, /* Kit or tool name */ TOOL_POINTER_COLUMN, /* Pointer to tool */ KIT_POINTER_COLUMN, /* Pointer to kit (if no tool) */ N_COLUMNS }; static iWindowClass *parent_class = NULL; static GSList *program_all = NULL; static GtkWidget *program_menu = NULL; static Model * program_get_selected( Program *program ) { Model *model; if( program->tool ) model = MODEL( program->tool ); else if( program->kit ) model = MODEL( program->kit ); else model = NULL; return( model ); } static void program_info( Program *program, VipsBuf *buf ) { Model *model = program_get_selected( program ); vips_buf_appendf( buf, _( "Edit window" ) ); vips_buf_appendf( buf, "\n" ); vips_buf_appendf( buf, "dirty = \"%s\"\n", bool_to_char( program->dirty ) ); vips_buf_appendf( buf, "\n" ); if( model ) { iobject_info( IOBJECT( model ), buf ); vips_buf_appendf( buf, "\n" ); } } gboolean my_strcmp( const char *a, const char *b ) { if( a == b ) return( 0 ); if( !a ) return( -1 ); if( !b ) return( -1 ); return( strcmp( a, b ) ); } /* Remove this and any subsequent nodes at this level. */ static void program_refresh_trim( Program *program, GtkTreePath *path ) { GtkTreeIter iter; while( gtk_tree_model_get_iter( GTK_TREE_MODEL( program->store ), &iter, path ) ) { #ifdef DEBUG_TREE printf( "program_refresh_trim: removing %s\n", gtk_tree_path_to_string ( path ) ); #endif /*DEBUG_TREE*/ gtk_tree_store_remove( program->store, &iter ); } } static void program_refresh_update( Program *program, GtkTreePath *path, const char *name, Tool *tool, Toolkit *kit ) { GtkTreeIter iter; /* Update, or append if there's nothing to update. */ if( gtk_tree_model_get_iter( GTK_TREE_MODEL( program->store ), &iter, path ) ) { /* Node exists. */ char *store_name; Tool *store_tool; Toolkit *store_kit; gtk_tree_model_get( GTK_TREE_MODEL( program->store ), &iter, NAME_COLUMN, &store_name, TOOL_POINTER_COLUMN, &store_tool, KIT_POINTER_COLUMN, &store_kit, -1 ); if( tool != store_tool || kit != store_kit || my_strcmp( name, store_name ) != 0 ) { #ifdef DEBUG_TREE printf( "program_refresh_update: updating \"%s\"\n", name ); #endif /*DEBUG_TREE*/ gtk_tree_store_set( program->store, &iter, NAME_COLUMN, name, TOOL_POINTER_COLUMN, tool, KIT_POINTER_COLUMN, kit, -1 ); } g_free( store_name ); /* Make sure tool nodes have no children ... this can happen * after some drags. */ if( tool && gtk_tree_model_iter_has_child( GTK_TREE_MODEL( program->store ), &iter ) ) { GtkTreePath *child_path; child_path = gtk_tree_path_copy( path ); gtk_tree_path_down( child_path ); program_refresh_trim( program, child_path ); gtk_tree_path_free( child_path ); } } else { GtkTreeIter parent_iter; GtkTreeIter *piter; #ifdef DEBUG_TREE printf( "program_refresh_update: creating \"%s\"\n", name ); #endif /*DEBUG_TREE*/ /* Get an iter for the parent node, if it exists. */ if( gtk_tree_path_get_depth( path ) > 1 ) { GtkTreePath *parent_path; parent_path = gtk_tree_path_copy( path ); gtk_tree_path_up( parent_path ); gtk_tree_model_get_iter( GTK_TREE_MODEL( program->store ), &parent_iter, parent_path ); gtk_tree_path_free( parent_path ); piter = &parent_iter; } else piter = NULL; gtk_tree_store_append( program->store, &iter, piter ); gtk_tree_store_set( program->store, &iter, NAME_COLUMN, name, TOOL_POINTER_COLUMN, tool, KIT_POINTER_COLUMN, kit, -1 ); } } static void * program_refresh_tool( Tool *tool, Program *program, GtkTreePath *path ) { if( tool->toolitem ) program_refresh_update( program, path, IOBJECT( tool )->name, tool, tool->kit ); else program_refresh_update( program, path, IOBJECT( tool )->name, tool, tool->kit ); gtk_tree_path_next( path ); return( NULL ); } static void * program_refresh_kit( Toolkit *kit, Program *program, GtkTreePath *path ) { program_refresh_update( program, path, IOBJECT( kit )->name, NULL, kit ); gtk_tree_path_down( path ); toolkit_map( kit, (tool_map_fn) program_refresh_tool, program, path ); /* Remove any unused tool nodes. */ program_refresh_trim( program, path ); gtk_tree_path_up( path ); gtk_tree_path_next( path ); return( NULL ); } /* Update the title. */ static void program_title( Program *program ) { char txt[512]; VipsBuf buf = VIPS_BUF_STATIC( txt ); if( program->kit && FILEMODEL( program->kit )->modified ) vips_buf_appendf( &buf, "*" ); vips_buf_appends( &buf, IOBJECT( program->kitg )->name ); if( program->kit ) vips_buf_appendf( &buf, " - %s", IOBJECT( program->kit )->name ); if( program->tool ) { vips_buf_appendf( &buf, " - %s", IOBJECT( program->tool )->name ); if( program->dirty ) { vips_buf_appendf( &buf, " [" ); vips_buf_appendf( &buf, _( "modified" ) ); vips_buf_appendf( &buf, "]" ); } } iwindow_set_title( IWINDOW( program ), "%s", vips_buf_all( &buf ) ); } typedef struct _ProgramRowLookupInfo { Program *program; Model *model; GtkTreeIter *return_iter; gboolean found; } ProgramRowLookupInfo; static gboolean program_row_lookup_sub( GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, ProgramRowLookupInfo *info ) { Tool *tool; Toolkit *kit; gtk_tree_model_get( model, iter, TOOL_POINTER_COLUMN, &tool, KIT_POINTER_COLUMN, &kit, -1 ); if( (void *) tool == (void *) info->model || (void *) kit == (void *) info->model ) { *info->return_iter = *iter; info->found = TRUE; return( TRUE ); } return( FALSE ); } /* Point return_iter at the row containing a pointer to the Model. */ static gboolean program_row_lookup( Program *program, Model *model, GtkTreeIter *return_iter ) { ProgramRowLookupInfo info; info.program = program; info.model = model; info.return_iter = return_iter; info.found = FALSE; gtk_tree_model_foreach( GTK_TREE_MODEL( program->store ), (GtkTreeModelForeachFunc) program_row_lookup_sub, &info ); return( info.found ); } static gboolean program_refresh_timeout( gpointer user_data ) { Program *program = PROGRAM( user_data ); iWindow *iwnd = IWINDOW( program ); Model *model = program_get_selected( program ); GtkTreeSelection *select = gtk_tree_view_get_selection( GTK_TREE_VIEW( program->tree ) ); GtkTreePath *path; GtkTreeIter iter; GtkAction *action; program->refresh_timeout = 0; #ifdef DEBUG printf( "program_refresh_timeout\n" ); #endif /*DEBUG*/ /* Block insert/delete/select signals. */ g_signal_handler_block( G_OBJECT( program->store ), program->row_deleted_sid ); g_signal_handler_block( G_OBJECT( program->store ), program->row_inserted_sid ); g_signal_handler_block( G_OBJECT( select ), program->select_changed_sid ); /* Rebuild the tree widget. */ path = gtk_tree_path_new(); gtk_tree_path_down( path ); toolkitgroup_map( program->kitg, (toolkit_map_fn) program_refresh_kit, program, path ); /* Remove any unused kit nodes. */ program_refresh_trim( program, path ); gtk_tree_path_free( path ); g_signal_handler_unblock( G_OBJECT( program->store ), program->row_inserted_sid ); g_signal_handler_unblock( G_OBJECT( program->store ), program->row_deleted_sid ); /* Update title bar. */ program_title( program ); /* Scroll to current kit or tool. */ if( model && program_row_lookup( program, model, &iter ) ) { path = gtk_tree_model_get_path( GTK_TREE_MODEL( program->store ), &iter ); /* Only expand tools ... we want to be able to select kits * without expansion. */ if( IS_TOOL( model ) ) gtk_tree_view_expand_to_path( GTK_TREE_VIEW( program->tree ), path ); gtk_tree_view_set_cursor( GTK_TREE_VIEW( program->tree ), path, NULL, FALSE ); gtk_tree_path_free( path ); } else gtk_tree_selection_unselect_all( select ); g_signal_handler_unblock( G_OBJECT( select ), program->select_changed_sid ); action = gtk_action_group_get_action( iwnd->action_group, "DefBrowser" ); gtk_toggle_action_set_active( GTK_TOGGLE_ACTION( action ), program->rpane->open ); return( FALSE ); } /* Schedule an update for all our widgets. */ static void program_refresh( Program *program ) { IM_FREEF( g_source_remove, program->refresh_timeout ); /* 10ms to make sure we run after idle (is this right?) */ program->refresh_timeout = g_timeout_add( 10, (GSourceFunc) program_refresh_timeout, program ); } /* Break the tool & kit links. */ static void program_detach( Program *program ) { if( program->tool ) { program->pos = -1; FREESID( program->tool_destroy_sid, program->tool ); program->tool = NULL; } if( program->kit ) { FREESID( program->kit_destroy_sid, program->kit ); program->kit = NULL; } program_refresh( program ); } static void program_find_reset( Program *program ) { FREESID( program->find_sym_destroy_sid, program->find_sym ); program->find_sym = NULL; program->find_start = 0; program->find_end = 0; } static void program_find_destroy_cb( Symbol *sym, Program *program ) { program_find_reset( program ); } static void program_find_note( Program *program, Symbol *sym, int start, int end ) { program_find_reset( program ); program->find_sym = sym; program->find_sym_destroy_sid = g_signal_connect( G_OBJECT( sym ), "destroy", G_CALLBACK( program_find_destroy_cb ), program ); program->find_start = start; program->find_end = end; } static gboolean program_find_pos( Program *program, const char *text, int *start, int *end ) { #ifdef HAVE_GREGEX if( program->regexp ) { GMatchInfo *match; g_regex_match( program->comp, text, 0, &match ); if( g_match_info_fetch_pos( match, 0, start, end ) ) { g_match_info_free( match ); return( TRUE ); } g_match_info_free( match ); } else #endif /*HAVE_GREGEX*/ if( program->csens ) { char *p; if( (p = strstr( text, program->search )) ) { *start = p - text; *end = *start + strlen( program->search ); return( TRUE ); } } else { char *p; if( (p = my_strcasestr( text, program->search )) ) { *start = p - text; *end = *start + strlen( program->search ); return( TRUE ); } } return( FALSE ); } static void * program_find_tool( Tool *tool, Program *program, gboolean *skipping ) { Symbol *sym; if( tool->type != TOOL_SYM ) return( NULL ); sym = tool->sym; /* In search mode? Check if we've found the start point. */ if( *skipping ) { if( sym == program->find_sym || !program->find_sym ) *skipping = FALSE; } /* Reached start point? Check from start onwards. */ if( !*skipping ) { if( sym->expr && sym->expr->compile && program->find_start < strlen( sym->expr->compile->text ) ) { int start, end; if( program_find_pos( program, sym->expr->compile->text + program->find_start, &start, &end ) ) { program_find_note( program, sym, start + program->find_start, end + program->find_start ); return( tool ); } } program_find_reset( program ); } return( NULL ); } static void * program_find_toolkit( Toolkit *kit, Program *program, gboolean *skipping ) { return( icontainer_map( ICONTAINER( kit ), (icontainer_map_fn) program_find_tool, program, &skipping ) ); } static gboolean program_find( Program *program ) { gboolean skipping = TRUE; if( toolkitgroup_map( program->kitg, (toolkit_map_fn) program_find_toolkit, program, &skipping ) ) return( TRUE ); return( FALSE ); } static void program_destroy( GtkObject *object ) { Program *program; g_return_if_fail( object != NULL ); g_return_if_fail( IS_PROGRAM( object ) ); program = PROGRAM( object ); #ifdef DEBUG printf( "program_destroy\n" ); #endif /*DEBUG*/ /* My instance destroy stuff. */ program_detach( program ); UNREF( program->store ); FREESID( program->kitgroup_changed_sid, program->kitg ); FREESID( program->kitgroup_destroy_sid, program->kitg ); IM_FREEF( g_free, program->search ); #ifdef HAVE_GREGEX IM_FREEF( g_regex_unref, program->comp ); #endif /*HAVE_GREGEX*/ program_find_reset( program ); IM_FREEF( g_source_remove, program->refresh_timeout ); program_all = g_slist_remove( program_all, program ); GTK_OBJECT_CLASS( parent_class )->destroy( object ); } static void program_edit_dia_done_cb( iWindow *iwnd, void *client, iWindowNotifyFn nfn, void *sys ) { Tool *tool = TOOL( client ); Stringset *ss = STRINGSET( iwnd ); StringsetChild *name = stringset_child_get( ss, _( "Name" ) ); StringsetChild *file = stringset_child_get( ss, _( "Filename" ) ); char name_text[1024]; char file_text[1024]; if( !get_geditable_string( name->entry, name_text, 1024 ) || !get_geditable_filename( file->entry, file_text, 1024 ) ) { nfn( sys, IWINDOW_ERROR ); return; } if( !tool_new_dia( tool->kit, ICONTAINER( tool )->pos, name_text, file_text ) ) { nfn( sys, IWINDOW_ERROR ); return; } nfn( sys, IWINDOW_YES ); } static void program_edit_dia( Program *program, Tool *tool ) { GtkWidget *ss = stringset_new(); g_assert( tool && tool->type == TOOL_DIA ); stringset_child_new( STRINGSET( ss ), _( "Name" ), IOBJECT( tool )->name, _( "Menu item text" ) ); stringset_child_new( STRINGSET( ss ), _( "Filename" ), FILEMODEL( tool )->filename, _( "Load column from this file" ) ); iwindow_set_title( IWINDOW( ss ), _( "Edit Column Item \"%s\"" ), IOBJECT( tool )->name ); idialog_set_callbacks( IDIALOG( ss ), iwindow_true_cb, NULL, NULL, tool ); idialog_add_ok( IDIALOG( ss ), program_edit_dia_done_cb, _( "Set column item" ) ); iwindow_set_parent( IWINDOW( ss ), GTK_WIDGET( program ) ); idialog_set_iobject( IDIALOG( ss ), IOBJECT( tool ) ); iwindow_build( IWINDOW( ss ) ); gtk_widget_show( ss ); } static void program_edit_object_cb( GtkWidget *menu, Program *program ) { Model *model = program_get_selected( program ); if( model && IS_TOOL( model ) && TOOL( model )->type == TOOL_DIA ) program_edit_dia( program, program->tool ); } static gboolean program_is_saveable( Model *model ) { if( !IS_TOOLKIT( model ) ) { error_top( _( "Unable to save." ) ); error_sub( _( "You can only save toolkits, not tools." ) ); return( FALSE ); } if( IS_TOOLKIT( model ) && TOOLKIT( model )->pseudo ) { error_top( _( "Unable to save." ) ); error_sub( _( "You can't save auto-generated toolkits." ) ); return( FALSE ); } return( TRUE ); } static void program_save_object_cb( GtkWidget *menu, Program *program ) { Model *model = program_get_selected( program ); if( model ) { if( program_is_saveable( model ) ) filemodel_inter_save( IWINDOW( program ), FILEMODEL( model ) ); else iwindow_alert( GTK_WIDGET( program ), GTK_MESSAGE_ERROR ); } } static void program_saveas_object_cb( GtkWidget *menu, Program *program ) { Model *model = program_get_selected( program ); if( model ) { if( program_is_saveable( model ) ) filemodel_inter_saveas( IWINDOW( program ), FILEMODEL( model ) ); else iwindow_alert( GTK_WIDGET( program ), GTK_MESSAGE_ERROR ); } } static void program_remove_object_cb( GtkWidget *menu, Program *program ) { Model *model = program_get_selected( program ); if( model ) model_check_destroy( GTK_WIDGET( program ), model, NULL ); } static void program_class_init( ProgramClass *class ) { GtkObjectClass *object_class = (GtkObjectClass *) class; GtkWidget *pane; parent_class = g_type_class_peek_parent( class ); object_class->destroy = program_destroy; /* Create signals. */ /* Init methods. */ pane = program_menu = popup_build( _( "Toolkit menu" ) ); popup_add_but( pane, _( "_Edit" ), POPUP_FUNC( program_edit_object_cb ) ); popup_add_but( pane, GTK_STOCK_SAVE, POPUP_FUNC( program_save_object_cb ) ); popup_add_but( pane, GTK_STOCK_SAVE_AS, POPUP_FUNC( program_saveas_object_cb ) ); menu_add_sep( pane ); popup_add_but( pane, GTK_STOCK_DELETE, POPUP_FUNC( program_remove_object_cb ) ); } /* Some kit/tool has changed ... update everything. */ static void program_kitgroup_changed( Model *model, Program *program ) { #ifdef DEBUG printf( "program_kitgroup_changed:\n" ); #endif /*DEBUG*/ program_refresh( program ); } static void program_kitgroup_destroy( Model *model, Program *program ) { #ifdef DEBUG printf( "program_kitgroup_destroy:\n" ); #endif /*DEBUG*/ /* Our toolkitgroup has gone! Give up on the world. */ program->kitgroup_changed_sid = 0; program->kitgroup_destroy_sid = 0; iwindow_kill( IWINDOW( program ) ); } static void program_init( Program *program ) { program->kitg = NULL; program->text = NULL; program->dirty = FALSE; program->text_hash = 0; program->tree = NULL; program->store = NULL; program->pane_position = PROGRAM_PANE_POSITION; program->rpane_open = FALSE; program->rpane_position = 500; program->refresh_timeout = 0; program->kitgroup_changed_sid = 0; program->kitgroup_destroy_sid = 0; program->kit = NULL; program->kit_destroy_sid = 0; program->tool = NULL; program->pos = -1; program->tool_destroy_sid = 0; program->search = NULL; program->csens = FALSE; program->fromtop = TRUE; #ifdef HAVE_GREGEX program->regexp = FALSE; program->comp = NULL; #endif /*HAVE_GREGEX*/ } GtkType program_get_type( void ) { static GtkType program_type = 0; if( !program_type ) { static const GtkTypeInfo info = { "Program", sizeof( Program ), sizeof( ProgramClass ), (GtkClassInitFunc) program_class_init, (GtkObjectInitFunc) program_init, /* reserved_1 */ NULL, /* reserved_2 */ NULL, (GtkClassInitFunc) NULL, }; program_type = gtk_type_unique( TYPE_IWINDOW, &info ); } return( program_type ); } /* The kit we have selected has been destroyed. */ static void program_kit_destroy( Toolkit *kit, Program *program ) { #ifdef DEBUG printf( "program_kit_destroy:\n" ); #endif /*DEBUG*/ g_assert( program->kit == kit ); program_detach( program ); program_refresh( program ); } /* Is a character one of those allowed in nip2 identifers? */ static gboolean is_ident( int ch ) { if( isalnum( ch ) || ch == '_' || ch == '\'' ) return( TRUE ); return( FALSE ); } static void program_text_cursor_position( GtkTextBuffer *buffer, GParamSpec *pspec, Program *program ) { gboolean editable = !program->kit || !program->kit->pseudo; if( program->rpane_open && editable ) { /* Fetch characters left of the cursor while we have stuff * that could be an identifier. */ GtkTextIter start; GtkTextIter cursor; GtkTextIter end; char *line; char *p, *q, *r; /* Get iters for start / cursor / end of line. */ gtk_text_buffer_get_iter_at_mark( buffer, &cursor, gtk_text_buffer_get_insert( buffer ) ); gtk_text_buffer_get_iter_at_line_index( buffer, &start, gtk_text_iter_get_line( &cursor ), 0 ); gtk_text_buffer_get_iter_at_line_index( buffer, &end, gtk_text_iter_get_line( &cursor ), 0 ); gtk_text_iter_forward_to_line_end( &end ); line = gtk_text_buffer_get_text( buffer, &start, &end, FALSE ); p = line + gtk_text_iter_get_line_index( &cursor ); /* Search back from the cursor for the first non-identifier * char. */ for( q = p - 1; q >= line && is_ident( *q ); q-- ) ; q += 1; for( r = p; r < line + strlen( line ) && is_ident( *r ); r++ ) ; *r= '\0'; if( strlen( q ) > 1 ) defbrowser_set_filter( program->defbrowser, q ); g_free( line ); } } static void program_text_changed( GtkTextBuffer *buffer, Program *program ) { if( !program->dirty ) { program->dirty = TRUE; program_refresh( program ); } } static void program_set_text( Program *program, const char *text, gboolean editable ) { GtkTextView *text_view = GTK_TEXT_VIEW( program->text ); GtkTextBuffer *text_buffer = gtk_text_view_get_buffer( text_view ); guint text_hash = g_str_hash( text ); if( text_hash != program->text_hash ) { /* Stop ::changed from firing, we don't want it to update the * def browser filter. */ g_signal_handlers_block_by_func( text_buffer, G_CALLBACK( program_text_cursor_position ), program ); text_view_set_text( text_view, text, editable ); program->text_hash = text_hash; g_signal_handlers_unblock_by_func( text_buffer, G_CALLBACK( program_text_cursor_position ), program ); } program->dirty = FALSE; } /* Swap text for text for tool. */ static void program_set_text_tool( Program *program, Tool *tool ) { char txt[MAX_STRSIZE]; VipsBuf buf = VIPS_BUF_STATIC( txt ); switch( tool->type ) { case TOOL_DIA: case TOOL_SEP: program_set_text( program, "", FALSE ); break; case TOOL_SYM: switch( tool->sym->type ) { case SYM_EXTERNAL: call_usage( &buf, tool->sym->function ); program_set_text( program, vips_buf_all( &buf ), FALSE ); break; case SYM_BUILTIN: builtin_usage( &buf, tool->sym->builtin ); program_set_text( program, vips_buf_all( &buf ), FALSE ); break; case SYM_VALUE: program_set_text( program, tool->sym->expr->compile->text, TRUE ); break; default: g_assert( FALSE ); } break; default: g_assert( FALSE ); } } /* The sym we are editing has been destroyed. */ static void program_tool_destroy( Tool *tool, Program *program ) { #ifdef DEBUG printf( "program_tool_destroy:\n" ); #endif /*DEBUG*/ g_assert( program->tool == tool ); program_detach( program ); program_set_text( program, "", TRUE ); program_refresh( program ); } /* Pick a kit ... but don't touch the text yet. */ static void program_select_kit_sub( Program *program, Toolkit *kit ) { /* None? Pick "untitled". */ if( !kit ) kit = toolkit_by_name( program->kitg, "untitled" ); program_detach( program ); if( kit ) { program->kit = kit; program->kit_destroy_sid = g_signal_connect( G_OBJECT( kit ), "destroy", G_CALLBACK( program_kit_destroy ), program ); } program_refresh( program ); } /* Select a new kit in the tree. */ static void program_select_kit( Program *program, Toolkit *kit ) { program_select_kit_sub( program, kit ); program_set_text( program, "", TRUE ); program_refresh( program ); } /* Select a tool in the tree. */ static void program_select_tool( Program *program, Tool *tool ) { program_detach( program ); if( tool ) { program_select_kit_sub( program, tool->kit ); program->tool = tool; program->pos = ICONTAINER( tool )->pos; program->tool_destroy_sid = g_signal_connect( G_OBJECT( tool ), "destroy", G_CALLBACK( program_tool_destroy ), program ); program_set_text_tool( program, tool ); } program_refresh( program ); } static char * program_get_text( Program *program ) { GtkTextView *text_view = GTK_TEXT_VIEW( program->text ); GtkTextBuffer *text_buffer = gtk_text_view_get_buffer( text_view ); GtkTextIter start_iter; GtkTextIter end_iter; char *text; gtk_text_buffer_get_start_iter( text_buffer, &start_iter ); gtk_text_buffer_get_end_iter( text_buffer, &end_iter ); text = gtk_text_buffer_get_text( text_buffer, &start_iter, &end_iter, FALSE ); return( text ); } /* Read and parse the text. */ static gboolean program_parse( Program *program ) { char *txt; char buffer[MAX_STRSIZE]; Compile *compile; if( !program->dirty ) return( TRUE ); /* Irritatingly, we need to append a ';'. Also, update the hash, so we * don't set the same text back again if we can help it. */ txt = program_get_text( program ); program->text_hash = g_str_hash( txt ); im_snprintf( buffer, MAX_STRSIZE, "%s;", txt ); IM_FREEF( g_free, txt ); if( strspn( buffer, WHITESPACE ";" ) == strlen( buffer ) ) return( TRUE ); /* Make sure we've got a kit. */ if( !program->kit ) program_select_kit_sub( program, program->kit ); compile = program->kit->kitg->root->expr->compile; #ifdef DEBUG printf( "program_parse: parsing to kit \"%s\", pos %d\n", IOBJECT( program->kit )->name, program->pos ); #endif /*DEBUG*/ /* ... and parse the new text into it. */ attach_input_string( buffer ); if( !parse_onedef( program->kit, program->pos ) ) { text_view_select_text( GTK_TEXT_VIEW( program->text ), input_state.charpos - yyleng, input_state.charpos ); return( FALSE ); } program->dirty = FALSE; if( program->kit ) filemodel_set_modified( FILEMODEL( program->kit ), TRUE ); /* Reselect last_sym, the last thing the parser saw. */ if( compile->last_sym && compile->last_sym->tool ) program_select_tool( program, compile->last_sym->tool ); symbol_recalculate_all(); return( TRUE ); } static void program_tool_new_action_cb( GtkAction *action, Program *program ) { /* Existing text changed? Parse it. */ if( program->dirty && !program_parse( program ) ) { iwindow_alert( GTK_WIDGET( program ), GTK_MESSAGE_ERROR ); return; } program_select_kit( program, program->kit ); } static void program_toolkit_new_done_cb( iWindow *iwnd, void *client, iWindowNotifyFn nfn, void *sys ) { Stringset *ss = STRINGSET( iwnd ); StringsetChild *name = stringset_child_get( ss, _( "Name" ) ); StringsetChild *caption = stringset_child_get( ss, _( "Caption" ) ); Program *program = PROGRAM( client ); Toolkit *kit; char txt[1024]; VipsBuf buf = VIPS_BUF_STATIC( txt ); char name_text[1024]; char caption_text[1024]; if( !get_geditable_name( name->entry, name_text, 1024 ) || !get_geditable_string( caption->entry, caption_text, 1024 ) ) { nfn( sys, IWINDOW_ERROR ); return; } /* Make a filename from the name ... user start directory. */ vips_buf_appendf( &buf, "$SAVEDIR" G_DIR_SEPARATOR_S "start" G_DIR_SEPARATOR_S "%s.def", name_text ); kit = toolkit_new_filename( main_toolkitgroup, vips_buf_all( &buf ) ); /* Set caption. */ if( strspn( caption_text, WHITESPACE ) != strlen( caption_text ) ) iobject_set( IOBJECT( kit ), NULL, caption_text ); else iobject_set( IOBJECT( kit ), NULL, "untitled" ); program_select_kit( program, kit ); nfn( sys, IWINDOW_YES ); } static void program_toolkit_new_action_cb( GtkAction *action, Program *program ) { GtkWidget *ss = stringset_new(); stringset_child_new( STRINGSET( ss ), _( "Name" ), "", _( "Set toolkit name here" ) ); stringset_child_new( STRINGSET( ss ), _( "Caption" ), "", _( "Set toolkit caption here" ) ); iwindow_set_title( IWINDOW( ss ), _( "New Toolkit" ) ); idialog_set_callbacks( IDIALOG( ss ), iwindow_true_cb, NULL, NULL, program ); idialog_add_ok( IDIALOG( ss ), program_toolkit_new_done_cb, _( "Create" ) ); iwindow_set_parent( IWINDOW( ss ), GTK_WIDGET( program ) ); iwindow_build( IWINDOW( ss ) ); gtk_widget_show( ss ); } static gboolean program_check_kit( Program *program ) { if( !program->kit ) { error_top( _( "Nothing selected." ) ); error_sub( "%s", _( "No toolkit selected." ) ); iwindow_alert( GTK_WIDGET( program ), GTK_MESSAGE_INFO ); return( FALSE ); } return( TRUE ); } static void program_separator_new_action_cb( GtkAction *action, Program *program ) { Tool *tool; int pos; if( !program_check_kit( program ) ) return; pos = icontainer_pos_last( ICONTAINER( program->kit ) ); tool = tool_new_sep( program->kit, pos + 1 ); program_select_tool( program, tool ); } static void program_column_item_new_done_cb( iWindow *iwnd, void *client, iWindowNotifyFn nfn, void *sys ) { Stringset *ss = STRINGSET( iwnd ); StringsetChild *name = stringset_child_get( ss, _( "Name" ) ); StringsetChild *file = stringset_child_get( ss, _( "Filename" ) ); Program *program = PROGRAM( client ); Tool *tool; int pos; char name_text[1024]; char file_text[1024]; if( !get_geditable_name( name->entry, name_text, 1024 ) || !get_geditable_filename( file->entry, file_text, 1024 ) ) { nfn( sys, IWINDOW_ERROR ); return; } pos = icontainer_pos_last( ICONTAINER( program->kit ) ); tool = tool_new_dia( program->kit, pos + 1, name_text, file_text ); program_select_tool( program, tool ); nfn( sys, IWINDOW_YES ); } static void program_column_item_new_action_cb( GtkAction *action, Program *program ) { GtkWidget *ss; if( !program_check_kit( program ) ) return; ss = stringset_new(); stringset_child_new( STRINGSET( ss ), _( "Name" ), "", _( "Display this name" ) ); stringset_child_new( STRINGSET( ss ), _( "Filename" ), "", _( "Load this file" ) ); iwindow_set_title( IWINDOW( ss ), "New Column Item" ); idialog_set_callbacks( IDIALOG( ss ), iwindow_true_cb, NULL, NULL, program ); idialog_add_ok( IDIALOG( ss ), program_column_item_new_done_cb, _( "Create" ) ); iwindow_set_parent( IWINDOW( ss ), GTK_WIDGET( program ) ); iwindow_build( IWINDOW( ss ) ); gtk_widget_show( ss ); } static void program_program_new_action_cb( GtkAction *action, Program *program ) { Program *program2; program2 = program_new( program->kitg ); gtk_widget_show( GTK_WIDGET( program2 ) ); } static void * program_load_file_fn( Filesel *filesel, const char *filename, Program *program, void *b ) { Toolkit *kit; if( !(kit = toolkit_new_from_file( main_toolkitgroup, filename )) ) return( filesel ); program_select_kit( program, kit ); return( NULL ); } /* Callback from load browser. */ static void program_load_file_cb( iWindow *iwnd, void *client, iWindowNotifyFn nfn, void *sys ) { Filesel *filesel = FILESEL( iwnd ); Program *program = PROGRAM( client ); if( filesel_map_filename_multi( filesel, (FileselMapFn) program_load_file_fn, program, NULL ) ) { nfn( sys, IWINDOW_ERROR ); return; } symbol_recalculate_all(); nfn( sys, IWINDOW_YES ); } static void program_open_action_cb( GtkAction *action, Program *program ) { GtkWidget *filesel = filesel_new(); iwindow_set_title( IWINDOW( filesel ), _( "Load Definition" ) ); filesel_set_flags( FILESEL( filesel ), FALSE, FALSE ); filesel_set_filetype( FILESEL( filesel ), filesel_type_definition, 0 ); iwindow_set_parent( IWINDOW( filesel ), GTK_WIDGET( program ) ); filesel_set_done( FILESEL( filesel ), program_load_file_cb, program ); filesel_set_multi( FILESEL( filesel ), TRUE ); iwindow_build( IWINDOW( filesel ) ); gtk_widget_show( GTK_WIDGET( filesel ) ); } static void program_save_action_cb( GtkAction *action, Program *program ) { if( !program_check_kit( program ) ) return; filemodel_inter_save( IWINDOW( program ), FILEMODEL( program->kit ) ); } static void program_save_as_action_cb( GtkAction *action, Program *program ) { if( !program_check_kit( program ) ) return; filemodel_inter_saveas( IWINDOW( program ), FILEMODEL( program->kit ) ); } static void program_process_action_cb( GtkAction *action, Program *program ) { if( !program_parse( program ) ) iwindow_alert( GTK_WIDGET( program ), GTK_MESSAGE_ERROR ); } static void program_reload_menus_cb( iWindow *iwnd, void *client, iWindowNotifyFn nfn, void *sys ) { main_reload(); symbol_recalculate_all(); nfn( sys, IWINDOW_YES ); } /* Reload all menus. */ static void program_reload_action_cb( GtkAction *action, Program *program ) { box_yesno( GTK_WIDGET( program ), program_reload_menus_cb, iwindow_true_cb, NULL, iwindow_notify_null, NULL, _( "Reload" ), _( "Reload startup objects?" ), _( "Would you like to reload all startup menus, workspaces " "and plugins now? This may take a few seconds." ) ); } static void program_cut_action_cb( GtkAction *action, Program *program ) { GtkTextView *text_view = GTK_TEXT_VIEW( program->text ); GtkTextBuffer *text_buffer = gtk_text_view_get_buffer( text_view ); GtkClipboard *clipboard = gtk_widget_get_clipboard( GTK_WIDGET( text_view ), GDK_SELECTION_CLIPBOARD ); gboolean editable = !program->kit || !program->kit->pseudo; gtk_text_buffer_cut_clipboard( text_buffer, clipboard, editable ); } static void program_copy( Program *program ) { GtkTextView *text_view = GTK_TEXT_VIEW( program->text ); GtkTextBuffer *text_buffer = gtk_text_view_get_buffer( text_view ); GtkClipboard *clipboard = gtk_widget_get_clipboard( GTK_WIDGET( text_view ), GDK_SELECTION_CLIPBOARD ); gtk_text_buffer_copy_clipboard( text_buffer, clipboard ); } static void program_copy_action_cb( GtkAction *action, Program *program ) { program_copy( program ); } static void program_paste_action_cb( GtkAction *action, Program *program ) { GtkTextView *text_view = GTK_TEXT_VIEW( program->text ); GtkTextBuffer *text_buffer = gtk_text_view_get_buffer( text_view ); GtkClipboard *clipboard = gtk_widget_get_clipboard( GTK_WIDGET( text_view ), GDK_SELECTION_CLIPBOARD ); gboolean editable = !program->kit || !program->kit->pseudo; gtk_text_buffer_paste_clipboard( text_buffer, clipboard, NULL, editable ); } static void program_delete_action_cb( GtkAction *action, Program *program ) { GtkTextView *text_view = GTK_TEXT_VIEW( program->text ); GtkTextBuffer *text_buffer = gtk_text_view_get_buffer( text_view ); gboolean editable = !program->kit || !program->kit->pseudo; gtk_text_buffer_delete_selection( text_buffer, TRUE, editable ); } static void program_select_all_action_cb( GtkAction *action, Program *program ) { text_view_select_text( GTK_TEXT_VIEW( program->text ), 0, -1 ); } static void program_deselect_all_action_cb( GtkAction *action, Program *program ) { GtkTextView *text_view = GTK_TEXT_VIEW( program->text ); GtkTextBuffer *text_buffer = gtk_text_view_get_buffer( text_view ); GtkTextMark *mark = gtk_text_buffer_get_insert( text_buffer ); GtkTextIter iter; gtk_text_buffer_get_iter_at_mark( text_buffer, &iter, mark ); gtk_text_buffer_select_range( text_buffer, &iter, &iter ); } static void program_remove_tool_action_cb( GtkAction *action, Program *program ) { Model *model = program_get_selected( program ); if( model && IS_TOOL( model ) ) model_check_destroy( GTK_WIDGET( program ), model, NULL ); else { error_top( _( "No tool selected" ) ); iwindow_alert( GTK_WIDGET( program ), GTK_MESSAGE_INFO ); } } static void program_remove_toolkit_action_cb( GtkAction *action, Program *program ) { if( !program_check_kit( program ) ) return; model_check_destroy( GTK_WIDGET( program ), MODEL( program->kit ), NULL ); } static void program_find_done_cb( iWindow *iwnd, void *client, iWindowNotifyFn nfn, void *sys ) { Find *find = FIND( iwnd ); Program *program = PROGRAM( client ); IM_FREEF( g_free, program->search ); program->search = gtk_editable_get_chars( GTK_EDITABLE( find->search ), 0, -1 ); program->csens = GTK_TOGGLE_BUTTON( find->csens )->active; program->fromtop = GTK_TOGGLE_BUTTON( find->fromtop )->active; #ifdef HAVE_GREGEX program->regexp = GTK_TOGGLE_BUTTON( find->regexp )->active; if( program->regexp ) { GRegexCompileFlags cflags = 0; GRegexMatchFlags mflags = 0; if( !program->csens ) cflags |= G_REGEX_CASELESS; IM_FREEF( g_regex_unref, program->comp ); if( !(program->comp = g_regex_new( program->search, cflags, mflags, NULL )) ) { error_top( _( "Parse error." ) ); error_sub( _( "Bad regular expression." ) ); nfn( sys, IWINDOW_ERROR ); return; } } #endif /*HAVE_GREGEX*/ if( program->fromtop ) program_find_reset( program ); else program->find_start += 1; if( program_find( program ) ) { program_select_tool( program, program->find_sym->tool ); text_view_select_text( GTK_TEXT_VIEW( program->text ), program->find_start, program->find_end ); } else { error_top( _( "Not found." ) ); error_sub( _( "No match found for \"%s\"." ), program->search ); nfn( sys, IWINDOW_ERROR ); return; } nfn( sys, IWINDOW_YES ); } static void program_find_action_cb( GtkAction *action, Program *program ) { GtkWidget *find = find_new(); iwindow_set_title( IWINDOW( find ), _( "Find in all Toolkits" ) ); idialog_set_callbacks( IDIALOG( find ), iwindow_true_cb, NULL, NULL, program ); idialog_add_ok( IDIALOG( find ), program_find_done_cb, GTK_STOCK_FIND ); iwindow_set_parent( IWINDOW( find ), GTK_WIDGET( program ) ); idialog_set_cancel_text( IDIALOG( find ), GTK_STOCK_CLOSE ); iwindow_build( IWINDOW( find ) ); if( program->search ) set_gentry( FIND( find )->search, "%s", program->search ); set_tooltip( FIND( find )->search, _( "Enter search string here" ) ); gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( FIND( find )->csens ), program->csens ); #ifdef HAVE_GREGEX gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( FIND( find )->regexp ), program->regexp ); #endif /*HAVE_GREGEX*/ gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( FIND( find )->fromtop ), program->fromtop ); gtk_widget_show( find ); } static void program_find_again_action_cb( GtkAction *action, Program *program ) { if( !program->search ) return; if( program->find_sym ) program->find_start += 1; if( program_find( program ) ) { program_select_tool( program, program->find_sym->tool ); text_view_select_text( GTK_TEXT_VIEW( program->text ), program->find_start, program->find_end ); } else { error_top( _( "Not found." ) ); iwindow_alert( GTK_WIDGET( program ), GTK_MESSAGE_INFO ); } } static void program_goto_done_cb( iWindow *iwnd, void *client, iWindowNotifyFn nfn, void *sys ) { Program *program = PROGRAM( client ); Stringset *ss = STRINGSET( iwnd ); StringsetChild *name = stringset_child_get( ss, _( "Name" ) ); Symbol *sym; char name_text[1024]; if( !get_geditable_string( name->entry, name_text, 1024 ) ) { nfn( sys, IWINDOW_ERROR ); return; } if( !(sym = compile_lookup( program->kitg->root->expr->compile, name_text )) ) { error_top( _( "Not found." ) ); error_sub( _( "No top-level symbol called \"%s\"." ), name_text ); nfn( sys, IWINDOW_ERROR ); return; } if( !sym->tool ) { error_top( _( "Not found." ) ); error_sub( _( "Symbol \"%s\" has no tool inforation." ), name_text ); nfn( sys, IWINDOW_ERROR ); return; } if( !program_select( program, MODEL( sym->tool ) ) ) { nfn( sys, IWINDOW_ERROR ); return; } nfn( sys, IWINDOW_YES ); } static void program_goto_action_cb( GtkAction *action, Program *program ) { GtkWidget *ss = stringset_new(); StringsetChild *name; name = stringset_child_new( STRINGSET( ss ), _( "Name" ), "", _( "Go to definition of this symbol" ) ); iwindow_set_title( IWINDOW( ss ), _( "Go to Definition" ) ); idialog_set_callbacks( IDIALOG( ss ), iwindow_true_cb, NULL, NULL, program ); idialog_add_ok( IDIALOG( ss ), program_goto_done_cb, GTK_STOCK_JUMP_TO ); idialog_set_pinup( IDIALOG( ss ), TRUE ); iwindow_set_parent( IWINDOW( ss ), GTK_WIDGET( program ) ); iwindow_build( IWINDOW( ss ) ); gtk_widget_show( ss ); /* Now try to paste the selection into the name widget. FIXME ... get rid of this, have a right-button menu on the text widget which includes a 'go to def' item. or could make sym names into hyperlinks? see text demo example */ program_copy( program ); gtk_editable_paste_clipboard( GTK_EDITABLE( name->entry ) ); } static void program_info_action_cb( GtkAction *action, Program *program ) { char txt[MAX_STRSIZE]; VipsBuf buf = VIPS_BUF_STATIC( txt ); program_info( program, &buf ); error_top( _( "Object information." ) ); error_sub( "%s", vips_buf_all( &buf ) ); iwindow_alert( GTK_WIDGET( program ), GTK_MESSAGE_INFO ); } static void program_trace_action_cb( GtkAction *action, Program *program ) { (void) trace_new(); } static void program_errorreport_action_cb( GtkAction *action, Program *program ) { iError *ierror; ierror = ierror_new( program->kitg ); gtk_widget_show( GTK_WIDGET( ierror ) ); #ifdef DEBUG /* Dump VIPS memory usage info for debugging. */ im__print_all(); #endif /*DEBUG*/ } static void program_tool_help_action_cb( GtkAction *action, Program *program ) { if( program->tool && program->tool->type == TOOL_SYM && program->kit && program->kit->pseudo ) { switch( program->tool->sym->type ) { case SYM_EXTERNAL: /* With vips7 we displayed the man page. When we go * properly vips8, display the API docs. * char txt[512]; VipsBuf buf = VIPS_BUF_STATIC( txt ); vips_buf_appendf( &buf, "file://" VIPS_DOCPATH "/man/%s.3.html", IOBJECT( program->tool->sym )->name ); box_url( GTK_WIDGET( program ), vips_buf_all( &buf ) ); * */ break; case SYM_BUILTIN: box_help( GTK_WIDGET( program ), "tb:builtin" ); break; default: break; } } else { error_top( _( "No documentation available." ) ); error_sub( "%s", _( "On-line documentation is only currently " "available for VIPS functions and nip builtins." ) ); iwindow_alert( GTK_WIDGET( program ), GTK_MESSAGE_INFO ); } } /* Expose/hide the definition browser. */ static void program_defbrowser_action_cb( GtkToggleAction *action, Program *program ) { if( gtk_toggle_action_get_active( action ) ) pane_animate_open( program->rpane ); else pane_animate_closed( program->rpane ); } /* Our actions. */ static GtkActionEntry program_actions[] = { /* Menu items. */ { "DebugMenu", NULL, "_Debug" }, /* Actions. */ { "NewTool", GTK_STOCK_NEW, N_( "New _Tool" ), NULL, N_( "Make a new tool" ), G_CALLBACK( program_tool_new_action_cb ) }, { "NewToolkit", GTK_STOCK_NEW, N_( "New Tool_kit" ), NULL, N_( "Make a new toolkit" ), G_CALLBACK( program_toolkit_new_action_cb ) }, { "NewSeparator", GTK_STOCK_NEW, N_( "New _Separator" ), NULL, N_( "Make a new separator" ), G_CALLBACK( program_separator_new_action_cb ) }, { "NewColumnItem", GTK_STOCK_NEW, N_( "New _Column Item" ), NULL, N_( "Make a new column item" ), G_CALLBACK( program_column_item_new_action_cb ) }, { "NewProgram", GTK_STOCK_NEW, N_( "New _Program Window" ), NULL, N_( "Make a new program window" ), G_CALLBACK( program_program_new_action_cb ) }, { "Open", GTK_STOCK_OPEN, N_( "_Open Toolkit" ), NULL, N_( "_Open toolkit" ), G_CALLBACK( program_open_action_cb ) }, { "Save", GTK_STOCK_SAVE, N_( "Save Toolkit" ), NULL, N_( "_Save toolkit" ), G_CALLBACK( program_save_action_cb ) }, { "SaveAs", GTK_STOCK_SAVE_AS, N_( "Save Toolkit _As" ), NULL, N_( "Save toolkit as" ), G_CALLBACK( program_save_as_action_cb ) }, { "Process", NULL, N_( "_Process" ), NULL, N_( "Process text" ), G_CALLBACK( program_process_action_cb ) }, { "Reload", NULL, N_( "_Reload All Toolkits" ), NULL, N_( "Remove and reload all startup data" ), G_CALLBACK( program_reload_action_cb ) }, { "Cut", GTK_STOCK_CUT, N_( "C_ut" ), NULL, N_( "Cut selected text" ), G_CALLBACK( program_cut_action_cb ) }, { "Copy", GTK_STOCK_COPY, N_( "_Copy" ), NULL, N_( "Copy selected text" ), G_CALLBACK( program_copy_action_cb ) }, { "Paste", GTK_STOCK_PASTE, N_( "_Paste" ), NULL, N_( "Paste selected text" ), G_CALLBACK( program_paste_action_cb ) }, { "Delete", GTK_STOCK_DELETE, N_( "_Delete" ), NULL, N_( "Delete selected text" ), G_CALLBACK( program_delete_action_cb ) }, { "SelectAll", NULL, N_( "Select _All" ), NULL, N_( "Select all text" ), G_CALLBACK( program_select_all_action_cb ) }, { "DeselectAll", NULL, N_( "Dese_lect All" ), NULL, N_( "Deselect all text" ), G_CALLBACK( program_deselect_all_action_cb ) }, { "DeleteTool", NULL, N_( "Delete _Tool" ), NULL, N_( "Delete current tool" ), G_CALLBACK( program_remove_tool_action_cb ) }, { "DeleteToolkit", NULL, N_( "Delete Tool_kit" ), NULL, N_( "Delete current toolkit" ), G_CALLBACK( program_remove_toolkit_action_cb ) }, { "Find", GTK_STOCK_FIND, N_( "_Find" ), NULL, N_( "Find text in toolkits" ), G_CALLBACK( program_find_action_cb ) }, { "FindNext", NULL, N_( "Find _Next" ), "G", N_( "Find text again" ), G_CALLBACK( program_find_again_action_cb ) }, { "JumpTo", GTK_STOCK_JUMP_TO, N_( "_Jump To Definition" ), NULL, N_( "Jump to definition" ), G_CALLBACK( program_goto_action_cb ) }, { "Info", NULL, N_( "_Info" ), NULL, N_( "Info on selected object" ), G_CALLBACK( program_info_action_cb ) }, { "Trace", NULL, N_( "_Trace" ), NULL, N_( "Make a new trace window" ), G_CALLBACK( program_trace_action_cb ) }, { "Errors", NULL, N_( "_Errors" ), NULL, N_( "Show all errors" ), G_CALLBACK( program_errorreport_action_cb ) }, { "HelpTool", NULL, N_( "Help on _Tool" ), NULL, N_( "View docs for this tool" ), G_CALLBACK( program_tool_help_action_cb ) } }; static GtkToggleActionEntry program_toggle_actions[] = { { "DefBrowser", NULL, N_( "Definition _Browser" ), NULL, N_( "Show definition browser" ), G_CALLBACK( program_defbrowser_action_cb ), FALSE } }; static const char *program_menubar_ui_description = "" " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " ""; static void program_lpane_changed_cb( Pane *pane, Program *program ) { } static void program_rpane_changed_cb( Pane *pane, Program *program ) { if( program->rpane_open != pane->open || program->rpane_position != pane->user_position ) { program->rpane_open = pane->open; program->rpane_position = pane->user_position; program_refresh( program ); } } gboolean program_select( Program *program, Model *model ) { /* Existing text changed? Parse it. */ if( program->dirty && !program_parse( program ) ) return( FALSE ); if( model ) { if( IS_TOOL( model ) ) program_select_tool( program, TOOL( model ) ); else if( IS_TOOLKIT( model ) ) program_select_kit( program, TOOLKIT( model ) ); } return( TRUE ); } /* Select a row from an iter. */ static void program_select_row( Program *program, GtkTreeIter *iter ) { Tool *tool; Toolkit *kit; Model *model; gtk_tree_model_get( GTK_TREE_MODEL( program->store ), iter, TOOL_POINTER_COLUMN, &tool, KIT_POINTER_COLUMN, &kit, -1 ); if( tool ) model = MODEL( tool ); else model = MODEL( kit ); if( !program_select( program, model ) ) iwindow_alert( GTK_WIDGET( program ), GTK_MESSAGE_ERROR ); } static void program_row_collapsed_cb( GtkTreeView *tree, GtkTreeIter *iter, GtkTreePath *path, Program *program ) { Toolkit *kit; #ifdef DEBUG printf( "program_row_collapsed_cb:\n" ); printf( " path = %s\n", gtk_tree_path_to_string( path ) ); #endif /*DEBUG*/ gtk_tree_model_get( GTK_TREE_MODEL( program->store ), iter, KIT_POINTER_COLUMN, &kit, -1 ); /* If we have collapsed the kit containing the currently selected * tool, the kit will just bounce open again when we refresh the tree. * Unselect the tool. */ if( program->kit == kit ) program_select_kit( program, kit ); } static void program_selection_changed_cb( GtkTreeSelection *select, Program *program ) { GtkTreeIter iter; GtkTreeModel *model; #ifdef DEBUG printf( "program_selection_changed_cb:\n" ); #endif /*DEBUG*/ if( gtk_tree_selection_get_selected( select, &model, &iter ) ) { #ifdef DEBUG printf( " selection = %s\n", gtk_tree_path_to_string ( gtk_tree_model_get_path( model, &iter ) ) ); #endif /*DEBUG*/ program_select_row( program, &iter ); } program_refresh( program ); } static gboolean program_tree_event_cb( GtkTreeView *tree, GdkEvent *ev, Program *program ) { GtkTreePath *path; gboolean handled = FALSE; if( ev->type == GDK_BUTTON_PRESS && ev->button.button == 3 && gtk_tree_view_get_path_at_pos( tree, ev->button.x, ev->button.y, &path, NULL, NULL, NULL ) ) { GtkTreeIter iter; gtk_tree_model_get_iter( GTK_TREE_MODEL( program->store ), &iter, path ); program_select_row( program, &iter ); gtk_tree_path_free( path ); popup_link( GTK_WIDGET( program ), program_menu, NULL ); popup_show( GTK_WIDGET( program ), ev ); handled = TRUE; } return( handled ); } static void program_row_inserted_cb( GtkTreeModel *treemodel, GtkTreePath *path, GtkTreeIter *iter, Program *program ) { GtkTreeIter iter2; GtkTreeIter iter3; #ifdef DEBUG printf( "program_row_inserted_cb:\n" ); printf( " path = %s\n", gtk_tree_path_to_string( path ) ); #endif /*DEBUG*/ program->to_pos = -1; program->to_kit = NULL; switch( gtk_tree_path_get_depth( path ) ) { case 3: program->to_pos = gtk_tree_path_get_indices( path )[1]; gtk_tree_model_iter_parent( GTK_TREE_MODEL( program->store ), &iter2, iter ); gtk_tree_model_iter_parent( GTK_TREE_MODEL( program->store ), &iter3, &iter2 ); gtk_tree_model_get( GTK_TREE_MODEL( program->store ), &iter3, KIT_POINTER_COLUMN, &program->to_kit, -1 ); break; case 2: program->to_pos = gtk_tree_path_get_indices( path )[1]; gtk_tree_model_iter_parent( GTK_TREE_MODEL( program->store ), &iter2, iter ); gtk_tree_model_get( GTK_TREE_MODEL( program->store ), &iter2, KIT_POINTER_COLUMN, &program->to_kit, -1 ); break; case 1: program->to_pos = -1; gtk_tree_model_get( GTK_TREE_MODEL( program->store ), iter, KIT_POINTER_COLUMN, &program->to_kit, -1 ); break; } #ifdef DEBUG if( program->to_kit ) { printf( " to_kit = " ); iobject_print( IOBJECT( program->to_kit ) ); } else printf( " to_kit = NULL\n" ); printf( " to_pos = %d\n", program->to_pos ); #endif /*DEBUG*/ } static void program_row_deleted_cb( GtkTreeModel *treemodel, GtkTreePath *path, Program *program ) { #ifdef DEBUG printf( "program_row_deleted_cb:\n" ); printf( " delete path = %s\n", gtk_tree_path_to_string( path ) ); #endif /*DEBUG*/ if( !program->to_kit || !program->tool ) { error_top( _( "Bad drag." ) ); error_sub( "%s", _( "Sorry, you can only drag tools between toolkits. " "You can't reorder toolkits, you can't nest toolkits " "and you can't drag tools to the top level." ) ); iwindow_alert( GTK_WIDGET( program ), GTK_MESSAGE_INFO ); return; } #ifdef DEBUG printf( " to_kit = " ); iobject_print( IOBJECT( program->to_kit ) ); printf( " to_pos = %d\n", program->to_pos ); printf( " selected tool = " ); iobject_print( IOBJECT( program->tool ) ); #endif /*DEBUG*/ /* Move tool. */ g_object_ref( G_OBJECT( program->tool ) ); icontainer_child_remove( ICONTAINER( program->tool ) ); icontainer_child_add( ICONTAINER( program->to_kit ), ICONTAINER( program->tool ), program->to_pos ); g_object_unref( G_OBJECT( program->tool ) ); filemodel_set_modified( FILEMODEL( program->to_kit ), TRUE ); iobject_changed( IOBJECT( program->tool ) ); } static void program_edit_map_cb( GtkWidget *widget, Program *program ) { iWindow *iwnd = IWINDOW( program ); GtkClipboard *clipboard = gtk_widget_get_clipboard( GTK_WIDGET( program ), GDK_SELECTION_CLIPBOARD ); GtkTextView *text_view = GTK_TEXT_VIEW( program->text ); GtkTextBuffer *text_buffer = gtk_text_view_get_buffer( text_view ); gboolean editable = !program->kit || !program->kit->pseudo; gboolean available = gtk_clipboard_wait_is_text_available( clipboard ); gboolean selected = gtk_text_buffer_get_selection_bounds( text_buffer, NULL, NULL ); GtkAction *action; action = gtk_action_group_get_action( iwnd->action_group, "Paste" ); g_object_set( G_OBJECT( action ), "sensitive", available && editable, NULL ); action = gtk_action_group_get_action( iwnd->action_group, "Copy" ); g_object_set( G_OBJECT( action ), "sensitive", selected, NULL ); action = gtk_action_group_get_action( iwnd->action_group, "Cut" ); g_object_set( G_OBJECT( action ), "sensitive", selected && editable, NULL ); action = gtk_action_group_get_action( iwnd->action_group, "Delete" ); g_object_set( G_OBJECT( action ), "sensitive", selected && editable, NULL ); action = gtk_action_group_get_action( iwnd->action_group, "DeselectAll" ); g_object_set( G_OBJECT( action ), "sensitive", selected, NULL ); } static PangoTabArray * program_tabs_new( void ) { const int ntabs = 20; const int tab_width = 30; /* in pixels, about 4 chars */ PangoTabArray *tabs = pango_tab_array_new( ntabs, TRUE ); int i; for( i = 0; i < ntabs; i++ ) pango_tab_array_set_tab( tabs, i, PANGO_TAB_LEFT, i * tab_width ); return( tabs ); } GtkWidget * program_text_new( void ) { PangoFontDescription *font_desc; PangoTabArray *tabs; GtkWidget *text; text = gtk_text_view_new(); font_desc = pango_font_description_from_string( "Monospace" ); gtk_widget_modify_font( text, font_desc ); pango_font_description_free( font_desc ); tabs = program_tabs_new(); gtk_text_view_set_tabs( GTK_TEXT_VIEW( text ), tabs ); pango_tab_array_free( tabs ); return( text ); } static void program_build( Program *program, GtkWidget *vbox ) { iWindow *iwnd = IWINDOW( program ); GError *error; GtkWidget *mbar; GtkWidget *item; GtkCellRenderer *renderer; GtkTreeViewColumn *column; GtkTreeSelection *select; GtkWidget *swin; Panechild *panechild; GtkWidget *ebox; /* Make main menu bar */ gtk_action_group_add_actions( iwnd->action_group, program_actions, G_N_ELEMENTS( program_actions ), GTK_WINDOW( program ) ); gtk_action_group_add_toggle_actions( iwnd->action_group, program_toggle_actions, G_N_ELEMENTS( program_toggle_actions ), GTK_WINDOW( program ) ); error = NULL; if( !gtk_ui_manager_add_ui_from_string( iwnd->ui_manager, program_menubar_ui_description, -1, &error ) ) { g_message( "building menus failed: %s", error->message ); g_error_free( error ); exit( EXIT_FAILURE ); } mbar = gtk_ui_manager_get_widget( iwnd->ui_manager, "/ProgramMenubar" ); gtk_box_pack_start( GTK_BOX( vbox ), mbar, FALSE, FALSE, 0 ); gtk_widget_show( mbar ); /* On map of the edit menu, rethink cut/copy/paste sensitivity. */ item = gtk_ui_manager_get_widget( iwnd->ui_manager, "/ProgramMenubar/EditMenu/Cut" ); item = gtk_widget_get_parent( GTK_WIDGET( item ) ); gtk_signal_connect( GTK_OBJECT( item ), "map", GTK_SIGNAL_FUNC( program_edit_map_cb ), program ); /* This will set to NULL if we don't have infobar support. */ if( (IWINDOW( program )->infobar = infobar_new()) ) gtk_box_pack_start( GTK_BOX( vbox ), GTK_WIDGET( IWINDOW( program )->infobar ), FALSE, FALSE, 0 ); program->rpane = pane_new( PANE_HIDE_RIGHT ); g_signal_connect( program->rpane, "changed", G_CALLBACK( program_rpane_changed_cb ), program ); gtk_box_pack_start( GTK_BOX( vbox ), GTK_WIDGET( program->rpane ), TRUE, TRUE, 0 ); gtk_widget_show( GTK_WIDGET( program->rpane ) ); program->lpane = pane_new( PANE_HIDE_LEFT ); g_signal_connect( program->lpane, "changed", G_CALLBACK( program_lpane_changed_cb ), program ); gtk_paned_set_position( GTK_PANED( program->lpane ), program->pane_position ); gtk_paned_pack1( GTK_PANED( program->rpane ), GTK_WIDGET( program->lpane ), TRUE, FALSE ); gtk_widget_show( GTK_WIDGET( program->lpane ) ); swin = gtk_scrolled_window_new( NULL, NULL ); gtk_scrolled_window_set_policy( GTK_SCROLLED_WINDOW( swin ), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC ); gtk_paned_pack1( GTK_PANED( program->lpane ), swin, FALSE, FALSE ); gtk_widget_show( swin ); program->store = gtk_tree_store_new( N_COLUMNS, G_TYPE_STRING, G_TYPE_POINTER, G_TYPE_POINTER ); program->row_inserted_sid = g_signal_connect( G_OBJECT( program->store ), "row_inserted", G_CALLBACK( program_row_inserted_cb ), program ); program->row_deleted_sid = g_signal_connect( G_OBJECT( program->store ), "row_deleted", G_CALLBACK( program_row_deleted_cb ), program ); program->tree = gtk_tree_view_new_with_model( GTK_TREE_MODEL( program->store ) ); renderer = gtk_cell_renderer_text_new(); column = gtk_tree_view_column_new_with_attributes( _( "Tool" ), renderer, "text", NAME_COLUMN, NULL ); gtk_tree_view_append_column( GTK_TREE_VIEW( program->tree ), column ); g_signal_connect( G_OBJECT( program->tree ), "row_collapsed", G_CALLBACK( program_row_collapsed_cb ), program ); gtk_container_add( GTK_CONTAINER( swin ), program->tree ); gtk_tree_view_set_headers_visible( GTK_TREE_VIEW( program->tree ), FALSE ); gtk_tree_view_set_enable_search( GTK_TREE_VIEW( program->tree ), TRUE ); gtk_tree_view_set_reorderable( GTK_TREE_VIEW( program->tree ), TRUE ); select = gtk_tree_view_get_selection( GTK_TREE_VIEW( program->tree ) ); gtk_tree_selection_set_mode( select, GTK_SELECTION_SINGLE ); program->select_changed_sid = g_signal_connect( G_OBJECT( select ), "changed", G_CALLBACK( program_selection_changed_cb ), program ); gtk_signal_connect( GTK_OBJECT( program->tree ), "event", GTK_SIGNAL_FUNC( program_tree_event_cb ), program ); gtk_widget_show( program->tree ); /* Toolkit Browser pane. */ panechild = panechild_new( program->rpane, _( "Definition Browser" ) ); /* Have to put toolkitbrowser in an ebox so the search entry gets * clipped to the pane size. */ ebox = gtk_event_box_new(); gtk_container_add( GTK_CONTAINER( panechild ), GTK_WIDGET( ebox ) ); gtk_widget_show( ebox ); program->defbrowser = defbrowser_new(); vobject_link( VOBJECT( program->defbrowser ), IOBJECT( program->kitg ) ); defbrowser_set_program( program->defbrowser, program ); gtk_container_add( GTK_CONTAINER( ebox ), GTK_WIDGET( program->defbrowser ) ); gtk_widget_show( GTK_WIDGET( program->defbrowser ) ); swin = gtk_scrolled_window_new( NULL, NULL ); gtk_scrolled_window_set_policy( GTK_SCROLLED_WINDOW( swin ), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC ); gtk_paned_pack2( GTK_PANED( program->lpane ), swin, TRUE, TRUE ); gtk_widget_show( swin ); program->text = program_text_new(); g_signal_connect( gtk_text_view_get_buffer( GTK_TEXT_VIEW( program->text ) ), "notify::cursor-position", G_CALLBACK( program_text_cursor_position ), program ); g_signal_connect( gtk_text_view_get_buffer( GTK_TEXT_VIEW( program->text ) ), "changed", G_CALLBACK( program_text_changed ), program ); gtk_container_add( GTK_CONTAINER( swin ), program->text ); gtk_widget_show( program->text ); gtk_widget_grab_focus( program->text ); } static void program_popdown( iWindow *iwnd, void *client, iWindowNotifyFn nfn, void *sys ) { Program *program = PROGRAM( iwnd ); prefs_set( "PROGRAM_PANE_POSITION", "%d", gtk_paned_get_position( GTK_PANED( program->lpane ) ) ); /* We can't parse in popdown, we may have lost too much of the rest of * nip2 before here. */ nfn( sys, IWINDOW_YES ); } static void program_link( Program *program, Toolkitgroup *kitg ) { program->kitg = kitg; program_title( program ); iwindow_set_size_prefs( IWINDOW( program ), "PROGRAM_WIDTH", "PROGRAM_HEIGHT" ); iwindow_set_build( IWINDOW( program ), (iWindowBuildFn) program_build, NULL, NULL, NULL ); iwindow_set_popdown( IWINDOW( program ), program_popdown, NULL ); iwindow_build( IWINDOW( program ) ); program_all = g_slist_prepend( program_all, program ); program_refresh( program ); program->kitgroup_changed_sid = g_signal_connect( G_OBJECT( program->kitg ), "changed", G_CALLBACK( program_kitgroup_changed ), program ); program->kitgroup_destroy_sid = g_signal_connect( G_OBJECT( program->kitg ), "destroy", G_CALLBACK( program_kitgroup_destroy ), program ); pane_set_state( program->rpane, program->rpane_open, program->rpane_position ); } Program * program_new( Toolkitgroup *kitg ) { Program *program = gtk_type_new( TYPE_PROGRAM ); program_link( program, kitg ); return( program ); } nip2-8.7.0/src/nip2-cli.c0000644000175000017500000001204713224651032011671 00000000000000/* nip2-cli.c ... run the nip2 executable, connecting stdin and stdout to the * console * * 11/12/09 * - use SetHandleInformation() to stop the child inheriting the read * handle (thanks Leo) */ /* Copyright (C) 2008 Imperial College, London This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* Adapted from sample code by Leo Davidson, with the author's permission. */ /* Windows does not let a single exe run in both command-line and GUI mode. To * run nip2 in command-line mode, we run this CLI wrapper program instead, * which starts the main nip2 exe, connecting stdin/out/err appropriately. */ #include #include #include #include #include void print_last_error () { char *buf; if (FormatMessageA (FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError (), MAKELANGID (LANG_NEUTRAL, SUBLANG_DEFAULT), (LPSTR) & buf, 0, NULL)) { fprintf (stderr, "%s", buf); LocalFree (buf); } } int main (int argc, char **argv) { char *dirname; char command[2048]; gboolean quote; int i, j; HANDLE hChildStdoutRd; HANDLE hChildStdoutWr; SECURITY_ATTRIBUTES saAttr; PROCESS_INFORMATION processInformation; STARTUPINFO startUpInfo; DWORD dwRead; CHAR buf[1024]; /* we run the nip2.exe in the same directory as this exe: swap the last * pathname component for nip2.exe * we change the argv[0] pointer, probably not a good idea */ dirname = g_path_get_dirname (argv[0]); argv[0] = g_build_filename (dirname, "nip2.exe", NULL); g_free (dirname); if (_access (argv[0], 00)) { fprintf (stderr, "cannot access \"%s\"\n", argv[0]); exit (1); } /* build the command string ... we have to quote items containing spaces */ command[0] = '\0'; for (i = 0; i < argc; i++) { quote = FALSE; for (j = 0; argv[i][j]; j++) { if (isspace (argv[i][j])) { quote = TRUE; break; } } if (i > 0) { strncat (command, " ", sizeof (command) - 1); } if (quote) { strncat (command, "\"", sizeof (command) - 1); } strncat (command, argv[i], sizeof (command) - 1); if (quote) { strncat (command, "\"", sizeof (command) - 1); } } if (strlen (command) == sizeof (command) - 1) { fprintf (stderr, "command too long\n"); exit (1); } /* Create a pipe for the child process's STDOUT. */ hChildStdoutRd = NULL; hChildStdoutWr = NULL; saAttr.nLength = sizeof (SECURITY_ATTRIBUTES); saAttr.bInheritHandle = TRUE; saAttr.lpSecurityDescriptor = NULL; if (!CreatePipe (&hChildStdoutRd, &hChildStdoutWr, &saAttr, 0)) { fprintf (stderr, "CreatePipe failed: "); print_last_error (); fprintf (stderr, "\n"); exit (1); } /* Ensure the read handle to the pipe for STDOUT is not inherited. */ if (!SetHandleInformation(hChildStdoutRd, HANDLE_FLAG_INHERIT, 0)) { fprintf (stderr, "SetHandleInformation failed: "); print_last_error (); fprintf (stderr, "\n"); exit (1); } /* Run command. */ startUpInfo.cb = sizeof (STARTUPINFO); startUpInfo.lpReserved = NULL; startUpInfo.lpDesktop = NULL; startUpInfo.lpTitle = NULL; startUpInfo.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES; startUpInfo.hStdOutput = hChildStdoutWr; startUpInfo.hStdError = hChildStdoutWr; startUpInfo.cbReserved2 = 0; startUpInfo.lpReserved2 = NULL; startUpInfo.wShowWindow = SW_SHOWNORMAL; if (!CreateProcess (NULL, command, NULL, /* default security */ NULL, /* default thread security */ TRUE, /* inherit handles */ CREATE_DEFAULT_ERROR_MODE | DETACHED_PROCESS, NULL, /* use default environment */ NULL, /* set default directory */ &startUpInfo, &processInformation)) { fprintf (stderr, "error running \"%s\": ", command); print_last_error (); fprintf (stderr, "\n"); exit (1); } /* Close the write end of the pipe before reading from the read end. */ CloseHandle (hChildStdoutWr); while (ReadFile (hChildStdoutRd, buf, sizeof (buf) - 1, &dwRead, NULL) && dwRead > 0) { buf[dwRead] = '\0'; printf ("%s", buf); } CloseHandle (hChildStdoutRd); return (0); } nip2-8.7.0/src/filemodel.h0000644000175000017500000001050713224651032012220 00000000000000/* abstract base class for things which are loaded or saved from files */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define FILEMODEL_LOAD_STATE( obj ) ((FilemodelLoadState *) obj) #define TYPE_FILEMODEL (filemodel_get_type()) #define FILEMODEL( obj ) \ (G_TYPE_CHECK_INSTANCE_CAST( (obj), TYPE_FILEMODEL, Filemodel )) #define FILEMODEL_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_CAST( (klass), TYPE_FILEMODEL, FilemodelClass)) #define IS_FILEMODEL( obj ) \ (G_TYPE_CHECK_INSTANCE_TYPE( (obj), TYPE_FILEMODEL )) #define IS_FILEMODEL_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_TYPE( (klass), TYPE_FILEMODEL )) #define FILEMODEL_GET_CLASS( obj ) \ (G_TYPE_INSTANCE_GET_CLASS( (obj), TYPE_FILEMODEL, FilemodelClass )) struct _Filemodel { Model model; char *filename; /* File we read this thing from */ gboolean modified; /* Set if modified (and should be saved) */ gboolean registered; /* Set if on list of things to save on quit */ gboolean auto_load; /* TRUE if loaded from path_start */ int x_off, y_off; /* Save offset for things below this */ /* When we loaded this filemodel, the version numbers we saw in the * XML file. */ gboolean versioned; /* Set means from a versioned file */ int major; int minor; int micro; iWindow *window_hint; /* Our views set this as a hint */ }; typedef struct _FilemodelClass { ModelClass parent_class; /* top_load top level load function ... controls how the rest of the load happens ... eg. merge, rename, etc. set_modified set/clear the modified state top_save top level save ... intercept this to override */ gboolean (*top_load)( Filemodel *filemodel, ModelLoadState *state, Model *parent, xmlNode *xnode ); void (*set_modified)( Filemodel *filemodel, gboolean modified ); gboolean (*top_save)( Filemodel *filemodel, const char *filename ); FileselFileType **filetype; const char *filetype_pref; } FilemodelClass; void filemodel_register( Filemodel *filemodel ); void filemodel_unregister( Filemodel *filemodel ); void *filemodel_top_load( Filemodel *filemodel, ModelLoadState *state, Model *parent, xmlNode *xnode ); void filemodel_set_filename( Filemodel *filemodel, const char *filename ); void filemodel_set_modified( Filemodel *filemodel, gboolean state ); void filemodel_set_window_hint( Filemodel *filemodel, iWindow *iwnd ); iWindow *filemodel_get_window_hint( Filemodel *filemodel ); GType filemodel_get_type( void ); void filemodel_set_offset( Filemodel *filemodel, int x_off, int y_off ); gboolean filemodel_top_save( Filemodel *filemodel, const char *filename ); gboolean filemodel_load_all( Filemodel *filemodel, Model *parent, const char *filename, const char *filename_user ); gboolean filemodel_load_all_openfile( Filemodel *filemodel, Model *parent, iOpenFile *of ); void filemodel_inter_saveas( iWindow *parent, Filemodel *filemodel ); void filemodel_inter_save( iWindow *parent, Filemodel *filemodel ); void filemodel_inter_savenempty_cb( iWindow *iwnd, void *client, iWindowNotifyFn nfn, void *sys ); void filemodel_inter_savenempty( iWindow *parent, Filemodel *filemodel ); void filemodel_inter_savenclose_cb( iWindow *iwnd, void *client, iWindowNotifyFn nfn, void *sys ); void filemodel_inter_savenclose( iWindow *parent, Filemodel *filemodel ); void filemodel_inter_loadas( iWindow *parent, Filemodel *filemodel ); void filemodel_inter_replace( iWindow *parent, Filemodel *filemodel ); void filemodel_inter_close_registered_cb( iWindow *iwnd, void *client, iWindowNotifyFn nfn, void *sys ); void filemodel_set_auto_load( Filemodel *filemodel ); nip2-8.7.0/src/vector.h0000644000175000017500000000263513224651032011565 00000000000000/* a vector in a workspace */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_VECTOR (vector_get_type()) #define VECTOR( obj ) (GTK_CHECK_CAST( (obj), TYPE_VECTOR, Vector )) #define VECTOR_CLASS( klass ) \ (GTK_CHECK_CLASS_CAST( (klass), TYPE_VECTOR, VectorClass )) #define IS_VECTOR( obj ) (GTK_CHECK_TYPE( (obj), TYPE_VECTOR )) #define IS_VECTOR_CLASS( klass ) \ (GTK_CHECK_CLASS_TYPE( (klass), TYPE_VECTOR )) typedef struct _Vector { Value parent_object; } Vector; typedef struct _VectorClass { ValueClass parent_class; /* My methods. */ } VectorClass; GType vector_get_type( void ); nip2-8.7.0/src/istring.h0000644000175000017500000000270613224651032011741 00000000000000/* an editable string in a workspace */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_STRING (string_get_type()) #define STRING( obj ) (GTK_CHECK_CAST( (obj), TYPE_STRING, String )) #define STRING_CLASS( klass ) \ (GTK_CHECK_CLASS_CAST( (klass), TYPE_STRING, StringClass )) #define IS_STRING( obj ) (GTK_CHECK_TYPE( (obj), TYPE_STRING )) #define IS_STRING_CLASS( klass ) \ (GTK_CHECK_CLASS_TYPE( (klass), TYPE_STRING )) struct _String { Classmodel parent_class; /* Class fields. */ char *value; }; typedef struct _StringClass { ClassmodelClass parent_class; /* My methods. */ } StringClass; GType string_get_type( void ); nip2-8.7.0/src/idialog.h0000644000175000017500000001042413224651032011666 00000000000000/* make and manage dialogs ... subclass off this for dialog boxes */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifndef IDIALOG_H #define IDIALOG_H #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #define TYPE_IDIALOG (idialog_get_type()) #define IDIALOG( obj ) (GTK_CHECK_CAST( (obj), TYPE_IDIALOG, iDialog )) #define IDIALOG_CLASS( klass ) \ (GTK_CHECK_CLASS_CAST( (klass), TYPE_IDIALOG, iDialogClass )) #define IS_IDIALOG( obj ) (GTK_CHECK_TYPE( (obj), TYPE_IDIALOG )) #define IS_IDIALOG_CLASS( klass ) \ (GTK_CHECK_CLASS_TYPE( (klass), TYPE_IDIALOG )) typedef struct _iDialog iDialog; typedef void (*iDialogFreeFn)( iDialog *, void * ); struct _iDialog { iWindow parent_object; /* My instance vars. */ iObject *iobject; /* Kill dialog if this obj goes */ guint destroy_sid; /* Signal id for obj destroy */ GtkWidget *work; /* Our work area */ GtkWidget *hb; GtkWidget *bb; GSList *ok_l; /* List of OKbutton as set by user */ GSList *ok_disp_l; /* List of OKbutton as displayed */ GSList *ok_but_l; /* List of OK GtkButton as displayed */ GtkWidget *but_cancel; GtkWidget *but_help; GtkWidget *tog_pin; /* Optional pinup widget */ GtkEntry *entry; /* Last entry we added as default */ /* Flags. */ gboolean modal; /* Modal/non-modal */ gboolean pinup; /* Stay up on OK */ gboolean nosep; /* Suppress hseparator */ gboolean button_focus; /* TRUE to focus buttons */ /* Name of help tag ... if set, make a help button and link to display * of this. */ char *help_tag; /* What we label the cancel button as (if any). Usually * GTK_STOCK_CANCEL, but instant-apply dialogs should change this to * GTK_STOCK_CLOSE. */ const char *cancel_text; /* Per-instance build function. */ iWindowBuildFn build; void *build_a, *build_b, *build_c; /* Our callbacks. */ iWindowFn cancel_cb; iWindowFn popdown_cb; iDialogFreeFn destroy_cb; /* Called from _destroy() */ void *client; /* Client data for callbacks */ void *arg; /* Misc thing provided to client */ /* Notify our parent when we finish. */ iWindowNotifyFn nfn; void *sys; }; typedef struct _iDialogClass { iWindowClass parent_class; /* Our methods. */ } iDialogClass; void idialog_free_client( iDialog *idlg, void *client ); void idialog_set_ok_button_state( iDialog *idlg, gboolean state ); GtkType idialog_get_type( void ); GtkWidget *idialog_new( void ); void idialog_set_iobject( iDialog *idlg, iObject *iobject ); void idialog_set_modal( iDialog *, gboolean ); void idialog_set_pinup( iDialog *idlg, gboolean pinup ); void idialog_set_nosep( iDialog *, gboolean ); void idialog_set_button_focus( iDialog *idlg, gboolean button_focus ); void idialog_set_help_tag( iDialog *, const char *help_tag ); void idialog_set_callbacks( iDialog *, iWindowFn cancel_cb, iWindowFn popdown_cb, iDialogFreeFn destroy_cb, void *client ); void idialog_add_ok( iDialog *, iWindowFn done_cb, const char *fmt, ... ) __attribute__((format(printf, 3, 4))); void idialog_set_notify( iDialog *, iWindowNotifyFn, void * ); void idialog_set_build( iDialog *, iWindowBuildFn, void *, void *, void * ); void idialog_set_cancel_text( iDialog *, const char *cancel_text ); void idialog_set_default_entry( iDialog *idlg, GtkEntry *entry ); void idialog_init_entry( iDialog *idlg, GtkWidget *entry, const char *tip, const char *fmt, ... ) __attribute__((format(printf, 4, 5))); void idialog_done_trigger( iDialog *idlg, int pos ); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* IDIALOG_H */ nip2-8.7.0/src/workspaceroot.h0000644000175000017500000000362613224651032013166 00000000000000/* The root of all workspaces. A singleton all workspaces are children of. */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_WORKSPACEROOT (workspaceroot_get_type()) #define WORKSPACEROOT( obj ) \ (G_TYPE_CHECK_INSTANCE_CAST( (obj), TYPE_WORKSPACEROOT, \ Workspaceroot )) #define WORKSPACEROOT_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_CAST( (klass), TYPE_WORKSPACEROOT, \ WorkspacerootClass)) #define IS_WORKSPACEROOT( obj ) \ (G_TYPE_CHECK_INSTANCE_TYPE( (obj), TYPE_WORKSPACEROOT )) #define IS_WORKSPACEROOT_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_TYPE( (klass), TYPE_WORKSPACEROOT )) #define WORKSPACEROOT_GET_CLASS( obj ) \ (G_TYPE_INSTANCE_GET_CLASS( (obj), TYPE_WORKSPACEROOT, \ WorkspacerootClass )) /* A workspaceroot. */ struct _Workspaceroot { Model parent_object; Symbol *sym; /* Workspace in this group in this */ }; typedef struct _WorkspacerootClass { ModelClass parent_class; /* Methods. */ } WorkspacerootClass; GType workspaceroot_get_type( void ); Workspaceroot *workspaceroot_new( const char *name ); void workspaceroot_name_new( Workspaceroot *wsr, char *name ); nip2-8.7.0/src/gtkutil.h0000644000175000017500000001265013224651032011744 00000000000000/* Declarations supporting gtkutil.c */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* Look up an object's parent class dynamically. */ #define PARENT_CLASS_DYNAMIC( OBJECT ) \ (g_type_class_peek( \ g_type_parent( \ G_TYPE_FROM_INSTANCE( OBJECT ) ) )) /* Like G_CHECK_TYPE, but insist on an exact match. */ #define TYPE_EXACT( OBJECT, TYPE ) \ (G_TYPE_FROM_INSTANCE( OBJECT ) == (TYPE)) #define DESTROY_GTK( X ) { \ if( X ) { \ gtk_object_destroy( GTK_OBJECT( X ) ); \ (X) = NULL; \ } \ } void adjustments_set_value( GtkAdjustment *hadj, GtkAdjustment *vadj, float hval, float vval ); void *object_destroy( void *obj ); void *null_g_free( void *obj ); const char *object_type_name( GtkObject *obj ); void widget_visible( GtkWidget *widget, gboolean visible ); /* Make widgets. */ GtkWidget *build_button( const char *name, GtkSignalFunc cb, gpointer user ); void get_geo( GtkWidget *widget, const char *text, Rect *geo ); void set_fixed( GtkWidget *widget, int nchars ); GtkWidget *build_entry( int nchars ); GtkWidget *menu_build( const char *name ); GtkWidget *menu_add_but( GtkWidget *menu, const char *name, GtkSignalFunc cb, void *user ); GtkWidget *menu_add_tog( GtkWidget *menu, const char *name, GtkSignalFunc cb, void *user ); GtkWidget *menu_add_sep( GtkWidget *menu ); GtkWidget *menu_add_pullright( GtkWidget *popup, const char *name ); /* Popup menu handling. */ typedef void (*PopupFunc)( GtkWidget *, GtkWidget *, void * ); #define POPUP_FUNC( fn ) ((PopupFunc) (fn)) GtkWidget *popup_build( const char *name ); GtkWidget *popup_add_but( GtkWidget *, const char *, PopupFunc ); GtkWidget *popup_add_tog( GtkWidget *, const char *, PopupFunc ); GtkWidget *popup_add_pullright( GtkWidget *popup, const char *name ); void popup_show( GtkWidget *host, GdkEvent *ev ); void popup_link( GtkWidget *host, GtkWidget *popup, void *data ); guint popup_attach( GtkWidget *host, GtkWidget *popup, void *data ); void popup_detach( GtkWidget *host, guint sid ); void set_tooltip( GtkWidget *wid, const char *fmt, ... ) __attribute__((format(printf, 2, 3))); void junk_tooltips( void ); typedef void (*TooltipGenerateFn)( GtkWidget *, VipsBuf *, void *a, void *b ); void set_tooltip_generate( GtkWidget *widget, TooltipGenerateFn fn, void *a, void *b ); /* Set/get a label/entry, printf style. */ void set_gentryv( GtkWidget *edit, const char *fmt, va_list ap ); void set_gentry( GtkWidget *entry, const char *fmt, ... ) __attribute__((format(printf, 2, 3))); void set_glabel( GtkWidget *label, const char *fmt, ... ) __attribute__((format(printf, 2, 3))); void set_glabel1( GtkWidget *label, const char *fmt, ... ) __attribute__((format(printf, 2, 3))); void set_gcaption( GtkWidget *label, const char *fmt, ... ) __attribute__((format(printf, 2, 3))); gboolean get_geditable_string( GtkWidget *text, char *out, int sz ); gboolean get_geditable_name( GtkWidget *text, char *out, int sz ); gboolean get_geditable_filename( GtkWidget *text, char *out, int sz ); gboolean get_geditable_double( GtkWidget *text, double *out ); gboolean get_geditable_int( GtkWidget *text, int *n ); gboolean get_geditable_uint( GtkWidget *text, int *n ); gboolean get_geditable_pint( GtkWidget *text, int *n ); /* Make widget groups. */ GtkWidget *build_glabelframe2( GtkWidget *box, const char *label ); GtkWidget *build_glabeltext3( GtkWidget *box, const char *label ); GtkWidget *build_glabeltext4( GtkWidget *box, GtkSizeGroup *group, const char *label ); GtkWidget *build_gtoggle( GtkWidget *box, const char *caption ); GtkWidget *build_goption( GtkWidget *box, GtkSizeGroup *group, const char *name, const char *item_names[], int nitem, GtkSignalFunc fn, void *value ); typedef gboolean (*FiledropFunc)( void *client, const char *file ); void filedrop_register( GtkWidget *widget, FiledropFunc fn, void *client ); /* Tag our thumbnail drag-n-drops with these. Start up a bit to leave room for * filedrop. */ enum { TARGET_SYMBOL = 99 }; void set_symbol_drag_type( GtkWidget *widget ); void listen_add( GObject *gobject, GObject **zap, const char *name, GCallback gcallback ); void widget_update_pointer( GtkWidget *widget, GdkEvent *ev ); void *gobject_print( GObject *gobject ); int get_dpi( void ); GtkWidget *image_new_from_file( const char *name ); void vfatal( GError **error ); char *text_view_get_text( GtkTextView *text_view ); void text_view_set_text( GtkTextView *text_view, const char *text, gboolean editable ); void text_view_select_text( GtkTextView *text_view, int start, int end ); typedef void (*DestroyFn)( GObject * ); void destroy_if_destroyed( GObject *child, GObject *parent, DestroyFn destroy_fn ); void process_events( void ); nip2-8.7.0/src/tslider.h0000644000175000017500000000566613224651032011740 00000000000000/* A slider with an entry widget. */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_TSLIDER (tslider_get_type()) #define TSLIDER( obj ) (GTK_CHECK_CAST( (obj), TYPE_TSLIDER, Tslider )) #define TSLIDER_CLASS( klass ) \ (GTK_CHECK_CLASS_CAST( (klass), TYPE_TSLIDER, TsliderClass )) #define IS_TSLIDER( obj ) (GTK_CHECK_TYPE( (obj), TYPE_TSLIDER )) #define IS_TSLIDER_CLASS( klass ) \ (GTK_CHECK_CLASS_TYPE( (klass), TYPE_TSLIDER )) typedef double (*tslider_fn)( double from, double to, double value ); typedef struct _Tslider { GtkHBox parent_class; /* Our state. */ double from; double to; double value; /* Real value, as displayed in text */ double svalue; /* Slider value ... secret linear scale */ int digits; /* How many sf to display */ /* Keep last from/to/value settings here. Can't * use from/to since double and float don't compare reliably. */ double last_from, last_to, last_svalue; GtkWidget *entry; GtkWidget *slider; GtkAdjustment *adj; /* Optional functions ... how to make a value from a slider * position, how to make a slider position from a value. * If these are defined, text and slider are linked for you. */ gboolean auto_link; tslider_fn value_to_slider; tslider_fn slider_to_value; /* Ignore scroll events. In workspaces, we want the scroll-wheel to * just scroll the workspace and not adjust sliders. */ gboolean ignore_scroll; } Tslider; typedef struct _TsliderClass { GtkHBoxClass parent_class; void (*changed)( Tslider * ); /* from/to/value change */ void (*activate)( Tslider * ); /* enter in text */ void (*slider_changed)( Tslider * ); /* slider drag */ void (*text_changed)( Tslider * ); /* text has been touched */ } TsliderClass; void tslider_changed( Tslider * ); GtkType tslider_get_type( void ); Tslider *tslider_new( void ); void tslider_set_conversions( Tslider *tslider, tslider_fn value_to_slider, tslider_fn slider_to_value ); double tslider_log_value_to_slider( double from, double to, double value ); double tslider_log_slider_to_value( double from, double to, double value ); void tslider_set_ignore_scroll( Tslider *tslider, gboolean ignore_scroll ); nip2-8.7.0/src/nipmarshal.c0000644000175000017500000001515113224651032012411 00000000000000#include "nipmarshal.h" #include #ifdef G_ENABLE_DEBUG #define g_marshal_value_peek_boolean(v) g_value_get_boolean (v) #define g_marshal_value_peek_char(v) g_value_get_char (v) #define g_marshal_value_peek_uchar(v) g_value_get_uchar (v) #define g_marshal_value_peek_int(v) g_value_get_int (v) #define g_marshal_value_peek_uint(v) g_value_get_uint (v) #define g_marshal_value_peek_long(v) g_value_get_long (v) #define g_marshal_value_peek_ulong(v) g_value_get_ulong (v) #define g_marshal_value_peek_int64(v) g_value_get_int64 (v) #define g_marshal_value_peek_uint64(v) g_value_get_uint64 (v) #define g_marshal_value_peek_enum(v) g_value_get_enum (v) #define g_marshal_value_peek_flags(v) g_value_get_flags (v) #define g_marshal_value_peek_float(v) g_value_get_float (v) #define g_marshal_value_peek_double(v) g_value_get_double (v) #define g_marshal_value_peek_string(v) (char*) g_value_get_string (v) #define g_marshal_value_peek_param(v) g_value_get_param (v) #define g_marshal_value_peek_boxed(v) g_value_get_boxed (v) #define g_marshal_value_peek_pointer(v) g_value_get_pointer (v) #define g_marshal_value_peek_object(v) g_value_get_object (v) #else /* !G_ENABLE_DEBUG */ /* WARNING: This code accesses GValues directly, which is UNSUPPORTED API. * Do not access GValues directly in your code. Instead, use the * g_value_get_*() functions */ #define g_marshal_value_peek_boolean(v) (v)->data[0].v_int #define g_marshal_value_peek_char(v) (v)->data[0].v_int #define g_marshal_value_peek_uchar(v) (v)->data[0].v_uint #define g_marshal_value_peek_int(v) (v)->data[0].v_int #define g_marshal_value_peek_uint(v) (v)->data[0].v_uint #define g_marshal_value_peek_long(v) (v)->data[0].v_long #define g_marshal_value_peek_ulong(v) (v)->data[0].v_ulong #define g_marshal_value_peek_int64(v) (v)->data[0].v_int64 #define g_marshal_value_peek_uint64(v) (v)->data[0].v_uint64 #define g_marshal_value_peek_enum(v) (v)->data[0].v_long #define g_marshal_value_peek_flags(v) (v)->data[0].v_ulong #define g_marshal_value_peek_float(v) (v)->data[0].v_float #define g_marshal_value_peek_double(v) (v)->data[0].v_double #define g_marshal_value_peek_string(v) (v)->data[0].v_pointer #define g_marshal_value_peek_param(v) (v)->data[0].v_pointer #define g_marshal_value_peek_boxed(v) (v)->data[0].v_pointer #define g_marshal_value_peek_pointer(v) (v)->data[0].v_pointer #define g_marshal_value_peek_object(v) (v)->data[0].v_pointer #endif /* !G_ENABLE_DEBUG */ /* VOID:OBJECT,INT (nipmarshal.list:25) */ void nip_VOID__OBJECT_INT (GClosure *closure, GValue *return_value G_GNUC_UNUSED, guint n_param_values, const GValue *param_values, gpointer invocation_hint G_GNUC_UNUSED, gpointer marshal_data) { typedef void (*GMarshalFunc_VOID__OBJECT_INT) (gpointer data1, gpointer arg_1, gint arg_2, gpointer data2); register GMarshalFunc_VOID__OBJECT_INT callback; register GCClosure *cc = (GCClosure*) closure; register gpointer data1, data2; g_return_if_fail (n_param_values == 3); if (G_CCLOSURE_SWAP_DATA (closure)) { data1 = closure->data; data2 = g_value_peek_pointer (param_values + 0); } else { data1 = g_value_peek_pointer (param_values + 0); data2 = closure->data; } callback = (GMarshalFunc_VOID__OBJECT_INT) (marshal_data ? marshal_data : cc->callback); callback (data1, g_marshal_value_peek_object (param_values + 1), g_marshal_value_peek_int (param_values + 2), data2); } /* VOID:DOUBLE,DOUBLE (nipmarshal.list:26) */ void nip_VOID__DOUBLE_DOUBLE (GClosure *closure, GValue *return_value G_GNUC_UNUSED, guint n_param_values, const GValue *param_values, gpointer invocation_hint G_GNUC_UNUSED, gpointer marshal_data) { typedef void (*GMarshalFunc_VOID__DOUBLE_DOUBLE) (gpointer data1, gdouble arg_1, gdouble arg_2, gpointer data2); register GMarshalFunc_VOID__DOUBLE_DOUBLE callback; register GCClosure *cc = (GCClosure*) closure; register gpointer data1, data2; g_return_if_fail (n_param_values == 3); if (G_CCLOSURE_SWAP_DATA (closure)) { data1 = closure->data; data2 = g_value_peek_pointer (param_values + 0); } else { data1 = g_value_peek_pointer (param_values + 0); data2 = closure->data; } callback = (GMarshalFunc_VOID__DOUBLE_DOUBLE) (marshal_data ? marshal_data : cc->callback); callback (data1, g_marshal_value_peek_double (param_values + 1), g_marshal_value_peek_double (param_values + 2), data2); } /* BOOLEAN:INT,INT (nipmarshal.list:27) */ void nip_BOOLEAN__INT_INT (GClosure *closure, GValue *return_value G_GNUC_UNUSED, guint n_param_values, const GValue *param_values, gpointer invocation_hint G_GNUC_UNUSED, gpointer marshal_data) { typedef gboolean (*GMarshalFunc_BOOLEAN__INT_INT) (gpointer data1, gint arg_1, gint arg_2, gpointer data2); register GMarshalFunc_BOOLEAN__INT_INT callback; register GCClosure *cc = (GCClosure*) closure; register gpointer data1, data2; gboolean v_return; g_return_if_fail (return_value != NULL); g_return_if_fail (n_param_values == 3); if (G_CCLOSURE_SWAP_DATA (closure)) { data1 = closure->data; data2 = g_value_peek_pointer (param_values + 0); } else { data1 = g_value_peek_pointer (param_values + 0); data2 = closure->data; } callback = (GMarshalFunc_BOOLEAN__INT_INT) (marshal_data ? marshal_data : cc->callback); v_return = callback (data1, g_marshal_value_peek_int (param_values + 1), g_marshal_value_peek_int (param_values + 2), data2); g_value_set_boolean (return_value, v_return); } nip2-8.7.0/src/mainw.c0000644000175000017500000015301713224651032011372 00000000000000/* main processing window */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #include "ip.h" /* #define DEBUG */ /* Load and save recent items here. */ #define RECENT_WORKSPACE "recent_workspace" #define RECENT_IMAGE "recent_image" #define RECENT_MATRIX "recent_matrix" /* Recently loaded/saved workspaces, images and matricies. */ GSList *mainw_recent_workspace = NULL; GSList *mainw_recent_image = NULL; GSList *mainw_recent_matrix = NULL; /* Auto-recalc state. Don't do this as a preference, since preferences are * workspaces and need to have recalc working to operate. */ gboolean mainw_auto_recalc = TRUE; static gint mainw_layout_timeout = 0; static iWindowClass *parent_class = NULL; /* All the mainw. */ static GSList *mainw_all = NULL; void mainw_startup( void ) { IM_FREEF( recent_free, mainw_recent_workspace ); IM_FREEF( recent_free, mainw_recent_image ); IM_FREEF( recent_free, mainw_recent_matrix ); mainw_recent_workspace = recent_load( RECENT_WORKSPACE ); mainw_recent_image = recent_load( RECENT_IMAGE ); mainw_recent_matrix = recent_load( RECENT_MATRIX ); } void mainw_shutdown( void ) { recent_save( mainw_recent_workspace, RECENT_WORKSPACE ); recent_save( mainw_recent_image, RECENT_IMAGE ); recent_save( mainw_recent_matrix, RECENT_MATRIX ); IM_FREEF( recent_free, mainw_recent_workspace ); IM_FREEF( recent_free, mainw_recent_image ); IM_FREEF( recent_free, mainw_recent_matrix ); } static int mainw_recent_freeze_count = 0; void mainw_recent_freeze( void ) { mainw_recent_freeze_count += 1; } void mainw_recent_thaw( void ) { g_assert( mainw_recent_freeze_count > 0 ); mainw_recent_freeze_count -= 1; } void mainw_recent_add( GSList **recent, const char *filename ) { if( !mainw_recent_freeze_count ) { char buf[FILENAME_MAX]; im_strncpy( buf, PATH_TMP, FILENAME_MAX ); path_expand( buf ); if( filename && strcmp( filename, "" ) != 0 && !is_prefix( buf, filename ) ) *recent = recent_add( *recent, filename ); } } /* Pick a mainw at random. Used if we need a window for a dialog, and we're * not sure which to pick. */ Mainw * mainw_pick_one( void ) { if( !mainw_all ) /* Must be a cast here, since iwindow_pick_one() can return * NULL during shutdown. */ return( (Mainw *) iwindow_pick_one() ); return( MAINW( mainw_all->data ) ); } static void mainw_finalize( GObject *gobject ) { #ifdef DEBUG printf( "mainw_finalize: %p\n", gobject ); #endif /*DEBUG*/ g_return_if_fail( gobject != NULL ); g_return_if_fail( IS_MAINW( gobject ) ); G_OBJECT_CLASS( parent_class )->finalize( gobject ); } static void mainw_dispose( GObject *object ) { Mainw *mainw; g_return_if_fail( object != NULL ); g_return_if_fail( IS_MAINW( object ) ); mainw = MAINW( object ); #ifdef DEBUG printf( "mainw_dispose\n" ); #endif /*DEBUG*/ IM_FREEF( g_source_remove, mainw->refresh_timeout ); FREESID( mainw->changed_sid, mainw->wsg ); FREESID( mainw->imageinfo_changed_sid, main_imageinfogroup ); FREESID( mainw->heap_changed_sid, reduce_context->heap ); FREESID( mainw->watch_changed_sid, main_watchgroup ); FREESID( mainw->begin_sid, progress_get() ); FREESID( mainw->update_sid, progress_get() ); FREESID( mainw->end_sid, progress_get() ); UNREF( mainw->kitgview ); /* We don't unref wsg: it's destroyed by mainw_popdown() with * filemodel_inter_savenclose_cb(). */ mainw_all = g_slist_remove( mainw_all, mainw ); G_OBJECT_CLASS( parent_class )->dispose( object ); } static void * mainw_configure_event_sub( Workspace *ws, GdkEventConfigure *event ) { MODEL( ws )->window_x = event->x; MODEL( ws )->window_y = event->y; MODEL( ws )->window_width = event->width; MODEL( ws )->window_height = event->height; return( NULL ); } static gboolean mainw_configure_event( GtkWidget *widget, GdkEventConfigure *event ) { Mainw *mainw = MAINW( widget ); /* We have to record on all wses, since we don't know which will be * first on reload. */ workspacegroup_map( mainw->wsg, (workspace_map_fn) mainw_configure_event_sub, event, NULL ); return( GTK_WIDGET_CLASS( parent_class )-> configure_event( widget, event ) ); } static void mainw_class_init( MainwClass *class ) { GObjectClass *gobject_class = G_OBJECT_CLASS( class ); GtkWidgetClass *widget_class = (GtkWidgetClass *) class; parent_class = g_type_class_peek_parent( class ); gobject_class->finalize = mainw_finalize; gobject_class->dispose = mainw_dispose; widget_class->configure_event = mainw_configure_event; } static void mainw_progress_begin( Progress *progress, Mainw *mainw ) { mainw->cancel = FALSE; gtk_widget_show( mainw->progress_box ); } static void mainw_progress_update( Progress *progress, gboolean *cancel, Mainw *mainw ) { gtk_progress_bar_set_text( GTK_PROGRESS_BAR( mainw->progress ), vips_buf_all( &progress->feedback ) ); gtk_progress_bar_set_fraction( GTK_PROGRESS_BAR( mainw->progress ), IM_CLIP( 0.0, (double) progress->percent / 100.0, 1.0 ) ); if( mainw->cancel ) *cancel = TRUE; } static void mainw_progress_end( Progress *progress, Mainw *mainw ) { gtk_widget_hide( mainw->progress_box ); mainw->cancel = FALSE; } static void mainw_init( Mainw *mainw ) { mainw->wsg = NULL; mainw->changed_sid = 0; mainw->imageinfo_changed_sid = 0; mainw->heap_changed_sid = 0; mainw->watch_changed_sid = 0; mainw->begin_sid = g_signal_connect( progress_get(), "begin", G_CALLBACK( mainw_progress_begin ), mainw ); mainw->update_sid = g_signal_connect( progress_get(), "update", G_CALLBACK( mainw_progress_update ), mainw ); mainw->end_sid = g_signal_connect( progress_get(), "end", G_CALLBACK( mainw_progress_end ), mainw ); mainw->cancel = FALSE; mainw->free_type = FALSE; mainw->toolbar_visible = MAINW_TOOLBAR; mainw->statusbar_visible = MAINW_STATUSBAR; mainw->kitgview = NULL; mainw->toolbar = NULL; mainw->statusbar_main = NULL; mainw->statusbar = NULL; mainw->space_free = NULL; mainw->space_free_eb = NULL; mainw->progress_box = NULL; mainw->progress = NULL; mainw_all = g_slist_prepend( mainw_all, mainw ); } GType mainw_get_type( void ) { static GType type = 0; if( !type ) { static const GTypeInfo info = { sizeof( MainwClass ), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) mainw_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof( Mainw ), 32, /* n_preallocs */ (GInstanceInitFunc) mainw_init, }; type = g_type_register_static( TYPE_IWINDOW, "Mainw", &info, 0 ); } return( type ); } static void mainw_cancel_cb( GtkWidget *wid, Mainw *mainw ) { mainw->cancel = TRUE; } void mainw_find_disc( VipsBuf *buf ) { double sz = find_space( PATH_TMP ); if( sz < 0 ) vips_buf_appendf( buf, _( "No temp area" ) ); else { char txt[MAX_STRSIZE]; VipsBuf buf2 = VIPS_BUF_STATIC( txt ); vips_buf_append_size( &buf2, sz ); vips_buf_appendf( buf, _( "%s free" ), vips_buf_all( &buf2 ) ); } } void mainw_find_heap( VipsBuf *buf, Heap *heap ) { /* How much we can still expand the heap by ... this * can be -ve if we've closed a workspace, or changed * the upper limit. */ int togo = IM_MAX( 0, (heap->mxb - heap->nb) * heap->rsz ); vips_buf_appendf( buf, _( "%d cells free" ), heap->nfree + togo ); } Workspace * mainw_get_workspace( Mainw *mainw ) { Workspace *ws; if( mainw->wsg && (ws = WORKSPACE( ICONTAINER( mainw->wsg )->current )) ) return( ws ); return( NULL ); } Workspace * mainw_next_workspace( Mainw *mainw ) { Workspace *ws; if( mainw->wsg && (ws = WORKSPACE( icontainer_next( ICONTAINER( mainw->wsg ) ) )) ) return( ws ); return( NULL ); } /* Update the space remaining indicator. */ static void mainw_free_update( Mainw *mainw ) { Heap *heap = reduce_context->heap; char txt[80]; VipsBuf buf = VIPS_BUF_STATIC( txt ); Workspace *ws; if( (ws = mainw_get_workspace( mainw )) && workspace_selected_any( ws ) ) { vips_buf_appends( &buf, _( "Selected:" ) ); vips_buf_appends( &buf, " " ); workspace_selected_names( ws, &buf, ", " ); } else { /* Out of space? Make sure we swap to cell display. */ if( !heap->free ) mainw->free_type = FALSE; if( mainw->free_type ) mainw_find_heap( &buf, heap ); else mainw_find_disc( &buf ); } set_glabel( mainw->space_free, "%s", vips_buf_all( &buf ) ); } static void mainw_title_update( Mainw *mainw ) { Workspace *ws; char txt[512]; VipsBuf buf = VIPS_BUF_STATIC( txt ); char *filename; if( mainw->wsg && FILEMODEL( mainw->wsg )->modified ) vips_buf_appendf( &buf, "*" ); if( mainw->wsg && (filename = FILEMODEL( mainw->wsg )->filename) ) { char *base = g_path_get_basename( filename ); char *dir = g_path_get_dirname( filename ); vips_buf_appendf( &buf, "%s (%s)", base, dir ); g_free( base ); g_free( dir ); } else vips_buf_appends( &buf, _( "unsaved workspace" ) ); if( (ws = mainw_get_workspace( mainw )) ) { vips_buf_appends( &buf, " - " ); vips_buf_appendf( &buf, "%s", NN( IOBJECT( ws->sym )->name ) ); if( ws->compat_major ) { vips_buf_appends( &buf, " - " ); vips_buf_appends( &buf, _( "compatibility mode" ) ); vips_buf_appendf( &buf, " %d.%d", ws->compat_major, ws->compat_minor ); } } vips_buf_appendf( &buf, " - %s", PACKAGE ); iwindow_set_title( IWINDOW( mainw ), "%s", vips_buf_all( &buf ) ); } static void mainw_status_update( Mainw *mainw ) { Workspace *ws; if( (ws = mainw_get_workspace( mainw )) && ws->status ) gtk_label_set_text( GTK_LABEL( mainw->statusbar ), ws->status ); else { char txt[256]; im_snprintf( txt, 256, _( NIP_COPYRIGHT ), PACKAGE ); gtk_label_set_markup( GTK_LABEL( mainw->statusbar ), txt ); } } static gboolean mainw_refresh_timeout_cb( gpointer user_data ) { static GtkToolbarStyle styles[] = { 0, /* Overwrite with system default */ GTK_TOOLBAR_ICONS, GTK_TOOLBAR_TEXT, GTK_TOOLBAR_BOTH, GTK_TOOLBAR_BOTH_HORIZ }; static gboolean inited_default_style = FALSE; /* Keep in step with the WorkspaceMode enum. */ const static char *view_mode[] = { "Normal", "ShowFormula", "NoEdit" }; Mainw *mainw = MAINW( user_data ); iWindow *iwnd = IWINDOW( mainw ); int pref = IM_CLIP( 0, MAINW_TOOLBAR_STYLE, IM_NUMBER( styles ) - 1 ); GtkAction *action; Workspace *ws; #ifdef DEBUG printf( "mainw_refresh_timeout_cb: %p\n", mainw ); #endif /*DEBUG*/ mainw->refresh_timeout = 0; mainw_status_update( mainw ); mainw_free_update( mainw ); mainw_title_update( mainw ); if( !inited_default_style ) { styles[0] = gtk_toolbar_get_style( GTK_TOOLBAR( mainw->toolbar ) ); inited_default_style = TRUE; } gtk_toolbar_set_style( GTK_TOOLBAR( mainw->toolbar ), styles[pref] ); action = gtk_action_group_get_action( iwnd->action_group, "AutoRecalculate" ); gtk_toggle_action_set_active( GTK_TOGGLE_ACTION( action ), mainw_auto_recalc ); action = gtk_action_group_get_action( iwnd->action_group, "Toolbar" ); gtk_toggle_action_set_active( GTK_TOGGLE_ACTION( action ), mainw->toolbar_visible ); widget_visible( mainw->toolbar, mainw->toolbar_visible ); action = gtk_action_group_get_action( iwnd->action_group, "Statusbar" ); gtk_toggle_action_set_active( GTK_TOGGLE_ACTION( action ), mainw->statusbar_visible ); widget_visible( mainw->statusbar_main, mainw->statusbar_visible ); if( (ws = mainw_get_workspace( mainw )) ) { action = gtk_action_group_get_action( iwnd->action_group, "Lock" ); gtk_toggle_action_set_active( GTK_TOGGLE_ACTION( action ), ws->locked ); action = gtk_action_group_get_action( iwnd->action_group, "Tabdefs" ); gtk_toggle_action_set_active( GTK_TOGGLE_ACTION( action ), ws->lpane_open ); action = gtk_action_group_get_action( iwnd->action_group, "ToolkitBrowser" ); gtk_toggle_action_set_active( GTK_TOGGLE_ACTION( action ), ws->rpane_open ); action = gtk_action_group_get_action( iwnd->action_group, view_mode[ws->mode] ); gtk_toggle_action_set_active( GTK_TOGGLE_ACTION( action ), TRUE ); workspace_jump_update( ws, mainw->jump_to_column_menu ); if( mainw->kitg != ws->kitg ) { UNREF( mainw->kitgview ); mainw->kitgview = TOOLKITGROUPVIEW( model_view_new( MODEL( ws->kitg ), NULL ) ); g_object_ref( G_OBJECT( mainw->kitgview ) ); gtk_object_sink( GTK_OBJECT( mainw->kitgview ) ); toolkitgroupview_set_mainw( mainw->kitgview, mainw ); gtk_menu_set_accel_group( GTK_MENU( mainw->kitgview->menu ), iwnd->accel_group ); mainw->kitg = ws->kitg; } } return( FALSE ); } static void mainw_refresh( Mainw *mainw ) { IM_FREEF( g_source_remove, mainw->refresh_timeout ); mainw->refresh_timeout = g_timeout_add( 100, (GSourceFunc) mainw_refresh_timeout_cb, mainw ); } static void mainw_duplicate_action_cb( GtkAction *action, Mainw *mainw ) { Workspacegroup *new_wsg; Mainw *new_mainw; progress_begin(); if( !(new_wsg = workspacegroup_duplicate( mainw->wsg )) ) { progress_end(); iwindow_alert( GTK_WIDGET( mainw ), GTK_MESSAGE_ERROR ); return; } new_mainw = mainw_new( new_wsg ); gtk_widget_show( GTK_WIDGET( new_mainw ) ); symbol_recalculate_all(); progress_end(); } static void mainw_save_action_cb( GtkAction *action, Mainw *mainw ) { workspacegroup_set_save_type( mainw->wsg, WORKSPACEGROUP_SAVE_ALL ); filemodel_inter_save( IWINDOW( mainw ), FILEMODEL( mainw->wsg ) ); } static void mainw_save_as_action_cb( GtkAction *action, Mainw *mainw ) { workspacegroup_set_save_type( mainw->wsg, WORKSPACEGROUP_SAVE_ALL ); filemodel_inter_saveas( IWINDOW( mainw ), FILEMODEL( mainw->wsg ) ); } /* Event in the "space free" display ... toggle mode on left click. */ static gint mainw_space_free_event( GtkWidget *widget, GdkEvent *ev, Mainw *mainw ) { if( ev->type == GDK_BUTTON_RELEASE ) { mainw->free_type = !mainw->free_type; mainw_free_update( mainw ); } return( FALSE ); } /* Count number and sizes of all image objects. */ static void * mainw_count_images( VipsObject *object, int *n ) { if( VIPS_IS_IMAGE( object ) ) *n += 1; return( NULL ); } static void * mainw_size_images( VipsObject *object, size_t *size ) { if( VIPS_IS_IMAGE( object ) ) *size += VIPS_IMAGE_SIZEOF_IMAGE( VIPS_IMAGE( object ) ); return( NULL ); } static void mainw_space_free_tooltip_generate( GtkWidget *widget, VipsBuf *buf, Mainw *mainw ) { Heap *heap = reduce_context->heap; size_t size; int n; mainw_find_disc( buf ); /* Expands to (eg.) "14GB free in /pics/tmp" */ vips_buf_appendf( buf, _( " in \"%s\"" ), PATH_TMP ); vips_buf_appends( buf, ", " ); vips_buf_appendf( buf, _( "%d cells in heap, %d cells free, %d cells maximum" ), heap->ncells, heap->nfree, heap->max_fn( heap ) ); vips_buf_appends( buf, ", " ); if( mainw->wsg ) { vips_buf_appendf( buf, _( "%d objects in workspace" ), workspacegroup_get_n_objects( mainw->wsg ) ); vips_buf_appends( buf, ", " ); } vips_buf_appendf( buf, _( "%d vips calls cached" ), cache_history_size ); vips_buf_appends( buf, ", " ); vips_buf_appendf( buf, _( "using %d threads" ), im_concurrency_get() ); vips_buf_appends( buf, ", " ); size = 0; vips_object_map( (VipsSListMap2Fn) mainw_size_images, &size, NULL ); n = 0; vips_object_map( (VipsSListMap2Fn) mainw_count_images, &n, NULL ); vips_buf_append_size( buf, size ); vips_buf_appendf( buf, _( " in %d images" ), n ); } static void mainw_free_changed_cb( gpointer *dummy, Mainw *mainw ) { mainw_free_update( mainw ); mainw_status_update( mainw ); } /* Go to home page. */ void mainw_homepage_action_cb( GtkAction *action, iWindow *iwnd ) { box_url( GTK_WIDGET( iwnd ), VIPS_HOMEPAGE ); } /* About... box. */ void mainw_about_action_cb( GtkAction *action, iWindow *iwnd ) { box_about( GTK_WIDGET( iwnd ) ); } /* User's guide. */ void mainw_guide_action_cb( GtkAction *action, iWindow *iwnd ) { box_url( GTK_WIDGET( iwnd ), "file://" NIP_DOCPATH "/nipguide.html" ); } static void mainw_selected_duplicate_action_cb( GtkAction *action, Mainw *mainw ) { Workspace *ws; progress_begin(); if( (ws = mainw_get_workspace( mainw )) && !workspace_selected_duplicate( ws ) ) iwindow_alert( GTK_WIDGET( mainw ), GTK_MESSAGE_ERROR ); progress_end(); } /* Ungroup the selected object(s), or the bottom object. */ static void mainw_ungroup_action_cb( GtkAction *action, Mainw *mainw ) { Workspace *ws; progress_begin(); if( (ws = mainw_get_workspace( mainw )) && !workspace_selected_ungroup( ws ) ) iwindow_alert( GTK_WIDGET( mainw ), GTK_MESSAGE_ERROR ); progress_end(); } /* Group the selected object(s). */ void mainw_group_action_cb( GtkAction *action, Mainw *mainw ) { Workspace *ws; if( (ws = mainw_get_workspace( mainw )) ) workspace_selected_group( ws ); } /* Select all objects. */ static void mainw_select_all_action_cb( GtkAction *action, Mainw *mainw ) { Workspace *ws; if( (ws = mainw_get_workspace( mainw )) ) workspace_select_all( ws ); } static void mainw_find_action_cb( GtkAction *action, Mainw *mainw ) { error_top( _( "Not implemented." ) ); error_sub( _( "Find in workspace not implemented yet." ) ); iwindow_alert( GTK_WIDGET( mainw ), GTK_MESSAGE_INFO ); } static void mainw_find_again_action_cb( GtkAction *action, Mainw *mainw ) { error_top( _( "Not implemented." ) ); error_sub( _( "Find again in workspace not implemented yet." ) ); iwindow_alert( GTK_WIDGET( mainw ), GTK_MESSAGE_INFO ); } void mainw_next_error_action_cb( GtkAction *action, Mainw *mainw ) { Workspace *first_ws; Workspace *ws; if( !(first_ws = mainw_get_workspace( mainw )) ) return; do { ws = mainw_get_workspace( mainw ); if( workspace_next_error( ws ) ) return; ws = mainw_next_workspace( mainw ); } while( ws != first_ws ); error_top( _( "No errors in workspace." ) ); error_sub( "%s", _( "There are no errors (that I can see) " "in this workspace." ) ); iwindow_alert( GTK_WIDGET( mainw ), GTK_MESSAGE_INFO ); } static void mainw_force_calc_action_cb( GtkAction *action, Mainw *mainw ) { Workspace *ws; if( (ws = mainw_get_workspace( mainw )) && workspace_selected_any( ws ) ) { if( !workspace_selected_recalc( ws ) ) iwindow_alert( GTK_WIDGET( mainw ), GTK_MESSAGE_ERROR ); } else symbol_recalculate_all_force( TRUE ); } Workspacegroup * mainw_open_workspace( Workspaceroot *wsr, const char *filename ) { Workspacegroup *wsg; Mainw *mainw; if( !(wsg = workspacegroup_new_from_file( wsr, filename, filename )) ) return( NULL ); mainw = mainw_new( wsg ); gtk_widget_show( GTK_WIDGET( mainw ) ); return( wsg ); } /* Track these during a load. */ typedef struct { Mainw *mainw; VipsBuf *buf; int nitems; } MainwLoad; /* Try to open a file. Workspace files we load immediately, other ones we * add the load to a buffer. */ static void * mainw_open_fn( Filesel *filesel, const char *filename, MainwLoad *load ) { Workspaceroot *wsr = load->mainw->wsg->wsr; if( is_file_type( &filesel_wfile_type, filename ) ) { if( !mainw_open_workspace( wsr, filename ) ) return( filesel ); mainw_recent_add( &mainw_recent_workspace, filename ); } else { if( load->nitems ) vips_buf_appends( load->buf, ", " ); if( !workspace_load_file_buf( load->buf, filename ) ) return( filesel ); mainw_recent_add( &mainw_recent_image, filename ); load->nitems += 1; } return( NULL ); } /* Callback from load browser. */ static void mainw_open_done_cb( iWindow *iwnd, void *client, iWindowNotifyFn nfn, void *sys ) { Mainw *mainw = MAINW( client ); Filesel *filesel = FILESEL( iwnd ); char txt[MAX_STRSIZE]; VipsBuf buf = VIPS_BUF_STATIC( txt ); MainwLoad load; Workspace *ws; load.mainw = mainw; load.buf = &buf; load.nitems = 0; if( filesel_map_filename_multi( filesel, (FileselMapFn) mainw_open_fn, &load, NULL ) ) { nfn( sys, IWINDOW_ERROR ); return; } /* Some actual files (image, matrix) were selected. Load into * the current workspace. */ if( load.nitems && (ws = mainw_get_workspace( mainw )) ) { char txt2[MAX_STRSIZE]; VipsBuf buf2 = VIPS_BUF_STATIC( txt2 ); if( load.nitems > 1 ) vips_buf_appendf( &buf2, "Group [%s]", vips_buf_all( &buf ) ); else vips_buf_appends( &buf2, vips_buf_all( &buf ) ); if( !workspace_add_def_recalc( ws, vips_buf_all( &buf2 ) ) ) { error_top( _( "Load failed." ) ); error_sub( _( "Unable to execute:\n %s" ), vips_buf_all( &buf2 ) ); nfn( sys, IWINDOW_ERROR ); return; } } /* Wses will need a recalc. */ symbol_recalculate_all(); /* If we had an empty wsg, perhaps we've just started up, * kill it. */ if( workspacegroup_is_empty( mainw->wsg ) ) { filemodel_set_modified( FILEMODEL( mainw->wsg ), FALSE ); iwindow_kill( IWINDOW( mainw ) ); } nfn( sys, IWINDOW_YES ); } /* Show an open file dialog ... any type, but default to one of the image * ones. */ static void mainw_open( Mainw *mainw ) { GtkWidget *filesel = filesel_new(); iwindow_set_title( IWINDOW( filesel ), _( "Open File" ) ); filesel_set_flags( FILESEL( filesel ), TRUE, FALSE ); filesel_set_filetype( FILESEL( filesel ), filesel_type_mainw, IMAGE_FILE_TYPE ); filesel_set_filetype_pref( FILESEL( filesel ), "IMAGE_FILE_TYPE" ); iwindow_set_parent( IWINDOW( filesel ), GTK_WIDGET( mainw ) ); filesel_set_done( FILESEL( filesel ), mainw_open_done_cb, mainw ); filesel_set_multi( FILESEL( filesel ), TRUE ); iwindow_build( IWINDOW( filesel ) ); gtk_widget_show( GTK_WIDGET( filesel ) ); } void mainw_open_action_cb( GtkAction *action, Mainw *mainw ) { mainw_open( mainw ); } /* Open one of the example workspaces ... just a shortcut. */ static void mainw_open_examples( Mainw *mainw ) { GtkWidget *filesel = filesel_new(); iwindow_set_title( IWINDOW( filesel ), _( "Open File" ) ); filesel_set_flags( FILESEL( filesel ), TRUE, FALSE ); filesel_set_filetype( FILESEL( filesel ), filesel_type_workspace, 0 ); iwindow_set_parent( IWINDOW( filesel ), GTK_WIDGET( mainw ) ); filesel_set_done( FILESEL( filesel ), mainw_open_done_cb, mainw ); filesel_set_multi( FILESEL( filesel ), TRUE ); iwindow_build( IWINDOW( filesel ) ); filesel_set_filename( FILESEL( filesel ), "$VIPSHOME" G_DIR_SEPARATOR_S "share" G_DIR_SEPARATOR_S PACKAGE G_DIR_SEPARATOR_S "data" G_DIR_SEPARATOR_S "examples" G_DIR_SEPARATOR_S "1_point_mosaic" ); /* Reset the filetype ... setting the filename will have changed it to * 'all', since there's no suffix. */ filesel_set_filetype( FILESEL( filesel ), filesel_type_workspace, 0 ); gtk_widget_show( GTK_WIDGET( filesel ) ); } static void mainw_open_examples_action_cb( GtkAction *action, Mainw *mainw ) { mainw_open_examples( mainw ); } static gboolean mainw_recent_open( Mainw *mainw, const char *filename ) { Workspacegroup *wsg = mainw->wsg; if( is_file_type( &filesel_wfile_type, filename ) ) { if( !mainw_open_workspace( wsg->wsr, filename ) ) return( FALSE ); /* If we had an empty wsg, perhaps we've just started up, * kill it. */ if( workspacegroup_is_empty( wsg ) ) { filemodel_set_modified( FILEMODEL( wsg ), FALSE ); iwindow_kill( IWINDOW( mainw ) ); } } else { Workspace *ws; if( (ws = mainw_get_workspace( mainw )) && !workspace_load_file( ws, filename ) ) return( FALSE ); } return( TRUE ); } static void mainw_recent_open_cb( GtkWidget *widget, const char *filename ) { Mainw *mainw = MAINW( iwindow_get_root( widget ) ); progress_begin(); if( !mainw_recent_open( mainw, filename ) ) { iwindow_alert( GTK_WIDGET( mainw ), GTK_MESSAGE_ERROR ); progress_end(); return; } progress_end(); symbol_recalculate_all(); } static void mainw_recent_build( GtkWidget *menu, GSList *recent ) { GSList *p; for( p = recent; p; p = p->next ) { const char *filename = (const char *) p->data; GtkWidget *item; char txt[80]; VipsBuf buf = VIPS_BUF_STATIC( txt ); char *utf8; vips_buf_appendf( &buf, " %s", im_skip_dir( filename ) ); utf8 = f2utf8( vips_buf_all( &buf ) ); item = gtk_menu_item_new_with_label( utf8 ); g_free( utf8 ); utf8 = f2utf8( filename ); set_tooltip( item, "%s", utf8 ); g_free( utf8 ); gtk_menu_append( GTK_MENU( menu ), item ); gtk_widget_show( item ); gtk_signal_connect( GTK_OBJECT( item ), "activate", GTK_SIGNAL_FUNC( mainw_recent_open_cb ), (char *) filename ); } } static void mainw_recent_clear_cb( GtkWidget *widget, const char *filename ) { IM_FREEF( recent_free, mainw_recent_workspace ); IM_FREEF( recent_free, mainw_recent_image ); IM_FREEF( recent_free, mainw_recent_matrix ); /* Need to remove files too to prevent merge on quit. */ (void) unlinkf( "%s" G_DIR_SEPARATOR_S "%s", get_savedir(), RECENT_WORKSPACE ); (void) unlinkf( "%s" G_DIR_SEPARATOR_S "%s", get_savedir(), RECENT_IMAGE ); (void) unlinkf( "%s" G_DIR_SEPARATOR_S "%s", get_savedir(), RECENT_MATRIX ); } static void mainw_recent_map_cb( GtkWidget *widget, Mainw *mainw ) { GtkWidget *menu = mainw->recent_menu; GtkWidget *item; gtk_container_foreach( GTK_CONTAINER( menu ), (GtkCallback) gtk_widget_destroy, NULL ); if( mainw_recent_image ) { item = gtk_menu_item_new_with_label( _( "Recent Images" ) ); gtk_menu_append( GTK_MENU( menu ), item ); gtk_widget_show( item ); gtk_widget_set_sensitive( item, FALSE ); mainw_recent_build( menu, mainw_recent_image ); } if( mainw_recent_workspace ) { item = gtk_menu_item_new_with_label( _( "Recent Workspaces" ) ); gtk_menu_append( GTK_MENU( menu ), item ); gtk_widget_show( item ); gtk_widget_set_sensitive( item, FALSE ); mainw_recent_build( menu, mainw_recent_workspace ); } if( mainw_recent_matrix ) { item = gtk_menu_item_new_with_label( _( "Recent Matricies" ) ); gtk_menu_append( GTK_MENU( menu ), item ); gtk_widget_show( item ); gtk_widget_set_sensitive( item, FALSE ); mainw_recent_build( menu, mainw_recent_matrix ); } if( !mainw_recent_workspace && !mainw_recent_image && !mainw_recent_matrix ) { item = gtk_menu_item_new_with_label( _( "No recent items" ) ); gtk_menu_append( GTK_MENU( menu ), item ); gtk_widget_show( item ); gtk_widget_set_sensitive( item, FALSE ); } else { item = gtk_menu_item_new_with_label( _( "Clear Recent Menu" ) ); gtk_menu_append( GTK_MENU( menu ), item ); gtk_widget_show( item ); gtk_signal_connect( GTK_OBJECT( item ), "activate", GTK_SIGNAL_FUNC( mainw_recent_clear_cb ), NULL ); } } /* Merge a .ws into this wsg. */ static void * mainw_workspace_merge_fn( Filesel *filesel, const char *filename, void *a, void *b ) { Mainw *mainw = MAINW( a ); if( !workspacegroup_merge_workspaces( mainw->wsg, filename ) ) return( filesel ); /* Process some events to make sure we rethink the layout and * are able to get the append-at-RHS offsets. */ process_events(); symbol_recalculate_all(); mainw_recent_add( &mainw_recent_workspace, filename ); return( NULL ); } /* Callback from load browser. */ static void mainw_workspace_merge_done_cb( iWindow *iwnd, void *client, iWindowNotifyFn nfn, void *sys ) { Filesel *filesel = FILESEL( iwnd ); Mainw *mainw = MAINW( client ); if( filesel_map_filename_multi( filesel, mainw_workspace_merge_fn, mainw, NULL ) ) { symbol_recalculate_all(); nfn( sys, IWINDOW_ERROR ); return; } symbol_recalculate_all(); nfn( sys, IWINDOW_YES ); } /* Merge ws file into current ws. */ void mainw_workspace_merge( Mainw *mainw ) { GtkWidget *filesel = filesel_new(); iwindow_set_title( IWINDOW( filesel ), _( "Merge Workspace from File" ) ); filesel_set_flags( FILESEL( filesel ), FALSE, FALSE ); filesel_set_filetype( FILESEL( filesel ), filesel_type_workspace, 0 ); iwindow_set_parent( IWINDOW( filesel ), GTK_WIDGET( mainw ) ); filesel_set_done( FILESEL( filesel ), mainw_workspace_merge_done_cb, mainw ); filesel_set_multi( FILESEL( filesel ), TRUE ); iwindow_build( IWINDOW( filesel ) ); gtk_widget_show( GTK_WIDGET( filesel ) ); } void mainw_workspace_merge_action_cb( GtkAction *action, Mainw *mainw ) { mainw_workspace_merge( mainw ); } /* Load a workspace, called from a yesno dialog. */ static void mainw_auto_recover_cb( iWindow *iwnd, void *client, iWindowNotifyFn nfn, void *sys ) { char *filename = (char *) client; Workspacegroup *new_wsg; Mainw *new_mainw; progress_begin(); if( !(new_wsg = workspacegroup_new_from_file( main_workspaceroot, filename, filename )) ) { progress_end(); nfn( sys, IWINDOW_ERROR ); return; } filemodel_set_filename( FILEMODEL( new_wsg ), NULL ); new_mainw = mainw_new( new_wsg ); gtk_widget_show( GTK_WIDGET( new_mainw ) ); symbol_recalculate_all(); progress_end(); nfn( sys, IWINDOW_YES ); } /* Auto recover. */ static void mainw_recover_action_cb( GtkAction *action, Mainw *mainw ) { char *filename; if( !(filename = workspacegroup_autosave_recover()) ) { if( !AUTO_WS_SAVE ) { error_top( _( "No backup workspaces found." ) ); error_sub( "%s", _( "You need to enable \"Auto workspace " "save\" in Preferences " "before automatic recovery works." ) ); } else { error_top( _( "No backup workspaces found." ) ); error_sub( _( "No suitable workspace save files found " "in \"%s\"" ), PATH_TMP ); } iwindow_alert( GTK_WIDGET( mainw ), GTK_MESSAGE_INFO ); return; } /* Tricksy ... free str with notify callack from yesno. */ box_yesno( GTK_WIDGET( mainw ), mainw_auto_recover_cb, iwindow_true_cb, filename, (iWindowNotifyFn) im_free, filename, GTK_STOCK_OPEN, _( "Open workspace backup?" ), _( "Found workspace backup:\n\n\t%s\n\n" "Do you want to recover this workspace?" ), filename ); } /* Callback from make new column. */ void mainw_column_new_action_cb( GtkAction *action, Mainw *mainw ) { Workspace *ws; if( (ws = mainw_get_workspace( mainw )) ) (void) workspace_column_new( ws ); } /* Done button hit. */ static void mainw_column_new_cb( iWindow *iwnd, void *client, iWindowNotifyFn nfn, void *sys ) { Mainw *mainw = MAINW( client ); Stringset *ss = STRINGSET( iwnd ); StringsetChild *name = stringset_child_get( ss, _( "Name" ) ); StringsetChild *caption = stringset_child_get( ss, _( "Caption" ) ); Workspace *ws; Column *col; char name_text[1024]; char caption_text[1024]; if( !(ws = mainw_get_workspace( mainw )) ) { nfn( sys, IWINDOW_YES ); return; } if( !get_geditable_name( name->entry, name_text, 1024 ) || !get_geditable_string( caption->entry, caption_text, 1024 ) ) { nfn( sys, IWINDOW_ERROR ); return; } if( !(col = column_new( ws, name_text )) ) { nfn( sys, IWINDOW_ERROR ); return; } if( strcmp( caption_text, "" ) != 0 ) iobject_set( IOBJECT( col ), NULL, caption_text ); workspace_column_select( ws, col ); column_scrollto( col, MODEL_SCROLL_TOP ); nfn( sys, IWINDOW_YES ); } /* Make a new column with a specified name. */ static void mainw_column_new_named_action_cb( GtkAction *action, Mainw *mainw ) { GtkWidget *ss = stringset_new(); char new_name[MAX_STRSIZE]; Workspace *ws; if( !(ws = mainw_get_workspace( mainw )) ) return; workspace_column_name_new( ws, new_name ); stringset_child_new( STRINGSET( ss ), _( "Name" ), new_name, _( "Set column name here" ) ); stringset_child_new( STRINGSET( ss ), _( "Caption" ), "", _( "Set column caption here" ) ); iwindow_set_title( IWINDOW( ss ), _( "New Column" ) ); idialog_set_callbacks( IDIALOG( ss ), iwindow_true_cb, NULL, NULL, mainw ); idialog_add_ok( IDIALOG( ss ), mainw_column_new_cb, _( "Create Column" ) ); iwindow_set_parent( IWINDOW( ss ), GTK_WIDGET( mainw ) ); iwindow_build( IWINDOW( ss ) ); gtk_widget_show( ss ); } /* Callback from program. */ static void mainw_program_new_action_cb( GtkAction *action, Mainw *mainw ) { Workspace *ws; if( (ws = mainw_get_workspace( mainw )) ) { Program *program; program = program_new( ws->kitg ); gtk_widget_show( GTK_WIDGET( program ) ); } } static void mainw_workspace_new_action_cb( GtkAction *action, Mainw *mainw ) { workspace_new_blank( mainw->wsg ); } /* New workbook. */ static void mainw_workbook_new_action_cb( GtkAction *action, Mainw *mainw ) { Mainw *new_mainw; Workspacegroup *new_wsg; char name[256]; workspaceroot_name_new( mainw->wsg->wsr, name ); new_wsg = workspacegroup_new_blank( mainw->wsg->wsr, name ); new_mainw = mainw_new( new_wsg ); gtk_widget_show( GTK_WIDGET( new_mainw ) ); } /* Callback from auto-recalc toggle. */ static void mainw_autorecalc_action_cb( GtkToggleAction *action, Mainw *mainw ) { GSList *i; mainw_auto_recalc = gtk_toggle_action_get_active( action ); /* Yuk! We have to ask all mainw to refresh by hand, since we're not * using the prefs system for auto_recalc for reasons noted at top. */ for( i = mainw_all; i; i = i->next ) mainw_refresh( MAINW( i->data ) ); if( mainw_auto_recalc ) symbol_recalculate_all(); } /* Callback from lock toggle. */ static void mainw_lock_action_cb( GtkToggleAction *action, Mainw *mainw ) { Workspace *ws; if( (ws = mainw_get_workspace( mainw )) ) workspace_set_locked( ws, gtk_toggle_action_get_active( action ) ); } /* Callback from show toolbar toggle. */ static void mainw_toolbar_action_cb( GtkToggleAction *action, Mainw *mainw ) { mainw->toolbar_visible = gtk_toggle_action_get_active( action ); prefs_set( "MAINW_TOOLBAR", "%s", bool_to_char( mainw->toolbar_visible ) ); mainw_refresh( mainw ); } /* Callback from show statusbar toggle. */ static void mainw_statusbar_action_cb( GtkToggleAction *action, Mainw *mainw ) { mainw->statusbar_visible = gtk_toggle_action_get_active( action ); prefs_set( "MAINW_STATUSBAR", "%s", bool_to_char( mainw->statusbar_visible ) ); mainw_refresh( mainw ); } /* Expose/hide the toolkit browser. */ static void mainw_toolkitbrowser_action_cb( GtkToggleAction *action, Mainw *mainw ) { Workspace *ws; if( (ws = mainw_get_workspace( mainw )) ) { ws->rpane_open = gtk_toggle_action_get_active( action ); iobject_changed( IOBJECT( ws ) ); } } /* Expose/hide the workspace defs. */ static void mainw_tabdefs_action_cb( GtkToggleAction *action, Mainw *mainw ) { Workspace *ws; if( (ws = mainw_get_workspace( mainw )) ) { ws->lpane_open = gtk_toggle_action_get_active( action ); iobject_changed( IOBJECT( ws ) ); } } /* Remove selected items. */ static void mainw_selected_remove_action_cb( GtkAction *action, Mainw *mainw ) { Workspace *ws; if( (ws = mainw_get_workspace( mainw )) ) workspace_selected_remove_yesno( ws, GTK_WIDGET( mainw ) ); } void mainw_revert_ok_cb( iWindow *iwnd, void *client, iWindowNotifyFn nfn, void *sys ) { Prefs *prefs = PREFS( client ); Workspacegroup *wsg = workspace_get_workspacegroup( prefs->ws ); if( FILEMODEL( wsg )->filename ) { (void) unlinkf( "%s", FILEMODEL( wsg )->filename ); main_reload(); symbol_recalculate_all(); } nfn( sys, IWINDOW_YES ); } void mainw_revert_cb( iWindow *iwnd, void *client, iWindowNotifyFn nfn, void *sys ) { Prefs *prefs = PREFS( client ); box_yesno( GTK_WIDGET( iwnd ), mainw_revert_ok_cb, iwindow_true_cb, prefs, nfn, sys, _( "Revert to Defaults" ), _( "Revert to installation defaults?" ), _( "Would you like to reset all preferences to their factory " "settings? This will delete any changes you have ever made " "to your preferences and may take a few seconds." ) ); } static void mainw_preferences_action_cb( GtkAction *action, Mainw *mainw ) { Prefs *prefs; /* Can fail if there's no prefs ws, or an error on load. */ if( !(prefs = prefs_new( NULL )) ) { iwindow_alert( GTK_WIDGET( mainw ), GTK_MESSAGE_ERROR ); return; } iwindow_set_title( IWINDOW( prefs ), _( "Preferences" ) ); iwindow_set_parent( IWINDOW( prefs ), GTK_WIDGET( mainw ) ); idialog_set_callbacks( IDIALOG( prefs ), NULL, NULL, NULL, prefs ); idialog_add_ok( IDIALOG( prefs ), mainw_revert_cb, _( "Revert to Defaults ..." ) ); idialog_add_ok( IDIALOG( prefs ), iwindow_true_cb, GTK_STOCK_CLOSE ); iwindow_build( IWINDOW( prefs ) ); /* Just big enough to avoid a horizontal scrollbar on my machine. FIXME ... Yuk! There must be a better way to do this! Maybe a setting in prefs to suppress the h scrollbar? */ gtk_window_set_default_size( GTK_WINDOW( prefs ), 780, 480 ); gtk_widget_show( GTK_WIDGET( prefs ) ); } /* Make a magic definition for the selected symbol. FIXME .. paste this back when magic is reinstated static void mainw_magic_cb( gpointer callback_data, guint callback_action, GtkWidget *widget ) { Workspace *ws = main_workspaceroot->current; Row *row = workspace_selected_one( ws ); if( !row ) box_alert( mainw, "Select a single object with left-click, " "select Magic Definition." ); else if( !magic_sym( row->sym ) ) iwindow_alert( GTK_WIDGET( mainw ), GTK_MESSAGE_ERROR ); else workspace_deselect_all( ws ); } */ #ifdef HAVE_LIBGVC static void mainw_graph_action_cb( GtkAction *action, Mainw *mainw ) { Workspace *ws; if( (ws = mainw_get_workspace( mainw )) ) { Graphwindow *graphwindow; graphwindow = graphwindow_new( ws, GTK_WIDGET( mainw ) ); gtk_widget_show( GTK_WIDGET( graphwindow ) ); } } #endif /*HAVE_LIBGVC*/ /* Set display mode. */ static void mainw_mode_action_cb( GtkRadioAction *action, GtkRadioAction *current, Mainw *mainw ) { Workspace *ws; if( (ws = mainw_get_workspace( mainw )) ) workspace_set_mode( ws, gtk_radio_action_get_current_value( action ) ); } /* Our actions. */ static GtkActionEntry mainw_actions[] = { /* Menu items. */ { "RecentMenu", NULL, N_( "Open _Recent" ) }, { "JumpToColumnMenu", NULL, N_( "Jump to _Column" ) }, { "ToolkitsMenu", NULL, N_( "_Toolkits" ) }, /* Dummy action ... replaced at runtime. */ { "Stub", NULL, "", NULL, "", NULL }, /* Actions. */ { "NewColumn", GTK_STOCK_NEW, N_( "C_olumn" ), NULL, N_( "Create a new column" ), G_CALLBACK( mainw_column_new_action_cb ) }, { "NewColumnName", GTK_STOCK_NEW, N_( "C_olumn" ), NULL, N_( "Create a new column with a specified name" ), G_CALLBACK( mainw_column_new_named_action_cb ) }, { "NewTab", GTK_STOCK_NEW, N_( "_Tab" ), "T", N_( "Create a new tab" ), G_CALLBACK( mainw_workspace_new_action_cb ) }, { "NewWorkspace", GTK_STOCK_NEW, N_( "_Workspace" ), NULL, N_( "Create a new workspace" ), G_CALLBACK( mainw_workbook_new_action_cb ) }, { "Open", GTK_STOCK_OPEN, N_( "_Open" ), NULL, N_( "Open a file" ), G_CALLBACK( mainw_open_action_cb ) }, { "OpenExamples", NULL, N_( "Open _Examples" ), NULL, N_( "Open example workspaces" ), G_CALLBACK( mainw_open_examples_action_cb ) }, { "DuplicateWorkspace", STOCK_DUPLICATE, N_( "_Duplicate Workspace" ), NULL, N_( "Duplicate workspace" ), G_CALLBACK( mainw_duplicate_action_cb ) }, { "Merge", NULL, N_( "_Merge Into Workspace" ), NULL, N_( "Merge workspace into this workspace" ), G_CALLBACK( mainw_workspace_merge_action_cb ) }, { "Save", GTK_STOCK_SAVE, N_( "_Save Workspace" ), NULL, N_( "Save workspace" ), G_CALLBACK( mainw_save_action_cb ) }, { "SaveAs", GTK_STOCK_SAVE_AS, N_( "_Save Workspace As" ), NULL, N_( "Save workspace as" ), G_CALLBACK( mainw_save_as_action_cb ) }, { "Recover", NULL, N_( "Search for Workspace _Backups" ), NULL, N_( "Load last automatically backed-up workspace" ), G_CALLBACK( mainw_recover_action_cb ) }, { "Delete", GTK_STOCK_DELETE, N_( "_Delete" ), "BackSpace", N_( "Delete selected items" ), G_CALLBACK( mainw_selected_remove_action_cb ) }, { "SelectAll", NULL, N_( "Select _All" ), "A", N_( "Select all items" ), G_CALLBACK( mainw_select_all_action_cb ) }, { "Duplicate", STOCK_DUPLICATE, N_( "D_uplicate Selected" ), "U", N_( "Duplicate selected items" ), G_CALLBACK( mainw_selected_duplicate_action_cb ) }, { "Recalculate", NULL, N_( "_Recalculate" ), NULL, N_( "Recalculate selected items" ), G_CALLBACK( mainw_force_calc_action_cb ) }, { "Find", GTK_STOCK_FIND, N_( "_Find" ), NULL, N_( "Find in workspace" ), G_CALLBACK( mainw_find_action_cb ) }, { "FindNext", NULL, N_( "Find _Next" ), NULL, N_( "Find again in workspace" ), G_CALLBACK( mainw_find_again_action_cb ) }, { "NextError", STOCK_NEXT_ERROR, NULL, NULL, N_( "Jump to next error" ), G_CALLBACK( mainw_next_error_action_cb ) }, { "Group", NULL, N_( "_Group" ), NULL, N_( "Group selected items" ), G_CALLBACK( mainw_group_action_cb ) }, { "Ungroup", NULL, N_( "U_ngroup" ), NULL, N_( "Ungroup selected items" ), G_CALLBACK( mainw_ungroup_action_cb ) }, { "Preferences", GTK_STOCK_PREFERENCES, N_( "_Preferences" ), NULL, N_( "Edit preferences" ), G_CALLBACK( mainw_preferences_action_cb ) }, #ifdef HAVE_LIBGVC { "Graph", NULL, N_( "Workspace as Grap_h" ), NULL, N_( "Show a graph of workspace dependencies" ), G_CALLBACK( mainw_graph_action_cb ) }, #endif /*HAVE_LIBGVC*/ { "EditToolkits", NULL, N_( "_Edit" ), NULL, N_( "Edit toolkits" ), G_CALLBACK( mainw_program_new_action_cb ) } }; static GtkToggleActionEntry mainw_toggle_actions[] = { { "AutoRecalculate", NULL, N_( "Au_to Recalculate" ), NULL, N_( "Recalculate automatically on change" ), G_CALLBACK( mainw_autorecalc_action_cb ), TRUE }, { "Lock", NULL, N_( "_Lock tab" ), NULL, N_( "Lock tab" ), G_CALLBACK( mainw_lock_action_cb ), TRUE }, { "Toolbar", NULL, N_( "_Toolbar" ), NULL, N_( "Show window toolbar" ), G_CALLBACK( mainw_toolbar_action_cb ), TRUE }, { "Statusbar", NULL, N_( "_Statusbar" ), NULL, N_( "Show window statusbar" ), G_CALLBACK( mainw_statusbar_action_cb ), TRUE }, { "ToolkitBrowser", NULL, N_( "Toolkit _Browser" ), NULL, N_( "Show toolkit browser" ), G_CALLBACK( mainw_toolkitbrowser_action_cb ), FALSE }, { "Tabdefs", NULL, N_( "Tab _Definitions" ), NULL, N_( "Show tab definitions" ), G_CALLBACK( mainw_tabdefs_action_cb ), FALSE }, }; static GtkRadioActionEntry mainw_radio_actions[] = { { "Normal", NULL, N_( "_Normal" ), NULL, N_( "Normal view mode" ), WORKSPACE_MODE_REGULAR }, { "ShowFormula", NULL, N_( "Show _Formula" ), NULL, N_( "Show formula view mode" ), WORKSPACE_MODE_FORMULA }, { "NoEdit", NULL, N_( "No _Edits" ), NULL, N_( "No edits view mode" ), WORKSPACE_MODE_NOEDIT }, }; static const char *mainw_menubar_ui_description = "" " " " " " " " " " " " " " " " " " " " " /* Dummy ... replaced on map */ " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " /* Dummy ... replaced on map */ " " " " " " " " " " " " " " " " " " " " " " " " " " #ifdef HAVE_LIBGVC " " " " #endif /*HAVE_LIBGVC*/ " " " " " " " " " " " " " " " " /* Toolkits pasted here at runtime */ " " " " " " " " " " " " " " " " ""; static const char *mainw_toolbar_ui_description = "" " " " " " " " " " " " " " " " " " " ""; static void mainw_watch_changed_cb( Watchgroup *watchgroup, Watch *watch, Mainw *mainw ) { if( strcmp( IOBJECT( watch )->name, "MAINW_TOOLBAR_STYLE" ) == 0 ) mainw->toolbar_visible = MAINW_TOOLBAR; mainw_refresh( mainw ); } /* Make the insides of the panel. */ static void mainw_build( iWindow *iwnd, GtkWidget *vbox ) { Mainw *mainw = MAINW( iwnd ); GtkWidget *mbar; GtkWidget *frame; GError *error; GtkWidget *cancel; GtkWidget *item; #ifdef DEBUG printf( "mainw_build: %p\n", mainw ); #endif /*DEBUG*/ /* Make main menu bar */ gtk_action_group_add_actions( iwnd->action_group, mainw_actions, G_N_ELEMENTS( mainw_actions ), GTK_WINDOW( mainw ) ); gtk_action_group_add_toggle_actions( iwnd->action_group, mainw_toggle_actions, G_N_ELEMENTS( mainw_toggle_actions ), GTK_WINDOW( mainw ) ); gtk_action_group_add_radio_actions( iwnd->action_group, mainw_radio_actions, G_N_ELEMENTS( mainw_radio_actions ), WORKSPACE_MODE_REGULAR, G_CALLBACK( mainw_mode_action_cb ), GTK_WINDOW( mainw ) ); error = NULL; if( !gtk_ui_manager_add_ui_from_string( iwnd->ui_manager, mainw_menubar_ui_description, -1, &error ) || !gtk_ui_manager_add_ui_from_string( iwnd->ui_manager, mainw_toolbar_ui_description, -1, &error ) ) { g_message( "building menus failed: %s", error->message ); g_error_free( error ); exit( EXIT_FAILURE ); } mbar = gtk_ui_manager_get_widget( iwnd->ui_manager, "/MainwMenubar" ); gtk_box_pack_start( GTK_BOX( vbox ), mbar, FALSE, FALSE, 0 ); gtk_widget_show( mbar ); /* Get the dummy item on the recent menu, then get the enclosing menu * for that dummy item. */ item = gtk_ui_manager_get_widget( iwnd->ui_manager, "/MainwMenubar/FileMenu/RecentMenu/Stub" ); mainw->recent_menu = gtk_widget_get_parent( GTK_WIDGET( item ) ); gtk_signal_connect( GTK_OBJECT( mainw->recent_menu ), "map", GTK_SIGNAL_FUNC( mainw_recent_map_cb ), mainw ); /* Same for the column jump menu. */ item = gtk_ui_manager_get_widget( iwnd->ui_manager, "/MainwMenubar/EditMenu/JumpToColumnMenu/Stub" ); mainw->jump_to_column_menu = gtk_widget_get_parent( GTK_WIDGET( item ) ); /* Same for the tk menu. */ item = gtk_ui_manager_get_widget( iwnd->ui_manager, "/MainwMenubar/ToolkitsMenu/Stub" ); mainw->toolkit_menu = gtk_widget_get_parent( GTK_WIDGET( item ) ); gtk_widget_destroy( item ); /* Attach toolbar. */ mainw->toolbar = gtk_ui_manager_get_widget( iwnd->ui_manager, "/MainwToolbar" ); gtk_box_pack_start( GTK_BOX( vbox ), mainw->toolbar, FALSE, FALSE, 0 ); widget_visible( mainw->toolbar, MAINW_TOOLBAR ); /* This will set to NULL if we don't have infobar support. */ if( (IWINDOW( mainw )->infobar = infobar_new()) ) gtk_box_pack_start( GTK_BOX( vbox ), GTK_WIDGET( IWINDOW( mainw )->infobar ), FALSE, FALSE, 0 ); /* hbox for status bar etc. */ mainw->statusbar_main = gtk_hbox_new( FALSE, 2 ); gtk_box_pack_end( GTK_BOX( vbox ), mainw->statusbar_main, FALSE, FALSE, 2 ); widget_visible( mainw->statusbar_main, MAINW_STATUSBAR ); /* Make space free label. */ mainw->space_free_eb = gtk_event_box_new(); gtk_box_pack_start( GTK_BOX( mainw->statusbar_main ), mainw->space_free_eb, FALSE, FALSE, 0 ); gtk_widget_show( mainw->space_free_eb ); frame = gtk_frame_new( NULL ); gtk_frame_set_shadow_type( GTK_FRAME( frame ), GTK_SHADOW_IN ); gtk_container_add( GTK_CONTAINER( mainw->space_free_eb ), frame ); gtk_widget_show( frame ); mainw->space_free = gtk_label_new( "space_free" ); gtk_misc_set_padding( GTK_MISC( mainw->space_free ), 2, 2 ); gtk_container_add( GTK_CONTAINER( frame ), mainw->space_free ); gtk_signal_connect( GTK_OBJECT( mainw->space_free_eb ), "event", GTK_SIGNAL_FUNC( mainw_space_free_event ), mainw ); set_tooltip_generate( mainw->space_free_eb, (TooltipGenerateFn) mainw_space_free_tooltip_generate, mainw, NULL ); gtk_widget_show( mainw->space_free ); mainw->imageinfo_changed_sid = g_signal_connect( main_imageinfogroup, "changed", G_CALLBACK( mainw_free_changed_cb ), mainw ); mainw->heap_changed_sid = g_signal_connect( reduce_context->heap, "changed", G_CALLBACK( mainw_free_changed_cb ), mainw ); /* Make message label. */ mainw->statusbar = gtk_label_new( "" ); gtk_label_set_ellipsize( GTK_LABEL( mainw->statusbar ), PANGO_ELLIPSIZE_MIDDLE ); /* 6 is enough to stop the statusbar changing height when the progress * indicator changes visibility. */ gtk_misc_set_padding( GTK_MISC( mainw->statusbar ), 2, 6 ); gtk_misc_set_alignment( GTK_MISC( mainw->statusbar ), 0.0, 0.5 ); gtk_box_pack_start( GTK_BOX( mainw->statusbar_main ), mainw->statusbar, TRUE, TRUE, 0 ); gtk_widget_show( mainw->statusbar ); mainw->progress_box = gtk_hbox_new( FALSE, 2 ); mainw->progress = gtk_progress_bar_new(); gtk_widget_set_size_request( GTK_WIDGET( mainw->progress ), 200, -1 ); gtk_box_pack_end( GTK_BOX( mainw->progress_box ), mainw->progress, FALSE, TRUE, 0 ); gtk_widget_show( mainw->progress ); cancel = gtk_button_new_with_label( "Cancel" ); g_signal_connect( cancel, "clicked", G_CALLBACK( mainw_cancel_cb ), mainw ); gtk_box_pack_end( GTK_BOX( mainw->progress_box ), cancel, FALSE, TRUE, 0 ); gtk_widget_show( cancel ); gtk_box_pack_end( GTK_BOX( mainw->statusbar_main ), mainw->progress_box, FALSE, TRUE, 0 ); mainw->wsgview = WORKSPACEGROUPVIEW( workspacegroupview_new() ); gtk_box_pack_start( GTK_BOX( vbox ), GTK_WIDGET( mainw->wsgview ), TRUE, TRUE, 0 ); view_link( VIEW( mainw->wsgview ), MODEL( mainw->wsg ), NULL ); gtk_widget_show( GTK_WIDGET( mainw->wsgview ) ); /* Any changes to prefs, refresh (yuk!). */ mainw->watch_changed_sid = g_signal_connect( main_watchgroup, "watch_changed", G_CALLBACK( mainw_watch_changed_cb ), mainw ); } static void mainw_popdown( iWindow *iwnd, void *client, iWindowNotifyFn nfn, void *sys ) { Mainw *mainw = MAINW( iwnd ); /* We can be destroyed in two ways: either our iwnd tells us to go, or * our model is destroyed under us. If the model has gone, we just go. * If the model is still there, we need to ask about saving and * quitting. */ if( mainw->wsg ) filemodel_inter_savenclose_cb( IWINDOW( mainw ), FILEMODEL( mainw->wsg ), nfn, sys ); else nfn( sys, IWINDOW_YES ); } static void mainw_wsg_changed_cb( Workspacegroup *wsg, Mainw *mainw ) { mainw_refresh( mainw ); } static void mainw_wsg_destroy_cb( Workspacegroup *wsg, Mainw *mainw ) { mainw->wsg = NULL; } static void mainw_link( Mainw *mainw, Workspacegroup *wsg ) { Workspace *ws = workspacegroup_get_workspace( wsg ); /* Take ownership of the wsg. */ mainw->wsg = wsg; g_object_ref( G_OBJECT( mainw->wsg ) ); iobject_sink( IOBJECT( mainw->wsg ) ); wsg->iwnd = IWINDOW( mainw ); iwindow_set_build( IWINDOW( mainw ), (iWindowBuildFn) mainw_build, wsg, NULL, NULL ); iwindow_set_popdown( IWINDOW( mainw ), mainw_popdown, NULL ); iwindow_set_size_prefs( IWINDOW( mainw ), "MAINW_WINDOW_WIDTH", "MAINW_WINDOW_HEIGHT" ); iwindow_build( IWINDOW( mainw ) ); if( ws && MODEL( ws )->window_width != - 1 ) gtk_window_set_default_size( GTK_WINDOW( mainw ), MODEL( ws )->window_width, MODEL( ws )->window_height ); /* Set start state. */ (void) mainw_refresh( mainw ); mainw->changed_sid = g_signal_connect( mainw->wsg, "changed", G_CALLBACK( mainw_wsg_changed_cb ), mainw ); mainw->destroy_sid = g_signal_connect( mainw->wsg, "destroy", G_CALLBACK( mainw_wsg_destroy_cb ), mainw ); } Mainw * mainw_new( Workspacegroup *wsg ) { Mainw *mainw; mainw = MAINW( g_object_new( TYPE_MAINW, NULL ) ); mainw_link( mainw, wsg ); return( mainw ); } static void * mainw_cull_sub( Mainw *mainw ) { if( !ICONTAINER( mainw->wsg )->children ) { filemodel_set_modified( FILEMODEL( mainw->wsg ), FALSE ); iwindow_kill( IWINDOW( mainw ) ); } return( NULL ); } void mainw_cull( void ) { slist_map( mainw_all, (SListMapFn) mainw_cull_sub, NULL ); } static void * mainw_layout_sub( Workspace *ws ) { model_layout( MODEL( ws ) ); workspace_set_needs_layout( ws, FALSE ); return( NULL ); } static gboolean mainw_layout_timeout_cb( gpointer user_data ) { mainw_layout_timeout = 0; slist_map( workspace_get_needs_layout(), (SListMapFn) mainw_layout_sub, NULL ); return( FALSE ); } void mainw_layout( void ) { IM_FREEF( g_source_remove, mainw_layout_timeout ); mainw_layout_timeout = g_timeout_add( 300, (GSourceFunc) mainw_layout_timeout_cb, NULL ); } nip2-8.7.0/src/itext.h0000644000175000017500000000444113224651032011415 00000000000000/* a text button in a workspace */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_ITEXT (itext_get_type()) #define ITEXT( obj ) \ (G_TYPE_CHECK_INSTANCE_CAST( (obj), TYPE_ITEXT, iText )) #define ITEXT_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_CAST( (klass), TYPE_ITEXT, iTextClass)) #define IS_ITEXT( obj ) \ (G_TYPE_CHECK_INSTANCE_TYPE( (obj), TYPE_ITEXT )) #define IS_ITEXT_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_TYPE( (klass), TYPE_ITEXT )) #define ITEXT_GET_CLASS( obj ) \ (G_TYPE_INSTANCE_GET_CLASS( (obj), TYPE_ITEXT, iTextClass )) struct _iText { Heapmodel parent_class; VipsBuf value; /* The value displayed as a [char] */ char *formula; /* The formula we edit */ char *formula_default; /* Formula we inherit */ VipsBuf decompile; /* The value decompiled to a [char] */ /* TRUE if the formula has been entered by the user and should be * saved. * * Can't use classmodel edited, as text must inherit from heapmodel. * Some duplication of code ... see itext_clear_edited() */ gboolean edited; }; typedef struct _iTextClass { HeapmodelClass parent_class; /* My methods. */ } iTextClass; GType itext_get_type( void ); iText *itext_new( Rhs *rhs ); gboolean itext_value( Reduce *rc, VipsBuf *buf, PElement *root ); void itext_value_ev( Reduce *rc, VipsBuf *buf, PElement *root ); gboolean itext_make_value_string( Expr *expr, VipsBuf *buf ); void itext_set_edited( iText *text, gboolean edited ); gboolean itext_set_formula( iText *text, const char *formula ); nip2-8.7.0/src/workspacedefs.h0000644000175000017500000000341213224651032013115 00000000000000/* Workspace-local defs */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_WORKSPACEDEFS (workspacedefs_get_type()) #define WORKSPACEDEFS( obj ) \ (GTK_CHECK_CAST( (obj), TYPE_WORKSPACEDEFS, Workspacedefs )) #define WORKSPACEDEFS_CLASS( klass ) \ (GTK_CHECK_CLASS_CAST( (klass), \ TYPE_WORKSPACEDEFS, WorkspacedefsClass )) #define IS_WORKSPACEDEFS( obj ) \ (GTK_CHECK_TYPE( (obj), TYPE_WORKSPACEDEFS )) #define IS_WORKSPACEDEFS_CLASS( klass ) \ (GTK_CHECK_CLASS_TYPE( (klass), TYPE_WORKSPACEDEFS )) struct _Workspacedefs { vObject parent_object; Workspace *ws; /* Workspace we explore */ GtkWidget *text; gboolean changed; /* Text has been edited */ gboolean errors; /* Error on last process */ guint text_hash; /* Hash of the last text we set */ GtkWidget *status; }; typedef struct _WorkspacedefsClass { vObjectClass parent_class; } WorkspacedefsClass; GtkType workspacedefs_get_type( void ); Workspacedefs *workspacedefs_new( void ); nip2-8.7.0/src/util.h0000644000175000017500000002555613224651032011247 00000000000000/* Declarations for some basic util functions. */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* chartype strings. Useful with break_token(). */ #define NUMERIC "0123456789" #define WHITESPACE " \t\r\b\n" /* Like IM_NEW() etc, but set ip's error buffer. */ #define INEW(IM,A) ((A *)imalloc((IM),sizeof(A))) #define IARRAY(IM,N,T) ((T *)imalloc((IM),(N) * sizeof(T))) /* No nulls! Handy for printf() %s */ #define NN( S ) ((S)?(S):"(null)") #define UNREF( X ) do { \ if( X ) { \ g_object_unref( G_OBJECT( X ) ); \ (X) = NULL; \ } \ } while( 0 ) #define GOG_UNREF( X ) do { \ if( X ) { \ gog_object_clear_parent( GOG_OBJECT( X ) ); \ g_object_unref( G_OBJECT( X ) ); \ (X) = NULL; \ } \ } while( 0 ) #define FREESID( SID, OBJ ) do { \ if( (SID) && (OBJ) ) { \ g_signal_handler_disconnect( (OBJ), (SID) ); \ (SID) = 0; \ } \ } while( 0 ) /* Swap two pointers. */ #define SWAPP( A, B ) { \ void *swapp_t; \ \ swapp_t = (A); \ (A) = (B); \ (B) = swapp_t; \ } void vips_buf_appendi( VipsBuf *buf, IMAGE *im ); gboolean vips_buf_appendsc( VipsBuf *buf, gboolean quote, const char *str ); gboolean set_prop( xmlNode *xnode, const char *name, const char *fmt, ... ) __attribute__((format(printf, 3, 4))); gboolean set_sprop( xmlNode *xnode, const char *name, const char *value ); gboolean set_iprop( xmlNode *xnode, const char *name, int value ); gboolean set_dprop( xmlNode *xnode, const char *name, double value ); gboolean set_slprop( xmlNode *xnode, const char *name, GSList *labels ); gboolean set_dlprop( xmlNode *xnode, const char *name, double *values, int n ); gboolean get_sprop( xmlNode *xnode, const char *name, char *buf, int sz ); gboolean get_spropb( xmlNode *xnode, const char *name, VipsBuf *buf ); gboolean get_iprop( xmlNode *xnode, const char *name, int *out ); gboolean get_dprop( xmlNode *xnode, const char *name, double *out ); gboolean get_bprop( xmlNode *xnode, const char *name, gboolean *out ); gboolean get_slprop( xmlNode *xnode, const char *name, GSList **out ); gboolean get_dlprop( xmlNode *xnode, const char *name, double **out ); xmlNode *get_node( xmlNode *base, const char *name ); Rect *rect_dup( Rect *init ); void *rect_free( Rect *rect ); /* Like GFunc, but return a value. */ typedef gpointer (*SListMapFn)( gpointer, gpointer ); typedef gpointer (*SListMap2Fn)( gpointer, gpointer, gpointer ); typedef gpointer (*SListMap3Fn)( gpointer, gpointer, gpointer, gpointer ); typedef gpointer (*SListMap4Fn)( gpointer, gpointer, gpointer, gpointer, gpointer ); typedef gpointer (*SListMap5Fn)( gpointer, gpointer, gpointer, gpointer, gpointer, gpointer ); typedef gpointer (*SListFoldFn)( gpointer, gpointer, gpointer ); typedef gpointer (*SListFold2Fn)( gpointer, gpointer, gpointer, gpointer ); /* Like foreach, but allow abandon. */ void *slist_map( GSList *list, SListMapFn fn, gpointer a ); void *slist_map2( GSList *list, SListMap2Fn fn, gpointer a, gpointer b ); void *slist_map3( GSList *list, SListMap3Fn fn, gpointer a, gpointer b, gpointer c ); void *slist_map4( GSList *list, SListMap4Fn fn, gpointer a, gpointer b, gpointer c, gpointer d ); void *slist_map5( GSList *list, SListMap5Fn fn, gpointer a, gpointer b, gpointer c, gpointer d, gpointer e ); void *slist_map_rev( GSList *list, SListMapFn fn, gpointer a ); void *slist_map2_rev( GSList *list, SListMap2Fn fn, gpointer a, gpointer b ); void *slist_map3_rev( GSList *list, SListMap3Fn fn, void *a, void *b, void *c ); void *map_equal( void *a, void *b ); gboolean slist_equal( GSList *l1, GSList *l2 ); void *slist_fold( GSList *list, void *start, SListFoldFn fn, void *a ); void *slist_fold2( GSList *list, void *start, SListFold2Fn fn, void *a, void *b ); void slist_free_all( GSList *list ); GSList *slist_remove_all( GSList *list, gpointer data ); /* An slist, which tracks the end of the list, for fast append. */ typedef struct _Queue { GSList *list; GSList *tail; int length; } Queue; Queue *queue_new( void ); /* All we need for now. */ void *queue_head( Queue *queue ); void queue_add( Queue *queue, void *data ); gboolean queue_remove( Queue *q, void *data ); int queue_length( Queue *q ); extern VipsBuf error_top_buf; extern VipsBuf error_sub_buf; void error( const char *fmt, ... ) __attribute__((noreturn, format(printf, 1, 2))); void error_block( void ); /* Block updates to error_string */ void error_unblock( void ); void error_clear( void ); void error_top( const char *fmt, ... ) __attribute__((format(printf, 1, 2))); void error_sub( const char *fmt, ... ) __attribute__((format(printf, 1, 2))); void error_vips( void ); void error_vips_all( void ); const char *error_get_top( void ); const char *error_get_sub( void ); gboolean is_postfix( const char *a, const char *b ); gboolean is_prefix( const char *a, const char *b ); gboolean is_caseprefix( const char *a, const char *b ); gboolean is_casepostfix( const char *a, const char *b ); const char *findrightmost( const char *a, const char *b ); char *my_strcasestr( const char *haystack, const char *needle ); void change_suffix( const char *name, char *out, const char *new, const char **olds, int nolds ); char *my_strccpy( char *output, const char *input ); char *my_strecpy( char *output, const char *input, gboolean quote ); const char *my_strrspn( const char *p, const char *spn ); char *trim_nonalpha( char *text ); char *trim_white( char *text ); void *get_element( REGION *ireg, int x, int y, int b ); const char *decode_bandfmt( int f ); const char *decode_type( int t ); void get_image_info( VipsBuf *buf, const char *name ); void expand_variables( const char *in, char *out ); void nativeize_path( char *buf ); void absoluteize_path( char *path ); void canonicalize_path( char *path ); const char *get_vipshome( const char *argv0 ); typedef void *(*callv_string_fn)( const char *name, void *a, void *b, void *c ); void *callv_string( callv_string_fn fn, const char *name, void *a, void *b, void *c ); void *callv_stringva( callv_string_fn fn, const char *name, va_list ap, void *a, void *b, void *c ); void *callv_stringf( callv_string_fn fn, const char *fmt, ... ) __attribute__((format(printf, 2, 3))); void *callv_string_filename( callv_string_fn fn, const char *filename, void *a, void *b, void *c ); void *callv_string_filenameva( callv_string_fn fn, const char *name, va_list ap, void *a, void *b, void *c ); void *callv_string_filenamef( callv_string_fn fn, const char *fmt, ... ) __attribute__((format(printf, 2, 3))); typedef int (*calli_string_fn)( const char *name, void *a, void *b, void *c ); int calli_string( calli_string_fn fn, const char *name, void *a, void *b, void *c ); int calli_stringva( calli_string_fn fn, const char *name, va_list ap, void *a, void *b, void *c ); int calli_stringf( calli_string_fn fn, const char *fmt, ... ) __attribute__((format(printf, 2, 3))); int calli_string_filename( calli_string_fn fn, const char *filename, void *a, void *b, void *c ); int calli_string_filenameva( calli_string_fn fn, const char *name, va_list ap, void *a, void *b, void *c ); int calli_string_filenamef( calli_string_fn fn, const char *fmt, ... ) __attribute__((format(printf, 2, 3))); char *f2utf8( const char *filename ); char *im_strdupn( const char *str ); void setenvf( const char *name, const char *fmt, ... ) __attribute__((format(printf, 2, 3))); gboolean existsf( const char *name, ... ) __attribute__((format(printf, 1, 2))); gboolean isdir( const char *filename, ... ) __attribute__((format(printf, 1, 2))); time_t mtime( const char *filename, ... ) __attribute__((format(printf, 1, 2))); gboolean mkdirf( const char *name, ... ) __attribute__((format(printf, 1, 2))); int systemf( const char *fmt, ... ) __attribute__((format(printf, 1, 2))); FILE *popenf( const char *fmt, const char *mode, ... ) __attribute__((format(printf, 1, 3))); gboolean touchf( const char *fmt, ... ) __attribute__((format(printf, 1, 2))); int unlinkf( const char *fmt, ... ) __attribute__((format(printf, 1, 2))); gboolean is_absolute( const char *fname ); gboolean is_valid_filename( const char *name ); /* Text IO to/from files. Track the filename too, to help error messages. */ typedef struct _iOpenFile { FILE *fp; char *fname; /* File we were passed to make this open_file */ char *fname_real; /* File we opened (maybe after search) */ int last_errno; /* On error, last value for errno */ gboolean read; /* True for open read, false for open write */ } iOpenFile; void ifile_close( iOpenFile *of ); iOpenFile *ifile_open_read( const char *name, ... ) __attribute__((format(printf, 1, 2))); iOpenFile *ifile_open_read_stdin(); iOpenFile *ifile_open_write( const char *name, ... ) __attribute__((format(printf, 1, 2))); gboolean ifile_write( iOpenFile *of, const char *fmt, ... ) __attribute__((format(printf, 2, 3))); gboolean ifile_write_var( iOpenFile *of, const char *name, const char *value ); char *ifile_read( iOpenFile *of ); char *ifile_read_buffer( iOpenFile *of, char *buffer, size_t len ); int ifile_getc( iOpenFile *of ); double directory_size( const char *dirname ); char *escape_percent( const char *in, char *out, int len ); char *escape_markup( const char *in, char *out, int len ); char *escape_mode( const char *in, char *out, int len ); char *break_token( char *str, const char *brk ); const char *rpt( char ch, int n ); const char *spc( int n ); void number_to_string( int n, char *buf ); double find_space( const char *name ); gboolean temp_name( char *name, const char *ext ); int findmaxmin( IMAGE *in, int left, int top, int width, int height, double *min, double *max ); gboolean char_to_bool( char *str, void *out ); char *bool_to_char( gboolean b ); void increment_name( char *buf ); void increment_filename( char *filename ); int extract_first_line( char *buf, char *str, int len ); void name_from_filename( const char *in, char *out ); void util_check_all_destroyed( void ); void *imalloc( IMAGE *im, size_t len ); GSList *recent_add( GSList *recent, const char *filename ); GSList *recent_load( const char *filename ); void recent_free( GSList *recent ); void recent_save( GSList *recent, const char *filename ); const char *get_savedir( void ); void **slist_to_array( GSList *list ); int array_len( void **array ); nip2-8.7.0/src/reduce.h0000644000175000017500000001563413224651032011535 00000000000000/* Header for reduction machine. */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* Huge :-( this pushes sizeof(Reduce) up to 14MB. But we need to be able to * loop down very long lists, eg. for a 65k x 3 LUT held as a Matrix. Drop * this down when we represent matricies more sensibly. */ #define SPINE_SIZE (80000) /* Reduction machine state. Not very opaque ... see mark_reduce() */ struct _Reduce { /* Stack of heap nodes for spine. */ HeapNode *nstack[SPINE_SIZE]; /* Index of free element above node stack top. */ int sp; /* Frame stack ... top of fstack is sp we block GET above. */ int fstack[SPINE_SIZE]; /* Writeback stack ... where the result of each frame goes. */ PElement wbstack[SPINE_SIZE]; /* Frame stack pointer. */ int fsp; /* Heap we evaluate. */ Heap *heap; /* Nested reductions ... need to be able to longjmp() out of stuff, * and restore the machine state. */ int running; jmp_buf error[SPINE_SIZE]; int sps[SPINE_SIZE]; int fsps[SPINE_SIZE]; int tsp[SPINE_SIZE]; }; #define RSPUSH(RC,N) { \ if( (RC)->sp == SPINE_SIZE ) { \ error_top( _( "Stack overflow." ) ); \ error_sub( _( "Spine stack overflow, runaway recursion?" ) ); \ reduce_throw( (RC) ); \ } \ else \ (RC)->nstack[(RC)->sp++]=(N); \ } /* Number of items in current frame. */ #define RSFRAMESIZE(RC) ((RC)->sp - (RC)->fstack[(RC)->fsp - 1]) /* Check for at least N args present. */ #define RSCHECKARGS(RC,N) (RSFRAMESIZE(RC) >= (N)) /* Frame is empty? */ #define RSFRAMEEMPTY(RC) (RSFRAMESIZE(RC) == 0) /* Get offset from stack top, offset 0 is top item. */ #define RSGET(RC,N) ((RC)->nstack[(RC)->sp - ((N) + 1)]) /* Get the writeback for this frame. */ #define RSGETWB(RC) ((RC)->wbstack[(RC)->fsp - 1]) #define RSPUSHFRAME(RC,OUT) { \ if( (RC)->fsp == SPINE_SIZE ) { \ error_top( _( "Stack overflow." ) ); \ error_sub( _( "Frame stack overflow, " \ "expression too complex." ) ); \ reduce_throw( (RC) ); \ } \ else { \ (RC)->wbstack[(RC)->fsp] = *out; \ (RC)->fstack[(RC)->fsp] = (RC)->sp; \ (RC)->fsp++; \ } \ } #define RSPOPFRAME(RC) { \ if( (RC)->fsp == 0 ) { \ error_top( _( "Stack underflow." ) ); \ error_sub( _( "Frame stack underflow, you've found a bug!" ) ); \ reduce_throw( (RC) ); \ } \ else { \ (RC)->fsp--; \ (RC)->sp = (RC)->fstack[(RC)->fsp]; \ } \ } #define RSPOP(RC,N) { \ if( !RSCHECKARGS(RC,N) ) { \ error_top( _( "Stack underflow." ) ); \ error_sub( _( "Spine stack underflow, you've found a bug!" ) ); \ reduce_throw( (RC) ); \ } \ else \ (RC)->sp -= (N); \ } /* Pop this code before any calls to reduce_*() to init stuff and catch * errors. Arg is function return value. The missing running decrement is done * by throw(). */ #define REDUCE_CATCH_START( R ) \ { \ rc->sps[rc->running] = rc->sp; \ rc->fsps[rc->running] = rc->fsp; \ rc->tsp[rc->running] = trace_get_mark(); \ if( setjmp( rc->error[rc->running++] ) ) { \ g_assert( rc->running >= 0 ); \ rc->sp = rc->sps[rc->running]; \ rc->fsp = rc->fsps[rc->running]; \ trace_pop_to( rc->tsp[rc->running] ); \ return( (R) ); \ } \ } /* After any calls to reduce_*(). */ #define REDUCE_CATCH_STOP \ { \ rc->running -= 1; \ g_assert( rc->running >= 0 ); \ } /* Util. */ void reduce_throw( Reduce *rc ) __attribute__((noreturn)); typedef void *(*reduce_safe_pointer_fn)( Reduce *rc, PElement *, void *, void *, void *, void * ); void *reduce_safe_pointer( Reduce *rc, reduce_safe_pointer_fn fn, void *a, void *b, void *c, void *d ); void reduce_get_list( Reduce *rc, PElement *list ); void reduce_error_typecheck( Reduce *rc, PElement *e, const char *name, const char *type ); typedef void *(*reduce_map_list_fn)( Reduce *rc, PElement *, void *, void * ); void *reduce_map_list( Reduce *rc, PElement *base, reduce_map_list_fn fn, void *a, void *b ); typedef void *(*reduce_map_dict_fn)( Reduce *, const char *, PElement *, void *a, void *b ); void *reduce_map_dict( Reduce *rc, PElement *base, reduce_map_dict_fn fn, void *a, void *b ); void reduce_clone_list( Reduce *rc, PElement *base, PElement *out ); int reduce_get_string( Reduce *rc, PElement *base, char *buf, int n ); int reduce_get_lstring( Reduce *rc, PElement *base, GSList **labels ); gboolean reduce_get_bool( Reduce *rc, PElement *base ); double reduce_get_real( Reduce *rc, PElement *base ); void reduce_get_class( Reduce *rc, PElement *base ); Imageinfo *reduce_get_image( Reduce *rc, PElement *base ); int reduce_get_realvec( Reduce *rc, PElement *base, double *buf, int n ); int reduce_get_imagevec( Reduce *rc, PElement *base, Imageinfo **buf, int n ); int reduce_get_matrix( Reduce *rc, PElement *base, double *buf, int n, int *xsize, int *ysize ); void reduce_get_matrix_size( Reduce *rc, PElement *base, int *xsize, int *ysize ); gboolean reduce_is_elist( Reduce *rc, PElement *base ); gboolean reduce_is_list( Reduce *rc, PElement *base ); gboolean reduce_is_string( Reduce *rc, PElement *base ); gboolean reduce_is_finitestring( Reduce *rc, PElement *base ); gboolean reduce_is_realvec( Reduce *rc, PElement *base ); gboolean reduce_is_imagevec( Reduce *rc, PElement *base ); gboolean reduce_is_matrix( Reduce *rc, PElement *base ); gboolean reduce_is_class( Reduce *rc, PElement *klass ); int reduce_list_length( Reduce *rc, PElement *base ); int reduce_list_length_max( Reduce *rc, PElement *base, int max_length ); void reduce_list_index( Reduce *rc, PElement *base, int n, PElement *out ); gboolean reduce_is_instanceof_exact( Reduce *rc, const char *name, PElement *instance ); gboolean reduce_is_instanceof( Reduce *rc, const char *name, PElement *instance ); /* Main. */ extern Reduce *reduce_context; extern int reduce_total_recomputations; void reduce_destroy( Reduce *rc ); Reduce *reduce_new( void ); gboolean reduce_regenerate( Expr *expr, PElement *out ); gboolean reduce_regenerate_member( Expr *expr, PElement *ths, PElement *out ); void reduce_spine( Reduce *rc, PElement *out ); void reduce_spine_strict( Reduce *rc, PElement *out ); gboolean reduce_pelement( Reduce *, ReduceFunction fn, PElement *out ); /* Register and unregister values. */ void reduce_register( Symbol *sym ); void reduce_unregister( Symbol *sym ); nip2-8.7.0/src/lex.l0000644000175000017500000001725113224651032011057 00000000000000%{ /* Lexer for image processing expressions. */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #include "ip.h" #ifdef HAVE_FLEX /* Flex has a different input mechanism :( */ #define YY_INPUT(buf,result,max_size) { \ extern int ip_input( void ); \ int c = ip_input(); \ result = (c == 0) ? YY_NULL : (buf[0] = c, 1); \ } #undef unput #define unput ip_unput #else /*HAVE_FLEX*/ /* Assume this is plain lex. */ /* Redefine input, output, unput and yywrap. */ #undef input #undef output #undef unput #undef YYLMAX /* See parse.y for input and unput. */ #define output(A) (error( "output called by lex" )) #define YYLMAX MAX_STRSIZE #define unput ip_unput #define input ip_input #endif /*HAVE_FLEX*/ /* Stuff from bison. */ #include "parse.h" /* Read a string into a buffer. Read up to the " character, " can be * escaped with '\'. */ static void read_string( char *buf ) { int ch; int i; /* Read up to \n, ", EOF, ignoring \" * Don't forget about "\\" though. */ for( i = 0; (ch = ip_input()); i++ ) { if( ch == EOF || ch == '\n' || ch == '"' || ch == '\0' ) break; if( i >= MAX_STRSIZE ) yyerror( _( "line too long" ) ); buf[i] = ch; if( ch == '\\' ) { ch = ip_input(); if( ch == EOF || ch == '\n' || ch == '\0' ) break; if( i >= MAX_STRSIZE ) yyerror( _( "line too long" ) ); buf[++i] = ch; } } buf[i] = '\0'; if( ch == '\n' ) yyerror( _( "end of line inside string" ) ); if( ch == EOF || ch == '\0' ) yyerror( _( "no end of string" ) ); } /* Read a char constant. The leading ' has already been seen. Cases to consider: * '\n' * '\\' * ''' (illegal in C, but I think we allow it) * '\'' */ static int read_char( void ) { int ch; ch = ip_input(); if( ch == EOF || ch == '\n' || ch == '\0' ) yyerror( _( "bad char constant" ) ); if( ch == '\\' ) { char buf[3]; char buf2[3]; buf[0] = ch; buf[1] = ch = ip_input(); buf[2] = '\0'; if( ch == EOF || ch == '\n' || ch == '\0' ) yyerror( _( "bad char constant" ) ); my_strccpy( buf2, buf ); ch = buf2[0]; } if( '\'' != ip_input() ) yyerror( _( "bad char constant" ) ); return( ch ); } %} %Start DOT %Start BINARY %option noyywrap %% \/\* { int ch; while( (ch = input()) != EOF ) if( ch == '*' ) { if( (ch = input()) == '/' ) break; else unput( ch ); } else if( ch == '/' ) { if( (ch = input()) == '*' ) yyerror( _( "nested comment" ) ); else unput( ch ); } if( ch == EOF ) yyerror( _( "no end of comment" ) ); } # | (\/\/) { int ch; /* Read string up to \n, EOF. */ while( (ch = input()) != EOF && ch != '\n' ) ; } \#separator { BEGIN 0; return( TK_SEPARATOR ); } \#dialog { BEGIN 0; return( TK_DIALOG ); } class { BEGIN 0; return( TK_CLASS ); } scope { BEGIN 0; return( TK_SCOPE ); } char { BEGIN 0; return( TK_CHAR ); } short { BEGIN 0; return( TK_SHORT ); } int { BEGIN 0; return( TK_INT ); } float { BEGIN 0; return( TK_FLOAT ); } double { BEGIN 0; return( TK_DOUBLE ); } signed { BEGIN 0; return( TK_SIGNED ); } unsigned { BEGIN 0; return( TK_UNSIGNED ); } complex { BEGIN 0; return( TK_COMPLEX ); } if { BEGIN 0; return( TK_IF ); } then { BEGIN 0; return( TK_THEN ); } else { BEGIN 0; return( TK_ELSE ); } \.\.\. { BEGIN 0; return( TK_DOTDOTDOT ); } \.\. { BEGIN 0; return( TK_DOTDOTDOT ); } true | TRUE { BEGIN BINARY; yylval.yy_const.type = PARSE_CONST_BOOL; yylval.yy_const.val.bool = TRUE; return( TK_CONST ); } false | FALSE { BEGIN BINARY; yylval.yy_const.type = PARSE_CONST_BOOL; yylval.yy_const.val.bool = FALSE; return( TK_CONST ); } [a-zA-Z_][a-zA-Z0-9_']* { BEGIN BINARY; yylval.yy_name = im_strdupn( yytext ); return( TK_TAG ); } [a-zA-Z_][a-zA-Z0-9_']* { char *name = model_loadstate_rewrite_name( yytext ); BEGIN BINARY; if( name ) { yylval.yy_name = im_strdupn( name ); vips_buf_change( &lex_text, yytext, name ); } else yylval.yy_name = im_strdupn( yytext ); return( TK_IDENT ); } \$[a-zA-Z_][a-zA-Z0-9_']* { BEGIN BINARY; yylval.yy_const.type = PARSE_CONST_STR; yylval.yy_const.val.str = im_strdupn( yytext + 1 ); return( TK_CONST ); } \( { BEGIN 0; return( '(' ); } \) { BEGIN BINARY; return( ')' ); } \+\+ { BEGIN 0; return( TK_JOIN ); } \-\- { BEGIN 0; return( TK_DIFF ); } \+ | \- { BEGIN 0; return( *yytext ); } \- { BEGIN 0; return( TK_UMINUS ); } \+ { BEGIN 0; return( TK_UPLUS ); } \< { BEGIN 0; return( TK_LESS ); } \<\= { BEGIN 0; return( TK_LESSEQ ); } \> { BEGIN 0; return( TK_MORE ); } \>\= { BEGIN 0; return( TK_MOREEQ ); } \=\> { BEGIN 0; return( TK_TO ); } \& { BEGIN 0; return( TK_BAND ); } \&\& { BEGIN 0; return( TK_LAND ); } \:\: { BEGIN 0; return( TK_SUCHTHAT ); } \*\* { BEGIN 0; return( TK_POW ); } \>\> { BEGIN 0; return( TK_RSHIFT ); } \<\< { BEGIN 0; return( TK_LSHIFT ); } \<\- { BEGIN 0; return( TK_FROM ); } \| { BEGIN 0; return( TK_BOR ); } \|\| { BEGIN 0; return( TK_LOR ); } \=\= { BEGIN 0; return( TK_EQ ); } \=\=\= { BEGIN 0; return( TK_PEQ ); } \!\= { BEGIN 0; return( TK_NOTEQ ); } \!\=\= { BEGIN 0; return( TK_PNOTEQ ); } \\ { BEGIN 0; return( TK_LAMBDA ); } \^ | \? | \* | \/ | \% | \, | \! | \; | \[ | \: | \= | \~ | \@ | \{ | \} { BEGIN 0; return( *yytext ); } \. { BEGIN DOT; return( *yytext ); } \] { BEGIN BINARY; return( *yytext ); } 0x[0-9a-fA-F]+ { unsigned int i; BEGIN BINARY; if( sscanf( yytext, "0x%x", &i ) != 1 ) nip2yyerror( _( "bad number %s" ), yytext ); yylval.yy_const.type = PARSE_CONST_NUM; yylval.yy_const.val.num = i; return( TK_CONST ); } [0-9]*(\.[0-9]+)?([eE][+-]?[0-9]+)?[ij]? { double d; int ch; BEGIN BINARY; d = g_ascii_strtod( yytext, NULL ); yylval.yy_const.type = PARSE_CONST_NUM; yylval.yy_const.val.num = d; ch = yytext[strlen( yytext ) - 1]; if( ch == 'i' || ch == 'j' ) yylval.yy_const.type = PARSE_CONST_COMPLEX; return( TK_CONST ); } \' { BEGIN BINARY; yylval.yy_const.type = PARSE_CONST_CHAR; yylval.yy_const.val.ch = read_char(); return( TK_CONST ); } \" { ModelLoadState *state = model_loadstate; char buf[MAX_STRSIZE]; char buf2[MAX_STRSIZE]; BEGIN BINARY; read_string( buf ); /* We need to keep buf as exactly the string in the source, * including before interpretation of \ escapes, for the * vips_buf_change() to work. */ my_strccpy( buf2, buf ); if( state && state->rewrite_path ) { char buf3[FILENAME_MAX]; path_compact( buf2 ); /* We've interpreted \n etc. in my_strccpy() above, plus we * have nativised paths from / to \ and therefore introduced * backslashes that weren't there before. * * Before we write source code out again, we must reescape * everything. */ my_strecpy( buf3, buf2, TRUE ); vips_buf_change( &lex_text, buf, buf3 ); } if( strcmp( buf2, "" ) == 0 ) yylval.yy_const.type = PARSE_CONST_ELIST; else { yylval.yy_const.type = PARSE_CONST_STR; yylval.yy_const.val.str = im_strdupn( buf2 ); } return( TK_CONST ); } [ \t\n\r\m\01] ; . { nip2yyerror( _( "illegal character \"%c\"" ), *yytext ); } nip2-8.7.0/src/link.h0000644000175000017500000000520213224651032011211 00000000000000/* Links between top-level syms and the exprs which reference them */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* A sub-link ... the expr in parent that actually references child, plus * the number of times it makes the reference. */ struct _LinkExpr { Link *link; /* Link we are part of */ Expr *expr; /* Expr that references child */ int count; /* Number of times expr references child */ gboolean dynamic; /* True for dynamic link */ }; /* A link object! */ struct _Link { Symbol *parent; /* This top-level symbol contains exprs ... */ Symbol *child; /* ... which reference this symbol */ /* Link serial number ... when we walk the symbol graph marking * stuff dirty, use this to stop repeat trips along links, and * avoid getting stuck in cycles. */ int serial; /* The expressions inside parent which contain direct references to * child. If parent is in the tally, there can be lots of these. * * Two sort of links: static links, which we can deduce from * compile-time analysis of the expr and which only change when * the user edits and we recompile, and dynamic links which we * clear when we regenerate the heap image of the function, and add * to during evaluation. */ GSList *static_links; GSList *dynamic_links; }; void *link_expr_destroy( LinkExpr *le ); void *link_destroy( Link *link ); void *link_add( Symbol *child, Expr *expr, gboolean dynamic ); void *link_remove( Symbol *child, Expr *expr, gboolean dynamic ); int symbol_ndirty( Symbol *sym ); void *symbol_fix_counts( Symbol *sym ); void symbol_link_destroy( Symbol *sym ); void symbol_link_build( Symbol *sym ); int link_serial_new( void ); void *symbol_dirty_intrans( Symbol *sym, int serial ); void *symbol_dirty( Symbol *sym, int serial ); void *symbol_dirty_total( Symbol *sym, int serial ); void *symbol_dirty_clear( Symbol *sym ); nip2-8.7.0/src/class.h0000644000175000017500000001172313224651032011366 00000000000000/* Decls for class.c */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* The builtin member names we know about. */ #define MEMBER_BANDS "bands" #define MEMBER_CAPTION "caption" #define MEMBER_XCAPTION "xcaption" #define MEMBER_YCAPTION "ycaption" #define MEMBER_SERIES_CAPTIONS "series_captions" #define MEMBER_DISPLAY "display" #define MEMBER_CHECK "check" #define MEMBER_FILENAME "filename" #define MEMBER_FORMAT "format" #define MEMBER_FROM "from" #define MEMBER_HEIGHT "height" #define MEMBER_LABELS "labels" #define MEMBER_NAME "name" #define MEMBER_OFFSET "offset" #define MEMBER_SCALE "scale" #define MEMBER_SUPER "super" #define MEMBER_THIS "this" #define MEMBER_TO "to" #define MEMBER_VALUE "value" #define MEMBER_WIDTH "width" #define MEMBER_LEFT "left" #define MEMBER_TOP "top" #define MEMBER_IMAGE "image" #define MEMBER_OO_BINARY "oo_binary" #define MEMBER_OO_BINARY2 "oo_binary'" #define MEMBER_OO_UNARY "oo_unary" #define MEMBER_COLOUR_SPACE "colour_space" #define MEMBER_EXPR "expr" #define MEMBER_INTERVAL "interval" #define MEMBER_OPTIONS "options" #define MEMBER_VISLEVEL "_vislevel" #define MEMBER_ACTION "action" #define MEMBER_LABEL "label" #define MEMBER_ICON "icon" #define MEMBER_TOOLTIP "tooltip" /* The class names we know about. */ #define CLASS_SLIDER "Scale" #define CLASS_TOGGLE "Toggle" #define CLASS_IMAGE "Image" #define CLASS_COLOUR "Colour" #define CLASS_NUMBER "Number" #define CLASS_STRING "String" #define CLASS_OPTION "Option" #define CLASS_MATRIX "Matrix_vips" #define CLASS_ARROW "Arrow" #define CLASS_REGION "Region" #define CLASS_AREA "Area" #define CLASS_HGUIDE "HGuide" #define CLASS_VGUIDE "VGuide" #define CLASS_MARK "Mark" #define CLASS_POINT "Point" #define CLASS_PATHNAME "Pathname" #define CLASS_FONTNAME "Fontname" #define CLASS_SEPARATOR "Separator" #define CLASS_GROUP "Group" #define CLASS_LIST "List" #define CLASS_MENU "Menu" #define CLASS_MENUITEM "Menuitem" #define CLASS_MENUACTION "Menuaction" #define CLASS_MENUPULLRIGHT "Menupullright" #define CLASS_MENUSEPARATOR "Menuseparator" #define CLASS_EXPRESSION "Expression" #define CLASS_CLOCK "Clock" #define CLASS_REAL "Real" #define CLASS_VECTOR "Vector" #define CLASS_PLOT "Plot" /* What we loop over a class instance with. */ typedef void *(*class_map_fn)( Symbol *, PElement *, void *, void * ); Compile *class_get_compile( PElement *instance ); gboolean class_get_super( PElement *instance, PElement *out ); void *class_map( PElement *instance, class_map_fn fn, void *a, void *b ); gboolean class_get_member( PElement *instance, const char *name, Symbol **sym_out, PElement *value ); gboolean class_get_symbol( PElement *class, Symbol *sym, PElement *out ); gboolean class_get_exact( PElement *instance, const char *name, PElement *out ); gboolean class_new_super( Heap *heap, Compile *compile, PElement *this, PElement *instance ); gboolean class_new( Heap *heap, Compile *compile, HeapNode **args, PElement *out ); gboolean class_clone( Heap *heap, PElement *class, PElement *out ); gboolean class_clone_args( Heap *heap, PElement *klass, PElement *out ); gboolean class_newv( Heap *heap, const char *name, PElement *out, ... ); gboolean class_get_member_real( PElement *klass, const char *name, double *out ); gboolean class_get_member_int( PElement *instance, const char *name, int *out ); gboolean class_get_member_bool( PElement *klass, const char *name, gboolean *out ); gboolean class_get_member_image( PElement *instance, const char *name, Imageinfo **out ); gboolean class_get_member_class( PElement *instance, const char *name, const char *type, PElement *out ); gboolean class_get_member_lstring( PElement *instance, const char *name, GSList **labels ); gboolean class_get_member_string( PElement *klass, const char *name, char *buf, int sz ); gboolean class_get_member_instance( PElement *instance, const char *name, const char *klass, PElement *out ); gboolean class_get_member_matrix_size( PElement *instance, const char *name, int *xsize, int *ysize ); gboolean class_get_member_matrix( PElement *instance, const char *name, double *buf, int n, int *xsize, int *ysize ); gboolean class_get_member_realvec( PElement *instance, const char *name, double *buf, int n, int *length ); nip2-8.7.0/src/icontainer.h0000644000175000017500000001333713224651032012417 00000000000000/* abstract base class for containers */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_ICONTAINER (icontainer_get_type()) #define ICONTAINER( obj ) \ (G_TYPE_CHECK_INSTANCE_CAST( (obj), TYPE_ICONTAINER, iContainer )) #define ICONTAINER_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_CAST( (klass), TYPE_ICONTAINER, iContainerClass)) #define IS_ICONTAINER( obj ) \ (G_TYPE_CHECK_INSTANCE_TYPE( (obj), TYPE_ICONTAINER )) #define IS_ICONTAINER_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_TYPE( (klass), TYPE_ICONTAINER )) #define ICONTAINER_GET_CLASS( obj ) \ (G_TYPE_INSTANCE_GET_CLASS( (obj), TYPE_ICONTAINER, iContainerClass )) /* Test for is C a child of P. */ #define ICONTAINER_IS_CHILD( P, C ) \ (g_slist_find( ICONTAINER( P )->children, ICONTAINER( C ) ) && \ ICONTAINER( C )->parent == ICONTAINER( P )) struct _iContainer { iObject parent_object; /* My instance vars. */ GSList *children; /* iContainers which are inside this one */ int pos; /* Position in parent */ iContainer *parent; /* iContainer we are inside */ GHashTable *child_hash; /* Optional: hash of children by their name */ /* Can have a currently selected child ... eg. the * current column in a workspace, or the current tab in a * workspacegroup. * * NULL if not relevant. */ iContainer *current; /* Track the view here during reparent. */ View *temp_view; }; typedef struct _iContainerClass { iObjectClass parent_class; /* pos_changed our pos has changed child_add a child has been added to us child_remove a child is about be removed from us parent_add parent has been attached parent_remove parent is about to be removed current make the current of parent child_detach on old parent, unlink child child_attach on new_paerent, link on child there are used as a pair to do reparent -- the old parent gets a chance to detach in ::parent_detach, the new parent attaches in ::child_attach */ void (*pos_changed)( iContainer *icontainer ); void (*child_add)( iContainer *parent, iContainer *child, int ); void (*child_remove)( iContainer *parent, iContainer *child ); void (*parent_add)( iContainer *child ); void (*parent_remove)( iContainer *child ); void (*current)( iContainer *parent, iContainer *child ); void (*child_detach)( iContainer *parent, iContainer *child ); void (*child_attach)( iContainer *parent, iContainer *child, int ); } iContainerClass; typedef void *(*icontainer_map_fn)( iContainer *, void *, void * ); typedef void *(*icontainer_map3_fn)( iContainer *, void *, void *, void * ); typedef void *(*icontainer_map4_fn)( iContainer *, void *, void *, void *, void * ); typedef void *(*icontainer_map5_fn)( iContainer *, void *, void *, void *, void *, void * ); typedef gint (*icontainer_sort_fn)( iContainer *a, iContainer *b ); int icontainer_get_n_children( iContainer *icontainer ); iContainer *icontainer_get_nth_child( iContainer *icontainer, int n ); GSList *icontainer_get_children( iContainer *icontainer ); void *icontainer_map( iContainer *icontainer, icontainer_map_fn fn, void *a, void *b ); void *icontainer_map3( iContainer *icontainer, icontainer_map3_fn fn, void *a, void *b, void *c ); void *icontainer_map4( iContainer *icontainer, icontainer_map4_fn fn, void *a, void *b, void *c, void *d ); void *icontainer_map5( iContainer *icontainer, icontainer_map5_fn fn, void *a, void *b, void *c, void *d, void *e ); void *icontainer_map_rev( iContainer *icontainer, icontainer_map_fn fn, void *a, void *b ); void *icontainer_map_all( iContainer *icontainer, icontainer_map_fn fn, void *a ); void *icontainer_map2_all( iContainer *icontainer, icontainer_map_fn fn, void *a, void *b ); void *icontainer_map3_all( iContainer *icontainer, icontainer_map3_fn fn, void *a, void *b, void *c ); void *icontainer_map4_all( iContainer *icontainer, icontainer_map4_fn fn, void *a, void *b, void *c, void *d ); void *icontainer_map_all_intrans( iContainer *icontainer, icontainer_map_fn fn, void *a ); void icontainer_sanity( iContainer *icontainer ); void icontainer_pos_sort( iContainer *icontainer ); int icontainer_pos_last( iContainer *icontainer ); void icontainer_pos_renumber( iContainer *icontainer ); void icontainer_custom_sort( iContainer *icontainer, GCompareFunc fn ); gint icontainer_name_compare( iContainer *a, iContainer *b ); void icontainer_child_add( iContainer *icontainer, iContainer *child, int pos ); void icontainer_child_add_before( iContainer *parent, iContainer *child, iContainer *before ); void icontainer_child_move( iContainer *child, int pos ); void *icontainer_child_remove( iContainer *child ); void icontainer_current( iContainer *parent, iContainer *child ); iContainer *icontainer_next( iContainer *parent ); void icontainer_reparent( iContainer *parent, iContainer *child, int pos ); GType icontainer_get_type( void ); void icontainer_set_hash( iContainer *icontainer ); iContainer *icontainer_child_lookup( iContainer *parent, const char *name ); nip2-8.7.0/src/plotwindow.h0000644000175000017500000000323613224651032012467 00000000000000/* a plotpresent in a floating window */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_PLOTWINDOW (plotwindow_get_type()) #define PLOTWINDOW( obj ) (GTK_CHECK_CAST( (obj), TYPE_PLOTWINDOW, Plotwindow )) #define PLOTWINDOW_CLASS( klass ) \ (GTK_CHECK_CLASS_CAST( (klass), TYPE_PLOTWINDOW, PlotwindowClass )) #define IS_PLOTWINDOW( obj ) (GTK_CHECK_TYPE( (obj), TYPE_PLOTWINDOW )) #define IS_PLOTWINDOW_CLASS( klass ) \ (GTK_CHECK_CLASS_TYPE( (klass), TYPE_PLOTWINDOW )) struct _Plotwindow { Floatwindow parent_class; /* The model we watch. */ Plotmodel *plotmodel; /* Widgets. */ Plotstatus *plotstatus; Plotpresent *plotpresent; }; typedef struct _PlotwindowClass { FloatwindowClass parent_class; /* My methods. */ } PlotwindowClass; GtkType plotwindow_get_type( void ); Plotwindow *plotwindow_new( Plot *plot, GtkWidget *parent ); nip2-8.7.0/src/regionview.h0000644000175000017500000001014213224651032012431 00000000000000/* draw a view of a region in an imageview */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_REGIONVIEW (regionview_get_type()) #define REGIONVIEW( obj ) (GTK_CHECK_CAST( (obj), TYPE_REGIONVIEW, Regionview )) #define REGIONVIEW_CLASS( klass ) \ (GTK_CHECK_CLASS_CAST( (klass), TYPE_REGIONVIEW, RegionviewClass )) #define IS_REGIONVIEW( obj ) (GTK_CHECK_TYPE( (obj), TYPE_REGIONVIEW )) #define IS_REGIONVIEW_CLASS( klass ) \ (GTK_CHECK_CLASS_TYPE( (klass), TYPE_REGIONVIEW )) #define REGIONVIEW_LABEL_MAX (256) /* States for the region view. */ typedef enum { REGIONVIEW_WAIT, /* Waiting for left down */ REGIONVIEW_MOVE, /* Dragging on label */ REGIONVIEW_RESIZE /* Dragging on resize handle */ } RegionviewState; /* Draw types. */ typedef enum { REGIONVIEW_REGION, /* width & height > 0 */ REGIONVIEW_AREA, /* width & height > 0 and locked */ REGIONVIEW_MARK, /* width & height == 0 */ REGIONVIEW_ARROW, /* width & height unconstrained */ REGIONVIEW_HGUIDE, /* width == image width, height == 0 */ REGIONVIEW_VGUIDE, /* width == 0, height == image height */ REGIONVIEW_LINE, /* floating dashed line for paintbox */ REGIONVIEW_BOX /* floating dashed box for paintbox */ } RegionviewType; /* Resize types. */ typedef enum { REGIONVIEW_RESIZE_NONE, REGIONVIEW_RESIZE_MOVE, REGIONVIEW_RESIZE_EDIT, REGIONVIEW_RESIZE_TOPLEFT, REGIONVIEW_RESIZE_TOP, REGIONVIEW_RESIZE_TOPRIGHT, REGIONVIEW_RESIZE_RIGHT, REGIONVIEW_RESIZE_BOTTOMRIGHT, REGIONVIEW_RESIZE_BOTTOM, REGIONVIEW_RESIZE_BOTTOMLEFT, REGIONVIEW_RESIZE_LEFT, REGIONVIEW_RESIZE_LAST } RegionviewResize; struct _Regionview { View view; RegionviewType type; gboolean frozen; /* type is frozen ... not rethought on resize */ /* State for resize/move etc. */ RegionviewState state; RegionviewResize resize;/* Resize type */ int dx, dy; /* Drag offset */ gboolean grabbed; /* Currently tracking with mouse */ /* The model we show. */ Classmodel *classmodel; Rect *model_area; /* What we read/write to talk to the model */ Rect our_area; /* Same, but our copy ... origin top left */ /* The imagepresent we draw on. */ Imagepresent *ip; iWindowCursorContext *cntxt; /* The signals we've connected to. */ guint expose_sid; guint destroy_sid; guint event_sid; guint changed_sid; guint conv_destroy_sid; guint model_changed_sid; /* Model info we read for display. */ GtkStateType paint_state;/* prelight/normal/etc. */ /* What's on the screen. */ gboolean unpainting; /* We are unpainting */ Rect area; /* Area of region ... image coordinates */ Rect label; /* Area covered by label ... canvas cods */ int ascent; /* Height of ascenders for text */ int dash_offset; guint dash_crawl; /* Timer for dash crawl animation */ GtkStateType last_paint_state; RegionviewType last_type; gboolean first; /* Initial draw (no old pos to remove) */ gboolean label_geo; /* Redo the label geo on refresh, please */ /* Text of label we display */ VipsBuf caption; }; typedef struct _RegionviewClass { ViewClass parent_class; /* My methods. */ } RegionviewClass; void regionview_attach( Regionview *regionview, int x, int y ); GtkType regionview_get_type( void ); Regionview *regionview_new( Classmodel *classmodel, Rect *model_area, Imagepresent *ip ); void regionview_set_type( Regionview *regionview, PElement *root ); nip2-8.7.0/src/subcolumn.c0000644000175000017500000003766513224651032012300 00000000000000/* a subcolumn */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #include "ip.h" static HeapmodelClass *parent_class = NULL; static gboolean subcolumn_row_pred_none( Row *row ) { return( FALSE ); } /* No params, no super. */ static gboolean subcolumn_row_pred_members( Row *row ) { if( row->sym && is_system( row->sym ) ) return( FALSE ); if( row->sym && is_super( row->sym ) ) return( FALSE ); if( row->sym && row->sym->type == SYM_PARAM ) return( FALSE ); return( TRUE ); } static gboolean subcolumn_row_pred_params( Row *row ) { return( row->sym && row->sym->type == SYM_PARAM ); } /* Everything but empty superclasses. */ static gboolean subcolumn_row_pred_super( Row *row ) { if( row->sym && is_super( row->sym ) && PEISELIST( &row->expr->root ) ) return( FALSE ); return( TRUE ); } /* Array of these guys control member visibility, scol->vislevel indexes this * array, one of preds from vislevel down has to be TRUE for the row to be * visible. */ const SubcolumnVisibility subcolumn_visibility[] = { { "none", subcolumn_row_pred_none }, { "members", subcolumn_row_pred_members }, { "params", subcolumn_row_pred_params }, { "super", subcolumn_row_pred_super } }; const int subcolumn_nvisibility = IM_NUMBER( subcolumn_visibility ); /* Map down a Subcolumn. */ void * subcolumn_map( Subcolumn *scol, row_map_fn fn, void *a, void *b ) { return( icontainer_map( ICONTAINER( scol ), (icontainer_map_fn) fn, a, b ) ); } static void subcolumn_dispose( GObject *gobject ) { Subcolumn *scol; #ifdef DEBUG printf( "subcolumn_dispose\n" ); #endif /*DEBUG*/ g_return_if_fail( gobject != NULL ); g_return_if_fail( IS_SUBCOLUMN( gobject ) ); scol = SUBCOLUMN( gobject ); scol->col = NULL; scol->scol = NULL; scol->top_col = NULL; heap_unregister_element( reduce_context->heap, &scol->base ); scol->base.type = ELEMENT_NOVAL; scol->base.ele = (void *) 13; scol->this = NULL; scol->super = NULL; G_OBJECT_CLASS( parent_class )->dispose( gobject ); } /* Stuff we track during class instance display update. */ typedef struct { Subcolumn *scol; /* Enclosing column */ GSList *notused; /* List of row we've not used */ } ClassRefreshInfo; /* Test for row represents a sym. */ static void * subcolumn_test_sym( Row *row, Symbol *sym ) { if( row->sym == sym ) return( row ); return( NULL ); } /* Test for row has a zombie of the same name. */ static void * subcolumn_test_row_name( Row *row, Symbol *sym ) { if( !row->sym && strcmp( IOBJECT( row )->name, IOBJECT( sym )->name ) == 0 ) return( row ); return( NULL ); } /* Refresh one line of a subcolumn. */ static void subcolumn_class_new_heap_sub( ClassRefreshInfo *cri, Symbol *sym, PElement *value ) { Row *row; #ifdef DEBUG char txt[200]; VipsBuf buf = VIPS_BUF_STATIC( txt ); symbol_qualified_name( sym, &buf ); printf( "subcolumn_class_new_heap_sub: %s\n", vips_buf_all( &buf ) ); #endif /*DEBUG*/ /* Do we have a row for this symbol? */ if( (row = (Row *) slist_map( cri->notused, (SListMapFn) subcolumn_test_sym, sym )) ) { /* Update it. */ if( heapmodel_new_heap( HEAPMODEL( row ), value ) ) expr_error_set( row->expr ); cri->notused = g_slist_remove( cri->notused, row ); } else if( (row = (Row *) slist_map( cri->notused, (SListMapFn) subcolumn_test_row_name, sym )) ) { /* There's a blank row of the same name, left for us by XML * load. Update the row with the correct symbol. */ row_link_symbol( row, sym, NULL ); if( heapmodel_new_heap( HEAPMODEL( row ), value ) ) expr_error_set( row->expr ); cri->notused = g_slist_remove( cri->notused, row ); } else { row = row_new( cri->scol, sym, value ); if( heapmodel_new_heap( HEAPMODEL( row ), value ) ) expr_error_set( row->expr ); } } #ifdef DEBUG static void * subcolumn_class_dump_tiny_row( Row *row ) { row_name_print( row ); printf( " " ); return( NULL ); } #endif /*DEBUG*/ /* A new scrap of heap for a subcolumn. */ static gboolean subcolumn_class_new_heap( Subcolumn *scol, PElement *root ) { PElement instance = *root; Expr *expr; Row *row; gboolean result; PElement base, member; HeapNode *p; ClassRefreshInfo cri; /* Must be a class display. */ g_assert( !scol->is_top ); row = HEAPMODEL( scol )->row; expr = row->expr; #ifdef DEBUG printf( "subcolumn_class_new_heap: " ); row_name_print( row ); printf( "\n" ); #endif /*DEBUG*/ /* Can loop here for some recursive classes. FIXME if( mainw_countdown_animate( 99 ) ) return( FALSE ); */ /* No displays for system rows. */ if( row->sym && is_system( row->sym ) ) return( TRUE ); /* If we are the top of a class instance display, get a new serial. * As we recurse down refreshing our contents, this should stop * circular structures looping the browser. FIXME ... clear flags for a whole class, then do a complete redisplay? more reliable, but even slower :-( */ if( scol->scol->is_top ) heap_serial_new( reduce_context->heap ); /* Is it a class with a typecheck member? Go through * that. Do an isclass first to force eval. */ if( !heap_is_class( &instance, &result ) ) return( FALSE ); if( result && class_get_member( &instance, MEMBER_CHECK, NULL, &member ) ) { #ifdef DEBUG printf( "subcolumn_class_new_heap: invoking arg checker\n" ); #endif /* Force eval of the typecheck member. */ if( !heap_is_class( &member, &result ) || !result ) return( FALSE ); } /* Have we already displayed this class? */ if( (PEGETVAL( &instance )->flgs & FLAG_SERIAL) == reduce_context->heap->serial ) { /* FIXME ... display something here? "circular"? */ return( TRUE ); } SETSERIAL( PEGETVAL( &instance )->flgs, reduce_context->heap->serial ); /* Note the heap root ... if this is the top of a row tree, then we * clone the class and use that private copy. */ PEPOINTE( &base, &(SUBCOLUMN( scol ))->base ); PEPUTPE( &base, &instance ); PEPUTPE( &expr->root, &base ); /* Init rebuild params. We make a list of all the existing * row objects for this class display, and every time we * manage to reuse one of them, we knock it off the list. At the * end, remove all unused rows. */ cri.scol = scol; cri.notused = g_slist_copy( ICONTAINER( scol )->children ); #ifdef DEBUG printf( "subcolumn_class_new_heap: existing rows: " ); icontainer_map( ICONTAINER( scol ), (icontainer_map_fn) subcolumn_class_dump_tiny_row, NULL, NULL ); printf( "\n" ); #endif /*DEBUG*/ /* Loop along the members, updating row entries. */ PEGETCLASSMEMBER( &member, &base ); if( PEISNODE( &member ) ) for( p = PEGETVAL( &member ); p; p = GETRIGHT( p ) ) { PElement s, v; HeapNode *hn; Symbol *sym; /* Get the sym/value pair. */ hn = GETLEFT( p ); PEPOINTLEFT( hn, &s ); PEPOINTRIGHT( hn, &v ); sym = SYMBOL( PEGETSYMREF( &s ) ); /* We don't make rows for the default constructor, or * for ".name". These things don't change, so there's * no point (and the default constructor has no text * equivalent anyway). */ if( strcmp( IOBJECT( sym )->name, MEMBER_NAME ) == 0 ) continue; if( is_member( sym ) && strcmp( IOBJECT( sym )->name, IOBJECT( symbol_get_parent( sym ) )->name ) == 0 ) continue; /* Display! */ subcolumn_class_new_heap_sub( &cri, sym, &v ); } /* Remove all the rows we've not used. */ slist_map( cri.notused, (SListMapFn) iobject_destroy, NULL ); IM_FREEF( g_slist_free, cri.notused ); return( TRUE ); } static void * subcolumn_new_heap( Heapmodel *heapmodel, PElement *root ) { Subcolumn *scol = SUBCOLUMN( heapmodel ); /* New heap for a class display? CLear known_private, we've no idea * where this heap came from. */ if( scol == scol->top_scol ) scol->known_private = FALSE; /* A bunch of locals? Update them all. */ if( !scol->is_top && !subcolumn_class_new_heap( scol, root ) ) return( scol ); return( HEAPMODEL_CLASS( parent_class )->new_heap( heapmodel, root ) ); } static void subcolumn_child_add( iContainer *parent, iContainer *child, int pos ) { Subcolumn *scol = SUBCOLUMN( parent ); Row *row = ROW( child ); /* May not have a symbol yet during ws load. * * Can't use is_this()/is_super(), not everything has been built yet. * We don't do this often, so strcmp() it. */ const char *name = row->sym ? IOBJECT( row->sym )->name : IOBJECT( row )->name; if( strcmp( name, MEMBER_THIS ) == 0 ) scol->this = row; if( strcmp( name, MEMBER_SUPER ) == 0 ) scol->super = row; ICONTAINER_CLASS( parent_class )->child_add( parent, child, pos ); } static void subcolumn_child_remove( iContainer *parent, iContainer *child ) { Subcolumn *scol = SUBCOLUMN( parent ); Row *row = ROW( child ); ICONTAINER_CLASS( parent_class )->child_remove( parent, child ); if( scol->this == row ) scol->this = NULL; if( scol->super == row ) scol->super = NULL; } /* If this is a top-level subcolumn, get the enclosing column. */ static Column * subcolumn_get_column( Subcolumn *scol ) { g_assert( scol->is_top ); return( COLUMN( ICONTAINER( scol )->parent ) ); } /* If this is a nested subcolumn, get the enclosing subcolumn. */ static Subcolumn * subcolumn_get_subcolumn( Subcolumn *scol ) { Rhs *rhs; Row *row; Subcolumn *escol; g_assert( !scol->is_top ); rhs = HEAPMODEL( scol )->rhs; row = HEAPMODEL( rhs )->row; escol = row->scol; return( escol ); } /* Return the enclosing column for a Subcolumn. */ static Column * subcolumn_get_top_column( Subcolumn *scol ) { if( !scol->is_top ) return( subcolumn_get_top_column( subcolumn_get_subcolumn( scol ) ) ); return( subcolumn_get_column( scol ) ); } /* Return the enclosing subcolumn ... but not the is_top one. Ie. the enclosing * subcolumn which has the base for this class tree. */ static Subcolumn * subcolumn_get_top_subcolumn( Subcolumn *scol ) { Subcolumn *enclosing; if( scol->is_top ) return( NULL ); enclosing = subcolumn_get_subcolumn( scol ); if( enclosing->is_top ) return( scol ); else return( subcolumn_get_top_subcolumn( enclosing ) ); } static void subcolumn_parent_add( iContainer *child ) { Subcolumn *scol = SUBCOLUMN( child ); ICONTAINER_CLASS( parent_class )->parent_add( child ); g_assert( IS_COLUMN( child->parent ) || IS_RHS( child->parent ) ); g_assert( !IS_COLUMN( child->parent ) || g_slist_length( child->parent->children ) == 1 ); scol->is_top = IS_COLUMN( child->parent ); /* For sub-columns, default to nothing visible. */ if( !scol->is_top ) scol->vislevel = 0; /* Update context pointers. */ if( scol->is_top ) scol->col = subcolumn_get_column( scol ); else scol->col = NULL; if( !scol->is_top ) scol->scol = subcolumn_get_subcolumn( scol ); else scol->scol = NULL; scol->top_col = subcolumn_get_top_column( scol ); scol->top_scol = subcolumn_get_top_subcolumn( scol ); /* Top level subcolumns default to display on, others to display off. */ MODEL( scol )->display = scol->is_top; } static View * subcolumn_view_new( Model *model, View *parent ) { return( subcolumnview_new() ); } static void subcolumn_display( Model *model, gboolean display ) { /* printf( "subcolumn_display: " ); row_name_print( HEAPMODEL( model )->row ); printf( " %d\n", display ); */ MODEL_CLASS( parent_class )->display( model, display ); } static gboolean subcolumn_load( Model *model, ModelLoadState *state, Model *parent, xmlNode *xnode ) { Subcolumn *scol = SUBCOLUMN( model ); g_assert( IS_COLUMN( parent ) || IS_RHS( parent ) ); if( !get_iprop( xnode, "vislevel", &scol->vislevel ) ) return( FALSE ); if( !MODEL_CLASS( parent_class )->load( model, state, parent, xnode ) ) return( FALSE ); return( TRUE ); } static xmlNode * subcolumn_save( Model *model, xmlNode *xnode ) { Subcolumn *scol = SUBCOLUMN( model ); xmlNode *xthis; if( !(xthis = MODEL_CLASS( parent_class )->save( model, xnode )) ) return( NULL ); if( !set_iprop( xthis, "vislevel", scol->vislevel ) ) return( NULL ); return( xthis ); } static void subcolumn_class_init( SubcolumnClass *class ) { GObjectClass *gobject_class = (GObjectClass *) class; iContainerClass *icontainer_class = (iContainerClass *) class; ModelClass *model_class = (ModelClass *) class; HeapmodelClass *heapmodel_class = (HeapmodelClass *) class; parent_class = g_type_class_peek_parent( class ); /* Create signals. */ /* Init methods. */ gobject_class->dispose = subcolumn_dispose; icontainer_class->child_add = subcolumn_child_add; icontainer_class->child_remove = subcolumn_child_remove; icontainer_class->parent_add = subcolumn_parent_add; model_class->view_new = subcolumn_view_new; model_class->display = subcolumn_display; model_class->load = subcolumn_load; model_class->save = subcolumn_save; heapmodel_class->new_heap = subcolumn_new_heap; /* Static init. */ model_register_loadable( MODEL_CLASS( class ) ); } static void subcolumn_init( Subcolumn *scol ) { #ifdef DEBUG printf( "subcolumn_init\n" ); #endif /*DEBUG*/ scol->col = NULL; scol->scol = NULL; scol->top_col = NULL; scol->vislevel = subcolumn_nvisibility - 1; scol->base.type = ELEMENT_NOVAL; scol->base.ele = (void *) 14; heap_register_element( reduce_context->heap, &scol->base ); scol->known_private = FALSE; scol->this = NULL; scol->super = NULL; } GType subcolumn_get_type( void ) { static GType subcolumn_type = 0; if( !subcolumn_type ) { static const GTypeInfo info = { sizeof( SubcolumnClass ), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) subcolumn_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof( Subcolumn ), 32, /* n_preallocs */ (GInstanceInitFunc) subcolumn_init, }; subcolumn_type = g_type_register_static( TYPE_HEAPMODEL, "Subcolumn", &info, 0 ); } return( subcolumn_type ); } static void subcolumn_link( Subcolumn *scol, Rhs *rhs, Column *col ) { g_assert( rhs == NULL || col == NULL ); /* parent_add() sets is_top for us. */ if( rhs ) icontainer_child_add( ICONTAINER( rhs ), ICONTAINER( scol ), -1 ); else icontainer_child_add( ICONTAINER( col ), ICONTAINER( scol ), -1 ); } Subcolumn * subcolumn_new( Rhs *rhs, Column *col ) { Subcolumn *scol; scol = SUBCOLUMN( g_object_new( TYPE_SUBCOLUMN, NULL ) ); subcolumn_link( scol, rhs, col ); return( scol ); } void subcolumn_set_vislevel( Subcolumn *scol, int vislevel ) { scol->vislevel = IM_CLIP( 0, vislevel, subcolumn_nvisibility - 1 ); #ifdef DEBUG printf( "subcolumn_set_vislevel: %d\n", scol->vislevel ); #endif /*DEBUG*/ iobject_changed( IOBJECT( scol ) ); } /* Make sure we have a private copy of the graph for this tree of stuff. */ gboolean subcolumn_make_private( Subcolumn *scol ) { Subcolumn *top_scol = scol->top_scol; PElement base; if( !top_scol || top_scol->known_private ) return( TRUE ); #ifdef DEBUG { Row *row = HEAPMODEL( top_scol )->row; printf( "subcolumn_make_private: cloning " ); row_name_print( row ); printf( "\n" ); } #endif /*DEBUG*/ /* Clone from the class args and rebuild our tree. */ PEPOINTE( &base, &top_scol->base ); if( !class_clone_args( reduce_context->heap, &base, &base ) || heapmodel_new_heap( HEAPMODEL( top_scol ), &base ) ) return( FALSE ); top_scol->known_private = TRUE; return( TRUE ); } nip2-8.7.0/src/conversionview.h0000644000175000017500000000340413224651032013336 00000000000000/* Decls for conversionview.c ... controls for manipulating a conversion */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_CONVERSIONVIEW (conversionview_get_type()) #define CONVERSIONVIEW( obj ) (GTK_CHECK_CAST( (obj), TYPE_CONVERSIONVIEW, Conversionview )) #define CONVERSIONVIEW_CLASS( klass ) \ (GTK_CHECK_CLASS_CAST( (klass), TYPE_CONVERSIONVIEW, ConversionviewClass )) #define IS_CONVERSIONVIEW( obj ) (GTK_CHECK_TYPE( (obj), TYPE_CONVERSIONVIEW )) #define IS_CONVERSIONVIEW_CLASS( klass ) \ (GTK_CHECK_CLASS_TYPE( (klass), TYPE_CONVERSIONVIEW )) struct _Conversionview { GtkFrame parent_class; Imagemodel *imagemodel; Tslider *scale; Tslider *offset; GtkWidget *falsecolour; /* Toggle menu items */ GtkWidget *type; }; typedef struct _ConversionviewClass { GtkFrameClass parent_class; /* My methods. */ } ConversionviewClass; GtkType conversionview_get_type( void ); Conversionview *conversionview_new( Imagemodel *imagemodel ); nip2-8.7.0/src/workspacegroup.h0000644000175000017500000001023513224651032013331 00000000000000/* A set of workspaces loaded and saved from a ws file. */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_WORKSPACEGROUP (workspacegroup_get_type()) #define WORKSPACEGROUP( obj ) \ (G_TYPE_CHECK_INSTANCE_CAST( (obj), \ TYPE_WORKSPACEGROUP, Workspacegroup )) #define WORKSPACEGROUP_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_CAST( (klass), \ TYPE_WORKSPACEGROUP, WorkspacegroupClass)) #define IS_WORKSPACEGROUP( obj ) \ (G_TYPE_CHECK_INSTANCE_TYPE( (obj), TYPE_WORKSPACEGROUP )) #define IS_WORKSPACEGROUP_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_TYPE( (klass), TYPE_WORKSPACEGROUP )) #define WORKSPACEGROUP_GET_CLASS( obj ) \ (G_TYPE_INSTANCE_GET_CLASS( (obj), \ TYPE_WORKSPACEGROUP, WorkspacegroupClass )) /* Three sorts of workspace file load. */ typedef enum { WORKSPACEGROUP_LOAD_NEW, /* Load as new workspace */ WORKSPACEGROUP_LOAD_COLUMNS, /* Merge into current workspace */ WORKSPACEGROUP_LOAD_ROWS /* Merge rows into current column */ } WorkspacegroupLoadType; /* Save mode ... controls behaviour of column_save_test() and row_save_test() */ typedef enum { WORKSPACEGROUP_SAVE_ALL, /* Save everything */ WORKSPACEGROUP_SAVE_WORKSPACE, /* Save current workspace */ WORKSPACEGROUP_SAVE_SELECTED /* Only save selected rows */ } WorkspacegroupSaveType; /* Workspacegroups: group workspaces with these. One workspacegroup per * file loaded. */ struct _Workspacegroup { Filemodel parent_class; Workspaceroot *wsr; /* Control load/save for this wsg. */ WorkspacegroupLoadType load_type; WorkspacegroupSaveType save_type; guint autosave_timeout; /* workspacegroup_load_columns() etc. use this to display warnings * during load. */ iWindow *iwnd; }; typedef struct _WorkspacegroupClass { FilemodelClass parent_class; /* My methods. */ } WorkspacegroupClass; Workspace *workspacegroup_get_workspace( Workspacegroup *wsg ); int workspacegroup_get_n_objects( Workspacegroup *wsg ); void workspacegroup_set_load_type( Workspacegroup *wsg, WorkspacegroupLoadType load_type ); void workspacegroup_set_save_type( Workspacegroup *wsg, WorkspacegroupSaveType save_type ); Workspace *workspacegroup_map( Workspacegroup *wsg, workspace_map_fn fn, void *a, void *b ); GType workspacegroup_get_type( void ); gboolean workspacegroup_is_empty( Workspacegroup *wsg ); Workspacegroup *workspacegroup_new( Workspaceroot *wsr ); Workspacegroup *workspacegroup_new_blank( Workspaceroot *wsr, const char *name ); Workspacegroup *workspacegroup_new_filename( Workspaceroot *wsr, const char *filename ); Workspacegroup *workspacegroup_new_from_file( Workspaceroot *wsr, const char *filename, const char *filename_user ); Workspacegroup *workspacegroup_new_from_openfile( Workspaceroot *wsr, iOpenFile *of ); gboolean workspacegroup_merge_workspaces( Workspacegroup *wsg, const char *filename ); gboolean workspacegroup_merge_columns( Workspacegroup *wsg, const char *filename ); gboolean workspacegroup_merge_rows( Workspacegroup *wsg, const char *filename ); gboolean workspacegroup_save_selected( Workspacegroup *wsg, const char *filename ); gboolean workspacegroup_save_current( Workspacegroup *wsg, const char *filename ); gboolean workspacegroup_save_all( Workspacegroup *wsg, const char *filename ); Workspacegroup *workspacegroup_duplicate( Workspacegroup *wsg ); char *workspacegroup_autosave_recover( void ); void workspacegroup_autosave_clean( void ); nip2-8.7.0/src/classmodel.c0000644000175000017500000010617113224651032012404 00000000000000/* like a heapmodel, but we represent a class in the heap */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #include "ip.h" /* #define DEBUG */ static HeapmodelClass *parent_class = NULL; void image_value_init( ImageValue *image, Classmodel *classmodel ) { image->ii = NULL; image->file_changed_sid = 0; image->classmodel = classmodel; } void image_value_destroy( ImageValue *image ) { FREESID( image->file_changed_sid, image->ii ); MANAGED_UNREF( image->ii ); } static void image_value_file_changed_cb( Imageinfo *ii, ImageValue *image ) { #ifdef DEBUG printf( "image_value_file_changed_cb: " ); iobject_print( IOBJECT( image->classmodel ) ); #endif /*DEBUG*/ if( CALC_RELOAD ) { Row *row = HEAPMODEL( image->classmodel )->row; (void) expr_dirty( row->expr, link_serial_new() ); symbol_recalculate_all(); } } void image_value_set( ImageValue *image, Imageinfo *ii ) { image_value_destroy( image ); image->ii = ii; if( ii ) { MANAGED_REF( image->ii ); image->file_changed_sid = g_signal_connect( G_OBJECT( image->ii ), "file_changed", G_CALLBACK( image_value_file_changed_cb ), image ); } #ifdef DEBUG printf( "iimage_instance_update: ii = %p\n", ii ); #endif /*DEBUG*/ } /* Generate a descriptive name for an imagevalue. Used by plot.c etc. as well. */ void image_value_caption( ImageValue *value, VipsBuf *buf ) { Imageinfo *ii = value->ii; Classmodel *classmodel = value->classmodel; /* Show the filename if this ii came from a file, otherwise show * the class. */ if( ii && imageinfo_is_from_file( ii ) && classmodel->filename ) vips_buf_appends( buf, im_skip_dir( classmodel->filename ) ); else if( !heapmodel_name( HEAPMODEL( classmodel ), buf ) ) /* Only if there's no value, I think. */ vips_buf_appends( buf, CLASS_IMAGE ); } void * classmodel_get_instance( Classmodel *classmodel ) { ClassmodelClass *class = CLASSMODEL_GET_CLASS( classmodel ); if( class && class->get_instance ) return( class->get_instance( classmodel ) ); return( NULL ); } static void classmodel_graphic_save_cb( iWindow *iwnd, void *client, iWindowNotifyFn nfn, void *sys ) { Filesel *filesel = FILESEL( iwnd ); Classmodel *classmodel = CLASSMODEL( client ); ClassmodelClass *class = CLASSMODEL_GET_CLASS( classmodel ); char *filename; if( (filename = filesel_get_filename( filesel )) ) { if( class->graphic_save( classmodel, GTK_WIDGET( iwnd ), filename ) ) { IM_SETSTR( classmodel->filename, filename ); iobject_changed( IOBJECT( classmodel ) ); nfn( sys, IWINDOW_YES ); } else nfn( sys, IWINDOW_ERROR ); g_free( filename ); } else nfn( sys, IWINDOW_ERROR ); } void classmodel_graphic_save( Classmodel *classmodel, GtkWidget *parent ) { ClassmodelClass *class = CLASSMODEL_GET_CLASS( classmodel ); GtkWidget *filesel; char txt[100]; VipsBuf buf = VIPS_BUF_STATIC( txt ); if( !class->graphic_save ) { error_top( _( "Not implemented." ) ); error_sub( _( "_%s() method not implemented for %s." ), "graphic_save", IOBJECT_GET_CLASS_NAME( classmodel ) ); iwindow_alert( parent, GTK_MESSAGE_ERROR ); return; } filesel = filesel_new(); row_qualified_name( HEAPMODEL( classmodel )->row, &buf ); iwindow_set_title( IWINDOW( filesel ), _( "Save %s \"%s\"" ), IOBJECT_GET_CLASS_NAME( classmodel ), vips_buf_all( &buf ) ); filesel_set_flags( FILESEL( filesel ), TRUE, TRUE ); filesel_set_filetype( FILESEL( filesel ), class->filetype, watch_int_get( main_watchgroup, class->filetype_pref, 0 ) ); filesel_set_filetype_pref( FILESEL( filesel ), class->filetype_pref ); iwindow_set_parent( IWINDOW( filesel ), parent ); idialog_set_iobject( IDIALOG( filesel ), IOBJECT( classmodel ) ); filesel_set_done( FILESEL( filesel ), classmodel_graphic_save_cb, classmodel ); iwindow_build( IWINDOW( filesel ) ); if( classmodel->filename ) filesel_set_filename( FILESEL( filesel ), classmodel->filename ); gtk_widget_show( GTK_WIDGET( filesel ) ); } static void classmodel_graphic_replace_cb( iWindow *iwnd, void *client, iWindowNotifyFn nfn, void *sys ) { Filesel *filesel = FILESEL( iwnd ); Classmodel *classmodel = CLASSMODEL( client ); ClassmodelClass *class = CLASSMODEL_GET_CLASS( classmodel ); char *filename; if( (filename = filesel_get_filename( filesel )) ) { if( class->graphic_replace( classmodel, GTK_WIDGET( iwnd ), filename ) ) { /* Make sure client stays alive through the * recalculate. */ g_object_ref( G_OBJECT( classmodel ) ); symbol_recalculate_all(); IM_SETSTR( classmodel->filename, filename ); iobject_changed( IOBJECT( classmodel ) ); g_object_unref( G_OBJECT( classmodel ) ); nfn( sys, IWINDOW_YES ); } else nfn( sys, IWINDOW_ERROR ); g_free( filename ); } else nfn( sys, IWINDOW_ERROR ); } void classmodel_graphic_replace( Classmodel *classmodel, GtkWidget *parent ) { ClassmodelClass *class = CLASSMODEL_GET_CLASS( classmodel ); GtkWidget *filesel; char txt[100]; VipsBuf buf = VIPS_BUF_STATIC( txt ); if( !class->graphic_replace ) { error_top( _( "Not implemented." ) ); error_sub( _( "_%s() method not implemented for %s." ), "graphic_replace", IOBJECT_GET_CLASS_NAME( classmodel ) ); iwindow_alert( parent, GTK_MESSAGE_ERROR ); return; } row_qualified_name( HEAPMODEL( classmodel )->row, &buf ); filesel = filesel_new(); iwindow_set_title( IWINDOW( filesel ), _( "Replace %s \"%s\"" ), IOBJECT_GET_CLASS_NAME( classmodel ), vips_buf_all( &buf ) ); filesel_set_flags( FILESEL( filesel ), TRUE, FALSE ); filesel_set_filetype( FILESEL( filesel ), class->filetype, watch_int_get( main_watchgroup, class->filetype_pref, 0 ) ); filesel_set_filetype_pref( FILESEL( filesel ), class->filetype_pref ); iwindow_set_parent( IWINDOW( filesel ), parent ); idialog_set_iobject( IDIALOG( filesel ), IOBJECT( classmodel ) ); filesel_set_done( FILESEL( filesel ), classmodel_graphic_replace_cb, classmodel ); iwindow_build( IWINDOW( filesel ) ); if( classmodel->filename ) filesel_set_filename( FILESEL( filesel ), classmodel->filename ); gtk_widget_show( GTK_WIDGET( filesel ) ); } /* Make and break links between classmodels and the iimages displaying them. */ static void classmodel_iimage_link( Classmodel *classmodel, iImage *iimage ) { if( !g_slist_find( classmodel->iimages, iimage ) ) { #ifdef DEBUG printf( "classmodel_iimage_link: linking " ); row_name_print( HEAPMODEL( classmodel )->row ); printf( " to " ); row_name_print( HEAPMODEL( iimage )->row ); printf( "\n" ); #endif /*DEBUG*/ iimage->classmodels = g_slist_prepend( iimage->classmodels, classmodel ); classmodel->iimages = g_slist_prepend( classmodel->iimages, iimage ); } } void * classmodel_iimage_unlink( Classmodel *classmodel, iImage *iimage ) { if( g_slist_find( classmodel->iimages, iimage ) ) { #ifdef DEBUG printf( "classmodel_iimage_unlink: unlinking " ); row_name_print( HEAPMODEL( classmodel )->row ); printf( " from " ); row_name_print( HEAPMODEL( iimage )->row ); printf( "\n" ); #endif /*DEBUG*/ iimage->classmodels = g_slist_remove( iimage->classmodels, classmodel ); classmodel->iimages = g_slist_remove( classmodel->iimages, iimage ); } return( NULL ); } static void * classmodel_iimage_unlink_rev( iImage *iimage, Classmodel *classmodel ) { return( classmodel_iimage_unlink( classmodel, iimage ) ); } typedef struct { Classmodel *classmodel; Imageinfo *ii; } ClassmodelSearch; static void * classmodel_iimage_expr_model( Model *model, ClassmodelSearch *parms ) { /* Look for iimages which aren't super ... ie. if this is a class * derived from Image, display on the derived class, not on the * superclass. */ if( IS_IIMAGE( model ) && HEAPMODEL( model )->row->sym && !is_super( HEAPMODEL( model )->row->sym ) && !is_this( HEAPMODEL( model )->row->sym ) ) { iImage *iimage = IIMAGE( model ); if( iimage->value.ii == parms->ii ) classmodel_iimage_link( parms->classmodel, iimage ); } return( NULL ); } /* This classmodel is defined on an Imageinfo recorded as having been the value * of expr ... find an associated iImage, and link to that. */ static void * classmodel_iimage_expr( Expr *expr, ClassmodelSearch *parms ) { if( expr->row ) { #ifdef DEBUG printf( "classmodel_iimage_expr: starting for " ); row_name_print( expr->row ); printf( "\n" ); #endif /*DEBUG*/ /* Search this part of the tally for an iImage with ii as its * derived value, and link to us. */ (void) icontainer_map_all( ICONTAINER( expr->row->top_row ), (icontainer_map_fn) classmodel_iimage_expr_model, parms ); } return( NULL ); } /* classmodel is defined on ii ... update all the classmodel->iimage links. */ void classmodel_iimage_update( Classmodel *classmodel, Imageinfo *ii ) { ClassmodelSearch parms; parms.classmodel = classmodel; parms.ii = ii; slist_map( classmodel->iimages, (SListMapFn) classmodel_iimage_unlink_rev, classmodel ); /* Don't make links for supers/this. */ if( HEAPMODEL( classmodel )->row->sym && !is_super( HEAPMODEL( classmodel )->row->sym ) && !is_this( HEAPMODEL( classmodel )->row->sym ) ) { #ifdef DEBUG printf( "classmodel_iimage_update: " ); row_name_print( HEAPMODEL( classmodel )->row ); printf( " is defined on ii \"%s\" ... searching for client " "displays\n", ii->im->filename ); #endif /*DEBUG*/ slist_map( imageinfo_expr_which( ii ), (SListMapFn) classmodel_iimage_expr, &parms ); } } static gboolean classmodel_class_member_new( Classmodel *classmodel, ClassmodelMember *m, Heap *heap, PElement *out ); static gboolean classmodel_dict_new( Classmodel *classmodel, ClassmodelMember *options, int noptions, Heap *heap, PElement *out ) { PElement list = *out; int i; /* Make first RHS ... the end of the list. */ heap_list_init( &list ); for( i = 0; i < noptions; i++ ) { PElement pair, key, value; if( !heap_list_add( heap, &list, &pair ) || !heap_list_add( heap, &pair, &key ) || !heap_list_add( heap, &pair, &value ) || !heap_managedstring_new( heap, options[i].member_name, &key ) || !classmodel_class_member_new( classmodel, &options[i], heap, &value ) ) return( FALSE ); (void) heap_list_next( &list ); } return( TRUE ); } static gboolean classmodel_class_member_new( Classmodel *classmodel, ClassmodelMember *m, Heap *heap, PElement *out ) { switch( m->type ) { case CLASSMODEL_MEMBER_INT: case CLASSMODEL_MEMBER_ENUM: if( !heap_real_new( heap, G_STRUCT_MEMBER( int, classmodel, m->offset ), out ) ) return( FALSE ); break; case CLASSMODEL_MEMBER_BOOLEAN: if( !heap_bool_new( heap, G_STRUCT_MEMBER( gboolean, classmodel, m->offset ), out ) ) return( FALSE ); break; case CLASSMODEL_MEMBER_DOUBLE: if( !heap_real_new( heap, G_STRUCT_MEMBER( double, classmodel, m->offset ), out ) ) return( FALSE ); break; case CLASSMODEL_MEMBER_STRING: if( !heap_managedstring_new( heap, G_STRUCT_MEMBER( char *, classmodel, m->offset ), out ) ) return( FALSE ); break; case CLASSMODEL_MEMBER_STRING_LIST: if( !heap_lstring_new( heap, G_STRUCT_MEMBER( GSList *, classmodel, m->offset ), out ) ) return( FALSE ); break; case CLASSMODEL_MEMBER_REALVEC_FIXED: if( !heap_realvec_new( heap, m->extent, &G_STRUCT_MEMBER( double, classmodel, m->offset ), out ) ) return( FALSE ); break; case CLASSMODEL_MEMBER_MATRIX: { MatrixValue *value = &G_STRUCT_MEMBER( MatrixValue, classmodel, m->offset ); if( !heap_matrix_new( heap, value->width, value->height, value->coeff, out ) ) return( FALSE ); break; } case CLASSMODEL_MEMBER_OPTIONS: if( !classmodel_dict_new( classmodel, (ClassmodelMember *) m->details, m->extent, heap, out ) ) return( FALSE ); break; case CLASSMODEL_MEMBER_IMAGE: { ImageValue *value = &G_STRUCT_MEMBER( ImageValue, classmodel, m->offset ); PEPUTP( out, ELEMENT_MANAGED, value->ii ); break; } default: g_assert( 0 ); } return( TRUE ); } /* Trigger the class_new method for a classmodel ... look for a constructor: * try CLASS_edit, then if that's not defined, try CLASS. Eg. * A1.Scale_edit from to value * if Scale_edit is not defined, try * A1.Scale from to value */ static gboolean classmodel_class_instance_new( Classmodel *classmodel ) { ClassmodelClass *class = CLASSMODEL_GET_CLASS( classmodel ); Row *row = HEAPMODEL( classmodel )->row; PElement *root = &row->expr->root; const char *cname = IOBJECT( classmodel )->name; Reduce *rc = reduce_context; Heap *heap = rc->heap; char cname_new[256]; PElement fn; #ifdef DEBUG printf( "classmodel_class_instance_new: " ); row_name_print( HEAPMODEL( classmodel )->row ); printf( "\n" ); #endif /*DEBUG*/ /* Find and build. */ im_snprintf( cname_new, 256, "%s_edit", cname ); if( !class_get_member( root, cname_new, NULL, &fn ) ) { if( !class_get_member( root, cname, NULL, &fn ) ) return( FALSE ); } if( class->class_new ) { if( !class->class_new( classmodel, &fn, root ) ) return( FALSE ); } else { int i; PElement rhs; heap_appl_init( root, &fn ); for( i = 0; i < class->n_members; i++ ) { if( !heap_appl_add( heap, root, &rhs ) ) return( FALSE ); if( !classmodel_class_member_new( classmodel, &class->members[i], heap, &rhs ) ) return( FALSE ); } } /* Reduce to base type. */ if( !reduce_pelement( rc, reduce_spine, root ) ) return( FALSE ); /* We have a new heap struct ... tell everyone to get new pointers. */ if( heapmodel_new_heap( HEAPMODEL( row ), root ) ) return( FALSE ); return( TRUE ); } static void classmodel_dispose( GObject *gobject ) { Classmodel *classmodel; g_return_if_fail( gobject != NULL ); g_return_if_fail( IS_CLASSMODEL( gobject ) ); classmodel = CLASSMODEL( gobject ); /* My instance destroy stuff. */ slist_map( classmodel->iimages, (SListMapFn) classmodel_iimage_unlink_rev, classmodel ); IM_FREE( classmodel->filename ); G_OBJECT_CLASS( parent_class )->dispose( gobject ); } /* We don't want subclases like Group to have an _info() method, since it * will appear in tooltips and the Container _info() is rather annoying. * * Things like iImage define an _info() with useful stuff in. */ static void classmodel_info( iObject *iobject, VipsBuf *buf ) { } static void classmodel_parent_add( iContainer *child ) { g_assert( IS_CLASSMODEL( child ) ); ICONTAINER_CLASS( parent_class )->parent_add( child ); } /* How many widgets we allow for member automation edit. */ #define MAX_WIDGETS (10) /* Widgets for classmodel edit. */ typedef struct _ClassmodelEdit { iDialog *idlg; Classmodel *classmodel; GtkWidget *widgets[MAX_WIDGETS]; } ClassmodelEdit; static gboolean classmodel_done_member( Classmodel *classmodel, ClassmodelMember *m, GtkWidget *widget ) { char txt[256]; switch( m->type ) { case CLASSMODEL_MEMBER_INT: case CLASSMODEL_MEMBER_ENUM: break; case CLASSMODEL_MEMBER_BOOLEAN: G_STRUCT_MEMBER( gboolean, classmodel, m->offset ) = GTK_TOGGLE_BUTTON( widget )->active; break; case CLASSMODEL_MEMBER_DOUBLE: if( !get_geditable_double( widget, &G_STRUCT_MEMBER( double, classmodel, m->offset ) ) ) return( FALSE ); break; case CLASSMODEL_MEMBER_STRING: get_geditable_string( widget, txt, 256 ); IM_SETSTR( G_STRUCT_MEMBER( char *, classmodel, m->offset ), txt ); break; case CLASSMODEL_MEMBER_STRING_LIST: case CLASSMODEL_MEMBER_REALVEC_FIXED: case CLASSMODEL_MEMBER_MATRIX: case CLASSMODEL_MEMBER_OPTIONS: case CLASSMODEL_MEMBER_IMAGE: break; default: g_assert( 0 ); } return( TRUE ); } /* Done button hit. */ static void classmodel_done_cb( iWindow *iwnd, void *client, iWindowNotifyFn nfn, void *sys ) { ClassmodelEdit *eds = (ClassmodelEdit *) client; Classmodel *classmodel = eds->classmodel; ClassmodelClass *class = CLASSMODEL_GET_CLASS( classmodel ); int i; for( i = 0; i < class->n_members; i++ ) if( !classmodel_done_member( classmodel, &class->members[i], eds->widgets[i] ) ) { nfn( sys, IWINDOW_ERROR ); return; } /* Rebuild object. */ classmodel_update( classmodel ); symbol_recalculate_all(); nfn( sys, IWINDOW_YES ); } static GtkWidget * classmodel_buildedit_member( Classmodel *classmodel, ClassmodelMember *m, iDialog *idlg, GtkWidget *vb, GtkSizeGroup *group ) { GtkWidget *widget; widget = NULL; switch( m->type ) { case CLASSMODEL_MEMBER_INT: case CLASSMODEL_MEMBER_ENUM: break; case CLASSMODEL_MEMBER_BOOLEAN: widget = build_gtoggle( vb, _( m->user_name ) ); gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( widget ), G_STRUCT_MEMBER( gboolean, classmodel, m->offset ) ); set_tooltip( widget, _( "Set boolean value here" ) ); break; case CLASSMODEL_MEMBER_DOUBLE: widget = build_glabeltext4( vb, group, _( m->user_name ) ); idialog_init_entry( idlg, widget, _( "Enter a floating point number here" ), "%g", G_STRUCT_MEMBER( double, classmodel, m->offset ) ); break; case CLASSMODEL_MEMBER_STRING: widget = build_glabeltext4( vb, group, _( m->user_name ) ); idialog_init_entry( idlg, widget, _( "Enter a string here" ), "%s", G_STRUCT_MEMBER( char *, classmodel, m->offset ) ); break; case CLASSMODEL_MEMBER_STRING_LIST: case CLASSMODEL_MEMBER_REALVEC_FIXED: case CLASSMODEL_MEMBER_MATRIX: case CLASSMODEL_MEMBER_OPTIONS: case CLASSMODEL_MEMBER_IMAGE: break; default: g_assert( 0 ); } return( widget ); } /* Build the insides of edit. */ static void classmodel_buildedit( iDialog *idlg, GtkWidget *vb, ClassmodelEdit *eds ) { Classmodel *classmodel = eds->classmodel; ClassmodelClass *class = CLASSMODEL_GET_CLASS( classmodel ); GtkSizeGroup *group = gtk_size_group_new( GTK_SIZE_GROUP_HORIZONTAL ); int i; for( i = 0; i < class->n_members; i++ ) eds->widgets[i] = classmodel_buildedit_member( classmodel, &class->members[i], idlg, vb, group ); gtk_widget_show_all( vb ); g_object_unref( group ); } static void classmodel_edit( GtkWidget *parent, Model *model ) { Classmodel *classmodel = CLASSMODEL( model ); ClassmodelClass *class = CLASSMODEL_GET_CLASS( classmodel ); if( class->n_members ) { GtkWidget *idlg; ClassmodelEdit *eds = INEW( NULL, ClassmodelEdit ); eds->classmodel = classmodel; idlg = idialog_new(); /* Expands to eg. "Edit Toggle A1". */ iwindow_set_title( IWINDOW( idlg ), _( "Edit %s %s" ), IOBJECT_GET_CLASS_NAME( model ), IOBJECT( HEAPMODEL( model )->row )->name ); idialog_set_build( IDIALOG( idlg ), (iWindowBuildFn) classmodel_buildedit, eds, NULL, NULL ); idialog_set_callbacks( IDIALOG( idlg ), iwindow_true_cb, NULL, idialog_free_client, eds ); /* Expands to eg. "Set Toggle". */ idialog_add_ok( IDIALOG( idlg ), classmodel_done_cb, _( "Set %s" ), IOBJECT_GET_CLASS_NAME( classmodel ) ); iwindow_set_parent( IWINDOW( idlg ), parent ); idialog_set_iobject( IDIALOG( idlg ), IOBJECT( classmodel ) ); iwindow_build( IWINDOW( idlg ) ); gtk_widget_show( GTK_WIDGET( idlg ) ); } } static gboolean classmodel_save_member( Classmodel *classmodel, ClassmodelMember *m, xmlNode *xthis ) { int i; switch( m->type ) { case CLASSMODEL_MEMBER_INT: case CLASSMODEL_MEMBER_ENUM: if( !set_iprop( xthis, m->save_name, G_STRUCT_MEMBER( int, classmodel, m->offset ) ) ) return( FALSE ); break; case CLASSMODEL_MEMBER_BOOLEAN: if( !set_sprop( xthis, m->save_name, bool_to_char( G_STRUCT_MEMBER( gboolean, classmodel, m->offset ) ) ) ) return( FALSE ); break; case CLASSMODEL_MEMBER_DOUBLE: if( !set_dprop( xthis, m->save_name, G_STRUCT_MEMBER( double, classmodel, m->offset ) ) ) return( FALSE ); break; case CLASSMODEL_MEMBER_STRING: if( !set_sprop( xthis, m->save_name, G_STRUCT_MEMBER( char *, classmodel, m->offset ) ) ) return( FALSE ); break; case CLASSMODEL_MEMBER_STRING_LIST: if( !set_slprop( xthis, m->save_name, G_STRUCT_MEMBER( GSList *, classmodel, m->offset ) ) ) return( FALSE ); break; case CLASSMODEL_MEMBER_REALVEC_FIXED: for( i = 0; i < m->extent; i++ ) { char buf[256]; im_snprintf( buf, 256, "%s%d", m->save_name, i ); if( !set_dprop( xthis, buf, (&G_STRUCT_MEMBER( double, classmodel, m->offset ))[i] ) ) return( FALSE ); } break; case CLASSMODEL_MEMBER_MATRIX: { MatrixValue *value = &G_STRUCT_MEMBER( MatrixValue, classmodel, m->offset ); const int n = value->width * value->height; if( !set_dlprop( xthis, "value", value->coeff, n ) || !set_iprop( xthis, "width", value->width ) || !set_iprop( xthis, "height", value->height ) ) return( FALSE ); break; } case CLASSMODEL_MEMBER_OPTIONS: for( i = 0; i < m->extent; i++ ) { ClassmodelMember *options = (ClassmodelMember *) m->details; if( !classmodel_save_member( classmodel, &options[i], xthis ) ) return( FALSE ); } break; case CLASSMODEL_MEMBER_IMAGE: break; default: g_assert( 0 ); } return( TRUE ); } static xmlNode * classmodel_save( Model *model, xmlNode *xnode ) { Classmodel *classmodel = CLASSMODEL( model ); ClassmodelClass *class = CLASSMODEL_GET_CLASS( classmodel ); xmlNode *xthis; int i; #ifdef DEBUG printf( "classmodel_save: " ); row_name_print( HEAPMODEL( classmodel )->row ); printf( "\n" ); #endif /*DEBUG*/ if( !(xthis = MODEL_CLASS( parent_class )->save( model, xnode )) ) return( NULL ); if( classmodel->edited ) for( i = 0; i < class->n_members; i++ ) if( !classmodel_save_member( classmodel, &class->members[i], xthis ) ) return( NULL ); return( xthis ); } static gboolean classmodel_load_member( Classmodel *classmodel, ClassmodelMember *m, xmlNode *xthis ) { char buf[MAX_STRSIZE]; gboolean found; int i; found = FALSE; switch( m->type ) { case CLASSMODEL_MEMBER_INT: if( get_iprop( xthis, m->save_name, &G_STRUCT_MEMBER( int, classmodel, m->offset ) ) ) found = TRUE; break; case CLASSMODEL_MEMBER_ENUM: { int v; if( get_iprop( xthis, m->save_name, &v ) ) { v = IM_CLIP( 0, v, m->extent ); G_STRUCT_MEMBER( int, classmodel, m->offset ) = v; found = TRUE; } break; } case CLASSMODEL_MEMBER_BOOLEAN: if( get_bprop( xthis, m->save_name, &G_STRUCT_MEMBER( gboolean, classmodel, m->offset ) ) ) found = TRUE; break; case CLASSMODEL_MEMBER_DOUBLE: if( get_dprop( xthis, m->save_name, &G_STRUCT_MEMBER( double, classmodel, m->offset ) ) ) found = TRUE; break; case CLASSMODEL_MEMBER_STRING: if( get_sprop( xthis, m->save_name, buf, MAX_STRSIZE ) ) { IM_SETSTR( G_STRUCT_MEMBER( char *, classmodel, m->offset ), buf ); found = TRUE; } /* Nasty: before member automation, we used to always * save/load caption, as a member of model. Now caption is * only present if the class has it as a automated member. * Plus some classes used to not support captions (eg. Scale). * So: caption can be missing, even if it should be there. Set * a fall-back value. */ if( !found && strcmp( m->save_name, "caption" ) == 0 ) { IM_SETSTR( G_STRUCT_MEMBER( char *, classmodel, m->offset ), "" ); found = TRUE; } break; case CLASSMODEL_MEMBER_STRING_LIST: { GSList *slist; GSList **member = &G_STRUCT_MEMBER( GSList *, classmodel, m->offset ); if( get_slprop( xthis, m->member_name, &slist ) ) { IM_FREEF( slist_free_all, *member ); *member = slist; found = TRUE; } break; } case CLASSMODEL_MEMBER_REALVEC_FIXED: for( i = 0; i < m->extent; i++ ) { im_snprintf( buf, MAX_STRSIZE, "%s%d", m->save_name, i ); if( get_dprop( xthis, buf, &((&G_STRUCT_MEMBER( double, classmodel, m->offset ))[i]) ) ) found = TRUE; } break; case CLASSMODEL_MEMBER_MATRIX: { MatrixValue *value = &G_STRUCT_MEMBER( MatrixValue, classmodel, m->offset ); if( get_dlprop( xthis, "value", &value->coeff ) && get_iprop( xthis, "width", &value->width ) && get_iprop( xthis, "height", &value->height ) ) found = TRUE; break; } case CLASSMODEL_MEMBER_OPTIONS: for( i = 0; i < m->extent; i++ ) { ClassmodelMember *options = (ClassmodelMember *) m->details; if( !classmodel_load_member( classmodel, &options[i], xthis ) ) return( FALSE ); } break; case CLASSMODEL_MEMBER_IMAGE: break; default: g_assert( 0 ); } return( found ); } static gboolean classmodel_load( Model *model, ModelLoadState *state, Model *parent, xmlNode *xthis ) { Classmodel *classmodel = CLASSMODEL( model ); ClassmodelClass *class = CLASSMODEL_GET_CLASS( classmodel ); #ifdef DEBUG printf( "classmodel_load: " ); row_name_print( HEAPMODEL( classmodel )->row ); printf( "\n" ); #endif /*DEBUG*/ /* Only for classes with member automation. */ if( class->n_members ) { gboolean all_found; int i; /* Before we mark the graphic as edited, insist all * members have values set. This can be important in * compatibility mode, where the old nip might not have * supported all the members we have. */ all_found = TRUE; for( i = 0; i < class->n_members; i++ ) all_found &= classmodel_load_member( classmodel, &class->members[i], xthis ); if( all_found ) classmodel_set_edited( CLASSMODEL( model ), TRUE ); } return( MODEL_CLASS( parent_class )->load( model, state, parent, xthis ) ); } static gboolean classmodel_get_item( Classmodel *classmodel, ClassmodelMember *m, PElement *value ); static void * classmodel_parse_option( const char *key, PElement *value, Classmodel *classmodel, ClassmodelMember *m ) { ClassmodelMember *options = (ClassmodelMember *) m->details; int noptions = m->extent; int i; for( i = 0; i < noptions; i++ ) if( strcmp( key, options[i].member_name ) == 0 ) break; if( i == noptions ) { error_top( _( "Unknown option." ) ); error_sub( _( "Option \"%s\" not known." ), key ); return( value ); } if( !classmodel_get_item( classmodel, &options[i], value ) ) return( value ); return( NULL ); } static gboolean classmodel_get_item( Classmodel *classmodel, ClassmodelMember *m, PElement *value ) { char buf[MAX_STRSIZE]; double vec[3]; int l; int i; double d; switch( m->type ) { case CLASSMODEL_MEMBER_INT: if( !heap_get_real( value, &d ) ) return( FALSE ); G_STRUCT_MEMBER( int, classmodel, m->offset ) = d; break; case CLASSMODEL_MEMBER_ENUM: if( !heap_get_real( value, &d ) ) return( FALSE ); d = IM_CLIP( 0, d, m->extent ); G_STRUCT_MEMBER( int, classmodel, m->offset ) = d; break; case CLASSMODEL_MEMBER_BOOLEAN: if( !heap_get_bool( value, &G_STRUCT_MEMBER( gboolean, classmodel, m->offset ) ) ) return( FALSE ); break; case CLASSMODEL_MEMBER_DOUBLE: if( !heap_get_real( value, &G_STRUCT_MEMBER( double, classmodel, m->offset ) ) ) return( FALSE ); break; case CLASSMODEL_MEMBER_STRING: if( !heap_get_string( value, buf, MAX_STRSIZE ) ) return( FALSE ); IM_SETSTR( G_STRUCT_MEMBER( char *, classmodel, m->offset ), buf ); break; case CLASSMODEL_MEMBER_STRING_LIST: { GSList *slist; GSList **member = &G_STRUCT_MEMBER( GSList *, classmodel, m->offset ); if( !heap_get_lstring( value, &slist ) ) return( FALSE ); IM_FREEF( slist_free_all, *member ); *member = slist; break; } case CLASSMODEL_MEMBER_REALVEC_FIXED: g_assert( m->extent < 4 ); if( (l = heap_get_realvec( value, vec, m->extent )) < 0 ) return( FALSE ); if( l != m->extent ) { error_top( _( "Bad value." ) ); error_sub( _( "%d band value only" ), m->extent ); return( FALSE ); } for( i = 0; i < m->extent; i++ ) (&G_STRUCT_MEMBER( double, classmodel, m->offset ))[i] = vec[i]; break; case CLASSMODEL_MEMBER_MATRIX: { MatrixValue *matrix = &G_STRUCT_MEMBER( MatrixValue, classmodel, m->offset ); int w, h; if( !heap_get_matrix_size( value, &w, &h ) || !matrix_value_resize( matrix, w, h ) || !heap_get_matrix( value, matrix->coeff, matrix->width * matrix->height, &w, &h ) ) return( FALSE ); break; } case CLASSMODEL_MEMBER_OPTIONS: /* If there are optional fields, we have to have a reset * method for clearing the ones we don't use. */ g_assert( CLASSMODEL_GET_CLASS( classmodel )->reset ); if( heap_map_dict( value, (heap_map_dict_fn) classmodel_parse_option, classmodel, m ) ) return( FALSE ); break; case CLASSMODEL_MEMBER_IMAGE: { ImageValue *image = &G_STRUCT_MEMBER( ImageValue, classmodel, m->offset ); Imageinfo *ii; g_assert( image->classmodel == classmodel ); if( !heap_get_image( value, &ii ) ) return( FALSE ); image_value_set( image, ii ); break; } default: g_assert( 0 ); } return( TRUE ); } static gboolean classmodel_update_model_member( Classmodel *classmodel, ClassmodelMember *m, PElement *root ) { PElement value; if( !class_get_member( root, m->member_name, NULL, &value ) ) return( FALSE ); #ifdef DEBUG printf( "classmodel_update_model_member: setting %s = ", m->member_name ); pgraph( &value ); #endif /*DEBUG*/ if( !classmodel_get_item( classmodel, m, &value ) ) return( FALSE ); return( TRUE ); } /* Update all members from the heap. Also used from graph_export_image. */ gboolean classmodel_update_members( Classmodel *classmodel, PElement *root ) { ClassmodelClass *class = CLASSMODEL_GET_CLASS( classmodel ); int i; for( i = 0; i < class->n_members; i++ ) if( !classmodel_update_model_member( classmodel, &class->members[i], root ) ) return( FALSE ); if( class->class_get && !class->class_get( classmodel, root ) ) return( FALSE ); return( TRUE ); } static void * classmodel_update_model( Heapmodel *heapmodel ) { Classmodel *classmodel = CLASSMODEL( heapmodel ); ClassmodelClass *class = CLASSMODEL_GET_CLASS( classmodel ); #ifdef DEBUG printf( "classmodel_update_model: " ); row_name_print( heapmodel->row ); printf( "\n" ); #endif /*DEBUG*/ /* If necessary, reset model to default. */ if( class->reset ) class->reset( classmodel ); if( heapmodel->row && heapmodel->row->expr ) { Expr *expr = heapmodel->row->expr; if( !heapmodel->modified ) if( !classmodel_update_members( classmodel, &expr->root ) ) return( classmodel ); } return( HEAPMODEL_CLASS( parent_class )->update_model( heapmodel ) ); } static void * classmodel_update_heap( Heapmodel *heapmodel ) { Classmodel *classmodel = CLASSMODEL( heapmodel ); #ifdef DEBUG printf( "classmodel_update_heap: " ); row_name_print( HEAPMODEL( classmodel )->row ); printf( "\n" ); #endif /*DEBUG*/ /* Nasty: classmodel_class_instance_new() can (indirectly) destroy us. * Wrap a _ref()/_unref() pair around it to make sure we stay alive. */ g_object_ref( G_OBJECT( heapmodel ) ); /* Build a new instance from the model. */ if( !classmodel_class_instance_new( classmodel ) ) { g_object_unref( G_OBJECT( heapmodel ) ); return( heapmodel ); } if( HEAPMODEL_CLASS( parent_class )->update_heap( heapmodel ) ) { g_object_unref( G_OBJECT( heapmodel ) ); return( heapmodel ); } g_object_unref( G_OBJECT( heapmodel ) ); return( NULL ); } static void * classmodel_clear_edited( Heapmodel *heapmodel ) { Classmodel *classmodel = CLASSMODEL( heapmodel ); classmodel_set_edited( classmodel, FALSE ); return( HEAPMODEL_CLASS( parent_class )->clear_edited( heapmodel ) ); } static gboolean classmodel_real_class_get( Classmodel *classmodel, PElement *root ) { return( TRUE ); } static void classmodel_class_init( ClassmodelClass *class ) { GObjectClass *gobject_class = (GObjectClass *) class; iObjectClass *iobject_class = (iObjectClass *) class; iContainerClass *icontainer_class = (iContainerClass *) class; ModelClass *model_class = (ModelClass *) class; HeapmodelClass *heapmodel_class = (HeapmodelClass *) class; ClassmodelClass *classmodel_class = (ClassmodelClass *) class; parent_class = g_type_class_peek_parent( class ); /* Init methods. */ gobject_class->dispose = classmodel_dispose; iobject_class->info = classmodel_info; icontainer_class->parent_add = classmodel_parent_add; model_class->edit = classmodel_edit; model_class->save = classmodel_save; model_class->load = classmodel_load; heapmodel_class->update_model = classmodel_update_model; heapmodel_class->update_heap = classmodel_update_heap; heapmodel_class->clear_edited = classmodel_clear_edited; classmodel_class->get_instance = NULL; classmodel_class->class_get = classmodel_real_class_get; classmodel_class->class_new = NULL; classmodel_class->graphic_save = NULL; classmodel_class->graphic_replace = NULL; classmodel_class->filetype = filesel_type_any; classmodel_class->filetype_pref = NULL; classmodel_class->members = NULL; classmodel_class->n_members = 0; } static void classmodel_init( Classmodel *classmodel ) { Model *model = MODEL( classmodel ); model->display = FALSE; classmodel->edited = FALSE; classmodel->iimages = NULL; classmodel->views = NULL; classmodel->filename = NULL; } GType classmodel_get_type( void ) { static GType type = 0; if( !type ) { static const GTypeInfo info = { sizeof( ClassmodelClass ), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) classmodel_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof( Classmodel ), 32, /* n_preallocs */ (GInstanceInitFunc) classmodel_init, }; type = g_type_register_static( TYPE_HEAPMODEL, "Classmodel", &info, 0 ); } return( type ); } void classmodel_set_edited( Classmodel *classmodel, gboolean edited ) { if( classmodel->edited != edited ) { #ifdef DEBUG printf( "classmodel_set_edited: " ); row_name_print( HEAPMODEL( classmodel )->row ); printf( " %s\n", bool_to_char( edited ) ); #endif /*DEBUG*/ classmodel->edited = edited; iobject_changed( IOBJECT( classmodel ) ); if( HEAPMODEL( classmodel )->row && HEAPMODEL( classmodel )->row->expr ) expr_dirty( HEAPMODEL( classmodel )->row->expr, link_serial_new() ); } /* Mark eds for application. */ if( edited ) heapmodel_set_modified( HEAPMODEL( classmodel ), TRUE ); } /* The model has changed: mark for recomp. */ void classmodel_update( Classmodel *classmodel ) { Row *row = HEAPMODEL( classmodel )->row; /* Eg. for no symol on load. */ if( !row->expr ) return; #ifdef DEBUG printf( "classmodel_update: " ); row_name_print( HEAPMODEL( classmodel )->row ); printf( "\n" ); #endif /*DEBUG*/ /* classmodel_update_heap() will rebuild us on recomp. */ classmodel_set_edited( classmodel, TRUE ); expr_dirty( row->expr, link_serial_new() ); workspace_set_modified( row->ws, TRUE ); } /* Make a new classmodel subtype (eg. TYPE_PATHNAME) and link it on. */ Classmodel * classmodel_new_classmodel( GType type, Rhs *rhs ) { Classmodel *classmodel; classmodel = g_object_new( type, NULL ); icontainer_child_add( ICONTAINER( rhs ), ICONTAINER( classmodel ), -1 ); return( classmodel ); } nip2-8.7.0/src/vector.c0000644000175000017500000000336113224651032011555 00000000000000/* display a vector */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #include "ip.h" static ValueClass *parent_class = NULL; static void vector_class_init( VectorClass *class ) { parent_class = g_type_class_peek_parent( class ); /* Create signals. */ model_register_loadable( MODEL_CLASS( class ) ); } static void vector_init( Vector *vector ) { iobject_set( IOBJECT( vector ), CLASS_VECTOR, NULL ); } GType vector_get_type( void ) { static GType type = 0; if( !type ) { static const GTypeInfo info = { sizeof( VectorClass ), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) vector_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof( Vector ), 32, /* n_preallocs */ (GInstanceInitFunc) vector_init, }; type = g_type_register_static( TYPE_VALUE, "Vector", &info, 0 ); } return( type ); } nip2-8.7.0/src/plotview.h0000644000175000017500000000311613224651032012127 00000000000000/* a plotview in a workspace */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_PLOTVIEW (plotview_get_type()) #define PLOTVIEW( obj ) (GTK_CHECK_CAST( (obj), TYPE_PLOTVIEW, Plotview )) #define PLOTVIEW_CLASS( klass ) \ (GTK_CHECK_CLASS_CAST( (klass), TYPE_PLOTVIEW, PlotviewClass )) #define IS_PLOTVIEW( obj ) (GTK_CHECK_TYPE( (obj), TYPE_PLOTVIEW )) #define IS_PLOTVIEW_CLASS( klass ) \ (GTK_CHECK_CLASS_TYPE( (klass), TYPE_PLOTVIEW )) typedef struct _Plotview { Graphicview parent_object; GtkWidget *box; GtkWidget *label; GtkWidget *canvas; GogChart *gchart; GogPlot *gplot; } Plotview; typedef struct _PlotviewClass { GraphicviewClass parent_class; /* My methods. */ } PlotviewClass; GtkType plotview_get_type( void ); View *plotview_new( void ); nip2-8.7.0/src/toolkit.h0000644000175000017500000000454513224651032011752 00000000000000/* Groups of tools! */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_TOOLKIT (toolkit_get_type()) #define TOOLKIT( obj ) \ (G_TYPE_CHECK_INSTANCE_CAST( (obj), TYPE_TOOLKIT, Toolkit )) #define TOOLKIT_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_CAST( (klass), TYPE_TOOLKIT, ToolkitClass)) #define IS_TOOLKIT( obj ) \ (G_TYPE_CHECK_INSTANCE_TYPE( (obj), TYPE_TOOLKIT )) #define IS_TOOLKIT_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_TYPE( (klass), TYPE_TOOLKIT )) #define TOOLKIT_GET_CLASS( obj ) \ (G_TYPE_INSTANCE_GET_CLASS( (obj), TYPE_TOOLKIT, ToolkitClass )) /* Toolkits: group definitions with these guys. One toolkit per definition file * loaded. */ struct _Toolkit { Filemodel parent_class; Toolkitgroup *kitg; /* Set this for auto-generated toolkits (eg. packages of function from * VIPS) ... blocks edit etc. in program window. */ gboolean pseudo; }; typedef struct _ToolkitClass { FilemodelClass parent_class; /* My methods. */ } ToolkitClass; Tool *toolkit_map( Toolkit *kit, tool_map_fn fn, void *a, void *b ); GType toolkit_get_type( void ); Toolkit *toolkit_find( Toolkitgroup *kitg, const char *name ); Toolkit *toolkit_by_name( Toolkitgroup *kitg, const char *name ); Toolkit *toolkit_new( Toolkitgroup *kitg, const char *filename ); Toolkit *toolkit_new_filename( Toolkitgroup *kitg, const char *filename ); Toolkit *toolkit_new_from_file( Toolkitgroup *kitg, const char *filename ); Toolkit *toolkit_new_from_openfile( Toolkitgroup *kitg, iOpenFile *of ); void *toolkit_linkreport( Toolkit *kit, VipsBuf *buf, gboolean *bad_links ); nip2-8.7.0/src/iimageview.h0000644000175000017500000000327313224651032012410 00000000000000/* a iimageview in a workspace */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_IIMAGEVIEW (iimageview_get_type()) #define IIMAGEVIEW( obj ) (GTK_CHECK_CAST( (obj), TYPE_IIMAGEVIEW, iImageview )) #define IIMAGEVIEW_CLASS( klass ) \ (GTK_CHECK_CLASS_CAST( (klass), TYPE_IIMAGEVIEW, iImageviewClass )) #define IS_IIMAGEVIEW( obj ) (GTK_CHECK_TYPE( (obj), TYPE_IIMAGEVIEW )) #define IS_IIMAGEVIEW_CLASS( klass ) \ (GTK_CHECK_CLASS_TYPE( (klass), TYPE_IIMAGEVIEW )) typedef struct _iImageview { Graphicview parent_object; guint popup_sid; /* id for popup menu */ Imagedisplay *id; Conversion *conv; GtkWidget *label; } iImageview; typedef struct _iImageviewClass { GraphicviewClass parent_class; /* My methods. */ } iImageviewClass; GtkWidget *iimageview_drag_window_new( int width, int height ); GtkType iimageview_get_type( void ); View *iimageview_new( void ); nip2-8.7.0/src/dump.h0000644000175000017500000000317113224651032011224 00000000000000/* Decls for dump.c */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ char *decode_BinOp( BinOp op ); char *decode_UnOp( UnOp op ); char *decode_NodeType( NodeType tag ); char *decode_CombinatorType( CombinatorType comb ); char *decode_SymbolType( SymbolType t ); char *decode_SymbolType_user( SymbolType t ); void *dump_tiny( Symbol *sym ); void *dump_symbol( Symbol *sym ); void dump_expr( Expr *expr ); void dump_compile( Compile *compile ); void dump_symbol_table( void ); void *dump_kit( Toolkit *kit ); Symbol *sym( char *name ); void psym( char *name ); void psymv( char *name ); void pgraph( PElement *graph ); void graph_heap( int nsp, HeapNode *hn ); void graph_test( Heap *heap ); void *dump_tree( ParseNode *n ); void dump_links( Symbol *sym ); void *dump_link( Link *link ); void dump_symbol_heap( Symbol *sym ); nip2-8.7.0/src/symbol.c0000644000175000017500000006521513224651032011566 00000000000000/* Basic ops on symbols. */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #include "ip.h" /* All debug #define DEBUG */ /* Just trace create/destroy. #define DEBUG_MAKE */ /* Time recomputes. #define DEBUG_TIME */ /* Show symbols as we recalc #define DEBUG_RECALC */ /* If DEBUG is on, make sure other debugs are on too. */ #ifdef DEBUG # ifndef DEBUG_MAKE # define DEBUG_MAKE # endif # ifndef DEBUG_TIME # define DEBUG_TIME # endif # ifndef DEBUG_RECALC # define DEBUG_RECALC # endif #endif /* Our signals. */ enum { SIG_NEW_VALUE, /* new value for sym->expr */ SIG_LAST }; static guint symbol_signals[SIG_LAST] = { 0 }; /* Global symbol - top-level definitions are locals to this symbol. */ Symbol *symbol_root = NULL; /* Set of dirty top-level symbols with no dirty children which do not contain * errors. Used to generate next-to-recalc. */ static GSList *symbol_leaf_set = NULL; static FilemodelClass *parent_class = NULL; /* Apply a function to a symbol ... and any locals. */ Symbol * symbol_map_all( Symbol *sym, symbol_map_fn fn, void *a, void *b ) { Symbol *res; /* Apply to this sym. */ if( (res = fn( sym, a, b, NULL )) ) return( res ); /* And over any locals of those locals. */ if( sym->expr && sym->expr->compile && (res = icontainer_map3( ICONTAINER( sym->expr->compile ), (icontainer_map3_fn) symbol_map_all, (void *) fn, a, b )) ) return( res ); return( NULL ); } /* Find a symbol's enclosing sym. */ Symbol * symbol_get_parent( Symbol *sym ) { if( !ICONTAINER( sym )->parent ) return( NULL ); return( COMPILE( ICONTAINER( sym )->parent )->sym ); } /* Find the enclosing workspace, if any. */ Workspace * symbol_get_workspace( Symbol *sym ) { if( !sym->expr || !sym->expr->row ) return( NULL ); return( row_get_workspace( sym->expr->row ) ); } /* Find the enclosing tool, if any. */ Tool * symbol_get_tool( Symbol *sym ) { Symbol *i; for( i = sym; i && !i->tool; i = symbol_get_parent( i ) ) ; if( i ) return( i->tool ); return( NULL ); } /* Get the enclosing scope for a sym. */ Symbol * symbol_get_scope( Symbol *sym ) { Symbol *i; for( i = sym; i && !is_scope( i ); i = symbol_get_parent( i ) ) ; return( i ); } /* Make a fully-qualified symbol name .. eg fred.jim, given jim. Don't print * static scopes. */ void symbol_qualified_name( Symbol *sym, VipsBuf *buf ) { Symbol *parent = symbol_get_parent( sym ); if( parent && !is_scope( parent ) ) { symbol_qualified_name( parent, buf ); vips_buf_appends( buf, "." ); } vips_buf_appends( buf, NN( IOBJECT( sym )->name ) ); } /* Make a symbol name relative to a scope context ... ie. from the point of * view of a local of context, what name will find sym. */ void symbol_qualified_name_relative( Symbol *context, Symbol *sym, VipsBuf *buf ) { Symbol *parent = symbol_get_parent( sym ); if( parent && !is_ancestor( context, parent ) ) { symbol_qualified_name_relative( context, parent, buf ); vips_buf_appends( buf, "." ); } vips_buf_appends( buf, NN( IOBJECT( sym )->name ) ); } /* As above, but include stuff about where the symbol is defined, handy for * building error messages. */ void * symbol_name_error( Symbol *sym, VipsBuf *buf ) { Tool *tool; symbol_qualified_name( sym, buf ); if( (tool = symbol_get_tool( sym )) ) tool_error( tool, buf ); vips_buf_appends( buf, " " ); return( NULL ); } /* Handy for error messages ... but nowt else. Return string overwritten on * next call. */ const char * symbol_name( Symbol *sym ) { static char txt[200]; static VipsBuf buf = VIPS_BUF_STATIC( txt ); vips_buf_rewind( &buf ); symbol_qualified_name( sym, &buf ); return( vips_buf_all( &buf ) ); } /* Convenience ... print a qual name to stdout. */ void * symbol_name_print( Symbol *sym ) { printf( "%s ", symbol_name( sym ) ); return( NULL ); } /* Print a symbol's name, including the enclosing static scope. Return value * is a pointer to a static buffer :( */ const char * symbol_name_scope( Symbol *sym ) { Symbol *scope = symbol_get_scope( sym ); static char txt[200]; static VipsBuf buf = VIPS_BUF_STATIC( txt ); vips_buf_rewind( &buf ); vips_buf_appends( &buf, NN( IOBJECT( scope )->name ) ); vips_buf_appends( &buf, "." ); symbol_qualified_name_relative( scope, sym, &buf ); return( vips_buf_all( &buf ) ); } /* Convenience ... print a qual name to stdout. */ void symbol_name_scope_print( Symbol *sym ) { printf( "%s", symbol_name_scope( sym ) ); } void symbol_new_value( Symbol *sym ) { g_signal_emit( G_OBJECT( sym ), symbol_signals[SIG_NEW_VALUE], 0 ); } /* Add a pointer to a patch list. */ void * symbol_patch_add( void **pnt, Symbol *sym ) { g_assert( sym->type == SYM_ZOMBIE ); sym->patch = g_slist_prepend( sym->patch, pnt ); return( NULL ); } static void symbol_clear( Symbol *sym ) { sym->type = SYM_ZOMBIE; sym->patch = NULL; sym->expr = NULL; sym->base.type = ELEMENT_NOVAL; sym->base.ele = (void *) 15; /* handy for debugging */ sym->dirty = FALSE; sym->parents = NULL; sym->topchildren = NULL; sym->topparents = NULL; sym->ndirtychildren = 0; sym->leaf = FALSE; sym->generated = FALSE; sym->placeholder = FALSE; sym->tool = NULL; sym->function = NULL; sym->builtin = NULL; sym->wsr = NULL; sym->ws = NULL; } /* Initialise root symbol. */ Symbol * symbol_root_init( void ) { Symbol *root = SYMBOL( g_object_new( TYPE_SYMBOL, NULL ) ); symbol_clear( root ); iobject_set( IOBJECT( root ), "$$ROOT", NULL ); root->type = SYM_ROOT; root->expr = expr_new( root ); (void) compile_new_local( root->expr ); symbol_root = symbol_new( root->expr->compile, "root" ); symbol_root->type = SYM_ROOT; symbol_root->expr = expr_new( symbol_root ); (void) compile_new( symbol_root->expr ); return( root ); } /* Should a symbol be in the leaf set? */ static gboolean symbol_is_leafable( Symbol *sym ) { if( is_top( sym ) && sym->dirty && sym->expr && !sym->expr->err && sym->ndirtychildren == 0 ) return( TRUE ); return( FALSE ); } #ifdef DEBUG /* Do a sanity check on a symbol. */ void * symbol_sanity( Symbol *sym ) { if( is_top( sym ) ) { if( symbol_ndirty( sym ) != sym->ndirtychildren ) error( "sanity failure #1 for sym \"%s\"", symbol_name( sym ) ); } if( symbol_is_leafable( sym ) && !sym->leaf ) error( "sanity failure #2 for sym \"%s\"", symbol_name( sym ) ); if( !symbol_is_leafable( sym ) && sym->leaf ) error( "sanity failure #3 for sym \"%s\"", symbol_name( sym ) ); if( sym->leaf && !g_slist_find( symbol_leaf_set, sym ) ) error( "sanity failure #6 for sym \"%s\"", symbol_name( sym ) ); if( !sym->leaf && g_slist_find( symbol_leaf_set, sym ) ) error( "sanity failure #7 for sym \"%s\"", symbol_name( sym ) ); return( NULL ); } #endif/*DEBUG*/ #ifdef DEBUG /* Test the leaf set for sanity. */ void symbol_leaf_set_sanity( void ) { slist_map( symbol_leaf_set, (SListMapFn) symbol_sanity, NULL ); icontainer_map( ICONTAINER( symbol_root->expr->compile ), (icontainer_map_fn) symbol_sanity, NULL, NULL ); /* Commented out to reduce spam * printf( "Leaf set: " ); slist_map( symbol_leaf_set, (SListMapFn) dump_tiny, NULL ); printf( "\n" ); */ } #endif /*DEBUG*/ /* Strip a symbol down, ready for redefinition. */ void * symbol_strip( Symbol *sym ) { #ifdef DEBUG_MAKE printf( "symbol_strip: " ); symbol_name_print( sym ); printf( "\n" ); #endif /*DEBUG_MAKE*/ /* Anything that refers to us will need a recomp. */ if( is_top( sym ) ) symbol_dirty_intrans( sym, link_serial_new() ); /* Clean out old exprinfo. */ icontainer_map( ICONTAINER( sym ), (icontainer_map_fn) expr_strip, NULL, NULL ); /* Free any top-links we made. */ (void) slist_map( sym->topchildren, (SListMapFn) link_destroy, NULL ); /* Can free the patch list. We should not have to resolve off this * name again. */ IM_FREEF( g_slist_free, sym->patch ); /* Workspaceroot? Unlink from wsr. */ if( sym->wsr ) { sym->wsr->sym = NULL; sym->wsr = NULL; } /* Workspace? Unlink from ws. */ if( sym->ws ) { sym->ws->sym = NULL; sym->ws = NULL; } /* It's a ZOMBIE now. */ sym->type = SYM_ZOMBIE; #ifdef DEBUG symbol_sanity( sym ); #endif /*DEBUG*/ return( NULL ); } static void * symbol_made_error_clear( Link *link ) { expr_error_clear( link->parent->expr ); return( NULL ); } /* Finish creating a symbol. Sequence is: symbol_new(), specialise ZOMBIE * into a particular symbol type, symbol_made(). Do any final tidying up. */ void symbol_made( Symbol *sym ) { #ifdef DEBUG_MAKE printf( "symbol_made: " ); symbol_name_print( sym ); printf( "\n" ); #endif /*DEBUG_MAKE*/ if( is_top( sym ) ) { /* Remake all top-level dependencies. */ (void) symbol_link_build( sym ); /* Clear error on every symbol that refs us, then mark dirty. * This lets us replace refed-to syms cleanly. */ slist_map( sym->topparents, (SListMapFn) symbol_made_error_clear, NULL ); /* Real dirrrrty. */ if( sym->expr ) expr_dirty( sym->expr, link_serial_new() ); } #ifdef DEBUG dump_symbol( sym ); #endif /*DEBUG*/ } static void * symbol_not_defined_sub( Link *link, VipsBuf *buf ) { symbol_name_error( link->parent, buf ); return( NULL ); } /* Make a "not defined" error message. Can be called before symbol is removed, * so don't assume it's a ZOMBIE. */ void symbol_not_defined( Symbol *sym ) { char txt[256]; VipsBuf buf = VIPS_BUF_STATIC( txt ); error_top( _( "Not found." ) ); vips_buf_appendf( &buf, _( "Symbol %s is not defined." ), symbol_name( sym ) ); if( sym->topparents ) { vips_buf_appends( &buf, "\n" ); vips_buf_appendf( &buf, _( "%s is referred to by" ), symbol_name( sym ) ); vips_buf_appends( &buf, ": " ); slist_map2( sym->topparents, (SListMap2Fn) symbol_not_defined_sub, &buf, NULL ); vips_buf_appends( &buf, "\n" ); } error_sub( "%s", vips_buf_all( &buf ) ); } /* Compile refers to sym, which is going ... mark compile as containing an * error. */ static void * symbol_destroy_error( Compile *compile, Symbol *sym ) { symbol_not_defined( sym ); compile_error_set( compile ); return( NULL ); } static void symbol_dispose( GObject *gobject ) { Symbol *sym; Compile *compile; g_return_if_fail( gobject != NULL ); g_return_if_fail( IS_SYMBOL( gobject ) ); sym = SYMBOL( gobject ); compile = COMPILE( ICONTAINER( sym )->parent ); #ifdef DEBUG_MAKE printf( "symbol_dispose: " ); symbol_name_print( sym ); printf( "(%p)\n", sym ); #endif /*DEBUG_MAKE*/ /* Make sure we're not leaving last_sym dangling. */ if( compile && compile->last_sym == sym ) compile->last_sym = NULL; /* Clear state. */ if( is_top( sym ) ) { /* All stuff that depends on this sym is now dirty. */ symbol_dirty_intrans( sym, link_serial_new() ); /* This will knock this sym off the leaf set as well. */ symbol_dirty_clear( sym ); } /* Strip it down. */ (void) symbol_strip( sym ); IDESTROY( sym->tool ); /* Any exprs which refer to us must have errors. */ (void) slist_map( sym->parents, (SListMapFn) symbol_destroy_error, sym ); /* Remove links from any expr which refer to us. */ (void) slist_map( sym->parents, (SListMapFn) compile_link_break, sym ); /* No other syms should have toplinks to us. */ (void) slist_map( sym->topparents, (SListMapFn) link_destroy, NULL ); /* Unregister value with GC. */ reduce_unregister( sym ); /* Free other stuff. */ sym->type = SYM_ZOMBIE; g_assert( !sym->tool ); g_assert( !sym->parents ); g_assert( !sym->topparents ); g_assert( !sym->topchildren ); IM_FREEF( g_slist_free, sym->patch ); IM_FREEF( g_slist_free, sym->parents ); G_OBJECT_CLASS( parent_class )->dispose( gobject ); } static void symbol_changed( iObject *iobject ) { Symbol *sym = SYMBOL( iobject ); /* If we have a tool, signal changed on that as well. */ if( sym->tool ) iobject_changed( IOBJECT( sym->tool ) ); IOBJECT_CLASS( parent_class )->changed( iobject ); } static void symbol_real_new_value( Symbol *symbol ) { } static void symbol_class_init( SymbolClass *class ) { GObjectClass *gobject_class = G_OBJECT_CLASS( class ); iObjectClass *iobject_class = (iObjectClass *) class; parent_class = g_type_class_peek_parent( class ); gobject_class->dispose = symbol_dispose; iobject_class->changed = symbol_changed; symbol_signals[SIG_NEW_VALUE] = g_signal_new( "new_value", G_OBJECT_CLASS_TYPE( gobject_class ), G_SIGNAL_RUN_FIRST, G_STRUCT_OFFSET( SymbolClass, new_value ), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0 ); class->new_value = symbol_real_new_value; } static void symbol_init( Symbol *sym ) { symbol_clear( sym ); #ifdef DEBUG_MAKE printf( "symbol_init: (%p)\n", sym ); #endif /*DEBUG_MAKE*/ } GtkType symbol_get_type( void ) { static GtkType symbol_type = 0; if( !symbol_type ) { static const GTypeInfo info = { sizeof( SymbolClass ), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) symbol_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof( Symbol ), 32, /* n_preallocs */ (GInstanceInitFunc) symbol_init, }; symbol_type = g_type_register_static( TYPE_FILEMODEL, "Symbol", &info, 0 ); } return( symbol_type ); } /* Make a new symbol on an expr. If it's already there and a ZOMBIE, just * return it. If it's not a ZOMBIE, turn it into one. Otherwise make and * link on a new symbol. */ Symbol * symbol_new( Compile *compile, const char *name ) { Symbol *sym; if( (sym = compile_lookup( compile, name )) ) { if( sym->type != SYM_ZOMBIE ) /* Already exists: strip it down. */ (void) symbol_strip( sym ); #ifdef DEBUG_MAKE printf( "symbol_new: redefining " ); symbol_name_print( sym ); printf( "(%p)\n", sym ); #endif /*DEBUG_MAKE*/ } else { sym = SYMBOL( g_object_new( TYPE_SYMBOL, NULL ) ); iobject_set( IOBJECT( sym ), name, NULL ); icontainer_child_add( ICONTAINER( compile ), ICONTAINER( sym ), -1 ); #ifdef DEBUG_MAKE printf( "symbol_new: creating " ); symbol_name_print( sym ); printf( "(%p)\n", sym ); #endif /*DEBUG_MAKE*/ } return( sym ); } gboolean symbol_rename( Symbol *sym, const char *new_name ) { Compile *compile = COMPILE( ICONTAINER( sym )->parent ); Symbol *old_sym; if( strcmp( IOBJECT( sym )->name, new_name ) == 0 ) return( TRUE ); if( (old_sym = compile_lookup( compile, new_name )) ) { error_top( "%s", _( "Name in use." ) ); error_sub( _( "Can't rename %s \"%s\" as \"%s\". " "The name is already in use." ), decode_SymbolType_user( sym->type ), IOBJECT( sym )->name, new_name ); return( FALSE ); } /* Everything that depends on us will break. */ symbol_dirty_intrans( sym, link_serial_new() ); g_object_ref( sym ); icontainer_child_remove( ICONTAINER( sym ) ); iobject_set( IOBJECT( sym ), new_name, NULL ); icontainer_child_add( ICONTAINER( compile ), ICONTAINER( sym ), ICONTAINER( sym )->pos ); g_object_unref( sym ); return( TRUE ); } void symbol_error_redefine( Symbol *sym ) { static char txt[200]; static VipsBuf buf = VIPS_BUF_STATIC( txt ); vips_buf_rewind( &buf ); vips_buf_appendf( &buf, _( "Redefinition of \"%s\"." ), IOBJECT( sym )->name ); if( sym->tool && sym->tool->lineno != -1 ) { vips_buf_appendf( &buf, "\n" ); vips_buf_appendf( &buf, _( "Previously defined at line %d." ), sym->tool->lineno ); } yyerror( vips_buf_all( &buf ) ); } /* Name in defining occurence. If this is a top-level definition, clean the * old symbol and get ready to attach a user function to it. If its not a top- * level definition, we flag an error. Consider repeated parameter names, * repeated occurence of names in locals, local name clashes with parameter * name etc. * We make a ZOMBIE: our caller should turn it into a blank user definition, a * parameter etc. */ Symbol * symbol_new_defining( Compile *compile, const char *name ) { Symbol *sym; /* Block definition of "root" anywhere ... too confusing. */ if( strcmp( name, IOBJECT( symbol_root )->name ) == 0 ) nip2yyerror( _( "Attempt to redefine root symbol \"%s\"." ), name ); /* Is this a redefinition of an existing symbol? */ if( (sym = compile_lookup( compile, name )) ) { /* Yes. Check that this redefinition is legal. */ switch( sym->type ) { case SYM_VALUE: /* Redef of existing symbol? Only allowed at top * level. */ if( !is_scope( compile->sym ) ) symbol_error_redefine( sym ); break; case SYM_ZOMBIE: /* This is the definition for a previously referenced * symbol. Just return the ZOMBIE we made. */ break; default: /* Parameter, workspace, etc. */ nip2yyerror( _( "Can't redefine %s \"%s\"." ), decode_SymbolType_user( sym->type ), name ); /*NOTREACHED*/ } /* This is the defining occurence ... move to the end of the * traverse order. */ icontainer_child_move( ICONTAINER( sym ), -1 ); } /* Get it ready. */ sym = symbol_new( compile, name ); return( sym ); } /* Make a reference to a symbol. Look on the local table for the name - if * it's not there, make a ZOMBIE. Note that ZOMBIEs etc. need patch lists * attached to them for all pointers to them we make. Responsibility of * caller! */ Symbol * symbol_new_reference( Compile *compile, const char *name ) { Symbol *sym = compile_lookup( compile, name ); if( !sym ) sym = symbol_new( compile, name ); /* Note the new dependency. */ compile_link_make( compile, sym ); return( sym ); } /* Compile refers to child ... break link. */ void * symbol_link_break( Symbol *child, Compile *compile ) { compile_link_break( compile, child ); return( NULL ); } /* Specialise into a user definition. */ gboolean symbol_user_init( Symbol *sym ) { g_assert( sym->type == SYM_ZOMBIE ); sym->type = SYM_VALUE; reduce_register( sym ); if( !sym->expr ) sym->expr = expr_new( sym ); /* We don't symbol_made() yet, wait until we have finished building * sym->expr. */ return( TRUE ); } /* Specialise into a parameter on an expression. */ gboolean symbol_parameter_init( Symbol *sym ) { Compile *parent = COMPILE( ICONTAINER( sym )->parent ); g_assert( sym->type == SYM_ZOMBIE ); sym->type = SYM_PARAM; parent->param = g_slist_append( parent->param, sym ); parent->nparam = g_slist_length( parent->param ); symbol_made( sym ); return( TRUE ); } /* Specialise into a builtin parameter (eg. "this"). */ gboolean symbol_parameter_builtin_init( Symbol *sym ) { g_assert( sym->type == SYM_ZOMBIE ); sym->type = SYM_PARAM; symbol_made( sym ); return( TRUE ); } /* Get the next dirty leaf symbol. */ static Symbol * symbol_leaf_next( void ) { if( symbol_leaf_set ) return( (Symbol *) symbol_leaf_set->data ); else return( NULL ); } /* Are there symbols we can recalculate? Used to display "Calculating ..." * status. */ gboolean symbol_busy( void ) { return( symbol_leaf_set != NULL ); } /* Set leaf state. */ static void symbol_set_leaf( Symbol *sym, gboolean leaf ) { if( sym->leaf != leaf ) { gboolean changed; sym->leaf = leaf; changed = FALSE; if( leaf ) { if( !symbol_leaf_set ) changed = TRUE; symbol_leaf_set = g_slist_prepend( symbol_leaf_set, sym ); } else { g_assert( symbol_leaf_set ); symbol_leaf_set = g_slist_remove( symbol_leaf_set, sym ); if( !symbol_leaf_set ) changed = TRUE; } if( changed ) iobject_changed( IOBJECT( reduce_context->heap ) ); if( sym->expr && sym->expr->row ) iobject_changed( IOBJECT( sym->expr->row ) ); } } /* State of a symbol has changed ... update! */ void symbol_state_change( Symbol *sym ) { g_assert( sym->ndirtychildren >= 0 ); /* Used to do more ... now we just set leaf. */ symbol_set_leaf( sym, symbol_is_leafable( sym ) ); } /* Recalculate a symbol. We know we are dirty and have no dirty ancestors. */ static gboolean symbol_recalculate_sub( Symbol *sym ) { gboolean result = TRUE; #ifdef DEBUG_TIME static GTimer *timer = NULL; if( !timer ) timer = g_timer_new(); g_timer_reset( timer ); #endif /*DEBUG_TIME*/ g_assert( is_value( sym ) ); if( sym->expr->row ) { /* This is the root of a display ... use that recomp * mechanism. */ row_recomp( sym->expr->row ); /* Stuff may have been removed. */ if( sym->expr && sym->expr->row && sym->expr->row->err ) result = FALSE; } else if( sym->expr->compile->nparam == 0 ) { /* No params: this ought to have a value. */ if( !reduce_regenerate( sym->expr, &sym->expr->root ) ) result = FALSE; } #ifdef DEBUG_TIME printf( "symbol_recalculate_sub: " ); symbol_name_scope_print( sym ); printf( " %g\n", g_timer_elapsed( timer, NULL ) ); #endif /*DEBUG_TIME*/ return( result ); } /* Note the name of the last thing we calced here, for progress to display. */ static char symbol_last_calc_txt[256]; static VipsBuf symbol_last_calc_buf = VIPS_BUF_STATIC( symbol_last_calc_txt ); static void symbol_note_calc_name( Symbol *sym ) { Symbol *scope = symbol_get_scope( sym ); VipsBuf *buf = &symbol_last_calc_buf; vips_buf_rewind( buf ); vips_buf_appends( buf, NN( IOBJECT( scope )->name ) ); vips_buf_appends( buf, "." ); symbol_qualified_name_relative( scope, sym, buf ); } const char * symbol_get_last_calc( void ) { return( vips_buf_all( &symbol_last_calc_buf ) ); } /* We can get called recursively .. eg. we do an im_tiff2vips(), that * pops a progress box, that triggers idle, that tries to recalc a * leaf again. */ static gboolean symbol_running = FALSE; /* Recalc a symbol ... with error checks. */ static void * symbol_recalculate_leaf_sub( Symbol *sym ) { #ifdef DEBUG_RECALC printf( "symbol_recalculate_leaf_sub: %s\n", symbol_name_scope( sym ) ); /* We can symbol_recalculate_leaf_sub() syms which are not dirty. */ g_assert( !sym->dirty || symbol_is_leafable( sym ) ); g_assert( symbol_ndirty( sym ) == 0 ); #endif /*DEBUG_RECALC*/ error_clear(); if( sym->expr->err ) { expr_error_get( sym->expr ); #ifdef DEBUG_RECALC printf( "\t(error: previous error)\n" ); #endif /*DEBUG_RECALC*/ return( sym ); } if( !sym->dirty ) return( NULL ); if( !is_value( sym ) ) { symbol_dirty_clear( sym ); return( NULL ); } if( symbol_running ) return( NULL ); reduce_context->heap->filled = FALSE; symbol_running = TRUE; progress_begin(); symbol_note_calc_name( sym ); if( !symbol_recalculate_sub( sym ) || reduce_context->heap->filled ) { expr_error_set( sym->expr ); symbol_running = FALSE; progress_end(); #ifdef DEBUG_RECALC printf( "\t(error: %s %s)\n", sym->expr->error_top, sym->expr->error_sub ); #endif /*DEBUG_RECALC*/ return( sym ); } symbol_running = FALSE; progress_end(); /* Have we discovered any dirty children? If not, we've cleaned this * sym. */ if( !sym->ndirtychildren ) { symbol_dirty_clear( sym ); if( sym->expr ) { expr_new_value( sym->expr ); #ifdef DEBUG_RECALC printf( "\tsuccess: " ); graph_pointer( &sym->expr->root ); #endif /*DEBUG_RECALC*/ } } #ifdef DEBUG_RECALC else { printf( "\t(found dirty children)\n" ); } #endif /*DEBUG_RECALC*/ return( NULL ); } /* Recalculate a symbol. FALSE if no symbols can be recalced. */ static gboolean symbol_recalculate_leaf( void ) { gboolean recalculated; Symbol *sym; recalculated = FALSE; #ifdef DEBUG printf( "symbol_recalculate_leaves: Leaf set: " ); slist_map( symbol_leaf_set, (SListMapFn) dump_tiny, NULL ); printf( "\n" ); #endif /*DEBUG*/ /* Grab stuff off the leaf set. */ if( (sym = symbol_leaf_next()) ) { /* Should be dirty with no dirty children. Unless it's a * function, in which case dirty kids are OK. */ g_assert( sym->dirty ); g_assert( !sym->expr->err ); g_assert( is_top( sym ) ); g_assert( symbol_ndirty( sym ) == 0 || is_value( sym ) ); /* Found a symbol! */ (void) symbol_recalculate_leaf_sub( sym ); /* Note a pending GC. */ (void) heap_gc_request( reduce_context->heap ); /* We have recalculated a symbol. */ recalculated = TRUE; } return( recalculated ); } /* Our idle recomp callback. */ static gint symbol_idle_id = 0; static gboolean symbol_recalculate_idle_cb( void ) { static GTimer *timer = NULL; gboolean run_again; #ifdef DEBUG_RECALC printf( "symbol_recalculate_idle_cb:\n" ); #endif /*DEBUG_RECALC*/ if( symbol_running ) /* We've been run from a nested main loop, perhaps from the * progress bar. Just run again and perhaps next time we'll be * back in the top-level main loop. */ return( TRUE ); if( !timer ) timer = g_timer_new(); g_timer_reset( timer ); run_again = TRUE; if( !mainw_auto_recalc ) /* Auto-calc has been turned off during a recomp. */ run_again = FALSE; else while( g_timer_elapsed( timer, NULL ) < 0.1 ) if( !symbol_recalculate_leaf() ) { run_again = FALSE; break; } if( !run_again ) { #ifdef DEBUG_RECALC printf( "symbol_recalculate_idle_cb: bg recalc done\n" ); #endif /*DEBUG_RECALC*/ symbol_idle_id = 0; progress_end(); } return( run_again ); } /* Recalculate ... either nudge the idle recomp, or in batch mode, do a recomp * right now. */ void symbol_recalculate_all_force( gboolean now ) { #ifdef DEBUG icontainer_map( ICONTAINER( symbol_root->expr->compile ), (icontainer_map_fn) symbol_sanity, NULL, NULL ); #endif /*DEBUG*/ /* In case we're called directly. */ (void) view_scan_all(); if( symbol_running ) /* Do nothing. */ ; else if( main_option_batch || now ) { progress_begin(); while( symbol_recalculate_leaf() ) ; progress_end(); } else if( !symbol_idle_id ) { #ifdef DEBUG_RECALC printf( "symbol_recalculate_all_force: " "starting bg recalc ...\n" ); #endif /*DEBUG_RECALC*/ progress_begin(); symbol_idle_id = g_idle_add( (GSourceFunc) symbol_recalculate_idle_cb, NULL ); } } /* Recalculate the symbol table. */ void symbol_recalculate_all( void ) { /* Do a scan, even if we don't recomp. We need to pick up edits before * views get refreshed. */ (void) view_scan_all(); if( mainw_auto_recalc ) symbol_recalculate_all_force( FALSE ); } /* Recalc a symbol ... with error checks. */ gboolean symbol_recalculate_check( Symbol *sym ) { gboolean result; result = symbol_recalculate_leaf_sub( sym ) == NULL; return( result ); } nip2-8.7.0/src/conversion.h0000644000175000017500000001002413224651032012437 00000000000000/* Manage display conversion parameters. */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_CONVERSION (conversion_get_type()) #define CONVERSION( obj ) \ (G_TYPE_CHECK_INSTANCE_CAST( (obj), TYPE_CONVERSION, Conversion )) #define CONVERSION_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_CAST( (klass), TYPE_CONVERSION, ConversionClass)) #define IS_CONVERSION( obj ) \ (G_TYPE_CHECK_INSTANCE_TYPE( (obj), TYPE_CONVERSION )) #define IS_CONVERSION_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_TYPE( (klass), TYPE_CONVERSION )) #define CONVERSION_GET_CLASS( obj ) \ (G_TYPE_INSTANCE_GET_CLASS( (obj), TYPE_CONVERSION, ConversionClass )) struct _Conversion { Model parent_class; /* Image. */ Imageinfo *ii; /* Underlying image */ guint changed_sid; /* Watch ii with these two */ guint area_changed_sid; REGION *reg; /* Region for input from underlying image */ gboolean synchronous; /* TRUE to disable BG stuff */ int priority; /* render priority */ Imageinfo *visual_ii; /* Visualisation image ... eg. histplot */ Imageinfo *display_ii; /* Sized and cached */ int display_mag; /* What mag the display_ii is built for */ IMAGE *mask; /* Read display mask from here */ Imageinfo *repaint_ii; /* Colour converted for screen */ REGION *ireg; /* Region for input from repaint image */ REGION *mreg; /* Region for input from repaint mask */ int tile_size; /* Set smaller for thumbnails */ /* Basic geometry. */ Rect underlay; /* Size of underlying image (at 0,0) */ Rect image; /* Size of visualisation image (at 0,0) */ Rect canvas; /* Size of image we display (always at 0,0) */ Rect visible; /* hint ... visible region of display image */ int mag; /* -ve for shrink, +ve for expand */ /* Visualisation controls. If enabled is set, we built the pipeline * using these params. */ gboolean enabled; gboolean changed; /* Trigger a rebuild with these */ double scale; /* Contrast/brightness */ double offset; gboolean falsecolour; /* False colour display on */ gboolean type; /* Interpret type field */ }; typedef struct _ConversionClass { ModelClass parent_class; /* My methods. area_changed we forward the "area" changed signal off the ii we are holding ... in repaint coordinates */ void (*area_changed)( Conversion *, Rect * ); /* The imageinfo has been swapped for a new one. */ void (*imageinfo_changed)( Conversion * ); } ConversionClass; GType conversion_get_type( void ); Conversion *conversion_new( Imageinfo *ii ); void conversion_set_image( Conversion *conv, Imageinfo *ii ); gboolean conversion_refresh_text( Conversion *conv ); double conversion_dmag( int mag ); int conversion_double( int mag ); int conversion_halve( int mag ); void conversion_disp_to_im( Conversion *conv, int dx, int dy, int *ix, int *iy ); void conversion_im_to_disp( Conversion *conv, int ix, int iy, int *dx, int *dy ); void conversion_disp_to_im_rect( Conversion *conv, Rect *dr, Rect *ir ); void conversion_im_to_disp_rect( Conversion *conv, Rect *ir, Rect *dr ); void conversion_set_mag( Conversion *conv, int mag ); void conversion_set_synchronous( Conversion *conv, gboolean synchronous ); void conversion_set_params( Conversion *conv, gboolean enabled, double scale, double offset, gboolean falsecolour, gboolean type ); nip2-8.7.0/src/Makefile.am0000644000175000017500000001223213273071606012147 00000000000000SUBDIRS = BITMAPS # need this to keep autoconf quiet, but we don't actually use it ... see the # bison rule below YACC = bison # windows resource files ... see .rc.o rule later SUFFIXES = .rc # only build the cli wrapper on win32 if OS_WIN32 bin_PROGRAMS = nip2 nip2-cli nip2_cli_SOURCES = nip2-cli.c nip2_CFLAGS="-mwindows" CLI_DIST = else bin_PROGRAMS = nip2 CLI_DIST = nip2-cli.c endif nip2_SOURCES = \ vipsobject.c \ vipsobject.h \ plotmodel.c \ plotmodel.h \ progress.c \ progress.h \ panechild.c \ panechild.h \ plotpresent.c \ plotpresent.h \ plotstatus.c \ plotstatus.h \ floatwindow.c \ floatwindow.h \ vobject.c \ vobject.h \ action.c \ action.h \ boxes.c \ boxes.h \ popupbutton.c \ popupbutton.h \ imageheader.c \ imageheader.h \ preview.c \ preview.h \ builtin.c \ builtin.h \ icontainer.c \ icontainer.h \ iobject.c \ iobject.h \ class.c \ class.h \ classmodel.c \ classmodel.h \ colour.c \ colour.h \ colourdisplay.c \ colourdisplay.h \ colourview.c \ colourview.h \ column.c \ column.h \ columnview.c \ columnview.h \ compile.c \ compile.h \ conversion.c \ conversion.h \ conversionview.c \ conversionview.h \ doubleclick.c \ doubleclick.h \ dump.c \ dump.h \ expr.c \ expr.h \ filemodel.c \ filemodel.h \ pane.c \ pane.h \ pathname.c \ pathname.h \ fontname.c \ fontname.h \ group.c \ group.h \ pathnameview.c \ pathnameview.h \ fontnameview.c \ fontnameview.h \ filesel.c \ filesel.h \ graphwindow.c \ graphwindow.h \ graphicview.c \ graphicview.h \ gtkutil.c \ gtkutil.h \ heap.c \ heap.h \ heapmodel.c \ heapmodel.h \ helpindex.h \ nipmarshal.h \ nipmarshal.c \ iarrow.c \ iarrow.h \ value.c \ value.h \ valueview.c \ valueview.h \ idialog.c \ idialog.h \ iimage.c \ iimage.h \ iimageview.c \ iimageview.h \ imagedisplay.c \ imagedisplay.h \ log.c \ log.h \ error.c \ error.h \ managed.c \ managed.h \ managedfile.c \ managedfile.h \ managedgvalue.c \ managedgvalue.h \ managedgobject.c \ managedgobject.h \ managedstring.c \ managedstring.h \ imageinfo.c \ imageinfo.h \ imagemodel.c \ imagemodel.h \ imagepresent.c \ imagepresent.h \ imageview.c \ imageview.h \ ip.h \ iregion.c \ iregion.h \ iregiongroup.c \ iregiongroup.h \ iregiongroupview.c \ iregiongroupview.h \ iregionview.c \ iregionview.h \ itext.c \ itext.h \ itextview.c \ itextview.h \ iwindow.c \ iwindow.h \ parse.y \ parser.h \ prefs.c \ prefs.h \ prefworkspaceview.c \ prefworkspaceview.h \ prefcolumnview.c \ prefcolumnview.h \ lex.l \ link.c \ link.h \ main.c \ main.h \ mainw.c \ mainw.h \ matrix.c \ matrix.h \ matrixview.c \ matrixview.h \ plot.c \ plot.h \ plotview.c \ plotview.h \ plotwindow.c \ plotwindow.h \ model.c \ model.h \ option.c \ option.h \ optionview.c \ optionview.h \ formula.c \ formula.h \ paintboxview.c \ paintboxview.h \ path.c \ path.h \ predicate.c \ predicate.h \ program.c \ program.h \ string.c \ istring.h \ number.c \ number.h \ expression.c \ expression.h \ expressionview.c \ expressionview.h \ stringview.c \ stringview.h \ editview.c \ editview.h \ numberview.c \ numberview.h \ real.c \ real.h \ vector.c \ vector.h \ reduce.c \ reduce.h \ regionview.c \ regionview.h \ rhs.c \ rhs.h \ rhsview.c \ rhsview.h \ row.c \ row.h \ rowview.c \ rowview.h \ secret.c \ secret.h \ slider.c \ slider.h \ sliderview.c \ sliderview.h \ clock.c \ clock.h \ spin.c \ spin.h \ statusview.c \ statusview.h \ subcolumn.c \ subcolumn.h \ subcolumnview.c \ subcolumnview.h \ symbol.c \ symbol.h \ toggle.c \ toggle.h \ toggleview.c \ toggleview.h \ tool.c \ tool.h \ toolkit.c \ toolkit.h \ toolkitgroup.c \ toolkitgroup.h \ toolkitgroupview.c \ toolkitgroupview.h \ toolkitview.c \ toolkitview.h \ defbrowser.c \ defbrowser.h \ toolkitbrowser.c \ toolkitbrowser.h \ toolview.c \ toolview.h \ trace.c \ trace.h \ tree.c \ tree.h \ tslider.c \ tslider.h \ util.c \ util.h \ view.c \ view.h \ call.c \ call.h \ cache.c \ cache.h \ watch.c \ watch.h \ workspace.c \ workspace.h \ workspacegroup.c \ workspacegroup.h \ workspacegroupview.c \ workspacegroupview.h \ workspacedefs.c \ workspacedefs.h \ workspaceroot.c \ workspaceroot.h \ workspaceview.c \ workspaceview.h if OS_WIN32 nip2_SOURCES += \ nip2-icon.rc endif helpindex.h: ./makehelpindex.pl $(prefix) > helpindex.h nipmarshal.h: glib-genmarshal --prefix=nip --header nipmarshal.list > nipmarshal.h nipmarshal.c: echo "#include \"nipmarshal.h\"" > nipmarshal.c glib-genmarshal --prefix=nip --body nipmarshal.list >> nipmarshal.c .rc.o: cp ${top_srcdir}/share/nip2/data/nip2-icon.ico . ${WINDRES} $< -o $@ # we have to replace the standard .y.c rule: we are a bison-only GLR parser, # so we can't use autoconf's preferred -y yacc-compatibility stuff .y.c: $(BISON) --defines=$*.h -o $*.c $< nip2-model.o model.o: model.c parse.c AM_CPPFLAGS = @IP_CFLAGS@ LDADD = @IP_CFLAGS@ @IP_LIBS@ AM_LDFLAGS = @LDFLAGS@ dist-hook: ${RM} ${distdir}/parse.c ${distdir}/lex.c CLEANFILES = parse.c parse.h lex.c tags EXTRA_DIST = makehelpindex.pl helpindex.h \ nipmarshal.h nipmarshal.c nipmarshal.list \ $(CLI_DIST) nip2-8.7.0/src/preview.c0000644000175000017500000001054413224651032011735 00000000000000/* thumbnail widget */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #include "ip.h" /* #define DEBUG */ /* Number of columns of pixmaps we display. */ #define NUM_COLUMNS (4) static ImagedisplayClass *parent_class = NULL; static void preview_destroy( GtkObject *object ) { Preview *preview; g_return_if_fail( object != NULL ); g_return_if_fail( IS_PREVIEW( object ) ); preview = PREVIEW( object ); UNREF( preview->conv ); IM_FREE( preview->filename ); GTK_OBJECT_CLASS( parent_class )->destroy( object ); } static void preview_class_init( PreviewClass *class ) { GtkObjectClass *object_class; object_class = (GtkObjectClass *) class; object_class->destroy = preview_destroy; parent_class = g_type_class_peek_parent( class ); } static void preview_init( Preview *preview ) { #ifdef DEBUG printf( "preview_init: %p\n", preview ); #endif /*DEBUG*/ preview->filename = NULL; preview->conv = conversion_new( NULL ); preview->conv->tile_size = 16; gtk_widget_set_size_request( GTK_WIDGET( preview ), 128, 128 ); imagedisplay_set_conversion( IMAGEDISPLAY( preview ), preview->conv ); imagedisplay_set_shrink_to_fit( IMAGEDISPLAY( preview ), TRUE ); g_object_ref( G_OBJECT( preview->conv ) ); } GtkType preview_get_type( void ) { static GtkType type = 0; if( !type) { static const GtkTypeInfo info = { "Preview", sizeof( Preview ), sizeof( PreviewClass ), (GtkClassInitFunc) preview_class_init, (GtkObjectInitFunc) preview_init, /* reserved_1 */ NULL, /* reserved_2 */ NULL, (GtkClassInitFunc) NULL, }; type = gtk_type_unique( TYPE_IMAGEDISPLAY, &info ); } return( type ); } Preview * preview_new( void ) { Preview *preview = (Preview *) gtk_type_new( TYPE_PREVIEW ); return( preview ); } static void preview_set_filename_idle( Preview *preview, char *filename ) { Imageinfo *ii; /* Make sure our enclosing preview wasn't been killed before this idle * starts. */ if( !preview->conv ) return; /* This is the call that can take ages and kill everything. */ if( !(ii = imageinfo_new_input( main_imageinfogroup, GTK_WIDGET( preview ), NULL, filename )) ) return; /* So test for alive-ness again. */ if( preview->conv ) { char txt[MAX_LINELENGTH]; VipsBuf buf = VIPS_BUF_STATIC( txt ); conversion_set_image( preview->conv, ii ); IM_SETSTR( preview->filename, filename ); /* How strange, we need this to get the * background to clear fully. */ gtk_widget_queue_draw( GTK_WIDGET( preview ) ); get_image_info( &buf, IOBJECT( preview->conv->ii )->name ); set_tooltip( GTK_WIDGET( preview ), "%s", vips_buf_all( &buf ) ); } MANAGED_UNREF( ii ); } typedef struct _UpdateProxy { Preview *preview; char *filename; } UpdateProxy; static gboolean preview_set_filename_idle_cb( UpdateProxy *proxy ) { preview_set_filename_idle( proxy->preview, proxy->filename ); UNREF( proxy->preview ); g_free( proxy ); /* Don't run again. */ return( FALSE ); } /* We can't load in-line, it can take ages and trigger progress callbacks, * which in turn, could kill our enclosing widget. * * Instead, we do the load in a idle callback and update the preview at the * end, if it's still valid. */ void preview_set_filename( Preview *preview, char *filename ) { UpdateProxy *proxy = g_new( UpdateProxy, 1 ); /* We are going to put the preview into the idle queue. It must remain * valid until the idle handler is handled, so we ref. */ g_object_ref( preview ); proxy->preview = preview; proxy->filename = g_strdup( filename ); g_idle_add( (GSourceFunc) preview_set_filename_idle_cb, proxy ); } nip2-8.7.0/src/managedstring.h0000644000175000017500000000356713224651032013113 00000000000000/* a managed STRING* ... for lazy string read */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These strings are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_MANAGEDSTRING (managedstring_get_type()) #define MANAGEDSTRING( obj ) \ (G_TYPE_CHECK_INSTANCE_CAST( (obj), TYPE_MANAGEDSTRING, Managedstring )) #define MANAGEDSTRING_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_CAST( (klass), \ TYPE_MANAGEDSTRING, ManagedstringClass)) #define IS_MANAGEDSTRING( obj ) \ (G_TYPE_CHECK_INSTANCE_TYPE( (obj), TYPE_MANAGEDSTRING )) #define IS_MANAGEDSTRING_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_TYPE( (klass), TYPE_MANAGEDSTRING )) #define MANAGEDSTRING_GET_CLASS( obj ) \ (G_TYPE_INSTANCE_GET_CLASS( (obj), \ TYPE_MANAGEDSTRING, ManagedstringClass )) struct _Managedstring { Managed parent_object; const char *string; Element e; /* Points to compiled string */ }; typedef struct _ManagedstringClass { ManagedClass parent_class; } ManagedstringClass; GType managedstring_get_type( void ); Managedstring *managedstring_find( Heap *heap, const char *string ); gboolean managedstring_get( Managedstring *managedstring, PElement *out ); nip2-8.7.0/src/parser.h0000644000175000017500000000530713224651032011556 00000000000000/* Global variables from parse.y. */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* Our input stream can be attached to either a string or a FILE. * Keep track of the state of play here. */ typedef struct { iOpenFile *of; /* Non-NULL if we read from a file */ char *str; /* Non-NULL if we read from a string */ char *strpos; /* Position in string */ char buf[MAX_STRSIZE]; /* Accumulate text of each definition here */ int bwp; /* Write point in the above */ int bsp[MAX_SSTACK]; /* Start point stack */ int bspsp; /* Stack pointer */ int lineno; /* Current line number */ int charno; /* Character in line */ int pcharno; /* Characters in previous line */ int charpos; /* Characters read by lex so far */ int oldchar; /* unget buffer, -1 for no unget */ } InputState; extern InputState input_state; /* Function declarations for parse.y. */ void nip2yyerror( const char *sub, ... ) __attribute__((format(printf, 1, 2))); void yyerror( const char *msg ); #ifdef YYLENG_IS_YY_SIZE_T /* Assume yy_size_t is size_t. */ extern size_t yyleng; #else extern int yyleng; /* lex stuff */ #endif /* Lex gathers tokens here for workspace.c */ extern VipsBuf lex_text; /* Attach input for lex. */ void attach_input_file( iOpenFile *of ); void attach_input_string( const char *str ); int ip_input( void ); void ip_unput( int ch ); void ip_unget( void ); gboolean is_EOF( void ); /* Parse stuff. */ /* Order and number important ... see table in parse_rhs() */ typedef enum { PARSE_RHS = 0, /* eg. "a + b" */ PARSE_PARAMS, /* eg. "a b = a + b" */ PARSE_SUPER /* eg. "fred c d" */ } ParseRhsSyntax; extern jmp_buf parse_error_point; gboolean parse_toplevel( Toolkit *kit, int pos ); gboolean parse_onedef( Toolkit *kit, int pos ); gboolean parse_rhs( Expr *expr, ParseRhsSyntax syntax ); void free_lex( int yychar ); char *parse_test_define( void ); Symbol *parse_set_symbol( void ); nip2-8.7.0/src/expressionview.h0000644000175000017500000000317613224651032013356 00000000000000/* a textview button in a workspace */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_EXPRESSIONVIEW (expressionview_get_type()) #define EXPRESSIONVIEW( obj ) (GTK_CHECK_CAST( (obj), \ TYPE_EXPRESSIONVIEW, Expressionview )) #define EXPRESSIONVIEW_CLASS( klass ) \ (GTK_CHECK_CLASS_CAST( (klass), \ TYPE_EXPRESSIONVIEW, ExpressionviewClass )) #define IS_EXPRESSIONVIEW( obj ) (GTK_CHECK_TYPE( (obj), TYPE_EXPRESSIONVIEW )) #define IS_EXPRESSIONVIEW_CLASS( klass ) \ (GTK_CHECK_CLASS_TYPE( (klass), TYPE_EXPRESSIONVIEW )) typedef struct _Expressionview { Graphicview parent_object; Formula *formula; } Expressionview; typedef struct _ExpressionviewClass { GraphicviewClass parent_class; /* My methods. */ } ExpressionviewClass; GtkType expressionview_get_type( void ); View *expressionview_new( void ); nip2-8.7.0/src/builtin.h0000644000175000017500000000310713224651032011724 00000000000000/* Execute builtin functions. */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* A type spotter ... a type name (used in error messages), plus a predicate. */ typedef struct { const char *name; gboolean (*pred)( Reduce *, PElement * ); } BuiltinTypeSpot; /* A builtin function. */ typedef void (*builtin_fn)( Reduce *, const char *, HeapNode **, PElement * ); /* A function name and a pointer to an implementation. */ struct _BuiltinInfo { const char *name; const char *desc; gboolean override; int nargs; BuiltinTypeSpot **args; builtin_fn fn; }; void builtin_init( void ); void builtin_usage( VipsBuf *buf, BuiltinInfo *builtin ); void builtin_run( Reduce *rc, Compile *compile, int op, const char *name, HeapNode **arg, PElement *out, BuiltinInfo *builtin ); nip2-8.7.0/src/matrix.c0000644000175000017500000003735513224651032011571 00000000000000/* an input matrix */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #include "ip.h" static ClassmodelClass *parent_class = NULL; static void matrix_finalize( GObject *gobject ) { Matrix *matrix; g_return_if_fail( gobject != NULL ); g_return_if_fail( IS_MATRIX( gobject ) ); matrix = MATRIX( gobject ); #ifdef DEBUG printf( "matrix_finalize\n" ); #endif /*DEBUG*/ /* My instance finalize stuff. */ IM_FREE( matrix->value.coeff ); G_OBJECT_CLASS( parent_class )->finalize( gobject ); } /* Rearrange our model for a new width/height. */ gboolean matrix_value_resize( MatrixValue *value, int width, int height ) { double *coeff; int x, y, i; if( width == value->width && height == value->height ) return( TRUE ); if( !(coeff = IARRAY( NULL, width * height, double )) ) return( FALSE ); /* Set what we can with values from the old matrix. */ for( i = 0, y = 0; y < height; y++ ) for( x = 0; x < width; x++, i++ ) if( y < value->height && x < value->width ) coeff[i] = value->coeff[x + y * value->width]; else coeff[i] = 0.0; /* Install new values. */ IM_FREE( value->coeff ); value->coeff = coeff; value->width = width; value->height = height; return( TRUE ); } /* Widgets for matrix edit. */ typedef struct _MatrixEdit { iDialog *idlg; Matrix *matrix; GtkWidget *width; GtkWidget *height; GtkWidget *display; } MatrixEdit; /* Done button hit. */ /*ARGSUSED*/ static void matrix_done_cb( iWindow *iwnd, void *client, iWindowNotifyFn nfn, void *sys ) { MatrixEdit *eds = (MatrixEdit *) client; int width, height; /* Parse values. We have to scan before we resize in case we are * sizing smaller and we have unscanned changes at the edges. */ view_scan_all(); eds->matrix->display = (MatrixDisplayType) gtk_combo_box_get_active( GTK_COMBO_BOX( eds->display ) ); if( !get_geditable_pint( eds->width, &width ) || !get_geditable_pint( eds->height, &height ) || !matrix_value_resize( &eds->matrix->value, width, height ) ) { nfn( sys, IWINDOW_ERROR ); return; } /* Rebuild object. */ classmodel_update( CLASSMODEL( eds->matrix ) ); symbol_recalculate_all(); nfn( sys, IWINDOW_YES ); } /* Build the insides of matrix edit. */ static void matrix_buildedit( iDialog *idlg, GtkWidget *work, MatrixEdit *eds ) { Matrix *matrix = eds->matrix; GtkSizeGroup *group; /* Index with MatrixType. */ static const char *display_names[] = { N_( "Text" ), N_( "Sliders" ), N_( "Toggle buttons" ), N_( "Text, plus scale and offset" ) }; group = gtk_size_group_new( GTK_SIZE_GROUP_HORIZONTAL ); eds->width = build_glabeltext4( work, group, "Width" ); idialog_init_entry( idlg, eds->width, "Width of matrix", "%d", matrix->value.width ); eds->height = build_glabeltext4( work, group, "Height" ); idialog_init_entry( idlg, eds->height, "Height of matrix", "%d", matrix->value.height ); eds->display = build_goption( work, group, _( "Display as" ), display_names, IM_NUMBER( display_names ), NULL, NULL ); gtk_combo_box_set_active( GTK_COMBO_BOX( eds->display ), matrix->display ); UNREF( group ); gtk_widget_show_all( work ); } static View * matrix_view_new( Model *model, View *parent ) { return( matrixview_new() ); } /* Pop up a matrix edit box. */ static void matrix_edit( GtkWidget *parent, Model *model ) { Matrix *matrix = MATRIX( model ); MatrixEdit *eds = INEW( NULL, MatrixEdit ); GtkWidget *idlg; eds->matrix = matrix; idlg = idialog_new(); iwindow_set_title( IWINDOW( idlg ), _( "Edit %s %s" ), IOBJECT_GET_CLASS_NAME( model ), IOBJECT( HEAPMODEL( model )->row )->name ); idialog_set_build( IDIALOG( idlg ), (iWindowBuildFn) matrix_buildedit, eds, NULL, NULL ); idialog_set_callbacks( IDIALOG( idlg ), iwindow_true_cb, NULL, idialog_free_client, eds ); idialog_add_ok( IDIALOG( idlg ), matrix_done_cb, _( "Set %s" ), IOBJECT_GET_CLASS_NAME( model ) ); iwindow_set_parent( IWINDOW( idlg ), parent ); idialog_set_iobject( IDIALOG( idlg ), IOBJECT( model ) ); iwindow_build( IWINDOW( idlg ) ); gtk_widget_show( GTK_WIDGET( idlg ) ); } static gboolean matrix_graphic_save( Classmodel *classmodel, GtkWidget *parent, const char *filename ) { Matrix *matrix = MATRIX( classmodel ); DOUBLEMASK *dmask; char buf[FILENAME_MAX]; if( !(dmask = matrix_model_to_dmask( matrix )) ) return( FALSE ); /* We don't want $VAR etc. in the filename we pass down to the file * ops. */ im_strncpy( buf, filename, FILENAME_MAX ); path_expand( buf ); if( im_write_dmask_name( dmask, buf ) ) { error_vips_all(); IM_FREEF( im_free_dmask, dmask ); return( FALSE ); } IM_FREEF( im_free_dmask, dmask ); mainw_recent_add( &mainw_recent_matrix, filename ); return( TRUE ); } static gboolean matrix_graphic_replace( Classmodel *classmodel, GtkWidget *parent, const char *filename ) { Matrix *matrix = MATRIX( classmodel ); Row *row = HEAPMODEL( matrix )->row; iText *itext = ITEXT( HEAPMODEL( matrix )->rhs->itext ); DOUBLEMASK *dmask; char txt[MAX_STRSIZE]; VipsBuf buf = VIPS_BUF_STATIC( txt ); /* We don't want $VAR etc. in the filename we pass down to the file * ops. */ im_strncpy( txt, filename, FILENAME_MAX ); path_expand( txt ); if( !(dmask = im_read_dmask( txt )) ) { error_vips_all(); return( FALSE ); } matrix_dmask_to_ip( dmask, &buf ); im_free_dmask( dmask ); if( itext_set_formula( itext, vips_buf_all( &buf ) ) ) { itext_set_edited( itext, TRUE ); (void) expr_dirty( row->expr, link_serial_new() ); } mainw_recent_add( &mainw_recent_matrix, filename ); return( TRUE ); } /* Members of matrix we automate. */ static ClassmodelMember matrix_members[] = { { CLASSMODEL_MEMBER_MATRIX, NULL, 0, MEMBER_VALUE, NULL, N_( "Value" ), G_STRUCT_OFFSET( Matrix, value ) }, { CLASSMODEL_MEMBER_DOUBLE, NULL, 0, MEMBER_SCALE, "scale", N_( "Scale" ), G_STRUCT_OFFSET( Matrix, scale ) }, { CLASSMODEL_MEMBER_DOUBLE, NULL, 0, MEMBER_OFFSET, "offset", N_( "Offset" ), G_STRUCT_OFFSET( Matrix, offset ) }, { CLASSMODEL_MEMBER_STRING, NULL, 0, MEMBER_FILENAME, "filename", N_( "Filename" ), G_STRUCT_OFFSET( Classmodel, filename ) }, { CLASSMODEL_MEMBER_ENUM, NULL, MATRIX_DISPLAY_LAST - 1, MEMBER_DISPLAY, "display", N_( "Display" ), G_STRUCT_OFFSET( Matrix, display ) } }; static void matrix_class_init( MatrixClass *class ) { GObjectClass *gobject_class = (GObjectClass *) class; iObjectClass *iobject_class = (iObjectClass *) class; ModelClass *model_class = (ModelClass *) class; ClassmodelClass *classmodel_class = (ClassmodelClass *) class; parent_class = g_type_class_peek_parent( class ); /* Create signals. */ /* Init methods. */ gobject_class->finalize = matrix_finalize; iobject_class->user_name = _( "Matrix" ); model_class->view_new = matrix_view_new; model_class->edit = matrix_edit; classmodel_class->graphic_save = matrix_graphic_save; classmodel_class->graphic_replace = matrix_graphic_replace; classmodel_class->filetype = filesel_type_matrix; classmodel_class->filetype_pref = "MATRIX_FILE_TYPE"; /* Static init. */ model_register_loadable( MODEL_CLASS( class ) ); classmodel_class->members = matrix_members; classmodel_class->n_members = IM_NUMBER( matrix_members ); } static void matrix_init( Matrix *matrix ) { #ifdef DEBUG printf( "matrix_init\n" ); #endif /*DEBUG*/ matrix->value.coeff = NULL; matrix->value.width = 0; matrix->value.height = 0; matrix->display = MATRIX_DISPLAY_TEXT; matrix->scale = 1.0; matrix->offset = 0.0; matrix->selected = FALSE; iobject_set( IOBJECT( matrix ), CLASS_MATRIX, NULL ); } GtkType matrix_get_type( void ) { static GType type = 0; if( !type ) { static const GTypeInfo info = { sizeof( MatrixClass ), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) matrix_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof( Matrix ), 32, /* n_preallocs */ (GInstanceInitFunc) matrix_init, }; type = g_type_register_static( TYPE_CLASSMODEL, "Matrix", &info, 0 ); } return( type ); } void matrix_select( Matrix *matrix, int left, int top, int width, int height ) { if( !matrix->selected || matrix->range.left != left || matrix->range.top != top || matrix->range.width != width || matrix->range.height != height ) { Row *row = HEAPMODEL( matrix )->row; #ifdef DEBUG printf( "matrix_select: " "left=%d, top = %d, width = %d, height = %d\n", left, top, width, height ); #endif /*DEBUG*/ matrix->selected = TRUE; matrix->range.left = left; matrix->range.top = top; matrix->range.width = width; matrix->range.height = height; iobject_changed( IOBJECT( matrix ) ); /* Also make sure this row is selected. */ row_select_ensure( row ); /* The range of cells selected has changed, so the workspace * must update the status line too. row_select_ensure() only * spots row on/off selects. Yuk! */ iobject_changed( IOBJECT( row->ws ) ); } } void matrix_deselect( Matrix *matrix ) { if( matrix->selected ) { Row *row = HEAPMODEL( matrix )->row; #ifdef DEBUG printf( "matrix_deselect\n" ); #endif /*DEBUG*/ matrix->selected = FALSE; iobject_changed( IOBJECT( matrix ) ); /* Also make sure this row is not selected. */ row_deselect( row ); } } /* Guess a display type from a filename. */ static int matrix_guess_display( const char *fname ) { /* Choose display type based on filename suffix ... rec * displays as 1, mor displays as 2, .con displays as 3, all others * display as 0. Keep in sync with MatrixDisplayType. */ static const FileselFileType *types[] = { &filesel_xfile_type, // matrix &filesel_rfile_type, // recombination &filesel_mfile_type, // morphology &filesel_cfile_type // convolution }; int i; if( !fname ) return( 0 ); for( i = 0; i < IM_NUMBER( types ); i++ ) if( is_file_type( types[i], fname ) ) return( i ); return( 0 ); } /* Make an ip definition out of a DOUBLEMASK. */ void matrix_dmask_to_ip( DOUBLEMASK *dmask, VipsBuf *buf ) { int x, y; /* Build matrix expression. */ vips_buf_appends( buf, CLASS_MATRIX " " ); vips_buf_appends( buf, "[" ); for( y = 0; y < dmask->ysize; y++ ) { vips_buf_appends( buf, "[" ); for( x = 0; x < dmask->xsize; x++ ) { vips_buf_appendf( buf, "%g", dmask->coeff[x + y*dmask->xsize] ); if( x != dmask->xsize - 1 ) vips_buf_appends( buf, "," ); } vips_buf_appends( buf, "]" ); if( y != dmask->ysize - 1 ) vips_buf_appends( buf, "," ); } vips_buf_appends( buf, "]" ); vips_buf_appendf( buf, "(%g) (%g) \"%s\" %d", dmask->scale, dmask->offset, dmask->filename, matrix_guess_display( dmask->filename ) ); } /* Make a heap object out of a DOUBLEMASK. */ gboolean matrix_dmask_to_heap( Heap *heap, DOUBLEMASK *dmask, PElement *out ) { Symbol *sym = compile_lookup( symbol_root->expr->compile, CLASS_MATRIX ); PElement rhs; if( !sym || !sym->expr || !sym->expr->compile || !heap_copy( heap, sym->expr->compile, out ) ) return( FALSE ); if( !heap_appl_add( heap, out, &rhs ) || !heap_matrix_new( heap, dmask->xsize, dmask->ysize, dmask->coeff, &rhs ) || !heap_appl_add( heap, out, &rhs ) || !heap_real_new( heap, dmask->scale, &rhs ) || !heap_appl_add( heap, out, &rhs ) || !heap_real_new( heap, dmask->offset, &rhs ) || !heap_appl_add( heap, out, &rhs ) || !heap_managedstring_new( heap, dmask->filename, &rhs ) || !heap_appl_add( heap, out, &rhs ) || !heap_real_new( heap, matrix_guess_display( dmask->filename ), &rhs ) ) return( FALSE ); return( TRUE ); } /* Cast an IMASK to a DMASK. */ DOUBLEMASK * matrix_imask_to_dmask( INTMASK *imask ) { DOUBLEMASK *dmask; int i; if( !(dmask = im_create_dmask( imask->filename, imask->xsize, imask->ysize )) ) { error_vips_all(); return( NULL ); } dmask->scale = imask->scale; dmask->offset = imask->offset; for( i = 0; i < imask->xsize * imask->ysize; i++ ) dmask->coeff[i] = imask->coeff[i]; return( dmask ); } /* Cast a DMASK to an IMASK. */ INTMASK * matrix_dmask_to_imask( DOUBLEMASK *dmask ) { INTMASK *imask; int i; if( !(imask = im_create_imask( dmask->filename, dmask->xsize, dmask->ysize )) ) { error_vips_all(); return( NULL ); } imask->scale = dmask->scale; imask->offset = dmask->offset; for( i = 0; i < dmask->xsize * dmask->ysize; i++ ) imask->coeff[i] = dmask->coeff[i]; return( imask ); } /* Make a heap object out of an INTMASK. */ gboolean matrix_imask_to_heap( Heap *heap, INTMASK *imask, PElement *out ) { DOUBLEMASK *dmask; if( !(dmask = matrix_imask_to_dmask( imask )) ) return( FALSE ); if( !matrix_dmask_to_heap( heap, dmask, out ) ) { im_free_dmask( dmask ); return( FALSE ); } im_free_dmask( dmask ); return( TRUE ); } /* Make a DOUBLEMASK out of an ip value. */ DOUBLEMASK * matrix_ip_to_dmask( PElement *root ) { char buf[MAX_STRSIZE]; char name[FILENAME_MAX]; DOUBLEMASK *dmask; double scale, offset; char *filename; int width, height; if( !class_get_member_matrix_size( root, MEMBER_VALUE, &width, &height ) ) return( NULL ); if( class_get_member_string( root, MEMBER_FILENAME, buf, MAX_STRSIZE ) ) filename = buf; else { if( !temp_name( name, "mat" ) ) return( NULL ); filename = name; } if( !(dmask = im_create_dmask( filename, width, height )) ) { error_vips_all(); return( NULL ); } if( !class_get_member_matrix( root, MEMBER_VALUE, dmask->coeff, width * height, &width, &height ) ) { IM_FREEF( im_free_dmask, dmask ); return( FALSE ); } if( !class_get_member_real( root, MEMBER_SCALE, &scale ) ) scale = 1.0; if( !class_get_member_real( root, MEMBER_OFFSET, &offset ) ) offset = 0.0; dmask->scale = scale; dmask->offset = offset; return( dmask ); } /* Make an INTMASK out of an ip value. */ INTMASK * matrix_ip_to_imask( PElement *root ) { DOUBLEMASK *dmask; INTMASK *imask; if( !(dmask = matrix_ip_to_dmask( root )) ) return( NULL ); if( !(imask = matrix_dmask_to_imask( dmask )) ) { IM_FREEF( im_free_dmask, dmask ); return( NULL ); } return( imask ); } DOUBLEMASK * matrix_model_to_dmask( Matrix *matrix ) { DOUBLEMASK *dmask; int i; if( !(dmask = im_create_dmask( CLASSMODEL( matrix )->filename, matrix->value.width, matrix->value.height )) ) { error_vips_all(); return( NULL ); } dmask->scale = matrix->scale; dmask->offset = matrix->offset; for( i = 0; i < matrix->value.width * matrix->value.height; i++ ) dmask->coeff[i] = matrix->value.coeff[i]; return( dmask ); } gboolean matrix_dmask_to_model( Matrix *matrix, DOUBLEMASK *dmask ) { int i; if( !matrix_value_resize( &matrix->value, dmask->xsize, dmask->ysize ) ) return( FALSE ); matrix->scale = dmask->scale; matrix->offset = dmask->offset; for( i = 0; i < matrix->value.width * matrix->value.height; i++ ) matrix->value.coeff[i] = dmask->coeff[i]; matrix->display = (MatrixDisplayType) matrix_guess_display( dmask->filename ); IM_SETSTR( CLASSMODEL( matrix )->filename, dmask->filename ); return( TRUE ); } nip2-8.7.0/src/main.c0000644000175000017500000012152313330327245011204 00000000000000/* main() ... start everything up. See mainw.c for main window stuff. */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #include "ip.h" /* #define DEBUG */ /* Show all paint actions with flashing stuff. #define DEBUG_UPDATES */ /* Stop startup creation of externs for all VIPS functions etc. #define DEBUG_NOAUTO */ /* Stop on any gtk error/warning/whatever. Usually set by configure for dev * builds. #define DEBUG_FATAL */ /* But some themes can trigger warnings, argh, so sometimes we need to * undef it. VipsObject sets can trigger warnings. libgoffice will warn about * precision issues if run under valgrind. */ #undef DEBUG_FATAL /* Time startup. #define DEBUG_TIME */ /* On quit, make sure we free stuff we can free. #define DEBUG_LEAK */ /* Sometimes we need to be able to disable these at build time. #undef DEBUG_LEAK #undef DEBUG_FATAL */ /* General stuff. */ Workspaceroot *main_workspaceroot = NULL; /* All the workspaces */ Toolkitgroup *main_toolkitgroup = NULL; /* All the toolkits */ Symbol *main_symbol_root = NULL; /* Root of symtable */ Watchgroup *main_watchgroup = NULL; /* All of the watches */ Imageinfogroup *main_imageinfogroup = NULL; /* All of the images */ void *main_c_stack_base = NULL; /* Base of C stack */ gboolean main_starting = TRUE; /* In startup */ static const char *main_argv0 = NULL; /* argv[0] */ static iOpenFile *main_stdin = NULL; /* stdin as an iOpenFile */ static GtkIconFactory *main_icon_factory = NULL;/* Add stocks to this */ static char *main_option_script = NULL; static char *main_option_expression = NULL; gboolean main_option_batch = FALSE; static gboolean main_option_no_load_menus = FALSE; static gboolean main_option_no_load_args = FALSE; static gboolean main_option_stdin_ws = FALSE; static gboolean main_option_stdin_def = FALSE; static char *main_option_output = NULL; static char **main_option_set = NULL; static gboolean main_option_benchmark = FALSE; gboolean main_option_time_save = FALSE; gboolean main_option_profile = FALSE; gboolean main_option_i18n = FALSE; gboolean main_option_verbose = FALSE; static gboolean main_option_print_main = FALSE; static gboolean main_option_version = FALSE; static gboolean main_option_test = FALSE; static char *main_option_prefix = NULL; static GOptionEntry main_option[] = { { "expression", 'e', 0, G_OPTION_ARG_STRING, &main_option_expression, N_( "evaluate and print EXPRESSION" ), "EXPRESSION" }, { "script", 's', 0, G_OPTION_ARG_FILENAME, &main_option_script, N_( "load FILE as a set of definitions" ), "FILE" }, { "output", 'o', 0, G_OPTION_ARG_FILENAME, &main_option_output, N_( "write value of 'main' to FILE" ), "FILE" }, { "batch", 'b', 0, G_OPTION_ARG_NONE, &main_option_batch, N_( "run in batch mode" ), NULL }, { "set", '=', 0, G_OPTION_ARG_STRING_ARRAY, &main_option_set, N_( "set values" ), NULL }, { "verbose", 'V', 0, G_OPTION_ARG_NONE, &main_option_verbose, N_( "verbose error output" ), NULL }, { "no-load-menus", 'm', 0, G_OPTION_ARG_NONE, &main_option_no_load_menus, N_( "don't load menu definitions" ), NULL }, { "no-load-args", 'a', 0, G_OPTION_ARG_NONE, &main_option_no_load_args, N_( "don't try to load command-line arguments" ), NULL }, { "stdin-ws", 'w', 0, G_OPTION_ARG_NONE, &main_option_stdin_ws, N_( "load stdin as a workspace" ), NULL }, { "stdin-def", 'd', 0, G_OPTION_ARG_NONE, &main_option_stdin_def, N_( "load stdin as a set of definitions" ), NULL }, { "print-main", 'p', 0, G_OPTION_ARG_NONE, &main_option_print_main, N_( "print value of 'main' to stdout" ), NULL }, { "benchmark", 'c', 0, G_OPTION_ARG_NONE, &main_option_benchmark, N_( "start up and shut down" ), NULL }, { "time-save", 't', 0, G_OPTION_ARG_NONE, &main_option_time_save, N_( "time image save operations" ), NULL }, { "profile", 'r', 0, G_OPTION_ARG_NONE, &main_option_profile, N_( "profile workspace calculation" ), NULL }, { "prefix", 'x', 0, G_OPTION_ARG_FILENAME, &main_option_prefix, N_( "start as if installed to PREFIX" ), "PREFIX" }, { "i18n", 'i', 0, G_OPTION_ARG_NONE, &main_option_i18n, N_( "output strings for internationalisation" ), NULL }, { "version", 'v', 0, G_OPTION_ARG_NONE, &main_option_version, N_( "print version number" ), NULL }, { "test", 'T', 0, G_OPTION_ARG_NONE, &main_option_test, N_( "test for errors and quit" ), NULL }, { NULL } }; /* Accumulate startup errors here. */ static char main_start_error_txt[MAX_STRSIZE]; static VipsBuf main_start_error = VIPS_BUF_STATIC( main_start_error_txt ); static void main_log_add( const char *fmt, ... ) { va_list ap; va_start( ap, fmt ); vips_buf_vappendf( &main_start_error, fmt, ap ); va_end( ap ); } static const char * main_log_get( void ) { return( vips_buf_all( &main_start_error ) ); } static gboolean main_log_is_empty( void ) { return( vips_buf_is_empty( &main_start_error ) ); } /* NULL log handler. Used to suppress output on win32 without DEBUG_FATAL. */ #ifndef DEBUG_FATAL #ifdef OS_WIN32 static void main_log_null( const char *log_domain, GLogLevelFlags log_level, const char *message, void *user_data ) { } #endif /*OS_WIN32*/ #endif /*!DEBUG_FATAL*/ /* Print all errors and quit. Batch mode only. */ static void main_error_exit( const char *fmt, ... ) { va_list args; va_start( args, fmt ); (void) vfprintf( stderr, fmt, args ); va_end( args ); fprintf( stderr, "\n" ); if( strcmp( error_get_top(), "" ) != 0 ) { fprintf( stderr, "%s\n", error_get_top() ); if( strcmp( error_get_sub(), "" ) != 0 ) fprintf( stderr, "%s\n", error_get_sub() ); } if( main_option_verbose ) { char txt[MAX_STRSIZE]; VipsBuf buf = VIPS_BUF_STATIC( txt ); slist_map( expr_error_all, (SListMapFn) expr_error_print, &buf ); fprintf( stderr, "%s", vips_buf_all( &buf ) ); } exit( 1 ); } /* Output a single main. */ static void main_print_main( Symbol *sym ) { PElement *root; root = &sym->expr->root; if( !symbol_recalculate_check( sym ) || !reduce_pelement( reduce_context, reduce_spine_strict, root ) ) main_error_exit( _( "error calculating \"%s\"" ), symbol_name_scope( sym ) ); if( main_option_output ) { char filename[FILENAME_MAX]; im_strncpy( filename, main_option_output, FILENAME_MAX ); if( !group_save_item( root, filename ) ) main_error_exit( _( "error saving \"%s\"" ), symbol_name_scope( sym ) ); } if( main_option_print_main ) graph_value( root ); } static void * main_print_ws( Workspace *ws, gboolean *found ) { Symbol *sym; if( (sym = compile_lookup( ws->sym->expr->compile, "main" )) ) { main_print_main( sym ); *found = TRUE; } return( NULL ); } /* Clean up our application and quit. Not interactive! Do any "has been * modified, OK to quit?" stuff before this, see main_quit_test(). */ static void main_quit( void ) { #if HAVE_FFTW || HAVE_FFTW3 iOpenFile *of; #endif /*HAVE_FFTW || HAVE_FFTW3*/ #ifdef DEBUG printf( "main_quit: cleaning up ...\n" ); #endif/*DEBUG*/ if( main_option_print_main || main_option_output ) { Symbol *sym; gboolean found; symbol_recalculate_all(); /* Process all the mains we can find: one at the top level, * one in each workspace. */ found = FALSE; if( (sym = compile_lookup( symbol_root->expr->compile, "main" )) ) { main_print_main( sym ); found = TRUE; } workspace_map( (workspace_map_fn) main_print_ws, &found, NULL ); if( !found ) main_error_exit( "%s", _( "no \"main\" found" ) ); } /* Force all our windows down. */ iwindow_map_all( (iWindowMapFn) iwindow_kill, NULL ); /* Saves recent and stuff like that. */ mainw_shutdown(); /* Dump wisdom back again. */ #if HAVE_FFTW || HAVE_FFTW3 if( (of = ifile_open_write( "%s" G_DIR_SEPARATOR_S "wisdom", get_savedir() )) ) { fftw_export_wisdom_to_file( of->fp ); ifile_close( of ); } #endif /*HAVE_FFTW*/ /* Remove any ws retain files. */ workspacegroup_autosave_clean(); /* Junk all symbols. This may remove a bunch of intermediate images * too. */ UNREF( main_watchgroup ); UNREF( main_symbol_root ); UNREF( main_toolkitgroup ); UNREF( main_workspaceroot ); /* Junk reduction machine ... this should remove all image temps. */ reduce_destroy( reduce_context ); #ifdef DEBUG_LEAK /* Free other GTK stuff. */ if( main_icon_factory ) gtk_icon_factory_remove_default( main_icon_factory ); junk_tooltips(); #ifdef HAVE_LIBGOFFICE /* Not quite sure what this does, but don't do it in batch mode. */ if( !main_option_batch ) libgoffice_shutdown (); #endif /*HAVE_LIBGOFFICE*/ path_rewrite_free_all(); /* Should have freed everything now. */ /* Make sure! FIXME ... #ifdef this lot out at some point */ UNREF( main_imageinfogroup ); heap_check_all_destroyed(); vips_shutdown(); managed_check_all_destroyed(); util_check_all_destroyed(); call_check_all_destroyed(); #endif /*DEBUG_LEAK*/ #ifdef DEBUG printf( "main_quit: exit( 0 )\n" ); #endif/*DEBUG*/ /* And exit. */ exit( 0 ); } /* We mustn't quit recursively! */ static gboolean main_quit_running = FALSE; static void main_quit_test_cb( void *sys, iWindowResult result ) { #ifdef DEBUG printf( "main_quit_test_cb:\n" ); #endif/*DEBUG*/ if( result == IWINDOW_YES ) /* No return from this. */ main_quit(); else /* Quit has been cancelled. */ main_quit_running = FALSE; } /* Check before quitting. */ void main_quit_test( void ) { if( main_quit_running ) { #ifdef DEBUG printf( "main_quit_test: recursive quit blocked\n" ); #endif/*DEBUG*/ return; } main_quit_running = TRUE; #ifdef DEBUG printf( "main_quit_test:\n" ); #endif/*DEBUG*/ /* Flush any pending preference saves before we look for dirty * objects. */ watchgroup_flush( main_watchgroup ); /* Close registered models. */ filemodel_inter_close_registered_cb( iwindow_pick_one(), NULL, main_quit_test_cb, NULL ); } static void main_watchgroup_changed_cb( void ) { /* Only set this in GUI mode. Otherwise, let the user control CPUs * with the env variable and --vips-concurrency args. */ if( !main_option_batch ) im_concurrency_set( VIPS_CPUS ); } /* Try to load a thing, anything at all. Actually, we don't load plugins * experimentally, win32 pops up an annoying error dialog if you try that. */ static gboolean main_load( Workspace *ws, const char *filename ) { Workspacegroup *new_wsg; if( (new_wsg = workspacegroup_new_from_file( main_workspaceroot, filename, filename )) ) { Mainw *mainw; if( !main_option_batch ) { mainw = mainw_new( new_wsg ); gtk_widget_show( GTK_WIDGET( mainw ) ); } mainw_recent_add( &mainw_recent_workspace, filename ); return( TRUE ); } error_clear(); /* workspace_load_file() needs to recalc to work, try to avoid that by * doing .defs first. */ if( is_file_type( &filesel_dfile_type, filename ) ) { if( toolkit_new_from_file( main_toolkitgroup, filename ) ) return( TRUE ); } /* Try as matrix or image. Have to do these via definitions. */ if( workspace_load_file( ws, filename ) ) return( TRUE ); error_clear(); error_top( _( "Unknown file type." ) ); error_sub( _( "Unable to load \"%s\"." ), filename ); return( FALSE ); } #ifndef DEBUG_NOAUTO static void * main_load_plug( char *name ) { if( !calli_string_filename( (calli_string_fn) im_load_plugin, name, NULL, NULL, NULL ) ) { error_top( _( "Unable to load." ) ); error_sub( _( "Error loading plug-in \"%s\"." ), name ); error_vips(); iwindow_alert( NULL, GTK_MESSAGE_ERROR ); } return( NULL ); } #endif /*!DEBUG_NOAUTO*/ static void * main_load_def( const char *filename ) { Toolkit *kit; if( !main_option_no_load_menus || im_skip_dir( filename )[0] == '_' ) { progress_update_loading( 0, im_skip_dir( filename ) ); if( !(kit = toolkit_new_from_file( main_toolkitgroup, filename )) ) iwindow_alert( NULL, GTK_MESSAGE_ERROR ); else filemodel_set_auto_load( FILEMODEL( kit ) ); } return( NULL ); } static void * main_load_wsg( const char *filename ) { Workspacegroup *wsg; #ifdef DEBUG printf( "main_load_wsg: %s\n", filename ); #endif/*DEBUG*/ progress_update_loading( 0, im_skip_dir( filename ) ); if( !(wsg = workspacegroup_new_from_file( main_workspaceroot, filename, filename )) ) iwindow_alert( NULL, GTK_MESSAGE_ERROR ); else { filemodel_set_auto_load( FILEMODEL( wsg ) ); } return( NULL ); } #ifndef DEBUG_NOAUTO /* Link all the packages in a function. */ static void * main_link_package( im_package *pack) { char name[MAX_STRSIZE]; Toolkit *kit; int i; im_snprintf( name, MAX_STRSIZE, "_%s", pack->name ); kit = toolkit_new( main_toolkitgroup, name ); for( i = 0; i < pack->nfuncs; i++ ) if( call_is_callable( pack->table[i] ) ) { Symbol *sym; sym = symbol_new( symbol_root->expr->compile, pack->table[i]->name ); g_assert( sym->type == SYM_ZOMBIE ); sym->type = SYM_EXTERNAL; sym->function = pack->table[i]; sym->fn_nargs = call_n_args( pack->table[i] ); (void) tool_new_sym( kit, -1, sym ); symbol_made( sym ); } filemodel_set_auto_load( FILEMODEL( kit ) ); filemodel_set_modified( FILEMODEL( kit ), FALSE ); kit->pseudo = TRUE; return( NULL ); } #endif /*!DEBUG_NOAUTO*/ /* Load all plugins and defs. */ static void main_load_startup( void ) { mainw_recent_freeze(); /* Stop load of builtins, plugs and vips ... handy for debugging if you're * tracing symbol.c */ #ifdef DEBUG_NOAUTO printf( "*** DEBUG_NOAUTO set, not loading builtin, plugs and vips\n" ); #else /*!DEBUG_NOAUTO*/ #ifdef DEBUG printf( "built-ins init\n" ); #endif/*DEBUG*/ /* Add builtin toolkit. */ builtin_init(); #ifdef DEBUG printf( "plug-ins init\n" ); #endif/*DEBUG*/ /* Load any plug-ins on PATH_START. */ (void) path_map( PATH_START, "*.plg", (path_map_fn) main_load_plug, NULL ); /* Link all VIPS functions as SYM_EXTERNAL. */ (void) im_map_packages( (VSListMap2Fn) main_link_package, NULL ); #endif /*!DEBUG_NOAUTO*/ /* Load up all defs and wses. */ #ifdef DEBUG printf( "definitions init\n" ); #endif/*DEBUG*/ (void) path_map( PATH_START, "*.def", (path_map_fn) main_load_def, NULL ); #ifdef DEBUG printf( "ws init\n" ); #endif/*DEBUG*/ (void) path_map( PATH_START, "*.ws", (path_map_fn) main_load_wsg, NULL ); mainw_recent_thaw(); } static void * main_junk_auto_load( Filemodel *filemodel ) { g_assert( IS_FILEMODEL( filemodel ) ); if( filemodel->auto_load ) IDESTROY( filemodel ); return( NULL ); } /* Remove and reload all menus/plugins/workspaces. */ void main_reload( void ) { progress_begin(); /* Remove. */ toolkitgroup_map( main_toolkitgroup, (toolkit_map_fn) main_junk_auto_load, NULL, NULL ); workspace_map( (workspace_map_fn) main_junk_auto_load, NULL, NULL ); im_close_plugins(); /* Reload. */ main_load_startup(); /* We may have changed our prefs ... link the watches to the * new prefs workspace. */ watch_relink_all(); progress_end(); } /* Use a file to paint a named stock item. */ static void main_file_for_stock( GtkIconFactory *icon_factory, const char *stock, const char *file ) { GtkIconSource *icon_source; GtkIconSet *icon_set; char buf[FILENAME_MAX]; im_snprintf( buf, FILENAME_MAX, "$VIPSHOME/share/$PACKAGE/data/%s", file ); path_expand( buf ); icon_source = gtk_icon_source_new(); gtk_icon_source_set_filename( icon_source, buf ); icon_set = gtk_icon_set_new(); gtk_icon_set_add_source( icon_set, icon_source ); gtk_icon_source_free( icon_source ); gtk_icon_factory_add( icon_factory, stock, icon_set ); gtk_icon_set_unref( icon_set ); } /* Make our custom icon sets. */ static void main_register_icons( void ) { static const GtkStockItem stock_item[] = { /* Can be (eg.) * * { GTK_STOCK_COPY, N_("_Copy"), GDK_CONTROL_MASK, 'c', GETTEXT_PACKAGE }, * */ { STOCK_NEXT_ERROR, N_( "Next _Error" ), 0, 0, GETTEXT_PACKAGE }, { STOCK_DROPPER, N_( "Ink dropper" ), 0, 0, GETTEXT_PACKAGE }, { STOCK_DUPLICATE, N_( "D_uplicate" ), 0, 0, GETTEXT_PACKAGE }, { STOCK_PAINTBRUSH, N_( "Pen" ), 0, 0, GETTEXT_PACKAGE }, { STOCK_LINE, N_( "Line" ), 0, 0, GETTEXT_PACKAGE }, { STOCK_TEXT, N_( "Text" ), 0, 0, GETTEXT_PACKAGE }, { STOCK_SMUDGE, N_( "Smudge" ), 0, 0, GETTEXT_PACKAGE }, { STOCK_FLOOD, N_( "Flood" ), 0, 0, GETTEXT_PACKAGE }, { STOCK_FLOOD_BLOB, N_( "Flood Blob" ), 0, 0, GETTEXT_PACKAGE }, { STOCK_RECT, N_( "Fill Rectangle" ), 0, 0, GETTEXT_PACKAGE }, { STOCK_MOVE, N_( "Pan" ), 0, 0, GETTEXT_PACKAGE }, { STOCK_SELECT, N_( "Select" ), 0, 0, GETTEXT_PACKAGE }, { STOCK_LOCK, N_( "Locked" ), 0, 0, GETTEXT_PACKAGE }, /* And the LEDs we use. */ { STOCK_LED_RED, N_( "Red LED" ), 0, 0, GETTEXT_PACKAGE }, { STOCK_LED_GREEN, N_( "Green LED" ), 0, 0, GETTEXT_PACKAGE }, { STOCK_LED_BLUE, N_( "Blue LED" ), 0, 0, GETTEXT_PACKAGE }, { STOCK_LED_YELLOW, N_( "Yellow LED" ), 0, 0, GETTEXT_PACKAGE }, { STOCK_LED_CYAN, N_( "Cyan LED" ), 0, 0, GETTEXT_PACKAGE }, { STOCK_LED_OFF, N_( "Off LED" ), 0, 0, GETTEXT_PACKAGE } }; GtkIconSet *icon_set; gtk_stock_add_static( stock_item, IM_NUMBER( stock_item ) ); main_icon_factory = gtk_icon_factory_new(); /* Make a colour picker stock ... take the stock icon and add our own * text (gtk defines no text for the standard version of this stock * icon). */ icon_set = gtk_icon_factory_lookup_default( GTK_STOCK_COLOR_PICKER ); gtk_icon_factory_add( main_icon_factory, STOCK_DROPPER, icon_set ); /* For Next Error, use JUMP_TO. */ icon_set = gtk_icon_factory_lookup_default( GTK_STOCK_JUMP_TO ); gtk_icon_factory_add( main_icon_factory, STOCK_NEXT_ERROR, icon_set ); /* For clone, use the DND_MULTIPLE icon (close enough). */ icon_set = gtk_icon_factory_lookup_default( GTK_STOCK_DND_MULTIPLE ); gtk_icon_factory_add( main_icon_factory, STOCK_DUPLICATE, icon_set ); /* Link to our stock .pngs. */ main_file_for_stock( main_icon_factory, STOCK_PAINTBRUSH, "stock-tool-ink-22.png" ); main_file_for_stock( main_icon_factory, STOCK_LINE, "stock-tool-path-22.png" ); main_file_for_stock( main_icon_factory, STOCK_TEXT, "stock-tool-text-22.png" ); main_file_for_stock( main_icon_factory, STOCK_SMUDGE, "stock-tool-smudge-22.png" ); main_file_for_stock( main_icon_factory, STOCK_FLOOD, "stock-tool-bucket-fill-22.png" ); main_file_for_stock( main_icon_factory, STOCK_FLOOD_BLOB, "stock-tool-bucket-fill-22.png" ); main_file_for_stock( main_icon_factory, STOCK_RECT, "stock-tool-rect-select-22.png" ); main_file_for_stock( main_icon_factory, STOCK_MOVE, "stock-tool-move-22.png" ); main_file_for_stock( main_icon_factory, STOCK_SELECT, "stock-tool-select-22.png" ); main_file_for_stock( main_icon_factory, STOCK_LOCK, "stock-padlock-closed-22.png" ); main_file_for_stock( main_icon_factory, STOCK_ALERT, "stock-alert-22.png" ); main_file_for_stock( main_icon_factory, STOCK_LED_RED, "stock-led-red-18.png" ); main_file_for_stock( main_icon_factory, STOCK_LED_GREEN, "stock-led-green-18.png" ); main_file_for_stock( main_icon_factory, STOCK_LED_BLUE, "stock-led-blue-18.png" ); main_file_for_stock( main_icon_factory, STOCK_LED_YELLOW, "stock-led-yellow-18.png" ); main_file_for_stock( main_icon_factory, STOCK_LED_CYAN, "stock-led-cyan-18.png" ); main_file_for_stock( main_icon_factory, STOCK_LED_OFF, "stock-led-off-18.png" ); gtk_icon_factory_add_default( main_icon_factory ); g_object_unref( main_icon_factory ); } /* Init the display connection stuff. */ static void main_x_init( int *argc, char ***argv ) { char buf[FILENAME_MAX]; #ifdef DEBUG printf( "X11 init\n" ); #endif/*DEBUG*/ (void) calli_string_filename( (calli_string_fn) gtk_rc_add_default_file, "$VIPSHOME" G_DIR_SEPARATOR_S "share" G_DIR_SEPARATOR_S PACKAGE G_DIR_SEPARATOR_S "rc" G_DIR_SEPARATOR_S "ipgtkrc", NULL, NULL, NULL ); gtk_init( argc, argv ); /* Set the default icon. */ im_strncpy( buf, "$VIPSHOME/share/$PACKAGE/data/vips-128.png", FILENAME_MAX ); path_expand( buf ); gtk_window_set_default_icon_from_file( buf, NULL ); /* Turn off startup notification. Startup is done when we pop our * first window, not when we make this secret window. */ gtk_window_set_auto_startup_notification( FALSE ); #ifdef DEBUG_UPDATES printf( "*** debug updates is on\n" ); gdk_window_set_debug_updates( TRUE ); #endif /*DEBUG_UPDATES*/ main_register_icons(); /* Next window we make is end of startup. */ gtk_window_set_auto_startup_notification( TRUE ); /* Load up any saved accelerators. */ calli_string_filenamef( (calli_string_fn) gtk_accel_map_load, "%s" G_DIR_SEPARATOR_S "accel_map", get_savedir() ); } static void * main_toobig_done_sub( const char *filename ) { unlinkf( "%s", filename ); return( NULL ); } /* OK in "flush temps" yesno. */ static void main_toobig_done( iWindow *iwnd, void *client, iWindowNotifyFn nfn, void *sys ) { /* Don't "rm *", too dangerous. */ path_map_dir( PATH_TMP, "*.v", (path_map_fn) main_toobig_done_sub, NULL ); path_map_dir( PATH_TMP, "*.ws", (path_map_fn) main_toobig_done_sub, NULL ); /* _stdenv.def:magick can generate .tif files. */ path_map_dir( PATH_TMP, "*.tif", (path_map_fn) main_toobig_done_sub, NULL ); /* autotrace can make some others. */ path_map_dir( PATH_TMP, "*.ppm", (path_map_fn) main_toobig_done_sub, NULL ); path_map_dir( PATH_TMP, "*.svg", (path_map_fn) main_toobig_done_sub, NULL ); /* Tell space-free indicators to update. */ if( main_imageinfogroup ) iobject_changed( IOBJECT( main_imageinfogroup ) ); nfn( sys, IWINDOW_YES ); } /* Test for a bunch of stuff in the TMP area. Need to do this before * we load args in case there are large JPEGs there. Only bother in * interactive mode: we won't be able to question the user without an * X connection. */ static void main_check_temp( double total ) { if( total > 10 * 1024 * 1024 ) { char txt[256]; VipsBuf buf = VIPS_BUF_STATIC( txt ); char tmp[FILENAME_MAX]; im_strncpy( tmp, PATH_TMP, FILENAME_MAX ); path_expand( tmp ); vips_buf_append_size( &buf, total ); box_yesno( NULL, main_toobig_done, iwindow_true_cb, NULL, NULL, NULL, _( "Empty temp area" ), _( "Many files in temp area." ), _( "The temp area \"%s\" contains %s of files. " "Would you like to empty the temp area? " "This will delete any workspace backups and " "cannot be undone." ), tmp, vips_buf_all( &buf ) ); } } /* Make sure a savedir exists. Used to build the "~/.nip2-xx/tmp" etc. * directory tree. */ static void main_mkdir( const char *dir ) { if( !existsf( "%s" G_DIR_SEPARATOR_S "%s", get_savedir(), dir ) ) if( !mkdirf( "%s" G_DIR_SEPARATOR_S "%s", get_savedir(), dir ) ) error_exit( _( "unable to make %s %s: %s" ), get_savedir(), dir, g_strerror( errno ) ); } static gboolean main_set( const char *str ) { Symbol *sym; attach_input_string( str ); if( !(sym = parse_set_symbol()) ) return( FALSE ); /* Put the input just after the '=', ready to parse a RHS into the * symbol. */ attach_input_string( str + IM_CLIP( 0, input_state.charpos - 1, strlen( str ) ) ); if( !symbol_user_init( sym ) || !parse_rhs( sym->expr, PARSE_RHS ) ) { /* Another parse error. */ expr_error_get( sym->expr ); /* Block changes to error_string ... symbol_destroy() * can set this for compound objects. */ error_block(); IDESTROY( sym ); error_unblock(); return( FALSE ); } symbol_made( sym ); /* Is there a row? Make sure any modified text there can't zap our new * text. */ if( sym->expr->row ) { Row *row = sym->expr->row; heapmodel_set_modified( HEAPMODEL( row->child_rhs->itext ), FALSE ); } return( TRUE ); } static char prefix_buffer[FILENAME_MAX]; static gboolean prefix_valid = FALSE; /* Override the install guess from vips. Handy for testing. */ static void set_prefix( const char *prefix ) { im_strncpy( prefix_buffer, prefix, FILENAME_MAX ); nativeize_path( prefix_buffer ); absoluteize_path( prefix_buffer ); setenvf( "VIPSHOME", "%s", prefix_buffer ); prefix_valid = TRUE; } /* Guess VIPSHOME, if we can. */ const char * get_prefix( void ) { if( !prefix_valid ) { const char *prefix; if( !(prefix = im_guess_prefix( main_argv0, "VIPSHOME" )) ) { error_top( _( "Unable to find install area." ) ); error_vips(); return( NULL ); } set_prefix( prefix ); } return( prefix_buffer ); } /* Start here! */ int main( int argc, char *argv[] ) { gboolean welcome_message = FALSE; Workspacegroup *wsg; Workspace *ws; GError *error = NULL; GOptionContext *context; const char *prefix; int i; double total = 0.0; #ifdef HAVE_GETRLIMIT struct rlimit rlp; #endif /*HAVE_GETRLIMIT*/ char name[256]; #if HAVE_FFTW || HAVE_FFTW3 iOpenFile *of; #endif /*HAVE_FFTW*/ Toolkit *kit; char txt[MAX_STRSIZE]; VipsBuf buf = VIPS_BUF_STATIC( txt ); #ifdef DEBUG_TIME GTimer *startup_timer = g_timer_new(); printf( "DEBUG_TIME: startup timer zeroed ...\n" ); #endif /*DEBUG_TIME*/ /* In startup phase. */ main_starting = TRUE; /* Want numeric locale to be "C", so we have C rules for doing * double <-> string (ie. no "," for decimal point). */ setlocale( LC_ALL, "" ); setlocale( LC_NUMERIC, "C" ); /* Make sure our LC_NUMERIC setting is not trashed. */ gtk_disable_setlocale(); #ifdef DEBUG printf( "main: sizeof( HeapNode ) == %zd\n", sizeof( HeapNode ) ); /* Should be 3 pointers, hopefully. */ if( sizeof( HeapNode ) != 3 * sizeof( void * ) ) printf( "*** struct packing problem!\n" ); #endif/*DEBUG*/ /* Yuk .. shouldn't really write to argv0. This can't change the * string length. * * On win32 we will sometimes get paths with mixed '/' and '\' which * confuses vips's prefix guessing. Make sure we have one or the other. */ nativeize_path( argv[0] ); main_argv0 = argv[0]; main_c_stack_base = &argc; /* Pass config.h stuff down to .ws files. */ setenvf( "PACKAGE", "%s", PACKAGE ); setenvf( "VERSION", "%s", VERSION ); #ifdef OS_WIN32 { /* No HOME on windows ... make one from HOMEDRIVE and HOMEDIR (via * glib). */ const char *home; char buf[FILENAME_MAX]; if( !(home = g_getenv( "HOME" )) ) home = g_get_home_dir(); /* We need native paths. */ strncpy( buf, home, FILENAME_MAX ); nativeize_path( buf ); setenvf( "HOME", "%s", buf ); } #endif /*OS_WIN32*/ /* Name of the dir we store our config stuff in. This can get used by * Preferences.ws. */ setenvf( "SAVEDIR", "%s", get_savedir() ); /* Path separator on this platform. */ setenvf( "SEP", "%s", G_DIR_SEPARATOR_S ); /* Executable file extension (eg. ".exe" on Windows). */ setenvf( "EXEEXT", "%s", VIPS_EXEEXT ); /* Start up vips. */ if( im_init_world( main_argv0 ) ) error_exit( "unable to start VIPS" ); /* The vips8 cache is no use to us. We have our own cache which is * integrated with our invalidate system. */ vips_cache_set_max( 0 ); /* Init i18n ... get catalogues from $VIPSHOME/share/locale so we're * relocatable. */ prefix = get_prefix(); im_snprintf( name, 256, "%s" G_DIR_SEPARATOR_S "share" G_DIR_SEPARATOR_S "locale", prefix ); #ifdef DEBUG printf( "bindtextdomain: %s\n", name ); #endif /*DEBUG*/ textdomain( GETTEXT_PACKAGE ); bindtextdomain( GETTEXT_PACKAGE, name ); bind_textdomain_codeset( GETTEXT_PACKAGE, "UTF-8" ); /* Set localised application name. */ g_set_application_name( _( PACKAGE ) ); context = g_option_context_new( _( "- image processing spreadsheet" ) ); g_option_context_add_main_entries( context, main_option, GETTEXT_PACKAGE ); /* Don't start X here! We may be in batch mode. */ g_option_context_add_group( context, gtk_get_option_group( FALSE ) ); g_option_context_add_group( context, im_get_option_group() ); if( !g_option_context_parse( context, &argc, &argv, &error ) ) vfatal( &error ); g_option_context_free( context ); /* Override the install guess from vips. This won't pick up msg * cats sadly :( since we have to init i18n before arg parsing. Handy * for testing without installing. */ if( main_option_prefix ) set_prefix( main_option_prefix ); if( main_option_version ) { printf( "%s-%s", PACKAGE, VERSION ); printf( "\n" ); printf( _( "linked to vips-%s" ), im_version_string() ); printf( "\n" ); exit( 0 ); } #ifdef DEBUG_FATAL /* Set masks for debugging ... stop on any problem. */ g_log_set_always_fatal( G_LOG_FLAG_RECURSION | G_LOG_FLAG_FATAL | G_LOG_LEVEL_ERROR | G_LOG_LEVEL_CRITICAL | G_LOG_LEVEL_WARNING ); #else /*!DEBUG_FATAL*/ #ifdef OS_WIN32 /* No logging output ... on win32, log output pops up a very annoying * console text box. */ g_log_set_handler( "GLib", G_LOG_LEVEL_MASK | G_LOG_FLAG_FATAL | G_LOG_FLAG_RECURSION, main_log_null, NULL ); g_log_set_handler( "Gtk", G_LOG_LEVEL_MASK | G_LOG_FLAG_FATAL | G_LOG_FLAG_RECURSION, main_log_null, NULL ); g_log_set_handler( NULL, G_LOG_LEVEL_MASK | G_LOG_FLAG_FATAL | G_LOG_FLAG_RECURSION, main_log_null, NULL ); #endif /*OS_WIN32*/ #endif /*DEBUG_FATAL*/ main_stdin = ifile_open_read_stdin(); #ifdef HAVE_GETRLIMIT /* Make sure we have lots of file descriptors. Some platforms have cur * as 256 and max at 1024 to keep stdio happy. */ if( getrlimit( RLIMIT_NOFILE, &rlp ) == 0 ) { rlim_t old_limit = rlp.rlim_cur; rlp.rlim_cur = rlp.rlim_max; if( setrlimit( RLIMIT_NOFILE, &rlp ) == 0 ) { #ifdef DEBUG printf( "set max file descriptors to %d\n", (int) rlp.rlim_max ); #endif /*DEBUG*/ } else if( (int) rlp.rlim_max != -1 ) { /* -1 means can't-be-set, at least on os x, so don't * warn. */ g_warning( _( "unable to change max file descriptors\n" "max file descriptors still set to %d" ), (int) old_limit ); } } else { g_warning( _( "unable to read max file descriptors" ) ); } #endif /*HAVE_GETRLIMIT*/ /* Make our file types. */ filesel_startup(); /* Set default values for paths. */ path_init(); /* First time we've been run? Welcome message. */ if( !existsf( "%s", get_savedir() ) ) welcome_message = TRUE; /* Always make these in case some got deleted. */ main_mkdir( "" ); main_mkdir( "tmp" ); main_mkdir( "start" ); main_mkdir( "data" ); /* Init other stuff. */ #ifdef HAVE_FFTW3 fftw_import_system_wisdom(); #endif /*HAVE_FFTW3*/ #if HAVE_FFTW || HAVE_FFTW3 if( (of = ifile_open_read( "%s" G_DIR_SEPARATOR_S "wisdom", get_savedir() )) ) { fftw_import_wisdom_from_file( of->fp ); ifile_close( of ); } #endif /*HAVE_FFTW*/ mainw_startup(); reduce_context = reduce_new(); main_symbol_root = symbol_root_init(); g_object_ref( G_OBJECT( main_symbol_root ) ); iobject_sink( IOBJECT( main_symbol_root ) ); model_base_init(); main_workspaceroot = workspaceroot_new( "Workspaces" ); g_object_ref( G_OBJECT( main_workspaceroot ) ); iobject_sink( IOBJECT( main_workspaceroot ) ); main_watchgroup = watchgroup_new( main_workspaceroot, "Preferences" ); g_object_ref( G_OBJECT( main_watchgroup ) ); iobject_sink( IOBJECT( main_watchgroup ) ); main_toolkitgroup = toolkitgroup_new( symbol_root ); g_object_ref( G_OBJECT( main_toolkitgroup ) ); iobject_sink( IOBJECT( main_toolkitgroup ) ); main_imageinfogroup = imageinfogroup_new(); g_object_ref( G_OBJECT( main_imageinfogroup ) ); iobject_sink( IOBJECT( main_imageinfogroup ) ); /* First pass at command-line options. Just look at the flags that * imply other flags, don't do any processing yet. */ if( main_option_script ) { main_option_batch = TRUE; main_option_no_load_menus = TRUE; main_option_no_load_args = TRUE; main_option_print_main = TRUE; } if( main_option_test ) { main_option_batch = TRUE; main_option_verbose = TRUE; } if( main_option_expression ) { main_option_batch = TRUE; main_option_no_load_menus = TRUE; main_option_no_load_args = TRUE; main_option_print_main = TRUE; } if( main_option_benchmark ) { main_option_batch = TRUE; main_option_no_load_menus = FALSE; } if( main_option_i18n ) { /* Just start up and shutdown, no X. Output constant * i18n strings. */ main_option_batch = TRUE; main_option_no_load_menus = FALSE; } #ifdef DEBUG if( main_option_batch ) printf( "non-interactive mode\n" ); #endif /*DEBUG*/ /* Start the X connection. We need this before _load_all(), so that * we can pop up error dialogs. */ if( !main_option_batch ) main_x_init( &argc, &argv ); #ifdef HAVE_LIBGOFFICE libgoffice_init(); go_plugins_init( NULL, NULL, NULL, NULL, TRUE, GO_TYPE_PLUGIN_LOADER_MODULE ); #endif /*HAVE_LIBGOFFICE*/ /* Load start-up stuff. Builtins, plugins, externals etc. We need to * do this before we load any user code so we can prevent redefinition * of builtins. */ main_load_startup(); /* Recalc to build all classes and gets prefs working. * * We have to do this in batch * mode since we can find dirties through dynamic lookups. Even though * you might think we could just follow recomps. */ symbol_recalculate_all_force( TRUE ); #ifdef DEBUG printf( "arg processing\n" ); #endif/*DEBUG*/ /* Might make this from stdin/whatever if we have a special * command-line flag. */ wsg = NULL; ws = NULL; /* Second command-line pass. This time we do any actions. */ if( main_option_script ) { if( !toolkit_new_from_file( main_toolkitgroup, main_option_script ) ) main_log_add( "%s\n", error_get_sub() ); } if( main_option_expression ) { kit = toolkit_new( main_toolkitgroup, "_expression" ); vips_buf_appendf( &buf, "main = %s;", main_option_expression ); attach_input_string( vips_buf_all( &buf ) ); (void) parse_onedef( kit, -1 ); filemodel_set_modified( FILEMODEL( kit ), FALSE ); } if( main_option_stdin_def ) { if( !(kit = toolkit_new_from_openfile( main_toolkitgroup, main_stdin )) ) main_log_add( "%s\n", error_get_sub() ); } if( main_option_stdin_ws ) { if( !(wsg = workspacegroup_new_from_openfile( main_workspaceroot, main_stdin )) ) main_log_add( "%s\n", error_get_sub() ); else /* Don't want to have "stdin" as the filename. */ filemodel_set_filename( FILEMODEL( wsg ), NULL ); } /* Make a start workspace and workspacegroup to load * stuff into. */ if( !wsg ) { wsg = workspacegroup_new_blank( main_workspaceroot, NULL ); ws = WORKSPACE( icontainer_get_nth_child( ICONTAINER( wsg ), 0 ) ); } /* Reset IM_CONCURRENCY if a watch changes. Need to do this after * parsing options so we skip in batch mode. */ g_signal_connect( main_watchgroup, "watch_changed", G_CALLBACK( main_watchgroup_changed_cb ), NULL ); /* Pass PATH_TMP down to vips via TMPDIR. See im_system(), for * example. We need to do this after the first recomp so that prefs * are loaded. */ { char buf[FILENAME_MAX]; im_strncpy( buf, PATH_TMP, FILENAME_MAX ); path_expand( buf ); setenvf( "TMPDIR", "%s", buf ); path_rewrite_add( PATH_TMP, "$TMPDIR", TRUE ); } /* Measure amount of stuff in temp area ... need this for checking * temps later. We pop a dialog if there are too many, so only useful * in interactive mode. */ if( !main_option_batch ) total = directory_size( PATH_TMP ); /* Make nip's argc/argv[]. */ kit = toolkit_new( main_toolkitgroup, "_args" ); vips_buf_rewind( &buf ); vips_buf_appendf( &buf, "argc = %d;", argc ); attach_input_string( vips_buf_all( &buf ) ); (void) parse_onedef( kit, -1 ); vips_buf_rewind( &buf ); vips_buf_appendf( &buf, "argv = [" ); for( i = 0; i < argc; i++ ) { /* Ignore "--" args. Consider eg. * * ./try201.nip2 -o x.v -- -12 ~/pics/shark.jpg * * if we didn't remove --, all scripts would need to. */ if( strcmp( argv[i], "--" ) == 0 ) continue; if( i > 0 ) vips_buf_appendf( &buf, ", " ); vips_buf_appendf( &buf, "\"%s\"", argv[i] ); } vips_buf_appendf( &buf, "];" ); attach_input_string( vips_buf_all( &buf ) ); if( !parse_onedef( kit, -1 ) ) main_log_add( "%s\n", error_get_sub() ); filemodel_set_modified( FILEMODEL( kit ), FALSE ); /* Double-check: we often forget to move the prefs ws to the latest * version. */ #ifdef DEBUG_LEAK { Symbol *wsr_sym = main_workspaceroot->sym; Symbol *ws_sym = SYMBOL( icontainer_child_lookup( ICONTAINER( wsr_sym->expr->compile ), "Preferences" ) ); if( !ws_sym ) printf( "No prefs workspace!\n" ); else { Workspace *ws = ws_sym->ws; if( ws->compat_major || ws->compat_minor ) printf( "Preferences loaded in compat mode!\n" ); } } #endif /*DEBUG_LEAK*/ if( !main_option_no_load_args ) { /* Load args as files, if we can. */ for( i = 1; i < argc; i++ ) { char buf[FILENAME_MAX]; /* We want to use the absolute, compact form of the * filename object so we don't get a dependency on CWD. */ im_strncpy( buf, argv[i], FILENAME_MAX ); path_compact( buf ); if( !main_load( ws, buf ) ) main_log_add( "%s\n", error_get_sub() ); } } /* In batch mode give up if there are startup errors. */ if( main_option_batch ) { if( !main_log_is_empty() ) { fprintf( stderr, _( "Startup error log:\n%s" ), main_log_get() ); exit( 1 ); } } if( main_option_set ) { int i; for( i = 0; main_option_set[i]; i++ ) { if( main_option_verbose ) printf( "main_set: %s\n", main_option_set[i] ); if( !main_set( main_option_set[i] ) ) main_log_add( "%s\n%s", error_get_top(), error_get_sub() ); } } /* Make sure our start ws doesn't have modified set. We may have * loaded some images or whatever into it. */ workspace_set_modified( ws, FALSE ); /* If the start ws is empty (we didn't load anything into it) and we * loaded some other workspaces, we can junk the empty ws. */ if( icontainer_get_n_children( ICONTAINER( main_workspaceroot ) ) > 2 && workspace_is_empty( ws ) ) { IDESTROY( wsg ); wsg = NULL; ws = NULL; } #ifdef DEBUG_TIME printf( "DEBUG_TIME: main init in %gs\n", g_timer_elapsed( startup_timer, NULL ) ); #endif /*DEBUG_TIME*/ /* Are we running interactively? Start the main window and loop. */ if( !main_option_batch ) { if( wsg ) { Mainw *mainw; mainw = mainw_new( wsg ); gtk_widget_show( GTK_WIDGET( mainw ) ); } /* Process a few events ... we want the window to be mapped so * that log/welcome/clean? messages we pop appear in the right * place on the screen. */ while( g_main_context_iteration( NULL, FALSE ) ) ; if( !main_log_is_empty() ) { error_top( _( "Startup error." ) ); error_sub( _( "Startup error log:\n%s" ), main_log_get() ); iwindow_alert( NULL, GTK_MESSAGE_ERROR ); } if( welcome_message ) { char save_dir[FILENAME_MAX]; char buf[256]; im_snprintf( buf, 256, _( "Welcome to %s-%s!" ), PACKAGE, VERSION ); im_strncpy( save_dir, get_savedir(), FILENAME_MAX ); path_expand( save_dir ); error_top( "%s", buf ); error_sub( _( "A new directory has been created to hold startup, " "data and temporary files:\n\n" " %s\n\n" "If you've used previous versions of %s, you might want " "to copy files over from your old work area." ), save_dir, PACKAGE ); iwindow_alert( NULL, GTK_MESSAGE_INFO ); } main_check_temp( total ); #ifdef DEBUG printf( "starting event dispatch loop\n" ); #endif/*DEBUG*/ main_starting = FALSE; symbol_recalculate_all_force( FALSE ); gtk_main(); } if( main_option_test ) { /* Make sure we've had at least one recomp. */ symbol_recalculate_all_force( TRUE ); if( expr_error_all ) main_error_exit( "--test: errors found" ); } /* No return from this. */ main_quit(); return( 0 ); } #ifdef OS_WIN32 /* Get non-cmd line args on win32. */ static int breakargs( char *program, char *line, char **argv ) { int argc = 1; argv[0] = program; while( *line && argc < MAX_SYSTEM - 1 ) { while( *line && isspace( *line ) ) line++; if( *line == '"' ) { /* Windows-95 quoted arguments */ char *start = line + 1; char *end = start; while( *end && *end != '"' ) end++; if( *end == '"' ) { *end = '\0'; argv[argc++] = start; line = end + 1; continue; } } if( *line ) { argv[argc++] = line; while( *line && !isspace( *line ) ) line++; if( *line ) *line++ = '\0'; } } /* add trailing NULL pointer to argv */ argv[argc] = NULL; return( argc ); } int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nShowCmd ) { char *argv[MAX_SYSTEM]; int argc; TCHAR program[MAXPATHLEN]; GetModuleFileName( hInstance, program, sizeof(program) ); argc = breakargs( (char *) program, lpszCmdLine, argv ); return( main( argc, argv ) ); } #endif /*OS_WIN32*/ nip2-8.7.0/src/fontnameview.c0000644000175000017500000001013713224651032012754 00000000000000/* run the display for an arrow in a workspace */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #include "ip.h" static GraphicviewClass *parent_class = NULL; static void fontnameview_link( View *view, Model *model, View *parent ) { Fontnameview *fontnameview = FONTNAMEVIEW( view ); VIEW_CLASS( parent_class )->link( view, model, parent ); if( GRAPHICVIEW( view )->sview ) gtk_size_group_add_widget( GRAPHICVIEW( view )->sview->group, fontnameview->label ); } static void fontnameview_refresh( vObject *vobject ) { Fontnameview *fontnameview = FONTNAMEVIEW( vobject ); Fontname *fontname = FONTNAME( VOBJECT( vobject )->iobject ); #ifdef DEBUG printf( "fontnameview_refresh: " ); row_name_print( HEAPMODEL( fontname )->row ); printf( "\n" ); #endif /*DEBUG*/ if( vobject->iobject->caption ) set_glabel( fontnameview->label, _( "%s:" ), vobject->iobject->caption ); if( fontname->value ) fontbutton_set_font_name( fontnameview->fontbutton, fontname->value ); VOBJECT_CLASS( parent_class )->refresh( vobject ); } static void fontnameview_class_init( FontnameviewClass *class ) { vObjectClass *vobject_class = (vObjectClass *) class; ViewClass *view_class = (ViewClass *) class; parent_class = g_type_class_peek_parent( class ); /* Create signals. */ /* Init methods. */ vobject_class->refresh = fontnameview_refresh; view_class->link = fontnameview_link; } static void fontnameview_changed_cb( Fontbutton *fontbutton, Fontnameview *fontnameview ) { Fontname *fontname = FONTNAME( VOBJECT( fontnameview )->iobject ); const char *font_name = fontbutton_get_font_name( fontbutton ); if( strcmp( font_name, fontname->value ) != 0 ) { IM_SETSTR( fontname->value, font_name ); classmodel_update( CLASSMODEL( fontname ) ); symbol_recalculate_all(); } } static void fontnameview_init( Fontnameview *fontnameview ) { GtkWidget *hbox; #ifdef DEBUG printf( "fontnameview_init\n" ); #endif /*DEBUG*/ hbox = gtk_hbox_new( FALSE, 12 ); gtk_box_pack_start( GTK_BOX( fontnameview ), hbox, TRUE, FALSE, 0 ); fontnameview->label = gtk_label_new( "" ); gtk_misc_set_alignment( GTK_MISC( fontnameview->label ), 0, 0.5 ); gtk_misc_set_padding( GTK_MISC( fontnameview->label ), 2, 7 ); gtk_box_pack_start( GTK_BOX( hbox ), GTK_WIDGET( fontnameview->label ), FALSE, FALSE, 2 ); fontnameview->fontbutton = fontbutton_new(); gtk_box_pack_start( GTK_BOX( hbox ), GTK_WIDGET( fontnameview->fontbutton ), TRUE, TRUE, 0 ); g_signal_connect( fontnameview->fontbutton, "changed", G_CALLBACK( fontnameview_changed_cb ), fontnameview ); gtk_widget_show_all( GTK_WIDGET( hbox ) ); } GtkType fontnameview_get_type( void ) { static GtkType fontnameview_type = 0; if( !fontnameview_type ) { static const GtkTypeInfo info = { "Fontnameview", sizeof( Fontnameview ), sizeof( FontnameviewClass ), (GtkClassInitFunc) fontnameview_class_init, (GtkObjectInitFunc) fontnameview_init, /* reserved_1 */ NULL, /* reserved_2 */ NULL, (GtkClassInitFunc) NULL, }; fontnameview_type = gtk_type_unique( TYPE_GRAPHICVIEW, &info ); } return( fontnameview_type ); } View * fontnameview_new( void ) { Fontnameview *fontnameview = gtk_type_new( TYPE_FONTNAMEVIEW ); return( VIEW( fontnameview ) ); } nip2-8.7.0/src/progress.h0000644000175000017500000000536213224651032012127 00000000000000/* Handle feedback about eval progress. */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your watch) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* The max size of the feedback message. */ #define PROGRESS_FEEDBACK_SIZE (100) #define TYPE_PROGRESS (progress_get_type()) #define PROGRESS( obj ) \ (G_TYPE_CHECK_INSTANCE_CAST( (obj), TYPE_PROGRESS, Progress )) #define PROGRESS_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_CAST( (klass), TYPE_PROGRESS, ProgressClass)) #define IS_PROGRESS( obj ) \ (G_TYPE_CHECK_INSTANCE_TYPE( (obj), TYPE_PROGRESS )) #define IS_PROGRESS_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_TYPE( (klass), TYPE_PROGRESS )) #define PROGRESS_GET_CLASS( obj ) \ (G_TYPE_INSTANCE_GET_CLASS( (obj), TYPE_PROGRESS, ProgressClass )) typedef struct _Progress { iObject parent_object; /* Nest progress_begin() calls with this. */ int count; /* How long we've been busy, time since last update. */ GTimer *busy_timer; GTimer *update_timer; /* Trying to cancel. */ gboolean cancel; /* In the "busy" state, ie. we've emitted "begin" and so we need to * emit "end" on progress_end(). */ gboolean busy; /* The feedback message we suggest, percent for progress bar. */ VipsBuf feedback; char buf[PROGRESS_FEEDBACK_SIZE]; int percent; } Progress; typedef struct _ProgressClass { iObjectClass parent_class; /* Entering busy state: display progress bar, change cursor, etc. */ void (*begin)( Progress * ); /* Progress update. Set cancel to cancel computation. */ void (*update)( Progress *, gboolean *cancel ); /* End busy state. Restore screen. */ void (*end)( Progress * ); } ProgressClass; /* Called from all over nip2 as computation proceeds. */ void progress_begin( void ); gboolean progress_update_percent( int percent, int eta ); gboolean progress_update_expr( Expr *expr ); gboolean progress_update_loading( int percent, const char *filename ); gboolean progress_update_tick( void ); void progress_end( void ); GType progress_get_type( void ); Progress *progress_get( void ); nip2-8.7.0/src/workspace.h0000644000175000017500000001513113273071606012263 00000000000000/* Declarations for workspace.c. */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #define TYPE_WORKSPACE (workspace_get_type()) #define WORKSPACE( obj ) \ (G_TYPE_CHECK_INSTANCE_CAST( (obj), TYPE_WORKSPACE, Workspace )) #define WORKSPACE_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_CAST( (klass), TYPE_WORKSPACE, WorkspaceClass)) #define IS_WORKSPACE( obj ) \ (G_TYPE_CHECK_INSTANCE_TYPE( (obj), TYPE_WORKSPACE )) #define IS_WORKSPACE_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_TYPE( (klass), TYPE_WORKSPACE )) #define WORKSPACE_GET_CLASS( obj ) \ (G_TYPE_INSTANCE_GET_CLASS( (obj), TYPE_WORKSPACE, WorkspaceClass )) /* Three sorts of workspace file load. */ typedef enum { WORKSPACE_MODE_REGULAR, /* Vanilla! */ WORKSPACE_MODE_FORMULA, /* Show formula, not values */ WORKSPACE_MODE_NOEDIT /* Shut down all edits */ } WorkspaceMode; /* A workspace. */ struct _Workspace { Model parent_object; /* Our rows are part of this symbol. */ Symbol *sym; /* We are using this set of toolkits. */ Toolkitgroup *kitg; /* State. */ int next; /* Index for next column name */ GSList *selected; /* Rows selected in this workspace */ GSList *errors; /* Rows with errors */ WorkspaceMode mode; /* Display mode */ gboolean locked; /* WS has been locked */ /* The nip2 version that made this workspace. */ int major; int minor; /* We may load some compat definitions to support this workspace, if it * was written by an older version. * * The version number of the compat stuff we loaded. Zero for no compat * stuff loaded. */ int compat_major; int compat_minor; /* The last row we scrolled to on next-error. */ Row *last_error; Rect area; /* Rect enclosing the set of columns */ Rect vp; /* Viewport hint ... set by views */ gboolean lpane_open; /* Pane model */ int lpane_position; gboolean rpane_open; int rpane_position; char *status; /* Status message */ /* Visualisation defaults for this ws. */ double scale; double offset; /* Workspace-local defs, displayed in the left pane. All in a private * kitg and kit. */ char *local_defs; Toolkitgroup *local_kitg; Toolkit *local_kit; /* Some view inside this ws has changed and this ws needs a relayout. * Use in_dispose to stop relayout during ws shutdown. */ gboolean needs_layout; gboolean in_dispose; }; typedef struct _WorkspaceClass { ModelClass parent_class; /* Methods. */ } WorkspaceClass; void workspace_set_needs_layout( Workspace *ws, gboolean needs_layout ); GSList *workspace_get_needs_layout(); Workspacegroup *workspace_get_workspacegroup( Workspace *ws ); Workspaceroot *workspace_get_workspaceroot( Workspace *ws ); void workspace_set_modified( Workspace *ws, gboolean modified ); void *workspace_map( workspace_map_fn fn, void *a, void *b ); void *workspace_map_column( Workspace *ws, column_map_fn fn, void *a ); void *workspace_map_symbol( Workspace *ws, symbol_map_fn fn, void *a ); void *workspace_map_view( Workspace *ws, view_map_fn fn, void *a ); gboolean workspace_is_empty( Workspace *ws ); void *workspace_selected_map( Workspace *ws, row_map_fn fn, void *a, void *b ); void *workspace_selected_map_sym( Workspace *ws, symbol_map_fn fn, void *a, void *b ); gboolean workspace_selected_any( Workspace *ws ); int workspace_selected_num( Workspace *ws ); gboolean workspace_selected_sym( Workspace *ws, Symbol *sym ); Row *workspace_selected_one( Workspace *ws ); void workspace_deselect_all( Workspace *ws ); void workspace_selected_names( Workspace *ws, VipsBuf *buf, const char *separator ); void workspace_column_names( Column *col, VipsBuf *buf, const char *separator ); void workspace_select_all( Workspace *ws ); Column *workspace_is_one_empty( Workspace *ws ); Column *workspace_column_find( Workspace *ws, const char *name ); Column *workspace_column_get( Workspace *ws, const char *name ); void workspace_column_name_new( Workspace *ws, char *name ); Column *workspace_column_pick( Workspace *ws ); void workspace_column_select( Workspace *ws, Column *col ); Column *workspace_column_new( Workspace *ws ); Symbol *workspace_add_def( Workspace *ws, const char *str ); Symbol *workspace_add_def_recalc( Workspace *ws, const char *str ); gboolean workspace_load_file_buf( VipsBuf *buf, const char *filename ); Symbol *workspace_load_file( Workspace *ws, const char *filename ); void workspace_get_version( Workspace *ws, int *major, int *minor ); int workspace_have_compat( int major, int minor, int *best_major, int *best_minor ); gboolean workspace_load_compat( Workspace *ws, int major, int minor ); GType workspace_get_type( void ); Workspace *workspace_new( Workspacegroup *wsg, const char *name ); Workspace *workspace_new_blank( Workspacegroup *wsg ); gboolean workspace_add_action( Workspace *ws, const char *name, const char *action, int nparam ); int workspace_number( void ); gboolean workspace_selected_recalc( Workspace *ws ); void workspace_selected_remove_yesno( Workspace *ws, GtkWidget *parent ); gboolean workspace_selected_ungroup( Workspace *ws ); gboolean workspace_selected_group( Workspace *ws ); gboolean workspace_next_error( Workspace *ws ); void workspace_set_status( Workspace *ws, const char *fmt, ... ) __attribute__((format(printf, 2, 3))); void workspace_set_mode( Workspace *ws, WorkspaceMode mode ); gboolean workspace_local_set( Workspace *ws, const char *txt ); gboolean workspace_local_set_from_file( Workspace *ws, const char *fname ); void workspace_jump_update( Workspace *ws, GtkWidget *menu ); gboolean workspace_merge_file( Workspace *ws, const char *filename ); gboolean workspace_selected_duplicate( Workspace *ws ); gboolean workspace_selected_save( Workspace *ws, const char *filename ); gboolean workspace_rename( Workspace *ws, const char *name, const char *caption ); void workspace_set_locked( Workspace *ws, gboolean locked ); gboolean workspace_duplicate( Workspace *ws ); nip2-8.7.0/src/clock.c0000644000175000017500000001573113224651032011352 00000000000000/* a clock ... triggers a recomp every whenever */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #include "ip.h" static ValueClass *parent_class = NULL; static void clock_dispose( GObject *gobject ) { Clock *clock = CLOCK( gobject ); #ifdef DEBUG printf( "clock_dispose\n" ); #endif /*DEBUG*/ IM_FREEF( g_source_remove, clock->recalc_timeout ); IM_FREEF( g_timer_destroy, clock->elapsed_timer ); G_OBJECT_CLASS( parent_class )->dispose( gobject ); } static void clock_done_cb( iWindow *iwnd, void *client, iWindowNotifyFn nfn, void *sys ) { Clock *clock = CLOCK( client ); Stringset *ss = STRINGSET( iwnd ); StringsetChild *interval = stringset_child_get( ss, _( "Interval" ) ); StringsetChild *value = stringset_child_get( ss, _( "Elapsed time" ) ); if( !get_geditable_double( interval->entry, &clock->interval ) || !get_geditable_double( value->entry, &clock->value ) ) { nfn( sys, IWINDOW_ERROR ); return; } if( clock->interval < 0.1 ) clock->interval = 0.1; if( clock->value < 0.0 ) clock->value = 0.0; /* Magic: ask for the clock timer to be reset. */ clock->time_offset = -1; classmodel_update( CLASSMODEL( clock ) ); symbol_recalculate_all(); nfn( sys, IWINDOW_YES ); } static void clock_edit( GtkWidget *parent, Model *model ) { Clock *clock = CLOCK( model ); GtkWidget *ss = stringset_new(); char txt[256]; im_snprintf( txt, 256, "%g", clock->interval ); stringset_child_new( STRINGSET( ss ), _( "Interval" ), txt, _( "Interval between ticks (seconds)" ) ); im_snprintf( txt, 256, "%g", clock->value ); stringset_child_new( STRINGSET( ss ), _( "Elapsed time" ), txt, _( "Elapsed time (seconds)" ) ); /* Expands to eg. "Edit Toggle A1". */ iwindow_set_title( IWINDOW( ss ), _( "Edit %s %s" ), IOBJECT_GET_CLASS_NAME( model ), IOBJECT( HEAPMODEL( model )->row )->name ); idialog_set_callbacks( IDIALOG( ss ), iwindow_true_cb, NULL, NULL, clock ); idialog_add_ok( IDIALOG( ss ), clock_done_cb, _( "Set %s" ), IOBJECT_GET_CLASS_NAME( model ) ); iwindow_set_parent( IWINDOW( ss ), GTK_WIDGET( parent ) ); idialog_set_iobject( IDIALOG( ss ), IOBJECT( model ) ); iwindow_build( IWINDOW( ss ) ); gtk_widget_show( ss ); } static gboolean clock_timeout_cb( Clock *clock ) { #ifdef DEBUG printf( "clock_timeout_cb: " ); row_name_print( HEAPMODEL( clock )->row ); printf( " interval=%g, value=%g\n", clock->interval, clock->value ); #endif /*DEBUG*/ /* Test autocalc ... if it's off, make sure we don't update the * interface. */ if( mainw_auto_recalc ) { clock->value = g_timer_elapsed( clock->elapsed_timer, NULL ) + clock->time_offset; classmodel_update( CLASSMODEL( clock ) ); symbol_recalculate_all(); } return( TRUE ); } static void * clock_update_model( Heapmodel *heapmodel ) { Clock *clock = CLOCK( heapmodel ); #ifdef DEBUG printf( "clock_update_model: " ); row_name_print( HEAPMODEL( clock )->row ); printf( " interval=%g, value=%g\n", clock->interval, clock->value ); #endif /*DEBUG*/ if( HEAPMODEL_CLASS( parent_class )->update_model( heapmodel ) ) return( heapmodel ); /* Milliseconds for the update timeout ... don't let it go under 100, * there's a danger the interface will lock up. */ int ms = IM_MAX( 100, clock->interval * 1000 ); IM_FREEF( g_source_remove, clock->recalc_timeout ); clock->recalc_timeout = g_timeout_add( ms, (GSourceFunc) clock_timeout_cb, clock ); /* Should we reset the timer from the value? */ if( clock->time_offset == -1 ) { g_timer_start( clock->elapsed_timer ); clock->time_offset = clock->value; } return( NULL ); } /* Override value_generate_caption(): pick from the model. */ static const char * clock_generate_caption( iObject *iobject ) { Value *value = VALUE( iobject ); ValueClass *value_class = VALUE_GET_CLASS( value ); Clock *clock = CLOCK( iobject ); VipsBuf *buf = &value->caption_buffer; vips_buf_rewind( buf ); if( !heapmodel_name( HEAPMODEL( value ), buf ) ) vips_buf_appends( buf, G_OBJECT_CLASS_NAME( value_class ) ); vips_buf_appendf( buf, " %g %g", clock->interval, clock->value ); return( vips_buf_all( buf ) ); } /* Members of clock we automate. */ static ClassmodelMember clock_members[] = { { CLASSMODEL_MEMBER_DOUBLE, NULL, 0, MEMBER_INTERVAL, "interval", N_( "Interval" ), G_STRUCT_OFFSET( Clock, interval ) }, { CLASSMODEL_MEMBER_DOUBLE, NULL, 0, MEMBER_VALUE, "value", N_( "Value" ), G_STRUCT_OFFSET( Clock, value ) } }; static void clock_class_init( ClockClass *class ) { GObjectClass *gobject_class = (GObjectClass *) class; iObjectClass *iobject_class = (iObjectClass *) class; ModelClass *model_class = (ModelClass *) class; HeapmodelClass *heapmodel_class = (HeapmodelClass *) class; ClassmodelClass *classmodel_class = (ClassmodelClass *) class; parent_class = g_type_class_peek_parent( class ); /* Create signals. */ /* Init methods. */ gobject_class->dispose = clock_dispose; iobject_class->user_name = _( "Clock" ); iobject_class->generate_caption = clock_generate_caption; model_class->edit = clock_edit; heapmodel_class->update_model = clock_update_model; /* Static init. */ model_register_loadable( MODEL_CLASS( class ) ); classmodel_class->members = clock_members; classmodel_class->n_members = IM_NUMBER( clock_members ); } static void clock_init( Clock *clock ) { #ifdef DEBUG printf( "clock_init\n" ); #endif /*DEBUG*/ /* Overridden later. Just something sensible. */ clock->interval = 1; clock->value = 0; /* time_offset: set to -1 means we should set the offset from value on * the next rebuild. */ clock->elapsed_timer = g_timer_new(); clock->time_offset = -1; clock->recalc_timeout = 0; iobject_set( IOBJECT( clock ), CLASS_CLOCK, NULL ); } GType clock_get_type( void ) { static GType type = 0; if( !type ) { static const GTypeInfo info = { sizeof( ClockClass ), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) clock_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof( Clock ), 32, /* n_preallocs */ (GInstanceInitFunc) clock_init, }; type = g_type_register_static( TYPE_VALUE, "Clock", &info, 0 ); } return( type ); } nip2-8.7.0/src/doubleclick.c0000644000175000017500000001267113277035100012537 00000000000000/* ip: display VASARI format files. * * doubleclick.c: separate single and double clicks on a widget */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #include #include #ifdef HAVE_UNISTD_H #include #endif /*HAVE_UNISTD_H*/ #include #include #include #include #include #include #include "doubleclick.h" #define FREEFI( F, S ) { if( S ) { (void) F( S ); (S) = 0; } } /* For debugging. #define DEBUG */ /* The struct we hold our private stuff inside. */ typedef struct doubleclick_info { GtkWidget *wid; /* Widget we are attached to */ guint click; /* Timer for click determination */ gboolean dsingle; /* Do single click on first click of double */ GdkEvent event; /* Copy of last event for clients */ DoubleclickFunc single; /* Callback for single click */ void *clients; /* Client data for single */ DoubleclickFunc dub; /* Callback for double click */ void *clientd; /* Client data for double */ } Doubleclick; /* Allocate and free clicks. */ static Doubleclick * doubleclick_new() { Doubleclick *click; if( !(click = IM_NEW( NULL, Doubleclick )) ) return( NULL ); click->wid = NULL; click->click = 0; click->dsingle = FALSE; click->single = NULL; click->dub = NULL; return( click ); } void doubleclick_free( Doubleclick *click ) { im_free( click ); } /* Timer callback for multiclick detection. */ static gboolean doubleclick_time_cb( Doubleclick *click ) { #ifdef DEBUG g_message( "doubleclick: timeout" ); #endif /*DEBUG*/ click->click = 0; /* There has been no second click before the timeout: we do a single * click. If st->dsingle is set though, we have already delivered the * single-click event, so don't bother. */ if( !click->dsingle && click->single ) { #ifdef DEBUG g_message( "doubleclick: timeout - calling single" ); #endif /*DEBUG*/ click->single( click->wid, &click->event, click->clients ); } /* Stop timer. */ return( FALSE ); } /* There has been an event. Is it single or double? */ static gboolean doubleclick_trigger_cb( GtkWidget *wid, GdkEvent *ev, Doubleclick *click ) { gboolean handled = FALSE; /* Make sure we have a button 1 press. */ if( ev->type != GDK_BUTTON_PRESS || ev->button.button != 1 ) return( handled ); /* Note event for client. */ click->event = *ev; if( click->click ) { /* There is a timeout pending - ie. there was a click * recently. This must be the second part of a double click. * Cancel the timeout and do a double click action. */ FREEFI( g_source_remove, click->click ); if( click->dub ) { #ifdef DEBUG g_message( "doubleclick: seen double" ); #endif /*DEBUG*/ click->dub( click->wid, &click->event, click->clientd ); handled = TRUE; } } else { #ifdef DEBUG g_message( "doubleclick: starting timer" ); #endif /*DEBUG*/ /* No previous click. This may be either. Start a timeout to * help us decide. * * We aren't supposed to look at double_click_time, but * there's no access method, I think. */ click->click = g_timeout_add( gtk_widget_get_display( wid )->double_click_time, (GSourceFunc) doubleclick_time_cb, click ); /* If do-single-on-double is set, we can trigger a * single-click now. */ if( click->dsingle && click->single ) { click->single( click->wid, &click->event, click->clients ); handled = TRUE; } } return( handled ); } /* Destroy a doubleclick_info. */ /*ARGSUSED*/ static void doubleclick_destroy_cb( GtkWidget *wid, Doubleclick *click ) { #ifdef DEBUG g_message( "doubleclick: destroyed" ); #endif /*DEBUG*/ if( click->click ) { /* Don't trigger a single-click, even though there was one * recently, since our widget is being destroyed. */ FREEFI( g_source_remove, click->click ); } doubleclick_free( click ); } static void doubleclick_realize_cb( GtkWidget *wid ) { gtk_widget_add_events( wid, GDK_BUTTON_PRESS_MASK ); } /* Attach callbacks to a widget. */ void doubleclick_add( GtkWidget *wid, gboolean dsingle, DoubleclickFunc single, void *clients, DoubleclickFunc dub, void *clientd ) { Doubleclick *click = doubleclick_new(); /* Complete fields. */ click->wid = wid; click->dsingle = dsingle; click->single = single; click->dub = dub; click->clients = clients; click->clientd = clientd; /* Add callbacks. */ gtk_signal_connect( GTK_OBJECT( wid ), "destroy", GTK_SIGNAL_FUNC( doubleclick_destroy_cb ), click ); gtk_signal_connect( GTK_OBJECT( wid ), "event", GTK_SIGNAL_FUNC( doubleclick_trigger_cb ), click ); gtk_signal_connect( GTK_OBJECT( wid ), "realize", GTK_SIGNAL_FUNC( doubleclick_realize_cb ), NULL ); } nip2-8.7.0/src/fontname.c0000644000175000017500000000556513224651032012072 00000000000000/* an input fontname ... put/get methods */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #include "ip.h" static ClassmodelClass *parent_class = NULL; static void fontname_finalize( GObject *gobject ) { Fontname *fontname = FONTNAME( gobject ); IM_FREE( fontname->value ); G_OBJECT_CLASS( parent_class )->finalize( gobject ); } static View * fontname_view_new( Model *model, View *parent ) { return( fontnameview_new() ); } /* Members of fontname we automate. */ static ClassmodelMember fontname_members[] = { { CLASSMODEL_MEMBER_STRING, NULL, 0, MEMBER_CAPTION, "caption", N_( "Caption" ), G_STRUCT_OFFSET( iObject, caption ) }, { CLASSMODEL_MEMBER_STRING, NULL, 0, MEMBER_VALUE, "value", N_( "Value" ), G_STRUCT_OFFSET( Fontname, value ) } }; static void fontname_class_init( FontnameClass *class ) { GObjectClass *gobject_class = (GObjectClass *) class; ModelClass *model_class = (ModelClass *) class; ClassmodelClass *classmodel_class = (ClassmodelClass *) class; parent_class = g_type_class_peek_parent( class ); gobject_class->finalize = fontname_finalize; model_class->view_new = fontname_view_new; /* Static init. */ model_register_loadable( MODEL_CLASS( class ) ); classmodel_class->members = fontname_members; classmodel_class->n_members = IM_NUMBER( fontname_members ); } static void fontname_init( Fontname *fontname ) { /* Overridden later. Just something sensible. */ fontname->value = NULL; IM_SETSTR( fontname->value, "Sans" ); iobject_set( IOBJECT( fontname ), CLASS_FONTNAME, NULL ); } GType fontname_get_type( void ) { static GType type = 0; if( !type ) { static const GTypeInfo info = { sizeof( FontnameClass ), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) fontname_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof( Fontname ), 32, /* n_preallocs */ (GInstanceInitFunc) fontname_init, }; type = g_type_register_static( TYPE_CLASSMODEL, "Fontname", &info, 0 ); } return( type ); } nip2-8.7.0/src/call.h0000644000175000017500000001023013224651032011164 00000000000000/* Call vips functions from the graph reducer. */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with CALL - http://www.vips.ecs.soton.ac.uk */ /* Maxiumum number of args to a CALL function. */ #define MAX_CALL_ARGS (100) /* Maximum length of a vector we pass to INTVEC etc. */ #define MAX_VEC (10000) typedef enum _CallArgumentType { CALL_NONE = -1, CALL_DOUBLE = 0, CALL_INT, CALL_COMPLEX, CALL_STRING, CALL_IMAGE, CALL_DOUBLEVEC, CALL_DMASK, CALL_IMASK, CALL_IMAGEVEC, CALL_INTVEC, CALL_GVALUE, CALL_INTERPOLATE } CallArgumentType; #define TYPE_CALL_INFO (call_info_get_type()) #define CALL_INFO( obj ) \ (G_TYPE_CHECK_INSTANCE_CAST( (obj), TYPE_CALL_INFO, CallInfo )) #define CALL_INFO_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_CAST( (klass), TYPE_CALL_INFO, CallInfoClass)) #define IS_CALL_INFO( obj ) \ (G_TYPE_CHECK_INSTANCE_TYPE( (obj), TYPE_CALL_INFO )) #define IS_CALL_INFO_CLASS( klass ) \ (G_TYPE_CHECK_CLASS_TYPE( (klass), TYPE_CALL_INFO )) #define CALL_INFO_GET_CLASS( obj ) \ (G_TYPE_INSTANCE_GET_CLASS( (obj), TYPE_CALL_INFO, CallInfoClass )) /* Stuff we hold about a call to a CALL function. */ typedef struct _CallInfo { iObject parent_object; /* Environment. */ const char *name; im_function *fn; /* Function we call */ Reduce *rc; /* RC we run inside */ /* Args we build. Images in vargv are IMAGE* pointers. */ im_object *vargv; /* vargv we build for CALL */ int nargs; /* Number of args needed from ip */ int nres; /* Number of objects we write back */ int nires; /* Number of images we write back */ int inpos[MAX_CALL_ARGS]; /* Positions of inputs */ int outpos[MAX_CALL_ARGS]; /* Positions of outputs */ /* Input images. Need to track "destroy" on each one (and kill us * in turn). * * RW images are a bit different. These are really output images (we * create the image that gets passed to the operation, just like * output images), but it's a "t" image and we im_copy() an input to * it to init it. * * So RW images appear in both inii and outii, but we don't look for * destroy for it. */ int ninii; Imageinfo *inii[MAX_CALL_ARGS]; unsigned int inii_destroy_sid[MAX_CALL_ARGS]; unsigned int inii_invalidate_sid[MAX_CALL_ARGS]; /* Output images. */ int noutii; Imageinfo *outii[MAX_CALL_ARGS]; unsigned int outii_destroy_sid[MAX_CALL_ARGS]; gboolean use_lut; /* TRUE for using a lut */ /* Cache hash code here. */ unsigned int hash; gboolean found_hash; /* Set if we're in the history cache. */ gboolean in_cache; /* Set if we hold refs in inii/outii that must be dropped. */ gboolean must_drop; } CallInfo; typedef struct _CallInfoClass { iObjectClass parent_class; } CallInfoClass; extern GSList *call_info_all; CallArgumentType call_lookup_type( im_arg_type type ); void call_error( CallInfo *vi ); void call_error_toomany( CallInfo *vi ); GType call_info_get_type( void ); void call_check_all_destroyed( void ); gboolean call_type_needs_input( im_type_desc *ty ); gboolean call_type_makes_output( im_type_desc *ty ); gboolean call_is_callable( im_function *fn ); int call_n_args( im_function *fn ); void call_usage( VipsBuf *buf, im_function *fn ); void call_spine( Reduce *rc, const char *name, HeapNode **arg, PElement *out ); void call_run( Reduce *rc, Compile *compile, int op, const char *name, HeapNode **arg, PElement *out, im_function *function ); void callva( Reduce *rc, PElement *out, const char *name, ... ); nip2-8.7.0/src/paintboxview.h0000644000175000017500000000366013224651032013001 00000000000000/* Decls for paintboxview.c ... widgets in the paint bar */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ extern iWindowShape paintboxview_shape[]; #define TYPE_PAINTBOXVIEW (paintboxview_get_type()) #define PAINTBOXVIEW( obj ) \ (GTK_CHECK_CAST( (obj), TYPE_PAINTBOXVIEW, Paintboxview )) #define PAINTBOXVIEW_CLASS( klass ) \ (GTK_CHECK_CLASS_CAST( (klass), TYPE_PAINTBOXVIEW, PaintboxviewClass )) #define IS_PAINTBOXVIEW( obj ) (GTK_CHECK_TYPE( (obj), TYPE_PAINTBOXVIEW )) #define IS_PAINTBOXVIEW_CLASS( klass ) \ (GTK_CHECK_CLASS_TYPE( (klass), TYPE_PAINTBOXVIEW )) struct _Paintboxview { GtkFrame parent_class; Imagemodel *imagemodel; /* Spot undo/redo changes on imagemodel->conv->ii. */ Imageinfo *ii; guint ii_undo_changed_sid; guint ii_destroy_sid; GtkWidget *undo; GtkWidget *redo; GtkWidget *clear; GtkWidget *tool[IMAGEMODEL_LAST]; Tslider *nib; GtkWidget *ink; GtkWidget *font; GtkWidget *text; }; typedef struct _PaintboxviewClass { GtkFrameClass parent_class; /* My methods. */ } PaintboxviewClass; GtkType paintboxview_get_type( void ); Paintboxview *paintboxview_new( Imagemodel *imagemodel ); nip2-8.7.0/aclocal.m40000644000175000017500000020660213350464103011164 00000000000000# generated automatically by aclocal 1.15.1 -*- Autoconf -*- # Copyright (C) 1996-2017 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, [m4_warning([this file was generated for autoconf 2.69. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) # Copyright (C) 1995-2002 Free Software Foundation, Inc. # Copyright (C) 2001-2003,2004 Red Hat, Inc. # # This file is free software, distributed under the terms of the GNU # General Public License. As a special exception to the GNU General # Public License, this file may be distributed as part of a program # that contains a configuration script generated by Autoconf, under # the same distribution terms as the rest of that program. # # This file can be copied and used freely without restrictions. It can # be used in projects which are not available under the GNU Public License # but which still want to provide support for the GNU gettext functionality. # # Macro to add for using GNU gettext. # Ulrich Drepper , 1995, 1996 # # Modified to never use included libintl. # Owen Taylor , 12/15/1998 # # Major rework to remove unused code # Owen Taylor , 12/11/2002 # # Added better handling of ALL_LINGUAS from GNU gettext version # written by Bruno Haible, Owen Taylor 5/30/3002 # # Modified to require ngettext # Matthias Clasen 08/06/2004 # Increment this whenever this file is changed. #serial 1 # We need this here as well, since someone might use autoconf-2.5x # to configure GLib then an older version to configure a package # using AM_GLIB_GNU_GETTEXT AC_PREREQ(2.53) dnl dnl We go to great lengths to make sure that aclocal won't dnl try to pull in the installed version of these macros dnl when running aclocal in the glib directory. dnl m4_copy([AC_DEFUN],[glib_DEFUN]) m4_copy([AC_REQUIRE],[glib_REQUIRE]) dnl dnl At the end, if we're not within glib, we'll define the public dnl definitions in terms of our private definitions. dnl # GLIB_LC_MESSAGES #-------------------- glib_DEFUN([GLIB_LC_MESSAGES], [AC_CHECK_HEADERS([locale.h]) if test $ac_cv_header_locale_h = yes; then AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES, [AC_TRY_LINK([#include ], [return LC_MESSAGES], am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)]) if test $am_cv_val_LC_MESSAGES = yes; then AC_DEFINE(HAVE_LC_MESSAGES, 1, [Define if your file defines LC_MESSAGES.]) fi fi]) # GLIB_PATH_PROG_WITH_TEST #---------------------------- dnl GLIB_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR, dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]]) glib_DEFUN([GLIB_PATH_PROG_WITH_TEST], [# Extract the first word of "$2", so it can be a program name with args. set dummy $2; ac_word=[$]2 AC_MSG_CHECKING([for $ac_word]) AC_CACHE_VAL(ac_cv_path_$1, [case "[$]$1" in /*) ac_cv_path_$1="[$]$1" # Let the user override the test with a path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" for ac_dir in ifelse([$5], , $PATH, [$5]); do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then if [$3]; then ac_cv_path_$1="$ac_dir/$ac_word" break fi fi done IFS="$ac_save_ifs" dnl If no 4th arg is given, leave the cache variable unset, dnl so AC_PATH_PROGS will keep looking. ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4" ])dnl ;; esac])dnl $1="$ac_cv_path_$1" if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then AC_MSG_RESULT([$]$1) else AC_MSG_RESULT(no) fi AC_SUBST($1)dnl ]) dnl Checks for special options needed on Mac OS X. dnl Defines INTL_MACOSX_LIBS. dnl dnl Copied from intlmacosx.m4 in gettext, GPL. dnl Copyright (C) 2004-2013 Free Software Foundation, Inc. glib_DEFUN([glib_gt_INTL_MACOSX], [ dnl Check for API introduced in Mac OS X 10.2. AC_CACHE_CHECK([for CFPreferencesCopyAppValue], [gt_cv_func_CFPreferencesCopyAppValue], [gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include ]], [[CFPreferencesCopyAppValue(NULL, NULL)]])], [gt_cv_func_CFPreferencesCopyAppValue=yes], [gt_cv_func_CFPreferencesCopyAppValue=no]) LIBS="$gt_save_LIBS"]) if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then AC_DEFINE([HAVE_CFPREFERENCESCOPYAPPVALUE], [1], [Define to 1 if you have the Mac OS X function CFPreferencesCopyAppValue in the CoreFoundation framework.]) fi dnl Check for API introduced in Mac OS X 10.3. AC_CACHE_CHECK([for CFLocaleCopyCurrent], [gt_cv_func_CFLocaleCopyCurrent], [gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include ]], [[CFLocaleCopyCurrent();]])], [gt_cv_func_CFLocaleCopyCurrent=yes], [gt_cv_func_CFLocaleCopyCurrent=no]) LIBS="$gt_save_LIBS"]) if test $gt_cv_func_CFLocaleCopyCurrent = yes; then AC_DEFINE([HAVE_CFLOCALECOPYCURRENT], [1], [Define to 1 if you have the Mac OS X function CFLocaleCopyCurrent in the CoreFoundation framework.]) fi INTL_MACOSX_LIBS= if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation" fi AC_SUBST([INTL_MACOSX_LIBS]) ]) # GLIB_WITH_NLS #----------------- glib_DEFUN([GLIB_WITH_NLS], dnl NLS is obligatory [USE_NLS=yes AC_SUBST(USE_NLS) gt_cv_have_gettext=no CATOBJEXT=NONE XGETTEXT=: INTLLIBS= glib_gt_INTL_MACOSX AC_CHECK_HEADER(libintl.h, [gt_cv_func_dgettext_libintl="no" libintl_extra_libs="" # # First check in libc # AC_CACHE_CHECK([for ngettext in libc], gt_cv_func_ngettext_libc, [AC_TRY_LINK([ #include ], [return !ngettext ("","", 1)], gt_cv_func_ngettext_libc=yes, gt_cv_func_ngettext_libc=no) ]) if test "$gt_cv_func_ngettext_libc" = "yes" ; then AC_CACHE_CHECK([for dgettext in libc], gt_cv_func_dgettext_libc, [AC_TRY_LINK([ #include ], [return !dgettext ("","")], gt_cv_func_dgettext_libc=yes, gt_cv_func_dgettext_libc=no) ]) fi if test "$gt_cv_func_ngettext_libc" = "yes" ; then AC_CHECK_FUNCS(bind_textdomain_codeset) fi # # If we don't have everything we want, check in libintl # if test "$gt_cv_func_dgettext_libc" != "yes" \ || test "$gt_cv_func_ngettext_libc" != "yes" \ || test "$ac_cv_func_bind_textdomain_codeset" != "yes" ; then AC_CHECK_LIB(intl, bindtextdomain, [AC_CHECK_LIB(intl, ngettext, [AC_CHECK_LIB(intl, dgettext, gt_cv_func_dgettext_libintl=yes)])]) if test "$gt_cv_func_dgettext_libintl" != "yes" ; then AC_MSG_CHECKING([if -liconv is needed to use gettext]) AC_MSG_RESULT([]) AC_CHECK_LIB(intl, ngettext, [AC_CHECK_LIB(intl, dcgettext, [gt_cv_func_dgettext_libintl=yes libintl_extra_libs=-liconv], :,-liconv)], :,-liconv) fi # # If we found libintl, then check in it for bind_textdomain_codeset(); # we'll prefer libc if neither have bind_textdomain_codeset(), # and both have dgettext and ngettext # if test "$gt_cv_func_dgettext_libintl" = "yes" ; then glib_save_LIBS="$LIBS" LIBS="$LIBS -lintl $libintl_extra_libs" unset ac_cv_func_bind_textdomain_codeset AC_CHECK_FUNCS(bind_textdomain_codeset) LIBS="$glib_save_LIBS" if test "$ac_cv_func_bind_textdomain_codeset" = "yes" ; then gt_cv_func_dgettext_libc=no else if test "$gt_cv_func_dgettext_libc" = "yes" \ && test "$gt_cv_func_ngettext_libc" = "yes"; then gt_cv_func_dgettext_libintl=no fi fi fi fi if test "$gt_cv_func_dgettext_libc" = "yes" \ || test "$gt_cv_func_dgettext_libintl" = "yes"; then gt_cv_have_gettext=yes fi if test "$gt_cv_func_dgettext_libintl" = "yes"; then INTLLIBS="-lintl $libintl_extra_libs $INTL_MACOSX_LIBS" fi if test "$gt_cv_have_gettext" = "yes"; then AC_DEFINE(HAVE_GETTEXT,1, [Define if the GNU gettext() function is already present or preinstalled.]) GLIB_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, [test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], no)dnl if test "$MSGFMT" != "no"; then glib_save_LIBS="$LIBS" LIBS="$LIBS $INTLLIBS" AC_CHECK_FUNCS(dcgettext) MSGFMT_OPTS= AC_MSG_CHECKING([if msgfmt accepts -c]) GLIB_RUN_PROG([$MSGFMT -c -o /dev/null],[ msgid "" msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Project-Id-Version: test 1.0\n" "PO-Revision-Date: 2007-02-15 12:01+0100\n" "Last-Translator: test \n" "Language-Team: C \n" "MIME-Version: 1.0\n" "Content-Transfer-Encoding: 8bit\n" ], [MSGFMT_OPTS=-c; AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no])]) AC_SUBST(MSGFMT_OPTS) AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) GLIB_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :) AC_TRY_LINK(, [extern int _nl_msg_cat_cntr; return _nl_msg_cat_cntr], [CATOBJEXT=.gmo DATADIRNAME=share], [case $host in *-*-solaris*) dnl On Solaris, if bind_textdomain_codeset is in libc, dnl GNU format message catalog is always supported, dnl since both are added to the libc all together. dnl Hence, we'd like to go with DATADIRNAME=share and dnl and CATOBJEXT=.gmo in this case. AC_CHECK_FUNC(bind_textdomain_codeset, [CATOBJEXT=.gmo DATADIRNAME=share], [CATOBJEXT=.mo DATADIRNAME=lib]) ;; *-*-openbsd*) CATOBJEXT=.mo DATADIRNAME=share ;; *) CATOBJEXT=.mo DATADIRNAME=lib ;; esac]) LIBS="$glib_save_LIBS" INSTOBJEXT=.mo else gt_cv_have_gettext=no fi fi ]) if test "$gt_cv_have_gettext" = "yes" ; then AC_DEFINE(ENABLE_NLS, 1, [always defined to indicate that i18n is enabled]) fi dnl Test whether we really found GNU xgettext. if test "$XGETTEXT" != ":"; then dnl If it is not GNU xgettext we define it as : so that the dnl Makefiles still can work. if $XGETTEXT --omit-header /dev/null 2> /dev/null; then : ; else AC_MSG_RESULT( [found xgettext program is not GNU xgettext; ignore it]) XGETTEXT=":" fi fi # We need to process the po/ directory. POSUB=po AC_OUTPUT_COMMANDS( [case "$CONFIG_FILES" in *po/Makefile.in*) sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile esac]) dnl These rules are solely for the distribution goal. While doing this dnl we only have to keep exactly one list of the available catalogs dnl in configure.ac. for lang in $ALL_LINGUAS; do GMOFILES="$GMOFILES $lang.gmo" POFILES="$POFILES $lang.po" done dnl Make all variables we use known to autoconf. AC_SUBST(CATALOGS) AC_SUBST(CATOBJEXT) AC_SUBST(DATADIRNAME) AC_SUBST(GMOFILES) AC_SUBST(INSTOBJEXT) AC_SUBST(INTLLIBS) AC_SUBST(PO_IN_DATADIR_TRUE) AC_SUBST(PO_IN_DATADIR_FALSE) AC_SUBST(POFILES) AC_SUBST(POSUB) ]) # AM_GLIB_GNU_GETTEXT # ------------------- # Do checks necessary for use of gettext. If a suitable implementation # of gettext is found in either in libintl or in the C library, # it will set INTLLIBS to the libraries needed for use of gettext # and AC_DEFINE() HAVE_GETTEXT and ENABLE_NLS. (The shell variable # gt_cv_have_gettext will be set to "yes".) It will also call AC_SUBST() # on various variables needed by the Makefile.in.in installed by # glib-gettextize. dnl AU_DEFUN([GLIB_GNU_GETTEXT], [AC_REQUIRE([AC_PROG_CC])dnl GLIB_LC_MESSAGES GLIB_WITH_NLS if test "$gt_cv_have_gettext" = "yes"; then if test "x$ALL_LINGUAS" = "x"; then LINGUAS= else AC_MSG_CHECKING(for catalogs to be installed) NEW_LINGUAS= for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "${LINGUAS-%UNSET%}"; then desiredlanguages="$LINGUAS" else desiredlanguages="$ALL_LINGUAS" fi for desiredlang in $desiredlanguages; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang"*) useit=yes;; esac done if test $useit = yes; then NEW_LINGUAS="$NEW_LINGUAS $presentlang" fi done LINGUAS=$NEW_LINGUAS AC_MSG_RESULT($LINGUAS) fi dnl Construct list of names of catalog files to be constructed. if test -n "$LINGUAS"; then for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done fi fi dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly dnl find the mkinstalldirs script in another subdir but ($top_srcdir). dnl Try to locate is. MKINSTALLDIRS= if test -n "$ac_aux_dir"; then MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" fi if test -z "$MKINSTALLDIRS"; then MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" fi AC_SUBST(MKINSTALLDIRS) dnl Generate list of files to be processed by xgettext which will dnl be included in po/Makefile. test -d po || mkdir po if test "x$srcdir" != "x."; then if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then posrcprefix="$srcdir/" else posrcprefix="../$srcdir/" fi else posrcprefix="../" fi rm -f po/POTFILES sed -e "/^#/d" -e "/^\$/d" -e "s,.*, $posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \ < $srcdir/po/POTFILES.in > po/POTFILES ], [[$0: This macro is deprecated. You should use upstream gettext instead.]]) # AM_GLIB_DEFINE_LOCALEDIR(VARIABLE) # ------------------------------- # Define VARIABLE to the location where catalog files will # be installed by po/Makefile. glib_DEFUN([GLIB_DEFINE_LOCALEDIR], [glib_REQUIRE([GLIB_GNU_GETTEXT])dnl glib_save_prefix="$prefix" glib_save_exec_prefix="$exec_prefix" glib_save_datarootdir="$datarootdir" test "x$prefix" = xNONE && prefix=$ac_default_prefix test "x$exec_prefix" = xNONE && exec_prefix=$prefix datarootdir=`eval echo "${datarootdir}"` if test "x$CATOBJEXT" = "x.mo" ; then localedir=`eval echo "${libdir}/locale"` else localedir=`eval echo "${datadir}/locale"` fi prefix="$glib_save_prefix" exec_prefix="$glib_save_exec_prefix" datarootdir="$glib_save_datarootdir" AC_DEFINE_UNQUOTED($1, "$localedir", [Define the location where the catalogs will be installed]) ]) dnl dnl Now the definitions that aclocal will find dnl ifdef(glib_configure_ac,[],[ AC_DEFUN([AM_GLIB_GNU_GETTEXT],[GLIB_GNU_GETTEXT($@)]) AC_DEFUN([AM_GLIB_DEFINE_LOCALEDIR],[GLIB_DEFINE_LOCALEDIR($@)]) ])dnl # GLIB_RUN_PROG(PROGRAM, TEST-FILE, [ACTION-IF-PASS], [ACTION-IF-FAIL]) # # Create a temporary file with TEST-FILE as its contents and pass the # file name to PROGRAM. Perform ACTION-IF-PASS if PROGRAM exits with # 0 and perform ACTION-IF-FAIL for any other exit status. AC_DEFUN([GLIB_RUN_PROG], [cat >conftest.foo <<_ACEOF $2 _ACEOF if AC_RUN_LOG([$1 conftest.foo]); then m4_ifval([$3], [$3], [:]) m4_ifvaln([$4], [else $4])dnl echo "$as_me: failed input was:" >&AS_MESSAGE_LOG_FD sed 's/^/| /' conftest.foo >&AS_MESSAGE_LOG_FD fi]) dnl pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- dnl serial 11 (pkg-config-0.29.1) dnl dnl Copyright © 2004 Scott James Remnant . dnl Copyright © 2012-2015 Dan Nicholson dnl dnl This program is free software; you can redistribute it and/or modify dnl it under the terms of the GNU General Public License as published by dnl the Free Software Foundation; either version 2 of the License, or dnl (at your option) any later version. dnl dnl This program is distributed in the hope that it will be useful, but dnl WITHOUT ANY WARRANTY; without even the implied warranty of dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU dnl General Public License for more details. dnl dnl You should have received a copy of the GNU General Public License dnl along with this program; if not, write to the Free Software dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA dnl 02111-1307, USA. dnl dnl As a special exception to the GNU General Public License, if you dnl distribute this file as part of a program that contains a dnl configuration script generated by Autoconf, you may include it under dnl the same distribution terms that you use for the rest of that dnl program. dnl PKG_PREREQ(MIN-VERSION) dnl ----------------------- dnl Since: 0.29 dnl dnl Verify that the version of the pkg-config macros are at least dnl MIN-VERSION. Unlike PKG_PROG_PKG_CONFIG, which checks the user's dnl installed version of pkg-config, this checks the developer's version dnl of pkg.m4 when generating configure. dnl dnl To ensure that this macro is defined, also add: dnl m4_ifndef([PKG_PREREQ], dnl [m4_fatal([must install pkg-config 0.29 or later before running autoconf/autogen])]) dnl dnl See the "Since" comment for each macro you use to see what version dnl of the macros you require. m4_defun([PKG_PREREQ], [m4_define([PKG_MACROS_VERSION], [0.29.1]) m4_if(m4_version_compare(PKG_MACROS_VERSION, [$1]), -1, [m4_fatal([pkg.m4 version $1 or higher is required but ]PKG_MACROS_VERSION[ found])]) ])dnl PKG_PREREQ dnl PKG_PROG_PKG_CONFIG([MIN-VERSION]) dnl ---------------------------------- dnl Since: 0.16 dnl dnl Search for the pkg-config tool and set the PKG_CONFIG variable to dnl first found in the path. Checks that the version of pkg-config found dnl is at least MIN-VERSION. If MIN-VERSION is not specified, 0.9.0 is dnl used since that's the first version where most current features of dnl pkg-config existed. AC_DEFUN([PKG_PROG_PKG_CONFIG], [m4_pattern_forbid([^_?PKG_[A-Z_]+$]) m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$]) AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility]) AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path]) AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path]) if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) fi if test -n "$PKG_CONFIG"; then _pkg_min_version=m4_default([$1], [0.9.0]) AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) PKG_CONFIG="" fi fi[]dnl ])dnl PKG_PROG_PKG_CONFIG dnl PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) dnl ------------------------------------------------------------------- dnl Since: 0.18 dnl dnl Check to see whether a particular set of modules exists. Similar to dnl PKG_CHECK_MODULES(), but does not set variables or print errors. dnl dnl Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) dnl only at the first occurence in configure.ac, so if the first place dnl it's called might be skipped (such as if it is within an "if", you dnl have to call PKG_CHECK_EXISTS manually AC_DEFUN([PKG_CHECK_EXISTS], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl if test -n "$PKG_CONFIG" && \ AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then m4_default([$2], [:]) m4_ifvaln([$3], [else $3])dnl fi]) dnl _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) dnl --------------------------------------------- dnl Internal wrapper calling pkg-config via PKG_CONFIG and setting dnl pkg_failed based on the result. m4_define([_PKG_CONFIG], [if test -n "$$1"; then pkg_cv_[]$1="$$1" elif test -n "$PKG_CONFIG"; then PKG_CHECK_EXISTS([$3], [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) else pkg_failed=untried fi[]dnl ])dnl _PKG_CONFIG dnl _PKG_SHORT_ERRORS_SUPPORTED dnl --------------------------- dnl Internal check to see if pkg-config supports short errors. AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], [AC_REQUIRE([PKG_PROG_PKG_CONFIG]) if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi[]dnl ])dnl _PKG_SHORT_ERRORS_SUPPORTED dnl PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], dnl [ACTION-IF-NOT-FOUND]) dnl -------------------------------------------------------------- dnl Since: 0.4.0 dnl dnl Note that if there is a possibility the first call to dnl PKG_CHECK_MODULES might not happen, you should be sure to include an dnl explicit call to PKG_PROG_PKG_CONFIG in your configure.ac AC_DEFUN([PKG_CHECK_MODULES], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl pkg_failed=no AC_MSG_CHECKING([for $1]) _PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) _PKG_CONFIG([$1][_LIBS], [libs], [$2]) m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS and $1[]_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details.]) if test $pkg_failed = yes; then AC_MSG_RESULT([no]) _PKG_SHORT_ERRORS_SUPPORTED if test $_pkg_short_errors_supported = yes; then $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1` else $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD m4_default([$4], [AC_MSG_ERROR( [Package requirements ($2) were not met: $$1_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. _PKG_TEXT])[]dnl ]) elif test $pkg_failed = untried; then AC_MSG_RESULT([no]) m4_default([$4], [AC_MSG_FAILURE( [The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. _PKG_TEXT To get pkg-config, see .])[]dnl ]) else $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS $1[]_LIBS=$pkg_cv_[]$1[]_LIBS AC_MSG_RESULT([yes]) $3 fi[]dnl ])dnl PKG_CHECK_MODULES dnl PKG_CHECK_MODULES_STATIC(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], dnl [ACTION-IF-NOT-FOUND]) dnl --------------------------------------------------------------------- dnl Since: 0.29 dnl dnl Checks for existence of MODULES and gathers its build flags with dnl static libraries enabled. Sets VARIABLE-PREFIX_CFLAGS from --cflags dnl and VARIABLE-PREFIX_LIBS from --libs. dnl dnl Note that if there is a possibility the first call to dnl PKG_CHECK_MODULES_STATIC might not happen, you should be sure to dnl include an explicit call to PKG_PROG_PKG_CONFIG in your dnl configure.ac. AC_DEFUN([PKG_CHECK_MODULES_STATIC], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl _save_PKG_CONFIG=$PKG_CONFIG PKG_CONFIG="$PKG_CONFIG --static" PKG_CHECK_MODULES($@) PKG_CONFIG=$_save_PKG_CONFIG[]dnl ])dnl PKG_CHECK_MODULES_STATIC dnl PKG_INSTALLDIR([DIRECTORY]) dnl ------------------------- dnl Since: 0.27 dnl dnl Substitutes the variable pkgconfigdir as the location where a module dnl should install pkg-config .pc files. By default the directory is dnl $libdir/pkgconfig, but the default can be changed by passing dnl DIRECTORY. The user can override through the --with-pkgconfigdir dnl parameter. AC_DEFUN([PKG_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])]) m4_pushdef([pkg_description], [pkg-config installation directory @<:@]pkg_default[@:>@]) AC_ARG_WITH([pkgconfigdir], [AS_HELP_STRING([--with-pkgconfigdir], pkg_description)],, [with_pkgconfigdir=]pkg_default) AC_SUBST([pkgconfigdir], [$with_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) ])dnl PKG_INSTALLDIR dnl PKG_NOARCH_INSTALLDIR([DIRECTORY]) dnl -------------------------------- dnl Since: 0.27 dnl dnl Substitutes the variable noarch_pkgconfigdir as the location where a dnl module should install arch-independent pkg-config .pc files. By dnl default the directory is $datadir/pkgconfig, but the default can be dnl changed by passing DIRECTORY. The user can override through the dnl --with-noarch-pkgconfigdir parameter. AC_DEFUN([PKG_NOARCH_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])]) m4_pushdef([pkg_description], [pkg-config arch-independent installation directory @<:@]pkg_default[@:>@]) AC_ARG_WITH([noarch-pkgconfigdir], [AS_HELP_STRING([--with-noarch-pkgconfigdir], pkg_description)],, [with_noarch_pkgconfigdir=]pkg_default) AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) ])dnl PKG_NOARCH_INSTALLDIR dnl PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE, dnl [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) dnl ------------------------------------------- dnl Since: 0.28 dnl dnl Retrieves the value of the pkg-config variable for the given module. AC_DEFUN([PKG_CHECK_VAR], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl _PKG_CONFIG([$1], [variable="][$3]["], [$2]) AS_VAR_COPY([$1], [pkg_cv_][$1]) AS_VAR_IF([$1], [""], [$5], [$4])dnl ])dnl PKG_CHECK_VAR # Copyright (C) 2002-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.15' 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.15.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.15.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to # '$srcdir', '$srcdir/..', or '$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is '.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ([2.52])dnl m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], [$1], [CXX], [depcc="$CXX" am_compiler_list=], [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], [$1], [UPC], [depcc="$UPC" am_compiler_list=], [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES. AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE([dependency-tracking], [dnl AS_HELP_STRING( [--enable-dependency-tracking], [do not reject slow dependency extractors]) AS_HELP_STRING( [--disable-dependency-tracking], [speeds up one-time build])]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl AC_SUBST([am__nodep])dnl _AM_SUBST_NOTMAKE([am__nodep])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. 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"` # 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'`; 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-2017 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. AC_DEFUN([AM_WITH_DMALLOC], [AC_MSG_CHECKING([if malloc debugging is wanted]) AC_ARG_WITH([dmalloc], [AS_HELP_STRING([--with-dmalloc], [use dmalloc, as in http://www.dmalloc.com])], [if test "$withval" = yes; then AC_MSG_RESULT([yes]) AC_DEFINE([WITH_DMALLOC], [1], [Define if using the dmalloc debugging malloc package]) LIBS="$LIBS -ldmalloc" LDFLAGS="$LDFLAGS -g" else AC_MSG_RESULT([no]) fi], [AC_MSG_RESULT([no])]) ]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O. m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC]) [_AM_PROG_CC_C_O ]) # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.65])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [AC_DIAGNOSE([obsolete], [$0: two- and three-arguments forms are deprecated.]) m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if( m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), [ok:ok],, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) AM_MISSING_PROG([AUTOCONF], [autoconf]) AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) AM_MISSING_PROG([AUTOHEADER], [autoheader]) AM_MISSING_PROG([MAKEINFO], [makeinfo]) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # AC_SUBST([mkdir_p], ['$(MKDIR_P)']) # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES([CC])], [m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES([CXX])], [m4_define([AC_PROG_CXX], m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES([OBJC])], [m4_define([AC_PROG_OBJC], m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], [_AM_DEPENDENCIES([OBJCXX])], [m4_define([AC_PROG_OBJCXX], m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl ]) AC_REQUIRE([AM_SILENT_RULES])dnl dnl The testsuite driver may need to know about EXEEXT, so add the dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) fi fi dnl The trailing newline in this macro's definition is deliberate, for dnl backward compatibility and to allow trailing 'dnl'-style comments dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841. ]) dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST([install_sh])]) # Copyright (C) 2003-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MAKE_INCLUDE() # ----------------- # Check 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-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it is modern enough. # If it is, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= AC_MSG_WARN(['missing' script is too old or missing]) fi ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # -------------------- # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), [1])]) # _AM_SET_OPTIONS(OPTIONS) # ------------------------ # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Copyright (C) 1999-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_CC_C_O # --------------- # Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC # to automatically call this. AC_DEFUN([_AM_PROG_CC_C_O], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([compile])dnl AC_LANG_PUSH([C])dnl AC_CACHE_CHECK( [whether $CC understands -c and -o together], [am_cv_prog_cc_c_o], [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])]) # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i]) if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) # Copyright (C) 2001-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_RUN_LOG(COMMAND) # ------------------- # Run COMMAND, save the exit status in ac_status, and log it. # (This has been adapted from Autoconf's _AC_RUN_LOG macro.) AC_DEFUN([AM_RUN_LOG], [{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD (exit $ac_status); }]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi if test "$[2]" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT([yes]) # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi AC_CONFIG_COMMANDS_PRE( [AC_MSG_CHECKING([that generated files are newer than configure]) if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi AC_MSG_RESULT([done])]) rm -f conftest.file ]) # Copyright (C) 2009-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SILENT_RULES([DEFAULT]) # -------------------------- # Enable less verbose build rules; with the default set to DEFAULT # ("yes" being less verbose, "no" or empty being verbose). AC_DEFUN([AM_SILENT_RULES], [AC_ARG_ENABLE([silent-rules], [dnl AS_HELP_STRING( [--enable-silent-rules], [less verbose build output (undo: "make V=1")]) AS_HELP_STRING( [--disable-silent-rules], [verbose build output (undo: "make V=0")])dnl ]) case $enable_silent_rules in @%:@ ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; esac dnl dnl A few 'make' implementations (e.g., NonStop OS and NextStep) dnl do not support nested variable expansions. dnl See automake bug#9928 and bug#10237. am_make=${MAKE-make} AC_CACHE_CHECK([whether $am_make supports nested variables], [am_cv_make_support_nested_variables], [if AS_ECHO([['TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi]) if test $am_cv_make_support_nested_variables = yes; then dnl Using '$V' instead of '$(V)' breaks IRIX make. AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AC_SUBST([AM_V])dnl AM_SUBST_NOTMAKE([AM_V])dnl AC_SUBST([AM_DEFAULT_V])dnl AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl AC_SUBST([AM_DEFAULT_VERBOSITY])dnl AM_BACKSLASH='\' AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) # Copyright (C) 2001-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor 'install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in "make install-strip", and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # -------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of 'v7', 'ustar', or 'pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar # AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AC_SUBST([AMTAR], ['$${TAR-tar}']) # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' m4_if([$1], [v7], [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], [m4_case([$1], [ustar], [# The POSIX 1988 'ustar' format is defined with fixed-size fields. # There is notably a 21 bits limit for the UID and the GID. In fact, # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 # and bug#13588). am_max_uid=2097151 # 2^21 - 1 am_max_gid=$am_max_uid # The $UID and $GID variables are not portable, so we need to resort # to the POSIX-mandated id(1) utility. Errors in the 'id' calls # below are definitely unexpected, so allow the users to see them # (that is, avoid stderr redirection). am_uid=`id -u || echo unknown` am_gid=`id -g || echo unknown` AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) if test $am_uid -le $am_max_uid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) if test $am_gid -le $am_max_gid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi], [pax], [], [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Go ahead even if we have the value already cached. We do so because we # need to set the values for the 'am__tar' and 'am__untar' variables. _am_tools=${am_cv_prog_tar_$1-$_am_tools} for _am_tool in $_am_tools; do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works. rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([m4/libtool.m4]) m4_include([m4/ltoptions.m4]) m4_include([m4/ltsugar.m4]) m4_include([m4/ltversion.m4]) m4_include([m4/lt~obsolete.m4]) nip2-8.7.0/configure0000755000175000017500000215574213350464105011247 00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for nip2 8.7.0. # # Report bugs to . # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org and $0: vipsip@jiscmail.ac.uk about your system, including any $0: error possibly output before this message. Then install $0: a modern shell, or manually run the script under such a $0: shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" SHELL=${CONFIG_SHELL-/bin/sh} test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='nip2' PACKAGE_TARNAME='nip2' PACKAGE_VERSION='8.7.0' PACKAGE_STRING='nip2 8.7.0' PACKAGE_BUGREPORT='vipsip@jiscmail.ac.uk' PACKAGE_URL='' # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS TOP_SRCDIR IP_LIBS IP_CFLAGS UPDATE_DESKTOP_FALSE UPDATE_DESKTOP_TRUE UPDATE_DESKTOP_DATABASE UPDATE_MIME_DATABASE XDG_OPEN GSL_LIBS GSL_CFLAGS LIBGVC_LIBS LIBGVC_CFLAGS LIBGOFFICE_LIBS LIBGOFFICE_CFLAGS LIBGSF_LIBS LIBGSF_CFLAGS FFTW3_LIBS FFTW3_CFLAGS ALLOCA REQUIRED_PACKAGES_LIBS REQUIRED_PACKAGES_CFLAGS PKG_CONFIG_LIBDIR PKG_CONFIG_PATH PKG_CONFIG MKINSTALLDIRS POSUB POFILES PO_IN_DATADIR_FALSE PO_IN_DATADIR_TRUE INTLLIBS INSTOBJEXT GMOFILES DATADIRNAME CATOBJEXT CATALOGS XGETTEXT GMSGFMT MSGFMT_OPTS MSGFMT INTL_MACOSX_LIBS USE_NLS GETTEXT_PACKAGE CPP LT_SYS_LIBRARY_PATH OTOOL64 OTOOL LIPO NMEDIT DSYMUTIL MANIFEST_TOOL ac_ct_AR NM ac_ct_DUMPBIN DUMPBIN FGREP EGREP GREP SED LIBTOOL LD AS AR BISON RANLIB OBJDUMP DLLTOOL DLLWRAP WINDRES LN_S LEXLIB LEX_OUTPUT_ROOT LEX am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__quote am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC OS_WIN32_FALSE OS_WIN32_TRUE host_os host_vendor host_cpu host build_os build_vendor build_cpu build AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir runstatedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_silent_rules enable_debug enable_largefile enable_dependency_tracking enable_shared enable_static with_pic enable_fast_install with_aix_soname with_gnu_ld with_sysroot enable_libtool_lock with_dmalloc with_fftw3 with_libgsf with_libgoffice with_libgvc with_gsl enable_update_desktop ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS LT_SYS_LIBRARY_PATH CPP PKG_CONFIG PKG_CONFIG_PATH PKG_CONFIG_LIBDIR REQUIRED_PACKAGES_CFLAGS REQUIRED_PACKAGES_LIBS FFTW3_CFLAGS FFTW3_LIBS LIBGSF_CFLAGS LIBGSF_LIBS LIBGOFFICE_CFLAGS LIBGOFFICE_LIBS LIBGVC_CFLAGS LIBGVC_LIBS GSL_CFLAGS GSL_LIBS' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -runstatedir | --runstatedir | --runstatedi | --runstated \ | --runstate | --runstat | --runsta | --runst | --runs \ | --run | --ru | --r) ac_prev=runstatedir ;; -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ | --run=* | --ru=* | --r=*) runstatedir=$ac_optarg ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures nip2 8.7.0 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/nip2] --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 nip2 8.7.0:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: "make V=1") --disable-silent-rules verbose build output (undo: "make V=0") --enable-debug=[no/minimum/yes] turn on debugging [default=debug_default()] --disable-largefile omit support for large files --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build --enable-shared[=PKGS] build shared libraries [default=yes] --enable-static[=PKGS] build static libraries [default=yes] --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --disable-libtool-lock avoid locking (might break parallel builds) --disable-update-desktop disable update of desktop database 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-aix-soname=aix|svr4|both shared library versioning (aka "SONAME") variant to provide on AIX, [default=aix]. --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-sysroot[=DIR] Search for dependent libraries within DIR (or the compiler's sysroot if not specified). --with-dmalloc use dmalloc, as in http://www.dmalloc.com --without-fftw3 build without fftw3 (default: test) --without-libgsf build without libgsf (default: test) --without-libgoffice build without libgoffice (default: test) --without-libgvc build without libgvc (default: test) --without-gsl build without gsl (default: test) 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 LT_SYS_LIBRARY_PATH User-defined run-time library search path. CPP C preprocessor PKG_CONFIG path to pkg-config utility PKG_CONFIG_PATH directories to add to pkg-config's search path PKG_CONFIG_LIBDIR path overriding pkg-config's built-in search path REQUIRED_PACKAGES_CFLAGS C compiler flags for REQUIRED_PACKAGES, overriding pkg-config REQUIRED_PACKAGES_LIBS linker flags for REQUIRED_PACKAGES, overriding pkg-config FFTW3_CFLAGS C compiler flags for FFTW3, overriding pkg-config FFTW3_LIBS linker flags for FFTW3, overriding pkg-config LIBGSF_CFLAGS C compiler flags for LIBGSF, overriding pkg-config LIBGSF_LIBS linker flags for LIBGSF, overriding pkg-config LIBGOFFICE_CFLAGS C compiler flags for LIBGOFFICE, overriding pkg-config LIBGOFFICE_LIBS linker flags for LIBGOFFICE, overriding pkg-config LIBGVC_CFLAGS C compiler flags for LIBGVC, overriding pkg-config LIBGVC_LIBS linker flags for LIBGVC, overriding pkg-config GSL_CFLAGS C compiler flags for GSL, overriding pkg-config GSL_LIBS linker flags for GSL, overriding pkg-config 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 . _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 nip2 configure 8.7.0 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_try_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_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ( $as_echo "## ------------------------------------ ## ## Report this to vipsip@jiscmail.ac.uk ## ## ------------------------------------ ##" ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel # 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 nip2 $as_me 8.7.0, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # foreign stops complaints about a missing README (we use README.md instead) # and missing INSTALL (the standard Gnu INSTALL is not very useful) am__api_version='1.15' ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi if test "$2" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi rm -f conftest.file test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 $as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} fi if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if ${ac_cv_path_mkdir+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null # Check whether --enable-silent-rules was given. if test "${enable_silent_rules+set}" = set; then : enableval=$enable_silent_rules; fi case $enable_silent_rules in # ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=1;; esac am_make=${MAKE-make} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 $as_echo_n "checking whether $am_make supports nested variables... " >&6; } if ${am_cv_make_support_nested_variables+:} false; then : $as_echo_n "(cached) " >&6 else if $as_echo 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 $as_echo "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='nip2' VERSION='8.7.0' 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"} # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # mkdir_p='$(MKDIR_P)' # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar pax cpio none' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 fi fi ac_config_headers="$ac_config_headers config.h" MAJOR_VERSION=8 MINOR_VERSION=7 MICRO_VERSION=0 cat >>confdefs.h <<_ACEOF #define MAJOR_VERSION $MAJOR_VERSION _ACEOF cat >>confdefs.h <<_ACEOF #define MINOR_VERSION $MINOR_VERSION _ACEOF cat >>confdefs.h <<_ACEOF #define MICRO_VERSION $MICRO_VERSION _ACEOF # 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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for native Win32" >&5 $as_echo_n "checking for native Win32... " >&6; } case "$host" in *-*-mingw*) nip_os_win32=yes ;; *) nip_os_win32=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $nip_os_win32" >&5 $as_echo "$nip_os_win32" >&6; } if test x"$nip_os_win32" = "xyes"; then $as_echo "#define OS_WIN32 1" >>confdefs.h # makes gcc use win native alignment IP_CFLAGS="-mms-bitfields $IP_CFLAGS" fi # src/Makeile.am uses this to add an icon to the .exe if test x"$nip_os_win32" = "xyes"; then OS_WIN32_TRUE= OS_WIN32_FALSE='#' else OS_WIN32_TRUE='#' OS_WIN32_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Mac OS X" >&5 $as_echo_n "checking for Mac OS X... " >&6; } case "$host" in *-*-darwin*) nip_os_darwin=yes ;; *) nip_os_darwin=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $nip_os_darwin" >&5 $as_echo "$nip_os_darwin" >&6; } if test x"$nip_os_darwin" = "xyes"; then $as_echo "#define OS_DARWIN 1" >>confdefs.h fi # Check whether --enable-debug was given. if test "${enable_debug+set}" = set; then : enableval=$enable_debug; else enable_debug=no fi if test "x$enable_debug" = "xyes"; then NIP_DEBUG_FLAGS="-DDEBUG_FATAL -DDEBUG_LEAK" else NIP_DEBUG_FLAGS="-DG_DISABLE_CAST_CHECKS" if test "x$enable_debug" = "xno"; then NIP_DEBUG_FLAGS="$GLIB_DEBUG_FLAGS -DG_DISABLE_ASSERT -DG_DISABLE_CHECKS" fi fi IP_CFLAGS="$NIP_DEBUG_FLAGS $IP_CFLAGS" # we want largefile support, if possible 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 ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 $as_echo_n "checking whether $CC understands -c and -o together... " >&6; } if ${am_cv_prog_cc_c_o+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 $as_echo "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi # Check whether --enable-largefile was given. if test "${enable_largefile+set}" = set; then : enableval=$enable_largefile; fi if test "$enable_largefile" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5 $as_echo_n "checking for special C compiler options needed for large files... " >&6; } if ${ac_cv_sys_largefile_CC+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_sys_largefile_CC=no if test "$GCC" != yes; then ac_save_CC=$CC while :; do # IRIX 6.2 and later do not support large files by default, # so use the C compiler's -n32 option if that helps. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : break fi rm -f core conftest.err conftest.$ac_objext CC="$CC -n32" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_largefile_CC=' -n32'; break fi rm -f core conftest.err conftest.$ac_objext break done CC=$ac_save_CC rm -f conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5 $as_echo "$ac_cv_sys_largefile_CC" >&6; } if test "$ac_cv_sys_largefile_CC" != no; then CC=$CC$ac_cv_sys_largefile_CC fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5 $as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; } if ${ac_cv_sys_file_offset_bits+:} false; then : $as_echo_n "(cached) " >&6 else while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_file_offset_bits=no; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _FILE_OFFSET_BITS 64 #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_file_offset_bits=64; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_sys_file_offset_bits=unknown break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5 $as_echo "$ac_cv_sys_file_offset_bits" >&6; } case $ac_cv_sys_file_offset_bits in #( no | unknown) ;; *) cat >>confdefs.h <<_ACEOF #define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits _ACEOF ;; esac rm -rf conftest* if test $ac_cv_sys_file_offset_bits = unknown; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5 $as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; } if ${ac_cv_sys_large_files+:} false; then : $as_echo_n "(cached) " >&6 else while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_large_files=no; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _LARGE_FILES 1 #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_large_files=1; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_sys_large_files=unknown break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5 $as_echo "$ac_cv_sys_large_files" >&6; } case $ac_cv_sys_large_files in #( no | unknown) ;; *) cat >>confdefs.h <<_ACEOF #define _LARGE_FILES $ac_cv_sys_large_files _ACEOF ;; esac rm -rf conftest* fi fi # 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 $as_echo_n "checking whether $CC understands -c and -o together... " >&6; } if ${am_cv_prog_cc_c_o+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 $as_echo "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi for ac_prog in flex lex 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_LEX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$LEX"; then ac_cv_prog_LEX="$LEX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_LEX="$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 LEX=$ac_cv_prog_LEX if test -n "$LEX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LEX" >&5 $as_echo "$LEX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$LEX" && break done test -n "$LEX" || LEX=":" if test "x$LEX" != "x:"; then cat >conftest.l <<_ACEOF %% a { ECHO; } b { REJECT; } c { yymore (); } d { yyless (1); } e { /* IRIX 6.5 flex 2.5.4 underquotes its yyless argument. */ yyless ((input () != 0)); } f { unput (yytext[0]); } . { BEGIN INITIAL; } %% #ifdef YYTEXT_POINTER extern char *yytext; #endif int main (void) { return ! yylex () + ! yywrap (); } _ACEOF { { ac_try="$LEX conftest.l" 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 "$LEX conftest.l") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking lex output file root" >&5 $as_echo_n "checking lex output file root... " >&6; } if ${ac_cv_prog_lex_root+:} false; then : $as_echo_n "(cached) " >&6 else if test -f lex.yy.c; then ac_cv_prog_lex_root=lex.yy elif test -f lexyy.c; then ac_cv_prog_lex_root=lexyy else as_fn_error $? "cannot find output from $LEX; giving up" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_lex_root" >&5 $as_echo "$ac_cv_prog_lex_root" >&6; } LEX_OUTPUT_ROOT=$ac_cv_prog_lex_root if test -z "${LEXLIB+set}"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking lex library" >&5 $as_echo_n "checking lex library... " >&6; } if ${ac_cv_lib_lex+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_LIBS=$LIBS ac_cv_lib_lex='none needed' for ac_lib in '' -lfl -ll; do LIBS="$ac_lib $ac_save_LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ `cat $LEX_OUTPUT_ROOT.c` _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_lex=$ac_lib fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext test "$ac_cv_lib_lex" != 'none needed' && break done LIBS=$ac_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lex" >&5 $as_echo "$ac_cv_lib_lex" >&6; } test "$ac_cv_lib_lex" != 'none needed' && LEXLIB=$ac_cv_lib_lex fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether yytext is a pointer" >&5 $as_echo_n "checking whether yytext is a pointer... " >&6; } if ${ac_cv_prog_lex_yytext_pointer+:} false; then : $as_echo_n "(cached) " >&6 else # POSIX says lex can declare yytext either as a pointer or an array; the # default is implementation-dependent. Figure out which it is, since # not all implementations provide the %pointer and %array declarations. ac_cv_prog_lex_yytext_pointer=no ac_save_LIBS=$LIBS LIBS="$LEXLIB $ac_save_LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define YYTEXT_POINTER 1 `cat $LEX_OUTPUT_ROOT.c` _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_prog_lex_yytext_pointer=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_lex_yytext_pointer" >&5 $as_echo "$ac_cv_prog_lex_yytext_pointer" >&6; } if test $ac_cv_prog_lex_yytext_pointer = yes; then $as_echo "#define YYTEXT_POINTER 1" >>confdefs.h fi rm -f conftest.l $LEX_OUTPUT_ROOT.c fi # we must have flex or lex if test x"$LEX" = x:; then as_fn_error $? "lex/flex not found: $PACKAGE requires one of these" "$LINENO" 5 fi IP_LIBS="$IP_LIBS $LEXLIB" { $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 if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}windres", so it can be a program name with args. set dummy ${ac_tool_prefix}windres; 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_WINDRES+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$WINDRES"; then ac_cv_prog_WINDRES="$WINDRES" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_WINDRES="${ac_tool_prefix}windres" $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 WINDRES=$ac_cv_prog_WINDRES if test -n "$WINDRES"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WINDRES" >&5 $as_echo "$WINDRES" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_WINDRES"; then ac_ct_WINDRES=$WINDRES # Extract the first word of "windres", so it can be a program name with args. set dummy windres; 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_WINDRES+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_WINDRES"; then ac_cv_prog_ac_ct_WINDRES="$ac_ct_WINDRES" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_WINDRES="windres" $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_WINDRES=$ac_cv_prog_ac_ct_WINDRES if test -n "$ac_ct_WINDRES"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_WINDRES" >&5 $as_echo "$ac_ct_WINDRES" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_WINDRES" = x; then WINDRES="" 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 WINDRES=$ac_ct_WINDRES fi else WINDRES="$ac_cv_prog_WINDRES" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dllwrap", so it can be a program name with args. set dummy ${ac_tool_prefix}dllwrap; 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_DLLWRAP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DLLWRAP"; then ac_cv_prog_DLLWRAP="$DLLWRAP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DLLWRAP="${ac_tool_prefix}dllwrap" $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 DLLWRAP=$ac_cv_prog_DLLWRAP if test -n "$DLLWRAP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLWRAP" >&5 $as_echo "$DLLWRAP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DLLWRAP"; then ac_ct_DLLWRAP=$DLLWRAP # Extract the first word of "dllwrap", so it can be a program name with args. set dummy dllwrap; 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_DLLWRAP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DLLWRAP"; then ac_cv_prog_ac_ct_DLLWRAP="$ac_ct_DLLWRAP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DLLWRAP="dllwrap" $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_DLLWRAP=$ac_cv_prog_ac_ct_DLLWRAP if test -n "$ac_ct_DLLWRAP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLWRAP" >&5 $as_echo "$ac_ct_DLLWRAP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DLLWRAP" = x; then DLLWRAP="" 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 DLLWRAP=$ac_ct_DLLWRAP fi else DLLWRAP="$ac_cv_prog_DLLWRAP" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. set dummy ${ac_tool_prefix}dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DLLTOOL"; then ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DLLTOOL=$ac_cv_prog_DLLTOOL if test -n "$DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 $as_echo "$DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DLLTOOL"; then ac_ct_DLLTOOL=$DLLTOOL # Extract the first word of "dlltool", so it can be a program name with args. set dummy dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DLLTOOL"; then ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DLLTOOL="dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL if test -n "$ac_ct_DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 $as_echo "$ac_ct_DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DLLTOOL" = x; then DLLTOOL="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DLLTOOL=$ac_ct_DLLTOOL fi else DLLTOOL="$ac_cv_prog_DLLTOOL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 $as_echo "$OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OBJDUMP"; then ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OBJDUMP="objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 $as_echo "$ac_ct_OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then OBJDUMP="" 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 if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}bison", so it can be a program name with args. set dummy ${ac_tool_prefix}bison; 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_BISON+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$BISON"; then ac_cv_prog_BISON="$BISON" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_BISON="${ac_tool_prefix}bison" $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 BISON=$ac_cv_prog_BISON if test -n "$BISON"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BISON" >&5 $as_echo "$BISON" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_BISON"; then ac_ct_BISON=$BISON # Extract the first word of "bison", so it can be a program name with args. set dummy bison; 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_BISON+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_BISON"; then ac_cv_prog_ac_ct_BISON="$ac_ct_BISON" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_BISON="bison" $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_BISON=$ac_cv_prog_ac_ct_BISON if test -n "$ac_ct_BISON"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_BISON" >&5 $as_echo "$ac_ct_BISON" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_BISON" = x; then BISON="" 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 BISON=$ac_ct_BISON fi else BISON="$ac_cv_prog_BISON" fi # we have to have bison :-( maybe we could ship the generated .c/.h files? not # clear on their portability if test x"$BISON" = x; then as_fn_error $? "bison not found: $PACKAGE uses bison-only features" "$LINENO" 5 fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="${ac_tool_prefix}ar" $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 fi if test -z "$ac_cv_prog_AR"; then ac_ct_AR=$AR # Extract the first word of "ar", so it can be a program name with args. set dummy ar; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="ar" $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 if test "x$ac_ct_AR" = x; then AR="" 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 else AR="$ac_cv_prog_AR" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args. set dummy ${ac_tool_prefix}as; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AS+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AS"; then ac_cv_prog_AS="$AS" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AS="${ac_tool_prefix}as" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AS=$ac_cv_prog_AS if test -n "$AS"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AS" >&5 $as_echo "$AS" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_AS"; then ac_ct_AS=$AS # Extract the first word of "as", so it can be a program name with args. set dummy as; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_AS+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AS"; then ac_cv_prog_ac_ct_AS="$ac_ct_AS" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AS="as" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AS=$ac_cv_prog_ac_ct_AS if test -n "$ac_ct_AS"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AS" >&5 $as_echo "$ac_ct_AS" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_AS" = x; then AS="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AS=$ac_ct_AS fi else AS="$ac_cv_prog_AS" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ld", so it can be a program name with args. set dummy ${ac_tool_prefix}ld; 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_LD+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$LD"; then ac_cv_prog_LD="$LD" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_LD="${ac_tool_prefix}ld" $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 LD=$ac_cv_prog_LD if test -n "$LD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_LD"; then ac_ct_LD=$LD # Extract the first word of "ld", so it can be a program name with args. set dummy ld; 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_LD+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_LD"; then ac_cv_prog_ac_ct_LD="$ac_ct_LD" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_LD="ld" $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_LD=$ac_cv_prog_ac_ct_LD if test -n "$ac_ct_LD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LD" >&5 $as_echo "$ac_ct_LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_LD" = x; then LD="" 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 LD=$ac_ct_LD fi else LD="$ac_cv_prog_LD" fi enable_win32_dll=yes case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args. set dummy ${ac_tool_prefix}as; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AS+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AS"; then ac_cv_prog_AS="$AS" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AS="${ac_tool_prefix}as" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AS=$ac_cv_prog_AS if test -n "$AS"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AS" >&5 $as_echo "$AS" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_AS"; then ac_ct_AS=$AS # Extract the first word of "as", so it can be a program name with args. set dummy as; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_AS+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AS"; then ac_cv_prog_ac_ct_AS="$ac_ct_AS" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AS="as" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AS=$ac_cv_prog_ac_ct_AS if test -n "$ac_ct_AS"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AS" >&5 $as_echo "$ac_ct_AS" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_AS" = x; then AS="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AS=$ac_ct_AS fi else AS="$ac_cv_prog_AS" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. set dummy ${ac_tool_prefix}dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DLLTOOL"; then ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DLLTOOL=$ac_cv_prog_DLLTOOL if test -n "$DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 $as_echo "$DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DLLTOOL"; then ac_ct_DLLTOOL=$DLLTOOL # Extract the first word of "dlltool", so it can be a program name with args. set dummy dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DLLTOOL"; then ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DLLTOOL="dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL if test -n "$ac_ct_DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 $as_echo "$ac_ct_DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DLLTOOL" = x; then DLLTOOL="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DLLTOOL=$ac_ct_DLLTOOL fi else DLLTOOL="$ac_cv_prog_DLLTOOL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 $as_echo "$OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OBJDUMP"; then ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OBJDUMP="objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 $as_echo "$ac_ct_OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then OBJDUMP="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OBJDUMP=$ac_ct_OBJDUMP fi else OBJDUMP="$ac_cv_prog_OBJDUMP" fi ;; esac test -z "$AS" && AS=as test -z "$DLLTOOL" && DLLTOOL=dlltool test -z "$OBJDUMP" && OBJDUMP=objdump case `pwd` in *\ * | *\ *) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 $as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; esac macro_version='2.4.6' macro_revision='2.4.6' ltmain=$ac_aux_dir/ltmain.sh # Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\(["`$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 $as_echo_n "checking how to print strings... " >&6; } # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "" } case $ECHO in printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 $as_echo "printf" >&6; } ;; print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 $as_echo "print -r" >&6; } ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 $as_echo "cat" >&6; } ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 $as_echo_n "checking for a sed that does not truncate output... " >&6; } if ${ac_cv_path_SED+:} false; then : $as_echo_n "(cached) " >&6 else ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" done echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed { ac_script=; unset ac_script;} if test -z "$SED"; then ac_path_SED_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_SED" || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED case `"$ac_path_SED" --version 2>&1` in *GNU*) ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_SED_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_SED="$ac_path_SED" ac_path_SED_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_SED_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_SED"; then as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 fi else ac_cv_path_SED=$SED fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 $as_echo "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 $as_echo_n "checking for fgrep... " >&6; } if ${ac_cv_path_FGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 then ac_cv_path_FGREP="$GREP -F" else if test -z "$FGREP"; then ac_path_FGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in fgrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_FGREP" || continue # Check for GNU ac_path_FGREP and select it if it is found. # Check for GNU $ac_path_FGREP case `"$ac_path_FGREP" --version 2>&1` in *GNU*) ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'FGREP' >> "conftest.nl" "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_FGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_FGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_FGREP"; then as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_FGREP=$FGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 $as_echo "$ac_cv_path_FGREP" >&6; } FGREP="$ac_cv_path_FGREP" test -z "$GREP" && GREP=grep # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then : withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes else with_gnu_ld=no fi ac_prog=ld if test yes = "$GCC"; 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 yes = "$with_gnu_ld"; 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 # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty case $build_os in mingw*) lt_bad_file=conftest.nm/nofile ;; *) lt_bad_file=/dev/null ;; esac case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in *$lt_bad_file* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break 2 ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break 2 ;; *) 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 no != "$lt_cv_path_NM"; then NM=$lt_cv_path_NM else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else if test -n "$ac_tool_prefix"; then for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DUMPBIN"; then ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DUMPBIN=$ac_cv_prog_DUMPBIN if test -n "$DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 $as_echo "$DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$DUMPBIN" && break done fi if test -z "$DUMPBIN"; then ac_ct_DUMPBIN=$DUMPBIN for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DUMPBIN"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN if test -n "$ac_ct_DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 $as_echo "$ac_ct_DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_DUMPBIN" && break done if test "x$ac_ct_DUMPBIN" = x; then DUMPBIN=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DUMPBIN=$ac_ct_DUMPBIN fi fi case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols -headers" ;; *) 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; } # 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; ;; bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*) # 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" && \ test undefined != "$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 17 != "$i" # 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"} 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 yes != "$GCC"; then reload_cmds=false fi ;; darwin*) if test yes = "$GCC"; then reload_cmds='$LTCC $LTCFLAGS -nostdlib $wl-r -o $output$reload_objs' else reload_cmds='$LD$reload_flag -o $output$reload_objs' fi ;; esac if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 $as_echo "$OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OBJDUMP"; then ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OBJDUMP="objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 $as_echo "$ac_ct_OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then OBJDUMP="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OBJDUMP=$ac_ct_OBJDUMP fi else OBJDUMP="$ac_cv_prog_OBJDUMP" fi test -z "$OBJDUMP" && OBJDUMP=objdump { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 $as_echo_n "checking how to recognize dependent libraries... " >&6; } if ${lt_cv_deplibs_check_method+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # 'unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # that 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. if ( 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 ;; 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 | 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* | bitrig*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; 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 ;; os2*) lt_cv_deplibs_check_method=pass_all ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 $as_echo "$lt_cv_deplibs_check_method" >&6; } file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. set dummy ${ac_tool_prefix}dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DLLTOOL"; then ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DLLTOOL=$ac_cv_prog_DLLTOOL if test -n "$DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 $as_echo "$DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DLLTOOL"; then ac_ct_DLLTOOL=$DLLTOOL # Extract the first word of "dlltool", so it can be a program name with args. set dummy dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DLLTOOL"; then ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DLLTOOL="dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL if test -n "$ac_ct_DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 $as_echo "$ac_ct_DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DLLTOOL" = x; then DLLTOOL="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DLLTOOL=$ac_ct_DLLTOOL fi else DLLTOOL="$ac_cv_prog_DLLTOOL" fi test -z "$DLLTOOL" && DLLTOOL=dlltool { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 $as_echo_n "checking how to associate runtime and link libraries... " >&6; } if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh; # decide which one to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd=$ECHO ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 $as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO if test -n "$ac_tool_prefix"; then for ac_prog in ar do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 $as_echo "$AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AR" && break done fi if test -z "$AR"; then ac_ct_AR=$AR for ac_prog in ar do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 $as_echo "$ac_ct_AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_AR" && break done if test "x$ac_ct_AR" = x; then AR="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR fi fi : ${AR=ar} : ${AR_FLAGS=cru} { $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 $as_echo_n "checking for archiver @FILE support... " >&6; } if ${lt_cv_ar_at_file+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ar_at_file=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test 0 -eq "$ac_status"; 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 0 -ne "$ac_status"; 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 no = "$lt_cv_ar_at_file"; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi test -z "$STRIP" && STRIP=: if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi test -z "$RANLIB" && RANLIB=: # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in bitrig* | openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Check for command to grab the raw symbol name followed by C symbol from nm. { $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 $as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } if ${lt_cv_sys_global_symbol_pipe+:} false; then : $as_echo_n "(cached) " >&6 else # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[BCDEGRST]' # Regexp to match symbols that can be accessed directly from C. sympat='\([_A-Za-z][_A-Za-z0-9]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[BCDT]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[ABCDGISTW]' ;; hpux*) if test ia64 = "$host_cpu"; 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 if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Gets list of data symbols to import. lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'" # Adjust the below global symbol transforms to fixup imported variables. lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'" lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'" lt_c_name_lib_hook="\ -e 's/^I .* \(lib.*\)$/ {\"\1\", (void *) 0},/p'\ -e 's/^I .* \(.*\)$/ {\"lib\1\", (void *) 0},/p'" else # Disable hooks by default. lt_cv_sys_global_symbol_to_import= lt_cdecl_hook= lt_c_name_hook= lt_c_name_lib_hook= fi # 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"\ $lt_cdecl_hook\ " -e 's/^T .* \(.*\)$/extern int \1();/p'"\ " -e 's/^$symcode$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"\ $lt_c_name_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'" # Transform an extracted symbol line into symbol name with lib prefix and # symbol address. lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\ $lt_c_name_lib_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/ {\"lib\1\", (void *) \&\1},/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, # D for any global variable and I for any imported 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};"\ " /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\ " /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\ " /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\ " {split(\$ 0,a,/\||\r/); split(a[2],s)};"\ " s[1]~/^[@?]/{print f,s[1],s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print f,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 can'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* .* \(.*\)$/ {\"\1\", (void *) \&\1},/" < "$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 yes = "$pipe_works"; 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 yes = "$GCC"; 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; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a working dd" >&5 $as_echo_n "checking for a working dd... " >&6; } if ${ac_cv_path_lt_DD+:} false; then : $as_echo_n "(cached) " >&6 else printf 0123456789abcdef0123456789abcdef >conftest.i cat conftest.i conftest.i >conftest2.i : ${lt_DD:=$DD} if test -z "$lt_DD"; then ac_path_lt_DD_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 dd; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_lt_DD="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_lt_DD" || continue if "$ac_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then cmp -s conftest.i conftest.out \ && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=: fi $ac_path_lt_DD_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_lt_DD"; then : fi else ac_cv_path_lt_DD=$lt_DD fi rm -f conftest.i conftest2.i conftest.out fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_lt_DD" >&5 $as_echo "$ac_cv_path_lt_DD" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to truncate binary pipes" >&5 $as_echo_n "checking how to truncate binary pipes... " >&6; } if ${lt_cv_truncate_bin+:} false; then : $as_echo_n "(cached) " >&6 else printf 0123456789abcdef0123456789abcdef >conftest.i cat conftest.i conftest.i >conftest2.i lt_cv_truncate_bin= if "$ac_cv_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then cmp -s conftest.i conftest.out \ && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1" fi rm -f conftest.i conftest2.i conftest.out test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_truncate_bin" >&5 $as_echo "$lt_cv_truncate_bin" >&6; } # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. func_cc_basename () { for cc_temp in $*""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` } # Check whether --enable-libtool-lock was given. if test "${enable_libtool_lock+set}" = set; then : enableval=$enable_libtool_lock; fi test no = "$enable_libtool_lock" || 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 what ABI is being produced by ac_compile, and set mode # options accordingly. 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 what ABI is being produced by ac_compile, and set linker # options accordingly. 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 yes = "$lt_cv_prog_gnu_ld"; 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* ;; mips64*-*linux*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. 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 emul=elf case `/usr/bin/file conftest.$ac_objext` in *32-bit*) emul="${emul}32" ;; *64-bit*) emul="${emul}64" ;; esac case `/usr/bin/file conftest.$ac_objext` in *MSB*) emul="${emul}btsmip" ;; *LSB*) emul="${emul}ltsmip" ;; esac case `/usr/bin/file conftest.$ac_objext` in *N32*) emul="${emul}n32" ;; esac LD="${LD-ld} -m $emul" fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. Note that the listed cases only cover the # situations where additional linker options are needed (such as when # doing 32-bit compilation for a host where ld defaults to 64-bit, or # vice versa); the common cases where no linker options are needed do # not appear in the list. 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*) case `/usr/bin/file conftest.o` in *x86-64*) LD="${LD-ld} -m elf32_x86_64" ;; *) LD="${LD-ld} -m elf_i386" ;; esac ;; powerpc64le-*linux*) LD="${LD-ld} -m elf32lppclinux" ;; 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" ;; powerpcle-*linux*) LD="${LD-ld} -m elf64lppc" ;; 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 yes != "$lt_cv_cc_needs_belf"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS=$SAVE_CFLAGS fi ;; *-*solaris*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. 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*|x86_64-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD=${LD-ld}_sol2 fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks=$enable_libtool_lock if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. set dummy ${ac_tool_prefix}mt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$MANIFEST_TOOL"; then ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL if test -n "$MANIFEST_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 $as_echo "$MANIFEST_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_MANIFEST_TOOL"; then ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL # Extract the first word of "mt", so it can be a program name with args. set dummy mt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_MANIFEST_TOOL"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL if test -n "$ac_ct_MANIFEST_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 $as_echo "$ac_ct_MANIFEST_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_MANIFEST_TOOL" = x; then MANIFEST_TOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL fi else MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" fi test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 $as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } if ${lt_cv_path_mainfest_tool+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&5 if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 $as_echo "$lt_cv_path_mainfest_tool" >&6; } if test yes != "$lt_cv_path_mainfest_tool"; then MANIFEST_TOOL=: fi case $host_os in rhapsody* | darwin*) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DSYMUTIL"; then ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DSYMUTIL=$ac_cv_prog_DSYMUTIL if test -n "$DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 $as_echo "$DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DSYMUTIL"; then ac_ct_DSYMUTIL=$DSYMUTIL # Extract the first word of "dsymutil", so it can be a program name with args. set dummy dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DSYMUTIL"; then ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL if test -n "$ac_ct_DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 $as_echo "$ac_ct_DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DSYMUTIL" = x; then DSYMUTIL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DSYMUTIL=$ac_ct_DSYMUTIL fi else DSYMUTIL="$ac_cv_prog_DSYMUTIL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. set dummy ${ac_tool_prefix}nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NMEDIT"; then ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi NMEDIT=$ac_cv_prog_NMEDIT if test -n "$NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 $as_echo "$NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_NMEDIT"; then ac_ct_NMEDIT=$NMEDIT # Extract the first word of "nmedit", so it can be a program name with args. set dummy nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_NMEDIT"; then ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_NMEDIT="nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT if test -n "$ac_ct_NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 $as_echo "$ac_ct_NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_NMEDIT" = x; then NMEDIT=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac NMEDIT=$ac_ct_NMEDIT fi else NMEDIT="$ac_cv_prog_NMEDIT" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. set dummy ${ac_tool_prefix}lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$LIPO"; then ac_cv_prog_LIPO="$LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_LIPO="${ac_tool_prefix}lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi LIPO=$ac_cv_prog_LIPO if test -n "$LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 $as_echo "$LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_LIPO"; then ac_ct_LIPO=$LIPO # Extract the first word of "lipo", so it can be a program name with args. set dummy lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_LIPO"; then ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_LIPO="lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO if test -n "$ac_ct_LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 $as_echo "$ac_ct_LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_LIPO" = x; then LIPO=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac LIPO=$ac_ct_LIPO fi else LIPO="$ac_cv_prog_LIPO" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. set dummy ${ac_tool_prefix}otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL"; then ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL="${ac_tool_prefix}otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL=$ac_cv_prog_OTOOL if test -n "$OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 $as_echo "$OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL"; then ac_ct_OTOOL=$OTOOL # Extract the first word of "otool", so it can be a program name with args. set dummy otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL"; then ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL="otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL if test -n "$ac_ct_OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 $as_echo "$ac_ct_OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL" = x; then OTOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL=$ac_ct_OTOOL fi else OTOOL="$ac_cv_prog_OTOOL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. set dummy ${ac_tool_prefix}otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL64"; then ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL64=$ac_cv_prog_OTOOL64 if test -n "$OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 $as_echo "$OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL64"; then ac_ct_OTOOL64=$OTOOL64 # Extract the first word of "otool64", so it can be a program name with args. set dummy otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL64"; then ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL64="otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 if test -n "$ac_ct_OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 $as_echo "$ac_ct_OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL64" = x; then OTOOL64=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL64=$ac_ct_OTOOL64 fi else OTOOL64="$ac_cv_prog_OTOOL64" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 $as_echo_n "checking for -single_module linker flag... " >&6; } if ${lt_cv_apple_cc_single_mod+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_apple_cc_single_mod=no if test -z "$LT_MULTI_MODULE"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&5 $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&5 # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test 0 = "$_lt_result"; 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 0 = "$_lt_result" && $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 yes = "$lt_cv_apple_cc_single_mod"; then _lt_dar_single_mod='$single_module' fi if test yes = "$lt_cv_ld_exported_symbols_list"; 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 no = "$lt_cv_ld_force_load"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac # func_munge_path_list VARIABLE PATH # ----------------------------------- # VARIABLE is name of variable containing _space_ separated list of # directories to be munged by the contents of PATH, which is string # having a format: # "DIR[:DIR]:" # string "DIR[ DIR]" will be prepended to VARIABLE # ":DIR[:DIR]" # string "DIR[ DIR]" will be appended to VARIABLE # "DIRP[:DIRP]::[DIRA:]DIRA" # string "DIRP[ DIRP]" will be prepended to VARIABLE and string # "DIRA[ DIRA]" will be appended to VARIABLE # "DIR[:DIR]" # VARIABLE will be replaced by "DIR[ DIR]" func_munge_path_list () { case x$2 in x) ;; *:) eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" ;; x:*) eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" ;; *::*) eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" ;; *) eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" ;; 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 # 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 # 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 shared_archive_member_spec= case $host,$enable_shared in power*-*-aix[5-9]*,yes) { $as_echo "$as_me:${as_lineno-$LINENO}: checking which variant of shared library versioning to provide" >&5 $as_echo_n "checking which variant of shared library versioning to provide... " >&6; } # Check whether --with-aix-soname was given. if test "${with_aix_soname+set}" = set; then : withval=$with_aix_soname; case $withval in aix|svr4|both) ;; *) as_fn_error $? "Unknown argument to --with-aix-soname" "$LINENO" 5 ;; esac lt_cv_with_aix_soname=$with_aix_soname else if ${lt_cv_with_aix_soname+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_with_aix_soname=aix fi with_aix_soname=$lt_cv_with_aix_soname fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_aix_soname" >&5 $as_echo "$with_aix_soname" >&6; } if test aix != "$with_aix_soname"; then # For the AIX way of multilib, we name the shared archive member # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o', # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File. # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag, # the AIX toolchain works better with OBJECT_MODE set (default 32). if test 64 = "${OBJECT_MODE-32}"; then shared_archive_member_spec=shr_64 else shared_archive_member_spec=shr fi fi ;; *) with_aix_soname=aix ;; esac # 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 set != "${COLLECT_NAMES+set}"; 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 func_cc_basename $compiler cc_basename=$func_cc_basename_result # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 $as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } if ${lt_cv_path_MAGIC_CMD+:} false; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD=$MAGIC_CMD lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/${ac_tool_prefix}file"; then lt_cv_path_MAGIC_CMD=$ac_dir/"${ac_tool_prefix}file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD=$lt_cv_path_MAGIC_CMD if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS=$lt_save_ifs MAGIC_CMD=$lt_save_MAGIC_CMD ;; esac fi MAGIC_CMD=$lt_cv_path_MAGIC_CMD if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 $as_echo_n "checking for file... " >&6; } if ${lt_cv_path_MAGIC_CMD+:} false; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD=$MAGIC_CMD lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/file"; then lt_cv_path_MAGIC_CMD=$ac_dir/"file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD=$lt_cv_path_MAGIC_CMD if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS=$lt_save_ifs MAGIC_CMD=$lt_save_MAGIC_CMD ;; esac fi MAGIC_CMD=$lt_cv_path_MAGIC_CMD if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi else MAGIC_CMD=: fi fi fi ;; esac # Use C for the default configuration in the libtool script lt_save_CC=$CC ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o objext=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then lt_prog_compiler_no_builtin_flag= if test yes = "$GCC"; 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" ## exclude from sc_useless_quotes_in_assignment # 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 yes = "$lt_cv_prog_compiler_rtti_exceptions"; 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 yes = "$GCC"; then lt_prog_compiler_wl='-Wl,' lt_prog_compiler_static='-static' case $host_os in aix*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' fi lt_prog_compiler_pic='-fPIC' ;; 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' case $host_os in os2*) lt_prog_compiler_static='$wl-static' ;; esac ;; 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 ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' else lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' fi ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' case $cc_basename in nagfor*) # NAG Fortran compiler lt_prog_compiler_wl='-Wl,-Wl,,' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; esac ;; 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' case $host_os in os2*) lt_prog_compiler_static='$wl-static' ;; esac ;; 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 | 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' ;; tcc*) # Fabrice Bellard et al's Tiny C Compiler lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; 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 that 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" ## exclude from sc_useless_quotes_in_assignment # 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 yes = "$lt_cv_prog_compiler_pic_works"; 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 yes = "$lt_cv_prog_compiler_static_works"; 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 no = "$lt_cv_prog_compiler_c_o" && test no != "$need_locks"; 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 no = "$hard_links"; 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 yes != "$GCC"; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd* | bitrig*) 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 yes = "$with_gnu_ld"; 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 yes = "$lt_use_gnu_ld_interface"; 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 | $SED -e 's/(^)\+)\s\+//' 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 ia64 != "$host_cpu"; 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, use it as # is; otherwise, prepend EXPORTS... archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; 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 ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported shrext_cmds=.dll archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' enable_shared_with_static_runtimes=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 linux-dietlibc = "$host_os"; 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 no = "$tmp_diet" 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' ;; nagfor*) # NAGFOR 5.3 tmp_sharedflag='-Wl,-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 yes = "$supports_anon_versioning"; 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 tcc*) export_dynamic_flag_spec='-rdynamic' ;; 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 yes = "$supports_anon_versioning"; 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 cannot *** 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 no = "$ld_shlibs"; 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 yes = "$GCC" && 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 ia64 = "$host_cpu"; 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 GNU nm, but means don't demangle to AIX nm. # Without the "-l" option, or with the "-B" option, AIX nm treats # weak defined symbols like other global defined symbols, whereas # GNU nm marks them as "W". # While the 'weak' keyword is ignored in the Export File, we need # it in the Import File for the 'aix-soname' feature, so we have # to replace the "-B" option with "-P" for AIX nm. 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) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' else export_symbols_cmds='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | 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 # have runtime linking enabled, and use it for executables. # For shared libraries, we enable/disable runtime linking # depending on the kind of the shared library created - # when "with_aix_soname,aix_use_runtimelinking" is: # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables # "aix,yes" lib.so shared, rtl:yes, for executables # lib.a static archive # "both,no" lib.so.V(shr.o) shared, rtl:yes # lib.a(lib.so.V) shared, rtl:no, for executables # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a(lib.so.V) shared, rtl:no # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a static archive case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then aix_use_runtimelinking=yes break fi done if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then # With aix-soname=svr4, we create the lib.so.V shared archives only, # so we don't have lib.a shared libs to link our executables. # We have to force runtime linking in this case. aix_use_runtimelinking=yes LDFLAGS="$LDFLAGS -Wl,-brtl" fi ;; 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,' case $with_aix_soname,$aix_use_runtimelinking in aix,*) ;; # traditional, no import file svr4,* | *,yes) # use import file # The Import File defines what to hardcode. hardcode_direct=no hardcode_direct_absolute=no ;; esac if test yes = "$GCC"; 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 yes = "$aix_use_runtimelinking"; then shared_flag="$shared_flag "'$wl-G' fi # Need to ensure runtime linking is disabled for the traditional # shared library, or the linker may eventually find shared libraries # /with/ Import File - we do not want to mix them. shared_flag_aix='-shared' shared_flag_svr4='-shared $wl-G' else # not using gcc if test ia64 = "$host_cpu"; 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 yes = "$aix_use_runtimelinking"; then shared_flag='$wl-G' else shared_flag='$wl-bM:SRE' fi shared_flag_aix='$wl-bM:SRE' shared_flag_svr4='$wl-G' 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,yes = "$with_aix_soname,$aix_use_runtimelinking"; 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 set = "${lt_cv_aix_libpath+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 -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag else if test ia64 = "$host_cpu"; 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 set = "${lt_cv_aix_libpath+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 yes = "$with_gnu_ld"; 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 archive_expsym_cmds='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' # -brtl affects multiple linker settings, -berok does not and is overridden later compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([, ]\\)%-berok\\1%g"`' if test svr4 != "$with_aix_soname"; then # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' fi if test aix != "$with_aix_soname"; then archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' else # used by -dlpreopen to get the symbols archive_expsym_cmds="$archive_expsym_cmds"'~$MV $output_objdir/$realname.d/$soname $output_objdir' fi archive_expsym_cmds="$archive_expsym_cmds"'~$RM -r $output_objdir/$realname.d' 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,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then cp "$export_symbols" "$output_objdir/$soname.def"; echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; else $SED -e '\''s/^/-link -EXPORT:/'\'' < $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 yes = "$lt_cv_ld_force_load"; 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*|nagfor*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test yes = "$_lt_dar_can_shared"; 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 yes = "$GCC"; 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 "x$output_objdir/$soname" = "x$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 "x$output_objdir/$soname" = "x$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 yes,no = "$GCC,$with_gnu_ld"; 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 no = "$with_gnu_ld"; 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 yes,no = "$GCC,$with_gnu_ld"; 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 yes = "$lt_cv_prog_compiler__b"; 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 no = "$with_gnu_ld"; 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 yes = "$GCC"; 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 yes = "$lt_cv_irix_exported_symbol"; 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 link_all_deplibs=no 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 ;; linux*) case $cc_basename in tcc*) # Fabrice Bellard et al's Tiny C Compiler ld_shlibs=yes archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; 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* | bitrig*) 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__`"; 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 archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='$wl-rpath,$libdir' fi else ld_shlibs=no fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported shrext_cmds=.dll archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' enable_shared_with_static_runtimes=yes ;; osf3*) if test yes = "$GCC"; 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 yes = "$GCC"; 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 yes = "$GCC"; 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 yes = "$GCC"; 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 sequent = "$host_vendor"; 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 yes = "$GCC"; 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 CANNOT 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 yes = "$GCC"; 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 sni = "$host_vendor"; 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 no = "$ld_shlibs" && 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 yes,yes = "$GCC,$enable_shared"; 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 yes = "$GCC"; 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` # ...but if some path component already ends with the multilib dir we assume # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer). case "$lt_multi_os_dir; $lt_search_path_spec " in "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*) lt_multi_os_dir= ;; esac 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" elif test -n "$lt_multi_os_dir"; then 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 ia64 = "$host_cpu"; 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 # Using Import Files as archive members, it is possible to support # filename-based versioning of shared library archives on AIX. While # this would work for both with and without runtime linking, it will # prevent static linking of such archives. So we do filename-based # shared library versioning with .so extension only, which is used # when both runtime linking and shared linking is enabled. # Unfortunately, runtime linking may impact performance, so we do # not want this to be the default eventually. Also, we use the # versioned .so libs for executables only if there is the -brtl # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. # To allow for filename-based versioning support, we need to create # libNAME.so.V as an archive file, containing: # *) an Import File, referring to the versioned filename of the # archive as well as the shared archive member, telling the # bitwidth (32 or 64) of that shared object, and providing the # list of exported symbols of that shared object, eventually # decorated with the 'weak' keyword # *) the shared object with the F_LOADONLY flag set, to really avoid # it being seen by the linker. # At run time we better use the real file rather than another symlink, # but for link time we create the symlink libNAME.so -> libNAME.so.V case $with_aix_soname,$aix_use_runtimelinking in # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. aix,yes) # traditional libtool dynamic_linker='AIX unversionable lib.so' # 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' ;; aix,no) # traditional AIX only dynamic_linker='AIX lib.a(lib.so.V)' # 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' ;; svr4,*) # full svr4 only dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o)" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,yes) # both, prefer svr4 dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o), lib.a(lib.so.V)" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # unpreferred sharedlib libNAME.a needs extra handling postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,no) # both, prefer aix dynamic_linker="AIX lib.a(lib.so.V), lib.so.V($shared_archive_member_spec.o)" library_names_spec='$libname$release.a $libname.a' soname_spec='$libname$release$shared_ext$major' # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' ;; esac 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%'\''`; $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$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' 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 ;; 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=no 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 32 = "$HPUX_IA64_MODE"; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" sys_lib_dlsearch_path_spec=/usr/lib/hpux32 else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" sys_lib_dlsearch_path_spec=/usr/lib/hpux64 fi ;; 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 yes = "$lt_cv_prog_gnu_ld"; 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 ;; linux*android*) version_type=none # Android doesn't support versioned libraries. need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext' soname_spec='$libname$release$shared_ext' finish_cmds= shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # 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 dynamic_linker='Android linker' # Don't embed -rpath directories since the linker doesn't support them. hardcode_libdir_flag_spec='-L$libdir' ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | 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 # Ideally, we could use ldconfig to report *all* directores which are # searched for libraries, however this is still not possible. Aside from not # being certain /sbin/ldconfig is available, command # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, # even though it is searched at run-time. Try to do the best guess by # appending ld.so.conf contents (and includes) 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* | bitrig*) version_type=sunos sys_lib_dlsearch_path_spec=/usr/lib need_lib_prefix=no if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then need_version=no else need_version=yes fi 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 shlibpath_overrides_runpath=yes ;; os2*) libname_spec='$name' version_type=windows shrext_cmds=.dll need_version=no need_lib_prefix=no # OS/2 can only load a DLL with a base name of 8 characters or less. soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; v=$($ECHO $release$versuffix | tr -d .-); n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); $ECHO $n$v`$shared_ext' library_names_spec='${libname}_dll.$libext' dynamic_linker='OS/2 ld.exe' shlibpath_var=BEGINLIBPATH sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec 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' ;; 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 yes = "$with_gnu_ld"; 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=sco 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 yes = "$with_gnu_ld"; 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 no = "$dynamic_linker" && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test yes = "$GCC"; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec fi if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec fi # remember unaugmented sys_lib_dlsearch_path content for libtool script decls... configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec # ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" # to be used as default LT_SYS_LIBRARY_PATH value in generated libtool configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH { $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 yes = "$hardcode_automatic"; then # We can hardcode non-existent directories. if test no != "$hardcode_direct" && # 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 no != "$_LT_TAGVAR(hardcode_shlibpath_var, )" && test no != "$hardcode_minus_L"; 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 relink = "$hardcode_action" || test yes = "$inherit_rpath"; then # Fast installation is not supported enable_fast_install=no elif test yes = "$shlibpath_overrides_runpath" || test no = "$enable_shared"; then # Fast installation is not necessary enable_fast_install=needless fi if test yes != "$enable_dlopen"; 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 ;; tpf*) # Don't try to run any link tests for TPF. We know it's impossible # because TPF is a cross-compiler, and we know how we open DSOs. lt_cv_dlopen=dlopen lt_cv_dlopen_libs= lt_cv_dlopen_self=no ;; *) 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 no = "$lt_cv_dlopen"; then enable_dlopen=no else enable_dlopen=yes fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS=$CPPFLAGS test yes = "$ac_cv_header_dlfcn_h" && 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 yes = "$cross_compiling"; 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 -fvisibility=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 yes = "$lt_cv_dlopen_self"; 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 yes = "$cross_compiling"; 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 -fvisibility=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 what 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 no = "$can_build_shared" && 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 yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[4-9]*) if test ia64 != "$host_cpu"; then case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in yes,aix,yes) ;; # shared object as lib.so file only yes,svr4,*) ;; # shared object as lib.so archive member only yes,*) enable_static=no ;; # shared object in lib.a archive as well esac 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 yes = "$enable_shared" || 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: # dmalloc option { $as_echo "$as_me:${as_lineno-$LINENO}: checking if malloc debugging is wanted" >&5 $as_echo_n "checking if malloc debugging is wanted... " >&6; } # Check whether --with-dmalloc was given. if test "${with_dmalloc+set}" = set; then : withval=$with_dmalloc; if test "$withval" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } $as_echo "#define WITH_DMALLOC 1" >>confdefs.h LIBS="$LIBS -ldmalloc" LDFLAGS="$LDFLAGS -g" else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # i18n GETTEXT_PACKAGE=nip2 cat >>confdefs.h <<_ACEOF #define GETTEXT_PACKAGE "$GETTEXT_PACKAGE" _ACEOF # ALL_LINGUAS="en_GB malkovich" ALL_LINGUAS="en_GB" for ac_header in locale.h do : ac_fn_c_check_header_mongrel "$LINENO" "locale.h" "ac_cv_header_locale_h" "$ac_includes_default" if test "x$ac_cv_header_locale_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LOCALE_H 1 _ACEOF fi done if test $ac_cv_header_locale_h = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LC_MESSAGES" >&5 $as_echo_n "checking for LC_MESSAGES... " >&6; } if ${am_cv_val_LC_MESSAGES+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { return LC_MESSAGES ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : am_cv_val_LC_MESSAGES=yes else am_cv_val_LC_MESSAGES=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_val_LC_MESSAGES" >&5 $as_echo "$am_cv_val_LC_MESSAGES" >&6; } if test $am_cv_val_LC_MESSAGES = yes; then $as_echo "#define HAVE_LC_MESSAGES 1" >>confdefs.h fi fi USE_NLS=yes gt_cv_have_gettext=no CATOBJEXT=NONE XGETTEXT=: INTLLIBS= { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFPreferencesCopyAppValue" >&5 $as_echo_n "checking for CFPreferencesCopyAppValue... " >&6; } if ${gt_cv_func_CFPreferencesCopyAppValue+:} false; then : $as_echo_n "(cached) " >&6 else gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { CFPreferencesCopyAppValue(NULL, NULL) ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gt_cv_func_CFPreferencesCopyAppValue=yes else gt_cv_func_CFPreferencesCopyAppValue=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$gt_save_LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFPreferencesCopyAppValue" >&5 $as_echo "$gt_cv_func_CFPreferencesCopyAppValue" >&6; } if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then $as_echo "#define HAVE_CFPREFERENCESCOPYAPPVALUE 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFLocaleCopyCurrent" >&5 $as_echo_n "checking for CFLocaleCopyCurrent... " >&6; } if ${gt_cv_func_CFLocaleCopyCurrent+:} false; then : $as_echo_n "(cached) " >&6 else gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { CFLocaleCopyCurrent(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gt_cv_func_CFLocaleCopyCurrent=yes else gt_cv_func_CFLocaleCopyCurrent=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$gt_save_LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFLocaleCopyCurrent" >&5 $as_echo "$gt_cv_func_CFLocaleCopyCurrent" >&6; } if test $gt_cv_func_CFLocaleCopyCurrent = yes; then $as_echo "#define HAVE_CFLOCALECOPYCURRENT 1" >>confdefs.h fi INTL_MACOSX_LIBS= if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation" fi ac_fn_c_check_header_mongrel "$LINENO" "libintl.h" "ac_cv_header_libintl_h" "$ac_includes_default" if test "x$ac_cv_header_libintl_h" = xyes; then : gt_cv_func_dgettext_libintl="no" libintl_extra_libs="" # # First check in libc # { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ngettext in libc" >&5 $as_echo_n "checking for ngettext in libc... " >&6; } if ${gt_cv_func_ngettext_libc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { return !ngettext ("","", 1) ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gt_cv_func_ngettext_libc=yes else gt_cv_func_ngettext_libc=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_ngettext_libc" >&5 $as_echo "$gt_cv_func_ngettext_libc" >&6; } if test "$gt_cv_func_ngettext_libc" = "yes" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dgettext in libc" >&5 $as_echo_n "checking for dgettext in libc... " >&6; } if ${gt_cv_func_dgettext_libc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { return !dgettext ("","") ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gt_cv_func_dgettext_libc=yes else gt_cv_func_dgettext_libc=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_dgettext_libc" >&5 $as_echo "$gt_cv_func_dgettext_libc" >&6; } fi if test "$gt_cv_func_ngettext_libc" = "yes" ; then for ac_func in bind_textdomain_codeset do : ac_fn_c_check_func "$LINENO" "bind_textdomain_codeset" "ac_cv_func_bind_textdomain_codeset" if test "x$ac_cv_func_bind_textdomain_codeset" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_BIND_TEXTDOMAIN_CODESET 1 _ACEOF fi done fi # # If we don't have everything we want, check in libintl # if test "$gt_cv_func_dgettext_libc" != "yes" \ || test "$gt_cv_func_ngettext_libc" != "yes" \ || test "$ac_cv_func_bind_textdomain_codeset" != "yes" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for bindtextdomain in -lintl" >&5 $as_echo_n "checking for bindtextdomain in -lintl... " >&6; } if ${ac_cv_lib_intl_bindtextdomain+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl $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 bindtextdomain (); int main () { return bindtextdomain (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_bindtextdomain=yes else ac_cv_lib_intl_bindtextdomain=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_intl_bindtextdomain" >&5 $as_echo "$ac_cv_lib_intl_bindtextdomain" >&6; } if test "x$ac_cv_lib_intl_bindtextdomain" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ngettext in -lintl" >&5 $as_echo_n "checking for ngettext in -lintl... " >&6; } if ${ac_cv_lib_intl_ngettext+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl $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 ngettext (); int main () { return ngettext (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_ngettext=yes else ac_cv_lib_intl_ngettext=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_intl_ngettext" >&5 $as_echo "$ac_cv_lib_intl_ngettext" >&6; } if test "x$ac_cv_lib_intl_ngettext" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dgettext in -lintl" >&5 $as_echo_n "checking for dgettext in -lintl... " >&6; } if ${ac_cv_lib_intl_dgettext+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl $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 dgettext (); int main () { return dgettext (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_dgettext=yes else ac_cv_lib_intl_dgettext=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_intl_dgettext" >&5 $as_echo "$ac_cv_lib_intl_dgettext" >&6; } if test "x$ac_cv_lib_intl_dgettext" = xyes; then : gt_cv_func_dgettext_libintl=yes fi fi fi if test "$gt_cv_func_dgettext_libintl" != "yes" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if -liconv is needed to use gettext" >&5 $as_echo_n "checking if -liconv is needed to use gettext... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 $as_echo "" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ngettext in -lintl" >&5 $as_echo_n "checking for ngettext in -lintl... " >&6; } if ${ac_cv_lib_intl_ngettext+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl -liconv $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 ngettext (); int main () { return ngettext (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_ngettext=yes else ac_cv_lib_intl_ngettext=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_intl_ngettext" >&5 $as_echo "$ac_cv_lib_intl_ngettext" >&6; } if test "x$ac_cv_lib_intl_ngettext" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dcgettext in -lintl" >&5 $as_echo_n "checking for dcgettext in -lintl... " >&6; } if ${ac_cv_lib_intl_dcgettext+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl -liconv $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 dcgettext (); int main () { return dcgettext (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_dcgettext=yes else ac_cv_lib_intl_dcgettext=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_intl_dcgettext" >&5 $as_echo "$ac_cv_lib_intl_dcgettext" >&6; } if test "x$ac_cv_lib_intl_dcgettext" = xyes; then : gt_cv_func_dgettext_libintl=yes libintl_extra_libs=-liconv else : fi else : fi fi # # If we found libintl, then check in it for bind_textdomain_codeset(); # we'll prefer libc if neither have bind_textdomain_codeset(), # and both have dgettext and ngettext # if test "$gt_cv_func_dgettext_libintl" = "yes" ; then glib_save_LIBS="$LIBS" LIBS="$LIBS -lintl $libintl_extra_libs" unset ac_cv_func_bind_textdomain_codeset for ac_func in bind_textdomain_codeset do : ac_fn_c_check_func "$LINENO" "bind_textdomain_codeset" "ac_cv_func_bind_textdomain_codeset" if test "x$ac_cv_func_bind_textdomain_codeset" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_BIND_TEXTDOMAIN_CODESET 1 _ACEOF fi done LIBS="$glib_save_LIBS" if test "$ac_cv_func_bind_textdomain_codeset" = "yes" ; then gt_cv_func_dgettext_libc=no else if test "$gt_cv_func_dgettext_libc" = "yes" \ && test "$gt_cv_func_ngettext_libc" = "yes"; then gt_cv_func_dgettext_libintl=no fi fi fi fi if test "$gt_cv_func_dgettext_libc" = "yes" \ || test "$gt_cv_func_dgettext_libintl" = "yes"; then gt_cv_have_gettext=yes fi if test "$gt_cv_func_dgettext_libintl" = "yes"; then INTLLIBS="-lintl $libintl_extra_libs $INTL_MACOSX_LIBS" fi if test "$gt_cv_have_gettext" = "yes"; then $as_echo "#define HAVE_GETTEXT 1" >>confdefs.h # Extract the first word of "msgfmt", so it can be a program name with args. set dummy msgfmt; 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_path_MSGFMT+:} false; then : $as_echo_n "(cached) " >&6 else case "$MSGFMT" in /*) ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then if test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"; then ac_cv_path_MSGFMT="$ac_dir/$ac_word" break fi fi done IFS="$ac_save_ifs" test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT="no" ;; esac fi MSGFMT="$ac_cv_path_MSGFMT" if test "$MSGFMT" != "no"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5 $as_echo "$MSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "$MSGFMT" != "no"; then glib_save_LIBS="$LIBS" LIBS="$LIBS $INTLLIBS" for ac_func in dcgettext do : ac_fn_c_check_func "$LINENO" "dcgettext" "ac_cv_func_dcgettext" if test "x$ac_cv_func_dcgettext" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DCGETTEXT 1 _ACEOF fi done MSGFMT_OPTS= { $as_echo "$as_me:${as_lineno-$LINENO}: checking if msgfmt accepts -c" >&5 $as_echo_n "checking if msgfmt accepts -c... " >&6; } cat >conftest.foo <<_ACEOF msgid "" msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Project-Id-Version: test 1.0\n" "PO-Revision-Date: 2007-02-15 12:01+0100\n" "Last-Translator: test \n" "Language-Team: C \n" "MIME-Version: 1.0\n" "Content-Transfer-Encoding: 8bit\n" _ACEOF if { { $as_echo "$as_me:${as_lineno-$LINENO}: \$MSGFMT -c -o /dev/null conftest.foo"; } >&5 ($MSGFMT -c -o /dev/null conftest.foo) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then MSGFMT_OPTS=-c; { $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; } echo "$as_me: failed input was:" >&5 sed 's/^/| /' conftest.foo >&5 fi # Extract the first word of "gmsgfmt", so it can be a program name with args. set dummy gmsgfmt; 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_path_GMSGFMT+:} false; then : $as_echo_n "(cached) " >&6 else case $GMSGFMT in [\\/]* | ?:[\\/]*) ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" ;; esac fi GMSGFMT=$ac_cv_path_GMSGFMT if test -n "$GMSGFMT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5 $as_echo "$GMSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "xgettext", so it can be a program name with args. set dummy xgettext; 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_path_XGETTEXT+:} false; then : $as_echo_n "(cached) " >&6 else case "$XGETTEXT" in /*) ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then if test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"; then ac_cv_path_XGETTEXT="$ac_dir/$ac_word" break fi fi done IFS="$ac_save_ifs" test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":" ;; esac fi XGETTEXT="$ac_cv_path_XGETTEXT" if test "$XGETTEXT" != ":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5 $as_echo "$XGETTEXT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { extern int _nl_msg_cat_cntr; return _nl_msg_cat_cntr ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : CATOBJEXT=.gmo DATADIRNAME=share else case $host in *-*-solaris*) ac_fn_c_check_func "$LINENO" "bind_textdomain_codeset" "ac_cv_func_bind_textdomain_codeset" if test "x$ac_cv_func_bind_textdomain_codeset" = xyes; then : CATOBJEXT=.gmo DATADIRNAME=share else CATOBJEXT=.mo DATADIRNAME=lib fi ;; *-*-openbsd*) CATOBJEXT=.mo DATADIRNAME=share ;; *) CATOBJEXT=.mo DATADIRNAME=lib ;; esac fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$glib_save_LIBS" INSTOBJEXT=.mo else gt_cv_have_gettext=no fi fi fi if test "$gt_cv_have_gettext" = "yes" ; then $as_echo "#define ENABLE_NLS 1" >>confdefs.h fi if test "$XGETTEXT" != ":"; then if $XGETTEXT --omit-header /dev/null 2> /dev/null; then : ; else { $as_echo "$as_me:${as_lineno-$LINENO}: result: found xgettext program is not GNU xgettext; ignore it" >&5 $as_echo "found xgettext program is not GNU xgettext; ignore it" >&6; } XGETTEXT=":" fi fi # We need to process the po/ directory. POSUB=po ac_config_commands="$ac_config_commands default-1" for lang in $ALL_LINGUAS; do GMOFILES="$GMOFILES $lang.gmo" POFILES="$POFILES $lang.po" done if test "$gt_cv_have_gettext" = "yes"; then if test "x$ALL_LINGUAS" = "x"; then LINGUAS= else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for catalogs to be installed" >&5 $as_echo_n "checking for catalogs to be installed... " >&6; } NEW_LINGUAS= for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "${LINGUAS-%UNSET%}"; then desiredlanguages="$LINGUAS" else desiredlanguages="$ALL_LINGUAS" fi for desiredlang in $desiredlanguages; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang"*) useit=yes;; esac done if test $useit = yes; then NEW_LINGUAS="$NEW_LINGUAS $presentlang" fi done LINGUAS=$NEW_LINGUAS { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LINGUAS" >&5 $as_echo "$LINGUAS" >&6; } fi if test -n "$LINGUAS"; then for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done fi fi MKINSTALLDIRS= if test -n "$ac_aux_dir"; then MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" fi if test -z "$MKINSTALLDIRS"; then MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" fi test -d po || mkdir po if test "x$srcdir" != "x."; then if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then posrcprefix="$srcdir/" else posrcprefix="../$srcdir/" fi else posrcprefix="../" fi rm -f po/POTFILES sed -e "/^#/d" -e "/^\$/d" -e "s,.*, $posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \ < $srcdir/po/POTFILES.in > po/POTFILES # check for flex ... nip needs to adjust itself a bit if test "${LEX}" = "flex"; then $as_echo "#define HAVE_FLEX 1" >>confdefs.h fi # flex >= 2.5.36 uses a nonstandard type for yyleng { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether yyleng is yy_size_t" >&5 $as_echo_n "checking whether yyleng is yy_size_t... " >&6; } cat > conftest.l <conftest.$ac_ext /* end confdefs.h. */ `cat $LEX_OUTPUT_ROOT.c` _ACEOF if ac_fn_c_try_compile "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } $as_echo "#define YYLENG_IS_YY_SIZE_T 1" >>confdefs.h else { $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_ext rm -f conftest.l $LEX_OUTPUT_ROOT.c # get packages we need # gtk before 2.4.9 crashes with the way we use combobox :-( # vips before 7.30 used "vips-x.y" as the pkg name if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $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 ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 $as_echo "$PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_PKG_CONFIG"; then ac_pt_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $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 ;; esac fi ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 $as_echo "$ac_pt_PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_PKG_CONFIG" = x; then PKG_CONFIG="" 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 PKG_CONFIG=$ac_pt_PKG_CONFIG fi else PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.9.0 { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 $as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } PKG_CONFIG="" fi fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for REQUIRED_PACKAGES" >&5 $as_echo_n "checking for REQUIRED_PACKAGES... " >&6; } if test -n "$REQUIRED_PACKAGES_CFLAGS"; then pkg_cv_REQUIRED_PACKAGES_CFLAGS="$REQUIRED_PACKAGES_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gmodule-2.0 gthread-2.0 gtk+-2.0 >= 2.4.9 libxml-2.0 vips >= 7.30\""; } >&5 ($PKG_CONFIG --exists --print-errors "gmodule-2.0 gthread-2.0 gtk+-2.0 >= 2.4.9 libxml-2.0 vips >= 7.30") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_REQUIRED_PACKAGES_CFLAGS=`$PKG_CONFIG --cflags "gmodule-2.0 gthread-2.0 gtk+-2.0 >= 2.4.9 libxml-2.0 vips >= 7.30" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$REQUIRED_PACKAGES_LIBS"; then pkg_cv_REQUIRED_PACKAGES_LIBS="$REQUIRED_PACKAGES_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gmodule-2.0 gthread-2.0 gtk+-2.0 >= 2.4.9 libxml-2.0 vips >= 7.30\""; } >&5 ($PKG_CONFIG --exists --print-errors "gmodule-2.0 gthread-2.0 gtk+-2.0 >= 2.4.9 libxml-2.0 vips >= 7.30") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_REQUIRED_PACKAGES_LIBS=`$PKG_CONFIG --libs "gmodule-2.0 gthread-2.0 gtk+-2.0 >= 2.4.9 libxml-2.0 vips >= 7.30" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then REQUIRED_PACKAGES_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "gmodule-2.0 gthread-2.0 gtk+-2.0 >= 2.4.9 libxml-2.0 vips >= 7.30" 2>&1` else REQUIRED_PACKAGES_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "gmodule-2.0 gthread-2.0 gtk+-2.0 >= 2.4.9 libxml-2.0 vips >= 7.30" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$REQUIRED_PACKAGES_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (gmodule-2.0 gthread-2.0 gtk+-2.0 >= 2.4.9 libxml-2.0 vips >= 7.30) were not met: $REQUIRED_PACKAGES_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables REQUIRED_PACKAGES_CFLAGS and REQUIRED_PACKAGES_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables REQUIRED_PACKAGES_CFLAGS and REQUIRED_PACKAGES_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else REQUIRED_PACKAGES_CFLAGS=$pkg_cv_REQUIRED_PACKAGES_CFLAGS REQUIRED_PACKAGES_LIBS=$pkg_cv_REQUIRED_PACKAGES_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi IP_CFLAGS="$REQUIRED_PACKAGES_CFLAGS $IP_CFLAGS" IP_LIBS="$REQUIRED_PACKAGES_LIBS $IP_LIBS" # gdk_window_set_opacity() was added in gtk 2.12 if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk+-2.0 >= 2.12\""; } >&5 ($PKG_CONFIG --exists --print-errors "gtk+-2.0 >= 2.12") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then nip_set_opacity=yes else nip_set_opacity=no fi if test x"$nip_set_opacity" = x"yes"; then $as_echo "#define HAVE_SET_OPACITY 1" >>confdefs.h fi # GtkInfoBar was added in gtk 2.18 if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk+-2.0 >= 2.18\""; } >&5 ($PKG_CONFIG --exists --print-errors "gtk+-2.0 >= 2.18") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then nip_use_infobar=yes else nip_use_infobar=no fi if test x"$nip_use_infobar" = x"yes"; then $as_echo "#define USE_INFOBAR 1" >>confdefs.h fi # notebook action widgets came in 2.20 if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk+-2.0 >= 2.20\""; } >&5 ($PKG_CONFIG --exists --print-errors "gtk+-2.0 >= 2.20") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then nip_use_notebook_action=yes else nip_use_notebook_action=no fi if test x"$nip_use_notebook_action" = x"yes"; then $as_echo "#define USE_NOTEBOOK_ACTION 1" >>confdefs.h fi # notebook group names widgets came in 2.24 if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk+-2.0 >= 2.24\""; } >&5 ($PKG_CONFIG --exists --print-errors "gtk+-2.0 >= 2.24") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then nip_use_notebook_group_name=yes else nip_use_notebook_group_name=no fi if test x"$nip_use_notebook_group_name" = x"yes"; then $as_echo "#define USE_NOTEBOOK_GROUP_NAME 1" >>confdefs.h fi # GRegex was added in glib-2.14 # we need it for regex searching in the program window if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 >= 2.14\""; } >&5 ($PKG_CONFIG --exists --print-errors "glib-2.0 >= 2.14") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then nip_use_gregex=yes else nip_use_gregex=no fi if test x"$nip_use_gregex" = x"yes"; then $as_echo "#define HAVE_GREGEX 1" >>confdefs.h fi # Check for the function strccpy in libgen ac_fn_c_check_header_mongrel "$LINENO" "libgen.h" "ac_cv_header_libgen_h" "$ac_includes_default" if test "x$ac_cv_header_libgen_h" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for strccpy in -lgen" >&5 $as_echo_n "checking for strccpy in -lgen... " >&6; } if ${ac_cv_lib_gen_strccpy+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lgen $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 strccpy (); int main () { return strccpy (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_gen_strccpy=yes else ac_cv_lib_gen_strccpy=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_gen_strccpy" >&5 $as_echo "$ac_cv_lib_gen_strccpy" >&6; } if test "x$ac_cv_lib_gen_strccpy" = xyes; then : $as_echo "#define HAVE_STRCCPY 1" >>confdefs.h IP_LIBS="$IP_LIBS -lgen" fi fi # Checks for header files. ac_header_dirent=no for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do as_ac_Header=`$as_echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_hdr that defines DIR" >&5 $as_echo_n "checking for $ac_hdr that defines DIR... " >&6; } if eval \${$as_ac_Header+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include <$ac_hdr> int main () { if ((DIR *) 0) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$as_ac_Header=yes" else eval "$as_ac_Header=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$as_ac_Header { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_hdr" | $as_tr_cpp` 1 _ACEOF ac_header_dirent=$ac_hdr; break fi done # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. if test $ac_header_dirent = dirent.h; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 $as_echo_n "checking for library containing opendir... " >&6; } if ${ac_cv_search_opendir+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_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 opendir (); int main () { return opendir (); ; return 0; } _ACEOF for ac_lib in '' dir; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_opendir=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_opendir+:} false; then : break fi done if ${ac_cv_search_opendir+:} false; then : else ac_cv_search_opendir=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 $as_echo "$ac_cv_search_opendir" >&6; } ac_res=$ac_cv_search_opendir if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 $as_echo_n "checking for library containing opendir... " >&6; } if ${ac_cv_search_opendir+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_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 opendir (); int main () { return opendir (); ; return 0; } _ACEOF for ac_lib in '' x; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_opendir=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_opendir+:} false; then : break fi done if ${ac_cv_search_opendir+:} false; then : else ac_cv_search_opendir=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 $as_echo "$ac_cv_search_opendir" >&6; } ac_res=$ac_cv_search_opendir if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi fi { $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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sys/wait.h that is POSIX.1 compatible" >&5 $as_echo_n "checking for sys/wait.h that is POSIX.1 compatible... " >&6; } if ${ac_cv_header_sys_wait_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #ifndef WEXITSTATUS # define WEXITSTATUS(stat_val) ((unsigned int) (stat_val) >> 8) #endif #ifndef WIFEXITED # define WIFEXITED(stat_val) (((stat_val) & 255) == 0) #endif int main () { int s; wait (&s); s = WIFEXITED (s) ? WEXITSTATUS (s) : 1; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_sys_wait_h=yes else ac_cv_header_sys_wait_h=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_sys_wait_h" >&5 $as_echo "$ac_cv_header_sys_wait_h" >&6; } if test $ac_cv_header_sys_wait_h = yes; then $as_echo "#define HAVE_SYS_WAIT_H 1" >>confdefs.h fi for ac_header in limits.h pwd.h fnmatch.h sys/statvfs.h sys/vfs.h sys/mount.h sys/resource.h sys/wait.h malloc.h sys/time.h sys/param.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$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 # Checks for typedefs, structures, and compiler characteristics. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 $as_echo_n "checking for an ANSI C-conforming const... " >&6; } if ${ac_cv_c_const+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __cplusplus /* Ultrix mips cc rejects this sort of thing. */ typedef int charset[2]; const charset cs = { 0, 0 }; /* SunOS 4.1.1 cc rejects this. */ char const *const *pcpcc; char **ppc; /* NEC SVR4.0.2 mips cc rejects this. */ struct point {int x, y;}; static struct point const zero = {0,0}; /* AIX XL C 1.02.0.0 rejects this. It does not let you subtract one const X* pointer from another in an arm of an if-expression whose if-part is not a constant expression */ const char *g = "string"; pcpcc = &g + (g ? g-g : 0); /* HPUX 7.0 cc rejects these. */ ++pcpcc; ppc = (char**) pcpcc; pcpcc = (char const *const *) ppc; { /* SCO 3.2v4 cc rejects this sort of thing. */ char tx; char *t = &tx; char const *s = 0 ? (char *) 0 : (char const *) 0; *t++ = 0; if (s) return 0; } { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ int x[] = {25, 17}; const int *foo = &x[0]; ++foo; } { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ typedef const int *iptr; iptr p = 0; ++p; } { /* AIX XL C 1.02.0.0 rejects this sort of thing, saying "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ struct s { int j; const int *ap[3]; } bx; struct s *b = &bx; b->j = 5; } { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ const int foo = 10; if (!foo) return 0; } return !cs[0] && !zero.x; #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_const=yes else ac_cv_c_const=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 $as_echo "$ac_cv_c_const" >&6; } if test $ac_cv_c_const = no; then $as_echo "#define const /**/" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct tm is in sys/time.h or time.h" >&5 $as_echo_n "checking whether struct tm is in sys/time.h or time.h... " >&6; } if ${ac_cv_struct_tm+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { struct tm tm; int *p = &tm.tm_sec; return !p; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_struct_tm=time.h else ac_cv_struct_tm=sys/time.h fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_tm" >&5 $as_echo "$ac_cv_struct_tm" >&6; } if test $ac_cv_struct_tm = sys/time.h; then $as_echo "#define TM_IN_SYS_TIME 1" >>confdefs.h fi # Checks for library functions. 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 # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works # for constant arguments. Useless! { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working alloca.h" >&5 $as_echo_n "checking for working alloca.h... " >&6; } if ${ac_cv_working_alloca_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { char *p = (char *) alloca (2 * sizeof (int)); if (p) return 0; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_working_alloca_h=yes else ac_cv_working_alloca_h=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_working_alloca_h" >&5 $as_echo "$ac_cv_working_alloca_h" >&6; } if test $ac_cv_working_alloca_h = yes; then $as_echo "#define HAVE_ALLOCA_H 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for alloca" >&5 $as_echo_n "checking for alloca... " >&6; } if ${ac_cv_func_alloca_works+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __GNUC__ # define alloca __builtin_alloca #else # ifdef _MSC_VER # include # define alloca _alloca # else # ifdef HAVE_ALLOCA_H # include # else # ifdef _AIX #pragma alloca # else # ifndef alloca /* predefined by HP cc +Olibcalls */ void *alloca (size_t); # endif # endif # endif # endif #endif int main () { char *p = (char *) alloca (1); if (p) return 0; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_func_alloca_works=yes else ac_cv_func_alloca_works=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_alloca_works" >&5 $as_echo "$ac_cv_func_alloca_works" >&6; } if test $ac_cv_func_alloca_works = yes; then $as_echo "#define HAVE_ALLOCA 1" >>confdefs.h else # The SVR3 libPW and SVR4 libucb both contain incompatible functions # that cause trouble. Some versions do not even contain alloca or # contain a buggy version. If you still want to use their alloca, # use ar to extract alloca.o from them instead of compiling alloca.c. ALLOCA=\${LIBOBJDIR}alloca.$ac_objext $as_echo "#define C_ALLOCA 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether \`alloca.c' needs Cray hooks" >&5 $as_echo_n "checking whether \`alloca.c' needs Cray hooks... " >&6; } if ${ac_cv_os_cray+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined CRAY && ! defined CRAY2 webecray #else wenotbecray #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "webecray" >/dev/null 2>&1; then : ac_cv_os_cray=yes else ac_cv_os_cray=no fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_os_cray" >&5 $as_echo "$ac_cv_os_cray" >&6; } if test $ac_cv_os_cray = yes; then for ac_func in _getb67 GETB67 getb67; do as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define CRAY_STACKSEG_END $ac_func _ACEOF break fi done fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking stack direction for C alloca" >&5 $as_echo_n "checking stack direction for C alloca... " >&6; } if ${ac_cv_c_stack_direction+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_c_stack_direction=0 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int find_stack_direction (int *addr, int depth) { int dir, dummy = 0; if (! addr) addr = &dummy; *addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1; dir = depth ? find_stack_direction (addr, depth - 1) : 0; return dir + dummy; } int main (int argc, char **argv) { return find_stack_direction (0, argc + !argv + 20) < 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_c_stack_direction=1 else ac_cv_c_stack_direction=-1 fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_stack_direction" >&5 $as_echo "$ac_cv_c_stack_direction" >&6; } cat >>confdefs.h <<_ACEOF #define STACK_DIRECTION $ac_cv_c_stack_direction _ACEOF fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working POSIX fnmatch" >&5 $as_echo_n "checking for working POSIX fnmatch... " >&6; } if ${ac_cv_func_fnmatch_works+:} false; then : $as_echo_n "(cached) " >&6 else # Some versions of Solaris, SCO, and the GNU C Library # have a broken or incompatible fnmatch. # So we run a test program. If we are cross-compiling, take no chance. # Thanks to John Oleynick, Franc,ois Pinard, and Paul Eggert for this test. if test "$cross_compiling" = yes; then : ac_cv_func_fnmatch_works=cross else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include # define y(a, b, c) (fnmatch (a, b, c) == 0) # define n(a, b, c) (fnmatch (a, b, c) == FNM_NOMATCH) int main () { return (!(y ("a*", "abc", 0) && n ("d*/*1", "d/s/1", FNM_PATHNAME) && y ("a\\\\bc", "abc", 0) && n ("a\\\\bc", "abc", FNM_NOESCAPE) && y ("*x", ".x", 0) && n ("*x", ".x", FNM_PERIOD) && 1)); ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_func_fnmatch_works=yes else ac_cv_func_fnmatch_works=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 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_fnmatch_works" >&5 $as_echo "$ac_cv_func_fnmatch_works" >&6; } if test $ac_cv_func_fnmatch_works = yes; then : $as_echo "#define HAVE_FNMATCH 1" >>confdefs.h fi for ac_func in vprintf do : ac_fn_c_check_func "$LINENO" "vprintf" "ac_cv_func_vprintf" if test "x$ac_cv_func_vprintf" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_VPRINTF 1 _ACEOF ac_fn_c_check_func "$LINENO" "_doprnt" "ac_cv_func__doprnt" if test "x$ac_cv_func__doprnt" = xyes; then : $as_echo "#define HAVE_DOPRNT 1" >>confdefs.h fi fi done for ac_func in geteuid getcwd getpwnam getrlimit getpwent getwd putenv regcomp strcspn strspn strstr do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done # need fftw so we load and unload wisdom on startup/shutdown # Check whether --with-fftw3 was given. if test "${with_fftw3+set}" = set; then : withval=$with_fftw3; fi if test "x$with_fftw3" != "xno"; then pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for FFTW3" >&5 $as_echo_n "checking for FFTW3... " >&6; } if test -n "$FFTW3_CFLAGS"; then pkg_cv_FFTW3_CFLAGS="$FFTW3_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"fftw3\""; } >&5 ($PKG_CONFIG --exists --print-errors "fftw3") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_FFTW3_CFLAGS=`$PKG_CONFIG --cflags "fftw3" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$FFTW3_LIBS"; then pkg_cv_FFTW3_LIBS="$FFTW3_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"fftw3\""; } >&5 ($PKG_CONFIG --exists --print-errors "fftw3") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_FFTW3_LIBS=`$PKG_CONFIG --libs "fftw3" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then FFTW3_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "fftw3" 2>&1` else FFTW3_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "fftw3" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$FFTW3_PKG_ERRORS" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: fftw3 not found; disabling fftw support" >&5 $as_echo "$as_me: WARNING: fftw3 not found; disabling fftw support" >&2;} with_fftw3=no elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: fftw3 not found; disabling fftw support" >&5 $as_echo "$as_me: WARNING: fftw3 not found; disabling fftw support" >&2;} with_fftw3=no else FFTW3_CFLAGS=$pkg_cv_FFTW3_CFLAGS FFTW3_LIBS=$pkg_cv_FFTW3_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } $as_echo "#define HAVE_FFTW3 1" >>confdefs.h with_fftw3=yes fi IP_CFLAGS="$FFTW3_INCLUDES $FFTW3_CFLAGS $IP_CFLAGS" IP_LIBS="$FFTW3_LIBS $IP_LIBS" fi # goffice needs libgsf to save plots to files # Check whether --with-libgsf was given. if test "${with_libgsf+set}" = set; then : withval=$with_libgsf; fi if test "x$with_libgsf" != "xno"; then pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBGSF" >&5 $as_echo_n "checking for LIBGSF... " >&6; } if test -n "$LIBGSF_CFLAGS"; then pkg_cv_LIBGSF_CFLAGS="$LIBGSF_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libgsf-1\""; } >&5 ($PKG_CONFIG --exists --print-errors "libgsf-1") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBGSF_CFLAGS=`$PKG_CONFIG --cflags "libgsf-1" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$LIBGSF_LIBS"; then pkg_cv_LIBGSF_LIBS="$LIBGSF_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libgsf-1\""; } >&5 ($PKG_CONFIG --exists --print-errors "libgsf-1") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBGSF_LIBS=`$PKG_CONFIG --libs "libgsf-1" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then LIBGSF_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libgsf-1" 2>&1` else LIBGSF_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libgsf-1" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$LIBGSF_PKG_ERRORS" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: libgsf not found; disabling save plot to file" >&5 $as_echo "$as_me: WARNING: libgsf not found; disabling save plot to file" >&2;} with_libgsf=no elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: libgsf not found; disabling save plot to file" >&5 $as_echo "$as_me: WARNING: libgsf not found; disabling save plot to file" >&2;} with_libgsf=no else LIBGSF_CFLAGS=$pkg_cv_LIBGSF_CFLAGS LIBGSF_LIBS=$pkg_cv_LIBGSF_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } $as_echo "#define HAVE_LIBGSF 1" >>confdefs.h with_libgsf=yes fi IP_CFLAGS="$LIBGSF_CFLAGS $LIBGSF_INCLUDES $IP_CFLAGS" IP_LIBS="$LIBGSF_LIBS $IP_LIBS" fi # optional ... use libgoffice to draw plots # pretty basic functionality, really, but we need to be able to build without # it for testing # Check whether --with-libgoffice was given. if test "${with_libgoffice+set}" = set; then : withval=$with_libgoffice; fi if test "x$with_libgoffice" != "xno"; then pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBGOFFICE" >&5 $as_echo_n "checking for LIBGOFFICE... " >&6; } if test -n "$LIBGOFFICE_CFLAGS"; then pkg_cv_LIBGOFFICE_CFLAGS="$LIBGOFFICE_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libgoffice-0.8\""; } >&5 ($PKG_CONFIG --exists --print-errors "libgoffice-0.8") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBGOFFICE_CFLAGS=`$PKG_CONFIG --cflags "libgoffice-0.8" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$LIBGOFFICE_LIBS"; then pkg_cv_LIBGOFFICE_LIBS="$LIBGOFFICE_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libgoffice-0.8\""; } >&5 ($PKG_CONFIG --exists --print-errors "libgoffice-0.8") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBGOFFICE_LIBS=`$PKG_CONFIG --libs "libgoffice-0.8" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then LIBGOFFICE_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libgoffice-0.8" 2>&1` else LIBGOFFICE_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libgoffice-0.8" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$LIBGOFFICE_PKG_ERRORS" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: libgoffice not found; disabling plot display" >&5 $as_echo "$as_me: WARNING: libgoffice not found; disabling plot display" >&2;} with_libgoffice=no elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: libgoffice not found; disabling plot display" >&5 $as_echo "$as_me: WARNING: libgoffice not found; disabling plot display" >&2;} with_libgoffice=no else LIBGOFFICE_CFLAGS=$pkg_cv_LIBGOFFICE_CFLAGS LIBGOFFICE_LIBS=$pkg_cv_LIBGOFFICE_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } $as_echo "#define HAVE_LIBGOFFICE 1" >>confdefs.h with_libgoffice=yes fi IP_CFLAGS="$LIBGOFFICE_CFLAGS $LIBGOFFICE_INCLUDES $IP_CFLAGS" IP_LIBS="$LIBGOFFICE_LIBS $IP_LIBS" fi # optional ... use libgvc to draw graphs of workspace dependencies # Check whether --with-libgvc was given. if test "${with_libgvc+set}" = set; then : withval=$with_libgvc; fi # gvc 2.30 is broken in a number of ways and we can't use it, see for example # http://lists.research.att.com/pipermail/graphviz-devel/2012/001544.html if test "x$with_libgvc" != "xno"; then pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBGVC" >&5 $as_echo_n "checking for LIBGVC... " >&6; } if test -n "$LIBGVC_CFLAGS"; then pkg_cv_LIBGVC_CFLAGS="$LIBGVC_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libgvc > 2.30\""; } >&5 ($PKG_CONFIG --exists --print-errors "libgvc > 2.30") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBGVC_CFLAGS=`$PKG_CONFIG --cflags "libgvc > 2.30" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$LIBGVC_LIBS"; then pkg_cv_LIBGVC_LIBS="$LIBGVC_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libgvc > 2.30\""; } >&5 ($PKG_CONFIG --exists --print-errors "libgvc > 2.30") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBGVC_LIBS=`$PKG_CONFIG --libs "libgvc > 2.30" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then LIBGVC_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libgvc > 2.30" 2>&1` else LIBGVC_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libgvc > 2.30" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$LIBGVC_PKG_ERRORS" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: libgvc not found; disabling workspace dep graph display" >&5 $as_echo "$as_me: WARNING: libgvc not found; disabling workspace dep graph display" >&2;} with_libgvc=no elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: libgvc not found; disabling workspace dep graph display" >&5 $as_echo "$as_me: WARNING: libgvc not found; disabling workspace dep graph display" >&2;} with_libgvc=no else LIBGVC_CFLAGS=$pkg_cv_LIBGVC_CFLAGS LIBGVC_LIBS=$pkg_cv_LIBGVC_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } $as_echo "#define HAVE_LIBGVC 1" >>confdefs.h with_libgvc=yes fi IP_CFLAGS="$LIBGVC_CFLAGS $LIBGVC_INCLUDES $IP_CFLAGS" IP_LIBS="$LIBGVC_LIBS $IP_LIBS" fi # optional ... we add some gsl funcs as builtins if available # Check whether --with-gsl was given. if test "${with_gsl+set}" = set; then : withval=$with_gsl; fi if test "x$with_gsl" != "xno"; then pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GSL" >&5 $as_echo_n "checking for GSL... " >&6; } if test -n "$GSL_CFLAGS"; then pkg_cv_GSL_CFLAGS="$GSL_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gsl\""; } >&5 ($PKG_CONFIG --exists --print-errors "gsl") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GSL_CFLAGS=`$PKG_CONFIG --cflags "gsl" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$GSL_LIBS"; then pkg_cv_GSL_LIBS="$GSL_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gsl\""; } >&5 ($PKG_CONFIG --exists --print-errors "gsl") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GSL_LIBS=`$PKG_CONFIG --libs "gsl" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then GSL_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "gsl" 2>&1` else GSL_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "gsl" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$GSL_PKG_ERRORS" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: gsl not found; disabling extra numerical functions" >&5 $as_echo "$as_me: WARNING: gsl not found; disabling extra numerical functions" >&2;} with_gsl=no elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: gsl not found; disabling extra numerical functions" >&5 $as_echo "$as_me: WARNING: gsl not found; disabling extra numerical functions" >&2;} with_gsl=no else GSL_CFLAGS=$pkg_cv_GSL_CFLAGS GSL_LIBS=$pkg_cv_GSL_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } $as_echo "#define HAVE_GSL 1" >>confdefs.h with_gsl=yes fi IP_CFLAGS="$GSL_CFLAGS $GSL_INCLUDES $IP_CFLAGS" IP_LIBS="$GSL_LIBS $IP_LIBS" fi # optional ... use this to open the help browser, if available # Extract the first word of "xdg-open", so it can be a program name with args. set dummy xdg-open; 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_path_XDG_OPEN+:} false; then : $as_echo_n "(cached) " >&6 else case $XDG_OPEN in [\\/]* | ?:[\\/]*) ac_cv_path_XDG_OPEN="$XDG_OPEN" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_XDG_OPEN="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_XDG_OPEN" && ac_cv_path_XDG_OPEN="no" ;; esac fi XDG_OPEN=$ac_cv_path_XDG_OPEN if test -n "$XDG_OPEN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XDG_OPEN" >&5 $as_echo "$XDG_OPEN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$XDG_OPEN" != "xno"; then $as_echo "#define HAVE_XDG_OPEN 1" >>confdefs.h cat >>confdefs.h <<_ACEOF #define XDG_OPEN "$XDG_OPEN" _ACEOF fi # optional ... use these to update desktop after install # Extract the first word of "update-mime-database", so it can be a program name with args. set dummy update-mime-database; 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_path_UPDATE_MIME_DATABASE+:} false; then : $as_echo_n "(cached) " >&6 else case $UPDATE_MIME_DATABASE in [\\/]* | ?:[\\/]*) ac_cv_path_UPDATE_MIME_DATABASE="$UPDATE_MIME_DATABASE" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_UPDATE_MIME_DATABASE="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_UPDATE_MIME_DATABASE" && ac_cv_path_UPDATE_MIME_DATABASE="no" ;; esac fi UPDATE_MIME_DATABASE=$ac_cv_path_UPDATE_MIME_DATABASE if test -n "$UPDATE_MIME_DATABASE"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $UPDATE_MIME_DATABASE" >&5 $as_echo "$UPDATE_MIME_DATABASE" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "update-desktop-database", so it can be a program name with args. set dummy update-desktop-database; 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_path_UPDATE_DESKTOP_DATABASE+:} false; then : $as_echo_n "(cached) " >&6 else case $UPDATE_DESKTOP_DATABASE in [\\/]* | ?:[\\/]*) ac_cv_path_UPDATE_DESKTOP_DATABASE="$UPDATE_DESKTOP_DATABASE" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_UPDATE_DESKTOP_DATABASE="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_UPDATE_DESKTOP_DATABASE" && ac_cv_path_UPDATE_DESKTOP_DATABASE="no" ;; esac fi UPDATE_DESKTOP_DATABASE=$ac_cv_path_UPDATE_DESKTOP_DATABASE if test -n "$UPDATE_DESKTOP_DATABASE"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $UPDATE_DESKTOP_DATABASE" >&5 $as_echo "$UPDATE_DESKTOP_DATABASE" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi nip_desktop_update=no if test "x$UPDATE_MIME_DATABASE" != "xno"; then if test "x$UPDATE_DESKTOP_DATABASE" != "xno"; then nip_desktop_update=yes fi fi # stop the DBs being updated: useful for packagers # Check whether --enable-update-desktop was given. if test "${enable_update_desktop+set}" = set; then : enableval=$enable_update_desktop; nip_desktop_update=$enableval fi if test x"$nip_desktop_update" = "xyes"; then if true; then UPDATE_DESKTOP_TRUE= UPDATE_DESKTOP_FALSE='#' else UPDATE_DESKTOP_TRUE='#' UPDATE_DESKTOP_FALSE= fi else if false; then UPDATE_DESKTOP_TRUE= UPDATE_DESKTOP_FALSE='#' else UPDATE_DESKTOP_TRUE='#' UPDATE_DESKTOP_FALSE= fi fi # we always need -lm IP_LIBS="$IP_LIBS -lm" # needed by test/test_all.sh # :( what's a better way to do this, argh TOP_SRCDIR=$ac_pwd ac_config_files="$ac_config_files nip2.desktop Makefile man/Makefile man/man1/Makefile share/Makefile share/nip2/Makefile share/nip2/data/Makefile share/nip2/rc/Makefile share/nip2/start/Makefile share/nip2/compat/Makefile share/nip2/compat/7.8/Makefile share/nip2/compat/7.9/Makefile share/nip2/compat/7.10/Makefile share/nip2/compat/7.12/Makefile share/nip2/compat/7.14/Makefile share/nip2/compat/7.16/Makefile share/nip2/compat/7.24/Makefile share/nip2/compat/7.26/Makefile share/nip2/compat/7.28/Makefile share/nip2/compat/7.38/Makefile share/nip2/compat/7.40/Makefile share/nip2/compat/8.2/Makefile share/nip2/compat/8.3/Makefile share/nip2/compat/8.4/Makefile share/nip2/compat/8.5/Makefile share/nip2/compat/8.6/Makefile src/BITMAPS/Makefile src/Makefile test/Makefile test/test_all.sh po/Makefile.in nip2.spec" 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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 $as_echo_n "checking that generated files are newer than configure... " >&6; } if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 $as_echo "done" >&6; } if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${OS_WIN32_TRUE}" && test -z "${OS_WIN32_FALSE}"; then as_fn_error $? "conditional \"OS_WIN32\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${UPDATE_DESKTOP_TRUE}" && test -z "${UPDATE_DESKTOP_FALSE}"; then as_fn_error $? "conditional \"UPDATE_DESKTOP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${UPDATE_DESKTOP_TRUE}" && test -z "${UPDATE_DESKTOP_FALSE}"; then as_fn_error $? "conditional \"UPDATE_DESKTOP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by nip2 $as_me 8.7.0, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac 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 ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ nip2 config.status 8.7.0 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --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 # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" # 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' AS='`$ECHO "$AS" | $SED "$delay_single_quote_subst"`' DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' 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"`' shared_archive_member_spec='`$ECHO "$shared_archive_member_spec" | $SED "$delay_single_quote_subst"`' SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`' host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_import='`$ECHO "$lt_cv_sys_global_symbol_to_import" | $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"`' lt_cv_nm_interface='`$ECHO "$lt_cv_nm_interface" | $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"`' lt_cv_truncate_bin='`$ECHO "$lt_cv_truncate_bin" | $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"`' configure_time_dlsearch_path='`$ECHO "$configure_time_dlsearch_path" | $SED "$delay_single_quote_subst"`' configure_time_lt_sys_library_path='`$ECHO "$configure_time_lt_sys_library_path" | $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 AS \ DLLTOOL \ OBJDUMP \ SHELL \ ECHO \ PATH_SEPARATOR \ SED \ GREP \ EGREP \ FGREP \ LD \ NM \ LN_S \ lt_SP2NL \ lt_NL2SP \ reload_flag \ deplibs_check_method \ file_magic_cmd \ file_magic_glob \ want_nocaseglob \ sharedlib_from_linklib_cmd \ AR \ AR_FLAGS \ archiver_list_spec \ STRIP \ RANLIB \ CC \ CFLAGS \ compiler \ lt_cv_sys_global_symbol_pipe \ lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_import \ lt_cv_sys_global_symbol_to_c_name_address \ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ lt_cv_nm_interface \ nm_file_list_spec \ lt_cv_truncate_bin \ 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\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes ;; *) 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 \ configure_time_dlsearch_path \ configure_time_lt_sys_library_path; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done ac_aux_dir='$ac_aux_dir' # See if we are running on zsh, and set the options that 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' RM='$RM' ofile='$ofile' _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; "default-1") CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;; "nip2.desktop") CONFIG_FILES="$CONFIG_FILES nip2.desktop" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "man/Makefile") CONFIG_FILES="$CONFIG_FILES man/Makefile" ;; "man/man1/Makefile") CONFIG_FILES="$CONFIG_FILES man/man1/Makefile" ;; "share/Makefile") CONFIG_FILES="$CONFIG_FILES share/Makefile" ;; "share/nip2/Makefile") CONFIG_FILES="$CONFIG_FILES share/nip2/Makefile" ;; "share/nip2/data/Makefile") CONFIG_FILES="$CONFIG_FILES share/nip2/data/Makefile" ;; "share/nip2/rc/Makefile") CONFIG_FILES="$CONFIG_FILES share/nip2/rc/Makefile" ;; "share/nip2/start/Makefile") CONFIG_FILES="$CONFIG_FILES share/nip2/start/Makefile" ;; "share/nip2/compat/Makefile") CONFIG_FILES="$CONFIG_FILES share/nip2/compat/Makefile" ;; "share/nip2/compat/7.8/Makefile") CONFIG_FILES="$CONFIG_FILES share/nip2/compat/7.8/Makefile" ;; "share/nip2/compat/7.9/Makefile") CONFIG_FILES="$CONFIG_FILES share/nip2/compat/7.9/Makefile" ;; "share/nip2/compat/7.10/Makefile") CONFIG_FILES="$CONFIG_FILES share/nip2/compat/7.10/Makefile" ;; "share/nip2/compat/7.12/Makefile") CONFIG_FILES="$CONFIG_FILES share/nip2/compat/7.12/Makefile" ;; "share/nip2/compat/7.14/Makefile") CONFIG_FILES="$CONFIG_FILES share/nip2/compat/7.14/Makefile" ;; "share/nip2/compat/7.16/Makefile") CONFIG_FILES="$CONFIG_FILES share/nip2/compat/7.16/Makefile" ;; "share/nip2/compat/7.24/Makefile") CONFIG_FILES="$CONFIG_FILES share/nip2/compat/7.24/Makefile" ;; "share/nip2/compat/7.26/Makefile") CONFIG_FILES="$CONFIG_FILES share/nip2/compat/7.26/Makefile" ;; "share/nip2/compat/7.28/Makefile") CONFIG_FILES="$CONFIG_FILES share/nip2/compat/7.28/Makefile" ;; "share/nip2/compat/7.38/Makefile") CONFIG_FILES="$CONFIG_FILES share/nip2/compat/7.38/Makefile" ;; "share/nip2/compat/7.40/Makefile") CONFIG_FILES="$CONFIG_FILES share/nip2/compat/7.40/Makefile" ;; "share/nip2/compat/8.2/Makefile") CONFIG_FILES="$CONFIG_FILES share/nip2/compat/8.2/Makefile" ;; "share/nip2/compat/8.3/Makefile") CONFIG_FILES="$CONFIG_FILES share/nip2/compat/8.3/Makefile" ;; "share/nip2/compat/8.4/Makefile") CONFIG_FILES="$CONFIG_FILES share/nip2/compat/8.4/Makefile" ;; "share/nip2/compat/8.5/Makefile") CONFIG_FILES="$CONFIG_FILES share/nip2/compat/8.5/Makefile" ;; "share/nip2/compat/8.6/Makefile") CONFIG_FILES="$CONFIG_FILES share/nip2/compat/8.6/Makefile" ;; "src/BITMAPS/Makefile") CONFIG_FILES="$CONFIG_FILES src/BITMAPS/Makefile" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "test/Makefile") CONFIG_FILES="$CONFIG_FILES test/Makefile" ;; "test/test_all.sh") CONFIG_FILES="$CONFIG_FILES test/test_all.sh" ;; "po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;; "nip2.spec") CONFIG_FILES="$CONFIG_FILES nip2.spec" ;; *) 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 "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. 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"` # 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'`; 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 } ;; "libtool":C) # See if we are running on zsh, and set the options that 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 # Generated automatically by $as_me ($PACKAGE) $VERSION # NOTE: Changes made to this file will be lost: look at ltmain.sh. # Provide generalized library-building support services. # Written by Gordon Matzigkeit, 1996 # Copyright (C) 2014 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # 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 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 this program. If not, see . # The names of the tagged configurations supported by this script. available_tags='' # Configured defaults for sys_lib_dlsearch_path munging. : \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"} # ### BEGIN LIBTOOL CONFIG # Assembler program. AS=$lt_AS # DLL creation program. DLLTOOL=$lt_DLLTOOL # Object dumper program. OBJDUMP=$lt_OBJDUMP # Which release of libtool.m4 was used? macro_version=$macro_version macro_revision=$macro_revision # 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 # Shared archive member basename,for filename based shared library versioning on AIX. shared_archive_member_spec=$shared_archive_member_spec # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # An echo program that protects backslashes. ECHO=$lt_ECHO # The PATH separator for the build system. PATH_SEPARATOR=$lt_PATH_SEPARATOR # The host system. host_alias=$host_alias host=$host host_os=$host_os # The build system. build_alias=$build_alias build=$build build_os=$build_os # A sed program that does not truncate output. SED=$lt_SED # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="\$SED -e 1s/^X//" # A grep program that handles long lines. GREP=$lt_GREP # An ERE matcher. EGREP=$lt_EGREP # A literal string matcher. FGREP=$lt_FGREP # A BSD- or MS-compatible name lister. NM=$lt_NM # Whether we need soft or hard links. LN_S=$lt_LN_S # What is the maximum length of a command? max_cmd_len=$max_cmd_len # Object file suffix (normally "o"). objext=$ac_objext # Executable file suffix (normally ""). exeext=$exeext # whether the shell understands "unset". lt_unset=$lt_unset # turn spaces into newlines. SP2NL=$lt_lt_SP2NL # turn newlines into spaces. NL2SP=$lt_lt_NL2SP # convert \$build file names to \$host format. to_host_file_cmd=$lt_cv_to_host_file_cmd # convert \$build files to toolchain format. to_tool_file_cmd=$lt_cv_to_tool_file_cmd # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method = "file_magic". file_magic_cmd=$lt_file_magic_cmd # How to find potential files when deplibs_check_method = "file_magic". file_magic_glob=$lt_file_magic_glob # Find potential files using nocaseglob when deplibs_check_method = "file_magic". want_nocaseglob=$lt_want_nocaseglob # Command to associate shared and link libraries. sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd # The archiver. AR=$lt_AR # Flags to create an archive. AR_FLAGS=$lt_AR_FLAGS # How to feed a file listing to the archiver. archiver_list_spec=$lt_archiver_list_spec # A symbol stripping program. STRIP=$lt_STRIP # Commands used to install an old-style archive. RANLIB=$lt_RANLIB old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Whether to use a lock for old archive extraction. lock_old_archive_extraction=$lock_old_archive_extraction # A C compiler. LTCC=$lt_CC # LTCC compiler flags. LTCFLAGS=$lt_CFLAGS # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration. global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm into a list of symbols to manually relocate. global_symbol_to_import=$lt_lt_cv_sys_global_symbol_to_import # 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 # The name lister interface. nm_interface=$lt_lt_cv_nm_interface # 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 where our libraries should be installed. lt_sysroot=$lt_sysroot # Command to truncate a binary pipe. lt_truncate_bin=$lt_lt_cv_truncate_bin # 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 # Detected run-time system search path for libraries. sys_lib_dlsearch_path_spec=$lt_configure_time_dlsearch_path # Explicit LT_SYS_LIBRARY_PATH set during ./configure time. configure_time_lt_sys_library_path=$lt_configure_time_lt_sys_library_path # 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 cat <<'_LT_EOF' >> "$cfgfile" # ### BEGIN FUNCTIONS SHARED WITH CONFIGURE # func_munge_path_list VARIABLE PATH # ----------------------------------- # VARIABLE is name of variable containing _space_ separated list of # directories to be munged by the contents of PATH, which is string # having a format: # "DIR[:DIR]:" # string "DIR[ DIR]" will be prepended to VARIABLE # ":DIR[:DIR]" # string "DIR[ DIR]" will be appended to VARIABLE # "DIRP[:DIRP]::[DIRA:]DIRA" # string "DIRP[ DIRP]" will be prepended to VARIABLE and string # "DIRA[ DIRA]" will be appended to VARIABLE # "DIR[:DIR]" # VARIABLE will be replaced by "DIR[ DIR]" func_munge_path_list () { case x$2 in x) ;; *:) eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" ;; x:*) eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" ;; *::*) eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" ;; *) eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" ;; esac } # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. func_cc_basename () { for cc_temp in $*""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` } # ### END FUNCTIONS SHARED WITH CONFIGURE _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 set != "${COLLECT_NAMES+set}"; 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) mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ;; "default-1":C) case "$CONFIG_FILES" in *po/Makefile.in*) sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile esac ;; 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 # generated script needs to be executable chmod +x test/test_all.sh { $as_echo "$as_me:${as_lineno-$LINENO}: result: * general build options native win32: $nip_os_win32 native os x: $nip_os_darwin update desktop after install: $nip_desktop_update debug: $enable_debug * optional packages and modules use fftw3 for FFT: $with_fftw3 use gsl for numeric functions: $with_gsl use libgoffice to show plots: $with_libgoffice use libgsf to save plots to files: $with_libgsf use libgvc to show ws dep graphs: $with_libgvc (requires gvc > 2.30) use gtkinfobar to show messages: $nip_use_infobar (requires gtk+-2.0 >= 2.18) use notebook action widget: $nip_use_notebook_action (requires gtk+-2.0 >= 2.20) use notebook group name: $nip_use_notebook_group_name (requires gtk+-2.0 >= 2.24) allow regex searches: $nip_use_gregex (requires glib-2.0 >= 2.14) display help files with xdg: $XDG_OPEN " >&5 $as_echo " * general build options native win32: $nip_os_win32 native os x: $nip_os_darwin update desktop after install: $nip_desktop_update debug: $enable_debug * optional packages and modules use fftw3 for FFT: $with_fftw3 use gsl for numeric functions: $with_gsl use libgoffice to show plots: $with_libgoffice use libgsf to save plots to files: $with_libgsf use libgvc to show ws dep graphs: $with_libgvc (requires gvc > 2.30) use gtkinfobar to show messages: $nip_use_infobar (requires gtk+-2.0 >= 2.18) use notebook action widget: $nip_use_notebook_action (requires gtk+-2.0 >= 2.20) use notebook group name: $nip_use_notebook_group_name (requires gtk+-2.0 >= 2.24) allow regex searches: $nip_use_gregex (requires glib-2.0 >= 2.14) display help files with xdg: $XDG_OPEN " >&6; } nip2-8.7.0/Makefile.in0000644000175000017500000010021513350464104011363 00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ $(am__configure_deps) $(am__DIST_COMMON) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = nip2.desktop nip2.spec CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(nip2appdir)" \ "$(DESTDIR)$(nip2appdatadir)" "$(DESTDIR)$(nip2mimedir)" DATA = $(nip2app_DATA) $(nip2appdata_DATA) $(nip2mime_DATA) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ cscope distdir dist dist-all distcheck am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ $(LISP)config.h.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags CSCOPE = cscope DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config.h.in \ $(srcdir)/nip2.desktop.in $(srcdir)/nip2.spec.in AUTHORS \ COPYING ChangeLog NEWS THANKS TODO compile config.guess \ config.sub depcomp install-sh ltmain.sh missing ylwrap DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ if test -d "$(distdir)"; then \ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -rf "$(distdir)" \ || { sleep 5 && rm -rf "$(distdir)"; }; \ else :; fi am__post_remove_distdir = $(am__remove_distdir) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best DIST_TARGETS = dist-gzip 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@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BISON = @BISON@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DLLWRAP = @DLLWRAP@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FFTW3_CFLAGS = @FFTW3_CFLAGS@ FFTW3_LIBS = @FFTW3_LIBS@ FGREP = @FGREP@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_LIBS = @GSL_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ IP_CFLAGS = @IP_CFLAGS@ IP_LIBS = @IP_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBGOFFICE_CFLAGS = @LIBGOFFICE_CFLAGS@ LIBGOFFICE_LIBS = @LIBGOFFICE_LIBS@ LIBGSF_CFLAGS = @LIBGSF_CFLAGS@ LIBGSF_LIBS = @LIBGSF_LIBS@ LIBGVC_CFLAGS = @LIBGVC_CFLAGS@ LIBGVC_LIBS = @LIBGVC_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ 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@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ REQUIRED_PACKAGES_CFLAGS = @REQUIRED_PACKAGES_CFLAGS@ REQUIRED_PACKAGES_LIBS = @REQUIRED_PACKAGES_LIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOP_SRCDIR = @TOP_SRCDIR@ UPDATE_DESKTOP_DATABASE = @UPDATE_DESKTOP_DATABASE@ UPDATE_MIME_DATABASE = @UPDATE_MIME_DATABASE@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XDG_OPEN = @XDG_OPEN@ XGETTEXT = @XGETTEXT@ 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@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = \ src \ test \ man \ share \ po EXTRA_DIST = \ autogen.sh \ doc \ proj \ m4 \ nip2.desktop.in \ nip2.xml \ nip2.appdata.xml nip2appdir = $(datadir)/applications nip2mimedir = $(datadir)/mime/packages nip2appdatadir = $(datadir)/appdata nip2app_DATA = nip2.desktop nip2mime_DATA = nip2.xml nip2appdata_DATA = nip2.appdata.xml all: config.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 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.h: stamp-h1 @test -f $@ || rm -f stamp-h1 @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1 stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status config.h $(srcdir)/config.h.in: $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.h stamp-h1 nip2.desktop: $(top_builddir)/config.status $(srcdir)/nip2.desktop.in cd $(top_builddir) && $(SHELL) ./config.status $@ nip2.spec: $(top_builddir)/config.status $(srcdir)/nip2.spec.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-nip2appDATA: $(nip2app_DATA) @$(NORMAL_INSTALL) @list='$(nip2app_DATA)'; test -n "$(nip2appdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(nip2appdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(nip2appdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(nip2appdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(nip2appdir)" || exit $$?; \ done uninstall-nip2appDATA: @$(NORMAL_UNINSTALL) @list='$(nip2app_DATA)'; test -n "$(nip2appdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(nip2appdir)'; $(am__uninstall_files_from_dir) install-nip2appdataDATA: $(nip2appdata_DATA) @$(NORMAL_INSTALL) @list='$(nip2appdata_DATA)'; test -n "$(nip2appdatadir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(nip2appdatadir)'"; \ $(MKDIR_P) "$(DESTDIR)$(nip2appdatadir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(nip2appdatadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(nip2appdatadir)" || exit $$?; \ done uninstall-nip2appdataDATA: @$(NORMAL_UNINSTALL) @list='$(nip2appdata_DATA)'; test -n "$(nip2appdatadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(nip2appdatadir)'; $(am__uninstall_files_from_dir) install-nip2mimeDATA: $(nip2mime_DATA) @$(NORMAL_INSTALL) @list='$(nip2mime_DATA)'; test -n "$(nip2mimedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(nip2mimedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(nip2mimedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(nip2mimedir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(nip2mimedir)" || exit $$?; \ done uninstall-nip2mimeDATA: @$(NORMAL_UNINSTALL) @list='$(nip2mime_DATA)'; test -n "$(nip2mimedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(nip2mimedir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscope: cscope.files test ! -s cscope.files \ || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) clean-cscope: -rm -f cscope.files cscope.files: clean-cscope cscopelist cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -rm -f cscope.out cscope.in.out cscope.po.out cscope.files distdir: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-hook -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz $(am__post_remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 $(am__post_remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(am__post_remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) dist-tarZ: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__post_remove_distdir) dist-shar: distdir @echo WARNING: "Support for shar distribution archives is" \ "deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 shar $(distdir) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).shar.gz $(am__post_remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__post_remove_distdir) dist dist-all: $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' $(am__post_remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lz*) \ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build/sub \ && ../../configure \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ --srcdir=../.. --prefix="$$dc_install_base" \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__post_remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @test -n '$(distuninstallcheck_dir)' || { \ echo 'ERROR: trying to run $@ with an empty' \ '$$(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ $(am__cd) '$(distuninstallcheck_dir)' || { \ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-recursive all-am: Makefile $(DATA) config.h installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(nip2appdir)" "$(DESTDIR)$(nip2appdatadir)" "$(DESTDIR)$(nip2mimedir)"; 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." @UPDATE_DESKTOP_FALSE@install-data-hook: 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-nip2appDATA install-nip2appdataDATA \ install-nip2mimeDATA @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) install-data-hook install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) install-exec-hook 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-nip2appDATA uninstall-nip2appdataDATA \ uninstall-nip2mimeDATA @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) uninstall-hook .MAKE: $(am__recursive_targets) all install-am install-data-am \ install-exec-am install-strip uninstall-am .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--refresh check check-am clean clean-cscope clean-generic \ clean-libtool cscope cscopelist-am ctags ctags-am dist \ dist-all dist-bzip2 dist-gzip dist-hook dist-lzip 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-data-hook install-dvi \ install-dvi-am install-exec install-exec-am install-exec-hook \ install-html install-html-am install-info install-info-am \ install-man install-nip2appDATA install-nip2appdataDATA \ install-nip2mimeDATA install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-hook uninstall-nip2appDATA \ uninstall-nip2appdataDATA uninstall-nip2mimeDATA .PRECIOUS: Makefile install-exec-hook: -rm -rf ${DESTDIR}$(datadir)/doc/nip2 $(mkinstalldirs) ${DESTDIR}$(datadir)/doc/nip2 -cp -r ${top_srcdir}/doc/html ${top_srcdir}/doc/pdf ${DESTDIR}$(datadir)/doc/nip2 -rm -rf ${DESTDIR}$(datadir)/doc/nip2/html/CVS -rm -rf ${DESTDIR}$(datadir)/doc/nip2/pdf/CVS @UPDATE_DESKTOP_TRUE@install-data-hook: @UPDATE_DESKTOP_TRUE@ -$(UPDATE_MIME_DATABASE) ${DESTDIR}$(datadir)/mime @UPDATE_DESKTOP_TRUE@ -$(UPDATE_DESKTOP_DATABASE) ${DESTDIR}$(datadir)/applications dist-hook: # make sure we don't get any .svn dirs from EXTRA_DIST # also "fred" gets left around occasionally -find $(distdir) -name .svn -exec rm -rf {} \; -find $(distdir) -name fred -exec rm {} \; uninstall-hook: # make sure we have write permission for 'rm' -chmod -R u+w ${DESTDIR}$(datadir)/doc/nip2 -rm -rf ${DESTDIR}$(datadir)/doc/nip2 -$(UPDATE_MIME_DATABASE) ${DESTDIR}$(datadir)/mime -$(UPDATE_DESKTOP_DATABASE) ${DESTDIR}$(datadir)/applications # 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: nip2-8.7.0/nip2.xml0000644000175000017500000000066413224651032010715 00000000000000 VIPS image VIPS image nip2-8.7.0/missing0000755000175000017500000001533013350464075010727 00000000000000#! /bin/sh # Common wrapper for a few potentially missing GNU programs. scriptversion=2013-10-28.13; # UTC # Copyright (C) 1996-2014 Free Software Foundation, Inc. # Originally written by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try '$0 --help' for more information" exit 1 fi case $1 in --is-lightweight) # Used by our autoconf macros to check whether the available missing # script is modern enough. exit 0 ;; --run) # Back-compat with the calling convention used by older automake. shift ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due to PROGRAM being missing or too old. Options: -h, --help display this help and exit -v, --version output version information and exit Supported PROGRAM values: aclocal autoconf autoheader autom4te automake makeinfo bison yacc flex lex help2man Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and 'g' are ignored when checking the name. Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: unknown '$1' option" echo 1>&2 "Try '$0 --help' for more information" exit 1 ;; esac # Run the given program, remember its exit status. "$@"; st=$? # If it succeeded, we are done. test $st -eq 0 && exit 0 # Also exit now if we it failed (or wasn't found), and '--version' was # passed; such an option is passed most likely to detect whether the # program is present and works. case $2 in --version|--help) exit $st;; esac # Exit code 63 means version mismatch. This often happens when the user # tries to use an ancient version of a tool on a file that requires a # minimum version. if test $st -eq 63; then msg="probably too old" elif test $st -eq 127; then # Program was missing. msg="missing on your system" else # Program was found and executed, but failed. Give up. exit $st fi perl_URL=http://www.perl.org/ flex_URL=http://flex.sourceforge.net/ gnu_software_URL=http://www.gnu.org/software program_details () { case $1 in aclocal|automake) echo "The '$1' program is part of the GNU Automake package:" echo "<$gnu_software_URL/automake>" echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/autoconf>" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; autoconf|autom4te|autoheader) echo "The '$1' program is part of the GNU Autoconf package:" echo "<$gnu_software_URL/autoconf/>" echo "It also requires GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; esac } give_advice () { # Normalize program name to check for. normalized_program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` printf '%s\n' "'$1' is $msg." configure_deps="'configure.ac' or m4 files included by 'configure.ac'" case $normalized_program in autoconf*) echo "You should only need it if you modified 'configure.ac'," echo "or m4 files included by it." program_details 'autoconf' ;; autoheader*) echo "You should only need it if you modified 'acconfig.h' or" echo "$configure_deps." program_details 'autoheader' ;; automake*) echo "You should only need it if you modified 'Makefile.am' or" echo "$configure_deps." program_details 'automake' ;; aclocal*) echo "You should only need it if you modified 'acinclude.m4' or" echo "$configure_deps." program_details 'aclocal' ;; autom4te*) echo "You might have modified some maintainer files that require" echo "the 'autom4te' program to be rebuilt." program_details 'autom4te' ;; bison*|yacc*) echo "You should only need it if you modified a '.y' file." echo "You may want to install the GNU Bison package:" echo "<$gnu_software_URL/bison/>" ;; lex*|flex*) echo "You should only need it if you modified a '.l' file." echo "You may want to install the Fast Lexical Analyzer package:" echo "<$flex_URL>" ;; help2man*) echo "You should only need it if you modified a dependency" \ "of a man page." echo "You may want to install the GNU Help2man package:" echo "<$gnu_software_URL/help2man/>" ;; makeinfo*) echo "You should only need it if you modified a '.texi' file, or" echo "any other file indirectly affecting the aspect of the manual." echo "You might want to install the Texinfo package:" echo "<$gnu_software_URL/texinfo/>" echo "The spurious makeinfo call might also be the consequence of" echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might" echo "want to install GNU make:" echo "<$gnu_software_URL/make/>" ;; *) echo "You might have modified some files without having the proper" echo "tools for further handling them. Check the 'README' file, it" echo "often tells you about the needed prerequisites for installing" echo "this package. You may also peek at any GNU archive site, in" echo "case some other package contains this missing '$1' program." ;; esac } give_advice "$1" | sed -e '1s/^/WARNING: /' \ -e '2,$s/^/ /' >&2 # Propagate the correct exit status (expected to be 127 for a program # not found, 63 for a program that failed due to version mismatch). exit $st # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: nip2-8.7.0/nip2.appdata.xml0000644000175000017500000000224113330327245012323 00000000000000 nip2.desktop CC0-1.0 GPL-2.0+ and LGPL-2.1+ nip2 Image processing spreadsheet

nip2 is a GUI for the VIPS scientific image processing library. It's a little like a spreadsheet: you create a set of formula connecting your images together, and on a change nip2 recalculates.

It can load images in most commonly used formats, but also in scientific formats such as Matlab, FITS, OpenSlide, OpenEXR, and others. nip2 is especially useful with very large images. You can easily work with multi-gigabyte images even on a modest computer.

https://raw.githubusercontent.com/jcupitt/nip2/master/doc/src/figs/snap1.jpg https://jcupitt.github.io/libvips https://github.com/jcupitt/nip2
nip2-8.7.0/config.guess0000755000175000017500000012637313350464075011662 00000000000000#! /bin/sh # Attempt to guess a canonical system name. # Copyright 1992-2018 Free Software Foundation, Inc. timestamp='2018-02-24' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # # Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # # You can get the latest version of this script from: # https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess # # Please send patches to . me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright 1992-2018 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > "$dummy.c" ; for c in cc gcc c89 c99 ; do if ($c -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown case "$UNAME_SYSTEM" in Linux|GNU|GNU/*) # If the system lacks a compiler, then just pick glibc. # We could probably try harder. LIBC=gnu eval "$set_cc_for_build" cat <<-EOF > "$dummy.c" #include #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc #else LIBC=gnu #endif EOF eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`" # If ldd exists, use it to detect musl libc. if command -v ldd >/dev/null && \ ldd --version 2>&1 | grep -q ^musl then LIBC=musl fi ;; esac # Note: order is significant - the case branches are not exclusive. case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ "/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 ;; earmv*) arch=`echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,'` endian=`echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p'` machine="${arch}${endian}"-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) and ABI. case "$UNAME_MACHINE_ARCH" in earm*) os=netbsdelf ;; 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 # Determine ABI tags. case "$UNAME_MACHINE_ARCH" in earm*) expr='s/^earmv[0-9]/-eabi/;s/eb$//' abi=`echo "$UNAME_MACHINE_ARCH" | sed -e "$expr"` ;; 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/[-_].*//' | cut -d. -f1,2` ;; 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}${abi}" exit ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` echo "$UNAME_MACHINE_ARCH"-unknown-bitrig"$UNAME_RELEASE" exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo "$UNAME_MACHINE_ARCH"-unknown-openbsd"$UNAME_RELEASE" exit ;; *:LibertyBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'` echo "$UNAME_MACHINE_ARCH"-unknown-libertybsd"$UNAME_RELEASE" exit ;; *:MidnightBSD:*:*) echo "$UNAME_MACHINE"-unknown-midnightbsd"$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 ;; *:Sortix:*:*) echo "$UNAME_MACHINE"-unknown-sortix exit ;; *:Redox:*:*) echo "$UNAME_MACHINE"-unknown-redox exit ;; mips:OSF1:*.*) echo mips-dec-osf1 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 ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo "$UNAME_MACHINE"-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo "$UNAME_MACHINE"-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix"$UNAME_RELEASE" exit ;; arm*:riscos:*:*|arm*:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) echo "$UNAME_MACHINE"-ibm-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`" exit ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`" exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) echo i386-pc-auroraux"$UNAME_RELEASE" exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) eval "$set_cc_for_build" SUN_ARCH=i386 # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if [ "$CC_FOR_BUILD" != no_compiler_found ]; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH=x86_64 fi fi echo "$SUN_ARCH"-pc-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos"`echo "$UNAME_RELEASE"|sed -e 's/-/_/'`" exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos"$UNAME_RELEASE" exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x$UNAME_RELEASE" = x && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos"$UNAME_RELEASE" ;; sun4) echo sparc-sun-sunos"$UNAME_RELEASE" ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos"$UNAME_RELEASE" exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint"$UNAME_RELEASE" exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint"$UNAME_RELEASE" exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint"$UNAME_RELEASE" exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint"$UNAME_RELEASE" exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint"$UNAME_RELEASE" exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint"$UNAME_RELEASE" exit ;; m68k:machten:*:*) echo m68k-apple-machten"$UNAME_RELEASE" exit ;; powerpc:machten:*:*) echo powerpc-apple-machten"$UNAME_RELEASE" exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix"$UNAME_RELEASE" exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix"$UNAME_RELEASE" exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix"$UNAME_RELEASE" exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval "$set_cc_for_build" sed 's/^ //' << EOF > "$dummy.c" #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" && dummyarg=`echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`"$dummy" "$dummyarg"` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos"$UNAME_RELEASE" exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ "$UNAME_PROCESSOR" = mc88100 ] || [ "$UNAME_PROCESSOR" = mc88110 ] then if [ "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx ] || \ [ "$TARGET_BINARY_INTERFACE"x = x ] then echo m88k-dg-dgux"$UNAME_RELEASE" else echo m88k-dg-dguxbcs"$UNAME_RELEASE" fi else echo i586-dg-dgux"$UNAME_RELEASE" fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix"`echo "$UNAME_RELEASE"|sed -e 's/-/_/g'`" exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV="$UNAME_VERSION.$UNAME_RELEASE" fi echo "$UNAME_MACHINE"-ibm-aix"$IBM_REV" exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval "$set_cc_for_build" sed 's/^ //' << EOF > "$dummy.c" #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El "$IBM_CPU_ID" | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/lslpp ] ; then IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` else IBM_REV="$UNAME_VERSION.$UNAME_RELEASE" fi echo "$IBM_ARCH"-ibm-aix"$IBM_REV" exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*) 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) UNAME_PROCESSOR=x86_64 ;; i386) UNAME_PROCESSOR=i586 ;; esac echo "$UNAME_PROCESSOR"-unknown-freebsd"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`" exit ;; i*:CYGWIN*:*) echo "$UNAME_MACHINE"-pc-cygwin exit ;; *:MINGW64*:*) echo "$UNAME_MACHINE"-pc-mingw64 exit ;; *:MINGW*:*) echo "$UNAME_MACHINE"-pc-mingw32 exit ;; *:MSYS*:*) echo "$UNAME_MACHINE"-pc-msys exit ;; i*: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 ;; i*:UWIN*:*) echo "$UNAME_MACHINE"-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" exit ;; *:GNU:*:*) # the GNU system echo "`echo "$UNAME_MACHINE"|sed -e 's,[-/].*$,,'`-unknown-$LIBC`echo "$UNAME_RELEASE"|sed -e 's,/.*$,,'`" exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo "$UNAME_MACHINE-unknown-`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`-$LIBC" exit ;; i*86:Minix:*:*) echo "$UNAME_MACHINE"-pc-minix exit ;; aarch64:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC=gnulibc1 ; fi echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; arc:Linux:*:* | arceb:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; arm*:Linux:*:*) eval "$set_cc_for_build" if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabi else echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabihf fi fi exit ;; avr32*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; cris:Linux:*:*) echo "$UNAME_MACHINE"-axis-linux-"$LIBC" exit ;; crisv32:Linux:*:*) echo "$UNAME_MACHINE"-axis-linux-"$LIBC" exit ;; e2k:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; frv:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; hexagon:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; i*86:Linux:*:*) echo "$UNAME_MACHINE"-pc-linux-"$LIBC" exit ;; ia64:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; k1om:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; m32r*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; m68*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; mips:Linux:*:* | mips64:Linux:*:*) eval "$set_cc_for_build" sed 's/^ //' << EOF > "$dummy.c" #undef CPU #undef ${UNAME_MACHINE} #undef ${UNAME_MACHINE}el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=${UNAME_MACHINE}el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=${UNAME_MACHINE} #else CPU= #endif #endif EOF eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU'`" test "x$CPU" != x && { echo "$CPU-unknown-linux-$LIBC"; exit; } ;; mips64el:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; openrisc*:Linux:*:*) echo or1k-unknown-linux-"$LIBC" exit ;; or32:Linux:*:* | or1k*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; padre:Linux:*:*) echo sparc-unknown-linux-"$LIBC" exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-"$LIBC" exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-"$LIBC" ;; PA8*) echo hppa2.0-unknown-linux-"$LIBC" ;; *) echo hppa-unknown-linux-"$LIBC" ;; esac exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-"$LIBC" exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-"$LIBC" exit ;; ppc64le:Linux:*:*) echo powerpc64le-unknown-linux-"$LIBC" exit ;; ppcle:Linux:*:*) echo powerpcle-unknown-linux-"$LIBC" exit ;; riscv32:Linux:*:* | riscv64:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo "$UNAME_MACHINE"-ibm-linux-"$LIBC" exit ;; sh64*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; sh*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; tile*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; vax:Linux:*:*) echo "$UNAME_MACHINE"-dec-linux-"$LIBC" exit ;; x86_64:Linux:*:*) if objdump -f /bin/sh | grep -q elf32-x86-64; then echo "$UNAME_MACHINE"-pc-linux-"$LIBC"x32 else echo "$UNAME_MACHINE"-pc-linux-"$LIBC" fi exit ;; xtensa*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo "$UNAME_MACHINE"-pc-sysv4.2uw"$UNAME_VERSION" exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo "$UNAME_MACHINE"-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo "$UNAME_MACHINE"-unknown-stop exit ;; i*86:atheos:*:*) echo "$UNAME_MACHINE"-unknown-atheos exit ;; i*86:syllable:*:*) echo "$UNAME_MACHINE"-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) echo i386-unknown-lynxos"$UNAME_RELEASE" exit ;; i*86:*DOS:*:*) echo "$UNAME_MACHINE"-pc-msdosdjgpp exit ;; i*86:*:4.*:*) 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 configure will decide that # this is a cross-build. echo i586-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv"$UNAME_RELEASE" # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv"$UNAME_RELEASE" # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos"$UNAME_RELEASE" exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos"$UNAME_RELEASE" exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos"$UNAME_RELEASE" exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) echo powerpc-unknown-lynxos"$UNAME_RELEASE" exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv"$UNAME_RELEASE" exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo "$UNAME_MACHINE"-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo "$UNAME_MACHINE"-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux"$UNAME_RELEASE" exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv"$UNAME_RELEASE" else echo mips-unknown-sysv"$UNAME_RELEASE" fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku exit ;; x86_64:Haiku:*:*) echo x86_64-unknown-haiku exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux"$UNAME_RELEASE" exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux"$UNAME_RELEASE" exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux"$UNAME_RELEASE" exit ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux"$UNAME_RELEASE" exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux"$UNAME_RELEASE" exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux"$UNAME_RELEASE" exit ;; SX-ACE:SUPER-UX:*:*) echo sxace-nec-superux"$UNAME_RELEASE" exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody"$UNAME_RELEASE" exit ;; *:Rhapsody:*:*) echo "$UNAME_MACHINE"-apple-rhapsody"$UNAME_RELEASE" exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown eval "$set_cc_for_build" if test "$UNAME_PROCESSOR" = unknown ; then UNAME_PROCESSOR=powerpc fi if test "`echo "$UNAME_RELEASE" | sed -e 's/\..*//'`" -le 10 ; then if [ "$CC_FOR_BUILD" != no_compiler_found ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then case $UNAME_PROCESSOR in i386) UNAME_PROCESSOR=x86_64 ;; powerpc) UNAME_PROCESSOR=powerpc64 ;; esac fi # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_PPC >/dev/null then UNAME_PROCESSOR=powerpc fi fi elif test "$UNAME_PROCESSOR" = i386 ; then # Avoid executing cc on OS X 10.9, as it ships with a stub # that puts up a graphical alert prompting to install # developer tools. Any system running Mac OS X 10.7 or # later (Darwin 11 and later) is required to have a 64-bit # processor. This is not true of the ARM version of Darwin # that Apple uses in portable devices. UNAME_PROCESSOR=x86_64 fi echo "$UNAME_PROCESSOR"-apple-darwin"$UNAME_RELEASE" exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = x86; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo "$UNAME_PROCESSOR"-"$UNAME_MACHINE"-nto-qnx"$UNAME_RELEASE" exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NEO-*:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk"$UNAME_RELEASE" exit ;; NSE-*:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk"$UNAME_RELEASE" exit ;; NSR-*:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk"$UNAME_RELEASE" exit ;; NSV-*:NONSTOP_KERNEL:*:*) echo nsv-tandem-nsk"$UNAME_RELEASE" exit ;; NSX-*:NONSTOP_KERNEL:*:*) echo nsx-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 ;; amd64:Isilon\ OneFS:*:*) echo x86_64-unknown-onefs exit ;; esac echo "$0: unable to guess system type" >&2 case "$UNAME_MACHINE:$UNAME_SYSTEM" in mips:Linux | mips64:Linux) # If we got here on MIPS GNU/Linux, output extra information. cat >&2 <&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-functions 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: nip2-8.7.0/test-driver0000755000175000017500000001104013224651044011512 00000000000000#! /bin/sh # test-driver - basic testsuite driver script. scriptversion=2013-07-13.22; # UTC # Copyright (C) 2011-2014 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . # Make unconditional expansion of undefined variables an error. This # helps a lot in preventing typo-related bugs. set -u usage_error () { echo "$0: $*" >&2 print_usage >&2 exit 2 } print_usage () { cat <$log_file 2>&1 estatus=$? if test $enable_hard_errors = no && test $estatus -eq 99; then tweaked_estatus=1 else tweaked_estatus=$estatus fi case $tweaked_estatus:$expect_failure in 0:yes) col=$red res=XPASS recheck=yes gcopy=yes;; 0:*) col=$grn res=PASS recheck=no gcopy=no;; 77:*) col=$blu res=SKIP recheck=no gcopy=yes;; 99:*) col=$mgn res=ERROR recheck=yes gcopy=yes;; *:yes) col=$lgn res=XFAIL recheck=no gcopy=yes;; *:*) col=$red res=FAIL recheck=yes gcopy=yes;; esac # Report the test outcome and exit status in the logs, so that one can # know whether the test passed or failed simply by looking at the '.log' # file, without the need of also peaking into the corresponding '.trs' # file (automake bug#11814). echo "$res $test_name (exit status: $estatus)" >>$log_file # Report outcome to console. echo "${col}${res}${std}: $test_name" # Register the test result, and other relevant metadata. echo ":test-result: $res" > $trs_file echo ":global-test-result: $res" >> $trs_file echo ":recheck: $recheck" >> $trs_file echo ":copy-in-global-log: $gcopy" >> $trs_file # 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: nip2-8.7.0/po/0000755000175000017500000000000013350464161010020 500000000000000nip2-8.7.0/po/LINGUAS0000644000175000017500000000000013224651032010746 00000000000000nip2-8.7.0/po/nip2.pot0000644000175000017500000020656513336551667011366 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?" "product=glib&keywords=I18N+L10N&component=general\n" "POT-Creation-Date: 2018-08-20 15:44+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" #: ../src/conversionview.c:50 msgid "Unable to find image range." msgstr "" #: ../src/conversionview.c:51 msgid "Find image range failed." msgstr "" #: ../src/conversionview.c:74 msgid "Unable to scale image." msgstr "" #: ../src/conversionview.c:75 msgid "Maximum and minimum pixel values are equal." msgstr "" #. Build menu. One for each window, as we need to track falsecolour #. * etc. toggles. Could just have one, and modify pre-popup, but this #. * is easier. #. #: ../src/conversionview.c:207 msgid "Convert menu" msgstr "" #: ../src/conversionview.c:208 msgid "_Scale" msgstr "" #: ../src/conversionview.c:210 msgid "_False Color" msgstr "" #: ../src/conversionview.c:212 msgid "_Interpret" msgstr "" #: ../src/conversionview.c:214 ../src/regionview.c:989 msgid "_Reset" msgstr "" #: ../src/conversionview.c:216 msgid "Set As Workspace _Default" msgstr "" #: ../src/tslider.c:386 msgid "Slider value ... edit!" msgstr "" #: ../src/tslider.c:407 msgid "Left-drag to set number" msgstr "" #: ../src/fontnameview.c:63 ../src/optionview.c:185 ../src/sliderview.c:58 #: ../src/gtkutil.c:761 ../src/gtkutil.c:796 ../src/gtkutil.c:850 #: ../src/editview.c:60 ../src/pathnameview.c:63 ../src/formula.c:198 #, c-format msgid "%s:" msgstr "" #: ../src/workspacegroup.c:400 ../src/workspacegroup.c:459 msgid "Version mismatch." msgstr "" #: ../src/workspacegroup.c:401 ../src/workspacegroup.c:460 #, c-format msgid "" "File \"%s\" needs version %d.%d. Merging into this tab may cause " "compatibility problems." msgstr "" #: ../src/workspacegroup.c:739 msgid "Workspace" msgstr "" #. Changed later. #. #: ../src/workspacegroup.c:802 msgid "Empty workspace" msgstr "" #: ../src/workspacegroup.c:835 msgid "Default empty workspace" msgstr "" #: ../src/iobject.c:175 msgid "Object" msgstr "" #: ../src/matrix.c:149 ../src/main.c:694 msgid "Text" msgstr "" #: ../src/matrix.c:150 msgid "Sliders" msgstr "" #: ../src/matrix.c:151 msgid "Toggle buttons" msgstr "" #: ../src/matrix.c:152 msgid "Text, plus scale and offset" msgstr "" #: ../src/matrix.c:163 msgid "Display as" msgstr "" #. Expands to eg. "Edit Toggle A1". #. #: ../src/matrix.c:191 ../src/iregion.c:236 ../src/colour.c:265 #: ../src/classmodel.c:763 ../src/clock.c:99 #, c-format msgid "Edit %s %s" msgstr "" #: ../src/matrix.c:199 ../src/iregion.c:242 ../src/colour.c:273 #: ../src/classmodel.c:774 ../src/clock.c:105 #, c-format msgid "Set %s" msgstr "" #: ../src/matrix.c:276 ../src/option.c:71 ../src/slider.c:57 #: ../src/pathname.c:78 ../src/string.c:70 ../src/colour.c:309 #: ../src/number.c:51 ../src/imageheader.c:231 ../src/toggle.c:51 #: ../src/clock.c:194 ../src/plot.c:363 ../src/fontname.c:61 msgid "Value" msgstr "" #: ../src/matrix.c:279 ../src/matrixview.c:398 msgid "Scale" msgstr "" #: ../src/matrix.c:282 ../src/matrixview.c:403 msgid "Offset" msgstr "" #: ../src/matrix.c:285 ../src/columnview.c:231 ../src/columnview.c:294 #: ../src/program.c:597 ../src/program.c:627 ../src/program.c:1223 #: ../src/program.c:1256 msgid "Filename" msgstr "" #: ../src/matrix.c:288 msgid "Display" msgstr "" #: ../src/matrix.c:309 msgid "Matrix" msgstr "" #: ../src/option.c:65 ../src/slider.c:48 ../src/pathname.c:75 #: ../src/string.c:67 ../src/number.c:48 ../src/mainw.c:1283 #: ../src/mainw.c:1334 ../src/toggle.c:48 ../src/plot.c:343 #: ../src/program.c:1136 ../src/program.c:1178 ../src/fontname.c:58 msgid "Caption" msgstr "" #: ../src/option.c:68 msgid "Labels" msgstr "" #: ../src/vipsobject.c:106 ../src/call.c:273 ../src/class.c:657 #: ../src/class.c:889 ../src/class.c:986 ../src/compile.c:1765 msgid "Too many arguments." msgstr "" #: ../src/vipsobject.c:107 #, c-format msgid "No more than %d arguments allowed." msgstr "" #: ../src/vipsobject.c:239 msgid "Wrong number of required arguments." msgstr "" #: ../src/vipsobject.c:240 #, c-format msgid "Operation \"%s\" has %d required arguments, you supplied %d." msgstr "" #: ../src/vipsobject.c:276 ../src/vipsobject.c:409 ../src/util.c:191 #: ../src/cache.c:875 msgid "VIPS library error." msgstr "" #: ../src/toolkitbrowser.c:282 msgid "Action" msgstr "" #: ../src/toolkitbrowser.c:290 msgid "Parameters" msgstr "" #: ../src/toolkitbrowser.c:298 msgid "Menu Item" msgstr "" #. Need one menu per image window (could have a single menu for all #. * windows, but then we'd have to set the state of the toggle buttons #. * before mapping) #. #: ../src/imagepresent.c:1564 msgid "Ruler menu" msgstr "" #: ../src/imagepresent.c:1565 msgid "Rulers In _mm" msgstr "" #: ../src/imagepresent.c:1567 msgid "Show _Offset" msgstr "" #. Create signals. #. #. Init methods. #. #: ../src/paintboxview.c:109 msgid "Paintbox bar menu" msgstr "" #: ../src/paintboxview.c:210 msgid "Clear undo history?" msgstr "" #: ../src/paintboxview.c:211 msgid "" "Are you sure you want to clear all undo and redo? This will free up memory, " "but you will no longer be able to undo or redo any of the painting you have " "done so far." msgstr "" #: ../src/paintboxview.c:246 msgid "Manipulate regions" msgstr "" #. IMAGEMODEL_SELECT #: ../src/paintboxview.c:247 msgid "Pan window" msgstr "" #. IMAGEMODEL_PAN #: ../src/paintboxview.c:248 msgid "Zoom in on mouse" msgstr "" #. IMAGEMODEL_MAGIN #: ../src/paintboxview.c:249 ../src/imageview.c:506 ../src/imageview.c:560 msgid "Zoom out" msgstr "" #. IMAGEMODEL_MAGOUT #: ../src/paintboxview.c:250 msgid "Read pixel into inkwell" msgstr "" #. IMAGEMODEL_DROPPER #: ../src/paintboxview.c:251 msgid "Freehand draw " msgstr "" #. IMAGEMODEL_PEN #: ../src/paintboxview.c:252 msgid "Draw straight lines" msgstr "" #. IMAGEMODEL_LINE #: ../src/paintboxview.c:253 msgid "Fill rectangles" msgstr "" #. IMAGEMODEL_RECT #: ../src/paintboxview.c:254 msgid "Flood while pixel not equal to ink" msgstr "" #. IMAGEMODEL_FLOOD #: ../src/paintboxview.c:256 msgid "Flood while pixel equal to click" msgstr "" #. IMAGEMODEL_BLOB #: ../src/paintboxview.c:258 msgid "Draw text" msgstr "" #. IMAGEMODEL_TEXT #: ../src/paintboxview.c:259 ../src/main.c:695 msgid "Smudge" msgstr "" #: ../src/paintboxview.c:309 msgid "Undo last paint action" msgstr "" #: ../src/paintboxview.c:318 msgid "Redo last paint action" msgstr "" #: ../src/paintboxview.c:327 msgid "Clear all undo and redo buffers" msgstr "" #: ../src/paintboxview.c:377 msgid "Enter text for text tool" msgstr "" #: ../src/boxes.c:245 msgid "Close _without Saving" msgstr "" #. Translators: translate this to a credit for you, and it'll appear in #. * the About box. #. #: ../src/boxes.c:264 msgid "translator_credits" msgstr "" #: ../src/boxes.c:273 #, c-format msgid "About %s." msgstr "" #: ../src/boxes.c:276 #, c-format msgid "%s is an image processing package." msgstr "" #: ../src/boxes.c:280 #, c-format msgid "" "%s comes with ABSOLUTELY NO WARRANTY. This is free software and you are " "welcome to redistribute it under certain conditions, see http://www.gnu.org." msgstr "" #: ../src/boxes.c:299 msgid "Personal start folder" msgstr "" #: ../src/boxes.c:303 msgid "Homepage" msgstr "" #: ../src/boxes.c:306 msgid "Linked to VIPS" msgstr "" #: ../src/boxes.c:309 msgid "Built against VIPS" msgstr "" #: ../src/boxes.c:322 msgid "Temp files in" msgstr "" #. Expands to (eg.) "14GB free in /pics/tmp" #: ../src/boxes.c:332 ../src/mainw.c:652 #, c-format msgid " in \"%s\"" msgstr "" #: ../src/boxes.c:336 ../src/mainw.c:656 #, c-format msgid "%d cells in heap, %d cells free, %d cells maximum" msgstr "" #: ../src/boxes.c:342 #, c-format msgid "%d vips calls cached by nip2" msgstr "" #: ../src/boxes.c:346 #, c-format msgid "%d vips operations cached by libvips" msgstr "" #: ../src/boxes.c:350 ../src/mainw.c:670 #, c-format msgid "using %d threads" msgstr "" #: ../src/boxes.c:353 #, c-format msgid "%d pixel buffers in vips" msgstr "" #: ../src/boxes.c:358 msgid " of ram in pixel buffers" msgstr "" #: ../src/boxes.c:362 msgid " of ram highwater mark" msgstr "" #: ../src/boxes.c:425 msgid "Help page not found." msgstr "" #: ../src/boxes.c:426 #, c-format msgid "No indexed help page found for tag \"%s\"" msgstr "" #: ../src/boxes.c:618 msgid "Search for" msgstr "" #: ../src/boxes.c:619 msgid "Case sensitive" msgstr "" #: ../src/boxes.c:621 msgid "Regular expression" msgstr "" #: ../src/boxes.c:623 msgid "Search from start" msgstr "" #: ../src/boxes.c:691 ../src/boxes.c:702 ../src/boxes.c:731 msgid "Unable to view help file." msgstr "" #: ../src/boxes.c:692 #, c-format msgid "Unable to open URL \"%s\", windows error code = %d." msgstr "" #: ../src/boxes.c:703 #, c-format msgid "" "Attempt to view URL with xdg-open failed\n" "%s" msgstr "" #: ../src/boxes.c:708 ../src/boxes.c:740 msgid "Browser window opened." msgstr "" #: ../src/boxes.c:710 ../src/boxes.c:742 msgid "You may need to switch desktops to see the new window." msgstr "" #: ../src/boxes.c:733 #, c-format msgid "" "Attempted to launch browser with command:\n" " %s\n" "You can change this command in Preferences." msgstr "" #: ../src/boxes.c:774 msgid "Select Font" msgstr "" #: ../src/boxes.c:832 msgid "Font not found." msgstr "" #: ../src/boxes.c:833 #, c-format msgid "Font \"%s\" not found on system." msgstr "" #: ../src/boxes.c:913 msgid "Pick a font" msgstr "" #: ../src/boxes.c:918 msgid "Set Font" msgstr "" #: ../src/boxes.c:964 msgid "Click to select font" msgstr "" #: ../src/toggleview.c:87 ../src/gtkutil.c:858 msgid "Left-click to change value" msgstr "" #: ../src/columnview.c:131 #, c-format msgid "Merge Into Column \"%s\"" msgstr "" #: ../src/columnview.c:182 #, c-format msgid "Save Column \"%s\"" msgstr "" #: ../src/columnview.c:229 ../src/columnview.c:290 ../src/row.c:482 #: ../src/mainw.c:1282 ../src/mainw.c:1332 ../src/defbrowser.c:253 #: ../src/program.c:596 ../src/program.c:625 ../src/program.c:1135 #: ../src/program.c:1176 ../src/program.c:1222 ../src/program.c:1254 #: ../src/program.c:1580 ../src/program.c:1621 msgid "Name" msgstr "" #: ../src/columnview.c:230 ../src/columnview.c:292 msgid "Toolkit" msgstr "" #: ../src/columnview.c:290 msgid "Set menu item text here" msgstr "" #: ../src/columnview.c:292 msgid "Add to this toolkit" msgstr "" #: ../src/columnview.c:294 msgid "Store column in this file" msgstr "" #: ../src/columnview.c:297 #, c-format msgid "New Menu Item from Column \"%s\"" msgstr "" #: ../src/columnview.c:302 msgid "Menuize" msgstr "" #: ../src/columnview.c:757 msgid "Edit caption, press enter to accept changes, press escape to cancel" msgstr "" #: ../src/columnview.c:810 msgid "Enter expressions here" msgstr "" #: ../src/columnview.c:883 msgid "doubleclick to set title" msgstr "" #: ../src/columnview.c:892 msgid "Fold the column away" msgstr "" #: ../src/columnview.c:897 msgid "Open the column" msgstr "" #: ../src/columnview.c:1032 msgid "Column menu" msgstr "" #: ../src/columnview.c:1033 msgid "_Edit Caption" msgstr "" #: ../src/columnview.c:1035 ../src/mainw.c:1663 ../src/program.c:1807 msgid "Select _All" msgstr "" #: ../src/columnview.c:1039 msgid "Merge Into Column" msgstr "" #: ../src/columnview.c:1044 msgid "Make Column Into _Menu Item" msgstr "" #: ../src/columnview.c:1112 msgid "Left-drag to move, left-double-click to set title, right-click for menu" msgstr "" #: ../src/columnview.c:1145 msgid "Delete the column" msgstr "" #: lex.l:89 lex.l:99 msgid "line too long" msgstr "" #: lex.l:107 msgid "end of line inside string" msgstr "" #: lex.l:109 msgid "no end of string" msgstr "" #: lex.l:126 lex.l:136 lex.l:144 msgid "bad char constant" msgstr "" #: lex.l:169 msgid "nested comment" msgstr "" #: lex.l:175 msgid "no end of comment" msgstr "" #: lex.l:305 #, c-format msgid "bad number %s" msgstr "" #: lex.l:385 #, c-format msgid "illegal character \"%c\"" msgstr "" #: ../src/row.c:287 msgid "Error in row." msgstr "" #. Elements are name of row, principal error, #. * secondary error. #. #: ../src/row.c:291 #, c-format msgid "" "Error in row %s: %s\n" "%s" msgstr "" #. Expands to eg. "B1 refers to: B2, B3". #. #: ../src/row.c:501 msgid "refers to" msgstr "" #. Expands to eg. "B1 is referred to by: B2, B3". #. #: ../src/row.c:512 msgid "is referred to by" msgstr "" #: ../src/row.c:527 msgid "is blocked on" msgstr "" #: ../src/imagemodel.c:491 msgid "No text specified." msgstr "" #: ../src/imagemodel.c:492 msgid "Enter some text to paint in the entry widget at the top of the window." msgstr "" #: ../src/matrixview.c:155 ../src/classmodel.c:1146 ../src/plot.c:148 #: ../src/plot.c:158 ../src/plot.c:383 ../src/plot.c:402 ../src/plot.c:415 msgid "Bad value." msgstr "" #: ../src/matrixview.c:156 #, c-format msgid "" "Cell (%d, %d):\n" "%s" msgstr "" #. Common menus. #. #: ../src/iwindow.c:678 msgid "_File" msgstr "" #: ../src/iwindow.c:679 msgid "_New" msgstr "" #: ../src/iwindow.c:680 ../src/rowview.c:581 ../src/mainw.c:1715 #: ../src/regionview.c:985 ../src/program.c:727 msgid "_Edit" msgstr "" #: ../src/iwindow.c:681 msgid "_View" msgstr "" #: ../src/iwindow.c:682 msgid "_Help" msgstr "" #: ../src/iwindow.c:687 msgid "_Close" msgstr "" #: ../src/iwindow.c:688 msgid "Close" msgstr "" #: ../src/iwindow.c:692 msgid "_Quit" msgstr "" #: ../src/iwindow.c:693 msgid "Quit nip2" msgstr "" #: ../src/iwindow.c:696 msgid "_Contents" msgstr "" #: ../src/iwindow.c:697 msgid "Open the users guide" msgstr "" #: ../src/iwindow.c:701 msgid "_About" msgstr "" #: ../src/iwindow.c:702 msgid "About this program" msgstr "" #: ../src/iwindow.c:706 msgid "_Website" msgstr "" #: ../src/iwindow.c:707 msgid "Open the VIPS Homepage" msgstr "" #: ../src/heap.c:818 msgid "Heap full." msgstr "" #: ../src/heap.c:824 #, c-format msgid "" "The compile heap for %s has filled. Make it smaller and less complicated." msgstr "" #: ../src/heap.c:829 msgid "" "The main calculation heap has filled. Raise the heap size limit in " "Preferences." msgstr "" #: ../src/heap.c:1786 ../src/heap.c:1801 ../src/trace.c:130 #: ../src/workspace.c:1229 ../src/reduce.c:148 ../src/reduce.c:1092 msgid "Overflow error." msgstr "" #: ../src/heap.c:1787 msgid "C stack overflow. Circular definition." msgstr "" #: ../src/heap.c:1802 ../src/reduce.c:1093 msgid "C stack overflow. Expression too complex." msgstr "" #: ../src/heap.c:1929 msgid "Unimplemented list type." msgstr "" #: ../src/heap.c:1942 msgid "Unimplemented argument type." msgstr "" #: ../src/heap.c:1944 #, c-format msgid "Cannot convert %s to GValue." msgstr "" #: ../src/heap.c:2044 msgid "Unimplemented type." msgstr "" #: ../src/heap.c:2045 #, c-format msgid "Unable to convert %s to a nip type." msgstr "" #: ../src/heap.c:2211 msgid "circular" msgstr "" #: ../src/heap.c:2216 #, c-format msgid "circular to label %d" msgstr "" #: ../src/heap.c:2226 #, c-format msgid "label %d" msgstr "" #: ../src/heap.c:2243 msgid "unevaluated" msgstr "" #: ../src/heap.c:2278 #, c-format msgid "class (%p)" msgstr "" #: ../src/heap.c:2289 msgid "members" msgstr "" #: ../src/heap.c:2300 msgid "secret" msgstr "" #: ../src/heap.c:2353 #, c-format msgid "no value (type %d)" msgstr "" #: ../src/heap.c:2361 msgid "NULL pointer" msgstr "" #: ../src/heap.c:2370 msgid "symbol" msgstr "" #: ../src/heap.c:2378 msgid "constructor" msgstr "" #: ../src/heap.c:2386 msgid "symref" msgstr "" #: ../src/heap.c:2394 msgid "compileref" msgstr "" #: ../src/heap.c:2422 #, c-format msgid "tag \"%s\"" msgstr "" #: ../src/heap.c:2437 #, c-format msgid "unknown element tag %d" msgstr "" #. Probably failed to load prefs on startup for some reason. #. #: ../src/prefs.c:208 msgid "Unable to display preferences." msgstr "" #: ../src/prefs.c:209 #, c-format msgid "" "No preferences workspace was found. Preferences probably failed to load when " "%s started." msgstr "" #. Not found? Maybe - error message anyway. #. #: ../src/symbol.c:502 ../src/path.c:559 ../src/path.c:590 #: ../src/program.c:1517 ../src/program.c:1569 ../src/program.c:1591 #: ../src/program.c:1599 msgid "Not found." msgstr "" #: ../src/symbol.c:503 #, c-format msgid "Symbol %s is not defined." msgstr "" #: ../src/symbol.c:507 #, c-format msgid "%s is referred to by" msgstr "" #: ../src/symbol.c:724 msgid "Name in use." msgstr "" #: ../src/symbol.c:725 #, c-format msgid "Can't rename %s \"%s\" as \"%s\". The name is already in use." msgstr "" #: ../src/symbol.c:756 #, c-format msgid "Redefinition of \"%s\"." msgstr "" #: ../src/symbol.c:760 #, c-format msgid "Previously defined at line %d." msgstr "" #: ../src/symbol.c:783 #, c-format msgid "Attempt to redefine root symbol \"%s\"." msgstr "" #. Parameter, workspace, etc. #. #: ../src/symbol.c:809 #, c-format msgid "Can't redefine %s \"%s\"." msgstr "" #: ../src/imageview.c:455 msgid "_Mark" msgstr "" #: ../src/imageview.c:456 msgid "Create a new mark" msgstr "" #: ../src/imageview.c:460 msgid "_Horizontal Guide" msgstr "" #: ../src/imageview.c:461 msgid "Create a new horizontal guide" msgstr "" #: ../src/imageview.c:465 msgid "_Vertical Guide" msgstr "" #: ../src/imageview.c:466 msgid "Create a new vertical guide" msgstr "" #: ../src/imageview.c:470 msgid "_Arrow" msgstr "" #: ../src/imageview.c:471 msgid "Create a new arrow" msgstr "" #: ../src/imageview.c:475 msgid "_Region" msgstr "" #: ../src/imageview.c:476 msgid "Create a new region" msgstr "" #: ../src/imageview.c:480 msgid "Replace Image" msgstr "" #: ../src/imageview.c:481 msgid "Replace image from file" msgstr "" #: ../src/imageview.c:485 msgid "Save Image As" msgstr "" #: ../src/imageview.c:486 msgid "Save image to file" msgstr "" #: ../src/imageview.c:490 msgid "Recalculate" msgstr "" #: ../src/imageview.c:491 msgid "Recalculate image" msgstr "" #: ../src/imageview.c:495 ../src/rowview.c:583 msgid "_Header" msgstr "" #: ../src/imageview.c:496 msgid "View image header" msgstr "" #: ../src/imageview.c:500 ../src/imageview.c:554 msgid "Zoom _In" msgstr "" #: ../src/imageview.c:501 ../src/imageview.c:555 msgid "Zoom in on mouse cursor" msgstr "" #: ../src/imageview.c:505 ../src/imageview.c:559 msgid "Zoom _Out" msgstr "" #: ../src/imageview.c:510 msgid "Zoom _100%" msgstr "" #: ../src/imageview.c:511 ../src/imageview.c:574 msgid "Zoom to 100%" msgstr "" #: ../src/imageview.c:515 msgid "Zoom to _Fit" msgstr "" #: ../src/imageview.c:516 msgid "Zoom to fit image to window" msgstr "" #: ../src/imageview.c:522 ../src/plotwindow.c:235 msgid "_Status" msgstr "" #: ../src/imageview.c:523 ../src/plotwindow.c:236 msgid "Show status bar" msgstr "" #: ../src/imageview.c:527 msgid "_Display Control" msgstr "" #: ../src/imageview.c:528 msgid "Show display control bar" msgstr "" #: ../src/imageview.c:532 msgid "_Paint" msgstr "" #: ../src/imageview.c:533 msgid "Show paint bar" msgstr "" #: ../src/imageview.c:537 msgid "_Rulers" msgstr "" #: ../src/imageview.c:538 msgid "Show rulers" msgstr "" #: ../src/imageview.c:544 msgid "_Select" msgstr "" #: ../src/imageview.c:545 msgid "Select and modify selections" msgstr "" #: ../src/imageview.c:549 msgid "_Pan" msgstr "" #: ../src/imageview.c:550 msgid "Pan image" msgstr "" #: ../src/imageview.c:566 msgid "6%" msgstr "" #: ../src/imageview.c:566 msgid "Zoom to 6%" msgstr "" #: ../src/imageview.c:568 msgid "12%" msgstr "" #: ../src/imageview.c:568 msgid "Zoom to 12%" msgstr "" #: ../src/imageview.c:570 msgid "25%" msgstr "" #: ../src/imageview.c:570 msgid "Zoom to 25%" msgstr "" #: ../src/imageview.c:572 msgid "50%" msgstr "" #: ../src/imageview.c:572 msgid "Zoom to 50%" msgstr "" #: ../src/imageview.c:574 msgid "100%" msgstr "" #: ../src/imageview.c:576 msgid "200%" msgstr "" #: ../src/imageview.c:576 msgid "Zoom to 200%" msgstr "" #: ../src/imageview.c:578 msgid "400%" msgstr "" #: ../src/imageview.c:578 msgid "Zoom to 400%" msgstr "" #: ../src/imageview.c:580 msgid "800%" msgstr "" #: ../src/imageview.c:580 msgid "Zoom to 800%" msgstr "" #: ../src/imageview.c:582 msgid "1600%" msgstr "" #: ../src/imageview.c:582 msgid "Zoom to 1600%" msgstr "" #: parse.y:244 parse.y:255 msgid "not top level" msgstr "" #: parse.y:260 msgid "not strings" msgstr "" #: parse.y:318 msgid "left-hand-side pattern contains no identifiers" msgstr "" #: parse.y:1066 ../src/program.c:1498 msgid "Parse error." msgstr "" #: parse.y:1069 #, c-format msgid "Error in %s: %s" msgstr "" #: parse.y:1072 #, c-format msgid "Error: %s" msgstr "" #: parse.y:1193 msgid "definition is too long" msgstr "" #: parse.y:1657 msgid "identifier expected" msgstr "" #: parse.y:1667 #, c-format msgid "'%s' does not exist" msgstr "" #: parse.y:1671 #, c-format msgid "'%s' has no members" msgstr "" #: parse.y:1687 msgid "'.' or '=' expected" msgstr "" #: ../src/conversion.c:470 msgid "not uncoded" msgstr "" #: ../src/trace.c:131 msgid "Trace buffer stack overflow." msgstr "" #: ../src/trace.c:234 ../src/error.c:115 msgid "_Clear" msgstr "" #: ../src/trace.c:235 msgid "Clear trace window" msgstr "" #: ../src/trace.c:241 msgid "_Operators" msgstr "" #: ../src/trace.c:242 msgid "trace operators" msgstr "" #: ../src/trace.c:246 msgid "_Builtin Functions" msgstr "" #: ../src/trace.c:247 msgid "trace calls to built in functions" msgstr "" #: ../src/trace.c:251 msgid "_Class Construction" msgstr "" #: ../src/trace.c:252 msgid "trace class constructors" msgstr "" #: ../src/trace.c:256 msgid "_VIPS Operations" msgstr "" #: ../src/trace.c:257 msgid "trace calls to VIPS" msgstr "" #: ../src/trace.c:335 msgid "Trace" msgstr "" #: ../src/gtkutil.c:613 msgid "Bad identifier." msgstr "" #: ../src/gtkutil.c:615 msgid "" "Enter an identifier. Identifiers start with a letter, and then contain only " "letters, numbers, apostrophy and underscore." msgstr "" #: ../src/gtkutil.c:668 ../src/gtkutil.c:676 msgid "Bad floating point number." msgstr "" #: ../src/gtkutil.c:669 #, c-format msgid "\"%s\" is not a floating point number." msgstr "" #: ../src/gtkutil.c:677 #, c-format msgid "Extra characters \"%s\" after number." msgstr "" #: ../src/gtkutil.c:701 msgid "Bad integer." msgstr "" #: ../src/gtkutil.c:702 #, c-format msgid "\"%s\" is not an integer." msgstr "" #: ../src/gtkutil.c:720 msgid "Bad unsigned integer." msgstr "" #: ../src/gtkutil.c:736 msgid "Bad positive integer." msgstr "" #: ../src/slider.c:51 msgid "From" msgstr "" #: ../src/slider.c:54 msgid "To" msgstr "" #: ../src/action.c:87 msgid "Bad arguments." msgstr "" #. Expands to eg. 'bad args to "+", called from "fred"' #. #: ../src/action.c:102 ../src/action.c:186 msgid "Called from" msgstr "" #: ../src/action.c:108 #, c-format msgid "" "Error in binary %s.\n" "left = %s\n" "right = %s\n" "%s" msgstr "" #: ../src/action.c:142 ../src/class.c:190 #, c-format msgid "Member \"%s\" not found in class \"%s\"." msgstr "" #: ../src/action.c:149 #, c-format msgid "object = %s" msgstr "" #: ../src/action.c:153 #, c-format msgid "tag = %s" msgstr "" #: ../src/action.c:158 #, c-format msgid "Reference attempted in \"%s\"." msgstr "" #: ../src/action.c:162 ../src/class.c:189 msgid "Member not found." msgstr "" #: ../src/action.c:173 ../src/call.c:253 ../src/class.c:49 ../src/class.c:1024 #: ../src/builtin.c:381 ../src/builtin.c:1144 ../src/reduce.c:934 #: ../src/reduce.c:947 msgid "Bad argument." msgstr "" #: ../src/action.c:192 #, c-format msgid "" "Error in unary %s.\n" "argument = %s\n" "%s" msgstr "" #: ../src/action.c:361 ../src/action.c:379 ../src/action.c:409 msgid "Bad right hand side of '.'." msgstr "" #: ../src/action.c:371 msgid "Symbol on left hand side of '.' is not scope" msgstr "" #: ../src/action.c:413 msgid "Property not found." msgstr "" #: ../src/action.c:427 msgid "Bad left hand side of '.'." msgstr "" #: ../src/action.c:939 msgid "Division by zero." msgstr "" #: ../src/action.c:1315 ../src/action.c:1595 msgid "Unimplemented." msgstr "" #: ../src/action.c:1679 ../src/action.c:1715 ../src/action.c:1973 msgid "invoking method:" msgstr "" #: ../src/rowview.c:281 ../src/regionview.c:904 msgid "Can't duplicate." msgstr "" #: ../src/rowview.c:283 msgid "You can only duplicate top level rows." msgstr "" #: ../src/rowview.c:436 ../src/model.c:424 ../src/model.c:441 #: ../src/model.c:496 ../src/mainw.c:764 ../src/mainw.c:772 #: ../src/filemodel.c:100 ../src/filemodel.c:169 ../src/filemodel.c:418 #: ../src/filemodel.c:635 ../src/filemodel.c:674 ../src/builtin.c:482 #: ../src/view.c:916 ../src/classmodel.c:153 ../src/classmodel.c:225 msgid "Not implemented." msgstr "" #: ../src/rowview.c:437 msgid "Drag between columns not yet implemented." msgstr "" #. Other init. #. #: ../src/rowview.c:580 msgid "Row menu" msgstr "" #: ../src/rowview.c:587 ../src/mainw.c:1698 msgid "U_ngroup" msgstr "" #: ../src/rowview.c:591 ../src/workspacedefs.c:270 msgid "Replace From _File" msgstr "" #: ../src/rowview.c:593 ../src/mainw.c:1673 msgid "_Recalculate" msgstr "" #: ../src/rowview.c:595 msgid "Re_set" msgstr "" #: ../src/rowview.c:658 msgid "Click to open or close class" msgstr "" #. Create signals. #. #. Init methods. #. #: ../src/column.c:277 msgid "Column" msgstr "" #: ../src/column.c:345 ../src/workspace.c:1160 ../src/tool.c:914 msgid "Name clash." msgstr "" #: ../src/column.c:346 #, c-format msgid "Can't create column \"%s\". A column with that name already exists." msgstr "" #: ../src/column.c:408 msgid "Too few items." msgstr "" #: ../src/column.c:409 #, c-format msgid "This column only has %d items, but %s needs %d items." msgstr "" #: ../src/model.c:198 ../src/mainw.c:900 ../src/filemodel.c:526 #: ../src/filemodel.c:535 msgid "Load failed." msgstr "" #: ../src/model.c:199 #, c-format msgid "" "Unable to load from file \"%s\". Error log is:\n" "%s" msgstr "" #: ../src/model.c:425 ../src/model.c:442 ../src/model.c:497 ../src/model.c:516 #: ../src/filemodel.c:101 ../src/filemodel.c:170 ../src/filemodel.c:636 #: ../src/filemodel.c:675 #, c-format msgid "_%s() not implemented for class \"%s\"." msgstr "" #: ../src/model.c:561 ../src/filemodel.c:333 ../src/filemodel.c:348 msgid "XML library error." msgstr "" #: ../src/model.c:562 msgid "model_save: xmlNewChild() failed" msgstr "" #: ../src/model.c:629 msgid "XML load error." msgstr "" #: ../src/model.c:630 #, c-format msgid "Can't load node of type \"%s\" into object of type \"%s\"" msgstr "" #: ../src/model.c:877 msgid "Delete?" msgstr "" #: ../src/model.c:878 #, c-format msgid "Are you sure you want to delete %s \"%s\"?" msgstr "" #: ../src/panechild.c:108 msgid "Close the pane" msgstr "" #. Expands to (eg.) "Region on A1 at (10, 10), size (50, 50)" #. #. Used in (eg.) "Mark at (10, 10) on [A1, A2]" #. #: ../src/iregion.c:157 ../src/iarrow.c:114 msgid "on" msgstr "" #: ../src/iregion.c:167 #, c-format msgid "at (%d, %d), size (%d, %d)" msgstr "" #: ../src/iregion.c:182 ../src/iregion.c:224 msgid "Left" msgstr "" #: ../src/iregion.c:183 ../src/iregion.c:227 msgid "Top" msgstr "" #: ../src/iregion.c:184 ../src/iregion.c:230 msgid "Width" msgstr "" #: ../src/iregion.c:185 ../src/iregion.c:233 msgid "Height" msgstr "" #: ../src/iregion.c:224 msgid "Left edge of region" msgstr "" #: ../src/iregion.c:227 msgid "Top edge of region" msgstr "" #: ../src/iregion.c:230 msgid "Width of region" msgstr "" #: ../src/iregion.c:233 msgid "Height of region" msgstr "" #: ../src/iregion.c:465 msgid "Region" msgstr "" #: ../src/expr.c:64 #, c-format msgid "error in \"%s\"" msgstr "" #: ../src/expr.c:347 msgid "Error" msgstr "" #: ../src/expr.c:616 msgid "top level" msgstr "" #: ../src/expr.c:622 msgid "class" msgstr "" #: ../src/expr.c:625 msgid "instance" msgstr "" #: ../src/expr.c:629 msgid "definition" msgstr "" #: ../src/expr.c:636 #, c-format msgid "parameter \"%s\"" msgstr "" #: ../src/expr.c:640 msgid "member" msgstr "" #: ../src/expr.c:645 ../src/dump.c:186 msgid "value" msgstr "" #: ../src/expr.c:649 ../src/itext.c:451 msgid "function" msgstr "" #: ../src/expr.c:658 msgid "of" msgstr "" #: ../src/itext.c:67 msgid "Formula" msgstr "" #: ../src/itext.c:184 ../src/itext.c:330 msgid "no value" msgstr "" #: ../src/itext.c:508 ../src/itext.c:541 msgid "Dirty value" msgstr "" #: ../src/iarrow.c:106 msgid "No image" msgstr "" #: ../src/iarrow.c:132 ../src/iarrow.c:137 #, c-format msgid "at %d" msgstr "" #: ../src/iarrow.c:142 #, c-format msgid "at (%d, %d)" msgstr "" #: ../src/iarrow.c:149 #, c-format msgid "at (%d, %d), offset (%d, %d)" msgstr "" #: ../src/workspace.c:222 msgid "No objects selected." msgstr "" #: ../src/workspace.c:223 ../src/workspace.c:228 msgid "Select exactly one object and try again." msgstr "" #: ../src/workspace.c:227 msgid "More than one object selected." msgstr "" #: ../src/workspace.c:1061 msgid "Tab" msgstr "" #: ../src/workspace.c:1116 msgid "// private definitions for this tab\n" msgstr "" #: ../src/workspace.c:1161 #, c-format msgid "Can't create workspace \"%s\". A symbol with that name already exists." msgstr "" #: ../src/workspace.c:1192 msgid "Default empty tab" msgstr "" #: ../src/workspace.c:1218 ../src/class.c:803 msgid "Wrong number of arguments." msgstr "" #: ../src/workspace.c:1219 #, c-format msgid "%s needs %d arguments, there are %d selected." msgstr "" #: ../src/workspace.c:1230 msgid "Too many names selected." msgstr "" #: ../src/workspace.c:1342 msgid "You can only remove top level rows." msgstr "" #: ../src/workspace.c:1343 msgid "Not all selected objects are top level rows." msgstr "" #: ../src/workspace.c:1393 msgid "Delete selected objects?" msgstr "" #: ../src/workspace.c:1394 #, c-format msgid "Are you sure you want to delete %s?" msgstr "" #: ../src/workspace.c:1452 msgid "Unable to ungroup." msgstr "" #: ../src/workspace.c:1453 #, c-format msgid "Row \"%s\" is not a Group or a list." msgstr "" #: ../src/toolkitgroup.c:119 #, c-format msgid "Toolkits for %s" msgstr "" #: ../src/iimage.c:115 msgid "Original filename" msgstr "" #: ../src/iimage.c:151 #, c-format msgid "Header for \"%s\"" msgstr "" #: ../src/iimage.c:153 msgid "OK" msgstr "" #: ../src/iimage.c:366 msgid "Save timer." msgstr "" #: ../src/iimage.c:367 #, c-format msgid "Image save took %g seconds." msgstr "" #: ../src/iimage.c:424 msgid "Image" msgstr "" #: ../src/main.c:105 msgid "evaluate and print EXPRESSION" msgstr "" #: ../src/main.c:108 msgid "load FILE as a set of definitions" msgstr "" #: ../src/main.c:111 msgid "write value of 'main' to FILE" msgstr "" #: ../src/main.c:113 msgid "run in batch mode" msgstr "" #: ../src/main.c:115 msgid "set values" msgstr "" #: ../src/main.c:117 msgid "verbose error output" msgstr "" #: ../src/main.c:120 msgid "don't load menu definitions" msgstr "" #: ../src/main.c:122 msgid "don't try to load command-line arguments" msgstr "" #: ../src/main.c:124 msgid "load stdin as a workspace" msgstr "" #: ../src/main.c:126 msgid "load stdin as a set of definitions" msgstr "" #: ../src/main.c:128 msgid "print value of 'main' to stdout" msgstr "" #: ../src/main.c:131 msgid "start up and shut down" msgstr "" #: ../src/main.c:134 msgid "time image save operations" msgstr "" #: ../src/main.c:137 msgid "profile workspace calculation" msgstr "" #: ../src/main.c:140 msgid "start as if installed to PREFIX" msgstr "" #: ../src/main.c:142 msgid "output strings for internationalisation" msgstr "" #: ../src/main.c:145 msgid "print version number" msgstr "" #: ../src/main.c:148 msgid "test for errors and quit" msgstr "" #: ../src/main.c:231 #, c-format msgid "error calculating \"%s\"" msgstr "" #: ../src/main.c:239 #, c-format msgid "error saving \"%s\"" msgstr "" #: ../src/main.c:293 msgid "no \"main\" found" msgstr "" #: ../src/main.c:469 ../src/workspaceview.c:985 msgid "Unknown file type." msgstr "" #: ../src/main.c:470 ../src/workspaceview.c:986 #, c-format msgid "Unable to load \"%s\"." msgstr "" #: ../src/main.c:481 msgid "Unable to load." msgstr "" #: ../src/main.c:482 #, c-format msgid "Error loading plug-in \"%s\"." msgstr "" #: ../src/main.c:689 msgid "Next _Error" msgstr "" #: ../src/main.c:690 msgid "Ink dropper" msgstr "" #: ../src/main.c:691 msgid "D_uplicate" msgstr "" #: ../src/main.c:692 msgid "Pen" msgstr "" #: ../src/main.c:693 ../src/plot.c:98 msgid "Line" msgstr "" #: ../src/main.c:696 msgid "Flood" msgstr "" #: ../src/main.c:697 msgid "Flood Blob" msgstr "" #: ../src/main.c:698 msgid "Fill Rectangle" msgstr "" #: ../src/main.c:699 msgid "Pan" msgstr "" #: ../src/main.c:700 msgid "Select" msgstr "" #: ../src/main.c:701 msgid "Locked" msgstr "" #. And the LEDs we use. #. #: ../src/main.c:705 msgid "Red LED" msgstr "" #: ../src/main.c:706 msgid "Green LED" msgstr "" #: ../src/main.c:707 msgid "Blue LED" msgstr "" #: ../src/main.c:708 msgid "Yellow LED" msgstr "" #: ../src/main.c:709 msgid "Cyan LED" msgstr "" #: ../src/main.c:710 msgid "Off LED" msgstr "" #: ../src/main.c:884 msgid "Empty temp area" msgstr "" #: ../src/main.c:885 msgid "Many files in temp area." msgstr "" #: ../src/main.c:886 #, c-format msgid "" "The temp area \"%s\" contains %s of files. Would you like to empty the temp " "area? This will delete any workspace backups and cannot be undone." msgstr "" #: ../src/main.c:902 #, c-format msgid "unable to make %s %s: %s" msgstr "" #: ../src/main.c:976 msgid "Unable to find install area." msgstr "" #: ../src/main.c:1116 msgid "- image processing spreadsheet" msgstr "" #: ../src/main.c:1141 #, c-format msgid "linked to vips-%s" msgstr "" #. -1 means can't-be-set, at least on os x, so don't #. * warn. #. #: ../src/main.c:1193 #, c-format msgid "" "unable to change max file descriptors\n" "max file descriptors still set to %d" msgstr "" #: ../src/main.c:1199 msgid "unable to read max file descriptors" msgstr "" #: ../src/main.c:1475 ../src/main.c:1533 #, c-format msgid "" "Startup error log:\n" "%s" msgstr "" #: ../src/main.c:1532 msgid "Startup error." msgstr "" #: ../src/main.c:1543 #, c-format msgid "Welcome to %s-%s!" msgstr "" #: ../src/main.c:1548 #, c-format msgid "" "A new directory has been created to hold startup, data and temporary files:\n" "\n" " %s\n" "\n" "If you've used previous versions of %s, you might want to copy files over " "from your old work area." msgstr "" #: ../src/imageinfo.c:1023 msgid "Unable to open image." msgstr "" #: ../src/imageinfo.c:1024 #, c-format msgid "Unable to open file \"%s\" as image." msgstr "" #: ../src/imageinfo.c:1152 msgid "Unable to write to file." msgstr "" #: ../src/imageinfo.c:1153 #, c-format msgid "Error writing image to file \"%s\"." msgstr "" #: ../src/imageinfo.c:1169 msgid "Unable to paint on image." msgstr "" #: ../src/imageinfo.c:1170 #, c-format msgid "" "Unable to get write permission for file \"%s\".\n" "Check permission settings." msgstr "" #: ../src/imageinfo.c:1216 msgid "Modify" msgstr "" #: ../src/imageinfo.c:1217 msgid "Modify disc file?" msgstr "" #: ../src/imageinfo.c:1218 #, c-format msgid "" "This image is being shown directly from the disc file:\n" "\n" " %s\n" "\n" "If you paint on this file, it will be permanently changed. If something goes " "wrong, you may lose work. Are you sure you want to modify this file?" msgstr "" #: ../src/imageinfo.c:1822 msgid "Unable to paint text." msgstr "" #: ../src/imageinfo.c:1823 #, c-format msgid "Unable to paint text \"%s\" in font \"%s\"." msgstr "" #: ../src/editview.c:136 msgid "Escape to cancel edit, press Return to accept edit and recalculate" msgstr "" #: ../src/dump.c:187 msgid "parameter" msgstr "" #: ../src/dump.c:188 msgid "zombie" msgstr "" #: ../src/dump.c:189 ../src/util.c:1311 msgid "workspace" msgstr "" #: ../src/dump.c:190 msgid "workspace root" msgstr "" #: ../src/dump.c:191 msgid "root symbol" msgstr "" #: ../src/dump.c:192 msgid "external symbol" msgstr "" #: ../src/dump.c:193 msgid "built-in symbol" msgstr "" #: ../src/colour.c:306 msgid "Color Space" msgstr "" #. Init methods. #. #: ../src/number.c:66 msgid "Number" msgstr "" #: ../src/mainw.c:322 msgid "No temp area" msgstr "" #: ../src/mainw.c:328 #, c-format msgid "%s free" msgstr "" #: ../src/mainw.c:341 #, c-format msgid "%d cells free" msgstr "" #: ../src/mainw.c:381 msgid "Selected:" msgstr "" #: ../src/mainw.c:423 msgid "unsaved workspace" msgstr "" #: ../src/mainw.c:430 msgid "compatibility mode" msgstr "" #: ../src/mainw.c:661 #, c-format msgid "%d objects in workspace" msgstr "" #: ../src/mainw.c:666 #, c-format msgid "%d vips calls cached" msgstr "" #: ../src/mainw.c:679 #, c-format msgid " in %d images" msgstr "" #: ../src/mainw.c:765 msgid "Find in workspace not implemented yet." msgstr "" #: ../src/mainw.c:773 msgid "Find again in workspace not implemented yet." msgstr "" #: ../src/mainw.c:795 msgid "No errors in workspace." msgstr "" #: ../src/mainw.c:796 msgid "There are no errors (that I can see) in this workspace." msgstr "" #: ../src/mainw.c:901 #, c-format msgid "" "Unable to execute:\n" " %s" msgstr "" #: ../src/mainw.c:931 ../src/mainw.c:958 msgid "Open File" msgstr "" #: ../src/mainw.c:1085 msgid "Recent Images" msgstr "" #: ../src/mainw.c:1093 msgid "Recent Workspaces" msgstr "" #: ../src/mainw.c:1101 msgid "Recent Matricies" msgstr "" #: ../src/mainw.c:1110 msgid "No recent items" msgstr "" #: ../src/mainw.c:1116 msgid "Clear Recent Menu" msgstr "" #: ../src/mainw.c:1175 msgid "Merge Workspace from File" msgstr "" #: ../src/mainw.c:1234 ../src/mainw.c:1241 msgid "No backup workspaces found." msgstr "" #: ../src/mainw.c:1236 msgid "" "You need to enable \"Auto workspace save\" in Preferences before automatic " "recovery works." msgstr "" #: ../src/mainw.c:1242 #, c-format msgid "No suitable workspace save files found in \"%s\"" msgstr "" #: ../src/mainw.c:1257 msgid "Open workspace backup?" msgstr "" #: ../src/mainw.c:1258 #, c-format msgid "" "Found workspace backup:\n" "\n" "\t%s\n" "\n" "Do you want to recover this workspace?" msgstr "" #: ../src/mainw.c:1332 msgid "Set column name here" msgstr "" #: ../src/mainw.c:1334 msgid "Set column caption here" msgstr "" #: ../src/mainw.c:1336 msgid "New Column" msgstr "" #: ../src/mainw.c:1340 msgid "Create Column" msgstr "" #: ../src/mainw.c:1497 msgid "Revert to Defaults" msgstr "" #: ../src/mainw.c:1498 msgid "Revert to installation defaults?" msgstr "" #: ../src/mainw.c:1499 msgid "" "Would you like to reset all preferences to their factory settings? This will " "delete any changes you have ever made to your preferences and may take a few " "seconds." msgstr "" #: ../src/mainw.c:1516 msgid "Preferences" msgstr "" #: ../src/mainw.c:1521 msgid "Revert to Defaults ..." msgstr "" #. Menu items. #. #: ../src/mainw.c:1591 msgid "Open _Recent" msgstr "" #: ../src/mainw.c:1592 ../src/workspaceview.c:1216 msgid "Jump to _Column" msgstr "" #: ../src/mainw.c:1593 msgid "_Toolkits" msgstr "" #: ../src/mainw.c:1603 ../src/mainw.c:1608 msgid "C_olumn" msgstr "" #: ../src/mainw.c:1604 msgid "Create a new column" msgstr "" #: ../src/mainw.c:1609 msgid "Create a new column with a specified name" msgstr "" #: ../src/mainw.c:1613 msgid "_Tab" msgstr "" #: ../src/mainw.c:1614 msgid "Create a new tab" msgstr "" #: ../src/mainw.c:1618 msgid "_Workspace" msgstr "" #: ../src/mainw.c:1619 msgid "Create a new workspace" msgstr "" #: ../src/mainw.c:1623 msgid "_Open" msgstr "" #: ../src/mainw.c:1624 msgid "Open a file" msgstr "" #: ../src/mainw.c:1628 msgid "Open _Examples" msgstr "" #: ../src/mainw.c:1629 msgid "Open example workspaces" msgstr "" #: ../src/mainw.c:1633 msgid "_Duplicate Workspace" msgstr "" #: ../src/mainw.c:1634 msgid "Duplicate workspace" msgstr "" #: ../src/mainw.c:1638 msgid "_Merge Into Workspace" msgstr "" #: ../src/mainw.c:1639 msgid "Merge workspace into this workspace" msgstr "" #: ../src/mainw.c:1643 msgid "_Save Workspace" msgstr "" #: ../src/mainw.c:1644 msgid "Save workspace" msgstr "" #: ../src/mainw.c:1648 msgid "_Save Workspace As" msgstr "" #: ../src/mainw.c:1649 msgid "Save workspace as" msgstr "" #: ../src/mainw.c:1653 msgid "Search for Workspace _Backups" msgstr "" #: ../src/mainw.c:1654 msgid "Load last automatically backed-up workspace" msgstr "" #: ../src/mainw.c:1658 ../src/program.c:1802 msgid "_Delete" msgstr "" #: ../src/mainw.c:1659 msgid "Delete selected items" msgstr "" #: ../src/mainw.c:1664 msgid "Select all items" msgstr "" #: ../src/mainw.c:1668 msgid "D_uplicate Selected" msgstr "" #: ../src/mainw.c:1669 msgid "Duplicate selected items" msgstr "" #: ../src/mainw.c:1674 msgid "Recalculate selected items" msgstr "" #: ../src/mainw.c:1678 ../src/program.c:1827 msgid "_Find" msgstr "" #: ../src/mainw.c:1679 msgid "Find in workspace" msgstr "" #: ../src/mainw.c:1683 ../src/program.c:1832 msgid "Find _Next" msgstr "" #: ../src/mainw.c:1684 msgid "Find again in workspace" msgstr "" #: ../src/mainw.c:1689 msgid "Jump to next error" msgstr "" #: ../src/mainw.c:1693 msgid "_Group" msgstr "" #: ../src/mainw.c:1694 msgid "Group selected items" msgstr "" #: ../src/mainw.c:1699 msgid "Ungroup selected items" msgstr "" #: ../src/mainw.c:1703 msgid "_Preferences" msgstr "" #: ../src/mainw.c:1704 msgid "Edit preferences" msgstr "" #: ../src/mainw.c:1709 msgid "Workspace as Grap_h" msgstr "" #: ../src/mainw.c:1710 msgid "Show a graph of workspace dependencies" msgstr "" #: ../src/mainw.c:1716 msgid "Edit toolkits" msgstr "" #: ../src/mainw.c:1722 msgid "Au_to Recalculate" msgstr "" #: ../src/mainw.c:1723 msgid "Recalculate automatically on change" msgstr "" #: ../src/mainw.c:1727 msgid "_Lock tab" msgstr "" #: ../src/mainw.c:1728 msgid "Lock tab" msgstr "" #: ../src/mainw.c:1732 msgid "_Toolbar" msgstr "" #: ../src/mainw.c:1733 msgid "Show window toolbar" msgstr "" #: ../src/mainw.c:1737 msgid "_Statusbar" msgstr "" #: ../src/mainw.c:1738 msgid "Show window statusbar" msgstr "" #: ../src/mainw.c:1742 msgid "Toolkit _Browser" msgstr "" #: ../src/mainw.c:1743 msgid "Show toolkit browser" msgstr "" #: ../src/mainw.c:1747 msgid "Tab _Definitions" msgstr "" #: ../src/mainw.c:1748 msgid "Show tab definitions" msgstr "" #: ../src/mainw.c:1754 msgid "_Normal" msgstr "" #: ../src/mainw.c:1755 msgid "Normal view mode" msgstr "" #: ../src/mainw.c:1759 msgid "Show _Formula" msgstr "" #: ../src/mainw.c:1760 msgid "Show formula view mode" msgstr "" #: ../src/mainw.c:1764 msgid "No _Edits" msgstr "" #: ../src/mainw.c:1765 msgid "No edits view mode" msgstr "" #: ../src/regionview.c:906 msgid "You can only duplicate top level regions." msgstr "" #: ../src/regionview.c:948 msgid "Can't delete." msgstr "" #: ../src/regionview.c:949 msgid "You can only delete top level regions." msgstr "" #: ../src/regionview.c:958 msgid "Delete Region?" msgstr "" #: ../src/regionview.c:959 #, c-format msgid "Are you sure you want to delete Region \"%s\"?" msgstr "" #. Other init. #. #: ../src/regionview.c:984 msgid "Region menu" msgstr "" #: ../src/idialog.c:432 msgid "Pin up" msgstr "" #: ../src/idialog.c:434 msgid "Check this to pin the dialog up" msgstr "" #: ../src/call.c:136 msgid "CALL library error." msgstr "" #: ../src/call.c:137 ../src/cache.c:878 #, c-format msgid "Error calling library function \"%s\" (%s)." msgstr "" #: ../src/call.c:148 ../src/class.c:862 ../src/cache.c:852 msgid "You passed:" msgstr "" #: ../src/call.c:196 msgid "Usage:" msgstr "" #: ../src/call.c:198 #, c-format msgid "CALL operator \"%s\"" msgstr "" #: ../src/call.c:200 #, c-format msgid "%s, from package \"%s\"" msgstr "" #: ../src/call.c:205 #, c-format msgid "\"%s\" takes %d argument:" msgid_plural "\"%s\" takes %d arguments:" msgstr[0] "" msgstr[1] "" #: ../src/call.c:212 #, c-format msgid "And produces %d result:" msgid_plural "And produces %d results:" msgstr[0] "" msgstr[1] "" #. Print any flags this function has. #. #: ../src/call.c:220 msgid "Flags:" msgstr "" #: ../src/call.c:224 msgid "PIO function" msgstr "" #: ../src/call.c:226 msgid "WIO function" msgstr "" #: ../src/call.c:229 msgid "coordinate transformer" msgstr "" #: ../src/call.c:231 msgid "no coordinate transformation" msgstr "" #: ../src/call.c:234 msgid "point-to-point operation" msgstr "" #: ../src/call.c:236 msgid "area operation" msgstr "" #: ../src/call.c:239 msgid "uncacheable operation" msgstr "" #: ../src/call.c:241 msgid "operation can be cached" msgstr "" #: ../src/call.c:256 #, c-format msgid "Argument %d (%s) to \"%s\" is the wrong type." msgstr "" #: ../src/call.c:276 #, c-format msgid "Too many arguments to \"%s\"." msgstr "" #: ../src/call.c:294 msgid "Unknown type." msgstr "" #: ../src/call.c:295 #, c-format msgid "CALL type \"%s\" not supported" msgstr "" #: ../src/call.c:1266 ../src/call.c:1350 #, c-format msgid "image \"%s\"" msgstr "" #: ../src/call.c:1273 msgid "no image" msgstr "" #: ../src/call.c:1304 msgid "doublevec" msgstr "" #: ../src/call.c:1346 msgid "imagevec" msgstr "" #: ../src/class.c:50 #, c-format msgid "Object %s is not a class." msgstr "" #: ../src/class.c:333 msgid "No such secret." msgstr "" #: ../src/class.c:334 msgid "" "Editing local classes which reference non-local objects is a bit broken at " "the moment :-(" msgstr "" #: ../src/class.c:658 #, c-format msgid "You can't have more than %d arguments to a superclass constructor." msgstr "" #: ../src/class.c:794 ../src/class.c:854 msgid "Bad superclass." msgstr "" #: ../src/class.c:795 #, c-format msgid "Superclass constructor \"%s\" refers to non-local symbols %s" msgstr "" #: ../src/class.c:804 #, c-format msgid "Superclass constructor \"%s\" expects %d arguments, not %d." msgstr "" #: ../src/class.c:858 #, c-format msgid "First element in superclass of \"%s\" must be class or constructor." msgstr "" #: ../src/class.c:890 ../src/class.c:987 #, c-format msgid "" "Too many arguments to class constructor \"%s\". No more than %d arguments " "are supported." msgstr "" #: ../src/class.c:980 msgid "Class not found." msgstr "" #: ../src/class.c:981 #, c-format msgid "Class \"%s\" not found." msgstr "" #: ../src/class.c:1014 #, c-format msgid "Member \"%s\" of class \"%s\" should be of type \"%s\", instead it's:" msgstr "" #: ../src/filemodel.c:334 msgid "model_save_filename: xmlNewDoc() failed" msgstr "" #: ../src/filemodel.c:349 msgid "model_save_filename: xmlNewDocNode() failed" msgstr "" #: ../src/filemodel.c:363 msgid "Save failed." msgstr "" #: ../src/filemodel.c:364 #, c-format msgid "" "Save of %s \"%s\" to file \"%s\" failed.\n" "%s" msgstr "" #: ../src/filemodel.c:419 msgid "filemodel_real_top_save: no save method" msgstr "" #: ../src/filemodel.c:527 #, c-format msgid "Can't load XML file \"%s\", it's not a %s save file." msgstr "" #: ../src/filemodel.c:536 #, c-format msgid "" "Can't load XML file \"%s\", unable to extract version information from " "namespace." msgstr "" #. Expands to (eg.) "Save Column A2". #. #: ../src/filemodel.c:724 #, c-format msgid "Save %s %s" msgstr "" #: ../src/filemodel.c:800 ../src/filemodel.c:811 msgid "Object has been modified." msgstr "" #: ../src/filemodel.c:801 #, c-format msgid "" "%s has been modified since you loaded it from file \"%s\".\n" "\n" "Do you want to save your changes?" msgstr "" #: ../src/filemodel.c:812 #, c-format msgid "%s has been modified. Do you want to save your changes?" msgstr "" #: ../src/builtin.c:262 msgid "Out of range." msgstr "" #: ../src/builtin.c:263 msgid "gammq arguments must be a > 0, x >= 0." msgstr "" #: ../src/builtin.c:270 msgid "Not available." msgstr "" #: ../src/builtin.c:271 msgid "No GSL library available for gammq." msgstr "" #: ../src/builtin.c:382 #, c-format msgid "" "Argument 2 to \"%s\" should be instance of \"%s\", you passed:\n" " %s" msgstr "" #: ../src/builtin.c:483 msgid "Complex math ops not implemented." msgstr "" #: ../src/builtin.c:558 msgid "Macro error." msgstr "" #: ../src/builtin.c:743 msgid "No such type" msgstr "" #: ../src/builtin.c:744 #, c-format msgid "GType %u not found." msgstr "" #. Other. #. #: ../src/builtin.c:898 msgid "return list of names of members" msgstr "" #: ../src/builtin.c:901 msgid "search for file" msgstr "" #: ../src/builtin.c:904 msgid "raise error" msgstr "" #: ../src/builtin.c:907 msgid "convert to [char]" msgstr "" #: ../src/builtin.c:910 msgid "expand environment variables" msgstr "" #: ../src/builtin.c:913 msgid "convert [char] to GType" msgstr "" #: ../src/builtin.c:916 msgid "convert GType to [char]" msgstr "" #: ../src/builtin.c:919 msgid "look up localised string" msgstr "" #. vips8 wrapper. #. #: ../src/builtin.c:925 msgid "create new vips8 object" msgstr "" #: ../src/builtin.c:928 msgid "call vips8 operator" msgstr "" #. Predicates. #. #: ../src/builtin.c:934 msgid "true if argument is primitive image" msgstr "" #: ../src/builtin.c:937 msgid "true if argument is primitive bool" msgstr "" #: ../src/builtin.c:940 msgid "true if argument is primitive real number" msgstr "" #: ../src/builtin.c:943 msgid "true if argument is class" msgstr "" #: ../src/builtin.c:946 msgid "true if argument is primitive char" msgstr "" #: ../src/builtin.c:949 msgid "true if argument is primitive list" msgstr "" #: ../src/builtin.c:952 msgid "true if argument is primitive complex" msgstr "" #: ../src/builtin.c:955 msgid "true if argument class instance of type" msgstr "" #: ../src/builtin.c:958 msgid "true if class has named member" msgstr "" #. List and complex projections. #. #: ../src/builtin.c:964 msgid "real part of complex" msgstr "" #: ../src/builtin.c:967 msgid "imaginary part of complex" msgstr "" #: ../src/builtin.c:970 msgid "head of list" msgstr "" #: ../src/builtin.c:973 msgid "tail of list" msgstr "" #. Math. #. #: ../src/builtin.c:979 msgid "sine of real number" msgstr "" #: ../src/builtin.c:982 msgid "cosine of real number" msgstr "" #: ../src/builtin.c:985 msgid "tangent of real number" msgstr "" #: ../src/builtin.c:988 msgid "arc sine of real number" msgstr "" #: ../src/builtin.c:991 msgid "arc cosine of real number" msgstr "" #: ../src/builtin.c:994 msgid "arc tangent of real number" msgstr "" #: ../src/builtin.c:997 msgid "log base e of real number" msgstr "" #: ../src/builtin.c:1000 msgid "log base 10 of real number" msgstr "" #: ../src/builtin.c:1003 msgid "e to the power of real number" msgstr "" #: ../src/builtin.c:1006 msgid "10 to the power of real number" msgstr "" #: ../src/builtin.c:1009 msgid "real to int, rounding up" msgstr "" #: ../src/builtin.c:1012 msgid "real to int, rounding down" msgstr "" #. Optional GSL funcs. #. #: ../src/builtin.c:1018 msgid "gamma function" msgstr "" #. Constructors. #. #: ../src/builtin.c:1024 msgid "load vips image" msgstr "" #: ../src/builtin.c:1027 msgid "load text file" msgstr "" #: ../src/builtin.c:1030 msgid "generate image from Plot object" msgstr "" #: ../src/builtin.c:1041 msgid "GSL library error." msgstr "" #: ../src/builtin.c:1090 #, c-format msgid "Builtin \"%s\" takes %d argument." msgid_plural "Builtin \"%s\" takes %d arguments." msgstr[0] "" msgstr[1] "" #: ../src/builtin.c:1145 #, c-format msgid "" "Argument %d to builtin \"%s\" should be \"%s\", you passed:\n" " %s" msgstr "" #: ../src/compile.c:1447 msgid "Too many shared nodes in graph." msgstr "" #: ../src/compile.c:1449 msgid "Raise MAX_RELOC" msgstr "" #: ../src/compile.c:1766 #, c-format msgid "Member \"%s\" of class \"%s\" should have no arguments." msgstr "" #: ../src/compile.c:2643 msgid "pattern match failed" msgstr "" #: ../src/pathnameview.c:153 msgid "Select a new file name" msgstr "" #: ../src/spin.c:197 msgid "Expand or collapse row" msgstr "" #: ../src/error.c:60 msgid "No ierrors found." msgstr "" #: ../src/error.c:100 msgid "No unresolved symbols found." msgstr "" #: ../src/error.c:116 msgid "Clear ierror window" msgstr "" #: ../src/error.c:120 msgid "List _iErrors" msgstr "" #: ../src/error.c:121 msgid "Search for all ierrors" msgstr "" #: ../src/error.c:125 msgid "List _Unresolved" msgstr "" #: ../src/error.c:126 msgid "Search for all unresolved references" msgstr "" #: ../src/error.c:202 #, c-format msgid "iError - %s" msgstr "" #. used as in "fred refers to undefined symbol jim" #. #: ../src/tool.c:75 msgid "refers to undefined symbol" msgstr "" #: ../src/tool.c:915 #, c-format msgid "" "Can't create dialog with name \"%s\", an object with that name already " "exists in kit \"%s\"." msgstr "" #: ../src/util.c:211 msgid "Unable to set XML property." msgstr "" #: ../src/util.c:212 #, c-format msgid "Unable to set property \"%s\" to value \"%s\"." msgstr "" #: ../src/util.c:790 msgid "(no image)" msgstr "" #: ../src/util.c:804 #, c-format msgid "%dx%d %s, %d band, %s" msgid_plural "%dx%d %s, %d bands, %s" msgstr[0] "" msgstr[1] "" #: ../src/util.c:1217 msgid "8-bit unsigned integer" msgstr "" #. IM_BANDFMT_UCHAR #: ../src/util.c:1218 msgid "8-bit signed integer" msgstr "" #. IM_BANDFMT_CHAR #: ../src/util.c:1219 msgid "16-bit unsigned integer" msgstr "" #. IM_BANDFMT_USHORT #: ../src/util.c:1220 msgid "16-bit signed integer" msgstr "" #. IM_BANDFMT_SHORT #: ../src/util.c:1221 msgid "32-bit unsigned integer" msgstr "" #. IM_BANDFMT_UINT #: ../src/util.c:1222 msgid "32-bit signed integer" msgstr "" #. IM_BANDFMT_INT #: ../src/util.c:1223 msgid "32-bit float" msgstr "" #. IM_BANDFMT_FLOAT #: ../src/util.c:1224 msgid "64-bit complex" msgstr "" #. IM_BANDFMT_COMPLEX #: ../src/util.c:1225 msgid "64-bit float" msgstr "" #. IM_BANDFMT_DOUBLE #: ../src/util.c:1226 msgid "128-bit complex" msgstr "" #: ../src/util.c:1234 msgid "" msgstr "" #: ../src/util.c:1278 msgid "" msgstr "" #: ../src/util.c:1302 msgid "directory" msgstr "" #: ../src/util.c:1711 msgid "" msgstr "" #: ../src/util.c:1908 ../src/util.c:1914 ../src/filesel.c:760 msgid "Bad filename." msgstr "" #: ../src/util.c:1909 msgid "Filename is too long." msgstr "" #: ../src/util.c:1915 msgid "Filename contains only blank characters." msgstr "" #: ../src/util.c:1978 ../src/util.c:1987 ../src/util.c:2042 msgid "Unable to open." msgstr "" #: ../src/util.c:1979 ../src/util.c:1988 #, c-format msgid "" "Unable to open file \"%s\" for reading.\n" "%s." msgstr "" #: ../src/util.c:2043 #, c-format msgid "" "Unable to open file \"%s\" for writing.\n" "%s." msgstr "" #: ../src/util.c:2064 ../src/plotwindow.c:191 msgid "Unable to write." msgstr "" #: ../src/util.c:2065 #, c-format msgid "" "Unable to write to file \"%s\".\n" "%s." msgstr "" #: ../src/util.c:2101 ../src/util.c:2137 msgid "Unable to read." msgstr "" #: ../src/util.c:2102 #, c-format msgid "File \"%s\" too large." msgstr "" #: ../src/util.c:2138 #, c-format msgid "" "Unable to read from file \"%s\".\n" "%s." msgstr "" #: ../src/util.c:2445 msgid "Unable to create temporary file." msgstr "" #: ../src/util.c:2446 #, c-format msgid "" "Unable to make file \"%s\"\n" "%s" msgstr "" #: ../src/util.c:2653 msgid "Out of memory." msgstr "" #: ../src/util.c:2654 #, c-format msgid "Request for %s of RAM triggered memory allocation failure." msgstr "" #: ../src/formula.c:143 msgid "" "Press Escape to cancel edit, press Return to accept edit and recalculate" msgstr "" #: ../src/colourdisplay.c:246 msgid "Double-click to edit this color, or drag-and-drop between colors" msgstr "" #: ../src/plotwindow.c:223 msgid "Export Plot As" msgstr "" #: ../src/plotwindow.c:242 msgid "Export Plot" msgstr "" #: ../src/plotwindow.c:243 msgid "Export plot to file" msgstr "" #: ../src/path.c:560 #, c-format msgid "File \"%s\" not found." msgstr "" #: ../src/path.c:591 #, c-format msgid "File \"%s\" not found on path" msgstr "" #: ../src/workspaceview.c:1071 msgid "No errors in tab." msgstr "" #: ../src/workspaceview.c:1072 msgid "There are no errors (that I can see) in this tab." msgstr "" #. Toolkit Browser pane. #. #: ../src/workspaceview.c:1185 msgid "Toolkit Browser" msgstr "" #. Workspace-local defs pane. #. #: ../src/workspaceview.c:1201 msgid "Tab Definitions" msgstr "" #: ../src/workspaceview.c:1211 msgid "Workspace menu" msgstr "" #: ../src/workspaceview.c:1213 msgid "New C_olumn" msgstr "" #: ../src/workspaceview.c:1218 msgid "_Group Selected" msgstr "" #: ../src/imageheader.c:224 msgid "Field" msgstr "" #: ../src/imageheader.c:239 msgid "Image history" msgstr "" #: ../src/filesel.c:86 msgid "Workspace files (*.ws)" msgstr "" #: ../src/filesel.c:88 msgid "Recombination matrix files (*.rec)" msgstr "" #: ../src/filesel.c:90 msgid "Morphology matrix files (*.mor)" msgstr "" #: ../src/filesel.c:92 msgid "Convolution matrix files (*.con)" msgstr "" #: ../src/filesel.c:94 msgid "Matrix files (*.mat)" msgstr "" #: ../src/filesel.c:96 msgid "Definition files (*.def)" msgstr "" #: ../src/filesel.c:98 msgid "ICC profiles (*.icc, *.icm)" msgstr "" #: ../src/filesel.c:100 msgid "All files (*)" msgstr "" #. Used as eg. "VIPS image files (*.v)" #. #: ../src/filesel.c:133 msgid "image files" msgstr "" #: ../src/filesel.c:502 #, c-format msgid "Unable to determine space free in \"%s\"." msgstr "" #. Expands to (eg.) '6GB free in "/pics/tmp"' #. #: ../src/filesel.c:513 #, c-format msgid "free in \"%s\"" msgstr "" #: ../src/filesel.c:761 msgid "No file selected." msgstr "" #: ../src/filesel.c:985 msgid "Increment filename" msgstr "" #: ../src/filesel.c:991 msgid "After Save, add 1 to the last number in the file name" msgstr "" #: ../src/filesel.c:1236 #, c-format msgid "%s Save Preferences" msgstr "" #: ../src/filesel.c:1297 msgid "Overwrite" msgstr "" #: ../src/filesel.c:1298 msgid "Overwrite file?" msgstr "" #: ../src/filesel.c:1299 #, c-format msgid "File \"%s\" exists. OK to overwrite?" msgstr "" #: ../src/link.c:582 msgid "Circular dependency." msgstr "" #: ../src/link.c:583 #, c-format msgid "Circular dependency detected near symbol \"%s\"." msgstr "" #: ../src/classmodel.c:154 ../src/classmodel.c:226 #, c-format msgid "_%s() method not implemented for %s." msgstr "" #: ../src/classmodel.c:162 #, c-format msgid "Save %s \"%s\"" msgstr "" #: ../src/classmodel.c:235 #, c-format msgid "Replace %s \"%s\"" msgstr "" #: ../src/classmodel.c:697 msgid "Set boolean value here" msgstr "" #: ../src/classmodel.c:703 msgid "Enter a floating point number here" msgstr "" #: ../src/classmodel.c:710 msgid "Enter a string here" msgstr "" #: ../src/classmodel.c:1070 msgid "Unknown option." msgstr "" #: ../src/classmodel.c:1071 #, c-format msgid "Option \"%s\" not known." msgstr "" #: ../src/classmodel.c:1147 #, c-format msgid "%d band value only" msgstr "" #: ../src/clock.c:59 ../src/clock.c:92 ../src/clock.c:191 msgid "Interval" msgstr "" #: ../src/clock.c:60 ../src/clock.c:95 msgid "Elapsed time" msgstr "" #: ../src/clock.c:92 msgid "Interval between ticks (seconds)" msgstr "" #: ../src/clock.c:95 msgid "Elapsed time (seconds)" msgstr "" #: ../src/clock.c:216 msgid "Clock" msgstr "" #: ../src/workspacedefs.c:96 #, c-format msgid "%d definition" msgid_plural "%d definitions" msgstr[0] "" msgstr[1] "" #: ../src/workspacedefs.c:102 msgid "errors" msgstr "" #: ../src/workspacedefs.c:107 ../src/program.c:254 msgid "modified" msgstr "" #: ../src/workspacedefs.c:192 msgid "Replace Definition From File" msgstr "" #: ../src/workspacedefs.c:269 msgid "Workspace definitions" msgstr "" #: ../src/workspacedefs.c:285 msgid "Process" msgstr "" #. Create signals. #. #. Init methods. #. #: ../src/statusview.c:108 ../src/plotstatus.c:99 msgid "Status bar menu" msgstr "" #: ../src/statusview.c:223 ../src/statusview.c:226 ../src/plotstatus.c:190 msgid "Magnification" msgstr "" #: ../src/reduce.c:135 msgid "Typecheck error." msgstr "" #: ../src/reduce.c:137 #, c-format msgid "%s expected %s, instead saw:" msgstr "" #: ../src/reduce.c:149 #, c-format msgid "%s too long." msgstr "" #: ../src/reduce.c:532 ../src/reduce.c:597 msgid "Not rectangular." msgstr "" #: ../src/reduce.c:533 ../src/reduce.c:598 #, c-format msgid "" "Matrix of real is not rectangular. Found row of length %d, should be %d." msgstr "" #: ../src/reduce.c:557 msgid "Zero dimension." msgstr "" #: ../src/reduce.c:558 #, c-format msgid "Matrix has width %d, height %d." msgstr "" #: ../src/reduce.c:886 msgid "List length" msgstr "" #: ../src/reduce.c:935 #, c-format msgid "List index must be positive, not %d" msgstr "" #: ../src/reduce.c:943 msgid "List index" msgstr "" #: ../src/reduce.c:948 #, c-format msgid "List only has %d elements, unable to get element %d." msgstr "" #: ../src/reduce.c:991 msgid "No arguments allowed." msgstr "" #: ../src/reduce.c:992 #, c-format msgid "Object \"%s\" should have no arguments." msgstr "" #: ../src/reduce.c:1109 msgid "Cancelled." msgstr "" #: ../src/reduce.c:1110 msgid "Evaluation cancelled." msgstr "" #: ../src/reduce.c:1205 msgid "No value." msgstr "" #: ../src/reduce.c:1206 #, c-format msgid "Symbol \"%s\" has no value." msgstr "" #: ../src/reduce.c:1681 ../src/reduce.c:1686 ../src/reduce.c:1692 msgid "List generator" msgstr "" #: ../src/defbrowser.c:259 msgid "Tooltip" msgstr "" #: ../src/plot.c:80 msgid "YYYY" msgstr "" #: ../src/plot.c:81 msgid "XYYY" msgstr "" #: ../src/plot.c:82 msgid "XYXY" msgstr "" #: ../src/plot.c:97 msgid "Point" msgstr "" #: ../src/plot.c:99 msgid "Spline" msgstr "" #: ../src/plot.c:100 msgid "Bar" msgstr "" #: ../src/plot.c:149 msgid "More than one column needed or XY plots" msgstr "" #: ../src/plot.c:159 msgid "Even number of columns only for XY format plots" msgstr "" #: ../src/plot.c:325 msgid "Format" msgstr "" #: ../src/plot.c:328 msgid "Style" msgstr "" #: ../src/plot.c:331 msgid "Xmin" msgstr "" #: ../src/plot.c:334 msgid "Xmax" msgstr "" #: ../src/plot.c:337 msgid "Ymin" msgstr "" #: ../src/plot.c:340 msgid "Ymax" msgstr "" #: ../src/plot.c:346 msgid "X Axis Caption" msgstr "" #: ../src/plot.c:349 msgid "Y Axis Caption" msgstr "" #: ../src/plot.c:353 msgid "Series Captions" msgstr "" #: ../src/plot.c:360 msgid "Options" msgstr "" #: ../src/plot.c:384 msgid "1xn or nx1 images only for Plot" msgstr "" #: ../src/plot.c:403 msgid "Unable to prepare image." msgstr "" #: ../src/plot.c:416 msgid "1xn or nx1 images only" msgstr "" #: ../src/program.c:72 msgid "Edit window" msgstr "" #: ../src/program.c:625 msgid "Menu item text" msgstr "" #: ../src/program.c:628 msgid "Load column from this file" msgstr "" #: ../src/program.c:630 #, c-format msgid "Edit Column Item \"%s\"" msgstr "" #: ../src/program.c:635 msgid "Set column item" msgstr "" #: ../src/program.c:656 ../src/program.c:662 msgid "Unable to save." msgstr "" #: ../src/program.c:657 msgid "You can only save toolkits, not tools." msgstr "" #: ../src/program.c:663 msgid "You can't save auto-generated toolkits." msgstr "" #. Create signals. #. #. Init methods. #. #: ../src/program.c:726 msgid "Toolkit menu" msgstr "" #: ../src/program.c:1176 msgid "Set toolkit name here" msgstr "" #: ../src/program.c:1178 msgid "Set toolkit caption here" msgstr "" #: ../src/program.c:1179 msgid "New Toolkit" msgstr "" #: ../src/program.c:1183 ../src/program.c:1261 msgid "Create" msgstr "" #: ../src/program.c:1194 msgid "Nothing selected." msgstr "" #: ../src/program.c:1195 msgid "No toolkit selected." msgstr "" #: ../src/program.c:1254 msgid "Display this name" msgstr "" #: ../src/program.c:1256 msgid "Load this file" msgstr "" #: ../src/program.c:1317 msgid "Load Definition" msgstr "" #: ../src/program.c:1371 msgid "Reload" msgstr "" #: ../src/program.c:1372 msgid "Reload startup objects?" msgstr "" #: ../src/program.c:1373 msgid "" "Would you like to reload all startup menus, workspaces and plugins now? This " "may take a few seconds." msgstr "" #: ../src/program.c:1455 msgid "No tool selected" msgstr "" #: ../src/program.c:1499 msgid "Bad regular expression." msgstr "" #: ../src/program.c:1518 #, c-format msgid "No match found for \"%s\"." msgstr "" #: ../src/program.c:1531 msgid "Find in all Toolkits" msgstr "" #: ../src/program.c:1541 msgid "Enter search string here" msgstr "" #: ../src/program.c:1592 #, c-format msgid "No top-level symbol called \"%s\"." msgstr "" #: ../src/program.c:1600 #, c-format msgid "Symbol \"%s\" has no tool inforation." msgstr "" #: ../src/program.c:1621 msgid "Go to definition of this symbol" msgstr "" #: ../src/program.c:1623 msgid "Go to Definition" msgstr "" #: ../src/program.c:1653 msgid "Object information." msgstr "" #: ../src/program.c:1709 msgid "No documentation available." msgstr "" #: ../src/program.c:1710 msgid "" "On-line documentation is only currently available for VIPS functions and nip " "builtins." msgstr "" #: ../src/program.c:1737 msgid "New _Tool" msgstr "" #: ../src/program.c:1738 msgid "Make a new tool" msgstr "" #: ../src/program.c:1742 msgid "New Tool_kit" msgstr "" #: ../src/program.c:1743 msgid "Make a new toolkit" msgstr "" #: ../src/program.c:1747 msgid "New _Separator" msgstr "" #: ../src/program.c:1748 msgid "Make a new separator" msgstr "" #: ../src/program.c:1752 msgid "New _Column Item" msgstr "" #: ../src/program.c:1753 msgid "Make a new column item" msgstr "" #: ../src/program.c:1757 msgid "New _Program Window" msgstr "" #: ../src/program.c:1758 msgid "Make a new program window" msgstr "" #: ../src/program.c:1762 msgid "_Open Toolkit" msgstr "" #: ../src/program.c:1763 msgid "_Open toolkit" msgstr "" #: ../src/program.c:1767 msgid "Save Toolkit" msgstr "" #: ../src/program.c:1768 msgid "_Save toolkit" msgstr "" #: ../src/program.c:1772 msgid "Save Toolkit _As" msgstr "" #: ../src/program.c:1773 msgid "Save toolkit as" msgstr "" #: ../src/program.c:1777 msgid "_Process" msgstr "" #: ../src/program.c:1778 msgid "Process text" msgstr "" #: ../src/program.c:1782 msgid "_Reload All Toolkits" msgstr "" #: ../src/program.c:1783 msgid "Remove and reload all startup data" msgstr "" #: ../src/program.c:1787 msgid "C_ut" msgstr "" #: ../src/program.c:1788 msgid "Cut selected text" msgstr "" #: ../src/program.c:1792 msgid "_Copy" msgstr "" #: ../src/program.c:1793 msgid "Copy selected text" msgstr "" #: ../src/program.c:1797 msgid "_Paste" msgstr "" #: ../src/program.c:1798 msgid "Paste selected text" msgstr "" #: ../src/program.c:1803 msgid "Delete selected text" msgstr "" #: ../src/program.c:1808 msgid "Select all text" msgstr "" #: ../src/program.c:1812 msgid "Dese_lect All" msgstr "" #: ../src/program.c:1813 msgid "Deselect all text" msgstr "" #: ../src/program.c:1817 msgid "Delete _Tool" msgstr "" #: ../src/program.c:1818 msgid "Delete current tool" msgstr "" #: ../src/program.c:1822 msgid "Delete Tool_kit" msgstr "" #: ../src/program.c:1823 msgid "Delete current toolkit" msgstr "" #: ../src/program.c:1828 msgid "Find text in toolkits" msgstr "" #: ../src/program.c:1833 msgid "Find text again" msgstr "" #: ../src/program.c:1837 msgid "_Jump To Definition" msgstr "" #: ../src/program.c:1838 msgid "Jump to definition" msgstr "" #: ../src/program.c:1842 msgid "_Info" msgstr "" #: ../src/program.c:1843 msgid "Info on selected object" msgstr "" #: ../src/program.c:1847 msgid "_Trace" msgstr "" #: ../src/program.c:1848 msgid "Make a new trace window" msgstr "" #: ../src/program.c:1852 msgid "_Errors" msgstr "" #: ../src/program.c:1853 msgid "Show all errors" msgstr "" #: ../src/program.c:1857 msgid "Help on _Tool" msgstr "" #: ../src/program.c:1858 msgid "View docs for this tool" msgstr "" #: ../src/program.c:1864 msgid "Definition _Browser" msgstr "" #: ../src/program.c:1865 msgid "Show definition browser" msgstr "" #: ../src/program.c:2120 msgid "Bad drag." msgstr "" #: ../src/program.c:2122 msgid "" "Sorry, you can only drag tools between toolkits. You can't reorder toolkits, " "you can't nest toolkits and you can't drag tools to the top level." msgstr "" #: ../src/program.c:2315 msgid "Tool" msgstr "" #. Toolkit Browser pane. #. #: ../src/program.c:2338 msgid "Definition Browser" msgstr "" #: ../src/cache.c:881 #, c-format msgid "VIPS library: %s" msgstr "" #: ../src/progress.c:120 msgid "Cancelling" msgstr "" #: ../src/progress.c:152 #, c-format msgid "%d minute left" msgid_plural "%d minutes left" msgstr[0] "" msgstr[1] "" #: ../src/progress.c:157 #, c-format msgid "%d second left" msgid_plural "%d seconds left" msgstr[0] "" msgstr[1] "" #: ../src/progress.c:178 msgid "Calculating" msgstr "" #: ../src/progress.c:198 msgid "Loading" msgstr "" nip2-8.7.0/po/ChangeLog0000644000175000017500000000002413224651032011501 00000000000000+ en_UK translation nip2-8.7.0/po/en_GB.gmo0000644000175000017500000000132713273071606011423 00000000000000Þ•L |¨ ©@µö  ? ]Bj­ ¾ ÉColor SpaceDouble-click to edit this color, or drag-and-drop between colorsEdit Color "%s"Set Color_False ColorProject-Id-Version: nip2 7.26.0 Report-Msgid-Bugs-To: PO-Revision-Date: 2011-07-26 12:40+0100 Last-Translator: John Cupitt Language-Team: en_GB Language: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=n != 1; Colour SpaceDouble-click to edit this colour, or drag-and-drop between coloursEdit Colour "%s"Set Colour_False Colournip2-8.7.0/po/Makefile.in.in0000644000175000017500000001762613350464074012431 00000000000000# Makefile for program source directory in GNU NLS utilities package. # Copyright (C) 1995, 1996, 1997 by Ulrich Drepper # # This file file be copied and used freely without restrictions. It can # be used in projects which are not available under the GNU Public License # but which still want to provide support for the GNU gettext functionality. # Please note that the actual code is *not* freely available. # # - Modified by Owen Taylor to use GETTEXT_PACKAGE # instead of PACKAGE and to look for po2tbl in ./ not in intl/ # # - Modified by jacob berkman to install # Makefile.in.in and po2tbl.sed.in for use with glib-gettextize GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ PACKAGE = @PACKAGE@ VERSION = @VERSION@ SHELL = @SHELL@ @SET_MAKE@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ datarootdir = @datarootdir@ datadir = @datadir@ libdir = @libdir@ localedir = $(libdir)/locale gnulocaledir = $(datadir)/locale gettextsrcdir = $(datadir)/glib-2.0/gettext/po subdir = po INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ MKINSTALLDIRS = mkdir -p CC = @CC@ GENCAT = @GENCAT@ GMSGFMT = @GMSGFMT@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ XGETTEXT = @XGETTEXT@ MSGMERGE = msgmerge DEFS = @DEFS@ CFLAGS = @CFLAGS@ CPPFLAGS = @CPPFLAGS@ INCLUDES = -I.. -I$(top_srcdir)/intl COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS) SOURCES = POFILES = @POFILES@ GMOFILES = @GMOFILES@ DISTFILES = LINGUAS ChangeLog Makefile.in.in POTFILES.in $(GETTEXT_PACKAGE).pot \ $(POFILES) $(GMOFILES) $(SOURCES) POTFILES = \ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ INSTOBJEXT = @INSTOBJEXT@ .SUFFIXES: .SUFFIXES: .c .o .po .pox .gmo .mo .msg .cat .c.o: $(COMPILE) $< .po.pox: $(MAKE) $(GETTEXT_PACKAGE).pot $(MSGMERGE) $< $(srcdir)/$(GETTEXT_PACKAGE).pot -o $*.pox .po.mo: $(MSGFMT) -o $@ $< .po.gmo: $(AM_V_GEN) file=$(srcdir)/`echo $* | sed 's,.*/,,'`.gmo \ && rm -f $$file && $(GMSGFMT) $(MSGFMT_OPTS) -o $$file $< .po.cat: sed -f ../intl/po2msg.sed < $< > $*.msg \ && rm -f $@ && $(GENCAT) $@ $*.msg all: all-@USE_NLS@ all-yes: $(CATALOGS) all-no: $(srcdir)/$(GETTEXT_PACKAGE).pot: $(POTFILES) $(XGETTEXT) --default-domain=$(GETTEXT_PACKAGE) --from-code=UTF-8 \ --msgid-bugs-address='http://bugzilla.gnome.org/enter_bug.cgi?product=glib&keywords=I18N+L10N&component=general' \ --add-comments --keyword=_ --keyword=N_ \ --keyword=C_:1c,2 \ --keyword=NC_:1c,2 \ --keyword=g_dcgettext:2 \ --keyword=g_dngettext:2,3 \ --keyword=g_dpgettext2:2c,3 \ --flag=N_:1:pass-c-format \ --flag=C_:2:pass-c-format \ --flag=NC_:2:pass-c-format \ --flag=g_dngettext:2:pass-c-format \ --flag=g_strdup_printf:1:c-format \ --flag=g_string_printf:2:c-format \ --flag=g_string_append_printf:2:c-format \ --flag=g_error_new:3:c-format \ --flag=g_set_error:4:c-format \ --flag=g_markup_printf_escaped:1:c-format \ --flag=g_log:3:c-format \ --flag=g_print:1:c-format \ --flag=g_printerr:1:c-format \ --flag=g_printf:1:c-format \ --flag=g_fprintf:2:c-format \ --flag=g_sprintf:2:c-format \ --flag=g_snprintf:3:c-format \ --flag=g_scanner_error:2:c-format \ --flag=g_scanner_warn:2:c-format \ $(POTFILES) \ && test ! -f $(GETTEXT_PACKAGE).po \ || ( rm -f $(srcdir)/$(GETTEXT_PACKAGE).pot \ && mv $(GETTEXT_PACKAGE).po $(srcdir)/$(GETTEXT_PACKAGE).pot ) install: install-exec install-data install-exec: install-data: install-data-@USE_NLS@ install-data-no: all install-data-yes: all $(MKINSTALLDIRS) $(DESTDIR)$(datadir); \ catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ case "$$cat" in \ *.gmo) destdir=$(gnulocaledir);; \ *) destdir=$(localedir);; \ esac; \ lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \ dir=$(DESTDIR)$$destdir/$$lang/LC_MESSAGES; \ $(MKINSTALLDIRS) $$dir; \ if test -r $$cat; then \ $(INSTALL_DATA) $$cat $$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT); \ echo "installing $$cat as $$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT)"; \ else \ $(INSTALL_DATA) $(srcdir)/$$cat $$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT); \ echo "installing $(srcdir)/$$cat as" \ "$$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT)"; \ fi; \ if test -r $$cat.m; then \ $(INSTALL_DATA) $$cat.m $$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT).m; \ echo "installing $$cat.m as $$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT).m"; \ else \ if test -r $(srcdir)/$$cat.m ; then \ $(INSTALL_DATA) $(srcdir)/$$cat.m \ $$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT).m; \ echo "installing $(srcdir)/$$cat as" \ "$$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT).m"; \ else \ true; \ fi; \ fi; \ done if test "$(PACKAGE)" = "glib"; then \ $(MKINSTALLDIRS) $(DESTDIR)$(gettextsrcdir); \ $(INSTALL_DATA) $(srcdir)/Makefile.in.in \ $(DESTDIR)$(gettextsrcdir)/Makefile.in.in; \ else \ : ; \ fi # Define this as empty until I found a useful application. installcheck: uninstall: catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \ rm -f $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE)$(INSTOBJEXT); \ rm -f $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE)$(INSTOBJEXT).m; \ rm -f $(DESTDIR)$(gnulocaledir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE)$(INSTOBJEXT); \ rm -f $(DESTDIR)$(gnulocaledir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE)$(INSTOBJEXT).m; \ done if test "$(PACKAGE)" = "glib"; then \ rm -f $(DESTDIR)$(gettextsrcdir)/Makefile.in.in; \ fi check: all dvi info tags TAGS ID: mostlyclean: rm -f core core.* *.pox $(GETTEXT_PACKAGE).po *.old.po cat-id-tbl.tmp rm -fr *.o clean: mostlyclean distclean: clean rm -f Makefile Makefile.in POTFILES *.mo *.msg *.cat *.cat.m maintainer-clean: distclean @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." rm -f $(GMOFILES) distdir = ../$(GETTEXT_PACKAGE)-$(VERSION)/$(subdir) dist distdir: $(DISTFILES) dists="$(DISTFILES)"; \ for file in $$dists; do \ ln $(srcdir)/$$file $(distdir) 2> /dev/null \ || cp -p $(srcdir)/$$file $(distdir); \ done update-po: Makefile $(MAKE) $(GETTEXT_PACKAGE).pot tmpdir=`pwd`; \ cd $(srcdir); \ catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \ echo "$$lang:"; \ if $(MSGMERGE) $$lang.po $(GETTEXT_PACKAGE).pot -o $$tmpdir/$$lang.new.po; then \ if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ rm -f $$tmpdir/$$lang.new.po; \ else \ if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ :; \ else \ echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ rm -f $$tmpdir/$$lang.new.po; \ exit 1; \ fi; \ fi; \ else \ echo "msgmerge for $$cat failed!"; \ rm -f $$tmpdir/$$lang.new.po; \ fi; \ done # POTFILES is created from POTFILES.in by stripping comments, empty lines # and Intltool tags (enclosed in square brackets), and appending a full # relative path to them POTFILES: POTFILES.in ( if test 'x$(srcdir)' != 'x.'; then \ posrcprefix='$(top_srcdir)/'; \ else \ posrcprefix="../"; \ fi; \ rm -f $@-t $@ \ && (sed -e '/^#/d' \ -e "s/^\[.*\] +//" \ -e '/^[ ]*$$/d' \ -e "s@.*@ $$posrcprefix& \\\\@" < $(srcdir)/$@.in \ | sed -e '$$s/\\$$//') > $@-t \ && chmod a-w $@-t \ && mv $@-t $@ ) Makefile: Makefile.in.in ../config.status POTFILES cd .. \ && $(SHELL) ./config.status $(subdir)/$@.in # Tell versions [3.59,3.63) of GNU make not to export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: nip2-8.7.0/po/POTFILES.in0000644000175000017500000000403113224651032011506 00000000000000src/conversionview.c src/vector.c src/tslider.c src/fontnameview.c src/workspacegroup.c src/iobject.c src/plotview.c src/matrix.c src/option.c src/managed.c src/vipsobject.c src/optionview.c src/toolkitbrowser.c src/imagepresent.c src/secret.c src/paintboxview.c src/prefworkspaceview.c src/boxes.c src/toggleview.c src/columnview.c src/lex.c src/row.c src/nipmarshal.c src/imagemodel.c src/imagedisplay.c src/sliderview.c src/colourview.c src/matrixview.c src/subcolumn.c src/iwindow.c src/real.c src/pane.c src/log.c src/heap.c src/heapmodel.c src/prefs.c src/symbol.c src/imageview.c src/parse.c src/managedgvalue.c src/conversion.c src/trace.c src/gtkutil.c src/slider.c src/action.c src/rowview.c src/column.c src/model.c src/iregiongroupview.c src/pathname.c src/panechild.c src/stringview.c src/iregion.c src/expr.c src/itext.c src/iregiongroup.c src/predicate.c src/icontainer.c src/iarrow.c src/expressionview.c src/workspace.c src/toolkitgroup.c src/iimage.c src/main.c src/toolkitview.c src/imageinfo.c src/string.c src/editview.c src/tree.c src/plotpresent.c src/dump.c src/colour.c src/number.c src/mainw.c src/popupbutton.c src/iimageview.c src/managedstring.c src/regionview.c src/idialog.c src/call.c src/class.c src/preview.c src/filemodel.c src/builtin.c src/compile.c src/pathnameview.c src/spin.c src/error.c src/tool.c src/floatwindow.c src/util.c src/view.c src/plotmodel.c src/iregionview.c src/formula.c src/valueview.c src/colourdisplay.c src/plotwindow.c src/numberview.c src/path.c src/workspaceview.c src/rhsview.c src/imageheader.c src/toggle.c src/filesel.c src/toolkitgroupview.c src/link.c src/rhs.c src/classmodel.c src/toolview.c src/toolkit.c src/watch.c src/expression.c src/clock.c src/graphwindow.c src/managedgobject.c src/workspacedefs.c src/group.c src/statusview.c src/itextview.c src/graphicview.c src/reduce.c src/doubleclick.c src/nip2-cli.c src/defbrowser.c src/plotstatus.c src/vobject.c src/plot.c src/subcolumnview.c src/value.c src/program.c src/fontname.c src/prefcolumnview.c src/managedfile.c src/cache.c src/progress.c nip2-8.7.0/po/en_GB.po0000644000175000017500000020137313224651032011253 00000000000000# UK english translation ... just swap color for colour # Copyright (C) 2011 # This file is distributed under the same license as the nip2 package. # John Cupitt , 2011. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: nip2 7.26.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2011-07-26 12:33+0100\n" "PO-Revision-Date: 2011-07-26 12:40+0100\n" "Last-Translator: John Cupitt \n" "Language-Team: en_GB \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" #: ../src/action.c:87 msgid "Bad arguments." msgstr "" #. Expands to eg. 'bad args to "+", called from "fred"' #. #: ../src/action.c:102 ../src/action.c:186 msgid "Called from" msgstr "" #: ../src/action.c:108 #, c-format msgid "" "Error in binary \"%s\".\n" "left = %s\n" "right = %s\n" "%s" msgstr "" #: ../src/action.c:142 ../src/class.c:190 #, c-format msgid "Member \"%s\" not found in class \"%s\"." msgstr "" #: ../src/action.c:149 #, c-format msgid "object = %s" msgstr "" #: ../src/action.c:153 #, c-format msgid "tag = %s" msgstr "" #: ../src/action.c:158 #, c-format msgid "Reference attempted in \"%s\"." msgstr "" #: ../src/action.c:162 ../src/class.c:189 msgid "Member not found." msgstr "" #: ../src/action.c:173 ../src/builtin.c:1008 ../src/call.c:249 #: ../src/class.c:49 ../src/class.c:1027 ../src/reduce.c:898 #: ../src/reduce.c:911 msgid "Bad argument." msgstr "" #: ../src/action.c:192 #, c-format msgid "" "Error in unary \"%s\".\n" "argument = %s\n" "%s" msgstr "" #: ../src/action.c:359 ../src/action.c:377 ../src/action.c:407 msgid "Bad right hand side of '.'." msgstr "" #: ../src/action.c:369 msgid "Symbol on left hand side of '.' is not scope" msgstr "" #: ../src/action.c:411 msgid "Property not found." msgstr "" #: ../src/action.c:425 msgid "Bad left hand side of '.'." msgstr "" #: ../src/action.c:937 msgid "Division by zero." msgstr "" #: ../src/action.c:1313 ../src/action.c:1593 msgid "Unimplemented." msgstr "" #: ../src/action.c:1677 ../src/action.c:1713 ../src/action.c:1971 msgid "invoking method:" msgstr "" #: ../src/boxes.c:251 msgid "Close _without Saving" msgstr "" #. Translators: translate this to a credit for you, and it'll appear in #. * the About box. #. #: ../src/boxes.c:270 msgid "translator_credits" msgstr "" #: ../src/boxes.c:279 #, c-format msgid "About %s." msgstr "" #: ../src/boxes.c:282 #, c-format msgid "%s is an image processing package." msgstr "" #: ../src/boxes.c:286 #, c-format msgid "" "%s comes with ABSOLUTELY NO WARRANTY. This is free software and you are " "welcome to redistribute it under certain conditions, see http://www.gnu.org." msgstr "" #: ../src/boxes.c:305 msgid "Personal start folder" msgstr "" #: ../src/boxes.c:309 msgid "Homepage" msgstr "" #: ../src/boxes.c:312 msgid "Linked to VIPS" msgstr "" #: ../src/boxes.c:315 msgid "Built against VIPS" msgstr "" #: ../src/boxes.c:328 msgid "Temp files in" msgstr "" #: ../src/boxes.c:394 msgid "Help page not found." msgstr "" #: ../src/boxes.c:395 #, c-format msgid "No indexed help page found for tag \"%s\"" msgstr "" #: ../src/boxes.c:604 msgid "Search for" msgstr "" #: ../src/boxes.c:605 msgid "Case sensitive" msgstr "" #: ../src/boxes.c:607 msgid "Regular expression" msgstr "" #: ../src/boxes.c:609 msgid "Search from start" msgstr "" #: ../src/boxes.c:814 msgid "Image header fields" msgstr "" #: ../src/boxes.c:830 msgid "Image history" msgstr "" #: ../src/boxes.c:946 ../src/boxes.c:957 ../src/boxes.c:986 msgid "Unable to view help file." msgstr "" #: ../src/boxes.c:947 #, c-format msgid "Unable to open URL \"%s\", windows error code = %d." msgstr "" #: ../src/boxes.c:958 #, c-format msgid "" "Attempt to view URL with xdg-open failed\n" "%s" msgstr "" #: ../src/boxes.c:963 ../src/boxes.c:995 msgid "Browser window opened." msgstr "" #: ../src/boxes.c:965 ../src/boxes.c:997 msgid "You may need to switch desktops to see the new window." msgstr "" #: ../src/boxes.c:988 #, c-format msgid "" "Attempted to launch browser with command:\n" " %s\n" "You can change this command in Preferences." msgstr "" #: ../src/boxes.c:1029 msgid "Select Font" msgstr "" #: ../src/boxes.c:1087 msgid "Font not found." msgstr "" #: ../src/boxes.c:1088 #, c-format msgid "Font \"%s\" not found on system." msgstr "" #: ../src/boxes.c:1168 msgid "Pick a font" msgstr "" #: ../src/boxes.c:1173 msgid "Set Font" msgstr "" #: ../src/boxes.c:1219 msgid "Click to select font" msgstr "" #: ../src/builtin.c:257 msgid "Out of range." msgstr "" #: ../src/builtin.c:258 msgid "gammq arguments must be a > 0, x >= 0." msgstr "" #: ../src/builtin.c:265 msgid "Not available." msgstr "" #: ../src/builtin.c:266 msgid "No GSL library available for gammq." msgstr "" #: ../src/builtin.c:422 ../src/classmodel.c:154 ../src/classmodel.c:227 #: ../src/filemodel.c:100 ../src/filemodel.c:145 ../src/filemodel.c:357 #: ../src/filemodel.c:583 ../src/filemodel.c:624 ../src/mainw.c:754 #: ../src/mainw.c:762 ../src/model.c:313 ../src/model.c:368 #: ../src/rowview.c:456 ../src/view.c:820 msgid "Not implemented." msgstr "" #: ../src/builtin.c:423 msgid "Complex math ops not implemented." msgstr "" #: ../src/builtin.c:498 msgid "Macro error." msgstr "" #: ../src/builtin.c:681 msgid "No such type" msgstr "" #: ../src/builtin.c:682 #, c-format msgid "GType %u not found." msgstr "" #: ../src/builtin.c:905 msgid "GSL library error." msgstr "" #: ../src/builtin.c:954 #, c-format msgid "Builtin \"%s\" takes %d argument." msgid_plural "Builtin \"%s\" takes %d arguments." msgstr[0] "" msgstr[1] "" #: ../src/builtin.c:1009 #, c-format msgid "" "Argument %d to builtin \"%s\" should be \"%s\", you passed:\n" " %s" msgstr "" #: ../src/cache.c:923 ../src/call.c:144 ../src/class.c:862 msgid "You passed:" msgstr "" #: ../src/cache.c:946 ../src/util.c:191 ../src/vipsobject.c:284 msgid "VIPS library error." msgstr "" #: ../src/cache.c:949 ../src/call.c:133 #, c-format msgid "Error calling library function \"%s\" (%s)." msgstr "" #: ../src/cache.c:952 #, c-format msgid "VIPS library: %s" msgstr "" #: ../src/call.c:132 msgid "CALL library error." msgstr "" #: ../src/call.c:192 msgid "Usage:" msgstr "" #: ../src/call.c:194 #, c-format msgid "CALL operator \"%s\"" msgstr "" #: ../src/call.c:196 #, c-format msgid "%s, from package \"%s\"" msgstr "" #: ../src/call.c:201 #, c-format msgid "\"%s\" takes %d argument:" msgid_plural "\"%s\" takes %d arguments:" msgstr[0] "" msgstr[1] "" #: ../src/call.c:208 #, c-format msgid "And produces %d result:" msgid_plural "And produces %d results:" msgstr[0] "" msgstr[1] "" #. Print any flags this function has. #. #: ../src/call.c:216 msgid "Flags:" msgstr "" #: ../src/call.c:220 msgid "PIO function" msgstr "" #: ../src/call.c:222 msgid "WIO function" msgstr "" #: ../src/call.c:225 msgid "coordinate transformer" msgstr "" #: ../src/call.c:227 msgid "no coordinate transformation" msgstr "" #: ../src/call.c:230 msgid "point-to-point operation" msgstr "" #: ../src/call.c:232 msgid "area operation" msgstr "" #: ../src/call.c:235 msgid "uncacheable operation" msgstr "" #: ../src/call.c:237 msgid "operation can be cached" msgstr "" #: ../src/call.c:252 #, c-format msgid "Argument %d (%s) to \"%s\" is the wrong type." msgstr "" #: ../src/call.c:269 ../src/class.c:657 ../src/class.c:889 ../src/class.c:986 #: ../src/compile.c:1766 ../src/vipsobject.c:125 msgid "Too many arguments." msgstr "" #: ../src/call.c:272 #, c-format msgid "Too many arguments to \"%s\"." msgstr "" #: ../src/call.c:290 msgid "Unknown type." msgstr "" #: ../src/call.c:291 #, c-format msgid "CALL type \"%s\" not supported" msgstr "" #: ../src/call.c:1262 ../src/call.c:1346 #, c-format msgid "image \"%s\"" msgstr "" #: ../src/call.c:1269 msgid "no image" msgstr "" #: ../src/call.c:1300 msgid "doublevec" msgstr "" #: ../src/call.c:1342 msgid "imagevec" msgstr "" #: ../src/class.c:50 #, c-format msgid "Object %s is not a class." msgstr "" #: ../src/class.c:333 msgid "No such secret." msgstr "" #: ../src/class.c:334 msgid "" "Editing local classes which reference non-local objects is a bit broken at " "the moment :-(" msgstr "" #: ../src/class.c:658 #, c-format msgid "You can't have more than %d arguments to a superclass constructor." msgstr "" #: ../src/class.c:794 ../src/class.c:854 msgid "Bad superclass." msgstr "" #: ../src/class.c:795 #, c-format msgid "Superclass constructor \"%s\" refers to non-local symbols %s" msgstr "" #: ../src/class.c:803 ../src/workspace.c:1693 msgid "Wrong number of arguments." msgstr "" #: ../src/class.c:804 #, c-format msgid "Superclass constructor \"%s\" expects %d arguments, not %d." msgstr "" #: ../src/class.c:858 #, c-format msgid "First element in superclass of \"%s\" must be class or constructor." msgstr "" #: ../src/class.c:890 ../src/class.c:987 #, c-format msgid "" "Too many arguments to class constructor \"%s\". No more than %d arguments " "are supported." msgstr "" #: ../src/class.c:980 msgid "Class not found." msgstr "" #: ../src/class.c:981 #, c-format msgid "Class \"%s\" not found." msgstr "" #: ../src/class.c:1018 #, c-format msgid "Member \"%s\" of class \"%s\" should be of type \"%s\", instead it's:" msgstr "" #: ../src/classmodel.c:155 ../src/classmodel.c:228 #, c-format msgid "_%s() method not implemented for %s." msgstr "" #: ../src/classmodel.c:163 #, c-format msgid "Save %s \"%s\"" msgstr "" #: ../src/classmodel.c:237 #, c-format msgid "Replace %s \"%s\"" msgstr "" #: ../src/classmodel.c:695 msgid "Set boolean value here" msgstr "" #: ../src/classmodel.c:701 msgid "Enter a floating point number here" msgstr "" #: ../src/classmodel.c:708 msgid "Enter a string here" msgstr "" #. Expands to "Edit Toggle A1". #. #: ../src/classmodel.c:762 #, c-format msgid "Edit %s %s" msgstr "" #: ../src/classmodel.c:773 #, c-format msgid "Set %s" msgstr "" #: ../src/classmodel.c:1069 msgid "Unknown option." msgstr "" #: ../src/classmodel.c:1070 #, c-format msgid "Option \"%s\" not known." msgstr "" #: ../src/classmodel.c:1144 ../src/matrixview.c:189 ../src/matrixview.c:210 #: ../src/plot.c:140 ../src/plot.c:150 ../src/plot.c:360 ../src/plot.c:379 #: ../src/plot.c:392 msgid "Bad value." msgstr "" #: ../src/classmodel.c:1145 #, c-format msgid "%d band value only" msgstr "" #: ../src/clock.c:59 ../src/clock.c:93 ../src/clock.c:190 msgid "Interval" msgstr "" #: ../src/clock.c:60 ../src/clock.c:96 msgid "Elapsed time" msgstr "" #: ../src/clock.c:93 msgid "Interval between ticks (seconds)" msgstr "" #: ../src/clock.c:96 msgid "Elapsed time (seconds)" msgstr "" #: ../src/clock.c:100 #, c-format msgid "Edit Clock \"%s\"" msgstr "" #: ../src/clock.c:104 msgid "Set Clock" msgstr "" #: ../src/clock.c:193 ../src/colour.c:305 ../src/fontname.c:61 #: ../src/matrix.c:262 ../src/number.c:68 ../src/option.c:71 #: ../src/pathname.c:84 ../src/plot.c:340 ../src/slider.c:57 #: ../src/string.c:70 ../src/toggle.c:51 msgid "Value" msgstr "" #: ../src/colour.c:264 #, c-format msgid "Edit Color \"%s\"" msgstr "Edit Colour \"%s\"" #: ../src/colour.c:270 msgid "Set Color" msgstr "Set Colour" #: ../src/colour.c:302 msgid "Color Space" msgstr "Colour Space" #: ../src/colourdisplay.c:259 msgid "Double-click to edit this color, or drag-and-drop between colors" msgstr "Double-click to edit this colour, or drag-and-drop between colours" #: ../src/column.c:326 ../src/tool.c:867 ../src/workspace.c:1529 #: ../src/workspacegroup.c:145 msgid "Name clash." msgstr "" #: ../src/column.c:327 #, c-format msgid "Can't create column \"%s\". A column with that name already exists." msgstr "" #: ../src/column.c:364 msgid "Empty column." msgstr "" #: ../src/column.c:365 msgid "There are no objects in the current column." msgstr "" #: ../src/column.c:384 msgid "Too few items." msgstr "" #: ../src/column.c:385 #, c-format msgid "This column only has %d items, but %s needs %d items." msgstr "" #: ../src/columnview.c:133 #, c-format msgid "Save Column \"%s\"" msgstr "" #: ../src/columnview.c:180 ../src/columnview.c:241 ../src/mainw.c:1369 #: ../src/mainw.c:1407 ../src/program.c:596 ../src/program.c:625 #: ../src/program.c:1052 ../src/program.c:1093 ../src/program.c:1139 #: ../src/program.c:1171 ../src/program.c:1503 ../src/program.c:1544 #: ../src/program.c:2201 ../src/row.c:480 ../src/workspacegroup.c:177 #: ../src/workspacegroup.c:213 msgid "Name" msgstr "" #: ../src/columnview.c:181 ../src/columnview.c:243 msgid "Toolkit" msgstr "" #: ../src/columnview.c:182 ../src/columnview.c:245 ../src/matrix.c:271 #: ../src/program.c:597 ../src/program.c:627 ../src/program.c:1140 #: ../src/program.c:1173 msgid "Filename" msgstr "" #: ../src/columnview.c:241 msgid "Set menu item text here" msgstr "" #: ../src/columnview.c:243 msgid "Add to this toolkit" msgstr "" #: ../src/columnview.c:245 msgid "Store column in this file" msgstr "" #: ../src/columnview.c:248 #, c-format msgid "New Menu Item from Column \"%s\"" msgstr "" #: ../src/columnview.c:253 msgid "Menuize" msgstr "" #: ../src/columnview.c:648 msgid "Edit caption, press enter to accept changes, press escape to cancel" msgstr "" #: ../src/columnview.c:701 msgid "Enter expressions here" msgstr "" #: ../src/columnview.c:755 msgid "doubleclick to set title" msgstr "" #: ../src/columnview.c:764 msgid "Fold the column away" msgstr "" #: ../src/columnview.c:769 msgid "Open the column" msgstr "" #: ../src/columnview.c:893 msgid "Column menu" msgstr "" #: ../src/columnview.c:894 msgid "_Edit Caption" msgstr "" #: ../src/columnview.c:896 ../src/mainw.c:1708 ../src/program.c:1719 msgid "Select _All" msgstr "" #: ../src/columnview.c:903 msgid "Make Column Into _Menu Item" msgstr "" #: ../src/columnview.c:940 msgid "Left-drag to move, left-double-click to set title, right-click for menu" msgstr "" #: ../src/columnview.c:973 msgid "Delete the column" msgstr "" #: ../src/compile.c:1448 msgid "Too many shared nodes in graph." msgstr "" #: ../src/compile.c:1450 msgid "Raise MAX_RELOC" msgstr "" #: ../src/compile.c:1767 #, c-format msgid "Member \"%s\" of class \"%s\" should have no arguments." msgstr "" #: ../src/compile.c:2644 msgid "pattern match failed" msgstr "" #: ../src/conversion.c:473 msgid "not uncoded" msgstr "" #: ../src/conversion.c:1415 #, c-format msgid "Header for \"%s\"" msgstr "" #: ../src/conversion.c:1417 msgid "OK" msgstr "" #: ../src/conversionview.c:66 msgid "Unable to find image range." msgstr "" #: ../src/conversionview.c:67 msgid "Find image range failed." msgstr "" #: ../src/conversionview.c:90 msgid "Unable to scale image." msgstr "" #: ../src/conversionview.c:91 msgid "Maximum and minimum pixel values are equal." msgstr "" #. Build menu. One for each window, as we need to track falsecolour #. * etc. toggles. Could just have one, and modify pre-popup, but this #. * is easier. #. #: ../src/conversionview.c:229 msgid "Convert menu" msgstr "" #: ../src/conversionview.c:230 msgid "_Scale" msgstr "" #: ../src/conversionview.c:232 msgid "_False Color" msgstr "_False Colour" #: ../src/conversionview.c:234 msgid "_Interpret" msgstr "" #: ../src/conversionview.c:236 ../src/regionview.c:1020 msgid "_Reset" msgstr "" #: ../src/conversionview.c:238 msgid "Set As Workspace _Default" msgstr "" #: ../src/dump.c:186 ../src/expr.c:641 msgid "value" msgstr "" #: ../src/dump.c:187 msgid "parameter" msgstr "" #: ../src/dump.c:188 msgid "zombie" msgstr "" #: ../src/dump.c:189 ../src/util.c:1349 msgid "workspace" msgstr "" #: ../src/dump.c:190 msgid "workspace group" msgstr "" #: ../src/dump.c:191 msgid "root symbol" msgstr "" #: ../src/dump.c:192 msgid "external symbol" msgstr "" #: ../src/dump.c:193 msgid "built-in symbol" msgstr "" #: ../src/editview.c:79 ../src/fontnameview.c:80 ../src/formula.c:198 #: ../src/gtkutil.c:756 ../src/gtkutil.c:791 ../src/gtkutil.c:845 #: ../src/optionview.c:172 ../src/pathnameview.c:80 ../src/sliderview.c:74 #, c-format msgid "%s:" msgstr "" #: ../src/editview.c:158 msgid "Escape to cancel edit, press Return to accept edit and recalculate" msgstr "" #: ../src/error.c:60 msgid "No ierrors found." msgstr "" #: ../src/error.c:100 msgid "No unresolved symbols found." msgstr "" #: ../src/error.c:115 ../src/trace.c:230 msgid "_Clear" msgstr "" #: ../src/error.c:116 msgid "Clear ierror window" msgstr "" #: ../src/error.c:120 msgid "List _iErrors" msgstr "" #: ../src/error.c:121 msgid "Search for all ierrors" msgstr "" #: ../src/error.c:125 msgid "List _Unresolved" msgstr "" #: ../src/error.c:126 msgid "Search for all unresolved references" msgstr "" #: ../src/error.c:202 #, c-format msgid "iError - %s" msgstr "" #: ../src/expr.c:64 #, c-format msgid "error in \"%s\"" msgstr "" #: ../src/expr.c:346 msgid "Error" msgstr "" #: ../src/expr.c:613 msgid "top level" msgstr "" #: ../src/expr.c:618 msgid "class" msgstr "" #: ../src/expr.c:621 msgid "instance" msgstr "" #: ../src/expr.c:625 msgid "definition" msgstr "" #: ../src/expr.c:632 #, c-format msgid "parameter \"%s\"" msgstr "" #: ../src/expr.c:636 msgid "member" msgstr "" #: ../src/expr.c:645 ../src/itext.c:446 msgid "function" msgstr "" #: ../src/expr.c:654 msgid "of" msgstr "" #: ../src/filemodel.c:101 ../src/filemodel.c:146 ../src/filemodel.c:584 #: ../src/filemodel.c:625 ../src/model.c:314 ../src/model.c:369 #: ../src/model.c:388 #, c-format msgid "_%s() not implemented for class \"%s\"." msgstr "" #: ../src/filemodel.c:270 ../src/filemodel.c:285 ../src/model.c:419 msgid "XML library error." msgstr "" #: ../src/filemodel.c:271 msgid "model_save_filename: xmlNewDoc() failed" msgstr "" #: ../src/filemodel.c:286 msgid "model_save_filename: xmlNewDocNode() failed" msgstr "" #: ../src/filemodel.c:302 msgid "Save failed." msgstr "" #: ../src/filemodel.c:303 #, c-format msgid "" "Save of %s \"%s\" to file \"%s\" failed.\n" "%s" msgstr "" #: ../src/filemodel.c:358 msgid "filemodel_real_save_all: no save method" msgstr "" #: ../src/filemodel.c:469 ../src/filemodel.c:478 ../src/filemodel.c:491 #: ../src/mainw.c:1022 ../src/model.c:130 msgid "Load failed." msgstr "" #: ../src/filemodel.c:470 #, c-format msgid "Can't load XML file \"%s\", it's not a %s save file." msgstr "" #: ../src/filemodel.c:479 #, c-format msgid "" "Can't load XML file \"%s\", unable to extract version information from " "namespace." msgstr "" #: ../src/filemodel.c:492 #, c-format msgid "Can't load XML file \"%s\", the file does not contain a %s." msgstr "" #. Expands to (eg.) "Save Column A2". #. #: ../src/filemodel.c:677 #, c-format msgid "Save %s %s" msgstr "" #: ../src/filemodel.c:753 ../src/filemodel.c:765 msgid "Object has been modified." msgstr "" #: ../src/filemodel.c:754 #, c-format msgid "" "%s \"%s\" has been modified since you loaded it from file \"%s\".\n" "\n" "Do you want to save your changes?" msgstr "" #: ../src/filemodel.c:766 #, c-format msgid "%s \"%s\" has been modified. Do you want to save your changes?" msgstr "" #: ../src/filesel.c:86 msgid "Workspace files (*.ws)" msgstr "" #: ../src/filesel.c:88 msgid "Recombination matrix files (*.rec)" msgstr "" #: ../src/filesel.c:90 msgid "Morphology matrix files (*.mor)" msgstr "" #: ../src/filesel.c:92 msgid "Convolution matrix files (*.con)" msgstr "" #: ../src/filesel.c:94 msgid "Matrix files (*.mat)" msgstr "" #: ../src/filesel.c:96 msgid "Definition files (*.def)" msgstr "" #: ../src/filesel.c:98 msgid "ICC profiles (*.icc, *.icm)" msgstr "" #: ../src/filesel.c:100 msgid "All files (*)" msgstr "" #. Used as eg. "VIPS image files (*.v)" #. #: ../src/filesel.c:133 msgid "image files" msgstr "" #: ../src/filesel.c:500 #, c-format msgid "Unable to determine space free in \"%s\"." msgstr "" #. Expands to (eg.) '6GB free in "/pics/tmp"' #. #: ../src/filesel.c:511 #, c-format msgid "free in \"%s\"" msgstr "" #: ../src/filesel.c:759 ../src/util.c:1932 ../src/util.c:1938 msgid "Bad filename." msgstr "" #: ../src/filesel.c:760 msgid "No file selected." msgstr "" #: ../src/filesel.c:973 msgid "Increment filename" msgstr "" #: ../src/filesel.c:979 msgid "After Save, add 1 to the last number in the file name" msgstr "" #: ../src/filesel.c:1220 #, c-format msgid "%s Save Preferences" msgstr "" #: ../src/filesel.c:1281 msgid "Overwrite" msgstr "" #: ../src/filesel.c:1282 msgid "Overwrite file?" msgstr "" #: ../src/filesel.c:1283 #, c-format msgid "File \"%s\" exists. OK to overwrite?" msgstr "" #: ../src/fontname.c:58 ../src/mainw.c:1370 ../src/mainw.c:1409 #: ../src/number.c:65 ../src/option.c:65 ../src/pathname.c:81 #: ../src/program.c:1053 ../src/program.c:1095 ../src/slider.c:48 #: ../src/string.c:67 ../src/toggle.c:48 ../src/workspacegroup.c:178 #: ../src/workspacegroup.c:215 msgid "Caption" msgstr "" #: ../src/formula.c:143 msgid "" "Press Escape to cancel edit, press Return to accept edit and recalculate" msgstr "" #: ../src/gtkutil.c:608 msgid "Bad identifier." msgstr "" #: ../src/gtkutil.c:610 msgid "" "Enter an identifier. Identifiers start with a letter, and then contain only " "letters, numbers, apostrophy and underscore." msgstr "" #: ../src/gtkutil.c:663 ../src/gtkutil.c:671 ../src/matrixview.c:96 msgid "Bad floating point number." msgstr "" #: ../src/gtkutil.c:664 ../src/matrixview.c:97 #, c-format msgid "\"%s\" is not a floating point number." msgstr "" #: ../src/gtkutil.c:672 #, c-format msgid "Extra characters \"%s\" after number." msgstr "" #: ../src/gtkutil.c:696 msgid "Bad integer." msgstr "" #: ../src/gtkutil.c:697 #, c-format msgid "\"%s\" is not an integer." msgstr "" #: ../src/gtkutil.c:715 msgid "Bad unsigned integer." msgstr "" #: ../src/gtkutil.c:731 msgid "Bad positive integer." msgstr "" #: ../src/gtkutil.c:853 ../src/toggleview.c:106 msgid "Left-click to change value" msgstr "" #: ../src/heap.c:812 msgid "Heap full." msgstr "" #: ../src/heap.c:818 #, c-format msgid "" "The compile heap for %s has filled. Make it smaller and less complicated." msgstr "" #: ../src/heap.c:823 msgid "" "The main calculation heap has filled. Raise the heap size limit in " "Preferences." msgstr "" #: ../src/heap.c:1852 msgid "Unimplemented list type." msgstr "" #: ../src/heap.c:1947 msgid "Unimplemented type." msgstr "" #: ../src/heap.c:1948 #, c-format msgid "Unable to convert %s to a nip type." msgstr "" #: ../src/heap.c:2111 msgid "circular" msgstr "" #: ../src/heap.c:2116 #, c-format msgid "circular to label %d" msgstr "" #: ../src/heap.c:2126 #, c-format msgid "label %d" msgstr "" #: ../src/heap.c:2143 msgid "unevaluated" msgstr "" #: ../src/heap.c:2178 #, c-format msgid "class (%p)" msgstr "" #: ../src/heap.c:2189 msgid "members" msgstr "" #: ../src/heap.c:2200 msgid "secret" msgstr "" #: ../src/heap.c:2253 #, c-format msgid "no value (type %d)" msgstr "" #: ../src/heap.c:2261 msgid "NULL pointer" msgstr "" #: ../src/heap.c:2270 msgid "symbol" msgstr "" #: ../src/heap.c:2278 msgid "constructor" msgstr "" #: ../src/heap.c:2286 msgid "symref" msgstr "" #: ../src/heap.c:2294 msgid "compileref" msgstr "" #: ../src/heap.c:2322 #, c-format msgid "tag \"%s\"" msgstr "" #: ../src/heap.c:2337 #, c-format msgid "unknown element tag %d" msgstr "" #: ../src/iarrow.c:117 msgid "No image" msgstr "" #. Used in (eg.) "Mark at (10, 10) on [A1, A2]" #. #. Expands to (eg.) "Region on A1 at (10, 10), size (50, 50)" #. #: ../src/iarrow.c:130 ../src/iregion.c:156 msgid "on" msgstr "" #: ../src/iarrow.c:148 ../src/iarrow.c:153 #, c-format msgid "at %d" msgstr "" #: ../src/iarrow.c:158 #, c-format msgid "at (%d, %d)" msgstr "" #: ../src/iarrow.c:165 #, c-format msgid "at (%d, %d), offset (%d, %d)" msgstr "" #: ../src/idialog.c:432 msgid "Pin up" msgstr "" #: ../src/idialog.c:434 msgid "Check this to pin the dialog up" msgstr "" #: ../src/iimage.c:115 msgid "Original filename" msgstr "" #: ../src/iimage.c:338 msgid "Save timer." msgstr "" #: ../src/iimage.c:339 #, c-format msgid "Image save took %g seconds." msgstr "" #: ../src/imageinfo.c:676 msgid "User cancelled operation" msgstr "" #: ../src/imageinfo.c:976 msgid "Unable to open image." msgstr "" #: ../src/imageinfo.c:977 #, c-format msgid "Unable to open file \"%s\" as image." msgstr "" #: ../src/imageinfo.c:1105 msgid "Unable to write to file." msgstr "" #: ../src/imageinfo.c:1106 #, c-format msgid "Error writing image to file \"%s\"." msgstr "" #: ../src/imageinfo.c:1122 msgid "Unable to paint on image." msgstr "" #: ../src/imageinfo.c:1123 #, c-format msgid "" "Unable to get write permission for file \"%s\".\n" "Check permission settings." msgstr "" #: ../src/imageinfo.c:1167 msgid "Modify" msgstr "" #: ../src/imageinfo.c:1168 msgid "Modify disc file?" msgstr "" #: ../src/imageinfo.c:1169 #, c-format msgid "" "This image is being shown directly from the disc file:\n" "\n" " %s\n" "\n" "If you paint on this file, it will be permanently changed. If something goes " "wrong, you may lose work. Are you sure you want to modify this file?" msgstr "" #: ../src/imageinfo.c:1771 msgid "Unable to paint text." msgstr "" #: ../src/imageinfo.c:1772 #, c-format msgid "Unable to paint text \"%s\" in font \"%s\"." msgstr "" #: ../src/imagemodel.c:510 msgid "No text specified." msgstr "" #: ../src/imagemodel.c:511 msgid "Enter some text to paint in the entry widget at the top of the window." msgstr "" #. Need one menu per image window (could have a single menu for all #. * windows, but then we'd have to set the state of the toggle buttons #. * before mapping) #. #: ../src/imagepresent.c:1579 msgid "Ruler menu" msgstr "" #: ../src/imagepresent.c:1580 msgid "Rulers In _mm" msgstr "" #: ../src/imagepresent.c:1582 msgid "Show _Offset" msgstr "" #: ../src/imageview.c:457 msgid "New _Mark" msgstr "" #: ../src/imageview.c:458 msgid "Create a new mark" msgstr "" #: ../src/imageview.c:462 msgid "New _Horizontal Guide" msgstr "" #: ../src/imageview.c:463 msgid "Create a new horizontal guide" msgstr "" #: ../src/imageview.c:467 msgid "New _Vertical Guide" msgstr "" #: ../src/imageview.c:468 msgid "Create a new vertical guide" msgstr "" #: ../src/imageview.c:472 msgid "New _Arrow" msgstr "" #: ../src/imageview.c:473 msgid "Create a new arrow" msgstr "" #: ../src/imageview.c:477 msgid "New _Region" msgstr "" #: ../src/imageview.c:478 msgid "Create a new region" msgstr "" #: ../src/imageview.c:482 msgid "Replace Image" msgstr "" #: ../src/imageview.c:483 msgid "Replace image from file" msgstr "" #: ../src/imageview.c:487 msgid "Save Image As" msgstr "" #: ../src/imageview.c:488 msgid "Save image to file" msgstr "" #: ../src/imageview.c:492 ../src/mainw.c:868 msgid "Recalculate" msgstr "" #: ../src/imageview.c:493 msgid "Recalculate image" msgstr "" #: ../src/imageview.c:497 msgid "Image _Header" msgstr "" #: ../src/imageview.c:498 msgid "View image header" msgstr "" #: ../src/imageview.c:502 ../src/imageview.c:556 msgid "Zoom _In" msgstr "" #: ../src/imageview.c:503 ../src/imageview.c:557 msgid "Zoom in on mouse cursor" msgstr "" #: ../src/imageview.c:507 ../src/imageview.c:561 msgid "Zoom _Out" msgstr "" #. IMAGEMODEL_MAGIN #: ../src/imageview.c:508 ../src/imageview.c:562 ../src/paintboxview.c:249 msgid "Zoom out" msgstr "" #: ../src/imageview.c:512 msgid "Zoom _100%" msgstr "" #: ../src/imageview.c:513 ../src/imageview.c:576 msgid "Zoom to 100%" msgstr "" #: ../src/imageview.c:517 msgid "Zoom to _Fit" msgstr "" #: ../src/imageview.c:518 msgid "Zoom to fit image to window" msgstr "" #: ../src/imageview.c:524 ../src/plotwindow.c:167 msgid "_Status" msgstr "" #: ../src/imageview.c:525 ../src/plotwindow.c:168 msgid "Show status bar" msgstr "" #: ../src/imageview.c:529 msgid "_Display Control" msgstr "" #: ../src/imageview.c:530 msgid "Show display control bar" msgstr "" #: ../src/imageview.c:534 msgid "_Paint" msgstr "" #: ../src/imageview.c:535 msgid "Show paint bar" msgstr "" #: ../src/imageview.c:539 msgid "_Rulers" msgstr "" #: ../src/imageview.c:540 msgid "Show rulers" msgstr "" #: ../src/imageview.c:546 msgid "_Select" msgstr "" #: ../src/imageview.c:547 msgid "Select and modify selections" msgstr "" #: ../src/imageview.c:551 msgid "_Pan" msgstr "" #: ../src/imageview.c:552 msgid "Pan image" msgstr "" #: ../src/imageview.c:568 msgid "6%" msgstr "" #: ../src/imageview.c:568 msgid "Zoom to 6%" msgstr "" #: ../src/imageview.c:570 msgid "12%" msgstr "" #: ../src/imageview.c:570 msgid "Zoom to 12%" msgstr "" #: ../src/imageview.c:572 msgid "25%" msgstr "" #: ../src/imageview.c:572 msgid "Zoom to 25%" msgstr "" #: ../src/imageview.c:574 msgid "50%" msgstr "" #: ../src/imageview.c:574 msgid "Zoom to 50%" msgstr "" #: ../src/imageview.c:576 msgid "100%" msgstr "" #: ../src/imageview.c:578 msgid "200%" msgstr "" #: ../src/imageview.c:578 msgid "Zoom to 200%" msgstr "" #: ../src/imageview.c:580 msgid "400%" msgstr "" #: ../src/imageview.c:580 msgid "Zoom to 400%" msgstr "" #: ../src/imageview.c:582 msgid "800%" msgstr "" #: ../src/imageview.c:582 msgid "Zoom to 800%" msgstr "" #: ../src/imageview.c:584 msgid "1600%" msgstr "" #: ../src/imageview.c:584 msgid "Zoom to 1600%" msgstr "" #: ../src/iregion.c:166 #, c-format msgid "at (%d, %d), size (%d, %d)" msgstr "" #: ../src/iregion.c:181 ../src/iregion.c:223 msgid "Left" msgstr "" #: ../src/iregion.c:182 ../src/iregion.c:226 msgid "Top" msgstr "" #: ../src/iregion.c:183 ../src/iregion.c:229 msgid "Width" msgstr "" #: ../src/iregion.c:184 ../src/iregion.c:232 msgid "Height" msgstr "" #: ../src/iregion.c:223 msgid "Left edge of region" msgstr "" #: ../src/iregion.c:226 msgid "Top edge of region" msgstr "" #: ../src/iregion.c:229 msgid "Width of region" msgstr "" #: ../src/iregion.c:232 msgid "Height of region" msgstr "" #: ../src/iregion.c:237 #, c-format msgid "Edit \"%s\"" msgstr "" #: ../src/iregion.c:241 msgid "Set Region" msgstr "" #: ../src/itext.c:67 msgid "Formula" msgstr "" #: ../src/itext.c:184 ../src/itext.c:325 msgid "no value" msgstr "" #: ../src/itext.c:503 ../src/itext.c:536 msgid "Dirty value" msgstr "" #. Common menus. #. #: ../src/iwindow.c:659 msgid "_File" msgstr "" #: ../src/iwindow.c:660 msgid "_New" msgstr "" #: ../src/iwindow.c:661 ../src/mainw.c:1765 ../src/program.c:727 #: ../src/regionview.c:1016 ../src/rowview.c:586 msgid "_Edit" msgstr "" #: ../src/iwindow.c:662 msgid "_View" msgstr "" #: ../src/iwindow.c:663 msgid "_Help" msgstr "" #: ../src/iwindow.c:668 msgid "_Close" msgstr "" #: ../src/iwindow.c:669 msgid "Close" msgstr "" #: ../src/iwindow.c:673 msgid "_Quit" msgstr "" #: ../src/iwindow.c:674 msgid "Quit nip2" msgstr "" #: ../src/iwindow.c:677 msgid "_Contents" msgstr "" #: ../src/iwindow.c:678 msgid "Open the users guide" msgstr "" #: ../src/iwindow.c:682 msgid "_About" msgstr "" #: ../src/iwindow.c:683 msgid "About this program" msgstr "" #: ../src/iwindow.c:687 msgid "_Website" msgstr "" #: ../src/iwindow.c:688 msgid "Open the VIPS Homepage" msgstr "" #: lex.l:91 lex.l:101 msgid "line too long" msgstr "" #: lex.l:109 msgid "end of line inside string" msgstr "" #: lex.l:111 msgid "no end of string" msgstr "" #: lex.l:132 lex.l:142 lex.l:150 msgid "bad char constant" msgstr "" #: lex.l:175 msgid "nested comment" msgstr "" #: lex.l:181 msgid "no end of comment" msgstr "" #: lex.l:311 #, c-format msgid "bad number %s" msgstr "" #: lex.l:364 #, c-format msgid "illegal character \"%c\"" msgstr "" #: ../src/link.c:578 msgid "Circular dependency." msgstr "" #: ../src/link.c:579 #, c-format msgid "Circular dependency detected near symbol \"%s\"." msgstr "" #: ../src/main.c:116 msgid "evaluate and print EXPRESSION" msgstr "" #: ../src/main.c:119 msgid "load FILE as a set of definitions" msgstr "" #: ../src/main.c:122 msgid "write value of 'main' to FILE" msgstr "" #: ../src/main.c:124 msgid "run in batch mode" msgstr "" #: ../src/main.c:126 msgid "set values" msgstr "" #: ../src/main.c:128 msgid "verbose error output" msgstr "" #: ../src/main.c:131 msgid "don't load menu definitions" msgstr "" #: ../src/main.c:133 msgid "don't try to load command-line arguments" msgstr "" #: ../src/main.c:135 msgid "load stdin as a workspace" msgstr "" #: ../src/main.c:137 msgid "load stdin as a set of definitions" msgstr "" #: ../src/main.c:139 msgid "print value of 'main' to stdout" msgstr "" #: ../src/main.c:142 msgid "start up and shut down" msgstr "" #: ../src/main.c:145 msgid "time image save operations" msgstr "" #: ../src/main.c:148 msgid "start as if installed to PREFIX" msgstr "" #: ../src/main.c:150 msgid "output strings for internationalisation" msgstr "" #: ../src/main.c:153 msgid "print version number" msgstr "" #: ../src/main.c:156 msgid "test for errors and quit" msgstr "" #: ../src/main.c:235 #, c-format msgid "error calculating \"%s\"" msgstr "" #: ../src/main.c:243 #, c-format msgid "error saving \"%s\"" msgstr "" #: ../src/main.c:297 msgid "no \"main\" found" msgstr "" #: ../src/main.c:475 msgid "Unknown file type." msgstr "" #: ../src/main.c:476 #, c-format msgid "Unable to load \"%s\"." msgstr "" #: ../src/main.c:487 msgid "Unable to load." msgstr "" #: ../src/main.c:488 #, c-format msgid "Error loading plug-in \"%s\"." msgstr "" #: ../src/main.c:696 msgid "Next _Error" msgstr "" #: ../src/main.c:697 msgid "Ink dropper" msgstr "" #: ../src/main.c:698 msgid "D_uplicate" msgstr "" #: ../src/main.c:699 msgid "Pen" msgstr "" #: ../src/main.c:700 ../src/plot.c:94 msgid "Line" msgstr "" #: ../src/main.c:701 ../src/matrix.c:149 msgid "Text" msgstr "" #. IMAGEMODEL_TEXT #: ../src/main.c:702 ../src/paintboxview.c:259 msgid "Smudge" msgstr "" #: ../src/main.c:703 msgid "Flood" msgstr "" #: ../src/main.c:704 msgid "Flood Blob" msgstr "" #: ../src/main.c:705 msgid "Fill Rectangle" msgstr "" #: ../src/main.c:706 msgid "Pan" msgstr "" #: ../src/main.c:707 msgid "Select" msgstr "" #. And the LEDs we use. #. #: ../src/main.c:711 msgid "Red LED" msgstr "" #: ../src/main.c:712 msgid "Green LED" msgstr "" #: ../src/main.c:713 msgid "Blue LED" msgstr "" #: ../src/main.c:714 msgid "Yellow LED" msgstr "" #: ../src/main.c:715 msgid "Cyan LED" msgstr "" #: ../src/main.c:716 msgid "Off LED" msgstr "" #: ../src/main.c:895 msgid "Empty temp area" msgstr "" #: ../src/main.c:896 msgid "Many files in temp area." msgstr "" #: ../src/main.c:897 #, c-format msgid "" "The temp area \"%s\" contains %s of files. Would you like to empty the temp " "area? This will delete any workspace backups and cannot be undone." msgstr "" #: ../src/main.c:913 #, c-format msgid "unable to make %s %s: %s" msgstr "" #: ../src/main.c:1095 msgid "- image processing spreadsheet" msgstr "" #: ../src/main.c:1127 #, c-format msgid "linked to vips-%s" msgstr "" #. -1 means can't-be-set, at least on os x, so don't #. * warn. #. #: ../src/main.c:1187 #, c-format msgid "" "unable to change max file descriptors\n" "max file descriptors still set to %d" msgstr "" #: ../src/main.c:1193 msgid "unable to read max file descriptors" msgstr "" #: ../src/main.c:1417 ../src/main.c:1463 #, c-format msgid "" "Startup error log:\n" "%s" msgstr "" #: ../src/main.c:1462 msgid "Startup error." msgstr "" #: ../src/main.c:1473 #, c-format msgid "Welcome to %s-%s!" msgstr "" #: ../src/main.c:1478 #, c-format msgid "" "A new directory has been created to hold startup, data and temporary files:\n" "\n" " %s\n" "\n" "If you've used previous versions of %s, you might want to copy files over " "from your old work area." msgstr "" #: ../src/mainw.c:173 msgid "Compatibility mode." msgstr "" #: ../src/mainw.c:174 #, c-format msgid "" "This workspace was created by version %d.%d.%d. A set of compatibility menus " "have been loaded for this window." msgstr "" #: ../src/mainw.c:350 msgid "No temp area" msgstr "" #: ../src/mainw.c:356 #, c-format msgid "%s free" msgstr "" #: ../src/mainw.c:369 #, c-format msgid "%d cells free" msgstr "" #. Display select message instead. #. #: ../src/mainw.c:384 msgid "Selected:" msgstr "" #: ../src/mainw.c:414 msgid "compatibility mode" msgstr "" #: ../src/mainw.c:424 msgid "unsaved workspace" msgstr "" #. Expands to (eg.) "14GB free in /pics/tmp" #: ../src/mainw.c:607 #, c-format msgid " in \"%s\"" msgstr "" #: ../src/mainw.c:611 #, c-format msgid "%d cells in heap, %d cells free, %d cells maximum" msgstr "" #: ../src/mainw.c:615 #, c-format msgid "%d objects in workspace" msgstr "" #: ../src/mainw.c:619 #, c-format msgid "%d vips calls cached" msgstr "" #: ../src/mainw.c:623 #, c-format msgid "using %d threads" msgstr "" #: ../src/mainw.c:755 msgid "Find in workspace not implemented yet." msgstr "" #: ../src/mainw.c:763 msgid "Find again in workspace not implemented yet." msgstr "" #: ../src/mainw.c:798 msgid "No errors." msgstr "" #: ../src/mainw.c:799 msgid "There are no errors (that I can see) in this workspace." msgstr "" #: ../src/mainw.c:869 msgid "Completely recalculate?" msgstr "" #: ../src/mainw.c:1023 #, c-format msgid "" "Unable to execute:\n" " %s" msgstr "" #: ../src/mainw.c:1041 ../src/mainw.c:1074 msgid "Open File" msgstr "" #: ../src/mainw.c:1188 msgid "Recent Images" msgstr "" #: ../src/mainw.c:1196 msgid "Recent Workspaces" msgstr "" #: ../src/mainw.c:1204 msgid "Recent Matricies" msgstr "" #: ../src/mainw.c:1213 msgid "No recent items" msgstr "" #: ../src/mainw.c:1219 msgid "Clear Recent Menu" msgstr "" #: ../src/mainw.c:1279 msgid "Merge Workspace from File" msgstr "" #: ../src/mainw.c:1407 msgid "Set column name here" msgstr "" #: ../src/mainw.c:1409 msgid "Set column caption here" msgstr "" #: ../src/mainw.c:1411 msgid "New Column" msgstr "" #: ../src/mainw.c:1415 msgid "Create Column" msgstr "" #: ../src/mainw.c:1554 msgid "Revert to Defaults" msgstr "" #: ../src/mainw.c:1555 msgid "Revert to installation defaults?" msgstr "" #: ../src/mainw.c:1556 msgid "" "Would you like to reset all preferences to their factory settings? This will " "delete any changes you have ever made to your preferences and may take a few " "seconds." msgstr "" #: ../src/mainw.c:1573 msgid "Preferences" msgstr "" #: ../src/mainw.c:1578 msgid "Revert to Defaults ..." msgstr "" #. Menu items. #. #: ../src/mainw.c:1641 msgid "Open _Recent" msgstr "" #: ../src/mainw.c:1642 ../src/mainw.c:2107 msgid "Jump to _Column" msgstr "" #: ../src/mainw.c:1643 msgid "_Toolkits" msgstr "" #: ../src/mainw.c:1653 ../src/mainw.c:2104 msgid "New C_olumn" msgstr "" #: ../src/mainw.c:1654 msgid "Create a new column" msgstr "" #: ../src/mainw.c:1658 msgid "New Named C_olumn" msgstr "" #: ../src/mainw.c:1659 msgid "Create a new column with a specified name" msgstr "" #: ../src/mainw.c:1663 ../src/program.c:1669 msgid "New _Workspace" msgstr "" #: ../src/mainw.c:1664 msgid "Create a new workspace" msgstr "" #: ../src/mainw.c:1668 msgid "_Open" msgstr "" #: ../src/mainw.c:1669 msgid "Open a file" msgstr "" #: ../src/mainw.c:1673 msgid "Open _Examples" msgstr "" #: ../src/mainw.c:1674 msgid "Open example workspaces" msgstr "" #: ../src/mainw.c:1678 msgid "_Duplicate Workspace" msgstr "" #: ../src/mainw.c:1679 msgid "Duplicate workspace" msgstr "" #: ../src/mainw.c:1683 msgid "_Merge Workspace" msgstr "" #: ../src/mainw.c:1684 msgid "Merge workspace into this workspace" msgstr "" #: ../src/mainw.c:1688 msgid "_Save Workspace" msgstr "" #: ../src/mainw.c:1689 msgid "Save workspace" msgstr "" #: ../src/mainw.c:1693 msgid "_Save Workspace As" msgstr "" #: ../src/mainw.c:1694 msgid "Save workspace as" msgstr "" #: ../src/mainw.c:1698 msgid "Search for Workspace _Backups" msgstr "" #: ../src/mainw.c:1699 msgid "Load last automatically backed-up workspace" msgstr "" #: ../src/mainw.c:1703 ../src/program.c:1714 msgid "_Delete" msgstr "" #: ../src/mainw.c:1704 msgid "Delete selected items" msgstr "" #: ../src/mainw.c:1709 msgid "Select all items" msgstr "" #: ../src/mainw.c:1713 msgid "D_uplicate Selected" msgstr "" #: ../src/mainw.c:1714 msgid "Duplicate selected items" msgstr "" #: ../src/mainw.c:1718 ../src/rowview.c:596 msgid "_Recalculate" msgstr "" #: ../src/mainw.c:1719 msgid "Recalculate selected items" msgstr "" #: ../src/mainw.c:1723 ../src/mainw.c:2108 msgid "Align _Columns" msgstr "" #: ../src/mainw.c:1724 msgid "Align columns to grid" msgstr "" #: ../src/mainw.c:1728 ../src/program.c:1739 msgid "_Find" msgstr "" #: ../src/mainw.c:1729 msgid "Find in workspace" msgstr "" #: ../src/mainw.c:1733 ../src/program.c:1744 msgid "Find _Next" msgstr "" #: ../src/mainw.c:1734 msgid "Find again in workspace" msgstr "" #: ../src/mainw.c:1739 msgid "Jump to next error" msgstr "" #: ../src/mainw.c:1743 msgid "_Group" msgstr "" #: ../src/mainw.c:1744 msgid "Group selected items" msgstr "" #: ../src/mainw.c:1748 ../src/rowview.c:590 msgid "U_ngroup" msgstr "" #: ../src/mainw.c:1749 msgid "Ungroup selected items" msgstr "" #: ../src/mainw.c:1753 msgid "_Preferences" msgstr "" #: ../src/mainw.c:1754 msgid "Edit preferences" msgstr "" #: ../src/mainw.c:1759 msgid "Workspace as Grap_h" msgstr "" #: ../src/mainw.c:1760 msgid "Show a graph of workspace dependencies" msgstr "" #: ../src/mainw.c:1766 msgid "Edit toolkits" msgstr "" #: ../src/mainw.c:1772 msgid "Au_to Recalculate" msgstr "" #: ../src/mainw.c:1773 msgid "Recalculate automatically on change" msgstr "" #: ../src/mainw.c:1777 msgid "_Toolbar" msgstr "" #: ../src/mainw.c:1778 msgid "Show window toolbar" msgstr "" #: ../src/mainw.c:1782 msgid "_Statusbar" msgstr "" #: ../src/mainw.c:1783 msgid "Show window statusbar" msgstr "" #: ../src/mainw.c:1787 msgid "Toolkit _Browser" msgstr "" #: ../src/mainw.c:1788 msgid "Show toolkit browser" msgstr "" #: ../src/mainw.c:1792 msgid "Workspace _Definitions" msgstr "" #: ../src/mainw.c:1793 msgid "Show workspace definitions" msgstr "" #: ../src/mainw.c:1799 msgid "_Normal" msgstr "" #: ../src/mainw.c:1800 msgid "Normal view mode" msgstr "" #: ../src/mainw.c:1804 msgid "Show _Formula" msgstr "" #: ../src/mainw.c:1805 msgid "Show formula view mode" msgstr "" #: ../src/mainw.c:1809 msgid "No _Edits" msgstr "" #: ../src/mainw.c:1810 msgid "No edits view mode" msgstr "" #: ../src/mainw.c:2103 msgid "Workspace menu" msgstr "" #: ../src/mainw.c:2113 msgid "_Merge Workspace from File" msgstr "" #: ../src/mainw.c:2116 msgid "_Group Selected" msgstr "" #. Toolkit Browser pane. #. #: ../src/mainw.c:2125 msgid "Toolkit Browser" msgstr "" #. Workspace-local defs pane. #. #: ../src/mainw.c:2144 msgid "Workspace Definitions" msgstr "" #: ../src/matrix.c:150 msgid "Sliders" msgstr "" #: ../src/matrix.c:151 msgid "Toggle buttons" msgstr "" #: ../src/matrix.c:152 msgid "Text, plus scale and offset" msgstr "" #: ../src/matrix.c:163 msgid "Display as" msgstr "" #: ../src/matrix.c:194 #, c-format msgid "Edit Matrix \"%s\"" msgstr "" #: ../src/matrix.c:199 msgid "Set Matrix" msgstr "" #: ../src/matrix.c:265 ../src/matrixview.c:425 msgid "Scale" msgstr "" #: ../src/matrix.c:268 ../src/matrixview.c:430 msgid "Offset" msgstr "" #: ../src/matrix.c:274 msgid "Display" msgstr "" #: ../src/matrixview.c:190 ../src/matrixview.c:211 #, c-format msgid "" "Cell (%d, %d):\n" "%s" msgstr "" #. Expands to (eg) "A2: cell (1,2): 45" ... status line display during #. * matrix traverse. #. #: ../src/matrixview.c:622 #, c-format msgid ": cell (%d, %d): %s" msgstr "" #: ../src/model.c:131 #, c-format msgid "" "Unable to load from file \"%s\". Error log is:\n" "%s" msgstr "" #: ../src/model.c:420 msgid "model_save: xmlNewChild() failed" msgstr "" #: ../src/model.c:487 msgid "XML load error." msgstr "" #: ../src/model.c:488 #, c-format msgid "Can't load node of type \"%s\" into object of type \"%s\"" msgstr "" #: ../src/model.c:716 msgid "Delete?" msgstr "" #: ../src/model.c:717 #, c-format msgid "Are you sure you want to delete %s \"%s\"?" msgstr "" #: ../src/option.c:68 msgid "Labels" msgstr "" #. Create signals. #. #. Init methods. #. #: ../src/paintboxview.c:109 msgid "Paintbox bar menu" msgstr "" #: ../src/paintboxview.c:210 msgid "Clear undo history?" msgstr "" #: ../src/paintboxview.c:211 msgid "" "Are you sure you want to clear all undo and redo? This will free up memory, " "but you will no longer be able to undo or redo any of the painting you have " "done so far." msgstr "" #: ../src/paintboxview.c:246 msgid "Manipulate regions" msgstr "" #. IMAGEMODEL_SELECT #: ../src/paintboxview.c:247 msgid "Pan window" msgstr "" #. IMAGEMODEL_PAN #: ../src/paintboxview.c:248 msgid "Zoom in on mouse" msgstr "" #. IMAGEMODEL_MAGOUT #: ../src/paintboxview.c:250 msgid "Read pixel into inkwell" msgstr "" #. IMAGEMODEL_DROPPER #: ../src/paintboxview.c:251 msgid "Freehand draw " msgstr "" #. IMAGEMODEL_PEN #: ../src/paintboxview.c:252 msgid "Draw straight lines" msgstr "" #. IMAGEMODEL_LINE #: ../src/paintboxview.c:253 msgid "Fill rectangles" msgstr "" #. IMAGEMODEL_RECT #: ../src/paintboxview.c:254 msgid "Flood while pixel not equal to ink" msgstr "" #. IMAGEMODEL_FLOOD #: ../src/paintboxview.c:256 msgid "Flood while pixel equal to click" msgstr "" #. IMAGEMODEL_BLOB #: ../src/paintboxview.c:258 msgid "Draw text" msgstr "" #: ../src/paintboxview.c:309 msgid "Undo last paint action" msgstr "" #: ../src/paintboxview.c:318 msgid "Redo last paint action" msgstr "" #: ../src/paintboxview.c:327 msgid "Clear all undo and redo buffers" msgstr "" #: ../src/paintboxview.c:376 msgid "Enter text for text tool" msgstr "" #: ../src/panechild.c:108 msgid "Close the pane" msgstr "" #: parse.y:244 parse.y:255 msgid "not top level" msgstr "" #: parse.y:260 msgid "not strings" msgstr "" #: parse.y:318 msgid "left-hand-side pattern contains no identifiers" msgstr "" #: parse.y:1064 ../src/program.c:1421 msgid "Parse error." msgstr "" #: parse.y:1067 #, c-format msgid "Error in %s: %s" msgstr "" #: parse.y:1070 #, c-format msgid "Error: %s" msgstr "" #: parse.y:1183 msgid "definition is too long" msgstr "" #: parse.y:1607 msgid "no leading identifier" msgstr "" #: parse.y:1613 msgid "'=' missing" msgstr "" #: parse.y:1643 msgid "identifier expected" msgstr "" #: parse.y:1653 #, c-format msgid "'%s' does not exist" msgstr "" #: parse.y:1655 #, c-format msgid "'%s' has no members" msgstr "" #: parse.y:1670 msgid "'.' or '=' expected" msgstr "" #. Not found? Maybe - error message anyway. #. #: ../src/path.c:332 ../src/path.c:360 ../src/program.c:1440 #: ../src/program.c:1492 ../src/program.c:1514 ../src/program.c:1522 #: ../src/symbol.c:502 msgid "Not found." msgstr "" #: ../src/path.c:333 #, c-format msgid "File \"%s\" not found." msgstr "" #: ../src/path.c:361 #, c-format msgid "File \"%s\" not found on path" msgstr "" #: ../src/pathnameview.c:173 msgid "Select a new file name" msgstr "" #: ../src/plot.c:80 msgid "YYYY" msgstr "" #: ../src/plot.c:81 msgid "XYYY" msgstr "" #: ../src/plot.c:82 msgid "XYXY" msgstr "" #: ../src/plot.c:93 msgid "Point" msgstr "" #: ../src/plot.c:95 msgid "Spline" msgstr "" #: ../src/plot.c:96 msgid "Bar" msgstr "" #: ../src/plot.c:141 msgid "More than one column needed or XY plots" msgstr "" #: ../src/plot.c:151 msgid "Even number of columns only for XY format plots" msgstr "" #: ../src/plot.c:316 msgid "Format" msgstr "" #: ../src/plot.c:319 msgid "Style" msgstr "" #: ../src/plot.c:322 msgid "Xmin" msgstr "" #: ../src/plot.c:325 msgid "Xmax" msgstr "" #: ../src/plot.c:328 msgid "Ymin" msgstr "" #: ../src/plot.c:331 msgid "Ymax" msgstr "" #: ../src/plot.c:337 msgid "Options" msgstr "" #: ../src/plot.c:361 msgid "1xn or nx1 images only for Plot" msgstr "" #: ../src/plot.c:380 msgid "Unable to prepare image." msgstr "" #: ../src/plot.c:393 msgid "1xn or nx1 images only" msgstr "" #. Create signals. #. #. Init methods. #. #: ../src/plotstatus.c:99 ../src/statusview.c:108 msgid "Status bar menu" msgstr "" #: ../src/plotstatus.c:190 ../src/statusview.c:223 ../src/statusview.c:226 msgid "Magnification" msgstr "" #. Probably failed to load prefs on startup for some reason. #. #: ../src/prefs.c:207 msgid "Unable to display preferences." msgstr "" #: ../src/prefs.c:208 #, c-format msgid "" "No preferences workspace was found. Preferences probably failed to load when " "%s started." msgstr "" #: ../src/program.c:73 msgid "Edit window" msgstr "" #: ../src/program.c:263 ../src/workspacedefs.c:108 msgid "modified" msgstr "" #: ../src/program.c:625 msgid "Menu item text" msgstr "" #: ../src/program.c:628 msgid "Load column from this file" msgstr "" #: ../src/program.c:630 #, c-format msgid "Edit Column Item \"%s\"" msgstr "" #: ../src/program.c:635 msgid "Set column item" msgstr "" #: ../src/program.c:656 ../src/program.c:662 msgid "Unable to save." msgstr "" #: ../src/program.c:657 msgid "You can only save toolkits, not tools." msgstr "" #: ../src/program.c:663 msgid "You can't save auto-generated toolkits." msgstr "" #. Create signals. #. #. Init methods. #. #: ../src/program.c:726 msgid "Toolkit menu" msgstr "" #: ../src/program.c:1093 msgid "Set toolkit name here" msgstr "" #: ../src/program.c:1095 msgid "Set toolkit caption here" msgstr "" #: ../src/program.c:1096 msgid "New Toolkit" msgstr "" #: ../src/program.c:1100 ../src/program.c:1178 msgid "Create" msgstr "" #: ../src/program.c:1111 msgid "Nothing selected." msgstr "" #: ../src/program.c:1112 msgid "No toolkit selected." msgstr "" #: ../src/program.c:1171 msgid "Display this name" msgstr "" #: ../src/program.c:1173 msgid "Load this file" msgstr "" #: ../src/program.c:1241 msgid "Load Definition" msgstr "" #: ../src/program.c:1295 msgid "Reload" msgstr "" #: ../src/program.c:1296 msgid "Reload startup objects?" msgstr "" #: ../src/program.c:1297 msgid "" "Would you like to reload all startup menus, workspaces and plugins now? This " "may take a few seconds." msgstr "" #: ../src/program.c:1379 msgid "No tool selected" msgstr "" #: ../src/program.c:1422 msgid "Bad regular expression." msgstr "" #: ../src/program.c:1441 #, c-format msgid "No match found for \"%s\"." msgstr "" #: ../src/program.c:1454 msgid "Find in all Toolkits" msgstr "" #: ../src/program.c:1464 msgid "Enter search string here" msgstr "" #: ../src/program.c:1515 #, c-format msgid "No top-level symbol called \"%s\"." msgstr "" #: ../src/program.c:1523 #, c-format msgid "Symbol \"%s\" has no tool inforation." msgstr "" #: ../src/program.c:1544 msgid "Go to definition of this symbol" msgstr "" #: ../src/program.c:1546 msgid "Go to Definition" msgstr "" #: ../src/program.c:1576 msgid "Object information." msgstr "" #: ../src/program.c:1627 msgid "No documentation available." msgstr "" #: ../src/program.c:1628 msgid "" "On-line documentation is only currently available for VIPS functions and nip " "builtins." msgstr "" #: ../src/program.c:1644 msgid "New _Tool" msgstr "" #: ../src/program.c:1645 msgid "Make a new tool" msgstr "" #: ../src/program.c:1649 msgid "New Tool_kit" msgstr "" #: ../src/program.c:1650 msgid "Make a new toolkit" msgstr "" #: ../src/program.c:1654 msgid "New _Separator" msgstr "" #: ../src/program.c:1655 msgid "Make a new separator" msgstr "" #: ../src/program.c:1659 msgid "New _Column Item" msgstr "" #: ../src/program.c:1660 msgid "Make a new column item" msgstr "" #: ../src/program.c:1664 msgid "New _Program Window" msgstr "" #: ../src/program.c:1665 msgid "Make a new program window" msgstr "" #: ../src/program.c:1670 msgid "Make a new workspace" msgstr "" #: ../src/program.c:1674 msgid "_Open Toolkit" msgstr "" #: ../src/program.c:1675 msgid "_Open toolkit" msgstr "" #: ../src/program.c:1679 msgid "Save Toolkit" msgstr "" #: ../src/program.c:1680 msgid "_Save toolkit" msgstr "" #: ../src/program.c:1684 msgid "Save Toolkit _As" msgstr "" #: ../src/program.c:1685 msgid "Save toolkit as" msgstr "" #: ../src/program.c:1689 msgid "_Process" msgstr "" #: ../src/program.c:1690 msgid "Process text" msgstr "" #: ../src/program.c:1694 msgid "_Reload All Toolkits" msgstr "" #: ../src/program.c:1695 msgid "Remove and reload all startup data" msgstr "" #: ../src/program.c:1699 msgid "C_ut" msgstr "" #: ../src/program.c:1700 msgid "Cut selected text" msgstr "" #: ../src/program.c:1704 msgid "_Copy" msgstr "" #: ../src/program.c:1705 msgid "Copy selected text" msgstr "" #: ../src/program.c:1709 msgid "_Paste" msgstr "" #: ../src/program.c:1710 msgid "Paste selected text" msgstr "" #: ../src/program.c:1715 msgid "Delete selected text" msgstr "" #: ../src/program.c:1720 msgid "Select all text" msgstr "" #: ../src/program.c:1724 msgid "Dese_lect All" msgstr "" #: ../src/program.c:1725 msgid "Deselect all text" msgstr "" #: ../src/program.c:1729 msgid "Delete _Tool" msgstr "" #: ../src/program.c:1730 msgid "Delete current tool" msgstr "" #: ../src/program.c:1734 msgid "Delete Tool_kit" msgstr "" #: ../src/program.c:1735 msgid "Delete current toolkit" msgstr "" #: ../src/program.c:1740 msgid "Find text in toolkits" msgstr "" #: ../src/program.c:1745 msgid "Find text again" msgstr "" #: ../src/program.c:1749 msgid "_Jump To Definition" msgstr "" #: ../src/program.c:1750 msgid "Jump to definition" msgstr "" #: ../src/program.c:1754 msgid "_Info" msgstr "" #: ../src/program.c:1755 msgid "Info on selected object" msgstr "" #: ../src/program.c:1759 msgid "_Trace" msgstr "" #: ../src/program.c:1760 msgid "Make a new trace window" msgstr "" #: ../src/program.c:1764 msgid "_Errors" msgstr "" #: ../src/program.c:1765 msgid "Show all errors" msgstr "" #: ../src/program.c:1769 msgid "Help on _Tool" msgstr "" #: ../src/program.c:1770 msgid "View docs for this tool" msgstr "" #: ../src/program.c:2015 msgid "Bad drag." msgstr "" #: ../src/program.c:2017 msgid "" "Sorry, you can only drag tools between toolkits. You can't reorder toolkits, " "you can't nest toolkits and you can't drag tools to the top level." msgstr "" #: ../src/program.c:2196 msgid "Tool" msgstr "" #: ../src/progress.c:120 msgid "Cancelling" msgstr "" #: ../src/progress.c:153 #, c-format msgid "%d minute left" msgid_plural "%d minutes left" msgstr[0] "" msgstr[1] "" #: ../src/progress.c:158 #, c-format msgid "%d second left" msgid_plural "%d seconds left" msgstr[0] "" msgstr[1] "" #: ../src/progress.c:179 msgid "Calculating" msgstr "" #: ../src/progress.c:198 msgid "Loading" msgstr "" #: ../src/reduce.c:135 msgid "Typecheck error." msgstr "" #: ../src/reduce.c:137 #, c-format msgid "%s expected %s, instead saw:" msgstr "" #: ../src/reduce.c:148 ../src/reduce.c:1056 ../src/trace.c:126 #: ../src/workspace.c:1704 msgid "Overflow error." msgstr "" #: ../src/reduce.c:149 #, c-format msgid "%s too long." msgstr "" #: ../src/reduce.c:532 ../src/reduce.c:597 msgid "Not rectangular." msgstr "" #: ../src/reduce.c:533 ../src/reduce.c:598 #, c-format msgid "" "Matrix of real is not rectangular. Found row of length %d, should be %d." msgstr "" #: ../src/reduce.c:557 msgid "Zero dimension." msgstr "" #: ../src/reduce.c:558 #, c-format msgid "Matrix has width %d, height %d." msgstr "" #: ../src/reduce.c:850 msgid "List length" msgstr "" #: ../src/reduce.c:899 #, c-format msgid "List index must be positive, not %d" msgstr "" #: ../src/reduce.c:907 msgid "List index" msgstr "" #: ../src/reduce.c:912 #, c-format msgid "List only has %d elements, unable to get element %d." msgstr "" #: ../src/reduce.c:955 msgid "No arguments allowed." msgstr "" #: ../src/reduce.c:956 #, c-format msgid "Object \"%s\" should have no arguments." msgstr "" #: ../src/reduce.c:1057 msgid "C stack overflow. Expression too complex." msgstr "" #: ../src/reduce.c:1073 msgid "Cancelled." msgstr "" #: ../src/reduce.c:1074 msgid "Evaluation cancelled." msgstr "" #: ../src/reduce.c:1169 msgid "No value." msgstr "" #: ../src/reduce.c:1170 #, c-format msgid "Symbol \"%s\" has no value." msgstr "" #: ../src/reduce.c:1645 ../src/reduce.c:1650 ../src/reduce.c:1656 msgid "List generator" msgstr "" #: ../src/reduce.h:75 ../src/reduce.h:105 msgid "Stack overflow." msgstr "" #: ../src/reduce.h:76 msgid "Spine stack overflow, runaway recursion?" msgstr "" #: ../src/reduce.h:106 msgid "Frame stack overflow, expression too complex." msgstr "" #: ../src/reduce.h:119 ../src/reduce.h:131 msgid "Stack underflow." msgstr "" #: ../src/reduce.h:120 msgid "Frame stack underflow, you've found a bug!" msgstr "" #: ../src/reduce.h:132 msgid "Spine stack underflow, you've found a bug!" msgstr "" #: ../src/regionview.c:935 ../src/rowview.c:302 msgid "Can't duplicate." msgstr "" #: ../src/regionview.c:937 msgid "You can only duplicate top level regions." msgstr "" #: ../src/regionview.c:979 msgid "Can't delete." msgstr "" #: ../src/regionview.c:980 msgid "You can only delete top level regions." msgstr "" #: ../src/regionview.c:989 msgid "Delete Region?" msgstr "" #: ../src/regionview.c:990 #, c-format msgid "Are you sure you want to delete Region \"%s\"?" msgstr "" #. Other init. #. #: ../src/regionview.c:1015 msgid "Region menu" msgstr "" #: ../src/row.c:288 msgid "Error in row." msgstr "" #. Elements are name of row, principal error, #. * secondary error. #. #: ../src/row.c:292 #, c-format msgid "" "Error in row %s: %s\n" "%s" msgstr "" #. Expands to eg. "B1 refers to: B2, B3". #. #: ../src/row.c:497 msgid "refers to" msgstr "" #. Expands to eg. "B1 is referred to by: B2, B3". #. #: ../src/row.c:508 msgid "is referred to by" msgstr "" #: ../src/row.c:521 msgid "is blocked on" msgstr "" #: ../src/rowview.c:304 msgid "You can only duplicate top level rows." msgstr "" #: ../src/rowview.c:457 msgid "Drag between columns not yet implemented." msgstr "" #. Other init. #. #: ../src/rowview.c:585 msgid "Row menu" msgstr "" #: ../src/rowview.c:594 ../src/workspacedefs.c:262 msgid "Replace From _File" msgstr "" #: ../src/rowview.c:598 msgid "Re_set" msgstr "" #: ../src/rowview.c:664 msgid "Click to open or close class" msgstr "" #: ../src/slider.c:51 msgid "From" msgstr "" #: ../src/slider.c:54 msgid "To" msgstr "" #: ../src/spin.c:223 msgid "Expand or collapse row" msgstr "" #: ../src/symbol.c:503 #, c-format msgid "Symbol %s is not defined." msgstr "" #: ../src/symbol.c:507 #, c-format msgid "%s is referred to by" msgstr "" #: ../src/symbol.c:721 #, c-format msgid "Redefinition of \"%s\"." msgstr "" #: ../src/symbol.c:725 #, c-format msgid "Previously defined at line %d." msgstr "" #: ../src/symbol.c:748 #, c-format msgid "Attempt to redefine root symbol \"%s\"." msgstr "" #. Parameter, workspace, etc. #. #: ../src/symbol.c:773 #, c-format msgid "Can't redefine %s \"%s\"." msgstr "" #. used as in "fred refers to undefined symbol jim" #. #: ../src/tool.c:75 msgid "refers to undefined symbol" msgstr "" #: ../src/tool.c:868 #, c-format msgid "" "Can't create dialog with name \"%s\", an object with that name already " "exists in kit \"%s\"." msgstr "" #: ../src/toolkitbrowser.c:242 msgid "Search:" msgstr "" #: ../src/toolkitbrowser.c:267 msgid "Action" msgstr "" #: ../src/toolkitbrowser.c:275 msgid "Parameters" msgstr "" #: ../src/toolkitbrowser.c:283 msgid "Menu Item" msgstr "" #: ../src/toolkitgroup.c:139 #, c-format msgid "Toolkits for %s" msgstr "" #: ../src/trace.c:127 msgid "Trace buffer stack overflow." msgstr "" #: ../src/trace.c:231 msgid "Clear trace window" msgstr "" #: ../src/trace.c:237 msgid "_Operators" msgstr "" #: ../src/trace.c:238 msgid "trace operators" msgstr "" #: ../src/trace.c:242 msgid "_Builtin Functions" msgstr "" #: ../src/trace.c:243 msgid "trace calls to built in functions" msgstr "" #: ../src/trace.c:247 msgid "_Class Construction" msgstr "" #: ../src/trace.c:248 msgid "trace class constructors" msgstr "" #: ../src/trace.c:252 msgid "_VIPS Operations" msgstr "" #: ../src/trace.c:253 msgid "trace calls to VIPS" msgstr "" #: ../src/trace.c:331 msgid "Trace" msgstr "" #: ../src/tslider.c:369 msgid "Slider value ... edit!" msgstr "" #: ../src/tslider.c:390 msgid "Left-drag to set number" msgstr "" #: ../src/util.c:211 msgid "Unable to set XML property." msgstr "" #: ../src/util.c:212 #, c-format msgid "Unable to set property \"%s\" to value \"%s\"." msgstr "" #: ../src/util.c:830 msgid "(no image)" msgstr "" #: ../src/util.c:844 #, c-format msgid "%dx%d %s, %d band, %s" msgid_plural "%dx%d %s, %d bands, %s" msgstr[0] "" msgstr[1] "" #: ../src/util.c:1257 msgid "8-bit unsigned integer" msgstr "" #. IM_BANDFMT_UCHAR #: ../src/util.c:1258 msgid "8-bit signed integer" msgstr "" #. IM_BANDFMT_CHAR #: ../src/util.c:1259 msgid "16-bit unsigned integer" msgstr "" #. IM_BANDFMT_USHORT #: ../src/util.c:1260 msgid "16-bit signed integer" msgstr "" #. IM_BANDFMT_SHORT #: ../src/util.c:1261 msgid "32-bit unsigned integer" msgstr "" #. IM_BANDFMT_UINT #: ../src/util.c:1262 msgid "32-bit signed integer" msgstr "" #. IM_BANDFMT_INT #: ../src/util.c:1263 msgid "32-bit float" msgstr "" #. IM_BANDFMT_FLOAT #: ../src/util.c:1264 msgid "64-bit complex" msgstr "" #. IM_BANDFMT_COMPLEX #: ../src/util.c:1265 msgid "64-bit float" msgstr "" #. IM_BANDFMT_DOUBLE #: ../src/util.c:1266 msgid "128-bit complex" msgstr "" #: ../src/util.c:1274 msgid "" msgstr "" #: ../src/util.c:1316 msgid "" msgstr "" #: ../src/util.c:1340 msgid "directory" msgstr "" #: ../src/util.c:1599 msgid "Unable to find install area." msgstr "" #: ../src/util.c:1775 msgid "" msgstr "" #: ../src/util.c:1933 msgid "Filename is too long." msgstr "" #: ../src/util.c:1939 msgid "Filename contains only blank characters." msgstr "" #: ../src/util.c:2002 ../src/util.c:2011 ../src/util.c:2066 msgid "Unable to open." msgstr "" #: ../src/util.c:2003 ../src/util.c:2012 #, c-format msgid "" "Unable to open file \"%s\" for reading.\n" "%s." msgstr "" #: ../src/util.c:2067 #, c-format msgid "" "Unable to open file \"%s\" for writing.\n" "%s." msgstr "" #: ../src/util.c:2088 msgid "Unable to write." msgstr "" #: ../src/util.c:2089 #, c-format msgid "" "Unable to write to file \"%s\".\n" "%s." msgstr "" #: ../src/util.c:2124 ../src/util.c:2137 ../src/util.c:2162 msgid "Unable to read." msgstr "" #: ../src/util.c:2125 #, c-format msgid "File \"%s\" too large." msgstr "" #: ../src/util.c:2138 ../src/util.c:2163 #, c-format msgid "" "Unable to read from file \"%s\".\n" "%s." msgstr "" #. File length unit. #. #: ../src/util.c:2454 msgid "bytes" msgstr "" #. Kilo byte unit. #. #: ../src/util.c:2458 msgid "KB" msgstr "" #. Mega byte unit. #. #: ../src/util.c:2462 msgid "MB" msgstr "" #. Giga byte unit. #. #: ../src/util.c:2466 msgid "GB" msgstr "" #. Tera byte unit. #. #: ../src/util.c:2470 msgid "TB" msgstr "" #: ../src/util.c:2513 msgid "Unable to create temporary file." msgstr "" #: ../src/util.c:2514 #, c-format msgid "" "Unable to make file \"%s\"\n" "%s" msgstr "" #: ../src/util.c:2721 msgid "Out of memory." msgstr "" #: ../src/util.c:2722 #, c-format msgid "Request for %s of RAM triggered memory allocation failure." msgstr "" #: ../src/vipsobject.c:94 msgid "No such type." msgstr "" #: ../src/vipsobject.c:95 #, c-format msgid "Type \"%s\" not found as a subclass of VipsObject." msgstr "" #: ../src/vipsobject.c:126 #, c-format msgid "No more than %d arguments allowed." msgstr "" #: ../src/vipsobject.c:253 msgid "Wrong number of required arguments." msgstr "" #: ../src/vipsobject.c:254 #, c-format msgid "Operation \"%s\" has %d required arguments, you supplied %d." msgstr "" #: ../src/vipsobject.c:285 msgid "Unable to build object." msgstr "" #: ../src/workspace.c:156 msgid "No objects selected." msgstr "" #: ../src/workspace.c:157 ../src/workspace.c:162 msgid "Select exactly one object and try again." msgstr "" #: ../src/workspace.c:161 msgid "More than one object selected." msgstr "" #: ../src/workspace.c:791 ../src/workspace.c:799 msgid "No backup workspaces found." msgstr "" #: ../src/workspace.c:793 msgid "" "You need to enable \"Auto workspace save\" in Preferences before automatic " "recovery works." msgstr "" #: ../src/workspace.c:800 #, c-format msgid "No suitable workspace save files found in \"%s\"" msgstr "" #: ../src/workspace.c:816 msgid "Open workspace backup?" msgstr "" #: ../src/workspace.c:817 #, c-format msgid "" "Found workspace \"%s\", dated %s. Do you want to recover this workspace?" msgstr "" #: ../src/workspace.c:1327 msgid "Version mismatch." msgstr "" #: ../src/workspace.c:1328 #, c-format msgid "" "File \"%s\" was saved from %s-%d.%d.%d. You may see compatibility problems." msgstr "" #: ../src/workspace.c:1485 msgid "// private definitions for this workspace\n" msgstr "" #: ../src/workspace.c:1530 #, c-format msgid "Can't create workspace \"%s\". A symbol with that name already exists." msgstr "" #: ../src/workspace.c:1621 msgid "Default empty workspace" msgstr "" #: ../src/workspace.c:1694 #, c-format msgid "%s needs %d arguments, there are %d selected." msgstr "" #: ../src/workspace.c:1705 msgid "Too many names selected." msgstr "" #: ../src/workspace.c:1845 msgid "You can only remove top level rows." msgstr "" #: ../src/workspace.c:1846 msgid "Not all selected objects are top level rows." msgstr "" #: ../src/workspace.c:1896 msgid "Delete selected objects?" msgstr "" #: ../src/workspace.c:1897 #, c-format msgid "Are you sure you want to delete %s?" msgstr "" #: ../src/workspace.c:1955 msgid "Unable to ungroup." msgstr "" #: ../src/workspace.c:1956 #, c-format msgid "Row \"%s\" is not a Group or a list." msgstr "" #: ../src/workspacedefs.c:97 #, c-format msgid "%d definition" msgid_plural "%d definitions" msgstr[0] "" msgstr[1] "" #: ../src/workspacedefs.c:103 msgid "errors" msgstr "" #: ../src/workspacedefs.c:181 msgid "Replace Definition From File" msgstr "" #: ../src/workspacedefs.c:261 msgid "Workspace definitions" msgstr "" #: ../src/workspacedefs.c:282 msgid "Process" msgstr "" #: ../src/workspacegroup.c:146 #, c-format msgid "" "Can't create workspacegroup \"%s\". A symbol with that name already exists." msgstr "" #: ../src/workspacegroup.c:213 msgid "Set workspace name here" msgstr "" #: ../src/workspacegroup.c:215 msgid "Set workspace caption here" msgstr "" #: ../src/workspacegroup.c:217 msgid "New Workspace" msgstr "" #: ../src/workspacegroup.c:221 msgid "Create Workspace" msgstr "" nip2-8.7.0/AUTHORS0000644000175000017500000000021413224651032010362 00000000000000Authors of nip2 John Cupitt Joe Padfield Hans Breuer Rich Lott Leo Davidson Plus helpful comments and suggestions from many others. nip2-8.7.0/share/0000755000175000017500000000000013350464160010503 500000000000000nip2-8.7.0/share/Makefile.in0000644000175000017500000004627113350464104012500 00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = share ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BISON = @BISON@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DLLWRAP = @DLLWRAP@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FFTW3_CFLAGS = @FFTW3_CFLAGS@ FFTW3_LIBS = @FFTW3_LIBS@ FGREP = @FGREP@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_LIBS = @GSL_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ IP_CFLAGS = @IP_CFLAGS@ IP_LIBS = @IP_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBGOFFICE_CFLAGS = @LIBGOFFICE_CFLAGS@ LIBGOFFICE_LIBS = @LIBGOFFICE_LIBS@ LIBGSF_CFLAGS = @LIBGSF_CFLAGS@ LIBGSF_LIBS = @LIBGSF_LIBS@ LIBGVC_CFLAGS = @LIBGVC_CFLAGS@ LIBGVC_LIBS = @LIBGVC_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ 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@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ REQUIRED_PACKAGES_CFLAGS = @REQUIRED_PACKAGES_CFLAGS@ REQUIRED_PACKAGES_LIBS = @REQUIRED_PACKAGES_LIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOP_SRCDIR = @TOP_SRCDIR@ UPDATE_DESKTOP_DATABASE = @UPDATE_DESKTOP_DATABASE@ UPDATE_MIME_DATABASE = @UPDATE_MIME_DATABASE@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XDG_OPEN = @XDG_OPEN@ XGETTEXT = @XGETTEXT@ 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@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = nip2 all: all-recursive .SUFFIXES: $(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) --foreign share/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign share/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): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-libtool cscopelist-am ctags \ ctags-am distclean distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: nip2-8.7.0/share/nip2/0000755000175000017500000000000013350464160011353 500000000000000nip2-8.7.0/share/nip2/data/0000755000175000017500000000000013350464160012264 500000000000000nip2-8.7.0/share/nip2/data/stock-led-red-18.png0000644000175000017500000000071513224651032015574 00000000000000‰PNG  IHDRVÎŽW”IDAT8­Ô=‹QÆñŸID°K°X»…€UÊõøR¥Œ½Ý¶6~×.Av ‹° ¢ Vö©¬%!Édgœh1çf¯!b³î™;sþ÷™sÏ 74ní[¼¤_3¬ôÖX0]2™3>áËAßxÛfT£jÖ˜Gü³‰O_óòŸ ïœpÜŠëehŽYÌIKÎßð$å¶s'wyvháw¸ú•é*Ö®xðˆîW>ˆç]Òo3já6îãNÄí|·,×£ô·×5Û¨Ç eì\‡ÒHñ&T3„NÜT(‚œ EÌU¬åÐ >Ø‚–ôÒj™Ùcß,‡V‘ÛI )9Õ$=¸Y\fJÎ:š]§5‡¹(A–‘¼œæ¯6©8,4§•ƒÊ V¬ø8µµdJqˆWÏÆùÈgÕʨ,è«ß \e8ÃnG·Ó©KÓ<w öñ€šc›l5Êä±q>kNíȱyÞ,S8¥Áífã—Ε'IˆUVÙ/³¿4¸õ£âüo€áâ…Ó'abþOÁ‹¸sóÆ%3Ó-pöª¸ë1«’ßyRµ…¹pò}6\½2&Ûµuœ+¾?{‹·iÇóè V(¢o±ì×cq„²à$‚:QU¥°?Ä Vœ’Ýa\7 #:Ç¿±ï™ ªn"IEND®B`‚nip2-8.7.0/share/nip2/data/stock-alert-22.png0000644000175000017500000000131613224651032015360 00000000000000‰PNG  IHDRÄ´l; pHYsèèµ{Rk€IDAT8Í•ÏKTQÇ?çÞygœ²@RŒ ²(¢E‘µª…Eä&Ú íjU«vÑ*úÚJ´,HraET(!¢AŠCMþ(ÅyofÞiáhãÌ<ÍEÐ ÷ÝsÎ÷{î÷¾{.ü#“œ\¨‡@ qQJ¶iÆ6H÷8w~ zsªŸóªs¡êü¬êäû xqÏûëDšdƒâÖX·s§>ÁËPµªZˆ³ª#w¼¿üWà7½¿ðMu¬(êì´¨»Û¦¦5ë ª3¼¿µ.è9çMªW&æU-jo·8›5+¬ÐÓca:½ü—ê÷;Þ_ª,Û­L2àoy»W’ €x¿<¤v× Í7œ»»GdK ðQ‘=§E.ÖÛ‰-.B.Q_¿.UÙ^‘#WœëZ¡u媤ùÍu5Ê籩)la›ž®¤‹œ Ê¿å 0'D“tºÅ"62óóX6›Ì~‘ƒ¾­Ïclt›˜€¥¥Ä0ƒ†•ùªÆÓf³‰ccÄ}}Ï'†`nÆ1įÌHº¢fËŽ\n]îa³·¡¬À;³‘%˜ÊÀn£Jì;H=x­­Øø868XZ‚¥¾8î/”‹[•â‹ÙLo©ôˆkNPZ[‘æfp®Ú ÀG³§ýqü¡®³¶ŽÁ‹š¾N[tò¤E]]f2ÖƒÀBU›Q<ãÜ®uuÚcA0¸AZmDßT§¯9×þW-n»HðÄûû9Õ©¼jT ˜W-ýT{J=>$R÷R%)ÈA‘¶«Îu9¾Md§‹Ì~ ™ =3{þ&ŽÇ¡¸)àJk„”-A´ù§ã·ß]È7K¡=IEND®B`‚nip2-8.7.0/share/nip2/data/stock-tool-smudge-22.png0000644000175000017500000000163713224651032016516 00000000000000‰PNG  IHDRÄ´l;bKGDÿÿÿ ½§“TIDATxÚÕ•ßkUÇ?3³3»IH›ÖÆbZh[Á‹ˆ…T„J±J¥-ÅŠEIc%"Šô°hÁ·@P*”"¨¨éCmèK`KÜ]ÚÙ˜lv³³›ý=™ÎÜÝñåNجÛb|óÀ…™9÷|8÷œï¹ÿ7SþCŒl7ãÑ’ér\§&<Ïk¾m;<>ø¬­Ú ÔÇŒG« ©txç®Ý®Sëö<±ÉqÜ+gåo'ÿ*œý°Ìêýš7Lä2ó>P·+EÏw¬ÌÎ$ªÛ·=”Íå ‹ËËË ³w’Ö;#ï/bÀÔîͦ’tv÷PÈÎ+šRµ®áΈ޹JoBô,¤·œ|ûÝ^àsÀ’PPZÁ}ýýý¿ÍÆ~çã3gØ÷ؽÛvQʧ±WÅõ\Õˆluwár¥ÚñÒ+ǺSÀÍP@U[À©DlšÏÎ}Êï 36~+u›-};1B C§~· €B—òKÊ“k¬Êð‰ãÇøò‹sœ9{–©ëWس—›z˜ºù+ÀŒG©Tk!‚°dƾŽ:à·f|iòêuŠÖ"—¯\å‰'ŸâÏxl˜çy¤3Vð:ä²ZŽv::tðÀÄðð0;ÞÁä/—@QØûÈn¶>ØK©T!9—äàá×F€) €Šœ¼†Úl¥³yÝ3Àµ×øöû)‹X¹`UéóššÖkÍ]¡¥½Ü’A–=p›|& ·mž&øMjS"Í>ÚÕUYç¯Kiø÷ üxz£÷*#IEND®B`‚nip2-8.7.0/share/nip2/data/stock-tool-rect-select-22.png0000644000175000017500000000030413224651032017432 00000000000000‰PNG  IHDRÄ´l;bKGDÿÿÿ ½§“yIDATxÚí”1 À ×&àgíò„TêÏòˆ{ÈZåRæ‚E‚‚r0,{ 0¹pêN Y®Žž¾›ó&N)íÖ„"‚ãÑœk·’È9#„pÝždO¾Œê¸‹UGö…)ÇøÄm»oÐŽÙñ_:ðƳ鎇}B“Sµ;Wÿ~4>IEND®B`‚nip2-8.7.0/share/nip2/data/Makefile.in0000644000175000017500000004052613350464104014256 00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = share/nip2/data ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(nipdatadir)" DATA = $(nipdata_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BISON = @BISON@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DLLWRAP = @DLLWRAP@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FFTW3_CFLAGS = @FFTW3_CFLAGS@ FFTW3_LIBS = @FFTW3_LIBS@ FGREP = @FGREP@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_LIBS = @GSL_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ IP_CFLAGS = @IP_CFLAGS@ IP_LIBS = @IP_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBGOFFICE_CFLAGS = @LIBGOFFICE_CFLAGS@ LIBGOFFICE_LIBS = @LIBGOFFICE_LIBS@ LIBGSF_CFLAGS = @LIBGSF_CFLAGS@ LIBGSF_LIBS = @LIBGSF_LIBS@ LIBGVC_CFLAGS = @LIBGVC_CFLAGS@ LIBGVC_LIBS = @LIBGVC_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ 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@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ REQUIRED_PACKAGES_CFLAGS = @REQUIRED_PACKAGES_CFLAGS@ REQUIRED_PACKAGES_LIBS = @REQUIRED_PACKAGES_LIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOP_SRCDIR = @TOP_SRCDIR@ UPDATE_DESKTOP_DATABASE = @UPDATE_DESKTOP_DATABASE@ UPDATE_MIME_DATABASE = @UPDATE_MIME_DATABASE@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XDG_OPEN = @XDG_OPEN@ XGETTEXT = @XGETTEXT@ 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@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ nipdatadir = $(pkgdatadir)/data nipdata_DATA = \ rachel.con \ AdobeRGB1998.icc \ sRGB.icm \ macbeth_lab_d65.mat \ macbeth_lab_d50.mat \ vips-128.png \ nip2-icon.ico \ cmyk.icm \ stock-tool-ink-22.png \ stock-tool-path-22.png \ stock-tool-text-22.png \ stock-tool-smudge-22.png \ stock-tool-bucket-fill-22.png \ stock-tool-rect-select-22.png \ stock-tool-select-22.png \ stock-padlock-closed-22.png \ stock-alert-22.png \ nip-slider-16.png \ stock-tool-move-22.png \ stock-led-red-18.png \ stock-led-green-18.png \ stock-led-blue-18.png \ stock-led-cyan-18.png \ stock-led-yellow-18.png \ stock-led-off-18.png EXTRA_DIST = \ $(nipdata_DATA) \ examples all: all-am .SUFFIXES: $(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) --foreign share/nip2/data/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign share/nip2/data/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): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-nipdataDATA: $(nipdata_DATA) @$(NORMAL_INSTALL) @list='$(nipdata_DATA)'; test -n "$(nipdatadir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(nipdatadir)'"; \ $(MKDIR_P) "$(DESTDIR)$(nipdatadir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(nipdatadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(nipdatadir)" || exit $$?; \ done uninstall-nipdataDATA: @$(NORMAL_UNINSTALL) @list='$(nipdata_DATA)'; test -n "$(nipdatadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(nipdatadir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: 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 check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(nipdatadir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-nipdataDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) install-exec-hook install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-nipdataDATA @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) uninstall-hook .MAKE: install-am install-exec-am install-strip uninstall-am .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool 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-exec-hook \ install-html install-html-am install-info install-info-am \ install-man install-nipdataDATA install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \ uninstall-am uninstall-hook uninstall-nipdataDATA .PRECIOUS: Makefile install-exec-hook: rm -rf $(DESTDIR)$(nipdatadir)/examples $(mkinstalldirs) $(DESTDIR)$(nipdatadir)/examples cp -r ${top_srcdir}/share/nip2/data/examples/* $(DESTDIR)$(nipdatadir)/examples uninstall-hook: # make sure we have write permission for 'rm' chmod -R u+w ${DESTDIR}$(nipdatadir)/examples ${RM} -rf ${DESTDIR}$(nipdatadir)/examples # 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: nip2-8.7.0/share/nip2/data/cmyk.icm0000644000175000017500000352615413224651032013655 00000000000000¬largl prtrCMYKLab Þ (5acspMSFTöÖÓ-argldesc8icprt¤gwtpt bkpt clrt4¤A2B1ØÑúA2B0ØÑúA2B2ØÑúB2A1ÔÔѼB2A0¦Ñ¼B2A2xLѼgamtJ.–targx  3ËDevDx  3ËCIEDx  3ËdescChemical prooftextCreated by Graeme W. Gill. Released into the public domain. No Warranty, Use at your own risk.XYZ áÊéŠÃQXYZ $: clrtCyanx[7KMagenta…#Í’|÷Yellowò|&åBlack%oƒû{Ámft2 Z´ gÁtÎ(Û5ŽèB›õN¨[µhÁ  t Í ' € Ú 3 Œ æ ? ˜ ò K ¤ þW° c¼nÇ zÓ,…Þ7éB›ôM¦ÿX± c¼mÆxÑ*ƒÛ4æ?—ðI¡úS¬]¶ L Ž Ð!!T!•!×""["œ"Þ# #b#£#å$'$h$ª$ì%-%o%±%ò&4&v&·&ù':'|'¾'ÿ(A(‚(Ä))G)ˆ)Ê* *M*Ž*Ï++R+“+Õ,,W,™,Ú--]-ž-ß. .a.¢.ä/%/f/§/è0)0j0«0ì1-1n1¯1ð212r2³2ô343u3¶3÷484x4¹4ú5:5{5¼5ü6=6}6¾6ÿ7?7€7À88A88Â99B9ƒ9Ã::D:„:Ä;;E;…;Å<>E>…>Å??D?„?Ä@@=@w@±@ëA%A_A˜AÒB BFBB¹BóC,CfCŸCÙDDLD…D¿DøE2EkE¤EÞFFPF‰FÃFüG5GnG§GàHHRH‹HÄHýI6IoI¨IáJJRJ‹JÄJüK5KnK¦KßLLPL‰LÁLùM2MjM£MÛNNLN„N¼NôO-OeOOÕP PEP}PµPíQ%Q]Q•QÍRR=RuR¬RäSSTS‹SÃSûT2TjT¡TÙUUHU€U·UîV&V]V•VÌWW:WrW©WàXXNX†X½XôY+YbY™YÐZZ>ZuZ¬Zã[[Q[ˆ[¿[ö\-\d\›\Ò] ]@]w]®]å^^S^Š^Á^ø_._e_œ_Ó` `H`„`Á`ýa9ava²aîb+bgb¤bàccYc•cÑddJd†dÃdÿe;exe´eðf,fif¥fággZg–gÒhhJh†hÃhÿi;iwi³iïj+jgj¤jàkkXk”kÐl lHl…lÁlým9mum±mín)nfn¢nÞooVo’oÎp pGpƒp¿pûq7qtq°qìr(rdr rÜssUs‘sÍt tEtt¾túu6uru®uêv&vcvŸvÛwwSwwËxxDx€x¼xøy4ypy¬yèz$z`zzÙ{{Q{{É||A|}|¹|õ}2}n}ª}æ~"~^~š~ÖNŠÆ€€?€|€¹€ö3p­ê‚'‚d‚¡‚ÞƒƒXƒ•ƒÓ„„M„Š„Ç……B……¼…ù†7†t†±†ï‡,‡j‡§‡åˆ"ˆ`ˆˆÛ‰‰V‰”‰ÑŠŠMŠŠŠÈ‹‹D‹‹¿‹ýŒ;ŒyŒ·Œõ3q¯íŽ+ŽiާŽå#a ÞZ™×‘‘T‘’‘Ð’’M’Œ’Ê“ “G“†“Ä””B”€”¿”þ•<•{•º•ù–8–v–µ–ô—3—r—±—ð˜/˜n˜®˜í™,™k™ª™êš)šhš¨šç›&›f›¥›åœ$œdœ£œã"b¢áž!žaž¡žàŸ Ÿ`Ÿ Ÿà  X “ Î¡ ¡D¡¡º¡õ¢0¢k¢§¢â££X£“£Ï¤ ¤E¤¤¼¤÷¥3¥n¥©¥å¦ ¦\¦—¦Ó§§J§…§Á§ü¨8¨s¨¯¨ë©&©b©ž©ÙªªQªªÉ««@«|«¸«ô¬0¬l¬¨¬ã­­[­—­Ó®®K®‡®Ã®ÿ¯;¯w¯²¯î°*°f°¢°Þ±±V±’±Î² ²E²²½²ù³5³q³­³é´%´`´œ´ØµµPµŒµÈ¶¶?¶{¶·¶ó·/·j·¦·â¸¸Z¸•¸Ñ¹ ¹I¹„¹À¹üº8ºsº¯ºë»&»b»ž»Ú¼¼Q¼Œ¼È½½?½{½·½ò¾.¾i¾¥¾à¿¿X¿“¿ÏÀ ÀBÀzÀ³ÀëÁ#Á\Á”ÁÌÂÂ=ÂuÂ®ÂæÃÃVÃÃÇÃÿÄ7ÄoĨÄàÅÅPňÅÀÅùÆ1ÆiÆ¡ÆÙÇÇIÇǹÇòÈ*ÈbÈšÈÒÉ ÉBÉzɲÉêÊ"ÊZÊ’ÊÊËË:Ër˪ËâÌÌRÌŠÌÂÌúÍ2ÍjÍ£ÍÛÎÎK΃λÎóÏ+ÏcÏ›ÏÓÐ ÐCÐ|дÐìÑ$Ñ\Ñ”ÑÌÒÒ<ÒuÒ­ÒåÓÓUÓÓÅÓþÔ6ÔnÔ¦ÔÞÕÕNÕ†Õ¿Õ÷Ö/ÖgÖŸÖ×××H׀׸×ðØ(Ø`ؘØÐÙ ÙAÙyÙ±ÙéÚ!ÚYÚ’ÚÊÛÛ:ÛrÛªÛâÜÜSÜ‹ÜÃÜûÝ3ÝkݤÝÜÞÞLÞ„Þ¼Þôß,ßdßßÕàà^àªàöáBáŽáÛâ'âsâ¿ã ãWã£ãïä;ä‡äÓååkå·ææOæ›æçç3ççËèècè¯èûéGé“éÞê*êvêÂëëZë¥ëñì=ì‰ìÕí ílí¸îîOî›îçï3ï~ïÊððað­ðùñDññÜò'òsò¾ó óVó¡óíô8ô„ôÏõõgõ²õþöIö”öà÷+÷w÷ÂøøYø¥øðù;ù‡ùÒúúiú´ûûKû–ûâü-üxüÃýýZý¥ýñþ<þ‡þÒÿÿiÿ´ÿÿOì;‰Ø&uÄa¯þL›é8†Õ#rÀ]«úH–å 3 Ð  l » W ¥ ô B Þ , z Ée³Oë:ˆÖ$rÀ\ªøF”â/}ËgµQžì:ˆÖ$q¿ [¨öD’ß-{Èd±ÿLšè5ƒÐk¹  H Š Í!!R!”!×""["ž"à###e#§#ê$,$n$±$ó%5%x%º%ü&?&&Ã''G'Š'Ì((P(’(Ô))X)š)Ü**`*¢*ä+&+h+ª+ì,.,o,±,ó-5-w-¸-ú.<.~.¿//C/„/Æ00I0‹0Í11P1‘1Ó22V2˜2Ù33\33ß4 4b4£4å5&5g5©5ê6+6m6®6ï717r7³7ô868w8¸8ù9:9|9½9þ:?:€:Á;;C;„;Å<>O>>Ð??R?“?Ô@@W@š@ÜAAaA£AåB'BjB¬BîC0CrCµC÷D9D{D½DÿEAEƒEÅFFJFŒFÎGGRG“GÕHHYH›HÝIIaI£IåJ&JhJªJìK.KoK±KóL4LvL¸LúM;M}M¾NNBNƒNÅOOHO‰OËP PNPPÑQQTQ•Q×RRZR›RÜSS_S SâT#TdT¦TçU(UiUªUìV-VnV¯VðW1WrW³WôX5XvX·XøY9YzY»YüZ=Z~Z¿[[@[[Â\\D\„\Å]]G]‡]È^ ^I^Š^Ë_ _L_Œ_Í``S`—`Ûaaca§aìb0btb¹býcAc†cÊddSd˜dÜe!eeeªeïf3fxf½ggFg‹gÐhhZhŸhäi)ini³iøj=j‚jÈk kRk—kÜl"lgl¬lòm7m|mÂnnMn’nØooco¨oîp3pyp¿qqJqqÕrrar§rís2sxs¾ttJttÖuubu¨uîv4vzvÀwwMw“wÙxxfx¬xòy9yyÅz zRz˜zß{%{l{²{ù|@|†|Í}}Z}¡}è~.~u~¼J‘×€€\€œ€Ü]Þ‚‚_‚Ÿ‚àƒ ƒaƒ¡ƒâ„#„c„¤„å…%…f…§…è†)†j†ª†ë‡,‡m‡®‡ïˆ1ˆrˆ³ˆô‰5‰v‰¸‰ùŠ:Š{нŠþ‹?‹‹ÂŒŒEŒ‡ŒÈ KÏŽŽRŽ”ŽÖY›Ýa£å‘'‘j‘¬‘î’0’r’µ’÷“:“|“¾””D”†”É• •N•‘•Ô––Y–œ–ß—"—e—¨—ë˜.˜q˜´˜ø™;™~™ÂššHšŒšÏ››V›š›Ýœ!œeœ©œì0t¸üž@ž„žÈŸ ŸPŸ”ŸØ  P ‰ Á ú¡3¡l¡¥¡Þ¢¢O¢ˆ¢Á¢ú£3£l£¥£ß¤¤Q¤Š¤Ã¤ü¥6¥o¥¨¥á¦¦T¦¦Ç§§9§s§¬§æ¨¨Y¨’¨Ì©©?©y©²©ìª%ª_ª™ªÓ« «F«€«º«ó¬-¬g¬¡¬Û­­N­ˆ­Â­ü®6®p®ª®ä¯¯X¯’¯Ì°°@°z°´°î±(±b±œ±×²²K²…²¿²ù³4³n³¨³â´´W´‘´Ìµµ@µ{µµµï¶)¶d¶ž¶Ø··L·‡·Á·û¸5¸o¸©¸ã¹¹W¹‘¹Ëºº?ºyº³ºì»&»`»š»Ô¼¼G¼¼»¼ô½.½h½¢½Û¾¾N¾ˆ¾Â¾û¿5¿n¿¨¿áÀÀJÀ|À¯ÀáÁÁFÁxÁ«ÁÝÂÂBÂt§ÂÙà Ã>ÃpâÃÔÄÄ9ÄkÄÄÏÅÅ4ÅfŘÅÊÅüÆ.Æ`Æ’ÆÅÆ÷Ç)Ç[ÇÇ¿ÇñÈ#ÈUȆȸÈêÉÉNɀɲÉäÊÊGÊyÊ«ÊÝËË@ËrˤËÖÌÌ9ÌkÌœÌÎÍÍ1ÍcÍ”ÍÆÍ÷Î)Î[ΌξÎïÏ!ÏRÏƒÏµÏæÐÐIÐ{ЬÐÝÑÑ@ÑqÑ£ÑÔÒÒ6ÒhÒ™ÒÊÒûÓ-Ó^ÓÓÀÓñÔ"ÔTÔ…Ô¶ÔçÕÕIÕzÕ«ÕÜÖ Ö>ÖoÖ ÖÑ××3×dוׯ×÷Ø(ØY؊ػØìÙÙMÙ~Ù¯ÙàÚÚBÚrÚ£ÚÔÛÛ6ÛfÛ—ÛÈÛøÜ)ÜZ܋ܻÜìÝÝMÝ~Ý®ÝßÞÞ@ÞpÞ¡ÞÑßß2ßcß“ßÄßôà6à|àÃá áOá–áÜâ#âiâ¯âõã<ã‚ãÈääUä›äáå'åmå³åùæ?æ…æËççWççâè(ènè´èúé?é…éËêêVê›êáë'ëlë±ë÷ì<ì‚ìÇí íRí—íÜî!îfî¬îñï6ï{ïÀððJððÔññ]ñ¢ñçò,òqòµòúó?óƒóÈô ôQô–ôÚõõcõ¨õìö0öuö¹öý÷B÷†÷ÊøøRø–øÛùùcù§ùëú/úsú·úúû>û‚ûÆü üMü‘üÕýý\ý ýãþ'þjþ®þñÿ5ÿxÿ¼ÿÿD‡ËR•Ù`£ç*n±ô8{¿F‰ÌS–Ú`¤ç*n±ô 8 { ¾  E ˆ Ë  Q • Ø  ^ ¡ å ( k ® ñ4wºþA„Ç MÓYœß"e¨ë.q´÷:}ÀF‰ÌQ”×] ã&i«î1t·ú<ÂHŠÍS•Ø^ ã&h«î1s¶ù 5 p « æ!"!]!˜!Ó""J"…"À"û#7#r#­#è$#$^$™$Õ%%K%†%Á%ü&7&r&­&è'#'^'™'Ô((J(…(À(û)6)q)¬)ç*"*]*˜*Ó++H+ƒ+¾+ù,4,o,ª,ä--Z-•-Ð. .E.€.».ö/1/l/¦/á00W0’0Í11B1}1¸1ó2.2i2¤2ß33T33Ê44@4{4¶4ñ5+5f5¡5Ü66R66Ç77=7x7³7î8(8c8ž8Ù99N9‰9Ä9ÿ:::t:¯:ê;%;_;š;Õ<>Z>”>Ï? ?D??¹?ô@0@m@ª@æA#A`AAÙBBSBBÌCCEC‚C¾CûD7DtD°DíE)EfE¢EÞFFWF”FÐG GIG…GÁGýH:HvH²HîI*IgI£IßJJWJ“JÏK KGKƒK¿KûL7LsL¯LëM'McMŸMÚNNRNŽNÊOOAO}O¹OôP0PlP§PãQQZQ–QÑR RHR„R¿RûS6SrS­SéT$T`T›TÖUUMUˆUÄUÿV:VuV±VìW(WcWžWÚXXQXŒXÈYY?YzY¶YòZ-ZiZ¥Zà[[X[”[Ï\ \G\ƒ\¿\ú]6]r]®]ê^&^b^ž^Ú__R_Ž_Ê``F`…`ÄaaBaaÀaÿb?b~b½büc;c{cºcùd9dxd·d÷e6eueµeôf4fsf³fòg2gqg±gðh0hph¯hïi/ioi®iîj.jnj®jîk.knk®kîl.lnl®lïm/mom¯mðn0nqn±nño2oro³oôp4pup¶pöq7qxq¹qùr:r{r¼rýs>ssÀttBt„tÅuuGuˆuÊv vLvŽvÏwwRw“wÕxxXx™xÛyy^y yâz#zez§zé{*{l{®{ð|2|t|¶|ø}:}|}¾~~B~„~Æ KÏ€€N€€Ë G…‚@‚~‚¼‚ûƒ9ƒxƒ¶ƒõ„3„r„°„ï….…l…«…ê†)†h†§†æ‡%‡d‡£‡âˆ!ˆ`ˆ ˆß‰‰]‰‰ÜŠŠ[Š›ŠÚ‹‹Z‹™‹ÙŒŒYŒ™ŒÙY™ÙŽŽYŽ™ŽÚZ›Û\Þ‘‘_‘ ‘á’"’c’¤’å“&“g“¨“é”+”l”­”ï•0•r•³•õ–7–y–º–ü—>—€—˜˜F˜ˆ˜Ê™ ™O™‘™ÔššXš›šÝ› ›c›¥›èœ+œmœ°œó6y¼ÿžBž…žÈŸ ŸNŸ‘ŸÕ  T ’ Ñ¡¡M¡Œ¡Ê¢¢G¢…¢Ä££A££¾£ü¤;¤z¤¹¤÷¥6¥u¥´¥ó¦1¦p¦¯¦î§-§l§¬§ë¨*¨i¨¨¨è©'©f©¥©åª$ªcª£ªâ«!«`« «ß¬¬]¬œ¬Û­­Y­˜­×®®T®“®Ò¯¯O¯Ž¯Ì° °J°ˆ°Ç±±D±‚±À±ÿ²=²{²º²ø³6³t³³³ñ´/´m´«´éµ'µeµ£µà¶¶\¶š¶Ø··S·‘·Î¸ ¸I¸‡¸Ä¹¹?¹}¹º¹÷º5ºrº¯ºì»)»g»¤»á¼¼[¼˜¼Õ½½O½Œ½È¾¾B¾¾»¾ø¿5¿q¿®¿êÀ+ÀoÀ²ÀöÁ9Á}ÁÀÂÂGŠÂÍÃÃSÖÃÙÄÄ_Ä¢ÄåÅ(ÅkÅ®ÅðÆ3ÆvƸÆûÇ>Ç€ÇÃÈÈHÈŠÈÍÉÉQÉ“ÉÖÊÊZÊœÊßË!ËcË¥ËçÌ)ÌkÌ­ÌïÍ1Ís͵Í÷Î9Î{νÎþÏ@Ï‚ÏÄÐÐGЉÐËÑ ÑNÑÑÑÒÒTÒ–Ò×ÓÓZÓ›ÓÝÔÔ`Ô¡ÔãÕ$ÕeÕ§ÕèÖ)ÖjÖ¬Öí×.×o×±×òØ3ØtصØ÷Ù8ÙyÙºÙûÚ<Ú}Ú¾ÚÿÛ@ÛÛÂÜÜDÜ…ÜÆÝÝG݈ÝÉÞ ÞKÞ‹ÞÌß ßNߎßÏààZà¢àëá3á|áÄâ âTââåã-ãuã½ääNä–äÞå&ånå¶åþæFæŽæÕççeç­çõè<è„èÌéé[é£éêê2êzêÁë ëPë˜ëßì&ìnìµìüíDí‹íÒîîaî¨îïï6ï~ïÅð ðSðšðáñ(ñoñ¶ñýòDò‹òÑóó_ó¦óíô3ôzôÁõõNõ•õÛö"öhö¯öö÷<÷‚÷ÉøøVøœøâù)ùoùµùüúBúˆúÎûûZû ûçü-üsü¹üÿýEý‹ýÐþþ\þ¢þèÿ.ÿtÿ¹ÿÿGÔa§î4zÁN”Ú!g­ó:€Æ R™ß%k±÷=ƒÉ  U › á ' m ³ ù ? … Ë  V œ â ( m ³ ù>„ÊU›à&k±÷<‚Ç R—Ý"h­ò8}ÂM’×b§ì1w¼F‹ÐZŸä)n³ø=‚Ç Q–Û eªî3x½F‹Ð  H € · ï!&!^!•!Í""<"t"«"â##Q#‰#À#ø$/$f$ž$Õ% %D%{%³%ê&!&X&&Ç&þ'5'm'¤'Û((I((¸(ï)&)])”)Ë**:*q*¨*ß++M+„+»+ò,),`,—,Î--<-s-ª-á..O.†.¼.ó/*/a/˜/Ï00<0s0ª0á11N1…1¼1ò2)2`2–2Í33:3q3§3Þ44K4‚4¸4ï5%5\5“5É6676m6¤6Û77H77¶7í8$8[8’8È8ÿ969m9¤9Û::I::¸:ï;&;];”;Ë<<:,>c>š>Ò? ?A?x?°?ç@@V@Ž@Å@üA4AkA¢AÚBBIB€B·BïC&C]C”CÌDD:DqD©DàEENE…E½EôF+FbF™FÐGG?GvG­GäHHRH‰HÀH÷I.IeIœIÓJ JAJxJ¯JæKKTK‹KÂKøL/LfLLÔM MAMxM¯MåNNSNŠNÀN÷O.OdO›OÑPP?PuP¬PâQQOQ†Q¼QóR)R`R–RÌSS9SpS¦SÜTTITT¶TíU#UZU‘UÇUþV5VlV£VÚWWHWW·WîX%X]X”XÌYY;YrYªYâZZRZŠZÁZú[2[j[¢[Ú\\K\ƒ\»\ô],]e]ž]Ö^^H^^º^ò_+_d_ž_×``C`w`«`ßaaHa}a±aæbbOb„b¹bíc"cWcŒcÁcöd+d`d”dÉdþe3eheeÒff=frf§fÜggFg{g±gæhhPh†h»hði%i[iiÆiûj0jfj›jÑkk€j€–€Â€îFržÊö‚"‚N‚z‚¦‚Ò‚ÿƒ+ƒWƒƒƒ°ƒÜ„„5„a„„º„æ……?…l…˜…Å…ñ††J†w†¤†Ð†ý‡*‡V‡ƒ‡°‡Ýˆ ˆ6ˆcˆˆ½ˆé‰‰C‰p‰‰Ê‰÷Š$ŠQŠ~ЫШ‹‹3‹`‹‹»‹èŒŒCŒpŒžŒÌŒù'Uƒ±ßŽ Ž;ŽiŽ—ŽÅŽó"P~­Û 8g–Åó‘"‘Q‘€‘¯‘Þ’ ’<’k’š’Ê’ù“(“X“‡“·“æ””F”u”¥”Õ••5•e•”•Ä•ô–$–T–„–´–ä——C—s—£—Ó˜˜2˜b˜’˜Â˜ñ™!™Q™™°™àšš?šošŸšÎšþ›.›]››½›ìœœLœ{œ«œÚ :i™Èøž'žWž†ž¶žåŸŸDŸtŸ£ŸÓ  7 l   Õ¡ ¡>¡r¡§¡Û¢¢D¢y¢­¢â££K££´£è¤¤Q¤…¤¹¤î¥"¥V¥Š¥¾¥ò¦&¦Z¦Ž¦Â¦ö§*§^§’§Å§ù¨-¨`¨”¨È¨û©/©b©–©É©üª0ªcª–ªÊªý«0«c«–«Ê«ý¬0¬c¬–¬É¬û­.­a­”­Ç­ù®,®^®‘®Ã®ö¯(¯Z¯Œ¯¾¯ð°"°T°†°¸°ê±±M±~±°±á²²D²u²¦²Ø³ ³:³k³›³Ì³ý´.´^´´À´ðµ µQµµ±µá¶¶B¶r¶¢¶Ñ··1·a··À·ï¸¸N¸~¸­¸Ü¹ ¹:¹i¹˜¹Ç¹öº%ºTº‚º±ºß»»<»k»™»Ç»õ¼$¼R¼€¼®¼Û½ ½7½e½’½À½î¾¾H¾v¾£¾Ð¾ý¿*¿W¿„¿±¿ÞÀ!À¡Á"Á¢Â"¢Ã"Ã¡Ä Ä ÅÅÆÆ›ÇÇ—ÈÈ“ÉÉŽÊ ÊˆËË‚ËþÌ{Ì÷ÍsÍïÎjÎæÏaÏÝÐXÐÒÑMÑÈÒBÒ¼Ó6Ó°Ô*Ô£ÕÕ–ÖÖˆ××y×ñØjØâÙZÙÑÚIÚÀÛ7Û®Ü%ÜœÝ݉ÝÿÞuÞëßaß×àvá+áßâ”ãHãüä¯åcææÉç{è.èàé’êDêõë¦ìWíí¹îiïïÉðxñ(ñ×ò†ó4óãô‘õ?õíöš÷G÷ôø¡ùNùúú¦ûRûþü©ýTýÿþªÿUÿÿÿÿ€€Ý!€%€‰À¼€}€§ €Kĉဋ·b_URCrÁ}þ/>ƒ|†'€ƒè{´ÿ}ÑŽúß~}ŒÂYVˆm©5·†jŒ³¾„g€œ‚­BøŠ€.i‚h~"%¾‚Ô}Iû|hž¨Ý}—çÀî}ï‘‘§Í~ÍÀ‹Ñ/‰øgø€†C‚F-üİ%‚~”÷¤|6¬ÍÝJ|—£³À™|àš®§}ΕE‹Ï~“gÌZŠMCA€ „x.2Q€ø%1šuø­{@¸™Ýb{Ï­’À | £6§[|Áœ‰0}蕃gý~ÈŽtD€E†«.Ê‚%žYýô{^Ã3Øx{ß·T¾H{ñ¬þ¦||+¤(ˆá}Vœ§{…ŸK\0„-• ‡‡h|¥,'…º|;$f… | ÅèžÐ†–¶ô™:„¢£“Ø‚• ƒu‡ŒÒ€èYx‰ûÞ¨cˆó‹ ¡ƒ†@z ›Ø„fЖ¡‚]Nü‘w€Ã5¡‹…~'‡ù|R ø†v{¬¯t”Èœâ¨ÁŠî ÝŒ»z›H‰|f<–†¤NÁ‘ „ 5S‹CÕ&}‡Ç} 0†L{Ѫk®ÚœÄš½§Ç˜?‰ø G“ÍxFš³±dG•t‹yMµÊ‡g5‹,ƒ&;‡½}ù†L{ÛªR­Ñ¥*šö§ ˆæŸ»š€w šL•qbê•/ŒKºGŠ·4)Šæ‚Û&1‡Ã}è 8†p{Ĩ ®R®·š ¦ö©[ˆ>Ÿs¢Óv-™õœabi•–`LÓ?ޱ4„ŠÚ„r&¦‡×~P ʆ—{®¦“­ò·™h¦ü±N‡–Ÿ€©Ýtș墈a.•šåLq=‘¢5ŠÚ…¼']‡Ú~Ñ!І—{à§®—¿L™À¦¸œ‡ÔŸ/°s䙺§Ãa+•ž¦J¹“5‰Š¼†€'ù‡èK"P†¢|2žR¼ù|Œ‘|´É{T~!¬Bz§p ¤îy _kžDyžIË—Îz&2nz'|Šjyß"Áˆ+yÏûʂ2Õ´€ ~ª«´o¤’}Ã^ç|ÕIt—E|u2” {ˆ&"‰óz½ æ‡Ézdœ¿»<‰®Û²é†Õ}rªð„cn¤C‚f\qb€ºG‡–%2(Ž@}%‰~{r‡tz✻‘Ž»²µ¥|¬ªrŠˆlÙ£¶ˆ[ŒœÉ….H7•¤‚V1ýÏ~©$y‰1|5­‡9{"›gº1™C̱î•|M©É‘k‰£.lZ˜œ‰”Gç•3…;1虀)$S‰ |±ˆ‡{0›–¸ë ïŒ¢°Øœ={/©1—oj¶¢³’¾Z ›ýÊFG”êˆ<1q_l$~ˆø} æ‡{(™ž¹ÈªZ‹¨±S¤Šz…¨êžºj#¢2™)ZB›­’îGj•Œ2/v‚à%.‰ }p¤‡+{˜ÿ¸×±õ‹Í±¬!z¨¨T¥Ei˜¡¼ž{Xà›~—G”쎊2¿­„&‰@}à «‡]{=˜Ž¹„¹3‹«°ì²Îy¨¨cªYh·¡ž¢öW ›ÖšaDQ”x‰3Ž… &ó‰”~W!»‡{wƒÇI}j‚s¿Z{¼p©·,zdb)®‹y=T|¥úxÙCIqy4/C’—y^$u‹úyHð‰+y7ƾ‚†‚Á¾ªárMµæ}µcœ­“|[T¬¥{VCœñ{=.‘’.z’#.‹¯yîcˆìy£ŽÆš‰ƒ:½Ú…pq®µ!‚ªbï¬ù€ÛS7¤ùHBœ}Ø-Û‘€{è"‹Oz˜ ˆ«zŽhÅ{œ‚O½4‹Ípð´0ˆ¤a–¬I†)Qö¤UƒxA³›6€°-™ö}J!ŽŠ÷{'fˆhz9™Äí–Â4¼¶’jpb³‹ŽZ`Í«Š—Qž£f‡GA°šƒ_-É~“!¦Šª{”sˆ)zH£Ää€X¼˜òo¿³“ó`«#]Pè£4‹ A|šN†$.$#Í"5Šh{ï‡üzF“ð¥þö»æŸþo²ÙšR_9ªí•.QŸ¢ÍÆA욉O.Äÿ#3Š`|W>ˆzP ·­I|»§n.²« J^«™õPÇ¢z“hAO™à‹‹/?^‚>$nŠº|×ˈQzŒŒ\Ã8´"~7»Q­´lü²…¥¯`¾ªTž¥OŒ¢‰–\>‘™µŒq/¥‘kƒ;%Ä‹Z}l!wˆ½z釆ÏB|îyÂÆùzûiL¾y\}µ‚x:LR«Ëxr<¡Áx…,Ç”âxŸ"–x¤ÉŠ3xq†ÈÍû¤xåÆ_h̽]}6\´3{lMy«z¢<Å¡‰zJ*ª”áy IJyØŠxÕ…ŽÍ@‡Ñx6Å?„Æhؼ|‚ \H³]´Lܪj~ ÌÜvv¼Þµ«wdz ~yVª3„8z–¡He|o–ôB"~ãŠ5.?€f‚Ô%Ì ²á=u*І̱v€Ç4´|w¢»êœ#xè±®ÌzU§Hc‹|3›XA~çŒ\.€£ƒ& cÌá]uÚ=˵vvÏz³>wÃ0›Bx¸¸0€îzK¬ÙaÚ|žú?ú Ž1.€ù„,&rÔÝÝ*…CxzÌú„5xþ³ýƒ±z°œG‚ú{°‚'‚V|‡cÂ}€@Û‚p}-‚ñ|:$΃.{ÞÙ¿ƒ ƒ×ÊÊ‚f‚±³µê‚O›Ö­Ç‚øx€ìcë§€)@V‚%~‚,¢‚}>$Y‚Á|­ÚY‘VÇÇ!İǀ¹ŠµšU€·ˆÅ€ê†³c'ƒó@¿€z,e‚,~`$‚[}xÚc€9…ÆÔᘊ°¬‹“/™ñÈe€4Œ a퀈?þ^‚¥,sßq$%‚~ד¡¨ŽÅh)¢|¯¼~ð›ï—O–â~¸m‘Ía³€Œ@6„È,ª°€Z$Uó~uÔºc³™ÃÐ~Ú¬À®~£¥k—Ö~‰ž~}ô~З·`¹‘P?â€Ð†Ó,·–!$Šë~²ÓÊ=¿ÑÂU~¦¸¬ž~M¯2—0~§|Ÿ~^ž®_6•%>倨‰ ,Ž—è$Ãÿ~ßÓw~ñÉ€Á–~WÁf«ˆ}å·—”ë}Ì®e{+~¤¹^f~÷™>h€™‹%,‘²‚¨% ‚- ÓpÒÆÀÀ~$Éʪ}”¿!”¸}aµ1z}Öª ]|~Ï>€–,Å׃\%r‚f7Ìúªwó¾*Œºyn©Šzš“ˆX{5z†”{à^¥…%|´>„?|,ƒî|$/ƒÎ{ÆË¸Ž'\½ ‹w:¨ÚˆË€à’u‡!€~z$…Í€$^l„Çp> ƒþ}ö+—ƒ©|Ø#ȃˆ|YÉÒŒŒÌ¼WŠ ‹ §‡Ôˆ¦‘y†F‡yØ…9…g^&„Kƒ=ºƒ¨Å+>ƒa}Ç#mƒE|ìÈ=‹Ú˜[º€ˆ÷”ᥗ†ö”…”¦x „€Šê\؃À‡=;ƒYÅ+ ƒ-~«#Oƒ}YÇ¿Šì¢»¸ÙˆLžc¤Ë†@™Žæ„ï”uw€ƒÅ\ƒNŠë<胃Â*ðƒq#Rƒ }šÅÉŠw¬ì·È‡Ô§Ð£›…É¡±Žo„I›«vmƒJ• [‚ìŽÈ‚I¦ºW‡‚(šn;Ž‚‰‹+[‚ô‚V$pƒ&~d¿H™xI² ”èxÖŸÛzŠ ïzžrÖ‹5{VZˆ–{Ï<5†N{×+…{•#Ï„{r¿1—b¾°°“à·œîÚÈ Pr%ŠœXÕˆQ~’;J†}C*k„â|Q#E„c{æ½0– ‰Ù¯U’Zˆøœ3޵‡‡µŒ*…bqu‰êƒÙX‡×ñ:¬…É~ö)ᄨ}""„.|Y»Ô•‡”J­¤‘’šCŽŽÄ†©‹a‹¸oâ‰0‰ Vò‡J…ª:X…‚€Í)˜„‚}å"y„|§º¼”ïžV¬´Þš™°b–…ÑŠÁ’oˆŽ>V=†í‰]9Ç…T‚›)\„t~‰"b„|˹”?§³«Ìb¢˜9Œ×É„hŠO˜Ãn ˆ1“uUT†¡8ÿ…0„Z)„r"e„$|ظw“Ä²ðªø¬ß–›Œ£¦wƒ0Š  Km,‡÷™oT·†^‘=8…†C)„j·"…„-|ê·ë“Q¼U©Öܵǖ[Œn®‚c‰º¦ál5‡¯ž´T†&”ä8®„áˆ)W„Q€i"ß„}&¸a’­ÄÈ©ž½‡•9ŒTµ:‘‰{¬ËjÖ‡_¢ÿRu…í—°8ø„¼‰¥)ë„8#p„}s²9¡›wô¦ œux”)—%y„€½“Pzkƒ²z±T[Œzò9dˆi{!* †[{#Š…zzú²0Ÿò¤V›a~‘ñ–ª~˜A’è~ljŽ‚~>Sa‹ê}¯8†ˆ3|Š)4†{Á"µ…7{h°•ž¿ˆ£š†Ü‘+•¥…L~m’ƒói¦ŽÒ‚–RÆ‹…€è8*‡í~2(–…Þ|‡!ø„þ{Я€ž/‘i¢i™v`”ºŒf}Õ‘3‰¿h÷އ@SEŠý„[8œ‡ú(S…¸}:!‡„æ|­ž´š¶¡z˜±—4”&“>|Úœ˜hyŒ"Q£Š§‡Â7j‡|•'û…¯}Å!q„é|#­w£˜ –˜0žÚ퓨šS{4@–fÓ!‘AP^Š^‹_6n‡Yƒ1'³…®~=!v„û|¬tœ{®<Ÿy—ô¨žŒe“X¢Ùyþå;f*Œâ–õPZŠZ6F‡)„ú'¯…¦~Ä!“…|«Nœe¶Þž­—б0Œc“ ªHy}’£ve<Œ¬›ÎO‰î’š6H‡ †'ô…ŒX!é„í|MªÜ›ä¾Ù›o—Ó¸CŠÀ“6°óxÚv¨éd#ŒnŸÇNE‰º•6T†ê‡¼(b…qä"l„Ó|Ž¥Uªrx™·¥wpˆ¶žxxûv-™Ây7c • yµK¬åz(5€Šâzm(‘‡Ãzi"ñ†dzi¤ ©b~„˜™£Ø}™‡ÞžA}buZ™[}_bW”¹}M(|¦5WŠ£{¿'¡‡s{ !͆zÛ£Á¨†§—Т·„¬‡øb‚óu‚˜³‚ab”1L®¢§5uŠ\}E'‡*{Ý à…Ð{@£E§æŽ«•“¢GŒ"…•œ‹‰²tÌ—ù‡a “¥…GMFB‚·57Š ~ê&—†ù|ƒ d…«{y¡§e–Ä“‡¡¸“†ƒyœ‚s$—ŠC`º“‰¾L>ŽÚ…ã4Q‰Ñ€u&B†ã} E…£{ˆ¢¦iŸ%“¢¡›vÝ›{—tq;— “5_®’ºŽ¨KsŽv‰P3º‰›ó&†×}n Q…«{~Ÿæ¥â©3“ç ý¤Ûu›Ÿ†p–•š _Z’Y””ݳ¸… ˆÝ­ƒ/ya¦NFj‡ q€OY š¸gFÄ”‡~1›|@$¸ˆš{>†¹z˜“ï³ Œ$†@¬”‰çwÒ¥ ‡ajŸÞ…fX¹š'ƒhFq”€ÿ1Œ¤}¸$?ˆX{­†‡zÊ‘ÿ²l“‹…È«í•vÐ¥N‹hŸŠÇX™‹‡pEÖ“ƒÓ0‰ŒU$ˆ-|$¨†jzÙ’Ô±Q› †4«=—év¤Á”fÈŸ(WA™‹·EG“†Ø0OŒ€x$ ˆ|…ц]zÒ‘;±&£Ñ…kªÕ …u=¤/›tewžŠ–gV°˜ÁÀE²’ÖŠZ0µ‹÷ï$qˆ |é=†`zÅp±%«¹„±ª½§Åu@£~¢eWù›ÖU´˜ˆ”øD÷’º 0ÚŒƒ$üˆ}Iî†tzЉ°ì³d‚êªó®,tr£«§‚e8Å pTŒ˜€˜eC2’¢Žâ0¬Œ&ƒü%„ˆ>}¡ ·†zë†öÀXw³z̹Øw¹lë²w‰_¼ª¼vãP›£ÀwM?à›x'-Y‘xÁ#ŠãyªˆLy8‡ ¿}@{,¹Q|/lâ±gzÿ_z©òzMPÔ¢¬z@\š´z-˜y×"8Š¢yšŸˆy~…Á¾ÎƒÈzI¸gÔkˆ°kØ^€©$~¨OÖ¢}«?Úš|˜,®{!zŠTz(¶‡Þy¾„ë½ÊІy[·L‡ïj…f]¬¨yƒ{Nÿ¡\€?7™aA,@¬|c! Š z¤A‡¤yベ½Ÿ‘+xÖ¶­Ž j÷®ú‹]¨ˆPN¶ ¤…,>Ô˜ÈÂ, J}•!‰Ç{H‡oyíƒÜ¼»˜x¾¶f”pj•®Õt\ž§vNq  ˆõ>•˜c„d,/Ž÷~Ä!Y‰{^¶‡GyéƒÑ¼( x5µ ›úiw­þ–û[§’N5Ÿ»]?#˜‡|,ÌŽÁ€"‰x{¾‡=yæƒQ»²§wŵ¢ÝhÕ­tœóZצ°—FM¬Ÿv‘ >õ—Ή÷-OŽÐ2#‰—|$¸‡_z‚ͻޮEwð´ô©hˆ­Y¢K[ ¦d›œLΟj”H=Ä—Á‹Á-‹‚$ ‰Ö|‹û‡•z.|ÛÈÒx%sýÂ~vvcÚºKvW’²du³Iv:áŸævÛ*“•wÑ GŒ^xU‰Vx†{ÄÈ|Èq3Á{scx¹‡z!Vñ±{yIW©x¼:ZŸ”xÊ(î“uxÍŒIx½׉=x´zÆy‚oo’À€Êc¸*!V›°l}4Hž¨6| 9ŒŸ{2(“0yùŒy0ȉxÚ{ëÅñˆoÔ¿†dbè·&ƒÞV¯kuGë§c—9 ž@}´'³’Ì{( ‹Üy—Wˆáxë{ÀÅÒŽ¾ná¾£Œ0b¶z‰(UŽ®Ð†Gʦ׃)90‰€'ö’Q|8Ý‹ƒy爘xéy©Äì• nо/’Bap¶ ŽˆUr®v‹H¦u‡ 9J‚(}‘¼};•‹z-YˆPxáyêÃ2œýn̼әaε;”:U´­åéHD¥ØŠé9ƒœ¥….)0‘Y~`¾ŠçzŒ¹ˆ.xïxùÃW£ín@¼ÔŸQa†µ™ŠU.­“ãHE¥Qí:œD‡H)ÿ‘Sl!'‹{ oˆTy1wJÄšªlmà½6¥Ta´ÀžÐT¦­<—ÓHJ¤é¼:B›Îˆõ*בm€Q"­‹E{•Aˆ¡y•ÞuÅnèɈx&rû³­yâuQ›<{wõƒ|€yÞe½}ç{JACÚ{³,ô{Ÿ$gœ{‘ÚWs9}JÇou¿~²\x0}ü›\yâ~e`{¡~ˆc<}f~B@t}T,‰€º|¡$OH|Q×jq‹‰Äìs»‰ °vn‡'™§xž…îzÁ„.`M|Ñ‚ ?(~þY,Z€X}È$[€î}Õìo‰˜âĘrf”®^uqF˜ wÛ}yó‰ú_@|†Z?É~‡¶,Ç€~ò$€ª}ÅÖnn=£ÝÃ;qežh­îtR™:–vþ”{¢y6»`½{`ŠÊBœ~"„/-—Ïü$º€…~6Ô©mn® Á‰pΨެ_sÇ¡ê•Qv;›½|xl– `zí(A}ê†9-·€Ó%€}~…Ð*m º{ÀKp<³ÿ¬—r¿¬[”æuޤÿ|xw«d_z€”1? }ˆ„-2¼«%O€—~Âϵm>Å&¿§p½íªÂr¤´æ“¡u¬Jzˆw\£7^{z˜m>»}©ŠŸ- Ý‚%–€Ñ ÏLmÎŒ¾p Æe¨Çr¼=‘Pt²xÛw6¨0\Àyí›y=ó}£Œ^-€ƒQ&bÎ÷pF¿M!s.«iuà”&ÈwÆ}‡Ùyn_€3{0>·?{,‚ {R$1‚g{0Ê;|ñ|M¾”}|*ªu}¶}I”@~B}¼|c~à}æ_â¶}æ>b€é}+½³|V#æ‚ {ýÊszýˆ„¼{š†í¨R|`…ê’ }„ëz4~ƒ‚^a*=΀„+Y}p#Ƕ|ÁÊôy<”»rz‘Y§c{)Ž8‘|O‹·xó}j‰]S~‘…©=©€'+~v#ß~}OÉXxŸ¹Ëyš¼¦Yz&–F{‹’jw™|¬Ž}]}ý‰¼>̃?+Ç€éU$d}©Æâwª·ýxh¤ÿ¤}y~Ÿ Žëz¹™évÆ{ù”d\d}ƒî=¥”…G+΀Հ$5^}åÅsv÷¶¶owì°¢=xü¨³Žz¢Ru…{m›2[}’º<þe‡„+º€Ð€è$ek~Å v¶Àµ¯w‡¹>¡Ýx±7Œ~y©‰tO{¡Z-|À–è<{C‰›+±€×´$˜†~UÃ1væÈf´¿w†ÁR¡¡xW¸è‹ùyd°+sÉzǦ.Y¢|„šo<$+‹{+¾€æ‚w$Ö¦~™ÀIˆõpÿ²J‡Wsµ ö…²uMŒŽ„¼wuƒèyYgƒ#zþ;¿‚þ{I*õƒ.zø#ÒƒHzϾ¾†åyã² …Õ{¥Ÿ´„;|¼‹Gƒ[|ÄuI‚è}%[#‚¨}k„ø…±ƒï„÷žƒ„¶Š‚gƒ¨t‚*‚UZ0‚"€Û;Õ‚W~*‚†}#-‚›|R¾ƒ#ܯނQŽG‚‹Þ‰¶‰ÔrÌ‹‡µXÈœ„Í;/‚€€*V‚Q}á#2‚r|»ӂŒš#­5Ú—˜›Ú“¶†€ï(q\€ÚX.ˆ¬:¸Ç‚Y*?‚4~™#G‚c}¸k‚A¤Q¬q* Öš;€•œ†€A—^o×€F’uW2€´Œ:v”„8*8‚!E#X‚^})¸Bª°’«€¸«"˜u€5¤º…8ÖŸ1nFå˜ÞUÝ€Wø:a†P*-‚€#i‚\}R¸’ºªn€D´)˜½­„9g¦6mžyžmUR€”ç9Ú2ˆN*%‚€¾#z‚Z}ƒ¶5ZÁÀªgß¼—SŽ´»ƒî*¬õm'E£iTëØj9â Š@*5òx#‘‚X}·³Ó‘Êq§¨|ŽÐrΗ،-tl…B‰ôvpo[ˆYx»U[†xzm9…„özË)Í„Rz°##„z ´3zxÒ§žz(”¿‹{J݈ð{µmЇt|bUˆ|¼9š„­|2)„{“"ǃ¾{I°êŽ ‚Ѥ•‹´ƒ/“´‰¥‚Ü€ˆ‚lf†Ä!U …Š€9k„[}ï)^ƒ½||"Žƒ|{Ù¯¨/+¢FŠÎ‹Ù’ˆ­Š"€‡5ˆ$kކ†BT…ƒÇ9)„¿)Mƒ–}="‹ƒ`|+®.Œ/–œ¡jŠ:”`‘Mˆ‘:~³†™ŽLjC…d‹uS„’‡p8“ƒëk)9ƒ‰}Ô"¡ƒZ|P¬J‹ŒŸq ¡‰{œ®±‡„™}&†%”Üh… QÔ„G‹7õƒ¾ƒ)ƒu~g"—ƒS|hªý‹WªLŸY‰¦S†ï¡^|Ñ…œ2gL„¦–LPîƒ÷Ž÷7tƒƒ…(¶ƒT"oƒ@|…« Šå³öžêˆÛ¯CŽn†œ© |Q…¢Çfÿ„.››Pƒž’›7%ƒN†Â(Œƒ6®"Yƒ.|¨ª9Šl¼FžÊˆn¶ÞŒŠ†¡° z¡…¨±eÝ„ ŸÂO݃^•’7ƒ"ˆX(ˆƒ€E"Xƒ|Ц¢™ƒq»œƒ•ñr¾‹‡’tÊ{4Nv†gkŒ„xfQr‰¸y~7ô‡z@(¸…jzp"J„¹z¦f—âx皥”Ñyi‰n‘§zxµŽ¼{,eÍŒ{ÁPj‰r{ð7 †³{’(K…!{("„vzö¤Å–¸|™˜“N~ˆ¥j€ïw­ã€ðdã‹€Oü‰6î†c}.(„á{í!΄>{b¢j•ýŠs—Ç’†‰j‡þ:‡úvðŒã†ždKŠÌ„ÜP_ˆŽ‚ˆ7ƒ†~â(5„¾|–!¿„%{ž¡(•“=–ˆ‘ö‘†ÖŽË޵v”ŒCŒc–Š(‰‡NЈ5…ç6¯†€h(0„¹}!Û„!{´ 4”P›ì•r‘C™*…,Ž…•ítÉŒ’tb ‰úŽ‹Mm‡û‰u5¹…Ñÿ'Ï„Ÿ}˜!¿„{¾Ÿ“ì¦8”Û±¢&„$‹ž=sÔ‹k™Åa‰Œ” M ‡“*5$…†ƒÀ'N„q~+!nƒü{Íž‹“¸®Ð”»mªž„¶¥‚s½ŠºŸÂ`Ÿˆþ˜ÙLi‡?V4§…]…9' „V~©!Jƒç{ޞÒ²¶Ã’§õ² ‚ë0¬r.н¥_¢ˆ·œ˜K]‡ ’×4<…E†o&ð„B!JƒÔ{ö› ¡úqÜ‹žs€2™§tÙp9•“vX^L‘°w¯J{¤xÆ5f‰hy¶',†œz!5…iz?™ Æw¶ŽxãB˜îyun÷•z]]‘]zØJLl{3öˆüzØ&¥†Tz§ õ…1z‘™$ŸÚeŽ´›ºt#—Ô5n”[x\_ê~ÞIÇ}è3ψ¯|E&r†{I ·„ûzÞ—°Ÿ+‡í…šÝ†˜~¦–§…mß“n„Ô\¹<‚ÖJŒÃ€Ü3ëˆr}Ã&h…í{Ý Ÿ„Û{ •ž~‹?š=Þ|â–`Œ m„’ý‰±\K°†ùI Œ_ƒê3Lˆ<6&<…Ó|W ž„Ë{•ñ£˜BŠÖ™¢•»yù•Ô“jú’±¡Zõf‹ÛHq‹ü‡I2³‡ù€»%ñ…´|É {„½{“ÿ9¢‰¿™9žÌx’•*›iU’–šZ'Žõ‘:HÆ‹yŠð2‰‡§‚Z%¨…}? <„«{’ >©È‰Ý˜á¦€yò”À¢&iÑ„œˆYfŽƒ•°G°‹LÈ1󇔃—%y…|}ž 5„š{sœi±.‡œ˜R­‹z/”‚¨0j¨‘C¡GXèŽ2™mF&‹;12‡ž„Œ%\…v}ë V„‹{‹j­3qò€¨br„s:¢·t9dõ{uPTʘƒvwB°’ÄwÇ/ú‹øxä$˜‡ìyа†1yÒŠr¬_w€a§vxsH¡Þxod뜸xôU6—¿y‚CÝ’QyÕ/ó‹šyô$J‡¬zO†z ‰¼«k}×€$¦}Ùrè ˜}od®›ä}fT;—]}=C»‘ÿ|z/ñ‹H{>$‡mzŠ…Ìz>ˆ9ª… ~¥.„ r3Ÿ¶ƒ]dÅ›+‚T–µ€áC ‘Ž)/Šÿ|”#á‡:{ Þ…£z`‡>©A}4¤R‹2p6Ÿ^‰6cšÅ‡Sè•û„…BE‘Ì.ýЏ}à#ª‡{vÐ…†zm‡¨@”s}M£¾’BnОÜyaÒšTŒ?S>•ˆšA¨¯„µ.«Šr9#‡†ë{ÙÅ…pzf…®¨ &{X£GšûmpžY–°`a™Þ’zRo•ÅB€ˆ%.ÖŠ'€«#Œ†Ê|8Æ…_zS„¨ ¤Í{£0¡Ìm`ò2_™Y˜Qq”Î’ AÒçŠß.·ŠÌ#±†»|„…TzF‚§§µ«´y £/§ìmdœ¢ì_±P!”á•¢?ðŒ¼.RŠ‚¢#ㆹ|Áj…LzBz_¸Ëq*oÕ³Ÿrf@¬ys¡[°¥ïs„L— *t›<¼˜¦vN+8wÝ!V‰ƒxË'‡/y2z<·Ëv™qx²ñvÖeÛ¬vàYú¥Šw0L;Ÿ wÁ= —áxN+HލxÚ!‰My-½‡yPxì¶­}p¨±í|~d«'{¯X£¤Ð{qKž{P<®—XzÔ+ŽGz ‰yš\†Ûykxݵƒûoƒ°@‚žczª%;W¤$€JRß~á;â–Ã}T*—ê{= wˆÕz'†¯y{wû´©ŠOnr¯pˆ‰cU©A†ºW{£u„ÝJ` ‚N:Ë–E‹*ž|U Pˆ zZ+†„yx‡³ì‘oE®Æc<¨ŒŒlW™¢©‰iJ[œb…Ö9ž•ýÛ)Ë^}r kˆpz«b†\yww´%™mѮږtb¨$’…V‰¢5ލJ!›ëŠ@;b•R…&*m~Á ÙˆGzþ̆@ycvγ` Ymb®*œî`û§è˜U™¡Ö“ZI‹›²Ž;©•‡»*üŒÞÓ!ˆ.{G|†2yZv³¦®m&­ª¢”_Ù§ÏœÜT1¡é—FH=œ‘X:ˆ•‰­+;Œ¾€¡".ˆ{„M†,y[p°Árhú¼iqå\µ rQ©®r+Eø¦jsS8.œÑtÚ'3‘ÉvÅ ‹)wü?ˆLx„p*À¯vuhm»ˆv3\:´ŠuÏPº­u¯DŒ¥Þv7#œÛvÎ&Õ‘—wºªŠùxJЈ(xˆnº¾ô{Êfè¹Å{\³zƒPÙ¬my˜CÚ¤ýyY68œEy6&O‘8xØ.ŠÃx Qˆx‰pB½¿Ìg)¸P€t[‰²:Oü«a}ÚCE£ÿ|Í5®›b{§%ÑÂyòЊ„xñ‡Ûx‚q§½‡ògò·]†[Ò±ƒðOª›‚?Bq£^€\5/šÝ}ï%€fzðËŠCy3"‡¦xvo‡¼_ŽÏg¬¶ÉŒYë¯ý‰¶NŒ©Û†úB;¢Óƒõ4œš“€N%'{ì1Šys¬‡ixhmJ»–•ûeS¶6“!Z^¯KvOº© ‹±C†¢$‡’5š*‚Ù&8á}‰ËyÁ ‡5xal»Êœocç¶I™Z&¯k”„OȨÀÈD,¡¡Š˜6Q™¹„Û'T•}ü5‰¡zχxljJ½,¢Œci¶Iž»X¡¯O™@Nm¨k“œCˆ¡ w6©™J†{(]N~Ä b‰ƒz^‡x‚˼qig“½#s k©Du·oF‘àwŒstyÿy’u×^Þ{¾x>ï~cyÏ,Oüz$b€¬zÙÊmðsʺ púuÔ¥ÂsÊx¤vWyƒx—x·z\²{${B=›}ø{v+¿¸{~$*€y{€Éjj¹m¸Cno€ê¤^q΀ʺt»€Fviw¤€ Y£z~~ù<Ú}x}K+ik|‰$€B|5Æ)iOŽs·mŒ5¢úp`‰gŽ^s“‡}t´v†…gY¥y‚Ð<}r+Y0}–#ù€|ÇÃög×™¶$kd–# ços’Œàr•Ž˜spu¨‹#Zxó‡=3|ÉÂ+Ÿ ~‰$ €}&Â;g¤´j¯ŸË ŒnXš‹Íqž– r¦tñ‘Wgx‹d=~|Šƒõ+á~ú`$>€}gÂôe•¯¿³_i誽ŸLm‘¤„‰epÿŸr t6˜×VÝwõ£=,|L†d+ç~÷€A$~€}¤Á?ezºI²Si(´nž¶lð­1‰UpH¦Crs ž™X3w\•<|ˆƒ+à%€I}õÀeà²qhH½†ŸalPµJˆ|oŬ˜qÖsD£§W w˜z;³{¼Šl,pñ%Ò€†~RÂbyg´yÔkU ªzÉoç‹9{²sVu•|¥uÐYô}ÖxO<á½y²+ˆz$¤zFÀLv=sj±vwÁu Ÿªy w:‹òz,xÊtå{—zZ}F{<d{_*ò€¹{>#¯M{*½Ït€¯bußdž)wPÖ‰îxÒær°z„›X|¨~š;@~ý}G*‘€i|\#w{ô»xrPŠ÷®t‰LœOuëˆ$‡Qw݆Ãp™yÒ„ÌW|‚u:é~œE*u€0}Q#m€Þ|z¹pp–¬×ry’‡™õtŬ…¼vñFo¯yŠ:W{b†p:ì~OD*z€~ #w€Ï|È·1oØ lª2q œL—ïs˜„¢v”snëx?@V*z׊´:®~ƒL*€ý~Þ#”€Ï|ù¶ÊnÚ¬ ©Aq§¦–ýs,¢ƒ½uaœÂmýw —UMzQ“:\}Ø…“*‡ó¬#€Ù}*¶ênv¶=¨òpX°Å–¬r£ª=‚ÛtÚ£ßlüw'œ°Uyâ“­9ÿ}ž‡¥*”ì€w$ €é}g´ænt¿ ¨ëo㹄—*qɱڛtV©ülqv¡ T™y‡—79Ý}g‰‡*Ïè8$m€ý}ªµ Éh¨QHl"–N€àp ‚Ú€ƒrÏm€ruT €“xY:ny*c‚Zy˜#™‚»y¥²±›ra¥Þˆt”¯~w‚¹jxpnígy„V €zÓ:;{:)éßzõ# ‚6zÒ¬™}ð~,¤Ø}·~i“ç}Ê~ç€Æ~-mú~d~oT p~$9¿€¾})¦‹|"×ã{¦­ª|‡Ú¡Ç|a‡‘í|n†UÉ}…Sk»}̓­Rk~æÒ8í€j~ß)‚Z|ð"äÁ|­÷z¼‘J¡"{#xs{mr~D|3‹xjÑ}ˆåS~Z…8›€'€£)g@}"î·|R«Ùy¬›Þ qz˜ Žåz•\|p{`’h«|WŽNQ¥}à‰^8.ð‚y)O-~C"ö³|v«‚xm§³ž¡y˜£¡–z2žn|?zךg_{ç”÷PX}jè8 ¹„–)R~ý"ø¬|˜«®wú±9ž„‹2œƒpƒ—&ƒ"}Ç ¢ƒ{N“o‰U¯‡—ˆ«(yA†Ï¦Pj…E |Yu„™(Gmƒ´¤2«ƒL„°%¿ƒ ~! E‚î{OZšj±„~—]mVw6”HoŸh£‘rXRŽ#t\Eë‹ v§2{‡©xR%v…YysÜ„`yë‹Ç˜uq2‚»–#rëw‰“th~vX?uw¡F|Š€xÀ1ž‡y›%N…z „:z3‹A—;xæ‚”ézu>’zˆfW\{\W°Œà{’F2Š{†1ˆ†Èzý%s„àz¡ L„zyŠW–M€Ûø“ÃCs…Ìe’Ž€µVŒŒ?¾E;‰È~q2†§|K%Ñ„Á{% ƒöz¥ˆq•O‰@õ’üˆ^r\†äeqÐ…’U­‹©ƒÿDu‰^ƒ2†t}±%儨{˜ ªƒæz²‡”½‘6~È’Bq²f_d–q‹6U‹4ˆŸD ˆË„Þ1†I%w„€| pƒÓz­„X”™â}$‘\—öp¸ŽÇ•Hc¥ŒÉ‘ìT®Š¨ÁDˆFˆC0J…º€Í$È„P|u⃸zž„‰“ß¡Ü}ÁúŸKp¾Ži›ïb÷Œ2—T Š/’CaˆŠø/{…žô$5„6|ÀpƒŸz‹…Ÿ“`ª|îR¦›r#Ï¢cþ‹ËœjS»‰ë•ÓBˆŒô.G…‚Ì#¸„0|ø-ƒˆz{x¤¬jÚuJ¡DläiÛœíos^瘓q†PÉ”ksV?ŹuŸ.$‰þwµ#†…yC… y¢}Ž£tp‰tóŸïr%jž›·sm^«—ÀtíPk“¿v\@€2w‚-쉓x¿#†Pyyn„ïyÆ{ð¢wëŽD|Ü-û‰{D#j…÷z`Ý„¯yÿyë =…æq…;fb™0„c[—•ƒSM§‘×¾=Êç’-‘ˆÈ|…#S…ÓzÄç„”zyŸ1Œüq¬œ‹äe˜lŠPZ·•3ˆ@M‘…Ò=zŽ‚r,øˆ{}×"ÿ…©{´„{y÷v¡žG•Go[›Q“ôcÁ˜ ‘xŒà…™,©ˆ$-"—…}{oU„`yÙv§ž³p›!š­d»—Š—LY“î“SL¯wŽr=»Œ¥ˆ,Tˆ€3"[…a{§ „Dy¹v"ž¤"p`š5¡e–æœãY8“Ë—ïK›ª’;}Œð‰ã,?ˆ)"P…U{Є'yoÖ°ìj­fü¬˜kâ]¦ËnSû¡doÀGš›ñq“9 •)sö)4Œßv¹׈xbß…ùyn'¯o„fù«lpy]¦'qôS ÕsTG,›!t¢9¢”žuç)YŒ‡w  ‡Üx­…âykß®UuŸeѪIvM[-¥™vÂQ} DwtF3šwx9¤“ìxy)nŒ"xÏ $‡¬y8…Éyl*­|dÑ©i|}Z;¤±|QP-Ÿd{üE†™˜{¨8Ü“Azü) ‹Ëyú ‡€y_N…®yl«ù‚âc ¨¡‚`Z£YÂP”žE€©E2˜Ó#7r’â}A(o‹‹{ î‡Sy°T…Šyl´ªû‰Bdl§>ˆ¤ZW¢E‡^PV¤…;D³˜_‚¹6'’¶•( ‹Q|Ò‡#yøN…`y joª¤‘ bȧ_¿Y¢#'OÎ2ŠHDô—ƆÜ7˜’‚¨(N‹}RÙ†íz9K…4xèiŽªf˜jb"¦û–W¢F’Ÿ&|è2—–¼{[#oŽIyªMˆõx‹j†ªxcx³š‡î\"¯›…ßR—ª4ƒ“H¤é‚4=6žŽ€`1&—}Æ#šŽ z—‹ˆ±xÇ¢†hxaG²ÚŽèZׯWŒÀR8©—‰ðHò£ù‡>ª—ƒí1 –Í€G$ É{ ˆgy†wë_ܲþ”ŠYm¯B’fQd©§Ž÷Hó£–‹0>ôO†Ä2–q‚$õi|‚͈y8Ê…ÕwÓ_Á³XšUYb®?—‡OQ©‹’ÞFÇ£Ž¥”]8©z‡§*ð~S€9$Ó€} ¸KsÕ_å©ytädî–Wv2jeûw²n›mqyPrBUp{^u9;Ê~wÇ+€ y#Ú€Þy”³Jp˜l¢¥ðro”ñtpq¸‰vTtl#x5›~C€¤'߀T}8"6{À~pƒŸ<”´rœs…&s­™ tuS•8a˜wwÎLÝz>ŠÜ5'~‚¬'¯€?}Ý!ø4{Ò‡oj¨¦’Äq<¥Lƒ2s ÕrŸtÜ›û`Uvÿ–)LCyËŽš5}»„{'΀#~{"-+{í›Ñní±&‘pl­h‚5r¨¨Dq›t¢_÷v‰šëK¥yf‘¹5f}~†(8€"ž |=„ cD“ƒ/g%ƒ_‚%k s vnõ`IqéL0tÝ5'šwŸ'Q‚8xÜ!g‚y\™3Ölï‚?nµ‚S€pér¿€fs“_³€+u­KR€uw•4iQy)'÷yÖ!d‚@z˜Nou\Žz4v¤£ x-p…2y‰^ùz%J!Õz¿4€þzá'¾zÊ!…‚z¼”y}’~Õ>}w2}¸^oS~.K]ß~b~áIsC~4(€²|”'@š{Ž!°þ{–|‡¯‹ |R‡B|=|œ† m}!…[Ü}ÃËI†~À…4:€q~8'G…|(!³û{E’hzçˆÕzã?zø{jDly|‹„\|õˆ¨I:~<„÷3ò€-ä' o|²!‚÷{T’Ëys›‰fyë˜üz`z”–4k{K’áZ§|5ŽjHÖ}©‰3eç®&¤P};!4ê{U‘œy¤‡«yn¡Vy8zniÿz»˜úZ{¼“¢HP}>Œ–3§ƒB&n/}µ! ×{Wx™¬…Äx¾¨ÿy—yj¤oj"z9žÁYò{V˜3HI|Ül46e„Ã&® ~- ýÄ{^Ô‹Xd7‡õ‰²gÉyæˆk½jV†nûYª…q‘Gï„Et27ƒvwZ%uƒ#xÝ ƒy~Œ„‰TkÝ„L‡ümÎx†tpcj\…yrîY^„ˆu FŃ®vþ1±ƒ(xÂ%€‚ïy£ Q‚×z‡Wsö‚é†?tþuå…,v¢hƒ„rx4XÖƒ—y(Eƒƒ(y÷1n‚ÝzU%¸‚¾zn µ‚²zvН…Ž|U‚%„¬}+u „}~gcƒ¿~+W™‚ü}»D‚¼}51¹‚ {è&‚Ÿ{!‚Ÿz¾ˆ¨„²„¹—ƒ³„ÂsV‚ûƒžeà‚—ƒjV;‚d‚{×^¸‰µ|aQˆ9|bA†–{ð/¿„¶{$ă¤z† ƒ3zN|¿†‚‡u‹þ‚±j¨ŠH×]îˆÉ¡O‘‡€Œ@ÿ†"~ö0)„{|l$úƒŠzú )ƒ'zZ{Œ¥ŠSsÁ‹‰i]‰^ˆi]G‡Ã†úO'†Ã„²@°…‚/`„+}â$ƒl{]äƒzLy݋ד1rŠ/’fõˆ©\χ6iOÔ…þŠ?û„ö…A.'ƒß1#·ƒL{«@ƒz,x½‹g›pЉØÞf·ˆC– [â†Ï’¹Nì…¬ŽW>º„®‡å,烺€="çƒ4{⤂ýzxfН¢ünñˆìŸŠe¢‡È›O[š†¥—$Lá…|‘Ï=ª„°Šl+ŃÃD"Dƒ&|-‚çyäs3e l šág|b_—4jãX“æmwL9p#=¨ŒŠs<,‡ðv‚!ž…>xv%„yNrœ›ûjˆkQ™ulŽb=–1n¿X“&p©KtÆrì=#‹üu++Û‡“wŽ!ã…xç©„yzq0šÇpÌi‡˜#rÉa¢”ìsýWO’uK'vŒ<Û‹_w¹+ö‡;xÎ"P„ëyd9ƒñy£p5™owúhõ—y_•”yÂU~‘:zYIaŽWz®;ÝŠçz„,J†úz"ÄÇyÖ©ƒÛyºn¯˜"kgÈ–*™^_“WNV'~àHáw~ƒ; Šy}D,3†À{S"ׄ¨z4ɃÇyºm#—@†gg •6†]i’~…6T ¡„ HªŒò‚Œ; Š€+–†|"o„ˆz€ƒƒµy¢j:–BŽ5cû” K[»‘¡ŒSŠI ŒL‡:»‰‚á*¯†9}°!µ„fz·胣yují–•Ád“Ï“â[é‘(‘‘SFŽT޲G±‹ÚŠ®9X‰=…#)ã†~•!„LzÚ_ƒŒyDks”²œÞc"“#š.ZYÕ–cQ9ŽR’ÊG‹Ýá7_‰z‡)½†_ Ë„:zõøƒqye$©eO^ ¥ÃfnU¡iL° kâB˜n†5¶’qÁ'mŠÏu™Ά¨wê„åxèd¸§Þi]Y¤ÊjàT¯ Åm/KºœkoMAä—'qY6L‘Zs«'µŠuv‡O†ˆx6„ßxíc7¦Ønk[죸pIT*Ÿ®q£K"›Ns?A|–^t¯6ešv'ÖŠw¥ʆex‹q„×xîa¥ÒuvZH¢ýv;SIž{v©J}š w¤@Þ•TxQ5Ìßxª'©‰ºxÎ †@xàà„Çxéaõ¤u|Y²¡q|nPûÄ|>Ié™<| @x”ƒ{Ï5X{'q‰kyîý†y0Kxàa\£X‚¿Yã 7‚pPԜڠH\˜é€¯?{”*y4€Žÿ}“',‰$zü½…âyqž„ƒxÈ^æ¢{ŠXÁŸb‰kQ›‹‡–H ˜+…á>Ô“¦ƒq4#Žž€-&ψæ|a…±yžA„Wxš^¡³‘X|Ÿ8¶Pm›PŒÒHª— Š(>Ô’õ†¥3jŽU‚'&Lj¸|ÉB……yµ „+xg^Ù 8—X…ž•BP«št‘±H<–¡Å>“P‰b1ÛŽƒJ($ˆ‡}R“…[yÂð„x:Z ²¨d1S¡®êe•Kè©úhC€¥j‚:2žølï0—VoÍ"‘ŽtY¤ˆ=w8±…ÅxqZ@±‡h{SZ­æiàJý©vkšBu¤Cm†9ž o”/¸–£r#Jsu[ˆˆwi·…ÏxJ[^¯ÇmËSɬenàJã¨toÔBA£)q49Ôr”/Œ•±tQ"ûvSˆwÍ…àxYH®Îs!Rƒ«msÊJ9¦ÒtÀBŸ¡ÚuO:Æ›ªuÖ/£”cv±!ÄŒ¯w<º‡ûw¦f…æwñXC­êxìPì©ëy'Hº¥y¨A– òy‹:T›y60“œxÿ"VŒ(x|ó‡§x…·wéX«ó€ Pn¨g,H?¤Æ~„@ñ }å9tšY|¿/^“n{H"ý‹¶yv‡MxZ™…mwáWcªa‡³QE§ÿ†±I‰£²„¢A-žÏ‚¯8™/€z.“7}Ÿ#‹€z`†ÿxˆ‘…wÀVqª´PV§ºŒ)Há£8‰`@êž3†{7s™*ƒ%-„“6r#I‹J{(U†¶x¡Ë„ÅwW`©“’êP(¦ÄsH¢´1@uÆŠ'6S™ÿ…¸-3“E€×#Њÿ{ɺ†mx°„w_³¾hAZs¦Ýj’^´“´mgdx€hp9ij*s=nLRVv¾rz8ò{Hv*~8x)$@xy#±¡cÿeU¤CgSi ’%k lÂ~Çn…o‡hVqÒryPÚuîu7ýzçx)¦~yV#…_yè¯_Ör@¡€cðsù¼hºv*{GlˆvofypdwxO+tõy7…z^z ) }Ôzt"ÖPz›¬Ë]-}¼ŸÏa9}“fx~,yÅj™}çfÁo}3Pht|š7^z{ó(Ž}º{O"<O{ªÉ[‰q_‡‹d8…šz3i„Pf|mȃN§s`€k7ZyË}Ø(}©{å!ÄY{(©oYÀ“Μ[^%‘ˆ‹by‹g´‹âdªl³ˆøLVr€„¾5¾yr§'‘}¡||!£q{E¦ˆWýŸB™J\;›Ä‰0a‰—äwõf]”gd kæLqqš‰Ë4úy,÷'Œ}¬}m!Ô™{ƒ¥zV°¨Æ—z[¤†8`j Fv^ez›c/jÊ•ÕLÒq è5Nxß„'Ý}±~.",Ä{³¤nV‰²…–¼Z–­b…÷`§®uÖe¡ÕbGjŒšˆKq6õx_…Õ(g}¯~¸"ó{ǪènÏ\žo÷a6‹{q«e«yQs‘j)eÝvn¨N†xør„7h|¿v)n0x#<€9y §kuf&›VmIi«Šío¸m1xºroòdŒtµr²Nªxu^6…|Iwï(‘~öy@"š€yΦmg/pöšòjXr܈öm…u[vªp`vxc6s^w‘N>wxÑ6b{µyç(!~ÁzS"€ z~¡pd¨| —3gÏ| ‡~kX|ñuPnž}bcr |ÒMžv2|q6&{s{º'×~ª{-!º€ zí¡Îbu…Ø•e¯…Ã…6i”„“t†m%ƒyaÄpã‚Luo€/5c{3}†'k~ {×!s€{ ¡7`ÔÅ”CdBŽÃ„ãh,Œ‹tkÞŠ€`ãoà‡ÕK]tº„;4@zñ^&ï~š|u!F€*{:œH_L›¢’Wb°˜ß„ˆff•ûsyŒ°€µn¡x²€oÉm¶àr'aßût'R½êuÇ@Ü€Bw3.Ë@xØ$Cæy®À‚.z€­~TvAx¢~&w'm;~zxÍ`§~ýy¹QÇ7z<@„¯z`/M€ózv$ªÊza ‚'zT{à}0~‰vO|­~»k;}!~ô^”}­P{~o~uA²6} 0€±| $×¶zî ‚(zr|W{‡Xt!{[†ÓiE{ê…Ã][|>„°Py}{‚ÝBa~£€è/ý€o}Ž$–¨{[Â.zj|dz5‘OszlÊh?zÝÃ[­{ ‹vO§|“ˆA¨}û„‚/ €.~ü#ù˜{¯Q‚2zJy y˜™A}"‰Ñ-u¬Q#Aa|AÝ‚zx,w^p­‹b¡f¢‰†gPZ{ˆ9jwLe†¿m?"…&q€,îƒÎu†"-ƒwû¡‚ÔyvÉ‹Ce=oÉÕg®e^ˆIk-Z»‡4n7Læ…ØpÙ=¢„—s´,^ƒ‡vÜ"q‚þx¥8‚Åyguw‰/m máˆnÔd¤†ÒpáZ[…ßr¦M„ùtž<ƒöv[,Tƒ6xS"é‚ÚyXÙ‚µyÄt"‡3tplä†kuâc …w|XÔ„ßx;L‡„Vy<¹ƒtyu-‚åyÖ#Ž‚ºyóC‚©yþoÙ…Ø|kN…>|–a¿„l}GV¥ƒÎ}vI惇|ç=Ù‚ö|r.´‚Ÿ{G#â‚£zkX‚¦z p„ƒÌjƒýƒü_ ƒ$ƒRTó‚y‚hIo‚³€É=‚”W-‹‚{|Š#r‚˜z½‚¨y÷pƒcŒÇhm‚ÂŒ^‚;ŠT(̈°Ií¤†`<©ä‚‚,)‚D}¸"‹‚zñv‚±yÄnÄ‚Á”ðfê‚;’Â^LÒ˜TÑnŽIY8Š“;j…'*º‚~»!§‚{Ó‚°ylëÔœfS ™˜]a–jTV’[H2€ÛÅ9»‡|)œÝÌ!‚h{Og‚¤ygi–—0^òc¯”ïbD[~’Pf"PªÈi¬EŒÒlø: ‰©q*†(uH e„2wÌLƒ`xãhü•VdÁbØ“pfßYõiØNûޤl‰E:‹ßo£8ùˆúrÔ)©…ÑvT È„xOƒUy&h`“Ôk’aè‘ßmHXx¡o(NÿepýEv‹s08cˆ[uO)Ã…xwž!XƒìxßÁƒFyegH‘Þr`1FssWdŽ]u'NrŒ`vCDŠ}w†7ò‡×x**[…'xö!òƒÇy_Kƒ6y‰dÝoyD_ŽÿyÌVÇ>z*N)‹=z½Cf‰{{#7¦‡IzÒ*¡„çz6"2ƒ¬y¿‡ƒ+yŠd’l€¢^^Ž?€oUhŒBÉLNŠcˆC…ˆÁ 8†ý}¥*!„·{Y!ÔƒšyýEƒ'yjaŽˆR\3Œê‡šT7‹g†×K—‰‚…LB`‡÷ƒG7†]€M(ý„†|\ 郒z‚ƒ,y(a%OUZ‘ŒDÐSŠÒŒ7K§ˆØŠAÛ‡P†Ö5Ö…ì‚~'¶„g},êƒz'¶ƒ-xäa€Œ!–<[i‹Ò”ŠR‘Š}‘¢Kˆ©Ž&B‡3‰Ý5¹…ì„}&ó„L~dƒrzHAƒx´ZÓ¢7_=TÍŸÚaPO½œ^dkÜ1áŽëo·%Úˆßt† …{wg¤„ x£[# ÓcDTÚže¡M;›5hND°—€k K6”ä‚vB’U8lÌ0„‹3}³%ÆõzßZ„¦y4¡ƒ®x~S¸™%Š,O¾—8‰8JK”q‡µB‘S…·9Ž`‚ø/‘‹$õ†é{н„”y5ƒ—x9Q˘^rOý–ÛHI“”Œ£BE‘0‰u7÷Žz…Ÿ-¤‹3$R†ð|f„~y6ăyxP¬n^OK©X`èDޤâc> *fZ4š¶j#,¦“ënN"V‹ws’†Äv礄ÄxVO~ªÊbpJ§Ód•C‹£ÃfÕ<_Ÿis4±™Ílp,D“voö"#‹kts—†ËwD„ÖxCO6¨ÉgdI’¥øixD"¡îk <)”m5˜ÑoT+Ï’¥r'!¬‹#uaņÉwQ•„îx,O §|l¬Id¤ßn C„ „o¡<'œ¼q4Ò—’rÃ+O‘qtº àŠ¯vLg†·wtB„õxO>¦vrŸit–:ø›ôu!4ù–‘uù,ÿíw""_‰ßw—v†RwãJ„Èx M¼¤ÇxïGÆ¡×y.@Rž‡ye:;› yc3Ü•ßy4,ð.yD#-‰Ux¢8…õx2/„‚xN3¢€(Hä €YA²'j:™u~1ß”Ï|*»„{+"͉@ymó…²xUØ„2wÜM¡¿†èG{Ÿù† A=œi„79Șqø1=”¡€)Oé|Þ">‰Myÿ·…ŠxRºƒõwœM­¡:ŒÅE¥Ÿz‰Ö@Zœ9‡F9ô—¯…1”à‚)øï~c"‰Ezp„…kxAƒÉwU¥šcSSò™e¼Y‡¬h©_HtÉk¨dæa‡oGjUL‘s°oQ5;y©tb(T}nwH"Ü x„¦9^†^`—æa©bY…¬eÚgDuØi±j½`´mÇnµKÉs!rY5y[v?'í}GxQ"U~úy/¡_Yšj ”Õ]‰lš„$b¡oës=gIq©_ol-sfK2qöuÐ5 xÅxC'“}y_!É~üyÏŸVävº“CZÌv‚¼`8xp›eGxæ^‡j‘xØJàpœyŸ4Úx]z5'&}z8!Az28S³N‘­X3€G€D]Ùão°cA3^i ~°JJoŠ}4Çwý|&­}zÛ ºZ‡‘“xW__Îivdl:Xj ‰ÛEp¢…e0wy{$À~{þÏ€>zƒ¾T„¬Yš¡vî^—hdcJ”Wåi$¨Dºp‰/02xÚ2$Ä~|ð€Wz”ÎT §ƒxW±¢Ûu\ÙžVgbU™áWh„”ECêoµŒ90px‘‚«%~ } R€iz¡’”poV¾…ÄpÐ[Íxzra}k{s‹fY‹uÊjçDxèoº0¶|ñt«%[kw^ }€|xºlÛ_/„½mücÐwoágÿi‡m.5z«€N$ |%¥z\„[ü¢ß|>^öŸ„n¿c›b`Fg{–ÓR'l‰’@mrÊ•/zQ¾$£|– ,zd‡LwNWð{+wY]InCw¯bbÅxlfXSÂyèk+B${Ûo«.ž~¯t‰#«€rwO 3x}…tB_šx¦t¬c¡mâuÚg¼a÷w jçRûx¤nxB$zôr.¼~Quõ#€[x! :y €”qh…x¢rk£msÍn `?uMp©QÐwHr¬Bzté.Ô}ìw—#à€Dy@Dy›nq‘wÑo~slàqot¶_êsvAQuùw^Ay,xD.­}™yO#ï€7yÌZTyþ|KkÂzeuîmbz°kzoœ{\^Éqû{ÉP^tß{ì@‡x‰{±.\}]z÷#Í€4ziJiz)zäiˆ‚òs¥k¥‚Óin/‚w]Bpª‚O¡sà€ú@Qwî4.}(|Š#…€6zâ‚z,{Zgr'rüiÍŒ´gblr‹5[SoY‰,Nƒrø†œ?xwD‚Ü-[|å~#,€1{HÞ˜zxÇfy•¢rÈh唿g&kY‘ñYØnŽuLÃr*Šê<ºv©…²,´|Šb#$€{£ø£zwdeJ¦rgÒ›§e˜j„˜-XQmv“KpâŽÌ=/uÞˆe/{Ö€Ü#Äó|­yù|]~3X#r_}•]f›}3bTZ§}xf]M~k>H~Ýoa,e€_t?"([w2ÔÈxuyŠ{Ñ_†oö{1cfR{©fÏZÖ|jLä|Ùn$=m~q¸,9€u²"_Gx1ËxúuÍy&gÆn^y j emyÏlþYŒzcoÖKø{Ÿr<Õ}Ntf,@ºwI"«0xÙ–Ïy€tkuúpmˆvËq®c¡wÄsúXÿyuKvz£v@<·|˜w€,kxé"üy•ÚØyÙrt@x9kõtöy bJvyéWwzAJfy‰z’={úz¹,î.zs#z!ßèyúpòr5€¤iÜsd€Ú`Gt‘€EUev6€IWxˆ1={b}÷,±~û{ß"Úz„¨ÿyîq+pcŠ—gÍqç‰T^s<‡çS…u.†œHØw¤„Š<Æz¬y+ó~¼}A"XzÎK‚yÄo o’i7p¥‡_1rSŽ´S›t~Œ GÓvýˆ¹:¾z#„4+ ~o~p!þ{‚%yl´n‰™KgÒoÊ—x]ƒqš”JRšsŠpFbuã‹Ù9Yy‘†K+~ !ó€í{Sú‚+ym£†‡Xüf„»]i]ªƒýb SƒmfBF ‚Ój$9;‚an¼)æ‚@sÙ ¨‚Hw¶‚Lxll„_[eq‚½b=\þ‚weíRT‚iÇFf¾mn8‹¬q)¯ûu[ ÿ‚1wÕI‚Hxâiæƒgc7i[æ€ÍkËRt€˜nMF#€·pþ7…€ös¯)ʦvä!|‚xŸå‚DyXh~unAa~~ðo¾Y“~ùrsQŠ@spEoÎu88€[v¤* Txj" üyIU‚Dy¤gx|áu&aù}=v}Xµ}„xO´}õxvCþ~Ðy 8åÇy™+LyÐ"QðyÂz‚Ny¸b{||º`í{³}ÇW±|9}ÜM||ï}ÃC }õ}48Ã@|*¿€ê{ "ñz J‚cyŸc5z†]Oz{…‚Uˆ{„ Ká{σ¯C|ÿ‚8©~‰°)Ì€¹|:!Eûz7±‚ƒy^c²xʽ\yZŒETüz+ŠÏLŽ{ˆïBl|O†7 ~ ‚=(™€„}; vüzT‚˜yb«wŸ”ì]x“ TºxçRLæz;A®{‚‰|5}£„P'a€3~: àzŠÞ‚—xø_kbYHY9Ž=]/SVŒÅ`¨K‹Šådú?)ˆ‘id4J† n:'$„~s±ƒMvöŽ‚Ìx[^ Ž>_YŒ”aŠQ ‹.d¿H“‰¯h5?T‡¹lD4"…÷pO'"„.tñŽƒ/w›U‚Ãx½]Œ5eýWƒŠïg–P ‰žjGìˆ?l•?…†Ëo–3û…Qr¾'kƒÖvR :ƒ xI+‚·y\؉¶l3V$ˆßm˜Ni‡àoÀFÚ†àqx>8…ásu3ᄲuu(ƒ~w² å‚êxÝÖ‚­yXZ•‡ùr›Vg†Ýs©N†Gu Eï…­v7=…w63„x(Uƒ5xñ!@‚ÓyD.‚¬ycT»‡'yjU†zKMÅ…JzD´„ózü;Ñ„Zzý3Iƒ™zÊ( ‚ÿz ! ‚Ëy‚¹y@T¹…tlS„‚sLV„ AÕj˜7˜×mÒ.žŠqqb$E†xu|æ„:wɱƒHxÁNú•Üi²IQ”OkmCc’!l¹<­šnÂ6UŒÁqX.-‰sì$¸†v»Å„ xC¿ƒ7xçL¥”foˆH’ƒpXB;£qF;ŽšrÒ5$‹Ùt´-õˆµve%:…†wç 9ƒØx¡ƒ%xìK¯“˜vhGÓ‘¿v§Aw¯vŽ:!áw03ˆ‹'x-¡ˆxÅ%e…+xï 2ƒ´xÛôƒxÎL‘÷}”GwO}?AÛŽŠ|·:}Œœ|c3Š9{î,Ò‡ž{$$¹…yÊ›ƒªxéhƒx‰IVNƒDé‚c@N¶²:“‹“€­3X‰p,O‡X} #½…zeѶxÛÁƒ!x9GêŽôˆvDTŽÃ‡¤?Mó…Î9~‹Ðƒî2a‰6k,›‡~e#D„þzñ]ƒ¯xßYƒwüG¡¥ÙWýCð£Zà<åŸ&^k5ïšzb-ò–Hfà(Ûtl\!Z‰NrÌb…Šv‡̃ñxE±£þ\tA]¡Ç^Å;õž/a¬6c™Ñe/©•:i+(ymÕ š‰ps‹\…”vטƒñx=DV¡3aŸ@”ŸÇc—<2œOe­7©—õh“0ß“¿l'à2oñ `‰&tŠÂ…w4äƒïxWDsŸ¯g@T¤h{;nšxjM6‹–Ñl„1|’uo?'4Òr{ Òˆuu³…@w•çƒÞxiD>žMlª?Åœm›9Õ™'o,4Œ•íp’0x‘Œr})ÈŒNtø"›‡švì „áw÷Žƒ¶xiCÑœ¦r´?fš‰s8á—6sÕ3”ñtž.J·u¡*Œ‹Yw(#ñ†þwúÈ„x@ƒ„xZD@™ÄxÒ?l˜òz69‹–šyÕ3“ÊyG,–Ûxç(B‹xæ#L†îx¬€„dxXɃSx0Bo˜ó=Ü—Ö#:4•S~ç3…’}{,]f{Ø&‹Îza"‡!yð„exBƒ=wéAà˜Ñ…p;5—£‚»70•>g3<‘œ€.Ž—~D(S‹ƒ{®!€‡Iy]\„xxƒ>w˜š©^yMïv`¢SÐ~›c¸Z–mãg`\XkfFH’pœl;2Ox;r¯%æ|ÊvK ¬~ºwÑš-Y*XHŠ~[í\|`0aèmÏd´f"Z“iyjêG®o¿o[24w´tY%Ð|‹w& Œ~ŸxT•ËSÉdcˆWlgy¸\~jtj²aÍlåX›g”oÆFSnrê1Õw!vN%ž|_x a~¡xÖ’Ooò…ñSïpdw)Y³rÇg"_GsáVÄe©tÞEm0v·1hv¦xR%S|axõ ~Öy3êKCyB…—Pˆy užVñzhf\ùz/UÜcézOD®kèzš0üvBz7$å|„y¯®.ymóG̓R„ÚMr‚©t±TR‚dåZЀìTÿbA€.CØjâ~¡0v|$0|°zV!…y™ŒÜEkÕ€+K#ŽKsR‹ªd®Y‰RTt`ņÉCjƒ-.èuá~ #M|Î{_Áy¹‹´Cq™Ì~ÒI —q]P)“ØdWv“T_ËŒ)BŠil†È.]uŽÏ"•|Ä{›‘ØyΉ‰B†¢A}´GRžŠrNVšºc°Uä–nRË^´€@ hÓ‰-÷u8"|¢|ÍÞyÝ“cðOZ†õeWTÿxrg—[ghúj;aXImÏfzCïr¿l—/ûy°rÔ$½}±vBùcw´â_DXr„9aH]cuÊd‡b[gchHf”VìlšjàDìroZ0dy1tY$°}„w½]xIŒµZd&ì]fÆtaLiÙeceÊl¾U|jÂo§D“pËr³0Hx«v.$‰}fxŒlxÛ‰U¼n¿8YŸpZqà^}qÙcc[s?T8hËt¯C‡o}v`/Íx8x$G}hxì^yA…iQÍx}4VjxÙpc[Öyƒb…a/y S0g6yßBŒnjz$/=wåyì#ì}€yžâyy„ÉNò‚2{™S˜§o&Y'ax_€RXeØ@AÓm¦}÷.w°{±#j}¡z8­€(y•…"Kqz-Q<‹¥mBVÁŠ.`H]Y‡àQ–dˆ…cAlæ‚+-Åw‚}‘"Å}½z΀cy¡ƒ±J=–Òx¸OŠ”nlUk‘¡_f[㎔PòcdŠÈ@ql:…»-=wI+"A}Ã{M™€„y¨pI7Ÿ¦wM¼œieS‰—Þ]²Zh”P:bfæpà} ,úyš{9"œ~µz 4€àyŒ{ S߉îqÛXF‰ f] ‡ÜZb’…ãLûhÓƒÉ=ûp"€ô,Kyi|ï"%~Ïz‰×yƒyjRH“Sp’V”‘eŒ[ŽîYÙa)ŒLlgµˆ×=o„>+ÁyA~`!Ê~ÞzïŠ?yxwŠPâ›õnsTí˜ÔaàYÿ•Xh_Ó‘>LÚf¤=€oR†É+Ðy –!¡~ã{IJXyqzNpîSïqÏqPX f¬r1\ü[6s aµMuñg=^yl©+Å}=rÂ"Çv÷€ßw‚xwmPZ›oîn]òeÅoâbWZVqÀf.Lƒtijh=(xo+»|Ýt/!þ·wã€íx4u¡iac2mîj±eˆdim4hªXo§kJºrœna<²vÍqÍ+·|ruÕ"ªwùäxÝsÇe—kôl²g—mÂbj0oŒVnm6q)Jp÷ríY7—>d)\˜”ÂZM`ÑîQËe›ŽRFòkŠ9:rŠ„Ì*Zzÿ~ !èzËþy$o·wƒTOh°wwXd^wÜ]jSx¨b%G@z(g$9h|6lt)Ê~÷r‹ »€±vâownt¤ZKg‘tv]7^puÄaySyvÐeÿFËxµj<8Õ{Hn½)r~¥sú ¾€¡vïyx.iÚqqaùc­q¨d#]­z÷pä4}3s¬'ÚvË QWxz4øy.^¤syosXGt÷pôOývUrnGÇwás›=Öyßtó3á|v’'Äx% Xxöw‚yMZÈpÝwQV`r„wïNdt¡x3Fgvxè<óxÎy'3O{Ñys'sjy^ tdyCw‚9y7Y>o€@Sˆp\?LrCYt¹~Ÿ<wº}Ï2º{|&×.zš tyu'‚ixùXìlÿ‡¥So"†zKùqm…HD'sòƒÌ;uvÞ¼2#zt&{~ñ{ž}y•¶‚x¹Wþk”Ž…RÖm©Œ‹Jzp7ŠCês ˆ:áuÓ…,2yÚ &Ò~½|orzyµW‚¤x‰V6‰~SÖQd‡ÀW…K †´[¨DÑ…î`Á:Ž„àeù/‰ƒðkŠ#æƒrm‚ƒu÷°‚NwŸTχYP†\%I¶…\` B „‹d69ЃÀh°/»ƒ,mŒ$j‚¦sa‚^vÁv‚@x0RÅ„D_©M߃¾bHRƒve(A%‚ÖhW8Ö‚KkÁ/³‚Yoí$ò‚EtÔä‚8w”W‚3x¼R˜©fKLõIgþF„Bj}?–7lÔ7¾(oc/k–r–%eëv?–‚x?‚0yR›VlçL;~Ôm¼E`Co‹>’Ùqr6—€Qs2.¾€Þu?%ˆœw~ÿ‚ x°Ÿ‚ŠijF9ω±l‹4Þˆ½n¤.;‡apÈ(½…ys#Uƒ¬v¸Ï‚¼x_F‚XyC1Џp%=‰ªpq9ˆgq„4 ‡}rã-Œ†Wt:)6„Ÿv #݃>wÊ 9‚žx  ‚^xøAz‡ûvÓ>ˆ w98÷‡ww3†jw|-°…x(õƒçx~#šƒx± !‚Ÿx·‚wx¸?Æ…â|Z/ŸóQv;œªT_4ÿ™*Y^.ã•È]ï(S’cZ"¿tiÎ6‡Ìq¡„œuäýƒCwÁ=¡V®9³›HXÿ4‡˜o\}/À”ç`»*ZÒe½#ñŒÔkvH‡’rn™„hvsƒx(<šê\9Y˜¾^4]–u`R0s“ d*×h~#$‹çmv~‡ sú„wm‚Ôx9™˜{aB6—–kbÖ3d”-dï/k‘?h(ýŽk¶!˜Š¬o㇆]tσ¾w¡6‚ŸxÒ9ì•úfm6®“éh2w’“j5-˜ßl9(ÑŒÔn÷$þ‰UrV" …{v ƒ\x9‚wxê9Ñ”l6#’åm1>°n–,†Ž¦pC(©‹‰r9(SˆtÚ%„ªw[!:ƒxg³‚axÜ9™‘Är/5ÖÔsŒ1f't,³vtÈ'ÜŠnu~&‡v¥$7„…wü!_ƒx{ !‚_x¯8íëx95¶ŽºxÏ2‡iy?-3ŒxÜ&¶‰ÿx0!ɇ¢wÉ" „×x@ ìƒ/xc H‚zxm93ŽÞ~G4ºŽ }1S|¸-ùŠÿ|)u‰zÒ$º‡˜ym!è…+x® ƒlxI ‚¥x““Z’I&…ç\Qw_WVãg6b™\øW¬grbêEžni0,wpÝ#”|^u(@~Šw’/T^SƒIWYYth[‚^g`bTV¾eªgLDdlÕl–0uôrS#»{Ìu߈~Mwc‹~NH`€êRUcUt W[eÂd@\½hfSÝc=lÖB2kŽpb.Ÿu?tO#‰{…v¹Ë~=wˆ¯H¨k,öM­kõoSÁnT`°YêogQøaLqè@kjstE.7têv€#m{Ÿw–Ë~†x ‰÷CÙu}±Igtwn Pzv_b1WvÔP™_kw>åhiwð.‚tux#T|xi{ xG‡@g~®yüF~ kÇM~}ÿ_Tþ}XP#]|œ?g@{Ó-t‚zo"–|{y7ÖÀx¤‚Z=бx,C‰ilJv‡W^R…™\g™Eù•ž[gMá’NWæ€>µd§‡@+Ùrñ±­{îzú<Ñxù‹é_IJo~"`xP¹nôbÝW“`ØeÓ]ÚRjj¦c»@Ðpåj-âxjq"Î}tþ %vª‡„YÛT{w\XòmŠ_X]ß`'cb†QWh¼gk@÷o&lž.pwŒr\"Ü|ÒuÖwN‚þSÛ_îy.WHbfl[³eC^Ô`ÂhlOÄf~l?´mŸoÚ-Evût@"˜|®vÍ wáóNvj0wDS3k jÍX„lö]E]önìN^dEq>qlDs},§v’v<"n|Âw®gxG~„JQséuYOqsIiÔUZto\W[fu{Mbzv>=—kw7,€vEx"K|ýxkè×x†|´FÖ|ös´Kð|whR-|QZ9Xâ{öL,`Ä{”=[jQ{2,$v)yï!Ö}Byi€Hx®{GCE‡ªrtH£†ÕeÀOg…Y2V“ƒ:L,_Ž=\i„p+kv {È ä}sy¤g€œx¼y@©‘$oFs?c§MCŒžXT†‰ëK¦]n†æ=hq‚Å*»uÍ}OÎ}z"€Ãx¿w>p™hnWC”–½`ÌJ+’óUfRC}J'\‹e<{gâ…{*:u~‘Ç}qzÛ€ÍxÁReMet‡eôR+gh X>ZUj¦^M´ngcË<­sƒj[+>zq!×~(tÊõ÷vD|f`°Uêrbb7YRfd†]×Y»h!bxKÐlˆgT<…rlŽ+^y„r!™~uÒ{ñw6ynZä`p`]‡b e3a'd½Y3eµh(J†jkk²;¸p£o”*õytt"6Oru*zDw2 ·0xG²Hx¾i¹Vžx#aðZxnV¬^UxžLêcGxuBJiux†7pÎxµ*myüxª ¯Tx·–•x¼g1S‡í_VÍnVg[†€VMÃa-~ïBPg}À5žoÒ|u(yózgú’y <îx•fûP÷Š­_TK‰·VéY‰‡¬M[_€…@²fÅ‚Ð5¸oÅì(cz({ä>Ðyje‚4xdfMMŸ’C\nQàTWqqI´]Á‰é?¨eá†h5ƒoî¼'2zH|©>þy‘y‚ix@ggq‰Qa°qÀT´V¯sYâL€t^XAívcw3Ôy¥iã(Ý}hpÃæ€'t¡GvJfˆnŽV `2o Y‹VÛpZ]ÄLar/b@5tíf¯37x¿l&Á}Wr>B€uÀ Aw>e jR^]fkƒ`/Tèmkc’KHoäfÔ?s8j2‡wµnÇ&:|þsï€vÛ Pxbf e½[ûgíh"SÙj‚j)I.m„lR>qfnŠ30vsq²&¿|’u_€w­7{x™`íbl£Z‹d o Qúg·pSGÐkkqx=ËoßrÃ3‚uyt­'W|AvÛ±€x3f³xÇ`^uRX¸a1vHOÿe=vxG‚iLvÄ>?n0w 3t{wš'!| x*²€6x‘}÷x¿]ù[ý~÷X-^[~,O¶b?}G€fï|Þ=Ll{ü0=sŽzì%ñ{Þy§H€`xâX‚Cx[ûY3†¼Vw[…ÓNÖ`9„\F‰e‰‚^;‡k²€Z0÷s}ÿ%¥{Åz欀„y®‚xPYûUÏvU_YªŒzM$^¯‰ýC;d@†Æ:jÃÒ2Zr€8%2{©{´É€šy)‚±x\£yÕP0WRyeT"MóynY|Fy§^;;“{'cT1š}eið%ŸpætªÝ¥v}Z¢v¯V:UvÄY MBw:]VDœx4a¦:áyðf60$|Zk$|=qþö€êu¿3šw\Xjr§]Tnsù_+LtÉb¦Cmv!f: x-iœ/À{>n$|~ÎsŸ;€ÈvÒ˜x,W‘nÎdRÐp~ešL“rYh$Bƒt(jÄ97vªmY/ùzNpð$Ù~xu- €ÁwŸ¶x©VPk|j}Oíml_I1o¤nArMoÔ9?uiqg0EyŸsø$í~Kv|ã€Ñx_áxÓTüh r5N–jsZG?met@‡pstè9‚sÀu¥.ÛxÅvŠ$j~*w›ô€ìxn©‚xÉT'e¥{FNögzûFlj€z¹>ÚmËzx8•r;z0,Ëxay©#Á}ÕxõÚ€üx¯À‚Sx”Q—b삚M‚euÝEóhú€Õ>lài5Rqn~"-*w'|J$}yz­xÐb‚‰xQO`‰;LÈc¿ˆnFÝhT†r>#lJƒÄ5>ptq0uvq~e%ž}NzÁpxÚ¨‚±xM¨„OÐK ‚ÜSD̬Wï>”£]75·¦b£*'Ëi1 AÀp\´ÖtÙÈâvÆMY€ÌUEI#€EXBíá\*<|ß`”5 €Fe[+£€²jä!¤BqÅ•¡uÓ€ÊwŽK¨}a[dH-}1]þAë}†aS:Å}ñdÖ4"~¹h+Úºm5"y€ÎsKuqvÐ`·xNJ›zCalGxz¬cBC{šeÚ:t|7hø2}*l+U~ôp"å€ytË/Xw•8¸xÅIYwHhAEhx$i?VySk9ßzfm–1Ç|oÚ+\~@ré"÷€8v¨VxäÑxðJ…t&o4D>uoè=lwCp¶7Ùy r50¿zis±)Ê}uL"¤ïwõ`x\púxæIÉq5vµDõr¿w<¹tåwk5øvÍwh/`xòw¾(«|;x "†ŠxI6cxÑ‚,x²F¥o}¦C½q:}<<s~|‘5ëuÊ{È.ðxc{")A{{zG#=7y:†ix¬æ‚ZxqERm¡„7@Ìos‚ã;¬rh26su†/ãwæ~>*Âzó|$˜ yõÞwx¸Å‚x1A‰Og<«ŽýRy6Vá2`Šî\.,xˆ}aé#Û†UhÐ_„ pcT‚Åu‚ü×w”ø‹xý<(…:d*7Ü„øeo2„;h?.¯ƒ¡j«(èƒomS$ñ‚Òq!0‚u~¬x2ˆy,<>‚ëk7‚pl@3hûmy/O”o )‰pè%hsr!Ä~vó–x_-¡y$;‡Ïqª7ã^s3£fsÙ.õsï(€$t¢$Æ€iuá"w‹ –šxˆòÏxó7­~îwƒ6 ~¬xD2D~šx=-a w»'Ôòw§$«€>wá"®xa!$·x l‚xµ86}|â58{ð|»1j|{ï- }Žzú)«Üz$ì€Äy…$-8y::Å; ;M;‘;Õ<<]<¡<æ=*=n=³=÷><>€>Å? ?O?“?Ø@@b@§@ëA0AtA¹AýBBB†BËCCSC—CÛDDcD§DëE/EsE·EûF>F‚FÆG GMGGÓHHZHHáI$IgIªIíJ0JsJµJøK;K~KÀLLELˆLÊM MOM‘MÓNNXNšNÜOO`O¢OãP%PgP¨PêQ,QmQ¯QðR1RsR´RõS6SwS¸SùT:T{T¼TýU>U~U¿VV@VVÂWWCWƒWÃXXDX…XÅYYFY†YÆZZFZ†ZÇ[[G[‡[Ç\\G\‡\Æ]]F]†]Æ^^E^…^Å__D_ƒ_Ã``B`‚`Áaa@aa¿aþb=b|b¼bûc:cyc¸c÷d7dvdµdôe3eqe°eïf.fmf¬fêg)ghg¦gåh#hbh hßii[i™iØjjTj’jÐkkLkŠkÇllCll¾lüm9mwm´mòn/nmnªnço$oboŸoÜppVp“pÐq qJq‡qÄrr=rzr¶rós/sls¨såt!t^tštÖuuOu‹uÇvv?v{v·vów/wjw¦wâxxYx•xÐy yGyƒy¾yúz5zpz«zç{"{]{˜{Ó||I|„|¿|ú}5}o}ª}å~~Z~•~Ï D~¹ó€.€h€£€ÝRÈ‚‚=‚x‚³‚îƒ)ƒdƒŸƒÚ„„P„‹„Æ……=…x…³…ï†*†f†¡†Ý‡‡T‡‡ËˆˆCˆˆºˆö‰2‰n‰ª‰æŠ"Š_Š›Š×‹‹P‹Œ‹ÈŒŒAŒ~ŒºŒ÷3p­éŽ&ŽcŽ ŽÝW”ÑKˆÆ‘‘@‘~‘»‘ø’6’s’±’ï“,“j“¨“æ”#”a”Ÿ”Ý••Y•—•Õ––Q––Η —K—‰—ǘ˜D˜ƒ˜Á™™?™}™¼™ûš:šyš¸š÷›6›u›´›ôœ3œrœ²œñ1q°ðž0žpž°žïŸ0ŸpŸ°Ÿð 0 q ± ñ¡2¡s¡³¡ô¢5¢u¢¶¢÷£8£y£º£ü¤=¤~¤À¥¥B¥„¥Æ¦¦I¦‹¦Í§§Q§“§Õ¨¨Y¨›¨Þ© ©c©¥©èª*ªmª°ªò«5«x«»«þ¬A¬…¬È­ ­N­’­Õ®®\® ®ä¯(¯k¯¯¯ó°7°{°À±±H±Œ±Ñ²²Z²ž²ã³(³m³±³ö´;´€´Åµ µPµ•µÛ¶ ¶e¶«¶ñ·6·|·Â¸¸N¸”¸Ú¹ ¹g¹­¹ôº:ººÇ»»U»œ»ã¼*¼q¼¸¼ÿ½G½Ž½Õ¾¾e¾¬¾ô¿<¿„¿ÌÀÀ[À£ÀêÁ2ÁyÁÁÂÂO—ÂÞÃ%ÃlôÃûÄBĉÄÐÅÅ^Å¥ÅìÆ2ÆyÆÀÇÇMÇ”ÇÚÈ!ÈgÈ®ÈôÉ;ÉÉÇÊÊTÊšÊàË'Ëm˳ËùÌ?Ì…ÌËÍÍVÍœÍáÎ'ÎmβÎ÷Ï=Ï‚ÏÇÐ ÐRЗÐÜÑ!ÑeѪÑïÒ4ÒxÒ½ÓÓFÓŠÓÏÔÔWÔ›ÔàÕ$ÕhÕ¬ÕïÖ3ÖwÖ»Öþ×B×…×ÉØ ØOØ’ØÕÙÙ[ÙžÙáÚ$ÚgÚ©ÚìÛ/ÛqÛ³ÛöÜ8ÜzܼÜþÝ@Ý‚ÝÄÞÞGÞ‰ÞËß ßNßßÐààRà”àÕááVá—áØââYâšâÚãã[ã›ãÛää[ä›äÛåå[å›åÚææYæ™æØççWç–çÕèèSè’èÑééNééËê êHê‡êÅëëAëë½ëûì9ìwìµìóí0íní«íéî&îcî¡îÞïïXï•ïÒððLðˆðÅññ>ñ{ñ·ñôò0òlò¨òäó!ó]ó˜óÔôôLôˆôÃôÿõ:õvõ±õìö(öcöžöÙ÷÷O÷Š÷Å÷ÿø:øuø¯øêù$ù_ù™ùÔúúHú‚ú¼úöû0ûjû¤ûÝüüQüŠüÄüýý7ýpý©ýãþþUþŽþÇÿB„ÆI‹ÍQ“ÕXšÜ`¡ã%g©ë,n°ò4v·ù;}¿ B „ Æ  I ‹ Í  Q ’ Ô  X ™ Û  _   â$f§é+m®ð2tµ÷9z¼þ@ÃFˆÊ MÐT•×ZœÝ`¢ã%g¨ê+m®ð1s´ö7yºü=ÀC…ÆI‹Ì OÒ  T – ×!!Z!›!Ý""_"¡"â###d#¦#ç$($i$«$ì%-%n%¯%ñ&2&s&´&ö'7'x'º'û(<(}(¿))A)ƒ)Ä**G*ˆ*Ê+ +L+Ž+Ï,,R,“,Õ--X-™-Ú..].Ÿ.à/!/c/¤/å0'0h0©0ê1,1m1®1ð212r2³2ô363w3¸3ù4:4{4¼4ý5>5~5¿66A66Â77C7ƒ7Ä88D8„8Å99E9…9Å::E:…:Å;;D;„;Ä<>?>>¾>ý?ââÁããDã†ãÈä äLäŽäÐååTå–娿æ\æžæáç#çfç¨çêè-èpè²èõé8ézé½êêCê†êÉë ëOë’ëÕìì[ìŸìâí%íií¬íðî3îwîºîþïBï…ïÉð ðQð•ðÙññañ¥ñéò-òqòµòúó>óƒóÇô ôPô•ôÙõõcõ§õìö1övö»÷÷E÷Š÷ÏøøZøŸøäù*ùoù´ùúú?ú…úËûûVûœûâü(ünü´üúý@ý†ýÌþþXþŸþåÿ,ÿrÿ¸ÿÿD‡ËR–Úa¥è,o³÷:~ÁHŒÏVšÝ!d§ë.rµø <    I Œ Ð  V ™ Ý c ¦ é - p ³ ö9|ÀF‰ÌR•Ø^¡ä'j­ð3v¹û>ÄJÏU˜Ú`¢å(j­ï2u·ú<ÁFˆË P’ÔY›Ý b¤æ(k­ï 1 s µ ÷!9!{!½!ÿ"A"ƒ"Å##I#‹#Í$$Q$“$Õ%%Y%›%Ý&&a&£&å'''i'ª'ì(.(p(²(ô)6)x)º)ü*>**Á++E+‡+É, ,L,Ž,Ð--S-•-Ö..Y.›.Ý//`/¡/â0$0e0§0è1)1j1¬1í2.2o2°2ñ323s3´3õ464w4¸4ù5:5{5¼5ý6=6~6¿77@77Â88C8ƒ8Ä99E9†9Æ::G:ˆ:È; ;I;Š;Ê< >M>Ž>Î??N??Ï@@O@@ÏAAOAAÏBBOBBÏCCNCŽCÎD DMDŒDÌE EKEŠEÊF FHF‡FÇGGEG„GÃHHAH€H¿HþI=I|I»IùJ8JwJµJôK2KqK¯KîL,LjL©LçM%McM¡MßNN[N™N×OOSOOÎP PIP‡PÅQQ@Q}QºQøR5RrR¯RíS*SgS¤SáTT[T—TÔUUNUŠUÇVVAV}VºV÷W4WpW­WêX'XcX XÝYYWY”YÐZ ZJZ‡ZÄ[[>[{[·[ô\1\n\«\è]%]b]Ÿ]Ü^^V^”^Ñ__K_ˆ_Å``?`}`º`÷a4aqa¯aìb)bgb¤bâcc]cšcØddSddÎe eIe‡eÄff@f}f»fùg7gug²gðh.hlhªhèi&ici¡ißjj[j™j×kkSk‘kÏl lLlŠlÈmmDm‚mÀmþn±±À²²B²ƒ²Ä³³F³‡³È´ ´J´‹´Ìµ µOµµÑ¶¶S¶”¶Ö··X·š·Û¸¸^¸Ÿ¸à¹"¹c¹¥¹æº(ºiº«ºì».»o»±»ò¼4¼v¼·¼ù½;½|½¾¾¾B¾ƒ¾Å¿¿I¿‹¿ÍÀÀPÀ’ÀÔÁÁXÁšÁÜÂÂ_¡ÂãÃ%ÃgéÃêÄ,ÄnİÄòÅ3ÅuÅ·ÅùÆ;Æ|ƾÇÇBǃÇÅÈÈIÈŠÈÌÉÉOÉ‘ÉÓÊÊVʘÊÚËË]ËŸËàÌ"ÌdÌ¥ÌçÍ(ÍjͬÍíÎ/ÎpβÎóÏ5ÏwϸÏúÐ;Ð|оÐÿÑAÑ‚ÑÄÒÒFÒˆÒÉÓ ÓLÓÓÏÔÔQÔ“ÔÔÕÕVÕ˜ÕÙÖÖ[ÖœÖÝ××`ס×âØ#ØdؤØåÙ&ÙgÙ¨ÙèÚ)ÚjÚªÚëÛ,ÛlÛ­ÛíÜ.ÜnÜ®ÜïÝ/ÝoݯÝïÞ/ÞoÞ¯Þïß/ßo߯ßïà/ànà®àîá-ámá­áìâ,âkâ«âêã*ãiã¨ãèä'äfä¦äåå$åcå£åâæ!æ`æŸæÞçç\ç›çÚèèXè—èÖééTé“éÒêêOêŽêÍë ëJë‰ëÇììDìƒìÂíí>í}í»íúî8îvîµîóï1ïpï®ïìð*ðhð¦ðåñ#ñañŸñÝòòYò—òÕóóPóŽóÌô ôHô…ôÃõõ?õ|õºõ÷ö5ösö°öî÷+÷i÷¦÷äø!ø^øœøÙùùTù‘ùÎú úIú†úÃûû=ûzû¸ûõü2üoü¬üéý&ýbýŸýÜþþVþ“þÏÿ ÿIÿ†ÿÂÿÿmft2@ÁB‚ÂCƒÃD„ÅE†ÆG‡ÇHˆÈ I‰Ê J‹Ë L Œ Ì M Í  N Ž Ï  O Ð  Q ‘ ÑR’ÒS“ÔT•ÕV–ÖW—×X˜ÙYšÚ[›Û\œÜ]Þ^Ÿß_ à a¡á"b¢ã#c¤ä$d¥å%f¦æ'g§è ( h © é!)!i!ª!ê"*"k"«"ë#,#l#¬#í$-$m$®$î%.%n%¯%ï&/&p&°&ð'1'q'±'ò(2(r(³(ó)3)s)´)ô*4*u*µ*õ+6+v+¶+÷,7,w,¸,ø-8-x-¹-ù.9.z.º.ú/;/{/»/ü0<0|0¼0ý1=1}1¾1þ2>22¿2ÿ3@3€3À44A44Á55B5‚5Ã66C6„6Ä77E7…7Å88F8†8Æ99G9‡9È::H:‰:É; ;J;Š;Ê< >M>Ž>Î??O??Ï@@P@@ÐAAQA‘AÒBBRB“BÓCCTC”CÔDDUD•DÕEEVE–E×FFWF˜FØGGYG™GÙHHZHšHÚII[I›IÜJJ\JJÝKK^KžKÞLL_LŸLßM M`M MáN!NaN¢NâO"OcO£OãP#PdP¤PäQ%QeQ¥QæR&RfR§RçS'ShS¨SèT(TiT©TéU*UjUªUëV+VkV¬VìW,WmW­WíX-XnX®XîY/YoY¯YðZ0ZpZ±Zñ[1[r[²[ò\2\s\³\ó]4]t]´]õ^5^u^¶^ö_6_v_·_÷`7`x`¸`øa9aya¹aúb:bzb»bûc;c{c¼cüde~e¾eÿf?ffÀgg@g€gÁhhAh‚hÂiiCiƒiÃjjDj„jÅkkEk…kÆllFl‡lÇmmHmˆmÈn nIn‰nÊo oJoŠoËp pKpŒpÌq qMqqÍrrNrŽrÏssOssÐttPt‘tÑuuRu’uÒvvSv“vÓwwTw”wÕxxUx–xÖyyWy—y×zzXz˜zØ{{Y{™{Ú||Z|›|Û}}\}œ}Ü~~]~~Ý^ž߀€_€ €à a¡á‚"‚b‚¢‚âƒ#ƒcƒ£ƒä„$„d„¥„å…%…f…¦…æ†'†g†§†ç‡(‡h‡¨‡éˆ)ˆiˆªˆê‰*‰k‰«‰ëŠ,ŠlЬŠì‹-‹m‹­‹îŒ.ŒnŒ¯Œï/p°ðŽ0ŽqޱŽñ2r²ó3s´ô‘4‘u‘µ‘õ’5’v’¶’ö“7“w“·“ø”8”x”¹”ù•9•z•º•ú–:–{–»–û—<—|—¼—ý˜=˜}˜¾˜þ™>™™¿™ÿš?š€šÀ››A››ÁœœBœ‚œÃC„ÄžžDž…žÅŸŸFŸ†ŸÆ  G ‡ È¡¡H¡‰¡É¢ ¢I¢Š¢Ê£ £K£‹£Ë¤ ¤L¤Œ¤Í¥ ¥M¥¥Î¦¦N¦¦Ï§§P§§Ð¨¨Q¨‘¨Ò©©R©’©ÓªªSª”ªÔ««U«•«Õ¬¬V¬–¬×­­W­—­Ø®®X®™®Ù¯¯Z¯š¯Ú°°[°›°Ü±±\±œ±Ý²²]²ž²Þ³³_³Ÿ³ß´ ´`´ ´áµ!µaµ¡µâ¶"¶b¶£¶ã·#·d·¤·ä¸%¸e¸¥¸æ¹&¹f¹¦¹çº'ºgº¨ºè»(»i»©»é¼*¼j¼ª¼ê½+½k½«½ì¾,¾l¾­¾í¿-¿n¿®¿îÀ/ÀoÀ¯ÀïÁ0ÁpÁ°ÁñÂ1Âq²ÂòÃ2ÃsóÃóÄ4ÄtÄ´ÄôÅ5ÅuŵÅöÆ6ÆvÆ·Æ÷Ç7ÇxÇ¸ÇøÈ9ÈyȹÈùÉ:ÉzɺÉûÊ;Ê{ʼÊüË<Ë}˽ËýÌ>Ì~̾ÌþÍ?ÍÍ¿ÎÎ@΀ÎÁÏÏAÏ‚ÏÂÐÐCЃÐÃÑÑDÑ„ÑÄÒÒEÒ…ÒÆÓÓFÓ‡ÓÇÔÔGÔˆÔÈÕÕIÕ‰ÕÉÖ ÖJÖŠÖË× ×K׌×ÌØ ØLØØÍÙ ÙNÙŽÙÎÚÚOÚÚÐÛÛPÛ‘ÛÑÜÜQÜ’ÜÒÝÝSÝ“ÝÓÞÞTÞ”ÞÕßßUß–ßÖààVà—à×ááXá˜áØââYâ™âÚããZã›ãÛää[äœäÜåå]ååÝææ^æžæßçç_ç çàè è`è¡èáé!ébé¢éâê#êcê£êäë$ëdë¤ëåì%ìeì¦ìæí&ígí§íçî(îhî¨îéï)ïiï©ïêð*ðjð«ðëñ+ñlñ¬ñìò-òmò­òîó.ónó®óïô/ôoô°ôðõ0õqõ±õñö2örö²öó÷3÷s÷³÷ôø4øtøµøõù5ùvù¶ùöú7úwú·úøû8ûxû¸ûùü9üyüºüúý:ý{ý»ýûþ<þ|þ¼þýÿ=ÿ}ÿ½ÿþÿÿÿÿÿÿÿÿ?¿ÿ?¿@€À@€À@€À@€ÀAÁAÁAÁ  A Á  B ‚   B ‚   B ‚   B ‚ ÂCƒÃCƒÃCƒÃCƒÃD„ÄD„ÄD„ÄD„ÄE…ÅE…ÅE…ÅE…ÅF†ÆF†ÆF†ÆF†ÆG‡ÇG‡Ç  G ‡ Ç!!G!‡!Ç""H"ˆ"È##H#ˆ#È$$H$ˆ$È%%H%ˆ%È& &I&‰&É' 'I'‰'É( (I(‰(É) )I)‰)É* *J*Š*Ê+ +J+Š+Ê, ,J,Š,Ê- -J-Š-Ê. .K.‹.Ë/ /K/‹/Ë0 0K0‹0Ë1 1K1‹1Ë2 2L2Œ2Ì3 3L3Œ3Ì4 4L4Œ4Ì5 5L5Œ5Ì6 6M66Í7 7M77Í8 8M88Í9 9M99Í::N:Ž:Î;;N;Ž;Î<>O>>Ï??O??Ï@@O@@ÏAAOAAÏBBPBBÐCCPCCÐDDPDDÐEEPEEÐFFQF‘FÑGGQG‘GÑHHQH‘HÑIIQI‘IÑJJRJ’JÒKKRK’KÒLLRL’LÒMMRM’MÒNNSN“NÓOOSO“OÓPPSP“PÓQQSQ“QÓRRTR”RÔSSTS”SÔTTTT”TÔUUTU”UÔVVUV•VÕWWUW•WÕXXUX•XÕYYUY•YÕZZVZ–ZÖ[[V[–[Ö\\V\–\Ö]]V]–]Ö^^W^—^×__W_—_×``W`—`×aaWa—a×bbXb˜bØccXc˜cØddXd˜dØeeXe˜eØffYf™fÙggYg™gÙhhYh™hÙiiYi™iÙjjZjšjÚkkZkškÚllZlšlÚmmZmšmÚnn[n›nÛoo[o›oÛpp[p›pÛqq[q›qÛrr\rœrÜss\sœsÜtt\tœtÜuu\uœuÜvv]vvÝww]wwÝxx]xxÝyy]yyÝzz^zžzÞ{{^{ž{Þ||^|ž|Þ}}^}ž}Þ~~_~Ÿ~ß_Ÿ߀€_€Ÿ€ß_Ÿß‚ ‚`‚ ‚àƒ ƒ`ƒ ƒà„ „`„ „à… …`… …à†!†a†¡†á‡!‡a‡¡‡áˆ!ˆaˆ¡ˆá‰!‰a‰¡‰áŠ"ŠbŠ¢Šâ‹"‹b‹¢‹âŒ"ŒbŒ¢Œâ"b¢âŽ#ŽcŽ£Žã#c£ã#c£ã‘#‘c‘£‘ã’$’d’¤’ä“$“d“¤“ä”$”d”¤”ä•$•d•¤•ä–%–e–¥–å—%—e—¥—å˜%˜e˜¥˜å™%™e™¥™åš&šfš¦šæ›&›f›¦›æœ&œfœ¦œæ&f¦æž'žgž§žçŸ'ŸgŸ§Ÿç ' g § ç¡'¡g¡§¡ç¢(¢h¢¨¢è£(£h£¨£è¤(¤h¤¨¤è¥(¥h¥¨¥è¦)¦i¦©¦é§)§i§©§é¨)¨i¨©¨é©)©i©©©éª*ªjªªªê«*«j«ª«ê¬*¬j¬ª¬ê­*­j­ª­ê®+®k®«®ë¯+¯k¯«¯ë°+°k°«°ë±+±k±«±ë²,²l²¬²ì³,³l³¬³ì´,´l´¬´ìµ,µlµ¬µì¶-¶m¶­¶í·-·m·­·í¸-¸m¸­¸í¹-¹m¹­¹íº.ºnº®ºî».»n»®»î¼.¼n¼®¼î½.½n½®½î¾/¾o¾¯¾ï¿/¿o¿¯¿ïÀ/ÀoÀ¯ÀïÁ/ÁoÁ¯ÁïÂ0Âp°ÂðÃ0ÃpðÃðÄ0ÄpİÄðÅ0ÅpŰÅðÆ1ÆqƱÆñÇ1ÇqDZÇñÈ1ÈqȱÈñÉ1ÉqɱÉñÊ2ÊrʲÊòË2Ër˲ËòÌ2Ìr̲ÌòÍ2ÍrͲÍòÎ3ÎsγÎóÏ3ÏsϳÏóÐ3ÐsгÐóÑ3ÑsѳÑóÒ4ÒtÒ´ÒôÓ4ÓtÓ´ÓôÔ4ÔtÔ´ÔôÕ4ÕtÕ´ÕôÖ5ÖuÖµÖõ×5×u×µ×õØ5ØuصØõÙ5ÙuÙµÙõÚ6ÚvÚ¶ÚöÛ6ÛvÛ¶ÛöÜ6ÜvܶÜöÝ6ÝvݶÝöÞ7ÞwÞ·Þ÷ß7ßwß·ß÷à7àwà·à÷á7áwá·á÷â8âxâ¸âøã8ãxã¸ãøä8äxä¸äøå8åxå¸åøæ9æyæ¹æùç9çyç¹çùè9èyè¹èùé9éyé¹éùê:êzêºêúë:ëzëºëúì:ìzìºìúí:ízíºíúî;î{î»îûï;ï{ï»ïûð;ð{ð»ðûñ;ñ{ñ»ñûò<ò|ò¼òüó<ó|ó¼óüô<ô|ô¼ôüõ<õ|õ¼õüö=ö}ö½öý÷=÷}÷½÷ýø=ø}ø½øýù=ù}ù½ùýú>ú~ú¾úþû>û~û¾ûþü>ü~ü¾üþý>ý~ý¾ýþþ?þþ¿þÿÿ?ÿÿ¿ÿÿ?¿ÿ?¿@€À@€À@€À@€ÀAÁAÁAÁ  A Á  B ‚   B ‚   B ‚   B ‚ ÂCƒÃCƒÃCƒÃCƒÃD„ÄD„ÄD„ÄD„ÄE…ÅE…ÅE…ÅE…ÅF†ÆF†ÆF†ÆF†ÆG‡ÇG‡Ç  G ‡ Ç!!G!‡!Ç""H"ˆ"È##H#ˆ#È$$H$ˆ$È%%H%ˆ%È& &I&‰&É' 'I'‰'É( (I(‰(É) )I)‰)É* *J*Š*Ê+ +J+Š+Ê, ,J,Š,Ê- -J-Š-Ê. .K.‹.Ë/ /K/‹/Ë0 0K0‹0Ë1 1K1‹1Ë2 2L2Œ2Ì3 3L3Œ3Ì4 4L4Œ4Ì5 5L5Œ5Ì6 6M66Í7 7M77Í8 8M88Í9 9M99Í::N:Ž:Î;;N;Ž;Î<>O>>Ï??O??Ï@@O@@ÏAAOAAÏBBPBBÐCCPCCÐDDPDDÐEEPEEÐFFQF‘FÑGGQG‘GÑHHQH‘HÑIIQI‘IÑJJRJ’JÒKKRK’KÒLLRL’LÒMMRM’MÒNNSN“NÓOOSO“OÓPPSP“PÓQQSQ“QÓRRTR”RÔSSTS”SÔTTTT”TÔUUTU”UÔVVUV•VÕWWUW•WÕXXUX•XÕYYUY•YÕZZVZ–ZÖ[[V[–[Ö\\V\–\Ö]]V]–]Ö^^W^—^×__W_—_×``W`—`×aaWa—a×bbXb˜bØccXc˜cØddXd˜dØeeXe˜eØffYf™fÙggYg™gÙhhYh™hÙiiYi™iÙjjZjšjÚkkZkškÚllZlšlÚmmZmšmÚnn[n›nÛoo[o›oÛpp[p›pÛqq[q›qÛrr\rœrÜss\sœsÜtt\tœtÜuu\uœuÜvv]vvÝww]wwÝxx]xxÝyy]yyÝzz^zžzÞ{{^{ž{Þ||^|ž|Þ}}^}ž}Þ~~_~Ÿ~ß_Ÿ߀€_€Ÿ€ß_Ÿß‚ ‚`‚ ‚àƒ ƒ`ƒ ƒà„ „`„ „à… …`… …à†!†a†¡†á‡!‡a‡¡‡áˆ!ˆaˆ¡ˆá‰!‰a‰¡‰áŠ"ŠbŠ¢Šâ‹"‹b‹¢‹âŒ"ŒbŒ¢Œâ"b¢âŽ#ŽcŽ£Žã#c£ã#c£ã‘#‘c‘£‘ã’$’d’¤’ä“$“d“¤“ä”$”d”¤”ä•$•d•¤•ä–%–e–¥–å—%—e—¥—å˜%˜e˜¥˜å™%™e™¥™åš&šfš¦šæ›&›f›¦›æœ&œfœ¦œæ&f¦æž'žgž§žçŸ'ŸgŸ§Ÿç ' g § ç¡'¡g¡§¡ç¢(¢h¢¨¢è£(£h£¨£è¤(¤h¤¨¤è¥(¥h¥¨¥è¦)¦i¦©¦é§)§i§©§é¨)¨i¨©¨é©)©i©©©éª*ªjªªªê«*«j«ª«ê¬*¬j¬ª¬ê­*­j­ª­ê®+®k®«®ë¯+¯k¯«¯ë°+°k°«°ë±+±k±«±ë²,²l²¬²ì³,³l³¬³ì´,´l´¬´ìµ,µlµ¬µì¶-¶m¶­¶í·-·m·­·í¸-¸m¸­¸í¹-¹m¹­¹íº.ºnº®ºî».»n»®»î¼.¼n¼®¼î½.½n½®½î¾/¾o¾¯¾ï¿/¿o¿¯¿ïÀ/ÀoÀ¯ÀïÁ/ÁoÁ¯ÁïÂ0Âp°ÂðÃ0ÃpðÃðÄ0ÄpİÄðÅ0ÅpŰÅðÆ1ÆqƱÆñÇ1ÇqDZÇñÈ1ÈqȱÈñÉ1ÉqɱÉñÊ2ÊrʲÊòË2Ër˲ËòÌ2Ìr̲ÌòÍ2ÍrͲÍòÎ3ÎsγÎóÏ3ÏsϳÏóÐ3ÐsгÐóÑ3ÑsѳÑóÒ4ÒtÒ´ÒôÓ4ÓtÓ´ÓôÔ4ÔtÔ´ÔôÕ4ÕtÕ´ÕôÖ5ÖuÖµÖõ×5×u×µ×õØ5ØuصØõÙ5ÙuÙµÙõÚ6ÚvÚ¶ÚöÛ6ÛvÛ¶ÛöÜ6ÜvܶÜöÝ6ÝvݶÝöÞ7ÞwÞ·Þ÷ß7ßwß·ß÷à7àwà·à÷á7áwá·á÷â8âxâ¸âøã8ãxã¸ãøä8äxä¸äøå8åxå¸åøæ9æyæ¹æùç9çyç¹çùè9èyè¹èùé9éyé¹éùê:êzêºêúë:ëzëºëúì:ìzìºìúí:ízíºíúî;î{î»îûï;ï{ï»ïûð;ð{ð»ðûñ;ñ{ñ»ñûò<ò|ò¼òüó<ó|ó¼óüô<ô|ô¼ôüõ<õ|õ¼õüö=ö}ö½öý÷=÷}÷½÷ýø=ø}ø½øýù=ù}ù½ùýú>ú~ú¾úþû>û~û¾ûþü>ü~ü¾üþý>ý~ý¾ýþþ?þþ¿þÿÿ?ÿÿ¿ÿÿÿÿ`ÿÿ@2ÿÿ OÿÿdJÿÿ@`ÿÿ`LIÿÿ’š-êÿÿŸÿ ÿÿ½1ÿÿÿÿÿÿÿÿSÿÿÿÿ60ÿÿÿÿG4ëÅÿÿX;Ï*ÿÿ`¿ÿÿÿ`»ÿÿ`ÿÿf:ÿÿ@4ºÿÿ SEÿÿi»ÿÿ@`‘ÿÿ`YÿÿŠÞ<ÿÿŸÿ#Õÿÿ¾iÿÿÿÿÿÿÿÿ'VÿÿÿÿFðÿÿÿX—×ÿÿ`¿ÿÿÿe¼Mÿÿf£dÿÿnƒÿÿnnÿÿwgÿÿFXFXÿÿ `ìÿÿstÄÿÿ``ÿÿ†^F_ÿÿŸÿ2Vÿÿ°ä ÿÿÿÿÿÿÿÿ@ÿÿÿÿ\xßÿÿÿeä¿ÿÿÿl¨½€ÿÿmS¡«ÿÿu™ŸÿÿÿsçÿÿvÊÿÿƒÿÿJÄJÄÿÿ1+`ÿÿ¿ÿÿYRiƒÿÿbKbKÿÿŸÿ@ÿÿ±ÿ ÿÿÿÿ ÿÿÿÿ[+ö(ÿÿi£Ä ÿÿu ¾×ÿÿuÄŸÿÿÿ}¸‘\ÿÿ€ƒBÿÿ€ÿÿ…eÿÿÿÿ€*ÍÿÿYDYDÿÿƒÔÿÿ@~³ÿÿl™l™ÿÿŸÿSÿÿ¬?9ÿÿÿÿ@ÿÿÿÿnnÌ„ÿÿ~¸ÿÿ€Ÿÿÿÿ–\ÿÿ€s€ÿÿƒ)€ÿÿ€]ÿÿÿÿ—`ÿÿ› $ÿÿ_s_sÿÿ_©÷h÷ÿÿ»‘ºÿÿbC‚CÿÿŸÿnÿÿ¯¥O¥ÿÿÿÿgZÜžÿÿ‚<»¤ÿÿ‡óŸÿÿÿŠË€ÿÿÉ€ÿÿŠ€ÿÿ†ž€ÿÿƒmÿÿ•ÞÿÿŸÿÿÿ¥ïÿÿ€THÿÿp'p'ÿÿŸÿÿ@šÿÿ€‰0ÿÿ¾‡`ÿÿÿÿмÉÿÿ•ï€ÿÿœv€ÿÿ—9€ÿÿ’^^¤ÿÿ–¨TÐÿÿ”ÐÿÿûÿÿžQÿÿ£œÿÿ¯òÿÿ§b;Kÿÿ•2h¦ÿÿ€‰ÿÿK Ÿÿÿÿ€¢üÿÿÅ—­¿ &KÿÿŸÿ€¬ÿÿ¤¬x×ÿÿŸÿ`ÿÿŸÿÿÿ¥ªÿÿ¡©ÿÿŸÿÿÿŸxÿÿŸÿÿÿ«yÿÿº=ÿÿ¿ÿ('ÿÿ¿ÿ]H]ÿÿ±D„ÿÿ¾ ž ÿÿ½ÝÆà Ÿÿÿÿ":ÿÿÂ:ÿÿºnÿÿ²m uÿÿ¬tÿÿ§lÿÿ£kÿÿŸÿÿÿŸÿÿÿ£Åÿÿ³~ÿÿ¿ÿÿÿË• •ÿÿÚ@ÿÿñ–—Xdÿÿÿÿ@µ€ÿÿºAÿÿ`´·@ÿÿ¿ÿ ÿÿºPó ÿÿ°ò ‡ ÿÿª†Ð ÿÿ¤Ï ÿÿ  zÿÿŸÿÿÿŸÿÿÿªÿÿ»¥ÿÿÆ[ÿÿÞ&ÿÿþ) ÿÿÿÿ£V£¿ÿÿÿ»ˆºÂÿÿ£ÁÔÿÿHRYÓ7’ÌlÿÿŸÿ z}sÿÿªz@ÿÿ«¹ ÿÿª¸ ÿÿ¥{ ÿÿ ý ÿÿŸÿôÿÿŸÿÿÿ±Aÿÿ¿ÿÿÿÓóÿÿóªÿÿÿÿ ×ÿÿd&„3ÿÿ€ÿÿv©ÿÿ 8‰ýîÿÿ—P®ÿÿŸÿ€ÿÿŸÿSÿÿŸÿ@ÿÿŸÿ-ZÿÿŸÿ ÿÿŸÿ ÿÿžqÿÿºÈÿÿÊ(ÿÿèÈÿÿÿÿì8ÿÿ 9²dÿÿ\Tb<ÿÿ¸[¸oÿÿCoYÿÿ@_+ÿÿÿÿo+ßIÿÿ0¿ˆÿÿ€ÿÿ˜g€ÿÿ”E@‡ÿÿõ@ÿÿš”%ÓÿÿœbÿÿÀÒÿÿÛáÿÿÿÿõÐÿÿÐéÿÿqq€ÿÿW«5Çÿÿ@ÿÿ(ÿÿAÈÿÿÿÿÈ ÿÿÿÿt Ö£ÿÿ‚Ó(¿ÿÿÿ…(™›ÿÿŠˆ€ÿÿ‹]€ÿÿˆRwûÿÿ‡ÿÿÒ(ÿÿùWÿ ÿÿݲÿÿªvÿÿ*wlHÿÿe%eÿÿ7ÿÿÿÿÿÿ€ÿÿÿÿXÿÿÿÿq¢Ýhÿÿzj¿ÿÿÿ|é³¶ÿÿj•ÿÿ€…ªÿÿ€ÿÿîQÿÿÿÿßÿÿÿ¿ÿÿÿ†äÿÿ5O¤ÿÿÿÿÿÿÿÿÿÿ€7`ÿÿÿÿÿÿÿÿRÿÿÿÿd–ßÿÿÿl•Ë”ÿÿo]¿ÿÿÿp?µ3ÿÿqÎÿÿÿÿçkÿÿË2ÿÿŸÿÿÿe[ÿÿ"pÿÿÿÿÿÿÿÿÿÿ€ÿÿžú5‘ÿÿÿÿÿÿÿÿEsÿÿÿÿVë2ÿÿ\OØ‹ÿÿa»ÉÿÿbjÿÿVcÿÿ`ÿÿ.=?Äÿÿ`ÿÿ#e#ÿÿ^öQ©ÿÿ€7šÿÿŸÿ ÿÿ¼æÿÿÿÿÿÿÿÿùÿÿÿÿ3®ÿÿÿÿDÃë©ÿÿV6Ïÿÿ^8¿ÿÿÿ`¹úÿÿ`ÿÿZÿÿlÅÿÿ@ =ÿÿ"fW”ÿÿo<ÿÿS›aqÿÿoÆ=ÿÿ£9! ÿÿ½Eÿÿÿÿÿÿÿÿ%¹ÿÿÿÿEÿÿÿÿV Õþÿÿ_ú¾ÿÿcF¾µÿÿc£Dÿÿmÿÿdóÿÿs&ÿÿ7€E‡ÿÿ<^ ÿÿvjÿÿAˆgðÿÿXT`;ÿÿ¦b/ÿÿ¦ÿÿÿÿÿÿÿÿBµÿÿÿÿ\ÞÕÿÿdż¹ÿÿk¼ÀwÿÿjážPÿÿu|ŸÿÿÿrvÿÿlIÿÿxÿÿîÿÿPÊNoÿÿÿÿFúqÿÿ`(_wÿÿ§09<ÿÿ A=Pÿÿÿÿ¯ÿÿÿÿ[üú'ÿÿg‡À°ÿÿsþÞÿÿrÇâÿÿ}zŒuÿÿ‚CTÿÿ€ÿÿs½ÿÿˆMÿÿ“AÿÿHÃ\ßÿÿ\%[$ÿÿŠŠÿÿeãmµÿÿ¨•mÿÿ¸Èg\ÿÿÿÿ8JÿÿÿÿmßÇëÿÿ·aÿÿ€€£šÿÿ~Ù˜Aÿÿ~’}Hÿÿ‚&€ÿÿ€ÿÿ…ÿÿ@ÿÿ›/ÿÿ…©7Rÿÿc_Pÿÿ•ÆÿÿD"þÿÿá8ÿÿ­ÍÈÿÿÿÿb›ÜðÿÿŠ»õÿÿ†‰ ›ÿÿ‰ÈzÔÿÿù~Ôÿÿ‰R„Vÿÿ„d€ÿÿ‚WÿÿŒGÿÿ™:ÿÿŸ×ÿÿ£È$âÿÿv•d¥ÿÿj ‚üÿÿ W0`¢sÿÿ†¼ ðÿÿÒ¬«ªÿÿÿÿ‡sÁ^ÿÿ”ïvÆÿÿµ‚Qÿÿ•ƒˆ¹ÿÿ0bdÿÿ–‚b¹ÿÿ’üÿÿ0ÿÿ“¥ÿÿ¡ ÿÿ¦¯ÿÿ·+ÿÿ¡)Kÿÿ‹l€ÿÿjbŸ«ÿÿ,oÃÐÿÿÿÿÂåÄòÿÿœØ‹iÎÿÿ Ä­ÿÿ›ìs¬ÿÿ”ÿÿ¦¡ÿÿ¡šÿÿ ÿÿž®ÿÿ›ÿÿ  ÿÿ¯ÌÿÿÁäÿÿÂí=4ÿÿ§3‡:ÿÿŬ—§ÿÿ¶ÁÍ’ Ÿÿÿÿ/ÿÿ¾Ò3ÿÿºW®ÿÿ±­ ²ÿÿ«±Êÿÿ¦É³ÿÿ¢²ÿÿŸÙÿÿŸÿÿÿŸÿÿÿ§Šÿÿ¹ªÿÿ¿ŒÿÿÐ>5ÃÿÿÚ/tÿÿÿÿ$ÝŒä¡$ÿÿ®ÿÿ€ÜŠ-xÿÿ¿ÂWÿÿ»`$ÿÿ¯æ &ÿÿ©X™(ÿÿ¢þ&Ôÿÿžá ¦ÿÿŸßÿÿŸÿÿÿ Ãÿÿ±ÿÿ¾ÿÿÒ‚ÿÿíRÿÿÿÿ¸UŠËNÿÿŠ‚)Ýÿÿ¼#@ÿÿŸÿ¤uå;ÿÿŸdÎ~Wÿÿ§¥2Çÿÿ¬r>Žÿÿ£d8¹ÿÿŸ´ÿÿŸÇ!:ÿÿ (ÿÿŸÿÿÿªqÿÿ¾³ÿÿÌxÿÿï@ÿÿÿÿžÙlÿÿ\<‹ºÿÿ…Âÿÿœ)ÿÿZ]˜hÿÿÿÿyàÏsÿÿ–€ ,ÿÿ›.€Éÿÿš=?Kÿÿ£Æ;ÝÿÿŸ·ÿÿ¡¢ ÿÿœÑÿÿ¶ÉÿÿŹÿÿê:ÿÿÿÿæˆÿÿÀ²KÿÿHwtÚÿÿ"Xõÿÿ{v ;ÿÿ,ÔU“CŠÿÿÿÿ‹eÿÿÿÿz¦Ö²ÿÿƒÍyÃÌÿÿ„Ç–ÿÿЏ€}ÿÿŠO†)ÿÿ…úu}ÿÿ†±ÿÿÁ)ÿÿâ;ÿÿÿÿìÿÿÇOÿÿi ˆÔÿÿ83‘ÿÿGXÿÿ6Sÿÿ=ÝÿÿgÿÿÿÿbUÿÿÿÿtçâÿÿzr¿8ÿÿ{y¸Kÿÿ}ö’wÿÿ‚†äÿÿ€ÿÿÖ4ÿÿÿÿòçÿÿÒ]ÿÿ¥Tÿÿg…ÿÿ Ø\ÿÿÿÿÿÿÿÿ~q4.ÿÿÿÿÿÿÿÿV ÿÿÿÿdWÜ—ÿÿi2Òˆÿÿk1¾Åÿÿm2¹`ÿÿmªÿÿùMûJÿÿÝÿÿ³ùÿÿÞÿÿ:†ÿÿÿÿÿÿÿÿÿÿ–áÿÿ€á,+ÿÿÿÿÿÿÿÿKlÿÿÿÿRÔöçÿÿZfà8ÿÿNýÐ(ÿÿ`ÿïÿÿßÿÿÿ¿Ëÿÿ“9ÿÿUeÿÿ½ÿÿÿÿÿÿÿÿÿÿ€ÿÿ€ÿÿö= ÿÿÿÿ2ÿÿÿÿÿÿÿÿ=¶ÿÿÿÿEoëgÿÿHÿÿK ÿÿWTÿÿ@(ÿÿ Fþÿÿ`ÿÿ;¿[¿ÿÿ`Dïÿÿš¾2Ðÿÿ³Þ ÿÿþRRÿÿÿÿ Hÿÿÿÿ.‡ÿÿÿÿ@ò©ÿÿMéÐèÿÿYï¿ÿÿÿ\çº'ÿÿ^aÿÿN7ÿÿ[Ûÿÿn#ÿÿ:-=¯ÿÿaõÿÿF"]›ÿÿ^³`ÿÿ™þE!ÿÿ¤­N¯ÿÿÕÿÿ4ÿÿÿÿ‡ÿÿÿÿA\ÿÿÿÿP×Õnÿÿb«¿™ÿÿ`$¿cÿÿ_õ°”ÿÿc¡ÿÿQmÿÿe§ÿÿwÿÿCfAÿÿ#ê_kÿÿrœÿÿbQ`Šÿÿ¡X@ÿÿ°«bÿÿ•ÿÿAqÿÿÿÿ8ÿÿÿÿUÕç ÿÿ`ùºàÿÿh:ÁÿÿgGŸºÿÿrÑŸÿÿÿorÿÿT®ÿÿmzÿÿ{°ÿÿoÿÿžnŸÿÿÿÿÿ¤ô%Æ{ÿÿ’„~Óÿÿ STÿÿ¢“:ÿÿ¢]#Cÿÿ¢Ó7ÿÿ¡Á ÿÿ›Ýÿÿ§€ÿÿ¼çÿÿÎ-ÿÿñ0ÿÿÿÿÌøÿÿ@gÿÿj€ÿÿ”gÿÿf Š«ÿÿæK€aùpÿÿ‚1Îÿÿ‚ÐÁÁ‹ÿÿƒâ“=ÿÿ‰’ƒÿÿˆŸˆ±ÿÿ„%`ÿÿ‹ÿÿ¶´ÿÿÉÓÿÿï®ÿÿÿÿÛ°ÿÿ©üÿÿ-çƒÿÿ#þ2»ÿÿtZUÿÿG‹Méÿÿ“bC´ÿÿÿÿX›ÿÿÿÿqÎâÿÿw À‘ÿÿy ¹ñÿÿ{ºª"ÿÿ{ó†¡ÿÿ€ÿÿÅæÿÿíhÿÿÿÿá!ÿÿºÞÿÿ‚kÿÿµ&éÿÿLÿÿ?[ÿÿ;”bÿÿu*éÿÿÿÿÿÿÿÿMcÿÿÿÿ\ìðÿÿ`lÖ ÿÿgÅÀdÿÿh˜¼ŽÿÿiEÿÿæÿÿÿÿÞ€ÿÿÂ7ÿÿ˜ñÿÿ`Õÿÿ'\ÿÿÿÿÿÿÿÿ‡˜ÿÿ|="RÿÿÿÿP ÿÿÿÿÿÿÿÿG£ÿÿÿÿRƒGÝÎÿÿI…iÝMÿÿPiÿÿÿÿãuÿÿËÂÿÿ¡ÿÿmÿÿ'ÿÿÿÿÿÿÿÿÿÿ˜ÿÿv–ÿÿÿÿQÿÿÿÿ.,ÿÿÿÿÿÿÿÿ<@ÿÿÿÿC¯óÃÿÿA%ëâÿÿÔøÿÿ­uÿÿ~ÿÿ<•ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿ€ÿÿÿÿÅÿÿÿÿÊÿÿÿÿ Óÿÿÿÿ-pÿÿÿÿÿÿ9qÿÿGWÿÿ0]™ÿÿ\Øa5ÿÿ™|N‹ÿÿ«½]úÿÿ%_ÿÿAÿÿÿÿ(¾ÿÿÿÿ2XÿÿÿÿAàôÿÿQFÈ ÿÿWñ¿äÿÿXƶ§ÿÿZmÿÿAÿÿN‡ÿÿ_UÿÿA/!ÿÿ"ÖPUÿÿu„ÿÿY•_Ìÿÿdprÿÿ±Te´ÿÿ'BÿÿJ£ÿÿÿÿ>¨ÿÿÿÿ@rî—ÿÿVDÍ2ÿÿ^þ¾¤ÿÿ`ž·öÿÿ`Ö¬øÿÿ`ÿÿCìÿÿQiÿÿ`ÿÿÿt|ÿÿ}ZVÿÿ{pÿÿ>€tÌÿÿnûvìÿÿ³ÉwVÿÿ)Øÿÿ]ÁÿÿÿÿPÐÿÿÿÿTÔýÿÿb½ïÿÿb.¼4ÿÿcœ«ÿÿn(ŸÿÿÿjŸÿÿFÄÿÿTWÿÿjyÿÿ€ÔÿÿS.FßÿÿTÿÿ8€ùÿÿoƒ ÿÿ«ü†<ÿÿÿÿ„ÿÿÿÿ_Qéˆÿÿ_¼ ÿÿk9¾ÎÿÿjÄÿÿu{£åÿÿpóÿÿyèÿÿI¥ÿÿUÅÿÿs/ÿÿ‰½ÿÿK²Wwÿÿ’wÿÿËÜÿÿoDåÿÿ¶F“CÿÿÿÿŽeÿÿÿÿtÿ¿2ÿÿuˆ¯Pÿÿ}YŸÿÿ}÷†åÿÿƒ{tÿÿ‚Ò}Ùÿÿ}ÙÿÿLðÿÿnaÿÿ‡ ÿÿÿÿƒ;ÿÿm˜\&ÿÿÚÿÿUUžFÿÿÇ•¢‚ï7ÿÿžß¼ÿÿˆ¶Hÿÿ€£¿ÿÿz@ÿÿ†Ò€9ÿÿ³…¿ÿÿ~LyYÿÿ€ÿÿQSÿÿwâÿÿ’¡ÿÿ ®ÿÿ¥á*sÿÿe`„ÿÿ].:ÿÿ,ï·Pÿÿõ·vÃiˆÿÿ«Êˆòÿÿ +€ ÿÿ–•’(ÿÿŽFmÖÿÿ””_ÿÿÿ’„ÿÿœ ÿÿ™YÿÿqSÿÿ”âÿÿ¡!ÿÿ©OÿÿÀ’ÿÿ¿‡N=èÿÿ¸^ÅÜ›¢Ç®÷6¹_€Ø›&ûÿÿË{ ÿÿ»7ÿÿ¯«ÿÿ¨°uÿÿ¢|ÿÿ :ÿÿŸoÿÿ›ùÿÿqÿÿ¡ ÿÿ¨²ÿÿ¼¾ÿÿÌ.ÿÿÛ¹.Ýò%ôKk¨q爠‚Ô—‰ˆ¿ÁY\ÐÄÿÿ£þÛ‹_ÿÿ¤—:ÿÿ¤V4Kÿÿ § ÿÿ¡"Mÿÿ û ÿÿ¡iÁÿÿžùÿÿŸÿÿÿ¦™ÿÿ»íÿÿÍÿÿî‚õ˜ÿÿ n¾ßÿÿY-z¨ÿÿ °)£ÿÿ‹ŠŸ@ÿÿÿÿ ÿÛÕÿÿ‹ æÁçÿÿ‡@|ÃÿÿSŠ8ÿÿ‰‘dÿÿŽýi¹ÿÿŠ=Úÿÿ‘Øÿÿ¤IÿÿºÍÿÿÌwÿÿñÕñ!ÿÿÌ%ÿÿr˜5ÿÿxC³(Ôÿÿ…öúÿÿh`ÿÿÆ~< =ÿÿÿÿeßËÿÿu¾ÅÞÿÿy0À˜ÿÿy¿«<ÿÿ|Eõÿÿ‚6€ÿÿ€ÿÿ¶\ÿÿË(ÿÿò>ñÏÿÿÎCÿÿ¥üÿÿxØÿÿ ¾%ÞÉÿÿ_›OÿÿGLM6 ÿÿ™òEâ@ÿÿÿÿÿÿÿÿS˜þÁÿÿ_fàñÿÿSmÊ­ÿÿe­Áºÿÿf¦´åÿÿhÿÿÊÿÿñaóÿÿÔúÿÿ«ÿÿ€ÿÿ]QÿÿÿÿA™ÿÿ6¦'¨ÿÿŠžºÊÿÿÿÿ-’ÿÿÿÿÿÿÿÿ@áÿÿÿÿJ»òXÿÿO•à ÿÿIkÐÀÿÿY ÿÿëŸò•úXÜËÿÿµÿÿ„•ÿÿXÿÿ(ÿÿÿÿÿÿÿÿ€ÿÿnÿÿÿÿÀÿÿÿÿ-Dÿÿÿÿÿÿÿÿ9ßÿÿÿÿ@<ðÏÿÿ@òvó„âJÿÿ¿Ûÿÿ¿ÿÿ`=ÿÿ!­ÿÿÿÿÿÿÿÿÿÿÿÿ~ÿÿ„aÿÿÿÿÿÿÿÿjÿÿÿÿ'âÿÿÿÿ'ìÿÿÿÿßÿÿÿÄzÿÿ4ÿÿh¿ÿÿ-Œÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöÿÿÿÿÿÿ#Rÿÿ.¾ÿÿ+Sÿÿ %Øÿÿ›>›ÿÿ+>K>ÿÿ\áFÿÿ„¶Aÿÿ®ÆFÿÿ×ÿÿ4×ÿÿÿÿ*€ÿÿÿÿ±ÿÿÿÿùü¼ÿÿ!Ié_ÿÿ)`Ü~ÿÿ0þÅÖÿÿ>Qÿÿ&ÿÿ2&ÿÿ9:ÙÿÿÓ)cÿÿ'Å=¦ÿÿ4“IÚÿÿ[óP^ÿÿBEôÿÿ§åU¬ÿÿ&nÿÿ:îÿÿÿÿ=8ÿÿÿÿ™ÿÿÿÿ$QíQÿÿ0áÎÿÿ4œÈÿÿAÞ¿ÿÿÿC·ÿÿ(Çÿÿ5ÌÿÿHÞÿÿ,³&oÿÿ&çB0ÿÿc§ÿÿH#b ÿÿb2d.ÿÿ±0\$ÿÿ+Bÿÿ> ÿÿÿÿGRÿÿÿÿkûuÿÿ1€èÿÿ8€ÌíÿÿF¾wÿÿIÔ¹­ÿÿK›ÿÿ+Žÿÿ90ÿÿHçÿÿ@þ ‚ÿÿ çI)ÿÿe‘ÿÿH_þÿÿ_Õk‘ÿÿ±"emÿÿXÿÿaÌÿÿÿÿV\ÿÿÿÿ-ðóÿÿ:ÁÒ’ÿÿK2½BÿÿP?»ÞÿÿQH°‚ÿÿSèÿÿ.„ÿÿ<ºÿÿKÿÿiuÿÿÇOÿÿj¬ÿÿEÉh!ÿÿjDokÿÿ² s–ÿÿ*æÿÿ[ÿÿÿÿb?ÿÿÿÿ8fÙxÿÿQ¾ÙÿÿW2¼¨ÿÿX;°¥ÿÿ[3¤ˆÿÿ]zÿÿ2hÿÿC8ÿÿO·ÿÿh“ÿÿ>9G‰ÿÿ"†_ÿÿ(~Žÿÿfc|]ÿÿ¬Ý‚îÿÿÿÿçÿÿÿÿs*Øÿÿ[2¾Ìÿÿ`Ò¼ƒÿÿ_&°!ÿÿ_ª¡þÿÿetŸÿÿÿd$ÿÿ7|ÿÿG\ÿÿTÞÿÿuÍÿÿ5ÞYóÿÿZ×R©ÿÿÿÿXæÔÿÿº³”äèÁÿÿ‘>͆ÿÿ„ïÈÿÿhÑ¢ ÿÿv ¥fÿÿrzõÿÿ~}’ÿÿzOx.ÿÿx.ÿÿ=÷ÿÿKÖÿÿs|ÿÿÿÿ Éÿÿ€Iµÿÿmù{ø$-¬$Ðø©€¨¿¶0ŠÿÿL†ºÿÿ¡kÿÿ‡ì‘ÿÿ‚€ÿÿ“y)ÿÿ€‡ÿÿ{2Nÿÿ„ûÿÿFÿÿt—ÿÿ•ÃÿÿŸ¦ÿÿ¯˜ÿÿº,Zÿÿ¼MeH¹ù‹Ïž>(¦ç2Ã;ÿÿÆ?'ÿÿºÇÿÿ¦¦ÿÿ¡8ÿÿ¡ ÿÿœÿÿÿ™¾ÿÿ–úÿÿNµÿÿœ™ÿÿžWÿÿ³³ÿÿÄÿÿäøÖùÙ©S·—|ÒQ¸°ÍKg²@NŠÄùÿÿ›‘<ÿÿ¡ 2·ÿÿ£ÑÃÿÿ¥3Žÿÿ Ñëÿÿ›¡´ÿÿ—  ÿÿ“²ÿÿš8ÿÿž_ÿÿ³™ÿÿÊø€áçá°ø¼Óýß;9rAøˆjö^äÜüðÿÿ–¤×ìÿÿˆý»Ýÿÿn’ÚÿÿYÿÿ€*†ûÿÿW{ÿÿ~Ògôÿÿ€ÿÿŸÿÿÿ³DÿÿË ì6ÜØáòû"Á›ÿÿ˜kÿÿ'!fýÿÿ&ÞWÿÿ_œ}ÿÿ½öuÌ ¦ÿÿÿÿi&í“ÿÿ]ØÓ(ÿÿe§¿¬ÿÿg»Üÿÿg\°ÿÿh ŸÿÿÿjÉÿÿ²£ÿÿË9åMÙüáìù±Â²ÿÿœ­ÿÿtuÿÿvVÿÿT  UÿÿBJ5ÿÿ›‡D B/ÿÿÿÿ0ÿÿÿÿ?àÿÿÿÿHŠæîÿÿIµ¿á¶ÿÿHÒÊPÿÿXó¿ÿÿÿWYÿÿÉáR×gá-õ"Ç»ÿÿžQÿÿsXÿÿUSÿÿÿÿ?Õÿÿ4'†ÿÿ’¢ ÿÿ‡j þZÿÿÿÿ*ÿÿÿÿÿÿÿÿ4œÿÿÿÿ>®ðóÿÿA<ßÿÿÿ?‹äv×Ëà&ïSÎÃÿÿ¥‡ÿÿuûÿÿMŠÿÿ"Éÿÿÿÿÿÿ>¢ÿÿ€÷ÿÿu>ÿÿÿÿÿÿÿÿ¯ÿÿÿÿÄÿÿÿÿ)Áÿÿÿÿÿÿÿÿ'³ßÿéÝÖ'ÿÿ¯ÿÿ}¤ÿÿQ¢ÿÿÿÿÿÿÿÿÿÿÿÿ‰gÿÿ>ÿÿŠ®ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÒÿÿÿÿÛ¾ÿÿ·aÿÿ‡·ÿÿYÿÿ Tÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿ€ÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ˜ÿÿ òÿÿ ‚ ‚ÿÿžžÿÿÚ6ÿÿ%Š6UÿÿTp4pÿÿ„1lÿÿ¬Ñ1kÿÿ <ø)<ÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿüŠÿÿá®ÿÿæÜkÿÿ6ÿÿäÿÿwÿÿ £  ÿÿ°ÿÿ»3£ÿÿ)=ÿÿZÏ3Ðÿÿ€•8öÿÿ¦µ;îÿÿ<ÿÿ-îÿÿÿÿ'ÿÿÿÿåÿÿÿÿÿÿÿÿæŒÿÿà8ÿÿFÓOÿÿ ÿÿ Hÿÿ*ÿÿ'ƒÿÿžªÿÿµ4{ÿÿ ?-ÿÿW2;bÿÿv¬?Eÿÿ§|Dùÿÿ Ñÿÿ1ïÿÿÿÿ0úÿÿÿÿDÿÿÿÿü°ÿÿ×ÞÿÿAزÿÿãÃèÿÿ- ÿÿÊÿÿ!Óÿÿ-ÊÿÿE"ÿÿ%­0áÿÿ $#A=ÿÿF‘OáÿÿGt´Bßÿÿª£Nçÿÿ,Öÿÿ7­ÿÿÿÿ=¤ÿÿÿÿ$Yÿÿÿÿ 4Þ3ÿÿ ’ÛÆÿÿ!P–ÿÿ3Ý¿ÿÿÿ4Òÿÿ ÿÿmÿÿ2§ÿÿ'°$¿ÿÿ86øÿÿ\Ñÿÿ7û\”ÿÿ_ü^ÿÿÿ®¤\dÿÿ-ÂÿÿDœÿÿÿÿMûÑÿÿ6ªæíÿÿ#*Ûþÿÿ,,¿Aÿÿ<Ú¼ÿÿA#²æÿÿ@Šÿÿ ÿÿ$}ÿÿ;ÿÿWöÿÿ'n:Ÿÿÿc£ÿÿ6½c&ÿÿf‚h<ÿÿ¯ƒnÿÿÿÿr7ñ(ÿÿa¥ÜÓÿÿS!ÇûÿÿBWÁ¢ÿÿF ´®ÿÿJت?ÿÿMo žÿÿP=ÿÿ ÿÿ-¤ÿÿF«ÿÿ]§ÿÿmúÿÿI5Ehÿÿ‚-ÿÿX= ùo­àƒõãfÿÿƒìÂjÿÿy§Â¬ÿÿe°ìÿÿ\2£`ÿÿ`¥¨ÿÿ]äŸ ÿÿ^Œ‘ÿÿ`Dÿÿ&Õÿÿ:WÿÿO`ÿÿtÜÿÿˆÜÿÿƒ/-ÿÿe›h¯Îõ› µÝ‰œšC¥úñF›€–ÿÿ”‰‚&ÿÿ…:†Wÿÿ{xŠ7ÿÿw‚ÅÿÿuYy|ÿÿt¤Gèÿÿ~Ðÿÿ0zÿÿEGÿÿx)ÿÿ•¡ÿÿ¡ÿÿ¸~àðªëN–¤©zèŒÎ*‰ x+Eµ|{GÁôŠNÿÿ®[ÿÿ¥ËÿÿÆÿÿ™ÿÿ–+ÿÿ“†ÿÿÙÿÿ=ÿÿ–7ÿÿ¡fÿÿ§ÿÿ»œä‘ÌÃýÊâ9ꆆ¾‚zÏí,°¥½ž”ÂTž ‡½ÿÿ–ãbÇÿÿ’?4 ÿÿ“P—ÿÿ—«ÿÿ“59ÿÿV ÿÿ‹xÿÿJ÷ÿÿ¥cÿÿ« ôQ¿ŸàÐSÉ0Ûµ­ú沂kÔàòi7Õ½I¡UÚµÎ9‡ÎÈÛÿÿ~òÀžÿÿrò§Žÿÿmñ|¿ÿÿy¿}‡ÿÿw"{žÿÿuÄnMÿÿuñÿÿŸÿÿÿ«ìÀ¯âÔæËÓãb·/ÿ@šmÿÿ`/ÿÿ|KŒÿÿQ0sÓÿÿ¸ëlÞÿÿÿÿg‡ê#ÿÿTÔÛÚÿÿG¸ÁhÿÿVúÁlÿÿX8²Žÿÿ]H¦sÿÿ]®ÿÿ«ê@À…â!ÖÀϾçþ¹¬ÿÿŽ¿ÿÿpÿÿ#¸ÿÿF¹:ÿÿ5¾FLÒÿÿŸÕ2»@æÿÿÿÿçKÀÿÿÿÿÿÿÿÿ9˜íÿÿ=&Þ÷ÿÿ<÷×<ÿÿ?ÕÌ(ÿÿ@êï¿ÿáiÖ¹Õ êÁ½"ÿÿ¤ÿÿf¿ÿÿJUÿÿÿÿ9 ÿÿ1?!íÿÿ; Äÿÿ“ÿ r Õÿÿÿÿ mÿÿÿÿ#–ÿÿÿÿÿÿÿÿ"Qÿÿÿÿ+ è›ÿÿ,‡ßÿÔ’Ü5í¨Ã;ÿÿ‘ÈÿÿfÿÿDÿÿÛÿÿÿÿÿÿ9¤ÿÿ…ÿÿwÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúÿÿÿÿ/ÿÿÿÿßÿíÃÇÄÿÿ˜¹ÿÿk˜ÿÿEXÿÿÿÿÿÿÿÿÿÿÿÿ„-ÿÿÿÿ…×ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÌ¡ÿÿ§ÿÿsÄÿÿH³ÿÿ¨ÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿ€ÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ 2 2ÿÿ00ÿÿz@zÿÿó_ÿÿƒ˜Ëÿÿ«Í^ÿÿéÄ çÿÿÿÿÜÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿòZÿÿå¶ÿÿÿÿÿÿÿÿÿÿ¨ ûÿÿ›æÿÿ&L$²ÿÿíb8ÿÿ„­!gÿÿ¨™#3ÿÿíAöÿÿÿÿ -ÿÿÿÿÿÿÿÿÿÿÿÿùPÿÿêÖÿÿßÿÿÿÿÿÿÿÿÿÿÿpÿÿg ,ÿÿ%Ž#EÿÿNJ+…ÿÿ€Ì'­ÿÿ©!×ÿÿãîu"ìÿÿÿÿØÿÿÿÿÿÿÿÿþ2ÿÿíµÿÿà›ÿÿÙ©ÿÿÿÿÿÿÿÿ £ÿÿ¢[ÿÿþ'Ýÿÿâ,uÿÿN‹-?ÿÿ~01fÿÿ§‚3%ÿÿoò)ÿÿÿÿ&Jÿÿÿÿ ®ÿÿÿÿîhÿÿàÞÿÿÙnÿÿËEÿÿ‘ÿÿÿÿÿÿÿÿÉðÿÿ%JãÿÿQ9[ÿÿ;GD¨ÿÿlT@Aÿÿ§Býÿÿ¾ü3tÿÿÿÿ7ÆïTÿÿ(=ëJÿÿÝnÿÿ 3ÍÓÿÿîÂ’ÿÿ½”ÿÿ"zÿÿÿÿÿÿ&Qÿÿ3ÃãÿÿÖ'íÿÿ)@âÿÿ0PÆÿÿb†S´ÿÿ¬5Vÿ,ôB[®ãEÿÿTmÒXÿÿDìÎþÿÿRÀªÿÿ+ͼ`ÿÿ/Ü©üÿÿ;¢Ãÿÿúÿÿšl;õ¹VýiÃÚ1šŸmÒÖÝp—À+ÿÿiv³¢ÿÿ_i¨ÊÿÿBÉžJÿÿH"£²ÿÿDý¨PÿÿBY™®ÿÿHèÿÿgÿÿ&tÿÿANÿÿN¾ÿÿkÜÿÿ‡—éVJYÛ´š·‰–£vÿ‰$“޾©Šï‚–ÿÿˆüÿÿ}¾tÁÿÿlnnˆÿÿmq|ÿÿi^tÛÿÿeid›ÿÿg—ÿÿ ÿÿ5ÿÿLšÿÿw#ÿÿ–Óîþ£vÍ*šð8V’Œhò{C+×="¨¦r§àš—¤Õˆÿÿ¥"ÿÿ¡¹ÿÿ’9ÿÿ8ÿÿÿÿŠuÿÿ†©ÿÿ+»ÿÿ@Gÿÿ—ÍÿVŸ¬Ý´¦éÍ÷µ´g½:±yz¬¬cÿ}…$•²ÕmŠM~ÿÿ‡1|äÿÿ~+MQÿÿ€N(ÿÿ…°ÿÿˆÿÿ…õ ÿÿ ÿÿ<*ÿÿ¤ ÿÿŠÖ⬒ÆAµ]´šÉ¹¢ƒØüdSÑ"NÄÁe9L|Ãã£Erè›ÿÿn ·¼ÿÿd¡fÿÿ],–Àÿÿ_ŽSÿÿ^i}kÿÿeFt|ÿÿe´ÿÿ™Ôüþ¡ªÓn°bÁÄ´«³-Íž„㚆•óCZò>5Kñ?Øc7ôV¦N[µñÇÿÿXÛ ¢ßÚÿÿD—Ïwÿÿ<˜ÅÈÿÿ>k½ðÿÿCܶ`ÿÿG8¨íÿÿLF÷v]ÐM²”¿©³T³öÎN¦ªó±ƒÿÿc¼ÿÿHyÿÿÑÿÿ/BMýÿÿ™ñ.—@ÿÿÿÿÿÿÿÿ4Óÿÿÿÿ$€êLÿÿ&ƒÞrÿÿ*ÓÖ·ÿÿ. Íÿÿ1Ðà°V¾½±h¶½Îó®pþ¡}ÿÿ[ñÿÿ=Éÿÿ.½ÿÿ!gÿÿH¤Îÿÿ„ò ÿÿsyrÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÞÿÿÿÿÔðÃÿÿvÂU²ÙºÎ¶ôÿÿ€ÎÿÿZÿÿ31ÿÿûÿÿÿÿÿÿÿÿŠ ÿÿv«ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¾µÎÄ¿ªÿÿ…Ðÿÿ\~ÿÿ.Åÿÿ'ÿÿÿÿÿÿÿÿÿÿˆÿÿ}ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿ÿø3ÿÿ`¯ÿÿ0(ÿÿ¿ÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿ€ÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿäÿÿ:XÿÿYŸÿÿ}œÿÿ«‘ÿÿÞÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿôÿÿèjÿÿÿÿÿÿÿÿÿÿÿÿÿÿ:ŒÿÿX×ÿÿznÿÿ¬rÿÿÜ¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöLÿÿéÊÿÿÜ~ÿÿÿÿÿÿÿÿÿÿÿÿ”<ÿÿ:SÿÿV8ÿÿx“ Rÿÿ¬éÿÿÚKÿÿÿÿÿÿÿÿÿÿÿÿõÿÿçÐÿÿÚöÿÿÓùÿÿÿÿÿÿÿÿÿÿÿÿ k çÿÿ"UÛÿÿ-TOÿÿw–—ÿÿ§r{ÿÿÛ½Âÿÿÿÿ ÿÿÿÿô¢ÿÿá‡ÿÿ×ÂÿÿФÿÿÉÓÿÿÿÿÿÿÿÿÿÿb/ÿÿ)ÿÿzþÿÿAz& ÿÿv—)õÿÿ¨ö'ÿÿÞà(!ùoÿÿ#2ä"ÿÿÁàÿÿÑiÿÿʧÿÿÄMÿÿ¿ÿÿÿÿÿÿÿÿÿfÿÿµÿÿ‹¹ÿÿi23ÿÿ4_9ÙÿÿhU:¦÷E£”<¬çËÕV@\ØçÿÿAÎÇ}ÿÿ2õ¨ÿÿ‘ÂÏÿÿü¾Ñÿÿ ç¬üÿÿ ¨sÿÿ ÿÿÿÿÿÿÚÿÿ(ÿÿ?Sÿÿ'A,Ìþ>SÛšNˆSÉ‹)X¿ÆÀAZ@¶ÿÿ[ߨ–ÿÿNxž6ÿÿ@Û dÿÿ1¨Ÿ–ÿÿ3²š¬ÿÿ6Ä•[ÿÿ7ŠÿÿÿÿÛÿÿ%Öÿÿ81ÿÿK°ý=nnÒ7GGGL¤E¿x’XdNwI‚ªŒyzyaú¥{ uHÿÿph"ÿÿgx^ÿÿau_ÿÿ`,[`ÿÿ_ÿQÿÿ_Üÿÿeÿÿ Îÿÿ6ÿÿFWævsÎÓMмX‹Q#_€ÆZöi³".™l†-w—ª8Ú¢—V ÿÿ’ŽÿÿŒQÿÿ„.ÿÿƒjÿÿ€àÿÿ|åÿÿ ÿÿ14ÿÿ?µÔo|Æç‹]·ªžq¤Ž®ˆŠmU›òQ&n•m…Ä}z…MyU}BÜw#t]ÿÿrµgÜÿÿlV{ÿÿ~>ßÿÿ}—™ÿÿ{ø ÿÿvhÿÿ*ÿÿ<$Êæƒ›½ÒŒH° ¢Ò š±¨‹%ï_#À<4~°¡*ëiš³~‹`µ_Ýð\7­YÿÿW¤œÿÿQ÷ŒºÿÿLÉ…&ÿÿN˜ƒ§ÿÿNµ{ÿÿQwÿÿ<æÂkŠœÁw9«f¤¢d³–‡Î)mÙ\S#ÛXýÖW1M Ø ‹D¤×ñÜpAnÒ.ÿÿ;;Èÿÿ2r¾†ÿÿ-¹Sÿÿ0¨°‚ÿÿ5v§ïÿÿ8B샬Â}í©¤ò¢U²KˆÕjáì–TÜøÍM4ÿÿÿÿ*}6ú õÿÿ‡†(ÙÿÿÕS+öÿÿÿÿ(Æñfÿÿ¬ÝëÿÿãÕ«ÿÿñÏpÿÿ'É#ÿÿî¿ÿ¸¨:¤ƒ¡}®ü‹òÙZk“÷¯PVÿÿ1Öÿÿ ÿÿÿÿ5 Ýÿÿƒ/ÿÿ–ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿî8ÿÿª¢= ©å™€ïoÿÿMTÿÿ%ñÿÿçÿÿÿÿÿÿÿÿ„“ÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŸÿªf§–ÎLs^ÿÿNØÿÿ²ÿÿÿÿÿÿÿÿÿÿÿÿ‡ÿÿ|ŒÿÿŒŒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŸÿËjwIÿÿOÀÿÿJÿÿÿÿÿÿÿÿÿÿÿÿÿÿyÖÿÿ€ÿÿ‡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöÿÿ0àÿÿSªÿÿ~xÿÿ¤XÿÿÚÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúÿÿîÕÿÿä¶ÿÿÿÿÿÿÿÿÿÿÿÿ‚ÿÿ.ÀÿÿQ®ÿÿ}Vÿÿ¥IÿÿÙÿÿÿÿÿÿÿÿÿÿÿÿùxÿÿìùÿÿÙÿÿÔ.ÿÿÿÿÿÿÿÿÿÿÿÿÒÿÿ,ŠÿÿNæÿÿyðÿÿ¥¼ÿÿÖÚÿÿÿÿÿÿÿÿ÷>ÿÿæ¿ÿÿÕ¾ÿÿÏáÿÿɸÿÿÿÿÿÿÿÿÿÿÿÿÿÿ*ÄÿÿK ÿÿuˆÿÿ¦|ÿÿÔ(ÿÿÿÿóØÿÿÝ?ÿÿÏ ÿÿÉÿÿÃIÿÿ½5ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ*ÆÿÿGIÿÿqCøÿÿ¦´pü"Ð&Tò)ÿÿ6Ý¥ÿÿÎÂÿÿ½²ÿÿº¯ÿÿ·”ÿÿ´Tÿÿÿÿÿÿÿÿÿÿÿÿ%¢ÿÿ¡Šÿÿ2A•šö´h–"·áš '#ÕÇÀ%ïÏÿÿ*ˆÀ•ÿÿ7ÀVÿÿ´ûÿÿ±Äÿÿ®êÿÿª‡ÿÿÿÿÿÿÿÿÿÿÿÿ":ÿÿ¢€ÞMð8±Ê×G'=;ºÜ|ÕA›²²#DʧòêºDW¡†ÿÿ=P7ÿÿ0q˜Œÿÿ•ÿÿ ÌPÿÿ#Ћñÿÿ&'ÿÿÿÿÿÿ YÿÿÌÿÿ4 à P×¾V7S6O”óýe¡ƒLX`c„uRšWg™m&Òñggjÿÿc½\Bÿÿ]V–ÿÿOèR)ÿÿR~NêÿÿS›OäÿÿOäÿÿÿÿpÿÿƒÿÿ/SØLµ¿er¬Yzns¬N‡WP ÙyèŽ!fÔŒDí·2‡‰Þÿÿ‚Þÿÿƒ@ÿÿsÒÿÿr²ÿÿq‚ÿÿnkÿÿNÿÿœÿÿ)ß¾æ]A»ó}¢`‡…‘p™—`¡Š[@0`Îs(pIsÅhpcºBd£pÉÿÿb\b~ÿÿ\Ü"ÕAùÿÿS}`ÿÿl¤óÿÿk² ÿÿg`ÿÿ ãÆ:m»Ôqó¶ÏÔŸ¶Ž:ŒRšAs¸¬…V·²ct ±öUæxKL¾§¼MHŒ¦JÿÿFø“fÿÿAH~­ÿÿ<1{óÿÿ@Ðy,ÿÿ?fstÿÿ@ßÿ;æ½Ox߲߀? ­’ø‹ôšùj(³ì[(ÉTQïÏ–ÅŽ%5:Èiw¥2;ÇÖ»-óÇàÿÿ- ¾$ÿÿ$y±lÿÿ“­šÿÿ ª-ÿÿ!Í wÿÿ&®¿ÿw°5- µ•.’6£·d÷¶­Y<Õ;=Úü0æ©ç_J#!êr«Ü쎺ºëÌÿÿÛ’ÿÿ%ÏLÿÿÈËÿÿ¿ÿÿŽ¿ÿÿÿ ¯W€ •E—c¥ g}ȸTà 8àðâ%îÿÿ ÿÿÿÿ ³ÿÿjZÿÿ2ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöEÿÿçQÿÿŸÿ’òž4¥—dÕÏ¡V²ët4ÿÿÀÿÿÿÿÿÿÿÿÿÿoŠÿÿ‰Oÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿž¢¤µj‚ÌpZáò€1Gÿÿ’ÿÿÿÿÿÿÿÿÿÿÿÿwºÿÿ{Øÿÿ‹Øÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿw0ª‹]kñ`1ŽÿÿWÿÿÿÿÿÿÿÿÿÿÿÿÿÿhÚÿÿ€ÿÿ’ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿPÿÿ&âÿÿM*ÿÿÿÿžsÿÿÕxÿÿÿÿÿÿÿÿÿÿÿÿù´ÿÿìÓÿÿ׬ÿÿÑ¢ÿÿÿÿÿÿÿÿÿÿÿÿvÿÿ"¢ÿÿJZÿÿ€\ÿÿŸëÿÿÔSÿÿÿÿÿÿÿÿù7ÿÿëgÿÿÑ›ÿÿÍ8ÿÿÆýÿÿÿÿÿÿÿÿÿÿÿÿ¬ÿÿ ÿÿG×ÿÿ}?ÿÿŸÚÿÿÒ"ÿÿÿÿ÷ßÿÿåëÿÿϨÿÿÆ8ÿÿ·½ÿÿµ¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿCùÿÿx®ÿÿ  ûýÍmúÑÿÿÚÞÿÿ͘ÿÿ¹žÿÿ±xÿÿ¯Xÿÿ¬ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ"ÿÿ;ÿÿsÛïežwß)ºÑÙ»ó×Ì ÿÿºÈÿÿ¯Ôÿÿ§ÿÿ¤üÿÿ¢‡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿMö@9Úáù`ŽÓ~ŒžˆÈ²³¨ .Áºæ+ c»Ëÿÿ!±ÿÿ¤ÿÿžIÿÿ#ÿÿšÛÿÿÿÿÿÿÿÿÿÿÿÿéï yÅÌ$O"‘ºÏDï(Ó­Ìrm-ߥâÝ/lšÌК.n–vÿÿ/ôØÿÿ#ÌŠ·ÿÿy—Ëÿÿƒîÿÿ ÿÿÿÿÿÿÿÿÿÿïŠ!sËí9D¯). $j†™QOv¿NÈOÎj‡ŠRêa–ºèR¡\SÿÿVS.ÿÿOúNiÿÿEÖIåÿÿ@PEŒÿÿBŒE‹ÿÿ@ÿÿÿÿÿÿ&íõ“Ág?­ñWòœbiÆf#AßE€ó•Rí{©±£àtV èHo²ÿÿqwÿÿgçÿÿbÄÿÿcÿÿ_çÿÿÿÿWì©¿¨I¤.cnËqr|m}<XI|Å,jUª3`bGbçUcˆ§µPrcÿëwNZßÿÿKÑBšÿÿGøðÿÿWÓ…ÿÿW¥ ÿÿUÿÿ 2ìquÁýNYŸ„fJ7pyV‚ì`ášKSp§/|ÉB„—gh9˜&«z5°—hë­3õ‹oÿÿ1‚uÿÿ*¨|wÿÿ)izÿÿ+Áfˆÿÿ3þæì Á*PkžkŠq¨xÆ_­¥vH€´j99½k¶b˜) ¸ãgÌ À¹t§ï®¸ç$}²dÿÿ2§|ÿÿ ¦¡Ïÿÿ y žÿÿ ‚šzÿÿɱyaÃnmc‰qÈyý‡ï`«Q7FÆL)ÌÌUaÑcÒÿÓ$__Õ䤖Örç!ÎìÿÿÅeÿÿ»ñÿÿ¸7ÿÿµ:ÿÿ‘n,ŠÁq |Õˆha¯€0,Љ"•ÖñøûdÿÿÿÿcPÿÿ¢§ÿÿÿÿÿÿÿÿÿÿÿÿòpÿÿåˆÿÿØ]ÿÿŽrŽ€ú‡„aê°ì0Òþ!ðÙÿÿÿÿÿÿÿÿÿÿj¶ÿÿ5ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ„íˆd`•¯i2éÔ¶oÿÿÿÿÿÿÿÿÿÿÿÿÿÿoÿÿÿ{?ÿÿ‹>ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ`¬¾7ä×ã2ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ`ÿÿ€ÿÿ˜üÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ þÿÿ ÿÿF%ÿÿIÿÿ•‹ÿÿÐxÿÿÿÿÿÿÿÿø2ÿÿé ÿÿÍÿÿ¸+ÿÿ´šÿÿÿÿÿÿÿÿÿÿÿÿûÿÿ×ÿÿ4šÿÿƒíÿÿ•ìÿÿϦÿÿÿÿú¥ÿÿ×hÿÿÎÿÿ±ÿÿ¯&ÿÿ¬`ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ!ÿÿ3hÿÿ€fÿÿ•Éì§®<þ$þ³ØâÿÿÍ ÿÿ³¨ÿÿ©§ÿÿ§îÿÿ£ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ#œÿÿ1™ÿÿ}é·œ­à¯>ÒŽéáÌ#ÿÿ´¾ÿÿªïÿÿ˜]ÿÿ–¯ÿÿ•2ÿÿÿÿÿÿÿÿÿÿÿÿÿÿzé¦0õÓ…RÌÖÇgÇ—°"Çâ&µöÿÿªŽÿÿ›Ðÿÿ/ÿÿŽ+ÿÿŒÿÿÿÿÿÿÿÿÿÿÿÿót oÕP+*ÆcN¼w·o¦ç²nÒÓ¬!ÿÿªÿÿ‘Úÿÿ„îÿÿ„Gÿÿ‚bÿÿÿÿÿÿÿÿÿÿùwеÁ!7š®;@¡¾i-N˜à”®̳½ÀŠõÁ¿„…ÿÿ›‹Oÿÿ|Åÿÿ|ÿÿy~ÿÿÿÿÿÿÿÿþÑ“º‰ ý$²£y‰‚=‹jòD¿X}«¾AS•ß¿B»Lmÿÿ@dEÙÿÿ9fU‚ÿÿ"»Sÿÿ$«@éÿÿ-ÿÿÿÿÿÿÐ?Úµö(D•Ë:O‡]SZ`9¬4RoüqGmi¶;‘†að ÇÂ\“®ÿÿZ¼ÿÿ]ŠÿÿR"ÿÿR&ÿÿNÿÿÿÿËŽ5²2ˆŽO|WÅiYeœR™oàBLe ¨M¸WûX‡BàY•À=Y/Êš:ŠWqÿÿ9¸E×ÿÿ9B¸ÿÿA\ÿÿA… ƒÿÿ@ÿ=ÉÒJ¯À5ý‹RM3z8Y€fe­P¯{eAz’€JJ2’ˆ^Xi'7ˆÊšÊ$õˆKÍ"„“ÿÿÍ{ˆÿÿKm×ÿÿ™kfÿÿïXvÿÿ#´É:,–3䆀PxÙZd×fMO®‹2¤¢ìçªÙ§×޲ªWÀ Ûªì•eÚ§ÅÉ”/¦dÿÿ2ÿÿ‘uÿÿÿÿŒ:ÿÿŽ{N{„úP¿xµ[eGfCPI™Ðjµ¥h´…¹ÉúÅOUsÈ^”%Æ®ÇDÃòÿÿ¶pÿÿ¬tÿÿ©¦ÿÿ¦žÿÿ…Qpz*ZÂgeQO¡Ã>·µ_ũ̅ì`ôòxXWõ¾ ÌûÐý—õrÿÿêÿÿÓÿÿÎËÿÿËÿÿ{N[Nk'cT<¥x/´h?Êvÿÿÿÿÿÿÿÿÿÿqéÿÿ’Ñÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿjnjn[w¥Ÿ/±•ÿÿÿÿÿÿÿÿÿÿÿÿÿÿtÿÿ~ÌÿÿŠÌÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿW†¢Í#áË ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ`ÿÿ€ÿÿiÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿ ÿÿ/ÿÿSÿÿŒ/ô‘®ñÿÿÿÿùoÿÿÖÃÿÿ··ÿÿ­ÿÿ™nÿÿ–Åÿÿÿÿÿÿÿÿÿÿÿÿÿÿ"Xÿÿ(åÿÿ‡„ÿÿ‰VábŸüÎûéÕàÿÿ˦ÿÿ®Üÿÿ—®ÿÿ‘œÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ$‘ÿÿ'Tÿÿ†ä㚠ߢdÊûà:ËÕÿÿ¯ÿÿ˜´ÿÿºÿÿ‹Nÿÿ†ÿÿÿÿÿÿÿÿÿÿÿÿÿÿר(6É H5×áÓÌ¢œ¬À™áj¯ðÿÿ¥÷ÿÿ‘wÿÿ‡´ÿÿttÿÿuDÿÿÿÿÿÿÿÿÿÿÿÿô® ±ËÔ"§¶Ï?‹¯_j’®ƒ‘û²Ñر¦#ÿÿ’[ÿÿˆ5ÿÿuÿÿn"ÿÿmÓÿÿÿÿÿÿÿÿÿÿüÊÌt¿ W¬"?Œ£Òc¾œáŒ&“Y½³‘#ñ ˆ*ÿÿy&ÿÿm™ÿÿfÔÿÿeýÿÿÿÿÿÿÿÿÿÿÎó´Ð«ô÷žq9^–u`oŒöˆ€†Þ±‚nÜÂbÿÿsáÿÿe€ÿÿ\Dÿÿ\ëÿÿÿÿÿÿÿÿÏ*´]§#ކýín¡à)ë_ï=î*Wåi¦-tQ™Í/ªK™Ç0æI™ÿÿ/¦A_ÿÿ* @†ÿÿ W?¤ÿÿh@ÿÿJÿÿÿÿÎß´(Œä!€}+örŒ<ÔQÄ2Ò"[\)r=¡U4ÂgN“´XJ–ðfF^ kÿÿEÊÿÿF> °ÿÿ9°ïÿÿ6œÿÿÎË´€‚%Ï€`0èf™DEYžOzLbåC 1=%NEO‘2N‰ƒ{,)OÞ·µ*PÚõB(îB²ÿÿ(Ê%Ýÿÿ1zÃÿÿ0ã ÿÿ.Ëѳ4€b&C‚Ü5*e4FgW÷TJCOd¦-yÿqð … ßyòK­¢x|…í=yŒ¹‡ äyò! ¢sUÿÿ hÐÿÿ½W÷ÿÿ”Tÿÿ ®°ÈyÄ)&w“B~c5H«YFUè>lnŒzl•œ˜Ý™ªI·–À€™”ú³p”½þ׌zÿÿ|ÿÿx7ÿÿvAÿÿ€)‘v“Bc`IŸ]Vµ01„œœr¢£©ë¯®çML±lnù³£³•³ÿÿªIÿÿ–Qÿÿ‘ ÿÿ‘ÿÿv˜B)d¿J`„V×–i¤¼«ã³·È ÌnÒÂLzÖÑöÚœ»=ÚÿÿѬÿÿÈõÿÿ´bÿÿ³çÿÿgûJ¹c|W¼œâV¤5­cËçÿÿÿÿÿÿÿÿm”ÿÿ–}ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿôAÿÿ^ô\¾±¤šÇÊÿÿÿÿÿÿÿÿÿÿÿÿvBÿÿr¤ÿÿЇÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ©¦¨©æÿeÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿŸÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿ#Óÿÿ*ÿÿ‚_ßÿŸÿóYóYÔ­ýZ²;ÿÿ—åÿÿmÿÿr¡ÿÿpXÿÿÿÿÿÿÿÿÿÿÿÿÿÿ$Êÿ·Å­µ§ TI°tŽ¢Åƒã«Wÿÿ ÿÿˆ^ÿÿnÊÿÿcÕÿÿbšÿÿÿÿÿÿÿÿÿÿÿÿñâ ËÀò_¯>å SUð¦ß…þµ«ÝØ’¯ÿÿˆ:ÿÿq–ÿÿgÉÿÿWôÿÿXÉÿÿÿÿÿÿÿÿÿÿý3³J¸Èµ¢f8–(SM‘u©ˆ »ð†V÷tÛÿÿj‹ÿÿ\îÿÿRLÿÿR˜ÿÿÿÿÿÿÿÿÿÿ̬™a õ‘]0ɇ«Kc|‹põyK¯·qÕ¿mMÿÿaõÿÿVÚÿÿLÿÿLÿÿÿÿÿÿÿÿÌ«­ä™O‹{Ñ&vVG¡q¾o¶kœwiIÈ’e.þ/ZOÿÿP7ÿÿDñÿÿEmÿÿÿÿÿÿÍÿ®m–ˆ|KevHXö9Po]Ö;HÞŠ.D–´¹ÜBÆä€âC‘ÿÿJD%ÿÿDáÿÿ@ÿÿÿÿΕ®Q’ô|ñ xˆ#Ç_(wJš.( ³Hõþ8yCS£o¹> §£ù8ßÓy6?ÿÿ6ÿÿ9*çÿÿ,F,ÿÿ(,и®ŽÑ~ð¢ur\V2¶J>€À!"aS1_]b>J^B¬/’Y¿}ño‚ã„‚4.{sÕƒ ¡;xùÑ£yµÿÿmÜÿÿW•ÿÿXCÿÿ€ _Î4á_”@íN½C;‚¢…•’g•c›!:%¢”Zì“ᨚ*ÿÿµÿÿ‡áÿÿwcÿÿvNÿÿc)6a¼@<Q’Dl„`Žh™µ¦ ¬g° ¯:6ÔÈ£lùÑU¾åÑîÿÿ´ðÿÿ®Žÿÿ ÿÿ“âÿÿ`@S¼Fv‰¹–4¢;¦èÇÊÿÿÿÿÿÿÿÿQjÿÿž±ÿÿÿÿÿÿÿÿø7ÿÿÖÿÿÓçÿÿO:Mþœ7¤SÿÿÿÿÿÿÿÿÿÿÿÿÿÿRcÿÿŠcÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŠêŸ3°›ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ`ÿÿŸÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ у ˜8Õ¬´PðÜ´Ÿÿ¿ÿÙ™­PÿÿŽhÿÿsÿÿhsÿÿYÌÿÿT9ÿÿÿÿÿÿÿÿÿÿÿÿÿÿzÁXª„7³™E8 ”i}ÉgåAŽ~ÿÿs<ÿÿkJÿÿ\rÿÿSjÿÿN«ÿÿÿÿÿÿÿÿÿÿÿÿÌ9‹¼ð¶¤)5Ø—»If“ìh׈œÃŠÿÿm³ÿÿd4ÿÿWÿÿMÕÿÿH«ÿÿÿÿÿÿÿÿÿÿü5¨F°¿t–E/ÛŠC°s:PfrqÏ ofíÛfÿÿYÝÿÿQ[ÿÿGÇÿÿBDÿÿÿÿÿÿÿÿÿÿ­9˜EŠ& ‡†ý'ùrv@$n}LÆiùÅWc]Í\ÊÿÿS¡ÿÿJ×ÿÿ=èÿÿ:œÿÿÿÿÿÿÿÿ¬ý¦aŒŒÝo¯!Hj ?4d)PVŠBZ=ÀÏVÿÿLÑÿÿCÿÿ9ÿÿ5vÿÿÿÿÿÿªº¦ê‹|~ wdø´^E:ÆXÏS/Pô†P:± KäƒEÇÿÿ<8ÿÿ3áÿÿ0'ÿÿÿÿË™§á‰7~ }³gî\áRé4)fKOSb3C„{$ *?{¥Ù F<œÌ‘ò=ÿÿT<°ÿÿ1.ÿÿ*¶ÿÿΨX†j~qýY’ ]Rü@¹$I9—è0d3Ü (_v.¼•÷*äô¿F'ãõ%]!ÿÿ'ûÿÿ#;ÿÿ^—5ƒ³~Þ„…WT|N* e:+*(¦847]ƒí<}øÒ3:ÿÿ¦ÿÿ Sÿÿk„ý6…“ z[t¼K{*›8¬1ÊâDKVjV êRe5uN¨g£M`–fJ¤¿ÕN ø ;0ÿÿ1:ÿÿ-$ÿÿ€KyÐ$¢^¨tN‚-¡;4[dBf=fÆ_#›Y5RÀhÅ”`Sü¾i“ÿÿS¾ÿÿ8•ÿÿ8(ÿÿxÜ _Ø#åP%1O9Ò8”jîqwlz={3x2Í’Xf‚À§•z¦¨d}oÿÿqˆÿÿW¦ÿÿSCÿÿ`'¤RF3û:H:ku|î‚i‰ÿ’M+ ¨AT"­ ‘Ñ´ðÿÿªØÿÿŠÁÿÿƒSÿÿw>ÿÿSÙ51<\:­|¿€]Ž“4¢²¦4ǪÏÑ÷ûZgâÁÿùZÿÿíÊÿÿÓyÿÿ­Ûÿÿ¯ÿÿ;ù@ƒ‡_’Nž¾ÿÿÿÿÿÿÿÿÿÿÿÿUìÿÿ“‘ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ŒË¡Ôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ`ÿÿŸÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøZƽOP¤T/–j@‘ÑZý®œ®œsÿ¯guÿÿZÿÿQÿÿGúÿÿ9‰ÿÿÿÿÿÿÿÿÿÿÿÿ§¸GT—d+ñ޶@ji"H‹i´ÖhGý<\_ÿÿTÿÿL,ÿÿ;#ÿÿ4üÿÿÿÿÿÿÿÿÿÿ¤R‘ì„Í xsf nE;„d÷E‹fÚ¿ÿ`èÍ@V~ÿÿN+ÿÿE¿ÿÿ6Úÿÿ0ÿÿÿÿÿÿÿÿÿÿ¥_‰Ä~Nnf$gŽ9ða»;ÊMG€JVJ«QÿÿGvÿÿ9"ÿÿ2Xÿÿ*ðÿÿÿÿÿÿÿÿ¨UŒ|§~ eÃ3[£5U\?8IŠ{OMœ¨ûJÿÿ:Ùÿÿ4;ÿÿ- ÿÿ%~ÿÿÿÿÿÿ§ÉŠê|ׂÌr½Q-Qã0 P‘9D„~DCi¤:'ç†5ëÿÿ.Ñÿÿ'>ÿÿ ÿÿÿÿ¢óˆ| €cyÊRwK7 ƒGl(•=|E“;¨}¹8—ž0Cɽ16ÿÿ)6ÿÿ!ˆÿÿýÿÿ°‘†º{Œ€~ZRL-Dè=¸#J8¢C“89k4Ÿ”,¬·Þ*Öé9%²ÿÿlÿÿãÿÿ¶{¹ë‚©RLE Ý1¥'ûA)0$ =TÇj:ƒÐ–ݰ¥pÛÛ+Ö ,ÿÿpÿÿ˜ ÿÿ€×…Q0JÍ gAÇ €,”+63F~V2f1Æ2[”+j1+«¯Ø)SÔ¦$!ÿÿÿÿŸÿÿ€„˜I‘DNwÌB:b,#"E‹:?>\>78(W7hW$1¶tG2¬®h/¦È¤,„ÿÿ"1ÿÿ\ÿÿ€MoQÔø:ŽÕ-z&1GûJQL LQKª ‡C©TuH\c„;O±J5£¹x4ßÿÿ,%ÿÿ#>ÿÿV÷÷U ;|•,<6NsQáU\VôW WþTAP¤o×P´™ZJ`ÅATuÿÿ2éÿÿ/ ÿÿUÖÖ<±"uOìS{Xn˜s@v=wpwmq{!¬í™•Þ‡žÿÿt'ÿÿlûÿÿOZÿÿDË&«SÚV8p¶{¹#‡‡ˆ†¨‰É©WPR§“\ Òè´ÛÒbÿÿ¬ÿÿ…jÿÿyOÿÿPµm‰y'€ˆ#‡ÿÿÿÿÿÿÿÿi­ÿÿ¥˜ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿíQÿÿmî~j‰Æ˜ˆÿÿÿÿÿÿÿÿÿÿÿÿÿÿ`ÿÿŸÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¯5“0†‘…÷2k•3\bU@T·´·Z:îIPEÿÿFíÿÿ7*ÿÿ/øÿÿ(MÿÿÿÿÿÿÿÿÿÿŒ€†~Ým#ÖbÐ2`^AMç­æRà uKwÿÿ7óÿÿ1Òÿÿ*úÿÿ#Oÿÿÿÿÿÿÿÿ¡b…Y}ŽƒšN‰åWý-$[¹5,Añ‚èJ¡ÿ:}ÿÿ3Yÿÿ,òÿÿ%„ÿÿ ÿÿÿÿÿÿ¡…‡%| ‚¯xóJÇSOb)qT±)À;«|à;Ïšþ5®ÿÿ.0ÿÿ'Mÿÿ ÿÿ¸ÿÿÿÿÿÿˆ½~)›‚ KFF`ëBLºH£'V5¿t4œ›x*ùÐ~(ßÿÿ!˜ÿÿ*ÿÿÊÿÿÿÿ„Ç~þ„AL0FÛ@›;¯4¶$­.yl€+ˆ–"¼Â¢#•ÿÿøÿÿ¢ÿÿ Œÿÿ‘µz„~¾ƒFLµH?ó<40õ|)±0l%Ìe¢ŠÝb¸;ðýÿÿ ºÿÿÿÿ‚ß~Ô‚û‚bH @8Aˆ1Š' 1)ñZGÐ?(¨Ô éÏ¡ òÿÿÑÿÿÿÿ€‚ö‡´H¸@†@ù5˜%Xzò()¨ µLqMqÀp ŸœÂ Äy÷ ÿÿÿÿ€‡I7@H@¡8í!Ú"v $­ÔH…gxá‘hçÀÔ ˜òÿÿÿÿÿ€G;?¿@„6´œ `!µ)6*6*!&4 ""Gà%a””ŽÆ™ÂóÃÈÿÿîÿÿPzCSiF /©å #Í/Õ12®21žÎ+ñBq*ú]È%œø'¬Ä« §ÄUÛÿÿºÿÿI! !Iz¬1u 0²4t7¡9™:§:à:È5XHä3U`Þ-æ’ß/?Áv&ü¼—&zÿÿêÿÿG@„2t#4S8hHKÒN9P PÖPëM÷CnpNh]u2g¾.Wˆÿÿ-îÿÿ(ªÿÿ/( 7?FNMRæmSp‘rƒt tipF§[Ÿ|b›oŒpÿÿwîÿÿq\ÿÿOhÿÿ9KQGpÞyã{M{؀ʅWªú&_pÿÿ°°ÿºÿÿÿÿÿÿþ!ÿÿÚÔÿÿ‰9ÿÿMÌX:w\•=ÿÿÿÿÿÿÿÿÿÿÿÿ`ÿÿŸÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ•·m€~ÂNOUûS738–/Í£ž¬(FÂEDt\7¿ÿý5ÿÿÿÿ€PJE¼@@1ß«5 =TfǃH¶™íªÿÿÿÿ€Fä@@3‹ê QÐe [© N7šV€«òÌÌÿÿÿÿH@@5¥¬dn æ˜ ¯4kSdÙ€<”T¿ÿ®ÿÿÿÿ@@6öq û2R ®ü ‹˜ À¿ÿ Éÿc ÿÿ@9!¤ !"$&œ'{''%/ ¹ÐXe½ÐÏ.¿ÿ_ÿ† ‘ÿÿ;™± d%á*L-‰/£0Ê1:1+0Æ*Zê&#`&§¼Ï ¢¿ÿ‘ÿÿ÷ÿÿ #n)¨/3W6¢8÷:zG”HGô6MG1ª`2š¿ÿ,¿ÿ,Éÿÿ#ÿÿ% ,ƒ2¹8IâN«RATÑVkßl6kÒ~ž~ÒŸÿ†.ÿÿqMÿÿ1ÿÿ.ƒ5{IqQn2u¯{zƒm‡Çÿÿÿÿÿÿ`ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûmÿÿ.[‰·å@n›É÷%R€®Ü 7e“ÁîJx¦Ô/]‹¹çBpžÌú(Vƒ±ß ;i—Åó ! O } « Ù  5 c ‘ ¿ í  I w ¥ Ó  / ] ‹ ¹ ç  C q Ÿ Í û)X†´â>lšÈ÷%S¯Ý :h–Äò!O}«Ù6d’ÀïKy¨Ö2a½ëHv¥ÓA€¾ý;y¸ö4s±ð.m«ê(g¥ä"aŸÞ[™ØU“ÒOŽÍ J ‰ Ç!!E!„!Â""@""¾"ü#;#z#¹#ø$7$v$µ$ô%3%r%±%ð&/&n&­&ì'+'j'©'è(((g(¦(å)$)d)£)â*"*a* *à++^+ž+Ý,,\,œ,Û--[-š-Ú..Y.™.Ø//X/˜/×00W0—0×11V1–1Ö22V2–2Ö33V3–3×44W4—4×55X5˜5Ø66Y6›6â7)7p7·7þ8E8Œ8Ó99a9¨9ï:7:~:Å; ;T;›;ã<* >h>¯>÷???‡?Ï@@_@§@ïA8A€AÈBBYB¡BéC2CzCÃD DTDDåE.EwE¿FFQFšFãG,GuG¾HHPH™HãI,IuI¾JJQJ›JäK-KwKÁL LTLLçM1M{MÅNNXN¢NìO6O€OÊPP_P©PóQ>QˆQÒRRgR²RüSGS‘SÜT&TqT¼UUQUœUæV1V{VÆWW[W¦WñX;X†XÑYYfY±YûZFZ‘ZÛ[$[g[«[ï\3\w\»\ÿ]C]‡]Ë^^S^—^Û__c_§_ë`/`s`·`ûa?a„aÈb bPb”bØccac¥céd-dqd¶dúe>e‚eÇf fOf“fØgg`g¥géh-hqh¶húi>i‚iÇj jOj“jØkk`k¤kèl-lqlµlùm>m‚mÆn nOn“n×oo_o¤oèp,pppµpùq=qqÅr rNr’rÖss_s£sçt,tpt´tùu=uuÅv vNv’v×ww_w£wèx,xpxµxùy=yyÆz zNz“z×{{`{¤{è|-|q|µ|ú}=}}Ä~~K~Ž~ÑX›Þ€"€e€¨€ë.rµø‚;‚~‚ÁƒƒGƒŠƒÍ„„R„•„Ø……^… …ã†&†h†«†î‡0‡s‡µ‡øˆ:ˆ}ˆ¿‰‰D‰†‰ÉŠ ŠMŠŠÒ‹‹V‹˜‹ÚŒŒ_Œ¡Œã%g©ëŽ-ŽnްŽò4v¸ù;}¾‘‘B‘ƒ‘Å’’H’‰’Ë“ “M““Д”S”””Õ••X•™•Ú––\––Þ——`—¡—â˜"˜c˜¤˜å™&™f™§™èš(šiš©šê›*›k›«›ìœ,œmœ­œí.n®ïž2žxž½ŸŸIŸŽŸÓ  ^ ¤ é¡.¡t¡¹¡þ¢D¢‰¢Î££X£ž£ã¤(¤m¤²¤÷¥<¥¥Æ¦ ¦P¦•¦Ú§§c§¨§í¨2¨v¨»©©D©‰©ÎªªWª›ªà«$«i«­«ò¬6¬{¬¿­­H­­Ñ®®Z®Ÿ®ã¯(¯l¯±¯õ°:°~°Ã±±L±±Õ²²^²¢²ç³,³p³µ³ù´>´‚´Çµ µPµ”µÙ¶¶b¶§¶ë·0·u·¹·þ¸B¸‡¸Ì¹¹U¹š¹ßº#ºhº­ºñ»6»{»À¼¼I¼Ž¼Ó½½]½¡½æ¾+¾p¾µ¾ú¿?¿„¿ÉÀ ÀSÀšÀãÁ,ÁuÁ¾ÂÂO˜ÂáÃ*ÃsüÄÄNÄ—ÄàÅ)ÅrÅ»ÆÆMÆ–ÆßÇ(ÇqǺÈÈMÈ–ÈßÉ(ÉqɺÊÊMÊ–ÊßË(ËrË»ÌÌMÌ—ÌàÍ)ÍrͼÎÎNΗÎáÏ*ÏsϼÐÐOИÐáÑ*ÑtѽÒÒOÒ˜ÒáÓ+ÓtÓ½ÔÔOÔ˜ÔáÕ+ÕtÕ½ÖÖOÖ˜Öá×*×s×¼ØØOؘØáÙ*ÙsÙ¼ÚÚNÚ˜ÚáÛ*ÛsÛ¼ÜÜNÜ—ÜàÝ*ÝsݼÞÞNÞ—Þàß)ßrß»ààNà—ààá)árá»ââMâ–âàã)ãrã»ääMä–äÜååNå„åºåïæ%æ[æ‘æÇæýç3çiçŸçÕè èAèwè­èãééNé„éºéðê&ê\ê“êÉêÿë5ëkë¡ë×ì ìCìyì¯ìåííQí‡í¾íôî*î`î–îÌïï8ïoï¥ïÛððGð}ð³ðêñ ñVñŒñÂñùò/òeò›òÒóó>ótó«óáôôMô„ôºôðõ&õ]õ“õÉöö6ölö£öÙ÷÷F÷|÷²÷éøøVøŒøÂøùù/ùfùœùÒú ú?úvú¬úãûûOû†û¼ûóü)ü`ü–üÍýý:ýpý§ýÝþþJþþ¸þîÿ%ÿ[ÿ’ÿÈÿÿ4hÑ9m¢Ö >r§ÛCx¬àI}±æNƒ·ë Tˆ½ñ&ZŽÃ÷,`”Éý 2 f › Ï  8 l ¡ Õ > s § Ü  E z ® ã  L € µ êS‡¼ñ%ZÃø,a–Êÿ4iÒ;p¥ÙCx¬áK€´éS‡¼ñ&[Äù.c˜Í7k Õ ?t©ÞI‡Ä@~»ù7u²ð.lªè%c¡ß[™×  R Î! !J!ˆ!Æ""C""¿"ý#;#y#·#ö$4$r$°$î%-%k%©%è&&&d&£&á''^'œ'Û((W(–(Ô))Q))Î* *K*Š*È++F+„+Ã,,@,,½,ü-;-y-¸-÷.6.t.³.ò/1/o/®/í0,0k0ª0è1'1f1¥1ä2#2b2¡2à33^33Ü44Z4™4Ø55V5•5Õ66S6’6Ñ77P77Î88M8Œ8Ë9 9J9‰9Ç::C::¿:ü;:;x;¶;ô<2">a>Ÿ>Ý??Y?—?Õ@@R@@ÎA AKA‰AÇBBDB‚BÀBÿC=C{CºCøD6DuD³DòE0EoE­EìF*FiF§FæG$GcG¡GàHH]HœHÚIIXI–IÕJJRJ‘JÐKKMKŒKËL LHL‡LÆMMDMƒMÂNN?N~N½NüO;OzO¹OøP8PwP¶PõQ4QsQ²QñR1RpR¯RîS-SmS¬SëT*TjT©TèU(UgU§UæV%VeV¤VäW#WcW¢WâX!XaX XÞYYWY“YÏZ ZHZ„ZÀZü[8[t[°[ì\(\d\ \Ü]]T]]Ì^^C^^»^ö_2_n_©_å` `\`˜`ÓaaJa…aÁaüb8bsb®bêc%c`cœc×ddMdˆdÄdÿe:eue°eëf&fbffØggNg‰gÄgÿh9hth¯hêi%i`i›iÖjjKj†jÁjûk6kqk¬kæl!l\l–lÑm mFm€m»mõn0njn¥nßooToŽoÉpp>pxp²píq'qaq›qÖrrJr„r¾røs3sms§sáttUttÉuu=uwu±uêv%vav¡váw!waw wàx x_xŸxßyy^yžyÝzz\zœzÛ{{Z{™{Ø||W|–|Õ}}T}“}Ò~~P~~Î L‹Ê€ €H€‡€ÆC‚Áÿ‚>‚}‚»‚úƒ9ƒwƒ¶ƒô„3„q„¯„î…,…j…©…ç†%†c†¢†à‡‡\‡š‡ØˆˆTˆ’ˆÏ‰ ‰K‰‰‰ÆŠŠBŠнŠû‹8‹v‹³‹ðŒ.ŒkŒ©Œæ#`ÛŽŽUŽ’ŽÏ I†Ã±…±Ë²²Y² ²ç³.³u³¼´´J´‘´Øµµfµ­µô¶;¶ƒ¶Ê··X· ·ç¸.¸v¸¾¹ ¹]¹¯ººQº£ºô»F»—»é¼:¼Œ¼Ý½/½½Ò¾$¾v¾Ç¿¿k¿½ÀÀaÀ³ÁÁVÁ¨ÁúÂMŸÂñÃCÕÃçÄ9ÄŒÄÞÅ0ŃÅÕÆ'ÆzÆÌÇÇqÇÄÈÈiÈ»ÉÉaɳÊÊYʬÊþËQˤË÷ÌJÌÌðÍCÍ–ÍéÎ<ÎÎãÏ6ωÏÝÐ0ЃÐÖÑ*Ñ}ÑÑÒ$ÒxÒËÓÓrÓÆÔÔmÔÁÕÕhÕ¼ÖÖcÖ·× ×_׳ØØZØ®ÙÙVÙªÙþÚRÚ¦ÚúÛNÛ£Û÷ÜKÜŸÜóÝHÝœÝðÞEÞ™ÞíßBß–ßëà?à”àéá=á’áçâ;âyâ³âîã(ãbãœã×ääKä†äÀäûå5åoåªåäææYæ”æÎç çCç~ç¹çóè.èiè£èÞééSéŽéÉêê?êyê´êïë*ëeë ëÛììQìŒìÇíí=íxí´íïî*îeî îÜïïRïŽïÉðð@ð{ð·ðòñ.ñiñ¥ñàòòWò“òÏó óFó‚ó¾óùô5ôqô­ôéõ$õ`õœõØööPöŒöÈ÷÷@÷|÷¹÷õø1ømø©øåù"ù^ùšù×úúOúŒúÈûûAû~ûºû÷ü3üpü¬üéý&ýbýŸýÜþþUþ’þÏÿ ÿHÿ…ÿÂÿÿ=z¶ó0m©æ#`ÙSÍ GƒÀý:w´ñ.k¨å"^›ØRÌ F ƒ À þ ; x µ ò / l © æ # ` Û  U ’ Ï I‡Ä>{¹ö3p­ë(e¢àZ—ÕOÊD‚¿ü:w´ò/lªç%bŸÝX•ÒM‹ÈC€¾û9v´ñ/lªç%b ÞY˜Ü"g¬ò 7 | Á!!L!‘!×""a"§"ì#2#w#¼$$G$$Ò%%]%£%è&.&s&¹&þ'D'‰'Ï((Z( (å)+)q)¶)ü*B*‡*Í++X+ž+ä,*,o,µ,û-A-†-Ì..X..ã/)/o/´/ú0@0†0Ë11W1œ1â2(2n2³2ù3?3„3Ê44U4›4á5&5l5²5ø6=6ƒ6É77T7š7à8%8k8±8÷9=9‚9È::T:š:ß;%;k;±;÷<=<ƒ<È==T=š=à>&>l>²>ø?>?„?Ê@@V@œ@âA)AnA²AõB9B|BÀCCGC‹CÎDDVD™DÝE!EeE¨EìF0FtF¸FüG@G„GÈH HPH”HØII`I¤IèJ,JpJ´JøK=KKÅL LNL’LÖMM_M£MèN,NqNµNúO>OƒOÇP PPP•PÚQQcQ¨QìR1RvR»RÿSDS‰SÎTTXTTâU'UlU±UöV;V€VÅW WOW”WÙXXdX©XîY3YxY¾ZZHZZÒ[[\[¡[æ\+\p\´\ù]>]ƒ]È^ ^Q^–^Û__d_¨_í`2`v`»`ÿaDaˆaÌbbUbšbÞc"cfcªcëd,dmd®dïe0eqe²eóf4fuf¶f÷g8gxg¹gúh;h|h¼hýi>ii¿jjAjjÂkkCk„kÄllEl…lÆmmFm‡mÇnnGnˆnÈooHoˆoÈppHpˆpÈqqGq‡qÇrrFr†rÆssEs…sÄttCt‚tÂuuAu€u¿uþv>v}v¼vûw:wyw¸w÷x6xux´xóy2yqy°yïz-zlz«zê{({g{¦{ä|#|a| |Þ}}[}š}Ø~~U~“~ÒNŒË€ €G€…€Ä@~¼ú‚8‚v‚´‚òƒ0ƒpƒ²ƒô„6„x„º„ü…>…€…††F†ˆ†É‡ ‡M‡Ž‡ÐˆˆSˆ”ˆÖ‰‰Y‰š‰ÛŠŠ]ŠŸŠà‹!‹b‹£‹äŒ%ŒeŒ¦Œç(h©êŽ*ŽkŽ«Žì,l­í-m®î‘.‘n‘®‘î’.’m’­’í“-“l“¬“ë”+”j”ª”é•)•h•§•æ–%–d–¤–â—!—`—Ÿ—Þ˜˜[˜š˜Ù™™V™”™ÓššPšŽšÌ› ›I›‡›ÅœœAœœ½œû8v´òž/žmž«žèŸ&ŸcŸ¡ŸÞ  Y – Ô¡¡N¡‹¡É¢¢C¢€¢½¢ú£:£|£¾¤¤B¤„¤Æ¥¥I¥‹¥Í¦¦P¦‘¦Ó§§V§˜§Ù¨¨\¨¨Þ© ©a©¢©ãª$ªfª§ªè«)«j«««ì¬,¬m¬®¬ï­0­p­±­ò®3®t®µ®ö¯7¯x¯¹¯ú°;°}°¾°ÿ±@±‚±Ã²²F²‡²É³ ³L³³Ï´´R´”´ÖµµYµ›µÝ¶¶a¶£¶å·'·i·«·í¸/¸q¸´¸ö¹8¹z¹½¹ÿºBº„ºÇ» »L»»Ñ¼¼W¼™¼Ü½½b½¥½è¾+¾n¾±¾ô¿7¿z¿½ÀÀDÀ‡ÀÊÁÁQÁ•ÁØÂÂ_Â£ÂæÃ*ÃnòÃõÄ4ÄqÄ®ÄêÅ'ÅdÅ¡ÅÞÆÆXÆ•ÆÒÇÇMÇŠÇÇÈÈBÈȼÈúÉ7ÉtɲÉïÊ-ÊkÊ¨ÊæË#ËaËŸËÝÌÌXÌ–ÌÔÍÍPÍŽÍÌÎ ÎHΆÎÄÏÏ@Ï~ϼÏúÐ8ÐvеÐóÑ1ÑoÑ®ÑìÒ*ÒiÒ§ÒåÓ$ÓbÓ¡ÓßÔÔ\Ô›ÔÙÕÕVÕ•ÕÔÖÖQÖÖÎ× ×L׊×ÉØØG؆ØÄÙÙBÙÙÀÙÿÚ=Ú|Ú»ÚúÛ9ÛxÛ·ÛöÜ5ÜtܳÜòÝ1ÝpݯÝïÞ.ÞmÞ¬Þëß*ßiß©ßèà'àfà¦àåá$ádá£áãâ"âaâ¡âàããYã’ãËää<äuä­äæååXå‘åÉææ;ætæ­ææççXç‘çÊèè<èuè®èçé éYé’éËêê>êwê°êéë#ë\ë•ëÎììAìzì´ìíí'í`í™íÓî îFîî¹îòï,ïeïŸïÙððLð†ð¿ðùñ3ñlñ¦ñàòòSòòÇóó;óuó®óèô"ô\ô–ôÐõ õDõ~õ¸õòö,ögö¡öÛ÷÷O÷‰÷Ä÷þø8ørø­øçù!ù\ù–ùÐú úEúúºúôû/ûiû¤ûÞüüTüŽüÉýý>ýyý³ýîþ)þcþžþÙÿÿNÿ‰ÿÄÿÿ:t¯é#]—Ò F»õ/j¤ßSŽÈ=x²ì'aœ×L†Áû6q«æ ! [ – Ñ F ¼ ö 1 l § â  W ’ Í  C ~ ¹ ô.i¤ßUËB}¸ó.i¤ßV‘ÌC~¹ô0k¦áX“Ï E¼ø3nªå!\˜ÓJ†Áý8t°ë'bžÚQÈ@Ç[¥ï8‚Ì  ` ª ô!>!ˆ!Ò""f"°"û#E##Ù$#$m$¸%%L%–%á&+&u&À' 'U'Ÿ'é(4(~(É))^)¨)ó*=*ˆ*Ò++h+²+ý,G,’,Ý-'-r-½..R..è/3/~/È00^0©0ô1?1Š1Õ2 2k2¶33L3—3â4-4y4Ä55Z5¥5ñ6<6‡6Ò77h7³7þ8I8”8ß9*9u9¿: :U:Ÿ:ê;5;;Ê<<_<©<ô=>=‰=Ó>>h>²>ü?G?‘?Û@%@o@¹AAMA—AáB+BuB¿C CSCCçD2D|DÆEEZE¤EîF9FƒFÍGGbG¬GöH@H‹HÕIIjI´IÿJIJ“JÞK(KsK½LLRLLçM2M}MÇNN]N§NòO=O‡OÒPPhP³PýQHQ“QÞR)RtR¿S SUS SëT6TTÌUUcU®UùVDVVÛW&WrW½XXTXŸXëY6Y‚YÍZZdZ¯Zû[F[‘[Ü\'\r\¼]]R]œ]æ^1^{^Å__Y_£_í`7``Êaa]a§aðb9b‚bËcc]c¦cïd8d€dÉeeZe¢eêf3f{fÃg gSg›gåh3h‚hÐiimi»j jWj¥jókAkŽkÜl*lwlÅmm`m®mûnHn–não1o~oËppfp³qqMqšqçr4rrÎsshsµttOt›tèu5u‚uÎvvgv´wwMw™wåx2x~xÊyycy¯yûzGz“zß{+{w{Ã||[|§|ò}>}Š}Ö~!~m~¸P›æ€2€}€É_ªö‚A‚Œ‚׃"ƒmƒ¹„„O„š„å…0…{…Ɔ†\†§†ò‡=‡ˆ‡Óˆˆhˆ³ˆþ‰H‰“‰ÝŠ(Šrн‹‹Q‹œ‹æŒ0ŒzŒÅY£÷ŽT޲lÉ'„á‘>‘›‘ø’U’±““k“Ç”$”€”Ý•9•••ò–N–ª——b—¾˜˜u˜Ñ™-™ˆ™äš@š›šö›R›­œœdœ¿uО*ž…žßŸ:Ÿ”Ÿî H ¡ û¡T¡®¢¢`¢¹££j£Ã¤¤t¤Ì¥$¥|¥Ó¦+¦ƒ¦Ú§1§‰§à¨6¨¨ä©:©‘©çª=ª“ªé«?«•«ë¬@¬–¬ì­A­—­í®C®˜®î¯D¯š¯ð°F°œ°ò±H±ž±ô²J² ²ö³L³¢³ø´N´¤´ûµQµ§µý¶S¶ª··V·­¸¸Y¸°¹¹]¹³º º[º©º÷»E»“»á¼/¼~¼Ì½½h½¶¾¾S¾¡¾ï¿>¿Œ¿ÛÀ)ÀxÀÆÁÁdÁ³ÂÂQ ÂïÃ>ÃÃÝÄ,Ä{ÄËÅÅjÅºÆ ÆZÆ©ÆùÇIÇšÇêÈ:ÈŠÈÛÉ+É{ÉÌÊÊmʾËË`˱ÌÌSÌ¥Ì÷ÍHÍšÍìÎ>ΑÎãÏ6ψÏÛÐ.ÐÐÔÑ'Ñ{ÑÎÒ"ÒvÒÊÓÓrÓÇÔÔpÔÄÕÕnÕÄÖÖoÖÄ××pׯØØrØÉÙ ÙvÙÍÚ$Ú|ÚÓÛ+Û‚ÛÚÜ2ÜŠÜãÝ;Ý”ÝíÞFÞŸÞøßRß«àà_à¹áánáÈâ#â~âÙã5ãˆã¿ãßãÿää?ä_ääŸä¿äßäÿåå@å`å€å åÀåáææ!æBæbæ‚æ£æÃæäçç%çEçfç†ç§çÈçèè è)èJèkèŒè¬èÍèîéé0éQéqé’é³éÔéõêê7êXêzê›ê¼êÝêþëëAëbëƒë¤ëÆëçì ì*ìKìmìŽì°ìÑìóíí6íXíyí›í½íÞîî"îDîeî‡î©îËîíïï1ïSïuï—ï¹ïÛïýððAðdð†ð¨ðÊðíññ1ñTñvñ˜ñ»ñÝòò"òEògòŠò¬òÏòòóó7óZó}óŸóÂóåôô+ôIôcô}ô“ôªôÁô×ôîõõõ2õIõ`õwõŽõ¤õ»õÒõéööö.öDö[örö‰ö ö·öÎöåöü÷÷*÷A÷X÷o÷†÷÷´÷Ë÷â÷ùøø(ø?øVømø„ø›ø³øÊøáøøùù'ù>ùUùmù„ù›ù³ùÊùáùùúú'ú?úVúmú…úœú´úËúãúúûû)ûAûXûpû‡ûŸû¶ûÎûæûýüü,üDü\üsü‹ü£üºüÒüêýýý1ýIýaýxýý¨ýÀýØýïþþþ7þOþgþþ—þ¯þÇþßþ÷ÿÿ&ÿ>ÿWÿoÿ‡ÿŸÿ·ÿÏÿçÿÿmft2@ÁB‚ÂCƒÃD„ÅE†ÆG‡ÇHˆÈ I‰Ê J‹Ë L Œ Ì M Í  N Ž Ï  O Ð  Q ‘ ÑR’ÒS“ÔT•ÕV–ÖW—×X˜ÙYšÚ[›Û\œÜ]Þ^Ÿß_ à a¡á"b¢ã#c¤ä$d¥å%f¦æ'g§è ( h © é!)!i!ª!ê"*"k"«"ë#,#l#¬#í$-$m$®$î%.%n%¯%ï&/&p&°&ð'1'q'±'ò(2(r(³(ó)3)s)´)ô*4*u*µ*õ+6+v+¶+÷,7,w,¸,ø-8-x-¹-ù.9.z.º.ú/;/{/»/ü0<0|0¼0ý1=1}1¾1þ2>22¿2ÿ3@3€3À44A44Á55B5‚5Ã66C6„6Ä77E7…7Å88F8†8Æ99G9‡9È::H:‰:É; ;J;Š;Ê< >M>Ž>Î??O??Ï@@P@@ÐAAQA‘AÒBBRB“BÓCCTC”CÔDDUD•DÕEEVE–E×FFWF˜FØGGYG™GÙHHZHšHÚII[I›IÜJJ\JJÝKK^KžKÞLL_LŸLßM M`M MáN!NaN¢NâO"OcO£OãP#PdP¤PäQ%QeQ¥QæR&RfR§RçS'ShS¨SèT(TiT©TéU*UjUªUëV+VkV¬VìW,WmW­WíX-XnX®XîY/YoY¯YðZ0ZpZ±Zñ[1[r[²[ò\2\s\³\ó]4]t]´]õ^5^u^¶^ö_6_v_·_÷`7`x`¸`øa9aya¹aúb:bzb»bûc;c{c¼cüde~e¾eÿf?ffÀgg@g€gÁhhAh‚hÂiiCiƒiÃjjDj„jÅkkEk…kÆllFl‡lÇmmHmˆmÈn nIn‰nÊo oJoŠoËp pKpŒpÌq qMqqÍrrNrŽrÏssOssÐttPt‘tÑuuRu’uÒvvSv“vÓwwTw”wÕxxUx–xÖyyWy—y×zzXz˜zØ{{Y{™{Ú||Z|›|Û}}\}œ}Ü~~]~~Ý^ž߀€_€ €à a¡á‚"‚b‚¢‚âƒ#ƒcƒ£ƒä„$„d„¥„å…%…f…¦…æ†'†g†§†ç‡(‡h‡¨‡éˆ)ˆiˆªˆê‰*‰k‰«‰ëŠ,ŠlЬŠì‹-‹m‹­‹îŒ.ŒnŒ¯Œï/p°ðŽ0ŽqޱŽñ2r²ó3s´ô‘4‘u‘µ‘õ’5’v’¶’ö“7“w“·“ø”8”x”¹”ù•9•z•º•ú–:–{–»–û—<—|—¼—ý˜=˜}˜¾˜þ™>™™¿™ÿš?š€šÀ››A››ÁœœBœ‚œÃC„ÄžžDž…žÅŸŸFŸ†ŸÆ  G ‡ È¡¡H¡‰¡É¢ ¢I¢Š¢Ê£ £K£‹£Ë¤ ¤L¤Œ¤Í¥ ¥M¥¥Î¦¦N¦¦Ï§§P§§Ð¨¨Q¨‘¨Ò©©R©’©ÓªªSª”ªÔ««U«•«Õ¬¬V¬–¬×­­W­—­Ø®®X®™®Ù¯¯Z¯š¯Ú°°[°›°Ü±±\±œ±Ý²²]²ž²Þ³³_³Ÿ³ß´ ´`´ ´áµ!µaµ¡µâ¶"¶b¶£¶ã·#·d·¤·ä¸%¸e¸¥¸æ¹&¹f¹¦¹çº'ºgº¨ºè»(»i»©»é¼*¼j¼ª¼ê½+½k½«½ì¾,¾l¾­¾í¿-¿n¿®¿îÀ/ÀoÀ¯ÀïÁ0ÁpÁ°ÁñÂ1Âq²ÂòÃ2ÃsóÃóÄ4ÄtÄ´ÄôÅ5ÅuŵÅöÆ6ÆvÆ·Æ÷Ç7ÇxÇ¸ÇøÈ9ÈyȹÈùÉ:ÉzɺÉûÊ;Ê{ʼÊüË<Ë}˽ËýÌ>Ì~̾ÌþÍ?ÍÍ¿ÎÎ@΀ÎÁÏÏAÏ‚ÏÂÐÐCЃÐÃÑÑDÑ„ÑÄÒÒEÒ…ÒÆÓÓFÓ‡ÓÇÔÔGÔˆÔÈÕÕIÕ‰ÕÉÖ ÖJÖŠÖË× ×K׌×ÌØ ØLØØÍÙ ÙNÙŽÙÎÚÚOÚÚÐÛÛPÛ‘ÛÑÜÜQÜ’ÜÒÝÝSÝ“ÝÓÞÞTÞ”ÞÕßßUß–ßÖààVà—à×ááXá˜áØââYâ™âÚããZã›ãÛää[äœäÜåå]ååÝææ^æžæßçç_ç çàè è`è¡èáé!ébé¢éâê#êcê£êäë$ëdë¤ëåì%ìeì¦ìæí&ígí§íçî(îhî¨îéï)ïiï©ïêð*ðjð«ðëñ+ñlñ¬ñìò-òmò­òîó.ónó®óïô/ôoô°ôðõ0õqõ±õñö2örö²öó÷3÷s÷³÷ôø4øtøµøõù5ùvù¶ùöú7úwú·úøû8ûxû¸ûùü9üyüºüúý:ý{ý»ýûþ<þ|þ¼þýÿ=ÿ}ÿ½ÿþÿÿÿÿÿÿÿÿ?¿ÿ?¿@€À@€À@€À@€ÀAÁAÁAÁ  A Á  B ‚   B ‚   B ‚   B ‚ ÂCƒÃCƒÃCƒÃCƒÃD„ÄD„ÄD„ÄD„ÄE…ÅE…ÅE…ÅE…ÅF†ÆF†ÆF†ÆF†ÆG‡ÇG‡Ç  G ‡ Ç!!G!‡!Ç""H"ˆ"È##H#ˆ#È$$H$ˆ$È%%H%ˆ%È& &I&‰&É' 'I'‰'É( (I(‰(É) )I)‰)É* *J*Š*Ê+ +J+Š+Ê, ,J,Š,Ê- -J-Š-Ê. .K.‹.Ë/ /K/‹/Ë0 0K0‹0Ë1 1K1‹1Ë2 2L2Œ2Ì3 3L3Œ3Ì4 4L4Œ4Ì5 5L5Œ5Ì6 6M66Í7 7M77Í8 8M88Í9 9M99Í::N:Ž:Î;;N;Ž;Î<>O>>Ï??O??Ï@@O@@ÏAAOAAÏBBPBBÐCCPCCÐDDPDDÐEEPEEÐFFQF‘FÑGGQG‘GÑHHQH‘HÑIIQI‘IÑJJRJ’JÒKKRK’KÒLLRL’LÒMMRM’MÒNNSN“NÓOOSO“OÓPPSP“PÓQQSQ“QÓRRTR”RÔSSTS”SÔTTTT”TÔUUTU”UÔVVUV•VÕWWUW•WÕXXUX•XÕYYUY•YÕZZVZ–ZÖ[[V[–[Ö\\V\–\Ö]]V]–]Ö^^W^—^×__W_—_×``W`—`×aaWa—a×bbXb˜bØccXc˜cØddXd˜dØeeXe˜eØffYf™fÙggYg™gÙhhYh™hÙiiYi™iÙjjZjšjÚkkZkškÚllZlšlÚmmZmšmÚnn[n›nÛoo[o›oÛpp[p›pÛqq[q›qÛrr\rœrÜss\sœsÜtt\tœtÜuu\uœuÜvv]vvÝww]wwÝxx]xxÝyy]yyÝzz^zžzÞ{{^{ž{Þ||^|ž|Þ}}^}ž}Þ~~_~Ÿ~ß_Ÿ߀€_€Ÿ€ß_Ÿß‚ ‚`‚ ‚àƒ ƒ`ƒ ƒà„ „`„ „à… …`… …à†!†a†¡†á‡!‡a‡¡‡áˆ!ˆaˆ¡ˆá‰!‰a‰¡‰áŠ"ŠbŠ¢Šâ‹"‹b‹¢‹âŒ"ŒbŒ¢Œâ"b¢âŽ#ŽcŽ£Žã#c£ã#c£ã‘#‘c‘£‘ã’$’d’¤’ä“$“d“¤“ä”$”d”¤”ä•$•d•¤•ä–%–e–¥–å—%—e—¥—å˜%˜e˜¥˜å™%™e™¥™åš&šfš¦šæ›&›f›¦›æœ&œfœ¦œæ&f¦æž'žgž§žçŸ'ŸgŸ§Ÿç ' g § ç¡'¡g¡§¡ç¢(¢h¢¨¢è£(£h£¨£è¤(¤h¤¨¤è¥(¥h¥¨¥è¦)¦i¦©¦é§)§i§©§é¨)¨i¨©¨é©)©i©©©éª*ªjªªªê«*«j«ª«ê¬*¬j¬ª¬ê­*­j­ª­ê®+®k®«®ë¯+¯k¯«¯ë°+°k°«°ë±+±k±«±ë²,²l²¬²ì³,³l³¬³ì´,´l´¬´ìµ,µlµ¬µì¶-¶m¶­¶í·-·m·­·í¸-¸m¸­¸í¹-¹m¹­¹íº.ºnº®ºî».»n»®»î¼.¼n¼®¼î½.½n½®½î¾/¾o¾¯¾ï¿/¿o¿¯¿ïÀ/ÀoÀ¯ÀïÁ/ÁoÁ¯ÁïÂ0Âp°ÂðÃ0ÃpðÃðÄ0ÄpİÄðÅ0ÅpŰÅðÆ1ÆqƱÆñÇ1ÇqDZÇñÈ1ÈqȱÈñÉ1ÉqɱÉñÊ2ÊrʲÊòË2Ër˲ËòÌ2Ìr̲ÌòÍ2ÍrͲÍòÎ3ÎsγÎóÏ3ÏsϳÏóÐ3ÐsгÐóÑ3ÑsѳÑóÒ4ÒtÒ´ÒôÓ4ÓtÓ´ÓôÔ4ÔtÔ´ÔôÕ4ÕtÕ´ÕôÖ5ÖuÖµÖõ×5×u×µ×õØ5ØuصØõÙ5ÙuÙµÙõÚ6ÚvÚ¶ÚöÛ6ÛvÛ¶ÛöÜ6ÜvܶÜöÝ6ÝvݶÝöÞ7ÞwÞ·Þ÷ß7ßwß·ß÷à7àwà·à÷á7áwá·á÷â8âxâ¸âøã8ãxã¸ãøä8äxä¸äøå8åxå¸åøæ9æyæ¹æùç9çyç¹çùè9èyè¹èùé9éyé¹éùê:êzêºêúë:ëzëºëúì:ìzìºìúí:ízíºíúî;î{î»îûï;ï{ï»ïûð;ð{ð»ðûñ;ñ{ñ»ñûò<ò|ò¼òüó<ó|ó¼óüô<ô|ô¼ôüõ<õ|õ¼õüö=ö}ö½öý÷=÷}÷½÷ýø=ø}ø½øýù=ù}ù½ùýú>ú~ú¾úþû>û~û¾ûþü>ü~ü¾üþý>ý~ý¾ýþþ?þþ¿þÿÿ?ÿÿ¿ÿÿ?¿ÿ?¿@€À@€À@€À@€ÀAÁAÁAÁ  A Á  B ‚   B ‚   B ‚   B ‚ ÂCƒÃCƒÃCƒÃCƒÃD„ÄD„ÄD„ÄD„ÄE…ÅE…ÅE…ÅE…ÅF†ÆF†ÆF†ÆF†ÆG‡ÇG‡Ç  G ‡ Ç!!G!‡!Ç""H"ˆ"È##H#ˆ#È$$H$ˆ$È%%H%ˆ%È& &I&‰&É' 'I'‰'É( (I(‰(É) )I)‰)É* *J*Š*Ê+ +J+Š+Ê, ,J,Š,Ê- -J-Š-Ê. .K.‹.Ë/ /K/‹/Ë0 0K0‹0Ë1 1K1‹1Ë2 2L2Œ2Ì3 3L3Œ3Ì4 4L4Œ4Ì5 5L5Œ5Ì6 6M66Í7 7M77Í8 8M88Í9 9M99Í::N:Ž:Î;;N;Ž;Î<>O>>Ï??O??Ï@@O@@ÏAAOAAÏBBPBBÐCCPCCÐDDPDDÐEEPEEÐFFQF‘FÑGGQG‘GÑHHQH‘HÑIIQI‘IÑJJRJ’JÒKKRK’KÒLLRL’LÒMMRM’MÒNNSN“NÓOOSO“OÓPPSP“PÓQQSQ“QÓRRTR”RÔSSTS”SÔTTTT”TÔUUTU”UÔVVUV•VÕWWUW•WÕXXUX•XÕYYUY•YÕZZVZ–ZÖ[[V[–[Ö\\V\–\Ö]]V]–]Ö^^W^—^×__W_—_×``W`—`×aaWa—a×bbXb˜bØccXc˜cØddXd˜dØeeXe˜eØffYf™fÙggYg™gÙhhYh™hÙiiYi™iÙjjZjšjÚkkZkškÚllZlšlÚmmZmšmÚnn[n›nÛoo[o›oÛpp[p›pÛqq[q›qÛrr\rœrÜss\sœsÜtt\tœtÜuu\uœuÜvv]vvÝww]wwÝxx]xxÝyy]yyÝzz^zžzÞ{{^{ž{Þ||^|ž|Þ}}^}ž}Þ~~_~Ÿ~ß_Ÿ߀€_€Ÿ€ß_Ÿß‚ ‚`‚ ‚àƒ ƒ`ƒ ƒà„ „`„ „à… …`… …à†!†a†¡†á‡!‡a‡¡‡áˆ!ˆaˆ¡ˆá‰!‰a‰¡‰áŠ"ŠbŠ¢Šâ‹"‹b‹¢‹âŒ"ŒbŒ¢Œâ"b¢âŽ#ŽcŽ£Žã#c£ã#c£ã‘#‘c‘£‘ã’$’d’¤’ä“$“d“¤“ä”$”d”¤”ä•$•d•¤•ä–%–e–¥–å—%—e—¥—å˜%˜e˜¥˜å™%™e™¥™åš&šfš¦šæ›&›f›¦›æœ&œfœ¦œæ&f¦æž'žgž§žçŸ'ŸgŸ§Ÿç ' g § ç¡'¡g¡§¡ç¢(¢h¢¨¢è£(£h£¨£è¤(¤h¤¨¤è¥(¥h¥¨¥è¦)¦i¦©¦é§)§i§©§é¨)¨i¨©¨é©)©i©©©éª*ªjªªªê«*«j«ª«ê¬*¬j¬ª¬ê­*­j­ª­ê®+®k®«®ë¯+¯k¯«¯ë°+°k°«°ë±+±k±«±ë²,²l²¬²ì³,³l³¬³ì´,´l´¬´ìµ,µlµ¬µì¶-¶m¶­¶í·-·m·­·í¸-¸m¸­¸í¹-¹m¹­¹íº.ºnº®ºî».»n»®»î¼.¼n¼®¼î½.½n½®½î¾/¾o¾¯¾ï¿/¿o¿¯¿ïÀ/ÀoÀ¯ÀïÁ/ÁoÁ¯ÁïÂ0Âp°ÂðÃ0ÃpðÃðÄ0ÄpİÄðÅ0ÅpŰÅðÆ1ÆqƱÆñÇ1ÇqDZÇñÈ1ÈqȱÈñÉ1ÉqɱÉñÊ2ÊrʲÊòË2Ër˲ËòÌ2Ìr̲ÌòÍ2ÍrͲÍòÎ3ÎsγÎóÏ3ÏsϳÏóÐ3ÐsгÐóÑ3ÑsѳÑóÒ4ÒtÒ´ÒôÓ4ÓtÓ´ÓôÔ4ÔtÔ´ÔôÕ4ÕtÕ´ÕôÖ5ÖuÖµÖõ×5×u×µ×õØ5ØuصØõÙ5ÙuÙµÙõÚ6ÚvÚ¶ÚöÛ6ÛvÛ¶ÛöÜ6ÜvܶÜöÝ6ÝvݶÝöÞ7ÞwÞ·Þ÷ß7ßwß·ß÷à7àwà·à÷á7áwá·á÷â8âxâ¸âøã8ãxã¸ãøä8äxä¸äøå8åxå¸åøæ9æyæ¹æùç9çyç¹çùè9èyè¹èùé9éyé¹éùê:êzêºêúë:ëzëºëúì:ìzìºìúí:ízíºíúî;î{î»îûï;ï{ï»ïûð;ð{ð»ðûñ;ñ{ñ»ñûò<ò|ò¼òüó<ó|ó¼óüô<ô|ô¼ôüõ<õ|õ¼õüö=ö}ö½öý÷=÷}÷½÷ýø=ø}ø½øýù=ù}ù½ùýú>ú~ú¾úþû>û~û¾ûþü>ü~ü¾üþý>ý~ý¾ýþþ?þþ¿þÿÿ?ÿÿ¿ÿÿÿÿQŸE|ÿÿ2#[ìÿÿtÿÿ9ñhdÿÿX¤]Œÿÿj3Yqÿÿ‘“Q“ÿÿœÜQÑÿÿ¤WO½ÿÿ³çJÁÿÿô>0ü9ÿÿH¢ÛÞÿÿd¾Åñÿÿqî¶ÿÿ|*¨Êÿÿ‚¤œªÿÿ†üÿÿj8îÿÿJFT¢ÿÿx¨ÿÿ*@sÿÿTScÿÿÿdZŒÿÿCSnÿÿ›ÍSìÿÿ¤›Q›ÿÿ¾+LFÿÿœúò:œíÿÿ`#ÏAÿÿrýºƒÿÿ~¡« ÿÿ…óÿÿŠŠ‘ýÿÿëÿÿxÒ1wÿÿTgTgÿÿ qÉÿÿñ~×ÿÿDÊr7ÿÿaÛaÛÿÿBŠëPBÿÿšVV^ÿÿ¤àS¶ÿÿÍP…ÿÿ¬ÿÿ@Ü=ÿÿrLÀ_ÿÿ€à­¯ÿÿ‰„ÿÿŽ•2ÿÿ’o‚]ÿÿ”iÿÿ8/=ÿÿYþV£ÿÿL[ydyÿÿÐ…Ðÿÿ9x~Dÿÿ`m‘ÿÿt]`Cÿÿ˜ÕXÖÿÿ¥,V&ÿÿÝ}Rõ›ÿÿm:Ëÿÿƒ!±¾ÿÿ”|ÿÿ“AŒ_ÿÿ— ôÿÿ˜ uíÿÿšÏÿÿŒÄ+,ÿÿwI¤ÿÿ`HaHÿÿ³„Šÿÿ 2o€ÿÿS ÿÿoƒn4ÿÿ˜ðYÞÿÿ¥…Xþÿÿ ÷eAÛ/ÿÿƒh¶lÿÿ’ôÿÿ˜¾ˆùÿÿœ8{7ÿÿž%ÿÿ€_7ÿÿs]tLÿÿ30“0ÿÿ($ŽŸÿÿÿ\p•šÿÿ€„Lÿÿ¦[`×ÕÿÿšRªs,Tÿÿ Uþ ÿÿÿ©þq” ÿÿ«`åÿÿ«ì`œÿÿ§˜_0 ÿÿ¤:`*”ÿÿ >ÿÿ£(&IÿÿŸÿ:Ÿÿÿœ4Rßÿÿ‰Èq_ÿÿ€…¤ÿÿJKŸÿÿÿ2ꮕÿÿx2£Vÿÿ¥d”éŸÿÿÿ²ïjÿÿ·¿` ·ÿÿ³ÅKÿÿ³ÅA]ÿÿ± <%ÿÿ¯ÿ6@ÿÿ®ò1Tÿÿ­íÿÿªÑ#†ÿÿ©y9 ÿÿ¥½R‹ÿÿ¢!lsÿÿ ó€óÿÿ£BRQÿÿ‘ت_ÿÿ“S ½;µÎ.ú§ÿÿP§XyÿÿƒXÿÿ1¦wâÿÿadUÿÿjè^9ÿÿ˜iVUÿÿ¢ïRÃÿÿÉtS±ÿÿÿÿ7XÚùÿÿqÕÀÿÿ€-­|ÿÿˆ×{ÿÿÈ#ÿÿ‘í‚3ÿÿ“¤ÿÿEgÿÿ~ì4?ÿÿYñYbÿÿŽz©ÿÿŸ…LÿÿN)w ÿÿe c{ÿÿ›SCÿÿ¥fUyÿÿß?PeùÿÿnìÊÿÿ‚´±šÿÿŒõuÿÿ’‹Åÿÿ–’ßÿÿ—Ãuàÿÿšÿÿ”¬Óÿÿ†˜3:ÿÿ^«]ÿÿ]§ ©dÊÿÿ)‘7ÿÿB‚úÿÿmLoñÿÿ“ãjøÿÿ§[>ÿÿ/¨ÿÿ+Úÿÿ„t¶!ÿÿ‘°ž9ÿÿ˜/ˆ2ÿÿ›¸zÞÿÿ¹mÈÿÿŸÛf²ÿÿŸøÿÿ›?Ëÿÿ’¸/;ÿÿ[Lÿÿkg8ÿÿ#ëŒkÿÿ)ú“›ÿÿ`}Ž©ÿÿ~þŒÿÿŸ*?ÿÿÿÿs ¼Äÿÿ–»›@ÿÿŸ»‡µÕÿÿ ¸w$ÿÿ£@l‚çÿÿ¤m]¥ÿÿ¦?`¥ÿÿ¡ñÿÿŸÿÂÿÿ›Ê,Zÿÿ“%Cÿÿ;bÄÿÿe©ƒÿÿ¦ÏÿÿØK<¡>ÿÿ‚Ë¢sÿÿ§Ó«†×¹ÿÿ™†¬È6;ÿÿžÝ€ }ÿÿ©ks ¢ÿÿª‡]Yÿÿ¬z`¼=ÿÿ¦ÎaM$šÿÿ¢Þ_T)RÿÿŸÿÿÿ¥¿ÿÿ¡¨+Þÿÿ¡ö>;ÿÿ“O`œÿÿÿ}0ÿÿ`«š5ÿÿ ºûÿÿX‹¼÷ÿÿáý¿·Ÿ ÿÿ±ée0ÿÿ¹vc4yÿÿ²ÙIÿÿ³ê<ìÿÿ²87˜ÿÿ±2cÿÿ°0·ÿÿ­}ÿÿ«^ çÿÿ«O)üÿÿ©?àÿÿ¤D\_ÿÿ |uÿÿ¤avŒ;ÿÿ›€§ÑãUœP¼Ã0ÓSäØÉ8cÿÿÌŽ-Xÿÿ¿F(¥ÿÿ»4 Úÿÿ¸.Lÿÿµ±£ÿÿ³’dÿÿ±ÒYÿÿ°6ÿÿ±©iÿÿ²U'ˆÿÿ´¨>ãÿÿ¿¢ èFÿÿ¼än·ÿÿÈO‡öúéïŒD§òòI®ûÔ²r÷ɪ&:zÿÿÀÇÞÿÿÀß qÿÿ¿låÿÿ¼Œäÿÿ¹²uÿÿ·b±ÿÿµ9 ÿÿ²ÿÿ¸fÿÿ¼Ø$eÿÿÁ-:‘ÿÿÍzFÿÿÕ×cèÿÿÿÿwWŹþçŽYYÛÿÿ®Èÿÿm=¹3(å®÷ÿÿ¡t¯häÿÿ²ÁBÿÿµê ‡@0ÿÿ±ß‹;ûÿÿ¯ï#µÿÿ³Zÿÿ±m ÿÿ®Äÿÿ¿ÿÿÿÇz Þ¡ÿÿÐ 1ùÿÿÝØ<}ÿÿÿÿ JuÒÐÿÿtyƒ{ÿÿ–Äÿÿ«TÿÿU`ŸÀøÿÿŠo ÿÿ ä]z]ÿÿ¦ß ³ikÿÿ¨„ `W±ÿÿ¨Õ OSÿÿ¨œ@ÿÿ©“@ÿÿ§¸ÿÿÈ\íÿÿÑåq$ÿÿÞ\%çÿÿÿÿ*5ÝßÿÿX¤©^ÿÿx½_ÿÿ‚jÿÿƒ«‹ÿÿNQ~ÿÿ¦O0Ómþ“‡Àª°ÿÿ”Œ…ÿÿšƒx}ÿÿž˜jœÿÿŸ½`‚ÿÿ •YšÿÿŸÿÿÿÕÚÿÿä dÿÿÿÿ æ1ÿÿ7¾Tÿÿ\{€|ÿÿjUöÿÿkCŒÿÿ$ŸLrÿÿ<GRÕÿÿŒ©*¹ÿÿë=^>Óhþ[yú³yÿÿ…ŽMÿÿ¾ôÿÿáOÿÿ“Fw–ÿÿ”Äÿÿä/0ÿÿú ÞïÀÿÿmͰÿÿ:ð¢Fÿÿ ‘OÞXÿÿL8ÿÿ\†gÿÿ"*E»Üÿÿ2{A=ÿÿ.É9íÿÿ¤Ì2hý]õzTDØ,ÿ}j.¾1ÿÿt)¬aÿÿ}‘_ÿÿ„h‘Ãÿÿ† ÿÿó€pùœÿÿ¤ÝÅÿÿ8 µÿÿ:܃…ÿÿÐ8JÞÿÿU€ÿÿPüZÿÿ ŽA­ÿÿ/<>ýÿÿ4¦: ¯ÿÿ”¼,‰ÿÿ±,÷ýÓó}G]ÞÍÿ¡WÌ ÿÿbkºÿÿÿj˜®hÿÿqZýùÿÿ‰ãhÿÿ ?Çlÿÿ••“¶ÿÿ8¤Ktÿÿ@ƒÿÿNAìÿÿ©Cìÿÿ >Oÿÿ.ƒ9\ÿÿ@3¤ÀÿÿwoÀÓÿÿŸÿ)ìÿÿÈ*ÿ±îj4ôæ²ùKBt ÿ×JÿÿIþÈÓÿÿW'ÿÿ€çNÿÿeh/ñÿÿA”Mnÿÿn€ÿÿ5dšÿÿYkVÒÿÿlÁXRÿÿ“R›ÿÿ§Qÿÿ¹‡Q3ÿÿÑôÐ;~ü>ÿÿAÜyÿÿ_ÆÙÿÿlĸ„ÿÿw©3ÿÿ~ìþÿÿƒÿÿ†è`ÿÿvÂ(­ÿÿOÑKÉÿÿ#fÔÿÿ'1prÿÿS‘^xÿÿ`d\üÿÿ”—QPÿÿ§}Rúÿÿ·¾V/ÿÿ$>ÿÿ1@íaÿÿ[VÏÔÿÿnA¼mÿÿz«Ÿÿÿ‚­ž@ÿÿ‡‡“ÿÿŠœÿÿŒ>ÿÿp$/ÿÿKòS‡ÿÿ4ˆdÙÿÿ•}ÿÿD‹lñÿÿhziÍÿÿúcôÿÿ§¹[GÿÿÁW¢ÿÿµÿÿ5×Û•ÿÿnWÀÿÿ|Œ®¸ÿÿ†6žÀÿÿ‹o’²ÿÿD„{ÿÿ‘uÿÿ‘Tÿÿ‡#Éÿÿ_ˆMÄÿÿR]žÿÿ…¨ÿÿ;œ}hÿÿ_ézˆÿÿƒ-{ùÿÿ¢êy}ÿÿÊkYø?ÿÿeʪÿÿ²vÿÿŠŸpÿÿ ާÿÿ”|öÿÿ–Fzÿÿ—Nÿÿ–rÿÿ["ÿÿª7øÿÿa›[öÿÿ·‚­ÿÿ0<>}bÿÿVýˆÆÿÿ~ñŠ7ÿÿ¤&´ÿÿ×!‰ŠÚÄÿÿ|Ƹ~ÿÿŽEŸ*ÿÿ•—‹[ÿÿ™¤~´ÿÿ›q ÿÿÀhEÿÿžaÿÿ››ÿÿ—û„ÿÿ‰Í7ÿÿbèbpÿÿh®Hfšÿÿ‹›úÿÿB0—úÿÿz šçÿÿ§²¡Pÿÿõ7¡9½üÿÿ"Ÿÿÿœ†‡ÿÿŸÅxçÿÿ¡mlåFÿÿ¢´\uÿÿ¤á` tÿÿ¡#ÿÿŸÿÿÿŸ­&ÿÿ—j37ÿÿ€cVBÿÿu²nAÿÿ¥çÿÿ'=9üžîÿÿn ¨þÿÿ¼¯{Ü¢ø@¯Î¦5lÿÿŸáÿÿ¨µu" ªÿÿ¨/[Úÿÿ«I^üÄÿÿ¦ë`)¡ÿÿ¢Ô^7#†ÿÿŸÿÿÿ£øÿÿ£ƒØÿÿ Û0PÿÿœÆFáÿÿJqzÿÿ`Ä”jÿÿ^3&-Yÿÿ;½³Õ?¶øºVœ×Ü^¼Ê|àÿÿ°^òÿÿ³}f ‹ÿÿ«jeƒ,6ÿÿ¦õ<ˆÿÿ®×4¦ÿÿ®³4ÿÿ«Öÿÿ¨ñÿÿ«g†ÿÿ©¹1ÿÿ­¨<Œÿÿ $lÿÿ WÉ…ÿÿ² ²’¾Ù5 ý°l.B?rÌÈÛýÛ~Ñ£-Zÿÿ¾Ú&ÂÿÿºÑ `ÿÿ·ˆµÿÿµ,ÿÿ²ùÿÿ±- ÿÿ¯”ÿÿ¯jÿÿ¶q ÿÿ¸÷*éÿÿÁd=Aÿÿ¼æi˜ÿÿÐÑr“è–äx{4£xâÝ¢NÇŽ`Ⱦ‚>Ç»¸á=ëÿÿºâ(Lÿÿº.Þÿÿ¸"bÿÿ´x#‚ÿÿ°âY#ýÿÿ®8 ¬Üÿÿ­"ÿÿ· ÿÿÀC4ÿÿÆL':ÿÿÎY>#ÿÿÛéS&ò{ü9W¼ÇöŠy÷`€ü;¢•ú…a®Æålß©—‚ºÿÿ£õ Érÿÿ©o Ò\Äÿÿª VSÿÿ©Á?Nÿÿ«@¬AYÿÿ¨éÜ72w!ÿÿu/Òðÿÿ²'ýÿÿ°¢& 0Eÿÿóò@ü†:^Û‘ýßE9 ˆÐ=ÿÿIˆôü<GÚ"ÿ  ½4ÿÿ E E‰:ÿÿ+¶Cÿÿ?¨ÖÿÿEÖÿÿ œ@ÿÿ 7Xÿÿ+b1´ÿÿ;Ä-ÿÿ@'§eÿÿ€$eSÿÿŸÿ$Sÿÿ³h#Ó)½ÿÿë;ÿõê)(êÿýÚ2åÿÿy4ÿÿpööÿÿAlAlÿÿ %`ÿÿ(Ø^‘ÿÿMš`ÿÿ`ƒYÞÿÿTO·ÿÿ¨9O#ÿÿÂP;ÿÿùôø8zúòÿÿ8„Þ¿ÿÿQ/Ê—ÿÿ`¼ÿÿj½¯¹ÿÿsá¤ÿÿzfÿÿ~4ÿÿ{! qÿÿB•GžÿÿÖ\òÿÿ jÏÿÿDêkòÿÿahcEÿÿ" ‘¤SOÿÿ§oaWÿÿÄç[`ÿÿ#0ÿ.¾ïoÿÿIØÓÿÿaµ¿cÿÿl¿³>ÿÿwC¤ïÿÿ~`š³ÿÿ‚ÿÿ„*ÿÿ‚Ï[ÿÿUÁ@£ÿÿ3GXŽÿÿvÿÿ@ésKÿÿ_«lºÿÿv¹t€ÿÿ¢&s2ÿÿÉìl•ÿÿ°ÿÿ5¥ß<ÿÿ`£Ç"ÿÿn·9ÿÿz§ÿÿ^šãÿÿ…êBÿÿˆôÿÿˆšÿÿ‰T:ÿÿu%-)ÿÿQôM\ÿÿ€iÿÿ4ý}²ÿÿ^Kxƒÿÿzs~Xÿÿ¤íÿÿÏô€Éþÿÿ`‘ÑÙÿÿoF¼Hÿÿ|cªXÿÿ…›)ÿÿ‰ÕÜÿÿFóÿÿxÿÿÿÿÿÿ (ÿÿRŸRÍÿÿ†?ÿÿ‘1Ï}¿ÿÿM„×ÿÿy&‰Tÿÿ¦zœÿÿÜðŽªæ÷ÿÿtÕÁ‰ÿÿS­Jÿÿ‰›¸ÿÿŽ^‹¬ÿÿ’n=ÿÿ“Üx¢ÿÿ•3ÿÿ‘ºÿÿ”¯ÿÿ† )†ÿÿXÇU3ÿÿ/2z®ÿÿ ƒ’ÿÿ=‡~ÿÿsû”‘ÿÿ¨š«ÿÿðº‚Ñÿÿÿ†Z²yÿÿXœIÿÿ“mˆˆÿÿ—F~ÿÿ˜¢p{ÿÿ›bgeÿÿœ,ÿÿ–îÿÿ›hÿÿ‘i$ÛÿÿF@ÃÿÿhK nf,ÿÿFÿÿ,’ôÿÿfŸÝÿÿ¶§7ÞQ䀧#¶\ÿÿ˜Ì—±ÿÿ›h‚ ÿÿ§sŠÿÿ (h,ÿÿ¡~]ˆÿÿ¢È\q1ÿÿŸÿÿÿóÿÿ¢Wÿÿ ×âÿÿ‘÷= ÿÿv¤mÇÿÿ\ŸŠrÿÿ1¿Ì¡>õ"7<´DÉG¤Å²›‹Ö¯²7‡G ¾ÿÿ­.tÎÖÿÿª?aAÿÿ«²gu–ÿÿ¤œg-4ÿÿ Hgu5ÿÿœ¥U8"÷ÿÿŸÿÿÿ¤ÿÿª+ÿÿ«’ÿÿ¤<Êÿÿž¥eÏÿÿž½z{ôþ¥Ð‰Ãİše¤ +Ì3Ág",ÅõÀL"!ÿÿÀšÏÿÿ¹ì$ÿÿ¶Ý3ÿÿ´)Pÿÿ² ²ÿÿ°PBÿÿ­üÿÿ¬Àÿÿ´bÿÿ½" ¿ÿÿ» =¼ÿÿÀ-K[ôYË¿^Þ©àIdž Û›”¾›WñµÕ˜ü°â˜bhÿÿ°êAÿÿ²!A¯ÿÿ®£,#ÿÿ±ì$]ÿÿ°˜Òÿÿ¯ ÿÿ«ÿÿÿ·ˆÿÿ¿óÿÿÉ ÈýÿÿÏ24¹õMØÐ>¾ßðÑ?ø¶¶ò eme÷Ï’ÙóbYE¥záyÍy¡s¬3ÿÿ— ƒpÿÿÔp>ÿÿ ®ïd=ÿÿ¡¶áY ÿÿ¢ #QUÿÿ¢+‹K©ÿÿ¡‹ÿÿëÿÿÐLÿÿÖà0üÌåg gêãÿÿ-:Å\ÿÿJqÿSo`QŒÿÿ&‚)ÿÿdÚ„|ûÿÿ¯…½äðu1»’ÿÿk(±­tÿÿ~E‘ÄÿÿŽ[,ÿÿæy™ÿÿ“Gmúÿÿ”ÚÿÿÑ|ÿÿßÔû\ëÚçè®ûCÍ©ÿÿ2¤Ÿ³ÿÿMpoÍÿÿ Xÿÿ€Š ZÿÿYäX{+éÿÿ?ÿÿ¶18…ë üµWwÏBÿrf™¹bÿÿpÆ©ƒÿÿzšÁÿÿ€å ÿÿ‚“ÿÿßœÿÿïÍèGò» gÙ€ÿÿÿ€±¥ÿÿ0j‚³ÿÿd8Bçÿÿ 9Hì ÿÿöFbÿÿBŒ@õ+ÿÿ‰"v …ÿÿš*ÜÿÿͰ'­öÂõ·BèÜ0þpOµÌ\ÿÿX•½8ÿÿ`§°"ÿÿh®þŠìŸ+îãò 4Ö·ú ¯ÂLÿÿr Œlÿÿ2ÍIdÿÿBäÿÿOoéÿÿ"ËA›ÿÿ9Ð<Ïÿÿ6Ä8 cÿÿü)Zÿÿœ*àÿÿÇà)Bæÿÿÿsëøüï9ÁØ,ÿ:@ÀüÍ£ÿÿFüô«ò ÜtõM -Årü'ˆ¥éÿÿunÿÿ "'ƒ):ÿÿB,ÿÿFµÿÿ!C:dÿÿ.x1ÿÿÿ>]+”ÿÿd!2ÿÿ‰$¢ÿÿŸp#½ÿÿ´°" 3²ÿÿôUÿÿú´(¾êZÿ.¥èÙõ¶sÌìö¥ɰíüù=€ÿÿ!NA¥ÿÿ9ééÿÿ@ÿÿ”:ÿÿK0Jÿÿ,Š) ÿÿ9•$Öÿÿ@ Ó³ÿÿtƳÿÿŠ©»ÿÿŸËÌÿÿ²tFÿÿÑÿ!åÿÿógÿÿiœÿÿgÿÿ@0sÿÿ G*ÿÿ*nXíÿÿHZZ<ÿÿ`Vÿÿ ©ŠäM¨ÿÿ§XTÿÿÆPvÿÿ8ð87$ø<ÿÿ1úàãÿÿ7)ÐrÿÿI6ÁšÿÿU·6ÿÿ_Ó®nÿÿgJÿÿmßÿÿmÚÿÿCÁ5Ïÿÿ!ØJ°ÿÿ‘f—ÿÿCå`Øÿÿ`^‡ÿÿ nÛQÿÿ¦ŒaSÿÿÈW_ÿÿl÷=Dî,ÿÿ+Ö×ñÿÿG»ÇqÿÿVºçÿÿa±Eÿÿi¡¦ÿÿp%ÿÿr5ÿÿr•ÿÿNÉ2Ñÿÿ#cO!ÿÿ 'n,ÿÿ@eäÿÿajbÿÿuzm±ÿÿ¢lµÿÿÌ i8ÿÿ,ÎúòF´âŒÿÿ?zÏŒÿÿV¿/ÿÿa*´GÿÿkF¨WÿÿsYŸ˜ÿÿwÕÿÿvÅÿÿw¢ÿÿuò ~ÿÿ8öJ)ÿÿnv”ÿÿÿÿŸsP6ÿÿ¤Ih‹â¡¦x¸~;–W+a,œ¹ýK]ÁP¹Y›ˆïº)<ÿÿ·¢ÿÿµHÖÿÿ²é"ÿÿ°ì"ÿÿ®Æ Kÿÿ«Jÿÿª‡ÿÿ±lÿÿ¶ÿ ¯ÿÿ¸_3[ÿÿÄ¡ãBØãÄÈqGàÑÖËOM– Ï^‚®° Fά]—K¼Î¦lr2õ)ª? !QÎÿÿ©?†ÿÿª@+B4ÿÿ§a <'ÿÿ§>ì7®ÿÿ¦Ê2Òÿÿ¥~ÿÿ¶Öÿÿ¿øÿÿÆ'ÕÿÿÏp&ê8Ö!&Ô¿æV'y±AîBM0l’ì)~©ê(Sð™vß Ë™”ɺ4ë5‘Taÿÿ—~ûÿÿ”pr<ÿÿ—pfÄÿÿ˜È`«ÿÿ™\ÿÿ™Cÿ}ÄÿÿÏ^ü\Ö/9ì-ÜÖ‚Úò_ŽsùŽ3&Ѝû)Y9.ÿÿƒúÿÿKnˆÌÿ_«ƒ>í á8xÄÃÒÿÿh„°…ÿÿv$ äÿÿ~‘‘§ÿÿ‚gˆ ÿÿ„À$ÿÿ†’ÿLÒXÿ’ß=éÂÝg$×?ëµTÅÁýL•žVÿÿ4†zäÿÿ+v;©ÿÿzNÿÿRÞX(3ÿÿ‘”A¶ÿÿ­­J"ð‰ýó;ˆØºÿÿLðÈBÿÿWi¹nÿÿ`\­¶ÿÿi¡úÿÿnlüéÞ‡ðÈãX}×qçÄôò€ =«Íþiõ~~ÿÿÛ*BÈÿÿ€B7¾ÿÿELÿÿB~`ÿÿÿ—ì*þd7?×Âÿÿ;UúÌßÿÿBnÀ†ÿÿM-ôëåiZÝÉèA ÅÈìÉœ±…õó‰ëÿÿÔH™ÿÿ<„ÊÿÿCgÿÿ,>éÿÿAÍ5 $ÿÿp%ànÿÿ~­1ÿÿŸO!]ÿÿ²Þ#÷/áÿÿñË—ÿÿÿÓ ïvÿÿ+»Üœÿÿ.éƒê‰ —ÏÖëIY·Ôï­½›çûí eSÿÿi$ÀÿÿE=ÿÿA¼ÿÿ­5ÿÿ8Æ,åÿÿ9)ÎÿÿlÒÿÿ†›ýÿÿœ½Hÿÿª¦ÛÿÿÉå(¤ÿÿòðWÿÿýŽèÚÃìÜ B¿]ì0ñ¤Ÿô\xåÿÿ&Alÿÿ2ô ÿÿ>ÿÿ6ÿÿÑ,ÿÿ-¹$ÿÿ@=ÿÿFƒ =ÿÿpß =ÿÿƒE·ÿÿ˜xyÿÿ¥}ªÿÿ¸eÿÿÑ?ÄÿÿQÈÿÿQËÿÿ6U!™ÿÿL=ÿÿ+uKuÿÿIpÿÿŽ;ÿÿŽ'ÿÿÇÿÿ‘Jÿÿµ4ÿÿbÌWEÿÿ^jÜi&í~š”kÉ"'žj¯£œ•“ñÈ4šºw–棅láþÁ£aŽÿÿ™[êÿÿîThÿÿÆOÿÿ@GïÿÿœÍþ‹›hÿÿžÜÿÿ¡ìÿÿ›œ+Sÿÿ®9þø©ŸèS½Ôb›ÛaÕ§w‡Ö,. Ö%̰¯µ.¯¡ ɦæ>°˜ æPÿÿ³­ÿÿ°›ÿÿ®¬ÿÿ¬ýÿÿ«SFÚÿÿ§Ûþ˜¦èÿÿ«{ÿÿ±Äÿÿ¶º÷n½Ó)ŽØeª**ÀÈ0=WŒ)Ã?oWž6–¡d˜ ¶Ü™LtæYŒO\“ÿÿ¡JKÜÿÿ »F,ÿÿ }@¢ÿÿ z­+ò–ÿÿle Lÿÿ^ÿÿ˜Üÿÿ¹X1ÿÿÚ[G$lÿÿûÿÿÿÿRêÿÿæÝUàà nÁÝçp«{ãL¼‘yô/^žÿÿ!Ûcÿÿ>.ÿÿ9þÿÿk-Nÿÿ6$%ÿÿD‡!¦?ÿÿu«ÿÿúÿÿfÿÿ¬\ ÿÿÆ{ÿÿÙ`X¢ÿÿó¨Í}àÅ!²Êá@g™ðíƒrdÿÿ¾AŽÿÿ+kªÿÿ4ªÿÿ/fÿÿ±%]ÿÿ.L˜ÿÿ@‹ ÿÿZ  ƒÿÿqÿ ƒÿÿ†Î(ÿÿ”oÿÿ¢¢ªÿÿ²KÿÿÆuWÿÿA¿ÿÿ8åÿÿ "ÿÿ[9„ÿÿ-·8GÿÿMo3²ÿÿaö8°ÿÿ„ª8¯ÿÿ Û8£ÿÿÂ941ÿÿfæe'mÿÿHý["HâNÿÿá×Âÿÿ$Íÿÿêßÿÿu¼Çÿÿ%žÿÿDàÿÿ;iÿÿé(5ÿÿ JC$ÿÿ'Ö=ÿÿK8·ÿÿ^=¹ÿÿ>vÿÿŸI>zÿÿÄ×<Íÿÿ ‹ë&¶þÌÿÿ#ÛÛçÿÿüÒ@ÿÿ¼Ç5ÿÿ¿‰ÿÿ#œ¸öÿÿ/ÁÿÿH÷ÿÿ?Ðÿÿ,f$žÿÿN‹ÿÿ!DfÿÿEÍCÿÿ`F@jÿÿ„NADÿÿ¤D¦ÿÿÅH£ÿÿ´ðÝ.Sôšÿÿ(ÔÿÿšÉÿÿªÀÿÿ%º¯ÿÿ2r²ÿÿüÿÿcòÿÿ*Ýb+ÿÿMÊd²ÿÿpwjÆÿÿ¢ào‹ò÷ÓÔp‚Ô ñólœ½!ýÑe­«ŽÿÿUa¤ÿÿ` žaÿÿf‚–¥ÿÿl‡‹\ÿÿqôûæq¨ÿÿlrÿÿw$ÿÿN:Yÿÿ0bTWÿÿuãÿÿ7®wlê=\×y[×XŠ«}jÊ×È%yö°±ì~<•ö¼ƒEÂÿÿwb…ÿÿ}€oÿÿEzŠÿÿ‚qÍÿÿ„úRƒ:ÿÛ‚ÿÿ†ÔÿÿzÌ$wÿÿfÞAJø±LódíÓÚ8‡ß·|#Ê„¤3u;Œ»î¿E‹Mw6èÁ”èc³ø¶aQÿÿ“[%ÿÿ•W²ÿÿ•#Qbÿÿ•YGÿÿ•Õ÷ßü’ÜÿÿšKÿä—vtù`•ó(Òçh•÷;`Ä’Ir–Ñp·xÇ,Ö›¹¤¡˜Р«£Ÿ•Ù±¤õö^©Ùÿÿª•òÿÿ§^ÿÿ¥qñÿÿ£ù Øÿÿ¡ö†œô÷à¡Éô¦¥ì꨸ Âßa¯æ É\µ. ®ï·”/µK²¾\v´-õ““0«#‰yäádŒùcRÿÿ“ãJõÿÿ™#GÅÿÿ˜áC|ÿÿ˜Ú?»ÿÿ˜¸?zÿÿ—Ròn©“ïW®¹å9²+Úù¸ÁöÉTÀµ6ɶÍš ÎøþgÙÕwK{Íð?‡{Ëÿ¯+rì¹âƒtBœ;þz†¨ÿÿ{7{ÿÿ~ tæÿÿ€cpžÿÿvklÿÿ‚×ï*·4êÀ¾ñÙ>¿ü¢ÇóÄŽ³ˆ£ßÚ2…öæIÅX¢ðå<,ðU;Gd4ð¢\ýÜKÝÓXýÊ7õ®W¯_ÿÿRa¦DÿÿYΞ.ÿÿ^Ý– ÿÿd6ÿÿh*îÆÞdÈ#é˹É]´ðÌj¡pÔgéi—û¼%#+vÿÿJèÿÿ8âM2ÿÿ‰É4FÿÿÅÕ?°òŠö7žÑƒÿÿ&ÛÈ“ÿÿ0¿pÿÿ6ƒ·Mÿÿ>¯áÿÿEƒèdÎ͵ÒÍçI¼‹Ðf§LÓØ½Þþr‹õ×QGXÿÿ-ÿÿA­ÿÿ;Ú,8âÿÿ{Ö Qÿÿ—Úiÿÿ·Ëmºÿÿÿÿô%ÿÿNÝøÿÿoÔÑÿÿ!̽ÿÿ$—Þ•Õ` ÚÃÍÑήGÔ‰—£Û£|ñ‡Qyÿÿ ؽÿÿ:Ïÿÿ;,0ÿÿ9!`tÿÿe 7·ÿÿ~Áÿÿ›ƒÄÿÿÒŽ½Áÿÿï qÿÿûöÿÿÿÿ>ò€ÿÿ €ÐDÖq:µŽÔ5¼ ?Ù“‡¿ìbÆ]-ÿÿAžÿÿãÿÿ3„ÿÿõ$ ÿÿ1ýÙ>ÿÿSð A ¨ÿÿtW pÿÿˆÿÿ§³ Gÿÿ´— }ÿÿËWÿÿÚ)OÿÿðÀ…×4بkØó–UæÈlËÿÿF?ÿÿb3Qÿÿ5Qÿÿ'_˜ÿÿ››Ôÿÿ9:ÿÿ@5Eÿÿ\ENÿÿvŠNÿÿŒ Mÿÿ›< ÿÿ§Z =ÿÿ´ ÉÿÿŦ óÿÿ.Lÿÿ.ÿÿC$¬ÿÿî'mÿÿ5©(ýÿÿMŠ*PÿÿeS-Žÿÿ†Ÿ+»ÿÿŸÿ)üÿÿ»%ÑÿÿÙÜýIôâØçÿÿ×Óÿÿ ÁÏþÿÿšÈ1ÿÿ›À=ÿÿšÿÿ2ñÿÿ/)ÿÿt+ÿÿ‘(Oÿÿ0V(¸ÿÿIœ(Žÿÿ_.œÿÿƒì-ÊÿÿŸ,—ÿÿ»Ï'îÿÿÝ­µú,úÙe߯ÿÿ ÑÑŒÿÿ šÉ[ÿÿ3ÀcÿÿºÚÿÿXÿÿ8¸ÿÿ2Iÿÿ¡ åÿÿ1‹ÿÿ)M03ÿÿGí-mÿÿ_Ù3pÿÿ€5ÿÿŸj4cÿÿÁL3ƒÿÿ™ç$Añÿÿu×ïÿÿ qÇÿÿ·¿ìÿÿ›ºDÿÿвdÿÿÄÿÿ?¦ÿÿ9¥ÿÿ$$6ÿÿ÷=ÿÿ 7Øÿÿ>!: ÿÿZ9Èÿÿx?ÛÿÿŸà=àÿÿÆAlüë¯7éà„ÿÿ,ÌËÿÿȼ„ÿÿ Å´Kÿÿ<°Mÿÿ)©`ÿÿ2ÿÿFâÿÿBmÿÿ9Ëÿÿi6aÿÿÇò?mÿÿ2åE¶ÿÿV6E:ÿÿevxD¥ÿÿ $JîÿÿÎ?O[æôëûHTÐÿÿ@u½ÿÿ/«®¤ÿÿ/é¨3ÿÿ8ÿ¢Mÿÿ?ˆŸ§ÿÿFmþéO|ÿÿL}ÿÿ]±ÿÿ+Á3CÿÿTfÿÿ*_PPÿÿKÔU"ÿÿpÙX=óh—ý\YäPÄn[™Ñ(ïØ\·`ù¯UrªKÿÿO ]ÿÿL=› ÿÿUN’ûÿÿ]ŠŒjÿÿb$õƒ[ðÿÿVýÿÿeÿÿMò'éÿÿ,gDˆüŽAflòú4äfòÙÙTøf£ËÕj¹¿ï»teo®ùïãkg™0÷ v»‹¶ÿÿsÍÎÿÿp¡yçÿÿtwvºÿÿvánŠÿÿz òáp÷p>ütÙþ…u ø€` .²èCGNRÑÁ >wX¥@°]–`d‡|F„I³5zYp0â=ƒ¸_/ø<’±Yÿÿ‘ŽUÿÿŒAT«ÿÿŒ±Nçÿÿ}Bbÿÿ޲ïÚƒ¾òs†$ñ²‡Æî¹Š /åt‡‘ÎÕkˆÞ#”³„‚a4„€`wh­$> ´,™—Ñ‘(˜ן—&`îaÖÿÿŸö:ÿÿžž Ûÿÿž Rÿÿœ¸ËÿÿšqîM‘씱ᨕDØ9™pÛÌ~,¶¢hÛæ¥å"qSŸ…Mr~ƒi‡Û›w“zËØäyŸgùú-‚QYŠÿÿ‹Rôÿÿ.GÿÿœC˜ÿÿéA¿ÿÿŽ¡èŸß®£ ÖJ¥†ÇT§(³³‘«Õ¡¤µ®‹~¾I ù`éÁæ6м}3®h¤½Œš*^©´;Ùñ_©œÔùrfz†(ÿÿlèy›ÿÿo¤uîÿÿrvqCÿÿtílÎÿÿv:äˮ۱áʱI†µK³IŸ£·„YÃñ|°ÕÿRÚÊ%ÝR/èO·ßï’öF°Ø×½EXÆãöjEE±¤ÿÿDì¡§ÿÿHœšÅÿÿN”´ÿÿRã%ÿÿVãâȼÈÒ¼'Ǽo»B¦½”)Ãhz`Ó`dé¾1:Sö}'ûøq+ã8$ý\{¶1©ÿÿÈú0BìGø‹*`ÓmÿæäÁÿÿ!«ºÔÿÿ(;´”ÿÿ.)®Zÿÿ4¢ÝƣŢÂc(¯eÙùÇ0ϦjÎäBOEÿÿ éÆÿÿ5>ÿÿ3~ Lõÿÿræ ÿÿ•~¿ÿÿË àÿÿþ7¸é°ÿÿ·Ùðÿÿ *ÑÿÿŠÊjÿÿoÑeÊ!¦¸2Ƈ<¢]ÈSb‹Ñszä|jSóÿÿ ·jÿÿ6Çÿÿ$%!ûÿÿFp "ÿÿZîÿÿ€, 5ÿÿ¡J lÿÿËü , ÿÿõZÿÿÿÿ&ýþÿÿ³òÏÿÿ€ÂrË?LªèÊ'=”ùÑL}¼äUZ×ÿÿ36ïÿÿHÿÿ+„ óÿÿã»Åÿÿ;ýÈÿÿMÅŸëÿÿqÚÿÿ‰¥¯ÿÿ¥êÿÿÊq˜ÿÿÕbr ÿÿéDXÿÿïÖµ̓מYÑD†ãá iyÿÿ áF_ÿÿ$.<ÿÿ<Üÿÿ p p‹ÿÿªª Íÿÿ0uÿÿ@¹ÿÿ[³ÿÿy ÿÿÝØÿÿ¦Oþÿÿ±%,ÿÿ»vGÿÿË)ÿÿÿ![ÿÿVVÿÿ [ÿÿ#8¢ÿÿ ˜@Lÿÿ½Y½íÿÿãnLLÿÿ…£!…ÿÿŸÿ ÿÿ·/DÿÿÓ‡ƒöíê£ -ãðû £ÒÐÿÿÌ6ÿÿÅÔÿÿ¿°ÿÿÿÿ ÿÿ'L–ÿÿ"—ÿÿÍžÿÿ2!2ÿÿ©WúÅÿÿìlw ÿÿƒÛ#ÿÿ asÿÿ¸zcÿÿØV…òÕð- pÞ'ÿÿßÊGÿÿÄ?ÿÿ¾ÿÿ¸Wÿÿÿÿ&§ÿÿ&Pÿÿ'ìÿÿ6Kÿÿ+ ÿÿAò&€ÿÿ^P)æÿÿ€'ÿÿ …#Uÿÿº!$ÿÿßJ×ëè÷’ KÕóÿÿ¾íÿÿº(ÿÿ´Dÿÿ®Xÿÿÿÿ.­ÿÿ-°ÿÿÎ ÿÿ I)!ÿÿ$E)Sÿÿ= ++ÿÿZ ,‘ÿÿ|Æ,âÿÿŸC+oÿÿ¾q+™ó—áƒ&\Ú ùÔ È3ÿÿ ª±`ÿÿ°;ÿÿªÿÿ,¥$ÿÿªÿÿ8 ÿÿ7[ÿÿ0Fåÿÿ_-‘ÿÿ/ÿÿÿ6i3TÿÿR„1xÿÿsö6ºÿÿ¯5­÷¾¿J9CàÒæg4ÎË5ýX/4¸!ÿÿ'§£®ÿÿiŸ™ÿÿ&«ž0ÿÿ.+™—ÿÿ6úæBWÿÿBÜÿÿJYÿÿ&¹&ìÿÿÙ@ÿÿ'c=3ÿÿHÿAGòIfZ@ô⩉E¾ÙйªE5Ì•íiDq²Ëø B ¤IÿÿC…””ÿÿ=ÑËÿÿFR‹êÿÿN܆ÿÿTõMdúNKü^QžüŽKp³ôe%N7œíh œS‡ßÐ0ÌPˆÌÐMˆRe½½wÒVgµl±ÂPn¥4áËPé•õæej„ÿÿkŽsOÿÿg6oWÿÿknÅÿÿlãgtÿÿpjêÀ\gí¤\‡î¥aï8eqç Vå Ø,B»9w²|v_!–¤lψ{Y h|yh§^gsiÖçlóYŽóî‚…O ÿÿŠ_K»ÿÿƒ˜Fèÿÿ…0Bøÿÿ†¸7ÿÿˆŒæWrÄæ1t.áÜtœÛËx”Ò"va i¿ëu.,¡úm¼%EtiQ†WO=Väya‹ìþƇACÀ!†ÿÿ‘„Çÿÿ‘Œÿÿ‘ÿÿ·NÿÿäÐ…_݆ Ö ˆlÇ’ˆóµÎˆ ù ß‹˜Ú‰åõä`I‰$Bãmr|qh{8ŠeåtxÊgdühóõ#k¹]ÿÿxßP`ÿÿ²Q¼ÿÿOØÿÿ‚KÛÿÿ‚ÜÏ“³Ö¦—‚ÉV—œ³f’ïž.•m‰xܪ”úU»¯Ž+Æ©÷'–Uv°q†ÁJ¬ßÉÙI©œ8ôÃO†öÿÿWu­ÿÿ_sNÿÿb{pÿÿeWm2ÿÿgÚ•£•Ð[¥ªºÑ¡û?¡§Ÿ™‹$¢²x+­)eÎÀH©ÉÞžÍ$¢;®Ót~Æ1οÇ&0-Àîõ1_®Kÿÿ4è™ïÿÿ7¨”wÿÿ=‡ÿÿA*‹°ÿÿEyØ+±µÆP¯-¬Ûª©/–¬M~{°bh”Á:TCÔô9+âs“ëˆg#ÕðqWõòÁ¿§xäkôÝCÌóýP·ÿÿL³Fÿÿ®®#ÿÿ Š©Ûÿÿ%wÒ°¼j¸Ñ´Š ³²øz‹ó¹s²ÃL^;ÕõCÆï-Öÿÿ¹ÿÿ'b mÿÿc•*ÿÿÎVÿÿÓw¥ùè÷Ô ÛÈÿÿÒSÿÿÊŸÿÿdÄéÿÿ ÆcÀ!S¬YºX•Ѽ°~EÆžh¾Ù‹OüG6*Mÿÿ 8 ÿÿ z, Úÿÿ6vÿÿTƒIÿÿ€²$ÿÿ§ÿÿÒLÿÚÿ‰¹ûUÿÿ÷tÿÿï«ÿÿ¸ÌÂiŸñÀ;‰ ÈŸs#ÛÎY•ÿÿN6Öÿÿ `#éÿÿSÝÐÿÿ  +ÿÿ/KÿÿK ÿÿn£ÿÿÉÿÿ­ÿÿ×$ÿÿâäÿÿìÿÉõr«HÅ ” Éý}ÛÀb?ú6ÛF/ÿÿˆ*³ÿÿá’ÿÿbbÿÿ 1›ÿÿ*ÎÿÿEéÿÿ`ÿÿ€ÿÿ—ªÿÿ°Xÿÿ½cÿÿÌÿÿÔÒÿÿÝÿÿËÿÿ'—ÿÿ*ÖSÿÿ[@ Xÿÿ‰VáÿÿTk6 6ÿÿÔÿÿœO…ÿÿ´y¾ÿƒÌ‹Mí'Þ±¸ÜkòhʹÿÿÁvÿÿ¼Cÿÿ¸3ÿÿÿÿéÿÿ = ÿÿüCÿÿ#\ÿÿ Î?_)ÿÿOSËÿÿ òg3‚ÿÿ~,×ÿÿ=Üÿÿ¶ÝIþÆÑTµéä‹×ùøÁpÿÿ¸ûÿÿ´»ÿÿ°/ÿÿÿÿäÿÿÿÿ4ÿÿ‹¹ÿÿ ½8·Éÿÿ ™LÚmÿÿbÌÿÿ{É,ÿÿœ¾åÿÿ¸íŽõgÔØùâÙíÍøÿÿ¶’ÿÿ®êÿÿªIÿÿ¥Cÿÿÿÿ ÿÿ!)ÿÿ éÿÿë¼ÿÿ%îOÿÿ>Äãÿÿ"öaÿÿ{jRÿÿ›Äù?¸pÑæ&׸ӢóŒ½Ã"ÿÿ§9ÿÿž5ÿÿž™ÿÿŸÿÿÿYÿÿ)ÿÿ*ÿÿ,ÉYÿÿ$#ÿÿ® ›ÿÿ4&!ÿÿ$'\cýJs*#'îÑ“&#âú³7 ¯×ÛÇÞÃ¥øî#²ÿÿŸ…ÿÿ[™üÿÿ ’¬ÿÿ¢eÿÿ'ú¦4¥þ!4¬ýz8–÷L ·,õµ ´.óõ'Ž*Üî*AÓ+zÞ±`t)œÔü‚ë/ÚÍ®•,ÎÂIàê)"°RúF.«ž ÿÿ5Êÿÿ9'„„ÿÿ;:"ÿÿ@}ôÿÿGcîùAñA"ñNB·îéB Öä§!(=Û.fÕ¨ ¤9›rÔ²5*–ôHIh€Šÿÿ_Mj!ÿÿaŸcÿÿaØ^uÿÿdÜYÿÿh=ãOQ2ââPákPüÞfQzÕ±I‘ 3ÆÅ:餪=ˆ…H^WÃy¢N[SønJ•²Qºa€ÅªT»UÌï¾g@Gÿÿ}±6uÿÿY-¶ÿÿŸ(ÿÿ…€ ÿÿƒªÝóe4ÛèfÖZeOËÁd‚¼v`§Æ©ž]DÅŽ7Z »eB³Eýãeëz”ôäs}¶ä{sÌ'Rÿßÿÿ…‡ ÀÿÿƒØ çÿÿƒÈ ÿÿƒ²ÙwýÔ°zÐÊ0z4·vÏŸ¢mÄЇrÁxyö ŽU[u 5™Z¶ç_…jøvpRõhöNÄa׿HS@Š^ ÿÿ^¸WUÿÿm›Vrÿÿq×O¯ÿÿtëLRÿÿtiÔûˆ‚Í(Œs½ ˆæ¢M@‰(|•uï‚{h“lIú›ö•;áBŸ|rF6žç·Z4–Ñè7ò†ÿ]?Hv«ÿÿHSptÿÿNÆk~ÿÿRœiÛÿÿT¥ÐÊ–ÛÅ4˜$­1‘+‘Š#$ylŠ‚g6— TbªDAä¸Òºë).ÀŽjú,¿‘°×¸Êæ0Ø©öþ!Ò—Œÿÿ';ŒÚÿÿ,4‡{ÿÿ/Ö„Íÿÿ33ÌB¤/º®¢²ž™C„·—¯p• ¼[¯‹AÿÁÒ'ûÑLÕÕ„ ÕÚ™`ôøÜ«ÀÙãÊÆ³øªÍ´Éÿÿ⨭ÿÿ ¥ ÿÿB¡»ÿÿOÆ›¯4­§õú’;£Ï*|~¨¦gþ¸PóÊ.2JÜä~ëþôrù[âúaeúÑÀï'ó^Ø©ÿÿÉ„ÿÿÂîÿÿ½Ðÿÿ¼Nµš ­‡ˆµ¯Õr²½'\ƒÐfDhíù*ÿÿ³ÿÿ÷ Uÿÿ.þÿÿXÆÿÿ„æÿÿª%ÿÿÚMÿÿÿÿôÂÿÿò-ÿÿêëÿÿ®a¸' ”¤µ©-|€¿gþÔáQNú»5fÿÿòÿÿ˜ÿÿ Fÿÿ-ÏÿÿQ†ÿÿoLÿÿ—=ÿÿ±ØÿÿÛÿÿø1ÿÿÿÿü¼ÿÿ¡4¼9Ÿ‰]à ssÖ YóñPW@6ým'éÿÿæÿÿÿÿÿÿÿ-ýÿÿL0ÿÿ`ÿÿƒ­ÿÿŸÉÿÿ´øÿÿÑÄÿÿÙîÿÿå ÿÿ 4ÿÿ öWÿÿi ÿÿñ1ñÿÿTASÿÿÒS ÿÿeš9ÿÿ}+ Hÿÿ—heý®ºxîåÀwßæÕ Ñ-è"Á§÷Sµÿÿ±œÿÿ®Fÿÿÿÿ ÿÿ Dÿÿ‚ ÿÿJ,¿2ÿÿÜAtÁÿÿA™æÿ7¡æL5çãD5&àE7Õ€—~ÉAÏ'³Á$`$®ø>º$ñŸíb 'Ÿ–Å‘ $†+À9ø†¦íá)úzÿ¾Lxb¥ÿÿY‹PÌÿÿ^uNÿÿ_ÄL²ÿÿ`6ߌE»ÝaDÆØ„DÐNA\Å>,¶627¶™m´"¹uþeB¬j…Aþ@Zb€wûýßfÄ%4ÿÿz(ÿÿ„ ÿÿƒÃÿÿ~àÙT`Ò7XJÉhVK½³S«M(“AJWz)I;ËYm:43Co¦¸Ti>¡3_†–ÓÏ]&oüf$sÿÿs¡—ÿÿy^zÿÿy ÿÿvªÐêj Ê´mg¾jiŒ¨e`VŒÍZ:uŽZe§`”K°aÆ&‚M:jM­[NaÁ?¦\Σò9Õ[‚×Û;YVkúëE‡S·ÿÿTðTÿÿa(SsÿÿaäPDÿÿ`rËí{—÷°\‘ÎF$íG-û‡ *ý! gÿÿÿÿ2}ÿÿYžÿÿoÿÿ`ÿÿ³ˆÿÿéý©ÿÿúÀÿÿ÷¿ÿÿ—³þé~» i ÐÕO¼æ¿5~ñ—ÙöãøA`æý<ÿÿ4ÒÿÿSÜÿÿdLÿÿŠØÿÿŸÿÿÿ¹ÿÿäÜÿÿîÿÿôõhóõõw÷Å!2öw.ó¨<ò.Lµð¦]ñ-süêÓ‹Pã½¢û1ÛƒµzÑ7ÊÅ%Þ·iìñªþ¥þÿÿ£1ÿÿöjõÙ½÷@ðøš)Žô²6ÏóŽH‘ñÞYÿó‚rÉëtŒã¥üHÙû¸‡Í×Ф¿j䱯óød¡Kÿÿ›iÿÿ˜bÿÿ÷Ôõ!ö8ùL"Ó÷Ò0Šô³B4ô±VÊö÷q·é‹Ù݈¥Ý¶Ô»þÉ3Úí¶òî?§Üÿÿ“3ÿÿŽVÿÿ‹äÿÿùk÷–õùdg÷ý)2ðœ:éOoÜFcÜÓV}pÉŽ˜À¶»HÚö­@ö¦™LÿÿŠØÿÿ¦ÿÿÿÿô àô î¬ +æ…åyæ«à40,ÈתDMÌøXã¾ßn:³Ö‰¹®¡¯S¬ÝÛŠ¥ùº’—’ÿÿÿ„vÿÿO,ÿÿކÿÿaënáéÚmãÎAÛÓmKÒþƒÏ ê Æ 4î·éLª cã¡¶‚<ž®M™RÛºýø$Ö€ÿÿÿ'Ìq³ÿÿ5ŽnKÿÿ9œiúÿÿ;Äßÿ*]ßj(Ùh'Ñw%HÅ« ¸Ty©¯* nš\7] ‰7S˜€»z†  «VÉz…ÙËœs™øE3Æ^ÖÿÿL+IÿÿTFuÿÿUAeÿÿV¿×ý<ÅÔå<+Ì 8¸À1ê´,M¤æ#bƒä:éhã‚+I\N8¦. V×jµ.ÕP^ 3/QJ9δ2Â?½öSD;tÿÿf&ÿÿtêÿÿtÿÿoáÐíH‹ÍdHÃÀ#Hޝ2@˜Ÿ:~o:‰hG9¥JO13"–Z/9GSR°ÙKÙ!½"GÀëîI & ÿÿVÖf&YÿÿbOõÿÿfY ÿÿczÇÑZûÂ^.²"X¸™dOÏ}mJNbYFZS÷K‰s@zQ×Am<ÂOrS/O°Å(=RÁÇ( PÚðA,cM!ÿÿ7ƒMÖÿÿE«KRÿÿKKIãÿÿIãÁðm!¼q½£·d†é[jtTÇUßRÏF$\ô6›r:oN µ ÅzbIŠy؈· ózÒ½Þ 7x5ë¸ dqÿÿÕføÿÿ#3[ƒÿÿ,"[Ôÿÿ,Ž‘}\±É}ð”ßpøwìf£^`b¤M‘eê3nwÝꊓèœdšNK—T~ð–¿´>“Úåó!ÿÿ€ÿÿûxµÿÿ ¤w ÿÿĶxˆ7¤"††Ð{l­tGX*w @¿‡›"bœ ¦\«¶#±ÎRíµz™´£´z²&×m©©ÿÿ–cÿÿŽŒÿÿAÿÿ®4“g—tްzΆ¡dIŠwNœî2Õ¯8ð¿ÆÒÎñ0ÕM[××¾‹‹ÙÜ¼ØØ ê ÎÿÿºNÿÿ­êÿÿ«7ÿÿ¥òžË‰µ–Ðp癉[©EBû¼-)kÑ©áV÷üØÿÿE’ÿÿ`ìÿÿ“€ÿÿ®ÿÿîGÿÿÿòÚÿÿÜkÿÿÕ¶ÿÿ™ ¤ø}¢g·°ÈQ0Åò:wßÀ"°ìðìDRô†!ÄøqDæüî]ý'pÿvŸTÿÿ´ïÿÿîGûiÿÿô×ÿÿó-ÿÿŒÉ¬>t|µ„^qÊYEÛÙ*Uã‡ÂçF9ê¯<ñÃ'DôæDÇøÊXËû)g¼ûäý¡³ý—Ââþjëü{ü{üžýèâýᘠÖá–¬ÞU'^ÛO4“×üAõÔšPÑÒ¿b6ÏqwÌ{¯Æ¬¥ØÀy½®·õÒʬ˜â‰ ¯ò—wü}•jþå±à~6áaÞ“!¨Ü]/½ØÈ>#ÕQN(Ò°^Ï«wŠÌ}’žÅE«¾SÅY³ÎÜN¥<ìÖ—øü÷Ž(ÿÿ‹£ÿÿè¡ãƒàRáݼ(ÛÚª9~×pJ¨Õ9]RÐ4xÈ6’5Àï¯ÅºèЫ‚ä/›>÷8‹öÿÿÿÿ¥ÿÿì’èTââ² tà7 Øb1sÎBQÃvT/·¶h¯Õ€¬.¢b¨ÍƯ Áè’fÿÿ€ÿÿ…‡ÿÿ„Nÿÿê!éÔÞØoÓ NÌö(d¾57ΰ9I¡Ö[Û˜Gqž”„”¦”ˆ¿Ì–ëéùŒùÿÿ |ÿÿ¬wAÿÿ£u‘ÿÿài ÁÝÊeÖÿ –Ì ¤Á ic»+F¯2+›R=aˆ7M®æhu~¼‘˜„E¿¬ƒ3èr &x ÿÿ Fmÿÿ&œc~ÿÿ/û_!ÿÿ1ÖÙ’ מ5Í4'ÀA®´Ü5¥Zù˜Ô++ûs#CÌ\n aÂÕl,·jÿ½¿Qg$çðJ[™ÿÿ9±BúÿÿBÖChÿÿCi? ÿÿE@Ò¤-ñÌ0¿*ö³& £UiÉt 7\Yw PØ/bŽJ4WM!ùDÛ‡ã#*B?µÈ Ø>Aâ›%‘ RÿÿGñÿÿayÿÿ`Oÿÿ\&Ș?SÄ$@Wµ¹:1Þˆ¤/ûon,îYº.Dÿ(¸ðEØå:[@ÇñvK;-ü«m6¬ÙJ3l#ÿÿ61ý(.ÿÿAû!OÿÿHx ÿÿH‡¿ÿN‚¾MRI§#I׋àBÃpÄYÿÿ2Õ=Uÿÿ2ºÆ_ ³Nb£—ÄWû{•NR^åGyJ[B8¼I`#„ZÈa- Ô mkÜ>¯Åh-pTi±§uhÕ,lÿÿ_´ÿÿ›QÿÿöQÿÿ ³ÀmÕ§înêŠ&bmÓY¡UWSZBnU'q*èd¿pùEz*¿…ÕDEƒQqã„0£¿}bÇ ‚ÿÿt]ÿÿkiÿÿj'ÿÿ¬zpšyV|@lçbigRNjj`4ÙxR©‰®’²˜¯)—¡„I€¤êjt§Î©¸¤WÁÌš@ÿÿŽâÿÿvÿÿ|ùÿÿ£`†uŒR€pèzY,{ýA|Œ?&  «Ù„µZk¹j4³Æ;\\Ê…KÏJ±DÊ«ÆÝÇÿÿ¶Mÿÿ˜ ÿÿ™Eÿÿ›’Ä~„ŠVfŠ€OEŸ,6±°¨GÃùÏx—7ßJ'JñŽOü@^Wü/˜‹ÿÿ­Wüé׎ÿEÿÿõßÿÿÊûÿÿÇÍÿÿŽþ›Gs‡š=\õ©4F›¼0HÔÃEÛýmÝÅä².¾êÒKò=^ññÀ‡v÷M öâ¿Zûhñ0ùEÿÿò”ÿÿð9ÿÿ¤jƒ°T‡Ã³:¨Ò ”ÖÈšØ{½ŽÜ25á§4è7I÷îE`î‘uó “ õ€¡ÜõÁÂáúî²øÝÿÿ÷ýÿÿÑ’Î ®Ëð–Éþ ÅJ++¿r6–º¤BϸQ±µTcç²ùz"±+”b¯j¯¨ãÄxŸØ •N瞊iõh‡Ü÷ðÓ¨ÏÌ´ jËBJÇ=',ÀØ2óºj?º·ÌO²´ØcC²r{Û°Òš,­³¶O¥?Îw™á~…ñ;Cÿj}åÿûÖlÒ<͇WË£ÎÉÓ ¸Ãd.W»‘=B¹wNT·@dþ°Þ~G®œŸéª9¿í—Û†ë츂×ü„uùÿÿwÖÿÿÙøÕ«Ñ“Íä?ÍMº'W´¢6yªEÁž‚X!—m‚—ŽD•½µ×’RÝ…[õQtÙÿÿxìÿÿxJÿÿÛ)ÙÎÑäÆŸ¼™ oµ C¦+ú•P;Ÿ„I7}ñ]C}ø€€Ø®«…Û.~ô÷ˆu“ÿÿblëÿÿôjþÿÿJ×'ÔPÉÖ»ô°×—¥Y‹”fÑ}/ p? kQTùhxw5ip§Cp:Ô·käÿÿcb_ÿÿbY£ÿÿ"‚WŸÿÿ#8ЧOÍÆȾ×'² ¶£ ¥«¬|Èò'i!‡]T6šmZPù×YIv Xö¦(WÐüÓPiÿÿ#W@“ÿÿ-³DZÿÿ,ª@ÿÿ.?Ê^"bÇi e¶ð!&¥éƒÈ[zÙicrnOö U ]EÆ(>?#Gl;†q)I:xž“h6É–/ þ *¸QÿÿBF ÿÿ@ª zÿÿ?a¿ÿ3r¾Þ5}«Ø0(‘Ã+ç|&—`!¬MÀ!z:Jƒø3Ê e/Ê/þna_)ø?›&°DÆ$"Eø” ÿÿ%òlÿÿ-óÞÿÿ/”ºÅB¶ŽE{›(;%€8e´1¬N‹.%9û+*Û4+6ØýÔ·k@£@›¬BÉñ@$÷‰:~ÿÿ/1$ÿÿm.÷ÿÿ’³PÑ«VvŒäMÉqCCDVõÿÿ½œ¹/G¶Ž ®´X„¯ ò¨g+i£~6LŸBõœ.T™ùgÌšY›Íž—Ƶ¾’D̉³Ü¬€žê½zÙñÒà º„¶ÿ÷´È±1©³'´¤3¡žÌ@Ö›¡S™iišw†à›¦Ù•M¿±Œ¶Ö‚Zæ´xzó‡r‡û=ǽ^¸äµ³ijh'¬T#@¥"0qŸÎ?`œâT£˜ lM˜^ž˜ ±ñ‘+ÐTƒøâ¹x›ñúo^þónÀÿÿÍ!ÇO¼»¸/¶ k¬ëÒž)ã&7-‚îE¾}Z™~{y‚R¨Ä€ÙÐøw½éˆmËÿÿlmÿÿkÿÿÑCÐxÄ(´ö©„ˆ›A‰nyo-¦mÍ;²h¶MƒQi]k3iÏ›"o.ËOmoì#iRÿÿdéÿÿ8`‘ÿÿûÍ=Ê`ºZ­5)‹± ¿wu‚f.$j˜ZR2©–V)C'U+`RTŽÐZ¾Œ]âñ6G[Yÿÿ TUÒÿÿOjÿÿáÇm‹Ä¥~´nR¤€ÞŽÊyüÀd¶$T;`nIi()Eh=BsZXD°Œ=C¸¬D§ïò BFÿÿ\@¯ÿÿý;sÿÿ+Á|G¾Pa¬Ý‰’…÷€lÚhA ²R¶²?•8v…Ÿ4Î:rÒ1r\®/›‹‹*¶¨¾ær—‘ÿÿ"¥•ÿÿ#Ìðÿÿ#ºþ){·è,œ’&™„ì&n. ¸VƒZA–ü.b!’ )N<.WwG:^ºº½%éƒ 5Lÿÿ ÿÿ”ÿÿQ³Â8¯Q:Å‘4ùxÚ/€\¬(MEÁ#k0ž!F7%Ú1W ‘õ1O1—2›`È.qŽX1ÉÀŒ,–êÆ(vÿÿ'ÿÿ% ÿÿ6«½Dâ¢âJª‚ÖDg~:YO®3à9.¢$Ò1‘;wó<ÓÞ&.@ÑwKÿQ‹ éO¥$PŒ<ÅMEf¤NftPKƹÑMHÌpLUÿÿ6Tÿÿ37ÿÿ™Áa°‡{bIjX8Q´Rª;T"¼]gg¤ÜŒjŒïkX#voEp;oxü› w³¨œy¾ÿÿu=ÿÿdÓÿÿL¿ÿÿÙpÚy¾k±^$i˜©¥\, ¤±Z"Q¹î: ËûXÖÓq‘Ú”uàl¸­á@¿…ìÿÿÞHÿÿÊEÿÿ™1ÿÿ{׉-a5‰ïI§˜ß4¾ªE ¸ÎçăMRǽ.ÜˤEøÐV[üÔn¬ØÎ‰sÞ³©CäîÁ¨ò}ùaõæÿÿúðÿÿÓÁÿÿo˜2WI¤žB1´ØV½ o½m âÂ$DÆn5KÊâIÝη[jÒ-jïÖAyóÛ –à´°ºåtÂeñ[ñ[õoÿÿõ–ÿÿ®Û©¤>> — Ñl‰)¸„^4¯@sñ}ÉS¡»àlø>ƒ>Š€0„W¦‚j½6}oЈw2ß°r9î1² ¬'¥Í¡}¼˜J‘÷ˆ¸&ÿƒ‘2í}>Ú;|T¼Ørc•ƒP”x‚ó±á~°É,w×Û¢r:ëÃkqø›¶k°bª£>½šË Ý“À‰‡#ŒƒÞ1;}—?Fö{òX[—~yÙ‚<¡¦AÁ$xz×ßqêÛj*ù­dÂÿ0¼#µÅ¯’¨¼£[”Çõõv­*¶k³7šÀgAK{iWh›i°’@m¯½òjÍÞ—hüö`Èÿÿ\ÌÿÿÇ-Å´—¦«•C„ q5Þcç"‰X˜.¹wTÃ>«}UsZÉU?†ØX8·‚ZTß \[ÿÿW‰ÿÿSàÿÿÃ(¼3®ëœˆ«t`cÞR hG#$«4B~4¢@ØNÜC›|«Bùª"IÛNN&ÿÿJ”ÿÿG[ÿÿ½ë»1ª“,l~,XfÓQóhA Œà5jâ2«-1£Fe2¼w‹/ƒ©3cÙ…9ÿÿ8oÿÿ4 ÿÿ;¹Ÿ"·JÊ¢[ _ƒÍ¾r @VþƒDÃÝ.Ü'U&È+“$Mi!|ƒ è²ÉÈpÚ¸xGÿÿ ô6ÿÿa"ÿÿ ¤´l ˱ý#Q’¿!÷}–!G`îL 6º !³ 8 Í) h[T½ÊJˆ=±¼ 0ãšÿÿ½ÿÿ „ÿÿÖ­9/¢©f2=ˆ.ïnÏ'’T¾ J=¸3'éÕní Ü+@-X b‚o¸5éÒ³Úÿÿ5ÿÿjÿÿ¤¿;.™ B™}œ:S_d28H-+h1¸&­X(—2lR+ó'5Ý(k]ž#‰wX&i´†$pÃý!¹ÿÿŠÿÿÿÿ˜þKúðPEnEƒT=<Ì6¶%õ8PÍApA‡ ì:Ni9VA*8LbÈ2ês¥6®è3C»ä3ÿÿ)Ôÿÿ! ÿÿ‘¡Y5~÷Y^`‘OÔIëI:2£K°¯UK[ìXɃXG'®WOAPQ5j`TKmeTª¡1PóÑ,iÿÿOÿÿ3ÿÿˆ}gýq¤bþV¨\±?Ó\º%çiU@r§Üz‘d…$"É5!”éVè–‚]pŒÔ£ï‹ì­a–ÿÿ‘pÿÿ…¥ÿÿ[öÿÿ?u%dnÜL pà1|Î ŒK˜XKr££)ƒ«ð=|³rS¸òiÍdŒðÕÕ¶jÖkÀÙÜqÿÿØ@ÿÿÉvÿÿãÿÿs‘‚MWÄô@Ž=,v ´«â8 ¹Ç&D¹9´º/NÆ8`—Ë;okÑŽgÙ¬'ÞH¿9æ‹ÆRõBÿÿþßÿÿÍ]ÿÿf5’ÕNž´9­ s°’‡³}Ú¶9.~¸l=žº§QÄ `ÉlëÎk……Óï“ïÚ~²ðß§¿ÿîŒîŒôSÿÿøÿÿ™–ªˆ8€@ ·x°Mrç¥k¶'fÓ2í jdúBM hjXGêlRt6ÏoË‘¹pجq;ÁònµÕBl¨çÌ£¡šc’ЊØ•‚• -yÞ sßjö%ïée 2I ’cJCÙ gç\´Ük·|ì¶nžp¹QnuÐlkèäugõ©¡–—}ŽÅ…”’{Ø s>1ja#Ö“c1Ÿ ºa¢F ìe|a¤pi®‡.m9­gnËkã~e õO[[û§°Á©#žx•Šƒ|»¾m*î_~¸UM*FR.;´]UXV ~,X$©$\„Ϧ`ö‹Voý`Oÿÿ¹P³£§1“ë€ónÝz]s ¤OñbkEz šBÜ2ßAmM“Cu»E+¤ÝEÛÍ&Mþ,F ÿÿ@Üÿÿ·‹³¢G‹—xa‰P ?Ê Ì5/Û42ú+¶/’E¡1Iq 03Ÿ 0~Ë96~ÿÿ2¸ÿÿ0zÿÿµ´±›tƒen'U‚Bê01(%ää"…$ ÈBÐzqús£¦ëÎeÿÔÿÿÿÿ²ª}®• e} ¹aÉJS-6ó¢!Ð:×:"¬ ¤IO |¼¼­¹þÖ<úÛ¿ÿÿtÿÿ­ä ¨óÒ‰d6qêüU²#@ì ý+e"¼ $;IöK|*ç­?Óüÿ ÿÿÿÿ§}(¾œ;+逅)f þM…6M7ñHã^rÄ)SkJ9Zx 馄•Ê‚lÿÿÿÿÿÿ›l7’©:çvÑ4ôZc,ÝAì% *¸ ¥Ÿ"’#tÀˆX3XÎQÍx”ä¿ÿ¯ÿ ½ÿÿÂÿÿ“ÏG·J^h+@VOS8r7¢3 Å3êÄ:p5z ù.Ù*£@(ø_K$,q›$Ъ $û¿ÿ%™ý³±ÿÿ ÿÿŒñU³yýUà]%L"EE-GQˆOŽRjOøÒM?)yJDCÓG"g"Hqp D3®PEÍÅÌO:ýô7vÿÿ'5ÿÿ„½d¾mŽ`7S'Zs;[¾!d^l7ö q »r¡" uJ2ÞvYRxÓxÓ•Ÿÿ„)¤)‹!ù¡‰nÿÿxÑÿÿO³ÿÿ| sÁa#nHÙoõ/z‡²†€„‘°ùMšØ*e£wCwªOS/¯wi”´¬t¬Ç(ª©Éz¿ÿÐÜûâÐùÿÿ¸Bÿÿˆ#ÿÿpæèVƒM=ÉŽ'õ.§ Ì[³•'ǵJ:ã·`Q»\yƘrÏÍ**Õ&¬ªÛë¼Ûä¼ËAôgÿÿûFÿÿÌ2ÿÿd}”BLŸg7¬xA®Û¼±¶(D´0sµøB·›Sºü[÷ÅŸo:ÊíˆDÐΕ8×uµÜé¿ÿíEíEôFÿÿú†ÿÿ.[‰·å@n›É÷%R€®Ü 7e“ÁîJx¦Ô/]‹¹çBpžÌú(Vƒ±ß ;i—Åó ! O } « Ù  5 c ‘ ¿ í  I w ¥ Ó  / ] ‹ ¹ ç  C q Ÿ Í û)X†´â>lšÈ÷%S¯Ý :h–Äò!O}«Ù6d’ÀïKy¨Ö2a½ëHv¥ÓA€¾ý;y¸ö4s±ð.m«ê(g¥ä"aŸÞ[™ØU“ÒOŽÍ J ‰ Ç!!E!„!Â""@""¾"ü#;#z#¹#ø$7$v$µ$ô%3%r%±%ð&/&n&­&ì'+'j'©'è(((g(¦(å)$)d)£)â*"*a* *à++^+ž+Ý,,\,œ,Û--[-š-Ú..Y.™.Ø//X/˜/×00W0—0×11V1–1Ö22V2–2Ö33V3–3×44W4—4×55X5˜5Ø66Y6›6â7)7p7·7þ8E8Œ8Ó99a9¨9ï:7:~:Å; ;T;›;ã<* >h>¯>÷???‡?Ï@@_@§@ïA8A€AÈBBYB¡BéC2CzCÃD DTDDåE.EwE¿FFQFšFãG,GuG¾HHPH™HãI,IuI¾JJQJ›JäK-KwKÁL LTLLçM1M{MÅNNXN¢NìO6O€OÊPP_P©PóQ>QˆQÒRRgR²RüSGS‘SÜT&TqT¼UUQUœUæV1V{VÆWW[W¦WñX;X†XÑYYfY±YûZFZ‘ZÛ[$[g[«[ï\3\w\»\ÿ]C]‡]Ë^^S^—^Û__c_§_ë`/`s`·`ûa?a„aÈb bPb”bØccac¥céd-dqd¶dúe>e‚eÇf fOf“fØgg`g¥géh-hqh¶húi>i‚iÇj jOj“jØkk`k¤kèl-lqlµlùm>m‚mÆn nOn“n×oo_o¤oèp,pppµpùq=qqÅr rNr’rÖss_s£sçt,tpt´tùu=uuÅv vNv’v×ww_w£wèx,xpxµxùy=yyÆz zNz“z×{{`{¤{è|-|q|µ|ú}=}}Ä~~K~Ž~ÑX›Þ€"€e€¨€ë.rµø‚;‚~‚ÁƒƒGƒŠƒÍ„„R„•„Ø……^… …ã†&†h†«†î‡0‡s‡µ‡øˆ:ˆ}ˆ¿‰‰D‰†‰ÉŠ ŠMŠŠÒ‹‹V‹˜‹ÚŒŒ_Œ¡Œã%g©ëŽ-ŽnްŽò4v¸ù;}¾‘‘B‘ƒ‘Å’’H’‰’Ë“ “M““Д”S”””Õ••X•™•Ú––\––Þ——`—¡—â˜"˜c˜¤˜å™&™f™§™èš(šiš©šê›*›k›«›ìœ,œmœ­œí.n®ïž2žxž½ŸŸIŸŽŸÓ  ^ ¤ é¡.¡t¡¹¡þ¢D¢‰¢Î££X£ž£ã¤(¤m¤²¤÷¥<¥¥Æ¦ ¦P¦•¦Ú§§c§¨§í¨2¨v¨»©©D©‰©ÎªªWª›ªà«$«i«­«ò¬6¬{¬¿­­H­­Ñ®®Z®Ÿ®ã¯(¯l¯±¯õ°:°~°Ã±±L±±Õ²²^²¢²ç³,³p³µ³ù´>´‚´Çµ µPµ”µÙ¶¶b¶§¶ë·0·u·¹·þ¸B¸‡¸Ì¹¹U¹š¹ßº#ºhº­ºñ»6»{»À¼¼I¼Ž¼Ó½½]½¡½æ¾+¾p¾µ¾ú¿?¿„¿ÉÀ ÀSÀšÀãÁ,ÁuÁ¾ÂÂO˜ÂáÃ*ÃsüÄÄNÄ—ÄàÅ)ÅrÅ»ÆÆMÆ–ÆßÇ(ÇqǺÈÈMÈ–ÈßÉ(ÉqɺÊÊMÊ–ÊßË(ËrË»ÌÌMÌ—ÌàÍ)ÍrͼÎÎNΗÎáÏ*ÏsϼÐÐOИÐáÑ*ÑtѽÒÒOÒ˜ÒáÓ+ÓtÓ½ÔÔOÔ˜ÔáÕ+ÕtÕ½ÖÖOÖ˜Öá×*×s×¼ØØOؘØáÙ*ÙsÙ¼ÚÚNÚ˜ÚáÛ*ÛsÛ¼ÜÜNÜ—ÜàÝ*ÝsݼÞÞNÞ—Þàß)ßrß»ààNà—ààá)árá»ââMâ–âàã)ãrã»ääMä–äÜååNå„åºåïæ%æ[æ‘æÇæýç3çiçŸçÕè èAèwè­èãééNé„éºéðê&ê\ê“êÉêÿë5ëkë¡ë×ì ìCìyì¯ìåííQí‡í¾íôî*î`î–îÌïï8ïoï¥ïÛððGð}ð³ðêñ ñVñŒñÂñùò/òeò›òÒóó>ótó«óáôôMô„ôºôðõ&õ]õ“õÉöö6ölö£öÙ÷÷F÷|÷²÷éøøVøŒøÂøùù/ùfùœùÒú ú?úvú¬úãûûOû†û¼ûóü)ü`ü–üÍýý:ýpý§ýÝþþJþþ¸þîÿ%ÿ[ÿ’ÿÈÿÿ4hÑ9m¢Ö >r§ÛCx¬àI}±æNƒ·ë Tˆ½ñ&ZŽÃ÷,`”Éý 2 f › Ï  8 l ¡ Õ > s § Ü  E z ® ã  L € µ êS‡¼ñ%ZÃø,a–Êÿ4iÒ;p¥ÙCx¬áK€´éS‡¼ñ&[Äù.c˜Í7k Õ ?t©ÞI‡Ä@~»ù7u²ð.lªè%c¡ß[™×  R Î! !J!ˆ!Æ""C""¿"ý#;#y#·#ö$4$r$°$î%-%k%©%è&&&d&£&á''^'œ'Û((W(–(Ô))Q))Î* *K*Š*È++F+„+Ã,,@,,½,ü-;-y-¸-÷.6.t.³.ò/1/o/®/í0,0k0ª0è1'1f1¥1ä2#2b2¡2à33^33Ü44Z4™4Ø55V5•5Õ66S6’6Ñ77P77Î88M8Œ8Ë9 9J9‰9Ç::C::¿:ü;:;x;¶;ô<2">a>Ÿ>Ý??Y?—?Õ@@R@@ÎA AKA‰AÇBBDB‚BÀBÿC=C{CºCøD6DuD³DòE0EoE­EìF*FiF§FæG$GcG¡GàHH]HœHÚIIXI–IÕJJRJ‘JÐKKMKŒKËL LHL‡LÆMMDMƒMÂNN?N~N½NüO;OzO¹OøP8PwP¶PõQ4QsQ²QñR1RpR¯RîS-SmS¬SëT*TjT©TèU(UgU§UæV%VeV¤VäW#WcW¢WâX!XaX XÞYYWY“YÏZ ZHZ„ZÀZü[8[t[°[ì\(\d\ \Ü]]T]]Ì^^C^^»^ö_2_n_©_å` `\`˜`ÓaaJa…aÁaüb8bsb®bêc%c`cœc×ddMdˆdÄdÿe:eue°eëf&fbffØggNg‰gÄgÿh9hth¯hêi%i`i›iÖjjKj†jÁjûk6kqk¬kæl!l\l–lÑm mFm€m»mõn0njn¥nßooToŽoÉpp>pxp²píq'qaq›qÖrrJr„r¾røs3sms§sáttUttÉuu=uwu±uêv%vav¡váw!waw wàx x_xŸxßyy^yžyÝzz\zœzÛ{{Z{™{Ø||W|–|Õ}}T}“}Ò~~P~~Î L‹Ê€ €H€‡€ÆC‚Áÿ‚>‚}‚»‚úƒ9ƒwƒ¶ƒô„3„q„¯„î…,…j…©…ç†%†c†¢†à‡‡\‡š‡ØˆˆTˆ’ˆÏ‰ ‰K‰‰‰ÆŠŠBŠнŠû‹8‹v‹³‹ðŒ.ŒkŒ©Œæ#`ÛŽŽUŽ’ŽÏ I†Ã±…±Ë²²Y² ²ç³.³u³¼´´J´‘´Øµµfµ­µô¶;¶ƒ¶Ê··X· ·ç¸.¸v¸¾¹ ¹]¹¯ººQº£ºô»F»—»é¼:¼Œ¼Ý½/½½Ò¾$¾v¾Ç¿¿k¿½ÀÀaÀ³ÁÁVÁ¨ÁúÂMŸÂñÃCÕÃçÄ9ÄŒÄÞÅ0ŃÅÕÆ'ÆzÆÌÇÇqÇÄÈÈiÈ»ÉÉaɳÊÊYʬÊþËQˤË÷ÌJÌÌðÍCÍ–ÍéÎ<ÎÎãÏ6ωÏÝÐ0ЃÐÖÑ*Ñ}ÑÑÒ$ÒxÒËÓÓrÓÆÔÔmÔÁÕÕhÕ¼ÖÖcÖ·× ×_׳ØØZØ®ÙÙVÙªÙþÚRÚ¦ÚúÛNÛ£Û÷ÜKÜŸÜóÝHÝœÝðÞEÞ™ÞíßBß–ßëà?à”àéá=á’áçâ;âyâ³âîã(ãbãœã×ääKä†äÀäûå5åoåªåäææYæ”æÎç çCç~ç¹çóè.èiè£èÞééSéŽéÉêê?êyê´êïë*ëeë ëÛììQìŒìÇíí=íxí´íïî*îeî îÜïïRïŽïÉðð@ð{ð·ðòñ.ñiñ¥ñàòòWò“òÏó óFó‚ó¾óùô5ôqô­ôéõ$õ`õœõØööPöŒöÈ÷÷@÷|÷¹÷õø1ømø©øåù"ù^ùšù×úúOúŒúÈûûAû~ûºû÷ü3üpü¬üéý&ýbýŸýÜþþUþ’þÏÿ ÿHÿ…ÿÂÿÿ=z¶ó0m©æ#`ÙSÍ GƒÀý:w´ñ.k¨å"^›ØRÌ F ƒ À þ ; x µ ò / l © æ # ` Û  U ’ Ï I‡Ä>{¹ö3p­ë(e¢àZ—ÕOÊD‚¿ü:w´ò/lªç%bŸÝX•ÒM‹ÈC€¾û9v´ñ/lªç%b ÞY˜Ü"g¬ò 7 | Á!!L!‘!×""a"§"ì#2#w#¼$$G$$Ò%%]%£%è&.&s&¹&þ'D'‰'Ï((Z( (å)+)q)¶)ü*B*‡*Í++X+ž+ä,*,o,µ,û-A-†-Ì..X..ã/)/o/´/ú0@0†0Ë11W1œ1â2(2n2³2ù3?3„3Ê44U4›4á5&5l5²5ø6=6ƒ6É77T7š7à8%8k8±8÷9=9‚9È::T:š:ß;%;k;±;÷<=<ƒ<È==T=š=à>&>l>²>ø?>?„?Ê@@V@œ@âA)AnA²AõB9B|BÀCCGC‹CÎDDVD™DÝE!EeE¨EìF0FtF¸FüG@G„GÈH HPH”HØII`I¤IèJ,JpJ´JøK=KKÅL LNL’LÖMM_M£MèN,NqNµNúO>OƒOÇP PPP•PÚQQcQ¨QìR1RvR»RÿSDS‰SÎTTXTTâU'UlU±UöV;V€VÅW WOW”WÙXXdX©XîY3YxY¾ZZHZZÒ[[\[¡[æ\+\p\´\ù]>]ƒ]È^ ^Q^–^Û__d_¨_í`2`v`»`ÿaDaˆaÌbbUbšbÞc"cfcªcëd,dmd®dïe0eqe²eóf4fuf¶f÷g8gxg¹gúh;h|h¼hýi>ii¿jjAjjÂkkCk„kÄllEl…lÆmmFm‡mÇnnGnˆnÈooHoˆoÈppHpˆpÈqqGq‡qÇrrFr†rÆssEs…sÄttCt‚tÂuuAu€u¿uþv>v}v¼vûw:wyw¸w÷x6xux´xóy2yqy°yïz-zlz«zê{({g{¦{ä|#|a| |Þ}}[}š}Ø~~U~“~ÒNŒË€ €G€…€Ä@~¼ú‚8‚v‚´‚òƒ0ƒpƒ²ƒô„6„x„º„ü…>…€…††F†ˆ†É‡ ‡M‡Ž‡ÐˆˆSˆ”ˆÖ‰‰Y‰š‰ÛŠŠ]ŠŸŠà‹!‹b‹£‹äŒ%ŒeŒ¦Œç(h©êŽ*ŽkŽ«Žì,l­í-m®î‘.‘n‘®‘î’.’m’­’í“-“l“¬“ë”+”j”ª”é•)•h•§•æ–%–d–¤–â—!—`—Ÿ—Þ˜˜[˜š˜Ù™™V™”™ÓššPšŽšÌ› ›I›‡›ÅœœAœœ½œû8v´òž/žmž«žèŸ&ŸcŸ¡ŸÞ  Y – Ô¡¡N¡‹¡É¢¢C¢€¢½¢ú£:£|£¾¤¤B¤„¤Æ¥¥I¥‹¥Í¦¦P¦‘¦Ó§§V§˜§Ù¨¨\¨¨Þ© ©a©¢©ãª$ªfª§ªè«)«j«««ì¬,¬m¬®¬ï­0­p­±­ò®3®t®µ®ö¯7¯x¯¹¯ú°;°}°¾°ÿ±@±‚±Ã²²F²‡²É³ ³L³³Ï´´R´”´ÖµµYµ›µÝ¶¶a¶£¶å·'·i·«·í¸/¸q¸´¸ö¹8¹z¹½¹ÿºBº„ºÇ» »L»»Ñ¼¼W¼™¼Ü½½b½¥½è¾+¾n¾±¾ô¿7¿z¿½ÀÀDÀ‡ÀÊÁÁQÁ•ÁØÂÂ_Â£ÂæÃ*ÃnòÃõÄ4ÄqÄ®ÄêÅ'ÅdÅ¡ÅÞÆÆXÆ•ÆÒÇÇMÇŠÇÇÈÈBÈȼÈúÉ7ÉtɲÉïÊ-ÊkÊ¨ÊæË#ËaËŸËÝÌÌXÌ–ÌÔÍÍPÍŽÍÌÎ ÎHΆÎÄÏÏ@Ï~ϼÏúÐ8ÐvеÐóÑ1ÑoÑ®ÑìÒ*ÒiÒ§ÒåÓ$ÓbÓ¡ÓßÔÔ\Ô›ÔÙÕÕVÕ•ÕÔÖÖQÖÖÎ× ×L׊×ÉØØG؆ØÄÙÙBÙÙÀÙÿÚ=Ú|Ú»ÚúÛ9ÛxÛ·ÛöÜ5ÜtܳÜòÝ1ÝpݯÝïÞ.ÞmÞ¬Þëß*ßiß©ßèà'àfà¦àåá$ádá£áãâ"âaâ¡âàããYã’ãËää<äuä­äæååXå‘åÉææ;ætæ­ææççXç‘çÊèè<èuè®èçé éYé’éËêê>êwê°êéë#ë\ë•ëÎììAìzì´ìíí'í`í™íÓî îFîî¹îòï,ïeïŸïÙððLð†ð¿ðùñ3ñlñ¦ñàòòSòòÇóó;óuó®óèô"ô\ô–ôÐõ õDõ~õ¸õòö,ögö¡öÛ÷÷O÷‰÷Ä÷þø8ørø­øçù!ù\ù–ùÐú úEúúºúôû/ûiû¤ûÞüüTüŽüÉýý>ýyý³ýîþ)þcþžþÙÿÿNÿ‰ÿÄÿÿ:t¯é#]—Ò F»õ/j¤ßSŽÈ=x²ì'aœ×L†Áû6q«æ ! [ – Ñ F ¼ ö 1 l § â  W ’ Í  C ~ ¹ ô.i¤ßUËB}¸ó.i¤ßV‘ÌC~¹ô0k¦áX“Ï E¼ø3nªå!\˜ÓJ†Áý8t°ë'bžÚQÈ@Ç[¥ï8‚Ì  ` ª ô!>!ˆ!Ò""f"°"û#E##Ù$#$m$¸%%L%–%á&+&u&À' 'U'Ÿ'é(4(~(É))^)¨)ó*=*ˆ*Ò++h+²+ý,G,’,Ý-'-r-½..R..è/3/~/È00^0©0ô1?1Š1Õ2 2k2¶33L3—3â4-4y4Ä55Z5¥5ñ6<6‡6Ò77h7³7þ8I8”8ß9*9u9¿: :U:Ÿ:ê;5;;Ê<<_<©<ô=>=‰=Ó>>h>²>ü?G?‘?Û@%@o@¹AAMA—AáB+BuB¿C CSCCçD2D|DÆEEZE¤EîF9FƒFÍGGbG¬GöH@H‹HÕIIjI´IÿJIJ“JÞK(KsK½LLRLLçM2M}MÇNN]N§NòO=O‡OÒPPhP³PýQHQ“QÞR)RtR¿S SUS SëT6TTÌUUcU®UùVDVVÛW&WrW½XXTXŸXëY6Y‚YÍZZdZ¯Zû[F[‘[Ü\'\r\¼]]R]œ]æ^1^{^Å__Y_£_í`7``Êaa]a§aðb9b‚bËcc]c¦cïd8d€dÉeeZe¢eêf3f{fÃg gSg›gåh3h‚hÐiimi»j jWj¥jókAkŽkÜl*lwlÅmm`m®mûnHn–não1o~oËppfp³qqMqšqçr4rrÎsshsµttOt›tèu5u‚uÎvvgv´wwMw™wåx2x~xÊyycy¯yûzGz“zß{+{w{Ã||[|§|ò}>}Š}Ö~!~m~¸P›æ€2€}€É_ªö‚A‚Œ‚׃"ƒmƒ¹„„O„š„å…0…{…Ɔ†\†§†ò‡=‡ˆ‡Óˆˆhˆ³ˆþ‰H‰“‰ÝŠ(Šrн‹‹Q‹œ‹æŒ0ŒzŒÅY£÷ŽT޲lÉ'„á‘>‘›‘ø’U’±““k“Ç”$”€”Ý•9•••ò–N–ª——b—¾˜˜u˜Ñ™-™ˆ™äš@š›šö›R›­œœdœ¿uО*ž…žßŸ:Ÿ”Ÿî H ¡ û¡T¡®¢¢`¢¹££j£Ã¤¤t¤Ì¥$¥|¥Ó¦+¦ƒ¦Ú§1§‰§à¨6¨¨ä©:©‘©çª=ª“ªé«?«•«ë¬@¬–¬ì­A­—­í®C®˜®î¯D¯š¯ð°F°œ°ò±H±ž±ô²J² ²ö³L³¢³ø´N´¤´ûµQµ§µý¶S¶ª··V·­¸¸Y¸°¹¹]¹³º º[º©º÷»E»“»á¼/¼~¼Ì½½h½¶¾¾S¾¡¾ï¿>¿Œ¿ÛÀ)ÀxÀÆÁÁdÁ³ÂÂQ ÂïÃ>ÃÃÝÄ,Ä{ÄËÅÅjÅºÆ ÆZÆ©ÆùÇIÇšÇêÈ:ÈŠÈÛÉ+É{ÉÌÊÊmʾËË`˱ÌÌSÌ¥Ì÷ÍHÍšÍìÎ>ΑÎãÏ6ψÏÛÐ.ÐÐÔÑ'Ñ{ÑÎÒ"ÒvÒÊÓÓrÓÇÔÔpÔÄÕÕnÕÄÖÖoÖÄ××pׯØØrØÉÙ ÙvÙÍÚ$Ú|ÚÓÛ+Û‚ÛÚÜ2ÜŠÜãÝ;Ý”ÝíÞFÞŸÞøßRß«àà_à¹áánáÈâ#â~âÙã5ãˆã¿ãßãÿää?ä_ääŸä¿äßäÿåå@å`å€å åÀåáææ!æBæbæ‚æ£æÃæäçç%çEçfç†ç§çÈçèè è)èJèkèŒè¬èÍèîéé0éQéqé’é³éÔéõêê7êXêzê›ê¼êÝêþëëAëbëƒë¤ëÆëçì ì*ìKìmìŽì°ìÑìóíí6íXíyí›í½íÞîî"îDîeî‡î©îËîíïï1ïSïuï—ï¹ïÛïýððAðdð†ð¨ðÊðíññ1ñTñvñ˜ñ»ñÝòò"òEògòŠò¬òÏòòóó7óZó}óŸóÂóåôô+ôIôcô}ô“ôªôÁô×ôîõõõ2õIõ`õwõŽõ¤õ»õÒõéööö.öDö[örö‰ö ö·öÎöåöü÷÷*÷A÷X÷o÷†÷÷´÷Ë÷â÷ùøø(ø?øVømø„ø›ø³øÊøáøøùù'ù>ùUùmù„ù›ù³ùÊùáùùúú'ú?úVúmú…úœú´úËúãúúûû)ûAûXûpû‡ûŸû¶ûÎûæûýüü,üDü\üsü‹ü£üºüÒüêýýý1ýIýaýxýý¨ýÀýØýïþþþ7þOþgþþ—þ¯þÇþßþ÷ÿÿ&ÿ>ÿWÿoÿ‡ÿŸÿ·ÿÏÿçÿÿmft2@ÁB‚ÂCƒÃD„ÅE†ÆG‡ÇHˆÈ I‰Ê J‹Ë L Œ Ì M Í  N Ž Ï  O Ð  Q ‘ ÑR’ÒS“ÔT•ÕV–ÖW—×X˜ÙYšÚ[›Û\œÜ]Þ^Ÿß_ à a¡á"b¢ã#c¤ä$d¥å%f¦æ'g§è ( h © é!)!i!ª!ê"*"k"«"ë#,#l#¬#í$-$m$®$î%.%n%¯%ï&/&p&°&ð'1'q'±'ò(2(r(³(ó)3)s)´)ô*4*u*µ*õ+6+v+¶+÷,7,w,¸,ø-8-x-¹-ù.9.z.º.ú/;/{/»/ü0<0|0¼0ý1=1}1¾1þ2>22¿2ÿ3@3€3À44A44Á55B5‚5Ã66C6„6Ä77E7…7Å88F8†8Æ99G9‡9È::H:‰:É; ;J;Š;Ê< >M>Ž>Î??O??Ï@@P@@ÐAAQA‘AÒBBRB“BÓCCTC”CÔDDUD•DÕEEVE–E×FFWF˜FØGGYG™GÙHHZHšHÚII[I›IÜJJ\JJÝKK^KžKÞLL_LŸLßM M`M MáN!NaN¢NâO"OcO£OãP#PdP¤PäQ%QeQ¥QæR&RfR§RçS'ShS¨SèT(TiT©TéU*UjUªUëV+VkV¬VìW,WmW­WíX-XnX®XîY/YoY¯YðZ0ZpZ±Zñ[1[r[²[ò\2\s\³\ó]4]t]´]õ^5^u^¶^ö_6_v_·_÷`7`x`¸`øa9aya¹aúb:bzb»bûc;c{c¼cüde~e¾eÿf?ffÀgg@g€gÁhhAh‚hÂiiCiƒiÃjjDj„jÅkkEk…kÆllFl‡lÇmmHmˆmÈn nIn‰nÊo oJoŠoËp pKpŒpÌq qMqqÍrrNrŽrÏssOssÐttPt‘tÑuuRu’uÒvvSv“vÓwwTw”wÕxxUx–xÖyyWy—y×zzXz˜zØ{{Y{™{Ú||Z|›|Û}}\}œ}Ü~~]~~Ý^ž߀€_€ €à a¡á‚"‚b‚¢‚âƒ#ƒcƒ£ƒä„$„d„¥„å…%…f…¦…æ†'†g†§†ç‡(‡h‡¨‡éˆ)ˆiˆªˆê‰*‰k‰«‰ëŠ,ŠlЬŠì‹-‹m‹­‹îŒ.ŒnŒ¯Œï/p°ðŽ0ŽqޱŽñ2r²ó3s´ô‘4‘u‘µ‘õ’5’v’¶’ö“7“w“·“ø”8”x”¹”ù•9•z•º•ú–:–{–»–û—<—|—¼—ý˜=˜}˜¾˜þ™>™™¿™ÿš?š€šÀ››A››ÁœœBœ‚œÃC„ÄžžDž…žÅŸŸFŸ†ŸÆ  G ‡ È¡¡H¡‰¡É¢ ¢I¢Š¢Ê£ £K£‹£Ë¤ ¤L¤Œ¤Í¥ ¥M¥¥Î¦¦N¦¦Ï§§P§§Ð¨¨Q¨‘¨Ò©©R©’©ÓªªSª”ªÔ««U«•«Õ¬¬V¬–¬×­­W­—­Ø®®X®™®Ù¯¯Z¯š¯Ú°°[°›°Ü±±\±œ±Ý²²]²ž²Þ³³_³Ÿ³ß´ ´`´ ´áµ!µaµ¡µâ¶"¶b¶£¶ã·#·d·¤·ä¸%¸e¸¥¸æ¹&¹f¹¦¹çº'ºgº¨ºè»(»i»©»é¼*¼j¼ª¼ê½+½k½«½ì¾,¾l¾­¾í¿-¿n¿®¿îÀ/ÀoÀ¯ÀïÁ0ÁpÁ°ÁñÂ1Âq²ÂòÃ2ÃsóÃóÄ4ÄtÄ´ÄôÅ5ÅuŵÅöÆ6ÆvÆ·Æ÷Ç7ÇxÇ¸ÇøÈ9ÈyȹÈùÉ:ÉzɺÉûÊ;Ê{ʼÊüË<Ë}˽ËýÌ>Ì~̾ÌþÍ?ÍÍ¿ÎÎ@΀ÎÁÏÏAÏ‚ÏÂÐÐCЃÐÃÑÑDÑ„ÑÄÒÒEÒ…ÒÆÓÓFÓ‡ÓÇÔÔGÔˆÔÈÕÕIÕ‰ÕÉÖ ÖJÖŠÖË× ×K׌×ÌØ ØLØØÍÙ ÙNÙŽÙÎÚÚOÚÚÐÛÛPÛ‘ÛÑÜÜQÜ’ÜÒÝÝSÝ“ÝÓÞÞTÞ”ÞÕßßUß–ßÖààVà—à×ááXá˜áØââYâ™âÚããZã›ãÛää[äœäÜåå]ååÝææ^æžæßçç_ç çàè è`è¡èáé!ébé¢éâê#êcê£êäë$ëdë¤ëåì%ìeì¦ìæí&ígí§íçî(îhî¨îéï)ïiï©ïêð*ðjð«ðëñ+ñlñ¬ñìò-òmò­òîó.ónó®óïô/ôoô°ôðõ0õqõ±õñö2örö²öó÷3÷s÷³÷ôø4øtøµøõù5ùvù¶ùöú7úwú·úøû8ûxû¸ûùü9üyüºüúý:ý{ý»ýûþ<þ|þ¼þýÿ=ÿ}ÿ½ÿþÿÿÿÿÿÿÿÿ?¿ÿ?¿@€À@€À@€À@€ÀAÁAÁAÁ  A Á  B ‚   B ‚   B ‚   B ‚ ÂCƒÃCƒÃCƒÃCƒÃD„ÄD„ÄD„ÄD„ÄE…ÅE…ÅE…ÅE…ÅF†ÆF†ÆF†ÆF†ÆG‡ÇG‡Ç  G ‡ Ç!!G!‡!Ç""H"ˆ"È##H#ˆ#È$$H$ˆ$È%%H%ˆ%È& &I&‰&É' 'I'‰'É( (I(‰(É) )I)‰)É* *J*Š*Ê+ +J+Š+Ê, ,J,Š,Ê- -J-Š-Ê. .K.‹.Ë/ /K/‹/Ë0 0K0‹0Ë1 1K1‹1Ë2 2L2Œ2Ì3 3L3Œ3Ì4 4L4Œ4Ì5 5L5Œ5Ì6 6M66Í7 7M77Í8 8M88Í9 9M99Í::N:Ž:Î;;N;Ž;Î<>O>>Ï??O??Ï@@O@@ÏAAOAAÏBBPBBÐCCPCCÐDDPDDÐEEPEEÐFFQF‘FÑGGQG‘GÑHHQH‘HÑIIQI‘IÑJJRJ’JÒKKRK’KÒLLRL’LÒMMRM’MÒNNSN“NÓOOSO“OÓPPSP“PÓQQSQ“QÓRRTR”RÔSSTS”SÔTTTT”TÔUUTU”UÔVVUV•VÕWWUW•WÕXXUX•XÕYYUY•YÕZZVZ–ZÖ[[V[–[Ö\\V\–\Ö]]V]–]Ö^^W^—^×__W_—_×``W`—`×aaWa—a×bbXb˜bØccXc˜cØddXd˜dØeeXe˜eØffYf™fÙggYg™gÙhhYh™hÙiiYi™iÙjjZjšjÚkkZkškÚllZlšlÚmmZmšmÚnn[n›nÛoo[o›oÛpp[p›pÛqq[q›qÛrr\rœrÜss\sœsÜtt\tœtÜuu\uœuÜvv]vvÝww]wwÝxx]xxÝyy]yyÝzz^zžzÞ{{^{ž{Þ||^|ž|Þ}}^}ž}Þ~~_~Ÿ~ß_Ÿ߀€_€Ÿ€ß_Ÿß‚ ‚`‚ ‚àƒ ƒ`ƒ ƒà„ „`„ „à… …`… …à†!†a†¡†á‡!‡a‡¡‡áˆ!ˆaˆ¡ˆá‰!‰a‰¡‰áŠ"ŠbŠ¢Šâ‹"‹b‹¢‹âŒ"ŒbŒ¢Œâ"b¢âŽ#ŽcŽ£Žã#c£ã#c£ã‘#‘c‘£‘ã’$’d’¤’ä“$“d“¤“ä”$”d”¤”ä•$•d•¤•ä–%–e–¥–å—%—e—¥—å˜%˜e˜¥˜å™%™e™¥™åš&šfš¦šæ›&›f›¦›æœ&œfœ¦œæ&f¦æž'žgž§žçŸ'ŸgŸ§Ÿç ' g § ç¡'¡g¡§¡ç¢(¢h¢¨¢è£(£h£¨£è¤(¤h¤¨¤è¥(¥h¥¨¥è¦)¦i¦©¦é§)§i§©§é¨)¨i¨©¨é©)©i©©©éª*ªjªªªê«*«j«ª«ê¬*¬j¬ª¬ê­*­j­ª­ê®+®k®«®ë¯+¯k¯«¯ë°+°k°«°ë±+±k±«±ë²,²l²¬²ì³,³l³¬³ì´,´l´¬´ìµ,µlµ¬µì¶-¶m¶­¶í·-·m·­·í¸-¸m¸­¸í¹-¹m¹­¹íº.ºnº®ºî».»n»®»î¼.¼n¼®¼î½.½n½®½î¾/¾o¾¯¾ï¿/¿o¿¯¿ïÀ/ÀoÀ¯ÀïÁ/ÁoÁ¯ÁïÂ0Âp°ÂðÃ0ÃpðÃðÄ0ÄpİÄðÅ0ÅpŰÅðÆ1ÆqƱÆñÇ1ÇqDZÇñÈ1ÈqȱÈñÉ1ÉqɱÉñÊ2ÊrʲÊòË2Ër˲ËòÌ2Ìr̲ÌòÍ2ÍrͲÍòÎ3ÎsγÎóÏ3ÏsϳÏóÐ3ÐsгÐóÑ3ÑsѳÑóÒ4ÒtÒ´ÒôÓ4ÓtÓ´ÓôÔ4ÔtÔ´ÔôÕ4ÕtÕ´ÕôÖ5ÖuÖµÖõ×5×u×µ×õØ5ØuصØõÙ5ÙuÙµÙõÚ6ÚvÚ¶ÚöÛ6ÛvÛ¶ÛöÜ6ÜvܶÜöÝ6ÝvݶÝöÞ7ÞwÞ·Þ÷ß7ßwß·ß÷à7àwà·à÷á7áwá·á÷â8âxâ¸âøã8ãxã¸ãøä8äxä¸äøå8åxå¸åøæ9æyæ¹æùç9çyç¹çùè9èyè¹èùé9éyé¹éùê:êzêºêúë:ëzëºëúì:ìzìºìúí:ízíºíúî;î{î»îûï;ï{ï»ïûð;ð{ð»ðûñ;ñ{ñ»ñûò<ò|ò¼òüó<ó|ó¼óüô<ô|ô¼ôüõ<õ|õ¼õüö=ö}ö½öý÷=÷}÷½÷ýø=ø}ø½øýù=ù}ù½ùýú>ú~ú¾úþû>û~û¾ûþü>ü~ü¾üþý>ý~ý¾ýþþ?þþ¿þÿÿ?ÿÿ¿ÿÿ?¿ÿ?¿@€À@€À@€À@€ÀAÁAÁAÁ  A Á  B ‚   B ‚   B ‚   B ‚ ÂCƒÃCƒÃCƒÃCƒÃD„ÄD„ÄD„ÄD„ÄE…ÅE…ÅE…ÅE…ÅF†ÆF†ÆF†ÆF†ÆG‡ÇG‡Ç  G ‡ Ç!!G!‡!Ç""H"ˆ"È##H#ˆ#È$$H$ˆ$È%%H%ˆ%È& &I&‰&É' 'I'‰'É( (I(‰(É) )I)‰)É* *J*Š*Ê+ +J+Š+Ê, ,J,Š,Ê- -J-Š-Ê. .K.‹.Ë/ /K/‹/Ë0 0K0‹0Ë1 1K1‹1Ë2 2L2Œ2Ì3 3L3Œ3Ì4 4L4Œ4Ì5 5L5Œ5Ì6 6M66Í7 7M77Í8 8M88Í9 9M99Í::N:Ž:Î;;N;Ž;Î<>O>>Ï??O??Ï@@O@@ÏAAOAAÏBBPBBÐCCPCCÐDDPDDÐEEPEEÐFFQF‘FÑGGQG‘GÑHHQH‘HÑIIQI‘IÑJJRJ’JÒKKRK’KÒLLRL’LÒMMRM’MÒNNSN“NÓOOSO“OÓPPSP“PÓQQSQ“QÓRRTR”RÔSSTS”SÔTTTT”TÔUUTU”UÔVVUV•VÕWWUW•WÕXXUX•XÕYYUY•YÕZZVZ–ZÖ[[V[–[Ö\\V\–\Ö]]V]–]Ö^^W^—^×__W_—_×``W`—`×aaWa—a×bbXb˜bØccXc˜cØddXd˜dØeeXe˜eØffYf™fÙggYg™gÙhhYh™hÙiiYi™iÙjjZjšjÚkkZkškÚllZlšlÚmmZmšmÚnn[n›nÛoo[o›oÛpp[p›pÛqq[q›qÛrr\rœrÜss\sœsÜtt\tœtÜuu\uœuÜvv]vvÝww]wwÝxx]xxÝyy]yyÝzz^zžzÞ{{^{ž{Þ||^|ž|Þ}}^}ž}Þ~~_~Ÿ~ß_Ÿ߀€_€Ÿ€ß_Ÿß‚ ‚`‚ ‚àƒ ƒ`ƒ ƒà„ „`„ „à… …`… …à†!†a†¡†á‡!‡a‡¡‡áˆ!ˆaˆ¡ˆá‰!‰a‰¡‰áŠ"ŠbŠ¢Šâ‹"‹b‹¢‹âŒ"ŒbŒ¢Œâ"b¢âŽ#ŽcŽ£Žã#c£ã#c£ã‘#‘c‘£‘ã’$’d’¤’ä“$“d“¤“ä”$”d”¤”ä•$•d•¤•ä–%–e–¥–å—%—e—¥—å˜%˜e˜¥˜å™%™e™¥™åš&šfš¦šæ›&›f›¦›æœ&œfœ¦œæ&f¦æž'žgž§žçŸ'ŸgŸ§Ÿç ' g § ç¡'¡g¡§¡ç¢(¢h¢¨¢è£(£h£¨£è¤(¤h¤¨¤è¥(¥h¥¨¥è¦)¦i¦©¦é§)§i§©§é¨)¨i¨©¨é©)©i©©©éª*ªjªªªê«*«j«ª«ê¬*¬j¬ª¬ê­*­j­ª­ê®+®k®«®ë¯+¯k¯«¯ë°+°k°«°ë±+±k±«±ë²,²l²¬²ì³,³l³¬³ì´,´l´¬´ìµ,µlµ¬µì¶-¶m¶­¶í·-·m·­·í¸-¸m¸­¸í¹-¹m¹­¹íº.ºnº®ºî».»n»®»î¼.¼n¼®¼î½.½n½®½î¾/¾o¾¯¾ï¿/¿o¿¯¿ïÀ/ÀoÀ¯ÀïÁ/ÁoÁ¯ÁïÂ0Âp°ÂðÃ0ÃpðÃðÄ0ÄpİÄðÅ0ÅpŰÅðÆ1ÆqƱÆñÇ1ÇqDZÇñÈ1ÈqȱÈñÉ1ÉqɱÉñÊ2ÊrʲÊòË2Ër˲ËòÌ2Ìr̲ÌòÍ2ÍrͲÍòÎ3ÎsγÎóÏ3ÏsϳÏóÐ3ÐsгÐóÑ3ÑsѳÑóÒ4ÒtÒ´ÒôÓ4ÓtÓ´ÓôÔ4ÔtÔ´ÔôÕ4ÕtÕ´ÕôÖ5ÖuÖµÖõ×5×u×µ×õØ5ØuصØõÙ5ÙuÙµÙõÚ6ÚvÚ¶ÚöÛ6ÛvÛ¶ÛöÜ6ÜvܶÜöÝ6ÝvݶÝöÞ7ÞwÞ·Þ÷ß7ßwß·ß÷à7àwà·à÷á7áwá·á÷â8âxâ¸âøã8ãxã¸ãøä8äxä¸äøå8åxå¸åøæ9æyæ¹æùç9çyç¹çùè9èyè¹èùé9éyé¹éùê:êzêºêúë:ëzëºëúì:ìzìºìúí:ízíºíúî;î{î»îûï;ï{ï»ïûð;ð{ð»ðûñ;ñ{ñ»ñûò<ò|ò¼òüó<ó|ó¼óüô<ô|ô¼ôüõ<õ|õ¼õüö=ö}ö½öý÷=÷}÷½÷ýø=ø}ø½øýù=ù}ù½ùýú>ú~ú¾úþû>û~û¾ûþü>ü~ü¾üþý>ý~ý¾ýþþ?þþ¿þÿÿ?ÿÿ¿ÿÿÿÿ’F={ÿÿrP`ÿÿi„i„ÿÿ&›†›ÿÿ8ÿÿÖ’Õÿÿ@?ÿÿJ‘Ôÿÿj—¶ÿÿrL’LÿÿŸÿ}ÿÿÈQfÿÿ ôê`ÿÿþápÚà½üÌp5ÌÞùšoâ¼øup'ÿÿ›ÿ83ÿÿ€Zýÿÿl‘l‘ÿÿ`¥s ÿÿ”ýÿÿŸ‘žÿÿ@މÿÿIâßÿÿlÙ,ÿÿxsˆùÿÿ§[vîÿÿ×ôoÒÿÿ.>ýP`çÙü”uQÎFù*te»Ð÷ÿtp­ßøulÿÿŸÿ6æÿÿ„OZ¸ÿÿzNi}ÿÿbÞ}Oÿÿšÿÿœ”›ÿÿ@ŽXÿÿHqˆÿÿk€‹€ÿÿ€†­ÿÿ¿ÿoÿÿðÒz ñ“ü{—Эù5yŠ»xöãyiªoöUzw:ö:{ ÿÿ¡>7íÿÿž$Hrÿÿ€iâÿÿvðy'ÿÿ2Ç’Çÿÿ[Zÿÿ9ž:ÿÿE¹KÿÿkÙ‹Ùÿÿ˜ ÿÿÏc|jÿÿûŸ‚zÓØö"€¹¥ôd•¦ óJ€V–ròœ€{ˆÖò:€^ÿÿ¦þ5âÿÿŸÿIÿÿ©fÿÿ|t|tÿÿW_‰ÿÿ y yŸÿÿÿ-NšyÿÿAX‘3ÿÿlaŒaÿÿŸÿ~tÿÿñ‡¦Ù»÷"†I¸9òv…¶¡¤òÆ Žó/…É€<òK…Et§ò„Ìÿÿ¬º4#ÿÿª¥@ÿÿp`Žÿÿƒ}ßÿÿ`“¥ÿÿ5÷äŸÿÿÿÎ3Οÿÿÿ@–ÿÿmÿÿ¼Xˆé‡úwµúòB™ÜóIŒò…$ó ‹óuò0‹iªò»Šx]êòŠDÿÿ³ß/³ÿÿ°Æ@ÿÿ¤<^Ãÿÿ™ÛvTÿÿ€Çÿÿ`ŸÿÿÿZ±ÿÿ@¤TÿÿmÎÍÿÿñÑ›h³[ò—/Œò󥕼uAò”cNò¸“9W©ò’NfòBÑEeòOsÿÿ¸Õ,™ÿÿ·O@ÿÿ¹b Jÿÿ¥Csæÿÿ£äƒäÿÿ|¬Ÿÿÿÿ@³ÿÿ=›¹¼ÿÿ€§°­añ¦>r€í±¢æW êG |Gê…Ì<~ë”›533ì©™+í—1$ˆí•wÿÿ½Ò*7ÿÿ¿ÿ;#ÿÿ¿ÿNHNÿÿ»²h¿ÿÿ¸#€Ÿÿÿ¶ï–ïÿÿ·G«{ÿÿ™èÈ¡;µÎ.ú§)qMóš´º!éJí­«]À^é¥]ïææ ^6çaœã9èš éƒé—‰ }ñé•Sÿÿ¿ÿ*ÿÿÂ×:+ÿÿÉYDXÿÿ͹ZSÿÿ×inŒÿÿír s€Ø’þ:¡%4ÿ_¹(ùÿÿ¹Äy2÷çÉPüó¥¤â?Èì  [5ÝêCœÁ0ë™(,ì³–(áí‘“|&pí‘0ÿÿÃú(KÿÿÉF4êÿÿÐù@ÿÿÜ'LNÿÿö’ŠTŠ×ÿÿêmëÿÿ“ŸçÊÿÿ`‚´ÿÿƒÝ¸%öü’PÇô˜ífYö‘—•Xó÷µ•uNÂö˜“ZF=óÀ‘.?·ò£;´ò# ÿÿÈ8(9ÿÿÐ?0?ÿÿÚg9åÿÿñxk@áãÿÿX›ŸÿÿÿLƒvÿÿÇ–ˆ ÿÿk~1‚Eÿÿ€ ´ß"ô‡zÞ©GøT‹&ˆõûyt[÷kSgãøsŒ]÷qŠ©V ÷‰ PIö™ˆˆÿÿЂ (ƒÿÿÙ)¶ÿÿìÍ.Ïîìÿÿ>Ï»tÿÿ_^ûÿÿƒ€ÿÿE‚Z õÿÿfí õ¢ÿÿ€¢ÿ"évRÊ—÷;w²¨—õ¯€—‘ü÷‰ƒ(°õ‚×uM÷F‚‹kÿ÷{‚dö‡Kÿÿ×ÿºÿÿê"„÷_ÿÿ*.Îyÿÿ@Œ•ÿÿbÔÿÿ{”ÿÿ@*;þÿÿmáþÿÿ°ÿÿ·Þåê„÷Á^XÈÍ÷Èl¾¯üù4s®žûHw£¼ûx¼ƒ¹ù»xzzÖøúxFÿÿèìVþÿÿáÚ^ÿÿ/‘ªîÿÿB·aÿÿÙYÙ{ÿÿ)aF{ ,ÿÿYq ,¥ÿÿn西ÿÿ|ž¿ÿÿ¡T >ÿÿöWåû“VdÌFù>`Ÿhù eö©ýùôj0ûèlÆ“zýŸn•ÿÿý£ ÒãOÿÿ%¡¿0ÿÿ.~%ÿÿGŸTÿÿ\!ÿÿ@+ÿÿ]<+ÀÿÿnZÀcÿÿyfcÿÿˆA-ÿÿÇâ¤þ4ô¹6 äÉûCIRÓÓþ{T1ÂúéX<´èúå\t©œúS_ ï,ÿÿ¼ÌËÿÿ"‘œ*ÿÿ/kOMÿÿÄGÃÿÿ 2F3ÿÿOE3Ãÿÿ^Ãÿÿlù8ÿÿuø8ÿÿÜÜÿÿ¬RÿÿÕhþüöž-€édü§qºèÿÿ|/¹×ÿÿþV˜à±Xñ]•Óhô÷”Àu0ò¢’âb¾ó×’{Wœó ‘O'òJ#EFòR޼ÿÿ»0 ÿÿ¸î1’ÿÿº>iÿÿ­æa°ÿÿŸ~Àÿÿz÷Ÿ5ÿÿe½±eÿÿ; ÄÛÿÿÔ¹ÄQ¯âôî¢^r.ì<¢3W褠Gêaÿÿ·T©ëõM©ý½¾4`TwØ¥k:öX´¶?³ì«Á»èì¤ÊYkærŸ¾M*çjœlaèÌ™£ ðWè™—& ”ÁéK”½ÿÿ¿ÿÿÿ¿Ä/îÿÿÃÞ?“ÿÿÌ HÁÿÿÏe”ÿÿÕš†âÿÿøh…{ò—³õíÖĀwDú¥OQô$¤®@½ìCŸÓ7EêdœJ1Së—˜r-6íè•-*î´’}(î…*ÿÿÄ  –ÿÿÇK+ ÿÿÍÇ6„ÿÿ×$?›ÿÿæë ¤O¦÷×ÿÿsަòöäîø¤ >³IUÿÿ¢ƒ§Ýdžû]ˆóÙø ”zsø®”D`Íø’0W>ø°gPø+HèöqC‘óæ‹ÿÿÉ¢) £ÿÿÎ*áÿÿØ´-‚ÿÿñ«4Gó ÿÿOH²Qø~v\ÿÿž†ÿÿaZ‡T*ÿÿŸ×cýìü™`¿ôj·Ÿ*÷s…¸ˆtõE†$xyöÑ…Jm·÷z„´eL÷,ƒä^hö‚sÿÿÑÿÿÙïiÿÿôX‚ïAÿÿ4ļåÿÿ[†]>ÿÿ~Ô)ÿÿ>ðh (#ÿÿz4%Fÿÿó¢ÿÿ¸,éŒümdäźöÑne­gùtþ›Îüµxä`û™yd$ù¡x¨y9ùwòÿÿÝÈ ðÿÿô© žñýÿÿ$”Ê.ÿÿ@f†ãÿÿcæƒÿÿw§ÿÿ?)ŠÔÿÿp]Ôÿÿ€‰ÿÿ=n8ÿÿó…çNýòUðÎIúj_„¹í÷ácØ«6ù"hEžÙû×kb”ëýMlYÿÿñ© ´ùÿÿMÔ»ÿÿ/¡"ÿÿAâ[ÿÿR€ÿÿ"-7D ìÿÿY9M_ÿÿlÏ_ÿÿx=»ÿÿ~wÿÿ¸åšHäÿÿÿÿéêý EcÖëþ]OˆÆÆüÈTÀ¹qûX­»û¥[”ûÿÿ ¼áœÿÿ— 1µ ÿÿ0£€*ÿÿH0.ÿÿUÊÿÿBYŽNÿÿZz·ÿÿk!·×ÿÿt’×Ýÿÿ}<cÿÿ§1ÿÿÏXj:¾ÿÿþ‘óMÿÿ9óÜWüÒ?½ÐöþÛDïÆYÿ~Iâ¸ÿÿ¾Àlÿÿ$’ŠWÿÿ,ÿ@ÿÿ=ÿÿ%9FñÿÿKTñÊÿÿY˜Ê[ÿÿgè[¤ÿÿp¡¤ÿÿzÿÿ‘][ÿÿ³5ÚÿÿÓ£(%ÿÿômû$ý:(6énÿ•1Û7ÿM6¹ÿÿŸÿªÿÿ—Æ0èÿÿ€Oüÿÿebebÿÿ[ˆ olnÿÿŒÛÿÿ)“)ÿÿ@‘Yÿÿmddÿÿré‹„ÿÿŸÿ|ÿÿÇ3a´ÿÿôð`ÿÿòÿÿ^å&ý‘m%Ï›úÌlO¾*ùl{ÿÿ¢ôÿÿŸg-îÿÿ~&Tœÿÿod—ÿÿntjYÿÿ“Ìÿÿ :“ÿÿ>Âéÿÿr䉨ÿÿxB‹&ÿÿ¤Uv’ÿÿ$Øñ­]Àÿÿ*pýÊ]¼ì[ýTtŒÐ×ùÚpÖ¼ü÷èp×±%ø½qÏÿÿ¦fþÿÿ •.tÿÿ› =åÿÿ‚E^dÿÿnØt"ÿÿšÐÿÿˆ›Sÿÿ?Ÿ”éÿÿvtŒ·ÿÿ{…ˆ„ÿÿÁ*eÿÿ9rùBZÙùþZ{÷Óù©u×½÷˜u—­t÷övç EøwIÿÿ©ÆÉÿÿ¡h06ÿÿ¡ñ<”ÿÿmb8ÿÿ{ qÏÿÿ5k’&ÿÿÑý¡ÿÿ>›¢ÿÿ€âœšÿÿ|µ•¾ÿÿÐLtÁÿÿý‚‚Öù`|Ù¼éõÚ{R©gõ5|ך²ôÛ}_ô´|èÿÿ¯Äÿÿÿ§C.‘ÿÿ¡I>ÐÿÿŒaÚÿÿzw>ÿÿ\|“ÿÿ3'!‹ ÿÿ;€¬'ÿÿ‰%¤'ÿÿ‘¨¥ÿÿø¸œÞù,‚ò»~òŠ‚,¥€òGƒ’!òDƒ,ƒýò/‚¾xòoûÿÿ²ÀFÿÿ®“)îÿÿ§>¾ÿÿ£­Tÿÿ‚»wCÿÿ^Ò™ˆÿÿS;#ðâÿÿ<ǵÿÿÖ±,ÿÿ§¼©õ<ÿÿŠS¸sñ1‰\žvñµ‰ÆŠÕô‰4xVñpˆClÐñɇ—cò¦‡ÿÿµËsÿÿ²(¿ÿÿ®(=ÿÿ¢ŒWpÿÿ˜†rDÿÿTU¡«ÿÿu9>ž£ÿÿ;˼¡ÿÿ™j¸ˆÿÿþ€³g·ó &•Çö ’6z=ò9{jãó·z[¦óXDR¿ó ŽhKàòHŒ™ÿÿ¸êðÿÿ¶Ÿ'àÿÿ´×;·ÿÿºE#?ÿÿžTtàÿÿxË™õÿÿ|s¥äÿÿ2ÅÿÿËA½ ­ß8´Âzí œHcšì§œS칚AEËî³—Ø«ÿÿ·¾kiÿÿ°¸ŠÐÿÿ¹›œ3æ²°ª–1ûB^Í)ûí… q êɪöiçÁ¤~ÂI柀zƒæãœ”Åçä™< GNçÄ–± eéÚ“ßÿÿ¿ÿÿÿÁöfìÿÿÄŒ1ÿÿʉ?kÿÿÎû\fÿÿÙðbù¸÷=iÓ¦•î"¡-éÁ|¾¯Xìᯉmõô›[•ù[™ÂMQ÷~– Bºñ ”<«òt‘V8ªò Žè4®ñwŒ½ÿÿý½ÿÿÊE ÆæÿÿÏ«+)ÿÿØt7„ÿÿé¿>ðÑÿÿ>û¦Áðgx–ŽôÕ¨ÿÿ’‘¡¡ü$÷M•¢±põíê“Ô÷§ˆ@}³ô*‡³pÎø9†ûgpøq†]¸öe„ÿW5öƒºÿÿË`ÕÿÿÒœÿÿßKÿÿöþ%tà‹þŒ=·£Q÷ÞeJ®ÿÿîCÿÿN™ƒ *ÿÿ ^¢ÿÿ¿÷`oäAü›b‚ÀÍö nªƒúu™éýˆxÄŠÝû:x’BùwÏv£ù wƒÿÿ×A˜ÿÿåò Øÿÿÿÿ Áàÿÿÿ1a±ÿÿKmoöÿÿ«Xˆƒÿÿ/l^€&ÿÿq®*lÿÿ†û$Ñÿÿ™ 8•ÿÿõPç9üƒSÏ«ûå\[»l÷Ñ`Ŭrùef Žû§h–•‚ýjÿÿè<¿ÿÿÿÿèåÿÿ(ù¿ÿÿ5S{ÊÿÿMÑÿÿb ÿÿE("cÿÿmý+2ÿÿ€òÎÿÿ‹ÁØÿÿ¸’Cÿÿýíïý?¿Ù ýuIRËZþêP,¼œüaSޱQü¢W‹ÿÿû‘Ôìˆÿÿ.Ççÿÿ-š’Zÿÿ8CG`ÿÿíDýÿÿ º+r·ÿÿTž œÿÿj8œÿÿÿvüÀÿÿ~Hßÿÿ¦<”ÿÿËð*·ÿÿøyúFÿÁ1àâiþe9²Ôïþ­> ÊtÿÙC¤ð®ÿÿ'Ö#ÿÿó ÿÿ'Sq"ÿÿÆ+4ÿÿ@û€ÿÿDm+ŽÿÿTùìÿÿdìÿÿnGÿÿx¼ÿÿ‹½ÿÿ®‹ ÿÿÍÊîÿÿçEÿÿÿÿó—ÿÿ,çà ÿç0,Ûéÿÿ ] ]¶~ÿÿ>>{%ÿÿg#g%¿ÿÿ90ÿÿ&ÑÝÿÿ@LÒÿÿSvÒÿÿ]tÿÿjéÿÿrâÿÿ±ÿÿ¦ÿÿ´ ÿÿÎ#©ÿÿâ¨òÿÿõþþ­ÆÿÿŸÿ¤ÿÿ˜|"oÿÿ„º<ûÿÿ_Ç_Çÿÿ^¡0b0ÿÿÿÿ’ÿÿ@ßÿÿoÿÿ}ˆ¿ÿÿŸÿzøÿÿÇ„`ÿÿòðË`ÿÿ ÿÿSZñŒÿÿenÙëýîe’É5úêe|ÿÿ£ÿÿ¢ÄÿÿŽP8ãÿÿ`c«ÿÿfÍcnÿÿœÿÿb—ëÿÿDw•Úÿÿ|f‘ÿÿ}Íÿÿ ¢wÿÿÑá`©ÿÿìøäa?üƒÿÿmRÜmýâiëÉÿúi"º·ùBiÏÿÿ¥Òÿÿ 3>ÿÿ•@7_ÿÿh9d¤ÿÿl1hÁÿÿ¢`ÿÿ ÿÿCÒžQÿÿšBÿÿzC—·ÿÿ»ÛlZÿÿ„öZ_Ÿÿÿ'jÿÿ\.á¿ýMoYÌ ùÔmC¹™ø˜mü®5ø_oÿÿ¨ÿÿ£2¶ÿÿŸ1€ÿÿ~ÓXæÿÿpWn=ÿÿ0ò“Gÿÿ µ >ÿÿ?ÊŸÿÿÿï bÿÿŠ< †ÿÿÄx`ÿÿ1üý[­êAýu²Í>øÒrA¹jø4r‚«€øÉsÏž8øLtdÿÿªZÿÿ§-ÿÿ À1ïÿÿ€àZjÿÿssþÿÿc1Œÿÿª¿ÿÿ<Ù«Ÿÿÿ‡™¦ ÿÿ j¡­ÿÿÜœ‚\ù?þp}Ï%ù]w͹4÷ýwÙ§>÷ªyA™÷øVyöŒ=ö™y«ÿÿ¬Äÿÿ« Cÿÿ¡Å3ïÿÿ£ÿ>êÿÿ~hsÐÿÿ^Fºÿÿ;°àŒÿÿ8ø±Íÿÿ‚*­ÿÿ¬Ž§DÿÿþiŠöÓ‚ö:€J·ôJ~Á£/ò¡è‘dòh€ ƒ(ñƵxSó8ÿÿ¯‰ÿÿ²õdÿÿ©41Gÿÿ HDWÿÿ‰JsËÿÿ‡-„àÿÿ_ÍŸÿÿ3 ¸Ìÿÿ’ ±Õÿÿë!®Ø{õýвOñ©†Œ™»ó †Ú‡Ñòî†(wñW…gkãòE…`ÂóD„Úÿÿ³Iÿÿ·u%ÿÿ³|+/ÿÿ±R;zÿÿ ¬m%ÿÿœ@/ÿÿn ¢#ÿÿÁ å²­W®ã±oî´­“«òΛ{‰ó–‘˜h ôb‘Z^óß_Q0ó ŽõFÔó&m<¸òXŒ|ÿÿ¸Zÿÿ½îÿÿ½©&Rÿÿ½>Õÿÿ´¨eÀÿÿ²Ï|3ö@´‹qÞ ±g•Õ>—›Ah½è ÏÊëØ¿M iL뇫’g(〢(•äßž ;æ0šµî%æ—Ì ¬çI•_P]êì‘Üÿÿ¿ÿÿÁ®Þ:ÿÿĈ'æÿÿǧ;‘ÿÿÏÉKüú}×L9ÂòõñÉ.v¶Dåã„ÝÙr?¹²pùB¬l€âñ8—j‚ú‡u]úŽT„ù|`MÜø#ŒF·õWŠ^@7ó‡žÿÿÄ‚ËÿÿÉ× ÛÿÿÒ DÿÿØ–-5þ!ëòªàÝük$ô­Xó\FHdûÇ•nÿÿrGŸú õ•$Ç"ô#xþ§6ûLyÑ“:û|ƒËø{5y,÷ïzÍocøIzug¾ø yÔÿÿΑMÿÿØ®Iÿÿâ2oøþô.RÙ)þe)LŸ˜úgJoE­ÿÿxmìÿÿN™q-ÿÿŠYpeÿÿ¼µeúú8þTSÖ…þZô¾öö·_H®Nøàd·¡…ûoh8–0ý¯j‚ŒtþkkÿÿÛyôÿÿì§lýý“ `ßþÿÿ· PªÌÿÿ2wvƒÿÿ(9¬ÿÿíZÌÿÿJ‚FËÒÿÿ…U+9ÿÿ¡!¯ÿÿÎ#ýþ69éÞ·úôBêÑáÿÞKdÂüãO7¶éýT «5üíWCÿÿî¤ §ÿÿÿÿsá[ÿÿ¼ ª´!ÿÿ+!}HÿÿÓ,ÎÿÿPöÿÿ<Î(bŒÿÿcáüÿÿ;]ÿÿò®ÿÿ«-ÿÿ×Á)¼ÿÿÿOñpÿÿ2MÜgþ©7:ÑCÿÇ<ðýÆ~ÿÿ@üýåÿÿOã·ÿÿ Ü ©ÂRÿÿ# ê„£ÿÿ-gA¿ÿÿ60ÿÿæ#¿íÿÿNÔéÿÿf¥é¨ÿÿyñBÿÿ‚àÆÿÿšÜZÿÿ¶7=ÿÿÕ¶ìÿÿð}ÿÿÿ~"ï>ÿÿ)‘Þ›ÿÿ-®å¼ÿÿYÈËÿÿ‰ œ—ÿÿ""_‹ÿÿÐ#Íÿÿ/GPÿÿBß·ÿÿOK?ÿÿ[Ôÿÿm¢ÿÿz+ÿÿ¡ÿÿ¥ÿÿ·ÿÿÑ»+ÿÿä©ÿÿøÓþ%ÿå·Ñ>ÿÿ  ¥9ÿÿ9¡kEÿÿ? >Âÿÿ/ÿÿ$Z :ÿÿ@ÊÿÿMÈÿÿX™ÿÿdÖÿÿn‚ÿÿxÑÿÿ‹ÿÿ§ ÿÿ¸]ÿÿÎgÿÿÝ‚ÿÿëÿÿ™.ÿÿ–¤ÿÿ¬-àÿÿUÓUÓÿÿ\6ê`éÿÿ‹Ùÿÿæåÿÿ?·”9ÿÿoæ‘›ÿÿ€‰æÿÿŸÿ|HÿÿÈ`ÿÿ ùÇ@ÿÿ ÿÿA?ÿÿÿÿTî&ÿÿW‘Ü)ÿÿXÿÿÿ›Ãÿÿ›á#ÿÿ‡Ö-’ÿÿN€_QÿÿlU ^*ÿÿ“ ÿÿ ì•ÌÿÿGH•5ÿÿ}ã’ÿÿ|ô‘ÿÿš1ƒÎÿÿîeWUÿÿ$‰þäAoÿÿ&¼ÿÿBVôÂÿÿ\ Þ/ÿÿ]βþ]ÿÿždÿÿŸvPÿÿ‘J'ÐÿÿPecžÿÿiÞe ÿÿ'µ‰ ÿÿ›ÿÿCŒ›?ÿÿ}¤˜ÿÿz—ÿÿ¡ýƒŒÿÿ)Aÿÿ?Nÿÿ$ÿÿH¨þÿÿa^âmÿÿa ÏHýa<Á¿úï`ŠÿÿŸÿÿÿ¡Kÿÿ–„%|ÿÿ`á`‹ÿÿk®iÊÿÿ'¦Œôÿÿ Fÿÿ;Ä ¨ÿÿ|³žuÿÿŠ ›ýÿÿ°ˆÍÿÿ'“ÿÿGÿÿÿÿcñénÿÿe¸ÒüädTÁÚùnc×µùe€ÿÿ¡Uÿÿ£®ÿÿ›È#ZÿÿIN‰ÿÿlµnˆÿÿoWmtïÿÿ£ÿÿdB¨Ÿ‡ÿÿ‚NŸFÿÿ™ñ¡ÿÿÃ6ŽÅÿÿ)—ÿÿN¨ñ¡ÿÿiÿÕü¿gêÂù#g}´føÇil¨¦øKj¼ÿÿ¤>ÿÿ¦òÿÿ ¸"Åÿÿ{æVÿÿtÝnDÿÿaÇ…èÿÿ3£?ÿÿ6CûÚÿÿ„b¦ÿÿ¥ü „ÿÿåÄ“ìó¾ÿÿnCÒ%úžmÀ¼¯øsmà¯ø…o Ç÷çpД£øºqùÿÿ¨Kÿÿ«5ÿÿ§v°ÿÿ¡Ÿ=ÿÿÆl÷ÿÿ„K|ÿÿM'œÿÿ+³rÿÿŒI¬uÿÿç5¦~ÛòÓ’yÂg÷ûtŸ­a÷+y÷Ûztöùz4€OõzuBôÓztÿÿ®ÿÿ°¦ÿÿ¯¯Aÿÿ¦ß?šÿÿŸÊ`ÙÿÿŽÆ{¶ÿÿä’”ÿÿº'Ïv˜¡É¨¼òË¢eˆˆö†Ÿ^…™òG†=s‰ñ ‡zfYòb‡[[ óS‡GRîóÀ†ªI>òÛ…¾ÿÿµ3ÿÿ¸Eÿÿ¼õCÿÿ¶@?¦ÿÿ¼« .D§ÿÿ·®gjïqµçmvС¬/æ%¨%ê»LHî_»î`®›í žã©œƒè ŒäÈš† åu—… Þç?•þèÝ’üœìÂŽ4ÿÿ¾ÿÿ¿ÿÿÂ厥ÿÿÅT4þÿÿÎÔ6 òâÕ·ãÆãp °»ààh®ÂâGƒ²®õ”¥hŒmôᘆpOøÚƒÜf±øk„”\Ñö`ƒyV õ삚PVõZáJWôÆ€OÿÿÄÐÿÿʧ;ÿÿÎõGÕÿÿØò¢ïUâHÔï¶®ºXøY+‡l¸öãzü‹Qàœ+÷¿ÿÿ‘xÎõ$ܬöùÑfTž2üílº’qÿ o!†ü o|Búšnœtèú0nnÿÿÐoÚÿÿ×Ù ÄÿÿæóïððdÏðúÞC¡ùS*Yý–]«üÓÔ|ÐýRwÉm`þ¹odßüeóÅ_k×Üþ“CªÉ¥ÿaM«º4üîQô®©üöV¤üÖYš˜üèZ¤ÿÿÞT ¦ÿÿíúsõ‡ü ðÖÿÿ S¦Šÿÿ!òpÿÿù,6ÿÿ^ÿÿC?D6ÿÿ,wÿÿ¦"*}ÿÿÆV$yÆÿÿÿÿì¨ÿÿ3)ÙÁÿl6¢Î2ÿÿ;åÃ\ÿÿ?=¹gÿÿDÿÿòK ´øøÿÿ#×eÿÿ … ®!ÿÿ» 8rÿÿ¿%•}ÿÿDnÿÿ0X(Rnÿÿ\¥#3ÿÿ~ðÿÿ‘ºŠÿÿ§ÿÿÙh ¥ÿÿðÿÿÿÿRîÂÿÿ&Ý|ÿÿ*‰Ôvÿÿ/‹÷¡ÿÿ •Û#ÿÿ ¥ Zµóÿÿ b Êyãÿÿ"?>\ÿÿ)¢ÿÿ^ÿÿ@™ÓÿÿZ¥Óÿÿwÿÿ…sÿÿ™qÿÿ¸¸ÿÿÒ*;ÿÿã ¸ÿÿõÜ1ÿÿÿÿàóÿÿ¼ßÿÿÿ ; ;½Èÿÿ j Ù‡õÿÿ€OáÿÿH  Úÿÿ\!gÿÿ8=ÿÿG;ÿÿY-ÿÿnªÿÿxÿÿŠzÿÿ¥ÏÿÿµÿÿÌÿÿÚªÍÿÿçÔgÿÿõÄÞÿÿ ‚ ‚—vÿÿ¶^¥ÿÿn$ÿÿ ð ðÿÿ¿kÿÿ9MÿÿI0ÿÿV]ÿÿd'ÿÿpÐÿÿ€ÿÿîÿÿ£¡ÿÿ²îÿÿÅÿÿÒãÿÿßÿÿ‹yÿÿ‰Yÿÿœ&ÿÿP©P©ÿÿL]`ÿÿ„ÿÿ Œÿÿ;–—ÿÿU>œ®ÿÿ|XˆÊÿÿŸÿyˆÿÿ¿”`ÿÿÌ÷Ë<ãÿÿ±ú®3±ÿÿrÿÿ4ÿÿÿÿ?ƒô8ÿÿB§ÿÿŽÿÿŒŠÿÿ‰š `ÿÿMôW0ÿÿ^K[ØÿÿˆØÿÿ ^·ÿÿD¿‘?ÿÿyŒ;ÿÿ~WŒŽÿÿžŽZÿÿ¼eœÿÿô¼3’ÿÿnÿˆ4‰ÿÿÑÿÿ@Iû¢ÿÿCÇè}ÿÿHõÿÿ×ÿÿŽÛÿÿ› ~ÿÿOðYðÿÿ`·]wÿÿŽ$ÿÿÃ’ÿÿCc’ŒÿÿzÁJÿÿ|-‘vÿÿà‚ÏÿÿÈ—eíÿÿ–ø§6òÿÿFÿÿ9 ÿÿÿÿE@íùÿÿKÜRÿÿLâÿÿ”Yÿÿ‘æÿÿ1pÿÿOÛ_ÿÿaÛ_Gÿÿâ…Õÿÿ–Ùÿÿ@‘—Rÿÿ{•]ÿÿ|c–ÿÿ«­ ÿÿìUdÿÿ<ÿÿ9ÿÿÿÿKjðÿÿNÝÜñÿÿPeÏpÿÿQ·ÿÿ™ÿÿ–*ÿÿ”7ºÿÿOÍeaÿÿbaÿÿ¿Š®ÿÿœ†ÿÿ2ãŸQÿÿ{H›ÝÿÿŸ˜wÿÿÀ …ÿÿäöÜ_@ÿÿÿÿQëaÿÿTØÙ'ÿÿVÉáÿäVñ¼PýZXÿÿŸÿÿœ$ÿÿœ½|ÿÿ)Kÿÿitcäÿÿd¸vºÿÿ¤ ÿÿ Ë8†Ÿ¹ÿÿ}< Rÿÿ¥ŽœÿÿèòйýQý=nöÝØÿÿ]ÍÊaýu^ »‰úî^аsùÊa8¦+ùðb²ÿÿ£ÿÿ ›ÿÿ `‡ÿÿ•Å?ÿÿ€z`tÿÿvtÉÿÿSÀ‘Øÿÿ0&7IŸ)ÿÿ…G¥…ÿÿâ·šÓcñ ˆõÄŠ÷5v¨´Wø´ig¦º÷#k®™ñø1mfù«n£ƒ)ø nÑÿÿªÿÿ©ÿÿ¨—ôÿÿžŒ?úÿÿ¢‚L.ÿÿŽYmòÿÿ‚E†Ëè¾(ö§û¾6‡b•Í£÷¿”x€´üý”ó}*ó:Š(vyò¦}Dj³óµ}Ça¤ôÃ}¼YLõ}èO™ôš}|ÿÿ²ÿÿ³@ÿÿ´Âÿÿ²Ž7Tÿÿµ—@Šÿÿ¾ ùF–çеÁG’Äž£xkÈ&à« ”±š˜Üb³8¸ï¨Xäæ"œ^/çǔЖéÅ’`´êI ~Ꙍš íÆ‡uÿÿ¼³ÿÿ¿Ìÿÿ¿aLÿÿÃU)IÿÿÎÚãÖÎ'ÑÑõ´"×ÍP…¬'Tª]ª 凜“‹ñú…³uí÷Õ‚ãg-ø—wY`_øšw7[øJvÉWø0vTQg÷nu“ÿÿÃþ²ÿÿÇ? ÿÿËé\ÿÿÚ‹®ßÙÉÁÌÜgµdñù†€ìòÁVÓñæ;”ï‹ì‰¤ÇÚûw<²Œö€dŽ >üì[¼•=ü^uŒNüt`-„¤üas|åûÆa†ÿÿÏáìÿÿ×5 ý âôå&êÊÃþñ< ¼÷"ßkÄú7cöŠoƒþK\zj@þ»µ c˜öVõ¿YÅÜ ÷ÏDÈÿÿ;½2ÿÿ?ü³óÿÿDÁ¬ÿÿHŸ£@ÿÿJûÿÿÞÞ ÜÿÿîåêïøÉ»þt¶žñÿš /hàÿÿ# …ÿÿDXÿÿ7§@…-Žÿÿ†sàÿÿ¥”- ÿÿÏ^*kBÿÿú îÑÿÿ#ÐÜzÿÿ'«Óÿÿ,êÉŠÿÿ0wÀŠÿÿ3§ÿÿõâ Âñ+ÿÿÈÍüÿÿÛ+¡<ÿÿ Pghÿÿ!ÿÿÿ8öÿÿù'& ìÿÿUPÿÿy•ÿÿ‘Uÿÿ­ÿÿÐÜsÿÿò1?ÿÿÿÿø¶ÿÿ¯èÿÿ§ÜŸÿÿ lñKÿÿ—Ò ÿÿÔs©ýÿÿÝp ÿÿª<¯ÿÿIÿÿeX(ÿÿ@)ÿÿT×ÿÿqìÿÿ†;ÿÿ ÿÿ³¡ÿÿ×Wÿÿâè¾ÿÿñÔÿÿÿÛþ¥ÿÿ ½×¿ÿÿ ç 籫ÿÿÆê{Àÿÿ°E¼ÿÿ^úÿÿ ü [zÿÿ-5ÿÿA‡ÿÿT—ÿÿjPÿÿ3ÿÿZÿÿ¢ÿÿ¹ÿÿÌüÿÿÙ~ÿÿãÏãÿÿ﹚ÿÿ š šˆêÿÿ ÎRmÿÿ œÔÿÿ††ÿÿÖ9ÿÿ0bÿÿBòÿÿR9ÿÿ`ÿÿs£ÿÿ‚ÿÿ’Zÿÿ¦³ÿÿ³²ÿÿñÿÿÏZÿÿÚÿÿzÌÿÿrÿÿpýþÿÿIÂIÂÿÿ)(`ÿÿ|žÿÿ ¡Š ÿÿ/Ÿÿÿÿ`ÿÿzâšâÿÿŸÿxRÿÿ¶c`ÿÿnóm>‹ÿÿ›ô€1›ÿÿÙÿÿ(Ùÿÿÿÿ'ÿÿÿÿ'òÿÿ~ ÿÿs ÿÿ}¦ ëÿÿNÄK…ÿÿ-ê`Zÿÿ‚zÿÿ °ˆØÿÿ7®¦<ÿÿ]}¶Šÿÿ{*“Qÿÿ£=xÊÿÿ¹Ú`šÿÿkû82dÿÿ Åûa,$ÿÿÿÿ'mÿÿÿÿ(äÿÿÿÿ+ÿÿ„ ÿÿwÿÿ„ æÿÿN±N÷ÿÿ5aMÿÿ„OÿÿQˆ*ÿÿ@#iÿÿrhŒtÿÿ~-‰tÿÿH}tÿÿ»áfSÿÿ«ù9,Ùÿÿÿÿ%Žÿÿÿÿ,Lÿÿÿÿ-‡òœÿÿ0÷ÿÿ‰Qÿÿwÿÿ‰ ÿÿN SÂÿÿQª[!ÿÿ… ÿÿŽ:ÿÿ?ŽÇÿÿxžŒŒÿÿ|GŒÿÿ¥OÿÿÍ’fÑÿÿ æÿÿ&×ÿÿÿÿ1­ÿÿÿÿ1|ïNÿÿ6¢ßƒÿÿ;Fÿÿ'ÿÿˆÿÿ‹ÞÿÿL![ÿÿ\ÒZMÿÿ‰‚ÿÿ“Îÿÿ5ƒ•ÁÿÿzO’%ÿÿšT‘,ÿÿºÊ‚«ÿÿ„ñ¹cÿÿÿÿ4õÿÿ:ÒâMÿÿAÕÅÿÿC—Ê:ÿÿD˜ÿÿ–nÿÿ­ÿÿ’Œbÿÿ{«A„ÿÿ_d_RÿÿgX [d,ÿÿ›Éÿÿ*ô›áÿÿyƘRÿÿ¨’Gÿÿ𜅚öøjúݵÿÿEáÐÉÿÿJ™Ã»ÿÿKÞ¹XÿáNs¯ŸýWQÿÿŸ=ÿÿ›{ÿÿixÿÿŒÚ8ˆÿÿe¼díÿÿjFlãÿÿP€ˆÙÿÿ:£ÿÿl›]ézØ„YÉdõè|Q¼äör̳"ü|W¨úº\¨ž»ù¾^¸”VùÁaŠ¡ú)bÿÿ¥3ÿÿ£ÿÿ¢C(ÿÿ¡.8ÿÿœ^?ÿÿ‰âcèÿÿ‡‹s&Úà2ì–m´OzXŒ#œéåê‡#{<ÿÿ‰¡n÷ćùvq÷1nþj`ø)raÉø±rz[ÈøjrÿS÷*sZÿÿ®Wÿÿ®»ÿÿ®çÿÿ¯`'"ÿÿ´ù, ÿÿ»ª/FÚÁ¯&Ô¸½— XK'š Î÷¥ÓHºx§Îbñ9 Žûñ“| Öꮈ› ùëû‡á ¤ìË…›'í<ƒƒýï«~Pÿÿ¹ÿÿ»Þÿÿ¾iqÿÿÁ¹ õîÇqÏ»™¸à½—¤*ÇË8Í—#в£jÎ`Ž ŠÍüX†AuÒû|We‚ùgç`Qøëi‡\ ø¬i½Xoø“iìTDø|i•ÿÿÁôôÿÿÅÿÿË\ óþÓ‹Ð7Îp±ºÏ~ -Ú'{ä@6iÝ-J†wàzÌ‚z8ÂáûKmj¯zø]íœ1ÿÿJ”EýæMꌙüùOT…ëüúQ ‡üÀR2ÿÿÏ5 äÿÿ×—kñ(ڞ֊ߨ´ÕãÛ”Ìë¾q»õ2õKPû Ebºý¬P\'ï”ðeO Öñôý>°Âaÿÿ,Óº¥ÿÿ1ù³ ÿÿ5³¬ ÿÿ8y¥\ÿÿ;%ÿÿàf úëaJÞ›òU½ öŠ–„û»h2ý„ ˆ4þ©.Gû> ô;´ Çÿÿl@,þÉ w,–ÿÿÑž*ïÿäöY%ôè”ÿÿ<Úìÿÿ<Óÿÿ!>ËAÿÿ$wÃUÿÿ&¤ÿÿúe îâÀúÃmÃèÿl™/ÿÿcÉÿÿ?8AÿÿE•ÿÿ\% ÿÿA¥ ØŠÿÿpÿÿ‚ÿÿ°øÿÿÖ[Êÿÿþ7 ùÿÿÿÿúëÿÿ ŸìhÿÿÖßÿÿÿÕèŠÿÿ%Èêÿÿ:hž2ÿÿ/hvÿÿ -4Ìÿÿ9ÿÿ Š™ÿÿ5ðÿÿNÙÿÿjƒÿÿ…€ÿÿ¡ ÿÿ¸Èÿÿâgÿÿê"‹ÿÿõ™ ÿÿÿÿÿÿÿÿÍñÿÿ U U¦"ÿÿ³pcÿÿ ‡>Hÿÿµzÿÿ) ÿÿ$‡ÿÿ7ÿÿMíÿÿ]Õÿÿ‚<ÿÿ“Lÿÿ§OÿÿÉoÿÿÓÿÿÝ÷ÿÿænYÿÿïj­{ÿÿjj{ÿÿëG ÿÿÿÿ ÿÿ‰ÿÿ&Òÿÿ8UÿÿKÖÿÿ`ÿÿr ÿÿ…6ÿÿ—íÿÿ­Èÿÿ¹VÿÿÇÿÿÑÿÿÚqÿÿiÿÿgiÿÿ@6}ÿÿAîAîÿÿ `ÿÿxÛÿÿ jªÿÿ`ÿÿ`ÿÿ`ÿÿ‹ì|'ÿÿ¯`ÿÿÔdKùÿÿtðs0tÿÿ Óøý)Óÿÿøÿÿ"÷ÿÿÿÿÿÿmpÿÿeŸÿÿ;=<ÿÿF@=Úÿÿ˜^¯ÿÿv‰ÿÿ®‰Êÿÿ 1—Ÿÿÿÿlÿÿ€Ÿÿÿÿ§Kr–ÿÿ¸Z[ÿÿ5üT7ÿÿ *÷’+*ÿÿÿÿ$ÿÿÿÿ²ÿÿÿÿKÿÿrçÿÿjxÿÿxÅŸÿÿE.C>ÿÿcÈÿÿ(e%ÿÿV†Nÿÿ0¶¥ÿÿMå¶ÿÿ|)‹Ëÿÿ¡‰w“ÿÿ´r^dÿÿ¥ñü-Ëÿÿ½ÿÿ"²ÿÿÿÿ¨ÿÿÿÿ®ÿÿÿÿ™ÿÿy’ÿÿrÿÿÛÿÿFJGŠÿÿ'šaqÿÿ$­kiÿÿ„Èÿÿ:ý‡Vÿÿo®„¦ÿÿ~€‡‚ÿÿŸÅ{/ÿÿÌ•bŠÿÿ îþ6*FÿÿÿÿoÿÿÿÿÝöÊÿÿMçÿÿ ¸ÿÿ„0ÿÿ{sÿÿ…x ¾ÿÿDP,ÿÿU¬P;ÿÿÆsáÿÿŠÿÿ7ç‹ÏÿÿqZ‰Aÿÿ•¯ˆ¿ÿÿ½Èzÿÿ)÷úñCÐÿÿÿÿ6dñéÿÿ µâÖÿÿ&»ØÛÿÿ+]Ïeÿÿ0bÿÿŒFÿÿˆ-ÿÿ‰ß õÿÿO-uÿÿV¸V(ÿÿdV\Bÿÿ‘øÿÿ+7iÿÿo¶¾ÿÿ­I‡ÿÿöã{dëìøÄ]LÚÒÿÿE¤Ì«ÿÿ5™Â×ÿÿ8%»fÿÿ|ž`wþ” dwù°rcý÷ñe2]6÷˜fáW¼÷gg¿OÕ÷Hh°ÿÿ©¾ÿÿª€ÿÿ¬æÿÿ«0Ûÿÿ²ðš° aÈÜœü|¨†$E9‚v|š¾ §©D›ó¿ó*–Ãùö•ˆöð\~U#îäwð ïpv³Êï÷u-ÎòaqÏÿÿ¶ÿÿ¸4ÿÿºÿÿ¿à{·o»=¨v¢$©ûQ´%)x gŒH•€´®|Ñ…¯ùÃy1u þÞpÙfŽú)bv^¡úßYK\ úwZ^Y9úO[?Uyúp[—ÿÿÀÇÇÿÿÂó_ÿÿÌà/Æ¥ÀMÁ(¡Àª‰.Æ'n ÒÒÊÊê#q*Í­“dº½ôñ‚_a¬oÿFS NÿÿEÍŽáÿÿ<„‰†ÿÿ>Ÿ„`ÿ&@+ þfAÿÿÿÏh ¨ÿÿÙ2‘ä—ÔÉŠØa¦£×Ü…KÜék*âÒ?^éÆ'Vî 9 Môïb›FãÂáR<£Ðö©4üÂGÿÿ+%´Zÿÿ%x®íÿÿ(Ä©}ÿÿ+£’ÿÿ-bÿÿãs ò+è®Ñéê/®Üì=ˆòmbØöÑ@Dú_ .ø ¿2„ýÔYB)%û•¹%þ(ÌŠ"ìû‰ùjTæöÿÿhÕMÿÿ'ÎnÿÿÇÿÿLÁÿÿþ6üÓ åØ½öÕŠ·GøÞŒGû ` ÿHú8œÿÿ ÿÿwæÀÿÿ>†ÌÿÿbXÿÿŽ7ÿÿ´üÿÿÜ“{ÿÿû>ÿÿÿÿdø_ÿÿžëuÿÿîßÿÿÿ Vâ(ÿÿJJ¾”ÿ’¥’LþxaÊÿÿ 3=ÿÿÃNÿÿðâÿÿ+²ÿÿG7ÿÿ^Bÿÿƒ9ÿÿ¢­ÿÿÄ4ÿÿÞê×ÿÿõéÌÿÿþç8ÿÿÿÿ|ÿÿÿÿÄÿÿ::™õÿÿ%e¦ÿÿz5ÿÿÿÿ­Mÿÿ.ÿÿ,ºÿÿF[ÿÿa0ÿÿy¾ÿÿ“Òÿÿ¬ÿÿÆ-ÿÿÝïÿÿäëÿÿì»ÂÿÿóÚ¡7ÿÿ8zn>ÿÿ:…ÿÿoÿÿ±±ÿÿ[ÿÿ˜ÿÿ.‰ÿÿEÿÿXÃÿÿn­ÿÿ…¼ÿÿ›¬ÿÿ®HÿÿÄùÿÿÎ=ÿÿÖ¥ÿÿÞ¨ÿÿZ‹ÿÿ`ÿÿ@3Rÿÿ Mÿÿ Z–ÿÿvÝÿÿÁ%ÿÿ`ÿÿ`ÿÿ`ÿÿvqvqÿÿ©]ûÿÿÄ®Lóÿÿ /îå,/ÿÿúöÈ&úÿÿþj"ÿÿÿÿ”ÿÿX¿ÿÿbaÿÿ:±6¿ÿÿ8Ð=ãÿÿ NW‡ÿÿ(“]³ÿÿ³‹ÿÿ`ÿÿ`ÿÿ`ÿÿktv¯ÿÿ³zVÀÿÿø7·ÿÿòùi%Iÿÿÿÿ!rÿÿÿÿÿÿÿÿ =ÿÿ]‡ÿÿ[öÿÿ7 7$ÿÿ9§< ÿÿZU.ÿÿ(Z’ÿÿ‚ôÿÿ!†µÐÿÿ@¤ÂÿÿzsÊÿÿ¥o"ÿÿ±0XÿÿzïH+Dÿÿÿÿ.ÿÿÿÿ&ÿÿÿÿÿÿÿÿÿÿjtÿÿgÿÿs·ÿÿ?œ<“ÿÿˆXCÿÿ%D^Òÿÿ€wÿÿ4á‚ÕÿÿRË~§ÿÿ~¤}ËÿÿÒr‚ÿÿÕÚV ÿÿæûc(ìÿÿÿÿÿÿÿÿ÷òÿÿëSÿÿ«ÿÿsãÿÿq‡ÿÿ|,ÿÿ9ÎH/ÿÿM­F‘ÿÿ2”]¡ÿÿ‚ÿÿ2ð‚Šÿÿ_~‰ÿÿ‘‚'ÿÿ½\oîÿÿ$ëü;8ÿÿÿÿ.¢ë•ÿÿÞËÿÿ |ÖÿÿÆÍÊÿÿ”ÿÿ‚?ÿÿ}¹ÿÿ‚Uÿÿ‚ŠÐÿÿJRNÖÿÿQÂXèÿÿ‡ ÿÿ+Öƒ³ÿÿdVðÿÿ­ÉzhÿÿõJgá«üâOÒÑÂÿÿ;ØÃêÿÿä½5ÿÿ%­·Qÿÿ+"°åÿÿ/~ÿÿjÿÿŒqÿÿŒùÿÿˆ®šÿÿuT8ËÿÿT \nÿÿ[ŸaNÿÿýˆÞìûrt¢ÍÔÁ [ç©&ùÏDt§EûÊX£¢Ûù×Q.›Æÿÿ9´”’ÿÿ>úŽóÿÿB°ˆHÿÿFMÿÿšµÿÿš·ÿÿš‰ÿÿ—¹ Äÿÿ’G$ÿÿÿ•1-uÿÿ…Ö9¿÷%Øp”—cY¿qx‡À`foŸùjsWíÿÿnƒTúk·ZÄû²XsTŽû[OÞúˆ\,H_ùã]õÿÿ¥Ûÿÿ¥ðÿÿ¦àÿÿ§ÛˆÿÿªØ:šÎ²Nƒ/“So6ª ÄG ¸•ªŽ…"èe‰ª Lú®}ö$òöôoóÝfxcóög6Øôf¨?õ§dŒÿÿ³¥ÿÿ´Ôÿÿ¶hô²³ÎÙ¦E¨Å–ÌЕ+wóž¢ems^µ*apÀŹ´ø„X¹°‘ Lb¶Xß(Jo¨&ÿÿF”—Éÿÿ:…Šÿÿ*÷×ÿÿ-~©ÿÿ/œ{Gÿÿ2(ÿÿЄ MÿÿÝ\Û9ÐI\¼Ð¹š\ÐPu­Ò•YáÓ>ÑÚ™ NÙì0–5·ÛÖ‰".»Ø$ÔN)ÀÉžô/'×¼ÿÿ#ý«!ÿÿƧPÿÿò£Fÿÿ#ž—ÿÿËÿÿçe /ê¼æ†¹ÅeáÓ iáyfæTèŽ9jîvó%ZõŠJ ûöKˆU‚úÃÞ õ¡ú6 GÝfý! ÂÍ7ÿÿ¿Çÿÿ ðÀíÿÿ ö¼ÿÿH÷Jû[ Úζñx{©èðç~Ló S­õç.±ûµ_ÿc^ÿr&H7ÿùT³Äÿˆ/ïÿÿ¶¶;ÿ&á»ÿÿü´ÿiÿÿËñëÿÿîåŒÿÿÑÝIÿÿLÚ_ÿÿv )² ø“ƒ¬ùÄUCüX'üãý­jÿÿ<ÿÿ:8ÿÿbdÿÿ€€ÿÿ¢tÿÿÇUÿÿä UÿÿÿÿLÿÿÿÿÿÿÿÿÿÿÿÿºÈÿÿqqŒßþªZ…ÿÿ(£ÿÿÿÿÿÿ Šÿÿ”ÿÿ;ÿÿXhÿÿuÍÿÿ’Íÿÿ­§ÿÿÌÿÿåøTÿÿíÒ ÿÿôB~ÿÿú•Rÿÿya(ÿÿ.9ÿÿÿÿÿÿÿÿ²ÿÿ'ªÿÿ<¾ÿÿUÿÿl#ÿÿ…sÿÿŸÿÿÿ±ØÿÿÌÿÿ×ÿÿÞ8ÿÿãùÿÿV^ÿÿ@"§ÿÿ4747ÿÿ F0ÿÿ R¦ÿÿ b#ÿÿ$Š<ÿÿ`ÿÿ`ÿÿ`ÿÿpÆpÆÿÿ¤úWMÿÿ¼‚GÃÿÿ­ìX(­ÿÿÅ÷Ú!ÅÿÿýFGÿÿÿÿ´ÿÿT¿ÿÿ`!ÿÿAÓ):ÿÿ&@:ÿÿ “Nìÿÿ(“\Jÿÿ„þÿÿ`ÿÿ`ÿÿ`ÿÿd$rÿÿ¯gOúÿÿÔP;Êÿÿ­ø'"zÿÿÿÿûÿÿÿÿ2ÿÿÿÿ„ÿÿRïÿÿY·ÿÿ;¾)Íÿÿ-}:6ÿÿ²J—ÿÿ_›ÿÿÿÿ(²FÿÿLDoîÿÿsÀ–oÿÿ§Žeÿÿ­GQ^ÿÿ îë…(oÿÿÿÿüÿÿÿÿÿÿÿÿý]ÿÿÿÿX‹ÿÿZWÿÿgÿÿC<,¥ÿÿ2l?Òÿÿ#)Yßÿÿvÿÿó‚ÿÿH}zºÿÿs"v$ÿÿ­_PÿÿÕ‰I¶ÿÿ”ù½$Üÿÿÿÿð¤ÿÿäNÿÿݳÿÿÿÿfãÿÿe@ÿÿikÿÿ; 7Öÿÿ@Q>dÿÿ5^ÕÿÿwÁÿÿªƒÿÿc®p‚ÿÿVp”ÿÿÁ¡cÒÿÿùZ1Óýÿÿ"7ã"ÿÿÓ)ÿÿÏÿÿÈ5ÿÿÿÿs¡ÿÿqhÿÿqÍÿÿs;ÿÿ<%GJÿÿPGeÿÿ#¿g‘ÿÿ9{cÿÿkRicÿÿ°QbÙîýæcH6Ô›ÿŽ;.ÇÚþû,)»Õÿÿþ´/ÿÿ"®Lÿÿ¸¨Ðÿÿ!ÿÿ…zÿÿƒzÿÿ‚ ÿÿÿÿŸ˜ÿÿE“QÆÿÿ9`ÿÿ)¼/_^ÈÖ±gTXkÁñ¶JB7£1òV-±•Áþ':S—óúAF=Ìÿÿ8‰Äÿÿ4„ÿÿ6ˆ~³ÿÿ9ûÿÿ”ƒÿÿ’8ÿÿ¬ÿÿŽæÿÿ‹ 8ÿÿŽì"êªo‹¥ªe‡`:‡DM¶Z6zz¯[R¡h~íÆUŠUÿÿZÖD¢ý^VI€üãTÔH½ýŸO»D ýNP»<ÒûîRéÿÿ¢—ÿÿ¢ÿÿ¡†ÿÿ¡dï/—wÄwƒr› g—{›YÚ*ƒ< é€2}9ÜÖ wë qú?q 'Dý:^ó+üU;'õúlR¼( úgR›%CútR›ÿÿ±Ïÿÿ³ÿÿ³žäÕ¨n¿_–ʘ[…Pz1€,d&‡¶ KZz(as"„Ths¤Ó}QljÓû…Qé]Ôû;DdXÿÿ88UQÿÿ5ÂTÿÿ6ÆRÿÿ8ÿÿÀÿÿÅ'ðùÃ`Å£°ü¢@ªë}æ¥yañ§ºS᪙Ÿ1 9?š¥õvÜ4J¨<È%2Už¼ø€3Ýxþk-(ÿÿ!ny¾ÿÿwMÿÿBt½ÿÿ![ÿÿÒbüÿÿßÝÒ­ËU¤¯„ǵ‹ÇreÇäHœÅÏ5ÉÉ*( RÈuu<Æh»üg¿FïR³#ý™!§ÿÿ;šÿÿ š«ÿÿð–øÿÿAÿÿê° :àpá´ˆ¸ƒÙ‘öÙ(jÚD-Û¡&¼Ý(ªç Øä¨=Ã9æé|›í拵­PãØç)×Xú±ÉGÿÿ½­ÿÿt¹{ÿÿáµzÿÿïàù7 ÇÄ^ëY0›æ¨ošécEí?4ïâ¥ö;úüÄû@N~ü'‚Âÿÿ²Ùýá'ü¿ùÐô–ÿÿyæ³ÿÿÜpÿÿlØÿÿCЉü¸ a¥·òåutòGžõ<gõÚöHÿÿžÿÿ4ÕÿÿXzÿÿ‚¡ÿÿŸõÿÿÈ¡ÿÿåÉ6ÿÿÿ7ƒÿÿÿÿÿÿÿÿÿÿÿÿ¯ãýaW}½ù£MKû¼¯ÿÿÿÿÿÿ4ÿÿªÿÿ7gÿÿVÑÿÿsÌÿÿ‘Vÿÿ«ëÿÿÍóÿÿå8xÿÿôÔ‰ÿÿúóÿÿþ?ˆ©ÿÿUÿÿ$(ÿÿÿÿÿÿTÿÿ³ÿÿ'©ÿÿÑÿÿ%]X.ÿÿ/bHÿÿbUOÿÿ¬åD áøÝÔ!wÄ#þ¿¼øý©ý³ÿÿ¸¦*ÿÿµ¢2ÿÿ>Œÿÿ]ÿÿy¢ÿÿuEÿÿsÁÿÿrÿÿqžÿÿ?,=@ÿÿ9§Hôï]*ƒNáÇÝda4Ù³§%ÂNâ Û†!ýåÛŠ`ý…5«‚2ÿÿ42z ÿÿ1Üuïÿÿ5?oÅÿÿ6ÐÿÿŽ™ÿÿ‹ìÿÿ‰ÿÿƒ¯ÿÿ{’û»u¦ÏYNÌì bJƒv÷Eü=ýkÝ™ô;`Ù„>‹Sâü¸Eú< ÿJô6iýNä5HÿÿIþ2WÿàK,,ÞþÀKdÿÿŸÿÿÿ mÿÿž+ÿÿ—ÓÝ ƒò´Pk„P”f‚Fá^qðhàjyf»ÝcgTðE_l$EþN}§-uÿÿ?:,(ÿÿ=*,ÿÿ=n(ªÿÿ? ÿÿ¯ÿÿÿ±Ëÿÿ±4Ø]ž9³‰ãæ‡5taj mxXsØN¥4L¡`kjÖ>kc”·9lb–ïŸ;"Z3ûM5bRGÿÿ+sN¦ÿÿ#ŒNJÿÿ$¾L¯ÿÿ&ÿÿ¿ÿÿÿÆdåȾs»Ñª&” ør& ÂSxšR>‘Šªx,š“`V¨–V²/²‘Çæ#V‡ŒúÒ9|eÿÿ<opÿÿ noÿÿ lOÿÿ…ÿÿÔ®ûôÜÀÉ‚Å÷K Ý¼Bz=½ŸUí¼L3ç¸Et´Y¶6 Ù+µ0bw ²Ž¢¯ÐÝ©_ý óŸáÿÿi‘¨ÿÿнÿÿÆŒ’ÿÿÿÿí×’Ü›g¬™Ñ.‚?Ï [ Ñ¥3|Ò\1ÐlÔLƒÑî;iЉp¡ÐÊ¿Ë%ï7ÁRÿÿ³@ÿÿ¯ùÿÿ¬@ÿÿåmô8¹ãà‹ðÝ#_ÜÞf5oãÒ.ë/ê]ñyeîiMSð,{Áó0§ñgϵðýðáçäÿÿÚ“ÿÿÕÿÿзÿÿÈ:ùeΗSêÃg?ê:E탢òøÿÿDÿÿ6ÅÿÿZ³ÿÿƒÁÿÿ¡ÿÿÆWÿÿäiÿÿüZ¥ÿÿÿÿÿÿÿÿÿÿÿÿ¤ø¥póÃA›ö¡IþÏÿÿÿÿ˜ÿÿEÿÿ;ÿÿYÈÿÿt¾ÿÿ<ÿÿ§ÿÿÿËNÿÿã²ÿÿø:êÿÿþþÿÿÿÿzÝü¸Iœþ@sÿÿÿÿÿÿÆÿÿ›ÿÿ-lÿÿE7ÿÿXæÿÿmbÿÿ…GÿÿŸÿÿÿ¯UÿÿËóÿÿàâÿÿæôÿÿêðÿÿH4ÿÿ.Ž ÿÿ -Ÿÿÿ 6¶ÿÿ @ÿÿ]ôÿÿjyÿÿ°€ÿÿ@}¯ÿÿ``ÿÿÆOÇÿÿ£fCgÿÿÅæ1¡ÿÿîå îÿÿúï%ÿÿÿÿ åÿÿÿÿÀÿÿFÚÿÿ5%}ÿÿ-^"³ÿÿ@3 ÿÿ >fÿÿ&SDlÿÿfÿÿƒEÿÿ@w'ÿÿbZÿÿÿ˜'Oÿÿ¤^DˆÿÿÓh'iÿÿóÌ6ÿÿÿÿÿÿÿÿÿÿÿÿÿÿEzÿÿK…ÿÿ,i"jÿÿ[/2ÿÿ 9ÿÿ%€@…ÿÿc8ÿÿ…¿ÿÿ­ÿÿc‚ÿÿf:ÿÿJÆbëÿÿ GxHD“ÿÿ£<šÿÿÔê"ÿÿ÷3#ÿÿÿÿÖíÿÿÒ ÿÿÍ|ÿÿÿÿM.ÿÿJFÿÿP:ÿÿ;‹Kÿÿ.U+òÿÿT=Ìÿÿ(C¢ÿÿdxÿÿ[ŠM>ÿÿ“G:~ÿÿ¾@"óÿÿð"â3þí Ñiÿÿ¾qÿÿ¸xÿÿ峘ÿÿBÿÿY.ÿÿTÿÿÿWÿÿZéÿÿ?_"lÿÿ+µ1âÿÿ&>Kÿÿ*šJ‰ÿÿkÅ0Tï]§,™Ó˜Ì©¼Çòò´âý)­¨žÿÿ›-ÿÿc’áÿÿúýÿÿÿÿp·ÿÿkýÿÿh ÿÿa÷ÿÿ]úÿÿ=¨"Eÿÿ*Ç2jÓw2Dþ§Ò^tœŸ¤‘Šž”KÈ´…ùº|Wÿ¹ vOÿÿ-"e½ÿÿ0¤`÷ÿÿ24]ÿÿ22ÿÿˆ×ÿÿ†Æÿÿ}çÿÿt)ÿÿehÞ¨Nêµj2 ýtÆÿ#%eA¯!d^C‚È%½We¿(gPðN.˜<#ÿ2è$ÑÿÿA8çÿÿDpžÿÿDµœÿÿBsÿÿ¬ÿÿŸÿÿ˜0󹊢ÐltI¨²Y“sCA Wš:Ô*]¾çVS¾L¦zKtªÙ˜E¤!5ùâ;0%æÿÿ.ú'Áÿÿ,’$³ÿÿ/V#¸ÿÿ/Òÿÿ­ñÿÿ±`ø…ª!Ï –¨ÀVxjeÆZû]‹Gþ^ÑEË:hSX2*ùV ¡€%ÒZkÛ¸%¦U½÷Ñ#‹L"ÿÿrC"ÿÿÍ@>ÿÿ–@ÿÿ~ÿÿ¿ÿÿÿÈ Û$¸1±#£.„~’:deï•ÕD‹ó)}fxô¬‰BM¯ÿ„Ê›Ã^Ðôf~×ø÷9v ÿÿ ¼f»ÿÿ_Îÿÿ]’ÿÿFÿÿÔ˜ñ ×”¿4À‘³°ìkU³¯F·²) —«ê–¥¯¤F&–¤»Xf›ÏDšzµ›,ìÄ—Vÿÿˆ8ÿÿ~õÿÿ|zÿÿõ¨æ/ÎS×Þ4 µÉBrMÆ>KÌÈi$ñÉðÁ°Ãk ɧ<­ÀØeƒ½‰üº€°º‡Ô8·hÿÿ¬§ÿÿ¢ÿÿ„ÿÿÙ§ìп­ëÜe|ãÕ RbÖ²)BÛËÞpáñâñ'DäZM7ãsuãÉ·àB¾'à1Û%Û—ÿÿÔÿÿÆgÿÿÂËÿÿ½óf‰ÛãcYá7/Yæò €íÿù¢%ÿÿþÿÿ<ÂÿÿcÜÿÿƒäÿÿ¢Ïÿÿ¶øÿÿßÿÿ÷´ÿÿÿÿýöÿÿñÿÿ—bófbcí»6ºòh½üVÿÿÿÿÀÿÿ.æÿÿIÿÿb¢ÿÿv¯ÿÿòÿÿ¤ŒÿÿƳÿÿÝèÿÿóÏÍÿÿÿÿßÿÿÿÿmÐù->âû2^ÿÿÿÿÿÿ "ÿÿÓÿÿ6YÿÿL¥ÿÿ`ÿÿpGÿÿ†ÿÿŸÿÿÿ¬tÿÿÈGÿÿÜrÿÿéVÿÿìàÿÿ1 Kÿÿ d ÿÿ $Dÿÿ ,›ÿÿ 7ÿÿ @ÿÿ^ÜÿÿûcûÿÿB}`ÿÿ`YûÿÿŠ}DÐÿÿ£87ÇÿÿÈh#àÿÿãö ÿÿ÷ß ÿÿÿÿ¿ÿÿÿÿ;ÿÿ=ÿÿ*”)ÿÿ!•äÿÿë(lÿÿ 2þÿÿ$>Xÿÿ^½ÿÿc˜ÿÿ>zahÿÿ]'[çÿÿ—ÿ>áÿÿ¬_5)ÿÿÔø»ÿÿñlÿÿÿÿ¿ÿÿÿÿù™ÿÿÿÿNdjÿÿWñXÿÿ¢“;òÿÿºz'éÿÿçÉ%ÿÿÿÿ lþ5ÿÿåøÿÿßÿÿÿÿºý€¦ ·ú0–‰ Iðz.qxþ¨ßs0Ùãsôý€e@ÿÿ@Q*ÿÿ&UM-ÿÿ'lJÇÿÿ'hÿÿƒ0ÿÿ| ÿÿtÿÿÿháí‘R­ÍW=Ó s"p^ôK˜Y<ì .T€mAaM¦ÖHÙq>¼úÀ>ÿÿ*ðÿÿ:¾ÿÿ8û Vÿÿ4Âÿÿ™ÿÿ›ÿÿ“CãM{”Ã}gÞœîM®f¡6-J".ÈJ[ öG?'®:7/ÀÃê1s'îÊ)ƒ 7ÿÿu ýÿÿ6Fÿÿµ—ÿÿèÿÿ«2ÿÿ¯æëF¢¡ÆSŽÖœÁu:¬lÃZb|LÅOw5öL>i' I Jï˜Jœ‡íSPñ˜OÐðŠ çCPÿÿ .9Åÿÿ5µÿÿ;4WÿÿFÿÿ¾ÛÿÿÅúÑH°ü¥¡™Ì¼wå…®U‚j2j/òpŸh")n?djÅrfm®¥o$æBl!ÿÿSòÿÿCÿÿDEÿÿþ ÓãšÐž´D¸F‚Ò¦[¿¦Ú5ܨF šٗ½h”6-Ó”ßQ”sB& ìˆ,ÌãŠÿÿ{yÿÿg\ÿÿfÿÿèfݣĄÓ'’O¿öcC»³=N¼Ä1¿vº*µ4l³ŽC²?\”°wׯù§l¬|¬rÿÿ£áÿÿ‹ßÿÿФÿÿμåb¢-Õo˜ÍþEiÎjÏÒ¢ÓìÔ¾ŒÕ_5ï׆PêÖ¿o¤Öi’÷Öa´üÓfˉÑÚý[Ëúÿÿ±Úÿÿ°ÿÿ²ì¿{âÜ@MNÛ"%7Þìæçö´hÿÿ)yÿÿKgÿÿaEÿÿƒ€ÿÿ¤—ÿÿ³ÉÿÿÙ#ÿÿòÿÿÿÿ!ÛÁÿÿØÿÿÿ‹&ï£VGèH-¼î¡ XùÝÿÿPÿÿoÿÿ7ãÿÿPÔÿÿ^Íÿÿwâÿÿ6ÿÿ¢ ÿÿ¸ÿÿØ"ÿÿîÿÿÿÿÿÿÿÿÿ¡a§õ¿5°ùX§ÿÿÿÿ“ÿÿJÿÿ/ÿÿE'ÿÿT›ÿÿ`ÿÿs’ÿÿˆÿÿ›ÿÿªBÿÿûÿÿ×Äÿÿë•ÿÿïzÿÿ*Z nÿÿEEÿÿÿÿ !ÿÿ +(ÿÿ696ÿÿR ÿÿ_6ÿÿ;½V‡ÿÿ`GŠÿÿ‘76ÿÿ«É%œÿÿÊ Äÿÿã` ¨ÿÿõÌwÿÿÿÿ²ÿÍÿÿÿÿ2^Öÿÿ!±€ÿÿ®Úÿÿsmÿÿ a&ªÿÿ!ž2“ÿÿTPÿÿdËÿÿ6¥ZÕÿÿX€Iaÿÿ›“3`ÿÿ³~6ÿÿÖ-“ÿÿíò Wÿÿÿÿ¡ôpÿÿïîÿÿÿÿ3Nÿÿ-¼àÿÿͳÿÿÉuÿÿ Ý!Eÿÿ!N-´ÿÿPÿÿcÄÿÿ7]-ÿÿeØCUÿÿ Ö+ÕÿÿÅÛ6ÿÿè) 6ÿÿÿû‘úÿÿÙƒÿÿÔÿÿÿÿ4Ìÿÿ3¸ÿÿ+z ½ÿÿúÿÿ/ÿÿ!%Ãÿÿ5Cÿÿ •>=ÿÿRÛ/~ÿÿƒ#Îÿÿ®MÿÿÓùýaó€ë¡ÿÿØÿÿ¸ÿÿ´”ÿÿÿÿD@€#å=:Ň><—§?/púDª3GJà£9*÷å&¹ÿÿ Wÿÿ -ÿÿÿÿ»Îô>ÀgÆ]§ø™ãQkÊy=E²n¹!¨nEÔdG[,ZÐ7^TµcáVšcU ÉTøùy;3ÿÿ.ÿÿ-ÿÿñÊÌ]Ù!ʨ§° uœLLü—f&ÖP–²ŠÏ .†Á)é„3H¢w\lòy¶™ºrC»juÕûSjÆÿÿNOÿÿHÖÿÿÛúÖd¹ÏÌó„µ¶$Wð²z/\²[³ß¯ |«{+¨ßFq¦äXY¤dl•£Š˜Ç—vµÍ˜Eþm’†ÿÿ{™ÿÿr[ÿÿÂæÝè–²Ïb\ÇU8íÆ­ÈË,~Ï=˜Ð6fÐ{V¤Îhn ÍÊÏÎ)¯ãÇÕ¿`Çûõî½Áÿÿ¨Kÿÿ™iÿÿ¥øåApØ\C ÕÎäÙtáœïVFýæ0ÿÿRÿÿ_Àÿÿ~dÿÿžÿÿ²cÿÿÒqÿÿìÁú¤ÿÿÓàÿÿÅÿÿ~€ëYKRâÕ%“錆÷ŒÿÿDÿÿ19ÿÿHdÿÿX¦ÿÿ\ÿÿyîÿÿ‘ÿÿ¡ÿÿµùÿÿÒ»ÿÿéÍÿÿÿÿ†öÿÿV[ò~-yöž ,ÿÿÿÿ ðÿÿ ÿÿ8sÿÿM ÿÿ`ÿÿ`ÿÿv¼ÿÿŠLÿÿ›¦ÿÿ©ÿÿº×ÿÿÓ/ÿÿèÿÿò×ÿÿ!-ÿÿQQÿÿ““ÿÿÿÿÿÿ».»ÿÿÆ:Àÿÿ á@áÿÿM/8×ÿÿd28­ÿÿ“…(ÿÿ­m9ÿÿÊ’ %ÿÿáùUÿÿôY³übÿÿìò.ÿÿ`ÿÿ)ÿÿ› ¦ÿÿ+ûÿÿúúÿÿáÿÿ î, ÿÿ©<ÏÿÿY?¨ÿÿPÐ6ÿÿe£9‡ÿÿ€#2ÿÿºÿÿÕýÇÿÿí` ÿÿÿÿ ïZÿÿ>âÿÿ …ÿÿ*Qÿÿ&±ÿÿŸ ÿÿLLÿÿÛÿÿ· lÿÿ=ÿÿ“>!ÿÿP¾8éÿÿ{“0Ÿÿÿ î"oÿÿÆ Oÿÿæ êÿÿÿq(ðÃÿÿ›Øÿÿ‹ÿÿmÿÿ-ÿÿ*(ÿÿ&qÿÿŽ—ÿÿ]]ÿÿ åÿÿ3¤ÿÿ¦.»ÿÿNC'Gÿÿ‚”Æÿÿ±UªòÄÎÛç¾éÔÜDÿÿиÿÿ@°Qÿÿá¢%ÿÿkÿÿ4¨ÿÿ,òÿÿ-.ÿÿ*<|ÿÿ ˜ñÿÿ´¸ÿÿZ[ÿÿ+µüøZ„Õ5{Êœ¤kÁÆ;»+äîFþX ¡ÿÿ‡ìÿÿ‡zÃÿÿÿÿD>ÿÿ>.ÿÿ:ÿÿ3 ÿÿ*ýÿÿGýF BÖ¢(h³åH]¡¶gj›•’±¸æŠ—â¬}Rþ«cuÿÿåUNÿÿàOWÿÿSÿÿT:ÿÿOØÿÿI¼ÿÿ>Èÿÿ,dد[µµ™ï¯qL2}cqNàZ£uSY°®ÄRØÏDPû.ÍÿÿI+ùÿÿ(ûÿÿ dÿÿq+ÿÿoûÿÿXŠçÛNÍì=L¯&½†v¦UD¿<%86ºB7ýpÞ/ú¨ða)³Ý1ÓøC!ÿÿOÿÿBÿÿ oÿÿŽPÿÿ’‰ê»|zËWgĪ–O…>;ÜW(g/9˜%5 o2QæìeøŠK¥„ ܸ3ø…Bÿÿßÿÿwÿÿÿÿ£Ûÿÿªу’¯Ûz§ƒl^iWÜIƒ37Þû5÷4*„/Ç/÷2 _¡.ã’³1Å;'có ’ÿÿ îÿÿ ¦ÿÿö–µ7æo¹4ºœžæ2„Ý_¬k™9•^c]U(IKX;DË7OAøc¸:«Œ*=ÕÂ8íi-Ôÿÿ Sÿÿ‡ÿÿãüÄâÎ|Â圧j÷‘iA‡dX….‚_Âv3  k‚#.gCXfåY»ˆ/V„°ZUì•S6ÿÿ8nÿÿ0GÿÿЦÏK®ÑÆ xŒ®óM;©‰#¦§D§>¤œ†¢T,¹@;¼šúV”ùd"ŒÉ¤Xˆé­ï‰Ýø,…UÿÿpCÿÿTÆÿÿ·‰×‰Š!ÊWæÁ….W¿z¾”Ä6äÈ™(ÂÊ:“ÈâXûÆ…iêÅ_…ñÆQ¨¹x¸é¹Àï³Êÿÿ›ßÿÿƒ‹ÿÿšߎe Ôb8›ÐâÓ‘Üç vò»;ôúÃXÿÿb-þ†˜ÿæœÏþЭ’ù_ÈcôÖæwì ÿÿÏÉÿÿ®ÇÿÿsjçêA¶ÝÏRäg€õ)ÿÿzÿÿ9&ÿÿOQÿÿbzÿÿkBÿÿ|Žÿÿ“5ÿÿ¡Tÿÿ´ÂÿÿͪÿnäÆÿÿüóVÛkÿÿLxï^&wóÄ=ÿÿyyÿÿúÿÿ/†ÿÿDºÿÿSvÿÿ`ÿÿjÄÿÿzLÿÿ+ÿÿœÂÿÿ©&ÿÿ¹—ÿÿÏÿãžýbõÜÿÿE¯ÿÿ ¶ ¶ÿÿ  ÿÿèèÿÿÞAÿÿc%Iÿÿ«%<ÿÿ-„+ÿÿJï*ïÿÿrf%yÿÿ“µ ÿÿ®2‡ÿÿÈ“”ÿÿÞ½?ÿzóŸàñàÿÿ âTÿÿ ñÿÿ ÿÿv<ÿÿ  ´ÿÿ ¢ ¢ÿÿ}îÿÿ$ÿÿã#Žÿÿ&Y-©ÿÿHº/ÿÿx6&°ÿÿœÿÿ¸ý "ÿÿÔ;Œÿÿì °ô7þ jãhÿÿ ÑÒÿÿ Žÿÿ!ùÿÿ ®ÿÿÒ mÿÿ ´ ´ÿÿdµÿÿ ŒÞÿÿ÷"åÿÿ!Ô-vÿÿH_1nÿÿ~ï'Ÿÿÿ¢3ÿÿÄ{ëÿÿäùøqü ‡â×ÿÿðÏÿÿ%°Çÿÿeÿÿ%ßÿÿ!µÿÿíÿÿ lÿÿ ) )ÿÿ*ÿÿHïÿÿ%Q ¹ÿÿOYxÿÿ‚= íúŽ«âã1Ä—Ø¿áâÎ!ýÄMÿÿÅ£ÑÿÿŠàÿÿÿÿ-Æÿÿ& ÿÿ$.ÿÿ"×ÿÿ p‡ÿÿ F÷ÿÿ• =ÿÿT3ÞæDRlÏÎulÁ´™¹»­/ÚóšvóbÔÿÿq&ÿÿ_Ëÿÿÿÿ>0ÿÿ7:ÿÿ1íÿÿ(‹ÿÿõýï ¿Û«xÉW$É´"E.žg`‚’…„è†#®zb×üd-òèNsÿÿAsÿÿ;xÿÿÿÿNzÿÿJuÿÿBÿÿ48æê .ʼn g«”“½o±-¦\¨B3R¨d|Kç¡f=ÂÇd2ë3"žÿÿîÿÿ¥ÿÿÿÿi–ÿÿi2üüQ\Ý›E—À92cœÈ ·|7†Uc2ôŸ*F/‡&U_¤4¡žaØÃv öQ~ÿÿTÿÿÿÿPÿÿˆ=ÿÿŽ'ÝFqçÀ‚\À›DttP3èM’Ÿ(ºYˆ O/ ÉÆ[­q”÷¦Çe YôXÿÿÿÿÿÿýFž*ô¡¸È‹‰³£=m\vÕU¥Np>f*•.¢×-ð" o¡+¹Û[çt‡…î¾ríx ÿÿ/ÿÿQÿÿém­ÆÛ¾²¯à–€_xyV‰`p06SacQWDm^5[Æ.ž;-MaÌ&ö†è**¼2%«Î÷ Hÿÿjÿÿ ûÿÿÙ]¼ïÂڹŴk`¡†}5ªzÛ Ãw>n)a‹žUö$ºO?kGk®Dàs7Aø¶XB•ÈÛ7Êÿÿ-Žÿÿ rÿÿźÈf£;½Ýnt©.CX —Ì›"™[’Ö‘‹-ší3ÙŽ1TxÇx§{•ŸêvɨAtÅï‚tÿÿ]Bÿÿ:ƒÿÿ­`Ò<}"Ä>Noºµ%r·¸¶·¥ øé*¼¸×CÙ¶DYĵje‰³Ñpâ³ì™¹±†³Õ­ÍFªuÿÿ“¨ÿÿoÚÿÿxÜ~[—Ѓ/ËÌT XÍ`ÔŠÚ"(*çEJòBWÜödœóÖ†Tóp˜’ð$¨gè«ÁŸäÔêÝgúÊ€ÿÿgÿÿiPå+8[Ú_aÝQñÿÿ'­ÿÿBVÿÿTµÿÿ`ÿÿoöÿÿ…¬ÿÿ•{ÿ¹¢­ÿÿ´²ýÔÉ:úøÛ³ÿÿø@ÐìÿÿCÞìÉ ð¡/ÿÿÈÿÿ#„ÿÿ6dÿÿIûÿÿX—ÿÿ`ÿÿoPÿÿ} ÿÿ¿ÿÉž4ÿG©‰ÿk¹ýAÊåûÜûQó¥ÿÿû)ÿÿüüÿÿyyÿÿJJÿÿÄÿÿ””ÿÿ 2ÿÿ e?0 eÿÿÁXxÿÿuBCÿÿ’dVÿÿ¬W±ÿÿÄ ·ÿÿÜ› ˆ÷ ò Ðå–üçô×gÿÿûÿÿxÿÿ WÿÿjjÿÿqqÿÿÞ ÿÿÿÿ~Üÿÿë=Hëÿÿ XËÿÿwúúÿÿ™opÿÿµÿyÿÿÐÔ øÊê ©ç—ú_‡×MÿÿmÅ_ÿÿ[ÿÿ„ÿÿ›ÿÿ~ÿÿþþÿÿóóÿÿ ½ ’ÿÿÆyÿÿr:¼rÿÿ­Y=ÿÿ{ÿÿ à¬ÿÿ¿i Oüáß» Ôê;÷á ÒÕœÿÿ ¿ôÿÿ ࣅÿÿÿÿ 7ÿÿùÿÿ´ÿÿmmÿÿÃÃÿÿ_ ÿÿ) {ÿÿì6ÇìÿÿUÿûè}]åp ,ŒÖO¹AÉ×c¼}ó2³äÿÿŸ“ÿÿx$ÿÿÿÿ*Jÿÿ"óÿÿÿÿ¢ÿÿ”ÿÿHÿÿÎé2-¯ÔJ"Ãsh˜°X†ê¤ ¨²’XÉúƒêÈvJÿÿ]ÿÿNµÿÿÿÿ9.ÿÿ2¥ÿÿ)éÿÿ ýºåÞ–É,¸M 0¢®8I‰Piv8ng³™p\SÃMoäŸ>½ÿÿ3˜ÿÿ,ÒÿÿÿÿHÜÿÿD¹ÿÿ9Óòó*uÔÜ·Õ 3åËì<f"ÊPÃ8ˆ?¯ZÝ5ã”/)7¼!Wá}´ÿÿ”ÿÿ$ÿÿÿÿZÿÿXéäM§ÑE?H³Ó,'–!o¶|N9»1C*ÚYn/ÄØÀhðíÿÿÿÿÿÿü€}õ}}ÔuhĶ;RJÓ<gS+ÍEQ.#$ _)éS¿„ý¾ïÉÿÿÿÿÿÿóš–åÏ–“¿ÿ5—àc«lsLsFØ6ä#R':!d çk-0ñO#§€°ÖÊÿÿÿÿÿÿßD§´Ñ'©X¦ùxjpâO”YX(ÀK9EÙ4\•%'‚ï8ïVùR€0°³ÂÉ!=ÿÿ «ÿÿ{ÿÿÑ̸'¹c³ö‡‹—¡Z3€ý0Xsö(lÕ^¡›S#›F.+Þ;iGP5£`.ÓxÕ/r­6."Å_-Ìÿÿ$sÿÿ¢ÿÿ¾«Å œ#»hu¦î<)›Gä”|YŠè ¯†n&ox>/rq‘OYklšÈ÷%S¯Ý :h–Äò!O}«Ù6d’ÀïKy¨Ö2a½ëHv¥ÓA€¾ý;y¸ö4s±ð.m«ê(g¥ä"aŸÞ[™ØU“ÒOŽÍ J ‰ Ç!!E!„!Â""@""¾"ü#;#z#¹#ø$7$v$µ$ô%3%r%±%ð&/&n&­&ì'+'j'©'è(((g(¦(å)$)d)£)â*"*a* *à++^+ž+Ý,,\,œ,Û--[-š-Ú..Y.™.Ø//X/˜/×00W0—0×11V1–1Ö22V2–2Ö33V3–3×44W4—4×55X5˜5Ø66Y6›6â7)7p7·7þ8E8Œ8Ó99a9¨9ï:7:~:Å; ;T;›;ã<* >h>¯>÷???‡?Ï@@_@§@ïA8A€AÈBBYB¡BéC2CzCÃD DTDDåE.EwE¿FFQFšFãG,GuG¾HHPH™HãI,IuI¾JJQJ›JäK-KwKÁL LTLLçM1M{MÅNNXN¢NìO6O€OÊPP_P©PóQ>QˆQÒRRgR²RüSGS‘SÜT&TqT¼UUQUœUæV1V{VÆWW[W¦WñX;X†XÑYYfY±YûZFZ‘ZÛ[$[g[«[ï\3\w\»\ÿ]C]‡]Ë^^S^—^Û__c_§_ë`/`s`·`ûa?a„aÈb bPb”bØccac¥céd-dqd¶dúe>e‚eÇf fOf“fØgg`g¥géh-hqh¶húi>i‚iÇj jOj“jØkk`k¤kèl-lqlµlùm>m‚mÆn nOn“n×oo_o¤oèp,pppµpùq=qqÅr rNr’rÖss_s£sçt,tpt´tùu=uuÅv vNv’v×ww_w£wèx,xpxµxùy=yyÆz zNz“z×{{`{¤{è|-|q|µ|ú}=}}Ä~~K~Ž~ÑX›Þ€"€e€¨€ë.rµø‚;‚~‚ÁƒƒGƒŠƒÍ„„R„•„Ø……^… …ã†&†h†«†î‡0‡s‡µ‡øˆ:ˆ}ˆ¿‰‰D‰†‰ÉŠ ŠMŠŠÒ‹‹V‹˜‹ÚŒŒ_Œ¡Œã%g©ëŽ-ŽnްŽò4v¸ù;}¾‘‘B‘ƒ‘Å’’H’‰’Ë“ “M““Д”S”””Õ••X•™•Ú––\––Þ——`—¡—â˜"˜c˜¤˜å™&™f™§™èš(šiš©šê›*›k›«›ìœ,œmœ­œí.n®ïž2žxž½ŸŸIŸŽŸÓ  ^ ¤ é¡.¡t¡¹¡þ¢D¢‰¢Î££X£ž£ã¤(¤m¤²¤÷¥<¥¥Æ¦ ¦P¦•¦Ú§§c§¨§í¨2¨v¨»©©D©‰©ÎªªWª›ªà«$«i«­«ò¬6¬{¬¿­­H­­Ñ®®Z®Ÿ®ã¯(¯l¯±¯õ°:°~°Ã±±L±±Õ²²^²¢²ç³,³p³µ³ù´>´‚´Çµ µPµ”µÙ¶¶b¶§¶ë·0·u·¹·þ¸B¸‡¸Ì¹¹U¹š¹ßº#ºhº­ºñ»6»{»À¼¼I¼Ž¼Ó½½]½¡½æ¾+¾p¾µ¾ú¿?¿„¿ÉÀ ÀSÀšÀãÁ,ÁuÁ¾ÂÂO˜ÂáÃ*ÃsüÄÄNÄ—ÄàÅ)ÅrÅ»ÆÆMÆ–ÆßÇ(ÇqǺÈÈMÈ–ÈßÉ(ÉqɺÊÊMÊ–ÊßË(ËrË»ÌÌMÌ—ÌàÍ)ÍrͼÎÎNΗÎáÏ*ÏsϼÐÐOИÐáÑ*ÑtѽÒÒOÒ˜ÒáÓ+ÓtÓ½ÔÔOÔ˜ÔáÕ+ÕtÕ½ÖÖOÖ˜Öá×*×s×¼ØØOؘØáÙ*ÙsÙ¼ÚÚNÚ˜ÚáÛ*ÛsÛ¼ÜÜNÜ—ÜàÝ*ÝsݼÞÞNÞ—Þàß)ßrß»ààNà—ààá)árá»ââMâ–âàã)ãrã»ääMä–äÜååNå„åºåïæ%æ[æ‘æÇæýç3çiçŸçÕè èAèwè­èãééNé„éºéðê&ê\ê“êÉêÿë5ëkë¡ë×ì ìCìyì¯ìåííQí‡í¾íôî*î`î–îÌïï8ïoï¥ïÛððGð}ð³ðêñ ñVñŒñÂñùò/òeò›òÒóó>ótó«óáôôMô„ôºôðõ&õ]õ“õÉöö6ölö£öÙ÷÷F÷|÷²÷éøøVøŒøÂøùù/ùfùœùÒú ú?úvú¬úãûûOû†û¼ûóü)ü`ü–üÍýý:ýpý§ýÝþþJþþ¸þîÿ%ÿ[ÿ’ÿÈÿÿ4hÑ9m¢Ö >r§ÛCx¬àI}±æNƒ·ë Tˆ½ñ&ZŽÃ÷,`”Éý 2 f › Ï  8 l ¡ Õ > s § Ü  E z ® ã  L € µ êS‡¼ñ%ZÃø,a–Êÿ4iÒ;p¥ÙCx¬áK€´éS‡¼ñ&[Äù.c˜Í7k Õ ?t©ÞI‡Ä@~»ù7u²ð.lªè%c¡ß[™×  R Î! !J!ˆ!Æ""C""¿"ý#;#y#·#ö$4$r$°$î%-%k%©%è&&&d&£&á''^'œ'Û((W(–(Ô))Q))Î* *K*Š*È++F+„+Ã,,@,,½,ü-;-y-¸-÷.6.t.³.ò/1/o/®/í0,0k0ª0è1'1f1¥1ä2#2b2¡2à33^33Ü44Z4™4Ø55V5•5Õ66S6’6Ñ77P77Î88M8Œ8Ë9 9J9‰9Ç::C::¿:ü;:;x;¶;ô<2">a>Ÿ>Ý??Y?—?Õ@@R@@ÎA AKA‰AÇBBDB‚BÀBÿC=C{CºCøD6DuD³DòE0EoE­EìF*FiF§FæG$GcG¡GàHH]HœHÚIIXI–IÕJJRJ‘JÐKKMKŒKËL LHL‡LÆMMDMƒMÂNN?N~N½NüO;OzO¹OøP8PwP¶PõQ4QsQ²QñR1RpR¯RîS-SmS¬SëT*TjT©TèU(UgU§UæV%VeV¤VäW#WcW¢WâX!XaX XÞYYWY“YÏZ ZHZ„ZÀZü[8[t[°[ì\(\d\ \Ü]]T]]Ì^^C^^»^ö_2_n_©_å` `\`˜`ÓaaJa…aÁaüb8bsb®bêc%c`cœc×ddMdˆdÄdÿe:eue°eëf&fbffØggNg‰gÄgÿh9hth¯hêi%i`i›iÖjjKj†jÁjûk6kqk¬kæl!l\l–lÑm mFm€m»mõn0njn¥nßooToŽoÉpp>pxp²píq'qaq›qÖrrJr„r¾røs3sms§sáttUttÉuu=uwu±uêv%vav¡váw!waw wàx x_xŸxßyy^yžyÝzz\zœzÛ{{Z{™{Ø||W|–|Õ}}T}“}Ò~~P~~Î L‹Ê€ €H€‡€ÆC‚Áÿ‚>‚}‚»‚úƒ9ƒwƒ¶ƒô„3„q„¯„î…,…j…©…ç†%†c†¢†à‡‡\‡š‡ØˆˆTˆ’ˆÏ‰ ‰K‰‰‰ÆŠŠBŠнŠû‹8‹v‹³‹ðŒ.ŒkŒ©Œæ#`ÛŽŽUŽ’ŽÏ I†Ã±…±Ë²²Y² ²ç³.³u³¼´´J´‘´Øµµfµ­µô¶;¶ƒ¶Ê··X· ·ç¸.¸v¸¾¹ ¹]¹¯ººQº£ºô»F»—»é¼:¼Œ¼Ý½/½½Ò¾$¾v¾Ç¿¿k¿½ÀÀaÀ³ÁÁVÁ¨ÁúÂMŸÂñÃCÕÃçÄ9ÄŒÄÞÅ0ŃÅÕÆ'ÆzÆÌÇÇqÇÄÈÈiÈ»ÉÉaɳÊÊYʬÊþËQˤË÷ÌJÌÌðÍCÍ–ÍéÎ<ÎÎãÏ6ωÏÝÐ0ЃÐÖÑ*Ñ}ÑÑÒ$ÒxÒËÓÓrÓÆÔÔmÔÁÕÕhÕ¼ÖÖcÖ·× ×_׳ØØZØ®ÙÙVÙªÙþÚRÚ¦ÚúÛNÛ£Û÷ÜKÜŸÜóÝHÝœÝðÞEÞ™ÞíßBß–ßëà?à”àéá=á’áçâ;âyâ³âîã(ãbãœã×ääKä†äÀäûå5åoåªåäææYæ”æÎç çCç~ç¹çóè.èiè£èÞééSéŽéÉêê?êyê´êïë*ëeë ëÛììQìŒìÇíí=íxí´íïî*îeî îÜïïRïŽïÉðð@ð{ð·ðòñ.ñiñ¥ñàòòWò“òÏó óFó‚ó¾óùô5ôqô­ôéõ$õ`õœõØööPöŒöÈ÷÷@÷|÷¹÷õø1ømø©øåù"ù^ùšù×úúOúŒúÈûûAû~ûºû÷ü3üpü¬üéý&ýbýŸýÜþþUþ’þÏÿ ÿHÿ…ÿÂÿÿ=z¶ó0m©æ#`ÙSÍ GƒÀý:w´ñ.k¨å"^›ØRÌ F ƒ À þ ; x µ ò / l © æ # ` Û  U ’ Ï I‡Ä>{¹ö3p­ë(e¢àZ—ÕOÊD‚¿ü:w´ò/lªç%bŸÝX•ÒM‹ÈC€¾û9v´ñ/lªç%b ÞY˜Ü"g¬ò 7 | Á!!L!‘!×""a"§"ì#2#w#¼$$G$$Ò%%]%£%è&.&s&¹&þ'D'‰'Ï((Z( (å)+)q)¶)ü*B*‡*Í++X+ž+ä,*,o,µ,û-A-†-Ì..X..ã/)/o/´/ú0@0†0Ë11W1œ1â2(2n2³2ù3?3„3Ê44U4›4á5&5l5²5ø6=6ƒ6É77T7š7à8%8k8±8÷9=9‚9È::T:š:ß;%;k;±;÷<=<ƒ<È==T=š=à>&>l>²>ø?>?„?Ê@@V@œ@âA)AnA²AõB9B|BÀCCGC‹CÎDDVD™DÝE!EeE¨EìF0FtF¸FüG@G„GÈH HPH”HØII`I¤IèJ,JpJ´JøK=KKÅL LNL’LÖMM_M£MèN,NqNµNúO>OƒOÇP PPP•PÚQQcQ¨QìR1RvR»RÿSDS‰SÎTTXTTâU'UlU±UöV;V€VÅW WOW”WÙXXdX©XîY3YxY¾ZZHZZÒ[[\[¡[æ\+\p\´\ù]>]ƒ]È^ ^Q^–^Û__d_¨_í`2`v`»`ÿaDaˆaÌbbUbšbÞc"cfcªcëd,dmd®dïe0eqe²eóf4fuf¶f÷g8gxg¹gúh;h|h¼hýi>ii¿jjAjjÂkkCk„kÄllEl…lÆmmFm‡mÇnnGnˆnÈooHoˆoÈppHpˆpÈqqGq‡qÇrrFr†rÆssEs…sÄttCt‚tÂuuAu€u¿uþv>v}v¼vûw:wyw¸w÷x6xux´xóy2yqy°yïz-zlz«zê{({g{¦{ä|#|a| |Þ}}[}š}Ø~~U~“~ÒNŒË€ €G€…€Ä@~¼ú‚8‚v‚´‚òƒ0ƒpƒ²ƒô„6„x„º„ü…>…€…††F†ˆ†É‡ ‡M‡Ž‡ÐˆˆSˆ”ˆÖ‰‰Y‰š‰ÛŠŠ]ŠŸŠà‹!‹b‹£‹äŒ%ŒeŒ¦Œç(h©êŽ*ŽkŽ«Žì,l­í-m®î‘.‘n‘®‘î’.’m’­’í“-“l“¬“ë”+”j”ª”é•)•h•§•æ–%–d–¤–â—!—`—Ÿ—Þ˜˜[˜š˜Ù™™V™”™ÓššPšŽšÌ› ›I›‡›ÅœœAœœ½œû8v´òž/žmž«žèŸ&ŸcŸ¡ŸÞ  Y – Ô¡¡N¡‹¡É¢¢C¢€¢½¢ú£:£|£¾¤¤B¤„¤Æ¥¥I¥‹¥Í¦¦P¦‘¦Ó§§V§˜§Ù¨¨\¨¨Þ© ©a©¢©ãª$ªfª§ªè«)«j«««ì¬,¬m¬®¬ï­0­p­±­ò®3®t®µ®ö¯7¯x¯¹¯ú°;°}°¾°ÿ±@±‚±Ã²²F²‡²É³ ³L³³Ï´´R´”´ÖµµYµ›µÝ¶¶a¶£¶å·'·i·«·í¸/¸q¸´¸ö¹8¹z¹½¹ÿºBº„ºÇ» »L»»Ñ¼¼W¼™¼Ü½½b½¥½è¾+¾n¾±¾ô¿7¿z¿½ÀÀDÀ‡ÀÊÁÁQÁ•ÁØÂÂ_Â£ÂæÃ*ÃnòÃõÄ4ÄqÄ®ÄêÅ'ÅdÅ¡ÅÞÆÆXÆ•ÆÒÇÇMÇŠÇÇÈÈBÈȼÈúÉ7ÉtɲÉïÊ-ÊkÊ¨ÊæË#ËaËŸËÝÌÌXÌ–ÌÔÍÍPÍŽÍÌÎ ÎHΆÎÄÏÏ@Ï~ϼÏúÐ8ÐvеÐóÑ1ÑoÑ®ÑìÒ*ÒiÒ§ÒåÓ$ÓbÓ¡ÓßÔÔ\Ô›ÔÙÕÕVÕ•ÕÔÖÖQÖÖÎ× ×L׊×ÉØØG؆ØÄÙÙBÙÙÀÙÿÚ=Ú|Ú»ÚúÛ9ÛxÛ·ÛöÜ5ÜtܳÜòÝ1ÝpݯÝïÞ.ÞmÞ¬Þëß*ßiß©ßèà'àfà¦àåá$ádá£áãâ"âaâ¡âàããYã’ãËää<äuä­äæååXå‘åÉææ;ætæ­ææççXç‘çÊèè<èuè®èçé éYé’éËêê>êwê°êéë#ë\ë•ëÎììAìzì´ìíí'í`í™íÓî îFîî¹îòï,ïeïŸïÙððLð†ð¿ðùñ3ñlñ¦ñàòòSòòÇóó;óuó®óèô"ô\ô–ôÐõ õDõ~õ¸õòö,ögö¡öÛ÷÷O÷‰÷Ä÷þø8ørø­øçù!ù\ù–ùÐú úEúúºúôû/ûiû¤ûÞüüTüŽüÉýý>ýyý³ýîþ)þcþžþÙÿÿNÿ‰ÿÄÿÿ:t¯é#]—Ò F»õ/j¤ßSŽÈ=x²ì'aœ×L†Áû6q«æ ! [ – Ñ F ¼ ö 1 l § â  W ’ Í  C ~ ¹ ô.i¤ßUËB}¸ó.i¤ßV‘ÌC~¹ô0k¦áX“Ï E¼ø3nªå!\˜ÓJ†Áý8t°ë'bžÚQÈ@Ç[¥ï8‚Ì  ` ª ô!>!ˆ!Ò""f"°"û#E##Ù$#$m$¸%%L%–%á&+&u&À' 'U'Ÿ'é(4(~(É))^)¨)ó*=*ˆ*Ò++h+²+ý,G,’,Ý-'-r-½..R..è/3/~/È00^0©0ô1?1Š1Õ2 2k2¶33L3—3â4-4y4Ä55Z5¥5ñ6<6‡6Ò77h7³7þ8I8”8ß9*9u9¿: :U:Ÿ:ê;5;;Ê<<_<©<ô=>=‰=Ó>>h>²>ü?G?‘?Û@%@o@¹AAMA—AáB+BuB¿C CSCCçD2D|DÆEEZE¤EîF9FƒFÍGGbG¬GöH@H‹HÕIIjI´IÿJIJ“JÞK(KsK½LLRLLçM2M}MÇNN]N§NòO=O‡OÒPPhP³PýQHQ“QÞR)RtR¿S SUS SëT6TTÌUUcU®UùVDVVÛW&WrW½XXTXŸXëY6Y‚YÍZZdZ¯Zû[F[‘[Ü\'\r\¼]]R]œ]æ^1^{^Å__Y_£_í`7``Êaa]a§aðb9b‚bËcc]c¦cïd8d€dÉeeZe¢eêf3f{fÃg gSg›gåh3h‚hÐiimi»j jWj¥jókAkŽkÜl*lwlÅmm`m®mûnHn–não1o~oËppfp³qqMqšqçr4rrÎsshsµttOt›tèu5u‚uÎvvgv´wwMw™wåx2x~xÊyycy¯yûzGz“zß{+{w{Ã||[|§|ò}>}Š}Ö~!~m~¸P›æ€2€}€É_ªö‚A‚Œ‚׃"ƒmƒ¹„„O„š„å…0…{…Ɔ†\†§†ò‡=‡ˆ‡Óˆˆhˆ³ˆþ‰H‰“‰ÝŠ(Šrн‹‹Q‹œ‹æŒ0ŒzŒÅY£÷ŽT޲lÉ'„á‘>‘›‘ø’U’±““k“Ç”$”€”Ý•9•••ò–N–ª——b—¾˜˜u˜Ñ™-™ˆ™äš@š›šö›R›­œœdœ¿uО*ž…žßŸ:Ÿ”Ÿî H ¡ û¡T¡®¢¢`¢¹££j£Ã¤¤t¤Ì¥$¥|¥Ó¦+¦ƒ¦Ú§1§‰§à¨6¨¨ä©:©‘©çª=ª“ªé«?«•«ë¬@¬–¬ì­A­—­í®C®˜®î¯D¯š¯ð°F°œ°ò±H±ž±ô²J² ²ö³L³¢³ø´N´¤´ûµQµ§µý¶S¶ª··V·­¸¸Y¸°¹¹]¹³º º[º©º÷»E»“»á¼/¼~¼Ì½½h½¶¾¾S¾¡¾ï¿>¿Œ¿ÛÀ)ÀxÀÆÁÁdÁ³ÂÂQ ÂïÃ>ÃÃÝÄ,Ä{ÄËÅÅjÅºÆ ÆZÆ©ÆùÇIÇšÇêÈ:ÈŠÈÛÉ+É{ÉÌÊÊmʾËË`˱ÌÌSÌ¥Ì÷ÍHÍšÍìÎ>ΑÎãÏ6ψÏÛÐ.ÐÐÔÑ'Ñ{ÑÎÒ"ÒvÒÊÓÓrÓÇÔÔpÔÄÕÕnÕÄÖÖoÖÄ××pׯØØrØÉÙ ÙvÙÍÚ$Ú|ÚÓÛ+Û‚ÛÚÜ2ÜŠÜãÝ;Ý”ÝíÞFÞŸÞøßRß«àà_à¹áánáÈâ#â~âÙã5ãˆã¿ãßãÿää?ä_ääŸä¿äßäÿåå@å`å€å åÀåáææ!æBæbæ‚æ£æÃæäçç%çEçfç†ç§çÈçèè è)èJèkèŒè¬èÍèîéé0éQéqé’é³éÔéõêê7êXêzê›ê¼êÝêþëëAëbëƒë¤ëÆëçì ì*ìKìmìŽì°ìÑìóíí6íXíyí›í½íÞîî"îDîeî‡î©îËîíïï1ïSïuï—ï¹ïÛïýððAðdð†ð¨ðÊðíññ1ñTñvñ˜ñ»ñÝòò"òEògòŠò¬òÏòòóó7óZó}óŸóÂóåôô+ôIôcô}ô“ôªôÁô×ôîõõõ2õIõ`õwõŽõ¤õ»õÒõéööö.öDö[örö‰ö ö·öÎöåöü÷÷*÷A÷X÷o÷†÷÷´÷Ë÷â÷ùøø(ø?øVømø„ø›ø³øÊøáøøùù'ù>ùUùmù„ù›ù³ùÊùáùùúú'ú?úVúmú…úœú´úËúãúúûû)ûAûXûpû‡ûŸû¶ûÎûæûýüü,üDü\üsü‹ü£üºüÒüêýýý1ýIýaýxýý¨ýÀýØýïþþþ7þOþgþþ—þ¯þÇþßþ÷ÿÿ&ÿ>ÿWÿoÿ‡ÿŸÿ·ÿÏÿçÿÿmft29UpŠ£¼Ô ë   ,@Tgy‹›¬»ÊØåòÿ ) 2!:"A#H$N%T&X'\(_)b*c+d,d-c.b/`0]1Z2V3Q4L5F6@78809':;<<û=î>à?Ñ@ÂA²B£C”D†EyFlG`HUIJJ@K6L.M&NOPQR STUVWXYZ[\] ^ _`abc d&e,f2g9hAiIjRk\lgmrnoŒpšq¨r¸sÈtØuêvýxy$z9{N|e}|~”­€Çâ‚ý„…0†I‡aˆw‰ŽŠ£‹¸ŒËÞŽñ‘’#“2”@•N–Z—f˜r™|š†›œ˜ ž§Ÿ­ ±¡µ¢¸£º¤¼¥¼¦»§¹¨¶©³ª®«©¬¢­›®“¯Š°±v²k³^´QµC¶4·%¸¹¹ñºÞ»Ê¼µ½Ÿ¾‰¿qÀYÁ@Â&à ÃôÄÛÅÃÆ¬Ç•È~ÉhÊSË>Ì)ÍÎÎîÏÜÐÊѺҪӚԌÕ~Öq×eØZÙPÚGÛ?Ü8Ý1Þ,ß(à%á#â"ã"ä#å%æ(ç-è3é9êAëJìTí`îlïzð‰ñ™òªó½ôÑõæöüøù,úFûaü~ýœþ»ÿÛÿÿÿÿùóíçáÛÕÏÊ Ä ¾ ¸ ³ ­§¢œ—’Œ‡‚}xsojea\XS O!K"G#D$@%=&9'5(1)-*)+%, -./01 2 3456789:;< = >?@A!B&C+D0E5F:G?HDIIJOKTLZM`NfOlPrQxRS…TŒU“V™W X§Y¯Z¶[½\Ä]Ì^Ô_Ü`äaìbôcýefgh i)j1k:lBmInQoXp_qfrlsrtwu{vw‚x…y†z‡{‡|‡}†~ƒ€}z‚vƒr„n…i†d‡_ˆY‰TŠN‹HŒB<Ž60*‘$’“”•– —˜™™ÿšý›ýœþÿŸ ¡ ¢£¤¥&¦/§9¨D©Oª\«j¬x­†®”¯£°²±Â²Ò³â´ó¶·¸&¹8ºJ»[¼m½¾‘¿£ÀµÁÈÂÙÃêÄûÆ ÇÈ(É6ÊDËQÌ]ÍiÎuÏЉђҚӡԧի֯ײشٶڶ۶ܵݳް߮àªá§â¢ãžä˜å“æŒç†è~évêmëdìZíOîDï8ð,ñòóóõôåõÕöÅ÷´ø¢ùú}ûiüUý@þ+ÿÿÿòæÙÍÀ´¨‘ † z o d YND9/%ÿöíäÜÔÌŽ¶° ©!¢"œ#•$%‰&ƒ'|(v)p*j+e,`-[.V/S0O1L2I3G4E5C6B7A8@9?:?;???@@BADBGCJDNERFWG]HcIkJrK{L„MN™O¥P²Q¿RÍSÜTëUúW XY&Z4[C\Q]^^l_y`†a’bžcªdµeÀfËgÕhßiéjòkûmnopq'r0s8t?uGvNwUx[yazg{l|q}v~z}€ƒ‚†ƒˆ„Š…Œ†Ž‡ˆ‰Š‘‹‘Œ‘‘Ž‘‘‘’“”•–‘—‘˜’™“š”›–œ—™ž›Ÿ ž¡ ¢¢££¤¤¥¥¦¦§¦¨§©§ª¦«¦¬¥­¤®£¯¡°Ÿ±²š³—´”µ‘¶Ž·Š¸†¹º}»x¼s½m¾h¿bÀ[ÁUÂOÃJÄDÅ>Æ8Ç3È-É(Ê"ËÌÍÎÏ ÐÑÑüÒøÓôÔðÕíÖê×èØæÙåÚäÛãÜäÝåÞçßéàìáïâóã÷äüæçè éêëì&í-î5ï>ðGñPòZódôoõzö…÷‘øùªú·ûÅüÓýáþðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûîÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿæÎÿÚîÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâÒÓ9å$ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÓÖxÃ=ûÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛ§R¯”éNÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýþ¸ø©N»Kò™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿú³åæÜ ÚÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿéùÔ îÛÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàV´'›$תÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþy·¬ƒg…îÄáÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÕaŽû‚¡‘)ÎÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÎbصó³çÛAÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóò¯ý¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿû¨ïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõ¤ÌH¶4Ì:ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÂ"“ày+µ ôyÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÝ<š^%^¥"æýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ°;c“\›e«LìœÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŸ š7¸Ñ²‘ûÁÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿñÊÝÐ[ҀݠÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöÀÚÍÊgÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÚ¯i›;©‡òPÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿë£ÑtèY’üØdÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ»¡z =?7܈Èÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿš²3O3’AHˆÝÏ‹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿o¡k˜oÝŒfÚdÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¸§¯¹²NºÅê0ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿAÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿù°ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÞ»½³£_ùGÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿù¹¿Q’ltŽƒLÔ0ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÇÞƒ´V!8Nr†¼ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ–èTbØÑlD© ñSÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¼Q ,ǵd9±ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâQEŸCLZŸ¶ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‘š‹j¼•À†ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿçÝ÷ßyåÒðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿî7Óü5ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷Á?˜-u@ÖÛÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛŸ¡‰tSM»PµÎÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¨èa”24dMYœªíÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¯g$GÛƒ·ÔÇÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÕ˜M]8'/áÆÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ¶†šƒÉŠ‹ÕðÞÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÁ _d ht‹rú–ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ´¸·½NÅÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷}ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿì«ÈÜ¥2ËÙÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿˆÒ›Õl2;Àª³ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¹§uòIŠ äéÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ§ý6ŽUv¥ÌOÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÃèMT[̳‡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿå¿z#dî»þÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ®Q ÇgÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿäÊS&)t+9|ÉÕÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¡…E‰‚ŽOÍÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿôgåñëlöÚÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿå7ܵÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷£ÅÈ™ {ÿˆªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÝí¡d§.ç il´èvÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿpEÛÇSëÃÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¸#£>¥¡ûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÖ=k¶ ‡ôí·ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÈ—ú7¦YŽõÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÇØUéûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ‰,†vÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÍ#>ÄCPGEv’ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¬±Ç»Å6ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûÚÝ]ÍËÅéÝkÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüä¼”¤.¦z¹pïq–´rÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ~ÞCz<85F¼ .2ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ΂GbnõÝHÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿé;…Ÿ)œJ8ÂÃÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¯ZKIÝÆ2ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÜë}§?ÄÍ÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ±3$.1ì1tÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿówׄ”¾Ÿ(Ñ…ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÒäàQòÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ,ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿî’Ò†À§²|­C¯ó¸0üŽÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ­·~½pngƒ_´TÛJ¸Ô=ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâÒjH(+(x öàªÛÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûJšµ@6‹\ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÃtr‹(ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿñšÒ"C*æ!8<ŒtÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÍäb©lNwÁ}'„‚ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ±R»2ËÐÝGï5ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿö1àdÔ“ÔLÜ‘çÐùÞÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÎਘ”®‹<…’‡w„üš¥ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöZ}üLùB}4f Óg ó²ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¯ WÀ;ÆÚõÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÖ‡<ôô;Úaÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ²ÁT8[»[õ[SXàªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿè{ö›ƒ©´ÃÄAâlÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÚöå®ö¼ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüñò¢ü•ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿí¤ÊT³¡©1¥«t²´øóBÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿš›jæ\TŠ;·.Ê#¼ŽÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÃ3o3™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿéÅœ@7)@?%3­)5š|ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÈsÚ~¯‡]͘y¢Aÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ´²3Á¬Ðºàûö’ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüOÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿèzÏÇÁØÂ‡ÊáØæÞ;ò¤ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¶Æ…¶w§sWdTaŽa-r'ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿØ©‡×‹¤>)ýVÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ²ÇTŽapf]mmîr†ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÞ»Ž´ž«ç¼Ì‹ÝÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÖ¢àòÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿëJÜDߦêoúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÔ,¡%•}“ŒØŽ•–Ñ +Ù<ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿòi£I.ˆ9Ì=p<ø7.¹¯ØÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿËØs¸ƒ3Œ_Ÿ© ¶bÅqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷®:½ÛÍïãYûpÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿôÌþjÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùáýóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿòî¿á¶u´=´×¹ÑÈÊØëì£ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÁ›W c®o1v„—ˆsÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿè6•˦î´QÉáßLóoÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏ?ß*ð¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿãØÙ׷ݳãùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ㾂€ ª±4ÃÑÖªæ ùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ»šÍrÝ€óæÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ !!##%%''))++--//1133557799;;==??AACCEEGGIIKKMMOOQQSSUUWWYY[[]]__aacceeggiikkmmooqqssuuwwyy{{}}ƒƒ……‡‡‰‰‹‹‘‘““••——™™››ŸŸ¡¡££¥¥§§©©««­­¯¯±±³³µµ··¹¹»»½½¿¿ÁÁÃÃÅÅÇÇÉÉËËÍÍÏÏÑÑÓÓÕÕ××ÙÙÛÛÝÝßßááããååççééëëííïïññóóõõ÷÷ùùûûýýÿÿtextCTI3 DESCRIPTOR "Argyll Calibration Target chart information 3, + grey wedge extras" ORIGINATOR "Argyll printread" CREATED "Thu Jul 03 16:12:41 2003" KEYWORD "DEVICE_CLASS" DEVICE_CLASS "OUTPUT" KEYWORD "TARGET_INSTRUMENT" TARGET_INSTRUMENT "GretagMacbeth SpectroScan" KEYWORD "FULL_SPREAD_PATCHES" FULL_SPREAD_PATCHES "2346" KEYWORD "TOTAL_INK_LIMIT" TOTAL_INK_LIMIT "410.0" KEYWORD "COLOR_REP" COLOR_REP "CMYK_XYZ" KEYWORD "SPECTRAL_BANDS" SPECTRAL_BANDS "36" KEYWORD "SPECTRAL_START_NM" SPECTRAL_START_NM "380.000000" KEYWORD "SPECTRAL_END_NM" SPECTRAL_END_NM "730.000000" KEYWORD "SPEC_380" KEYWORD "SPEC_390" KEYWORD "SPEC_400" KEYWORD "SPEC_410" KEYWORD "SPEC_420" KEYWORD "SPEC_430" KEYWORD "SPEC_440" KEYWORD "SPEC_450" KEYWORD "SPEC_460" KEYWORD "SPEC_470" KEYWORD "SPEC_480" KEYWORD "SPEC_490" KEYWORD "SPEC_500" KEYWORD "SPEC_510" KEYWORD "SPEC_520" KEYWORD "SPEC_530" KEYWORD "SPEC_540" KEYWORD "SPEC_550" KEYWORD "SPEC_560" KEYWORD "SPEC_570" KEYWORD "SPEC_580" KEYWORD "SPEC_590" KEYWORD "SPEC_600" KEYWORD "SPEC_610" KEYWORD "SPEC_620" KEYWORD "SPEC_630" KEYWORD "SPEC_640" KEYWORD "SPEC_650" KEYWORD "SPEC_660" KEYWORD "SPEC_670" KEYWORD "SPEC_680" KEYWORD "SPEC_690" KEYWORD "SPEC_700" KEYWORD "SPEC_710" KEYWORD "SPEC_720" KEYWORD "SPEC_730" NUMBER_OF_FIELDS 44 BEGIN_DATA_FORMAT SAMPLE_ID CMYK_C CMYK_M CMYK_Y CMYK_K XYZ_X XYZ_Y XYZ_Z SPEC_380 SPEC_390 SPEC_400 SPEC_410 SPEC_420 SPEC_430 SPEC_440 SPEC_450 SPEC_460 SPEC_470 SPEC_480 SPEC_490 SPEC_500 SPEC_510 SPEC_520 SPEC_530 SPEC_540 SPEC_550 SPEC_560 SPEC_570 SPEC_580 SPEC_590 SPEC_600 SPEC_610 SPEC_620 SPEC_630 SPEC_640 SPEC_650 SPEC_660 SPEC_670 SPEC_680 SPEC_690 SPEC_700 SPEC_710 SPEC_720 SPEC_730 END_DATA_FORMAT NUMBER_OF_SETS 2376 BEGIN_DATA 1 0.0000 0.0000 0.0000 0.0000 88.550 91.595 76.393 3.9500 2.2000 2.7300 14.370 52.690 88.130 99.110 99.640 97.970 95.960 94.200 92.860 91.960 91.370 91.230 90.920 90.960 91.020 90.980 91.400 91.460 91.660 91.790 92.060 92.330 92.390 92.700 93.060 93.360 93.430 93.480 93.570 93.780 94.060 94.220 94.570 2 0.0000 0.0000 0.0000 0.0000 88.383 91.406 76.276 3.9300 2.1300 2.6300 14.420 52.700 88.110 98.990 99.470 97.800 95.790 94.020 92.660 91.770 91.190 91.040 90.720 90.760 90.820 90.780 91.200 91.260 91.480 91.620 91.880 92.150 92.230 92.530 92.920 93.200 93.270 93.300 93.420 93.620 93.940 94.110 94.440 3 0.0000 0.0000 0.0000 0.0000 89.438 92.534 78.421 4.2100 2.3000 2.7100 14.520 53.980 91.040 102.34 102.61 100.55 98.220 96.170 94.610 93.510 92.760 92.490 92.050 91.990 91.950 91.840 92.180 92.170 92.340 92.440 92.620 92.840 92.880 93.090 93.410 93.650 93.660 93.690 93.720 93.940 94.230 94.310 94.610 4 0.0000 0.0000 0.0000 0.0000 88.341 91.367 76.290 4.0400 2.0800 2.6900 14.400 52.760 88.160 99.020 99.500 97.820 95.790 94.010 92.650 91.740 91.170 91.010 90.690 90.740 90.800 90.730 91.130 91.230 91.440 91.580 91.800 92.070 92.160 92.470 92.870 93.160 93.230 93.280 93.360 93.580 93.890 94.100 94.430 5 100.00 54.016 3.2272 93.087 1.2826 1.3196 2.1682 0.19000 0.50000 1.00000 1.9600 2.8200 3.1100 3.0900 2.8900 2.6400 2.4100 2.1900 2.0500 1.9100 1.7900 1.6700 1.5200 1.4000 1.2700 1.1400 1.0700 1.0500 1.0600 1.0600 1.0600 1.0500 1.0600 1.0600 1.0900 1.1300 1.1600 1.1600 1.1500 1.1300 1.1400 1.1500 1.2600 6 58.158 6.9212 0.42485 92.636 2.2006 2.3627 2.9446 0.48000 0.46000 1.00000 2.1900 3.4200 3.9200 4.0000 3.8400 3.6000 3.4200 3.2500 3.1400 3.0400 2.9600 2.8600 2.7300 2.5700 2.3700 2.1800 2.0500 2.0000 1.9700 1.9600 1.9500 1.9700 1.9800 2.0000 2.0400 2.1000 2.1400 2.1400 2.1500 2.1500 2.1600 2.1800 2.3100 7 100.00 0.0000 0.0000 92.368 1.5301 1.8114 2.8381 0.45000 0.53000 1.0500 2.1200 3.2200 3.6900 3.8200 3.7000 3.5100 3.3200 3.1800 3.0800 2.9600 2.8600 2.7100 2.4900 2.2000 1.8600 1.5300 1.3100 1.2100 1.1500 1.1000 1.0900 1.0800 1.0800 1.0900 1.1100 1.1600 1.1800 1.1800 1.1900 1.1500 1.1600 1.2200 1.2600 8 100.00 0.0000 49.064 97.314 1.1901 1.3220 1.7197 0.51000 0.50000 0.99000 1.8200 2.3500 2.4800 2.4400 2.2300 2.0200 1.8500 1.7300 1.6800 1.7200 1.7800 1.7700 1.6700 1.5300 1.3600 1.2000 1.1000 1.0400 1.0200 1.00000 0.99000 1.0100 1.00000 1.0100 1.0200 1.0500 1.0700 1.0500 1.0500 1.0600 1.0600 1.1000 1.1400 9 100.00 29.109 0.0000 100.00 1.1142 1.1381 1.6865 0.36000 0.50000 0.97000 1.7800 2.3400 2.4700 2.4300 2.2200 2.0100 1.8300 1.6800 1.5600 1.4800 1.4100 1.3500 1.2800 1.2000 1.1200 1.0400 0.99000 0.97000 0.96000 0.96000 0.95000 0.95000 0.97000 0.97000 0.98000 1.00000 1.0300 1.0200 1.0200 1.0200 1.0200 1.0500 1.0900 10 100.00 100.00 0.0000 92.634 1.1132 1.0065 1.8018 0.16000 0.38000 0.91000 1.8200 2.6200 2.8300 2.7300 2.4600 2.1600 1.8800 1.6300 1.4400 1.2700 1.1600 1.0400 0.96000 0.92000 0.90000 0.89000 0.89000 0.92000 0.95000 0.99000 1.00000 1.00000 1.0100 1.0100 1.0400 1.0800 1.1200 1.1100 1.0900 1.0800 1.0900 1.1000 1.2200 11 55.682 100.00 39.430 92.245 1.4597 1.1882 1.6759 0.26000 0.42000 0.91000 1.8800 2.5300 2.6500 2.5500 2.2700 1.9700 1.7200 1.5000 1.3500 1.2400 1.1400 1.0400 0.95000 0.92000 0.92000 0.91000 0.94000 1.0600 1.3100 1.5400 1.6900 1.7700 1.8300 1.8600 1.9200 1.9700 2.0300 2.0400 2.0300 2.0400 2.0600 2.0900 2.2100 12 63.402 100.00 38.308 100.00 1.3605 1.2464 1.6305 0.44000 0.77000 1.1400 1.9600 2.4100 2.5000 2.3900 2.1500 1.9100 1.7300 1.5500 1.4300 1.3300 1.2700 1.2100 1.1600 1.1400 1.1200 1.1200 1.1400 1.1700 1.2600 1.3400 1.3900 1.4300 1.4500 1.4700 1.5100 1.5500 1.5800 1.5800 1.5900 1.6000 1.6200 1.6200 1.7600 13 75.185 73.034 88.269 93.482 1.3219 1.2597 1.5077 0.32000 0.41000 0.95000 1.7800 2.2600 2.3300 2.2100 1.9700 1.7500 1.5600 1.4200 1.3400 1.3500 1.3700 1.3300 1.2500 1.2000 1.1700 1.1300 1.1200 1.1600 1.2500 1.3200 1.3500 1.3700 1.4000 1.4200 1.4600 1.5000 1.5400 1.5500 1.5400 1.5300 1.5400 1.5800 1.6800 14 0.0000 100.00 0.0000 100.00 1.4318 1.1422 1.4968 0.26000 0.49000 0.89000 1.8000 2.2600 2.3900 2.2600 2.0100 1.7800 1.5300 1.3600 1.1900 1.0900 1.0100 0.95000 0.90000 0.87000 0.87000 0.87000 0.89000 1.0100 1.2500 1.5300 1.7100 1.8400 1.9200 1.9700 2.0400 2.1000 2.1300 2.1800 2.2300 2.2600 2.3200 2.3800 2.4400 15 0.0000 100.00 0.0000 93.474 2.1432 1.5768 1.9476 0.34000 0.48000 1.0300 2.0200 2.9100 3.1400 2.9800 2.6400 2.3100 1.9900 1.7300 1.5400 1.3800 1.2500 1.1500 1.0500 1.0200 1.0200 1.0300 1.0900 1.3500 1.9100 2.4600 2.8500 3.0700 3.1900 3.2700 3.3500 3.4300 3.4800 3.5100 3.5600 3.6100 3.6700 3.7200 3.8200 16 43.185 0.0000 100.00 95.696 1.8370 1.9504 1.5672 0.51000 0.51000 1.0600 1.8200 2.2700 2.3200 2.2100 1.9900 1.7700 1.6100 1.5000 1.5200 1.7600 2.0600 2.1900 2.1800 2.1100 2.0200 1.9300 1.8700 1.8400 1.8400 1.8500 1.8500 1.8700 1.8900 1.9100 1.9500 2.0200 2.0500 2.0600 2.1000 2.0800 2.1300 2.1500 2.2600 17 63.137 0.0000 58.893 94.751 1.6143 1.7819 1.8232 0.42000 0.41000 0.97000 1.8000 2.4500 2.6000 2.5200 2.3500 2.1200 1.9700 1.8500 1.8500 2.0100 2.1800 2.2200 2.1500 2.0200 1.8600 1.6900 1.5800 1.5300 1.5000 1.4900 1.4800 1.4900 1.5000 1.5200 1.5600 1.6100 1.6500 1.6600 1.6500 1.6700 1.6600 1.7400 1.7800 18 63.948 15.915 100.00 100.00 1.3563 1.3797 1.5084 0.45000 0.62000 1.0200 1.8400 2.2300 2.3000 2.1600 1.9700 1.7400 1.5700 1.4300 1.3700 1.4200 1.5000 1.5300 1.4900 1.4400 1.3800 1.3200 1.2800 1.2800 1.2900 1.3000 1.3100 1.3300 1.3300 1.3600 1.3800 1.4100 1.4500 1.4400 1.4500 1.4800 1.4700 1.5200 1.5600 19 0.0000 100.00 100.00 96.037 1.9369 1.5082 1.5303 0.49000 0.67000 1.0900 1.9300 2.3300 2.3700 2.2500 2.0200 1.7800 1.5900 1.4300 1.3200 1.2700 1.2400 1.1700 1.0900 1.0700 1.0700 1.0800 1.1200 1.3300 1.7900 2.2500 2.5700 2.7600 2.8600 2.9400 3.0200 3.0800 3.1300 3.1700 3.2200 3.2800 3.3100 3.3800 3.4800 20 37.242 25.944 0.0000 97.408 1.7087 1.6554 1.9834 0.21000 0.40000 0.90000 1.8300 2.6500 2.8700 2.8300 2.6100 2.3700 2.1700 2.0200 1.9000 1.8100 1.7600 1.7000 1.6600 1.6100 1.5700 1.5200 1.5100 1.5400 1.6000 1.6500 1.7000 1.7400 1.7600 1.8000 1.8500 1.9000 1.9400 1.9700 1.9800 2.0000 2.0200 2.0900 2.1600 21 0.0000 59.098 100.00 93.379 2.3279 1.9921 1.5409 0.50000 0.67000 1.0500 1.8600 2.2900 2.3400 2.2100 1.9900 1.7700 1.5900 1.4600 1.4300 1.5300 1.6500 1.6700 1.6300 1.6200 1.6300 1.6600 1.7100 1.9300 2.3200 2.7000 2.9600 3.1300 3.2100 3.2900 3.3700 3.4400 3.4800 3.5200 3.6000 3.6300 3.6900 3.7800 3.8500 22 0.0000 43.435 74.494 100.00 1.5262 1.3653 1.4177 0.28000 0.46000 0.88000 1.6900 2.1600 2.2100 2.1000 1.8700 1.6400 1.4500 1.3000 1.2200 1.2000 1.2200 1.2300 1.2100 1.2100 1.2200 1.2200 1.2600 1.3400 1.4700 1.6100 1.7000 1.7800 1.8300 1.8800 1.9200 1.9900 2.0200 2.0700 2.1200 2.1600 2.1900 2.2600 2.3400 23 0.0000 60.190 0.0000 95.469 2.2176 1.8870 2.1240 0.40000 0.61000 1.0500 2.0200 2.9800 3.1700 3.1000 2.8400 2.5200 2.3000 2.0600 1.9100 1.7800 1.6900 1.6200 1.5600 1.5400 1.5500 1.5400 1.6100 1.7700 2.1000 2.4100 2.6000 2.7500 2.8100 2.8900 2.9500 3.0300 3.0500 3.1000 3.1400 3.1900 3.2600 3.2700 3.4300 24 29.916 43.772 56.526 93.235 2.1885 2.0698 1.9248 0.49000 0.61000 1.0700 1.9400 2.6500 2.7800 2.7200 2.5100 2.2600 2.0600 1.9300 1.8800 1.9100 2.0200 2.0100 1.9600 1.9300 1.9100 1.8900 1.9000 1.9900 2.1700 2.3200 2.4300 2.5000 2.5500 2.5800 2.6500 2.7100 2.7500 2.7900 2.8000 2.8500 2.8500 2.8900 3.0200 25 0.0000 0.0000 100.00 97.222 2.0436 2.0175 1.4515 0.29000 0.40000 0.93000 1.7500 2.1300 2.2000 2.1000 1.8700 1.6400 1.4600 1.3400 1.3400 1.5100 1.7700 1.9200 1.9600 2.0000 2.0100 2.0300 2.0700 2.1000 2.1300 2.1700 2.2000 2.2500 2.2900 2.3400 2.4000 2.4600 2.5000 2.5200 2.5700 2.6300 2.6700 2.7400 2.8300 26 27.369 0.0000 100.00 91.778 2.6211 2.8109 1.5916 0.40000 0.42000 0.90000 1.7500 2.2100 2.2900 2.1600 1.9500 1.7500 1.6200 1.5400 1.7100 2.1900 2.7900 3.0700 3.0900 3.0300 2.9300 2.8400 2.7900 2.7700 2.7800 2.7800 2.8000 2.8400 2.8700 2.9000 2.9700 3.0300 3.0900 3.1100 3.1400 3.1600 3.1800 3.2700 3.3400 27 0.0000 34.088 100.00 92.107 2.8585 2.6546 1.5954 0.52000 0.56000 1.1000 1.8400 2.3100 2.3400 2.2100 2.0100 1.8000 1.6400 1.5400 1.6000 1.8800 2.2300 2.3800 2.3800 2.4000 2.4200 2.4400 2.5200 2.7000 3.0100 3.3000 3.4900 3.6200 3.6900 3.7600 3.8400 3.9100 3.9600 4.0100 4.0500 4.1100 4.1700 4.2400 4.3500 28 100.00 13.252 0.0000 71.952 2.9603 3.9519 7.2493 0.45000 0.63000 1.1500 3.2100 6.6800 8.6700 9.3900 9.5200 9.2600 8.9800 8.7100 8.4400 8.1200 7.6900 7.1000 6.2500 5.2100 4.0400 2.9300 2.2400 1.9000 1.7400 1.6100 1.5100 1.4800 1.4700 1.4800 1.5600 1.7000 1.7800 1.7600 1.7000 1.6200 1.5600 1.6400 1.8500 29 100.00 70.438 0.0000 78.938 1.6380 1.6385 3.5496 0.32000 0.40000 0.93000 2.3900 4.2900 5.1000 5.1800 4.9000 4.4100 3.9400 3.5300 3.2000 2.8800 2.6100 2.2800 1.9500 1.7000 1.4600 1.2600 1.1400 1.1300 1.1800 1.2000 1.1800 1.1800 1.2000 1.2000 1.2500 1.3500 1.4100 1.3900 1.3600 1.3100 1.2900 1.3500 1.5400 30 100.00 100.00 0.0000 74.400 1.6102 1.3302 3.2994 0.32000 0.47000 1.0700 2.4900 4.4500 5.2100 5.1600 4.7000 4.0600 3.4100 2.8600 2.4300 2.0500 1.7400 1.4300 1.1700 1.0700 1.0600 1.0200 1.0200 1.1100 1.2600 1.3300 1.3500 1.3500 1.3600 1.3600 1.4300 1.5500 1.6400 1.6200 1.5700 1.4900 1.4600 1.5200 1.6900 31 100.00 34.227 58.585 81.476 1.8747 2.3843 2.9371 0.55000 0.60000 1.1900 2.3300 3.3800 3.8600 3.8900 3.7200 3.5300 3.3400 3.2200 3.3400 3.6700 3.9800 3.8900 3.4900 3.0300 2.4900 1.9800 1.6700 1.5500 1.5000 1.4700 1.4200 1.4100 1.4200 1.4100 1.4700 1.5700 1.6300 1.6200 1.5700 1.5200 1.5100 1.5500 1.7200 32 100.00 0.0000 55.132 91.666 1.4780 1.8225 2.1789 0.54000 0.64000 1.0800 1.9900 2.7200 2.9400 2.9300 2.7700 2.5700 2.4300 2.3500 2.3800 2.5800 2.7800 2.7900 2.5900 2.2900 1.9300 1.5900 1.3900 1.2800 1.2200 1.1700 1.1600 1.1600 1.1600 1.1600 1.1900 1.2200 1.2600 1.2600 1.2400 1.2300 1.2200 1.2600 1.3300 33 100.00 0.0000 21.178 78.559 2.3767 3.3571 5.1435 0.50000 0.50000 1.0800 2.5700 4.9200 6.0800 6.5200 6.5900 6.4600 6.3300 6.2200 6.2500 6.4000 6.4300 6.1400 5.4800 4.6100 3.5700 2.6000 1.9800 1.6700 1.5000 1.3800 1.3000 1.2700 1.2700 1.2700 1.3300 1.4500 1.5200 1.5100 1.4600 1.4100 1.3600 1.4000 1.6100 34 70.028 0.0000 27.596 78.916 3.5596 4.4146 4.9712 0.27000 0.53000 1.0600 2.6800 4.9600 6.0100 6.3300 6.3100 6.1300 6.0000 5.9300 6.0300 6.3500 6.6300 6.5300 6.0900 5.4500 4.6800 3.9200 3.4400 3.1700 3.0400 2.9300 2.8600 2.8400 2.8600 2.8600 2.9500 3.0700 3.1700 3.1700 3.1300 3.0700 3.0500 3.0800 3.2800 35 100.00 0.0000 41.590 72.681 2.5582 3.9122 5.0176 0.30000 0.50000 0.98000 2.5400 4.7300 5.8500 6.2200 6.3000 6.1800 6.0800 6.0700 6.3800 7.0800 7.6800 7.5400 6.7400 5.6200 4.3000 3.0600 2.2800 1.8800 1.6700 1.5100 1.3900 1.3700 1.3400 1.3600 1.4200 1.5700 1.6600 1.6200 1.5700 1.4700 1.4300 1.5100 1.6800 36 100.00 34.642 27.248 75.351 2.1038 2.6767 4.2745 0.50000 0.59000 1.0500 2.5500 4.5100 5.4500 5.6800 5.5800 5.3200 5.0400 4.8500 4.7800 4.8400 4.8600 4.5700 4.0100 3.4100 2.7300 2.0700 1.6800 1.5200 1.4600 1.4100 1.3600 1.3400 1.3400 1.3500 1.4100 1.5200 1.6000 1.5700 1.5400 1.4800 1.4200 1.5100 1.7000 37 100.00 6.8808 10.862 86.519 1.9364 2.4667 3.9310 0.36000 0.53000 1.0200 2.3800 4.0900 4.9200 5.1400 5.1000 4.9100 4.7300 4.5800 4.4800 4.4100 4.3100 4.0800 3.6700 3.1600 2.5700 1.9900 1.6100 1.4400 1.3400 1.2700 1.2300 1.2100 1.2100 1.2200 1.2500 1.3200 1.3700 1.3600 1.3200 1.3000 1.2500 1.3400 1.4500 38 100.00 76.196 47.351 72.992 1.7868 1.8490 3.0738 0.62000 0.55000 1.1400 2.4200 3.8700 4.4600 4.3900 4.1300 3.7400 3.3600 3.0600 2.9000 2.8900 2.8400 2.5600 2.1800 1.9200 1.6900 1.4600 1.3500 1.3700 1.4800 1.5200 1.4900 1.5000 1.5000 1.5100 1.5800 1.7100 1.8000 1.7700 1.7300 1.6500 1.6200 1.7100 1.8600 39 100.00 46.547 0.0000 85.936 1.7548 1.9531 3.5108 0.53000 0.42000 1.1500 2.4000 3.9800 4.7600 4.8400 4.7100 4.3600 4.0600 3.8000 3.5600 3.3500 3.1400 2.8700 2.5600 2.2300 1.9000 1.5800 1.3700 1.3000 1.3000 1.2700 1.2600 1.2500 1.2300 1.2500 1.3000 1.3600 1.4300 1.4000 1.3700 1.3400 1.3700 1.3500 1.5000 40 100.00 62.695 61.659 82.084 1.5444 1.7063 2.3178 0.37000 0.58000 1.0700 2.1100 2.9900 3.2800 3.2200 3.0400 2.7600 2.5300 2.3600 2.3400 2.4500 2.5600 2.4200 2.1400 1.9000 1.6600 1.4400 1.3000 1.2800 1.3300 1.3400 1.3100 1.3200 1.3200 1.3300 1.3900 1.4700 1.5300 1.5200 1.4700 1.4400 1.4300 1.4800 1.6200 41 100.00 88.388 100.00 74.137 1.4824 1.5037 1.8051 0.55000 0.63000 1.2100 2.0900 2.6300 2.6700 2.5500 2.3200 2.1000 1.8900 1.7600 1.7600 1.9200 2.0300 1.8600 1.6200 1.4600 1.3800 1.2700 1.2400 1.2900 1.4100 1.4600 1.4600 1.4600 1.4700 1.4800 1.5400 1.6700 1.7400 1.7100 1.6700 1.6000 1.5700 1.6300 1.8200 42 100.00 43.893 0.0000 77.796 1.9877 2.2984 4.5059 0.22000 0.48000 1.00000 2.5800 4.8200 5.9700 6.1900 6.0500 5.6800 5.2900 4.9400 4.6600 4.3600 4.0700 3.6900 3.2100 2.7400 2.2100 1.7400 1.4500 1.3400 1.3300 1.2900 1.2600 1.2500 1.2500 1.2600 1.3200 1.4100 1.4900 1.4700 1.4300 1.3900 1.3600 1.4100 1.6000 43 62.171 43.618 0.0000 80.064 3.2490 3.2997 4.5651 0.27000 0.43000 0.98000 2.7000 5.1100 6.2200 6.3300 6.0800 5.6800 5.2700 4.9300 4.6400 4.3900 4.1800 3.9100 3.6200 3.3800 3.1200 2.8600 2.7200 2.7300 2.8700 2.9700 3.0100 3.0500 3.0800 3.1100 3.1800 3.2900 3.3700 3.3700 3.3300 3.3200 3.3000 3.3700 3.5200 44 60.875 20.989 0.0000 77.603 4.0099 4.4083 5.7535 0.51000 0.46000 0.99000 3.0100 5.9300 7.3500 7.6400 7.5400 7.2100 6.8900 6.6100 6.3900 6.1700 5.9500 5.6600 5.2800 4.8700 4.4000 3.9200 3.6300 3.5100 3.5000 3.4900 3.4600 3.4700 3.4900 3.5200 3.6000 3.7300 3.8100 3.8000 3.7800 3.7400 3.7200 3.7600 3.9700 45 64.321 40.424 33.754 71.905 3.8903 4.1999 4.6592 0.42000 0.57000 1.0600 2.7600 5.0700 6.0800 6.2500 6.0300 5.7200 5.4100 5.1800 5.1500 5.3600 5.5400 5.3800 4.9600 4.5400 4.0900 3.6400 3.4000 3.3900 3.5700 3.6900 3.7500 3.8000 3.8200 3.8500 3.9500 4.1200 4.2300 4.2000 4.1700 4.0900 4.0600 4.1200 4.3300 46 49.540 17.502 0.0000 85.944 3.5836 3.8028 4.5192 0.39000 0.60000 1.1600 2.6900 4.9500 5.9500 6.0500 5.8900 5.6000 5.3300 5.1000 4.9200 4.7700 4.6300 4.4800 4.2600 4.0400 3.7700 3.5100 3.3500 3.2900 3.3100 3.3000 3.3100 3.3200 3.3400 3.3700 3.4200 3.5200 3.5700 3.5900 3.5800 3.5700 3.5400 3.6500 3.7700 47 69.623 0.0000 0.35465 81.111 3.4682 4.1337 5.6613 0.48000 0.49000 1.0700 2.8400 5.5000 6.9100 7.3200 7.3400 7.1300 6.9300 6.7700 6.6200 6.4500 6.2500 5.9600 5.5100 4.9400 4.2500 3.5900 3.1600 2.9300 2.8100 2.7200 2.6600 2.6500 2.6500 2.6700 2.7400 2.8500 2.9200 2.9200 2.8900 2.8400 2.8000 2.8800 3.0300 48 68.200 100.00 58.283 72.721 2.5427 1.9979 2.5359 0.55000 0.74000 1.2100 2.4100 3.5400 3.8700 3.7600 3.4300 3.0400 2.6800 2.3700 2.1900 2.1000 1.9900 1.7300 1.4600 1.3700 1.3700 1.3500 1.4100 1.7400 2.3700 2.9200 3.2300 3.4000 3.4700 3.5200 3.6400 3.7900 3.9000 3.8900 3.8400 3.8000 3.7300 3.8200 3.9900 49 64.557 100.00 0.0000 87.173 1.8098 1.4187 2.3720 0.39000 0.50000 1.0100 2.2300 3.3800 3.8000 3.6600 3.2800 2.8600 2.4300 2.1000 1.8200 1.5900 1.4100 1.2300 1.0900 1.0400 1.0400 1.0200 1.0600 1.2400 1.5700 1.8800 2.0600 2.1600 2.2100 2.2500 2.3100 2.4100 2.4700 2.4600 2.4700 2.4500 2.4300 2.4900 2.6300 50 100.00 100.00 0.0000 83.643 1.3178 1.1197 2.5219 0.27000 0.43000 0.98000 2.2000 3.5100 3.9800 3.9200 3.5500 3.0800 2.5900 2.2100 1.8800 1.6000 1.4000 1.1900 1.0100 0.95000 0.92000 0.91000 0.91000 0.97000 1.0600 1.1200 1.1200 1.1300 1.1400 1.1400 1.1800 1.2800 1.3300 1.3100 1.2700 1.2300 1.2300 1.2700 1.4000 51 90.708 100.00 68.065 79.611 1.8344 1.6606 2.2699 0.66000 0.86000 1.3100 2.4000 3.2300 3.4100 3.3000 3.0200 2.6900 2.4200 2.1900 2.0400 1.9900 1.9300 1.7000 1.5000 1.4200 1.4000 1.3900 1.3900 1.5200 1.7200 1.8600 1.9300 1.9600 1.9800 2.0100 2.0700 2.1700 2.2500 2.2300 2.2100 2.1400 2.1200 2.2000 2.3600 52 38.223 60.812 0.0000 86.218 3.0408 2.6742 3.2727 0.38000 0.55000 1.0100 2.4000 4.1900 4.8000 4.7100 4.3800 4.0000 3.6000 3.2800 3.0400 2.8200 2.6700 2.5000 2.3400 2.2700 2.2400 2.2100 2.2500 2.4600 2.8600 3.2100 3.4300 3.5600 3.6300 3.6800 3.7500 3.8700 3.9400 3.9400 3.9600 3.9600 3.9700 4.0300 4.2300 53 71.650 61.385 0.0000 86.698 2.0785 2.0030 3.0393 0.33000 0.44000 0.96000 2.2400 3.8200 4.4100 4.3600 4.0900 3.7300 3.3700 3.0700 2.8300 2.6200 2.4600 2.2600 2.0700 1.9500 1.8400 1.7100 1.6600 1.7000 1.8200 1.9100 1.9400 1.9700 1.9900 2.0200 2.0700 2.1500 2.2100 2.2000 2.1900 2.1700 2.1600 2.2100 2.3200 54 63.589 69.793 0.0000 76.599 3.2275 2.8793 4.3359 0.50000 0.56000 1.0900 2.7700 5.3300 6.3500 6.3100 5.9100 5.3600 4.7800 4.3200 3.9400 3.5900 3.3200 3.0000 2.6900 2.5200 2.4000 2.2700 2.2400 2.4500 2.8700 3.2100 3.3900 3.5000 3.5400 3.5900 3.6900 3.8200 3.9200 3.9100 3.8700 3.8200 3.7900 3.8500 4.0400 55 97.958 93.064 100.00 85.870 1.5287 1.4911 1.8133 0.64000 0.83000 1.3500 2.1600 2.6600 2.6800 2.5800 2.3500 2.1200 1.9300 1.7900 1.7200 1.7400 1.7300 1.6100 1.4700 1.4100 1.3800 1.3600 1.3600 1.4000 1.4600 1.5000 1.5200 1.5300 1.5300 1.5400 1.5900 1.6500 1.7000 1.6800 1.6600 1.6300 1.6500 1.6900 1.8300 56 37.724 44.142 0.0000 76.536 5.0798 4.8027 5.5475 0.41000 0.55000 1.1100 3.1200 6.2800 7.6500 7.7000 7.3300 6.8700 6.3900 5.9900 5.6600 5.3900 5.1600 4.9000 4.6300 4.4500 4.3100 4.1500 4.1200 4.3400 4.8200 5.2200 5.4500 5.6000 5.6700 5.7500 5.8400 5.9900 6.0700 6.0600 6.0700 6.0600 6.0500 6.0700 6.3000 57 39.339 64.300 0.0000 71.905 5.0157 4.2279 5.2680 0.44000 0.48000 1.0300 3.0900 6.3500 7.7600 7.6600 7.1300 6.5000 5.8400 5.2800 4.8500 4.4600 4.1600 3.8100 3.4900 3.3500 3.3000 3.2400 3.3200 3.7900 4.7000 5.4600 5.9600 6.2000 6.3500 6.4400 6.5800 6.7500 6.8600 6.8700 6.8800 6.8400 6.8100 6.9100 7.1400 58 43.176 100.00 0.0000 83.170 2.4627 1.7160 2.6770 0.25000 0.49000 0.94000 2.2500 3.8500 4.4000 4.2000 3.7500 3.2300 2.7100 2.2800 1.9600 1.6600 1.4500 1.2300 1.0400 0.98000 0.99000 1.00000 1.0600 1.4200 2.1300 2.8100 3.2400 3.4800 3.6000 3.6700 3.7700 3.8800 3.9600 3.9700 3.9600 3.9500 3.9800 4.0400 4.1500 59 33.364 100.00 0.0000 74.219 3.9671 2.6059 3.8071 0.55000 0.66000 1.1400 2.9200 5.4200 6.3200 6.0400 5.3400 4.6100 3.8500 3.2100 2.7300 2.3000 1.9800 1.6200 1.3400 1.2400 1.2700 1.2900 1.4200 2.0900 3.4600 4.7600 5.6100 6.0700 6.2700 6.4000 6.5400 6.7100 6.7900 6.8200 6.8200 6.8000 6.8100 6.8900 7.0600 60 69.792 100.00 0.0000 77.990 2.3145 1.7285 3.2199 0.51000 0.54000 1.0600 2.5700 4.4400 5.1800 5.0300 4.5400 3.9300 3.3000 2.8000 2.3900 2.0300 1.7600 1.4700 1.2300 1.1500 1.1400 1.1400 1.1800 1.4500 1.9600 2.4200 2.6800 2.8200 2.8800 2.9200 3.0200 3.1500 3.2300 3.2400 3.2100 3.1300 3.1100 3.1800 3.3300 61 35.402 81.051 11.684 76.782 3.9471 3.0297 3.7525 0.46000 0.61000 1.1500 2.7600 4.9900 5.8000 5.6200 5.1100 4.5700 3.9900 3.5200 3.1800 2.8900 2.6800 2.4000 2.1400 2.0600 2.0600 2.0500 2.1500 2.6600 3.6600 4.5500 5.1200 5.4300 5.5700 5.6700 5.8000 5.9300 6.0300 6.0400 6.0400 6.0500 6.0400 6.0800 6.2500 62 95.847 26.784 100.00 72.483 2.2422 3.2108 2.2719 0.59000 0.75000 1.3100 2.1600 2.8300 2.9200 2.8100 2.6200 2.4800 2.3800 2.4400 2.9600 4.1400 5.3900 5.6200 5.1300 4.4200 3.5800 2.7900 2.3000 2.0800 2.0100 1.9200 1.8500 1.8300 1.8200 1.8500 1.9000 2.0600 2.1400 2.1100 2.0600 1.9700 1.9600 2.0000 2.2000 63 100.00 0.0000 54.173 81.163 1.9366 2.8577 3.2708 0.31000 0.50000 0.98000 2.1500 3.4200 3.9700 4.1100 4.0500 3.9200 3.8300 3.8300 4.1000 4.7100 5.2800 5.2700 4.7700 4.0400 3.1600 2.3300 1.8100 1.5400 1.4000 1.2900 1.2200 1.2000 1.2000 1.2100 1.2600 1.3600 1.4200 1.4200 1.3700 1.3200 1.3000 1.3600 1.5100 64 100.00 0.0000 100.00 82.487 1.7795 2.6782 1.9614 0.45000 0.65000 1.1100 1.9800 2.4900 2.5500 2.4800 2.2800 2.1200 2.0300 2.0600 2.4800 3.5000 4.5900 4.8900 4.5200 3.8700 3.0700 2.3200 1.8600 1.6300 1.5000 1.4100 1.3500 1.3400 1.3300 1.3300 1.3900 1.4600 1.5200 1.5100 1.4900 1.4400 1.4200 1.4900 1.6000 65 100.00 33.507 91.901 79.683 1.7780 2.3506 2.0815 0.52000 0.76000 1.2400 2.0800 2.7300 2.8000 2.7200 2.5100 2.3500 2.2200 2.1800 2.4500 3.1100 3.7900 3.8800 3.5300 3.0600 2.5500 2.0300 1.7200 1.6100 1.5600 1.5300 1.4800 1.4700 1.4800 1.4900 1.5300 1.6300 1.7000 1.6800 1.6500 1.6000 1.6000 1.6500 1.7600 66 100.00 0.0000 100.00 89.573 1.3364 1.8365 1.6074 0.30000 0.44000 0.94000 1.7500 2.2000 2.2400 2.1800 1.9600 1.7800 1.6500 1.5800 1.7900 2.3500 2.9400 3.1000 2.9000 2.5300 2.0800 1.6300 1.3500 1.2100 1.1300 1.0700 1.0400 1.0400 1.0400 1.0400 1.0700 1.1300 1.1800 1.1700 1.1500 1.1300 1.1100 1.1700 1.2600 67 75.629 28.368 91.983 75.711 2.5499 3.1905 2.0537 0.29000 0.49000 0.95000 2.0000 2.5600 2.6800 2.6200 2.4400 2.2600 2.1400 2.1700 2.5500 3.4700 4.4500 4.6900 4.4000 3.9600 3.4600 2.9500 2.6400 2.5200 2.5000 2.4700 2.4400 2.4500 2.4500 2.4700 2.5500 2.6900 2.7700 2.7600 2.7100 2.6500 2.6300 2.7200 2.8700 68 76.148 0.0000 60.268 78.106 3.0167 4.0242 3.5306 0.19000 0.47000 0.98000 2.2800 3.6800 4.2500 4.3900 4.3100 4.1900 4.0900 4.1300 4.5100 5.3800 6.2500 6.4000 5.9700 5.2800 4.4200 3.6100 3.0700 2.8000 2.6500 2.5400 2.4700 2.4500 2.4500 2.4700 2.5500 2.6800 2.7800 2.7500 2.7400 2.6500 2.6300 2.6700 2.8900 69 54.828 0.0000 54.765 72.340 5.0020 6.1203 4.5512 0.46000 0.63000 1.0300 2.5900 4.6000 5.4000 5.5800 5.5400 5.4000 5.3500 5.4100 5.9100 7.0100 8.1500 8.4500 8.0600 7.4100 6.5800 5.7800 5.2600 5.0000 4.8600 4.7400 4.6800 4.6600 4.6800 4.7000 4.8100 4.9700 5.0600 5.0500 5.0100 4.9500 4.9100 4.9900 5.1800 70 100.00 52.339 98.568 90.554 1.2832 1.4108 1.6055 0.59000 0.58000 1.00000 1.8500 2.3400 2.3800 2.2900 2.0700 1.8200 1.6700 1.5500 1.5500 1.7200 1.8900 1.8800 1.7400 1.5800 1.4300 1.2700 1.1800 1.1600 1.1700 1.1600 1.1600 1.1700 1.1500 1.1800 1.2000 1.2500 1.3000 1.2700 1.2700 1.2700 1.2300 1.2800 1.3500 71 36.753 28.174 77.287 90.551 2.5417 2.5878 1.8960 0.48000 0.52000 1.0900 1.9300 2.5300 2.6700 2.6000 2.3800 2.1800 2.0200 1.9300 2.0100 2.2900 2.6400 2.7400 2.7000 2.6200 2.5500 2.4600 2.4400 2.4900 2.6000 2.7200 2.7700 2.8300 2.8700 2.9000 2.9700 3.0400 3.0900 3.1200 3.1300 3.1600 3.1600 3.2200 3.3400 72 70.183 0.0000 100.00 91.052 1.8635 2.2117 1.6882 0.67000 0.59000 1.0700 1.8400 2.3500 2.3900 2.2900 2.0900 1.8900 1.7300 1.6800 1.8200 2.2700 2.8100 3.0000 2.9000 2.6900 2.4000 2.1200 1.9400 1.8500 1.8000 1.7600 1.7500 1.7500 1.7600 1.7800 1.8200 1.8700 1.9200 1.9200 1.9300 1.9100 1.9200 1.9700 2.0800 73 72.013 61.211 100.00 84.433 1.8670 1.9069 1.6001 0.060000 0.40000 0.90000 1.7500 2.2900 2.3400 2.2400 2.0200 1.8100 1.6500 1.5500 1.6300 1.9300 2.2300 2.2400 2.0700 1.9300 1.8200 1.6900 1.6200 1.7000 1.8600 1.9800 2.0400 2.0700 2.0900 2.1100 2.1800 2.2900 2.3500 2.3400 2.3400 2.2900 2.2700 2.3400 2.4800 74 53.628 20.516 43.879 88.290 2.8185 3.0497 2.8863 0.42000 0.59000 1.1100 2.2400 3.4000 3.8700 3.8600 3.6700 3.4600 3.2800 3.1600 3.1800 3.3900 3.6000 3.6200 3.4800 3.3100 3.0900 2.8800 2.7500 2.7100 2.7300 2.7300 2.7500 2.7700 2.7800 2.8100 2.8700 2.9500 3.0000 3.0000 2.9900 2.9900 2.9900 3.0100 3.1400 75 97.061 58.156 100.00 79.468 1.7831 2.0859 1.9919 0.60000 0.78000 1.3100 2.1900 2.7000 2.7800 2.6900 2.4800 2.2700 2.1000 2.0400 2.1700 2.6100 3.0300 3.0100 2.7200 2.4300 2.1300 1.8300 1.6600 1.6300 1.6600 1.6700 1.6500 1.6400 1.6600 1.6600 1.7200 1.8200 1.8900 1.8600 1.8400 1.7800 1.7600 1.7900 1.9700 76 74.689 34.086 100.00 82.727 2.3430 2.7653 1.9025 0.41000 0.57000 1.1100 2.0200 2.5000 2.6200 2.4900 2.2900 2.1200 1.9800 1.9400 2.2000 2.8900 3.5900 3.7800 3.5600 3.2700 2.9200 2.5900 2.3800 2.3200 2.3300 2.3400 2.3100 2.3200 2.3300 2.3500 2.4100 2.5200 2.5900 2.5800 2.5500 2.5100 2.4800 2.5300 2.6800 77 77.110 51.886 100.00 71.814 2.5660 2.9321 1.9075 0.28000 0.51000 1.0300 1.9300 2.5300 2.6000 2.5000 2.2900 2.1000 1.9600 1.9400 2.2500 3.0500 3.8500 3.9700 3.6600 3.3200 2.9800 2.6200 2.4200 2.4500 2.6000 2.6700 2.7100 2.7300 2.7500 2.7800 2.8800 3.0500 3.1500 3.1400 3.1000 3.0000 2.9600 3.0500 3.2600 78 55.520 43.321 69.226 79.980 3.3447 3.4894 2.6558 0.33000 0.54000 1.1200 2.2200 3.2800 3.6000 3.5200 3.3400 3.1000 2.9200 2.8100 2.9700 3.4500 3.9500 4.0200 3.8200 3.6100 3.3900 3.1800 3.0800 3.1700 3.3900 3.5500 3.6500 3.7000 3.7400 3.7700 3.8600 3.9900 4.0700 4.0800 4.0500 4.0000 3.9700 4.0100 4.2300 79 67.812 0.0000 52.541 86.867 2.6229 3.1493 2.9271 0.28000 0.53000 1.1100 2.2000 3.2900 3.7500 3.8100 3.6400 3.4900 3.3500 3.3000 3.4500 3.8600 4.2800 4.3700 4.1400 3.8000 3.3500 2.9400 2.6400 2.5100 2.4300 2.3600 2.3100 2.3300 2.3200 2.3500 2.3900 2.4900 2.5300 2.5200 2.5200 2.5000 2.4900 2.5200 2.6700 80 59.974 14.518 25.755 81.683 3.4710 3.9452 4.2463 0.21000 0.48000 0.94000 2.4100 4.4800 5.3900 5.5500 5.4400 5.2200 5.0100 4.8900 4.8900 5.0800 5.2500 5.1700 4.8700 4.5000 4.0400 3.6000 3.3100 3.2000 3.1600 3.1500 3.1300 3.1300 3.1400 3.1600 3.2500 3.3700 3.4400 3.4400 3.4200 3.3800 3.3500 3.4300 3.6300 81 36.501 22.239 20.308 81.236 4.5976 4.7453 4.5232 0.35000 0.46000 0.99000 2.6400 4.9500 5.9200 6.0300 5.8300 5.5500 5.2800 5.1000 5.0300 5.1100 5.2000 5.1600 5.0000 4.8300 4.6600 4.4700 4.3900 4.4100 4.5300 4.6300 4.6700 4.7400 4.7800 4.8300 4.9200 5.0200 5.1100 5.1300 5.1400 5.1300 5.1300 5.2100 5.3600 82 0.0000 0.0000 0.0000 88.917 4.4236 4.4402 4.0308 0.30000 0.49000 0.91000 2.4700 4.5100 5.3500 5.3800 5.2000 4.9400 4.7100 4.5600 4.4300 4.3500 4.3200 4.3200 4.3300 4.3400 4.3600 4.3800 4.4300 4.4400 4.4800 4.5200 4.5700 4.6200 4.6700 4.7200 4.7900 4.8600 4.9200 4.9400 5.0000 5.0500 5.1000 5.1600 5.2800 83 0.0000 0.0000 18.258 76.188 8.5984 8.8296 6.5337 0.59000 0.60000 1.0800 3.2700 6.7000 8.2400 8.4100 8.2200 7.9900 7.7900 7.7000 7.7700 8.1000 8.4600 8.6700 8.7300 8.7700 8.8000 8.8400 8.9300 8.9700 9.0400 9.0800 9.1500 9.2300 9.2900 9.3700 9.4700 9.5700 9.6200 9.6800 9.7400 9.8200 9.9000 9.9700 10.120 84 31.208 0.0000 35.620 76.170 5.9710 6.6125 5.1058 0.24000 0.45000 0.99000 2.6700 5.1200 6.2800 6.4800 6.3500 6.2000 6.0700 6.0300 6.2600 6.8700 7.5000 7.7000 7.5300 7.2400 6.8300 6.4400 6.2100 6.0800 6.0300 5.9900 5.9800 6.0000 6.0300 6.0900 6.1700 6.3000 6.3800 6.3900 6.4200 6.4200 6.4200 6.4700 6.6600 85 69.207 25.529 58.077 75.493 3.3383 3.9620 3.4361 0.60000 0.45000 1.0300 2.2800 3.7500 4.3600 4.4200 4.2800 4.0900 3.9300 3.8700 4.1300 4.7700 5.4000 5.4600 5.1400 4.6800 4.1600 3.6300 3.3000 3.1700 3.1600 3.1400 3.1000 3.1000 3.1200 3.1500 3.2300 3.4000 3.4900 3.4700 3.4400 3.3600 3.3200 3.3900 3.6300 86 36.070 0.0000 32.247 83.342 4.3141 4.7605 4.1539 0.40000 0.41000 0.96000 2.3900 4.4200 5.2400 5.3700 5.2400 5.0500 4.8900 4.8100 4.9000 5.2300 5.5500 5.6200 5.4700 5.2200 4.9000 4.5700 4.3900 4.2900 4.2400 4.2100 4.2100 4.2100 4.2400 4.2800 4.3700 4.4500 4.5300 4.5400 4.5400 4.5500 4.5600 4.6300 4.7800 87 45.937 16.128 29.113 73.797 5.3359 5.8513 5.4556 0.70000 0.58000 1.1500 2.9100 5.6600 6.8400 7.0600 6.9300 6.7000 6.4700 6.3400 6.4200 6.7600 7.1000 7.0700 6.7700 6.3700 5.9100 5.4500 5.1700 5.1000 5.1600 5.1900 5.2200 5.2600 5.2900 5.3300 5.4300 5.5900 5.6600 5.6800 5.6700 5.6200 5.6200 5.6600 5.9100 88 34.253 70.258 100.00 79.791 3.3376 2.8306 1.7102 0.44000 0.50000 1.0800 1.9500 2.4500 2.5000 2.3600 2.1500 1.9500 1.7500 1.6700 1.7600 2.0800 2.4100 2.4100 2.2700 2.2000 2.2100 2.2000 2.3000 2.7000 3.4500 4.1100 4.5300 4.7600 4.8800 4.9700 5.0800 5.2100 5.2900 5.3200 5.3300 5.3300 5.3400 5.3900 5.5700 89 27.951 27.774 0.0000 89.938 3.0143 2.9367 3.1588 0.34000 0.40000 0.92000 2.2600 3.8100 4.3800 4.3600 4.1500 3.8500 3.5900 3.3800 3.2300 3.1100 3.0200 2.9400 2.8700 2.8200 2.7800 2.7400 2.7400 2.8000 2.9200 3.0300 3.1000 3.1800 3.2200 3.2600 3.3100 3.4000 3.4500 3.4800 3.4900 3.5000 3.5400 3.5700 3.7200 90 47.906 83.595 100.00 88.458 2.1109 1.8306 1.6860 0.52000 0.82000 1.2200 2.0300 2.4800 2.5100 2.3900 2.1800 1.9600 1.7700 1.6500 1.6100 1.6600 1.7200 1.6500 1.5400 1.5000 1.4900 1.4800 1.5200 1.7100 2.0700 2.3900 2.6100 2.7200 2.7900 2.8300 2.9000 2.9900 3.0500 3.0600 3.0900 3.0800 3.0800 3.1500 3.2400 91 54.133 61.998 85.718 75.259 3.2396 3.0848 2.1531 0.33000 0.73000 1.1000 2.1400 2.8700 3.0200 2.9300 2.7000 2.4600 2.2800 2.1700 2.3300 2.7500 3.2100 3.2300 3.0000 2.8500 2.7400 2.6000 2.5900 2.8400 3.3200 3.7300 3.9400 4.0700 4.1500 4.1900 4.3100 4.4600 4.5300 4.5300 4.5300 4.4600 4.4600 4.5200 4.6900 92 59.210 71.481 48.383 72.624 3.4358 3.0776 3.2560 0.44000 0.58000 1.1400 2.5100 4.1300 4.7000 4.6300 4.3300 3.9100 3.5400 3.2600 3.1600 3.2200 3.2900 3.0900 2.7900 2.6400 2.5400 2.4400 2.4400 2.7400 3.3200 3.7900 4.0600 4.2000 4.2800 4.3300 4.4400 4.6000 4.7200 4.7000 4.6900 4.6000 4.5700 4.6400 4.8600 93 61.216 86.623 100.00 76.303 2.3728 1.9870 1.6355 0.31000 0.46000 0.97000 1.8800 2.4100 2.4800 2.3300 2.0900 1.8800 1.6800 1.5600 1.5700 1.7700 1.9200 1.8100 1.5900 1.5000 1.4900 1.4500 1.5100 1.8100 2.3800 2.8500 3.1400 3.2900 3.3600 3.4300 3.5300 3.6800 3.7900 3.7800 3.7600 3.7100 3.6800 3.7500 3.9600 94 41.049 61.369 100.00 85.312 2.5149 2.2991 1.5838 0.26000 0.46000 0.89000 1.7800 2.2900 2.3500 2.2400 2.0000 1.7800 1.6300 1.5200 1.5700 1.8300 2.1400 2.1800 2.0700 2.0200 2.0000 1.9800 2.0200 2.2200 2.6000 2.9200 3.1100 3.2300 3.3000 3.3500 3.4300 3.5300 3.5800 3.6000 3.6100 3.5900 3.6200 3.6700 3.8000 95 40.400 60.026 45.649 82.782 3.3562 3.0302 2.8991 0.45000 0.54000 1.0600 2.3100 3.7000 4.1800 4.0900 3.8100 3.4800 3.1700 2.9200 2.8500 2.9100 2.9900 2.8900 2.7200 2.6300 2.5900 2.5300 2.5700 2.8400 3.3200 3.7200 3.9700 4.1100 4.1900 4.2400 4.3200 4.4400 4.4900 4.5100 4.5200 4.5000 4.5000 4.5700 4.7400 96 64.525 57.292 47.934 80.470 2.9120 2.8984 3.0352 0.65000 0.72000 1.1800 2.4000 3.7500 4.2400 4.2100 3.9400 3.6500 3.3700 3.1600 3.1200 3.2600 3.3900 3.2800 3.0400 2.8500 2.7000 2.5100 2.4500 2.5600 2.8000 2.9900 3.0800 3.1300 3.1600 3.1900 3.2800 3.4000 3.5000 3.4800 3.4600 3.4100 3.3800 3.4300 3.6300 97 0.0000 32.747 32.443 89.301 3.4889 3.2100 2.6502 0.28000 0.50000 0.97000 2.1400 3.3800 3.7400 3.6800 3.4400 3.1500 2.9200 2.7700 2.7000 2.7700 2.8700 2.8900 2.8500 2.8500 2.8700 2.9000 2.9800 3.1700 3.5400 3.8700 4.0900 4.2300 4.3200 4.3900 4.4700 4.5600 4.6000 4.6400 4.6900 4.7500 4.7900 4.8800 4.9800 98 0.0000 18.304 28.168 82.273 6.0635 5.8990 4.3746 0.47000 0.62000 1.0800 2.6700 4.9600 5.7900 5.7800 5.5700 5.2900 5.0400 4.8900 4.9100 5.1500 5.4300 5.5400 5.5500 5.5500 5.5800 5.6100 5.7200 5.9300 6.3000 6.6500 6.8800 7.0500 7.1200 7.2200 7.3100 7.4000 7.4600 7.5200 7.5600 7.6000 7.6800 7.7700 7.8800 99 13.796 46.790 41.084 79.328 5.4827 4.9454 3.7487 0.55000 0.63000 1.1300 2.6300 4.5100 5.2000 5.1400 4.8200 4.4900 4.1800 3.9700 3.9500 4.1700 4.4300 4.4300 4.2800 4.2400 4.2500 4.2500 4.3700 4.8100 5.6200 6.3200 6.7800 7.0500 7.1600 7.2700 7.3700 7.4800 7.5400 7.5700 7.6100 7.6400 7.6700 7.7600 7.8600 100 6.5548 14.436 0.0000 79.213 6.9603 6.8606 6.2329 0.38000 0.48000 1.0300 3.1500 6.6400 8.1800 8.2900 8.0500 7.7000 7.3800 7.1300 6.9400 6.8000 6.7100 6.6500 6.5700 6.5500 6.5600 6.5500 6.6100 6.7500 7.0400 7.2800 7.4500 7.5800 7.6400 7.7300 7.8200 7.9200 7.9900 8.0300 8.0800 8.1100 8.1800 8.2700 8.3700 101 0.0000 34.330 0.0000 83.216 5.5857 5.0659 4.7840 0.48000 0.57000 1.0100 2.8300 5.5700 6.6700 6.6200 6.2400 5.8500 5.4800 5.1700 4.9300 4.7700 4.6400 4.5200 4.4100 4.4000 4.4300 4.4600 4.5700 4.9200 5.5400 6.1200 6.5100 6.7600 6.8700 6.9600 7.0700 7.1500 7.2300 7.2800 7.3400 7.3800 7.4600 7.5700 7.7000 102 14.348 38.935 0.0000 73.745 7.5756 6.9424 6.9551 0.62000 0.66000 1.2200 3.5900 7.8000 9.6200 9.6200 9.1600 8.5800 8.0000 7.5500 7.1800 6.8800 6.6700 6.4300 6.1900 6.1200 6.1000 6.0700 6.1700 6.6100 7.4600 8.2100 8.6800 8.9500 9.0800 9.1900 9.3000 9.4300 9.5100 9.5200 9.5800 9.5700 9.6100 9.7100 9.8300 103 44.755 44.939 34.609 72.467 4.8646 4.7532 4.4231 0.29000 0.54000 1.0700 2.7000 5.0000 5.9800 6.0200 5.7300 5.3700 5.0400 4.7900 4.7500 4.9500 5.1700 5.0700 4.7900 4.5700 4.3600 4.1500 4.0700 4.3000 4.7900 5.1700 5.4200 5.5500 5.6300 5.7000 5.8200 5.9700 6.0600 6.0700 6.0700 6.0200 6.0100 6.0800 6.2700 104 20.762 56.172 0.0000 80.800 4.7345 4.0668 4.4030 0.36000 0.53000 0.99000 2.8800 5.4000 6.3800 6.3000 5.8700 5.3900 4.9000 4.5100 4.2100 3.9500 3.7500 3.5500 3.3600 3.3000 3.3000 3.3000 3.3900 3.8100 4.5600 5.2300 5.6800 5.9200 6.0500 6.1500 6.2700 6.3900 6.4600 6.4900 6.5400 6.5500 6.5900 6.6500 6.7900 105 0.0000 51.589 0.0000 89.727 3.4223 2.9256 3.0155 0.40000 0.53000 0.98000 2.3200 3.8800 4.4300 4.3100 4.0000 3.6500 3.3200 3.0600 2.8500 2.6900 2.5900 2.4800 2.4000 2.3600 2.3900 2.4000 2.4900 2.7800 3.3100 3.8000 4.1400 4.3300 4.4400 4.5200 4.6200 4.6900 4.7500 4.7900 4.8500 4.9000 4.9600 5.0200 5.1300 106 3.4657 71.256 0.0000 85.683 3.7151 2.8417 3.1177 0.40000 0.39000 0.93000 2.4000 4.2200 4.8200 4.6200 4.2200 3.7700 3.3200 2.9600 2.7000 2.4600 2.2900 2.1100 1.9600 1.9200 1.9400 1.9700 2.0900 2.5600 3.4800 4.3400 4.9400 5.2600 5.4300 5.5400 5.6500 5.7500 5.8000 5.8600 5.9400 5.9600 6.0100 6.1000 6.2100 107 0.0000 100.00 49.751 82.605 3.7113 2.4017 2.1274 0.37000 0.47000 0.96000 2.0800 3.1700 3.4600 3.2600 2.8700 2.5200 2.1500 1.8800 1.6900 1.5700 1.4700 1.2800 1.0900 1.0400 1.0700 1.1100 1.2500 1.9400 3.3800 4.8100 5.8000 6.3500 6.6200 6.7800 6.9300 7.0400 7.1200 7.1800 7.2400 7.3200 7.3900 7.4900 7.5700 108 0.0000 71.605 82.550 87.633 3.3758 2.6723 1.8057 0.38000 0.50000 1.0400 1.9400 2.5500 2.6800 2.5700 2.3300 2.0900 1.9000 1.7500 1.7400 1.8800 2.0300 2.0100 1.9100 1.8700 1.9100 1.9300 2.0500 2.5000 3.3700 4.1900 4.7400 5.0600 5.2200 5.3300 5.4400 5.5300 5.5900 5.6200 5.6700 5.7500 5.8200 5.8600 5.9800 109 0.0000 100.00 69.324 89.751 2.6375 1.8912 1.7288 0.32000 0.61000 1.0700 1.9600 2.6000 2.7100 2.5600 2.3000 2.0100 1.8000 1.6000 1.4900 1.4200 1.3700 1.2600 1.1500 1.1100 1.1200 1.1400 1.2300 1.6200 2.4300 3.2600 3.8200 4.1600 4.3100 4.4100 4.5100 4.6000 4.6700 4.7200 4.7900 4.8200 4.8800 4.9400 5.0500 110 41.949 100.00 96.795 80.712 2.5370 1.8621 1.6298 0.41000 0.57000 1.0500 1.8600 2.4600 2.5000 2.3900 2.1400 1.8900 1.6800 1.5300 1.4800 1.5000 1.5100 1.3400 1.1700 1.1100 1.1200 1.1300 1.2000 1.5900 2.4100 3.1800 3.6700 3.9600 4.0800 4.1600 4.2700 4.4000 4.4900 4.5000 4.5200 4.5100 4.5000 4.5500 4.7300 111 27.274 86.163 61.507 73.344 4.1604 3.0100 2.4849 0.26000 0.46000 1.0200 2.2300 3.4800 3.8400 3.6500 3.3100 2.9400 2.6000 2.3300 2.2100 2.2400 2.2600 2.0600 1.8100 1.7400 1.7700 1.7800 1.9400 2.6200 3.9900 5.2700 6.1300 6.5900 6.8200 6.9600 7.1100 7.2800 7.3900 7.4100 7.4300 7.4300 7.4500 7.5200 7.7200 112 0.0000 100.00 0.0000 86.342 3.3566 2.2219 2.6532 0.55000 0.52000 0.97000 2.3900 3.9400 4.4100 4.1400 3.6600 3.1700 2.6700 2.2800 1.9700 1.7000 1.5200 1.3000 1.1400 1.0900 1.1100 1.1400 1.2600 1.8100 2.9700 4.1200 4.9100 5.3600 5.5500 5.7000 5.8100 5.8900 5.9700 6.0200 6.0600 6.1300 6.2100 6.2400 6.3400 113 42.424 100.00 48.052 86.358 2.0452 1.5178 1.8607 0.23000 0.42000 0.91000 1.8900 2.7800 2.9600 2.8300 2.5300 2.2000 1.9100 1.6600 1.5100 1.3900 1.3000 1.1500 1.0200 0.97000 0.97000 0.98000 1.0400 1.3000 1.8600 2.3800 2.7300 2.9200 3.0100 3.0800 3.1500 3.2500 3.3200 3.3300 3.3400 3.3500 3.3400 3.3900 3.5400 114 0.0000 78.181 8.7615 79.422 5.0765 3.6279 3.7075 0.58000 0.54000 1.0100 2.7800 5.0500 5.8100 5.5900 5.0400 4.4700 3.9100 3.4400 3.1200 2.8400 2.6400 2.3800 2.1600 2.1100 2.1600 2.2000 2.3700 3.1500 4.7000 6.2100 7.2500 7.8200 8.1000 8.2700 8.4300 8.5500 8.6200 8.6900 8.7600 8.8300 8.9400 8.9700 9.0800 115 9.4109 63.511 29.829 81.366 4.5845 3.7317 3.3382 0.52000 0.52000 1.0400 2.5100 4.3100 4.9400 4.8100 4.4100 4.0100 3.6200 3.3300 3.1700 3.1100 3.1100 2.9800 2.8200 2.7700 2.7900 2.8200 2.9500 3.4900 4.4900 5.4200 6.0400 6.3800 6.5600 6.6700 6.7800 6.8900 6.9600 7.0000 7.0500 7.0800 7.1500 7.2100 7.3400 116 12.036 62.199 0.0000 73.976 5.8784 4.7261 5.0409 0.34000 0.49000 1.00000 3.0700 6.2200 7.5200 7.3300 6.7800 6.1600 5.5500 5.0300 4.6400 4.3100 4.0600 3.7800 3.5300 3.4500 3.4800 3.5100 3.6600 4.3200 5.5900 6.7800 7.5700 7.9900 8.2000 8.3500 8.4900 8.6200 8.7000 8.7400 8.7800 8.8300 8.8700 8.9300 9.0700 117 0.0000 100.00 0.0000 78.205 4.7603 2.9311 3.4068 0.36000 0.44000 1.0200 2.6900 5.0200 5.7800 5.4400 4.7600 4.0800 3.3900 2.8300 2.4000 2.0200 1.7500 1.4300 1.1600 1.1000 1.1400 1.1800 1.3900 2.2800 4.1700 6.0400 7.3400 8.0800 8.4100 8.6200 8.7900 8.9200 9.0200 9.0800 9.1500 9.2500 9.3300 9.4500 9.5100 118 0.0000 100.00 51.207 75.146 5.1163 3.2608 2.6536 0.55000 0.55000 1.2200 2.4200 3.8700 4.2700 4.0400 3.5900 3.1500 2.7200 2.3700 2.1600 2.0300 1.9200 1.6500 1.3800 1.3100 1.3600 1.4100 1.6100 2.6000 4.6900 6.7600 8.1900 8.9900 9.3400 9.5500 9.7200 9.8600 9.9200 9.9800 10.050 10.130 10.210 10.300 10.410 119 100.00 0.0000 100.00 74.337 2.0499 3.4628 2.1454 0.24000 0.51000 0.99000 1.9300 2.5000 2.6200 2.5500 2.3700 2.2400 2.2000 2.3200 3.0300 4.6400 6.4000 6.8800 6.3100 5.3200 4.1000 2.9600 2.2400 1.8700 1.6700 1.5100 1.4100 1.3800 1.3700 1.3900 1.4500 1.5900 1.6800 1.6500 1.6000 1.5000 1.4600 1.5200 1.7100 120 68.386 0.0000 100.00 84.305 2.6543 3.3706 1.9287 0.56000 0.49000 1.0700 1.9400 2.4300 2.5200 2.4400 2.2400 2.0900 1.9900 2.0200 2.4100 3.3900 4.4700 4.8600 4.6800 4.2800 3.7600 3.2400 2.9100 2.7300 2.6400 2.5700 2.5100 2.5100 2.5300 2.5400 2.6000 2.7000 2.7700 2.7500 2.7400 2.7000 2.6900 2.7400 2.8900 121 74.311 0.0000 100.00 76.809 2.8496 3.9490 2.0355 0.28000 0.51000 1.0100 1.9100 2.4700 2.5500 2.4400 2.2600 2.1500 2.0600 2.1600 2.7800 4.2200 5.8100 6.3500 6.0200 5.3600 4.5100 3.7000 3.1800 2.9000 2.7600 2.6500 2.5600 2.5600 2.5500 2.5800 2.6600 2.7900 2.9000 2.8800 2.8500 2.7800 2.7400 2.8200 2.9800 122 55.142 0.0000 100.00 77.267 3.8802 4.8524 2.0759 0.50000 0.47000 1.0100 1.8900 2.4600 2.5600 2.4600 2.3000 2.1800 2.1100 2.2200 2.8400 4.3200 6.0200 6.6900 6.5200 6.0400 5.4000 4.7700 4.3800 4.1600 4.0600 3.9800 3.9200 3.9100 3.9300 3.9600 4.0400 4.1800 4.2600 4.2600 4.2300 4.1900 4.1600 4.2300 4.3900 123 44.468 38.278 100.00 82.022 3.4452 3.5713 1.8969 0.54000 0.66000 1.0800 1.9700 2.5100 2.5900 2.5100 2.2800 2.0900 1.9500 1.9400 2.1900 2.8700 3.6300 3.8900 3.7900 3.6600 3.5200 3.3800 3.3300 3.4400 3.6800 3.8700 3.9700 4.0400 4.0900 4.1300 4.2200 4.3300 4.4100 4.4100 4.4100 4.3900 4.3800 4.4500 4.5800 124 41.032 0.0000 70.205 87.710 3.2954 3.6998 2.4779 0.43000 0.60000 1.0900 2.1400 3.0000 3.2600 3.2000 3.0300 2.8600 2.7200 2.7000 2.9300 3.5000 4.1600 4.4100 4.3400 4.1600 3.9000 3.6500 3.4900 3.4100 3.3700 3.3500 3.3500 3.3600 3.3800 3.4000 3.4800 3.5500 3.6000 3.6200 3.6200 3.6300 3.6300 3.7100 3.7600 125 35.350 30.355 80.664 72.449 5.3940 5.6230 2.6557 0.40000 0.46000 0.99000 2.1100 3.0600 3.3700 3.3400 3.1600 2.9800 2.8600 2.8900 3.3300 4.3900 5.5800 6.0200 5.9200 5.7600 5.5800 5.3900 5.3500 5.5000 5.8400 6.1200 6.2700 6.3800 6.4600 6.5300 6.6400 6.7900 6.9000 6.9000 6.8900 6.8800 6.8800 6.9500 7.2300 126 30.397 23.658 100.00 81.696 4.1288 4.3302 1.8157 0.30000 0.44000 0.90000 1.8700 2.3300 2.4200 2.3000 2.1300 1.9600 1.8400 1.8500 2.2300 3.1200 4.1500 4.5800 4.5700 4.4800 4.3700 4.2700 4.2300 4.3400 4.5300 4.6900 4.7900 4.8700 4.9200 4.9700 5.0600 5.1800 5.2600 5.2700 5.3000 5.2900 5.3100 5.4000 5.5300 127 18.230 0.0000 51.845 82.159 5.7805 6.2210 3.8866 0.57000 0.58000 1.1100 2.4800 4.2600 4.8900 4.9400 4.7600 4.6100 4.4600 4.4300 4.7400 5.4800 6.3200 6.6900 6.6900 6.5800 6.4200 6.2500 6.1700 6.1300 6.1200 6.1200 6.1300 6.1600 6.1900 6.2400 6.3300 6.4300 6.4800 6.5100 6.5400 6.5500 6.5700 6.6600 6.7500 128 39.119 0.0000 65.624 75.432 5.3984 6.2565 3.5858 0.43000 0.51000 1.0200 2.2700 3.7800 4.3200 4.3900 4.2600 4.1500 4.0700 4.1500 4.6900 5.8900 7.2100 7.7200 7.5700 7.1800 6.6800 6.1700 5.8600 5.6900 5.6200 5.5600 5.5300 5.5400 5.5800 5.6100 5.7100 5.8400 5.9300 5.9200 5.9300 5.8900 5.8900 5.9800 6.1400 129 42.682 0.0000 100.00 85.301 3.2982 3.8126 1.8565 0.42000 0.61000 1.0600 1.9000 2.3700 2.4500 2.3600 2.1700 2.0100 1.9000 1.9100 2.2600 3.1800 4.2400 4.6800 4.6500 4.4200 4.1200 3.8100 3.6300 3.5400 3.4900 3.4700 3.4400 3.4600 3.4800 3.5100 3.5900 3.6700 3.7400 3.7400 3.7400 3.7300 3.7500 3.8200 3.9800 130 57.863 31.008 100.00 75.599 3.5345 4.0167 2.0028 0.32000 0.58000 1.0900 1.9900 2.5600 2.6300 2.5000 2.3300 2.1500 2.0700 2.1000 2.5200 3.5600 4.6800 5.0400 4.8500 4.5600 4.1800 3.8200 3.6200 3.6100 3.7300 3.8000 3.8300 3.8800 3.9100 3.9400 4.0300 4.1700 4.2600 4.2600 4.2400 4.1700 4.1600 4.2300 4.4000 131 0.0000 9.8343 39.166 72.853 9.4309 9.5456 5.8315 0.65000 0.61000 1.1100 3.0900 6.1100 7.3400 7.4400 7.2200 6.9800 6.8200 6.7600 7.0700 7.8900 8.8200 9.2500 9.3000 9.3300 9.3800 9.4100 9.5400 9.7700 10.140 10.440 10.650 10.810 10.890 10.980 11.080 11.170 11.230 11.280 11.340 11.420 11.490 11.560 11.680 132 1.2488 0.0000 100.00 88.875 4.0284 4.1772 1.6767 0.31000 0.43000 0.91000 1.7300 2.2400 2.2800 2.2000 1.9700 1.8100 1.6900 1.6600 1.9600 2.7000 3.6000 4.0700 4.2100 4.2600 4.2900 4.3100 4.3900 4.4400 4.4900 4.5400 4.6000 4.6600 4.7200 4.7700 4.8600 4.9500 5.0000 5.0400 5.1200 5.1500 5.2300 5.2900 5.3800 133 0.0000 8.5358 51.041 89.037 4.0646 4.0647 2.6301 0.38000 0.46000 0.92000 2.0700 3.1700 3.5600 3.5100 3.2800 3.0900 2.9200 2.8400 2.9400 3.2800 3.6900 3.8900 3.9300 3.9600 4.0000 4.0300 4.0900 4.1800 4.3200 4.4400 4.5400 4.6100 4.6700 4.7400 4.8100 4.9000 4.9400 4.9800 5.0400 5.0900 5.1500 5.2300 5.3200 134 0.0000 36.394 69.707 76.498 6.2942 5.7575 2.7703 0.24000 0.52000 0.94000 2.2200 3.3300 3.7100 3.6000 3.4000 3.1800 3.0100 2.9600 3.2200 3.9500 4.7300 5.0300 5.0000 5.0100 5.0600 5.1100 5.3000 5.8100 6.7400 7.5900 8.1600 8.4900 8.6400 8.7900 8.9100 9.0200 9.0900 9.1500 9.2100 9.3000 9.3600 9.4500 9.5500 135 36.646 50.208 100.00 75.138 4.4245 4.2404 2.0181 0.50000 0.79000 1.2000 2.1100 2.6500 2.7200 2.6100 2.4200 2.2300 2.1000 2.0900 2.3800 3.1300 3.9400 4.1700 4.0300 3.9200 3.8500 3.7700 3.8200 4.1500 4.7600 5.2700 5.5700 5.7700 5.8700 5.9300 6.0600 6.2000 6.2900 6.3000 6.3100 6.2800 6.2800 6.3900 6.5600 136 31.804 38.004 56.363 71.685 5.9345 5.8556 3.7692 0.54000 0.50000 1.0600 2.5100 4.2900 4.9600 4.9500 4.6900 4.4500 4.2300 4.1400 4.3800 5.0400 5.7500 5.9400 5.7600 5.6200 5.5000 5.3700 5.3700 5.6700 6.2200 6.6800 6.9600 7.1500 7.2400 7.3200 7.4600 7.6200 7.7300 7.7500 7.7600 7.7300 7.7400 7.8000 8.0200 137 0.0000 31.993 100.00 86.052 4.2214 3.9683 1.7371 0.50000 0.54000 1.0200 1.8400 2.3600 2.4200 2.2900 2.1100 1.9200 1.7700 1.7300 1.9500 2.5500 3.2500 3.5600 3.5800 3.6100 3.6400 3.6700 3.7900 4.0900 4.5800 5.0400 5.3300 5.5300 5.6400 5.7200 5.8200 5.9000 5.9600 6.0100 6.0700 6.1300 6.1700 6.2700 6.3600 138 0.0000 35.241 41.135 74.448 7.2931 6.6713 4.4364 0.48000 0.67000 1.0700 2.7800 5.0800 6.0000 5.9200 5.6300 5.3100 5.0200 4.8400 4.9300 5.3300 5.7800 5.9000 5.8200 5.8100 5.8600 5.9000 6.0700 6.6100 7.5900 8.4800 9.0700 9.4200 9.6000 9.7200 9.8500 9.9600 10.020 10.070 10.140 10.210 10.280 10.370 10.510 139 13.787 55.498 78.644 77.601 5.1659 4.4990 2.3776 0.41000 0.57000 1.0700 2.1700 3.0300 3.3100 3.1900 2.9600 2.7100 2.5500 2.4500 2.6300 3.1400 3.7000 3.8100 3.6900 3.6400 3.6800 3.7000 3.8500 4.4100 5.4400 6.3600 6.9600 7.2900 7.4500 7.5600 7.6900 7.8200 7.9000 7.9400 7.9600 8.0200 8.0400 8.1200 8.2700 140 0.0000 18.681 53.502 81.561 6.1335 6.0252 3.4820 0.23000 0.55000 0.98000 2.3000 3.9900 4.5600 4.5200 4.3200 4.0800 3.9300 3.8600 4.0700 4.6900 5.3700 5.6800 5.7100 5.7200 5.7700 5.8000 5.9000 6.1700 6.5800 6.9500 7.2100 7.3600 7.4600 7.5300 7.6500 7.7300 7.7700 7.8200 7.8600 7.9400 7.9900 8.0800 8.2000 141 0.0000 49.223 100.00 86.660 3.7813 3.3212 1.7195 0.47000 0.64000 1.1000 1.9200 2.4000 2.4500 2.3600 2.1400 1.9200 1.7700 1.7100 1.8100 2.2000 2.6400 2.8000 2.7600 2.7500 2.7900 2.8200 2.9500 3.3100 3.9800 4.6000 5.0100 5.2600 5.3800 5.4900 5.5800 5.6700 5.7300 5.7700 5.8400 5.8900 5.9400 6.0300 6.1500 142 0.0000 92.242 100.00 82.415 3.9158 2.7047 1.6462 0.36000 0.63000 1.0400 1.9100 2.4400 2.4700 2.3600 2.1200 1.9100 1.7200 1.5900 1.5500 1.6500 1.7300 1.6000 1.4200 1.3800 1.4100 1.4600 1.6100 2.3100 3.7600 5.1700 6.1600 6.7000 6.9600 7.1200 7.2700 7.3800 7.4500 7.5000 7.5900 7.6400 7.7300 7.8100 7.9300 143 0.0000 57.975 100.00 77.191 5.4551 4.5074 1.8794 0.53000 0.61000 1.0600 2.0000 2.5400 2.6500 2.4800 2.2900 2.1000 1.9500 1.8900 2.1000 2.6900 3.3200 3.5000 3.3900 3.3700 3.4300 3.4800 3.6800 4.3700 5.7200 6.9700 7.8300 8.3000 8.5300 8.6900 8.8200 8.9300 9.0100 9.0700 9.1300 9.2000 9.2800 9.3600 9.4700 144 0.0000 69.138 100.00 81.298 4.4435 3.4599 1.7410 0.60000 0.56000 1.1500 1.8900 2.4900 2.5400 2.4200 2.1800 1.9600 1.8000 1.7000 1.7900 2.1200 2.4700 2.4900 2.3600 2.3200 2.3700 2.4200 2.5900 3.2500 4.5200 5.7300 6.5500 7.0000 7.2200 7.3800 7.5100 7.6200 7.6900 7.7500 7.8100 7.8900 7.9600 8.0600 8.1600 145 0.0000 79.404 100.00 72.080 5.7628 4.1389 1.8182 0.62000 0.59000 1.0600 2.0000 2.5400 2.6200 2.5100 2.2800 2.0500 1.8900 1.8000 1.9100 2.2800 2.6500 2.5900 2.3700 2.3100 2.3800 2.4300 2.6700 3.6800 5.7200 7.7100 9.1000 9.8800 10.220 10.430 10.620 10.750 10.840 10.910 10.970 11.070 11.160 11.260 11.340 146 0.0000 63.292 49.820 78.611 5.4449 4.3253 2.9805 0.37000 0.34000 0.92000 2.2700 3.8400 4.3300 4.2000 3.8900 3.5400 3.2100 2.9900 2.9600 3.1200 3.3200 3.2500 3.0800 3.0300 3.0800 3.1300 3.3300 4.0500 5.4600 6.7600 7.6400 8.1200 8.3700 8.5200 8.6600 8.7600 8.8400 8.9000 8.9600 9.0200 9.1000 9.1800 9.2600 147 0.0000 100.00 100.00 74.804 5.0062 3.2380 1.7418 0.56000 0.60000 1.0600 1.9800 2.5500 2.6400 2.4600 2.2600 2.0200 1.8200 1.6900 1.6700 1.7700 1.8300 1.6400 1.3800 1.3100 1.3600 1.4200 1.6300 2.6200 4.7100 6.8200 8.2900 9.1000 9.4700 9.7000 9.8800 10.020 10.090 10.160 10.240 10.320 10.380 10.470 10.580 148 0.0000 0.0000 100.00 83.741 5.7739 6.0851 2.0071 0.49000 0.58000 1.0500 1.9300 2.4200 2.5500 2.4600 2.2800 2.1300 2.0400 2.1000 2.5900 3.7900 5.2300 5.9900 6.2000 6.2800 6.3200 6.3400 6.4400 6.5000 6.5600 6.6100 6.6600 6.7200 6.7800 6.8300 6.9200 6.9900 7.0500 7.0800 7.1400 7.2000 7.2600 7.3300 7.3900 149 0.0000 0.0000 100.00 77.437 7.3558 7.7906 2.0968 0.38000 0.53000 0.95000 1.8100 2.4000 2.5100 2.4300 2.2600 2.1400 2.1000 2.2300 2.9500 4.6200 6.6000 7.6700 7.9600 8.0600 8.1100 8.1600 8.2800 8.3700 8.4600 8.5200 8.6000 8.6800 8.7500 8.8300 8.9300 9.0100 9.0900 9.1300 9.1900 9.2700 9.3400 9.4300 9.5400 150 27.720 0.0000 100.00 75.357 6.1267 6.9952 2.2808 0.56000 0.63000 1.0800 2.0100 2.5600 2.6800 2.6400 2.4700 2.3500 2.3300 2.4800 3.2600 5.0500 7.1300 8.1000 8.1600 7.9100 7.5400 7.1700 6.9700 6.8600 6.8300 6.7800 6.7700 6.7900 6.8200 6.8700 6.9700 7.0900 7.1600 7.1700 7.1900 7.1800 7.1900 7.2500 7.3900 151 34.140 0.0000 100.00 80.909 4.4724 5.1318 1.9466 0.21000 0.49000 0.94000 1.8400 2.3200 2.4300 2.3700 2.1800 2.0400 1.9700 2.0400 2.5900 3.9200 5.4100 6.0900 6.0900 5.8700 5.5400 5.2100 5.0100 4.9200 4.8900 4.8500 4.8500 4.8700 4.9000 4.9400 5.0400 5.1500 5.2400 5.2600 5.2500 5.2500 5.2700 5.3300 5.5000 152 0.0000 3.2162 64.221 79.081 7.4950 7.8060 3.7407 0.45000 0.66000 1.1100 2.5300 4.0500 4.6800 4.6600 4.4600 4.3100 4.2300 4.2600 4.7200 5.8300 7.0700 7.7000 7.8400 7.8900 7.9300 7.9600 8.0500 8.1500 8.2800 8.3800 8.4600 8.5300 8.6100 8.6700 8.7600 8.8500 8.8900 8.9200 8.9900 9.0300 9.0900 9.1800 9.2700 153 11.365 28.130 100.00 73.710 6.6761 6.5656 1.9936 0.37000 0.51000 0.99000 1.8700 2.4300 2.5200 2.4300 2.2200 2.0900 2.0000 2.0700 2.6400 3.9700 5.5100 6.2000 6.2600 6.2700 6.2700 6.2800 6.4200 6.8100 7.4900 8.0600 8.4400 8.6600 8.7900 8.9100 9.0400 9.1700 9.2600 9.3100 9.3500 9.4000 9.4600 9.5500 9.7100 154 0.0000 44.052 100.00 72.702 7.1062 6.2815 1.9499 0.56000 0.51000 0.99000 1.9100 2.4300 2.5300 2.4500 2.2400 2.0800 1.9800 2.0100 2.4700 3.5500 4.7700 5.2200 5.2000 5.2000 5.2700 5.3500 5.5800 6.3500 7.7400 9.0000 9.8600 10.350 10.590 10.760 10.920 11.040 11.130 11.200 11.260 11.350 11.470 11.550 11.690 155 0.0000 29.241 100.00 81.149 5.3710 5.1279 1.8366 0.51000 0.64000 0.99000 1.8500 2.3800 2.4400 2.3400 2.1400 1.9800 1.8700 1.8700 2.2300 3.1200 4.1700 4.6500 4.7000 4.7300 4.7700 4.8200 4.9600 5.3300 5.9400 6.4700 6.8500 7.0700 7.1900 7.3000 7.4100 7.4900 7.5500 7.5900 7.6700 7.7300 7.8200 7.8600 8.0000 156 100.00 0.0000 7.8624 50.728 5.4716 8.2830 15.346 0.61000 0.62000 1.1900 4.5800 12.030 16.920 19.090 20.030 19.940 19.690 19.390 19.160 18.900 18.230 16.750 14.440 11.620 8.5000 5.6900 3.9300 3.0500 2.5800 2.2200 1.9900 1.8900 1.8700 1.8800 2.0200 2.3100 2.5000 2.4400 2.3100 2.1200 2.0100 2.1100 2.5000 157 85.328 11.560 0.0000 64.430 4.5277 5.8615 9.8034 0.46000 0.50000 1.0600 3.7500 8.6800 11.510 12.570 12.840 12.590 12.280 11.950 11.620 11.230 10.690 9.9200 8.8000 7.4800 5.9800 4.5600 3.6700 3.2300 3.0200 2.8400 2.7200 2.6800 2.6700 2.6900 2.8000 3.0000 3.1300 3.1100 3.0200 2.9100 2.8500 2.9400 3.2100 158 100.00 31.329 0.0000 54.333 4.1473 5.4361 11.509 0.76000 0.71000 1.2600 4.2600 10.330 13.970 15.240 15.430 14.880 14.170 13.480 12.850 12.150 11.320 10.160 8.6800 7.0600 5.3300 3.7200 2.7300 2.3200 2.1600 2.0100 1.8700 1.8200 1.8000 1.8200 1.9400 2.1900 2.3600 2.3000 2.2100 2.0200 1.9400 2.0200 2.4100 159 87.141 7.9289 0.0000 56.352 5.8444 7.7593 13.479 0.81000 0.72000 1.3100 4.5500 11.300 15.540 17.190 17.700 17.430 17.030 16.590 16.130 15.560 14.770 13.610 11.980 10.050 7.8800 5.8800 4.6200 3.9900 3.6800 3.4200 3.2400 3.1800 3.1600 3.1700 3.3100 3.5600 3.7200 3.6800 3.5800 3.4200 3.3100 3.4200 3.7600 160 100.00 37.566 0.0000 62.098 3.1713 4.0108 8.5070 0.47000 0.51000 1.1600 3.7600 8.1400 10.620 11.430 11.410 10.920 10.300 9.7500 9.2600 8.7100 8.1200 7.2800 6.2200 5.1100 3.9100 2.7800 2.1000 1.8100 1.7400 1.6500 1.5600 1.5200 1.5100 1.5300 1.6400 1.8300 1.9800 1.9400 1.8300 1.7300 1.6300 1.7500 2.0200 161 93.846 67.557 31.210 52.605 2.9520 3.2025 6.0092 0.40000 0.48000 1.0600 3.1100 6.6000 8.2500 8.4800 8.1700 7.5300 6.8100 6.2500 5.9500 5.8300 5.6700 5.0200 4.1800 3.5200 2.9000 2.2800 1.9400 1.9500 2.1600 2.2600 2.2400 2.2400 2.2500 2.2700 2.4300 2.7000 2.8800 2.8400 2.7200 2.5300 2.4100 2.5300 2.9000 162 100.00 46.285 19.916 67.240 2.3305 2.8730 5.3799 0.44000 0.39000 1.0200 2.7800 5.5700 6.9700 7.3000 7.1600 6.7800 6.3400 5.9800 5.7700 5.6500 5.4800 4.9900 4.2900 3.5700 2.8200 2.0900 1.6600 1.5000 1.5000 1.4600 1.3900 1.3800 1.3800 1.3900 1.4700 1.6400 1.7400 1.7300 1.6500 1.5400 1.5200 1.5800 1.8200 163 100.00 60.695 0.0000 68.403 2.4301 2.6266 5.7116 0.53000 0.57000 1.2100 3.1500 6.2400 7.8100 8.0900 7.8100 7.2400 6.5700 6.0000 5.5300 5.0600 4.6200 4.0700 3.4600 2.9400 2.4400 1.9300 1.6300 1.5600 1.6200 1.6200 1.5700 1.5700 1.5600 1.5700 1.6500 1.8200 1.9200 1.9000 1.8200 1.7300 1.6700 1.7300 2.0000 164 100.00 54.009 29.416 51.052 3.0152 3.7872 7.0927 0.52000 0.55000 1.0800 3.3800 7.1500 9.1600 9.6800 9.4800 8.9400 8.3100 7.8100 7.6200 7.6300 7.5700 6.8600 5.7800 4.7300 3.6600 2.6600 2.0500 1.8700 1.9100 1.8600 1.7700 1.7600 1.7400 1.7600 1.8900 2.1500 2.3300 2.2700 2.1500 1.9900 1.8800 2.0000 2.3600 165 100.00 59.214 0.0000 58.881 2.7716 3.0826 7.3141 0.53000 0.51000 1.0200 3.4800 7.5800 9.8400 10.330 10.050 9.3400 8.5000 7.7800 7.1500 6.5400 5.9400 5.1700 4.3100 3.5600 2.8100 2.1000 1.6800 1.5900 1.6300 1.6300 1.5700 1.5600 1.5500 1.5700 1.6800 1.9000 2.0500 2.0100 1.9000 1.7700 1.7000 1.7900 2.1200 166 79.989 46.461 0.0000 53.202 5.2054 5.6464 9.9873 0.61000 0.54000 1.1700 4.2200 9.9700 13.070 13.760 13.490 12.710 11.830 11.060 10.380 9.7100 9.0400 8.1800 7.1600 6.2300 5.2800 4.3600 3.8100 3.7400 3.9300 4.0400 4.0400 4.0600 4.0700 4.1200 4.2900 4.5800 4.7700 4.7200 4.6100 4.4300 4.3300 4.4400 4.8200 167 96.633 100.00 0.0000 65.349 1.8709 1.4251 4.1700 0.32000 0.52000 1.0200 2.8000 5.5700 6.7300 6.6000 6.0000 5.1700 4.2800 3.5400 2.9300 2.4000 1.9800 1.5100 1.1400 1.0100 0.98000 0.95000 0.97000 1.1200 1.3700 1.5300 1.5700 1.6000 1.6100 1.6300 1.7300 1.9100 2.0400 2.0100 1.9300 1.8300 1.7700 1.8500 2.1100 168 100.00 87.275 0.0000 58.383 2.2519 1.9705 5.6247 0.55000 0.47000 1.1000 3.2500 6.7800 8.5300 8.6100 8.0100 7.0800 6.0300 5.1800 4.4700 3.8100 3.2700 2.6400 2.0700 1.7600 1.5400 1.3200 1.2100 1.3000 1.5100 1.6000 1.5800 1.5900 1.5900 1.6100 1.7300 1.9300 2.0700 2.0400 1.9400 1.7900 1.7400 1.8200 2.1500 169 100.00 78.468 21.904 57.648 2.4023 2.3586 5.4045 0.42000 0.62000 1.1300 3.0900 6.3400 7.8800 7.9300 7.5300 6.7700 5.9300 5.2700 4.8100 4.4000 4.0600 3.4300 2.7800 2.3600 2.0100 1.6500 1.4800 1.5100 1.7100 1.7900 1.7500 1.7600 1.7600 1.7700 1.9000 2.1200 2.2700 2.2400 2.1100 1.9800 1.9000 1.9800 2.3400 170 96.645 92.772 32.239 61.387 1.9227 1.6152 3.7814 0.32000 0.51000 0.96000 2.6300 4.9300 5.8500 5.7900 5.3300 4.6800 3.9600 3.4000 3.0000 2.6800 2.4000 1.9200 1.4700 1.2800 1.1900 1.0800 1.0600 1.2300 1.5200 1.6900 1.7200 1.7400 1.7500 1.7800 1.8900 2.1100 2.2700 2.2300 2.1400 1.9900 1.9400 1.9900 2.3200 171 100.00 80.509 0.0000 67.753 1.9415 1.8100 4.5844 0.45000 0.37000 1.0500 2.8300 5.5000 6.7800 6.8800 6.4300 5.7400 5.0100 4.3800 3.8500 3.3700 2.9600 2.4900 2.0300 1.7400 1.5200 1.2800 1.1700 1.2100 1.3400 1.3900 1.3900 1.3800 1.3800 1.4000 1.4800 1.6400 1.7400 1.7200 1.6500 1.5600 1.5300 1.5900 1.8000 172 75.489 75.792 0.0000 56.401 4.0122 3.4829 6.8314 0.59000 0.59000 1.1600 3.5600 8.0000 10.120 10.220 9.5400 8.5600 7.4700 6.5900 5.8900 5.2000 4.6600 3.9800 3.3600 3.0000 2.7300 2.4400 2.3400 2.6200 3.2300 3.6900 3.9300 4.0600 4.1200 4.1700 4.3300 4.5900 4.7600 4.7200 4.6400 4.5000 4.3900 4.5100 4.8400 173 60.706 58.571 0.0000 53.692 6.3283 5.8573 9.0985 0.62000 0.65000 1.1900 4.1600 9.8800 12.730 13.000 12.420 11.430 10.380 9.4900 8.7800 8.0800 7.4700 6.7300 5.9500 5.4000 4.9200 4.4200 4.2200 4.5700 5.4100 6.1000 6.4800 6.6900 6.7900 6.8700 7.0600 7.3400 7.5300 7.5100 7.4100 7.2600 7.1800 7.2400 7.6500 174 78.261 61.491 0.0000 54.197 4.6276 4.5274 8.4936 0.64000 0.54000 1.1900 3.9900 9.0700 11.750 12.170 11.670 10.740 9.7300 8.8600 8.1300 7.4300 6.8000 6.0100 5.1600 4.5200 3.9200 3.3100 3.0000 3.1300 3.6000 3.9000 4.0400 4.1100 4.1600 4.2100 4.3700 4.6500 4.8400 4.8000 4.7000 4.5100 4.4200 4.5100 4.8900 175 100.00 100.00 0.0000 52.772 2.4220 1.8194 5.9872 0.38000 0.57000 1.1800 3.5600 7.6700 9.6700 9.5700 8.7000 7.4700 6.1300 5.0400 4.1700 3.3500 2.7300 2.0300 1.4600 1.2500 1.2300 1.1500 1.1600 1.3600 1.7000 1.8600 1.8700 1.8700 1.8700 1.9000 2.0400 2.3100 2.4800 2.4300 2.3100 2.1300 2.0200 2.1100 2.4800 176 60.179 100.00 0.0000 53.406 4.6161 2.9048 5.8270 0.52000 0.51000 1.0500 3.6400 8.0000 9.7700 9.3900 8.4000 7.1700 5.8400 4.7700 3.9200 3.1700 2.5800 1.9200 1.3700 1.2100 1.2300 1.2300 1.3800 2.1800 3.8000 5.2700 6.1700 6.6500 6.8600 7.0000 7.2300 7.5600 7.7400 7.7400 7.6600 7.5000 7.4100 7.4900 7.8800 177 88.805 100.00 22.544 56.929 2.5326 1.9050 4.5348 0.39000 0.51000 1.1500 3.0500 5.9800 7.2500 7.1000 6.4600 5.6200 4.6600 3.9300 3.3500 2.8600 2.4600 1.8800 1.4100 1.2500 1.2200 1.1800 1.2200 1.5100 2.0400 2.4300 2.5900 2.6700 2.7100 2.7500 2.8900 3.1400 3.3100 3.2700 3.1700 3.0100 2.9100 3.0300 3.3300 178 68.667 100.00 0.0000 62.793 3.2231 2.1552 4.5893 0.39000 0.49000 0.98000 3.1100 6.2500 7.5900 7.3500 6.5800 5.6500 4.6300 3.8100 3.1700 2.5700 2.1400 1.6300 1.2400 1.1100 1.1100 1.1000 1.1900 1.6800 2.6300 3.4700 3.9700 4.2300 4.3500 4.4400 4.6000 4.8400 4.9800 4.9700 4.9000 4.7700 4.7000 4.8000 5.0900 179 59.758 84.366 0.0000 55.013 5.0321 3.7562 6.5197 0.67000 0.70000 1.0900 3.6900 8.2100 10.190 10.040 9.1800 8.0800 6.8800 5.9100 5.1700 4.4600 3.9100 3.2700 2.7100 2.4700 2.3900 2.2700 2.3400 2.9900 4.3000 5.4300 6.1200 6.4800 6.6400 6.7500 6.9500 7.2400 7.4200 7.4000 7.3200 7.2000 7.1300 7.2200 7.5500 180 100.00 0.0000 42.312 58.060 3.6456 6.0230 7.6742 0.78000 0.58000 1.1800 3.2100 6.5700 8.4600 9.2400 9.5300 9.5100 9.5100 9.6200 10.260 11.590 12.740 12.460 10.960 8.9100 6.5900 4.4800 3.1700 2.5000 2.1700 1.9100 1.7300 1.6600 1.6500 1.6500 1.7700 1.9800 2.1300 2.1000 2.0100 1.8500 1.8000 1.8800 2.2100 181 100.00 0.0000 27.816 51.612 4.5582 7.4145 11.137 0.75000 0.56000 1.1100 3.9000 8.9800 12.120 13.500 14.090 14.150 14.120 14.170 14.650 15.620 16.230 15.430 13.410 10.810 7.9000 5.2700 3.6500 2.8300 2.4100 2.0700 1.8500 1.7800 1.7500 1.7600 1.9000 2.1700 2.3700 2.3200 2.1900 2.0000 1.8900 2.0100 2.3900 182 80.271 0.0000 33.018 54.835 5.9778 8.4377 10.003 0.79000 0.71000 1.2200 3.7800 8.4700 11.200 12.210 12.550 12.520 12.470 12.510 13.050 14.220 15.220 14.860 13.360 11.330 9.0000 6.8800 5.5500 4.8700 4.5200 4.2300 4.0400 3.9900 3.9700 3.9900 4.1300 4.3800 4.5500 4.5200 4.4000 4.2300 4.1500 4.2500 4.6100 183 100.00 34.506 49.061 70.580 2.1583 2.9684 3.9896 0.35000 0.36000 1.0400 2.3800 4.1700 5.0300 5.2000 5.0800 4.8800 4.6500 4.5300 4.6800 5.1700 5.5900 5.3800 4.7400 3.9800 3.1200 2.3100 1.8100 1.6000 1.5600 1.4800 1.3900 1.3900 1.3800 1.3800 1.4700 1.6000 1.7000 1.6900 1.6100 1.5200 1.5000 1.5100 1.7600 184 76.135 0.0000 19.607 70.657 4.4655 5.7510 7.3560 0.52000 0.71000 1.1700 3.3200 6.7800 8.6700 9.2900 9.3900 9.2400 9.0800 8.9600 9.0300 9.3000 9.4500 9.1200 8.3400 7.3000 6.0600 4.8800 4.1300 3.7300 3.5100 3.3600 3.2300 3.2100 3.2000 3.2200 3.3200 3.4800 3.5800 3.5500 3.5000 3.4000 3.3600 3.4400 3.6400 185 100.00 28.356 24.976 56.118 3.3902 4.8102 8.1658 0.52000 0.68000 1.1700 3.4700 7.4600 9.7200 10.520 10.650 10.350 9.9800 9.7100 9.6900 9.9300 10.000 9.3100 8.0200 6.5300 4.9100 3.4200 2.5100 2.1200 1.9700 1.8300 1.7000 1.6600 1.6500 1.6600 1.7700 1.9900 2.1300 2.0800 1.9900 1.8600 1.7800 1.9000 2.2100 186 73.597 21.890 35.900 60.340 5.1998 6.5220 7.1316 0.44000 0.57000 1.1000 3.3100 6.8000 8.5600 9.0400 9.0400 8.8100 8.5800 8.4700 8.7600 9.5300 10.210 10.020 9.1400 8.0600 6.8200 5.6100 4.8700 4.5400 4.4500 4.3500 4.2600 4.2400 4.2600 4.2800 4.4400 4.6900 4.8600 4.8200 4.7400 4.5900 4.4800 4.5800 4.9400 187 90.650 32.460 29.352 62.740 3.5037 4.5413 6.6923 0.38000 0.52000 1.0600 3.1400 6.5400 8.2900 8.7700 8.7000 8.3800 8.0100 7.7400 7.7400 8.0100 8.1900 7.7500 6.8400 5.8000 4.6700 3.5800 2.8900 2.6200 2.5400 2.4400 2.3400 2.3200 2.3000 2.3100 2.4300 2.6500 2.7700 2.7300 2.6500 2.5000 2.4300 2.4900 2.8200 188 82.750 0.0000 16.717 55.459 5.9425 8.2442 11.616 0.59000 0.58000 1.1900 4.0700 9.6900 13.040 14.340 14.840 14.800 14.700 14.620 14.780 15.180 15.310 14.560 12.970 10.930 8.6200 6.5000 5.1800 4.5000 4.1400 3.8600 3.6700 3.6100 3.6000 3.6300 3.7700 4.0100 4.1900 4.1600 4.0400 3.8900 3.8000 3.8700 4.2400 189 100.00 32.875 51.135 62.564 2.5276 3.6661 4.7638 0.55000 0.55000 1.1100 2.6800 4.7400 5.8300 6.0800 6.0400 5.8100 5.6000 5.5100 5.8200 6.5700 7.2400 6.9900 6.1100 5.0500 3.8800 2.7800 2.1200 1.8400 1.7500 1.6500 1.5600 1.5300 1.5300 1.5300 1.6300 1.8000 1.9200 1.9000 1.8100 1.7100 1.6700 1.7500 2.0300 190 95.523 23.011 38.712 55.590 3.7841 5.5772 7.7105 0.50000 0.54000 1.0200 3.2400 6.9500 9.0000 9.7100 9.8300 9.6400 9.3700 9.2700 9.6000 10.480 11.180 10.700 9.3700 7.7200 5.9200 4.2200 3.1600 2.6900 2.4900 2.2900 2.1400 2.0800 2.0600 2.0900 2.2000 2.4700 2.6200 2.5700 2.4600 2.3000 2.2000 2.2900 2.6200 191 59.867 0.0000 4.6387 65.882 6.9014 8.2367 10.305 0.65000 0.61000 1.1700 4.1300 9.3900 12.200 13.070 13.240 13.060 12.840 12.620 12.500 12.380 12.150 11.640 10.810 9.7400 8.4800 7.2600 6.4800 6.0600 5.8500 5.6700 5.5600 5.5300 5.5400 5.5700 5.7000 5.9200 6.0500 6.0300 5.9800 5.9100 5.8200 5.9200 6.2000 192 100.00 0.0000 20.238 66.837 3.4582 5.1487 8.1257 0.74000 0.63000 1.2500 3.3400 7.0800 9.2700 10.130 10.410 10.330 10.170 10.070 10.160 10.440 10.530 9.9600 8.7800 7.2300 5.4600 3.8200 2.7900 2.2600 2.0000 1.7900 1.6400 1.6000 1.5800 1.5900 1.6800 1.8500 1.9800 1.9400 1.8600 1.7500 1.6900 1.7600 2.0100 193 82.329 0.0000 34.182 64.425 4.4683 6.2525 7.3727 0.48000 0.55000 1.0300 3.1100 6.4900 8.3800 9.0200 9.2600 9.1800 9.1300 9.1500 9.5300 10.380 11.060 10.850 9.8200 8.3900 6.7200 5.1700 4.1800 3.6700 3.4000 3.1900 3.0500 3.0100 3.0000 3.0000 3.1300 3.3300 3.4600 3.4300 3.3600 3.2400 3.1800 3.2700 3.5500 194 63.710 0.0000 20.548 57.445 7.6702 9.6644 11.109 0.59000 0.68000 1.1200 4.0200 9.6300 12.800 13.820 14.130 14.000 13.840 13.770 13.990 14.580 15.040 14.640 13.470 11.920 10.120 8.4200 7.3400 6.7800 6.4700 6.2300 6.0600 6.0200 6.0100 6.0400 6.2000 6.4600 6.6100 6.5900 6.5000 6.3600 6.3000 6.3700 6.7400 195 47.775 0.0000 5.6062 53.931 11.651 13.570 15.812 0.98000 0.79000 1.3800 5.2500 13.690 18.610 20.110 20.390 20.100 19.720 19.410 19.240 19.140 18.890 18.230 17.040 15.570 13.870 12.270 11.230 10.650 10.350 10.100 9.9500 9.9000 9.9000 9.9400 10.110 10.380 10.550 10.530 10.430 10.290 10.210 10.300 10.690 196 65.849 5.1428 0.0000 57.473 7.9262 9.5785 13.468 0.56000 0.63000 1.2000 4.5600 11.650 15.820 17.220 17.550 17.260 16.900 16.500 16.120 15.670 15.060 14.200 12.950 11.440 9.7400 8.1300 7.0900 6.5700 6.3100 6.1100 5.9500 5.9200 5.9100 5.9600 6.1100 6.3600 6.5300 6.5000 6.4000 6.2600 6.1600 6.2600 6.6100 197 100.00 74.281 43.829 61.717 2.0109 2.1552 3.9042 0.24000 0.45000 1.0700 2.5800 4.5800 5.5100 5.5600 5.2900 4.8100 4.3400 3.9500 3.7800 3.7700 3.7200 3.2900 2.7400 2.3100 1.9400 1.5900 1.3900 1.4100 1.5400 1.5800 1.5700 1.5600 1.5600 1.5800 1.6700 1.8800 2.0000 1.9700 1.8900 1.7600 1.7000 1.8100 2.0600 198 100.00 62.399 51.169 68.572 2.0555 2.3942 3.5596 0.47000 0.64000 1.1900 2.5200 4.1700 4.8500 4.8800 4.6800 4.3300 4.0100 3.7600 3.7300 3.9300 4.0700 3.7800 3.2400 2.7800 2.3300 1.8700 1.6200 1.5800 1.6300 1.6500 1.6000 1.5900 1.5900 1.6100 1.6900 1.8500 1.9600 1.9200 1.8600 1.7500 1.7300 1.7800 2.0400 199 95.955 72.472 70.414 60.707 1.9853 2.2357 2.8030 0.11000 0.38000 0.94000 2.1900 3.4500 3.9100 3.8800 3.6300 3.3300 3.0400 2.8600 2.9500 3.3700 3.7000 3.4200 2.8900 2.4700 2.0900 1.7200 1.5200 1.5600 1.7300 1.8100 1.8000 1.8100 1.8100 1.8300 1.9500 2.1500 2.3000 2.2500 2.1700 2.0400 1.9800 2.0600 2.3300 200 100.00 85.750 89.426 50.319 1.7808 1.8975 2.3295 0.28000 0.44000 0.92000 2.1800 3.0800 3.3600 3.2500 2.9800 2.7100 2.4500 2.3000 2.4400 2.9000 3.2100 2.8400 2.2300 1.8900 1.6400 1.3800 1.2700 1.3800 1.6500 1.7700 1.7600 1.7500 1.7600 1.7800 1.9200 2.1900 2.3800 2.3300 2.2000 2.0300 1.9100 2.0600 2.4200 201 99.390 61.861 47.021 57.555 2.4219 2.9137 4.7376 0.45000 0.59000 1.0900 2.8200 5.1700 6.3100 6.4800 6.2700 5.8600 5.4000 5.0800 5.0300 5.2500 5.4100 4.9400 4.1700 3.4700 2.8000 2.1500 1.7600 1.7000 1.7900 1.7900 1.7400 1.7100 1.7200 1.7400 1.8400 2.0700 2.2100 2.1700 2.0800 1.9300 1.8500 1.9300 2.2700 202 100.00 89.770 100.00 62.291 1.6955 1.7080 1.9760 0.56000 0.75000 1.1700 2.2400 2.7900 2.8500 2.8000 2.5200 2.2800 2.0800 1.9500 2.0100 2.2700 2.4500 2.1800 1.8000 1.6000 1.4900 1.3800 1.3300 1.4400 1.6400 1.7400 1.7400 1.7400 1.7600 1.7700 1.8800 2.0500 2.1800 2.1400 2.0700 1.9600 1.9200 2.0000 2.2700 203 65.209 57.076 45.548 63.208 4.3400 4.3331 4.5057 0.37000 0.39000 0.95000 2.6700 5.0900 6.1200 6.1700 5.8800 5.4900 5.0800 4.8100 4.8000 5.0800 5.3500 5.1300 4.6500 4.2800 3.9300 3.5700 3.4200 3.6300 4.1300 4.5000 4.6900 4.8100 4.8500 4.9200 5.0700 5.2900 5.4500 5.4400 5.3700 5.2500 5.1600 5.2700 5.5500 204 70.030 25.269 27.865 69.171 4.7097 5.5105 6.4211 0.51000 0.63000 1.2300 3.2400 6.4000 8.0200 8.3700 8.2700 7.9700 7.6600 7.4500 7.4700 7.7500 8.0000 7.7400 7.1400 6.4300 5.6300 4.8300 4.3400 4.1400 4.1200 4.0900 4.0400 4.0400 4.0500 4.0600 4.1700 4.3600 4.4800 4.4600 4.4000 4.3000 4.2200 4.3300 4.5600 205 51.681 29.332 16.886 56.121 8.3083 8.9273 9.8752 0.59000 0.61000 1.1500 4.0200 9.5500 12.430 13.000 12.850 12.380 11.830 11.430 11.320 11.430 11.530 11.120 10.330 9.5300 8.6700 7.8200 7.3500 7.3400 7.6700 7.9300 8.0500 8.1500 8.2100 8.2800 8.4600 8.7200 8.8800 8.8700 8.8100 8.6700 8.6000 8.6800 9.0700 206 72.192 35.273 27.184 56.457 5.5807 6.4521 8.0065 0.45000 0.60000 1.1600 3.6100 7.8500 10.010 10.520 10.420 10.010 9.5400 9.2100 9.1900 9.4900 9.7400 9.3100 8.4100 7.4500 6.4100 5.3900 4.7800 4.6400 4.7700 4.8300 4.8300 4.8700 4.8700 4.9200 5.0800 5.3400 5.5100 5.4900 5.3800 5.2300 5.1300 5.2300 5.5800 207 50.719 23.548 21.989 65.199 6.6997 7.3107 7.4499 0.45000 0.52000 1.0500 3.4000 7.3900 9.3200 9.7000 9.5900 9.2500 8.9200 8.6800 8.6900 8.9500 9.1800 8.9900 8.4800 7.9200 7.2800 6.6400 6.2700 6.1900 6.3300 6.4300 6.4700 6.5200 6.5600 6.6100 6.7600 6.9500 7.0900 7.0900 7.0500 6.9600 6.9300 7.0000 7.2900 208 29.530 18.604 0.0000 70.577 7.6832 7.8727 8.1181 0.76000 0.60000 1.1300 3.7300 8.2700 10.420 10.770 10.520 10.130 9.7400 9.3900 9.1400 8.9100 8.7100 8.4800 8.1900 7.9200 7.6500 7.3500 7.2100 7.2500 7.4600 7.6300 7.7400 7.8300 7.8900 7.9700 8.0900 8.2500 8.3500 8.3700 8.3800 8.3500 8.3700 8.4400 8.6800 209 71.539 42.155 8.4781 68.397 4.1627 4.4771 6.4608 0.25000 0.51000 1.0400 3.2000 6.7500 8.4800 8.7900 8.5900 8.1200 7.6000 7.1800 6.8800 6.6200 6.3700 5.9400 5.3800 4.8600 4.3100 3.7500 3.4300 3.3800 3.5100 3.5800 3.6000 3.6300 3.6400 3.6700 3.8000 3.9900 4.1000 4.0900 4.0300 3.9400 3.8700 3.9200 4.1800 210 70.346 50.599 29.898 58.746 4.9098 5.1546 6.4725 0.56000 0.56000 1.0800 3.3100 6.8700 8.5700 8.8100 8.5500 8.0300 7.4900 7.0800 6.9500 7.0500 7.1400 6.7300 6.0500 5.4300 4.8100 4.1900 3.8600 3.9500 4.3400 4.6300 4.7500 4.8500 4.8900 4.9500 5.1000 5.3700 5.5200 5.5000 5.4100 5.2700 5.1600 5.2400 5.5800 211 56.445 21.156 0.0000 65.231 6.6155 7.2691 9.4877 0.62000 0.60000 1.1000 3.9400 9.1000 11.880 12.550 12.450 12.010 11.520 11.090 10.710 10.340 9.9400 9.4200 8.7300 7.9900 7.1600 6.3400 5.8600 5.6900 5.7600 5.8000 5.8000 5.8300 5.8600 5.9100 6.0400 6.2300 6.3700 6.3500 6.2900 6.2100 6.1500 6.2300 6.5100 212 66.405 44.399 0.0000 60.244 5.6506 5.8530 8.7172 0.52000 0.52000 1.0900 3.8600 8.9600 11.510 11.990 11.660 11.020 10.280 9.6400 9.1100 8.5900 8.1000 7.4700 6.7400 6.1100 5.4700 4.8300 4.4600 4.4800 4.7800 4.9900 5.0700 5.1400 5.1800 5.2300 5.3900 5.6300 5.8000 5.7800 5.7100 5.5400 5.4800 5.5700 5.9000 213 72.006 14.950 0.0000 70.607 4.4281 5.2297 7.6648 0.58000 0.68000 1.1300 3.4600 7.3100 9.4300 10.020 10.040 9.7200 9.3700 9.0700 8.7800 8.4900 8.1400 7.6600 6.9800 6.2000 5.2900 4.4200 3.8600 3.6100 3.5000 3.4100 3.3400 3.3200 3.3300 3.3400 3.4400 3.5900 3.6900 3.6600 3.6100 3.5500 3.4900 3.5800 3.7700 214 54.160 16.928 0.0000 54.663 9.6014 10.717 13.629 0.75000 0.61000 1.2100 4.8500 12.380 16.610 17.780 17.810 17.360 16.800 16.270 15.820 15.310 14.770 14.010 13.000 11.890 10.650 9.4400 8.6700 8.3900 8.4100 8.3900 8.3700 8.3800 8.4100 8.4600 8.6500 8.9400 9.1200 9.1000 9.0300 8.8700 8.7900 8.8900 9.3000 215 28.372 8.8742 0.0000 53.948 14.842 15.733 16.416 0.83000 0.70000 1.3300 5.6200 14.990 20.300 21.390 21.320 20.720 20.110 19.590 19.130 18.740 18.320 17.810 17.120 16.360 15.550 14.720 14.250 14.140 14.270 14.390 14.450 14.530 14.590 14.650 14.840 15.080 15.220 15.200 15.200 15.120 15.110 15.220 15.530 216 37.994 0.25136 0.0000 63.447 10.325 11.462 12.634 0.78000 0.53000 1.1700 4.5300 11.460 15.290 16.240 16.310 15.980 15.640 15.320 15.050 14.770 14.450 14.010 13.360 12.550 11.610 10.670 10.090 9.7600 9.6000 9.4600 9.3900 9.3900 9.4100 9.4600 9.5900 9.7900 9.9200 9.9100 9.8800 9.8100 9.7700 9.8500 10.140 217 27.894 21.338 0.0000 60.789 11.044 11.149 11.675 0.73000 0.57000 1.1400 4.5500 11.370 14.960 15.510 15.240 14.660 14.050 13.540 13.110 12.740 12.390 11.990 11.470 11.040 10.600 10.140 9.9300 10.120 10.650 11.120 11.380 11.580 11.670 11.770 11.950 12.160 12.300 12.300 12.310 12.250 12.270 12.330 12.630 218 68.211 59.704 28.816 69.433 3.4479 3.3876 4.4095 0.63000 0.55000 1.1300 2.7600 5.1200 6.0900 6.1900 5.8700 5.4300 4.9600 4.6200 4.4300 4.3700 4.3500 4.0500 3.6300 3.3200 3.0300 2.7400 2.6100 2.7500 3.1100 3.3700 3.5100 3.5800 3.6200 3.6600 3.7800 3.9500 4.0700 4.0400 4.0000 3.9000 3.8600 3.9400 4.1700 219 90.379 85.203 51.634 64.033 2.1543 2.0057 3.2063 0.54000 0.54000 1.1300 2.5000 4.1100 4.7700 4.6700 4.3500 3.9000 3.4500 3.0700 2.9000 2.8700 2.8100 2.4600 2.0400 1.8100 1.6500 1.4900 1.4300 1.5800 1.8800 2.0700 2.1300 2.1700 2.2000 2.2300 2.3400 2.5200 2.6500 2.6200 2.5400 2.4300 2.3700 2.4500 2.7400 220 88.205 100.00 73.503 58.123 2.1115 1.7355 2.4954 0.38000 0.62000 1.0500 2.3200 3.4600 3.7900 3.7000 3.3600 2.9900 2.6200 2.3200 2.2100 2.2200 2.1700 1.7600 1.3500 1.2100 1.2000 1.1500 1.1900 1.4800 1.9700 2.3400 2.4900 2.5800 2.6200 2.6600 2.8000 3.0200 3.1700 3.1400 3.0500 2.9200 2.8400 2.9400 3.2800 221 84.287 81.233 65.387 56.298 2.6632 2.4872 3.1176 0.34000 0.42000 0.92000 2.3800 3.9500 4.4900 4.4600 4.1300 3.7500 3.3500 3.0700 3.0400 3.2400 3.3900 3.0100 2.5000 2.2100 2.0100 1.7900 1.7300 1.9700 2.4600 2.8100 2.9700 3.0400 3.0800 3.1300 3.2800 3.5400 3.7000 3.6700 3.5700 3.4200 3.3200 3.4100 3.7700 222 96.239 84.867 54.319 51.479 2.2481 2.1570 3.8684 0.40000 0.39000 1.0200 2.7600 4.8100 5.7000 5.6500 5.2900 4.7400 4.1400 3.7100 3.5200 3.5500 3.5000 2.9800 2.3600 2.0000 1.7500 1.4900 1.3800 1.5300 1.8600 2.0400 2.0600 2.0900 2.1000 2.1300 2.3000 2.5600 2.7500 2.7100 2.5600 2.4000 2.2900 2.4100 2.7700 223 93.052 100.00 89.124 67.637 1.5162 1.3241 1.8360 0.35000 0.47000 0.98000 2.0200 2.6700 2.8200 2.7000 2.4300 2.1500 1.9000 1.7100 1.6500 1.7100 1.6900 1.4300 1.1300 1.0300 1.00000 0.98000 1.00000 1.1700 1.4300 1.6200 1.6800 1.7300 1.7400 1.7600 1.8600 2.0200 2.1400 2.1200 2.0500 1.9600 1.9100 1.9700 2.2100 224 77.956 62.685 4.7221 70.116 3.0931 3.0247 5.1899 0.38000 0.43000 0.97000 2.8700 5.8700 7.2900 7.4100 7.0700 6.5000 5.8800 5.3700 4.9500 4.5900 4.2400 3.8200 3.3400 3.0000 2.6900 2.3500 2.1900 2.2700 2.5300 2.7100 2.7800 2.8300 2.8600 2.8800 2.9800 3.1400 3.2700 3.2400 3.2000 3.1000 3.0100 3.1200 3.3600 225 83.385 100.00 38.475 66.851 2.0755 1.5914 2.9812 0.27000 0.38000 1.0100 2.4100 4.1100 4.7200 4.5900 4.1800 3.6300 3.0800 2.6200 2.3100 2.0600 1.8600 1.4900 1.1700 1.0600 1.0500 1.0200 1.0600 1.3200 1.7800 2.1700 2.3400 2.4500 2.5000 2.5300 2.6500 2.8300 2.9500 2.9300 2.8700 2.7800 2.7100 2.8100 3.0000 226 97.229 100.00 56.949 51.030 1.8190 1.5079 3.1819 0.30000 0.40000 1.0100 2.4800 4.2600 4.9700 4.8800 4.4300 3.8800 3.2900 2.8300 2.5700 2.4200 2.2300 1.7300 1.2500 1.0800 1.0500 1.00000 1.0200 1.2200 1.5500 1.7400 1.7700 1.7900 1.8100 1.8200 1.9500 2.2000 2.3700 2.3200 2.2100 2.0700 1.9600 2.0800 2.4400 227 69.679 78.585 26.209 56.900 4.3440 3.7011 5.6002 0.46000 0.59000 1.1800 3.3200 6.8000 8.3000 8.2700 7.6900 6.9400 6.0700 5.4100 4.9900 4.6800 4.4300 3.8900 3.3000 3.0000 2.8000 2.6000 2.5700 2.9800 3.8500 4.5400 4.9000 5.0900 5.1800 5.2600 5.4300 5.7200 5.8900 5.8500 5.7500 5.6000 5.5000 5.5800 5.9500 228 61.100 72.019 41.132 58.295 4.8060 4.1917 4.6749 0.50000 0.53000 1.0600 2.9100 5.5900 6.7300 6.6800 6.2700 5.7000 5.1200 4.7000 4.5300 4.5700 4.6300 4.2400 3.7400 3.4500 3.2800 3.0900 3.0700 3.5700 4.5700 5.3700 5.8100 6.0700 6.1900 6.2800 6.4800 6.7600 6.9400 6.9200 6.8400 6.7000 6.6100 6.7200 7.0500 229 52.590 58.320 0.0000 66.097 5.4748 4.9983 6.8507 0.68000 0.66000 1.2300 3.6000 7.7900 9.7000 9.7800 9.2500 8.5400 7.7600 7.1100 6.6000 6.1100 5.7300 5.2600 4.7700 4.4700 4.2500 3.9900 3.9200 4.2600 4.9700 5.5400 5.8700 6.0400 6.1200 6.1900 6.3200 6.5300 6.6600 6.6500 6.6000 6.5200 6.4800 6.5500 6.8200 230 41.498 43.079 10.429 65.857 6.8086 6.5721 7.2914 0.66000 0.70000 1.1700 3.6100 7.9000 9.8000 10.020 9.6200 9.0600 8.4600 7.9800 7.6800 7.4700 7.3100 6.9700 6.5500 6.2300 5.9500 5.6600 5.5600 5.8400 6.4700 7.0000 7.3200 7.5000 7.5800 7.6700 7.8100 7.9900 8.1200 8.1200 8.1000 8.0500 8.0300 8.0900 8.3200 231 61.622 58.815 36.303 53.350 6.2352 5.9945 6.6125 0.62000 0.59000 1.1900 3.4500 7.2500 8.9800 9.1300 8.7400 8.1600 7.5000 7.0400 6.9200 7.1200 7.3100 6.9000 6.1800 5.6600 5.2100 4.7400 4.5400 4.9400 5.8500 6.5700 6.9600 7.1700 7.2600 7.3500 7.5400 7.8500 8.0400 8.0000 7.9200 7.7700 7.6600 7.7800 8.1500 232 47.471 38.660 2.7895 57.687 8.2799 8.2228 10.177 0.64000 0.56000 1.1900 4.3100 10.320 13.430 13.880 13.520 12.790 12.010 11.370 10.860 10.390 9.9600 9.3800 8.6700 8.1000 7.5400 6.9700 6.7000 6.9200 7.5600 8.1000 8.4100 8.6000 8.6800 8.7800 8.9400 9.2000 9.3400 9.3300 9.2800 9.1900 9.1200 9.2100 9.5300 233 39.119 50.417 0.0000 58.101 8.4583 7.6615 9.3592 0.63000 0.53000 1.1400 4.2000 10.160 13.010 13.200 12.570 11.700 10.730 9.9700 9.3400 8.7700 8.3000 7.7200 7.1300 6.7400 6.4600 6.1600 6.0900 6.6500 7.8300 8.8800 9.5200 9.8700 10.030 10.160 10.350 10.600 10.750 10.770 10.710 10.650 10.590 10.700 10.980 234 73.584 65.371 15.592 60.575 4.0775 3.8960 6.1174 0.54000 0.52000 1.0700 3.3100 6.8800 8.5800 8.7300 8.3200 7.6500 6.9000 6.3100 5.8900 5.5700 5.2900 4.7500 4.1300 3.7200 3.3500 2.9700 2.8000 3.0000 3.5000 3.8300 3.9900 4.0700 4.1200 4.1700 4.3300 4.5800 4.7500 4.7100 4.6100 4.4800 4.4000 4.4600 4.8800 235 26.096 54.807 7.1335 65.465 7.7184 6.6756 7.0531 0.57000 0.62000 1.1800 3.6500 8.0800 10.010 10.020 9.4000 8.7000 7.9600 7.3700 6.9500 6.6200 6.3700 6.0100 5.6300 5.4600 5.3900 5.3100 5.4200 6.1000 7.4200 8.6000 9.3600 9.7800 9.9700 10.120 10.280 10.490 10.610 10.620 10.640 10.630 10.620 10.730 10.970 236 28.721 35.076 0.0000 54.089 12.582 11.983 13.118 0.91000 0.68000 1.3300 5.2100 13.370 17.550 17.980 17.370 16.430 15.420 14.590 13.930 13.340 12.830 12.240 11.590 11.130 10.760 10.360 10.260 10.820 12.040 13.090 13.760 14.120 14.300 14.420 14.620 14.880 15.030 15.020 14.990 14.920 14.870 14.970 15.290 237 55.066 91.292 0.0000 70.267 3.6082 2.6175 4.3508 0.49000 0.62000 1.1400 2.9900 5.8700 6.9700 6.7400 6.1100 5.3400 4.5000 3.8500 3.3100 2.8500 2.4800 2.0800 1.7300 1.6100 1.6100 1.5800 1.6800 2.1800 3.1600 4.0200 4.5200 4.8000 4.9100 5.0000 5.1300 5.3300 5.4400 5.4300 5.3900 5.3300 5.2600 5.3500 5.5800 238 48.175 100.00 0.0000 64.732 4.3853 2.7767 4.8310 0.41000 0.44000 1.0300 3.2300 6.7000 8.1400 7.7600 6.9000 5.8900 4.8400 3.9800 3.3100 2.7000 2.2500 1.7200 1.3000 1.1700 1.2000 1.2100 1.3500 2.1400 3.7300 5.1800 6.1100 6.5800 6.8000 6.9300 7.1100 7.3500 7.4900 7.4900 7.4500 7.3400 7.3200 7.3600 7.6400 239 59.713 100.00 39.523 64.112 3.4326 2.3540 3.3409 0.52000 0.66000 1.1100 2.6600 4.6800 5.3600 5.1600 4.6600 4.0600 3.4200 2.9200 2.5800 2.3200 2.0900 1.6800 1.3200 1.2000 1.2100 1.2200 1.3200 1.8900 3.0700 4.1100 4.7500 5.1000 5.2600 5.3700 5.5300 5.7600 5.9000 5.8900 5.8600 5.7500 5.6900 5.7500 6.1400 240 76.928 100.00 42.714 56.409 3.2057 2.3651 4.0225 0.68000 0.81000 1.3000 3.0200 5.4100 6.3500 6.1700 5.6200 4.9200 4.1800 3.5600 3.1800 2.8800 2.6000 2.0700 1.5800 1.4100 1.4200 1.3700 1.4500 1.9200 2.8400 3.5700 3.9600 4.1700 4.2500 4.3200 4.5000 4.7700 4.9400 4.9100 4.8000 4.6400 4.5400 4.6300 4.9600 241 57.700 94.707 26.657 55.142 4.7458 3.2630 4.9227 0.57000 0.64000 1.1100 3.2900 6.5800 7.9200 7.6400 6.9200 6.0300 5.0800 4.3100 3.7700 3.3500 2.9800 2.4100 1.8700 1.7000 1.6900 1.6600 1.8000 2.6000 4.2000 5.6200 6.5000 6.9400 7.1500 7.2700 7.4700 7.7900 7.9700 7.9400 7.8700 7.7100 7.6600 7.7200 8.0800 242 50.999 65.769 0.0000 53.636 7.2206 6.1307 8.7165 0.59000 0.55000 1.1500 4.2400 10.030 12.670 12.730 11.920 10.870 9.7200 8.7900 8.0200 7.3100 6.7200 6.0300 5.3500 4.9700 4.7300 4.4600 4.4500 5.1200 6.4700 7.6200 8.2900 8.6900 8.8500 8.9900 9.2100 9.5200 9.7200 9.7100 9.6200 9.5100 9.4200 9.5300 9.9300 243 44.447 66.712 26.634 53.641 7.6407 6.4476 6.9810 0.77000 0.65000 1.1600 3.6900 8.1300 10.070 10.020 9.3700 8.5900 7.7300 7.0800 6.7300 6.5900 6.4900 6.0000 5.3800 5.0600 4.9100 4.7100 4.7800 5.6200 7.2800 8.7100 9.5800 10.040 10.240 10.380 10.610 10.900 11.070 11.060 10.980 10.860 10.810 10.880 11.240 244 49.544 73.740 0.0000 63.327 5.6104 4.5499 6.5339 0.70000 0.70000 1.1800 3.6300 7.9800 9.8000 9.7200 9.0000 8.0800 7.1200 6.3300 5.7000 5.1200 4.6700 4.1400 3.6600 3.4300 3.3400 3.2100 3.2600 3.8600 5.0600 6.0700 6.6900 7.0200 7.1700 7.2700 7.4500 7.6700 7.8200 7.8100 7.7800 7.6700 7.6500 7.7200 8.0200 245 31.539 73.087 0.0000 61.577 7.1896 5.5117 6.8339 0.45000 0.60000 1.0900 3.7400 8.4800 10.410 10.210 9.4000 8.4100 7.3800 6.5700 5.9200 5.3300 4.8800 4.3700 3.9000 3.7300 3.7200 3.6800 3.8500 4.7700 6.5800 8.2700 9.3900 9.9800 10.250 10.430 10.640 10.870 11.020 11.040 11.010 10.970 10.970 11.070 11.300 246 43.770 77.820 30.684 65.564 5.1812 4.1120 4.5407 0.65000 0.78000 1.2500 3.0600 5.7600 6.7800 6.6600 6.1300 5.5400 4.8900 4.4200 4.1000 3.9300 3.8200 3.4500 3.0600 2.9100 2.8800 2.8200 2.9400 3.6300 4.9200 6.0600 6.7700 7.1500 7.3200 7.4300 7.5900 7.8100 7.9300 7.9400 7.9200 7.8400 7.8000 7.9000 8.1900 247 19.198 49.151 0.0000 56.274 11.463 9.9439 10.281 0.67000 0.56000 1.1600 4.6200 11.300 14.410 14.460 13.710 12.770 11.770 10.950 10.330 9.7700 9.3300 8.8300 8.3500 8.1400 8.0900 8.0200 8.1900 9.1600 11.050 12.770 13.910 14.560 14.850 15.060 15.290 15.530 15.660 15.710 15.710 15.720 15.760 15.830 16.100 248 43.755 100.00 38.406 51.631 6.1067 3.8420 4.6247 0.50000 0.69000 1.2100 3.2700 6.4000 7.5700 7.2600 6.4700 5.6100 4.7000 3.9600 3.4800 3.1100 2.8000 2.1800 1.6100 1.4500 1.5000 1.5100 1.7400 2.9500 5.4300 7.8100 9.3700 10.170 10.540 10.740 11.020 11.340 11.550 11.530 11.480 11.330 11.260 11.340 11.710 249 19.880 100.00 0.0000 56.171 7.9825 4.6770 6.1423 0.63000 0.58000 1.1400 3.9700 8.8000 10.710 10.030 8.7500 7.4000 6.0100 4.9100 4.0600 3.3000 2.7300 2.0800 1.5400 1.4000 1.4800 1.5400 1.8500 3.4200 6.7400 10.130 12.480 13.780 14.360 14.690 14.970 15.240 15.390 15.440 15.470 15.440 15.450 15.550 15.800 250 13.573 83.353 0.0000 61.729 8.1138 5.4257 6.1851 0.42000 0.58000 1.0600 3.7000 8.2900 10.040 9.6000 8.5900 7.5300 6.4200 5.5000 4.8300 4.2100 3.7600 3.2400 2.7900 2.6700 2.7500 2.7900 3.1000 4.4600 7.2400 10.020 11.940 13.010 13.500 13.800 14.040 14.270 14.410 14.470 14.540 14.550 14.610 14.700 14.910 251 27.501 80.232 0.0000 51.966 9.0907 6.3695 7.9875 0.48000 0.60000 1.1400 4.3100 10.220 12.700 12.270 11.120 9.7800 8.4000 7.3000 6.4300 5.6500 5.0500 4.3500 3.7500 3.5600 3.6000 3.5800 3.8600 5.2700 8.1300 10.880 12.740 13.760 14.210 14.480 14.760 15.070 15.270 15.290 15.270 15.210 15.200 15.290 15.640 252 37.938 100.00 0.0000 57.641 5.9104 3.5570 5.4983 0.47000 0.49000 1.0600 3.5300 7.7200 9.3600 8.9100 7.8600 6.7000 5.4700 4.4600 3.6900 2.9800 2.4500 1.8500 1.3500 1.2200 1.2600 1.2900 1.5200 2.6600 5.0000 7.2700 8.7900 9.6100 9.9700 10.190 10.440 10.740 10.920 10.930 10.900 10.830 10.810 10.910 11.220 253 22.955 100.00 0.0000 67.493 5.5973 3.4339 4.6563 0.62000 0.57000 1.1500 3.2700 6.7100 7.9700 7.4700 6.5900 5.6200 4.6200 3.8300 3.2100 2.6500 2.2400 1.7600 1.3800 1.2700 1.3200 1.3600 1.5700 2.6400 4.8300 6.9900 8.4500 9.2400 9.5900 9.8000 9.9900 10.190 10.310 10.340 10.360 10.360 10.390 10.440 10.650 254 100.00 14.815 71.416 70.266 2.3875 3.7073 3.4133 0.51000 0.54000 1.0500 2.3300 3.6200 4.1100 4.1800 4.0800 3.9600 3.8900 3.9500 4.4900 5.7400 6.9500 7.0900 6.3700 5.3600 4.1800 3.0500 2.3300 2.0100 1.8400 1.7000 1.5900 1.5600 1.5500 1.5500 1.6400 1.8100 1.9100 1.8600 1.8100 1.7100 1.6200 1.7100 2.0300 255 100.00 27.878 78.266 54.394 2.8281 4.7182 4.0001 0.43000 0.59000 1.0900 2.4000 4.0000 4.6000 4.7400 4.6700 4.5900 4.5200 4.6900 5.6100 7.6000 9.5400 9.6700 8.5200 7.0000 5.3000 3.7000 2.7200 2.2900 2.1300 1.9700 1.8200 1.7600 1.7500 1.7700 1.8900 2.1400 2.3000 2.2400 2.1400 1.9800 1.8700 1.9900 2.3600 256 100.00 33.045 93.143 62.109 2.1967 3.4722 2.4820 0.45000 0.55000 1.0700 2.1300 2.8600 3.0400 2.9900 2.8200 2.6900 2.6200 2.7400 3.4200 4.9800 6.5500 6.7900 6.0400 5.0400 3.8900 2.8300 2.1800 1.9100 1.8300 1.7400 1.6400 1.6200 1.6100 1.6200 1.7100 1.9000 2.0300 1.9900 1.9100 1.8000 1.7600 1.8400 2.1200 257 100.00 0.0000 54.983 65.771 2.7723 4.6052 5.0597 0.42000 0.39000 0.99000 2.5200 4.6200 5.6700 6.0600 6.1500 6.1100 6.1200 6.2400 6.8700 8.1900 9.4100 9.3900 8.3700 6.8800 5.1500 3.5600 2.5700 2.0700 1.8100 1.6100 1.4800 1.4300 1.4100 1.4300 1.5200 1.6900 1.8100 1.7700 1.6900 1.5900 1.5500 1.6000 1.8600 258 100.00 0.0000 63.104 56.011 3.4210 6.1033 5.8522 0.53000 0.58000 1.1500 2.7200 5.0700 6.3000 6.7800 6.9000 6.9700 7.0100 7.3000 8.4100 10.670 12.890 13.070 11.570 9.3900 6.8900 4.6600 3.2800 2.5800 2.2300 1.9600 1.7600 1.7000 1.6800 1.7000 1.8100 2.0300 2.1900 2.1500 2.0300 1.9000 1.8200 1.9100 2.2500 259 100.00 0.0000 80.296 58.527 3.2370 5.8862 4.1782 0.43000 0.73000 1.1900 2.4800 3.9400 4.4700 4.6900 4.6700 4.6400 4.7500 5.0500 6.3100 9.0400 11.870 12.490 11.210 9.2100 6.8800 4.7300 3.4100 2.7300 2.3800 2.1100 1.9100 1.8600 1.8300 1.8500 1.9500 2.1800 2.3500 2.2800 2.2000 2.0500 1.9700 2.0700 2.3600 260 82.878 0.0000 52.494 59.183 4.7629 7.0316 6.5566 0.47000 0.56000 1.1100 2.9500 5.8200 7.2900 7.7900 7.9300 7.9400 7.9300 8.1300 8.9600 10.760 12.490 12.650 11.480 9.7600 7.7500 5.9000 4.7400 4.1500 3.8400 3.5800 3.4100 3.3700 3.3500 3.3800 3.5000 3.7400 3.8900 3.8500 3.7500 3.6200 3.5200 3.6300 3.9700 261 100.00 32.664 63.951 56.198 2.7293 4.2261 4.6766 0.38000 0.40000 1.0300 2.5400 4.5200 5.5400 5.7700 5.7600 5.6100 5.4700 5.5100 6.0900 7.3700 8.5200 8.3700 7.3100 6.0300 4.5800 3.2200 2.4000 2.0500 1.9500 1.8100 1.7000 1.6600 1.6500 1.6600 1.7900 2.0300 2.1800 2.1500 2.0300 1.8800 1.8000 1.9100 2.2300 262 100.00 0.0000 78.235 66.951 2.6479 4.5539 3.5432 0.42000 0.65000 1.1200 2.3400 3.4900 4.0200 4.0900 4.0800 4.0000 4.0100 4.2200 5.0900 7.0000 8.9400 9.3200 8.4000 6.9600 5.2600 3.7000 2.7200 2.2300 1.9700 1.7900 1.6400 1.6100 1.5900 1.6000 1.6900 1.8500 1.9600 1.9300 1.8700 1.7500 1.7100 1.7700 2.0200 263 100.00 60.278 93.902 58.844 1.8697 2.5325 2.2176 0.35000 0.49000 0.93000 2.0200 2.7500 2.9400 2.8400 2.6700 2.4600 2.3300 2.3400 2.7600 3.7500 4.6300 4.5400 3.8800 3.2600 2.6100 1.9900 1.6300 1.5700 1.6600 1.6600 1.6100 1.5900 1.5800 1.6000 1.7200 1.9500 2.1000 2.0600 1.9700 1.8200 1.7300 1.8300 2.1300 264 96.344 43.988 77.901 68.278 2.0333 2.7800 2.6772 0.19000 0.47000 0.96000 2.0700 3.0800 3.4400 3.4500 3.2900 3.0900 2.9500 2.9200 3.2700 4.1100 4.9000 4.8600 4.3100 3.6700 2.9700 2.2800 1.8700 1.7200 1.7200 1.6700 1.6100 1.5900 1.6000 1.6100 1.7000 1.8800 1.9800 1.9700 1.9000 1.7900 1.7400 1.8400 2.0500 265 89.484 44.321 100.00 64.187 2.4289 3.2758 2.1325 0.29000 0.56000 1.0100 2.0500 2.6700 2.7500 2.6500 2.4400 2.3000 2.2000 2.2500 2.8000 4.0400 5.3100 5.4800 4.9300 4.2700 3.5200 2.8200 2.3900 2.2800 2.3000 2.2800 2.2300 2.2200 2.2200 2.2400 2.3500 2.5200 2.6500 2.6100 2.5300 2.4300 2.3700 2.4600 2.7300 266 55.316 0.0000 28.249 70.645 5.6009 6.7137 6.5797 0.43000 0.57000 1.0800 3.0700 6.2300 7.8200 8.2600 8.2700 8.1300 8.0200 7.9700 8.2000 8.7500 9.2700 9.2300 8.7100 7.9700 7.0500 6.1700 5.6000 5.2900 5.1400 5.0200 4.9300 4.9100 4.9300 4.9600 5.0800 5.2500 5.3600 5.3600 5.3100 5.2300 5.2000 5.3100 5.5300 267 65.887 0.0000 51.804 55.989 7.2215 9.6536 7.5484 0.56000 0.59000 1.0800 3.2700 6.6800 8.3800 8.9300 9.0800 9.0900 9.1200 9.3700 10.380 12.520 14.680 15.130 14.110 12.490 10.560 8.7400 7.5700 6.9400 6.6300 6.3500 6.1600 6.1200 6.1100 6.1600 6.3300 6.6000 6.8000 6.7500 6.6600 6.5000 6.3800 6.5000 6.8600 268 85.083 56.428 100.00 53.807 3.0657 3.7841 2.2529 0.27000 0.48000 0.94000 2.0700 2.7300 2.8500 2.7900 2.5800 2.4300 2.3200 2.4000 3.0200 4.4100 5.7800 5.8700 5.2100 4.5300 3.8500 3.1700 2.8000 2.8200 3.0500 3.1800 3.1900 3.2100 3.2300 3.2700 3.4200 3.7000 3.8700 3.8300 3.7300 3.5600 3.4600 3.5600 3.9600 269 77.449 12.751 51.242 67.038 4.1430 5.5302 5.1808 0.33000 0.54000 1.0400 2.6300 5.0100 6.1300 6.4200 6.3900 6.2600 6.1400 6.1600 6.6500 7.7700 8.8400 8.9100 8.2100 7.2000 6.0000 4.8500 4.1100 3.7500 3.5900 3.4500 3.3400 3.3100 3.3000 3.3200 3.4400 3.6300 3.7500 3.7200 3.6600 3.5400 3.4700 3.5500 3.8300 270 84.421 35.623 71.092 57.380 3.7105 4.9231 3.9716 0.38000 0.58000 1.1000 2.5600 4.1200 4.8000 4.8900 4.7800 4.6400 4.5100 4.5600 5.1900 6.6000 8.0000 8.0900 7.3000 6.3200 5.2400 4.1900 3.5700 3.3500 3.3700 3.3300 3.2700 3.2500 3.2500 3.2900 3.4200 3.6600 3.8200 3.7700 3.6700 3.5300 3.4600 3.5400 3.8800 271 57.090 0.0000 44.218 64.436 6.9287 8.5841 7.1837 0.63000 0.68000 1.2000 3.2600 6.6400 8.3200 8.7800 8.8500 8.7400 8.6900 8.7700 9.3600 10.660 11.970 12.200 11.500 10.460 9.1600 7.9400 7.1600 6.7400 6.5300 6.3400 6.2400 6.2000 6.2100 6.2400 6.3600 6.5800 6.7000 6.6800 6.6400 6.5300 6.4900 6.5700 6.8300 272 67.848 17.943 45.211 53.129 6.8830 8.6885 7.9863 0.58000 0.53000 1.0900 3.4500 7.3600 9.3200 9.8500 9.9200 9.7600 9.6200 9.6500 10.300 11.720 13.100 13.120 12.090 10.730 9.1800 7.6700 6.7400 6.3400 6.2300 6.1000 5.9900 5.9800 5.9800 6.0200 6.2100 6.5200 6.7100 6.6800 6.5600 6.3900 6.2800 6.3800 6.8100 273 100.00 55.898 72.260 52.319 2.5538 3.5399 3.9378 0.53000 0.64000 1.1600 2.6500 4.3300 4.9800 5.0800 4.9000 4.6600 4.4200 4.3300 4.8000 5.8700 6.8200 6.5700 5.6100 4.6400 3.6500 2.7000 2.1300 1.9800 2.0400 2.0100 1.9200 1.8900 1.8700 1.8900 2.0300 2.3000 2.4600 2.4100 2.3000 2.1300 2.0200 2.1000 2.5200 274 72.259 0.0000 69.631 68.929 4.0416 5.5543 3.7849 0.25000 0.58000 0.97000 2.3200 3.7500 4.3600 4.4900 4.4300 4.3600 4.3500 4.4900 5.2200 6.8200 8.5000 8.9500 8.3800 7.4100 6.2000 5.0600 4.3300 3.9500 3.7600 3.5900 3.4700 3.4500 3.4500 3.4800 3.5700 3.7500 3.8600 3.8600 3.8000 3.7100 3.6600 3.7400 3.9700 275 45.691 5.3097 37.705 56.336 9.7383 11.433 9.1394 0.86000 0.63000 1.1400 3.7500 8.3300 10.640 11.280 11.320 11.200 11.070 11.120 11.760 13.230 14.710 15.010 14.270 13.200 11.940 10.710 9.9700 9.6200 9.5300 9.4200 9.3500 9.3600 9.3700 9.4300 9.6000 9.8400 10.010 9.9800 9.9300 9.8200 9.7700 9.9000 10.200 276 48.635 9.5611 24.687 52.448 10.612 12.300 11.827 0.77000 0.63000 1.1600 4.2700 10.570 13.960 14.890 15.000 14.750 14.510 14.400 14.700 15.590 16.380 16.220 15.260 14.040 12.620 11.250 10.420 10.050 9.9900 9.8800 9.8300 9.8400 9.8500 9.9100 10.090 10.380 10.560 10.550 10.470 10.330 10.250 10.370 10.720 277 44.250 0.0000 22.360 63.212 8.7298 10.113 9.4734 0.56000 0.66000 1.1000 3.8200 8.6700 11.160 11.850 11.930 11.800 11.650 11.590 11.860 12.500 13.080 13.030 12.410 11.550 10.500 9.4700 8.8200 8.4700 8.2900 8.1400 8.0500 8.0600 8.0600 8.1300 8.2700 8.4900 8.6300 8.6300 8.5700 8.5200 8.4800 8.5500 8.8500 278 90.868 71.541 100.00 67.641 2.0318 2.2443 1.9922 0.44000 0.64000 1.1200 2.0900 2.6900 2.7900 2.6800 2.4700 2.2500 2.1000 2.0300 2.2200 2.7400 3.2200 3.1000 2.7200 2.4200 2.1400 1.8800 1.7400 1.7900 1.9800 2.0700 2.0900 2.1000 2.1200 2.1300 2.2400 2.4000 2.5100 2.4900 2.4300 2.3100 2.2800 2.3700 2.5700 279 82.373 71.323 81.781 56.807 2.8692 2.9713 2.6803 0.44000 0.62000 1.1600 2.3200 3.3500 3.7000 3.6300 3.3700 3.1300 2.8800 2.7500 2.9700 3.5700 4.1100 3.9000 3.3800 2.9900 2.6700 2.3400 2.1900 2.3600 2.7800 3.0700 3.1900 3.2600 3.2900 3.3300 3.4800 3.7300 3.8800 3.8400 3.7500 3.6000 3.5200 3.6400 3.9900 280 100.00 75.184 100.00 56.964 1.8229 2.1663 2.0592 0.51000 0.45000 1.0400 2.0800 2.7600 2.8600 2.7400 2.5300 2.3200 2.1400 2.0800 2.3700 3.0700 3.6900 3.4700 2.8800 2.4500 2.0700 1.6900 1.4800 1.5300 1.7200 1.7800 1.7500 1.7500 1.7500 1.7600 1.8800 2.1200 2.2600 2.2300 2.1100 1.9800 1.8800 1.9900 2.2800 281 74.911 65.656 100.00 59.831 3.1659 3.3209 2.0195 0.29000 0.43000 0.94000 1.9100 2.6100 2.7100 2.6200 2.4000 2.2200 2.0900 2.0800 2.4700 3.3800 4.2500 4.2500 3.7600 3.3900 3.0500 2.7200 2.5700 2.7900 3.2700 3.6100 3.7500 3.8500 3.8900 3.9400 4.0900 4.3200 4.4800 4.4500 4.3600 4.2300 4.1400 4.2100 4.5400 282 100.00 61.232 77.602 68.024 1.7977 2.2005 2.4937 0.43000 0.56000 1.1500 2.1900 3.1100 3.4000 3.3700 3.1500 2.9100 2.7200 2.6000 2.7600 3.2600 3.7000 3.5600 3.0800 2.6400 2.2000 1.7800 1.5400 1.5000 1.5500 1.5600 1.5200 1.5100 1.5200 1.5200 1.6100 1.7400 1.8500 1.8300 1.7700 1.6700 1.6400 1.7100 1.9200 283 62.485 29.412 36.999 53.222 7.3050 8.4074 8.1214 0.54000 0.58000 1.0900 3.5900 7.7900 9.9000 10.390 10.310 10.020 9.7000 9.5300 9.8500 10.740 11.580 11.430 10.570 9.5900 8.5000 7.4100 6.7800 6.6200 6.8000 6.9100 6.9300 6.9700 7.0000 7.0600 7.2500 7.5600 7.7500 7.7100 7.6300 7.4500 7.3600 7.4400 7.8600 284 64.335 48.904 60.806 57.163 5.2938 5.6259 4.6548 0.48000 0.50000 1.0700 2.7600 5.0200 6.0000 6.0700 5.8700 5.5700 5.2900 5.1600 5.4800 6.3400 7.1900 7.1200 6.5200 5.9300 5.3400 4.7400 4.4300 4.6100 5.1600 5.5900 5.7800 5.9100 5.9700 6.0500 6.2200 6.5000 6.6900 6.6600 6.5700 6.4300 6.3200 6.4000 6.7900 285 33.607 26.648 32.387 70.653 6.6085 6.7744 5.5963 0.47000 0.60000 1.1700 3.0200 5.9400 7.2200 7.3200 7.1400 6.8200 6.5300 6.3500 6.4500 6.8400 7.2600 7.3000 7.0600 6.8100 6.5700 6.3100 6.2000 6.3300 6.6700 6.9400 7.1100 7.2400 7.3000 7.3600 7.4800 7.6500 7.7400 7.7600 7.7500 7.7400 7.7500 7.8000 8.0400 286 48.955 40.397 32.004 58.754 7.2913 7.4629 7.2120 0.72000 0.73000 1.2500 3.5600 7.5100 9.3200 9.6100 9.3100 8.8900 8.4100 8.1100 8.1200 8.5100 8.9100 8.7000 8.1200 7.5700 7.0100 6.4500 6.1900 6.3900 7.0000 7.5000 7.8000 7.9700 8.0600 8.1400 8.3000 8.5500 8.7000 8.6900 8.6300 8.5300 8.4800 8.5700 8.9000 287 34.105 25.514 32.445 61.778 9.1957 9.5435 7.8057 0.52000 0.63000 1.1300 3.6400 7.8900 9.8900 10.160 9.9200 9.5600 9.1800 9.0000 9.1800 9.8500 10.530 10.580 10.160 9.7300 9.2800 8.8000 8.5800 8.7700 9.2600 9.6700 9.8900 10.060 10.120 10.200 10.350 10.560 10.710 10.690 10.660 10.580 10.580 10.640 10.920 288 61.427 27.205 46.697 62.451 5.7009 6.5807 5.7968 0.70000 0.66000 1.1100 3.0100 5.8400 7.1200 7.3800 7.2800 7.0400 6.8100 6.7400 7.0800 7.9600 8.8600 8.8800 8.2800 7.5400 6.7200 5.8900 5.4000 5.2800 5.4200 5.5000 5.5200 5.5600 5.5900 5.6400 5.7800 6.0200 6.1500 6.1300 6.0600 5.9600 5.9100 5.9900 6.2800 289 78.414 52.120 77.153 64.557 3.3550 3.8423 3.0254 0.45000 0.63000 1.1400 2.3700 3.5300 3.9500 3.9000 3.7200 3.5200 3.3200 3.2800 3.6300 4.4900 5.3400 5.3500 4.8400 4.3500 3.8300 3.3100 3.0300 3.0500 3.2700 3.4000 3.4400 3.4700 3.4900 3.5300 3.6500 3.8500 3.9800 3.9500 3.8800 3.7700 3.7000 3.7700 4.0600 290 81.069 51.586 55.805 58.891 3.6116 4.1604 4.4209 0.51000 0.53000 1.0900 2.7000 4.8200 5.7400 5.8600 5.6600 5.3400 5.0300 4.8600 5.0500 5.7000 6.2700 6.0600 5.4100 4.7500 4.0900 3.4300 3.0700 3.0500 3.2500 3.3700 3.3900 3.4100 3.4300 3.4500 3.5800 3.8200 3.9700 3.9400 3.8300 3.7200 3.6400 3.7100 4.0500 291 29.258 0.0000 21.375 68.609 8.8909 9.7762 8.3414 0.61000 0.65000 1.1700 3.6000 7.9900 10.110 10.610 10.490 10.310 10.120 10.030 10.210 10.720 11.230 11.320 11.020 10.570 10.010 9.4500 9.1100 8.9300 8.8600 8.7900 8.7700 8.7800 8.8200 8.8800 9.0000 9.1600 9.2600 9.2800 9.2900 9.2500 9.2700 9.3600 9.5900 292 38.030 16.942 21.143 58.305 10.795 11.674 10.914 0.83000 0.77000 1.3400 4.3700 10.440 13.500 14.100 13.960 13.560 13.160 12.890 12.970 13.440 13.920 13.780 13.150 12.440 11.650 10.840 10.380 10.300 10.530 10.680 10.760 10.820 10.850 10.920 11.100 11.310 11.460 11.440 11.380 11.300 11.230 11.300 11.640 293 7.8407 2.7782 0.0000 68.542 11.696 12.025 10.605 0.77000 0.55000 1.2100 4.3400 10.330 13.280 13.770 13.560 13.200 12.890 12.640 12.450 12.320 12.230 12.180 12.070 11.990 11.890 11.790 11.770 11.790 11.900 11.960 12.050 12.130 12.210 12.310 12.430 12.590 12.670 12.730 12.770 12.840 12.900 13.000 13.180 294 10.457 7.3796 10.884 58.559 15.765 16.264 13.603 0.95000 0.72000 1.3200 5.0300 12.910 16.940 17.590 17.350 16.910 16.480 16.190 16.150 16.420 16.720 16.750 16.510 16.290 16.040 15.770 15.700 15.820 16.130 16.370 16.560 16.690 16.770 16.880 17.040 17.200 17.310 17.350 17.380 17.400 17.460 17.550 17.770 295 32.705 10.102 25.459 52.746 13.052 14.308 11.694 0.95000 0.67000 1.2400 4.5000 10.780 13.980 14.700 14.700 14.470 14.230 14.150 14.550 15.590 16.620 16.760 16.170 15.380 14.480 13.570 13.060 12.940 13.070 13.160 13.220 13.300 13.350 13.450 13.640 13.910 14.060 14.070 14.040 13.970 13.920 14.070 14.420 296 78.057 78.252 100.00 69.978 2.4093 2.3221 1.9241 0.55000 0.66000 1.1400 2.0800 2.6800 2.7500 2.6500 2.4100 2.2000 2.0100 1.9200 2.0400 2.4100 2.7400 2.6200 2.3100 2.1400 2.0200 1.8900 1.8600 2.0500 2.4400 2.7100 2.8400 2.9100 2.9500 2.9900 3.1000 3.2600 3.3700 3.3300 3.3000 3.2000 3.1500 3.2400 3.4800 297 72.384 81.227 100.00 53.409 3.3569 3.0214 2.0473 0.34000 0.46000 1.0200 2.0900 2.7900 2.8800 2.7800 2.5200 2.3100 2.1200 2.0400 2.2900 2.9400 3.4800 3.2700 2.7600 2.5000 2.3400 2.1600 2.1600 2.5800 3.4300 4.1000 4.4500 4.6400 4.7300 4.8000 4.9900 5.3000 5.4900 5.4700 5.3600 5.2000 5.0900 5.1900 5.6000 298 85.944 88.730 100.00 57.044 2.2342 2.0585 1.8708 0.34000 0.45000 0.94000 1.9500 2.6200 2.7200 2.6100 2.3700 2.1200 1.9400 1.8200 1.9700 2.3800 2.6800 2.4000 1.9500 1.7200 1.6100 1.4700 1.4500 1.7200 2.2400 2.6000 2.7500 2.8300 2.8800 2.9200 3.0700 3.3300 3.5000 3.4600 3.3600 3.2200 3.1200 3.2400 3.5400 299 60.709 86.013 100.00 60.882 3.5203 2.8656 1.8644 0.22000 0.47000 0.97000 2.0000 2.5800 2.7300 2.5800 2.3400 2.1000 1.9300 1.8300 1.9700 2.3900 2.7400 2.5500 2.1700 2.0100 1.9800 1.9200 2.0000 2.5400 3.5700 4.4700 4.9900 5.2700 5.4000 5.5100 5.6800 5.9300 6.0900 6.0900 6.0300 5.9100 5.8200 5.9200 6.2300 300 77.276 94.622 100.00 64.692 2.4639 2.0800 1.9673 0.51000 0.68000 1.2000 2.2100 2.7700 2.9000 2.7600 2.5200 2.3000 2.0700 1.9400 1.9700 2.1700 2.3000 2.0300 1.6700 1.5300 1.5000 1.4600 1.5000 1.8300 2.4500 2.9400 3.2000 3.3200 3.3800 3.4400 3.5700 3.7800 3.9200 3.8900 3.8200 3.7100 3.6300 3.7100 4.0300 301 61.808 69.209 100.00 64.409 3.8676 3.6395 2.1174 0.55000 0.72000 1.1300 2.1300 2.7900 2.9100 2.7700 2.5700 2.3800 2.2200 2.1800 2.4600 3.1900 3.8800 3.8600 3.4900 3.2500 3.1000 2.9200 2.9000 3.2900 4.0500 4.6400 4.9800 5.1600 5.2500 5.3100 5.4600 5.6900 5.8300 5.8100 5.7500 5.6500 5.5800 5.6300 5.9700 302 0.0000 27.164 14.699 70.937 9.3122 8.6821 6.9560 0.51000 0.63000 1.0700 3.4600 7.4800 9.2600 9.3200 8.9500 8.5300 8.1300 7.8300 7.7100 7.7700 7.9000 7.8600 7.7400 7.7300 7.8000 7.8500 8.0300 8.5600 9.5300 10.380 10.970 11.330 11.500 11.650 11.790 11.910 11.980 12.060 12.120 12.210 12.290 12.390 12.550 303 25.383 60.479 57.212 68.386 6.3055 5.3601 3.6316 0.50000 0.49000 1.0300 2.5700 4.4100 5.0700 4.9900 4.6600 4.3200 3.9900 3.7700 3.8500 4.2500 4.6700 4.6000 4.3300 4.2000 4.1800 4.1400 4.2800 5.0100 6.4100 7.6600 8.4700 8.9300 9.1400 9.2800 9.4600 9.6400 9.7500 9.7800 9.8100 9.8100 9.7900 9.9000 10.100 304 62.030 68.457 66.928 64.993 4.0750 3.7721 3.1820 0.27000 0.66000 1.0500 2.4700 3.9400 4.4500 4.3900 4.0800 3.7700 3.4500 3.2700 3.3500 3.7700 4.1800 4.0100 3.5900 3.3400 3.1500 2.9800 2.9400 3.3100 4.0700 4.6700 5.0000 5.1800 5.2400 5.3200 5.4600 5.7000 5.8300 5.8000 5.7400 5.6400 5.5600 5.6300 5.9100 305 61.689 73.565 63.592 51.479 5.2148 4.6055 4.0129 0.65000 0.60000 1.1800 2.7500 4.8400 5.6100 5.5700 5.2300 4.8100 4.3800 4.1000 4.1900 4.6300 5.0100 4.7200 4.1400 3.8200 3.6100 3.3700 3.3500 3.9300 5.1200 6.1000 6.6700 6.9900 7.1200 7.2300 7.4400 7.7800 7.9800 7.9600 7.8600 7.7100 7.5900 7.7000 8.1000 306 19.303 35.230 0.0000 64.303 10.009 9.3242 9.2748 0.79000 0.48000 1.1300 4.2300 9.9000 12.500 12.670 12.170 11.530 10.850 10.300 9.8700 9.5000 9.2100 8.8800 8.5500 8.3700 8.2800 8.1700 8.2400 8.7900 9.8300 10.750 11.370 11.700 11.860 12.000 12.190 12.380 12.490 12.540 12.560 12.550 12.600 12.710 12.920 307 37.318 66.382 44.814 69.610 5.0316 4.2457 3.7244 0.30000 0.50000 0.97000 2.5900 4.5700 5.3600 5.2800 4.9200 4.4900 4.0700 3.7700 3.6700 3.7800 3.9100 3.7300 3.4400 3.3000 3.2700 3.2300 3.3300 3.9000 4.9700 5.9200 6.5100 6.8400 7.0000 7.1100 7.2600 7.4500 7.5600 7.5800 7.5600 7.5500 7.5600 7.6000 7.8400 308 34.038 44.453 31.622 65.674 7.2156 6.8374 5.8875 0.58000 0.59000 1.0200 3.1500 6.4600 7.8700 7.9600 7.6300 7.2000 6.7600 6.4600 6.4300 6.6700 6.9400 6.8200 6.4900 6.2700 6.1100 5.9200 5.9300 6.3600 7.2200 7.9600 8.4000 8.6700 8.8000 8.9100 9.0800 9.2800 9.4100 9.4400 9.4200 9.3800 9.3800 9.4500 9.7300 309 42.104 64.766 55.481 59.083 6.3342 5.4867 4.1484 0.44000 0.51000 1.0100 2.7400 4.9600 5.7700 5.7200 5.3600 4.9600 4.5600 4.3100 4.3800 4.8000 5.2300 5.0600 4.6400 4.4200 4.3100 4.1900 4.2700 5.0000 6.3800 7.5700 8.3100 8.7200 8.9000 9.0500 9.2500 9.4900 9.6600 9.6700 9.6300 9.5400 9.5300 9.6100 9.9300 310 31.027 48.751 29.695 54.262 9.9992 9.1054 7.8842 0.66000 0.61000 1.0800 3.7400 8.5200 10.690 10.780 10.300 9.6700 9.0200 8.5600 8.4500 8.7200 9.0100 8.7700 8.2600 7.9500 7.7400 7.5000 7.5500 8.3300 9.9100 11.300 12.190 12.680 12.920 13.080 13.300 13.580 13.730 13.750 13.720 13.670 13.650 13.730 14.100 311 56.429 57.839 60.540 56.533 5.5582 5.3631 4.3583 0.40000 0.52000 1.0100 2.7000 4.9200 5.8400 5.8400 5.5800 5.2200 4.8600 4.6700 4.8800 5.5400 6.1800 6.0400 5.4800 5.0500 4.6700 4.2800 4.1600 4.5800 5.5000 6.2400 6.6800 6.9100 7.0200 7.1100 7.3100 7.5800 7.7500 7.7400 7.6600 7.5200 7.4600 7.5500 7.8800 312 31.614 36.115 37.444 55.205 10.620 10.449 8.0768 0.66000 0.62000 1.2300 3.8100 8.3700 10.450 10.620 10.300 9.8500 9.3700 9.1200 9.3200 10.090 10.910 10.920 10.430 10.020 9.6500 9.2600 9.1600 9.6600 10.780 11.730 12.290 12.620 12.760 12.880 13.080 13.310 13.470 13.460 13.430 13.350 13.280 13.360 13.670 313 3.4223 18.287 0.0000 63.227 13.093 12.668 11.385 0.72000 0.68000 1.2000 4.5600 11.480 14.860 15.190 14.730 14.180 13.570 13.110 12.750 12.460 12.260 12.080 11.890 11.820 11.820 11.790 11.930 12.370 13.210 13.970 14.480 14.790 14.960 15.100 15.250 15.390 15.480 15.530 15.580 15.650 15.720 15.820 16.000 314 0.0000 38.858 3.0593 63.561 11.853 10.396 9.3056 0.53000 0.52000 1.1100 4.3600 10.210 12.820 12.830 12.210 11.490 10.750 10.170 9.7500 9.4200 9.1900 8.9000 8.6200 8.5900 8.6600 8.7200 9.0100 9.9400 11.740 13.440 14.590 15.260 15.550 15.780 15.980 16.140 16.230 16.300 16.410 16.510 16.590 16.680 16.870 315 0.0000 29.476 18.674 60.056 14.066 13.051 10.008 0.83000 0.76000 1.2400 4.4200 10.480 13.280 13.360 12.860 12.280 11.690 11.300 11.210 11.460 11.800 11.790 11.590 11.540 11.620 11.670 11.950 12.820 14.420 15.900 16.910 17.460 17.710 17.910 18.100 18.220 18.320 18.370 18.460 18.530 18.640 18.710 18.870 316 29.948 28.537 18.448 51.633 12.978 13.006 11.933 0.82000 0.73000 1.3200 4.7600 11.770 15.290 15.800 15.420 14.830 14.170 13.710 13.600 13.880 14.170 13.910 13.290 12.760 12.220 11.680 11.480 11.890 12.820 13.640 14.120 14.410 14.540 14.670 14.870 15.130 15.280 15.270 15.240 15.160 15.120 15.230 15.570 317 46.588 86.225 100.00 70.353 3.4685 2.7285 1.7858 0.49000 0.52000 1.0500 2.0000 2.5500 2.6100 2.5100 2.2800 2.0400 1.8400 1.7400 1.8000 2.0700 2.3100 2.1800 1.9200 1.8300 1.8400 1.8300 1.9400 2.4800 3.4900 4.4100 4.9800 5.2900 5.4500 5.5500 5.7000 5.8800 5.9900 6.0100 5.9800 5.9400 5.9300 6.0200 6.2400 318 48.829 100.00 58.109 60.317 4.5010 2.9852 3.1531 0.52000 0.56000 1.1100 2.5900 4.4000 4.9900 4.8000 4.3200 3.7900 3.2500 2.8300 2.5900 2.4600 2.3200 1.8800 1.4500 1.3200 1.3400 1.3600 1.5200 2.3900 4.1600 5.7800 6.8300 7.3800 7.6200 7.7700 7.9800 8.2500 8.4200 8.4100 8.3700 8.2700 8.2100 8.3200 8.6100 319 54.399 97.829 100.00 56.364 4.0404 2.7495 1.8172 0.21000 0.47000 0.95000 1.9900 2.6300 2.7200 2.6000 2.3500 2.0900 1.8800 1.7300 1.7900 2.0300 2.1600 1.8000 1.3600 1.2100 1.2500 1.2500 1.4100 2.2500 3.9400 5.4700 6.4300 6.9500 7.1900 7.3400 7.5600 7.8800 8.0600 8.0600 8.0000 7.8700 7.7800 7.8700 8.2100 320 61.457 100.00 87.413 68.087 2.7136 1.9565 1.8733 0.26000 0.38000 1.0200 2.0300 2.7600 2.9100 2.7700 2.4800 2.1800 1.9200 1.7300 1.6700 1.7300 1.7300 1.4800 1.1700 1.0700 1.0800 1.0700 1.1600 1.6400 2.5800 3.4300 3.9500 4.2300 4.3600 4.4400 4.6000 4.8200 4.9400 4.9400 4.8900 4.8000 4.7500 4.8300 5.1000 321 38.691 100.00 45.591 71.129 3.8373 2.6147 2.9208 0.54000 0.70000 1.1700 2.5300 4.1400 4.6700 4.4500 4.0000 3.5100 3.0000 2.6100 2.3600 2.1700 2.0200 1.7000 1.4000 1.3000 1.3300 1.3400 1.4800 2.1500 3.5100 4.8000 5.6300 6.0800 6.2700 6.4000 6.5500 6.7300 6.8500 6.8600 6.8500 6.8100 6.8200 6.8500 7.0500 322 68.271 96.152 69.742 59.170 3.0815 2.3394 2.6498 0.45000 0.59000 1.0800 2.3600 3.6500 4.0300 3.9100 3.5500 3.1700 2.7800 2.4900 2.3700 2.4100 2.3900 2.0100 1.5900 1.4400 1.4200 1.3800 1.4700 1.9500 2.9100 3.7400 4.2000 4.4500 4.5600 4.6300 4.8000 5.0600 5.2200 5.2100 5.1300 4.9900 4.9100 4.9900 5.3200 323 58.305 87.330 72.470 55.140 4.2707 3.3051 2.7783 0.30000 0.54000 1.0500 2.3500 3.7300 4.0800 4.0100 3.6400 3.2800 2.9300 2.6700 2.6800 2.9400 3.1300 2.8000 2.3400 2.1500 2.0900 2.0200 2.1100 2.8000 4.1600 5.3600 6.0900 6.4600 6.6400 6.7600 6.9600 7.2500 7.4400 7.4300 7.3400 7.2200 7.1300 7.2200 7.5700 324 18.129 80.394 31.970 60.432 7.7054 5.4064 4.7945 0.55000 0.46000 1.0400 3.1200 6.2900 7.4400 7.1900 6.5100 5.8000 5.0500 4.4800 4.1400 3.9600 3.8500 3.4500 3.0400 2.9200 2.9900 3.0500 3.3400 4.6400 7.2400 9.7500 11.460 12.420 12.850 13.110 13.360 13.600 13.750 13.790 13.820 13.850 13.890 13.960 14.220 325 12.738 58.225 24.909 66.114 8.0756 6.6267 5.6154 0.58000 0.60000 1.0600 3.2700 6.6600 8.0700 7.9600 7.4000 6.8400 6.2300 5.7800 5.5600 5.5400 5.5700 5.3600 5.0500 4.9300 4.9800 5.0000 5.2200 6.1600 7.9400 9.6200 10.740 11.350 11.640 11.820 12.000 12.180 12.290 12.350 12.370 12.410 12.460 12.560 12.760 326 0.0000 60.565 21.406 58.944 11.722 9.1228 7.5026 0.93000 0.76000 1.3000 4.0200 9.0200 10.990 10.760 9.9600 9.1200 8.2700 7.6300 7.2800 7.1300 7.0800 6.7400 6.3000 6.2000 6.3100 6.3900 6.7600 8.3200 11.370 14.320 16.380 17.490 18.000 18.320 18.540 18.720 18.810 18.870 18.970 19.070 19.170 19.270 19.410 327 51.284 100.00 72.432 50.973 4.9132 3.2370 2.7735 0.57000 0.51000 1.0900 2.4000 3.8800 4.3100 4.1100 3.7300 3.3000 2.8700 2.5500 2.4400 2.5100 2.4900 2.0000 1.4900 1.3300 1.3600 1.3700 1.5700 2.5700 4.6300 6.5300 7.7500 8.3800 8.6700 8.8500 9.1100 9.4400 9.6600 9.6500 9.5900 9.4300 9.3500 9.4600 9.8200 328 7.2775 60.640 0.0000 63.181 9.6406 7.5941 7.7511 0.60000 0.50000 1.1300 4.0100 9.2800 11.520 11.300 10.440 9.5100 8.5600 7.7900 7.2100 6.6900 6.3000 5.8500 5.4500 5.3400 5.4000 5.4300 5.7100 6.8700 9.1400 11.320 12.800 13.610 13.980 14.220 14.420 14.620 14.720 14.790 14.830 14.870 14.960 15.070 15.240 329 24.453 63.916 24.932 51.830 10.237 8.1896 7.4552 0.59000 0.54000 1.1900 3.9300 8.7800 10.780 10.670 9.9700 9.1300 8.2500 7.5800 7.2300 7.1000 7.0400 6.6000 6.0500 5.8500 5.8500 5.8100 6.0700 7.3700 9.8900 12.240 13.810 14.660 15.060 15.300 15.560 15.880 16.050 16.090 16.100 16.050 16.040 16.160 16.500 330 30.001 75.206 63.552 62.065 6.2606 4.8231 3.2781 0.48000 0.44000 0.94000 2.4500 4.1900 4.7800 4.6400 4.2800 3.9000 3.5100 3.2400 3.2500 3.5400 3.8100 3.6300 3.2700 3.1500 3.1800 3.1900 3.4000 4.3500 6.2100 7.9300 9.0800 9.7200 10.000 10.180 10.390 10.620 10.770 10.810 10.790 10.760 10.770 10.850 11.160 331 0.0000 72.084 26.601 69.509 7.3568 5.3885 4.5654 0.54000 0.66000 1.1300 3.0600 5.9300 6.9800 6.7100 6.1100 5.5100 4.8900 4.4100 4.1200 3.9800 3.9200 3.6400 3.3200 3.2500 3.3200 3.3700 3.6400 4.7800 7.0200 9.1900 10.690 11.510 11.880 12.110 12.290 12.440 12.510 12.590 12.640 12.730 12.800 12.890 13.020 332 11.082 75.951 0.0000 69.151 6.7973 4.8780 5.3567 0.52000 0.46000 1.0500 3.3100 7.0200 8.4000 8.0900 7.3300 6.5100 5.7000 5.0200 4.5000 4.0300 3.6900 3.2800 2.9400 2.8500 2.9100 2.9600 3.2000 4.2300 6.2800 8.2300 9.5700 10.300 10.630 10.840 11.030 11.210 11.310 11.370 11.440 11.470 11.530 11.640 11.800 333 10.878 45.351 13.435 50.671 14.654 12.639 11.033 0.66000 0.63000 1.2300 4.9300 12.040 15.270 15.290 14.510 13.590 12.660 11.920 11.510 11.320 11.220 10.840 10.360 10.190 10.220 10.200 10.500 11.840 14.430 16.880 18.560 19.490 19.930 20.210 20.500 20.770 20.900 20.970 21.030 21.060 21.110 21.220 21.440 334 0.0000 43.823 23.843 56.799 13.696 11.703 8.5850 0.78000 0.63000 1.1600 4.2100 9.5100 11.780 11.740 11.110 10.480 9.7900 9.3300 9.2200 9.4400 9.7500 9.6300 9.3200 9.2600 9.3700 9.4500 9.8400 11.200 13.780 16.240 17.960 18.940 19.390 19.680 19.920 20.130 20.220 20.330 20.440 20.540 20.680 20.800 20.930 335 0.0000 100.00 0.0000 66.159 7.1076 4.1346 4.6357 0.50000 0.45000 1.0100 3.2500 6.9000 8.0700 7.5200 6.5500 5.5600 4.5200 3.7200 3.1000 2.5400 2.1400 1.6600 1.2800 1.1800 1.2600 1.3200 1.6200 3.0300 6.0500 9.1700 11.420 12.690 13.280 13.600 13.840 14.010 14.140 14.210 14.320 14.410 14.500 14.580 14.760 336 0.0000 100.00 36.474 63.171 7.6971 4.5376 3.7581 0.42000 0.56000 1.0700 2.8900 5.5000 6.3300 5.9100 5.2300 4.4900 3.7400 3.1600 2.7700 2.4800 2.2500 1.8100 1.4000 1.3000 1.3900 1.4600 1.7900 3.3600 6.7400 10.260 12.800 14.250 14.900 15.270 15.540 15.720 15.840 15.940 16.040 16.150 16.250 16.330 16.470 337 30.937 100.00 54.182 50.903 6.9908 4.2372 3.6313 0.41000 0.40000 0.99000 2.7700 5.1000 5.9100 5.6100 5.0200 4.3700 3.6800 3.1500 2.8600 2.6900 2.5300 1.9800 1.4700 1.3100 1.3800 1.4300 1.7200 3.1700 6.2600 9.3400 11.490 12.650 13.190 13.480 13.800 14.130 14.320 14.350 14.350 14.270 14.230 14.340 14.710 338 0.0000 85.070 11.639 55.938 11.069 7.1524 6.9915 0.59000 0.83000 1.2700 4.1000 9.4300 11.470 10.820 9.6700 8.4500 7.2100 6.2200 5.4900 4.9000 4.4400 3.8200 3.2700 3.1100 3.2300 3.3200 3.7400 5.7400 9.8600 14.110 17.140 18.840 19.600 20.020 20.320 20.510 20.610 20.700 20.780 20.880 20.990 21.090 21.170 339 11.841 70.621 7.4465 54.437 10.982 8.0845 8.1709 0.67000 0.58000 1.1200 4.2700 10.100 12.510 12.170 11.120 9.9900 8.8300 7.8900 7.2200 6.6500 6.2400 5.6700 5.1300 4.9800 5.0600 5.1100 5.4600 7.0300 10.200 13.310 15.450 16.650 17.180 17.510 17.800 18.050 18.210 18.260 18.330 18.340 18.410 18.490 18.740 340 0.0000 82.823 33.828 51.948 11.834 7.6840 5.7992 0.37000 0.65000 1.0700 3.5800 7.7200 9.2300 8.7600 7.8900 6.9900 6.0400 5.3200 4.8900 4.6700 4.5200 4.0200 3.4600 3.3300 3.4700 3.5700 4.0500 6.1900 10.670 15.370 18.860 20.860 21.780 22.290 22.660 22.910 23.060 23.180 23.300 23.430 23.570 23.680 23.840 341 18.623 100.00 33.571 67.409 5.4216 3.3198 3.3702 0.32000 0.49000 0.97000 2.6700 4.8800 5.6100 5.3000 4.6800 4.0500 3.3900 2.8500 2.4800 2.2100 1.9800 1.6000 1.2400 1.1500 1.2000 1.2400 1.4700 2.5600 4.8200 7.0600 8.6200 9.4700 9.8600 10.100 10.300 10.510 10.640 10.690 10.740 10.740 10.780 10.860 11.070 342 29.703 100.00 72.095 63.790 4.9251 3.1297 2.3188 0.30000 0.39000 0.96000 2.1900 3.3300 3.6700 3.4900 3.1100 2.7300 2.3800 2.1000 1.9800 2.0000 1.9700 1.6300 1.2800 1.1800 1.2200 1.2600 1.4700 2.4600 4.5600 6.6100 8.0100 8.7800 9.1300 9.3300 9.5500 9.7800 9.9300 9.9600 9.9800 9.9500 9.9400 10.050 10.280 343 0.0000 100.00 0.0000 56.287 9.6866 5.4928 6.0140 0.51000 0.54000 1.0800 3.9900 8.9100 10.600 9.8400 8.5400 7.2100 5.8300 4.7600 3.9200 3.1900 2.6300 2.0000 1.4800 1.3500 1.4500 1.5500 1.9400 3.8900 8.0900 12.530 15.830 17.710 18.570 19.050 19.400 19.630 19.770 19.900 20.020 20.120 20.240 20.360 20.510 344 100.00 0.0000 100.00 58.140 2.7640 5.4175 2.7176 0.52000 0.57000 1.0400 2.0500 2.7000 2.8800 2.8200 2.7200 2.6900 2.7600 3.1500 4.5400 7.6500 11.060 11.990 10.780 8.7900 6.4600 4.3700 3.0900 2.4400 2.1200 1.8700 1.6900 1.6300 1.6100 1.6300 1.7300 1.9400 2.0800 2.0500 1.9500 1.8100 1.7500 1.8800 2.1400 345 81.681 0.0000 100.00 60.827 4.0453 6.3733 2.6368 0.49000 0.56000 0.94000 2.0000 2.6300 2.7900 2.7500 2.6500 2.6000 2.6800 3.0500 4.3600 7.3100 10.550 11.620 10.820 9.3000 7.4700 5.7500 4.6700 4.1100 3.8000 3.5800 3.4000 3.3700 3.3500 3.3700 3.5100 3.7500 3.9000 3.8600 3.7800 3.6300 3.5600 3.6400 3.9600 346 89.291 0.0000 100.00 67.678 2.8108 4.5635 2.3644 0.41000 0.58000 1.0300 2.0200 2.6200 2.7300 2.6600 2.5100 2.4100 2.4300 2.6400 3.5800 5.6800 7.9800 8.6800 8.0100 6.8200 5.3500 4.0000 3.1500 2.7100 2.4700 2.3000 2.1800 2.1400 2.1400 2.1500 2.2400 2.4100 2.5300 2.4700 2.4300 2.3300 2.2700 2.3600 2.6200 347 81.105 0.0000 73.184 61.791 4.2212 6.3811 4.1858 0.54000 0.49000 1.00000 2.4000 3.9200 4.6100 4.7900 4.7700 4.7500 4.7800 5.0600 6.1100 8.4000 10.800 11.410 10.520 9.0500 7.2700 5.6100 4.5600 4.0100 3.7200 3.4900 3.3400 3.2800 3.2700 3.3000 3.4300 3.6600 3.8200 3.7900 3.7000 3.5800 3.4700 3.5600 3.9200 348 84.306 0.0000 96.534 52.685 4.5509 7.5252 3.2064 0.74000 0.67000 1.2000 2.2300 3.0600 3.2600 3.2600 3.1900 3.2000 3.3300 3.7800 5.4000 9.0500 13.140 14.430 13.290 11.250 8.8300 6.6100 5.2400 4.5200 4.1500 3.8500 3.6500 3.5800 3.5700 3.5900 3.7200 4.0100 4.1800 4.1500 4.0300 3.8500 3.7600 3.8800 4.2800 349 69.176 0.0000 70.745 54.198 6.6189 9.3290 5.4406 0.70000 0.61000 1.1600 2.7500 4.8500 5.8500 6.1200 6.1500 6.2000 6.3100 6.6700 8.0700 11.100 14.380 15.330 14.320 12.570 10.470 8.5100 7.2800 6.6400 6.2800 5.9900 5.8200 5.7500 5.7500 5.7700 5.9400 6.2400 6.4200 6.3800 6.2800 6.1100 6.0000 6.1100 6.4700 350 92.379 35.650 100.00 51.460 3.1642 4.8872 2.7092 0.38000 0.66000 1.1900 2.2700 2.9800 3.1300 3.0600 2.9300 2.8100 2.8200 3.0400 4.0900 6.4000 8.7900 9.2200 8.2300 6.9300 5.4800 4.1000 3.2600 2.9500 2.8800 2.7700 2.6600 2.6100 2.6000 2.6200 2.7700 3.0600 3.2300 3.1700 3.0500 2.8700 2.7800 2.8700 3.2400 351 47.354 10.240 71.992 59.790 7.9151 9.4879 4.5024 0.44000 0.55000 1.0300 2.5100 4.3100 5.0800 5.2100 5.1200 5.0700 5.1100 5.3600 6.4400 8.8200 11.450 12.400 12.010 11.210 10.200 9.2100 8.6300 8.3800 8.3400 8.2900 8.2500 8.2600 8.2800 8.3500 8.5100 8.7500 8.8900 8.9000 8.8400 8.7500 8.7100 8.8000 9.1100 352 69.805 30.235 100.00 67.981 3.5663 4.4345 2.1253 0.44000 0.51000 1.00000 1.9600 2.5300 2.6600 2.5300 2.4100 2.2400 2.1700 2.2700 2.9100 4.3600 5.9200 6.3600 6.0000 5.4500 4.7900 4.1300 3.7500 3.6300 3.6800 3.6800 3.6500 3.6700 3.6800 3.7100 3.8200 4.0200 4.1400 4.1300 4.0700 3.9800 3.9100 4.0000 4.2700 353 72.360 40.668 100.00 56.928 3.9514 4.9198 2.2722 0.34000 0.42000 0.89000 1.9800 2.6400 2.7700 2.6700 2.5000 2.3600 2.3200 2.4500 3.2300 5.0200 6.9100 7.3500 6.7700 6.0200 5.1800 4.3700 3.9000 3.8500 4.0500 4.1700 4.1800 4.2300 4.2500 4.2900 4.4400 4.6900 4.8500 4.8200 4.7300 4.5800 4.5100 4.6100 4.9200 354 82.338 29.576 100.00 61.875 3.4554 4.7935 2.4159 0.35000 0.55000 1.1200 2.0600 2.7100 2.8500 2.7900 2.6300 2.5300 2.5000 2.6800 3.5300 5.4300 7.4500 7.9400 7.3200 6.3900 5.3200 4.2900 3.6500 3.4200 3.3700 3.3100 3.2400 3.2200 3.2200 3.2500 3.3600 3.5700 3.7200 3.6900 3.6000 3.4800 3.4100 3.4800 3.7800 355 67.870 31.154 72.359 56.692 5.5241 6.7505 4.3121 0.46000 0.66000 1.1700 2.6600 4.3900 5.1500 5.2100 5.1200 4.9800 4.8800 4.9800 5.7700 7.5400 9.3600 9.7000 9.0000 8.1100 7.0900 6.0900 5.4900 5.3400 5.5000 5.5500 5.5500 5.5500 5.5600 5.6100 5.7700 6.0600 6.2300 6.1800 6.0900 5.9100 5.7800 5.8900 6.2500 356 75.642 29.081 100.00 53.294 4.5389 6.1855 2.5639 0.35000 0.51000 0.98000 2.0400 2.6800 2.8700 2.8200 2.6700 2.6000 2.6200 2.8800 4.0200 6.5100 9.1900 9.9600 9.2200 8.1200 6.8400 5.6200 4.8800 4.6200 4.6100 4.5400 4.4600 4.4500 4.4600 4.4900 4.6600 4.9300 5.1300 5.0900 4.9900 4.8000 4.7100 4.8000 5.1800 357 54.230 1.1158 68.806 67.249 5.8072 7.2874 4.1393 0.47000 0.44000 0.97000 2.3700 4.0200 4.7100 4.8700 4.8000 4.7500 4.7500 4.9600 5.7900 7.6100 9.5600 10.220 9.8100 8.9900 7.9700 6.9800 6.3600 6.0200 5.8600 5.7300 5.6300 5.6300 5.6400 5.6800 5.8100 5.9900 6.1200 6.1100 6.0700 5.9900 5.9500 6.0200 6.3000 358 69.593 0.0000 100.00 68.857 3.8283 5.2923 2.2936 0.58000 0.57000 1.0500 1.9700 2.5700 2.6800 2.6200 2.4500 2.3600 2.3300 2.5200 3.3700 5.3500 7.5700 8.3800 7.9900 7.1400 6.0500 5.0200 4.3500 4.0000 3.8300 3.6800 3.5700 3.5600 3.5600 3.5900 3.6900 3.8600 3.9700 3.9500 3.9000 3.8200 3.7800 3.8500 4.1100 359 62.994 21.137 99.834 63.341 4.8558 6.0960 2.3126 0.46000 0.45000 0.99000 1.9100 2.5500 2.6700 2.6000 2.4500 2.3600 2.3400 2.5500 3.4700 5.5600 7.8700 8.6700 8.2700 7.5500 6.6600 5.7900 5.2800 5.1000 5.1300 5.1200 5.0900 5.0900 5.1300 5.1600 5.2900 5.5200 5.6600 5.6500 5.5800 5.4700 5.4000 5.4800 5.7800 360 53.297 0.0000 56.250 57.880 8.1054 10.188 6.6987 0.67000 0.72000 1.1300 3.0500 6.1100 7.5400 7.8800 7.9900 7.9500 7.9600 8.2000 9.2300 11.430 13.770 14.460 13.760 12.550 11.040 9.6200 8.7100 8.2400 7.9900 7.7800 7.6500 7.6100 7.6400 7.6700 7.8300 8.0700 8.2300 8.2200 8.1500 8.0200 7.9500 8.0700 8.3900 361 38.097 2.7670 43.074 50.789 12.337 14.378 9.9011 0.58000 0.64000 1.1300 3.8000 8.8000 11.330 12.000 12.100 12.010 11.960 12.130 13.120 15.260 17.560 18.250 17.580 16.450 15.080 13.790 13.020 12.640 12.510 12.370 12.290 12.300 12.310 12.380 12.570 12.820 12.990 12.980 12.920 12.810 12.780 12.850 13.210 362 52.635 0.0000 67.184 54.098 8.9282 11.367 5.9770 0.59000 0.54000 1.0500 2.8000 5.3300 6.4500 6.7600 6.8200 6.8600 6.9800 7.3700 8.7600 11.760 15.040 16.160 15.480 14.140 12.480 10.890 9.8900 9.3600 9.1000 8.8600 8.7100 8.6700 8.6700 8.7400 8.9300 9.2100 9.3900 9.3800 9.2800 9.1600 9.0900 9.2000 9.5800 363 61.169 53.783 100.00 70.461 3.4168 3.5632 1.9228 0.31000 0.44000 1.0200 1.8900 2.4900 2.5900 2.5100 2.2900 2.1000 1.9800 1.9700 2.3100 3.1500 4.0300 4.1900 3.9300 3.6500 3.4200 3.1500 3.0400 3.2100 3.6000 3.8800 4.0400 4.1300 4.1700 4.2100 4.3300 4.5000 4.6200 4.6000 4.5600 4.4800 4.4400 4.5000 4.7200 364 42.479 28.592 64.261 68.542 5.9245 6.3417 3.9049 0.66000 0.70000 1.1200 2.5700 4.2200 4.9100 4.9300 4.7700 4.5700 4.4100 4.4100 4.8400 5.8800 6.9900 7.3000 7.0500 6.7000 6.3200 5.9300 5.7500 5.8400 6.1700 6.4200 6.5700 6.6700 6.7400 6.8000 6.9200 7.1000 7.2000 7.2100 7.1900 7.1400 7.1400 7.1800 7.4100 365 55.660 54.401 94.513 62.799 4.8871 4.9462 2.3277 0.48000 0.57000 1.0900 2.1100 2.8300 3.0000 2.9100 2.7200 2.5500 2.4400 2.4800 2.9700 4.1500 5.3600 5.6000 5.2300 4.9000 4.5900 4.2600 4.1500 4.4800 5.2000 5.7600 6.0700 6.2500 6.3400 6.4100 6.5700 6.8100 6.9500 6.9400 6.8800 6.7700 6.7100 6.7900 7.1000 366 46.857 23.127 78.288 65.419 6.3465 7.1801 3.4180 0.59000 0.50000 0.98000 2.2600 3.6200 4.0800 4.1100 3.9600 3.8300 3.7600 3.8800 4.6100 6.3100 8.1800 8.8000 8.5200 8.0300 7.4500 6.8700 6.5400 6.5500 6.7600 6.9200 6.9800 7.0400 7.0800 7.1400 7.2900 7.4900 7.6100 7.5900 7.5500 7.4800 7.4300 7.4900 7.7900 367 57.377 34.216 64.790 59.404 6.2891 7.0450 4.6956 0.50000 0.63000 1.0900 2.7800 4.8900 5.7700 5.8800 5.7100 5.5200 5.3500 5.3700 5.9500 7.3300 8.7700 9.0100 8.4600 7.8100 7.1000 6.3500 5.9700 6.0000 6.3700 6.6200 6.7300 6.8300 6.8700 6.9300 7.0800 7.3500 7.5100 7.4800 7.4100 7.2800 7.2000 7.3100 7.6000 368 71.085 49.675 100.00 62.857 3.7259 4.2456 2.2716 0.53000 0.59000 1.1900 2.1100 2.7600 2.9100 2.8000 2.6200 2.4700 2.3800 2.4200 2.9800 4.2100 5.4900 5.7000 5.2600 4.7700 4.2600 3.7500 3.4800 3.5600 3.8700 4.0700 4.1400 4.1900 4.2200 4.2600 4.4000 4.6200 4.7600 4.7400 4.6700 4.5500 4.4700 4.5500 4.8200 369 61.256 45.813 90.197 55.991 5.3822 5.8778 2.7509 0.35000 0.48000 0.99000 2.1300 3.1400 3.3800 3.3200 3.1400 3.0100 2.9300 3.0200 3.7300 5.3400 7.0300 7.3800 6.8800 6.3400 5.7600 5.1800 4.9000 5.1100 5.6800 6.1000 6.3200 6.4500 6.5300 6.5900 6.7800 7.0400 7.2300 7.2000 7.1100 6.9900 6.9000 6.9600 7.3500 370 40.252 35.469 71.566 56.078 7.9948 8.3275 4.1493 0.55000 0.64000 1.1300 2.5900 4.3700 5.0600 5.1000 4.9100 4.7500 4.6200 4.7100 5.4400 7.1100 8.9200 9.4100 9.0200 8.5400 8.0300 7.5200 7.3200 7.6600 8.4600 9.1400 9.5300 9.7600 9.8800 9.9900 10.180 10.420 10.590 10.580 10.540 10.430 10.400 10.500 10.800 371 34.478 0.0000 42.605 67.541 8.4932 9.6743 6.8505 0.64000 0.70000 1.2100 3.2100 6.6100 8.1300 8.4700 8.4100 8.2800 8.1700 8.2400 8.7700 10.020 11.310 11.720 11.420 10.850 10.130 9.4300 8.9900 8.7600 8.6400 8.5700 8.5000 8.5100 8.5200 8.5700 8.6900 8.8600 8.9500 8.9600 8.9400 8.9200 8.8800 8.9600 9.2200 372 63.485 56.506 78.539 52.562 5.3617 5.5526 3.4077 0.49000 0.57000 1.0400 2.4300 3.8500 4.3800 4.3500 4.1300 3.9100 3.7200 3.7000 4.2300 5.4700 6.7000 6.7800 6.1600 5.6400 5.1400 4.6200 4.4100 4.7300 5.5100 6.0800 6.3900 6.5500 6.6400 6.7300 6.9500 7.2700 7.4900 7.4600 7.3400 7.1700 7.0600 7.1900 7.5700 373 32.898 22.793 48.846 60.458 9.5499 10.086 6.5914 0.76000 0.71000 1.1900 3.3000 6.6400 8.1000 8.3100 8.1500 7.9000 7.7000 7.6600 8.1800 9.4700 10.850 11.230 10.890 10.460 9.9800 9.4800 9.2800 9.4400 9.9300 10.340 10.570 10.730 10.810 10.900 11.070 11.280 11.400 11.410 11.390 11.340 11.320 11.410 11.710 374 45.896 19.437 58.544 55.532 9.0794 10.374 6.4288 0.67000 0.51000 0.99000 3.0100 6.1700 7.5800 7.8300 7.7500 7.6200 7.5100 7.6200 8.4700 10.420 12.480 13.040 12.490 11.690 10.720 9.7900 9.2400 9.1500 9.3500 9.4800 9.5300 9.5900 9.6100 9.6700 9.8500 10.120 10.260 10.220 10.170 10.040 9.9700 10.030 10.380 375 21.268 0.0000 48.106 65.560 10.227 11.303 6.5325 0.62000 0.58000 1.0900 3.1400 6.2600 7.7100 7.9600 7.8800 7.7800 7.7200 7.8400 8.5500 10.150 11.900 12.660 12.570 12.250 11.780 11.320 11.060 10.930 10.880 10.840 10.820 10.870 10.900 10.990 11.120 11.290 11.390 11.380 11.420 11.410 11.430 11.520 11.760 376 0.0000 0.0000 19.083 67.026 12.636 13.058 9.2506 0.64000 0.60000 1.0600 3.9500 9.0300 11.420 11.760 11.600 11.350 11.150 11.060 11.270 11.860 12.520 12.880 12.970 13.030 13.070 13.120 13.230 13.280 13.360 13.440 13.520 13.620 13.690 13.790 13.920 14.030 14.110 14.160 14.230 14.300 14.400 14.500 14.630 377 5.6223 12.521 39.164 56.446 15.569 15.810 9.0203 0.78000 0.61000 1.2000 3.8600 8.7800 10.960 11.260 11.070 10.850 10.690 10.710 11.390 12.970 14.750 15.530 15.550 15.520 15.480 15.430 15.570 16.020 16.780 17.430 17.880 18.150 18.310 18.470 18.660 18.840 18.950 19.020 19.070 19.120 19.220 19.320 19.510 378 0.0000 3.0442 45.887 67.332 11.957 12.424 6.7149 0.66000 0.71000 1.1200 3.2400 6.6900 8.1600 8.3300 8.1800 8.0000 7.8800 7.9400 8.5200 9.8900 11.450 12.230 12.420 12.490 12.530 12.580 12.720 12.880 13.060 13.220 13.360 13.470 13.540 13.640 13.760 13.870 13.940 13.980 14.060 14.140 14.230 14.320 14.460 379 27.232 15.085 41.095 51.207 13.903 14.834 9.7885 0.65000 0.69000 1.2400 4.0300 9.2400 11.810 12.240 12.110 11.860 11.630 11.630 12.360 14.070 15.930 16.490 16.100 15.500 14.830 14.160 13.850 13.980 14.490 14.890 15.160 15.320 15.410 15.520 15.710 15.970 16.120 16.140 16.110 16.050 16.010 16.120 16.420 380 0.0000 0.0000 16.737 54.116 20.291 21.123 15.165 0.78000 0.71000 1.1900 5.2600 14.010 18.590 19.330 19.100 18.720 18.370 18.220 18.540 19.480 20.560 21.100 21.180 21.230 21.230 21.240 21.340 21.390 21.460 21.510 21.570 21.650 21.700 21.800 21.930 22.030 22.080 22.120 22.190 22.280 22.360 22.420 22.550 381 34.903 47.073 100.00 66.995 5.8299 5.6334 2.0722 0.48000 0.56000 1.0700 1.9600 2.5700 2.6600 2.5700 2.3700 2.2000 2.1200 2.1800 2.6900 3.9000 5.2200 5.6200 5.4500 5.2700 5.1300 4.9800 5.0200 5.4700 6.3500 7.1000 7.5500 7.8200 7.9500 8.0500 8.2100 8.4000 8.5100 8.5400 8.5300 8.4800 8.4900 8.5600 8.8000 382 18.589 45.137 67.534 64.310 8.3370 7.6011 3.7117 0.42000 0.58000 1.0500 2.5400 4.2800 4.8600 4.8000 4.5400 4.3000 4.0800 4.0200 4.4400 5.4500 6.5400 6.8500 6.6600 6.5700 6.5600 6.5200 6.7000 7.4700 8.8800 10.120 10.950 11.420 11.620 11.790 11.980 12.180 12.310 12.340 12.380 12.390 12.410 12.510 12.720 383 41.383 56.420 69.338 62.119 6.0945 5.6573 3.3690 0.53000 0.49000 1.0200 2.3700 3.9500 4.5300 4.4300 4.2100 3.9200 3.6900 3.5800 3.9000 4.7000 5.5200 5.5900 5.2400 5.0300 4.8700 4.6900 4.7200 5.2800 6.3500 7.2600 7.8000 8.1100 8.2600 8.3800 8.5600 8.8000 8.9500 8.9500 8.9200 8.8500 8.8400 8.9100 9.2000 384 42.083 62.958 100.00 59.878 5.8776 5.2564 2.1402 0.44000 0.55000 1.0700 2.0500 2.7200 2.8000 2.7200 2.5100 2.3300 2.2100 2.2400 2.6800 3.7400 4.8300 4.9700 4.6200 4.3900 4.2700 4.1300 4.2100 4.9200 6.2700 7.4300 8.1400 8.5300 8.7000 8.8200 9.0100 9.2600 9.4100 9.4200 9.3900 9.2800 9.2400 9.3600 9.6200 385 39.974 50.133 65.937 51.999 8.6348 8.2023 4.8102 0.85000 0.72000 1.3000 2.9900 5.2900 6.1900 6.1900 5.9400 5.6400 5.4000 5.3000 5.8100 7.0300 8.2900 8.4200 7.9100 7.5100 7.2000 6.8400 6.8100 7.5300 8.9700 10.210 10.960 11.380 11.560 11.720 11.920 12.230 12.380 12.390 12.340 12.220 12.160 12.220 12.630 386 43.965 69.459 100.00 67.019 4.3499 3.7214 1.8258 0.26000 0.44000 0.89000 1.8700 2.4900 2.5600 2.4500 2.2300 2.0200 1.8700 1.8200 2.0600 2.6800 3.2900 3.3000 3.0400 2.9100 2.8700 2.8200 2.9200 3.4900 4.5600 5.4900 6.0800 6.4000 6.5400 6.6600 6.8100 7.0100 7.1400 7.1600 7.1500 7.0800 7.0500 7.1600 7.3900 387 12.709 32.691 38.182 65.358 9.7347 9.2425 6.2198 0.56000 0.58000 1.0900 3.2300 6.7000 8.1400 8.2000 7.8800 7.4900 7.1600 6.9600 7.1500 7.7900 8.5300 8.7100 8.5200 8.4300 8.4000 8.3500 8.4700 9.0700 10.160 11.120 11.750 12.100 12.260 12.400 12.560 12.720 12.820 12.850 12.900 12.910 12.920 13.020 13.250 388 52.446 56.511 100.00 54.647 5.6935 5.5948 2.2068 0.45000 0.52000 0.98000 1.9900 2.6600 2.7900 2.7100 2.5000 2.3500 2.2600 2.3300 2.9600 4.4000 5.9000 6.1900 5.7400 5.3500 5.0000 4.6300 4.5500 5.0400 6.0800 6.9400 7.4500 7.7200 7.8400 7.9400 8.1600 8.4300 8.6200 8.6000 8.5400 8.3900 8.3300 8.4400 8.7900 389 0.0000 42.578 29.656 66.506 9.8081 8.5353 6.0423 0.60000 0.56000 1.0200 3.2700 6.8400 8.2700 8.1900 7.7800 7.3200 6.8700 6.5600 6.5500 6.8300 7.1800 7.1600 6.9600 6.9200 7.0100 7.0900 7.3400 8.2700 9.9900 11.610 12.700 13.320 13.620 13.830 14.010 14.160 14.270 14.320 14.410 14.510 14.610 14.710 14.850 390 0.0000 29.386 28.208 52.618 17.263 16.024 10.895 1.0800 0.76000 1.3100 4.6800 11.200 14.250 14.370 13.860 13.280 12.700 12.350 12.520 13.300 14.210 14.430 14.200 14.170 14.250 14.330 14.670 15.820 17.930 19.880 21.230 21.970 22.310 22.540 22.750 22.910 22.990 23.060 23.130 23.230 23.360 23.420 23.560 391 9.5676 17.928 28.322 57.376 14.693 14.620 10.098 0.64000 0.70000 1.2300 4.2400 9.9800 12.710 13.030 12.710 12.330 11.960 11.790 12.080 12.980 14.010 14.340 14.180 14.070 13.970 13.870 13.970 14.460 15.400 16.210 16.760 17.090 17.270 17.430 17.600 17.790 17.910 17.940 18.000 18.030 18.110 18.200 18.450 392 13.598 25.919 49.105 62.234 10.958 10.797 6.0802 0.68000 0.56000 1.1100 3.0600 6.2900 7.6500 7.7200 7.4900 7.2300 7.0100 6.9700 7.4700 8.6800 10.040 10.510 10.400 10.290 10.200 10.100 10.210 10.730 11.700 12.540 13.100 13.440 13.600 13.730 13.900 14.100 14.200 14.260 14.280 14.310 14.360 14.440 14.650 393 16.742 40.442 53.381 54.721 11.757 10.935 6.0486 0.66000 0.55000 1.0900 3.2000 6.4400 7.7400 7.8000 7.5000 7.1900 6.8900 6.7900 7.2700 8.4800 9.8000 10.140 9.8800 9.7000 9.6400 9.5300 9.7300 10.650 12.400 13.960 15.000 15.570 15.840 16.050 16.270 16.520 16.660 16.710 16.740 16.750 16.760 16.880 17.130 394 35.952 94.362 100.00 67.642 4.1412 2.8985 1.8175 0.48000 0.60000 1.0700 2.0900 2.6500 2.7200 2.5600 2.3500 2.0900 1.9000 1.7600 1.7800 1.9700 2.1000 1.8600 1.5700 1.4800 1.5000 1.5300 1.6900 2.4500 4.0300 5.5100 6.4900 7.0200 7.2500 7.4100 7.5900 7.7800 7.9200 7.9300 7.9300 7.8800 7.8900 7.9500 8.1900 395 28.818 81.252 100.00 53.717 7.3327 5.3525 2.0375 0.43000 0.45000 0.97000 2.0000 2.7400 2.8300 2.7100 2.4900 2.2700 2.1100 2.0500 2.3400 3.0600 3.7200 3.6000 3.1700 3.0300 3.0800 3.1100 3.4100 4.7500 7.4100 9.9400 11.640 12.570 12.990 13.260 13.530 13.850 14.040 14.060 14.060 14.000 13.990 14.080 14.420 396 23.810 77.343 61.574 50.885 9.2731 6.8750 4.4601 0.85000 0.73000 1.2900 3.0600 5.6000 6.5200 6.3200 5.8300 5.3100 4.7900 4.4300 4.4400 4.8000 5.1600 4.8300 4.3100 4.1400 4.1900 4.2100 4.5200 6.0400 9.0700 12.000 13.960 15.030 15.490 15.750 16.030 16.330 16.510 16.520 16.530 16.490 16.480 16.570 16.870 397 26.291 89.213 100.00 61.998 5.7966 4.0222 1.8240 0.41000 0.51000 0.97000 1.9600 2.5400 2.6700 2.5100 2.3000 2.0700 1.8900 1.7900 1.9200 2.3200 2.6500 2.4500 2.1000 1.9800 2.0500 2.0800 2.3300 3.4700 5.7200 7.9000 9.3500 10.160 10.530 10.750 10.980 11.230 11.390 11.420 11.420 11.410 11.410 11.520 11.790 398 0.0000 67.303 66.795 64.660 8.4787 6.4055 3.1853 0.52000 0.52000 1.0200 2.4100 4.0500 4.5700 4.3800 4.0400 3.7100 3.4100 3.2200 3.3700 3.8900 4.4100 4.3700 4.1000 4.0300 4.1300 4.2000 4.5400 5.8900 8.5000 11.050 12.830 13.810 14.270 14.540 14.770 14.940 15.040 15.130 15.210 15.300 15.410 15.520 15.640 399 47.061 80.907 100.00 57.284 5.3405 4.2638 2.1279 0.59000 0.63000 1.0900 2.1500 2.8400 2.9800 2.8300 2.6200 2.3900 2.2200 2.1600 2.4200 3.0900 3.6700 3.5200 3.0800 2.9100 2.8800 2.8300 2.9700 3.8300 5.5100 6.9900 7.9100 8.3900 8.6100 8.7500 8.9600 9.2400 9.4100 9.4100 9.3500 9.2500 9.1800 9.2700 9.6100 400 0.0000 53.229 58.212 69.366 7.8744 6.5491 3.6006 0.53000 0.45000 1.0100 2.4300 4.3400 4.9900 4.8900 4.5500 4.2400 3.9300 3.7800 3.9300 4.4800 5.0700 5.1500 4.9800 4.9400 5.0300 5.1000 5.3600 6.3200 8.1100 9.8100 10.970 11.610 11.910 12.120 12.290 12.460 12.520 12.600 12.680 12.750 12.860 12.930 13.090 401 35.766 68.302 100.00 55.319 7.0017 5.8307 2.1272 0.42000 0.46000 0.95000 1.9900 2.6700 2.8200 2.7200 2.4800 2.3100 2.1900 2.2000 2.6600 3.7500 4.8600 4.9400 4.5300 4.3300 4.2900 4.2100 4.4000 5.4300 7.4200 9.1800 10.290 10.880 11.140 11.320 11.540 11.830 12.000 12.010 11.950 11.890 11.820 11.920 12.220 402 0.0000 60.025 44.781 56.817 12.073 9.4989 6.0592 0.68000 0.58000 1.1200 3.3400 7.1600 8.6500 8.4700 7.8600 7.2700 6.6600 6.2700 6.2600 6.6800 7.1700 7.0300 6.6200 6.5200 6.6300 6.7200 7.1300 8.8000 12.050 15.170 17.350 18.560 19.070 19.390 19.620 19.800 19.860 19.940 20.050 20.120 20.220 20.300 20.430 403 0.0000 72.633 57.855 69.998 7.0163 5.2057 3.2554 0.58000 0.58000 1.1000 2.5500 4.2500 4.8100 4.6000 4.2700 3.8500 3.4700 3.2100 3.1800 3.4100 3.6400 3.5000 3.2400 3.1700 3.2500 3.3000 3.5800 4.7000 6.9200 9.0500 10.520 11.320 11.680 11.900 12.090 12.250 12.330 12.390 12.450 12.540 12.610 12.690 12.830 404 27.372 74.831 100.00 68.759 4.9861 3.9175 1.8169 0.33000 0.51000 0.99000 1.9100 2.4800 2.5900 2.4700 2.2400 2.0300 1.8700 1.8100 1.9900 2.5100 3.0200 3.0000 2.7300 2.6400 2.6600 2.6600 2.8200 3.6000 5.1100 6.5200 7.4300 7.9300 8.1700 8.3200 8.4900 8.6900 8.8000 8.8400 8.8500 8.8300 8.8600 8.9600 9.1700 405 0.0000 53.171 55.643 52.422 13.801 11.297 5.7428 0.83000 0.67000 1.1600 3.2600 6.5300 7.7700 7.6700 7.2100 6.8000 6.3800 6.1700 6.4900 7.4600 8.5300 8.6900 8.3700 8.3000 8.4300 8.5400 9.0100 10.750 14.110 17.390 19.700 20.980 21.570 21.940 22.220 22.430 22.540 22.640 22.730 22.860 22.970 23.100 23.270 406 0.0000 45.593 44.073 60.418 11.396 9.7130 5.8408 0.63000 0.49000 1.00000 3.1800 6.5600 7.9200 7.8400 7.4200 7.0200 6.5800 6.3400 6.5000 7.1200 7.8100 7.9000 7.6600 7.6300 7.7300 7.8200 8.1700 9.3800 11.690 13.890 15.420 16.270 16.670 16.930 17.160 17.320 17.420 17.490 17.600 17.690 17.800 17.910 18.090 407 0.0000 100.00 74.639 66.432 6.8276 4.1821 2.3421 0.75000 0.64000 1.0700 2.2600 3.3900 3.6600 3.4600 3.1100 2.7500 2.4200 2.1600 2.0700 2.1100 2.1200 1.8100 1.4500 1.3600 1.4400 1.5100 1.8100 3.2200 6.2500 9.3600 11.590 12.830 13.390 13.710 13.950 14.130 14.230 14.310 14.400 14.500 14.580 14.690 14.830 408 31.620 100.00 81.527 55.139 6.3710 4.0563 2.5922 0.66000 0.68000 1.1900 2.4400 3.6000 3.9700 3.7800 3.4100 3.0800 2.7000 2.4400 2.4000 2.5200 2.5600 2.1200 1.6300 1.4800 1.5500 1.5900 1.8500 3.1900 5.9700 8.7100 10.550 11.550 11.980 12.240 12.500 12.790 12.970 12.990 12.970 12.880 12.850 12.940 13.280 409 0.0000 100.00 100.00 60.799 8.2139 4.9778 1.9624 0.52000 0.61000 1.2000 2.1400 2.7900 2.8900 2.7700 2.5100 2.2700 2.0500 1.9100 1.9700 2.2200 2.3700 2.0300 1.5900 1.4700 1.5800 1.6500 2.0200 3.8000 7.6000 11.510 14.360 15.930 16.630 17.020 17.280 17.480 17.580 17.670 17.750 17.840 17.960 18.010 18.150 410 0.0000 81.296 66.617 59.121 9.2779 6.2752 3.2619 0.68000 0.58000 1.0900 2.5600 4.3300 4.8700 4.6600 4.2600 3.8400 3.4200 3.1500 3.1700 3.4600 3.7400 3.5000 3.0900 2.9900 3.1000 3.2000 3.5900 5.3000 8.8200 12.420 15.000 16.450 17.100 17.480 17.770 17.950 18.090 18.180 18.290 18.390 18.510 18.600 18.760 411 0.0000 100.00 58.141 56.678 9.3376 5.4539 3.4749 0.50000 0.45000 1.0600 2.7800 5.0100 5.7200 5.3600 4.7400 4.1300 3.5100 3.0100 2.7600 2.6500 2.5400 2.0300 1.5200 1.3800 1.5100 1.6000 2.0000 3.9900 8.2900 12.780 16.050 17.900 18.710 19.160 19.460 19.670 19.790 19.860 19.950 20.050 20.150 20.220 20.340 412 0.0000 74.722 43.225 62.795 8.9816 6.4205 4.4516 0.70000 0.53000 1.1100 3.0000 5.7600 6.7200 6.4900 5.8900 5.3300 4.7400 4.3300 4.1500 4.2300 4.3200 4.0800 3.7100 3.6200 3.7200 3.8100 4.1400 5.6100 8.5800 11.540 13.640 14.800 15.340 15.640 15.900 16.080 16.180 16.270 16.380 16.480 16.580 16.640 16.820 413 67.436 7.1375 93.111 53.073 6.4639 9.0201 3.2847 0.30000 0.49000 0.97000 2.1200 3.0700 3.3600 3.3800 3.3100 3.3100 3.4500 3.8700 5.4500 8.9600 12.960 14.390 13.620 12.110 10.260 8.5200 7.4100 6.8700 6.6200 6.3900 6.2100 6.1700 6.1700 6.2100 6.4000 6.7000 6.9000 6.8700 6.7500 6.5800 6.4600 6.5800 6.9500 414 61.643 24.678 100.00 52.790 6.3037 7.8814 2.6481 0.46000 0.41000 0.99000 2.0200 2.7200 2.8900 2.8100 2.6900 2.6300 2.7000 3.0100 4.2600 7.0400 10.140 11.190 10.630 9.6700 8.5500 7.4400 6.7900 6.6300 6.7300 6.7700 6.7700 6.8000 6.8300 6.8800 7.0700 7.3800 7.5700 7.5500 7.4200 7.2800 7.1800 7.2100 7.6800 415 61.943 0.0000 100.00 62.465 5.7094 7.7380 2.6294 0.51000 0.45000 1.0100 1.9800 2.6500 2.8100 2.7400 2.6300 2.5900 2.6600 3.0000 4.3000 7.1900 10.500 11.790 11.330 10.210 8.8000 7.4700 6.6300 6.1800 5.9500 5.7600 5.6200 5.5900 5.6000 5.6400 5.7800 6.0100 6.1400 6.1300 6.0600 5.9500 5.8800 5.9500 6.3000 416 45.426 0.0000 100.00 62.209 7.4616 9.2973 2.6105 0.48000 0.54000 0.97000 1.9300 2.6000 2.7500 2.6900 2.5800 2.5200 2.5900 2.9600 4.2900 7.3200 10.900 12.460 12.270 11.450 10.360 9.3100 8.6700 8.3300 8.1700 8.0100 7.9300 7.9200 7.9300 8.0000 8.1600 8.3900 8.5300 8.5300 8.4800 8.4000 8.3600 8.4500 8.7400 417 47.930 0.0000 100.00 69.658 5.5804 6.9089 2.2976 0.46000 0.45000 0.94000 1.9000 2.5000 2.6000 2.5800 2.4100 2.3000 2.3100 2.5100 3.4700 5.6300 8.1500 9.2400 9.0900 8.4900 7.6800 6.8900 6.4100 6.1500 6.0300 5.9100 5.8500 5.8500 5.8700 5.9200 6.0300 6.2000 6.3200 6.3300 6.3000 6.2600 6.2100 6.2900 6.5200 418 41.587 2.4155 73.799 54.996 10.198 12.297 5.1020 0.63000 0.50000 1.0200 2.6600 4.6900 5.4900 5.6800 5.6800 5.6700 5.7600 6.1700 7.6200 10.790 14.420 15.910 15.570 14.600 13.340 12.150 11.440 11.080 10.940 10.790 10.690 10.700 10.730 10.800 10.990 11.240 11.420 11.400 11.350 11.240 11.180 11.260 11.630 419 46.587 13.216 100.00 51.931 9.2112 11.157 2.9835 0.59000 0.58000 1.1200 2.1200 2.8600 3.0300 3.0100 2.8800 2.8800 3.0000 3.4300 5.0200 8.6100 12.900 14.690 14.330 13.360 12.130 10.950 10.270 10.060 10.160 10.200 10.190 10.240 10.260 10.330 10.530 10.820 11.000 10.990 10.900 10.770 10.680 10.780 11.130 420 28.612 0.0000 100.00 67.779 7.9919 9.2200 2.4278 0.49000 0.48000 1.0100 1.9200 2.5500 2.6600 2.6000 2.4600 2.4000 2.4300 2.6700 3.7700 6.3000 9.3300 10.800 10.880 10.540 10.010 9.4800 9.2100 9.0500 9.0100 8.9500 8.9200 8.9600 9.0000 9.0700 9.1900 9.3600 9.4700 9.4900 9.4800 9.4800 9.4900 9.5800 9.7800 421 39.022 34.541 100.00 53.951 8.6600 9.1119 2.6321 0.50000 0.68000 1.0500 2.1300 2.8300 2.9500 2.9200 2.7600 2.6700 2.6900 2.9300 4.0100 6.4400 9.2000 10.190 9.8900 9.4400 8.9400 8.4400 8.2700 8.6900 9.5900 10.320 10.780 11.020 11.130 11.250 11.450 11.720 11.890 11.890 11.830 11.740 11.680 11.770 12.100 422 29.319 21.632 75.713 62.812 8.5747 9.1309 3.7354 0.47000 0.57000 1.0700 2.3900 3.9000 4.4500 4.4400 4.3100 4.1700 4.1000 4.2600 5.0800 7.0000 9.1500 10.010 9.8700 9.5600 9.1900 8.8100 8.6700 8.8800 9.3800 9.7700 10.030 10.190 10.290 10.370 10.530 10.740 10.850 10.860 10.870 10.830 10.800 10.880 11.150 423 37.804 29.061 100.00 68.113 6.0587 6.5176 2.2044 0.51000 0.53000 1.0500 1.9600 2.5900 2.6700 2.5900 2.4200 2.3000 2.2500 2.3700 3.0800 4.7100 6.5600 7.2700 7.1700 6.9200 6.6100 6.3100 6.1900 6.3400 6.7000 6.9900 7.1600 7.2800 7.3500 7.4200 7.5400 7.7200 7.8400 7.8300 7.8300 7.7900 7.7900 7.8600 8.0800 424 53.831 31.467 100.00 57.807 6.2519 7.2111 2.4323 0.43000 0.43000 0.95000 1.9500 2.6500 2.8100 2.7100 2.5400 2.4800 2.4700 2.6900 3.6800 5.9100 8.3800 9.2200 8.8400 8.2300 7.5100 6.8000 6.4300 6.4700 6.8000 7.0300 7.1400 7.2200 7.2700 7.3500 7.5200 7.7900 7.9600 7.9400 7.8700 7.7700 7.6800 7.7800 8.1200 425 54.710 45.154 100.00 50.957 6.6831 7.1289 2.4775 0.34000 0.46000 1.0100 2.0500 2.7700 2.9200 2.8400 2.6700 2.5700 2.5200 2.7200 3.6400 5.7000 7.9300 8.5400 8.0600 7.4900 6.9200 6.3200 6.0800 6.4200 7.2400 7.8800 8.2300 8.4500 8.5500 8.6500 8.8700 9.1900 9.3900 9.3700 9.2900 9.1300 9.0400 9.1600 9.5300 426 0.0000 7.7147 70.973 70.948 9.2293 9.5272 3.6531 0.72000 0.55000 1.0700 2.4100 3.8800 4.4300 4.3800 4.2400 4.1200 4.0300 4.1700 4.8600 6.4500 8.3200 9.2600 9.4600 9.5500 9.6000 9.6500 9.8000 10.030 10.350 10.640 10.830 10.970 11.060 11.170 11.270 11.380 11.430 11.480 11.570 11.640 11.730 11.790 11.900 427 24.992 0.0000 74.759 59.273 11.835 13.524 4.9329 0.77000 0.70000 1.1800 2.6800 4.5900 5.4200 5.5100 5.4500 5.4500 5.5300 5.9000 7.2800 10.370 13.990 15.680 15.700 15.210 14.470 13.770 13.400 13.200 13.110 13.020 12.980 13.000 13.040 13.100 13.260 13.460 13.590 13.600 13.610 13.560 13.570 13.650 13.920 428 19.081 0.0000 52.025 57.630 13.366 14.803 7.6628 0.64000 0.61000 1.0800 3.3200 7.0400 8.7600 9.1200 9.1000 9.0700 9.0900 9.3400 10.430 12.740 15.310 16.460 16.430 16.040 15.460 14.920 14.630 14.460 14.430 14.370 14.370 14.430 14.480 14.570 14.750 14.950 15.070 15.110 15.140 15.120 15.140 15.220 15.520 429 15.521 12.123 82.196 63.702 10.339 10.996 3.5530 0.60000 0.52000 0.97000 2.2200 3.5700 4.0600 4.0400 3.9200 3.8500 3.8500 4.1100 5.1500 7.4700 10.160 11.420 11.550 11.430 11.250 11.050 11.060 11.260 11.640 11.940 12.150 12.310 12.400 12.520 12.670 12.840 12.950 13.000 13.020 13.040 13.080 13.190 13.420 430 4.0194 7.8219 57.417 58.893 14.926 15.559 6.9521 0.76000 0.61000 1.1500 3.2700 6.7000 8.1900 8.3500 8.2300 8.1100 8.0700 8.2700 9.2800 11.590 14.220 15.510 15.710 15.730 15.690 15.640 15.770 16.060 16.540 16.930 17.200 17.380 17.480 17.600 17.750 17.910 17.980 18.040 18.090 18.150 18.220 18.310 18.440 431 29.848 0.0000 72.763 66.921 8.1852 9.3813 3.9496 0.52000 0.58000 1.0600 2.3900 3.9500 4.5200 4.5900 4.4800 4.4300 4.4100 4.6400 5.5600 7.6400 10.020 11.080 11.020 10.610 10.020 9.4500 9.1400 8.9800 8.9100 8.8500 8.8200 8.8500 8.8900 8.9400 9.0700 9.2500 9.3500 9.3600 9.3700 9.3400 9.3400 9.4100 9.6500 432 1.7116 0.0000 39.816 52.225 20.515 21.660 11.532 1.0100 0.69000 1.2200 4.3900 10.630 13.670 14.120 13.990 13.860 13.750 13.930 14.970 17.380 20.220 21.700 22.040 22.150 22.140 22.150 22.300 22.360 22.480 22.550 22.620 22.750 22.800 22.930 23.090 23.230 23.290 23.360 23.420 23.500 23.640 23.730 23.860 433 0.0000 5.5329 57.740 50.735 19.597 20.309 8.2437 0.85000 0.72000 1.0900 3.5200 7.6200 9.4500 9.6900 9.6400 9.5800 9.6100 9.9600 11.350 14.420 17.980 19.790 20.200 20.340 20.430 20.520 20.820 21.280 21.950 22.490 22.860 23.140 23.290 23.450 23.650 23.810 23.910 23.980 24.070 24.200 24.320 24.450 24.630 434 0.0000 30.959 69.612 67.959 9.6362 9.0503 3.7173 0.33000 0.46000 0.98000 2.3200 4.0900 4.6800 4.6600 4.4300 4.2400 4.1100 4.1400 4.6900 6.0100 7.4700 8.0800 8.1000 8.1200 8.1900 8.2700 8.5200 9.2400 10.490 11.640 12.420 12.880 13.100 13.270 13.440 13.560 13.650 13.700 13.780 13.870 13.970 14.060 14.230 435 32.173 40.310 88.047 59.397 8.0815 8.0274 2.8615 0.44000 0.44000 1.00000 2.1100 3.1700 3.4500 3.4100 3.2300 3.1200 3.0400 3.1700 3.9300 5.6700 7.5600 8.2100 7.9900 7.7500 7.5300 7.2900 7.3000 7.8300 8.8700 9.7300 10.260 10.570 10.730 10.850 11.050 11.280 11.450 11.450 11.430 11.390 11.360 11.460 11.740 436 4.7344 27.597 100.00 67.265 8.9948 8.7530 2.2721 0.56000 0.54000 1.0400 1.9800 2.5900 2.6800 2.6000 2.4700 2.3300 2.3100 2.4500 3.2300 5.0600 7.1600 8.1300 8.2300 8.2400 8.2600 8.2800 8.4800 9.0800 10.120 11.030 11.650 12.010 12.180 12.330 12.470 12.640 12.720 12.780 12.820 12.880 12.960 13.030 13.250 437 29.088 55.680 100.00 60.020 7.3297 6.5745 2.1887 0.59000 0.58000 1.0600 2.0400 2.6600 2.7900 2.6800 2.4900 2.3500 2.2500 2.3000 2.8900 4.2000 5.6300 5.9800 5.7200 5.5400 5.4600 5.3700 5.5000 6.3300 7.9100 9.3100 10.200 10.690 10.920 11.080 11.280 11.520 11.670 11.680 11.680 11.660 11.660 11.770 12.030 438 21.032 53.443 100.00 53.386 9.8265 8.6578 2.4270 0.58000 0.63000 1.1000 2.0800 2.8400 2.9500 2.8500 2.6900 2.5500 2.5000 2.6200 3.3900 5.1400 7.0200 7.5800 7.2900 7.1100 7.0600 6.9800 7.2100 8.3900 10.620 12.660 14.000 14.730 15.070 15.300 15.550 15.820 15.970 16.010 16.010 16.000 15.990 16.090 16.380 439 3.4367 19.545 54.551 51.187 17.699 17.580 8.2076 0.82000 0.73000 1.2700 3.7800 8.0300 9.9200 10.090 9.8700 9.6500 9.4900 9.6200 10.640 13.010 15.680 16.840 16.880 16.840 16.840 16.810 17.070 17.890 19.350 20.620 21.470 21.950 22.160 22.330 22.520 22.690 22.760 22.800 22.860 22.900 22.970 23.020 23.200 440 0.0000 22.635 53.904 60.121 13.295 12.813 6.2298 0.62000 0.70000 1.0500 3.2000 6.4300 7.7500 7.8000 7.5800 7.3500 7.1400 7.1800 7.8100 9.3300 11.070 11.790 11.820 11.840 11.930 12.000 12.280 13.050 14.400 15.620 16.450 16.940 17.170 17.350 17.520 17.680 17.750 17.830 17.890 17.980 18.120 18.210 18.330 441 0.0000 34.979 80.712 59.692 12.132 11.142 3.5477 0.54000 0.53000 0.98000 2.3100 3.8000 4.3000 4.2700 4.0500 3.9200 3.8300 3.9700 4.7900 6.6600 8.7800 9.6700 9.6900 9.7100 9.8100 9.9100 10.270 11.340 13.280 15.090 16.340 17.040 17.380 17.600 17.820 17.990 18.080 18.160 18.250 18.340 18.470 18.570 18.720 442 23.382 36.725 79.466 51.978 11.288 10.997 3.9965 0.56000 0.54000 1.0200 2.5000 4.1500 4.7600 4.7600 4.5800 4.4400 4.3700 4.5400 5.5000 7.6200 9.9900 10.800 10.590 10.360 10.160 9.9300 10.030 10.830 12.350 13.660 14.500 15.000 15.220 15.410 15.640 15.940 16.090 16.130 16.110 16.070 16.060 16.200 16.440 443 7.1943 42.231 67.156 58.276 11.315 10.177 4.4194 0.59000 0.66000 1.0700 2.7000 4.8700 5.6300 5.6200 5.3500 5.1000 4.9000 4.8900 5.4600 6.8300 8.3400 8.8300 8.6800 8.6200 8.6700 8.7100 8.9900 10.080 12.090 13.940 15.200 15.890 16.220 16.440 16.650 16.840 16.970 17.030 17.090 17.140 17.200 17.330 17.500 444 0.0000 50.038 94.953 64.625 9.2342 7.7840 2.2316 0.47000 0.50000 0.96000 1.9300 2.7200 2.8500 2.7500 2.5500 2.3900 2.2900 2.3400 2.9000 4.2100 5.6400 6.1000 5.9900 5.9700 6.0800 6.1700 6.5100 7.7100 9.9100 11.980 13.400 14.200 14.580 14.830 15.030 15.190 15.290 15.380 15.470 15.560 15.680 15.780 15.940 445 0.0000 68.043 68.695 54.674 11.663 8.6605 3.9160 0.60000 0.60000 1.1000 2.7400 4.7900 5.5100 5.3200 4.9400 4.5800 4.2000 4.0300 4.2700 5.0300 5.8000 5.7500 5.3400 5.2400 5.3600 5.4800 5.9300 7.8400 11.610 15.370 18.020 19.530 20.190 20.560 20.840 21.060 21.160 21.250 21.340 21.460 21.580 21.650 21.820 446 0.0000 80.049 100.00 64.295 7.6361 5.2794 1.8458 0.41000 0.53000 0.99000 1.9200 2.5100 2.6300 2.5000 2.2700 2.0800 1.8900 1.8300 2.0400 2.5900 3.0900 3.0200 2.7100 2.6400 2.7300 2.8100 3.1600 4.6100 7.5300 10.440 12.490 13.640 14.170 14.490 14.730 14.930 15.030 15.120 15.220 15.330 15.430 15.530 15.690 447 0.0000 62.970 100.00 69.077 7.0358 5.5252 1.8971 0.34000 0.56000 1.00000 1.9100 2.4800 2.5900 2.4700 2.2500 2.0900 1.9600 1.9400 2.2400 3.0000 3.8000 3.9700 3.7800 3.7400 3.8200 3.8900 4.1700 5.2500 7.3200 9.2900 10.640 11.390 11.740 11.960 12.140 12.290 12.380 12.450 12.520 12.610 12.690 12.800 12.910 448 0.0000 65.157 100.00 60.906 9.7076 7.4310 2.1840 0.53000 0.57000 1.0700 2.0400 2.7400 2.8700 2.7600 2.5400 2.3800 2.2600 2.2800 2.7500 3.8400 4.9500 5.1200 4.8200 4.7300 4.8500 4.9500 5.3500 6.9700 10.090 13.080 15.120 16.260 16.740 17.020 17.240 17.420 17.520 17.590 17.650 17.720 17.830 17.900 18.010 449 8.0675 57.798 74.514 61.912 9.3462 7.7186 3.3212 0.55000 0.61000 1.1200 2.4600 3.9600 4.4500 4.3500 4.0700 3.8100 3.5900 3.5100 3.8800 4.8600 5.8700 6.0600 5.8000 5.7200 5.7800 5.8400 6.1600 7.4100 9.7800 11.990 13.490 14.290 14.660 14.870 15.100 15.270 15.380 15.430 15.490 15.530 15.580 15.640 15.860 450 0.0000 67.568 100.00 51.427 11.851 8.7018 2.2036 0.44000 0.52000 0.96000 1.9800 2.7200 2.8600 2.7200 2.5400 2.3800 2.2600 2.3200 2.8600 4.1100 5.3700 5.5500 5.1800 5.0900 5.2400 5.3600 5.8700 7.9100 11.970 16.050 19.010 20.700 21.470 21.920 22.260 22.500 22.620 22.730 22.860 22.980 23.120 23.240 23.380 451 0.0000 53.109 75.837 54.318 12.625 10.392 3.6907 0.63000 0.57000 1.0500 2.4900 4.2300 4.7900 4.6700 4.4200 4.1800 3.9800 3.9900 4.5700 6.0000 7.5500 7.9700 7.7300 7.6800 7.8200 7.9200 8.3700 10.020 13.200 16.280 18.480 19.700 20.260 20.590 20.860 21.050 21.170 21.250 21.370 21.470 21.580 21.670 21.820 452 0.0000 80.517 100.00 56.346 9.4478 6.3632 1.9231 0.43000 0.54000 0.96000 1.9400 2.5800 2.6900 2.5600 2.3500 2.1400 1.9800 1.9200 2.1800 2.8600 3.5100 3.4300 3.0500 2.9500 3.0700 3.1700 3.5800 5.3900 9.1500 13.010 15.810 17.390 18.100 18.510 18.820 19.030 19.150 19.240 19.360 19.450 19.590 19.670 19.850 453 0.0000 88.799 78.559 52.744 10.656 6.7888 2.8289 0.49000 0.55000 1.0100 2.4200 3.8600 4.2300 4.0400 3.6400 3.3000 2.9400 2.7000 2.7900 3.1900 3.5300 3.2100 2.7400 2.6100 2.7500 2.8600 3.3300 5.4400 9.8900 14.570 18.010 20.010 20.920 21.430 21.800 22.070 22.220 22.340 22.450 22.580 22.740 22.860 23.060 454 33.109 0.0000 100.00 51.855 12.202 14.624 3.2789 0.59000 0.65000 1.1100 2.2000 2.9000 3.1300 3.0800 3.0500 3.0800 3.2800 3.8200 5.7400 10.160 15.590 18.230 18.200 17.330 16.100 14.950 14.280 13.930 13.760 13.600 13.510 13.520 13.520 13.590 13.780 14.030 14.190 14.180 14.130 14.060 14.000 14.070 14.450 455 0.0000 0.0000 100.00 68.531 10.581 11.300 2.4040 0.44000 0.45000 0.86000 1.8700 2.4500 2.6100 2.5400 2.4000 2.3400 2.3800 2.6700 3.7800 6.3300 9.4600 11.160 11.630 11.780 11.840 11.910 12.080 12.200 12.310 12.410 12.490 12.590 12.660 12.760 12.890 13.010 13.080 13.150 13.210 13.290 13.400 13.460 13.640 456 14.908 0.0000 100.00 51.329 15.762 17.686 3.2436 0.65000 0.62000 1.0100 2.0700 2.8200 3.0000 2.9800 2.9200 2.9900 3.1800 3.7700 5.7600 10.360 16.160 19.290 19.830 19.590 19.030 18.530 18.340 18.270 18.280 18.250 18.260 18.340 18.390 18.520 18.720 18.960 19.100 19.140 19.150 19.150 19.210 19.350 19.580 457 0.0000 0.0000 100.00 59.281 15.156 16.336 2.9540 0.72000 0.66000 0.97000 1.9600 2.6900 2.9100 2.8400 2.7500 2.7800 2.9200 3.3600 5.0100 8.8200 13.610 16.300 17.030 17.210 17.240 17.300 17.510 17.660 17.780 17.860 17.940 18.050 18.110 18.220 18.360 18.490 18.530 18.600 18.670 18.750 18.880 18.930 19.110 458 0.0000 9.2541 80.186 53.624 17.522 18.132 4.9415 0.97000 0.66000 1.2300 2.6800 4.6300 5.3900 5.4200 5.3500 5.3200 5.4100 5.7900 7.3700 10.930 15.320 17.590 18.100 18.220 18.290 18.360 18.680 19.240 20.080 20.770 21.220 21.530 21.660 21.830 21.980 22.130 22.180 22.230 22.310 22.410 22.490 22.600 22.710 459 3.1905 0.0000 72.620 59.373 15.469 16.618 5.3251 0.78000 0.75000 1.1200 2.8100 5.0400 5.9100 6.0200 5.8900 5.9000 5.9600 6.3200 7.7100 10.880 14.730 16.790 17.300 17.390 17.360 17.340 17.460 17.540 17.640 17.690 17.770 17.850 17.920 18.030 18.180 18.320 18.380 18.450 18.510 18.580 18.670 18.740 18.920 460 21.018 0.0000 100.00 60.589 11.005 12.533 2.8351 0.67000 0.69000 1.0900 2.0500 2.7800 2.9100 2.8300 2.7500 2.7200 2.8300 3.2200 4.6900 8.0400 12.130 14.190 14.430 14.100 13.530 13.000 12.750 12.620 12.590 12.530 12.510 12.560 12.600 12.680 12.820 13.010 13.120 13.140 13.130 13.110 13.140 13.240 13.470 461 14.871 38.498 100.00 50.921 12.299 11.569 2.6851 0.71000 0.63000 1.0800 2.1200 2.8500 3.0600 2.9200 2.8000 2.7100 2.7100 2.9700 4.0900 6.6300 9.5400 10.700 10.610 10.450 10.360 10.260 10.480 11.580 13.630 15.500 16.730 17.420 17.740 17.980 18.210 18.460 18.610 18.670 18.690 18.690 18.700 18.810 19.090 462 0.0000 19.689 74.159 56.836 15.148 15.022 4.7546 0.78000 0.69000 1.1300 2.6800 4.7200 5.4900 5.5000 5.3400 5.2700 5.2600 5.5100 6.6900 9.4000 12.560 14.080 14.310 14.380 14.460 14.550 14.880 15.680 17.010 18.200 19.000 19.460 19.690 19.860 20.040 20.180 20.250 20.310 20.420 20.500 20.600 20.700 20.840 463 0.0000 25.551 100.00 53.170 15.753 15.237 2.9525 0.60000 0.79000 1.1400 2.1400 2.9200 3.0800 3.0400 2.9100 2.8900 2.9700 3.3200 4.7700 8.0400 11.990 13.890 14.140 14.200 14.310 14.400 14.820 15.950 17.910 19.690 20.850 21.530 21.820 22.020 22.240 22.380 22.470 22.510 22.590 22.680 22.770 22.860 22.990 464 0.0000 18.017 100.00 61.836 12.125 12.128 2.5436 0.69000 0.59000 1.0200 1.9900 2.6300 2.7900 2.7000 2.5600 2.5100 2.5400 2.8100 3.9500 6.5800 9.7600 11.360 11.670 11.770 11.850 11.950 12.240 12.880 13.910 14.790 15.410 15.780 15.960 16.120 16.290 16.440 16.520 16.590 16.680 16.750 16.850 16.970 17.090 465 0.0000 50.902 100.00 54.768 12.218 10.178 2.3560 0.52000 0.51000 1.0400 1.9600 2.6700 2.8100 2.7300 2.5700 2.4400 2.4100 2.5600 3.3700 5.1900 7.1700 7.8400 7.6800 7.6500 7.7900 7.9200 8.3700 10.000 13.080 16.050 18.110 19.280 19.820 20.150 20.430 20.620 20.740 20.840 20.940 21.060 21.200 21.330 21.460 466 100.00 20.286 0.0000 28.381 7.2349 10.207 22.914 0.93000 0.68000 1.3100 6.2100 17.730 25.850 29.550 30.850 30.200 29.130 28.010 26.830 25.320 23.450 20.770 17.340 13.640 9.7900 6.3800 4.3400 3.4000 3.0000 2.6400 2.3700 2.2700 2.2300 2.2500 2.4700 2.8800 3.1700 3.0800 2.9000 2.6000 2.4400 2.6100 3.1900 467 100.00 58.207 0.0000 29.369 4.8858 5.5675 14.545 0.65000 0.57000 1.2200 5.4100 14.080 19.200 20.560 20.220 18.800 17.060 15.550 14.280 12.960 11.680 10.020 8.2000 6.5800 5.0000 3.5000 2.6100 2.3800 2.4900 2.4500 2.3200 2.2700 2.2700 2.3000 2.5300 2.9500 3.2500 3.1700 2.9700 2.6600 2.4700 2.6300 3.2200 468 100.00 90.306 0.0000 37.935 3.0483 2.4532 8.3644 0.51000 0.53000 1.1500 4.2300 10.050 12.970 13.110 12.110 10.560 8.8100 7.4000 6.2600 5.1800 4.3000 3.2800 2.3900 1.9600 1.7100 1.4200 1.3100 1.5100 1.9000 2.0900 2.0800 2.0800 2.0800 2.1100 2.3200 2.6900 2.9400 2.8700 2.7000 2.4300 2.2800 2.4100 2.9500 469 100.00 78.165 0.0000 37.762 3.5984 3.3603 9.9782 0.63000 0.63000 1.3300 4.5500 11.140 14.610 15.090 14.200 12.690 10.940 9.5200 8.3500 7.2400 6.2700 5.1300 4.0000 3.3000 2.7000 2.1000 1.7900 1.8500 2.1500 2.2400 2.2100 2.1800 2.1800 2.2100 2.4000 2.7600 3.0000 2.9300 2.7400 2.5000 2.3700 2.4800 2.9800 470 100.00 100.00 0.0000 30.486 3.0758 2.1241 8.5785 0.46000 0.53000 1.2400 4.5300 10.860 14.080 14.000 12.670 10.740 8.6300 6.9400 5.6200 4.4100 3.4700 2.4000 1.5500 1.2800 1.2300 1.1400 1.1500 1.4500 1.9400 2.1900 2.2000 2.2200 2.2200 2.2600 2.4700 2.8900 3.1500 3.0800 2.8800 2.6000 2.4300 2.5700 3.1400 471 100.00 25.821 27.648 41.795 4.8335 7.1622 11.933 0.93000 0.75000 1.3100 4.3300 10.310 13.880 15.190 15.540 15.170 14.720 14.370 14.510 15.080 15.380 14.350 12.280 9.9300 7.3800 5.0300 3.5900 2.9500 2.7000 2.4500 2.2200 2.1700 2.1300 2.1500 2.3200 2.6600 2.9000 2.8300 2.6600 2.4700 2.2800 2.4000 2.9200 472 100.00 0.0000 18.370 40.871 6.4088 10.231 17.550 0.93000 0.72000 1.3300 5.1600 13.380 18.890 21.480 22.630 22.680 22.540 22.400 22.640 23.250 23.270 21.580 18.420 14.590 10.490 6.8800 4.6900 3.5900 3.0300 2.5800 2.2900 2.1800 2.1500 2.1500 2.3400 2.6900 2.9200 2.8500 2.6900 2.4500 2.2900 2.4300 2.8800 473 100.00 0.0000 8.3446 31.285 7.8144 12.201 23.705 1.0200 0.71000 1.4000 6.3700 17.420 25.040 29.000 30.930 31.090 30.940 30.600 30.320 29.900 28.650 25.870 21.730 16.980 12.050 7.7900 5.2000 3.9300 3.2600 2.7400 2.4000 2.2800 2.2400 2.2600 2.4700 2.8900 3.1700 3.0900 2.8900 2.6100 2.4100 2.5900 3.1800 474 82.431 0.0000 8.5991 35.641 10.302 14.238 22.948 1.2100 0.97000 1.5400 6.2900 17.540 25.180 28.540 29.890 29.800 29.450 29.070 28.810 28.630 27.850 25.770 22.470 18.580 14.420 10.720 8.4200 7.2400 6.6100 6.1100 5.7700 5.6500 5.6100 5.6300 5.8700 6.2900 6.5600 6.4800 6.2900 6.0100 5.8000 5.9400 6.5100 475 96.907 8.8063 0.0000 38.939 6.9764 10.084 20.405 0.79000 0.64000 1.3100 5.7700 15.710 22.470 25.660 26.990 26.790 26.300 25.660 24.900 23.830 22.330 20.110 17.090 13.640 9.9800 6.7200 4.7100 3.7300 3.2500 2.8300 2.5600 2.4600 2.4300 2.4500 2.6400 3.0100 3.2700 3.2000 3.0400 2.7700 2.6200 2.7600 3.2500 476 100.00 36.973 20.035 36.207 5.0855 7.0416 13.572 0.63000 0.60000 1.2500 4.6400 11.950 16.400 17.870 18.070 17.400 16.550 15.840 15.520 15.500 15.210 13.830 11.670 9.4000 6.9900 4.7500 3.4000 2.8700 2.7100 2.5100 2.3200 2.2400 2.2200 2.2300 2.4300 2.8400 3.0900 3.0100 2.8300 2.5400 2.3800 2.5000 3.0300 477 100.00 38.507 0.0000 40.197 4.8364 6.2537 14.489 0.69000 0.59000 1.1800 4.8500 12.760 17.720 19.480 19.680 18.840 17.730 16.720 15.790 14.740 13.590 12.020 10.050 8.0400 5.9500 4.0200 2.8800 2.4200 2.2900 2.1300 1.9800 1.9200 1.9100 1.9300 2.0900 2.4300 2.6400 2.5800 2.4200 2.2000 2.0600 2.2100 2.6600 478 100.00 18.753 0.0000 46.348 5.2568 7.3516 15.317 0.83000 0.80000 1.3200 4.9100 12.610 17.630 19.730 20.380 19.990 19.340 18.670 18.000 17.140 16.030 14.430 12.300 9.8700 7.2700 4.9000 3.4500 2.7800 2.4800 2.2200 2.0200 1.9600 1.9300 1.9500 2.1000 2.4100 2.6000 2.5500 2.4100 2.2100 2.0900 2.2400 2.6700 479 86.109 32.026 20.872 46.095 5.6618 7.2027 11.209 0.59000 0.59000 1.1900 4.2600 10.160 13.570 14.610 14.730 14.240 13.680 13.190 13.040 13.160 13.100 12.200 10.680 9.0100 7.2200 5.5300 4.5100 4.1000 4.0500 3.9300 3.8000 3.7700 3.7700 3.7900 3.9600 4.2900 4.5100 4.4500 4.3000 4.1000 3.9700 4.0900 4.5100 480 87.428 50.623 30.580 31.675 6.1853 7.3258 11.598 0.69000 0.75000 1.3100 4.6900 11.230 14.880 15.690 15.440 14.620 13.630 12.890 12.680 12.960 13.090 12.020 10.280 8.6400 7.0100 5.4100 4.4900 4.3400 4.6400 4.7500 4.7100 4.7100 4.7100 4.7500 5.0000 5.4400 5.7500 5.6600 5.4400 5.1300 4.9000 5.0400 5.6500 481 83.868 33.684 21.119 29.940 7.9959 10.054 15.468 0.72000 0.73000 1.3000 5.2600 13.640 18.550 20.160 20.350 19.730 18.920 18.260 18.100 18.290 18.250 16.910 14.710 12.380 9.9500 7.6600 6.2800 5.7900 5.8100 5.7200 5.5700 5.5600 5.5500 5.6000 5.8700 6.3600 6.6700 6.5800 6.3700 6.0600 5.8200 5.9500 6.6200 482 68.827 28.322 10.831 37.894 10.064 11.641 16.684 0.92000 0.80000 1.3800 5.6300 14.900 20.410 21.980 22.040 21.310 20.360 19.580 19.100 18.800 18.330 17.110 15.290 13.400 11.400 9.4700 8.3200 7.9700 8.1100 8.1800 8.1500 8.1700 8.1900 8.2400 8.4700 8.9200 9.1900 9.1300 8.9400 8.6700 8.4700 8.6000 9.1400 483 80.335 19.838 0.0000 42.767 8.4643 10.530 18.089 1.0300 0.77000 1.4300 5.6500 15.290 21.320 23.570 24.060 23.420 22.580 21.750 20.960 20.020 18.900 17.330 15.230 12.930 10.450 8.1400 6.7100 6.0600 5.8200 5.5800 5.3900 5.3300 5.3000 5.3300 5.5400 5.9000 6.1500 6.1000 5.9200 5.6800 5.5300 5.6300 6.1500 484 64.278 18.957 11.177 30.587 13.351 15.845 21.098 1.0900 0.81000 1.4300 6.6300 17.940 24.850 27.100 27.550 27.000 26.220 25.540 25.250 25.180 24.820 23.390 21.050 18.500 15.760 13.200 11.630 11.030 11.010 10.920 10.800 10.820 10.830 10.900 11.200 11.710 12.020 11.970 11.770 11.460 11.240 11.370 12.110 485 72.198 8.2838 0.0000 31.670 12.188 15.468 25.547 1.1700 0.76000 1.4700 6.7800 19.790 28.790 32.490 33.800 33.370 32.590 31.730 30.780 29.570 27.960 25.640 22.530 19.040 15.340 11.990 9.9300 8.9400 8.4800 8.0800 7.8000 7.7100 7.6800 7.7100 7.9700 8.4300 8.7100 8.6400 8.4600 8.1600 7.9800 8.0900 8.7300 486 86.072 26.555 0.0000 32.155 8.6986 10.923 21.201 0.99000 0.61000 1.3900 6.1600 17.640 25.200 27.990 28.570 27.610 26.340 25.120 23.970 22.640 21.110 19.010 16.350 13.540 10.620 7.9100 6.2400 5.5600 5.3400 5.1200 4.8900 4.8200 4.7900 4.8300 5.0600 5.5200 5.7800 5.7200 5.5000 5.2300 4.9800 5.1800 5.7000 487 77.494 0.0000 0.0000 45.446 8.8604 11.681 19.173 0.80000 0.68000 1.3400 5.5000 15.030 21.360 24.080 25.090 24.960 24.610 24.140 23.600 22.830 21.700 20.040 17.660 14.840 11.780 9.0100 7.2700 6.3800 5.9200 5.5500 5.3000 5.2200 5.2000 5.2300 5.4100 5.7500 5.9600 5.9100 5.7700 5.5700 5.4200 5.5600 6.0200 488 63.282 0.0000 6.0774 36.306 14.333 17.880 24.320 1.1600 0.91000 1.4200 6.7200 19.160 27.380 30.560 31.610 31.350 30.940 30.460 30.160 29.920 29.210 27.530 24.850 21.640 18.160 15.000 13.010 11.950 11.390 10.920 10.620 10.500 10.470 10.510 10.760 11.210 11.490 11.430 11.250 10.960 10.780 10.920 11.480 489 49.395 0.0000 0.0000 29.445 20.579 24.297 32.136 1.3700 1.0300 1.6800 8.1400 24.750 36.540 40.820 42.110 41.640 40.880 40.030 39.140 38.020 36.510 34.370 31.370 27.960 24.310 21.040 19.010 17.900 17.330 16.840 16.520 16.410 16.380 16.440 16.730 17.200 17.470 17.410 17.230 16.950 16.770 16.880 17.510 490 100.00 77.360 27.428 34.362 3.2083 3.2625 7.8210 0.37000 0.56000 1.1700 3.9100 8.7100 11.170 11.490 10.900 9.8500 8.6700 7.7000 7.0800 6.6400 6.2000 5.2300 4.1200 3.3800 2.7400 2.1100 1.7700 1.8400 2.1300 2.2300 2.1800 2.1700 2.1700 2.1900 2.3900 2.7500 3.0200 2.9300 2.7800 2.5000 2.3400 2.4800 2.9800 491 100.00 69.127 0.0000 48.932 3.3168 3.4127 8.9243 0.55000 0.63000 1.1400 4.0700 9.5200 12.520 13.000 12.490 11.390 10.100 9.0400 8.1500 7.2600 6.4800 5.4900 4.4500 3.6800 2.9600 2.2600 1.8400 1.8200 1.9900 2.0200 1.9700 1.9400 1.9300 1.9600 2.1100 2.4000 2.5900 2.5500 2.4000 2.2000 2.0600 2.2000 2.6100 492 86.191 39.368 9.4137 45.773 5.8870 7.0410 12.383 0.83000 0.77000 1.3900 4.7000 11.520 15.530 16.620 16.570 15.840 14.940 14.170 13.600 13.130 12.550 11.450 9.9500 8.4500 6.8700 5.3400 4.4100 4.0900 4.1200 4.0600 3.9700 3.9400 3.9400 3.9600 4.1500 4.4800 4.6900 4.6300 4.4800 4.2500 4.1100 4.2500 4.7000 493 100.00 63.564 0.0000 38.510 4.0454 4.4247 11.561 0.69000 0.55000 1.1600 4.7400 11.710 15.640 16.540 16.070 14.840 13.390 12.130 11.060 9.9700 8.9600 7.6400 6.2200 5.0500 3.9200 2.8300 2.1800 2.0700 2.2200 2.2200 2.1100 2.0800 2.0700 2.1100 2.3000 2.6700 2.9400 2.8600 2.6900 2.4300 2.2700 2.3900 2.9300 494 100.00 57.584 20.263 33.776 4.1344 5.0162 10.907 0.57000 0.58000 1.1800 4.4300 10.680 14.190 15.080 14.880 13.910 12.800 11.890 11.310 10.890 10.420 9.1800 7.5800 6.1300 4.6800 3.3100 2.4900 2.2900 2.3800 2.3400 2.2300 2.1900 2.1800 2.1900 2.4000 2.7900 3.0500 3.0000 2.8100 2.5300 2.3500 2.4900 3.0500 495 82.944 55.154 16.105 39.208 5.8168 6.3188 10.914 0.45000 0.60000 1.1600 4.4900 10.810 14.370 15.120 14.770 13.840 12.770 11.900 11.330 10.940 10.520 9.4900 8.1400 6.9500 5.7900 4.6600 4.0100 4.0100 4.4000 4.6500 4.7000 4.7500 4.7800 4.8200 5.0400 5.4300 5.6700 5.6100 5.4500 5.2100 5.0500 5.2000 5.7100 496 100.00 69.240 44.584 29.474 3.6045 4.1851 7.8694 0.63000 0.65000 1.2600 3.8900 8.3900 10.710 11.060 10.630 9.8200 8.8800 8.1900 8.0000 8.2200 8.2900 7.3200 5.9100 4.8000 3.8100 2.8200 2.2600 2.2500 2.5200 2.5900 2.5000 2.4600 2.4600 2.4900 2.7000 3.1400 3.4300 3.3300 3.1300 2.8200 2.6400 2.7900 3.3600 497 65.278 33.074 0.0000 45.114 9.2345 10.082 14.971 0.83000 0.66000 1.2700 5.5000 14.040 18.830 20.100 19.940 19.110 18.130 17.240 16.470 15.680 14.850 13.750 12.390 11.060 9.6500 8.2700 7.4600 7.3000 7.5900 7.8000 7.8400 7.9100 7.9500 8.0200 8.2400 8.6200 8.8600 8.8300 8.6900 8.4700 8.3200 8.4000 8.9200 498 65.148 49.152 8.8468 36.046 9.6178 9.6839 14.632 0.85000 0.71000 1.3300 5.4900 14.510 19.460 20.330 19.790 18.550 17.120 15.970 15.110 14.370 13.650 12.460 11.020 9.8100 8.6500 7.4800 6.8800 7.1300 8.0600 8.7800 9.1400 9.3500 9.4400 9.5200 9.8000 10.250 10.550 10.480 10.290 10.030 9.8100 9.9400 10.530 499 82.016 60.154 0.0000 33.676 6.6262 6.6356 13.533 0.57000 0.61000 1.2500 5.2800 13.680 18.410 19.360 18.710 17.300 15.630 14.220 13.060 11.880 10.820 9.4500 7.9900 6.8200 5.7300 4.6500 4.0500 4.1900 4.8000 5.2100 5.3700 5.4700 5.5100 5.5800 5.8300 6.2800 6.5700 6.4900 6.3100 6.0100 5.8100 5.9400 6.5400 500 100.00 53.087 0.0000 48.161 3.7406 4.4347 10.479 0.49000 0.52000 1.1300 4.2100 10.150 13.550 14.510 14.360 13.490 12.440 11.540 10.740 9.9000 9.0500 7.9300 6.6200 5.3900 4.1300 2.9400 2.2200 2.0000 2.0300 1.9700 1.8600 1.8300 1.8200 1.8400 1.9900 2.2700 2.4700 2.4200 2.2900 2.0900 1.9800 2.0900 2.4900 501 71.740 40.253 0.0000 33.513 9.3738 10.237 17.579 0.91000 0.69000 1.2900 5.8900 16.060 22.330 23.990 23.800 22.600 21.150 19.870 18.750 17.620 16.450 14.890 13.060 11.300 9.5400 7.8200 6.8500 6.6900 7.1100 7.3700 7.4600 7.5500 7.5800 7.6400 7.9100 8.3500 8.6300 8.5700 8.3900 8.0900 7.9100 8.0300 8.6200 502 67.105 25.527 0.0000 29.428 12.811 14.610 23.007 1.0100 0.71000 1.3400 6.7000 19.540 27.840 30.510 30.770 29.740 28.370 27.140 25.990 24.730 23.340 21.450 19.060 16.630 14.050 11.650 10.200 9.7600 9.9500 10.050 10.030 10.090 10.110 10.180 10.480 11.000 11.330 11.250 11.050 10.720 10.470 10.630 11.280 503 54.737 34.869 0.0000 30.855 14.617 15.118 21.724 1.00000 0.91000 1.4400 6.9500 19.970 27.900 29.690 29.240 27.740 26.030 24.530 23.280 22.020 20.800 19.200 17.350 15.660 13.970 12.320 11.410 11.540 12.480 13.210 13.580 13.810 13.890 14.000 14.300 14.800 15.070 15.010 14.800 14.510 14.290 14.400 15.050 504 100.00 83.897 44.441 41.525 2.5028 2.4659 5.3047 0.39000 0.49000 1.0500 3.0900 6.2600 7.6800 7.8100 7.3100 6.6200 5.7800 5.1400 4.8100 4.6600 4.4800 3.7400 2.8900 2.3900 2.0000 1.6200 1.4200 1.5500 1.8600 2.0000 1.9800 1.9800 1.9800 2.0000 2.1800 2.5300 2.7500 2.6900 2.5200 2.3100 2.1800 2.2700 2.7700 505 100.00 90.218 35.212 34.492 2.8526 2.4990 6.3047 0.50000 0.65000 1.2400 3.6300 7.6800 9.6000 9.6300 8.9100 7.8600 6.6900 5.7500 5.1500 4.7100 4.3000 3.4000 2.5000 2.0800 1.8400 1.5800 1.4700 1.7100 2.1400 2.3300 2.3200 2.3200 2.3200 2.3600 2.5600 2.9500 3.2100 3.1300 2.9500 2.6800 2.5000 2.6600 3.1800 506 100.00 86.358 13.175 46.260 2.7492 2.4495 6.9195 0.51000 0.57000 1.1600 3.7200 8.1800 10.430 10.560 9.8400 8.7200 7.4300 6.4000 5.6000 4.8900 4.2800 3.4500 2.6600 2.2100 1.9000 1.5700 1.4200 1.5400 1.8300 1.9600 1.9400 1.9300 1.9300 1.9400 2.1100 2.4100 2.6000 2.5400 2.4100 2.2200 2.1000 2.2100 2.6100 507 98.503 100.00 41.795 42.319 2.2533 1.7931 4.6350 0.45000 0.54000 1.0700 3.0900 6.0300 7.2800 7.2100 6.5800 5.7400 4.8100 4.0600 3.5400 3.1600 2.7900 2.0900 1.4500 1.2300 1.1900 1.1200 1.1300 1.3800 1.7900 2.0000 2.0200 2.0400 2.0400 2.0700 2.2400 2.5600 2.7900 2.7300 2.5700 2.3500 2.2200 2.3600 2.8000 508 95.142 91.518 22.938 28.446 3.6225 2.8846 8.3151 0.56000 0.47000 1.2300 4.3500 10.150 12.950 13.000 11.950 10.430 8.7000 7.3200 6.3400 5.5000 4.7800 3.6400 2.5900 2.1300 1.9000 1.6300 1.5500 1.9300 2.6100 2.9900 3.0700 3.1100 3.1200 3.1600 3.4100 3.9000 4.2100 4.1000 3.8800 3.5500 3.3100 3.4500 4.0900 509 76.545 65.202 17.899 40.429 5.8385 5.6163 9.5763 0.53000 0.46000 1.1600 4.2900 10.260 13.330 13.700 13.110 12.070 10.860 9.8900 9.2500 8.7500 8.2800 7.3500 6.2300 5.4200 4.7200 4.0000 3.6500 3.9500 4.7400 5.3100 5.5800 5.7400 5.8000 5.8700 6.1100 6.5200 6.7600 6.7200 6.5400 6.3200 6.1200 6.2700 6.7800 510 80.613 71.719 0.0000 32.533 6.5890 5.9183 12.960 0.74000 0.76000 1.3500 5.4400 14.060 18.830 19.310 18.230 16.420 14.380 12.710 11.360 10.060 8.9700 7.6000 6.2800 5.3900 4.6700 3.9100 3.5600 3.9600 4.9300 5.6200 5.9000 6.0700 6.1300 6.2100 6.4700 6.9400 7.2400 7.1500 6.9400 6.6400 6.4100 6.5700 7.1500 511 66.194 69.359 17.770 29.733 7.9635 6.9297 10.976 0.53000 0.61000 1.2400 4.9500 12.180 15.810 16.060 15.130 13.760 12.180 10.960 10.130 9.5000 8.9500 7.8600 6.6500 5.8700 5.2700 4.6400 4.4100 5.1500 6.7500 8.0900 8.8500 9.2400 9.4100 9.5600 9.8800 10.390 10.700 10.630 10.450 10.140 9.9300 10.060 10.680 512 62.819 45.761 0.0000 49.507 7.6772 7.7379 11.709 0.60000 0.73000 1.2800 4.7400 11.800 15.570 16.230 15.790 14.830 13.760 12.850 12.080 11.340 10.650 9.7500 8.7300 7.8600 7.0100 6.1500 5.6900 5.8500 6.4600 6.9400 7.2000 7.3300 7.4000 7.4800 7.6900 8.0200 8.2200 8.1800 8.0800 7.8900 7.7800 7.8800 8.3500 513 78.999 81.649 6.1468 39.156 5.3096 4.3281 9.4202 0.59000 0.50000 1.2000 4.6200 11.140 14.330 14.390 13.350 11.810 10.110 8.7300 7.7000 6.7100 5.9000 4.8800 3.9100 3.3900 3.0600 2.7000 2.5900 3.1000 4.1800 5.0000 5.3700 5.5700 5.6400 5.7300 5.9600 6.3900 6.6500 6.5900 6.3900 6.1200 5.9500 6.0300 6.5400 514 57.199 53.315 9.9441 29.141 11.575 10.953 15.187 0.82000 0.74000 1.3000 5.8000 15.390 20.560 21.310 20.550 19.170 17.600 16.320 15.420 14.680 14.010 12.800 11.390 10.280 9.3100 8.3100 7.8700 8.5100 10.110 11.480 12.250 12.670 12.870 13.040 13.370 13.900 14.250 14.170 14.000 13.710 13.510 13.640 14.330 515 66.199 53.846 0.0000 28.412 10.406 10.113 16.965 0.91000 0.67000 1.3700 6.3900 17.080 22.960 23.990 23.220 21.590 19.720 18.130 16.820 15.530 14.350 12.860 11.230 9.9400 8.7300 7.5000 6.8700 7.2600 8.4500 9.3700 9.8300 10.090 10.230 10.340 10.710 11.260 11.590 11.530 11.320 10.970 10.740 10.890 11.550 516 73.126 100.00 0.0000 40.050 4.6601 2.9818 7.6009 0.49000 0.57000 1.1500 4.2900 10.060 12.690 12.380 11.080 9.4100 7.5900 6.1600 5.0300 3.9800 3.2100 2.3000 1.5900 1.3700 1.3700 1.3200 1.4400 2.1800 3.6400 4.8600 5.5600 5.9200 6.0700 6.1900 6.4400 6.8500 7.1100 7.0700 6.9000 6.6700 6.5000 6.6000 7.1500 517 88.676 100.00 37.334 30.217 3.5853 2.5430 6.2204 0.41000 0.49000 1.0900 3.6400 8.0100 9.9800 9.8200 8.9400 7.7100 6.3700 5.3000 4.5900 4.0000 3.4800 2.5300 1.6500 1.3700 1.3400 1.2600 1.3200 1.8800 2.9200 3.6500 3.9600 4.1100 4.1800 4.2500 4.5100 5.0000 5.2800 5.1900 5.0100 4.6700 4.4600 4.5900 5.1800 518 78.865 100.00 28.178 43.346 3.9270 2.7377 5.8183 0.64000 0.68000 1.3200 3.6700 7.6800 9.3600 9.2000 8.3100 7.1800 5.9500 4.9700 4.2700 3.6700 3.1700 2.3800 1.6900 1.4600 1.4500 1.4000 1.5000 2.1100 3.2900 4.2300 4.7100 4.9500 5.0500 5.1300 5.3700 5.7500 6.0000 5.9500 5.7900 5.5600 5.3800 5.5000 6.0100 519 90.806 100.00 0.0000 42.060 3.1350 2.1372 7.0062 0.31000 0.53000 1.1300 3.9900 9.1000 11.460 11.360 10.240 8.7400 7.0800 5.7500 4.6800 3.7000 2.9600 2.1000 1.4300 1.2000 1.1600 1.1100 1.1600 1.5400 2.2500 2.7200 2.9100 3.0100 3.0500 3.1000 3.3000 3.6700 3.9200 3.8600 3.7000 3.4500 3.2800 3.3900 3.9200 520 76.956 87.449 0.0000 49.807 4.1868 3.2569 7.1459 0.47000 0.52000 1.1800 3.8800 8.7900 11.090 11.050 10.160 8.9200 7.5700 6.4700 5.5800 4.7700 4.1200 3.3600 2.6800 2.3600 2.2000 2.0100 1.9900 2.4400 3.3300 4.0300 4.4000 4.5900 4.6900 4.7500 4.9400 5.2700 5.4700 5.4300 5.3100 5.1300 5.0100 5.1100 5.4900 521 76.916 100.00 0.0000 28.233 5.3428 3.3394 9.2292 0.64000 0.51000 1.2000 4.8600 12.020 15.460 15.100 13.520 11.460 9.2100 7.4400 6.0300 4.7300 3.7500 2.6200 1.7000 1.4100 1.4000 1.3300 1.4700 2.3600 4.0800 5.4900 6.2800 6.6800 6.8600 6.9900 7.3100 7.8600 8.2000 8.1400 7.9100 7.5900 7.3500 7.5000 8.1300 522 59.036 83.465 0.0000 37.860 7.6308 5.5502 9.6959 0.64000 0.53000 1.1300 4.7800 11.870 15.220 15.020 13.740 12.050 10.240 8.7900 7.6300 6.5600 5.7100 4.7200 3.8500 3.4600 3.3300 3.1400 3.2200 4.2900 6.4600 8.3600 9.5400 10.160 10.440 10.620 10.950 11.410 11.710 11.670 11.520 11.290 11.110 11.260 11.800 523 65.273 77.103 14.410 41.599 6.2275 5.0487 8.4885 0.47000 0.58000 1.2300 4.2400 9.9700 12.730 12.730 11.820 10.600 9.2100 8.1000 7.3100 6.6300 6.0700 5.1900 4.3300 3.8500 3.5400 3.2000 3.1400 3.8400 5.2900 6.5000 7.1900 7.5500 7.7200 7.8400 8.1000 8.5200 8.7900 8.7400 8.5800 8.3600 8.1900 8.3200 8.8900 524 65.570 76.495 0.0000 30.851 8.2498 6.5417 12.422 0.72000 0.59000 1.3100 5.5500 14.400 18.860 18.970 17.530 15.560 13.400 11.650 10.280 8.9800 7.9600 6.6900 5.5400 4.9100 4.5000 4.0400 3.9400 4.8400 6.7300 8.3600 9.2500 9.7400 9.9400 10.090 10.420 10.930 11.260 11.190 11.000 10.700 10.440 10.600 11.240 525 81.351 91.344 2.3903 32.658 4.9943 3.5572 9.4333 0.60000 0.65000 1.2800 4.7900 11.760 15.170 15.050 13.660 11.780 9.7100 8.0400 6.7500 5.5500 4.6300 3.5200 2.5800 2.2000 2.0600 1.8600 1.8700 2.5200 3.7800 4.7500 5.2200 5.4800 5.5900 5.6700 5.9500 6.4100 6.7100 6.6200 6.4200 6.1400 5.9300 6.0600 6.6600 526 50.034 64.861 0.0000 35.913 10.695 8.9803 13.065 0.73000 0.55000 1.2300 5.5000 14.440 18.940 19.150 18.000 16.380 14.600 13.140 11.980 10.890 9.9900 8.9000 7.8300 7.2000 6.7700 6.3000 6.2500 7.2700 9.4000 11.290 12.450 13.090 13.360 13.560 13.900 14.360 14.650 14.630 14.480 14.250 14.090 14.230 14.790 527 61.631 100.00 0.0000 33.740 6.8584 4.1367 8.9118 0.45000 0.57000 1.2400 4.9100 12.030 15.250 14.670 12.980 10.930 8.7700 7.0600 5.7400 4.5400 3.6300 2.5800 1.7400 1.4900 1.5200 1.5000 1.7200 2.9700 5.5100 7.8400 9.2900 10.050 10.360 10.560 10.910 11.440 11.730 11.700 11.510 11.210 11.020 11.150 11.700 528 49.473 100.00 0.0000 29.431 8.9625 5.2063 9.5011 0.65000 0.60000 1.2000 5.1600 12.970 16.380 15.670 13.800 11.630 9.3300 7.5000 6.1000 4.8000 3.8300 2.7000 1.7800 1.5200 1.5800 1.6000 1.9300 3.6800 7.3100 10.800 13.120 14.370 14.920 15.260 15.690 16.290 16.630 16.630 16.450 16.180 16.010 16.140 16.840 529 100.00 4.8375 47.465 31.735 5.9799 10.684 12.745 0.89000 0.67000 1.3200 4.2700 10.030 13.450 14.960 15.620 15.760 15.840 16.200 17.780 21.110 24.170 23.660 20.340 16.100 11.570 7.5900 5.1800 4.0000 3.3900 2.9000 2.5600 2.4400 2.4100 2.4100 2.6200 3.0400 3.3200 3.2400 3.0300 2.7600 2.5800 2.6900 3.2700 530 100.00 0.0000 32.493 35.061 6.0276 10.396 15.554 0.53000 0.60000 1.1500 4.5700 11.760 16.420 18.580 19.650 19.790 19.830 20.000 20.930 22.910 24.330 23.050 19.600 15.320 10.820 6.9300 4.6000 3.4600 2.8800 2.4300 2.1400 2.0300 2.0000 2.0100 2.1900 2.5400 2.7800 2.7200 2.5500 2.3000 2.1800 2.3100 2.8800 531 100.00 21.671 48.503 32.950 4.9962 8.3479 10.575 0.70000 0.67000 1.2600 3.9700 8.8800 11.750 12.830 13.170 13.080 12.930 13.010 14.080 16.420 18.510 17.890 15.330 12.210 8.9000 5.9200 4.1200 3.3200 2.9900 2.6700 2.4100 2.3200 2.3000 2.3100 2.5100 2.9100 3.1700 3.0800 2.9200 2.6300 2.4500 2.6000 3.1500 532 91.119 33.707 41.603 34.117 5.5437 7.8381 10.413 0.53000 0.51000 1.1800 4.0600 9.3200 12.190 13.190 13.310 13.000 12.580 12.400 12.930 14.270 15.380 14.650 12.690 10.480 8.1000 5.9000 4.5800 4.0400 3.9300 3.7600 3.5700 3.5100 3.5000 3.5300 3.7500 4.1700 4.4500 4.3800 4.1800 3.8900 3.7200 3.8500 4.4300 533 100.00 25.739 47.289 43.281 4.0263 6.4245 8.4272 0.46000 0.57000 1.1500 3.4900 7.4300 9.6400 10.420 10.590 10.420 10.220 10.210 10.880 12.430 13.790 13.300 11.480 9.2500 6.8400 4.6400 3.3100 2.7100 2.4800 2.2600 2.0600 1.9900 1.9900 2.0000 2.1500 2.4700 2.6900 2.6400 2.4800 2.2700 2.1500 2.2500 2.7100 534 100.00 20.693 32.761 32.657 5.6007 8.8604 13.930 0.67000 0.64000 1.2700 4.7500 11.540 15.610 17.320 17.840 17.710 17.370 17.190 17.690 18.950 19.810 18.590 15.850 12.620 9.2000 6.1000 4.2100 3.3600 2.9900 2.6400 2.3700 2.2800 2.2500 2.2700 2.4900 2.9000 3.1800 3.1100 2.9000 2.6200 2.4200 2.6000 3.1200 535 73.745 10.260 30.640 42.306 8.5046 11.381 13.127 0.64000 0.70000 1.2500 4.5700 11.060 14.830 16.210 16.610 16.480 16.280 16.260 16.860 18.280 19.500 18.970 17.040 14.630 11.930 9.4600 7.9300 7.1900 6.8500 6.5400 6.3200 6.2500 6.2400 6.2800 6.4700 6.8600 7.0800 7.0300 6.8700 6.6500 6.5000 6.6200 7.1300 536 87.985 0.0000 34.487 43.110 6.6051 10.155 12.582 0.66000 0.63000 1.1900 4.2300 10.090 13.610 15.050 15.700 15.810 15.840 16.020 16.920 18.760 20.260 19.670 17.340 14.260 10.860 7.8300 5.9300 4.9700 4.4500 4.0600 3.7800 3.6900 3.6700 3.7000 3.8900 4.2500 4.4600 4.4000 4.2600 4.0200 3.8800 4.0200 4.5100 537 72.276 0.0000 18.568 31.335 12.213 16.618 21.543 1.2000 0.82000 1.3900 6.1100 16.690 23.470 26.310 27.460 27.570 27.490 27.480 28.020 29.220 29.870 28.460 25.280 21.380 17.190 13.430 11.090 9.8600 9.2000 8.6700 8.3100 8.2000 8.1600 8.2000 8.4800 8.9700 9.2900 9.2200 9.0100 8.7000 8.4900 8.6200 9.2800 538 80.775 0.0000 18.763 42.558 8.7885 12.281 17.178 0.76000 0.72000 1.2400 5.1100 13.660 19.040 21.220 22.030 21.970 21.790 21.640 21.940 22.710 23.060 21.900 19.380 16.250 12.790 9.6800 7.7100 6.6800 6.1400 5.7100 5.4000 5.3100 5.2700 5.2900 5.4900 5.8700 6.1100 6.0500 5.8700 5.6300 5.4400 5.5800 6.0700 539 81.994 0.0000 37.226 31.730 9.2596 13.966 15.475 0.79000 0.72000 1.2900 4.8500 12.110 16.500 18.310 19.110 19.320 19.460 19.800 21.240 24.210 26.840 26.330 23.260 19.250 14.910 11.080 8.7100 7.4900 6.8400 6.3200 5.9700 5.8500 5.8100 5.8500 6.1100 6.5700 6.8700 6.8000 6.6100 6.2800 6.0700 6.2400 6.8500 540 81.381 17.736 35.472 29.556 8.7633 12.214 14.703 0.77000 0.71000 1.3500 4.9600 12.200 16.550 18.150 18.620 18.460 18.170 18.110 18.940 20.910 22.620 21.840 19.220 16.060 12.700 9.6500 7.8000 6.9700 6.6600 6.3700 6.1200 6.0600 6.0300 6.0700 6.3200 6.7800 7.0800 6.9900 6.7900 6.5100 6.2800 6.4100 7.0400 541 92.459 45.784 43.522 48.585 3.6935 4.8083 6.7833 0.58000 0.53000 1.1300 3.2800 6.7300 8.4800 8.9200 8.8100 8.4200 7.9600 7.6800 7.8500 8.4800 8.9900 8.4700 7.3100 6.1100 4.8500 3.6400 2.9100 2.7000 2.7300 2.6900 2.6000 2.5800 2.5700 2.6000 2.7500 3.0500 3.2400 3.1900 3.0600 2.8600 2.7500 2.8900 3.3000 542 87.324 48.450 48.613 33.167 5.4536 6.8833 8.4674 0.55000 0.60000 1.2300 3.8000 8.2200 10.500 11.050 10.910 10.430 9.9100 9.6200 10.020 11.210 12.230 11.650 10.070 8.4800 6.8400 5.2700 4.3400 4.1700 4.4000 4.4900 4.4300 4.4300 4.4300 4.4800 4.7200 5.1600 5.4400 5.3600 5.1600 4.8700 4.6700 4.8000 5.3700 543 100.00 43.701 42.090 39.770 3.7422 5.3666 8.2797 0.48000 0.53000 1.0600 3.5000 7.7500 10.030 10.730 10.720 10.350 9.8900 9.6200 9.8700 10.690 11.310 10.570 8.9700 7.2700 5.4700 3.7800 2.7700 2.4100 2.3500 2.2300 2.0800 2.0300 2.0100 2.0400 2.2200 2.5700 2.8100 2.7400 2.5800 2.3500 2.1900 2.3400 2.8200 544 100.00 61.122 49.061 34.378 3.2944 4.2313 6.8834 0.34000 0.53000 1.1200 3.4800 7.1300 8.9400 9.3100 9.0800 8.5300 7.8900 7.4900 7.5800 8.1900 8.6400 7.8700 6.4900 5.2600 4.0800 2.9200 2.2500 2.1200 2.2900 2.2800 2.1900 2.1500 2.1500 2.1700 2.3700 2.7800 3.0400 2.9600 2.7800 2.5100 2.3600 2.4900 3.0300 545 69.328 26.867 32.047 44.087 8.1540 9.8170 11.009 0.72000 0.64000 1.3000 4.3100 10.080 13.240 14.090 14.110 13.730 13.310 13.050 13.330 14.260 15.080 14.630 13.240 11.670 9.9400 8.2800 7.2900 6.9700 7.0800 7.1000 7.0500 7.0800 7.0800 7.1500 7.3700 7.7500 7.9900 7.9400 7.7900 7.5700 7.4100 7.5100 8.0200 546 88.992 36.660 51.277 45.057 4.8516 6.6166 7.6120 0.75000 0.70000 1.2400 3.5100 7.1800 9.1400 9.6300 9.6200 9.3400 9.0100 8.9000 9.4700 10.840 12.060 11.690 10.260 8.6500 6.9000 5.2400 4.2400 3.8800 3.8300 3.7300 3.6000 3.5500 3.5300 3.5600 3.7400 4.0900 4.3200 4.2300 4.0800 3.8600 3.7000 3.7900 4.3000 547 71.501 28.223 37.141 31.035 10.051 12.494 13.606 0.98000 0.95000 1.4000 4.9000 12.100 16.150 17.220 17.350 16.950 16.420 16.200 16.810 18.510 20.100 19.520 17.480 15.170 12.690 10.370 8.9700 8.5300 8.6600 8.6600 8.5800 8.5800 8.5800 8.6400 8.9100 9.4100 9.7100 9.6100 9.4200 9.0800 8.8400 9.0100 9.6000 548 60.613 0.0000 20.904 35.915 13.625 17.345 19.530 0.99000 0.80000 1.3800 5.8400 15.720 21.850 24.050 24.810 24.760 24.590 24.540 25.120 26.480 27.540 26.740 24.360 21.320 17.980 14.970 13.070 12.080 11.560 11.110 10.840 10.750 10.720 10.770 11.020 11.470 11.720 11.680 11.510 11.260 11.090 11.210 11.810 549 68.456 8.4434 14.205 45.863 9.5311 11.999 15.478 0.96000 0.69000 1.2800 5.3900 13.260 17.830 19.410 19.900 19.710 19.390 19.150 19.190 19.500 19.540 18.640 16.880 14.740 12.360 10.110 8.7000 7.9900 7.6600 7.3800 7.1700 7.1200 7.1100 7.1600 7.3600 7.7400 7.9600 7.9200 7.7800 7.5500 7.4100 7.5300 8.0400 550 50.148 0.22354 0.0000 42.523 15.060 17.670 22.537 1.2100 0.80000 1.3900 6.4800 18.320 25.990 28.610 29.340 29.000 28.500 27.970 27.420 26.740 25.830 24.510 22.590 20.340 17.820 15.510 14.060 13.280 12.880 12.550 12.340 12.290 12.280 12.330 12.560 12.930 13.140 13.100 12.980 12.800 12.670 12.810 13.330 551 54.876 0.0000 21.297 46.019 11.914 14.642 15.475 0.94000 0.73000 1.2900 5.1100 13.030 17.630 19.180 19.600 19.500 19.330 19.280 19.720 20.770 21.620 21.200 19.620 17.560 15.210 13.040 11.680 10.950 10.570 10.260 10.050 10.000 10.000 10.050 10.250 10.590 10.800 10.770 10.650 10.470 10.350 10.490 10.940 552 44.265 0.0000 16.636 30.532 19.935 23.698 23.903 1.4800 0.96000 1.5700 6.8800 19.330 27.120 29.710 30.390 30.240 29.950 29.840 30.420 31.900 33.100 32.450 30.230 27.400 24.300 21.490 19.780 18.860 18.370 17.980 17.710 17.650 17.650 17.730 18.020 18.480 18.730 18.700 18.550 18.330 18.190 18.320 18.950 553 100.00 86.949 82.058 36.585 2.1792 2.3114 3.0864 0.38000 0.43000 1.0500 2.4700 3.8800 4.3800 4.3200 4.0100 3.6500 3.2900 3.0800 3.2300 3.7600 4.1100 3.5600 2.7500 2.2600 1.9400 1.5800 1.4300 1.6000 1.9800 2.1300 2.1200 2.1200 2.1200 2.1600 2.3400 2.7000 2.9700 2.9000 2.7200 2.4600 2.3000 2.4300 2.9400 554 73.287 47.762 23.354 46.561 6.2258 6.7958 9.3478 0.46000 0.62000 1.1700 4.0200 9.3500 12.070 12.640 12.370 11.760 11.000 10.420 10.210 10.240 10.210 9.5300 8.4300 7.4400 6.4300 5.4200 4.8500 4.8700 5.2600 5.5000 5.5800 5.6500 5.6800 5.7400 5.9600 6.3200 6.5600 6.5000 6.3700 6.1500 6.0000 6.1200 6.5700 555 86.119 70.664 54.525 47.065 3.4938 3.6002 4.7594 0.48000 0.49000 1.0700 2.8900 5.4700 6.5500 6.6500 6.2900 5.8200 5.2900 4.9200 4.9100 5.2600 5.5200 5.0200 4.2400 3.6500 3.1600 2.6400 2.3900 2.5800 3.0700 3.3800 3.4900 3.5500 3.5800 3.6300 3.8200 4.1500 4.3800 4.3300 4.1800 3.9700 3.8300 3.9500 4.3700 556 77.708 55.586 45.621 41.472 5.7329 6.2984 7.5360 0.57000 0.70000 1.2300 3.6500 7.7900 9.7900 10.120 9.8500 9.3000 8.6900 8.2900 8.3800 9.0200 9.5600 9.0200 7.8900 6.8800 5.9000 4.9200 4.3900 4.5000 5.0400 5.3900 5.5300 5.6200 5.6500 5.7100 5.9200 6.3000 6.5400 6.4900 6.3300 6.0900 5.9200 6.0400 6.5400 557 76.521 63.312 49.741 29.334 6.2311 6.4348 7.5244 0.61000 0.49000 1.1700 3.7500 8.0000 9.9600 10.260 9.8900 9.2400 8.5300 8.0600 8.1900 8.9200 9.5600 8.8900 7.5800 6.5600 5.6300 4.7100 4.2400 4.6100 5.5800 6.2800 6.5900 6.7700 6.8500 6.9500 7.2500 7.7500 8.0600 8.0000 7.7900 7.4700 7.2400 7.4000 8.0400 558 86.245 68.515 42.996 34.231 4.5512 4.7114 7.2508 0.49000 0.54000 1.2200 3.6700 7.9100 9.9300 10.200 9.7500 9.0100 8.1500 7.5300 7.3500 7.5500 7.6800 6.8800 5.7300 4.8500 4.0900 3.3100 2.9100 3.1200 3.7400 4.1400 4.2700 4.3500 4.3900 4.4500 4.6900 5.1200 5.3900 5.3200 5.1300 4.8600 4.6600 4.8400 5.4000 559 60.946 48.459 30.653 39.439 9.1017 9.2580 10.433 0.54000 0.68000 1.1800 4.4200 10.560 13.650 14.140 13.720 12.970 12.140 11.530 11.420 11.800 12.150 11.540 10.360 9.3700 8.3900 7.4100 6.9300 7.2800 8.3500 9.1600 9.6000 9.8600 9.9600 10.070 10.330 10.760 11.020 10.990 10.830 10.580 10.420 10.530 11.040 560 100.00 66.882 64.641 41.460 2.6576 3.3048 4.5641 0.53000 0.54000 1.0600 2.8200 5.0400 6.0900 6.1800 5.9100 5.5200 5.1000 4.8400 5.0700 5.7900 6.4000 5.8500 4.8100 3.9500 3.1500 2.3600 1.9200 1.9100 2.1100 2.1600 2.0800 2.0600 2.0600 2.0600 2.2500 2.5900 2.8100 2.7400 2.5900 2.3600 2.2100 2.3500 2.7900 561 69.918 39.227 29.803 36.504 8.5909 9.7706 11.617 0.81000 0.60000 1.2300 4.4900 10.930 14.420 15.210 15.110 14.550 13.880 13.430 13.520 14.150 14.670 13.980 12.520 11.040 9.5000 7.9900 7.1200 7.0400 7.4800 7.7600 7.8600 7.9400 7.9800 8.0500 8.3300 8.8000 9.0800 9.0300 8.8500 8.5700 8.3800 8.4800 9.1000 562 100.00 78.249 74.599 28.812 2.5889 3.0209 3.9591 0.30000 0.38000 0.97000 2.6800 4.6600 5.4300 5.4200 5.1200 4.7200 4.2900 4.0500 4.3300 5.1600 5.8000 5.1700 4.0700 3.3100 2.7000 2.0700 1.7500 1.8600 2.2300 2.3600 2.3100 2.3000 2.2900 2.3100 2.5300 2.9700 3.2500 3.1600 2.9700 2.6600 2.4700 2.6200 3.1900 563 100.00 70.215 49.914 41.694 2.8483 3.3238 5.6877 0.49000 0.50000 1.0800 3.1300 6.2900 7.7700 7.9400 7.6200 7.0100 6.3700 5.9000 5.8500 6.1900 6.4100 5.7200 4.6500 3.8200 3.0600 2.3100 1.8800 1.8900 2.1200 2.1700 2.1000 2.0800 2.0800 2.0900 2.2800 2.6300 2.8700 2.8000 2.6000 2.4000 2.2200 2.3500 2.8700 564 38.852 27.725 0.0000 49.720 12.072 12.269 14.490 0.96000 0.71000 1.2300 5.3100 13.910 18.580 19.460 19.130 18.300 17.420 16.640 16.000 15.380 14.810 14.060 13.160 12.340 11.520 10.680 10.260 10.440 11.150 11.750 12.100 12.320 12.440 12.540 12.760 13.060 13.210 13.220 13.150 13.050 13.000 13.080 13.490 565 36.238 21.120 12.866 30.956 19.909 20.846 21.035 1.2100 0.89000 1.4300 6.7500 18.850 25.800 27.400 27.270 26.540 25.630 24.960 24.740 24.970 25.090 24.310 22.880 21.440 19.970 18.520 17.780 18.000 19.020 19.880 20.400 20.730 20.890 21.050 21.400 21.860 22.150 22.130 22.030 21.800 21.700 21.860 22.470 566 56.236 33.409 9.7727 39.384 11.763 12.465 15.720 0.79000 0.68000 1.2600 5.6700 14.760 19.830 20.960 20.740 19.930 18.920 18.140 17.610 17.250 16.850 15.870 14.470 13.150 11.790 10.460 9.7100 9.7600 10.420 10.930 11.180 11.360 11.450 11.550 11.820 12.250 12.510 12.470 12.330 12.100 11.960 12.050 12.590 567 50.189 26.780 11.887 31.071 16.114 17.328 20.868 1.2400 0.92000 1.5100 6.6900 18.760 25.960 27.670 27.470 26.460 25.250 24.290 23.790 23.620 23.360 22.170 20.310 18.470 16.590 14.760 13.730 13.710 14.470 15.050 15.340 15.520 15.600 15.690 16.000 16.460 16.760 16.680 16.490 16.220 16.010 16.140 16.760 568 44.527 14.313 6.7850 43.325 14.414 15.868 18.149 0.79000 0.70000 1.3100 5.8000 15.970 21.900 23.500 23.630 23.050 22.390 21.800 21.440 21.230 20.900 20.050 18.700 17.240 15.660 14.110 13.220 12.960 13.150 13.310 13.370 13.450 13.500 13.580 13.830 14.190 14.410 14.390 14.300 14.130 14.010 14.130 14.610 569 56.087 25.476 27.670 35.666 12.593 14.233 14.787 0.87000 0.76000 1.3400 5.2800 13.410 17.910 19.030 19.020 18.500 17.870 17.490 17.760 18.790 19.730 19.230 17.660 15.920 14.060 12.280 11.230 11.070 11.530 11.870 12.020 12.140 12.180 12.290 12.560 13.010 13.280 13.230 13.070 12.800 12.600 12.720 13.320 570 23.755 6.2742 0.0000 42.988 20.360 21.573 22.064 1.2000 0.82000 1.4300 6.7900 19.310 26.860 28.660 28.630 27.960 27.230 26.580 26.030 25.510 24.960 24.290 23.340 22.360 21.270 20.210 19.640 19.500 19.700 19.870 19.970 20.090 20.150 20.270 20.510 20.820 20.990 20.990 20.960 20.900 20.870 21.000 21.380 571 37.366 4.4753 0.0000 35.833 20.528 22.864 26.122 1.3200 0.89000 1.5500 7.6300 21.800 30.730 33.450 33.930 33.430 32.740 32.100 31.460 30.740 29.870 28.650 26.910 24.960 22.830 20.810 19.580 19.000 18.830 18.680 18.570 18.580 18.620 18.710 19.000 19.410 19.660 19.660 19.530 19.360 19.250 19.360 19.910 572 20.043 0.56954 0.0000 33.043 28.262 30.571 30.715 1.6700 1.00000 1.5900 8.2800 25.190 36.430 39.500 39.790 39.110 38.350 37.640 37.020 36.420 35.740 34.920 33.660 32.230 30.650 29.120 28.220 27.680 27.450 27.230 27.120 27.150 27.170 27.290 27.540 27.900 28.110 28.110 28.040 27.950 27.950 28.030 28.560 573 100.00 97.714 64.389 30.742 2.3533 1.9885 4.1378 0.30000 0.51000 1.0900 2.9200 5.3300 6.3200 6.2500 5.7500 5.0700 4.3400 3.7600 3.5000 3.4400 3.2900 2.4800 1.6700 1.3900 1.3300 1.2200 1.2300 1.5300 2.0400 2.2900 2.3100 2.3200 2.3200 2.3600 2.5700 2.9900 3.2800 3.2000 3.0000 2.7000 2.5200 2.6700 3.2400 574 97.644 100.00 99.828 45.694 2.0649 1.9136 2.2725 0.66000 0.78000 1.3200 2.4000 3.1700 3.3100 3.1800 2.9100 2.6500 2.4100 2.2500 2.3400 2.6400 2.7800 2.2800 1.7100 1.5000 1.4600 1.3900 1.4100 1.6500 2.0700 2.2800 2.3200 2.3300 2.3500 2.3700 2.5500 2.8600 3.0500 3.0000 2.8500 2.6600 2.5400 2.6400 3.0500 575 100.00 88.334 68.330 31.389 2.4958 2.5429 4.1966 0.36000 0.46000 1.0100 2.8400 5.1100 6.0100 5.9900 5.6300 5.1000 4.5300 4.1400 4.1300 4.4600 4.6200 3.9000 2.9500 2.4100 2.0600 1.6600 1.4800 1.6900 2.1200 2.3100 2.3000 2.3000 2.2900 2.3300 2.5600 2.9900 3.2800 3.2000 2.9900 2.6900 2.5000 2.6500 3.2200 576 100.00 99.560 75.636 39.744 2.0105 1.7700 2.9956 0.40000 0.58000 1.1600 2.5400 4.0300 4.5500 4.4200 4.0300 3.6100 3.1300 2.8000 2.7000 2.8000 2.7800 2.1600 1.5300 1.3000 1.2500 1.1800 1.1900 1.4500 1.8600 2.0600 2.0800 2.0800 2.1000 2.1200 2.2900 2.6300 2.8600 2.8000 2.6400 2.4100 2.2700 2.4100 2.8800 577 98.487 100.00 100.00 31.735 2.1615 1.9817 2.3409 0.52000 0.69000 1.1700 2.4300 3.2600 3.4000 3.2800 2.9700 2.7200 2.4500 2.3200 2.4600 2.9100 3.1200 2.4800 1.7300 1.4500 1.4100 1.3100 1.3300 1.6600 2.1900 2.4800 2.5100 2.5100 2.5300 2.5500 2.7700 3.2100 3.4800 3.4100 3.2100 2.9100 2.7400 2.8700 3.4300 578 82.789 92.685 76.922 30.583 3.7919 3.0473 3.5388 0.66000 0.53000 1.1200 2.7700 4.5900 5.2000 5.1300 4.6800 4.2500 3.7400 3.4000 3.4200 3.7500 3.9000 3.1900 2.3300 1.9800 1.8800 1.7100 1.7600 2.3900 3.6400 4.5700 5.0300 5.2600 5.3500 5.4500 5.7300 6.1900 6.5000 6.4200 6.2300 5.9200 5.7200 5.8600 6.4300 579 84.436 100.00 72.311 43.412 2.8446 2.1526 3.0171 0.44000 0.46000 1.0700 2.5800 4.0900 4.6300 4.5100 4.1000 3.6200 3.1400 2.7700 2.6400 2.6800 2.6300 2.0400 1.4400 1.2400 1.2200 1.1800 1.2300 1.7300 2.6500 3.3600 3.7000 3.8900 3.9800 4.0600 4.2600 4.6400 4.8700 4.8200 4.6600 4.4400 4.3000 4.4000 4.8900 580 79.939 80.997 56.943 42.423 3.9271 3.5193 4.6000 0.43000 0.61000 1.1200 3.0100 5.5500 6.6400 6.6200 6.1800 5.6100 4.9800 4.5300 4.4200 4.6000 4.7400 4.1700 3.4000 2.9800 2.6800 2.3700 2.2800 2.7000 3.5800 4.2300 4.5400 4.7100 4.7900 4.8700 5.0800 5.4500 5.6900 5.6300 5.5000 5.2700 5.0900 5.2600 5.7400 581 73.223 72.782 54.796 31.407 5.8962 5.4880 6.1489 0.50000 0.51000 1.1300 3.4500 6.9400 8.5100 8.5900 8.1300 7.5200 6.8000 6.3300 6.3700 6.8800 7.3000 6.6600 5.6000 4.9100 4.3700 3.8000 3.5900 4.1900 5.4600 6.4600 6.9500 7.2300 7.3600 7.4800 7.7700 8.2800 8.5900 8.5200 8.3300 8.0300 7.8000 7.9300 8.5900 582 65.545 80.868 55.575 41.990 5.4979 4.5301 4.9200 0.53000 0.63000 1.1400 3.1200 6.0100 7.1600 7.0700 6.6100 5.9900 5.3100 4.8300 4.7200 4.9100 5.0500 4.5000 3.7400 3.3600 3.1600 2.9100 2.9100 3.6800 5.1800 6.4500 7.1700 7.5600 7.7300 7.8500 8.1300 8.5400 8.8000 8.7500 8.6100 8.3800 8.2100 8.3300 8.8500 583 56.630 62.384 29.874 43.313 7.8619 7.1554 8.3332 0.67000 0.61000 1.1800 4.0100 9.1500 11.580 11.740 11.150 10.320 9.4200 8.7100 8.3900 8.3900 8.4100 7.7800 6.9100 6.3100 5.8500 5.3700 5.2200 5.8700 7.2700 8.4500 9.1400 9.5200 9.6800 9.8000 10.060 10.440 10.670 10.630 10.530 10.320 10.210 10.340 10.790 584 67.242 59.963 27.468 43.829 7.0028 6.8036 9.0410 0.65000 0.68000 1.2500 4.1800 9.7000 12.380 12.670 12.130 11.270 10.300 9.5600 9.2000 9.1200 9.0700 8.3300 7.3100 6.5500 5.8800 5.1900 4.8600 5.2800 6.2500 6.9700 7.3400 7.5200 7.6000 7.6800 7.9100 8.3100 8.5600 8.5000 8.3300 8.1000 7.9000 8.0100 8.5300 585 80.697 75.180 43.979 28.200 5.3240 4.9745 7.3628 0.75000 0.61000 1.2000 3.9000 8.3100 10.430 10.580 10.010 9.1100 8.1100 7.3700 7.1100 7.2400 7.3000 6.4500 5.3000 4.5300 3.9400 3.3100 3.0500 3.5100 4.5700 5.3500 5.7300 5.9200 6.0100 6.1000 6.3700 6.8600 7.1700 7.1000 6.8800 6.5900 6.3700 6.5300 7.1000 586 59.132 60.463 9.4699 40.582 8.8017 7.9985 11.385 0.75000 0.62000 1.1900 4.8900 12.210 15.880 16.220 15.480 14.300 12.980 11.910 11.130 10.440 9.8500 8.8900 7.8400 7.1200 6.5500 5.9300 5.7100 6.3500 7.7600 8.9100 9.5700 9.9300 10.090 10.230 10.530 10.960 11.220 11.200 11.060 10.810 10.640 10.770 11.320 587 30.185 31.186 0.0000 41.825 16.835 16.375 18.399 0.99000 0.85000 1.4600 6.4100 17.750 24.150 25.070 24.410 23.170 21.870 20.750 19.860 19.040 18.300 17.430 16.410 15.630 14.910 14.170 13.880 14.470 15.900 17.170 17.970 18.390 18.590 18.750 19.010 19.340 19.540 19.520 19.460 19.320 19.260 19.360 19.720 588 38.217 44.933 0.0000 35.032 15.735 14.466 17.989 1.00000 0.64000 1.3400 6.4300 18.010 24.490 25.230 24.270 22.660 20.930 19.490 18.330 17.250 16.310 15.160 13.910 13.010 12.270 11.490 11.240 12.200 14.350 16.290 17.520 18.200 18.480 18.690 19.030 19.470 19.750 19.730 19.610 19.420 19.290 19.420 19.930 589 50.228 41.214 15.480 31.124 14.005 14.071 16.620 1.1900 0.92000 1.4500 6.0800 16.090 21.640 22.580 22.030 20.890 19.600 18.600 18.090 17.990 17.870 16.860 15.340 14.030 12.760 11.480 10.860 11.360 12.790 13.940 14.610 14.970 15.120 15.240 15.580 16.100 16.370 16.310 16.130 15.850 15.670 15.780 16.400 590 47.158 40.995 0.0000 41.928 12.085 11.817 15.171 0.85000 0.71000 1.3100 5.7400 14.990 20.010 20.820 20.280 19.190 17.950 16.910 16.040 15.190 14.430 13.450 12.360 11.450 10.620 9.7400 9.3200 9.7600 10.910 11.860 12.430 12.750 12.910 13.040 13.310 13.690 13.940 13.930 13.810 13.640 13.530 13.640 14.140 591 31.747 32.852 0.0000 29.868 21.146 20.303 23.727 1.1700 0.91000 1.5000 7.5300 22.390 31.280 32.660 31.730 29.990 28.100 26.540 25.260 24.070 23.020 21.710 20.260 19.140 18.120 17.090 16.700 17.590 19.690 21.580 22.780 23.410 23.690 23.900 24.240 24.700 24.950 24.930 24.800 24.620 24.480 24.560 25.140 592 18.472 39.337 0.0000 46.174 16.696 15.159 15.675 1.0500 0.76000 1.4500 5.9800 16.140 21.360 21.750 20.820 19.560 18.250 17.190 16.340 15.600 15.010 14.310 13.610 13.220 13.000 12.740 12.850 13.930 16.120 18.120 19.460 20.180 20.490 20.730 20.980 21.270 21.420 21.440 21.450 21.400 21.390 21.480 21.800 593 36.349 50.359 0.0000 46.024 11.800 10.514 12.842 0.74000 0.69000 1.2600 5.2400 13.590 17.860 18.170 17.330 16.070 14.750 13.660 12.790 11.970 11.290 10.470 9.6100 9.0600 8.6600 8.2200 8.1600 9.0300 10.880 12.520 13.570 14.150 14.400 14.580 14.860 15.210 15.410 15.410 15.350 15.250 15.150 15.280 15.720 594 56.763 55.579 32.207 30.695 10.665 10.212 11.192 0.68000 0.64000 1.2300 4.8600 11.630 14.920 15.340 14.810 13.900 12.890 12.150 11.970 12.300 12.610 11.870 10.600 9.6200 8.7300 7.8400 7.4700 8.1900 9.8800 11.290 12.110 12.560 12.770 12.930 13.280 13.800 14.130 14.090 13.910 13.620 13.420 13.540 14.240 595 21.299 17.610 0.0000 28.391 27.507 27.616 28.665 1.4800 0.99000 1.5400 8.3200 25.240 35.980 38.200 37.710 36.340 34.840 33.570 32.500 31.530 30.630 29.540 28.210 27.080 25.990 24.900 24.450 25.020 26.550 27.920 28.810 29.330 29.560 29.780 30.130 30.570 30.810 30.820 30.780 30.690 30.650 30.780 31.330 596 86.653 100.00 54.861 36.342 3.1491 2.3125 4.3134 0.33000 0.50000 1.0300 2.9600 5.6400 6.7100 6.6200 6.0500 5.3000 4.4800 3.8400 3.4800 3.2600 2.9900 2.2400 1.5100 1.2800 1.2600 1.1900 1.2600 1.8000 2.7700 3.5000 3.8300 3.9900 4.0700 4.1500 4.4000 4.8100 5.0900 5.0400 4.8400 4.5800 4.3900 4.5500 5.0400 597 64.054 100.00 64.345 48.746 4.1809 2.8174 3.2469 0.50000 0.47000 0.97000 2.5600 4.4700 5.0700 4.9400 4.4400 3.9100 3.3600 2.9300 2.7200 2.6600 2.5500 2.0000 1.4300 1.2400 1.2500 1.2500 1.4000 2.2300 3.8700 5.3300 6.2000 6.6600 6.8800 7.0200 7.2700 7.6500 7.8900 7.8600 7.7600 7.5400 7.4100 7.5300 7.9900 598 42.059 78.838 30.510 49.560 7.5538 5.6432 6.0887 0.59000 0.46000 1.0900 3.5700 7.5800 9.2700 9.0400 8.3200 7.4400 6.5300 5.7900 5.3600 5.1200 4.9400 4.3800 3.7800 3.5500 3.5200 3.4500 3.6500 4.7700 7.0200 9.1200 10.470 11.200 11.520 11.750 12.020 12.360 12.580 12.580 12.530 12.400 12.330 12.450 12.840 599 40.630 74.253 27.008 31.884 12.130 9.3336 10.134 0.86000 0.76000 1.3100 4.8500 11.960 15.140 14.930 13.830 12.470 11.000 9.8700 9.2200 8.9000 8.6600 7.7600 6.7300 6.2700 6.1000 5.8600 6.0700 7.7700 11.240 14.460 16.550 17.660 18.130 18.420 18.810 19.320 19.620 19.590 19.430 19.190 19.010 19.160 19.710 600 43.914 80.401 0.0000 46.396 8.5811 6.2514 9.2546 0.71000 0.61000 1.2600 4.7000 11.530 14.570 14.270 12.980 11.410 9.7700 8.4500 7.4300 6.4700 5.7700 4.9000 4.1600 3.8700 3.8100 3.7100 3.8800 5.1000 7.5400 9.8100 11.230 12.010 12.310 12.530 12.810 13.180 13.360 13.380 13.260 13.120 13.010 13.110 13.510 601 64.693 85.818 34.678 45.848 5.2207 4.0019 5.6332 0.64000 0.49000 1.1000 3.4200 7.0700 8.6000 8.4700 7.7700 6.9400 5.9900 5.2600 4.8000 4.5100 4.2600 3.6100 2.9500 2.6600 2.5500 2.3900 2.4700 3.2200 4.7100 5.9500 6.6900 7.0900 7.2600 7.3900 7.6500 8.0300 8.2700 8.2300 8.1100 7.9100 7.7900 7.8600 8.4000 602 49.901 68.050 18.281 42.617 9.1186 7.6156 9.6258 0.78000 0.71000 1.2900 4.6100 10.960 14.000 14.020 13.130 11.940 10.650 9.6400 8.9800 8.5100 8.1400 7.3400 6.4400 5.9600 5.6600 5.3300 5.3300 6.3300 8.3500 10.100 11.170 11.740 11.970 12.140 12.430 12.830 13.050 13.020 12.910 12.720 12.560 12.670 13.140 603 56.914 68.843 37.125 32.230 9.0152 7.7267 8.4711 0.73000 0.62000 1.1200 4.1600 9.4900 11.950 12.020 11.360 10.460 9.4400 8.6800 8.4100 8.5300 8.6400 7.8800 6.8300 6.2100 5.8000 5.3100 5.2600 6.2900 8.4200 10.250 11.340 11.920 12.180 12.360 12.720 13.260 13.580 13.540 13.370 13.090 12.890 13.020 13.660 604 61.919 95.381 45.316 39.381 5.6157 3.7810 5.1152 0.55000 0.42000 1.1000 3.2700 6.7500 8.1000 7.8800 7.1400 6.2700 5.2900 4.5400 4.0700 3.7800 3.4800 2.7300 2.0000 1.7500 1.7600 1.7000 1.8800 2.9400 5.0500 6.9200 8.0500 8.6600 8.9300 9.1200 9.4300 9.9000 10.180 10.150 10.010 9.7700 9.6000 9.7300 10.290 605 41.931 71.636 0.0000 33.451 12.123 9.3194 12.892 1.00000 0.67000 1.3400 5.9100 15.130 19.550 19.350 17.900 16.010 14.010 12.390 11.130 9.9600 9.0300 7.9200 6.8900 6.4200 6.2200 5.9500 6.1100 7.6400 10.730 13.610 15.490 16.520 16.970 17.280 17.670 18.190 18.500 18.490 18.370 18.140 18.010 18.150 18.770 606 71.599 83.646 44.764 33.718 5.4086 4.3785 6.2779 0.32000 0.54000 1.0300 3.5500 7.5400 9.3200 9.3200 8.6600 7.7400 6.7400 5.9600 5.6000 5.5000 5.3700 4.5900 3.6800 3.1900 2.9300 2.6200 2.5800 3.3200 4.8100 6.0200 6.6900 7.0400 7.1900 7.3100 7.6100 8.0900 8.4000 8.3500 8.1500 7.8500 7.6600 7.7900 8.4000 607 74.950 99.771 44.765 30.919 4.6697 3.1414 5.5060 0.61000 0.41000 1.1500 3.5400 7.2700 8.7900 8.6000 7.7900 6.7900 5.6500 4.7700 4.1900 3.7900 3.3900 2.5000 1.6800 1.4300 1.4200 1.3800 1.5100 2.3900 4.0800 5.4800 6.2700 6.6500 6.8300 6.9700 7.2900 7.8100 8.1400 8.0700 7.8800 7.5600 7.3400 7.4700 8.1300 608 39.139 61.727 10.457 29.855 14.723 12.252 14.964 0.99000 0.84000 1.3600 6.0900 16.340 21.610 21.760 20.410 18.620 16.740 15.200 14.150 13.320 12.650 11.520 10.270 9.5700 9.1400 8.6400 8.6700 10.220 13.430 16.380 18.270 19.290 19.720 19.980 20.380 20.890 21.160 21.140 20.980 20.770 20.570 20.680 21.310 609 25.363 59.941 0.0000 45.994 12.684 10.325 11.633 0.76000 0.68000 1.1700 5.2800 13.230 16.940 16.860 15.750 14.420 13.020 11.890 10.970 10.160 9.5100 8.7600 8.0400 7.7200 7.6400 7.5100 7.7200 9.1000 11.840 14.410 16.130 17.060 17.490 17.760 18.070 18.420 18.610 18.660 18.660 18.570 18.560 18.680 19.050 610 18.235 53.589 0.0000 32.549 19.819 16.272 17.076 0.95000 0.83000 1.4200 6.7500 18.430 24.420 24.490 23.050 21.250 19.340 17.820 16.610 15.530 14.690 13.690 12.750 12.340 12.240 12.060 12.410 14.430 18.510 22.570 25.410 27.030 27.740 28.190 28.610 29.060 29.340 29.380 29.380 29.330 29.320 29.440 29.940 611 33.161 52.784 12.275 36.638 14.668 12.830 13.680 0.94000 0.66000 1.2400 5.7000 14.580 18.980 19.220 18.300 17.030 15.650 14.590 13.870 13.390 13.030 12.210 11.250 10.690 10.320 9.9000 9.9500 11.240 13.870 16.260 17.820 18.700 19.080 19.350 19.700 20.140 20.420 20.420 20.330 20.190 20.100 20.220 20.750 612 51.053 90.009 14.605 33.572 8.6221 5.7176 8.6393 0.73000 0.55000 1.2200 4.7100 11.190 13.980 13.570 12.230 10.650 8.9100 7.5200 6.5100 5.6200 4.9300 3.9300 3.0500 2.7300 2.7100 2.6400 2.8800 4.3900 7.4400 10.280 12.130 13.120 13.550 13.840 14.220 14.760 15.080 15.060 14.910 14.660 14.480 14.640 15.260 613 63.002 100.00 22.739 40.647 5.3650 3.3909 6.1256 0.47000 0.54000 1.1400 3.7800 8.2400 10.160 9.8100 8.8000 7.5200 6.1500 5.0800 4.3000 3.6100 3.0700 2.2600 1.5700 1.3600 1.3700 1.3600 1.5400 2.5300 4.5200 6.3400 7.4400 8.0300 8.2800 8.4300 8.7200 9.1500 9.4000 9.3700 9.2200 9.0100 8.8400 8.9400 9.4400 614 22.921 87.923 0.0000 32.359 14.287 9.0786 11.055 0.85000 0.67000 1.2500 5.6500 14.530 18.340 17.560 15.600 13.490 11.260 9.5400 8.1900 6.9700 6.0700 5.0100 4.1000 3.8400 3.9600 4.0200 4.5300 6.9900 12.180 17.580 21.520 23.760 24.770 25.340 25.840 26.360 26.660 26.710 26.670 26.630 26.570 26.700 27.210 615 22.005 88.394 0.0000 44.297 11.610 7.5317 9.4515 0.89000 0.80000 1.2700 5.0300 12.540 15.670 14.960 13.300 11.500 9.6400 8.1800 7.0500 6.0300 5.2700 4.3800 3.6200 3.4000 3.4800 3.5300 3.9400 5.9600 10.140 14.300 17.200 18.780 19.480 19.860 20.220 20.580 20.760 20.800 20.780 20.710 20.690 20.730 21.090 616 28.750 77.222 0.0000 35.805 13.330 9.4069 11.625 0.78000 0.65000 1.3100 5.6000 14.360 18.330 17.810 16.180 14.310 12.330 10.760 9.5200 8.4000 7.5500 6.5400 5.6700 5.3700 5.3800 5.3600 5.7200 7.7200 11.810 15.840 18.650 20.220 20.940 21.340 21.780 22.270 22.550 22.600 22.540 22.420 22.350 22.500 23.030 617 41.551 100.00 0.0000 45.449 7.5049 4.4027 7.1847 0.34000 0.47000 1.1600 4.3700 10.120 12.390 11.790 10.330 8.7500 7.0500 5.7200 4.6800 3.7300 3.0200 2.2000 1.5300 1.3400 1.3900 1.4400 1.7200 3.1800 6.2200 9.2100 11.210 12.310 12.790 13.080 13.410 13.820 14.080 14.090 14.000 13.870 13.770 13.890 14.340 618 57.846 100.00 46.996 29.771 6.8023 4.2493 5.4216 0.38000 0.53000 1.0700 3.5700 7.3200 8.7800 8.4700 7.6200 6.6300 5.5300 4.6600 4.1400 3.7800 3.4200 2.5600 1.7300 1.4800 1.5200 1.5100 1.7700 3.1600 6.0100 8.6800 10.390 11.310 11.710 11.960 12.360 12.900 13.250 13.210 13.020 12.750 12.550 12.700 13.370 619 35.024 100.00 0.0000 36.603 10.228 5.8930 9.0395 0.75000 0.64000 1.2500 5.0900 12.660 15.800 14.940 13.040 10.970 8.8000 7.0900 5.7900 4.6000 3.7300 2.7000 1.8600 1.6300 1.7300 1.7700 2.1600 4.1600 8.4300 12.710 15.690 17.340 18.040 18.430 18.840 19.310 19.590 19.590 19.500 19.360 19.260 19.340 19.830 620 15.596 65.309 0.0000 41.714 15.177 11.451 12.398 0.86000 0.64000 1.2400 5.5400 14.570 18.800 18.440 16.950 15.280 13.520 12.140 11.060 10.100 9.3700 8.5200 7.7400 7.4900 7.5300 7.5400 7.9300 9.9000 13.920 17.900 20.710 22.280 22.990 23.390 23.770 24.130 24.340 24.400 24.400 24.390 24.440 24.550 24.920 621 14.366 100.00 0.0000 42.988 11.872 6.6644 8.2190 0.64000 0.57000 1.1800 4.8100 11.900 14.660 13.610 11.770 9.8800 7.9100 6.3800 5.2200 4.1600 3.3900 2.4900 1.7500 1.5500 1.6800 1.7700 2.2400 4.6100 9.7600 15.190 19.200 21.480 22.490 23.040 23.450 23.840 24.050 24.100 24.130 24.150 24.170 24.270 24.590 622 17.277 100.00 0.0000 30.012 14.644 8.0689 10.005 0.80000 0.67000 1.2200 5.5800 14.420 17.950 16.730 14.400 12.020 9.5500 7.6500 6.2100 4.9000 3.9500 2.8300 1.9100 1.6700 1.8400 1.9300 2.5100 5.3700 11.690 18.570 23.830 26.890 28.300 29.050 29.650 30.180 30.520 30.580 30.590 30.530 30.550 30.680 31.140 623 100.00 0.0000 72.649 48.361 3.7723 7.2613 5.5497 0.53000 0.45000 0.97000 2.6000 4.7100 5.6900 6.0700 6.2200 6.3300 6.5100 6.9700 8.6000 12.030 15.550 16.120 14.290 11.540 8.4100 5.6100 3.8700 3.0000 2.5400 2.1700 1.9400 1.8600 1.8400 1.8500 2.0000 2.3000 2.5000 2.4400 2.3000 2.1100 2.0100 2.1300 2.5200 624 100.00 0.0000 53.410 43.096 4.9354 8.8620 9.4557 0.84000 0.72000 1.1800 3.6300 7.6800 10.010 10.950 11.390 11.480 11.630 12.010 13.430 16.460 19.330 19.280 16.870 13.540 9.8500 6.5800 4.5500 3.5300 3.0100 2.5900 2.3000 2.2100 2.1700 2.1700 2.3500 2.6900 2.9100 2.8400 2.6600 2.4500 2.3200 2.3900 2.8900 625 85.059 3.6205 64.691 31.790 7.5574 12.437 9.4504 0.88000 0.55000 1.2000 3.5000 7.5400 9.7000 10.530 10.900 11.110 11.340 11.990 14.210 18.990 24.030 24.790 22.000 18.100 13.840 10.080 7.7900 6.6400 6.0600 5.5600 5.2300 5.1100 5.0700 5.0900 5.3400 5.7800 6.0500 5.9600 5.7900 5.4900 5.2900 5.4200 6.0300 626 100.00 0.0000 64.410 35.074 4.9901 9.6796 8.6708 0.63000 0.66000 1.2300 3.3500 6.8400 8.8200 9.6200 10.030 10.240 10.490 11.090 13.110 17.400 21.770 22.150 19.240 15.200 10.840 7.0600 4.7800 3.6500 3.0700 2.6100 2.3100 2.2000 2.1700 2.1800 2.3700 2.7300 2.9700 2.9100 2.7200 2.4800 2.3200 2.4600 3.0000 627 97.622 24.434 65.660 32.325 4.4750 7.8056 7.3230 0.63000 0.66000 1.1100 3.2600 6.3600 7.9700 8.5500 8.6700 8.6600 8.6600 8.9600 10.450 13.650 16.770 16.820 14.560 11.690 8.6000 5.8100 4.1200 3.3800 3.0900 2.7900 2.5500 2.4700 2.4400 2.4500 2.6700 3.0700 3.3200 3.2400 3.0700 2.7800 2.6200 2.7900 3.3300 628 88.591 34.076 64.905 31.113 5.5305 8.0952 7.3916 0.39000 0.53000 1.0700 3.3300 6.7100 8.4000 8.8800 8.9600 8.8200 8.7000 8.8700 10.060 12.660 15.150 15.050 13.210 11.000 8.6500 6.4200 5.0900 4.6000 4.5400 4.4000 4.2200 4.1800 4.1700 4.2000 4.4600 4.9100 5.2200 5.1300 4.9300 4.6100 4.4000 4.5600 5.1900 629 100.00 40.446 85.163 39.534 3.2694 5.4630 4.1952 0.51000 0.56000 1.1200 2.5500 4.1500 4.7900 4.8700 4.7800 4.7100 4.6700 4.8900 6.1000 8.6900 11.230 11.350 9.8400 8.0100 6.0400 4.2000 3.0900 2.6700 2.5900 2.4300 2.2700 2.2000 2.1900 2.2000 2.3800 2.7400 2.9500 2.8900 2.7400 2.4800 2.3300 2.4600 2.9600 630 89.305 31.028 62.293 43.140 4.7911 6.9723 6.7341 0.65000 0.65000 1.2200 3.1900 6.2600 7.7500 8.2100 8.2200 8.1000 7.9300 8.0400 8.9400 10.970 12.920 12.850 11.350 9.5000 7.5000 5.5900 4.4300 3.9700 3.8600 3.7200 3.5600 3.5100 3.4900 3.5100 3.7000 4.0600 4.2900 4.2400 4.0600 3.8200 3.6900 3.8100 4.2600 631 85.981 0.0000 47.728 49.176 5.6913 8.8014 9.0644 0.67000 0.59000 1.1600 3.5400 7.5800 9.8400 10.700 11.060 11.110 11.160 11.420 12.500 14.760 16.860 16.830 15.010 12.470 9.6000 7.0400 5.4500 4.6400 4.2200 3.8900 3.6700 3.5900 3.5800 3.6000 3.7500 4.0400 4.2200 4.1800 4.0600 3.8800 3.7700 3.8600 4.2800 632 75.035 13.145 62.292 43.387 7.3187 10.297 7.7966 0.70000 0.63000 1.2800 3.3900 6.8200 8.5400 9.1100 9.2500 9.2500 9.2800 9.6000 10.980 13.970 17.020 17.490 15.930 13.720 11.240 8.9400 7.5200 6.8500 6.5800 6.3000 6.1000 6.0300 6.0100 6.0500 6.2400 6.6200 6.8400 6.7800 6.6200 6.4000 6.2500 6.3600 6.8300 633 84.225 0.0000 58.164 42.417 6.4239 10.246 8.7627 0.56000 0.59000 1.1800 3.4100 7.1800 9.2600 10.050 10.360 10.480 10.640 11.070 12.680 16.060 19.490 19.900 17.780 14.740 11.350 8.3300 6.4600 5.5200 5.0400 4.6500 4.3700 4.2700 4.2600 4.2900 4.4600 4.8000 5.0500 4.9800 4.8300 4.5900 4.4800 4.5800 5.0800 634 66.564 0.0000 39.634 44.975 9.3868 12.609 11.612 0.86000 0.64000 1.2000 4.1700 9.7000 12.760 13.870 14.270 14.320 14.360 14.630 15.720 18.000 20.200 20.290 18.620 16.250 13.520 11.050 9.4800 8.6400 8.2100 7.8400 7.6000 7.5300 7.5200 7.5600 7.7800 8.1300 8.3700 8.3000 8.1900 7.9900 7.8300 7.9300 8.4400 635 68.959 12.548 41.952 32.052 11.142 14.784 13.985 1.1400 0.69000 1.3400 4.7700 11.740 15.660 16.990 17.350 17.280 17.110 17.270 18.510 21.330 24.090 24.010 21.730 18.830 15.610 12.660 10.850 10.030 9.7300 9.4300 9.2000 9.1200 9.1100 9.1500 9.4200 9.9100 10.200 10.120 9.9200 9.6200 9.3700 9.5300 10.150 636 100.00 68.472 100.00 44.899 2.2374 2.9180 2.4108 0.48000 0.58000 1.1100 2.2600 3.0000 3.1600 3.0500 2.8500 2.6600 2.5400 2.5600 3.0800 4.2800 5.3300 5.1300 4.2700 3.5500 2.8900 2.2300 1.8800 1.8800 2.0900 2.1300 2.0800 2.0700 2.0600 2.0800 2.2400 2.5500 2.7500 2.7000 2.5600 2.3400 2.2400 2.3600 2.7700 637 100.00 56.468 100.00 46.517 2.2623 3.3870 2.4358 0.36000 0.53000 1.0300 2.1800 2.8800 3.0500 2.9600 2.7600 2.6100 2.5200 2.6500 3.3700 5.0100 6.5800 6.5700 5.6100 4.6300 3.6000 2.6200 2.0600 1.9200 2.0000 1.9700 1.8800 1.8600 1.8400 1.8700 2.0100 2.2800 2.4800 2.4200 2.3100 2.1000 1.9900 2.1300 2.5100 638 78.467 31.006 72.664 48.246 5.2563 7.0133 4.7301 0.55000 0.51000 1.0200 2.6700 4.6100 5.4200 5.6200 5.5500 5.4500 5.3800 5.5700 6.5700 8.7600 11.000 11.340 10.340 9.0200 7.5500 6.1200 5.2600 4.9700 4.9700 4.9200 4.8200 4.8200 4.8200 4.8500 5.0500 5.3700 5.5900 5.5500 5.4000 5.2000 5.0800 5.2000 5.6500 639 100.00 55.890 70.605 32.504 3.1285 4.5894 5.0838 0.48000 0.59000 1.1500 2.9000 5.2200 6.2600 6.4600 6.2900 6.0400 5.7500 5.7100 6.4000 8.0200 9.4700 9.0900 7.6500 6.1900 4.7200 3.3200 2.5100 2.3000 2.3900 2.3400 2.2200 2.1700 2.1600 2.1800 2.3700 2.7700 3.0100 2.9400 2.7700 2.5000 2.3500 2.4800 3.0400 640 81.994 40.995 66.452 35.693 5.9548 7.7825 6.3094 0.53000 0.54000 1.2200 3.2500 6.1700 7.4200 7.7400 7.6300 7.4500 7.2700 7.3600 8.3600 10.600 12.830 12.870 11.450 9.8100 8.0700 6.4200 5.4200 5.2100 5.4100 5.4800 5.4400 5.4600 5.4600 5.5200 5.7600 6.1900 6.4800 6.4200 6.2400 5.9500 5.7500 5.8900 6.4700 641 61.874 32.286 61.498 44.354 7.8212 9.2275 6.5613 0.55000 0.66000 1.1400 3.2200 6.3200 7.7400 8.0500 7.9700 7.8000 7.6200 7.7100 8.5900 10.630 12.700 12.980 11.960 10.740 9.3900 8.0800 7.3300 7.2600 7.6400 7.9200 8.0200 8.1200 8.1700 8.2300 8.4600 8.8200 9.0500 9.0000 8.8700 8.6600 8.5500 8.6500 9.1200 642 100.00 64.581 100.00 31.312 2.7333 3.8537 2.7813 0.57000 0.56000 1.1800 2.3600 3.2700 3.4600 3.3600 3.1600 3.0100 2.9100 3.0300 3.8900 5.7300 7.4600 7.2600 6.0200 4.9400 3.9200 2.9100 2.3300 2.3100 2.5400 2.5700 2.4800 2.4400 2.4300 2.4700 2.6700 3.0900 3.3700 3.2800 3.0900 2.8000 2.6000 2.7600 3.3100 643 92.507 59.542 76.005 38.063 3.1552 4.1147 3.9242 0.51000 0.44000 1.0100 2.5600 4.3000 5.0100 5.0300 4.8400 4.5600 4.3200 4.2700 4.8600 6.2600 7.5300 7.2800 6.1600 5.1100 4.1000 3.0900 2.5300 2.5000 2.7500 2.8600 2.8100 2.8100 2.8200 2.8400 3.0500 3.4000 3.6400 3.5800 3.4100 3.2100 3.0200 3.1800 3.6300 644 84.910 53.783 59.701 47.285 4.0408 4.8328 5.2637 0.64000 0.66000 1.2400 3.0100 5.5200 6.7000 6.8900 6.7000 6.3700 6.0300 5.8500 6.1900 7.0900 7.9300 7.6100 6.6500 5.6900 4.7300 3.7900 3.2700 3.2400 3.5100 3.6700 3.6900 3.7300 3.7400 3.7800 3.9700 4.2600 4.4700 4.4200 4.2700 4.1000 3.9600 4.0900 4.4800 645 36.843 0.0000 12.067 45.672 16.347 18.575 18.184 1.0400 0.84000 1.4400 5.9000 15.660 21.180 22.790 23.130 22.940 22.690 22.530 22.700 23.240 23.630 23.250 22.130 20.670 18.990 17.370 16.380 15.830 15.550 15.320 15.170 15.170 15.200 15.290 15.500 15.850 16.040 16.040 15.970 15.840 15.760 15.870 16.330 646 55.079 23.512 47.751 35.422 11.794 13.810 10.670 0.74000 0.73000 1.2300 4.2300 9.6400 12.460 13.160 13.190 12.960 12.720 12.790 13.810 16.240 18.750 19.010 17.630 15.900 14.030 12.240 11.230 11.050 11.440 11.720 11.850 11.940 12.020 12.100 12.390 12.810 13.070 13.020 12.870 12.620 12.470 12.630 13.170 647 43.892 0.0000 30.146 46.572 13.782 16.369 13.803 0.94000 0.73000 1.3000 4.7800 11.890 15.790 16.920 17.160 17.100 17.010 17.110 17.920 19.750 21.580 21.800 20.680 19.030 17.110 15.300 14.190 13.600 13.300 13.040 12.890 12.850 12.860 12.920 13.140 13.460 13.650 13.630 13.540 13.420 13.320 13.450 13.870 648 64.296 21.032 42.588 39.861 9.6521 11.850 10.688 0.70000 0.57000 1.2300 4.1500 9.5800 12.430 13.220 13.330 13.120 12.910 12.920 13.750 15.630 17.460 17.420 16.010 14.230 12.280 10.410 9.2600 8.8700 8.9000 8.8700 8.7900 8.8100 8.8200 8.8900 9.1400 9.5600 9.8200 9.7700 9.6100 9.3700 9.1800 9.3200 9.8700 649 52.660 10.016 27.449 34.869 14.851 17.708 16.857 1.0900 0.75000 1.3100 5.5100 14.260 19.320 20.880 21.240 21.100 20.860 20.810 21.550 23.290 24.870 24.610 22.850 20.640 18.190 15.880 14.480 13.890 13.780 13.660 13.560 13.560 13.570 13.660 13.940 14.390 14.670 14.620 14.490 14.230 14.070 14.200 14.780 650 55.270 0.0000 39.467 38.496 13.066 16.751 13.759 0.98000 0.69000 1.2200 4.6400 11.360 15.180 16.450 16.850 16.910 16.930 17.240 18.610 21.610 24.690 25.140 23.370 20.780 17.830 15.160 13.520 12.640 12.180 11.790 11.530 11.470 11.450 11.520 11.760 12.160 12.410 12.360 12.200 11.990 11.840 11.990 12.520 651 64.515 19.931 57.203 41.885 9.1012 11.484 8.3287 0.68000 0.53000 1.1600 3.5000 7.4600 9.4200 9.9800 10.040 9.9600 9.9000 10.110 11.310 13.940 16.650 17.130 15.860 14.120 12.160 10.300 9.1500 8.7300 8.7200 8.6700 8.5800 8.5700 8.5900 8.6500 8.9000 9.3000 9.5600 9.5100 9.3600 9.1200 8.9400 9.0700 9.6000 652 37.119 0.0000 30.518 37.561 18.784 22.062 17.486 1.0100 0.94000 1.4000 5.6600 14.760 20.000 21.400 21.740 21.610 21.500 21.630 22.780 25.360 28.090 28.630 27.310 25.330 23.040 20.910 19.600 18.890 18.520 18.210 17.990 17.950 17.940 18.020 18.280 18.640 18.880 18.830 18.700 18.560 18.400 18.540 19.000 653 32.722 1.5717 18.225 28.704 24.444 27.972 24.619 1.4200 0.90000 1.5300 7.2700 20.350 28.180 30.480 31.050 30.900 30.680 30.680 31.510 33.420 35.210 35.130 33.440 31.190 28.670 26.320 24.940 24.190 23.830 23.530 23.340 23.330 23.350 23.460 23.780 24.240 24.520 24.500 24.390 24.210 24.090 24.240 24.820 654 45.545 0.0000 32.699 28.472 19.443 23.823 19.574 1.3800 0.90000 1.4500 5.9900 15.930 21.820 23.670 24.240 24.240 24.200 24.470 26.000 29.400 32.960 33.460 31.350 28.350 25.000 21.960 20.120 19.130 18.620 18.170 17.880 17.800 17.780 17.870 18.190 18.680 18.970 18.940 18.760 18.520 18.320 18.460 19.150 655 100.00 78.672 88.853 42.628 2.1001 2.4645 2.7173 0.26000 0.46000 1.00000 2.3500 3.3900 3.7300 3.6500 3.4300 3.1300 2.9000 2.7900 3.1000 3.8600 4.4900 4.0700 3.2700 2.7100 2.2500 1.7900 1.5500 1.6500 1.9100 2.0200 1.9700 1.9700 1.9700 2.0000 2.1500 2.4700 2.6800 2.6200 2.5000 2.2600 2.1400 2.2800 2.6900 656 95.520 81.151 100.00 31.926 2.4582 2.7807 2.4336 0.36000 0.50000 1.1200 2.3200 3.1500 3.2800 3.1900 2.9600 2.7100 2.5400 2.5000 2.9500 4.0000 4.8500 4.4300 3.4900 2.9000 2.4500 1.9700 1.7500 1.9500 2.3900 2.6300 2.6400 2.6600 2.6700 2.7000 2.9100 3.3200 3.5800 3.5000 3.3300 3.0600 2.8800 3.0300 3.6100 657 89.784 82.426 100.00 42.120 2.5548 2.6062 2.1974 0.46000 0.38000 0.96000 2.1300 2.9300 3.0500 2.9200 2.7000 2.4700 2.2900 2.2300 2.5600 3.3400 3.9600 3.6100 2.9000 2.4700 2.1700 1.8400 1.7200 1.9900 2.5400 2.8900 3.0100 3.0800 3.1200 3.1600 3.3500 3.7200 3.9500 3.8800 3.7400 3.5000 3.3800 3.4800 3.9900 658 86.780 69.202 100.00 49.982 2.7920 3.1209 2.1665 0.29000 0.46000 0.97000 2.0400 2.7600 2.8900 2.7900 2.5900 2.3800 2.2400 2.2500 2.7000 3.7200 4.6500 4.5200 3.8600 3.3600 2.9200 2.4500 2.2400 2.3800 2.7900 3.0400 3.1200 3.1700 3.1900 3.2500 3.4200 3.7100 3.9000 3.8700 3.7400 3.5600 3.4500 3.5200 3.9900 659 60.479 55.790 62.254 31.129 8.6870 8.7558 6.5604 0.81000 0.51000 1.1500 3.4100 6.8200 8.3700 8.5300 8.2500 7.8300 7.4100 7.2500 7.8500 9.4200 10.930 10.750 9.6200 8.6700 7.7800 6.8700 6.4800 7.0900 8.5400 9.7400 10.410 10.780 10.950 11.080 11.400 11.910 12.220 12.150 11.960 11.680 11.500 11.620 12.250 660 82.480 73.936 96.299 34.576 3.8799 4.0390 2.6205 0.54000 0.41000 1.0400 2.2400 3.1900 3.4300 3.3200 3.1000 2.9100 2.7600 2.7800 3.3600 4.6500 5.7900 5.5400 4.6500 4.0000 3.4800 2.9500 2.7200 3.0800 3.9100 4.5000 4.7600 4.9100 4.9700 5.0400 5.3000 5.7300 6.0100 5.9500 5.7800 5.5000 5.3000 5.4400 6.0200 661 82.466 60.625 66.301 33.856 5.0729 5.7164 5.4444 0.43000 0.65000 1.1800 3.1700 5.8000 6.9900 7.1100 6.8700 6.5200 6.1300 5.9500 6.4400 7.7300 8.9300 8.5500 7.3400 6.3100 5.3300 4.3500 3.8400 4.0200 4.7000 5.1100 5.2700 5.3500 5.4000 5.4700 5.7200 6.1600 6.4500 6.3700 6.1800 5.8800 5.7100 5.7900 6.3800 662 73.138 64.192 66.238 41.180 5.2153 5.2924 4.6922 0.48000 0.57000 1.1600 2.9600 5.2900 6.2100 6.2600 5.9700 5.6000 5.2100 5.0100 5.3300 6.2900 7.1600 6.8300 5.9200 5.2300 4.6400 4.0200 3.7500 4.1400 5.0500 5.7100 6.0100 6.1800 6.2700 6.3300 6.5800 6.9800 7.2300 7.1700 7.0100 6.7700 6.6000 6.7000 7.2200 663 70.027 54.941 69.742 35.824 6.1802 6.7927 5.0908 0.54000 0.62000 1.1700 2.9300 5.3600 6.3600 6.4700 6.2800 6.0000 5.7200 5.6600 6.3500 7.9500 9.5000 9.3900 8.3400 7.3500 6.3900 5.4300 4.9400 5.2100 6.0200 6.6200 6.9000 7.0600 7.1400 7.2200 7.4900 7.9300 8.1900 8.1400 7.9900 7.7000 7.5400 7.6700 8.2600 664 63.006 45.192 45.551 46.824 7.2402 7.7171 7.3247 0.68000 0.59000 1.0600 3.4300 7.4400 9.3100 9.6200 9.4000 8.9700 8.5300 8.2600 8.5100 9.3600 10.150 9.8900 9.0000 8.1600 7.3100 6.4500 6.0000 6.1900 6.8600 7.3700 7.6300 7.7800 7.8600 7.9400 8.1700 8.5400 8.7700 8.7300 8.6200 8.4100 8.2600 8.3900 8.8700 665 87.800 67.272 100.00 38.913 3.3999 3.9779 2.5047 0.29000 0.45000 0.98000 2.1800 3.0100 3.2200 3.1000 2.8900 2.7200 2.5900 2.6600 3.3600 4.9000 6.3400 6.1800 5.2200 4.4400 3.7600 3.0300 2.6800 2.8700 3.4100 3.7300 3.8100 3.8500 3.8700 3.9200 4.1500 4.5400 4.8000 4.7200 4.5500 4.2900 4.0900 4.1800 4.6900 666 74.621 47.493 69.583 48.145 4.9156 5.7855 4.4302 0.55000 0.46000 1.0600 2.6500 4.6700 5.4800 5.5900 5.4300 5.1800 5.0000 4.9900 5.6000 7.0300 8.4000 8.4000 7.5700 6.7000 5.7800 4.8800 4.3700 4.4000 4.7500 4.9600 5.0200 5.0600 5.1000 5.1600 5.3500 5.7000 5.9100 5.8700 5.7500 5.5300 5.3900 5.4900 5.9600 667 52.409 35.573 50.996 49.966 8.1533 8.8000 6.6182 0.66000 0.60000 1.1800 3.2600 6.6400 8.1500 8.4600 8.2400 7.9700 7.6900 7.6100 8.1200 9.4500 10.770 10.880 10.160 9.4000 8.5700 7.7500 7.3300 7.5000 8.1300 8.6100 8.8500 9.0300 9.1000 9.1900 9.4000 9.7100 9.9100 9.8700 9.8000 9.6600 9.5500 9.6800 10.040 668 47.813 32.251 27.075 41.832 11.981 12.618 12.128 0.88000 0.66000 1.2700 4.8000 11.670 15.150 15.840 15.600 15.080 14.470 14.060 14.200 14.900 15.590 15.220 14.170 13.130 12.060 10.980 10.420 10.650 11.470 12.130 12.490 12.730 12.840 12.970 13.240 13.640 13.880 13.860 13.750 13.540 13.440 13.560 14.110 669 54.182 35.076 39.039 29.951 13.082 14.169 12.811 0.93000 0.86000 1.4000 4.9200 12.130 15.840 16.590 16.330 15.780 15.140 14.780 15.360 16.960 18.570 18.290 16.740 15.190 13.580 12.020 11.190 11.410 12.490 13.320 13.760 14.030 14.140 14.260 14.570 15.090 15.380 15.320 15.130 14.840 14.600 14.720 15.420 670 32.118 25.321 28.460 42.998 15.022 15.498 12.456 0.90000 0.63000 1.2700 4.8200 11.840 15.380 16.040 15.820 15.360 14.880 14.650 14.970 16.040 17.150 17.170 16.430 15.660 14.880 14.080 13.730 14.100 15.080 15.930 16.470 16.770 16.940 17.090 17.350 17.690 17.910 17.890 17.850 17.730 17.650 17.820 18.220 671 26.893 2.9945 18.945 43.693 18.888 20.864 17.614 1.1300 0.73000 1.3700 5.9200 15.480 20.730 22.070 22.210 21.990 21.720 21.630 22.070 23.230 24.350 24.440 23.630 22.520 21.230 19.980 19.270 18.910 18.860 18.770 18.730 18.780 18.820 18.920 19.160 19.450 19.650 19.670 19.620 19.550 19.510 19.630 20.050 672 59.799 33.101 44.655 41.447 9.4730 10.661 9.3785 0.62000 0.59000 1.1600 3.9100 8.9400 11.410 11.960 11.840 11.490 11.090 10.950 11.500 12.950 14.380 14.280 13.130 11.880 10.530 9.2200 8.4800 8.4900 9.0300 9.4100 9.6100 9.7300 9.8000 9.9000 10.140 10.550 10.780 10.750 10.600 10.390 10.230 10.360 10.850 673 6.1171 0.0000 0.0000 49.894 21.787 22.664 19.969 1.0400 0.83000 1.3800 6.4200 17.920 24.540 25.820 25.610 25.080 24.560 24.100 23.770 23.540 23.360 23.240 23.030 22.830 22.600 22.330 22.240 22.160 22.170 22.180 22.210 22.290 22.360 22.470 22.680 22.850 22.940 22.980 23.050 23.090 23.160 23.280 23.500 674 13.579 0.0000 6.9781 32.778 30.980 33.208 28.795 1.5800 0.95000 1.6300 8.0400 24.120 34.280 36.750 36.820 36.260 35.680 35.240 35.290 35.850 36.390 36.300 35.530 34.580 33.470 32.380 31.810 31.420 31.290 31.130 31.100 31.130 31.170 31.310 31.570 31.900 32.060 32.070 32.040 32.040 32.060 32.190 32.570 675 30.341 16.521 22.308 32.856 21.044 22.370 18.842 1.1800 0.76000 1.3700 6.3100 16.910 22.690 24.020 23.960 23.460 22.910 22.610 23.040 24.390 25.750 25.690 24.560 23.290 21.940 20.600 19.940 20.100 20.950 21.660 22.090 22.380 22.530 22.700 22.990 23.450 23.690 23.680 23.610 23.450 23.340 23.500 24.040 676 37.160 9.5875 16.754 34.347 20.314 22.730 21.857 1.2400 0.91000 1.5300 6.6700 18.730 25.960 27.800 27.990 27.490 26.900 26.510 26.780 27.860 28.850 28.420 26.830 24.950 22.870 20.900 19.730 19.340 19.450 19.520 19.520 19.570 19.600 19.690 19.950 20.370 20.600 20.580 20.450 20.210 20.080 20.200 20.750 677 83.019 91.001 100.00 39.017 3.1366 2.6758 2.2066 0.69000 0.47000 0.93000 2.2300 3.0200 3.1000 3.0500 2.7800 2.5000 2.3000 2.2100 2.4200 3.0500 3.4600 2.9600 2.2300 1.9000 1.7700 1.6200 1.6300 2.1700 3.2100 3.9300 4.2700 4.4600 4.5100 4.6000 4.8400 5.2400 5.5200 5.4200 5.2700 5.0100 4.8100 4.9400 5.5000 678 81.805 100.00 98.492 47.758 2.7398 2.1657 2.0776 0.41000 0.60000 1.1300 2.2400 2.9300 3.0500 2.9400 2.6700 2.4100 2.1900 2.0300 2.1000 2.3600 2.4800 2.0300 1.5200 1.3400 1.3200 1.2900 1.3600 1.8300 2.7200 3.4200 3.7700 3.9600 4.0500 4.1100 4.3100 4.6200 4.8500 4.7900 4.6700 4.4900 4.3600 4.4900 4.8700 679 84.037 84.248 100.00 28.769 3.8810 3.6821 2.6162 0.51000 0.56000 1.1900 2.4400 3.3200 3.5300 3.3800 3.1700 2.9200 2.7700 2.7300 3.2200 4.3000 5.1700 4.6800 3.7100 3.1600 2.8100 2.4200 2.3100 2.8400 3.9400 4.7400 5.0700 5.2600 5.3400 5.4200 5.7000 6.1900 6.5000 6.4200 6.2100 5.8800 5.6900 5.8200 6.4900 680 72.286 72.655 83.663 42.152 4.5480 4.3723 3.1534 0.48000 0.41000 1.0500 2.4300 3.8100 4.2700 4.1900 3.9200 3.6300 3.3900 3.2700 3.6600 4.6100 5.4700 5.2300 4.5000 4.0000 3.6400 3.2300 3.1000 3.5700 4.5600 5.3300 5.7300 5.9400 6.0400 6.1200 6.3700 6.7500 7.0100 6.9700 6.8100 6.5900 6.4400 6.5600 7.0600 681 65.294 76.751 68.086 32.947 6.1302 5.2639 4.5547 0.53000 0.51000 1.1000 2.9500 5.4600 6.3700 6.3300 5.9200 5.4400 4.9400 4.6200 4.8000 5.4900 6.0700 5.5600 4.6700 4.1400 3.8100 3.4300 3.3800 4.2000 5.9300 7.3800 8.2100 8.6500 8.8400 8.9800 9.2800 9.7800 10.090 10.020 9.8500 9.5600 9.3700 9.4800 10.110 682 56.305 60.607 51.049 42.933 7.6629 7.1632 6.1888 0.63000 0.51000 1.0900 3.2800 6.8300 8.3100 8.3900 8.0100 7.5200 6.9500 6.6200 6.7900 7.4900 8.1700 7.8500 7.0300 6.4600 6.0100 5.5200 5.3700 6.0600 7.5000 8.6900 9.3800 9.7500 9.9200 10.060 10.340 10.760 11.020 10.980 10.850 10.640 10.480 10.620 11.080 683 56.321 53.125 60.065 43.812 7.7230 7.7614 5.7944 0.41000 0.52000 1.0500 3.0900 6.1500 7.4200 7.5500 7.2900 6.9600 6.5800 6.4200 6.8700 8.0600 9.2100 9.1100 8.3200 7.6400 7.0300 6.3600 6.1000 6.6000 7.7100 8.6100 9.1100 9.4000 9.5300 9.6500 9.9200 10.280 10.560 10.510 10.390 10.180 10.060 10.180 10.670 684 78.212 90.921 100.00 28.713 3.9857 3.2125 2.3582 0.27000 0.42000 1.0600 2.3300 3.1600 3.3200 3.2200 2.9400 2.6700 2.4700 2.3700 2.6700 3.3500 3.8300 3.2700 2.4300 2.0600 1.9400 1.7800 1.8400 2.5700 4.0000 5.1700 5.7800 6.1000 6.2200 6.3400 6.6300 7.1600 7.4900 7.4200 7.1900 6.8800 6.6500 6.8000 7.4500 685 87.424 81.824 81.248 32.150 3.4353 3.3337 3.4776 0.42000 0.54000 1.1600 2.6800 4.2900 4.8400 4.7800 4.4900 4.1100 3.7200 3.5200 3.7500 4.4400 4.9900 4.4500 3.5400 3.0100 2.6500 2.2500 2.1000 2.4800 3.2800 3.8100 4.0300 4.1500 4.2000 4.2600 4.5000 4.9200 5.1900 5.1300 4.9400 4.6700 4.4900 4.6300 5.1800 686 78.432 77.881 73.759 46.862 3.5961 3.3516 3.2181 0.53000 0.43000 1.0500 2.4900 4.0200 4.5400 4.4800 4.1500 3.8000 3.4600 3.2300 3.3800 3.9100 4.3400 3.9900 3.3400 2.9500 2.6800 2.3800 2.2900 2.6800 3.4800 4.0800 4.3700 4.5300 4.6100 4.6700 4.8800 5.2300 5.4400 5.4200 5.2800 5.0800 4.9300 5.0500 5.4900 687 39.646 49.447 24.519 41.897 11.729 10.853 10.699 0.84000 0.62000 1.2900 4.5700 11.220 14.430 14.680 14.120 13.260 12.300 11.630 11.390 11.530 11.740 11.220 10.370 9.7400 9.2500 8.7200 8.5800 9.4200 11.230 12.850 13.880 14.430 14.680 14.850 15.130 15.500 15.710 15.710 15.620 15.500 15.410 15.500 16.010 688 20.087 30.165 12.060 42.996 17.828 17.152 15.716 0.97000 0.68000 1.3100 5.7300 15.350 20.430 21.030 20.480 19.600 18.640 17.940 17.590 17.570 17.630 17.200 16.510 16.010 15.600 15.150 15.110 15.910 17.610 19.180 20.190 20.780 21.040 21.230 21.520 21.830 21.990 22.020 22.010 21.950 21.960 22.080 22.440 689 48.754 44.766 39.136 38.222 11.293 11.222 9.7667 0.87000 0.62000 1.2200 4.2900 9.9200 12.540 12.910 12.570 11.990 11.350 10.970 11.210 12.150 13.090 12.800 11.820 10.950 10.150 9.3200 8.9800 9.5900 11.030 12.220 12.940 13.340 13.520 13.680 13.990 14.440 14.730 14.700 14.580 14.370 14.200 14.350 14.880 690 5.6645 17.371 12.916 50.017 18.982 18.640 14.762 1.1500 0.75000 1.3000 5.4500 14.210 18.660 19.260 18.880 18.330 17.730 17.330 17.300 17.610 18.010 18.020 17.760 17.640 17.580 17.470 17.640 18.300 19.530 20.620 21.350 21.800 22.030 22.230 22.450 22.680 22.790 22.870 22.900 22.970 23.060 23.160 23.460 691 52.432 57.028 46.833 29.619 11.002 10.335 9.0448 0.71000 0.65000 1.2500 4.3200 9.6100 12.000 12.190 11.720 11.040 10.300 9.8200 10.040 10.980 11.920 11.460 10.310 9.4300 8.6900 7.9100 7.6600 8.5900 10.630 12.390 13.440 14.020 14.290 14.490 14.860 15.400 15.740 15.690 15.510 15.240 15.040 15.170 15.850 692 32.729 39.463 35.650 37.377 14.978 14.479 11.279 0.89000 0.77000 1.3200 4.6900 11.280 14.500 14.850 14.440 13.830 13.140 12.760 13.040 14.150 15.330 15.240 14.370 13.640 12.980 12.300 12.120 13.010 14.970 16.710 17.830 18.440 18.730 18.940 19.260 19.670 19.900 19.910 19.830 19.680 19.610 19.710 20.240 693 0.0000 32.065 15.298 45.228 20.564 18.464 14.226 0.84000 0.80000 1.2900 5.5600 14.560 18.990 19.190 18.430 17.530 16.620 15.960 15.730 15.930 16.270 16.130 15.750 15.670 15.790 15.880 16.330 17.850 20.760 23.610 25.580 26.710 27.220 27.540 27.800 28.010 28.130 28.220 28.310 28.440 28.580 28.680 28.880 694 24.165 25.558 21.036 33.927 20.948 20.902 17.393 1.0500 0.85000 1.3900 6.2700 16.450 21.810 22.660 22.310 21.610 20.820 20.300 20.460 21.310 22.250 22.070 21.150 20.330 19.540 18.740 18.490 19.230 20.970 22.500 23.510 24.080 24.380 24.610 24.940 25.380 25.630 25.670 25.600 25.490 25.410 25.560 26.070 695 29.307 47.855 26.863 34.731 16.220 14.558 12.386 1.0200 0.66000 1.2300 5.0900 12.820 16.590 16.830 16.190 15.280 14.300 13.620 13.490 13.900 14.360 13.910 13.040 12.470 12.080 11.650 11.700 13.070 15.900 18.510 20.250 21.230 21.650 21.950 22.320 22.780 23.050 23.060 23.000 22.870 22.800 22.930 23.480 696 14.897 14.789 0.0000 39.976 23.272 23.265 22.484 1.2900 0.88000 1.4800 7.1300 20.510 28.350 29.790 29.310 28.350 27.290 26.390 25.700 25.080 24.550 23.950 23.200 22.610 22.070 21.490 21.340 21.820 23.000 24.030 24.710 25.120 25.330 25.510 25.780 26.080 26.250 26.290 26.270 26.250 26.280 26.410 26.780 697 0.97446 21.493 0.0000 40.593 25.590 23.987 21.045 1.1300 0.88000 1.5600 7.5000 20.550 27.480 28.250 27.390 26.280 25.100 24.180 23.450 22.860 22.440 22.020 21.600 21.500 21.610 21.660 22.070 23.330 25.730 27.990 29.580 30.510 30.920 31.220 31.530 31.760 31.900 32.010 32.100 32.200 32.370 32.500 32.700 698 0.0000 18.521 5.8733 30.814 33.419 31.724 25.885 1.8300 1.0400 1.6700 8.1600 23.930 33.180 34.450 33.540 32.320 31.030 30.070 29.570 29.490 29.600 29.350 28.880 28.810 28.950 29.050 29.560 31.110 34.030 36.800 38.760 39.890 40.370 40.760 41.090 41.310 41.440 41.550 41.670 41.820 42.000 42.110 42.370 699 21.991 29.675 8.7282 31.686 22.441 21.523 20.898 1.1000 0.84000 1.4000 6.9300 19.800 27.090 28.140 27.430 26.210 24.880 23.830 23.220 22.920 22.710 21.950 20.880 20.070 19.380 18.670 18.500 19.510 21.780 23.900 25.320 26.100 26.450 26.710 27.080 27.490 27.720 27.730 27.690 27.570 27.560 27.670 28.170 700 0.0000 7.5621 0.0000 38.291 31.361 31.359 27.302 1.5300 1.0900 1.6200 8.0400 24.390 34.340 36.000 35.370 34.290 33.200 32.300 31.620 31.130 30.780 30.540 30.230 30.190 30.240 30.260 30.520 31.100 32.120 33.000 33.610 33.960 34.120 34.300 34.500 34.650 34.730 34.770 34.840 34.950 35.080 35.140 35.290 701 64.611 100.00 97.531 41.113 4.3394 3.0373 2.1630 0.54000 0.58000 1.0800 2.2400 3.0300 3.1800 3.0400 2.7800 2.5000 2.2700 2.1200 2.2200 2.5600 2.7300 2.2200 1.6100 1.4100 1.4300 1.4000 1.5700 2.4600 4.2600 5.8500 6.7900 7.2900 7.5200 7.6600 7.9400 8.3600 8.6200 8.5700 8.4600 8.2100 8.0600 8.1800 8.7000 702 79.263 100.00 96.494 34.627 3.5281 2.6509 2.3249 0.33000 0.46000 1.0500 2.3100 3.2100 3.3900 3.2600 2.9900 2.6900 2.4600 2.2900 2.4100 2.7900 2.9700 2.3700 1.6600 1.4200 1.4100 1.3600 1.4700 2.1600 3.5000 4.5800 5.1700 5.4600 5.6000 5.7000 5.9800 6.4300 6.7200 6.6700 6.4800 6.2000 6.0100 6.1500 6.7500 703 23.967 62.372 45.870 50.070 10.791 8.8499 6.4674 0.66000 0.64000 1.2000 3.5600 7.5000 9.1100 9.0100 8.4400 7.8000 7.1600 6.7200 6.7000 7.1300 7.6000 7.3400 6.7800 6.5300 6.5100 6.4300 6.7000 8.0700 10.760 13.230 14.860 15.730 16.130 16.370 16.640 16.950 17.110 17.120 17.130 17.060 17.060 17.150 17.430 704 45.848 91.475 72.063 41.540 6.9819 4.7210 3.3194 0.72000 0.59000 1.0700 2.5900 4.4400 5.0100 4.8400 4.4000 3.9500 3.4700 3.1300 3.1100 3.3700 3.5300 3.0100 2.3400 2.1300 2.1800 2.1700 2.4300 3.8400 6.6700 9.3300 11.080 12.030 12.450 12.700 13.050 13.480 13.770 13.760 13.670 13.480 13.390 13.540 14.010 705 65.614 86.997 100.00 45.212 4.4327 3.5813 2.1333 0.37000 0.56000 1.0400 2.1500 2.8800 2.9900 2.8800 2.6300 2.4000 2.2300 2.1400 2.4300 3.0800 3.6100 3.3000 2.7000 2.4500 2.3500 2.2300 2.3000 3.0500 4.5100 5.7500 6.4700 6.8500 7.0400 7.1600 7.4100 7.8000 8.0400 8.0100 7.8800 7.6600 7.5200 7.6400 8.1200 706 65.927 90.793 62.142 33.062 5.3615 3.8442 4.3731 0.42000 0.47000 1.0500 2.9700 5.6800 6.6700 6.5400 5.9700 5.3100 4.5800 4.0300 3.8400 3.9100 3.8800 3.1700 2.3800 2.0600 2.0000 1.8800 2.0100 3.0000 4.9700 6.6900 7.7100 8.2500 8.4700 8.6400 8.9600 9.4500 9.7500 9.6900 9.5300 9.2600 9.0500 9.2000 9.7800 707 48.065 66.818 48.133 31.062 10.609 8.9822 7.7295 0.72000 0.54000 1.1900 3.9600 8.6700 10.730 10.750 10.160 9.4200 8.5800 8.0400 8.0700 8.6700 9.2600 8.7000 7.6700 7.0400 6.6400 6.1900 6.1900 7.5200 10.230 12.640 14.180 15.010 15.360 15.600 15.990 16.530 16.850 16.830 16.660 16.400 16.230 16.360 16.970 708 50.989 73.499 54.310 42.310 7.9937 6.6715 5.8482 0.69000 0.75000 1.2800 3.5200 6.9100 8.3500 8.2400 7.7100 7.0600 6.3800 5.9200 5.9200 6.3500 6.7400 6.2700 5.4800 5.0700 4.8500 4.5900 4.6500 5.6900 7.7800 9.6100 10.720 11.310 11.550 11.720 12.000 12.410 12.650 12.610 12.490 12.270 12.120 12.220 12.790 709 47.265 81.092 71.877 48.160 6.6944 5.1608 3.5086 0.58000 0.62000 1.1600 2.6400 4.4300 5.0600 4.9000 4.5600 4.1400 3.7500 3.4900 3.6000 4.0900 4.5000 4.1600 3.5600 3.3300 3.2700 3.2000 3.3700 4.4500 6.6300 8.6000 9.8500 10.510 10.800 10.980 11.250 11.590 11.800 11.800 11.720 11.560 11.460 11.570 11.970 710 62.211 87.337 74.533 31.173 6.5166 5.0484 3.9953 0.49000 0.61000 1.1900 2.8900 5.0200 5.7200 5.6400 5.1900 4.7500 4.2700 3.9500 4.0900 4.6900 5.1200 4.5100 3.6000 3.2100 3.0600 2.8700 2.9800 4.1200 6.4000 8.3700 9.5000 10.090 10.330 10.500 10.850 11.390 11.710 11.630 11.420 11.100 10.860 10.960 11.630 711 40.036 76.416 48.511 34.128 10.664 8.0607 6.5691 0.71000 0.61000 1.1300 3.6800 7.8700 9.6100 9.4500 8.7600 7.9800 7.1100 6.4900 6.3500 6.6200 6.8700 6.2700 5.4500 5.1100 5.0400 4.9100 5.1700 6.8300 10.180 13.350 15.470 16.630 17.150 17.460 17.870 18.380 18.670 18.680 18.580 18.370 18.250 18.390 19.010 712 24.218 58.222 36.977 37.668 14.662 12.165 9.0532 0.82000 0.59000 1.1200 4.2900 10.010 12.560 12.500 11.850 11.030 10.170 9.5700 9.5400 10.040 10.610 10.280 9.5700 9.2200 9.1200 8.9800 9.2700 10.990 14.430 17.710 19.960 21.210 21.770 22.130 22.500 22.920 23.160 23.180 23.160 23.090 23.040 23.180 23.620 713 1.0615 43.252 0.0000 34.417 25.122 20.874 18.997 1.3000 0.86000 1.4500 7.1300 20.020 26.640 26.760 25.270 23.590 21.820 20.390 19.310 18.370 17.680 16.890 16.150 15.980 16.150 16.260 16.870 19.280 24.080 28.960 32.580 34.650 35.610 36.180 36.600 36.960 37.110 37.220 37.350 37.480 37.700 37.830 38.080 714 30.271 62.297 23.647 38.795 13.024 10.600 10.057 0.62000 0.59000 1.2200 4.6900 11.420 14.410 14.350 13.470 12.380 11.210 10.330 9.8700 9.7100 9.6500 9.0200 8.2100 7.8500 7.7100 7.5400 7.7600 9.3200 12.430 15.330 17.290 18.370 18.850 19.170 19.510 19.930 20.200 20.220 20.160 20.050 19.970 20.050 20.570 715 0.0000 56.457 8.2731 47.533 16.483 12.900 11.359 0.95000 0.70000 1.2500 5.2100 13.060 16.540 16.270 15.170 13.950 12.700 11.720 11.040 10.530 10.180 9.6200 9.0400 8.9100 9.0500 9.1600 9.6600 11.700 15.700 19.720 22.640 24.290 25.020 25.460 25.800 26.040 26.180 26.300 26.400 26.570 26.710 26.830 26.970 716 3.7447 36.094 0.0000 42.441 21.144 18.568 17.206 1.0800 0.80000 1.3900 6.4600 17.770 23.600 23.840 22.740 21.400 20.010 18.880 18.010 17.290 16.730 16.140 15.570 15.390 15.460 15.490 15.870 17.500 20.670 23.760 25.950 27.170 27.730 28.080 28.380 28.670 28.800 28.890 28.960 29.040 29.170 29.260 29.530 717 0.0000 42.960 13.784 31.001 27.216 22.633 18.165 1.2300 0.88000 1.4600 6.9100 19.150 25.310 25.350 23.930 22.380 20.770 19.540 18.920 18.750 18.800 18.250 17.490 17.300 17.470 17.600 18.270 20.970 26.400 32.010 36.180 38.570 39.630 40.210 40.650 40.940 41.060 41.150 41.280 41.410 41.590 41.670 41.850 718 0.0000 32.046 8.3991 34.402 27.458 24.394 20.221 1.3200 0.88000 1.4300 7.0700 20.120 27.100 27.580 26.470 25.110 23.690 22.620 21.980 21.700 21.600 21.160 20.580 20.450 20.610 20.720 21.290 23.300 27.250 31.190 34.070 35.720 36.430 36.900 37.260 37.530 37.650 37.770 37.900 38.050 38.260 38.340 38.590 719 10.303 33.899 0.0000 30.322 27.070 24.313 23.147 1.4200 0.93000 1.5700 7.9600 22.810 31.030 31.830 30.590 28.980 27.230 25.820 24.700 23.730 22.970 22.110 21.210 20.820 20.670 20.470 20.800 22.640 26.330 29.900 32.440 33.880 34.530 34.960 35.390 35.820 36.050 36.130 36.150 36.180 36.260 36.410 36.870 720 15.535 100.00 44.116 43.423 10.641 6.1658 5.0092 0.78000 0.66000 1.1500 3.4800 7.1600 8.3800 7.9100 6.9800 6.0100 5.0100 4.2100 3.7300 3.3800 3.0700 2.3900 1.7200 1.5400 1.6700 1.7500 2.2000 4.4100 9.2000 14.230 17.910 20.040 20.960 21.500 21.930 22.310 22.520 22.610 22.630 22.630 22.640 22.780 23.080 721 17.039 73.661 33.189 48.043 11.614 8.4878 6.9756 0.78000 0.67000 1.2100 3.9400 8.6600 10.490 10.240 9.3700 8.4600 7.5000 6.8000 6.4300 6.3400 6.3300 5.8500 5.2600 5.0700 5.1400 5.1700 5.5600 7.3400 10.960 14.550 17.060 18.450 19.070 19.450 19.780 20.110 20.290 20.370 20.370 20.370 20.390 20.520 20.820 722 29.493 85.813 38.996 34.509 11.557 7.6668 6.8042 0.67000 0.57000 1.1000 3.9500 8.8200 10.760 10.360 9.3700 8.2400 7.0600 6.1700 5.7000 5.4700 5.3200 4.5800 3.7900 3.5400 3.6100 3.6200 4.0100 6.0700 10.430 14.840 17.950 19.700 20.460 20.900 21.320 21.800 22.070 22.120 22.060 21.920 21.850 21.970 22.430 723 57.747 100.00 68.297 34.613 6.0216 3.8765 3.6615 0.39000 0.51000 1.0600 2.8200 4.9800 5.7500 5.5200 4.9900 4.4100 3.7700 3.3000 3.1400 3.1700 3.0900 2.3900 1.6600 1.4300 1.4800 1.4700 1.7100 2.9700 5.5600 7.9900 9.5300 10.340 10.700 10.920 11.270 11.760 12.060 12.030 11.890 11.610 11.440 11.590 12.180 724 29.894 100.00 32.714 42.536 9.1756 5.3843 5.7030 0.54000 0.57000 1.1300 3.7000 7.9900 9.5900 9.0800 8.0500 6.9000 5.7100 4.7500 4.1000 3.5600 3.1400 2.3600 1.6600 1.4700 1.5700 1.6200 2.0100 3.9100 7.9400 12.010 14.880 16.480 17.190 17.600 18.000 18.430 18.690 18.730 18.680 18.590 18.550 18.650 19.140 725 36.410 84.494 28.676 41.524 9.5333 6.5961 7.0520 0.64000 0.54000 1.1700 3.9800 9.0200 11.120 10.730 9.7600 8.6100 7.3800 6.4400 5.8500 5.4500 5.1500 4.4400 3.7200 3.4700 3.4900 3.4700 3.7700 5.3600 8.6500 11.840 13.990 15.180 15.680 16.000 16.360 16.790 17.020 17.030 16.970 16.840 16.760 16.900 17.340 726 18.878 83.687 16.605 29.007 16.388 10.626 10.740 0.85000 0.57000 1.2800 5.4300 13.900 17.470 16.730 14.950 13.060 11.070 9.5500 8.4800 7.6500 7.0100 5.9700 5.0000 4.7100 4.8400 4.9100 5.4600 8.2800 14.270 20.560 25.230 27.910 29.070 29.710 30.260 30.780 31.060 31.110 31.070 30.980 30.970 31.050 31.530 727 0.0000 68.955 17.446 30.725 22.053 15.292 12.310 1.1100 0.86000 1.3600 5.8300 15.000 18.990 18.330 16.680 14.970 13.190 11.860 11.010 10.480 10.160 9.3300 8.4400 8.2300 8.4400 8.6000 9.3500 12.660 19.660 27.350 33.420 37.080 38.740 39.660 40.260 40.660 40.860 41.010 41.160 41.350 41.560 41.680 41.900 728 8.3581 69.448 0.0000 34.325 18.861 13.317 13.813 0.90000 0.69000 1.3000 6.2000 16.750 21.630 20.940 19.010 16.930 14.770 13.080 11.760 10.610 9.7500 8.7300 7.8500 7.5800 7.7100 7.7900 8.3800 11.100 16.780 22.760 27.220 29.810 30.980 31.630 32.130 32.560 32.780 32.860 32.940 32.970 33.050 33.140 33.520 729 12.756 59.921 14.520 35.435 18.445 14.338 12.862 0.93000 0.69000 1.3300 5.8000 14.780 18.790 18.510 17.250 15.810 14.290 13.120 12.380 11.920 11.640 10.890 10.070 9.8000 9.8600 9.8700 10.360 12.700 17.400 22.100 25.480 27.410 28.280 28.770 29.240 29.660 29.900 29.980 30.010 29.990 30.060 30.180 30.600 730 9.6446 59.117 21.476 29.077 22.762 17.584 14.512 1.0700 0.77000 1.4000 6.0300 16.370 21.220 20.900 19.410 17.760 16.050 14.780 14.120 13.930 13.930 13.170 12.180 11.870 11.960 11.970 12.580 15.510 21.520 27.640 32.140 34.650 35.750 36.370 36.850 37.280 37.480 37.540 37.540 37.510 37.540 37.570 37.930 731 15.971 68.271 35.584 37.240 16.086 12.088 9.2949 1.00000 0.92000 1.3600 4.7100 11.030 13.710 13.380 12.390 11.280 10.120 9.2900 8.9600 9.1000 9.3100 8.7200 7.9100 7.6400 7.7000 7.7100 8.2100 10.570 15.360 20.100 23.470 25.330 26.130 26.580 26.960 27.340 27.560 27.570 27.550 27.510 27.460 27.550 27.900 732 0.0000 71.492 2.1637 45.223 16.436 11.518 11.402 0.68000 0.69000 1.2200 5.4000 14.140 17.930 17.260 15.610 13.910 12.160 10.790 9.7400 8.8300 8.1500 7.3100 6.5700 6.3600 6.5300 6.6400 7.2000 9.7200 14.860 20.160 24.090 26.280 27.260 27.780 28.150 28.410 28.520 28.620 28.730 28.840 28.960 29.040 29.190 733 0.0000 76.307 21.658 41.231 16.713 11.182 9.2254 0.87000 0.69000 1.2200 4.8500 11.800 14.620 13.930 12.590 11.170 9.7000 8.5900 7.8800 7.4000 7.0700 6.3500 5.6100 5.4300 5.5900 5.7200 6.3300 9.0800 14.910 21.140 25.900 28.660 29.910 30.580 31.010 31.320 31.480 31.600 31.700 31.850 32.010 32.100 32.270 734 22.863 100.00 26.642 34.083 12.281 7.0046 7.2571 0.64000 0.58000 1.1600 4.3400 10.270 12.500 11.750 10.310 8.7600 7.1300 5.8700 4.9900 4.2700 3.6900 2.7300 1.8900 1.6700 1.7900 1.8800 2.3800 4.8700 10.320 16.050 20.260 22.670 23.720 24.280 24.800 25.290 25.570 25.610 25.590 25.480 25.440 25.560 26.020 735 0.0000 100.00 2.4785 37.287 16.373 8.9379 9.2609 0.79000 0.60000 1.2000 5.3400 13.600 16.770 15.430 13.220 11.070 8.8200 7.1000 5.8100 4.6400 3.7900 2.7600 1.9200 1.7000 1.8800 2.0300 2.6800 5.8600 12.970 20.950 27.360 31.230 33.030 33.960 34.560 34.940 35.140 35.310 35.460 35.610 35.790 35.910 36.070 736 0.0000 100.00 28.588 39.004 15.302 8.5428 6.9010 0.76000 0.67000 1.1800 4.4000 10.020 12.040 11.140 9.7000 8.2500 6.7400 5.5900 4.7800 4.1500 3.6300 2.7800 1.9700 1.7800 1.9500 2.1000 2.7000 5.7500 12.540 20.110 26.110 29.710 31.340 32.200 32.750 33.080 33.280 33.410 33.550 33.690 33.870 33.930 34.110 737 0.0000 100.00 16.223 46.560 12.833 7.2631 6.8988 0.85000 0.74000 1.2400 4.3600 10.060 12.070 11.200 9.7400 8.2600 6.7300 5.5600 4.6900 3.9400 3.3700 2.5700 1.8600 1.6800 1.8300 1.9500 2.4900 5.0900 10.740 16.810 21.430 24.090 25.290 25.920 26.330 26.610 26.760 26.870 26.980 27.090 27.230 27.310 27.500 738 0.0000 83.869 1.5154 40.819 16.109 10.063 10.115 0.75000 0.61000 1.2500 5.3400 13.600 16.950 15.970 14.110 12.230 10.290 8.7800 7.6300 6.6000 5.8600 4.9600 4.2000 4.0100 4.1800 4.3100 4.9000 7.6700 13.660 20.160 25.230 28.210 29.580 30.310 30.810 31.140 31.350 31.480 31.610 31.770 31.940 32.100 32.250 739 0.0000 83.939 19.287 28.970 21.076 12.997 10.845 0.88000 0.73000 1.3000 5.6100 14.430 17.990 16.940 15.030 13.090 11.060 9.5300 8.4800 7.6800 7.1000 6.0700 5.1200 4.8700 5.1000 5.2500 6.0100 9.6300 17.590 26.640 34.010 38.540 40.620 41.710 42.390 42.810 43.040 43.210 43.370 43.550 43.780 43.870 44.040 740 0.0000 76.261 0.0000 29.261 21.708 14.030 13.706 1.1100 0.82000 1.3900 6.5600 17.650 22.510 21.360 19.000 16.630 14.170 12.300 10.840 9.5600 8.6400 7.5400 6.6000 6.3600 6.5700 6.7200 7.4600 10.830 18.250 26.610 33.380 37.500 39.410 40.430 41.090 41.490 41.750 41.900 42.070 42.250 42.460 42.580 42.820 741 12.693 87.620 30.158 32.830 15.437 9.6838 8.0580 0.64000 0.65000 1.2200 4.5600 10.730 13.160 12.490 11.130 9.7300 8.2600 7.1200 6.4300 5.9700 5.6400 4.8300 3.9900 3.7600 3.9100 4.0100 4.5900 7.3700 13.420 19.890 24.820 27.700 28.980 29.700 30.250 30.730 31.010 31.070 31.100 31.120 31.150 31.270 31.690 742 100.00 23.106 81.208 35.603 3.9743 7.3205 5.3399 0.68000 0.61000 1.1700 2.8300 4.7900 5.6800 5.9200 5.9600 5.9800 6.0700 6.4900 8.2000 11.860 15.640 16.090 14.030 11.290 8.2900 5.5800 3.9300 3.2100 2.9100 2.6200 2.3800 2.2900 2.2700 2.2800 2.4700 2.8500 3.1000 3.0200 2.8400 2.6000 2.4200 2.5700 3.0800 743 100.00 0.0000 100.00 48.837 3.3340 6.9206 3.0580 0.56000 0.41000 0.95000 2.0300 2.7500 2.9600 2.9400 2.8600 2.9200 3.1000 3.6400 5.5500 9.7500 14.450 15.760 14.140 11.450 8.3500 5.5700 3.8500 2.9800 2.5200 2.1600 1.9200 1.8400 1.8100 1.8300 1.9800 2.2800 2.4900 2.4200 2.2900 2.0700 1.9900 2.1000 2.5100 744 100.00 0.0000 80.807 40.877 4.1971 8.4736 5.4943 0.40000 0.57000 1.0500 2.6600 4.5700 5.4600 5.7700 5.8900 6.0400 6.2600 6.8800 8.9500 13.440 18.320 19.370 17.120 13.710 9.8900 6.5500 4.4600 3.4300 2.8900 2.4500 2.1700 2.0600 2.0400 2.0600 2.2400 2.5900 2.8300 2.7600 2.5900 2.3600 2.2000 2.3600 2.8400 745 98.818 0.0000 100.00 38.595 3.9283 8.4873 3.5377 0.38000 0.45000 0.95000 2.1000 2.9500 3.1900 3.2300 3.1700 3.3100 3.5800 4.3000 6.7100 12.090 18.240 19.950 17.720 14.140 10.160 6.6700 4.5400 3.4800 2.9100 2.4800 2.1800 2.0800 2.0500 2.0800 2.2500 2.6000 2.8400 2.8000 2.6100 2.3700 2.2200 2.3600 2.8200 746 84.949 0.0000 79.149 34.857 6.9429 11.832 6.4136 0.56000 0.65000 1.1700 2.9600 5.2200 6.3300 6.6700 6.8300 7.0100 7.2800 8.0000 10.430 15.840 22.080 23.780 21.440 17.730 13.590 9.9400 7.7000 6.5600 5.9400 5.4600 5.1200 5.0100 4.9700 4.9800 5.2200 5.6500 5.9200 5.8500 5.6600 5.3700 5.1900 5.3100 5.8600 747 100.00 0.0000 83.084 30.241 5.1444 10.776 6.4512 0.56000 0.64000 1.2600 2.9600 5.0600 6.1600 6.5400 6.7200 6.9700 7.2700 8.1300 10.900 17.010 23.890 25.380 22.200 17.540 12.500 8.1400 5.5200 4.2100 3.5200 3.0000 2.6300 2.4900 2.4600 2.4600 2.6900 3.1100 3.3700 3.3000 3.0900 2.7900 2.6100 2.7400 3.4000 748 100.00 22.070 93.982 48.491 2.9934 5.5355 3.1342 0.22000 0.46000 0.94000 2.1100 3.1000 3.3900 3.3700 3.2800 3.2400 3.3100 3.6500 5.0400 8.0600 11.300 11.940 10.600 8.6600 6.4700 4.4300 3.1800 2.6200 2.3800 2.1500 1.9500 1.8800 1.8600 1.8800 2.0200 2.3200 2.5100 2.4600 2.3100 2.1300 2.0000 2.0900 2.5000 749 94.089 20.542 100.00 38.342 3.9260 7.1540 3.2563 0.37000 0.58000 1.1400 2.2300 3.1000 3.2900 3.2800 3.1800 3.1900 3.3200 3.8300 5.6400 9.7000 14.160 15.220 13.540 11.080 8.3200 5.8200 4.3000 3.6200 3.3400 3.0600 2.8400 2.7600 2.7400 2.7500 2.9500 3.2900 3.5400 3.4600 3.3000 3.0600 2.9200 3.0400 3.5400 750 84.728 26.530 73.102 31.415 6.1154 9.1734 6.2833 0.72000 0.62000 1.2100 3.1200 5.6400 6.8800 7.1800 7.2000 7.2000 7.2000 7.5700 9.2100 12.770 16.520 17.060 15.170 12.710 10.030 7.5500 6.0500 5.4900 5.3700 5.2100 5.0500 5.0000 4.9900 5.0300 5.2600 5.6900 5.9700 5.8900 5.7300 5.4200 5.2100 5.3700 5.9800 751 98.659 42.316 100.00 30.516 3.1649 5.6128 3.0901 0.56000 0.50000 1.0500 2.3100 3.1700 3.3800 3.3300 3.1800 3.1300 3.1800 3.5400 5.0300 8.3000 11.680 12.100 10.450 8.4400 6.3000 4.3300 3.1400 2.7200 2.6500 2.5000 2.3200 2.2600 2.2500 2.2700 2.4700 2.8600 3.1300 3.0500 2.8500 2.6000 2.4200 2.5700 3.1100 752 91.199 45.677 100.00 35.904 3.5978 5.3736 2.8246 0.28000 0.52000 1.00000 2.2200 3.0300 3.2100 3.1400 2.9900 2.9100 2.9200 3.1900 4.4100 7.0400 9.7400 10.070 8.8200 7.3800 5.8400 4.3700 3.5000 3.2800 3.3800 3.3600 3.2600 3.2400 3.2300 3.2700 3.4900 3.8700 4.1200 4.0500 3.8900 3.6200 3.4500 3.5800 4.1100 753 84.289 26.683 100.00 43.702 4.8958 7.4111 3.1261 0.51000 0.63000 1.1400 2.2500 3.0900 3.2900 3.2400 3.1500 3.1300 3.2100 3.6400 5.1900 8.6600 12.470 13.420 12.190 10.400 8.3700 6.4600 5.3000 4.8400 4.7300 4.5800 4.4200 4.3700 4.3600 4.3900 4.5900 4.9600 5.2000 5.1100 4.9600 4.7200 4.5600 4.6600 5.1500 754 67.985 0.0000 74.807 43.567 8.4528 12.186 6.0450 0.44000 0.53000 1.0500 2.8200 5.0600 6.1400 6.4600 6.5700 6.7000 6.9300 7.5300 9.5500 13.940 18.870 20.430 19.060 16.620 13.760 11.140 9.5000 8.6500 8.1800 7.8000 7.5400 7.4600 7.4500 7.4900 7.7200 8.1000 8.3600 8.3000 8.1500 7.9200 7.7700 7.8700 8.3900 755 65.016 0.0000 67.397 32.192 11.605 16.466 8.9584 0.70000 0.64000 1.1800 3.5400 7.2800 9.1100 9.7300 10.010 10.240 10.530 11.280 13.780 19.240 25.490 27.410 25.420 22.110 18.330 14.950 12.860 11.770 11.170 10.680 10.350 10.240 10.210 10.270 10.560 11.050 11.370 11.310 11.110 10.810 10.590 10.710 11.370 756 82.134 0.0000 71.511 44.296 6.1083 9.8289 6.2913 0.64000 0.63000 1.1600 2.8600 5.3300 6.4800 6.9000 7.0300 7.1500 7.3200 7.8600 9.6800 13.630 17.860 18.870 17.060 14.290 11.120 8.3100 6.5700 5.6800 5.2200 4.8500 4.5900 4.5200 4.4900 4.5200 4.6900 5.0300 5.2400 5.1900 5.0600 4.8400 4.6900 4.8000 5.2500 757 64.915 0.0000 55.246 36.343 11.411 15.781 11.267 0.75000 0.58000 1.2100 3.9400 9.1400 11.990 12.940 13.360 13.470 13.660 14.180 16.150 20.350 24.890 25.880 23.830 20.740 17.250 14.090 12.130 11.090 10.540 10.090 9.7700 9.6700 9.6300 9.6800 9.9300 10.360 10.620 10.560 10.390 10.110 9.9200 10.040 10.620 758 79.322 24.275 83.705 32.189 7.1587 10.468 5.5393 0.74000 0.62000 1.1400 2.7900 4.8900 5.8000 6.0500 6.0400 6.0800 6.2000 6.7000 8.6600 12.940 17.540 18.530 16.730 14.290 11.550 9.0300 7.5000 6.8900 6.8000 6.6300 6.4300 6.3800 6.3600 6.3900 6.6500 7.1100 7.4000 7.2900 7.1100 6.7800 6.5900 6.7300 7.3200 759 69.031 43.816 100.00 46.165 5.5275 6.5998 2.6998 0.37000 0.58000 1.1200 2.2400 2.9700 3.1500 3.0600 2.8800 2.8000 2.7700 3.0100 4.0400 6.3800 8.8700 9.4100 8.6600 7.7400 6.7600 5.7900 5.2600 5.3300 5.7900 6.1000 6.2300 6.3100 6.3600 6.4300 6.6400 6.9800 7.1800 7.1500 7.0200 6.8300 6.7000 6.7700 7.2600 760 75.692 55.123 100.00 31.749 5.7562 6.8243 3.0024 0.56000 0.52000 1.0700 2.2800 3.2100 3.4400 3.3900 3.2300 3.1200 3.1200 3.3800 4.5900 7.2300 9.9100 10.200 9.0200 7.8500 6.7100 5.5600 4.9600 5.1800 5.9600 6.4700 6.6900 6.8000 6.8600 6.9200 7.2000 7.6800 7.9700 7.8900 7.6900 7.3700 7.1600 7.2800 7.9000 761 78.068 36.738 77.236 34.416 6.2793 8.4025 5.1997 0.55000 0.49000 1.0900 2.7600 4.9600 5.8800 6.0900 5.9700 5.9200 5.8300 6.1000 7.4300 10.400 13.510 13.950 12.520 10.790 8.9000 7.1100 6.0500 5.8000 6.0000 6.0700 6.0100 6.0300 6.0400 6.0900 6.3200 6.7800 7.0500 6.9800 6.7900 6.4900 6.3000 6.4200 7.0100 762 72.651 37.184 89.534 40.022 6.1154 7.8208 3.7226 0.41000 0.58000 1.0900 2.4100 3.7400 4.1700 4.2000 4.0800 4.0200 4.0100 4.3000 5.5800 8.4400 11.490 12.120 11.060 9.7200 8.2400 6.8200 6.0100 5.8900 6.1900 6.3500 6.3800 6.4200 6.4600 6.5300 6.7500 7.1400 7.4000 7.3500 7.1900 6.9600 6.7800 6.9000 7.4400 763 85.714 49.775 100.00 43.686 3.7526 4.9981 2.6438 0.57000 0.57000 1.1100 2.2400 2.9800 3.1500 3.0600 2.8800 2.7900 2.7400 2.9200 3.8800 5.9900 8.1400 8.3900 7.4200 6.3600 5.2400 4.1500 3.5400 3.4500 3.6900 3.7800 3.7800 3.7900 3.8100 3.8400 4.0300 4.3800 4.6000 4.5300 4.3900 4.1700 4.0500 4.1500 4.6300 764 78.942 53.058 83.206 34.044 5.4989 6.6077 4.1463 0.39000 0.51000 1.1000 2.7000 4.4100 4.9700 5.0500 4.8500 4.6900 4.5300 4.6600 5.6300 7.8000 9.9800 10.090 8.9300 7.7500 6.5500 5.3700 4.7300 4.8400 5.4000 5.7700 5.9100 5.9900 6.0500 6.1200 6.3800 6.8300 7.1200 7.0600 6.8600 6.5800 6.4000 6.5000 7.1100 765 37.271 0.0000 43.892 40.636 17.047 20.175 13.129 0.89000 0.73000 1.2500 4.6700 11.230 14.660 15.640 15.840 15.890 15.960 16.330 17.860 21.150 24.810 26.000 25.060 23.370 21.340 19.450 18.320 17.680 17.370 17.100 16.930 16.910 16.940 17.010 17.270 17.650 17.900 17.860 17.760 17.630 17.530 17.620 18.130 766 58.947 31.160 67.527 37.189 9.8229 11.482 6.7025 0.71000 0.59000 1.0900 3.1400 6.2700 7.6500 7.9500 7.9200 7.8000 7.7500 7.9900 9.2700 12.080 15.050 15.650 14.570 13.210 11.700 10.240 9.4200 9.4200 9.9700 10.370 10.540 10.670 10.740 10.840 11.120 11.580 11.870 11.810 11.650 11.410 11.230 11.370 11.930 767 54.354 0.0000 53.768 44.435 11.294 14.537 9.7330 0.82000 0.66000 1.2000 3.7600 8.2800 10.650 11.360 11.570 11.620 11.740 12.120 13.630 16.930 20.510 21.490 20.230 18.170 15.750 13.500 12.120 11.370 10.990 10.670 10.440 10.400 10.380 10.440 10.670 11.030 11.250 11.200 11.110 10.900 10.780 10.870 11.380 768 64.552 19.898 73.875 38.517 9.2439 11.998 6.0828 0.44000 0.63000 1.1700 2.9200 5.4700 6.5700 6.8300 6.8400 6.8500 6.9000 7.3400 9.0300 12.850 17.070 18.260 17.010 15.130 12.970 10.940 9.7000 9.2800 9.3100 9.2800 9.1900 9.1900 9.2000 9.2600 9.5200 9.9500 10.220 10.160 9.9800 9.7300 9.5300 9.6400 10.150 769 52.285 22.578 67.741 33.046 12.570 14.852 7.6123 0.79000 0.57000 1.1500 3.3100 6.7500 8.3800 8.7400 8.7800 8.7800 8.8300 9.2300 10.980 14.770 18.880 20.020 18.870 17.230 15.380 13.620 12.640 12.520 13.020 13.370 13.520 13.650 13.730 13.830 14.150 14.650 14.950 14.910 14.730 14.470 14.270 14.400 15.070 770 49.232 0.0000 47.333 33.120 16.310 20.632 14.115 1.00000 0.81000 1.3400 4.7600 11.610 15.430 16.550 16.950 17.030 17.160 17.660 19.610 23.890 28.600 29.850 28.100 25.320 22.130 19.230 17.440 16.500 15.980 15.560 15.250 15.180 15.150 15.230 15.490 15.940 16.210 16.150 15.970 15.730 15.570 15.710 16.270 771 54.726 29.352 76.848 46.139 8.6468 10.047 4.7484 0.44000 0.51000 1.0300 2.6200 4.6100 5.3900 5.4900 5.4100 5.3300 5.3300 5.5800 6.7900 9.5000 12.440 13.270 12.540 11.520 10.350 9.2100 8.6000 8.6000 9.0600 9.3800 9.5500 9.6700 9.7300 9.8100 10.050 10.400 10.600 10.580 10.470 10.300 10.160 10.270 10.700 772 29.850 8.2463 40.471 32.138 21.465 24.063 15.242 1.2000 0.75000 1.3200 5.2900 13.220 17.400 18.410 18.570 18.510 18.440 18.720 20.250 23.710 27.560 28.790 27.890 26.410 24.710 23.080 22.190 22.000 22.280 22.490 22.600 22.730 22.830 22.970 23.280 23.700 23.950 23.950 23.840 23.700 23.610 23.740 24.280 773 29.833 3.0611 27.693 28.517 24.838 28.251 21.438 1.4300 0.87000 1.4700 6.4500 17.950 24.600 26.400 26.710 26.540 26.330 26.450 27.720 30.770 34.060 34.820 33.420 31.380 29.070 26.940 25.710 25.140 25.030 24.890 24.790 24.800 24.830 24.950 25.260 25.690 25.950 25.910 25.820 25.630 25.560 25.670 26.240 774 62.018 50.751 90.522 38.176 7.5423 8.1089 3.5303 0.56000 0.65000 1.1500 2.4800 3.7600 4.1600 4.1400 3.9400 3.8400 3.7700 3.9800 5.0500 7.4500 9.9500 10.340 9.4400 8.5500 7.6900 6.8000 6.4000 6.8300 7.9500 8.8100 9.2500 9.5000 9.6000 9.7100 9.9800 10.430 10.700 10.650 10.490 10.220 10.020 10.150 10.730 775 53.231 48.246 70.640 42.873 8.6976 8.9354 5.2161 0.77000 0.63000 1.2600 2.9800 5.4600 6.4500 6.5300 6.3000 6.0900 5.8500 5.8700 6.6700 8.4800 10.350 10.550 9.7500 9.0000 8.2800 7.5300 7.2300 7.7500 8.9800 9.9600 10.520 10.810 10.930 11.060 11.320 11.720 11.950 11.900 11.790 11.570 11.410 11.530 12.020 776 65.570 48.466 78.642 43.336 6.3016 6.9691 3.9948 0.43000 0.40000 1.00000 2.4800 4.2000 4.8600 4.9300 4.7400 4.5400 4.3800 4.4700 5.2800 7.1700 9.0800 9.3300 8.4900 7.6100 6.7200 5.8300 5.4000 5.6400 6.4100 6.9800 7.2700 7.4400 7.5200 7.6000 7.8400 8.2200 8.4500 8.4100 8.2700 8.0500 7.9200 8.0400 8.4900 777 76.634 65.486 100.00 32.548 4.9054 5.3052 2.7384 0.34000 0.62000 1.1600 2.3300 3.2500 3.3900 3.3100 3.1000 2.9400 2.8500 2.9600 3.8000 5.6600 7.4400 7.3900 6.3800 5.5400 4.8100 4.0500 3.7100 4.1100 5.0400 5.7200 6.0300 6.2200 6.2900 6.3700 6.6300 7.0800 7.3500 7.2900 7.1200 6.8200 6.6400 6.7700 7.3400 778 65.780 64.381 100.00 29.031 6.7525 6.7166 2.7586 0.55000 0.44000 1.0300 2.2400 3.1200 3.3300 3.2400 3.0400 2.9300 2.8700 3.0300 4.0000 6.0900 8.1200 8.1900 7.1800 6.4100 5.7700 5.0900 4.8500 5.5800 7.1300 8.3400 8.9800 9.3300 9.4800 9.6300 9.9700 10.530 10.880 10.820 10.590 10.280 10.020 10.160 10.900 779 18.503 0.0000 37.153 46.036 19.606 21.637 13.278 1.0600 0.75000 1.2200 4.7500 11.760 15.420 16.150 16.200 16.110 16.060 16.270 17.430 20.040 22.970 24.230 23.990 23.330 22.430 21.580 21.110 20.850 20.750 20.660 20.620 20.670 20.710 20.820 21.040 21.290 21.450 21.470 21.460 21.430 21.430 21.540 21.920 780 43.178 26.963 46.799 41.798 12.803 13.863 10.003 0.90000 0.79000 1.3200 4.1800 9.5200 12.130 12.580 12.440 12.130 11.800 11.750 12.520 14.460 16.480 16.780 15.870 14.800 13.640 12.520 11.930 12.110 12.920 13.550 13.900 14.110 14.220 14.320 14.570 14.950 15.170 15.140 15.020 14.840 14.720 14.800 15.310 781 53.381 41.503 67.418 33.406 10.783 11.602 6.5432 0.61000 0.53000 1.1300 3.2400 6.3700 7.7600 7.9600 7.8000 7.6400 7.4500 7.6000 8.7500 11.320 14.020 14.450 13.430 12.300 11.150 10.010 9.4600 9.8800 11.080 12.050 12.600 12.900 13.060 13.200 13.530 14.010 14.330 14.280 14.130 13.870 13.690 13.800 14.470 782 33.013 20.720 49.006 35.627 17.198 18.506 11.107 0.96000 0.81000 1.2300 4.3200 10.170 13.100 13.620 13.530 13.320 13.110 13.240 14.500 17.410 20.610 21.510 20.690 19.560 18.340 17.150 16.590 16.890 17.900 18.750 19.270 19.590 19.740 19.890 20.170 20.570 20.780 20.790 20.690 20.540 20.470 20.610 21.070 783 35.493 26.664 63.779 46.724 11.955 12.735 6.5281 0.56000 0.54000 1.0300 3.1300 6.3000 7.7000 7.8900 7.7500 7.6300 7.5100 7.6600 8.7300 11.130 13.760 14.580 14.050 13.340 12.560 11.780 11.450 11.780 12.660 13.410 13.860 14.130 14.260 14.380 14.610 14.920 15.110 15.100 15.050 14.950 14.890 14.970 15.400 784 37.638 20.489 39.626 30.084 18.439 20.135 14.495 0.89000 0.71000 1.2900 5.1600 13.030 17.170 18.040 18.020 17.720 17.370 17.360 18.440 21.070 23.890 24.380 23.140 21.630 19.960 18.360 17.570 17.700 18.610 19.340 19.800 20.080 20.220 20.380 20.710 21.170 21.460 21.440 21.300 21.110 20.970 21.110 21.700 785 22.734 19.219 30.369 38.564 19.956 20.599 14.724 0.93000 0.74000 1.3000 5.3700 13.630 17.900 18.660 18.490 18.090 17.670 17.520 18.170 19.870 21.710 22.120 21.480 20.740 19.980 19.200 18.930 19.390 20.560 21.550 22.220 22.600 22.790 22.970 23.270 23.640 23.840 23.850 23.810 23.750 23.700 23.850 24.270 786 0.0000 3.8638 17.361 33.358 34.502 35.339 23.833 1.5500 1.0800 1.6400 7.6300 21.160 28.740 30.130 29.900 29.460 29.020 28.890 29.590 31.450 33.600 34.620 34.730 34.800 34.930 35.000 35.390 35.940 36.770 37.450 37.930 38.280 38.470 38.690 38.950 39.180 39.270 39.370 39.470 39.630 39.830 39.990 40.240 787 21.073 2.9061 26.455 40.418 21.761 23.870 17.094 1.1100 0.78000 1.3600 5.7500 15.030 19.980 21.130 21.250 21.070 20.910 20.980 21.900 24.030 26.320 27.060 26.490 25.560 24.400 23.310 22.700 22.460 22.480 22.470 22.490 22.560 22.610 22.750 23.000 23.320 23.520 23.540 23.500 23.450 23.440 23.590 24.010 788 13.355 7.7939 33.346 33.627 27.005 28.575 17.705 1.4600 0.87000 1.4400 5.9000 15.640 21.000 21.940 21.850 21.600 21.330 21.420 22.650 25.630 29.040 30.400 30.090 29.450 28.660 27.910 27.650 27.910 28.670 29.270 29.680 29.960 30.110 30.280 30.550 30.870 31.040 31.080 31.070 31.030 31.050 31.210 31.600 789 12.503 0.0000 17.684 32.687 31.477 34.050 25.487 1.4500 0.95000 1.5200 7.3900 21.700 30.270 32.130 32.120 31.670 31.210 31.080 31.850 33.990 36.340 37.190 36.690 35.850 34.760 33.700 33.160 32.780 32.620 32.450 32.370 32.400 32.410 32.510 32.740 33.050 33.190 33.190 33.120 33.040 33.050 33.120 33.480 790 0.0000 6.0339 26.340 44.200 25.009 25.490 15.801 1.0600 0.82000 1.3700 5.8100 14.710 19.130 19.840 19.620 19.300 19.020 19.000 19.770 21.640 23.780 24.790 24.920 25.010 25.120 25.210 25.520 26.040 26.890 27.570 28.060 28.400 28.570 28.780 29.000 29.180 29.280 29.390 29.470 29.580 29.760 29.870 30.090 791 0.0000 0.0000 10.937 42.542 28.351 29.373 21.636 1.2300 0.93000 1.6200 7.4400 19.730 26.320 27.440 27.260 26.860 26.470 26.270 26.570 27.490 28.540 29.110 29.200 29.310 29.390 29.440 29.640 29.730 29.860 29.980 30.120 30.270 30.370 30.550 30.750 30.940 31.040 31.120 31.200 31.350 31.520 31.620 31.840 792 49.451 68.032 74.292 49.543 7.0079 6.1740 3.7399 0.60000 0.67000 1.2200 2.6700 4.4300 5.0700 4.9700 4.6700 4.3600 4.0700 3.9300 4.2700 5.2100 6.1100 5.9900 5.4000 5.0600 4.8500 4.6200 4.6700 5.5200 7.1900 8.6300 9.5000 9.9600 10.170 10.290 10.550 10.870 11.080 11.060 10.970 10.810 10.720 10.790 11.190 793 55.680 67.510 79.165 29.625 8.7469 7.8139 4.2060 0.56000 0.44000 1.0500 2.6900 4.7300 5.4600 5.4200 5.1400 4.8500 4.5700 4.5000 5.1700 6.7300 8.2300 8.1100 7.1600 6.5300 6.0800 5.6000 5.5600 6.6800 8.9400 10.910 12.080 12.720 13.010 13.210 13.590 14.120 14.480 14.440 14.250 13.960 13.760 13.890 14.570 794 47.848 54.540 61.787 35.490 10.441 9.9439 6.4621 0.67000 0.55000 1.1500 3.3200 6.7600 8.2500 8.3600 8.0700 7.7100 7.3000 7.1800 7.7900 9.2900 10.790 10.740 9.8600 9.1600 8.5600 7.9300 7.7700 8.6800 10.590 12.220 13.220 13.770 14.020 14.210 14.540 15.020 15.310 15.290 15.150 14.930 14.790 14.900 15.470 795 55.784 69.944 100.00 42.601 6.4172 5.7200 2.3546 0.35000 0.44000 0.97000 2.0800 2.9000 3.0100 2.9500 2.7200 2.5500 2.4400 2.4900 3.0900 4.4400 5.7400 5.7400 5.1200 4.7200 4.4800 4.1900 4.2100 5.0700 6.7500 8.1900 9.0500 9.5100 9.7300 9.8800 10.160 10.570 10.820 10.780 10.670 10.480 10.330 10.440 10.930 796 50.648 56.633 83.823 42.130 8.2843 7.9946 3.6619 0.62000 0.49000 1.0300 2.5000 4.0000 4.5500 4.5100 4.3000 4.1300 3.9600 4.0300 4.8300 6.6100 8.4400 8.7000 8.0100 7.4600 6.9800 6.4800 6.3600 7.1300 8.7200 10.050 10.860 11.300 11.500 11.640 11.930 12.340 12.580 12.550 12.430 12.240 12.150 12.230 12.740 797 69.142 80.354 100.00 36.714 5.0577 4.4416 2.4450 0.45000 0.48000 1.0800 2.2300 3.1000 3.2800 3.1600 2.9100 2.7300 2.5700 2.5500 3.0200 4.1100 5.0500 4.7400 3.9500 3.5200 3.2400 2.9500 2.9200 3.6900 5.2200 6.4700 7.1400 7.4700 7.6300 7.7500 8.0300 8.4900 8.7700 8.7100 8.5300 8.2500 8.0200 8.1800 8.7200 798 67.310 67.167 100.00 42.106 5.5402 5.4720 2.6440 0.55000 0.68000 1.1800 2.3800 3.1600 3.3100 3.2500 3.0300 2.8900 2.7800 2.8600 3.5400 5.0800 6.5500 6.5200 5.7300 5.1700 4.7100 4.2200 4.0500 4.6300 5.8300 6.7500 7.2300 7.4800 7.5800 7.6900 7.9500 8.3500 8.6200 8.5500 8.3900 8.1600 7.9600 8.0900 8.6000 799 71.620 73.035 95.438 28.998 5.4138 5.1892 2.8504 0.62000 0.55000 1.1300 2.4200 3.4100 3.6800 3.5900 3.3500 3.1600 3.0000 3.0200 3.6900 5.1700 6.5500 6.3200 5.3600 4.6900 4.2000 3.6500 3.4900 4.1500 5.5500 6.6600 7.2300 7.5400 7.6700 7.7900 8.1100 8.6100 8.9300 8.8700 8.6700 8.3600 8.1600 8.2600 8.9400 800 23.460 43.317 37.711 47.857 13.105 12.048 8.5673 0.65000 0.57000 1.1800 3.9700 9.0100 11.250 11.380 10.960 10.430 9.8800 9.5300 9.7300 10.530 11.390 11.380 10.880 10.580 10.400 10.180 10.320 11.340 13.360 15.170 16.380 17.030 17.350 17.580 17.850 18.160 18.350 18.370 18.360 18.300 18.320 18.420 18.810 801 0.0000 25.102 38.910 47.699 19.152 18.117 10.174 0.95000 0.74000 1.1400 4.2600 10.150 12.860 13.050 12.640 12.250 11.850 11.730 12.340 13.930 15.760 16.470 16.390 16.390 16.490 16.580 16.980 18.170 20.330 22.360 23.760 24.570 24.930 25.200 25.430 25.610 25.690 25.780 25.870 25.990 26.120 26.230 26.400 802 29.265 33.683 50.744 43.166 14.209 14.142 8.4550 0.70000 0.61000 1.1600 3.7500 8.3900 10.480 10.730 10.430 10.130 9.7800 9.7100 10.460 12.360 14.400 14.870 14.290 13.710 13.170 12.610 12.480 13.240 14.840 16.230 17.110 17.590 17.790 17.980 18.230 18.580 18.760 18.780 18.710 18.610 18.510 18.640 19.030 803 23.466 39.218 43.535 31.664 19.506 18.376 11.851 0.91000 0.81000 1.4100 4.9200 11.870 15.130 15.430 14.970 14.330 13.710 13.410 14.050 15.880 17.880 18.150 17.340 16.700 16.190 15.640 15.670 17.050 19.970 22.660 24.460 25.430 25.850 26.130 26.490 26.920 27.170 27.160 27.100 26.940 26.890 26.990 27.470 804 28.879 51.547 56.078 41.028 13.236 11.907 7.1674 0.62000 0.56000 1.0700 3.5100 7.6700 9.4100 9.4400 9.0200 8.5500 8.0700 7.8500 8.3400 9.7400 11.190 11.270 10.580 10.140 9.8600 9.5500 9.6500 10.970 13.610 15.980 17.500 18.320 18.680 18.900 19.200 19.560 19.790 19.770 19.700 19.570 19.490 19.580 19.950 805 36.883 57.761 70.919 31.316 13.050 11.550 5.6013 0.71000 0.56000 1.1200 3.0900 6.0300 7.1900 7.1400 6.8400 6.5000 6.1700 6.1200 6.9200 8.8800 10.890 11.030 10.160 9.5800 9.2100 8.7600 8.8500 10.390 13.500 16.300 18.110 19.090 19.510 19.770 20.160 20.640 20.940 20.900 20.800 20.560 20.410 20.500 21.100 806 0.0000 26.364 29.110 35.294 27.491 25.485 16.190 1.3200 0.82000 1.5000 5.9400 15.900 20.780 21.190 20.520 19.750 18.980 18.560 19.010 20.530 22.360 22.870 22.580 22.490 22.640 22.720 23.280 25.120 28.560 31.930 34.270 35.620 36.210 36.570 36.900 37.100 37.230 37.320 37.420 37.550 37.700 37.780 37.990 807 10.365 26.533 20.019 34.845 24.738 23.481 18.019 1.3400 0.84000 1.5000 6.4100 17.480 23.280 23.880 23.170 22.240 21.270 20.620 20.690 21.500 22.480 22.460 21.850 21.460 21.210 20.920 21.110 22.450 25.160 27.690 29.410 30.370 30.750 31.060 31.360 31.710 31.860 31.910 31.900 31.890 31.930 32.010 32.380 808 4.9092 17.010 19.077 31.248 30.804 30.176 21.765 1.3500 0.95000 1.5300 7.1100 20.020 27.190 28.240 27.720 26.920 26.100 25.620 25.940 27.220 28.750 29.130 28.730 28.490 28.340 28.150 28.430 29.620 31.950 34.090 35.580 36.440 36.820 37.130 37.470 37.790 37.940 38.020 38.070 38.160 38.240 38.390 38.680 809 17.762 22.700 38.190 32.367 23.544 23.557 14.881 1.0200 0.96000 1.4600 5.4100 14.070 18.330 18.890 18.600 18.060 17.550 17.410 18.330 20.770 23.500 24.250 23.600 22.930 22.280 21.590 21.500 22.500 24.600 26.480 27.700 28.390 28.670 28.880 29.220 29.590 29.790 29.770 29.720 29.640 29.590 29.700 30.070 810 3.3648 19.075 24.186 43.887 22.358 21.771 14.767 1.1500 0.88000 1.3700 5.5100 14.250 18.570 19.110 18.670 18.110 17.550 17.250 17.620 18.820 20.210 20.670 20.480 20.390 20.390 20.370 20.640 21.630 23.420 25.050 26.190 26.840 27.130 27.390 27.630 27.860 27.980 28.050 28.120 28.210 28.290 28.450 28.630 811 44.340 89.514 100.00 50.094 5.8919 4.1794 2.0168 0.47000 0.48000 1.0100 2.0400 2.7700 2.9000 2.7700 2.5200 2.2800 2.1000 1.9900 2.1800 2.7000 3.1100 2.8200 2.3100 2.1500 2.1900 2.1700 2.4200 3.5700 5.8500 8.0000 9.4000 10.160 10.510 10.720 10.990 11.340 11.570 11.560 11.500 11.370 11.290 11.380 11.800 812 49.619 70.358 68.033 35.569 8.7336 7.3449 4.7596 0.44000 0.54000 1.0900 3.0000 5.5400 6.5100 6.4400 6.0600 5.6300 5.2100 4.9400 5.2800 6.2400 7.1300 6.8300 6.0400 5.6000 5.3700 5.0900 5.1700 6.3700 8.7500 10.870 12.200 12.930 13.240 13.460 13.810 14.300 14.590 14.580 14.420 14.210 14.050 14.180 14.750 813 60.606 98.665 100.00 32.063 5.7642 3.8860 2.3303 0.58000 0.56000 1.1300 2.3600 3.2100 3.3700 3.2100 2.9500 2.6900 2.4600 2.3300 2.5000 2.9700 3.2300 2.6000 1.8200 1.5800 1.6100 1.5900 1.8300 3.0900 5.6500 7.9700 9.4000 10.160 10.480 10.680 11.040 11.580 11.880 11.840 11.670 11.370 11.150 11.300 11.890 814 31.406 65.370 71.106 49.778 9.1218 7.5112 3.9302 0.70000 0.61000 1.1300 2.7200 4.6600 5.3600 5.2500 4.9100 4.5800 4.2600 4.1200 4.4400 5.3900 6.3300 6.2900 5.7700 5.5300 5.4700 5.3800 5.6100 6.8700 9.3600 11.620 13.100 13.900 14.240 14.470 14.740 15.060 15.250 15.260 15.220 15.160 15.090 15.210 15.540 815 52.735 83.677 100.00 36.577 7.0256 5.4481 2.4405 0.65000 0.68000 1.1100 2.3000 3.1300 3.2900 3.1800 2.9300 2.7300 2.5600 2.5400 2.9600 3.9600 4.8300 4.5300 3.7900 3.4600 3.3700 3.2300 3.4000 4.6500 7.1600 9.4200 10.820 11.550 11.890 12.090 12.430 12.920 13.210 13.160 13.020 12.770 12.610 12.730 13.320 816 64.453 86.804 96.347 32.892 5.9627 4.7585 2.6840 0.57000 0.58000 1.1800 2.4700 3.4300 3.6500 3.5300 3.2900 3.0600 2.8500 2.7700 3.1800 4.0900 4.8200 4.3600 3.5200 3.1500 3.0100 2.8100 2.9100 3.9600 6.0700 7.8700 8.9100 9.4300 9.6700 9.8300 10.170 10.680 11.000 10.930 10.740 10.440 10.210 10.330 10.970 817 27.760 77.790 72.497 41.460 10.778 7.9160 4.1240 0.73000 0.66000 1.2200 2.9500 5.1300 5.8800 5.6900 5.2700 4.8400 4.4100 4.1500 4.3800 5.1400 5.8300 5.5100 4.8400 4.6100 4.6500 4.6400 5.0100 6.8700 10.650 14.290 16.740 18.080 18.640 18.980 19.310 19.710 19.930 19.940 19.870 19.730 19.670 19.750 20.150 818 0.0000 59.765 31.243 47.225 16.509 12.734 9.1633 0.77000 0.78000 1.2700 4.4600 10.650 13.260 12.990 12.080 11.130 10.120 9.4100 9.1700 9.3300 9.5900 9.2300 8.6300 8.4800 8.6100 8.7300 9.2700 11.530 16.010 20.520 23.730 25.530 26.310 26.760 27.060 27.280 27.380 27.450 27.560 27.660 27.770 27.850 27.960 819 8.1179 42.212 28.826 35.921 21.495 18.699 13.047 0.93000 0.78000 1.2700 5.3900 13.640 17.470 17.560 16.820 15.950 15.050 14.440 14.470 15.220 16.090 16.020 15.420 15.210 15.240 15.230 15.680 17.670 21.570 25.420 28.160 29.700 30.410 30.850 31.260 31.640 31.830 31.910 31.970 32.020 32.110 32.250 32.570 820 11.549 42.496 46.799 37.277 19.459 17.282 9.8056 1.1100 0.77000 1.2700 4.3600 10.180 12.790 12.840 12.330 11.760 11.200 10.930 11.490 13.080 14.860 15.210 14.720 14.450 14.400 14.300 14.690 16.510 20.050 23.460 25.840 27.180 27.770 28.140 28.510 28.860 29.070 29.100 29.170 29.160 29.210 29.370 29.710 821 18.589 60.824 52.971 29.988 18.069 14.344 8.1609 0.99000 0.79000 1.2400 4.1600 9.1700 11.290 11.120 10.450 9.7500 9.0200 8.5800 8.9000 10.080 11.350 11.200 10.380 10.030 10.010 9.9300 10.410 12.870 17.850 22.810 26.340 28.330 29.200 29.680 30.160 30.640 30.910 30.930 30.910 30.830 30.830 30.920 31.360 822 0.0000 52.981 45.717 41.069 19.401 15.647 8.9329 0.72000 0.64000 1.1400 4.1900 9.8900 12.330 12.150 11.430 10.730 9.9700 9.5400 9.7900 10.790 11.920 11.930 11.380 11.240 11.400 11.520 12.140 14.600 19.430 24.270 27.760 29.700 30.540 31.030 31.370 31.620 31.720 31.780 31.870 31.990 32.130 32.180 32.350 823 0.0000 43.774 32.249 47.762 17.639 15.075 10.035 1.0400 0.78000 1.2800 4.5800 10.880 13.660 13.610 12.930 12.160 11.430 10.930 10.990 11.640 12.420 12.420 12.010 11.910 12.030 12.140 12.610 14.410 17.870 21.220 23.570 24.880 25.440 25.810 26.060 26.270 26.360 26.450 26.520 26.630 26.740 26.830 27.000 824 30.284 65.110 61.655 37.290 12.348 9.9463 5.8309 0.54000 0.52000 1.0500 3.2400 6.6600 8.0100 7.9300 7.4600 6.9300 6.4000 6.1000 6.4000 7.3900 8.4000 8.1900 7.4500 7.0900 6.9800 6.8300 7.1200 8.8600 12.350 15.630 17.840 19.050 19.590 19.930 20.310 20.760 21.010 21.020 20.970 20.830 20.780 20.900 21.420 825 0.0000 54.454 28.001 36.018 21.715 17.046 12.016 0.92000 0.85000 1.3400 5.3500 13.520 17.110 16.880 15.780 14.610 13.420 12.570 12.310 12.590 13.020 12.640 11.950 11.780 11.960 12.090 12.750 15.460 20.960 26.630 30.860 33.300 34.350 34.940 35.360 35.630 35.780 35.870 35.990 36.120 36.240 36.370 36.550 826 0.0000 42.388 36.221 31.841 25.901 21.914 12.728 1.0100 0.77000 1.3300 5.4000 13.290 16.890 16.940 16.190 15.390 14.590 14.120 14.500 15.860 17.440 17.690 17.180 17.080 17.290 17.450 18.170 20.840 26.070 31.440 35.490 37.830 38.880 39.540 40.000 40.340 40.510 40.670 40.790 40.990 41.190 41.330 41.550 827 0.0000 75.474 50.153 49.698 12.735 8.8101 5.1491 0.64000 0.67000 1.1100 3.2500 6.5600 7.7100 7.4000 6.7800 6.1600 5.4900 5.0300 4.9400 5.2200 5.5200 5.1900 4.6800 4.5400 4.6900 4.8100 5.3100 7.4800 11.980 16.650 20.100 22.080 22.960 23.470 23.820 24.080 24.230 24.350 24.460 24.590 24.730 24.840 25.000 828 27.739 80.762 59.458 29.557 13.211 9.1840 5.7234 0.54000 0.57000 1.1100 3.4300 7.1000 8.5000 8.2300 7.5700 6.8700 6.1000 5.5600 5.5500 6.0000 6.4100 5.8500 5.0000 4.7300 4.7900 4.8100 5.2700 7.6100 12.420 17.300 20.790 22.770 23.640 24.160 24.670 25.210 25.540 25.560 25.510 25.370 25.260 25.410 25.980 829 32.834 100.00 84.635 32.848 10.088 6.0823 3.0374 0.54000 0.52000 1.0500 2.5400 4.1800 4.6500 4.4000 3.9800 3.5800 3.1400 2.8500 2.9100 3.2500 3.4300 2.7300 1.8900 1.6500 1.7500 1.8100 2.2500 4.5200 9.3300 14.150 17.520 19.380 20.160 20.600 21.050 21.570 21.860 21.850 21.760 21.550 21.410 21.510 22.030 830 15.701 88.600 53.846 39.000 12.568 8.0247 5.1001 0.64000 0.50000 1.0900 3.2800 6.7400 7.9600 7.6300 6.8700 6.1200 5.3000 4.7000 4.4900 4.5700 4.6300 4.0500 3.3600 3.1700 3.3200 3.4100 3.9300 6.3300 11.410 16.690 20.630 22.850 23.870 24.440 24.910 25.350 25.590 25.680 25.700 25.700 25.740 25.860 26.190 831 39.068 88.597 100.00 35.943 8.6959 6.0560 2.3581 0.77000 0.60000 1.1000 2.3100 3.1200 3.2800 3.1200 2.8600 2.6600 2.4700 2.4000 2.7500 3.5800 4.2600 3.9100 3.2200 2.9800 3.0100 3.0100 3.3200 5.0300 8.5300 11.970 14.280 15.530 16.080 16.410 16.800 17.280 17.560 17.550 17.460 17.290 17.170 17.300 17.810 832 44.107 100.00 100.00 40.689 6.7407 4.2689 2.0686 0.52000 0.51000 0.99000 2.1500 2.9300 3.0400 2.8900 2.6300 2.3800 2.1500 2.0200 2.1600 2.5600 2.7900 2.2700 1.6200 1.4300 1.4900 1.5200 1.8100 3.3200 6.4400 9.4500 11.460 12.550 13.030 13.320 13.700 14.150 14.440 14.420 14.340 14.160 14.040 14.170 14.690 833 46.298 100.00 79.718 32.018 7.9906 4.9866 3.2633 0.60000 0.57000 1.1100 2.6700 4.4800 5.0000 4.7800 4.3400 3.8700 3.4000 3.0400 3.0200 3.2500 3.3200 2.6200 1.8400 1.6100 1.6800 1.7000 2.0300 3.7700 7.4300 11.000 13.380 14.690 15.240 15.570 15.980 16.520 16.840 16.810 16.690 16.440 16.270 16.410 16.960 834 9.5653 100.00 70.022 45.918 10.810 6.2823 3.2493 0.53000 0.56000 1.1100 2.6900 4.6200 5.1500 4.9100 4.3600 3.8600 3.3200 2.9200 2.7800 2.8400 2.8400 2.2800 1.6800 1.5100 1.6500 1.7400 2.2200 4.5100 9.4900 14.850 18.860 21.190 22.250 22.830 23.280 23.630 23.860 23.950 24.040 24.090 24.170 24.290 24.570 835 21.571 99.685 100.00 49.080 8.1875 5.0243 2.0403 0.49000 0.59000 1.0700 2.0900 2.8700 2.9900 2.8400 2.5900 2.3500 2.1300 2.0200 2.1200 2.4700 2.6800 2.2500 1.6800 1.5200 1.6200 1.6900 2.0400 3.8500 7.6600 11.520 14.240 15.730 16.390 16.770 17.110 17.430 17.640 17.680 17.670 17.660 17.600 17.740 18.050 836 4.1118 67.778 48.156 38.855 17.120 12.366 7.0723 0.81000 0.53000 1.1700 3.8600 8.4800 10.270 9.9700 9.2400 8.4700 7.6800 7.1500 7.1500 7.6900 8.2900 7.9600 7.2800 7.1100 7.2900 7.4300 8.0800 10.790 16.310 22.060 26.360 28.820 29.970 30.610 31.090 31.460 31.680 31.790 31.890 31.990 32.150 32.270 32.490 837 0.0000 82.263 57.662 37.256 16.507 10.562 5.4579 0.60000 0.69000 1.2000 3.4300 7.1100 8.3700 7.9600 7.2400 6.4900 5.7200 5.1800 5.0800 5.3800 5.6900 5.1700 4.4600 4.2900 4.4800 4.6200 5.2800 8.2900 14.760 21.850 27.420 30.720 32.240 33.050 33.620 33.990 34.190 34.340 34.470 34.660 34.830 34.930 35.140 838 0.0000 100.00 55.884 38.346 14.994 8.4613 4.7437 0.75000 0.64000 1.1100 3.4000 6.7700 7.8500 7.3500 6.5100 5.6500 4.7600 4.0900 3.7500 3.6100 3.4500 2.7200 1.9600 1.7600 1.9400 2.0800 2.7000 5.7700 12.580 20.190 26.260 29.890 31.600 32.470 33.020 33.400 33.600 33.750 33.890 34.060 34.220 34.340 34.520 839 23.848 100.00 66.363 28.196 12.390 7.1880 4.2131 0.58000 0.54000 1.0900 3.1000 5.8200 6.7600 6.4000 5.7300 5.0200 4.2900 3.7500 3.5500 3.6000 3.5500 2.7500 1.9100 1.6900 1.8200 1.9100 2.4200 5.0500 10.810 16.940 21.510 24.150 25.320 25.970 26.540 27.110 27.430 27.510 27.440 27.340 27.250 27.440 27.960 840 0.0000 82.056 36.672 34.255 18.338 11.629 7.7538 0.77000 0.71000 1.1800 4.4000 10.150 12.320 11.740 10.550 9.3200 8.0500 7.1000 6.6200 6.4600 6.4000 5.6900 4.8900 4.6900 4.8900 5.0400 5.7500 8.9800 15.990 23.730 29.900 33.610 35.320 36.250 36.860 37.270 37.500 37.640 37.800 37.980 38.190 38.290 38.570 841 0.0000 100.00 36.076 30.746 18.556 10.287 7.3239 1.1800 0.76000 1.2300 4.6000 10.480 12.620 11.770 10.260 8.7500 7.2100 6.0000 5.2200 4.6700 4.1900 3.1800 2.2300 2.0000 2.2000 2.3700 3.1100 6.7700 15.030 24.390 32.060 36.800 38.950 40.070 40.760 41.180 41.410 41.540 41.690 41.850 42.030 42.110 42.250 842 83.647 0.0000 95.183 41.449 5.9385 10.177 3.9097 0.34000 0.67000 1.0900 2.3400 3.3100 3.6600 3.7400 3.7100 3.8100 4.0300 4.7200 6.9900 12.140 18.210 20.190 18.450 15.430 11.960 8.8400 6.9200 5.9400 5.4100 4.9900 4.7000 4.5900 4.5600 4.5900 4.8000 5.1600 5.3900 5.3200 5.1800 4.9200 4.7700 4.8900 5.3900 843 85.320 0.0000 100.00 29.387 7.1790 12.983 4.3280 0.53000 0.66000 1.1500 2.4000 3.3900 3.7000 3.7300 3.7600 3.9500 4.3200 5.2600 8.3400 15.450 24.120 27.040 24.470 20.110 15.270 11.060 8.4900 7.1800 6.4900 5.9200 5.5300 5.3900 5.3400 5.3700 5.6200 6.1000 6.4000 6.3100 6.1000 5.7800 5.5300 5.6700 6.3200 844 73.741 27.226 100.00 36.090 6.5532 9.1950 3.2769 0.59000 0.60000 1.1000 2.2500 3.1600 3.3500 3.3200 3.1900 3.2000 3.3100 3.7900 5.5900 9.6200 14.170 15.480 14.200 12.290 10.150 8.1400 6.9600 6.5800 6.6500 6.6300 6.5600 6.5500 6.5600 6.6000 6.8400 7.2600 7.5100 7.4600 7.2800 7.0200 6.8700 6.9700 7.5200 845 85.656 19.603 100.00 28.128 5.9715 10.004 3.6691 0.46000 0.58000 1.0400 2.2900 3.2300 3.4600 3.4500 3.3900 3.4600 3.6900 4.3400 6.7000 12.010 18.160 19.890 17.880 14.860 11.500 8.4700 6.6400 5.8500 5.5600 5.2700 5.0300 4.9500 4.9200 4.9600 5.2100 5.6800 5.9800 5.9200 5.6900 5.3700 5.1700 5.3200 5.9500 846 70.341 0.0000 100.00 45.170 7.1726 10.832 3.3993 0.69000 0.61000 1.1100 2.1400 3.0000 3.2000 3.1900 3.1300 3.1900 3.4000 4.0100 6.1400 10.970 16.710 18.870 17.690 15.350 12.560 10.030 8.4400 7.6400 7.2000 6.8300 6.5900 6.5100 6.5000 6.5300 6.7400 7.0800 7.3100 7.2500 7.1300 6.9400 6.7700 6.8900 7.3800 847 61.095 4.7718 80.685 35.946 11.080 15.186 6.2137 0.78000 0.62000 1.2000 2.8500 5.2000 6.1900 6.4800 6.5600 6.7000 6.9500 7.6400 10.010 15.370 21.730 24.020 22.600 20.000 16.970 14.190 12.510 11.680 11.300 10.970 10.710 10.640 10.630 10.680 10.950 11.380 11.660 11.600 11.420 11.150 10.980 11.090 11.700 848 73.516 0.0000 100.00 34.240 8.1743 13.047 3.8836 0.42000 0.57000 0.99000 2.1800 3.1100 3.3800 3.3600 3.3800 3.5400 3.8600 4.7000 7.4500 13.720 21.340 24.160 22.370 19.020 15.200 11.790 9.6900 8.6100 8.0400 7.5600 7.2400 7.1300 7.1000 7.1500 7.4000 7.8600 8.1400 8.0800 7.9100 7.6200 7.4100 7.5300 8.1500 849 51.152 19.020 76.884 31.072 13.606 16.552 6.8608 0.82000 0.68000 1.2300 3.1900 5.9900 7.2100 7.5100 7.5200 7.5900 7.7400 8.3100 10.490 15.360 21.000 22.920 21.720 19.760 17.520 15.430 14.250 14.000 14.360 14.590 14.680 14.770 14.820 14.930 15.220 15.710 16.000 15.930 15.760 15.480 15.300 15.420 16.070 850 59.248 9.7611 100.00 44.858 8.9755 11.909 3.2549 0.49000 0.44000 1.0100 2.1000 2.8400 3.0900 3.0800 3.0100 3.0600 3.2700 3.8300 5.8500 10.350 15.690 17.810 17.050 15.370 13.360 11.460 10.310 9.7900 9.6200 9.4400 9.3000 9.2700 9.2700 9.3400 9.5700 9.9400 10.160 10.120 9.9800 9.8000 9.6700 9.8000 10.230 851 42.448 0.0000 75.248 41.986 13.898 17.251 6.4214 0.74000 0.63000 1.1000 2.9400 5.4900 6.5700 6.8500 6.9100 7.0200 7.2200 7.8600 10.020 14.910 20.790 23.320 22.700 21.030 18.930 17.000 15.850 15.240 14.930 14.660 14.470 14.450 14.460 14.540 14.790 15.150 15.350 15.330 15.230 15.060 14.980 15.100 15.540 852 61.556 27.865 87.948 38.980 8.6300 10.688 4.1874 0.57000 0.53000 1.1100 2.5000 3.9700 4.4600 4.5300 4.4600 4.4400 4.5200 4.9100 6.5500 10.170 14.220 15.420 14.450 12.980 11.320 9.7400 8.8400 8.7000 9.0500 9.2600 9.3600 9.4300 9.4800 9.5600 9.8100 10.210 10.460 10.420 10.270 10.040 9.8700 9.9900 10.520 853 28.933 0.0000 74.553 48.710 14.134 16.572 5.7646 0.66000 0.55000 1.0600 2.7300 5.0600 6.0600 6.2700 6.2500 6.3100 6.4700 6.9800 8.7900 12.920 17.860 20.170 20.060 19.150 17.900 16.750 16.090 15.750 15.590 15.450 15.340 15.360 15.390 15.460 15.670 15.940 16.090 16.090 16.060 15.990 15.960 16.050 16.410 854 58.635 19.196 100.00 31.956 11.144 14.395 3.7929 0.73000 0.57000 1.1200 2.3000 3.2300 3.4900 3.4900 3.4500 3.5800 3.8100 4.5100 6.9100 12.380 18.910 21.350 20.200 18.140 15.760 13.510 12.210 11.830 12.010 12.070 12.050 12.090 12.100 12.180 12.480 12.970 13.270 13.210 13.030 12.730 12.490 12.640 13.230 855 55.573 0.0000 76.019 46.040 10.262 13.635 5.9467 0.63000 0.64000 1.1000 2.8100 5.1200 6.1100 6.4000 6.4400 6.5600 6.7400 7.3200 9.2800 13.630 18.640 20.490 19.520 17.570 15.200 13.000 11.660 10.910 10.550 10.220 10.000 9.9300 9.9200 9.9700 10.170 10.520 10.740 10.680 10.560 10.370 10.240 10.350 10.790 856 35.319 0.0000 56.657 44.406 15.246 18.076 9.4391 0.84000 0.69000 1.1400 3.6300 8.0600 10.300 10.850 11.020 11.100 11.260 11.750 13.480 17.160 21.320 22.920 22.340 21.000 19.330 17.750 16.810 16.290 16.040 15.820 15.690 15.680 15.710 15.800 16.050 16.400 16.590 16.580 16.500 16.380 16.340 16.430 16.870 857 48.263 0.0000 62.261 36.222 15.115 19.288 10.372 0.84000 0.87000 1.2900 4.0000 8.7000 11.020 11.740 11.920 12.100 12.270 12.920 15.120 20.080 25.780 27.770 26.400 23.930 21.010 18.360 16.720 15.840 15.380 14.990 14.710 14.630 14.610 14.680 14.940 15.370 15.590 15.560 15.390 15.170 14.980 15.140 15.650 858 37.691 0.0000 53.342 28.110 20.831 25.289 13.503 1.1300 0.77000 1.2300 4.6800 11.110 14.480 15.400 15.750 15.950 16.190 16.920 19.400 24.870 31.250 33.660 32.420 29.990 27.100 24.490 22.930 22.100 21.680 21.300 21.060 21.010 21.030 21.130 21.460 21.950 22.230 22.220 22.070 21.850 21.720 21.860 22.520 859 20.877 0.0000 41.229 30.082 26.919 30.371 17.089 1.4900 0.84000 1.3700 5.7400 14.520 19.170 20.320 20.500 20.580 20.690 21.190 23.240 27.790 33.090 35.350 34.850 33.500 31.800 30.190 29.320 28.830 28.610 28.430 28.310 28.360 28.400 28.540 28.860 29.290 29.510 29.520 29.470 29.350 29.320 29.450 29.990 860 30.878 0.0000 57.990 35.218 20.540 24.213 11.653 0.95000 0.79000 1.2500 4.3300 9.8600 12.660 13.340 13.490 13.600 13.780 14.420 16.670 21.730 27.780 30.330 29.690 27.990 25.890 23.960 22.840 22.230 21.940 21.640 21.460 21.450 21.460 21.550 21.810 22.200 22.410 22.390 22.300 22.150 22.060 22.180 22.700 861 65.561 45.238 100.00 31.230 7.6318 8.8677 3.1012 0.41000 0.51000 1.1300 2.2400 3.1700 3.3800 3.3100 3.1800 3.1400 3.1800 3.5300 4.9900 8.2300 11.680 12.450 11.370 10.130 8.8400 7.5700 6.9100 7.1700 8.0700 8.7500 9.0700 9.2600 9.3600 9.4600 9.7600 10.270 10.570 10.500 10.300 10.020 9.8000 9.9400 10.550 862 44.977 45.788 87.149 41.676 9.5338 9.6146 3.6524 0.69000 0.61000 1.1100 2.4700 3.8600 4.2900 4.2900 4.1100 3.9800 3.9200 4.1000 5.1600 7.5400 10.130 10.760 10.140 9.4900 8.8700 8.2400 8.0400 8.7300 10.220 11.470 12.220 12.660 12.840 13.000 13.270 13.650 13.890 13.870 13.790 13.600 13.490 13.630 14.140 863 56.523 38.511 100.00 43.335 7.6361 8.6726 2.7558 0.36000 0.49000 0.95000 2.0900 2.8900 3.0200 2.9800 2.8400 2.7500 2.7800 3.0800 4.3700 7.2300 10.420 11.350 10.670 9.7400 8.7500 7.7600 7.2700 7.4900 8.2400 8.8100 9.1100 9.3000 9.3900 9.4800 9.7200 10.100 10.320 10.290 10.160 9.9800 9.8100 9.9700 10.410 864 56.446 48.348 100.00 31.643 9.6842 10.344 3.2804 0.65000 0.72000 1.2500 2.4100 3.3400 3.5800 3.5200 3.3800 3.3500 3.3900 3.7300 5.2200 8.5100 12.050 12.870 11.880 10.850 9.8300 8.7800 8.3300 8.9600 10.470 11.650 12.300 12.630 12.770 12.900 13.230 13.740 14.060 13.980 13.790 13.470 13.230 13.340 14.030 865 31.353 25.738 76.327 46.136 12.811 13.527 5.0587 0.62000 0.72000 1.1400 2.7700 4.9000 5.7700 5.7900 5.7100 5.6300 5.6300 5.9000 7.2300 10.230 13.660 14.950 14.630 14.050 13.380 12.730 12.490 12.950 14.000 14.880 15.430 15.760 15.910 16.050 16.320 16.630 16.820 16.830 16.780 16.690 16.650 16.740 17.140 866 50.847 34.891 74.643 34.489 11.139 12.324 5.6569 0.70000 0.64000 1.0600 2.8700 5.3300 6.3900 6.5600 6.4700 6.3900 6.3800 6.6700 8.1100 11.280 14.680 15.530 14.600 13.440 12.200 10.980 10.370 10.700 11.730 12.540 12.990 13.280 13.400 13.530 13.850 14.330 14.630 14.580 14.460 14.200 14.030 14.140 14.780 867 41.826 39.099 69.919 28.410 14.570 14.986 7.0520 0.74000 0.64000 1.1000 3.3400 6.7600 8.2100 8.4000 8.2800 8.1300 8.0200 8.2500 9.6700 12.880 16.320 17.150 16.180 15.130 14.070 13.010 12.610 13.420 15.330 16.970 17.970 18.540 18.790 19.010 19.390 19.940 20.270 20.250 20.080 19.840 19.690 19.850 20.520 868 20.960 22.059 52.903 41.187 17.517 17.981 9.4218 0.82000 0.78000 1.2300 3.9700 8.9300 11.200 11.570 11.390 11.180 11.000 11.130 12.270 14.940 17.940 19.000 18.620 18.030 17.410 16.790 16.650 17.280 18.680 19.890 20.680 21.150 21.350 21.530 21.810 22.140 22.310 22.340 22.300 22.260 22.230 22.310 22.710 869 27.360 14.712 71.344 40.682 16.607 18.206 6.7169 0.86000 0.63000 1.1000 3.0600 6.0400 7.2500 7.5100 7.4800 7.5400 7.6400 8.1300 9.9500 13.990 18.670 20.640 20.380 19.620 18.670 17.740 17.340 17.560 18.290 18.850 19.200 19.460 19.590 19.730 20.020 20.390 20.570 20.590 20.540 20.450 20.390 20.530 20.960 870 35.954 39.649 89.698 36.739 12.939 13.082 3.9042 0.62000 0.60000 1.00000 2.4000 3.8200 4.2700 4.3000 4.1600 4.1400 4.1600 4.5000 5.9800 9.2500 12.920 14.140 13.600 12.950 12.290 11.610 11.460 12.340 14.160 15.730 16.700 17.260 17.500 17.710 18.030 18.460 18.730 18.720 18.620 18.460 18.350 18.470 19.010 871 43.213 20.221 76.704 42.665 12.235 14.065 5.7106 0.71000 0.70000 1.2000 2.9600 5.3200 6.2700 6.4100 6.3500 6.3500 6.4100 6.8000 8.4400 12.090 16.220 17.690 17.050 15.940 14.630 13.360 12.680 12.680 13.170 13.530 13.710 13.840 13.890 13.990 14.230 14.590 14.800 14.770 14.630 14.470 14.320 14.430 14.880 872 32.776 20.672 68.742 28.362 18.903 20.631 8.5164 1.0900 0.73000 1.2800 3.6700 7.6000 9.4000 9.7500 9.7000 9.6900 9.7400 10.210 12.260 16.880 22.320 24.330 23.550 22.210 20.700 19.270 18.630 19.050 20.360 21.440 22.120 22.530 22.710 22.900 23.260 23.750 24.030 24.020 23.890 23.680 23.580 23.720 24.320 873 15.430 0.0000 45.600 41.486 22.144 24.452 12.833 0.96000 0.71000 1.2500 4.5900 11.280 14.650 15.320 15.360 15.340 15.360 15.720 17.300 20.870 25.090 27.050 27.010 26.390 25.500 24.670 24.240 24.010 23.930 23.860 23.810 23.880 23.940 24.070 24.290 24.570 24.720 24.770 24.760 24.740 24.770 24.900 25.220 874 15.684 2.7477 58.153 35.886 24.110 26.626 11.106 0.96000 0.83000 1.2100 4.1700 9.6100 12.270 12.770 12.820 12.880 13.030 13.590 15.720 20.570 26.500 29.410 29.500 28.810 27.830 26.900 26.500 26.430 26.620 26.730 26.830 26.950 27.020 27.180 27.450 27.780 27.950 27.980 27.950 27.930 27.930 28.060 28.460 875 12.620 15.271 52.922 36.944 22.841 23.482 10.791 0.93000 0.80000 1.2400 4.2100 9.9100 12.590 12.990 12.870 12.700 12.600 12.880 14.410 17.980 22.180 24.020 23.920 23.520 23.050 22.610 22.620 23.360 24.860 26.200 27.070 27.580 27.840 28.060 28.330 28.650 28.810 28.850 28.860 28.870 28.860 29.020 29.340 876 0.0000 0.0000 39.383 35.043 32.947 34.826 16.982 1.4100 0.82000 1.4100 5.6500 14.890 19.680 20.520 20.450 20.340 20.320 20.700 22.490 26.690 31.890 34.720 35.430 35.640 35.690 35.770 36.100 36.280 36.470 36.580 36.740 36.910 37.000 37.190 37.420 37.610 37.700 37.790 37.880 38.020 38.160 38.300 38.500 877 55.933 66.329 100.00 30.895 8.0283 7.3088 2.7788 0.51000 0.65000 1.0500 2.3400 3.2200 3.4000 3.3400 3.1200 2.9800 2.8900 3.0000 3.8800 5.7900 7.6700 7.7500 6.8600 6.2600 5.8000 5.3200 5.2500 6.2800 8.4000 10.260 11.370 11.940 12.220 12.390 12.740 13.240 13.550 13.510 13.340 13.070 12.870 13.010 13.630 878 40.022 59.123 100.00 45.148 9.2097 8.3638 2.7331 0.75000 0.71000 1.1800 2.2800 3.1400 3.3100 3.2400 3.0000 2.9300 2.8400 2.9900 3.8500 5.7600 7.7500 8.1000 7.5300 7.1500 6.8900 6.6000 6.6700 7.7700 9.9200 11.780 12.920 13.530 13.790 13.970 14.250 14.620 14.820 14.800 14.720 14.560 14.440 14.540 14.910 879 40.834 64.106 100.00 31.517 11.319 9.7521 2.8920 0.70000 0.65000 1.0900 2.3000 3.2100 3.4400 3.3300 3.1700 3.0600 3.0200 3.1900 4.2300 6.4600 8.7400 9.0200 8.2000 7.6900 7.4000 7.0600 7.2000 8.7800 11.950 14.840 16.700 17.680 18.120 18.390 18.780 19.270 19.580 19.550 19.400 19.190 19.030 19.140 19.720 880 40.705 50.945 81.541 31.071 12.560 11.933 4.7183 0.78000 0.69000 1.1400 2.8100 4.8900 5.6500 5.6600 5.4500 5.2800 5.1400 5.3000 6.4500 9.0600 11.880 12.460 11.660 10.950 10.340 9.7200 9.6300 10.820 13.280 15.460 16.860 17.610 17.950 18.180 18.550 19.060 19.350 19.320 19.190 18.980 18.860 18.970 19.590 881 29.877 46.194 71.123 43.193 12.600 11.760 5.2153 0.73000 0.72000 1.1600 3.0400 5.5200 6.4800 6.4700 6.2300 6.0000 5.7900 5.8200 6.7000 8.7300 10.930 11.450 10.930 10.520 10.210 9.8600 9.9500 11.100 13.370 15.410 16.700 17.420 17.730 17.950 18.260 18.620 18.820 18.830 18.770 18.650 18.620 18.720 19.130 882 0.0000 34.494 69.464 49.128 16.920 15.424 5.5517 0.76000 0.65000 1.0900 2.9900 5.7100 6.7600 6.7600 6.5000 6.3300 6.1900 6.3200 7.3300 9.6600 12.310 13.360 13.310 13.310 13.430 13.560 14.010 15.500 18.270 20.930 22.800 23.850 24.320 24.640 24.890 25.080 25.180 25.260 25.340 25.470 25.600 25.700 25.840 883 33.628 52.176 100.00 39.682 11.599 10.736 2.7977 0.35000 0.58000 1.0800 2.1100 2.9700 3.1700 3.0900 2.9400 2.8600 2.8700 3.1200 4.2800 6.8600 9.6500 10.430 9.9200 9.4900 9.1600 8.8200 8.9000 10.130 12.570 14.770 16.190 16.970 17.330 17.570 17.890 18.300 18.530 18.550 18.480 18.350 18.280 18.410 18.850 884 24.992 36.241 56.478 34.909 17.367 16.784 8.7470 0.92000 0.68000 1.1700 3.9300 8.6500 10.700 10.920 10.650 10.360 10.070 10.100 11.140 13.550 16.200 16.860 16.270 15.700 15.210 14.700 14.690 15.870 18.260 20.430 21.860 22.670 23.040 23.310 23.680 24.090 24.350 24.390 24.330 24.230 24.150 24.310 24.810 885 0.0000 33.935 52.083 39.420 22.891 20.709 9.5596 1.0100 0.73000 1.2500 4.1600 9.6600 11.990 12.100 11.680 11.300 10.940 10.910 11.880 14.250 16.980 17.940 17.750 17.690 17.850 17.970 18.540 20.500 24.220 27.840 30.420 31.870 32.510 32.920 33.250 33.460 33.550 33.660 33.740 33.860 34.040 34.100 34.330 886 0.0000 39.811 54.436 49.012 16.438 14.552 6.8775 0.88000 0.66000 1.1800 3.5000 7.2400 8.8500 8.8000 8.4500 8.1200 7.7900 7.7100 8.3300 9.9300 11.720 12.280 12.080 12.060 12.190 12.300 12.770 14.360 17.310 20.160 22.170 23.290 23.800 24.130 24.400 24.610 24.710 24.800 24.910 25.020 25.180 25.260 25.450 887 10.824 27.598 46.685 31.975 24.666 23.604 12.379 1.0400 0.85000 1.2800 4.8600 11.860 15.150 15.500 15.190 14.840 14.480 14.510 15.610 18.310 21.360 22.390 22.040 21.730 21.520 21.280 21.570 23.120 26.140 28.940 30.880 31.970 32.480 32.840 33.240 33.640 33.850 33.930 33.940 33.960 34.020 34.150 34.620 888 0.0000 12.590 32.006 33.015 32.140 31.856 18.191 1.2200 0.94000 1.5200 6.4200 16.860 22.070 22.820 22.510 22.120 21.730 21.710 22.810 25.540 28.760 30.200 30.290 30.350 30.510 30.640 31.150 32.400 34.550 36.480 37.840 38.640 39.010 39.340 39.650 39.890 40.030 40.130 40.240 40.420 40.600 40.730 40.990 889 0.0000 21.206 56.149 40.568 23.083 22.251 9.2150 1.0400 0.78000 1.1300 3.9400 8.8500 11.000 11.200 10.960 10.770 10.620 10.810 12.140 15.200 18.820 20.430 20.540 20.610 20.720 20.840 21.340 22.700 25.190 27.520 29.150 30.080 30.520 30.810 31.060 31.280 31.380 31.460 31.570 31.690 31.870 31.960 32.130 890 43.017 68.678 89.451 37.299 9.5051 8.0309 3.2983 0.75000 0.68000 1.0800 2.4400 3.8200 4.2400 4.1600 3.9100 3.6900 3.5200 3.5400 4.2100 5.7600 7.2600 7.2800 6.5400 6.1300 5.9200 5.6700 5.8100 7.1700 9.8900 12.320 13.870 14.690 15.060 15.290 15.630 16.090 16.350 16.330 16.200 16.010 15.900 16.010 16.540 891 46.359 79.705 100.00 28.480 9.4103 7.2138 2.6474 0.44000 0.60000 1.1300 2.3200 3.2700 3.4200 3.3400 3.1000 2.9200 2.7800 2.7900 3.4300 4.7800 6.0100 5.7600 4.9100 4.5200 4.4200 4.2400 4.4800 6.1500 9.5500 12.720 14.780 15.890 16.360 16.660 17.080 17.640 18.000 17.960 17.780 17.530 17.320 17.450 18.080 892 27.392 67.386 100.00 48.710 9.2324 7.4535 2.2646 0.57000 0.47000 1.0100 2.0400 2.7700 2.8800 2.7900 2.6000 2.4300 2.3400 2.3900 3.0100 4.3600 5.7300 5.8800 5.4400 5.2400 5.2500 5.2200 5.5200 6.9700 9.7200 12.260 13.950 14.880 15.300 15.570 15.870 16.210 16.410 16.440 16.410 16.360 16.330 16.430 16.820 893 28.388 74.886 83.931 34.356 11.914 8.8544 3.4756 0.59000 0.50000 1.0100 2.5400 4.2000 4.7100 4.6000 4.2700 3.9700 3.6700 3.5900 4.0800 5.2700 6.4100 6.2700 5.5700 5.3100 5.3300 5.2900 5.6900 7.7000 11.830 15.910 18.750 20.350 21.050 21.450 21.880 22.350 22.610 22.660 22.580 22.470 22.400 22.510 23.010 894 17.119 58.335 70.358 31.174 16.939 13.745 5.4606 0.72000 0.65000 1.1200 3.1800 6.0500 7.0800 6.9900 6.6400 6.3000 5.9700 5.8900 6.6900 8.6200 10.620 10.900 10.230 9.9400 9.9200 9.8400 10.300 12.630 17.250 21.830 25.090 26.930 27.730 28.220 28.690 29.140 29.390 29.450 29.430 29.370 29.380 29.500 29.950 895 0.0000 49.451 70.301 41.130 18.941 15.691 5.7015 0.76000 0.77000 1.1700 3.1900 6.1200 7.2600 7.1600 6.8300 6.5400 6.2900 6.3000 7.1900 9.3100 11.590 12.210 11.830 11.730 11.890 12.030 12.640 15.030 19.690 24.320 27.640 29.520 30.320 30.770 31.110 31.320 31.450 31.510 31.600 31.720 31.850 31.900 32.020 896 0.0000 61.267 69.126 44.191 16.129 12.354 5.0011 0.52000 0.65000 1.1300 3.0600 5.7900 6.7500 6.5700 6.2000 5.8200 5.4300 5.3000 5.8200 7.1400 8.5100 8.6300 8.1000 7.9800 8.1400 8.2700 8.8800 11.350 16.250 21.140 24.680 26.650 27.510 28.000 28.340 28.580 28.690 28.770 28.850 28.960 29.070 29.130 29.240 897 19.728 50.814 73.599 38.986 14.814 12.931 4.8837 0.77000 0.62000 1.00000 2.8500 5.2300 6.1400 6.0600 5.8000 5.5400 5.3300 5.3900 6.2800 8.4200 10.740 11.310 10.840 10.530 10.400 10.260 10.560 12.240 15.570 18.740 20.900 22.110 22.640 22.950 23.300 23.680 23.880 23.930 23.910 23.850 23.860 23.960 24.350 898 23.056 65.133 100.00 39.791 12.611 10.144 2.7036 0.58000 0.60000 1.1400 2.2200 3.1300 3.2700 3.1800 2.9900 2.8900 2.8100 2.9500 3.8100 5.7000 7.6600 7.9500 7.3600 7.1100 7.1100 7.0500 7.4500 9.4100 13.230 16.840 19.300 20.640 21.220 21.560 21.920 22.310 22.530 22.550 22.520 22.430 22.380 22.470 22.890 899 0.52159 39.208 56.025 31.084 25.850 22.380 9.5011 0.84000 0.70000 1.2100 4.2500 9.6500 11.920 11.960 11.550 11.200 10.820 10.810 11.880 14.490 17.420 18.370 18.060 18.000 18.210 18.390 19.130 21.770 26.860 32.020 35.900 38.130 39.150 39.760 40.230 40.590 40.750 40.890 41.010 41.190 41.380 41.520 41.740 900 20.499 80.866 100.00 45.139 10.007 7.0438 2.1918 0.48000 0.55000 0.97000 2.0600 2.8200 2.9900 2.8500 2.6200 2.4200 2.2800 2.2500 2.6400 3.6000 4.4500 4.3200 3.8000 3.6400 3.7400 3.8200 4.2400 6.1100 9.9200 13.720 16.380 17.860 18.530 18.930 19.290 19.680 19.890 19.940 19.960 19.920 19.910 20.040 20.380 901 13.384 83.623 77.323 40.263 12.354 8.2087 3.3916 0.38000 0.53000 0.98000 2.5900 4.3900 4.9000 4.7300 4.3300 3.9600 3.5700 3.3400 3.5400 4.1800 4.7500 4.4300 3.8100 3.6400 3.7900 3.8900 4.4100 6.7700 11.690 16.760 20.500 22.630 23.590 24.140 24.600 24.990 25.220 25.320 25.360 25.370 25.420 25.550 25.920 902 31.361 91.591 100.00 30.325 10.640 6.7320 2.3492 0.57000 0.58000 1.0500 2.2400 3.1400 3.3300 3.1700 2.8900 2.6800 2.4600 2.3700 2.6600 3.3800 3.9000 3.3700 2.6000 2.3600 2.4600 2.5000 2.9500 5.2000 9.9900 14.890 18.390 20.340 21.200 21.700 22.190 22.730 23.040 23.070 22.990 22.830 22.710 22.840 23.440 903 0.0000 85.977 100.00 45.964 12.941 8.3315 2.2462 0.82000 0.70000 1.1300 2.1900 2.9600 3.0500 2.9300 2.7100 2.5200 2.3500 2.3100 2.6600 3.4900 4.2300 4.0000 3.4400 3.3000 3.4500 3.6000 4.1400 6.7300 12.140 17.900 22.260 24.750 25.900 26.510 26.910 27.220 27.360 27.480 27.620 27.720 27.900 28.020 28.130 904 2.4835 69.298 70.381 35.388 17.817 12.633 4.6895 0.83000 0.63000 1.0600 2.9800 5.6400 6.5100 6.3000 5.8500 5.4300 5.0100 4.8300 5.2800 6.5000 7.7500 7.7100 7.0700 6.9200 7.1000 7.2600 7.9400 10.890 17.030 23.600 28.640 31.600 32.950 33.690 34.210 34.570 34.760 34.900 35.020 35.160 35.290 35.440 35.630 905 0.0000 57.675 50.605 31.781 22.728 17.455 8.6509 1.0100 0.67000 1.2700 4.4000 9.7900 11.870 11.690 11.000 10.310 9.6000 9.1800 9.5800 10.840 12.250 12.290 11.670 11.510 11.740 11.910 12.690 15.780 22.080 28.800 34.010 37.080 38.490 39.270 39.840 40.240 40.440 40.590 40.750 40.930 41.150 41.300 41.500 906 19.857 73.676 100.00 32.268 14.169 10.403 2.5626 0.63000 0.50000 1.0600 2.2100 3.0700 3.2200 3.1100 2.9000 2.7300 2.6500 2.7200 3.4800 5.1700 6.8600 6.9700 6.3000 6.0700 6.1400 6.1800 6.7000 9.1800 14.190 19.240 22.890 24.960 25.900 26.450 26.940 27.440 27.730 27.790 27.770 27.720 27.700 27.810 28.320 907 0.0000 100.00 83.410 44.072 12.755 7.3535 2.8138 0.72000 0.68000 1.1200 2.5100 3.9800 4.3500 4.0900 3.6800 3.3000 2.9000 2.6300 2.6400 2.9000 3.0400 2.4900 1.8300 1.6600 1.8200 1.9400 2.4900 5.2000 11.150 17.670 22.700 25.660 27.010 27.730 28.200 28.500 28.660 28.800 28.920 29.070 29.230 29.340 29.480 908 18.281 100.00 82.044 30.987 13.097 7.6247 3.2879 0.69000 0.69000 1.1600 2.7300 4.5200 5.0500 4.7800 4.3400 3.8800 3.4100 3.0800 3.1000 3.4000 3.5400 2.8400 2.0100 1.7800 1.9400 2.0300 2.5900 5.3800 11.550 18.150 23.160 26.040 27.340 28.030 28.580 29.110 29.400 29.450 29.460 29.380 29.350 29.470 29.910 909 0.0000 84.784 69.272 29.197 19.363 12.039 4.7245 0.85000 0.69000 1.1100 3.1600 6.0800 7.0300 6.7300 6.1300 5.5700 4.9600 4.5900 4.7300 5.3600 5.8900 5.3600 4.5300 4.3300 4.5600 4.7400 5.5200 9.1300 16.980 25.830 33.050 37.490 39.590 40.730 41.460 41.940 42.220 42.410 42.580 42.810 43.060 43.190 43.450 910 0.98979 90.940 86.175 38.112 14.525 8.6771 2.8043 0.59000 0.58000 0.96000 2.4100 3.8200 4.1500 3.9300 3.5900 3.2400 2.9100 2.7200 2.8900 3.4100 3.8000 3.3400 2.6600 2.4800 2.6600 2.8100 3.4300 6.3800 12.830 19.940 25.550 28.920 30.480 31.330 31.900 32.300 32.520 32.670 32.790 32.960 33.140 33.260 33.500 911 0.0000 100.00 68.541 31.218 17.030 9.4842 4.0827 0.61000 0.62000 1.0100 3.0600 5.7600 6.5800 6.2000 5.5100 4.8500 4.1300 3.6100 3.4700 3.5500 3.5400 2.7900 1.9600 1.7500 1.9500 2.1200 2.8200 6.2600 14.030 22.950 30.300 34.890 37.080 38.240 38.970 39.470 39.730 39.940 40.120 40.330 40.570 40.700 40.900 912 60.872 0.0000 100.00 34.977 11.010 15.643 3.9307 0.69000 0.58000 1.0500 2.1900 3.0800 3.3400 3.3700 3.3800 3.5500 3.8800 4.7200 7.5200 13.950 21.950 25.300 24.080 21.280 17.940 14.940 13.090 12.110 11.600 11.160 10.860 10.770 10.750 10.820 11.090 11.570 11.860 11.800 11.620 11.340 11.160 11.310 11.910 913 41.517 18.265 84.796 29.415 16.117 18.685 5.7898 0.63000 0.65000 1.1400 2.7900 4.9700 5.8100 5.9900 6.0100 6.1100 6.3300 7.0100 9.3700 14.710 21.120 23.740 22.980 21.410 19.560 17.820 16.920 16.930 17.630 18.170 18.470 18.670 18.790 18.940 19.270 19.770 20.060 20.050 19.900 19.650 19.500 19.640 20.270 914 47.240 0.0000 100.00 42.829 12.301 15.876 3.6758 0.72000 0.61000 1.0900 2.1700 3.0700 3.2600 3.2900 3.2400 3.3800 3.6400 4.3600 6.7800 12.320 19.270 22.430 21.890 20.090 17.830 15.770 14.520 13.870 13.530 13.220 13.020 12.960 12.960 13.020 13.240 13.600 13.810 13.780 13.680 13.480 13.370 13.460 13.940 915 46.948 20.749 100.00 38.918 11.626 13.743 3.3536 0.60000 0.61000 0.99000 2.1300 2.9700 3.1900 3.2000 3.1200 3.1800 3.3700 3.9600 5.9800 10.490 15.770 17.880 17.280 16.050 14.560 13.160 12.390 12.370 12.870 13.210 13.390 13.530 13.600 13.710 14.000 14.420 14.670 14.660 14.520 14.330 14.210 14.310 14.860 916 43.615 0.0000 100.00 32.973 16.137 20.748 4.2916 1.0200 0.73000 1.2200 2.3600 3.3100 3.6100 3.6200 3.6400 3.8200 4.1800 5.0900 8.0900 15.240 24.610 29.150 28.560 26.240 23.330 20.720 19.150 18.330 17.910 17.500 17.230 17.160 17.140 17.210 17.500 17.940 18.190 18.140 18.010 17.770 17.580 17.730 18.280 917 32.070 0.0000 100.00 41.882 15.480 18.674 3.6653 0.68000 0.62000 1.0400 2.1100 2.9300 3.1800 3.1800 3.1800 3.3100 3.6000 4.3500 6.8500 12.590 19.850 23.490 23.500 22.280 20.620 19.080 18.210 17.760 17.550 17.330 17.200 17.200 17.230 17.330 17.580 17.950 18.160 18.150 18.070 17.930 17.870 18.000 18.470 918 45.750 0.0000 79.720 32.415 15.982 20.557 7.1466 0.76000 0.77000 1.2100 3.1300 5.8000 7.0100 7.3200 7.4500 7.6600 7.9600 8.7800 11.570 17.980 25.940 29.380 28.350 25.830 22.780 20.050 18.410 17.530 17.080 16.670 16.390 16.330 16.310 16.380 16.660 17.120 17.370 17.340 17.180 16.910 16.780 16.880 17.440 919 19.897 0.0000 75.831 38.466 21.530 24.557 7.1694 1.0100 0.75000 1.1000 3.0100 5.9500 7.2000 7.4800 7.5400 7.7400 8.0200 8.8100 11.360 17.130 24.370 28.090 28.380 27.590 26.360 25.250 24.680 24.390 24.280 24.150 24.100 24.150 24.210 24.340 24.610 24.970 25.160 25.190 25.150 25.110 25.090 25.230 25.660 920 27.626 0.0000 67.007 30.654 22.810 26.843 9.9938 1.0500 0.80000 1.2800 3.8400 8.2600 10.380 10.890 11.040 11.230 11.530 12.320 15.070 21.400 29.320 33.090 32.740 31.080 28.920 26.980 25.890 25.310 25.030 24.740 24.590 24.570 24.580 24.700 24.980 25.400 25.630 25.600 25.510 25.380 25.270 25.420 25.910 921 29.230 0.0000 81.197 28.936 22.802 27.232 7.4555 1.0200 0.77000 1.2500 3.1700 5.9400 7.1700 7.4600 7.5700 7.8000 8.1600 9.0700 12.180 19.500 29.160 34.090 33.950 32.140 29.760 27.620 26.440 25.810 25.500 25.190 24.970 24.960 24.970 25.080 25.360 25.800 26.060 26.030 25.910 25.750 25.640 25.780 26.330 922 33.916 18.320 100.00 37.856 14.644 16.473 3.4970 0.75000 0.63000 1.1300 2.2200 3.0700 3.3000 3.2700 3.2200 3.2800 3.4700 4.0700 6.2000 11.060 17.030 19.670 19.380 18.380 17.150 15.960 15.430 15.660 16.470 17.130 17.510 17.760 17.870 18.010 18.290 18.660 18.920 18.900 18.810 18.640 18.580 18.690 19.140 923 30.751 32.158 100.00 33.843 16.000 16.556 3.4856 0.71000 0.64000 1.0200 2.2400 3.1500 3.4100 3.3700 3.3000 3.3500 3.5000 4.0500 6.0300 10.530 15.880 18.020 17.630 16.860 16.060 15.240 15.040 15.920 17.870 19.560 20.610 21.220 21.480 21.680 22.020 22.430 22.710 22.690 22.580 22.420 22.320 22.450 22.980 924 46.244 35.010 100.00 32.124 12.486 13.688 3.4278 0.66000 0.58000 1.0800 2.2700 3.2100 3.4400 3.3800 3.3000 3.3400 3.4700 3.9900 5.8800 10.140 15.050 16.750 15.990 14.840 13.600 12.410 11.840 12.370 13.730 14.850 15.500 15.860 16.030 16.180 16.500 16.990 17.290 17.250 17.090 16.850 16.650 16.790 17.390 925 29.993 23.370 100.00 48.317 12.078 12.952 2.9284 0.46000 0.58000 0.95000 2.0100 2.7700 2.9800 2.9200 2.8500 2.8300 2.9500 3.3700 4.9400 8.4400 12.540 14.290 14.170 13.680 13.090 12.510 12.310 12.730 13.640 14.380 14.830 15.120 15.260 15.400 15.640 15.960 16.140 16.150 16.110 16.020 16.020 16.100 16.490 926 13.413 0.0000 75.582 49.776 17.732 19.745 5.9487 0.97000 0.69000 1.2300 2.8900 5.2900 6.3100 6.4200 6.4200 6.4600 6.6100 7.1500 9.0500 13.360 18.690 21.470 21.880 21.580 21.020 20.480 20.260 20.160 20.130 20.080 20.060 20.100 20.130 20.230 20.400 20.610 20.730 20.740 20.760 20.750 20.750 20.840 21.070 927 26.565 15.926 78.503 28.200 20.983 22.990 6.9852 1.0100 0.72000 1.2300 3.1600 6.0500 7.2900 7.4600 7.4500 7.5300 7.7100 8.3800 10.830 16.450 23.380 26.470 26.070 24.890 23.460 22.140 21.580 22.010 23.260 24.300 24.930 25.340 25.510 25.700 26.030 26.470 26.740 26.710 26.620 26.480 26.360 26.510 27.030 928 0.0000 0.0000 74.545 45.532 22.821 24.435 6.4170 1.0500 0.81000 1.0900 3.0400 5.6200 6.7300 6.8800 6.8300 6.9200 7.1200 7.6900 9.7700 14.600 20.760 24.290 25.250 25.520 25.560 25.670 25.970 26.190 26.370 26.490 26.630 26.770 26.870 27.000 27.200 27.360 27.440 27.520 27.590 27.730 27.870 27.970 28.140 929 0.0000 0.64567 59.194 34.915 32.773 35.030 12.558 1.4700 0.97000 1.4700 4.7000 10.900 13.860 14.360 14.360 14.440 14.610 15.280 17.790 23.570 30.940 35.110 36.150 36.400 36.380 36.450 36.810 37.030 37.230 37.350 37.450 37.600 37.660 37.790 37.970 38.130 38.190 38.240 38.310 38.450 38.590 38.690 38.820 930 14.686 0.0000 64.579 27.827 30.137 33.773 11.524 1.2100 0.86000 1.3100 4.1700 9.4900 12.030 12.590 12.760 13.010 13.360 14.270 17.260 24.090 32.830 37.510 38.000 37.190 35.890 34.700 34.170 33.900 33.830 33.710 33.650 33.740 33.800 33.970 34.290 34.690 34.910 34.940 34.920 34.870 34.860 35.040 35.510 931 13.384 13.933 71.479 39.220 21.807 22.977 7.4923 0.93000 0.79000 1.1700 3.3900 6.7500 8.1900 8.3900 8.2900 8.3400 8.4500 8.9600 11.010 15.650 21.280 23.940 24.060 23.680 23.160 22.660 22.610 23.230 24.490 25.480 26.140 26.520 26.660 26.840 27.090 27.380 27.510 27.510 27.490 27.440 27.440 27.480 27.810 932 0.0000 40.840 100.00 48.145 15.630 13.823 2.6431 0.50000 0.52000 0.99000 1.9900 2.7400 2.9300 2.8300 2.6800 2.6200 2.6400 2.9000 4.1100 6.8700 10.090 11.450 11.450 11.460 11.600 11.750 12.260 13.960 17.150 20.190 22.340 23.540 24.100 24.450 24.730 24.940 25.050 25.140 25.230 25.360 25.510 25.590 25.760 933 18.987 37.116 100.00 32.008 18.522 17.564 3.3450 0.76000 0.63000 1.1100 2.2000 3.2000 3.3600 3.3100 3.2100 3.2300 3.3500 3.8300 5.6400 9.7700 14.720 16.730 16.510 16.100 15.780 15.430 15.680 17.310 20.500 23.450 25.450 26.570 27.060 27.410 27.790 28.210 28.450 28.480 28.470 28.390 28.370 28.510 28.960 934 12.419 26.797 79.841 43.823 17.284 17.010 4.9918 0.61000 0.63000 1.0600 2.6500 4.8300 5.5700 5.6200 5.4900 5.4400 5.4700 5.8200 7.3200 10.700 14.660 16.370 16.400 16.220 16.070 15.910 16.130 17.220 19.220 21.020 22.230 22.910 23.250 23.480 23.780 24.060 24.250 24.320 24.340 24.350 24.400 24.470 24.810 935 21.197 40.749 83.485 33.535 18.051 17.064 5.1144 0.95000 0.70000 1.1700 2.8800 4.9900 5.8100 5.8100 5.6600 5.5600 5.5600 5.8700 7.4600 11.000 15.050 16.460 16.000 15.530 15.160 14.760 14.910 16.490 19.620 22.480 24.400 25.450 25.900 26.180 26.540 26.960 27.180 27.210 27.130 27.020 26.970 27.070 27.510 936 0.0000 38.584 75.057 40.213 20.532 18.142 5.3688 0.90000 0.68000 1.1200 2.9100 5.4200 6.3300 6.3000 6.0900 5.9800 5.9100 6.1500 7.4700 10.410 13.770 15.090 15.000 15.000 15.170 15.350 15.980 18.100 22.060 25.950 28.760 30.380 31.100 31.580 31.930 32.220 32.360 32.480 32.600 32.760 32.940 33.080 33.300 937 0.0000 13.252 49.444 31.116 31.967 31.843 13.415 1.4500 0.83000 1.3300 5.0600 12.230 15.600 16.050 15.920 15.800 15.730 16.130 18.010 22.330 27.520 30.060 30.460 30.590 30.730 30.890 31.500 32.900 35.280 37.410 38.900 39.800 40.210 40.530 40.870 41.120 41.270 41.360 41.460 41.630 41.840 41.990 42.210 938 0.0000 22.733 73.624 38.056 24.347 23.367 6.6309 0.87000 0.80000 1.2300 3.2300 6.2300 7.4200 7.4800 7.3700 7.3000 7.3500 7.7800 9.6000 13.770 18.850 21.250 21.510 21.560 21.690 21.830 22.410 24.100 27.090 29.920 31.860 32.980 33.450 33.780 34.050 34.280 34.360 34.440 34.530 34.650 34.820 34.910 35.090 939 9.4354 20.576 81.652 31.824 24.799 24.768 6.1502 0.95000 0.73000 1.1200 3.0000 5.4600 6.4300 6.5100 6.4800 6.5400 6.7100 7.3200 9.5800 14.700 21.000 24.050 24.300 24.100 23.850 23.610 23.930 25.300 27.860 30.190 31.770 32.680 33.100 33.430 33.790 34.140 34.360 34.430 34.450 34.470 34.540 34.700 35.100 940 0.0000 29.009 61.389 31.179 27.857 25.721 9.5152 1.1200 0.79000 1.2300 4.0700 9.0900 11.330 11.480 11.200 11.010 10.850 11.110 12.700 16.390 20.750 22.590 22.600 22.610 22.790 22.940 23.650 25.850 29.990 34.100 37.060 38.750 39.520 40.000 40.390 40.680 40.800 40.930 41.040 41.210 41.410 41.550 41.730 941 2.5577 55.109 100.00 43.031 16.216 13.124 2.7813 0.96000 0.68000 1.1600 2.2000 3.0600 3.2200 3.1300 2.9700 2.8800 2.8600 3.0800 4.1100 6.4600 9.0400 9.8200 9.5000 9.4000 9.5400 9.6700 10.260 12.590 17.080 21.540 24.720 26.510 27.280 27.740 28.110 28.350 28.500 28.570 28.670 28.740 28.880 28.940 29.110 942 0.0000 48.701 79.233 33.679 22.290 18.296 5.2132 0.86000 0.78000 1.2000 3.0900 5.4700 6.3500 6.2700 5.9900 5.8000 5.6500 5.8200 7.0200 9.8100 12.940 13.960 13.620 13.520 13.730 13.910 14.670 17.490 23.070 28.840 33.150 35.630 36.750 37.390 37.820 38.130 38.270 38.390 38.510 38.660 38.860 38.950 39.170 943 13.271 44.027 88.790 28.891 20.844 18.529 4.4891 1.0400 0.81000 1.2300 2.7400 4.4700 4.9900 4.9800 4.7900 4.7500 4.7700 5.1200 6.7500 10.410 14.650 16.170 15.830 15.550 15.430 15.290 15.740 17.980 22.370 26.660 29.720 31.430 32.180 32.660 33.090 33.540 33.770 33.840 33.860 33.830 33.860 33.970 34.370 944 0.0000 44.413 100.00 38.085 20.474 17.441 3.1308 0.82000 0.67000 1.1000 2.2100 3.1200 3.3200 3.2500 3.1200 3.1100 3.1900 3.5400 5.0500 8.4200 12.350 13.850 13.720 13.680 13.860 14.020 14.700 17.190 22.000 26.770 30.260 32.220 33.070 33.600 33.970 34.220 34.330 34.430 34.530 34.680 34.820 34.900 35.070 945 22.912 55.978 93.407 32.139 15.620 13.343 3.3261 0.61000 0.52000 1.0400 2.2900 3.5000 3.8400 3.7400 3.5800 3.5000 3.4700 3.7300 4.9600 7.6800 10.670 11.440 10.870 10.490 10.330 10.130 10.480 12.520 16.540 20.390 23.040 24.530 25.180 25.580 26.010 26.490 26.790 26.820 26.760 26.660 26.630 26.750 27.230 946 0.0000 81.742 100.00 37.596 15.894 10.321 2.3479 0.57000 0.63000 1.00000 2.1400 2.9900 3.1100 2.9900 2.7500 2.5700 2.4200 2.4400 2.9600 4.1200 5.2100 5.0600 4.4300 4.2700 4.4600 4.6200 5.3100 8.3400 14.780 21.790 27.260 30.530 32.030 32.870 33.410 33.790 34.010 34.170 34.320 34.510 34.700 34.830 35.020 947 0.0000 60.077 100.00 32.416 20.478 15.479 2.8240 0.80000 0.63000 1.0200 2.1700 3.0200 3.2300 3.1300 2.9600 2.9000 2.8900 3.1300 4.2900 6.8500 9.6200 10.350 9.8800 9.7700 10.010 10.210 11.010 14.200 20.630 27.380 32.610 35.700 37.100 37.910 38.460 38.820 39.040 39.200 39.340 39.540 39.720 39.880 40.070 948 0.0000 59.035 74.635 32.404 21.466 16.428 5.2640 0.93000 0.81000 1.2500 3.1700 5.8500 6.8200 6.6400 6.3000 5.9900 5.6900 5.7000 6.5800 8.6900 10.960 11.390 10.800 10.650 10.860 11.050 11.820 15.020 21.460 28.180 33.290 36.230 37.530 38.270 38.720 39.040 39.180 39.310 39.430 39.590 39.730 39.860 40.020 949 0.0000 67.001 100.00 41.131 15.796 11.538 2.5091 0.74000 0.61000 1.0500 2.1400 2.9300 3.0900 2.9900 2.8000 2.6700 2.5800 2.7100 3.4800 5.1900 6.9800 7.2900 6.8200 6.7000 6.8900 7.0500 7.7000 10.380 15.770 21.370 25.570 27.990 29.090 29.720 30.150 30.490 30.620 30.750 30.890 31.050 31.230 31.350 31.550 950 0.0000 89.657 100.00 29.184 18.286 10.892 2.3640 0.57000 0.56000 1.0500 2.1700 3.0600 3.2600 3.1000 2.8400 2.6400 2.4600 2.4200 2.8400 3.7700 4.5400 4.1100 3.3000 3.1100 3.3200 3.5000 4.2700 7.8800 15.870 24.970 32.500 37.180 39.390 40.570 41.330 41.820 42.100 42.320 42.490 42.700 42.930 43.080 43.290 951 23.368 0.0000 100.00 34.813 20.732 24.341 4.1860 0.94000 0.83000 1.1400 2.2800 3.2500 3.4900 3.5200 3.5200 3.7000 4.0400 4.9200 7.8500 14.770 24.020 29.090 29.510 28.370 26.700 25.200 24.410 24.030 23.840 23.640 23.520 23.540 23.560 23.670 23.940 24.290 24.500 24.500 24.430 24.320 24.260 24.390 24.830 952 9.4433 18.877 100.00 43.466 18.912 19.374 3.3581 0.76000 0.60000 1.0500 2.1000 2.9600 3.1800 3.1500 3.0800 3.1300 3.3100 3.8600 5.8700 10.500 16.280 19.180 19.530 19.410 19.210 19.020 19.230 20.140 21.770 23.160 24.060 24.590 24.790 25.000 25.230 25.470 25.600 25.640 25.670 25.670 25.720 25.790 26.050 953 23.615 16.549 100.00 33.571 19.706 21.376 3.7520 0.81000 0.61000 1.0600 2.2000 3.1300 3.3500 3.3500 3.2700 3.4000 3.6400 4.3800 6.8600 12.610 19.940 23.570 23.700 22.970 22.000 21.080 20.780 21.310 22.520 23.530 24.160 24.560 24.750 24.950 25.280 25.700 25.930 25.950 25.890 25.790 25.740 25.870 26.370 954 0.0000 6.9409 81.859 37.613 27.014 28.067 6.1289 0.94000 0.67000 1.1500 2.8400 5.2300 6.1700 6.2900 6.2600 6.3600 6.6000 7.2800 9.7300 15.460 22.960 27.180 28.190 28.460 28.530 28.670 29.190 30.040 31.300 32.320 33.020 33.450 33.660 33.880 34.110 34.310 34.390 34.470 34.570 34.690 34.860 34.990 35.160 955 14.892 6.6999 91.710 28.860 26.752 29.416 5.4029 1.0800 0.82000 1.1900 2.6300 4.2600 4.8100 4.8900 4.9400 5.1400 5.5200 6.4500 9.5400 16.860 26.650 32.020 32.680 32.020 30.940 29.960 29.690 30.050 30.920 31.550 31.950 32.200 32.320 32.500 32.810 33.170 33.370 33.380 33.340 33.260 33.250 33.350 33.760 956 11.911 0.0000 76.410 34.372 26.378 29.365 7.4956 1.2500 0.79000 1.1900 3.1900 6.1700 7.4800 7.7300 7.7800 7.9400 8.2600 9.0600 11.880 18.390 26.970 31.780 32.620 32.210 31.350 30.600 30.340 30.230 30.230 30.180 30.170 30.270 30.330 30.470 30.750 31.050 31.220 31.250 31.250 31.260 31.290 31.420 31.790 957 0.0000 0.0000 100.00 46.685 22.131 23.789 3.5355 0.74000 0.60000 1.0200 2.0600 2.8400 3.0800 3.0500 3.0300 3.1400 3.4100 4.1300 6.4800 11.980 19.190 23.480 24.720 25.050 25.130 25.280 25.650 25.910 26.150 26.290 26.440 26.590 26.700 26.870 27.070 27.260 27.360 27.430 27.530 27.640 27.800 27.910 28.110 958 0.0000 0.0000 65.613 28.779 36.914 39.465 11.269 1.2200 0.90000 1.2600 4.1300 9.3800 11.850 12.290 12.350 12.530 12.850 13.720 16.760 23.880 33.440 39.200 40.790 41.210 41.230 41.380 41.890 42.230 42.530 42.690 42.890 43.070 43.190 43.390 43.650 43.870 43.990 44.070 44.170 44.330 44.550 44.690 44.890 959 0.0000 31.550 100.00 42.228 20.291 18.878 3.3024 0.79000 0.71000 1.1200 2.2100 3.1000 3.2900 3.2700 3.1700 3.1900 3.3200 3.7900 5.5500 9.5300 14.360 16.560 16.750 16.770 16.900 17.040 17.620 19.440 22.740 25.840 28.000 29.190 29.700 30.020 30.300 30.490 30.580 30.670 30.750 30.820 30.990 31.040 31.200 960 0.0000 20.829 100.00 36.568 25.464 24.923 3.8870 0.98000 0.77000 1.1700 2.3100 3.3100 3.5500 3.5400 3.4900 3.6000 3.8600 4.5400 6.9300 12.420 19.370 22.940 23.530 23.640 23.740 23.880 24.510 26.210 29.160 31.860 33.710 34.730 35.160 35.460 35.730 35.910 35.990 36.060 36.110 36.220 36.350 36.380 36.540 961 0.0000 35.055 96.498 31.593 24.874 22.134 3.7259 0.83000 0.71000 1.0600 2.3000 3.3700 3.7200 3.6900 3.5900 3.6300 3.7800 4.3200 6.2800 10.700 16.030 18.430 18.530 18.580 18.780 18.980 19.770 22.360 27.200 32.000 35.530 37.570 38.500 39.070 39.510 39.840 40.010 40.140 40.270 40.440 40.650 40.770 41.010 962 0.0000 49.601 100.00 28.577 24.281 19.710 3.1903 0.80000 0.71000 1.0200 2.1600 3.1000 3.2900 3.2500 3.1300 3.1300 3.2200 3.6400 5.3000 8.9500 13.140 14.650 14.380 14.300 14.560 14.770 15.660 18.930 25.350 32.010 37.110 40.100 41.460 42.240 42.810 43.210 43.420 43.590 43.740 43.940 44.140 44.310 44.560 963 0.0000 0.0000 100.00 35.961 29.440 31.716 4.1771 1.0500 0.80000 1.1100 2.1900 3.1300 3.4100 3.4000 3.3800 3.5700 3.9400 4.8000 7.8100 14.960 25.020 31.360 33.200 33.660 33.680 33.830 34.320 34.680 34.940 35.080 35.230 35.390 35.490 35.670 35.870 36.050 36.130 36.190 36.280 36.430 36.570 36.680 36.840 964 94.869 16.763 0.0000 14.478 10.785 14.924 32.989 1.1800 0.99000 1.6100 7.9700 24.160 36.420 42.400 44.590 43.820 42.280 40.610 38.830 36.550 33.640 29.670 24.700 19.470 14.170 9.5400 6.7400 5.4400 4.8600 4.3400 3.9400 3.8100 3.7600 3.7800 4.0900 4.6700 5.0400 4.9600 4.6800 4.2600 3.9800 4.1400 4.9400 965 100.00 0.0000 0.0000 11.409 11.896 18.056 40.100 1.4900 1.0600 1.6800 8.6200 26.330 40.420 48.820 53.300 53.870 53.550 52.560 50.980 48.330 44.340 38.690 31.580 24.070 16.750 10.660 7.0200 5.2200 4.2900 3.5500 3.0600 2.8900 2.8400 2.8600 3.1600 3.7500 4.1500 4.0300 3.7500 3.3200 3.0800 3.2700 4.1000 966 100.00 0.0000 0.0000 22.045 10.172 15.314 33.411 1.3500 0.91000 1.5200 7.5000 22.790 34.710 41.270 44.480 44.590 44.060 43.090 41.740 39.720 36.680 32.380 26.790 20.690 14.540 9.3300 6.1900 4.6400 3.8300 3.2000 2.7800 2.6300 2.5700 2.6000 2.8400 3.3500 3.6900 3.5800 3.3600 3.0100 2.7600 2.9400 3.6600 967 100.00 43.628 0.0000 27.558 5.8598 7.3794 17.671 0.66000 0.69000 1.3100 5.7200 15.580 21.850 24.020 24.200 23.020 21.480 20.090 18.850 17.480 16.000 14.010 11.660 9.3300 6.9300 4.7100 3.3700 2.8800 2.8000 2.6400 2.4300 2.3800 2.3500 2.3800 2.6200 3.0800 3.3700 3.2900 3.0800 2.7500 2.5600 2.7200 3.3800 968 100.00 41.241 0.0000 10.289 8.0659 10.357 25.684 1.1400 0.75000 1.5300 7.5300 21.500 30.980 34.730 35.320 33.720 31.540 29.530 27.670 25.580 23.320 20.290 16.690 13.170 9.6200 6.3800 4.4400 3.7000 3.5200 3.2500 2.9600 2.8700 2.8300 2.8600 3.1700 3.7900 4.1800 4.0800 3.7800 3.3500 3.0900 3.2700 4.0600 969 100.00 32.336 0.0000 19.351 7.9010 10.512 24.928 1.1500 0.80000 1.4600 6.8700 20.130 29.380 33.160 34.070 32.790 31.000 29.280 27.680 25.800 23.680 20.800 17.260 13.650 9.9500 6.5900 4.5800 3.7400 3.4300 3.1100 2.8100 2.7000 2.6600 2.6900 2.9500 3.4800 3.8500 3.7300 3.4800 3.1100 2.8400 3.0000 3.7100 970 71.672 26.138 0.0000 11.494 15.274 17.861 32.107 1.4500 0.98000 1.6600 8.4300 25.630 37.950 42.630 43.530 41.990 39.920 37.940 36.070 33.970 31.620 28.450 24.590 20.710 16.800 13.240 11.150 10.490 10.680 10.780 10.740 10.770 10.800 10.880 11.250 11.920 12.340 12.240 11.930 11.490 11.170 11.360 12.220 971 100.00 51.463 0.0000 18.449 6.2878 7.5112 19.447 0.70000 0.71000 1.3800 6.3000 17.580 24.850 27.160 27.030 25.300 23.160 21.320 19.700 18.000 16.300 14.070 11.530 9.1900 6.8500 4.6600 3.3600 2.9500 2.9700 2.8600 2.6500 2.6000 2.5800 2.6100 2.8600 3.3900 3.7300 3.6200 3.3800 3.0200 2.7900 2.9700 3.7000 972 88.348 57.144 6.8204 13.059 8.0289 8.6480 19.491 0.69000 0.65000 1.3600 6.5200 18.500 25.890 27.720 27.110 25.080 22.690 20.710 19.190 17.730 16.320 14.160 11.700 9.6000 7.6000 5.6600 4.5700 4.5000 5.0700 5.3700 5.4100 5.4500 5.4700 5.5300 5.8500 6.4800 6.8700 6.7500 6.4800 6.0500 5.7600 5.9200 6.7400 973 100.00 63.850 0.0000 19.651 5.3155 5.7623 16.071 0.76000 0.56000 1.2800 6.0000 15.870 21.760 23.210 22.600 20.720 18.530 16.680 15.110 13.520 12.060 10.190 8.1900 6.5600 5.0000 3.5000 2.6600 2.5100 2.7200 2.7100 2.5900 2.5400 2.5400 2.5700 2.8300 3.3300 3.6700 3.5700 3.3400 2.9800 2.7600 2.9500 3.6400 974 76.269 61.015 0.0000 12.875 9.8218 9.4222 19.703 0.93000 0.70000 1.4500 6.9200 19.550 27.140 28.600 27.560 25.210 22.550 20.340 18.520 16.730 15.120 13.100 10.960 9.3000 7.7700 6.2600 5.4900 5.8500 7.0800 8.0100 8.4600 8.7200 8.8300 8.9400 9.3100 9.9600 10.360 10.260 9.9900 9.5600 9.2600 9.4500 10.260 975 93.361 71.795 0.0000 16.564 5.9479 5.6770 16.015 0.78000 0.74000 1.3200 6.1500 16.730 22.960 23.990 22.830 20.470 17.820 15.630 13.870 12.150 10.680 8.8400 7.0100 5.7200 4.5800 3.4500 2.8400 2.9600 3.5500 3.8300 3.8500 3.8700 3.8800 3.9200 4.2300 4.8100 5.1700 5.0500 4.8100 4.3900 4.1000 4.2700 5.0300 976 91.610 79.932 0.0000 22.865 5.1226 4.4143 12.825 0.62000 0.55000 1.3500 5.5200 14.370 19.230 19.720 18.430 16.250 13.850 11.890 10.340 8.8500 7.6300 6.1400 4.7500 3.9200 3.2800 2.6000 2.2800 2.5700 3.3000 3.7300 3.8500 3.9200 3.9500 4.0000 4.2800 4.8000 5.1400 5.0600 4.8000 4.4400 4.2100 4.3400 5.0500 977 100.00 91.060 23.017 13.920 3.4929 2.8017 9.3781 0.46000 0.47000 1.2300 4.6100 11.280 14.640 14.750 13.620 11.790 9.7700 8.1600 7.0100 6.0400 5.1900 3.8800 2.6900 2.1300 1.8400 1.5100 1.3900 1.6900 2.2500 2.5000 2.5000 2.5000 2.5000 2.5300 2.8000 3.3200 3.6600 3.5800 3.3100 2.9500 2.7300 2.9100 3.5700 978 99.042 70.720 0.0000 27.692 4.6361 4.6908 13.523 0.75000 0.59000 1.2900 5.3700 14.000 19.050 19.980 19.150 17.330 15.240 13.490 12.040 10.630 9.3700 7.8000 6.2100 5.0100 3.9500 2.8900 2.3000 2.2700 2.5500 2.6100 2.5100 2.4900 2.4800 2.5000 2.7400 3.1800 3.4800 3.3900 3.1800 2.8700 2.6600 2.8100 3.4200 979 89.175 100.00 0.0000 20.957 4.5646 2.9600 10.336 0.60000 0.53000 1.2300 5.1400 13.140 17.220 17.040 15.260 12.890 10.290 8.2500 6.6700 5.2000 4.0900 2.8200 1.8100 1.4900 1.4400 1.3500 1.4200 2.0400 3.1800 4.0100 4.3500 4.5300 4.6000 4.6700 4.9700 5.5100 5.8600 5.7600 5.5400 5.1700 4.9000 5.0700 5.7600 980 100.00 92.124 0.0000 19.989 3.7274 2.8066 10.902 0.39000 0.54000 1.1800 5.1200 13.020 17.290 17.490 16.020 13.760 11.260 9.2600 7.6700 6.2000 5.0400 3.6900 2.5500 2.0600 1.7900 1.5000 1.4000 1.6700 2.2000 2.4500 2.4400 2.4400 2.4400 2.4800 2.7300 3.2000 3.5400 3.4500 3.2100 2.8900 2.6700 2.8100 3.4800 981 100.00 100.00 0.0000 11.727 3.8210 2.5322 11.400 0.55000 0.54000 1.2200 5.4700 14.180 18.820 18.820 16.980 14.300 11.390 9.0700 7.2800 5.6200 4.3600 2.9200 1.7900 1.4100 1.3500 1.2200 1.2200 1.6100 2.2600 2.5700 2.5900 2.6000 2.6100 2.6400 2.9200 3.4600 3.8200 3.7200 3.4600 3.0900 2.8400 3.0200 3.7800 982 95.528 100.00 22.976 11.927 3.9481 2.7646 9.4202 0.59000 0.58000 1.2600 4.8700 11.830 15.270 15.200 13.790 11.780 9.5400 7.7800 6.5100 5.4000 4.4700 3.1000 1.9300 1.5400 1.4700 1.3400 1.3800 1.9000 2.8100 3.3300 3.4500 3.5000 3.5300 3.5800 3.9100 4.5300 4.9200 4.8000 4.5100 4.0700 3.7900 3.9500 4.7600 983 80.050 88.405 0.0000 16.610 6.7046 4.9649 12.974 0.77000 0.54000 1.2900 5.8200 15.370 20.380 20.500 18.790 16.290 13.560 11.400 9.7000 8.1000 6.8500 5.3600 4.0500 3.4000 3.0200 2.5800 2.4900 3.2700 4.8900 6.2000 6.8800 7.2400 7.3900 7.5200 7.8700 8.4800 8.8800 8.7800 8.5100 8.1300 7.8600 8.0200 8.8100 984 82.874 100.00 0.0000 12.382 6.1192 3.8314 12.337 0.56000 0.63000 1.3500 5.9500 15.760 20.750 20.440 18.240 15.330 12.200 9.7600 7.8700 6.1300 4.8200 3.3000 2.0900 1.6900 1.6600 1.5500 1.6800 2.6400 4.4500 5.8500 6.5500 6.8900 7.0300 7.1500 7.5300 8.2000 8.6300 8.5100 8.2200 7.7500 7.4200 7.5900 8.4100 985 100.00 0.0000 21.857 25.641 8.3083 13.757 23.059 0.77000 0.75000 1.4100 5.9800 16.820 24.300 27.930 29.650 29.810 29.710 29.650 30.300 31.780 32.390 30.000 25.260 19.720 13.990 9.0400 6.0500 4.5600 3.8000 3.1700 2.7600 2.6100 2.5600 2.5700 2.8100 3.3100 3.6200 3.5200 3.2900 2.9400 2.7000 2.8800 3.5100 986 100.00 0.0000 21.223 13.178 9.7575 16.421 28.002 1.3100 0.85000 1.5600 7.0600 19.690 28.680 33.400 35.880 36.390 36.510 36.630 37.530 39.360 39.910 36.560 30.320 23.310 16.310 10.440 6.9000 5.1500 4.2300 3.5200 3.0400 2.8600 2.8100 2.8200 3.1200 3.6900 4.0900 3.9800 3.7100 3.2800 3.0300 3.2300 4.0500 987 87.359 0.0000 10.282 10.795 13.675 20.213 36.422 1.5300 0.97000 1.5900 8.1000 24.740 37.520 44.360 47.730 48.060 47.780 47.260 47.070 46.970 45.400 40.770 33.940 26.590 19.410 13.440 9.9000 8.1500 7.2400 6.5300 6.0400 5.8700 5.8100 5.8300 6.1500 6.7500 7.1300 7.0300 6.7500 6.3300 6.0800 6.2700 7.0800 988 71.051 0.0000 8.4124 25.262 14.708 19.412 28.771 1.2300 0.91000 1.5000 7.3900 21.480 31.200 35.560 37.370 37.420 37.130 36.740 36.510 36.320 35.370 32.830 28.880 24.290 19.510 15.280 12.690 11.340 10.610 10.010 9.6200 9.5000 9.4600 9.4900 9.7900 10.330 10.680 10.590 10.370 10.020 9.7600 9.9300 10.650 989 87.796 3.8817 17.036 19.013 11.185 16.631 26.728 0.99000 0.73000 1.4500 6.7200 19.460 28.430 32.710 34.600 34.700 34.440 34.180 34.560 35.570 35.670 32.920 27.970 22.370 16.650 11.730 8.7500 7.2800 6.5400 5.9300 5.5100 5.3600 5.3100 5.3400 5.6300 6.1900 6.5500 6.4500 6.2200 5.8100 5.5500 5.7300 6.4900 990 100.00 18.985 14.833 20.058 7.7061 11.704 23.076 1.0900 0.86000 1.4300 6.3100 17.610 25.500 29.110 30.500 30.110 29.340 28.620 28.310 28.270 27.570 24.850 20.680 16.110 11.430 7.3700 4.9400 3.8400 3.3500 2.9100 2.5900 2.4700 2.4300 2.4500 2.6900 3.1500 3.4700 3.3700 3.1400 2.8400 2.6500 2.7900 3.4500 991 76.828 5.2166 21.196 11.521 15.515 21.837 30.742 1.4100 0.94000 1.5200 7.5300 22.600 33.200 37.820 39.670 39.600 39.150 38.870 39.640 41.700 42.910 40.210 34.620 28.360 22.010 16.550 13.240 11.610 10.820 10.140 9.6400 9.4700 9.4000 9.4400 9.8100 10.480 10.890 10.770 10.460 9.9700 9.6300 9.7800 10.710 992 96.561 19.947 28.305 22.222 7.5083 11.560 18.504 0.86000 0.79000 1.4100 5.6200 14.810 20.680 23.120 23.940 23.660 23.120 22.790 23.290 24.710 25.620 23.880 20.250 16.120 11.800 7.9700 5.6400 4.5900 4.1300 3.7100 3.3700 3.2600 3.2200 3.2400 3.5000 4.0100 4.3300 4.2300 3.9900 3.6300 3.4000 3.5700 4.2700 993 71.424 0.0000 0.0000 15.450 18.572 24.133 41.286 1.5300 1.00000 1.6500 8.8900 28.520 44.020 51.560 54.800 54.670 53.870 52.670 51.160 48.980 45.850 41.450 35.750 29.590 23.420 18.150 14.950 13.280 12.400 11.680 11.190 11.030 10.960 11.010 11.350 11.980 12.370 12.260 12.000 11.550 11.240 11.400 12.250 994 100.00 51.991 23.749 25.581 4.8608 6.2809 12.938 0.70000 0.51000 1.2400 4.9900 12.240 16.340 17.580 17.450 16.530 15.370 14.440 13.980 13.820 13.500 12.040 9.9700 7.9900 6.0000 4.1200 3.0100 2.6700 2.6900 2.6000 2.4400 2.3800 2.3700 2.3900 2.6200 3.1000 3.4000 3.3300 3.1100 2.7800 2.5800 2.7200 3.3500 995 100.00 47.746 17.648 17.659 6.0829 7.9434 17.237 0.71000 0.63000 1.2500 5.6900 15.390 21.430 23.380 23.420 22.220 20.700 19.440 18.680 18.190 17.480 15.500 12.790 10.180 7.5500 5.1000 3.6400 3.1600 3.1300 2.9700 2.7500 2.6600 2.6400 2.6600 2.9300 3.4700 3.8200 3.7100 3.4700 3.0900 2.8500 3.0000 3.7200 996 100.00 34.248 20.127 25.029 6.1804 8.7646 17.007 0.94000 0.78000 1.3900 5.5000 14.450 20.120 22.200 22.650 21.900 20.910 20.090 19.750 19.790 19.470 17.640 14.800 11.780 8.6500 5.8000 4.0700 3.3800 3.1400 2.8800 2.6200 2.5300 2.5100 2.5300 2.7700 3.2300 3.5400 3.4500 3.2300 2.9000 2.6800 2.8400 3.4900 997 100.00 64.202 44.117 19.480 4.2495 5.2618 9.7711 0.49000 0.42000 1.1700 4.2300 9.8600 12.900 13.530 13.140 12.230 11.200 10.440 10.320 10.770 11.020 9.8100 7.9200 6.3700 4.9100 3.4600 2.6300 2.5500 2.8000 2.8200 2.7000 2.6400 2.6200 2.6500 2.9300 3.4300 3.7800 3.6800 3.4100 3.0400 2.8300 2.9400 3.6500 998 100.00 45.932 37.440 10.220 5.8741 8.4307 14.267 0.67000 0.61000 1.2600 5.0700 12.660 17.200 18.640 18.760 18.070 17.130 16.510 16.740 17.820 18.600 17.100 14.240 11.330 8.3700 5.6400 4.0200 3.4600 3.4300 3.2400 2.9900 2.9000 2.8700 2.9100 3.2100 3.8100 4.2200 4.1000 3.8100 3.3900 3.1000 3.2700 4.0700 999 76.163 30.750 23.919 10.138 12.495 15.499 21.601 1.0400 0.82000 1.4900 6.6900 18.340 25.480 27.880 28.270 27.520 26.470 25.720 25.820 26.790 27.380 25.600 22.240 18.750 15.150 11.840 9.8700 9.3300 9.6000 9.7400 9.6800 9.7200 9.7400 9.8200 10.220 10.930 11.370 11.270 10.960 10.490 10.160 10.330 11.260 1000 81.821 19.589 16.184 18.029 11.337 15.142 23.444 1.0300 0.74000 1.3900 6.6800 18.620 26.460 29.650 30.680 30.250 29.480 28.860 28.790 29.210 29.070 26.920 23.270 19.260 15.090 11.360 9.0900 8.1000 7.7700 7.4400 7.1500 7.0500 7.0400 7.0800 7.4000 7.9800 8.3500 8.2500 8.0000 7.6100 7.3600 7.5000 8.2700 1001 79.696 28.625 3.2559 20.694 11.187 13.540 24.232 1.0200 0.81000 1.4900 7.1900 20.250 28.810 31.900 32.520 31.500 30.070 28.750 27.560 26.260 24.690 22.320 19.300 16.200 13.000 10.050 8.2700 7.6400 7.6200 7.5300 7.4000 7.3600 7.3700 7.4200 7.7400 8.3000 8.6600 8.5700 8.3400 7.9600 7.6900 7.8400 8.6200 1002 74.622 35.756 16.148 12.925 11.794 13.865 21.802 1.0200 0.79000 1.4700 6.7700 18.980 26.570 28.930 29.120 27.940 26.470 25.280 24.710 24.570 24.160 22.160 19.160 16.160 13.140 10.330 8.6900 8.3700 8.8200 9.1100 9.1800 9.2500 9.3000 9.3900 9.7400 10.380 10.780 10.680 10.390 9.9800 9.7000 9.8600 10.680 1003 79.540 34.046 26.584 19.841 9.9080 12.336 17.539 0.91000 0.67000 1.2500 5.6900 15.260 21.070 22.880 23.010 22.270 21.290 20.570 20.630 21.450 21.990 20.550 17.860 15.020 12.110 9.4000 7.8100 7.3400 7.5300 7.5900 7.5200 7.5200 7.5300 7.5800 7.9000 8.4800 8.8400 8.7500 8.4900 8.1000 7.8300 7.9600 8.7400 1004 66.164 16.195 8.2682 21.066 15.832 19.053 27.699 1.2000 0.85000 1.4700 7.4700 22.140 31.980 35.650 36.540 35.820 34.760 33.770 33.070 32.520 31.530 29.270 25.980 22.420 18.710 15.350 13.300 12.490 12.390 12.260 12.110 12.090 12.090 12.160 12.510 13.100 13.480 13.400 13.150 12.780 12.480 12.640 13.430 1005 81.824 8.2402 0.0000 22.628 12.988 17.153 31.664 1.3600 0.94000 1.6200 7.7500 23.330 34.840 40.160 42.200 41.760 40.760 39.570 38.230 36.460 34.060 30.710 26.340 21.590 16.700 12.410 9.8000 8.5200 7.9100 7.3800 7.0000 6.8800 6.8300 6.8700 7.1500 7.6700 8.0000 7.9100 7.6800 7.3300 7.0700 7.2000 7.9200 1006 83.120 21.658 21.545 26.043 9.7689 13.014 19.611 1.1100 0.76000 1.4300 5.9600 16.160 22.710 25.100 25.620 25.100 24.330 23.730 23.750 24.400 24.640 22.980 19.990 16.650 13.110 9.8900 7.9300 7.0900 6.8300 6.5500 6.2800 6.2100 6.1700 6.2000 6.4800 6.9900 7.3100 7.2200 6.9900 6.6000 6.3900 6.5100 7.1600 1007 100.00 37.070 18.958 14.154 6.9743 9.7800 20.023 0.79000 0.74000 1.4400 6.5400 17.120 23.750 26.270 26.810 25.880 24.610 23.520 22.980 22.760 22.140 19.850 16.490 13.030 9.4800 6.2800 4.3500 3.6000 3.3800 3.1000 2.8300 2.7300 2.7000 2.7300 3.0100 3.5600 3.9400 3.8300 3.5600 3.1800 2.9200 3.0700 3.8500 1008 46.230 5.4143 8.5876 10.829 28.494 33.362 39.637 1.8200 1.1300 1.7900 9.7200 29.930 44.460 49.850 51.470 51.140 50.340 49.600 49.380 49.580 49.110 46.600 42.380 37.770 33.060 28.900 26.430 25.320 25.050 24.790 24.580 24.570 24.570 24.690 25.120 25.820 26.230 26.170 25.920 25.540 25.260 25.450 26.350 1009 65.639 9.9715 15.834 14.931 17.862 22.624 29.214 1.2800 0.86000 1.6400 7.7700 22.540 32.560 36.450 37.800 37.540 36.960 36.490 36.780 37.850 38.310 36.180 32.080 27.480 22.700 18.460 15.880 14.720 14.310 13.950 13.630 13.550 13.530 13.610 13.990 14.640 15.060 14.970 14.700 14.260 13.950 14.110 14.990 1010 53.448 0.0000 0.0000 18.276 24.042 28.949 41.016 1.6700 1.1300 1.7200 9.3000 29.800 45.460 51.880 54.050 53.630 52.710 51.560 50.270 48.580 46.240 42.960 38.530 33.650 28.630 24.260 21.570 20.130 19.370 18.730 18.300 18.170 18.110 18.160 18.510 19.120 19.480 19.390 19.150 18.770 18.490 18.630 19.440 1011 57.591 17.216 11.482 13.889 19.736 23.057 29.796 1.5000 0.95000 1.6700 8.3100 24.260 34.620 38.190 39.000 38.250 37.180 36.250 35.900 36.000 35.640 33.500 30.030 26.350 22.550 19.080 17.030 16.360 16.590 16.700 16.720 16.790 16.840 16.950 17.370 18.050 18.470 18.380 18.130 17.720 17.430 17.640 18.520 1012 70.197 54.474 20.684 22.767 9.8776 10.034 15.047 0.86000 0.80000 1.3500 5.7300 14.930 20.060 20.930 20.340 19.010 17.460 16.250 15.560 15.260 14.910 13.580 11.760 10.250 8.8200 7.4100 6.6800 7.0100 8.1900 9.0800 9.5000 9.7600 9.8500 9.9700 10.300 10.870 11.250 11.150 10.890 10.540 10.250 10.400 11.140 1013 100.00 61.002 27.186 13.105 5.3696 6.4325 13.989 0.82000 0.71000 1.3700 5.3300 13.690 18.540 19.610 19.170 17.790 16.170 14.890 14.240 13.980 13.580 11.870 9.6100 7.7100 5.8900 4.1300 3.1100 2.9500 3.1900 3.1800 3.0200 2.9500 2.9300 2.9500 3.2500 3.8500 4.2200 4.1100 3.8200 3.3800 3.1000 3.3100 4.0700 1014 100.00 69.533 28.876 22.863 4.0722 4.5515 10.391 0.38000 0.53000 1.1800 4.4500 10.760 14.240 14.880 14.350 13.160 11.790 10.700 10.080 9.7200 9.3100 8.0200 6.4000 5.1500 4.0100 2.9000 2.2600 2.2300 2.5300 2.5900 2.4900 2.4500 2.4400 2.4700 2.7200 3.2000 3.5400 3.4500 3.2100 2.8800 2.6600 2.8100 3.4600 1015 76.681 53.616 0.0000 20.510 9.6911 9.8990 19.248 0.87000 0.73000 1.3900 6.7300 18.570 25.550 27.160 26.550 24.710 22.550 20.700 19.160 17.580 16.110 14.220 12.130 10.360 8.6500 6.9900 6.0800 6.2100 7.0800 7.6900 7.9500 8.1100 8.1900 8.2900 8.6200 9.2200 9.6100 9.5200 9.2600 8.8800 8.6100 8.7700 9.5300 1016 87.022 51.931 13.067 24.340 7.4064 8.3156 16.330 0.82000 0.83000 1.4200 5.8300 15.530 21.300 22.710 22.310 20.910 19.210 17.820 16.850 16.020 15.160 13.460 11.370 9.5000 7.6400 5.8400 4.8000 4.6600 5.0500 5.2200 5.2000 5.2200 5.2200 5.2600 5.5500 6.0900 6.4100 6.3200 6.0500 5.7000 5.4600 5.6000 6.2600 1017 85.630 60.338 28.895 15.503 6.8737 7.4238 12.972 0.65000 0.62000 1.2500 5.2000 12.960 17.260 18.130 17.620 16.390 14.950 13.850 13.330 13.260 13.080 11.660 9.7200 8.0800 6.5400 5.0600 4.2500 4.3800 5.1200 5.5900 5.7400 5.8500 5.8900 5.9700 6.2900 6.8700 7.2500 7.1500 6.8900 6.5000 6.2400 6.4200 7.1800 1018 100.00 75.210 25.779 14.892 4.2598 4.4473 11.173 0.46000 0.48000 1.1800 4.8500 11.920 15.770 16.390 15.640 14.170 12.440 11.090 10.230 9.6200 9.0100 7.5700 5.9300 4.7600 3.7300 2.7300 2.1700 2.2300 2.6100 2.7500 2.6600 2.6400 2.6300 2.6700 2.9400 3.4800 3.8600 3.7500 3.4900 3.1000 2.8400 3.0300 3.7700 1019 100.00 81.919 49.453 25.396 2.8753 2.9656 6.1740 0.49000 0.47000 1.0700 3.4000 7.1100 8.8500 9.0200 8.4900 7.6900 6.7100 6.0100 5.7500 5.8000 5.7700 4.8400 3.6900 2.9800 2.4300 1.8800 1.5900 1.7400 2.1100 2.2600 2.2300 2.2100 2.2200 2.2400 2.4600 2.8900 3.1600 3.0800 2.8800 2.5900 2.4300 2.5700 3.1300 1020 81.810 45.537 23.539 20.225 8.7316 10.174 16.396 0.72000 0.60000 1.2600 5.5900 15.120 20.730 22.180 21.960 20.840 19.490 18.440 18.010 18.080 17.960 16.410 14.060 11.850 9.6100 7.4600 6.2200 6.0400 6.5000 6.7600 6.7800 6.8200 6.8400 6.8900 7.2200 7.8000 8.1500 8.0400 7.7900 7.3800 7.1100 7.2600 8.0100 1021 51.159 19.354 0.0000 26.833 18.262 20.152 26.883 1.1900 0.84000 1.5700 7.6800 22.600 32.220 35.230 35.570 34.620 33.370 32.160 31.080 29.880 28.550 26.730 24.400 21.990 19.480 17.120 15.720 15.370 15.710 15.960 16.060 16.190 16.240 16.350 16.680 17.220 17.550 17.480 17.310 17.010 16.780 16.980 17.630 1022 69.206 44.433 17.418 12.524 12.452 13.473 20.079 0.88000 0.73000 1.4300 6.6300 18.300 25.410 27.220 26.990 25.580 23.930 22.600 21.910 21.680 21.300 19.550 17.000 14.620 12.280 10.060 8.8300 8.9300 9.9900 10.810 11.210 11.450 11.530 11.660 12.050 12.750 13.200 13.120 12.860 12.460 12.160 12.350 13.210 1023 58.151 24.240 0.0000 16.806 18.361 20.188 30.469 1.2600 1.00000 1.5800 8.3000 25.320 36.860 40.610 40.940 39.450 37.540 35.800 34.200 32.480 30.630 28.130 25.080 22.080 19.020 16.190 14.580 14.270 14.860 15.340 15.560 15.720 15.790 15.930 16.300 16.920 17.290 17.200 16.990 16.630 16.340 16.520 17.340 1024 65.302 37.113 0.0000 21.959 13.275 14.150 23.234 1.1200 0.86000 1.4800 7.1600 20.780 29.410 31.750 31.510 29.920 27.980 26.300 24.840 23.330 21.810 19.790 17.420 15.210 13.010 10.880 9.6700 9.6200 10.420 11.000 11.290 11.470 11.540 11.660 12.020 12.610 12.970 12.890 12.670 12.280 12.040 12.190 12.970 1025 64.190 33.262 17.884 18.868 14.105 15.750 20.410 1.0600 0.79000 1.4600 6.5400 18.070 24.930 26.870 26.900 25.940 24.770 23.830 23.540 23.770 23.780 22.330 19.890 17.460 14.980 12.630 11.280 11.190 11.950 12.530 12.800 12.980 13.060 13.190 13.570 14.200 14.600 14.510 14.250 13.870 13.580 13.740 14.580 1026 41.687 14.243 0.88932 19.097 25.628 27.879 35.817 1.6300 1.0700 1.7000 9.0900 29.050 43.000 47.180 47.600 46.170 44.380 42.750 41.270 39.690 37.980 35.690 32.800 29.890 26.910 24.100 22.480 22.120 22.630 23.020 23.220 23.360 23.420 23.520 23.890 24.480 24.810 24.720 24.510 24.160 23.910 24.090 24.790 1027 41.723 25.625 0.0000 13.555 26.004 26.724 35.275 1.4800 1.0800 1.6300 9.3600 29.930 44.200 47.800 47.440 45.290 42.790 40.600 38.730 36.870 35.030 32.650 29.820 27.240 24.710 22.270 20.980 21.290 22.960 24.350 25.190 25.650 25.840 26.020 26.470 27.140 27.530 27.450 27.210 26.790 26.510 26.680 27.480 1028 100.00 100.00 51.979 19.604 2.6711 2.1124 5.4464 0.41000 0.49000 1.0600 3.4500 6.9200 8.4700 8.4200 7.7300 6.7600 5.6600 4.8000 4.2900 3.9900 3.6100 2.6000 1.6600 1.3400 1.2700 1.1600 1.1800 1.5500 2.1500 2.4600 2.4800 2.5000 2.5000 2.5500 2.8000 3.3100 3.6400 3.5500 3.3200 2.9800 2.7300 2.9100 3.5500 1029 100.00 91.699 57.671 19.674 2.7086 2.4142 5.3491 0.54000 0.50000 1.1100 3.3300 6.6500 8.0500 8.0400 7.4600 6.5900 5.6600 4.9200 4.6000 4.5200 4.3500 3.3900 2.3700 1.9100 1.7000 1.4500 1.3600 1.6500 2.1900 2.4300 2.4300 2.4300 2.4400 2.4700 2.7100 3.1800 3.5000 3.4100 3.1700 2.8600 2.6600 2.8100 3.4500 1030 74.368 68.163 34.401 9.8964 8.6214 8.0861 12.203 0.57000 0.64000 1.3300 5.3900 13.060 16.930 17.400 16.590 15.260 13.710 12.540 12.040 12.030 11.960 10.600 8.7800 7.4800 6.3900 5.2700 4.7800 5.5000 7.2400 8.5800 9.2500 9.6200 9.7900 9.9300 10.370 11.100 11.560 11.450 11.170 10.680 10.320 10.500 11.450 1031 91.255 83.209 54.479 12.017 4.0679 3.8782 6.8777 0.46000 0.50000 1.0800 3.7700 7.9500 9.9000 10.030 9.4200 8.4900 7.4500 6.6900 6.4700 6.7000 6.7700 5.6900 4.3200 3.5300 2.9500 2.3400 2.0700 2.4500 3.3000 3.8400 4.0000 4.0900 4.1300 4.1900 4.5100 5.0800 5.4400 5.3500 5.0900 4.7000 4.4400 4.6200 5.3900 1032 85.053 70.266 29.605 17.435 6.1404 6.0033 11.166 0.68000 0.65000 1.3100 4.8900 11.950 15.630 16.120 15.390 14.050 12.510 11.310 10.640 10.330 9.9900 8.6700 7.0500 5.9000 4.9000 3.9000 3.4000 3.7600 4.7100 5.3800 5.6300 5.7700 5.8400 5.9100 6.2500 6.8100 7.2000 7.0900 6.8400 6.4700 6.2000 6.3900 7.1400 1033 100.00 84.130 29.463 21.131 3.6781 3.4471 9.0159 0.46000 0.63000 1.2700 4.4500 10.340 13.350 13.600 12.740 11.340 9.7400 8.4900 7.6600 7.0600 6.4800 5.2600 3.9700 3.2300 2.6800 2.1000 1.8300 2.0200 2.5000 2.6900 2.6400 2.6400 2.6200 2.6700 2.9200 3.4200 3.7500 3.6400 3.4200 3.0700 2.8200 3.0100 3.6600 1034 72.572 68.431 13.955 15.533 9.2067 8.3061 15.298 0.84000 0.68000 1.3500 5.9500 16.140 21.800 22.460 21.300 19.330 17.110 15.330 14.070 13.040 12.120 10.490 8.7000 7.4800 6.4600 5.4000 4.9500 5.6400 7.3000 8.6300 9.2900 9.6400 9.7800 9.8900 10.280 10.950 11.320 11.230 10.960 10.540 10.240 10.370 11.200 1035 83.959 83.852 38.654 15.525 5.3923 4.5639 8.4089 0.44000 0.52000 1.1700 4.3600 9.8200 12.430 12.550 11.700 10.480 9.0700 7.9900 7.4000 7.1000 6.7900 5.6300 4.3400 3.6300 3.1500 2.6300 2.4600 3.0800 4.4100 5.4100 5.8800 6.1300 6.2400 6.3400 6.6900 7.3000 7.6900 7.5900 7.3300 6.9400 6.6500 6.8000 7.6100 1036 82.474 71.266 25.039 27.348 5.9489 5.6112 10.308 0.99000 0.78000 1.3800 4.7500 11.310 14.650 15.020 14.210 12.960 11.470 10.320 9.6000 9.1600 8.7300 7.5700 6.2100 5.2900 4.5300 3.7300 3.3700 3.7500 4.7200 5.3900 5.6700 5.8300 5.8800 5.9700 6.2500 6.7500 7.0700 7.0000 6.7800 6.4400 6.2000 6.3400 7.0300 1037 77.694 66.386 0.0000 22.475 8.0065 7.3334 15.825 0.69000 0.59000 1.2500 5.9600 16.550 22.480 23.370 22.250 20.140 17.780 15.830 14.270 12.720 11.400 9.7500 8.0600 6.8700 5.8200 4.7700 4.2600 4.6900 5.8700 6.7500 7.1500 7.3900 7.4900 7.5800 7.9100 8.4700 8.8300 8.7500 8.5100 8.1400 7.8700 8.0500 8.7100 1038 85.778 85.597 34.649 27.158 4.5086 3.7688 7.4750 0.62000 0.53000 1.1500 4.0200 8.9300 11.190 11.270 10.480 9.3100 8.0200 6.9900 6.3600 5.9600 5.5500 4.5600 3.5100 2.9600 2.6100 2.2100 2.1000 2.6100 3.6500 4.4100 4.7400 4.9200 4.9900 5.0900 5.3700 5.8800 6.2100 6.1400 5.9400 5.5900 5.3500 5.5300 6.2000 1039 79.963 79.992 8.6781 17.743 6.8062 5.5279 12.810 0.76000 0.57000 1.2500 5.6000 14.550 19.330 19.640 18.260 16.140 13.800 11.910 10.460 9.1500 8.0700 6.5800 5.1800 4.3700 3.7900 3.1700 2.9500 3.6300 5.0800 6.2200 6.7900 7.1000 7.2200 7.3400 7.6800 8.2800 8.6400 8.5600 8.2800 7.9300 7.6800 7.8000 8.5300 1040 60.046 48.580 13.142 13.230 14.657 14.416 20.642 1.0200 0.78000 1.4100 7.0400 19.770 27.260 28.690 27.960 26.200 24.160 22.530 21.480 20.750 19.990 18.260 16.060 14.200 12.460 10.740 9.8900 10.520 12.400 13.990 14.890 15.410 15.630 15.800 16.250 16.970 17.410 17.320 17.060 16.620 16.320 16.490 17.330 1041 57.009 52.526 0.0000 20.100 14.195 13.217 20.354 1.1000 0.71000 1.4200 7.2800 20.310 27.730 28.920 27.880 25.860 23.570 21.670 20.100 18.590 17.230 15.510 13.670 12.280 11.030 9.7500 9.1900 9.9800 11.990 13.690 14.700 15.240 15.490 15.690 16.100 16.770 17.150 17.100 16.850 16.510 16.240 16.410 17.190 1042 44.118 35.565 0.0000 21.563 19.530 19.223 24.822 1.2500 0.89000 1.5600 7.8500 22.920 32.060 33.950 33.300 31.620 29.670 28.020 26.630 25.250 23.960 22.290 20.370 18.760 17.210 15.670 14.940 15.580 17.440 19.060 20.050 20.610 20.880 21.090 21.510 22.130 22.490 22.460 22.260 21.960 21.760 21.930 22.690 1043 38.924 37.038 0.0000 11.384 25.394 24.149 31.389 1.4100 1.00000 1.6400 9.2100 28.620 41.320 43.750 42.540 39.980 37.090 34.720 32.730 30.860 29.150 26.990 24.610 22.690 20.960 19.240 18.510 19.630 22.620 25.340 27.100 28.060 28.480 28.790 29.300 30.010 30.440 30.380 30.150 29.770 29.520 29.690 30.540 1044 84.328 100.00 51.348 20.650 4.2329 2.9437 5.5700 0.45000 0.54000 1.0900 3.4900 7.2100 8.7900 8.6400 7.8800 6.8700 5.7500 4.8800 4.3600 4.0400 3.6600 2.6600 1.7200 1.4100 1.3900 1.3100 1.4200 2.2000 3.6800 4.8300 5.4000 5.6900 5.8300 5.9300 6.2700 6.8600 7.2300 7.1600 6.8900 6.5300 6.2400 6.4200 7.1700 1045 90.877 100.00 53.182 11.784 3.7814 2.7814 6.0375 0.30000 0.43000 1.1100 3.7200 7.6900 9.4700 9.3600 8.5500 7.4600 6.2500 5.2800 4.7600 4.4400 4.0700 2.9400 1.8700 1.5100 1.4600 1.3500 1.4300 2.0600 3.2200 4.0100 4.3100 4.4700 4.5400 4.6100 4.9500 5.5700 5.9600 5.8600 5.5800 5.1500 4.8700 5.0500 5.8700 1046 98.184 100.00 27.945 20.478 3.1410 2.2697 7.6326 0.33000 0.51000 1.0500 4.1500 9.6200 12.290 12.220 11.130 9.5400 7.7800 6.3800 5.3700 4.5100 3.7700 2.6300 1.6600 1.3500 1.2800 1.1800 1.2000 1.5800 2.2500 2.5800 2.6200 2.6400 2.6500 2.7000 2.9700 3.4800 3.8200 3.7200 3.4800 3.1300 2.9000 3.0500 3.7400 1047 58.835 85.382 0.0000 27.441 9.3667 6.6417 12.412 0.77000 0.65000 1.3400 5.7700 15.210 19.850 19.560 17.720 15.390 12.910 10.940 9.4100 8.0000 6.9100 5.6000 4.4600 3.9700 3.7900 3.5300 3.6300 4.9800 7.7500 10.240 11.750 12.530 12.860 13.080 13.450 14.020 14.360 14.290 14.080 13.760 13.480 13.600 14.300 1048 66.176 90.644 23.884 15.231 8.4278 5.7085 10.232 0.71000 0.69000 1.3100 5.2000 12.900 16.440 16.150 14.610 12.660 10.520 8.8400 7.6900 6.7300 5.9400 4.6200 3.3900 2.9000 2.7700 2.5500 2.7100 4.1400 7.0700 9.6700 11.230 12.040 12.380 12.610 13.050 13.760 14.190 14.100 13.820 13.390 13.050 13.230 14.060 1049 63.729 75.741 0.0000 15.853 10.922 8.5238 16.225 0.84000 0.73000 1.3800 6.6700 18.420 24.730 24.910 22.990 20.340 17.440 15.150 13.350 11.660 10.310 8.6600 7.1300 6.2600 5.6900 5.0300 4.9100 6.1300 8.7900 11.130 12.540 13.280 13.580 13.800 14.230 14.910 15.330 15.240 14.990 14.580 14.280 14.410 15.240 1050 79.095 88.613 24.112 20.768 5.9553 4.5876 9.6427 0.52000 0.67000 1.2800 4.8400 11.610 14.910 14.870 13.710 12.030 10.170 8.7100 7.6900 6.8900 6.1900 4.9600 3.7500 3.1800 2.8700 2.5000 2.4400 3.2100 4.7800 6.0200 6.6400 6.9600 7.0900 7.2000 7.5500 8.1300 8.4900 8.4000 8.1500 7.7600 7.5100 7.6300 8.3800 1051 73.641 84.678 36.679 11.172 7.3104 5.7133 9.3210 0.43000 0.51000 1.1700 4.6600 11.020 14.080 14.060 13.030 11.580 9.9300 8.6900 7.9900 7.6300 7.3000 6.0500 4.6700 3.9600 3.5500 3.0700 3.0000 4.0600 6.2400 8.0400 9.0200 9.5600 9.7700 9.9300 10.360 11.060 11.520 11.420 11.130 10.680 10.320 10.510 11.380 1052 78.923 99.272 20.782 17.683 5.5653 3.5496 8.8625 0.48000 0.51000 1.1900 4.7600 11.480 14.620 14.340 12.920 11.020 8.9100 7.2600 6.0300 4.9600 4.0800 2.8600 1.8300 1.4900 1.4800 1.4100 1.5600 2.5200 4.4000 5.9400 6.8000 7.2200 7.4000 7.5400 7.9200 8.5300 8.9500 8.8600 8.6100 8.1900 7.9100 8.0500 8.8200 1053 55.049 71.683 0.0000 23.149 11.612 9.2009 14.981 0.97000 0.69000 1.3200 6.3600 17.010 22.410 22.540 20.970 18.770 16.370 14.430 12.890 11.450 10.300 8.8800 7.5400 6.8000 6.3300 5.8000 5.7500 7.0700 9.8500 12.310 13.850 14.680 15.030 15.290 15.720 16.350 16.730 16.690 16.480 16.150 15.890 16.030 16.830 1054 60.444 65.346 11.843 12.620 12.745 10.923 17.514 0.83000 0.68000 1.3400 6.7000 18.630 25.140 25.740 24.300 22.040 19.550 17.570 16.120 14.930 13.910 12.190 10.330 9.1200 8.1500 7.1300 6.7800 7.9900 10.700 13.010 14.380 15.110 15.420 15.630 16.110 16.860 17.300 17.210 16.930 16.470 16.160 16.290 17.200 1055 44.991 62.025 0.0000 16.668 16.347 13.427 19.349 0.88000 0.84000 1.3600 7.2200 20.710 28.140 28.590 26.810 24.280 21.570 19.370 17.650 16.020 14.700 13.060 11.460 10.480 9.7900 9.0300 8.9400 10.580 14.150 17.470 19.650 20.850 21.360 21.700 22.180 22.870 23.280 23.230 23.040 22.700 22.480 22.630 23.420 1056 48.243 57.764 0.0000 26.016 14.280 12.447 17.428 0.98000 0.72000 1.3400 6.6200 18.270 24.540 25.110 23.880 21.950 19.840 18.100 16.710 15.380 14.270 12.870 11.460 10.540 9.8100 9.0400 8.8300 10.010 12.580 14.860 16.300 17.060 17.420 17.670 18.090 18.670 19.040 19.010 18.850 18.550 18.340 18.490 19.240 1057 66.749 100.00 0.0000 12.020 8.5490 5.0187 11.927 0.71000 0.49000 1.2700 6.0400 15.800 20.460 19.830 17.540 14.690 11.660 9.3100 7.4800 5.8200 4.5700 3.1300 1.9800 1.6200 1.6500 1.6200 1.9000 3.4700 6.6600 9.5900 11.410 12.370 12.780 13.050 13.540 14.300 14.790 14.720 14.400 13.940 13.610 13.780 14.690 1058 65.179 100.00 31.056 23.224 6.9694 4.3881 7.7127 0.76000 0.69000 1.2700 4.4300 10.220 12.740 12.340 11.050 9.5000 7.7700 6.4200 5.4800 4.7300 4.0700 2.9600 1.9700 1.6600 1.7000 1.6500 1.8800 3.2400 5.9600 8.3700 9.8200 10.560 10.890 11.090 11.500 12.120 12.510 12.430 12.190 11.830 11.520 11.690 12.450 1059 57.632 100.00 23.793 13.794 9.1832 5.4724 9.1192 0.60000 0.60000 1.1900 5.0300 12.200 15.320 14.770 13.170 11.210 9.0700 7.4200 6.2300 5.2100 4.3800 3.1100 2.0000 1.6700 1.7300 1.7100 2.0500 3.8900 7.6600 11.260 13.590 14.850 15.400 15.740 16.260 17.030 17.500 17.430 17.180 16.760 16.460 16.630 17.510 1060 63.759 100.00 0.0000 22.098 7.6360 4.5215 10.453 0.55000 0.62000 1.1900 5.3800 13.980 17.950 17.360 15.320 12.850 10.220 8.1800 6.5800 5.1400 4.0700 2.8200 1.8300 1.5300 1.5600 1.5300 1.7700 3.1500 5.9900 8.6100 10.230 11.090 11.450 11.690 12.100 12.700 13.080 13.020 12.810 12.450 12.190 12.390 13.050 1061 49.761 89.238 0.0000 20.596 11.027 7.2168 12.554 0.71000 0.63000 1.2900 5.9500 15.930 20.700 20.100 18.020 15.480 12.780 10.670 9.0400 7.5500 6.4100 5.0800 3.9300 3.4900 3.4000 3.2400 3.4900 5.2900 9.0700 12.700 15.110 16.400 16.950 17.300 17.770 18.410 18.790 18.760 18.570 18.250 18.020 18.190 18.890 1062 50.780 79.318 0.0000 13.117 13.774 9.8311 16.572 0.79000 0.81000 1.4300 7.0800 19.730 26.220 25.940 23.550 20.550 17.400 14.910 12.980 11.220 9.8400 8.1800 6.7000 5.9900 5.6600 5.2400 5.3700 7.3100 11.420 15.310 17.850 19.230 19.820 20.170 20.700 21.440 21.880 21.830 21.580 21.180 20.890 21.020 21.910 1063 40.401 100.00 0.0000 13.390 13.774 7.6767 12.529 0.69000 0.59000 1.2200 6.4000 17.360 22.220 21.030 18.270 15.210 12.000 9.5500 7.6800 5.9900 4.7500 3.2900 2.1100 1.7900 1.9100 1.9500 2.4500 5.1200 10.910 16.900 21.220 23.670 24.750 25.360 26.020 26.810 27.290 27.280 27.090 26.750 26.500 26.700 27.490 1064 86.391 0.0000 29.412 16.620 11.324 17.766 23.488 1.1600 0.80000 1.4500 6.4200 17.270 24.490 27.900 29.520 29.890 30.030 30.370 31.960 35.250 37.820 35.980 30.780 24.580 18.280 12.940 9.7100 8.0900 7.2400 6.5400 6.0700 5.9300 5.8700 5.9100 6.2200 6.8100 7.1800 7.0900 6.8100 6.4200 6.1100 6.3000 7.1000 1065 100.00 10.977 45.545 13.835 7.3951 13.289 17.222 1.0900 0.75000 1.4000 5.1900 13.070 18.060 20.340 21.380 21.530 21.550 21.900 23.760 27.840 31.520 30.320 25.480 19.760 13.920 8.9300 5.9600 4.5600 3.8800 3.3100 2.9100 2.7600 2.7200 2.7400 3.0100 3.5500 3.9000 3.8000 3.5500 3.1700 2.9300 3.1400 3.8700 1066 100.00 0.0000 35.970 23.942 7.2167 12.862 17.809 0.86000 0.71000 1.3000 5.1300 13.170 18.450 21.010 22.230 22.510 22.650 23.000 24.540 27.780 30.470 29.110 24.580 19.070 13.410 8.6000 5.7200 4.3100 3.5700 3.0000 2.6100 2.4800 2.4400 2.4500 2.6900 3.1400 3.4500 3.3600 3.1400 2.8400 2.6000 2.8000 3.4300 1067 100.00 42.512 60.531 27.627 4.1414 6.5091 7.8093 0.44000 0.44000 1.0500 3.4500 7.1700 9.1400 9.7200 9.7600 9.5100 9.1900 9.1700 10.060 12.130 14.000 13.500 11.460 9.2100 6.8400 4.6600 3.3600 2.8900 2.8000 2.6300 2.4300 2.3600 2.3500 2.3700 2.5900 3.0200 3.3200 3.2300 3.0400 2.7400 2.5300 2.6900 3.3000 1068 100.00 41.532 49.350 13.078 5.4359 8.5449 11.827 0.60000 0.60000 1.2300 4.5700 10.490 13.760 14.870 15.040 14.670 14.180 14.000 14.910 17.150 19.090 18.080 15.170 12.050 8.8200 5.8700 4.1100 3.4600 3.3200 3.0800 2.8200 2.7300 2.7100 2.7200 3.0100 3.5700 3.9600 3.8500 3.5800 3.1800 2.9300 3.1000 3.8700 1069 100.00 37.910 40.342 23.495 5.0397 7.6699 11.989 0.59000 0.68000 1.1900 4.4200 10.520 14.080 15.350 15.510 15.070 14.500 14.160 14.630 16.000 17.100 16.000 13.440 10.690 7.8100 5.2000 3.6400 3.0400 2.8800 2.6700 2.4400 2.3700 2.3400 2.3500 2.5900 3.0200 3.3100 3.2300 3.0100 2.7200 2.5300 2.7000 3.3400 1070 100.00 53.892 66.623 12.728 4.2166 6.4532 7.3861 0.75000 0.61000 1.1900 3.5600 7.0700 8.8600 9.2900 9.1700 8.8700 8.4900 8.4400 9.4600 11.850 13.990 13.360 11.110 8.8800 6.6300 4.5200 3.3000 2.9600 3.0500 2.9600 2.7600 2.7000 2.6800 2.7200 2.9900 3.5400 3.9000 3.7800 3.5300 3.1500 2.9200 3.1000 3.9000 1071 58.919 0.0000 26.722 27.049 16.642 21.428 21.446 1.2100 0.84000 1.4100 6.3300 17.080 23.560 25.970 26.840 26.930 26.940 27.140 28.400 31.110 33.580 33.130 30.240 26.470 22.380 18.730 16.470 15.260 14.630 14.100 13.750 13.640 13.620 13.690 14.000 14.550 14.890 14.830 14.610 14.290 14.060 14.220 14.900 1072 83.277 11.272 41.227 11.365 11.447 17.359 19.079 1.1500 0.83000 1.3900 5.7700 14.780 20.390 22.660 23.620 23.760 23.770 24.140 26.100 30.410 34.440 33.620 29.130 23.760 18.190 13.360 10.450 9.0800 8.4700 7.9300 7.5100 7.3900 7.3400 7.3900 7.7400 8.3900 8.8100 8.7000 8.4100 7.9600 7.6400 7.8600 8.6800 1073 72.887 5.9002 33.139 20.632 13.473 18.780 21.203 1.1100 0.80000 1.5000 6.0800 16.560 23.190 25.760 26.720 26.680 26.510 26.610 27.980 31.150 33.970 33.020 29.190 24.500 19.580 15.230 12.570 11.260 10.630 10.110 9.7000 9.5700 9.5200 9.5600 9.8800 10.460 10.820 10.710 10.460 10.050 9.7800 9.9200 10.700 1074 85.327 2.8518 28.033 25.533 10.085 15.192 20.206 1.0500 0.77000 1.4000 5.8300 15.370 21.610 24.300 25.530 25.720 25.730 25.890 26.940 29.170 30.800 29.370 25.490 20.790 15.820 11.460 8.7800 7.4200 6.7200 6.1300 5.7400 5.6100 5.5700 5.6000 5.8800 6.4000 6.7400 6.6500 6.4100 6.0800 5.8200 6.0000 6.7300 1075 73.866 19.636 36.061 12.554 13.151 17.642 19.396 0.93000 0.76000 1.4300 6.0700 15.890 21.730 23.830 24.450 24.270 23.930 23.910 25.220 28.300 31.110 30.220 26.630 22.470 18.110 14.200 11.820 10.900 10.740 10.500 10.270 10.220 10.220 10.290 10.670 11.370 11.800 11.700 11.400 10.940 10.600 10.780 11.680 1076 80.930 20.107 27.929 17.167 11.519 15.655 21.203 1.0700 0.72000 1.4200 6.1600 17.150 24.140 26.680 27.400 26.970 26.290 25.880 26.450 28.160 29.480 27.920 24.270 20.180 15.910 12.060 9.7100 8.7200 8.4300 8.1000 7.8100 7.7200 7.6800 7.7200 8.0700 8.6800 9.0500 8.9400 8.6500 8.2400 7.9300 8.0900 8.9100 1077 100.00 20.799 35.485 13.182 7.4810 12.261 18.445 0.95000 0.79000 1.4500 5.6100 14.670 20.350 22.760 23.610 23.370 22.920 22.760 23.790 26.320 28.330 26.640 22.380 17.560 12.620 8.2700 5.6400 4.4700 3.9600 3.4800 3.1100 2.9700 2.9300 2.9500 3.2400 3.8200 4.2000 4.0600 3.8100 3.3900 3.1100 3.3300 4.0900 1078 100.00 27.765 46.345 21.381 5.6718 9.2687 12.591 0.75000 0.57000 1.2000 4.4500 10.520 14.120 15.460 15.860 15.710 15.420 15.430 16.460 18.770 20.740 19.780 16.790 13.370 9.7400 6.4700 4.4900 3.6400 3.3200 2.9800 2.6900 2.5800 2.5500 2.5800 2.8400 3.3500 3.6800 3.5800 3.3500 2.9900 2.7600 2.9500 3.6300 1079 65.568 0.0000 19.593 20.117 17.221 22.825 27.124 1.2900 0.96000 1.5100 7.2100 20.590 29.360 32.970 34.430 34.620 34.580 34.670 35.620 37.720 39.160 37.580 33.520 28.630 23.460 18.940 16.150 14.680 13.910 13.250 12.810 12.670 12.640 12.690 13.050 13.670 14.070 13.970 13.730 13.310 13.040 13.220 14.020 1080 54.701 0.0000 16.511 11.388 24.459 30.917 35.060 1.4800 1.0300 1.6800 8.5300 25.890 38.100 43.030 44.800 44.880 44.600 44.520 45.530 48.010 49.800 47.850 42.910 37.160 31.290 26.300 23.320 21.740 20.910 20.210 19.760 19.620 19.580 19.650 20.040 20.720 21.140 21.050 20.810 20.380 20.080 20.260 21.170 1081 100.00 52.292 42.808 26.483 4.5187 6.1715 10.023 0.80000 0.76000 1.3500 4.2300 9.6400 12.570 13.290 13.170 12.540 11.760 11.270 11.430 12.280 12.960 11.940 9.9700 8.0700 6.1300 4.2800 3.1800 2.8700 2.9200 2.8300 2.6600 2.5900 2.5700 2.6000 2.8300 3.3000 3.6200 3.5100 3.2900 2.9600 2.7600 2.9200 3.5300 1082 100.00 66.387 64.850 22.645 3.3333 4.3120 6.0227 0.55000 0.53000 1.1900 3.3200 6.3800 7.8300 8.0500 7.8000 7.3300 6.7900 6.4800 6.8700 7.9500 8.8100 8.0500 6.5400 5.2800 4.1100 2.9700 2.3300 2.2800 2.5500 2.6000 2.4900 2.4600 2.4600 2.4800 2.7300 3.1900 3.4900 3.3900 3.2000 2.8600 2.6800 2.8400 3.4800 1083 100.00 56.709 53.042 16.551 4.1601 5.8646 8.7909 0.49000 0.51000 1.1500 3.8800 8.5100 11.020 11.600 11.430 10.860 10.190 9.8000 10.230 11.580 12.700 11.760 9.7000 7.7400 5.8000 3.9600 2.9100 2.6400 2.7500 2.7000 2.5400 2.4900 2.4600 2.5000 2.7500 3.2600 3.5800 3.4900 3.2300 2.8900 2.6900 2.8600 3.5900 1084 86.436 48.712 40.318 11.057 7.8705 9.7503 13.741 0.73000 0.64000 1.2900 5.1200 12.790 17.070 18.190 18.030 17.210 16.200 15.550 15.810 17.070 18.090 16.860 14.300 11.840 9.3600 7.0200 5.6700 5.4700 5.9600 6.2200 6.2300 6.2600 6.2900 6.3500 6.7000 7.3600 7.7700 7.6500 7.3600 6.9100 6.5900 6.7600 7.6000 1085 87.883 41.355 47.625 23.059 6.5044 8.7885 10.673 0.77000 0.60000 1.2000 4.2300 9.6900 12.710 13.530 13.610 13.230 12.720 12.530 13.220 14.970 16.510 15.810 13.660 11.350 8.9300 6.6600 5.3200 4.9200 5.0200 4.9800 4.8600 4.8300 4.8300 4.8700 5.1600 5.6700 6.0100 5.9200 5.7000 5.3300 5.1000 5.2700 5.9400 1086 67.453 16.648 22.865 26.311 13.122 16.388 19.481 1.1300 0.74000 1.3600 5.9500 16.110 22.280 24.420 25.000 24.720 24.230 23.970 24.420 25.660 26.550 25.470 22.870 19.880 16.650 13.660 11.840 11.100 10.950 10.780 10.600 10.580 10.580 10.640 10.960 11.510 11.870 11.790 11.580 11.210 10.960 11.100 11.840 1087 66.947 30.923 28.577 15.427 14.134 16.632 19.836 1.1200 0.81000 1.4600 6.3300 17.280 23.850 25.690 25.820 25.000 23.980 23.330 23.660 25.060 26.280 25.060 22.230 19.270 16.230 13.380 11.720 11.440 12.030 12.440 12.570 12.680 12.740 12.810 13.210 13.890 14.300 14.190 13.920 13.430 13.130 13.260 14.160 1088 56.589 16.972 15.417 22.137 17.574 20.538 24.426 1.2600 0.81000 1.5300 7.4400 20.540 28.580 31.130 31.660 31.100 30.310 29.690 29.710 30.340 30.620 29.220 26.510 23.530 20.380 17.450 15.710 15.140 15.280 15.330 15.320 15.370 15.420 15.530 15.890 16.490 16.850 16.780 16.580 16.210 15.960 16.140 16.940 1089 57.970 18.157 28.274 21.863 15.968 19.113 19.806 0.96000 0.77000 1.3500 6.0600 16.670 22.950 24.930 25.280 24.870 24.320 24.060 24.770 26.730 28.540 27.880 25.330 22.380 19.230 16.330 14.630 14.100 14.280 14.390 14.390 14.470 14.510 14.610 14.950 15.530 15.900 15.830 15.600 15.250 14.990 15.110 15.910 1090 67.576 33.197 27.905 26.200 11.181 12.933 15.585 0.98000 0.76000 1.3900 5.4400 14.090 19.010 20.320 20.290 19.620 18.770 18.200 18.320 19.190 19.920 18.990 16.940 14.830 12.610 10.490 9.2700 9.0800 9.5800 9.9200 10.020 10.130 10.180 10.260 10.590 11.140 11.480 11.410 11.180 10.840 10.590 10.730 11.480 1091 74.940 35.389 45.403 16.884 10.314 12.896 13.842 0.67000 0.58000 1.2400 4.9300 12.300 16.400 17.560 17.610 17.150 16.550 16.330 17.190 19.480 21.610 20.940 18.420 15.700 12.880 10.220 8.6800 8.3600 8.7700 9.0200 9.0400 9.1100 9.1300 9.2000 9.5400 10.170 10.560 10.450 10.190 9.7700 9.4400 9.6300 10.410 1092 56.541 15.063 20.939 13.869 20.516 24.445 28.317 1.4600 0.98000 1.5800 7.7500 22.960 32.850 36.070 36.690 36.000 35.020 34.360 34.740 36.320 37.500 35.930 32.350 28.390 24.290 20.570 18.380 17.640 17.810 17.880 17.830 17.850 17.860 17.940 18.340 19.020 19.410 19.290 18.990 18.560 18.250 18.360 19.270 1093 41.535 0.0000 17.160 19.624 26.272 31.400 30.954 1.6300 1.0100 1.6800 8.0700 24.210 34.870 38.430 39.400 39.170 38.790 38.650 39.570 41.920 44.050 43.360 40.250 36.380 32.200 28.500 26.240 25.010 24.370 23.800 23.430 23.320 23.290 23.370 23.710 24.300 24.620 24.520 24.320 23.990 23.770 23.890 24.720 1094 32.025 0.0000 0.0000 18.289 34.064 38.333 44.647 2.0000 1.3100 1.7300 10.120 33.500 51.230 57.270 58.540 57.690 56.510 55.260 54.050 52.720 51.000 48.720 45.540 42.000 38.260 34.910 32.870 31.710 31.090 30.590 30.240 30.130 30.100 30.180 30.530 31.080 31.330 31.270 31.070 30.780 30.640 30.700 31.490 1095 51.434 0.0000 11.611 22.418 22.211 27.177 32.378 1.5200 1.0500 1.6400 8.1100 24.790 36.290 40.510 41.800 41.540 41.010 40.570 40.740 41.570 41.830 40.000 36.380 32.100 27.600 23.580 21.120 19.760 19.050 18.440 18.040 17.890 17.830 17.880 18.220 18.790 19.090 19.000 18.790 18.410 18.160 18.290 19.020 1096 37.044 4.8665 6.7948 25.968 25.055 28.125 30.580 1.6100 1.0100 1.5700 8.2100 24.650 35.620 38.990 39.630 39.060 38.300 37.610 37.320 37.320 37.040 35.720 33.420 30.840 28.060 25.510 23.990 23.320 23.240 23.120 23.030 23.060 23.100 23.210 23.550 24.040 24.330 24.290 24.150 23.910 23.790 23.920 24.580 1097 43.097 16.634 20.422 17.082 23.341 26.029 26.052 1.3100 0.93000 1.5100 7.5200 21.780 30.720 33.260 33.560 32.890 32.010 31.460 31.850 33.360 34.700 33.810 31.260 28.460 25.560 22.870 21.350 21.150 21.840 22.410 22.730 22.950 23.070 23.230 23.630 24.230 24.600 24.530 24.340 24.030 23.790 23.970 24.710 1098 28.028 0.0000 6.6398 14.050 37.629 42.354 42.004 1.8000 1.3100 2.0400 10.960 33.000 47.940 52.770 53.890 53.550 52.960 52.490 52.630 53.380 53.710 52.430 49.590 46.250 42.700 39.480 37.590 36.500 35.990 35.520 35.250 35.230 35.240 35.400 35.820 36.430 36.760 36.760 36.610 36.340 36.180 36.400 37.220 1099 90.154 70.713 46.668 19.932 4.8654 5.1736 8.4091 0.63000 0.56000 1.1600 4.0700 9.0200 11.470 11.790 11.320 10.470 9.4600 8.7400 8.6000 8.9500 9.1400 8.1000 6.5800 5.4500 4.4600 3.4500 2.9300 3.1500 3.8500 4.2700 4.3600 4.4300 4.4600 4.5200 4.8200 5.4000 5.7600 5.6800 5.4100 5.0300 4.7600 4.9300 5.6900 1100 75.591 61.805 41.410 14.890 8.0030 8.2085 10.990 0.78000 0.61000 1.2700 4.7400 11.270 14.680 15.150 14.670 13.670 12.540 11.730 11.650 12.230 12.720 11.640 9.8400 8.3800 7.0500 5.7300 5.1000 5.5300 6.8000 7.7600 8.2100 8.4600 8.5700 8.6700 9.0300 9.6700 10.070 9.9700 9.7000 9.3100 8.9900 9.1600 9.9400 1101 77.950 53.678 36.405 24.320 7.5910 8.4090 11.028 0.62000 0.62000 1.1700 4.5100 10.770 14.150 14.820 14.530 13.770 12.900 12.270 12.310 12.940 13.440 12.500 10.800 9.2900 7.7900 6.3000 5.5000 5.6300 6.3700 6.8800 7.0800 7.2000 7.2700 7.3500 7.6700 8.2300 8.5800 8.5000 8.2600 7.9200 7.6700 7.8200 8.5300 1102 98.150 73.378 64.863 15.190 3.5166 4.2365 6.1567 0.54000 0.60000 1.1400 3.4600 6.7400 8.2500 8.4100 8.0800 7.4900 6.8400 6.4300 6.7300 7.6800 8.4200 7.5500 6.0300 4.8900 3.8500 2.8500 2.3000 2.3700 2.7800 2.9300 2.8600 2.8400 2.8300 2.8700 3.1500 3.7100 4.0600 3.9500 3.6900 3.3300 3.0600 3.2400 3.9600 1103 89.441 75.793 67.200 20.184 4.0887 4.2497 5.3363 0.63000 0.52000 1.1500 3.2300 6.0600 7.3000 7.4000 7.0000 6.4500 5.8600 5.4800 5.7000 6.4900 7.1100 6.3600 5.1100 4.2600 3.5600 2.8400 2.5000 2.8200 3.6100 4.1200 4.2800 4.3700 4.4200 4.4800 4.7700 5.3100 5.6500 5.5700 5.3300 4.9600 4.7300 4.9000 5.5700 1104 84.035 59.386 43.546 10.345 7.2252 8.0787 11.605 0.74000 0.62000 1.2600 4.8100 11.490 15.080 15.810 15.420 14.500 13.370 12.620 12.650 13.470 14.120 12.910 10.790 8.9700 7.2600 5.5800 4.6900 4.8700 5.7500 6.3400 6.5600 6.7000 6.7600 6.8400 7.2000 7.8400 8.2300 8.1400 7.8600 7.4300 7.1500 7.3400 8.1800 1105 86.980 63.751 65.814 22.160 4.9203 5.6728 6.1971 0.76000 0.59000 1.2300 3.3400 6.5600 7.9800 8.1800 7.9200 7.4700 6.9900 6.7600 7.2400 8.5600 9.7000 9.0900 7.6000 6.3600 5.2300 4.0700 3.4800 3.6500 4.3200 4.7300 4.8500 4.9300 4.9700 5.0300 5.3300 5.8500 6.1800 6.1000 5.8700 5.5200 5.2900 5.4300 6.1600 1106 63.203 48.856 34.559 24.941 10.918 11.295 12.503 0.74000 0.69000 1.2800 4.9100 12.180 16.050 16.730 16.380 15.600 14.650 13.990 14.040 14.750 15.400 14.630 13.050 11.620 10.240 8.8700 8.1700 8.5900 9.9000 10.960 11.530 11.860 11.990 12.130 12.500 13.070 13.460 13.390 13.170 12.800 12.560 12.710 13.450 1107 43.537 26.393 8.2171 20.773 20.816 21.713 25.964 1.3400 0.81000 1.5400 7.7100 22.790 32.200 34.540 34.350 33.080 31.520 30.260 29.440 28.910 28.290 26.720 24.510 22.410 20.290 18.270 17.220 17.460 18.800 19.940 20.620 21.040 21.210 21.390 21.780 22.340 22.690 22.620 22.460 22.180 21.970 22.110 22.860 1108 53.511 28.413 22.370 21.420 16.553 18.206 19.720 1.00000 0.88000 1.4100 6.4600 17.550 23.920 25.580 25.560 24.830 23.930 23.280 23.430 24.330 25.070 24.100 21.980 19.790 17.530 15.360 14.160 14.180 15.070 15.790 16.150 16.400 16.520 16.660 17.050 17.650 18.050 17.980 17.760 17.420 17.180 17.340 18.170 1109 64.562 45.542 26.538 17.768 12.169 12.859 16.242 0.97000 0.75000 1.2800 5.7000 15.340 20.800 21.910 21.540 20.430 19.150 18.190 17.980 18.410 18.750 17.560 15.480 13.570 11.710 9.9000 8.9400 9.2400 10.520 11.530 12.070 12.360 12.500 12.630 13.010 13.650 14.020 13.940 13.690 13.310 13.010 13.180 14.000 1110 75.911 48.763 42.982 16.783 8.9018 10.208 11.938 0.91000 0.66000 1.2600 4.8000 11.420 14.900 15.680 15.480 14.820 14.030 13.540 13.940 15.250 16.420 15.540 13.510 11.590 9.6700 7.7900 6.7400 6.8100 7.6400 8.1900 8.4100 8.5500 8.6200 8.7100 9.1000 9.7400 10.150 10.050 9.7800 9.3600 9.0400 9.2200 10.040 1111 35.588 25.650 14.896 19.317 23.882 24.494 24.790 1.1400 0.90000 1.4200 7.5100 22.010 30.780 32.690 32.380 31.240 29.930 28.950 28.680 29.140 29.540 28.530 26.580 24.710 22.870 21.090 20.260 20.800 22.630 24.260 25.290 25.910 26.150 26.380 26.800 27.380 27.710 27.690 27.530 27.260 27.090 27.250 27.950 1112 53.132 26.688 18.519 12.118 20.444 22.409 26.214 1.3700 1.0600 1.5900 7.7100 22.600 31.880 34.390 34.400 33.240 31.840 30.770 30.600 31.260 31.730 30.150 27.230 24.270 21.300 18.520 16.990 16.990 18.150 19.120 19.620 19.940 20.080 20.240 20.670 21.370 21.790 21.700 21.450 21.020 20.700 20.910 21.740 1113 21.929 2.3188 6.0961 22.641 34.629 37.656 36.313 1.8800 1.1500 1.7600 9.3200 29.170 42.820 46.540 46.910 46.150 45.220 44.450 44.190 44.460 44.530 43.680 41.890 39.870 37.680 35.600 34.440 33.900 33.840 33.750 33.690 33.750 33.780 33.910 34.250 34.690 34.940 34.920 34.840 34.660 34.600 34.740 35.270 1114 27.389 10.252 0.0000 23.228 29.967 31.771 34.433 1.5500 1.1100 1.7300 9.5100 28.690 41.380 44.820 45.010 44.000 42.760 41.580 40.550 39.500 38.370 36.880 34.930 32.950 30.910 28.930 27.870 27.750 28.390 28.910 29.220 29.470 29.600 29.770 30.150 30.670 30.960 30.960 30.830 30.630 30.550 30.720 31.360 1115 98.181 100.00 73.434 12.891 2.6714 2.2433 4.0889 0.42000 0.50000 1.0700 3.0100 5.3200 6.1800 6.0800 5.5900 4.9600 4.2800 3.7800 3.6700 3.8400 3.8100 2.8300 1.8000 1.4400 1.3800 1.2600 1.2900 1.7100 2.4600 2.8500 2.8800 2.9100 2.9200 2.9700 3.2700 3.8400 4.2200 4.1100 3.8400 3.4500 3.1800 3.3300 4.1200 1116 100.00 87.670 72.161 19.044 2.7089 2.8358 4.3265 0.34000 0.52000 1.1100 2.9400 5.2400 6.1700 6.1300 5.7200 5.2300 4.6400 4.2700 4.3900 4.9700 5.3300 4.5000 3.3600 2.7300 2.3000 1.8300 1.6300 1.8700 2.3600 2.5600 2.5400 2.5400 2.5300 2.5700 2.8200 3.3300 3.6600 3.5600 3.3100 2.9900 2.7600 2.9400 3.6300 1117 100.00 93.737 94.443 21.057 2.3238 2.2874 2.7071 0.46000 0.44000 1.0500 2.4500 3.5700 3.8500 3.7400 3.4400 3.1400 2.8400 2.6900 2.9600 3.6600 4.0800 3.3200 2.3100 1.8600 1.6800 1.4300 1.3900 1.7300 2.3100 2.5900 2.5900 2.5900 2.5900 2.6300 2.8800 3.4000 3.7000 3.6300 3.3800 3.0300 2.8100 2.9900 3.6500 1118 93.741 100.00 87.649 18.132 2.8211 2.3622 3.0950 0.40000 0.49000 1.0700 2.6100 4.1300 4.5700 4.4400 4.0800 3.6700 3.2600 2.9600 3.0600 3.4800 3.6400 2.7900 1.8200 1.4900 1.4300 1.3200 1.3700 1.8700 2.7800 3.3300 3.5000 3.5800 3.6100 3.6700 3.9600 4.5200 4.8800 4.7800 4.5200 4.1300 3.8800 4.0400 4.7300 1119 70.860 73.154 51.119 9.8165 8.6282 7.8031 9.1632 0.83000 0.70000 1.3500 4.5000 10.120 12.740 12.910 12.240 11.270 10.140 9.3600 9.3500 10.020 10.560 9.4800 7.8300 6.7500 5.9100 5.0200 4.6800 5.6600 7.8100 9.5500 10.490 10.980 11.190 11.350 11.780 12.540 12.980 12.860 12.550 12.060 11.700 11.870 12.770 1120 80.268 77.857 57.421 19.313 5.6785 5.2060 6.7575 0.60000 0.48000 1.1600 3.6600 7.7300 9.5500 9.6100 9.0700 8.2700 7.4000 6.7700 6.7500 7.2300 7.5900 6.6600 5.3300 4.5200 3.9300 3.2900 3.0600 3.7000 5.0900 6.1400 6.6200 6.8600 6.9800 7.0700 7.4200 8.0100 8.4000 8.2800 8.0400 7.6300 7.3700 7.4900 8.3000 1121 67.660 62.559 49.618 17.377 9.0953 8.8318 9.1207 0.61000 0.56000 1.2100 4.2100 9.5800 12.160 12.420 11.950 11.190 10.310 9.7500 9.9600 11.000 11.920 11.170 9.6100 8.4000 7.3600 6.2800 5.8400 6.6000 8.4000 9.8500 10.650 11.070 11.270 11.420 11.830 12.490 12.880 12.810 12.540 12.120 11.820 12.020 12.820 1122 66.383 63.851 32.094 20.096 9.5874 8.9124 11.521 0.84000 0.61000 1.2200 4.9300 12.110 15.810 16.170 15.520 14.380 13.080 12.100 11.730 11.800 11.820 10.740 9.2100 8.1200 7.2000 6.2300 5.8400 6.6500 8.5000 10.000 10.830 11.270 11.470 11.640 12.050 12.690 13.100 13.020 12.760 12.370 12.070 12.250 13.070 1123 76.807 81.603 43.335 21.575 5.9247 4.9917 7.7410 0.57000 0.59000 1.2300 4.1300 9.0900 11.370 11.440 10.660 9.5800 8.3600 7.4400 7.0000 6.9100 6.7800 5.7800 4.5700 3.9100 3.4800 2.9900 2.8600 3.6000 5.1200 6.3300 6.9400 7.2700 7.4100 7.5300 7.8700 8.4400 8.7900 8.7100 8.4800 8.1100 7.8900 8.0600 8.7400 1124 42.913 45.730 22.270 12.819 19.696 18.503 19.600 1.2000 0.78000 1.3600 6.7500 19.020 25.860 26.890 26.050 24.520 22.830 21.560 21.110 21.360 21.630 20.480 18.580 17.040 15.680 14.330 13.820 15.110 18.210 21.090 22.930 23.980 24.430 24.720 25.200 25.890 26.290 26.240 26.000 25.670 25.420 25.620 26.450 1125 48.301 59.165 32.075 25.393 12.511 11.087 11.631 0.77000 0.70000 1.3100 5.0400 12.380 16.030 16.270 15.500 14.400 13.170 12.260 11.970 12.200 12.450 11.610 10.320 9.4300 8.7400 8.0100 7.8300 9.0500 11.670 14.000 15.460 16.240 16.580 16.820 17.220 17.790 18.140 18.080 17.900 17.640 17.410 17.560 18.260 1126 53.416 55.536 15.589 16.341 15.119 13.906 18.265 1.0800 0.80000 1.3900 6.5900 18.500 25.060 25.860 24.770 22.940 20.920 19.320 18.380 17.820 17.330 15.840 13.960 12.580 11.400 10.170 9.6900 10.810 13.400 15.640 16.960 17.660 17.940 18.160 18.620 19.300 19.700 19.620 19.350 18.930 18.610 18.810 19.570 1127 40.614 51.793 11.025 24.548 17.146 15.335 18.134 1.2200 0.90000 1.4500 6.6900 18.550 25.010 25.590 24.470 22.720 20.810 19.310 18.310 17.600 17.010 15.780 14.320 13.310 12.500 11.640 11.430 12.750 15.690 18.370 20.110 21.040 21.450 21.710 22.130 22.700 23.030 23.000 22.840 22.550 22.370 22.520 23.170 1128 51.161 43.320 19.356 17.440 15.832 15.738 18.926 0.97000 0.79000 1.3800 6.5400 18.050 24.530 25.790 25.180 23.850 22.290 21.110 20.570 20.580 20.550 19.270 17.270 15.550 13.910 12.280 11.520 12.200 14.160 15.850 16.870 17.420 17.670 17.870 18.300 18.940 19.320 19.270 19.030 18.670 18.430 18.610 19.440 1129 30.311 42.570 6.2933 19.094 23.136 20.861 23.253 1.2900 0.89000 1.5200 7.8100 22.810 31.430 32.500 31.210 29.230 27.070 25.330 24.110 23.120 22.280 20.900 19.320 18.220 17.350 16.440 16.260 17.880 21.440 24.840 27.150 28.430 29.010 29.370 29.870 30.490 30.840 30.840 30.710 30.470 30.330 30.490 31.210 1130 47.356 58.466 32.106 15.007 15.576 13.781 13.986 0.88000 0.65000 1.3300 5.6200 14.530 18.980 19.390 18.600 17.360 15.960 14.960 14.690 15.040 15.380 14.370 12.770 11.670 10.810 9.8900 9.6900 11.220 14.540 17.540 19.440 20.510 20.970 21.290 21.800 22.520 22.960 22.890 22.680 22.340 22.060 22.250 23.110 1131 21.537 31.077 4.6144 13.468 32.560 30.450 31.292 1.7300 1.2000 1.7500 9.3200 28.660 40.840 42.830 41.590 39.490 37.150 35.280 33.970 33.000 32.160 30.720 28.940 27.670 26.590 25.490 25.270 26.990 30.890 34.690 37.350 38.860 39.520 39.960 40.520 41.180 41.550 41.560 41.460 41.270 41.150 41.360 42.090 1132 25.710 22.966 10.768 12.796 32.362 32.185 30.905 1.5400 1.0400 1.7500 9.3200 27.440 38.550 40.860 40.340 38.960 37.360 36.110 35.650 35.840 36.030 34.950 33.000 31.270 29.650 28.040 27.420 28.470 31.250 33.820 35.550 36.570 36.990 37.350 37.870 38.550 38.930 38.950 38.800 38.550 38.390 38.590 39.400 1133 28.284 23.612 0.0000 17.947 28.682 28.466 31.683 1.5900 1.1100 1.6500 9.1300 27.820 39.840 42.510 41.980 40.360 38.450 36.820 35.440 34.100 32.830 31.230 29.330 27.700 26.150 24.610 23.950 24.740 26.920 28.910 30.210 30.950 31.290 31.580 32.050 32.640 33.000 32.980 32.860 32.640 32.520 32.700 33.480 1134 19.284 28.050 0.0000 23.465 29.527 28.016 29.743 1.5500 1.0900 1.6100 8.7200 27.300 38.990 40.810 39.600 37.560 35.350 33.550 32.090 30.770 29.670 28.350 26.900 25.860 25.020 24.120 23.930 25.250 28.240 31.010 32.860 33.870 34.280 34.580 34.960 35.420 35.660 35.650 35.530 35.380 35.290 35.400 35.920 1135 89.523 100.00 69.826 24.951 3.1936 2.4317 3.9407 0.44000 0.53000 1.0200 2.8800 5.1400 6.0200 5.9100 5.4200 4.8000 4.1200 3.6100 3.4400 3.4700 3.3600 2.5200 1.6500 1.3600 1.3300 1.2400 1.3100 1.8900 2.9400 3.6900 3.9900 4.1400 4.2200 4.2900 4.5900 5.1000 5.4400 5.3500 5.1200 4.7900 4.5500 4.6900 5.4000 1136 82.728 100.00 62.911 10.421 4.8178 3.3639 5.4672 0.41000 0.49000 1.0900 3.4900 7.0500 8.5200 8.3700 7.6500 6.7200 5.6600 4.8600 4.4900 4.3700 4.1200 3.0200 1.9100 1.5600 1.5400 1.4500 1.5800 2.5300 4.3400 5.7600 6.4800 6.8600 7.0000 7.1500 7.5400 8.2300 8.6700 8.5600 8.2500 7.8000 7.4800 7.6700 8.5400 1137 58.755 75.837 20.488 11.422 11.778 9.1867 13.506 0.69000 0.59000 1.3400 5.9200 15.370 20.100 20.200 18.790 16.850 14.700 13.000 11.860 11.010 10.290 8.8600 7.3600 6.5100 5.9700 5.3800 5.3300 6.8500 10.090 13.060 14.920 15.930 16.370 16.670 17.180 17.950 18.440 18.360 18.090 17.630 17.290 17.490 18.450 1138 60.780 69.147 23.892 19.166 10.729 9.1142 12.830 0.73000 0.64000 1.2500 5.5400 14.100 18.430 18.720 17.610 16.030 14.220 12.850 12.010 11.510 11.100 9.8200 8.3400 7.3900 6.7000 5.9500 5.7500 6.8800 9.3700 11.520 12.790 13.460 13.760 13.960 14.380 15.010 15.430 15.350 15.100 14.710 14.440 14.570 15.400 1139 71.215 84.340 56.787 22.104 6.3973 5.1727 6.2656 0.65000 0.61000 1.2600 3.6600 7.5400 9.1600 9.1500 8.4700 7.6800 6.7200 6.0700 5.9000 6.1300 6.2500 5.3700 4.2400 3.6700 3.3700 3.0000 2.9900 3.9400 5.9000 7.4900 8.3800 8.8300 9.0200 9.1700 9.5300 10.130 10.490 10.420 10.150 9.7900 9.5100 9.6300 10.410 1140 59.138 70.344 41.856 18.534 10.234 8.7025 9.6060 0.56000 0.63000 1.2000 4.5400 10.670 13.590 13.700 12.900 11.840 10.640 9.7600 9.5100 9.8300 10.100 9.1500 7.7800 6.9300 6.3300 5.6700 5.5400 6.7900 9.4200 11.700 13.080 13.830 14.160 14.390 14.810 15.470 15.880 15.810 15.580 15.200 14.930 15.070 15.880 1141 50.890 72.919 18.624 21.577 12.125 9.5099 12.539 0.48000 0.61000 1.2500 5.7100 14.470 18.580 18.610 17.290 15.580 13.700 12.220 11.230 10.480 9.8800 8.6800 7.4100 6.7400 6.3700 5.9200 5.9800 7.5300 10.760 13.720 15.620 16.650 17.110 17.400 17.860 18.510 18.910 18.880 18.680 18.330 18.100 18.260 19.040 1142 57.358 78.626 37.301 14.171 10.582 8.0899 9.7328 0.62000 0.59000 1.2300 4.8300 11.510 14.490 14.400 13.360 12.000 10.490 9.3400 8.7900 8.6400 8.4900 7.3700 6.0400 5.3600 5.0000 4.5600 4.6100 6.2000 9.5000 12.500 14.390 15.400 15.840 16.130 16.650 17.400 17.880 17.810 17.550 17.130 16.810 16.990 17.910 1143 67.586 85.406 40.263 19.539 7.7992 5.9344 8.3748 0.75000 0.60000 1.2400 4.4800 10.140 12.690 12.580 11.620 10.330 8.9200 7.8200 7.2400 6.9800 6.7300 5.6400 4.4400 3.8700 3.5800 3.2400 3.2700 4.4600 6.9100 9.0200 10.240 10.880 11.150 11.330 11.740 12.380 12.780 12.700 12.430 12.020 11.730 11.900 12.680 1144 74.099 100.00 64.221 23.482 4.8268 3.3097 4.4680 0.41000 0.60000 1.1100 3.1800 5.9200 6.9600 6.7800 6.1900 5.4500 4.6200 4.0100 3.7400 3.6800 3.5200 2.6500 1.7700 1.4900 1.4800 1.4300 1.5900 2.5300 4.4100 6.0100 6.9000 7.3600 7.5600 7.7000 8.0500 8.6000 8.9500 8.8800 8.6500 8.3100 8.0700 8.2300 8.9100 1145 76.595 100.00 74.663 12.509 5.3825 3.7171 4.1297 0.51000 0.49000 1.1100 3.0100 5.3900 6.2500 6.1200 5.6100 4.9900 4.3200 3.8200 3.7500 3.9500 3.9600 3.0100 1.9600 1.6100 1.6200 1.5500 1.7200 2.8600 5.0700 6.9500 8.0100 8.5500 8.7900 8.9600 9.3800 10.080 10.530 10.440 10.150 9.7100 9.3800 9.5500 10.400 1146 30.158 62.563 0.0000 18.604 20.107 15.661 19.387 1.1300 0.79000 1.4300 7.4700 21.430 28.830 28.830 26.740 24.130 21.360 19.170 17.460 15.900 14.660 13.170 11.760 11.060 10.720 10.310 10.550 12.900 17.850 22.750 26.210 28.140 28.990 29.510 30.060 30.740 31.130 31.120 30.990 30.770 30.620 30.790 31.540 1147 19.888 47.111 0.0000 21.137 25.382 21.448 23.216 1.3800 0.96000 1.5700 8.0800 23.800 32.650 33.220 31.360 29.020 26.530 24.540 22.970 21.570 20.460 19.130 17.790 17.100 16.730 16.290 16.510 18.760 23.510 28.240 31.620 33.550 34.380 34.900 35.440 36.010 36.340 36.370 36.320 36.190 36.140 36.290 36.900 1148 40.978 59.057 14.921 17.911 17.189 14.486 17.295 1.1900 0.90000 1.5400 6.7100 18.480 24.640 24.950 23.520 21.570 19.420 17.750 16.700 16.000 15.440 14.100 12.510 11.550 10.870 10.130 10.060 11.850 15.630 19.100 21.360 22.590 23.080 23.390 23.900 24.550 24.930 24.870 24.670 24.320 24.090 24.240 24.970 1149 37.214 48.411 0.0000 14.595 22.624 19.955 26.134 1.3200 1.0400 1.6500 8.5500 25.890 36.390 37.520 35.740 32.960 29.950 27.550 25.590 23.790 22.270 20.400 18.450 17.120 16.080 14.960 14.680 16.350 20.150 23.720 26.060 27.320 27.860 28.200 28.680 29.370 29.760 29.690 29.470 29.120 28.900 28.970 29.790 1150 25.886 48.443 13.521 10.897 26.916 23.029 22.976 1.4400 0.93000 1.5800 8.1100 23.250 31.560 32.270 30.770 28.680 26.400 24.650 23.600 23.040 22.620 21.330 19.680 18.670 17.980 17.250 17.340 19.740 25.000 30.270 34.080 36.260 37.250 37.840 38.480 39.240 39.700 39.720 39.590 39.350 39.150 39.370 40.170 1151 50.830 83.753 34.450 21.761 10.686 7.6543 9.3274 0.80000 0.68000 1.3300 4.7800 11.440 14.440 14.150 12.940 11.460 9.8400 8.6200 7.8900 7.4900 7.1500 6.0600 4.8800 4.3800 4.2300 4.0000 4.2000 5.9700 9.6200 12.970 15.110 16.240 16.720 17.020 17.470 18.120 18.510 18.440 18.210 17.860 17.580 17.700 18.450 1152 38.507 92.350 29.948 26.702 11.229 6.9256 7.9635 0.67000 0.61000 1.2400 4.5400 10.640 13.160 12.590 11.240 9.7100 8.0600 6.7800 5.9300 5.2600 4.7300 3.7100 2.7700 2.4700 2.5300 2.5500 2.9600 5.1300 9.7300 14.330 17.530 19.310 20.080 20.540 21.040 21.640 21.980 21.990 21.870 21.630 21.490 21.620 22.270 1153 55.953 100.00 49.005 18.263 8.3392 5.1218 6.2013 0.58000 0.54000 1.1600 3.8100 8.3200 10.070 9.7400 8.7400 7.5800 6.2900 5.3000 4.7200 4.3700 3.9900 2.9500 1.9300 1.6300 1.6900 1.6800 2.0000 3.7500 7.3600 10.790 13.010 14.200 14.720 15.030 15.530 16.220 16.640 16.590 16.380 15.980 15.710 15.860 16.700 1154 48.948 98.661 23.501 23.582 9.7712 5.7845 8.5157 0.67000 0.58000 1.2500 4.8400 11.600 14.460 13.810 12.220 10.400 8.4400 6.9000 5.8200 4.8800 4.1400 3.0000 2.0200 1.7200 1.7900 1.8100 2.1700 4.1300 8.2200 12.240 14.950 16.410 17.030 17.380 17.880 18.510 18.890 18.850 18.670 18.350 18.120 18.240 18.930 1155 66.272 96.391 45.456 14.935 7.4472 4.8834 7.2806 0.60000 0.61000 1.2800 4.2700 9.4400 11.690 11.360 10.290 8.9400 7.4600 6.3200 5.6300 5.1800 4.7500 3.5700 2.4300 2.0500 2.0200 1.9300 2.1700 3.6300 6.5900 9.1900 10.720 11.510 11.840 12.070 12.510 13.240 13.680 13.580 13.300 12.830 12.520 12.670 13.540 1156 46.125 100.00 33.558 11.646 12.142 7.0830 8.9714 0.83000 0.66000 1.2800 5.0200 12.190 15.160 14.500 12.830 10.940 8.9000 7.3000 6.2600 5.4100 4.7000 3.4000 2.2200 1.8800 1.9800 2.0000 2.4500 4.9400 10.230 15.570 19.280 21.360 22.240 22.740 23.340 24.140 24.620 24.570 24.320 23.940 23.640 23.820 24.710 1157 37.840 78.056 0.0000 25.689 13.791 9.7056 13.485 0.81000 0.64000 1.3100 6.0900 16.460 21.400 20.910 18.970 16.640 14.180 12.250 10.760 9.4000 8.3600 7.1300 6.0400 5.6100 5.5000 5.3500 5.6300 7.6300 11.850 16.020 18.920 20.530 21.240 21.650 22.130 22.730 23.060 23.050 22.920 22.700 22.570 22.710 23.380 1158 22.413 72.211 0.0000 26.317 18.170 12.922 14.942 0.82000 0.75000 1.4100 6.8700 18.220 23.380 22.750 20.690 18.380 15.930 14.010 12.530 11.180 10.180 8.9700 7.9000 7.5300 7.5600 7.5200 8.0000 10.620 16.050 21.570 25.640 27.920 28.970 29.570 30.120 30.690 31.050 31.120 31.070 30.980 30.930 31.060 31.600 1159 16.626 69.353 0.0000 18.866 23.264 16.436 18.094 1.2300 0.81000 1.4600 7.5500 21.440 28.320 27.620 25.050 22.230 19.330 17.040 15.300 13.740 12.560 11.150 9.9100 9.4800 9.5200 9.4900 10.100 13.350 20.250 27.620 33.260 36.580 38.070 38.910 39.580 40.260 40.620 40.690 40.670 40.610 40.600 40.740 41.340 1160 39.789 78.578 8.6827 15.932 15.414 10.798 14.549 0.91000 0.64000 1.3600 6.4900 17.580 22.960 22.510 20.420 17.960 15.320 13.270 11.760 10.440 9.4100 7.9900 6.6900 6.1300 5.9600 5.7200 6.0300 8.3400 13.240 18.080 21.480 23.360 24.190 24.660 25.220 25.950 26.360 26.340 26.160 25.860 25.660 25.820 26.620 1161 33.023 86.290 0.0000 19.369 15.594 9.9766 13.835 0.86000 0.67000 1.3600 6.5500 17.810 23.010 22.130 19.670 16.920 14.050 11.820 10.110 8.5500 7.3900 6.0100 4.8400 4.4400 4.4500 4.3800 4.8300 7.4300 12.990 18.720 22.880 25.230 26.270 26.870 27.460 28.130 28.530 28.530 28.410 28.170 28.010 28.160 28.870 1162 37.317 82.934 25.040 18.203 14.431 9.7891 10.757 0.76000 0.66000 1.2400 5.4600 13.500 16.930 16.460 14.940 13.190 11.280 9.8200 8.8800 8.2200 7.6800 6.5300 5.3800 4.9400 4.9000 4.7900 5.1800 7.6100 12.700 17.810 21.430 23.460 24.350 24.870 25.470 26.190 26.620 26.610 26.450 26.200 25.990 26.200 26.940 1163 33.358 100.00 0.0000 24.839 12.870 7.2089 10.538 0.75000 0.66000 1.2400 5.7200 14.810 18.580 17.510 15.250 12.780 10.180 8.1700 6.6200 5.2100 4.1700 2.9500 1.9400 1.6800 1.8000 1.8700 2.3600 4.9200 10.400 16.090 20.220 22.560 23.600 24.170 24.750 25.430 25.820 25.840 25.710 25.530 25.400 25.540 26.200 1164 33.387 100.00 14.215 14.284 15.080 8.4179 10.928 0.73000 0.62000 1.2500 5.8900 15.240 19.170 18.100 15.780 13.240 10.580 8.5300 7.0300 5.7000 4.6900 3.3200 2.1600 1.8400 1.9900 2.0500 2.6400 5.6200 12.150 19.080 24.260 27.240 28.610 29.320 30.030 30.840 31.300 31.310 31.160 30.890 30.720 30.870 31.650 1165 18.623 85.761 0.0000 21.997 18.850 11.777 13.559 0.80000 0.70000 1.3500 6.6300 17.780 22.710 21.620 19.140 16.490 13.750 11.620 9.9900 8.5200 7.4300 6.1500 5.0700 4.7700 4.9100 4.9900 5.6400 8.8100 15.690 23.130 28.890 32.310 33.870 34.720 35.450 36.090 36.490 36.580 36.550 36.470 36.470 36.610 37.200 1166 15.005 100.00 0.0000 19.913 18.859 10.171 11.933 0.86000 0.66000 1.2900 6.4300 17.350 21.800 20.120 17.200 14.270 11.250 8.9500 7.2000 5.6600 4.5300 3.1900 2.1200 1.8300 2.0400 2.1700 2.8600 6.4200 14.510 23.690 31.110 35.670 37.780 38.890 39.700 40.410 40.800 40.910 40.910 40.890 40.910 41.070 41.610 1167 98.452 0.0000 57.004 15.423 7.2813 14.380 14.219 0.77000 0.70000 1.2300 4.4500 10.470 14.150 15.840 16.750 17.150 17.540 18.390 21.290 27.600 34.080 34.080 28.870 22.280 15.550 9.9500 6.6100 4.9900 4.1300 3.4600 3.0100 2.8500 2.7900 2.8100 3.1000 3.6300 4.0000 3.8900 3.6300 3.2400 2.9900 3.1900 3.8900 1168 100.00 19.745 62.198 22.548 5.7596 10.427 10.501 0.69000 0.62000 1.2200 3.9100 8.6100 11.210 12.180 12.560 12.620 12.640 13.080 15.000 19.200 23.320 23.180 19.900 15.800 11.440 7.5700 5.2100 4.1400 3.6600 3.2100 2.8700 2.7300 2.6900 2.7100 2.9700 3.4800 3.8100 3.7100 3.4600 3.0800 2.8500 3.0200 3.7000 1169 83.078 0.0000 45.970 10.269 12.240 19.877 20.455 1.0200 0.77000 1.3100 5.6100 14.920 20.940 23.620 24.910 25.290 25.590 26.340 29.130 35.280 41.450 40.950 35.120 27.980 20.840 14.920 11.440 9.7000 8.7800 8.0500 7.5500 7.3800 7.3500 7.3700 7.7000 8.3100 8.7000 8.5800 8.3200 7.8900 7.6300 7.8200 8.6600 1170 100.00 27.291 73.223 14.517 4.9962 9.4392 7.7060 0.48000 0.48000 1.1500 3.3400 6.4800 8.1100 8.6300 8.8200 8.8400 8.9200 9.4600 11.620 16.410 21.350 21.610 18.450 14.510 10.420 6.8000 4.6500 3.7600 3.4000 3.0400 2.7400 2.6400 2.5900 2.6100 2.8800 3.4100 3.7400 3.6400 3.4000 3.0300 2.8100 2.9800 3.7000 1171 84.191 2.8508 53.963 19.549 9.7790 15.943 14.041 0.74000 0.75000 1.2500 4.6000 10.820 14.390 15.910 16.630 16.950 17.280 18.010 20.570 26.040 31.670 32.050 28.090 22.850 17.340 12.580 9.6900 8.2400 7.4900 6.8600 6.4400 6.2800 6.2500 6.2900 6.5800 7.1500 7.5100 7.4200 7.1700 6.7900 6.5200 6.6800 7.4600 1172 100.00 6.9871 67.330 23.968 5.6406 11.127 9.4039 0.69000 0.55000 1.1500 3.4900 7.3100 9.3700 10.310 10.730 10.990 11.300 12.050 14.550 19.820 25.280 25.740 22.200 17.490 12.470 8.1100 5.4700 4.1900 3.5400 3.0100 2.6500 2.5100 2.4700 2.4900 2.7400 3.2200 3.5400 3.4400 3.2300 2.8900 2.6700 2.8600 3.5200 1173 100.00 0.0000 49.421 22.207 6.8050 12.891 14.493 0.64000 0.65000 1.2100 4.4500 10.750 14.640 16.520 17.430 17.840 18.160 18.850 21.130 25.820 30.210 29.680 25.290 19.710 13.900 8.9400 5.9700 4.4900 3.7100 3.1000 2.6900 2.5500 2.5000 2.5200 2.7700 3.2700 3.6000 3.5000 3.2700 2.9300 2.7000 2.8500 3.5700 1174 67.585 0.0000 50.961 10.865 16.730 24.570 18.405 1.3200 0.84000 1.4000 5.4900 13.940 18.990 20.910 21.760 22.120 22.470 23.380 26.720 34.280 42.830 44.290 39.550 33.120 26.460 20.830 17.450 15.700 14.760 13.980 13.440 13.250 13.180 13.240 13.610 14.310 14.730 14.600 14.310 13.830 13.490 13.670 14.570 1175 100.00 53.550 89.706 27.189 3.1624 5.0649 3.7961 0.49000 0.60000 1.1400 2.5800 3.9700 4.4100 4.4700 4.3000 4.1900 4.1200 4.3200 5.4900 8.0400 10.500 10.430 8.8400 7.1500 5.4100 3.7900 2.8300 2.5700 2.6300 2.5600 2.4200 2.3600 2.3500 2.3800 2.5900 3.0300 3.2900 3.2200 3.0200 2.7500 2.5600 2.7400 3.3200 1176 96.764 48.781 78.597 16.319 4.5605 7.1454 6.0507 0.67000 0.63000 1.2400 3.1800 5.8100 6.9900 7.2200 7.1500 6.9500 6.8100 7.0100 8.4400 11.620 14.700 14.530 12.310 9.9900 7.6000 5.3200 3.9900 3.6000 3.7000 3.6100 3.4000 3.3300 3.3000 3.3400 3.6300 4.2000 4.5700 4.4500 4.1800 3.7700 3.4900 3.6600 4.4400 1177 100.00 37.971 66.401 21.149 4.2766 7.2952 7.4530 0.63000 0.49000 1.0900 3.2900 6.6700 8.4300 8.9200 9.0000 8.8500 8.7100 8.8900 10.260 13.280 16.170 15.900 13.490 10.730 7.8200 5.2000 3.6400 3.0500 2.9000 2.6900 2.4500 2.3900 2.3500 2.3900 2.6100 3.0800 3.3800 3.2700 3.0900 2.7700 2.5700 2.7300 3.3900 1178 92.662 29.367 72.207 22.041 5.8315 9.6249 7.4172 0.59000 0.63000 1.2200 3.3500 6.4500 8.0100 8.4500 8.5700 8.5700 8.5900 9.0100 10.900 15.070 19.360 19.710 17.160 13.990 10.600 7.5000 5.6200 4.8500 4.6400 4.3700 4.1000 4.0100 3.9800 4.0100 4.2800 4.8100 5.1600 5.0500 4.8100 4.4300 4.1900 4.3500 5.0400 1179 81.783 29.284 49.814 20.921 8.8981 12.269 12.411 0.80000 0.77000 1.3600 4.6000 10.740 14.180 15.270 15.430 15.220 14.900 14.940 16.240 19.220 22.100 21.730 19.070 16.020 12.760 9.7800 7.9800 7.3500 7.3400 7.2100 7.0500 6.9800 6.9800 7.0300 7.3300 7.8900 8.2400 8.1500 7.8900 7.5000 7.2100 7.3800 8.1400 1180 78.604 7.3777 49.504 27.476 9.6827 14.367 12.959 0.95000 0.73000 1.2800 4.4300 10.390 13.800 15.090 15.650 15.800 15.940 16.410 18.270 22.210 26.110 26.280 23.430 19.640 15.530 11.860 9.6000 8.4800 7.9400 7.4700 7.1400 7.0300 7.0000 7.0300 7.3200 7.8200 8.1400 8.0700 7.8500 7.5200 7.2900 7.4400 8.1200 1181 61.094 0.0000 39.373 25.606 15.528 20.726 17.816 0.89000 0.74000 1.3500 5.4200 14.070 19.170 21.010 21.760 21.990 22.140 22.660 24.580 28.660 32.780 33.110 30.270 26.350 22.050 18.240 15.880 14.640 13.980 13.430 13.060 12.940 12.900 12.980 13.310 13.860 14.210 14.130 13.930 13.580 13.350 13.500 14.240 1182 68.141 4.3082 42.289 16.534 15.716 21.938 19.788 1.0700 0.90000 1.4000 5.8600 15.460 21.320 23.440 24.260 24.380 24.420 24.880 27.170 32.290 37.580 37.770 33.790 28.670 23.270 18.530 15.670 14.230 13.540 12.940 12.500 12.350 12.290 12.330 12.700 13.350 13.730 13.600 13.320 12.870 12.550 12.740 13.560 1183 84.131 33.099 58.733 12.113 8.5583 12.140 11.528 0.85000 0.66000 1.2900 4.4300 10.030 13.050 14.000 14.150 13.950 13.690 13.840 15.430 19.080 22.680 22.400 19.460 16.100 12.600 9.4000 7.5200 6.9200 7.0100 7.0000 6.8600 6.8300 6.8200 6.8800 7.2200 7.8600 8.2600 8.1300 7.8500 7.4100 7.1200 7.2900 8.1100 1184 72.652 19.496 56.678 21.980 10.723 14.815 11.846 0.63000 0.76000 1.2400 4.3100 9.9300 13.010 13.980 14.260 14.250 14.200 14.580 16.440 20.620 24.960 25.340 22.710 19.360 15.750 12.470 10.500 9.7200 9.5600 9.3500 9.1400 9.0900 9.0800 9.1300 9.4500 10.010 10.370 10.260 10.030 9.6400 9.3700 9.5400 10.260 1185 88.058 20.655 52.034 17.608 8.2240 12.755 13.134 0.74000 0.65000 1.3400 4.5900 10.780 14.360 15.670 16.100 16.070 15.960 16.220 17.940 21.810 25.600 25.260 21.900 17.830 13.550 9.7500 7.4600 6.4700 6.1100 5.7500 5.4600 5.3600 5.3400 5.3600 5.6600 6.2200 6.5700 6.4700 6.2100 5.8500 5.5500 5.7300 6.4400 1186 65.897 17.717 49.261 12.693 14.757 19.480 15.688 1.0700 0.75000 1.4100 5.1600 12.910 17.280 18.690 19.090 19.060 18.960 19.320 21.430 26.240 31.350 31.810 28.630 24.610 20.350 16.520 14.250 13.420 13.430 13.350 13.210 13.210 13.220 13.310 13.710 14.420 14.850 14.730 14.430 13.990 13.670 13.850 14.760 1187 69.562 0.0000 55.185 26.304 11.970 17.507 12.966 1.0500 0.78000 1.2700 4.4300 10.200 13.530 14.720 15.270 15.490 15.760 16.440 18.870 24.190 29.960 31.040 28.050 23.760 19.080 15.020 12.540 11.260 10.590 10.020 9.6400 9.5100 9.4700 9.5100 9.8000 10.310 10.640 10.550 10.340 10.000 9.7800 9.8900 10.650 1188 59.010 10.675 31.894 17.463 18.093 22.709 21.945 1.1300 0.87000 1.5300 6.7000 17.880 24.540 26.820 27.510 27.440 27.210 27.310 28.700 31.900 34.980 34.550 31.390 27.490 23.360 19.650 17.410 16.460 16.240 15.990 15.790 15.760 15.760 15.850 16.230 16.890 17.280 17.200 16.930 16.540 16.250 16.400 17.290 1189 46.847 0.0000 26.914 13.113 26.518 33.023 29.688 1.4700 1.0900 1.6500 7.7400 22.790 32.650 36.060 37.160 37.160 37.070 37.320 39.280 43.820 48.470 48.450 44.530 39.510 34.210 29.640 26.900 25.430 24.660 23.990 23.550 23.410 23.360 23.440 23.840 24.500 24.900 24.800 24.550 24.160 23.860 24.040 24.910 1190 53.636 0.0000 39.087 17.044 20.086 26.300 20.949 1.1300 0.82000 1.4100 6.0100 16.320 22.510 24.700 25.540 25.740 25.880 26.460 28.880 34.320 40.210 41.070 37.610 32.840 27.780 23.400 20.780 19.420 18.700 18.100 17.680 17.550 17.540 17.590 17.950 18.560 18.920 18.840 18.600 18.270 17.990 18.190 18.940 1191 100.00 72.422 86.668 26.554 2.6214 3.3882 3.4255 0.40000 0.57000 1.0900 2.5500 4.0000 4.4900 4.4500 4.2100 3.9400 3.6800 3.6400 4.2000 5.5200 6.6400 6.1700 4.9800 4.0500 3.2300 2.4200 1.9700 2.0100 2.3100 2.4200 2.3400 2.3100 2.3200 2.3500 2.5600 2.9900 3.2600 3.1800 2.9900 2.7100 2.5200 2.7000 3.2900 1192 86.742 56.440 61.985 14.796 6.1880 7.6123 8.1174 0.60000 0.52000 1.1300 3.7300 7.9300 9.9900 10.440 10.290 9.8400 9.3700 9.1800 9.9400 11.810 13.470 12.810 10.880 9.0900 7.3200 5.5800 4.6200 4.6500 5.2900 5.6500 5.7400 5.7900 5.8400 5.9100 6.2400 6.8700 7.2800 7.1600 6.8900 6.4800 6.1500 6.3600 7.1300 1193 100.00 70.411 100.00 17.935 2.8087 3.9005 2.8689 0.35000 0.46000 1.1000 2.4400 3.3500 3.5600 3.4800 3.2600 3.1000 2.9900 3.1100 4.0200 6.0100 7.7800 7.4300 6.0300 4.8900 3.8400 2.8100 2.2400 2.2700 2.6200 2.7100 2.6300 2.5900 2.5900 2.6300 2.8900 3.3900 3.7300 3.6200 3.3900 3.0300 2.8300 3.0000 3.7000 1194 76.457 49.653 67.068 17.006 7.8090 9.3239 7.3348 0.47000 0.52000 1.1600 3.5000 7.1000 8.7600 9.1000 8.9700 8.6900 8.3800 8.4300 9.5700 12.180 14.690 14.500 12.680 10.870 9.0500 7.2900 6.3200 6.4500 7.3100 7.9000 8.1300 8.2700 8.3400 8.4400 8.8200 9.4500 9.8600 9.7700 9.4900 9.0700 8.7700 8.9300 9.7500 1195 85.728 51.490 61.005 25.736 5.6630 7.1266 7.4480 0.47000 0.46000 1.1800 3.5500 7.3500 9.1500 9.5400 9.3800 9.0100 8.6100 8.4700 9.1700 10.880 12.470 12.000 10.350 8.6900 7.0400 5.4300 4.5100 4.4300 4.8400 5.0500 5.0600 5.0900 5.1200 5.1800 5.4400 5.9600 6.2800 6.2000 5.9800 5.6400 5.4200 5.5700 6.2200 1196 87.879 52.551 81.833 21.302 5.0519 6.8301 4.9061 0.56000 0.50000 1.0600 2.8400 4.8800 5.7400 5.8500 5.7300 5.5900 5.4600 5.6300 6.8600 9.5500 12.170 12.130 10.460 8.7300 6.9600 5.2800 4.3100 4.2200 4.6100 4.8200 4.8000 4.8200 4.8400 4.9000 5.1800 5.7300 6.0700 5.9800 5.7500 5.4000 5.1500 5.3500 5.9900 1197 85.653 47.992 67.790 12.595 6.6981 8.9010 7.7030 0.56000 0.54000 1.1400 3.6200 7.2900 9.0300 9.4700 9.3700 9.1200 8.8600 8.9400 10.230 13.150 15.960 15.710 13.540 11.280 8.9700 6.7800 5.5100 5.3600 5.8500 6.1200 6.1200 6.1700 6.1900 6.2700 6.6200 7.2700 7.6800 7.5700 7.2900 6.8500 6.5100 6.7400 7.5300 1198 100.00 73.370 83.898 15.601 3.2396 4.1728 4.3675 0.48000 0.60000 1.2300 2.9100 4.9100 5.6700 5.6600 5.4000 5.1000 4.7600 4.6700 5.3600 6.9400 8.2900 7.6400 6.1200 4.9600 3.9400 2.9200 2.3600 2.4400 2.8500 2.9700 2.8900 2.8500 2.8500 2.8800 3.1600 3.7100 4.0600 3.9500 3.6800 3.2900 3.0500 3.2300 3.9400 1199 93.494 51.881 70.447 21.418 4.5988 6.5323 6.3004 0.45000 0.56000 1.2200 3.2300 6.1600 7.5300 7.8100 7.7200 7.4600 7.1800 7.2200 8.2500 10.550 12.700 12.380 10.530 8.6400 6.7100 4.8800 3.8000 3.5700 3.7800 3.8100 3.7000 3.6600 3.6600 3.7000 3.9600 4.4800 4.8200 4.7100 4.4800 4.1200 3.8900 4.0600 4.7500 1200 75.090 46.975 68.194 26.773 7.1831 8.6806 6.6983 0.54000 0.60000 1.2300 3.3500 6.5500 8.0300 8.2900 8.1500 7.9100 7.6500 7.7000 8.7300 11.150 13.510 13.430 11.860 10.240 8.5800 6.9800 6.1000 6.1300 6.7800 7.2000 7.3500 7.4400 7.4800 7.5400 7.8400 8.3500 8.6700 8.5700 8.3800 8.0400 7.8400 7.9300 8.6100 1201 65.936 29.477 57.186 17.159 12.663 15.750 11.779 0.75000 0.61000 1.2400 4.4200 10.310 13.440 14.220 14.320 14.130 13.930 14.140 15.820 19.720 23.790 24.170 21.850 19.070 16.130 13.360 11.760 11.460 11.990 12.310 12.420 12.510 12.540 12.630 13.000 13.670 14.060 13.960 13.700 13.250 12.930 13.090 13.890 1202 64.549 23.791 44.928 24.287 12.493 15.334 13.616 0.86000 0.67000 1.3000 4.8400 11.880 15.700 16.790 16.950 16.740 16.430 16.470 17.640 20.350 23.050 22.960 20.880 18.380 15.680 13.150 11.640 11.230 11.500 11.630 11.630 11.690 11.720 11.800 12.160 12.740 13.100 13.030 12.800 12.440 12.180 12.330 13.090 1203 48.792 20.342 35.866 27.291 16.011 18.337 15.495 0.90000 0.80000 1.2800 5.2300 13.590 18.160 19.380 19.460 19.130 18.740 18.650 19.620 22.020 24.480 24.520 22.780 20.650 18.380 16.240 15.030 14.850 15.380 15.800 16.010 16.170 16.260 16.370 16.690 17.200 17.510 17.420 17.290 17.020 16.810 16.980 17.610 1204 65.398 36.127 42.994 22.183 11.769 13.589 13.248 0.99000 0.71000 1.3500 5.0000 12.180 16.060 16.980 16.870 16.340 15.720 15.440 16.160 18.170 20.100 19.640 17.610 15.490 13.280 11.170 9.9900 9.9500 10.740 11.290 11.540 11.700 11.760 11.860 12.200 12.800 13.150 13.060 12.830 12.450 12.160 12.320 13.050 1205 51.455 16.866 41.704 20.134 17.785 21.207 16.859 1.0800 0.73000 1.3300 5.4900 14.250 19.180 20.610 20.890 20.680 20.450 20.590 22.120 25.720 29.510 29.880 27.590 24.710 21.620 18.790 17.160 16.730 17.080 17.330 17.420 17.530 17.590 17.700 18.090 18.680 19.030 18.980 18.760 18.410 18.160 18.360 19.080 1206 74.499 32.035 62.348 27.161 8.5809 11.155 8.8086 0.66000 0.60000 1.1400 3.6500 7.8400 9.9800 10.590 10.650 10.540 10.410 10.620 11.990 14.960 17.900 18.000 16.170 13.980 11.610 9.3800 8.0400 7.6800 7.8900 7.9500 7.9100 7.9200 7.9400 8.0100 8.3100 8.8500 9.1800 9.1200 8.8900 8.5500 8.2900 8.4500 9.1700 1207 60.032 24.753 38.754 10.620 16.965 20.212 18.560 1.1400 0.78000 1.4400 6.1400 15.930 21.480 23.080 23.350 22.990 22.480 22.410 23.710 26.880 30.070 29.720 26.840 23.550 20.130 16.990 15.180 14.870 15.560 16.070 16.300 16.490 16.590 16.720 17.180 17.880 18.330 18.250 17.950 17.520 17.210 17.400 18.350 1208 37.860 14.910 32.945 10.697 27.639 30.875 24.130 1.5300 1.0400 1.5800 7.2300 20.230 27.820 29.900 30.180 29.880 29.440 29.460 31.030 34.840 38.840 39.190 36.720 33.770 30.660 27.800 26.250 26.210 27.290 28.180 28.710 29.070 29.240 29.460 29.940 30.680 31.120 31.090 30.840 30.470 30.240 30.430 31.350 1209 49.275 13.040 39.310 11.634 22.358 27.041 21.437 1.1900 0.95000 1.4700 6.4000 17.560 24.140 26.090 26.530 26.360 26.080 26.310 28.330 33.120 38.260 38.780 35.690 31.780 27.670 23.980 21.870 21.200 21.440 21.600 21.620 21.690 21.710 21.830 22.250 22.920 23.320 23.220 22.950 22.530 22.230 22.390 23.270 1210 37.646 5.8268 20.840 11.846 30.481 35.132 32.059 1.7900 1.1400 1.7900 8.9200 25.810 36.500 39.830 40.620 40.340 39.890 39.740 40.900 43.850 46.680 46.220 43.100 39.360 35.430 31.920 29.880 29.130 29.170 29.160 29.130 29.200 29.250 29.410 29.860 30.560 30.980 30.920 30.690 30.340 30.110 30.300 31.240 1211 36.758 0.0000 25.919 19.896 27.367 32.486 26.928 1.6300 1.0800 1.6300 7.4800 21.450 30.290 32.940 33.660 33.570 33.380 33.590 35.200 39.010 42.970 43.420 40.900 37.440 33.660 30.300 28.290 27.210 26.630 26.130 25.800 25.730 25.700 25.790 26.130 26.650 26.980 26.930 26.730 26.480 26.280 26.440 27.150 1212 23.042 0.0000 17.356 15.402 37.780 42.685 34.851 1.9700 1.1200 1.7900 8.9100 27.340 39.710 43.290 44.010 43.740 43.350 43.330 44.630 47.920 51.360 51.870 49.780 46.890 43.700 40.830 39.180 38.230 37.780 37.350 37.100 37.090 37.090 37.230 37.620 38.150 38.450 38.400 38.270 38.070 37.960 38.130 38.810 1213 94.976 84.930 100.00 20.726 2.8548 3.1145 2.6627 0.31000 0.43000 1.0100 2.4000 3.4000 3.5800 3.4500 3.2000 2.9800 2.7800 2.7700 3.3100 4.5500 5.5300 4.9200 3.7500 3.0500 2.5800 2.0600 1.8400 2.1600 2.8600 3.2000 3.2500 3.2800 3.3000 3.3400 3.6200 4.1700 4.5200 4.4000 4.1500 3.7700 3.5400 3.7000 4.3700 1214 100.00 82.313 85.683 13.865 2.8539 3.2758 3.7305 0.37000 0.55000 1.0800 2.7500 4.4800 5.0300 5.0100 4.7100 4.3500 4.0100 3.8400 4.3100 5.4500 6.3000 5.5500 4.2400 3.4400 2.8200 2.1700 1.8600 2.0900 2.6200 2.8500 2.8000 2.7800 2.7900 2.8300 3.1300 3.7100 4.0900 3.9800 3.7200 3.3000 3.0500 3.2000 4.0200 1215 91.337 86.423 100.00 11.197 3.3220 3.3722 2.7498 0.54000 0.42000 1.0400 2.4600 3.4900 3.7100 3.5700 3.3100 3.0800 2.8700 2.8600 3.4200 4.6900 5.6600 4.9700 3.7300 3.0500 2.6000 2.1100 1.9300 2.3900 3.3200 3.9200 4.1000 4.1900 4.2400 4.3100 4.6300 5.2300 5.6000 5.5000 5.2300 4.8400 4.5500 4.7600 5.5200 1216 72.511 55.063 57.261 17.582 8.8583 9.6973 9.2931 0.87000 0.64000 1.3000 4.1500 9.2500 11.730 12.160 11.860 11.300 10.660 10.360 11.020 12.820 14.500 13.920 12.100 10.470 8.9100 7.3600 6.5600 6.9300 8.1600 9.0700 9.4900 9.7100 9.8000 9.9000 10.290 10.910 11.310 11.210 10.920 10.510 10.180 10.350 11.120 1217 78.908 69.775 85.796 22.477 5.1197 5.3302 3.7259 0.32000 0.47000 1.00000 2.6400 4.2800 4.8100 4.7600 4.5000 4.2600 4.0000 3.9700 4.6800 6.3200 7.8100 7.4800 6.2500 5.3400 4.5600 3.7700 3.4300 3.9100 5.0500 5.8700 6.2800 6.4900 6.5800 6.6800 6.9900 7.5100 7.8500 7.7600 7.5400 7.2200 6.9800 7.1200 7.8000 1218 84.661 66.999 81.664 16.580 5.1715 5.8015 4.5852 0.31000 0.51000 1.0600 2.8800 4.9700 5.8000 5.8400 5.5800 5.3100 5.0300 5.0000 5.8100 7.6700 9.3700 8.9400 7.4600 6.2700 5.2100 4.1500 3.6100 3.9700 4.9500 5.5900 5.8200 5.9600 6.0300 6.1200 6.4700 7.0600 7.4500 7.3400 7.0800 6.6900 6.4100 6.5900 7.3500 1219 68.272 56.698 56.013 26.600 8.1892 8.4949 7.6912 0.48000 0.48000 1.0800 3.7000 7.8400 9.8400 10.130 9.8200 9.3500 8.8000 8.5100 8.9900 10.340 11.580 11.150 9.8200 8.6800 7.6200 6.5400 6.0300 6.5100 7.7700 8.7300 9.2300 9.5200 9.6400 9.7700 10.100 10.650 11.010 10.950 10.730 10.380 10.140 10.300 11.010 1220 66.851 61.089 64.868 17.900 8.8137 8.8026 7.0208 0.59000 0.51000 1.1300 3.5600 7.3200 8.9900 9.1800 8.8600 8.4100 7.9100 7.7100 8.3600 10.050 11.640 11.210 9.7600 8.5900 7.5600 6.4700 6.0200 6.7600 8.5100 9.9300 10.700 11.110 11.300 11.470 11.870 12.540 12.930 12.850 12.600 12.190 11.890 12.060 12.880 1221 90.892 72.471 100.00 25.408 3.3717 3.9891 2.6775 0.43000 0.46000 1.0300 2.3600 3.2300 3.4100 3.3300 3.0700 2.9000 2.7900 2.8500 3.6300 5.3100 6.8000 6.5100 5.3300 4.4500 3.6700 2.8900 2.4800 2.7000 3.3200 3.6800 3.7500 3.8100 3.8400 3.9000 4.1700 4.6900 5.0200 4.9300 4.6900 4.3500 4.1400 4.2700 4.9800 1222 61.204 43.497 60.125 27.637 10.301 11.274 8.3090 0.66000 0.63000 1.1600 3.7300 8.0400 10.080 10.430 10.280 9.9600 9.6200 9.5900 10.540 12.760 14.960 14.950 13.570 12.180 10.760 9.3700 8.6400 8.9800 10.110 10.980 11.430 11.700 11.830 11.960 12.320 12.890 13.230 13.170 12.970 12.620 12.380 12.550 13.230 1223 55.521 38.767 42.704 12.634 15.893 17.131 15.182 0.92000 0.71000 1.3200 5.4600 13.970 18.630 19.560 19.360 18.690 17.910 17.530 18.350 20.720 23.090 22.680 20.480 18.280 16.080 13.950 12.870 13.310 15.010 16.410 17.210 17.670 17.850 18.030 18.480 19.180 19.610 19.530 19.270 18.840 18.510 18.680 19.530 1224 41.951 31.794 37.534 21.935 18.655 19.461 15.262 1.0400 0.80000 1.3700 5.5900 14.110 18.600 19.480 19.280 18.770 18.150 17.910 18.710 20.850 23.090 23.080 21.550 19.990 18.410 16.830 16.100 16.700 18.450 19.940 20.850 21.390 21.630 21.850 22.280 22.870 23.250 23.210 23.020 22.750 22.550 22.720 23.490 1225 55.590 33.527 50.187 18.838 14.839 16.624 12.629 0.98000 0.71000 1.3700 4.8500 11.550 15.020 15.780 15.690 15.310 14.880 14.840 16.090 19.110 22.250 22.410 20.490 18.380 16.200 14.110 13.010 13.210 14.430 15.400 15.940 16.240 16.380 16.530 16.930 17.540 17.910 17.840 17.590 17.230 16.940 17.120 17.860 1226 42.245 24.157 26.377 22.180 19.877 21.378 19.627 1.0200 0.88000 1.4200 6.4000 17.480 23.760 25.270 25.180 24.490 23.690 23.210 23.690 25.290 26.900 26.480 24.630 22.660 20.610 18.680 17.670 17.870 19.060 20.070 20.670 21.050 21.210 21.380 21.750 22.320 22.650 22.590 22.420 22.140 21.960 22.110 22.840 1227 54.482 44.040 34.992 18.626 14.701 15.089 15.370 1.0800 0.85000 1.3900 5.7000 14.750 19.660 20.490 20.040 19.090 17.980 17.280 17.470 18.670 19.810 18.990 17.060 15.340 13.670 12.020 11.230 11.860 13.680 15.180 16.020 16.460 16.670 16.830 17.230 17.880 18.240 18.160 17.930 17.530 17.240 17.370 18.160 1228 10.416 10.699 9.5668 27.215 33.982 34.583 28.667 1.3900 1.0400 1.6900 8.6200 25.130 35.060 37.050 36.750 35.940 35.050 34.400 34.360 34.950 35.590 35.470 34.730 34.080 33.440 32.770 32.650 33.250 34.640 35.850 36.660 37.180 37.440 37.670 38.020 38.430 38.620 38.670 38.690 38.700 38.740 38.880 39.350 1229 32.354 13.221 19.154 13.178 30.836 33.570 30.929 1.6700 1.1400 1.6700 8.5000 25.550 36.470 39.450 39.730 38.990 38.030 37.440 37.930 39.790 41.600 40.970 38.480 35.740 32.920 30.280 28.890 28.850 29.860 30.690 31.210 31.560 31.710 31.920 32.340 33.000 33.350 33.330 33.140 32.850 32.660 32.860 33.700 1230 30.746 27.524 30.347 16.751 26.126 26.476 21.016 1.6600 0.94000 1.5400 6.8700 19.160 26.060 27.290 26.880 25.970 24.960 24.420 25.090 27.270 29.660 29.610 27.950 26.300 24.710 23.130 22.480 23.470 26.000 28.260 29.710 30.510 30.840 31.100 31.540 32.160 32.480 32.420 32.240 31.950 31.770 31.870 32.620 1231 37.213 26.136 25.773 11.890 25.904 26.981 23.640 1.3700 0.95000 1.6200 7.7300 21.210 28.810 30.510 30.300 29.470 28.430 27.850 28.400 30.410 32.460 32.020 29.870 27.660 25.430 23.320 22.310 22.940 25.080 27.000 28.230 28.950 29.270 29.540 30.050 30.770 31.220 31.170 30.940 30.610 30.380 30.560 31.460 1232 25.917 19.603 16.783 24.406 26.520 27.316 23.604 1.5300 0.93000 1.5900 7.4900 21.050 28.840 30.470 30.250 29.530 28.660 28.110 28.310 29.400 30.500 30.180 28.830 27.500 26.130 24.780 24.190 24.730 26.320 27.710 28.610 29.170 29.430 29.670 30.060 30.600 30.900 30.910 30.810 30.640 30.570 30.740 31.380 1233 38.514 17.053 30.461 19.530 23.732 26.243 21.398 1.4700 0.99000 1.4800 6.7100 18.440 25.300 26.950 27.020 26.510 25.920 25.710 26.780 29.630 32.650 32.830 30.840 28.500 26.010 23.670 22.420 22.410 23.370 24.130 24.570 24.850 24.960 25.120 25.510 26.090 26.420 26.360 26.160 25.860 25.640 25.800 26.530 1234 20.521 11.574 7.6365 12.045 39.729 41.391 39.156 1.8600 1.2300 1.9900 10.780 32.700 47.080 50.700 50.760 49.630 48.250 47.190 46.790 47.070 47.260 46.170 44.070 42.010 39.920 37.930 37.000 37.380 38.940 40.310 41.180 41.750 41.980 42.280 42.750 43.400 43.760 43.770 43.650 43.450 43.380 43.520 44.320 1235 8.5985 0.0000 7.8480 24.208 41.257 43.763 36.471 2.0900 1.1700 1.8100 9.4600 29.800 43.550 46.770 46.720 45.930 45.090 44.480 44.550 45.380 46.290 46.410 45.760 44.990 44.050 43.110 42.640 42.320 42.220 42.100 42.090 42.150 42.210 42.360 42.640 42.980 43.120 43.170 43.140 43.130 43.190 43.330 43.660 1236 15.282 0.0000 6.2915 12.467 47.372 51.500 45.480 2.2900 1.3900 2.0700 11.340 35.530 52.640 57.530 58.220 57.690 56.990 56.470 56.700 57.740 58.630 58.190 56.440 54.300 51.920 49.690 48.430 47.700 47.370 47.090 46.940 46.990 47.060 47.260 47.680 48.240 48.540 48.570 48.500 48.340 48.350 48.530 49.250 1237 11.537 7.5706 8.4944 14.920 46.592 48.289 41.617 2.2700 1.4200 1.9100 10.460 33.920 50.310 54.090 53.800 52.510 51.060 49.990 49.850 50.700 51.630 51.300 49.910 48.570 47.200 45.830 45.300 45.740 47.140 48.320 49.050 49.510 49.660 49.880 50.240 50.690 50.900 50.880 50.820 50.720 50.670 50.740 51.290 1238 11.437 6.0773 0.0000 22.776 39.501 40.584 38.785 2.1200 1.2500 1.8500 9.9000 32.060 47.510 51.030 50.640 49.240 47.730 46.370 45.300 44.380 43.560 42.660 41.490 40.490 39.480 38.440 38.030 38.330 39.310 40.120 40.660 41.010 41.140 41.330 41.650 42.030 42.210 42.210 42.190 42.150 42.180 42.310 42.740 1239 86.148 90.602 90.275 21.979 3.6174 3.0962 2.9690 0.37000 0.44000 1.0100 2.4900 3.8200 4.2100 4.1200 3.8000 3.4600 3.1400 2.9600 3.2200 3.8900 4.3100 3.6200 2.6500 2.2000 2.0100 1.7700 1.7600 2.3800 3.5700 4.4300 4.8300 5.0300 5.1200 5.2100 5.5200 6.0700 6.4200 6.3400 6.1000 5.7500 5.4800 5.6600 6.3600 1240 75.564 76.866 81.120 10.463 6.3620 5.9074 4.5943 0.48000 0.44000 1.0400 3.0100 5.2600 6.1300 6.1300 5.7800 5.3700 4.9600 4.8000 5.3700 6.8100 8.0500 7.4200 6.0300 5.1200 4.4600 3.7500 3.5000 4.3400 6.1700 7.6400 8.4100 8.8000 8.9800 9.1100 9.5500 10.230 10.660 10.560 10.260 9.8300 9.5100 9.7100 10.540 1241 50.556 64.228 58.264 23.619 11.881 10.414 7.8476 0.70000 0.69000 1.3300 3.9900 8.5700 10.650 10.630 10.120 9.4600 8.7200 8.3100 8.6700 9.9100 11.090 10.600 9.3600 8.5500 7.9900 7.3700 7.3000 8.7300 11.700 14.300 15.900 16.750 17.110 17.330 17.760 18.350 18.700 18.640 18.410 18.080 17.820 17.940 18.640 1242 81.085 81.275 73.424 12.942 5.5247 5.0381 5.0629 0.49000 0.58000 1.1900 3.3000 5.9400 7.0500 6.9700 6.5900 6.0400 5.4800 5.1300 5.4400 6.4100 7.1400 6.3400 5.0000 4.2300 3.6900 3.1100 2.9500 3.6700 5.2400 6.4200 7.0000 7.3100 7.4200 7.5200 7.9000 8.5400 8.9600 8.8300 8.5600 8.1600 7.8300 8.0300 8.8200 1243 68.323 71.226 74.740 24.748 6.8902 6.4026 4.6807 0.59000 0.61000 1.1300 3.0400 5.3300 6.2300 6.2200 5.8800 5.5000 5.1000 4.9300 5.4400 6.7400 7.9500 7.5500 6.4200 5.6400 5.0600 4.4300 4.2200 5.0400 6.7900 8.2300 9.0100 9.4300 9.6100 9.7600 10.130 10.720 11.070 11.000 10.780 10.410 10.150 10.320 11.020 1244 85.491 93.076 100.00 12.665 3.8500 3.2036 2.6097 0.43000 0.50000 1.0600 2.4500 3.4400 3.6600 3.5200 3.2500 2.9800 2.7300 2.6300 3.0100 3.8600 4.4100 3.6000 2.5400 2.0800 1.9300 1.7100 1.7400 2.5000 3.9300 4.9600 5.4200 5.6500 5.7500 5.8600 6.2200 6.8600 7.2800 7.1700 6.8700 6.4600 6.1300 6.3500 7.1700 1245 80.816 74.556 73.506 21.622 5.3837 5.3555 4.9613 0.65000 0.55000 1.2200 3.1000 5.6400 6.6400 6.6700 6.3300 5.8900 5.4300 5.1900 5.6300 6.8500 7.8600 7.2400 5.9700 5.0900 4.4000 3.6700 3.3600 3.9000 5.1300 6.0300 6.4300 6.6500 6.7400 6.8300 7.1600 7.7200 8.0800 7.9700 7.7400 7.3700 7.0900 7.2600 7.9800 1246 82.072 83.675 100.00 18.690 4.4900 4.1406 2.6297 0.44000 0.46000 0.99000 2.3000 3.2800 3.4700 3.3800 3.1200 2.9200 2.7600 2.7600 3.3600 4.6700 5.7100 5.1600 4.0500 3.4200 3.0100 2.5600 2.4400 3.1500 4.5800 5.6400 6.1500 6.4100 6.5300 6.6400 7.0000 7.6200 8.0200 7.9200 7.6600 7.2600 6.9800 7.1100 7.9300 1247 63.044 66.759 58.497 13.812 9.9358 9.0408 8.0031 0.64000 0.53000 1.1900 4.0000 8.6700 10.730 10.870 10.390 9.7200 8.9300 8.4800 8.8300 10.030 11.100 10.380 8.8800 7.8500 7.0300 6.1600 5.8900 7.0300 9.4800 11.540 12.730 13.380 13.650 13.870 14.340 15.080 15.530 15.440 15.180 14.730 14.400 14.590 15.470 1248 66.606 71.573 57.824 22.243 8.0142 7.1807 7.1956 0.67000 0.67000 1.2400 3.8300 8.0700 9.9800 10.040 9.4600 8.7700 7.9300 7.4000 7.5300 8.2800 8.9400 8.1900 6.9100 6.0800 5.4800 4.8200 4.6300 5.5700 7.5900 9.2200 10.110 10.570 10.760 10.910 11.290 11.910 12.290 12.190 11.950 11.540 11.250 11.360 12.160 1249 30.721 44.134 29.926 19.795 21.377 19.556 16.272 1.2300 0.85000 1.3800 6.1500 16.220 21.430 21.960 21.200 20.080 18.850 18.040 18.080 19.030 20.090 19.570 18.240 17.250 16.450 15.620 15.510 17.180 20.800 24.240 26.580 27.880 28.450 28.820 29.300 29.920 30.280 30.270 30.160 29.910 29.790 29.950 30.660 1250 48.881 45.217 46.473 24.396 14.129 14.144 11.490 0.86000 0.69000 1.2200 4.6100 11.280 14.590 15.060 14.670 14.030 13.330 12.950 13.510 15.200 16.900 16.630 15.200 13.920 12.710 11.500 10.990 11.800 13.810 15.520 16.560 17.110 17.360 17.530 17.910 18.480 18.810 18.750 18.560 18.260 18.020 18.130 18.860 1251 46.204 51.146 37.268 19.813 15.343 14.409 12.918 1.0300 0.69000 1.3100 5.3200 13.070 16.930 17.390 16.810 15.920 14.920 14.260 14.410 15.410 16.400 15.780 14.300 13.170 12.180 11.150 10.840 12.020 14.720 17.110 18.610 19.450 19.820 20.080 20.540 21.190 21.590 21.560 21.370 21.040 20.790 20.940 21.770 1252 53.976 49.188 49.181 13.259 13.867 13.895 11.497 0.88000 0.70000 1.3000 4.7200 11.320 14.560 15.040 14.680 14.020 13.250 12.880 13.560 15.540 17.510 17.110 15.320 13.730 12.240 10.740 10.090 11.000 13.290 15.270 16.460 17.100 17.370 17.600 18.040 18.760 19.180 19.120 18.850 18.440 18.160 18.340 19.200 1253 37.563 35.311 27.631 18.526 21.039 20.847 18.592 1.0900 0.83000 1.3900 6.3900 17.400 23.520 24.570 24.090 23.120 21.980 21.280 21.460 22.710 24.020 23.490 21.820 20.290 18.850 17.410 16.840 17.820 20.330 22.580 24.040 24.860 25.210 25.490 25.950 26.570 26.950 26.900 26.730 26.450 26.260 26.420 27.180 1254 32.332 45.659 19.056 25.282 18.894 17.038 16.643 1.0200 0.66000 1.3100 6.1800 16.810 22.440 22.970 22.040 20.720 19.250 18.160 17.660 17.660 17.770 16.940 15.690 14.810 14.130 13.400 13.310 14.760 17.960 20.960 22.970 24.070 24.560 24.890 25.310 25.840 26.150 26.150 26.030 25.810 25.710 25.830 26.460 1255 47.037 55.992 47.694 9.9469 16.653 15.183 11.981 0.82000 0.70000 1.3200 5.1900 12.400 15.700 16.030 15.430 14.600 13.650 13.100 13.580 15.220 16.850 16.290 14.610 13.320 12.270 11.180 10.890 12.510 16.070 19.340 21.450 22.610 23.110 23.450 24.030 24.830 25.320 25.270 24.990 24.570 24.270 24.440 25.400 1256 8.6185 16.818 0.0000 25.042 35.063 34.056 31.472 1.7200 1.0600 1.7500 9.4500 28.320 39.920 41.920 41.110 39.670 38.120 36.790 35.760 34.860 34.180 33.390 32.470 31.950 31.570 31.120 31.220 32.450 34.920 37.220 38.810 39.740 40.170 40.500 40.920 41.310 41.550 41.630 41.660 41.670 41.760 41.910 42.370 1257 22.653 29.492 23.207 24.018 25.568 24.859 19.813 1.1900 0.92000 1.4500 6.8600 18.650 24.960 25.920 25.430 24.550 23.600 22.990 23.240 24.420 25.720 25.540 24.420 23.470 22.630 21.760 21.590 22.840 25.600 28.120 29.850 30.830 31.260 31.590 32.040 32.590 32.880 32.910 32.840 32.710 32.640 32.810 33.460 1258 12.652 30.687 18.636 21.053 31.941 29.754 23.923 1.3500 0.94000 1.4500 7.6500 22.660 31.150 32.100 31.080 29.680 28.170 27.130 26.990 27.780 28.770 28.440 27.350 26.650 26.190 25.650 25.820 27.800 31.900 35.840 38.610 40.120 40.770 41.160 41.600 42.070 42.270 42.280 42.220 42.140 42.110 42.200 42.660 1259 31.368 38.173 23.327 11.913 25.539 24.143 21.302 1.3900 0.96000 1.5200 7.2500 20.240 27.340 28.410 27.730 26.530 25.140 24.200 24.170 25.130 26.110 25.350 23.620 22.210 20.960 19.700 19.340 20.960 24.630 28.120 30.490 31.830 32.440 32.850 33.410 34.180 34.590 34.570 34.420 34.120 33.910 34.130 35.000 1260 12.688 22.693 16.910 13.318 39.408 37.848 29.701 1.9700 1.1700 1.7400 8.8700 26.800 37.580 39.280 38.370 36.950 35.400 34.370 34.460 35.840 37.510 37.390 36.130 35.170 34.390 33.550 33.600 35.520 39.600 43.590 46.400 47.980 48.660 49.120 49.640 50.210 50.490 50.530 50.480 50.370 50.350 50.460 51.080 1261 7.7493 19.422 0.0000 14.951 44.028 41.971 38.907 2.0700 1.2200 2.0200 11.330 34.610 49.650 52.250 51.080 49.100 46.950 45.130 43.710 42.490 41.530 40.440 39.250 38.590 38.150 37.620 37.840 39.690 43.500 47.210 49.820 51.340 52.040 52.540 53.070 53.590 53.880 53.960 53.980 54.020 54.080 54.280 54.840 1262 0.0000 9.3875 0.0000 18.779 48.853 47.939 41.309 2.3100 1.3900 1.9300 10.710 34.670 51.410 54.770 53.870 52.190 50.410 48.940 47.790 46.930 46.320 45.800 45.240 45.160 45.310 45.370 45.910 47.300 49.850 52.190 53.810 54.780 55.180 55.540 55.900 56.170 56.280 56.380 56.490 56.700 56.920 57.070 57.350 1263 82.726 100.00 91.608 21.739 3.9813 3.0143 2.8346 0.53000 0.58000 1.1800 2.6200 3.8200 4.1400 3.9900 3.6700 3.3300 2.9900 2.7600 2.9200 3.3900 3.6100 2.8400 1.9200 1.6000 1.5800 1.5000 1.6200 2.4300 3.9800 5.1700 5.7600 6.0600 6.1700 6.2800 6.6300 7.2000 7.5700 7.4700 7.2300 6.8400 6.5800 6.7200 7.4500 1264 53.940 68.542 52.782 15.344 11.969 10.107 8.7654 0.73000 0.67000 1.2600 4.2800 9.7500 12.160 12.210 11.530 10.650 9.7100 9.0400 9.1900 10.100 10.930 10.160 8.7500 7.8800 7.2800 6.6400 6.5700 8.1300 11.410 14.350 16.190 17.170 17.580 17.850 18.340 19.040 19.450 19.380 19.140 18.750 18.440 18.610 19.400 1265 74.621 86.560 69.897 12.895 6.3017 5.1033 5.1697 0.37000 0.50000 1.1500 3.3500 6.2100 7.4100 7.3500 6.8700 6.2300 5.5500 5.0900 5.2000 5.8100 6.2200 5.3700 4.1600 3.5500 3.2200 2.8300 2.8200 3.8500 5.9500 7.6900 8.6500 9.1500 9.3700 9.5400 9.9600 10.650 11.100 11.010 10.710 10.260 9.9300 10.140 10.960 1266 54.158 83.900 50.065 12.981 10.532 7.6210 7.5763 0.60000 0.57000 1.2300 4.1900 9.2400 11.350 11.190 10.330 9.2500 8.0400 7.1800 6.9100 7.0700 7.1800 6.1800 4.9300 4.3700 4.1500 3.8700 4.0600 5.8800 9.6600 13.190 15.470 16.700 17.230 17.560 18.080 18.840 19.290 19.240 18.990 18.570 18.280 18.460 19.310 1267 75.905 94.121 100.00 18.448 4.6617 3.5315 2.5187 0.45000 0.53000 1.1100 2.4500 3.4000 3.5900 3.4600 3.1500 2.8700 2.6300 2.5200 2.8100 3.5200 3.9800 3.2700 2.3100 1.9500 1.8700 1.7400 1.8500 2.7900 4.6600 6.2200 7.0600 7.4900 7.6700 7.8200 8.1800 8.7800 9.1600 9.0800 8.8400 8.4400 8.1900 8.3400 9.0700 1268 65.172 100.00 88.454 21.623 6.0907 4.0564 2.9383 0.64000 0.50000 1.1400 2.6100 3.9500 4.3900 4.1600 3.8200 3.4600 3.1000 2.8400 2.9400 3.3600 3.5300 2.7600 1.8500 1.5600 1.5900 1.5600 1.8100 3.1600 5.8700 8.3200 9.8200 10.600 10.950 11.170 11.610 12.250 12.670 12.610 12.380 12.010 11.740 11.910 12.660 1269 63.630 88.480 61.946 21.062 7.2637 5.3867 5.4877 0.65000 0.63000 1.1700 3.4300 6.8400 8.1700 8.0400 7.4200 6.6500 5.8200 5.2100 5.0900 5.3600 5.5200 4.6900 3.6300 3.1800 3.0200 2.7800 2.9000 4.1700 6.7900 9.0900 10.480 11.210 11.520 11.720 12.140 12.780 13.170 13.100 12.870 12.500 12.250 12.430 13.180 1270 63.224 79.716 68.418 21.324 7.9981 6.5475 5.4164 0.72000 0.62000 1.1200 3.3100 6.3700 7.6200 7.5200 7.0800 6.5000 5.8700 5.4800 5.6800 6.5100 7.1900 6.5000 5.3400 4.7300 4.3800 3.9600 3.9600 5.2100 7.7400 9.9300 11.220 11.890 12.170 12.370 12.780 13.430 13.800 13.730 13.490 13.110 12.810 12.960 13.750 1271 48.488 76.008 53.624 20.411 11.104 8.5549 7.1780 0.59000 0.56000 1.1200 3.8800 8.4300 10.370 10.280 9.5500 8.7100 7.7600 7.1200 7.0900 7.6300 8.1100 7.3600 6.2300 5.6600 5.3700 5.0300 5.1700 6.8800 10.460 13.830 16.040 17.230 17.750 18.080 18.560 19.200 19.580 19.550 19.360 19.030 18.790 18.940 19.700 1272 31.756 59.275 28.601 26.971 16.716 13.891 12.604 0.57000 0.76000 1.2200 5.3800 13.760 17.770 17.780 16.780 15.500 14.150 13.160 12.760 12.900 13.130 12.380 11.280 10.670 10.340 9.9500 10.120 12.010 15.910 19.630 22.190 23.580 24.160 24.530 24.970 25.500 25.830 25.830 25.700 25.500 25.380 25.510 26.080 1273 20.191 49.426 18.944 20.558 23.816 20.154 18.161 1.3300 0.87000 1.4500 6.8700 18.950 25.160 25.440 24.110 22.490 20.740 19.400 18.750 18.630 18.670 17.820 16.610 15.970 15.630 15.230 15.500 17.810 22.650 27.470 30.920 32.880 33.760 34.280 34.800 35.390 35.730 35.770 35.680 35.550 35.510 35.680 36.320 1274 30.803 54.283 40.172 26.630 16.826 14.640 10.931 0.85000 0.71000 1.2700 4.7800 11.600 14.750 14.860 14.190 13.320 12.380 11.790 11.960 12.960 14.020 13.690 12.650 12.000 11.580 11.100 11.210 12.940 16.520 19.940 22.260 23.530 24.090 24.440 24.880 25.410 25.700 25.710 25.590 25.410 25.330 25.450 26.070 1275 30.632 54.916 38.803 16.249 20.449 17.436 13.129 1.1900 0.71000 1.3400 5.4500 13.790 17.780 17.970 17.110 16.030 14.860 14.100 14.250 15.340 16.520 16.040 14.750 13.930 13.390 12.800 12.930 15.090 19.740 24.320 27.540 29.340 30.130 30.610 31.160 31.830 32.210 32.210 32.060 31.810 31.670 31.840 32.550 1276 41.816 65.860 30.505 16.153 15.907 12.811 12.764 0.82000 0.76000 1.3000 5.6700 14.190 18.210 18.270 17.170 15.760 14.200 13.020 12.520 12.520 12.570 11.530 10.130 9.3500 8.9100 8.4000 8.5200 10.570 14.770 18.750 21.410 22.900 23.530 23.930 24.480 25.210 25.630 25.610 25.410 25.090 24.860 25.040 25.850 1277 18.230 35.661 10.073 19.334 29.515 26.746 24.790 1.7700 1.00000 1.5900 8.1200 23.880 32.950 33.980 32.720 30.980 29.080 27.620 26.810 26.480 26.280 25.360 24.060 23.260 22.730 22.120 22.230 24.250 28.500 32.680 35.640 37.340 38.100 38.560 39.070 39.640 39.950 40.000 39.940 39.850 39.770 39.990 40.580 1278 0.0000 24.565 0.0000 22.969 38.489 34.925 30.973 1.8900 1.1900 1.7100 9.2800 28.820 40.930 42.400 40.830 38.820 36.710 35.020 33.730 32.660 31.880 31.090 30.320 30.170 30.330 30.440 31.100 33.420 38.000 42.640 46.080 48.050 48.920 49.480 49.920 50.220 50.370 50.480 50.610 50.810 51.000 51.150 51.390 1279 6.7535 36.735 14.390 21.801 31.415 27.413 21.788 1.4900 0.93000 1.6100 7.8600 21.900 29.200 29.700 28.460 26.980 25.360 24.210 23.750 23.900 24.260 23.750 22.860 22.520 22.500 22.390 22.950 25.550 30.810 36.180 40.180 42.510 43.530 44.180 44.730 45.240 45.520 45.620 45.680 45.730 45.850 46.020 46.470 1280 4.9418 36.537 0.0000 17.811 36.964 31.675 29.380 1.7400 1.0900 1.9100 10.340 29.670 40.380 41.080 39.060 36.610 34.080 32.040 30.480 29.130 28.130 27.000 25.900 25.520 25.560 25.500 26.140 29.100 35.220 41.650 46.520 49.400 50.710 51.490 52.130 52.640 52.960 53.070 53.170 53.260 53.410 53.590 54.050 1281 16.239 33.487 14.636 10.029 36.769 33.395 29.352 1.6800 1.1900 1.7300 9.1100 27.620 38.740 40.120 38.640 36.590 34.400 32.780 32.130 32.380 32.790 31.870 30.220 29.140 28.380 27.550 27.640 30.140 35.580 41.030 44.990 47.250 48.200 48.760 49.390 50.040 50.400 50.390 50.310 50.080 50.020 50.100 50.820 1282 0.0000 24.554 7.3884 15.036 45.559 41.102 32.952 1.9600 1.2300 1.7600 9.7100 30.270 43.090 44.650 43.110 41.130 39.030 37.480 36.680 36.550 36.710 36.190 35.370 35.190 35.410 35.560 36.390 39.330 45.210 51.390 56.090 58.850 60.040 60.780 61.330 61.720 61.900 62.040 62.180 62.400 62.660 62.790 63.070 1283 36.698 100.00 63.169 27.559 10.578 6.3042 4.8108 0.57000 0.55000 1.1600 3.3000 6.5500 7.6800 7.3700 6.6300 5.8000 4.9300 4.2500 3.9600 3.8800 3.7200 2.8700 1.9700 1.7000 1.8100 1.8600 2.3000 4.5500 9.4100 14.340 17.810 19.740 20.580 21.050 21.530 22.120 22.470 22.450 22.350 22.140 21.970 22.160 22.700 1284 63.779 100.00 74.642 14.140 7.2532 4.7413 4.2184 0.58000 0.59000 1.2100 3.1200 5.6200 6.4600 6.2500 5.6900 5.0600 4.3900 3.8900 3.8300 4.0900 4.1400 3.1700 2.0900 1.7600 1.7900 1.7500 2.0200 3.6200 6.8300 9.7500 11.530 12.470 12.850 13.100 13.590 14.330 14.790 14.690 14.410 13.950 13.620 13.760 14.680 1285 34.307 84.651 40.604 21.793 13.825 9.2500 8.1092 0.70000 0.62000 1.2000 4.4900 10.260 12.620 12.240 11.110 9.8700 8.5000 7.4900 6.9700 6.8100 6.6600 5.7400 4.7100 4.3600 4.3900 4.3500 4.8100 7.2900 12.480 17.690 21.420 23.530 24.450 24.990 25.580 26.250 26.660 26.670 26.540 26.300 26.170 26.360 27.020 1286 52.674 92.800 57.954 24.522 8.3669 5.4401 5.2134 0.51000 0.55000 1.1000 3.3800 6.8600 8.1800 7.9000 7.1800 6.3200 5.3900 4.6900 4.3900 4.3700 4.2900 3.4300 2.5100 2.2000 2.2100 2.1700 2.4500 4.1400 7.6100 10.950 13.130 14.310 14.810 15.130 15.570 16.170 16.550 16.510 16.330 16.010 15.790 15.960 16.620 1287 48.675 94.159 72.958 20.318 9.4824 6.1307 4.1745 0.63000 0.50000 1.0500 3.0600 5.5000 6.3100 6.1000 5.5800 4.9700 4.3500 3.9100 3.9300 4.2900 4.4900 3.6600 2.6600 2.3100 2.3600 2.3200 2.6900 4.7100 8.8600 12.870 15.550 17.000 17.660 18.050 18.570 19.270 19.680 19.650 19.470 19.130 18.890 19.030 19.850 1288 49.253 100.00 61.198 13.605 9.9335 5.9827 5.4763 0.78000 0.58000 1.2000 3.6500 7.3900 8.8200 8.4500 7.6100 6.6300 5.5800 4.7700 4.3900 4.2700 4.0600 3.0300 2.0000 1.6900 1.7700 1.7900 2.1800 4.3000 8.8100 13.280 16.330 18.000 18.730 19.150 19.710 20.470 20.920 20.890 20.650 20.260 20.000 20.130 21.040 1289 32.104 68.794 22.089 23.304 16.501 12.591 12.760 1.0800 0.70000 1.3600 5.7800 14.720 18.820 18.690 17.330 15.740 13.990 12.670 11.860 11.380 11.040 10.010 8.8500 8.3400 8.1900 7.9600 8.3000 10.580 15.200 19.710 22.850 24.600 25.390 25.860 26.390 27.010 27.400 27.410 27.290 27.060 26.930 27.090 27.840 1290 10.201 54.727 0.0000 25.756 25.222 19.981 19.733 1.4600 0.94000 1.5000 7.8000 21.630 28.630 28.510 26.620 24.460 22.170 20.370 18.950 17.710 16.770 15.650 14.610 14.270 14.320 14.290 14.890 17.690 23.400 29.280 33.650 36.180 37.340 38.000 38.590 39.100 39.400 39.510 39.550 39.580 39.670 39.820 40.270 1291 17.334 70.684 23.997 15.138 23.721 16.910 14.805 1.4400 0.88000 1.5700 6.6500 17.500 22.530 21.980 20.130 18.090 15.940 14.320 13.390 12.920 12.630 11.490 10.190 9.7300 9.7700 9.7200 10.360 13.850 21.270 29.150 35.180 38.710 40.270 41.110 41.820 42.510 42.880 42.940 42.850 42.730 42.630 42.740 43.370 1292 32.193 72.933 43.806 26.048 14.402 10.744 8.5405 0.85000 0.62000 1.2400 4.3900 10.080 12.570 12.350 11.420 10.380 9.2500 8.4300 8.2000 8.4600 8.7600 8.0800 7.1200 6.7100 6.6300 6.4800 6.8300 9.0000 13.500 18.000 21.150 22.890 23.670 24.130 24.630 25.170 25.530 25.550 25.430 25.250 25.120 25.250 25.900 1293 13.806 68.016 14.589 24.134 21.972 15.839 14.575 0.99000 0.72000 1.5000 6.7100 17.380 22.160 21.590 19.830 17.870 15.790 14.200 13.130 12.360 11.830 10.780 9.7200 9.3700 9.4800 9.5000 10.150 13.270 19.790 26.680 31.940 35.030 36.430 37.220 37.880 38.480 38.810 38.910 38.910 38.900 38.910 39.090 39.640 1294 37.652 77.543 51.332 15.543 14.609 10.572 7.9906 0.84000 0.52000 1.2000 4.2500 9.5400 11.740 11.570 10.680 9.6800 8.5800 7.8100 7.7000 8.1700 8.6000 7.7900 6.6300 6.1200 5.9800 5.7800 6.1200 8.5200 13.570 18.600 22.140 24.120 25.000 25.510 26.100 26.820 27.250 27.230 27.060 26.770 26.570 26.740 27.500 1295 36.905 79.647 35.683 10.201 16.848 11.696 11.061 0.81000 0.72000 1.3200 5.3900 13.470 17.040 16.620 15.200 13.510 11.690 10.350 9.6800 9.4800 9.3500 8.1800 6.7900 6.2200 6.1000 5.8800 6.2900 9.1100 15.070 21.100 25.380 27.820 28.840 29.430 30.090 30.920 31.380 31.340 31.120 30.740 30.470 30.610 31.480 1296 26.702 62.752 16.327 14.143 21.966 17.047 16.860 1.1500 0.81000 1.4800 7.0300 18.900 24.550 24.470 22.830 20.840 18.680 17.040 16.040 15.440 15.030 13.820 12.410 11.740 11.490 11.150 11.520 14.300 20.090 25.910 30.150 32.580 33.680 34.310 34.960 35.720 36.160 36.190 36.060 35.830 35.670 35.860 36.680 1297 8.6040 63.162 0.0000 11.760 31.919 22.807 23.278 1.4700 0.94000 1.5900 8.9100 26.690 36.120 35.280 32.070 28.590 25.050 22.320 20.260 18.430 17.080 15.470 14.030 13.550 13.670 13.670 14.490 18.620 27.590 37.600 45.740 50.740 53.000 54.200 55.090 55.790 56.190 56.290 56.320 56.310 56.340 56.470 57.030 1298 0.0000 53.737 0.0000 19.604 32.565 24.707 22.460 1.5500 0.96000 1.6100 8.4800 24.600 33.020 32.720 30.340 27.740 25.060 22.960 21.360 19.940 18.910 17.700 16.610 16.350 16.620 16.800 17.720 21.520 29.460 38.290 45.420 49.770 51.800 52.940 53.690 54.190 54.440 54.650 54.850 55.120 55.400 55.590 55.870 1299 0.0000 37.863 5.8101 10.474 44.729 36.868 30.435 1.9100 1.1600 1.9400 10.180 30.370 41.950 42.570 40.340 37.800 35.150 33.090 31.760 30.910 30.400 29.360 28.230 27.980 28.290 28.490 29.530 33.590 42.080 51.570 59.380 64.180 66.410 67.680 68.520 69.070 69.380 69.590 69.820 70.070 70.440 70.640 70.940 1300 8.4352 49.862 19.690 20.313 28.650 23.161 18.240 1.1800 0.84000 1.4600 6.9800 19.370 25.640 25.620 24.110 22.450 20.630 19.340 18.770 18.810 19.090 18.410 17.380 17.000 17.020 16.970 17.620 20.770 27.250 34.050 39.230 42.270 43.640 44.420 45.050 45.600 45.920 46.020 46.050 46.100 46.150 46.330 46.790 1301 6.0251 56.738 17.753 14.057 32.318 24.543 19.787 1.5100 0.92000 1.5600 7.5900 21.780 28.910 28.600 26.510 24.260 21.930 20.190 19.260 18.920 18.860 17.870 16.620 16.200 16.330 16.350 17.180 21.170 29.600 38.830 46.190 50.610 52.610 53.670 54.440 55.070 55.380 55.490 55.530 55.550 55.620 55.730 56.160 1302 14.119 51.113 13.023 12.808 30.637 24.734 22.190 1.4300 0.96000 1.6100 8.3600 23.500 31.360 31.540 29.670 27.480 25.120 23.340 22.270 21.670 21.320 20.200 18.860 18.260 18.100 17.840 18.380 21.610 28.430 35.660 41.210 44.490 45.950 46.800 47.550 48.270 48.690 48.780 48.760 48.680 48.680 48.870 49.550 1303 25.778 100.00 51.396 20.741 14.877 8.5447 6.5699 0.85000 0.75000 1.3500 4.1900 9.1000 10.910 10.330 9.1500 7.9200 6.5800 5.5600 5.0200 4.7200 4.3900 3.3100 2.2400 1.9600 2.1200 2.2100 2.8100 5.9000 12.690 19.940 25.370 28.500 29.880 30.610 31.240 31.900 32.280 32.290 32.150 31.940 31.790 31.860 32.540 1304 29.582 100.00 32.652 14.476 15.858 8.9817 9.1387 0.78000 0.75000 1.3000 5.2200 12.700 15.660 14.820 12.990 11.060 8.9800 7.4100 6.3300 5.5000 4.7900 3.5100 2.3300 2.0100 2.1700 2.2600 2.8700 6.0900 13.120 20.630 26.300 29.600 31.070 31.850 32.560 33.340 33.810 33.810 33.660 33.400 33.200 33.340 34.120 1305 34.229 100.00 41.636 22.371 12.500 7.1995 6.8457 0.64000 0.54000 1.1400 4.2200 9.4600 11.480 10.890 9.6600 8.3000 6.8300 5.6900 4.9800 4.4700 4.0100 2.9700 1.9900 1.7200 1.8400 1.9200 2.4200 5.0100 10.620 16.480 20.770 23.220 24.310 24.940 25.530 26.230 26.640 26.650 26.530 26.310 26.150 26.280 27.010 1306 34.709 93.371 52.978 11.409 14.840 8.9524 6.9369 0.83000 0.63000 1.1500 4.2100 9.2300 11.120 10.640 9.5900 8.4100 7.1000 6.1200 5.6700 5.5400 5.3600 4.2500 3.0800 2.7300 2.8300 2.8700 3.4400 6.4400 12.920 19.670 24.680 27.570 28.870 29.600 30.340 31.210 31.730 31.720 31.570 31.210 31.020 31.190 32.130 1307 0.0000 93.896 22.137 21.696 22.831 12.746 10.008 0.88000 0.66000 1.3500 5.6400 14.130 17.360 16.160 14.090 12.010 9.8500 8.1900 7.0200 6.0700 5.3400 4.1800 3.1300 2.8700 3.1200 3.3000 4.1500 8.2800 17.650 28.820 38.550 44.890 48.000 49.650 50.650 51.290 51.650 51.900 52.130 52.420 52.720 52.860 53.140 1308 14.920 82.701 21.111 20.759 19.968 12.764 11.588 1.0400 0.76000 1.3900 5.7800 14.880 18.780 17.950 16.080 14.080 11.970 10.380 9.3000 8.5100 7.9400 6.8100 5.7300 5.4200 5.5800 5.6500 6.3400 9.7400 17.080 25.100 31.360 35.100 36.820 37.740 38.480 39.140 39.490 39.600 39.630 39.560 39.580 39.730 40.310 1309 8.0381 82.415 0.0000 16.951 24.489 15.171 15.476 1.2000 0.86000 1.4200 7.3200 20.200 25.940 24.580 21.710 18.770 15.730 13.400 11.620 10.040 8.8700 7.4900 6.3000 5.9900 6.2100 6.3600 7.1900 11.180 19.960 29.960 38.250 43.400 45.820 47.130 48.070 48.800 49.230 49.410 49.530 49.580 49.660 49.870 50.390 1310 28.611 85.045 20.072 14.129 18.210 11.703 12.723 1.0400 0.70000 1.3300 6.1100 16.240 20.760 19.920 17.850 15.530 13.070 11.180 9.9000 8.9000 8.1300 6.8000 5.5200 5.1000 5.1500 5.1000 5.6500 8.7600 15.510 22.630 27.930 31.010 32.360 33.100 33.770 34.550 34.970 34.970 34.820 34.570 34.410 34.580 35.310 1311 13.355 83.835 32.067 15.715 22.105 13.887 10.716 0.94000 0.79000 1.2700 5.5300 13.850 17.260 16.480 14.760 12.960 11.060 9.6400 8.8100 8.3400 8.0200 6.9400 5.8200 5.5100 5.6900 5.8200 6.5900 10.370 18.680 28.020 35.640 40.320 42.520 43.690 44.550 45.320 45.750 45.890 45.900 45.870 45.880 46.060 46.650 1312 0.0000 67.908 18.503 18.380 28.961 19.754 15.263 1.1500 0.92000 1.4200 6.7600 18.310 23.570 22.770 20.690 18.580 16.360 14.690 13.680 13.060 12.710 11.680 10.570 10.300 10.560 10.760 11.690 15.890 25.010 35.510 44.370 49.980 52.620 54.030 54.930 55.490 55.780 56.010 56.190 56.420 56.700 56.860 57.120 1313 0.0000 76.026 11.557 12.932 31.512 19.951 16.983 1.6400 0.88000 1.5400 7.7000 21.420 27.740 26.360 23.500 20.570 17.590 15.320 13.730 12.450 11.540 10.140 8.8300 8.5000 8.7900 9.0000 9.9900 14.790 25.530 38.330 49.600 56.990 60.510 62.330 63.400 64.110 64.400 64.660 64.850 65.120 65.390 65.470 65.700 1314 0.0000 67.910 0.0000 19.680 28.981 19.733 18.455 1.2500 0.90000 1.5600 8.0400 22.390 29.080 28.080 25.330 22.550 19.660 17.420 15.730 14.240 13.130 11.810 10.660 10.380 10.640 10.830 11.750 15.860 24.710 34.810 43.270 48.580 51.080 52.450 53.320 53.900 54.200 54.450 54.660 54.910 55.220 55.370 55.670 1315 15.404 100.00 25.948 25.494 16.076 8.9248 8.1387 0.87000 0.60000 1.2500 4.9300 11.700 14.140 13.210 11.550 9.7900 7.9600 6.5300 5.5400 4.7100 4.0500 2.9900 2.0300 1.7900 1.9600 2.0900 2.7300 5.9200 13.020 20.910 27.130 30.850 32.580 33.500 34.220 34.850 35.220 35.340 35.360 35.330 35.350 35.550 36.030 1316 0.62256 90.142 0.0000 27.138 20.815 11.945 11.794 1.0600 0.69000 1.3600 6.4000 16.610 20.650 19.220 16.690 14.160 11.570 9.5700 8.0500 6.6900 5.7100 4.5400 3.5600 3.3200 3.5400 3.7100 4.4700 8.1700 16.430 25.980 33.960 38.970 41.360 42.640 43.430 43.960 44.260 44.490 44.660 44.890 45.170 45.350 45.540 1317 0.0000 100.00 18.794 14.801 25.496 13.507 10.840 1.0600 0.79000 1.2900 6.0700 15.880 19.580 18.010 15.460 12.930 10.320 8.3300 6.9000 5.7100 4.7900 3.4500 2.3000 2.0300 2.2800 2.4800 3.3800 7.9300 18.610 31.710 43.640 51.730 55.780 57.900 59.170 59.940 60.380 60.670 60.950 61.280 61.600 61.760 62.070 1318 0.0000 100.00 0.19837 18.980 23.898 12.635 12.333 1.0400 0.71000 1.3100 6.7400 18.250 22.830 20.860 17.700 14.640 11.530 9.1700 7.4000 5.8300 4.7000 3.3400 2.2300 1.9800 2.2100 2.4000 3.2400 7.5100 17.460 29.520 40.250 47.370 50.850 52.670 53.790 54.480 54.830 55.120 55.350 55.640 55.920 56.080 56.330 1319 100.00 0.0000 73.081 18.214 6.1872 13.075 9.0879 0.79000 0.60000 1.1700 3.4200 6.7500 8.6200 9.3800 9.8500 10.210 10.680 11.700 14.970 22.120 30.080 31.400 27.070 21.070 14.810 9.5300 6.3500 4.7700 3.9600 3.3000 2.8600 2.7000 2.6500 2.6700 2.9500 3.4700 3.8300 3.7200 3.4800 3.1000 2.8500 3.0200 3.7700 1320 100.00 0.0000 88.715 18.561 5.5498 12.435 6.1699 0.48000 0.53000 1.0400 2.6700 4.5600 5.4300 5.7400 5.9600 6.2500 6.7400 7.8100 11.280 19.100 28.290 30.550 26.500 20.610 14.440 9.2300 6.1200 4.6000 3.8000 3.1700 2.7400 2.5900 2.5500 2.5600 2.8200 3.3300 3.6700 3.5600 3.3100 2.9700 2.7600 2.9100 3.6300 1321 94.556 33.310 100.00 15.818 4.5822 8.4324 3.7259 0.64000 0.32000 1.0200 2.3800 3.4000 3.6700 3.6400 3.5500 3.5900 3.7600 4.3700 6.6600 11.800 17.480 18.550 16.100 12.920 9.5600 6.5400 4.7400 4.0600 3.9100 3.6800 3.4400 3.3500 3.3400 3.3700 3.6300 4.1600 4.5100 4.4100 4.1500 3.8000 3.5600 3.7500 4.4500 1322 100.00 29.903 96.029 25.503 3.9849 7.7244 3.9312 0.57000 0.49000 1.0500 2.4300 3.5600 3.9000 3.9600 3.9100 3.9600 4.1200 4.7100 6.7900 11.450 16.510 17.440 15.170 12.160 8.8900 5.9600 4.1800 3.4300 3.1600 2.8700 2.6000 2.5000 2.4700 2.4900 2.7300 3.1900 3.4900 3.4000 3.1800 2.8600 2.6900 2.8000 3.4500 1323 94.952 14.020 99.865 27.439 4.5662 9.1951 3.7523 0.44000 0.50000 1.0100 2.2500 3.2200 3.4200 3.4600 3.4200 3.5100 3.7600 4.4900 7.0200 12.740 19.320 21.000 18.510 14.800 10.770 7.2400 5.1100 4.1300 3.6700 3.2700 2.9800 2.8700 2.8400 2.8600 3.0800 3.5000 3.7900 3.6900 3.4900 3.2000 3.0500 3.1900 3.7900 1324 89.692 6.6787 75.117 24.704 6.9353 12.434 7.6969 0.65000 0.69000 1.2000 3.2300 6.1800 7.6200 8.1600 8.3900 8.5700 8.8600 9.6300 12.310 18.290 25.050 26.490 23.370 18.910 14.110 9.9300 7.3800 6.1500 5.5300 5.0000 4.6200 4.5000 4.4600 4.4800 4.7300 5.2200 5.5500 5.4500 5.2300 4.8900 4.6300 4.8000 5.4600 1325 78.594 0.0000 63.393 17.919 11.014 17.731 12.442 0.79000 0.65000 1.2700 4.2000 9.4700 12.460 13.640 14.220 14.570 14.980 15.890 18.990 25.780 33.400 34.820 30.860 25.320 19.500 14.540 11.540 10.030 9.2400 8.5900 8.1500 8.0000 7.9500 7.9900 8.3000 8.8700 9.2300 9.1400 8.8900 8.5300 8.2300 8.4000 9.1900 1326 83.315 0.0000 72.149 11.028 10.269 18.116 10.410 0.87000 0.65000 1.2100 3.7100 7.7400 9.8700 10.750 11.200 11.590 12.090 13.210 16.960 25.590 35.940 38.470 33.770 27.110 20.230 14.510 11.110 9.4000 8.4900 7.7700 7.2800 7.1000 7.0500 7.0900 7.4200 8.0400 8.4500 8.3300 8.0600 7.6300 7.3400 7.5100 8.3700 1327 80.797 0.0000 79.887 22.631 9.1802 15.445 7.6238 0.47000 0.55000 1.1300 3.1300 5.8500 7.1700 7.6600 7.9200 8.2400 8.6600 9.6400 12.820 19.970 28.400 30.810 27.700 22.850 17.590 13.040 10.270 8.8700 8.1300 7.5200 7.1200 6.9600 6.9300 6.9600 7.2700 7.8100 8.1600 8.0600 7.8200 7.4700 7.2100 7.3500 8.1400 1328 100.00 18.653 90.206 17.893 4.8465 9.9576 5.3288 0.45000 0.54000 1.0500 2.6700 4.2900 5.0300 5.2500 5.3300 5.5100 5.8200 6.6300 9.3900 15.410 22.020 23.260 20.190 15.990 11.490 7.5200 5.1500 4.0600 3.5800 3.1400 2.7900 2.6600 2.6300 2.6600 2.9200 3.4300 3.7900 3.6800 3.4500 3.0800 2.8400 3.0400 3.7400 1329 67.491 0.0000 65.353 16.121 14.491 21.452 12.213 0.88000 0.63000 1.2400 4.1200 9.3100 12.080 13.130 13.660 14.050 14.520 15.560 18.970 26.570 35.530 38.050 34.620 29.360 23.700 18.840 15.890 14.350 13.550 12.860 12.400 12.240 12.190 12.240 12.620 13.260 13.680 13.580 13.300 12.890 12.570 12.740 13.590 1330 100.00 52.647 100.00 19.191 3.4660 5.8624 3.3248 0.31000 0.45000 0.94000 2.3500 3.3800 3.6500 3.6200 3.4800 3.4000 3.4500 3.8000 5.3700 8.8100 12.280 12.430 10.520 8.4900 6.4000 4.4100 3.2500 2.9400 3.0300 2.9400 2.7500 2.6600 2.6500 2.6600 2.9500 3.4900 3.8300 3.7100 3.4700 3.0500 2.8300 2.9900 3.6500 1331 100.00 41.346 88.719 13.034 4.1591 7.6904 4.9574 0.41000 0.53000 1.1400 2.7300 4.5600 5.2400 5.3900 5.3200 5.3400 5.4000 5.9000 7.9100 12.330 16.920 17.300 14.730 11.700 8.5400 5.6600 3.9800 3.3500 3.2200 3.0000 2.7500 2.6400 2.6300 2.6500 2.9200 3.4500 3.8000 3.6900 3.4300 3.0700 2.8400 3.0400 3.7100 1332 87.066 41.996 89.663 10.730 6.3805 9.5319 5.0333 0.63000 0.45000 1.0600 2.8000 4.5800 5.2800 5.4100 5.3600 5.3800 5.4800 6.0000 8.1100 12.690 17.480 18.080 15.750 13.040 10.200 7.5500 5.9900 5.6400 5.9100 5.9900 5.9100 5.9000 5.9100 5.9700 6.3400 6.9900 7.4200 7.3100 7.0000 6.5500 6.2300 6.4400 7.2900 1333 87.686 37.189 94.815 21.078 5.4998 8.6186 3.9617 0.33000 0.38000 0.99000 2.3700 3.6500 4.0500 4.0700 4.0000 4.0500 4.1600 4.7000 6.7000 11.120 15.880 16.720 14.700 12.180 9.4900 7.0000 5.5100 5.0600 5.1300 5.0600 4.9200 4.8700 4.8700 4.9100 5.2000 5.7400 6.0900 5.9900 5.7500 5.3800 5.1300 5.2700 5.9600 1334 82.984 43.030 77.043 14.473 6.7250 9.3014 6.3097 0.67000 0.57000 1.1600 3.1100 5.8900 7.0900 7.3900 7.3200 7.1900 7.1000 7.4000 9.0300 12.700 16.460 16.680 14.530 12.130 9.6400 7.3100 5.9700 5.7300 6.1300 6.3200 6.3200 6.3600 6.3800 6.4600 6.7800 7.3700 7.7500 7.6400 7.3900 7.0100 6.7200 6.8900 7.6800 1335 80.702 14.944 74.796 25.575 8.2404 12.769 7.3875 0.41000 0.50000 1.0600 3.1000 6.0800 7.5200 8.0100 8.1600 8.3100 8.5000 9.1500 11.530 16.790 22.620 23.920 21.480 18.030 14.240 10.840 8.7600 7.8200 7.4400 7.0800 6.7800 6.6800 6.6600 6.6900 6.9600 7.4800 7.8200 7.7200 7.5300 7.1300 6.9100 7.0200 7.7100 1336 59.026 11.378 62.727 26.198 13.973 18.170 10.767 0.82000 0.70000 1.2300 4.0900 8.9700 11.470 12.220 12.460 12.650 12.800 13.420 15.680 20.680 26.210 27.660 25.710 22.800 19.540 16.560 14.730 13.980 13.800 13.570 13.380 13.350 13.360 13.460 13.800 14.350 14.700 14.640 14.410 14.080 13.840 13.990 14.740 1337 68.358 19.575 62.630 9.8392 14.366 19.480 13.111 1.0400 0.78000 1.3300 4.6400 10.770 14.070 15.110 15.420 15.480 15.540 16.140 18.790 24.840 31.520 32.630 29.330 25.080 20.600 16.580 14.210 13.380 13.440 13.390 13.260 13.240 13.240 13.320 13.740 14.440 14.890 14.770 14.450 13.960 13.630 13.780 14.720 1338 76.879 17.846 80.248 18.324 9.6353 14.597 7.4164 0.74000 0.85000 1.1900 3.2800 6.1100 7.4000 7.8500 7.9600 8.1200 8.3800 9.1400 11.910 18.100 25.150 26.840 24.130 20.320 16.170 12.450 10.230 9.3100 9.0200 8.7300 8.4600 8.3700 8.3500 8.3900 8.7300 9.3000 9.6800 9.5600 9.3000 8.8800 8.6100 8.7800 9.5700 1339 79.715 19.831 68.362 17.220 9.4195 14.111 9.4479 0.62000 0.59000 1.2300 3.7900 7.8200 9.8900 10.580 10.850 10.940 11.090 11.710 14.120 19.380 25.090 26.050 23.220 19.440 15.370 11.750 9.5600 8.6200 8.3700 8.0700 7.8100 7.7200 7.7200 7.7600 8.0900 8.6800 9.0900 8.9900 8.7300 8.3100 8.0400 8.1900 9.0000 1340 73.196 26.134 72.768 20.533 9.3985 12.947 7.5161 0.76000 0.53000 1.1500 3.3500 6.4900 8.0200 8.4200 8.5100 8.5500 8.6400 9.1600 11.260 15.870 20.890 21.880 19.750 16.940 13.890 11.080 9.4200 8.8800 8.9700 8.9500 8.8400 8.8400 8.8700 8.9200 9.2400 9.8200 10.180 10.110 9.8800 9.4900 9.2300 9.3700 10.100 1341 61.192 11.604 65.008 14.649 15.793 21.191 11.884 1.0300 0.70000 1.2000 4.2200 9.4400 12.200 13.130 13.510 13.790 14.110 14.970 17.940 24.490 31.930 33.870 31.120 27.150 22.820 18.940 16.620 15.670 15.490 15.250 15.020 15.000 14.990 15.100 15.500 16.190 16.610 16.510 16.230 15.830 15.510 15.720 16.600 1342 46.823 0.0000 53.151 20.613 20.648 26.297 15.396 1.1400 0.84000 1.3900 5.0800 12.350 16.250 17.520 18.000 18.280 18.580 19.400 22.230 28.530 35.880 38.250 36.050 32.390 28.280 24.670 22.500 21.360 20.750 20.240 19.890 19.810 19.790 19.890 20.260 20.820 21.170 21.120 20.910 20.600 20.380 20.550 21.290 1343 60.592 0.0000 54.485 19.541 15.919 22.146 14.787 0.93000 0.67000 1.2600 4.6700 11.550 15.340 16.750 17.340 17.610 17.910 18.720 21.550 27.880 35.110 36.850 33.700 29.060 24.010 19.650 17.010 15.650 14.920 14.300 13.880 13.750 13.700 13.760 14.100 14.690 15.040 14.960 14.730 14.360 14.100 14.240 15.060 1344 85.409 47.630 100.00 25.700 5.0658 7.0182 3.2259 0.48000 0.64000 1.1100 2.3800 3.3200 3.5500 3.4700 3.3500 3.3000 3.3400 3.6900 5.1900 8.4700 11.880 12.340 10.850 9.1500 7.3900 5.7000 4.7400 4.6200 4.9800 5.1500 5.1300 5.1600 5.1900 5.2400 5.5100 6.0100 6.3200 6.2300 6.0400 5.7100 5.4800 5.6200 6.2700 1345 82.327 53.264 91.026 16.320 6.0601 7.7460 4.1064 0.50000 0.52000 1.0500 2.6000 4.1000 4.6200 4.6600 4.5200 4.4400 4.4300 4.7300 6.2100 9.4200 12.670 12.900 11.210 9.4800 7.7600 6.0800 5.1500 5.2300 5.9400 6.4000 6.5300 6.6400 6.6800 6.7600 7.1000 7.7000 8.0900 8.0000 7.7400 7.3300 7.0400 7.2000 8.0100 1346 87.301 60.676 100.00 23.948 4.1962 5.3759 2.9585 0.66000 0.52000 1.1300 2.3700 3.3000 3.5000 3.4100 3.2400 3.1300 3.0700 3.2800 4.3900 6.8100 9.1700 9.1500 7.7900 6.5200 5.3100 4.1000 3.4700 3.5700 4.1300 4.4500 4.5100 4.5700 4.5900 4.6700 4.9300 5.4300 5.7500 5.6600 5.4500 5.1200 4.9100 5.0700 5.7100 1347 68.197 43.562 83.158 23.963 8.8977 10.600 5.2440 0.63000 0.63000 1.1400 2.8900 5.0100 5.8800 6.0200 5.9200 5.8300 5.7800 6.1000 7.6600 11.180 14.910 15.550 14.070 12.390 10.630 8.9100 7.9900 8.1400 9.0400 9.6900 9.9900 10.160 10.240 10.340 10.690 11.270 11.620 11.530 11.300 10.930 10.670 10.790 11.560 1348 55.746 12.593 51.683 18.661 16.798 21.229 14.621 1.0100 0.82000 1.3400 4.9300 12.090 16.010 17.210 17.530 17.580 17.600 18.070 20.300 25.300 30.790 31.900 29.390 25.970 22.260 18.910 16.960 16.260 16.270 16.220 16.140 16.150 16.180 16.270 16.620 17.220 17.580 17.490 17.270 16.920 16.660 16.790 17.620 1349 56.920 31.313 69.603 18.864 13.687 16.072 8.4158 0.71000 0.59000 1.1400 3.5800 7.4400 9.3000 9.7200 9.7400 9.6900 9.6900 10.110 12.090 16.470 21.300 22.430 20.730 18.560 16.250 14.060 12.870 12.950 13.950 14.720 15.100 15.360 15.480 15.640 16.030 16.680 17.060 16.980 16.760 16.360 16.100 16.260 17.130 1350 52.608 26.802 50.581 11.057 18.100 20.853 14.619 1.0400 0.90000 1.3400 5.2900 12.780 16.780 17.700 17.840 17.660 17.420 17.630 19.460 23.640 28.140 28.690 26.370 23.600 20.710 18.010 16.560 16.600 17.760 18.700 19.210 19.540 19.690 19.870 20.330 21.060 21.490 21.440 21.170 20.740 20.430 20.600 21.540 1351 68.683 46.124 73.799 17.217 9.4612 10.927 6.5896 0.55000 0.55000 1.1500 3.2400 6.3700 7.6600 7.9100 7.7700 7.6000 7.4200 7.6200 9.0500 12.280 15.640 15.930 14.210 12.420 10.600 8.8200 7.8800 8.1700 9.3500 10.240 10.660 10.920 11.040 11.170 11.550 12.220 12.620 12.530 12.280 11.850 11.530 11.700 12.530 1352 69.183 33.268 72.424 25.317 9.5807 12.103 6.9773 1.1000 0.78000 1.3500 3.4100 6.4000 7.8100 8.0900 8.0600 7.9700 7.9300 8.2800 9.9800 13.800 17.900 18.630 16.950 14.860 12.610 10.470 9.2200 9.0100 9.4700 9.7500 9.7900 9.8600 9.8900 9.9700 10.290 10.860 11.200 11.090 10.870 10.500 10.230 10.390 11.130 1353 56.756 29.983 57.967 26.076 12.686 14.684 9.8855 0.68000 0.66000 1.1500 3.9900 8.9300 11.410 11.970 11.970 11.810 11.650 11.830 13.230 16.360 19.630 20.100 18.560 16.720 14.740 12.850 11.800 11.810 12.580 13.150 13.440 13.640 13.740 13.860 14.210 14.760 15.100 15.040 14.850 14.530 14.290 14.470 15.160 1354 67.167 33.588 71.323 15.431 11.609 14.455 8.1250 0.50000 0.63000 1.1600 3.4900 7.2700 8.9900 9.3700 9.3800 9.3000 9.2700 9.6800 11.700 16.290 21.280 22.170 20.080 17.520 14.840 12.300 10.830 10.740 11.520 12.030 12.230 12.330 12.410 12.500 12.910 13.600 13.990 13.900 13.580 13.140 12.800 12.900 13.800 1355 47.798 15.481 55.807 26.345 16.163 19.252 11.408 1.0600 0.64000 1.2200 4.2700 9.8500 12.700 13.430 13.540 13.520 13.510 13.920 15.830 20.150 25.000 26.320 24.760 22.490 19.970 17.640 16.310 16.010 16.400 16.680 16.800 16.930 16.990 17.120 17.440 17.950 18.240 18.200 18.030 17.760 17.570 17.720 18.410 1356 46.858 15.982 55.291 16.368 19.493 23.178 13.719 0.93000 0.80000 1.2700 4.8300 11.630 15.160 16.090 16.300 16.290 16.290 16.790 19.080 24.350 30.330 31.900 29.860 26.990 23.880 21.040 19.450 19.160 19.740 20.180 20.400 20.590 20.680 20.820 21.240 21.850 22.230 22.150 21.930 21.590 21.350 21.560 22.370 1357 37.661 0.0000 40.049 25.575 22.995 27.750 18.868 1.2100 0.88000 1.4200 5.7900 15.460 20.910 22.500 22.930 22.970 23.010 23.490 25.600 30.370 35.740 37.330 35.520 32.630 29.330 26.360 24.580 23.620 23.120 22.650 22.370 22.290 22.260 22.350 22.670 23.160 23.440 23.400 23.220 22.990 22.810 22.940 23.600 1358 38.886 16.854 42.946 20.507 22.738 25.568 17.609 1.1900 0.91000 1.4800 5.8700 15.210 20.370 21.610 21.690 21.430 21.150 21.300 22.980 26.990 31.390 32.320 30.540 28.220 25.720 23.390 22.130 22.100 22.970 23.670 24.080 24.320 24.430 24.570 24.940 25.510 25.850 25.800 25.600 25.290 25.110 25.230 25.940 1359 34.219 10.043 44.635 10.776 30.020 34.474 21.171 1.3300 1.0400 1.5100 6.5400 17.540 23.790 25.370 25.650 25.560 25.440 25.930 28.540 34.720 41.970 44.140 41.950 38.750 35.300 32.180 30.500 30.210 30.900 31.390 31.660 31.890 31.970 32.130 32.570 33.250 33.620 33.560 33.330 32.990 32.720 32.900 33.770 1360 40.401 0.0000 40.007 15.791 26.732 32.748 21.992 1.4200 0.89000 1.5100 6.5500 17.510 23.870 25.880 26.570 26.780 26.960 27.660 30.330 36.370 43.320 45.360 42.840 38.920 34.590 30.800 28.540 27.330 26.710 26.190 25.840 25.770 25.750 25.870 26.260 26.910 27.280 27.210 27.000 26.680 26.460 26.650 27.480 1361 25.239 0.0000 29.301 15.392 35.064 40.361 27.866 1.7100 1.1000 1.6600 7.7000 22.320 31.350 33.840 34.370 34.340 34.230 34.630 36.810 42.040 48.080 50.030 48.230 45.290 41.970 39.000 37.300 36.350 35.890 35.470 35.210 35.170 35.170 35.300 35.720 36.280 36.610 36.560 36.420 36.190 36.060 36.230 37.000 1362 71.067 64.604 86.378 10.450 7.5284 7.7264 4.4485 0.51000 0.58000 1.1300 2.8800 4.8200 5.4800 5.4700 5.2600 4.9900 4.8000 4.8900 5.9700 8.3800 10.710 10.470 8.9100 7.6700 6.5900 5.4800 5.0200 5.7700 7.5400 8.9300 9.6400 10.030 10.200 10.350 10.770 11.460 11.900 11.790 11.510 11.060 10.730 10.930 11.780 1363 83.615 76.668 100.00 12.560 4.7461 4.8501 2.8826 0.54000 0.56000 1.0700 2.4200 3.4300 3.6700 3.5800 3.3300 3.1400 3.0100 3.0600 3.9100 5.7100 7.3100 6.8600 5.5300 4.6400 3.9400 3.2100 2.9200 3.5000 4.8100 5.7400 6.1500 6.3700 6.4600 6.5700 6.9300 7.5700 7.9700 7.8800 7.5900 7.1900 6.8900 7.1000 7.8800 1364 75.055 58.418 83.641 23.387 6.4609 7.2303 4.4640 0.41000 0.59000 1.0800 2.7800 4.6800 5.3800 5.4600 5.2500 5.0800 4.9000 5.0100 6.0400 8.3100 10.490 10.420 9.1000 7.8900 6.7500 5.6000 5.0300 5.3900 6.4400 7.1800 7.5100 7.7000 7.7900 7.8800 8.2300 8.8000 9.1800 9.0900 8.8400 8.4900 8.2200 8.3700 9.1200 1365 84.280 66.720 100.00 12.746 5.0377 5.8778 3.1290 0.58000 0.42000 1.00000 2.4800 3.4700 3.7200 3.6500 3.4500 3.3200 3.2600 3.4500 4.6300 7.1600 9.5600 9.3800 7.8200 6.5400 5.3800 4.2300 3.6600 4.0300 5.0500 5.7300 6.0000 6.1500 6.2300 6.3200 6.6500 7.2700 7.6400 7.5400 7.2900 6.8800 6.5900 6.7700 7.6200 1366 62.965 53.645 81.321 21.802 9.2929 9.8349 5.0651 0.46000 0.51000 1.1100 2.8500 5.1400 6.0100 6.0900 5.9100 5.7300 5.5800 5.7300 6.9700 9.7100 12.510 12.750 11.450 10.230 9.0500 7.8600 7.3200 7.9400 9.5100 10.770 11.460 11.830 12.020 12.170 12.550 13.170 13.560 13.490 13.250 12.890 12.620 12.730 13.560 1367 65.683 53.155 68.705 10.046 10.834 11.563 7.7040 0.65000 0.57000 1.1900 3.7300 7.6100 9.3300 9.5800 9.3800 9.0600 8.7200 8.7600 9.9900 12.890 15.750 15.670 13.840 12.150 10.530 8.9000 8.1200 8.8000 10.650 12.110 12.890 13.340 13.530 13.710 14.190 14.970 15.450 15.340 15.050 14.540 14.200 14.370 15.360 1368 47.303 34.677 55.899 16.696 16.946 18.135 11.478 0.85000 0.67000 1.2500 4.5200 10.530 13.560 14.100 14.010 13.750 13.410 13.540 15.010 18.420 22.040 22.580 20.950 19.140 17.300 15.520 14.680 15.270 17.080 18.630 19.560 20.090 20.340 20.560 20.990 21.650 22.060 22.000 21.780 21.430 21.190 21.370 22.150 1369 48.648 33.003 63.818 25.198 14.326 15.736 8.8801 0.81000 0.53000 1.1100 3.7200 8.1900 10.260 10.680 10.610 10.440 10.270 10.490 12.010 15.460 19.220 20.020 18.670 17.070 15.380 13.740 12.940 13.320 14.660 15.770 16.420 16.810 16.980 17.150 17.520 18.100 18.440 18.390 18.210 17.900 17.700 17.870 18.550 1370 50.080 43.160 58.721 23.466 13.203 13.623 9.1341 0.80000 0.63000 1.2600 4.0300 8.8900 11.180 11.540 11.280 10.930 10.520 10.470 11.480 13.920 16.450 16.590 15.220 13.850 12.540 11.210 10.630 11.330 13.170 14.760 15.700 16.230 16.450 16.640 17.020 17.600 17.950 17.900 17.710 17.390 17.160 17.320 18.060 1371 66.439 50.186 84.693 14.500 10.155 11.330 5.4432 0.80000 0.64000 1.1700 3.0000 5.3400 6.2400 6.3500 6.1600 6.0300 5.9500 6.2200 7.8600 11.490 15.340 15.800 14.100 12.410 10.770 9.1100 8.2800 8.8400 10.430 11.630 12.230 12.550 12.680 12.810 13.250 13.960 14.380 14.260 13.950 13.490 13.110 13.290 14.160 1372 30.415 28.533 36.664 25.681 20.857 21.169 14.859 1.0100 0.78000 1.3700 5.5400 13.890 18.180 18.910 18.650 18.170 17.610 17.440 18.270 20.540 22.930 23.260 22.170 21.040 19.910 18.780 18.360 19.190 21.180 22.980 24.130 24.790 25.090 25.340 25.740 26.280 26.590 26.590 26.460 26.260 26.150 26.350 26.960 1373 24.239 14.128 25.350 23.051 28.496 30.137 23.008 1.4300 0.93000 1.5100 7.1500 20.080 27.620 29.220 29.080 28.490 27.850 27.570 28.450 30.900 33.580 33.990 32.680 31.170 29.550 28.010 27.280 27.630 28.910 30.030 30.730 31.170 31.370 31.560 31.930 32.400 32.670 32.670 32.540 32.370 32.290 32.400 33.010 1374 34.140 22.285 40.195 14.224 25.049 26.674 18.298 1.3500 0.87000 1.4100 6.1000 16.180 21.700 22.860 22.760 22.310 21.810 21.770 23.250 26.940 31.030 31.780 30.010 27.930 25.800 23.770 22.830 23.410 25.320 27.010 28.080 28.710 28.970 29.220 29.670 30.310 30.660 30.620 30.450 30.150 29.960 30.140 30.890 1375 31.556 20.837 44.068 24.007 22.385 23.863 15.409 1.1100 0.73000 1.3000 5.3600 13.740 18.190 19.080 19.000 18.710 18.360 18.440 19.810 23.140 26.850 27.770 26.550 25.010 23.360 21.770 21.030 21.480 22.980 24.290 25.110 25.600 25.820 26.020 26.420 26.960 27.280 27.280 27.110 26.900 26.730 26.920 27.570 1376 16.304 14.241 21.912 14.790 37.741 38.751 28.994 1.7800 1.0500 1.6600 8.4000 24.960 35.050 37.140 36.850 36.020 35.090 34.630 35.440 38.030 40.930 41.440 40.160 38.760 37.350 35.960 35.480 36.370 38.570 40.570 41.900 42.700 43.030 43.360 43.800 44.360 44.650 44.680 44.610 44.460 44.440 44.600 45.250 1377 6.4768 6.7749 25.344 25.395 36.452 37.825 24.295 1.6700 1.0600 1.5900 7.3900 21.110 28.990 30.500 30.330 29.860 29.420 29.370 30.570 33.620 37.190 38.680 38.470 38.040 37.530 37.000 37.000 37.560 38.740 39.700 40.360 40.800 41.000 41.250 41.570 41.940 42.120 42.180 42.200 42.260 42.330 42.460 42.860 1378 24.188 8.7352 35.811 20.445 30.365 33.324 21.018 1.4100 0.96000 1.5100 6.6900 17.920 24.140 25.580 25.760 25.620 25.470 25.780 27.670 32.020 37.000 38.660 37.540 35.770 33.760 31.870 30.950 30.950 31.700 32.270 32.640 32.920 33.070 33.270 33.680 34.240 34.520 34.550 34.440 34.260 34.130 34.320 35.010 1379 21.809 19.092 40.021 17.959 30.466 31.609 19.055 1.3000 0.88000 1.3900 6.2300 16.900 22.630 23.690 23.530 23.100 22.660 22.720 24.340 28.390 33.110 34.570 33.510 32.110 30.640 29.210 28.710 29.590 31.830 33.820 35.130 35.870 36.200 36.470 36.900 37.450 37.770 37.750 37.630 37.440 37.340 37.490 38.120 1380 22.604 10.351 30.680 10.417 37.394 40.416 27.036 2.0000 1.0600 1.6700 7.9700 22.600 31.180 33.320 33.520 33.250 32.910 33.080 35.020 39.690 45.030 46.530 44.900 42.670 40.280 38.030 36.970 37.250 38.660 39.820 40.560 41.050 41.290 41.560 42.060 42.770 43.160 43.150 43.000 42.770 42.610 42.840 43.700 1381 0.0000 0.0000 12.068 24.391 45.374 47.215 33.361 1.8200 1.2000 1.8100 9.4700 28.060 39.670 42.170 42.060 41.570 41.090 40.900 41.600 43.550 45.750 46.910 47.120 47.270 47.370 47.440 47.760 47.920 48.120 48.270 48.460 48.690 48.820 49.060 49.340 49.580 49.700 49.800 49.890 50.090 50.330 50.500 50.730 1382 0.0000 1.1287 14.082 15.422 55.930 58.199 38.540 2.3500 1.4200 2.1400 11.030 32.410 45.570 48.400 48.300 47.810 47.310 47.220 48.510 51.780 55.670 57.670 58.090 58.320 58.440 58.560 59.030 59.370 59.850 60.200 60.530 60.840 61.000 61.310 61.650 61.950 62.050 62.200 62.320 62.550 62.830 62.990 63.320 1383 10.116 0.0000 13.602 15.408 48.164 51.840 38.528 2.2200 1.3700 1.9300 9.9900 30.730 44.680 48.250 48.600 48.250 47.800 47.720 48.820 51.660 54.790 55.930 55.260 54.100 52.670 51.290 50.610 50.170 50.030 49.890 49.840 49.950 50.030 50.260 50.640 51.110 51.350 51.390 51.370 51.330 51.390 51.580 52.150 1384 17.013 0.0000 20.108 22.237 36.068 39.739 29.521 1.9700 1.2500 1.7100 8.2200 24.170 34.180 36.730 37.040 36.730 36.430 36.440 37.690 40.760 44.160 45.210 44.240 42.630 40.730 38.930 37.940 37.360 37.110 36.860 36.740 36.770 36.820 36.970 37.310 37.750 38.000 38.000 37.930 37.850 37.810 37.960 38.590 1385 76.738 86.613 100.00 10.126 5.3041 4.5158 2.7338 0.49000 0.45000 1.00000 2.4400 3.4700 3.7000 3.5700 3.2900 3.0400 2.8300 2.8000 3.3900 4.7000 5.7400 5.1000 3.9000 3.2800 2.9400 2.5500 2.5000 3.4400 5.3600 6.9000 7.7100 8.1400 8.3200 8.4700 8.8800 9.5600 9.9800 9.8800 9.5900 9.1500 8.8300 9.0300 9.8600 1386 54.273 68.304 82.259 15.771 10.399 9.0389 4.6084 0.67000 0.57000 1.1400 2.9100 5.1400 5.9100 5.8900 5.5800 5.2700 4.9800 4.9500 5.7800 7.7300 9.5800 9.3300 8.0900 7.2500 6.6700 6.0400 5.9700 7.4300 10.470 13.200 14.910 15.800 16.190 16.460 16.930 17.620 18.050 17.980 17.750 17.350 17.100 17.250 18.120 1387 69.605 80.121 100.00 20.151 6.2264 5.3986 2.6922 0.58000 0.51000 1.0400 2.3700 3.3200 3.5300 3.3900 3.1500 2.9600 2.8200 2.8300 3.4900 4.9700 6.2600 5.8500 4.7800 4.1600 3.7900 3.3600 3.3200 4.3300 6.3900 8.0900 9.0400 9.5300 9.7500 9.9100 10.310 10.940 11.340 11.260 11.000 10.620 10.310 10.520 11.270 1388 66.772 66.098 83.276 19.750 7.9134 7.6388 4.4152 0.66000 0.57000 1.0600 2.8000 4.8100 5.5700 5.5500 5.3100 5.0600 4.8000 4.8200 5.6800 7.6400 9.4900 9.2600 8.0000 7.0600 6.2900 5.4800 5.2000 6.1000 8.0300 9.5800 10.420 10.880 11.080 11.240 11.660 12.320 12.740 12.650 12.400 11.990 11.700 11.870 12.680 1389 58.420 67.133 72.975 17.998 9.5120 8.5602 5.3743 0.66000 0.57000 1.1300 3.1700 5.9200 7.0500 7.0200 6.6900 6.3000 5.8800 5.7400 6.4100 8.1100 9.7300 9.4100 8.1500 7.2600 6.6000 5.8900 5.7200 6.9100 9.4500 11.670 13.000 13.710 14.020 14.240 14.660 15.320 15.680 15.610 15.370 15.040 14.770 14.930 15.720 1390 63.327 69.137 100.00 19.302 8.3823 7.7174 2.9433 0.55000 0.42000 1.1100 2.2900 3.3300 3.5600 3.4600 3.2500 3.1300 3.0600 3.2400 4.2600 6.4900 8.6400 8.6200 7.4800 6.6700 6.0700 5.4200 5.2700 6.3900 8.7300 10.730 11.890 12.510 12.790 13.000 13.440 14.110 14.510 14.450 14.200 13.810 13.500 13.690 14.490 1391 46.779 52.779 70.160 27.761 12.125 11.620 6.0822 0.50000 0.58000 1.1100 3.2700 6.2600 7.5400 7.5900 7.3300 7.0800 6.8000 6.8300 7.8000 10.080 12.420 12.650 11.630 10.770 10.040 9.2700 9.0800 10.180 12.520 14.550 15.800 16.490 16.790 17.010 17.430 17.980 18.310 18.290 18.140 17.870 17.670 17.810 18.500 1392 34.235 48.373 59.910 21.354 17.490 16.071 9.0376 0.92000 0.74000 1.2200 4.1200 9.1600 11.410 11.580 11.190 10.740 10.260 10.140 11.080 13.440 15.950 16.180 15.070 14.180 13.450 12.690 12.630 14.280 17.770 21.030 23.210 24.390 24.920 25.270 25.740 26.360 26.690 26.690 26.540 26.280 26.130 26.290 27.020 1393 53.597 57.507 73.185 15.665 11.829 11.329 6.0962 0.72000 0.66000 1.1500 3.2700 6.2500 7.5500 7.6100 7.3400 7.0600 6.7600 6.7900 7.8800 10.420 12.990 13.050 11.680 10.510 9.5200 8.4800 8.1600 9.3300 11.970 14.280 15.680 16.440 16.780 17.000 17.460 18.140 18.560 18.480 18.240 17.880 17.610 17.770 18.580 1394 28.178 37.420 39.856 20.184 22.682 21.666 14.665 1.1300 0.75000 1.3900 5.8000 14.320 18.470 18.980 18.530 17.860 17.120 16.780 17.540 19.700 22.050 22.260 21.110 20.100 19.200 18.290 18.120 19.640 22.910 25.980 28.020 29.180 29.720 30.080 30.570 31.170 31.530 31.550 31.430 31.200 31.070 31.250 31.940 1395 37.826 38.821 57.132 20.504 18.229 18.169 10.419 0.92000 0.65000 1.2900 4.3800 9.9900 12.620 13.030 12.750 12.380 12.020 12.030 13.290 16.350 19.670 20.260 19.010 17.750 16.530 15.340 14.940 16.060 18.680 21.040 22.570 23.400 23.760 24.040 24.480 25.080 25.430 25.390 25.210 24.930 24.770 24.920 25.660 1396 38.892 54.728 53.271 17.790 16.700 14.937 9.8808 0.94000 0.73000 1.2600 4.3800 10.190 12.870 13.070 12.560 11.900 11.190 10.840 11.470 13.290 15.150 14.950 13.660 12.730 11.990 11.220 11.160 12.870 16.550 19.980 22.250 23.530 24.070 24.420 24.910 25.580 25.980 25.950 25.760 25.490 25.270 25.450 26.190 1397 44.742 43.672 53.332 14.682 17.420 17.259 11.463 0.84000 0.71000 1.3200 4.8200 11.190 14.160 14.600 14.280 13.790 13.250 13.100 14.150 16.830 19.650 19.780 18.230 16.770 15.410 14.040 13.530 14.680 17.410 19.850 21.380 22.240 22.630 22.920 23.430 24.150 24.560 24.510 24.290 23.930 23.670 23.840 24.720 1398 38.654 48.769 48.094 26.667 14.914 13.936 9.8374 0.67000 0.62000 1.1700 4.3200 10.060 12.720 12.960 12.540 11.910 11.240 10.900 11.440 13.020 14.690 14.600 13.500 12.610 11.850 11.070 10.910 12.150 14.850 17.310 18.900 19.780 20.160 20.430 20.820 21.340 21.650 21.630 21.500 21.290 21.130 21.260 21.890 1399 30.633 34.140 47.987 12.297 25.355 24.932 14.860 1.1100 0.78000 1.3600 5.5600 13.810 18.000 18.690 18.380 17.910 17.380 17.330 18.720 22.180 26.040 26.800 25.410 23.960 22.610 21.290 20.890 22.400 25.850 29.130 31.340 32.590 33.140 33.540 34.110 34.830 35.240 35.210 35.040 34.790 34.590 34.790 35.630 1400 0.0000 19.193 18.912 22.425 40.522 38.496 26.962 1.8300 1.1800 1.6700 8.3300 24.640 34.190 35.410 34.520 33.330 32.090 31.350 31.620 33.180 35.070 35.560 35.110 35.000 35.120 35.220 35.890 37.990 41.970 45.770 48.520 50.070 50.710 51.150 51.510 51.750 51.870 51.930 52.040 52.170 52.370 52.450 52.630 1401 16.048 23.215 27.339 19.002 32.140 31.455 21.883 1.4700 0.92000 1.5900 7.3600 20.150 27.060 28.170 27.690 26.950 26.100 25.700 26.450 28.710 31.250 31.700 30.740 29.850 29.070 28.240 28.200 29.710 32.920 35.930 38.030 39.230 39.770 40.160 40.660 41.220 41.540 41.600 41.550 41.450 41.400 41.610 42.260 1402 25.332 36.204 33.963 10.892 28.058 26.473 19.309 1.3900 0.83000 1.4600 6.7200 18.330 24.530 25.380 24.730 23.710 22.590 21.970 22.590 24.760 27.160 27.130 25.570 24.240 23.100 21.940 21.720 23.610 27.820 31.900 34.730 36.340 37.040 37.490 38.070 38.800 39.200 39.200 39.040 38.770 38.610 38.840 39.630 1403 0.0000 17.710 14.092 13.094 50.531 47.720 33.844 2.1600 1.3300 1.8700 9.6200 29.840 42.530 44.520 43.490 42.070 40.550 39.570 39.730 41.290 43.270 43.720 43.200 43.090 43.300 43.440 44.280 46.880 51.910 56.970 60.710 62.880 63.840 64.460 64.960 65.320 65.480 65.600 65.740 65.920 66.230 66.350 66.650 1404 0.0000 6.0635 7.3190 16.320 52.206 52.238 39.719 2.3100 1.4200 2.0300 10.840 33.440 48.310 51.340 50.870 49.800 48.650 47.870 47.890 48.840 50.020 50.380 50.130 50.150 50.340 50.460 51.040 52.330 54.500 56.420 57.780 58.600 58.960 59.350 59.720 60.010 60.160 60.290 60.390 60.580 60.870 61.020 61.390 1405 0.0000 10.190 9.7283 23.355 42.834 42.356 31.983 1.9900 1.1600 1.7600 9.0800 27.830 39.510 41.610 40.990 39.950 38.840 38.090 38.130 39.050 40.190 40.500 40.210 40.200 40.330 40.440 40.970 42.280 44.610 46.710 48.160 49.030 49.420 49.750 50.110 50.380 50.510 50.610 50.720 50.920 51.140 51.250 51.520 1406 0.0000 10.446 18.690 19.054 46.709 46.354 30.957 2.0100 1.3000 1.8100 8.9200 26.980 38.010 39.840 39.220 38.270 37.320 36.810 37.590 40.140 43.190 44.400 44.250 44.220 44.340 44.420 45.040 46.620 49.390 51.920 53.660 54.640 55.070 55.430 55.760 56.000 56.070 56.160 56.250 56.420 56.630 56.740 56.950 1407 52.343 70.327 64.723 12.785 12.143 10.095 7.0394 0.73000 0.59000 1.1700 3.7600 7.8800 9.5300 9.5400 9.0500 8.4300 7.7500 7.3800 7.8200 9.1600 10.370 9.7800 8.4100 7.6000 7.0800 6.4900 6.5000 8.2300 11.830 15.090 17.180 18.310 18.820 19.130 19.680 20.450 20.930 20.870 20.610 20.190 19.880 20.070 20.950 1408 57.810 76.416 100.00 23.470 8.0394 6.7214 2.6823 0.45000 0.52000 1.0900 2.3300 3.2000 3.4100 3.3200 3.0800 2.9100 2.8000 2.8700 3.6300 5.2500 6.7200 6.5000 5.5200 4.9600 4.6500 4.2800 4.3300 5.6400 8.2900 10.610 12.020 12.770 13.110 13.350 13.780 14.390 14.780 14.730 14.520 14.170 13.920 14.070 14.840 1409 56.968 88.626 100.00 20.120 8.0563 5.9106 2.5541 0.36000 0.46000 1.00000 2.2900 3.2600 3.4600 3.3100 3.0600 2.8600 2.6700 2.6500 3.1600 4.3100 5.2100 4.6700 3.6700 3.2400 3.1400 2.9600 3.1800 4.8000 8.0700 11.040 12.910 13.910 14.360 14.650 15.130 15.810 16.240 16.170 15.950 15.570 15.300 15.430 16.270 1410 53.938 77.700 82.801 14.121 10.289 8.1015 4.2943 0.49000 0.49000 1.0500 2.9400 5.0700 5.7900 5.6800 5.3400 4.9700 4.6100 4.4600 5.0400 6.4500 7.7000 7.2100 6.0400 5.4300 5.1200 4.7400 4.8600 6.6000 10.170 13.460 15.580 16.730 17.230 17.570 18.090 18.830 19.280 19.220 18.970 18.590 18.300 18.490 19.320 1411 59.278 79.687 81.215 21.892 8.4020 6.7194 4.1703 0.65000 0.64000 1.1600 2.9100 5.0000 5.7500 5.6500 5.2800 4.8700 4.4600 4.2600 4.6800 5.8000 6.7600 6.2300 5.1500 4.6000 4.3300 3.9900 4.0700 5.4700 8.3500 10.890 12.410 13.240 13.570 13.790 14.240 14.890 15.280 15.210 14.990 14.580 14.320 14.480 15.250 1412 40.971 71.298 72.665 24.521 11.680 9.2298 4.8056 0.40000 0.53000 1.0800 3.0000 5.6000 6.5400 6.4400 6.0500 5.6100 5.1700 4.9800 5.4600 6.7800 8.0400 7.7700 6.8200 6.3300 6.1000 5.8400 6.0500 7.8500 11.590 15.120 17.490 18.790 19.350 19.700 20.150 20.740 21.100 21.070 20.930 20.670 20.490 20.650 21.320 1413 67.632 95.565 100.00 13.671 6.1319 4.3260 2.5397 0.64000 0.44000 1.00000 2.3800 3.4100 3.6200 3.4600 3.1700 2.8900 2.6500 2.5300 2.8700 3.6600 4.1700 3.4100 2.3800 1.9900 1.9500 1.8500 2.0400 3.3900 6.0800 8.4500 9.8600 10.580 10.900 11.100 11.550 12.230 12.660 12.580 12.310 11.890 11.600 11.760 12.610 1414 52.109 84.592 75.900 14.386 10.105 7.3689 4.5766 0.41000 0.49000 1.0800 3.0600 5.5800 6.4700 6.3800 5.9100 5.4200 4.8700 4.5700 4.8500 5.7700 6.5100 5.8100 4.6600 4.1400 3.9800 3.7400 3.9600 5.8400 9.7300 13.380 15.750 17.040 17.600 17.940 18.490 19.230 19.700 19.640 19.390 18.990 18.690 18.880 19.730 1415 48.801 83.158 73.427 27.717 9.2802 6.9222 4.4424 0.49000 0.57000 1.1500 3.0400 5.4600 6.3200 6.2000 5.7500 5.2500 4.7600 4.4300 4.6600 5.4300 6.0600 5.4700 4.5100 4.1000 4.0000 3.8400 4.0600 5.7400 9.1100 12.210 14.170 15.200 15.630 15.900 16.300 16.900 17.220 17.170 16.990 16.660 16.450 16.530 17.210 1416 25.766 61.952 43.703 21.962 19.324 15.533 11.241 1.0400 0.78000 1.4600 5.0900 12.430 15.790 15.680 14.730 13.640 12.470 11.710 11.750 12.580 13.470 12.910 11.760 11.180 10.960 10.670 11.020 13.540 18.710 23.770 27.320 29.260 30.070 30.550 31.050 31.640 31.950 31.930 31.800 31.590 31.420 31.520 32.130 1417 21.447 54.657 45.655 17.237 23.296 19.360 12.269 0.99000 0.75000 1.2900 5.1500 12.970 16.580 16.630 15.800 14.840 13.810 13.220 13.590 15.090 16.720 16.510 15.380 14.770 14.490 14.150 14.520 17.220 22.840 28.490 32.560 34.880 35.890 36.480 37.080 37.710 38.060 38.090 38.000 37.820 37.700 37.880 38.470 1418 35.066 58.902 65.273 17.092 17.195 14.741 7.7801 0.88000 0.61000 1.2500 3.8400 8.2600 10.040 10.120 9.6500 9.2000 8.6500 8.4900 9.3600 11.550 13.760 13.710 12.500 11.710 11.210 10.630 10.750 12.890 17.300 21.490 24.300 25.860 26.520 26.920 27.440 28.110 28.480 28.450 28.270 27.970 27.750 27.940 28.610 1419 18.042 42.279 34.943 23.811 23.647 21.106 14.443 1.2300 0.84000 1.4100 5.8400 14.700 18.860 19.200 18.480 17.640 16.700 16.160 16.490 17.860 19.370 19.340 18.440 17.880 17.550 17.170 17.410 19.490 23.690 27.790 30.670 32.330 33.050 33.510 34.010 34.560 34.860 34.910 34.860 34.780 34.780 34.930 35.510 1420 0.0000 35.910 16.961 16.071 40.180 34.139 25.032 1.6400 1.1000 1.6700 8.3400 24.830 33.920 34.350 32.720 30.850 28.920 27.550 27.140 27.700 28.550 28.170 27.220 26.960 27.180 27.310 28.220 31.830 39.220 47.120 53.260 56.850 58.430 59.290 59.840 60.210 60.360 60.460 60.580 60.730 60.900 60.940 61.070 1421 0.0000 31.257 19.632 26.035 32.930 29.290 20.563 1.5100 0.94000 1.4700 7.2400 20.130 26.870 27.420 26.470 25.350 24.160 23.380 23.370 24.190 25.210 25.190 24.630 24.520 24.740 24.900 25.660 28.210 33.190 38.270 42.050 44.240 45.230 45.860 46.330 46.670 46.850 47.000 47.160 47.340 47.590 47.750 48.030 1422 8.3289 40.147 35.271 19.174 30.988 26.987 16.341 1.3200 0.89000 1.4700 6.2100 16.340 21.310 21.590 20.790 19.880 18.890 18.360 18.890 20.730 22.850 23.180 22.420 22.060 22.020 21.910 22.510 25.330 31.060 36.990 41.450 44.070 45.250 45.950 46.580 47.110 47.410 47.520 47.560 47.590 47.650 47.850 48.370 1423 8.8901 30.259 24.288 14.692 37.501 34.318 23.636 1.5700 1.0800 1.5700 7.8400 22.370 30.400 31.270 30.310 29.090 27.760 26.980 27.350 29.140 31.270 31.500 30.590 30.040 29.750 29.410 29.850 32.430 37.770 43.180 47.180 49.510 50.550 51.190 51.780 52.370 52.670 52.760 52.750 52.790 52.830 52.980 53.530 1424 18.370 41.045 27.611 11.976 30.436 27.015 19.965 1.4000 0.90000 1.5000 7.1700 19.670 26.170 26.790 25.830 24.600 23.210 22.320 22.460 23.760 25.240 24.940 23.650 22.820 22.270 21.670 21.890 24.430 29.820 35.290 39.290 41.620 42.670 43.300 43.980 44.690 45.100 45.150 45.050 44.900 44.850 45.020 45.810 1425 0.0000 44.263 25.480 25.648 29.509 24.249 16.325 1.1400 0.88000 1.4100 6.2900 17.130 22.410 22.390 21.220 19.950 18.620 17.720 17.600 18.300 19.210 19.040 18.320 18.160 18.390 18.550 19.340 22.440 28.760 35.450 40.630 43.680 45.060 45.860 46.410 46.810 47.000 47.150 47.330 47.530 47.770 47.900 48.110 1426 9.7329 34.921 39.765 26.094 26.861 24.394 14.072 1.0300 0.83000 1.3400 5.4700 13.850 17.830 18.180 17.650 17.030 16.380 16.130 16.910 19.030 21.420 21.960 21.360 21.040 20.920 20.760 21.210 23.390 27.690 31.890 34.890 36.610 37.370 37.900 38.380 38.830 39.080 39.190 39.220 39.230 39.280 39.440 39.940 1427 46.845 92.104 90.791 13.703 10.904 7.1349 3.1537 0.55000 0.62000 1.0800 2.5800 4.0700 4.4700 4.3100 3.9700 3.6400 3.3200 3.1600 3.5200 4.3900 4.9900 4.2400 3.1600 2.7800 2.8000 2.7700 3.1900 5.5400 10.400 15.140 18.390 20.180 20.970 21.450 22.060 22.860 23.350 23.320 23.100 22.690 22.430 22.600 23.510 1428 41.715 89.943 84.797 25.030 10.046 6.6747 3.3304 0.53000 0.52000 1.0400 2.6200 4.3600 4.8200 4.6600 4.2800 3.8900 3.5000 3.2600 3.4800 4.1500 4.6200 4.0100 3.1300 2.8300 2.8800 2.8500 3.2400 5.3000 9.5600 13.750 16.630 18.220 18.940 19.330 19.850 20.460 20.850 20.850 20.710 20.460 20.260 20.410 21.120 1429 30.791 87.946 67.160 19.658 14.364 9.4312 5.2066 0.69000 0.54000 1.1000 3.3700 6.5600 7.7600 7.5100 6.8800 6.2000 5.4800 5.0100 5.0500 5.6100 6.0500 5.3500 4.3700 4.0300 4.1100 4.1200 4.6500 7.4100 13.220 19.200 23.610 26.140 27.270 27.920 28.550 29.250 29.680 29.710 29.570 29.370 29.220 29.360 30.110 1430 46.777 95.965 76.021 10.310 11.482 7.1976 4.3536 0.63000 0.54000 1.0700 3.0300 5.6600 6.5500 6.3500 5.7800 5.2000 4.5400 4.1000 4.1700 4.6400 4.8800 3.9100 2.7700 2.3900 2.4400 2.4200 2.8700 5.3600 10.570 15.740 19.310 21.310 22.190 22.700 23.350 24.220 24.730 24.680 24.450 24.030 23.740 23.900 24.880 1431 18.009 70.967 40.002 21.957 20.097 14.546 10.292 0.97000 0.75000 1.3200 5.0500 12.150 15.220 14.870 13.720 12.480 11.130 10.190 9.9200 10.240 10.650 9.9400 8.9000 8.5200 8.5700 8.5500 9.1500 12.220 18.630 25.340 30.370 33.300 34.580 35.300 35.900 36.530 36.850 36.920 36.860 36.780 36.730 36.860 37.410 1432 15.350 72.552 39.083 14.519 22.955 15.900 10.936 0.95000 0.76000 1.3000 5.3600 13.170 16.460 16.020 14.660 13.230 11.710 10.630 10.250 10.470 10.790 9.9700 8.8200 8.4400 8.5400 8.5500 9.2500 12.850 20.590 29.010 35.660 39.610 41.440 42.440 43.230 44.000 44.420 44.510 44.490 44.390 44.360 44.550 45.220 1433 24.768 65.650 40.557 12.769 22.265 16.939 12.482 1.3600 0.85000 1.4000 5.6100 14.120 17.970 17.750 16.550 15.170 13.700 12.700 12.520 13.150 13.840 13.040 11.670 11.060 10.890 10.640 11.100 14.270 20.880 27.650 32.620 35.450 36.650 37.320 37.970 38.700 39.090 39.090 38.930 38.660 38.470 38.620 39.350 1434 33.440 73.374 64.582 17.950 15.633 11.744 6.6730 0.75000 0.69000 1.2200 3.7600 7.7700 9.3300 9.1800 8.5900 7.9400 7.2400 6.8300 7.1900 8.3500 9.4600 8.9400 7.8200 7.3000 7.1700 6.9500 7.3100 9.8300 15.080 20.270 23.900 25.940 26.800 27.300 27.860 28.570 28.950 28.940 28.750 28.450 28.260 28.370 29.120 1435 17.234 61.617 45.598 12.013 25.333 19.449 11.992 1.2300 0.81000 1.3400 5.5000 13.310 16.700 16.580 15.570 14.510 13.330 12.580 12.760 13.890 15.090 14.620 13.420 12.910 12.840 12.690 13.330 16.780 23.980 31.590 37.400 40.860 42.420 43.320 44.100 44.880 45.320 45.420 45.360 45.240 45.170 45.390 46.150 1436 14.504 73.644 54.703 17.356 21.923 15.279 8.2517 0.89000 0.71000 1.1900 4.3100 9.8200 12.020 11.720 10.810 9.8800 8.8700 8.2200 8.3100 9.1500 10.000 9.4700 8.4500 8.1300 8.2600 8.3200 9.0400 12.550 20.080 28.270 34.710 38.560 40.330 41.300 42.060 42.760 43.170 43.260 43.250 43.200 43.200 43.350 43.960 1437 12.592 71.255 52.741 26.838 18.924 13.445 7.6315 0.79000 0.62000 1.1800 4.1000 9.1100 11.080 10.830 10.010 9.1400 8.2300 7.6400 7.6700 8.3600 9.0900 8.6200 7.7400 7.4600 7.5800 7.6300 8.2900 11.340 17.730 24.460 29.540 32.500 33.840 34.600 35.200 35.740 36.040 36.130 36.130 36.130 36.180 36.330 36.750 1438 32.881 91.746 77.468 10.518 15.387 9.5131 4.4529 0.67000 0.62000 1.1000 3.1100 5.7600 6.6200 6.3500 5.8400 5.2700 4.6600 4.2800 4.4400 5.0900 5.5200 4.6300 3.4800 3.1000 3.2100 3.2400 3.8500 7.0400 13.870 21.030 26.370 29.480 30.880 31.670 32.450 33.340 33.850 33.900 33.700 33.400 33.200 33.390 34.270 1439 0.0000 49.987 27.336 18.029 33.493 26.288 17.161 1.3200 0.86000 1.5700 7.0800 18.520 23.900 23.750 22.400 20.930 19.380 18.340 18.140 18.800 19.720 19.390 18.510 18.300 18.570 18.780 19.740 23.570 31.620 40.570 47.850 52.290 54.400 55.560 56.340 56.840 57.120 57.330 57.540 57.780 58.070 58.250 58.520 1440 0.0000 63.926 32.018 16.426 30.469 21.484 13.698 1.4800 0.88000 1.4700 6.1200 15.930 20.270 19.740 18.190 16.610 14.920 13.730 13.310 13.590 14.040 13.350 12.290 12.020 12.310 12.520 13.520 17.850 27.160 37.810 46.770 52.440 55.100 56.530 57.450 58.040 58.350 58.580 58.740 59.040 59.320 59.480 59.800 1441 31.651 100.00 68.380 13.479 14.680 8.5218 5.0445 0.74000 0.60000 1.1600 3.5000 6.8600 8.0200 7.6300 6.8600 6.0500 5.1600 4.5100 4.3200 4.4500 4.4300 3.4000 2.2700 1.9600 2.1200 2.1900 2.8000 5.9300 12.760 20.030 25.480 28.650 30.050 30.800 31.520 32.310 32.790 32.790 32.640 32.330 32.160 32.290 33.050 1442 26.547 100.00 78.064 19.547 14.017 8.1210 3.8025 0.45000 0.62000 1.1700 2.9200 5.1800 5.9100 5.6200 5.0800 4.4900 3.9100 3.5000 3.4800 3.7900 3.9100 3.0700 2.0900 1.8300 1.9800 2.0800 2.6700 5.6600 12.250 19.330 24.690 27.820 29.230 30.000 30.690 31.420 31.840 31.890 31.790 31.590 31.480 31.640 32.300 1443 0.0000 85.894 28.517 12.708 29.650 17.648 12.400 1.2300 0.81000 1.3500 6.1900 16.360 20.550 19.370 17.140 14.930 12.610 10.860 9.8000 9.1100 8.6400 7.3700 6.0700 5.7500 6.0400 6.2400 7.2700 12.250 23.520 37.040 49.110 57.100 60.960 62.960 64.110 64.810 65.150 65.380 65.570 65.790 66.070 66.140 66.230 1444 9.6834 100.00 56.752 23.655 17.430 9.6516 5.3921 0.72000 0.66000 1.0700 3.6200 7.7000 8.9900 8.4400 7.4600 6.4300 5.3700 4.5600 4.1700 4.0100 3.8200 2.9200 1.9900 1.7400 1.9400 2.0900 2.7700 6.2600 14.200 23.280 30.690 35.260 37.390 38.500 39.300 39.930 40.270 40.420 40.480 40.510 40.560 40.750 41.170 1445 3.3545 80.150 40.580 17.943 25.079 15.810 9.8420 1.1300 0.87000 1.3500 5.2000 12.650 15.550 14.820 13.320 11.830 10.250 9.0900 8.5900 8.5500 8.6100 7.7000 6.6100 6.3300 6.5800 6.7600 7.6400 11.840 21.160 31.960 41.100 46.880 49.580 51.020 51.920 52.600 52.930 53.120 53.230 53.360 53.550 53.670 54.040 1446 5.7602 77.254 32.604 24.214 21.435 14.085 10.175 1.0600 0.68000 1.2600 5.2300 12.830 15.960 15.300 13.830 12.280 10.700 9.5100 8.8800 8.6500 8.5400 7.6900 6.7200 6.4800 6.6800 6.8100 7.5700 11.090 18.690 27.190 34.000 38.150 40.030 41.060 41.790 42.360 42.650 42.810 42.870 42.960 43.080 43.240 43.580 1447 18.545 100.00 66.822 10.448 19.793 11.115 5.5333 0.73000 0.73000 1.2200 3.7500 7.5900 8.8900 8.4500 7.5100 6.6200 5.6200 4.8800 4.6600 4.7900 4.7700 3.6700 2.4700 2.1500 2.3700 2.5000 3.2800 7.2700 16.320 26.590 34.960 40.140 42.510 43.760 44.720 45.600 46.070 46.160 46.070 45.880 45.760 45.870 46.640 1448 13.175 100.00 46.518 16.381 19.262 10.633 7.1155 0.91000 0.69000 1.1700 4.3800 10.040 12.010 11.300 9.9600 8.5500 7.0700 5.9300 5.2600 4.8100 4.4000 3.3000 2.2100 1.9300 2.1400 2.2800 3.0500 6.8700 15.480 25.310 33.440 38.490 40.880 42.170 43.090 43.890 44.370 44.510 44.540 44.520 44.560 44.770 45.380 1449 0.0000 80.723 49.348 27.483 21.076 13.415 7.2034 0.84000 0.72000 1.1800 4.1700 9.2100 11.110 10.620 9.6300 8.6100 7.5500 6.8000 6.6000 6.8600 7.1700 6.5400 5.6600 5.4500 5.6800 5.8600 6.6600 10.330 18.340 27.400 34.860 39.460 41.600 42.770 43.500 43.970 44.220 44.430 44.600 44.830 45.080 45.220 45.480 1450 0.0000 100.00 50.776 16.489 24.039 12.938 6.6684 1.0500 0.70000 1.2500 4.2800 9.5200 11.380 10.570 9.2500 7.9500 6.5800 5.5300 4.9900 4.6800 4.4000 3.3300 2.2600 1.9900 2.2500 2.4400 3.3100 7.7300 18.130 30.910 42.410 50.150 53.980 55.990 57.170 57.910 58.270 58.560 58.820 59.100 59.380 59.590 59.810 1451 100.00 0.0000 100.00 27.677 4.4856 10.225 4.0377 0.39000 0.41000 1.0700 2.2800 3.1900 3.4700 3.5000 3.4900 3.6700 4.0100 4.9000 7.8800 14.700 22.820 25.120 22.020 17.240 12.100 7.7400 5.1300 3.8600 3.2100 2.6900 2.3500 2.2400 2.2000 2.2200 2.4100 2.8200 3.1000 3.0200 2.8200 2.5500 2.3900 2.5600 3.1300 1452 76.366 16.306 100.00 10.025 10.355 16.418 4.8486 0.80000 0.64000 1.2100 2.5300 3.7500 4.0600 4.1300 4.1700 4.3800 4.8200 5.8400 9.3800 17.650 27.920 31.280 28.240 23.590 18.590 14.200 11.590 10.510 10.210 9.8700 9.5600 9.4700 9.4400 9.4800 9.8600 10.550 10.970 10.850 10.540 10.060 9.7300 9.9100 10.800 1453 96.920 17.253 100.00 11.140 5.6396 11.760 4.5680 0.44000 0.54000 1.0900 2.4900 3.6400 3.9300 4.0000 4.0100 4.2000 4.5600 5.5400 8.8300 16.440 25.450 27.700 24.090 19.020 13.690 9.0700 6.3000 5.0500 4.4900 3.9700 3.5700 3.4300 3.3800 3.4000 3.7000 4.3000 4.6800 4.5600 4.2900 3.8600 3.5900 3.7600 4.5400 1454 84.286 15.881 100.00 18.967 7.2546 12.387 4.2460 0.60000 0.62000 1.1400 2.3800 3.4800 3.7700 3.7500 3.7700 3.9300 4.2600 5.1300 8.0800 14.820 22.800 25.130 22.480 18.490 14.180 10.380 8.1200 7.1300 6.7600 6.3900 6.0900 6.0100 5.9700 6.0100 6.3100 6.8500 7.1900 7.0800 6.8400 6.4900 6.2500 6.4300 7.1400 1455 80.164 0.0000 100.00 16.662 9.3196 16.462 4.8626 0.63000 0.74000 1.1100 2.5100 3.5800 3.8900 3.9700 4.0200 4.2700 4.7400 5.8900 9.6300 18.510 29.920 34.050 30.720 25.110 19.110 14.030 11.020 9.4900 8.6900 8.0400 7.6000 7.4300 7.3800 7.4200 7.7300 8.2800 8.6400 8.5400 8.2900 7.9100 7.6500 7.8100 8.5500 1456 89.560 0.0000 95.656 19.171 7.0391 13.917 5.1011 0.61000 0.67000 1.0900 2.5500 3.8600 4.3000 4.4400 4.5000 4.7500 5.1900 6.2400 9.7500 17.950 28.190 31.460 27.870 22.240 16.240 11.190 8.1600 6.6600 5.8800 5.2400 4.8200 4.6600 4.6200 4.6300 4.9100 5.4300 5.7600 5.6700 5.4500 5.0700 4.8300 5.0100 5.7200 1457 82.052 13.308 81.930 11.158 9.5933 15.702 7.7992 0.61000 0.58000 1.1800 3.2200 6.0300 7.4000 7.8900 8.1500 8.4200 8.8100 9.7900 13.100 20.470 28.960 31.020 27.580 22.740 17.580 13.070 10.360 9.1400 8.6500 8.1700 7.8000 7.6800 7.6500 7.7000 8.0700 8.7300 9.1300 9.0300 8.7400 8.2900 7.9700 8.1500 9.0400 1458 72.353 0.0000 100.00 24.040 10.010 16.155 4.4201 0.64000 0.56000 1.00000 2.3400 3.2800 3.6100 3.6300 3.6700 3.9100 4.3200 5.3600 8.7200 16.590 26.540 30.390 28.040 23.670 18.780 14.530 11.940 10.600 9.8900 9.2800 8.8800 8.7600 8.7000 8.7600 9.0700 9.6300 9.9800 9.9100 9.6400 9.3100 9.0400 9.2000 9.9000 1459 66.786 0.0000 77.463 26.219 11.897 17.594 7.8267 0.78000 0.61000 1.2000 3.1700 6.0700 7.5200 8.0100 8.2600 8.5200 8.9000 9.8300 12.860 19.660 27.800 30.630 28.310 24.290 19.820 15.890 13.490 12.250 11.580 11.040 10.660 10.540 10.510 10.560 10.860 11.380 11.690 11.640 11.400 11.080 10.860 11.010 11.730 1460 59.770 12.025 77.027 24.938 13.596 18.184 7.7918 0.85000 0.62000 1.1000 3.2600 6.4300 7.8800 8.2800 8.3900 8.5300 8.8100 9.5600 12.290 18.520 25.910 28.400 26.500 23.430 19.960 16.770 14.860 14.070 13.910 13.700 13.490 13.440 13.430 13.480 13.800 14.360 14.710 14.600 14.360 14.010 13.730 13.850 14.570 1461 68.363 25.525 80.528 16.401 11.238 15.059 7.0091 0.74000 0.57000 1.1000 3.1300 5.9200 7.1900 7.5400 7.6000 7.7100 7.8800 8.5500 11.050 16.590 22.850 24.460 22.320 19.350 16.130 13.170 11.420 10.960 11.220 11.330 11.310 11.350 11.390 11.480 11.860 12.510 12.930 12.830 12.550 12.130 11.840 12.000 12.830 1462 72.532 19.523 100.00 18.846 10.088 14.950 4.5233 0.77000 0.58000 1.1400 2.5800 3.6900 3.9900 4.0300 4.0300 4.2300 4.5800 5.4500 8.5200 15.460 23.740 26.400 24.140 20.650 16.810 13.300 11.190 10.390 10.250 10.030 9.8000 9.7200 9.7100 9.7500 10.080 10.700 11.090 10.980 10.670 10.270 9.9600 10.120 10.850 1463 77.717 30.142 100.00 24.303 7.3654 10.658 3.6566 0.54000 0.47000 1.0300 2.3000 3.2700 3.5300 3.5200 3.4500 3.5200 3.7000 4.3500 6.5600 11.490 17.070 18.630 16.940 14.490 11.800 9.3000 7.8100 7.3300 7.4000 7.3800 7.2700 7.2500 7.2600 7.3100 7.6200 8.1500 8.5100 8.4200 8.1800 7.8300 7.5900 7.7500 8.4500 1464 53.953 0.0000 67.996 19.703 18.408 24.960 11.487 0.95000 0.70000 1.2300 3.9700 8.8900 11.480 12.300 12.650 12.950 13.360 14.390 17.820 25.740 35.570 39.210 36.780 32.420 27.560 23.320 20.750 19.410 18.680 18.050 17.600 17.450 17.400 17.460 17.820 18.420 18.770 18.690 18.420 18.050 17.750 17.920 18.680 1465 62.184 0.0000 84.958 17.953 14.432 21.175 7.2095 0.82000 0.59000 1.1300 2.9300 5.4400 6.5400 6.8700 7.0500 7.3600 7.8000 8.8900 12.500 21.030 32.070 36.490 33.950 29.200 23.940 19.450 16.730 15.340 14.620 13.990 13.560 13.420 13.380 13.440 13.780 14.370 14.740 14.650 14.400 14.030 13.760 13.950 14.720 1466 39.245 2.0047 50.095 13.006 27.818 34.307 19.032 1.4200 0.96000 1.5000 5.8800 15.160 20.370 21.860 22.370 22.590 22.840 23.720 27.050 34.790 44.280 47.680 45.260 41.120 36.550 32.590 30.300 29.150 28.630 28.140 27.800 27.720 27.690 27.780 28.190 28.830 29.180 29.090 28.870 28.520 28.280 28.440 29.280 1467 80.717 43.402 100.00 15.494 6.9713 9.5778 3.7585 0.62000 0.58000 1.1000 2.4500 3.5600 3.8400 3.8200 3.7200 3.7500 3.8600 4.4100 6.4500 10.940 15.790 16.640 14.690 12.430 10.080 7.8400 6.5600 6.4400 7.0000 7.3000 7.3300 7.3900 7.4000 7.4600 7.8200 8.4500 8.8400 8.7200 8.4400 8.0100 7.6800 7.8500 8.6600 1468 59.937 35.788 100.00 27.242 10.371 12.322 3.5413 0.77000 0.68000 1.1300 2.3800 3.3000 3.5600 3.5100 3.4300 3.4500 3.5800 4.1000 6.0800 10.540 15.680 17.240 16.060 14.430 12.670 10.970 10.060 10.220 11.170 11.840 12.170 12.380 12.470 12.590 12.930 13.480 13.820 13.750 13.550 13.190 12.960 13.090 13.780 1469 43.823 23.092 68.156 21.324 18.243 20.743 9.3582 0.76000 0.66000 1.1000 3.7900 8.1500 10.200 10.670 10.680 10.700 10.760 11.290 13.570 18.730 24.740 26.690 25.310 23.270 21.040 18.940 17.860 18.050 19.230 20.190 20.730 21.060 21.200 21.370 21.770 22.370 22.710 22.650 22.450 22.140 21.920 22.040 22.820 1470 62.206 37.215 91.226 14.036 11.952 14.306 4.9049 0.72000 0.64000 1.1300 2.7000 4.4000 4.9700 5.0700 5.0100 5.0600 5.2000 5.7900 8.0800 13.290 19.220 20.810 19.080 16.860 14.500 12.280 11.070 11.300 12.540 13.490 13.970 14.240 14.360 14.500 14.940 15.640 16.050 15.960 15.670 15.230 14.920 15.100 15.980 1471 57.214 23.118 76.243 19.661 14.129 17.488 7.6398 0.80000 0.70000 1.2500 3.3700 6.6000 8.0500 8.3700 8.4000 8.4600 8.6000 9.2200 11.680 17.230 23.640 25.530 23.740 21.190 18.350 15.720 14.230 14.010 14.620 15.040 15.220 15.350 15.400 15.510 15.880 16.510 16.900 16.780 16.540 16.140 15.850 16.010 16.800 1472 65.779 29.363 100.00 19.581 10.923 14.239 4.1031 0.76000 0.56000 1.1700 2.4500 3.5200 3.8000 3.8200 3.7800 3.9100 4.1600 4.9000 7.4800 13.290 20.080 22.190 20.490 18.000 15.250 12.710 11.240 11.010 11.540 11.870 11.960 12.060 12.100 12.190 12.550 13.190 13.550 13.460 13.200 12.790 12.500 12.630 13.450 1473 64.987 26.973 79.223 27.091 10.271 13.034 6.0950 0.58000 0.54000 1.1100 2.9800 5.4400 6.5000 6.7300 6.7200 6.7500 6.8400 7.3400 9.2900 13.640 18.430 19.690 18.200 16.100 13.780 11.600 10.350 10.100 10.460 10.680 10.730 10.810 10.850 10.940 11.270 11.820 12.140 12.090 11.850 11.530 11.310 11.460 12.120 1474 70.993 43.205 100.00 20.166 8.3643 10.408 3.6367 0.71000 0.62000 1.2200 2.4100 3.5000 3.7800 3.7300 3.6200 3.6200 3.7300 4.2200 6.1300 10.370 15.030 16.020 14.460 12.600 10.670 8.7800 7.7500 7.8600 8.7300 9.3100 9.5400 9.6900 9.7500 9.8300 10.190 10.830 11.200 11.110 10.830 10.420 10.110 10.250 11.070 1475 44.446 11.156 74.339 24.243 18.085 21.997 8.2716 0.95000 0.71000 1.1200 3.3800 6.7700 8.3700 8.7700 8.9200 9.1000 9.4000 10.200 13.030 19.290 26.820 29.770 28.580 26.250 23.530 21.030 19.610 19.200 19.390 19.490 19.480 19.580 19.610 19.740 20.110 20.680 21.010 20.970 20.790 20.500 20.290 20.460 21.140 1476 30.792 0.0000 56.519 14.435 30.647 36.787 16.592 1.1900 0.81000 1.3700 5.2500 13.200 17.400 18.610 19.010 19.290 19.640 20.640 24.180 32.450 43.080 47.860 46.530 43.280 39.450 36.120 34.260 33.260 32.750 32.280 31.990 31.950 31.940 32.080 32.480 33.090 33.450 33.420 33.230 32.950 32.760 32.950 33.720 1477 49.001 13.149 69.465 15.363 19.135 23.809 10.473 1.1600 0.74000 1.2600 3.9800 8.5900 10.820 11.440 11.650 11.810 12.050 12.880 15.880 22.810 31.250 34.220 32.220 28.940 25.320 22.040 20.180 19.640 19.930 20.080 20.140 20.230 20.280 20.400 20.820 21.480 21.870 21.790 21.570 21.190 20.910 21.120 21.950 1478 40.369 21.814 61.672 12.013 23.002 25.769 13.048 1.1800 0.81000 1.3000 4.7500 11.250 14.510 15.240 15.300 15.260 15.240 15.770 18.290 24.090 30.800 32.760 30.940 28.430 25.760 23.280 22.040 22.380 23.980 25.320 26.110 26.580 26.780 26.970 27.430 28.110 28.510 28.420 28.180 27.820 27.550 27.750 28.570 1479 28.017 0.0000 42.195 19.965 30.104 35.080 20.257 1.2800 0.91000 1.5300 6.3700 16.710 22.330 23.840 24.260 24.400 24.560 25.240 27.860 33.820 40.960 43.770 42.500 39.970 36.970 34.290 32.750 31.920 31.530 31.130 30.910 30.900 30.920 31.070 31.450 32.000 32.320 32.300 32.170 31.950 31.850 32.010 32.740 1480 34.456 9.5875 60.291 18.874 24.161 28.181 13.271 1.1400 0.84000 1.3100 4.6800 11.040 14.300 15.120 15.310 15.440 15.600 16.320 19.100 25.470 33.190 36.150 34.780 32.280 29.450 26.860 25.470 25.180 25.630 25.970 26.120 26.290 26.370 26.490 26.890 27.470 27.790 27.750 27.570 27.290 27.090 27.290 28.010 1481 17.418 0.0000 49.696 21.346 34.701 39.366 17.610 1.5200 1.1100 1.4400 5.6700 14.610 19.290 20.370 20.540 20.660 20.850 21.660 24.710 31.870 41.020 45.540 45.420 43.850 41.730 39.800 38.770 38.240 37.930 37.650 37.450 37.450 37.440 37.560 37.890 38.340 38.560 38.550 38.440 38.280 38.190 38.280 38.880 1482 19.762 4.3514 46.334 10.091 39.986 44.799 22.171 1.6800 1.2200 1.6000 6.7400 18.170 24.530 26.100 26.330 26.400 26.470 27.220 30.440 38.190 48.090 52.580 51.650 49.270 46.440 43.940 42.680 42.490 43.050 43.410 43.600 43.830 43.950 44.140 44.590 45.220 45.550 45.520 45.380 45.160 45.030 45.200 46.030 1483 59.947 59.195 100.00 21.941 9.0527 9.0168 3.0599 0.43000 0.55000 1.0100 2.2600 3.2300 3.4900 3.4000 3.2300 3.1700 3.1700 3.4400 4.7500 7.5800 10.450 10.800 9.6600 8.7000 7.8500 6.9600 6.6500 7.5800 9.6100 11.260 12.210 12.720 12.950 13.130 13.540 14.170 14.550 14.490 14.260 13.900 13.630 13.800 14.540 1484 66.480 61.955 100.00 11.635 8.9496 9.2233 3.4186 0.56000 0.57000 1.0700 2.5000 3.5000 3.8600 3.7500 3.6300 3.5400 3.5700 3.8800 5.3900 8.6000 11.870 12.050 10.510 9.2100 8.0500 6.8700 6.3800 7.2800 9.3700 11.030 11.930 12.410 12.610 12.780 13.210 13.950 14.370 14.270 13.990 13.510 13.180 13.320 14.260 1485 36.073 37.064 71.110 15.625 20.306 20.523 8.4697 0.86000 0.76000 1.2700 3.7300 7.8400 9.6800 9.9200 9.7600 9.6400 9.5400 9.9200 11.910 16.470 21.620 23.030 21.760 20.360 18.970 17.610 17.140 18.460 21.480 24.170 25.880 26.830 27.210 27.480 27.970 28.630 29.020 28.950 28.750 28.390 28.130 28.280 29.030 1486 46.168 45.123 89.561 23.718 13.436 13.614 4.4410 0.54000 0.54000 1.1000 2.6300 4.3300 4.8900 4.9200 4.7800 4.7300 4.7400 5.1200 6.7800 10.450 14.530 15.610 14.620 13.550 12.520 11.460 11.090 12.090 14.370 16.350 17.560 18.240 18.540 18.790 19.210 19.810 20.180 20.140 19.960 19.660 19.430 19.590 20.310 1487 54.529 47.515 76.050 12.110 13.859 14.463 6.8339 0.82000 0.56000 1.1300 3.3200 6.5400 7.9300 8.0800 7.9300 7.7500 7.6000 7.8600 9.5500 13.420 17.570 18.200 16.530 14.870 13.250 11.660 10.950 11.900 14.280 16.270 17.450 18.070 18.340 18.560 19.020 19.770 20.220 20.130 19.840 19.390 19.060 19.180 20.120 1488 52.337 38.866 84.854 17.929 13.803 15.196 5.6552 0.73000 0.65000 1.1000 2.9400 5.2000 6.0900 6.2200 6.1400 6.1300 6.1900 6.6700 8.6900 13.160 18.180 19.520 18.190 16.540 14.820 13.150 12.360 12.930 14.630 16.010 16.800 17.250 17.480 17.670 18.110 18.790 19.180 19.140 18.910 18.510 18.260 18.430 19.320 1489 39.151 30.316 60.240 16.880 19.633 20.912 11.123 0.98000 0.82000 1.3200 4.4500 10.070 12.850 13.370 13.290 13.090 12.900 13.190 15.010 19.250 24.000 25.190 23.750 21.980 20.140 18.380 17.590 18.290 20.300 22.090 23.190 23.840 24.100 24.350 24.790 25.410 25.780 25.740 25.540 25.230 25.000 25.190 25.960 1490 56.353 51.836 96.468 10.070 12.241 12.639 3.9001 0.62000 0.51000 1.0800 2.5000 3.7400 4.1000 4.0900 3.9800 3.9900 4.0700 4.5400 6.4300 10.550 14.950 15.770 14.290 12.810 11.410 10.010 9.4400 10.470 12.930 15.030 16.250 16.930 17.230 17.480 17.970 18.740 19.210 19.130 18.850 18.420 18.090 18.280 19.210 1491 64.179 51.879 100.00 20.433 9.0930 9.9627 3.2867 0.56000 0.53000 1.0500 2.3000 3.3200 3.5200 3.4600 3.3500 3.3200 3.3800 3.7800 5.4000 8.9300 12.650 13.330 12.040 10.720 9.4300 8.1200 7.5100 8.1100 9.6500 10.850 11.490 11.840 12.010 12.150 12.570 13.210 13.610 13.530 13.270 12.890 12.610 12.770 13.580 1492 25.459 25.641 54.416 24.891 23.174 23.763 12.056 1.1900 0.89000 1.4600 4.7700 11.150 14.210 14.690 14.510 14.260 14.030 14.230 15.870 19.760 24.270 25.780 24.950 23.880 22.770 21.680 21.340 22.310 24.550 26.540 27.830 28.560 28.880 29.130 29.510 30.020 30.330 30.310 30.200 30.010 29.930 30.070 30.630 1493 25.142 18.811 54.582 16.545 28.221 29.904 14.314 1.2800 0.82000 1.3400 5.1400 12.520 16.180 16.920 16.940 16.870 16.850 17.330 19.650 24.980 31.240 33.550 32.610 31.110 29.460 27.890 27.290 28.090 30.120 31.910 33.070 33.780 34.100 34.390 34.860 35.470 35.820 35.820 35.680 35.480 35.350 35.540 36.270 1494 16.288 9.2976 44.374 26.381 30.110 32.277 17.383 1.1300 0.98000 1.3700 5.7300 15.140 20.140 21.080 21.050 20.860 20.720 21.040 22.990 27.610 33.070 35.330 34.850 33.810 32.590 31.400 30.950 31.290 32.340 33.180 33.710 34.040 34.170 34.340 34.640 35.060 35.230 35.230 35.160 35.050 35.000 35.090 35.580 1495 13.021 0.0000 31.098 20.009 40.405 44.632 27.023 1.6200 1.0400 1.6100 7.5900 22.320 31.100 33.090 33.210 32.990 32.800 33.120 35.320 40.600 47.020 49.910 49.510 48.130 46.340 44.670 43.790 43.260 43.000 42.720 42.580 42.560 42.530 42.670 42.960 43.360 43.560 43.530 43.430 43.300 43.250 43.330 43.840 1496 0.0000 7.5846 24.944 14.169 54.118 54.836 32.168 2.1600 1.2300 1.7500 8.8900 27.240 38.510 40.580 40.140 39.440 38.730 38.620 40.340 44.930 50.640 53.360 53.540 53.570 53.630 53.690 54.360 55.850 58.410 60.600 62.080 62.930 63.230 63.550 63.860 64.070 64.110 64.160 64.220 64.320 64.550 64.560 64.780 1497 5.3205 0.0000 32.888 16.339 47.742 51.480 27.346 1.9500 1.1900 1.6900 7.8700 22.620 31.310 33.180 33.260 33.130 33.070 33.560 36.120 42.230 49.950 54.010 54.520 54.060 53.180 52.370 52.170 52.020 52.050 51.990 52.030 52.160 52.230 52.480 52.830 53.240 53.400 53.430 53.480 53.510 53.600 53.770 54.210 1498 11.498 5.2979 26.375 11.170 46.344 49.250 31.079 2.0900 1.3400 1.8100 8.6800 25.710 36.240 38.610 38.630 38.210 37.740 37.840 39.800 44.790 50.780 53.170 52.400 50.990 49.390 47.840 47.270 47.690 49.000 50.060 50.750 51.230 51.430 51.690 52.140 52.700 52.980 52.990 52.930 52.850 52.840 53.010 53.710 1499 51.404 63.226 100.00 20.707 10.345 9.4225 3.0485 0.49000 0.62000 1.1500 2.3600 3.3600 3.5700 3.4800 3.3000 3.1800 3.1400 3.3700 4.5600 7.1400 9.7800 10.030 8.9300 8.1000 7.4700 6.8000 6.6900 8.0400 10.850 13.330 14.860 15.680 16.030 16.270 16.710 17.340 17.730 17.670 17.450 17.120 16.850 17.030 17.780 1500 57.602 63.465 100.00 10.191 10.455 9.8617 3.2867 0.52000 0.54000 1.0800 2.4800 3.4800 3.7600 3.6800 3.4800 3.4100 3.4000 3.6700 5.0800 8.1300 11.240 11.440 10.010 8.8800 7.9600 7.0100 6.7300 8.0400 10.900 13.380 14.840 15.620 15.960 16.190 16.690 17.450 17.920 17.840 17.550 17.100 16.780 16.950 17.900 1501 29.540 40.440 71.104 25.152 18.722 18.101 7.0823 0.81000 0.65000 1.1800 3.4400 6.8800 8.2500 8.3800 8.2100 8.0500 7.9200 8.2100 9.7900 13.360 17.350 18.530 17.780 16.990 16.290 15.550 15.480 16.930 19.930 22.690 24.510 25.530 26.000 26.320 26.770 27.320 27.650 27.670 27.540 27.380 27.240 27.400 28.020 1502 32.818 44.265 70.505 10.548 21.125 19.851 8.1002 0.87000 0.68000 1.3000 3.7900 7.8100 9.5600 9.7200 9.4900 9.2500 9.0500 9.2800 11.010 15.020 19.530 20.570 19.300 18.090 17.020 15.950 15.770 17.690 21.880 25.880 28.600 30.130 30.780 31.210 31.790 32.540 32.960 32.930 32.730 32.410 32.190 32.400 33.220 1503 34.801 54.104 78.632 17.933 17.101 15.308 5.7788 0.81000 0.61000 1.1400 3.2200 5.9300 6.9700 6.9700 6.7300 6.5200 6.3200 6.4800 7.8200 10.880 14.180 14.780 13.770 12.980 12.400 11.770 11.840 13.770 17.790 21.530 24.070 25.490 26.120 26.510 27.050 27.730 28.110 28.120 27.940 27.690 27.510 27.680 28.440 1504 44.039 50.326 76.787 17.920 14.856 14.225 5.9912 0.71000 0.59000 1.1500 3.1900 6.0000 7.0700 7.1600 6.9700 6.7800 6.6200 6.8200 8.2400 11.430 14.820 15.410 14.250 13.210 12.290 11.340 11.110 12.500 15.480 18.170 19.880 20.820 21.250 21.540 22.020 22.700 23.080 23.050 22.850 22.540 22.300 22.500 23.290 1505 0.0000 27.832 43.140 25.320 33.456 30.710 15.421 1.4600 1.0400 1.4300 5.8100 14.920 19.320 19.620 19.080 18.480 17.900 17.790 18.950 22.040 25.710 27.080 26.860 26.810 26.990 27.130 27.880 30.400 35.200 39.980 43.480 45.470 46.340 46.880 47.300 47.560 47.720 47.820 47.920 48.110 48.290 48.370 48.650 1506 6.5342 13.818 37.447 21.804 37.071 37.497 20.266 1.6900 1.1100 1.5500 6.6300 18.120 24.230 25.190 24.880 24.470 24.060 24.160 25.890 30.150 35.260 37.430 37.230 36.800 36.340 35.870 36.030 37.330 39.840 42.110 43.610 44.470 44.830 45.120 45.470 45.840 46.010 46.050 46.050 46.040 46.110 46.180 46.610 1507 14.944 28.196 56.724 21.644 28.098 27.214 11.799 1.2400 0.74000 1.2700 4.6900 10.980 13.960 14.330 14.050 13.830 13.590 13.850 15.650 19.860 24.840 26.690 26.200 25.570 25.000 24.430 24.570 26.350 29.970 33.420 35.850 37.240 37.820 38.240 38.700 39.190 39.460 39.500 39.450 39.390 39.410 39.550 40.050 1508 17.061 33.145 46.936 16.943 29.160 27.413 14.738 1.2300 0.85000 1.3800 5.6500 14.090 18.130 18.620 18.180 17.690 17.160 17.090 18.390 21.690 25.450 26.450 25.600 24.830 24.240 23.600 23.760 25.870 30.220 34.420 37.380 39.110 39.860 40.370 40.930 41.560 41.920 41.950 41.900 41.770 41.720 41.920 42.540 1509 10.478 21.171 33.533 23.741 31.648 30.975 19.186 1.4500 0.99000 1.4700 6.5600 17.710 23.600 24.470 24.020 23.420 22.750 22.540 23.550 26.280 29.460 30.470 29.900 29.340 28.870 28.360 28.520 30.030 33.060 35.930 37.920 39.050 39.550 39.940 40.380 40.830 41.050 41.090 41.090 41.100 41.130 41.300 41.770 1510 13.260 30.777 56.184 13.377 33.124 31.128 13.228 1.2800 0.93000 1.4600 5.2900 12.460 15.730 16.090 15.810 15.500 15.240 15.480 17.420 22.040 27.520 29.500 28.870 28.210 27.690 27.140 27.460 29.950 34.950 39.890 43.460 45.510 46.430 47.050 47.690 48.330 48.680 48.750 48.730 48.670 48.650 48.850 49.530 1511 20.226 26.503 49.501 11.867 31.442 31.028 15.544 1.3300 0.92000 1.4500 5.6900 14.180 18.400 19.020 18.800 18.500 18.190 18.410 20.340 24.950 30.290 32.020 31.030 29.860 28.730 27.610 27.440 29.200 33.000 36.610 39.110 40.560 41.220 41.680 42.260 42.940 43.360 43.370 43.270 43.060 42.980 43.150 43.960 1512 0.0000 17.428 31.793 16.541 44.804 42.936 23.534 1.9200 1.0900 1.5700 7.4900 21.270 28.790 29.840 29.290 28.610 27.910 27.750 29.170 32.960 37.580 39.540 39.500 39.480 39.670 39.830 40.650 43.070 47.550 51.950 55.170 56.990 57.820 58.370 58.830 59.160 59.290 59.410 59.540 59.740 60.000 60.140 60.370 1513 53.258 70.759 100.00 10.525 11.155 9.4526 3.0885 0.57000 0.53000 1.0300 2.3800 3.4800 3.6800 3.5800 3.3900 3.2800 3.2000 3.3900 4.5600 7.0100 9.3900 9.3200 8.0500 7.2300 6.7000 6.0900 6.1100 7.8500 11.470 14.750 16.830 17.960 18.450 18.780 19.330 20.110 20.610 20.530 20.270 19.850 19.530 19.720 20.610 1514 36.264 71.305 100.00 27.180 12.271 9.7028 2.7629 0.52000 0.52000 0.98000 2.2000 3.1700 3.3700 3.3000 3.0900 2.9500 2.8600 3.0000 3.8900 5.8500 7.7700 7.8300 6.9800 6.5700 6.4400 6.2500 6.5500 8.5700 12.640 16.490 19.100 20.520 21.140 21.480 21.950 22.510 22.820 22.810 22.660 22.450 22.290 22.400 23.020 1515 48.118 78.694 100.00 18.407 10.485 8.0423 2.7656 0.42000 0.46000 1.0400 2.3800 3.3400 3.5500 3.4300 3.1800 3.0200 2.8700 2.9300 3.6900 5.3500 6.8800 6.6000 5.5600 5.0500 4.8700 4.6000 4.8300 6.7200 10.580 14.200 16.580 17.860 18.440 18.800 19.320 20.020 20.450 20.410 20.210 19.860 19.620 19.790 20.550 1516 36.533 74.218 100.00 16.743 14.561 11.192 3.1446 0.86000 0.62000 1.1700 2.5300 3.5600 3.8400 3.7300 3.5100 3.3600 3.2900 3.4400 4.4600 6.7000 8.8400 8.7800 7.6900 7.1600 7.0000 6.7400 7.0900 9.5800 14.740 19.720 23.160 25.040 25.810 26.270 26.820 27.520 27.900 27.860 27.640 27.310 27.040 27.190 27.960 1517 27.518 62.567 64.895 12.494 20.927 16.714 8.2927 0.87000 0.64000 1.2400 3.9900 8.9400 11.020 10.960 10.410 9.8000 9.1600 8.8800 9.6800 11.760 13.900 13.750 12.500 11.810 11.520 11.170 11.550 14.480 20.580 26.710 31.100 33.600 34.640 35.270 35.900 36.640 37.040 37.040 36.870 36.600 36.380 36.520 37.300 1518 14.647 51.647 52.770 23.898 22.455 18.718 9.6497 1.0800 0.83000 1.3300 4.4900 10.240 12.730 12.710 12.130 11.500 10.830 10.540 11.230 13.140 15.230 15.470 14.670 14.290 14.200 14.060 14.550 17.160 22.500 27.910 31.880 34.130 35.140 35.720 36.260 36.790 37.050 37.110 37.110 37.050 37.070 37.200 37.720 1519 18.464 55.610 68.890 18.638 22.171 18.245 6.9956 0.93000 0.62000 1.2100 3.5800 7.3600 8.8600 8.8100 8.4400 8.0700 7.7000 7.7000 8.8100 11.510 14.430 14.960 14.100 13.610 13.440 13.240 13.730 16.570 22.410 28.340 32.670 35.180 36.280 36.930 37.560 38.180 38.520 38.580 38.530 38.400 38.330 38.540 39.090 1520 37.379 64.208 100.00 20.423 14.696 12.363 3.2426 0.68000 0.62000 1.1400 2.3600 3.4200 3.7400 3.6200 3.4600 3.4000 3.3600 3.6400 4.9400 7.7900 10.700 11.080 10.050 9.4000 9.0600 8.6400 8.8500 11.000 15.380 19.470 22.200 23.680 24.290 24.670 25.160 25.800 26.170 26.120 25.930 25.630 25.390 25.530 26.240 1521 37.191 64.105 86.810 10.599 17.214 14.252 4.9274 0.86000 0.63000 1.1800 2.9600 5.2200 5.9800 5.9400 5.6800 5.4900 5.3000 5.4700 6.7700 9.6800 12.630 12.760 11.410 10.580 10.140 9.5800 9.7800 12.350 17.600 22.600 25.950 27.790 28.560 29.000 29.610 30.410 30.860 30.780 30.520 30.120 29.810 29.940 30.810 1522 39.369 63.802 80.364 22.265 13.851 11.683 4.8730 0.67000 0.57000 1.1200 2.9700 5.3300 6.1900 6.1300 5.8300 5.5400 5.2800 5.2800 6.2100 8.3900 10.610 10.670 9.6100 8.9600 8.6000 8.1700 8.3200 10.260 14.210 17.850 20.280 21.570 22.150 22.490 22.960 23.590 23.950 23.910 23.730 23.460 23.240 23.350 24.070 1523 21.899 46.388 56.947 17.658 23.517 20.722 10.389 1.1800 0.71000 1.2900 4.4800 10.450 13.100 13.260 12.810 12.340 11.830 11.720 12.820 15.500 18.370 18.810 17.850 17.180 16.800 16.340 16.630 19.050 23.990 28.820 32.260 34.220 35.080 35.620 36.210 36.880 37.260 37.310 37.210 37.050 36.930 37.160 37.860 1524 21.615 46.653 64.213 27.741 19.241 17.106 7.6640 0.89000 0.70000 1.1900 3.7500 7.8700 9.6100 9.6200 9.3100 8.9400 8.6100 8.6100 9.6600 12.190 14.940 15.540 14.840 14.350 14.070 13.730 14.000 15.980 19.970 23.810 26.470 27.940 28.610 29.030 29.470 29.970 30.250 30.300 30.230 30.130 30.100 30.220 30.750 1525 0.0000 26.934 30.341 17.828 40.585 36.735 21.665 1.7600 1.1200 1.6600 7.3400 20.660 27.720 28.310 27.420 26.400 25.320 24.790 25.580 28.140 31.230 32.150 31.660 31.530 31.720 31.880 32.740 35.760 41.700 47.820 52.430 55.060 56.220 56.880 57.390 57.730 57.860 57.960 58.080 58.230 58.450 58.540 58.720 1526 0.0000 38.507 43.848 20.360 33.865 28.930 14.428 1.4400 0.99000 1.4600 5.7300 14.550 18.630 18.780 18.050 17.290 16.520 16.220 17.130 19.710 22.710 23.550 23.060 22.940 23.180 23.370 24.270 27.590 34.250 41.330 46.830 50.080 51.550 52.410 53.000 53.400 53.610 53.780 53.920 54.190 54.420 54.590 54.820 1527 0.0000 48.641 62.860 25.650 27.078 21.947 8.5299 1.0400 0.73000 1.2300 4.0700 8.9000 10.850 10.840 10.370 9.9900 9.5800 9.5300 10.570 13.090 15.860 16.540 16.030 15.920 16.170 16.390 17.270 20.600 27.260 34.330 39.780 43.010 44.520 45.380 45.980 46.400 46.610 46.800 46.970 47.180 47.410 47.570 47.830 1528 15.844 42.452 46.216 9.8496 31.761 27.772 15.253 1.4000 0.82000 1.5500 6.3800 15.440 19.560 19.810 19.130 18.320 17.480 17.150 18.150 20.980 24.180 24.730 23.660 22.930 22.500 22.030 22.460 25.480 31.800 38.310 43.200 46.090 47.360 48.140 48.880 49.640 50.070 50.160 50.110 50.010 49.950 50.180 50.880 1529 32.563 82.225 100.00 23.275 12.810 8.9320 2.6363 0.77000 0.53000 1.1000 2.3000 3.2700 3.4400 3.3300 3.1100 2.9000 2.7300 2.7600 3.3800 4.7600 6.0100 5.7100 4.8100 4.4800 4.5100 4.4700 4.9200 7.3900 12.500 17.640 21.290 23.320 24.220 24.730 25.280 25.920 26.300 26.300 26.190 25.960 25.800 25.980 26.620 1530 37.611 87.115 100.00 12.640 13.623 9.1959 2.7653 0.58000 0.52000 1.0400 2.4200 3.4400 3.6500 3.5300 3.2500 3.0600 2.8800 2.9000 3.5500 4.9600 6.1600 5.6600 4.5700 4.1500 4.1600 4.0800 4.5600 7.2800 13.000 18.840 23.020 25.410 26.470 27.070 27.750 28.580 29.060 29.070 28.860 28.510 28.280 28.440 29.350 1531 32.693 90.888 86.501 19.981 13.112 8.2827 3.3344 0.59000 0.56000 1.0100 2.5800 4.3100 4.7900 4.6100 4.2500 3.9100 3.5000 3.2900 3.5700 4.3200 4.8700 4.1900 3.2300 2.9300 3.0400 3.0700 3.6100 6.3300 12.130 18.120 22.460 24.950 26.060 26.710 27.330 28.030 28.470 28.500 28.370 28.130 27.980 28.150 28.900 1532 0.0000 61.252 64.460 22.901 26.183 19.330 7.3361 1.1200 0.73000 1.2000 3.8000 8.1400 9.8000 9.6400 9.1100 8.5900 8.0500 7.8700 8.6000 10.500 12.490 12.650 11.920 11.730 12.020 12.240 13.180 17.030 25.000 33.800 40.880 45.200 47.240 48.350 49.080 49.600 49.860 50.050 50.240 50.470 50.760 50.920 51.180 1533 16.217 84.282 82.663 27.269 15.575 10.196 3.6647 0.67000 0.58000 1.1400 2.6800 4.6200 5.2100 5.0200 4.6000 4.2400 3.8600 3.6700 4.0200 4.9500 5.7700 5.3400 4.5300 4.3000 4.4700 4.5800 5.2200 8.1900 14.490 21.160 26.230 29.180 30.530 31.290 31.890 32.470 32.820 32.890 32.890 32.870 32.870 33.010 33.550 1534 20.045 68.210 75.705 16.032 20.614 15.335 5.5308 0.93000 0.65000 1.1400 3.2100 6.2300 7.3100 7.1500 6.7500 6.3600 5.9600 5.8600 6.7000 8.7400 10.810 10.810 9.7900 9.3800 9.3700 9.2900 9.9100 13.200 20.050 27.160 32.510 35.640 37.040 37.830 38.550 39.260 39.670 39.730 39.650 39.500 39.420 39.610 40.260 1535 26.203 70.975 72.452 22.960 16.101 12.059 5.3704 0.87000 0.72000 1.2100 3.2500 6.2700 7.3000 7.1900 6.7200 6.2700 5.7900 5.5700 6.1400 7.5900 9.0300 8.8000 7.8500 7.4400 7.3800 7.2700 7.7200 10.350 15.730 21.170 25.070 27.250 28.220 28.760 29.300 29.940 30.280 30.290 30.180 29.990 29.890 30.020 30.650 1536 30.383 76.682 72.218 11.709 17.577 12.531 5.7086 0.72000 0.62000 1.1900 3.4300 6.7300 7.9500 7.7600 7.2400 6.6900 6.1200 5.8200 6.3200 7.7300 9.0600 8.5700 7.4000 6.9000 6.8300 6.6800 7.1700 10.210 16.640 23.280 28.160 30.960 32.200 32.880 33.580 34.390 34.860 34.840 34.680 34.380 34.170 34.340 35.170 1537 20.393 82.440 100.00 17.921 17.376 11.528 2.7213 0.62000 0.54000 1.0600 2.3300 3.2900 3.5000 3.3800 3.1400 2.9700 2.8400 2.8900 3.6100 5.1400 6.5500 6.2900 5.3700 5.0700 5.2100 5.2900 5.9700 9.2700 16.270 23.790 29.580 33.020 34.600 35.470 36.210 36.940 37.350 37.440 37.380 37.230 37.180 37.390 38.040 1538 0.0000 68.351 56.651 26.288 23.305 16.337 7.5574 0.91000 0.68000 1.2100 4.0000 8.8600 10.760 10.460 9.7100 8.9800 8.2200 7.7600 8.0200 9.0500 10.110 9.8100 8.9800 8.7700 9.0300 9.2200 10.100 13.850 21.620 30.170 37.050 41.200 43.170 44.230 44.930 45.430 45.670 45.870 46.060 46.290 46.530 46.680 47.000 1539 0.0000 57.555 51.440 12.789 33.497 24.639 11.060 1.3000 0.87000 1.3800 5.0900 12.210 15.240 14.980 14.070 13.150 12.200 11.700 12.250 14.100 16.170 16.230 15.300 15.060 15.380 15.610 16.700 21.270 31.010 42.180 51.670 57.690 60.540 62.070 63.040 63.660 64.000 64.240 64.440 64.710 65.050 65.210 65.470 1540 7.1394 48.388 43.138 11.519 34.113 27.635 15.182 1.6100 0.93000 1.5400 6.0700 15.840 20.390 20.370 19.390 18.290 17.150 16.510 17.100 19.200 21.580 21.750 20.690 20.260 20.290 20.230 21.040 24.960 33.130 41.950 48.910 53.090 54.960 55.980 56.760 57.420 57.760 57.860 57.870 57.890 57.950 58.070 58.600 1541 0.0000 52.696 44.540 21.310 30.193 23.576 12.554 1.4500 0.83000 1.4200 5.4600 13.630 17.240 17.050 16.070 15.060 14.050 13.440 13.830 15.360 17.110 17.160 16.360 16.170 16.400 16.590 17.500 21.250 29.040 37.560 44.390 48.490 50.350 51.370 52.030 52.460 52.650 52.800 52.960 53.180 53.390 53.520 53.700 1542 6.7714 51.772 59.912 15.580 29.512 23.643 9.8622 1.1300 0.76000 1.2000 4.5200 10.360 12.830 12.750 12.170 11.600 11.000 10.850 11.880 14.520 17.460 18.030 17.240 16.930 17.030 17.050 17.880 21.530 29.090 37.240 43.630 47.490 49.240 50.230 50.980 51.600 51.950 52.080 52.130 52.190 52.290 52.450 52.970 1543 13.317 100.00 100.00 26.492 15.011 8.5430 2.2693 0.52000 0.54000 0.95000 2.2300 3.1100 3.2700 3.1300 2.8400 2.6000 2.3500 2.2400 2.4700 3.0500 3.4100 2.7700 1.9100 1.6900 1.8800 1.9900 2.6300 5.8100 12.950 20.910 27.200 30.960 32.690 33.630 34.310 34.910 35.220 35.340 35.380 35.360 35.390 35.540 35.950 1544 30.479 99.331 100.00 10.794 14.802 8.5954 2.5358 0.61000 0.48000 1.0600 2.3200 3.4300 3.6100 3.4300 3.1400 2.9000 2.6600 2.5500 2.8800 3.6400 4.0900 3.2400 2.1700 1.8600 2.0200 2.1100 2.7300 5.9700 13.060 20.730 26.600 30.060 31.640 32.500 33.320 34.210 34.730 34.760 34.610 34.300 34.100 34.290 35.150 1545 0.0000 69.091 51.262 17.644 27.925 19.032 9.0544 1.1100 0.77000 1.2100 4.5400 10.700 13.170 12.740 11.780 10.810 9.7600 9.1200 9.2600 10.260 11.300 10.880 9.9100 9.6700 9.9500 10.150 11.120 15.410 24.780 35.620 44.830 50.680 53.480 54.940 55.860 56.450 56.750 56.960 57.180 57.410 57.690 57.830 58.120 1546 0.0000 100.00 80.376 22.096 20.890 11.507 3.6395 0.79000 0.68000 1.1400 2.9100 5.0800 5.6700 5.3300 4.8000 4.2800 3.7300 3.3400 3.3800 3.7500 3.9500 3.1600 2.1900 1.9600 2.2100 2.3800 3.2100 7.2800 16.680 27.870 37.610 43.950 47.010 48.610 49.600 50.210 50.540 50.790 51.010 51.240 51.520 51.660 51.920 1547 13.251 100.00 80.785 11.659 20.267 11.270 3.9497 0.71000 0.54000 1.0900 3.0300 5.3800 6.1100 5.7900 5.2300 4.6600 4.0500 3.6500 3.7000 4.1100 4.3100 3.3800 2.2800 1.9900 2.2200 2.3700 3.1800 7.2600 16.530 27.290 36.350 42.110 44.880 46.330 47.400 48.330 48.850 48.990 49.040 48.970 49.000 49.180 49.880 1548 0.0000 81.475 53.235 12.938 28.910 17.775 8.4272 1.1600 0.83000 1.3200 4.6900 10.750 13.000 12.410 11.210 10.050 8.8200 7.9500 7.8000 8.2600 8.7500 7.9100 6.7400 6.4400 6.7400 6.9600 7.9800 12.840 23.790 36.930 48.610 56.370 60.140 62.100 63.270 63.980 64.360 64.620 64.830 65.110 65.390 65.530 65.710 1549 12.093 88.410 84.865 18.497 19.470 12.038 3.7321 0.93000 0.74000 1.0900 2.8300 4.7900 5.3500 5.1100 4.7000 4.3000 3.8900 3.6900 4.0700 5.0600 5.9200 5.3800 4.4100 4.1400 4.3400 4.4800 5.2500 8.9700 17.180 26.350 33.770 38.310 40.400 41.550 42.370 43.110 43.520 43.640 43.650 43.640 43.660 43.820 44.350 1550 7.9994 90.527 64.967 19.779 20.714 12.290 5.6752 0.73000 0.75000 1.2600 3.6900 7.5600 8.8400 8.4000 7.5700 6.7600 5.8600 5.2400 5.1600 5.4900 5.7200 4.8800 3.8100 3.5400 3.7700 3.9200 4.7400 8.7100 17.570 27.610 35.840 40.940 43.310 44.540 45.370 46.030 46.390 46.520 46.560 46.560 46.670 46.730 47.190 1551 0.0000 71.464 67.697 16.311 27.253 18.199 6.3432 0.99000 0.77000 1.1800 3.7400 7.5500 8.8500 8.6200 7.9700 7.4100 6.7900 6.5000 7.0400 8.5400 10.020 9.8000 8.8700 8.6500 8.9400 9.1600 10.150 14.560 24.150 35.340 44.960 51.130 54.120 55.720 56.720 57.400 57.750 58.020 58.270 58.550 58.870 59.050 59.350 1552 56.447 0.0000 88.375 25.433 14.100 19.730 5.8711 0.84000 0.62000 1.0700 2.6500 4.4600 5.2600 5.4900 5.5900 5.8000 6.2000 7.1700 10.390 17.940 27.650 31.760 30.080 26.470 22.300 18.670 16.490 15.350 14.760 14.250 13.900 13.800 13.760 13.830 14.140 14.660 14.980 14.910 14.710 14.400 14.180 14.360 15.030 1553 61.918 17.858 100.00 15.448 13.166 17.868 4.4273 0.79000 0.59000 1.1100 2.4000 3.4800 3.7900 3.8200 3.8100 3.9800 4.3300 5.2700 8.4300 15.850 25.160 28.670 26.750 23.410 19.700 16.330 14.370 13.780 13.950 14.010 13.950 13.980 14.020 14.120 14.510 15.180 15.600 15.490 15.230 14.790 14.500 14.690 15.530 1554 62.604 6.2158 100.00 10.750 15.077 21.956 5.0815 0.75000 0.63000 1.1600 2.4400 3.6100 3.9500 4.0400 4.0800 4.3700 4.9000 6.1000 10.100 19.680 32.390 37.690 35.080 30.180 24.820 20.210 17.480 16.270 15.800 15.350 15.000 14.900 14.880 14.950 15.330 16.020 16.440 16.320 16.040 15.590 15.280 15.450 16.350 1555 49.520 2.5048 76.261 17.059 19.454 25.549 9.1258 0.80000 0.70000 1.1400 3.5400 7.0500 8.7100 9.2300 9.4900 9.8200 10.270 11.380 14.970 23.250 33.790 38.210 36.340 32.520 28.180 24.380 22.120 21.020 20.540 20.080 19.760 19.680 19.680 19.780 20.170 20.800 21.170 21.110 20.890 20.530 20.260 20.470 21.270 1556 45.282 0.0000 83.954 14.672 22.160 29.076 8.2725 1.0200 0.79000 1.1700 3.2000 6.1100 7.4100 7.8200 8.0300 8.4200 8.9800 10.230 14.310 23.930 36.810 42.900 41.290 37.180 32.400 28.270 25.850 24.570 23.900 23.310 22.890 22.800 22.790 22.900 23.310 23.990 24.390 24.320 24.100 23.710 23.450 23.620 24.500 1557 50.498 0.0000 100.00 22.841 16.728 22.577 4.6714 0.73000 0.71000 1.1300 2.3400 3.3400 3.6800 3.7100 3.7800 4.0400 4.5200 5.6300 9.2200 17.680 28.930 34.250 33.040 29.640 25.590 22.030 19.900 18.800 18.230 17.710 17.360 17.260 17.250 17.340 17.700 18.260 18.610 18.550 18.350 18.020 17.800 17.960 18.720 1558 55.172 31.428 100.00 19.128 13.176 15.670 3.9108 0.46000 0.54000 1.0500 2.3300 3.3300 3.6400 3.6400 3.5800 3.6800 3.9100 4.6200 7.1100 12.740 19.410 21.750 20.450 18.420 16.190 14.110 13.020 13.190 14.280 15.110 15.560 15.850 15.970 16.120 16.520 17.130 17.540 17.450 17.230 16.880 16.620 16.800 17.560 1559 52.021 15.232 99.423 24.470 14.496 18.280 4.0929 0.77000 0.58000 1.0500 2.2800 3.2200 3.5100 3.5200 3.5100 3.7200 4.0500 4.9100 7.8100 14.440 22.650 26.070 24.980 22.640 19.940 17.410 15.980 15.610 15.900 16.030 16.070 16.140 16.190 16.300 16.680 17.240 17.620 17.570 17.350 17.030 16.780 16.950 17.730 1560 43.957 14.242 100.00 18.491 18.824 23.029 4.6339 0.87000 0.74000 1.1800 2.4200 3.5600 3.8400 3.8900 3.9000 4.1400 4.5200 5.5200 8.8400 16.690 26.910 31.480 30.430 27.870 24.850 22.120 20.620 20.370 20.920 21.280 21.430 21.580 21.640 21.750 22.140 22.760 23.110 23.040 22.800 22.460 22.200 22.350 23.140 1561 48.315 16.015 83.904 12.563 19.194 23.610 7.3651 0.77000 0.75000 1.1500 3.1600 5.9100 7.0900 7.3900 7.4600 7.6700 8.0000 8.9300 12.220 19.900 29.590 33.430 31.690 28.580 25.090 21.960 20.230 19.940 20.600 21.080 21.310 21.510 21.600 21.740 22.160 22.850 23.250 23.170 22.920 22.530 22.260 22.430 23.330 1562 39.602 0.0000 78.237 23.278 21.215 26.663 8.3686 0.95000 0.76000 1.1900 3.3400 6.5500 8.0100 8.3800 8.5700 8.8800 9.3200 10.350 13.740 21.660 31.920 36.730 35.770 32.880 29.390 26.310 24.490 23.560 23.060 22.610 22.320 22.270 22.270 22.370 22.730 23.280 23.620 23.570 23.410 23.110 22.970 23.140 23.870 1563 29.805 0.0000 77.418 18.270 28.242 34.089 9.5841 1.2600 0.73000 1.2600 3.5600 7.3900 9.1400 9.6000 9.7800 10.120 10.600 11.750 15.590 24.760 37.200 43.700 43.300 40.650 37.290 34.370 32.740 31.880 31.440 30.990 30.710 30.660 30.640 30.740 31.110 31.640 31.970 31.930 31.760 31.500 31.340 31.470 32.190 1564 32.385 8.4214 73.700 19.986 24.390 28.568 9.1587 1.1300 0.82000 1.2400 3.6300 7.4700 9.1800 9.6000 9.7200 9.9200 10.260 11.180 14.410 21.930 31.590 36.020 35.270 33.040 30.350 27.960 26.700 26.430 26.850 27.120 27.260 27.410 27.480 27.640 27.990 28.540 28.840 28.810 28.650 28.410 28.230 28.390 29.100 1565 17.670 4.8979 66.444 12.838 38.035 42.501 13.369 1.6200 1.0500 1.4600 4.6800 10.830 13.780 14.420 14.600 14.840 15.210 16.300 20.130 29.340 41.870 48.530 48.670 46.930 44.660 42.620 41.750 41.860 42.670 43.210 43.520 43.770 43.870 44.070 44.480 45.040 45.320 45.300 45.140 44.970 44.850 45.000 45.670 1566 38.738 22.664 100.00 21.661 18.088 20.372 4.0788 0.65000 0.72000 1.00000 2.3200 3.3300 3.6100 3.6400 3.5700 3.7200 4.0000 4.8000 7.5600 13.920 21.850 25.250 24.480 22.820 20.910 19.100 18.290 18.710 20.140 21.340 22.070 22.480 22.680 22.870 23.250 23.830 24.160 24.100 23.910 23.660 23.460 23.600 24.310 1567 38.647 32.942 85.788 22.159 17.218 18.136 5.4497 0.65000 0.61000 1.0800 2.7600 4.9400 5.7000 5.8000 5.7500 5.7700 5.9100 6.4500 8.6000 13.420 19.000 20.950 20.100 18.850 17.550 16.270 15.780 16.650 18.720 20.520 21.670 22.300 22.610 22.840 23.270 23.850 24.210 24.190 24.030 23.750 23.600 23.710 24.430 1568 29.379 31.554 100.00 24.157 19.232 19.659 3.7747 0.82000 0.61000 1.0700 2.2900 3.2800 3.5300 3.5100 3.4500 3.5600 3.7500 4.4100 6.7400 12.060 18.520 21.190 20.740 19.820 18.840 17.880 17.680 18.850 21.410 23.680 25.180 26.020 26.390 26.660 27.100 27.620 27.940 27.940 27.810 27.620 27.490 27.630 28.260 1569 45.012 34.880 100.00 14.604 16.541 17.977 3.9713 0.69000 0.59000 1.0400 2.3400 3.4200 3.7000 3.7000 3.6400 3.7200 3.9500 4.6400 7.1600 12.930 19.870 22.320 21.140 19.410 17.590 15.850 15.100 15.910 18.070 19.910 21.040 21.690 21.970 22.220 22.670 23.370 23.770 23.720 23.480 23.130 22.860 23.040 23.870 1570 20.145 23.085 68.679 27.355 23.487 23.978 8.6036 0.90000 0.70000 1.1700 3.6600 7.7600 9.5400 9.8000 9.7500 9.7400 9.8000 10.300 12.390 17.090 22.660 24.970 24.650 23.950 23.180 22.420 22.330 23.420 25.700 27.750 29.120 29.920 30.270 30.570 30.950 31.430 31.700 31.730 31.660 31.550 31.540 31.700 32.210 1571 8.4419 13.775 67.423 24.360 32.405 33.202 10.107 1.1500 0.80000 1.2400 4.0500 8.7800 10.860 11.190 11.190 11.290 11.470 12.210 14.920 21.130 29.010 33.040 33.490 33.240 32.830 32.450 32.710 33.990 36.350 38.450 39.880 40.730 41.110 41.470 41.870 42.280 42.510 42.590 42.590 42.610 42.700 42.860 43.300 1572 37.879 22.293 76.130 17.442 20.780 23.038 8.0503 0.99000 0.74000 1.2600 3.4900 6.9000 8.3900 8.7100 8.7400 8.8500 9.0400 9.7600 12.410 18.370 25.490 28.170 27.090 25.250 23.210 21.290 20.390 20.880 22.480 23.830 24.650 25.150 25.380 25.590 26.040 26.700 27.060 27.020 26.860 26.540 26.350 26.520 27.290 1573 14.655 10.736 57.558 22.321 32.397 34.580 14.035 1.3200 0.91000 1.3000 4.8900 12.030 15.610 16.260 16.270 16.300 16.400 17.040 19.690 25.850 33.540 37.160 37.070 36.170 35.020 33.940 33.640 34.260 35.700 36.910 37.690 38.180 38.370 38.600 38.940 39.400 39.630 39.660 39.600 39.500 39.500 39.640 40.150 1574 27.113 24.453 79.316 18.976 24.382 25.496 7.4514 0.96000 0.68000 1.2100 3.3000 6.4700 7.7600 7.9600 7.9600 8.0300 8.2200 8.9300 11.560 17.570 24.970 28.090 27.520 26.320 24.960 23.660 23.260 24.360 26.820 29.000 30.440 31.270 31.650 31.950 32.430 33.040 33.400 33.380 33.250 33.050 32.920 33.100 33.800 1575 0.0000 6.6140 36.473 11.231 55.138 55.871 25.708 2.2800 1.2500 1.7300 7.8500 21.860 29.660 31.090 31.010 30.860 30.730 31.260 34.010 40.600 49.060 53.600 54.450 54.710 54.920 55.170 56.070 57.890 60.810 63.360 65.180 66.270 66.770 67.230 67.660 68.000 68.150 68.300 68.450 68.690 68.990 69.180 69.500 1576 5.8834 0.0000 54.301 20.195 41.492 45.272 16.630 1.5600 1.0600 1.5100 5.5300 13.820 18.120 18.940 19.050 19.210 19.450 20.340 23.600 31.310 41.660 47.610 48.760 48.440 47.600 46.850 46.710 46.660 46.740 46.690 46.730 46.840 46.900 47.100 47.400 47.760 47.930 47.980 48.000 48.000 48.100 48.240 48.670 1577 15.985 10.484 55.643 12.123 38.707 41.458 16.664 1.5400 1.0200 1.4400 5.5700 13.990 18.340 19.230 19.310 19.360 19.490 20.260 23.440 30.950 40.630 45.280 45.030 43.650 41.950 40.400 39.900 40.640 42.510 44.080 45.130 45.750 46.030 46.340 46.800 47.370 47.670 47.680 47.590 47.450 47.410 47.550 48.260 1578 1.7466 0.0000 44.692 11.752 59.088 63.205 24.947 2.0300 1.2000 1.7100 7.2800 20.500 27.930 29.320 29.360 29.350 29.440 30.310 34.010 43.180 55.960 63.740 65.700 66.020 65.790 65.660 66.130 66.420 66.680 66.760 66.860 66.980 67.010 67.190 67.480 67.700 67.750 67.780 67.810 67.900 68.080 68.100 68.330 1579 0.0000 8.0250 44.049 20.485 44.423 45.325 20.168 1.8000 1.1300 1.5900 6.5400 17.560 23.410 24.340 24.190 23.990 23.860 24.310 26.750 32.610 40.030 43.930 44.590 44.750 44.840 44.960 45.620 46.990 49.210 51.120 52.420 53.170 53.510 53.800 54.110 54.340 54.430 54.520 54.590 54.760 54.960 55.110 55.310 1580 0.0000 9.5681 55.769 17.017 45.934 46.389 16.020 1.6100 1.0800 1.5300 5.7500 13.930 17.880 18.480 18.410 18.490 18.630 19.390 22.400 29.540 38.890 44.070 45.150 45.460 45.640 45.870 46.790 48.630 51.590 54.220 56.070 57.180 57.670 58.110 58.530 58.860 59.030 59.160 59.300 59.510 59.790 59.920 60.210 1581 45.914 54.332 100.00 15.461 13.889 13.222 3.4706 0.67000 0.66000 1.0500 2.4100 3.4700 3.6900 3.6700 3.5200 3.4900 3.5600 3.9600 5.6600 9.4100 13.480 14.370 13.230 12.190 11.260 10.320 10.110 11.580 14.760 17.630 19.480 20.470 20.890 21.200 21.690 22.380 22.770 22.710 22.510 22.180 21.900 22.080 22.900 1582 36.937 43.356 100.00 24.689 15.496 15.196 3.3854 0.67000 0.55000 1.0700 2.3300 3.2500 3.4400 3.4200 3.3000 3.3000 3.3900 3.8700 5.7100 9.8300 14.580 16.140 15.420 14.560 13.760 12.950 12.800 14.140 16.920 19.420 21.020 21.910 22.330 22.600 23.040 23.610 23.970 23.960 23.810 23.580 23.430 23.540 24.260 1583 37.796 42.263 100.00 14.369 18.014 17.863 3.8474 0.77000 0.57000 1.0700 2.4000 3.4700 3.7800 3.7400 3.6500 3.7000 3.8600 4.4700 6.7000 11.770 17.670 19.640 18.640 17.410 16.220 15.060 14.760 16.240 19.520 22.530 24.490 25.570 26.040 26.370 26.880 27.580 27.980 27.940 27.740 27.400 27.190 27.390 28.170 1584 33.138 53.718 100.00 23.171 16.269 14.729 3.4492 0.69000 0.74000 1.1000 2.4700 3.4300 3.7000 3.6100 3.5000 3.4900 3.5600 3.9600 5.5700 9.2000 13.130 14.170 13.320 12.640 12.140 11.590 11.690 13.590 17.470 21.020 23.400 24.670 25.220 25.540 26.010 26.590 26.900 26.870 26.730 26.470 26.320 26.460 27.110 1585 25.729 44.058 100.00 19.802 20.276 18.816 3.6529 0.83000 0.66000 1.1300 2.3600 3.3600 3.6500 3.5900 3.5100 3.5300 3.6700 4.2100 6.2500 10.870 16.250 18.160 17.550 16.830 16.250 15.640 15.780 17.810 21.940 25.890 28.630 30.150 30.840 31.270 31.790 32.400 32.740 32.750 32.640 32.450 32.330 32.480 33.170 1586 20.185 32.904 79.014 22.405 23.640 22.903 6.7366 0.87000 0.68000 1.1800 3.1900 6.1600 7.3500 7.4900 7.3700 7.3900 7.4400 7.9500 10.040 14.790 20.420 22.660 22.250 21.590 20.970 20.350 20.450 22.190 25.680 29.000 31.300 32.590 33.170 33.580 34.040 34.570 34.910 34.910 34.850 34.750 34.680 34.850 35.440 1587 12.427 36.052 69.408 20.387 27.150 24.864 8.2711 1.0700 0.80000 1.2700 3.8100 7.9200 9.6400 9.7700 9.5300 9.3600 9.2200 9.5400 11.380 15.680 20.790 22.710 22.260 21.800 21.500 21.170 21.600 24.030 28.890 33.690 37.140 39.100 39.960 40.520 41.040 41.580 41.850 41.920 41.890 41.830 41.860 41.970 42.550 1588 0.0000 19.195 57.903 22.952 36.543 35.254 12.829 1.4600 0.96000 1.3500 4.8500 11.570 14.680 15.080 14.940 14.890 14.890 15.380 17.650 22.830 29.170 32.220 32.590 32.700 32.910 33.120 33.940 36.170 40.130 43.910 46.650 48.220 48.970 49.470 49.880 50.240 50.400 50.520 50.660 50.860 51.130 51.240 51.540 1589 14.378 33.751 79.592 16.528 28.946 26.994 7.1256 1.0600 0.74000 1.1400 3.3700 6.5200 7.7300 7.8300 7.7300 7.7300 7.8000 8.3800 10.700 16.040 22.490 25.130 24.790 24.270 23.860 23.430 23.840 26.330 31.280 36.130 39.590 41.590 42.480 43.060 43.670 44.260 44.610 44.690 44.650 44.570 44.560 44.770 45.350 1590 0.0000 30.819 74.620 27.285 29.038 26.356 6.9238 1.1100 0.76000 1.1700 3.2800 6.4900 7.7100 7.7800 7.6400 7.6100 7.6500 8.1200 10.120 14.650 20.100 22.550 22.690 22.710 22.920 23.130 23.950 26.570 31.470 36.410 40.070 42.190 43.160 43.760 44.220 44.560 44.730 44.880 45.010 45.200 45.400 45.540 45.770 1591 12.168 18.493 50.936 11.579 39.838 40.034 17.453 1.4500 1.0100 1.5500 6.0000 15.440 20.230 20.980 20.790 20.550 20.350 20.770 23.330 29.510 37.260 40.630 40.200 39.300 38.310 37.370 37.400 39.220 43.000 46.520 48.960 50.350 50.930 51.350 51.860 52.440 52.720 52.730 52.650 52.550 52.460 52.610 53.280 1592 0.0000 21.119 52.387 13.964 44.196 41.526 15.823 1.4400 1.00000 1.5100 5.6500 14.340 18.570 19.070 18.760 18.520 18.330 18.720 21.060 26.680 33.730 37.120 37.400 37.460 37.680 37.930 38.930 41.910 47.550 53.310 57.650 60.200 61.330 62.060 62.620 63.010 63.190 63.360 63.470 63.720 64.000 64.160 64.460 1593 18.304 49.054 76.968 23.839 20.606 17.861 5.8035 0.98000 0.74000 1.0700 3.1200 5.9300 6.9100 6.9300 6.6900 6.5100 6.3600 6.5600 7.9500 11.070 14.530 15.460 14.840 14.430 14.240 14.020 14.430 16.820 21.550 26.230 29.550 31.450 32.280 32.800 33.320 33.890 34.200 34.260 34.250 34.140 34.100 34.270 34.840 1594 26.671 58.590 100.00 18.447 18.798 15.777 3.4119 0.67000 0.56000 1.0400 2.3200 3.4300 3.7200 3.6200 3.5000 3.4700 3.5200 3.8800 5.4700 8.9500 12.730 13.560 12.630 12.040 11.760 11.420 11.770 14.400 19.720 24.880 28.460 30.430 31.270 31.760 32.300 32.930 33.280 33.260 33.110 32.880 32.690 32.790 33.460 1595 9.5381 55.456 86.668 24.019 23.080 18.594 4.6055 0.86000 0.73000 1.1700 2.7700 4.7400 5.4100 5.3500 5.1300 4.9800 4.9200 5.1700 6.5600 9.7200 13.210 14.160 13.580 13.320 13.400 13.440 14.140 17.280 23.640 30.210 35.160 38.010 39.300 40.010 40.590 41.100 41.370 41.460 41.490 41.510 41.540 41.680 42.100 1596 26.248 49.694 80.754 11.503 23.316 20.583 6.6743 1.0500 0.73000 1.2000 3.3500 6.5200 7.7900 7.8300 7.5800 7.4300 7.3100 7.6100 9.4100 13.480 18.010 19.110 18.010 17.150 16.540 15.890 16.090 18.720 24.220 29.620 33.440 35.560 36.470 37.010 37.630 38.380 38.750 38.730 38.570 38.250 38.040 38.200 38.950 1597 0.0000 36.642 65.442 10.569 41.364 35.218 10.741 1.3900 1.0200 1.3600 4.5400 10.270 12.760 12.850 12.490 12.240 12.020 12.350 14.460 19.520 25.710 28.220 28.010 27.940 28.230 28.490 29.660 33.840 42.360 51.790 59.470 64.150 66.310 67.530 68.330 68.870 69.110 69.300 69.490 69.730 70.040 70.150 70.440 1598 0.0000 39.894 69.407 25.324 28.556 24.565 7.6016 1.2400 0.91000 1.2900 3.6500 7.5500 9.0800 9.1000 8.8400 8.6100 8.4300 8.6600 10.250 13.920 18.250 19.900 19.680 19.640 19.860 20.070 20.920 23.960 29.920 36.100 40.780 43.520 44.750 45.480 46.000 46.360 46.540 46.680 46.820 47.000 47.230 47.340 47.570 1599 8.7098 41.685 63.064 17.196 30.611 26.623 10.341 1.2200 0.88000 1.3100 4.5400 10.250 12.720 12.810 12.400 12.020 11.670 11.770 13.310 17.000 21.300 22.660 22.070 21.710 21.630 21.510 22.180 25.290 31.590 38.100 43.000 45.840 47.100 47.820 48.420 48.990 49.250 49.350 49.380 49.350 49.400 49.550 50.050 1600 0.0000 40.434 76.575 19.044 32.753 27.784 7.0383 1.1700 0.75000 1.1600 3.3700 6.7400 8.0200 8.0400 7.8400 7.7600 7.7200 8.1400 10.100 14.600 19.920 22.030 21.850 21.810 22.070 22.330 23.330 26.930 34.090 41.710 47.710 51.300 52.950 53.910 54.570 55.020 55.270 55.460 55.640 55.850 56.090 56.270 56.540 1601 5.1467 72.943 88.661 27.397 19.682 13.713 3.5039 0.68000 0.56000 1.0800 2.5100 4.1000 4.5300 4.4200 4.1000 3.9000 3.6800 3.7200 4.4800 6.2200 7.9900 8.0500 7.3300 7.1300 7.3300 7.4900 8.2600 11.660 18.750 26.450 32.480 36.090 37.730 38.650 39.300 39.810 40.080 40.210 40.290 40.390 40.520 40.660 41.020 1602 14.573 78.314 100.00 10.691 22.405 14.732 2.9558 0.86000 0.60000 1.1200 2.3700 3.5300 3.7200 3.5700 3.3300 3.1700 3.0600 3.1600 4.0500 6.0500 7.9900 7.8300 6.8200 6.4800 6.6400 6.7300 7.5300 11.510 20.310 30.240 38.330 43.350 45.700 46.930 47.870 48.740 49.210 49.320 49.310 49.190 49.170 49.350 50.060 1603 15.940 67.100 100.00 15.412 21.779 16.039 3.1282 0.73000 0.64000 1.0700 2.3500 3.3900 3.6000 3.5200 3.3100 3.2400 3.2200 3.4600 4.7300 7.5100 10.390 10.780 9.9000 9.5400 9.6300 9.6400 10.380 14.000 21.460 29.300 35.330 38.910 40.540 41.470 42.240 43.000 43.440 43.530 43.490 43.390 43.340 43.550 44.250 1604 0.11043 66.251 79.064 18.282 27.392 19.188 5.2838 0.92000 0.78000 1.1500 3.1500 5.9600 6.9100 6.7300 6.3300 6.0000 5.6400 5.6100 6.5600 8.8200 11.200 11.390 10.510 10.290 10.570 10.790 11.800 16.190 25.530 36.050 44.770 50.200 52.740 54.060 54.890 55.410 55.660 55.850 56.010 56.240 56.470 56.570 56.760 1605 0.0000 67.638 100.00 24.153 23.614 16.588 3.0457 0.93000 0.71000 1.1400 2.3100 3.3700 3.6000 3.5000 3.2900 3.1900 3.1500 3.3600 4.4600 6.9000 9.4400 9.8100 9.0400 8.8300 9.0800 9.2900 10.210 14.230 22.640 31.840 39.200 43.650 45.670 46.730 47.410 47.840 48.040 48.170 48.320 48.470 48.690 48.740 48.950 1606 20.645 68.570 97.575 22.074 18.056 13.575 3.1835 0.96000 0.62000 1.1400 2.4300 3.5600 3.7700 3.7000 3.4800 3.4000 3.3300 3.5200 4.6100 6.9900 9.3900 9.6100 8.7300 8.3600 8.4000 8.3500 8.9500 11.950 18.130 24.390 28.950 31.550 32.690 33.320 33.890 34.510 34.830 34.860 34.770 34.630 34.530 34.650 35.250 1607 0.0000 52.114 75.526 17.799 31.098 24.337 6.5638 1.0600 0.82000 1.2000 3.3800 6.7400 8.0200 7.9300 7.5900 7.3500 7.1200 7.3000 8.7800 12.280 16.260 17.420 16.850 16.680 16.950 17.170 18.210 22.340 30.850 40.230 47.780 52.360 54.460 55.570 56.290 56.770 56.990 57.140 57.290 57.490 57.750 57.840 58.020 1608 0.0000 90.364 81.956 15.269 25.619 14.820 4.2854 0.91000 0.66000 1.1100 3.0200 5.5900 6.3500 6.0400 5.5100 4.9900 4.4600 4.1400 4.4100 5.2600 5.9300 5.1600 4.0200 3.7400 4.0200 4.2400 5.2100 10.010 20.910 33.910 45.360 52.910 56.550 58.410 59.490 60.180 60.500 60.710 60.910 61.120 61.330 61.380 61.570 1609 0.0000 82.769 100.00 19.452 23.398 14.525 2.6917 1.0400 0.58000 1.1100 2.3100 3.2900 3.4500 3.3100 3.0900 2.9300 2.8000 2.8600 3.5800 5.1500 6.5800 6.3100 5.4100 5.1900 5.4700 5.6800 6.6100 10.890 20.350 31.350 40.820 46.910 49.840 51.430 52.390 53.050 53.410 53.650 53.860 54.120 54.440 54.590 54.880 1610 39.871 0.0000 100.00 11.545 25.762 33.368 5.6310 0.95000 0.72000 1.1900 2.4200 3.7000 4.0500 4.1700 4.2700 4.6500 5.2700 6.6300 11.190 22.440 38.850 47.790 46.870 42.630 37.560 33.270 30.780 29.510 28.830 28.170 27.710 27.570 27.510 27.610 28.030 28.710 29.080 29.000 28.730 28.340 28.010 28.190 29.040 1611 22.903 0.0000 100.00 23.072 27.627 32.435 4.8071 0.96000 0.76000 1.1200 2.3300 3.3800 3.6500 3.7000 3.7600 4.0300 4.4900 5.6000 9.2800 18.310 31.210 38.790 39.580 38.020 35.690 33.650 32.650 32.160 31.940 31.680 31.500 31.540 31.560 31.700 32.040 32.530 32.800 32.790 32.680 32.510 32.420 32.630 33.160 1612 32.683 9.3033 100.00 13.420 26.699 31.480 5.1031 0.98000 0.78000 1.1400 2.4600 3.5800 3.9200 3.9600 4.0200 4.3400 4.8300 6.0000 9.9400 19.510 32.890 39.940 39.550 37.010 33.890 31.130 29.720 29.620 30.340 30.850 31.100 31.300 31.380 31.540 31.980 32.630 32.990 32.930 32.720 32.380 32.170 32.300 33.110 1613 37.239 0.0000 100.00 21.733 22.694 28.552 5.0050 0.98000 0.74000 1.1500 2.3400 3.4800 3.7800 3.8900 3.9600 4.2600 4.7900 5.9800 9.8300 19.130 31.990 38.800 38.370 35.500 31.930 28.800 27.000 26.070 25.570 25.110 24.780 24.710 24.680 24.760 25.110 25.630 25.940 25.870 25.680 25.410 25.220 25.380 26.050 1614 32.044 11.213 100.00 23.445 22.031 25.675 4.5810 0.88000 0.84000 1.1700 2.4100 3.4500 3.7900 3.8000 3.8200 4.0500 4.4500 5.4400 8.7000 16.460 26.700 31.800 31.510 29.720 27.490 25.460 24.410 24.380 25.030 25.470 25.730 25.910 26.000 26.120 26.490 27.000 27.300 27.250 27.070 26.850 26.650 26.840 27.440 1615 16.032 0.0000 74.837 23.307 32.568 37.214 9.6260 1.2900 0.89000 1.3500 3.7800 7.6700 9.4400 9.8300 9.9100 10.190 10.620 11.690 15.300 23.960 35.820 42.550 43.300 42.090 40.190 38.540 37.730 37.310 37.120 36.850 36.680 36.680 36.650 36.780 37.080 37.510 37.720 37.680 37.570 37.440 37.360 37.470 37.940 1616 13.719 0.0000 76.481 15.883 38.965 44.071 10.280 1.4400 0.93000 1.3100 3.8200 7.9400 9.8300 10.230 10.400 10.730 11.230 12.460 16.540 26.460 40.690 49.360 50.680 49.530 47.550 45.820 45.110 44.790 44.700 44.500 44.390 44.470 44.520 44.700 45.100 45.600 45.870 45.880 45.830 45.690 45.680 45.870 46.480 1617 26.516 0.0000 79.687 10.223 34.663 41.527 10.167 1.2700 0.84000 1.3200 3.6400 7.5900 9.3900 9.8700 10.070 10.460 11.010 12.320 16.720 27.610 43.460 52.540 52.560 49.460 45.520 42.130 40.340 39.430 38.980 38.490 38.180 38.150 38.150 38.310 38.760 39.430 39.790 39.780 39.560 39.290 39.100 39.290 40.150 1618 28.699 17.540 85.178 15.892 26.017 28.735 7.2685 1.0800 0.95000 1.3000 3.1900 5.9800 7.0200 7.2600 7.3200 7.4800 7.8200 8.7200 12.000 19.600 29.400 33.870 33.250 31.480 29.400 27.470 26.620 27.220 28.990 30.480 31.380 31.890 32.110 32.320 32.770 33.370 33.710 33.630 33.470 33.150 32.970 33.090 33.890 1619 11.690 14.583 74.610 15.783 35.933 37.114 9.3532 1.2300 0.80000 1.2600 3.7200 7.7800 9.5800 9.8100 9.8800 10.030 10.300 11.220 14.490 22.260 32.560 37.970 38.420 37.760 36.860 36.030 36.120 37.550 40.430 43.030 44.800 45.840 46.280 46.650 47.100 47.610 47.900 47.920 47.890 47.840 47.810 47.990 48.570 1620 16.606 20.746 100.00 26.492 24.508 25.188 4.0057 0.99000 0.79000 1.1600 2.3000 3.2600 3.5400 3.5200 3.4600 3.6000 3.8800 4.6600 7.3200 13.610 21.780 25.890 26.110 25.540 24.840 24.170 24.190 25.450 27.910 30.090 31.540 32.380 32.750 33.060 33.460 33.900 34.150 34.180 34.120 34.060 34.040 34.170 34.690 1621 25.812 17.853 96.119 10.541 28.794 31.311 5.4894 1.1800 0.83000 1.1100 2.6200 4.1000 4.6400 4.7000 4.7700 5.0200 5.4500 6.5300 10.150 18.750 30.310 36.070 35.740 33.960 31.830 29.910 29.180 30.100 32.450 34.510 35.830 36.600 36.940 37.220 37.750 38.450 38.830 38.790 38.610 38.320 38.160 38.330 39.150 1622 22.382 27.855 88.817 16.448 26.295 26.422 5.7960 0.90000 0.67000 1.1100 2.7500 4.8700 5.6700 5.7600 5.7400 5.8800 6.1300 6.9100 9.6800 16.020 23.910 27.400 27.070 26.120 25.110 24.140 24.060 25.690 29.100 32.270 34.440 35.670 36.210 36.620 37.140 37.770 38.110 38.120 38.030 37.860 37.730 37.920 38.630 1623 0.0000 12.538 76.021 26.779 34.290 34.445 8.0235 1.3000 0.80000 1.2200 3.4400 6.8200 8.2200 8.4200 8.3900 8.5600 8.8400 9.6600 12.520 19.120 27.680 32.380 33.370 33.630 33.780 33.990 34.770 36.450 39.180 41.600 43.280 44.270 44.730 45.100 45.440 45.740 45.870 45.990 46.120 46.290 46.530 46.650 46.900 1624 0.0000 0.0000 77.349 25.840 38.382 41.099 8.6202 1.2800 0.86000 1.2600 3.4500 6.9300 8.3500 8.6000 8.6800 8.9600 9.3800 10.430 13.890 22.040 33.390 40.520 42.610 43.160 43.230 43.460 44.090 44.530 44.890 45.080 45.300 45.530 45.650 45.890 46.170 46.410 46.520 46.610 46.740 46.910 47.130 47.220 47.500 1625 0.0000 0.0000 61.580 17.988 48.589 51.758 15.288 1.6100 1.0400 1.4500 5.3600 12.720 16.170 16.830 16.950 17.210 17.610 18.670 22.360 31.150 43.390 51.080 53.310 53.910 54.000 54.250 54.970 55.480 55.900 56.160 56.410 56.670 56.820 57.100 57.440 57.710 57.850 57.930 58.060 58.310 58.540 58.670 58.980 1626 0.0000 23.607 100.00 25.795 31.776 30.174 4.1947 1.2100 0.84000 1.1500 2.3600 3.3400 3.6400 3.6500 3.6200 3.8100 4.1000 4.9100 7.6800 14.130 22.510 26.910 27.580 27.710 27.870 28.070 28.930 31.410 35.880 40.210 43.310 45.090 45.860 46.350 46.720 47.000 47.120 47.220 47.340 47.490 47.690 47.810 48.000 1627 8.6290 27.586 84.923 23.451 28.732 27.379 6.1068 0.99000 0.83000 1.1900 3.0300 5.5100 6.3600 6.4000 6.3100 6.3900 6.5300 7.1800 9.6100 15.180 22.100 25.340 25.490 25.260 25.090 24.910 25.420 27.620 31.780 35.780 38.640 40.270 41.020 41.510 42.000 42.480 42.730 42.840 42.860 42.880 42.920 43.100 43.560 1628 7.9661 25.520 81.789 14.940 35.723 34.209 7.5368 1.3100 0.85000 1.2300 3.3600 6.5100 7.7500 7.8600 7.8200 7.9100 8.1100 8.8900 11.800 18.710 27.640 32.010 32.230 31.880 31.550 31.230 31.770 34.380 39.430 44.380 47.960 50.010 50.900 51.460 52.010 52.520 52.790 52.860 52.860 52.810 52.890 53.000 53.500 1629 0.0000 17.349 63.063 11.946 48.313 46.524 14.136 1.8000 1.0400 1.3600 5.0700 12.280 15.700 16.160 16.060 16.060 16.140 16.890 20.000 27.410 37.190 42.370 43.190 43.370 43.550 43.800 44.900 47.850 53.260 58.660 62.650 64.960 65.990 66.660 67.180 67.550 67.700 67.850 67.990 68.180 68.500 68.620 68.840 1630 0.0000 14.124 79.935 17.241 42.700 42.259 8.6583 1.6200 0.98000 1.3400 3.5700 7.1900 8.6400 8.8600 8.8200 9.0100 9.3500 10.300 13.700 21.830 32.930 39.270 40.530 40.790 40.910 41.120 42.100 44.510 48.650 52.450 55.150 56.690 57.310 57.780 58.160 58.460 58.550 58.630 58.740 58.910 59.130 59.230 59.430 1631 13.572 44.878 100.00 20.077 24.134 21.018 3.5643 0.88000 0.64000 1.1000 2.2900 3.3300 3.5700 3.5200 3.4000 3.4200 3.5500 4.0800 6.0700 10.590 15.960 17.970 17.580 17.190 17.030 16.840 17.380 20.170 25.760 31.370 35.460 37.810 38.860 39.460 40.030 40.590 40.920 40.940 40.930 40.860 40.840 41.050 41.570 1632 0.0000 34.896 94.872 20.080 33.511 29.568 4.7715 1.2100 0.88000 1.2900 2.7000 4.1400 4.6200 4.6100 4.5400 4.6500 4.8900 5.6000 8.1200 13.930 21.170 24.510 24.650 24.640 24.850 25.070 26.060 29.490 36.150 43.090 48.370 51.450 52.780 53.540 54.080 54.400 54.580 54.690 54.800 54.980 55.170 55.240 55.430 1633 0.0000 47.333 100.00 17.805 31.327 25.226 3.6688 1.1400 0.77000 1.1100 2.3000 3.3300 3.6000 3.5300 3.4700 3.5500 3.7000 4.2600 6.3500 11.000 16.470 18.540 18.270 18.190 18.490 18.760 19.860 23.960 32.140 41.030 48.150 52.470 54.500 55.630 56.410 56.940 57.200 57.390 57.600 57.830 58.130 58.280 58.580 1634 14.174 55.425 94.874 12.047 26.892 21.721 4.2743 0.94000 0.73000 1.1400 2.6800 4.1600 4.6100 4.5600 4.4200 4.3800 4.4500 4.8800 6.7800 10.990 15.740 17.020 16.140 15.640 15.570 15.420 16.130 19.920 27.600 35.530 41.480 44.930 46.420 47.250 47.970 48.640 49.000 49.010 48.910 48.730 48.630 48.680 49.310 1635 0.0000 67.496 100.00 15.501 28.586 19.834 3.2216 0.96000 0.75000 1.1300 2.3900 3.4100 3.6800 3.5600 3.4000 3.3300 3.3200 3.5800 4.9100 7.8100 10.900 11.440 10.600 10.370 10.670 10.920 11.990 16.640 26.590 37.950 47.620 53.740 56.640 58.160 59.100 59.690 60.000 60.200 60.400 60.630 60.930 61.040 61.270 1636 0.0000 57.735 100.00 20.770 28.090 21.309 3.5368 1.2600 0.79000 1.2300 2.4700 3.5500 3.7900 3.7300 3.5900 3.5700 3.6400 4.0200 5.6700 9.2900 13.310 14.450 13.840 13.650 13.920 14.140 15.150 19.330 27.930 37.300 44.810 49.330 51.370 52.460 53.130 53.550 53.730 53.850 53.990 54.200 54.360 54.400 54.600 1637 0.0000 11.305 100.00 27.258 33.173 33.718 4.3546 1.1500 0.81000 1.0800 2.2200 3.2300 3.4800 3.5300 3.5300 3.7700 4.1600 5.1200 8.2800 15.740 25.840 31.770 33.200 33.550 33.690 33.920 34.720 36.310 38.750 40.870 42.320 43.190 43.610 43.950 44.290 44.560 44.700 44.790 44.920 45.090 45.300 45.420 45.680 1638 15.349 7.1819 100.00 19.548 31.963 35.096 4.8704 1.0600 0.78000 1.0900 2.3100 3.3700 3.7100 3.7600 3.8000 4.1200 4.6100 5.7700 9.5000 18.440 30.920 38.160 39.180 38.360 36.970 35.760 35.460 35.990 37.160 38.070 38.640 39.040 39.250 39.500 39.900 40.410 40.690 40.700 40.630 40.560 40.520 40.680 41.300 1639 0.0000 0.0000 100.00 24.234 40.322 43.469 5.1281 1.4400 0.86000 1.2400 2.3100 3.5100 3.7500 3.8300 3.9000 4.2600 4.7600 5.9800 9.8700 19.480 33.560 42.930 45.700 46.340 46.290 46.480 47.170 47.680 48.070 48.230 48.400 48.550 48.630 48.790 49.040 49.230 49.280 49.350 49.400 49.590 49.740 49.860 50.060 1640 0.11526 0.0000 76.129 15.920 50.223 53.723 10.533 1.5100 1.0500 1.3400 3.8900 8.1800 10.060 10.400 10.530 10.870 11.370 12.630 16.830 27.160 42.490 52.790 55.900 56.680 56.680 56.960 57.800 58.470 58.960 59.210 59.450 59.720 59.840 60.110 60.420 60.700 60.800 60.880 60.990 61.180 61.420 61.590 61.830 1641 6.4609 11.226 97.884 15.731 39.262 40.746 5.1860 1.3400 0.80000 1.1300 2.4100 3.5700 3.9100 3.9800 4.0800 4.4200 4.9400 6.1600 10.050 19.400 32.530 40.420 41.990 41.860 41.310 40.870 41.310 42.920 45.650 48.030 49.630 50.600 51.050 51.450 51.910 52.410 52.660 52.730 52.760 52.750 52.850 53.060 53.550 1642 0.0000 23.365 100.00 16.123 39.552 36.985 4.5646 1.2000 0.85000 1.1600 2.4000 3.4600 3.8300 3.7700 3.7800 4.0000 4.3600 5.2900 8.4800 16.170 26.630 32.400 33.350 33.530 33.710 33.950 35.070 38.300 44.260 50.250 54.720 57.300 58.450 59.140 59.660 60.000 60.150 60.260 60.390 60.580 60.830 60.960 61.200 1643 0.0000 0.0000 100.00 16.046 49.594 53.240 5.6334 1.6700 0.91000 1.3100 2.4600 3.6200 3.9600 4.0200 4.0800 4.4800 5.0600 6.4000 10.790 22.000 39.530 52.030 55.970 56.860 56.810 57.060 58.010 58.780 59.310 59.550 59.730 59.950 60.040 60.240 60.530 60.750 60.800 60.890 60.970 61.130 61.350 61.440 61.660 1644 100.00 0.0000 8.9422 0.0000 14.150 22.310 47.593 1.6000 1.0500 1.7600 9.1900 29.720 47.060 57.530 63.160 63.850 63.430 62.450 61.630 60.530 57.090 49.630 39.700 29.660 20.310 12.770 8.3500 6.1800 5.0400 4.1500 3.5500 3.3300 3.2700 3.2700 3.6300 4.3400 4.7900 4.6400 4.3000 3.8100 3.4400 3.6700 4.6100 1645 100.00 16.780 0.0000 0.0000 12.772 18.021 44.309 1.5800 0.98000 1.6500 9.1500 29.920 47.120 56.640 60.750 59.740 57.500 54.920 52.070 48.460 43.920 37.840 30.630 23.390 16.370 10.430 6.9200 5.3000 4.5400 3.8900 3.4000 3.2200 3.1600 3.1800 3.5200 4.2200 4.6600 4.5300 4.2100 3.6900 3.3600 3.5600 4.5100 1646 100.00 23.024 11.572 5.8046 9.6927 14.104 30.076 1.2300 0.84000 1.5400 7.6100 22.690 33.690 38.710 40.430 39.540 38.000 36.590 35.640 34.870 33.290 29.560 24.330 18.920 13.470 8.7400 5.9000 4.6500 4.1200 3.6200 3.2100 3.0700 3.0200 3.0600 3.3700 4.0000 4.4200 4.2900 3.9900 3.5300 3.2300 3.4800 4.3100 1647 100.00 0.0000 0.0000 0.0000 14.951 22.346 53.867 2.0000 1.2300 1.9100 9.7700 32.260 52.150 65.300 72.690 73.580 72.840 70.990 68.140 63.680 57.250 48.700 38.680 28.750 19.590 12.240 7.9600 5.8700 4.7900 3.9400 3.3900 3.1900 3.1300 3.1500 3.4900 4.1500 4.5900 4.4500 4.1400 3.6800 3.3400 3.6100 4.5200 1648 79.413 0.0000 0.0000 5.7007 18.526 25.150 48.606 1.8600 1.1200 1.7600 9.5200 31.160 49.460 59.740 64.920 65.280 64.590 63.160 61.090 57.960 53.380 47.070 39.260 31.200 23.470 17.140 13.380 11.500 10.520 9.7300 9.2100 9.0300 8.9500 9.0000 9.3500 10.000 10.430 10.300 10.000 9.5700 9.2500 9.4500 10.340 1649 100.00 30.119 0.0000 4.3581 9.6434 13.023 31.821 1.1900 0.83000 1.6400 8.4600 24.700 36.370 41.860 43.550 42.200 40.070 37.950 35.840 33.350 30.420 26.440 21.660 16.850 12.060 7.8300 5.3000 4.2400 3.8500 3.4400 3.0900 2.9700 2.9300 2.9700 3.2800 3.9100 4.3200 4.2000 3.9100 3.4700 3.1700 3.4000 4.2800 1650 100.00 45.506 17.621 0.0000 7.8152 10.329 22.875 0.90000 0.84000 1.4100 7.0100 19.730 28.150 31.050 31.260 29.610 27.510 25.780 24.800 24.240 23.350 20.610 16.850 13.270 9.7300 6.4800 4.5500 3.9000 3.8300 3.6000 3.3200 3.2100 3.1700 3.2000 3.5600 4.2400 4.6900 4.5500 4.2100 3.7400 3.3700 3.6100 4.5200 1651 83.773 35.443 3.9294 2.1511 12.710 15.168 30.622 1.3000 0.80000 1.6100 8.6000 25.320 36.740 41.100 41.790 40.040 37.650 35.480 33.670 31.760 29.530 26.150 22.000 17.980 13.990 10.360 8.2200 7.6100 7.8800 7.9900 7.9200 7.9500 7.9700 8.0500 8.4500 9.2100 9.6800 9.5500 9.2200 8.7100 8.3600 8.5500 9.5200 1652 61.061 0.0000 0.0000 0.0000 29.202 36.613 58.793 2.2300 1.3700 2.1000 11.790 38.480 60.930 72.610 77.920 78.310 77.590 76.130 74.010 70.820 66.080 59.570 51.360 42.930 34.930 28.340 24.420 22.400 21.330 20.420 19.830 19.640 19.580 19.660 20.130 20.960 21.480 21.360 21.020 20.450 20.070 20.260 21.390 1653 78.175 18.756 0.0000 0.0000 18.100 22.477 44.645 1.6800 1.0900 1.7400 9.7600 31.890 49.700 58.120 60.910 59.400 56.870 54.240 51.560 48.310 44.450 39.290 33.090 26.940 20.900 15.670 12.570 11.340 11.080 10.790 10.520 10.450 10.420 10.480 10.910 11.700 12.190 12.060 11.700 11.150 10.750 10.930 12.000 1654 65.171 26.248 0.0000 0.0000 21.181 23.682 40.626 1.6100 1.1000 1.7400 9.8400 31.610 48.040 54.310 55.410 53.270 50.410 47.700 45.210 42.470 39.470 35.510 30.810 26.270 21.810 17.800 15.490 15.010 15.770 16.320 16.580 16.780 16.860 17.010 17.510 18.350 18.880 18.750 18.390 17.850 17.450 17.660 18.720 1655 100.00 57.018 0.0000 7.3901 7.0320 8.0089 22.311 0.75000 0.76000 1.4500 7.0700 20.500 29.250 31.900 31.410 29.010 26.120 23.650 21.590 19.460 17.450 14.820 11.970 9.5000 7.0800 4.8300 3.4900 3.1500 3.2800 3.1800 3.0000 2.9200 2.8900 2.9300 3.2400 3.8500 4.2500 4.1200 3.8400 3.4100 3.1000 3.3100 4.1100 1656 100.00 66.055 18.029 0.0000 5.8788 6.5430 16.843 0.75000 0.63000 1.3700 6.2400 16.690 22.830 24.270 23.550 21.590 19.270 17.370 16.080 15.040 13.990 11.870 9.4000 7.4700 5.6800 3.9600 2.9700 2.8700 3.2000 3.2500 3.1000 3.0500 3.0300 3.0700 3.4200 4.0900 4.5200 4.4100 4.0800 3.6100 3.2900 3.5000 4.4000 1657 95.048 68.156 5.5969 7.1843 6.5789 6.6354 18.257 1.0300 0.83000 1.4300 6.6600 18.400 25.520 26.970 25.900 23.420 20.580 18.260 16.430 14.690 13.120 10.950 8.7100 7.0400 5.5200 4.0200 3.1900 3.2400 3.7700 3.9900 3.9500 3.9400 3.9500 3.9900 4.3200 4.9800 5.4000 5.2800 4.9800 4.5100 4.1800 4.4000 5.2100 1658 75.178 41.449 0.0000 0.0000 15.502 16.863 34.299 1.2900 0.99000 1.5700 9.0500 28.870 43.100 47.700 47.630 44.730 41.190 38.110 35.450 32.690 29.950 26.370 22.340 18.650 15.060 11.720 9.7900 9.5800 10.470 11.080 11.270 11.420 11.480 11.570 12.030 12.850 13.370 13.220 12.830 12.250 11.800 11.990 13.050 1659 85.702 57.882 0.0000 0.0000 9.7962 10.015 24.494 0.90000 0.85000 1.4200 7.6400 22.890 32.870 35.480 34.590 31.670 28.310 25.500 23.190 20.870 18.740 16.020 13.110 10.700 8.4100 6.2500 5.0600 5.1000 5.9700 6.5500 6.7500 6.8800 6.9300 7.0200 7.4100 8.1500 8.6200 8.4700 8.1500 7.6600 7.3000 7.5100 8.4700 1660 100.00 49.099 0.0000 0.0000 8.2262 9.9541 26.686 0.92000 0.72000 1.4900 7.8200 22.970 33.310 37.140 37.330 35.000 32.070 29.470 27.200 24.790 22.350 19.150 15.550 12.240 8.9500 5.9500 4.1800 3.6000 3.5900 3.4000 3.1400 3.0400 3.0300 3.0600 3.3900 4.0700 4.5100 4.3900 4.0700 3.5900 3.2800 3.4800 4.3900 1661 100.00 79.545 27.066 0.0000 4.6806 4.5765 12.601 0.74000 0.61000 1.2400 5.4500 13.720 18.300 18.930 17.870 15.960 13.760 12.020 10.900 10.090 9.3100 7.5900 5.7500 4.5700 3.6200 2.6500 2.1600 2.3200 2.8500 3.0700 3.0000 2.9600 2.9700 3.0100 3.3400 3.9900 4.4100 4.2700 3.9800 3.5100 3.2400 3.4400 4.2800 1662 100.00 76.297 0.0000 0.0000 5.6790 5.2401 18.032 0.70000 0.64000 1.3500 6.7300 18.990 26.440 27.710 26.160 23.090 19.630 16.860 14.670 12.560 10.780 8.6300 6.5900 5.2200 4.0500 2.9100 2.3000 2.3800 2.8400 3.0000 2.9000 2.8800 2.8800 2.9100 3.2300 3.8600 4.2800 4.1400 3.8500 3.4000 3.1200 3.3600 4.1700 1663 100.00 83.758 28.041 8.7188 4.0767 3.7762 10.583 0.49000 0.52000 1.1900 4.9900 12.030 15.680 16.040 15.020 13.360 11.430 9.9100 8.9000 8.1100 7.3900 5.9200 4.4000 3.5100 2.8700 2.1700 1.8400 2.0600 2.6100 2.8600 2.8200 2.8000 2.8100 2.8400 3.1700 3.7600 4.1700 4.0600 3.7600 3.3300 3.0400 3.2500 4.0700 1664 83.466 74.603 0.0000 9.6141 7.8153 6.7809 16.971 0.62000 0.63000 1.3900 6.9000 18.500 24.920 25.690 24.160 21.560 18.620 16.230 14.330 12.500 10.960 9.0800 7.2400 6.0300 5.0200 4.0000 3.5200 4.0500 5.3800 6.3700 6.8000 7.0400 7.1500 7.2600 7.6600 8.3600 8.8200 8.7100 8.4100 7.9300 7.5900 7.7600 8.6600 1665 100.00 81.043 0.0000 8.0861 5.2242 4.5825 15.839 0.70000 0.67000 1.3700 6.3100 17.350 23.770 24.570 23.000 20.180 17.010 14.500 12.480 10.570 8.9900 7.0900 5.3300 4.2700 3.4200 2.5700 2.1200 2.3100 2.8500 3.0500 2.9900 2.9600 2.9600 2.9900 3.3100 3.9300 4.3200 4.2100 3.9200 3.4700 3.2000 3.3700 4.2000 1666 78.978 65.433 0.0000 0.0000 10.663 9.7272 22.714 0.91000 0.73000 1.4400 7.6800 22.750 32.210 33.860 32.300 29.040 25.440 22.520 20.170 17.900 15.940 13.480 11.000 9.1700 7.5600 5.9700 5.1700 5.7300 7.3500 8.6000 9.2000 9.5300 9.6600 9.7900 10.230 11.020 11.520 11.410 11.050 10.490 10.130 10.290 11.320 1667 66.301 49.774 0.0000 0.0000 16.476 16.048 30.114 1.3000 0.86000 1.5700 8.8900 27.700 40.270 43.160 41.970 38.750 35.030 31.950 29.430 26.930 24.650 21.730 18.580 15.970 13.510 11.130 9.8900 10.430 12.420 14.060 14.940 15.410 15.620 15.790 16.320 17.190 17.710 17.580 17.200 16.630 16.170 16.370 17.450 1668 100.00 100.00 27.201 0.0000 3.7741 2.6583 9.9134 0.47000 0.45000 1.2000 5.1300 12.410 16.000 16.000 14.540 12.400 10.060 8.1800 6.8600 5.7200 4.7400 3.2200 1.9200 1.4800 1.4000 1.2300 1.2500 1.7400 2.5500 2.9500 2.9800 2.9900 3.0000 3.0500 3.4000 4.0800 4.5200 4.4100 4.0600 3.6100 3.2600 3.4700 4.3300 1669 100.00 100.00 0.0000 0.0000 4.4051 2.8327 13.308 0.58000 0.59000 1.3000 6.3800 16.670 22.100 22.090 19.860 16.680 13.210 10.460 8.3500 6.4100 4.9400 3.2500 1.9300 1.4800 1.4000 1.2300 1.2600 1.7500 2.5700 2.9800 3.0000 3.0200 3.0400 3.0700 3.4400 4.1200 4.5800 4.4600 4.1400 3.6300 3.3000 3.5000 4.3900 1670 85.727 80.659 5.6693 0.0000 7.6701 6.2507 17.170 0.99000 0.70000 1.3900 6.7800 19.130 26.070 26.710 24.770 21.720 18.330 15.630 13.600 11.700 10.140 8.1100 6.2100 5.0900 4.2800 3.4100 3.0400 3.7200 5.2200 6.3200 6.7800 7.0100 7.1300 7.2200 7.6500 8.4200 8.8900 8.7600 8.4100 7.8900 7.5000 7.6700 8.6700 1671 100.00 89.930 0.0000 9.6449 4.4193 3.4207 13.197 0.61000 0.45000 1.2900 5.9600 15.590 20.740 21.030 19.340 16.680 13.730 11.350 9.5000 7.7500 6.3800 4.7500 3.3400 2.6500 2.2400 1.7800 1.5900 1.9000 2.5200 2.8100 2.7900 2.7900 2.7900 2.8400 3.1500 3.7500 4.1500 4.0400 3.7500 3.3300 3.0600 3.2200 4.0100 1672 100.00 88.839 0.0000 0.0000 5.0916 4.0703 15.571 0.71000 0.50000 1.3400 6.6500 17.860 24.150 24.720 22.830 19.750 16.310 13.580 11.430 9.4200 7.8200 5.9200 4.2500 3.3600 2.7700 2.1100 1.8200 2.1200 2.8000 3.1000 3.0600 3.0500 3.0500 3.1000 3.4500 4.1300 4.5900 4.4500 4.1300 3.6400 3.3200 3.5000 4.4100 1673 70.085 84.027 0.0000 0.0000 10.570 7.6390 17.936 1.0200 0.74000 1.4400 7.3800 20.980 28.480 28.540 25.960 22.400 18.630 15.670 13.370 11.280 9.6200 7.6400 5.8700 4.9800 4.4500 3.8400 3.7300 5.0900 7.9900 10.480 11.920 12.680 12.980 13.200 13.730 14.600 15.130 15.000 14.640 14.070 13.640 13.840 14.920 1674 74.481 79.637 0.0000 6.8996 8.9399 6.9578 16.507 0.88000 0.65000 1.3600 6.7300 18.710 25.280 25.650 23.710 20.790 17.600 15.060 13.060 11.190 9.6800 7.8500 6.1600 5.1900 4.5500 3.8100 3.5800 4.5400 6.6300 8.3300 9.2700 9.7600 9.9500 10.120 10.570 11.300 11.770 11.670 11.350 10.870 10.520 10.730 11.640 1675 87.138 91.826 0.0000 5.4564 6.3114 4.3503 14.506 0.90000 0.62000 1.3100 6.3500 17.560 23.590 23.610 21.350 18.170 14.730 12.010 9.9200 7.9800 6.4700 4.7100 3.2300 2.6200 2.3400 2.0000 1.9500 2.7500 4.2900 5.4000 5.8800 6.1200 6.2200 6.3200 6.7200 7.4500 7.9000 7.7500 7.4400 6.9400 6.5900 6.7800 7.6900 1676 81.551 100.00 0.0000 0.0000 7.2203 4.3712 14.145 0.60000 0.65000 1.3800 6.6500 18.080 24.080 23.660 21.030 17.530 13.820 10.960 8.7500 6.7600 5.2700 3.5300 2.1900 1.7400 1.7100 1.6100 1.7600 2.9300 5.2000 7.0300 8.0000 8.5100 8.7000 8.8600 9.3300 10.140 10.620 10.500 10.150 9.5900 9.1900 9.4300 10.370 1677 100.00 0.0000 27.719 0.0000 11.039 19.608 31.404 1.3400 0.85000 1.6400 7.7000 21.530 31.440 36.950 39.840 40.530 40.780 41.190 43.140 47.340 50.060 45.970 37.270 27.900 19.060 11.930 7.7800 5.7400 4.6900 3.8700 3.3200 3.1300 3.0600 3.0900 3.4200 4.0900 4.5300 4.4100 4.0900 3.6100 3.2900 3.5000 4.4500 1678 100.00 18.841 36.453 0.14926 8.5111 14.649 22.212 1.0100 0.76000 1.3900 6.1200 16.690 23.690 26.990 28.340 28.260 27.860 27.820 29.350 32.960 35.850 33.490 27.570 21.100 14.700 9.3200 6.1600 4.7400 4.1100 3.5400 3.1100 2.9600 2.9100 2.9400 3.2500 3.8900 4.3000 4.1700 3.8500 3.4300 3.1500 3.3900 4.2200 1679 100.00 0.0000 18.515 0.0000 12.452 20.798 38.975 1.7400 1.1100 1.7100 8.2700 25.400 38.880 46.660 50.740 51.370 51.290 51.060 51.820 53.650 53.430 47.590 38.230 28.550 19.490 12.200 7.9700 5.8900 4.8100 3.9800 3.4200 3.2200 3.1600 3.1600 3.5100 4.1800 4.6200 4.4800 4.1700 3.6800 3.3800 3.5800 4.5200 1680 91.974 26.946 24.420 9.0886 9.2796 13.314 22.511 0.78000 0.80000 1.3600 6.4300 17.990 25.630 28.690 29.590 28.980 28.020 27.250 27.380 28.360 28.780 26.440 22.240 17.760 13.170 9.1000 6.6800 5.6800 5.3900 5.0500 4.7400 4.6300 4.6100 4.6500 4.9900 5.6200 6.0400 5.9200 5.6300 5.1700 4.8600 5.0400 5.8800 1681 84.771 14.012 12.507 0.0000 15.662 21.524 38.982 1.5900 1.0700 1.7300 8.8800 27.870 42.370 49.270 51.960 51.280 49.840 48.430 47.710 47.400 45.890 41.180 34.370 27.360 20.520 14.710 11.260 9.7400 9.1800 8.6400 8.2200 8.0800 8.0300 8.0700 8.4700 9.2200 9.6900 9.5400 9.2100 8.6400 8.2800 8.5000 9.4500 1682 100.00 38.276 25.473 0.0000 8.2179 11.809 22.582 1.00000 0.84000 1.5600 6.7000 18.770 26.730 29.640 30.200 29.060 27.520 26.360 26.140 26.840 27.030 24.390 20.130 15.820 11.510 7.6300 5.3000 4.4200 4.2000 3.8400 3.5100 3.3700 3.3300 3.3500 3.7100 4.4200 4.8700 4.7400 4.3800 3.8700 3.5200 3.7100 4.6700 1683 100.00 20.378 24.832 2.1256 9.2701 14.751 26.057 1.3100 0.84000 1.4700 7.1100 19.750 28.400 32.410 33.980 33.690 32.950 32.430 32.950 34.580 35.290 32.170 26.570 20.560 14.560 9.4000 6.3100 4.9300 4.3100 3.7500 3.3100 3.1500 3.1100 3.1300 3.4800 4.1600 4.6200 4.4800 4.1600 3.6600 3.3500 3.5600 4.5200 1684 67.285 0.0000 10.201 0.0000 24.851 33.110 49.602 2.1500 1.3200 1.8900 10.150 33.150 51.670 60.860 64.910 65.170 64.600 63.860 63.840 64.470 63.320 57.860 49.430 40.550 32.100 25.190 21.090 18.970 17.830 16.890 16.250 16.020 15.950 15.990 16.440 17.270 17.790 17.650 17.280 16.700 16.260 16.510 17.600 1685 67.465 8.4209 18.555 3.3889 20.351 26.704 34.800 1.4300 0.94000 1.7400 8.8900 26.000 37.840 42.900 44.850 44.770 44.270 43.910 44.680 46.810 48.020 45.140 39.330 32.930 26.570 21.110 17.860 16.360 15.810 15.300 14.920 14.810 14.780 14.860 15.310 16.110 16.590 16.470 16.140 15.620 15.230 15.440 16.490 1686 80.715 0.0000 17.717 4.0863 17.338 25.369 38.591 1.6800 1.0300 1.7000 8.5100 26.410 40.000 46.780 49.930 50.260 50.010 49.790 50.710 53.000 53.820 49.500 41.610 33.080 24.870 18.110 14.110 12.080 11.010 10.140 9.5400 9.3300 9.2500 9.2900 9.6700 10.400 10.850 10.700 10.370 9.8700 9.4900 9.6900 10.650 1687 93.028 49.660 28.627 9.2732 6.7303 8.5863 16.028 0.89000 0.69000 1.3100 5.5600 14.620 20.080 21.670 21.560 20.440 19.020 17.960 17.630 17.900 17.900 16.120 13.360 10.740 8.1200 5.6900 4.2800 3.9300 4.1200 4.1500 4.0500 4.0000 4.0000 4.0600 4.3600 4.9400 5.3200 5.2200 4.9500 4.5600 4.2700 4.4700 5.2600 1688 100.00 58.529 24.415 0.0000 6.0836 7.5291 17.110 0.70000 0.61000 1.4100 6.0100 16.060 22.180 23.910 23.550 21.930 19.950 18.400 17.570 17.210 16.670 14.560 11.740 9.2700 6.8800 4.6500 3.3800 3.0700 3.2400 3.1900 3.0000 2.9300 2.9000 2.9500 3.2500 3.8900 4.3100 4.1800 3.8800 3.4500 3.1400 3.3500 4.2300 1689 100.00 53.753 34.706 0.0000 6.1087 8.2577 15.787 0.68000 0.61000 1.2400 5.6300 14.370 19.590 21.230 21.180 20.110 18.720 17.720 17.570 18.160 18.420 16.530 13.490 10.670 7.8800 5.3000 3.7900 3.3600 3.4600 3.3400 3.1100 3.0300 3.0000 3.0300 3.3700 4.0400 4.4700 4.3600 4.0300 3.5600 3.2400 3.4700 4.3500 1690 100.00 66.315 45.169 0.0000 4.9375 6.1124 11.606 0.59000 0.48000 1.2400 4.8100 11.620 15.340 16.150 15.680 14.580 13.230 12.280 12.150 12.740 13.120 11.600 9.2700 7.3600 5.6100 3.9100 2.9400 2.8500 3.1900 3.2400 3.0900 3.0300 3.0200 3.0500 3.4100 4.0700 4.5100 4.3700 4.0500 3.5800 3.2600 3.4600 4.3700 1691 84.514 46.064 21.714 0.0000 10.293 12.080 21.683 1.2100 0.82000 1.4700 6.9300 19.340 27.120 29.470 29.360 27.800 25.870 24.310 23.570 23.390 22.940 20.610 17.260 14.130 11.070 8.2200 6.5900 6.3800 7.0200 7.4200 7.5100 7.5800 7.6400 7.7100 8.1300 8.8700 9.3400 9.2200 8.9000 8.3800 8.0200 8.2400 9.2100 1692 85.273 29.708 11.457 7.4905 11.660 14.925 27.786 1.1400 0.98000 1.5300 7.6200 22.250 32.380 36.380 37.360 36.180 34.550 33.060 32.080 31.290 30.000 26.970 22.780 18.500 14.200 10.370 8.0900 7.2600 7.1900 7.0600 6.8500 6.8100 6.8000 6.8600 7.2100 7.8800 8.2900 8.1700 7.8800 7.4300 7.1100 7.3100 8.2500 1693 71.455 29.666 13.917 0.0000 17.168 20.322 32.278 1.3900 1.00000 1.6300 8.5500 26.120 38.260 42.600 43.280 41.750 39.690 37.980 37.060 36.720 35.880 32.730 28.160 23.610 19.120 15.070 12.730 12.170 12.720 13.110 13.200 13.320 13.360 13.450 13.910 14.730 15.240 15.090 14.740 14.170 13.750 13.970 15.020 1694 75.722 20.657 18.095 3.9200 15.594 20.037 30.366 1.1400 0.94000 1.5200 7.9000 23.610 34.550 38.870 40.070 39.220 37.920 36.880 36.730 37.450 37.520 34.650 29.780 24.660 19.510 14.960 12.270 11.260 11.180 11.050 10.870 10.820 10.820 10.890 11.300 12.050 12.530 12.400 12.050 11.540 11.160 11.340 12.370 1695 62.218 11.679 0.0000 8.4876 22.720 27.114 42.024 1.9100 1.1600 1.8100 9.8500 31.050 46.990 53.770 55.950 55.170 53.720 52.080 50.350 48.150 45.340 41.450 36.510 31.380 26.190 21.610 18.840 17.690 17.430 17.150 16.890 16.850 16.850 16.960 17.410 18.170 18.640 18.550 18.230 17.740 17.370 17.560 18.610 1696 59.191 15.131 11.915 1.7455 23.737 28.214 38.413 1.7900 1.1000 1.8200 9.7500 29.570 43.610 49.020 50.530 49.720 48.330 47.070 46.640 46.820 46.210 42.910 37.760 32.430 27.170 22.550 19.860 18.990 19.260 19.440 19.450 19.540 19.590 19.730 20.230 21.070 21.590 21.460 21.150 20.610 20.230 20.450 21.550 1697 47.099 7.6213 0.0000 0.0000 35.968 41.265 59.927 2.5600 1.4200 2.0800 11.810 41.320 66.680 77.410 80.470 79.010 76.550 73.910 71.190 67.970 64.000 58.740 52.260 45.750 39.480 34.090 30.950 29.680 29.530 29.350 29.160 29.140 29.120 29.200 29.710 30.560 31.010 30.900 30.530 29.940 29.570 29.730 30.810 1698 59.228 0.0000 6.4193 8.7489 25.549 32.182 45.866 1.8700 1.2100 1.7900 9.9100 31.970 49.270 57.050 60.130 60.040 59.330 58.440 57.860 57.360 55.610 51.380 45.120 38.340 31.640 25.960 22.560 20.770 19.810 19.030 18.490 18.330 18.250 18.300 18.720 19.440 19.870 19.770 19.480 19.000 18.640 18.830 19.810 1699 49.480 0.0000 7.9531 0.0000 33.544 41.406 53.851 2.2100 1.3500 1.9900 10.860 36.290 57.090 66.590 70.320 70.420 69.780 68.950 68.820 69.270 68.230 63.530 56.080 48.150 40.550 34.300 30.650 28.720 27.710 26.870 26.300 26.120 26.060 26.150 26.620 27.410 27.870 27.760 27.450 26.960 26.610 26.810 27.890 1700 29.007 0.0000 0.0000 0.0000 50.389 56.966 66.261 2.8700 1.7400 2.3500 13.200 45.080 72.530 83.670 86.960 86.570 85.430 83.930 82.280 80.150 77.220 73.210 67.800 62.000 56.240 51.280 48.380 46.770 45.980 45.280 44.840 44.760 44.730 44.910 45.440 46.270 46.730 46.660 46.400 46.010 45.760 46.000 47.080 1701 38.609 0.0000 0.0000 7.3914 37.289 43.014 54.402 2.1600 1.5200 2.0300 11.350 37.990 59.890 68.860 71.660 71.150 70.000 68.560 67.010 64.980 62.200 58.370 53.280 47.820 42.350 37.660 34.880 33.360 32.580 31.940 31.500 31.400 31.370 31.490 31.920 32.630 33.050 32.980 32.710 32.330 32.070 32.290 33.220 1702 95.515 68.187 28.401 6.9958 5.4556 5.9704 13.251 0.61000 0.65000 1.2200 5.3400 13.540 18.110 19.030 18.350 16.820 15.010 13.610 12.820 12.410 11.940 10.300 8.2300 6.6300 5.1800 3.7500 2.9700 3.0000 3.4900 3.6900 3.6500 3.6300 3.6400 3.6800 4.0100 4.6400 5.0500 4.9300 4.6400 4.1900 3.9000 4.0800 4.8900 1703 84.098 61.633 32.781 4.6003 8.0119 8.5868 14.220 0.84000 0.59000 1.2900 5.5300 14.070 18.770 19.760 19.250 17.960 16.410 15.240 14.820 14.960 14.980 13.410 11.130 9.2500 7.4900 5.7600 4.8400 5.0700 6.1100 6.8100 7.0800 7.2400 7.3300 7.4300 7.8400 8.5400 9.0100 8.8900 8.5600 8.0800 7.7300 7.9200 8.8500 1704 100.00 77.803 49.275 0.0000 4.0427 4.4134 9.0182 0.59000 0.53000 1.1800 4.3300 9.8500 12.660 13.000 12.390 11.250 9.9200 8.9600 8.6900 8.9900 9.1000 7.7300 5.9200 4.7000 3.7100 2.7100 2.1900 2.3300 2.8500 3.0300 2.9600 2.9300 2.9200 2.9700 3.3000 3.9300 4.3500 4.2200 3.9000 3.4700 3.1800 3.4000 4.2400 1705 73.471 56.155 14.084 9.2814 10.777 10.892 19.142 0.99000 0.70000 1.4000 6.6900 18.510 25.560 27.010 26.260 24.390 22.220 20.450 19.260 18.370 17.460 15.530 13.140 11.180 9.3300 7.5100 6.5700 6.9100 8.2500 9.2600 9.7500 10.040 10.170 10.290 10.710 11.420 11.850 11.770 11.470 11.000 10.650 10.860 11.820 1706 80.626 49.984 30.716 6.2159 9.4109 10.767 16.459 0.76000 0.63000 1.3300 5.7500 15.310 20.870 22.260 21.990 20.830 19.390 18.350 18.140 18.700 19.040 17.430 14.760 12.290 9.8600 7.5800 6.3000 6.3100 7.1600 7.7400 7.9700 8.1200 8.1800 8.2700 8.6500 9.3400 9.7800 9.6600 9.3600 8.9000 8.5700 8.7800 9.6500 1707 63.941 34.005 17.826 5.9060 17.119 19.028 25.892 1.1500 0.87000 1.4500 7.6100 22.360 31.780 34.440 34.430 33.040 31.300 29.940 29.430 29.660 29.610 27.550 24.250 21.010 17.790 14.780 13.090 13.040 14.150 15.040 15.480 15.740 15.860 15.990 16.450 17.230 17.710 17.590 17.270 16.780 16.370 16.540 17.560 1708 66.936 49.459 18.164 0.0000 15.156 15.403 23.429 1.1600 0.74000 1.4400 7.5500 21.880 30.710 32.570 31.850 29.780 27.380 25.530 24.490 24.020 23.440 21.270 18.320 15.760 13.360 11.010 9.7800 10.330 12.260 13.860 14.720 15.200 15.390 15.580 16.090 16.960 17.510 17.380 17.000 16.430 15.960 16.150 17.260 1709 88.980 47.900 14.092 8.9552 8.8614 10.513 21.351 0.91000 0.69000 1.4100 6.7100 19.100 26.910 29.290 29.180 27.530 25.480 23.800 22.690 21.820 20.780 18.430 15.380 12.520 9.6800 7.0500 5.5100 5.1700 5.5100 5.6400 5.5500 5.5700 5.5700 5.6200 5.9700 6.6100 7.0400 6.9100 6.6200 6.1500 5.8700 6.0100 6.8500 1710 82.111 53.855 14.661 1.9341 10.559 11.366 22.146 1.1100 0.79000 1.4900 7.2400 20.650 28.980 31.100 30.520 28.390 25.890 23.870 22.530 21.510 20.420 18.020 15.040 12.460 9.9800 7.6200 6.3100 6.3600 7.3300 7.9900 8.2300 8.3700 8.4300 8.5200 8.9400 9.7200 10.190 10.060 9.7000 9.1800 8.7900 9.0000 10.020 1711 67.946 38.833 0.0000 9.7510 15.479 16.505 28.432 1.2700 0.94000 1.6200 8.5300 25.070 35.750 38.930 38.750 36.760 34.310 32.140 30.240 28.270 26.270 23.650 20.600 17.770 14.970 12.320 10.810 10.780 11.780 12.540 12.910 13.140 13.250 13.380 13.830 14.560 15.010 14.930 14.620 14.130 13.780 13.970 14.940 1712 49.479 36.700 10.012 0.0000 23.485 23.508 30.574 1.5100 1.0200 1.6400 9.0500 27.190 38.730 41.550 41.020 39.020 36.610 34.650 33.420 32.630 31.690 29.330 26.160 23.370 20.710 18.190 16.930 17.730 20.380 22.750 24.230 25.070 25.440 25.750 26.340 27.260 27.810 27.720 27.400 26.880 26.510 26.720 27.870 1713 46.598 13.141 0.0000 9.5573 28.756 32.046 44.636 2.0500 1.1800 1.8700 10.290 33.940 52.020 58.490 59.700 58.140 55.970 53.860 51.850 49.620 47.040 43.620 39.330 35.010 30.700 26.840 24.580 23.900 24.270 24.550 24.660 24.770 24.810 24.930 25.370 26.060 26.480 26.370 26.100 25.680 25.350 25.510 26.460 1714 58.984 34.349 0.0000 0.0000 21.967 22.886 38.135 1.6800 1.0400 1.7600 9.8800 31.780 47.690 52.510 52.370 49.490 46.060 43.020 40.400 37.720 35.060 31.570 27.590 23.960 20.450 17.190 15.400 15.540 17.170 18.550 19.320 19.760 19.940 20.110 20.640 21.510 22.020 21.890 21.540 20.980 20.550 20.740 21.830 1715 40.169 20.467 0.0000 4.1185 32.200 33.745 45.390 1.9900 1.3300 1.9000 10.800 35.970 55.050 60.930 61.190 58.770 55.820 53.140 50.790 48.340 45.790 42.510 38.580 34.910 31.320 28.040 26.270 26.410 28.040 29.490 30.330 30.840 31.040 31.280 31.780 32.570 33.020 32.920 32.610 32.160 31.800 32.040 33.060 1716 55.983 24.766 8.6826 0.0000 23.858 26.413 37.012 1.7400 1.1100 1.7800 9.9300 30.140 44.030 48.720 49.360 47.800 45.710 43.880 42.670 41.790 40.470 37.340 33.050 28.830 24.670 20.900 18.770 18.540 19.700 20.640 21.150 21.490 21.650 21.830 22.380 23.270 23.820 23.710 23.360 22.810 22.410 22.620 23.770 1717 28.436 10.889 0.0000 0.0000 45.716 48.469 57.608 2.5900 1.5400 2.2000 12.290 42.350 67.210 75.760 76.820 74.830 72.120 69.550 67.180 64.720 62.040 58.550 54.240 50.120 46.130 42.510 40.590 40.500 41.900 43.100 43.860 44.360 44.580 44.830 45.390 46.230 46.700 46.660 46.410 46.020 45.740 45.960 47.010 1718 100.00 93.157 68.828 0.0000 3.1350 2.8324 5.4128 0.44000 0.49000 1.1600 3.4800 6.6900 8.0300 7.9800 7.4100 6.6300 5.7300 5.0700 4.9700 5.2400 5.2800 4.0800 2.7300 2.1500 1.9100 1.5900 1.5000 1.9500 2.7200 3.0900 3.0900 3.1000 3.1200 3.1700 3.5300 4.2100 4.6700 4.5200 4.2100 3.7100 3.4000 3.6100 4.5300 1719 100.00 93.981 54.535 7.9522 3.1363 2.6546 6.3992 0.53000 0.48000 1.1300 3.8200 7.9300 9.7400 9.7200 9.0100 7.9400 6.7300 5.7800 5.3200 5.1400 4.8400 3.6400 2.4300 1.9200 1.7300 1.4500 1.3800 1.7900 2.5000 2.8400 2.8600 2.8700 2.8800 2.9200 3.2500 3.8700 4.2800 4.1700 3.8700 3.4300 3.1300 3.3300 4.1700 1720 87.244 82.327 38.968 0.0000 6.1611 5.3696 10.657 0.58000 0.56000 1.2600 5.0100 12.130 15.750 15.980 14.910 13.300 11.480 10.080 9.3500 9.0200 8.6600 7.1600 5.4600 4.4700 3.7900 3.0500 2.7500 3.4100 4.8600 5.8900 6.3200 6.5400 6.6300 6.7400 7.1400 7.9000 8.3700 8.2400 7.9100 7.3800 7.0100 7.2000 8.1800 1721 74.897 68.440 13.499 5.2271 9.7924 8.8037 17.053 0.89000 0.69000 1.4600 6.7400 18.000 24.220 25.030 23.810 21.610 19.090 17.060 15.620 14.390 13.280 11.400 9.3500 7.9300 6.7400 5.5100 4.9600 5.7100 7.5500 8.9800 9.7300 10.120 10.290 10.440 10.910 11.690 12.180 12.070 11.740 11.220 10.860 11.060 12.070 1722 82.666 65.911 20.312 0.0000 8.7112 8.4779 17.159 0.98000 0.70000 1.3500 6.4300 17.470 23.800 24.870 23.910 21.790 19.380 17.470 16.250 15.350 14.490 12.490 10.150 8.3800 6.8400 5.3100 4.5300 4.9700 6.3100 7.2800 7.7000 7.9300 8.0400 8.1500 8.5700 9.3300 9.8100 9.6700 9.3500 8.8400 8.4700 8.7100 9.6700 1723 97.486 82.902 46.386 5.5139 4.2654 4.2071 9.2288 0.77000 0.60000 1.2200 4.5000 10.410 13.370 13.630 12.840 11.520 10.040 8.8900 8.3800 8.2800 8.0900 6.6800 5.0200 4.0400 3.3100 2.5400 2.1600 2.4500 3.1400 3.4400 3.4300 3.4000 3.4200 3.4700 3.8000 4.4600 4.8900 4.7400 4.4300 3.9700 3.6100 3.8200 4.6800 1724 100.00 91.961 35.448 0.0000 3.8310 3.1110 9.4925 0.76000 0.59000 1.2400 4.7800 11.460 14.760 14.850 13.670 11.900 9.8800 8.3100 7.2800 6.5200 5.8000 4.3200 2.9100 2.2900 2.0000 1.6500 1.5400 1.9300 2.6600 3.0000 3.0100 3.0000 3.0100 3.0600 3.4000 4.0600 4.4900 4.3500 4.0500 3.5900 3.2700 3.5100 4.3600 1725 73.791 62.972 31.304 0.0000 10.470 10.233 15.507 0.78000 0.67000 1.3400 6.1000 15.760 20.950 21.810 21.050 19.520 17.690 16.330 15.760 15.800 15.760 14.120 11.810 9.9900 8.3800 6.7800 6.0000 6.6800 8.5600 10.040 10.810 11.240 11.420 11.580 12.080 12.910 13.440 13.310 12.950 12.400 12.010 12.190 13.260 1726 62.888 60.946 20.200 5.7184 13.199 12.041 17.628 0.84000 0.69000 1.3200 6.5200 18.000 24.390 25.240 24.130 22.180 19.990 18.320 17.310 16.750 16.240 14.560 12.460 10.880 9.5200 8.1400 7.5700 8.5900 11.120 13.330 14.630 15.310 15.620 15.830 16.320 17.110 17.600 17.500 17.200 16.710 16.360 16.530 17.470 1727 47.984 53.494 0.0000 7.2418 19.578 17.315 25.435 1.2800 0.79000 1.5900 8.7100 25.450 35.230 36.610 35.010 32.240 29.160 26.630 24.590 22.650 20.980 18.870 16.640 15.060 13.720 12.340 11.850 13.300 16.700 19.840 21.860 22.990 23.480 23.820 24.370 25.200 25.700 25.630 25.360 24.920 24.600 24.810 25.800 1728 54.243 39.106 0.0000 7.3378 21.253 21.140 32.746 1.4200 1.0200 1.6800 9.2200 29.110 42.580 45.710 44.840 42.060 38.860 36.140 33.880 31.630 29.510 26.800 23.740 21.140 18.620 16.190 14.920 15.500 17.600 19.370 20.380 20.940 21.150 21.320 21.810 22.630 23.070 22.950 22.640 22.110 21.690 21.890 22.850 1729 52.421 48.527 8.1166 0.0000 20.012 18.729 27.348 1.2900 0.95000 1.5400 8.5000 25.760 36.610 38.660 37.470 34.800 31.790 29.380 27.660 26.230 24.860 22.500 19.720 17.480 15.430 13.460 12.570 13.700 16.780 19.620 21.400 22.390 22.810 23.110 23.690 24.550 25.060 24.960 24.650 24.150 23.790 24.000 25.080 1730 61.450 53.133 0.0000 8.3541 15.429 14.563 25.192 1.0100 0.79000 1.4200 8.0400 24.030 34.080 36.100 34.920 32.230 29.180 26.660 24.600 22.570 20.740 18.410 15.900 13.890 12.050 10.240 9.3700 10.100 12.250 14.070 15.130 15.720 15.960 16.160 16.630 17.380 17.840 17.760 17.450 16.990 16.630 16.830 17.790 1731 30.565 25.204 0.0000 0.0000 37.945 37.273 45.581 2.2100 1.3300 1.9500 11.250 37.480 57.090 62.200 61.500 58.590 55.200 52.260 49.790 47.390 45.100 42.180 38.860 36.010 33.370 30.870 29.760 30.930 34.300 37.540 39.740 41.000 41.530 41.930 42.570 43.440 43.950 43.910 43.660 43.240 42.980 43.250 44.330 1732 94.797 100.00 58.452 0.0000 3.6637 2.7386 6.3339 0.55000 0.36000 1.0900 3.8100 7.9700 9.8400 9.8000 8.9600 7.8500 6.5700 5.5800 5.0700 4.8200 4.4400 3.1300 1.8900 1.4800 1.4100 1.2700 1.3300 1.9700 3.1100 3.8000 4.0000 4.0900 4.1400 4.2100 4.6100 5.3400 5.8200 5.6900 5.3400 4.8300 4.4800 4.6500 5.6100 1733 68.611 85.380 27.663 0.0000 9.9316 7.3178 12.927 0.94000 0.73000 1.4100 5.9800 15.410 20.060 19.990 18.300 16.070 13.580 11.670 10.450 9.5400 8.7700 7.1200 5.4400 4.6300 4.1800 3.6500 3.6300 5.1000 8.2400 10.970 12.550 13.370 13.700 13.930 14.480 15.360 15.890 15.760 15.390 14.800 14.360 14.520 15.610 1734 76.271 79.588 21.515 8.4697 8.0237 6.5477 12.751 0.68000 0.64000 1.2900 5.6400 14.530 19.000 19.220 17.950 15.990 13.830 12.080 10.910 9.9600 9.1400 7.6000 6.0100 5.0800 4.4200 3.7100 3.4800 4.4000 6.4000 8.0000 8.8400 9.2800 9.4700 9.6300 10.090 10.830 11.310 11.200 10.890 10.400 10.030 10.250 11.150 1735 82.187 100.00 44.288 5.8065 5.3867 3.6207 7.5038 0.59000 0.52000 1.2300 4.3100 9.6400 12.030 11.860 10.770 9.2800 7.6500 6.3800 5.5800 5.0000 4.4400 3.1700 2.0000 1.6200 1.6000 1.5000 1.6400 2.6300 4.5400 6.0700 6.8400 7.2500 7.4200 7.5500 7.9500 8.6600 9.1100 9.0000 8.7000 8.2300 7.9100 8.0700 9.0100 1736 65.406 85.896 0.0000 9.4217 9.9150 6.9130 15.012 0.72000 0.67000 1.3900 6.5700 18.130 24.110 23.930 21.690 18.680 15.490 12.990 11.030 9.2500 7.8500 6.2100 4.7800 4.1100 3.7600 3.3700 3.4000 4.7800 7.7200 10.370 11.970 12.820 13.170 13.420 13.910 14.640 15.110 15.020 14.730 14.260 13.920 14.130 15.060 1737 91.718 94.221 37.636 6.8703 4.2694 3.2385 8.2982 0.45000 0.50000 1.1800 4.4100 10.210 12.950 12.950 11.890 10.360 8.6300 7.2700 6.4100 5.7500 5.1200 3.8100 2.5700 2.0600 1.8600 1.6100 1.5900 2.2000 3.3100 4.0500 4.3100 4.4300 4.4900 4.5800 4.9400 5.5900 6.0200 5.9000 5.6100 5.1700 4.8300 5.0200 5.8900 1738 84.861 100.00 25.942 5.6979 5.5762 3.6284 9.4423 0.66000 0.53000 1.2000 4.9500 12.070 15.410 15.220 13.750 11.750 9.5500 7.8100 6.5700 5.4900 4.5900 3.1900 1.9700 1.5700 1.5500 1.4400 1.5800 2.5600 4.4200 5.8500 6.5500 6.9100 7.0700 7.1900 7.6200 8.3500 8.8200 8.7100 8.3800 7.9000 7.5400 7.7200 8.6400 1739 68.004 72.774 24.961 0.0000 11.370 9.4868 15.008 0.76000 0.61000 1.4200 6.5200 16.660 21.800 22.120 20.800 18.800 16.490 14.730 13.660 13.000 12.410 10.730 8.8000 7.5700 6.6400 5.6400 5.3200 6.5900 9.4700 11.950 13.430 14.210 14.540 14.790 15.350 16.250 16.790 16.680 16.330 15.760 15.320 15.520 16.600 1740 45.347 69.406 6.0139 5.1567 17.749 13.601 19.334 0.97000 0.72000 1.4900 7.7200 21.630 28.930 29.070 26.970 24.140 21.080 18.690 16.890 15.290 13.990 12.190 10.410 9.4200 8.8200 8.1400 8.1900 10.410 15.180 19.750 22.890 24.620 25.380 25.840 26.490 27.370 27.870 27.830 27.550 27.150 26.830 27.020 28.020 1741 55.511 74.090 0.0000 0.0000 15.372 11.591 20.457 0.98000 0.80000 1.4900 8.2000 23.160 31.220 31.440 28.970 25.630 21.980 19.090 16.840 14.750 13.070 11.020 9.0900 8.0000 7.2800 6.4800 6.3700 8.2600 12.420 16.320 18.850 20.230 20.840 21.220 21.870 22.790 23.340 23.260 22.940 22.420 22.040 22.240 23.320 1742 64.803 66.613 0.0000 0.0000 14.193 11.850 23.767 1.0200 0.83000 1.5800 8.2800 24.920 34.950 35.990 33.740 30.070 26.100 22.940 20.450 18.090 16.140 13.710 11.340 9.7800 8.5600 7.2500 6.7500 8.0500 11.020 13.510 14.950 15.690 15.970 16.220 16.750 17.650 18.190 18.040 17.660 17.080 16.580 16.800 17.880 1743 56.781 68.075 0.0000 7.2752 14.378 11.605 20.334 0.97000 0.72000 1.4200 7.5000 21.890 30.050 30.660 28.630 25.630 22.320 19.710 17.630 15.680 14.080 12.100 10.170 8.9700 8.0900 7.1300 6.8900 8.3800 11.710 14.700 16.580 17.600 18.020 18.310 18.830 19.610 20.100 20.020 19.730 19.280 18.950 19.130 20.020 1744 44.886 59.334 0.0000 0.0000 21.361 17.605 26.480 1.3100 0.89000 1.6300 8.9500 27.150 38.210 39.310 36.900 33.380 29.580 26.550 24.140 21.910 20.060 17.750 15.450 13.940 12.780 11.570 11.270 13.320 17.950 22.410 25.430 27.110 27.830 28.290 28.950 29.880 30.430 30.380 30.070 29.570 29.220 29.430 30.570 1745 37.437 46.286 0.0000 0.0000 27.650 24.288 32.092 1.7300 1.0800 1.8900 10.390 31.160 44.020 45.890 43.930 40.660 37.040 34.080 31.700 29.480 27.570 25.150 22.610 20.790 19.300 17.770 17.320 19.370 24.160 28.820 32.060 33.890 34.670 35.200 35.910 36.870 37.440 37.410 37.130 36.660 36.350 36.590 37.700 1746 54.917 100.00 0.0000 8.9886 11.054 6.3056 12.898 0.78000 0.52000 1.3100 6.4200 17.380 22.590 21.630 18.930 15.770 12.440 9.8900 7.9200 6.1600 4.8500 3.3200 2.1000 1.7500 1.8100 1.8200 2.1900 4.2800 8.6900 12.990 15.860 17.420 18.100 18.510 19.070 19.870 20.350 20.280 20.030 19.580 19.260 19.450 20.380 1747 46.234 87.150 8.5709 8.2436 14.521 9.4594 14.559 1.1100 0.71000 1.4300 6.7600 18.300 23.840 23.200 20.800 17.920 14.870 12.510 10.760 9.2100 8.0000 6.4200 5.0000 4.4500 4.3300 4.1300 4.4600 6.8700 12.030 17.130 20.660 22.630 23.470 23.970 24.600 25.470 25.970 25.930 25.670 25.270 24.940 25.160 26.120 1748 65.537 100.00 0.0000 0.0000 10.045 5.7934 14.209 0.72000 0.60000 1.3000 6.8100 18.780 24.710 23.950 20.970 17.440 13.710 10.840 8.6600 6.6900 5.2200 3.5200 2.1700 1.7600 1.8100 1.7500 2.0600 3.9200 7.7200 11.230 13.430 14.600 15.100 15.420 16.000 16.900 17.450 17.330 17.000 16.450 16.030 16.230 17.300 1749 55.474 86.766 0.0000 3.6739 13.211 8.8013 16.385 0.94000 0.69000 1.4300 7.4100 20.260 26.610 26.190 23.550 20.290 16.810 14.090 12.000 10.050 8.5700 6.7900 5.2400 4.5600 4.3000 3.9500 4.1400 6.2100 10.610 14.790 17.550 19.070 19.720 20.120 20.750 21.630 22.180 22.100 21.830 21.330 20.950 21.140 22.200 1750 72.726 100.00 24.347 0.0000 7.6327 4.7128 10.625 0.79000 0.68000 1.3100 5.4900 13.830 17.740 17.380 15.510 13.120 10.560 8.5500 7.1100 5.9100 4.9200 3.4200 2.1400 1.7400 1.7600 1.6700 1.9000 3.2800 6.1100 8.5900 10.050 10.780 11.120 11.320 11.830 12.640 13.160 13.030 12.700 12.170 11.790 12.010 12.960 1751 50.393 100.00 0.0000 0.0000 13.692 7.6640 14.603 0.85000 0.63000 1.3200 7.1100 19.820 25.890 24.680 21.450 17.770 13.940 11.020 8.8100 6.8200 5.3700 3.6600 2.2900 1.9100 2.0000 2.0100 2.4800 5.0800 10.700 16.320 20.270 22.470 23.440 23.980 24.700 25.680 26.250 26.190 25.880 25.370 24.980 25.200 26.240 1752 100.00 0.0000 40.094 0.0000 9.8540 18.779 24.764 1.3000 0.82000 1.5000 6.2600 17.180 24.670 28.550 30.600 31.150 31.520 32.260 35.230 41.770 47.760 45.440 37.100 27.750 18.890 11.780 7.6500 5.6400 4.6100 3.7900 3.2600 3.0700 3.0000 3.0300 3.3600 4.0100 4.4200 4.3000 3.9800 3.5400 3.2600 3.4700 4.3900 1753 100.00 0.0000 45.940 8.1372 9.1552 17.382 21.314 1.3500 0.90000 1.4500 5.8300 15.330 21.570 24.540 26.060 26.540 26.850 27.590 30.470 36.730 42.620 41.190 34.230 26.070 18.040 11.450 7.5700 5.6400 4.6400 3.8500 3.3200 3.1400 3.0700 3.0600 3.3800 4.0000 4.4000 4.2600 3.9700 3.5300 3.2500 3.4500 4.2200 1754 86.432 3.6913 32.996 6.0877 12.446 19.792 25.908 1.2900 0.82000 1.4200 6.6200 18.630 26.900 30.820 32.630 32.940 32.960 33.260 35.240 39.620 43.300 41.140 34.700 27.350 20.070 14.050 10.490 8.7500 7.8900 7.1800 6.6800 6.5100 6.4600 6.5000 6.8300 7.4700 7.8900 7.7500 7.4600 7.0300 6.7300 6.9100 7.8400 1755 100.00 18.840 50.456 0.0000 7.7316 14.191 16.715 0.94000 0.69000 1.2900 5.1700 12.760 17.480 19.510 20.430 20.610 20.640 21.150 23.570 28.860 33.870 32.800 27.400 21.180 14.920 9.5800 6.4000 4.9600 4.3200 3.7200 3.2800 3.1100 3.0600 3.1000 3.4300 4.1100 4.5500 4.4200 4.1000 3.6200 3.2900 3.5100 4.4100 1756 100.00 32.624 58.952 7.4559 6.2100 10.647 12.118 0.85000 0.74000 1.3100 4.4900 10.200 13.470 14.610 14.900 14.730 14.490 14.680 16.450 20.410 24.170 23.460 19.760 15.600 11.290 7.4500 5.1500 4.2400 3.9300 3.5600 3.2200 3.1000 3.0500 3.0800 3.3900 4.0200 4.4100 4.2700 4.0000 3.5400 3.2500 3.4600 4.2600 1757 100.00 0.0000 32.481 9.6083 9.4950 16.983 25.046 1.1400 0.85000 1.4600 6.4500 17.670 25.390 29.370 31.450 31.980 32.260 32.760 34.720 38.750 41.750 39.090 32.370 24.720 17.170 10.920 7.2000 5.3600 4.4000 3.6500 3.1400 2.9600 2.9000 2.9200 3.2300 3.8500 4.2600 4.1300 3.8500 3.3900 3.1100 3.3200 4.2100 1758 75.152 0.0000 23.880 0.0000 18.843 27.683 36.780 1.5900 1.0300 1.6900 8.3200 25.410 37.990 44.100 46.880 47.330 47.250 47.440 49.380 53.810 57.070 53.530 45.210 36.100 27.440 20.410 16.300 14.210 13.120 12.230 11.620 11.390 11.320 11.370 11.770 12.540 13.010 12.850 12.530 11.990 11.610 11.810 12.830 1759 83.095 0.0000 39.268 0.0000 14.830 23.941 26.299 1.1900 0.88000 1.5800 7.0900 18.980 26.760 30.480 32.260 32.820 33.210 34.040 37.170 44.120 50.990 49.720 42.070 33.180 24.610 17.640 13.530 11.480 10.390 9.5100 8.9200 8.7100 8.6400 8.6900 9.0600 9.8500 10.320 10.200 9.8300 9.3000 8.9600 9.1500 10.200 1760 100.00 47.512 44.394 0.0000 6.1090 9.0259 14.650 0.86000 0.66000 1.2800 5.2600 13.040 17.650 19.110 19.180 18.430 17.420 16.840 17.350 19.110 20.480 18.870 15.550 12.250 8.9400 5.9300 4.1800 3.5800 3.5600 3.3600 3.1000 3.0100 2.9700 3.0000 3.3400 3.9800 4.4100 4.2800 3.9700 3.5200 3.2000 3.4300 4.3200 1761 92.886 50.719 56.940 0.0000 6.7915 9.4831 12.002 0.99000 0.74000 1.3000 4.7000 11.030 14.540 15.430 15.320 14.750 14.020 13.730 14.740 17.320 19.590 18.430 15.370 12.370 9.3900 6.6100 5.0100 4.6600 4.9900 5.0500 4.9100 4.8800 4.8600 4.9000 5.2800 6.0100 6.4800 6.3300 5.9700 5.4500 5.1000 5.2900 6.2300 1762 87.673 22.838 43.613 0.0000 10.776 16.293 19.736 1.2000 0.79000 1.4400 5.9900 15.740 21.820 24.170 24.900 24.640 24.190 24.160 25.880 30.060 33.970 32.680 27.750 22.220 16.670 11.810 8.9500 7.8000 7.5100 7.1800 6.8600 6.7600 6.7200 6.7800 7.1700 7.9300 8.4000 8.2700 7.9200 7.3800 7.0100 7.2300 8.2100 1763 72.253 23.505 36.371 0.0000 15.331 20.132 23.060 1.00000 0.93000 1.4900 6.7200 18.660 26.170 28.800 29.440 28.950 28.240 27.960 29.300 32.850 36.130 34.740 30.180 25.150 20.100 15.610 13.000 12.160 12.350 12.420 12.350 12.390 12.410 12.490 12.950 13.770 14.270 14.130 13.790 13.210 12.790 13.000 14.040 1764 100.00 36.105 46.242 3.8262 6.4124 10.315 15.137 0.81000 0.76000 1.2900 5.1200 12.740 17.340 19.010 19.400 18.970 18.340 18.080 19.090 21.710 23.910 22.470 18.700 14.630 10.500 6.8300 4.6800 3.8300 3.5900 3.2800 2.9700 2.8700 2.8400 2.8700 3.1700 3.7600 4.1600 4.0400 3.7500 3.3400 3.0500 3.2800 4.1100 1765 84.992 25.303 31.167 1.3776 11.714 16.435 22.967 1.1000 0.80000 1.4800 6.7700 18.390 25.820 28.710 29.610 29.220 28.500 28.110 28.970 31.350 33.170 31.120 26.480 21.460 16.390 11.890 9.2400 8.2300 8.0700 7.8500 7.6100 7.5400 7.5300 7.5900 8.0000 8.7500 9.2400 9.0900 8.7600 8.2600 7.8800 8.1100 9.1000 1766 87.627 34.345 52.036 5.0336 8.2624 12.094 13.455 0.97000 0.64000 1.2800 4.7600 11.480 15.260 16.570 16.800 16.540 16.130 16.150 17.620 21.100 24.360 23.590 20.130 16.290 12.360 8.8500 6.7900 6.1100 6.1600 6.1000 5.9400 5.9000 5.9000 5.9500 6.3000 6.9400 7.3400 7.2100 6.9400 6.4900 6.2100 6.3800 7.3000 1767 61.434 8.7466 27.089 9.3075 20.705 26.562 28.736 1.4900 1.0300 1.6200 7.5800 22.220 31.840 35.400 36.530 36.330 35.890 35.800 37.190 40.670 43.790 42.480 37.840 32.470 26.990 22.210 19.360 18.100 17.710 17.310 17.000 16.920 16.880 16.960 17.370 18.090 18.520 18.400 18.090 17.620 17.280 17.440 18.360 1768 58.428 0.0000 19.417 0.25836 26.977 35.525 41.227 1.9800 1.2100 1.8800 9.7800 29.450 43.620 49.830 52.420 52.840 52.810 52.970 54.740 58.690 61.650 58.800 51.600 43.530 35.660 29.160 25.300 23.300 22.240 21.350 20.750 20.560 20.510 20.600 21.090 21.950 22.470 22.320 21.990 21.440 21.040 21.250 22.380 1769 56.489 10.933 26.230 0.0000 25.568 32.059 34.127 1.4700 1.0700 1.6800 8.5500 26.010 38.000 42.320 43.580 43.210 42.470 42.210 43.790 47.990 51.910 50.310 44.690 38.390 32.120 26.720 23.550 22.330 22.240 22.080 21.890 21.860 21.850 21.940 22.420 23.250 23.750 23.590 23.230 22.650 22.220 22.380 23.490 1770 65.060 0.0000 29.568 0.0000 23.031 32.197 34.296 1.5700 1.1600 1.6600 8.2200 24.580 36.040 40.940 43.000 43.310 43.340 43.790 46.480 52.740 58.780 57.220 49.780 41.180 32.830 25.990 21.970 19.890 18.790 17.850 17.220 16.980 16.900 16.960 17.410 18.240 18.740 18.600 18.240 17.680 17.240 17.440 18.500 1771 70.281 0.0000 27.033 8.7676 17.709 25.190 29.581 1.4100 0.99000 1.5300 7.3900 21.530 31.160 35.450 37.310 37.590 37.620 37.920 39.820 44.010 47.610 45.790 39.790 32.770 25.740 19.870 16.340 14.520 13.560 12.770 12.240 12.060 12.010 12.060 12.450 13.160 13.590 13.490 13.170 12.700 12.350 12.550 13.560 1772 40.857 0.0000 17.173 0.0000 37.581 45.816 45.018 2.3000 1.3500 1.9700 10.180 32.410 48.860 55.180 57.250 57.280 56.980 56.980 58.830 63.370 67.590 66.150 60.230 53.290 46.370 40.640 37.290 35.490 34.560 33.770 33.240 33.090 33.050 33.160 33.680 34.500 34.990 34.900 34.580 34.120 33.760 34.000 35.110 1773 100.00 60.110 60.078 6.0349 4.3906 6.1837 8.8246 0.59000 0.53000 1.1500 3.9800 8.6500 11.080 11.620 11.400 10.830 10.140 9.7800 10.390 12.070 13.480 12.440 10.160 8.0800 6.0500 4.1400 3.0600 2.8400 3.0300 3.0100 2.8300 2.7700 2.7600 2.7900 3.0900 3.6800 4.0500 3.9400 3.6600 3.2600 3.0100 3.2100 3.9800 1774 87.571 60.088 57.160 5.0182 6.6432 7.9157 9.5334 0.58000 0.64000 1.1400 4.1600 9.3900 12.000 12.560 12.290 11.700 10.980 10.600 11.210 12.880 14.300 13.330 11.120 9.1900 7.3400 5.5400 4.5500 4.6700 5.5100 6.0100 6.1400 6.2300 6.2800 6.3600 6.7600 7.4800 7.9500 7.8200 7.4900 7.0000 6.6300 6.8400 7.7600 1775 89.452 53.720 44.453 0.0000 7.5290 9.4574 13.856 0.79000 0.67000 1.3900 5.5300 13.190 17.300 18.390 18.180 17.320 16.240 15.530 15.870 17.310 18.480 17.040 14.200 11.550 8.9500 6.5000 5.1100 4.9500 5.5100 5.7900 5.8000 5.8200 5.8500 5.9400 6.3300 7.0600 7.5400 7.4100 7.0600 6.5700 6.2000 6.4100 7.3800 1776 100.00 66.581 54.387 8.4760 4.2499 5.3902 8.7974 0.59000 0.53000 1.2300 4.1700 9.0700 11.500 11.980 11.640 10.900 10.010 9.4200 9.6200 10.600 11.320 10.170 8.1800 6.5500 5.0300 3.5700 2.7300 2.6600 3.0000 3.0700 2.9400 2.8900 2.8700 2.9200 3.2300 3.8500 4.2500 4.1400 3.8500 3.4100 3.1200 3.3100 4.1100 1777 76.407 32.227 29.247 0.0000 13.243 16.638 23.191 1.1200 0.76000 1.4700 6.9400 19.410 27.290 30.010 30.410 29.510 28.260 27.410 27.700 29.310 30.510 28.510 24.440 20.250 16.050 12.280 10.100 9.5500 9.9800 10.250 10.280 10.350 10.390 10.490 10.930 11.720 12.190 12.070 11.740 11.200 10.820 11.040 12.100 1778 67.949 28.046 32.329 6.5859 15.021 18.358 21.199 1.1900 0.80000 1.3900 6.4200 17.840 24.840 27.000 27.340 26.690 25.790 25.310 26.030 28.300 30.330 29.100 25.630 21.880 18.040 14.540 12.530 12.050 12.590 12.970 13.090 13.210 13.260 13.370 13.800 14.540 15.000 14.900 14.580 14.070 13.750 13.910 14.920 1779 78.070 45.296 50.205 0.0000 10.318 12.588 13.610 0.91000 0.70000 1.3200 5.1800 12.480 16.500 17.530 17.400 16.730 15.950 15.590 16.580 19.280 21.840 20.920 17.920 14.980 12.060 9.3100 7.7800 7.7600 8.7200 9.3700 9.6100 9.7700 9.8300 9.9400 10.390 11.170 11.680 11.520 11.170 10.640 10.240 10.470 11.390 1780 74.341 41.129 34.697 4.7539 12.251 14.504 18.639 1.0400 0.78000 1.4400 6.2200 16.560 22.760 24.450 24.420 23.450 22.260 21.480 21.790 23.320 24.600 23.150 20.040 16.920 13.800 10.910 9.2600 9.1100 9.9500 10.520 10.740 10.910 10.970 11.070 11.490 12.240 12.690 12.550 12.260 11.740 11.400 11.580 12.530 1781 85.588 38.943 41.332 8.0337 8.9732 11.920 15.396 0.81000 0.66000 1.2800 5.4500 13.520 18.180 19.640 19.820 19.270 18.540 18.150 18.880 20.950 22.700 21.500 18.410 15.150 11.820 8.7700 6.9800 6.4900 6.7400 6.8200 6.7600 6.7500 6.7600 6.8300 7.1900 7.8800 8.3100 8.2000 7.8900 7.4500 7.0900 7.3400 8.1400 1782 60.358 25.573 21.659 0.0000 20.860 24.183 30.296 1.4200 0.93000 1.6800 8.3100 24.810 35.760 39.320 39.780 38.630 37.110 35.990 36.070 37.410 38.380 36.170 31.880 27.480 23.090 19.160 16.920 16.560 17.490 18.230 18.600 18.850 18.970 19.110 19.610 20.470 20.960 20.840 20.490 19.950 19.530 19.750 20.840 1783 56.126 27.684 29.175 5.0969 20.111 22.709 23.888 1.2500 0.96000 1.5300 7.2300 20.540 28.600 30.780 30.890 29.990 28.870 28.180 28.820 31.040 33.100 31.970 28.680 25.250 21.790 18.610 16.860 16.830 18.080 19.100 19.660 20.000 20.160 20.300 20.770 21.550 22.000 21.890 21.610 21.120 20.760 20.930 21.970 1784 45.998 11.925 18.869 6.4035 27.634 32.147 33.387 1.7400 1.0900 1.7900 8.8800 26.480 37.990 41.850 42.820 42.400 41.670 41.250 42.000 44.180 46.000 44.550 40.670 36.320 31.880 27.920 25.610 24.910 25.230 25.440 25.530 25.650 25.730 25.890 26.390 27.150 27.620 27.540 27.250 26.830 26.520 26.750 27.770 1785 54.738 10.869 17.896 0.0000 26.863 32.639 37.930 1.7800 1.1300 1.8600 9.8800 29.150 42.310 47.390 48.940 48.530 47.690 47.120 47.850 50.180 51.880 49.430 43.980 38.070 32.180 27.110 24.170 23.060 23.060 23.020 22.920 22.960 22.980 23.110 23.630 24.470 25.000 24.900 24.560 24.000 23.630 23.820 24.920 1786 22.590 0.15221 0.0000 8.1749 47.585 52.470 56.536 2.6800 1.5800 2.1300 11.860 40.550 64.120 72.380 74.030 73.140 71.810 70.430 69.060 67.570 65.710 63.270 59.830 56.080 52.190 48.740 46.720 45.570 45.000 44.520 44.230 44.190 44.180 44.350 44.810 45.440 45.790 45.760 45.610 45.350 45.200 45.400 46.290 1787 37.473 0.0000 8.3600 4.4200 38.089 44.734 50.634 2.2500 1.4400 2.0300 10.930 35.930 55.560 63.300 65.720 65.500 64.730 64.010 64.000 64.750 64.560 61.580 56.270 50.410 44.540 39.580 36.650 35.070 34.250 33.560 33.130 33.010 32.980 33.090 33.560 34.290 34.730 34.660 34.400 33.990 33.730 33.960 35.000 1788 23.737 0.0000 8.3183 2.9052 51.174 57.729 55.721 2.5900 1.6100 2.1600 11.840 39.900 62.260 70.060 71.890 71.430 70.510 69.850 70.290 72.070 73.310 71.700 67.650 62.920 58.030 53.800 51.350 50.000 49.320 48.720 48.360 48.310 48.300 48.450 48.950 49.700 50.120 50.070 49.850 49.530 49.330 49.570 50.560 1789 84.054 70.034 54.833 3.3850 6.8522 7.0493 9.2943 0.73000 0.69000 1.3400 4.3900 9.8700 12.570 12.870 12.360 11.440 10.380 9.6700 9.8600 10.860 11.690 10.500 8.5300 7.0900 5.8600 4.6100 4.0100 4.5300 5.8700 6.8100 7.1900 7.3800 7.4800 7.5800 8.0000 8.7500 9.2100 9.0800 8.7300 8.2400 7.8600 8.0300 9.0100 1790 100.00 76.435 66.690 0.0000 4.0295 4.7990 7.1444 0.63000 0.54000 1.1800 3.8100 7.7600 9.6200 9.8500 9.3900 8.7000 7.8800 7.4100 7.7600 8.9500 9.8300 8.6500 6.7100 5.3700 4.2500 3.1200 2.5000 2.6700 3.2300 3.4300 3.3200 3.2800 3.2600 3.3000 3.6600 4.3600 4.8100 4.6600 4.3200 3.8200 3.4800 3.6800 4.5600 1791 100.00 84.429 82.950 0.0000 3.2508 3.6469 4.5505 0.38000 0.41000 1.1500 3.0700 5.3300 6.2100 6.1900 5.8400 5.3900 4.9100 4.6400 5.1000 6.2900 7.1700 6.1900 4.6200 3.7000 3.0400 2.3300 2.0000 2.2800 2.9500 3.2200 3.1800 3.1600 3.1500 3.1900 3.5400 4.2200 4.6700 4.5500 4.2200 3.7400 3.4100 3.5900 4.4800 1792 86.317 74.606 69.242 9.3379 5.5337 5.7269 6.3021 0.59000 0.50000 1.2000 3.5600 6.9800 8.4700 8.5500 8.1600 7.5800 6.9300 6.5800 7.0200 8.3200 9.3700 8.4900 6.8200 5.6800 4.7400 3.7800 3.3200 3.8300 5.0500 5.8800 6.1700 6.3100 6.3900 6.4700 6.8500 7.5500 8.0000 7.8500 7.5200 7.0700 6.6800 6.8400 7.7700 1793 100.00 82.387 66.504 7.6226 3.4308 3.7333 5.8930 0.54000 0.45000 1.1100 3.4400 6.7500 8.2200 8.3000 7.8600 7.1700 6.4200 5.9000 6.0600 6.8000 7.3100 6.2500 4.7200 3.8000 3.1100 2.3800 2.0100 2.2600 2.8600 3.1000 3.0500 3.0300 3.0300 3.0700 3.3800 4.0100 4.4300 4.3000 4.0000 3.5400 3.2700 3.4500 4.3000 1794 76.833 56.332 41.105 0.0000 9.7071 10.640 14.264 0.86000 0.63000 1.3400 5.3900 13.680 18.340 19.310 18.930 17.820 16.520 15.660 15.780 16.920 17.880 16.480 13.900 11.620 9.4400 7.3700 6.2800 6.5800 7.9200 8.9200 9.3900 9.6800 9.7800 9.9000 10.340 11.100 11.570 11.440 11.100 10.580 10.250 10.480 11.390 1795 60.875 42.583 25.078 0.0000 17.263 18.049 22.236 1.2000 0.81000 1.5300 7.4300 20.490 28.040 29.840 29.440 28.060 26.360 25.140 24.930 25.680 26.230 24.520 21.560 18.810 16.160 13.620 12.300 12.830 14.900 16.650 17.660 18.220 18.480 18.700 19.260 20.170 20.730 20.620 20.260 19.710 19.270 19.520 20.610 1796 66.172 43.676 33.086 8.4269 13.728 15.021 18.148 1.1700 0.75000 1.4100 6.2400 16.740 22.810 24.180 23.870 22.770 21.440 20.530 20.640 21.810 22.830 21.530 18.880 16.360 13.890 11.510 10.220 10.460 11.850 12.910 13.450 13.760 13.880 14.030 14.460 15.240 15.680 15.570 15.250 14.740 14.370 14.560 15.530 1797 51.951 35.625 29.070 7.1455 19.698 20.849 21.689 1.1900 0.87000 1.5000 6.9500 19.600 26.910 28.580 28.260 27.150 25.810 24.950 25.220 26.820 28.320 27.210 24.480 21.860 19.270 16.810 15.540 16.070 18.040 19.730 20.700 21.270 21.470 21.680 22.160 22.940 23.400 23.270 22.980 22.530 22.170 22.300 23.340 1798 61.156 50.948 31.699 6.8345 14.208 14.196 16.625 0.86000 0.71000 1.3200 6.2400 16.200 21.580 22.550 22.000 20.800 19.380 18.370 18.250 18.950 19.550 18.260 16.020 14.090 12.300 10.510 9.6600 10.450 12.610 14.450 15.480 16.070 16.330 16.540 17.050 17.850 18.350 18.250 17.950 17.450 17.090 17.280 18.300 1799 74.927 56.913 55.036 0.0000 9.9395 10.851 11.527 0.76000 0.66000 1.2300 4.7300 11.250 14.620 15.260 14.890 14.130 13.230 12.740 13.420 15.450 17.280 16.310 13.840 11.700 9.6700 7.7100 6.6900 7.1700 8.7700 9.9900 10.570 10.900 11.030 11.150 11.620 12.440 12.950 12.800 12.440 11.920 11.500 11.690 12.730 1800 45.690 36.028 16.629 8.0436 22.128 22.209 24.945 1.4100 0.86000 1.5900 8.1000 22.880 31.590 33.450 32.960 31.480 29.760 28.440 27.950 28.180 28.300 26.790 24.300 22.050 19.890 17.810 16.820 17.670 20.150 22.360 23.730 24.500 24.860 25.130 25.670 26.470 26.970 26.900 26.610 26.200 25.900 26.130 27.090 1801 37.436 20.246 15.307 8.6580 29.140 31.010 31.829 1.6500 1.0100 1.6200 8.7100 26.610 38.330 41.430 41.500 40.330 38.880 37.820 37.740 38.750 39.600 38.260 35.360 32.420 29.480 26.760 25.330 25.610 27.290 28.790 29.710 30.290 30.530 30.750 31.250 31.980 32.380 32.310 32.100 31.730 31.480 31.660 32.570 1802 29.090 17.823 3.1742 8.3970 36.006 37.077 41.016 2.1100 1.2000 1.8900 10.780 33.770 49.740 54.140 54.150 52.520 50.480 48.720 47.390 46.220 44.940 42.820 40.000 37.390 34.830 32.410 31.220 31.700 33.670 35.460 36.620 37.310 37.620 37.920 38.480 39.200 39.620 39.600 39.400 39.080 38.890 39.130 40.020 1803 47.942 27.610 15.720 2.3844 25.440 27.167 31.072 1.6600 1.00000 1.7700 9.0200 26.460 37.610 40.700 40.780 39.500 37.890 36.640 36.350 36.950 37.300 35.370 31.950 28.610 25.310 22.250 20.630 20.950 22.820 24.440 25.430 26.000 26.270 26.520 27.080 27.950 28.480 28.400 28.060 27.590 27.240 27.490 28.580 1804 27.718 9.5234 7.0044 5.0331 41.008 44.251 45.673 2.1200 1.3700 1.9500 10.790 35.250 53.360 58.940 59.640 58.470 56.890 55.580 55.100 55.370 55.350 53.410 49.990 46.490 42.970 39.820 38.130 37.960 38.970 39.800 40.340 40.700 40.850 41.090 41.600 42.300 42.710 42.670 42.460 42.140 41.930 42.130 43.070 1805 10.150 4.4184 0.0000 5.9945 59.287 61.534 57.487 2.9800 1.6400 2.3400 13.020 43.570 67.760 74.640 75.000 73.570 71.860 70.250 68.930 67.720 66.590 65.250 63.460 61.830 60.150 58.490 57.780 58.030 59.200 60.140 60.780 61.270 61.490 61.820 62.340 62.930 63.260 63.300 63.240 63.170 63.210 63.440 64.150 1806 27.705 18.491 10.512 0.0000 41.618 42.914 43.903 2.2600 1.3300 1.9800 10.890 35.610 53.310 57.980 57.770 55.850 53.550 51.770 51.130 51.570 51.890 49.990 46.580 43.330 40.190 37.280 35.880 36.660 39.410 41.940 43.630 44.580 44.960 45.300 45.910 46.760 47.250 47.150 46.880 46.470 46.150 46.400 47.440 1807 15.416 0.0000 0.0000 0.0000 65.419 71.277 73.978 3.3900 1.9700 2.5000 13.790 50.080 83.500 95.450 97.390 95.940 93.910 91.840 89.940 88.030 85.810 83.070 79.290 75.230 71.000 67.200 64.980 63.650 63.000 62.420 62.070 61.990 61.940 62.110 62.580 63.300 63.630 63.560 63.360 63.040 62.890 63.040 63.980 1808 100.00 100.00 89.500 0.0000 2.5176 2.2263 3.3060 0.21000 0.41000 1.0200 2.7200 4.3700 4.8700 4.7400 4.3600 3.9100 3.4500 3.1500 3.3200 3.8600 4.0900 3.0400 1.8400 1.4300 1.3600 1.2100 1.2300 1.7000 2.4800 2.8500 2.8700 2.8700 2.8900 2.9300 3.2600 3.9000 4.3200 4.1800 3.8800 3.4300 3.1500 3.3300 4.2000 1809 100.00 93.065 94.742 9.5301 2.5056 2.4920 2.9026 0.35000 0.42000 1.0700 2.5500 3.7700 4.0600 3.9800 3.6700 3.3600 3.0600 2.9100 3.2600 4.0800 4.5800 3.7200 2.5600 2.0400 1.8100 1.5300 1.4500 1.8200 2.4900 2.8100 2.8000 2.8000 2.8100 2.8500 3.1500 3.7500 4.1300 4.0100 3.7400 3.3100 3.0400 3.2300 4.0400 1810 88.000 83.575 67.791 8.1371 4.7365 4.3956 5.7247 0.53000 0.52000 1.1700 3.5200 6.7500 8.0800 8.1200 7.6200 6.9500 6.1900 5.6700 5.8000 6.4700 6.9400 5.9700 4.5800 3.7700 3.2300 2.6300 2.4000 3.0000 4.2700 5.1400 5.5100 5.7000 5.7900 5.8800 6.2700 6.9400 7.3800 7.2800 6.9600 6.5100 6.1800 6.3700 7.2300 1811 85.151 92.055 68.295 8.1176 4.6841 3.6912 5.0757 0.50000 0.47000 1.0700 3.3300 6.3600 7.5700 7.4900 6.8900 6.1700 5.3700 4.7500 4.6700 4.9800 5.0900 4.0400 2.8200 2.3100 2.1200 1.8700 1.9000 2.7200 4.3300 5.5300 6.1000 6.3700 6.5000 6.6100 7.0100 7.7000 8.1400 8.0200 7.7300 7.2600 6.9300 7.1500 8.0200 1812 84.276 80.450 57.950 0.0000 6.2676 5.7063 7.9811 0.52000 0.55000 1.2300 4.3400 9.1800 11.300 11.410 10.760 9.8100 8.7000 7.9300 7.8700 8.4400 8.8100 7.5900 5.9100 4.8900 4.1600 3.3600 3.0600 3.8100 5.4700 6.6800 7.2500 7.5500 7.6900 7.8100 8.2600 9.0500 9.5600 9.4300 9.0700 8.5400 8.1600 8.3600 9.3200 1813 80.699 84.097 47.840 2.6981 6.8343 5.7101 9.1394 0.62000 0.49000 1.1900 4.5500 10.600 13.430 13.560 12.630 11.320 9.8300 8.7300 8.2800 8.2900 8.2300 6.8600 5.2400 4.3500 3.7900 3.1600 2.9800 3.9000 5.8400 7.3500 8.1000 8.4900 8.6400 8.7800 9.2200 10.000 10.470 10.330 10.000 9.4800 9.0900 9.2700 10.230 1814 44.604 43.480 27.174 2.7615 22.724 21.841 22.209 1.2300 0.88000 1.4800 7.4100 21.030 28.820 30.120 29.320 27.750 25.930 24.670 24.540 25.530 26.510 25.260 22.770 20.670 18.730 16.850 16.080 17.470 21.010 24.290 26.410 27.580 28.060 28.380 29.000 29.870 30.380 30.300 29.970 29.490 29.160 29.360 30.360 1815 52.805 51.503 21.673 4.6183 17.788 16.760 20.926 1.1600 0.90000 1.4500 7.2400 20.470 28.030 29.180 28.190 26.330 24.170 22.540 21.780 21.670 21.530 19.870 17.480 15.600 13.920 12.250 11.540 12.730 15.720 18.350 19.990 20.860 21.240 21.490 22.020 22.850 23.310 23.210 22.900 22.430 22.080 22.230 23.260 1816 66.573 63.675 39.566 3.1219 11.637 10.901 13.432 0.90000 0.73000 1.3200 5.5000 13.950 18.290 18.810 18.020 16.680 15.170 14.090 13.900 14.510 15.010 13.670 11.570 10.010 8.6900 7.3200 6.7500 7.8000 10.270 12.320 13.480 14.100 14.360 14.550 15.070 15.900 16.390 16.260 15.930 15.390 14.960 15.170 16.210 1817 40.233 46.399 15.921 0.0000 24.704 22.471 25.137 1.3300 0.85000 1.6400 8.5400 24.430 33.490 34.860 33.700 31.590 29.210 27.390 26.470 26.220 25.990 24.260 21.830 19.960 18.330 16.690 16.170 17.980 22.300 26.490 29.330 30.950 31.640 32.110 32.800 33.720 34.270 34.230 33.950 33.460 33.160 33.360 34.460 1818 30.041 39.620 16.704 3.8469 29.644 27.360 26.286 1.6800 1.00000 1.6600 8.5000 24.820 34.240 35.690 34.690 32.930 30.930 29.450 28.930 29.230 29.570 28.290 26.150 24.510 23.110 21.680 21.310 23.330 27.950 32.440 35.580 37.370 38.180 38.690 39.370 40.280 40.790 40.800 40.580 40.200 39.960 40.180 41.180 1819 36.749 32.364 13.317 0.0000 30.210 29.623 33.012 1.7600 1.1200 1.6700 9.3300 28.980 41.830 44.690 43.950 41.870 39.440 37.550 36.620 36.480 36.270 34.280 31.260 28.610 26.140 23.810 22.790 24.030 27.520 30.900 33.170 34.440 34.990 35.370 35.980 36.850 37.350 37.260 37.010 36.570 36.250 36.460 37.530 1820 23.339 32.189 0.0000 0.0000 40.246 36.799 41.251 2.1800 1.1800 2.0400 11.700 37.030 54.170 57.300 55.580 52.400 48.850 45.930 43.550 41.350 39.450 37.110 34.550 32.700 31.180 29.650 29.300 31.600 36.960 42.440 46.380 48.680 49.710 50.360 51.110 52.050 52.570 52.590 52.370 52.070 51.880 52.090 53.180 1821 16.107 12.998 0.0000 0.0000 55.402 55.658 57.130 2.8800 1.6500 2.2700 12.990 44.090 68.830 75.800 75.710 73.400 70.570 68.070 65.950 63.950 62.020 59.680 56.810 54.380 52.090 49.900 49.040 50.170 53.360 56.380 58.460 59.690 60.230 60.680 61.340 62.150 62.580 62.590 62.430 62.220 62.080 62.330 63.340 1822 11.158 18.746 0.0000 0.0000 56.107 53.471 52.674 2.5700 1.5800 2.3100 13.190 43.500 66.170 71.260 69.990 67.100 63.840 61.070 58.850 56.870 55.170 53.170 50.920 49.360 48.090 46.760 46.620 48.920 54.110 59.350 63.190 65.430 66.420 67.100 67.830 68.700 69.130 69.170 69.100 68.950 68.930 69.150 70.100 1823 18.157 20.589 0.0000 7.0797 42.572 41.185 42.799 2.2900 1.3000 2.0400 11.550 36.670 53.990 57.750 56.800 54.470 51.820 49.560 47.720 46.000 44.470 42.600 40.460 38.790 37.330 35.830 35.400 36.950 40.660 44.240 46.730 48.170 48.830 49.300 49.940 50.670 51.050 51.100 50.990 50.780 50.710 50.930 51.760 1824 64.709 88.905 39.762 5.2616 9.4464 6.7049 9.3414 0.71000 0.57000 1.2600 4.8200 11.440 14.410 14.240 13.040 11.540 9.8300 8.5300 7.8000 7.4200 7.0300 5.7200 4.3300 3.7100 3.4800 3.1500 3.2800 4.9200 8.3000 11.300 13.130 14.110 14.540 14.810 15.370 16.230 16.760 16.660 16.340 15.820 15.430 15.620 16.640 1825 85.844 100.00 81.704 0.0000 4.6317 3.4672 4.3204 0.57000 0.53000 1.2100 3.1900 5.5800 6.4200 6.3100 5.7900 5.2200 4.5400 4.0800 4.1000 4.5300 4.6400 3.4800 2.1900 1.7600 1.7100 1.5800 1.7000 2.6700 4.4800 5.8100 6.4200 6.7200 6.8500 6.9600 7.4000 8.1700 8.6300 8.5000 8.1500 7.6400 7.2600 7.5000 8.4700 1826 81.955 100.00 61.410 0.0000 5.5259 3.7956 6.1108 0.53000 0.50000 1.1700 3.7800 7.8000 9.5000 9.3900 8.5700 7.5300 6.3400 5.4300 4.9900 4.8600 4.5700 3.3200 2.0800 1.6600 1.6500 1.5500 1.7100 2.8100 4.9400 6.6700 7.5600 8.0400 8.2300 8.3900 8.8600 9.6500 10.140 10.030 9.6800 9.1500 8.7800 8.9900 9.9500 1827 70.839 84.097 53.196 4.2294 7.7562 6.1192 7.8375 0.63000 0.55000 1.1700 4.1700 9.2700 11.570 11.540 10.720 9.6300 8.3800 7.4900 7.2200 7.4400 7.5400 6.3900 4.9600 4.2000 3.7700 3.2700 3.2100 4.4000 6.9200 9.0800 10.310 10.950 11.210 11.410 11.900 12.670 13.140 13.030 12.700 12.220 11.860 12.050 13.040 1828 65.532 72.736 34.749 7.8812 10.711 9.0434 12.478 0.74000 0.66000 1.3000 5.4000 13.750 17.950 18.200 17.120 15.520 13.740 12.400 11.740 11.580 11.420 10.030 8.3200 7.2400 6.4400 5.5600 5.3100 6.5500 9.3100 11.690 13.090 13.830 14.130 14.360 14.840 15.640 16.090 15.990 15.690 15.190 14.830 14.990 15.970 1829 67.032 93.722 60.077 4.3801 8.1224 5.5165 6.4820 0.60000 0.50000 1.1100 3.8700 8.1800 9.9600 9.7800 8.9600 7.9300 6.7900 5.9100 5.6000 5.6100 5.4800 4.2700 2.9700 2.4900 2.4100 2.2400 2.4600 4.1000 7.4100 10.330 12.100 13.030 13.420 13.690 14.250 15.110 15.660 15.550 15.220 14.670 14.270 14.470 15.510 1830 30.109 54.108 0.0000 9.0615 25.672 21.199 25.573 1.4500 0.92000 1.6400 8.8600 26.320 36.370 37.070 34.990 32.090 28.980 26.480 24.500 22.680 21.200 19.380 17.550 16.490 15.790 15.020 15.070 17.550 22.920 28.280 32.090 34.260 35.230 35.810 36.490 37.320 37.790 37.790 37.620 37.320 37.110 37.340 38.260 1831 41.848 55.077 20.540 7.7089 20.127 17.564 19.253 1.3300 0.84000 1.4800 7.2600 19.800 26.400 27.060 25.850 24.040 22.020 20.470 19.680 19.450 19.290 17.900 16.010 14.710 13.690 12.600 12.370 14.240 18.370 22.280 24.890 26.340 26.970 27.380 28.000 28.840 29.350 29.310 29.060 28.650 28.350 28.580 29.570 1832 50.568 63.190 16.488 6.7130 16.641 13.990 18.600 1.0800 0.78000 1.4700 7.0500 19.780 26.620 27.100 25.540 23.260 20.750 18.820 17.600 16.800 16.140 14.460 12.480 11.210 10.260 9.2400 8.9900 10.730 14.580 18.120 20.360 21.570 22.060 22.390 22.960 23.770 24.260 24.150 23.870 23.390 23.060 23.210 24.170 1833 56.661 69.059 40.574 6.9276 12.974 10.962 12.103 1.0500 0.70000 1.3300 5.3300 13.230 17.100 17.260 16.300 14.950 13.410 12.310 12.020 12.390 12.730 11.540 9.8000 8.6900 7.8700 7.0000 6.8000 8.3800 11.800 14.870 16.770 17.790 18.220 18.500 19.040 19.830 20.320 20.230 19.920 19.460 19.110 19.280 20.250 1834 40.607 64.385 22.527 6.6402 18.978 15.176 16.791 0.90000 0.78000 1.4400 6.9600 18.420 24.150 24.310 22.820 20.860 18.670 17.010 16.080 15.610 15.240 13.820 12.090 11.090 10.460 9.7500 9.8100 12.140 17.120 21.880 25.200 27.030 27.840 28.330 28.990 29.870 30.400 30.370 30.100 29.700 29.430 29.610 30.590 1835 57.993 64.267 30.433 0.0000 15.009 13.064 16.467 1.0100 0.70000 1.3900 6.4000 17.250 23.040 23.600 22.390 20.530 18.450 16.900 16.230 16.250 16.250 14.650 12.460 10.940 9.7500 8.4900 8.0800 9.6500 13.200 16.370 18.340 19.370 19.820 20.090 20.680 21.580 22.100 21.990 21.630 21.110 20.680 20.870 21.950 1836 26.980 40.003 0.0000 8.4153 31.419 28.200 33.181 1.5900 1.0400 1.7500 9.7600 31.130 44.920 46.890 44.970 41.950 38.660 36.000 33.890 31.930 30.270 28.250 26.090 24.600 23.390 22.150 21.890 23.920 28.610 33.220 36.480 38.320 39.090 39.560 40.200 40.960 41.390 41.390 41.180 40.860 40.710 40.870 41.710 1837 22.959 44.220 0.0000 0.0000 35.590 30.109 34.264 1.9200 1.1900 1.8800 10.950 33.580 47.550 49.050 46.610 43.120 39.380 36.360 33.980 31.800 30.040 27.850 25.610 24.240 23.300 22.280 22.330 25.310 31.960 38.890 44.070 47.080 48.440 49.240 50.120 51.100 51.670 51.690 51.500 51.210 51.000 51.270 52.330 1838 14.389 32.267 0.0000 7.7812 41.028 36.689 37.039 2.2100 1.2400 1.9200 11.000 34.260 49.310 51.450 49.550 46.710 43.630 41.140 39.160 37.380 35.960 34.290 32.540 31.510 30.830 30.070 30.260 32.900 38.670 44.640 49.100 51.710 52.890 53.600 54.320 55.080 55.490 55.540 55.480 55.380 55.370 55.560 56.370 1839 52.481 100.00 22.415 2.3816 12.495 7.2361 11.441 0.79000 0.69000 1.3300 5.9300 15.390 19.630 18.830 16.570 13.990 11.200 9.0600 7.5600 6.2600 5.2400 3.6800 2.3400 1.9500 2.0400 2.0300 2.4800 4.9600 10.240 15.470 19.060 21.050 21.890 22.360 23.040 23.980 24.540 24.450 24.110 23.620 23.230 23.420 24.450 1840 54.952 92.084 36.776 9.2290 10.720 6.8207 9.0334 0.74000 0.60000 1.2200 4.9000 11.670 14.650 14.210 12.790 11.070 9.2200 7.7800 6.8800 6.2500 5.7000 4.4100 3.1600 2.7200 2.6800 2.5600 2.8800 4.9300 9.2300 13.380 16.120 17.620 18.260 18.640 19.210 20.020 20.490 20.430 20.170 19.720 19.400 19.570 20.470 1841 53.350 85.079 22.242 0.0000 14.227 9.7379 14.619 0.84000 0.67000 1.2600 6.4700 17.720 23.250 22.850 20.760 18.060 15.160 12.980 11.490 10.330 9.3800 7.6400 5.9200 5.1700 4.8700 4.4700 4.6600 7.0100 12.020 16.760 19.880 21.570 22.250 22.660 23.330 24.260 24.810 24.690 24.330 23.750 23.310 23.490 24.540 1842 61.009 100.00 45.732 0.0000 10.219 6.2221 8.8289 0.74000 0.61000 1.2200 4.8600 11.600 14.530 14.080 12.610 10.820 8.8700 7.3700 6.4700 5.8600 5.2400 3.7600 2.3400 1.9100 1.9700 1.9100 2.2700 4.4200 8.8800 13.010 15.630 16.980 17.550 17.880 18.500 19.440 19.990 19.860 19.490 18.880 18.410 18.600 19.690 1843 27.487 70.888 7.9193 7.7784 23.109 16.554 18.833 1.2000 0.86000 1.5000 7.8000 21.850 28.910 28.480 26.090 23.260 20.290 17.970 16.260 14.800 13.680 12.070 10.520 9.8600 9.6700 9.4000 9.8700 13.110 20.050 27.280 32.730 35.900 37.340 38.120 38.920 39.820 40.360 40.400 40.250 39.960 39.780 40.010 40.950 1844 38.208 83.386 27.638 0.0000 18.181 11.949 13.255 0.88000 0.73000 1.2600 6.2600 16.420 21.130 20.560 18.550 16.240 13.750 11.870 10.690 9.8900 9.2500 7.7500 6.2200 5.5900 5.4500 5.2200 5.6500 8.7200 15.400 22.410 27.590 30.570 31.890 32.620 33.440 34.440 35.030 34.980 34.740 34.280 33.950 34.180 35.280 1845 48.395 76.418 23.334 8.3155 14.280 10.548 13.505 0.97000 0.75000 1.3600 6.0600 15.780 20.530 20.410 18.770 16.710 14.450 12.750 11.660 10.930 10.360 8.9800 7.4600 6.6900 6.2700 5.8100 5.9200 7.9800 12.400 16.680 19.570 21.160 21.840 22.250 22.850 23.650 24.130 24.070 23.810 23.400 23.090 23.260 24.200 1846 54.045 82.094 39.716 0.0000 13.335 9.5462 11.200 0.89000 0.64000 1.2900 5.3800 13.390 17.110 16.920 15.520 13.770 11.840 10.410 9.7000 9.4600 9.2500 7.8700 6.2600 5.5100 5.1500 4.7200 4.8700 7.0500 11.720 16.200 19.170 20.800 21.480 21.890 22.540 23.480 24.050 23.950 23.620 23.080 22.660 22.870 23.910 1847 36.343 74.951 0.0000 0.0000 22.038 15.368 21.736 1.2000 0.78000 1.4700 8.5000 25.320 34.510 34.010 30.740 26.840 22.820 19.710 17.340 15.190 13.530 11.540 9.7300 8.8700 8.5200 8.0600 8.3600 11.430 18.210 25.250 30.480 33.470 34.780 35.520 36.330 37.310 37.880 37.830 37.560 37.130 36.820 36.980 38.050 1848 31.791 60.538 0.0000 0.0000 27.441 21.437 27.788 1.5500 0.94000 1.5800 9.3500 29.230 41.140 41.610 38.600 34.710 30.650 27.460 24.980 22.740 20.940 18.760 16.630 15.420 14.680 13.860 13.960 16.940 23.560 30.420 35.470 38.380 39.630 40.360 41.130 42.100 42.640 42.610 42.350 41.980 41.690 41.870 42.900 1849 28.875 57.341 14.558 0.0000 27.514 22.080 23.540 1.4300 0.91000 1.5500 8.4000 24.670 33.670 34.100 32.020 29.300 26.360 24.130 22.750 21.900 21.280 19.570 17.560 16.360 15.610 14.770 14.880 17.870 24.490 31.400 36.530 39.500 40.800 41.530 42.340 43.290 43.830 43.810 43.600 43.230 42.970 43.200 44.240 1850 12.027 47.304 0.0000 0.0000 41.979 33.323 33.592 1.9400 1.2500 1.8700 10.780 33.830 48.000 48.760 45.670 41.940 38.030 34.940 32.560 30.460 28.850 26.900 25.040 24.220 23.970 23.580 24.210 28.370 37.450 47.570 55.820 60.900 63.250 64.560 65.650 66.670 67.240 67.370 67.320 67.190 67.200 67.460 68.380 1851 14.569 55.728 0.0000 7.8953 32.882 25.379 26.850 1.5500 1.00000 1.6100 9.3600 28.600 39.650 39.690 36.750 33.310 29.770 27.030 24.900 23.030 21.600 19.910 18.310 17.620 17.440 17.150 17.710 21.270 29.070 37.630 44.390 48.450 50.260 51.270 52.120 52.920 53.340 53.420 53.340 53.260 53.190 53.390 54.140 1852 45.953 100.00 30.939 0.0000 14.615 8.4458 10.894 0.95000 0.80000 1.3800 5.8400 14.690 18.540 17.740 15.610 13.290 10.740 8.7900 7.4900 6.4400 5.5700 3.9900 2.5600 2.1300 2.2600 2.2700 2.8100 5.8000 12.190 18.670 23.250 25.830 26.920 27.530 28.290 29.310 29.890 29.800 29.470 28.920 28.510 28.660 29.810 1853 21.659 71.749 0.0000 0.0000 29.040 19.777 22.819 1.5800 0.98000 1.6400 9.2700 27.020 36.200 35.350 31.870 28.070 24.080 21.030 18.670 16.570 14.970 13.050 11.310 10.630 10.530 10.320 10.970 15.080 24.090 34.110 42.200 47.160 49.470 50.730 51.810 52.910 53.550 53.630 53.510 53.210 53.100 53.350 54.380 1854 20.721 83.554 0.0000 8.0693 22.797 14.109 16.934 1.0800 0.82000 1.4800 7.7000 21.870 28.610 27.300 24.040 20.560 17.020 14.320 12.260 10.440 9.0900 7.4800 6.1200 5.6800 5.7500 5.7500 6.4100 10.080 18.300 27.510 34.900 39.390 41.470 42.580 43.490 44.370 44.870 44.950 44.840 44.610 44.500 44.690 45.510 1855 21.566 100.00 7.1257 9.0673 20.730 11.204 12.915 0.83000 0.71000 1.4300 7.0600 18.540 23.220 21.640 18.620 15.510 12.300 9.8300 7.9800 6.3600 5.1500 3.6200 2.3500 2.0300 2.2200 2.3600 3.1300 7.0300 15.840 25.910 34.190 39.340 41.760 43.050 44.080 45.040 45.600 45.720 45.650 45.480 45.360 45.610 46.370 1856 33.908 100.00 0.0000 4.8943 17.509 9.5840 14.184 1.0900 0.80000 1.4400 7.2300 19.850 25.560 23.990 20.660 17.100 13.420 10.650 8.5400 6.6700 5.2800 3.6600 2.3500 2.0000 2.1500 2.2300 2.8600 6.1900 13.570 21.560 27.690 31.320 32.950 33.840 34.690 35.650 36.210 36.220 36.030 35.670 35.420 35.600 36.600 1857 33.503 86.467 0.0000 0.0000 21.236 13.179 18.557 1.0200 0.77000 1.4600 8.0800 23.610 31.430 30.180 26.570 22.620 18.560 15.460 13.130 11.040 9.4800 7.6100 6.0200 5.4300 5.3900 5.2200 5.7600 9.2300 16.920 25.250 31.660 35.440 37.120 38.030 38.910 39.960 40.550 40.540 40.270 39.880 39.580 39.780 40.830 1858 34.342 100.00 26.071 0.0000 18.431 10.263 11.689 0.94000 0.76000 1.4100 6.2100 16.140 20.430 19.260 16.800 14.130 11.340 9.2000 7.7300 6.5000 5.5500 3.9400 2.5300 2.1500 2.3200 2.3900 3.0600 6.6500 14.710 23.510 30.300 34.340 36.130 37.070 37.980 39.030 39.620 39.580 39.330 38.840 38.500 38.650 39.690 1859 32.196 83.236 0.0000 9.2414 19.061 12.260 16.801 1.00000 0.75000 1.3800 7.3900 21.140 27.850 26.880 23.910 20.570 17.090 14.440 12.410 10.570 9.2000 7.5600 6.1500 5.6200 5.5700 5.4400 5.9200 8.9700 15.620 22.670 27.960 31.010 32.360 33.100 33.840 34.680 35.180 35.180 35.000 34.690 34.480 34.650 35.520 1860 21.374 100.00 0.0000 0.0000 23.524 12.550 15.230 1.3100 0.79000 1.4300 7.9000 21.810 27.860 25.850 22.060 18.230 14.300 11.340 9.0900 7.0900 5.6300 3.9000 2.5000 2.1300 2.3600 2.5000 3.3300 7.6400 17.460 28.900 38.570 44.750 47.690 49.270 50.510 51.690 52.380 52.510 52.400 52.150 52.010 52.220 53.270 1861 100.00 0.0000 65.169 6.8541 7.7203 16.184 13.786 0.88000 0.69000 1.2800 4.3800 9.9800 13.280 14.840 15.670 16.180 16.690 17.830 21.550 29.910 39.120 39.830 33.470 25.490 17.580 11.110 7.3000 5.4400 4.4700 3.7000 3.2000 3.0200 2.9400 2.9700 3.2700 3.8800 4.2800 4.1400 3.8700 3.4200 3.1500 3.3500 4.1500 1862 100.00 0.0000 54.101 0.0000 9.4499 19.138 19.590 1.1200 0.87000 1.4500 5.4800 13.900 19.280 21.860 23.210 23.750 24.220 25.320 29.210 38.070 47.470 47.080 38.930 29.320 20.100 12.680 8.3300 6.1900 5.0800 4.1900 3.6000 3.3700 3.3000 3.3200 3.6700 4.3500 4.8100 4.6600 4.3200 3.8300 3.4900 3.7000 4.6500 1863 100.00 35.158 70.930 0.0000 5.7723 10.545 9.4119 0.75000 0.68000 1.2100 3.8300 7.9600 10.080 10.830 11.010 10.980 10.950 11.420 13.760 18.950 24.170 24.030 20.190 15.820 11.370 7.4300 5.1200 4.2100 3.9300 3.5800 3.2500 3.1100 3.0800 3.1100 3.4400 4.0900 4.5200 4.3700 4.0800 3.6100 3.2900 3.5200 4.3800 1864 85.391 18.221 53.804 0.0000 10.590 16.924 16.143 0.89000 0.66000 1.3200 5.0900 12.630 17.060 18.870 19.520 19.600 19.610 20.110 22.740 28.760 35.030 34.830 29.770 23.770 17.740 12.590 9.5800 8.3100 7.9200 7.5300 7.1900 7.0900 7.0500 7.1000 7.4800 8.1900 8.6400 8.5100 8.1800 7.7000 7.3600 7.5900 8.5300 1865 88.167 6.5664 54.556 0.39659 10.923 19.072 17.946 1.1000 0.74000 1.3400 5.2600 13.170 18.120 20.310 21.350 21.740 22.040 22.940 26.330 33.980 42.070 41.980 35.490 27.710 20.080 13.800 10.140 8.4200 7.5900 6.9100 6.4200 6.2500 6.1900 6.2400 6.5900 7.2800 7.7100 7.5900 7.2600 6.8000 6.4600 6.6800 7.6000 1866 85.586 16.736 65.444 0.0000 10.359 17.076 12.665 0.70000 0.67000 1.2500 4.3700 9.8800 12.920 14.080 14.580 14.810 15.010 15.830 19.040 26.340 34.480 35.380 30.540 24.490 18.350 13.120 10.060 8.7600 8.3300 7.9100 7.5500 7.4400 7.4100 7.4600 7.8500 8.5900 9.0600 8.9400 8.6100 8.0600 7.7100 7.9400 8.8700 1867 84.957 0.0000 59.947 8.9891 11.710 20.212 16.390 1.0100 0.72000 1.3400 4.9300 12.050 16.320 18.140 19.060 19.500 19.970 21.030 24.720 32.930 42.010 42.990 37.110 29.530 21.900 15.540 11.770 9.8600 8.8400 8.0200 7.4600 7.2500 7.1700 7.1900 7.5500 8.2300 8.6400 8.5100 8.2000 7.7100 7.3600 7.5500 8.4500 1868 100.00 19.243 62.247 7.2843 6.5830 12.428 12.298 0.76000 0.56000 1.2000 4.2600 9.6500 12.740 14.020 14.560 14.730 14.890 15.500 18.040 23.480 28.920 28.710 24.300 18.950 13.470 8.7100 5.8700 4.5800 4.0100 3.4800 3.0800 2.9400 2.9000 2.9200 3.2300 3.8600 4.2600 4.1300 3.8400 3.4100 3.1300 3.3100 4.1900 1869 84.231 17.203 64.832 9.3853 9.5247 15.252 11.584 0.88000 0.79000 1.3100 4.2300 9.2900 11.980 13.060 13.430 13.610 13.780 14.480 17.190 23.250 29.780 30.500 26.620 21.670 16.520 12.020 9.3300 8.1700 7.7800 7.3800 7.0500 6.9600 6.9300 6.9800 7.3300 7.9800 8.3900 8.2800 8.0000 7.5600 7.2600 7.4800 8.3400 1870 100.00 17.698 76.259 9.5312 6.1783 12.430 8.8190 0.72000 0.73000 1.2600 3.5300 6.9800 8.7500 9.4000 9.7000 9.9000 10.180 11.030 14.080 20.910 28.380 29.320 25.050 19.600 13.930 9.0500 6.1200 4.7900 4.1900 3.6400 3.2300 3.0700 3.0100 3.0500 3.3400 3.9500 4.3400 4.2100 3.9300 3.5000 3.2000 3.3900 4.2400 1871 70.540 0.0000 44.413 0.0000 18.932 28.271 24.735 1.3000 0.98000 1.5200 6.6500 18.050 25.300 28.360 29.790 30.350 30.790 31.830 35.480 43.680 52.560 52.970 46.280 37.960 29.740 22.970 18.940 16.870 15.760 14.850 14.220 14.010 13.930 14.000 14.460 15.310 15.850 15.710 15.350 14.760 14.300 14.520 15.680 1872 100.00 51.506 70.288 0.0000 4.9797 7.9615 8.2481 0.60000 0.56000 1.1800 3.7000 7.6000 9.5300 10.050 10.050 9.8000 9.5300 9.6400 11.130 14.420 17.470 16.860 14.030 11.180 8.2900 5.6000 4.0200 3.5700 3.6500 3.5100 3.2600 3.1600 3.1400 3.1700 3.5300 4.2400 4.6900 4.5600 4.2200 3.7100 3.4000 3.5800 4.5400 1873 100.00 59.046 79.977 6.7033 4.0571 6.1883 5.7457 0.38000 0.47000 1.0900 3.1300 5.7100 6.8400 7.0600 6.8900 6.6500 6.4000 6.5000 7.7400 10.550 13.170 12.690 10.480 8.4100 6.3600 4.4100 3.2700 3.0600 3.2800 3.2600 3.0700 2.9900 2.9800 3.0100 3.3200 3.9500 4.3600 4.2400 3.9300 3.4700 3.1800 3.3500 4.1400 1874 100.00 52.852 84.223 0.0000 4.4139 7.3251 5.8027 0.49000 0.53000 1.1300 3.0600 5.5100 6.5200 6.7400 6.6700 6.5400 6.4500 6.7500 8.4900 12.300 15.960 15.720 13.110 10.440 7.7600 5.2500 3.7900 3.4100 3.5300 3.4200 3.1900 3.1100 3.0800 3.1200 3.4600 4.1500 4.5900 4.4800 4.1400 3.6600 3.3300 3.5300 4.4300 1875 87.192 37.454 73.454 8.8347 7.2526 10.778 7.7133 0.57000 0.56000 1.1500 3.4000 6.7900 8.4300 8.8500 8.9400 8.8800 8.8400 9.2700 11.270 15.690 20.260 20.580 17.870 14.710 11.410 8.3800 6.6100 6.1000 6.2900 6.3100 6.1900 6.1800 6.1700 6.2400 6.6000 7.2600 7.6900 7.5700 7.2800 6.8200 6.5100 6.7200 7.5400 1876 83.623 32.511 65.319 0.0000 9.5946 14.067 11.374 0.82000 0.75000 1.2500 4.3600 9.6000 12.460 13.350 13.540 13.450 13.350 13.750 16.060 21.300 26.760 26.860 23.170 18.950 14.630 10.770 8.5300 7.8700 8.1000 8.1300 8.0200 8.0000 8.0100 8.0700 8.4800 9.2500 9.7200 9.5700 9.2400 8.6900 8.3300 8.5400 9.4800 1877 67.397 26.456 51.237 0.0000 15.566 19.832 16.374 1.1600 0.67000 1.4100 5.6400 13.850 18.350 19.750 20.070 19.890 19.610 19.870 21.990 26.940 32.120 32.210 28.580 24.350 20.020 16.110 13.880 13.440 14.100 14.560 14.740 14.910 14.990 15.120 15.620 16.470 17.000 16.870 16.520 15.960 15.520 15.760 16.830 1878 72.694 16.961 44.274 5.4325 14.315 19.785 19.277 0.98000 0.86000 1.3700 6.0500 15.430 21.050 23.110 23.850 23.840 23.700 23.990 26.040 30.680 35.280 34.830 30.620 25.600 20.460 15.920 13.240 12.150 11.960 11.710 11.480 11.420 11.420 11.490 11.900 12.650 13.110 13.000 12.690 12.170 11.820 12.010 13.020 1879 47.546 0.0000 28.196 0.31560 31.255 40.073 35.534 2.0200 1.2000 1.7300 8.5600 25.990 37.990 42.590 44.270 44.510 44.510 45.020 47.890 54.720 62.050 62.120 56.090 48.600 41.210 35.110 31.560 29.700 28.730 27.890 27.340 27.170 27.100 27.220 27.700 28.490 28.980 28.860 28.530 28.030 27.680 27.880 28.990 1880 57.978 15.211 35.360 5.5145 20.207 25.027 23.478 1.2600 0.87000 1.4600 6.7600 18.930 26.430 28.880 29.510 29.250 28.810 28.840 30.520 34.650 38.800 38.350 34.470 29.930 25.260 21.130 18.730 17.980 18.240 18.410 18.420 18.510 18.550 18.670 19.120 19.900 20.350 20.240 19.940 19.470 19.090 19.300 20.330 1881 61.153 8.7593 42.534 0.0000 21.158 28.465 24.004 1.3400 0.93000 1.4700 6.7300 18.360 25.700 28.380 29.390 29.520 29.490 30.080 33.040 39.930 47.430 47.810 42.480 35.960 29.430 23.900 20.690 19.320 18.970 18.600 18.290 18.220 18.220 18.310 18.780 19.620 20.090 19.970 19.650 19.090 18.690 18.940 20.010 1882 61.457 0.0000 33.165 7.8113 21.582 29.410 28.547 1.4200 0.99000 1.5900 7.3700 21.330 30.460 34.070 35.490 35.720 35.770 36.240 38.720 44.400 50.130 49.660 44.190 37.420 30.560 24.780 21.320 19.500 18.530 17.710 17.160 16.950 16.880 16.950 17.350 18.090 18.550 18.410 18.110 17.600 17.240 17.430 18.370 1883 100.00 67.374 94.324 0.0000 3.4384 5.1383 3.8390 0.47000 0.48000 1.0700 2.6800 4.1200 4.5600 4.5400 4.3400 4.1900 4.0800 4.2800 5.6000 8.4000 10.980 10.480 8.4400 6.7200 5.1300 3.5900 2.7400 2.7000 3.0700 3.1300 3.0000 2.9400 2.9300 2.9700 3.3000 3.9400 4.3600 4.2300 3.9300 3.4900 3.1800 3.4100 4.3000 1884 100.00 78.467 99.882 0.0000 3.1373 3.9971 3.1479 0.38000 0.46000 1.0800 2.5600 3.7300 3.9800 3.8600 3.6500 3.4500 3.3100 3.4000 4.3300 6.3100 7.9800 7.3200 5.6700 4.5400 3.6400 2.7000 2.2300 2.4400 3.0500 3.2700 3.2000 3.1800 3.1700 3.2000 3.5600 4.2400 4.6900 4.5400 4.2300 3.7200 3.4000 3.6000 4.5100 1885 91.815 59.410 68.296 3.4532 5.2631 6.9924 7.3922 0.63000 0.48000 1.1600 3.6700 7.3200 9.1100 9.4500 9.2400 8.8400 8.3700 8.2400 9.2400 11.620 13.740 13.040 10.810 8.7400 6.7700 4.8900 3.8500 3.7900 4.3300 4.5800 4.5600 4.5800 4.6000 4.6600 5.0000 5.6500 6.0700 5.9600 5.6400 5.2000 4.9000 5.0900 6.0100 1886 89.007 63.409 79.232 9.1355 5.0268 6.2450 5.4013 0.61000 0.54000 1.1200 3.1600 5.6400 6.7000 6.8200 6.5800 6.2900 5.9600 5.9500 6.9400 9.2300 11.340 10.840 9.0000 7.3900 5.8900 4.4200 3.6500 3.8000 4.5300 4.9700 5.0800 5.1500 5.1900 5.2600 5.5900 6.2200 6.6200 6.5000 6.2300 5.8100 5.4900 5.7000 6.5100 1887 85.405 53.418 72.518 0.0000 7.1140 9.2799 7.4103 0.57000 0.48000 1.1500 3.5200 7.0100 8.6400 9.0100 8.9100 8.6700 8.4000 8.5500 10.050 13.450 16.750 16.440 13.980 11.520 9.1100 6.8100 5.5400 5.5400 6.3400 6.8300 6.9800 7.0700 7.1400 7.2200 7.6400 8.3800 8.8700 8.7300 8.4000 7.8800 7.5200 7.7100 8.7300 1888 65.419 39.703 56.509 9.3257 13.251 15.447 12.326 0.92000 0.80000 1.3100 4.7500 11.220 14.570 15.340 15.260 14.880 14.440 14.420 15.890 19.360 22.890 22.810 20.330 17.710 15.020 12.490 11.100 11.230 12.480 13.420 13.890 14.150 14.280 14.400 14.850 15.600 16.050 15.920 15.630 15.130 14.760 14.960 15.920 1889 68.522 39.689 57.912 0.0000 12.936 15.592 12.858 0.79000 0.69000 1.2300 4.7900 11.440 14.960 15.870 15.880 15.530 15.090 15.150 16.780 20.700 24.680 24.480 21.530 18.370 15.180 12.210 10.580 10.620 11.840 12.760 13.210 13.480 13.600 13.740 14.240 15.080 15.600 15.460 15.090 14.560 14.150 14.370 15.440 1890 79.094 38.687 52.334 6.6300 9.9173 12.856 13.062 0.81000 0.58000 1.2200 4.7800 11.520 15.280 16.320 16.410 16.020 15.510 15.420 16.680 19.730 22.670 22.090 19.180 16.040 12.840 9.8600 8.1300 7.8200 8.3300 8.6500 8.7000 8.7700 8.8200 8.8900 9.3000 10.040 10.490 10.380 10.040 9.5600 9.2100 9.4100 10.310 1891 69.881 43.321 47.691 8.9077 11.505 13.293 13.116 0.98000 0.71000 1.3100 5.1800 12.230 15.910 16.780 16.670 16.120 15.460 15.170 16.060 18.420 20.650 20.010 17.590 15.150 12.700 10.350 9.0500 9.1800 10.290 11.120 11.500 11.730 11.850 11.990 12.440 13.180 13.650 13.560 13.240 12.760 12.400 12.590 13.540 1892 76.150 37.118 62.676 6.4825 9.9962 13.078 10.721 0.59000 0.71000 1.2700 4.3500 9.5800 12.220 12.930 13.000 12.820 12.580 12.790 14.500 18.370 22.280 22.230 19.490 16.410 13.230 10.310 8.6300 8.3500 8.9200 9.2800 9.3500 9.4500 9.5100 9.6100 10.010 10.740 11.200 11.080 10.770 10.290 9.9400 10.130 11.070 1893 49.615 15.675 38.938 0.0000 25.904 30.828 24.429 1.5100 0.96000 1.5300 7.1400 19.800 27.330 29.660 30.250 30.090 29.810 30.080 32.410 37.860 43.710 44.080 40.250 35.660 30.940 26.760 24.430 23.960 24.780 25.420 25.750 26.010 26.130 26.330 26.890 27.790 28.310 28.220 27.880 27.370 26.970 27.190 28.350 1894 48.691 18.685 29.539 0.0000 26.328 30.348 28.153 1.4600 1.0200 1.6600 8.1500 23.170 32.390 35.220 35.730 35.220 34.480 34.230 35.630 39.380 43.100 42.400 38.500 34.140 29.740 25.810 23.640 23.390 24.500 25.420 25.930 26.290 26.440 26.650 27.190 28.100 28.630 28.530 28.190 27.690 27.320 27.540 28.660 1895 46.482 24.435 39.423 0.0000 25.083 28.040 22.180 1.5600 0.94000 1.5300 6.9300 18.840 25.710 27.530 27.740 27.310 26.740 26.720 28.500 32.860 37.440 37.500 34.330 30.790 27.190 23.880 22.130 22.380 24.190 25.750 26.690 27.250 27.510 27.770 28.370 29.280 29.820 29.730 29.410 28.870 28.520 28.750 29.890 1896 36.130 5.1525 21.756 2.1594 38.328 44.713 39.992 2.2600 1.3100 1.8500 9.6600 30.510 45.120 49.760 50.820 50.360 49.640 49.420 51.140 55.820 60.650 60.320 55.810 50.490 45.080 40.380 37.730 36.720 36.740 36.690 36.570 36.580 36.590 36.740 37.220 38.050 38.490 38.390 38.080 37.590 37.260 37.440 38.510 1897 18.365 0.0000 14.551 0.0000 56.886 63.934 50.997 2.8900 1.5800 2.2900 12.310 38.480 57.260 63.130 64.410 64.190 63.780 63.820 65.790 70.690 75.910 76.770 73.770 69.660 65.230 61.340 59.130 57.880 57.320 56.780 56.470 56.460 56.490 56.710 57.260 58.020 58.460 58.430 58.220 57.990 57.820 58.060 59.060 1898 31.370 9.9715 25.832 0.0000 39.775 44.569 35.161 1.8600 1.2400 1.8300 9.1900 27.790 40.110 43.710 44.320 43.830 43.170 43.070 45.040 50.160 55.830 56.430 52.910 48.670 44.350 40.540 38.520 38.310 39.420 40.340 40.890 41.280 41.440 41.690 42.250 43.100 43.580 43.520 43.250 42.860 42.560 42.780 43.910 1899 87.298 67.632 71.336 8.7899 5.4297 6.2168 6.2033 0.35000 0.56000 1.1200 3.3400 6.5500 7.9600 8.1400 7.8200 7.4000 6.9000 6.7000 7.4300 9.2300 10.820 10.100 8.3000 6.8600 5.5800 4.2900 3.6300 3.9300 4.8700 5.4800 5.6800 5.8000 5.8500 5.9200 6.2900 6.9500 7.3700 7.2500 6.9500 6.5000 6.1700 6.3500 7.2500 1900 86.013 74.869 77.544 0.0000 5.6434 5.8820 5.4623 0.45000 0.45000 1.1500 3.2500 6.0400 7.1500 7.2300 6.8800 6.4500 5.9800 5.7800 6.4800 8.1800 9.6200 8.8100 7.0600 5.8300 4.8400 3.8100 3.3400 3.9100 5.2700 6.2400 6.6200 6.8300 6.9300 7.0400 7.4800 8.2400 8.7400 8.6200 8.2800 7.7400 7.3700 7.5500 8.5600 1901 98.284 83.807 100.00 6.0138 2.8928 3.3630 2.8799 0.56000 0.45000 1.0600 2.5100 3.5300 3.7700 3.6700 3.4200 3.2100 3.0100 3.0400 3.7500 5.2600 6.4500 5.7200 4.3200 3.4700 2.8700 2.2100 1.9000 2.2000 2.8600 3.1500 3.1300 3.1200 3.1300 3.1700 3.5200 4.1900 4.6100 4.4800 4.1700 3.7100 3.3900 3.5700 4.4900 1902 82.544 63.713 77.799 0.0000 6.8030 7.7286 6.0618 0.57000 0.62000 1.1000 3.3200 6.2400 7.4900 7.6500 7.3900 7.0600 6.7000 6.7000 7.7900 10.390 12.790 12.270 10.200 8.4800 6.9300 5.3800 4.6000 5.0500 6.3800 7.3200 7.7200 7.9400 8.0300 8.1500 8.5800 9.3300 9.8200 9.6700 9.3400 8.8400 8.4600 8.6900 9.6500 1903 65.392 51.911 46.589 9.3539 12.318 12.830 13.213 0.79000 0.61000 1.3000 5.1400 12.810 16.870 17.580 17.180 16.320 15.300 14.690 15.150 16.730 18.220 17.340 15.170 13.250 11.440 9.6400 8.7400 9.3600 11.200 12.700 13.520 13.950 14.140 14.300 14.750 15.500 15.950 15.840 15.570 15.070 14.740 14.870 15.840 1904 58.506 46.319 42.991 0.0000 16.713 17.301 16.691 0.94000 0.80000 1.3500 5.9900 15.730 21.050 22.070 21.600 20.610 19.420 18.750 19.400 21.640 23.840 22.930 20.240 17.760 15.410 13.120 11.990 12.850 15.370 17.520 18.770 19.460 19.730 19.950 20.510 21.400 21.920 21.790 21.410 20.880 20.400 20.620 21.690 1905 62.958 46.398 57.193 0.0000 14.070 15.179 11.990 0.80000 0.65000 1.2700 4.8900 11.300 14.540 15.160 14.970 14.470 13.900 13.770 15.050 18.230 21.400 21.060 18.580 16.190 13.860 11.610 10.490 11.170 13.310 15.090 16.080 16.660 16.890 17.110 17.660 18.550 19.100 18.990 18.620 18.080 17.650 17.860 18.980 1906 72.793 56.662 64.228 6.7961 9.2610 10.131 8.6405 0.64000 0.63000 1.2900 4.1200 8.6200 10.690 11.100 10.830 10.360 9.8500 9.6900 10.650 12.990 15.240 14.740 12.730 10.920 9.1900 7.4800 6.6300 7.1100 8.6200 9.7900 10.380 10.700 10.850 10.990 11.440 12.200 12.680 12.560 12.260 11.760 11.380 11.600 12.560 1907 54.073 31.924 39.902 5.7145 19.125 21.280 18.668 1.1900 0.76000 1.4000 6.1500 16.450 22.350 23.750 23.700 23.030 22.260 21.930 23.060 26.180 29.420 29.090 26.330 23.380 20.400 17.600 16.120 16.370 17.990 19.340 20.100 20.550 20.730 20.910 21.410 22.210 22.680 22.570 22.270 21.780 21.430 21.610 22.610 1908 69.723 62.686 63.041 0.0000 9.7748 9.7709 8.6700 0.56000 0.59000 1.2000 4.0800 8.9300 11.190 11.500 11.070 10.460 9.7300 9.3900 10.120 12.120 13.990 13.220 11.180 9.5400 8.1100 6.6800 6.0500 6.9300 9.1100 10.890 11.860 12.360 12.590 12.770 13.270 14.090 14.610 14.500 14.140 13.600 13.200 13.420 14.460 1909 37.678 20.187 23.855 0.0000 32.048 34.507 31.181 1.8300 1.1500 1.7500 9.0100 26.170 36.920 39.770 39.970 39.100 37.990 37.370 38.270 41.160 44.050 43.300 39.950 36.420 32.940 29.740 28.110 28.510 30.630 32.520 33.730 34.470 34.770 35.060 35.650 36.570 37.080 37.010 36.720 36.290 35.920 36.180 37.320 1910 40.572 32.420 26.433 0.0000 27.324 27.760 26.554 1.6200 1.0700 1.6700 8.2000 23.670 33.050 35.100 34.590 33.210 31.580 30.510 30.800 32.710 34.620 33.550 30.600 27.810 25.160 22.630 21.470 22.530 25.680 28.550 30.400 31.430 31.860 32.190 32.780 33.680 34.200 34.100 33.750 33.260 32.920 33.070 34.190 1911 47.524 36.123 43.109 0.0000 22.231 23.185 18.417 1.3000 0.85000 1.4700 6.3800 16.710 22.290 23.430 23.270 22.600 21.810 21.500 22.740 26.020 29.390 29.150 26.500 23.860 21.290 18.820 17.660 18.610 21.410 23.900 25.460 26.370 26.760 27.060 27.690 28.610 29.170 29.090 28.770 28.250 27.890 28.090 29.280 1912 24.869 18.662 18.524 3.8553 39.620 40.597 34.990 2.0000 1.2400 1.8700 9.5700 29.440 42.380 45.450 45.180 43.920 42.440 41.490 41.880 43.930 46.130 45.580 43.110 40.670 38.280 36.010 35.060 36.030 38.950 41.650 43.470 44.540 45.010 45.370 45.970 46.750 47.200 47.180 46.970 46.660 46.480 46.720 47.690 1913 12.144 6.5484 11.546 0.0000 61.141 63.855 52.417 2.8800 1.5700 2.1800 11.920 40.030 61.660 67.510 67.630 66.270 64.610 63.530 64.040 66.610 69.420 69.400 67.150 64.760 62.330 60.020 59.080 59.740 61.940 63.860 65.110 65.890 66.200 66.540 67.110 67.800 68.170 68.150 67.980 67.760 67.720 67.920 68.780 1914 24.106 9.0434 13.915 0.0000 47.252 51.080 45.256 2.3500 1.4200 2.0800 11.300 35.350 52.330 57.310 58.040 57.290 56.220 55.560 56.340 58.920 61.430 60.630 57.310 53.690 50.030 46.700 44.990 45.020 46.440 47.660 48.420 48.950 49.180 49.480 50.100 50.960 51.460 51.420 51.190 50.850 50.630 50.900 51.950 1915 21.968 9.2382 18.908 8.4187 42.311 45.537 37.221 2.2000 1.2700 1.8300 9.6100 30.070 43.810 47.330 47.500 46.650 45.640 45.120 46.110 49.210 52.600 52.800 50.490 47.800 44.990 42.400 41.120 41.220 42.460 43.490 44.130 44.550 44.730 44.960 45.450 46.100 46.460 46.440 46.250 45.990 45.820 45.980 46.820 1916 11.037 0.0000 4.6741 0.0000 69.299 74.907 65.813 3.4400 1.7900 2.4600 13.240 46.320 74.670 83.840 85.150 84.210 82.930 81.910 81.900 83.100 84.110 83.440 81.100 78.360 75.320 72.510 70.970 70.040 69.650 69.280 69.100 69.170 69.220 69.450 69.970 70.640 71.000 71.000 70.870 70.700 70.700 70.890 71.770 1917 94.430 100.00 99.685 6.7735 2.9875 2.5761 2.7506 0.51000 0.58000 1.1600 2.6000 3.7000 3.9200 3.7800 3.4700 3.1800 2.9000 2.7500 3.0400 3.7800 4.1400 3.1800 2.0300 1.6100 1.5500 1.4100 1.4600 2.0500 3.0900 3.7000 3.8600 3.9400 3.9700 4.0300 4.3800 5.0500 5.4900 5.3500 5.0400 4.5700 4.2400 4.4300 5.3000 1918 80.135 79.482 82.476 0.0000 6.4306 5.9569 4.9151 0.70000 0.63000 1.1700 3.2300 5.6400 6.5800 6.5800 6.1800 5.7600 5.3000 5.0900 5.7400 7.3000 8.5900 7.7000 6.0300 5.0400 4.3500 3.5900 3.3400 4.2800 6.2800 7.7700 8.5000 8.8500 9.0000 9.1400 9.6100 10.440 10.940 10.800 10.420 9.8700 9.4700 9.6500 10.680 1919 81.345 84.592 73.325 0.0000 6.1102 5.2911 5.4140 0.56000 0.50000 1.1200 3.3000 6.3300 7.5500 7.5500 7.0900 6.5000 5.8500 5.4400 5.7400 6.7100 7.4000 6.3900 4.8800 4.0600 3.5600 2.9700 2.8300 3.7900 5.7800 7.3100 8.0700 8.4700 8.6300 8.7800 9.2500 10.070 10.570 10.450 10.100 9.5500 9.1700 9.3800 10.400 1920 95.375 92.330 100.00 0.0000 3.2901 3.1547 2.9979 0.44000 0.52000 1.1100 2.6300 3.8600 4.1000 4.0000 3.6700 3.4200 3.1600 3.0800 3.6000 4.7400 5.5000 4.4900 3.0800 2.4600 2.1900 1.8300 1.7400 2.3200 3.3800 3.9700 4.1000 4.1400 4.1700 4.2300 4.6200 5.3500 5.8100 5.6600 5.3100 4.8000 4.4200 4.6000 5.5500 1921 60.359 65.104 48.607 0.0000 13.028 11.661 11.580 0.82000 0.61000 1.3200 5.0000 12.190 15.710 16.020 15.300 14.210 12.990 12.160 12.340 13.490 14.520 13.460 11.450 10.010 8.8600 7.6500 7.2500 8.6900 11.970 14.860 16.650 17.600 17.990 18.270 18.840 19.720 20.230 20.130 19.800 19.280 18.900 19.090 20.170 1922 56.256 55.295 41.554 8.4443 14.539 13.875 13.485 0.89000 0.69000 1.3400 5.5200 13.600 17.670 18.210 17.620 16.640 15.500 14.770 15.000 16.210 17.360 16.470 14.540 12.970 11.600 10.180 9.6300 10.800 13.550 15.950 17.390 18.190 18.540 18.800 19.340 20.140 20.640 20.560 20.270 19.800 19.430 19.640 20.610 1923 62.714 65.065 65.104 3.6924 11.800 10.956 8.4593 0.93000 0.78000 1.3300 4.1900 8.8800 11.080 11.220 10.770 10.130 9.4400 9.1100 9.8400 11.830 13.680 12.980 11.100 9.7300 8.6300 7.4700 7.0600 8.4300 11.430 13.950 15.420 16.190 16.490 16.720 17.270 18.140 18.660 18.520 18.170 17.600 17.170 17.360 18.350 1924 55.397 50.135 54.678 2.4798 15.897 15.846 12.096 0.89000 0.70000 1.2800 4.8900 11.700 15.050 15.580 15.240 14.650 13.960 13.720 14.740 17.420 20.020 19.610 17.440 15.520 13.750 11.970 11.210 12.400 15.320 17.860 19.410 20.270 20.640 20.940 21.510 22.420 22.970 22.880 22.540 22.010 21.590 21.820 22.930 1925 46.613 51.912 41.597 0.0000 20.366 18.893 16.610 1.2200 0.86000 1.4500 6.2200 16.490 21.810 22.470 21.680 20.420 19.020 18.120 18.500 20.300 22.100 21.200 18.900 17.050 15.470 13.860 13.300 15.090 19.250 23.050 25.510 26.840 27.370 27.730 28.350 29.280 29.820 29.700 29.310 28.790 28.350 28.520 29.570 1926 28.341 29.684 28.629 6.1142 30.967 30.650 24.280 1.6500 0.99000 1.5700 7.6100 21.850 30.120 31.670 31.160 30.090 28.850 28.160 28.820 31.210 33.840 33.690 31.660 29.710 27.880 26.090 25.460 26.880 30.460 33.880 36.220 37.540 38.100 38.490 39.080 39.840 40.280 40.230 40.030 39.720 39.510 39.710 40.630 1927 31.860 38.601 28.287 0.0000 29.934 28.169 24.007 1.4000 0.92000 1.6200 7.8200 22.460 30.790 32.110 31.270 29.790 28.130 27.040 27.290 29.040 30.910 30.140 27.820 25.840 24.110 22.420 21.880 23.870 28.590 33.230 36.490 38.340 39.150 39.650 40.360 41.250 41.750 41.720 41.460 41.050 40.800 41.020 42.070 1928 24.874 26.749 14.507 2.1031 39.391 38.283 36.356 2.1400 1.2300 1.8500 10.030 31.610 45.930 48.780 47.840 45.770 43.460 41.750 41.210 41.830 42.540 41.180 38.570 36.340 34.310 32.350 31.670 33.380 37.710 41.900 44.810 46.450 47.130 47.600 48.250 49.100 49.600 49.540 49.300 48.960 48.700 48.830 49.890 1929 41.714 39.162 35.547 6.6873 22.420 22.128 18.341 1.3200 0.83000 1.4600 6.6000 17.310 23.000 23.960 23.540 22.630 21.590 20.980 21.610 23.720 25.880 25.420 23.360 21.470 19.680 17.920 17.200 18.460 21.640 24.560 26.460 27.540 28.010 28.340 28.920 29.750 30.240 30.200 29.940 29.530 29.260 29.460 30.440 1930 14.571 15.851 12.616 0.0000 52.092 51.704 43.062 2.4600 1.5200 2.0700 11.350 35.760 52.400 56.160 55.700 54.210 52.440 51.200 51.250 52.820 54.510 53.900 51.740 49.830 48.050 46.310 45.840 47.630 51.860 55.950 58.850 60.550 61.270 61.850 62.580 63.410 63.900 63.920 63.790 63.590 63.520 63.760 64.800 1931 4.3802 14.132 6.9277 8.0473 54.702 53.027 43.378 2.3200 1.5000 2.0200 11.200 36.370 53.910 57.400 56.410 54.580 52.560 51.080 50.550 51.010 51.690 51.310 50.180 49.530 49.100 48.590 48.900 51.000 55.290 59.500 62.520 64.290 65.080 65.630 66.210 66.750 66.980 67.080 67.090 67.130 67.280 67.450 68.000 1932 8.0924 10.675 0.0000 9.1367 55.556 55.415 52.552 2.7000 1.5400 2.1700 12.060 41.490 64.590 70.110 69.290 66.970 64.380 62.200 60.440 58.950 57.690 56.320 54.690 53.540 52.510 51.430 51.230 52.430 55.200 57.730 59.450 60.430 60.860 61.220 61.710 62.240 62.490 62.530 62.490 62.440 62.440 62.600 63.210 1933 16.732 26.926 20.554 0.0000 43.941 41.438 32.565 2.0800 1.1800 1.7900 9.5100 28.990 41.160 43.240 42.230 40.530 38.650 37.430 37.640 39.580 41.830 41.490 39.520 37.900 36.520 35.150 34.960 37.430 43.080 48.910 53.230 55.770 56.880 57.560 58.350 59.200 59.680 59.670 59.530 59.280 59.160 59.340 60.290 1934 5.0642 7.5369 0.0000 0.80345 71.469 71.562 64.204 3.4200 1.9200 2.5500 13.850 48.110 76.580 84.370 84.200 82.150 79.730 77.580 75.830 74.340 73.110 71.790 70.190 69.090 68.200 67.160 67.140 68.670 71.970 74.930 77.000 78.270 78.810 79.330 79.970 80.630 80.960 81.050 81.030 81.020 81.140 81.370 82.090 1935 0.0000 11.846 0.0000 0.0000 78.574 75.088 66.442 3.6600 2.0600 2.5600 13.910 50.770 82.570 89.990 88.160 84.630 80.830 77.620 75.150 73.220 71.790 70.450 69.120 68.790 68.940 68.930 69.850 72.960 79.000 84.900 89.180 91.560 92.500 93.090 93.560 93.840 93.880 93.880 93.890 94.020 94.240 94.170 94.350 1936 60.309 72.604 69.483 0.0000 11.615 9.8819 7.0325 0.63000 0.59000 1.1300 3.8100 7.7100 9.3500 9.4200 8.9600 8.4000 7.7400 7.4300 8.0500 9.7400 11.240 10.490 8.7900 7.7000 6.9300 6.0800 5.9200 7.5900 11.190 14.400 16.380 17.440 17.900 18.210 18.830 19.770 20.370 20.250 19.900 19.330 18.910 19.110 20.260 1937 61.275 80.481 57.172 0.0000 11.099 8.5571 8.3880 0.81000 0.63000 1.2600 4.3900 9.7200 12.090 12.040 11.240 10.250 9.0900 8.3100 8.2400 8.8000 9.2100 8.0500 6.4600 5.6300 5.1500 4.5800 4.5900 6.3900 10.200 13.670 15.820 17.000 17.500 17.830 18.460 19.400 19.980 19.880 19.520 18.950 18.500 18.720 19.830 1938 84.870 95.805 100.00 0.0000 4.6333 3.7315 2.8363 0.46000 0.45000 1.0500 2.5500 3.6700 3.9400 3.8000 3.4900 3.2400 2.9900 2.8800 3.3400 4.3800 5.0400 4.0800 2.7500 2.2200 2.0700 1.8300 1.8900 2.8700 4.7400 6.1300 6.7800 7.1000 7.2400 7.3600 7.8100 8.6000 9.0900 8.9600 8.6000 8.0600 7.6800 7.8400 8.8200 1939 70.217 89.576 87.213 0.0000 7.3156 5.5590 3.8856 0.49000 0.45000 1.1200 2.9200 4.8300 5.4600 5.3400 4.9400 4.5400 4.1000 3.8800 4.3000 5.3700 6.1500 5.2400 3.8700 3.2700 3.0100 2.6900 2.7700 4.2000 7.1400 9.6900 11.160 11.940 12.260 12.480 13.000 13.850 14.360 14.250 13.910 13.370 12.980 13.160 14.170 1940 72.822 94.756 83.795 7.7670 5.9892 4.3365 3.7999 0.47000 0.53000 1.0900 2.9400 4.9000 5.5500 5.4500 4.9900 4.5100 4.0000 3.6500 3.8200 4.3900 4.7200 3.7900 2.6200 2.1800 2.1000 1.9400 2.0900 3.3300 5.8000 7.8900 9.0700 9.6700 9.9200 10.110 10.560 11.290 11.750 11.630 11.340 10.860 10.530 10.690 11.610 1941 65.974 77.573 67.130 5.5853 9.1701 7.6112 6.4426 0.67000 0.59000 1.1000 3.5800 7.3500 8.8900 8.8800 8.4000 7.7600 7.0400 6.6100 6.9200 8.0000 8.8800 8.0000 6.5100 5.6500 5.0900 4.4600 4.3700 5.7700 8.7400 11.300 12.810 13.600 13.940 14.210 14.740 15.600 16.110 16.020 15.680 15.170 14.770 14.970 15.970 1942 41.690 58.102 30.210 0.0000 21.270 18.067 18.055 1.1200 0.86000 1.4300 6.8700 18.680 24.900 25.420 24.200 22.400 20.410 18.960 18.490 18.880 19.320 18.020 15.960 14.540 13.470 12.340 12.140 14.390 19.400 24.310 27.690 29.570 30.390 30.900 31.610 32.550 33.120 33.060 32.740 32.280 31.960 32.160 33.270 1943 47.437 69.991 56.427 0.0000 15.792 12.611 9.5210 0.96000 0.74000 1.2700 4.5900 10.530 13.230 13.230 12.470 11.520 10.460 9.7900 10.090 11.390 12.570 11.710 10.010 8.9900 8.3200 7.6000 7.6200 9.8900 14.800 19.560 22.800 24.580 25.360 25.820 26.500 27.410 27.960 27.890 27.560 27.080 26.720 26.950 28.040 1944 39.332 62.050 37.381 8.2635 19.342 16.001 14.224 0.92000 0.73000 1.3100 5.8700 15.260 19.860 20.000 18.910 17.490 15.900 14.790 14.610 15.290 15.980 14.970 13.270 12.230 11.530 10.760 10.790 13.140 18.140 22.940 26.210 28.020 28.770 29.230 29.850 30.670 31.130 31.070 30.820 30.410 30.140 30.300 31.210 1945 31.040 55.932 33.159 0.0000 26.180 21.700 18.157 1.3800 0.88000 1.4600 6.9200 18.810 24.970 25.300 24.020 22.360 20.530 19.260 19.040 19.910 20.850 19.830 17.950 16.740 15.910 15.040 15.090 17.970 24.310 30.820 35.600 38.360 39.560 40.270 41.080 42.050 42.600 42.600 42.360 41.970 41.680 41.910 42.970 1946 33.834 48.752 30.347 6.3237 24.306 21.623 18.596 1.0900 0.83000 1.4800 6.9900 18.720 24.720 25.290 24.360 22.990 21.460 20.390 20.340 21.330 22.380 21.560 19.750 18.440 17.410 16.330 16.180 18.350 23.120 27.770 31.020 32.850 33.650 34.170 34.840 35.670 36.160 36.140 35.940 35.580 35.380 35.550 36.490 1947 10.846 40.110 0.0000 7.5792 40.382 34.124 34.024 2.1200 1.2400 1.8200 10.390 32.850 47.130 48.390 45.870 42.630 39.220 36.530 34.440 32.620 31.200 29.540 27.920 27.160 26.860 26.450 26.950 30.290 37.450 45.090 51.000 54.520 56.090 57.010 57.790 58.530 58.940 59.030 59.020 58.970 58.990 59.190 59.880 1948 22.870 43.470 17.205 0.0000 34.762 30.034 27.399 1.7500 1.0400 1.6500 8.8200 26.600 37.030 38.100 36.430 34.130 31.630 29.780 28.990 29.150 29.460 28.160 26.110 24.710 23.710 22.660 22.680 25.620 32.280 39.320 44.600 47.730 49.080 49.860 50.670 51.590 52.090 52.090 51.930 51.600 51.430 51.620 52.560 1949 19.496 52.992 29.935 8.6254 29.597 24.305 18.709 1.2900 1.0600 1.6000 7.1400 19.560 25.860 26.050 24.620 22.960 21.160 19.910 19.690 20.480 21.420 20.700 19.170 18.360 17.960 17.480 17.870 21.120 28.030 35.230 40.640 43.770 45.120 45.890 46.610 47.400 47.820 47.810 47.700 47.460 47.330 47.480 48.290 1950 16.762 30.335 11.589 0.0000 44.781 41.238 37.808 2.3700 1.3100 1.9000 10.510 33.740 49.140 51.630 50.020 47.470 44.670 42.580 41.620 41.700 41.980 40.610 38.350 36.710 35.420 34.090 33.950 36.640 42.790 49.100 53.780 56.490 57.630 58.310 59.060 59.930 60.390 60.380 60.180 59.890 59.720 59.870 60.810 1951 8.3060 30.745 0.0000 0.0000 52.849 46.180 43.907 2.6200 1.4100 2.0800 12.040 39.470 58.440 61.220 58.780 55.380 51.720 48.750 46.450 44.440 42.890 41.080 39.270 38.390 38.010 37.480 38.030 41.710 49.720 58.390 65.290 69.430 71.310 72.430 73.430 74.290 74.780 74.900 74.900 74.880 74.940 75.200 76.010 1952 6.6185 21.253 9.3366 0.0000 58.896 54.707 45.097 2.4400 1.5600 2.1100 11.570 38.480 57.520 60.850 59.200 56.600 53.840 51.760 50.970 51.450 52.240 51.490 49.840 48.860 48.270 47.560 47.960 51.160 58.040 65.260 70.750 73.930 75.330 76.160 76.920 77.640 78.030 78.090 78.020 77.970 78.030 78.200 78.850 1953 1.7938 19.830 0.0000 7.5716 57.299 52.754 46.778 2.6600 1.5000 2.0400 11.830 39.790 60.260 63.840 61.930 59.090 56.070 53.580 51.710 50.150 49.020 47.870 46.750 46.430 46.550 46.540 47.340 50.350 56.480 62.850 67.680 70.520 71.760 72.530 73.180 73.660 73.870 74.000 74.110 74.280 74.540 74.640 75.040 1954 0.0000 28.303 5.4392 0.0000 62.588 53.710 43.413 2.5300 1.4700 2.1100 11.710 38.820 57.670 60.030 57.540 54.340 51.000 48.460 46.920 46.230 45.940 44.900 43.590 43.300 43.610 43.830 45.040 49.660 59.560 70.970 80.550 86.540 89.290 90.820 91.820 92.450 92.720 92.910 93.070 93.370 93.720 93.870 94.190 1955 48.661 84.877 65.888 0.0000 13.929 9.6940 6.9068 0.90000 0.54000 1.1700 3.9800 8.3900 10.140 9.9500 9.1900 8.2900 7.3300 6.6900 6.7800 7.5500 8.1500 7.0900 5.5900 4.9400 4.7400 4.4400 4.7400 7.3300 12.860 18.290 21.990 24.050 24.930 25.420 26.120 27.110 27.690 27.580 27.250 26.690 26.280 26.460 27.530 1956 52.485 100.00 70.321 0.0000 11.460 6.9802 5.3952 0.66000 0.73000 1.1200 3.6400 7.0800 8.4100 8.1200 7.3700 6.5100 5.5800 4.8600 4.7200 4.9200 4.9200 3.6900 2.3700 1.9700 2.0600 2.0500 2.4900 5.0100 10.350 15.600 19.160 21.140 21.950 22.440 23.120 24.080 24.640 24.540 24.220 23.660 23.260 23.430 24.510 1957 68.453 100.00 80.415 0.0000 7.6339 5.1325 4.5649 0.46000 0.61000 1.2000 3.2800 5.9200 6.8100 6.6400 6.1100 5.4800 4.7900 4.3000 4.3500 4.8400 5.0300 3.8100 2.4400 2.0000 2.0100 1.9200 2.1900 3.9200 7.3600 10.320 12.020 12.890 13.240 13.460 14.040 14.960 15.500 15.360 14.950 14.340 13.840 13.990 15.080 1958 54.645 93.702 54.074 4.3874 11.319 7.2599 7.6636 0.87000 0.58000 1.3400 4.4700 9.8800 12.130 11.770 10.650 9.3500 7.9000 6.8000 6.3000 6.1600 5.9400 4.6400 3.2700 2.8000 2.7800 2.6800 3.0300 5.3100 10.120 14.730 17.730 19.340 20.010 20.400 21.020 21.900 22.420 22.290 21.960 21.450 21.040 21.180 22.220 1959 30.079 77.176 45.016 6.2876 19.890 13.782 10.534 1.2000 0.74000 1.2600 5.2000 12.630 15.750 15.450 14.190 12.820 11.300 10.200 9.8300 10.050 10.270 9.2000 7.8100 7.2600 7.1700 6.9900 7.5300 10.830 17.870 25.230 30.740 33.990 35.430 36.260 37.090 38.030 38.580 38.610 38.420 38.120 37.880 38.110 39.070 1960 36.452 69.808 28.151 2.4613 20.708 15.465 15.547 1.0200 0.81000 1.4000 6.5900 17.600 23.000 22.890 21.230 19.160 16.920 15.270 14.400 14.090 13.900 12.520 10.820 9.9400 9.5000 8.9800 9.2400 12.130 18.390 24.800 29.470 32.120 33.310 33.980 34.760 35.700 36.270 36.250 36.000 35.580 35.320 35.510 36.550 1961 22.275 68.077 20.602 1.9747 28.110 20.070 19.108 1.3700 0.96000 1.5100 7.6700 21.900 29.070 28.590 26.200 23.470 20.580 18.420 17.110 16.350 15.830 14.280 12.530 11.780 11.600 11.290 11.870 15.840 24.480 33.870 41.230 45.640 47.610 48.630 49.570 50.540 51.090 51.090 50.910 50.550 50.330 50.460 51.430 1962 33.643 68.071 41.081 0.0000 21.720 16.285 13.087 1.1300 0.78000 1.4000 5.8200 14.730 18.880 18.780 17.510 15.990 14.310 13.150 12.890 13.480 14.070 12.990 11.290 10.410 9.9900 9.4800 9.8000 12.960 19.750 26.790 31.970 34.960 36.290 37.020 37.850 38.840 39.420 39.390 39.130 38.730 38.420 38.630 39.690 1963 48.735 79.199 53.123 5.4723 13.857 10.202 8.7594 0.72000 0.61000 1.3100 4.8000 10.510 12.840 12.640 11.740 10.640 9.4300 8.5700 8.4300 8.9000 9.3100 8.2800 6.8400 6.1400 5.8200 5.4400 5.6400 7.9400 12.760 17.420 20.580 22.320 23.090 23.550 24.220 25.120 25.650 25.600 25.320 24.870 24.520 24.740 25.730 1964 0.63947 46.928 0.0000 6.3844 46.447 35.683 32.668 2.0600 1.1600 1.8600 10.520 33.730 47.790 47.840 44.300 40.440 36.550 33.520 31.230 29.290 27.870 26.240 24.790 24.410 24.710 24.900 25.980 30.800 41.250 53.500 64.000 70.670 73.760 75.420 76.430 77.050 77.330 77.530 77.700 77.920 78.250 78.370 78.560 1965 11.503 41.009 14.271 0.0000 44.597 37.525 31.784 2.0700 1.2300 1.7500 9.8500 30.770 43.480 44.470 42.240 39.470 36.560 34.410 33.400 33.360 33.630 32.410 30.570 29.610 29.150 28.580 29.090 33.030 41.670 51.150 58.690 63.230 65.250 66.350 67.280 68.170 68.630 68.670 68.560 68.360 68.260 68.420 69.210 1966 13.458 55.282 18.920 3.8969 34.890 27.016 22.651 1.6400 1.0200 1.6200 8.2900 24.140 32.550 32.530 30.370 27.910 25.310 23.380 22.380 22.100 22.060 20.890 19.330 18.660 18.490 18.230 18.890 22.830 31.520 41.190 49.030 53.820 56.010 57.190 58.150 59.040 59.520 59.610 59.560 59.430 59.390 59.610 60.400 1967 0.0000 37.991 0.0000 0.0000 58.500 46.915 42.455 2.6700 1.5900 2.1200 11.940 40.410 59.930 61.310 57.400 52.970 48.440 44.910 42.220 39.980 38.360 36.550 34.910 34.500 34.810 34.970 36.200 41.430 52.880 66.380 78.090 85.560 88.990 90.790 91.880 92.550 92.830 92.980 93.130 93.380 93.710 93.750 94.010 1968 41.848 97.677 43.823 5.3462 14.039 8.1890 8.4526 0.83000 0.69000 1.2800 4.8200 11.400 14.090 13.480 11.960 10.280 8.4400 7.0500 6.2000 5.6400 5.1000 3.7600 2.4600 2.0900 2.2000 2.2400 2.7700 5.6800 11.950 18.400 23.020 25.640 26.760 27.370 28.100 29.010 29.540 29.480 29.190 28.770 28.440 28.600 29.530 1969 13.300 70.617 26.691 7.1783 28.518 19.670 15.242 1.3000 0.86000 1.4400 6.7400 18.000 23.110 22.480 20.640 18.630 16.440 14.830 13.980 13.650 13.500 12.310 10.940 10.480 10.600 10.600 11.430 15.690 24.870 35.170 43.600 48.840 51.320 52.660 53.700 54.650 55.180 55.300 55.320 55.260 55.260 55.490 56.310 1970 27.149 100.00 49.303 7.9408 17.936 10.186 7.7423 0.95000 0.77000 1.2900 4.5800 10.610 12.920 12.190 10.830 9.3500 7.7500 6.5400 5.8700 5.5100 5.1400 3.8300 2.5300 2.1700 2.3600 2.4600 3.1600 6.8600 15.000 23.870 30.710 34.760 36.550 37.490 38.330 39.250 39.740 39.760 39.560 39.210 38.950 39.100 39.950 1971 32.020 100.00 42.367 0.0000 18.259 10.195 8.9209 0.84000 0.59000 1.2400 5.1400 12.300 15.170 14.340 12.660 10.790 8.8000 7.2800 6.3600 5.7000 5.1100 3.7100 2.3900 2.0300 2.1900 2.2900 2.9800 6.6200 14.770 23.790 30.930 35.250 37.200 38.260 39.240 40.330 40.950 40.980 40.760 40.370 40.090 40.330 41.410 1972 18.242 90.945 21.824 8.3892 22.624 13.224 12.200 1.0300 0.83000 1.4600 6.5100 16.560 20.640 19.480 17.190 14.780 12.200 10.250 8.8900 7.7900 6.9400 5.5300 4.2300 3.8700 4.0600 4.1900 5.0300 9.1500 18.240 28.530 36.980 42.260 44.770 46.130 47.180 48.190 48.760 48.910 48.850 48.710 48.640 48.880 49.760 1973 32.685 84.017 41.332 0.0000 19.992 13.011 10.870 1.0100 0.78000 1.3600 5.5800 13.530 16.940 16.410 14.910 13.240 11.400 10.060 9.3900 9.2300 9.0800 7.7900 6.3000 5.7300 5.6900 5.5500 6.1100 9.6100 17.230 25.430 31.690 35.400 37.080 38.020 38.950 40.030 40.670 40.680 40.460 40.060 39.750 40.010 41.120 1974 25.376 83.217 18.074 0.0000 23.614 14.833 15.502 1.1100 0.80000 1.4700 7.1400 19.700 25.450 24.430 21.780 18.880 15.830 13.550 11.980 10.740 9.8000 8.2000 6.6800 6.1500 6.1500 6.0600 6.6900 10.520 19.180 28.910 36.770 41.600 43.830 45.000 46.030 47.100 47.700 47.750 47.580 47.250 47.030 47.280 48.250 1975 18.976 77.957 18.172 8.4877 24.637 16.075 14.991 1.1300 0.81000 1.5000 7.0800 18.790 23.930 23.070 20.780 18.270 15.650 13.660 12.320 11.320 10.580 9.2100 7.8700 7.4300 7.5200 7.5300 8.2700 12.180 20.740 30.290 38.010 42.790 45.010 46.200 47.170 48.110 48.660 48.750 48.710 48.540 48.460 48.680 49.480 1976 15.037 89.104 13.413 0.0000 28.209 16.517 15.855 1.3100 0.78000 1.5200 7.8200 21.160 27.040 25.520 22.390 19.160 15.810 13.260 11.450 9.9000 8.7600 7.0900 5.6000 5.1700 5.3600 5.4600 6.3600 11.040 21.730 34.430 45.540 52.850 56.400 58.290 59.660 60.890 61.600 61.770 61.750 61.590 61.520 61.780 62.760 1977 11.241 73.293 0.0000 4.5730 31.893 20.999 22.235 1.4200 1.00000 1.5600 9.0100 26.950 36.220 34.860 31.060 27.100 23.090 20.040 17.730 15.680 14.170 12.370 10.780 10.290 10.420 10.450 11.320 15.920 26.120 37.850 47.790 54.070 57.030 58.560 59.670 60.620 61.150 61.250 61.220 61.170 61.140 61.290 62.020 1978 8.1756 60.431 17.036 0.0000 38.821 27.915 22.214 1.4800 0.98000 1.6400 8.4400 24.620 32.970 32.560 30.010 27.260 24.360 22.220 20.990 20.440 20.170 18.850 17.270 16.720 16.820 16.790 17.730 22.600 33.430 46.190 57.330 64.580 68.040 69.910 71.250 72.340 72.920 73.130 73.140 73.130 73.230 73.440 74.270 1979 10.505 59.898 0.0000 0.0000 38.748 28.039 27.983 1.9000 1.1000 1.8200 10.210 30.870 42.360 41.960 38.410 34.560 30.580 27.470 25.120 23.020 21.460 19.580 17.860 17.230 17.240 17.130 17.990 22.700 33.010 44.950 55.090 61.550 64.640 66.310 67.600 68.690 69.320 69.520 69.520 69.440 69.520 69.740 70.650 1980 8.7851 72.110 15.849 0.0000 35.472 23.199 19.370 1.6100 0.97000 1.5500 8.2000 23.360 30.670 29.610 26.670 23.580 20.400 18.010 16.450 15.360 14.610 13.080 11.550 11.070 11.240 11.300 12.260 17.230 28.600 42.420 54.880 63.230 67.300 69.410 70.870 72.000 72.620 72.820 72.860 72.860 72.930 73.130 73.920 1981 0.0000 61.145 2.5943 7.7854 40.218 28.190 25.597 1.7800 1.1600 1.7100 9.4400 29.010 39.630 38.650 35.060 31.370 27.610 24.750 22.650 20.860 19.580 17.930 16.470 16.070 16.380 16.570 17.670 22.730 33.940 47.280 59.070 66.750 70.420 72.290 73.420 74.100 74.380 74.630 74.800 75.060 75.360 75.430 75.650 1982 0.0000 100.00 16.351 6.4599 31.004 16.278 12.852 1.4100 0.87000 1.4900 6.9000 18.710 23.420 21.470 18.340 15.300 12.150 9.7900 8.1200 6.6800 5.6100 4.0400 2.6700 2.3400 2.6400 2.8600 3.8800 9.1600 21.710 37.630 52.890 63.730 69.270 72.130 73.770 74.750 75.220 75.580 75.820 76.160 76.500 76.600 76.840 1983 13.962 100.00 29.566 4.6678 23.468 12.658 10.315 1.2800 0.92000 1.3600 5.8600 14.760 18.190 16.950 14.680 12.370 9.9400 8.1100 6.8600 5.8700 5.0900 3.6900 2.4300 2.1200 2.3600 2.5100 3.3600 7.6600 17.710 29.730 40.140 46.940 50.210 51.910 53.140 54.210 54.790 54.960 54.910 54.840 54.780 54.980 55.780 1984 0.0000 100.00 0.0000 0.0000 36.222 18.592 16.754 1.4600 0.93000 1.5600 8.5600 24.720 31.690 28.770 24.120 19.730 15.380 12.120 9.7200 7.6100 6.0900 4.2700 2.7800 2.4300 2.7500 2.9800 4.0600 9.7600 23.580 41.870 60.530 74.700 82.280 86.240 88.490 89.820 90.510 90.990 91.330 91.730 92.210 92.390 92.600 1985 10.735 100.00 0.0000 0.0000 28.822 15.069 15.742 1.3000 0.87000 1.5200 8.0600 22.960 29.340 26.930 22.760 18.670 14.570 11.510 9.2200 7.1900 5.7300 3.9900 2.5800 2.2300 2.5000 2.6900 3.6300 8.5600 20.200 34.650 48.000 57.240 61.870 64.300 65.940 67.250 67.960 68.220 68.260 68.220 68.260 68.520 69.390 1986 7.0888 100.00 0.0000 9.2192 27.109 14.385 15.148 1.5800 1.0800 1.6700 7.9800 22.080 28.050 25.710 21.810 17.990 14.140 11.230 9.0500 7.1300 5.7600 4.0900 2.7100 2.3800 2.6500 2.8200 3.7400 8.5200 19.700 33.210 45.210 53.180 57.040 59.030 60.300 61.230 61.710 61.920 61.960 61.960 62.020 62.110 62.610 1987 0.0000 78.561 0.0000 0.0000 40.191 24.006 21.396 1.9800 1.0400 1.7500 9.2600 27.420 36.370 34.330 30.010 25.780 21.550 18.360 15.970 13.900 12.390 10.610 9.1100 8.7300 9.0700 9.3000 10.460 16.050 29.250 46.440 63.460 75.930 82.430 85.850 87.870 89.130 89.770 90.210 90.560 90.970 91.410 91.650 92.050 1988 100.00 0.0000 76.419 0.0000 7.5589 17.061 10.612 0.74000 0.57000 1.2800 3.7900 7.6000 9.6400 10.530 11.080 11.560 12.190 13.560 18.030 28.430 41.080 43.560 36.650 27.680 18.920 11.880 7.7700 5.7600 4.7200 3.8900 3.3400 3.1500 3.0900 3.1100 3.4400 4.1000 4.5500 4.4100 4.1000 3.6200 3.3300 3.5200 4.4900 1989 100.00 9.9624 82.517 8.0976 6.1171 13.168 7.7994 0.58000 0.55000 1.1800 3.1900 5.9200 7.2900 7.8300 8.1000 8.3700 8.7500 9.7800 13.250 21.190 30.390 32.190 27.540 21.340 14.950 9.5600 6.3700 4.8700 4.1300 3.5000 3.0800 2.9000 2.8600 2.8800 3.1800 3.7700 4.1700 4.0400 3.7600 3.3600 3.0900 3.2700 4.0800 1990 85.956 0.0000 76.662 0.0000 11.276 21.118 11.085 0.79000 0.65000 1.1800 3.7300 7.8700 10.100 11.020 11.530 12.020 12.610 14.010 18.610 29.650 43.770 47.520 41.080 32.220 23.480 16.430 12.300 10.240 9.1500 8.2700 7.6600 7.4500 7.3800 7.4000 7.8000 8.5200 8.9800 8.8500 8.5000 7.9700 7.6200 7.8300 8.8000 1991 87.040 0.0000 63.047 0.0000 12.221 22.197 16.871 0.87000 0.74000 1.3100 4.9300 12.100 16.430 18.320 19.260 19.780 20.350 21.600 25.960 36.100 48.000 49.610 42.260 32.960 23.930 16.620 12.320 10.180 9.0500 8.1300 7.4900 7.2600 7.1700 7.2000 7.6000 8.3500 8.8200 8.6800 8.3100 7.7700 7.4000 7.5800 8.5300 1992 100.00 33.701 93.287 7.2448 4.7785 9.4031 4.8862 0.54000 0.53000 1.0900 2.6400 4.2000 4.7600 4.8900 4.8700 4.9600 5.1700 5.9000 8.5200 14.390 20.790 21.740 18.600 14.710 10.650 7.0200 4.8700 4.0200 3.7600 3.4200 3.0900 2.9700 2.9300 2.9500 3.2600 3.8900 4.2800 4.1700 3.8600 3.4200 3.1200 3.2900 4.1300 1993 100.00 31.549 82.227 0.0000 5.6682 10.964 7.4727 0.55000 0.57000 1.2000 3.3100 6.2300 7.5900 8.0600 8.1800 8.2600 8.4000 9.1000 11.870 18.100 24.830 25.470 21.600 16.930 12.160 7.9600 5.4600 4.4600 4.1300 3.7200 3.3500 3.2100 3.1600 3.1900 3.5300 4.2000 4.6500 4.5200 4.1800 3.7000 3.3700 3.5900 4.4700 1994 100.00 29.187 96.158 0.0000 5.5548 11.527 5.4225 0.64000 0.56000 1.0800 2.7900 4.3700 4.9200 5.0800 5.1300 5.3400 5.6900 6.6500 9.9900 17.510 26.010 27.470 23.420 18.360 13.130 8.5500 5.8400 4.7000 4.2900 3.8200 3.4200 3.2700 3.2100 3.2400 3.5800 4.2700 4.7100 4.5700 4.2200 3.7400 3.3900 3.6000 4.4900 1995 89.376 13.407 75.333 0.0000 9.3624 17.126 10.499 0.74000 0.64000 1.2900 3.8200 7.9900 10.120 11.000 11.360 11.670 12.070 13.140 17.000 25.850 36.190 38.040 32.710 25.850 18.900 13.060 9.6000 8.0500 7.3900 6.7800 6.3200 6.1600 6.1000 6.1400 6.5200 7.2500 7.7000 7.5500 7.2200 6.6700 6.3300 6.5200 7.5100 1996 68.388 1.6460 55.354 0.0000 18.533 27.876 19.164 1.1900 0.78000 1.4100 5.6400 14.140 19.150 21.210 22.200 22.750 23.300 24.530 28.650 38.160 49.500 51.870 45.910 37.940 29.940 23.370 19.490 17.510 16.480 15.610 15.010 14.820 14.760 14.830 15.290 16.120 16.630 16.500 16.130 15.570 15.150 15.370 16.480 1997 73.919 0.0000 66.333 0.0000 15.587 25.418 14.932 1.0900 0.82000 1.3500 4.7300 10.910 14.400 15.800 16.520 17.030 17.600 18.940 23.450 34.170 47.600 51.040 44.830 36.280 27.800 20.890 16.820 14.770 13.670 12.750 12.130 11.900 11.820 11.860 12.290 13.080 13.580 13.430 13.060 12.520 12.120 12.310 13.370 1998 99.427 61.115 100.00 9.3456 3.4514 5.4300 3.3141 0.37000 0.46000 1.0700 2.4100 3.4800 3.7300 3.6900 3.5400 3.4600 3.4600 3.7900 5.2500 8.3400 11.290 11.140 9.2300 7.4400 5.6900 3.9800 3.0100 2.8600 3.1400 3.1400 2.9700 2.9100 2.9000 2.9300 3.2400 3.8600 4.2500 4.1500 3.8300 3.4100 3.1200 3.3200 4.1700 1999 99.384 48.415 100.00 2.4890 3.9752 7.3603 3.8477 0.41000 0.45000 1.0100 2.5300 3.6400 3.9400 3.9400 3.8300 3.8400 3.9500 4.5000 6.6400 11.380 16.300 16.680 14.020 11.090 8.1000 5.3600 3.8000 3.3000 3.3100 3.1500 2.9000 2.8200 2.7900 2.8300 3.1400 3.7500 4.1300 4.0100 3.7300 3.3000 3.0300 3.2400 4.0900 2000 91.223 55.889 93.914 0.0000 5.2235 7.6519 4.2835 0.62000 0.43000 1.0600 2.6600 4.1300 4.6400 4.6800 4.5800 4.5500 4.5800 4.9900 6.8400 10.820 14.780 14.840 12.520 10.180 7.8600 5.6600 4.4200 4.3000 4.8400 5.0700 5.0400 5.0500 5.0800 5.1400 5.5200 6.2500 6.7100 6.5700 6.2500 5.7500 5.3900 5.5900 6.5100 2001 70.579 20.560 71.854 1.8007 13.772 19.417 10.586 0.99000 0.70000 1.2800 3.9800 8.4800 10.760 11.570 11.800 11.980 12.210 13.070 16.280 23.660 32.220 34.130 30.500 25.690 20.700 16.300 13.730 12.920 13.070 13.120 13.040 13.060 13.070 13.180 13.640 14.440 14.930 14.810 14.440 13.930 13.540 13.720 14.720 2002 68.848 19.397 59.775 0.0000 15.468 21.254 14.909 0.97000 0.78000 1.3200 5.0900 11.980 15.820 17.110 17.560 17.680 17.820 18.510 21.500 28.230 35.650 36.680 32.610 27.500 22.240 17.620 14.920 14.040 14.170 14.180 14.090 14.110 14.150 14.250 14.730 15.580 16.090 15.980 15.600 15.060 14.650 14.880 15.990 2003 85.826 30.108 77.815 1.6698 8.6762 13.735 8.4988 0.75000 0.66000 1.2100 3.5600 7.0500 8.7700 9.3100 9.4400 9.5200 9.6500 10.350 13.170 19.550 26.570 27.540 23.870 19.390 14.770 10.690 8.3000 7.4900 7.5200 7.4100 7.2100 7.1700 7.1600 7.2200 7.6100 8.3500 8.8100 8.6700 8.3500 7.8100 7.4700 7.6800 8.6300 2004 84.187 40.291 90.359 0.74611 7.6386 11.416 5.4947 0.55000 0.52000 1.0900 2.8700 4.8300 5.5800 5.7200 5.7100 5.7600 5.9200 6.5600 9.0900 14.800 21.010 21.910 19.020 15.600 12.090 8.9000 7.0700 6.7000 7.1200 7.3400 7.3300 7.3600 7.3800 7.4600 7.8500 8.6000 9.0700 8.9200 8.6100 8.0900 7.7400 7.9400 8.9500 2005 78.292 40.076 75.785 3.7286 9.5377 12.887 8.0054 0.68000 0.62000 1.2800 3.6200 7.1000 8.7600 9.1800 9.1800 9.1100 9.0800 9.5100 11.710 16.700 22.010 22.540 19.730 16.530 13.240 10.210 8.4800 8.2400 8.9000 9.3200 9.4200 9.5200 9.5600 9.6400 10.060 10.810 11.280 11.150 10.810 10.300 9.9600 10.130 11.110 2006 55.798 9.6890 58.613 0.0000 23.607 31.158 18.914 1.5600 1.1200 1.4600 5.7100 14.720 19.880 21.530 22.110 22.320 22.580 23.530 27.380 36.370 47.160 49.830 45.330 39.190 32.860 27.460 24.350 23.150 23.030 22.830 22.610 22.560 22.520 22.620 23.110 23.960 24.450 24.280 23.900 23.350 22.900 23.020 24.120 2007 61.611 4.0629 56.059 7.5011 18.954 26.361 16.948 1.0800 0.82000 1.3700 5.2500 13.010 17.430 19.010 19.730 20.090 20.480 21.470 24.960 32.850 42.080 44.330 40.250 34.430 28.360 23.150 20.050 18.550 17.900 17.290 16.840 16.730 16.690 16.760 17.190 17.940 18.410 18.310 17.990 17.510 17.160 17.370 18.350 2008 52.323 7.2891 43.382 6.4758 22.988 29.423 22.183 1.2400 0.89000 1.4700 6.3800 17.390 24.000 26.250 27.010 27.100 27.130 27.690 30.450 36.880 44.080 45.300 41.330 36.090 30.670 25.960 23.250 22.090 21.830 21.550 21.290 21.250 21.250 21.350 21.790 22.520 22.950 22.850 22.550 22.110 21.790 22.020 22.990 2009 42.542 0.0000 41.318 0.37896 33.256 42.265 27.830 1.7800 1.0300 1.6400 7.4600 21.010 29.520 32.420 33.430 33.750 34.020 34.980 38.880 48.230 59.710 62.910 58.230 51.460 44.530 38.780 35.470 33.760 32.850 32.070 31.540 31.380 31.340 31.460 31.960 32.780 33.270 33.190 32.890 32.410 32.050 32.270 33.380 2010 85.253 55.682 100.00 6.7695 6.0132 8.0328 3.6553 0.39000 0.58000 1.1000 2.4900 3.6500 3.9200 3.8900 3.7700 3.7400 3.7800 4.2300 6.0100 9.9400 13.930 14.200 12.150 10.100 8.0700 6.1100 5.0600 5.1200 5.9300 6.4000 6.5400 6.6300 6.6700 6.7500 7.1200 7.8100 8.2400 8.1200 7.7900 7.3500 7.0100 7.2000 8.0800 2011 92.322 66.789 100.00 6.8980 4.1212 5.3966 3.2152 0.42000 0.46000 1.0400 2.4400 3.5100 3.7700 3.7100 3.5300 3.4100 3.3700 3.5800 4.8600 7.5400 10.020 9.7200 7.9800 6.5200 5.2000 3.8600 3.1600 3.3200 4.0100 4.3500 4.3800 4.4100 4.4500 4.5100 4.8600 5.5400 5.9600 5.8500 5.5400 5.0800 4.7600 4.9500 5.8500 2012 70.356 44.740 84.948 8.6245 10.375 12.555 6.1863 0.87000 0.63000 1.2200 3.2400 5.7400 6.8300 6.9900 6.8900 6.8200 6.8200 7.2300 9.2600 13.780 18.620 19.300 17.140 14.810 12.450 10.170 8.9500 9.1800 10.440 11.330 11.720 11.960 12.050 12.170 12.590 13.360 13.830 13.700 13.360 12.830 12.460 12.600 13.560 2013 56.852 31.204 55.294 0.0000 18.417 21.320 14.934 0.94000 0.79000 1.3400 5.4200 13.110 17.080 18.090 18.160 17.930 17.650 17.870 19.970 24.860 30.130 30.590 27.610 24.240 20.820 17.650 15.970 16.170 17.790 19.130 19.870 20.330 20.530 20.740 21.300 22.200 22.730 22.630 22.290 21.730 21.330 21.540 22.660 2014 68.730 49.529 70.771 0.0000 11.784 13.248 8.4823 0.58000 0.66000 1.3000 4.0400 8.1300 10.000 10.290 10.140 9.8800 9.6000 9.7500 11.430 15.260 19.230 19.360 17.030 14.690 12.390 10.180 9.0300 9.5700 11.410 12.880 13.680 14.130 14.330 14.520 15.040 15.920 16.460 16.340 15.970 15.420 14.980 15.190 16.260 2015 66.779 31.255 73.501 6.9830 13.344 17.042 9.0739 0.71000 0.47000 1.1800 3.6900 7.7900 9.7400 10.240 10.300 10.310 10.320 10.920 13.470 19.270 25.750 27.040 24.370 21.060 17.610 14.390 12.570 12.350 13.210 13.750 13.940 14.090 14.170 14.260 14.720 15.510 15.960 15.830 15.500 14.940 14.540 14.720 15.640 2016 63.839 39.873 74.276 0.0000 13.969 16.504 8.4540 0.65000 0.58000 1.2100 3.7300 7.4600 9.2700 9.6600 9.6400 9.5800 9.5600 10.040 12.380 17.670 23.520 24.550 22.070 19.170 16.230 13.470 11.990 12.290 13.920 15.230 15.930 16.350 16.520 16.720 17.250 18.120 18.670 18.570 18.190 17.630 17.220 17.440 18.530 2017 63.451 28.254 60.556 0.0000 15.670 19.703 13.422 1.0800 0.75000 1.2800 4.8200 11.360 14.840 15.810 16.030 15.920 15.810 16.240 18.680 24.330 30.530 31.280 27.950 23.980 19.910 16.250 14.200 13.940 14.850 15.550 15.860 16.080 16.190 16.320 16.810 17.650 18.170 18.040 17.700 17.180 16.750 16.970 18.040 2018 79.725 53.899 83.719 0.0000 8.0928 10.002 5.9995 0.61000 0.49000 1.1000 3.1600 5.7400 6.8200 7.0200 6.8700 6.7400 6.6300 6.9300 8.6700 12.550 16.470 16.540 14.240 11.940 9.6700 7.5100 6.3500 6.5600 7.7500 8.5800 8.9500 9.1500 9.2400 9.3600 9.8100 10.600 11.110 10.990 10.640 10.090 9.6900 9.8700 10.890 2019 78.318 49.740 74.717 8.2881 7.9476 9.8166 6.7157 0.60000 0.48000 1.1500 3.4000 6.4100 7.7900 8.0500 7.9300 7.7700 7.5800 7.7600 9.2800 12.660 16.020 15.990 13.880 11.740 9.6000 7.5500 6.4300 6.5600 7.5100 8.1600 8.4100 8.5700 8.6500 8.7600 9.1700 9.8700 10.300 10.190 9.9000 9.4500 9.1000 9.2900 10.210 2020 45.906 16.135 46.299 0.0000 26.895 31.876 22.062 1.4100 0.99000 1.5500 6.6400 18.050 24.720 26.590 26.970 26.760 26.500 26.850 29.540 36.100 43.670 45.050 41.420 36.860 32.160 28.040 25.770 25.440 26.460 27.290 27.690 27.990 28.100 28.260 28.800 29.660 30.160 30.040 29.690 29.190 28.770 28.980 30.050 2021 53.610 14.718 55.127 7.3311 20.416 25.578 16.067 1.2300 0.85000 1.3500 5.2400 13.050 17.340 18.670 19.050 19.150 19.210 19.830 22.670 29.170 36.630 38.320 35.220 31.020 26.600 22.680 20.450 19.780 20.090 20.300 20.340 20.450 20.490 20.620 21.080 21.830 22.270 22.170 21.890 21.430 21.100 21.300 22.260 2022 41.395 20.864 46.801 6.4080 25.205 28.127 18.673 1.5100 0.94000 1.4800 6.2300 16.060 21.380 22.690 22.840 22.640 22.360 22.590 24.700 29.660 35.170 36.220 33.820 30.860 27.770 24.920 23.440 23.690 25.300 26.670 27.490 28.010 28.240 28.480 29.010 29.800 30.270 30.200 29.950 29.520 29.250 29.490 30.460 2023 35.763 2.9981 29.607 7.8776 32.998 39.231 30.527 1.8400 1.1400 1.6800 8.1000 23.800 33.910 37.070 37.950 37.900 37.710 38.060 40.370 45.930 52.110 53.160 49.750 45.200 40.390 36.230 33.850 32.750 32.450 32.120 31.870 31.840 31.850 31.960 32.420 33.090 33.520 33.420 33.210 32.840 32.610 32.830 33.680 2024 26.929 0.0000 27.146 0.0000 47.123 55.471 39.743 2.3100 1.3900 1.9400 9.6000 29.970 43.910 48.220 49.280 49.210 49.040 49.530 52.720 60.620 69.980 72.530 68.770 63.300 57.520 52.620 49.820 48.310 47.540 46.820 46.360 46.240 46.190 46.290 46.800 47.590 48.020 47.920 47.660 47.240 46.990 47.160 48.270 2025 30.657 7.4056 33.302 4.4103 37.429 42.548 29.437 1.8400 1.1700 1.7000 8.1700 23.580 33.020 35.730 36.280 36.240 36.050 36.480 39.030 45.050 51.890 53.560 50.850 47.160 43.220 39.700 37.810 37.410 38.040 38.490 38.740 38.990 39.110 39.330 39.880 40.680 41.150 41.100 40.870 40.480 40.220 40.460 41.470 2026 74.223 67.507 100.00 0.0000 7.7401 7.9938 3.5714 0.71000 0.57000 1.1000 2.5900 3.8000 4.1400 4.0800 3.8900 3.7900 3.7400 4.0100 5.4100 8.4800 11.420 11.150 9.2800 7.8600 6.6900 5.4600 4.9500 5.8600 7.9700 9.5600 10.350 10.760 10.920 11.060 11.560 12.410 12.930 12.770 12.400 11.820 11.360 11.560 12.620 2027 72.279 63.777 77.631 0.0000 8.6286 8.9591 6.1160 0.71000 0.62000 1.2400 3.3500 6.3700 7.6000 7.7100 7.4400 7.0900 6.7400 6.7300 7.8500 10.510 13.010 12.580 10.610 9.0300 7.6400 6.2300 5.6000 6.4200 8.3900 9.9400 10.740 11.170 11.360 11.520 12.010 12.830 13.330 13.210 12.870 12.330 11.920 12.160 13.190 2028 84.985 67.658 100.00 0.0000 5.6490 6.5633 3.3548 0.29000 0.44000 1.0600 2.5100 3.6700 3.9300 3.8600 3.6500 3.5200 3.4700 3.7200 5.0700 8.0300 10.850 10.600 8.7500 7.2500 5.9200 4.5800 3.9300 4.3900 5.6700 6.5300 6.8600 7.0500 7.1400 7.2400 7.6700 8.4400 8.9300 8.8000 8.4600 7.9100 7.5600 7.7500 8.7700 2029 88.626 78.982 100.00 0.0000 4.5612 4.8865 3.2056 0.43000 0.61000 1.1300 2.6600 3.8000 4.0200 3.9300 3.7200 3.5100 3.3800 3.4500 4.4100 6.4100 8.1100 7.4700 5.8800 4.8400 4.0300 3.1800 2.8100 3.3500 4.5700 5.3700 5.6600 5.8200 5.9100 5.9900 6.4100 7.1500 7.6300 7.5000 7.1600 6.6700 6.3300 6.5300 7.4600 2030 49.361 35.215 55.128 2.4844 20.554 22.034 14.172 1.00000 0.75000 1.3000 5.3200 12.810 16.580 17.400 17.300 16.980 16.600 16.720 18.570 22.990 27.760 28.320 25.930 23.330 20.740 18.270 17.090 17.880 20.400 22.590 23.970 24.740 25.080 25.360 25.950 26.830 27.370 27.300 26.970 26.460 26.090 26.330 27.380 2031 60.158 43.459 69.461 7.4613 13.001 14.466 8.4346 0.82000 0.62000 1.2100 3.7400 7.8400 9.7700 10.100 10.000 9.7900 9.6000 9.8300 11.570 15.530 19.710 20.120 18.060 15.870 13.710 11.630 10.570 11.110 12.920 14.410 15.220 15.680 15.880 16.070 16.550 17.310 17.800 17.690 17.390 16.920 16.570 16.740 17.730 2032 58.974 50.968 71.875 0.0000 14.596 15.094 8.5410 1.00000 0.80000 1.3500 3.9400 8.2500 10.200 10.440 10.210 9.9000 9.5700 9.7100 11.400 15.340 19.460 19.630 17.420 15.350 13.420 11.500 10.640 11.750 14.600 17.000 18.370 19.110 19.410 19.630 20.200 21.130 21.680 21.520 21.140 20.540 20.090 20.260 21.390 2033 34.865 22.842 34.106 5.1494 29.216 30.862 23.287 1.5100 0.93000 1.5500 7.2900 20.200 27.610 29.350 29.320 28.750 28.020 27.820 29.180 32.750 36.630 36.920 34.600 32.040 29.440 27.010 25.860 26.580 28.970 31.140 32.540 33.360 33.720 34.030 34.610 35.390 35.870 35.840 35.590 35.220 34.970 35.130 36.170 2034 39.720 35.414 46.009 7.0846 23.228 23.529 16.603 1.2000 0.82000 1.4200 5.8900 15.290 20.280 21.160 20.870 20.220 19.480 19.230 20.460 23.750 27.270 27.490 25.500 23.460 21.500 19.610 18.830 19.990 23.010 25.790 27.590 28.620 29.070 29.390 29.950 30.740 31.200 31.140 30.920 30.490 30.230 30.420 31.380 2035 40.891 37.310 57.858 1.6327 23.923 24.262 14.027 1.1600 0.89000 1.4100 5.2800 12.890 16.720 17.350 17.090 16.690 16.230 16.310 18.210 22.800 27.900 28.690 26.490 24.220 22.050 19.950 19.110 20.530 24.160 27.470 29.580 30.770 31.270 31.620 32.240 33.140 33.650 33.580 33.240 32.720 32.380 32.550 33.620 2036 26.046 18.244 32.627 0.0000 39.707 41.682 29.029 1.8000 1.1400 1.6700 8.2700 24.380 34.180 36.470 36.460 35.760 34.950 34.780 36.600 41.470 47.090 48.180 45.750 42.890 40.020 37.390 36.260 37.230 40.160 42.910 44.740 45.820 46.290 46.680 47.310 48.170 48.650 48.620 48.390 48.020 47.800 48.020 49.030 2037 16.203 5.3497 19.758 4.1931 50.866 54.598 40.282 2.2500 1.4400 1.9200 10.170 31.940 46.740 50.650 50.910 50.300 49.480 49.260 50.850 55.220 60.190 61.420 59.500 57.030 54.410 51.950 50.850 51.030 52.280 53.300 53.970 54.440 54.630 54.920 55.450 56.120 56.500 56.500 56.350 56.170 56.080 56.330 57.170 2038 13.757 10.942 23.839 0.0000 54.783 56.882 38.234 2.3900 1.3800 1.8700 9.9600 31.030 44.970 48.240 48.180 47.340 46.380 46.100 47.970 53.230 59.560 61.490 59.780 57.600 55.340 53.230 52.520 53.710 56.780 59.590 61.500 62.630 63.080 63.520 64.140 64.900 65.290 65.280 65.130 64.930 64.820 65.000 65.940 2039 7.3168 0.0000 17.290 5.7262 62.941 68.226 46.274 2.8600 1.4900 2.0700 10.900 35.730 53.490 57.970 58.220 57.550 56.840 56.790 58.880 64.420 71.090 73.960 73.370 71.880 69.960 68.110 67.230 66.630 66.380 66.060 65.910 65.920 65.880 66.040 66.400 66.860 67.040 66.980 66.870 66.780 66.690 66.730 67.300 2040 2.4680 0.0000 8.4128 0.0000 84.906 89.486 66.086 3.6100 2.0200 2.4800 13.370 47.580 76.450 84.490 84.760 83.490 82.060 81.230 82.220 85.710 89.780 91.610 91.400 90.940 90.270 89.590 89.510 89.300 89.320 89.220 89.250 89.360 89.320 89.510 89.860 90.160 90.220 90.190 90.160 90.200 90.330 90.360 90.780 2041 67.653 72.007 100.00 7.2155 8.2585 7.6430 3.2069 0.37000 0.52000 1.0700 2.5100 3.5600 3.8400 3.7900 3.5800 3.4300 3.3600 3.5400 4.6400 7.0500 9.3000 9.0600 7.6000 6.6100 5.8500 5.0400 4.8100 5.9600 8.4900 10.590 11.770 12.400 12.660 12.880 13.360 14.170 14.640 14.550 14.230 13.740 13.360 13.540 14.540 2042 65.360 73.831 79.806 7.3393 9.0282 7.9766 5.0674 0.52000 0.55000 1.1100 3.1200 5.6700 6.6400 6.6000 6.3000 5.9100 5.5100 5.3800 6.1200 7.8600 9.4500 8.9200 7.4800 6.5400 5.8500 5.1000 4.9100 6.1700 8.8900 11.240 12.620 13.340 13.670 13.910 14.430 15.230 15.740 15.650 15.320 14.830 14.460 14.660 15.570 2043 79.659 78.587 100.00 3.9733 5.9455 5.6836 3.1316 0.51000 0.56000 1.0700 2.5800 3.7100 3.9600 3.8500 3.6100 3.4200 3.2800 3.3600 4.2800 6.2600 8.0000 7.4500 5.9400 5.0000 4.3000 3.5700 3.3200 4.1900 6.0500 7.4800 8.1800 8.5500 8.6900 8.8300 9.2500 10.020 10.480 10.360 10.020 9.5200 9.1500 9.3300 10.260 2044 72.041 82.367 100.00 0.0000 6.8629 5.8898 3.0622 0.47000 0.52000 1.0200 2.5000 3.6800 3.9800 3.8500 3.5700 3.3700 3.2000 3.2400 4.0700 5.8500 7.3500 6.6800 5.2200 4.4000 3.9000 3.3300 3.2500 4.4400 6.9300 9.0000 10.140 10.740 11.000 11.190 11.670 12.480 12.990 12.870 12.540 12.010 11.630 11.850 12.860 2045 37.839 48.614 44.956 1.4905 23.428 21.305 15.680 1.1800 0.76000 1.3500 5.9000 15.450 20.310 20.840 20.140 19.140 18.000 17.370 18.040 20.330 22.700 22.280 20.300 18.710 17.370 16.000 15.680 17.770 22.580 27.250 30.490 32.310 33.100 33.580 34.280 35.200 35.720 35.650 35.390 34.950 34.680 34.860 35.910 2046 45.261 47.075 56.616 0.0000 19.872 19.156 12.426 1.0400 0.68000 1.2900 5.0000 12.010 15.450 15.880 15.490 14.890 14.230 14.050 15.340 18.630 22.070 22.060 19.960 18.090 16.360 14.670 14.050 15.640 19.490 23.070 25.450 26.770 27.330 27.710 28.350 29.240 29.780 29.690 29.380 28.900 28.530 28.740 29.850 2047 60.168 58.858 71.400 5.8104 12.425 12.167 7.5275 0.69000 0.71000 1.2200 3.7700 7.6800 9.3500 9.5100 9.2000 8.8000 8.4100 8.3700 9.5800 12.430 15.200 14.950 13.080 11.560 10.240 8.8700 8.3400 9.5800 12.390 14.750 16.110 16.810 17.110 17.330 17.840 18.660 19.140 18.990 18.680 18.130 17.730 17.900 18.890 2048 59.051 66.950 75.817 0.0000 11.810 10.538 6.1970 0.81000 0.60000 1.2000 3.3900 6.6800 7.9600 7.9800 7.6300 7.2200 6.7800 6.6600 7.6500 10.000 12.250 11.800 10.050 8.8300 7.8900 6.8900 6.6300 8.2200 11.660 14.690 16.540 17.540 17.970 18.270 18.850 19.770 20.330 20.220 19.880 19.320 18.910 19.130 20.240 2049 39.738 48.856 56.924 9.2602 19.806 18.399 11.162 0.96000 0.72000 1.2300 4.8000 11.130 14.030 14.300 13.910 13.360 12.760 12.570 13.650 16.400 19.290 19.390 17.820 16.520 15.400 14.270 13.990 15.800 19.770 23.510 26.010 27.400 28.010 28.430 29.020 29.840 30.320 30.280 30.040 29.650 29.390 29.530 30.510 2050 27.984 36.079 37.674 0.0000 32.196 30.368 20.898 1.4400 0.95000 1.5900 7.2600 19.540 26.120 27.090 26.540 25.600 24.500 23.990 25.010 28.060 31.440 31.590 29.620 27.850 26.300 24.760 24.400 26.630 31.740 36.850 40.490 42.620 43.540 44.150 44.890 45.810 46.360 46.360 46.150 45.800 45.540 45.790 46.830 2051 16.121 32.406 37.982 7.1315 36.118 33.408 19.867 1.5600 0.99000 1.5400 7.0500 18.780 24.820 25.550 24.930 24.130 23.240 22.910 24.100 27.390 31.140 31.910 30.700 29.730 28.990 28.170 28.360 31.020 36.630 42.280 46.440 48.840 49.930 50.620 51.340 52.130 52.570 52.650 52.570 52.390 52.340 52.500 53.350 2052 11.144 12.308 17.401 6.1807 51.716 52.618 39.169 2.3600 1.4400 1.9900 10.240 32.590 47.470 50.550 50.060 48.810 47.430 46.660 47.520 50.620 54.220 54.940 53.480 52.020 50.560 49.120 48.740 50.080 53.150 55.950 57.820 58.880 59.260 59.620 60.130 60.710 60.990 60.950 60.820 60.650 60.600 60.670 61.370 2053 7.6192 17.127 24.859 9.5546 48.826 47.869 31.213 2.0000 1.2700 1.8000 8.9900 27.270 38.370 40.210 39.520 38.440 37.270 36.740 37.880 41.460 45.750 47.110 46.230 45.430 44.750 44.020 44.230 46.360 50.730 54.960 57.920 59.590 60.290 60.780 61.310 61.860 62.110 62.150 62.090 62.040 62.030 62.170 62.720 2054 17.951 23.782 30.562 0.0000 44.422 43.391 29.394 2.1600 1.0600 1.7500 8.5900 25.880 36.210 37.990 37.310 36.130 34.840 34.230 35.540 39.590 44.350 45.180 43.230 41.330 39.560 37.860 37.450 39.690 44.880 49.980 53.650 55.700 56.540 57.070 57.750 58.610 59.030 58.990 58.720 58.410 58.200 58.340 59.260 2055 0.0000 13.449 11.479 3.5614 65.899 62.844 44.534 2.7400 1.5100 2.1400 11.720 37.270 54.720 58.120 57.230 55.680 53.970 52.860 53.100 55.000 57.370 57.930 57.350 57.290 57.600 57.810 58.880 62.040 67.990 73.910 78.350 80.940 82.060 82.870 83.510 83.980 84.170 84.330 84.500 84.760 85.120 85.300 85.650 2056 0.23097 7.3279 5.3181 1.9899 75.677 74.654 56.890 3.2900 1.8500 2.4300 13.230 44.330 68.200 73.990 73.480 71.890 70.060 68.700 68.480 69.520 70.900 71.120 70.530 70.500 70.790 70.970 71.940 74.340 78.590 82.510 85.340 86.980 87.720 88.330 88.890 89.310 89.470 89.610 89.730 90.050 90.350 90.560 91.000 2057 57.358 82.208 77.811 4.1988 10.892 8.3039 5.2911 0.77000 0.48000 1.1000 3.2900 6.2700 7.3700 7.2600 6.7500 6.2300 5.6700 5.3700 5.8300 7.1300 8.2100 7.3800 5.8900 5.1600 4.8000 4.3600 4.4800 6.4800 10.590 14.320 16.650 17.890 18.410 18.710 19.280 20.150 20.680 20.580 20.220 19.650 19.210 19.400 20.440 2058 61.756 82.627 99.876 0.0000 9.0998 7.1280 3.0660 0.67000 0.60000 1.1300 2.5600 3.7000 3.9700 3.8500 3.5700 3.3800 3.2100 3.2400 4.0600 5.8300 7.3300 6.7100 5.3200 4.5800 4.2000 3.7600 3.8200 5.5100 9.0800 12.300 14.270 15.330 15.770 16.060 16.640 17.540 18.100 17.990 17.630 17.090 16.670 16.870 17.960 2059 67.224 86.499 100.00 7.2356 7.5777 5.9564 2.8889 0.57000 0.56000 1.1200 2.5000 3.5300 3.8300 3.6800 3.4200 3.2200 3.0400 3.0500 3.7200 5.1500 6.2900 5.6400 4.3900 3.7800 3.5100 3.1600 3.2300 4.6900 7.6500 10.210 11.710 12.520 12.850 13.110 13.630 14.440 14.950 14.850 14.540 14.020 13.650 13.840 14.860 2060 57.836 88.946 100.00 6.8732 9.4387 6.8082 2.8134 0.56000 0.58000 1.0400 2.4700 3.5700 3.7700 3.6100 3.3600 3.1200 2.9400 2.9200 3.5700 4.9300 6.0100 5.3300 4.0900 3.5700 3.4200 3.1900 3.4300 5.3700 9.3500 13.030 15.360 16.630 17.170 17.530 18.120 18.980 19.520 19.450 19.140 18.650 18.270 18.450 19.460 2061 40.547 58.720 50.176 5.8156 19.136 16.414 11.596 1.0200 0.64000 1.3200 5.2500 12.270 15.450 15.590 14.930 14.050 13.060 12.500 13.000 14.720 16.450 15.950 14.320 13.200 12.390 11.510 11.470 13.700 18.470 23.070 26.210 27.970 28.740 29.230 29.890 30.760 31.270 31.240 30.980 30.570 30.300 30.480 31.480 2062 33.324 57.277 51.212 0.0000 23.591 19.724 12.550 0.99000 0.77000 1.3500 5.3300 13.080 16.690 16.870 16.070 15.130 14.080 13.530 14.200 16.360 18.600 18.200 16.480 15.300 14.480 13.610 13.690 16.470 22.600 28.820 33.320 35.900 37.020 37.690 38.460 39.400 39.960 39.930 39.690 39.260 38.960 39.190 40.260 2063 41.814 73.450 75.828 4.6939 15.127 11.639 5.6289 0.95000 0.63000 1.2000 3.3500 6.4100 7.5600 7.4500 7.0200 6.5400 6.0600 5.8800 6.6000 8.4100 10.140 9.7100 8.3600 7.6100 7.2300 6.7700 6.9900 9.4100 14.610 19.760 23.350 25.350 26.210 26.730 27.390 28.270 28.770 28.730 28.450 28.030 27.720 27.930 28.890 2064 49.384 69.561 69.841 0.0000 14.608 11.887 7.1808 0.88000 0.63000 1.2300 3.7900 7.9300 9.6000 9.5900 9.0900 8.4900 7.8600 7.5600 8.2700 10.170 11.930 11.320 9.6900 8.6600 7.9900 7.2400 7.2300 9.4200 14.100 18.530 21.490 23.110 23.800 24.230 24.920 25.860 26.440 26.340 26.010 25.490 25.110 25.340 26.440 2065 38.212 67.030 58.653 9.5487 17.428 13.801 8.8041 0.89000 0.75000 1.3000 4.4500 9.7600 12.070 12.020 11.340 10.590 9.7200 9.2300 9.6300 11.030 12.360 11.790 10.400 9.6300 9.2300 8.7400 8.9700 11.490 16.740 21.910 25.520 27.560 28.460 28.980 29.650 30.490 30.990 30.970 30.750 30.400 30.160 30.360 31.280 2066 47.841 63.405 68.332 8.1670 14.737 12.773 7.4955 0.80000 0.65000 1.2600 3.8300 7.9900 9.7600 9.8000 9.3500 8.8500 8.2900 8.0900 8.9600 11.160 13.300 12.960 11.380 10.300 9.5300 8.6800 8.6000 10.530 14.620 18.350 20.760 22.060 22.610 22.960 23.510 24.330 24.830 24.750 24.450 24.000 23.670 23.830 24.760 2067 14.573 45.918 35.843 9.3904 32.270 27.205 17.502 1.4200 0.93000 1.4800 6.5800 17.820 23.390 23.610 22.560 21.310 19.970 19.170 19.530 21.310 23.360 23.280 22.040 21.340 21.040 20.650 21.140 24.400 31.340 38.670 44.300 47.620 49.110 49.970 50.720 51.480 51.870 51.940 51.880 51.750 51.720 51.920 52.590 2068 13.420 36.725 34.634 0.0000 42.917 37.779 23.816 1.8000 1.1100 1.6100 7.8000 22.630 30.840 31.600 30.480 29.080 27.560 26.740 27.530 30.480 33.910 34.250 32.700 31.630 30.950 30.190 30.570 34.170 42.070 50.570 57.180 61.110 62.810 63.770 64.620 65.520 65.960 65.970 65.850 65.630 65.550 65.630 66.500 2069 26.242 44.834 43.412 5.5155 27.231 24.221 15.626 1.2000 0.73000 1.3900 5.8700 15.480 20.220 20.640 19.910 18.970 17.930 17.390 18.150 20.580 23.260 23.290 21.750 20.580 19.680 18.750 18.750 21.270 26.770 32.300 36.280 38.570 39.550 40.160 40.860 41.690 42.150 42.130 41.950 41.660 41.470 41.670 42.540 2070 19.459 45.546 32.702 0.0000 34.707 29.356 20.780 1.5600 0.95000 1.5900 7.7300 20.940 27.690 28.140 26.960 25.490 23.850 22.820 23.030 24.650 26.470 26.020 24.340 23.260 22.590 21.850 22.160 25.590 33.060 41.020 47.150 50.800 52.460 53.420 54.350 55.340 55.890 55.930 55.820 55.560 55.420 55.620 56.660 2071 24.853 59.024 55.923 1.0874 26.985 21.351 11.402 1.1300 0.76000 1.3500 5.2700 12.270 15.270 15.210 14.460 13.620 12.690 12.230 13.010 15.250 17.610 17.410 15.890 15.030 14.620 14.110 14.570 18.140 25.760 33.790 39.930 43.580 45.230 46.160 47.090 48.080 48.680 48.720 48.540 48.230 48.030 48.250 49.270 2072 9.1041 31.704 17.997 4.1931 46.150 41.032 31.439 1.9700 1.2300 1.8600 9.4900 29.410 41.320 42.650 41.050 38.980 36.770 35.250 35.000 36.070 37.480 37.030 35.550 34.720 34.320 33.790 34.290 37.730 45.080 52.830 58.770 62.240 63.780 64.630 65.410 66.100 66.490 66.520 66.460 66.360 66.330 66.470 67.090 2073 0.0000 21.253 13.340 0.0000 65.118 58.680 41.264 2.7000 1.6200 2.1600 11.560 36.200 52.380 54.800 53.380 51.410 49.280 47.810 47.720 49.170 51.080 51.190 50.260 50.120 50.490 50.740 52.020 56.350 65.070 74.530 82.090 86.660 88.760 90.010 90.910 91.530 91.830 92.050 92.250 92.600 93.030 93.230 93.660 2074 0.0000 27.869 18.964 8.9879 51.138 45.301 31.555 2.1400 1.2500 1.8100 9.5200 29.370 41.280 42.450 40.890 38.980 37.000 35.660 35.630 37.120 39.030 39.090 38.150 37.890 38.100 38.230 39.250 43.100 50.960 59.330 65.850 69.650 71.290 72.200 72.810 73.180 73.290 73.380 73.460 73.630 73.820 73.820 74.030 2075 64.652 100.00 90.625 6.2549 7.5962 4.9377 3.2053 0.52000 0.44000 1.1000 2.6800 4.1800 4.6800 4.5400 4.1700 3.7800 3.3600 3.1100 3.3200 3.9000 4.1700 3.2100 2.0400 1.7000 1.7300 1.6900 2.0000 3.7500 7.3200 10.560 12.560 13.620 14.080 14.380 14.940 15.810 16.330 16.240 15.920 15.380 15.020 15.190 16.230 2076 47.139 100.00 83.765 0.0000 12.513 7.5048 3.9921 0.77000 0.51000 1.0900 3.0500 5.2900 5.9900 5.7800 5.2700 4.7200 4.1700 3.7700 3.8900 4.4200 4.6500 3.5500 2.2800 1.9100 2.0300 2.0500 2.5600 5.3500 11.320 17.380 21.670 24.100 25.170 25.790 26.570 27.620 28.230 28.170 27.850 27.350 26.960 27.190 28.350 2077 61.177 100.00 100.00 0.0000 9.1197 5.9072 2.8816 0.77000 0.62000 1.2700 2.6600 3.8300 4.0400 3.8900 3.5800 3.3200 3.0500 2.9200 3.3200 4.1700 4.6800 3.6700 2.3900 2.0000 2.0500 2.0200 2.3800 4.4900 8.8400 12.890 15.460 16.840 17.410 17.770 18.420 19.390 19.990 19.890 19.530 18.950 18.480 18.670 19.820 2078 48.687 84.224 80.071 0.0000 13.128 9.2051 4.8638 0.73000 0.63000 1.1700 3.1900 5.9000 6.8500 6.7000 6.2200 5.6900 5.1600 4.8700 5.3100 6.5300 7.5600 6.7300 5.3300 4.7100 4.5200 4.2300 4.5500 7.0400 12.380 17.630 21.250 23.270 24.120 24.630 25.330 26.300 26.870 26.800 26.490 25.970 25.600 25.820 26.890 2079 22.183 71.366 54.193 3.0114 25.077 17.817 9.9958 1.1300 0.78000 1.2400 4.8600 11.470 14.230 13.980 13.030 12.030 10.880 10.190 10.410 11.580 12.720 11.980 10.570 9.9900 9.9300 9.7600 10.430 14.350 22.790 32.010 39.300 43.710 45.750 46.870 47.870 48.890 49.490 49.560 49.430 49.180 49.000 49.240 50.220 2080 36.374 69.981 58.848 0.0000 20.001 15.179 9.4720 0.88000 0.66000 1.2000 4.5500 10.550 13.190 13.110 12.300 11.390 10.360 9.7500 10.130 11.600 13.020 12.290 10.690 9.8100 9.3800 8.8500 9.1500 12.190 18.720 25.380 30.230 33.020 34.230 34.950 35.750 36.750 37.310 37.300 37.040 36.610 36.260 36.510 37.580 2081 35.478 83.795 66.037 5.0595 17.200 11.604 6.8941 0.76000 0.71000 1.2600 3.9500 8.4200 10.140 9.8700 9.0800 8.2700 7.3200 6.7000 6.8500 7.6800 8.3500 7.3900 5.9800 5.4300 5.3800 5.2200 5.7400 8.9700 15.840 22.860 27.940 30.790 32.020 32.670 33.420 34.320 34.850 34.790 34.530 34.100 33.760 33.920 34.840 2082 2.7791 56.517 28.421 0.0000 44.529 32.287 20.205 1.7200 1.1600 1.6200 8.1400 22.150 28.920 28.580 26.630 24.630 22.470 20.960 20.570 21.190 22.060 21.290 19.940 19.560 19.860 20.050 21.280 26.730 38.820 53.490 66.840 75.850 80.310 82.730 84.270 85.360 85.930 86.280 86.480 86.770 87.050 87.300 87.850 2083 11.636 53.699 39.792 0.0000 38.022 29.531 17.611 1.6600 1.00000 1.5600 6.9200 18.620 24.300 24.240 22.860 21.330 19.710 18.700 18.990 20.750 22.810 22.470 20.990 20.310 20.180 19.950 20.760 25.320 35.250 46.460 55.710 61.470 64.140 65.540 66.640 67.630 68.190 68.270 68.190 68.040 67.990 68.170 69.020 2084 0.0000 46.397 13.295 0.0000 51.190 39.072 28.983 2.2400 1.3300 1.9000 9.9900 29.850 40.940 41.090 38.520 35.760 32.850 30.700 29.540 29.140 29.080 27.970 26.580 26.260 26.630 26.910 28.190 33.620 45.500 59.910 72.870 81.510 85.720 87.990 89.410 90.320 90.800 91.140 91.410 91.800 92.280 92.540 92.910 2085 5.8303 43.721 21.904 6.0103 41.128 33.621 24.180 1.7600 1.1300 1.6400 8.4400 24.460 33.120 33.450 31.720 29.750 27.650 26.190 25.810 26.520 27.520 26.980 25.740 25.240 25.250 25.160 25.980 30.050 38.770 48.530 56.470 61.380 63.630 64.900 65.840 66.630 67.040 67.210 67.260 67.320 67.430 67.620 68.220 2086 19.433 59.490 37.437 0.0000 31.627 24.191 16.707 1.2900 0.84000 1.3900 6.6900 18.100 23.610 23.500 22.040 20.360 18.540 17.330 17.230 18.250 19.420 18.620 16.990 16.200 15.910 15.520 16.100 20.120 28.930 38.590 46.320 51.020 53.140 54.290 55.270 56.300 56.860 56.910 56.750 56.450 56.290 56.470 57.430 2087 0.0000 53.911 31.355 9.0881 39.005 29.366 17.553 1.7900 0.97000 1.5900 7.2500 19.080 24.590 24.360 22.860 21.330 19.690 18.600 18.530 19.490 20.710 20.310 19.260 19.000 19.330 19.570 20.720 25.460 35.620 47.480 57.700 64.280 67.450 69.190 70.290 71.010 71.390 71.690 71.910 72.250 72.640 72.850 73.200 2088 0.0000 33.692 16.536 0.0000 57.462 47.877 32.628 2.2500 1.3300 2.0000 10.210 30.950 43.300 44.390 42.550 40.350 38.020 36.410 36.090 37.110 38.540 38.300 37.200 36.940 37.310 37.580 38.900 43.870 54.500 66.970 77.760 84.670 87.950 89.760 90.940 91.660 92.050 92.300 92.540 92.890 93.300 93.480 93.900 2089 38.850 100.00 67.055 0.0000 15.615 9.0607 5.7699 0.83000 0.56000 1.2100 3.7900 7.7200 9.2000 8.7700 7.9100 6.9500 5.8900 5.1100 4.8700 5.0200 4.9800 3.7500 2.4500 2.0700 2.2300 2.2900 2.8900 6.1900 13.440 21.170 26.980 30.350 31.850 32.670 33.510 34.580 35.190 35.140 34.860 34.370 33.990 34.210 35.270 2090 13.863 83.462 52.903 0.0000 28.075 17.235 9.1337 1.0300 0.77000 1.3200 4.9500 11.560 14.180 13.570 12.280 10.940 9.5300 8.5100 8.2700 8.6900 9.0800 8.0200 6.6400 6.2200 6.3900 6.4700 7.3900 12.150 22.960 35.800 47.040 54.420 58.000 59.890 61.270 62.450 63.120 63.270 63.250 63.130 63.060 63.340 64.200 2091 30.429 100.00 70.995 0.0000 18.031 10.234 5.2150 0.84000 0.68000 1.1800 3.6200 7.0600 8.2300 7.8300 7.0600 6.2500 5.3400 4.6900 4.5700 4.8000 4.8400 3.6800 2.3900 2.0400 2.2300 2.3300 3.0600 6.8100 15.160 24.390 31.700 36.160 38.230 39.350 40.390 41.530 42.210 42.240 42.020 41.600 41.360 41.610 42.730 2092 20.692 84.047 51.752 7.2296 21.659 13.788 8.5089 0.98000 0.73000 1.2400 4.6600 10.730 13.130 12.620 11.480 10.260 8.9000 7.9700 7.6800 7.9600 8.2400 7.2400 5.9800 5.5800 5.6800 5.7000 6.4200 10.250 18.690 28.090 35.610 40.220 42.340 43.480 44.440 45.380 45.920 46.000 45.900 45.690 45.570 45.750 46.620 2093 16.450 85.266 36.021 1.8292 26.168 16.094 11.642 1.1400 0.82000 1.4000 6.0000 14.990 18.630 17.830 15.990 14.100 12.050 10.520 9.7000 9.3200 9.0400 7.7500 6.3400 5.9000 6.0600 6.1300 7.0000 11.480 21.460 33.010 42.800 49.060 52.060 53.680 54.930 56.070 56.740 56.900 56.810 56.690 56.590 56.870 57.890 2094 0.0000 70.872 33.597 8.8577 34.993 23.052 14.467 1.4900 0.93000 1.4700 6.5400 17.420 22.220 21.390 19.440 17.480 15.410 13.940 13.300 13.370 13.580 12.570 11.250 10.910 11.230 11.430 12.550 17.710 29.260 43.170 55.650 63.960 67.960 70.020 71.230 71.970 72.300 72.550 72.750 73.020 73.320 73.360 73.560 2095 0.0000 76.199 21.015 5.3019 35.237 21.987 15.745 1.4800 0.88000 1.5500 7.5100 19.870 25.240 24.050 21.570 19.060 16.450 14.470 13.240 12.430 11.900 10.580 9.2600 8.9400 9.2700 9.5000 10.610 15.820 27.720 42.540 56.380 66.000 70.870 73.480 75.050 76.020 76.570 76.950 77.300 77.680 78.120 78.360 78.700 2096 0.0000 65.284 20.381 0.0000 44.068 29.319 20.902 1.8200 1.0600 1.6400 8.4700 24.410 32.230 31.240 28.340 25.430 22.390 20.170 18.880 18.260 17.950 16.590 15.050 14.660 15.010 15.260 16.500 22.300 35.530 52.230 68.160 79.400 85.030 87.950 89.670 90.640 91.180 91.540 91.780 92.170 92.550 92.680 93.000 2097 0.0000 60.085 19.866 8.0817 39.011 27.811 20.445 1.8200 1.0400 1.6600 8.0500 23.090 30.590 29.870 27.480 24.940 22.330 20.420 19.390 19.060 19.000 17.920 16.570 16.230 16.540 16.750 17.870 22.900 33.930 46.980 58.420 65.840 69.360 71.180 72.280 72.940 73.250 73.460 73.670 73.910 74.210 74.290 74.550 2098 13.022 69.880 37.159 0.0000 32.654 22.302 14.848 1.3500 0.93000 1.5000 6.5600 17.340 22.310 21.750 19.910 18.000 15.970 14.510 14.010 14.340 14.800 13.720 12.180 11.620 11.710 11.660 12.560 17.360 28.040 40.420 51.020 57.830 61.030 62.710 63.940 65.030 65.620 65.740 65.690 65.530 65.480 65.680 66.480 2099 14.344 100.00 46.468 0.0000 26.625 14.440 9.3086 0.89000 0.69000 1.2500 5.2800 12.970 15.930 14.940 13.080 11.180 9.1600 7.6100 6.7400 6.2100 5.7100 4.2100 2.7300 2.3500 2.6300 2.7800 3.7500 8.7700 20.350 34.170 46.360 54.410 58.260 60.230 61.620 62.790 63.430 63.550 63.430 63.200 63.040 63.160 63.970 2100 0.0000 100.00 34.951 7.9370 29.580 15.666 9.8899 1.2200 0.88000 1.4200 5.7400 14.310 17.450 16.140 13.930 11.800 9.5400 7.8400 6.7500 5.9400 5.2700 3.8900 2.5900 2.2900 2.5800 2.7900 3.7900 8.9300 21.140 36.570 51.240 61.690 66.990 69.760 71.370 72.340 72.850 73.180 73.470 73.830 74.170 74.330 74.610 2101 0.0000 100.00 39.494 0.0000 34.570 17.938 9.7204 1.2700 0.91000 1.3100 5.7000 14.060 17.170 15.850 13.680 11.590 9.3600 7.7000 6.6700 5.9400 5.3400 3.9200 2.5400 2.2300 2.5400 2.7700 3.8500 9.4100 23.050 41.210 59.820 74.050 81.770 85.860 88.210 89.610 90.370 90.890 91.280 91.740 92.220 92.450 92.810 2102 0.0000 81.769 34.801 0.0000 38.192 22.552 13.161 1.4600 0.93000 1.5200 6.5300 16.990 21.360 20.230 18.030 15.830 13.500 11.820 10.920 10.570 10.410 9.1300 7.7300 7.3900 7.7400 7.9800 9.1700 14.880 28.340 45.800 63.130 75.870 82.580 86.130 88.210 89.470 90.140 90.610 90.960 91.420 91.900 92.160 92.500 2103 0.0000 89.944 21.092 0.0000 36.720 20.233 14.180 1.4600 0.95000 1.4600 7.2600 19.580 24.690 22.960 19.940 16.960 13.900 11.630 10.070 8.8700 7.9700 6.4300 5.0100 4.6900 5.0000 5.2400 6.3600 11.960 25.430 43.230 61.220 74.780 82.010 85.850 88.070 89.410 90.130 90.640 91.030 91.480 91.940 92.190 92.510 2104 96.541 14.259 100.00 0.0000 6.5586 14.157 5.1271 0.64000 0.53000 1.0500 2.5400 3.7200 4.1100 4.1800 4.2800 4.5800 5.0900 6.3100 10.360 19.730 31.220 34.270 29.580 23.060 16.380 10.740 7.3900 5.8600 5.1600 4.5200 4.0400 3.8800 3.8200 3.8500 4.2000 4.9000 5.3400 5.2200 4.8800 4.3900 4.0200 4.2400 5.1500 2105 100.00 0.0000 100.00 0.0000 6.7873 16.492 5.6396 0.69000 0.56000 1.0100 2.4600 3.6500 4.1100 4.2300 4.4100 4.8200 5.5100 7.0000 11.840 23.380 38.380 42.830 36.610 27.810 19.090 12.030 7.8900 5.8600 4.7900 3.9400 3.3800 3.1700 3.1100 3.1300 3.4700 4.1500 4.5900 4.4600 4.1400 3.6600 3.3200 3.5300 4.4800 2106 90.122 0.0000 100.00 8.1131 8.1164 16.631 5.2911 0.61000 0.55000 1.0700 2.4400 3.6000 3.9500 4.1100 4.2200 4.6000 5.2000 6.5600 10.930 21.200 34.340 38.620 33.940 26.780 19.380 13.240 9.5800 7.7600 6.7900 6.0100 5.4800 5.2900 5.2300 5.2600 5.6000 6.2800 6.7000 6.5800 6.2700 5.8400 5.4900 5.7000 6.5800 2107 100.00 0.0000 89.566 7.0078 6.4208 14.960 7.0320 0.46000 0.53000 1.0600 2.8600 4.9500 5.9300 6.3300 6.6200 6.9900 7.5800 8.9000 13.090 22.870 34.910 38.050 32.600 24.920 17.150 10.820 7.0800 5.2500 4.3000 3.5500 3.0500 2.8700 2.8000 2.8200 3.1100 3.7000 4.1100 4.0000 3.6900 3.3000 3.0000 3.2300 3.9900 2108 87.228 18.360 100.00 5.2346 8.0754 14.452 4.7619 0.61000 0.48000 0.98000 2.4600 3.5800 3.9700 4.0200 4.0600 4.3100 4.7100 5.7800 9.3500 17.670 27.850 30.760 27.160 21.980 16.510 11.780 8.9700 7.7600 7.3700 6.9400 6.5800 6.4600 6.4200 6.4500 6.8300 7.5200 7.9500 7.8400 7.5100 7.0300 6.6900 6.8800 7.7400 2109 76.663 16.054 81.610 0.0000 12.202 19.265 9.0312 0.99000 0.83000 1.3100 3.6200 6.9900 8.6500 9.1700 9.4200 9.6900 10.060 11.140 14.960 23.880 34.720 37.530 33.210 27.310 21.210 15.940 12.850 11.590 11.310 10.970 10.620 10.530 10.490 10.550 11.000 11.800 12.290 12.140 11.760 11.200 10.800 10.990 12.080 2110 91.169 34.360 97.972 0.19629 6.1785 10.859 4.4044 0.60000 0.47000 1.0500 2.5100 3.7500 4.0900 4.1500 4.1000 4.2200 4.4600 5.2400 8.0800 14.570 21.960 23.390 20.190 16.220 12.080 8.3900 6.2400 5.5100 5.5000 5.3400 5.1200 5.0400 5.0200 5.0700 5.4400 6.1400 6.5900 6.4700 6.1500 5.6500 5.3000 5.5000 6.4300 2111 77.380 2.4389 82.350 0.0000 13.556 23.323 9.9714 1.1500 0.76000 1.2900 3.5700 7.1600 8.9200 9.5700 9.9500 10.410 11.010 12.440 17.200 28.680 43.760 48.550 42.820 34.520 26.170 19.300 15.260 13.260 12.250 11.370 10.760 10.530 10.460 10.480 10.910 11.710 12.200 12.030 11.660 11.100 10.690 10.870 11.920 2112 64.950 0.0000 65.985 6.0470 18.170 26.758 14.100 1.2000 0.77000 1.3300 4.4900 10.470 13.700 14.890 15.550 16.070 16.680 17.990 22.220 31.860 43.740 47.380 43.020 36.380 29.450 23.600 20.100 18.290 17.320 16.500 15.920 15.740 15.690 15.760 16.210 17.020 17.490 17.360 17.060 16.520 16.150 16.380 17.420 2113 70.907 0.0000 80.539 8.8314 14.024 22.439 9.5479 0.80000 0.64000 1.2000 3.4900 7.0000 8.7400 9.4000 9.7500 10.150 10.690 11.960 16.120 25.980 38.700 43.110 38.920 32.260 25.290 19.430 15.950 14.170 13.210 12.410 11.860 11.660 11.610 11.660 12.070 12.790 13.250 13.130 12.810 12.310 11.970 12.160 13.100 2114 61.840 0.0000 77.342 0.0000 19.982 29.744 11.200 1.0600 0.69000 1.2700 3.8000 7.9800 10.080 10.880 11.330 11.840 12.540 14.040 18.920 30.700 46.710 53.150 48.630 41.030 33.140 26.670 22.890 20.940 19.910 19.020 18.400 18.220 18.150 18.220 18.710 19.540 20.080 19.940 19.590 19.030 18.630 18.850 19.950 2115 77.170 29.093 100.00 0.0000 10.269 15.437 4.7964 0.58000 0.59000 1.1600 2.6000 3.8200 4.1700 4.2600 4.2400 4.4400 4.7900 5.7500 9.1000 16.880 26.270 28.880 25.700 21.390 16.870 12.840 10.520 9.8700 10.160 10.300 10.230 10.240 10.260 10.350 10.780 11.580 12.080 11.940 11.590 11.030 10.640 10.820 11.830 2116 68.919 15.171 79.686 9.4084 13.442 19.316 8.6666 0.82000 0.69000 1.2000 3.5200 6.9100 8.4800 9.0100 9.1900 9.4200 9.7400 10.670 14.030 21.730 31.020 33.700 30.590 26.030 21.160 16.850 14.290 13.310 13.180 12.960 12.720 12.670 12.650 12.720 13.120 13.850 14.310 14.170 13.860 13.360 12.980 13.180 14.090 2117 80.948 33.689 100.00 8.9312 8.1951 12.212 4.2844 0.68000 0.60000 1.1000 2.5400 3.6900 4.0100 4.0100 3.9700 4.1000 4.3500 5.1200 7.8400 14.010 21.030 22.660 20.090 16.780 13.280 10.100 8.2400 7.7700 8.0600 8.1800 8.1000 8.1200 8.1300 8.2000 8.5800 9.2600 9.6800 9.5400 9.2500 8.7800 8.4400 8.6500 9.5200 2118 69.742 31.755 82.907 0.0000 12.383 16.459 7.5648 0.67000 0.57000 1.1300 3.3200 6.3200 7.6900 8.0500 8.1200 8.2600 8.4300 9.1900 12.070 18.570 25.960 27.560 24.630 20.960 17.140 13.650 11.670 11.400 12.200 12.760 12.970 13.140 13.230 13.380 13.870 14.710 15.240 15.100 14.750 14.180 13.760 13.960 15.050 2119 68.371 33.965 100.00 0.54272 11.792 15.535 4.4536 0.75000 0.65000 1.0500 2.5100 3.7400 4.0500 4.1000 4.0200 4.1400 4.4200 5.2400 8.2300 15.160 23.400 25.720 23.160 19.780 16.240 13.000 11.210 11.120 12.150 12.930 13.260 13.490 13.570 13.700 14.200 15.030 15.520 15.410 15.050 14.500 14.110 14.350 15.350 2120 58.198 0.0000 73.212 9.0216 18.965 27.062 11.027 0.99000 0.80000 1.2500 3.8900 8.2500 10.440 11.200 11.580 11.970 12.510 13.770 17.980 27.920 40.890 45.830 42.330 36.340 29.980 24.660 21.520 19.930 19.070 18.350 17.860 17.700 17.660 17.720 18.140 18.840 19.250 19.140 18.860 18.420 18.090 18.290 19.240 2121 56.667 18.102 68.762 6.3513 18.149 23.133 11.319 1.0100 0.70000 1.3300 4.2700 9.2800 11.760 12.460 12.690 12.880 13.110 13.950 17.110 24.290 32.800 35.270 32.520 28.590 24.370 20.600 18.450 17.890 18.350 18.650 18.760 18.880 18.950 19.090 19.560 20.370 20.850 20.760 20.440 19.960 19.590 19.820 20.810 2122 61.586 15.190 76.675 0.90240 17.081 23.407 9.7120 0.83000 0.65000 1.2400 3.7600 7.6200 9.4700 10.060 10.280 10.510 10.850 11.900 15.630 24.500 35.660 39.240 35.720 30.570 25.150 20.470 17.800 16.930 17.140 17.230 17.190 17.240 17.270 17.370 17.860 18.680 19.170 19.060 18.710 18.180 17.790 17.980 19.070 2123 45.553 6.3050 67.131 7.1992 24.576 31.037 13.003 1.3000 0.98000 1.3400 4.4800 10.240 13.140 14.020 14.330 14.620 15.010 16.080 19.880 28.900 40.520 45.140 42.620 38.170 33.300 29.090 26.700 25.800 25.770 25.650 25.510 25.550 25.540 25.700 26.160 26.890 27.350 27.270 26.980 26.560 26.260 26.460 27.440 2124 53.347 0.0000 58.794 9.5986 22.501 30.469 17.022 1.0700 0.88000 1.3700 5.3000 13.030 17.430 18.880 19.510 19.910 20.340 21.440 25.300 34.240 45.270 48.760 45.040 39.190 33.020 27.790 24.660 23.040 22.180 21.430 20.930 20.760 20.710 20.790 21.190 21.930 22.350 22.230 21.940 21.480 21.130 21.370 22.300 2125 40.051 0.0000 50.694 0.0000 33.749 42.939 22.832 1.4600 1.00000 1.5300 6.4200 17.370 23.710 25.770 26.550 26.950 27.380 28.590 32.990 43.630 57.630 62.990 59.160 52.750 45.970 40.330 37.090 35.410 34.520 33.740 33.190 33.050 33.000 33.120 33.650 34.470 34.970 34.870 34.560 34.070 33.720 33.940 35.040 2126 74.085 56.812 100.00 0.0000 8.5440 9.9330 3.7293 0.53000 0.50000 1.0800 2.5000 3.6500 3.9800 3.9600 3.7800 3.7600 3.8200 4.2700 6.1900 10.370 14.810 15.250 13.230 11.240 9.3500 7.4900 6.5700 7.1000 8.7500 9.9900 10.600 10.920 11.070 11.210 11.700 12.540 13.060 12.920 12.570 12.020 11.590 11.790 12.830 2127 49.585 26.506 79.853 7.9296 19.579 22.845 8.4213 0.93000 0.69000 1.2700 3.5300 7.1100 8.7200 9.0000 9.0600 9.1600 9.3500 10.130 13.140 20.090 28.460 31.180 29.180 26.310 23.260 20.390 18.910 19.170 20.750 22.020 22.700 23.080 23.240 23.410 23.900 24.680 25.130 25.010 24.670 24.200 23.820 23.990 24.920 2128 78.733 48.533 100.00 0.0000 8.0797 10.573 4.0140 0.62000 0.46000 1.0900 2.5600 3.7300 4.0600 4.0300 3.9400 3.9800 4.1200 4.7100 6.9800 11.990 17.350 18.100 15.760 13.210 10.650 8.2300 6.9100 7.0200 8.0800 8.8300 9.1200 9.3100 9.3900 9.5100 9.9600 10.760 11.270 11.140 10.770 10.250 9.8500 10.070 11.110 2129 67.955 35.123 88.483 8.0111 11.940 15.082 5.7706 0.67000 0.59000 1.1600 2.8700 4.9600 5.8100 5.9800 5.9800 6.0600 6.2500 6.9400 9.5200 15.260 21.780 23.470 21.340 18.560 15.610 12.850 11.320 11.280 12.240 12.950 13.260 13.470 13.560 13.700 14.160 14.920 15.410 15.320 14.990 14.480 14.090 14.280 15.250 2130 55.453 28.775 68.341 8.2001 16.489 19.598 10.244 0.96000 0.66000 1.3000 4.0600 8.8600 11.190 11.760 11.820 11.790 11.810 12.350 14.780 20.360 26.660 28.130 25.820 22.880 19.770 16.920 15.380 15.460 16.660 17.630 18.160 18.480 18.640 18.810 19.300 20.060 20.500 20.420 20.130 19.690 19.340 19.550 20.500 2131 61.356 37.260 84.948 0.0000 14.775 17.557 7.0014 0.70000 0.64000 1.2200 3.3100 6.1200 7.3000 7.5500 7.5000 7.5600 7.6500 8.3100 10.980 17.140 24.270 25.970 23.510 20.530 17.470 14.610 13.090 13.440 15.170 16.550 17.290 17.700 17.890 18.070 18.600 19.490 20.030 19.900 19.520 18.950 18.520 18.690 19.770 2132 35.329 17.219 46.130 0.0000 32.442 36.101 21.950 1.5300 1.0200 1.5200 6.6900 18.280 24.890 26.460 26.720 26.500 26.210 26.580 29.280 35.880 43.700 45.780 43.050 39.480 35.790 32.470 30.820 31.160 33.110 34.810 35.850 36.530 36.810 37.100 37.680 38.540 39.060 38.970 38.700 38.270 37.960 38.170 39.230 2133 45.786 23.201 65.185 0.78550 23.616 27.207 13.132 1.0800 0.84000 1.3600 4.9200 11.130 14.180 14.950 15.080 15.140 15.240 15.940 19.020 26.130 34.540 36.960 34.360 30.880 27.240 23.940 22.230 22.520 24.320 25.850 26.770 27.320 27.570 27.820 28.420 29.330 29.880 29.790 29.450 28.940 28.570 28.790 29.890 2134 53.567 20.974 76.901 0.0000 19.703 24.478 9.4339 1.00000 0.68000 1.1700 3.6500 7.6300 9.4700 9.9800 10.090 10.240 10.500 11.430 14.890 23.070 33.280 36.680 33.870 29.770 25.430 21.590 19.520 19.320 20.420 21.300 21.760 22.060 22.210 22.360 22.880 23.730 24.230 24.110 23.770 23.270 22.870 23.090 24.160 2135 41.921 11.215 51.676 0.0000 29.549 35.603 20.080 1.5700 0.89000 1.4600 6.0600 16.040 21.660 23.290 23.770 23.850 23.950 24.730 28.190 36.480 46.770 49.960 46.640 41.840 36.810 32.440 30.050 29.490 30.120 30.560 30.790 31.010 31.110 31.290 31.850 32.710 33.200 33.090 32.780 32.310 31.960 32.190 33.290 2136 20.316 7.2861 32.201 0.0000 48.836 53.436 33.014 2.1600 1.2400 1.9400 9.4600 26.980 37.550 40.230 40.580 40.350 40.070 40.450 43.360 50.520 59.300 62.410 60.360 57.190 53.780 50.700 49.270 49.480 51.010 52.270 53.090 53.640 53.880 54.180 54.810 55.620 56.110 56.080 55.880 55.550 55.370 55.620 56.650 2137 23.577 0.0000 35.936 0.0000 48.584 56.733 32.033 2.2100 1.3200 1.8000 8.5900 24.750 34.750 37.620 38.450 38.740 39.040 40.090 44.160 53.860 66.210 71.350 69.140 64.690 59.640 55.330 52.960 51.650 51.040 50.450 50.070 50.040 50.040 50.250 50.830 51.680 52.150 52.100 51.890 51.530 51.300 51.530 52.660 2138 20.903 0.0000 33.472 9.3844 43.025 49.263 29.907 1.8000 1.1700 1.7100 8.0500 23.620 33.290 35.940 36.500 36.480 36.480 37.100 40.090 47.220 56.120 59.790 58.250 55.120 51.490 48.290 46.530 45.560 45.080 44.630 44.360 44.330 44.330 44.500 44.910 45.550 45.880 45.860 45.690 45.460 45.320 45.520 46.320 2139 32.572 10.318 52.332 0.0000 35.272 40.874 19.937 1.6600 1.0400 1.5400 6.1600 16.090 21.540 22.970 23.320 23.420 23.550 24.410 28.100 37.080 48.680 53.180 50.690 46.540 42.100 38.250 36.260 36.060 37.130 37.990 38.490 38.850 39.000 39.220 39.770 40.620 41.070 41.010 40.720 40.290 40.010 40.210 41.300 2140 51.307 35.990 66.887 0.0000 18.581 20.484 10.674 1.0900 0.74000 1.2900 4.3100 9.5100 12.030 12.520 12.510 12.360 12.210 12.620 14.960 20.360 26.400 27.530 25.090 22.320 19.530 16.930 15.660 16.390 18.770 20.840 22.080 22.790 23.090 23.350 23.920 24.790 25.320 25.210 24.900 24.390 23.990 24.230 25.310 2141 44.895 44.512 80.161 0.98337 19.502 19.406 7.2255 0.78000 0.62000 1.2200 3.4700 6.6900 8.0300 8.1800 8.0600 8.0000 7.9800 8.4300 10.670 15.720 21.370 22.610 20.830 18.980 17.230 15.510 14.900 16.510 20.250 23.690 25.920 27.170 27.710 28.090 28.750 29.660 30.240 30.180 29.860 29.360 28.990 29.200 30.300 2142 61.799 56.919 90.142 1.2250 12.051 12.249 4.8626 0.60000 0.56000 1.0900 2.8600 4.7800 5.4300 5.4600 5.3400 5.2500 5.2300 5.5900 7.3800 11.290 15.340 15.690 13.830 12.170 10.640 9.1000 8.4700 9.6300 12.390 14.730 16.090 16.830 17.150 17.400 17.980 18.890 19.450 19.330 18.990 18.430 18.000 18.220 19.350 2143 58.120 45.528 92.747 0.0000 14.063 15.356 4.8431 0.60000 0.59000 1.0700 2.7400 4.3800 4.9700 5.0000 4.9200 4.9300 5.0600 5.6400 8.0200 13.400 19.480 20.840 18.850 16.620 14.400 12.280 11.290 12.170 14.670 16.800 18.070 18.780 19.070 19.310 19.870 20.730 21.260 21.140 20.800 20.280 19.890 20.050 21.170 2144 59.283 41.320 100.00 8.1831 13.237 15.138 4.0359 0.68000 0.53000 1.0900 2.4400 3.5500 3.8400 3.8500 3.7600 3.8700 4.0700 4.7800 7.2800 12.850 19.190 20.950 19.250 17.120 14.920 12.810 11.760 12.310 14.120 15.590 16.410 16.870 17.090 17.290 17.790 18.590 19.070 18.980 18.690 18.190 17.840 18.030 19.030 2145 62.264 46.140 85.483 6.0889 12.267 13.615 5.7467 0.66000 0.56000 1.1200 3.0600 5.4400 6.3000 6.4400 6.3300 6.2700 6.2700 6.6900 8.6800 13.140 17.940 18.790 16.920 14.910 12.920 10.970 10.020 10.680 12.620 14.200 15.070 15.560 15.780 15.970 16.480 17.300 17.800 17.710 17.370 16.880 16.510 16.720 17.700 2146 20.553 19.735 37.363 6.9581 38.284 39.371 24.208 1.8600 1.1300 1.6600 7.4400 21.090 28.870 30.300 30.050 29.450 28.780 28.750 30.670 35.640 41.460 43.130 41.550 39.640 37.710 35.850 35.200 36.480 39.680 42.630 44.600 45.720 46.170 46.510 47.050 47.740 48.110 48.060 47.870 47.590 47.410 47.510 48.350 2147 44.392 31.318 75.789 0.0000 22.742 24.985 9.4628 1.1600 0.77000 1.2400 3.8700 8.0800 10.040 10.430 10.410 10.490 10.590 11.300 14.310 21.270 29.610 32.170 30.010 27.190 24.300 21.620 20.350 21.220 23.910 26.300 27.760 28.600 28.930 29.190 29.760 30.640 31.140 31.020 30.710 30.210 29.840 30.040 31.070 2148 35.421 27.118 58.072 5.3181 27.168 28.618 14.542 1.1800 0.82000 1.4000 5.4000 12.910 16.600 17.340 17.320 17.140 16.990 17.380 19.750 25.300 31.800 33.710 31.990 29.770 27.450 25.280 24.340 25.370 28.190 30.790 32.500 33.500 33.920 34.260 34.840 35.670 36.150 36.100 35.850 35.480 35.220 35.430 36.360 2149 24.693 13.328 43.899 9.1679 36.053 39.174 21.981 1.6800 1.0600 1.5400 6.8100 18.560 25.210 26.630 26.680 26.440 26.190 26.570 29.130 35.420 43.090 45.810 44.220 41.810 39.190 36.750 35.640 36.100 37.910 39.450 40.400 40.970 41.200 41.440 41.940 42.610 42.980 42.920 42.710 42.410 42.180 42.370 43.160 2150 31.578 30.661 64.415 0.0000 29.508 30.016 12.979 1.3300 0.86000 1.3500 4.9900 11.490 14.620 15.160 15.120 15.010 14.950 15.460 18.140 24.380 31.740 33.980 32.240 30.080 27.940 25.910 25.180 26.830 30.840 34.610 37.170 38.630 39.300 39.760 40.470 41.400 41.950 41.910 41.640 41.220 40.930 41.150 42.260 2151 24.382 15.803 50.111 0.0000 40.613 43.577 21.299 1.6400 1.0900 1.5700 6.5900 17.820 24.010 25.330 25.370 25.240 25.080 25.670 28.950 36.940 46.970 50.750 48.900 46.060 43.030 40.270 39.100 40.070 43.000 45.620 47.350 48.330 48.710 49.040 49.640 50.460 50.900 50.810 50.530 50.150 49.840 50.010 51.010 2152 15.866 18.063 39.776 0.0000 48.132 48.799 26.393 1.9800 1.2900 1.7100 7.8700 22.650 31.150 32.710 32.430 31.850 31.220 31.340 33.880 40.500 48.780 51.830 50.410 48.470 46.490 44.620 44.130 46.050 50.520 54.770 57.740 59.410 60.090 60.550 61.200 61.990 62.390 62.350 62.130 61.810 61.610 61.730 62.670 2153 0.0000 0.0000 14.466 0.0000 84.860 89.157 56.044 3.4300 1.8600 2.2800 12.310 41.880 64.720 70.550 70.660 69.790 68.920 68.770 71.060 77.330 85.150 89.320 90.130 90.350 90.340 90.350 90.920 91.170 91.500 91.650 91.890 92.140 92.210 92.490 92.840 93.090 93.170 93.190 93.270 93.490 93.800 93.900 94.230 2154 4.7654 6.6638 22.600 3.7133 63.485 65.331 39.753 2.5800 1.5400 2.0500 10.280 32.340 46.970 50.040 49.750 48.940 48.090 47.930 50.080 55.970 63.310 66.510 66.100 65.260 64.290 63.330 63.370 64.790 67.680 70.220 71.920 72.920 73.300 73.680 74.160 74.650 74.870 74.870 74.810 74.780 74.820 74.950 75.510 2155 3.9563 0.0000 29.067 7.3093 61.743 66.211 34.234 2.4400 1.3900 1.9900 9.5800 27.810 38.910 41.380 41.620 41.540 41.510 42.180 45.360 53.010 62.940 68.440 69.390 69.120 68.320 67.570 67.520 67.490 67.630 67.650 67.760 67.970 68.100 68.410 68.850 69.330 69.570 69.630 69.650 69.720 69.920 70.130 70.680 2156 10.795 0.0000 26.638 0.0000 64.540 71.286 40.378 2.6500 1.5600 2.0600 10.240 31.200 45.040 48.730 49.340 49.370 49.410 50.190 53.860 62.730 74.020 79.520 79.070 76.880 74.000 71.410 70.150 69.460 69.210 68.900 68.760 68.880 68.970 69.250 69.830 70.540 70.910 70.930 70.820 70.670 70.660 70.920 71.820 2157 62.606 74.230 100.00 0.0000 10.165 8.9099 3.3430 0.42000 0.53000 1.0900 2.5400 3.7000 4.0000 3.8900 3.7000 3.5700 3.5000 3.7000 4.9200 7.5400 10.020 9.7700 8.2100 7.1500 6.4000 5.5900 5.4200 7.0000 10.340 13.320 15.100 16.070 16.490 16.770 17.340 18.260 18.820 18.720 18.370 17.810 17.410 17.580 18.680 2158 47.136 58.899 76.916 8.7589 15.261 13.786 6.2866 0.83000 0.58000 1.0900 3.2800 6.3900 7.6800 7.6900 7.4600 7.2100 6.9600 7.0600 8.3800 11.330 14.280 14.390 12.930 11.820 10.940 9.9900 9.8300 11.650 15.530 19.080 21.370 22.630 23.180 23.550 24.160 24.990 25.500 25.440 25.160 24.730 24.420 24.610 25.650 2159 41.075 51.636 73.289 0.0000 20.462 18.776 7.9620 0.80000 0.67000 1.2800 3.8100 7.7500 9.4700 9.5900 9.3500 9.1200 8.8600 9.0700 10.800 14.800 19.110 19.770 18.090 16.610 15.350 14.070 13.800 15.940 20.710 25.310 28.450 30.230 31.000 31.490 32.190 33.170 33.740 33.680 33.380 32.890 32.580 32.770 33.900 2160 56.295 60.923 100.00 0.0000 12.959 12.268 3.6482 0.48000 0.50000 1.0500 2.4800 3.6500 3.9600 3.8900 3.7300 3.7200 3.7600 4.1600 5.9500 9.8300 13.880 14.300 12.590 11.170 9.9700 8.7200 8.3300 9.9200 13.450 16.580 18.530 19.580 20.030 20.350 20.930 21.870 22.420 22.310 22.000 21.440 21.030 21.240 22.300 2161 58.676 61.717 81.821 0.0000 12.688 12.002 5.9170 0.70000 0.58000 1.1500 3.2500 6.0600 7.1200 7.2200 6.9500 6.7300 6.5000 6.6200 8.0300 11.180 14.280 14.190 12.360 10.920 9.6900 8.4300 8.0000 9.4900 12.780 15.650 17.400 18.330 18.740 19.050 19.650 20.600 21.160 21.070 20.700 20.150 19.720 19.960 21.080 2162 50.894 65.728 90.731 0.0000 14.375 12.405 4.6056 0.74000 0.60000 1.1600 2.8800 4.8100 5.5300 5.4800 5.2300 5.0600 4.9000 5.1000 6.5200 9.6700 12.800 12.720 11.000 9.8400 9.0000 8.0900 8.0000 10.130 14.650 18.770 21.380 22.790 23.370 23.730 24.380 25.330 25.900 25.770 25.420 24.850 24.430 24.600 25.690 2163 34.037 41.464 54.722 0.0000 26.380 25.081 14.080 1.2700 0.84000 1.3600 5.5400 13.360 17.140 17.640 17.300 16.810 16.260 16.220 17.870 21.890 26.280 26.870 25.000 23.230 21.640 20.070 19.650 21.720 26.450 31.080 34.290 36.120 36.930 37.440 38.160 39.120 39.680 39.630 39.400 38.960 38.630 38.880 39.950 2164 21.021 32.248 50.525 1.5567 35.914 34.118 16.947 1.5400 0.99000 1.4500 6.0300 15.590 20.320 21.010 20.650 20.190 19.660 19.740 21.780 26.830 32.800 34.490 33.050 31.550 30.180 28.850 28.720 31.220 36.820 42.460 46.610 49.000 50.030 50.710 51.460 52.360 52.850 52.850 52.670 52.400 52.210 52.440 53.420 2165 31.795 47.599 59.364 6.8033 23.484 21.261 11.171 0.94000 0.69000 1.2200 4.7700 11.020 13.890 14.140 13.740 13.270 12.720 12.650 13.970 17.210 20.670 21.080 19.620 18.430 17.480 16.480 16.420 18.710 23.650 28.450 31.820 33.730 34.590 35.100 35.770 36.620 37.120 37.130 36.910 36.580 36.310 36.550 37.480 2166 7.7221 14.659 22.453 0.0000 59.021 58.107 37.555 2.5300 1.3900 1.9200 10.060 31.440 45.380 48.120 47.590 46.420 45.150 44.580 46.020 50.490 55.960 57.750 56.650 55.480 54.450 53.380 53.500 55.920 61.080 66.200 69.940 72.120 73.050 73.710 74.410 75.120 75.470 75.520 75.470 75.380 75.390 75.580 76.330 2167 10.002 22.578 39.234 0.0000 49.989 47.403 24.339 2.1300 1.1900 1.6400 7.7000 21.700 29.430 30.560 30.080 29.360 28.570 28.520 30.600 36.120 42.950 45.480 44.600 43.570 42.720 41.840 42.180 45.230 51.780 58.540 63.680 66.720 68.050 68.870 69.710 70.530 70.980 71.050 70.980 70.880 70.880 71.050 71.910 2168 0.0000 15.547 36.430 7.8188 55.991 53.686 25.993 2.1700 1.2100 1.7100 7.8900 22.870 31.260 32.430 31.950 31.300 30.710 30.760 32.970 38.670 45.940 49.350 49.520 49.540 49.740 49.930 50.980 54.070 59.870 65.690 70.000 72.510 73.590 74.280 74.810 75.180 75.320 75.420 75.560 75.800 76.080 76.240 76.440 2169 4.4503 26.015 41.566 9.1293 45.918 42.401 20.837 1.7600 1.0400 1.5200 6.9300 19.170 25.630 26.340 25.720 25.020 24.310 24.200 25.970 30.570 36.220 38.370 37.900 37.530 37.410 37.230 37.980 41.220 47.780 54.600 59.800 62.830 64.150 64.940 65.590 66.160 66.480 66.530 66.570 66.640 66.790 66.920 67.450 2170 0.0000 12.627 25.187 0.0000 70.272 67.576 37.072 2.8600 1.4800 2.1200 10.340 31.330 44.380 46.820 46.280 45.440 44.490 44.310 46.370 51.950 59.000 62.250 62.340 62.420 62.740 63.030 64.320 67.860 74.470 81.100 86.120 89.100 90.390 91.300 91.990 92.490 92.700 92.860 92.990 93.340 93.680 93.850 94.210 2171 47.995 80.756 100.00 7.8323 12.040 8.9674 2.9791 0.65000 0.47000 1.0800 2.4500 3.5400 3.7900 3.6700 3.4200 3.2600 3.1100 3.1700 4.0300 5.8900 7.5500 7.1300 5.8900 5.2900 5.0600 4.7400 5.0000 7.2200 11.910 16.430 19.470 21.130 21.860 22.280 22.900 23.710 24.210 24.120 23.860 23.430 23.140 23.290 24.260 2172 41.019 62.610 72.368 4.8077 17.225 14.511 6.7755 0.88000 0.61000 1.1700 3.5000 7.1000 8.5800 8.5900 8.2200 7.8900 7.4700 7.4400 8.5600 11.170 13.750 13.660 12.190 11.210 10.550 9.8100 9.8800 12.250 17.190 21.920 25.130 26.940 27.720 28.230 28.900 29.790 30.330 30.280 30.020 29.580 29.290 29.500 30.530 2173 36.686 62.225 79.967 0.0000 19.609 16.094 6.1966 0.87000 0.68000 1.1600 3.3600 6.5100 7.6900 7.6700 7.3400 7.0300 6.7200 6.8100 8.1500 11.240 14.440 14.540 12.990 11.960 11.270 10.550 10.690 13.460 19.420 25.350 29.560 31.950 32.990 33.590 34.350 35.310 35.870 35.820 35.530 35.090 34.760 34.960 36.050 2174 52.487 75.756 100.00 0.0000 12.647 10.164 3.3600 0.68000 0.56000 1.0500 2.5500 3.7700 4.0500 3.9500 3.7400 3.6000 3.5200 3.6900 4.8700 7.4200 9.8200 9.5000 7.9500 7.0600 6.5300 5.9100 5.9700 8.1300 12.730 17.010 19.790 21.290 21.920 22.320 22.970 23.930 24.470 24.350 24.020 23.460 23.010 23.200 24.300 2175 37.869 74.537 100.00 4.6338 16.327 12.201 3.1922 0.61000 0.62000 1.1100 2.5000 3.6000 3.8500 3.7300 3.5200 3.4100 3.3200 3.4900 4.6300 7.0500 9.4100 9.3200 8.0800 7.4300 7.1700 6.8600 7.2100 10.040 16.020 22.070 26.440 28.920 30.020 30.660 31.410 32.370 32.960 32.930 32.700 32.310 32.050 32.250 33.260 2176 8.0499 41.589 50.972 8.9624 37.048 31.641 14.097 1.5300 1.00000 1.4400 5.8100 14.070 17.730 17.900 17.300 16.710 16.100 15.990 17.420 21.070 25.260 26.420 25.630 25.190 25.130 25.000 25.800 29.550 37.280 45.550 52.040 55.940 57.760 58.800 59.640 60.410 60.840 60.980 61.000 61.020 61.140 61.340 62.030 2177 22.195 52.663 68.830 7.7663 26.341 22.198 8.7647 1.1400 0.73000 1.3000 4.1700 8.8700 10.910 10.930 10.510 10.140 9.7500 9.7800 11.240 14.730 18.580 19.280 18.090 17.300 16.840 16.330 16.700 19.860 26.490 33.300 38.330 41.240 42.500 43.220 43.950 44.760 45.220 45.220 45.080 44.830 44.640 44.860 45.640 2178 23.601 48.672 56.903 0.0000 30.080 25.695 12.693 1.2500 0.83000 1.3200 5.1800 12.640 16.110 16.330 15.760 15.080 14.360 14.140 15.440 18.870 22.700 23.200 21.700 20.590 19.850 19.040 19.270 22.520 29.610 37.000 42.590 45.880 47.340 48.200 49.060 50.060 50.600 50.610 50.410 50.100 49.890 50.120 51.170 2179 0.0000 34.845 42.112 0.0000 54.270 45.196 20.391 2.0000 1.1900 1.6700 7.3100 19.660 25.780 26.200 25.320 24.470 23.510 23.210 24.750 28.900 33.940 35.600 34.980 34.820 35.190 35.490 36.890 42.050 52.950 65.740 76.860 84.010 87.420 89.300 90.480 91.270 91.640 91.920 92.210 92.540 92.950 93.170 93.520 2180 0.0000 31.483 33.399 8.4010 47.878 41.514 22.895 2.1200 1.2100 1.7000 7.7700 21.920 29.440 30.030 28.990 27.820 26.600 26.000 26.900 29.860 33.480 34.530 33.900 33.760 34.050 34.280 35.420 39.530 47.900 57.140 64.610 69.150 71.240 72.400 73.200 73.750 73.990 74.180 74.380 74.660 75.020 75.210 75.500 2181 0.0000 29.629 25.097 0.0000 59.648 51.637 30.522 2.3000 1.3700 2.0100 10.010 28.680 39.190 40.270 38.930 37.390 35.750 34.830 35.540 38.410 42.010 42.930 42.180 42.000 42.360 42.650 43.960 48.750 58.740 70.180 79.810 85.810 88.630 90.230 91.280 92.000 92.340 92.590 92.770 93.120 93.500 93.750 94.100 2182 5.4061 21.778 24.774 3.4017 53.309 49.832 31.917 2.2700 1.2900 1.7900 9.2900 28.400 39.990 41.660 40.660 39.270 37.820 37.020 37.970 41.300 45.350 46.430 45.480 44.790 44.410 43.950 44.500 47.670 54.290 61.180 66.430 69.510 70.850 71.650 72.380 73.020 73.330 73.410 73.390 73.410 73.480 73.660 74.220 2183 0.0000 21.668 33.050 0.0000 64.319 58.428 30.427 2.5400 1.5200 1.9400 9.1000 27.160 37.790 39.150 38.110 36.920 35.700 35.260 37.060 42.250 48.760 51.260 50.780 50.600 50.820 50.980 52.270 56.840 66.100 76.160 84.160 88.900 90.950 92.080 92.820 93.270 93.400 93.460 93.510 93.720 93.940 93.950 94.070 2184 48.361 95.196 100.00 4.1764 11.790 7.6052 2.9231 0.79000 0.60000 1.0400 2.5800 3.7600 3.9900 3.8600 3.5700 3.3300 3.0800 3.0200 3.5200 4.6100 5.3700 4.4600 3.1500 2.7100 2.7600 2.6900 3.1300 5.7600 11.260 16.630 20.300 22.290 23.120 23.610 24.270 25.170 25.700 25.600 25.250 24.780 24.380 24.530 25.580 2185 39.483 81.374 87.061 0.0000 16.454 11.399 4.2743 0.75000 0.56000 1.0900 2.9100 5.0500 5.7200 5.5800 5.2400 4.9000 4.5500 4.4600 5.1700 6.8300 8.2800 7.6900 6.3200 5.7300 5.5700 5.3500 5.7900 8.8400 15.400 22.220 27.220 30.120 31.420 32.160 32.980 34.000 34.610 34.600 34.310 33.860 33.500 33.730 34.790 2186 31.733 85.295 100.00 6.0491 17.142 11.373 3.0128 0.72000 0.72000 1.1400 2.5400 3.6500 3.9100 3.7500 3.5100 3.3100 3.1500 3.2000 3.9600 5.6600 7.1500 6.6400 5.3900 4.9300 4.9500 4.8800 5.4600 8.8100 16.060 23.660 29.340 32.630 34.070 34.850 35.650 36.570 37.090 37.060 36.840 36.470 36.170 36.340 37.260 2187 16.875 64.848 59.487 8.0710 26.529 19.694 9.6789 1.1700 0.79000 1.3300 4.7300 10.840 13.440 13.170 12.370 11.500 10.590 10.070 10.640 12.430 14.290 13.980 12.710 12.170 12.150 12.010 12.710 16.620 24.950 33.930 40.950 45.160 47.050 48.060 48.900 49.770 50.220 50.260 50.160 50.010 49.900 50.020 50.790 2188 25.043 78.104 72.487 0.0000 23.181 15.705 6.5643 1.0600 0.85000 1.2700 3.8200 7.7700 9.2200 8.9800 8.3400 7.7000 7.0000 6.6300 7.2000 8.8300 10.330 9.6600 8.2100 7.6300 7.5900 7.4500 8.1100 12.130 20.950 30.620 38.260 42.870 44.900 45.980 46.970 48.030 48.600 48.580 48.370 47.970 47.690 47.860 48.880 2189 15.151 72.966 76.105 9.1025 24.276 16.820 5.5871 1.0500 0.66000 1.1700 3.3800 6.4700 7.5300 7.3300 6.8700 6.4400 5.9800 5.8400 6.6200 8.5300 10.410 10.220 9.1200 8.7400 8.8600 8.8900 9.6900 13.700 22.350 31.960 39.740 44.520 46.770 47.990 48.980 49.890 50.420 50.530 50.480 50.360 50.330 50.520 51.340 2190 13.148 62.351 65.160 0.0000 33.690 24.857 9.8833 1.1400 0.95000 1.3700 4.6900 10.690 13.170 13.010 12.290 11.590 10.850 10.570 11.620 14.410 17.310 17.310 15.860 15.230 15.220 15.070 15.950 20.790 31.280 43.080 52.850 58.940 61.700 63.150 64.260 65.270 65.780 65.820 65.710 65.450 65.310 65.350 66.210 2191 0.0000 40.829 31.208 5.1646 47.094 38.507 22.004 2.0000 1.2600 1.6900 7.7900 21.930 29.320 29.600 28.240 26.770 25.220 24.310 24.750 26.900 29.540 29.920 29.030 28.810 29.130 29.370 30.560 35.230 45.140 56.540 66.200 72.300 75.150 76.710 77.700 78.360 78.670 78.900 79.100 79.420 79.750 79.970 80.230 2192 0.0000 55.469 41.405 1.7451 45.207 33.036 16.488 1.5300 1.1000 1.5200 6.7100 17.740 22.910 22.660 21.260 19.860 18.350 17.430 17.790 19.640 21.810 21.730 20.560 20.280 20.630 20.900 22.200 27.760 40.050 55.100 68.910 78.280 82.890 85.340 86.820 87.730 88.210 88.570 88.880 89.330 89.810 90.030 90.430 2193 12.134 47.022 49.453 0.0000 38.127 31.100 15.030 1.4600 0.92000 1.4800 6.2300 15.360 19.500 19.590 18.810 17.950 17.020 16.650 17.800 21.000 24.590 25.150 23.900 23.190 22.970 22.640 23.370 27.630 36.780 46.910 55.150 60.270 62.630 63.950 65.040 66.080 66.650 66.790 66.750 66.600 66.560 66.840 67.730 2194 0.0000 46.659 47.713 4.7255 43.735 34.189 15.166 1.5600 1.0400 1.5000 6.1100 15.610 19.970 19.950 19.010 18.080 17.120 16.700 17.720 20.680 24.100 24.780 23.920 23.700 24.030 24.300 25.540 30.560 41.290 53.890 64.860 71.960 75.330 77.160 78.300 79.040 79.410 79.680 79.910 80.220 80.590 80.780 81.110 2195 13.986 100.00 80.767 0.0000 24.689 13.528 4.4448 0.81000 0.69000 1.1400 3.2800 6.0300 6.8700 6.5100 5.8600 5.2500 4.5700 4.1200 4.1900 4.6800 4.9300 3.8300 2.5400 2.2000 2.4600 2.6200 3.5500 8.2700 19.240 32.480 44.260 52.150 56.050 58.110 59.600 60.880 61.620 61.830 61.840 61.680 61.630 61.870 62.870 2196 25.974 91.478 100.00 0.0000 20.160 12.053 2.8592 0.85000 0.57000 1.1400 2.5400 3.6300 3.8400 3.7100 3.4200 3.1900 3.0000 2.9600 3.5600 4.8600 5.8600 5.0700 3.7700 3.3900 3.5400 3.6000 4.3800 8.4400 17.490 27.620 35.840 40.930 43.310 44.600 45.700 46.860 47.510 47.570 47.410 47.070 46.840 47.100 48.130 2197 12.508 74.680 64.243 0.0000 30.466 20.215 8.4744 1.2700 0.77000 1.3500 4.5100 10.000 12.160 11.800 10.870 10.020 9.0700 8.5200 8.9800 10.500 12.000 11.380 9.9700 9.5000 9.6400 9.6600 10.590 15.470 26.370 39.120 50.110 57.240 60.610 62.370 63.640 64.770 65.390 65.510 65.430 65.290 65.190 65.400 66.230 2198 22.017 91.881 76.968 4.0850 20.844 12.332 4.8129 0.93000 0.69000 1.1300 3.3700 6.2100 7.2200 6.9200 6.2900 5.6800 5.0200 4.5900 4.7600 5.4800 5.9700 5.0100 3.7400 3.3900 3.5700 3.6700 4.4700 8.5700 17.690 28.000 36.450 41.700 44.170 45.520 46.610 47.680 48.310 48.400 48.290 48.040 47.890 48.140 49.070 2199 36.255 94.289 84.872 0.0000 16.151 9.8143 4.0940 0.74000 0.64000 1.0300 2.9800 5.2300 5.9700 5.7400 5.3000 4.8000 4.3000 4.0000 4.2900 5.1000 5.6300 4.6200 3.3000 2.8800 2.9800 3.0000 3.6300 7.0300 14.410 22.220 28.100 31.560 33.120 33.990 34.900 35.980 36.610 36.610 36.360 35.910 35.570 35.800 36.950 2200 0.0000 67.008 38.264 0.0000 41.979 27.666 14.828 1.6900 0.98000 1.4800 6.5400 17.310 22.120 21.470 19.670 17.880 15.980 14.670 14.360 15.000 15.830 15.000 13.610 13.270 13.630 13.890 15.180 21.000 34.210 50.870 66.880 78.220 84.000 87.030 88.850 89.980 90.570 90.940 91.270 91.650 92.070 92.310 92.650 2201 0.0000 80.849 52.985 0.0000 37.710 22.506 9.6207 1.5400 0.93000 1.3500 5.0900 12.120 14.870 14.190 12.820 11.470 10.030 9.0400 8.9000 9.5100 10.130 9.2200 7.8900 7.5700 7.9100 8.1600 9.3600 15.050 28.490 45.960 63.320 76.100 82.820 86.350 88.410 89.680 90.350 90.780 91.120 91.580 92.020 92.240 92.590 2202 0.0000 73.825 60.441 7.7007 33.174 21.563 8.6063 1.2700 0.85000 1.2900 4.5200 10.220 12.380 12.020 11.090 10.210 9.2700 8.6900 9.0100 10.270 11.520 11.040 9.9100 9.6400 9.9700 10.220 11.330 16.430 27.880 41.850 54.620 63.310 67.640 69.970 71.390 72.270 72.770 73.130 73.430 73.790 74.190 74.460 74.750 2203 7.7180 67.268 48.028 6.6807 30.819 21.284 11.338 1.4000 0.99000 1.3900 5.3700 13.220 16.520 16.110 14.870 13.600 12.260 11.390 11.440 12.440 13.510 12.910 11.680 11.290 11.480 11.570 12.490 17.060 27.110 38.780 48.760 55.140 58.160 59.790 60.910 61.780 62.280 62.450 62.510 62.530 62.610 62.800 63.430 2204 0.0000 64.090 54.507 0.0000 42.402 28.758 11.561 1.7400 0.99000 1.4600 5.4300 13.090 16.260 15.890 14.810 13.720 12.580 11.930 12.490 14.430 16.530 16.330 15.090 14.800 15.170 15.440 16.770 22.620 35.780 52.290 67.990 79.020 84.600 87.540 89.310 90.400 90.960 91.340 91.630 92.050 92.500 92.710 93.020 2205 0.0000 100.00 76.311 7.7548 28.118 15.084 4.4991 0.97000 0.77000 1.2200 3.3400 6.2300 7.0400 6.6900 5.9600 5.3100 4.6000 4.1000 4.1100 4.4800 4.6700 3.6600 2.4800 2.1900 2.4800 2.7000 3.7000 8.7700 20.710 35.850 50.270 60.550 65.910 68.750 70.430 71.490 72.070 72.480 72.820 73.210 73.650 73.890 74.210 2206 0.0000 100.00 67.226 0.0000 33.631 17.682 5.8913 1.1100 0.78000 1.2700 3.9800 8.2300 9.6300 9.0200 7.9800 7.0000 5.9200 5.1300 4.9100 5.0900 5.1200 3.9200 2.6200 2.3000 2.6200 2.8500 3.9400 9.5200 23.100 41.070 59.350 73.290 80.820 84.860 87.200 88.640 89.410 89.930 90.350 90.830 91.320 91.590 91.970 2207 6.4073 98.312 57.745 6.1868 25.877 13.908 6.6320 1.0900 0.69000 1.2800 4.3100 9.3600 11.130 10.390 9.1600 7.9300 6.5800 5.5900 5.1200 4.9700 4.7800 3.6100 2.3900 2.1000 2.3600 2.5500 3.4700 8.1700 19.320 33.120 45.750 54.370 58.670 60.940 62.400 63.460 64.050 64.330 64.450 64.510 64.690 64.890 65.450 2208 80.618 0.0000 100.00 0.0000 11.674 21.470 5.8222 0.78000 0.66000 1.0900 2.5600 3.7900 4.2300 4.3600 4.5100 4.9000 5.5600 7.0300 11.910 23.950 40.560 46.820 41.460 33.040 24.580 17.760 13.790 11.820 10.780 9.9200 9.3500 9.1400 9.0800 9.1100 9.5000 10.250 10.700 10.570 10.240 9.7300 9.3900 9.5900 10.600 2209 66.460 0.0000 100.00 0.0000 16.757 26.681 5.9680 0.82000 0.68000 1.1300 2.6000 3.8000 4.2100 4.3600 4.5000 4.9300 5.6000 7.1300 12.140 24.670 42.720 50.780 46.460 38.610 30.480 23.870 20.020 18.060 17.020 16.120 15.490 15.290 15.220 15.300 15.740 16.570 17.070 16.930 16.570 16.010 15.620 15.810 16.920 2210 72.120 0.0000 100.00 7.7774 12.749 21.312 5.4087 0.90000 0.70000 1.1000 2.5000 3.7300 4.0300 4.1300 4.2600 4.6100 5.1700 6.5200 10.930 21.650 36.210 42.140 38.340 31.660 24.600 18.720 15.220 13.440 12.490 11.700 11.150 10.950 10.880 10.940 11.330 12.030 12.490 12.360 12.050 11.590 11.220 11.410 12.330 2211 58.320 16.136 88.105 4.6343 17.455 23.220 7.2180 0.90000 0.73000 1.2400 3.1000 5.5800 6.5700 6.8500 7.0000 7.2900 7.7100 8.8200 12.610 21.480 32.740 36.850 34.160 29.810 25.140 20.980 18.620 17.950 18.300 18.490 18.480 18.550 18.580 18.710 19.170 19.970 20.410 20.310 19.990 19.450 19.060 19.270 20.250 2212 68.521 13.706 96.834 0.0000 14.458 21.588 5.7033 0.72000 0.59000 1.1500 2.6000 4.0300 4.5000 4.6700 4.8000 5.1600 5.7000 6.9700 11.180 21.120 34.110 38.980 35.560 29.990 24.100 19.030 16.050 14.890 14.730 14.490 14.250 14.200 14.200 14.290 14.770 15.600 16.120 16.020 15.630 15.090 14.640 14.840 15.940 2213 52.744 0.0000 80.918 4.8724 22.414 31.089 10.005 1.0800 0.81000 1.2200 3.6000 7.2600 9.0100 9.6000 9.9300 10.360 10.970 12.360 16.980 28.190 43.610 50.450 47.320 41.190 34.590 29.130 25.920 24.290 23.430 22.680 22.150 21.990 21.940 22.030 22.500 23.270 23.750 23.640 23.350 22.860 22.540 22.740 23.730 2214 53.331 15.576 100.00 6.8386 17.966 23.280 4.9552 0.92000 0.63000 1.1100 2.5500 3.6800 3.9900 4.0600 4.0700 4.3500 4.7700 5.8800 9.6100 18.570 30.410 35.400 33.370 29.520 25.280 21.520 19.440 18.940 19.440 19.780 19.900 20.040 20.110 20.260 20.710 21.460 21.920 21.810 21.530 21.080 20.740 20.930 21.890 2215 41.582 0.0000 65.400 0.0000 31.674 41.002 16.325 1.5200 0.89000 1.3900 5.1200 12.170 15.920 17.130 17.710 18.300 18.970 20.500 25.460 37.380 53.580 60.770 57.630 51.380 44.640 39.070 35.860 34.220 33.350 32.560 32.040 31.910 31.880 32.000 32.550 33.430 33.930 33.840 33.510 33.020 32.690 32.870 34.040 2216 54.943 36.547 100.00 0.0000 16.315 18.681 4.5231 0.78000 0.58000 1.1200 2.4500 3.6700 4.0100 4.0700 4.0600 4.2300 4.5700 5.4400 8.4800 15.370 23.480 25.900 23.850 21.190 18.440 15.830 14.550 15.200 17.420 19.280 20.360 20.980 21.270 21.500 22.090 23.000 23.560 23.450 23.110 22.560 22.160 22.380 23.470 2217 58.883 29.355 100.00 1.4818 15.655 19.596 4.7445 0.78000 0.70000 1.1200 2.5300 3.7500 4.0900 4.1400 4.1000 4.3200 4.6800 5.6500 9.0100 16.850 26.570 29.860 27.510 24.060 20.390 17.090 15.320 15.360 16.650 17.670 18.180 18.520 18.650 18.840 19.350 20.190 20.690 20.580 20.260 19.720 19.330 19.540 20.620 2218 51.811 29.193 100.00 9.7310 16.505 19.583 4.4294 0.67000 0.58000 1.0400 2.4000 3.5600 3.8700 3.9200 3.8900 4.0600 4.3700 5.2500 8.3100 15.380 24.090 27.260 25.610 23.010 20.180 17.570 16.220 16.460 17.910 19.090 19.730 20.120 20.300 20.490 20.940 21.680 22.110 22.010 21.740 21.330 21.020 21.180 22.090 2219 34.884 14.980 77.154 9.5733 26.567 30.374 9.2678 1.1400 0.80000 1.2100 3.6900 7.4300 9.1700 9.5500 9.7000 9.9300 10.300 11.320 14.860 23.080 33.610 38.180 36.990 34.380 31.430 28.760 27.460 27.670 29.070 30.210 30.900 31.360 31.560 31.800 32.310 33.040 33.480 33.430 33.190 32.870 32.640 32.820 33.800 2220 33.101 0.0000 69.238 9.5351 31.882 39.141 13.321 1.3600 0.88000 1.3800 4.4700 10.200 13.010 13.830 14.210 14.660 15.260 16.600 20.990 31.340 45.360 52.320 51.100 47.230 42.650 38.720 36.500 35.330 34.740 34.180 33.820 33.750 33.750 33.910 34.370 35.100 35.530 35.480 35.250 34.900 34.640 34.840 35.820 2221 45.857 18.386 88.638 0.0000 23.724 28.835 7.4947 0.92000 0.77000 1.2700 3.1800 5.6700 6.7900 7.0000 7.1300 7.4300 7.8800 9.0500 13.100 22.770 35.580 40.860 38.600 34.610 30.280 26.440 24.430 24.370 25.680 26.730 27.280 27.630 27.780 27.950 28.510 29.380 29.890 29.770 29.410 28.890 28.480 28.670 29.770 2222 39.747 18.083 72.674 0.0000 27.409 31.840 11.058 1.1700 0.84000 1.2500 4.0200 8.8900 11.200 11.760 11.920 12.100 12.390 13.400 17.130 26.110 37.800 42.450 40.270 36.590 32.640 29.160 27.420 27.640 29.340 30.770 31.640 32.180 32.390 32.630 33.200 34.060 34.550 34.460 34.160 33.710 33.370 33.520 34.640 2223 20.517 0.0000 59.257 0.0000 50.480 59.387 21.082 2.1700 1.2900 1.6300 6.2500 16.350 21.720 23.120 23.490 23.860 24.380 25.790 30.960 43.970 63.020 73.700 73.250 69.150 64.080 59.810 57.550 56.360 55.740 55.090 54.640 54.520 54.430 54.570 55.060 55.810 56.200 56.070 55.810 55.400 55.130 55.270 56.260 2224 24.577 0.0000 50.285 3.6069 43.951 51.970 23.212 1.9800 1.1900 1.6400 6.7400 18.150 24.670 26.400 26.860 27.140 27.490 28.660 33.060 43.890 58.720 65.980 64.530 60.380 55.520 51.420 49.150 47.960 47.350 46.750 46.360 46.250 46.230 46.370 46.860 47.580 48.000 47.930 47.690 47.330 47.120 47.260 48.280 2225 22.415 8.2463 58.283 2.8152 41.926 46.904 18.195 1.6000 1.0200 1.5100 5.8000 14.690 19.360 20.460 20.690 20.900 21.180 22.220 26.280 36.130 49.390 55.760 54.740 51.810 48.440 45.480 44.130 44.380 45.810 46.960 47.670 48.160 48.360 48.630 49.180 49.950 50.370 50.320 50.100 49.820 49.600 49.830 50.790 2226 14.923 0.0000 42.096 0.0000 57.276 65.172 29.736 2.2200 1.2800 1.8600 8.0400 23.310 32.420 34.730 35.130 35.240 35.440 36.490 40.970 52.260 68.120 76.600 76.210 73.030 69.010 65.540 63.780 62.830 62.420 61.920 61.600 61.580 61.570 61.760 62.270 62.980 63.330 63.290 63.090 62.820 62.710 62.920 63.810 2227 34.934 6.4066 69.874 0.0000 33.530 40.529 13.692 1.4500 1.00000 1.3400 4.6300 10.520 13.500 14.310 14.630 15.000 15.500 16.800 21.350 32.470 47.830 54.990 52.890 48.230 43.110 38.770 36.470 35.890 36.370 36.660 36.770 36.930 37.000 37.180 37.710 38.540 39.010 38.910 38.630 38.160 37.860 38.060 39.180 2228 50.805 43.684 100.00 5.2900 15.730 16.577 4.0014 0.60000 0.58000 1.0600 2.4400 3.5500 3.8500 3.8400 3.7600 3.8400 4.0300 4.6900 7.1200 12.600 18.900 20.690 19.130 17.310 15.480 13.710 12.970 14.090 16.870 19.270 20.730 21.570 21.910 22.190 22.760 23.590 24.100 24.030 23.710 23.240 22.880 23.120 24.100 2229 41.474 41.618 100.00 0.0000 21.209 21.542 4.4881 0.66000 0.68000 1.1400 2.5600 3.8000 4.1300 4.1200 4.1000 4.2200 4.5000 5.3000 8.1600 14.690 22.550 25.200 23.660 21.700 19.750 17.890 17.230 18.870 22.770 26.370 28.730 30.020 30.580 30.950 31.600 32.530 33.080 32.990 32.650 32.150 31.770 31.950 33.060 2230 25.969 26.198 77.549 8.8420 28.699 29.475 8.5946 1.0300 0.86000 1.2800 3.6200 7.3900 9.0000 9.2500 9.2500 9.3000 9.4700 10.210 13.180 20.080 28.760 32.370 31.520 29.940 28.250 26.660 26.200 27.720 31.210 34.450 36.630 37.870 38.420 38.810 39.400 40.150 40.570 40.560 40.390 40.070 39.880 40.070 41.000 2231 36.211 31.103 75.452 8.9266 23.567 24.702 8.4400 1.0200 0.70000 1.2800 3.7800 7.4600 9.0300 9.3200 9.2700 9.2900 9.4000 10.030 12.700 18.810 26.150 28.760 27.480 25.630 23.700 21.860 21.160 22.320 25.240 27.870 29.580 30.560 30.990 31.340 31.900 32.680 33.130 33.090 32.880 32.500 32.250 32.450 33.400 2232 32.017 22.278 71.558 2.8247 29.777 32.094 10.821 1.0800 0.82000 1.3400 4.1200 9.0600 11.330 11.790 11.840 11.960 12.170 13.020 16.360 24.260 34.280 38.290 36.800 34.300 31.620 29.170 28.160 29.210 32.090 34.700 36.390 37.370 37.810 38.160 38.780 39.620 40.100 40.050 39.790 39.380 39.100 39.310 40.340 2233 20.305 21.582 70.088 0.0000 38.919 39.546 12.014 1.3500 0.92000 1.3500 4.5100 10.060 12.650 13.110 13.170 13.320 13.550 14.460 18.010 26.400 37.280 42.220 41.470 39.720 37.820 36.060 35.670 37.690 42.200 46.560 49.640 51.450 52.220 52.800 53.510 54.400 54.890 54.920 54.690 54.440 54.260 54.460 55.540 2234 33.496 18.798 80.656 0.0000 31.407 35.259 9.7032 1.1700 0.86000 1.2800 3.7200 7.7300 9.4700 9.8500 9.9500 10.190 10.550 11.630 15.630 25.300 38.330 44.140 42.590 39.400 35.900 32.770 31.300 31.980 34.370 36.450 37.730 38.480 38.760 39.030 39.620 40.480 40.970 40.850 40.540 40.070 39.710 39.860 40.960 2235 42.752 31.602 100.00 5.2262 20.247 22.172 4.5179 0.93000 0.64000 1.1000 2.4600 3.6400 4.0000 3.9900 3.9700 4.1500 4.4500 5.3300 8.4000 15.570 24.480 27.870 26.450 24.200 21.820 19.600 18.610 19.530 22.090 24.350 25.780 26.580 26.930 27.190 27.740 28.530 28.990 28.910 28.630 28.200 27.910 28.090 29.080 2236 0.0000 8.4408 45.557 5.8404 62.074 62.639 24.595 2.1500 1.2300 1.7300 7.3900 20.700 28.060 29.330 29.190 29.010 28.910 29.560 32.970 41.500 53.210 59.830 61.120 61.410 61.540 61.750 62.840 65.220 69.130 72.600 75.050 76.450 77.050 77.540 77.990 78.330 78.420 78.510 78.640 78.840 79.130 79.240 79.460 2237 13.432 13.091 47.406 0.39921 51.169 53.042 23.388 1.9800 1.2800 1.6500 7.1600 19.610 26.460 27.830 27.810 27.650 27.540 28.180 31.600 40.080 51.240 56.420 55.800 54.040 52.060 50.250 49.810 51.450 55.220 58.730 61.160 62.590 63.210 63.660 64.320 65.080 65.480 65.480 65.330 65.140 65.050 65.270 66.140 2238 7.8622 3.1601 41.872 1.5724 64.118 69.410 29.677 2.3100 1.5200 1.8700 8.2800 23.790 33.020 34.940 35.140 35.130 35.200 36.150 40.430 51.190 66.200 74.570 75.230 73.810 71.740 69.870 69.350 69.800 71.010 71.850 72.390 72.780 72.900 73.150 73.630 74.190 74.440 74.410 74.300 74.160 74.140 74.270 74.980 2239 0.0000 0.0000 26.363 0.0000 83.049 87.916 43.505 3.2100 1.7400 2.2000 10.690 33.870 49.590 53.160 53.220 52.870 52.560 53.160 56.970 66.700 80.060 87.950 89.890 90.340 90.300 90.360 91.120 91.570 91.990 92.180 92.410 92.640 92.700 92.960 93.290 93.540 93.550 93.580 93.640 93.860 94.140 94.230 94.500 2240 44.121 52.068 100.00 4.9201 17.357 16.461 3.8810 0.77000 0.59000 1.0700 2.5000 3.6500 3.9400 3.9200 3.7900 3.8200 3.9400 4.4700 6.6000 11.370 16.740 17.990 16.510 15.120 13.920 12.690 12.400 14.310 18.460 22.220 24.630 25.930 26.470 26.840 27.440 28.310 28.800 28.710 28.410 27.920 27.530 27.720 28.700 2241 35.398 51.126 100.00 0.0000 22.751 20.647 4.3055 1.0800 0.73000 1.1500 2.6000 3.8900 4.2700 4.2200 4.1200 4.2200 4.3800 5.0100 7.4800 13.000 19.250 20.880 19.350 17.960 16.810 15.620 15.510 18.170 23.910 29.440 33.250 35.370 36.230 36.730 37.450 38.410 38.920 38.810 38.470 37.940 37.550 37.670 38.710 2242 44.586 60.876 100.00 7.1845 15.204 13.447 3.4528 0.54000 0.55000 1.0900 2.4100 3.5400 3.8000 3.7300 3.5400 3.5100 3.5300 3.8900 5.5100 9.1200 12.960 13.550 12.220 11.170 10.390 9.5600 9.5100 11.550 15.850 19.850 22.490 23.940 24.560 24.960 25.570 26.410 26.900 26.840 26.580 26.150 25.850 26.050 26.960 2243 13.750 30.275 67.348 7.2358 37.543 35.518 11.701 1.4700 0.95000 1.4300 4.6300 10.620 13.210 13.530 13.350 13.270 13.210 13.770 16.470 22.840 30.750 34.020 33.470 32.630 31.860 31.120 31.420 34.210 40.040 45.890 50.180 52.670 53.750 54.410 55.050 55.760 56.150 56.190 56.070 55.940 55.840 56.030 56.770 2244 18.553 28.333 59.201 0.0000 39.021 37.646 15.365 1.5200 1.0500 1.4000 5.5200 13.640 17.600 18.210 18.080 17.940 17.780 18.270 21.000 27.410 35.180 37.990 36.860 35.430 34.080 32.760 32.690 35.310 40.960 46.630 50.750 53.190 54.260 54.970 55.770 56.690 57.210 57.270 57.070 56.800 56.660 56.910 57.950 2245 29.020 44.685 72.743 0.0000 27.009 24.529 8.7484 1.1200 0.86000 1.3100 3.9600 8.3500 10.180 10.350 10.080 9.8800 9.6800 10.010 12.130 17.070 22.780 24.260 22.810 21.440 20.300 19.170 19.120 21.830 27.730 33.620 37.850 40.270 41.360 42.000 42.760 43.740 44.280 44.260 44.010 43.610 43.360 43.560 44.650 2246 27.522 35.898 81.526 0.93101 29.546 28.528 7.9844 1.2700 0.85000 1.3300 3.5900 7.0200 8.4700 8.6500 8.5800 8.5900 8.7000 9.3800 12.240 18.870 27.010 29.930 28.670 27.040 25.480 23.990 23.730 26.100 31.340 36.460 40.090 42.170 43.080 43.650 44.400 45.350 45.850 45.830 45.610 45.220 44.970 45.190 46.260 2247 28.083 35.760 70.068 6.6515 26.994 26.193 9.7407 1.2200 0.77000 1.3100 4.1900 8.9600 11.010 11.320 11.140 11.060 10.990 11.460 13.790 19.140 25.380 27.390 26.210 24.840 23.550 22.260 22.040 24.050 28.450 32.670 35.600 37.260 38.020 38.520 39.180 40.010 40.500 40.480 40.300 39.970 39.740 39.940 40.940 2248 9.1365 28.356 53.588 1.0166 47.430 43.586 17.442 1.7700 1.1000 1.4800 6.0400 15.790 20.700 21.260 20.890 20.490 20.100 20.370 22.860 29.030 36.780 39.910 39.340 38.630 38.100 37.550 38.140 41.700 49.240 57.290 63.600 67.370 69.040 70.040 70.910 71.690 72.110 72.180 72.130 72.050 72.080 72.320 73.000 2249 8.1427 17.531 53.799 6.4176 46.956 46.546 17.764 1.7600 1.0500 1.5100 5.9500 15.430 20.200 20.960 20.830 20.700 20.620 21.220 24.240 31.560 41.100 45.710 45.740 45.080 44.320 43.590 43.920 46.240 50.980 55.580 58.920 60.850 61.710 62.280 62.900 63.530 63.840 63.880 63.860 63.830 63.880 64.030 64.680 2250 0.0000 16.952 44.560 0.0000 65.356 61.738 24.687 2.2900 1.4100 1.7800 7.6900 21.420 28.890 30.030 29.660 29.270 28.890 29.290 32.320 40.030 50.310 55.570 56.110 56.210 56.490 56.770 58.170 62.290 70.120 78.190 84.420 88.130 89.750 90.760 91.520 92.010 92.230 92.390 92.520 92.790 93.140 93.310 93.700 2251 9.7340 23.022 62.473 0.0000 48.225 46.066 15.018 1.8100 1.0700 1.4900 5.4300 13.140 16.850 17.370 17.190 17.110 17.090 17.770 21.000 28.880 39.220 44.080 43.840 42.950 42.090 41.260 41.670 44.910 51.600 58.480 63.670 66.720 68.070 68.910 69.710 70.530 70.950 71.020 70.940 70.810 70.790 70.990 71.790 2252 0.0000 7.9617 31.735 0.0000 75.774 76.038 36.600 2.7900 1.6800 1.9600 9.7100 29.950 42.810 45.240 44.900 44.270 43.660 43.920 47.090 55.490 66.850 72.920 73.730 73.860 73.950 74.090 75.270 78.100 82.960 87.310 90.360 92.080 92.700 93.200 93.640 93.920 93.970 94.010 94.040 94.230 94.490 94.490 94.660 2253 25.893 60.894 91.113 8.8527 22.237 17.911 4.6761 1.0200 0.76000 1.2100 2.8400 4.7800 5.4000 5.3600 5.1400 5.0400 4.9900 5.2700 6.8700 10.390 14.120 14.690 13.520 12.830 12.510 12.100 12.540 15.760 22.470 29.290 34.300 37.150 38.380 39.060 39.780 40.600 41.030 41.010 40.840 40.520 40.300 40.420 41.270 2254 38.226 62.011 100.00 0.0000 19.494 16.266 3.7475 0.88000 0.64000 1.0800 2.5300 3.7300 4.0500 3.9800 3.8300 3.8100 3.8500 4.2600 6.0700 10.070 14.310 14.930 13.420 12.380 11.670 10.890 11.020 13.860 19.900 25.810 29.960 32.290 33.270 33.850 34.610 35.590 36.160 36.080 35.800 35.330 34.920 35.140 36.180 2255 25.315 63.664 100.00 0.0000 24.002 18.368 3.5935 0.94000 0.66000 1.0700 2.4800 3.6600 3.9300 3.8600 3.7100 3.6300 3.6800 4.0500 5.7400 9.4700 13.440 14.040 12.730 12.000 11.690 11.310 11.850 15.600 23.590 32.020 38.470 42.300 44.040 44.990 45.940 46.980 47.550 47.590 47.370 47.000 46.750 46.970 48.030 2256 27.488 53.051 100.00 9.4471 21.666 18.845 3.7383 0.76000 0.65000 1.0900 2.4100 3.5400 3.8100 3.7800 3.6500 3.6800 3.8000 4.3000 6.3100 10.790 15.860 17.260 16.230 15.380 14.800 14.160 14.380 17.090 22.720 28.260 32.200 34.430 35.390 35.990 36.650 37.470 37.920 37.900 37.720 37.450 37.230 37.410 38.320 2257 11.610 39.231 80.360 9.7167 33.397 29.657 7.5106 1.2400 0.83000 1.2600 3.5400 6.9600 8.3200 8.3900 8.2000 8.1500 8.1500 8.6800 11.090 16.710 23.510 26.130 25.600 25.030 24.720 24.370 24.960 28.320 35.210 42.280 47.600 50.700 52.080 52.850 53.560 54.250 54.610 54.660 54.590 54.500 54.470 54.600 55.300 2258 9.6149 40.119 71.070 0.0000 41.891 35.827 10.024 1.5000 0.87000 1.3500 4.2400 9.3800 11.530 11.670 11.380 11.220 11.080 11.530 14.010 19.960 27.280 30.070 29.410 28.830 28.570 28.280 29.110 33.450 42.580 52.640 60.780 65.780 68.070 69.370 70.400 71.360 71.850 71.980 71.930 71.860 71.850 72.100 72.910 2259 16.987 44.908 64.736 0.0000 34.471 29.395 11.200 1.3100 0.87000 1.3600 4.7200 10.890 13.650 13.790 13.380 12.990 12.570 12.700 14.580 19.120 24.310 25.620 24.400 23.470 22.920 22.300 22.770 26.480 34.450 43.000 49.650 53.630 55.410 56.410 57.360 58.320 58.860 58.910 58.790 58.540 58.410 58.640 59.610 2260 10.290 35.598 60.946 8.4672 36.871 32.921 12.833 1.5100 0.93000 1.3700 5.0500 12.090 15.310 15.600 15.270 15.000 14.720 14.970 16.970 21.680 27.190 29.100 28.450 27.910 27.660 27.350 27.960 31.330 38.170 45.270 50.740 53.970 55.440 56.310 57.100 57.830 58.260 58.370 58.360 58.330 58.380 58.590 59.310 2261 23.139 49.980 83.367 0.0000 28.667 24.308 6.5563 1.0200 0.82000 1.1400 3.3000 6.2100 7.3500 7.3900 7.2300 7.1500 7.1300 7.5600 9.7000 14.540 19.970 21.370 20.130 19.180 18.570 17.890 18.260 21.740 29.100 36.760 42.560 45.970 47.520 48.410 49.320 50.340 50.940 50.950 50.760 50.430 50.220 50.470 51.560 2262 0.0000 30.411 51.498 0.0000 56.017 48.190 17.725 2.0700 1.2100 1.6500 6.3700 16.560 21.500 21.880 21.320 20.800 20.280 20.450 22.770 28.670 36.130 39.290 39.070 39.000 39.320 39.620 41.060 46.090 56.570 68.590 78.770 85.190 88.190 89.850 90.940 91.630 91.960 92.180 92.360 92.690 93.070 93.260 93.630 2263 0.0000 24.931 57.305 6.8818 49.889 45.281 15.579 1.8500 1.1600 1.5300 5.7200 14.170 18.230 18.680 18.330 18.070 17.840 18.260 20.820 27.120 35.220 39.020 39.220 39.250 39.530 39.810 41.040 45.010 52.770 61.070 67.620 71.550 73.320 74.370 75.120 75.630 75.850 76.050 76.210 76.480 76.820 76.980 77.230 2264 24.423 63.112 80.265 1.4372 25.304 19.411 6.1587 1.0300 0.67000 1.2300 3.4200 6.5100 7.6600 7.5800 7.2400 6.9600 6.6600 6.7500 8.1100 11.280 14.590 14.850 13.490 12.760 12.500 12.130 12.720 16.520 24.550 33.060 39.610 43.520 45.290 46.300 47.250 48.290 48.900 48.940 48.760 48.420 48.190 48.420 49.500 2265 26.761 78.531 100.00 0.0000 21.484 14.618 3.3074 0.82000 0.72000 1.1300 2.5800 3.7600 4.0100 3.9200 3.6900 3.5700 3.4600 3.6200 4.7100 7.0800 9.3000 8.9800 7.6100 7.0500 7.0000 6.8600 7.5100 11.420 19.950 29.180 36.420 40.750 42.690 43.710 44.680 45.740 46.300 46.310 46.090 45.710 45.430 45.630 46.660 2266 0.0000 55.823 59.463 0.0000 45.290 33.086 11.810 1.6600 1.0300 1.4100 5.2600 12.420 15.520 15.360 14.610 13.880 13.110 12.880 14.070 17.240 20.790 21.450 20.490 20.230 20.620 20.930 22.310 28.020 40.540 56.030 70.440 80.360 85.350 88.030 89.640 90.650 91.200 91.570 91.880 92.290 92.730 92.960 93.320 2267 10.316 61.504 76.399 9.5153 29.389 21.907 6.5884 1.1400 0.84000 1.2800 3.6000 7.1000 8.3900 8.2500 7.8200 7.4700 7.1300 7.1600 8.4200 11.420 14.640 15.070 14.030 13.620 13.720 13.730 14.630 18.970 28.180 38.290 46.470 51.460 53.760 54.960 55.870 56.660 57.080 57.170 57.150 57.070 57.070 57.250 57.850 2268 0.0000 44.449 59.500 9.4638 41.212 33.321 12.508 1.5000 1.0100 1.4600 5.2400 12.570 15.860 15.840 15.200 14.660 14.060 14.000 15.550 19.450 23.960 25.250 24.560 24.340 24.620 24.830 26.010 30.700 40.520 51.590 60.800 66.490 69.070 70.460 71.300 71.810 72.020 72.160 72.310 72.520 72.730 72.800 72.950 2269 0.0000 41.990 57.538 0.0000 51.829 41.594 14.862 2.1000 1.1900 1.5600 5.8400 14.650 18.630 18.700 18.020 17.380 16.740 16.700 18.620 23.490 29.350 31.250 30.470 30.230 30.560 30.820 32.220 37.890 50.010 64.310 76.820 84.880 88.630 90.590 91.780 92.440 92.730 92.900 93.060 93.270 93.550 93.570 93.790 2270 12.682 54.904 75.500 0.0000 34.642 27.155 7.7129 1.3000 0.87000 1.2200 3.7500 7.7100 9.2300 9.2300 8.9100 8.6800 8.4500 8.7000 10.550 14.740 19.390 20.470 19.390 18.830 18.730 18.530 19.390 23.920 33.560 44.360 53.270 58.820 61.420 62.840 64.010 65.080 65.690 65.810 65.770 65.650 65.610 65.850 66.840 2271 12.460 67.021 82.465 0.0000 30.894 21.649 5.8523 1.2200 0.87000 1.3500 3.4300 6.4500 7.4500 7.3500 6.9300 6.5900 6.2600 6.2800 7.5000 10.350 13.330 13.480 12.240 11.760 11.840 11.830 12.770 17.560 28.060 40.200 50.540 57.170 60.340 62.030 63.290 64.400 65.010 65.170 65.110 64.980 64.960 65.160 66.000 2272 0.0000 63.158 78.951 7.9502 34.950 24.445 6.0777 1.3200 0.91000 1.1700 3.4000 6.6100 7.7100 7.5700 7.1500 6.8300 6.5200 6.5900 7.8400 10.800 14.000 14.480 13.540 13.290 13.630 13.900 15.120 20.300 31.570 44.990 56.920 64.830 68.670 70.720 71.980 72.770 73.160 73.420 73.660 73.930 74.260 74.430 74.750 2273 0.0000 80.642 100.00 9.1416 30.192 18.523 2.9954 0.95000 0.75000 1.0700 2.4300 3.4900 3.7400 3.6200 3.3500 3.2300 3.1100 3.2200 4.1300 6.1500 8.0600 7.8600 6.8100 6.5600 6.8700 7.1000 8.2000 13.290 24.940 39.320 52.560 61.660 66.240 68.630 70.060 70.940 71.390 71.720 71.990 72.350 72.690 72.880 73.090 2274 12.284 93.045 100.00 0.0000 26.265 14.933 2.8564 0.92000 0.69000 1.1700 2.4700 3.6100 3.8300 3.6800 3.4200 3.2100 3.0100 2.9800 3.5500 4.7800 5.7200 4.9200 3.6600 3.3100 3.5800 3.7500 4.7300 9.6300 20.930 34.680 47.070 55.490 59.680 61.900 63.470 64.720 65.480 65.680 65.710 65.650 65.650 65.910 66.810 2275 13.415 89.097 100.00 8.6962 23.102 14.110 2.9307 0.88000 0.61000 1.0800 2.4200 3.5700 3.8500 3.6900 3.4200 3.2400 3.0600 3.1000 3.8100 5.3700 6.6900 6.0900 4.8800 4.5200 4.7500 4.8800 5.7800 10.280 20.230 31.490 40.800 46.590 49.280 50.680 51.690 52.600 53.080 53.160 53.090 52.940 52.830 52.970 53.650 2276 8.0043 72.549 77.239 4.9347 30.151 20.196 6.0246 0.99000 0.81000 1.2200 3.5800 6.9200 8.1500 7.9200 7.3800 6.9300 6.4300 6.2700 7.1400 9.2300 11.350 11.210 10.070 9.7100 9.9300 10.050 11.080 15.900 26.570 39.120 50.040 57.180 60.610 62.410 63.650 64.630 65.150 65.330 65.390 65.360 65.440 65.640 66.280 2277 0.0000 67.877 77.393 0.0000 39.952 26.192 6.3445 1.3400 0.84000 1.2800 3.6100 7.1400 8.3600 8.1100 7.6100 7.2000 6.7600 6.7100 7.8200 10.540 13.420 13.590 12.450 12.160 12.530 12.820 14.110 19.970 33.290 50.160 66.390 78.010 83.930 87.090 88.930 90.080 90.660 91.050 91.350 91.770 92.190 92.440 92.720 2278 0.0000 82.813 72.280 0.0000 36.979 21.856 6.3597 1.4400 0.89000 1.3200 3.9500 7.9200 9.2900 8.8800 8.1400 7.4400 6.6600 6.2400 6.6700 7.9800 9.2100 8.4900 7.1400 6.8100 7.1700 7.4300 8.6400 14.500 28.280 46.020 63.530 76.360 83.050 86.530 88.540 89.760 90.360 90.750 91.100 91.500 91.930 92.070 92.330 2279 0.0000 100.00 100.00 0.0000 32.939 17.416 2.7095 1.0600 0.81000 1.0900 2.5100 3.6000 3.7800 3.6100 3.3000 3.0800 2.8400 2.7500 3.1800 4.1300 4.7600 3.8100 2.5500 2.2400 2.5500 2.7900 3.8900 9.5100 23.050 40.950 59.120 72.970 80.520 84.590 86.950 88.430 89.240 89.800 90.250 90.720 91.290 91.530 91.990 2280 0.0000 100.00 100.00 7.9549 28.036 15.094 2.6129 0.98000 0.65000 1.1000 2.4100 3.4500 3.6800 3.5100 3.2000 2.9700 2.7300 2.6400 3.0300 3.9000 4.4800 3.6300 2.4600 2.1800 2.4600 2.6800 3.6900 8.8000 20.920 36.230 50.810 61.180 66.540 69.380 71.060 72.090 72.650 73.060 73.370 73.750 74.150 74.350 74.710 2281 40.056 0.0000 78.570 0.0000 32.747 42.730 12.210 1.4200 0.80000 1.3900 4.1100 8.7900 11.090 11.730 12.130 12.650 13.340 14.950 20.300 33.690 53.270 63.320 60.830 54.390 47.310 41.470 38.160 36.420 35.500 34.640 34.000 33.800 33.700 33.770 34.270 35.100 35.550 35.400 35.070 34.520 34.120 34.250 35.330 2282 56.860 0.0000 100.00 0.0000 21.771 31.532 6.0541 0.84000 0.75000 1.1200 2.5600 3.7700 4.1800 4.3000 4.4600 4.9200 5.6300 7.2100 12.340 25.190 44.110 53.610 50.480 43.420 35.850 29.630 26.030 24.200 23.220 22.360 21.760 21.590 21.520 21.620 22.130 23.000 23.510 23.390 23.030 22.500 22.100 22.290 23.420 2283 39.940 0.0000 100.00 0.0000 31.054 40.709 6.4332 1.2100 0.82000 1.1900 2.5700 3.8800 4.3300 4.4700 4.6600 5.1500 5.9000 7.5200 12.880 26.560 47.710 60.010 58.620 52.620 45.800 40.220 37.110 35.520 34.680 33.880 33.320 33.160 33.090 33.190 33.690 34.540 35.000 34.860 34.530 34.050 33.680 33.870 34.960 2284 48.078 11.487 100.00 0.0000 23.427 30.294 5.6724 1.1900 0.66000 1.1500 2.5400 3.7600 4.1800 4.2800 4.3900 4.7900 5.4000 6.7900 11.380 22.520 38.050 45.390 43.240 38.450 33.150 28.570 26.030 25.310 25.690 25.870 25.920 26.020 26.090 26.250 26.810 27.700 28.250 28.140 27.780 27.260 26.870 27.090 28.200 2285 52.779 0.0000 100.00 8.3201 20.464 28.693 5.4892 0.86000 0.64000 1.1100 2.4600 3.6200 3.9600 4.0700 4.1700 4.5200 5.1100 6.4800 11.010 22.240 38.400 46.470 44.270 38.750 32.590 27.450 24.440 22.910 22.090 21.370 20.870 20.720 20.680 20.770 21.220 21.940 22.370 22.280 21.990 21.540 21.200 21.400 22.370 2286 36.588 13.964 92.734 1.1838 29.385 34.452 6.8363 1.00000 0.90000 1.1900 2.9600 4.8800 5.6800 5.8400 5.9700 6.3700 6.8900 8.2200 12.590 23.220 37.950 45.150 43.790 40.230 36.240 32.710 30.990 31.140 32.700 33.970 34.710 35.190 35.360 35.580 36.140 36.960 37.430 37.330 37.040 36.550 36.230 36.390 37.500 2287 43.465 19.634 100.00 7.5893 21.634 25.664 4.8320 0.78000 0.68000 1.0600 2.3800 3.5600 3.9000 3.9700 3.9700 4.2200 4.6400 5.6900 9.3200 18.010 29.520 34.630 33.250 30.280 26.970 23.980 22.460 22.600 23.950 25.020 25.620 26.020 26.210 26.420 26.920 27.680 28.130 28.050 27.780 27.350 27.060 27.260 28.200 2288 27.431 0.0000 80.751 0.0000 40.674 49.646 11.288 1.5500 0.99000 1.3700 3.8900 8.1300 10.060 10.590 10.880 11.340 12.000 13.560 18.770 32.120 52.770 65.290 65.080 60.410 54.710 50.050 47.560 46.300 45.670 45.000 44.560 44.450 44.410 44.580 45.100 45.900 46.340 46.260 45.970 45.590 45.310 45.540 46.600 2289 16.622 0.0000 71.243 5.8404 45.622 52.465 13.132 1.5900 0.99000 1.4100 4.5000 10.000 12.640 13.330 13.550 13.940 14.500 15.900 20.610 32.460 50.200 61.200 62.420 60.180 56.870 54.090 52.770 52.140 51.880 51.520 51.280 51.320 51.340 51.550 52.040 52.710 53.050 53.030 52.890 52.680 52.560 52.770 53.610 2290 10.370 0.0000 53.815 0.0000 61.833 68.960 22.845 2.2700 1.2900 1.7500 6.8100 17.880 23.890 25.290 25.690 26.080 26.580 28.020 33.040 45.530 64.190 76.030 77.930 76.310 73.520 71.150 70.210 69.780 69.690 69.420 69.310 69.420 69.490 69.780 70.330 71.030 71.410 71.440 71.300 71.140 71.120 71.400 72.240 2291 26.326 21.128 100.00 0.0000 33.632 35.517 5.2970 1.1200 0.74000 1.1000 2.4900 3.7300 4.0600 4.1700 4.2200 4.5600 5.0500 6.2900 10.330 20.060 33.400 40.110 39.640 37.550 35.150 33.000 32.300 33.870 37.580 41.030 43.370 44.720 45.350 45.790 46.500 47.400 47.900 47.860 47.620 47.230 46.970 47.190 48.310 2292 30.722 28.878 91.145 2.8140 28.573 29.607 6.2769 1.1000 0.73000 1.2100 2.9100 5.0600 5.8800 5.9900 5.9800 6.1800 6.5000 7.4300 10.800 18.760 29.080 33.530 32.500 30.550 28.430 26.490 25.850 27.460 31.280 34.820 37.200 38.580 39.160 39.580 40.230 41.120 41.610 41.560 41.320 40.920 40.640 40.880 41.890 2293 5.2142 3.4211 59.723 7.7284 54.530 58.127 17.936 1.8500 1.1600 1.5200 5.9800 14.650 18.920 19.820 19.990 20.300 20.710 21.910 26.140 36.360 50.790 59.510 61.230 60.960 60.060 59.320 59.530 60.470 62.010 63.150 63.930 64.490 64.750 65.100 65.620 66.150 66.450 66.520 66.520 66.540 66.660 66.850 67.460 2294 20.865 11.754 78.444 4.6019 38.613 42.326 10.085 1.5000 1.00000 1.3300 3.8100 7.9000 9.7100 10.080 10.210 10.490 10.940 12.110 16.250 26.360 40.580 48.230 48.250 46.220 43.670 41.400 40.560 41.340 43.450 45.220 46.400 47.080 47.380 47.720 48.280 49.010 49.410 49.400 49.220 48.940 48.780 48.980 49.920 2295 12.982 11.417 59.460 1.9232 49.764 52.464 17.886 1.7500 1.1000 1.5400 5.8400 14.710 19.290 20.180 20.300 20.400 20.610 21.590 25.550 35.360 48.980 56.170 56.250 54.660 52.650 50.850 50.460 51.910 55.100 57.910 59.790 60.910 61.420 61.850 62.480 63.260 63.670 63.670 63.520 63.360 63.270 63.490 64.350 2296 0.0000 0.0000 54.348 0.0000 79.909 85.307 23.800 2.8300 1.6400 1.9100 7.1400 18.860 25.100 26.390 26.530 26.810 27.250 28.670 33.990 47.790 69.340 84.360 88.830 89.780 89.620 89.850 90.990 91.860 92.480 92.690 92.910 93.120 93.150 93.390 93.710 93.950 93.950 93.950 93.970 94.140 94.410 94.470 94.670 2297 0.0000 0.0000 38.672 0.0000 79.439 84.052 31.974 2.8600 1.6700 2.0400 8.9700 25.480 35.190 37.280 37.560 37.740 38.050 39.260 43.900 55.430 72.030 82.720 85.870 86.790 86.960 87.360 88.500 89.310 89.980 90.370 90.800 91.190 91.410 91.810 92.300 92.670 92.830 92.970 93.110 93.380 93.750 93.950 94.340 2298 17.401 24.495 100.00 8.6313 34.490 34.607 5.0874 1.1900 0.84000 1.1700 2.5200 3.8000 4.1900 4.2100 4.2300 4.5000 4.9500 6.0000 9.6000 18.200 29.700 35.460 35.450 34.370 33.140 31.990 31.960 34.170 38.670 42.930 45.890 47.530 48.190 48.660 49.210 49.900 50.240 50.210 50.050 49.810 49.660 49.730 50.490 2299 26.005 34.651 100.00 0.0000 30.089 29.167 4.7114 1.0300 0.84000 1.1700 2.5300 3.7300 4.0300 4.0700 4.0400 4.2700 4.6200 5.5600 8.8300 16.470 26.180 30.260 29.390 27.890 26.410 24.970 24.800 27.280 32.640 37.890 41.590 43.750 44.700 45.300 46.080 47.050 47.610 47.590 47.350 46.980 46.700 46.940 48.050 2300 17.410 37.494 81.490 0.0000 35.626 32.152 7.8916 1.2800 0.83000 1.2700 3.5600 7.0300 8.4300 8.5400 8.4300 8.4800 8.5700 9.2500 12.060 18.570 26.580 29.720 28.960 27.950 27.150 26.350 26.700 30.080 37.250 44.750 50.520 53.930 55.490 56.390 57.290 58.260 58.800 58.860 58.690 58.470 58.340 58.570 59.570 2301 16.606 37.543 100.00 6.0284 32.482 29.671 4.5974 1.1600 0.86000 1.2300 2.5200 3.7700 4.1000 4.1300 4.0900 4.2500 4.5600 5.3900 8.3600 15.240 23.880 27.520 26.990 26.180 25.520 24.820 25.190 28.370 34.950 41.610 46.520 49.340 50.540 51.250 51.970 52.750 53.150 53.150 53.010 52.770 52.650 52.780 53.500 2302 30.714 41.945 100.00 8.6046 23.497 22.496 4.3090 0.94000 0.81000 1.1700 2.5500 3.7500 4.0600 4.0500 3.9900 4.0900 4.3500 5.0300 7.6500 13.640 20.810 23.340 22.270 21.020 19.870 18.710 18.580 20.750 25.450 29.840 32.800 34.470 35.120 35.560 36.150 36.950 37.380 37.310 37.090 36.690 36.460 36.540 37.430 2303 0.0000 19.572 63.723 3.7339 56.887 53.266 14.845 1.9700 1.1700 1.4800 5.2800 12.830 16.380 16.870 16.730 16.730 16.810 17.610 21.060 29.460 40.910 47.120 48.040 48.230 48.490 48.800 50.170 54.160 61.790 69.790 76.040 79.740 81.400 82.400 83.130 83.620 83.800 83.960 84.130 84.370 84.720 84.870 85.100 2304 13.131 19.599 75.839 0.82080 46.101 46.146 10.587 1.5800 1.0200 1.3500 4.0600 8.6300 10.630 10.980 11.000 11.200 11.500 12.570 16.500 26.140 39.560 46.680 46.910 45.750 44.320 43.020 43.110 45.680 50.990 56.140 59.850 62.020 62.970 63.600 64.360 65.210 65.640 65.670 65.530 65.320 65.210 65.440 66.360 2305 0.0000 11.234 67.076 8.1587 56.792 56.819 14.426 1.6500 1.00000 1.4600 4.9900 11.890 15.200 15.720 15.710 15.890 16.190 17.270 21.310 31.240 45.230 53.510 55.220 55.520 55.610 55.820 56.980 59.780 64.480 68.770 71.770 73.450 74.100 74.600 74.990 75.260 75.290 75.350 75.420 75.520 75.760 75.790 75.910 2306 0.0000 9.8958 52.023 0.0000 69.410 68.765 22.165 2.4200 1.4200 1.7200 6.8900 18.460 24.550 25.610 25.560 25.580 25.680 26.620 30.690 40.900 55.480 64.150 65.990 66.390 66.600 66.920 68.360 71.760 77.540 82.960 86.920 89.230 90.220 90.940 91.560 91.990 92.160 92.300 92.370 92.620 92.970 93.150 93.460 2307 12.351 45.015 100.00 8.9179 30.102 25.578 4.0027 1.1400 0.75000 1.0900 2.3900 3.5400 3.8200 3.8100 3.7000 3.8200 4.0000 4.6500 7.0300 12.450 18.930 21.340 20.770 20.270 20.040 19.770 20.440 24.040 31.440 39.170 45.080 48.600 50.180 51.070 51.880 52.630 53.060 53.130 53.090 52.960 52.920 53.110 53.830 2308 9.8585 39.049 94.949 0.0000 41.192 35.791 5.4565 1.3500 0.81000 1.2300 2.7600 4.5000 5.0600 5.1000 5.0500 5.2300 5.5200 6.3900 9.5200 16.860 26.300 30.490 30.160 29.590 29.250 28.880 29.710 34.040 43.050 52.820 60.610 65.320 67.450 68.630 69.620 70.540 71.000 71.090 70.970 70.860 70.800 70.990 71.780 2309 0.0000 38.219 77.549 7.6908 42.696 35.950 8.2548 1.5300 0.91000 1.3000 3.7400 7.6500 9.2200 9.2300 9.0600 8.9900 9.0000 9.5400 12.050 17.920 25.180 28.300 28.180 28.130 28.420 28.700 29.950 34.490 43.750 54.120 62.700 68.000 70.480 71.850 72.730 73.320 73.590 73.780 73.980 74.250 74.580 74.700 74.980 2310 14.567 55.607 100.00 0.0000 31.956 25.115 4.1071 1.1700 0.98000 1.2700 2.6400 3.8700 4.1500 4.1000 3.9900 4.0500 4.1800 4.7400 6.9400 11.880 17.560 19.150 18.090 17.440 17.260 17.000 17.790 22.250 31.680 42.000 50.280 55.350 57.610 58.850 59.890 60.880 61.430 61.500 61.360 61.200 61.090 61.350 62.270 2311 0.0000 30.370 66.816 0.0000 55.119 47.827 13.032 2.1300 1.1900 1.5700 5.1000 11.820 14.830 15.110 14.790 14.650 14.590 15.160 18.200 25.540 34.960 39.290 39.300 39.210 39.490 39.720 41.160 46.320 56.880 68.760 78.650 84.730 87.520 89.010 89.940 90.550 90.750 90.890 91.020 91.230 91.600 91.650 91.830 2312 0.0000 28.607 81.166 9.6152 45.658 41.020 8.3416 1.4800 1.0200 1.3300 3.6300 7.2300 8.7000 8.8100 8.7000 8.8000 8.9800 9.7900 12.880 20.240 29.890 34.740 35.180 35.240 35.470 35.730 36.970 41.060 49.040 57.560 64.280 68.300 70.070 71.090 71.800 72.250 72.440 72.600 72.730 72.970 73.260 73.370 73.600 2313 13.425 66.237 100.00 6.6227 27.019 19.599 3.4202 1.0300 0.67000 1.0500 2.4000 3.4900 3.7500 3.6800 3.5400 3.5100 3.5300 3.8900 5.4500 8.7900 12.280 12.810 11.780 11.390 11.480 11.490 12.380 16.740 25.900 35.990 44.190 49.240 51.600 52.900 53.930 54.880 55.410 55.530 55.520 55.400 55.430 55.600 56.410 2314 5.9283 59.580 85.133 0.0000 37.031 26.898 5.8777 1.3100 0.84000 1.3000 3.2400 6.0000 6.9900 6.9100 6.5900 6.4400 6.2800 6.5400 8.2600 12.180 16.520 17.470 16.460 16.080 16.250 16.350 17.470 22.700 34.100 47.610 59.540 67.420 71.240 73.280 74.700 75.780 76.380 76.610 76.660 76.730 76.830 77.060 77.790 2315 0.0000 44.397 78.786 0.0000 48.331 37.955 8.2962 1.6100 1.0600 1.3500 3.8900 7.8600 9.5000 9.4500 9.1800 9.0600 8.9800 9.4600 11.900 17.670 24.680 27.340 26.840 26.670 27.010 27.310 28.750 34.390 46.550 61.120 74.150 82.730 86.810 88.960 90.280 91.030 91.380 91.650 91.850 92.150 92.530 92.680 92.920 2316 0.0000 56.429 100.00 9.4620 35.210 26.063 3.6494 1.3200 0.78000 1.1400 2.4000 3.5100 3.7400 3.6600 3.5600 3.5700 3.6900 4.1700 6.1300 10.450 15.370 16.890 16.270 16.100 16.460 16.740 18.000 23.060 33.700 46.010 56.640 63.510 66.840 68.650 69.790 70.540 70.940 71.240 71.480 71.800 72.160 72.360 72.650 2317 0.0000 50.612 76.707 8.2296 39.279 30.368 7.5638 1.0700 0.92000 1.2500 3.6500 7.5600 9.1100 9.0100 8.6300 8.3900 8.2100 8.4800 10.350 14.770 19.890 21.430 20.710 20.480 20.800 21.060 22.300 27.380 38.140 50.440 60.870 67.470 70.500 72.080 73.030 73.590 73.830 74.010 74.150 74.320 74.610 74.640 74.750 2318 0.0000 79.187 100.00 0.0000 36.781 22.277 3.2629 1.4600 0.87000 1.2600 2.4900 3.7400 3.9800 3.8300 3.6200 3.4800 3.3800 3.5400 4.6400 7.0200 9.3300 9.1800 8.0100 7.7300 8.0800 8.3500 9.5700 15.360 28.890 46.370 63.620 76.290 82.920 86.440 88.500 89.760 90.420 90.870 91.240 91.700 92.140 92.400 92.730 2319 0.0000 65.628 100.00 0.0000 40.040 26.780 3.6372 1.3200 0.80000 1.2000 2.5400 3.6800 3.9500 3.8600 3.6900 3.6900 3.7200 4.1100 5.8300 9.5800 13.590 14.350 13.330 13.080 13.470 13.780 15.150 21.150 34.460 51.090 66.950 78.170 83.900 86.990 88.830 89.970 90.590 91.030 91.360 91.790 92.280 92.490 92.920 2320 26.493 0.0000 100.00 9.6577 33.871 40.877 5.7261 1.2100 0.87000 1.1500 2.4600 3.6300 3.9900 4.1000 4.2100 4.6200 5.2200 6.6500 11.280 23.020 40.790 51.760 52.430 49.420 45.390 42.020 40.230 39.360 38.940 38.460 38.160 38.110 38.100 38.260 38.710 39.360 39.730 39.680 39.480 39.210 39.000 39.230 40.070 2321 14.855 0.0000 79.729 0.0000 52.891 60.974 11.773 1.9100 1.1800 1.4200 4.0600 8.4600 10.480 10.990 11.200 11.700 12.380 13.980 19.390 33.330 55.710 70.990 73.330 70.720 66.680 63.370 61.870 61.190 60.900 60.440 60.140 60.130 60.140 60.340 60.870 61.630 62.010 61.960 61.730 61.470 61.340 61.540 62.510 2322 28.000 9.3668 100.00 0.0000 36.044 41.677 5.8791 1.2300 0.84000 1.2200 2.5300 3.8100 4.1900 4.2900 4.3700 4.7900 5.3800 6.8100 11.550 23.510 41.470 51.860 51.740 48.440 44.430 41.010 39.430 39.650 41.110 42.210 42.870 43.310 43.510 43.760 44.350 45.200 45.660 45.590 45.300 44.910 44.650 44.870 45.910 2323 7.2589 8.5497 70.130 0.0000 57.716 60.087 13.873 1.8600 1.1600 1.4700 4.9500 11.000 13.770 14.290 14.470 14.830 15.360 16.730 21.450 33.180 50.380 60.950 62.730 62.070 60.750 59.630 59.890 61.910 65.650 68.940 71.200 72.570 73.180 73.720 74.400 75.130 75.490 75.560 75.500 75.430 75.460 75.710 76.520 2324 14.862 18.173 100.00 0.0000 43.400 44.296 5.7305 1.5500 0.99000 1.3400 2.6900 3.9300 4.3000 4.3900 4.4700 4.8700 5.4200 6.7300 11.070 21.690 36.930 45.660 46.400 45.170 43.530 42.090 42.060 44.340 49.070 53.530 56.710 58.560 59.400 59.990 60.730 61.580 62.030 62.070 61.920 61.700 61.580 61.830 62.790 2325 1.8499 7.7779 82.050 7.9933 54.587 55.960 9.7681 1.7000 1.0300 1.3800 3.6400 7.4500 9.0700 9.3400 9.4800 9.8000 10.310 11.590 15.990 26.880 43.100 53.620 56.260 56.660 56.520 56.550 57.560 59.810 63.310 66.330 68.400 69.620 70.160 70.610 71.120 71.540 71.730 71.820 71.870 72.000 72.190 72.380 72.790 2326 17.942 9.3489 100.00 8.6413 37.788 41.470 5.5389 1.3500 0.85000 1.1400 2.4100 3.6200 3.9700 4.0800 4.1900 4.6200 5.2100 6.5700 10.980 21.670 37.030 46.050 46.970 45.510 43.410 41.560 40.990 41.810 43.690 45.180 46.150 46.780 47.060 47.380 47.910 48.610 49.010 49.010 48.880 48.650 48.550 48.750 49.580 2327 10.222 0.0000 87.626 7.6650 49.756 55.597 8.5082 1.8500 1.1100 1.3800 3.2500 5.9200 7.0700 7.2900 7.4600 7.8900 8.5200 9.9700 14.830 27.200 46.600 60.030 63.120 62.350 60.310 58.690 58.260 58.200 58.270 58.110 58.060 58.180 58.220 58.480 58.920 59.500 59.780 59.800 59.760 59.650 59.660 59.850 60.510 2328 5.2445 0.0000 72.426 0.0000 67.442 73.841 14.460 2.2200 1.1700 1.5500 4.7400 10.770 13.640 14.220 14.490 14.950 15.610 17.220 22.670 36.820 59.860 76.600 81.110 80.980 79.270 77.990 78.110 78.390 78.710 78.690 78.720 78.900 78.990 79.280 79.810 80.390 80.670 80.690 80.630 80.610 80.700 80.880 81.530 2329 11.601 27.398 100.00 4.0881 40.418 38.684 5.2438 1.3700 0.87000 1.3000 2.5700 3.8800 4.2800 4.3100 4.3400 4.6200 5.0700 6.1500 9.9100 18.860 30.930 37.030 37.180 36.360 35.520 34.700 35.110 38.280 44.710 51.090 55.750 58.390 59.520 60.160 60.840 61.560 61.890 61.880 61.710 61.500 61.360 61.400 62.120 2330 0.0000 15.638 100.00 9.2426 49.958 48.217 5.2869 1.4200 0.95000 1.2000 2.4300 3.6100 3.9300 3.9700 4.0500 4.4100 4.9300 6.1900 10.240 20.110 34.310 43.130 45.170 45.640 45.870 46.250 47.650 51.070 56.990 62.810 67.130 69.670 70.830 71.600 72.200 72.640 72.820 72.980 73.110 73.420 73.740 73.940 74.220 2331 4.2532 18.841 90.036 0.0000 54.844 52.819 7.8375 1.7600 1.0900 1.4000 3.2900 5.9000 6.9200 7.0600 7.1300 7.4500 7.9400 9.2000 13.540 24.230 39.760 48.950 50.390 50.140 49.670 49.280 50.240 54.020 61.270 68.560 74.020 77.220 78.590 79.450 80.190 80.880 81.180 81.230 81.200 81.190 81.260 81.400 82.050 2332 0.0000 13.763 67.240 0.0000 65.606 63.463 15.021 2.0600 1.3500 1.5100 5.2000 12.390 15.750 16.250 16.280 16.470 16.770 17.900 22.190 32.860 48.300 57.620 59.560 59.950 60.180 60.530 62.080 66.080 73.260 80.390 85.740 88.910 90.300 91.190 91.880 92.370 92.540 92.670 92.780 93.050 93.390 93.580 93.820 2333 0.0000 8.8685 78.766 0.0000 70.123 70.255 12.224 2.3500 1.4300 1.6100 4.3900 9.3500 11.550 11.920 12.030 12.400 12.980 14.450 19.550 32.480 52.360 65.560 68.850 69.450 69.470 69.750 71.380 74.980 80.850 86.150 89.880 91.960 92.760 93.320 93.780 94.040 94.080 94.090 94.080 94.210 94.420 94.340 94.530 2334 0.0000 42.454 100.00 8.7086 40.132 32.826 4.2244 1.1400 0.86000 1.1200 2.4300 3.5700 3.8600 3.8500 3.7800 3.9200 4.1700 4.9100 7.5700 13.710 21.350 24.700 24.630 24.590 24.900 25.210 26.500 31.240 40.950 51.930 61.080 66.860 69.530 71.000 71.960 72.580 72.910 73.120 73.310 73.590 73.960 74.100 74.400 2335 0.0000 40.508 100.00 0.0000 50.165 40.903 4.7875 1.4700 1.0400 1.2600 2.6200 3.8100 4.1800 4.1800 4.1400 4.3200 4.6600 5.5500 8.7400 16.260 26.110 30.740 30.830 30.770 31.090 31.400 32.930 38.590 50.450 64.360 76.510 84.350 88.030 90.000 91.180 91.920 92.250 92.460 92.630 92.950 93.280 93.400 93.630 2336 0.0000 29.703 100.00 7.3220 46.214 41.076 4.9626 1.4600 0.96000 1.2600 2.5400 3.7800 4.1400 4.1500 4.1700 4.3800 4.7900 5.7800 9.2100 17.420 28.460 34.240 34.860 34.910 35.150 35.420 36.730 41.220 49.970 59.300 66.690 71.080 73.020 74.080 74.800 75.230 75.390 75.490 75.590 75.780 76.010 76.030 76.180 2337 0.0000 26.127 100.00 0.0000 55.967 49.714 5.3507 1.6500 1.0800 1.3300 2.5800 3.8500 4.2100 4.2200 4.2700 4.5700 5.0200 6.1800 10.110 19.720 33.330 41.120 42.380 42.590 42.860 43.250 44.880 49.960 60.060 71.280 80.580 86.360 88.990 90.460 91.460 92.090 92.350 92.540 92.700 93.020 93.360 93.520 93.820 2338 0.0000 24.862 79.388 0.0000 57.813 51.967 9.9268 1.7700 1.0800 1.3600 3.9400 8.2900 10.130 10.340 10.260 10.420 10.680 11.650 15.360 24.440 37.000 43.870 44.820 44.990 45.260 45.590 47.140 52.040 61.760 72.480 81.310 86.710 89.190 90.570 91.520 92.140 92.390 92.550 92.720 93.030 93.330 93.510 93.840 2339 0.0000 51.193 100.00 0.0000 45.909 34.416 4.3422 1.4600 0.90000 1.2000 2.6000 3.8300 4.1900 4.1400 4.0100 4.1400 4.3500 5.0100 7.5600 13.420 20.460 22.990 22.350 22.140 22.500 22.790 24.260 30.300 43.350 59.080 73.360 82.870 87.460 89.810 91.200 92.010 92.360 92.580 92.760 93.020 93.340 93.370 93.520 2340 12.933 0.0000 100.00 0.0000 54.835 62.469 6.6869 1.7200 1.00000 1.2900 2.5600 3.8600 4.2600 4.3800 4.5700 5.0600 5.8200 7.4800 12.980 27.490 51.950 70.120 74.090 72.270 68.720 65.900 64.910 64.610 64.510 64.190 63.980 64.010 64.050 64.270 64.820 65.520 65.900 65.880 65.700 65.460 65.360 65.590 66.400 2341 10.490 9.0190 100.00 0.0000 53.502 56.688 6.2628 1.6800 0.94000 1.3300 2.5500 3.8500 4.2900 4.3700 4.5300 4.9800 5.6300 7.1400 12.150 25.000 45.310 58.910 61.470 60.470 58.560 56.980 57.000 58.820 62.230 65.150 67.080 68.230 68.670 69.090 69.690 70.410 70.770 70.750 70.600 70.450 70.370 70.520 71.330 2342 0.0000 0.0000 79.582 0.0000 75.979 80.643 12.407 2.3000 1.3100 1.6300 4.3400 8.9900 11.010 11.440 11.670 12.180 12.920 14.610 20.190 34.690 58.780 77.370 83.740 85.340 85.420 86.030 87.720 89.100 90.110 90.600 91.030 91.430 91.630 92.040 92.500 92.870 93.010 93.120 93.230 93.480 93.860 94.050 94.420 2343 0.0000 0.0000 100.00 0.0000 75.483 80.141 6.9509 2.0300 1.2300 1.4100 2.6400 3.9200 4.3700 4.4600 4.6300 5.1300 5.9000 7.5800 13.180 28.150 54.400 76.090 83.890 85.710 85.610 86.200 88.090 89.690 90.790 91.250 91.640 92.000 92.150 92.510 92.940 93.260 93.320 93.400 93.480 93.710 93.970 94.170 94.400 2344 0.0000 0.0000 100.00 8.0618 60.233 64.142 6.2103 1.8500 1.1000 1.3000 2.5000 3.6700 4.0400 4.1400 4.3100 4.8000 5.5000 7.0700 12.100 24.990 45.810 61.500 66.850 68.190 68.280 68.790 70.170 71.320 72.170 72.590 72.960 73.310 73.520 73.870 74.270 74.620 74.740 74.850 75.020 75.240 75.550 75.710 76.050 2345 0.0000 7.6624 100.00 0.0000 68.830 69.091 6.4345 2.0700 1.1200 1.3400 2.5900 3.9100 4.2900 4.3900 4.5100 4.9800 5.6600 7.2200 12.380 25.730 47.480 63.390 68.080 69.110 69.230 69.720 71.600 75.230 80.730 85.610 89.080 91.070 91.910 92.550 93.110 93.480 93.590 93.670 93.780 94.010 94.320 94.510 94.770 2346 0.0000 15.416 100.00 0.0000 61.719 58.498 5.9465 1.9200 1.2000 1.3100 2.6000 3.8600 4.2400 4.3200 4.4400 4.8700 5.4900 6.9200 11.550 23.050 40.240 51.250 53.860 54.430 54.720 55.200 57.020 61.580 69.710 77.940 84.280 88.050 89.780 90.840 91.650 92.230 92.470 92.660 92.820 93.140 93.490 93.730 94.010 2347 00 00 00 05 73.9 76.4 63.4 3.4 1.93 2.61 14.56 48.71 75.42 82.17 82.02 80.67 79.29 78.07 77.13 76.55 76.23 76.19 76.02 76.11 76.24 76.25 76.62 76.73 76.96 77.11 77.29 77.48 77.56 77.8 78.11 78.36 78.45 78.49 78.56 78.73 78.96 79 79.19 2348 00 00 00 10 65.1 67.3 55.8 3.04 1.75 2.5 13.52 44.07 66.68 72.03 71.8 70.6 69.36 68.27 67.49 66.98 66.71 66.69 66.54 66.63 66.74 66.76 67.08 67.17 67.37 67.51 67.66 67.86 67.92 68.14 68.44 68.64 68.76 68.8 68.88 69.05 69.28 69.36 69.48 2349 00 00 00 15 57.1 59.0 49.1 2.52 1.62 2.3 12.44 39.64 58.92 63.19 62.93 61.81 60.75 59.8 59.1 58.64 58.44 58.41 58.33 58.37 58.48 58.47 58.76 58.83 59.01 59.14 59.3 59.47 59.52 59.73 59.98 60.22 60.3 60.36 60.46 60.58 60.81 60.8 61.01 2350 00 00 00 20 50.2 51.8 43.2 2.41 1.42 2.18 11.45 35.83 52.22 55.77 55.43 54.45 53.46 52.65 52.03 51.64 51.45 51.43 51.33 51.39 51.49 51.49 51.77 51.83 52.01 52.12 52.27 52.39 52.47 52.66 52.87 53.08 53.17 53.25 53.32 53.43 53.68 53.64 53.83 2351 00 00 00 25 43.9 45.2 37.7 1.99 1.28 2.03 10.48 32.06 45.91 48.74 48.4 47.53 46.65 45.93 45.39 45.05 44.89 44.9 44.81 44.87 44.95 44.97 45.17 45.25 45.39 45.48 45.6 45.74 45.82 45.98 46.21 46.39 46.47 46.53 46.61 46.7 46.89 46.93 47.12 2352 00 00 00 30 38.4 39.6 33.1 1.96 1.19 1.89 9.63 28.68 40.42 42.74 42.38 41.6 40.84 40.21 39.74 39.43 39.3 39.29 39.23 39.3 39.38 39.36 39.57 39.63 39.75 39.83 39.95 40.06 40.14 40.29 40.49 40.66 40.76 40.81 40.87 41 41.13 41.17 41.36 2353 00 00 00 35 33.9 35.0 29.3 1.63 1.16 1.77 8.84 25.76 35.8 37.72 37.35 36.66 35.97 35.4 34.98 34.73 34.6 34.61 34.54 34.59 34.66 34.67 34.84 34.88 34.99 35.08 35.18 35.3 35.36 35.49 35.67 35.82 35.9 35.96 36.01 36.13 36.29 36.32 36.5 2354 00 00 00 40 29.6 30.5 25.6 1.44 0.98 1.71 8.08 22.93 31.48 33.01 32.7 32.04 31.44 30.95 30.57 30.35 30.26 30.24 30.19 30.24 30.3 30.31 30.47 30.51 30.61 30.68 30.79 30.89 30.95 31.07 31.23 31.38 31.45 31.5 31.58 31.66 31.81 31.84 32.01 2355 00 00 00 50 22.3 23.0 19.3 1.16 0.75 1.5 6.58 17.84 23.85 24.88 24.59 24.07 23.61 23.22 22.96 22.78 22.71 22.71 22.67 22.72 22.77 22.79 22.89 22.93 23.02 23.08 23.17 23.25 23.31 23.42 23.55 23.67 23.74 23.79 23.84 23.93 24.04 24.1 24.19 2356 00 00 00 60 15.9 16.3 13.8 0.83 0.68 1.34 5.27 13.27 17.26 17.88 17.6 17.19 16.82 16.54 16.32 16.2 16.15 16.16 16.14 16.18 16.21 16.23 16.32 16.35 16.44 16.49 16.56 16.63 16.68 16.77 16.88 17 17.05 17.09 17.15 17.22 17.28 17.36 17.47 2357 00 00 00 70 10.4 10.6 9.0 0.6 0.54 1.24 3.98 9.07 11.42 11.69 11.49 11.14 10.88 10.65 10.5 10.42 10.37 10.38 10.37 10.4 10.44 10.45 10.52 10.55 10.6 10.65 10.71 10.77 10.83 10.89 10.99 11.07 11.13 11.17 11.21 11.26 11.33 11.41 11.52 2358 00 00 00 75 8.3 8.4 7.3 0.53 0.51 1.14 3.52 7.52 9.26 9.51 9.26 8.95 8.7 8.5 8.35 8.28 8.25 8.25 8.25 8.27 8.31 8.32 8.39 8.4 8.46 8.49 8.54 8.59 8.64 8.7 8.77 8.87 8.9 8.95 8.98 9.05 9.11 9.16 9.29 2359 00 00 00 80 6.8 6.9 6.0 0.58 0.53 1.11 3.16 6.38 7.77 7.89 7.69 7.41 7.17 6.96 6.85 6.77 6.75 6.75 6.75 6.75 6.8 6.81 6.85 6.88 6.93 6.96 7.02 7.06 7.1 7.17 7.24 7.3 7.35 7.39 7.44 7.48 7.54 7.58 7.66 2360 00 00 00 90 3.8 3.8 3.5 0.48 0.47 1.07 2.38 4.12 4.72 4.74 4.51 4.27 4.07 3.91 3.8 3.72 3.69 3.68 3.69 3.7 3.73 3.74 3.77 3.8 3.83 3.86 3.89 3.94 3.98 4.02 4.09 4.15 4.21 4.24 4.28 4.31 4.37 4.43 4.49 2361 00 00 00 100 1.8 1.7 1.8 0.44 0.39 0.9 1.85 2.53 2.64 2.56 2.35 2.13 1.94 1.78 1.68 1.62 1.59 1.57 1.57 1.58 1.6 1.6 1.63 1.65 1.67 1.71 1.73 1.76 1.8 1.84 1.89 1.95 1.98 2.01 2.06 2.07 2.13 2.19 2.23 2362 05 03 03 00 73.0 75.6 63.7 3.43 1.96 2.69 14.7 48.89 75.53 82.46 82.5 81.07 79.46 78.18 77.84 78.55 79.39 78.98 77.51 76.15 74.8 73.34 72.92 73.5 75.19 76.53 77.41 77.95 78.17 78.46 78.95 79.52 79.77 79.78 79.71 79.6 79.68 79.69 80.32 2363 00 00 00 10 65.1 67.3 55.8 3.06 1.8 2.48 13.52 43.99 66.48 71.83 71.58 70.37 69.13 68.05 67.26 66.75 66.49 66.46 66.32 66.42 66.52 66.53 66.85 66.92 67.13 67.27 67.43 67.6 67.67 67.88 68.18 68.39 68.45 68.54 68.62 68.78 69.03 69.03 69.26 2364 15 10 10 00 53.5 55.3 47.4 2.57 1.58 2.32 12.34 38.73 56.79 61.18 61.06 59.71 58.15 57.07 57.32 59.22 61.24 60.61 58.08 55.53 53.02 50.66 49.69 50.62 53.41 55.95 57.63 58.57 58.97 59.33 59.9 60.67 61.07 61.05 60.85 60.55 60.39 60.49 61.34 2365 20 14 14 00 45.9 47.2 40.4 2.25 1.45 2.13 11.22 34.02 48.81 52.23 52.04 50.76 49.27 48.31 48.79 51.05 53.49 52.91 50.21 47.49 44.85 42.34 41.28 42.31 45.36 48.18 50.09 51.18 51.61 51.99 52.6 53.41 53.85 53.82 53.56 53.24 53.04 53.11 54.02 2366 25 17 17 00 40.4 41.8 36.7 1.89 1.25 2.06 10.44 31.21 44.29 47.35 47.15 45.98 44.57 43.67 44.15 46.46 48.88 48.18 45.3 42.37 39.5 36.83 35.63 36.54 39.46 42.17 43.97 44.99 45.42 45.77 46.38 47.2 47.67 47.62 47.37 46.95 46.69 46.82 47.8 2367 30 21 21 00 35.1 36.2 31.8 1.88 1.19 1.84 9.54 27.69 38.66 41.15 40.88 39.76 38.42 37.6 38.21 40.67 43.27 42.59 39.71 36.77 33.92 31.24 30.02 30.98 33.98 36.78 38.62 39.65 40.11 40.44 41.04 41.9 42.4 42.33 42.05 41.6 41.29 41.4 42.4 2368 35 25 25 00 30.6 31.6 27.8 1.67 1.1 1.78 8.7 24.63 33.98 36.05 35.8 34.72 33.46 32.72 33.42 35.96 38.62 37.97 35.09 32.2 29.39 26.75 25.53 26.47 29.47 32.23 34.02 35.04 35.48 35.79 36.38 37.26 37.76 37.69 37.37 36.91 36.57 36.72 37.76 2369 40 30 30 00 26.2 27.0 23.8 1.38 1.04 1.66 7.84 21.49 29.16 30.82 30.49 29.53 28.33 27.68 28.43 31.04 33.77 33.14 30.34 27.53 24.82 22.26 21.07 22.03 24.96 27.65 29.38 30.35 30.73 31.05 31.64 32.51 33.03 32.93 32.61 32.12 31.75 31.91 32.96 2370 50 40 40 00 19.4 20.0 17.6 1.19 0.76 1.48 6.39 16.48 21.86 22.83 22.5 21.64 20.64 20.11 20.94 23.52 26.13 25.49 22.89 20.41 18 15.69 14.62 15.56 18.32 20.8 22.33 23.17 23.52 23.77 24.35 25.25 25.76 25.65 25.3 24.78 24.39 24.55 25.58 2371 60 50 50 00 14.0 14.3 12.7 1 0.71 1.36 5.25 12.48 16.03 16.65 16.23 15.51 14.66 14.23 15.06 17.4 19.69 18.98 16.62 14.5 12.52 10.55 9.64 10.52 12.97 15.06 16.27 16.93 17.21 17.44 17.96 18.83 19.37 19.23 18.86 18.32 17.9 18.04 19.14 2372 70 60 60 00 9.4 9.7 9.1 0.74 0.58 1.25 4.33 9.34 11.68 11.96 11.62 10.96 10.25 9.9 10.62 12.63 14.46 13.64 11.52 9.81 8.23 6.7 5.97 6.71 8.67 10.24 11.04 11.47 11.65 11.81 12.28 13.11 13.61 13.47 13.13 12.56 12.17 12.33 13.31 2373 75 65 65 00 7.9 8.0 7.7 0.66 0.67 1.31 3.97 8.13 9.99 10.21 9.78 9.22 8.54 8.22 8.88 10.66 12.24 11.36 9.41 7.92 6.63 5.31 4.71 5.42 7.19 8.56 9.22 9.57 9.73 9.85 10.32 11.1 11.6 11.46 11.09 10.58 10.16 10.34 11.31 2374 80 72 72 00 6.2 6.2 5.9 0.43 0.54 1.2 3.48 6.55 7.8 7.85 7.45 6.93 6.36 6.07 6.65 8.19 9.48 8.61 6.91 5.75 4.82 3.86 3.45 4.13 5.75 6.96 7.52 7.82 7.96 8.07 8.5 9.27 9.74 9.6 9.26 8.74 8.38 8.59 9.5 2375 90 82 82 00 4.3 4.4 4.6 0.58 0.47 1.2 3.15 5.32 6.1 6.03 5.69 5.22 4.77 4.52 5.02 6.26 7.21 6.29 4.78 3.9 3.26 2.58 2.29 2.82 3.93 4.64 4.88 5 5.06 5.14 5.5 6.22 6.69 6.55 6.22 5.69 5.36 5.58 6.43 2376 100 93 93 00 2.6 2.5 3.1 0.38 0.49 1.14 2.71 4.03 4.4 4.29 3.92 3.57 3.23 3.05 3.4 4.25 4.74 3.75 2.48 1.94 1.73 1.46 1.4 1.83 2.58 2.94 2.95 2.94 2.95 2.98 3.32 3.99 4.42 4.28 3.94 3.47 3.13 3.35 4.21 END_DATA nip2-8.7.0/share/nip2/data/rachel.con0000644000175000017500000000011413224651032014133 000000000000005 5 21 0 1 -4 -4 -4 1 -4 6 8 6 -4 -4 8 9 8 -4 -4 6 8 6 -4 1 -4 -4 -4 1 nip2-8.7.0/share/nip2/data/stock-tool-select-22.png0000644000175000017500000000062713224651032016507 00000000000000‰PNG  IHDRÄ´l;bKGDÿÿÿ ½§“ pHYs  ÒÝ~ütIMEÓ 7;àîÇ$IDATxœÕ•Ñj„0Eº´P(äaûEBŸüÎøñ‹Z°»Tv]tú`Ò&¶Y¥½™pgnFøoÊfû®|[#F`†(Däº9Ã,x: ÀMÓleìfçnS–eÍã¶À xϽxPSùqY€g ôÎ<ó3þ¦º®c¡x.± y,औ¢ª*”Rþq·Í`WïYÝ ?oCМÕZk­iÛ­u8Úxdš§{¦)­ß ¨sË觸¦TŠ|·ôökú3¡oûàZf·IEND®B`‚nip2-8.7.0/share/nip2/data/examples/0000755000175000017500000000000013224651032014076 500000000000000nip2-8.7.0/share/nip2/data/examples/businesscard/0000755000175000017500000000000013224651032016563 500000000000000nip2-8.7.0/share/nip2/data/examples/businesscard/slanted_oval_vase2.jpg0000644000175000017500000005646313224651032022776 00000000000000ÿØÿà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‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?È'Ö”px¤ëJ PÅ=3GçGQJ:Ò2iFzç4ŠçŠ,O·çJ§Ö“¹Å=0ÆsIžô¼÷þtœž”ñNíõ£9<ô£¿µcŽ´à8ëHzô¥ëÖ€ m8¤`Iâ”gÓ­Ò§“GjZZ`.0h#“Í'_Ζ€°RãŠQA 9 1Å-&~j1F)qHr!¥Î¹Í“øÐ?Ð@ÅsKÜÒõô„Z"“ésÖ€qHxõ¥È¤ÝÆ(xçšEäQ׌Rô ½'ZZC@ ÁÁÍЦ’3@ëKøñIŸj;ñ@ zS@¥Ï¨ýi>´ 1KÁ™¥àÄÆ&9ç¥)jN½¿Z§Jâ—q4ŠÉƒ¥(ä})9Î=(:\Z=èïÐPÆ;¾”½Gµ&OÒŽ´¬ `3IÅë@Ӹà AПJSõíHG8¤7ZLsš8í@¢ÀH ƒKŽOáIŸçLC¿ Nç4R‘Í\Òíü)æ—½Ž9?JSýi0Aæ—Ò€ SE>´€ó@ÎîzRƒÏcœR…ü(AÏÖ—ñ4ò}(ϸ¤#Š àóKÆ):Š_­4uü){;Ñ@ Ï¥…-!$}(3Å'ZpéIs@C‘H =iǵ's@hÍûPZAÅ tæ—ëIŽzÐü'´{ÒŒv ž(½OÖŠ=¨'&€ d`Ri;Òš`7·4Ràɤ3FIŠ] Ò`ŒÒ EZ1L½.H”„`ƒJ9ëHå©p}(èhÏZCH:ûS¸"“o=x .)1‘AQŽ” i9£ÞÖ›@uëK´g9‡­/#ŠG^ihè´†&ßCKF==(Ï8¦4 Ï9Í)E4œÐGJ\gÖ—ÒxïBœKÓŠ\CùPׯJ3ÏOÊ“£Š;ŠSך®)(°1HãŠiô§”‡“šbPhäPh ‰ŽhÇ4ìp !ë@Ä¥ ÑÆ)ÑÖ”ÑJyÀJ"—œQÚ€™Í/Ò“š ŒÐE (ŒzÒJLRc"Š^”ŸJMÙÆ)sÍQš1î):sGó£”ãoQI@…f’ŒsÅ­%"–ŒPtíKÖ”t¤Å ”uúS© H{R‘Ó”ô Cp2hŠSý) b‘ÞƒÖŒfŒP´¾ô”cš%w¥ ¤ëNÀ&ƒŽÔÀoSAÎ)qGj@4Rœâ—Rw¦J1ƒKŠ!£RúÒ´Ä%ôêNœÐQŽip:ÒP¥ÏjLãÐÀÐON(ïÆis‘@àñG=è£?@8¥ãõ£ü)(qÜ B>”½iè4§Ò“ůJ ŒÒã1È õ§8é0)€c$RšpâŒòi @1ÖŠZ:u£Q Œõ£ô¥=¸¢¨ÅïÚ”Òfx£µ8õõ¥ t4­È¥#4‡¦h dQ€ êiqš}é¥ïGjh§¯JíŽ)r)€‡Ú“ìòi?L¥4ƒØõõ§QŽ v¸£€)Å)æŒ c”™Í-&9¡‰zÐzÒž;Òg?JÃbb—ÚŠ^ÿZ7 ¤äÓ±ùR{Òè) ÏcNÇ4qŠ`7ÒàQŒŠQ×Ú€ÒiÔt€AÖ’—½QÞ—µ'¸¦QŽii1ÅŽiÅ.9£§jyíJ:ÐGNMŠÏ— ÷¤4à=i˜æŒsJr:SN}(zŠ1ÚŠ(£ùÒ“Ö“<æ…/¯ÓO=)ÝXÓ$;Ž)ؤÍ(ÔRw¦O\Ñõ¥íIƒHŽ”G8¢•€(ê;PG4v ·LÒÒvô£š`.3Iõ¥š;ôë@ E.3IŠLzÒö¢ŒsH=(#¥.Ü÷ S1Ï?¥â‚( ýÜQŽiiE >´½È4¿…)Æ~´†&~ZMÔ¤â‚;âyö¤¥íF)p)ÒŒÒcš'LfŠP3×41ʼnҗèhçÖ—äàÐAô c4¼S° íHÌrÌ{šw°ï\v­-ÏÛåYdl)àv¨›qؤ®u hƒ›…$v4¢þ]ÀJTô!8®*)Þ ¯Èö©¤Õ®Ê”°°8¬}¤Êä;¼…ÉÔ¼@«´ru¸=ÚAŠó––F$³OrsIæ‘Ò§ÚÔè‡ÈzsÁ &ïí &Ïð‰9ª²I|³«öXó帕OÊäUŸ·O™ Ùæ«ÚÔì‡aý§hP¿QSG<3ó ¨ÿC\,ÓÉ#d¶ šÞGVISØŽ´*“]Ù¾8æ—8³;ZÄdûåFjJè½Ìì!4€Í8çŽhùÕ@ ;)ÁÉé@#õ¥`ͯãKF)ÀpE&¸E‚ÃHâƒÀSŽi;PzÑj^†– Á£¥-&G=h„=(ïÅ‘Aö¦„&zñK‘šNhÆ)ØŽhéÒ”)1Í š^)z­% ~4¾´˜æ†󎔘斖„1:ô¢Ö”ñ@„üi1Kži1@'µéyϵë@ ŠJqàÒc=é ŒÑ··J]ØàsG8÷Í!;ÑÚ—¨äPG bu§°â” €°£ƒÞ”äw cšhúPq×éÀu4Ÿã@?*^)Ç¥:ªÀ´:ÑÞ€9â\P=©Gb˜3\׉mñ,sâ­t¸ªÅ·ÚtÙ@ûÈ7 ™«¢àõ8~M!àWu ùvñF:*úVô–·2©¢j_¦(ìx¤ä ÜÄ'µ4zq¤Çµ0E.3IÈ4£Ž´‡Š0ipNi½ø©ãñ  špõ”À?‹Ú‚iO™¦!§⎜ûÒ‘Í.8  {ýiCKùÒ÷éÅŒb”‘J=èéÒ€ 8tÇëEÇjJ2sAç4¹ Aœâ”ÅÆy§dtï@ 8Ç`ҌРê(˜ãŠ^žôpr;Òã1ùPvŒgœÐ£ iNccOíh­4 Å(b”úQRÀì9  }(Æ;ÒƒïHhn8”ìwÅ;8©b­&zqN=h#"ÄÞ“'ÒzNàS@7nÐ@ÿw­!Dü)çOŒ@|¤ÿ:\ôgZB &;‹íIŠNÞÔI¦ã>Ôì ñK¥0Ü@9éKŽx4ëKŒv sNíõ¢”ÓÒ‰œÒŒÔ/^˜§ï@A£µ('“Þ“>ôƒšIdDó1á4ð1Þ±|Mw䨬üÒž~•3|ªãZœ¥Ä­ss,­Õ›5bͤÀêj¦0k_JMÌr¹æ±‚Ô¹hŽ÷ÂÖêª7†8ëŠZ鱘˜É¤Ç•Î[!y1Ž zOƒtðò,’tQéÒª’Öì&ô;$‚Km0(ÚËŒ·Šó?Èâ}§ä?wÞ½CW¸h¬Œ`tä~ ”o‘S¦NÓíž(û7!nr“ý㞪ý:f§—q?6O©¨†°7zûT¿­GÔ½;Ó×§^ 9¸ü¨ òƒJ9æš3ÒÉSƒW-'6÷qL¿ÂÃ5I3RòGÒ3ÑU–@®œ©u¬Ý äÜéˆüñü‡éÚ´Àç½uÅÝ\ŇšLzRðI)j„ÈéÅ!Í/%ixÁ 8v¥Çsõ¤#œf€úf“8à šR}M {Ñ`“Î(äôéA94¿•)Æ)„zSºÐ'Ù¤Î)ÁyéIŽN8 >´.ÜñšqP"2E0ç?Jò;ÑNâ#ÎiyÅ.9¥#Š`È(÷¸´7mXŽ_Å›§KU<'ÞõÎñž†§º˜Ü]<¤’Xç4ǹ±ŽI®M[5KCGJÁÁ?7Jö Y46Ê[£sÏ­q~ÓÒI”(éþ õ›+dŠÝ\ É/·µtKÜ…ŒÞ¬ÃñÊ¥”‘/,ÝêkȵfV$g'Ïã^µâ‘æªw ¿çé^I¬®Þ˜8È&§ìÜç$%Xç§­BÝ? š`ËÓ<ÔcŒâ°6B㌃NQøÓ=êHÉÐÀ¿JLsš”-F:f¯¦N{ÔXÚxç5"ôԽữ*ñ còÈ¿­u#9ç¥p6“.£”uV»ôa"‰£("·¢ô±”Ö 1¸ä}(==©ÛzEGjÔþ„ŽiäRwÀ¤€hÁZCŒu§ã­!@7¸Í*ŒQŠ\gë@ ÇOZP¾´ážzPs@ì7ŒqFíN*iphÿ AüéÜÓ¶Šf9íFqÏ¥;¦i6Ð+ <ŒÒÒƒŽœRm¨ V´óÈÅ!Å?cÖ€°Ì L*¤Ï=i @>j;âš“èc0ÔÜpæ—ð©žÔ`R‘žqKŒuî!¸â—ÒšhéÞ‹€ÓÆ) Û¿:p¥Ï=) \ŽÔ¥È /=)qÖ™#Bò8üéÛxÅ*ç¯ó§gŠ,PÀ£µóNèxPÊh刊AÁúÔ€t£æ€ŒšN£ÞœsGsï@ÀexëAàŽ8§¸ZZ„ÆFàW;â‹ï.$´FäÏý+¢,¨ 1¨É'Ò¼ëR»k»ù&=¸úv¬ê½,TV¥aÉ•©¦[ù’ެÈÔ³…Öø~Ô=ÄqrrsQI^EMÙ\ïü)¦‹ÍÛƒÇQøâ»e+ås÷G\㙦Z´qªï.2=MiÜ ‘Ú6ž(ªï#8ís•ñ Ñ$ÆìÀ9þ•äú´‹’Ov'è^!¹\2Ä>\ò}kÎ5L±%SéZKHuf ƒ““PqÉÇz•òXŒ»†x®cq«óTñ®O5ñÒ§‡–àã=ieÚŸ" ¹T± ݹ#3Û©ö£4ùGÍLïV"PJíôKŸ´é‰žZ3´×§"º_ O‰å€nÜUSv‘3Z Ð3ÏÓºZ^s]&hg>Ôœv§´héƒÆ(éô§‘Å&8"€; ŒRŒzRŒŽÔÕ"—=x££ \}i Á×¥ÏáFÜPG)ŒaRý){R÷Â3FÞ:ÓÊü¼i1ž´Ãõ£#úSñÚ˜Xh¸ È9î0sMÒžâŽNqÅ"÷âŽ94‚ÅÇÍÁ£Ç f“£°GÎ8Žzfuã„asH;fžOZm E v(?OZaüMçëJG8(ÀB%)pqš\ý)çAÅa£'¶(èzñKŽ}¨Çzw §ùzÒqŒÓÀÇ4ÂÃqß8£¸ëøRà~i n8cŠq8 9æ€=é^”üdsFÞ@01¼Ewöm0¢œ<­´};×N[>µ·âkÃu©˜•¾H¾Uú÷¬`<Šæ›».*ȵkùõæ»ß Á‰Ñˆ9?LWc‘Ç­zWƒâ>vvq×§­.äTìwv,í’ b£9éÒ¤»v´mÇÎx©í!H"ؤ–ðOW™Ñ䪧áY¯zA²8 håÜÿU‚¸=NS´ôÉýk­Ö®0ää‘Ú¸›çSÏbµªô° µ2Xœ~´Â1œóRI÷ˆZˆsŠç7FGoJµóÖª¨íZª3Í&ø“ztˆvž*XTš’D !sáHcÅD­Ý»#¯z©Ó&˜Ç¡àVŽ‘9¶Ô¡~Û°ÎC‘V¶üèØOcÑp;š^Ýóš†Ö_>Ê 3ÉAšŸÖŸS #½lö§àcéIƒNà& !ãž½©Ãž¤< &Àh w8äÒëKŒŽ1ŠCתØÓoÌaþÅpAèDDІ&T–6` †l×j—2*ö‰¶ãŒHqùVs›[]ÎHi—ÏÂØ\“ÿ\J4=Q€ÆŸ?ýó]lWR‚ÅgolœÑ%ÝÁdu±ü«?m.ˆvG$t W¶Ÿ>ݦ6©ŽºuÏìWZ.î;ÜÏi[ühÒ $ÏpàúÈOõ¥í¥Õ•öN¤Ã‹ ûâ”hÚ™ñã0àWeö©]~Q ?ïb˜«/-$²þ.MÞ]ƒ”á%ŠHdd‘ :ðTõ¨Êœð:Ö¶¼èú‘TÉ*cïYd}k¡;«²ݼãµ#/Ú”zÒã³L VFƒ”|Üf´¬×8Ï­gÇ×Þ´­qǽ 5"Ú¥aòâ„GJstÔÈ»^~•@õ9­;µ99ïÞ³[©ô¡ ÅN‡5XœTÑœŠLç@—ÍÒQOTb+Pp:W=áYr·ô<0ÿ?t@qï]0wŠ2kQ;ô¥8ô¥íš0EP ޤš6㎴¸=ŵ4 ^Ø4£8É `õíJÀ&ÐG©®‡M”Ï`?µ!ôÎ F±’‡íN“Ž@ç¥r½Z;ሠôÍF%èÁî)ò)'Õu¶zý*-$_…ÉëÏaRM0ŠžKTVÄçÒ«ëŽbÓ˜F nõpÕ‰œ¼®ÒÊÒ±Ë1ɦJçÖœAÎ(àsÒ»R±™sIÇ&žN3‘ÖšF9ö§`ŒqA´¿´¬84áÆ(┌qE€iÁ4uÎ)qúÑìcÖƒÛŽ´¸ãœR ž´XCq¥ì{ÐZr1Ï$PzÓ°sÒœ{S^Gv ⎸¤9вP˜ÁéNÛÍ;¦(9ü)…Ã<âŽôy?¥;¦(ëíHF{Òó͆'u¤ã¶2iØ¤Ú 4!sÖ¸^}«U“¢|£ð®êêamg4ǪOã^aq!’vr~ñÍcUô.ŒŽÕf5VP2 85nÛ³Ï5’-&”2£#ÿ¯^‰¡F¦M§€¾¼ óý7 ªO×[§Ì¨ª Œá®È¯tç“Ôè/¤ò¡À”FGZáu‹…Ëí}Ùäúæ¶5+Íèõ8>¦¸ýFm¤÷â“÷b³"úMÛÉÉÉâ²™»Žµjä’ÌyëÅSsI®FÍѵ’ãæ•õ,ˆýjD9â£#&ž™æ€: ÊSTUãçŸÊ»!þuÁh²yz»¶z/?κ(íc9î0Þ´ž”ý£Ƹ<µl‘ƒšR2){Ò•Éô§`øÒãÖ—hÅ!©ëE€aVtÙ<«øž­´ýy©#lI¨aüè{Ù¢tÁ§:8Ç¥F“+$0©P£Œöô®92‘ „}ÑQ¤ O *Þ0qŠš5UY²“)lËÀã=+Äwä·ˆÔƒšq^rhǵ Ò“àS½qI´“Íaxªçìúg– ƒô®‡zê|es›Ô€rF~¦¹a’ØÏ5Í7y3H-A8$ô5zßï | ¤£±5rÛïsÇ­J)6Ÿ€T7JÚI„iYGp;×?i(qÚ®™ÉLnü+®Ðæ{“ÝN6ðMs×ò+ ƒÅ_¹›ƒµ¹ïXw3’ÄÛ­eRwи-nSžMÙÇnõX°Á{Ï9÷ÅEŒž1ëXŒ8¥9¶þÒ>niAä)!“D¸pkVÐqê+2.Zµ-98˜™©?äÓØ|½Fj4˜ ŽœP€”ã4¡y>”â3@ëœÕ’gR‘€I¥œzt¤6¨õæ” Q¸žsNèh˜µ4à0N)HǦhƒ©ô FGzSÐzŠŠò_&Æyˆû¨OéEÀó}zãí:œòu«/ŽÕ5Ö“Pö®[›-ªH=ªí¯O¶*àûUˆ_nzCfý±œwõ9$!5— ÃÈ Óšì÷µSÐÉÇRK‡e=¶â²e$äžô©§ŸœU9ˆž+7+²Ò±  Ó ü9ØdÓŽ˜ïRPcæÐ94ŠIÆ:S†ë‘@Ëýài[ðA¬ØŽVœ§j–Œg奧ô¨P`/5/¦{f¨Ì«v_¥dK×µ®¿“0ÃqÞ¥–ˆjÇ¢—<ô¦ˆH}kÑt“æi6ÄáÇäkÍâû½@9ÑaÁoçZÑø™œö/àãÒŒ}ªLc¤q[Ü„D3ŽzRòN)ÅphÆ8ÀÍzP:Ó±Ï4mÁâ˜çŽjþ‘ýB3»–5H þµ ÀwK6=TMû oÄ ÀZ·4X@xÍGl„°ô«w,?q²Œ·f¤Œ´’7ÍŒR'ÓŠ’Š×ôÍckq–·Ž\ã[wɪwÑù¶¨ê@õªƒ´®'±Ê° ?f:ÿ:˜ò:Tg¨Åw\§¯ŠLñô©1Û¥4Ž´\ù4`皌.H¦ Œç­)\ p^)IÁÇ bŽ´óÖ›íÇ4˜ ÅçŠyëH}© n=i1R½1IÉíŠ8 –œx£øi 1OÀÇjn=©ÀuÅQ˜mÈëN¯4Ðy4ê,;†ÐhÆF(Í8dŠãæŒddӱ׎iqÆ;Ð1¸ö¬¯Ê"Ñ%õr¶íŒñ\ÏŒ¥ÙaoêÌÇò¦ Üà$9v'®iŸ­+$úÒ~5Ìl8›$}J§‘Æ*5`àïRFü¨¸ãir‹•rzR±ÀàõéP‡ m Ôc4›Ž9=(¹#]Žr*ª["¦vùy5c ö¤PÆÇ ¦žp3JÙÇZ8LjO8åàð)½1ƒN©ÍY‡–?JÑ‹†³¢5hCØv5 hFxëÖ¤-ÁôéP£cÓØ|¤tæ‚:•çåN fK‚Z´n3·Ú³f<õö¡nPÅ"”u rH¥ÇOZ–/¾+Ñ|9“¢ÇìíÍyÔ_xôo Ÿø“×ç?ÈVÔ¾"'±©ƒÁóKŒÔŠëÅ.еt܈Œ}h¥Ú=8íLÚsÀ¤;ˆ8ëÍ.iÛxúQŒz4`sÍuzTE”cž[ë\õ¤{¨ãê3“ô®ºÚ€c ¬*»Y ín'§=Î<¼i-Ól}9Å%ÑùEsõ/¡žã™¦§qOsšŒ6qHdW•Ï¡¨îàô«r€PÕ^A'­sp˜n$ñô¨íŠÚÖ Ý²U㱬‚yãÓÛMÞ&oB"?:B8©1Ï4~5hñÔv¤U§ži À=±M#švÜQêh§Ÿ­y§(àçó¥#,`Ö‚0iøÈÅF@Ï4 ©1È£µ!‘ãhëM#š{çšNAçðªBŽy4íªGZ8¥Ú@ö>•Dè)Ài qK‚yÈ v†Ni@—ÓÒ•h #€;Ó»úÓ‚‚9¢à0/^kŒñ»þúþìgõ®Ü+Ïük&uWLðˆ£ôÍgQû¥Ãs‘'š8=:Ð}h÷Í`j)ç’)êBž3Ó£$úÓ·ƒŠ@J8éÍ5€9ïI»€Aæšç?ŸZFbÁG¥F[åéN'Ž:ÔlI9í@çŒÐ¤4cƒÍZrŒò;Ó2Iõ§ÇÁúÐ2ÔG?…^€ãóÅP‹å>Õn"F=êX מiå²?Z¬„çš‘Ÿ#Ò¬C3¢ÿ3µ3?S$îsÈ©XóQ÷&ˆFF1ЬÉóu«]j@Sš@U¸f…õ"¹¦B¬TðGÖ ÍaêpywÔpãšÞŒµ±2FcqLç¯j†¦•ãÚº‘`2i6Z—`ÓJóƒÍ„ {úSq“ŒSÊç`òp}©\cJãŠÅ?ÒƒŒä @GŠ]¼dSˆã ¦ç@ Šnß|Ô±MÀã"€M#šŽxâŽAªãÎ)A<)vþtî;šd çÿ×G¸âœpiqJåqŒqJA ü¨ ‘Nêy`§Ï4wkZ_3¨\ÇïAO^µ \`‘HsœÖìÈa^¹ g ýiÀcñ4¤dd”€@;µ§Â&º Ã…þu]zúÖΙØA#œÖu‘KSV%ãÅY…9˜«©žµÌY!û†ªHI”â2HìE4ìîTr¤|Ý Œu«wˆn[ƒÈªÅF¡®è»£-ˆv§¥.ÜRê‿6DqíA=)øÁ=©qÆz@F'ŠB=)åHéMÁ†0ŒÿZB¸)ÇÒ¹ëÒ˜žÿZ'ÛÖ¤ã=)NqNÀ0ƒM ñƒR‘þÜ çÓ ’@úÐ8Ž˜¥ ûÓ gOjzŽ€ÐF\Ó†ô¤qŠp_~hä·_ÒŸ·ñÅ4®F)BŒvôâœGZ6Ÿ¥&ìQAlr+Èu¦ß}3zÈÇõ¯`EÚG~kÇ5C›—oö‰¬ª3Jff8ÏQ@ëÓô½é1ÇZÌÔ3ɨ ÏÖ‚pqÞ€œt¦gu<ŸAMû«ŸS@ É QÚŒàb›ž8€w˜úQÉçHi¿…(=ñŠjœŒÒƒLdèûp1V‘°jˆ“¦íãH ÉéNgªÊýGz~}NisŽ EÚœiÒ˜ Hâ£H©Cšbýê hX&dJöXL6pD‚5¥y^‡oçßÛÇÙäUüȯ]e‰8­¨­Ìª½FcÚŒlSöòhÛØ Ñ™ Îrj@¤QÎH¤Ç`?4±D$‘T ä×Al› VE„Y“waÒ·a\ Èæ¹ê½li®Lƒ$`ÕØÆ5Z%ùºqVÔ|¸¬††¹ÂÕ7#'5n^Ú©‘’G µ0qŠv9¤ÛƒœÔ‚½0i¬àÒ‚)x Ð2“ƒœZüÔé~Wö¦ƒ“î(Ÿ©A”Œã­e•È®†DŒ¾µ‰,{©ìkª„®¬Ì¦ˆ=‡Ö˜W5+ t4Ü+fMÈÎyõ¥ÇJvÑ»ì{w¤,9úR“‘ÅHF ÷ ¨ZC"ïIާ5.ÜŸJL`š`BÞ)üªV\z`\w«$nÐ)ëëO=i4!\ F8§‘Ó9¥Ç9!„.{þ4q÷iÛrrN¥;JCÇlÓ±žüÒã©Àp 7§^hî#SÇ$ö  sÞ¥€ ù†¯Ô¿ãáëÚ”r àf¼cSÿ^Ùã5•CJfYéIù©Ýù¤'šƒPöýir;S}¨=qMcÇ4âH8¤>´†Ež”t4ãÛò¦€zqG8Å8Àé)qÏ<Ð8$)>ñàSð0Ö¥5‚jEãŽ(l~”êŒ óR Líë@ÿ<ÐO¥&yë@Ï>”ØÎXb‰)`_ÞJì|mæëù\…ËÀW¦`œâ¸@>Õ,¸ÿWRGÿ^» +¢’´L'¸Á‘ÁÉ¥#c¯zv)æ­’'@iÀݑӥ<¨ÆGZM»¥T§&¡»!¤hØÆ=OZÓN•VÙÑ‘VÀéŒ×+wÔ²ÔŒö«{ñQB6¥L™H‚rBÕ7nsг9檱àã!!…¹¦òÔãÏ?Ö™Þ‘Dˆr2=)ÇžÔÑœ{ÓÈyæ€+ËÂæ ¯5fEÊâ«?´ _â$ŠÌ½R²îÇÚ´”äUî£ßõtß+¹2Õ$OÒ“h"¦ÚxÍ5”öë]¬ÆÄ[FF!w^µ!ÒF9©2çùÒã‘O=}éXgÚ¢w4€dT»3Æx…qÒšc"eÇA‘LÛÏZ›iè7A¦™$XÅ)\`úÓÂóHW ûQp±.?;R•¤ KzS$6ç·ãNÔ q‚x¥ÇqÚ“Ð9Å8.FNô§`žÙ4Ãó¤16c$P¥8¼Òƒ“Jà pÍxƪ \8ô8ýkÚÔe”f¼cXP/fûǟƲŸCJf3qM#ò©1Éæ“â¤Öã`àÒŠq^zÒúæ 'æÇ­4÷柎i„sš4½h=8¤ñMͺQV”:Aõ ŠUÉ€yàRô äzz¯š9 ëÅ8}8©N”Ð{SÏ l @'cH1KÁ&“#ò C$9=˜Ì£©ÅWf>•wNLʽði1ž¥à{mš\ó‘þ±ÕÑGÿe]>ÞN+;Ã0ˆ|;j1÷òçêOÿªµ6œd ëŠÐæ–âmÉÉ=i6óÖ¤Æ4࣮i1êIüi,Á’Fçæ9JK¶òíÈ_¼çhrÊ?ÝŒc•Gи—c$/$U˜›*5ÛŒqøÔ±*–Î9éX"™v>VžpZD\”9ÈÆ()ÎųÓ¨ ê*IU ×Ö£!y¤Á <Òw¥8#­7R0SŽ” {Ócáq¸š“9Å#q×?¥Ta×Ç­^j©1ËS_~”ŽÂ;Òõï‚)XNh•*•v¨NA Ž*õÌ|ƒUJòOoZ섯˜5fFzgã­?íAŠb# Œ“Œf½E;iÏZS‘Œu¤27SqÚ¦ úÒ*BPãŽy¦•Ç51ã4Üc­4À‰Tœœ FÕ54‚TsEÀ1ž)qÆ<r(ÅSd¨ÀëNçð§mÍ`ð8©dc½}iØÇ¥*©êG˜`dÒìÏ=)qŠQÇ4Xv€nSÓšñ]pbþqÿMùšö¤?0ȯ×ÔNäÒWþuœË¦aô4ÜŽyæœÃž¦ŠÌÑ šaÔ˜9šËƒ@Æ‚E3>Ø©O©ëQ7|zÐ16ñïHW4£=)F}(Ò1Œô`gSŽ” :tëKõëJ3šP1@éOþb“®)à õ¥p£š~ éÖš½)Iô ·#š0¥&xäR18éÅ#lšÖÒãÌ€ÖOÕxVÌÝê–‘c!åPxíßô§k±7dzõœf±·„û¸ÕJ›ÿõªFä’:IŒWMÌÚ1@t§P~Efb“RÂÆ|ù’øFDcŸ©­‹qµA´†0Žj&ã8©˜pj&ÆF2qKƒŽ¸¥Æ3š1òô n”¹9æ—ÐbOZrô旜ҴêQÍIÛ4À9©ëH÷§HØý( bšäãàAïQ99æ.\W¤ü=´ó5a)CoÄñ^qo“ì_-ÙÝÜžûc©ª‚÷‰›ÐìëÅ/j~Òm­î`GQUu'òí6AìãÞ¯íÍeßæ[ø¢b1“õ?þª‰= E‹vÆ==+QsÞª[Æ1Ïj´2è+–‰@©b%éÍUA´¨cŸÂ­Gœu¤6Y?w¥VŸš{9ÅU¤rNãLDLxÉü©£‚qÎiÄ‚´ß~‚¥i3íI¸s@ädR*ã¦^W§J=‡çS/AQH3øTÙ8ÅFÜúP&Sœž(çâŸ.íÜt4ΟրUi ÏCV9ÅE"àdõqvb{m SBŒc<ÔÛT­&=0k®æ6"ÛÎp)¥sS`ž¢¯>†š<6בOÛéÉ ¯=*FEÂ›Š—Šk zQq‘•÷¤#/éHFJB§Ò¤Ù×¥NhFOO—oniêqN Ï9¢ã‚qéNóNÛ­(^qÓݸÇ÷§Ú” œvðƒµ]Æk&l7ÓO^)Äô™çÛ'=)ëN>ÔÒ =¨ݽûRcŽ)IõŸ‡ƒ“Û Ú€i?^ÜS±è)¾”áHŽÔð0)™çÚלÒÇ隌œŽ´öÏ©¦çŠh1àÔ@jy#QæQõ¦kàkµk–Qã#xfúšöâ;ú×›|1±ÝyqtÃýL;WêÇü¯KÇqÑÍÝÛÅxéNè(DZªd™zË~ê±÷ŸqÇ ÿõÓ­ 1‘Pj,S ÉXÕTãÔòB*ì+òã¥DŠDËÁÍ?#h4ÏjvpzÔ xn”ðÜdPîÏ4ïJS'8¦ðyý3Mæ“ÜÒ§÷¦ôôÒIn:S°O_Τb{ÒéHÇn©Å “@QÍN•YXäÔàþ”7O¥!ïô¦‚OJ P")8ÍW>œU–Æ5YÁ ×·J #ÒŸJhÏ¥.:zÐg‰ñSç¨\sžâ§ 5k\tâ‚1Æ:Ó±“ê)H­I##àS$ÔÄeG®i»zŸZh¶ñŠi\Z—3MíŠ`EŽqF?:~i;ûšäQõéä :œb“ܧ~_•qÚŸŽE Ó×Üô¤QÎqíOQÆäP ÀǧžÙ¥Á u m÷®3â4y²Ó¤£È¿¢Ÿé]·LW)ñ Ð`aü3ÿ0j$Tw<ŠaÎ=ê»õªÍÈÃä­Tc–<Ô3d&8ëMn¸4§¶h<ž*JG¥4ðsO'Û¾)šö¦õ4æÇQMã4À)1Jh¨u© Šf)Ãêi0õ§`b˜8§‚iFëLnÞ¾Ô¬zÓIõ¦†1Î2j{H˾=EWnÙ­-.=Ò ljø{iähMŽf—¯¨QŠë@Éê+;Ãvdðõ„$a„AØ{·?Öµ€•kCîFŠU8§…¤ì‰Ûšb9àÆmBi:‚Ü!Zp‚¹çÞ³¬ÐîÉúÖ’¼*e¹hxÀÈädÐËÆzÓ²éôÍ4€zŒûT wJSÂõ”\äóéJ„sÖ”}âJ@!À¦œƒš ç~4½Á$R£æ=*p1Žj?1ÅJ 4 AÐp)ÙÍFyªòçp Œw«/ŽqP?LP3KÎsH08­!ê:PÝñRGÊ ‰š– a‡½i ÉüdñHTbŸ·'ŠB omHjMµ&8Å3hÓß=i¬9Ö¤ÁëÖñŽ)…ˆŠó‘F #©¦•Æic8=èÇ=)ÀRíç­MÆ ëOiBóNÛšiˆhZpÒ…æ·‹…†OJ\qÅ.Þ9ëHVÐt®oÇqoð¬òJ‡úZéÆkÆ1ïð¥öO +~L)2–ç‡ÝT[¯½iÝ'$Ö{E¨fÑØˆ÷¤Ô¹Í8¥ÇLRwã¥(<й¥'bš8ô€kr)¸õ ƒëHN(@3l{×IáËSw{|ÒȪ1îq\ÖIn+Ò>X™õûVÆDyýãõ§mE-ìê¡ÄUà}.)ÀR…äV†íP_¶‘×n?Z·ŒgŠ£ª±û˜ë@ŒÛ1„úÕåîHNÙHQš´§ž•2Ü´HyÇåIÔÑŸÖ”­@lÓ[>½:S²ZBG‘C3ë×Ö“¿zvi ö¥aÜnr:fƒ¸´Óü¨° ìhn¤7¥qÍ8µ 8޵ TŠ P€àr($öƒ4¹¤+sšŠ@1ÍK“L|h È^):fœyïIØPyëoõ¥qÔSOéD÷ÃòªŽâ‘s‘MnONiøçéF9­ÌˆÊŒõâ‘—š{)1ÒÂÄD{ LqœT˜¦óÍ;ŒŒŒ} 5‡9©ü©§„<Ö€¤v8¯Öœ¼ÔŒn *‚ANÇ|æ´õÀ Œ~4ð¸>´šxCŒš.3Ôc¸ ~4ý´¸ü¨¸ JÌñFo ê)Á>CŸnk[ªºœ^n“yzøé¤ùþï•'Ö³›?JÓ¹Q·=«,àŒdñS&k"yäñHiä òqõ¦µ%``SYE;¯ZCÍddsÒ˜F!êOz˜zÑKÆÜ´c' v¥Ç”`VèÊã[ŽÔiÅqša9= zt¦LŒôÿëMÁ ààÓN1On9&˜zP€  óZxö¥ÅH P×?…;ñN¢à0Jw>Ô¸>Ôà:Qq ÛhÎ:Ó°sÖ€HÉæFÑ÷u+ùŠ~;RªêsÎjn3çkÐFW œÖ;ñšé5È„zÚYÜcÓæ5ÎJ1‘D·5‰i;R~¾ôúÔ²ÄêiJqLcÚ„ëH)OLÓrqÖ˜ 0ædsFGéIÔ}(p (äR¯4¼Ô€½(<‚1Úƒœp) „ÔǧŸLSæ˜ZJ˜qÇjúKA´ûƒc+${ž­x…,Mî«gl|ÙUO³_G€Òš3¨ú¥Å ëNäS¹˜˜¬mT¤€#·ü5‡©Ÿô¿Æ© dC"¬'Ö£ˆ•2 üj[(:}sHNîÝéÜÒÅH„'½7§éNÇ„) @) ôþt¸"ƒž´ i^)¸æŸœänyâ€=(éŒàÓŽÜMÈ&’§=é@9ëJO·^”™éLnÀíJ§pçÀF¹Èã¥!Žäš^2)úS»T€œ úÓGéN#¹ qLã4…x©1ƒMl9¦¸ÎaR{ 3ÐúÔp7îA§ÏºØÊÉɨÏ¥‡zc?<`)ëÏZa#¥4ÉëL/ÏŽ'饱ңf4›÷`rh©ÛšP8Wˆõ$Æœž=ù®NeùŽEw~=‡ËñMÿ# ÊßL¨®ãïÆÑ*œÈü¨'šÁéMÅ"Å'ŽôÖ9R’1“Å3vÜ ž¾”´™Ë Õ™<ûRý(8'Ò“µ Ðg´€æœ:vü*D(Ó[Öž)@ síMˆý)['­>ÝwK×ÞŸA£Ò~Ùù¾$ŽR2!‰¤ý0?{?jóŸ„ö{-¯¯þì#ùŸé^Œ~œSFRÜPiÔƒ>ƒìPHcò¬-Hxq’s[°¯yº$w&©‘ŒÕ„Î c ÁµN¹Æ:ReÎ);)Ç8$r{ iÝ‘œZ‘2zÒqÎsJzŠCÁ'4 NsŒŠR@ÈÆx¤>¹¤lc EÆ'¦“š\dsGñ/óI€Ð¹äƒJg=Å/ëÞŽzâ’„wô  ‚GåJFæ“¥ üwÐRzsKÚ|RƒŒô¤ É¥àP1x4«I÷©@<šRr)ŒOÞž)þ4ÀHÛ {S‹ñÇ5ùIÏJ3ÇJÝldÇÎ)…ŽsHOjaíLcMÉÏ šaâŠOµ7¹4¹ËSCJb:<ŒÒãÚ—¸æ±BÀ4»{ÑÞÚªà4 \sÖŠQÖ“1F)phæÄÅ74þ”ÓÖžKñ" ¾%búÈý{JóËCŸL×¥üM\k°6:Û¯ó5æ÷+’iµ¡qܤÛA÷¨óŠ‘óž•dÔµ0õéÅ O­4·š“Å&ÑJ 7'Ö˜ øPéMާŠqÇZPp├SqÇZQŒÒ`83Q“Í;ÛcœP€Œ“Žy«6KºQîj±éïZ:deäç­ g¾xÈYø>Ù±ƒpí/áÐ*ꪚu¸²Òí-Tq(‡ð5o¥3œx#Ò—‚)€úÒä ;¥a^\‘îkl¶Eb^ŒÝõ5HkQÉÈTê0­WŒç`üÔ²…Î"švž9§d~#µ4úâ„#ž„qïAÁç4œúf‘@iõÍ;¹È zhçéGsÅÆ)Bäƒ@ 9Ç­ŠCŠfAnOJ1Œ“K·šqÀÏÖ“žzÑ€M#{Rí ÀÉÍ;´Ð œã¥8`çšCÒ¤Qò⌴ c¥À¦ÍJGÇwí@"»ôïN`wv4‡]ØÍŒ9È£SŠîQÒ‘‡lS<|Þ´cך^r(ç¯a@ êzRm¿*“.*”˜ŸjnàsÍ7pìE¹íHhQƒéKŒ(¦géO8ɤ±ŠxÀõ#4ÌdR‚IãŸZzŠQÞŒqÖ×­0bÓ[•§Q“Žô„ˆÈÉ9âšWéOZ n¶!Œàu¦‘žiÒ) €y¤Pv€O4\mÜhۜԇ‘Lçž”ÀL;ÓH…I޼Ò o€qŠ -!µMˆ¸Ç4i)s@ÿ½.y¦–£Ú‹ ã œS {Ó Š(°\“>´gŠ„ÌB×Iž¼ÑÊ;œwÅtý8ÿÓWþCü+Èîzšö?Àu“Ý%¼‚PR>é® ñiä`H+‚z64йUù5uÅ=9¨Y°Ç¤Ñ zS™ô õÍŒ” cžô`†8ÍqÁ¦€^8£‘ŒÓyÈÅÈ ê ( t u¤Žã&–šg€‡ Ö½ áð¯ndXÇâr•yÀ›­z„å6zIÏ +î4&®L•Ñ߉”ô`OÖ¤óºdW<—äŽzTË}Î3[s#StMÆõ“íX©wž§5QG²ŠêCªÞÈóëjct{¹«ñxfçî®+¸îâž°Ž¸üê½Òy™ÉÅá²£æsùUØôP2k¢®zS‚dbŽksŸm*8×OãM´)k+.0§½o´â©Í¦‡ú ®†˜«"°ÈéG˜V[iú…±&Ö]Ãû’ Àõ­B5+ëbEæ™8ÇWˆo§?¥a&Öæ‰v6ÿh'œšÇ‡Äºcä•B8;ò1õ«QêVróÄMž˜|Òºèh¶ì3ê{RcŒžõ˜„äiL ŒB@<“Þ™žNzQ¿ Ï5È''9è=)Xdå°34ÍÙ<Ò'œ{Ól¨i›céLÏÎi›°zÐûÀ v¡œ~ìÆiI3I€âÃJ¹ÆhÆW€hŸo¥ $ 3ŒÒ† ¿1`WŸS°·’êú¸¤2þðSL€f¹ëŸiVÃåœJ{lÍf¿‹'¹blìܯA¼cõ©æCQg^óžç¬]G\ŠÝBD“¸èµ†S^ÔÈóÒ6ãdcó­ L¼º7½4äöC²[šv7ÎêôïZK!až*µ¶“2vÀ­ôö Ïó­îdF=úö£hÕ¿°t$þTñfzs?< –Äp¼Vˆ¶Qõ§ˆ W3Dš_³’Gµ<¥îÐÜÕ\.8ô ôëKÞ›ŒÐ@‡=©iÔ…M1²–é‘HTçš›óMÙ@$qMÚv‘Ö¬líI³is…ˆR"OéOT=*uM½©v様vŠpSöñÁ¥ÛéRà”åR=)pG4Š·Š]œSÅ.) ‹Ë¦ù*{Ƨ¢‹ˆ£>Ÿmr6Ïo tó7ó¬Ù¼)¢\˧DXt ‘Öº R¤ì÷låÛÁZFíËö¸¿ëÃùTOà»b1£¨D=¥Vþjk¬Ùê) qSÉÃæ—s’‘1å뺂ãûÁOòÅ5¼)~2#ñ Àö-kŸýœW_³›=¨äõófqáMld¯‰×ñ±ÿì酵ܸ©TŸO±ÿöuÙ”ã¦hØ}9¡Â,|ò8£ánãÄ0‘ïlÆÿLj2 ñø ÿÙWeåóK°zsKÙÄ9ßcÿ„c^ çı¥–özxð¾°q¿Ä‡ìÙÿ³×_²ƒÐÓäˆs¾Ç+ÿ¥ãŸÄW|wHU©¦¦ÜK¬ê²ÿMU®³gμr)òD9™Êé[‰•ïfÿ~rjx¼¡A÷l'»;ë](¥Çµ ì.yðø{K€~îÂÝO¨AWb±Ë츫x£˜›o©áqô§ˆÀè*LRPÔ˜¥æŠ&?JJRpy£¨¦c”ÒQ@:ÑIÛšB?ÿÙnip2-8.7.0/share/nip2/data/examples/businesscard/businesscard.ws0000644000175000017500000006237613224651032021561 00000000000000 nip2-8.7.0/share/nip2/data/examples/clone/0000755000175000017500000000000013224651032015176 500000000000000nip2-8.7.0/share/nip2/data/examples/clone/example_im_02.png0000644000175000017500000024464013224651032020257 00000000000000‰PNG  IHDRÎã¿ „ IDATxœì½ÛŽ$I’%vŽˆª¹GDfV_¦‡øüþÿ?ðiÌîvwUeE„»©Èშš{DFfW @¶¡»ªÂÝí¢*÷#þuüëø×ñ¯ã_Ç¿Žÿ:þ{ð¿úþWï¢ÿ’§ø¯>ì¿úþuü¯<þEÎÿOäÇj‰ÌúRõ#BõßÇ@½?“Ôq5»}KBhTÖ…pêCûæ*óü»ÛD~ðŒ€ÞO7ej^Þ>8@ÀSúf<”ôÜ–7»óáVQ÷ÿšôæQï.I@ß\‚¸3 ·¿¹I°~Ûvcòƒí˜¿¬ÿXß·y•˜—lPêî¶Äq7›%Òíï&I$âî±sÝOÙ|^„¤¤úÏã ®[è¸NN.1¨ÈmPÊÇò?Þ~›[ÚR ¶i’s‘>ŸkQÜîYúnÛ x³Ü·õ–¤oí¸Ï<ßÝê;–Lè`"g–°ï‘óÛêêM !CS4ߟßïn´VFûúcîƒkîÀ;.^Ç&ArîÔ{i5|»%õy1ûb}±d­A’€ÆbÀ¥]â8o²Oj)ŸCúyÇ~ï7Hßa÷‹›x}÷y éXÝ”µÖu¯–8Ùóx~>}Eìcíÿd]z=vL)ø5F ÓŒ€Î““$®2ò޳ÌĶþœOúªH ÒâaÞÏæV]¦L¿Î+)SfÄ—¹by¦à¿Ë.ayà¤+” ·„23¥¹¤>¯óxœW×{–hv$¤§Úö©„g,v®í„@—Ó1¦Îúuþ-ˆ0ò$K›.érG*Hú2mÙbÚgH™J@3&iµ¯%²ùïoôó;rþ_óvKÐænã4ö´æÖdD^%)…Ašy¦™ÙMûÜÆ—ù÷VKÃãÜÝ‹÷æ„®u»ãq®µüÂÚ×çH¶æØç` ÉE–(æÒ ()5‘Öû'šxHe›ìùõ¶>À)E£”$i„#3•¸L–òbcœHRÏ-ÿEÍl×+r®ç*7xÊ#çþžI8Ú J½ÎuÏ3afnF¾ ¢97H™¡×Išÿþß.B[wÿ†œO¤›M*­O$”Þ›¿–1Ó“”™‰`‰a@JÝÛ I’žÖ…JR’BC$\÷3-r×¾‡ $cüT?“¦Š"Œfäm‹' dFž4"­õA—u¤Í» OÀý q•õ$ ¢ž@)2‹YQä¾SmOJÐÝöãZ¥°Ö/| ö'@H‰“ww@ïŒ!à‘¤Õ$×’–Ú]×é¡¥*YbÉåwp“*ݼñéí.Ï ¡Ð›Ç…ŒLÙ[Êiè:í §’Óýßõu|ÿö(›?ñŒ\Ί! Ü´ï1]swd’ð2{Ëñ¦æNÅr¶Á,&\4ƒu´ª4¤TÒ§.¾¾¹1QrùZs%PX"yÇ™g€R–[m¼5NÍô¬Í CNr²Œá"Ùýö×7ë¸$úð¸×Qž)ܳÅÝaá<²âoïóö)×µëÇï–Std˜Ó.9ŠÄß)C˜G;5Ï]bDgjF­‹Åè´€ù]w3ÇRõV’CÔg–C,ƒÃÉ"˜Ùÿåm[f.„èžhïw÷#€ò9+¢«êϯUÑŸ›€ÖgŒ±—!ÒÞž~ú²!‚Ì&óÐXófžcT åÈCy[¦&]»[î;iýô°¹v3ƒÚˆr¢ŽàŸž-G–ó ;[‰Ö›2Bü‹¢+±œeš÷nUÚ¢]…Y¨ZÙ”Yt²ê§jø fJ@Ê $“DsN×n:4ߊçÄó¾ï~ªÌOd‚Ɖç|ÌUZ4]ßéA,€°,²÷íSï ¸5„¨”KJIzøü´q6Q²è­™eˆTwP•‚ˆ+nšég·íñ¡!‚e—°fˆéL0o MÚ܇ñ²­w(Òg]°æú4‰”bÙN_¾æòg"éòøˆœ·Ó£1%šÑ º22R_ž6Œ‘[D‚„%Iº¶Lú´QÊLs·š‰ó@’‹œÃh"¼Àˆ¤v­":®TÞtÎÚ&为5ÈLÄŒGGfsÊfkÝ­Ô“II˜f-J I#›@³‰<Æå2qEåŒA"’>•€ˆØÍ hˆè›çüqÊdz¦*KQùóÒ²âÔko]É2 À’‰·ñó;r2ÓúNV2Ÿ¿£xèñáÁ"¼YN €µ)hn€¹aDTÜìÞÒ[L=!¦ØœJÄE›»g^;5íB‰âpkÇUîÒ°²Ñ è~…€† Î4ÓO ˜·æ”Z&)ÉfÝG¥VÌÒÜI©¥ÚÖ]¯¿.øY9ㆌ4gl9cÙÖîÃïówO ´ W]‡JÎb·,{ªiá& ü]‹fH¶3·ët Ëfd'ùéÔ‘ìý9"aæ¢L FŠæ p·TÈ$eÄì5à![óþê!ŒØ¯ÛÖª“k–'ðVs3Ë£ÖæØwh§Ôœ¢{ƒH7ŽòÌSLˆ™»Qr&WËÈ$-”¢¹¡o›i„Qíô°q‡Y£5•Rl9ŒY®Ðëšì÷=jþ˜˜F¦‚+Ž\9•Rñ®¢çn¤2Ò´r ¿‹Ùß‘s8ÍOcTgÙÈ‘ É™Ãϧ'B¤F##Ó™„eFXDèÆqèÊ•§pÄ8U¸IÌ[3‹€‘抈‘›™#Sp"RÀÃ󳶖Ô°&õºæÐ0"Í[ìâ—esUðh²tîö¼Ð(¶ec£ ‚}ê­ ÏÝÏ…ÜÚ¹biÁ¶ëe€Pš[Š>ŒŒÙOœø;XÅœ =ªx²øX+ìȲ¢QYñdI}e•(˜3‘D¦Ä&¡9XU÷$àNi‘9ѲöÚ3ü}ŸÛAN•’ÅJF:$ƒ‘Hxó ¹ªp+I’²¾yŽDfd„”©Y³- T–ØÛvÚÜø ƒa§€¸Œ§[z pÝGb–‚iÞêð«4ÏHòj^u@íAÔÐ*_–Dà³Åcy»·$œÓûÖ{sT~VV8,n:O’d®Œhõ¶ª \zÕ+ÝËã›Ã#QÕiSEÍÓê×jŠD}; £8ÓŸo4ªÍfÔÀôpWËiž$û´mó2=NÁhc-ŠSÛ:2Iå$R”÷ ”h­ÛOý´1®ƒ¶¬¨1óÊÌÀ¸U ŒËhD!ÚBèÓˆjZ3#„+ nN'KÌv€Ìdξ6j©ùµ5¢±?œ;IÑ ’™¥²Ýf“v&Ù[U)=Y•…RVa…òYÒ2…UbŽ É.W¦¸c=À¢CySžB*—,•½aùëXL®$W"èä,4md•FÉ”ÖΛÕ'EA!3¸@Hºi¿T0?"h†¬T-½oþغËó¥BKZ'S”^ººÓ8æ*[Žý:¢±œ>ÏÂÝ4¹ÒŒ¥DWâäۈ̙8šèP¥Ák[§=Z1Ð{+ï·ÊQaoô¾UGJFVž Áj_I?¤óN.1‹tˆ]qa–» €nÿÄ›²¾NŒðêų`(ËQ?Ðï‘3Ád;ŸÐX&Þ»]'—9ªS®2oÄ1âåù‰Æ™aÐ’Â`[oþÚ°}êÐBh¯‘ÑZ³Ì¿Gdl–ꑞ•-%«¾íÊÝ Þ\Š˜5ÜkTÍS5ȯÜ&DK·LxÕ  ¬z˜ȵmµö’7r¶Õ–wü¦¼÷Mà·š¦»:5?—›œb%÷Å5 »2W‡È¡†·è8L•™³¶ˆâõ7r€Täð*›l%‘V „MOÀ<—ç—@\ÆËk—5oVÐYSû˜µæ†–fUA5ögé­·«2ÄoãºÏ¨ +æ+/pþBJ.å%Z;#¯¯c"Â4 ØgÅýÓE" 0âäquw–» èUB% Ö•CõH²æWedBQ‹–îZ52Z ª’¦X.}áÇU2,)9mäÄ{J¡Ìn§E Ymw£ç¡¦•™¬(zeø?¦iKA®È˜²\›'К)öj{aÎÆWÐ (Hƃ¯éNwÎA̹iÕÖk†ÌØÃŒ ] ˆHúhû¬Z¿ÆµÂn®&¼åˆ… *ÌóòLž¤šÁª`ì“öJ©²º†Ö8Ì]M"IZ£¬U%ÝÖHkÀ¿$6Ïû‰ß®{AµLÈ»m¾Ùιÿ‹Ó¬.ÖTªÇGjªÂ§#B›ßä 7¼»Ñ܇É?Î7t•¡Í@ Z³¶r&ìg!€)Gˆýj‘N2ÊEb ”szÉö«5+×4‘¡r†ue¨=4¥ b߈x ÍòÌû£}v£å‰˜Ë|u¢@½Ú9å0‡ÌxÓ®*(}p*aÎØI¤¶Œ!eÚ”ÎBî³×Ó³å² ZruD“w|ž"l)Á¬jkæufÉٛʶҰå+ßkæï³ÒÆl©¡ÆúõâOç}¤y\ûƒš#Ð;<÷€‚¨xRIs»î¯½õÆ?e‹³”µÞX(\ŒDç~l¦ƒÊ‹›ÅȈ#ns"™iæFE‡—/dTfyÀ)»ØÎ{jb8}2n@ ”¬"NŠHó2H¡¾¹ùîŒ1xÞ·f°nÝ Óóo4ï&ðÚ:-•û®—«^®aJ´˜õÏ.VRXÂlqF´´»*K§q¹‘S¼*ŒžV Šœ;±ÐJéOÒd#[›?ùôÛéõ{S…Êv’YD¦ÃFŽÔ.’q}Œ„A×0ˬ„€³:¨Ï•e*=c8”§œš6÷™KB$²žëÃ…îWþ™UŸŒ¤ÄÛ e "gNG*åQ@“ ³˜7÷«›²À€NÀ[oÆUÌÛ& ;4WÌ é´Õì¢û²®Ë÷™n+£x "+8äî ™«æoe{¢“|kF~@βw{ZkÌ Ÿ®ÙCl1f7‰ÁsƬm‰¡``Œ³ÌŽ7›U¢HI¨œ&Q2ÚL¥-} HÉȘ…>ÅÞR,[•RDÖ¶TÉ÷m nôÔŒ4–HfŠA6Ÿµ•]`?uËjÉö¤YdªÈ+f"½#"—;{[ïm# ±À@,ZtÀ¼™{o‰kËÏUsƒ…6ÕíLJ­®VæèûÙ·–ÅMccx‹à¸Øƒ ¹ƒ»»cì#ÌXédà5Ç#¢‚þÐ2‘0Ÿ¸!Ô0–2ªh*mµp5š°Ë<õˆ3nì)#pL÷â ðÄÜKÂX[¯åb ¸¦,3å¾möZµ›-äž#4;!R ¶mß‚hVÍPÁUKÊJG”¡®Ol.¿†°;ƒâ º±ßMÏÖ·v#'e‘X˜gþÀ~¶Fƒ2é”B®Ä/§“2çÞ6¼>_óÁ»!S£¼oaÎÊ)z2/\Ž<ŠgEÆ bæcÏšDTé‚ɸüü\ܬÅ«¶¶¶À˜ý¦¾@üûCÒeîà$7 Ç®JœQáî¬d0`•ÏKÌ4½÷‘H¸Öì7ÍÑÅaSê[E¹ó‡äªE±éжV|KêŠJw“`j%ÖX*‚ð‹ï*;Få ™ æÈý¥µÈÍóåç_w|ng# Ÿ<cDª ¦”B˨x§"*¢šj4‹5§„€UÎò S 5.Xݺ“ Å="ô¹+I‘•O½7(³•m`¶J`u ÆHKXƒ+ŦUد×& À!±m;²ZÇ'^†)˜£,î·–@!¸ai,<áZÄt.Õ4/TÒfåÊ­Ë̳ü‡Ùó611ˆ 3Ë‘ÏÛ—Ož4êòü˯¯bž>Ê¿€âzÝ_rŒPM1Bcz•`õ•@yy7„a–+ Mqǵ«ñny€kõ^¨bθG/ÍMÊx×­]%ˆk3ÌÉKÖMñ’ðm+èá—v†YQ¡úí GìÞ,’™YÍõ+èH‰6q~aL¦ðœNUï0…·öÜ‚Ñ7uµG”S±raƒ<<þb†Åè…Þ‘‰Ð¸AcOó¶ag—¿µ‡î­ÙËoûù"³çKÈ z‰ë~}}Ý/ sÛgúo5ŽqNAXÉŸ„‹¨¡éDÈ|-hé°ÉÊKÖËàÑ‘«YœÐÌ Ê>ÈF€BØ1!èœüª„˜ êHŒŠGY£'¥ €™Q£%Ø3›¡mf¢e‚–´>F`wϯ/§Sž8ÔtÉ};ï¯:åå ÷}×L5”G †5dÛô›Á@£åH¹[VCÊÔ¼.‹Ñ>ññÕ˜ûG×E:D×Þºáèøs®F±p37ffVx3'‰’—ÏF¨Ésšåg©$ÓÆËóCß¿>ÿ¢”‘jº~µ¯_÷ç±*.½²[}<ž,Áª ®pTõœ¹æoyìˆUø1ÿ™VÁÌáÚcY*”»¤;(S=G¤d½¢›°{t;cpšÙú„l´kcJ~:4 ±ï3ÅÐfúø°ðGZ¬pŸ‘ ÷æfÌ}D^4cÔªIû!–ón'DÈ‚jÌù=Ï監Eˆ¬ÚãIÚë¯vÒoy¥™È׿ïúú– ƒ+XÃó­yw†Ä5šc*U]® eÀ vü9—çÿ-óZN4°þRÅEå^Í3Þ¡Ì>•­€9‡£œØº@†v¤§b\¿¶óC¾Xï±§Û*\‰ñúz5º¹ .H† ²Juß/5KQªÑ² ùÊU˜)¾;Mø££º8PR–Õùc {w4 0ïæ¯Ø,¦záùù×¯Úæ NŽ_^qh"ÝT#'hÞ½¹ JÕ6gÇÔ¨5®Wæy7úí~X¡ÊûOÕÌΉ[LŠË•2å4ÛuƵÚ“9rštG&Ì[ä®<ç¯ñ‡Ç'€¤Õ8$5.¯/×pC$ IDAT°òô–V`KVn¸4Ãáµ¹Rû«FË1B jTZ‹ëóï¥f!“SV'9Ý ¦ת°\Ü ù¿åC+ÜŽC¶µWÁÒR~f&óîô¼e·Jùyñu¹vYb ÏÆƒðß´ŠbßZžÈ9¶©bzM7D”AV­3&áMÙÝh5†^)Ðs¤ùvè&/ÿÓÿø)"Ñ l3ÿʱ¿<ïðS²Œ @XZ¬¹Åi•‚ÈÜcЪ)g/¯–yïá¿—œSâ9¦ªiÅ:¿—œ­{K*÷ùh£d\Þí´C ½Œ²õœ-3>2ÌÝ@óé»ò¨ÁdsY]G-˜Ý@…Û1áxâM;á’Îc•„‚2Ý[ÍrÞjF*j8¥#j̰qd*ËÉh» C­ÿá þã?þŸëŸAc¢Õ`^JcX S‚z“±9°.LWxåwHf ¯eBsŽÑï&'VJµ"óÐqý†œ¬É%Ñglͼ?b“K{B)aiÇ0÷Y*Ü2£ÆtØL5f$ª½Ü{$‡ìüåÿx´®¿þ’ÿΦ;gµü.o¾Y gwnO…ÒŠhªw%'L»›iŒÙa¢ºãòíŠ>>f¦¶œAW~?´UѪgó§û  ·ýe«éçO§¸äsÁ¨¥ÙR,jNHíx¤ÖÊ× ÂHj«r„òU>(¨¸ŒÏ_Cåaç‰ÂN+X=p ËÊ)£ò'c$ͬV™9[†çdø’üSûü×çØ<"{¯8iw?]/#OÅ;ôé±.rZÕsRbÆn±H½´qS2bß?XÒ÷:WSài@ôïìÉGä2 ðœ(+¹•W>d¹§OžlãÓå[W Žê«Bä&8ìek¦†€6ç°ÂÌ^é=†:g{FuŒÕ†]CÞh!RªAý”©P@SMDÍä/®²„!•Æ¡F žt23@ºŽn!«ÑFLs&¹oú-?ýñÈhúü—_/Z÷6È}ß³½ÿü[®ó1H¶åSz$`F›[$•©ÌÌÙGÊ]h6öñ6°Y…ñæÓù—–†ÊÈL™%‰×Çß öa»r1rÕf‚$SAÑíÙ€™±7“\耻¸—ÝÈ'1d>³Pvÿ†*@!FÓÕ ƒÔüÁáÒkP ‰9þ`"šª©ÔŠœhØ]S|•HRRPfH™kìOc°‹Ö(æ‘É06ýtäçÿ«w—~øš# ,²SÉz?kÍpÌüFÎhFiˆ«Ø Ê­Æf•›W”GþQdö®>á›cVÁîßôþF8Lfa£2Iºåd»”`Nž;S„üTÊ@0"°EÞûCŽLxˈpƒPWU§‰NMZ@W=Ô,1ÂŒCÊäXr6[Vd©™%ÙÖêÖ ›•P1åžfU0 ^Çž³) ôBŽD²9Ô?íÏ×6~:göŽkúù´¿¼Y3í#!±=ðô×L˜iÅ9ЉC×›„°ÖL»"ߪRJK¡TÌý±kÊÈÌåÊׯÜ*†‹ t÷íG䬨BI÷X3ǨÒHèÍÚÖÁá®bf!4lý¼mñª€·§×ç¬ëè(ñ¦‘ 5'M3E´|Ý” g°Uõ‚Íq…E.Í)06›ƒ–g¹V^EiNä•ýáÊNwàu¯&˜Q­õÖž¾<ùÓãk¼>ÙÅMqÍηv¡´ ãZAk=.—kŠkPkÕ60°f–#6óæI»N®¯Æ«Õc# !¾qN5]ª)s ÷´…mN¹Ì“S¢)Ø|sd»ÊÇÍÜš[kMD–”0¼=X?uÏæMÛ)tYc’+#ÐÝ*™~£V>=Æ"™¹qBÖjd•ˆ“ª¦OE¶¬ÊŽ™½™=ùp¶ÎÍôüÒþðhÍ™ù?{Ézš÷Óéôé˃ÙÉ¿´®ˆ¸î6xÞö××Þ\¡4s‡>[•ðO`m/}ë¶_ò,(Ù ‘0CaÓ°c´X…¯ã`«Í2>Tå}¦óW̯Õàþ]r–‘òÖÚ + à˜¨˜YoF·¢ñæ®TÌI9doÍÍ æÞNض×ñºJ¿¥4&ht÷ÕÕ6+¹W‡˜V\™3#±ÖSÙ¾9<Êz{„2ö1±uÝÒ¶à§?ÿ±ûÃFXüú[û·?Й#N?ÿý’‘$ ZsÛ¶nÈänOP0èjmÛ:«Ù— ‹IÎ'íºuK—·Ó‰­ÈÕ1†˜}j£ëZø 0rìñ‡FuáOS8W¡ÂIÊ!†¤u?™”#%æ´šg ¶æ(Ôœ†Í˜MÈ–•Î´Ö Š´¶y‹ÖNçÓ^¼X®™[ëmvƒKByp2)U½_EŸúPFéÚv*e kTº`¢áS„Ÿþí;µs9¾¼ú—ÏO~×=i$[oÃc7ú8?ޝáhd¶€mè Eòuvr=R|‰TuCˆë…Ý·NÊ’„oÝ} Yî{ås¹ôÈ5ü²}/ø Žñë´˜¸çÊãþ°õ J˜÷í<³ˆ ´6k¡%Ð[«X ¡C4Oµ q¾µ@)D£¼5_°Ž´vÚ2§¾¨þI‡k;—~ÔL\ÏŽI¥ ·kÛ¼÷^ý¸ZÕñ¶ÓÉLã$t3¼FŒ¤1_ëãF³Ö{"27kíùºŸFsHÖ›)a[?]Þ·ÜËæä‰J½ÜW XÖìdNóÎW·ÓÖNtí×—#Sò*Y€±ÞùíP8à»™–•)˜®à®òÝŒÓ$缟7V£®.2[w’ÊP3cК‰€ífðµ÷@³¼V†›.‘$÷íKþ¼·– u?õG3´a„m‰1cŸuYäµYÂ4Ü·Í™Ù*«[Í­õ¦‡øÌ>T—¥*XQˆÇÕòuÛ~17Óõu„šàÅm·–)¥™Ûùrí~93.´s^ Õ²íRà‹[#öëÓ5 qÛ·ÓÓßþþÛ sÈÜÒŒæÍOª„\2:…öÊîÆ'ÿ%.—‘‘é”dn™¡•Ȱ˜dΙ¥¯4ãmÌ ©Jv:¨1Esp(Gßa‰ïHv»úéüx>y€´,­êÄ'ï—ûm)kä½9šÑÍ•WFkž¤#SŽí´E(Úvªi(edoo_(om×êÄm ckÞÜ–’š.TýÛÚ¶u‚|VY+}2Ĩ8o†3#d"’5¼ fÎÜ)#”ÖhÚ/ýѨçL˜¹OÕ('ÓÚv9 Xˆþ9ã·4!ÃAwo¾O+1F¶J³– ûóx}¹\wÛV'Í€¡ $šÅ³¦C²7ö³ê6„9òôG¢ø9m{úôЉ„1(áYˆ20@g5? RÖÄgÖü²À¾õÍ}&ƶ§=.‘öðéak~™ Ùz°òtéÕZáÛ–i ~d…Ï$quo½7§™áæÓSÏ_f+‘!Î÷ *Á= …,˜+ !6æ¾ º)”bë[_Ë(#Ïy‰ ¼‘êûx™ 4º7÷è¤bÄÐìe#ö@§Ÿ$(ưA:Qo ¬·–T$:Q+ØŽ|áÊøžüýrþi{|èQ¡M `¨øV X*…PÀ'²Þ;K—è–—WeÊzë­¹Ñ,Üúùudúü¹SÁ‰TsnV ݵ+òáñ»u‹Rö•1Ѳ™`óÖR77Å*tœ$d½>•ÃI„+C5ÂL‘U1o¬ŽeXc„0ÈfÍ9dýü°µÄÑü#zÛv÷ÉÀ Ÿ?åˆ26îÍ݈æFé!#vdnÆ!$ž³:òq\w³šâ¾ eÖìˆ;Wwà(}€T8ò^jô-9ÿÜZC–ÍÊÈôÙø\iÀj"ú¬À«$W#mŽk%„¯ûײ)­só„Ùùáñ̈»v( Q€±¥Ášóñ¡]Áî/Rˆ<œg© ·¾5Ò¬MÂy¸f¨oËÓËÑœJe†D*k6ß‘9}¶l2BF7 ߟz!‰‚Àœñ²“¡ˆýÓvy¹$ÓÚƒ÷F3n4€/¤úvÚz>_ 8Tìh­;S¦ÈLБÌP¬®l®4)¹æ~¸¼/ þ‡ä|UcÊ%³b•P$¥æð²k‘4¯þ›H±¹e?åU­5¯”. Ø™2êV´Y§l;ukÝÌY3trÞiž€‡í¡QV£isö‚ŽXº‘5T0ބ̈”àrW„22È'$Ýh’ÆîQPQ;}útî<`ïY#$3ÝŒ‰Óé']`¬Ü®™Õ‹~>ÙIýôøøÐ¯ý%ŠÔfç“^¯‘bf¨<]d$7,1¬W¯¸) è:PÞ ?$§Ï°!{¤8ǽc7²4Ð=1g{hêBKT3ví|'2¤Ðõ:°×œ½mpZ 4óVýì'“ü´ ì#8gÄr …™ŸÎ-C˜akmºŽ sCHFXï‘Vq­õ–Gð_ÆÃÌU/Î R¾ÆùñÓƒU:*—VÆ€B… 3¥?žKýÔ¬6ÓÈÅû‰ìOO§þúòº+Ÿ¯òDü‹?ÿrÑêŒRi–9ãFÖ+VW µÞd8Cé§þ³Â‰f9¹Bcª8 â›9á¡–)¤Ø€t[µ8¤·Ñ-‡sNàxÍ=šçÅ ø'e¾mÍ ë>Ý为YpDÌ™"ç½Æ½Êµ 쟿<åÿ¸|=™ëÕ•)3k­Íy#fFéÒ­mŸ"öþä†3í×_~ÅÔ$ ‚fûïŒ)õO i³MûË>‹C¢ßioªT8¯;6X‰[…ëåûïœ/¶@çz{qóÖzsÓ$$2eæ0î»Óèj'ÎÁ=}‡¬1’ÍL¢›o1öAæ§z¡ûÒ–ó!ÄÛèFIÕÞ,‡û,õ¶¯ž¹h·‡µÞš3ç{%_263åìy 2"Ñât¯Ù®nûU}ûÃç?=íøùoIbˆiæ¾õ“7H¾Š&¢7fíòü‚¬!Zƒ^&–‹ÌÍ/ÀJ¸ü#zþö³ Q××—×r_g76ëìN’kÓi:S!ÐQ£‹ Ù™ º†¿‰Þõ^#0 õö¢ SÀ£ö”5¶.S4óÎŒÌj %¬5ÈH:ÿíáÑ÷kEµ)€õæ˜í12®`6%ÍPoÅJ³~~:Ÿüìéç?üù§s˜E{|:}•ÜÛÖÿÒ·îÍ­&E¶Ö"·1Ï»vì㊙‚ز<l á—VÚðRt¥IÛ/¿<Úª#b'Xõºd›ƒD\ž/¿X?ÜéFŒ ^&³Ÿ¶NÉ\ ËÖ<1ÄÏŒx|xürú Ý…NÔ`“uXÇuÔÜo>6ËS÷ö§ýôtòš™<ÝÔ›·¥­1¦$ܳ5#mkÚ¯šïÌþô|ù;ÍÚöpúwwëör©FB¥™FºîˆaGª7Û!ðáéÁׯ8?ýôÓ§n/'i_~v??>=lÿ{Õ5[CU¼˜¡Ÿ7å—ý—‹]v³k)¡ë¾\7,É90ñ÷韨‚yýõùJ·TVŠ…¤·°Þè ¹)MÒ~yy¹öóùÓƒÓÍó¢+£tGo]IzF¤o}d&Ã,bŒ¤³û§?þéô·×H€N–ÓzÂ6äewz3¢=lÍzÏ|2Ž=2¦T»,Ž˜e* ´uí¡ ›™W-)Ûc>3Õ&3ó%¯}ðôðáÂHóf¶˜ý°¯þËæËÛBãË“ $žÖ+Ž”gàùikg ÀÒœÊâÎO“ÐNsw-¤_¢ï=R>™Füüp¶”HøjÞ{íçê-Þ9ÙjŠ^s7ä²,¥ Wñdªxr©Ô» f "Fæìv1-cQƒ"c¿î×.7 pNÞ4åž ›ùÁ7·Ò†'ÍÞŸ£U0¬ò‹ŽÊþïM'³3†à”‘öðôéãÃÉâ¶ñœæ§Ç¿|<ÊÞ{%‰1)G‡>œÌs'=-‡/mYΛ5'ÍÍø!ÎI??4Å$i‘ÓǤ¯a$øe½°ùb·éØú3Ñ›ÓÜ›ñ<ú¶õ!E¤D¿|øxÊð&*$÷†´¥io¤¯–ê6Qm5Y³ÖN®±Ë÷(ø ëÔ­ra›À{UéN‚9ƈfN73·TŽ›Eå4é#Fùõ9ÕXa¡(Øk*§>‰’*»Ïh«˜ÿÝtþÏÉš‘»ÍTgËŸ>||\ÚÒžšIû—ÏÿüãÓÃ㹪gš0vbd½}úéAƒ^VÏЖS#‡Ÿü^¶7nðõâ9Œlu4%R¾bP“qÓ ÌPæ¬í÷ê§’ô¶Ôý´´¶œ{ä¦1Ü?=]ÚžÆB ¸§y[[* «Pe3à§4žZÃ~»õÖÓÜ×Óô¼jðs`ˆ©X/™kÒädNÚwÛo–V¬C}ßc¿}ùç…ÒÆR/¢Sí±¨”Ьã¢J´fN¿K3Wáð>3÷ÖJN¤ÍŸšÎË2ŒîfüétYÜ×5muç_v^óñãÅ•8çU%×Hk;ýøÃ²S>ËFòó¹öÖìÌæÛäÞwIAÓéQâêm§Ô9›©H»¸+îM˜'S¥é |bâÍ—%’Ô¾ó|úËÉÄVü« ‹›©?¤I°¯¼Qšaì·k_üµ¶ÔHVe‰€•Ø2‘. ¸2:ÐŒñülkNì]ßRPt¤72C*ÈZ¥>096ùÌ)ä ¡ƒùV—tž´ïgø¦ó<2•tЗu]|aÏu]Ï™[ò´^þÏÿøÕ P‘Ç‚aa´O||º0æ,Ö2oÉi%`nfƒΧ¥ÚÉ– ½n6qz†ðfü<§3ça5@Ò\ )äl2_]F{üðQ’Yx2Ì!u3SŠ^-t& º›"•ŠÑGÂéK³ÊipÑ= öÌ„5«…d܇{VÇ­Žëg7®sóåsOwk^ÎצP˜•£Œ¢9ºÉH¯ò†Ó”9z óôvv8çS$þ‡[´=ž?ݶm߇N§ÅHkëê¹Ír纞_b[¿åÈæœ9¼Â ÙIA·ËÂU‡Û/[OûuÛñøä†ÇžCá+vEúöô¸=~lj§3¶[×NW€é¤’î›5À’Ÿ”ÕY…’L0ƒàL$R4 ~^>!)Ð+ š, Ervd Cbk2÷){ó6軇}Åú„Jž7¡ P‘iÔ°}ì½´rdž}Ð×׳‘å ónðë2¡Øé<‚ìßLQÍeâÏì϶OŒi¢u˜;¡}©÷õŽsŽP \Ü 3•¼2àÈÑW7W[®–>[°ýúù˵'Ñ×…æ£XlJšL:XÜÔo·Ëét¶È´L¥rŒ„ªkz–cYFì¦c:˾Nsy·„2fÈ£Ê=AÑï¼²n!k§¬iÒ<ÕhV¯Ö€²Èk’¦Œ»(tЦ}|Þ6¹å h‚-C¢¼Üd tчHoŒ—xSÉœß1Ý_OéTpýƒéì477ö:b`Þ– ›Ñ´ór^ä©°¢ö™\¿ š†.çu\ûÇӶ̤[N¯wùòÒå 쬑pJrîj^€J_.=¹÷žlÚK&F(Ç wWŒø|~<Û]RíÎ>ÅP¶f™åŠ*®xE=àÑÄ>ß®"9U`SÌbubÞGk’”œQ™‡`˜j?ÒISÇçm÷Ëb0“Œ7)³uÚr»{¶uzÜwg½…îI=’”oþýx½›ößΪ}z ‚hˉ£+†7ö½¹¸Xÿøo[þõG?k±´ƒÊKŒñÑÿqÕõóIiKC™+â—ëmxÓ-°[\f€1éÌÑGžAÐhÑ„@Ünÿüé_—+.xÙ¹pŒCßv¡íšD¾\ŸÏ ¶ ë¢$J¼D!ûÌ”!,‘É&¨Ñ+±QíNw2¶pÍGÐ1zoëÚ!#D2H‰Y”’î .ݽÀB£Çéôë/ÿ:»«o\°pß™ÃcŒÅÑe-Ä5·åÅF¨€å€¹3¢0°ËLMÛ!Å2EjXÀs6 ŠþÒžWO|w›¶rݨL†R#íÔ2ž›­ aÖÆø?ÿÓ4>^™ðFDôcvn=fKf4Æu{Ù“Dæè»¯ÈÞ”‘¢1öžè¬ †U“_N?ïíŸÙr<¿êÛ…¼§1=oc87dLRLãS{«œRMª>©¢/>ÂñÉ7üõTzËÃÝ8«]Ó|“Wk©ž ÓôyŸ}ñÞo/™±ßØHŒˆœ4R#-ªê¶\nÊLƒW.ãöºéfSºlê:¿æâû3IÛvRùËQ‘îÍÐ+=e:™ãïÏ}ô=ý“zÆ ±÷>”#lÃÞÓ —-h1CÜžŸ·€[¦vz[=CÍÁŒ} ²OQEfòæ›^þþ_ž–ÏI‹~ûòÒ˜} CnX"¸]WhÍKT]A”pWe²À<6 S˜"‡ª›ûƒb4:º"`R¼vëIo­5&YORÐíÜòöåóKfnÈsk1(D¹äÜÍrˆîôæã6D†£Û”l-¹ÇíåäòéÄ;¶“éý‘ídfôSæàÒ&*@ZgFú5—Y½(v÷aCØõÿߎڰDc£yŽc-ßlAÛßþýóåéÃú¸o¿þãKxÁ”rÌ¡ã08ˆQ1õåpÌ–Óš:äQß|Í1yµ‚À7Óøæ9ÿ„ƒÛ@³w³"^¢Ûbê#Ýsì%,3®·îJÒ-þþüØnWçÉVÝn"¢Z[@9Ân£ æ’ ¦Üof•¹+uAS 1ú@"G&Dö_?ã×}XîU[Pš ´EBàíBf‡™ⱚ›D$ÛW`Þò óÈÇþvæ{BhTŒ­Ë[î‹f‚CÝ̨ÔóºÄí–K_c jœ¢‡ãúË?ÿu¹@™Ù·-`Õe‰to”“c”4dرإ'L#2‡3™`î;OBu<š÷îȶ۩…]ÙGµ\÷p]ôêjöd^(RIÈCþfn†œVrÜ—³[º£o†§8ï+𛶯n›ÐÚ;ÜŠÇ´4¼üSX³Ñ‹\<²›:WæWË\&Ì (¹'£’‹÷XO[m}”€&ÉbX5«¤­$4³’Z˜ËuÛì¶íû8ÛeåèÛ(±?"á+£)4Ïmìï}YåJÜ~ñ‹¡o£´WÅ >2#zštn‰Q©XMål´;¦ï6úÈL¤µæ6ªÅ©ÎØÝöÏ—õBLJðب½”1ŠI‚R ÚPžGyGo\¡Y¢PeËuhÅ×µ—›z¯‚H‰IÎx9‘ùZÕä‘<ÊÂU*‹ù… ÁèëìcÒË9O‘EÚX¬ȼqêðûÃÃ6n/W´3@µÓI)z¥£HDß¶¡c|mÿul9eE³Är%‘#ɳʾ0G†„,ÿ)Š%`V2n©(æ-š1 ˆ¢HD5:Éö_}i+Ú¬mzB„F´h“(u¾BS”'§ƒ1qäïæ³¤Û8ÕßßLç áP™;>c «Ù,ZûÔ訣BGeýˆŸ*§,NŒí¼¶Y§—’!¿ÒžÉˆv¤ÒqŸS}ËV|5Ÿ×k0,§Ï²`±+’Œyëûˆ]ž [äu9)w›Mí‰Ú*ÂÔK•> ÎÀhÀ™0C³F¥¢’R‡âÕ×KÁïëq$º©ÅþëéÜZ«Ôðä2}o™­™9ŸkŒ”`µçföèÍa{V „Ì8ûu_sªÆÑÕ–ª<ÉTÜ&S|ö1 4“™¢ja¿^a"=˧4[N‹ƒ0+àS¢0Œ¯¥©áŽ:S^×ß7™7¿šÎ/cQ»ÓÁj$BsË#Ó5Ðû¾?g$8O’Mž7Îfì’zŒB§ä[ÒëâjV©ÔmÏÑVmß{°LýqhHÙN©Z§¥À5GÜ6Ù$‚¤Œì½§2&c.A´ž# “¢¸pêÞŒNÅ –™ô™Øeɼ€1ûM+Úœ/ê× &2ÃKããÐÙ<ÊÞ¥~[Ù Î%$^3îËb*2Ð|*¤è{MÇòà6)¸ñNçmß±XvYÙÚ³"aMûœ‹pËq}ÞnSt±äX ºsì«Ï¶rn¥[/ ˆ‘˜„ð¦ö}P%iŒˆ×~1ó¨ØN7GL)v5;·fç“W›È!åè!E‹h'ÒÀCc ]‚·yóæÇî¬%šïkã‘‘1Á³€ÛžH&ªu»\”Éö¢ãžõçÙXBUd^P _œB† ª¥¢x$Ž[ßï8ç5_Aº¿7_B.•„Ydf öž¯:]ŠˆíË—k¨Ò:À…$5H¹”Åv7=þ¹¼¦ˆjQ „è4cTšé(\ ¡”bÄëxÌ,W•KI:¦­í§ÓÃO?®›fdŽÜ·d*ÇÞz3sR)Åí…àÓolg}Ó|ø”—#ô:^ôÁ{¦tdQ ‰lÖËÇ;–ï,ØjßÇ9Owš'(C[Šn)°bR«ÞFUmPØŽD‡R@¹‘¼9Ñ>W‡tKÝï/qþpþXBOiè×ÏÏK–'CâÐ }­öHó"‡§Gɹ´4=Oæ`;L˜FLÜFõMÕáÅryfýB±—×B§—•Ùüüð—âZ_ £Ë“"ÛÉQ‘c K‹L¨ä½g{¸¶ÃÌ4F¬“Géø„ÑÛÒ§0ûô5‘ÕoÙçr=¦s.Æ;£?_Å$PbÇ”Á›ñ/,Qø†P&BÒl4»çBŽÇÕûÃå;Óy½,«’´”`¹ç؇ìgÿpyzlÖ×ç+[f­ŽœæÐŒ47…­kK´…½·ÌÝGíV ¤?éŇèŽÞGr’PLµ]ŸÑªà×0$z+™;јQÙ´±üøß~ØoìKSF§®Ñ·ðS&-·—Å•lÙ‡²÷Õ#¸0Æy2Ü¿ñ<–òdÃl=gVh™y73jœ÷Ï/K7Pé­PÊ¡Qð^NM¿YèÂyz ²9cµ]§%yÊN„2Ñ+EŸiMÑ÷ØÛ‚H³ÃÉ:-—¥ x¸þ^¼Ò¼ÌJ‹&Å—Ò'çuùùüððpB[›z-ÄŠß:ÕÀÕLÁ}='‰çŒe³%cæh¦?‚p/ÖLßZnÓ§ ç ý‘¤3BÆÈ\.¹mû­Ãv q·–„Yi ˆÑ‡³²DÈ'ýë·NŸ×¤„’z— ì=6¬c뙲~D÷Óuî¦wÂê6oíþ½ DjÈœZm‚w„Á'áû›Ó„¯ ¿sµµ"“ò’% Ÿ‘Þ_lyxuÛ;»ç×29³…è/_®ÓFøzÚ3Ãa5¿³R~x09ó|å7š'@oo„þ QVg¿›ÇÔ[­‹Ê´÷›súßëM¹OgqðÌÒÌñ+¥n”2oÊ>¯Œ{”{¤AŽ‹˜éƒ1„:ÉŒûLtMn´#‚×áÛ̬ð›âäWCŒ:jn:Å‹_ÿŸŸÿ۽趧E·=0n»è–©æg)s܈ëîâízµSJ#Ò²ÚÕfÈxoJŠxîᮩ‡Ä;w9bæOѯ[ÜœH;.ÌÉ|“ˆ;Æé^¬ù+ü''䫨èj • -óƒb~þ­¿ûý鬨HG苜å^+ï'.½çf´™ñ»[ý»C_qHF €©"µ;âµ1çüÏRáÚ‘6Á=¿ k\&Ü ïµÜ Ò¼_;¯ÿb#ä§‘Ùûõ–oJÒÍR©çÀiš\µÑ‹êóÌûT޾…Œˆ€ÛÄ8N}óŘ#£ï¿^Õ€ÃEs?ߺšf èèOÈéOž@” iÖœã(‡OYfÁx1\lQÃÿnsÖ3cœ~3À½¨‰q€ÔÍIÑé»4y濹*œÙêÌΨØÃ Š)£u™ ÌNd›sùóûî* Žþ&ºïi+þñùöãYûmÜãåËÍNur™M‹?ãdÑš“ŠbÙo¿ ”"jPsN÷6Ö}]Í2úó¾ýýsŸ»ÌÜ]>PFÅ_Ÿ¼¦üíîi0ªï˜öòÞ3FÈÀ}½p³ZÁï'sš§?Úìu\W®ð{µéS@Ueéî¾÷ë¨  #{ 'åŽlŽ„„/Ž´yN³ð­1mç¬+¿Y`åc5‚÷ôÊ\oä& âïù/ô l»½tœ(4Xö|`·%¯/¹CârÝÚåú8F*2l­£_03Tï»®üò$íÑšSÁt[¼lAÃ>làö«·m-óŸ{nÓéI‚‰.;¢WT[±‘ÓÊ= ÃOã¹€¥"ö,G´ÓªØ©„MØÚŒ æ!å$rýyJ£|{:+ogÓÓŒ+ßÄ;¯«øw/rRÔï U#TiÔ³‡øø¼4[1ÿðyw-3U÷…|a‚}”ÖæŠLÂÊÄØ®{©Nv‘ViY§kä£i…e_T†Ÿdç“é tßkµš$¹?ˆ¿~y=›:›¯ÏŠoRúÇ6̒Ǻ?¯3ƒÎt^zJç}Š%TuvZÅ*d¥0+T¯^ý¡ ï”næÕR,¶iAu€gæu¤ ~{éÝ!˜³~p?]jœ4T}y|ͱñ¨„¥ÛoÝŸßÊ"hÆ_®ŸÇj¯n-%’2Ûátí7üøpY4¸åù¡Ñ¸†­Ë«ç_LžÅØ•‚Úy±ÓêhSõv¦J¼šÞ™'´ÔbE²g[†àoNÄI•Ã;%xÅ~º Tnyö~Å’,²HÍQžŽ®¡À„vä%«R†*!dZâûÓ —b®xŒ£PðÕt~mtâ~øÞÃ#^ª@*Ìô¨s}C¡©ô÷Ûøó[ÞQýW^ø¢ëf”V¸hÞi ¸·¶rç§¿<=ž¹ûžë"ÁŠ HGGÙ±ð‡Ðènìå„—Ï$.—ÄPÐþr;/dc߀ ºá7‘ƒ]Çø™ÙT­n§Ý.–a2K%tDg`†¨kQõóêi,`;÷0kœâciöÆ?{?°ßÙ@ï?Å#??hg €3&~çdÏE6ÝŠoëoªƒ.IôÒmð¥É Ò‹ÑÛxZ—uiÖ@5ÏÄrôì‹g;JŒ% ‰­’bQ:ú‡>b¤¼áò)±l»¬wµÖ½>ç€Î¿Î+ãÙ”Ö0í駇^X–œ¢ÕÙF‚,:MБ¥ªh-óŽøîÕÒL°ªÝUw{õ7KᵬûþñßÙØ»×7¿ý º-:ÃWØÍôãðˆ~3x¬Ðz¡.鈤åp§Uî3ûÐЃeî}YËß–Öðõ¼ÙVÈ»( †y­ÆHEØr2½›©ý´¼ä¸ýüŸ¿\Èc¦Œüþtõ„>O»M•¤[>[Z³ ý‡Å{V¹]#ä8R 0‹9º¯`'hŒ€¤Hàû ž-¨ƒŒÌËSÑòÜ?Ôwvæ× |ûGei†”÷šÊ;Åœ)áî}w{þÖH¨Øy@$Í”°&‰ê{óf³ÿ#3ít‰½ç8¯çžÕ‘Èûš:Ìl6YgD"sÐŒÙS1šËlÃóêË?fêÿþu¤Y‰Óç+X`fm„øúe‚öŽ`CÂ3r‹º"F‚ĪÖ]™3ºeæ °ðûÑ"ûîmcj—“DDê¢7ÛÀ(Ëþǜ圇Ïý°­½@ˆ©ýòæEõœºoÎæ×_1o[‡­™rç•#š5+€=”XÎØtöÝøaïJ 3àŽ›_){ˆ e匔™t÷1ÚL©~³“‡ŸœôU{4ÖŽSë0ìÇx½yj6¨²Z“ÚžOܽïiNŒPµò0?%À~¯³{Œ3ÆÂwyhи B$á96ysgþJ¿wó>çåÈV™Luxxk6è­l„‚ŠÕj¬,TÚ‚-–¦æ·¾2O»åÀ2¼*¡2åÆ”Ì‘—â³]`¶d$”xhKëÙ.Cqs-'9BL` ZµGDfeŠR fÒìtëÃa)ëÎmì—Õzߟó|âqú²ðyµ% ¸Ô÷÷éìLû»e)T«5 !®Ïžz2·h§Ì6•oá¦\·¡Rðòf%a,¤Æd\ýõÓÏV¢£ßœÎã¼+°§Ð#»ûÆÄcÿχõ"Ól—ÀÈñÓ¼»qﯱ˜…æÙ9t1[dcxcªšR tše) ó²ß"ݰ¤,$m ùùé’ªž¯¸W3EiÈà0P )ú‚›]2Ãȱ™/ÛÍ»5ZŽƒÌä7/ {Nè{Ö @åx‘!R¡:NÒ`ÖÜä~XÍTd†£0ö\ëÊcy¤Û‘;&³ØQÀ?†Ó}ÝSÜtwCíCEéëÃ;Ó µ ÷¾Øàù_V^_öH‹>d°µµÒ‚€2‚63±­ÍñáKt¥éæÑdÀh¦öô¡Ýp€©AiVçqš&\%-ÃŒþü„}3_rt™[Ó8=8ÐsqªU@Ÿü*î>l''Tè{é—²j»×kiÌÓMæf®u·¢b¨_¶"ÍšèÍw§ø÷¦œX«l,cò&¶ŸQÑý6vZßÚä`5å7 ô¶X,Ž«]þ¯K»~Ù"÷~»õW3Fá’ú`ÖZC¤ ˺Ö¥µ$´{Õƒü´X»´> U´#be!b"º–J·x¸5ߣ7ß4ºÜ¨e9kù%StƒOý¨ã-ߎËÝíøÝMcwD¸sdV†¸ÄgÌÀfÍ«–N¾T®ÖîçÈï^“j¼>g`žjcM†ÓÜýþò­‹“¼£–•¬ØŠ ÿƳj9x^]i§¦S{øøô !b‹}ßG( ÛÖGDç‚¶žZn{„ÚjŠç-«©’%qÜZkëÉö¦;Œ…’dE¸3³Ž6ƒÂfA¹#öÛì©Ȱ…ÙÃuT’sÊïÇ7+D÷q £` @L4?—&4£YLûVR@Uå0Ó×°˜o]o§Šp*Fú«ÿ÷Õ³ý£kJ_M1Ÿ¿Ú#öJ9q\†v9Q±Á–_½åúé‡v½Žx¼4»´O¦!C6éÄ’)D‰²wÃŒ¾ì qì׫Au–6*àM9f}<”QyÖ€·•š­Ã–HÔa©~ëb„t60áf ¡‡¾ MµùÙñÎA<"®×ºîÛŸ¿^ˆL„¨1T¬|~~x|MP®Yäb'oÖ_žÃeØþݫ՛Ü?EP°™Ö 3Cà{žñï\œ Œ£f1jnÌßN±üðWå/Œ¶6#`늑²¦RôFøBÊ5s´Öx©("›4VŠS´Ó‰#бµzÛ3B"r×Ê¥`Î}ú¤˜Iæè] }ì«”6Zsf>4nÁÊ¥~ódâkÅhæçß_Ь”ƒnèëy‘r’ZUgÞ`ë²®«í죶òîά<Þýë'r0ŽÜèkeåK ü4\=ïñéz‘"ÿñ{ÞpV(îñ霨Õ~øáC{|úüë —Óúøp^—†Ý R ,M®!‹ývÝŒ¾Ü` ΛYx¾,[kNnm]…sË—ÓÓ—}·Ýã†ó©Ò˜C¾˜¢šþäÛåNШýùKR£gŒ°•zÁêè¶ ÁÅý¯¿Ä)Ú;a¯ØúúK¹t ¼?ÍÓph/t±(ÑâËõ/­iìÛ¾¶f ;Û²¬ÉfcˈÌM?ëwê5ß·„¿]eÄ.ÿAzÿõâ[óüÞ$@˜û_þòñã:Nç}ìòå¡ùT„,JfUO^Œ/§óé—Ûvºä3–5Bô–çg€-'‡rd"#+QçjµÃ4£¹|ùípÔOn/ϱúâŒ1~Áå§ ÑG×bœ“WagH’^@9Ü·“—oÇ“,@möüb–½‡r 8i$ +&kÍ$;:3ÞNËWW¾JùÍK¾ŸNe¦Ãh÷Lú÷/ÎÛß³GåA¼½/Í×öá²z[Úéñåy‡{[Ü k•;ÊLޱ|úøô±ÿ÷_~xÚÿñrr'|9ùõÊšN×O‹U¢H@¦Ï¬ÑÌ\ö ùþm¥ì=<†al·Óó¿þpæØ7,NÐ}T%íQáI¬L@Fª6î÷j¹õÞó€#€È1ÈŒšÌZsÝXÀ øºxà«L÷7¯ö[<ç\”#DÙ”èùÿù«´ì[Ââë³0~ã IDATñå¼.;[N—§1àá^‹ß`öäOæçLjíé§¶ÓÏþ¦Óz^®?—îGŒšNOk&GïL{¶WÌ Þy ‚ ÇT»Uþþå¹÷—ëó_|Ðè„»ÓkÚ$T¯Úk2´¼„,Qû eö»Û“p$bƒŒ¥Ó«-Z )‡Äem[-Ùww&PH¾ß¢¾‘z¯‘aýëíÎã&¯Ïïî›f¾œ/ëe5¥¬iY-ÂW§$Vyû €1ϧøÓ¿œ?ý€óÑöS¸Ÿüá|-ñ×PŠj~ùpáe%Cçœýo½ úñu t8Dç´Œm‹amÉýzmÖ·¿½üóÃi=¯MI¶å¦ã7Þ lñGŽÌjJ+ÝÌßÖ®®$«†C ˜©Û,µÈÖuK2Rh¿[ iâŸØ`ïÞºpÀ²«‚ºßê·7ÿº7ż-ëù´.­D;h¶ž.“|P‚Æ„ÉahTøâìþ©]ÇÉÔøðáËM&¤êqò‡K; L@1Ü5á°7ùPBp%N{Þ`¶õ:n·Ï·öôé§Ë›dÎNÖ»1#úëXþn¦ûÈ’ie± »€a¯fpæb9Üד2RÒÚ¾O ýÁæüí,wÍK5ßɾ¹øõ|~å“|]–µùl8ÌhË*fJMI{c%]ÙÜmÙ½GeÍc˜]žþ±Ñ%Œ ;ýð´ÜzóIzP鑺jÿ:ðšv)ÓwˆÊ‘°¶*ö±Gÿxn¤Õ»›îàÍ׆Ή‚$Y ¿“”Ótíí°¡(@è"”Ðeq,ŒÑaë2·ÏÚŽlÝ·®öGù»of'i< ejk¿É|BXÛº´f ÍÝ­ÐVѲÒJ¡$p4z*=Éú½™ŸÛPjËe!ÈnFØòðÃÓéfÁÌŒÁÑ §<‰ ¿æÏÃÖ¨®‘t!•l=F·†}üs»î}j1[—ü žÙ³CÐÆ&=†ý0V³*ì³ð+Ñ›¥Íô¾&c¦Œ¦0øÑÇ´øñ»ßºÚ›Û¿÷8+âdéÌÙŽr-HdFCª”zî½ýµió —€á#X´;4 “ÍO„`Ír÷æ›駆 ‘"“m6•rQp‰¥9èZ·AKÞsiËOñË/×'ÝÎÞûÐéôÓÛ5j ³P+Åi5³X96w°J§ïf³X®F‚Œ½ñúÒ¡ ±Œùa{¹~¾þ—Ìœ!Æi1ÝMSÅo¦Œ4_1ñ˜9§{r³zõŽÆùš¢È ?0³ˆÝÖÙ:­Ñ·ÛnF:Úø½Ýùn½Ü_o6ÿ©ÈÞo ²ÚÓ úTŽ+ïÑQ¥º_¿Ý”n憩¶¸»·¥]Î+Ý[©Eï ÷v$ HÀüˆõàÖ3I®†¶,žÎ P7Q±žžÚHR==RDöc¤ÉWá»K(áyãeKú€w„Ï»=´ŸÙ5+¯^ñkÆ rÕ³Õaf~/ |à~!‹GÚõ~”~owÎ0ððhîK•Œ›ÐÊFgª­•½™¿¥ D¾ßåÈž½m,‰ð¥¹b$?5'Ûéütr­A%‘0ß©Âÿ#Áb¯@õ-ÙŒ­ybYÚ_~ù°%‘£-àùÓOP”Y´ò{غ6õ€z ¦ÕFy礥$cñ‰syÙTàXÑa¹ÿüOó}« önn ¾DÔDÎeRÃ%Þñ_F^ø×ê:  š©Ç”³µ`¢¾{µ·Fñ½€™Qbñ` Èn ÎŽ°‚í@Ðbä›%Ãwçºî¾_¾>¶º/2“-mq“ìôáÏa“¤Æ¬úŽaüi©”‘Ñ·lfð¶€fÖ>}øÇ $ZÓí!‘=C×ÛÅ3öÛ`׈åd±¼åòŸ³™‚Œš¡ÌÞ“’%‹Æ”½þp@ÖLÏ„¤Î¢*Ò§ôu*ô5H}ý¯Þ¬lma1§_•>7¤ké^#¶k÷æ auÙ÷ûZ³ É–,$h2dD‚Å u컉Y:PáâæåÁþö:8¯#P|“óÃYHŸü4’2P«‰‰¥¹kß‘µ:¦“‡ÍûɮկvMpiªKJÊñŽoÛy{Xóú­7g֖Ŭ}Îvúð—€7©NËû-¦1'(×ÝN$l¥p7$EÃãÏ4ÐØùÏ¿ýôãdzoæÛÐçØ·Ž¥5S¤³5}¼)%©,ôB¶‘q»Y!m‚h9ù/Jð}s›¬|9Žóóýt(Ÿ·#~·Ó^Z*# ¯ +…(°€:¿3_Ýî­-¡‘æ³ZpN”|[MçdÉygÞ-Æx|àBóeYLdµÜpyøøñáÔefoÚ¯òõ~ÁYf¿¯¼=)kŽ"½Äúáì·êoÊõúoûñ¯OëiY0¶}l=]Úc˜ëüU^@šÚZ§æ­'°³÷$47ë# º>W˲\Û¹–ó3¦Ò.|@r?‡#¯,‚‹Š]Èâ}ûþdÍ{Ä6—ê¸õ!cMB¬:뜒-B×éµqv^ N„\å½ïQ£'˜ZÏ|´\mý4†°\>|út‚ˆ‚¡—ŒlO3Тqv Ï:°ù°1FÍ,iy9ýoÿøçyž #púpé¿|>Ÿ>><µïÃdnT ºå‹yX#Ý” Äh§^Åm0}=q»-‰åÂÑ/í)>ßb‹g[SÚ ª³’\ôk¾Ó¬£ìç„ÜSæõwÉ ()((wëµÖ¥bV­CŸäµylZxh­µÑÖ®µáñWKœ¶ïMgaоB‰ðé·©B¶ÿ¢ ‡>lÿ\uÓyÕ¶q¸è‡·p,Uo%ÇÖÖF_=íáiupM>;}/LNQ”ckS<"àŠ¢åŒ:^e{|º|‰8Q ÁofKSûùå²O[ZÕE`)I%*ÅP}µ€æƒ&ؘÌH'6þ ý—gŽ0ó…ÿfG‰Y‚ÔkDvì´¯¼LOàw€ãégÏž”ò6§[1‹·,&ªßÝof²Ú‡k:Ë:IQjÔ|5”3¥uܹÕ¦ÕLÞ! ³w”†Ö…jÞµ“-§Ñ–ÓR$RÇ} ß>Ä ù«¯Vr`Ù»^EªïKàòøÃ§ç}O4Ç@¦Ò Ûíùôÿ“önK’,Gr ª™{dVU÷¹…áÃ>p?`ÿÿ/(KY.‡; pÎé[UeF¸™îƒydfuwõYá.ÝR•ás355µåxì[ílŒ:¦4kf£”#q´Êw¹GäÄ–9FníØÞ>=r ?x*uëÞì“F\\™ëtø|ðgZAI'©ÜùÇÕvN*Ü·ÆtOÉ`c_¢úžßF_LgNW€c7_óÞ¤ÍûÌiÓÿÒ^|å<㧤- {™P¾½3»õ¦îTÛr,ÖtÆ„TDäð 6³kK6Hú4Ô–Æt‘¦ªh.Íîÿ!?}|„5·Óè1ÂÝ@­«÷¥'š!³jLc•¬ÕìÓê$ˆÆŒó&žŽ¡Þòc¤¤L\ú¬Ü¼y9Q¥/týù× +d5 Ãl÷}ý±2öºÝùV´Í Ñ­-£šÛ7¦“Jšûñ»û¸YïkÕºà <îÏx^ÖA¥$&y˜$mêÝîàÍÜI7³åØ%’‡ÃÑ3v׿|xe„ˆ %w‘ãºåšæÍw!Ë=¨tŽþ§y÷¼º7ªrÂ#Îx[·Æ–tgn™™YVŒK“”! – ÛëyX+³Ïk°4t¤¾Y]NúK8k[¿ð\*ìƒjê+! ÉŠkȪQ” å€A ¦y«^0¸5ŸO'…vÑnP’ù¯Ì}«Û—ß[T­i@_F™sg!j.1hf´ª!Q¤B3Î ½·.µnÇf’ÄšÞeNœ™Ûf<Ì€…R´¶ØÔÏ› aœÂ~ß×_>ýò÷Çó鼆µf¹ÅH9¡|6wwã–ægÿ.Jm—l²¥úùV-ÒX×- Œ±n[4p2øoŒŠQ”IƒÈ Äžs—}‘&ŸM»il%2r«j>äÈ 3|næ/ƒûÛéT€)»9aÞë"#«%­ÍIfÓÐðÅ÷’ dSÑ»`º©ªòƒ"½Ö°s¨õÖª½ÔmVÓcÛšò‚#á ’êÖ<ÎÞïïtÿðîç ‘°¡ªC ›=ã pkY¡ ižÅ ÉéD瓇™lxþø)¥)lΛ®Ð”ŠÇì…o£¼q-.—S0‚m~‡&ÿ‘“5FLöo5”nóä²× ¥¿òËA(9%-ˆiˆ®m!¾õí-éc“/Ë@³KøËs œˆ(0fS#o†¹¡ª“H›ox“‰e1ãq}ÞÜÖéHEÒ2ãÜ3îÚŠŽ\<—"|äe¹9ænŒÞï`l„aåR}ö(C1«¨¥Xb½£gDÆò绿þúéÓ¹3¶ªÕq†S©È;P§øî÷}„7$"û±)·!\¡Û6>Mt[Ž;ÿëݸËì]uºíaž‚­ä#oÞCÒTÉv_ƒŒiÚf‘#1 PuNÓš»•FŠ÷܌ضãI SË¢Ï'rN§Ø¼¢/Îbƒ²Î©rAæb`LÏçÇÜó6Õ'6&ìM;eF$"eMڜʑúáÀu…›— bôÏ[ééÄìî—£G á´-%d¢íqðì ,¶mÅÛþæÝû-"Ѫ7Dù„4Û™èo`Ô„àbƒ¹ú“Êõù4Fk),œþ„Y™·×i_ÕçpjóÝÄ/þ"|þóë‹ípÔ|K3"/ß“3°y&[û\ríËéL;0GZN6„ÊåaЩ°™¬!÷Ö qyÞ¾qW¬mºûáÞ̘c #’Mcvhްåþ>?Úáì-dì†/ö”ý‹­ ´›J³ lÛô8pI²NG/›7D*¥1ÔÛÁüy;¯aY —@$OÎÄòömº!DŸˆ»MYlÌm{>ŒÆHy,ðwÀ”„™Äž¼<ÂîêÛ L­‚Ñkž÷Öeüì}ë;vŽŽÊïHø6W¦ÓÜŒˆ¾ú§ôô‰¢V÷fÛ‡ÿr€W›ëφZ_8¶_^DE³óð¬ôš] z“fˆè­7h}ý›4º‰žC ·ç~´ŠüÇÆÖ¬øÊ]DuBÈÉ'YZonfí×á µloÛ›üËW˜!ÖuXÑZž‹¼d†-WxÓßßkôÆìÈ ÿ6Î\Ìn ·Ù¥S:¬êñ>Áæ–U)H×—V'†ÝÛ9{œ¾ñ>6¿{³,)Sÿôð÷Ÿiìw~?؇‡ ¹(ɰ.[ÕôiÛì^k¶ 2ó§çãßÎh3Ì$×Jxp£Íø3£`—šÝ¿™WAÕ–µfF&eK§0OQÂaΘ­Žlò rzcyûÖ×5Oß=ѯè¸57ÓîIBJ›· Æ©O{Á•v(˜Í>½±rr´ÈmHíÙ%§çR©§Í-¤ÝË›»¸oþ‚Ä4M‰~L4Æä­øä€cl@sfñÿwê‰@«b¶äž)!ÍI7¹™!Sjvÿ#Þ??3Ö¿ÿ·ß=øž*˜÷_óm¬ãt:7·Ö‡™¹Gl¿~J÷ýÐbñ™FäE{m²H¾bpê%÷„ã¾/>HLÝ Sµn©/»¢OîÆ]=ޝÊD5#Ì»0]e ÀPQÚ¶§Z$îÔ¾‘9¼I°†¤0¶\ûøfâÓ§uÁ¥4\9ÜILô¥Å²+}:ÛÉ ˜Jé·Â$q+Ƥ/¤ôý`(³ÑJóObÌÃ]՛ͻ"°µ»åÐþôÌøûÓßþßö'›øZˆí|z|\ûbÖ*0íýéiEn3Mca"¶WˆÍäËüÿËÙf;ÁɼN^þW=½¶¦é³é„a¦Ïê)?ŸN›™åVŠ¡)H*ù"²ÔAkèwr<@3O’½o€u ˆóãw0©î˜±bmSn¢r¬êàrLä*¢™V[i¿"0´Š•jFo ýŽ­KIÇ4œ™Æù5ŠÙSu­* “7·3}ùÞüø³q{·bý§¶´Ù»‚à9†r=žO}óƒ-$¡4µ8³ÅÚfLT= !Jì ]4|yÞÌæÄcÉkÒ~Í¿ÛWµ;›x¹×“NZg[¾ô¢o¦“’`†fcFU´Ô²ƒT”µb¨¬‚&·Åad_¶5u¸¹òY¤{¿[Ö‹_€˜·Ö›CÍÞRaa¬" iïUB` 4p²;²ùÆžáÇ–´¼0ûwcKLìj‘! «£Öu.²{{Ãó*çóÏwovª,!è°n¹­±×³¶‡.ÐZÛòÇlv˜s#îi{Þüülð¿œÐi¬/Ôµ‹½¬ØÊ“ØNùìòei”±/6¡„¯N' #É4²]hÖ31 4VF5.5#&DDïƒcp„ëéO«P¸º”ÜÝDïNÍ ŠÌº[fVÎ"uìø.V‡@ó˜wåSîˆË|NeffF¤`l&óÉËÒCÄ0»;è—_ãðæayf÷V'¡mÕ5 ­c[ŽÇå@?Žçg@‡1Q Ý㜰ܕh2/QŸšÐœÔ¯ÁIÝÜ?pÝÒ—ÃcÇŠna‡ã±e%ЄW¡„FFK‚îBÑÙ ©N‡ú»J›Æ>~%>Ý3&1Îÿvðí¼ŽÍ3RV™]Lö@Aܵß*>Úá’Ê‹‹SôI'™Ç!*cïeõb‡^BJ˜uG£èÕA›ÕÈæO-Ù–£aœ7o=çfvÜNÛ@=flë'kÇöyÐÖöÉуf¨Â›;ëkÓ‰‹ïC*Géºá>;®Š+˜ð•ÓÑ»k‹íü¸¦}Ñýäf:ËÌÙ×Û4UufªŒ˜¤4wCõÈ­a¯,~<3‡L§•–ûÈ\žeüw>Îí&Ô8óóãY|]жёhÕSD™åÁ3u¾ofÚîC™‘ÝÛ§§GAPS—½Ùc1+ ©¡¬/£˜¿Ö™DÐ@3ä ×°ï4¦‚Ýò@-‚Î1Ôܘ6’Í!ºVy5OÎÌô´–.róu$LȦÕ}<ÿúœyÊå!MÏQèÐG58ÒY¶Ò¢gDŒ'h9«ÏæÚ è0›YïêK ûËÙ¨"ûÌóUrœ7Y£ï-½çR¸Üòjuc"FÓ ä»G­§5¹Ã°ñêÙ¹–PÝN¯âš) ×–¼./@ÈË.ˆŒØ2¶5¯~wʇE*Š#áëmq6oŽM¹¸ºEÃôAæ®ðq[DzÝt¤ Õƒ™L«bjiï+Osš;JT“Ù ²@ŸO›¹>ÿ*x2÷ÖÜFBô^épB2ArLƒq]¦ýÿæu•æ»q˜$ÁšÜ¿šz¸Îí>Ø/oszV$ü›Ê@[•ÕZ³6IÕN×:q}—*Ï­ç4ò©tSŒq‰‘”êÚÝIm94C8Í0RÖ<•¹5¨*x8ÕÿÜÐTg¥Uµâ’¤ÈËP$l’e‚Èœ-`8?¾jÛ<&k¦JKÔDZ=?ǰ†8ŸeB9˜ sDRhK•w"KÞÌÖiŒ÷ø÷e3ª¯Ì$n|˜[ïW’¬™M Ñ×¾`zTúü&›¬ýÆ2Bh"X6²§MË,ÕˆïÉšyÌ哆‘Vz{sI„Î.£’Ðú²¸",†lßýtØ ÃÝ (oºBÎÝ]؇¥„bD(€X§Ÿ¤jU”eÊ}ö©&DöÖ‹j†™¡rŒmÛN+£5V{:àP5ïÞaHcÑtikx3Ø“þðŸ곿ݔ \6§ØåܹŒ¯Mçu^üÂsm¯U3ìÓ9Ë»˜óߣÅkr»·-i–ÿ…'f ³ Unf+o¶¶ˆæÕÑÀ#ÑûÃaZV8INöu/F*gÿ4Ru¶3‰aV|Ð"^Ó3öt«ddN^a®çmlŢʹÐà³~°ŒÄìÛPžšR`›‡à% Ù¡Îo]—ln"Ó²k{ÿ•oÍh© ½¼‰`nÕõ×Þ¼W—ãaVšî@ÐdÕî¶ó²f ×x©<¾¤‘x›cÂÔÀjf­ ňl§Aw3¥í-«0Q¡‚E®öî«XÊټȰ$k’Ä.±:Ûq˜y)ÔÆë‘p)"ÔîŠÌÙ(CÂÔO5o»ÊÄœg¹rm»¯Û»S·zE;À@N5ËK¢ékW Ü©¸\& ¢…¶ûb:w¾,g–½âjã\‚¥H²§êuYi˜5(»J‹òäÖÄbûË*L‘»EÐ✾nëhž—Bë¸ìNIºj\Ø4éuê¤LȘ|&¤ÐˆŒ¹¬(ILRÀhîæÕÛ¶üìŒ- !)ÁÇeŒrIŒF(,GÀÃZÇñÒ£lŽ«füká¥gúùtèvro$5êP«©}ÕÚk{&¹ø¶Ê@ [~c:¯+­âbÍÝö/Ùs© OÔ^V«ù3G?Êœ­"ꟺ P£µŒm;|"mVHqo¨”ÕþôU"0¡ÅÙ¯º'&¨jé«BXp3~ ˜ÜÌ.¥V*…L ÖJJ¢F'Ñ&`ŸU>o¦ˆ…7›yòÄ|(ÒöʲºPªpcmço¾îÎ05ëY/×¹9"^ÿwuµÞœšËLIi/öžØž<‹Ñ¿×+^w½¤ÌšCð;Xr¶c¹¿2aÜÒ϶Õމ0#2gú\e(vòФ±ö%*œ„µöüAw÷ÇLÑ;¡›$n¢%˜Öª†$Däö\`°1 奇̂Ïwk‡8,¾Ê ‚;!c%íîymõŽd›¨AÏPEÆpB›M§pì«Z4Cä¥ re¡_ô¥vxýf×햯صˆ‹û<Ì¡$–8‰<}jŠ×a„$³$v÷Õq»T(¥eQ¯ª×îœBMì­ˆ°Ø½»ŠÓ%1ä±mcŒ„ZYƒ Ÿ‘—ר+ÊÊÎØáƾlÛã ™I©ÛVi0Öÿ“m¢V°÷ ¹ÄÊdå¿4~ IDATrûÀ¿-ǾÜÿp %ÅT·vÆ•ò¾NÆ{¢Xî‘B« º¸70PQ¼r\¶ãKé¡W¯ˆA4³Ïñ»Yªl#5­à·Ú™·$,x9oÁŠSj?¾þL(.þî-h¾.Fy—ˆéežŸÚ(©R®ludËÊ×à¥ÞÑZÆÔ-莋l[G;,žPŽ å u(³úØ“[-­$AŸ!ô~kîê¤qì‡ßýx×½µfrë¦Óú´ŠfY(&deä¨05½™¥x'/'U%Ôbpã{mõ1›å ªÀj¯î¬×éÜ‹)Šq†¥x¯¡BU’…zƒ›Û`?Cg“©¯>á„nŠß/”Ìäî%=„‡Êxiœζ$TžêÔú(õ&ùe¦ÌÖF4³Aú][Ç ´B°‡9Í"âáÐÆèÓܸ„ÆjÎ{ ÍIõ.\ëùŒõ»»»¥’’@•ŠY[ϳ¦©ÖÉ™½xÜ]4'wóÄ]bѬ 7e±7Qèç£Wß3×ru¤¾­K~I kþ¦Sx}:jZÓ$ªÊá‚5ÆÓ;;˜µ °fÿ¦w[ëmÆë•«&᪒ò^ù½YÃh^˜ ™H/ .;ö:š¸Å|ö+ç9—F#…’a¹:PŃŽ»îïûÇ ‘^›ÎIÿ­²Â¼cŸö|âÙË Åôƒ8Á‹Ûê&x?´ÃÛ‡†~t¨»‹1çßfÝèL4ATа {èÅ)JŤyõªÌÓ¯§ÇmFÒ¼Gº7zD #G» ´Ùß(à™:@fÆÇ‡ÍrÈ;ðï|ù°™-Ëf¬t= 'Dì…kÀR}Ê ÉP ¿å Mè´Ò´jÿv3Ìmöqo˲4×ÈoœÊm44LŸÝ j;â…o?÷XKÚå2DÍ\îþ±Ûùñ´ö­|Ðy«¢<‹j†[´Å$6fQ %mSÏ HØBØ™c}zÿIÝïͼÓÀ-Æ¥ûJu4ªÈq4·uv'ØÚÛ‡Å3Îwµmuo¤½_S  U8K3FŠFó¦,ÑŒ&óbl+ ™o'¤ÛÖˆ¯O§@¨Ž¤9›7»Ï­ê~mé ¹Å+¥€s:g±î<"æW©$*ænSJZêÜéR—p`F‰¦ŠË‚¥÷ŸmÕ] ARN§vkrØ1h%;üÚƒ›Ìäݽ77å9%:«À€ÌÇš¦2¦×1O\€tæ¦p˜Þ8$à Jøã¡½y ðá»ïò—·>MíÿòÝ~núš†=1hæªÖ°~\úâfcȾè1ýÙõ5*ÑœÍ9.Óx^¦}OcïnðŦ—ÐåµRXß}Lõ”¾ ·¥›3hè¨ÌfDÒ¸x^ŸÐ:$x».)_ÖØD.?ÔÊ(“ʾK±¢!¶uÐbWÜ_ǹ™Ug07‘% šºû÷ÿðüø¸~¿<~ô¥{D’ÐoÔ˾~}N³Ü‡.UøDbÊË´vw𱳺äù[d„¯NçÕ*/ÑŒ ê–£]O{ÞæÂúïÿþxß·±lÁÖÕ¹o²˜(ï–A-kÒyinæS¼_©šl„ƒ øáíct#PsA³ôD®§Ñ­ç­ï‰½+Rc†HoFXkU_A ìc°‘ ;ôÃýÁ£Ûêá[ê‚©þ¯\/Ýó 䧬ô˜ù ·¥kl}icœN-Çx½<Ðrj/XïÜܳv¸5!Eƒ€²Ä³Ab%7 C—H&mý×§7v²ÿMÕx”çìùýùxÀ&w7£¥b³&OŸ¾‹Í4³UÖ³Gš/¯ªJ(yç>V˜R9Hnfã郎úàöãêÇ@Zc$Âm Á™#mñ±<Üe4„Î ’摉֔m=Ûýi{£õœ¦m»ŒÏK«õù¡uCi­È<«;ŠlZˆJ90†°ò°tË(/na¿[lÛ,Ó<–v^·„G´5Ø^ݤ;Yò}ÛO 4ãäZ]Œ ßnN^_cûŸˆã‰t‚q¾k2J3GÉ€Ò´F…]à«•57#HJi¥ë¹eJ¢b¤b{~~{ï§ÌÌLAl‹#r!2ݬ=üøfñÞl“ÌrØÐŒ±­[ÒwúòÿkgÕí®# ®9¼mç± ( n²ÖðÃ2éPÖ¨Ô!Ùëð;pmǺãº_Ù7càâk ˜ù9Í®Oÿÿ:…ÚžÿÏÿbGK§ÂÆúpX¤˜†³M#ÈR;0ïÌ#§° nÎâÏžgê0G gàjT[Éç6²xG¤h™¾Ü9G$óe±ûïÞš¬YÁ0Z9—ÌsÆHÑi ¥}5£òåH} –ÎÃë ¦'Œ‡·w秨þÃB?Læ>ùl&`[G¢ò¬¯Þ»Mô¥’t§™½µVf2™&^[ñrïwÛwçø—Ÿÿ)ïÖ‚uŒXéCn¹ÄÈÖLEÛ$6ˆ ž™á~AÅ^[\û2¨8X¢Ïp¸Êvaê ùq¨ ÃE3 ‚âfËÑs“èÖwKr¬ÎLKìÝý&òZ¶`Þ iWêuå—#ÅÏU¹V^É9;'…)ëiÛ^ASDºß¡D¦Jáý°mQ&ìõ5ÕnîˆéúáŠÉ~9˜ŽL)QÔTîTC\Èó7s :ýóz|øë’Ì[l#a·˜Â7Sz'fØ”a{*.¿Ú?´¦s¶Ÿ™-&ß]j3ï:Dpñ죷1¡ZØÖ[6Ò[óÞ}ÉçÃâ@·8é ¼î  ¯[ü¯Y[íÓy¥ËM9[1bŒˆqá˜Ú|)ãn“–fË=ž·-_?„Ú%í5Iª{üùî¼ñâ…耙–ÿl-Î4n½?í<{õmv[ÏKwc£Yì­4 Ðr44)Óy¼×Æof" k…yÎŒ)a ¹Cl©öðö°®Ûc5˜ 3£ùq)%ã8Gª!Ð#½so‚óuwkTþ /ÇC™ ¡"^&À¿þå§cë¬%vz^ZOx²"اK5sËdf±wÎÐg÷߯L%Œ–r+t@”‰Y§:Ò‰ 7öãÂÏæ JÚbp/\Êh rD«¦"œ´qícï4]J|[ÀWQ£:f·ÎùNœkÊš\9Ppï•Q!½x HÙbˆ\¿IAj·ç¶ôúð]°;@°ÄÌU~á¨ïÓ©Ë{üÛ¿<7iZÏo,e+›"R>3„‘)šÛª‹·…[Ìûóç e¢Ô¢m‡<pòïy@vOS8c¨-=†Õy«4¶Å&àhÝ™aÝQ,ì²-óCZ‹ßÌh|õ*C‹éqr?Šø?RUg1ßÑ$ºcæ¨'Y³ê¦ÙcY¿A àÿGIÐïf Yb¥%ê¥úµ¿ÇÞQlñâTV„€+“\2.ÏwÿÛÙ¹F³LÞÅfͼ%T½CöéÊ€9ÒeK·}q‚/k²rž©ÌˆL€Š„蓜‚N¸ÓÜâéq¸åùôýëøÿ²²9RvP{ð3ÖÒÏñ¦”9Åq^~à3ˆÌ¨"|IiŒ¤ùx~ÜëÙRDV£½’»¸î$ºL‘³RQPº7ŸÍ±è½éîn1|Ÿ±Ö›±ÉsøÃÂZ„e Ùùï¿ÚUçóëŠ MJdM Õ^!”EýÂsÛWÜîuÝÄŽ9þúzÚl¼2 S?b{Aï%c„”q±I_«…œ?ìU™.«CÉnØNÍîyúôô—õãzüäÐÌ™Ò8ܳ™!EŠæ†ÌÍÚ¡m<œ¥Ò,Éd:àc[Ç6B†–—¾ÀË«Þ$ ¦e)öz”Ê:cÛ¹q2ÕQgçD&¤d£B²Öæ\®4ȼZ¬¯Lçåà¸w|¬w±éª6eÂÎxzù›yÔåõùë×Ìñßþðödf!Ñ5Î sO¾ìgÆ\¤»2Ì'h²C_Îåü|¦D7^ƒ+@f¬[´<½ÿõ—Oï¶­=ÿÝ·¨†ŽL¬ŸpßF+É"¦{wÅðÐÓö`fAŸ»®¹·óçæK3në„1¯L»ý¾Wökù®YL0ìè š•OÐ4­R€îKey¡3vO%‚/Õ°Ôã…ƒ˜y Q…^gn;-3p3š“ „=N½ K|ÉH$9þïÿò=ÙFÀ´k\\®½á&kœ2Ɔ©w(¡Šõ®%>ºÎ§I€0¡qžÛšŠá§ÿû/χ¤¦Ù^;€ñØÞ´Õ ýÁ”q^±¶½{søN™‰qˆiJÖº:{[9Ì$;Ï#pîMò:Žœ…l¦j‘ð#%Ÿñ}U«’î;ŸçÔ¹… 1Í÷Z!Åyý6hÛ°?È4¶Õ¤25Lm’nmë•rÀ9²ºpa´“éo>oðüõç Ü«>bàܦ’Øe`*\Ú zî+)¡‘‘ôf7y[í£fLDEçÜ•ÔA(òùQþþóûÓ@Ë´¶ìÆÛ™q¹ó}r]óü¼~—øÈ­t=Ë4|9Îç-ý°mÆ1z¤•ËŽ`’‰Ð†ýȪ‰%Dx€PÚ6YòK[º›Yzã ržTÜÑø5ªn cй~ßtÆöòì‹±Ý Vk£k'§ßÌèfÞìÎ+hP³ù"Ða¸ò/úæ––ƒ’a‹Ã…[³9Ó4 lͧo‘:ÇHvµ}:'䤜r š¦vw©Ö¶ÀOÏ¿üåÃû2®©¬ &¡ó£yT™‘2Öõ|z^Çá(Úöñ;¢ÄæD2G¬Ûy Ï’Õ˜Ãæ; @î™L^cîµ:Ú E…W[hÞ››ykròŒw’rÀ§-Ü`=“!)C„blÉ+ôËé,»¹›â½_€4ày««™žë î3¨ý‚p•”Ÿ×vˆå¯?¿­Ö=Ò¶‚zòÖv¤ûê²–’Åæ ˆÊˆ”2nl쇧22Ix%„¬v«¹3ïß?ú‚uÀ-éܦ§$pþào‘ ‡Bç§çÓ:âÍýÒ²ç‡? ™4*¶mUÂIs6»²jv†÷¾ûD²Ê”kw+.›µ.ȤÉú›æ­57†2 DîÕY!g©€ZÑ‹³~ççS®I}Cˆæf Ø%&”¹—­|flyÛßLöþvÆ=ÿ39ŽZÞLŸ8ÈÇ`Ҝܘ+: ¤›HË0H.“{뺽€ÌIZ/ó„½|_¡aýáíïëcÝ–nCëq&h“ÀxºSô™qz|Þ¾tnh½êeÊR 9¶½aËmÖ™›M©â¹šçC•¢ÂÑO°TB›GR¤¶Üõ)uJ„€®tk Sy©#ÍȦŒˆQªŸ>­“xÌW`ۦݹNÙR¢-­›Âhy£3³ÏhYÓV³ œX]›ôŸŸ´ãÉŸü_þÃïÖá|~÷ñoÿø»ƒŸ³{ÀcbÝ ²‘‘2ÃfP޼¹AD¹¶ -ϧ'g ZP0jÏ!¶ïú‡ÿù_ÿr^ðL0±ÈjÁÓÇc=Çç³@ïÇ溶óò®j¾.æˆx ƒ™ÖÇLi‡lÕâËÇp[  |ÚÆÅ2d4“è O‰“Ç, ÷Ø”ãØ-QÚ‡ e4 ïZŒdiII‚‰ÜÞÿ."áˆÂt3Æ!açW=ÛY¨XÔÅRŸ€ ’¿auæzam÷-2Ý¡+2©T=ÞNXsÓÇßüÓ/?¿?· ·åxd‰­ÎFÍׇ«½±;»£ùl¼'ElCëÀy¨ºM.6hT„ÚPþ´üô/¿Ž~QÈùI¤ˆí9ÜÎëX×Ac?–)§Ã±uCÒ¿` n[änB&‹x:~Ò$l¸ºI[ßüqµj2L.=™ ÁZ·Å$v;–mÕ:R¹}”÷nÛ°¾AcÝòµŒÄu:5[qTé:@kn¯è_<Õe>1›®ÕVͶ«'$ ˆæñá/wÏïß}æ‘#ÖóкŽèDøgÖ›Bî<•Òï.åP ·`³1tz²7­Y’ïK†—¢›[àðÃ÷?Æûk€•{µE‚yŠ“”±¤uƒî{Û2b<ÿl½¹fJÚï2‘ez/åÓç””…½j„ÖâŸíl®h–#"Æj #½‡›2@7™©ãºeÆxËñàFyŒói{5Á´OçŽ]ÔŒÎ&6‚Ì|Ï­|Êï.íü—؃ߨ ÷êü®„ñãÿxÿîW½ýÎådž>Ü·± Gç…8rq±ªÓU­._Gä6F¤-M‘Rt Qña„t·ðt2bùñŸ>mO—³M‘Ù2EÏå;»C“„ª±ŽØNÿùÝÒÇZ«ŒþfÛFÊúÝ­$/àM i]¼ŒR¤ºœCÀÕÎì±]d²d¸ zb)¾˜ÏjÃêx‘‡ÖLùqØ›ßpôõùyü&]¤ hÎð‘3“ VD;±~î »ö•vÛju„¨¼ƒ Æ›ˆÑîÚé/‰öÝw‡óÓïºmñøøÀjd8—ʬ]瘘v›VŽ65g722Ô°£Ù uZ‚ÔvŽæ2Xd¦š­$Øn™*Uò™€2½üž„Ö~ä¶Éï3ÇO÷mÐ-éΑ!X Ã.M‘iýó¶$w¯ Þ—¹í–®~ Rª6€¹û\DÕ*Ôì‘§U½#‘9>!îzóáíÝv?¼#No›åm”zÙä$G¡jqæÏ Ð[K·9;™[µd$Ò¦BÙ_øõŸÿítÅ 9=ÖT1 g#º+3¼%óôŽî½Yé®Ã[ÛÊC­Mê"e7ãåý=‘ÉÙ~‚´]sf¿e÷#««d´™Jô¬Ì½`f —paäsÑõµvó¦a=Âz¤µ~ÏlßÞýÞ¨íc‘ÆvÅ.ÓYJU9Cô«±M]›hl½Xž9²Ú+f™¶Z£"t|þë?ÿ,;B“Í*Ek1eŽ«¸bÐ"†!³[>†÷¶‰kºcq£ÊÌcLÜäMÏÃ2S(ÖÚnK^.ÆÝÌd*,Ã_Ž_Qµ5³Å4„J,åþtnßÛéW¸aÈ«F%ë)«fÄ›g­ß9ð‚ &ðz$í P–Hs‹3cJÉ–…¼‘™}3K_:ÛX%ÿçhÚ>DüxTfÏ`ãµÁa̹‹Aï×ñPа–íØ {Ë0c;ŸÑÖ¤†y°%3¡´åü/ÿüÑ7Ý])©–SF'|&s6)`Š€½É0„¹Ö_ôôYž¢-çÑ´±4]§ÓC$¤U­N5Œ4„£è]u.âêK‚c|ú£a5>Ä#‘Œ„[ÁŠr\N¯˜Ïhz–š+eÒ`ÜòuTHʘ­ª[õι™$ü™×žÕöÓ^aÖy‚Ö5àË:3UìÞšÕ©Ÿ%ZXÊð mn%¥:ž¼×*ù÷ðT«ùK €¼7w*µÍÚw^÷T2!ã ›Þ¿ÿxNF\°ÞiAÓåHÆmLÒ(Ñ2ž¹~w6wl§ÞmŒÜVf¦rDñ§I™9Ÿ¹¶v€ïæqoÞ`߉œÍ&<«˜gä¥ËÔþy^¾¥À×â}‹Ú”µì N•¢¨ ØHf%° õܲ¥­J&Âr³cœþú˧Õ-·›éœ^¸}>è„uxgºåöéôp|82FébKQ±Dkš„)•@b*Þ&~¾^Ï©ê.éÖåÕ‡94Æù³Õ»~Ö*W“ —›m:ÕzœæfUÀÉÝä¢D¾AGñ=¦Dà…ÅÂg¼ýÃòëÏ^xmµfu7kl™c¤èîîm¡5FÕ0€ôíü©óí2ê/ŸŒ2z y™}+SQ’ÓîC3X«ð™yníéÝ_ƒ¤]e&¤c3¦}¹m$ ˜es 5aÿü»Þ5üN‹#Gn«d$ ‹Snâb|+˜"ýz¶íõœ·÷át½™ 7øeŽØóµºýüÍŠË2 %¨ö Sh4Uzxö#I“U«lôƤ¡Z‘s§¶C2úýÿèØcìÜÒˆ`sä6Îmé­5W§y°ÙÌ·˜ë)7;îÂå_Φ9í¥Uœ™!í81&åΪÃ0ÌL†H­¿þë;×ö"hbuèú"‰*å³4‚æ½Åýa飙(³h¦¤<¶*o ·z¬2{—þœ?YÃ[›Ú»'f§ùTDØôMnðlž€x%È*½µŠ¹ ^R=s½Q´‰ˆ‰t·æimßösmˆÈ$?ýù§e}øÇ9?0Èb?÷Ü=ºwoÞý ¥ÁœswÊ´·åpô}²>ŸOŸÚN7ÃS:™ÕoLEÏ 4¡™ŒIÑãù×÷‡¦«rH-ÔK?ß÷Se¶¤@³Ðñù_Ï~»$j ³fL£Ã±‡I»gŒâÜѯå´übs–µaIYY·ˆ’"r ¾~¶ÎŠû\ó •þYÑ_s…r¶+1¦ KI¤õ&w%Í+‹©YiF8„Ù›ßýt·nín}´§`SßéÞÐõ$ëîÅ3L*ãôñØé|Ÿ]¦ó¥¹A‰ø l ÀÓ8ÕþÑš; Xz|÷ëÆÒo¹ú ­/£Ü盓Ñãôî°üpHeš-i)Qˆ‘œGÓÜY‡’y³Ûx_nN`º ÌL4Ž1ý™ä(ÆÖÍá°W´jD²Ô½_ŸN#¯ü$÷zÁÝUJŦ²BÜ-÷!ó?¼áH?µˆ-¥JÄR¦ óV€·蕹I“äxÞWÎçÏ'¾œâ½r'È÷–s·æžÊ8µŸ~~â‷7q3+Í=¿`^Ó•™M¸ ‘læë8÷çñ‡¡Òžè‘™!tU ˜F°Zð™ûË÷øÌÒÎg(álɱ›La¢k7ó¤ó1 IDATk¨za„Lí«‡ÓœNTêT‚â~ƒt+ì 0ä­a8spa"£½¹ÿ£;=×ç¥gŸCg_”òæ)k¾CÁ™ýœ¶zKëúXG3øáþnÐHÇN³ž^Âÿùçlu¸ë¢"gßÙ$‘†–8žOd>z¿AÈ-^ ) E~[ÆÙÚ¦¤1ö'ÝóíÇíE~‡–:I…ÏŶœ3Ï~|d&ŒU{ã¾ì_ÇYh\»äj;öhÀuâ’¶ŽXû²’QêÌö#ª3ÌM¨‰¬ßj£½>osÌûØ#ʹBvÇ2¨æN•ê°Ë5d?¾ùΙ™ l¹ÃyÛo³’¼\´2ûÈÝÌ»Cíxß6ØÞPrn}Õ–ü¿”½Ùz$I®4fxD&ɪêž9³|’Îÿé1ôþ¡éêè;Û̙饪Hf„;`º€G2ÉZz&.Ø]d._ƒÁ@ÝB-2œäZ™nH´ö4ž?=ï9¬È«×½±Þ+ÿ±~PñÞbìÖ¬mvæs>~:×" 0ܵµõ¾¦ÿ-ÔÌKdu}á§·¿ Q2ŽÐÕÀ/hâÜi¿áÖh²AGÝáŒÏ¦5§²¤…:©ˆÔÉN—¶°kýñ_~8ïÒ=±SÅÿÍÂp_ò­¤IûXÍ_ÎwM=¸¼QÒúÖýÎ=RÓ—I#ÜM1â9HÀí]~vÈ–KL¿þö“çǼF¡*³WóÞ<5¤<·;u¼ÿýÿúãMv„´­™çSàðÐÝo¥÷”¤5—äDÏ8J³ÛR¤GÆ`)!—[0Fµ»­{=š™ãzVóà¾Õ,¹\}×!Â6£_r~Ò(ÀÃ-{ülíó°¥³½ûýË)‹!²­Üwe)YY¡ÆqXʾ¯D‚\Ï«O~Ù-^À p¿½QÍÆ*?G±™åèûr²ÜŸ·ý’NÓðw²öëþl’™ÑÆÍ'AÎíf«©5ŸÆ£Y*vbõ½¯¿ÿóï–˜³g”j&ïÖ|¼ =˜&Uå /gýÂÆf¤;¦sÌ#l¬­Í5",ÝIE&€$Q­ŽY‹#Àšn‘~Óœ÷ÑwYé·¾,†ƒs²Z3õLwfŠÍ×±‘q^üpŠ=H‘‘œÄÈjHÂÊg¿°ârlm…ëùÎcjq‹YÜÛÍ™06„Jš„ˆÞ£gX~Ú°¥‘êl¿¿ø¯¿~ºë¢½Z¿ÙñCIRG³èTîHÆéz—÷³Žge§–y1žN=Ræ“,ñâkvÏÝW<û»®‡`=) rYW‹ˆ‘RfHEjŽî+nÝÈíÕÀ3!÷ ’IûÝ~¹ %ì€vçf-@2‚mÅÉctïãr¿ìÃï~ø°FO 3SªRJ¾ÚHp)4bö‰Y{‡ÅÖl!Mž1Ò½Œù2ÀÕ;–_ÜnÉ+÷±­$Õ/»¨ýiß÷kÏ’±ía=­{ºÎïkJW—è˜/3± ÐS{b{ÿLJ=–J!)€ÝbÛ—ÅÖŒ1»v¼ÂãÆ¢Þ~¿~6`òc+óuP¼µ†B CƈÔQõã0ÛÜÉ—3F·‡Ä·P¡bß.[™]?^Íéná×{,\ÚbÚ6¶ûw ÉsËw?ÜkO2‘`/ a*QÏ¢ ëH@H­~27S^BF6òØoæWãÐp_rÈá–ˆËçn‹õÇÏ—$EÈß÷»ûuyÿØØk¾€‰¤ÊZ“‹ÍMP^î[Ûµcú#ë–t³è±BË%†éX&/4?Åxÿ¯>‡2bDîªéžÈT&Ì–ó]CĈd(,gÿ–¢9£JM‰üã“uµèá±~ÝœæË]ß¶‘— ”àåÚ®ÓøÄìÞÚÚVÊÍÎ ·f§»»5ìÜ/®dËÌLsDË® ‰FeÚªÝN£y ‚+úv:™rËf¡Åú~²‘;@£•ëѰt5 ®eÎ fÚÒ¢¿ûøqÛsµûeçÒÐÑ °ÅŸÛî÷ÿïì¤Éí*O'kw¬ÉAÌy3@~ñäÂÚûûwËOÛøÏ«K†X2è¶o÷Ï7ß6ÿñ)¬)ÛGël'Ð.Ÿ>¬ï´…Å6xŠê `©ŒÌÓÝ‚\ÎZ¼€éª} ™å2* D•näÙÉ;|CY¨ [3Ö-ÆÖ•­¸NUí¹Y3÷¥†Œˆ„£Ñß-–Ãr‚Ð×üBޤržÙ`R23ѼU/æˆÑaœ-Ì‹˜}¸a¯]•žbìKËéžýt~úùgÜtù€è;2––ð!?Ù¿zûåâ,6‚nWâuY–"ļ®±6”iÆ{Û2rûlÆHw·Q,ÎË¥GJZNwaÉÃE™á ú¼€`MÈ­1O' [ï £õ“‰~¨Þ\×[¯ÄoÑe\ärÎýiËÏ´)Ãúˆ>ùyÒâ TŸðÖVÝ1S’jk[–ÌȬÍLH£)$†!F:-3F¤:I'ÜeÌ8J\€/â”±°KœbÞ ùüôÓ¯Ks(Fï eR2}ñÓ¿.ÏŸÏE.©)Â7Ó)½£Û£¯¶<¡Ùƒ.‚Níd%R!÷çmÀ2"ÑJÖþÅ -ž h¦˜a’Ux²Êç°.¹¬&˜­¶H±ïDÆ IR¶L{E'טŠÓ'ù}U¾6q/²¹uצî4kQù¦XÌͼ׊±?(S¾Ynk‡QM¯2 nÀpŠ4 I2SÓÈà1ö~¢Íºò£yu/_ƧXƒlì3¿ÄäÚžþç§G:ŸÇùôé©Ã¥ÁRí±tD©íEKkæ7^\,Í_+sò]9W'”­-mD@⓵scß\\[ô¾¤åØž. 1½t,w1aTd³Á«½hµNPº¯¹,ÕþÈWixTËC$ŒW$iÞç Wª˜,å’o-Ðvðk)_šyy¼¨R¨'c’_Ü“N¯jË1bövK•ISYôu„˜;)2wÇ1òÔv3Ä>ÈqwªJË+ðs{·DªZ•%-4}úé/¿´Õú¹ïvRŒ>ó¦t³¶Úþ·ÿøî•íŠÅ½É&c5¦°reªºYhKÔe§çØïßß/‵TŒ}‹ÜŸû.dVËõJ2LœP÷Lr—_'I¢/çû(nŒ"3rŒÜQ½D /è˜}¥êÄošóÀL±µc2Í›€¬üÏLyó¶ʈ¤ оkµ qFDL*iÈ@7ĆZ©µn¼Efï­ÑÌrÀüû^–æ,F›#î„9r‡r ´üûüm´;më]»|þ([›bмˆ,¤ÛIÿþŸïqÍYT[Áƒj¢Q¶žš6©@Ö6›úÔûþÔíaÝ”‚ÛåòüÔ÷çç;kŠ+| cq‚ g!‘™Ì’Žƒ Ûù|êDÄÑ£÷‰NB4FÄœ˜·àèè)äÙÿª9g-EyÉj.:ò¶"r$óCĄޖ–JËL´Hd I(ÇPD¤Deœ²KûP†ƒ QÑ¡¸p,’Çö 8Ìæ©y•×DÛŸùþ}K4öíi|úë_·ÓÓ{&?ܹдoÞª|›¹ƒýã¿ÿÛ'h€asõ$_cׇ_mm„eûìc_,·}üî<ü¤Ÿ??>Ljav8ŸÎΓ èƒfª&ÛÕW%¦±mRŽ¾Çž!0ªÉÓdÀ*0Ïù™YÂqvNW~·L¥º¥äiI6{ô”­mÆTÏÅ2Ë­§×ÃŒ èÞQªUšÒ8Q8\ôÆ“EbÆt‰êØ £/©fÏŸÑ[ƒ< ¿ˆ§–Çÿøþ/~÷A€¢ïÿëGZÿû‡‡þ¹ï»(7íÛ©Ä)€1Òâ§ûŸ¶Ž¾´ãS~Êz /ìÊ®u2¶<ûþøøñî݇»\€?l-†lÝ›çæ^MDÁöfŽˆý3½92[Oa×ö,){;˜[HÙåcñÍÁpDCßìÓXæÜÍ4‚ì­5×þü:¹a?¿{n¾­î©ÁœúHo{DôHEË}ŒQ¤Bcæ^ó#·õ´´Ô‡/á­¶HÙ/!»óËr?ÿé_Úf³2ÈÌÈVy&{ÜþûÿÉ¿ûãÿZüáþ^ÿùÿþò¼¬ƒ«iß?~ê¸cËÝtbï˹e¿øÂ§ŸÿòË,µÃ΢‹ 3²Ÿ.¤2_Ú¾¯¢±ó ûóøËÊÿë÷ŸòlñçË_·ÿøPTU¸Åކ.Á)íŸþtiAËãdöµoù\i›™œœ¸n¶Â/«bψaf˜ Njö&§ØßÿÔ¾Õ§¦FЉ*\ïËÂ4*veò(­5WÀZû·¥¹¥FŒ12¥Å|¤‡¯ðeôlXIt˱÷ï#ýý»÷+B1(Šc xüŸ_¥ñô׿/¿û—ßý>×OO¦Ä©÷íi»YŨ]ÜϾýü·ÏºÙ@šnb¡W‘ÝÑø¸‚›ª¨ò™Ù·ðýôÓûsÓX,üÔÂN•82ÒdÐ23i•Q²E§ãM}’˜çö^^6~¡’1sîM¼™_–f¾5ç(:‘šЈÜ/miJÄέ«¨u­Î‹ÚyÍ_ùÏ»÷ïÏž©ècHµŠc­G»6WdɃ‘C±íݺª^ìþ¿?íq¤gåÕ—åØûøüo?;?þü—w<¾Älg¼mÏ—0ßB£L‘Ðb}Ù?þå'ŽÇ®À>–:Ѓ¹Ój–!xì³…¸Å­k˜‰ÿôýñ2ÎÔùwŸ/¹ök`iž”› ™9¢N_È}63].ÑlÊ™ lõÊ4Óÿ³„ <€9*šÍšç4û¦MÛžjT*ÃØúó6Л3²çe5?ŒfUL¡ÞÎküòŸÿséB,3#TuB3Ü5CQ¼«â1±Yk"€Þû™QÒ3ïþðÇwišýÈâè\cß/—ýñ¯—sÀs‰üôñ×Ó%` ±?_ÆlèB9F¦2å¶_G³£Ø¨f»i¦ñ9z=¡J„|R*®s7ÈÁ‡à–ëÉÅ(Ýÿùò—nMR)Ú±%à¢Á—Õ“'‘¹oÃ%„!™¦rÝa½×Öœv*7‚m&£ˆ#ÒªNñ›<> eNh§‘¹=oiÚyZ"Gl£êÔÈê-#uZÚöéoÿói ã¼V¯‹Ô,ÍŒY—ii¬;לõRm4zÝöÑŒôåûÓë]VÚÊa%ùÐû¶ïû>>mlÀr7а=õ-3ÕÍ]=à¥e>Œâ¨i§ÏŸ>ëîz?¸¿íèU¢/.ÇÜÕªÿ¦á‚Uõ»ˆáÛ_òî_¢ëü§¾ýœGH°–¢§[–ÆÖc{bìCäô Ë‹Î|ã¹ßZ´b’6æ[„Lâ+Ás–”ºiÐÉ~yî¹¥­„¢ºê¦i¨×|ˆç_úØO†qÔRó )Î{m#ôŠ­ç—tÊ“D˜àòó»?ÿ¸ŒH ™{é{Ù÷ñ©oC9â©)€lfƒ)saÍ3ÙT´¸ÁêÍY‡ÿÇ_ö¶dÿõ…‹â ÕZáqH•¬¼dGàX×KŒnÚÝ¿<ÆcÇ#™GXó¹u¯-ûBRˆ>›ŽSóô>lôeZäÀ~ ëÐUÈæ„+ýÂ*ÚÿÎê„i’g@Ûv5úp[2J¸ç€Í™Aß/¿þô©Û¤Æó~0íAdô)AxL¨„˜Ú92¤ÙßNd.~ÿ°Ä õçô¥™2WåØŸ·þ؇˜½?.ûö`÷›Ó`æî=,™dS r6Rýyè¶ä%'w4¬šGgýC,@‡2¨P…îÆÇ4IôþðáÿÒ††ÂïþÐÛV𵪧¦5gDsGuqUœsóšìõdª¨\/¬‚v¬?jÖŸ²¡6„Äw‰™)®tÄÈÞ»uáÏx#™“¦KѨ„ýúôñ)È4sÏ-rµæɤˆQ9kt^ÁmIÐÐÔ+!zó ±:"Ï-[Ê‘ŠØŸŸŸ¶n‘âØ¶ËcYk€f«ï4"B‹ »—‚b#‘™ñ”N k×a*ÓUrž·¿ªUÃiÎ+Tœ)¥Ò•¡Êº+CêËÿÏ?iw 5ÿ<îbß÷y‚¥ 7·Â[¦èÅÒ€›”eJWÔâ8«¿¶@kÌÒÀ#!Xª–¯2¸_5g÷Æ-èn-÷=,/8­ûc4æÙ]%j&¬§øôÓçÝï$Óð5>í¾·ÖÌÜ–Ñ{šYTYÆJhVUtUÙ aŽ‘Úý¯|ù|ZãÉC+ǸŒ­d‹‰¾mzöeϸ“<ÖÌŸ|ÌR™n‹r¸÷pæèÑË—fnumYËÍÌgSbçWñ‹íX6ƒ‘0!3Æ {îïÿô§-cQâüî±ãÜ/—=ÈÓÝŽ\Wo ±P§»óDn£‘2ËHXJ°[½„ƒ^À[#¹2Î"†ÃL©LÜÅ·ˆBš!úH[\™ /1Ô-FUà‚5ÇöøëÏ»N$-Œýñ§¾ÜE¦7ÃVÜÃkõúq3½öú[gá¨ö_÷µj{|¶á1úè=ÆHÞå ªÔÍ Nø’G+chîõJ—+cØÕå?ŠDæZLepÁw渱[Æ<¾„%$o‹®\]Ùx÷ð„t_Fz®+OÃg¾Çû!3\ÅUÝî²ß¼ŽósŽÐ›_!ݼ1'4önkBŠä (ãiq)a!Ó<;­?ýôËŽV*5cß~úE÷™MòA’Ê+ÉrâQÌ2ßÜÇ,?5ºžžãtÿûçOÊmä êY•Ì##sÛ6@ô À͘ k9®öD>Ú@cÅuOš>¢PP¾d.^ wÜ.€I#aE5.½ Öšgå;Sºß¤Ö»ÂÖž6+[”’,«ûñ¬fÏb¿³U^ãÉ)#®[©9¾ ð@{æØtòf™¢¯jR~:˜ºæ`kÖùõ©sdC?~¼¬ÚÒ<6Ì.âõîj¼ÞðºG%¬)òãŸ~·âùâclýa5“Y"³+3ö}/¹³`EP…·`DðšKŒžˆY´£‰þ¼fÓ*™Åå~½[Üì¼ÌŒœ›òLy9æèÇÒn÷Õ@­Ã[Z´j´Ä;%A·¡JIØlø!ØoXSsÀ¤R¡€·æ´o@™óç¦î'o@Œ),.WtѼ¹öÇŸ~툠7Úã§ OO'3(Á”™û+^+ê(_…J|±' ú{ÿá‡{·±ïÏ{<œFŒÞ÷­C™}Ä!Ï0Y³b@™Ek©ßÃG$eSÞeº±7pãAE8vâ—y÷:¾Sí&V£JW‚æ^ý"}&"ìt?zЀÖ;åhÓS^c=S¤4J¤•†Âwmqì#Àä˜¿Ñ }‹ÊÍœ?[9p1Ɖ„‰†`,à˸<úõÙ—@Â0âó¾dßÊ¥y©}»û-8¬c[~Ú¢]Åxsè µfG¹hɨYñú^µÐõtªõ?¥@o}6|'üƜޟ۹1MÈ°Ô -ûN;Åjù¤}ù¯çG¬wÒþ¼ƒ=E¥|¾´å ¤ÑÝô¶ƒ$"ßö{åq8$%C¢ùøËíî„ØÜ‘£§2zÀ}ŒÞƒN$Ý5FW&Ý= G¬žU ›0]EfWœû¨%²â¦IæÍoºydy)8‚t'íàý Äzöô˪8I÷qiïÏcåá4ö@órÁƯTª2‡9zÌû*¨hÆ™ÃlÆy€Y\H¹ fkíûÄæ巤.bS3Úz‘”0óÔ¨T²UŽœT<í|Ú: :ƈ>ªuºÅ ¨†r7oÞÖ“ÛášÇ÷·®#ÆIŸír†Z’{u¼ö!AáÍcäÔ”,”úÊçzYp_ÿÆ—y>3%/Óëð’&š[‰/FŽÔš58i¡¢ÌH°Å|iCÅéÊ!Ø•™Ò‹^­5ðš*;n[‡”Óm€pKŸú®aæAÊLúêÚBaÆ@Mï±=¡Ê1´£LaLm!ÚÒxï'GõÙýÚÞ¢7ÿ‰‰Ü<ÊO‹µ>ÜÇeWUÀfhW¦˜Ù½yû¨åÙsW*ðü ÒUdö6<“ӳ㺮G«÷q=ÖApJb¤r\öc_'ü+úbTÕ)x“YZÒà=G¸T´9õÄ«²óµM*übÎIý*Tï9žý?jNñÔúî‘òåäˆÄˆ Š”Æ H)GííŠVD¤‚Š_»ÆbÍF‘P¿D1æ°N¯[åcRÈÈX²?­K\ºµ&eŒ‘}®¼¾cß"h(ԌԮõ/õøœ®á1.šïW¡}0sã‹ù^§3…#Ô‘8s qy|h+‡C ¹¡ÝWËœ5S Úb1»'¶ù)½aR òvqÎC祲•3?ð²®<Ïؘ@{^—“÷n©LkËÂUæ—(Ù7AÁ,­×÷˺6T~ÕÝ%-C¡ÌqZOwkØÑ0õKƒâ–ÀT?\82,3#4Ò舱÷Ä„ÔÇà¾íÊÊDËp%»ÝÌ`ÂnöcÆHS_ Ý8ÿ‚Ž|ÿ¢‘„Ï z)^µb~Z­YJf­—¶ 1Z¤ÊœCzWòÈ€§Am_ƒ_86ÄñÓOçoX_šórw·3àK#l-­D3¯Q@ì"B¦o†.N€ææQQ-ÉSûxòõþ|nËm°~kËkd intB6DFSÒÍ,}Ÿ ¶ 2ög<ïq”sKB-DðÙŽ¥©ëê¬1)Š—~]¹G†øe*ÌŸS«6Ž„¤„\ýùÔέ6ƒ5Gc°œ$¶­_’iÕR]¦Ê}~‘æ§ßÄ·o…W±ð1Uÿ‰¥  ÙûpAiËêÁWÉ·™F8Æó'‡¢"¿òÈ’8 ú23ÊL”4ú¾/„;Ž3êÕM_]–—³@%ô•¦$¨x‚"r¶#»²MžÖ˧äNq o »«Ç¥A3Ò8aØñåGÈl¦QæÑ=žäµ†ú£ñ|ǃµeܬe­Î¶==볫¨”äl®s„ï!¾®˜yµ_˜9€ÿ YÛù݃íYu„Þ¨ÂÚÊИڋf±³©cá°™˜On³,5KÓÑl§!r£}3ÈzµÙ‡X. ÁHRL¶ ýjªƒˆ¬CõîëayŘàÁsbb-Iª’щ)™©y`ˆ’&O¡Î×ËW‰S8ÈþlËåa%$å¤ÔWÃJRrÆX:–Ÿ*é­´DÈ1ù³·#Â7«ó 1ëv³ýÆõ-s¾¿ó¾;FÇétveµ^Oéå¡…Nþô÷O¾U‹FՒH¹/-FE¥f§ 3-'s[ƵŽçú….÷'2EGDË´@‚ ’š‰…CÌ=|±<4u®³5æß=“<Mÿ–<Úå¨U›¥R-“Ò'Vk×rÀ9¨ªæd£n/4ƒÐ[~º{XÍÃO[Z#Á4/i½±|ÈŒ¾D /0¥`fcÉ1miÓ’Ç×][›Ï‰~ýë 4ËyÇ_—~‹hÛ~¼70Õ³-k›rŒäË™½ ªØ¶½´gî¢t±+ZÛ2F¦ÐXòFPjë☪–x¹Ñ·ÿ‹ÃQ©§øž”rÕ.&«E–Ò7ÞOQhG‡ÙãM¾7ïßmK‘—O«–¥Áè×£»>+el-Ç®(9)FèðÿùëÍôÅuº~íj¿[#„ôuµœ¤úh =B«a{zÚXz{¢rÀQ'ÚØJ‡Y@ †Ðr·pT×Ú—[z¹›Wÿ¼ùß}à”ôUs‡ßÈW‡êË D^ ¶ë°äܤ¿•ØûA&óæùü¸ž—G›¬æ¹o#d¶,£(LR©Åш‘cs‰}÷ |ëÆêØy_nê*aòÕ«Ýi¸,‹)‹Ñ­L• 8±jüø<,*ÒåQË_èp OnÐ(õ.“9’mÅÈ\ìØjßÜá®Êý}9Œ/›´½Z0׳¯+ñ*3}¡M IDATÈ—W±V~‘ð¯ïŸ›ÙÛy  ðjrDŠëºòyÊ~z1€ìøX•ˆR€†«É3Ɉ1"ÂWçÚÛG½]wÂ5J¿Þcu.=‰Äz^˜™°!ÕðĈäbO¿~ºÀ§ UÉ*‰zZ¦Ð‚ž›s@$ͺ"q7»=Ï_/Or²8øýíÏæ9÷ͱøžžÑdX×¢WÁÀw>ïí_2+Á9ÆèÞQ´eA RIŒ„i¸°hp{Œ+ìù¦®ñ•“7Ö+Tú5y{5É9º­g"J—Ls÷Š!§}OO»/Œìº¡(³U„Š=«Ÿœ5§©3aGY⫘êÍ~›!²vŠ·›ßuòH@¿þ}Mz»I%¿®W]Ô[—ãú_úÿ/#÷fßÓx¢¹-Úœ^ªÚW®µP­NM=ÝJf„bDOÑá»ö|K©ºÆÅ׈¸}‡™Ù>iY4ÖÓ2•9§FœbÄP¤]bð´Œ~œ<’Äèʶvx$5‚cqCÒÉ”yd¸}e½½²¦¤è ¥>øíç%ßÄmÇÔ”µ¯„¸óÇ(òÍoñ½“ì퇑\ï}Á–v¾º›W~.hl©=–•„´J1úÑ\‘i‡¿ýÍoÄWîçí¿yèÔ|+£ò³¿ó¬rE/ë1"в•ºdÞœ‚Es:£¼¬P äg nEËSøËÛºùgB1‚–0÷öíZÔWÕoŸ±öÆoÎ^³P·ñ*¿w}íCb õ܈£E'èCCÆ`£$­1¢ï# ™ xÿ›—ÞìZǶzÝ0އø6¦ÐFÛžýÞ ‹4FVŸ—ÈÞÒOÙ÷^hû é-á­!Çäêp‡ç»ß9l9“i /aãŽÑïî}¤µ]æ9l‰¹Mz†5fbh]o‹ ™5›~«Mü&§÷óÆeY<¿,yÄ<øöÄœ¯‡õõ–8®Ì!å”Ëñ=Ö÷?¼»œ—íýG+-Akæ=tŠ­?=»õ¼_H(.O—4¯–¹#J*¤èyÀM0©«Ïð*5g A,â’lï~öñM{6l›=,~pA„ÈÌȈØi‹™—Ï—¡¤™“ˆapCmºˆ~rm9Ó…žRŠÃwŽKúe1S÷£4ëe€9KrJàýåq4;MôšßÚa¨õB3þúuŒØ¡¦õ­×¹¤AHpfdÆòÃ?¾?Á) ǘ­Î³hÿn]°Üºa¿Xkȧ¾DŠV}êëÛ^M1âÈŒýc×÷_×räy9yýQŠå1ƈ^wã8¯OÛÖû2Ë—³- aæ,Ñ<7[–±Ì[M䜢‡1}Ï\]q½ñxª+aíÑ7z©˜NÙ̹†on¨åÃ~#¶«»;Æ·_W«fSYò|ÿã‡;g6g ÷ý¤Q® èˆÛ¸¬'Äç}³êAÒ¦ÔÆ5Æ—ûÐW}‚—;~½}w²¶”ŸÎ‹•9S @{ †u]<hùðpùü±ÊæÍ-|iGB“$líOyòÞ ¤¡Œ”3‹8@h­úwÓo mhÔKkù ‹Íª¹þîvÛ¼õ”‚8®ÙW÷ú·=ó½=¬×g^;FøÝû»?-'× ÓÌ"öí¤M L*ŠöÇí´žöxˆm»d[X܉#XÀá_££´í÷[!í-ºðÖƒ}µðûîJÎR™Ê 2BÌ’dÑ©™bˆiæF¬}ô¹³--˜%F!c&AÆCJ c˜qi§vÙ´®¯œ–Rä%Ííf–ÖZÌëcýÖÅé”ÔP}Ç[@ù…7|ܯ^à PðÓÝ?>¼'ÆH÷ …ìÛ™DЦÌ3å¾ûrÙv‡SÁ騗³ø2t^‘¤çAòå]ÎÑx}—únÞ¬åz¾_ëä*mG Cp¯’kµj¾Ï–Þ=íÏ—òVÚ…G s"Õl¨{ô\‰LuøHJfNeväç ÷l_lšÕ¹A/ ¶S´¹Xá¯÷˜·«³âôÌùί €™PJêâ+Ëø&ÎU$Œç÷ïî–gld)ŒKó¥YÚTpõ{R—õO#m‰0V f…,¯5n“¡ªW»Îëû`üæ³ËԷ̉™YS;C*eI;¥`„,"dil ‹ñHGPPLñ(í¡µŠ§l™T1ì´Žt$d‚!/¿nŒv~·³° ³[5 ´œõÑÝì;§â\oUkß^ÄQ¼¶Þ—ÅeYî>¼[ £ ÖÌàÝró“+ä­š\¸ESïæÒ² žGW $“VZb‡‹6ýiM™»Á®¾ýh7qúwBs 1úA(—ŽfΕè!Y¤Hdˆ ˆ0_ÖìÅ®¥DLÚyQgtíº{C XDÔH÷ñüôi·õa±[–Œ ÉÍÍnta«×`Mã*Hü­0qv¡þ^%Qøù;¸\Ö‡û?¬§–cÄÚw@+.rôˆÈÉ÷kHS.ëš—írYHW§Ê´í•ûzÝ^ýçõ**û®9¡Ï?üx‚PN§Ë§˜Ùö§þÐ/Ãß}¸ß>~$Ë«<ÊË<»Í±GIv¥Õ™Ù@– ÈoEœÓœúˆ¾>dFµÍM[V¨e—³•'tpU%Á<¢°TÂP`kôE0÷jª=̨ÌX™Ï¿>qIRÙŸâ¬Q§hɼ/ax-Åë³|Èèu”¿¤ÍkfÕ»&)—m¶¯RØÐzâÅ‘~BÝì:sUÌÄ1C›™ ’ð,϶·³bæ>tvwì˜N¥æÅ–yí€$(úuǘ»b¦O])e.mÍjc[½úˆˆR¬œ„"16êTaHY¢ºæ&ªŠ7Þë+ó|ãAŠø£ë껾ž“_ŸÎ¦¯ÈúƒR³$ ×þù¼VU¦25‹¢7NP†¥kTñØTÛ! O0õ½û²w³béÅIÇ1Í®÷?C1& c\¦#p$É{³í¶ZOpÝÆf¶Ú:†- yÊ1F -£H¿3N D· X÷ZI¶05ú °R)ÏVA†7T?×ØÌ–Ê²ÎÍâÀÝà?¼–°üFÀ‰#}–|óê¹:Ëœ†cS‡£Ni»æi$¥åd(Êbl¬Ìå•#1½a¸„š#uî[زÚòôyÏØvø¢XìÊãµ×Ö¼ÚçÊ⟫Ӯ‰¡#DÃo[mm1ˆÛr6ô´miÞNš5°ôä¾¥HYŒòÓ93xž±¸ÃP*”Ëj— ‡¹ö-Ý(¢êÏ`6ù‘p£Å†åJ*¹Ðb±˜ÍHKÓ1zi͆ëDžÞÏœ´Éj[<Ž3Ó¯˜â×¥NçÀ¡ìSNU¥ÝÞ [¬&Ÿ´»ëq-Áh‰”m×Ó¸,wÎLÚÔËìÀe !ÀíˆKXz3â€Mbš…ÅT¯PÇnÌëîð:²–ªÖ¸Äa¿cN¨¹!¢cmm]WÆ$¢•óê°³¥Å°J‹çö ÒÓ¼œÄ47_ÌeærcÕf¹vEÝ’ª(¤ ónŽÜŒ4_…Ÿ¯ÖáüÏ|“^Íò+£éx÷5·8Ï¢—ÍíÈŸÖØeKv2¡Æ¾*¡™¬ËÁÜa »3¨:8¡Ž&éœPâ²íR‘œÝRÞ<Å,ž9¼ë×qË?c~Õœ¦Nk€#Fäi¹;5CH¯õ0{{¤€d£ dŽ9@)°55£”fÕ&zSs"fáÊÐí™c8šÍ:!Ô^|ëü\m{}R]­Éj“Yû¨@â¨U<,^6~1ô‹0~ý8ÚÒŒõ¨¤™T}²câÜ$@Söd¦­ëbÙü@RÓ`¶“L#óqNåIS|¹¢^ŠŽiwŠê·x(ß4ç’™E,D³‡‡“$+MÖ~ ÐZ¤œçŒÈÌÉxwÛ_Né(£N"Ï3‡sÖáÍ£\JK¦ÓœU˜—ŒõŽp…s8¯¥6o7ñ¯,¨IZNÜ1ç뇱$öuÔMÓ¢^—Q¥‡îÍ™H‡™´Ùj^“Á èëû»s«ùýBÞ2ù•îÝÇe‹æc—;õeJàèÞ@&¼z—µ7üóm&d¤1‘ÉÅüÝ]›­¤$…fI}‰:ÑçûÞ¡&AJlë)Í(„ǵæÜÝaØTS‘0þ˜èͲڴ Tl„ZQ4³Y€)Áý›ëXžÇ‹^A+·ÔÙk QÙÙæ"­$Õ¡6wÌ›¢¬»Ý™ fŠØz›Q“5ŽH•ËÊÓìG^¬¯k*§wU›ÄèI7ò*—|\UW¾nkÊÏ×w€Ùï™S@Ž]ž4£/mu%ÌÊ„`š vÜÌlÙCX3R‘\mYÈ‚Óëó¥µ&7CµkW•¿'ÓPÅÍâmu[yMµiáÅÃ>ÎЬùŸ2ç c$ÚÃÃ9:œ)i§˜B{[­®é–ÉD³èæ£çyõq^.cYbÙH:)šæÎqÑŠ~º,žIf47ž¢Ë šeIÑç¬A™k8Áë˜WFe®Ñ+Æ:ˆ*hîv WŽ<ÉD¨ø8då ¢QmÁe±Ö¢Ï6ƒJ"m!{fFã² íËùáw¿kŸESÈ‚t#LzQª@¤Ø÷9bPÃ|Âü:`‚ÌZÆ­ÜkZÌEÞPùšA¨¤YÛðøVïë‹-Í”£<p©U¹ü¤¦ÌÁ%)>bpTûꡬ­K ;Ìœ47DÌJjG¶tNÆ®}YWtâëIñNÖÅ9û_9º5ƒu0¶‹|ýýñ¾ÙÕýÕÇ]¯êÕ)’ðÖ6åwh ¢:¡˜C{OÚyo?¼#¯%ÁÇVy½1‹œ4f*æãÍ•3ZϳǮÞíW¿›ßH™¿µ^ۣߑc;Ë[*ÛLYÙ”«¶ƒIâµô~ÙûíëéîÝ=ú3A_m-^·¢C·`ÆÔTÒq¤Ví`õýùÓý+åµ? Gðöâã½ RGHyµ¹ÕºnüâôÎxnî¸_úAê¨m”µåܪ>cv[c›MŽ-RFÑ÷‘fÀùO¿¾l•(¯<í­NT¡ÀIf(^Û³Bb9FqÁ#XÒ[ƒ¾~ãÛ™ñ5s^œtɶ>=4\EZ ‡d’AèÛs–ûwwKh¥·õäë|æT0º›õêC%¨ÈœÀv\ÆrçÆ©ósœ3b=¼™9‘‘iT†¥¾l‡ÃG%TnA•H÷~Z0“'y˜ÎrVc^Ÿ£.{°©M½2áZñR~Åœ %¶^RÕÃ7>u—"3…1˜YMK/ÿÇŸO[hþdµë4£HeLÁÏ+Æq|¯M ÐÖkzºþ$Ýpö×êŸó†šåØ“ ¶f%l@c2DixÎUaÐØJëÇÝ?¼ç´q:Ÿw?›3GͨAa±ª7Yœ¤ƒ%@NášÛâô–$0•õ5»%½*F™qÒ\¿7g3QÂWàÁ῾ªÞùê¨dDD¶$̲?ŸtX…‘]MÅáÈŒ A#ÎøãiwöJûN/ðð4\Â#"Õ¡ÁìÕê=b4G*u£ÝÛå9·’ŒÝìAß4'‹üžÚÕhŠ4ÏÐÔöâ¾ã²Ý¶,­1Ñàh§ó™<¤XžÑÚ²¸3ÐÄ%†hi‘#Ešs¹{÷°“m:÷y½Ýdê¤áÁ4»)b10g,{±Ã§š«öz|¾½(͵V âP§ÅU(«£|äˆÌìñŽ1’4W†2Ž·¼Z}î¹õaÎyF|AQHó!Öyüæö¬x}Ã%$öæ,·u$ºÌÑHs§f Ö|R¢o`“’.bóAó¶×â\s`vv²-ëi8dÒ,Q2Îõþ®çT™!©&Nÿê8ÒõtÑMM 3íeæ_€hW kÔòúZ&‰$èÍ1Ü5²ò¥Wp½¸™ÌF(#.??|0 æšž½ÙË«ç±Æ.k¦Àr7Žƒ@Us33¼ùëÕzoòšt¿aN5fÈ„ëúA²½­ÈáçG(ÅÜ—H¸1­ñùóÇMÔÀ²ŒËÿOÙÛ.É’ÜÆ‚î@DVuŸ¯r(š¤•dwÍÖ®íû?Ê}ý¡+’º9sÎé| ²ºû| ©2g¦»º2+‡Ä$k:m踸™Æå) dÊe°7×q"ZÍ'!»ÄLãoÂîßt³«°šŸžÏ$ ØÏ²rDP@F”¼OÞx ã—iû³OÊÆ§»Þ:GúDÆœ²ÉÆ=t7%Ì  ]1L1¢æùŒÿøùÇŸ~8!c¦1ÇÕŽ££^IS„¬õ{\µEšÙZ†UN /Ov;f‹`–Õh•R¼ñ$Áýw¿,¾2-s2Ãk~|ã'w)é$ÞŒ Í4UGœ›ö˾ •³ñd¹9È9qÞêXZùÁòuíîÝÜXcWþ˜“–šwoßn˜¥ºüÉq°~ãpZiç ªŠ^—«\]p`©“~c3¾°kÀ­m¿» Ê‚“Y J*_ógTnNÊ5´<%„FŒËçßþæM’$öÖ¨[¶ŽJ(xòxÒ..9g~ë}qš‡ÀrEŽ£¸e_þ ý¼-sÊRñqógz¤uË™—Ñé g¦]öbØ€öz×;ös|–šbŽ1ãº84€ášn†œ ѰȺ¢Ø†ßÝ5d=ˆ|›íW¾ø«x¿˜L­JÇë«Ê­~ï3¤­µ{dÂ2 i.U…ZôX¬H4HdÎDD©„);òóãç‡Χ;G&vB~»^J8G<αO<)ó[ÝÝ_ºt¢j±«(‹™ë¹ˆ׉îksfyØ–ãáófêÜÜâºÿõÂw§’i€YƼ<^ÒW{¢ óâm;ÿu‹Ç?üùq¼9f¤Þåc#Æm e‚ÍŠbJ±9À§qyàÖ–o¾%þ˜ä—5<榾€OR,TŒÄU¦ Ôá÷%Jt[$ë>“@–÷E*BFã¥Ù¢Wpæ+ž<šøMóò—ëo·’½WÌx!L;ë]>•ãò´#Šwð­åõÊ T)ø…\O¾?*~æ±0¾S¢iuЉ4Æ>&yê¼|z¸þ9ΧSƒz†uÛÇÃu—™¤ššb ¹'Úöþ y‡Ù áÌ¢5ŠB†¬ò,‚ÛÕÒ ´&ÃLêò—¿9·XédÕBKD•^~s`µ+Ôl±µ¨X¬÷çø½¨´¿ÐËœû§ßÊI$,Šyy€»¶qŽäQ, ª)„’SÖ,®öf"\3ÂüöäÃV8Ìæ˜Cíø|Û /ÍIæ_5tŒüÿΫ-âÂJV9§ö??Œ'k—óÉ÷m:”—‘4"a™¨ò¸Àó­4¦fß}s‘ &ÉÉ€´vmi<9¦u§óØx`*­“$3¿ £ð›û<ž /„kŠ vÈ ½ÂÜ^ýD&P×Ïam¦$¯Ê#’£ßÝó)R§ÕR-%d•ø‹¿î—™w½sîÆB ‰gjWe9½N^³Ñù’€ùò¾øj—‰réîêèC=>—ˬÔñ;ëµ»>ór~}¸>=]fÒçGßÚóù8G$-eSæˆO×§6í4@(3Ÿ,|7×,LfÛSŸNÉ/Pʶ·?¼kgæ’¶Xe|®þô/Ãá@_n_C‡¯pqµdaÍãüÆ!ûâ_3s—s|k9šæ(ØvïÎÓœ·ÒÚ RW¼ÿðÎòêf)o7‰ËLÕÿaN¶ïžŒ¯QHI 2xLùêˆÑŠöŽf×o™ó(Ù›3®×±]>ÿò(÷¾s\ÚÝw³xxÊB1µÂJô®qý½wKésSF(-׸Õêm+kzkæNÉ©¤÷»w?ýÖÔ\)–Ù'ø2ñ¦PsE^Ø\N‡¸"øøkPïÅ.JiMƒÞ8Œ ÌÎ1’}#&:J*Ç9ŸeÚïþõlDtÞNÖãUš}èÁš’nž‡|ò‹¿/û¦Ì`ÀqríÍ=b¶É³Ú懳½ 9ö™9KªŸ0Ö(–m\óÿüž—H§®ƒÖ«¸j9£ùÓDìó¿þô oòÒª„òµzuˆæQ¥kЧ†š Q‡ô+IPÀ_?ü™øþCŠ­7vy‘µ3=rw(âéçùóõi’æmk‘ÃI¯!4æçÿœopYÉÃ|£)2E{Œ…û¡ûß|8÷±Ø±X8ô:-É|˜¯h}öîaúõ“¯¾î:ªåFë­j²¨i@s„G„D¯R‡¢ (UøºøÁž·Ýÿé_~¿Ó T†G&qÈ~4íjØÿôùaú·&U¬»»EÞ_§–äÇE~ŸBÔ²vÚ|š!µëMëÛö´_7yùùñóœ!M¡N×fb%D 4ðÓåñ´Q+òx¢/Ð3ƒN9‘~¸‹û÷[Æ!c1×dÛUÌ\œ¤o…2 ²[qE-¦¯N££0òÕIÅu8“m;oÆÔÂ+HßwŸPš¥V =’PòöAÅMòkû‡{û4îÆˆƒbf˜‹îÍ@ãõçÿóŸc@ß6'…g‘D;€,,jér4þ€'ù«æ ÁO'GF•7aÞ˜ÃæÓe”˜IóD)HÖ.Ÿq·¥$dFAÃQñdõY‡Ìðæ½k|N³ÌD Dt«ÙV$²„о b Bb!µ Cҫߣ(iÀks .™1 ôí|2ÍžL*»ïç|Z H¦ °Ý$u Jµj,yÝÑ·N0á9ÃD,E‹´>ÿü¿ÿ 4aèëe¥/Èmϸ;YåÍ·Äû«Sæû›@Köó¹+L\ó| È ™Îu¦Œ1Æf=‘ìt0•dôþ¦ÅÆ?õ» IDAT ¤ˆšcùâ.Šu IÍÍ{ã”5ß%iž™ÑN~;Õ¨ÿÎòSÿG“éi¸ H¸•@R¡–JÁ‹Ý«±T©ì$­uÚÖOcF¸®Óšoû‚ŠãÅñJ¡Í?nøñÝ0W±hh Y[ÒäÔøåüe_õ‹oø¸×F^käŠé–¾|™rÕëoÈDy;Ÿ7 ž)fÔFJóQ9kTa»òä–„‹&oøá®e2f[‘U#A f—š{sóý:Û9öÕd˜& y>2—ÖöñŸ¿ù2g-ñ¯ô¥†¸ ºÅG¾íNÐÌi™8—Š¡e„Ù]ïcŒ}:Æp4Ë5oR©š ¿üûùôþ kA¹ƒª>l#•Âã_þô‡<ëÀü¦1Ÿm’ºù§çŸêýñ‹×ŠM¾—wž·ófrGˆb_’v­ÙT!Ð2Ã`1Z§HÍk4µ<ÿø»»²²\TKJå‚«,»XÞÜŒ ‡æÓ©<¤’æ£k@9£½ŠL_~3­sœPj±^^tYø+\M¨²|Ò2D®£æ)è€2Ò¥û¾š‰{¥†h¸ü;ÿé çÉ’Ò‹~–‘ÿϹúvFõ¬Y·»mÎg~M¹X 4¢ç÷Ÿoû“ ™GYtÅÀ»3ÉôR ÇìíBIÖßAðfiÖvåP÷™#É[a¯õyÁéZ^„‘±tX$€îÌò‰ÛÇÿµÿóïñIÍ•‘Öš¥[È4•ÖûT—56ŸªÉ€|±ÑQ…¼uŽçZd/íúrÀÏA1ËSÀò[>ÚÙ¨8€ iæõé2¯ôfšÑ2ö=M · Z…žš~~û¦“Õƒî6g 5æR޶N1‡¹‰,vq…áåH€ä`)F&ƒíùk<‡~ÂA~^9Æ‹'°Œúåá¼xDœ¤eŒëµM³ÂÕ£â[E¶Š9k¶ìkmú%Œöko7Ÿ³£ ;Y¼TüfÏë!œ²çW!ËK4@.±–oø»þò{u±æ¬o“¨³(rî{$Ð8/×`™3HŸ’ÑÌÂòb?|¸2¥ wÆRL$ ™&¸­ÙM7‡z„ÿ·Èf]¼\IÏÄÅïªÈ•¥W½Ð`eÏê¦u#S¡3 9§¡äëéB /ýË$™™cÏ×ˤr¥ÔŸàÿøþ¤}+ ž%ÑföèÏWë-Ü(en+GP~4‚_t¢R¯•Š¿"¥ðˆ~Ýœ®2Xƒ¦"êc kÞÇq`« 4wqN$%Þš%Y)™®96Û0fô»Ñ*Ϥ—VÂveú¾|b‘sJ ¸!t «¯[ËákòˆôÚÝTÚp€I­†¨Š­µ­w]2&µêæs"¬˜²s=Ã:à_™‹-=?þ©ù[oX䦿’ ØÞ_®`_’C‹ü´Œ‰Ã>†c„±ýEsòwöërÛeΊóRK%‡T„Ì`Š$Ç”™÷ÙÑK-[ š—ϧíMÍC­íãÒȆ’ç1 íדµÚM*÷g´âÕJâ¬-Ëš¢]¼BëÝo[wYS¨¢l%?·0øo† G*Ò½9š{;Ÿ[N;~!ÐBpè÷—‘±²?-qŸç€ÁyüÜÞ¼»¬À¦’R¥¶÷ŒÌ¶zo.¡ v&Aƒ)R™/N™±¼VvðåWûøàfÎVŽS0ºÑF(!%›E\'k•c&ÚrÛ&6|Îþ6ÔÏ›¢¬ 3šÓM–4çx¸îO×Ñ›;ªbˆ#']§íÒ¹0¦û©v§Žêù[·¬Ë<†³½0Û׉š€Õ !o­m§ÞºÁqr_1õêGi5Ÿîûl  gÐ3šÒÛ¯?7ØX|ˆ½Q4)q÷[ÿù1zµbÔœçótÕ¨XÏÂ_乿 ã=·ou³åß6绨4¦ƒt3ƒæ1xP”ÜšQÖj¹J4ªmŸÚSðV3êc\®ÆÞEÄåóõúñ â|jo· $•7dgŒ+¼z¡uzþ+%8`°üBµV¯²Í:ÙX¼MmÛœýî®5N‘Þ–\0šgN³©Ì}¿î‡|Õ-}ud¦ý/vMntPŠô|F3!St©È"d®Ôr‰¯Âà+³Ýú¸ñ*ðÑß³9ÑÞŒkΚ¹Y˜EÚØG¤õ)Å@ïJ‚6Ì(¡v·]™žÖ<¯`ާÇ}K0Iøõa·ëã•ç{×û~©I”´Âê›>Éd®àZ‰5âtùk7•h-¥ =ÏtøõךóÈûÓ†0oÍÁ9¡bJ0‘³Dö´Ç¾±ÝÇ­Þ·Ä”6'góZå%oRNÅöFŸv]ãP?y]±ãJ`W¯âÚ†z¹j—¯þ ù{vçû' bÊAoT$3#¯aKèéiŸ<[žZ˜¥ÓL$övÌ~ÚÜ-ú>ÇÓçi9”¼^Ì汫ó4‹kJX™ˆL#Òº7ËÞð6"2Ÿ²c:}’5Û¨ÌÍs=ŽÊßÎ2£ÆÇV,{ÊôÖ”¦¶»M[gR{4w†ªÍ‰¤Ó¤i7ßfä³F. =?YA¥¬nN…›Üžþt÷ö$õVp‘¼?X^ü§ö˸^aÚK×&´t„VöÅ™&§”0Ú8tnMªîϰ °K¾¬_¨ló{ ߃½×ÑÏ*d2Ë:Î Ï®4>ö®¬™²Ç)¶^¥”aãóÓå’ À§bÎys& SÆ-ü^ˆ#3æ‘̸s6÷¥7šm澃h½¯‘kºP¾\¿‚tÌ™,M ^½·îÕÓ¶­oN•¾ÜÖÝW¬A!3¥"hˆ}~ÎøšH¸.RÛK+SHÅukND6šQ©Óu`k½#CŠRŋϋ\ËîU¾•Ö&DͺæËû›æüã?ž ?M­Á¿ÈjìTDJ‰Œ¤âê™™ ´{yªS‘"r<üò8’íJæu<ÕøöÞ{wÛ˜©’Á=ž s\CFd" ú¶5ÃiÔ™#‘)¿ü2¬mýíªXa¬¨¾N¡0ƒóP ‹óyëM³¶N­Éœ¹÷û7ç†j|Eäœñ‹äœÕ:òÂ+¯Õ«#K»•άm[™n”ÌšS)Îënl›{M\l„X©à-D¦ß¥¸¶E!Я®»fØméÚ߈äÛ¿ïöîDX¯:ƒ¬ú c ÑXµ©ZBÏšœ3óã§Ç3»˜L3Ò·ói;Oîq^¼Xã,Ι ˜`FagtdD$`Í«J»~ºzïm¸{Ûȶ²rÇ E‚$š¹¢ n§SgJéí|Þœ;†±j—ñþΔ¤”3ÆcΟ2´¼º‘vª9ÎY,ƒ.F Y{óÃýÙ2kîÞ¨LvŸWf;ÇSðÅZÆ„' Úqÿ·TôÐù;ê+bU{Öt«UÇH¾¾2ç_C¿?GIO® - 3/{П·8óyAÕKq}€.¿\²­¼éýÔ[;õaÌÌyí­@¢”‚fFÖaÐ&¸AzªsF‘‚>ƘbŽ4÷¶íýd5o¥½Hd*´—d[gJt÷Ûf‰ [oÈéfÊñ4fˆÚ `ÎëÓõ#2#¸¢¯ø3íu("Av÷á‡ÐLï¾5óê@ë'í‘h}ƒìªÄo—r°çq<·öÇE8Éãè}ŽÑoâÁÔ|לóÁ÷\‚1RYÊØŠq*Aòµ9W ã…ïÌýÓ5®#«Wè­·ÖúÖT¬õˆÊLòròòÊÇUãƒbNZl^ð˪U®Œ+a$¯dI£Î}¿¶Í{ßܾX¢‹Nb¶B­îïÈÌL Çè†0wŒëÓÕ׿ÖHÍÇ_–âzÑ¢íYäÅã¾=?-ðI’Șl˜‡yGÑ÷ƒ[Œ™[˜R±ú¶ôU/CÔŠ`o -¡ýI€«Ãì– ý-̶ë3cªb¹,ef„9¯Cf¨É™ßâ[sÍ„1±Þ»;[o3²B™"ÀØÕ6'ŸoÝgŒŒ1$ÆtÂÌ‘uÂÞkÆ}x¤‰Dñ©Ö¤÷…øÝÒž‚ùûéÜYvJÏ+” П.ãÆât×:©¹·š1—<Ú¢åq¼n<­eͺJ6˧÷~—~w²Þ[f†RÛŠdî}2õTpQQG‹S¿2äT<è¢&Õva)WÖôåìûúV”ölÎóç‰~¯ÛW©{nR*Ç.Ôœëês¼±ìn«$Ýš=@»{o®ˆœœSf‹9M¦Åq¤¬U€s6eæÎfº³’Óš!ÙLAª3fÖ+€d,™Ôãó´–anmÛöLs#˜#éô‘¸|~HCîRp³Þz行I’«;e™î/ÝÖŒ@ËëÇ“ý#·7w [5öB’Ÿb²©z:,u|ïuþ‡êAw*`kŒ`©~Ÿ›õ×ô·vçÜøïç~Žê|NeŠ^ãò©“2gž4™ŠÄV9ë|î¯I ¿•tá© ìn ™]åÞ˜›?…åÌëÃ…ŒÄ4ò¹5GFéýd )Ã:èÌèžSÞ¼6¯‚@ÒÌ IwÞfšõÓ¶5 BSP°{ï-Û¸<žØ¿“Õ×Òóú¾õ“»BûX´Èë§ÏÃ'¾êU:,„‹/¬YÀ]ñ…j†yáJI£Â:çÇi㯓=ÇT«-’,öKQ\Șsß÷¸ŒÁûwoï&‘“[×åi<šqZz‰Ó×ÁæÞZß¶–‰!%‚”2ÓaŒ9ÔISJ\~aÌëžûÓ‹¶}m¯žß—›6Í ßü¿ù ß¼óqm±2l¤­fçýÝ›°Þíîò‡§§@Ú­¦goçøKÜ–ÕÅ®u«×÷ïåh6š)žtµ7î,f>Ι0Bãé’î\3ޤç9+»…?ëëW Ñ*æ­gš#‰½¬Ëu>‚ÌÉÍj¬âR•_ü)@?ÇØÇuµû?ô«›Å´Þ?´yÖ›r fY¸·­5+GPObf®~;AyÍf$ g\ØMûûµgM˜ZçÙ×}¡_øNˤøî_N?îi32À ¬Ù¤{·.3Ã\?ÆâܶE¶ÁáREØm@Ö‹dúï³â³9k¼ä>ßýôáLiZË´nýø9Ož«½ˆ8Ô ÌÓõŒëézZå¤L!ö 0— ‡v@"-Ÿè§=½¹bB{#IZ¿8cÚÖ­iÆÜ¯ŸŽÝ¶7o6„ÒÍèÛ;üüõ!8N<ÉO±aNófQã±B2…&¥4Àp=F'B€›FƬH7̆טKÍNùú¾ÇM“ÿö9Nvù|wÞvpPCÞ³ŠƒÉ* f/þ¼»O›dzÓ(ÕüаyƒL Yi¶L~Qkô’•dÍÊDF³„+ß|bà»LøFB0s̺;#cÿåqB‚ƒæîƶHyDDæܹ<ÌÍaÆZJU›$EœXB‹«àUm\÷¸ ÅÐñ ?w‚ÇzmgàI÷U8bÈÚ)‹ÓsECÈVÑ«>cË‘¥Æ¡d*àpV[c_mc’çÞ1ØyªPª^¤ö›¹"uÌ©2þsÕóõÕª—s)t—$ÀÔšzk©_¯¨[ïnóiÞÝ™å”ù¾ÿùó$dætoîìÅÐ3R0Ê/YÅFÞÂ%šÑ d,lRDBÎêV #ç¤Vk‘0¦"¯Ã©lýîÄ)ß1™joûçËûÖ,“œèg™3–1c•TÌsW¯Îj¶­~6Ñ5`ÏEŠ—Ö\!%¿•ï(¼ß:æ`^óÙbUB‡Ã ÖÚT¨AÁ𥉩[¥ôÅ窼&}ñ³ Þj>B…HÅ ÈÜ–œùqÇœ€èÛÝÖ²|]-ž>8k·Ý¹œ|fÊÌRšŠ1ëðX¸1„½h3YWf5€-‘!kZÍ +©H¶­C½Î)®H”ClgèééìÆïÞÌÈ)sƒêóeîÊxFVùLŠº™Xòó0®‰òÅ!‹#3xµ;´…PêÃæÙsÞÁŠöмZjîn8´{ÓÌ“¥è’ÏòeZÙŸg¨oH"k0&²æ¾ #MY«ôW!x´~:%b\âŽÖlþò¿î&°gG7ÁsšÑÍ´kæ°½ÒüuÚ ˆÙÃ`¬Ãd V¨“Ï/{iecÛ²¹Ž<·„1À@ÑþRD?£ÏHÉý|ÿa\©&Š´ÖfõóDd™ R 0+z‘ |¡ctlÏ/_UYI*óƒ¯È`tRiK4ÄÝKb‰)óµ{k•%ªQùù‚ÏA´YU›•´#¼‘³º03aù}$¾aŠ)’yÝŸî6³ëϼK:jdM­m2pA 4ÓŒ9ö¹•Ï:(fLSrq`ŒL­bŽ€/­a îŠê«+å“3ŽP?“"B7CX¿ß>qõ“´ûwó’cÏ1£\´H÷Õ¹|$¥·×,¦"U˜K†ùê³ jÏ!Pó(§˜ ÷Œ¨¬yÏîŠ!° e3Â:<@cé&®Å}›û÷âΪ2Æåwz ¡ê¡ ÊÉX£CÁ_qž@ÎqE±’gîq²Ží®Ge¾É”¢HÿP —ÿÉ0GfDPØÞÒjz}Óž’hŒq4ÅAw4’SµX§Þ¤K2#On÷Æ$Û¶u&O{ìûˆEÂ¥¹)i‡Èñ‹¬q,ÇE 套n}M›ñZØAÍÑüêEßXî`µM1“æX»Â\„‚Jz©¦+M4𵍭—Ö|öô ¿†wHÊ©ÌáLû²ËñksBŒ–p0c\îï~¼þu‘£’¦Õ÷Ï* ÈT+Оs5^??ŒÌš—‡[IZñ8戆êÚGÝzB\£ùhAÍ­Ai€’çf9e¸[C´îº#dÖ´*ª 93Pc¯ø ‹†%«îÕ»Hܦd½6諾Wæ$ubÎÆbd—š­ ’St6«à»IšWÇý‹„rµ¸¬,é¨-¬9_GgRy÷<ð†ïxþ?'6›ØÜ4Õš¹’à›ß·6Æ”·;/ëx2¡Œ™zا|Ì\à\£BÆ´,ÀNšW¦åÜÛýÙ²:5R­TDõåä ;…™YkÍÜ1çz¦ÖÜbTaoìŠþ¯?ø˜$½¹»ì§S Áݪed‘SË™xs[ÊÚÕüdHÑÍֲà hÔrmEYôæÕ å¸lçÿùõ!"’½aŽ9½wF %Ìœ€wG@OŸ¯{ÀD7†ÖÜ—Î/tˆ‚èn%ìKk[3Ò uoÛÖ[û¯ÿ(Ø7ÈùÇî̤b)G¸3®ÄÔÃu*M9oŽyÅù¡­z‚$[l—/:´|å!ˆXÆ Ðˆ©$½EhÍÜÜ*þL«.ýô¢Mû©Uä™Í!éÌ(zmÔÝä˜ü·,pTVjKAX»FGhüòÐyÎÍNÕê'0š $æ<­â¹zg`Û)öé+^=)¼5Gö|}P¥JUëKeÚgPõW^ͨpÄ„™›`M±CwcúÓeu¬è£žiÕWöY]:”r©ÆSÊd2QÚ9+Wº0V3§\³4 ˜a 7):ÌÝÍ«‚#1 Ë8”YH .Û}¯~ó£B!3™ãÔ}»ìqr:JýÅc!4äÆs/~ÇqÖBÏD»å.æo\ˆ9a(zP¤3þä²dýˤµÓ¼Ôê—ŠWÅ1›·¬¨Xz¯ë¾Ìˤ¿jÓÖ|HÌÑiôNÈ jdîè°´’[ÖÔªe Ò¬ÙL™–òR%B.%Æã«¦¶Ü€ðäÝ[Ì0F2¬F+ZÂan$›"¬ 5j Gë÷­òH*ËM f55(¡9¿ŒÐMÃb2Úª8æAªà#h¼ùÔzßò,¼ª:8Ký´Íî'š€ne~ÌÇÉ—ÜÖ­¤b…º,ŽŸnÿõêTY¯E=nåæ,¾aNºMù:.Ý4Ì’m6ïm’ƃóƒÃ»¬c¢…Ò9›¯S%PÒš ¬zÔ*~2(D«$™Éæju}=ú9C`ª3æèíÔÔeäéd3]I@…d® /S9çMTí¨éxFFt¬öŽr1Ž` yìžc-€RÁBã;/œ3É&:ÑÏçËæUæ]1FV ¸>Aõ ¡Ô‹u^9í|÷·üÔ-—¡–üøS½¸¯¯Í) ²ÈÌͦ,)E»Yóà‹„VÉÖ M$GóRýÖª ”€˜?ê“%ñ™‚qÎIÉEk͘ê‹ðnš³¾@ò ¹Œù4aÛG± ÕJ—4#R™9Ì`/ÎµÒ Ð!•º²cÖìK¤#^–¬­ 3á¼70Eɼ‡;a[w×®…|IP˜SJv¼¹#­ÏJWž/ò¼É^ÒK×5o) Ž9:x+}÷ÕȹºØS@Ð#RíªT¤Ãª3*|=°ãÑ­©|åHލJQ£JŽºÈÇÖÊ›°ÊÆŒ¬¸™„"›Yï˜Ñ ĤػÏ%¥®’¦æØ³ùv^sË–5ë¤JQ0jµÞß”Žhn9ÂE¯[€qäÉxyškFªnº€°±&BÞ³oÌdl (™5†š^Ý8§þîýxº¢žßÁ¡X´ég(ý=:ŽbϬxÛ¿ 5îÚåj6/á¶Մ쮜ÂÕͶæ9àoUÞŒ,è˜é=&š!1_½ÖêÞçœ5½ÁCý±ï{q{ÍIhDjk¦ Yk~bÛÚ|4Ì‘m3ëÔ ×ôœï8mé[¤‹5P%òm yFÂOµ´à&x&^D½â1{¯–”¢½,ÿ¯:@dûýõ‡¸ÂÄ[caûAu†ªéfMæÐŽ7¿×_ðª¬è IDATt…m¹ï3úñ‰ÈF-£ŒIo,ºFUÙzD†ZåsI ±½£rdÐÜ¿þÔïXóW=?¿zsÐj~&×cïg°p¾¥wE¥bêguCM® Å;PÛy½«`¬¹Ò pK(U6Ë™Ñ@w3Üe¶~öœl­¹q]ж ¼­Ìˆ¤³¿ùðæ˜—:ª´æ§Äªü¾Šøo–[Z¹/BnŽc¦ÒŒ#y~Ö϶…vçqš!(×Lìl 9ÀÎÌÒ9¯³J»·£X_íÙA¾ºÞÍ~GaòoÛ@KÑ#‰¤wÅc;·"  j¦† )#ç 9VëK¯’q 7;"þÆ5Í2^Mþòæ"Z]ŒýÄíîlóæ¶©uye!Â1ÑìþÃûÖ]ÔÁ#ÇÏx®E½*Û²!Ë*ß~™ ‰¯AùãÏé8oÍ›ib)ºUöH§Ã¬Ñ¦lµâÕƒ´~w½¿9qÊž±Ÿo¾„.ý{è|-«‹A0>öó]_ù[Œ =³vèq./EòB‰VN,óðci0«’n.á9¬%¾âK€Y¡Ûì~¾ëÐ44÷Ö¬ÍBjiLéçß¼õ<±þ)•VS©+Ϩ¼áx,zæ7¾d”=Ö½~Œ_Z ½ë2ƒšCQ\"«êdIãöiïûÁ¤îkƒ}smÝHÛGê\±øß°h#×aÛ5¬cüåmÙÐÜ'ØD3GéA°Å©*º@å~Ic2cm"Dó\š‘7Þus|FvAbóû»Ç–#ÍÝ{sŸûÈd•çÍ h~¼ã-üYN¬‹ Äó‡¾~hGÎüÅVx®‡‹Iñ­J'(?þ?Ÿ oO÷÷§Þ f+T´¬5ÅÛ©­vº><><¹·óë(¹Ž™/EépƒoKð+¢þ·ÌYì¼>øÝiRS4Ò{2ׄÒRHüÔ#–TáBp<ä#}ÂÂ-¢aýX'h‘L,ý|w&b€îîìf4kÖ˜ à(7›M¿{Óq€kP]æí « ôˆÿŸ3“B`_qûy.ÜüößËœÇ^=?B›®ÿùé¾éîÝO'¯Ù”2ÐëÊ9r<@·—ÇÇ3´ÏœóK{¼ÐMúúz8òã[-ão™3m{ÂI6Øùòçø¡+å¸~ÎæÓÝ{wããex£†Q‰æo¬51)6/0!ç¬ ·Öš¦UOPq £ôÓÑÖ l ‚9î'CÍ6›“f~z¯Ø÷ùClFÿÃOofÏ€B‹ëâHÔà·ð„Âî–Q×ѱBóÍ×è8 YÎKš1KógÁ½$æ8y|¼÷îÛ35vë'„Y 0)5C†œTš{â4§·ÄùÔ#@F;0à‚-Ö‰ºÚŽv8¤cÝWáÊŽÙ{|*âö·K‰Þàˇ"blç­•ô}ÒÛvê%±B…Ò ˜o}lÕ(¼JZ¼Ùæg+M×VóÕn—çªòÔˆ8•8o-ü¬üBvLž¥ïS×y¡ÔétÚš' Ñq ã·ÚÖïõ¥/#ª5a!ô·ûöŒ4ï]cN»ÿÝï~óæíÉEsàÈ:@#B„¢$h âé>æ û¾ü•%¾2Ê7Èõ±‰ä¯r…Lf^ªVÛd>1ý<$Á{;µÓÉ™²VÔM'à§óÖ2Ûü×=“ó¾‘J™õJ/^˜³Ä_M %„4Ð9ÍÝŽؽà4Лñmì#b†OŽŒ…I‰Q ZAzUì¼=ßWÿøò7d Æ¨ßU°@í–—ŽHÚ„o÷¿ýçxß-•Ö‚¯Éi0+Ë£“f†ìî=®}Ÿû¶£Jù²ùd•*¾:L˹IG!eGùŽE›'͠𕬺W;CôÍÏ[÷êˆÿn²[Œð<¿ÿðþ‡ÞL!àì†Rß]Ù÷¼ºyknR$¸½™bìSËÇ–ƒ_Ïïùv¾DÝ~y¤/ÏŒ¯Ì9r&|=4q^l£ŸÒÏÝ©iFc4fº7ó¶5¯ä"•­‚J¢¶ ÌsΙän_ ƒ»1›hæž©ؼ)3æZq8 ¶Šh2IoȸØQ}‚¼"¡#ÿûVn&|ïÇUgÿ"À¨÷Q¯9~U5vúðî7ïÏ׿h''?ÚêÀ½ŒŠâ&•ëëÝç>t46ÕÃfS×çÇw*_ë°­t>oçÏ÷vç')á†\Øäþ9²ÖƒLOPrÂZ3Yëæ}s¨èü![Ò´&dÒÙ[7EF a÷† ¿xŠ•˜IS6cÜR|”çô¸¯È1ï¡P´bÕGõN©¾ñ-ë.¾™‚‹àÒ“}ù~‚0;°àãw-f¦½ÿñ_ÏgS\vKgé3T·Àúk5â€;È„’LÐ}Ÿž!¾2æK"/Ÿ-ýúþH䬦Þo›ÚÖ=Õꨌæå©— õ"¤·sjxë é‹ÂJ+âaV£Í­‘šË]/% oTù«U€JÍZ9g3BòVþÈ,Š6ÌmU!Óè €Ì9Ó–ŠiÁ¿ß8…¾Uís™óÅŸ)–½?À„–~ÿÇ®=‚ì†nŠϾ˜æU„²Q ïûªÏ]Ƈ ÐsLoúΣŽ^£4î¾oÎ¢Ë ½Àš’„ñáÜDÓf½WxK tT¯º—–¹ÉZ Í¥©BzÍbmP5w>?] ¨!$¶¶uÎ1À9ïèüò°âÜ£æS8qm¦RƘs†ãÂø½:ýwÛú¡}9=½°Ø—·õ-“¸„zgRv’3ŠüÆç}Ç›¦_uXx ‘Y…ïÃ+LøU>ü|óu?AdÌURûÞË'ôîÕ_˜l§ÞL³¤è"¶M‘`!k[³JˆT˜«Ñ¬aë(à+-#oÞ›Ê)(f†#U$âæfÖNÍͼoi4ç¬Î>kmÕÑj\*Qý–ÙVÝܘãrÉQÓk¸æTHg7g*Të‘9f%Ø^˜%ÁI Ïï_-ÐÈi4§Õ8Y?”ÞßIgĵ³m™g’ùâŒÖÀ†5ë¬0%b¿(ÆH ÍbÏVêÈÕÖRÀdòW¯Jå¨\¡ú Í#`ú_}~oZ‘ßBöÕVµ6Ì‹²’AñéJ’"½•¶ïŠQxxÑ£ºnž1S¬ƒ_+nb]äm÷ '…+BtsŸ Æé+†/˜U32eŠ1K҅Е_ëÜ~±Îqôס8BÀ· /õÞuXÞªºZµˆ]²F%5co½¯ßíWio•*ˆÌf.€–kZÂ߃/cÅ[Û_‡…ªé8¡Ê´Lm‰nÉKn >þ»–¹YëÍPÍ‘¥“CBò$]¥Xo"BB¹˜P+ê/ÜÞV eÞªI„Ð2$pgÉÃ¹Ž½ƒö/;˜ 9b¿–9U )YòV‡ñ¿2‘€¼q¤ó–Püò݇ノ©u2eDÎë,yÎl¾" µYxÔ×—.zBo‘´«y Á‘„Š­ÿºÜtKëjmxYþý­Y欌)Œ*ðt Úªf8æüvùüKž7b»?Y#•ÅSÆò­˜E5X›ea¤8ˆˆrÕ–«&î²»ÐáYdöæ¥Õp;>×ë_sõ=^¶6ÇÌJMMŠ5ú"yt½}ÚFºÊ›“ü"ß+‡vðž–˜JÅ%VE|s¡º¿ø»:…ÖÍ>'8•Àq»»\ý*éýeXó:H»±3ëG‚r8þ•&æüÈWq]qU 3JS½rÝÔ*$\gŽéîŸæ9°¥)cLdQ@#ç€?‡#©ƒSZ÷gZ‚XÕ¿ÁV%>qËü›Ñ7®fLò ;騦i4Í1Ÿb›Òmeí€[ {˾0'É ØjÅ\¤d~™¿S,qû”Uq•æuãˆIØvG„–¢ñ2õ¼^QüSíþò(XCf‚-Š][Ùm¥g ÿÓsð&e®Lµ´& Žï Ðò8½Vv³Ä ‰î•öHWtd·©D öFÆ„`™Äœ™ÂÑ[Gøºk—"½·ÓÌØÜ­úD¹Ì¡[°Þ7ÅE™P® Š’†¨ÏŠØ¯c?)=“{uœß€¤ ¦‚5Zaш–8Ýo>$~øÒ¹¦À¼>•´Žýÿ¬½Û’$IŽ,¦ ˜¹GdVU_§g/"$÷PHòÿ‚o|åÓyXÊ™3sfúVU™î(`™Y]·•¥ÏHWwef¤»Ã ( -ôÖs&F[޵ûÁî¬#¯#ÜRö-sæœöt†‹·Ìü0h…¹G!PiÄBMúÄîŒyšÏ¹" ÔZ;¢›Îಣ#RÖ×Å#³Õ/ªò^@BGÒâÜ5ð–ÄÓ­Ÿ–6Ÿp™vtw·™‡€ÖD)¼ÕØÃå‚#b¿n‘Õ–-{ö8;(„æsšUzKóâ×ϰ…üþ* Ô{¸'"SFÁÌZƒY‹,Ø Þ>åéßš Iô–ùêÛ¿ÿågJ¡!Ѐ9km>Á-ê:œ¶žÊA$áV„†O‡C-ÃP>‡¢å?Í8™J¦Àë5z-Îç»3¯·â'B2?õÙ>}#FoùÙÖÓJ 0c›ìG7Ÿ¤šz«K–™ïcß·ˆ[2ìÍcÛ¶‘UXÓäµê¶3Ž7ó±‡%f$m”§—o¿v‚&“72M}‰ŠQ„Óe]ÒÜ( ”çð,Zö&¥1OC-–w?C0"g•l®¾¸ëçaíìKš~ìyfNä­¹…ñ–m¡×é&ݶK¬aëà›{Œf»ÌR†›W¹‚ž!@‰dîpÏ¡fû°óësc±·”hÜÍWIrˆ¤­·6®}9osD"è ÑæÛÝÇuÛ“Íb€BÜ–à‹•[ì‚Ù Øç z7…qçTêJ°ê؃„ÝØmæ¶[M±ö}œßþþ§ÿ“ãÏ¿¿!üÜ;N™\-#M!ƒ”ä~lú°UJܽS¾Ò}µ^Þo ö^§¡AÆjª !KL[0)2Åkh…“’7o™ØûdÎÚÓu®@4T5wœ•Y:î²Tæëµ™XÙwIÈT°r”aga©Zr@% ví÷¯Ï®Ì©*L3C·~ã{Wj…+Ö˜pfWiŠxPêš5[ã)£fñ‰ù|¥ƒ¨÷yŸ3ùÔ„Ø^7Ÿïàyåòúë¸{wAÚºÔÏ!#2 ø^3+”,‡-IØJù _±', uì'”ùtvÞZÌêÑ8oüóéæ“9â>ÿ4s‡i4Ф‚ŽØÍ”$Ñ´¥š›+’4Œy¬éÆe)é7Vš# në«oÎL•À©×ô:XëÀÍÍ+ ŒDgÀ]AG†bgÉ{¼‡j¹ÒNåtÝÂÂÏ™8œÆL5ÔÎäÓ÷é€Q'P]í6|ê»ñ³›½ÛZÑ,‹˜#†Œ&¢´Jm¸”ù;z,„v &€$¤"lÒb’vxÞúX*XþXLð¡9u¼ŽÚf07$%Ùñ÷LŒªkùÃÏW·ÓÙïA󤌜E¾XÝÐ,ØzDŒm§³áŸ^¿Â5i&*ÓªÀuÛa‚¹7RŠYŠÒN2cdU?Çõ²_èæ·äFG Ŵȧªùõ;j·EC’tóíñ0Å{~ù‘çÇ÷»–GW$c§fŽ{š¬?yI€ÙuºmKóÈ.F¦ÒUÕƒÌfÕ˜öThy¹7…Ïœ(g[èe1›« Ï©õ<‘Ý÷ßßNwË·Þ(5:—ßýH¼«­ºç¸nƒI©-=Í!g2‰’É ³!ÑM6J ;0Þ½pä¸>>î*ºê¬žaV(ê~Ö#UŒÈŬªñØn®­˜sŠ9¦Vü飭Å8­Ëù=Ìl‰Œ±EfÔôN?¨±D%J¥-¼ÊNýruäÁÐg©jîÈ3F_ÅTzêvû²Çm¨,G=mm-мu „dTªÆªÐ…5®—ýýÛöËz:57¦9#+—ÓÁJeB¾bm¤CCÿš·quK†’23øMV~T[EoÝÒ@ÀZ[ØÆe„µÛõ² ³.â¥Ô‹Šêg.r)¥{ªxÆÖ-ñžž¨8PxÛKòÝý¶I¢3h‰Ûžý´m=yÒmT}›p¡p[8 vCQ¨#H/ñ̰§bØiQÓ¼}Õî¬Höˆ 49ôÅ‚@ºGÁâ‡?‡¹öxXN§uéžðV XRi“+çbk|Ì‘tOů¹­wg¦“’­ËºÅa/Ÿƒ-k7ÁZ•ÌÍ3·\¶Ø¶ëžÌ4K')ƒo9 ‰7úü:žzTãdŸ§¹½gXTÒ‹FÇÜS¼ÀníâÑiȹbßlÜ“ÞN  Vt™ IYG—¹®2˜­ö¸EšÝZ ,KK¨ˆ78ŽÌjÓ=¶¯8;‰3A«'¨¸lÍJˆÛjL¬Uhðk¨ª;5öµÁÐ`ÝœŠG¥Ú"“@w„ÆÃè߸S U+¹Ó‹[D<R‡µµ+àÍK&¾ôMö±]÷$7*f@]_xÌÛ·dÍ"/¼çX¢8v'¤ª+̯øÁ›éÿ¢…‚;GÀ”aÚBÌ=ì‡ûW¾ozÒ#.$Qˤ ¸€Þö=ƒ@tŠ6JuÓ^JšöˆõåÝÙ  Ñ67¤Í˜ZÎç÷¬FâECæ¨é(cãXå­;FXâLKÚâ)á!3eËr]M#ãAf‘4DÞmçu‰wӫ澞=Gu}T†ª¾¸«µâßdžòzÙ©áÛêFGÔ±Ã1áxÀ½vÜG.ÉšQÞ¼d‘¡žsßÌñ#ŒÍ£œm³înV †hìc‰žzu‘éÌ-·Ì=)ï¿ãV*¬h9@ŠU£ÿ~­ˆ~4o"ŽàpŽu7íÆeöÆM+ó·WþÉ1*hƒNBGK¢›¡+C²–3tïʈ}ÛoçÌü ò)YQO!wGÅx¸¨gbÈæãåñ|Æž§ûÅ̼y@Ùbh0kÛX§›H}¯¥ºY÷›÷z`NŸ<83èٚdz×uãùéYŽ)ã!ABºù4ólÄ~݆LtÌٺܛñtç³dá¦$ÜPxžíæãñÝçÌÌŒ:ò™ÛmUÜô©ùª«Å,ËÏAŠPš÷nÙ"C°¾Í˜P9bŒ=쀛æ™mq=-®1ç+Àc7.kóˆíòö½ £pƒ‚›ÕϯÄZ×^еØA8}¶ ë¢ <¯›1/ûÑ~p[ÂσϽ…ræO Ü-þŸalÕ1„[]Œ˜ÕV‚f®!Xx !ƒn(РµŽ®”w·e=~_Ÿöɱõî4\Þ½ ûØö¼† zjAšéûG®rù5æôâ5ÄZ˜­¹k´ù9>OKMBà˜c*%»×ËÚŒÍU>6Xkýnˆ‡«yùE[¹·Å½cüÖ_¿y}ºJ’2f> Ÿ8³$™Òª4¬´û0ßFâ™'"^f”|⧨‚œ'µéçïGJ›”ïÊ%%s(šsÞê3½¤„Y9dc·L˜JçTgåQP ÐlÉíò¸Ûz¥1·ËÈ*=ïlú”Ѿژ@;gdX;¬Yq–"1y´® ¥´×xîSËw¢Ð3÷àiÝݧø¬»™ÂSÚ· Ï€™[š¯§uiC&³üKCfʲ^¨lkn ™îÈtäóÌ:¯Û·ñªWýE ÃãÃjؤŠ][8;>¥-ˆ4R5Xš„Ë„Ð8Ô®ÍÜ”#C4)°îƒÍ.tCŽ!/üå¶°¾p\|¥9ïÆ¶«"§âËz³J‰h´¡Œ7hÊéOÜdׇ¥/0›e»9ãÝ»1µâ d¦/92_¿Y)5­«U¹½žD`²ñó*o2cõ"æ¨lV3¯§ì ®öø«[qD…ÝÍepÔ¢Jž”·×F› ÁšèLy)ä•=Ý­Ë¢A"ƒTCÓŠžc¥9|NÞDcBc¤u©UÑšh§ÑÇ0­ÿ 5ÑNÃl7$½/–A “”cßG–^–òŠ)k‚»3ÝXÃV'ôBgèòó/›Û¡Ä ™©õW÷MnÖVŸâDÕ€—šÎ餮‘yZÜ-°iDÑ0n° þàüÊIJ/ækÐ!1:A¾Ò°ƒRU3ö ¶ª±3Ø °ÆÁÍ‘IuÚ*K¶DÍ6OwÌÚ;„Áõž×=×Üöëg)¼x†é)^\ÌñuVm 㘈Eyk(­H™1ŠžìNåf/©/ݰo}­êw†Œl¿¿Í†ƒ¸Õ÷±Çºž¾Û8Ñ—…)KfˆŠgu©“!™Q ‡9_TP>Æ~¿}M5þ–þttÞA‰©p50º™ ô¦Yy3{x¸O#!"‰ÉߌAÎõaLE´æÎÄ¥l÷N)4b»lpË”=ó+zñÇ‹ë‹Ùæ3s¾m}ëã¦î [N “VjÌ „ˆ1FÀ‡»Il¡„;¢Öû©uBWu79÷M‚v_Ný·¿þî§–R\ýÇ~å©H­bG „*|ÁYƒM÷‹Ý“„çv‰6.“Þ¬’1§ÒÜÜÉ1­sTfŽ×®É@+ê‡{ÎNñÃ’³ô~¥ÙtÆ ­Rk¶öú.£°2R×½ý×íÇû-Ô ÝŒÆ˜¶}(%sóŒmkÝ­¹—ÈÜ‚<Ùåúøþ×ßsJêåÉRijgØo÷ùÌ»„åús.­™ýQzóc…5U€hb±€Èvpôªúâæv“|@Ë”0®ùð(‡æaE&Ìúé|NÈZ_Ú³JAµøÖÈ8‘:F…íûõôÃv¹nÎv˜!篞ƒ¿Ê¹Þ‘di»DÂâ¦D9WÅ'@[Î릶öyÚŠÂîùëùÇxl|ƧU[&œ1öæ÷€ØÜ¯ëùú×wÿýáí%™jGÞsûÉÿ?®ÖÜŒ‹ed¨-½·ªÂ,bW³Ú¤Jµ óÑÍûÒ[3Í#ªäû3$íÛÏo嘭/GUPm`[–6›lÚ³j&„þMæåºïƶ z?nø€êvN‰pà–T~ìzŠë¸çáVçå“Ç@Âfý ²³¯¯ï~kmir¿:—¼\èÑiGq°ÀnI9¶±e 7z8ƾµæ­õR¦§ÅÛ¿ÿå¯cÀ<8?_`‹üGÍ©n÷ÛU}ivÀÎ À Å ’ÒÍM‰¤Õ@‚4o½{£¤ ·[ãí/ïl™Üj¶Ž±?>Þ÷jÍíd†PåL3¢`ðLißb*Þ—ñ*«;š·&2À#–ûÈ›™­´êÓ>ø¾Y9)¦ù„ÀÙKÕÖW[E©ÊÓ^}ÿú”´Õ/ËŒØ÷}PšË9†2Î÷‹¡Åâ÷¿ý·¿ý~)Õ!n";j|_0ÔW†B1ãô³!—æ<À‘¤y+¥2šFºuÏ ÕȤ{ë¥Ü­½–U‹§í?¿ÝÖ’ÿ%³Ni»ilÍ–¶÷d–êF‚ )"£zM”ùËve·BOn;‹ä‘Ðrþ캯¡Š~Ï‘¾§¯¿Â«'Óª©ÊÖ#“v˜µþü¯¯J½·î½Áš(jìýuóÖ"uy×­©?üã¯ùûû$2&‰Ð›ùÿsW;6»·EÍ«I²²ÎÖ»eÒZì{MI%eæ‘seҬͰ_§z‡™A×·¿m„ˆlåÉìJ"÷}À[ïVE©§štL_ÏdÆï#ÊÕ•YŠ˜XÆÙÕFù£9ήúñXÿŒ 5% ¦J–™Û¨8¿A{óã7>J?¬lœ%!÷c߇X#i]Âu\ïOοþåßÙ†tš' ‚ªÈçãèÞ‡ÏñUæ,¦] n<~Ü—¥!Eë¹méTͳûÔG5ÓƒÀ42ÓP>þöéˆÅfÏådw a¶¬^Šz !Týe¤å,ESiRl#a‡–ÑA}¾ ¿è§æ÷î5Æ8,:¯C« «¯¾tT„ÙQ79kÚ$Ï?þù;¦¦Žÿħ¾IkÊÈHuHÖ˜}6c£¸ô·ýošê;Æ•C¢Whgš ¢CöÑ@í¸Ó[¼ö…¸ÕÇÛ‘E 0_ûÒX|gwo€;2†3dÓtNóé{í$ó€¿BÛvж8×ï~|Õ`¡ìjn7Êß“5 4ZU˜x@ÿ$ZÉ”oáÉ“9¥ÌèøÐžª/Ïÿ 0…Ç•­Œ}k%ØÙ5øêÏ:yȘÒÓÛ|Js5b&í‘’ÁMÛöô4#éæ@Š­]«¬æë¢¹}Lq¾£'ðKéL |4gSJSp?Ý­1ù¨Ãú²XÆ2J|„õÆ­¸V& dýbÛÀ&IýÍ]{xÜc‡îN§û "‘Q“dò yØob9ª¢Ì[Aêàõâ_æÑûô€OèüKË‘¤c/‡tŒ ™¿KsBñìr‹0w¨”Ò#tÿÓOo<óP+÷œ¬qê[ê1¢5"Nÿ´ý-Z”Ú§y"”€M¸˜i–*ï÷±´z™ŽŠÁÍé • žrбµÞGæÈÚª}1 ™ÙZß«TÖ˜•`ºÒ Ë}ïœ â\œ¶m kÍ|mÚÜ]²Ö4ÜFŠ<‡ži²ÚâÔ ªm̃зýûd5à™yæ_ϼX‘švEÑ“v–«å7ƒ´â‘+GÜýøOßXFH!yZ—”˜Êrׂj®m‹Ò½Œþ¯xøîÕ œn‰œÓxÕds ?sWÏŸóÖjñ‡¢ÚÍyhßíµ$˜ûã¸ÎqjmÎ}_Gˆ½ïû¾hî{N4¦H5²ŒQf(úï™>¶}7óŒᄵ>;[ê˜â¤tLPÈ& ±B˜y÷Çî<ä)U}DÕ—ªfÀÔîœâϲÓã#tÀAZfªòê[*1àr’àÝOÿümSolÇ160QPà@ŸædmHÒXÞ¼¹ÐÜæ¾7˼¢*òR‰œç@ƒ9C@ŽÔÉÖX»Ö…ó·÷Ôù›û¥÷æû.7d+l)•¨>O›Ó¼ªÜ¤8e¥äcÉï¤MaF‘œ(}¼ÊÚæÔ¾mÇ0‰Ù*Ì‚Ïí†ÚÔûªÜ(€Å vjè ç4r3ƒ-ÍÚªsà~ûÍ^ýÿ«]Oç‘JÑ]õëÃ,/i :…VU&·ÍÎ'"ÐÛØ¯ëjlî‹[<^ÂÌ=jd¶R0M©MT B­§?º†ý_>ÿT½3ëæ·¹³¢U‰„ƬúÐÈëȇxŒÇ³OiêBÑÛ¥Ô]E¤”è绞 Oeq¹™¥6uP:Ó‰Ì@O®PùázнÊOG·Þ³À–³ž]/”c`6{|EÍIšYq£ÄØä¶)&²/½…·¹ÜÿÛ§ò&L“±C@Ȩ¡x ï2dn Qfço#–tزgê˧ûùЕRÊž©åâ£Áïss†’ÞvDÑ­†©@)@5n™„Eì[P—Ç1li¢âö«ê Ù¢Û.³a}uâ à¶€×›K¤¿’ÖDjŸ^kšž%ßÝ!hŒ1”è¶Gmº:@Yñ#õÑHøCsÖòˆ Ì‹Vi,Gë«.yŽÇ|ýÓÿrk™VâÉÛ•n´ê‰ÙÖ6!G€9Ô–6§pß}?~ðN4“Ÿ/o£GŒ9Êï™=ù”O'HdäèÝ›p$\Ÿ2g*Ð'BÍhÎ{RwÇI›”#Ý|lI3ë–‚·&––/ ؆[zkà}YVFtTsÝšÉC)4UóKR‘;nŸ_ïaRáN™±í*Q; ½옭R˜c˜*g´9–üË›³Ð Mñ“9ùÇL³‹œ%j'ä¸öþé4Þ/N¶Ðîûo\@‡2k%Í»ƒ¥Ø–†!"³½’†¯’+±¼~|Ÿ!³gÏs,ƒ‰òÕ¾Ï1¬“9‡oð³%þ`Î@ªŸ³ôUU¿œY«dÊ2Q±ïÕïrÔôÃæ­SÜÁÑz2µÜ7†ZŸŸT=!3¹˜Pì#Ý !SÁ ·õ|ΧyyÕB+í@ Š•~à…_4è!f;¼êÊjæ.€m¯û¯÷ó,2µãàÌÌ8²†8¤ó¿tqŽ4¯+'¸_K3!šØô°ž/þý›ßtùLBæJ)R!™&)|꿜‰Ž2åf.ÒÚ«í!‰p7¾ßÞ_KŽñöàÕm1sÅõì“å1 SpèÙpÏ?š“ÚtZÜjæÙ,ÊÐ-šcO£0„&í¬/G#ÂdÎ1W×ȹjs´›€Ô°ê«BÍ6½•0ô³èd–d3¼Ì™üÀœ^<Т %QÑf‰æËö¤¦~ ‰Ô”@ Þ£÷Øï¿ßÛ?\´î¶˜6c:Xm°8¸_‚÷dEa9ëòB9vÀn‚øùèJž(ÜóÛß ‰»Õë&«â&H ¢yw{´˜!Ÿß£iäu°¥IFK³*â:„ûL%,´˜j޼ӭ¯þh¥s ¬qHV´SÝõ aW&š—Åëü5ÆHÚ1˜ê[nôàÞT-ã\·¡§^¡º&KS=ÓBB™³Gäkrµ2ÚqØ©Ù:ÔΊ]Z¾;í¯O¡>Øì:Z;Þ5j’fÖŽÁÙðÔG(vrÀéHøﶆàÂkö»;¡F<y‡¹¤Læ!iœ÷ù%ÞBkƒK¾_¾³ÀÒ2F˜çðÙÏ:ÐâBW&{7:ÒÎvêßœt*-W$¯ê¹ŸÜô¶ÌvA±ËJõM kD„Dw=•>DÖ,¶§Our+úq sH -@;¨„Ø‹ƒô™–Šÿ·“6SÐF®¾šœùucŽq·òäÌû7xhŒûë¶0Ä¥¶þ'Gß[n°¥mæö|v,v­ŒGcc»'Îòwy^3{À¿üò—¸ [..fõ•¸£šH“rvd\OWØ'<‹ˆûÞ’†fG´])Ýœ ŸF$atƒ·ô¶œ|´óIÅ2Z¾çká6—1ÁLÔ\yÕ!‹‰•^ÝQÑÑÇ/SÒf§Ø³¢¨pPÏ“P O»Ø>zÍ/XîciéÊ@³¥çüìRÁžu¯ýýÏß Ùêêì'-BÞl¿ÖQ-Mõ²‚(ç±`K.VH´U MhëwoßjÙ/8ÀÊœ(ÁÊ`Ø ¼@­Ï³þ¥ ]^«¦dºEÑfˆ’¬¦£Éƒ£ÔäNÒ@³f4·–ñvdÉ«›_Æ”i?àé Êh¿1†?v{Dõ-óE ëßÍäeã-¦øô#×gÓ°û{øûë5w›œÐjË¡$lݽáñçïú ’䪒4%™¼5…¬x\²É͉ƒœª¨<„¥@ÈWÂvçuÏuýéñq»Û·3” +%‹J Ȧ‚ʲ§>•9%eÆ¥½¢»'YYyF…Æ Ò®N(”£ºÉéE Ê*kÁ{÷mÆc‘²)Ëüb e…OŸ°åñ×OAza8 ¡<ª¤wã÷~:Kyú5…1±þø§fï®Û¾ï›C2ñÆ^»»c{ûï§SÍŒBäæJ¤Yc ŸjJ5€–µy¡ÊeFo–#I'ùÜiú!ÿ[+=¦Äº>Ñ‹JR~‹ýU@? µLH±]Âè&˜ÏÚra]TC UÝ¥j"sª´ËÙMH_V0”S eú¾PMë 37Ξ’1SƒøÄÍô€áK¿ƒ•Lò&f"à¢RÒ(Œ 7÷Èœ¯YДŸ Îs¸U`ŸºOÿ¯¸‡·€é¶h5,QýGû ,.“2ãînˆáYù¦·Æ Ó€À»o~úöûuÅrq¡YÉëVëLµÙ<’TDÌÁByKí(4:=3(Qc<Ú~ùõýá¿„göäÔÛ¾½š§‡›ó fmçÎ1R9Byõå|_ _7•äšZ5‰IeÎ4wS*ƒ¥ªœ(·TF¥IûàôARøéê‡>0ú\p7Ï:ŠiùbGªû"Ašµ—rw2Ç.ÊŒ9 ­o;ÆÎvzóýŸ¾;½‰L9([ÍrŸµJ@54,cCƒfˆ}ÀÍÎA³g½¼Ü„ ¤ý×ÖÆoÿu_çàçíæ*»Áݱ”¿vs¢1ó%Ç +6‰YŽŒ4Æ‘ÚJÀ”6‚{19¦ Á€Œ˜Æ}–øÍþË›&mü…³ÅÇ !=3è-lŸÿ¨Ï©„“Ï7{ì/>'ç¶jFÂÜOKä6çqi‹àI?o×÷I[^ÿ㟾i1RlÌ_Ƙ£º#²F]Vê>WÖ Én̼fèúö·ëí(?F”´yòä„”*ìóñGŸ7§bÛÒ”æÝ&Å©+ª·V"Gð¾…P9IMÉAÆ>äš•ÛÚ3/Æ{éã·óéøèéÛ_z™›BúsS @iÚ¼t>%1sš5?-û£EHñè©F‹ôv—vwzóÍw¯îšbLQºÑœ9*X®½“Aîm$ch1‹mK fy› ¥j1~¢v‘&˜×ÇÇMm¯c ŸÎNA­r2OGIÅ úJs*F2®F3زN· !#âÆ ›ïì2ÌIÒÜ ¥Êˆ8öÊG†€i.Øcésk~òz¾‰ÿøµj]{öŸ™™öÁ²6™Ÿ‹¹Ykînb¦b¿zjñoÞò´ø÷oþôú¤=Þ=÷(ÚtŒ¢p†/4ä)íÉŽÜ/›µ¢„f ÙܦÑÔ¤h€HÐÝ·ëõò82¯s+ÜT:x¼ŠƒA†#vœó— ´öî} ³“”­‹e¦YîÑû ¶ãUö iĂΣ· ƒ¤fÖÜ0z&™ò‚FJçŽ4&%V’Syò(ŒqÌÂs†‹ší†ÛúàTŸÿäÔ Ë”è­«æa8û²x^wš5waçëe§Ùâ-Ø‘c=uÉîþéÛ~¿,9–Åœ#Á…À™»ùrÝ:H2YËk,» kÝÇÛscšõȬ3PÃk ÃÑ ˜@ÊOßüvùe×yzgŠ-QÉ”³h9馄¹| ™*Ìð€Úø„9¯Cff½÷F#™ŠêDž‹`­¤µÖÌJ[s7©æœÔÈÐÝÍ<îäi¥lµù=…á"í6yø†f}óg†Ñ¼@šêèÞzC»l­¡yof““æÒÕûÉ[kVA{…q Áš&2;sBÖJ)#FN8›“672Ù:Eàäá2"ömØt«é`Æàg=Õóôà“W»nà +LÖT³9é{FI®w‘¡ -™Ý[P2³ÓŒî5 Ê_'ŸƒÅ‰‡Wy:ûê;æàCìħ5ðµÖ;j·×±±'[sk-öû ·wd‡Uô¿¶Þ{_Zs³sk(s¢t{ç9hÝ3óIàƒ Ì´Þ,à–I8sZÒÌJ•ÿˆébˆîÍPýóvÄuÏ“·5üÇøý«ìÙF…l\š‡ÕhàA¥²8ZåÜ”¢–™¨Qƒ Vð˜CžD5œ9èñ®Ëž|¹ Ÿ9šâ%hêþ8ÐW%ÑÖ©'50ÂcCM}xÐÞ|íF¶[Ù—S÷¶vQæh2¡ )Íš"t—ç5ëÝ}/D¨b N^Á9ë|Á4÷¶.­–‰Ý|pìOÂGtÌŽH÷ æÜªKÇ Á¼w”›ÃÍ ‘½8*s8•Õ yÍzk"ÊÁ¤ô‚€Ï'_ûÌ"(™ÎHÕ ^|†éüÁ3Æœ ›Í62V-Þ ì‹dˆF_+O"£…}y¼Ð9°~¹eáËvã¨M8ÖšAÖNˆÀSþx¤b,®Ty^‡¸^/Ûœpb¸1ˆW€#!ø£ÔÜWÙ@»¦™ÓúU¢yëT¦%ÒÛr6ä>8 &'Í[B¢W¾ð"š¶ô/¨?? Ø=~þëÛ=·9¬IPUœÃôí3 øOœMÍ)å¢Hŵ±Ã )­ëzæ®Ø.—Ë>RcW\H_G¦ÆãcÎ"3ÔO¯ÖÖ_|öGØÃõ>ÁÇ­'aå~ìs<¼/\B›ý²å©eÛÒOroK§Ó“°Þ¼Ä¿Ì19b§»&[ö¨YUài¤ÊçTs¤Ò[sÁŒ!?€ëÛcæÜfªÙ×—Å2ö¡´nU®›ºÓÏýP•„?úü_µ;ÙûbÊq)i!Úck–ÞzÓ–Mûûýº IïH’&cñQæaŽÙkÇ<’!…¨ÏÍǘ$þy>K_ofÃdcWåõˆ“¹à îÈLäý›u¹{µ48‘I‡YÞuÌCM©¾¬æ³j¤Ùc0,#h˜ÕZÁTÆô{@ÈS·höëùMo,„DŒ´ë†n×w¿ýþûûx´ê¥÷Ô‹ˆ·uý¢òKæ\J ²¬@3.”~-03”ëä`wkÈ€7“µ*—ÙâÆ¢ÜN:OyŠ£¯JPÊÌ?q* ÕxWæ3ïKr ˜ëåÌ´ÄinÞLü‡Ö B§¢)½Ùýz]‹´˜K …î>{m*<Tˆ&Õ¨Vò¾ R1xˆ„¤<ຩŠÓ ©Ó¡}Ûùý÷Ë&³ éEÜl{ô‚¿x¶—˜ù—Í) tãš{ïCÆŠ&ZwEX™à€d†‘c\®!nm]›¤ói©„U5j$`·y¦åÛž->{ @ѯì­ãYú9ßÒ„ ž~®²üçÕM@ôδsä›ï¾›ÓÜp,\÷»å:K Þ³ÔK¢X—¦@2Ã(%lë‹wVÄ”³AtÞä•/‰¤¹ÙҶLJÇý·‡K6„ÕÇòáÞ¼ñoæ|–¶uŒß¾±½[ª$¡ègîÕZ=S)"vYC ÇØã² Šf}½ëH.'GÍÕ’ŽŸ›÷¬Ùßù!–^¯¿¶rßž ñúìªàÈx$BŽKž¼ENÏÛêYÅeÍ_ŸÛl+¨0SÚÚyå±V""0s¢"X…”£4!ê‡0ÐÐ ’5oòîÕYlIÖke˜xÊèÍSqùí·‡¡0WŽœý YÙ3Ì\¡/ÁOݼí×Ù³}Û¶”g¤µÖ<#a^â¼3“&¶Å¹c =fÑ‹•‘ÄÊR;_{3%P…X@ÝßtŸ½8æó0æ±2?ù³\5ÝÖLîI–s YËH.çõÛ³e;…P"¤ds\ þ BˆqŒG¯Ä!32ym‚=“Pµyw´ÅJ¹ÍvDå5Çk—WQÝ@SnÛû‡-¬¼\f¢zN óÏžu×?=›^´W}Þœ‰ÆÀž#¸ÞŸÆØÄ¶ô=2``f:Íúž¶?¾ß¡Q¨×#`ΘΕmêɨôSÛI…ãìä7ÿô(fAcGÙöÎö¸NóÏ)XCË9ŠãÈ÷­õ%’=SýþÍùäØÅ9ÉYqºý„d 0FF öȬ¶¼äÆIX Â•ï¦ÇïIDAT´UfÈNÒÔºeá7¬5·Nq²†Q¦´½ÿý’q--»”×’³ç´Œ´OAï(²}wÇ˾òÚ±&~úç¾_~«î©®=—¡ ¸6¤)·Ê¸÷$cX·õÜ"¼‰N)e ëι΄ý8âR†Û¡Á:´'< ªY÷>œ‡Ä3¨Ü•0¿6ÚùÛ;ÿEïÞû}È×%÷8)¶-iŽc.íºì*úz¾;/} ™“R,ž¯3¸¯?îˆÊ­Çà~%û©eˆanŽ‘°ñÐh[凤èÝ#p1$¬õY[aKyݶ=½s¿6Ò[s3@cß"®I*‡Çžîû`MÚ­vyòÎÿ)¤7f¤¹Ï±A‡A¿ÿ™Ÿ›£r÷ëv:m£…˜Þ×õõÕ튚g¢1µÑssÓžRÜZ€ÌÛݲ0R¹*©',ùƒÛ{ª®Š0˺|zœÐ,dÔ‘ûŒ˜B~·Ø«?¿±ö𨓶G÷ånѶ%­åPt§RÖ.ít¾»û²®yEA†0k“ÖÛORæØÆÞ\Zø¸Žá†<Ž`lû/¹®KÏy:çÄjw*`Å|¨P0sì×!³Ö3ckKoÝYM;[l×P¢ÍÚ=gp[ Þ§‚Ö‰ Tùu%_MÝû¸È7„_׆ÓÃ52 `ƶ…¦‘î$sTÂQŲ­wÍAA¦1íY |“gBÿ=TB| XhÍÊH ‹Ø-úéÛeœ¾{­üÇÐ}û¸,çó"Dºu¿îAoÚöÛý²WÒ—¥Y„µÎœÒwFBH4ûáœ4Ã~ÝcY-"[³^eÒÈýázZkªð3žŽ°K°ÞlŸx1ÇõrÞÚ Ìûº8…Û¡AÓv‘6ĘHŠô1þÍ×Ä»…ÿˆ9óßîÿöï»oWxBÆ}Œ}ˆ"1¶=’ ´IUiVéø÷µ›Á\¥÷ѽbBçtÖGj•ûܧ9ëƒOwO:#E×jcÛé© úæÇõ©ñÍö kâiY›Ë¸¶fûåqS{ÕÇû·×‘ú›iTD.Ö9†ÔUùp£"`§‹ywíã±/ž—˶ƕêE¿0#çþÔ.5&­¢ 1”™Þ–>!8A­£Ð'Û¢SëÝ‘Pî×=DævÝ“‘û6B°"æßþ÷òºýw…´ñuXíÍœ?ýë›öûå*0G’9†¼qˆ±m*éyn±Ç*e úÒ‘ÒÀf­YžßgÞ1[bÊ>¨ÈØ\ŠÌÝyÞ±WE-Ó˾¶Œàòú 'oËâîÀÒšåÚ¯—óßÛïûåqAd;¿¢fï½2áRÏ›eHDë"_¬)6¢Ùô hç»7§ÑçZ3åžc”"h3xV’Û2¶ ›{³~·ð•bŒ$ÚûwÙä×=êxt|æUšûò÷æü/º|û?=ü÷}1D’âÿרÕõ¸$1²ºZòGf²In±ûÿÞv±—‰g,uWñº5™$È!~± ² ’Z*’Ef !3»mkäôÄVo™ky“줹!33ä«õ‹ª¦jïh$§k€f#7~”|%HY¼Z̸D7ŠV5òùùTòn‹.Ÿðß}Y|u[×8ƒ…rßuýðûòxzÿ´^Š ·8–B”2Ê“ÓM»±Ð¨RÆ*.RbY¹Œ>ÑB®¥‡MSÂ"[ô@Õ誄9ؘâras”Z Cm“}0´—Í‹ZöÞúañÍqù†izû}>ôfC¦ÿB9/O{}ÿÇíï½°'ê= í^›Ð÷­•é2µ>ÇMh¨MfækdÖIjÏ}›Â Õ"Á1¨‹a´¢¯åt_\Z™V«A~õºÃ< óùér ÊËù1ºëɹžÂúÀ&|xXX?}ø¬l­ˆ©n :dæ8¢b+™Ø‘ô²•ô¡•Ôù{OóÎ)AؘA¡º&ÃN‚hÆÕzÊ7Áµ£«5ÛZO©ï{k 2åàþÿK‡³Ø!Zú¥r~©vŸŸ¾8£gŠ¢ÃîÙ»­u‚™iÌlÀNðGÂ&ÐÌä6,¶×Ù ;Q2n@ß)GKu :=‚Õ©R=^î 1šEüSß-L,·e½\™8«ê²Ó#Dsû×ÇÛâröV`ëbƒ™Tz&ͤ2¦§iHˆ6EE Ñ›¼¢í‘ÓãêÕ£õ<ºg`(¢†zÎí4Ðz„—‘Œ Þó¨ÕHx0îAC´¶·Î‘²Œ_ªæqØ0±ÿ_ƒm}}ÖçOíãžîÒ—?Ï_¶èªû­ÝËãç¿oÏ¡H,ÏûF*iTÖ­¨½êa©àR zmá´|×x'±–ì(뾫„—–ÖùÈMU ëõt«å¯åꥅÝû…V«_£Y´Ö[-öpÆ?¼ey¿ænÝq½#2ÍÊå‘ûrÚo¸–<;s040qd5MB„†l^é…ÌzËâÅ`”Á,Ý”þîü[nNkÁÊl`oæÐÞ’µ ‹ÄD¦Ý×—‡ÍïÃ’²U­›áÞXsïV­„¤RF$‡éGIiaL–j`•ãž4pãÌýÓ¿ëöÓöÆUl-çß[ÞZðVž0Ý»c{ÙÐñh3xõïþžóªƒ: ³§Ô«Þv¡ Óº1¦%›’Õ˵GK˜Ÿz‡q½\`06¤ihóª/ ¤—ËãJAÍ—â+,ÍfŠaŒ¬…RÄOOâ#—©+ö]î5e„͜Ҙ°*³cLo\óÓÐŒþˆk5*s@^oèv˜‡²kNCØàˆò•àÓQ~¿ŸHžÉ›GB£¦÷[ÜÿÇrrµ3×s=ýõùn ŒÙ_n›ŽnqÜóõæhˆÀ1 ˜¢FÌè&à˜ýÅœ>KÀÊ&˜ó.˜³ž·ÖŲ^î2×r©(Ö±!•9d½t÷R¬—S…™é…´fc‹E!Ò°EÞO§ó%ÚÐf÷¶G)'—›Ñú ÕÌ”=Š/;ú˜Ÿã[xM’,íÇí RÌÓï+Ÿ›f=ö©€Tæý_ùZKÚáð¶œ0C¼^µÃ0f˜Ü⧈üþ¦Aº¨`IEND®B`‚nip2-8.7.0/share/nip2/data/examples/clone/clone.ws0000644000175000017500000001404213224651032016572 00000000000000 nip2-8.7.0/share/nip2/data/examples/clone/example_im_01.png0000644000175000017500000025322413224651032020254 00000000000000‰PNG  IHDR¸éÕsv= IDATxœì½K,M¶%´ÖÞæ‘yòœï«ª[u»A ˜"Á„CĈ hš–`†Bü7Ä¡Ft÷½·êûÎ#3ÂÝöZ Ì<2ó<ê>šA·”¦£“™ææ¶m¿Ö~ð6ÞÆÛxoãm¼·ñ6ÞÆÛxoãm¼·ñ6ÞÆÛxoãm¼·ñ6ÞÆÛxoãm¼·ñ6ÞÆÛxoãm¼·ñ6ÞÆÛxoãm¼·ñ6ÞÆÛxoãmüÛ7xû­u„¾y—ö>èÛÿ ñõGÿõöbþ¯ßúÞ« ¾ÿú÷ÞŽ­—fŒ ™üç/üf¶çEÿ`ù§AëæË—±>âxF‚„3|»ð¸gÞ6Ö ‰šŸûzCbþÇ´üêýcf}uýA¸úêu|E‚9áí|ñ«gzþи‚cZÖóõ€Ÿ_ÇWÛªc`‚cÓ #æ…?:°i¿zÞÓß݇ëy1/1×KüáþmÄÿÿœÿoêxA8&Z\—<=÷ó…ÇÉ/’°Íñ&=¯Í¯np;!àgÎå8ºˆÛÏ××{ΟxÍaù¸ßø{LW·›Œ _žôñâ‹7_Ã$Ç|ƒoùRD3?Ÿ7eüþ£“_$àgyõÙ!¡^ÝçÕ5/~öçu“¿Þ_kûÁþü‡Ëˆ¿í£ÿ™ÿ¶ÏÄ÷_æ^ÿ»ßèF¬(wàÃ¥OIp°: cÊ›Nü꺛ìD<Ëh¿<àß\s~Ìënº€­g `$Ó’oÊûyÂgŽó £"â…Ž£m€ÁñËkŽ=$‚IBC·@üs¢Y:ô>äÔcCƒÂëÏÿø‘e0¬øöúˆþý§wI’õ|‚Ïw°ª$!"j<,’~ÍÊýø©n¶%o¢Ð°=$I,_]sþW>‹Ð ­Òz»ÎB0>ªÊ&æú¿>Òܯ»ÚÒ¢zE[Û~{#à*%3ÂF–qIqì̹‚ä7ªáöÜÉ~íÌÓ1!Û(ŒˆA·o wü}Ûªröëòläß8nÝØÑþð›Ï$ƒò+Â}C¨ Ñ¢cPNós?²–®Õ+–S;Vƒn6‚AÞææÐ1ž· ÷^÷džH#–ª.€s¾öÕ|qù|ÑzwbïÅõ´lÇ#¨Þ«E&7X–}|>16b s?:ÈAºï¶Ëæüpü Y¶»FFɯ­[<Üãþ"PÕ…½ò|Nì_½ …öøp]$)™eÙJ›7Ä|èo ÇgŸÑÃë0NþWHÀ|ð1ÂyX篟ãæ/Œ¥Ò I@áÎøÆÊšŠÅÇ'Æ ™þ‡­x~l‚dšedßadfkÝ :ŒŽḭ‡qr󄈡*}ƒ ÙqˆÒì=áŠl‘ñ¬Ó=Ÿ‹Œø³„?  ÇÑeRAk·NŒü}ŽÁ8O£­øú„¿ô7€’¾5 ^,bl ƒ¥±I™áÒw9Ž/½§‚e§mKÊÈfšhŽÄ÷ÇHE’ö†Ã„‡¸B¤Ùr:šÇ³yX‡óÜŽ]ŽHL›ò»Ð› 8¤Ìx±_$而œHÒŸ§ÞmzÒ@䵓‹¾!Üán¡°àñþ‘ãƒ-!X”õõ˜ß4À@ÈdYßÛç•ÌÅW‡†áˆ¸ÉNÂe«ˆ›³ýj™Bóc$c&ñvTn[ö’ã, â&¾ëýÜ–žv„\7·bÿ"#à¿UNò` D8t´ñú÷8nNh"mzž¸Cd~çršœîÀ ñrŒÇöpýÆ?¤s|šþ>à÷¼Ž±eªÞA;¯Á>‚ddÁˆïïˆa½’¿ƒrS cÀ²ã]Æ3Ûz(\¶›dË>aîë÷Vn0Œ¤u[M Cgš1wòÏ’î°†•ED.$˜f¿/*'ÂâaÎSïW¬ý,¦æ™ß4ü×[6AY§…ÔE€2ôÍÉ=ðÞã( ‡/œ™™¤‡96x×$N¾àܯ'Ü‹ÃVÙëuò°nOåiáܰcI´þ¬iAÁxY!I„šij#ýgæ LÓf"†M7¸üÏÁ\Rþ>1h@ÄwŸÆ6œžSÎ@BèP=ßÜ}^v¬M˰csS¯9î›Ý{<ÔìŸ'Ü ŸÊfžLÔDäf˜öËO{¬÷ðL )»À 锉²”°X £˜Ï(Áߎ®iü‹4i™¡#4 Á ǧ»mõ017Çé^Ÿv¶É‰ <Àð©)‡¨¦}ZŒ&,祶mn½ 3¡æ3Ì`Æ?þÛgd`,î+Qù"Ðy Lüø·+UŒ`#°w•̈šÑm~Ó/›ŒgÀe²©ê…Œ UEWg´0¿o}=ÒÏP È1Õ0Bg<"‚ux}žÏï‘y[ÐÌ@˜ ™ïTŸ÷ð”¬É@k7û»cPnÏœÅõ]~éCpNj#¦¼¥aÕÞ1‡ñ3ì¸ øgÿD80dèW÷}c‡·¨”~¼gÏÛÅ ’k/MAÿi8õixy°Œ²—##€; 0¤Œ¤Ã~øê¾_/ìà+ ƒÃHàü›ˆ‰ãe†öýPc)éåñdwOIDžÎ — ÈŒX;c¨É8°¿ã¤Ór¶è{-C¡{™B”$m8eÕ~ÝÍ0ãæïþ÷Ç2„›Ï â[ù[jzà1™õG”»Ù½r;5-Ãj}Ûö²F$ÿÅõÓª¤‡e?çÖK6™™­±ú5¡*²’ÙZ¼~ì ¯‡Glw2^L|ÛÃY¨ˆ ¥–çûuÿøÙ„-[[u‹Ç%\&ÝâîÛúü#@f¦–»0àëÜ¿8Ô÷Pø0W;·í²§&àFÂEIv:C£eî ÛTÈÔ÷tÜwÝ Ž@æ2yõo%œ‘mé™KHkm×ëu×4»nGŠLÚX Ù&þujëy©Ëõ)#JEdké6Íä¯ õÍß|aÀê¡&áI™myøéîÒ/à5m#Ô} ×d,A9kÊØu©=ÞåþÙCG;¥ :öï€ 9¸7Œm9·ËOŒˆ iÛm¸Hriý‚ȶÒ;hÜè6ônDÜÞá8ãCÃcÊI„-yaÛ—[DûÀtˆbkµy¹ÆÝû¶óÜ[BÔ~§e=_:~Ùã”*Ç8Ž•¡ôîìÛ*†]Z‰âúp>î…vÂðºûýÅ”x¤Æ½šPG ñ†ƒL»j@3Azn@ªÜNíŸ~ùüþá;Bý<èÓ€‘² ´–×úí/Kü¡?=b}X#îò|Þ?ýó+uͼü¡mûý"Á Ù.ÌôÃÝãçÞúÛÒPE!«j€3Lh×iÕZçea‰KYÿÝ+Æ0˜·—â™ã NêãúÌ}Œ¸a|cô)œs^ã–àJ"OI¶¶d 2!3Né8==iC,ãT“òjapAï„„×S¬§µaÕÐ7a˜¹4ÊÇ¡"íŘþ28à€œé°%&a™K6íˆÞ$…u˜ùû4½Ç“É«Ïù®Ú°íq¾?eœ³3.WU<Ý¿kKmKÂS—IëçeÛò|n+@, !1ÜØ¤%dÜgÔU.àÝXh»– «^ˆÊ¡ nÒa|bZ¨öÕ ˆ0È}>¨Oçm *×ÓäÊ€˜Š2Z,ÙÞútÝÊNˈÃ<ÊG)—ª½—É%׵rÊAȱœO쉬h:IÇz†ùd,ƒn˜ÈðP£Ã˜ã¦ !ÖµE–Û d„càÐŽq/q:È¿|ý=ÞIf$Ÿ\ݱ;i9îÚ}¶Ê0R–×е~W>x8UR€*;Ú„\m“ˆ ÆJ!¾E¯¡ @îníµN(h²ÜtB<ÿ~‹˜É,žqöû÷Ÿž*´¶ó nkPáØ© ³Ñíúô¸í‹Fæ³59˜ lÌqýôù"ŽÌ!$ në‰ò²¬ z$µhä™¶ 1뙼ä#ññø=#-3p>ÂB§LªœÝØž®Z$ ƒ8p D$Ó,EŠ>Ï /­k¥ª$G$%FžN?W"‰Ìt$I«ìt¼ÿ°ôºöˆ–Q»uFó´ÀK•tå©ñЋtÁþ§Œ[H¯<¡Ñ`œî×¾½tûezÎ-¾nN‡ùu„›a¢¢-ËÒâý¢õÝyy·P»×@Ÿˆ|A«„Xu-hËÒt÷þN› ëu¿Ô݃­%¶PIšªx½»‹îÓÉÙ Ɉ!ÞA¸Cá½%oð–œÍÁv{Iª‹±Óûµ3½8½ô# f[ârï8xžˆlØaï»#Öå!a„AÚX™„ªîXøÍÏír×ÝB×R F1CˆfF.žœ `Ý=í1„4Àsõõ÷ƒ¹mw‘µ:µ¶¾~ú){^ÖuÛ°P´ÉÐÃ^6£µ­-ZÚvÉ$ÉU¥)¦ ‰Â`b‹mYûŸÖûw¯Œ“[¨kŠ·þÊ2=P½ñót÷nE’ å\–¥DÐq˜n’°…ȘöÃDN€iG€.ë©®]qêåýû»÷ØÊçóòÈ€üdU•t§iOë.¼±iañ4LÐÑ¢øœI@t Ä÷øluãt~"Ù°š[H²nªj:‰9²emî¬Á¢Ã¿'F.$¸œî $"ÄgÚæ² Í©¾’J:ŒùÁ&‡„ÛV«÷î%ôö’#½î%;µÅKýæn“(g«,*.§5 GÊ"ïúf3›¬á‘Ís3 Þ‚ãwû/dÆÞÕÞÿüá=rywæR!•û6žnÐ$ÞÜú|Ù÷. #v°o?NšæÉuCºA7¦»À\J\ÎçÔ‡:YºÉÆ$QÎ*5€ÎåÔ¯Jí}ýð»ŸN aY¢áúôe{ºî½”=0ñ 9O'?ötd ¯f$nöÛâU;NËI½—|€zã)U²óþ·¿ùøøXÕ‡`Ëä‘ZDŸöi“ª]Žê¥q‚ˆl1Ëɶk•I¸3~ñ, áŒiù¿Œ!¿@"&Ë`«o½¹fõ"ñ‡yÃÃRõ.3yQt™!U A+gø|w‘–ïþ2&dôOz’JB&aFX5B¶ÑbAß÷„ÉHjø×óynIA.·_²%[d“º)ˆ€6e®½ïO‹ò]¯Ûu/ž¢ f¤™¹WѸ' ”£÷N FBª"[Ð ’`ÍyhèˆØëÓ¥©­¹ÄD?p2ŒlKβ«Eb z½ ÜØ)fKÏnÒ·)òÆ<~Œ$¢¹:¥íÚFªî$눡ØÈ¥Ï/°¡ð^Å +'b9í8ýþ¶¹¸×ºlۗ˲bª†jÔ_ÙÌ–ªBÂSGO\¶%/s¿7.¹=]t%”cÚ8Áê×ZóÒ­]@D[¶åºo€ RÜ$Ð0·,«úVGR±FŒIªÞaðüp |„ìœU¡.}cÔGõ¸_.K#"Ã&ìögd`ò>0÷^ï©~Q{®ûŽjݸœŽ¸ý¨OàîâÖ¾b"`=´]|ïÏ_N÷ZôkFHe´n0­YV°¬%è@”`?òÌËÕK´ûÓo~÷î×¥Õµ–³s9ú,›a!˲7lešË)»Å-Z&fØ‚S}ïfÔˆT¢gu,û_ý>nbAB\·žÑZ_µá>vKÎóR»ûÞ•Ë6Ÿ;mA¬íºõ½´žµhêôŽ\4» Œ0,«r­KOoŒ”³Ö€GjY 45×þl >ù>Oç§=Â#2`QÊhíÈ+T ÈÁOt7Ô¿1NŽÄLå×m9žEÇH0¤‚Pªþ¸­÷ë]m{‚îQê,õycÚgfM‘«i9Õž ëCo jAÊs亂ƒ‰A-Íݲ\vk¼’V5 IôQ¦uø6ÖÛ9äd2RòuÛJh^X]=-•a; °÷£@t†Èu¿\‚öÂŽ¤l¸“¥!^—Äh¬xŒÖ¦{EHû˜¶K’‘ÍrE;ë™È9SÜøŸÍÛÇÀô9j–¾S­sä‚fûËÜ-…˜¡UÒª*”•áÚ·¸¬ï>¼kk¡~ÛŒà¶_úÈlQ˜#d½ƒ¢UO±4÷/Û»*4¨dÇÒ4 ¤™a<c³¡–Nš™I½PÉçt•§I=­ÇÝŸ[«"ª0²{®ûnvw5Fõá/-Cý¹Ä™C÷/½Ð÷¶®“yQay±«wóžì¹P½"ÛH»QÁ ÛI©ÚžŽ˜ f¬Ø0"þ«g²üçÀÿ6¢q3§êû»¦}1|™ƒzÏ6¦-ÃÍU44¡/O_Þ¿;?&b¤j»j ÷b ‡DhÄÛFh=Rµ/ jßÚˆÔÅ\—ýv|†ðgl-½_g=ë2ÆD\Õ¯]ãÈ¡ Ú]ŸÎ¹uó*ØUӈ̂хª’í(G¶v䯎q¹n ¯å5eµ§ Xݪïß-;"t!S=Œ:àŒaq;¾†sf¸…¦— Æóš2ÿÅÿ¬!±øN)ñÄš­Á,/ÎÛóûP#ÃM„»ìÎ9-У÷Ö¢ˆu¯T©dp ÌÎ ÉŠ³Z{ºjiOë¶/À*Ø*îj§ ö­#,¶\÷§§Ó)í²3Ñ£™ûVqŠ„ÔïüXkì'9ÔcÙÁ¶$±*¶¬Øx|<ýzþ]~ÜÏ{4.¡km×]¶ñ`µ¿º¼ûíSÅé¤_þ꯿ôÓõ_­ÿ~þ*gÔÖ÷?ö}ëe'¹ÛÁ¥ØŽ„B"©e­C•ŒZÐvõ×~ÜK49ü¢â5ÊüçÁ¦ ³PF©¾ûwž>_̺¬Òx`§s€¢áëô.Ù L«Þòê^µ¨"G2ذº#Z0Ú²䆶ªC§Öˈ@®ÈXG Õû2k ×ëYýOûŽF*U—Í1lhp+Ýÿ¼î¿X`ºŸŒˆ£#ŒÒV”ï—'kM%õ®Ú˶Úµd«þ&N§‡ý—?÷öÎÛÇ?þôŽï¶§ÇÇǧmÓ@L„D^ÜÖ|6YQˆŒÙdbÒròE<î5®•¯RNv‰Ð%"ôqïÿ|ß d E– O4÷Ìe¡j4”Vs[m†··ÛîÒU-_EÀ_’çF³™úCÂÙÒ<$©™‚z€Í`;—XúàÑ4p 3{Nvߊq 5ƒ¸ ¬¬Ò½éë žÉ–óþ.Å`ÉæÌé Àv²Ì°Ù*Zk\ÖM—è´{ ËØªÑ–úùáÃC‚`ÿr´Gt Ë4‚y]ïÏ_–ýrZzÅkC‰îÝ™Q&©½ÖÊÚþô×cïh!YŸwl¬½8¤ $#¬Ž†‡¾ÚÈÖF&¨£‹àÄö¿®I¡WñœW¢z”Ç”Àž€a„ÙØquÁ+lpWzd‹ WïÌ«ú5²\A÷HR#(ï½G֞ˇL• ÃH_6µÖÛP¹“ Ø$“k.£â2k©ˆáŒ‚«÷Ž»QçÊ8½¿ªóþ§¾>mˆ{ï£=µèÒÖóú°üéónÇ:¼¤äºä†H>$;@i©¿ÙÛàú¡^©D€´7Ç3‚±¢µç~/D‰ÙÖ6bG*/žÙNߺçÇÐáµýˆb7Âa"$™äaœxˆO•gÍÁh1r«žú×hJ3Z4 ÕÝw‹*ŽöF¦övµ%ôÚïN ;Q%ÊÞwŸ×Í O€“L˦ l‹—ÖÁˆB ;IŒŒ¥”í; ðÃùn¡Ûú»û_~¹zô…òÉÐj€ÕNï"òÓ¶6‰ÑÖˆ¾— ÿLÐ’?»BkìÊ숦åÔq$ÏC’-²¡€}0gÏ1›AGˆ#…Æ€OKùûÈÉà48äåEåpµÕe"fNˆ#‹K¯ª7Æ [L‘&»%DT!vï{£ ö±×u´øƒ®®¼+ϼh9rYï·ýÌù|ˆ‚¥^ÑÙ s«Óˆ®Ð®"M¶U¹3‚ ýE,´àÇõÝÚ??9#—FÕ#À€µ·S#˜úÛSòñŒÑÔˆl¦G‚½<¼|<ëº~ΑªÎHvß÷­ÀýŒ0³5ÈR¿µ?Å"f¼e¶¤Q ‰@B{½Š€Ã/[ÇÏà†±x8 R”Ì~½T;­Ä8 Â¸QÍæJ;ÄÄqÚvBe2 pÈ"QÖSDPÙš¶8!¢wY£¹6l{ûÍï? JE8¸°®—íË•ëùn¯Ôè„éÑÎOˆpÁ­E$íÈ>ú”F0«©òTDœÖö`ËlØýøW÷ÍŽõj£"G€Ì±®§Óe¿¬÷`0GAƒf•„–ÓεGˆl i}wkÙö2·ÎDïå•U#bÕj'"sèr{ô¤©BpÉ]ü|YœèB}û:Áäï0lhvǬš>v+>Šõ=±¿$>€²`ÌF¢A#ÍðäkÏV¹žOu‘»Dd•·-ÄwH‹yXf!$UȶÓFä²Ìîä,0Ï~øäh© ­-ñ>×ÅÕN8÷ýS¤f&¢GS,=›ÈtŽÓá<Ý/îtíl ¡ÝyÞº«`&ÍX—«TGч=Í g“É+xUØø3GÂ%&èâN‚ Ž˜Â„=Ú×3 tK?ã‘¥”’EŠN«5’gf;LuÑËoÿñC¢Œˆ§*6XªŠ„4Wp扎œ|Dð빨€Œô"IJž—‰*ƒÒÈ‘ Ò"Þ3rY–ˆ<-u­ëëÏ—+f#!ŠI¬=FFmË0™iÄrE¹V·%½•˜!6ºÄQSUÅÙÊä ¼3‚ ùµŽûûsœÆ6 k`æÌ#>SÀÈzB7c+<¾¡¨G¦,ªª›AÁV¯¨œÙ×.¦]Ñ·»ßþ#ýÕ*92¨k—¹W¶²è’0[Âæ3îãéžÃÂíŒü2ÚºfnÏ  çŸåÖâ®­÷ÃÑŽdË®Î^ëé§Û~Æ [Pjitƒ 5ÃB&ëyqµž§àfK­ùÂeéÚûÝùÌ­ §ÚöŠ£ÜFqëyIf¶ Çè÷µ;ð÷f­¹n]ôÉê£)`V!zfdÆóÑðªó ­£¥`ÏÌD/š!ƒZ8ýáçí²G沜&`d¬{~Ú>-0—-ÚÄ`cðûÄ≻âyb(Ö®OŒÎнHFÆoÎg?ú©pz×´mµ‰ie23s08¿îžÇ冴D0fœüÓZ£zÀ™˜úçv ?ËÐçŒÀ!é\$jghT9 ’j±ÿóÇ?¼oÕJjkˆ ºK¹X}ðç|”g›x&?ÝF–j$™Ëå耡}÷Êð<ä½·v÷ðø´ÛˆÙ¦½›îæZÕ—ŸìÑêw”\µ\]UŽÈÎffî:Ï ˜`;Ý%68QÔNÜÿ´žÖ–hÛ]®zÔ´ÀmtcYA0X¶¬mŽ›e<¯rŠnÿ{…öl­5(kFzè¸zDšÍYÚ%ÑU=S¢®d¢ ‘L<ý‹í/~>­ìqmŒŽl;µ#ö­ÏÜ¿yÚã¸ïÄ·o´KÝLh[¥µ 8òÙd :Üý~5»×bΉäâèжž?\>y:WDkë©Q^-ŽV°Šœ- RôÌ5°ò) ¹,wçK ïÛý¾œN×ˬöV^0ÛÒZÓÈÃÁ‰ÿÚc[E.œÛT3ÌsäWpöîzñ1ÃÐìÄ3j¹Æ©¦-½f…F!¶í8_un_þæËãÏ¿]úÖÖÈ´Ä|J©|}¼Õó&1HÞ)döÈX'És$ÉðˆdP–½Zââ,€øù?ž²eŽƒ?lQh÷QŽ‘œ4 ™u¸ØC¶„ðY13Ë D¨„Ö2DUG]žfò*dz“*/###¼«¥ÿúÉ뻓.«êô¥ßão~eDK¸ª¹J Pí×ë0bØÁjY´Â{Çr¿´Œê{ßÛy K2P]´"Ihu¨ND¶Äh¿hååi?¯Û–:øpJ î]@k̵ù.‰h§S8N+­lK‹¡eózj‹òöM+6UŠC@‡`ĹБä1Ê‚‚8=\º‰þÔ—|hËÒˆažc$ Fä÷z2ÿp ƒmïÃ,Ô¨VSÔ)†ÏüÊ=ÿ9ÿ#1Ê_G¢=]<¡•F$1»¯¡½eï—ëõ/>± L Ÿðù×/îri;†z¯¾mÝ„Të<¾N‰d´âøö‰À"NËiѰ¶ aØ«_/ú²´(ºó|êp å‡Úywn?·–S“KL˜1KKP™¬2aU‡™ëÓE½…ÏmICèŸ>Ôç•„ã|~˜N³ú $#ñ÷Ðq|’ÆÀÝ=7]‚‹^ˆüM蕽òb²œ@@¹4å¾1Ž,ÂbpŸ–MYÂÉÛÿóñýîçUBS\?~R¢÷­NaÉ%3Aî]Ìœ½‡‡.MzTìct™7¬KPó»"ò)ùøÇOíþ—w ]Ô·t*3–|xÚâý> ÷Þh 4ÜÖ(“³ á0²¥.·È̇V ”Œ;\?Væzÿðîlx`1+( 0ðãèÀ׃¾êxÃçpúØä&ã«Íæâ‹™I0ƒiÐFÆ(×(æáè¿"H äm¿#"—lçV‹ò|¿z; äùµYÓóý»‹ÊÈÖ·fÓ$HË füÀ|™v6ØO\[ßgVTªô‰z´KV;,zð¨¥B@û¿üòô»'òé×_÷ ì.- ¹.Á8l‘‚UËá”Øá¾Ó™4d ŒxŒ¶,m|ÛTu»>~Ù3г÷ë}Ã~W{·®õÀ©«N_äBX}÷ÍÑË9ºOxÈB¸ÂBÃ8¸†PÂ’ª¼§µ °-Ñ·XïÎ!épifØ!eÀwã­Þó8¯Ï—D.£ú†·oB|Þü×få˨û¶+ÇŒ11“Ž {efLɉޑ-‘kÔ¥b}üåñË_þöÌ¿>:‰æl‹ë²0fϬÓ¢we6Œ®l¶uòèîGËO±Þ¥ Ç·“ýq‹V½ ̬ÇKÊÜwé‘ËATÝ÷‘VûÞídK WoÌ=ÍcºÂºu?¢…mWkeޤ£õÒfGkk£ÐúÈ÷ž':r˜ôW~ÜâéÀÞFbø]̤ö½·¨p¤BPѲµ¯Ž <ÙÀø‘Ó¦lchKk9’Oðüõb·Þ\#ÁÕU²Œ‘À•V9%úÓã†ø?¶ ÌÐøhß‹AöhIƒH\ûz·ˆˆLïO´Ì GÖѤöËㆨˮíógAtT#¨½†rÒ²Œh”V¦žž:‹0رàÒ¦WrOr<]k9-¥\º&mG%tå’d¦söºÔž™­…Fdn-·ìûßUTši›KŽL§Æ#ÿžøæfTï¥ l^Ñövå„u9»}ðüþñã»—3àë/ÛÚÿ?ÎÞmÉ‘$Ç<TÍHú%"³.]=½;½"+û8ÿÿó¶²+-;3]]·¸¸;I3UàìÔHú%2«ÚD2"ƒN§õ"²¾nXB%›°Ø¤¢öÖ¥”QÄ.Y•ƒMæp¸L(ŒX×¥ÎS!b92B¶ú\Á’ÅÜ*/ßOø\p˜ô0ö¥97a-I-q±­wÑÜå³°¨B T(L‰x•äS©¢ÀT«–ÔÉ€¤ñD¸Ö÷¦ò­ƒÁA!=`U›ný˜Ñ×ö[çuQ ·SBF~AÞÇÐK)ƒdr ñÊæôˆ¢?=‹ …ŒTŸ2ºû<í¼‹˜vYW·¹ªk7ç ÒÎlFê 3è`„7æIàKOZ¥f©¿Â!b*ý¼ž½ý´‹”‹º,çΑ­"DJAt)mØŸ&£±ŒÑŠeÙ—*ÙBÄPÅ µäÙGLE‡0…0HT¬ KX}¿ã¸Å×׉Lb0‘íŠ_¦ü øÁ51DÇmª Þ¹U¼3j(³åJD”±|FñmpKe„ÂÈ[„IP´…Ë´³d`Ù33ÍM½lÛq‹Ya€-:u&·e‹æ,êo/Sm|逖Ð"±,ÔÍL¤,úèØÈÀ·LåY§h"¡P˜KJ*\„%) .S1ÕœS€& ›+OÊbïðw;$@dû&wãeŒ©û{šÜ~^ªEx@¡òº€Â×÷m°ó Bœê>"pº›y¬¢!¥˜ÇŒÃU¾xìv….åèRçÊ6 z‚tÛ²È;KreL€ Ã1Í…‰÷¥Ôk!‰ä+÷Å+ÞU®bö|<®b©ä *ÒEØ;UF½]³ƒh Ð{¡@A‡ZÑêZæú³A[ÏÖ`QMB{Ç«#t»òlKµŽJ4âvúäïÞp+;âob]ŠñnnœS›÷÷œ)5.AôÖÎY ynIïÅñðH8—(jµo¸’(ªHlé6! qZµÚÚre¨õ ·Å‡ƒµã³ÿ§~¾Ó¶/çS7G8†dD—*#œÍLœ|‰…N˜JÑvVK•¥ LSUz@Ùº8b²¬ÿ¤"œŠ¨K÷Ô…×vÛC0@D®íS9&ãïÝu#Œ¢fý‰P4ËÑ/~èxé#ÞÚœámI Ê…bÏÑ}Ã}ÙžDòäŒÀ©ïw². EØ)©Â¯ÐÑu9?IdKx²u7—ÿõçúó]_N×84É"P ýOÝgãÓ—ïî2rå„”p5·"­ˆÑOß»ª15h[»„Ó”Rª´^JñZÄ=zp·cÊzô¢œ{:NÅ­þê7¦N° 4•ï¦ãïœ8¦õ+é3éÃmpnï;¶cB* L9¹º-$˵‚LÀ<ÄÔ¶„•v„h8ÔRL3µ.CTb›?´ýãï¶eþ/¿óãÉ×óù¼zÙø†G¢s¿ÿ ìñŽ/f6,Áu©'»läTdûñééËb»½Ü™Ú¤âßZct˜Ò´[Ê\œÝ¦½­dͽõñ7ößýô:6^ò×)IÒü–ä¶ÈÒÈзîrÝ¿z!QË1ü] j…tÍ­O\š˜Ur@³Š8ÄD¸%3À#eœQì²%nÊŠø:ÆSH„y¶uUï0 Y*º™Dµ°³>þþŸÿiúþÍïxF;=?/k_:‰ð¬z˜—ÞÄ´Øésÿ«ŸN=}ÚŒÆÚE)Ö$´ìLÏêõ!ÎzψR|ù/‹í?Ý=(¦= òt¢ý=§¸É”É(§xQýWÚ%5$MHoúí¿Ñ’qâ2N0ÙâÇ®¶Q¨~õ^¯¿Oz}R$Â¥@³Ä¯¢öiúÃ~v?}þ?æpá*èÅ$<¼µîhÔ©˜«¤He[ŽQ¦ ‡©®«›Ù|¿ŸT¾AP,•ÅëþSì£Üíhìád¨™‚îw5)*ÁêúðOõ®|]X÷§E×{åþóßš#ÞËòò÷u_qÉ XR#ôíĽý÷#K$À•­fSþKßþ‚ 5I~I]-ñ#5UxuyõÊëÀTT%FfRÌé*@8ÄøøðÈ”&Ÿâ¸´rV´¥C Õ2õè\«ÍÚŸ(Zj•¨µ¿,Ë:kÂv5b9¯eúÝ´Û{4‰2O§v˜w÷w¥—hLõE·9V˜þn2„{©5ÛÉï>ýí?¾yišÅÄRUÝæŸ¾Ð•ï‹÷o¾¡\=þë—ìVåþƒW†Z"£XAnvôÀéð4”""˜¢—yÕ|º_7–Ãǹ|* 5•Øæ¬L¢ý¤hKX}¸›ü$¦¶ê§é?Î;I ñ¨Tjè\J¨bF§UEkfVÒôµÇþÓçß—ÔÎÞÇÒú$2úý]6ñs‡˜5ÈMúzžîçO·IºTÀØw÷J=EX5UÕ½Æý>:ô³JØi·;ޝ^Å–¾³=Ý»©ûõ·…ôPsËNñæ.°Ìª$íd‹ÿ*ñÑí?Úqo1…”qpè›vfE|oèK{@[iêsÓƒ}ñU²ëˆP+“´˜=%Ý× {f;uíØÍ¿ûužŒ=žûŸ¾œ­îþéá^ÃÃcÍŽl%ëx£F;õ‡ß<Ô M³hW‘Rgî¼ËïŸNfª¥»ÐÒ?óúËí¤Ç@ÈåO …;AŸ6¤â?smW¢ñöÚ-E“DjÞ .l»a >ÌÛ¾¿Ó˜Ù^ÉFÐLÖØígÕ¢<@ý¼°Ú$q Ÿ_Öµwš„Ïb@„Q&QÙ/Óa·Fs™|Åh¤:Ow÷w÷;¯»Ã®š|­?ýÛQ>ÿ^ãä¥ÖQ"ZŸ#Ã< ™îÿé·óR-TL¼ˆë~Gón»Ãýú))ºìÜfý¡Z‹¿ƒs²õ2ݾ¸« èáVÇÿák¬\ÚM7ñÛ$‚\„ôîÙ°âöäzmé~¯F gÕ¦ÂÝ•Îëa’úpPéî§ReñƒÆòuú×ÝWó’HBØä ÊH ×C+ÒŠÎû£{Ý+]ˆjUS+SQX)ÑY¦v,ß?ÿó7±ýµ·ÎÆ«»Ê· Ôë+ ¥d‚£\ŸÃ‚Êh*¢!ùPIgNAw÷ù«}|%Pl|Ú4¦L¬úòx|S—póû¯âP§¨™i¥¨šM6•ˆRtF=q)ŠYh†è˜Ë§¯KÕSÛ¹DHµIµê¼@QƒÀî®=WŸB'‹•3vµH_'ï¬Ï‹‚‚M¾PdŠÇﻇûÞº‡µîv¶ö3ë|0‰!t³"±,½·é§ØOï!¯äêæÐFÜtˆÔÀ2‚¡””`Ê É9§[ü@éÛáTp¤R·¦øÝ;ª…(9 ùd¯»m^&î£û½Cjf*Úƒb_Û\¦@©Üû|òõÀ@¸weÓ²ûÝùôƘL Œºß™LÞ§»g)"á¤è4ÅîØ^‹‡ªšÐÝdvër¬Z´d™æxà´Oµ;ýûò›Ÿ¤¨“+Y‹Êºœ\g÷Ÿ`4WmèçÓÚÍïlz§­Çì'.a¯&)"’JJ—’ ŽÜVSpìŒ'# R-¼·´Üp?ž8Á¦C½Ùì‹1çMZb؇[çôæn9Ö"ˆiÎ`™O织;•Éeô'#DK)¦ ÆOÏÇ%/¥&­îw†6=ü…+2ÍqW»°kíy(øÌQ¬QæC?¦4/é(c X]÷þü§³í÷µ¹Ê÷häq úq})»IÚ©Cs¸°Î«–X_SÐáÛ±õ&|»¾‡ Š(ÍŠÉu<8Î1M?üíë‡ ½õTíýÁ¶ ŒöõÆÿ\Ãßùè^· Ot‚t"º6 g)Øëî|zîuªfRŠÁYª…Ï¿=ýÏS±ç;5 јæ¹wE™>W-ÄèwÜe²äõ#“âɲ;ŸU-™[¡…‡ˆèÒ¤ì½þôIï¬õÅÐÝ(ýÌ"í¸ðôùg}þ¾ÂzkÔ’z8ñ–åE÷2ÎŽF¼Šç6÷Z¤h)ºqY1<R×|'߂ί†’ˆÞ]Ê…1ö S²U+oœÁ2|˜íCGHÿ~BóÏí' „ƒ43ÕZÜ"*¢î ÇÞ÷‡9560ÎíÇß}9¡¦á tRŠív÷ÝzŒòH‘U U S ]mQµÂžQSݵ¥wfS3QÐa…RNËÒEÖ{<þæ Ý“HwUñ—§ö|l»åìÚ sæÓ"ÙC¯¾dª”cô+L`é͸nVºŠ0ûèÈÆSôÐEUU…@$@xwni%Äß̈K¼(—38ÆÄ]m#ñ‘7´Å¡Û•`d{@)RËä“,ë$ŽþÔžk¯÷sq½ZQ§Úzøü»ãK33é­(ÛÉvÖ´>–ÇS9;Sçߊ(»jòf"´z¸+¥Š)©{®ðЬTЬnQ+Б“îjcÿâS´.0#8»¯ß¿¿8Õ&E›š ƒ©4}{ÆåQÛ’éÆ÷+xß4Ò_ç¬#Ü!«•zË9ÿÑ^ŠˆµÊw¤-y^€ IDAT…w#-9Æàr߯goRè 1âP½y"Pf < “®/ýoõ\+¦¤u²XY统þüu­*ô.àÙ­¢›ö×NtïBÙ!ÜE5»yi)­Ý晪¥î³ùmÂ{ƒ%+å—io2Ër÷rôãÚ–»A³Ù——ïÏMplÇþR‘‘bZÄW5Y9*Þš‡j)¯]Ã7H 6†-!*ÎF‹]™jÆ, ¬Ô1èoÙ`âu²D3ïM²ˆ‰ÄÆ¿,›\ [F`{.:>=´Š÷:Ò~Ù€H„ªtjqQ‘2Ó…•ZL9«c=úsmß?ýa-DÔ†&?ê±þæ_¾žeêÝÕ/óAÂuªË§¿h}zÌâ¬hí`}mEбS„‡rzž?M”žZOŸ¿­»ç¿þeJ½΀j´>ת²|yù*“ kmRK –¿}]tæ<þ\ã¸ÛGªùj'׈8¾é'rV‰î„ª|¸ äJt|}Eoª³fWµ TyÏ+—ÚUQàæãâuÏΫRíÃ_€ˆ DŠ2\jdÖ(¼1…hÐG§ù‹Ô­Ôšý Ú3¥©qYu*QÁÙg5úyÖxúóqþ™ž;|–óÓTg,ûŸÿØ'œG(u#UuDö(ZLHÂE+Úéå/®Ëÿ%s+ªE–§£‹/vÀ·ok†çShùÛóqu’;žl?s™²©Â¼D1´õV †€ˆ6‘ UJª¾oq3¥›Q _µØN²¬t †GÂû²Š”Ë~5kx5)HL}ãæóöwHŠªÎ¥Ÿ\ʢ€™É Ç€õE†åOŒUmÞWIëv”Y¥°áp_ÐC|­*ÑõôõÿÑö²"Ûõš?÷‡‡/:É÷‡ú<¾ ÌF ]©¥êáÔÄY îjVŠùÓßìT?®­Ó,Öç§3 ‹íx:‘ÜZL«=þr>9îú3Ë«y™¼Ù¾+±žÏo°Ê)@Éíã7H ÃÛÌq${§hj5²Ù´!b÷Á ˜`ö.ÍI^@¯mâF;ËíßÀ+'„1-¦SÑ#´L‚”ˆ S;€@U%V§¹DÐ# eR³ÆýÝ£tI<óŽÅ„Oùå}9Fh5Bzô®»êx^­÷Y'5€…Ý“ëÍ‹žþ`%"œ0¡ÃJ_ž¿¯çÿç_ž^DN/]‹¢ ´¬>ô¾–ÝTúùôâ( Ãz;ÂÐVc?Vµèí|ŠÛnV€Hö¼Ž|˜M\Æ‘¸x›Û›:¥Ú4Oµp”ŒVï½L}ÇWØ6nÃq¬^'2Áéן«X-€cBë†pXã¥é‰†jýtî™ì$NjQ+ž^Ý…}µB1ºK˜Ÿ?ì; c©¸[†ÊÉð/?×k̼m)[Âó—°Èíí \X ¸þϵž±ô"¦ªÒ’š0”PEïæ©HDˆÃîæ½QPæÖ"B¤M]Ia?÷b*˜ª8tuƒqͺ’¦Ÿ8“t†0Ïø¿ÚÔKcYj­“.ÇÅEá"^àETt’ªð¥Ÿ'†îy|X†{tßÍ;ãÊuiñ¤æ×a÷Þ½w·” gÖÙEýºã6c´¥OFGðw·)qmÀ6ßî8aÀJ­íÍ}·lúäÉ;Ž@Lµ!éÇ€£O„Vcs±îî-0™gíYé;ºøR©`€’DšT'!ÄÓöB„ÞES +K•Ɉ8«C›žgó`ô™Do"V*›OuÚFèÓ_¹ßŸÎ) ¸Ø!Jt‘’}D3n…0Hj¶F %”!ôpI"¾ˆÀ?aKçfÔÚ½¿=D†9ÅV'}׉#´´¿¿ê#™á[…áv?Š@!—2Ä,\a‰jî1FJc¤.Šh5 B¤9„„Lµî‹s”Ð'?z‚a ³á»Ò¹­ÁœºŒT¿‹G5ž‚l ‹!Â4:C̽Ûn®f™²$b9¾|=Ot •Ô êK«ᔦe; ‚”‹v´:³=Yd‹˜l’·~TJ<ŠÚ)?&‚ jÝlB^QÉÇeÉp@Ú>g»ÔIE øÚ;NƇfrN(×ãŽ`ä cÈÔ AUÕ*Á€ÚþNÎ>4݀ɻFxCP‘R1@›2ÒI"j&BøJÛ-¡b}ÙéúýÙî™_뽋L~|Zx7®¶Ÿžþ—LÓzŽÚÅCÝ]”Á™aeC³Œf륮²¥­“°hÅMv@0<æpn­ŒAŒÚïí¤‘¡²;\çÀf-þ¶R¢[]Ž8” –ÑL "Ú3ý>¸`#ï/‚P%;,¨o£×¼A¬H6ï0ºël­‰ÉVG7…á!ÂU£ôFUÒ"´Hx‰,x\î+tZT²¤ÔðP…U€}U­H m@$56r7Öº´2Ÿ{Š>ƒ5ߥ&úõ›ïî&®¢ð,ö|zü¿e÷øx7WW|ÿ7ßRf%'îÆT† 2Sš2è}|ƈà p†Î÷Óùظ¡›rIQ¢­±P§Ê¡·Ö(¢Bª\óMæyb:LŠ%[K”>º#9 UÕÏw“{a”QA¼D[Öº›K0;.Q³aâò Ó=Îèë¹ õ2u×ïiŠZ$B1ÚZ‡J÷Ç—o÷ûÂOÏKÆÙ™€zOïˆEAÒ}…š‚tÏž²ÛàP¤d»°7„XtˆCõiÚ4càl&Jàú—b;‹n T:¡Š™)¨â¬kU1q;[™ö®„hFQPí# ®Ti´” T ]bÔËÐrÃ`P (VÌԠ –B„çfâ¡Úá¬bôˆ N6Õ}E$9TD-û²‘ Ü[#ÔbaÒ6°Åº#¡#ï)j•¶sD‡EHÄËI¥EŠr  ¤ÞXša„€¢ŠˆÅÙ7/G-“Ó¤g± ^sN ô¦[‡ &óD/æQ3ò‘‹âÐ ÍZÅæUŠH­"¢¥j@QÆq#ƒ¡^ àÑ–™_=5hucªÍ¥u›æ0Ÿfc±â¢sá²:B7>çÈÆîKµlä#d0L˜:Nƒ/q¨S°PB$¼A©ÓèØ¨ÜN­m/½J\þo„n2:c ³ìÕ%µ›…©© ©×ÛXÑ…*BOÛ RŠ"VxÈ$l±6‡V— W)"/méA75P°Z¡‡È2™0£Ûx@FOªÍ·ZÛó×»ûùS¥­ëI´²}û^¬Ô©ÝÛ8kÐÌUëÖ¯ÍÁð¾Z2AÞDXÆä‘Ç¿ö›÷økW‚jqØ@Ê÷¨Ýbô¾™s¥6Ö•£w‘ÓÚff °¹42ʆ®Qj);iª *Ä íE•Ü2ñµ;ÓÄd¥£çâ=‚N›[FãÑýä-P%¨“ŸWèVÆà*ÙiaD6  ö¾.ç—éót_4ÛÜJôîŠÕj§RŠ•bFÐJ‹°* »¤³C„ª^ †‹(ÉkÄ5Çû5"DØåZ-•þw¼‡¾#’¼1•$(<”¢’977þ$9=Лե«ªÕØ):èTÍæhB¾zÀL¤éx T)ei«C†¾NFŸ"‚á}PriÂ`î÷uYIi"»ZÂÑf–½ÈðŽf„¿_êÃÝîuN”B„»7ѯ¥NÓnWmžj_­`Š*UêJ¡;7¸t¬r¹P:ß$®«žâÅ y»ðß^ù‰o&ˆˆˆ ²#OÞšÊñ†¡³­œ«/rÉ«mñJ‰‰Jê:æeiB F„]„P„Ë(QLöðT3ØTL–­Ÿ¢·•j¦ÊõÅîª {÷€0=&¤Lå¡  XµÌÃ[÷(nC¬?«¦*…ÇýîX @…±ä·et_ÄjùIUû‹öI6â'ôµKv²üæÛÞÉQdd¼(ŒDzb›'n‡Î¯ÙË4ÌW“(Âáx¥ŸüjÂow\6LëÀ‘(Hð+òÛ™ç%ÔËDÅkʺ†Í“P´ a@ÀÌ“"‡ìIºE…" ˜êð9µHkçî †Éz,ugÇÞ¢Fz÷ð¨)óÝN£­¡Ñ×TÒ¶¬N@ÃT“Ì2cglkz™NJÑ~^»ˆÀƒ3Ñš’u~zV_´˜©`’ =‘å6ÛB–K’˜‘]î Œ>@ä$ÿ`ØNÊVGø£7²—pJ„Aº…¸><ãFû°‘RÉ¥ùƒ›iCB\2x¡·Åôw ýÄV'™‰×Á÷'Å ¤0»õy8¡VÕ}MqU@Ť*õÜ]Ñ{ïÜ”þUëy e÷go‡ÚÖã¹Á,ŸÚG榤4‘ÐŒK”e¯S1J”d¹GRŽU¿®ØŸÕ×TnåCv¹'¶<Ú[$¶&ñD‚¯i@OVìª IŒv“r;tÉÍF4»%ï-z¼eu}T¼/€Ž8.góP^¶i”Ç1dÌéef¡µÂ±X‘ìÀ—Þ ‚!È Ó"è13ÐZ°ìfô%¥ç©I½ž˜|„hK¸s8OámÁÓrfUï$×îZÖe9»©P"ýuÀE…Ñ tÏR÷³DÆ6 ½ —ó4 0:¹”2ÍÚûÖ#¤_Œ` ÃùK‘ ¡,å"Ù‘P¯èÒ/N›¼®lÚb„ºÞ³\ËÍG¥ffòCÖ`ˆ*åTãìEœ’›x ©•ë*t)ÅD"B¤K©èœC²…ÀÔ`† Ž;0ø1’ªê=³kÏíyÆ2±=çjF+ýø4p3ÒO«,Z•½‡›¡±œ¼Ó4–È>o„‚îfNhpb£„CÇóH€’< z7·Œ„½¡ ¸@A¶¡j|¾*ÝÃ6–åÜžuž$+8â¢èq1Utþ 6cs*F]õ°²&„y‡Õ’€/É:LðuÇ]?@DTtp 68\ìCnzm¬I¥^;€Q2ô“óÃÃ]]Z³4É¡%"3:y`ʲA:ã "sµ—å$=4ßï§èí´^ö3I$ ò‹Dë-–€$ÙjpB²jœ£+²ÆÕ{smÐàÀaÇмõö®'Ub>Wu¸YˆMÔ U^[þƒßä¾eˆWçó4I6Å;È+¹UR CÇÉ&ÔÅŠFGÕÞâ¿AŠEa—‹â¯@DÖ龄–ñ>’f@–†2G;m`pW†?;æ,w›ªÔì¨ÆõùeÙ«Ø`@Jwwœ–b¦is"“[ª[®)@ ë•W ÿõu5õ Â@ n'€·óÈ“o3…Uèz‰Ë?ôEF²ô•ÚÇû7mnT‹îe2¾åUfs*UÑÄé¶Çcv"Ê¡œš—ŒÁSTÙæzFfTCsÍÚ~òVfŽž;t“h}téã`ܤp8LAàZ +¨©°Æy}y9w»¦e §ÒÒ9 KMÁmÇ vØHÛ Äc#±ðýÈÊ@=¶D„¯±lÛqü›WË @Ëä‚ÀÖáÙ»†Ä?vW¶AÔŠ¦Ö¢dx¼‚¼ÒKÓüS,å.® ¡;kÙ?Ô≻c(¬"Ó­A§0(rwpÖâÛN¢Ñ=Ötª#óà@Ùxè0Ã]c)@©V×ó²®>[Š_Dœ9Bá wU‚!vîÛÄ%Åk3ŒªŒC~ø4Èz5¢¯ àç^–¸ -^½þf†â‡[íò ”Ph±l¹4^dø+ꘉÄèÇù–oV5.dðþp7[<ç!›ø±@æ2º32¬›L‹it\tNà—ƒâž·Ž-k›óBv´Ä`jùÞ¯„£28¶¥+Ê`ï%VVKr%ƼÉpðr»`¦#ôÕ` ÙCFO&æ=®Ä3Ž w󻝿ÀŸÍô«–¯7÷ÖîµÿÿÁ¼apnDçÙAŠé»´Î¸ÞæmDKÉNPd~Øvô3™P¡U…GTO`qÜ ËÙÕ52’Ç¢JïA¥]¬”x¤É;9™-·œðfsU>=Ÿ·¦c®‡78”„õª 0DCÁ¬!ŽW!‘ô€ÍJ¾µU¹¼"ÓRÛ&½íúózÃ}`j³Ro|› bq{F¦­Tü’º‹ ëªuT”Ùl1÷®°ñUqù?•ÑNZUm*GÞÍó”œÖiW|]\G¡ÉfŠ_úñþánW%ºÀ)ª2ÈͲY#6·5ÌÍ]ئƒál st:{Íé6‡PÙHUvÔ²AO)Al—M'D\«2?š¸¤X!32|ïd¼Þ$o‘ L®úÇ×ß·ãr…]÷›¤¨?nœÚÏ4T ¦A39¬]Kõµok'`ëÉîùõv˜>=ø ÆVµiEsª£ßI{:ŸÊcf†“”‚Ö!¦HòëpTÂ_Ûʳ *Ý¥8ü¬ÝO«íè4õDD¢ä3o~”‘…þZÐtÞ÷ŽÝ7…Cm%a ¡eðÒð ɈËß -Ä^²‡"“˲WËûÖ ½ü{ÛoÛñ÷êJ ß}Ê/~e]]'ŒžS[ ·’i°×ó,éÞ ÂŒNµÕ@ë¶qÖ6k1ŧ~:é¼ßÍÚQu] ŠÚä[Gù"ªÒº|öûyžJ´µ¯k„C ú;S“.c!DЃÁUè¹+¹•*¼[¨² ’€ÝŠI¡x÷að7ÖcúZïåU2ç‚>xOÛñ›Ï$?ÚÿÙKÖŒ”±MÕ/įôç2³"o³2”ŽM©…ˆ:5JqÍYëêbÂ8ÜŸÜvZ|Q›bM´X'ËyŠ*ºG·ã4ïöÓŒ¡"††Ñ›%Iä°Îë ÕúÙá6xNùÞHI™¥¨w¨XõÎt{‡!N_E”ÌÜ8C¨‰>$ÆH ‚ÁGS}ý½äÚ¾ñ*C8sûV?ü Ù •ò÷‡ƒö6Ž“ŒÙÔ .Åæê™B–Y1Ú×VÁèmú<•}¼”p-FXkj ª]aB²ˆOVÊCªHôm²®îíåñ®/8[éŒîb!Å.ñ¨¤è[5„ú Ÿ‹0 "$”’§Š(âƒyvM*¶½5PJóÇ×?x¥‹$zðZüâÇߘmôÞy•CðJ«·²?LêÂÞ‚¢Ëù, èjws)G,³FsE Ô­µ=О!cžvO§uÓxÞLÛÝÂæ‘@H¬:ÙâS‡åD ¦F|(3•®b„ ½-=f¡‹墈(Ão’K†úæ ¤»¦È’[uºÞÿŸ½˜è,‚qqB~ñ—nØ#Û_à#•=hKRvûB¿8Ü¢ À×¥L¢æ¢!» ZZHrav=D½ÖH÷r-Ìúð˜Ê3ŽÄyžL dÖX<μcB"„³¼³•™sˆŠ’½8“[8n&€dŠŠ‘¹Úèœ|ôAÊòÃyûÀÝÿåkœš6tÆ«q¹ž¹ãD¼ÝqÃ%ºL‡ÙÉÈ¡h`N Õ€´5 ü…ûÙGm\RetU™½7§&êv‰¼ožnœ&é-‚èZw¢ø íÜá-)³ 0"¹.¯Æcœ†Z›«³è¦ ±&D^#·£“'0. ÍËýLIr= IDAT2uпëºIžk¦d¨7±×>ÿòy{ƽòHèón_INÞ¡ß«»b*ÑÍúâÂM¯U "“w–ðX‡¦Þc7Ÿ÷5‰0 $æ„èªþeé¿z7䯹¡KÜt;†&$’ !=˯$¡ëÑU-Cä1mbA3éØ˜¨ê`dFÃTƒ0.äß®™- ró<¤–éÝĉˆ@‹Nâ0“4þnR%Χ¦ö³)ˆjõä­{o«¸‹æ½Îè¾b=±ŠÜ»©“fEh©–ÎÕvwûY}úÖ§IºH­Õ„Éÿp—²{ü|$dwËsË'2söŽpÓ9Â=œ* b/Fê^r°)"«ì?¾«“œ¿¯[Í‘©O›mòf‰kàý¡à  6 À‹5bj½sðëd›+ãRË~7¦R ZçwW”.VŠ‘™½VS ÈY|YVµ§Ã¤A­â-òÑ-.5„Ö´7aHŒZg$]F©Æ0d“û˜;éz¨“½ô®8ïæŠ›½÷ºÛîîöuˆ2¹ìLžiÅ‹±9žfjÉÁŒ¤ò§ÝÉ\.™8ä4?üôX±ØáþÜñÆ`R™·ëúý•΄Ba* ‘ÆþíÌ'ñP³N¿å´9¯éJ†Šª™½Ny¼Gå6ÞÕ¾ À* KØÇ21§÷pz¾Ê]A÷8?Ÿ\AŠJ1[…A¶U;î$"ËP™/ñ¹N*ö±¾÷û]õVæúó׿Ën)µôPìÞVñ»»O÷%Ú©Š„–Vؼ¬¨s E¥Jx M­¨H÷ázÕ±ƒ2TJ„3@ÚçŸfíZšÌŸN_º©š*À)Üã’ø|'¼òçr×t¥7½S¡{V£"ÝC"½Å Ü%K¹wHÚ»„B‚-E‹^þÁÃ|õYlyM•ª.ò=¯jEÜJ11µ1éKW§LЪ"âüv\RÜ3ŠøYsÁ³_Zù"¢G|zYæß" _úº6'æbÑ\¬äWÇ À[=aúÃç¿|y„È ±ižJÏ®s}"œFÞ5NÊf²‹¢h C@ J3G~ ¶xVqëÿÏÙ»-I²$Gbªf™UÝ}n˜°¹+»²|¤ÿÿøÆ e .ƒ™sætw]2ÃÝLù`YUÝ})3GúR™nn¦¦ªÖØgkW;u= nïîr-D'Ñg~ù¬¿}µ¢ÉL0FX—…²uí /»n۱§ëªHzÍii‡s\šk–´žN£i\>?KRC)1²ÎÎÌœ„¾ù)‚„œÓè H½ÊÊ´¦äé4ÃìÞ×Õf—3Éœ$tXLfÁÒ”°~Åz>oð×l œ™¥ÐAžˆf³÷}$m’´_qõßäþû ·Ö_›™[3ZDBÖ–Ò%ÌÊñ@Ånܲ‘¬DƒÆ©†¹A>7ªÓ«ml):&ÿóX˜ù²¸µ¯çljŒ«/†¬yá¶;W^.Oß—xøtUBŠ $ ¦@33I)MG*.*TTÝ9ó¦Ò¢„ ­‚ ×=’¸[S¡Ydß²ºmºfÁiÛ Oí§¶.Œ1ÖÍüi°uòçJÒÓ@($Ÿ¬¦×ë]JI©ì)TÅב½9Og4óOsÝãÙÇ(K[D(ëmUL ˆ¤M ¯Õ©'j:ô’@¹ô h93_|½zÀ¨üF®P~µr¾lÍù5râŒë“âú}ÛcÛÚs§w×~y¼äÉ`ûçd’Ê‘²ãØÎ9Ó43‡qY†›å¨H ¢¡Âh©hûF/À5i£?ÖD³2|é.…ÌM1zÊõþîºü>FïL.§2y¼äÄAÇOä1óÑ3zÀg¹%™uÒí¶<ß×Ùm…mJôýT…›JýZ2G"³æA@qŠȬ*°!6»Ýï`¯£´†nÊoâ—æÍ›ôµ ›gì#ÆC¼ó%{¶ób—‡Ëéìòðü<–E]×çg¬¢¢%XÂÅê£E£Bi$2’È[î,Q>#$B5ø^ê4/Ò©ì´î}§y@Z” ±÷`óÑ÷ºc]ϱY*áÍž?Û¥SRÒ¦ã`¥$ƒyh‹è‹¸«²V½ÜºzeÂÌ:`Bðf¥ŸÍ!%2er,õvVs nE, ü›·ùó˜áõ͆«G§Móø!¼”æ¯^mqÒãîy1Òã_žúwçÍ|ì—_Þ?hååá8­Ë;ß+‡¬Ï„ Ã\¸boÊH2¥ÈØÝmª6A?&{ ݜڠà 9&¯I¥ˆšôã)öë€7ÆHs# ^ÅfÅĵ¦Ñ-kDµ±4QΩcËŒ"ÜÙ“)º@˜™n)=ÞZ,µ_X3û–;^&X•å·b‰ š…v)[9ãhk©,ÂÞdDÔ"(ÿëWCÈ( r3ã«ÁsᚥJúõöU22Xÿx}üá;ÅÃÓãÓ%3¾oŸ?ü¼´Ðúƒõ eÐ%™Ãª<¨¤òy¨Û_jß—r¯ºöÁµÂ¢`¡Q)¦#ri˜iÔ0@ˆÃ!Ñ3Ê<*“ÆÝcä"@²rÿØ„P¤KeÀ`Þ\Ø ­­÷h˜=*.|};ÞÀf¦Ñ,Ñê¸4A‘í~=÷kTX,ÙX1y"Uå5ͦHu.Dý†·ãV؇!ÓWõ¢Ðš/0(ó+ðYÙEÿJôQ…DÈøîñaÏXqy¼Ú‚|äòùélm ÝÏq}ŽDæ¤V6kªBÅ®Ø8’ ¯€ó±‡mušñç,Ch†X¶‚øŠ¾&evP´”Dµ6@sf$Ý5v–»Ù ɶ=¡L ]JHK=,ý¢)ÌÍÑ&¸L•!ܱp7©tf ú“φÈÁµ}¸<<Ǭ»^_fØ¡S:й ½Ó…‹‘é@Ç€ê݇s3°m«ѯ_&'£grµ×T¦´L¬ÈÜ›éÓgòLW>ÿôÝ3õƒun\~ÿt}øè稀,g¯sÒ~e¼[÷a£eCw»Æ˜ÍòqõÜÍ £ùD,Wkk8$;ÉŒ.Oë»Ï™!"B$"%WóŸc„/m„D*S 3œ¢¡P0§±Ò¨Hp[»ÓeжãÎ €C4ºk ðiŸ™‘Vj¡Ñ¶¸®~þîwy*¥:Õs3–óè¶idÄe"{f2ˆHÙR¢îׇ!në\ú¥½;/çGroy½ªaÌþžï\ëýû®õù×w§7ÔŒHÁ *ák¤7s3ÐÖ¥œï®Ï×_™D¦¯«_zÀ„"'mŽF/qŠÍ±³Grb¥Bä±i@ŠëýûÊ”Q-ÆHšyŽê¸ËH_Ö³ú Ï_FÈÜ/s¢{©’N ¼KSí±Ìæºì¶ÕñS9tš†°ë0E(œ—¾îϾ/nœ–gÒ¡ 3U ‰bŸ†2“)eŒHÍÐŒ£t™Y¹†äUmh¤(…ZÔ_•¡ÐÄþ‘9š¹ŒŠÔ`HZ}Ôp ÄâI÷æÙЯݚ›R“rÌEc†³ºÞf¾¼ßýÚµw/¬À¼r¬©ÙVq1§IçTFQi¦!>Q•ÉÂg32;C ¶K¤Š½«œH ØÖvêû°åÕü8N„V Õ¦¦ Œ4s‡!Úý¹¤LeйÓéîTf+ÀÂL‘t›¶ •Î ±÷ˆlNN÷8›¹kø£ªÑ¨™@kàX7,&·f+àßQ¥ÄJd5šêÛ»Dó»i“«,&¥2ÌÙ¨<ó:"WÇâ£|Ç`[Ï­ùðœæ[‰ÊGÚ‘õI¢»7f„|óõº÷!3šS#Ò¤LfM'jP(Rm’2£2Äy_ÈR§)s[úÃ_›AæL 6ÍdÐWlê¡åUrR0 3‹/‚ ŠhíÖ·ZÄè‘’,Jö2 ¤5ƒ"è9²;‡œ™ê!\TÊ¥ŒdQ +þv ªqPØICŒ^Zµ.•ÈT‚˜v³Ñ»›;g„/F{”ËX)];©PW²0ãˆHŹ-ì³g;oïéìtwo’Ú^ Ìpåè¢eì0tºyÛǞ𥤇å>%Ÿ¬„Í ¥ÕÇRMƒªŒÜúukn)5bçZãN{e²ÄoFZ[Øîú¾—r 'ƒ0äQ÷É 4ßÛ…zßcTôÈ‘Bº™Q`MÏÊd°g7\!!âÒm<͉i&4ë*ÄLsÔ Q£èC˦#í ýd/îfªƒTµ­1ºŒò„¤ì¡HË!`Œ©E˜ ¯š%R0EÇÐÆÅ›ZøØîO‹Ån0#cô±T8#y¤,‚1š{^»Írg1Y$­Q­C‘b }&3ú5[Í8©æ Ë„ ÞZsÛ.;[óÞácß–ÏÏW3¤,K.„4‡·jú'{Å9©Öiç=ÝE»oLA¹ìWyˈØO§…ÚžŸãýï—çm êº;•£'xA# 0©æ9\Êè­ÜõضHiíQ€µŒìkó!pã H+J{YÑES¤2<Ý_w0ô«ðO¿çã¶ýòçŸy2Ál&8ô!­§5luûþ_’Íq¤G~ªI€XJGŠŒÑ¯[¸"‘-…‚Y'ÌÃYÀ‡r¤&¹+¼r¾¸a) ´¢,Wbéî‘#Û¢½§!02Èe”ˆDÖdéú²¸Z7d¦«|ÑV%"ÇH«ÌΧž¯Ê:¢vhïKCvÛ¯OÛÚšüä´}ÞÙ1'¼@Q…O% Jq—Uàiz#‘l¹„‡¥V&—fìÅß‘ÏöxM¸°ÌîôÀÒ:[Ä#…ÇæŸYÚ‹›1i'‘ƒ­¹µ·mzƒO< C^|d;÷¶®×+.írY[É>ë%hôca[—µ½]8sXélQ‚÷rö‡Ý y'.ê{°ŒRÀ‚9ÍaØ=ÔÑÅ–o–£G çÛ=9€ü¹ãhn€ÆÑÌJ%M+óˆð‰Ì;£“if„d5H¬ØÓMƒËéÓÓsÌr<~ç¡õ´Ìk!‰”™ƒ­¹›™·Ö^QЫ=dõM•QväQÙ´vsW»˜{sg0^'cáâÅÍVHæ€ë˜KU$‡j»Õv!.§–å¢Çönu]ö4Ó~ñÕ qcŒ1âTSXÙoI®@‚#äË2·o„¨(Ed s„I©ˆXÊJ™E›PÆó¹šCÑ{ïò(ÜÀà­vò!‡ÍÓÀ¯ä@’5‹EA2“Œ B5:44wàYj†PÖÐð´õtz¸†?ÿÌmý¡à2 ç­¬ž0)¯ûq:BŒ1Q~%šÈ/Ks*âJk­5s+ ͤ fnä’â"´ïJÄÂÜ“䀭¾ì5°ú3«MdBÊ}ïHÏÇ€!z—yƒö=sŒQToe¦½ÉŒâ¢°›&ú@Ü â$©T‚§”¢,ÇI¦™/Ëêýz‘¯w§kä>2“âaî‡Úk˜ ÙcÓ‘TÚäùV’˜F÷ mm<ŠöÉa¨¯™a¶Œ!3ÏyWGrÝzCÁ#þðñî¹Ç£©ð>Ô|9kbŽLÁk™•æƒUdZ8•¨yÛTfWknË]YBJ h–f´@1æ²w #ÖèJ퀒綦2bd6hHþjpŸåãÕÙÍ1"™ÃjšëÌŠó¦ôôˆ AFºQÁC•9o@LNc (ö8,„†dÊŒŠë{ß¿Ø{€Øû û«fŠêŒ±7#Ë«z!Ð(7qŒÙónÌž1RÓRë†MN¡§eêÈÒ2zêŽ×çmÊ:ç pŒLL\©餻Û4ÉÎ/ÿ„KK¤Ê±² sAwf€"Ú·ü´qOó´é9’Äa\Çy¤&¤m\!thy7]kêRŒ§ŠÄ¹û’£·6ZC ™²£Ø•#@ ­lOo‡ʺ•ÎÔ€Õýžñ¨£g„‘Ðp*eÀSy–¦ÐõÓÃÈwчhºŒa¯•†Ó~æ+VnÀMÖ:Ê:w'FD"‡bŒ·œb- å•|Ê¡€Ùã§ËP© (]¯©‚5 vcÊÜ]­M¿oS¼²Ëe¡¿¿oƱï#ÍV“(Š3oè#‘‚‘Î=`kî.è@L]P¦ÆÒSíqR>ÙaÙ:¯×æ’{öfuÏK-‹1»”p/R‘8'ß½¨™0Ç@×|ÑŠ J(Ógú9Œ1|=EŒäáŸV¨Û,=îÖý—ÇïèDDt,DL«Èͧ,# 2G:‡+ZÈZãŠÂpE¤Œ×Ö,Õšf]9*`¨óÐÉW›é|Ù/Ϭsv*º]/Ëõ¡ú¾–Þínk‚!tyú_ðèÍ¿Të(õõäÖWV^R ·œ+¸¤„pŽNrô¦ªÆ–zøZU7h¾àONÀ™)6Ç>AÖA¯Zy_/›_3ÿ/Þþ`& ÊclhÄáht`À‘7 ‘ÝÚ³/ŽÑã®w†É ñ\å7Ôë´”,q2 " d«sñ#Q="FT.…‹E5'EBb¨Ã£b%mÙVS_Úi¡ÆùÃOI…}*s4›©ó§voe°Á·b%*“¾-Ï·ýs¶æ«Z3a#õMuV‘‡åâñÕOINo— bøï‰éS8^"´¤R­‘0+ð­‚§¥ tS„š“Él˜]ñ%€yƒÇճخ|1.6ÀãGe¶® s@õ€l?.Mû÷<1b\ž·†­¢óák×V¢#GŒ½Ðþ?½oŠ=R©¿XÉ”Qu­EÿLH–)˜'#šã šO$¨¯u´ÚAý=nмÎy¥ÛŸ¾}Ýú$ÇïšÒIBŒib„™Ï|ñª¬Ã„¢JÏã/xXŒ}ñDiÖ‡5Ä)šp%àÈ2äæFÂ^ GgGYd¯ßÁ•ÀÑë#ȽÇæ1€Ì@dR {š;w­ç†óô:`¤­Ö«®¬šJBMhfúõ—¸“]Ú²¸ÕX(Ð1ª›÷ŠHS_g–æu—|ÓW³¿mÖ”Q©¬Qö¬xY&)Å8nº–ÍöÙüèƒt[9Ìàqû¼9íH^²5 r£W\¯|—ÕJ‚Í m¾ã˲½PÝ£ºT·‘8»o6öB) )*ÅŠÔ+Ñú’W)aÉnf™{&—óyÙzcXÖ87#­e¬n£_¥Þ¹˜biæ¾øÌ;êf¿>–²—ÿ÷÷ó.#¢7ÍÜ rþÓ›(–Çü·BåÜqÇoƒÎDÏfc2©X&þFx›)5›vFh ˆt¬\-%…›TSåƒ,ÇMfõTó’©Éšâa÷¤×;®.S·‡£²Þ£qNÒ-Ïì¼]R¸›R­µf£_3_Óó,r0Ý1D#xùu9ÿå‰Ë½?ç)Ù¼+A Å»óz‰ä®Rmlë)»Öõaï*ä9k™#«ÿòÇmË+Ì+"m ôô6¥ÀÕq¿*3›#áY²ÅVíÛÐmñ*Ÿ•9"¢† ;à¦PQU^ÙæeÕJ’9çEU\ÇUW+Þ¬dY þr~×Ö;;¸‘³›`ÑÖxð¿½(Õ€LE™Ïü¦äw¢"\0ë£ð-MÄ7nØW7@ /‹‡X5Nö’ÀDFì 9há…9wå—hXÑHD7ÞÜ·=“6'7¿­yîpÿ¼ßi߯ßÙæþ†sR#é 8%Û/ƒ>>Ÿ×½_¯¹‘‘h^¿àrZË\=UL»®ÑçÉI¾ÐáÉÆw¿¶zw8èºEDe=·“°ñ…12#ÕŒ‡áñ7`n-¯U¸%™!çëÎö«ë~}ŠÎ‚±hÔ™1ÝÅgç;]ˆ}$TƒâNDó‹ï4Õ6sÝph ¾~6é†ÈÂ^‡ÏÛâ#Ÿ÷åüãÆwžùÚ–QQ’'B'ìdqùõÃÂxýû¥µðeÂ8÷ç6‚ 6ÉÁÞÓ¼ È(M¬¡°ð»ÿ|÷ëu=Mü¥sÈ’l6-ìø//Œ¨ùò6ïÁo¼²r7äÑŽåñYÿ櫪>îUFUA×Ã@²ó€Â$/á[ß*k^Þè·¾ÍjúÞ4Ì×Å›3.¹n÷ïîîNëóÙaù¶¨'Ò›Aæ[X<ì×{8ÆS¿ÿp²½÷5†H×ý¹ 6Ï["¿%ŠL92̬\>BxŸ× ¶û#SÄ´FƒÑühÅæ7s~”ê%ƈÀL–ó¶—OÚ‘ÕW>NÜM_í¸¯küYOÁnT°b% Ñ-ÆL?Þ¢=_ÿzFıjzóé·×laÕQú*Mví ûòßÿåíòùóVý~qÆ%u´*·µOy=Üc¿ìãùiw™ÐèÛB˜3&£A3 Cbkê}·ìs([ˈ¼`ûpÑpw êHÛKnòC~^…ËÛ±¿œHóOÇř˚ë«õæW 7³ZGÉ‚P¼¦-›(¥ÁK•2kój¾—#Ô›@Ç{Óx__]‰i¦sÔ«7ÙbØý?¼û[äx˲‹­Á^’Îä ¡ç5Ÿ®æw},ÌaÏ}üx¿Öx7M@g´ r 3B£›Ì =sÀ ÝÌÌ,Ÿsù©ÿéÒ׉.#LŒÅßZ„ýÖŠFˆæÙq+…¾½n6uÉÜËʧ®ˆÃ_99ÏcðŸYóÈYŸV6àU¡e*‘:Æfg-Üüê߈• ¥TgÐ ·_]A”€‘UÆòý¿ûý÷¿”Ý?Ü›/É7œ“êLTnä‰#͞ϛ–Äþ§_îÿò%.ùïÏ×-úH:?ßÓO¶çýç6ÖÐB¦ÜÖ´3´}ÿðÇ_ïÖÍÝŸ—Í#lYBæ9b±”EµC4ÓæÛ:ÚäÒ ¾/6–Ç š]%[ZÚ6c–4è¬Ë«µÊò­n#2}ÔIÄ”`¶-{d;-ížI®Ž¹ ^o'½ÔÔ/·´Îã*Âà–™XÊô£Çö$ßœÅßÿÿërãôxEêüe«Á_SÐAÍ‘3FŠi¸<ú¦þüñQ’ßû¥cµñw??ÜÿîÇïÿêËÙâzí§FîædƘ39¦ 'c´œÈë§mw²Yš»zÏÓÝÙ·gÃÓÓúnAÿÒ7òåÉU¦”Óç ÃIŽ%ša¶ÚÇ¿ýz•OP±˜`•#ÞÀÊÙ,âbµÛ¾®ÏŒå7+“ ®,²uÅðãß £ˆp¦6õÕ»¾~Ãÿú_þòƒ„5jìO›5÷íurba n–´ SòÙïNý©_zG|Ì_ÿûyešåãþt÷ð§~úy:¿ß1Ì cö2ª•ƒ’n#¶ÇŸz Ñîs×ó¿,mûÝ;ÓøôËɾ;&Irfß>/+¿øA¿Á€¾Q*Íçø@oõ_ò,¼c}Ér ·oÄæ#÷™æ·ÖM7lôÝNÅì4«Û=@·ïóæõ \|w ÷þtõÕì'µéÃ_ÉĶPÁL12Ú=|¼~ÊÓý†þü«Ý/fãéžbõ§úü|·T³qÆ.÷Cé8³C "³­¹g[š±m4÷¶¶¦ÇOöþ4.¿>b]×e.È-s>.䨵–9[‹æ¼Ð˜YY–>N¯Pþ—º Z’ãF4Ú쮼2Š=*ʪ˜õeí>߯Ô@ß:$…£oªW &?Sc>4ÇC47e±^»¿ÿý*ƒŸŒTÂ@{kí« W©‘9vo û¥Û{8¸Úú/Mß¿oþ»o ÿðÇï~ÿûßß­”ƒ§K j9Qž’9Ó—}lïFdöÍ”íÔ>áî§Ó'œžq×®Ÿì}à[U`(Êcm&–’P/BÖTÄTø_G6¯×mÞY”ÛùLh_înÝ À¨EþÆûÕýFv´n=;rÇ‘›sI• 82iã—[îù—§óÒÕÍBpðƒ7#·'ŒõÝjÕ PBÆÐzº?åຘ»Y[–þyœüã?Ÿ~¸·í]Ëóþ§øã“°XÃå‚m/Ù—`F"Í@ô]NÁ|Û3ÌdÞ¶ÕlaþÏÓßüM{ÔÝXÎËèl>Ïø/w\=ˆ‡º_ºB‡wáÛ2wþÒŽ"Š·¥HŽCi.4ö,^ ìðù…›ÈÉ·Ëê •·úª|Ùà–íö…n¾Ì£ð‹mÛßeR2òÇ»ÍizÉ?þç5`m±ÌDÆk÷w%bp9¯|ÈNîOão¾»»w÷ᇳ3Ÿþ{»Ž§Ÿ?ê„940J¦ 9¡¸^cŠ/|tsЮŠ=óñ—ý/ÿú¬vnmqfç㢿Z¸—¬M0+‚ÿK¨Ô ã,&ü— ǯ¶Ü¯U  @ÓCcQ3¤(ÌzùoÖæ6,úuÙüȹ@·Nø,´9%à5Rñ(í& 9"öw¿[eìÃçÚ7ËýM?ÎÚÚ®Ó @Ê1Ô–ûƑԾIáËÖÆùlŸ>®?†–ïV%îþùüó³Òþ¯~â¯{¼;ÕCDL¦€Rô=Ù\=–û Ž=lÁõÓ_ÿ~}òŸøé´÷têúûs܈úeÕv-UÝ«Bœ8ƯàÑöÍ9ôê—K† 2a+ÊH%)E¿Ì̾…fi&öÿ Ú=³ÿ/ÿ$*†ŠŠÏÛóUReO\³wÐE }[œ5©ãxOùùOGÐ$$räúþûj ²Ûb¢g[Ý×m¡Ï¡jûçOxÒŸúâ—ßwÚÈ+›µðñëÏŸ®×ççkß/ÏéÙ“ˆe$Íÿö7ïÖmUÏ@[O÷çu«ïoS`æhJ8•mÖ:‹sðõs£ôp  yVÿûÀ­mêþ³™•¿ „ù–÷@Õ|YÍ#3™>poÖgb YzaÖØÙ—zs>XÓH¬ŽONô¾žiÉVr¿[–ܼµšŠrÄ4ú®ïg×6<¿[Ìñ¥—m-Œ°óºäJEô1y‚àRˆjxq8„¾O¡µÌøóݦA+_ef…òH©a¶ÍVGÈWŸo¦ì¶°ê· Û7ØWÓm‹M_Èo%9m!_ÂåØ[QÍÊÓ’Ç ‰¹‡ñ:»Ee.„1í¾|þ­¡XOØA­xûeJ6 ò›¥Tÿ‚äÏ??Ý‘¤¦!bhy+ú y#@hŒåî„ MfÐ"#hÖbÀ[óãȰ½·,æn0?þõ}÷Q^U3™*äc¢€–‘.0}a³Lù²úÌÁ†U‹øÐ ´ã@è› GT?sÒ†fUûrOxlŸ¹7Ž„€å¬ê+øt"0›sê¿oÝÒ4‹qÎ:0{ùœsç£êÐíwÇC£©®¥áÖY»l/¶ÇøïïZš™IIëד%Ö/D4×Qhë¶F¦Þ˜‹¬‘mE$èÎcO[j³Äb¾ˆø|·.>± Q¥ßèG»…$CRº‘-z#$˜MÖrŠšn‡:èã"¾Õ7)(RŠ %Úü½½ZŸ¹FÓèáõ"H$èˆdDÐ烆IÑšãÍμ&&b#½|P)kÍo:|2ÇFæÍ´¯“¬ù¡.6¶Ç?üò×m73S’Ûx¾;»Úd!(`H(±øêb$4§ËÑÖa®I4@ñ,·ŽõÖšù¸ü´îÑr&]5eÆŽ©WET5jK ]/çu<ä)Uïd”öô@eçÞ™Aüë—já^I¡'tÿêž+ë9¯ô”“Æ ´2¶ŒÈžhÙŽDo>—¯¦tÖËæÛ×€óLÀÊ]éåÖýÿF Àrömëã ­¯žÈ#ë¡UHÿø|–+3Ítw}¾œÚkÑ(ưٚÅ-r$›7ÙB¹ÝO^áÍí,¶\ •ÿ{^¢$á#ëqÌ!DÓcÈÔ–4ë×ÍmÒÅKMej°öO¼ {RàM¢?oä<¶çºÚK½üf§Ô¶È²Öšè2„¬ÁkŠr»QÒ R¹úðæ`øUNYO‚¢’™W?Á À/%Â+ÂnÕ ZÉÝ×d…£íªIÜ\âŸ~þ[T…\"Ÿ¶;+³RÆè @ÓdrKŒXïª3.¥/%ÒXÇÎß "Eo¦¶Ý˜JMàUãIk>®¹ucš÷ë`r€TE"âvÝV®Ú_ÜB–ë-M4³ú{Vwì òv[^?Þ“Ì’12’j“…5÷5v^SÜç~ö hÛ›>u8`·WUYíñI”¨ÜÇÞþÆSV¿ò±öüÃßЬ µ¸|öó—¼Êˆá$LŒˆ”""z¶û¶$RHÄÓzöòó¨Q~Æ5RÈ‚ßoq½ãu¦7síŸ;cXkMÌP4cr'ª¢hžxa%=lN«o®/rEîør¬×QÎëà(ßòœŽŠúØÓW¹-€âþ'È Ê¾„RMRváÏ7QÊ«4i.ÖtQá«?<–íÕçÝðç_5 sr4ìOç­½½ÿ鿬÷žÐP[Jn&vãîÎp/)s–Ñã(k6Ëm[Z;oÛé´¹ý´ZšúÞÓÚpÏÏáKö A'æ»ßù“dÊÅÒöí¼eîUd3#Øš77£Ï %}YŸ‹›Ì)› ‰¾,ëA•ý8²irØ»™S1ú5ú.gHŠëåÒé}4t 6£ªe`F–[a<‹û2Ý7ºû¶.¯% Î%gÌä8R5UNûñø¨ºifî=íÛìb–àý_jŽ;̾Øc{?n;Î’>š(¿‰^n–XkžUµ)6@–±½ 9O¶‘Ŭ¶Eµýå† ˜…­e,·lß¿ïÌÉ‚‹[~Åÿù ¿=¯˜)Ü!>e¢¤ù+iÁ›ÖÁë™1ÊÔÍ­e޾‡ºí=•±²‹—ÓÍõ(Üæ¾cU,YŠVó*9™I›c8¦enqã_} 7Iž[Â~Þ3­Å®ÆæÁ§÷/TH½Rºj‰šT£ÜÚ²xõ¸’ÝI¬¨nePOP×ei0÷JÆ‘1-¥³ä"N~¸û˜± *âe\7 ¥½,Ý ÑíÛt. å»*”¬‰È)øUÞ6¹µlÉP"æN%Æ4QIzWôŒ À}sÅ=1ÚcŒØ«êÄHÀ¿@Ø*ªýjX Œ)låëBûeÅ^="õGgÝÚ ýúÿÛû0 `Ù­ë”—ß¶uú%¼Žz0‰ò¥Ñ«ë'•“Ü M¸Q‚µ­zZ ä>]@5zPrd¦·åþ݉cn…l×§»ÍR9‡>ÏÌÿ7¯3I9¼ÆŠd”2/ŸÉW±ÿp¼é‡kýh¾H»åµ_Pæ¶›!3•ýbÞ¬ÚRÇåè˜/ð²¼€Ì-i© + G‰—Ì‘ÖfV¶ˆfÊ€n$µP ¾ðnYЃ¬yN¥û)‹DyÑ'×Óýݦý˜fL’ˆÆLwFu£Þù//ê–ÿW!Þn ŽÈV¶¶Ì¾ï4wÅ0ݵ“wm Óí+ÑòU§Nðfðjø2_Ôߺš—2u/7îU]H×ãÿ*3±¦ÚõÒì1_BeáÊQ]‡Üˆ‚ÉfòI’¡›FMaiFruî†Q –É@z–‹r‘WL)È–óùýê9ÂÚMÅÒØ¯gÏdy­Îj[ã_is½ì yWÌÙøù+ƒf/:·zš !”£Qj)”IX³Ïëj& ÉÚt6¨ 'ÃåU:?]o™t·[ÚøZðժݞCéhþݲ^Q±åßý×»Sg×_ŸÖ§±½€Ì5ôåh—ß À„)Õ<ǀΠ¥X•þ‚¶XŒ%h¤@.¡,D©??ûÊ ùºž7$*©û‚X,®'›iµ”hú’~;¶ðU:F]°•{Õ‹;|e‘-_RÀ2Ï®ÊIزÖ-ÅÙ–ò¾5;†$ÖZY4¾Ð Ž@‰7ÈG‡“ØÜ 6;GzóíÅ›ÿ™¡¾f•שcÙ7ûŸ?߯zŠËÇ~Ī÷ÿé§·Yåvº1sãæ•ŸÝÁ2Ô\&®¤$Êb„ÌlTÙZƒÑ(®OO«{˜µå´¶k¶2éš÷7ξ[yÄJ üV"öFf3† E¦^‰N+°™ç«ŽŒÀ²ŠÑÊsÍúœEim¹Ù÷¾,†„”1MtìxÝTÆ/ÛþøŒòÂʲÕ)ˆ-¿Á¥xµj/‡ú´º:ÞÒ{ÞóOú«»þçËÃϹ¯ýq=ß½Ê*1Úõýså$fö‡G¬Ð6´mN´E=¼EFÀÐW¸™ᢹ|A f šßÿË»§?·‡?ÿpzúøyù¼¯w¶ÅF¶ðeÞÒ¨¤ÖÝ–v £ÜÊ#C™5¹ã›š¤[· °‰j9•ñ!%7rÄPýK¿‘Aö™UwåÀÞM;²1úžq·h,ÛþùrBhÚ[Z†7u߯¬º²EZ³L 3ÓOšÁ×£ÍÓääõó'M…kI.”:2a–°l»Ö~ÿwÿ÷Ç»%¯›åùñú¢‡›e*JtDÐÍ`käèÔ2Y÷u%cÙSõGmóñðÇ;>P_âÊÖoÈ8Ü¿ójØË1q›þ['û¿]üüÆ‹G©[ U…á—zãx¢µ(S9–‚âJ03>_õn3]ž>í¾0aì•RTÐÐsbÐ7å(j [lþΗY‹ß¸ŒãPšŠÃ¹u+)ª¯šX¸¸þÏ?é_ü§wfæ®xþùËFjM¢Ì&˜¶¬Ž4ŽëØÐÈäDZ;ͬ¡¦û’$;`gî¿>~^˜ 3‹·XÜtY.cYˆgÂÊY/×ôúŒþ¬o 4«[ö7OQ!ËþJÒèራ‡ ùôÔÚ©]Ÿ?=äéÔ’óð†ð¦‘VT·ÃÖ “QI¥«2Ká·¾ãÁ‚#Ç|–¢:Ò<˜>#Åø˜|wn-Üׇ|»pE°§´e O³†±œWÍxà0Ò¹Ô"„½¸˜õEÒ¤%ŸÞï»çXÎîF)óqÉ–:’~”FÖJp´M€¨&ù-´ü»ð¨±dBþaª.>jÒQß¡=JÛ—¤e|>íùé*æ MýHÇBÁË/ú&NdÆI&g¡–­zý¿E¼¼@ó J@,€¡r̾¿Úùƒ]cq7û/_ì8cqš”­¤Ú.˜Ÿ×¦4‹ý2Ðj«LŽæóPé»»4-EaŒh×Çhב٫w`TÈrhä+H¬€‰¢€MPR¤ÿo8ÍÀ!R)ÐPÒM’³Pˆ‘Ø£5[" ðòÙìzÍ–¹sk9Z=g £M«óãc¤˜9„cHÜQ;ÖÄÁ¯¶œ&Ç}–)†:¡«3‹ùDÌž°Ò{¸ÌÅ6ú3mL6™† &ØîËvnÖBÑ/W¹ÏüÒ”¨[“´rB« Gc(ü©§¹´_¹‚„Zc¢ZºÍÝfŒ¾Ü0Áj oÓË÷û÷½æ­MGmãJŽ˜UoÒsäûp*ºlz³|–gÂ2"’~“å1åyI¶²4ä¬3!šÑ2ÁC88(|ÕDD%XõNí~€kjäóšgƒX?¬B}X²å«1dGÏIw2½­Ûùä4êº÷d w¯ÅSâ¦V9j?ÚŒÊ4|~ðgQ¶cŒÆV“LÚ»åÜÍ #ŸsÍçJ¡Ï›±fÔȵ炯zf§Ú¼ò͹å b»³ï#SÉHkLHæ¾"hÈÖ¸kiebe°„÷Oãî4ûDB•n`#R•ÜÞì/R_?wuµGŠ3p¾4!Ë•˜06Ébjó ÿrF*f ÌdÖå¾O«Amß÷´©õÄÄ„Å9%ÃÇcM0¦Ëå. ÑN^ÞOl-2½½ÿðájÎiÁdTÆÑ?Û'7Ò¢´ÿÁuÃ$Ë*R¢¿È@Ž[3×-£_¯AkW'3áN|YNµk°m¹÷óiæÁôãq4ŸŸQ1_lY8ºæ\Æ:­âþ7f©š9ÁÎã[0Á¡Mð¥WÇrß® [Gâ}= øZ>&f—5.çû3…9åU‰-³K‚ùÒL‘q·D6&›—K˜z}ÿñ??]ÝÝò¼ ‹çó)-®‹=©yù¸;2rÇeÏüùûš¹f‹³Ì·iœ°?ã%ðT¿±vÒWgZF`ß¹-~Û„@£®Áóås÷?MAç} öÍÌ|Ù–«{>Gº0b÷Ñmô€Ãdˆ¾?Ó»;<õô\X.$ÃÜ7ÍFÚlØû"нn*”в]iJ)DCÇÝ÷÷ÿ#áÚ¹2’wÊ5N07b;¯Pï ¸ä[ 8ÛâTHPžž`0ÛN§PÄH.DÊh©T Àm³@„К"ÓLAιÿc>o­µê\ç~õm¬Ou,RA[YØçuk22Í›4a^êð[¿‡ÿ¿:\äÓÐâoh¿u¬X(Çþ0ŽQv®™!†ŸSŒ–£UöHÆè™`"ïÒÇåòø<~øÝ}Síyµ¹™9ê«;n:fÎOV”ÈŠr? bK #XŠƒ@]| ¨f •™ò1K“è/ýï«Ùl0†˜0÷MÍ]å.­JUUà jûáHúlaýjtîKñgÎ̉–)VðÕ·Ïï˜äI?­ýL]Ϋ3J໵Ü"ëÒ×¥õJNC]k.EEþvl•v wÒW¯àÈLØÌ×›+ ²H%¡jÇÉUòöo~ÃkDÿ•ÖÇŠãžCK(Å¥¨¨«¸„òOx•¿Ú‘™Ÿ›&Ù¶Oœ"âæ}q$KM”dêÉ“rzóv‰q±EMÄL¢ ©ö"ÖTë§Øìãï—8Å´‚j&U¤ J»Í8–Ù.œÿê/äJ‹$ål¬¹Þz fӮÜ"Œö§ ¸ÜTú~}¾6~<ÍE±E E5É5y#õüÝíýzûkï}6_qþô}Qs_Ý{[º«™öX“lÃÌLBmFný*AÁêÝÅ&˜†¥Çµ?îs±qÉxÈ ¦QçWeé ÔöÏó*•oˆR/TL5R–¾o©&ãõûïßÒD™8G2KÌÅLUt\ÎüR÷/_P· ¨{Ž`RÓš"Éûþ›_ûç|ˆt±¢>àûš1 ºÎ¹Þ¦2ÇœU2¿~³oÿ—ÃýUE_=Cû"AsŠÖvíÍ+YC¬Rµë?ý·Ob«2´—HQ¸ƒ?ü?ÿå½îͬNMýüÄ¥±ÄD1‰•I2S̪Ùq)ÑB IDATÇϽoóÒ.£¬y û5jî·ÈÌäk›À£Ü[;‘C P©r—åÎÁé<âÉQ„ RÜo\óôëé×x0P¡,qGf‚ð±G·ÿøùÂ~jÒâ6`(š³’3"–U‡Ó“ö_2C¶TDÔ\Óu„®›¾}#Óh8ððÍßZ©ìÙ,G¤‹$ÕL›ð.-æ´ð‚äÖW-Õø9äud¤ ,ÚšYê•›ÁõÊÌméÆRC†œñxRfªÁ Oü=>=uaõ‡‡s;Gùù+9¤7ƒšY†ÍÒ@T•ÈÈÅÄ<«=÷u1A%濫yŠæ@¦/“Òxì!¸){¿x[?uà³7g‰ƒ<¿é§æmÅL3>0ßy¥¢‘c„hùñù~õt‹)PqP—§3R|õÏj æÝŠŠrhæÂ‰ðÔ9“Ž$íôôî-™Ûëu‡5eUKÌã¤`f•‚©Ð˜«F±Ãáþ/¿<+çql[3±-ÄOýáeøzS&U’ˆ¨æl°¤ë>`§Ü ËÂMJÔ«ÔÆ–ÚÚéñ¶ª*Ñ®/„B¾ä`z[t{É:ŸºÒV{Ùñæ›'y¤2N礩/6£²Tt¦' åжSHû¶4Õ?wTN繊m÷8?ö™fïÄH…u¿ÝÆ&’;Ô”™å„¹VMfP?¾«wùïþ²·º>~Ø7ÊÁ¾x óÇÑn#¡®".W¢´É^b.µ¶ÓJ,E€ÚënÍ™Ÿ¯úë¿z”ÉSÌ™*¾tç(±îý6 Fè"")bÚNo­ï£¯oVp/ékgeFŒÈˆ¬ýòeèw0®§¦×L3¥Ä›ï¼‹ò~v’ÔÝ_oÖB™ôÕÝ.y­ÖK"Kifˆ"”“S7–ǧý%…î¨Ø£õSCVtmYŸ›ê‡·Ëõ=ãY¿El·òfp»<Øì‡IQ?u={– «S¾[Å,ûI¼ÂÃÇØŽ8zi±o'å/î ­:Ý"ó2öÇ“[LÆHša³ÛÞ[ ¦”HAæ6(‚õéÿxúãßo—À­®u~#·MVí}æŒ,K³[ê¤ý«¼@½uñ<×~~z|#®ÌbˆÖVDDåMõ298eYa ‰Ò–¥U1òÆÖø2—„Ü dËÃR#OùÃîÅfQ„v3ã>rV¯Þúúæ£? "°^°dPOiÒ[k1Ð)d1‡u7*e†>òCßÕ³sÃ+ñË…ƒÌcYbO£8+žÇx\u¤yîÑc»H®º\Ã= MD `Kb|Z Y”–ñ·qþ]äN²°mkmh­É.jî@ùãz׿ˆkI¿ýO·7’ã9R{ßPTô%B6µ*ÓY’@;Ânõ}-²RÛzò -NØšï0FÉ 3ûiuV¯øÕÇ9 °ë²Øc±ÙÅIœßcûÍÛü®ñ^¹.§EFjÛO-SU)U,Õó ·íÓs’•bfÒ¿¿­B3YœC›÷‚BV3RkT)*³Àz“ΰ{¨Hf‰€ðq]JX#êÏ•"PUQ"JM…ä5_Þ™T¤t½½^@?o0·b Y˜YÛP_û´Ùš‰Ëjþ>TÍkZ0 TRÑ]jÅå͇ÿ(ËmÛ/ü)‚à«9ÜÁ®4¥˜ÌÌT $³ &J;­šyÄô=‘cdcjì%ÈôóÃRC< q'©]­/.ÊÞ©&jnoZÓócŽÿT}¹Ž·NÍ R©f`~͇(xsÿ<ª³®;Œ*Ó8NÛœ~ôJ²âð,‰ªÌœsñdÈcaÃ1Ñc0 ¨ì/íüË£ò0O»)e,Qå>`ËB¶m[âÚWíÚ°ÕÀQ…ö²ˆØË9ñÐ<†¾m$TÁ²¸V%tj¾IUïÚ®ch3|~Ç#ÙŽ!‰¡(P=Ž6̤š 5妓)ª"ÃmY=æºâß`Œ¨š´ÂÉS Ñ"Ež}+ÓAZï{jkk>¨ ƒ¹jë}•Úö7¿{üá÷±àôëotæ¢w†a¶—œ© ¢ ®+¶}ÊîŠø¢ƒ˜›XsK’ž)Êý(÷³"bz~TæŒÈ̺˜‹¸9Y•Tu:âúðæÏT•$˜Ü“ÂŒØÔÍ„øþñ©7¯¼nz®ýÒO]®9Æ fP¡¸×Øc^"5%¬hÎ+3wÑC*G–s¡L{•Mo‰×%ÊMJî 3QÑ/VJ‡¿BA»K3˜`¦«PªŸVÅ­ˆä,ÆT œ&Q@eX¯ÔÞß÷.î™^b­EYïZ9«—#iX˜U/ç^Ïx÷—ÿÛÿùG[?üEk™B¼÷Jc¨Ì CUjö²nŠàuÞ.sÚBÇ ?~x/[”¸‡¦ÅÚºÐG('ý8‹Ö\a;×ÇUo¿e“%ƒ–ƒ~Ö(dÖ˜!˜ÅR¢a¿’)´ÑAŠð.¾W©L6Ü*ªû8ÔY˜-x£xӮ͆ŠJ‘;CÔqý厊šX(ˆR|Õ"4‡TÖ¶\R›Õm\¯´Cp$(HjŽ]9ííŸ7}('U.TUª&ôšUµLí°¨Æe¨ßÓ÷ˆ¯t´AR„t7Ô$vCIˆ÷®þÆPÒ&,V“}˜3=’(jêéÝ»G-mExjyp‚ _tºŽªI–™km‚ÕL¹¿ßÓ4´ Œ!vªMXD)gí?‹ û-ÝO ƒDù(XeÖú˧ÍÖŪ*kŒg^;3‹‚´"ĩЕ ·9ËE&ÆõÏ!'jšV*LÜÌ”ä«{;-¶ë²ˆ`¹]†1w}WQ3ã,Å*Pa™˜q§HŠ +!‚b•ºHnqÅÒ7@ô^’N÷qóE ›N ;!…°ÖÔOc/5„’…9kÎâaàTu•ÊBÿð—Oû«i¯(íCUÄúz[Á–öJ`Ê‹"•ëú¸Œ\O²pÓö¹)R¥Eº$-õà ï«ÇØËô™ éõ‘Üׄ˜ÿáúðxUdEäT1@˜Q*¬5rZ.Í$Ãò)õD5l%Ûõ§yœäýÿ¼¹€_›dPÌœ !õü ¿ÓëCˆöµ÷Ž ¨Íx}ݶÛ±]^<³ŠzôY¢†ÊiÝà&f1ª¡UìMvyì{ìïⲌ)ÎÕHqÙ«‰Õžª (÷½¬+¦øGd’wª?—Å í{$!@W%ÁÁ»¤”ÄôCùðïß_o+•Aa0±œýÂå%£ª"ª¢ÖšY[ºÄÃå’àx-Õ±£«DÆ‘Äłڬ?Dúöñó^L´ÎˆÛó‹ Ì´©ºªš5Wú¹ÇßýÝ?o&1Œ•#J®”Ê ¼&LE=’Úêð'‹šö;د·ëe|Õ€ QUŒCÍѬí£D™¥ 5³æ€Â ê¹Þn;¬‰ …3etBIUDÆQäL^}—ne¢dRû|Áìa½Ý¢ U„H¤)ŒBæÄ9î ò™Ùñ… œoT_eFUÍ+ëøk:òypOØxþ¡7f 6I£@ ÅT– ¡H¨™Â—¥YW)Äç—Ò¬”T1Õ«šÑ¨ira²PÉë–d„»)b ⨫fågûôÃï_(ã¥V™¢‘LˆÕ P_Xá_hQ%_|²+3¯p¡Z—cp WŽÛ€¥©¨º›Ú*ŒPWRAX3¨Lqî´³4«"¦p`&Χ@EX™bæ’™ÒE!ì© ×t›†ÛyÌÓØ” ™c‡4b²OïºM@]Ïgåm k¦&‚T˜_È~"Êç?,–… L÷œ×iÑ‘ÀŒunªØ+"“„«ŒM#fªzk~L 𬤠.·Af¨š0¶1;L5w1Ï¿ÿöYÖ†MÀæ¹Î,aÔ^ò%SaþÎwdnúç„_ëõ¸çT¡Yµfæ‚ÖI)-ªiåu 5«œÌ[α¦šQ9ÆŸ?G†œNW:l}, ›ïy_Zì£5©eZr·›Óª]Ï…Áá³¥Ô:œÎDpÃùéA/W݇49°tVUiUe}ùŽ+†Ÿ¾õ7-¥(Rå–(1›Þ˸úQQÜsW䨶½€õô ,Q©QQËÌ,º³XÉœváûvÛE2_Ä:3ÆÁ¿/¶‡uÿãw/ƒm±bìuSLfä,ñEŸ{‡«“sdÇãöÿÓâD;tÆ +vªmSo*Zl­ é€¨x»ä$C”ùšb ™þª:ѹ“UpUH»XÓi©¤TV®ýãçÖ¨Ì=›þwMó‘:ÈÝHÁ´§?¤B÷¯p•¸}¾œF˜ú}ZOcƒžãI!DÍ+9îïŠf3+G(*ÏŸNÚ¥"üàrP9²˜Y"÷Á¦èôj=ø#'Áµb¯=K+!E«f^-AÖ]áȪj×ïœoÔ”‹{dU) "^ •q1R¨­©[aÀ¥JªJÜZ™¬ýi2zêÚ\Š‘•”ªºª´©K(Q˜ªªº~þñóEUVPÜÇíVÒN© #~æGÌš’CÞ3b‰ÄŸ'¤º«·¬BªšÂ»ÉV‘%Eë ¨¨ˆƒ5¶-pH£IsöÇ“d¯“a=¹š¸ëT •ÌPwïc|—ÊÝ!¨;“kkÈ›ÄÆ.:ÅðrŒ¶Ux<Î'x^½0‘§š7œ|I8¦!DUU¦€Ûá§&{隇!‹Z*ªc›);·!ÄjJT*2e¶ ¹ï"˹)wÞ´)¥’¶p$éqñÉùân*ªª¿ývw—jJh<|YNÀp“¼‡ÇýÄ—!ÀšÞ¹_âê0Y_U•´õVf^#î Ôžû-2JœêJˆ)Ô­\ö——½ì :HsµÃÀ¯&ïBÍêpÛ¥æÐî¨6i šÏ74Ìøíâ)ɱ3÷W‰}rK)ÊãÅ â3ªÝ“j5UBÂBeù;8fÑ<º¹Ìl[ºó5Þú¢ÞàfYb$±]iâ.À˜°(¦ UÊJænª¦È¨|ÕØ†ªY¡";ÅcŒ¹ÇIÍÉCÿ§?³yï)ZûõßæÛ…#zÏ,” ¹¯(…ú©™=*uáW¾Z@ýú?€NS3o®,»\ˆ(OO檧fªÖš= ìÍ›Õv¼¾˜Ñļ÷¥·ÙÚQ3Ô[ÕyAûÒ› D™v²‘vû§ïþB÷ßíg3ëm7Udªëå»ïc¹b\rYý¸)àŽ@ði˜:ç¦S|«H¨‰$¥Âv€•Uc–˜å‹Õ%[Ÿ=H[Ï*q͸¦¸3òÐÞhc– †dÌ”¶*jèá>pÛn×ÛÓ+ævËWÍÊ, C(’¡]ׯe}þ¯ÿx£ˆBeÿñÛq)hê>h{Ÿ3™i6ðS/…;Iñ ïÿLJ,s5O.1¦ºˆ–ÙC3ˆ@ 1UmU]ä4öW¼ 9ŽœÃŽëþ±N»éÉ'–u¶ÏåfbŒë÷7üþ/¾y~;ôc-©…•±]/»R ×O×”pi¦a”±'m.ÜÄ×Hì³Ü–D´DMªšÇ¼„œ¥XM÷qÉÓzûý%÷il#+‰qÛâÈÁ˜ô‡bßy´ •%¨Ì¢¢ÉÚKX£z›ÕØÔcLØ,2(ê’ä?½Íï^œû[e²"/0wVð 3ɾ½žÖ¦½-¦Rÿ½“òOŽ•%w€L¡ˆY–¨É~Xéì#áRj^"ÈŠ˜™‡meN2, jFAÄ—µ­ÇMº m××hCM·ÿö[oZ $sß÷AlT);-¸\¶±­mˆù46­(]f! *IŽ£;“üÏ*-)2XYuNeФˆÄçº^3)êvÛ!Â9 œPrîRLM`•*c:B¢˜¡¶Øg‘YLˆ1wÊ×X‰(¨Û÷ã¦HU©1j&„ÆÑ2zŒ=o†Óúð3¯ÛÓŽ›j›y9j)Dôn7"v¯;°´©ý‰Œ}®çaiTc·:ßE i-æËù܃”)IvFÑwyÿåoÔfuÂØ÷Am%Œˆi!v½ ÒÄÅ.n3 ô8L&4B™êfÄ¡»»4ˆádŒQ“&)"2-‚ ˾ó„¿}G17Á£tÍA•™Ä‘°´æ´##¡"+«Æ>²[ƧǪBEVóÓºoQ’Qœ œчϗj%»™’U3ëuBƒ¤È&VbÚýßàøU(§rQQnY†¶°«ȇ1à 4ˆº‘9ö€VÙ5æÍ?¼JÝ××_WQ¤†¯¼Ö;—§‡Þ—+« ªÒSßo—È_7íÔø›ùXÔ¡`!¯Û÷Ê1(Üíï^Îïl‘õ,·ÇÍÎÛ«?XN+GÉO¨gð`(ª›Ð_ETh¾þÀGß”¥®:Ãl„h^#E—}µ¤äõ*JlÎQ¥R¦­Íf5³)«DÇØá¨2¶¡kÛŸw[û9«²"3ÏX~ýüãõ˜%¹©MíîûÕŒIõRAeq݇µEJ£„ß_nŸß<-£Ébògâ*þl¬ƒIì9zZcߟXb†ºêbEÄL2rdP„”ÊÔÃüO R†-pÂgq3Ã2YµÛúæñôµº5ö‡ÅD»ÆöýØâe»ncl#)"P]áï·ëóªý¼†šÃ¬ªŸŸvbâ`œ j–×ìŒï¶À;#Û›‡ñ£’*³2LŠTAÝ%GÖ}ì#Šâ(@1)ˆºî3ãj*¢ÈÚHÂ¥:èÌA²rmR°õɶ[‰0uÓÀ_¯©ˆ*xHÜ  ´™‘ÓÐ PaÞjö7kWýIÙýß9*É‚‰‹œ<²27+À›$ÕÁˆ}djГã>îÓÒñùê«Ø+Q¦J/ÿÍ›³R¶«ã Er ø»ËÛ·ËõÛÛwmDŒ}d±=7Â=–ßÊÖ÷ëéÑ÷ðfMiïÞ¼ýTN ãÑÏvºgPpïC‰²½}?Nû¶2ìÂTö€äçõÇäkú6&´{Åȵ²JTR¤Xd‹Ø5]é'牄{Š 4 · 2öcV$ÛÛS\“!{ø›7ö®ÒÏ ²F¥ô§öZÚÍ%>Ý2âZka ææÍ5F"rºÑ<µÍ£_îô/•GôãVî1¢‰¨š{Ýno×á'µ›¹÷uíû¶…ÏÜ€?¿VËâ·/ŸÞ¾yzXË”)Ͻ-ÊQrè°XEíuÒ0nñÀ„h[÷*1¶ÖÀæn«ìý¡oK޲Æï›Ù|DæÝÙ“U”‚ªO)' ”(<½™J…J¬9Få uRÜÅ–£³ ej ¥¸NY{Š@­"Ç£¨þ—ë媼}ׯh”yG’Œ*XG ÔòöãV{î:MÕÅ…(†“sl{Ò(¢K™lÒwO«}eñßÙqóRJÖµ®CÆÕ—Ù„×ëåõv8 º®½ ™‰;QœEâåS®‘èãÛ?œ?üæM›µ¿¾žNu/©jªÍz†‹K\t¤€e-CP{äÓº,9LÂ8Ä«"¾Xä ¹bŒ2ÔWó?Ø =·ýŽóƒŒIt0ŠˆZd–²J¬F¢3Êí]qB@Š­ƒJ©DfÄá/oºhǨ±~óØ‘¶t›¬è 苤JÒpýáyΆ 8Ç!ZÑÜcÄLbÈ¥òµ IDATá¤Þ<4î0û3kö‹7“£²ó|ú\q;´²K^>}¾f“n¦1žÖóÉÙMÍ&8O’¬Ë³¬VÄs~ÿ«Ì0%^ÚI‹¾^kV‚¸Äb²—ºŒ(›b;¢¯{©%`'{ø¸¶ªn}‘!ë8œOb&Ëá¼sh¾ÌBЮÚ[…Öá!¹‰º°e&™ì »XÆ*µæ`•Oö[ô¦¦eŠ™å5žoNY²f¼b}ÿ˜µÈXN]sV§:¢(­hå¸~Ú•¡M*êô`䈢ÈR¨œ6„+cüYoÙŸ-œHÒr;ÜÒ‹L8§7Ï/—Ïúv)|÷í0OUd©>o)g+^ÿ×ÿðÇ-®U¥*øç8GI—~¥žÛþú÷íͯuÎ]¯?ösª¨¨2håÚ =øÄ} JâZ¥é¾, …/±¤šÀ¼¸÷…#|кE XÚ¥2) ‹ªˆÙ´¯Ú»•XÕЮKF® ÊHYr¸ÉRîÈTCìUÔæH,‹v¼Ô7ýbŠí²Q³\‹ý|Uðøø÷í›·ýVÁóÉÑ’ÌEBõt-Ãëç UeÛûQÙöˆ;÷”»`ÀdTo.Ú÷±ú6„–z`ãLùÓHÏ?ÍH•#Ì [gPø(®>®Ûåã§ò{¥Bj¿4ë’þFkç~Šý¿©½IF Öüñó¾ùðxóý¢ªuŒÝ¦HLÊbžëÌÉ«H Ÿv²¿­ÏW?õÛñk¦7G&=Š›é¿É‘Þ NO ì3†ên䊪É%EE꫼¹[Ÿm<ë5ûóeû—üÃùØ,ca¦´ÓŸ»¯=3³«´Õê¶‘¬ŒÈOý‘Ïßýð庒aœ·\sK¨ÎY3*UdìÖm‚r$ÃMÌm’ð§ŠæÏ,ܼår–ìë©6“ê'Û__kK  Sº yë§VãfÛ®ÕZïá!/×AîcO³›J~Žý©uU¦æ­Ô%FÚ²®¾j€Of1ÎÎ[_;2q˜IEÅH,ÛsÔúþtÝ÷]Üý0ùËÐØUýŽŽ*E˜ÅaŠïv ¬î'aMiÍßÍŸ7àˆ©¡y ÕCZ¶è+Š)Ikm—¼>»¦ bÈÒýã!šYj¹¬èf²©Ú6Lª´æcPPÞ±8“Ê}¬î5vYXUb&ñÃoÞ´2=¦NŠJlÏ( bta©ÔDU3ÄÈZûõ‚¾hu?rf€¬¯"8JDN\TVéúîíC^ôÃ_¿Þ>5ÔÊv:éVlj鸔E;¿i™æ»’©¥”Ø/Ò=½í!¢9µªkÝ—gPÍ¢µvÕ²Ä6ÍÓòÏ,œdí:ÝîÌÝ肸‰hTÖ¤zÄ…q]|’ëÐÚ?¿ËB\?¿®„¨ ²(M÷Ú±¯Í¥D») ÖºAg-'1'ç1U1FzÛGª/šŸÆùýºá|%2B±¿^ç¬ñÜî2”ÔÔÁœæ³ˆý6ª¯'ÉÁôÇŸÔ†©!d~ü0q;Vª¹ ‰¨‡·oÙR{ûæ7ß^júG+a.±·û¸…ñÜ#e6jEj1’øl­.Ù–o”ÛëË-Ö–˜7Su$´–cZchkZ 0'Öˆ*¼j[OþÜü¯rž¶! ´Ù$¥™™TÓ3tŒmÌ­ZTŸõQi6ÜÇ ¶¬·W{R”™¢¦b¢¤¸‰=øù±í¶’ðµ1mÚÚûu“¶øœû›ÈÛ…«šŒÛ‹/ç?²0M\rß¶Ñ0±ðnvzò**f gö b»nìËiá8.‡Yœd‘Å”&Uù¥Ãl¢n¨ü¬Ëzîùø»Ûð#G§õE‡•&¥Ê”åä‘Á"Y’ÛUYЗ•Œóúé2)† DÝ<Ì;ÐÃzTº )¦ Ó*2·<Ú¼¤|îõ3䤨1Sîœ)HÊV4Úu/Nå3¸ûö’•-Ö}´–ã•'¾|ÿ\çL5\Û¤o×ç-¿9Ÿt=µ m-Â@%€ˆË«œÔ´*K¸]v8ò¼4‰ëwßÿõÉÙN#î^A•·Ë¥¼¹Np±çk<ØY¢ õmÒ5)•·kx÷Þö?y˜¬Ì‰ªê ?ñÈ>3V|w¶ôMóÃ'£Ò¥Æâemž²Â¥Ô«´?9iVûäßR1‚Uëmó§§Æk”¾y|wýÇCÁâ®: CEEúÍ™W ÂY©õZs.xʬ¬Ÿ.å¯;s_ýú²ïÀÈÇß6Ô>²EŒ½t›¬Ïü…q{Þ,XQ0®ýíÓíó`Då¾—ø¢LxÚÒò¶ÓûˆÂ²Ï‹1}zý渼`{éÛ.ÝsëŸܽ»>5Õ—ÿüþ{xs2Ô!‹³ç×ç+U’‚2»üÀrzÓY€Èô ,÷¥.Ï{ÓñᤣšÒ«ƒOEr„Ø®&s1¤t„¥Øå»ít>/¨ÂU±ó› õÝ7çõé´jÒ$§í„ªxx»‚;›äH‘Šdn{±¸¼{{ÂØPI[{‹-` ffªR° “æÛ³<¡²té#“•Ú<Êp¯d\Ý £´ÿi*1K¢Š\ôè­’YYÄ|d]’•{lnŒ«E äíóçË(jHÖC$Õ#OÔý’ë©OŒ[Óf´]T3n[íI°ø=>ê-í)j…Ç¥NòÝ>f>7Ùÿ(}uJÓx½|Ì”f6÷!„jã¾O2rIï-Úëv-em ãà3÷ÒdRÄg‚îæÏj;ùºº3YÙeÊ–ÿÃï?/>v_0`^AUc‚ )¾¼ý&ðŠ]#·ÿ²7mn$ɶϹ×=™KuW÷[l´Ìöa~Àüÿ1™f4Ò{ÒSuuWe2Iˆp¿÷ÌwÌÌjS VfÅ ~ý.g¶ Y¼˜¢@Ѝ‡²\¶kV/æ¯ÜŠ Ì­TSîcAнäÆŒfò_ü‡lß6™quD½[¬ b²5Ùú;d´ÌÌØZqGë.Ï&ðAåñ‚Ò«ᔜm/!”ˆËù±òàLÖã;+2úvyÞj°˜)/ûÓÝÝÊ|¼ö~õZ¡/ÿüI+=•âŸàÇC>>]`F…Ê{’|=”ì}˜ãªå’àþt¦'ê]… l7âÞmí„FOrè¥Y\î ÔcY”AÖ¥ÂÜIàÇóV¼rIÃ`$'Cé0À—ã¹ ÙA!BV…&㜾ΚÌË]9œÏ[Ì ½paÝÂß¹=§a{²€ u‰]l‘¢aÈr<þùç‚Ãʯ{•4&Ååtð«—¥Ïôõ±!‡*͈jÌlDö´òÜòœ«›ÌéF¦/r¯¥E‡¯5v»÷²oáEëåùËeï™-•½^?¾óøÓÎ…í9ןÿôK=™Ý¡nŸ¯ÿY\ýwD¦¢5‚¥º¼4™ölf†8ŸûжÜÐ…!”¥ „Ò¨ÖÆ( Hp/¾ÒŒ '\¬È¼”²Ô¼5‹î.çðêÏVÚdTEo=rÏëãr "ÀzÍÔ;݇eë Ì{F¼ÐŽ^Š7†D*ˆrôV³G?+޾T§4RÁBõöÓí/úÃý7ü8 ×¼ÊI2¥¢©§ß˜Ô³æZö‘Š°Ì -èÐû€›q[Ñåîž²âweëǺ–ÏWÔ»¥ïýùóÃ5‰Ö{*{2»<•ûÓ¸#6}zzàÑÖþu]òáÓ¯Ï@…üødî¥VsW´XC¹!ê½G=ÔhOͼ÷Ó{cZÞTDæv“™R¦pÁêR½ŠÔÚ÷ô¬¥¬îE¬·tàwþ_+/¶–¸îNEo-¤ç,Ží×íÇRJưRÈŒ(òÈCÜÃfºÉi–D?¡¡E˜R½Ÿ¶Þ; N¨€ÒÝGýZ|¿<ÿºcûäßb]Ö·/§ÿÕM‘©ÞÓ-“`DD–Á±€úÀ™R=ÕãFKÀ’=ÌuçvÝTŽÅehÙ·VÞÔ÷Ÿö¡nŒŒÈˆô ¡?<ŒÓ'õËÎ;>-ÿð%¿„fÜÖªÞ˜-CÌöw—«|ž ›•±šÓF/îVX1dj#ªGà™UûÃs¯¹µý <Bo8€UZßaÔ(2—Á¨C}1Üú }$i^J(ò ¤s??/Ví³ûÒôîw×)aÞ¶Ï—çÇö.•½GïI£z~Èr úÂûÝÞúúþÞ¬Åòw>=ü~¿6®[1™=ÊjQ¨ TwÄÜ!ÕÐ·Ž¨@r]B1˜:#·ïƒdæ5Ó‘ÊCˆ™àe—äZSÆ¡Üzw±ûøô\{nç¶æt%NÔvBÀ5·» ß3S^ EÂ*‰ŒÑxV U™™­÷ÑYè[ KA²Te\ÖÌÍ<3».õç§^Ó™oŒÿ\”\£šeÑùñ£ÎP·^Z/­ûà«(]fHŒ®¯‹H[‡¬Zuô}‰kn—§'kö[,Ö­ҋѹ>Hv؆„|fˆÕÎe/ ºœ;µ¯åî›qÏt(çÝŽ!ã²Bè»9*ÛãGuôµ©·bÉ‚Ý-"a Q)iÃ8¬¹§[÷;o)RùAØ)›ð9™a£™Éﷳ˽ Qœ)·ŒVt–¼\—ÓÁÑúáÞ›÷n¥xKfÈK6¥È–‘@µí¦IéqÌò÷¹Zqfd=Æ´áˬüòk5<›$§ØÓ§ËF-¯cyt'½Fôëœh döÀËX¥eè•”0àÞÊÙRìäi‘—/mS] £¨'ëJTï“>sóAqžvó£¶©Õ1á’û»ìe¸NóoÈGÂtF´ú݈ßååÓ•e©V2¥×Ìr$ʰHÓ´[ƒüÑû´±ˆ®9!4·Ó‡­-ýy E7’C/–j–=·}9ÑÙr¡-.óoD_sX*âíh;5ÛûCàCÒ͉ṚJxC%¾µ[“¥X‹ë¶[*ƒÍÑüeaÛ€9eå¼4IJ̡”ÙÁäÚžrW]ŠÌi­®E˜œ²›ò©+9†H6Å–“®E¤çö‡°1ØN þ©vŽ«ÆXø{l†A@<]TÖÃRƈT™ƒm3(uÎÑ` ÷y‚°¡™6cäÐq$Èú;åõùsZ:4‚f¢ µJ{nK-ˆnÝk…€«‘Ì´ãpןÜ3'·/ä;fÆD#kq'Å2¤æÈÞ÷ s Àˆüz Mѯ{ õ’‘{ÉÛü#4$Gn/°yçÓ'X½,¼–ÑÎÏõÞ® (ÆÎ΄ÙÜpдþóŸò@æ"Ü” ™Éiþ†66ô ‡&y}u«º-œÄB)÷ý©.K`°Où¢4B&£v4+ ™Jh°=ÌŒrÚÿôéÙ+­jxŒû?m É Ðsž<[ ­ÈLÑà©0 Â20TÞ&eƲ½2ÆúMh¢–Ù•bo}¸rO~[¤²oÑ£Ù³#"ƒmXP)-G«oŠn­'´R€9à ×ê´Å‘À—Ê„ðT™™“ÒS‰¶µ  i!´²~<„¬÷D‹ !M#àï~‘,ôŒì{ñûÆîN ÉÝ1›Ì9 î Ýl£rY1_gÚåùÓENY鄹 n!ßW˜å.‡/õ0Ói0Ï$ä5SJ(B|jÔ{Ù“õ’óÛÔiD¦2iî’“foC%€ÁÁD l½$Ú5zöÍ–±JÄð¤Kaþ p™®@$Kº”»c&X `È12™üÃañ3_›¢1÷­kàEË?xbk’òfÇÍFa.sÿnÇÈž†ÎBå5;鿯u6OrŽÅT­cúxÙ·4]A1iîqyþ—Ù½º&udŽì[^Hb»úzw¼+¦7Èœ ¤zÌîÍœHjb¯p7­s¶°8gÆDFjÄHÚ ¯ 7ÉDeÀ¤Ç;%{ï{t.£p5IY‚ÈTvÜîÔíh&Ôº0iA²ßÝ5f„-¥‰t"¤äp5}aŠ Êù yŒÉ?%°æòÇ÷‰ž@ß;ðL½:ºÏÍj/oöõ#@ É R™=À ‰[a q(æ¨yì^`8ê9…|èí Ävùô—_žY™¨Š1R£\  é@ŽSqïë»w§e4@ÇøHC|Ò(A…BFN¢ÌˆÏV*ÝMÆ4ŠT­È4öÌÈœºŠÛ¨¼¨™à­ÝŸþãû“mkO¸?”þÈŒ”"z¨)‡öº³ }Ïã]A”åB~÷ïÛáð§ØÖŒ IA°Ì€ /Èík<×÷í—ÇeµëÒ{–Áãúp°+@ž_ÛŠìi/×·Zz.ôëUx •Žá¢·!7¡„[ÌH[F΄Fß'Š4+ìsß=üüóÓµ—µ% vÖì9[ƒƒÛÉ·(èX×Å šKI®õÁ(. ¾– ËQb+PS­èвýFš¥G¿AùqZ¢{@pƒRɪÜUЗ×:n· `ûüïNý©«?î×>û{Œã»CÁ ågó00vNÉ^¦VJ.‹tryIHôR0:(:ïñôø”&1ëƒz1ÈT‚®6ÕŠþ*&û»ÇmkC„É_ð‰š‹úfµ¿ÕLºÆ¿¤Äç_/Pnœ•RD…M&”rP9•T–a!Ç…fŒ2l©Üc Z‰”©ËUwœI€$tºµŽfgNfÚ‹ÀÙW’Pmd}‚×¾ïÏëµ£p{|ŽÕœ,ëÒ°.}À.’; Y±µ9\\%XÙß!fØQžßF™À¨(Ì3\õ°}úÜJ}â>Ejj¸3Ú>xÕ¶›cp ÿGC½eœcášf(‘ö›’†pÝØÉ96hDFì­å e•PŽ…#$·~=ŽV×ôÆGo¹•‡ãDL¶T>LÃ麬.ÌäKó{VÜZÝÜQÇôƒ¤º¾¤"÷¸+i‹úÓ/¨§²?ïÜ+(T ”`‘$èîÅëRO§ƒsöðzX®‡%of`’äo–ã.µâ¤{‰Ç§¨}Ò­1ÌWñþLjֻöÖ32Fóäo]²!”¡™ÃÜjnA²Ù!ùjǽԱ @Í3oÊ%¶½¯÷ïR@ÜÖZd†€’¡ê@nþñƒ—uGÎís*¡Pô>!’ÌLÊJ(’¥ÔÂL«ÈÀ´¢ ¢&ÿ > ×t_ƒ…Ò\JKàz5+}<¯wGi©Ï2…í×cóCUÎ#‚Xêa­µ–£z)† ´Z²=qarŽ5Æ›x]€%èª(kÿóŸ®ÕCpç)¥±4÷­+ö=öë-#Xõo]¸(`‡o>HÇwÀ¯\¯`ËÙ³ïÍ®OÁÄí~0*a°}³ÓŠnvZG¦™0Ÿ×yÏHŸJ™†rßy8,nÑ‚µ¿”Cjj› gWŒ|eйNÂ÷¦H¤˜”<2®‘çý\­*2Û¯u;­wÝÜìP×¥¸™Ò½2ÓWêîZʾ3;Gµ$uI"€2^ãáç_†L)•o^éãïß«£õýÚÛ¶Eï{óãj߆¶ÿÞêÝl§óv8 ûš™`¿A2¿®Üüÿx&3…½•»õþò.4D€èÛż̵µEmkŸ·w5H¤sŠªåª~Ù·Övõ®õtZ³‡XªÅu°©%» ›« }v”1›5¯ g9ºÄ#ÎÊݶÆk}¾d,ÖêP ŽíjïO«1iVÜíÞ‹Oùméµ®Êën÷ÆíZc;Äp(C“`ð™¥3Å¿þüìˆ~šÝ¿t§2¤ãÇÖµGÛ{ï‘=i¥îë’ÍP©y^½Vî’¦`õWÏÏç“0:K©•RܼßBå”5ÁyÛ•ýP`¸|©‹»Ò>$ ´iV"æþ¼í‰Öìþû¬¾,Œ>ýL†Þ‡} h0¬O2ˆ Ä,¿Þàó¾#`¢ž÷GÚ=õK„¹qÊýå‡çýéR–ºc[¿LPÑò‡ç ç?ýn;·Í¯“ÿé1k\ìÆ óúø—?×w-‡Õ ©t÷lê %Ï.Š>ðÓæ¨µ.ë½ •|‘L¿ýb~ú…{¹sôª PB«Rì‡ÉŽ~Æ%²µ®STnçwëuT]éãËeBË¢œè×çºryÿãÉ6¥¥,ÑÓl¶'@ôQ®Ç°r‡ue »l*S¿.\ M2ò°`ý;_ý7û‹jiýP{”gñüK~\™d¶^X@3Úþð~»¶vÝÿîÔ¸¦ò5Niwº,®:8/mßíß?[…¤¾¬–²‚¢¾ð—ºþï?vòyw/½‡Ûnè­õÅöN·ÙºÁ…ffjmdã0oY¨^êJ#Ìs>—3K]x°Í^é ûœ…]Š«÷.`F¯YJög°žÏïŠöóe¥jÑÖà‡½I ­["! âåËÃf%°ùïÿøû¥wʪïå^–ûF©”sÏc¢†~¦Þ¦äð÷þqó6ÝÅÍñA{|¹œgddºq9Ö¸¶‘ý/bÃ1sY;ÛÞ"î§­VÏ> iF™1­÷w×K]ìó_V–‚½z¡ŠÞýþy µ,§‡ ¥{nûõá‚so ¼âÜ!yËñùW’:p’|³ÿ8ß·ô˜BÈ·TJ™4–e¨óq Cˆhû6à%i§ÌAõ1X˹ãlŽ÷2XI<]Z€¦RÞݘóêË»ûÍJ1YåŠp!mðÂG(êDJD ä÷É oQºY]]™öQùÏ—@!è^ÈÃÝŠÖ4c½MGÄqõ$nïmƒºGk=Rìc>â€T‰èôºÊÜԯϧÕmX )•uñJ~ïõ{ì× yfÏyÎ=—öŒ=Ý©nÔ¼óçù¥ï#ay9Å^·âm üú9ð­E#)eV™LqÚ/Ûl8b +{“S=a¤3涃CµIòÅÚþpÝÔe] ô…m4­Ø”R@œäZÚé.ÀŒ–Ô $2ó«±С„È÷Çã¢Öâr¸û»øu»Tr±RxXO%™½rÎ’n2eãbéñp47ø.+óºdbÏ2ˆ5ADªîö/Ïm­¬‹—‘j.UÕ’V¿ÿ!ƒjM1¤=[:¥‘"ývT’ 1G¯êXsý榯Öh(ûã¶ÅÛª¿“Íß…l‘ú±{ZÒ=ÊK“Eqy|¯ŽîÜÓÆ˜&Ò°¬y9?÷¡;U´=[¥³RaËñànŠ4Ðô—ìÈ€¯ʦE‘p³¦ŒÌߨq_Æ~(•ÃÉ™ë—_>+¼w«nf—J—Æ@ Üâ·ëa°j@R½·á–8î¹$%Øþåyûˆ:èËʦ½ctX‰‚Êv~JØÐVßž¤»C9—*”.™pD»Ljq%èõî÷‘Ñ3sS="õíGŽÛ˜µˆH‡Øóð;åá`êtµóÝÔ6¡RsÝË~>–LeDÛZÆàÉ Ø y~~Þ£¡k.lÅ aTà>»Ã5¤ýú÷ÕNÇhÍÔ²ªCʨCÈn´ž&Òj˜¦{®ØoDÉÛZ~Uhî¸YçŽN¡nSCPʘ£ÑÜ©íÁoza@!lº;¾^MÄRˆˆf3×§óÆáÆ¥ÒûõCå8÷ß÷n2èŸ IDAT®°:'/W$õÃ9#úH¬#0Fª‰ï©¤]~8”ÌŒˆ€R~xOמ!³„CŠheÌÜ'®CVÐX¯¨ÇL³èû¶‡4ÜÄ"쟿<¦[Y®{Û—ƒ÷aî£ì˜”Ì \£µí¹ßÿa ³@IËTÅœd³Je’™¼-ÜoŸq·Õ{mq͘8ÇiÄlvL™îDtæŒH£™†ÁšR£ùkBwçöiárp£yáåÓ¥Ö%渌†íñi·ùEÁÕòÂ=ÒüúçÇš)DkÍ܇īDí[1#s’=~wÆ7`9Çý½÷Ý †õnW*IOw—è>Xç›)4Ék¿;dp¬K>E‹LÚc~8•Ëó•«¡G]…„ŒÃø6¬íSËRžþüpüéðîÝ¡¬öä^ ^SØ­ÍcƒT7˜ù(Fõö]£%ç¼à6ƉÙš¿³5•ê”a8– p*S +â¦6%EÞæL–ªÞ.ïµ4Ãöó?_?þá4±pËý|Q pÜË¥ìçåcDzx~ª†Ü{j÷Z]Ê4¤(M“PŠ d9¾ÞÌãÔ<ÿ˜Ã¾‡´‚ Ü}yÚÝ7TÛp Y«k„`í)ÇõbQpÙÝ›òRk-%°*À12» =†O—ë^4†) ^ºÑs,ðöŸP‚B)¦‘]kiki¬Û°n‚ùm¸ô¢XKg¢¨æžÎP‰nõ‰( «™[ïØûýúò_ŸÏ=?/w«:éäáüåq'±ê1 SkzçK±a«4ª«f«õ¶‹ïÝjéìˆæ–ª¶˜×ovÏC)3‡‰ç­[ñ›1òå1Ì—dfRÕ‡—Ë@î ˆ™¨˜y¤@Y) Ú Ô>aŽJÑÈó»Uçóõáùº+ìòåCÉ€1Ÿw/­ÕñÓD3OýËþ½ù]¾(6Èm“")ç¿`YåfÆ¢ÍüÝ×:'VÍ}¼Fô¥ B2&Ë  rLH,öYFÍ8òÚ†Ýê¤Ë'õUÌëµõ¢+Z-6>óL©5¯— nW«Å½#¹±—£ß–\)%µT椊U]ã34>î¼É^€Ž³|’b©4›íüÑR±2lži¥ö¼É-N±;@îôsÓöùùü¼v8týr¬~iÚ/çÞ ÑýÖÞ~Ë—ÏÇ÷§ë›¥bÄcú£É[4šÖwm»FýfÇù †grá¸d UÇNYµÂuLbÕ€R½Oò&l‹M»¹WÉB½ƒ–=eo!í ]ÊÝðˆÞ»U£|Vò‹µí¼[‘Ååj‹™ƒEmg³þíxÀpËĠ[nþÙKÀë3/Ë9ËDÅÀéÆ9øáC¤P¤Ýªpã˜;ÑëÖßBgÆ_ÈK51û¹ž?]{&Í­mõÇS?_ò°èÚË!D}$P:]þtXŽÛ¾d ˆ¬zŸ‰‰1£Ñºû  DA¢žî¾-R@äã?Û?—« ¥!²GŽýÈûO°²²D€%;ÞÿîÇ¿–¯×ë¢ùȾ2”I¨+°fs/Õ Ro°²ôy-R9œÓç¤y†f6Ò¼gŸGó ÐE˜¹9#z9¸nêj— ÕýÚdn0’4[¬o½Wïúº!¢9-,Vg5­Ûm§·k{»9õºvSZˆ³¿%ÐlôU‡§©ÁÈ0“×L8`…Ñoï†QðYY‚b¿úòNÛ5”0—.¿žŸ>ïXüú´Ü²!•©bt0Û©?ÿÇËÿô8$¯û÷œç.˜£½¶2–žpþþÞNß,܈ àtº™`¦ÌЧÜz±d£ "ÌœPx@Ê–™Ùö»{)¢Çl¡¸®YŽ%84 ”±_–c½¹ú<íéVˆÚ¶,ÎbfF/Þuï{û¯ãÞènèÈx¼l¹´ys¥©ßÆâóf­~&³}—ßpü ø’-KÊ«÷¼…ì102;®0Dö¾®VÌûž(J}f߃ޣ‡öBË@2úBC’¹„áù¿”ƒŒP€»qHÀŒLš(#—¯øPí—ÏoùqóÈ옌ÓEÙ c7c†òˆ©÷¶,ʾ]óõiH3 A‘GDëÛùú/壖Ύ¡†Äf¹Çi  ÒÄì×ÃZ§éNBuït3‘&…ûö*v÷Õç§ÖL–^¿Îo%—‚† ¨nûRPÉ!©/ì…2n~”`áÝ_®sRKÖJ¥Q½g=ÛzK!Ë5jžÇZ/¿òãG„Rˆ>\A õs[,·>A1Ù¬‚¾˜·°MHaôÅ–Ãr×Kô·ô$þøÆKð†2f¹ž®¿TÙ±´,›èfÅ‹{]Öý*•2d²TK3'¢·zÙ>ð§Ÿž³]cY½]û%J^qªCÐμ.…ª¬<þåê‡ÅYŠ==Æñd})^Ì G&Ý—CÇm«Ìš)dHÊ7~x/õÖ农- ½…R#—ÙT3–Œ2ô⃉2à‡æn°è9Ì>¨TïcŒ—fJ¿ÿpdJ’…îW¥uH’•v3èÚw:²§­%:êîÃÐñédçÃÿö¯¨h]ÈxÔq y¿Á­}x)0•\ïNË* BñMËkäÀãksàC|éÚ¾”cO”²”¥–ZJ17ƒp¹ôN³œq‡ÔU¯wý˶}9e"ìCÒBÙ3-[ו0öç# ·ËóV²,ë‘}ä¹féN›RËÓƒãðÏÛàÖþW¶­Ñý7»­ÿüÁçZCW>>o•ÐËŠ}°ÿ݈âëê€Á@ËÅlk]5Ƭ¦´Nj½.Cjv‹ºXïwWýÃßän÷ÁXo¯·}ßËì鿥³á¡#| ÏóÄ0ò5RÌ”lÍõÃzç(‹õº,Å‹çŒ kñíí°r†óë»ÿöóãÄ;çå„~Õb™‘¨u1/D &ƒ-ü°Æóã%G˜ðb뱯 Âæ‚—ÿæ…ã(ác‰ÛªÚ/QÌGñ=ÇwäëH–´-¤h”b$_– }Iö9qXÇbð1QªÊ„ ÁÎ)ªÃiRvsF»Öuq(´mÇâçûÿùûSŽ<0K¥›@¦æ^«;f‘óÍÂѼ¤,¬Á&™ ,°·¶§ºÔbnmhpÃé„ØÛ¸AD@2w_îîÎÿ¢ûÕ¬?>~¬yµMfõ°®µ0Ñ!7Iõ‹—ýù u8ó™-ïm‹w%˜Á_ÿJ7LÐ(N•R¤¿Î퀷5ûø9Í A´IÝIã­hÉ”éB9æ?•*Ya^Ûvíée¤ë´Un©\LiÆ…Öø»?àÜÖRŠž"[ËP=¸¡ô&•bN›Œ§ñM¾òÖ¹i’½ÌFdÆ»wXŒ^÷«2·R`÷ZÔ"ÄéP3+ÕÛiýóŸ¯'ƒ•Âìù°ZT*V«ËaaÂLÀzÈh;·MË)–º”8”óSC%©Y é´íÍF¨$gšÿ’YRSê†þºµÕú¶GJÿMüÝ—k_ÆÂ±pwÕì)eÒÀl[ô*Vb(ŸaLî!¨®8°.åÑ*¶§/猎®ýZ±=7f;ËŽócqõUe¼ÅU&`û½1η©#¨!ˆJÙ×QX ˹%¿]8ÌÃ'G6þzé#‚Š¯Ëæ9ÖíÖö²× 7G±£^ `/#ës|¼£ã:r_tõÓå/uo¬+2G›Wš!{먖²*|üx2«ÛOÿñzvZºÝóz¬ÇÅʲÈ3a¬>„ÙsÈmšp3*#-GöùîÎ{Âa)mkÎ {9\Á¡¼J€&‚VœPÜxn#ò…ÿ–/ßs°!äáù†™þ¦Tý0æÏ‰>}²Ävib$š´&ËöÏûÿMõfK^Œ.¦™.»y±«ú~éÕFYÊ޶ ¤„Yéì~|¾°u“X·õT¬V7‘Õ ”wy¶wõšG¶(ýŠå›y”у%òTÔƒzþòEI£dF Óê¡Ð€<ò•k¥9¶'¿ß2ž>,u5°˜h¸¡àðZB1n÷úhEÚE —bÇøRօʸöAkû®l»¥éž&|Å>}i0÷Âתý7ÞñõÁµ·UfÎ~/p‘ý—ëáÃ)¹&çe“‹È¬—ç7÷_ÍóŠþ~ÉÔæ,ïÞߊkÖɸ0¡m]=rcôï}†¿wjRé‰5¾üòù@ºÑÊКrsw7dv˜’€)YÍÑQþþY¢¯^—RN÷*… ÈÝ ˆÁµ™?•Ù_ÂE€×ê‹ÌkÕÀÒüb>Õ¨¾¾²/;äö×Å×çù› 4‚ñoä:z¹šˆÕ´KœyrÌW_ÓÕÞU—¸nÿï¿>°QÛg48:ž³>k'¼T„Cý&‡!€®Tòô^Qئó þ"ÁZ\}íø\ ¨‡ŠW{.1Pûóç‡d]]¬¡ º»33bôÈ,£'Ѻ¾ÐþŽŸŸßçún GÆR5’T¨›Û _¢ì=9MkÍ-£õ¡ðÜØï?ÞWÉ.øT€æ^óú©5¯ô¬¨¿Ýq¿ý=ÇïÉ·|£? OØ•R¤æ¯9Æø‰Ç«œ™½LÅ$™¥ÚõÒŠÇÈ*§^ðx/N¨ôí¨Ÿ‚è—–½%·ÓгÄCˆ¬‡cIöÖßÊ×KÒáý1¼ÕqÙQ¡k–L•¥ºe@YÆ‘£¿Îa&Á¦ÃÃClúáwv!êTÀÌ ÑUŒ–)™ÃÎàÆ‰í²§¹SM‘æ¾` ¨ <ÎöÅw;N/?ä› ûëõú¾ØÀ{ÿT}ãà••âqšhE´[ROa-B˲þã5‚·ô%»9e…öéj s¶ÖF)8 ‹qWÍmÆ ‚ŠÌ0ƭκ•‘—sñÒÌAôöš@ćUôîã’Þ¤¡¶8lÖwÍæPDˆä1 P&:Ú¹þñï‹g„´C@9þÞ‚nˆ}'é3­1 ’ú~½î¢»AâùóÅdýH{eÄÍ”Àí À-¹øŠà1žݯ›ý8*þߨqä|Ê¡ªwëÆŒiüïÞÿ¿[ûÎ′·½ªñøs÷Š`Á¼LóKØí[Ý’kHB¦ÊZ‚ ÃM·:3‘!/¾“ÈþôðM¨í R]óCv@ëî.?}zRÀáT ë2:y)Sº324ÔT÷ÓûË»úC9þðôp…ÙнÍ÷Ü›e`»î‹×ÂÈ(™H'#£µçHf´öüåÓÞÝÍ8otÏùmp{ÝpäÌñ–·?#©¾Õ’"ñ¢ð›[n<,`ÅlZRo_µÓÌ­¸¬dpÆ;Ð]€pý¼Ó…/n,|¹i$ íƒQùŒ#:/÷¶÷ÒDžЭj—ë^Ür;ïÛã—òíGFFÒ£ß6ö3 åP£MíÓ½y­‡CÎ…óŒ‰66<…ôwwëùËöÓ/aª ×ZØ,…qQfì×ë^ÖÅzëez}ßVÄ¡¾—Çÿúkû·wóDO3Ï©´õ×BßH]n‰ý›UÐ÷¯à×ëþÝÒaÌfãšÒ(;7K·ˆ–yŽŸìx`*êÛvyn_d [Ð_2°y¬ÍnºåËA;Ö(÷–aÎ¥›ßÁ´·õ–ëó/—¸žßªçQ–í°Ö¶ûR6ªwy9\[=ùñî¿üÚ—Õö/õÀÈXÊ~½ªf³§àÕ¬8ï?,X–_»½V‡|Àk×sgåõ,kÙÜlq”çØ³w¯Ú¸”‘ëE°ç³73¥PH3kýÖAÚð=ÑË’\æ‘´l,iÊcd‡$ÉÌ¿& f¸5qDªgSôNçPSðÊÃó1ÂJ1 ¶ÿpÎß[bî[ίïþÏ×d-Hxr4†r,«¡¡,žqÓø2Z¤`ɸ %ukoÖ%¿èºúe/¼^¿KNއ%‘[+£‹¡ÈÑÑÎò¡ûv`YŠ®{EöÔ ýx55DXYðð´VJ’ºFcém³r€F7-[¦²÷.EˆÙj †Ä^â‚?üÃ} 9¢Ñª”‰Ôk¾.â{i§›“Î<¥¡7B(Óô·ZžovÛ¬+1zËJéÿçë]–$I’$1fU3wȬWWwïvcv–@´KÂ7|~à a€™êzeUf<ÜÍTEU‹È̪?tVGdF˜™šŠŠ°°0cÄše$LG&»þùß|YûÖzôf»·_7+>N¶Bs#™°9%tÄ´ÁøŸW(c°ù5tÄúx"÷öü°7S¿>}"í+IÛƒ9œò”™”2Zvs”rºÜ=l²R—ÖÛÒ«b’]ˆé O˜ºüt¶žÕïlyÁKq ×`rÙ6¬•êÒT숌ֺ3¥ŒfA­h;ÿåÏËmØã¬Î*ãØ^G˜˜ÿkGÆÉÙ9Vn¤+ãitô¯ŽfhÅè’FóôÔà79„ÈdÌŸ#Ëõññöç;óÛ5 ei…ßÿ¸¯…TjˆÀiÂ\T"§PôL/2dtFŒm”RÃQ1Ñž~½Y)êñËkÂOñPOwëp R§ .$Ï~i?ÁÁRs‹Î”bJÂÀFXו­7÷úör‹ÀÔSI®O ¥ ŠRÈ ›ÞË£’ dkAˆm÷¯ÿxéµ”¡ý§LÅ•i‰ƒb9Œó>«È¤£wœÃ9 ›ÛL‡ÚÅ¿¼t:QeNPu0Q$††Ôg—p;ˆbYìú¾¾»D‚, ÊÓ÷ÌfWယFŽœ™Sj‚9c¼$92,sHhKÇ‘MÁœeß‹{ô†õ7’PqÛý¶Wœ`uð¹A‚e7?-™ÝÔ­Úû>;ç){üŠädsOÈÏþÔ[Âlú¦keDQ¯cèjì›CGk¶µ}yÊoþí—ÖÏ¥šzÌèG+I Xé%9Žö#¦h(@ò0°Ð<æ5…eéô²gsX‚IbÌP"MbÎ>sØÛz6lOèËb™¬}‰Ì3F3÷B/n64g#ÒÜ¡¤Û‘_Šƒ¥ cé•;ÂÃè."nMþ ç ;Ìp{ÎRNsçpƒÍ˜ÐW=¬»qÉœB§QœñklˆVDY˜Î½„8Ôóð|*}è,ÐÉ> £‘Êh͈h×rÿåbսظ1”_bt®_!ÇÞ`Œ…¡K‰¹`X1ŸÍÐO¦ð//œôhçOšl¨$,˜<˜‚Û­éž ¦²Ý9©ˆ0¦,™N[j‘öi¨$ùUDì£×Â4,»Ü¦cVÒ|¯Å’ÆEñºÒípÏ@— WbÍÀì̵:R f°9Ș"ÍîK‰ÜÖSÿp.› Ìñ>NZèk¯ZÀ[xNr¾Ôm/õëKÀ¼ÕeÃáµ'0ç0÷(†±«– =Q€@?­¼5?wh­.áúËí‹v»ä°Ô9 AÍŒÕÕÐÃÚ܉s‡JE d/udÁATû0ž3 IDAT™Ûmçë<™©$¾úï–;uYq}}Y²*7³šf!Ï)Hfn´á,z)2×™(3s÷RàîF)W½¿]–½¯‹’È;Iîj{À—‘Æõþ¢›Šbð«47wx)ÕÇH?hfŠÉ6Ï[›…a¦r ó§ò8Ý4(¢9Kšñ òYŸÞiqõ=ѧšïmQ/¸uD„2{/é…Ý,æÚž¯nýÿùΪ-”»sd¢ÙX$3F"oÏMêÕú­É’·2ÀÐìùRé¹'Âpãþp+«¶ã U~òAÏžÖ%©%Ô33CGÁ3ÞSÓP¼ëÕ¾´‘QáH”R9¹µµE្qücB\†ùåt.ê]@¦hªãrš§µÜ3s쯑,¿òˆ/bô¿^4™”{0 ¦ð³fÑþѼTxó7í€UÞö–)Åð}SDjh’ð|.ÄÍ ’Öq¾è‹om¥²søQ:G#ƒƒÍ*cTFÅ8ä'pwĉy‘‰1møÑÂFCs÷†rv&Ò²eޤ­ Ó©—œ2QœŽzT¿=Ýʦ6J:S½EèJ-ÐH©"›U"éK²+…õrö†}[¡î>ØPIEŒ1Œù»ÓE<®Ñfv™Ã9`|g¾GÊ1ƒxp(‡ìùËŽ{…¦HÒ¤«çüqX‚fVŠÛyá–¡5*¡ÝûÞ×·ÿæòÝ/=vŸ×ÜéX %cœiêÝèiŽpÍ…Ë£Bõ©ÏÆœÉj2?Ÿ£u‘ÎZ|¶¼§lÃ,h†í[oÅÌFV>ÃÌ«G˜™ ¾8AÆùàÃrBßÿ¹ýÚ2d@‹É$ÉNô*5¥`§ÅÜÞr-Fj¼(ú¾Ž „?õ2¾HÐÄáž=n$Çû "‚CS%öeǽì×—? ¸ö@‹–­c4Ì`ÕÌK-ÅjA¶HfÛg†”©lØN¼üôÓûf¦„þêKs`\J8df¤»@Cš‡† ôK'w¶~,'¡µÅçþq€eb-2§¸ ÑrŸ?¡Gë‘ðƒº`“ñ’ad`/Ú<3ŠÿyýðáÚ~ÎÛ-{Î/9C/ÂlXѪ fí÷Ӧôð{ëÑö=r ksq þçñ ½`¦O´a/( ç0‰@Óçwÿ3‹@ Mľ·Pï=àÆݬ˜™—RÌ p“¨¾†aéòêÌ÷÷oJò‹6•µ1JûäqQ"á¤"n´((ûœ1zm`M€L@‡]NÛÞ?•ËH¥õôµŽUiWƒE"{oi6É©£_EhPÆ© ùW—ETR "Ëó/?ÿòpë µÊ`J¤¶6J#´Âœ!ÝÒ4Ãþè'*!—Hר{Ð'CA9Î3Xjú£Í';TÇä 6÷ͨë›Y¯;îX8ŸôªØ·Z›ÄVŒN~ ¨;iÑš'mµŽb Ü’ÁuJâÊA+D)`Ž6ºP³³øxSò™î¿²Íeˆh¬uñúñð¾Ãlª”1 ƒû?DˆË`>«ÌßMŽãÃŽ~Ò|£dD²®o*säøÈý–ú§çǼ.k¤‰Þo{αWŽ$Ü“fQN–Dþzº7€n™HE´ÜÌú¬½-)€öRÄáeåh6& ‡`ÕŽ`£%zrˀߙQIê­ïJ9zŸK?¶K SfBPº™’%zÌš*îˆ÷}gœÌ1Qcf‚ÒÁkô-‘Éâ>|…c(Dã0æœè(¤—Ϻ™À0 2d›‰%‡EÌEtAéƒ6qœqs Pêf”î ¢aHIÅ~»µ§ë- #–$z³ÊÚÞgzC,Å:`®aMÉô;ˆ§Ì¥¢÷ùäuPÃŽa¾¼<ã3v ¹fÌÉŸ^æß1XÇŽ;Á±óö”²ïÝR^ãyã0ψt37ÎH6 &‰¤3ö Ý n­x¯¥°o{Î,wZMøChH(M>)&Ârp`/ЗX ©W7_yßþµ¦—!”à”9»ææ&ç@írô4 ³o[â¼=-ìç~ÿO_mç/¾»œ í¸mO×o˜™$kqƒÚÕÁ¼m9Ž:Y1‰HZé{ØR}­H÷xfžî )µçgŒ‚ÕœœÄ41œ!e|:ݼ&µ•¡~ãÔ I”éü3³ÐÃâ­mdÆöÜ^&…j¥¥›ÙâHõ\k-oO4S$™=2ºà—7'ô42#á Ê  èÂP?—Õ$átU¦¤ÌìV|Œ G¤ŒÙ{–µ~>JLT+fÊm˜(a°|yõÇC¦Lb>’t/õù¶qÍÿóãûÿéë«¿¹œâúôáÃH5|1»÷ÛÖºVYv‡zÀºñ whRS»WRš¯×ýýåk×ù½2¤ÜçóÅ»`C#ÇQ~ìœ!¸ð²@:¸Gü›àøéWÕ<†(h‹Y júÛUÖyÅ*2"Zô^¬Dno¨ÖiÙ‡i6nÙÖû|/|N’ûp×FŽÐÍ”¬spÔk3Ox9ÑÁÌŒþ™¹mFº¦I`¤ä°6@B&`nüØ!eÔ¤¥Âðÿý¿œû¯·Ë÷Ûû?=¾«?>ííùŠJšƒÔzÞS9÷4³Ön`fÊòæ… Ð6¸/uéöpy»ÝÞZfu6ÈÜ8ô:èöq¢hTŽyeLàâÀ/ç‰ÿ[ËOÆuX¬Xë={WôcL ^¼´£Î"j-{ëµïº?y¦©s2EÀOÖziHe&cHq š²²ä6B(ƒD«âc¢Oᇤ¡³¾"'N=C ™iê!a˜30`>3ç=HK«¢õG³‡ÿí¹ò,ßýÝ7¶Ø®)­CÎPÚÏ%}˜V¥"³Úà$&1ú 3DÑ5:'Ùº%–ºîÞ½ÿõÛ?A€eL|rÂózFOy$M¯«8 M¼‚sÄàÅÝJÇŠŒŸù²ggt¹—%A£¹ûNñ@ u‹q}~<ÿámÄ’d(QÀdJU bŸ'~3vS/$a6úŒÑë`™À>0G–Ù?JNæÈC5¦¸e–»UJH fE×O¶œ°ç~»í‡Þx®Ðã‚ÿô‡?_ânÍ[ïÑ‚înn޾Ýöè™ÚÍ’n%•é/AÝô"…ö}éO?üô>¿b?èqä׳»üÑþI`èaEÔ\¢cY0Gä4oþÓù8"¥€—ö²“gÔª„ Ú伨PÇÚ#Úžß×KU¤- Ê`Eº [Ö‰Œp.Ñg Mz3Èd¦Á¦ñ™2&WâµÈ„'"œDFg¥qß´–q:pôŒ^™¤ŒÜƒ·ìÛÖûæ56Ä×íöŸÿ¯8}ùÇ7ÌJ˜ì‹—¼=>ïš}&ŸTƒ~+ˆáû«#û³Ñ|Û÷ˆ g?õ~µx\i2çËQ5u;θ×-s@Y|Y±ÏŠ5½þ'_ææŽÏ ¶ª6¬L&ÜK s„H˜DQ¢XŠ2\µ>ýrþ¾ A}ž®‰1;ªÉ ì¦!ÉšìUžO\U™™Å†-‡2bË()e{=ã°xþåùMq*R+ߘR°A#¤ˆãÆ}Û•˜oò³][¼´kùùËÅï+ÅÌÜ òüøpË! £YÈ×h(=À2ñ¦9Jññº‘=‰“µ'.ÛN/˜[d¨¼VÚ£}ñò ¿~mr^ÛªÓö>Ýp™¤8„ôBG1<²%k ¦a$f‘ôʦûÌ2#¿¤ô°C3ú(€^ß úàÆ;—Ô˜„2 ãM=úöcσ®üdèƒxøÑsYël{¶Ûóip ÒÅG~0?•©ì»ê`-!KFìy‡÷±Ä»Óõ¹_.§»ÕJ5:ãöøÜiòa¨‚kÚr·ž™‡ õx|“h·]ÛZ=˜©v=ׇëi@zõÛÆö(&àõúè?GDøÑC«ìóϧ‰æ ¶#ùhsó%Pfa®L*Î?ŸŠž–Ù‡ÇyÈç˜Þ 1È(æÔÏS8€…q‚ÓF)~È-L]G}ìÎl øéùé¹Ó=Oõû‡Åß,$‘½KfhÏOQ¬w35P‘’'û•¥ý§H™¡f÷½ü)K=¿9·[*”ݪëúëCýtˈíùïײ$O‹ü|·ôÖÿ³/%{ô»ÊL£:ÍÊBK¸r—lʨe*sHQØÜB¿áÿLÝÞ˜+½{÷ðþ믿ŠmEÈQb¸¶Áj¥Ì®ÄO<WŽÃééÓ î壣m3IGUÀ!‘}DKþöß‹ Ï¥îÜ.%í0(f”0<5 ëúKžx[Îëõ9#‹¹ ‹5mÂÌM´«y)Õ¹Ï˯…Ãs`¢Ôèui   hÁå7¦HÙžû²_7kŒ6½ŽDí¡ž\¢± 3£ºŠy»}Øcd¶p}º·»óÉ–=(ßp*O×ÇëÙº²‡-K•lV°?üã¶u¿{{6DÀé†L¸©.+%Ä3áÝNeÆÅÈœVŸÔ³xa1¼@aã>_Ûn4¬a>ÿÌW{½µ„§2Cie§t3d2½.··eÉçXûRâÆFvóRï¬EkSGHÙzZ èsB®Ž7#FD¥Lr™q\ð@Ì>oëИÝ=_-ƒ‘&€Zö‡§¶~q¿µ<ùÀñÇígCߟ~ÙÆÑ%ƒx}xc•i=-ã²^ßÅ[﹬¢9mYs¿²¹êšïyX–µ}ýã_²% ‰ÕTÇ<Ý©õÖ®N=•R 'Sï÷6ÜLç^&ý0ÓÌn/ª2íõ/}ºlØYª']BZ½P‡ýºI&ЗŽ!yoiÖžÊò§Å»ÚìÚ¬—Õ¬Fš)2eö¦®‹+§˜ÁK¨Î XZ¯o¥vÌßËMA •ß…`VŠ!²m<-{뚬D§_¶5Ú9:V28vjßsÛž›q¤R‰~w15gög¬û»ç?|ùvųÂ)eÜn»¿õ¾—zâÿüÎ})ýCXÔuŵ±6¼,%] <²«© §%_“ÿÂç¥Õ÷›o€Sp€î³ÃðÙº¹Ž×ê]òQ!eáT´¦Â˜S‹˜f´„Õ¸ýz>Ÿš•ŽºÖe)”X—Mc¼–/‡ä§9^4dÈL8HÚé´–ˆ€/~ €fþé7É­ˆ.¦™{k9è"¸í|Þ~úkñn‹uBFRˆ=·¶ß4ð(Ue_¬¾ú‰ß¿?}i÷÷w÷?üò\1œ¡ñ|9a»½9=ÿôÃíìA_ì—Ç¿à\ŠÒ›•RJ ‡¹±˜ïɨO7ÝtÚ ›ø“¯}‹—¾ÓÈ:f)}¼¿Jù›CÒç·ÝQköДã´böž&3e¹ÎwÅ)•UOßÿñ® eçúfq×¶$—sÛÙhn˺œˆ9ÀÔ!Ù…1 xWzëKO´x½?qH|î7*¥j©å>…wpݰp¿íþ§/²•:”匸>mŠØ®0Ë9lÈ2„ûEÔ<¿ÿ¿ë}߬ܗ»Ó½‡f„ißVÓwµüó?]«™²žŠn?÷p+½»¨bP„q†`=„ C6Dú tüäíœ ÷QGyÐÉ?*äùÛqj¥”Ÿ¼7( –)dÂæž›5"“è¬Ù½–U~ÁÝá`éõ´E¦—ZëZÈ1Nm> ޽^(µÌD‡"÷GkdÆÏµ¼8ª}H²êÙ2G¨”Ð#Ý]ùÓ×KÛÓqDݧ§Š}›’3ðHô­·Š$?üïþ¯¢ôÝïïÏ÷?Þž{Ï}wÓõ±rûîËø§ü”IÄm]–_S—jjVC²ÑŒ4ØRÒ–Å^¶Îlª”±¿ÝrY&©‰ŸwÆÁPmÿªnl8íI.5š+Ú¶è!sC^2ö­LÂYÔè\Kðaùò¤rá‰{¬KUÒÜ”²ºTIÜ€¤‘Èdf\`u)tï{gš">’¨ö+„EÁ³þÙ—õTaõ\O[«ù ÍM½usDÚòwo+M‘¥¢{yøç÷›ª?þ²À "úÙN†)U˜þúðåŸÎÕDF,_}•O{\?´•VŠg뙽·À(ËIž¾AúHöPP•Z@YÃèÍö¶÷Û¼>/_¾](²‡_ªnÏ?ýjÉTïáÇÓs3ÏçG\N4¹=û] Ç»/jU‡Ùù/wßÿÓÃ^y‹­„ž{/n‡Gt9×}w»;?¯¸¾ÛNo‡0Ö Ó¼ð½GHV #ößýÊøèÖ~³ç~;”¡æ ÿ–jõÖ°Ax;üÁKÆžóÈ1ç1ŸŠI,B»z¿'M eÅOçp8¼œŽŸdEA ÒJ–¡´÷2Á:›½œ?0N‰OCeY`ÅI™ƒUö£2z‹ÄcÖÛóé«3•´hùüî—wOç´è[›Ç €âôþðkñµÒÈçõô¦Ä‡~bÉôZ¿z{nO!#n޼îe±]eÚ²ÕûhÏqª¹ýòãþÍ}R–¦9v2¥×Ñ¿ún`šfŸ¯Û+D28§}Îýÿhùš[NF!ftdLÈ ÙR€yË>DKˆu\ç¦2éÃè âz¿õô¡À:"´bBN£/Å)¢…ö˜ùødá0Žˆïi𱓯"Á}ÇAR©Èo¾þ"-x=÷?üøØ=ÄØ·ÌLÉþô´®§²”ÁÎs;µ ¶8¢}ñÎÿðcO[ÈÈØ{u¡¤“lÙÄÊÞŸ/¿üüØ*s8©ÀfSÄÌŒHzéG¯ã÷vœ¤è^5©\¯w©c?iÔ/6H69¸ G! >Ø$ ««µH°Ul=möí_ôž(Å•jé>`[loKÈŠ@+ˆ¡4bL\GY@ýØçÂM„çepìÓ…04DÍ–=1‡VAš9…1¹š+ᥙ—7¸‹ƒ+ÿñ‡{1eã¶M°š ,ú¢½»6/è·jÅ [Ï={gvQ»Ê·åí/ï¶P¨—1§ã$ ¾_¬ºõÇÇ¿]nøªòóh@»Ú\¿…º>Z:cŽ*üã7N(NºQæºAìzÇ4åë6~»!s’þà[A½íÝEÒ LÂä4‹h=I'‡gù€Ft}÷°œMvûòË¢43˜b”Ï4 Z¤P2!ÒJF$4ÚFº3QJqð£äd\Ÿ»÷L2í@£—ûûE* Zÿù§Ë®pµÛžBœûnÌÍBq2J]ZË[ƒTµoÊúçµ>>?uõÊ`-A%ûÕOwöôÓï·\–N˜‘Ú ãñéÇý_r31_Eó^Wî¥4ú¢î ß_i‚0³‚ÞhŒk-ÖE·¼¶ n!ãùׯN_V}÷Ýû^2ëÅ–tVöãÁh2ûÖ`ÿÚ07'qo<о1:“£2U‘†ï ¤A«;ãe*zD¾è%Œnj¿>]±,;‘™Ô—&Ñ›ÜC‰"%ÈÀÜ¢ûjoÛFÏm*ì„d6­ b„Øì9OÁÁq¹âCÌàeá‚JÐmíá§qjÁšæÕJœN•®L ¼ÿ¾í0¤J^÷2D”I²<â|‹Óµ©¸€…»¯–áϾØÖ’V…²ßøÓ›?Ô÷]î ¢¡¶Ú²äæ¿dýå§Ç(ù´–ǧsAXÅ^¼ ŒpÅâe *#ãl>*Ôc‹å†e9õt|<ý6O;!Ëì86ÅôR¾ì@†ìEÀÖr°…úh{3M5®Í«Ç’ [š»aA36_Û`×™¨š×«N¦ë9yw¦±'êÔŸ#ö]žË°€QB°¢LúJt뎶ÛýÝÝä»|¬ºÀqÒÍDÀ†—Ìèê‘e)¯ÚWoÿÒ~ˆÊh‘]B^ ”›¡¢øÝÛoÞ`€£9x¸X¸˜íËh€êöüÓ»g,SC[†, ¸¶¼óÖöí´2vxéÑëi4yPÝ1»ƒáúÛ“ÎŽÊßèÐðuììcâÂËÇ Ó—t0ºÔ{›A ƒychÛuGñÂI¥ÍMü1†"’õä”÷ž$p©X¿Z³“¦ÌÛ ÷J"­`4}$‚P)#ÎÑy>ß­+âG óÁ¦ÎQº§èHHîC˜eñxŒ£ŒË·m{ožŽ´:ò[ª.ÕËùíÝ}FK3q?†Q"@ì[´þ´ â™p'WkM÷oúvjÏý©³<°Ö¥$$äRB™ÃLF“Æô;è¾Ã¸øç$^:rzé‰úIeÄ+Ò"sËóå^î¿ÜR^}( ¡uÈ@q˜ìâS"߀¾wdao¿<µfÂj¼0Œº ù ð„ù´>SЍwoÎEHêc^%º"K-&†’A)N–¢eЖ/¾ÍM¥çÀ6)¯oïÌO%á^Òêœ&ä”i‰T‡i{¾Æbë}ßÛ }je]¢|±GZõ¨§Ì¢žl9Yfa'}!¡Ðœÿ=g ë‹_úo–nÖ¿ùv›/ð4ă9Ýh–€©¶.Ú>¼ûuÑ8ü'õJ¢M !î>y»’ mÏ‘ûº ®]½¥ør}Ã8SwDpª{M~ð™ëÝ›Ká®LùGÆ9úTC Ñ’´WÝ!™[îXì c‹ÌÓŸôýV¬0ó’‘ÒùrJ2¶uY–áyˆ/PÁ¢ý¶ÁY/[¶2ÁßbV – "ÌÌÝ–ÿðoÿé/=Êì!ᨬ:»§2|Å-ýl fÿ"²24ì· ž ‡äD,e“9ê·÷ÏišS£ãI©ºeF¥ƒÅ-nÁù#,Z'¡¬¸Ö¯TJim¿g³i }w’b5õ½ÆÖ­¸ÅÛ¯ß.GE’ùÙ`£yI/ņ2ÒæËs‹nÅgÔ&[œ¾ø°u‡±¬6k{'ªG‰a+¬¦f3hÙZ¯mß7ø1G("z5‡·R—¨ùËÿï¶u‰f3$B98Ü-ÄÚ¤þfPJÇüÖoôåkÒ§Ù& ]&ùø.3L¤²i°JJúå}·³k(=Œ.˜CR2 FLäàh P2[—&wÿÐä_œîî×Õ£×m1èmÄQ¦¬,»;ÚÆRx¾|õV[ ÖÏÚ:T©µ?dgÈð¦É†l1³^ ×Z¿ÑÂSIÄáF¸-Õ‹« ”k,\wS$ ‹mÛÑÛÞŠ°¸e/øÚp>•Zß,XžË~x¾A; ¬ƒ§ °e´‰OTmLLüvCÍz(3ò÷Ö‘˜|†1G—àBÌÞ¤ö¿ìî6 §qd»¶Óš6(uЋ± e5ëA·¤É°Eß®÷o/§E¯¡òÝž¯"­”%zïA ¾ïrtX/Ex)²Ãe ‚6+F´ÖÂÔÖ?Z¿ŽÎr†³3Ju˜Uä®Ry8­ ÌÞ‡Ÿ]ß÷¦Öz¾À8Å©p¯­÷Õ½.Áeݾ»øÙóÖptÖ’Nu&sžÎ='öóuóŒ¿I…‘Ë •T|æ19lN6 0cšJ]j_û¶í Ý®O½,lCÆ SrÜDg—@ÊJ‹ó8[BæLЪlí}{|üÉOoÎå‹—ë¥Ù˜Íþêf¬ñÔ†`Àc=a5³ÎU?¾n-—ÿ~—/Õ)lSk¡b¨.ËÕQ<_ºY)fãÝž=#­îpŸ šêÝ_.K­KA·žæ$±ï´ÞºÑ®çïÞgÛ÷½§ã|fúÒ¬ØiKõ²œ;õÕýßÞ¥4f—ÍF˜éù×뾜.wÏÞSiy¸ÛŒÏZ<~„U‡÷ŸŠ÷ )äcÊ,B±8iDDÀ–uuµ??î¥*93LÖ Kd5šSµ°Þ—&ÁŠ£o¤³šÑ®×Ä¢½õž½=oZV‹ðZÜ‚HP§å¢Óe¾5sÁjß{„-D¢V쟜q‘)CìNú=¼‡ðƨEæ;ÓO°X9ý:À‰ÎŽ,^ºTMã9¤ÂDÂÆ,l3Þ¶È裬@ô²É²írFssAð¥i`uA@iµ\š½‡ÕZ«—\ƒðQvüøôê" IDATAù÷vã±óˆ)JõQ…>×m”/…½•s<xˆðÕ{¾|] %•òq wÈÊBwrfô/¬ ìÑ"¼Õ (¹,¾£Õ¢Þ#%;-„yi]Fª][»­fFé9±Ù¡* ÷²¢ £Á$™ ŠÓ kFÈJM_×2òƒÅi¯o×G+÷»«&KK ÚËß™Ó8Ô8ÃfõH,§“gËq\äg!TH"9ºžÃµº²2ÎzæšC{Å­˜™'xe’殡ŽÐ­øê{°o-.6ë}»/+!{uú˜±ºH‘®¹ÂÞúBs/æš~îþŠ8(3â|u¹It¢gï˲ô!P½cr祋=š7Ÿ–yÂH»},ðJ›å´u¤U£"ù¡!ºüù‹·mo¥z޾1k º†¹¯¤ z¡9"$ÏÁhq@ŠÈm6»g0k#”V6š¹'ˆâ¥ÃÝ:Ýßÿ²ÏCSÅÝ­¨’Ë«^åxñÌ’DFC)5nÏ[_Öe­e¼—‡%)B ²µb£\Åbëô/Î+#8p>‰f©Y e‚jDçóf_4FxÖ\¢|1óu±P7)Û6¡2½ÎBuEgqdˤûÈ_ÿŽØð;ðÈ 9ôéÇŽžÚbl­½jŠî_~}wýðØÀÔ°5Æ]Û›’ÜÍ|±Iö®SßǤŒÞçDŸYbxo ýVª“^ltVÃl-vƒmׇvô# °rÅ—Ó—ŸéU*kϺ-ØŸö1Ò´žê]z5ÑsL1¼Ì ”d¨®oŠe ³Neä˜ÛƒÎô!Žæ)˜)ÙT ìáCùʼh_Š©G½ïLP1tü%í Õƒ¶r€`ÆB²!Iä\×°pNü¶’Ó\Ð#U=z5˜Õ2FŽ·fõe0Ò‰ +oïîž·çÛ‰¤‘\ê²í™–œ*()±3LbÂÊ"z„,mìøÔÅbÙ²2e…Âkñ ß®)º@Ê ‘`ÔHYYï>¨éû6_ î}»nt%-ƒ(uŽ ¯ájZÖXq±óÉÔS Ø@ì­ušu0Ͳ›°”’PZd+…`Ï„lY‹†ê±ñÛ {¹íO$²G¨XIµ,š 0ºØzq’£Ÿ\›ÏVO˜2S£VùèŒg%‘TÛ[-1ÿ5»Bê½”»zw{x8ÈQª§õùªäpú šW'zw ДÙ3#¤‚£Mº÷ë%5j%ÊÐ<ß¿O/–£ÍžtÔ»u©Ÿ’…²·ýCo=if¿>«TK˜×e)„"Z–:HÉL ´R#^•V×ó2]€)}Ëa¤F™C{Fãó5|ØD‹½«cÍ1mÏõB–^KïþǺ÷.öÛv%û§ ®wO›ã<’ѧuÏ€ú&=kÆÊßI)%@¡©ƒ˜FR/Üx¨™ ë³[ζÊ”(~zûæéç û÷å´d -’bGfnŒ®Rš@fÏž¢™r¨¢8DÞM½k¹¿›Á ƒ"½4 ¯ï~±âãå” ”j…ëÝÉìu>Ž.Àžz§§çV/ýLJjªU{.±{±uuIËÈ\r óÂlé&­w'“fýcâb–ûbŠèûö&T~úéYÑ#a)¸[v»v¿îøò­›;äŒm}{.×0j1CϾËk]—Ó-­yaÊ‹­žõÎ[O™ZRŒ½)¯¦NÔ4<^“eäÉÑ'!©»ð˜µç½ÔÉç§iï`Ê]f¾Ü±¤ñìwçÔzò‡D“-—“e’Ùå=¯ •îTÈ|L ³ØZvÏó)ɽC-ëÉOÏa?üÃíâd)ëroN½¾½ûêmÁéíÇgEú\Ú?þÐTNÅÝa÷u=ËMÅÌÇ„‹æIÒ I`)¡L]­¸™ù=”ÄP<úù[óǷ߽õÄ}ÃÚ…OXØÐ²¿]Ã$7…»©°H-GÐý8L0sc-™àr¹e ÅÊÐé'On AólÇÜã@N&öhDf=å‡Ûy@œ"íCeEÄ Š÷7x]Ηäõ©-§Ù3„•Â9?ªì2³ˆvÛ¨iNŒ.­ƒCÕÙÖÕ¨-h%FõL:ùðÓSD9(7ªèåM½ÔÕ²ø' ³‰¤§•øõ]]¦Þö7 ¤/]˜ûxQå˜cK¥®Æ³ë¹íÕkñRÊŠdØP$Ü»ñ–wÿî_÷“ê¿»ýq{º…/%XÎoÞ\ª¾{¸¬[Ëm­»™–Dï¡B°Ò÷=/ÃYŠ¥Á…¢ƒVì̬*&wöWhh–c¤Gæ‘C\N>ßÃ$(Ù`¤ÓSv2 ”½‹™0ÕaV¶‡^YÏM[C=Yy~h¤ º,SR_ 墷e‹$ϱ@r]êR±“%AE"ÊY¿þÜ—iäš7ÿCáâaëå£~ÜDn?ÿøõÿø?\Ÿžo{ê;ßãÞz"‡ì+‡Á XÒ`\Ñ3eåK+fVÂYÈ&™|'xwÿ×?Ù¿µ‡ò—?ýò=ý^Êøûå|YMŠoîrkvú7ÿ¶mfWŠè ׈€qHï k- YO¸Xü«ës3w«– Å$☠ „Ò9÷"'Q` `üV€Ö§<÷X8ö€a äöð`y³ÅNõdqfZ(QêiA)£4$IÍxq°rHÝy1Š¥hg OKÒ•­—òøÃ¯\Ž#ªýÚ.˾ ýî‚NJ˜ŸÞÞ>üú‡ÿöï·§Ç­·þu{Òqò&Wk9Œg‰vLx©Yæ^/—ÁÐHÏÛð"½ýË—V¿}Î_oú÷·§¶~óíÛ­T‹moûm÷·÷çoë׿ÞnD[VÍÑ2€Þ,õs+§U[ƒ“n,Æ?^®2S“¸2Mo Ü"^ º!ÐpÈÎ0ÐÒ±‹9Ã)Ôcx `È3…&uby½©ø¶§åR‹V–/Öç-°,KœŒgš ]Xˆ^æÀ¾#„¡çiæ^‹+Û˜hè zß·ÿöt¶¶rô³(ãþ´—’¾®Ÿ1™ërñó›?^ŸÞ?¦ <·3÷õÛÚlkrÝЧô~ŒT³$dvÛfj.³ù M•"aþíŸOO—~÷ßÜý¯û7û7¿²wÛÖ’vâ囿þé °œžÊ9`F*rÛÓ®Êͽúe©!‘çáj!bǜ쇥¹ ñì±Ñ8µË5OæÁÒØ Í€!c19Dönž£pÎq/¡´b-#ßïVÜA[uìe5 i-‡Þ³@+ÅÙf!_J¶ÉG17e0ëéR²¥Å>üºˆxÿ·§²L‘AÅð§_ßžëÉ3>¦.õt¹ßýþïùó»¢4"{ÛöjU,RFgôÈé3; ñx9mû-t‹ 8£ãüŸd¶õòæ-ní¹ïçû¿¾)H!¸ííÚêåüöÛo×{é¬×rßwê°~½õŒ>¦Pè¥,K­¿»§H+Lå[Œ!Æ*uYf ÀF Òø"jI c?b£‚N$:¼=͙ʮ”‘²hHÖG¿ÊBp/ Bn]=ªž3)–uQ‚,Ƹí*K¢tÁÃÎëéT%˜ï­›ÉJô@|x¯ÕQf”ËþÞuºx|TÇ%Àr:׿¿µsmý¹ihn+º¹Ef¦ú”äeÖºIZa)ž­Ž0.bÜÿÄÄA·Ë7w]•—íoü÷·Ÿ;M}ßú°|õÍŸ¾¼‹Þ»¾û:Îç}ûªyYXÝÙۦش\£åþ0¯Ëºô†å²¨×m7U{ïa1htaC•%‡ð‹i8÷½žè6Y ãÿZrx÷åÀ,9êôL(eB’†¾[M½˜2@»¼œzwÆ|@¯KcZ5ókƒèèÇ8V§ôr_Kôô–¢%K^l{|vLMLÐJzy¾2ë ø„,Ä,wµ/‹õ/¿YöÎnaîÜžNë‡Ú;F îÏ;Ü›»›¹ía‹µ\7?¯çûª9“1¹2¥5+Ûý×_s[¬©¡¶GûÃõ‡}í±¬O÷_óöTlËèO’=–ëuýáoÿ凤ø ¼»ôççdŽÎ×êÚݽ „ EA3ï·kH¥'= „ºB(d³¿£éBvмxÑ'3 øõƒÞеiÙ¯Ûº °åTG¢Ÿ}hÄBÊ.sƒ!Z3ÿÿûz—fI’+=ì;÷ˆÌ¼·^]@£àpŒFŽF”ÉhÔJFú¡úZh#3™Új£¹£LÌÀ4»Ý]u_™á~Χ…GÞztK¹(«*«Ê›‘î~ü<¾G™ÈÔ€¨·ºXË‚U«Ïkç*%´bè$U2~üÂY2Ät]OX}ušð|y¿j&µPŠG³é‚Yÿì‹Íl>hãg ±"jt©zø•`·ß¡Ï2SHBÓƒŒvC t¹ôêEÑ–µsKuPj"#é9Pd1Ls2EÌÔv?2šŽÑmÍ„8lÕÂÝ’IÔUU ª™ƒgŠËtk]a‘$·wÛ&æeúÝév.Ò¶ã|tq~–Uª\ÉhC¿½wi]AQ¤ˆŽêbcÞÕ¨I÷âl‚J‚"¶Kœ1SaõpÃu»ÕI—mCõù«×ëd08F$ôÔLmÖ¡eÁHÒ'3UªºE hðzÛ§L‡C9׊¾$¥¥=Ö%b}ðÔѾFFdðn¾bmù÷ß|ÇÛú]—”eé;t9ì™èqESŒ¼K^.OÝ÷>šS¢»´º\á ׉jž›<[ÏìÍé±´­O¶3ä|YŠZô¦*””cœH'_Šîv_û$IßÞ´ÍléÕ¢Ût<µ¥E’SF„øžw'C¬š}m.ÔË?¹ýáamÉZfc½y¥Vl³ZA~~â<` =H’iî)P£ ª1Um¾}Ú kO°uí/Àw“Dò× !­TMj©hzš—µ3嬗9)èÛ 2£gn:ÉAÿò‡U«¥ú%Ø­w$…‚¾•gYÎk+dœ¤Úž.͆©iBH¨ç€{]eö¯‹ôŒûø¼í¡—*qyj¶lKYC="L5šßˆ‚âã F/TU0wN 8¿8Þ¥+½(ÅLšÑZ?uöž#Z'HCtà©b+#t‹{i§åri«ùA¼*eÿ³)"?—˰ݵáÿÎá ¹÷‚2‰ì‘(‡K‡.Ž a5êîšWÄñ*EÌ4[ZDH-µ¯ÕO­mËìçHÑX7™=ÒÏç¿°Ë×›ÌUR ÛCVO@±ö:ë*wœ%/ëÃãÒ¯ì—12Njm;ã#äåG8…˜>çb#¢Û¥œ 5×FÄÀ¼víVL îɤ8ŒuS#®¼G( eK#ÃØ»Mž TŠY”P®Côƒ¨ÊLQ4¨nãyDÃŽ~\/+­º»Fš6¢Æ6i|NÞ‘c¯Ü vF-3#Gß<l-[À<j®÷Z‹z™ Ñ29Wˆî;o̵Ì5;¼mm*\%7)óÍr^åaÒÚZfô0#z>1–‹ÞÇ©Q\„e[•^,)º#¯Ã³k:/å]Ûdö­)h1PªLŠî>Ú3­F¬ÜŸ÷y5Ü‹ã’ÈvpnO¦E]˜cž­xﵺªÖhI1,òbã ‚ì$rÉw$Vrj=³÷šIH1%ºìЯ½ÏÍT•ß÷=bâµýÓǧå&æ„ù¡´^%Ó?Ö9ŽÿºO¢¥ÇÛ_֠ĺá!Ñøêt)¢%[G™ê\ÓMM–Ç¥Iuðy2P5{À:qU“‚p]Kô¾^¶žR\bêXîË©·Ìu‹¤FïÙ×%ÖXÞ­n—ùT‹+Ì‹»!Â,a콪ª©2éu·$Üž¶JF H-ƮϘÞñõ ÷_± £µ–²KáDˆ\z,Ý=Ö¹-QÏL16I{|Øü°QLÁá @µÞiì,ÃÄåJ/%ØQ°t[R=òô´¾úÝ[\jt‚Pë‘-}7Á-ek"PßÒ¹Ö/s{œŠP RkQ• ±OuN|¾å¢n=)*Vd›—NŠ%S@Tȱ„XjAº¹ˆ¨–R\GÔïu”Ô"[;uv"»#›ªÔRÇz8<üXßÑ“Û*™@f,M˜Õ¤‘.ì#20UT”}Ý R“ÆÇ£÷¾­ýztX¼mmˆ¥?W%øzÞ¨×K£ÁnW”¥À£­ƒò±2“’¢DvíŒÞ#ϧR%‚3B€r#\!IáH½@Ô=Uÿö1¼××Ó7ûì¶+$û2p%dÖè™ÚÜÓíË®·§ÞZ„æF/ÌÁQýX=OhÓK—’bÅÃLüpyÐÛ“ïšddfw?´m…Y´ Ð§¢âÓdCQ_‡iÔ»{¯·7<;Û°aƒLa4Rm¾}üŽ7dp»”$Ø–µm‚t¥ ÔTdÓ2i¦Ð~®µŠØ.kÉumy- ´ÚÖ“–ƒ‘+ ßWN9îgF•&:~j»\²æäºïjW²«Û–lýi™OÓn Ŕ̞d`\2šã¾Ò‚ŒÛw¹öYÔèP”¹vUk jb@ˆtnéÅÑ[_=)»ôÇpRÊôź^¢Ì‡Ð¤×ÇGyùÆ=ÆT_Dz禭х¢Œ´ùxÈôZövLyþ/¯ßÞˆ¿©)"Äèar©r›ïïï±¥«jË$"IvÕHº˜@F I‘!3BYîæ©@|c9lËk™IÍœSÊÆ)ÐáK°C¹€iÍ 4 D-J…áùÜrà‡“.Cˆ ˜dþXoof`IAÈHÉNQUUDD@žPWʾmpiNqáW14ëbã:b¢Ò@L/n<ÐSeFE´ðâ±·A>¤ö¶ÉÁ$Ã]THõÛ•úæu[ÆÖ0/Ø2t"{šD¤'kåN”u @^¬ß.œçøë¿yÃì¬*ÉHJo®]½DÇñí_÷›ÞéEå>‘‰¶’ .$¼dÂ’ ….b’e‰ãé(Ð"UzZoA9Øy™Ú:­²aTÒC«b_ªa±²÷—‡g&Ð$RzÏŒuÁnZ´·7sÌÖ±{|ŶvÔYŒž‚„†Šš*0¢€"SR$rËÔìÛZ´ÞÔ- êÊäP•‚}ã˜ì ítz9¥“‘&:%ÔvHÄGÆ "ûÒEfsѵ&R_ÎqÈ¥)D)^¹õU9)coFˆ´xËĘõ ·T ¿éý²üãï_vÉTÑbVÙj2íÍÃý+P¡Û–u[Ïk>Q:¦êj€^-ÂF{¤ÓÐnæšœ¦öÃÃñ ¨!b8’dÏTQÄ^o­¯+N>C}ÉÕ `T I¢Eë=¢îšW,UɈ]ß /–`„ä ô\½dªšÙsA%a9n¸¾µBd;7½UÕÜÐ!ªÜ•;‘1Ì]'ëQT`˜H±ÝØ„ùQ9@*Z‹Oâ@ÐØ9Õ%ÖÕ}Õ!«Ãí²Ôª›XdŠsÝå"„Øé<ò_¾]^X Ó°8÷MU­N4(5åÌ×Û]©ŠµL ¶-ƒÒ´{í½ÙŽœ–=·GVåãÇêÙÛÝ׿xá{P¼Âó"’ÃfH’¢# ^MQŸ_W¨ìŽžý•$·Œ$µ®ÃLl/Ýe€ZÓA’ZS¶s5F$A<ÜÎRaæ‚¡(»«b Hv23:zŠMÂ]JjR)€«·k‚ g]è¡ 0†JŒ Ü À ™!µNLzl¡½µŽIÏ’‘½5öuÕYsQ7íŸo%%»í´˜«ÀhõzXRýxp´ìÌ ¹—ÛÛiòÔvY_q÷îè`°5èép8œ¿+ì=”}Sè ’RÖ.÷ç—†‡»w?ö›Ë Ä Mä0ÝÞå …cöuõØ>zà}`˜Œ=MvˆïE,8`3¦ªÂ¶4²™*È‹*Vpê$’—ù`j@îžC¶ÓðIˆ¢ÔÎè=E%š¢5ÖÛdQS2¯æµ4Œ:e•Ú0wßö :w”ægV›¬Y-]ÚÖ"s1€ÍÊùéÝ!EÒ²•š«Õ‚LöŒ²o©ˆóÓ‹8¿R•W‹éãËE{ï="ڭ˯þ昱5=ný‹KyŠSœÁ‰ãÍíöôøÔ¶¾®¼¿Ô‘—UCQ—tòôm{_~ó‡õ‘§$Åsãù l˜ºˆºi— A\kõç(9"Hœ)bÂLÍ„x& s%ÕŠ+’k«Ó%ô2³gñˆìûÔ„ˆ­™¦NÖÓvýkÝ®£¾Í¦U©–ET¬–ùT“ì¶rÒ-¢æ’©óÜh²¾ÆnzEBbdÁ?‘“XD4U´EBAµè©¶™>ýù›¥ù`õâ쵚^ÃH^pŒF“ü–ÕiK?I¦ ­OÑúû5ñÕ % €è¤Ó”´\G¯¥^®ËÚ¿¹Ûúg}Ùgvé²×4‰žëô»ÿꮯæ±]^‚="¸óŸTuh’™Ê.tñyãäÃfÝ{]*BQ¥‡s ²›V­f‚`¼zB|N;‹KtÅ¢¹më$®Ö÷úóªê¶·wž;Ønnˆži¥åpC ÚNª^:=ÔLÄ̪ ‰"\Ô5þ©+q×èõ-#3•hÝUu[¾ÿÇwªj8ÐU§ª™Ïf™»&¹fo¤æ_}’òòfÈ{ñ˜ nÛ¦užq* 6muÚ ë@B5+uíÑRl9[ž »œÑ—–Ù/}ÍŽ÷·PÏ\÷Ú+Â]Iîׇ5é·ÁÏpõCµCKé)Wär(®:ô #MƒBš ÅÓg®m£ïƒÁ¶Tu1·QÆï»e„iàJ „ĘrÀ´Î&u:ˆ©šÛf5|¢53‡¨Î6܃’‰L^Gc?sâLÑRÁ²Û¬zô 2.ßýðþA&aFÛL¤–âE:M‘ÏóeTÄý±Ç´²N]•»ˆ¥j ³’KÒÔPí‹Ôm4ˆ’9T®êÁàå¡ð‘’eÑ:·Ëö˜¢¢"±\LD t&Œ¾£È¯è.\/²ëüì•;¤y?bƒ)kz­óä-qîu} NTÙuŸźÍ@fͼzŽ€d‚2’“Qæ˜ØVUdôb&"jeÊꄎŒ&&2sÀ©G»ØO®2ZàòP¢GJE>>~ÿãy Q{JD)E‘;r*°æH2úå‹U§ }Úf¬HD©ª›”¢ÛóøªÒ$#Œiã F‡»Ê²´"Ù2BDÄ›XPVUѳǥ™1$›'}ëëÐÛOù°ròIRò3 —Ïz°€R™»Ïsu½FB‘éPè¹ö–¢P×\!Îìû~ˆ¶¥‰šQTÛÑÊ –hÒy=*¢jÈ>Ô*‡c:;Ì·.£oP°ú6¸¶RÇŸ.œdßBÞIQ e¶ÇヌÃô¸NÓ!’R]´@{"#±û5t«É9_¼~¥¡V…ˆÚ‰Ý‹¹"I³N¹ªtat£'Å­_PKö¶E2Ì@dBA@1É`cv1kѶõ)"²÷>&Р?«1fOþ?yey–ŠÒRužCfhIÑCŽ'½|\„!šø£ï¼^Z–2AÅ2âzÅ!‰”L´½õFfê`,$U 9|’j¤¨+Ц¨¹õᢗ`¦$ûøhPÖU~²p‘ ‰‡sç<‰l÷ïÞ½{Pù 2¥•d„k¤tÀ¤Êâ݃¶õPÊü«¯þùé ƒeëšEÑ[3“h5è“‘e¾kÇ\5ZƒJ„š¹l?,èýrc"ÌmÛ–n ÑÄ{ˆÛHŽåý¦çlë’Aìö ãŠöÛæZ¯ñçñLÑA#&¾¨“1Dq‘cÂßüŽúÏmƒŠJP‘ü Ö'ÛÓýŽ Pf^g†ƒœ`Xr(†4qï2º1œÊÎóI“H3·±AÝGø`PÂÇD_&T’â”­û`‰Ä»?þù¾ãÕ]y­²LU"ͦ$C2Ýkß`2Ù7?¿úíÛß^Þ~·ux‹"÷¾³°ãIDATãû,”Û7¯¦KïIWмõC¿ÔØ6¸2ç-ÙÄU]CÁöxÞNÞͽ5QOÑÌ¾ÆŸŽ¸¿[|­]‰Rõêt÷óš =ïþ¹)R©&OªÙMRÌܪ”›¿þ›U¾+cšÞÕq5Z,—GñYU#¡ñ!«ÜÝØLU½–bò8®>f¶3¥}­ëp¸Š²Æhë =»Ãæ'Óâ‰ÞYëþï绿ûËI‘žOüííSN[3Y`^Ñ6 AdÕH7Ô…Sëqþ§/ùö¶>ñËõ[/ç~Ú²S…IqójÜÔ¥e™"&¹kíq¢2Rm+\Äó¼²ûÌ'ïÖL¬çóÖ^¼ÕMeú7mRv ËÌ÷ïJ…€ÄpþŒ·$ĉ]Ándîp$”¡I5D.aÚaØý×= ½EªÄšV”ÃΗ±I5Õn&}E)ÝеÆ!CL{´=–7ç6z‘:dl~Zƒ(Ö‡)ËëãÓZm‰,_zéëvœKÙý©¯1 *¢AÛºêéööË2YG±:yÓIbA@›xiïKÓýøÓʲ&4HRDZWwl÷Uë9|õjDfo±›-R]žõ®ÛN®iÿgÇì*q¹×ߪ죕‘qˆPGA¸:$£Ü¸öë_üúežëëóøÍzºköHŠ”ÖSËIMŠ«€Ú£o-i9’´”!]obæ¦JÙ!è"¨¢Êè¨#hïÍŸ‚ºìÝ!?›Uæ®Yjf.o~õåÃ&ÖÓkR¢¡¼š·4>ƒ£$׎Roêí»Š•ÓñžUV¤¶Ú4m)¥zq@õð¸ÑG¶$*.É÷!Ø.—ÆÍ£ÓÙ#úÚ9¤lý:¢y^¡=ïß—ýý ÈJ˜ª!HšÎ!æa±g•céC†IkƒŠªÒ Öú›×/l£ÎÿêÿùþØ–cëWI Út˜= D;1R=´–½ílågeéS2¯"&&jƒË<ÊN¹úŽìÓ ÙG®-/ùù…SQÍ䎤ê‹ß_þ´NÛ$6µË‹uº©¯jè  }HØ›3c“ÃÉ'åÅ«ºfçñÅeUIÛØ¦æù¤óV¦ÉM³>܇hph†Zö®˜ÞüeY:E‡MfOpÛl¤qÍ%®Ä„Ïå׃èÃ1òŠ[rsnšj4Ķ¥@Ìúð…94ZHˆU—bš2¿º}…/%^ü7þ¦¼ûêǵ1ÇcUÜS•y†”¢=Û€Èôá!=ȧ¤ÊõÄAIf73¯ÕwI } <‡ ½†—ÂäOLœ€Ý-©’= Ô%~y¹ûnÛfÁj~Œ7GŸ9˜¶"Ø!ÜI¡ h™*2Ú\JQD®õÅò™Y*ˆd©ðÁ,f ÔãÔÚÞ+‰jÅê=}÷õb©æíbÛ¬* nªMq% =ïëïäÓŒDžÕÆ%?¼+MÖL„¡(Ýäxh”I)Ó‹W7–]Õ¤?þúßþOnÜpàE='‰²oë¦FˆHsòRH£È ”‹˜#2sÐþ¡ŽL¤¾ÏQl×ûO®ªŸ•¾QXôžT‘Çæ¿üò¾e«àÍ›×xe-2}Ð#€Ub@ÔSKç^Ùa^|›7÷—0…8Ñ£jiÙÙDµ>Í^¹©2’x9±©[ßÖì2ˆvÁâÛÖGòR><Æ'§ øìÀá*Ì“YwP•@½ÄE½ ×Îëƒ$¡Q˜Šl>ž¼·i¶ÖK‰ø·ÿë7/¿þeÏ`™õVÌ4#<ÁhÙ¡»`ÁˆÏ;dO£‡/£Þ©C}=,3ì1\xîŒ%Zˆöè~fáQJˆ$ÚÅ¿½û¶Á׿±,½iFÏLu¦‰!}h°§HöF—‹W(Tƒ~<\ÁD¤Ì›©0{ˆ¨F;ˆÄV6Œ;èTgg¶<|‰Ã7ï7ª Üáb¾¬­S>û~ |ƒ7ýìÀp“pŒ ƒÜ+JIn4¨:‚ìŽ÷1”IÌÙÌçÃ$­A+°ºÙ¿ûŸ{]C§épYß4ˆTpgUå–ª¢Ù“ªÈŧɥõšRgÛÀ„¹Dç4­­š©¢*Û¥Q–A{3CKðéæt£[ޤžE³‡É Ö2p\bÊþ ü¼rÐbݱE‰Œˆ’dÝ5¡vÛ2 Œ‹šN³A"æR4fíRŠ[`úûÿáûÇ¿úÓ«éx˜ ±i1¢oD©a¦ØMŒ±{ ²PRD2"⃠EUÍLƒ{ܼºû|XŒ÷æóÁûDgÓ¾øow¥—hºŠvqê÷!ÇWíOó¤þýoT:J¿t%£÷ôi**usé—sè&ª”:šÿ®Óüû­Tiý¨P—½³« —‹Èñöèb%ª÷nš$ëËÓòÃ.’¾šžëíE£Sû¿:ìË´Û^›É¿#i!HºHlRe_1i˜ÑË4ˆùÜD5[W¥'ó©§T·ƒC'êNÂDŠŠœ×S›þËÝßžng…³™më R¤n.@ZÒîMæØ«íÌâ™Ê¦_öçºUõ¢ šÎÐoÙömÔã §P&1òÌñS>öà˜Oا€5Ë5`Þí×?üzþõÝÑB˜@ö‘8.OåÄôÒ¶s¢ÒF±"&"~3wVê#y#ë~VÁüò0»³§ˆ›<®zÐïŪC$‡] Ú¦CärGI>gÉrÅH>oÕëñË}Çêu0¦%„@§érfÀ¬·âÅ•€³Ô¹¾J2©°X¼"©L"•Ávø¯ù¿¯€BÜ(—ʞ怡P[ú'Ê]²C2!œKqìš‹¢Å]SËU|üùˆ=gí?éÿ|ä­s¥= ðPQôUºÌõúé·Ûþú† rqS l…pìeÚžÚ£ŒJ³Žc.€¢¾º;× wÏ=¦=†‹0Ëéð™]{Æ$2¹¬5Ÿ~x4ˆÆû¥ê²:©€ûràyW|´p òáH‹7Ù{÷‘â¥o¤*Ó%3€eÒSH3gïÀÖZª•šà¬¿¾µÿó ½3úÚcç7’^'W5dÂÙ¢p`?c\toÈ·%دF!=;æ1~ä‰ÄõœýüÂØ{ž*¢.R•X˜²~ýWÿðïmz\þ„)ƒß¸óùd¤O"LX}R3+Å^Š»Y& ¯Þ? { 9Çqëì£F©JuÑ›­µF“à~Âwø»OâªÔ¥Ö–™&x&˜?/ä³?_Ÿ_ehuŽ“WEB *èI³·w—‹ªU Â}sQÇ¡8{‡>,+:Ý™BšÊzc‹ø—¿'…­“"±®-5ƒZª"™Z{ïåÞŠIFLûñÈ>¬è·á6¹»AM Å\Ô;>~ýO¤> œ #ùº> 8¾²ÿñ?ÿ¥Ú‰ ³ç3fQ(ƶüµx©µ˜Z1UAv^þ Ø…)èYÄ\ácä£.;ª„Øãßý§÷‚Mbfao e÷“fÐ^§}út¨ EÏ5bULMTŸ§ùÛËÓV¬¨JJ™KÙ™.PqÈQ­oe€B Ðõô/ÿÔR”‘š¹.ý¹Š‘?»J¢flýQ|·%´w0] ÌÏ«·S†«RÓ„]ññÂÉs–ò3K÷Ñ ™-æûÞ)*–Ë£•À«·þ»ÿëÏÛ/ß‹Nçd±‹) …Á¾59L53Ó FéEÂ_¼z4gæ¹R!¢jnâ’"Ñd$-¦¢SÊùÏÿÞðôØ 2{£õPÝÖs‹žˆ!òñ3^;+¢6¦É„ÜEÕ©›Z™‡©¶»Ëcª%ušÐ-ÜMI3£Ê(ÝÉ|5õ7?>®PMrÛ`Ϧ,Z&KQvàÆ©oævmT!´öÍ‹¤ I˜™KfF~šËÞ<øúñÂA€\Ï- îê–.`.-KËÛ7›|ÿ/þ¸½<=j5SôT«²ƒ<Öè¬õPWsÌ:%•ôí¸ù⢥èƒ( D-À'EÜT¨ è÷ïûdQW ’ÑY²igsÿ¨DÝo3~reo®ççøy*bF¨¥Nâuª\.ýøË=½(ÙDCdO˜föeCqˆŠ(ØV]ë[®1æ•Ù»‰–½55æìÈܬ§¾VYºµÎ¾_ï‘2U?´Ç^$É¡(#½` ýøp]'‰ÿ¿É Œ¶lZ¦Ãä:)¢Å徊µ6ÍOøÕßÞuXÀŸË&™¤šìÂÚÅkˆÈÆî™:EÉiˆP´ËPlìAZÏ ƒ(´¸ °%X·úÅÓRnV÷L€Kaw‰u’Q©Ësâx­ç>½óödSöfú®‡¤bBªŠÎÐbÛ¶6Èq‹Îj>½|¥ë½Êà0fhÑlÛe©ÕŠ^—TöU'}{yØ™™¦âP”æèç`røâV]Ûri_tž÷¶xä†Eú»¯ŸJVBdh©±þBåšœì]®+ë'cÅê8¿ú2–Ëy°åÉNï¿î=núñûïo·|ŠÓJøá¦ ÙY‡’"’Ûºl¥_ú0ÒSSucÀ%%cêËRjßR”]*¶‰fËûÕÓÍÊ©±§»ù´ˆ€lç»Å^œ°ÅM,ˆ®)ÚQq{üñÅåßý¨Üç45DM­Q«)˜ºIÛFEÀ#Ÿ5&ŸnN'ÚœïžJk’/¾šÛÛr8x´ŽrØ2‰vY‰ÔâPs£‘q²8ojÙ/— æU™T¯çKËÖ*Tz™`Ó<ݼþç¿ýåëÓìE3²õË_½¨ÛãÓyCö­e_óa³×ê "!殣vO]LØ[‘¬}> ÂXº>z-Oï¾øòp:Ú–Û›¸ØËþãÕ³Jf/&mØÓ †kW™Ñ}š™Ã?¿*ïÖ­ö¬NF/32ûº„ž&,áðÀ®s‘´Ü.­gèôÚ/wå­ëa$ríE»rZ§q‚Èè= CÐDTuÐТ2>Frb¦¢>!¨hÐd ¶nVnŠã/oÀ_lçóem‹%CUmuW(Œ>?ÔK--c[—ŽÁ+rM0‹„Ôn¦•F355êazÉL[¶öøèy‘še.õœ¤¢¯ÓÞAßa™¦ÃÈú¹;>é»Iå'ÓÈHˆdÛØÙ79Ÿ^ýâ8 i‡i ;Å·¯^Yï™"bó¡¨Ô ¤Ô\r¤ù)‚.j•½‹›Ý¡J­Óå n™©ÛÒ[àöVÓ¦9r´ÄòD¸è|šïϦ*)jÑÉvÁWÓwÛÍÝíùS3 c EMDi!`ê.’Á!KWe:hLeÄ øÍ©.ïýUYMÊíq»<­+ƒ™ÀýÒ™æ“ìóëôÃãBQj¤Î:¤xUr Á«aÒµ<^F+K´NåËf‡Ùý0m^G‰”[7fOèhRÓdï”ùý4Ýžj~zâ2"¢LÜð²úáå›^°Ñ&_lÒ^ÞÜžfo¢)¢Ê¶ ’ ÂEjïÑw«rÈ€kkÄLm>yšaeoab’÷/½Íva‘âJQs¬‹ZeÚ$ùÛÇ'ÎÖ׉$ãØ÷/³¡½.íãÏ-ª6åþp¯¹eì+HˆÕ¢Yk5Èã1ßÇÄs ’¦Ó:½ž^nÛË'±RçÃú-3%#¿k¨ó<] 8 ¨ #¾]ž¶B]Ì8Ç(:`¸Q-ÉžZ2Ý!æU|ë‡ÃËÓª½hŠSŠ2sØEïäÖ+fsç‚0)b{Óá³·ët@±˜Lˆ G¸kR•YŠög×¶Œ¦{éõÖ͈¾qŒé' Í'ow?Ü/îS)ÓáÕÖÃл&¡&²lŒTµÅd<9ú¶¹mv¸©X˜°0íÓÍ_~¸õöðxøèƒ‹ˆ%0Œ«U’T‰ô1rÖ=t‹M¥@Ë0ÌátŠG1W—Ì„ ûtSÏ%Ù]FIÄÖúÚ»« ²ÌPŽDôÛîìUè&[ÄÌ¡¿š¢Â”«íD±žˆéÃQÑ̲ô‹uq»¨³ëÍŒEo3µzU†ç*g doY~êJœAßû¿ãŽŒE Ÿ*¶[úÔ· !Õz›# ì½G²¨uëu˜A23DäØî¶åñþrìaÄ\ôýû®Jè½?“a Ù&Ñ`ÝÍçxYÞß­>¯ vÔr¾÷Z×7ÀušÂÁ'•qO[‡yŠ@¯² ež‹`Ô#îRæ›39mm+[Íaä&&@øêé‘^\rRF»,M©Å ±%Mw>Á`ª+B­¬ïݹ3m2Í艹,k{x¿¹ªªM7'¹à4Îyðœ–ËrÂ@c/¤> •»¥±é%75õÌ V¯&³©*žÄ8Šºë?ë¤â#RA2XŸÞ?5†ëfœ҃ÈTÃ`ôA—·ôƒÉ…9L)t…xLÕð)B-Rüîò»s¬ÛvüpÇí“í=H‚™j~rMéצ‘ÖÓ,£ ÷{¦šÚü¨" ÓUËÁB‰ÀèöÛi»lv0†êpCdÄÐHÀª£¦ •Yλ&™Ù0·2³q;Í…[J™˜ —mëñÔ#ÅntEÊ|šŒ&Ř;âØG³Fª 1<é?¤îƒI†ªÉÇ›ÁÍvÙ¦|5=Lµ¥ˆåÒEmQa$d#33¨ÆîE†M 1Z¸–ü‡H™z_OVŽåé1ß­,è”>ú\Rë/³fÙ4-êasv?ëS«´"¸ÑùaÑH+ýpɼ‘þÑç&žuïJ¼˜‹4ö¶G­óÌ–Ã IW¸C‹%!XòÕé"µK Зó謉Çü¢µìa2ú™pÇ%:;Üó ˆ¾nCöÜÈ⮌†C2É„¤X°·¿¸´uë½(lë R¦Y»ÀJ‰+ÀV†ÚÜè*W:N½AØ-•ÅœÙÈ€Ø3 ¸1³5¯Î¦€j_-™™&ùÔ«š¶—ƒJý];?ÞUxÑ­\k;«i†ˆóÓ²S"š„P§IV&º®µÜd‡º" 5eêŽYû¤ 1¤ŒIEND®B`‚nip2-8.7.0/share/nip2/data/examples/logo/0000755000175000017500000000000013224651032015036 500000000000000nip2-8.7.0/share/nip2/data/examples/logo/logo2.ws0000644000175000017500000015036313224651032016363 00000000000000 nip2-8.7.0/share/nip2/data/examples/registering/0000755000175000017500000000000013224651032016420 500000000000000nip2-8.7.0/share/nip2/data/examples/registering/example_im_1.jpg0000644000175000017500000001521113224651032021402 00000000000000ÿØÿàJFIFHHÿáExifMM*ÿÛC  #!!!$'$ & ! ÿÛC  ÿÀúú"ÿÄÿÄ? !1Qs±45ATa“"Bq‘23CSb¡#RÁ$DrÑáÿÄÿÄ6!1Q2ARq‘"3¡±ÑaÁá#BCSbÿÚ ?å´Ttg¦&–tMü±±oèT~L"‹³©·Mà -)<½ç“U«=¹{O‹ïèT~L#¡QøH}0˜BNÓæ7ÖÔñ?Q~…Gá!ôÂ:„‡Ó „#i󶧉ú‹ô*? ¦Шü$>˜L!O˜uµ˜GB£ðúa0„m>aÖÔñ?Q~…Gá!ôÂ:„‡Ó „#i󶧉ú‹ô*? ¦Шü$>˜L!O˜uµ˜GB£ðúa0„§Ìc­©â~¢ý ÂCé„t*? ¦FÓæmOõèT~L*•]50®¨ž04ŽøFÕuTúοQ¼w"„ž^òÛM©7)e–ŠΦÝ7€L%è{:›tÞ0£Ë‹*jûÉy°B’4B„!B„!B„!B„!B±y´n7±¶_>å’ű:¦¶–‘šå”jØ3)ÚPÛš‰a¦Û~*î•_ÉrǰÖÁÉ,(ÆÓh"ûo­S×YÇé[ÿ‚˜}Ý—'sK\Záb ˆSu {5¹›ÞŸiê…Ũ­ÓŽœ†„*ÓÌB>³¯ÔoÅ\>³¯ÔoÅI¡Å—gjE¢‡³©·Mà zΦÝ7€L&%Å••}伨!I!B€!B€!B€!B€!M`cIÊXÿ ¿ÙJ©ESº³}A½œü¾JÆÂUsÈÝô*×®Ô:ç ?¸ëx¤&L&µ1r N#'3]|Ý|×mÄZ†FÀ55rQÅjÑ(¾EMÔ!˜g‘é½8²w¬¸Ò’¹ýQ„!PŸ;‚„*}g_¨Þ;Џ*}g_¨Þ;Š“C‹.4ÎÔ‹EgSn›À&ô=Mºo˜LK‹+*ûÉy°B’4Bð$ØÔ³¸éª¦vÓ@é]µ ¥F·™ßúíú¯*\ꩯð7îû^GLOvkoa¢STT®dþDøS„cí,³{q Ýùê¶¶®r}VqSd“±Óy)ß”Z/õýEõtù ‰ç?”>«c_1ü°¥#¤dšeO»ù]’ãOæÄ:0î!Z&?[D2Ÿ…O²¦Ö ¦a×î kL°ï§óq—K‘Zm,®î[ …Z[‡~ÔÃ0ßÚœZ^Ÿÿ?›û‘å "¢0Ùô¶· yøÏÑ\†þÕ½˜oíO-'MÿŸÍýÆ$¦»ÊcpGŸÌ?E³ìÍ?Ewfo…0Ì7ö§V¦¿õüßÜ)U]ç(š ™ÑJÒ×4Ø‚°]”¼œ’¢ˆÖÓ2óB.承þ.~¼çR±••wMðî¡2ÚY4UË¡£‘ãX3’¼r‰°SFò,J¡V4ôÔ£ã8ü‚ê|™`‘°j ^ Ck™í]´êìå]­ó%üäºâ½žÏþ+—ò‚"i¤#¸ßRê8˜&†1ûUƒŸÛ´¥ÜÇi4zÅ[E{¦Öµç¾8Ýó(^¸¸´ëËÅ—>A”\dâø B¸$>³¯ÔoÅ\>³¯ÔoÅI¡Å—gjE¢‡³©·Mà zΦÝ7€L&%Å••}伨!I¼ÇIþ0rïL°N[W¬—Z¾éѯ7qS„x/ÔZ{>У)ïð§"¥·rf(Ú\ÑDžpW;Åc¦òNÇM䚎6'#…6â/­Ž›É96¬“QÆÛ§b™&œC­Š—VIØé¼“QÆÌ“‘FÄÛ€u¢±Óy'#¥íMÇ‘ÆÄ‡ëD££iu5=Éøãgrr8Ù’Fô%Í29˜pØ Ãj•Ž6Ù9mFÜ—x†“![†Ü[›uÈý r\à˜“+éÚ%Y>èøÞ>GZú 8™±#Ê.OSr‡“ÕXlh|¼owÀþâ«u*‹¢âø­èDc‡¸ù*œ‰q²LŸz꼜ø(Ã"‘¸¤í}‹›+šHÕ‘²ë\œþæJšÞQ>–Ò-U­•*+¹/^òéZÞu$cöªn'<åz¨oþo®Ê£‰´{Éu‘¸ÓåÀåøŒZ*ù²>ðJ)œz 'd€y ³ã³Q£åÞ–Ø~Y¸¢–í¬¯)oýÁB`Ê‚§Öuú㸫‚§Öuú㸩48²ãLíH´Pöu6é¼a/CÙÔÛ¦ð „ĸ²²¯¼—›! #GŽû¥zع^;î›lX4Üë[ÎŒKûU#ú¡XÌG¢9‹'¢rÖ6OÄå®lLbHFBv7YGF|Ó‘¹6ؽ’F''##%µ'"v¤†$„nÔ‰Ê>7dœˆù¦[ ’F7w'#rÉÈÜØl’»0œŒêQñ;Rr3«4Ûa²HÆíIÈÝÜ£ãu¬›cìm†É ÇŠ©­C=ŽÜ‚o5ŽÔ=¼›ÄË^)¤- æ4¤Kƒc´aµV1æÑó'`.{\nI7$÷®¿€ÄÖd¹¿'©ù¤…Óp…PÅOÒXH³ÕuVü•CÌ•oªêÍù*– Û¸ì\ªh¬7`¤cPóéžm›}åXWŠèƒšæ‘‘T™c•Ì? ²ÏÞC HñïꕆÅÕ è­Ó[/Ípù?‘Š…^x¸*}g_¨Þ;Џ*}g_¨Þ;Š“C‹.4ÎÔ‹EgSn›À&ô=Mºo˜LK‹+*ûÉy°B’4xu¼dY2’a÷–Ï£ßR>_¸äVS‰ÖpR¹FDà Šz"¶’b¢‰Ïšr7(èÏšr2›lV Üœ‰Ú”|G œˆêHl0HFíY§"rŽŒê²v'&[ 1¹9”|nÉÈÜØ`×NFufŒêÍ2É-ÞË$°[ÝÊ7Lv¬´ÇjIÌBeÊŠ‡³’X¡Ü×tw€GÉmÓª •õN’e®æssØH 57A“tøm]Òþ—Ôæ¸0·4.…ƒü+Ÿ`ÿ è8?¨b}-ÏSÕ›òUšÖkV‰…éÛòPŒÈ®T.í0U+cÖU+€ÅX]k5ùƒçÞ¯ÕŒÖ?‹Ýd€j6*¦î9¦ÿBƒ§Ö?ŒÐ§4²éµ/Ùü™„!R,‚§Öuú㸫‚§Öuú㸩48²ãLíH´Pöu6é¼a/CÙÔÛ¦ð „ĸ²²¯¼—›)Œ“ÕØÜáWÎGêþ6®ÉÉŸe¼ž`‰õкºPnLŽ!§ø {ºt¶Ë[-êímEb<ÙÁ›¯dnpÚÔq“=¤A7}Ù†àô4p6j8b`5¬(œoÙ§$1÷>Jü œÍ!ç:hÆäí»m}J~‰Ò([T”¥JM>EëèÅHGÙ¨›ò>0ÀžÙ^ë²r·ØÔPIYÉZ·ÔónM$ö#ö»Qùªão§¨£ª’–ªÁFƒÅ5_u9º-=½FŠÿÒ pˆ2jèL!¡ª¡…FÖ†Ü+®¨*ŸFDŸ”€|” gzž—ðÉ@Ö÷¢¡kjW+{Õg„ÍO#nHÈy«=X$•RÝj E•‚ò­¼n­ª[O„Ó^¨¥|жNÃDŒ=Î+ZÎ5‡ƒâšôeB¬¨ÏŒ[Oá¸>³¯ÔoÅ\>³¯ÔoÅH¡Å–:gjE¢‡³©·MàÔ°éêþiΦÝ7€R”DG#\{Ôy¼eivqº½qŸee¿S«re‘Álc@¸.»Éó 9.#V6ÍÍu hæÙË+wå–z„0–Õi\‘k±@a5:Fƒu<ÉFµ¨ÑåE%ñº‰žIÝK’ûUöwKÊ,\J‚E‹Ó4½®klgh,>{ ëÅÀƒš©³]K¿¬­'š_25J¯MÓšÜÏ„v»šn6 §c6S^Ðp˜ðOhx­$hŒšVÜ9ÖþÔezU½xÜQ…hð’OÔój´º©ºo¹à‘Œ„äfÊ>22Í9µëc[$„nÔÀ ÊÖÖÑ.ă›$˜›b÷Mæ£Æú×¢o5Ø%ÙkF–ýê7Mæ½Ô„à“Óy¯tÞj4LWºo’îZo5ÌO 5Ý÷þ–Í6J7—œao™*=ÎêR/ú9 ­RŸìÉ ;[UÇÔ;ÖÕqõ5QÄ÷ø“Òþù( Îõ?/à’ƒ©m­³ *[­BÔ²÷V –ëPÕ,Ö¡É)x¬|ÊÎp<_ùH)Ìj+Ä×÷´¨5AqšŒù[§V‚×+$·O_?<‚§Öuú㸫‚§Öuú㸮ÐâÌö™Ú‘h¡ìêmÓx#ƒ;¨êΦÝ7€MÄîk¬uÄ÷¶‰ZEÔm e|Ë[ sG8«þŒó}õÊâÛsRÔ8›á 9ʶµ4zRgÐø'(‹ FýUÞŠVŽs€_8á˜è¿äþÕº‡”D4“ûTó¥:o1ÎNÞ1ˆ¸zZ|F.i<åÌ£å! üOíAò›—‘áLÒ‰9ó¹¥±2úÝl¿„ÜhÜÝÔ(å¶ÄN¤)EÎ\̽£b±bÞÑqJ¨ ãk„WÚZ*»’gÉ+¥óžò\NÒSq¹{Ý­oBWø¤½/­>¶¤ªsy$#6²m’­F¶K°MæŸÁ'¦Q¦óQºeî™w0Ii¼×¢QµFéŠ÷LŒ h“Ò«Ý6zÔn™3GO[_0†ŠžIÞ{˜.¹9Æ jo⃓ÄVF´Þk-0Ú¬Xg³ŽTbœèb¥e¦~gøVX=‹âÒD×KŒÓFûfшʥ«Ò 2‹ÙeŸÓП *òk*›9ΘmJT¿ŸJ¨´ ÈYÔ×ûšû”exÏ4L± ðSFÛ¨º¦ Ùj­¯Ìæ«ÕU¼â@*Ù{BFÚéÄÑHÍ¡@¦_Qæ–¸9J¦ò;”þ©Ú)J…ìX¿ªýÁSë:ýFñÜUÁSë:ýFñÜTzYäºgjE¢‡³©·Mà zΦÝ7€L&%Å••}ä¼Ù±’–äìÂÚ×j)d$4ŸúÏ^¸·Š„ÖÒ\øú’TKcÊ’‹–ÝîæÞJ¯\í*7'AzßÿIë{XÜÖ&ø—0é,fÔcO™n¨åË¢adåÏ!üª½N#WˆÔšŠ¹KÜN@œ‡ÉBFíY§bxï+Ð,t«{%šk>òºêþ­ËÄÞîDŒn¿zm²XkQ‚P5,´ÞjÌ‚KMæ²Óy¨Á?š÷LŒd¦˜m^‰…õ¨Í5׺eÜ $ôÞhlfžÅY¹9‡¶¢¡µ‹€nÖ•þö•VÌ•ik;ª›ø“¼œä¬˜‹Û=qtp댋¾{eÀ0Š:™5;"nÆj±„´06Êù…y«Æu}Væö_Ü–î]ÆþÎÆ´q¿Ÿye¡§ `6RñE’Z‘¿â N&d©mm]ie–X5 !a-#%ÑÊÆ½®-p¸*EŒËRØbÔµTôE(í!Ž·+å³j¡%Fî‡R}íå¼ì·räõb· ­u|§šÚî>kêi!ËR¥òË‘Ô|¥Ã‹\U±‚aœ ÁØv…>Þö½„Õ+—µ}è¹³Ôe£Q妿Ü×Ü«õ•úóXâî©Ã«&¡¬ŒÅQ‹ÃÜB«VWë÷–¡ÍIep66óά¯Ìæ¢_RI¹rJZ¢çt³ê<Ó d´ë”VßQæ¶ÓK¤áA¾¢ýëvUÿœNOQî!µM˜®˜RWšMX®1ö—ÃøÉ<©õ~£xî*à©õ~£xî*²‡x™Ú‘h¡ìêmÓxÂ^‡³©·Mà ‰qee_y/6BFGbýHeñûR)zÚsUJèCƒI ‚B•iQR¯ Ë‚c´d£4Ù\c¬æÊš, ~;>…z0i]¿B·_›Yøþ¿bÍÕ¤ûÅ´¾ez&;Jgìy]¿B±åývý ïæÖ~?¯ØOYKÄ/¦;J÷L|ÓdKúíú}‘/ë·è»ùµŸëö8êSñDÄw•è˜ßY[¾É—õÛô(T¿¬ß¡Gæö~?¯ØçYOÄn a©©kMù£2º6f†@*FHi£<ç9ÇXÊá…ËÍ ,>¹v®êûÙ\ þ‘B4­Ô×oû eš½áÍÍs\2q–jí†TÛš°Õà^£¥QÈ Fjfpª}Pp«EîÁÔý6QƒÞ"d‹5­«K·’ß[I8î"¾&/$åh)Çj)I{Õf­¸o§ÄùçÛï&´Tò®‘€s†ªÃ]þë¢ù𢰽Ä]}Ùí n;ì÷Ãy¤¾ZI vž{G9º¼À_GK[PëG¾n 6‹u·BTæû/We¨Ò· Ýy¨¥ÍàÍõkCª.u©8p LüßÚÏþÔ¬m?á ÚìÊ´Ý8ðÞPßôâÆ†cG5é¹z¿Ø¬ÅO[TF†ÿ± R“™“2i§ ,<à.§ud¡T¼œ·-ÆPéýÜ]8b{·o~¬>³¯ÔoÅ\>³¯ÔoÅ7C‹(tÎÔ‹EgSn›À&ô=Mºo˜LK‹+*ûÉy°B’4B„!B„!B1~R4U’TlGücÉo‰Á¯Zjk'®éí;Zmr_Bû†Õä3W :³W¼¹} Xm…ì­T¿vÎU©)o ¬fWz»áÕ1¹™:ëŒaø4‹•rÃqkgª×µ”(élm[´¹kUJL[`]u*Êæ8kÍZÐÕªRއÉS/š^WÝ)ÒÛµku[-­3wªÊ¬pv0Ã1®{[E3œ@Ž$žì—Âò~+íþÅ}—ÊLBžNbOšÆ1M'8sn9§+¯Œ®l,t|ÉNOô1=*x•(ùþÀ„!_pB€O¬ëõÇqWO¬ëõÇqRhqeƙڑh¡ìêmÓxÂ^‡³©·Mà ‰qee_y/6BFB„ B„ BÙ¬ëmLd˜6 ŽäËÎmþ«’YÞoº=|§OðÓ{×/àf)Ë\ ž¡®-ææ«w[á›FG½epRFµ3¢QWä3VZD‹{Ö\¾±¹X)1,‡¼«jЙÔi1B-ï)˜ñm^òæØ­ï)X±OÜ«gE‹LèŽ߼¼v*-~r£7Ëï-UXäPDé$5­$¦U»o$–Y¯Ú(Å7%&¢Ž[MXt@öü_Ö_ÊàJo”¸ì¸ö.ê‡!g»v ¿Ê„Z‹JE%óÊ5›ÕytçÊÜB–R‚„*}g_¨Þ;Џ*}g_¨Þ;Š“C‹.4ÎÔ‹EgSn›À&ô=Mºo˜LK‹+*ûÉy°B’4B„!B„!B½k‹MÂñ¥Rt¦§††Xðá—òi0H7ml¿ì>‰.<ÕH)TŠÏ³.}ßÀÃ\曂‚½ì6*4HÃÞ½ç´ Ü$Jâ o-䳯TY©ñk ÝHÅŒ·ýÿµHÓ4jrðÔ»áþÓ.ÝHf®§kEfuÃнÉÊጹÒZÞj­‹ãÓâ#BÒ[îPï‘ï>û‰X§)ЄW©ë³¹N•Ñù°BŸ3„!B©õ~£xî*à©õ~£xî*M,¸Ó;R-=Mºo˜JQöu6”Þ1sµ1.,¬ª¿¹/6f……ÎÔ\íIÁš;Qsµƒ4,.v¢çjhX\íEÎÔ а¹Ú‹¨ ¡asµ;P3BÂçj.v 0f……ÎÔ\í@`Í ¨¹Ú€Áš;Qsµƒ4,.v¢çjhX\íEÎÔ а¹Ú‹¨ ¡asµ;P3TúοQ¼wm¹Úª5z£xî*M,¸Óµ#ÿÙnip2-8.7.0/share/nip2/data/examples/registering/registering.ws0000644000175000017500000004005713224651032021243 00000000000000 nip2-8.7.0/share/nip2/data/examples/registering/example_im_3.jpg0000644000175000017500000001053613224651032021411 00000000000000ÿØÿàJFIFHHÿáExifMM*ÿÛC  #!!!$'$ & ! ÿÛC  ÿÀúú"ÿÄÿÄ7!1Q"Aa2Bq‘#R¡3Cb$%r‚ÁÑÿÄÿÄ!1"AQÿÚ ?ó8P†vìH°mÜ’6îù 0û†`0‡Ø7ìù û˜#ö »¿pÜI. ˆÜ3ðh#?$Èe FÝà H‡Ü0À#rzZæ8ÊÊ0B$ÐîI䀀€Á `1±$w¾˜6Ë]NÚVöÖqéE<”—™wooŒº“Kiã N‹+i¬z"–;,o¹¸@G– #Ü’=É#ô0jtñæMG=ÀØ¥qEñR/÷2U ÿ2þ@Ì T“á“”$$ŒàÛ’kœã Rœ½–@¶ðµ´nüK’Þ4qÔí|_KÍ£(-±›ð;…WÊYlìüIAJ”óÎ _îÇ”ed©š’g€=šÑ€HäHDšKp1©QSƒ”¶H¢¹”î«uK){"Æ¿Uiaý¨Æ6Ùö6zi vÏa¨[?fÿ‘êv½ÐÝ;oh®…¬×ɺ6Õ½¤ÙmNÛÃ0·ø&éŠHÛÖþæm½oÔ¾…²ÊÊ…’oŒúê·«ØÉZTçM=vFÈéùü¦~‡/ø:Ø?Uðu«Nÿ©šÓ¿êgíŽCðñ²À\ÿfNÉiÏûM‘Ó¶ûGìp•mëQTàÒîjY;êúã5Ô¹…,/ܶ½?Á ÞÚœœpðXø†OÔ²3áø(RŠK„'®z¦ÑÉÞé/1¾¦éÞÏ+ÜX±ÕéôÞ©wE{ØêŸ‚Hù$Ñ ’± ,‰Ç¯dö20OÔÐuŽã4­öÎ `Ú¥-‘6‰§m·P¶Û‚i±ºorFíþ¡mœ¡ªxÎè‹XÓ n6§mð1K¥û B1ìM¡x[| ӶϰÝ8@n8‘Ö¤^2êÉ>c P§E6OETtüûŸÿRî„5 ûúòÓÞ~Ó’ñŸ†å;7©Ð‡®’õ¤¹]ÏV…¢—±²¦™Nµ ÒœSŒÓ‹O³ÉËÖuòÝZŠ ÍþU‘ÿ Ðéþ¤—®o,ÃÆú]M ]­¥Ílç˜üİðô6ÝosØ·¨èqÅüj±êœ™i£ÇßüDµ(s±É>¥ç:í<8Í{2•Ÿ]¥š}·9~ÇV~(. #ß–#Ü2ä‘Ùü€Hø5uzšFÑvÿª÷˜Ku‘Ú|¢¾/t;IðMÓxc”ÞÙ„¸¦É¡êLrœ„)¶7MìEaúO#tÛØF”°9M¦EÓ{drœ„)´9MaÚlr“ÙÒÝ6EÒ{R|Òàn›X"°ý7ÙFE|j$НÉ<õ޽;¿ÙÚšNå$¹ËbÞ´Ú¼mYj_Q¯*$ñIF—ð_h”T#Žï˜‘_ã¶Ó)*v¹ø+u±&[ÚíhßÁI¨Ë“ž}cÕR*‹£â_£;kÕž£¯‹Š‘ìά)¯Ý’B$ôîA>ä!ùP>ý¨’6ö À;‰ÍÿYàqì„fÿ¬ö÷3 Úˤ÷Á_œn;MãPý9p†é¾iKºorÔÞÔ›À7ÊOl“Xvœ‡)Kq<±Êo"‡éË”¥À…9p9M´EaêrÝ!¸=Ä©½²5`š,)McõQw+•\*Äñ‹%U÷%×éM·²Ü®óÍwWJ•j’iF0m¿ØÎ ºœ.üQu÷Ö–3ún“tœe“U.êT_šmÿ“¸Òc¼N­úŠuÔv³e¡»h¾ŽÖh¤½ŽrxO¬r÷‘ÙìrŒ/[î²v×qÙœ–±K5ááü8­T¢HDž­Gr öf9'À?`äÝmCϸŒË;˜Ót›íR²§iK)½äøG£èŸJi]FÔ/gÔÞñ¦°mðݽ*©ÆI.Ç«ètàãry<ºŸj²Ãég„©Ûªu4ß7må)<³™ñн:ê¥KòVu%Å)ú£ÿéíVÐM,* œ“͹{*zø³Ä^ñ…êê6ÈÎhoRR“ÂLûƒRÒ-u :–·t!ZE‰FK)Ÿ3ýGúw/ ܽKNÌôê³~œ´û~‡o‹Ï7ë_U/\%'È> êrÝÓ—ÁïT~›ô­Ç)I%¹_Mð7MðMÞùC”ä!Mì·¥-òEaúlr›î!NFåWä1e ‹¹³Í]ʵY™ªÆpYª¯¹šªñÉYß$ùϹœžq]®Üªz䜱šm$yïG‰k§¢N›{ͤ‘²{~•Mú^óIƒôìrÚ]»Äv;6šJ;pzn¶¯zñR)¯#³/*mA/‚’ó†xF9ëÈòrÚÄ:­¤×1gSxù9ëên¥9Çݬlré†C/ôÇ»G°¬ª¥6»1¯b¾t¤êIåîÛXØÉS¬›cÆÉ”zV‡sGsÓ´;Ô”R‘áZM÷”ÔzÏBѵnžŸYÉäÊkÜtêªpL¶‹XØà´]r 2’:ºÔêE8ÈáÖlJÊo19¯éTu}ò¬ãVœ–|l˯Ä&¹¸¯ 9=°f{/XøºµZßV¶šÄ©MÇàßNC$­ Þ-Õ*C2¸–1úŠSgØû§©±È1rÝ Á’¦øÜnKÜ®…Eló¾Ià²UŸs?;ä¬U¾L•o“8Å¢­é%VoÜ­U¾L•mŒà´U–9'Íù+U]Œ¼ß‘Áeæ®å>½%R•mþlŒyß%V£S̺¤›á'°þ t¤uÚzÄQÊéëxu‚Ù"6-«mI~…ãä¼¹x§û7{²2ÅÒËe-ÌyEõÌve5ÌvlöË\}XôÖœ~Yƒäjú=“Ûf²+ì{´{%—†gs§Û\(¼U¥ÿ)3›ÁÖYxïS±Óí¬©XXJ½(ÒŒ§NnME$›Ä¹Ø¼Ù>ŽSØÊœ¶éfè=ò@rYRšégG¦ê®)Ë å!Q5‰lͱœ“Ìe‚lèõÝ/[qIõ—ˆZŠ]äð;=V­‰=Ž‚ÛÄŠ1Y™Ï¯YǺCÄ1pIÌç|aãiž¹«½5§ˆ,ï–y×í­(·æõOA=ÎV×®õ˵RâMSÛ ðf<ý²F¸ÎUjJ¬å™IõI÷ln“௤÷„’G]RÂ2[3|jà¬U¾Mª·É<>r2óWr¹Vß“/4Î 5w2Ur¹Uù2UwäpY*¿&J³îW*¦ê1¸®ñFŒçÿ¶-™Àò¬û™*¯¹º‡‡uûˆFT´»‰)=½&úþñ-´ëi -öŽIìÿ¬)çl#RN¥óyá#*±¯o>Šô§Iö”pk·‹w'¾YQ®‹O[£­Óãöœ½…,4ÑÖX.”›ØðÒNÝ}¥-ÊçbÚæ¼0R]\ÁgäV\-™OqpX]^Eg‚ŽêõeàöÌj“V‚U£?Ø®{l?WͦŸf ÏhÔ€BÜ{‚å‚62Mû20H×4™Ky}qø™ÓV¢ž0‹†ö9»Æ¿Só˜FØMÉúžFé䯄ÒV–Û•Z²…D—&Õ]j·td«lO¢«òf«J¿Éš¯¿Ü‡´UÖLÕeܬU¾Q>wÉœj¯É¾Ú®ªÆ•¹Éû"®ÙÎ⪥Ëç±èÞÓ©[Á4³'Ë#Wóºƒ)Ô諨IÔo~…Â=OGѬíiÆmáñ—KŠÌQÛi´øØáòjÔU•­´aˆ¡øÒôðM(q°äa²ØæµŠ;ýKÕ)¸_XR­³(¬¯Üóíwée¬S¹ÐóJk&[§ú©eNŽÆçÉsðëæ¹P¯¦\;kª¥V<©,ѽXû_ñ7…­5Ë ‘Q¯öê.Sù<Q·¼Ñu¶7±pœÃ™wG^56©íau~ñ÷wWï}Än¯ö~¢ŽêÿŸQí2Ó—WüîTÔºr–r!ZîS—; »ŽÌö™iéÖRÙ³W;ù,)¾¨F]Ñ\€½Áá‚àÁ h‡¹Ï^[Ww•%ri¾ÇBðrΕd÷ƒþ ^dy‹GOÒŸ$8Aóÿb¿Mëšë—É*«÷ÉÑ:Ÿ4ãü;KwÿÓª8ÍU^ì¹vÏþ4¿C¦ÛkþGaÕW𻙯«êIn>ôºÎHÊŽ™N5£%6ú^Z‚ãF·Tú&ת[ž‡¥µÇs…±ôÉ3±Ój¬GsŸ~Ó]ö—5ÕÎëLšéGiµRéÜítË…Ò–N-Ä×gAå!ø¥„Ê{*ŽMn[ÁìsT·Á"eý‚M’«Mkõ7Ã?êš ïí ¿hœÖ9”}ÑéÕ ûºQ­Ft¥(Éa§ØôÆ®oHøšîù¬å”•ï¤ÖK¨–kCñΧ¦ÓÚªÜGº8ÙWß“íævuí2¸ù4Êç~JçY·…—ú!Bî³Å:2/‚ø7Êã÷/tê¾mœ^xئ¥¢ÝÏ¬Ô «5eGËUòóÁ7À%ˆ\0\ä$ ©}æ$ÒÚO>æéÍÂyö:]2烖MgrÒκ„—±ƒÑ´ë¬cs±Ó.rã™_aw²õfŸ|âãê9u”½kM¨ŸO©%²Ã<ãKÔ°ãêÿ'[k©ÆI&Î]e.Š3ØË­rWÓ¸ŒÖS6y«¹åÆ7Ô’bu^x3•EŽEªTK&ÁòŸ×Mu~¤;Šu!:Þ–ùÝôyµ- ‚ë9Oº=SêÍïã>¡\¥•Fžþç³â·ñ³ájV6´WôèÅ|´2¢— "@± w¸{ ~Tì‘ Bxy$Å€Ê~æØÕç&ö6e`‘wewÓΦÆõ>Þ2ñF¤õojÝMÆuZ‹Îv["™$úrrq` H¾I@8Ý¡4×É œï”`k ™B¤á,®ãS¾ÆjIì¤`¶¶Ô:vl»µÔ–Þ£O96¼áÃ&ç£Ð¨ê‹oWù†¨’û7Ž£RŸç"¦±]ÅÆ›hãgæ¥âzvt”Ô¥Jù<æúúãP»Íy9J\.߉ԩZ}u$äþH=3™‘À‰Ú€$‚@$Kø1\–ýÃ~ä€@?B@€$ÿÙnip2-8.7.0/share/nip2/data/examples/registering/example_im_2.jpg0000644000175000017500000001127613224651032021412 00000000000000ÿØÿàJFIFHHÿáExifMM*ÿÛC  #!!!$'$ & ! ÿÛC  ÿÀÈÈ"ÿÄ ÿÄ=!14r±"AQTa’2‘#BSq¡5CbÁÑ$%3RscÿÄÿÄ31!Q2q"ARa‘¡3±ÁBCáñÿÚ ?éµUUB¶{TÉn‘ßxø¦zÕW™“ÞQU¾ÏÆîi•ªŒV‹¡Ö«®‹¢Ø{­Õy©}ån«ÍKï)”/\«°ç—È{­Õy©}ån«ÍKï)”#•v.÷[ªóRûÊ:ÝWš—ÞS(G*ì\;!î·Uæ¥÷”uº¯5/¼¦PŽUØ<¸vCÝn«ÍKï(ëu^j_yL¡«°yp쇺ÝWš—ÞQÖê¼Ô¾ò™B9W`òáÙuº¯5/¼£­Õy©}å2„r®Áåòëu^j_yG[ªóRûÊeå]ƒË‡d=Öê¼Ô¾òÕÔù™=å5ú*ÑTѤÓP—M;osý“rq‹Z­È99cJ¸Ø—ÎôEÇZªó{Ê:ÝWš—ÞS f}Pœå]‰ª¸vCÝn«ÍKï(ëu^f_yÿ)”#•v.‘.šª§­Åþ¢Oœ}ãâ„Í6ùy¡38­v+r«ŠšÑ W¾Ôq»še=W¾Ôq»še=‘e_¡{ „!(è!@„!@„!@„$;BTˆŠÆ—¼0m%`çÄ>%Nbuãe˜Oå’èBù¿ ¥Ë:nK&y9•OcSŠG ñï•7SßX|ß}NÀ•F¢”KC ÆwhÍIVéê“:¶%ñÈ¢Gi$ÿtB’‡)·È¸Ûͦß"ão4&lÜ«Ëõ¡j÷ÚŽ7sL§ª÷ÚŽ7sL§c²'×è^¡J: íWt°Çtì{³±î fmxçŸì3eе«)Юeê­BÏ¢‡$Ôã.…ªŸñ?•ŒüJìBH}d þ[Tw×Â>ëR?Õùð8¯‹B…&$Àvø«FË&߈ê_ðcªI–¨TOÅí÷“Æœ6=x~&¥o[Q×êi²OÇ$ÚSõQÝÌ?œ~©¿Å4/úØò¡¿©µH|T +‹¤éY`æäæø>û.µ´Û«VAôdv´ÜõS#ip*ªƒµÝ¸Y”ϤRHOzì:_)ƒ†•¹8·YߪãÿÆœ³™Sç¹³æÏe|VeÓú.‹íÐì:?0~ÑrÞJÝeôn´Ôÿ³lµš½Å–µ£«ø;âø-jO¬5‹ûmü „‰T³x9M¾EÆÞhE6ùy¡3få^_­ W¾Ôq»še=W¾Ôq»še;‘>¿BöAºËÌæ¡)l‡éÚÐî‘ùÛ`R$«µóUï™ÀX yÝuÊø‡–eÎo¢ú!·W7ÌɳVzªùjýTªà K;ûÔ%3Ç’M–¯ÕA–¯nj ³¹WM;ÓÊby$ù«MÏhýT)+œ69WM;óÉ@–w§9“Êeœ˜‹ÚTGâ‡>ÑUÎÿ_4ïÍ.‘gµ"öL[ú”Y1oêYÙ¦vj ³¾é1cÑœ‘ºÁ´­øF$Ú€Kâ=™˜•Û0ùaÄYO54‚HfÍpØA_%ËU'Ší?4‘õ’Õ`5w.¦ŒÏ¶Æ÷© GÁòž:t½žÄ'“äbÙdÍf™KÒË#»¶Èãv®.òº®–=·~k‘½ÿîŽÕ;S²6§Ë¹oÌŒ¤þ§DÀªu&רBßmÌ.[„HîÊé”rt´q¿¿VÅ_`Ïx›¯é–w-¹Oô’ÿýlJ­è9M¾EÆÞhE6ùy¡3fåf_­ W¾Ôq»še=W¾Ôq»še;‘>¿Bö ù‚2p)»–µÉ~ƒc̸ÉA˜gš´‘¶ïP*\iÇG )t*¥nÕ_3nU¤­Ú JÔâGŽb®fø(·ÅZJÕfú'"ƒ˜«™»Ut­VÓ7"«åjy æ*¥hP&jµ•ª¬N¤ÅTÍÍWÊЭfiº†ø‰;© ÌT¾2åÕ~°ÃãSjåÕu­°—ð¹áƒÑtï… ’1©ì¹±6þ½¥'ûˆÍøšÎ^oÙ%ΔÔ½àÍ[üD­öu½ü¬Ùa=–…аYµé]þSuÍðçÙ ]m°9õjo“…•®,ùd…ð–wÀqÚfßI>W÷ÿÓN„ƒ!dªüú½So‘q·šM¾EÆÞhLÙ¹Y—ëBÕïµnæ™OUïµnæ™NÇdO¯Ð½…BEåÏcOmá¿™CZ¦{m%Ô™#{ÔÅÎÍŠÅÖtm7½ÅÔIÚHºã¶Ç–É&2ž¨¨•£5V«Y™au_+R¤yæ*åneWʬ­Úl HÔâAÌUÌݪ¾P­eiÍ@™©äƒ˜©”mP%mÕ¬­'+]Et$‰ÍR¥Ð—àÀU¹ƒúWž¯ý)uR Ó®‘ðîÑ`øœ¿uÒ4Ðò±½_?•oô9¢ŸFª\OÏ.Ël°R±:Ødü]=8\¿VŠüsï¬ 6¯q[|vqÚ,#zÂU«Üàwu‹4ôl Y†ÌXæ8#0±t YAÝr¦Vô3MÕb¶;Ŧtf5Þ"ëÒ‡‡Ê%¢fw-È©}öZh>h¦}Ã2㙇VLv”S¦ß"ão4"›|‹¼Ð›³sÎ_­ W¿TèîjULT”Ξwj±¢åL«ßgÿÑÜÖSIÜù)µì…"¨ó4ˆüCˆ,,hÉnö0Z[ñ#Z,( HÛ÷ö¸®Žcø–%Vùëkfäí{É]Ié\àûm\£ñu¥~^5qެæ÷æß“>kfÍ ñ3K0ÆPãSôM°Jív[ÂÅw ø×A½˜v²:×dÉš~ÊCàoòŸªùEÛSÔò9®ñX,•Ä,òî­'ôihÑ7:ügÍj»3ï™EÅÆ`÷ŽõV•‚ø5¥sé‹Ë‡VÌdªÃ‹Z㛣?-ÿ+Yt)[™XLÌIaß*'º7Øù1¾µd~¥\­Ú«ænJÒVíP%mÁQ’$óS4æ HÂrVÒÆ]±2iûìœA©P`¿róÐniíܼõD§¤ÊƒOoº“ ôVÆœø$è=j.¥OA·%ªÂƒ`ÑàÖœÜ÷ªz½òWQ0G„ƶҦásìb¼g=8z]Ú2¸¹'Zæë íì­v-´¬‰ÞÊ´{œBÝصo–¢6 CHýŠ\ ÆR6ø, ²HÏ¡VãÅfpyµ*™}ŽÉi¶d¯ñe­zFNs¾'ƒ*^õ¶¾Û¡Úmò.6óB)·È¸ÛÍ Û77~´-^ù?¹ª:úvT@æ»j¼«6­œÿôw5VIµÁOÔôÑ” ¢s¦»c²ßï¡É±ü[_³û.G¤Z=6e€ýÔ5Øtu,6•†Æ4oX;ìïú+º2\³0’GËÕl±>Îa ¸é\+µb( ÏÙþÊ©º$L™FMû¬ž†'?šÐsKbãà%4íÒŒBPÑ [;ÂúÂßÝwù[l–oáΉÀ$’v†ÔV8<‹f6©•§¼®Mâ,šòx„çW¥týŽ…Â«•8±Œ÷zÿ%\¬ÈÙA‘„›Y[¾+¦Œ‹>ZjTt‰:º·êþyè=©é2¥Ðç ÊÜÁ輘2ͽ|ÅA§^zÞ%¤º?… ¼F öíc{GèV§âÆŠA&«ETÃűîU•<':õ­U6ˆ³ÏÆ­é9£[Ðf¦NÝZÚƬÄÝ ®~¡¯u3¿æŒ´}V’\NŠºŒKCWL`[Z'š0rq¦üêÜ}Ì?Œ2«» ©'×ýl[iYU•«ÄœùCEÕX{ŸPK“ïs’Y±.‘ËAG¬m`Tz 4å’ÖPa›;*T þDE d¡Íx3Zöf‡x…_c@X1¥Œ«|9i.S¦KòÝYwbËi­Wºÿèõ6ùy¡Ûä\mæ…:ÍÎá—ëBÕïµnæ™ b2OUïµnæ™NÇdMŒc:”dµZ ˜HùOè™’œH|`©ˆÏ¹{Õ™û¼;cÖ Ä¨n‹²¹ÄÇCi=ÊʃDpì>Q<ŒÊ3wƒæÙÛ‘æ§HÒV?ŒqL•d±âô_¡®F=ê×r¦V¨Oˆ¸ìW§¹ºði–TµÑ¢œÁ輚EriO‚òiO‚MEH¦4çÁyêæÙ…sÕ‚òèZÆ>À Ò­dôB·§VPÖI3ª':­ºäºY¥•µZðS¸ÓÁ³U‡3ù•´Òº·ÎâÐHcrr|i§U˪pU 6ÞµŸø0üGŠNæë©é‹Õ;]×uîVjyÕÆ,Òê³³¸‚¶ÙY+¿”Ï¥ÌúžE²²±Â±üC ©ÐÕ:wØä0³ò8í^! o“—$Ö¨yÓ-ôˆé­¹”€e5qɤ|’~^n Ã>Ûå_(ÓT>7µìqk¸#h+éÿ„ÚJÝ*ÂITëâ4`“¶Fw9Væà×(|N?HýWc1ÄpkžJ 3geiéh ©´Xv«nZ­YKèªcÑjcì«•Œ¥ÏbóUNcˆ>Ù^Å_2—fIk)¨eÀÚâêM3Òiš_ sáñ*m]ô~ÌÌÓo‘q·šM¾EÆÞhWn}—ëBÕïµnæ™OUïµnæ™NÇdO¯Ð½…H• GK,&xâ’Q+ÃA2U™ª¤?ÏgÕfRª\¾VM®Ù6™xÊræÔÑŠ?ÇgÕbñÙõYÔ(Ÿ‡éüÌóð‹¹¡éé?ŸT†jOÆgÕgÒ$ü?Oæbü*îh:jKÎϪ­Åj#êâ8ž­¶Ê?ÌŒ~ M6«5oB£ŒAÓ‰)'¿CŽD^âH\ç‚áÙ.¹‰ÒkF\¢'[%¸Æž‡5‘ÆñzC®M–>¶-CeÕqŠªë4•Ï1jWµù°…3*§|4BEèfä46©’D|] ÁäàÚ§¢D¥5¡êåÑ>ãnÀþ#á:MH'™°KàZónd.dk‡™]¢sšððZ[¶÷ QÃ1dépšèÑè+~NçèÛiÙnâ¿BöBQÐB€!B€ÄÃ0Dúòöݤ ªâ¸ï#PŽû•ó³]–%fq,>à›-aæzˆ$dYI®ÎVr–´èr|O ÖX\[Ö'³uÛ16÷!«'_…“{5\Ó†Ú8}n ªI ·äªÝ†ÈÓ˜]v·½û ž\ÓöSãÉ.¬óÔçM r¾Ñ¬"z­!ÃáŠúî¨`m¡šÐŒ\ UÑ>è©8ÉÅ¥aRü—\RÝ|)©èLÁÇ–ND+s³St©¬iÙЄ QÊmò.6óB)·È¸ÛÍ ›7*òýhZ½ö£ÜÓ)ê½ö£ÜÓ)Øì‰õú°¨BŽ‚„!@„!@ƒ22ý¦ýz)–ð^v{ ôž ànÉ;±·B G €ª*ðáv¶áh NðºMBrÕNÆÎWÑ™ áߤ ÿcUƒ~ÇìªäÁ qì~˧šPórÄ7ƒX4}•–Ðí/&÷¤ þýs‡hœµ“©fw¸tš|>Ž:ZvjÆÁõ>)ö5‘´1 ¸/Cfj5×Ê×ó_Y?¨%Bà!@£”Ûä\mæ„So‘q·š6nUåúе{õG¹¦¬„'c±>¿Bö "ÈBQÍBȲ€Ô,‹! BȲ€Ô,‹! BȲ€Ô,‹!,‹!P²,„ 5 "ÈBP²,„ 5¦Þâão4! ›7*òýhÿÙnip2-8.7.0/share/nip2/data/examples/registering/example_im_4.jpg0000644000175000017500000001355013224651032021411 00000000000000ÿØÿàJFIFHHÿáExifMM*ÿÛC  #!!!$'$ & ! ÿÛC  ÿÀúú"ÿÄ ÿÄ<!1"AQa2q‘¡#BR3S$4’±bc‚ÁCTÑÿÄÿÄ2!1A2Qaq"BR‘#%Á¡±ðÿÚ ?ùôz™Ä€®Þ/{¿¸wp( æ>c1óÌ|Êæ ` =)SuªrS‹“ÆpŠ%óÐŒŒ2ÀU¸®¿bœÑòdŒ9£äÇ2ò``ÞL…â€b>Cò Œ/"»yd®’I¼a爷%Ón¾Í´W­qT,ãÔá.ö:,3[ÖtïÂõ«Ë9Á§No üηþ´ùÖâÞÛ—0…7—ó!{váØéœhïméòиß)mŸ‡£xÿ==#|5ÇÝ[4­i‡φ}“|íc¡C¹5%r2PÄÀV,ñܺ’tå×¢<ßBM)Õ¥%áÔ·l” äý ¢²Ò>”ÿ¶‘´´Ã†'V¦2ü‘Ÿöõ¡Fç„ÕíNU(ÉË>Y)ì~ÆVú}­>˜JOù:w锵^¿²œsÏMÅ|Ï›µ[‹§tŽ»=§ŸÛ'léΛËúŸ3Ä¥ÏâËIú½”ôíZæÒkF¾ä馬‚œ{3ˆ’ÃÀG«=X°S/8*R]2J!8·¢ MNÞ”g7›ŠØ¶êîj>íKiÏ«òE±£ØÂ4éG9êüËRrOèöͣڢ췈úŽ©IÇjUðWñ½­ê} mÚ_ÓBu:ûOèS×$n=Á§]Û1>ûQô·«ô+ïUßKZ¿Cb…¬p³“Ú6‘{oü•«>h¯ÜZEݳYU®_KZŸb½¥æ?ÒOêm”ôýð’$-2M,Å£(z—Ç¢õlÓ¿¾–²ú¢å Gÿ¨ÿÜn‹L—NRM-7mÒ2#å¾åØìZß?É¢*:œºZ¥ÿ‘_uÕ[ÿO÷ÿ¸%úWÐôŽ›—œuô/ƾåå°íÿ_äçþåªõì!þóΕW)¹8áÇiEø3¤ÇKÿ§ì`8‹‡jÒRÔ¬iç ó —Uæ.¢9¬Ý6*k§ÌÒç+¹­$ªæ ò2ú«»Õmè,·*‰ay˜µV1töK©½{<±÷Ž"§QÇ*šËþNC~Ôû>‚Ézã%£¯®õê~µ…¥½.\'ˆ£~½I©ó,Å®ŒÒ¸bž#K >†õq84Ïš÷k;ŸÊ|Ií—E–“ÆõªF 4ëwÖ:œÓv}Aí÷DΛCTŒw¦ùLJSæ(ËÐúÁ»‡¶í5·ñG‡ûNº¿.æŠ&Tc ù±5ì¬õ`’Xråß—'•ÅXÛRí>)ÏhÀöæQyk$: 5µ)J¢o²YŠ&+/ÃnÒ{^¢5g Ô²ÞÕ¤êUY«=ß¡6•¼›L¹aÍÏÁ™0†É“ä¤W®ˆWvB•&’&S¤ÊÓåò&SQ~Ph²Itèet.‚^DÊ\»lSå%ÊVûô&Ò ]O"e%"Ÿ(´â[NÝ?L-¢Úîž”ñäK§ÚG–Zhð…”[èHŠ]Á&š^DÚ.8èJMe£=¾‘=›žãŽT‘™§ËûI 0å̶~jrìC²XîpÞ1áÉèwÊℵ¹“ÊKhHÜ}›[º.W-c¨/‘¾êÚ=ž³¤Ô±¼I)G<ØÞ>¦»ÁjA<ÆmKÏsμq¨éÓµùŸ?± Z8Õ©vG³;— ~]HÇÏ ßê®xdиnŒß,ß‚7øÿE|ÖG06k± ûCѳÁ·ÖÜ™’ƒ’^¨øvæÞV÷uí¥³¦Ú?Cï!–õ)ÉwdšgÃÞÑôoÂ8âþЇ$e6Òô;é¾áÓuÚ)>ÿ‰³›ÝªáMW‚ÏRìðúƒÜŽq€R=YR‘êÊ’KJÝV®|`‰xË!9%ªåxÃpxfób—N¶ÈcÈÐOÇG¢^FFƒÙ3)˃Ô= ðdºyÛ ‡M’é½Ë}E¦É”ó±2"S—B]7·R:‹r$Ã9êM¤Ù lM¤öEF;dÚmà—M²$J§/R—"ÓdÊyÆäºKn¤:r%Ó’ÁE¦É°ÎÄ©¼Â8}0šK«É|keòxõ#,¶ù2]¬\¥Ï,EAåùlcx2Û)j”bä¼ÏŒÜ]9Õ¥/Š/ßÚ­¤.tË›i,ƬZhøw‹t·¤ñ=å«‹‹SxG°Lµù…Ú>ܯös;­xjf¾=¬Ð€¹è‰ZÛЋë%ÌΓ¡Ü$¡Þ9¥›Z5"úÁn‡IÔ%M(¹žM¸7=DÜûä¢úúÑ߸PŠä6N©¥^ÁÑŠxÜù·FÖ7§Ðéz?'ÆS5±“ƒ0´×ËK<àìñ«Dö0š»¦Óoiõ>!]’J®[õ#^ë*q\Õ2̙ꉵÖoÙSŽœ=¼hpÓøªÛZ££¨SjxýñÛ?LO’½ þ£±û~Ô©\GF³„Ó­:/²Gë+fü0z.Ïd§£ƒ—Ôîögfß[ŸþäÊ%ÞëâI†7Ìß©*ÇSk“tß$êi¤™ìêb=r@í_˜í[Xæ)&ªÛuz÷SÔ¬fÛëДF2d_6_Ûz˜Þ×&WµqÇ4›É^QWOµõe²«Ý{I¥Ÿù+*Óì\Ô<É'âÍ;ÊI¾«s¸é{S¦½Át ­ô#Ê–Ã^ÛJrT ¦žV"ñ«Î®cÿŒÞ4×ÐÚ¨?ɉªi¯á6»tyåŸ ¾i¸‘j­Ù6Xå!Õœs#¾<–™ ´s*{vнӈ¡¨S§Ë ‘Ý¥ÕŸUV¸§ñwÛVOQንá ΓÎ} Ï„uïC»Õ/IpÿsY¯¯Ì¥¤| ·*>ã¯B‡Õ‡ÀtªÛJÒo½„ÈBs¥5ÊÍ>ŒçNjp“Œ“Ù£a¶ÕhΔcu,T[s%Ôä7}¦s›º•œ÷EÄý ®ÃWtÚŒ¥†ÃN×9cTûœÊ•;ôªÆYòdºW74~ez³ŽžšÈ¾™Eÿ‹)ŒÑÙí¸†i/ÌûžÕ¸’1‹­^º…(,É·àŽ)W‹­ì“í.;IÇôSyÜÕõ^.Ô5Ïòùt-Óø"úüÌÝÑn¢_‰a:?Û©—âX‰’ãN#—ñ]{åŸwŽ)ROö¯äÅBJQOÊiIîK„’]OBª¸ÕvG§ÑDh­UÈ› ˜Y=UoR«¶Ì§jüË©—pd»EêW´›1ݬ|ÊÆ¬sÔ’pOíw º„Œ|«:2ç‡{ЕamwªÝF­>j²xkÁz±)Æ ªO¢ÉƸ¹Má#ÒSmó#/§ðçk<²³ÓëÊ=¹pŸòoü3Áz~Ÿ*w°W—]{ß _¢:žFœ=—í]ËkQ°ÕÔ?ê UÔyªvœßÆãR\é(¿ÜÙ¹âJ4!8*³Oô¯ý™Z}–¼W²‰IG–Ë¸ÙÆæŒ'ㆎuŒllžµRú’Œ9aó„òÙ€”œääÖg¸øOM©ÒèÝ7Ç >2sù×;: ÊÄÖ€=èÀ £Yh&û\¾…A#$*ºm•çUJqr{ò²ÏÂéÿz¯ÔÈßD~F\u·ÁtÆm#ôØ®•ª}J~ÿz§ÔÈÑ‘_¼5?­˜ïß÷ê}‹^/ ‰ý“ôGäUïWëf7ðÙÿ~_DVeIMGÞ$²ñÐÈž”?ÔCæS(E'Á>òÕ~¶m–VѲµ¡mÚ„V[ñfÓ§\wl×'ñ/’%Ù\J3Ã{K©}VÉúä¹ÊÎ_s£éÕ×tÜt˼5¹Ìì.ð£Þ6Í:ö)Ź2F–ØruÍ"é7ÈÝ,ë§¹ÉôJ’qÜÝìõ8Çû—!gI“¤ÕùO ß(TN+sÖR^f¹o©%§³Ô“ýFrº-e{…]=Ï]AìÍWPi½Ö|̽åï4z˜ ŠÜÒf òRx9ÓQ¾ò×^Qáþ*ÔôÞ¦!YÊžV+ÝUßW©Mªn0^ ;³pöç8/hO’YÍg*ó:­³ÂÚ)×íÌ›çèmiÜ­•1Çê_ÜW–eR_ù<‘å%6“›~eƒiF’:ÅPKìcNÙÍæLôäìåÜ,yÎï ¢2p[@#ð°#ð°T¹d¥äP>€œf§oJ¢Ý8¢úsqyF'D¹u­åm7Þ†ñù-ÒÙ]¹éžŸS(¿RòåË+Ì4™³XÞcš *’„–ænÎñ¯Ôj¥ê²t½?RqqÜÛluf”_9Êm/^Ýã?k¨8¥‰Z5vUƒ­ZêýÅ™}É‹TO¤Žkmª4¾"u=Soˆ¡¶cÉÉv7ªšŠk©¥ä\½Moñ<þ­ Ú­:P•z“Ä ›{ø"s’HÇ”e'ÉÂ=´\S¯ín”Rå„Tšñx9ÒhÍqVªõž(¼»rrŒê<7äaœy^eÑÖêÓ·Ý#¥ª=¨”e` #ÑŒÀÚ…ÅKj±­Mî²UsoôÚÝw‘§glí/ëY¾ïz1fŸsÛÖ®¾>$T™³&ÞXU”%ÐmsFòš”±¼-§f¥N„¹ëctF‡uuVòâUëIÊRyÜëömžJJë–>„×§QæHòåRN«—yøç É–#Ñ€¶X€ÀÀn7¿þ>€¥3è3èWŒì›X)‘Iu:“¤ù©ÉÆ^hÊÛ뵩ÅF½%W>&##%‹´õ\±dr968ë6søéÊ"éj¶ u)¿LÖFM\¶M$ŸÃÿ$õ3c–³i>H9KÔÇÖÖ®ªfÄ"üŒfPÊ2iÛtÔó ²ýœœÛÌŸ\–oè2†Q²Æ y0ÿÙnip2-8.7.0/share/nip2/data/examples/print_test_image.v0000644000175000017500000650504013224651032017554 00000000000000¶¦ò% q=j>q=j>^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ª^ ªzœ¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~¤ ~~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†~é†xùûnï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—nï—‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁ‹ çÁšûñ˱áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áx±áxtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtLtL|ȉùˉùˉùˉùˉùˉùˉùˉùˉùˉùˉùˉùˉùˉùˉùˉùˉùˉùˉùˉùˉùˉùˉùˉùˉùˉùˉùˉùˉùˉùˉùˉùˉùˉùˉùˉùˉùˉùˉùˉùˉùˉùˉùˉùˉùˉùˉùˉùˉùˉùˉùˉùˉùˉùˉùˉùˉùˉùˉùˉùˉùˉùˉùˉùˉùˉùˉùˉùˉùˉùˉùˉùˉùˉùˉùˉùˉùˉùˉùˉùˉùˉùˉùˉùˉùˉùˉùˉùˉùˉùˉùË}øˆ}øˆ}øˆ}øˆ}øˆ}øˆ}øˆ}øˆ}øˆ}øˆ}øˆ}øˆ}øˆ}øˆ}øˆ}øˆ}øˆ}øˆ}øˆ}øˆ}øˆ}øˆ}øˆ}øˆ}øˆ}øˆ}øˆ}øˆ}øˆ}øˆ}øˆ}øˆ}øˆ}øˆ}øˆ}øˆ}øˆ}øˆ}øˆ}øˆ}øˆ}øˆ}øˆ}øˆ}øˆ}øˆ}øˆ}øˆ}øˆ}øˆ}øˆ}øˆ}øˆ}øˆ}øˆ}øˆ}øˆ}øˆ}øˆ}øˆ}øˆ}øˆ}øˆ}øˆ}øˆ}øˆ}øˆ}øˆ}øˆ}øˆ}øˆ}øˆ}øˆ}øˆ}øˆ}øˆ}øˆ}øˆ}øˆ}øˆ}øˆ}øˆ}øˆ}øˆ}øˆ}øˆ}øˆ}øˆ}øˆ}øˆ}øˆq ýy^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡^ÿ‡™üö™üö™üö™üö™üö™üö™üö™üö™üö™üö™üö™üö™üö™üö™üö™üö™üö™üö™üö™üö™üö™üö™üö™üö™üö™üö™üö™üö™üö™üö™üö™üö™üö™üö™üö™üö™üö™üö™üö™üö™üö™üö™üö™üö™üö™üö™üö™üö™üö™üö™üö™üö™üö™üö™üö™üö™üö™üö™üö™üö™üö™üö™üö™üö™üö™üö™üö™üö™üö™üö™üö™üö™üö™üö™üö™üö™üö™üö™üö™üö™üö™üö™üö™üö™üö™üö™üö™üö™üö™üö™üö¢øû°óǰóǰóǰóǰóǰóǰóǰóǰóǰóǰóǰóǰóǰóǰóǰóǰóǰóǰóǰóǰóǰóǰóǰóǰóǰóǰóǰóǰóǰóǰóǰóǰóǰóǰóǰóǰóǰóǰóǰóǰóǰóǰóǰóǰóǰóǰóǰóǰóǰóǰóǰóǰóǰóǰóǰóǰóǰóǰóǰóǰóǰóǰóǰóǰóǰóǰóǰóǰóǰóǰóǰóǰóǰóǰóǰóǰóǰóǰóǰóǰóǰóǰóǰóǰóǰóǰóǰóǰóǰóÇ”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú”7Ú€¸bÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔbÔ|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* u|* uf"ÿö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ëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªFëªF몮æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹®æ8‹¯õ<)¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ Aý¯ AýGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍxGÍx_Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#„Ù!#`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e`2e…+M¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…¼ýI…x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³x/ñ³xì§xíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæùxíæù‰᫉᫉᫉᫉᫉᫉᫉᫉᫉᫉᫉᫉᫉᫉᫉᫉᫉᫉᫉᫉᫉᫉᫉᫉᫉᫉᫉᫉᫉᫉᫉᫉᫉᫉᫉᫉᫉᫉᫉᫉᫉᫉᫉᫉᫉᫉᫉᫉᫉᫉᫉᫉᫉᫉᫉᫉᫉᫉᫉᫉᫉᫉᫉᫉᫉᫉᫉᫉᫉᫉᫉᫉᫉᫉᫉᫉᫉᫉᫉᫉᫉᫉᫉᫉᫉᫉᫉᫉᫉᫉á«‘õÍžè2žè2žè2žè2žè2žè2žè2žè2žè2žè2žè2žè2žè2žè2žè2žè2žè2žè2žè2žè2žè2žè2žè2žè2žè2žè2žè2žè2žè2žè2žè2žè2žè2žè2žè2žè2žè2žè2žè2žè2žè2žè2žè2žè2žè2žè2žè2žè2žè2žè2žè2žè2žè2žè2žè2žè2žè2žè2žè2žè2žè2žè2žè2žè2žè2žè2žè2žè2žè2žè2žè2žè2žè2žè2žè2žè2žè2žè2žè2žè2žè2žè2žè2žè2žè2žè2žè2žè2žè2žè2žè2yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyˆ Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€Ÿþ,€j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ j÷ d ôó\õðË\õðË\õðË\õðË\õðË\õðË\õðË\õðË\õðË\õðË\õðË\õðË\õðË\õðË\õðË\õðË\õðË\õðË\õðË\õðË\õðË\õðË\õðË\õðË\õðË\õðË\õðË\õðË\õðË\õðË\õðË\õðË\õðË\õðË\õðË\õðË\õðË\õðË\õðË\õðË\õðË\õðË\õðË\õðË\õðË\õðË\õðË\õðË\õðË\õðË\õðË\õðË\õðË\õðË\õðË\õðË\õðË\õðË\õðË\õðË\õðË\õðË\õðË\õðË\õðË\õðË\õðË\õðË\õðË\õðË\õðË\õðË\õðË\õðË\õðË\õðË\õðË\õðË\õðË\õðË\õðË\õðË\õðË\õðË\õðË\õðË\õðË\õðË\õðË\õðËìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ ìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐìÐÝÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdÅÿdžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUžÿUÿEsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäsÿÿäTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœTÿÿœGÿÿ,3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ 3ÿ À À À À À À À À À À À À À À À À À À À À À À À À À À À€€€€€€€€€€€€€€€€€€€€€€€€€€€&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@.3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@5À@@@@@@@@@@@@@@@@@@@@@@@@@@@GÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀO@Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€cÀ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@k@sssssssssssssssssssssssssss}€€€€€€€€€€€€€€€€€€€€€€€€€€€…ŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀ™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€¡@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¨À³³³³³³³³³³³³³³³³³³³³³³³³³³³ºÀ¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿ÀÂ@̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀×ــــــــــــــــــــــــــހæ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@ð€óóóóóóóóóóóóóóóóóóóóóóóóóóøÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀ À À À À À À À À À À À À À À À À À À À À À À À À À À À€€€€€€€€€€€€€€€€€€€€€€€€€€€&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@.3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@5À@@@@@@@@@@@@@@@@@@@@@@@@@@@GÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀO@Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€cÀ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@k@sssssssssssssssssssssssssss}€€€€€€€€€€€€€€€€€€€€€€€€€€€…ŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀ™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€¡@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¨À³³³³³³³³³³³³³³³³³³³³³³³³³³³ºÀ¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿ÀÂ@̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀×ــــــــــــــــــــــــــހæ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@ð€óóóóóóóóóóóóóóóóóóóóóóóóóóøÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀ À À À À À À À À À À À À À À À À À À À À À À À À À À À€€€€€€€€€€€€€€€€€€€€€€€€€€€&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@.3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@5À@@@@@@@@@@@@@@@@@@@@@@@@@@@GÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀO@Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€cÀ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@k@sssssssssssssssssssssssssss}€€€€€€€€€€€€€€€€€€€€€€€€€€€…ŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀ™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€¡@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¨À³³³³³³³³³³³³³³³³³³³³³³³³³³³ºÀ¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿ÀÂ@̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀×ــــــــــــــــــــــــــހæ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@ð€óóóóóóóóóóóóóóóóóóóóóóóóóóøÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀ À À À À À À À À À À À À À À À À À À À À À À À À À À À€€€€€€€€€€€€€€€€€€€€€€€€€€€&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@.3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@5À@@@@@@@@@@@@@@@@@@@@@@@@@@@GÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀO@Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€cÀ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@k@sssssssssssssssssssssssssss}€€€€€€€€€€€€€€€€€€€€€€€€€€€…ŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀ™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€¡@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¨À³³³³³³³³³³³³³³³³³³³³³³³³³³³ºÀ¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿ÀÂ@̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀×ــــــــــــــــــــــــــހæ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@ð€óóóóóóóóóóóóóóóóóóóóóóóóóóøÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀ À À À À À À À À À À À À À À À À À À À À À À À À À À À€€€€€€€€€€€€€€€€€€€€€€€€€€€&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@.3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@5À@@@@@@@@@@@@@@@@@@@@@@@@@@@GÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀO@Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€cÀ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@k@sssssssssssssssssssssssssss}€€€€€€€€€€€€€€€€€€€€€€€€€€€…ŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀ™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€¡@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¨À³³³³³³³³³³³³³³³³³³³³³³³³³³³ºÀ¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿ÀÂ@̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀×ــــــــــــــــــــــــــހæ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@ð€óóóóóóóóóóóóóóóóóóóóóóóóóóøÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀ À À À À À À À À À À À À À À À À À À À À À À À À À À À€€€€€€€€€€€€€€€€€€€€€€€€€€€&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@.3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@5À@@@@@@@@@@@@@@@@@@@@@@@@@@@GÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀO@Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€cÀ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@k@sssssssssssssssssssssssssss}€€€€€€€€€€€€€€€€€€€€€€€€€€€…ŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀ™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€¡@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¨À³³³³³³³³³³³³³³³³³³³³³³³³³³³ºÀ¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿ÀÂ@̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀×ــــــــــــــــــــــــــހæ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@ð€óóóóóóóóóóóóóóóóóóóóóóóóóóøÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀ À À À À À À À À À À À À À À À À À À À À À À À À À À À€€€€€€€€€€€€€€€€€€€€€€€€€€€&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@.3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@5À@@@@@@@@@@@@@@@@@@@@@@@@@@@GÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀO@Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€cÀ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@k@sssssssssssssssssssssssssss}€€€€€€€€€€€€€€€€€€€€€€€€€€€…ŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀ™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€¡@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¨À³³³³³³³³³³³³³³³³³³³³³³³³³³³ºÀ¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿ÀÂ@̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀×ــــــــــــــــــــــــــހæ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@ð€óóóóóóóóóóóóóóóóóóóóóóóóóóøÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀ À À À À À À À À À À À À À À À À À À À À À À À À À À À€€€€€€€€€€€€€€€€€€€€€€€€€€€&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@.3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@5À@@@@@@@@@@@@@@@@@@@@@@@@@@@GÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀO@Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€cÀ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@k@sssssssssssssssssssssssssss}€€€€€€€€€€€€€€€€€€€€€€€€€€€…ŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀ™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€¡@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¨À³³³³³³³³³³³³³³³³³³³³³³³³³³³ºÀ¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿ÀÂ@̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀×ــــــــــــــــــــــــــހæ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@ð€óóóóóóóóóóóóóóóóóóóóóóóóóóøÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀ À À À À À À À À À À À À À À À À À À À À À À À À À À À€€€€€€€€€€€€€€€€€€€€€€€€€€€&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@.3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@5À@@@@@@@@@@@@@@@@@@@@@@@@@@@GÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀO@Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€cÀ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@k@sssssssssssssssssssssssssss}€€€€€€€€€€€€€€€€€€€€€€€€€€€…ŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀ™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€¡@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¨À³³³³³³³³³³³³³³³³³³³³³³³³³³³ºÀ¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿ÀÂ@̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀×ــــــــــــــــــــــــــހæ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@ð€óóóóóóóóóóóóóóóóóóóóóóóóóóøÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀ À À À À À À À À À À À À À À À À À À À À À À À À À À À€€€€€€€€€€€€€€€€€€€€€€€€€€€&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@.3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@5À@@@@@@@@@@@@@@@@@@@@@@@@@@@GÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀO@Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€cÀ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@k@sssssssssssssssssssssssssss}€€€€€€€€€€€€€€€€€€€€€€€€€€€…ŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀ™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€¡@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¨À³³³³³³³³³³³³³³³³³³³³³³³³³³³ºÀ¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿ÀÂ@̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀×ــــــــــــــــــــــــــހæ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@ð€óóóóóóóóóóóóóóóóóóóóóóóóóóøÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀ À À À À À À À À À À À À À À À À À À À À À À À À À À À€€€€€€€€€€€€€€€€€€€€€€€€€€€&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@.3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@5À@@@@@@@@@@@@@@@@@@@@@@@@@@@GÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀO@Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€cÀ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@k@sssssssssssssssssssssssssss}€€€€€€€€€€€€€€€€€€€€€€€€€€€…ŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀ™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€¡@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¨À³³³³³³³³³³³³³³³³³³³³³³³³³³³ºÀ¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿ÀÂ@̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀×ــــــــــــــــــــــــــހæ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@ð€óóóóóóóóóóóóóóóóóóóóóóóóóóøÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀ À À À À À À À À À À À À À À À À À À À À À À À À À À À€€€€€€€€€€€€€€€€€€€€€€€€€€€&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@.3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@5À@@@@@@@@@@@@@@@@@@@@@@@@@@@GÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀO@Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€cÀ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@k@sssssssssssssssssssssssssss}€€€€€€€€€€€€€€€€€€€€€€€€€€€…ŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀ™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€¡@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¨À³³³³³³³³³³³³³³³³³³³³³³³³³³³ºÀ¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿ÀÂ@̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀×ــــــــــــــــــــــــــހæ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@ð€óóóóóóóóóóóóóóóóóóóóóóóóóóøÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀ À À À À À À À À À À À À À À À À À À À À À À À À À À À€€€€€€€€€€€€€€€€€€€€€€€€€€€&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@.3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@5À@@@@@@@@@@@@@@@@@@@@@@@@@@@GÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀO@Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€cÀ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@k@sssssssssssssssssssssssssss}€€€€€€€€€€€€€€€€€€€€€€€€€€€…ŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀ™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€¡@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¨À³³³³³³³³³³³³³³³³³³³³³³³³³³³ºÀ¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿ÀÂ@̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀×ــــــــــــــــــــــــــހæ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@ð€óóóóóóóóóóóóóóóóóóóóóóóóóóøÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀ À À À À À À À À À À À À À À À À À À À À À À À À À À À€€€€€€€€€€€€€€€€€€€€€€€€€€€&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@.3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@5À@@@@@@@@@@@@@@@@@@@@@@@@@@@GÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀO@Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€cÀ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@k@sssssssssssssssssssssssssss}€€€€€€€€€€€€€€€€€€€€€€€€€€€…ŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀ™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€¡@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¨À³³³³³³³³³³³³³³³³³³³³³³³³³³³ºÀ¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿ÀÂ@̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀×ــــــــــــــــــــــــــހæ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@ð€óóóóóóóóóóóóóóóóóóóóóóóóóóøÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀ À À À À À À À À À À À À À À À À À À À À À À À À À À À€€€€€€€€€€€€€€€€€€€€€€€€€€€&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@.3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@5À@@@@@@@@@@@@@@@@@@@@@@@@@@@GÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀO@Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€cÀ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@k@sssssssssssssssssssssssssss}€€€€€€€€€€€€€€€€€€€€€€€€€€€…ŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀ™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€¡@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¨À³³³³³³³³³³³³³³³³³³³³³³³³³³³ºÀ¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿ÀÂ@̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀×ــــــــــــــــــــــــــހæ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@ð€óóóóóóóóóóóóóóóóóóóóóóóóóóøÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀ À À À À À À À À À À À À À À À À À À À À À À À À À À À€€€€€€€€€€€€€€€€€€€€€€€€€€€&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@.3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@5À@@@@@@@@@@@@@@@@@@@@@@@@@@@GÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀO@Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€cÀ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@k@sssssssssssssssssssssssssss}€€€€€€€€€€€€€€€€€€€€€€€€€€€…ŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀ™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€¡@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¨À³³³³³³³³³³³³³³³³³³³³³³³³³³³ºÀ¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿ÀÂ@̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀×ــــــــــــــــــــــــــހæ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@ð€óóóóóóóóóóóóóóóóóóóóóóóóóóøÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀ À À À À À À À À À À À À À À À À À À À À À À À À À À À€€€€€€€€€€€€€€€€€€€€€€€€€€€&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@.3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@5À@@@@@@@@@@@@@@@@@@@@@@@@@@@GÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀO@Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€cÀ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@k@sssssssssssssssssssssssssss}€€€€€€€€€€€€€€€€€€€€€€€€€€€…ŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀ™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€¡@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¨À³³³³³³³³³³³³³³³³³³³³³³³³³³³ºÀ¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿ÀÂ@̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀×ــــــــــــــــــــــــــހæ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@ð€óóóóóóóóóóóóóóóóóóóóóóóóóóøÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀ À À À À À À À À À À À À À À À À À À À À À À À À À À À€€€€€€€€€€€€€€€€€€€€€€€€€€€&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@.3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@5À@@@@@@@@@@@@@@@@@@@@@@@@@@@GÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀO@Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€cÀ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@k@sssssssssssssssssssssssssss}€€€€€€€€€€€€€€€€€€€€€€€€€€€…ŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀ™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€¡@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¨À³³³³³³³³³³³³³³³³³³³³³³³³³³³ºÀ¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿ÀÂ@̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀×ــــــــــــــــــــــــــހæ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@ð€óóóóóóóóóóóóóóóóóóóóóóóóóóøÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀ À À À À À À À À À À À À À À À À À À À À À À À À À À À€€€€€€€€€€€€€€€€€€€€€€€€€€€&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@.3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@5À@@@@@@@@@@@@@@@@@@@@@@@@@@@GÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀO@Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€cÀ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@k@sssssssssssssssssssssssssss}€€€€€€€€€€€€€€€€€€€€€€€€€€€…ŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀ™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€¡@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¨À³³³³³³³³³³³³³³³³³³³³³³³³³³³ºÀ¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿ÀÂ@̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀×ــــــــــــــــــــــــــހæ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@ð€óóóóóóóóóóóóóóóóóóóóóóóóóóøÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀ À À À À À À À À À À À À À À À À À À À À À À À À À À À€€€€€€€€€€€€€€€€€€€€€€€€€€€&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@.3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@5À@@@@@@@@@@@@@@@@@@@@@@@@@@@GÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀO@Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€cÀ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@k@sssssssssssssssssssssssssss}€€€€€€€€€€€€€€€€€€€€€€€€€€€…ŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀ™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€¡@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¨À³³³³³³³³³³³³³³³³³³³³³³³³³³³ºÀ¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿ÀÂ@̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀×ــــــــــــــــــــــــــހæ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@ð€óóóóóóóóóóóóóóóóóóóóóóóóóóøÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀ À À À À À À À À À À À À À À À À À À À À À À À À À À À€€€€€€€€€€€€€€€€€€€€€€€€€€€&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@.3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@5À@@@@@@@@@@@@@@@@@@@@@@@@@@@GÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀO@Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€cÀ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@k@sssssssssssssssssssssssssss}€€€€€€€€€€€€€€€€€€€€€€€€€€€…ŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀ™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€¡@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¨À³³³³³³³³³³³³³³³³³³³³³³³³³³³ºÀ¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿ÀÂ@̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀×ــــــــــــــــــــــــــހæ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@ð€óóóóóóóóóóóóóóóóóóóóóóóóóóøÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀ À À À À À À À À À À À À À À À À À À À À À À À À À À À€€€€€€€€€€€€€€€€€€€€€€€€€€€&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@.3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@5À@@@@@@@@@@@@@@@@@@@@@@@@@@@GÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀO@Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€cÀ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@k@sssssssssssssssssssssssssss}€€€€€€€€€€€€€€€€€€€€€€€€€€€…ŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀ™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€¡@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¨À³³³³³³³³³³³³³³³³³³³³³³³³³³³ºÀ¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿ÀÂ@̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀×ــــــــــــــــــــــــــހæ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@ð€óóóóóóóóóóóóóóóóóóóóóóóóóóøÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀ À À À À À À À À À À À À À À À À À À À À À À À À À À À€€€€€€€€€€€€€€€€€€€€€€€€€€€&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@.3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@5À@@@@@@@@@@@@@@@@@@@@@@@@@@@GÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀO@Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€cÀ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@k@sssssssssssssssssssssssssss}€€€€€€€€€€€€€€€€€€€€€€€€€€€…ŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀ™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€¡@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¨À³³³³³³³³³³³³³³³³³³³³³³³³³³³ºÀ¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿ÀÂ@̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀×ــــــــــــــــــــــــــހæ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@ð€óóóóóóóóóóóóóóóóóóóóóóóóóóøÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀ À À À À À À À À À À À À À À À À À À À À À À À À À À À€€€€€€€€€€€€€€€€€€€€€€€€€€€&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@.3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@5À@@@@@@@@@@@@@@@@@@@@@@@@@@@GÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀO@Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€cÀ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@k@sssssssssssssssssssssssssss}€€€€€€€€€€€€€€€€€€€€€€€€€€€…ŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀ™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€¡@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¨À³³³³³³³³³³³³³³³³³³³³³³³³³³³ºÀ¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿ÀÂ@̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀×ــــــــــــــــــــــــــހæ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@ð€óóóóóóóóóóóóóóóóóóóóóóóóóóøÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀ À À À À À À À À À À À À À À À À À À À À À À À À À À À€€€€€€€€€€€€€€€€€€€€€€€€€€€&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@.3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@5À@@@@@@@@@@@@@@@@@@@@@@@@@@@GÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀO@Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€cÀ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@k@sssssssssssssssssssssssssss}€€€€€€€€€€€€€€€€€€€€€€€€€€€…ŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀ™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€¡@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¨À³³³³³³³³³³³³³³³³³³³³³³³³³³³ºÀ¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿ÀÂ@̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀×ــــــــــــــــــــــــــހæ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@ð€óóóóóóóóóóóóóóóóóóóóóóóóóóøÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀ À À À À À À À À À À À À À À À À À À À À À À À À À À À€€€€€€€€€€€€€€€€€€€€€€€€€€€&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@.3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@5À@@@@@@@@@@@@@@@@@@@@@@@@@@@GÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀO@Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€cÀ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@k@sssssssssssssssssssssssssss}€€€€€€€€€€€€€€€€€€€€€€€€€€€…ŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀ™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€¡@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¨À³³³³³³³³³³³³³³³³³³³³³³³³³³³ºÀ¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿ÀÂ@̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀×ــــــــــــــــــــــــــހæ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@ð€óóóóóóóóóóóóóóóóóóóóóóóóóóøÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀ À À À À À À À À À À À À À À À À À À À À À À À À À À À€€€€€€€€€€€€€€€€€€€€€€€€€€€&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@&@.3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@5À@@@@@@@@@@@@@@@@@@@@@@@@@@@GÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀLÀO@Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€Y€cÀ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@k@sssssssssssssssssssssssssss}€€€€€€€€€€€€€€€€€€€€€€€€€€€…ŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀŒÀ™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€™€¡@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¦@¨À³³³³³³³³³³³³³³³³³³³³³³³³³³³ºÀ¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿À¿ÀÂ@̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀×ــــــــــــــــــــــــــހæ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@æ@ð€óóóóóóóóóóóóóóóóóóóóóóóóóóøÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀüðü€üÓüüÙüü“ü¡ üIüËürüü‘û×ü)üIüâ ü. üIüúüâüÑûüò ü3üTüñüüüË üÊ üìüÒüJ üüKüô üÛ ü ül ü; ü„üïüµ ü¯ ü„ üË ü³ ü½ ü= ü{ ü“ ü/ ü= üú ü‚üË ü ü: üô ü. ü9 üà ük ýp ü" ü£ ü üE ü ü‚ ü³ üJ ü3 ü üK üN üó ü„ üS üÌ ü“ üÝ üI ü" ü’ ü3 üª ü üš ü™ û\ ûÿ üI ü‹ üÓ üT ü“ üC ü üzüù üz üÉ ü= üô üC üó ü2üs ü üó üH ü» ü« üñ üÚ ü; üó üJ ü‚ üD üj ü4 üû üï üC üó ü¼ ü} ü ü; ü¼ ü ü‘ üâ ü9 ü6 üp ü³ üw üÝ ü{ ü üó ü\ üH ü, üs üô ü<üÊ üò ü³ ü ü¼ üI ü‚ü+ülü% üÜ ük ü5 ü< ü&ü% üs ü¬ ü¹ ük ü¼ ü@ ü ü½ ü üœ üe ü[ üŽ ü¨ ü¤ ü$ ü± ü*ü$ ü üs üS ü¬ ü¤ üó üó ül üó üb üp üÊüJ ü! ü½ ü­ ü“ ü$ üÞüj üþ ü; ü ü¤ üüd üô üƒ ü üã üÇ ü¢ üËü üÆ üÄ üV üÊ ü® ü= ü6 ýp ýø ü¯ ü6üƒü¿ üÆ ü] ýx ý( ü¶ üT ü¼ üÜ ü3 ü¥ ü“ ü¢ ü ü› üUüy üS ü¢ü=üäü³üÚüëüÌüüüeü<ý°üuü}ünü¯ü•ýøü·ýýjý¨ýPýàý€ýaýcýÓü=ý ýRýËýÊ ýá ýÈýxý ýŠ ýèý™ý˜ýèüŸ ý¨ üÜü>ý¸ üß ü& ü ü7 üÌ ü„ üC ü†üËüÙü÷ü-üný` ü> ý1ü ü· ü· üçüæü=ü®üý!ý"ýaýü5 üí ü üÎ ü ý ý° üÿ üïü üžüGü†ü5 ü4 ý8 ýðýq üÅ üS üî üw üüÕ üè üQ ü© ü ü£ üø üH ü« ü¢ ü³ üy ü ü£ ü€ ür ü üq ü© üy ü} üK üÔ üä üª üc üœ üã ü4 ü‚ üé üá üâ üZ ü¬ ü üÊ ü ü€ ü8 ü üJ ü‚ üÜ üº ük ür ü‚ üt üQ üú ü1 ü ü3 üô ü{ üh ûî ü ü£ üs üú üüª üú üä ü; ü¸ üB ü3üƒ üj üJ ü¸ üò üÈ ü ü; ü üÊ üB üd ü ü˜ üÉ üº ü üB ü2 üJ üø ü! üè ü±üñ ü üü ü¹ ü" üÈû¿ ü ü üªüó ü9 ûÿ ü‚ û‡ üÙüÉüÉûÍüùüëü;ü;üÂû~üiüúüóüz üüsürü` üˆ ûwüÙüôü«ü²üyüñüà û‡ü³ü-ü¢üjüµümü@üéüyüÂü;üˆüIüÑüûÇüzü¬ýX ýVýF þýÞ ý ý¼ ý? ý¤ ý7þÔ@HJåFOMKâLInHîDçE¬I”MçNÓQL•@É8þ/;ÿY:ÿÂ+þ£ÿú4ý?'ý92þj3þ€ý©!ü€ýuýúüˆûoüÞüÓüü¸üØüšü+ü©üIûþü4üò üPüºüìü„üÓüŒü\ü|üÚ ü«üZü*üÔü:ü“üb ü³ üûü*ürüÒ ü« ü3 ü<üsüJü‹üò üÄ üe üD üL ü› üTüuüv üB ü ü„ ü~ ü üë ü¥ ü‹ ü´ ü4 üü¶ üK üB ü¼ üô üÄ ü üûüýüƒ üÁ ü ü< ü ü ü ü] ü¥ ü üF üe ü ü üI ü“ üN üÊ üI üÓ üP üE ü ü‘ û‡ ûü ü ü² ü´ üB üa üÌ ü ü‹ ü; üÚ ü ü{ üJ üœ ü« ü üÙ üz üü¼ü+ ü3 ü± ü¢ üt ü üó üÒ üº üs üà üû ü ü‚ ütüo ü ü ü5 ü’ ü³ ü ü¥ ü: ü½ üë üŒ üú ü¬ ü¹ ü„ ür ü ü üt üzüm ü ü ü» ü›üº üÒ ü: üqüº üš ü üíüéüî üt ü» ü» ü… üë ü üÁ üò ü´ ü üã üü ü# ü ü” ü$ üT ü„ ül üÒ üå ü¼ û÷ ü´ ü” ü½ ü¢ ü½ ü” üÈ üà üc ü{ üc üÝ üÓür ür üm ü[ üõ ü% ü üÕ ü” üs üö üº ü¬ üÔü4üT ü¬ üëü[ üÍüŠüBüü‘üÍ üÎ üÌ üÎ üv üV üŸ üT üæüÝüÄ üD üÅ ü üí üÅü5 üŒ ü³ üû üŒ ü• üz ü* ü½ü)üâ üó üµü"üü«üNü,ü ü|üüG üÿüfüý°ý‘üçüîüŸüÄýÑýIýàý)ýýÂý‚üæýàýCýýÐý‹üVý™ ý ýâüýÐ üýxü üÏý¸ ün üî ü¶ü®ü ýi üý üdüN üÒ ü“ üë üò ü™ üF üN üv üNýiü^ üµý°ý ü ý¸ ý˜ ýØ ü¶ýýýpü'üo ýè üG ü= ýhü/ ü×ý°ü/ ýèýHü_ ü ü ü- üà ü? üv üµ ü üL ü ü ü… ü# ü¡ üY ük ü¢ ü1 üi ü¸ ü1 üi ü€ üx ûO ü üø üƒ üJ ûG ü± üœ ü ü„ ü ü£ üz ü üÜ üõ üš ü} üÓ üü üz üó üÔ üì üa ü üÈ ü û? üò ü: üª üb üª üI üQ üÁ ûG ûÇ ü* û> ü ü1 üz ü üa üª üâ ü3 üÚ üˆüØ ü| ü* üp ü:üñ ü¡ ü± üÑ ü9 üˆ üpü«üÊ üŠ ûÿ üà ü» ü; ü üü{ û_ üÀ ü´ üâ û¶ üÌ ük ü ü„üDüñ üÁ ü: üŠ üz ü{ üÁ ü{ ü ü üù üÙ ü£ üQü üÈü:üXü8ü´üjü„üƒüÁ üüñüTüü üSüÓ ü@ ûöüùü1ü±û¿üBü üú û ü°üüóüúü…ü=üüü»üûüêü0 ü9üüiüCü4üü'ýSý—ýÎ ýgýî þà ý ý. ý- ýÖþA>ŸEÕGMFUM„I I^GßHäF3FoI^NOœQ Kg@ÿ~:ÿä9þ¥=ÿÃ,þ^ÿÈ4þ®'ýâ(ý>ün!ý!ýKü/ü÷ýáüÛü+üÁüòüiüÍüÝü|üâü’ü(üKü£ürüLüTü‚üÚü üü;ü! üòüMüÓüü1üúü« ü™ üü<ü´ü…ür ü´ü³ü2üüûü‚ü ü ü- üB üuüãüûü´ü´ ü~ ü- üì ü¤üküsü½ü½üµü~ü« ü< üü« ü„ ü» ü¶ üŒüB üz ü2 üB üd ü üÍ ü„ ü­ üô ü üŒ ü ü… üÊ üü ün ü ü üS ü¼ üÓ ü® ü üŠ üA üÙ ü{ üÆ üà ü üì ü‘ üj ü$ ü üt üû ü| üµ üú üº üMüEüó üêüíüâ ü* üc üÄ üû ü} ü; ük ü: ü ü‘ üò ü ü: ü üA ü ü ü´ ük ü½ ü½ ü… ü³ ü{ ü, ü üü üø ü‚ ü\ ü1 ün üs üyüìüÕ üM ü ütüúü* üí üB ü1üQûü¹üsüãüÛ ü3 ü! ü"ü üÛ ü³ü$ ü• üŽ üÚ ü²üZü üä üZ ü[ üK ü ü´ ü« ü¤ ü üãü; ü| ü$ ü‚ üd üé ü:ü üT üô ü: üc ü” üÕ üd üé ü üW üå üŽ üµ ü ü ü ü¾ üÞ ýPüÜü~ ü üÜ üL üÜ ü‚ü– üVü6üœ ü ü† üþ ü/ ü§ üwüFü'ü] üô üã ü• ü– ü= üí ün ü½ ü üä ü ü] üÜ üº üqü©üZ ü€ üíücüœüªý8 üÄ üÆü¾üýp ýx ýè ý‘ü/ý¨ý¡ýý¨üÏý¢ý›ýšýhýÙýKýKýxýšü—ýýªý©ýü'ý™ýRý˜ýX üç ýªýR ýÁüžü\üÞü¯ü>üo üç ü, ümüUüD üÛ üÝ ü üò üF üý ü… üýüg ý¸ ýñý” ü¯ ýÀ ýá üvü'üíýZý#ý ü§ü¯ ü× ý ýQýjý°üü† ü/ ý üí üì ü= ü« üû üN üý ün ü ü ü ü~üüâ üä ü ü‰ ü û× üÐ üp ü+ ü1 û ü0 üÀ üp üÀ üù ü8 üz üI ü¤ üÆü†ü£ ü üSü üU ü ü üº üÜ ür üä ü* ü* üì ü¸ üz ü{ ü‰ üÉ ü£ ü< üè ü« ü¸ ü¡ ü; ü9 ü` üˆ ûç ü8 ü; üq üó üÁ üx ü© üüñ üÁ üz ü ü" ü! ü1 üª ü¨ üÉ ü* üè ü¸ üº ü@ üüºüÛ ü, üJ üà ü€ ûN üÉüü’ ü9 ü3üt ü) üÁ üÁ ü§ üß ü üû üs ü‰ üI ü‚ ü˜ üi üj üüó ü÷ ý üþ ü5ü‹üÑûüxüü…ütü üz ü© ü0 ûgü@ü{ü¼ ü5ü’ ûv ûwüÑüÁüÉ üüÑüBü¹ û® ûüúü¢ üzü üzüjüÄüêüºüòüÉüìü:ü3ü üÒüNýýþ ý¯ýÞ þ0 ýÏ þ° ý“ ý-þ ;šEG^G§OJÿH€LËIkG)FôIžJ&Q–NØKœ=ÿk<ÿ8þ=ÿa*þSþl3þ°&ý˜!ýòþCý¤ý›!üÿüýßüìüóüéüaü°üeüdücüŒüKüCüKüœüÔü²üüûüÆü ükü"üü°ü±üâüâü¡üë üs ü´ü-ü‚üìü. ü<ü ü‹üóüEü;ü» üÅ üÜü{ üsü}ü¶ü¶ü ü³ ü=üÄüþü=üCüÅüƒüuüÿül üe ük ü= ü<üì üU üôü‹ üC ü,ü¼ ü ü üLüü… ü{ ü„ ü¯ ü üÍ üJ üÅ ü! üÌ ü\ üÌ üÓ ü• ü üN üô üÕ ü üÆ ü üê ü üÓ üä üŒ ü üe ü üs ü‰ ü ü> üB üJ ü™ üB ü4 üÆü=ü´ün üm üô ü, üý ü] ü´ ü< üŒ üº üK üŠ ü¼ ü: ü6 üD üŒ üý üƒ ü ü» üè üs ü* ü ü: üð üé û× ü´ üÄ üô ü üNü¶ üM ük üBü´ ü¶ ü» ü‹ ü2 ü‹ ü­ ü­üåü‚ük üSüyü#ü ü« ü{ü1ü" üô üf üdü ü] ü– üg üÕ ýH ü÷ ü† üL üb üÚücü; ü4 ü% üM üd üŒ üt üS ü$ ü üR üž üÄ ü‘ ü£ üA ü´ ü2 ü ü ü üË ü—ü üÍ ü# ü® üW ü' üv üs ü‚ üÕ üÆ ü~ýüÝ üM üÇ üÌ üŸ ý ýh ý0ü5üü ün ýp üF ý© üv üþüÏ üï ýù üÄ üî ü† ü… ü“ ü2 üûÿüÙ üÕ ü‡ü+ügü| ü üÓ ü½ü÷üôü/ ü üýaüw ýrýkýÑý‰ý‚ý›ýZý›ýáý[ýÛý°ý üçýRýAýýbý ü—ýý ý{ýÐý¡ý!ýýXýXýa ýÚ ý™ü¦ü÷ýiüWüo üõü ü ü… ü¤ ü¤ üÝ ü& ý ýáýJýp ý!üý! ü- ü¦ ýD üoüïüfüçýØüvý°ýhüŽ ýÒ ýÓýü ýàý¨ý ýp üþ üý ü´ ü® ü¾ üç ü÷ üô üu üÓ üþüöü}ü„ ü[ üc ü± ü üc üã ü2 üq üÚ üê ü£ ü ü! ü‰ ü¹ üñ üÐ ü ü2 üMü ü¼ ü\ üäüDüÂü ü™ ü üÓ üj üy û¾ üø û¶ ük ü ü% ü¡ ü« üä ü, üØ üt ü üu üJ ü² ü¹ ü@ ü[ üû ü% üA üË üé üÀ ü$ ü$ ü! üª ü üy üƒ üš üù üó ü« ü; ü{ üó üs ü ü# üËüŠüœ ü üQ ü üa üY ür üŠ üt üÚ ü™ üi ü™ üt üÝ ür ü= üD ü< ü@ üÔ üJ üºüÉüüüëü4 ü<$p ýÔ ü"üI û?üÊü1üüóü@üà üx üÙ ü$ ü)üðü±üB üü¹ üà ü%üvü³ü+ü{üúü¬üQ û÷ üòü;üm ü“üü3ûßüsü{üüŒûü´üúüøüuüÂüÜýjýeý¥ý% þ þð ýF ýg ý‡ þÐþø>[FOGøFßMIÕKPKcFØF`FíI-N[OÂKV=ÿ=Ò=ÿcBþ†/þ4þN/ýv,þ¡#ýý›ü6ýªýcüçý‡üäüµü;ü.ü¤ü³ü²ü”üüküÑü üüƒü üpû®üüBüŠücüüòü¡üéü$ü™übüªüš üküüzüzü ü=ü…üKü ü}üÍüÍüFüGüL üÃüÇü üÍüÔüÔümü… üm ü2 ü üT üòü²üÎüÄüt ü% ü~ üº ü¼ ü üË ü< ü- üü¬ ü+ üô üµü» ü ü² üŠ üý üLüÌ ü, ü- ü üš üŒ ü ü üÕ ü” ü¦ ü$ ü, ü# ü üT ü ü üœ üž ü ü üÔ ü ü„ üË üýüö üt ü’ ü üò üó üc ü ü„ ük üó ü´ ü üK ü³ ü ü= ü> üDüü üà ü5 üW ü¤ ü: ür ü• ü\ ü… ü ü üI üq ü; üs ü­ üm ü³ ü üì üL ü" ü4 ü‹ ü| üB üó üº üu üý ü3 ü ümü3ü3üsüütüeü4 üóü, ü« ü üå ü üW ük ü üE ü­ ü¤ üM üüükü£ ûÏ ü£ ü“ üå üz üÌ üÝ ü, üí üs üd ü üƒ ü« üó ü:üUü)üÛ ü üÓ ü¡ ü£üü” ü2ü#üÛ üZ üÄ üå ü¹ üU üd ü£ üü üMü=üv ýø ý@ü/ üþ ü¥ ý¸ üo ü7 üoýa ýá ü§ ü¥ üÇ ü¦ üo ü¾ üÏ üý üÖ ü~ ü ü ü› üz ü’üüü üËürüeüUü‹üS üÍü ýðýùü/ü§ýa ü¯ ü· ý¡ý¨üwüÞýpý‘ý¡ýýØýIýýýÊýÑýýQýýZýb ýüý˜ýÒýü/üçýÐý!ý: üö üo ý!ü¦üÞ ýÑý ü½ý: ý` üƒ ü ürüZüü ýáýüWüöýXýý` üu üæý(ýÙü¯üVý‹ ýaü§üü_ýh ü· üŸ ü§ ü× ý™üå ü¼ ü¶ üöü6üî ü ü­ ü¯üÿ ü· ü¾ ü ü”ü~ üý ü‹ ü, ü½ üÜ ü û6 û} û? üh ü0 üj ü€ üø ük üb ü0 ü€ üz ü1 ü[ üM üÌ üK üÚ ü ü‚ üÚüã ü™ ü0 üq ü¨ üò üÊ üQ üQ üi ü üÛ üÙ ü üi üŠ ü ü* ü8 üI üñ ü1 ü] üã üù ü) ü3 üy üÉ üê üë ü¹ ük üp üÈ ü ü" üj ü3 û/ ü üz üé ûn ü² üù ü3 üÃüèü´ü üÉ üÉ ür ü‚ ü üA üÁ ü< üá ü* üò ü! ûO üì üº üu ü ü% ü8 ü1 ü` üq üüÁü2ü ü‰ þr þñ ü üLü üƒü“üJüúüËüÒüÛ üD ü’ ü< üü¹üØüûü© ü9 ü`ü° üüüsü“ü=ü3üƒ üº û5 üAü‚ ü, üS ü{ üJü¹ü3ürüãü¨ü¬ü û_üùüÉüœý{ýý¦ þX ý— ý ý¯ ýí ý ý^þ¹<ÍEWHQ¬M•MPOH#HHK_DìO×OáKe=ú7þM:þ—7ÿÑ3ÿøþ¾0ýÖ.þ~#ý€ý;ýlýYüWý/ýåüñüüjüyüüTüüàü³ücüqüü„üü‰üü¡üküü*ü›üTüÓü0üü"üÛü$ü‹üJüëü¼ü+ü»üôüÃüåü’ükü…ü¯ ü=üýüÝüþ üõüNü‹ üL üŽüÌüNü= ü> üõ üÍ üV üDüó üül ü üH ü4 ü» üû ü= üŒ ü# üÖ üÜ üÄ ü½ ü] üÎüü üÊ üU üd üS ü üŸ üô ü| ü¥ ü, ü\ ü¤ üfüM üã üT ül ü> üÛ ü” ü üÏ ü$ ü ü ü< üv ü üe üõ ü– üÅ ü„ üS ü– ü üK üú üì ü= üœ üÌ ü, ü½ ü{ ü5 üÌ ü ü5 üõ üô ü üJ ü¤ ü‹ ü ü üº üà üí ü´ üê ü üÚ üÒ ü ü† ü¬ ü« üù ü! üC üD ü ü üD üS üj ü­ ü üó üô ü½ üc üë üm üÍ üný¨üÅ ü× ü~ ülübüs üµ ü&ü&üÅüOüï ü ü3 ü• ü– ü üž üŠ üY üÅ ü” üê ü ü ü™ üdü= ü} üœ üƒ ü[üs ü¤ ü%üÜü«üUü, ü ü” ü« üëül üÍ üµ üä üc ü™ ü¼ üÕ ü üª ü üµ üì üÕ ü¿ü?ý@ ýI ý˜ ý) ý üo ü¯ ü¿ ýz ýa üo ýð ýâüÇü ü} ýé ýx ü† üO üD ü> ü´ ü üR ü” üÊ üà ülütüÕüë üå ü üõ ýPü‡üÖü†ýz ý¡ ý£ü7 ü ü¿ ýý±ý9ýðý‘ýYýýaü/ýàýšýCý:ýýzý‘ýý+ýýýLý ýª ýÑ ý’ýìýQ ýÙ ýà ýé ý¨üŸý!ýñü¬üýü5üÏ ü» üZ üY üÔü]üGý0ü¯ ýðü=ü&üîü< üo ü·ý ü·ýü×ý™ý)ü' ü' ý! ý¨ ý‘ ü®üÞüÿ ý˜ü¾ ü= üÆ ýxüŸ üÎ üß üÏ ý©ü7 ü¿ ýh ü üvü ü¼ ü ü ü6 üb üJ üK ü üH ü) ü3 ü9 ü‘ ûM û ü: ü ü² üj üz üû üU ül ü\ üÚ üú ü ü¢ üa ü£ ü[ ü ü" ü¢ ü üb ü© üë ü üì üj ü2 ü ü ü² ü ü± ü ü ü´ üc üp üä ü üŠ üú ü¡ ü\ ül üÛ üi ü¨ ü¹ ü9 üà üð ü« üI üÑ ûÇ ü ü ü üº ü üˆ ü¢ üú ü ü‹ ü üè ü” üüË üé ü™ üx ü üY üºü¤ üF ýð ü¼ üÜ ü ü üI üˆ üú üaü:üBük ü ü4 ü[ üHü{ü{üø ü9 ü,üsü}üŒü[ üu üÍ üs üt üò üÛüûüD ü" üz üB üjûüëüÃü‚ü½üx üS üq ü‰ü€üüüÛüZ ü\ü\ü…ü;üJü@ü°üÂüŒüÈüSüßýÅ þC ýu þ¡ ýn ý- ý ýu ý ýLþ)?ÞHQHÞ@,M’L NÿOÔF&EaEùH3I¦QMMÚL?ÿ}4ÿñ9ÿqDÿ=0þXþ>5þS#ýß#ýäþBþÅþØý¶ývý¸üãü"ü!üñü‰ü«üòüÓü­üÜüÁü*üüaüyüëüRüLüSü$üÔü ü™üËüiü[üü’üûü{üäüì üÄ ü|ü” ü ü-ü üü üdü…üBüEüü†ü—üÌüÅ üDüÍüKüI ü üvüžüÎ ü? üGüö üM üC ü üC üJ üª üà üNü„ üU üO ü‚ ü-üü üý ü üz üOüý ü ü üœ ü ü\ üz ü÷ üÓ üU üÒ ü• ü$ üf ü üö üg ü üÕ üÝ üd ü¤ ü= ü üÌ üÌ ü” ü„ ü üå üì üÌ ü ü üQ ü‰ ü ü* üê ü ý( ü? ü† üŒ üE ü6 ü› ü“ ü ü‹ üÕ ü ü® üÏ üÓ ü ü® ü„ ü“ üj ü~ ü üµ ü üÕ ü… üÁ üb üf üA ü" ü ü< üÛ üM üC ü< ü• ü. üÄ üŽ ü• ü üD ü ü+ üíü5ü½ ü~ üÄ ü# üë ü½ü?üsü´ýàý‚üV ý¸ ý üæý` üV ü¦ ün üqünü| ü~ ü= üå üÅ ün üë üþ üc üt ü ü„ üm ü ü ü² üd ü% üä üÌü…üÚüÒüM üí üt üƒ ü* üæ üÄ üÎ üí üÇ üå üÖ üW üüüý ü ýòüý" ý0 ü¿ ý0 ü´ ü> ýñýýy ýä ýi ý± ýê ü ý ü/üN üå üË üf ü%ü2 ü… ü_ü! üçüF üæü6 ü/ ü÷ü¯ü>ü–ü/ ý£ ü÷ügý` ü¿ý¡ýbýý°ý1ýSýü÷ýýùýbý«ýýýÓýÒý[ýšý ýVý ýÄý“ ýŒ ýÒ ýÈ ý2 ýá ýƒ ýq ý‹ ý" ýÑý"ýaü¶ýhüæ ü ük üü+ü… ýi üwüg ýá ý±ýxýýé ý˜ ýü¯ý0ýaýÙüý9ü& ü^ ün üßý üÿü}ý‰ ýè üô üï üü·ýýÙ ü÷ ý ü. ý  ü? ýð üÿü.üü üÌ üU üZ üš ü¼ üê üÔ üD ü ü•ü# üò üb ü8 ûF ü ü ü ü2 üñ ü ü üÑ üÒ üÉ üë ü› ü› ü ü üc üÙ üb ü ü’ üÊ ü} üÛ üx üq ü- üS ü‚ ü+ üK üÉ ûö ü3 ü* ü€ ü üS ü£ üâ üâ üÙ ûO ü´ ü ük ü ü‘ üR ûÎ üy üÁ üi ü3 ü™ ü üI üL üz ü üú üA ü9 üÒ ü” üU ü{ ü™ üÊ û ü ü* ü‘ ü ü ü@üé ü4 ü­ üµ ü üÁ ü) üà ü ûÇ ü ü[ü[üZü ür üüúüÒ ü{üÌ ü=üûüŠüºü3ü[ ü üŽ ü£ ü½ üƒ ü üÄüúüI üüó ü4üÌüqü{üUüü=ü¬üÁüÊ ü‹ü£ü;üQ ü ýòüCü6üôü ükü‹üáü4üõü\üÞý¾ ý-ýÇýÞ ý ýn ý ý_ ý„ ý#þ«=”FUEÿEN*IàMSOˆL€G{J GôF;NòOHgAY;ÿª>ÿc?ÿ0þEÿ5þ•+þ&ýƒýàýðýý;üÿþÐü`üÐü¹ü®ü üéü üRü!üÒüü«üªüIüüŒüÎü~üÜüÜü]ücüLû'üØüü<ü¢ü©üR ü' ü) ü{ ü~ü;üÍüëü=üLüüÄüü{üD ü}ü½ü[ üM üì ü üoüÇ üÅ ü< ü- ü5 ü–ü«üt ü» ü~üt ü6 ü= ü} ü% üD ü ü}ü©ü üt ü®üžüú üô üý üE üL üÖ üMüý üŒ üE ü] üL üL üÿ üŒ üe üŽ üt üŠ ü• üÎ üÍ ü ü ü üó üã üd ü– üÑ üÊ ü5 ü üÕ üÍ ü’ ü\ ü– ü ü‚ üB ü« ü‹ ü- üƒ üì ü{ ün ük ü¼ üŠ ü ü üƒ ü¬ ü5 üŒ üC ü;ü ü$ üÉ üþ ü† ü² ü ü„ üÛ üD üC üõ üÌ ü½ ü¼ ü$ ü„ üË üö ü® üõ üÄü…ü3 üd ü; ü| üÓ ü ü„ü=üÛ ý° ü® ü1 üà ü× üµüvüìü< ýÀ ý* ý¨ý ý¹ ü¥ýIü üŽ üÅ üd ü” ü¬ ü¼ ü, üëü$ ü üu ü¾ üì üL ü… ü— ü5 üŒ üÅ ü„ ü$ ü# ü< ü ûoüœüM ü– üÝ ü$ ü^ ü] ü\ üµ üÛ ü- ü üÎ üÖ ü– ü$üüN ýù ý² ý¸ü/ý‚ ýÙ ü7 ý: ý  ý¡ ýé ýRý ýƒ ýY ü¿ ý˜ ýè ýP ý`ýi ýÀ ü ü ü ü]üZ üã ü¦ üý ü‡ üDüüüÕü¶üüõüžüÇýqü- ýÙýZýýÙýáýý¬ü_ýSünüŸý`ýÉý‰ýúýèýªý”ýQýƒý}ý ý ýýó ýËý¤ ý‹ ý“ ýK ý³ý ýp üOýZ ýy ü×ü¯ü¾üw ü üe üSüªüö ü­ üMý ý¸ ý üöý›üg ýQ üO ü· üï ýHýpýèü'ügüý üÞüvý ýØ ü^ ý¡ ü& ün ý¸üü.ü< üí ý° ýÚ üæ ýjüo üõ ü6 ü† ül üÔ üÖ üÔ ü4 üÜ ü ü‚ ü< ü0üc ü¢ ü¢ üd ü9 üˆ üÙ ü‚ üpü  üÛ üº ü™ üÓ üê ü: üé üÍ ü¢ ü{ üb ü) ü ü ü) üË üà üÚ üS ü ü« üA ü¥ üŠ üÑ üz ü1 üÉ üâ üi ûO üp û~ üû ü½ üð üó ü" ûw üH ü£ ü0 üû ü9 ü û ü! üâ ûÏ ü› ü8 üê ü3 ü# üÁ üÅ ü ü üüª ü* üÁ ûþ û üy üº ü› üâ üÍ üÊ üÚ ü=üª ü1 ü{ ûÏü© üÐ üc ü²ü¬ü:ûþüûü¡ üÁ üCürüÒü„üóü üY ûüƒüSü ü<ü† ü ü[ ü$ üBüúüEü‘üêü³ü2üÌüBüºü[ü±ü+ü<üÔüÌü“ü²ü©ü‰üÉ ü³ü¬üDü"û÷ü«üsüòü`üü»ü ýÜýVý^ ý% ý… þ9 ý¦ ý ým ýÔý¶@UFÔIcE$J…LëMMßM,GnHàGjFuLÖMUD®>¢8þ¿=ÿ$;ÿd1ÿ0#þ/ý‡#ýÍüvý™üoýÉütüoýŠüsü²ükûïü*üŒüIüZüæü#ü+üjü¡üZü¢ü üüKü»üÝücüãü=üü‘üQüËüüüzü5 ü<ü¦ü=ü¤ ü^üæ üüÍüMü>üÃü ü üZ üu ü ü ü_ üü üM üƒ üO üŒ ü6 üýÈ ü ýÑ ýüµ ü´ üä ü ü½ üV ýâ üT üâ üU üM ü¤ ü üU üå ü= ü‡ üD üL üþ ü^üC ü^ ý°ü¾ ü\ üS üÄ ü' üÿ ü ün ý˜ ü üU ü üÖ ü‡ üæ üå ü] üÔ ü ü üä üÔ ü… üT ü– üµ ü ü ü üì üô ü6 ü4 ü üÆ ü† üE üô ü¤ üþ ü ü‡ ü$ üF ü ü¤ ü– ü“ ü" üR üB üÝ üý ü„ üD ü4 ü„ üL üÛ üL ýà ü« ü üD ü´ ü? üþ ü üN ü÷ ü üõü®üµ ü ü ü‚ ü„üCüÂü®ü ü½ üs ü¬ ü÷ ýáüž ü— ü^ ü ýØ üF üî ýA ü/ üß ü‡ ü ü ü ü¥ üv üu ün ü4 üÚ ý¨ üÔ üÅ üûü%ü ü÷ ýX üå ü, ü½ ü< üŠ üí üF ülüœü ü ü½ üK üe üþ üå üå ü ý‰ ýH ý ýP üÖ üÞ üW ý ýñýªý¬ý@ýYý*ý ýªýh ýÙ ý( ý›ýý2 ýr ýc ý\ý2üýýZüv ü¿ü‡ü…üžü:üf ýØ ü üîü-ü& ü×ýIüGýàý±ü×ý¸üÎýcý ýüþý‘ýáýtýjýäý[ý™ýýÑýòý;ýTýTýJý¤ýýAýûýýíýýòý6 ýÄý4 ýÊýC ýYý3ýQýÉ ýýaýaügü•üŽüŒü… üå üdüü ý¨ ýâ ýð ü½ üüýXý ý™ýZ ýÙ ýr ýYüvýüÇüö üçýÁü/ýÀýØ ý±ý¢ ý‘ ýh ýZýÂýXýpýPüwüüöüÿü‡üF ü¯ ü§ üo ý¡ü ü„ ü{ ü üb üD üã ü û? ü» üb ü ü{ ü0 ûO üƒ üâ üJ ü¸ üø üÔ ü£ ü³ üé üš ü: ü üÝ üŒ ü ü” üú ü« üà ü ü ü üP ü ü2 üÊ ü{ü ü üÙ ü£ üõ ü¼ üc ü{üüÜ ü| ü² üK ü üé üy ü° ü¦ ü| ü üù üò ü° üa ü\ ü* üd üˆ üª üô ü4 ü, üÁ ü üÍ üà ü üs ü ü‹ üƒ üÙ ûüü ü‚ ü: ü¬ üÝ üç ü* üÁ û ü ü0 ûÎ û‡ üðü9 üS ü™üùü„ üütü- ü üû üüS ûW üK üd üù ü üÓüíü* ü) ü5üÍ üü üº üAü³üúüƒ üüKü4üZüá ü2ü¸üC üü!ü“ ü8 üIü“üCû×ûŸüˆü³üBüÂüÓüòüü²ý*þ`ý‡ ý­ ýd ý ýd þp ýë ýîþË>”GHEEÈIÉKÝE—IþM¢H™IªGeCNCKXH]>¨;ÿü?ÿ:ÿ«3ÿ1þË-ý&ý!ü‡ý|ý±ýVýüžüæüüÊü*üùüpü[üUüÂûüëüÅüÍüíü³üütü[ü`üüZüåü%ü übü üü#ü:ü=ü)ütüëü«üTüö üE ü ü~ ü}üüü%üu ü ü üÖüà ü ü„ ü% üv ü üt üô ü7 ü üD üÆ ü ü ü^ ü¶ ü‡ ü— ý€ üÆ ü ü5 üý üû ü† üÇ üü ü ý ü… ü üö ü» üÞ ün üU ü… üe ü†üþ ü= ü ýP üo ü ü% ü, üß üŽ ýÙ ýÀ üO üd ü‡ üN ü üE üŒ ü üm üM ü„ ü• ü> üå ü‡ üE üº ü ü üt ü5 üÆ üý üÄ üüüL üÇ ý ü ü= üT ü7 üÄ üÔ ü– üN üÛ üL üÞ ü… ü= ü· üã ü üÇ ü üÿ ü ü« üM ü‚ ü üÅüDüÿ ü> üÕ ü? üö ü¾üfüuüŽ ü7 ü} üýüžüdüŠü ü üäü üö ýýšýH üTý ýX ü|üŽ ýÐ ü ü— üÏ ýðý üg ý@ü- ü¥ ü¯ ü~üüv ý¨ ü ü· ü¿ü6ý üž ü” üo ü¬ ü­ üµ ý üŸ üö üE ýØ ü— üÄ üô ü üõ ü ü¬ ý` ýÀ üg ý‘ ý ýJ üÎ ýÀ ý2 ý‚ýýˆýØý" ýãýMýeýèüý,ý+ý1 ýâ ý£ý ý3 üwýý*ý) ýËýÚüµýHü4ünýé ü” ü×ýý üÇýý8ýý¨ ýÀýýÀýZýjýbý™ý2ý3ý¼ý¨ýãýâýRýùýËýâýqýÜý½ýÒý9ý ýCýLýcý|ý-ýõý{ý†ý„ý‹ýIýýýÙ ý‘ ýÔ ý“ýPüßý!ýhýàüµ üü üÆüEü\ü ý² ü.üïýðýšýÚýü‡ýª ýQ ýpýa ýšý‚ý"üýÐüüìý°üÖüwý# ýÊ ýñýŠý¢üüÿüwü6üüöü¯ýx ü¾ üß ý˜ ü¿üv ýá ü>üt ü„ üÖ üj ü“ ü3 üì üê üÚ üê ü# ü| ü¤ ü: üÁ üò üA û‡ ü+ ü‹ üT üb ü ü‹ ü| ü üÁ ü, üÄ ü© üR üß üÅ ü¤ ü³ ü« üT ü9 üú üZ ü2 ü3 ü¢ ü3 ü« üÅ ü” ü­üè ü[ üS ü üp ü ü’ üè üI ü: ü$ ü® ü‹ üY üÜ ü¼ üÑ ü™ ü{ üã ü² ü+ üT ü, üü üË û' ü\ ü üA ü ü üB ü üjüÃü³ üë üc übü? üé ü üú ü´ ü{ ü ü0 üü»ü©üÓüðûgü ü‹üƒ üô ü üŠ ü üŒüzüúül ü± ü üJüƒ ü üë ü+üÃüñ üá ü=üº üáüù üIü´üóüúüŠü´ü£ü­ ü3üƒü¥üÀ üüÊü*üúüü‚ü3üäü!üKü;üPüãýýýîýî ý ý– ý§ ý{ ý ýºþ=SE%EGJH”GæI6LÓIÑI“FlEóJ$LG­=ÿS<ÿ©7þÝ>ÿß3þ¼#þ¶4ý§)ý» ýëýã ý ý)ý±üýû?ûÅ û û ü:ü†üÌüüKüü=ünümüÔü½üœüüKü^ü$üŸüÔýü»ü-üuüÓüRü:ü•üeüÍü«üÆüüŸüÏýAüüMü• ü7 ü¿ üO ýH ü ü_ ý  ü† ýP ý! ü& ütüÿü¿ ü> ý  ýÁ ü> ýÐ üÍ üþ üí ýà ý0 üþ üŒ ü ý8 üW ý ý° üÖ ýø ü6 ü× ýX ü& üw ýQ üN ü‡ üÖ ý  ýX ý0 ü÷ ü_ ýá ý` ý™ ýQ ý ü× ý˜ ü‡ý ýÉ ü^ ý˜ üß ü§ ýÁ ý ý  ü× ý° ýý( üÎ ýQ ýI ü> üÇ ü& ýè üç ü¯ ýÉ üÿ ý¹ üŽ ü ýÁ ýñ ýi ü üG ü ý9 ýX ýƒ ý üW ü‡ ýÁ ýË ý‘ ü ý© ý ý’ ýx üG ýù ý{ ý ý‘ ý€ýøüGý" ýÉ ünü‡ýýÀý ýÀý ýéüü ü÷ýiýªýJý©ýý±ýÈýŠýrý˜ýa ýÉ ýÈýýùý ý*ýœý±üçü¯ýÚý9ý9 ý+ýlýrý1ý;ý© ü¯ ýáýbý´ ýò ý€ý*ýHý ý‰ ý1ý ýéýòý¼ý±ý¸ýùýlý(ü/ý¢ü‡ýúýºýìýpýüöýÊýýÓýYýcý"ýÃý5ýÃýý7ý1ýÄýsýÂý4ýMý5ý ýŠýÓüýªýtýýÅýÆý0ý8ý*ýáýŠýRýýÒýãü'ü×ýúýàýDý¹ý‚ýêýýÃý¼ýÙý¡ýÄýOý²ýÒý%ý\ý{ýÃýý:ýÃý”ýýýÕýœý×ý\ýåý‚ý ý^ý…ý¾ýIý›ý“ýSýÒ ýÛýý| ýéý"ü.ügýØý€ü üUü¿ýèýBý ýðý)ý[ý´ý,ý ýà ýêýÂý™ýqýðý¡ýªý3ý"ýýZýŒýÛýØý‘ýëýýÀü×ýñýèýáýøýiýùüÕü~üüŸüvüÜýý9ü®üüOü ü™ ü ül ü:ü=ü2üüzü ü ü< ü8 ü³ ü ýH ýÈ üÇ üœ üÍ üÌ ü ü¥ ü, üÍ ü§ üg ü—ü% üS üå ü3 üþ ü- üæ üŸü‡ üv ü£ ü§üå ü´ ü$ üœý  üuül üî üä üä üÄ ü… üM üÍ üå ü, üþ ý¨ üc ü´ ü¤ üu ü³ ül üõ ük ü: ü„ ü üÄ ü] ü„ üº ü„ ü, ütüË ü½ üÜ ü* üE ü¼ üŽ ü’ ü» ü6 ü ü• ü‚ ü;üü üŒ ü’ ü ü‚ ü’ ü ü- üª üiüuüF üƒ üÛ ü¼ ü¿%þ¸^þÐBûmü üÅ ü; üÜüÜ üÄ üÄ ü› üÍ ý( ü: ü ü, ü4üBüzüüEüºü ü üã ü ü6ü|üô ü{ üÉ ü[ü„ü{ürüåü üüHü‚ülüÍüï ýšýçýß ýwýÿ þ þ ý• ý ý^þy? EÞGÏKKÐIÎG(M#L•H*IOF›G§KçKQG§;ÿU:ÿ|>ÿ~<ÿ*4ÿ þu2þx)þ¹$ýŠýG ýæ ýÝü™üË úý úE ú? úÏûhübüôüüüDüîü•ü üüüåü´üYüÈü¸ü;ý¸ü«üü;üQü”ü‚üÙü£üíý˜üîüÇýÁüv ü üö ý) ý± üö ýÉ ü ýc ýÐ ý ý1 ýº ýr ý@ ü ý¨ ý üÏ ý ý‘ ý‰ ýú ýý ý ý› ýÒ ý9 ý ý[ ýš ýÑ ýQ ý’ ýä ýÌ ý ý– ýË ýA ýÛ ýþ ýgýý; ýÄý= þ¸ ý©ýÞý_ý ý… ýæ ý_ ýf ý¥þHý§ýVþÐý ý^ þþ`þ˜ýüýýÔý~ýŒýýþ˜ýý\þXþŠýæþ¶ÿ¥þ]þ­ÿ[þWþ|þþúþWÿ#qR3 T QKÖF¾&„%%À$§%†*þŸ'Á"þ¤'8-ù,+N.Ð.ÿæ+&H%y*—-‰(ç2+/O0Í-¤1I1œ/…:þ.[/ç1ï03+3C1Ø6R/_618ˆC²87r;@>,5‘917¶9:°<Ã<ð=7AÛ<Í6è9 @iJÕ@¿CE=‰>ê?½EØC®N®HÜ@öI¨KÄFiMrQâOsKlK_L¹O¿K‹O‹PT.O-K[K¶GFüEoHßJ,J‘M»LÓJ“S³VP›FKPÑL_Q[T-Qg[œSµMFMÌRY ÿWÿ$V T´WxRnIcNY?YS«KZHÎIëJpV1LOL%I2S³Z6S®OïLuZ \ªXxUwO­Uÿx[ÿËAìH+?­:Ã>Á?F3ýEÿNO³HÊ:²8º>Î7“6ü;ì67<U7í234 7¶7ýAÙ2ˆ0¬5+54’4Ö0S31$1„8#70³005.¼4{4-Á1È-p0ÆFÿQ1DÇ4Ñ1Ð3h8Ž0p1Ó9O7«7l(ö)»&õ">$1'^)Ï)‡'Ï(2D-K%#&î0ˆ.¨+Á0C};•3C<2Ú,ü)=,s.ø3#0*o,˜*(Œ+¯. 'ê'j0ï)Û+±*ï+Õ+À5*+Á1 .Ä/§-$6¿*â)G)è1y+É4Ñ,Å.õ*&0+©0‰+$+2,+ï1Û*x/‰8ä!¿ ½$"Ð “#Æ("ï#é%L*«1M-&0%'#!"(á(,-¢,ë/Ñ,‹.K-í(é(^%Ë!þ!|$ %Ø(œ'ö*T/š-O,Ž*ú,Ó.—+o,ñ;b -I1W)°).{.‘+ *(- Û¼Oý!¾ ÀÈÑ$aÁ#!¼*  ñCò!¦þ—Šfž³k]M­-¬"&ßnÿ´”b;°DaFOESEÌHI2JZJ¤KâIàF«EmK¦JÜFP<ÿK2ÿ1ÿ=þ'2ÿã"þ5þ}HÆmü h÷ì_ôáP î2J ë$H ëB éRC é›E èUI éKoöÍ£ü³üÕübüƒü¦üöüküüÔüüÒüüËü¢üÚü$ü¤üIüËü®üÔüSüÝüËü, üMü‡ ý5»$v&à(æ,è0i0]5¦14F<¶:ò7Ÿ<ö9 ;µ> xBE = Ì? —> @ º@ CC ÏA LB nEF ¾M õM ’L EGºDWFmI¢LdPaKƒS'MšM×MèQ,T’XgS­Q÷R!SIX‚YZšYVÙ`1TWûZ{TÑS[TfU ^]zV±YyZ¿\ˆ]K]1[‡\å_Îklei0| Áhne¸fÚiØrÓdFg¯|—^{k˜†ž‚¯h~n¿€ h%fh8fqsÚoBqñf hOnGedlfo¨nzv€s8i[RbeÛdFeP_Íe"@9@Q?§?FB»C.@|ABŽAA0BëDÓF§I#J¼H,C+@uA8?ù@??@P@ABÓ@=@ø@CºATC0CCAöA\?J=Ú=H>X>I>?Ë?K?T@ú? >>>=<§<`@øD-=bE=Ú<§<(;#<S;ó:ø9-5K4Q5A6…6A6ƒ78S7•8N77¶7¿8µ8s7¹6Ë7'7õ4Ô6£8¾9 4i5 5ù5,5y5°1Y3þ1×0õ2‹3n5b6T5Ý6Ñ6s4Ñ4U5G6æ8_4G4x5¼6;46Ë6Œ5Ê4‹44Í8?8â4X7»35+477ÿ4y3:6ù4±5=>=C˜Gk<„/a-¡0€1‚11B1‰1M1Q1G11Ü2Œ3M3Û2K2y2È2Ä2D2Ú2…122±2Ý2y3ô4¨8ð52˜1I3231R0B,ª( ˆ*ê+z+¿/ó/-:¬:Ê6¦0×0À32H2I0_2#/ý.‘.‚.,?,·+Ä+C,b+0,2+ú+:+þ,…-¼)Ý*Ð*»0ˆ1X5œ*Ñ(Z)41+u(ã'³'l&y-{')%…&'i'h()*N-½. *;(ê*R)Ÿ*ú* *O+‡.h1)4_5 œ1 f1 îHQN]F&9ÿý3ÿ7ÿŒ<ÿ 2ÿj!þ<þŒW ç•C ä“Fà BÝHDÜåEÜEÜPDÛeFÛ~FÜÕ€ò“Ùÿû¯üÕüYüRüSüæüUü«ü\ü@ûFü1üÚübüºüEü|üÙüü‹ü­ü}ü|ü“üæüÎü¦+OÜRˆRPSSºTUÕT¯TT#TeT§NzR¹SãI‹OŠQQQ…SöQÏRúQËRºS°U«U}V)W VtV3QVN•P™SšS$TUTÛT'X§Z[Ë]^]Y^]\É\Ñ\à]\ [¤_—_‘]šb·_ã^\[ß[\^#]Ë^Z_’]¶]ß^Ž] ^É`Za¹d7bb9c½`_œ^ìba‰`T_Ú`meýh­gôfezdðaðbódþe;eAcW`âeã_"cºaKbOb?dèfe9búc„\ûaùb cIcÀe”b¡huf}e‚gydÃbÏb’ffe'f‰g9glfùg…e góff5e}dõe¾bÛ`£a*bÓd bÏb c eùiål˜h½i"h-f|fCe‹ed„e9d‚cVb@crbÁcCc?c…c«`Æbwb·aœdêcPbËd!aPe«d­c'a´`ïc _V_Ÿ\lZàYOX[ìZƒ[n[bmÁn¤\¤Y¯YSY-W¨\[ZXY¸Z¹Y¬[´V°RçRùRODQPQMNÿP¾WöX+W“TÕS–TïU"SoRQOžQ¡NæL½Pÿ9OpL–JªE]G×G E]CðEÑDƒBA@O@„@C>>Þ@FAÂC8EuG C)Bp@„=”>ÆBÜCÞEA8@óA;A;EþF³A3A@ìAáC/B5BAš?»?‰?5?‹>Ë=]>Ø>•=œ=Ñ=<X;™<£=`=<¦;³><ß<e<^;³:â:n:î;×<[;f;V;19 :Ü9]978v7)6«6}5È66A7½8}88 7×8a6¤747£7ç5ÿ5Ê6È7*5È2Å7<6‰6ø6Ò6F6 7¥3û4ë1Ë1À2Œ22†4=4æ4ã4w4q1ë3j2ã2›3Œ43 464§5)4³3€45 4 4 4Æ4w4Í44]32W2L2G1š1Ù32œ1ß12Ò2[1Ó0/Õ2¾1“1›12Ž2Ê3²1Ò1Ð0’2-2T3 1ä2É2H2‚41371Å1Ì5#5Î3Î674%2M2¿301Ø0Ø1û1ï2u3 3-1z/ø/Ï/R0}1t2Ý1µ./´1ê7í4T:o,,£/2*.À/{0È0³/G/K.›/.`-/,S,.Ø+²,7*Ž***Õ+{+_+Å,f+ó*…)Ï(í)•)#&ê&'v&ð#Û%Í'6'µ(L'_-w(‘'+%‹$ñ#™#…#Î$G#U$K$&ø&»' ÁB\M]Hh;ÿ6ÿÀ3þ”8ÿû4ÿé"þ4ýÇ}û#>ßQ?ÞÇDÝ CÜzDÜ£DÛ7CÛ~CÛ}EÜ‘FÜ…òºØÿûåüaüSüºü]üÞýüÌü‹üeüÑü£ü˜üÊüZü­üMü5üü|üUüVüšüüeü þOS—STBTPU=RÃUÓU$S§SST—QóNâO4OQNP‘P@OˆQ@Q¹OgOÜQ—RDT¾T~TLV€V»W:SÿTS“T–TÖTæWUÝV!Xš[W\]^^’^‘_Q]^Ë^$__Ù^\®]ã^k_X^œ\,]â]±]2\ì^Ø^^^]`[^Ñ`V`ccòdïeud¶f[d®cÿd¯còb`Ò_g`ŠdaÑcìc+d0eldó_nc»bxc²cCaPbKaÅd|daJd5`¼bõ`ùd.bƒe§f²hh$fïfëfsf¾eÀeøgpf3g*e¹eLh¯eÀf¼eJh4f¿f½h3fóföe‡føed eócÏcc dBcCbÏbüa¾`Ne3g~hÌf?hi3dÂeÆf~d†b d3e¨d0dd¿d_e\câb£e’aùaÅcb©bbd[c”a¦`ûaêaª`ë_f`ª^›^X^Ñ_ ]?[þ_h]B_{`“[!ZÂ]îZYYÕXßZ¥ZÀ^*[¬ZgZGXºUQàUÙS5SÀPQýQöM»R0Q…R¿SkU.c^aU:T½Q¬R P6VFNùON7MóL&J¼JzHOF×GOC‚F«HUF=EªD†B B@J> ?WBaA)@ @LBa@½AHB"B8CCÇB‰@Ò?æA @¯AÙA¬@©? @5@õBïBñ@LB(@ß?ú?>I?>?m>Ì>‹>ÿ>¦>>¾=Ö=O>÷=Ä=Æ>>Æ>ÿ;Ü<<&<ˆ;Ø<<W<Õ<;;C:Ê9W867Ú7˜6*4ü6?8_8´928ú9<8‘98Ž7¥76¢8O7ã86å6?7179877Õ7T6‡6_8O6Ú5õ6Ì5a3‚3r5‘2ý4ä5â5ï5®5¨6ô5¨473ü5¶5ø4N5è615š5é5-6<6ƒ5É4Ñ4•5‘4Á52›1a1Þ3‹1U1÷2G45I3 4Ð2[3Æ1Û0Ý0Ó11…/40m122œ1!/ò0¦/ 1”2F0m0Û1Ô2‹1’382¿2þ0Ø0Ê1ñ1“1@1K3ø0 2l2ø0š1M1H01ú2£1<.ß//Q.Ö.À/ 0 /Ì0s-ð-,5./ .^.€-Þ-U-a.[.R..;/Q/.P-Ð-- /T-£,à.Í-Ê-ç,j,s,Z,z,,¤,¥,®+3+*ó'þ)Ð(Ë'=(Y( 'å'#(2)”%ý'Ñ(!('&à%»$º%È' &¹&¾&ˆ'M({' <"OIQ9ÿj8‚9ÿ4þÇ3ÿC%ÿZ5þ]k÷f<Þ›AÝ…CÜ#CÛ®EÜ#CÛëCÜÊDÜEÜIFÜ“òØÿû$üû/üÌüüüüÒü#üüüRü ü|üüFüÍüüÒü üüü üŽü¬üŸ þ¡CÙS RCS›UMUlTÄTçU_TéT¯R:R PQDPGOOÐNØNÖOKNŽOœOôPSPPšRÅRŽSCTFT†ViU|UT˜VFVKVÄWÃX WŽX_ZÃ\Ž]Œ]^^S\J\ƒ\Q]”_N`G^Ä__Y`•_^Ò^‘]ç]q_e_\_`™``Ã_ObtcþcaÉcídidíebdwddböbþa€c¹ctaGduc°cuc…>ø?r>ô>t>2=¼>è>ó=õ<A<Œ<Ô<—<K<r=é=3<;9Q8Z9¦9°:#;¡;a:œ:¬;þ;/<X9G9G:¦:³9z87#77|9<9½:q9ë:M7·76ü77ð6Ü6Ý6d75ß5Õ6Ð7Õ89€9¯7Û7/6§6ß7ã7#7Ô5‚8 5ò6¨827±827¶6G65Ð5»4Ã4A5ã4?4°374\4a3'2Ë1\2Ë2Ò1e0ã.ø161U0Ÿ0\/ 10/f0Ð1a2ø1A0!1_21[1Y2Í451[2ý22r1ù1…1Œ1¶1C0Ç20.å/Ð0„1x0þ100[.«..\-á0c.è.%. .I.P-Ð-Ð,-,¨-Ý.P,Ý/Ä/-P-%,í,õ,¡-‘-F,J+j+$,­, *Ä,*+¶,<+D+D+*Ž**G*x,d*í*º*{,j*^,÷+r*ô-*‡)Ã)Á*„(“)*ÿ)ž'o&³&ë'q(''·(˜(â)_*â,= {QåK¨;ÿÒ4ÿ7ÿÈ9þî5þ6þó5þ2pø=Þ…BÝÊBÜ1DÛ,CÛÃCÛDCÜòCÜTEÜ9GÜ~òØÿûÝüEüêü¯üRüdüòüæüâü\üÌüúüü\üküüçüü¢üüZüåüžüüLü»þ:L‚TqSNS=TôUôWoU—URSØTfSãPŒOúQ=R9PÆPBO“O OOP>P‡P PùPTQFT9UISS·SSüSÄS>T…UGUÏVÇU¹VCVŠWSXË[ý]ù^ù]Ì\•]º]Â]¿]8`€_ ]’` ^ƒ]•^Ä]È]Ša­]“^‚a=a;^Í^Â]ù_@`@bäbbyec,b­cªc7dd"d2dxd$eQe™e‘clc™d›d*edoee›ef‘gAepgbgRcºf¦ifÚghVhhŒiKh—gåii‹i@gWg]gÑhSigÝg_hi fžhiQhžiJhOh]fßfÞgWf”f!eÛd«e¤eefZd%eeeÔdÓddee¢edf£gbfe™eØfNf”eIfg»hÍh¼ghïfg9frgéexcífjfmgmd}cÁb a¿bÆcDcs`„bvan_å`å_á\1`^Ç`^'a²]k[B[@Z]]±^ÿ»\Ï]ÿ{[ÿnYÿó[ÿ¹YÉ[ÿ¤\ÿÛ[[ÿs[ÿ®[ÿrX‘XÿkTñUG[EÓDbFôE´DŸE¹CÍFjGFãFgD±E×JGVD”CaBöAHC6BpBF@ßAE€B÷C@PAêAb@}@„B#CoA¤AÀ@×A–AIAA ?Ò?Ô??@É?aA2@5>­=ê=ò?g>×>$>Ÿ?#=¨=õ>>&<r<ó>Ú=Û>r=´=¿;ž== <K<<T; <O<=<:Õ;É<L:c9ÿ:Ã:À:: :k:Ð:N;V9È9s9x8Õ7È9 9á9w9E:d7þ8„:{:/9"7 6…6678ð7‰6Ý4^7Æ4ò88Ü9 8/7â7|625r5B5¥6\5o3À3ô3ä6`3ø315'3x2ï4r2ø2x10X0Ë00 1G1ö3w222A4h3¥4l2 2ù4373B3è2»2ç10Ò0M12{1B1¹10151Ì2Ö1(1ò2X1°2=0U11m/‚/Z/Œ/L.Î/”//€.P-¥/F/.Â/ -ˆ/o-†.c,S-%..-Þ,ù*©*È,[+M*'*ê+h+6*w+f*ö+¯+p*ó*ó+m+&)|)¼+«+9,+¢,\,[+´*¬)€)ú)Ñ*ÿ*ö*Ã*÷)])K''ã'ô)Î'¤'ƒ)!)[+‰-’= T L"<ÿF7ÿP;ÿ)7þ>1ÿ þ¾/þúnøÕ?ÝÚAÜÜCÜ0CÛdDÛCÛóCÛoCÜÙEÜàGÜþòÑÚÿûüùüëüüLüíüãüüJüXüFüTüJüüýüUüöücü üÒü!ü\üÍüüÛýèŸR;RÌTQRÀT¿SòT„S—SaQðQøP²P¢QoOŠR&P¹PoQ/PyQ¨Q³PõRsR4QEQzSnU(Q•T6S¾RÂT1T2SÅT‚U|U´VrUîV}V4Y1\|\:\ò\÷\B[ƒ\`)]o^w_Ã``º_0^Ä^<__N`¨_(aªa)_±`k^Æ_†`î_®b_b!ama©båbkcSbra.a1c cÝdNe…dÜd”`¦c^eøeúdXd”e eÂc)efRg@fÀe×g i;fŸiii9hi¹iri|hƒhg»gWh~hEgZiGjôiùhÀhigf¥gŒhf]fggfžefeeYdÛcídàfÖdQcžcÇcKd…cÄeóf5f eËdËff:h½eÍf„j»hif«g¯g­gáh g®g/hžfífÑeée f¥eèg™dlfefäd£dAcûcåded al`c`‰bbh_7`8_†d©`þ^s\ÞZç]L\Ñ] \Ó^ÿ|XÁ_ÿ£]ÿ[ÿ#Yÿ¥Zÿ¯Yÿ©ZÿJZÿ¯Yÿ3UËS¨SNUÐUeTŒRjSŸTTDSxS@X£VòU«SSñRÐPÕPÚQPNNXL=JÀJ°KjIHÿI±FÏG¯GEHeJ,GáFFjC„BB:B…B»CÖE/FšF_DŠD&C C DEÐBmD¢BÙA³B%BHAæB­B­BBB*BŠA«BwC:B¦B»B;BÐB€Ap?äC¼@€@O@?á?Ù@B?S?Š?™@Ñ@R?ÿ>‹>Š>J>Q>‰>Q=›=[==Ý<ó<å=v>+=§=­>=¤>e=v=§=x<<È<;e;á;:M;;8½9::O:::‡9_9J:$;:Ç98a7î9Ü::^9õ8¬8»8ü7ø8œ8ê8z7F3D6®7899{99S99C9Þ8Þ7ã7˜5à6Ú6Ï4ð4è55Ú2174O5K3ã4¥6!4¦3h4í2¨2¤2!2q2µ5è4\0ü0¶1)0À0…1q3!4¨3¤4b3¤2›6.1Þ2à2Ý2(2ç45 2â2b21¥2Ó3/×0•3ý2’2æ41X0î0¼0³0“0–1C.ø1ö/Þ0H/Þ-W-Þ-ž.e/^/P,ë-E10§.»,Î,*†*ÿ*!)æ)Á+ñ-x-]/|-‰-Q-S,.´)’,R+"){''*Ù*ê*¤*n*$*œ*²)H(Ø)*?*è(ø*­*;* *)(R((â,©)û)Å+`+ƒ+ˆ.1> SMY>ÿz4ÿ¼5þ6ÿ€.ÿ¡#ÿ€1þúl÷@CÝ BÜzCÛ|EÜEÛ–CÛüDÛ.CÛõDÛFÜc~òQ×û ü7üüü²üüÌü$üñü>üÇüDüœüzü‘üœü\üVüpüü¥ýPüžüü%ü¦/P°QýPŸST T…TPSgQüP RFS‹OPJReTT™T[TšTV‰TXTVUUS7SSUMT«SèT)TeS~TkTR½U6U8U¡U}U¯T„U¾W£Y'Z¤[6\÷\1\p];]¶\ï\-]d]ÿ^®^^}^³^…_}]]`Ý` aaea¡`ž_©_ê_æaeaŸ`­bäb˜edZc×cËbÄcËcdCe¿f2de7d¸dAe6dye³dCd¿dWcLdÎg»gKhhûg h4h}gÁhiki¬joimi«gÎhºgyi>e$i¾g’hþh{i9hhÿhgÂgƒiFh¸g˜ggEd-fBdÏeƒbrc˜eÈdd˜cãcIc:c¶bbÉdBdveqff?eydýdþe{gd×gûfNfxeJeÆdúdCd¸f(dd=a9eædõc7d§e]e¦dñe±cíbbBc«aÎ`%aï`Mb`Ìa^”]_Ì_Ä^_]Ä\Š]Û]‘Yô[ˆ[ÿr]–^ÿè`ÿò]ÿg\ÿ$ZÿiZÿî\ÿçZÿì\ÿZÍWÞVìWU§TbVÞRŽS¯R¤VCT SƒVÁZ*X-UèS'S(P•P8T¡PVQVPFN‰MÿöK¹KJxK&J IiI]F¼E”AtA¼A£A\ADAÊAJ@´AuAB5AéB³A@ÿ?Ä?B@NA0A)? A·@@²@I@ù@I?J@?G?A> >ú>|?>„>…>F=§>>%=(=ä=¦?Ö?(?h>¢>.=¯=`<ƒ<G<;W;P;S:\:S9Ý9™9r:)8…98ß8Ð9 9ƒ:¿;R9¾8 98Ð8à8ì7f8/8å9Ù9¢9á:Z9)8/7®75067‰9=7ú6±8l8|937 >}<N7|6{5Â5]5Ÿ6\5_4¤5!6ˆ7J75˜5Œ4]44475 33X3Ý2h2É2×1a1¦1211e2612j3/3è2ç4_43Ç5¾4—5µ4Ô3]3“3Ô4ú2“2Ä2U3 43Æ3B3G4>2‹0Ù1\0î2u4È4g2Z2>.P-Ý,1/¹-],—-g.–-È1½1Ó.Ï/Ü1Ç0å1g0:.8-2-h.›-¼+ë-B. .·.ì.¼.¯-Ê-…/--F-++[, +ã+`*ã+‘+,O*›)±*w,W+g*¥) (Ô)ý)æ*2+-*:*Ø+,+S*ó,ã/`1Y> SÒOQ<ÿu8ÿU<þ†=þ>/ÿy þµ3ýþlö—BÜ4BÜ*CÛ¬DÛ-CÛƒCÛÛBÛüBÛ”DÜñFÜÝ{ñþ×ûTüõüÝü«üåüLüÜürü’üRü…üü:ü…ü«ü$ü½üÔüküÄüFüâüÑüLü?ü·%uN¹RQ¾T`SMTÔSÌSSiQGPöNÏOƒQ¿S1T›TU TˆRßWäX€VòW,V|TùTüTS£TTðTÈTáUTlU^V“VU.UÝUâV®WœXåZ^Z}[í[\õ]í]+["\2]V]j^8_]&_æ]å]C_ë_¤ba`Ÿašaa^ aY` aadff=c’aIbìc>d.cÆdybzbpclc«cme}d´d³cÇdîgìf¾f·f~g7h-gðhhhùhøhêhîi_h¨hèh0géh,hYÿãWÿ>Wÿ©Zÿ­[ÿ%W’VXÿ²V—WÓUáVÑVXR!SíQV8T}S±V÷X$X$VäUÉSRROS¡TuP#QWOÐNJMâKcKŽK]K›JsJ›HßH7GAJ@k@AABrAw@‡A9@ùA@ê@ª@q@ã@8?À@ ?Ä@C@q?øAy>x>µ=Ã>°>K=W=’=Õ=b<ñ=å>¢>X?Ý?%<­<¯=.<?;Í;P;‹: :@;;ƒ;Ÿ;“:ß9á9Ð:x9N8Ž9•99¶99:49n9ÿ98›7­8u9S89)9à9799ö8é8·89I7ý7}7¾6Æ7µ677ˆ7_7„6É6Ñ5Û5Ô5Þ6Ú6B7#7K7ˆ7Š6Å6U4–4ã5§5K5É5Ì7ü5¸4€3š32ß32Î2–34_4â3–4I2©2%2^2Ô2Q4ƒ4|43E3”4ÿ3 42Ò3…4q3±3x4343·2À3B2û3­3ó2ð2º10Ó/!////˜00@0M1 /û011Î1%1¤0°1¢22f2 1’0¦0à.¨0'1 1Â1‹1`0ž/£-/k-¬.î.æ-i-„.µ-8-J++-Ö+}*5)ö+&)›+S,=,R*¡+ *›*c)å*3*=(N*V)Ç*x*´-h.f/9D ÑVN[>ÿµ:ÿ‘:ÿ¨:ÿ§6ÿà#þ“0þ˜n÷âCÜNBÜ"BÛ;BÚ¿BÛÂCÛ:CÛcBÛûCÛGEܲ}ñvÖûüaüäü”üÛýÈü-üÔüLüÓü·ü#üqü;üCü[üìüŠü˜üÔüµü üšüüÕü?+ ,PdQ9OôSªSßT‘RÐRˆRæPHNÅ>´=p=è>E>A>ƒ? >º?·> ?>Ó?Œ>›=ä=÷<õ=¤<è<v<û;ý;ž;ú;½;ù;Á<3:Ó:¨:w9þ:9}99Î:~:ó9È::9¼:E9‘8#8¬9"8j8Ü99o9à9%8p7è887Å9t948õ8:8±7Ã8q8±8³8¸7ð6ø6¼77C8 7K6K6È7S8·8é7ø8z826î8:5¶7¯6ä4ñ4€4H3Ÿ2W1›2[31â3V1–2ä2”3M22c1>21‹3e4‹5z4A45Í5>3B3ú5)4c362Á3·20ì1#/:0h/×2W11b0Æ0I10A/\0000V00‘.a.z10Ö0X/Ø.à/'/ 0“/â00Æ0H0Q/_0É/Ê.Ü.‘//©.­.y.v-­-+S+Ð,|.!-–.z.,-D+Þ+S+•(X)ì*],Ñ+¾*^+V*¤(A*"*¡*o,O+¯*ð,Ñ,2.Ÿ/2@ ÙWM‘;ÿÇ:ÿi>ÿI;ÿX3ÿÉ!þÆ5þMr÷øBÝXBÜ\BÛCÛBÛšBÛÉCÛBÛÍCÛÇDÜÑ|ñçÖûÔüÚü üfü^üüü›üÓü‰ü üüSüüüšü:ü=üü»üÄü”ü üjü=ü½ü‡- öR$PEPOOÄQ`RQùQÍQjNENŠOyRqT–T—SUSTS"S×RT‡UEVÂUüUðV{T‚THUT#S_TUËTVVJVÎVXUžUªUgVV_TûVóW˜Xv[\\Y[Ú[‰[‘]O\Ê]Ð_aUaÕ_Ta`‹`–aC`–`”`žaCbÇaÒbTaÝaT`$`Ý``d`Óa„aÑ`VaÏbÏb†a³a+`¼a®a´as`Ýd·cÍdxdçdäf f¦dHgvg¨g§h'g«fºgae2gèfeþeºffðeûe¸f³d‚g"enf¶c‚fdMf>dÄgEfÿeee€g4dödEd…c–eÿc€dìe6eye5e©bþckdëdpdŸdad%d>dädôd6c¤baeoe§e«eÿg.g0g?e­bqe™e¼e¬dçd$d0c±gàe˜ed-b¡aebØcb¡b[beaUažaøbÕ_]bTa`ÿ^E_=_=^C`p_¬_“^†]ÿä\å]“Z YÿêZÿ2\ÿ¡^ÿZZÿ›Yÿ2Yÿ^Zÿ¼VZYÿ*YÿrXÿºSßUÏVÿtUUNU`XXV4VÞXVV W”VNUTƒS¥Sÿ´Rÿ9QÿrPÿ®J×I&JwL#I«J¥KKJH3H·GêH°JmF¦C«DðE1CòE•DDcE'D‘CXB­BqBŠBXA+AâAm@ƒ@öAò@ÄAï@àAA.A~AD@Û@g@‹B©A±@AìA@·A¶Aµ@æ@ä@h@(A'@´@´@7@*AC@=>ú=>>F>½>I>0=’Ab>Ç?@;?™@`>ë>#>l>Z=n=œ=Ÿ=Z={=1<4<j;ð;é;p;º;¾;Ê<;Y:œ:>::9G8ý9÷:³9:0:§9±:®:@:97a88š8˜8h8Y8§8Ÿ8¦8`9k948c9_8/7è7™6S7#7º76‚7±7¸8286ÿ6H7;7ó7C7ó8 6¼6c6q6>5r5ô606º6°5q4Ì5Ë4I4 4F2d32­2Z1r332”2¥32É4Ž55Ï4ƒ43ÿ2Ã3|3:3÷5n5Õ4=2Á2½21™/Û0¢/3/20É2»1û1Œ1Õ252ü0ø1û3;210Ç/_/®.÷/ /\/130Å01r1w.".m/-¦-g.!.&+÷+®/.X.g.Œ.•.™.ç/o.®-»-€.-=-G-6,C+*M,ì+y**Ž* *P*—+^)ß+,F,E,0+À-=,,“,Ÿ-v/%? BU N‘?ÿ×<ÿº;þ :ÿÄ5þd"þ30ýuøäBÝhBÜ,BÛAÛ²BÛ BÛ!BÛjCÛFDÛOEÜ||ò¸ÓûVüTüü$üüüÅüüEü2ü}ü`ü5üÖü›ü›üâüDü$ü–üMüôüëü¦ üýýx0 YQ PèNÿQPâQýR{S OúOäSTXRÙR%TÏSÈQtPòRâSZSÐTHU?U‚U¿UÅUøT RÐS–R×RÐS¦TŠUUÕSåTiUT6U´TýUïT+UW¦VëYcZœ\¦]•]–]Š\‡\\Á^;_bF`‰br`^Ä^Ãa›_`9_S`{`Nb`Ú`K`Q``8`L_g_Ï``aÄaMa®`A`ƒ^ù^Ã`Á^_DaÅb¸b@cße[fÛe·dDêF`DâD¬DÑC©CrBÜB·BóA@¡@qAâA-A5B*A6Az@†@¸Av@ýB¿AÐA'Bõ@H@sA5@­A­Av@p@ô@0?º@µ@v@p@7?ð@5@h?ò@u?Ç?þCN?>´=Ç=‚>== =Æ>ø?>—>¥>.>]=£>e>T=è<p<ó<ü>ÀA<t9ù:q:ô:ï;½;¿;]:°:*9@808‘9A978·9R9u8÷9u9ð:09¿888‹8S7h6¦7é8(8W6ç8£86²7·76Ä7y76.6‹87é7?7ô9 5ô5¯5<77D7W6Ž44x7w57494n3Þ5¿6÷5š5,6â5ô4á464 4ñ4n4w1¼322B2Š2B2ø5 4€504ï4r453€3Â5õ4H5r4á4'3þ4A4?1 /©0¦0T+Î,/;1W2,1ÿ/Æ/Ð2)0Í0K0¾/«0w/â0ø1<0¾2=1¾1o0u080/Œ/™.’/À/A/ö-•/I-b-&-,m-¤,¦/.Ž.©/¤///Í/Œ.e,÷,F+z+…,½,)+~)*ß*¿'¯*‚)L)_(?(“*^++í+í,Ì+‰-?-W,-,µ/Ý: bUHJf<q;ÿ‹3þj;ÿ 5þý4ýÏtù‰CÝ“AÜÓBÛ|CÛBÛBÛ›BÛÔBÛÕCÛäDÜé|òúÕüüüœüÝüŸý"üEüZüäüÌüüü.ü ü’üËüœüKüËüüÌü“ü\üÖü„ ýØ* ìPµRwNöQ?P+QYÿXÿÚWÿnXÿeXÿ°XÿVÿñVˆS®T,UTS¸QJUlT«T§T’P%QKR§Q_O÷NxNKgJèJ–HêGHfF:GH~GÅHqGFE?F=E¯DºDtCwD+CoD¯DéBëBtC!B(BdA]@ØCB)C7Aé@î@ì@u@o@?@~@Á@À@”?q?¨@ @y@m@£@v@p@¹A®BwB ?8>»?8?2>Ê>È>É?†?T>Æ<Ó>=|>7=Ã>¾=I=ú=Ã=L==^<¥=s=i=·=¦=·=õ?à=…=¹<€;‡:ý:è95:t:­:­:(:J8ì9d:b:89ö9ú8>8858S8È7ð8«8ª8199€9O7‘7m6ú4ÿ627)5w6Ï78896ý765Æ455±6k<¢55½585+4Ê7Ã7>54ò5º8Š857Ä64õ4¸43°4'445P4é4œ3š43,142t3i3q1¾1D1S0Ó1€1=2§3_4Ö5-3Ý374¬3ç4£5)5+5§5k2®32±3¶1û1,.Ì._/,#,m.i.—15M/‰.-Ò-0(03/=..¼0Ä1¡1³2».M/ç/g/Û0/ð/?.B.‚/A/+-H..¿--Ã.-¢0/Á07.‚/z.5v.[.-+ñ,;,´+´,ñ) )*U*–*¼+ (•)”(#)Q(Q)V+­,ö-/-"-ä,ö->-Æ.Æ0O: _TBK9ÿ;ÿ9þå5þÆ-þÕþÐ2ý^vøCÜOBÜBÛ³CÛ;CÛ,GÜ?CÛ|CÛ¶DÜ(DÜJ{òªÕüüÜüTüÕü$ý üDüü¡ûÎüü}ý)ü_üËüÄü ü ü$üUü™ü]ü»ü3üÓüö1 VOýPÁNëQ2RRQÃROÜNÇR RSÝTTIRÔR›R#QjQÛRPôQ3QäQæT ShR+Q­STSŠR‹RãTRŸQ´QñT S¹UÌTÙU‘TãUÛVOXJXÎY”XÔZÝ[]]M^C\Å\Ï]_cobê\—X3\v_]T^^ ]N^Ð^_,\ï__•a `dJ`Ó_W_à^Ø_–^Þ^™_Î``B^ˆ_H__„`Äa·`ddècéb{dhc÷c°eldõcþdÿdCdùd dDc¾cscŠbùbAbÈcÎcL`¡dUc„dDdËcœd“eÂeLfAe”c’e‡dšcb‹dccecfaca`Zb€bG`Íb{ctb¢b{acˆcñZ cN]°aþc¸d¸cld4dBcdc fpd5d5c:bÎd¢d"bðc¥b``È_Œ_|a"bªb6b·_r`§_¿_g^â]5[&Z&^k]T]¾\Ñ[kXR\}^}\´\ç\¾_.\Ù\ÈY^Y’[ÿ´[ÿjZÿ©Xÿ-YÿíWÿçVÿ“Yÿ“Yÿ#Wÿ WÿdVÿÜWÿªUÿ¨U•SÎSaTVSJRmR5R,Q]QPÕQQ’S#SAP”N]L\L+KïKHäHhG|FAEÿHsGÇHôF¸EBêD:E=D?DEæC÷CrDtCÜDçCmCgCÞBkBA[AØAF#C1@¤A*@7?µ?v?u?À@@?l>é?’@?x?ÿ?Î?H?¹?ó?{=^>À=>G?2=Ó>=\= =e>‘=œ=Ž==<Ö<K=W=‘=É=Ó=–=,<4<x<7=p>z<ÿ=o=>7=ô> ;±<¶<¹;ó;:=:†;À;¢:u9t999h;¼8Ê979²:8É: 9y9ð8=7ü7ó7ù7T97_6â5<3ý5í6å7/5o3›3a3–6:766å4I4­6½573Á45„564‚5^6F5“5È6D9Ö5ÿ5³655ô5á5¶5c3Ø4,3Ú2å4$2³2=2m2"2…21ª0ñ/ô1)0ô1®33ã4"3Ý4Ó3ò3´3ª3§3ª3Þ4¥2Ø1ô140î1©2j/C-®,x*/>/++,-R/0/C-“-1­1E.C.¿.A/p/c/)/{/4-,À-ì-¯.;.0.¸/=,Ý/:.4.z. .².q/|/.@-½.5.. .p..D-¦.-ü,Õ+Ú+®*ô)M'¬)Ã+u(!('â(](à)' (S)**…+g,f-)-à./m0þ1G6ëVˆL‘<ÿ¼;ÿ+=ÿIAÿS3þÓþu5þÐwø°EÝ,CÜCÛuCÛåDÛEܹCÛ¦CÜÒCܱCÜ‹{òøÕü)ükü4üÞü¥ü“ü#ü¾ûfüSüDüŽüü^ü"üÓüœüü¦üJüÎülüôüSü”ýñ1 ^N´PéPmR6R;QõQOjO)SRÇRQ–RŠQ$ROíQRPmNsN¨PãPìRRäR‘P’QQÕR‡RaP£RQÕQ¯OÁSnSfTŽUÙVÛV™UMT]UÛWÉVÒWÒWTZ\»]]^t]»[Š^s`=b.`´_L])_Æ^Õ[ß][‘\Œ]Q] ]‘^ž^"_“_Ì` a;_‰_Œ^Ý_•`^Óa ` `H^Ã_{]Å]`²_>`bÀb‡cbb÷a>acýcpe8c“cEbƒbbDcpcw`Œ``ºcFcÄcBbŸ`“bczcd‚eQeÁffe†e|e?dÁe3cc•c\béc`›dcuc3dëcGbtaôc`akcea÷cldWaV]†f\cieñcºcBd=b×ddbYdddzczd&cÝb4b!béa?aô`5bÚbêd­cgaöa_®^Ù_â]X_n^r^Ò\Ó\Ä\K^Zû^]]2\¢\ï\ÿZ©[!XÒYZÿñZÿvYÿàXÿhXÿaXÿÎWÿUÿÑWÿ…Zÿ‰YÿÔWÿÓWÿSÿºQØRJRkS\SyS©Q`ShQfRRRâRuRõR`PINL×LªJèJ÷IHHñFDFIlH½HGF„EÂD@CÍFJD´DvDnB´CzBŒC£CaB5CªB½BœCCÖBQAB AøA]BA/A³?é?6?|?ñ?×?¦?q?l?]?V?ˆ?Â?Á?ù@7?:=“>C=>>==Ü=>H=#=>Z>=Ò=D<¿<Ã<L=<c<â= =Ù>U;ì;p<,<p=s=3<º<<<l<«;Å;…<-;ò;x<2;5:¬:õ;@:Ë;:˜:à:r;<:{8‚8´9¢9S976D5¸5½7w6x76X5é55'5Ú7™87´5ÿ3Ä5¯7t7q6.5õ6+44‹5f664ó675w5p6n7©5Ã6=5ä5÷5´5¼6ý716ë75634#4c4™4c5b5²4å4'4 3S0é1#0ª2#2r1Û44%4â3™433#33œ3r4’4‘4 4l3÷2s23|0A1E1:/R-,*Á,ü.Ý.‘-€.7.ö/F0n//D-’. -ù.´/ö/>/o1Ÿ0¨/.. 1§04-C.u.i.”.Õ/D0ì/è0v/¬/¥/<.Q.Ä.5-„./?.E.~.7.?.,++*3(Î&ç'º'&*ë('''§(@'¥'®'«(Í'_)*Ú,, +¶+ä,ª.q/Ä14¸T9OÒ8ÿ’;ÿ5@=ÿã/þ\þî0ý½yø–CÝÚBÜ8CÜéDÛ§CÜðCÜqDÜCÜãEÜ&EÝ{òÃÔûüóü.üü;üéüêü´üêüjüKü]ü£üü‰üèü£üüüœüÂüÛüŒükü ülüF0 ^L¾QäP÷RRxQ°NìM´OÝP§PëR OÜRŸPåQ,O¶N°RgQkQ[PiPoOïRåQ[NYP“O¢Q‰N@PlPåRÚQ`QßS%U“VRVUTåTUÉVVWrVWŒX×ZH^+[[½[ºZÑ_{_|_Â^\] [³^œ^£]HZ [‹]N[‘\¥^[]_^N_Š_Œ` _@`^&^ä_^M^`F`M_V^_A^V_Ž`k_þ_ÆbÔaÌbx`‡axb8bêc5d«bLbãaË^àa`Ìa¹`@`ƒbí^`TbEbÖaDaJ`†b­aRb dÉbœcÐcŠdBeCdíd¾e…bøbÒa’abŒ_´c>bGaÄa@`˜^É_ü_«a'bæ`ºc¨ahSRÒRb°b8c4b‰bAabc}cycbˆd®?u?+>e>>P=Ð>Q>Á>E>>H?>I><Ê= =Y=Í<Ù<V===Â=ˆ<÷;Å<Ÿ;Ü;Œ<<]<•;¯;£;4;«;½;ó<´<­<é<Ù<²=p;‚;a:o:ã:z:µ:?;y;•;:Å:ª:í;u:@::i9¥9I9…9¿8µ8w7q7¡6æ7°7Ž85ã67T6›6 6Ý7ö7/6ç5Œ696º6 6A555p5î4ò6´5y4C56z6=6¥8"6û6à5¬6ç6ð8;7³7`8 6Ô7Ò6\88N9d9R7…5¥54à4¦443Œ3R3Ú3˜3”2c3'2œ1ž1r2©3­4è43¥2þ3¶2ò2)1=0ô/¹00/—/Ž*û(Í+0,-„1#0´.ë.90p-O./³0t. -¾.G.ý/².ž.7-z.¶/E0í-ü.&/2/’/·1£.û/Œ0´/».1/ø//W...‹.?.†.Ê/ .,¥*y+-(Ô)|((ð)0'\(*&Õ'¦'ã'#&á)+$+U+, -'.0.¨0ã25ÜSN ;ÿŸ8þÍ<ÿ8?ÿî2ÿiþÓ5ý„ûûøfòåÈfòäfòä¢fòãžfòãfòä›fòämeóäÇeóäfóå(züô„´ýü–üüÙüEüäüµüüüüûVüüÕüKü¢üküü…üüÜüüœü/ü$ü'ü¶. ÙOñQœRQŒRR%N%MiN®P–PdP#O2RPíQ+PŸNÿPàQ(P^O°O³N÷QdN¥NN˜OO¬NôOäO`R’S‰RSSŸU¥TëRíRýUTäUUÐVÓTòW_X“Y[[ŽZ•ZH\]Ì_^ Zç[§^«_®_^UZÑZ„[]U]š]à^š\Ÿ]^È^U^Î_–_Ìa__Š^Þ__O^H^ƒ]×_E^Ä_|^…abbI`ùaþa¿a·`ÀaÿbcKbaºaDb`_Ö_…aþ^t]è`Øa'a_Ó_€^“_z_ÍaÄcTbžbŸa$d9d~cød;cƒ`Ób‡c`Ý`•_h_SaL^¡`%`ö_s_ù^¶_¬a)`a¼_{AS€ëG+^õ_‘b§c7b·b­a…cŽba‰`’aaóbèb¨a2aq_^û^_£`í`wb™a™_ç`+`"^í_j^Ö_]§^ö^í^V[&\Ó]›[]Ì\£\Ç]mYà[§\j[æZ€Zÿ]YÿèYˆYÿhZÿ&ZÿŠYÿYÿ‹Xþ²Xþ·Yþ:Yþ­VÿƒWþ=VÿYT×S°S„S¼TèS§P¯QøQaSÿ8OîSØRÞQPÿ¹NÔL×NM!M+LØHGIiGjI*HpGðIcFüFºF:F&FDêD-DæCéCõBìC­D0BoBéCÏCÕC‘BÈBÿ=A§A@•@ AØA!?î?Ù@?¶?°>‰>=µ?†=<=ß=™=É=Ï=Ò>>@?@>ˆ> >ô=Q==A=I>M=P<Ú=<Ò=;Ï;‰< =;“:ã:í;;ã;½:³:n;h<w=<Z<e<¬<´<î<j;²;d:ª:Ó;°;(:ò;ƒ<:V:Î;˜:÷9¹9ò999è:::ˆ9æ:7ì7)748¿8‘:,8½7™6â6j6`6ô6{6­6µ8|9c8ä7#5>5 5ó5¹6à6Ñ6è6ô6é5«5~5G4=4946*7"8ù8.8.97¬6Z6U77'7›7S7š7S7Ö7 6 64ª4c5•54£4#2™2Ü2ç2Ý2q362£2O2 353b2ª3·2þ21ó/¯//Å1(3»/Ï-œ,ó-h.Î/µ.E/²./{-‹-Ò-Ã.t.ø0//8.=.6.---Â--ö-}./Î.Á.80¶.¿.Ì/2.‚/K1..Á.O-Õ-Ì/9.†.ƒ..A.--Z.G-6*¥(|*+)²*4)''Ñ&Ù'Û'È'¦)J)ú+€+,Ø--É..²2+37VTOa;ÿ´7ÿ<ÿËBÿ¢1þ°þ)6ý¿•ôùlãá—ãá‹ãáÉ‘ãá ’ãáA’âá5‘âá<âáý‘ãá‘ãáœõóàùý–ü.üUüLü¥ü.ü“ü=üžüUü€ü%üü²ü±üÚüõüü;ü¼ü5üŸü|ü¢üìýè- ^OjRR‡R0PRMòMqM}MìO%O8P¦PþQgPÖP/PZP`Q^Q P¬OtP:O%MdLìMN¦N¯NªQ'P^S|SS S&SnRúTTRþTœRïS/UÜU¥T²U3XWìX Yi[\ \_\Å^É^ ]–]X]©[Ã]š]Ä[ÈZÌ\\_Ç_W^×^”]×_^–_Ïa^£_U_H_ßa!_Õ`U_L^__…`þañ^“a;aFb=aøc2`¼a‚^baøaô`ÕaÆ`y_K_Žaºa`Ia“aLa`ÉbD_b1^Lb:a—a_‘cbÞb\bÖd:d¾cxca—`‹a a `Ú_aaI_Ø^š`_Ï_¼_±^º]€^8`>_€^}Sa` ñQ al_û_z`¹a9b~abbÆaˆb´cbtaƒa_Â_‰_1^z_³_l`²^ía#`¨_Ú_1_`·_#]^š]¢\_\]ç\$^_]>][æ\Y×\:ZrYñ]b[*YYÿZÿ°Zÿj[[ÿØWÿ‰YÿBZÿÈXþñXþ{Uÿ”XÿXþ=UÿÄUÿ Tÿ}S-SŒRŠQùPæRQ¨PPQT.RWQIOÿvO MÿL˜LK0IáHhIsFÈI7JYH0I*FhEèEõE©E«EkG!D°C·CoCòCäC´CíBÞAáB*B¤AšA@a@b@ ?ã@0?i?™?«?~?+?³>Á?>/=µ>->=—?0>€>H>ÿ>H>K>?þ>ˆ=ˆ=Ï=¹>À<Á=<•<Ó<á<Ò<L;‘< <O:ž:%;µ;g:ì:ö;-<¯<­<´D =(<t<e;š<ë<é;ð9R:$9©:59ì;x;‚;?:P::f9¡8Á88€:*:ê:¡:G:m9#:S9.7ã7ÿ:’9@8O7—7¯5³6s6(8)98Ü7¥6ü7³6G6z6Æ5s4i5`6©6l6~7r6õ6O5x4J3Ö4¿5ø5©5í7(7v7¯7g6ç6á6!5•6e6¬6\6K5ë78a6_6I6”6W75é5¬5^5)4v4~3\3n20¿/Æ0>0þ21Á/|/x/e1i.T.O/z/.E-+È.º.x.Á..½28-þ,³,Þ-U-Š.¼/ˆ/-|-Œ-ƒ+ù,y.¶.0-Ã/ .<-‰-J/µ.Ä/ï/,/ì/?/z/ð.:-Ÿ..y-ƒ/-–-„/.Ñ.Õ.›. -Y*‚)Ô+&,p,+_,5)'+)Õ+,*,Œ,†+™+¥,,,Ñ,£.Ô.ì0°4%7SÁQ=ÿ~7ÿc<þ=ÿÀ2ÿ‰ýg4ý£“õùËãáßãቑãàÃ’ãထâáø‘ãáÇ‘âᬑâốâáû’ãáœõó›àùýÔü#ümü*ü…ü×üZü ûüÃûßü)üÍüÆü üêüÅü£üœü<ü»ü*üËüSüü* ÔNÔOÒOPŽOûP©OL`LµLuL»OiPjPvOqPÞONM¼OZN!O«MöO¥M÷MLžLîNpN,MóQ{OQ"PîQRScRáRcS×Q¶ReR6R²SeRôS¾UµVûVzY^Z/ZF[(ZYŸ[Ù\,\þ\p\q[å[Û^ZOXŸ[æZÚ\_]P]ì]`]_]b]¨_—_Ì^V^Î_¤_—_Ö`P_ _L^Î`¾_Q_ø_(`¸_Òa÷`€`bw]U^Åa ^Ì`_Äba`—_×c?b aQa€`T`[`™_`˜`‹_Za aÎaÏ_M`ÔbKaÔ`¡aÁb8aˆ`ÝaS_‘^“_«_u_ma`^Q_V`_ü`h_v]ð\|^^-^j\cGdŠ_H³^v`ç_¹_{_`¹aÃc5bb»abra¼aºa;au`°`u\Ž_©]€`²_ó^h_k`k_æ_¾_ø^y^-^c^"\ê]¬\l\ô[l]f\¤[d\ZMZuZôZi[kZZÿvYÿçZÿ·[J[ÐYÿhXÿ]XÿRYÿÊYþ[ÿPXÿ‘Zÿ’XÿÐUÿ‰Vÿ¤Uÿ¬UØSUTST{QíQO´NNæR˜P$RdPuNÚLœLL˜JI~J}L2I´H8H0H¹GzH]EðDõF,FFiF1DxCæC°C,B`BB|BîAôA°A¶A7? ?c?á@’?æ@b@@@#?ì?{?s?´>ƒ?=Ø=ñ>1>R>Q> >H?}?º?}>È?q=Ì?‡?x=Ì>È>Ö=½=Ñ== =^=;Ø;Ó<G;„;;Ú;ž:›:Û;ô;o< ;Ú;©;²;z;y<µ<±@\=*=v;ì;*;`:ê:p:>:1:~:::58Á7Â888Ã:j:9:89²97:&8=8·9÷:j:y9z9•98ë8á8ª8à8$7ì7í7>6:4ÿ5…5»5*4ò6Ð5Ð6/6x66?4 4}4ƒ4Ä5y44D53564¹5h4¾5]4ë5¥76ä6£6×65ã5¢4Ö5¥5(5g4ä5ä55ì5 64à202:2t1O182¨11@0ÿ1!1â1£1£.Ë.Ë/F/¤/¼/e/ä1]/50d0¥.‡.ï05/|-Ä.ƒ0>/C.?-Æ.5-µ-ø-9,À-5-*-ñ.ÿ-û-q/©1¬/æ/ê/ï0Y0=/¿-Õ-Ú.2-š.O,Ñ-Ï-•--Ž-Œ.„/..½.=+H-.*C*y+T+h+¥,a+à,-ü.¾,+ß+’,:*|+C,§,à-v0¬3Ý5*V=P”;ÿþ9ÿ™:þ;ÿ²0ÿ}!þ4ýß•õù÷ãá ãàÆ‘âà|‘âà÷‘âà·‘ãáÅ‘â᳑ãáÁ‘ãáK‘ãᣜõóìáùýüKüüÙü´ü–üüüÐü©üüüÒüŒü›ü…ü¥üMü›ü#üœü›üü+üÊü»* bQNRPœPSQ Q»NKçKçKµNªNµNËO£M›OUN_OLøO2N°N§O#OãMeM^MmLùMÇN¥O+PPPRRRXRPRkSòSêTžS­S¬QîSS!S¢S,T4U£U¶W(Uó[tV™Yt[[Y©WY›ZH[`Y6[å\±[è\šZ¢\Q[_R^ê_]^›^^Ø_g`V]__Í_Ð`O`G``ù_` a{`A^¸`_Á_ `úava°Z•_ b _É_—`†bc¿aaGaÆb‰`’a`a@_˜_àa‰b>ba•cb8b•aa-a,a™aS`K_ç`'_&\ô\A_°]€^ï_d]«^ ^_^^G_C^Y^Z¤]\^±[Ï[0@‡e1Ff]^é_q^ýab…bb¿bIa†a<`N`Æ_ûa°aç^ø^ý`~_º`6`9^D` _£_o]é^«^o]°]w\l\p\b\d]$]Û\£\[Z[ÇZ¾ZpYmY WâXnY"YˆYÿðZÿ°\ÿ\BYÿ6ZÿvYÿ [ÿÅYþsYþzYÿ[þ9XÿUÿeVÿmSÿµR¶RdRäS¿RmPÓP”PžO OéP&OöPMÝLšLYLJ>IöKsLsIŒItG@G8FwE¼E}CËDErF/E{D´CöDaC­B!B{AuAuA6AýA/AqA®AA @˜@”?§?œ@?¯@Ð@?Ù@?²>Ë=Ð>(>¤?V?Q>>D>G>‡?~>ˆ>þ=Ê>=L=<Î=Í=O> =‰<™=l<];‹; ;;T:/:ó;i>L;ê;y:³:«;6;ë;é=<¤;[<«<p;/;a:‡:ú:Ñ:æ9ü;Œ:T::É:9`8B8=8 8‹9:6:‰<Ï:Æ9±:c9@8Œ8å9º9.8ü7Î8Ó9Í9¬9,9f9\9928¾8c8Z6n6â5ò5÷5ò6a5Ø6²6}5764¾585»4~4y2‰3A3~44‡5w5*4î66!5ì6%4t565•5 5Ñ7b7_5à6'675Þ6!77 5\4-2Ù2ë3!2Ù2b2l2«2r2k1y0Š/I/ /²1b0c1›0®11ê0i0ä/081i1<0k0»0+0¡/./).ˆ/z/÷-ò-v.¹,À-¶-ô.9.G.@. .r.¾/Y.Q/$.ø.v/I.Ä-Ñ-Y-š-]-R.š.-Î- -g-Œ-M-†.),Ó*³+C+å+ª+;+Y+“,,H,â-,Q,+*æ+u,.+î,«.20¡2â3pS¨S>ÿ<7þ?:þŠ=ÿ4ÿx#þR6ýK–õúfŽãáoãà‘ãàS’ãà’âá9’âá<‘âáó‘ãბãáR‘ãá)œõóòáùýü#ü¼üÑüûü#üõü3üÄüUüÜûüLüšü´ütü)üLü[üüüñütü”ü›ý¸*œPXPßPÐQQˆQMÞJaJfK²PÎOMþMÛM“NžM£L?K{N7OÓO•OeOM¤L°M;MyN|MpO«N­O­P˜PåQ™QdRçS)RiSS1QöR™SåTTáTðSÄU1UnVcW©YªXm] XvY,[Ö\]%\ç]W^Ì]Ú[ [![ÛZî\j]î\Ñ^b]*]m\í^`]á\ª^Q___~^Š]Ì^–_`{]Œ_M`Cbt`a7`C_V`B\asbD`X`aËa`‚aÄ_ÑaËaÚ`$`\_ìaˆ_ì`_U\Ÿ^^gaÔ`ŠaO`Ya`‹_”`O^a^f^¬_^,_`$_n_$_Ú^b^__] \]\Å]]Œ]ú[ŠTPH1K­ƒ®?ÖCæRÖ]ù\×_aLaL`â`˜`R`Ä`=`=_F_ü`0]»`h`ü`Á`Áa-^é^.^~\€\j\½\8]|\\y]2[®]Í];[ìYÕYRX¢Z’YS[„[(X6WâWßZ ZÿxYWÿµ[ÿá[ÂXÿ½Xÿ¡Xÿ5[ÿÊ[þ½XÿZþøYÿÃVÿ\SÿûTÿ4Tÿ1SvTSXRÌPßOºO0NQN O°Pÿ:OÂPO NOMÉL–L¯KÔL(M›JkJ7H-EÅD±E EsBPEóFŸEpE§DgD0C|DvB}B«BdB(B6BoCñBÖBŒCÿ{Bÿ½B@ÑA@S?Í@@?Y?2>ò>{>A=Ö>d>ª??Í>Q?I>A=»>ø?5?o>Á?:?P>ˆ>{>N=—>Œ=R=P=’= ;Œ;Ã;Ë;;Ã<<Ž<Î=;c:£:ã;w;¿;¾<4;_:Ñ< ;à<:Ù:Ý:×9î:°;Ä<(:C<À9Î9—::°8Á:=9»:h9û:™<4;ÿ;`:p:¨;û;è:õ9î977 6d9#<T:Ð9Ù98o7ß8¢8Ó7 5®5å5a96â6Ê6t5÷4€4z4Ï4®4À5õ6ª5;4|44Ç5º5p5!4¾363ë5ä6–5[4"54Q55¦5í6)6c6Ö6Û87 7'6î6š5 5Ø4\4V43í4$4+2«2´1<1å2-1´1d2•1¥1/01³1â0˜.‚/+0}/ò/¨1¦0ÿ/ò0I0:/0/%.°/å/Q/».Â.y,Ó.Ú-ø.¼.Á-|-À-C.õ.î./.°.­-~,€-…,¦. .D.’-¶-Š,S,Ü-D,Þ-!,Í,Þ+•+˜*ç+$+â+¤*Ö**ï,Y,Ú,Ö+Ÿ+•*h+é+Ú,Ð-,,./.ø1á3›3èWuS @ÿ7<ÿ 9þO;ÿ¡1ÿ $ÿ€9ý·’õù4ãá&ãàF‘ãà‘ãàÌ‘ãဒãáJ‘âázãá‹ãácãáòõó*áùüÇü üüýHüDücüçüüÏüEüü·üwüüüüÖüÖüVüçüæ ý¸ ýpýñ ý++KþP8PQPÏQ8MgL«KæMPN:NêNžN•NÓM™LÝJþL‡OØN²O3N¥OMîMµMhNÚM.NóN£P¦PMNéO©OãP3Q7RçQsQòS\RºS¹TåSÜRíSrVUžVWqXhWiX!XfVåY¦Zm[[í\b\Ø[¥[M[×[§Zí]R^]]Ü]¡^§^j^Ð]™]^k`¤^Ï]Ý\Ç^C^;^__]œ\‰`Ì``_ý_Cax`C_[]_‰`“_×_^_ža _Ï_QaÍb“^«]Ü^²_œ_Ð_”_V\c^!_Ø_âbˆ`_:_$^Ý^^[^#\®]ä]c]Ø]c\Ø^+^3]ô]â]L\0^L]^B]SZž]Ë]I\ZÓ?ÇDS]¿qB‰=ëJý]O^c_g_Æ]Þ`^Œ^_„_Ä_Î_^Ò_v\½^°^°^¯_m]<]v\õ]„\³ZñYŽYÓ\ø\·[|[.[/Z–\+[mZYY‘Z“Z‡Yö?9>J=¦>3>–>˜>ž>Ž<`>>?ë>2>¹>v>u>ÿ=Ó<È=I<¥<à;¥<Ó;b<;:^9Î:Ê:Û:¬:­;[;d;â;';e;;&;´;d:¬;5;(;à;æ;–:Ÿ:›;:¯:ª;::°9‡9Q:9Í9c9j8ó8€8þ9ñ:Þ:²:|:V<z>6<1;ù:p:x9x8ð7ö8N9˜:9ž8•8æ979œ8å7m6¢7X5§5¬6#5§6!4¡4r3Ç3‚2Ä3ƒ3‰3J43¸3ð5j525ð6³5½4¾4¯4à4¥4Û6,3£4_4p3è3®4·5ç6n7ž86X57545m4%3¥3ä2ì2¶2ç3f3¥3o43¨2ù2m1£1™1¡1t1£0å1n1½/y./.À.º/I/õ/Å0-È-‡-Æ.ú/0.®.À/-™.N---›.{.ò.€-F. .P.³-¤.-.®0.¶-ò.ô-š- ,·-X--,©-,Ñ- ,“,P,À,Å,+Y++f+›,h,¡,å+2+°+4*C*K*y,S+ÿ)‹)Ç,D-õ092å3*X6RK>ÿ¿:ÿ6ÿ¨>ÿ¸0þ\ýn4ýg’õù|Œãá$â༑â໑âàû’âà=’ãà ‘ãáIãá‘ãáÐãáêõóªâùüÍûÉú/û=!û ûûMûkûTûÒû›û$û™û!ûñûû’ûÃ!ûJ û‹"ûÆ$û7%û%ü+!ü!û)5FòMPˆQ»QP°LeL¬KK÷NùMéPfO[O–NÍMÖL”MMbO#NmNkM_M²M&L¹M½OL)M0L"OØN`LÀLhM OvOñPP÷RmSšRuTSmS®SáTgUÞUáW"Y-XjY—Y§WíXGYOXrY§XE[+YlZÞY§[ÖZ"[¥\“\Ó]&]b\*\j]\Ê] ^][Ÿ\—\—]E] ^P_Ä^Å^Í]Í^E^Ö`;_|___O`_^™_O^×^’`¾_Õ_`N_b^˜^Û]¬__–^¥^2[^`]¢^£`Ö_Ø__&_“]o^“_ ]%]m\«]Ð]¡\¬^ù]©^k]Ÿ[å]f][£\\ZÞZ)\ [È\ÕOf:“72ë0ŽHn[æ_°^Ä^\ ]e]¤_ ]Ò_N`bM_‡`ë_h[A\µ^µ\Ñ\ô]]¾]¶]þ[¼YDY[ºZ\ZþZè\$Z \[`ZYU\ZŽX·XYúXB[Z7['[KYÿ7XÿeXÿkZÿ¿YÿxZÿ:WÿnXÿ\Zþ8XÿÒXÿŒVÿÏVÿŒWÿVÿ RÂRóSØR‘R—PýON½P0O¬N¦OaMÚOÜN P,L,L­LÝK¿J÷L IáJ£I«I GNFLG¶FóFûE®E‘DñD3DÞE(FýED CdC˜CÔCbCgA§AÙAž???”>Ö?b?U@?¬>õ?e?v?2>€>_=n=¦>®>f<&>‹>G>?=©=²=~=M>?> >Ë> <Ï<<“<< ;;W:Ç; ; 9¶<<S<’<Ò;;i:ç; ;%;™:é:Ñ;â;’<;ž;•:›:_::e:£:n:·9…:Ã9Ñ98á9b9¸:©;q;-;; <T<…=G< <F;<;49¡9·98C8Û8P8‡8‹7!77®6Ù6™6˜54o4ç4ó5'6Z6a5e4÷4»3@33‹44ú5é5ª4è4î6`7X7¦8±7è6·4]5f5æ5æ5f5¤4š3¥46/5ç6­7&87/4½5w65n4ç3$2í3`3m4$4¬343-2t1ø2ª2&0¶0:/J1µ0À0./g/x.£.Î/½/½.Â/v/m/:.z. .E.D/.¹.z->-m-È,Ò,F-°.p-ï+³-¸-+,,ó,ì,Ö-d--¬,…,+-,•,`,b,_,ˆ-‘,Ú+ž,,Ë,Œ+ß+†,e+4*g*Ý+Î+â, ,ž+ï,6,0,o*ò)‹,I,","..o/<¹C 2\TÌRH>ÿE>ÿÏAþî:ÿˆ0þÝþP2ý“õù`Œãá¦ãàÆ‘ãà„‘ãàË‘âདྷãàV‘ãáÀãá˜ãáØ‘ãábžöóƒâùý`ýý<ý}ý\þ`ý7þðý¿ý'ýíýªý‰ý:ý²ýŠý ýùý½ý©üEü/ ýé ýâ ý› ýêÐI¿LOËOñP‚PqL‘L:MôMvN¡N5N+MâMPM§L˜M'M&ON®N÷N-M¯M$L¯L1LóN«LªK?LhNjL±NM"NwO'O«OõPøQ¿R¹T+R$SåSRžS–UVHV‘VåWÚX§Y¯WqY^XïWA[ZrZ.]\YaZZZÝZ\[\â]œZ.[\TZ÷\Ð]×]”\!^]…] ]T]Ø_^_^Q^Ï``P__Ë^F]˜^^^ž^J_€a?_Ë_…^E_Ž`—^^]¢\;`^S^]^Þ\Ù_]h^Ü^ä^à_d^\]\Þ_L\§\Ú]j\cZ¢[,[ê^"\s\t\\]]ƒ]”]Ê\ÓZÙZæZk[XZ“]\„YDHCžI™\«_X^®\ƒ]^S\ï_H^]Þ^Ý_‰_ˆ]b_8^gZÇZÀ\O^³]÷[ \2]µ\bZ½[¡[`[cZjZ®Z8Y­[+Z¬Zv[)YÚYÀZÏX}YX¸X}YƒZœZ|Yà[YUWMWÿ²Y‚YÕYWZÿ5ZÿQYÿWÿuWÀY€XÿãXÿÏVÿ#SÿµSuS_RÐRQˆQ_OKPûOxNNNGO³MƒKüJÉKÆIÎJžI´IëI¹H:JwIçH4FýF¼G©FìEâF¤E4D¹EáDöE#CwCbAøA¨A¶AéAqCA¥C0A_@?Ù@@_@e@@f@t?½?@j>ú>ø>•>u=â>>>P? =ù=ì=r=s<¼<D= =V=É><Ì<N:I:P:›:Q:Ë:Á:Š;Š9é:š;;W;:r:%9¯9×:f:*:ª:«:a:ö:!:Q:Ÿ:$9:_:ž9¨9a:$9ò9ö99È9Z9·:6:î;/;¤;a<<P<H<ˆ<;<½:»:Å;ý=Š9‹9O99’997˜7§6½6¢7b6T55ª5â5o57’8×7é8j6z6‚7:6ò7z6¹6°625ÿ6n9©;^8¡9˜9%8µ5î5`4œ5d4%324b4-4á4™55c55·4å4$3f2í2ë3l2t2)2ñ2ä3 2»354Z4+3ç2c1ê2a0-0j/Î/ .§.Ð/.Ò.H.H.%.J-Ò.I/ .ò./0.ù/~.ý/à.l-¾. ,*,M-É,­-:,4,¿-v-«-ê.o,Ñ,Û.§,þ,µ,8,+ +‡+¨,/,,+à,,,Ÿ,×,—,,Ü,P++ˆ+Û*ì+D+¢,>+±,m,,Ô,¯-,î,6,;-Ÿ-n/ž8ý4Ê2[SSRù@è5þ<ÿC9ÿ£0þ{þÐ5ý9ŒôøìãáUãà‘ãà•‘ãà•‘ãà‘ãàÅ‘ãàGãàÖ‘ãà—’ãáažöóÃàùýªþÌþAþ*þþ"þ$þÒþËþäþÐýÔýŒýóý[ýÂý@ý«ýûýVýèý`ý±ý{ýiý¶JMEPP\PøP¶N LVMuNmO`N\ON“MØMžKpM¢M™N¦MkMþN3N¬N5L3MYMùMõM¦J‡JBNìMMõL°N-LÅMRP|PeQoQ¹RbR,ReR¥P¶RóTªU†UŒVÚV%XW!V6Y#WÏY8YY¯[Õ[Y7]YTYNX¤Zã['[ZYšZ'ZiZ²\Ø^V]^]&]Ô\J^Z^S^…^]Ï_8]†_^„_z_z__^_Â^^U_ƒ_Ã`È`^a_]Ñ_] ]ã_`^›_‰\o]r^^^b`…__ _ ^š\]–]Ç\Ô]V[Z[à[XZð]á[ê[6\¡[^[Z¨\[Ø[Zc[–Y¡Z—YÐYYâITQ>oU¢]œ]/\µ[„]É^Ñ_H_Æ]Ý^—__L]™^^w\m]1]®\H\4\¼[º\ª[1[+Y±Z%YsYþY|[X<[(\ ZXY£XìXÐW;W„XL[HZÖZÈ[ðYÌYb[×X@VXÿaYÿ7Y Yÿ2XÿSVÿåWÿéWÿðW XÿpVÿ SÿóSÿüRõQâQ¤QGQJOO‰PƒN1M4NýOtK¼K‡MwK}IÊHÙJóJêHýHÂHJ±H¿G½G}GjH§G&E4EíF"BîD2FC"C¡ChCnB¯BgA©D[BCa@×>i?Œ?X?_@*?#@+@0@§?s?o?r>> >4>l?>Ö>G=;<ú<þ<¶<}<­;ÿ=D=> >?=:J9':;L; 9Œ9Å9@9]9â::\9î9,8å9™979t95::µ:|:d:¤:â:à:Ì:Ä::):.9Ó;:á:d:°:÷:Å::::ž:æ;0;¡= =H<¾<ö<î:ï;1<1;ú;×:ú:‹::Ž98S7Ë8887¤6Ò7W6g6¯6s7\7°8b8¨7o7â6ý6ê5·5ì716)4ý5¨7š726S77à6æ7p6i573÷3æ2&252t2e2ë4&3e3r2¬3­2­2u3d2-1‡1Ç0Å130þ2å2%2l2½1:/l.\/O0*/è/÷-‰.}-Y,4+=-ö//-m,.-Ô.Ä.Q.Å.B.G.ø.0.F.¬,Ü,,J,ˆ-¾-+¦+ø,,²-k-í-+,ó-¯-g,î.p-),},8,V,K, ,–--,™,è,Ç,+å,Õ,,,d*ª*­(í*c+•++à+¯+í-^-/,ñ,ê-Ö- +ö,q,ö,D/L12F2\R_QÉ=ú8ÿh?ÿB<þ./þ÷!þÌ3ý§˜ôùaãá^ãá‘ãàÞ‘ãá‘ãàÎ’ãàM’ãà‘ãàÏ‘ãà–’ãáköóFÜúýÖýý•ý ýNþ0ý7þyþÚþÌý'ýtüuýÁýµýDýöýúý²ýýü•ý€ýAý ýÆ+ ¨HŽO1OÿOuOyP\LÑK/JäMZOO OßM`MˆNþMMPL¡MgLlL=MsL«L%J©K0KöLcLÞK'L›L–LêLçMmNžM1O5OîQ$PlQóRªS`RäR/Q¯RäR—TÑSáUUÏV\U¥U¬XW¨XìXW´WÓWÉX´XßYÍYÜY×XŒVéXéY¥W*ZQZf[Þ]'\à\é^Ï\`X]D\]Ó^^ ^Î\Ô] ]Ä]‚_8^q] _]_\ ^—^Q^Ý^Ü_]a ^”] ]f]’]¤^ _]à]c]¥\o\³]ô]R]‘]]P]Ó[a\ÅZàZæZo\ZÞZ,Yç\Z Y(Z”Z”Z”ZkZœYžYéZ¡Z [UY˜ZXaOP@"ef/==2[³ZÇ\º[["\Ù]d]S]\˜^^È\Ò]‚\ð[z])\s\÷[:ZrZ³YGX1YtYòVÁX¨YnWpZªXóWîYYçXTXÇXˆXžWºV·X8[nZAZ8YôYÛXÐXÿþXÿuWÿfVÿëXÿ.Zÿ`Zÿ^Xÿ}Wÿ7Xÿ Yÿ¢YÿXÿ$WÿVÿ%TWRmS!QÐRPúPFNNN­M½N;MMOM³NqNLoK†KçI¶IõI:I‡HqJ"G÷HuG9G­G1FdDöE*EEJD¥D"DCC¢B¨AÜB&ArC«BA@¥@?Ê@LAÿ:A"@'?õ?w@>¢?"?t>»>Ó>,>¥>V=L=D=»<Ò=v>O>A=8==À=}<Ö<ˆ<Ô;K;L:J:9Ô: 9y8“8ß99#9#:b:g9!8,9/9ô9¬:š:ä:©9©:&:ž:$:9\9Ÿ9"8è9¨9Ù:/9¥;i9Â: 9Ã9Ì9‹9Ü:d: :¦:Ô; 9 ::9°9ù8ö8y8Š7‚7†86È6ß565Ë6Ë7]7¬6¦67R7¢7l7.7ü949g8ä7ò7á7)65‚5r6¨6¥8%87Ö7¢6â7c8(7à8r7.7§5î4]2¥3%3ý4b2£2%1´1ª2ò3…1Æ2D1y1r1B1/ú0/Ã0³0:0<0x0N.„.Î/z000p091ê/‹,ç-¦-Z-ß.-f-^.F.-Ö.f./©.¼.û.‚,¶+É+,,Ý,Œ,+ù+,¶+–,},¿-m--#,Í+^,.,n*}+ã,ƒ, +@+’,W-]+ç,),ª,X,‰-D-ù- ,Z+ß*,+“*+N*Ü+,&+w,Ô,Ù-(,­-,Ý-E-’./ .È2r4±3:S%RM=ÿZ:ÿŽ6ÿ;ÿÚ.þk!þƒ1ýÒ—óù(ãâ:ãá[‘ãàoãáâ‘ãá ’ãà‘ãáQ‘ãᙑãá©‘ãásöó]ÞùýjýLýWýEýGþ0ý&þ9þþIýƒýHýâþêþÄþþÐþýDýŠý@ý ýHý;ý¬þ€.*IöL¯O•OSOO¨MYK5KáNãQP…NÐMfJ>LMQNTLÜLØK†JøKôL}KIûK;J«KéK¯KeLeKýK3LjM`M`M¥O§P©P+Q/QŸQÙQÙOìQÛRÕQÚSHS™T¦UîUíW$VóUvU¦V½VtVåXõXULXòW¸W½X(X4WãW¦WºWeUU VXyXÒX‹Z#XÛUÄXÿ¸XQXÿ¿Xÿ*Wÿ£Yÿ>UÆXÿêXÿ\VÿïYÿXÿ’VÿTÿÕTÿ§UTwQ’QÐPûPEPHPÍNüM4KàJÌM°M5MöLþK:J½IöHlHHÁGØGŠGÆHuHqGaFõFDÔDD-CîD-C»C`BÚBïBèB$AÿB2AdA±@u@¤?é?X?Ö@ŸA>Ò>â?0?g?¤?X?`>´>ÿ>œ>m>P>>„>5=Ä=?= =A<L< <J=…==;=ó= =;c;U:Ü:Z9ˆ9@9H8Õ98^9!9Ø98e8f8®95839¤9r9ê9j9o:g9Ò9ä9Q8•8 88¦8p8õ8÷9<9–8Ö7§7æ7ï8v9±8z8¬9M9U9 :„9Ë:8·97Æ7›6â6"6 666.6R7f7é858œ7$8Ý7Û8m8­8_9,9,9(7á6§6ó6ú79726«87ž7Ú8œ8`8_8n6ã7´7¶8§6-5`442r3=32ù2ò2ô2ê282ù2B1y1º2K0A1 0Ä0l0ò0O0‰0y0t0ô0½0M0T00Œ/Ò0180ú13/÷/B,å-p.n,&-!-v-,^-g/./5/ .3-@,&.|-»,c,H--C-I-,p-t.=-â,è,·+ü+½-;+>+H*Ù+È,>,G,9,V,Í,,[,A+8,µ+/,S/O,+h*ñ+¬+$*«+«+¥,,à+0*A+ñ,Ù,l,F+Ô+h-—-Q.£/24?4:RˆR‰=+=ÿ7ÿé5þ®,ÿ9þ4ýªšóøåŽãâYãáÉ‘ãà‘ãà]‘ãá’ãà‘ãá‘ãáæãâXãá¾öóWÝùýéýDýTýgý/þ*ý7þjþÄþÚþ0þ þþÓþÊþÒýwýEýºýëý¨ýýý ýUý>'›HuMšNßO‡P O¼NˆLaK)OKP—QêM!OPMšL]LMÐKžL©LâKàM*LúM+KsK¹K?LuL¬JäK¨LK«LsMbMkMëOjOjMÈP Q¥P¬PfQðRRRUSWS_S#S7V^UâXdX%X“X#XVêXíY¤WáYÓYåYåZÎZÂYEY”XÍY’W­[NY“[P\Ô]]\[‹\ X#V"Z¢[Z\] [Š\ [‰]†^x^Ë^ú^L^ ]_]†^^R_‰__^•_^Ã]Ø_ ^Ž^Ñ^[^Ÿ]/\[Ý\Ö\JZh\W[é[¦[Ý[ÔZdZâZ©Zo[¦[¥\g]ÑZé[¥[œZZu[U[XZ¦\’[’Yë\ZÝ\[ÙTHPNvIO*Q¢[±ZñZ˜[] \˜]Ð^€]^ˆ]•\\[]Q[\@\ZYZß??ã@9@œ@_@!?í>²>†>C>u>>{=Î==<<V=?<Æ<I<@;Ð<<¿;D<‚<A;;::€8Æ8È88h8a8ä9T99858f8ä9?9è9¶9ë9´9°9"99i8¨99Ÿ8f7¶7ö808688C8~8Â8L8\8m8¶908u8ß8õ:³:°9°9p8ý8·8°8}8Á7Ê7Z87A7@6²6C8U7å88^8U88™8è8¯9]:9–9l7/8 6°7p6n6ª7(6u7"7Ø8b8˜8%8k8 8%7µ666¨5$432c0ú0‡0ò0Á1;1r1n0Ç00/0G.‰/0»0û/K0/T/J/‹.œ.Ö.æ/Æ/“110:/Ï0¹0//ð/Q/#-Ê- -ß,ì- ....–..Œ.ù-@.->-J+Œ,ä/ú/³-,÷-2½.=,t-d,ê,|,ã-?-Æ-¸,¨,S,\-",,,,,g+˜+Ø+È-€+.^,–+ß+,Í,Ó,*Ï*r*í)é)þ*ƒ+1*ï+x,d,f,--L,ò-ê.—1N44uQR?r>ÿÛ=ÿ±<ÿ½0þ¿"þ40ýÁóø ãâ ãáÑâà}’âà<’ãà ‘ãáÁ‘ãáIãáeãâãŽãâqžöóNâùüSþýýÄýýý&þâþ þþÈþ(þ)þ!þ;þ!ýýÁýý„ýÒý]ý1ýóýüý5-~JbOÆPDNqN*OfNýK¼K MÕOUOeLâNúNÕLœLËKœLKßLîL!KãK›JxJÆK2KnM/JÚKâJ¥L-KvLrMaM¡N&NwML3MñNOëNtP©RZRR¤R]RkTÚTU_WfW WÈWmW“WX"XŸXŒXËWZ’W%WjV%WtXSXRY—YËYRXÏ[\[ZfZ–ZÔZŽY_ZZ ZKY×Z—Z]ZÑ[ \ÿ\Â] ^y^ÿ]Â[f^H^Ã_^Ó^‘^^_W^Ï^Â\]á]•\ƒ\öZÉ^[RZ\–ZY [MZÝZ&YÖYßZ[ÞZgYçZTZÔ[•[ZZÈ[ [LZ›\ Zf[YÛZZN[QZA[3M DÝ_ª—²‚œJÁHŒO¸Y¶Y\Ô?*>ì>Ñ>Ø>Ñ?g>p> >=¤<ß=”=Ð=¿<×<½;É<;ˆ;B;“<C<B;ž;M;L;9Ù9Ê:B:99×88­9š98á9Q8Ô9]9+9É9,9ž9®8ë9b9 9`8å99œ:e8š8š9¥8¤9l9d8ë8ã8¡8¡9z8Â8‚8£9o8ì8á67{8{7ó8-8¶8j8ó:)9}8î7<7Ä8=8ò7<6=6D6Œ6 6•6Õ7U67$7u6«6±6ñ7]7ª8Ý8_6j7&6ð6é7b67ï6î7á8g98_7ö8)7m5¡42 3£0x0…0Ã/û./—1A0ñ0Ž/À/¸/Ó/M/¹00ú0z/ÿ0¿/´-Ñ,ê-Ñ/¡.a/Õ/ß/S./T/A//.Ð-Þ.Ý.§--"-,Ÿ,Õ- +æ-K,×,œ-„.s.,û-Ä.Ó-É-ò-é-u-:,},õ,,@,i+}+£,i-o-d,--V-}---]--‚-†,],Q,Ë,Ã-:- ,,Ð+Ó+é,+*ä+*¤***±*e*ô,,’-µ--õ..//Q02µ5%5®OÚQŠ9ÿÞ:ÿd?ÿ`?ÿd/ÿXþ2ýZŸóù¢Žãâ‹ãáÆ‘ãá‚’ãàG’ãàŽ‘ãáÔ‘ãáw‘äâ­ŒããøŽäâIŸöó¦ãùüAý7ýCý¾ýEý5ý7ý‹þ þ"þ ýÕý&þ8ý}ýÅýýýÍýMþÛþÍý¥ý=ýzý%éMÅOŽN÷NtNANºLMMâL¾MMÒNÞOKON—MKÖK•KÒJJ!L[LuKöJèJsJ=KçKsK­KdIëJCKòL5JûKL@N KHKwL®N`O6O`PoQ+R_RXSbS7RfS`S©U£UçVVUrW¦WwVƒV|ViXiXšW­XV8W#W[WPX”ZYÓYW¯Zr[ëZãZgZHZ ZÜ[\ÒX’[ [ºYYž[Ð]H\¼[ø\þ\Ë\E[Ú^ ]Ÿ\^¶`_9`5^°a<__C^^Ì^9\È[Ë\\ÚY¨[f\å[/\[Z¯ZìYïY.X{W•Yï=n=?B<Š@HQ9XWoYoY|X½[,Zj[X\JWHZ¢YZƒX×ZYWeW'VÞWNWUT×T‹TPV TUÅV…VˆV~V(VïWU¶V\U/XX•V–XV@YàYzVØU—WDU‘UÍTÿ÷Tÿ¯XÿlXÿ4TÿþUGSÿ¼RÕQÚRkQèQæQäQN¾N¯N£OŠNþO;N·LAJîL>MzK€MAL…NlNqM¥LeK·J3I¦I£I)G³GcEŸFUEMEdD#CÝDhC©C_BóCbCYAkBaAb@©?ñ?«@#@Ù?x?à?#>•?g?n?—>Þ>+>£>³=ò==Ñ=/='<Ž=>>=I<º<G<|<O<Š<’= <J;Š;J;Š;:9 9Ù:»:Š:È9>Ó:I9 9½9†8Þ9Ï99`9¡:a8ï9g8[9'9Y<?ý?C7Ø787®8Y8c9”9\9h:r9q9?8Ã8Þ7í7½7Ó5ï7779æ7y7¨7û8}8A8z7¿77B7ð796ˆ6É6™7ç6 8X88U7ä8´7¨88G7Ÿ6ì7Ÿ7Ý6³7"7k6f6/6Ý6£6_7f7ç7_6õ6.6,6t4Ä4÷3l3ã2ñ2º1A1w/ /T0/Œ0/W0 000Æ3m0Ç010 .Ê-ˆ,å,é-›./V.d/`//U/Ã0T0O00Ð.Ï....'-á-6-T-&-Ó-Ø-- ,Ó-,M-z,†,û,Ä,r,®-8,¹-è,¬-g-¯,©*Â,¬+ª*þ*‹+<*Ó+ä,,+Ò+Ú--C-t,J+Ó,Œ-,È+:*N+Ã+Z+**T+* +l+,#+ì*ã,+R*;, ,•,f-˜..˜1µ4,3ôOjTÌ=ÿ†9ÿž=ÿÂ7ÿc/ÿâ!ÿ 6þšóùíäãÂãâYãáÄ’ãáJ‘ãáãá$ãá-ŽäáÇãâxäáMŸöôZäùüUþÅþÑýýLý5ýƒý~þ8þ1ýýÕý>ýFýÙý|ýýEýTþÿþþAý³ý²ýûýÝ"I÷KOJ²N.MqMæMyMÃMN¾NÈN;N½OMÞLÜL\KKÒKcLK*L›LcJ«KsKKôLwK±K[KáK)L«L,JÃKyKùL¸JWKµMeN4N{NpPfOQžPnRgR"RUS^T×VÕWŽXVUcVçVïW!X§YšZ YàXÑWÑWVVX˜X[YX•WÝ[ ZW[ÕZYÐWgXmYQ[QYÓY™YXâY‘YÞ[[QY×YÔ\³ZTY/]\]…]R_D\ ]À\]†^„^:^ô]Ç]\Š\Q\Õ\’ZŸ][³Z¬[-Z%XöWüY_Y´Z`X¶X¯XÚY¢ZSZ‘ZS[ËZÖZç\KZPZÛZ™[ YëYXW“RÖ3a,20¸8W;¡9‹;ú7Á;–AbMT¿X¥X£W1YÝWêWPZÍZYXmYÉY X\YïWeV™W–W•VEUT™TT T USVTƒUÍV…SÀWvUpUsVÏVÜVÉVôV…WÂV÷X»TTúTVÞTÈUÖUÏVÿuWÿ¹WÿsTÕSUSJQ°Q OÜQ5PþOüON÷P7OXOZO‡OMMN,MÂLmK|MuL°LM@M«M´LûL©I©JeIvGºF}E§FÙFgFF©D˜CšB®D°B»C-BæBoAe@ô@k@ó@»?‚@-?²>é=?n>>?œ?£?m>m>û>|>{=ö=M<¬<<…==x=<Ç<†<M;ù;Î;;Q;Ñ;9Õ:œ;Ð:W:–:’:’::’:Ò:‘9‘9Ý9ž9É9Ï9Ñ:U:«;#;’9Ü9’9L9Z9I;N9ö9¦9Ô8Ú8U88Ö8&8Ò8ã9£8t9~7þ7É8Z7Ü7Ü7d7¤9766Â7ò8y809|978*887x7¹7º7ï7B7Á7Ð8ß8O8¸9G9E7Ú88¬96˜4ç5¨6h6"6X8!7Z7Ÿ76Þ68 7¥7Q6Z6'7X5/4ô4í6¤4¿36/À/ˆ/–.Ý.‘.Ê/‰/€/…/00~//‰0.´-..ÿ.-ž."-¨-(.Ê.`-]-".a/.Ú/0.ž.œ.--Ü-T.W,¦,4,§,³.—,‘,Ñ,b-·,’+,+–-ƒ-ê,}-+--~-6,=,2-ÿ-©,ú*Â*Ê+¤+š*ë*C+1,+¥,,`,Õ,Ž,Â,õ--K-A,ø+~*J,P+Ð*ö*k*E*Ñ++Ð,§-,,“+7+¤,_,[-B,'-Ü/V/q1e3à3òL+R=Â:ÿ<þ®:ÿÙ3ÿp'’@õþƒzçñÿtäïñväíuväíuäížtäí­tåísåìÏtåì•våì,†÷ø[ºüý‰þÏþÆþýwý&ýþ"þ#þ ý<þ1þÈýoý¿ý¾ý ý‘þjÿ›þÓý/ý}ý•ýžýµ(ýJyLMPpNòN“O®N?N¡M¬MqOLøNMüMÕNHKŸJIL˜KËL¥KpKYKI}JeJmLLKKLëLçLéL§L)K­LjM$KpL5M7N LôLYN°OoPfOÉR(Q"QÈR˜TUÌV TØU]SèU U¯W^X`XŠY Y WŸWÊUÑU©VWcYCYXWW‹XÚYZPZW[…YX^ZÍYÉZ»Z VU[WÈZ]RZZÃZ ZuW¾X]‹]^q_/]A\Ñ\K\Á\~]B]‚]¬]Z£[—ZÚ[![ÑY.\Q[Z}Z¶X>X6X:WW®V¨V´W$WšY[ Y”ZNY”Y"YYZ[Z¤[Z\˜\Y V˜N#2¨)ö)})'3b2ò-ž4<1²0Œ4)1{AãNxT³SUsW$WLX%XØW¦VéZÇZ@YËY WcX?VX3W¼X VUS®TþVUCV‚UºSÏU³U$T¸T2T“UÖU’U²VWýWðXêT~TáSæU–UŽV‰V‘VBUØVÿèTQ‘RIRIU-OxO;PyOýPQñQÛOPÇN³M‹L‡N†MžL·LµK¾KNL¾N2MðOiM¡LäLKšJÛJ6H2H-FGGŽEÜEDÏBžDŸDBíBvA®@h@3?ñ@3?2>B>>q>%=ï>p=Ù=ë>`>˜>Y=ì>l>{?>?<Õ<$;â==»<ý<Ç<A<À<Á><D<}< ;Ô<L=|=O<œ; ;Ì;;::ƒ:{9‹:H:Œ:Á:Ä:O:„::\:'9Ú9á:9š99!99W98Ê7•88ž8š8S9X8Ù8r8/886Ç5è6m5µ5ë656â76ý5þ6ð796Á8¼8@7&7o89¤8k818h776Š6ˆ77O737„7Õ6'5ë5´5ê4ò4z5¶6e77Z76ä6`6'5o5­6¯6à6 5p6>5o5é5u4/1Ç0/¢.X.Ð/Q00b.Ù-æ-Ý--ç/Ã0y0K1„/_-â-O-™-ˆ-#,2+ð.B.U.-0+ò---”/ -‹..-"-ž,d,n,,,«, - -#,f, +Ÿ- -Æ,Î,·-t,.?-A,Ô,î,+,+-=-|,p+è+9)¹++u*{)|*½+z+¿,<+Í,Ë,Ë,,H,É,ñ,ù,>,s+F,,Ý+R+X+O*#*Ý+I+Ö+¤+Õ,Õ+Ü+ç,+S,I,z, -É.$.143ù3þMnPÉ=x<ÿ @þF>ÿÛ0ÿ:ÿÈ0þ”è ²€Ín€Ì¾Ì‚Ëf€Ê¸€ËI€Ëë€Ë›Ë‚Ìšì ÛÞöcÿúÿ°þ×þ3ýTþ1þÛþÍýÕý>þHþþ)þ³ý¬ý¼ýEýmþý7ýGý¾þ¹þéýB% NzPFOÎP¦MòN)LKóM{NNMxNyMÆMLKK“LQKL¨KKKæLkK¦L$LtKpJoKãLíLçK©J|JòJKLxJÇK±MdNZOSO'PvN1OíPÚPbPRHSQSÔUQUU˜UßU÷W9V³W¯X—W*WØWžW™XQVYWUÖWW™XŒXÃWIWYXHXæY†XNXÏXõYÎWXŽWURWIY‘[–[Z‚[>YÿV6X[¦[]L]\ê\=[L[Œ]\V\¸\N]ÿ[RZ/ZšZ˜YÙXcZWY#ZbY:YiXùWµXfVÿX¬W5X%Z\ZÑXÍXÝXTZÿYZX˜ZHX$VêXáYXYaSt:ú7ß3z2¶C²>r>>K>±=º=p>7>)=ð>0>3=ä>>æ=5=ë=·=0=¾=<ë<™<Ò=…=K=q<<r<t;;…<¾=·< < =y=M=<K<W;€:ˆ9È:N9Ð:¾:F99Ç:M9Ï9Š9Œ9Ø9Ë:P9™:|9”8b8Ú9J9W9e88—8™8Ú8[98â7ª7µ7ó6Í56d6#6k7+727n6 5Ï7Ï807ô8q8{8¨6ï6“6707v76ø6‰6Î5_55ß65'4Å4Å3‚3x3B3³4¿6&777»727è7«5«5n5,6)6ê5G5A5ê4}4 5ß5(1ð0›0d02.Ñ//B0/‹00C/ˆ/Ã0Ô1r00-- --K,å-a.-V-æ//.›//Ð0/Ê0=//-,#*ì+o+t,•,®+º,\,Þ,¯+ñ--,Ê-D-°.m.ñ-ñ-Ý-t,ó-m-µ,á,;,Ï-w,ý,ù,0,m+µ+º*û*M*Ð,¾-‚,Ë,B,ÿ,Ô,B++’, ,T+Ì+æ+•+–+'+å*¡*¨*å*\+,,À,+÷+Í, +Â,x+]+j, -V-Ó/ó2ñ4¾L²S,>r3ÿA;ÿî9ÿÒ-ÿ ÿÉ1ýåË4Ë[€Ë–Ê8€ÊÿÊ3Êï‚Ê.‚ËăËjžì 'âö$ÿðÿÁþ¶þý«þzþÚþ+ýTýuýÓý»ý=ý<ýjýåý6ý7þ0ý>ý…ý¾ýþýý\NqMrLÉMjO!NÚLlKCKÏMMøMMO»N)MÖL×KKZKVKÓK-K KJ³JmK\K¥LÞK·K/K™MgLtL!JcK`K)KïL¨KöL?MfLüNaO,O"OOâN_PPPÎRÊSÇSRUT…UžVMUÈW"WÌX*W_XMV¦WV]VÛWUÕUV]VVŒUÏUÊUÔWWšW]YWœVW W W‘WÂW9WÎYÀ[ÅYC\F\ËYP[ïX¼YE[Ž[ \]7[Ã[ÆZ[[@YÚ\‰[[ZÆ[Z YÙZBY(YmYlYjWöWéXêYÝW>WvW¬V#WáV§YVXWQYXX—WÖWÉXVîVÔUºW§WÉRuDv5ð$ ¦& ‚X8/<+ •F°1¸(ä1ƒ+;aF LrPQRŽSÃPÚSxU&U©TyU`U[VUžUÖV$U"VTVT•TSÖSRóTŸTÎSXUVRRªS­R¿S8SR¦SPT§UãT!SÉRÁRxRùReR£VT¬U¦W×XPWÐUT‘SZTäTåSmRoQ¼R&P–RP6P”OúNŽMŒMËN?O(LcL¥L L`M­M!L«K¨KîK´J¬J_JãJ±H«JHuFíF E!DÑCvB÷@A¼AóAeAíAd@$?î@l>ò@)?o>¯=è=ú?Ó>˜?›=Ë=¥=4=\=1<þ=ð=½<„<Ð<_<Ë<z<½<ƒ<<K;‡;L;K;ë<»;Â<y<•<Å:À:Š:K:I;;:ù:9Ó9Ë:::„:3:¼::Y:_: 9Ê9Ú9U8›98ã8"8™8å8š9S9˜9œ837[7X87*7{6U6Õ7b7è7`7*7ä7Ý7~797Â7:7Ž777+7æ7]87­7¤8(;16Á6 55]6g6^66]655e646©6¢7 7“7š7]7 6m66¢5a4q5º5ù6i625ï5²6q6¦5ç5 5`4¦3î1ó0û0ª0ÿ/×/A0Ã/Ê0?/×0y0B0–0.¢0H/¹/‚.ß-Ø-H. .Á0¸//.".o0–0S-!-¯// .-.-g-Ú-‘-M-,,b-™-,,ø-Î/t.t.G.~. .7-¶,þ,¥,?+.+k-ì-ê-s,¹,f+Ã+*ý*û*”*É+ ,…-—-L--š,,,Å- ,Ã,³, +Á, +”*¨+Ÿ+Ç*Ù+Ô+I+G+Ç+ø+È+Z,–+—,{+E+£,*,Ó-Œ.Á0Å282ÆMµPº=s8ÿÌ8ÿË<2ÿ#ÿa:ÿðãTË\€ËEËÊrʵ‚Ê ‚Ê`‚ÊöƒËEƒËåžì táö¥ÿÀþÿþ÷ýýý þ9þ:þ0ýuýºý;ýÐýJýýËýíý7þzþ3þ9ývý~ý·ý„þ !ùMAN¸O´OMCO­M7LALäN´MNNM6LK]K I‘JàL¹K£K\JÓKIJXI™KVM'LVLL^MfLHMKKLáLvLµLÍMvL÷M`MïOºOjL»N NäPPQ›RÍT{RÙSÜTUÖUYW!WšXWWVV™VmVðU!U¬UÞTïTXU/V\UTÊW¤VeUVUáWUÔUŸWáUØVVÎY@ZMXZ@Z‹WžY¸[èZþ[»\[Ú]¼]<\B[Å]€ZZYZ"[(\JYcZ,YnYõY­X¥X WóY'Y«VñW|WeV7VõV2VxWàUßWVTUßV°W_WØWÕYÏXÛWiWÏUV¯U£UQE.  P ä( . b é `% !  Ê# â31PhQOåRÑQÙTxSR8QúSiRBS‚UÞU^U‹VœT¯V–UØVT$QõQ}R;Q3SšSbR×S–RRRLR4R¶PÈRÿRªSéT…TßTØUSÛSÐSSrRêS)T”TªXoV9WvV-TiTQSÞS"S7S¤SPë?b>¬=ò>¨?)>ç>é>+=Ù=›==k=k=)===p=‡=;Û== = <Å==3<¸=-;ª;ô<‹< <|<º=p;³;’; ;;ô;z:C;:;7:„:q9@:D:@:À:z: :L:b:»: 98“8‹8–8\9`9ë9Ž9"8¢8S7Ú76}6³6„6S78Ø8Y8Y8ß88{7¼7ø7ø8:8(8(7$6t6Ô7Ü6|5v4ô5>5x5@56Ç7=7?65M65æ5æ5U5Ü7]6Ï6œ5·5(5`4ø65*5³4ò3ñ2p34²5â5ð5n44ê4 3h3%2r1Ð1ª/u0(0Á/x0¹0z0t0}//á/W/P0?/º/û//¨/'/T.C/K.æ-Õ-ç.d.b-Ù...T.‘-X,?-'-g.'.Ê.E.-_-Í+š-V,Õ.-Å.´-Q.-+ì+ƒ*s+4+º*ô+a+s)ˆ)F*Û++Œ*ž*)Õ)Ô*W)†+,©,S+š,+æ+™+¦*ß+­+&,@,r*ˆ)†*ß*€++ˆ*L+À,*é+À,G,,Å-‡,{-B-. -Î.b0Ä3î3ÄLúRŠ=ÿW8ÿ•3ÿÊ0ÿ³.ÿ”!ÿC<þ͕㠀ˀËÇË„‚Ê,‚ÊgƒÊ4ƒÊì„Ë[ƒËMƒËžžì ·áö­þ"ý}ý·üÏýIþxþýŸýEý#ýRý±ýý2ýýQý…þ1þ9ý'ý.þ!þ0þXþ+MoP¹PºOoNvObNóNõKÏM¿N7MúN N»JãK J€JÉKÏK‰KÝKWKÛJŒJáJkL4L*L[LSL•KäL*JYIYJ¤KlLmKvM#MaMšN6MfNdML£MIO¥O®P¤QçQÝRÎT–T—TÎUâU¡VWVŸUWVèUªW/W#W)WV¤WT§T¢V\T«U‚SZTPT TUV˜V—W UÏVLWWVWÀZ.VDXEYxX XIY Y|Y…YúYÖ\E[¼ZE\\[“ZYæY-YZXYX­W»XîX±X¤X+XV©V¤X®WõV@UwT:U0X—UÝU\WV–XWÞXXXÁVšW_VS:S¯PÅKTG÷,N*/Ék >jã0 I.W-å/Ý.Ç0ùKðLaOPÎSRÇS°R½P…T4TšRU”VT$TžUUÒUVUÎSÒSÕO‡O…PrQRRÁRÁRRúR)RóQ>SçTTHSÖT§RT_RÏT|U¡R´S#TRUŽUU,V®UêU½RÇR1SÒP¾Q QQ6QýQ­Q÷R½SgR…PÍOÆMÐK JÌK?LûK;L2JuL˜M—M•KîLiK§IãIZGqH¨GóH+GíFkF¬EéD!DcAåA¨CìBÒAÛBrAbA[@ï@®Ae@ë@?š? ?>á?i=â=Z=f=Z=¢<é=®=î>?=Œ<§<Þ<É<×=R=><L;Œ<=;ù;<t<É<Œ;Ö<2=°<;„;ƒ<;G;;~:Ç:‰:9:9À9ù:ë:ƒ:þ:ˆ:9:Ã;{:9S9<9M8M88˜9+8Ë7Ù888Ú87725Å5M5Ü6’7a8b8r7Ø8 8u8r8o7?6÷7·707i7n6e5ì6m535r6l6L6Ì5š5Ù5:5C55D55Ä6Ë6P6"665g54!55¥5382¹2º332¿35p5/4v3¬2ì4w4µ3£0¨1é1æ2³1¢2+1ô2å2ð1«1<1o/…0Ô//0/ù0»//0 /™.O.. .ª.v/®0y0:/¹/ö0z0}/þ0.p,ï- ..Ž,Ž-,È+"++ä-@,–,µ,O,O,,+)*Ï+H*v*R*+¾+3+ó,…+ˆ+:+ó*È)Ø*€*’*j*«+"+X+Ë+*Ó+M+Ô,T,M,,+Ì)Þ*!*˜*–*É)Õ*,6-C-- ,Ó,™-I,¶*ã,|--F-~.O0>2ƒ3MçQ»=ÿ†2ÿ³8ÿ ;ÿ*þÕÿÑ;ÿ•ãZ€ËjËŒ‚ËDƒË‚ÊèƒÊ,ƒÊ[ƒÊhƒËH„Ë)Ÿí Nâöý3ý€ýËü†ýýÄýÏý¼ýÄýÀüü®üïýý¡ýHýRýýýuý6þþ#þäþ%þ».ßN Q;PÄO5NaOjOqP2NMNM½MÁMˆMIKQKÀJ¥K LYLL“KªLhKXK£MàLóLoL¤MiMIrH}I˜JÚKÞK9JíM&MmMžLåL¨JôLKíMcN#M‘OžQNS UASÁRUSVËVKUOUËW„VœW–VÎW'W˜V¢UMUâUÝTŸSàVâUeUVTWSPS“TTßUÑUS˜UTTV•XY X9WÔX W‡XXøZºX‚XÂYWZ_[Æ[Ï]Ç\FXAZÅYÕZYWªX“XdW¤WâX"X¢YaXçWîVzVoV’TøUlW³V.U¯VçWáV§UnUÜXV˜VfWÞV U‘UÜT-P€IrDø<‹9õ=C<¾9 <‡\ M 67Ý6ì6®41]/D.¼.s6,=HQâRÇRÿPRþQIQ…ToS5TT`TqVUÌUWRbSdSQ²O¿O®Q‹QQVOÃQiRÛSiRöSdV‹S,SÍSÖUÃV>V{V;TæR/ULUWKVÔVUÅVVœSáTÖSTR¾R5S…S RÛSuSìSœRˆQePÉLËMŠN LýKýJÅLJFKbML»L9KùJúI¤I´H®H®HI(IrI/FóH'FlE›BdB1BèBàBiB)BbAÒAmA—>ò@?Ï?j?'?ª>é?>%=û<ñ=x=z=x=?>M>ÿ=V=b=‘=W=É= >C=¼<2<0;y;,;u;û;†<Ê;°< ;0;;À;>:¶:²:u:}:°:2:†:9:m:ñ;?;s;};7;m:ø:Ô:Ë:¿9ø8’8—9Í9Õ8Ì8]87Ô7Ú7"6`5Æ6q6 6Ë7Z8!8ï8 7æ7Ï8¾7î8'76ñ6»5ª646á6\5²6;5ß6f9%8è7û7Õ6Í6 5‚5Ã6C6A87B7D6J65Ñ5˜54 4ç5 5©4ð3I34 404¯4ç3õ2ö2"1¤2a2*2£3"3t1²1:2 33¼2ë2ã2¢2z0ü130Ä/».š/B/É.g//K.b,„,§,°,^,,¦,^+÷.J020¼.A/ -Þ-",á-A,Y-g.W-Ç-.+£,h,Ø,“-ø,P+Ü+â+Ó,},p,z,‚,L,A+‹,“,Ì+‹+,, +£*Í*)Æ++%*'*¦+&+ +G+c+Û,-‘, ,L,•*®)Ï*÷+Õ*L+N+ø,n+ö,v,ö-8,Ê-@-B+Œ*%+Š. /x/.Ä03¸3¶KcO‚?³:þ5ÿÕ9ÿÏ1ÿ!ÿ‹4ÿە㠀˳Êv‚Ê~ƒÊ,ƒÊtƒÊ-ƒÊjƒÊ7ƒËƒËç í ¦âö¬ýXüoüüÏü=ý±ýSýý9ý‰ý€üOüÔý8ý‚ü~ýpýêþ(þÒþ$þ,þÝþþÄ%¸K*OÁO NèNâOmNiNóM½MºM´MaLrL»L»K»IÀJJ}KÚK¦L_L›KJ¦LOLßL˜KLÙMaM˜MkI³HìKQL/KLâM¢LfM LïLîKoJ\LeM`M`NcOÕRZQØRÆSŒRQTV ULVÂWVAWÝX VRWŸVÙUVTœUÎUÕTmU,W^V^SVS]SÜR¦UŠU\S^S-T UÝUVWX‰WÓW–VVHW XY³WUVÖXÍZ=ZAYŠYÌ[XWÔXEYYÒVmW0W7UªUäV)XHWkYU‚UxVþXbV:UƒV¶UšUÍU›U!VšVÞU VaV"VXV$U£UZQÈL G@?B:€:Ü;:=ÑGvTlKb>h;ç8r50ô+Ž,W-1§101Ò=ÓLöQPHRR?RSvSöR¿UXVTTgSæUÚS-QäRbS‰QiNûP&PIPÍPÄP{Q¡SáT®UTŸT"V?RàTÇSÐST·U!R¶TNTUšUaTUÚRÙQSžSßR›QlS°RÖQ\R_TR²SRQQÏQÂQJQUOSMzKÿL,IÉJHLýL`KvLJKJ J|I/H¼HG¬H¤HçI.IGÑH#GšDãD"CÞC&AñB§BhAÜ@ÒA4BAcA[?á?j?"<ý>¯?å>£>+<û<}<»<ú=@=À=<Ò<j<$<Ì=J<ù=<€<¶<6;£;Ÿ;4;x;;¼;t:L:ü;z;ü;ê:ñ;‡:Â:Ç;€;{<=;î;t;®::ƒ:´;s=M:¯;*:ú:49»8P8“99O998L8“76)5ñ6(5Â5Q6Ð6Ö67W7˜9F7Ó87=7°6|4Á6z6©6p6h6ç5ý5³5ï6¡88´7+4Ë65»6=5‹76z5H5C4ÿ5 4a4Š43h2®5#3é3s2~1ú3113p3§3®2¿0K2í2·2&1¦2t3½3­343d3å3·4"2ë3˜3á3{0Û1=0Å1<2,1ô1ð1û2&1ü*è00//X.P-_,?-Ð.“.‹..Ž/S/.œ.],)-“/9/;-^-,ž-r,Á,”-€,,Î-Y,+ê-, ,A*Ø,L+Ê,L,Ó+Õ,‡+Ó,½,*Ò*e*x*¾+.+"+/++++â+â,R,+è*ô,,,&-V++H,û,r,õ-.,{+,·->-8,¬-2,ƒ,ý,I,‡.Á/01M4)6-K[OL<ì7ÿD<ÿ7;ÿ¬1ÿ¾&ÿÅ;ÿ¤”á¼Ë‚Ë^‚Ê,‚Ê¢ƒÊ!ƒÊƒÊk‚ËÊ‚ËÇ„Ë5 í ¶áöµüVü_ýpünüNüýüOýýQý:ý™üügýËýý‚ý±ýBþ°þ1þ!þ¡ýgýçþÉ'$LùOòPóP÷MKO3PuOéM”LÐL=K+KGK¸L~K€IGÓIJ‹JÍKÎJ_JWIÚJßLLÕLKåLØKZL§KáK.LL³K[KžLnLâMçL¢LäKðJ³M›LÛM™M£OåRXQkRTÖTÑU{U V‚VÔW‘VgWOUÈVUaUŸUNTäUfV!VÉWÐTÞUàU^T‘TlWU“STTTTTQUŽUIVDW×W‹WUVBVÔVšVÏWW W[WVY8YxZ[4[¼WUWÖY@X XÜXXW%WŸUèV WÔW£UèVäV®V~UNV#T T]RêR5UŸT¦U¥VgVXV(VhTêTsU R7G¿D<ê:z;Á5X77µ2Ø8E;;t>¼='=ì84V-é*ù+;+Ø-d+é(¥,á5Ð=ÿO™T0RuRmPÀRcP@SlS¤U›RrSRTœS#SÏS˜Q1O²>±>u>o>w=ö=z=4<ü<Å>9>9>þ=C=$;ò:Þ;Í<;Í=¸=B;ƒ=<y<k<z;¾;À;I<a;;;;:‰<+<1;î;¿;Á<E=Ÿ<(;e;1:ê;i9û8I:<9908ª;k:û:¸:>9H8Ú=k9 98Ó7ä8T8˜7j6±756H6Ô76â7b7è6â6a77k7n805Ç46v6÷5Š5¹55Ï7²7>7!7q8h6²6 7¸7}8<7966•7»6C5H4˜4£3©4d5X202¢2Ú3§3©3933u3¶4,3q2ô2ë2Š1 1#1¾2þ242°33\2z3r3¼2¯2ó2ù1ð1a2<2s2©2Û2`2ì0ô1ô2=0É0 /ø0¼0}0.Õ/0„0Š/N/Ò//%.œ.-!+¹,Ú-.-–.Æ.- .F--,S- +c+«+6+ä, +á,“,Ú-|-,Í,Ô,Ý-G-O,Œ+\+Q+„+C,1+ö,´+„,,Ú,â,X-$-Y-,.+h+n+æ,Ð,,ù,+z*N,F-],÷*Ñ,~,r-&-,.ú+þ,ì,ý-À.ƒ-ý.\0´2ó2JqR\=z:Ñ<ÿÙ7ÿ×0ÿD$ÿþ/ÿÞ’à%€ËîÊû‚Ê¿‚Êp‚ÊZ‚Ê^ƒÊ,ƒÊ<ƒË˜„˳ í háö·üµü5ü?ü4üüý ý}ýzý9"ý!!ý;ýýýKýo!ýõ!ý-!ý4!ýÁ"ýÑ"ýŠ#ý #ýQ&ý¢57M±N½PFOÊNO7OhOaNBM†KÿLŽMGMEMûLJG›JWI‘JØKÓJJäK–K¦LRLÙLZL˜M²L,L,JJÏKdLJçKeLVL˜LULZKëKLNM˜NNeO'QHRQXRŽS‹R¦T{TTUKVVjW•W–U™TUÄT—UÜV]WqWQVÝVWTÚTUPU¡TŸTTQêRbRÓUTUCTÏV”WWVUVWXUVVVœVDV W„VÉX‰ZùXEV‹W WU’XJU‹U›W&W'UÙVVßUXS¨RRüSŽTÄQÔFÂ7m- ²0 uBRTôT÷TÿU0T³S~TyN7>^?Å:ý53€6Y4 Þ4Y2S0d48Æ=·9ñ8á8 1K-)" w(g)d, ! v F! z# 'Ö<qN“R>RqPJQQRQÃSsSçR¨SßRwTSZRPåQˆPN©N£QàQlThSÁUUTTâVÜUXUUÏTöT*T4SçU V QSQ×RR§UQéQÅQ×S%TëT&Q/QØQaSRÿP{Q%RÐSPOON3MúN%LùLèK8KAIøK…KÅJ³JJïJàJèI¥J§H^GäGãFÙHWF™EqF˜ED×CKBTAÖA§AàA`AÛA˜A_?œ?‘??>®>%=ö=8>|=õ="=0=y=¾<³;R:µ:¿:¿;•;;V;Ú=;ú<r;ò;9;¼:þ;;ó:ï:ö:Ä;G:‰:¸;#;¸;x;è;h;(;u;Ý:®;l9‡8´9°:~:ë:à:n:p:=9÷9E9:8ü9T8¦87&6l8¤7µ7:7 6\7i6Û6?8`7‘7ß7S7»8¶9)6²6ú7l5ò5ª5~5w6p7¼7§8ž:W6ä7#88j7q6ï7a6A6ð7ó6ø5Š53É3Ô2ñ2á1¨3/2ª2ú2Á393¨2ß3d3ã2²2k322Y2S1n0…1ø2i4f453í342j1¼2r2™2©3~242î2t1³1Ä2}242s3õ2õ3r4ò0í0/0-f-«.Ø.O.ž.™/.“/Î.Ú.‡.G/y.Á.a. .‹,å-,,c- +J*¥,Ô,S,G-9,Û, --®- -- -¿+Õ,^,•,½++í,½,‡+–,9+Í, ,Æ+T,,W,Î+Í,,B,W,ß,,‹,‘, *Õ,»+‡-æ.p,o,»-"-=-f.c,­-F-.2.. /º0x2B2HâR‹C 6ÿÀ=ÿM;ÿ$0ÿéÿ0——áQ€ËÑËŽ‚Ëã‚ÊúƒÊb‚Ê»ƒÊ(‚ÊòƒÊª…Ë¢î âö·*ýÆ+ýÎ*ý·'ýê*ýÌ)ýA)ý’+ýs*ý2'ýU&üF+ý{-ýc)ý*ý¦,ý3*þè*ýF&ýª,ýl+ýœ.ý%.ýü4þ12ý77LNèPEP>N7OYLqMnL½MªLiJôL.MsMëKÅHÆHINIÞIJ%KJüJãKÐM_M MMMMNL×KLÏLbL%K`KœLK˜KÛL#KtL´L™MSN#N×OÏONíO‘PQRRd$ ö( ç( Ñ(º9wPæSfS®T7RzRwNsBé;\5Ü6U. û- :+ø-x+ Þ.ˆ0G6}5Â5z;“8d631b. '' '­(m! D0M ¿ w  @ s%V3—L¥RüPŽOëQ€PŠPÑS5S"T'SThSïT/RPÛPûQQOšOBRkQVTU URÚS©TWUˆUT4T$SöVÛTŒPPO§P˜S¢USQÿ|QÎS-ST¢RwQãQ RQ¢R.R…Q’RúOÿOGP3P6MmKuKqJ÷HvL´J?GÇG[I†IéK3K>HÿIÞIHÜG]HEÙDÐC_D`CÐCZCCAfAB–AAdAÔ@f?¢?”>S>ß?Z>=°=w;û:Å:F:…:: ::A:¿:F:Ü:;K:Ì;F;z;z;»;è:²;~;ü;;ª;(:¿;*=h<-;©<p;x;ê;ì;:¯;v:ê:a9à9þ8Æ9?908x9¢8F9,9G909ý9Æ9†8™7•8Ö7”7á7j7+6»7r7E7 75i6Ø7Ÿ7 7o7—6¨7&9,8$7œ7§6â5å6i6v7‡7ô9k:š9Ú8©8¥8š7Ø76%6-6+65ñ6D65X4Q2’1|1¤/ì0p2ï3é3g3®2ý2¨3å2é2ê281ë3|373ç3p2ð2è1w2¶2,25171u0*1i12ò3a2¢1è0Ã142í231ÿ1­1)0ê0o/‚/~.-›+¢*ð+Û,“--“/ .C.y.J.R-V.-,†-,æ,Ô,Õ+Ò,†,Ä-2--,Ô,ú-,§-;-\,å,[-,F+Î,„,,¿-+Ï+Î+?,,½,0*Í)Ý+-+g+Ö,Q,,,¾,+Ó,V,,Ç-},J,Ž+¸**¤-À,5.Ÿ,õ,,²+Ê,,p-x,ë,,G-W.„02§3IISÍ>ÿ67 ;ÿÕ:ÿ^.ÿX4¦˜à*ËЃÊh„Ê&ƒÊ­ƒÊ’‚Ê£‚ʪ‚ʪƒË…„ˬ¢î â÷)ý.!ýý#þèþ)#ý8ýU#ý´)þý?ý!ýýßý#þ1þ:ý=#þÅ$ý#ýLþM(þZ#þD'þ"þ3M5NþN»NgNOiLþN)ML6LuKK÷LLGJþIyHÁILJ½I K LJÜJ¡LLÊMŠMML‘LM“LŒLMKfLK^KK›L¡K"MaL.LëM"OPNcO’MçNáO'NäQ[STÖRÕSZSTKTßU"UÉT£TšU£V"UUüTìU¥XW'UíUÙSS^SuS„R¾SâUUS’S@SÒU TÍTÏSkT‚SŸT TS™S‰R RçS]SeSÛTËUOVÊVÈUÇVIUTãU#U^TÞVVÎSïT.T TpSñS¬RºSð[¸žÃTí%ÐBˆV?)+äDèTdR…RÏQ@Q>Iy?c3+›+t+( p)¹+ü-Œ.D3I9u=±422 56(2Ð1 ü- ) ! =  ¬ “" "   ‰ 2!’/ŽPQÆPÀPøQ~Q{R9T!SÖRóUTŠSËR“QÓR†QMQRñQ6RïRþUMT“T“UDTØUMVSX.V>U8UÜU UÿýUÿ8RˆOÝOYSYR‹UÒPPRR·RêT°Q€S¨QøR RzR/Q‡OÐQ¿Q€RpRtT—S§SmS­R3Q¢RŽR˜P.QÎPÅPÃQlQéRáSËTÃTT:USeX@V«V;V£UæUËVÿ²SAUÏPÝN›QÕTÿ?S¤SQçPêRSbR­S°RzQRQQïQßPáNZO{O³PlPïP6N¤LùL®HÃG¼H±I:I5HÂIJKvJòLvJbI©G·G^G¢FªEZCšC!CRBäC–B B–BA•>$?f>??k>j=ò>±<î;Æ;<÷<;O;:³:°:q9Ê:A<E:X::0:Æ:È;:Ã:|;*;6;E;»<k:ü:í:ï;o;+;2;°;:;û;À;:<.<!;h;':ê</:©:h:t:t;&?I8°9í9¾9j7“8r8ø9{8|7’7Ç9r875ì4ú4ù4‹3Ž455¦5Ö4ì667 7è7Ü7î7å77*7‰7š8ä8ª98+8Q9X8Ø8Ú8á87ä76þ646î6¨6¿5A6¦4Å43Ä33œ3–4ò4h4Y2$363¡3[3c2f1x2«2g2c2¯3(2.32`2¥2¥2â322¤2á1!0ô1±1š3d3Ÿ2Y1o2¬2t11<0«/}0Ã0z/».J-”-Ý-T,¢,§-!-Ú. /:-ù-Ä,É.1-‰,„-y-,.p,Š+•,€,H,,…,,N,Œ,G-*,»,½+Ç+F,„,Ç,€-|-ì,h+…,ê,s,ñ-=,+Â-x,+€,ü.„+Ú--…- -,Ã,U+Ÿ+Ý+¦+Ÿ,+Ý+“*'-+¾,>,Þ,ù- ,¿,M,”- -„-I-‘.H/¨1ø3¸HòS…@s8>ÿ«:ÿ•.ÿ²q88–àÀËÊ·ƒÊ9ƒÊ©ƒÊ0‚ʱ‚ÊéƒÊ¢„Ê9„˧¢î ®â÷ý›þiýþíþ‚ýìþ[þðýýµývýCý÷ýåþdþCýãþÑýý@ÿhýˆÿ*ý¼þc!tLzL¸L·M NGOõN!K’LMLìL(KK·KÕJFIŒI—IÙISH‡J KM LÞMLLM LXKªLMãLÙL%K×KËKŸJ¦JäJ¬KØL›LšJêLžLSNNO×NMXMæN¦O­PgP¤QQ×RRSRÈUTÉTULT¦V§SôT/U®UêVØT”SÓTOTãTwSS8T-SŸSÞTT!TfTUSËSžSÞSÙSÚTUS!S RØSS]SØT]SÐUÇV‡TURTÀSÑS–S•TT¥SåS^ShSîS­R½QÇQBR‚QFHPb>œ' ù.PL9U" L0¤O¶PPŽNºEÉA2}*\+ K& Q$ ž$ ù.Õ- 3é<>O9À<Ÿ:²<À8Â7Œ3Ø2E-ó( =( Í  œ – ‹P L#J y ³ ½ £)FGIQˆQPŠP€PøRnSÖTVSeR%SÞRŸRØSTSðRëR:QESR×ST”R“SÐT‡UÆUûX=XiVPUTãUÿ{SQOtPcPMQëVbP£R¥QfQ3Q{P´QÆQ‹P2R¾QPJNšPþOîPÞPPO¬MßK÷JèIqEHˆI¹IAJ-J±I¯HèI:H-H,HDFFoEØDíD¤DMDDšEÿ¹DNC—Aç@è?3?¤> >>k<Â<y<2<º;G<<7;Á: :Z;D::R9Ò:S9k9}:¦:P:Ë;s;s:õ;3;4;{;p;j:n:F:þ;6;{:ö;0;j;Ñ;²<*;²;#:Ÿ;;:à9æ:39¤:9e9¶8´8·8¨8ð7O786G8ƒ858|77A5ž3W2ä3P2¤22ª4f3 2Ç2G2ù5º55Ï6(6±655Ü6`7Z7N7ˆ888˜8%7$7I6—7¯7h6á776ò696155»3Ë3Ë42Ñ2¤332:2)0ø1¸2:2ç3[3”3«2 2­2¦3&3X272ô252e30»1û2u1¢0z151710*1©2Z2Ú2Ó2$0*021¬0ô0r/N130~-Û,Ð-É,r,ã,*+’,“-R,[-[.ƒ.ê/+-H.,•,Õ,Ä,Ü,–-N,+Ô,-þ-‹,ò,-ë,µ-z,»+Œ,ˆ,½+Ö,+Î+Î+¤+Â,+Î+K*B,æ+G*ú+C+G*‡+9,-½,Ò.-—,È,B,™,, +5+5,V,O+<,B,<->,†+‚,è,©, ,D,Ò,ý----.>.J02HƒRC@²:ÿV;ÿr;þ6*ò J;P•Þn€Ë¤ËFÊÿ‚ÊrÊ÷‚Ês‚ÊòƒÊ+ƒËτ˨¢î !áöðýßþ³ý þ¹þÁýOþUý%þ%þˆý‘þoþ£ýþÀþ‚þPývý ýzþ¸ýcþRþÀþbóLMKÃL¨N†O{NpM]L“LPLÉKÌIÃL IŒI8H‡IOI…IŽIIÀJƒLJ­LéLËML LLDLLLK^J^KK'K§K¥KíM¢KãJ3J)KiMÌOÆN#M£MèL©NgP1PdQRQ)RaR_SSUST[S­UTõT7TªU_T.T˜R™Q·UäTìT«S)RoSiSëTT^U S–TŒT‹ULTSØTŒU\U¼T TeTSÈUUTÂS™U UUSÉTÙTT%T•TXSâT,T\U&StSûQR·PÏSVRðDì>ä7Ì*)î2f<E4ö-ŠGÜN PŽHÆHu:m*k& ×" ú# Í% š+ú1’1÷6V@`A§E”EóEøDÊ?a=ž815ø/() * Ï$ ~$1  8 wà Iï w ‰ ¿ b7œPPPP QyR½R}SßS/S¦S$S%SXT[UU%T¬S.Q¿OŸTãSÑSÑTHTVöV`S0U>U²WªU¥V“R-QYR®Q®POcP§QÜTÞR,QêPS~NQ2Q‚PÐQ|T6RQxPºPèO­O(O)O¥N£L¯KjJ±IêIµJgJ&HwJI-HnJ“I\H>FúFuEwE¡E¨EìE¦DC$B›A¤Ak@¬>ñ?/=8<Â<¹=<I<9;I;É;°<z:Ñ;ß;^<­:: :H8Ù908Ç9}:_:Ô;@;i;+:½:ð;":è:ã:Ü:ä;m;p;'<,;ô;u;æ;f;­;²;m: :¦:®:4:h:§9®9õ9Ü9¢9á9h8í879(8=8·8´9è7õ7Ã73î1Ì2U1æ1œ131<2j3!302|1K12405_5‚6j6ç7^6k76Ñ777—7Q77Z7R7H8l8`9s8"8j6ì7z5ô4~3U3‚3g4C3Ë3j3b3Ò2)0‹0H1ü2h3l2µ3=3s2ê4k3­2®3á1·1®1f1]/C0v0õ031-0|0w1¨1à020º2³2›1n0ì0£0*0ò/{/6.¯.¸.Z,ã..P.J..[/y.”-‹.Q-,Ï//4-Î,i,S+Z+”++7*î*é,,+a,H,K,E+Ô+T+b+’+Ç+ô+´+}*È+y+N,F-Ã,¬,è,,¬*A+6+–+G+G**)—+*“*‘+)ç(ã,+–+’*ß*m*­+Ü+Í* *É*M*Â+q+²+ò+ó+‰,v,},É-±,¾,,Z-[-á02õK.Q‹; 8ˆ>ÿE7ÿ‰0ÿ” ‚=X”Þ€Ë5ËŒ‚ËM‚ÊtƒÊ=‚ʽƒË‚ËƃËQ„Ì¡î =ßö¿þ¾ ý®ý§þ+ýkBþýþcýNýœý_ý‘ýgýqþØýÀþ¹ý¶ý:ýýþIýþýÂþkþ¹&ÄLÐMŽMBM;N&OwMºM§M;LÅM7KÁL:K:IHIÄIŽJHÉHÉIRI%HÚJžI2J›J(K“LLŠKL LKKQK•KgJ]KSHèJqM K¨JgI»LÖMMùMMYM”MiO"OîQQRÓRšQ.R`R‘S SšTšSäSèUdSèS^TœS(SïURuTdUâRõRCSèRèSáT’UÈT”UPU†U SÎSŠRÒSPSßUYTTT¤RàQ£T'STJTUOSÄTHTS¦S™TQîSaRÿS"R R*R«QµQ|PLQtQRµMŠ:r6w+ú+e'Œ3:S3Ý1O2ùKÙD”=D/œ& # ? (" £+‘031;5|<Ï@¶E`HaJÑRÛHFB“><:õ81Ì*'°$  ¯ ñp ; g Î ì  & FaNcOPCQP@Q,RæRÛTTTKU»SDT„RïU$R÷Q³T¥TŠTBTCSšUwV*SaRLSµRwV#TÒR‘PeQòQëN¬PP\PmQPuROÆRjMÇNÁPDNæQQRMR8OúPªOêOåN,N¤ML6M2J¬HáIcI²HìJ[JcH³IsJZHâFLHsFIF0DõDA³BpBäB$AçAr? >ä>y>*=²>;=é=q=°<>;ú;÷<©;€;H;;×<; :Œ:I9¡9¢9¤8Ô9o:W:x;{::´9ó99µ;:+:-:¾:¨:ö; ;.: :â;):ñ;:á:Þ::m:«:o: :h9ï9¦9/8®9è9.8·7z7y9-7Å7G6…6Ø6‘6¦5ø504y3Š3ˆ4×3”3·4(32’2Î4±4±5ô6Æ7/7œ7Û7m7¡7Q6¥6ß6ß7(8g8£87Ê9 9­9¦9d7´7¾6Â5D54ù4™5K4F3Š3Z3”2¢3’3±2D1ø2±3à45%4Z7,4_4î4+3¤2m1Ú1Û1r/µ1<0à1"0Ã0o1B2:1y1?151®1æ0´1,1l1*1#0>/õ/Ì/R.ï-—-Ö,ß.,c+ç+X,(+¢+-*ä,a-×-f,Y*“+®+ž-,\-,Ü,a,)Ç*>+ +d+Ÿ,N,’- ,+*ú*x*Æ*ý+8,-.-n,}+†*Ú*¦+4+•++N*¢*±)d+Z*f*9*Ô+J*ë*n+p+V+Ô+Õ,E+Á*^*^++L*º+@,++À*×+þ,¬-t+É,†-+Ù-,™, .Í0ÍI­Q‰=5ÿ´9ÿu;ÿ,ÿÄ….ÿøá€€Í€Ì̂̂˘‚ËÚƒËiƒËiƒË=ƒÌƒÌ9 ï ŽÞö·ý$þµþéýgþ­#ÿýOý¾ý=þü´þTýíýþý3ý4üVþ"ý“ýÁþúþÁýËþ¾ý÷-ÆJ¡K¯LgNMœKÿMäN.LxM KrKlJAJ?IÉIvJ=IHOIIRH]HTG÷IeJ›KKBJËLŒKWJ_KKÖK…JÐIÙIëKeJrJb=£<£<¹>>æ<>;²;ú<;;:m;Õ;§:g:U:Ó9Ú9i8ð8†9„9ç:‡:D:º:}:Ç;:õ:í:÷:w:·;5;w:è;»;n:ó:£:ê:ó:á;":«:`:2:1=;â:c:+9Œ9n8¾8÷8v7>7v7ÿ685€5d5M6Å5š65k4?54ª4A4Ä55û3š33²4ª4m5v5P5z6ª6f5q5o5î6Ô76e7i7¡7Ö8'7¡7š7p8j8%8+6˜5f5-5*5x5¸5;5ü5÷3Ç3Ï44 4`4 4(3+2¯3î4g3b4&4i3’2ò3«2ë2c1¨1™0ê/A/±/Û0./ª/È0¹0º0º/¨0¢1$0.0(0)/z/{0ª/ï/ñ/¬/‚/õ0D0q/Ê-È-,Ð-,Ð,Ç+‘,X,Ø,ä.¾-Ó-~,- ,$-+w,È,, +Å-,B,, -~-í,\,D,³+¾+–+À++|,y,4+ö+æ+‡+ˆ*Î+Ã+y*k*–)k*µ)~*{+Q+È*œ+,+(,X+Û+Ü+L,_-S,‹*½)ý,+m+4+ø+¹,9+±+,v+Ë,S,ú,I*v,K-^,ð/0ÖJ=Q:Å2¡8Ù=ÿ”/“$¶3ð¢ö$3¢ï6÷¤ï8€¥î7o¥î8 ¥î7¥í7¾¥í7-¤í7ª¤í62£í5ì˜ù¾ü`ýþý“þ„þëý‡þaýFýäÿþàþ˜ýÇþXý½ýWþËþ¨ýUýGýÞý÷þ¨þNý'ªH¾LÚLÓLEL›M/KðN K>LËJŽIæISIÀHÒIÌJVI‚IIXGÜHÊHÝH’IÎJ]H÷IkIOJ‚J‹IÀJÏJØK’ISJTLLšJ±J0JëJÒK¡LPML™M KÒJmKãKáMZNO^OŸPP[Q£QPéP;QJR³S´QÃQ½R¶QìS·R³R¥TS]ShS©TZRàR©T SØSVTTÐT¹U UUTÑSÒTWT½SGTGTSUUT S¦TºRÔSS—UTÕS–Q÷P³LæL£Q†M£KÝO±O»N•OHPÊQPÊP‹O‰KüAN?¡:126\;¾=b;ÎOûLÃ?%=ù=ô>$>(=±Aê;ÿ<¨;ú<v:::n:Þ;V:í9Ü;):’9á9ž9E9Í9ì:ž9×9;E;‡<;Ž;r;|:û;<;†;/;¬:ö;>:ò:o9é;*:÷::o:'9±99+9.9g8ß98²7~877í7t6=6 6G5Å76T5Ô4c3ì1]2z3þ3Â454B2á362R413ë3L4¼4Ò5Š5…6d5ã5³6á6r6§7¯816ñ6Ù7é8#8à8[7ì8°7p6u3õ2þ3p4p3Å43š2Õ3#4@4‹4W3ø312±3:2¿2|2¿2¿2<2}2µ2n3w2v1Å0~1²00/ú0,05091±3+2õ0û01c/n/þ1j1Ý0ä0L0ý¶þý—þË%þ…'\HJðK JLL:LýL@KÃL*IKI¿KuI£HÿI8IüJGJ>I’HÐII HVI•IÐJRJHIIJVJKHâHaHfJfJšJóImHJ`J!JäLLLJ*HêG·I°L"KºMíOÖO^P_PZPãO©QXOÿP·QßRéP]OßO™Q°R®S§R½SYSÈSGS¿TƒQËT¢SÞV¬WcUÎVÁTÆU¯UæU¨T&RðSÅSŸU”UWSÿ»TÄSRÅRRäPsR§OAP¦NàMÍO2LMI]MqNLOžOªOÿQ$QRXO“OÈN‡N0M2LðM2LJíHûGúIH;IMGE‘F©FèE»EýDÈDŠCøCóCŽBB·A¬@A'A'? >ð<Ï=ø<ê=k<³<y;„:»:9Ï:Î::;:_:d: 9*99ß9ï9: 9Ü:Ý:Æ:D:ü;;<:ü:„9Ã:E;­;};m:ê:°:6:9u9÷:f9ô:'9¨929q8ñ8ï8è8y8±8¯807€5H6 5Ð4Ù4s5b54v4¥5d3ü452ž3482Ê32ê2é3.3>454|4é54÷4Ø4„5†6,5â6´637¾7ü8g87ë7%7×8Ê8ä8u6ï7z6;54u3´2ÿ3:2f234\3]1µ3c3á3ç4¦4"5!3¯2}2M1É2A3Æ4=3‡3÷3§3220=/„.ÿ.¥/1/â/Á222;2>0;/A/µ.ó.‚/&0›1-/ì/ë/.Ž- -I-Î,Í+Ô-,+Ù+,,ß+m,Q*k*,*æ+7+$++%,,m,.+d*‰+¢,É,f+Ü*í,-d,G,‚+È,,+ð+¹+6*|+>+D+ü+²,¿,1,¼+E+Â*†*Ê+ú+*Í*Q*Y*b+Ò+˜+`*++G,^,--´,ð+ý+!+J+þ+ +2,+‡+2+~+º- ,Æ,)ü)®)À*6,¦-˜/%2&I¾R8Š8â=ÿ®@ÿ…5”,¸?ÍÊø3åÔôMDÖóO¶ÙóQ`ÚóQLÙóPŸÙóPØÚóOÚóP ÚóQÐÚòPû½ú¼ìü ±þHýrýýý¦ýÀþ)þEý÷þ“ý¦þüý‹þ¸ýÿþ.þý> þFþñ!þþ&ýáþ þÀ•DKnM KK¿L¼KÅL´MŸL>IGJI½HHõIHúIŽJNJ HŠHSH]HHHcHÚHÄHHVIHJJWH J~JJÞJëK‘I¨I÷J'L#J¾L_JvIsH H¨IéL,L$M”NgNÜQ#PàPëPãQXQ«PkRP·P{SiR S\Q˜R¬RÈRVSZSÉRßR¨RÚRnSgTURÚU TRÎSS SOS™SðTÞSÝTMS Q‹STDSÕRÓRŒR•P½QíSßS?:±K^U h9ÕLü@˜$ d8B¨@">¿I³OO PÿP…o Úr7$ % ¹$ >% +¿7J45O¶H9'-¬$ X# .! Ý" ß% q* Y2K;×Kc†ŽÁ‘Æwc—¹9Úÿ¨ „ •VEÅ@H;¨3+F&!! X" hö ùl Q& ª& 6&B Å~ 3ŸNçM¯POþP°S^TcS*RRSúR÷QÃQ„TbSÌUšVUúTxTôTöUñSvR¦QZPuPíSRRÑRÿúSSTÿ¹Sÿ÷TÈUÿpQæQwQ‹POaO#LöK³KÇO8OYMÄPM¬O`PÒPßQ¯PMŒM LÊNÓM0L#IñH@HÀFŒGúG{E FôG(EµF>F…EJF:D¼CñAÎA©AúA¿Aq@~><Ð>‚=S<û<A<Ã<D;:L;z:;;Ÿ;Ï;Ø:ž:t9{9º:r:?9ÿ9ù9:+:9:Œ:Ð:Ï:4:¼::G:C;>;~;p;q:À:y:9;2:9ÿ:0:œ9¶9:69p959)8ë87¼66 76@4!2s3{55–5Ù6¢6Y4¹4{494ª44ó43Á4"4õ4525$5¯5y5|3¨5Á5ñ5¯4Ä4Ã5{7w6½7ô7:7ð8'7¡727µ7726B6+5I44°3*3„4½3Ë3Ñ3Y1¸34‘3e3`4­4æ3ý2¿1í3£372ø2E2U3­452è3¤3•4¥4©2´0á1L1g1Ÿ2§2®1z/ú/ 01/.r/ª/‡/8ÿ†7ÿÿ2Õ.þ>—Èø3àÔóOy×óP5ÙóQbÚóQ”ÚóQWÙóP–ÙóO\ÙóPžÛóQ ÛòPp¾ûŽîýþcþËýŽþLÿQüÎþþ ý„ýãý0þ“þzüõ%ý‚5þDþµýý§þþ.ýþ²þoþz/ HUIQIqJI‘J¿K¸K³LxLIÏIIxH½HAH…I½ISI IÓH§H7GáHÖIHYG˜GæGÀHEINHH¢HšH^IIIeH½I5I2H¸HI1K¥J~IGÎGDGºH-IðKK LÚLoNNäO©PõOùOàP]OõPçP…PøQòQ÷RRnQíRQžS’RbR¡R§RXToSSÒSmSÑSŠSSTTNQSSRR¢SØS%SŽS„R‘RT Q™QXSQëOTDîR.KåAÚJóFÌKôK2HCCy@^;7¨:l5qD¥AàD  *ï) +;«/e&˜/w1ÓIA5 -% $ # ¬%Ú'°,ì0$9üTx‹ã¶Ǿyw3®0·Dšw ÆT`D›?'<4‹*$Š!  ñX;]% ,.÷.N" ) Ì*gL„L½N_O]QzRhR)SÝSS¿R€RøRsSbQ+Q£RTJRQ›QþRþNÈR;R"SRkRZSTÿùTÿrSaTIS‘Q÷Q[PbQO4ON¾MvL©LsK‡NCMaMNõN÷N'N™O—OGNNOLJMMÕMJÁJ¿I¼HjGFþGGBHçGhF¼Fp=û=8<Ì<é< <¾;È;Š;‰<;—:~9ð:3:l:š:ã9Ì:@:C:C;ã:•:W;:Ñ:Œ:@:9ˆ:¾9í:v:+9ø;/;?:@:À:÷:½:w99r9ä99‡9/98Ù7¾5Ê66Æ5Í6o5F3Ð3˜4w5Ž5 65ä5c5*5$4á4§3L444Z5|4Ý4s4&5&5+4¢334e4@4i5:5ô5|5ô6¨5Ì5Ã5ð6?6o5ð5y5³6w6°6.6h5¹6+5(5¦5*53Î3x54K4Q4g3–4§3X2p3®3›2ã331½11«2„243!3Ÿ43^3%2x0ä2]21­1f2,302%1p00]1!/Ã0 01/µ/1/n.5.½.v/¸.ö.¸-Å-ø-ˆ.ˆ-L,,Ž,Ö*å-/j----+-Ÿ,Û.‹-ƒ,Ä,‡*Ó++Ž,,=,°,¶,+“,ÿ,³+½,÷-4+S+3,.+Ç++Ç+ù*Ú*¡*G+*è+*™+++#*j*³*á)ÿ*¯*§*›+Ý+•++*k)û*.*Î+‰+G+ú+H+#*÷,q*ƒ++£*¸*G(J)?+Ü-0Z1ßK NÜ8h7ÿí;ÿ:ÿ32*ûClÈø3IÒôNÌ×óPoÙóQœÚóRQÚóQWÙóQÙØóP˜×óOèÛóPÚóO’Áûïíü vþJý¬þúý7ýqý ý~ýçü/ý+þý#ýnýˆþ¢ý.þhþxþAý¬þÓýâýþØþ«2 £FJ«L­LÊIIIH¯J¯J…KdI¹IaJ.J3JèI¸J~HÍH×I}H—I I JMI€GåGžGG#HŠHHXHKG¶IâIIžG‡HõHûJnHÁIóJ1IùHHKH¾H³H8HþJ°L M¡M)N7LôO,O:OìP#OjMòQ*P¦P~RtQøRhR7QµR.Q3Q#R`RRiScR*SR S“T)SÈSZS‰SQãTžSoTÐTS›USYRšQœS—T‰S^SIJ†T´SýRÒOÔJÚDàB¨@*?Ý?¢?i>=Z4j1O.·00z) *2ð,à-·:sO¤Bâ/ô*™3ò6z<K2"'Á# " “" # Ï)(,'0<š] „Œÿ h•Îg ) Œ€žy -e ½Q¢Fj@Ä<’4–.G'#  É ç ª $ Ë( ´+°.3&#  ­*ãJ…McMïNOšPIQôQ÷R¨RÉQWQ\QÖS¦RßR¢RßTJRÊRKSüTxS5U5R®TT$S”U UŒT•TÇU RRYPPNôNêNcM:M{KM8K‰LÉNÛNDMsNãL6N\QN–PÂMM*L{LÎN>LMK@JEHG6FF±DÊGGªG+F>EƒCBmA>B†BhCwBA°?¬?.@&>ñ>p=Â=Â=ò<¼><™<w=i< ;¿;N;S<:î;f;â;+;#;i;û;;:Œ:«;Ù=Q: 9Î:9:8Œ8„9è9t9ô<å:x:n:½:6:;:¾9ì:}:º9D7ì9-9n8v6ð5Q5É5P56‡42ã3,3!3W2Ú3á5H5&65%4ë4²11¥2X3Y3§3`4ž3ä3¶3¿3t4q3í3p4b5<5,5-5u5B5±5A5 5‚5ù55¸4ú44z4Ï5p5»6b4è4Œ44ò434¹4 3‘3¹3‡2L1*1›0ñ2å3Ÿ2e22715321ø1-0{0®050500g1"1q1(1i0¡.Á0¹0â/ù/¸/s/10µ0›0q/±/ÿ.½-¨.*-ò,x,Ð-ª- -+T+Î+U,Q+_*$+i+ä,,+++Ý,†,ÿ,Ô,”,Ü,Æ,}+ü+A+v*Î+…,l,7+b+ð+é+Z+s+¢+3,u, ,¾,n,s,ï,¯,¸,+(,J**Ø+Î*”*š*\*k*ò+k+c+a*×*Ÿ*é*Í*Å*Í+U+Õ++Ï+Õ+Ÿ,$+K+Í)–**W*C*ß+—+k*ã*´)ì+b, ,Q/Z0ÞE‰Lœ8ÿ_5ÿV:ÿã<`/Ã0ApÎø5PÔôOBÖóPãÙóQÍÚóQWÚóQÚóQËÚóPÕÙóOWÙóOdÙóMÕ¿ûîëü ¹þ‘ýïþèþ]ý=ýïýýåýkýý<ý±þ¥þÉþLýý4þ-%ÿþMþòýýïþBÿà/ }E³I§KÝLBKÄJÉL°K{IÂJJI‘H IIVIÕI¼IWHÂH‘JHÝHHIG‘HH—GXG E£HG–FÕGWGtIH§JQHwJ{KKTJïKhJmIH½IöHÿH}HuHSJõL½MmM§MmNsN¬OqO`N-PaP¨OõPWPsR,S”S¦R¥R2R"QÜS"RÈSES RØRWSOSSŽRSWRÚS@SOQ¨Q“SPSSP#RJRQYQâQáS\U,Wß]\ËXùPDLxHADò@q=€:8ž8Þ65â4»*|' ï+%#  ›$ _* )}( ê1 ‡4‘DH.? r2Ž1#3>N5Œ*„& R# É' ß$  * €1Ü6þA˜] K~ Q‹ÿ ô{h Ï hk k Íh 6O4FA@=7y3y+'a# ?% ð$ •$ â& Ñ% ]& + /­*½)$)ž+HGNMØO¾Q{Q:QûR¨QåR SCS¿S(QôSÖTãS›TUTˆSüT¦SSÐRþSôScT%U Tÿ¼Tÿ5T’R“NãQ"P(O3I@ª<ÌCŸNrN6M†MMýOÛN7PNâNaOnPâN×O€NqLÂK–LdJ6IH‹IˆHdG¹DúG7FÑGGéFüG EGCBGAÍBFBBòA?@É@ëA!?>ª<ö<y<ü=ü=<Á<B:ù;„;…< ;“:ß;<V;æ=$<«;â;b;r:Ž:ß;p;g: ::9À99F9.8¾9®:-:9:}:{9…9@:y:(:99Ã:¸:»:08ÿ77F7÷7»75_64*322q3`3è4Ñ5Ø6O55œ5/434«414ý4ƒ4 4#3å443‰424f3ë4h4y44˜4}4ƒ4‚4ì5p5:5q5…5I4Ñ4‰714Ê3a4[4Ú4‹4¸4~4z2Ð234Á54Ï3J3ò332Ô2›2;21ô0r1€301201÷1ï2,261ï1ý0„1¼2Z2Û2\1Ú2£02Y2Y2j1m0õ0*/¼/³.y.Œ,È-P.¶-°-~-v-„-ï-^+Ô,Ö--Z-w,À,W*+‰**g*,*®,Ð,],w,L,Ã,F+È+c,+,?+,¯,v*Â+|+=+y+)+¨+*³*Q+1,8+r,f+Ä,¸,Ý*Î,,°,3+¬+D*Ã+©+T*b*Ø*Ò,E*Å+U,,Q+Ä+š+‰, ,>,.+ó+™+Œ+;+ˆ*6**‰*Á*É+@+a*»+*h() ,-5.°0>D…Mš<•8ÿ<ÿK>ÿ´,ÿ3lCAÑø4ÕôO„ÖóP›ØóPÙóQÝÚóRÉÚóQÖÛóQÚóP×óO©ØóN^¼û¶çý þãþŠþÚþÅý6þ‹þ¬þ›ü—ýý½ü÷þÈýfýýÌþ1þøý$þ4ýW*ýÅ!þÈþ½þf2ÝJÔJ`I_LŽLŠL€K=K€JÅJ IúJ I¿JJ½I}IÇIÒIVJ‰HÙHáGUGãEÃFtGbGbFiHFêEbD÷EûHcHÉHjHsG’IñI¶HûI}GNGÅHCIüFßH~I4H8J5K½LmM-M1LñM(M¤LõN•OÑO1OœPS“S[R%Q+P¬QlScPïQœQžQjQdOïQ®P­R&RfRcQ!RØR‹SÄR¥RQ•Q‘PÖQ_R#RWSˆR’SXc´rTeˆWTlVIÚDÆ=°9<6Ö3h6ê4¤31Ä0Ó-¥*E+™'î ¡ ‡ E% ¯-0È3Ó73o2 ˆLØ+p8¢<'2?'ƒ% v% q& $ & À, Ž4<<N,i I~ v /} ‘ ÿl ²v aS I‰CÒ; 3u.¶& –$ Ô+ {,€) Å% # ý# Þ# X' I,±,/'()‘GÿM§MgNÕR O™PˆR)QãQÚSKRR‹QrQ$S^QìU9SÀRÌRžR÷SARTT¦SéQ«S_SLSLPÐO-P"PMuDlGG’>Ÿ00/\FÞOãLÂNêP¬Q]N»NxLOM¾NÖPÙO‘NÀNpM:LÂKK½J HôJ)FcFPFÔF[GÕHôHDG³G½DÊCC9C­CrB7CqC*AñA?~?µ?á@/>i<">>>;>=s<C;ú;F<<Q;×<U<=<w=ª;Ü; ;¹;‡<:Ã;$:˜;:9S9Ï9ý8À9?9v9ô:>99~9€9A9ý9ü: ;ª:987È7L7766·5654Q1Ê2ƒ3³3°6ý9Î6%3í4š5Û66j4ø434ú3K34K2û403÷4s4q4'4 4ë5^5 544w5t5Š664þ524‚5T55ü5õ4 2Ø3œ3e3œ3™3Ñ33J34Á584—4¾2‚2Á1!1Y1î1y1y1101U0†11D202)1z2*1ó2m2ë2)1-2]1ž2Z20d/þ0x0­/¹0.€/3/{-ß.×/=-Ê-ÿ-~,|,F+Œ,Æ,ú,- +$,×+,Ÿ,V,,{+W*Ö+f*·,,G, ,Ô*á+f.,J,U+‘+M, ,},@,,s,4+»*÷*¹+e+§+ +­+á+0*ü+½+¹+N+,ø+*Ç))ä*:*Þ)ó*s)µ+š*à++O,H+À*ž*Ð+ñ,M, ,ƒ+õ,, ,+—*à+ )˜)‚*A*])´+Ð*æ)§)j*ê,œ-h/Ð/·A/Nš<ÿ6ÿf;ÿ²;*2ÿ•0bF‰Ð÷6îÕóO/×óP,ÙóQÙóQÌÚòQ|ÛòP|ÛóQÛóPÙóOL×óN—»ûeçý ‹þüñþýVü×ý%þˆýOüWýÞý#ýãþýÄþ…üäýþkýïý¿ý—"þÀ+ý7þÍ!þ!6\JJJ%MŠLK‡JvK­KJ½JJuIõI/I8IÁK¯KIBJ1IÃIIH˜H£GòGžHJG£GEFHaG#H_HSGéFƒHBI>JvH>G!FGGžI„I>HGH‚GZJ}KðLnL8K•L;KMaMNuM©N©NwQ.P­PôPýP{NÆQnRéR"QiQëQïQ2OxQ.QâQ!QtSRêR/QªTTïQéR•S]Q×RÔQ.RŒQÓRïn¢{~d;[>OêS…K CR=®9Á968:4v5`6œ4¨0N/À1ò2n1;.†,Ò! _" ½(’>ók¹8» ³ 4,/¥5/6Á-~)B(°' '& T% * 0y5’:xArL‘Tö€R›Ñx¦_ mQ°J*Gs?8P4á2,/:.À.ò*š) %& U$ h$ ( W+½1Î1®+¬*”C#KiL,M˜OcN¯OdOÛQþPþRÓP PPQ†R­R%R PoR˜QîQÓNäRóTnS¯R©Q¦RîRaIDH FY:œ8’V¯†,27 ê(º:?Q NóNtP2N&N8O*MîL¦ODONNÿNsN¿MHLKÀK J›I˜IIF‚H9GHÄI¶GÈGHBòC8D}ECõD_D"BhB›AÝAçAnA*@$@)>)=Ö===<=M<Ï==M=d<ê;j;ú<»<Í;Þ;Ë9ú:è:â:Û:¤9‘928„8¾9}9¹9A89 8’8‘8Ç9F9998 8ƒ7Ë6g5¡555—4×4Ç4 2y1€3z2í46Õ5£4ë5 5%6,5Ý6"4û4ˆ44%4Ò4g4g4(4_3ú4;4ö3õ2‰3é43Ç483{4p4î5´4Å4¹3š3\3‹4’3Â3É5Ý43n3“4 3Ò3×4E5²5±7 4Ë43T1¢2S2[2ˆ3w1ý2w2.1¥2.1‹363Z3¶2ª2Û1s22j231±2-2é21ä10v/µ0201//w.·.û/:00/ú.M.+,y,ˆ,,Ú-R-x.6,L-,++Ô.|+š,, ++-+Ï+N,Q+*ž*++&+*^+“++R+m+Ò+‡,+=*‚++½+þ,.+¢*±+c+=*¿*Æ*X*¦+%,Í,*Õ)i+a+(*1*[)ü*A*³+,+A+*+T, ,,,|,€,¹,N, * (Ö)~)Õ**j*(+l+‹*Ô*k*s*²+£-/”1 D×QÂ:ÿã9!=ÿ4=ÿß0ÿ0êB_Ò÷7¦ÕôOB×óP­ÙóQÙóQßÚóQÇÚòQ¼ÚòP2ÚòPºÛòP=ØóOD¼ûêü ±þâýýnþÀþqþ"ýÏþ¾þ=ÿ˜ÿúÿÿ½ÿYÿÝÿ¤ÿÑÿâÿ2ÿ ÿÿ6ÿëÿ"ÿ…ÿóÿë-ÉIKYK\KK†J±JÉKJÆK:I“I J~H6IõJJRGäI5®4ì6æ5Ô.ñ+*-Gµ€Ö% Ñ <.;' %2´/»4S/$,&)_( Î' –' P+ ÿ.\2I9×@šGP·fjfq\QÄPpHµC¯;ß6Z3¢3/-S,{1'4¹2,' L" Ò$ y, |' “,@23*Z/•68B|O!NåO¶QÔQËR=QöOäQ"OåP QºPOQQùQbR˜QöQWNgPÅRøR P O¹N;@#>‹=­7=4P+AÝwÌel! ›²! w1OëNzO P-OKLøLöL¬LÙMíMîNN@M¤MOIII‡GÆG8GÁEHHýI*EÎC£DEDùC{EYC;CB§@ôA@ôAœ?ò?:>q>²>@?á=2>o;;Ê<×<ø=<Î===$<ì<.;±;ü;Ò;:Â:ò9k9á:Ù9Ú9P999088Ì8Ï98‰8Ã9 8ƒ8¿8L7È7’7787B6ˆ5˜5¿745 4Û6•6O565—6 666Ê6š5ã5¤5g5Ö4w5/584Ç4E4À5 3ô3ª3w3ã4\3ç2ñ3u3 3S4R3É3Ç4s3Ã4Ê4Ç4x3ú3Ÿ4±4º3‡794R44C4I5y675¾4¨3ï4u32[2‹2C1å2n3P32ë2Z3d2d2n0þ1%2v1`1ô2f1›2j3­1³1_2o1£2i1(1_1)0$0ï062&0¤0­0±0?//±.Â.»,À-8,÷+(@*W+ß+¾,Z.:*Û, ,È,Ä->+˜+ˆ+, ,Ÿ-U,‡+^*2,#+,,×+],U,t+†,G,+ü+H+€+Í+ +$*+J*Å+5+?*¨*‚+¥+Y*Þ+F+F,,y+…*›+*ž)è*X)±+™,'+ˆ+ø+ +,*+Á+-½-k,:+>+€+€+W)ð*4*Ê*++*Ý+Ã+®+÷+“*h*,Ù-§/W2ªF YR>z88ÿ…7d0Ú0E’Ó÷;ŽÕôPÃØóQ!ÙóQPÙóQŽÚóQ…ÛóQÚòPýÚòPzÚòP9×òO°»ûÚéü «wÿüVzÿüyÿü§{ÿüë~ÿü©~ÿüô~ÿüò}ûD~ûÜ€û‚üÒ„û܇ûÍŠûž‹ûFûŽÿûö‘ÿûµ’ÿûí•ÿû5•ÿû®“ÿû¤ÿûá‘ÿû1’ÿû+p)M2LLJ]KHJÁJJ9IÔOIJ J‚JImH×HHYI HÂH$GáIG&GiGäG|GYFIEßEiE(GGWFŸGÞGæIqH¾HüHÆHKH3GÇG”HFI2HƒG?FƒHôJ[K KYJùK¢K%LM±OaN§O.OÙQOêP/PP*P´P§RR–ST‚S RÖRUQËRaQ4Q*QâQ]RTRR R_R`Q—RYQ˜SÊRR˜UE{L…(mXb{V$JTEÊB¥A¾>d=75-4–- ) Ä. 23O1Ó/ W1™/-•0F3:1Ì02i.ð:ž@3 7$ Ö5ü3ô,½.²4±1—20å0`,£,I0‚/¢3K3Ä<Q±ibM[£S”OçI³D-<I8o6z1{1²/ö0£0ö4 Ñ6 Ü1Ñ.y-î0p0°.Z*5+)ë(œ' ú% ±=óNgNØOjQÌPPBRÞQkOnO\NÌR8PÐPšPGQ§P„RrRàOFOèSqRÝQŒN@¼E‰uÞ</G±ŽÌC¦]M@Ä 8 O  ì0íL¸NóO)OµL&L·MDL|K¿JûJ¸J¦LMLK¾JrK‡I•IJVHiIGÖF¿GIHEFÎFÇEUEC÷DÆD“D†D¿BÿBáCäB7B]AA¡@k@ª>ü=Ì>¹<À=~<;ø;î;Y<< <U<‡<B;ê;«:«:,:9;s:Á:—:9ü8ð9+9ª9Q9O8‡7Ÿ7O88¼7Ï89D7’7—6Ô6Y6¡5Û66 6‰6ß5Ð5Z66 4š3æ4Ÿ44]4—5U5“4“5Ü64n4s4§4q4±4ö4*4B443`2ä3 3­3ò4h3ò3#2¿26312ç3g2w3Œ33H22’2Ñ2C3z5(4ÿ3ˆ3B443D4K4ô4©3à4l4¼2È2È3p2Š2Æ3–3Ñ3 42©3i3¶1ÿ1g11ý1µ252Y2«2Ø2Œ4A1ç3f1ì1¯22g2¥0è.î/à0d0·0Ý0¢/:-/s.ó,—-¹-£-h+”,p,>+V+ +(+Š+*ˆ++)Z*Û*,O-Ç,™,Q+×*á,Õ,›*n,+€,ž+È+)Å), +I*¡+|*x*‹*|*í*«*ñ*@)Æ)ö*ú,M*Ä+î+³+…,+,~+û+Q+[+$+*Ø,Z,†,B,D,},±,v,8+Æ+¾-6,ö,²+¶+¾+E)¶(À)*˜,J+©,M,N,,F,·,+c+à,â.b0d1¡E OÛ;‘7ÿ–7ÿ‹8ÿ~,ÿ-¥L¸Ô÷;ÕôO ØóP-ØóP^ÙóPÚóQŒÛóQÛòP7ÛòPyÚòP¿ÙòP:½ûjéü /¦ÿû¨ÿû¨þûý¤þû´§ÿûˆ¨ÿûH§ÿúG¥ÿû£þûz¡ÿûB£þû{§ÿû‹¬ÿûA®ÿû®þûû­ÿûC¯ÿûC¯þû|°þûí¯þû<­þûõ«þû;©þû%¨þûä§þûdz KEKUK—JK JúIIIQ~IºI²K2IxIïHrGºH$HÿH¼HZHNIH×IÓI HËIHGCF$E¤F¨ISG3H-IHµH…HGHGøGI7H‚I8H·FÊGGIIuJ]KfJ£IôJpK*L÷N^NcN'O O¯OwO[OáN«N¾P>RQQRÖS RÚRPîSÕQ¡QÝRnQ³QçR§SR6R¦QàQ*QâOçQÝS–QãTÑl(€ìoÇV2TÜJFEâDB =©6C+ Â-Z5º<CIKLTL M¸KÌI^GZB92;2 4s0À/ò.ü3D2ë+ï/þ7_7f(=&v(x({&Ã'þ,T+<-Ï2o5+7¶?SL{"†&x¹^•UP–MH7EŽB¯<´:¸9Ó71T1T2¹/ð.q-L,à+Ô% # q# P% ‰% w' Œ)e?FHI´OO†RhQoQPßQPPEQ-R+R*OÄPûRöT R-S°RâSRRS¹L59ý[f‰8:OBCÔe%CPE¦9ÄR  2ÆELNNN¬O/LžM©L:KML¯K†JèL L½MÔJ!JžJ™KËK&J£ILF—GõF¾DÛDƒFÎGE–DBEFED$B}B÷C/D˜CçB´B)B*@¯?‚?{?:>ó=é<ø<q<y<¹<<Í<Ë<E<‘<Õ<Ÿ;î:f9C:B:ü;9©99{9w9r9s8©9R9%8#8U8ù8H6¡6d5³6µ6œ6K6¡64š5!5„6B65Ú5b5[528314Y4P5ü465Ë45Û454¤4§5˜4ê5$5š4õ5s4û34h4›4 4p4`3ê4f2ö2y3a3`32Ð3^3V3M2V1a3V1u3{3ñ4r3Á2^43É43Š5Á5\4+4#4Ó4å4H3ˆ3…4p483‰2×2’3 2l232€0à1÷3.3§31 1â1Û2ç2¤2Û2Ù223ã210î//©1¦1Ÿ1ä3¤20i02-Ñ.:-Ú/r.ò-‚,A,ñ->,ð.1-,M-Š-:+†+—*È,Á+B-æ.<,-°,ù-w+—+Y,¦-z,O+”*ß+§+‚+Ÿ+È*Ñ+O+q*ý*ˆ)~)*¿+;+)õ+»,C+ *Œ*D*K*“,n,°,|+ø+ƒ*_++‹,H+¾*–+ +õ+¹, ,A+è,3,r,«,q+ø,¾*½)ß)P*(**C,3,?+²,,¾,,+Å*¯,Ý-..ê1`B ØO[= 9ÿº:ÿP:“,ÿ2IÔ÷9™ÔôN–ÖóO¿×óPâØóP’ÚóPMÚóQÈÛòP}ÛòP<ÚóPÂÙóOM½û©êü ¤™þû¾—þû—þü|”þü}ÿûÆŽþü¹þû?þû¿ŒþûþŒþû6ŽÿüB‘ÿüBŠÿüBŠÿüH‡ÿüŒ„ÿü‹ÿüËÿü…ˆÿûÇ›ÿûA þût£þûr¡þûü¡þûã¤þû,mÄI`JïK!KVJJH˜G’FH HIÂJ®IbIqH?GûH>C«UX^ôy…sl¥]»L'F·B?Û?{=d9ß6å6(5«2¢1ç0T/ÿ/M-Q.Ú-])À' }& Ä% =# '  ¸  ‚ ð! –% Í,Ú4wBJOO±QéOpPON¿OQ¹RPõT+R'QWR`SR›R›S¸D¡9œBÒ`»G”G²PpižM<Y*³  ) ^7ö6ƒKINˆOéOTO}M·L9L÷L$L^KÞMZM£MLÜKLzK¯KJ,IGUHÿEWDFH8FÍDKEE»E®CåDèD­D¦GåCµCÊ=é=p=I=ý=<@;ß<^;í=.;ì:ö;p<k;;Á: :W:C909"9k9r9M98S8K7‹7P7Q7!6.7]6Ë6P5Ú6!5¡6,5T6Œ6P64à4›4ò4¡54ˆ4R5Â5 5$55Ö66\6Ó5Ý66Y5c5c4ô4ø4C3Ø4s474i4'22Š22q3u2ô32 2Ä2º3y3B2»1Ì2Ë22ð3¯3E2R2š3W33Á4¶4®4ª4h4â4a3C3Š3Å3Ê32R2\2ž2ß2æ2.2©2<2l3e2ò2Ÿ2(2`2Ù3Ð2P32h1™11ò4"1d1è0V11Þ1q1Ø1Ý1ž1`10°/%.õ.ú/j.ê.Š...è.±-;-ù-—.O.¶.>+”*æ+Ð,F,P-‚-ˆ-Œ-L--.,ï-,“,W,ˆ+H+S+V+ˆ+++,+Í+Ã*þ+6*¿, +<*i*þ-C+û*Ò*ñ++Î,¤/',é,Î,+ +,+ +û*N+‰+ˆ+†+Í+Ç,+T,,,5,y+³*Í*K(ë(Æ*')£)Ù*Â+ô+ó,¼,•+[+b*Ñ*­+­,¬.h0áB ¡Nd=Ú7ÿÃ;ÿÜ;ö0ÿ5-ˆLÙÕö:úÒôMÓÔôNÄÖóO£×óPÚÙóPIÙóP‹ÚóPÁÚóOÇÚóOÙòO8½ûnêü ñeÿýKaÿýKZÿþ RÿÿYLÿýkGÿýcEýBGþH@ÿþè;ýÅ:þÊ7ýÞ3ý.ý«+ýB)ý&ýÅ)ýqMûŠÿúF’þûû‘þûsþûý“þû/—þûulÆISKiK£LJJJËI HÃHÅHÂJJ€JƒJ4HÿHtH}H¼FžFEÙE™F4GöIƒH§HHJHCGF/FÛGHFÔGGÑHgGýH=H-GùHîH8IvH GÂFG¶GNHõJ#I©JÐLLKïOPO[NÉPJQPYPP]O$OgPPÚPQ'SaRåRÎSKSRŠRZRÊQ©S*Q˜RURRPžPÙRQLP§QÓcð…QpKWGOìGuC,CL= ‹62ø5¨IÉP-P†OƒORyPÍPPpNÏM©OÿOˆOÖOEN¹O>H¯881Ç2) ‡4 >Z;Ù<36n4é4›7¨6®8Ò;[==ø:K<¨=h?äEZH’K±K¡IÇK'EJBq@•>s?v?{>C: 7ý:;312ï/U/,Ã-”+æ)e**Ú+V+)+(*)ù+O0•,´,b6ùLPìOƒOP=O…O²POPÕR3N®NñOÁQNNÛOU<„7j:¢K”SÆT•`y„ª>­=<–=E=N<\<å<Û;â<!;q;k:Ñ;:Æ:¾:79©8û9ã9©98I888Ï8°76`77!7Í7V7W6ˆ86K776Ž7 6Ä7…7<6Q605G6 5ˆ5Ð6 6 5Ó6Ë6J65d5ë555!4ñ3Ã4…4[3â2±2ß3±373?3>363î3ß3_1Ð2ˆ22C1ã2 291À2ù2ñ3ç33B24>4y3u3·3ü3³3ó3¯3l2ì22D23=22!2™2/1?0¹1¸3"2<2l2&1ì2\1â1«1­2³1-0´1a0Ý/¬/‚/j.ª02/,0//G1/h0à/~-ú,À-«.:-8.B.‡,L.ò- -,‹,‹./.1.0.8+Ã+š,È,S-«,x-q-ø,…-x-Í..x-K,Ñ+Ç+.+‘++++…*Ï+v+Ä+V+¾*i+Ô+¢+[+ã,Ò,¬+x*ª,ÿ+++8-.,n->-«-Ä-Ç-z+Ó,·,ð,þ,ý-x+ý,,¬,++y,~,ú+ù+D*Ô(2(¼)£)à*±*Ð+ü+Ä, ,¾,¢+§+¦,Y*Å,--5/+1ÚEKd=T5ÿþ8ú;Ù-ÿl%ÆLÖ÷9ÓôLOÔóNúÖóP ÖóOäØóPØóPÒÚóPÚóO ÙóO ØòOy½û´éü ìü×ý ýš ýÅ üO üÞ üU ü¥ ü¬ü‚ü«üÒüùüÐûª#ûŒ(û0ûKú†lÿû\qÿûNrÿüpÿüMqÿü’rÿüLVDÿI K§K I’I³J5FæHÄIEHðIzJ~IÅI»I9ICIqHTGSGGOFdHJ JG¯I†F­H"HåGìG—FšGRDxFgGåGuFÂG„GHŠHH÷G€G·EÎH6G~HôI!I›KKÒLÐLÜM¦MÞN•NSOÈPNÜOOœMéNnNìOÜQ/QcRèQÞRRÐR^RãR(R.SvR/Q-PlQ¥OñPuP9OûNxP£R'x *w)YDI6EtBðB; ^4 –- §7¯M|OONžPŽQ0Q;OTOœOOÃPõP¹PþQ:P¹PBN NËM”L;02P8@FÎ:Ã=ú>“53g/Ý0¼3É5 5V964–14z8·7í1Ú6 3¬/è/Z2n/ 0$7b,‚0î2¯-t.05¥4b/-R/Á.U-”3+6 1Ÿ/é2}2á1"07»7A4¬<v7N6õ-¾?•OrLOgPþNMgMNøQ¶PìP>Q>QMVFVF„L =s9"<IAö;~=mLy4•8Q<S5[/¢0ª>ëLíM(N¶NM®OùQeM2K¼L²L±K°K-N[LÁLøNM´KKXJ H¿FE'FÔFF FËDÁC…EûE€CÅD²D|ClDiC`C¨BmB?BµA7Al@y@(?l>±?)>j>:>ð>n=~==<Â<&<<’<+;é;é;8n9Ô8ø< :9Ô9Ü8ê8c8^8Ì8±8q7ð6ü6[6T7Ä7I6W6×6M5–6ú5R4—5!6B66È6†6Ž5Œ65Ž5ˆ6C5W5Û54î5™5™5æ5h4å4Æ4 4F3Þ2å6†3†2K2¶342}2‚1ÿ1¶2Ø2«271Ó1Ó1Ì1Ï1l1Ö0¡.ü1Ž2O3m3r2?2ˆ2°3`34h4…4G3x4|4ý3¾3~332×232`0°/1012s12p2ì2£3R321Ò2 2ª1Ù0©/ü10¦0ç1Ø000/ë3½0è0 0W/é/7.·/z/+/|/´-,N.!.ì,û-k-ò.?..!-þ-„-÷--ƒ-Ä-½-ˆ-¶-ý-9-.Ž-‡.}.-—-¸,þ,Å,+`,D-?+Â,0+<+n+G+3*r+²++ç,s+Á+ª+y+m+ª,u,m,,[+ø-n-¬,y+A,Ž,4,†- ,¸,A,è+ø+ü,9+4+î+B+:*’+L*]*©*7*W),(ñ*á+Þ+Ü-B-Ì-O,‹,,,ì-ã/)0 CæL)<:*:ÿ[7ÿ*ÿÔ+\MJÔö9uÓôMÊÕóN¹ÖóO¦ÖóOìØóO%ÙóP ØóOÚÙóOÙóNQØòO¾½ü€êü ´ý‰ ý ýâ ýÎ ýs ýÛý[ý]ýJýûý—ýŽýFýý† þÉ"ÿþ0$ÿþX*ÿþÙ0þþü1þþ=1ÿþN1ÿÿ.ÿÿƒ-ÿÿ4XMI˜IÝJ—II„GÌG%GQHŽH5H‘H GHyHzG½HhFE8G‹G“H7H‘IMIVGáGÓFÝHPHfHÀGüGÓH‚CÃGF÷GiF»H¶IõHªGÅH{HtGuGI5HsI­HëJƒKKKÔL§LèMM©M0NhO˜N/NMÕNfNØN˜QRQšR¨SZQÝSÞSÁRbS$QâQuRâRQ‘QéQeR QfOáO2^ÍSh` ?aüHÝB¤B5A¡> F6_-¬8ÉP?PÆPHQFQ÷PJONZON#OüPP…NN×PNOHNVNQO8LŒ?k=MDqD1>Hf>E:4D7g<Ø<5ì@Õ5©83Ñ=ä7Â:¹8ÄEw=ø6²Cm/È3U G9BAŸM E7º84øC";g:62Š0p7™5ð48ï:ç4ò5€4Å5­3;4þ9Ú9ž;c8C7û6u.×AJM€O~M¨NÆMŽMÈL[O1N´N,P¢NçRsLŽ4_1b9=L/DET@Ò<¶<È9=Ñ9ƒ:“;3-9EINøOèMäPOÅN"NÿPýOoO3NMšJLLLKÎKMxNJæJ‘HåGÜFdD D$D_FCGI=FDE9CôD%C]BÕB¡BgB¥B¨B?@ð@r?è?›?ª>©?™?.=µ>¸=u<Ç<B;L:4;¬;£:ã:«:1;p9Í97 9x8ô8)8m9!8r8'7‰7B7H5Ú56”6U6€6Y5,4³3Á494Ü5Š6 5o6Î6 6À5‰6F6:6û5…6ü6?66W5–6™5¡5á5o5Þ5ç5144Í4'2e3;2ò2º32:3.2­2#2 3²1ñ1=1é21W0é1T2{2 1123Â3Å43ø3t3p3ò3û4ð4¸4ÿ3Ä3I4w3°3½3ý3†2W1 2¤3X2 2)0s0|22n3.3v3ä3›32Ñ2 2M1•1&00a060j0f0'0"0Ï10Û/œ0X0ç/x/~/U/¸-°-ò-ª.Q.-ê,Á0ù/Ã-Å/C-î-´.',q-9,‰-À-I,Æ-p-û-×-‰,Ñ--z-J-­-°+ö+<*Ä,n+L+Ã,3+¼+´+v*[+),a,ç+£)þ*u*»+·+z+ +¥,h,l,7-ï,Â,†,¹-'-?,³-9-<+÷,¯)¦*†*†*Ž++o* *¸*ƒ*K*+;+H)\(s))S*æ,‡+Ú+(©*§+'+Q,.-..ª1$BíHó>ƒ6¹AÿÝ<é+ÿ$òIÇ©)àÿ69 ÿ9£¢ÿ:£ÿ: £þ:ò¥þ;a¦þ; ¦ý:¦ý:e§ý:š$¾¯ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?!ËH[HIH‡GÇHƒHÈGÍHŒIIDIH†H1HüH¿H#GÄGGF%HNHHHÞGÙH]GOGVGH’H@GVG‹G]AÁGE\FbG¾G½I=GtGîGiG¨H+HpHõHóI`HîIfJJKÓL$MMMÈMúON¥L@NbNäM%O–OOWQ›QIRàRASˆSûS‡RÉS—PâQ§Q÷R\Q`S–T]R§PyOiPKcp€DÆFqK¶D‰@°??;-/15O>RbO¹OÈPPVQ3P|O‰NÆOO¼O…PsOPPOBNN€N OîO4LÉ@´<2ä3_<°?s9[=§8æ;?Aó<I<Ñ?ÓA;í[\cXb}_ímª…æj×\÷w è`ÉZŒo ,NÏM<\5LëFLbIìA œ?ÚA ÇA =+=Z@ï@¬=<é6Ù4Æ4à1€6[3ç4x;ŠAI¤MhM3NN"M•NMOoMñM·KÇL³L¸N aëkŸ6 3t>yC|J Dt=¢;Û9÷:´;±=m;:L7†K´N¡P`RQR-QtOÚP·NÑOÈNuKKÿM?LöM‘LÎL…L M^KÝJÅHÐIOGFEiD™DDøDúFèDïF&DéDWD“CÔCC‘C"BÖB©BlCMBpAS@Ü@ @£@2@n>·>õ>`<<;^;V:ì<«;;ª:x:h9ÿ9Ç8w8‘8’8Š8B9/9*9#8e7e7S7 6˜6ï7#6_6¡76+6Ò77z6I56—6W6È76ø7D77ê7´6A6B6-6L6 5Ô67=655Õ5œ4Ä4L4J3K2ä2ì21D1}1¯1u1m1î2õ3<1l1h2/1r1v1¤1‘1”0Ø1ý1+232£4ÿ3À3‚3°3;34y3Ä3u1Ê2°2ó2q2}2U3 2Ò221¤1<1Æ1 1k2 1Ã1¿2221m1j1›0î1â1‰0I0Ž/Ú.ä.÷.º/Ð01G0À0œ/›0“/œ1W1/¯/6/n0!-ë/`./§/c-ð-Õ.¶.1.ò.á/a.`.a.+-4-D-±,Á.*.u.-m.³.D.m,×-,@+ÿ+_+Ä+Á+*à+^*,*k*E)ó*Š*ç*Ú*8* )*ò*¡+W,+¶,µ,è-`-â,{-½- ,¹-(-Ÿ,b,s,.,*+á+y+I+¾,O,*Ë++€++”,Í+Ç*´*<) *'*c,P+$(‰(Â+›,Y,,,Ø.Ö1¢C ‘KÞ>Ê5ÿ^<þÏ8ÿG/þ$ÿ‡I,~+Yj4“i5Ëi5Üj5Ök5”l5l5 j4¿j4òk3v пÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÛJšIH¯IFH„HF+E;H GGÛFžD§FpG9FêF¾H¶FÏFIHG”GËHÍHTIŒH‰HbHØH\IGSGG×DaFE$F^G+GH7IvGíG¯GG}HµHIrH¾IâIÜJ[JØKJLËM"LMPLËNfLæM§MßMëMaNÛNñPZR!RSŽQÓQTSƒSVRQZR"Q&P!Q(Q(PíQbRoPlPaQr\bN^^CëA,@Œ>T<œ2 ç*PLPûR³PÿPQJxMvN¾NcN#O]N³N¯NÕN_M­L[N€O=MNfLêPžP±PkD°`kL~W|UƒA <â6^6ù:ë<M?í;G;’ILöP+MØM`P‘O„NGOfP O:O:M‡M LL8I8MjMšM…NM™JãJÌIÒGÑDâCeC±DTBÞGE:FF»E DsC©E/DnC¥E ELD CýC±CSBf@í@AR@Ñ@Ú@,?œ>¬>¯<Ö<Â;É<<\<ã<f;:þ9ÿ9€98ö9š9ý:j:{9D9t:j:9I9E8ý8T87•8W7É7O6É77@7ÿ7?6L76Ò6Ç7»7F7ö8<7H6…6ˆ6ó64Ì5V6@5Ð6 5£5Ù4â5p4‡32c2%2t2²1 12¿1ÿ2313á3è4 3à2ƒ252¥1g2n2&2œ1Í2Ì23H3I3Š234J3²3½3Œ3Ê4:3û3ù4?5<54Ï4F4J4’2¨2²3j2ÿ2>1†2@1~1'1u2{1ï1­0·1 1æ1˜1J1¼1Y1[0S0[/f1`1)11/î0˜0//Ö/%.§/w0Y0-¡.ß/ // /q.ë.}/ .(.c-g/ï.¢-´-ø-õ-w-´-b.·.¾-.s.ª,Ä,Í,,,!*¸*ð*¾++()¬*>*=*†+4)Õ**ò+5**{*d*©+±+»,d+î+¯+…-I.-,s,q+Á,²,©,s,·,4+®*ÿ+|++û+*U*Î+ *‘+I+ *V*…)Û)Ô*.)ð+Ý*Ñ+^)k*n+,]-X-/0Ù@ eKæ?Â9ÿe?ÿ:ÿL(þ#ÿƒKy/¥j6‘j6lj7…k6¼l6Øm6©l6«k6×k6l5š ;Óéÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?2FÉHbGG£HGH¾F¡G EÌE­GIHÂHBF›H8H;G‚GdGûGºG½GðHDGHGÓH„HÌF÷FgFqGÛGRGG=GIEÒGPFÏF+GóG=HnG ;Ñ0 >QxQ PDO^PPÌODPOOM%NLO4NôPèP9OÎO€N×NÁOüN‘NÊOLMWMýK”9Ñ$ –# Ö0‚-#$Ï N8 <Ç©z / Ü Ö/^ 4 ÷ ú  ©" Ñ v ¢ L  Ì n ¤ K ( Ï æ p à ø  5&›)ì+o-(à&¨(.ÖGOMbN‚N1O/N¢N3NõO NML¥MWMÊM¶N1N6NŸN‹NQNzET;Qv˜LÏ?<œ6ÿ6a7y9 7KCzMZL¢NjL4LÚNkMÛMDLÏM¬M–MÔNÉOÆO{NFKJLLFM9K¥LÝLžL_K#HSGeDFGE5FCÛC”CâFšFPDCvC÷E¶D(CâCbB¨B¨CìB/AµA‚B|BÛAäA¬AQ@w>õ>u=…<–;ë;Ý;¥;Ù;b:¡:;>9Ž9°:&9G7‡88S8Ì7Í8…:k8ñ8`8Ï88”7e6æ66K6'5o5Ø6K6P6‰7 7R76Æ6E6¿6ƒ7s775ÿ6B6ü614Â646:5Ö5Ô54n4}4s3Â3R2t1»203&2q212º2s21‡4&4 3:2»1Q1ù0‚1e1^2‹2J1§1Ú2i3J321Y2Î372|2‰2Z33ˆ4E3L3Á4Ð44Ç4‰3›3j3Z2©2ï2)10171=1}1v0u0>0,/Ã1ú0#0s0¥0p0ï1X1m1ì1V/å0/,.¡0'/Ô/¡/¦0o0Ð0•0/š0¯0¬/l0*/t0 0Q/y/".(.^.-­-<-Ã.,ø--..A.?-Ñ-ˆ-¶.-.å.>.x-ö,A,6*E*Š*ò*L*}*l+þ*U*N*ƒ+o+3*E*‹)Ó*H*m*n+)â+÷,', -h/:-ñ-±.$-",ó,´,;+û,ÿ,u,1,Ç,,,}*ÿ*þ*V*à, ,+ +*K*%)Ü)·+,Ž,A*3*<,J+Ã-,Œ,e-·0,@ fM>5ÿŽ:ÿ.Bÿ»+þÄ%ÿoRw1@i6¸j7Ck7k7Àl7Cl7Äk6ñk6‰k58l44Ÿ ³ÒWÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ? ¹E×HëH¢H'GœILH=HjG¹EçGOFŒGTEVGtHCHòH¤FüF€G½FôEÿGAFF}GHEPFáH"IIH FWF9EšHFPF F#GoG§H HãG¸ELH+HòJ+I²I*H¤II\IkIÒIÙKLÄLLLCL NËMŽNŒO“P PWQPQQÿQ™QPQ`QžPëQP6O»N¤O¨QoP³Q©QsOmO$O“_úU[O3Q…D\D|?4<’:´5yK PûPôNINNMÞNM+N›M$N¶NÏNQMÞM¯N‘N‰OzNIONLŸMÌN{MyMøLþD‚+«# Ú1D1,< B ìç ë_ É e k ? â  ©! ! P! g" Š$ '%:# h& V'-,.((ž$»! Ë# F$ v'#) *(Ê,h-?-û/.%(o! à'2·JòO OÆO"LñM0L|NšNÞMçLÒLLØN¯MÿMÆNÚOQ–PJD;€KFcr“G»@>38Z4V-®0VIËNûLØOL|MeNRM$MáPQKM¢N×NMÇMÆN?MSL‹L»K‡L9LhLfK·KJâJçHmG4FõF¦EE}E‰GPH:G3E$C¡DàD•CÐC¯C˜BëCBiBëB|AõBúB¤BB¨@ç@q?E?>>ø=Ü=c<Ò;';Z<*;»: 9;D9Õ8î888Z9Ž8‰8±8É8°9:9T987®6á6c6 6b5´6—6Q3Ù5566…66|6¾737v7+6Ê7D55¹65Á6¼4å5o54ž3¿433‚3“2ð2p2…3Þ2ø3ç3æ2¸1Ã2€3©201ü2»1Ì0S2`0ð1ã22‘3 3Š43H2‘2U1Ü3H3r12V1–2¿3G3x2A33Ú4Š3O34X4\2Ÿ21¬1t071>/T/|/Å0µ08.þ./A.‚0)2!1®0¢1(1c1a/ç0¢.¨.ð.æ/_/\/g.¤0g/m.é/ .†.{.O.«/«/×/¤/#.`.¥,°,°,ª,û,-+-o,¥-0---¹-ö.8,³-~.4-À-ð-Î-´-W*Ì+*I*Š*Ê+7*z*G*<)Ì*°+2*ë*++ë+m+Ù*3)«*í++ž,,D-¹,À,ÿ,à+ø,=+³+q+»+þ+B+·+-+;+=+Á*ÿ*Ê+u*C*|*±*Å*4)Ô*»*T)Ì**—++)>**É,H,æ,Õ.\/÷@ fKj?ƒ5ÿ†6ÿFòFòGsH¨HvGÿH?H.IYI!HzIlIÑJKJYJˆJËLøLAK¹KÑLÓNNTNÏPWO˜P[PP‘OOŒQP~QPåPêPªPæO¦N!O7RP´NêQ'OmOQ‡[E[ASyC6FC¸D::4 ¿GsP¼N–MæNgN_MèNïN^MíMmOWMßOÀN—M×L}O”M¡M¢N MMÑMÎO/LÔMCMøH3s% ,O2u)é%Ù  è ;%&   ã  k °" ç&‘)R1Æ>E>5!+ S*R,K-g) *ß))~,+,À++,«-6-D-´,Ö(P' )ù+à+Ö'ö%j&p1·H‹MLOMpLËL÷LûM;LÿN¯LL¥ONòNuLÎNvO!MÀOAž?8D[áHPH?¯Aj5,+Q" XFJOAMËOÇNœM0LìLüL*MîNMN±O OMÌNÿNDLÁNOMÕLzO)N7LÀMõL(JXJÛIéHÇH!F›GºF FHF‡EŒDõD6C$B¼C©DBÞBêBãB{B„C5BZB‚BBB=B4BèAg@;??>Æ=]=Z<a< <Z;ë;¸:x9Ý8–8ß8Ý8£8|8±8±8)8¿8F8@8z8z8Ø8o7™718,7h6`5p6g5æ5f5›5…5–5V6]6Â6ú6¶6ö7=6ÿ6z6<6C65Á6 6‹64é6v5­4¶4z443Ó3P3à3¯2Æ3393¢362ï2°3æ3à3Z2±2¸272$2ª2¡2—24Q33—3È2þ1‰1R2M2Æ3®2Ä1Ý2Í33¾3O3J3Ê3^3^45·433#0å0›0ö1.1-0t0 / .g/. --$-‰.†/&0`1Ñ1Ï10J0R/«.O/h.÷/˜00/™.ù.«.²-).œ.}/t/­/ì/Ý.Ÿ.i.q.,é-p-t./-ž-0.,¸,n-§.o+Ç-7,í-n-3-ó,ú-®-Ú+ó*L*?)ò)‚*[*”*)Ç**x+4*ª*t*¶*ƒ*€+j*a*…*ó+þ-£,4,`+±-s,·-,Æ+¹,+8*ë+w+ò+‡*(+z*¹+4+ö+À*Ï*++*ü*E)ý)Ö*õ+}*=*þ+O+’*Q)_(Ã+#,,`-].w/ê? ÷L3;06ÿ;6ÿ±Aÿ<.þû'ÿ‚S€w1Àj6xj7Ãk7 k7 k7šl7k7l6µl6÷l5õ¢ ©Ýÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ? É<ÄH HžJ"IVJFeEîGÎH:GLGÁHÂH GÉHòG¿G†FËEûE†EHFýEtF EUDÆF‘GG_GßE”F“GGHFKEEhF6G6FtGçGíHFI{JäIÝIæI¥IÞIqJVJˆIfJ•JŒK^KÏLIK†M=LÇLQMNCN‹N^PTPEO OŽP@L@RBÔ>+=%=;:±:¾9Í:†98•8ä9á9›8î7ø8°8Q8Å8Ç8ú8A8¶8}8o7­6E6G6n6Ô7^7i6«6Ù6¢6“5Ü67 6`67µ7E6K67|85Ú5‘4š4¤4¯4·4v3ù2“3D3Z4 3š3ß2p2r3K2z3h2ô2¸3 373 3a3=2 0F1µ1î2¥2”3]2š3Ð3]43Ü2Ð3‹2Ê2"3’3…2¤2c2h2©2)34B3Í3M3Ý3Ê32£2o2¡0á130´0î/º-Æ,Ü-(,g-‰.- ,Ž.Á/s1§1ˆ1‰1Ð1Y/¨0Ò/ç/¦0/ž.n0'/N-,“-´/ü//#//w0,/ˆ/m.1.á.§-/.3-æ.:-,µ-~-±,»,¿-¿-+,†-p,|,C-*,>+ƒ*Ö*È*Ï*+>*ü+Å*À*¶*|)»(Ä+ *ü+,*ó+,v+¢++¢+ò,¶,o,Ù-¢-²,?,5,I+,,*Ã)I*A, +¬+~*˜,0+A-*, +»*)u*N+™*Æ))“*G)ä*“*+ +U+W*g* *j*š,E,,Ù-l0³? 2Kë? 8ÿ=ÿB=ÿŽ/þ$'ÿÅV;w1 j69j7Rj7‘j7‘k7ak7æl7Žm7“l7ˆm53¢  Ûrÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?KF)HãMJ\JJ=GGjHyH{I@HIHIGŠGGüG¾GºEúF~FDõE>EJEÌF½FÅG”HGcFgEhFØF¤GEÝF§GñG»G+FèHpHGH¿J#HmIbHðG:G½HlHöIèIfJcIôK"LKþLMCLÉOOTOÆPP\OOOPRGQúQPèP¯O¢OðN¨LñO%NMøM8OoL÷M0UjRF´KaGxL¸A>´7‚3c0¾LMN€NSO P„NLâMYL×MÍOGPMÈNONKNÏNMNýL¬N€NHQ%OhN€N9OiN7M|G/^- ¯, Æ)X&X*.~,5*‘)))0,[->01©4M8ëGGÙ`ZBE¼<´77@7ÿ7„4\.q+{)1+g.À5u4Ò2e/·0U/,;&¡(y,©6âBØMMòN«N*OåN(MtMÙLN¡NsM­NÖON NM«NrM¶MEL°:œE¯WÛrQW,_kFY;[2  ¶9ïLäOP1N­N·LüMPNMN_PILÔM³PƒP¾O0O¾NRN LZOKíKÑLLENkKÄI·I¯G6HðHóGtFEßEšERBTCCDOCŠDBA•A@APAÍA–BNA“B A‘A¸BBAAE@Ä?]?c=Ù<º<ï;¨;¨9Æ9V:O:8â9T:¯:f9ö998–7887À8ö8e7ì7ì6½6s6Ô6Û8P8A6•5Ü6›5Ó5Ø5Ü5e5Ÿ5–6J6I66 5å5%4õ4í4î5?3ô43{3E32Ý3+3Z3b3`3r3k3þ3$2ƒ2392±3!3g3b4P4&4$4&4T3”3‹4'4/44$3ç3á4Ÿ4X3ñ2|232{1ô1{01p1z1æ2Z21ž2×3^3¥3°3.1é1ä1!1d2 2í1s/ÿ/0a0¯0¨0?/x1_1ž21P2=1…1À1M1•.å/(/'0a0/©/b.ç.è/l. /*/¬/ü0Ò0Ò/.¬.ž-Ý,í-â.(.r/*.«,þ-þ.,-7./,,è,8,ð- ,À+¬*5++)×*+Â+¶+})Ã*?**t))K))—*E*)×+*=*=*ë,p+e+n+j,â+ý*´+²+F)N*T+F+Ž+³+p*³*l*D+ù+¹,‚-;+Ñ+Š**Ò*K) )2*™,~*r+p+¸+*×*L,…+‡*ø++’+î+p+}-f/;> NK;ÿ#3ÿ6=ÿ<<ÿÜ+þÔ#ÿuY·w0sj6oj7@j7Pj7’j7ßk7Èl7l7m63m5v£ ÖÛØÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?6F½HkL¸IJbGÃF(FÕG;HúH¸HDGGF[EÕFƒE~DÿE8EÂDD¢DÁF0E¸FÿHˆHLFžGiFÝGH HFÎHGèH¹H2HàI'HöHÄIûJæI£I·IcI2JQJ˜HüJùJbJØKžJKLL\L^LÓNNÊOYNãNON“OPPEQÍP OaN÷N5N¾L~LpM MmLêO OLLƒQ«EØ>\AÓLÆOÜI1?:Þ1J.ÌM OCNMMÍLØMMNûNþMÁOOþO6O„NòP«OO}N¸NNNzMÉOáN8M¾PMöLµIX1Ö) ¡*¦'}  < Ç ký ï:òà R" „$ ¬+ 6 €G¡F@±J¼E’?i914ô+h*w*Õ#! >"Ñ   ¹ ð C Q < ø i Ø+d:ÇI)KÔMMýNíM¼OŸOeN«OmO.NÛM²MûNªNMŽM„KŒO4LðLôG©=\HVpñCÏ@Ð?x<9Uˆ* ë' µ)íEçLëM¤MbOMßM‰O8O~O|O“NäO½NÄOòNÃP½OÅN¾M>LæL&MjKêM,IÄKcK¦JvI0IGFFF¦FC×F?DúC„CúAÕB•C BÇCAÑBÔBÑC AÔBOAûB?ÝAeA'@á?š>Ù=©;9;q:¯:::^99à:9ê:28á8¤8™76(77€7W6Ð6¸7¯76ö7n6´77“7Y77‘7’7j646d6m6Ó77766]65±6*524Å4»3Ì44G3Ÿ3”3d2ù3®2ã3¬3ï3e322­2ç1‡1ñ1}1ÿ2v1ê2ï1ü1ô2o2/2'2¡3j3ë3©2ú3:2»2t1.`0Ü1»2ê2(282q1ð2­1·3i1i0ÿ1¾1.181¸2L1Û2«0¢1r0ó1±00/ø000u0%/ð0¦21Z0¢11V1×2~1W1/1/*/x/g0.è/..ñ.†-¼,Ê,Š--¶.],_,ƒ.c...-.&-ö-#-v,þ-0,?,ÿ-ð-¶,ý-@->-»-¹+D,@,8,~+L*],‡+õ++=+G*"*) (Ë)Õ)ž)_)‘)Þ**O*u*9+4*…+Ä+K*G+€,3*J+ ,z+’+O+8+>+=+æ,"+:+ä+c+8*K+*P***É*Ñ*X+Q**N*)]*E**)Ý*)(›*g**Ó+å+',\. /¥> øLá=;9ÿ”<‹=ÿH(ÿÒ%ÿ#Z˜x1¥k6~j7Nj7€j7Jj7Ðk7›l7Ql7l6ém5*¤ ÜÓÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?òE°G3F…GÅJDHFíE·G‰IGOF DlEðF_FRFF{E·EÎEÁE?E_B?E¼FG‡H‚HGXG\F$H‡H F`FÕHêIoP»PûOÆN•MMM…LØMÏM‰NMJMM‹NHLØNOzN8MBKšN OuNèM}O4N³MªK?4i)n&Â'û" r b"¶7 Ú¤›m²›:pð  „Ô »‰¦ž§x7K < é ,  9 | 2'Ù3H LLOM½N4L½LkM)NŸOM÷QžNÞM¦N©NVNÉN¿N9O1O¶M‡NsAÎ9ID­bsoÔEó8W4Ü4gŸÿ¿YÐSµ*ß?DM¥M£L_LÙLŒLUMÔM€OTM×M!N>OCNAN@MýLùLõNëMïIíLµJ;LJ6JxJ®GüHçH¦EõG‰FÎDÔCšDCÔEÜCdBçAÛBA]AA@0AØAO@ÜAMAN@Ð@M?Q@#A@•>ž=Ü<§;°;6:ï:¸::Ë9Ù:ì:#9 9Z8î8‘76×7Ð7ø8¬8ú8µ867¶7,7[7™87Ê8787‰7T6•76”6¤6“5Û5í5%4ï564z3V4t3Æ3W333 3 2¥3å1m12ì2£1è0÷1ï00ˆ0ü0Á1|0ú1º2z2z2¹2k3™3i3}3t2þ3û3{3C3C3D2Í1Á0Â0ð0¾0ü1q0}0v0G2o2®3œ2î2X21p201¸1å2h291'0>0:0·1·0ì/„/ÿ0z0s0©1o1o1­1Ÿ220Ú0Ú0é1'/ù/:.s.s.{/º.y-s-*â*õ,+˜,,+h,\-ê.i,Å,ÿ-7..j+Í,s,Œ-p+Ê+ )Ù+y+,ƒ+@,,È,+Ë+,7,u*Ã*Ö*Å)û+E*´*¼*8*%)¶(Ç)„)})Œ*…)²*é*÷+ª,6+¾**+++*Å+Ó,+Ÿ*E*Â+<+„,+z+?+Â,+,´+Â+*Ï**I)`)Ñ(î)¨*(Ö)®*R*+**Ì*–)Í)*•+‘,T,,,Œ-t/,< ðO<ÿ×6Y;p7ÿC-ÿ8&ÿÂZuu2ƒk6k7Ûk7Žk7Èl7‘m7l7öl7l6yl5¤£ ZÛÞÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ? pDöG|DEE•HªHŠHEEOFÔF¾F|FEEEÜFE™FÎDÿEýD DJE DÏE–D^G‡G†H¿FËE£C°FSGËHÔGUF®GéIöHvFûHBH.G¿GïG GöHaLäI£J)IåJ‰IåK-KeJ8JKMI§I_KÄLLL^LM%M›MOŠOOÁP‚QPOÍNÚNN›N³MuNðM£LõN´OOñPnM5KÐV8JV9!9ÊAC€H-:;=bF®7žPnP³P~N–NÇNNOANÃPNÆMÀMTNMÔMPMCOxMŒMùMNvMBOæNªMuM¾M=MñIÌ0'û' ?)[" -#š© n¹ ' ¾ëó ï ,)9._"{(˜+T#OÓ ¦ 1 Å ³ t Û Ï ú a   =" 1 ¨  ,ÕA«HìKLRLLŠMLM§LÛNdMðPOYLNßMhMÑMÉMCMôMìM¨KÁ7Ž6?Þi¦}ÌE¨9Ï1t9ÍA•<e:#3¬LÌMN MøMhN1NL¿M®M»NKMéOpP-P Q,M&L¤NO–LÙLÛLÛL‚M–LKKJÕJPHâGæHG/FeG'F›FEÐCÕC§D%BœBAÉBBAÑBŒAÛAÏB@Ñ@Ò?«?9?î@ß?-=ô<º;º;°:ø: :°;7;9S8d8ª8Å:Ä6µ6X6š76É66ƒ6x6@7¥6u76Ý6Ÿ7_7Ž7—7”7Ù7Ò7 6_66_65æ5÷5±4÷5=4µ4x4n3Ç3È42Ô32§2¢2£2¯2F2E2¬2õ2ù2-21¾1}1M0Ä141½1¶2ü333d3°4<3µ3®4&3®3³4c4â53ê2·3!1ñ1n181¿160ô1ï2p2§2b271k1«1¥0ÿ1¨1ò272610¼1%0w0Ü0C2-1o2-101Z2 1ù5°2f1o0±0]0«0í/«.É/²/5.l./;.D.:. -N,},M.?-r+Õ,K--ë. ,ñ-k-ê.Ø/Ù.®.©-Î,¿+ *â+‰*˜(?+œ(´*¢(}* *à)¦)Ý+**+Ã+*})K*K*¤)û)B)û)y)³+ƒ,+?*¶*ó*„*I)¾+|*¼*"*H+q+³+ø+Å*Ž++Æ,>,»+D+»+³*¸,|,}*Ð+)ç*X*) '¸)©)á+(ª)›)ž*P*+ø+C*)™)Û*Ç,·,,Þ,¤,ç/f= ÁM?û8ÿ´;ÿA4ÿN,þ£(ÿUy0Âj7†j7Õk7l6,m6il7Žk7¢k7Àl6ll5^£ Úšÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?  IFnG§F­HvHSHFûE$E&H„FœEDEfDñD¢EEE¾FF‹DODEEEYEŸGF‡FQFFËGFèGG]G^GñGxFüGAGŠFüI9GlFèGz8I1…5í5ÑO3MQOFONUNŠNÄNJNùNMûNóMNFLÀNyN‡N­MîNÿMþN>LóN²PçMµN+M=MªL53+)¶)¨,7! ¥#£&d Ü Î Ì è Î%õ Ç ¼$ú/r9±1ƒ,Ý+##á# (®&²#ü!    Æ È "u&+'ì&7$Z# "'~:J¬L&KÚL‹LQOvO)L NßOMpN°N²OgMæLöLdM[M‚N;M÷MMøM8ˆ;ê=°p |+Cë8(á4Ó2ü>jI³LåO—OO‚LxLLULNzM8L‡LÛNiONðNéN0M]NÑOÚOžNÐN/M_MSNKIL±KÇJŠHÜHTHSEÏF˜GDF9E@ED DCÅC‡B BAŽBBNBAÍB @àAXA‹@É@?f?º@S?[?(=æ<æ;è:ò:ó:¾:º:ý8J9g9.9¼9?9 8”8_9C8ý7þ7(6ÿ6þ7i7c7«7[88>8…8I8z8x7H776£6d665*6k6.5ê5í5¶5v4ü5:4;4A43(3)3Š3n363d3T3¢1ú2z2:3j382v1½1…2·2@1Å304ç3ú4*3Ò3Ü3]2è44R3’4&3ð4X4—4€3š4˜33^3d3Ë3Ù2å3Ÿ3’33“3Ü2â2¡241¬2§2(0ò1k1Ü21i1ë/ò2u2m3.3X2ò5"2\1ž10‘0ß0¡1 0/.r/´0d0e.1-†.ô. .%.t-³-§,ý,e-é/.(.¥/i.œ/k/Q/-¯-¸,®+<,@-N+M+Á*Ø)°*9*è+Y++P+X*Ï*–+*þ*û)Ì*)¥*…+ *(š((Ó(˜(ˆ(Ý)*x*¿*í)Ä)3(Ó)ú)’)C*D+9*º*¸*x*J,¶+ü*°*ú+)ó*[+Š+J*Y*(æ'¼)d* *W*Ò)á)ß*‘*Ð*¦*œ)ç*‘*‰*9)Ñ+‡,¹+R+c+ê+Æ/>: ×M›=9ÿe<ÿÉ8ÿa)þ£&ÿÔXët2j6kj6Xj7Œj6ýk7Vk7Sk7\k61l6$l5N£ ¼Ú1ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?sGæFÖF™KHáHGGF´GÁGFEÅEžCD¹EFFRG›F×FGˆFEzDDGhFûGÆG¬H±H)HhH¥I|IôI2JgIbIbI JžIèJ&KJJ•JIÕKTL‹KÒLM|NŽO|OyPOnNgMçMíNeLýL=•=;k;e;m;):ï9¾8ù8”8¦8l8o7ß7Ð8¼8û7ê7ƒ7e7+7c7é8Z9H9G8¹7C77ˆ7Á7Î7F6Ò655Œ565'5ã5j5ª5$4e4ê4÷4¿33²3€3x332È2Þ2³1µ21é1ñ1O1Ü0Ö/00\/ˆ101q2A1‚2«1º1û2¯33Û4Ð5¢4â4à4c2ó240I11½0|0}1è1­01û181s111/1†1q2|1„1w2h0ë1Û1[0™0á0®171(0¶2'2Ý1u1´0¥1+1 1/j.}/=/ë//.w.Þ.ñ/ñ/`.:/a.+/G.C-k-<,0,®-5-t-í/¿/y.ì.ô/[.ð.R-´-¶-»-8-{-Ã,r,Š,+i+é,+ç,A+*C+¶+ð+±+ï+4*ý*~*F, ,¨)˜*=*o)J))O)f)á**¾)Ã'×'·'‚(u(U(Ï)‡*?)¤(º(­)µ*‘*”*É)Ù)c)#(Ñ)*À+:+,»+N+H*^*W*,)1**N)Ð*Ì*‚*”+ +*ý++¼+*X*9* ,º/7; hMÛAL:ÿ,>ÿåDÿ•*þY+ÿ©[ãu1/i6oi6i6©i7Ãj6?j7ƒj7”j6°k6mk5ˤ ëÚ©ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ? H—EÙFÜI'GçG×FžEFFOFÇGÁEdD?E]FÄG½GBFˆEÿCºCÎDxE;FEDzCTDEÚEáF$FÛG GFRF˜EâF`GRHFEGŸFéHiH³IeI´IâK¢JâK\JžJIàIÑKJëIhIgIÒIÊK^L K K…M’ONÑNÙNšMRMÛNNÖMçMîMäMaM*MPNONMM NfLŸK“V‡PØ; 8õ<M<í?f<3LCU•3žP×OO3ObN¢NpN®M´N®N,NÝNrQ:MIL»N©JÎL¼HØ3ð+.K) >Í |(…$«  f Ñ »)ä/ .=26.;4ºD<iE¢;ÜCœ9U8r*\&$V%[#Ö! z" ?&È3ù8T,ê$  Ï w.GBJ,K^LN9M°NqN¬ONâN'NÝNfN¥OgNwL2MMÀL@MzN:LSLnIô=ÒH5=‡?3?ZCÿ7¾ ë0ßN©MN÷PŠPÅPNNNBL—NN7NñOÌMËJÛM[OaR>P¢P§NãMàM­OÑONdM±LáNµMKKWKIHÑHH-EVDÙC–DIE‰C’BÓB"C\CPDˆC A”AÎA@«A? ?à@Á??E>Î>ÿ>I>$>Ø=c;â:¨9î979<:998ï7þ7 6J6#7¼7@8¹6õ6½5û5ù5Ì7#7e77Ó8A7Ä873737{76œ5î5e4ë4×5w5.4ö4¼4s4}4|4}3ý3D2…2Õ2V2˜2`1ï1v1°141k1µ181¸0œ00G/þ00Ø00 0¾1Î2¶2h2`3a3Õ43£4S5Y3é4£3w1¼.Ó-æ0‹01‡0ù0ã0ð1.1÷182:28/ž1*22l2µ1í1k1n1-122a2!2/1i2X1ª2¤2j1ë1õ1ª1*0ã/õ/ƒ/N0/.„-´+›,‹-Ê-†,,Û--}-{-B,ô,È->,à,ö-f-7-x-¬.o,ü-;,,¯+ö,0+–*Ê+G*¯+^+Ù+”,O,+ø,@,u+…*Å+m+†+·*ü+C*t+?,8,b+²*…* *Ã+t*6*&(œ)É*s)),(c(î))(¥(¥&í&9((½(C)-)-(â'Š)(³(ª(§*[+Þ*c+ƒ*, +*˜*Ú)ã*;(ù)©)I*‘**F+*@(Ü*5*T*˜*Ø+¬**”+”: I:>ê4ÿÕ8ÿÊ=ÿ+þÜ'þßfÎz.°i6i6.i6wi6ñj6mj6bi6¾j6+j6ék5 ¤ 2Ùâÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ? ®EãF{GØF†J G˜FFD/EVF‹GDpEžDlHFtFÌGTF…F FETEEEÄD_DŠDD DXE‡GEG•FE©EbFFaG)GDH‰GG´GrH~HÎHýIóI¼JwI­IIªI&IdIIJLJ•I˜I[K JÊJÈKIJ\JÎMFNM(LÛM/M!MLîM%K·MãL8L«MxNMdMdM®N’OáM¯LáPiS½;Ê9.8ë9j8ò:ƒ7Ô1¢7ûPhLˆM}OGNHNO»NyOóO-NµMƒNLˆL€LHLöL¶M)N_M5MîOlOôMrNüM«L=LéEx1µ.•. =,¯ — :# ž*›*š&" {# ô)e1×0ì2Š0=6.;6’?A@ AB —3¾)$(À%G%O%ç')& ×.s-x1Q+ #  ;  ÿ; K'LžLMWNHL‹NíMnMsMhN7NbONÞMçPM+MZLÕMÌMM]N5L~HV;‹@i:\6õ;÷B15N b0YM¸NOwO€PP‹N‹LÀK¡KâN=NrNLÌLÖMNgO)PªO«OáNPPÚP†PNYNMÙL…LÛLVI’IHÉIKJHGDÏE@F9DDCBFE:DÃDˆD CA@a@ž@ƒB?—?ò>Ê@F@?G>‡>R<§<§:ì:Ý:[9D9I:p98î76’6x7Ê78Ï8:76¹6ý6ù6õ7$8#8\8I8÷8z7ü7º6Ë6Ì6Î66\6M66 6e6µ5õ6;4ò4î5<4Â4Œ4¾3Ä2‡3ø3O2˜2a2f2-2ß22„2½1ý1Ô0Ö1111€1A1z1¶2w352¿3-3P3Õ4.4ž4§5”5s4q4=0Ž/§0P0Å0Æ1J/‚2o2X0õ2"2,2­0G0·0®0}1d0ó1l11a0ó213*3l3Ú2=2g3#2ó1`0t0Â0»0»/ö.«.ó/Ž/l/9.;..t.+-´-:-‚,Ì,C-3-y-9-.k- --á-,-ñ-_.v,ó.ü,*˜+‡++‡+6*ô)Ã*†,:+,|,;,+Î+~+*¯*—*m+Q*Q)€**‡+9+ý+>*Ã**û)ú)<)±*+*(¸))„(ã)Þ)–(m(à(g&ª'´'‚)#(¸(»*6)*)])*++Ý, *Ó*ã+S, +A+*+l*«)l),(`+*Î*×*Ç)ú(V)$*Û)˜*h*w*,º-E9 YLj@ÿ¶7ÿÝ<ÿµ;ÿ¿,þ–*ÿœo(z.œh6Þi6]i6ªi6ái6¨j6!i6âj6j6±k5¢ ÄÙuÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?GÖHŸH.G¯GGDoD¡CßDyF¸GEfFEŠFOG7F9FbEîEÊD¾E EÌEÌD„DÉED_D“DÒFˆFLF DŸF!G#F‚HHGFÓJÔHOG¾IzI' O+~,*7m)! ó ¸ }@OI¬LMK^NN¶L‰M|MªLñMãMnNÓOIOINÊORMËN…O0N°N¤MÎNqNoJr:Ø=o<`:õ>DCG3¤!Ð2÷N,MúO¿NNÚPANNƒM"L£MûO¶ONøK‚LáNqO8P/NïN¾N¬NöP!OWNœOPMÚMQKLQKJ6HHžGùGÇGÖF‹FFEDSCCDMCDDºEDB»AýA¼@ƒ@”A@ƒ?Ó@…??´@¬?|? > =Ï=;˜;];5:N;-;h: 9—8ó9X858ˆ9²9¾9¿8ö9)8§9•9H99±9«9J9†8ð8¢7³7@6Ê66“6P6Q6’6"5Ù6¨5ë6z5Û5³5:5z4 4B4494C3½3 2\22*1,141¦1é1¢0ú0‹1ü01ð1÷1¯2<2µ3¬3î32353g3c3 2÷3s4.4/4i311¹/Í0 1~0„0Ä1î1ê3&2]32¯2e1î1à0¬0#2112/¡0é1¢1d2j3c2´2d1ë2Ù21b0ä0j1d0í1\11 0®/a.ï/d/,.›.l-·,M,y-"-·-7-Š,À-ê-Æ.r,)-­,å-¡-U,í,Å,K+Ï,y+ö*ž*Ç*Ï* )f*g+Ã+“+Ã+Ì+é, *S+ +Á*Õ+Â*U*K)‹*e*ÿ*}*ü+·+¹*–+ )ô*9*m)ò)Ç))Ž*?+9*-)Ç)ß(`)š*))£*[(j(ª* )©*)™)¤*“+ *)ª)m*%+*H**”*Ñ+ *%*`*”++¿+)*&*õ)’* )¥'Ä(–*E**¦-: ÓM¨:ÿd5‘5ÿ}<ÿ8-þ;'þ_qx.eh5h58h6h6Wh6h6Fi6i5³i6„j4X¢ 3×þÏþŽþ†þþþþ†þÅþ†þÎþÎþNþ=þþ þ\þ]þTþþþSþ“þþ”þÔþ%‡FÛHeFkF!FÝEËBOD˜B°CÖDŒFF’FKF’FF¸HqEÕEFDEIDÌDÄEEMEWED‘E EºGÁFÉFDÜFOG]EðGûI}GHùIxIäI«H€HþI8JàIñJªJ(IäJçJJI‹JùJÛJ”JTKHI‚JtKNKÖLIL¦MÖNQLÜL%L“KªL¯KvLgM(M2L„L/M$MãL³MîM]M?J6KZKaPKT9ò9v:k;f;:ÐNÆDÆ8ËNõM0KOIöK¢NDN²L8LôM¨KÍK¼KxKpL³L7LãL{K‚KQM°NñOÊNñOsO¤M|Ip80Ø.W0—( N `  Þ5B*Ÿ,Ô)ù" ! x" z( -¾.•0<-n.zF¡<ÕB pH ;1‚-c)Û*]%Š ¨  U&T)þ*(--1‹'> à ¥ ì@^IÝHèI´KL‰ML€LlLjLâLÚMOMM‘NúN¼LÖMÆO­NÜLkOØN)L:G99¢>d=$;Ï?…>˜8!Û5ËN}O{NöOôP=PÂOñNCMÀNKO´P9PñM¥L;L£NcNíO´P«N.P±PüQõPNÅN˜LÅLMLÔJHhG G6HHuHH˜GíGpFõE•EŒEºF·EüE?DAÉAK@‹@[AÒB5Aì@ ?J>Ë@·@:? ?=];¤;,9ü9v8ï9n8Î8V8\6ô7°7¸8o6Ç7È8ÿ8±888*7 7Ù7Ó7Â88E7Ø8A8r7º7ˆ76T5Ù5•5Ò65«5ã6,5¼6ñ5¼5r4­5r4ò494r4y3 3|2ý1Ó0«0ª0)1¤1a1©201ð/Š0T1 11s11„1Ç2©2¶3+2¬2©3 2Ö3Y2Ÿ3$403$2e21â1Â1ã1?0j1 1!1é2 2Ÿ2ž1³2/20@/¶0r1-1^1-0l0å1­2š2›3$2¡2ì1w0Ú1X0é/i/¯0ã1$1v0÷0½0-0=/ä0¤/c.ð.á.*,´,:-.+.p.ß/.o-_,!-ï-n,!--í--¦,t+ö+ì+ì+Æ,+þ+¿0²+R+K+Ð,ˆ,•+Õ+‹*ç+û+K+Ó*¿+®*F*G))Q+ï+í+ò+.*Í,+)ÿ*F(›(!'Ð(T(Ç)ü)º'|) ) )(È(Ð)ˆ))‘(0'æ(×*(ž(§)B))&*û*Ê)Í)B)ø)‰*‰+9+º+)ï(Ö)X))_)6)*V)¤)Î)¿)Ï+»)Û)÷)Q+—.«; 0L<ÿO:A;ÿ?ÿ,þŽ#ÿ„‚ q(þ}Y2”X3ÝX3~X3.X3žX3¨Y3¡Z2lZ2éZ1ÕˆŲ=ü_ü‹ ü» ü¤ü]üsü ü»ü‚üsüíü«ü üüqüüüüÊüêü;ü¤ü„üsüö=G“HGªG0G¥E¹BÌECíF‘FUFÞGyEVFUF F~GtFˆFF|EÃCÃEE‚FFREŒEÕDÆEËEyCÌDCDPFGïHbI¸GÅH/GÊFÃGÌGIH@GAGèI¶IuI¬J)IuJXJ]IÓIÕJiJÑKVI_JJŒKÇLM LžLPL\LbL”K’L L©LîLpMkL·M¦MFMñNhMfN\NRMíI?KtL#J˜TŠ>Ï8S9}:º:Ñ;]6 4 =äM5NéN.MÁM³LƒMzJÅJ·L~K¹K½J¼KõJÈK4L0K÷L1KóNåNmLûM.O*MKP@>4ß4w3m16(E é$aE1®/ÿ/<%! Ã! s# ¸(”+Æ+Æ/Õ.D>84 Ã6 3Ž,Õ*’'¸# ÿ#w$ +“  c'ý)ª'# K Í i$zEJIÝLÆMO1LÇJÑLLðNlMkNÌL”LÂMÅM}LLMLˆNxNàMwOjMzM*Gé9Y;1Y©4^‡?ßCò!Ú/ñLMÈMNMP@NsM8NOiP3P"PO)O2PNÑNeNäOOPØQSPOÄMLLÁN–NæN0K’J–IÁKùI¹HpI(G³HªGeG)F½KyF¾EÿEûEuCBLBBñCwD8AŠBGAA¶@ï@n@?>‹>Ê=Ô<­<(;è; :i9¾9Æ:Š:88h8l7í8†8°9ñ9p9¯8ç998Z8P938Ë8’8 8¿77‘77'76Ñ6‰6“65¥5Ü5¼5}5¼5<564=3Â3É3»3¾3 2Ô2Ô22Q1á2\22I2/1j1½231ñ1Á1 1221Æ23'23“3™32È2›2222ß3I3]3¡3¢2b1ø1ó1l2"0÷1§1¨3`2ç352n21f1!041/1ž1u1q2.2s2â333Ñ32&0|2«0¬0i1&0¦0æ0s.ü..€/.…/>.s/.µ-¹-a,õ+‡-ª-â.(.+.â-ì-ô-w-$,ï,=,,m+>*Á+4*€*N*M*ˆ+’*Ç+›*¿*Ë+Á*‘,,Ê+,R+J,\*É)e*ÿ)^*È+U+¸+*ü+±*Á,?+*å+@)(Ö(`&p'c(O'á'ì'â)Š(€)Ù)Ñ*Ç)‹)Ò(«(’' '§(Ï*‰)Q)×)X*ý+L)š(à(”**Y*,*Õ+S,û))B)‘))Ñ)P)ç**Š*–)ž*¥*Ö+ž+l,y.q: ËJ›<ÿæ4ÿ52ÿo<@*þ›+ÿº™ +2ûTl<ý°l=ü_k>üÅl=ý8l=ý)l=üïm=ü6n=ün=ün;ü;¥}ÚÊüžü üù üküTü"ü›ü±ü÷ü]ü+ü"ü‚üÁü@ü>ü™ûübüü,üýüü- ü~rF•GìG¡FöGDçBÅDsE˜FÈEaEŸEÓDFHFE?EÁEÏDÎEÑD¢DD‹D×EØDàD&CBÝE€DOCC×C”EœFñGuHH¼HýGÃFöG{G2GµEWF·GÄI˜H¯HîI/J,I]JŠI×K%K_J“JIÎJÌKÑKÌL KNL LVMTNUMNLçL™LçL²MbMâM¬M¥MôOfNgLíMK`JZJjKZQ–M=L9ƒ;Ê>³<‡4#8!8²< I•MÿM¹O¯M­L†K JHKÂLgKÿKAL3LmLvL4KÂK‹MrNYM­M}K·M)JQG=4$2D6{4&.ð#´",1ÝI4;.©1z$¢" Á Ñ! ï% ¦(¼*.–+Ü5'9w0Œ/¤-Ö,?'Û$f! Ï##²$%ÿ ±)O+“# M ©á,•GiK‹L‚M@N9M‚MpN¬O+OMíMâN“O‚OENzMûNòN:O¬NuMéMôM:LxHâ9Ð;CBµÂ@…A²&ã+ÙLºLßOŽN˜MÏMÃLûL^L‘LÎO>P,O­O'PLO N•NŽOÒPgN–OœOÑOUOJROÉQJNN9N1KûJHHÎGLHtH·IèJ¯IÉIšHqGkGFDyCrC¿CBQAÖAÈC€CDBÅB|AôA›Ai@¿Ak@Œ?C>?×="<<:h:=;!:±:z9 9J:P9š9›9 ::69î9Þ9Q9U9H9S8–8²99z8r7†77Q78Ù6Ï6Ø6Í76 6o5«5r4ù5o5*4²3ý3Œ3Œ3„3E3ƒ3A3ý3?2ˆ3 3N32å3%33`3¦32`2@1ˆ2¨1Æ2,3'2‘3 2Ï3”4(3Â4‹3J3¸2ˆ3Â2•2Ð2ž0°1(0ç1¢2à3š2d1“2ž3(2w2%2)20¼/D1¼1Ø21˜2â3“32Ô2¤1[1t0¦0.1P0f0i2'1s1%0r/µ/>.ý/¶/t/ì/q.é.¨.{.¯-â-­-;,º-n-ó-û. .k-ò-m-&+ô+ô*ð++>)ò**•*)U) *Á*€++1*ù,+Ç++Z)à+¥+N+L*’*)P(Ö(Š)þ)…*~+ð+£+·* *Ç)–)Ç(Ì(ƒ)ƒ)Ô(«(¯*l)Á)U)%(e*)ž*l**R(Ø'w)Y*S)Î)Â)W*_+I+R* )f)Ó+Å+Ä*š)*Œ)X(¨) )Y(é),(ô)â**T**A)*“+I+˜,~/®: ‰JÐ:ÿÍ4ÿ=/ÿc5ÿÔ*ÿ!,ÿ?¯j3ûxl=ük=ü÷k>ýAl=ý3l=ý)l=ü¼l=üôm=ü¥m=üÜn;ü9¦Ûü>üü:üüµü°ü‡üÓübü›üdü›üòücü²ü]üü[ütü1 ü:üuü´üö ü^##GQFïGfFßFE EDëFJF@FD EÐDQDJEÆGDCE—CD…CˆDÑDÝECÝBYBOBH@åA[@ÓB‹CC¦EdGH=HpH­FƒFùE·G)F¿FºEÏEÆGGòGàHáIImHäIÝJJDKLIÝHÛIaIrJ¢K’KK–K×KÚLL“L¤MæL-KÕKqK¾KKäMlMfLõM/LþNMçKêHýIòJjJ¸TaG? BB Ï@ %6 ¸TTj1;›<MíLsMDN4K¾IøJTKñL+JºIñIûK5JGJÿK8K±L©KïL,L,L¯MeJ<2Ä4p3-4>.¸%¼+)F J…8c-¹3~&9  0 œ Ò" *ˆ(/¡46F9¯2q0P,O'K''~#»   ñ!Ð  W C*Û-%J ï--ÇIL–MN?MøN8N5M)LåLÿL¨MŽN×ONöOO©MµMyL8MØNfMçN5P4Ký8î;d5´qÆ:‘J\+q*L»NvM•NKM M¿LMWMOPO}NéOjPŽMÝONQNÓPOVOÊRPßQœPÊPŒKõKFNN¾LÆIšHÍJHzIqIæK'JpJH­H`GðFÑE EéC°BÂA¦CÀD0Cp@ÕA´@†?ù?ñ@@@?ˆ?? >Š<ß;Ð;¨:æ:ó:}9Š88U9J8œ7ñ8j9î9`:9—: 98m::Á8Š7Q87Ë7€7À65|6"6 4®4Î5š5Ù5Q5\4á4±5@3¹42453ô3 2Ö3K3 32™2 2œ1Ø21Ö2–3H2Ð2•2v2,2n3/1‡2é2g2u2à2×11 2!2_1Ÿ2\3›3R3Ñ3É3È42š1`1ê2#1e2«233j2{2229331ù28100/´/ý0õ0£1¢2`321]0ë0=/0/õ020¼///D1?00+/F0y/°/1.o.n-ê-÷.ø.°.æ-®,Ì,ö-±-Â.|.ü/o.b.6-o+z+"+o,;+˜*:*µ+ý+Ã*ƒ*D+H+?+:+!*²)‹*¡*a+4,+#,+^*Ó**H)W)*)ƒ)Î+5,¬,7+È*Ö*Š)ƒ)])•(Ñ((*p((W) ( )*8*|)ˆ)‰)À**E*‹+„*W)Š**¹++S*B)Ò*€*Î**T)•*H)X)š(ð(Ñ(¢(°*™)|)`(à)Ã**C*S*¥++¬,+.b: ‡H¢9ÿ5ÿÌ7ÿý=ÿM-þ(ì®+4ú¯l=üÛl=üSk=üúl=ü´l=üžm=ücm=ü²m=ü£n=üjn;û?¦ôÛÿ.üÝüEüRüü–üÌüªüÕü‹üòüà üd ü4üKüœüÍü«üUüc ü ü$üüÜü/ýH$DF¡E:FëF`FDhCºCÄC…EÔEÑDÝF EFEÞE†DDD^D—CÑCEE^CÚCBœBBAf@@C‘CŸEF¾EÅFFkGrDaDÂDF˜H.E|D{FjH£G¥HpHïHŸJH_IfI`I•I—HÃHTIJ KLKK‹KÎJK™K•K L5M(LÝM^M—LÛL)LáMòN©NãOQNªMÚLdLcK¯J-KjJiMÍKXE¯C£D F Œ:ùA K’@â9üKFMmLºM-L­J‘/›7}(~$ T# –" Ò# #$ # Z)ü4¯=¯9Ý/_1õ-ž-Ý(Þ(¨"C! ”#2%°  ß (:,% _ Xÿ1¬IÒL„MFO>MÈLÃMõLöMM#M™McNJOqP¬N4NnM¥MxMâMœMåMÙMÚMœK°:c<yJ}cƒƒÛ=q9,}$ %EL«MÈLÈMóM9LÅM9O(O¾P;R PhO©PpM'OOÑMÖQ OOšPYOÉOÓP–O–O LèL>LÇKKÌIÂJ»J¨J1JJÏJ]GÓGH]G¤G6E¯CÚCéC}EiC+AòA|@ÔAi@¹A¿@¨?@‹@;>”?Ç?O=><(;ð;ï:<;|:û99B9Ÿ9š9á9ÿ9¡9o9&9˜9š9×:‹9¸7Ì7Ê7Š7’7€7W6›76Ó65X5à4¯54ã54í5q5'4±4œ4t3„3Ç33 1Ó1Ý2Ø2”2%22[2à3–3!2 2(2¾2·2«1û1“2B2¯2r2ê3P33™3c2¥3 3J3ˆ3 3_3=3 2Â2·32,2í2k2v1}2¥1³1x3¡2ó3g3Y2•201r151ï2Z2f2Þ3$311Ÿ0è0t02/Ç0®0»00..K---þ.5-¿.=-¯/a/o.¿.¨.).h-w.7,Ê,C,û-¶-­0ë.<+{,z+¥+_,÷*ÿ*¼*¾*µ*I*À+·,8)Ï+d+9**C)È*¹+ +*ã)ú+¡++K+ )Õ))S)Ä))ò)7+D,-*Ž))y)Œ(‰(›)<(È(L)œ)(Û)(Ð)*)*6**¾*§*Z++Ô*Ñ*¸+¸+t,w*Œ+D)Ø)Ü)*)) (Ö)(á'ô((.(Ù)_)¡)Õ*(ú((Å(•(É)*£)Ã,k.r8 ÄI*<‰8ÿu6ÿƒ8ÿ*þë#ÿ£ ~4ú~m=üRl=üŒl=ü¤l=üsl=üLm=üšm=ü¨m=ü±n=üpn;ûu¦dÙ’ü*üeüºü_üü.üü ütüütü!üÒüüJücüeüýü üœ ü–ü$üný° ýp ®HQF¡FwFoFEeF(E"EaEÇF=F F¿FE€FDŠE=CC£B¶C7E1EbD(CB›CaCXBB!B^C%E™FnE¹F6F¶EøDÉCIDøEÂF~G}E¦DéGeH*GßFüHªHèGmGbI€GH2H©F÷G™HŒIHÔJJIœJJfImJ¥JàJpK(L\L™L KjL±MŽM>L½L5KõM\MjM›MYK×JÙJbJ¬NIVE .EaK zA6 NA~NfEBLèM7M­KóKüK»L7KJÆI†KXK@JóIHÆI9IþJIòC­75a5¢58i4#2(ö*¦@1KNM,KåB/Í9~*#   _" E k! (o+ó1G,?à-(=1w+i(_%Î Ý$ „%õ%â#Ÿ • Í#$$ã# 7:]L·MyMúNùPkO4MôM7LáNÐM’MØPÿP|QìP[OÚO,N$M¬MçO]M¥MãLàKâ:à>"`GQtkÇ<‚Cö3›&â8‡MÀLšKåNYLL†MþNóNP…QãPöPO OžPÙNM[OUO M—NMÐOaRYONMãJLWK}JHÆK-IúHøHòH¯HîHÌGEH_E´GmE.DçC¨CrC·BmB A?@{@ô@@H?Ï?ˆ@ ?>š<é;<k;á<¦<:±:³:ú;ª;r;89˜9 ::Þ:™9b:.:À9[9Ö:}9¾9~8¿7Ö7ˆ7Ç7Ï7‡7½6€5Æ5Í5Y5i65Ø6 5Ö65g5&5\4¯4·4~3¾3v3B3B3ˆ4A4ß3—3Î4L3{3233h3f2å2~2<1÷1ó1µ2<1Ç2í2I3±3f493±3€2­2ó3z33¸3Ï2Ù1ò1ô1ó1«0ö1£1¥2M1ˆ22¥3e3$2¥2d2›233‹32–2™2&1Ÿ1'1r0±1'/0//?.€.w.@-H-ø-ø.y0®0Ö0\/ç/y-¿,¨.°-ð-0,…,G- -.-Þ.2-ß,í,o+ö*ç*¬*è*¹+/*¬*>*i+-*è*9)ð)‹)e)‡)b)£(è)U)¶*¶*“) )Ù)I(u((Ò(m(D)7)‰)ý*ü*)ö(®(…)÷(():'”(M(D(.&¼(Ð(Ç*)•)º*Æ+G*×*K+Ž+«*Ë+Å,¿,ð*’(z+U+E*!*è*M*)M)z(ç(â'(r(î(Û(è))Y)) ))ž)_*V( +"*™+¯-­: ÓIªAI;þ×8ÿ*;ÿì,þå'¦ 5z7úUl=üPk=üÔl=ük=ük=ü„l=üRm=ü!n=ü)n=üPn;ûަ2Øÿçü"ûßü›üüÔü;üÕüü›üüŠü•üyü«üü¤üâü£ü}ü%ü†ü¤ üÏ ý ýÚ¤G,E~EEùE.C­CÌBYBFDšEDKDÎDDdCÞBöDCõD.D,D¥DîDoB·AýAîB¢BYAÒBPAŸA^BÙEÜFçFëGÙGcF¡EkEšE€FFhEqGG¶GãFˆGûH©I+IZGæHãFûHrGsFàG^GçI¦I KbKVJŽJèJ?I JºJëKâK2LeL)KnJèLCMFLúKŽLsLjM˜MÛNNZN LKÕK*IìN JGïLÑU ï;i@ ÞL°DÂBOG—L®LLsK~KJJ JLÓn-WÊO‘NùHC¨@E=D7R6q5;6÷4–2q4c38,0BAëLLuMêL«B0“;»* $ m$ Ù# Ã" :( $'ù,>6D;Î<-‚0G/È*¹)â$ .N/÷&=#Ý 4 $N$ Ž 7ÔL¹MëNìNmNvMöMåPONO=NP÷OïOâPjO©MïL§L^M!N–NM©K¼L*= 6£?!GU=<407Ý.Á-DKÎL×M LßMÄMÔM¿O«O;OóPëQ2P-N3PbRNMMÎLÉJžKáN¢RNîONÜO€LýKÌL+MoKïKJrIlIæF¢H)IÚIŒHYGÜG—DéE D\E"EBáB™C5B>@ý@‡?@€A>@V?Æ@‡>’<7<(;;k;s:ë;Ù;¨;¨;f:=:9¨::_:“:::N::¾9þ9}99w8ð8¸7Ç77 7:66Ž65Ü4²4ã4ê4ã4á4é514·40484º5W3Ê3ƒ3ú3|44¿3W2å3Q3Ñ3—432¦3h2)2w1‰1ö1x1÷2}1B21„2½11þ3 3ñ3.3ó3d2ú3ý4ý43¿3E2 1l2$2¡2—2ß1Y1ž2/2õ3œ2¦2¥2o2¤363®32ž1ì0›1.1®10"/µ.À/U-Ë. .J-ž-..q-Q/0¯0"/s0+/t.'-¯-á-ÿ..b.:..ñ-¨-œ,å,G+º+h+ñ+¨+Ó+!*ã*î*´*a+#+f+ *’*L,s+:+?+}+ +Ö,§)ð)’(Ø*¼(ä)Í)N))ý)ù*C*S)É* (ß)(Å(( ('Œ(p'ì(Ä('((H(<(ˆ)**Ç)J*…)ˆ)Ž*S+ +˜+M+Ö+€*H*z)ª*:*+*)N*·*u)Å(˜(P(X))Q)Ú*+*Q)¥)Ž)Õ*U*+(¿*–*o+N-B; ¨Hr<Y9ÿ 8ÿÓ:ÿF(þ&ƒ¯#v9ú(k=üˆj=üÄk=ü”k=üMk<ütl<üzl=ü‚l<üún<ü8m:ût¦£Ø±ü\üiü¾ü$üüòüÔüÎüœü\üAüTüûülüaüÖüTü%üTü| üŒ ü· ü7 üEýÀ,ˆGîGûEûFªFÞD1C„BÏDDE@EÄEEýDCCMD{E‰CsCªClCBB A€B´B€B²Ad@ÞA•D#ChD°DÍE5C÷D&C»E@E#E6F¾E©FôFnFµH+FwG`G©G~HïHjHÿH˜GiH G&G¤HeHH`I¥KJ–JˆJ_IœJJ¢K_KXLXK£K¯JxL4LnKíMÙNbM"N(MšLôLëNËNTM’KJÍKIN JVR5` œM; H€DÙ6î>ÛMêLïLuKÇJÀKFL2JÇIKE+J}H(D.===972ö2œ7i816ª3!3!2-³0êEWN²M!MõKüKå=³1~C)•  } è ˆ  ;$ /'œ-c=ó9H45†+ß, &„  ¼ ¹,§0'S+K!a y#‘*c 2 =ÊMòM|P%QOXN(M˜MÖLæO†MÅLÞNyO¼P[PÜOÓN NL“MÓNONGN^L2L¨>o5`=ËFÉ_ —<Ñ) Á- w1é-IH×LM NIONM«NyNñRXQ^OïOyNÇPlO…NINjMPLÝKáM­OOŸOªOâOM»N8NvLuM$K¶KPHôJêJIjHüHµI–HFFlFYGÿuD$C¡C6C*B³B÷B®A6>Ë>—?x>[>\?—=Þ;­:ì:ó:ó; :p9ê:£:™;:Ú9Œ7”7¥89z9Á99i:D9Ê9Ã9º9q9{8Â8ù8F7Á7À77A6À5Ð5Ù5”65!6d5–5–4¬4è4ë5(5µ6/5°5Å575 4 4M44 4”3Õ3Í3ƒ4L4H3Ø3¢3 2õ2í2¨1¸0Ì2s3[2¡3"3+1F2i2»2Ë2™3œ2Å393÷3ù3:3@2Í2Ÿ1ª21o1ù11f2œ22Œ12y2à2k2ã3ã3Ý2æ2î2r2¦1è1c1ì0â1h120*/¾.‹//l-·.ø/m.…/+.÷/-/é.r.x-¨-.f.i.¥.¯.­-â-¨.!-%.¼-(-&+x*£*œ+3+(+k*î+$*4)ø*„*È)˜*²**9*Š*D+‡+Þ,Î*‹* ++*¿) )€)Œ*1*)À*J)*.)†)ê(ú)û)ý)D)O) )')Õ)*(r';&Ï*?*¶*þ*½*ü++D+B,z+}*“)l)Á)\)c*´*¤+ **L*t)V*A)ˆ(Š(¦(^))¯)Ë(å(™)¦*Y+*Ä*É*/)8*Ù(·)œ+f6 æJ*<`6ÿL6ÿˆ8ÿM'þW(Á«Ûu9ú`k=ük=ü k=üRk=üCj<üôk<üûk=üƒk<üel<üal:û»§RÙ üñü0üÛý@ü“üÑüóüRüàüUü*üSüÒ üŒýŠý#ý ýýÇ"þÐ$ÿ‰#þz2þf=ÿ5?·8üK;FîH)GF£DsCC~C4DßD\FFD{DÈCúCÏBËD#CñBéBóC4CvAÎABòC'B@¢@mB&A¦CjCñD|DÿDƒDõEWEwDrEpE‡E©FcG(G¡G¢GdFãHHåGvHxG:G+G+GêF«FªG-HnH`HæIÐJÍJgIHI¦JnJiJ KiK4I}KL.KœKóM*M6MzLµNQNhN`MáM’KîMLgL·O&RTV9_vl @Ä87¦+[BiLkMáL¶K8IÉJ€IÆIUHGG»>:8Ã7 8y2&2R5.7“6ä5Ô40=/Ð=ËK¹MµNdM|N*LßLR;C1MG¼--$ " g"  $ q& 72ç5~7º6B0¬4Ä/ã*×$T ] Š5‰9 á-2’ ¨ £$/(0 • Ž=áO+MõNoQOrMáMYN1MNXNNO†NM»MþNfM`LÚLéLµLÜMäNÝLšK4@š4Y:?C‹7ò+ J ¹! %0ÜIŠM%M•NzMMMxL¨MwN·P™O~OÉN€L‡NšO?L·PQO‘NŸMæOÙP”QQÆO›OµOuN«M/KkK÷JÁJGÎIðH«HäHdH©G/G4F•F2EëE5D4D2BñA½B>@•A3@2>¸? @è>L>Ì><Ý;ï;à;%;r:«::;+:o:u:â9ó:7”7)7¨8È8^8%9Ë9‚:9x9‹:h:(9h9h8¹8w7¹776&66V6]5^5V8s5¡5æ4¶4/4(4¢5!5)4á4¯4 5!3ƒ373533‘3—3‹42Ô3a3t2ó3¢1Á21µ1Ç1…21ó1þ2Ù31ü2a303½2/2L2A3u3v393<2ý2…3O1)21L1Ò1•0í0_22 2Þ2ä3 2â2·5\3ê2ß2*2´1õ2V2—/è0´06/ä/©/³.ú.?.?.-C.»/:.è.º.`-ÿ-Ý.ç/".¤/+.9.¬.Û/.Ø-Ü-X-(,Ü-(,d+m+†+®+l,7,¶+e*}*j)>*+ü+z*y*+F)Ã)U*]+]+‡+Ž*T*Ü*Ð*ú*¹*°*O)Æ)ë)ð))w(÷)9((\(V)—)×)J(Æ(Ý)Å*q)Æ(Ë**ý+¹+j+3++O,8*Ê+@*Ò*‹*Ë*M**ž++„*®*Ö*Í*Ï+,)Õ(”(Û'ä)")*[)Ÿ(p(Î*J+,R+¹+{*À)b*4*?+,-,9 MKá>A7ÿå7ÿB8þw)ÿ×'o§ w8ùk<üpk<üyk=üXk=ü‹k=üÃk=üÑk=û—l=ü m=ül:û±§»Øÿ®üÔüü¤ü­ý@ü+ ü+üAü,üSüÊüúü÷ü'ÿ¢;þN.ÿÈ+þÖ7@<ÿû?ÿ.<«7ÿÝ=ÿˆ9 ? I ÖG­GvFwEnBðB–CC÷DB¼DŒDÊDLE–DÐD–CBB@qBB6BtC…FÝKóLûL±MoLmK¬J2H<ˆ05Y,@$ Õ$ J! Ÿ  ð#Â.»5å2 5ý.ü-?,")$¡ Š o7 : K'¬) š î(ê)ù ° /;äO'MêM®NiM|KLºN'K¼L7LÓO:N¹M M·L{LLìN˜MXLàM]OXNaMÜKrDW3«8{=d>;”0 º f! =eM™NßMOKUJÖLLýNoO¨P PO6LŠO©OÙP˜QIP‘MÓM$O'OäPNQOO°N„NîL«M9JÊITHüG‰HFÉF HGLFjDéEsEïCŠDDóDèCõD£BñB7B~@¸A¸?Ì?G?”<s<ð;<<:…;";b:·;h;4:v;§;­:¢9¯8X8\87ø87ß89 9J: 9º9ó9à8¥7}7G6Ž66Ž6766W5Þ665Õ55j5*5,4ª424¯5)4v4?3À3Ê343þ3Ž2–3G2”4î2Þ2û2Û2¶2®2¡1ú1G0X0Ä0Ì2p2¯2Þ32Û2œ2Ç3b2ô21 2~22±2222•21Ø2&0'0^0ì0Ù1”3†333Ç3P333§2í3 2u1u2/1¥1¦0<0¬/µ/:.B-ø.@.7. -½.¶-À.x-ƒ.6. .n.á0g/Ø/÷/¦.¡.e/0.^. .$.Ž-Ý-í-%,t,g+æ,+,-+ä*ñ+ö+j+k+l+r+¸+*H+ *y*À+m+,+Å*Ò+”,Ä,,>+#+x*q)ô)þ)À*ö)¹'ÿ)‚(È)„) )I(ú(½(A)‡*M){+¿**+8,:+l+¼*þ*‹+ *p) )ˆ)É*Z*¿*‹*Ý++ +U*-)Þ**Ë+ *ˆ*"(Ö(—( (Ÿ(Ó):(@(©*U+E+±+*Ž+á+¿*´*v+H-¨: ¸Aÿ;Ó0È;ÿ35þg,ÿ'#ªz5ù¾k<ü j<üâk<ü¸j=üÉk<üªk=ü‚k=ûl=ü@m=ü l;ûA¦Ì×ÿvüüÜüêü$ü ü$üqüaü!üCüüÉþºÿ\þÙý3üè3þû1ÿã3A:ÿ¢5ÿ¾5ÿÌ3ÿÕ68ÿ/J HöH·FïG,D CBçBŸCkCíDœD•EE'DçEECâCmB½AÆAÎAÁAÄAAlB+@4@ô>ëA¡AöAcA.BÞD†E‰DŽDÿDDŒDÂF/D«E¹G2G$FzGúGâH"GmG4GêGùF9G.G#GiGoGG¯G¢H›I\I7II%HbGóHìI/I¡KµK|J‡JôJìJ»K;JþM2L´L$KËL•LkLÔMÕNMMÇMILãQKU5Xõk ¨y Y8[0€>OELRL]KK€L¾K«IÅKIÇJIõHñH'EECêC^DÖEŒItIxIùJAKàJJsJÀK:KÿIFR;š+u2Û*j# €! ’ ç ö ²#‚+Z/ˆ2e6Ž0;0Â*3&ÿ"Q Ì K8 A %  G  ©*Í+?$8 Í:KDMªMêN#M@M¸KDM$NÞM™LK–K“LQM²N}MàM}KLyLqL¥KpMúM`J†D$86°>IR¼( |" —% G<L¹NaNÙN LGLLzLoMOµPEPüOnMxOdP1O³QXPNN$NO¦PNÌLeJÜKRLJÌIãHèI¦JºJÃIyHqGLGìG²H%EèE¾CùCÊC”EDBD¼@FBöB?BAÿ?Ç@F@ö@½>h?Ï?@=¯;#;;f; ;< ;›:á:*:j9«:|88Ê8p7[7Õ8Õ8U8›9B8ü8û978ð7•67A6‰6—6W5ß5í55554Ü54á4è5(4w4r4q4ê4«4½4s2’1á2š32X2’2Ì32Ð2ç2¿2¯2g2²2à1ð0U1Q282~3b3¡3X2`2 322p362º2 2Ï3y3ƒ232P2•2W1×1¡1u1Ä22d33Ô3Š43Õ3‘43å3'2p1ò0ð1¸11302/¾.÷.È//r. .ô/z-Á.t.A.±/:/ã/¢/š/®/¹/g/§-ã---d.œ.S-ö.õ.J.-o-î-(,j,d+ë*³+o+ÿ+`*ý*t+;*ü)É)‰)‡*=)Ï**º*~+0+;,«,{+ù+Å+ª+4+ë*i)9)I)“):()0):*>(ù)8*ÿ)>(ú(q(º)´)þ*G+·++´*Z*%))t*)Æ);)Ž)')e)d+z*ƒ+ +*Å+K*ù++ +…*)¼);('¼(Ö) (Ö))(Õ)”*À*|(ï+*M+ë*»+,,4.;; YC?ÿ¿:ÿü9ÿ2<q+ÿˆ)Ī”x6úk<üZj<ü›j<üpj=ûk<û'k<ûïk<û¯l<ühm<û®l:û±§}רü¢übüüØüüãüDüÎü üŒü{ûýÿÿ?ÿfÿÉü.ûP+þ>7ý5P6ÿ¾7ÿÕ5ÿR:ÿ9…HöG²GmG·FãE0CÍBBD1E CÑC‰DŠED$F`D¦BÓAu@~AA€A±AwA«AA0A @¬@³@éA!AëB¿C¼DÖBñCNDæENEHEFDCÎDEEÍE_G F9F5F'DˆE]CÏF¾G}H2G3HxGºG3FGGF»GþHxH‡GüHóIJ¶KñKƒMuL>LbKK;K|LÅLðLúM7MœM›O3O+O,NNËNHNYN\ÝXÊf óv Lƒ ÛL66‹1–>MåKüKŽJÆKˆJŒI„IÎJ±IMIíH{H±H~HƒHtK I±IòHCI±L%IÆJnIöIDH IGJñHsFÅ= .€Pâ+$ : Ì  % ³ ?$Í,ç2y5‰1&1û/¯-º)D#9"!†, 4 »%þ!Ð @!,Å+Æ$ r7aL®MàMàMvM8L€L¬LØMaMÕJëLLMLÂM MýMéM¸L»M4LyKõJúM{KéJîF-<ú8:B~] < ?(* V# 6hM³M6NÉNÁMþMNoMHO¿PáPéO¦MiO:O+OéQ OÙOÚP›P™PoP'QŽQýPFN7M‘KÐJ†JŠJIøLLhK4KjIºHH7GžFéF,EDDEòEãF5E¤EC®C>BvA:@@ÿ??J=â<ä<ë<o<H<§:°9³:e;‘;Ð:Z9÷:69t8 7Í7î96Ù6$8•8Í8Í:68ü988†98´6§6m5Ù5X5Ð6Î65’5"55%4ß4¢5/5i4s3²3F4,4&4ê3í3·393232Ö3F2É3I3_2’2^2Ü22&1Ü1®1‡2n291ƒ2<3Y2ê2i2!1«1ó2w2C2µ1ß11Î1e1›1Û22]2i2`0î2Õ22ž2,2›3¿3 33Š2Ú33£2ê252t1d0o1*0Z/¬.B/;.G.º,Ç-ú.‚/N/C/M.Ã/ò.y/8/Ë/Z/§/i/•0%/]..X/._.š..š--+-¢-f.Y+D+G*Ä+?+°,|+>+ë+«+d+ö+ü+)ú+´+5* *…+®+O+F+:*Ã+©+ó+ì*˜+;*{*º)x)ó)¹*E*)þ*(U(Q)/( (‡(u)•*Ã+++r+5*£*¶),(º)A)‡)J)P)_)Œ**Š*Z*Õ*‚*‹)Ø*)ø*)(Í(¤)_)(("(C(n(¥)O)P*)K* +()Õ*Ê*O+I+“,.)9 ÂJÐ<¹;ÿ•Bÿ39þŸ+þ,-&ª x5ú+k;ü8j<ü k<û;j<ûíj<ûõk<û/k<üšl<üðm<ûçl:úg§¯×ÛüúüÃüüjüÓüÐüëüaü%ü=ü# üþXÿÿtÿòþÊý2ý—/þ:4þÏ3ÿÍ4þÞ4˜6ÿh5ÁIrF¸G1H{FD5CTB[C DœFD D‡DUCWEC¢CšA²?ô@?@?á@@@†@;@º?©>¸?¬Aq?±@h?±C>D:D;B­BÄE?DÅDEþFFEŠDOEÆEÓF=FÿEÉF?F£F(F6EF?GkF¦FóG½G4FôGG;FƒG‹H?GÄH³HýHôJåKxJ+K.JüJãI³JÃJ´K˜MjOdM#LaNqNÔOZOÛPLO N)N–NYVæb3\Èhwk î‡ WF:8Î+$CiMoM¡M!KòKöK¹KöL¥M¥J°K,J´JãIsJçKXJ I†GÕJ;MäJ¡KeL7IÂJ‘IÉJ¹FÀGö8².RCû,   x _ ^ ?%!-ú24Æ0’1”/k,¶(_ ù m %7 Ê2 ¦%µ Ï Ë *0¼*§  q í45JŠMõL¾M´L¾LCNfMáN“NØNMÍM…LÎL€LÁLƒLÃLËL MzM/L9LþJTKhI?”6‰9 ?=DêBŸ-Î% L+bL7NnL¥M+L.KîM¢LyM„NÀOMðMµNqNèPPûOePÜQ_P*O°P>O,NYP MÎL„KƒKÂK>J?HÑIHÿIëGCGÌGG­H¯FÿEGCCÌDzD>DBëC§D2C/BnA€@ò?@? ?=“>Š>K>W<Ý<˜<;L;Z;º;:æ;!:­8½8V8$8´86e7889 99õ9ó:i9¶8Ç7K6‰6Ç6—65˜5Y5"5 5’5*5 4í5,4w3h3~3Þ3ö33º3L2È3ù3y33p3933…3Ž32×2\2"151Ž2q262þ2}1þ2|2ã3*32j21Ä2æ2h2j1ê2u2Æ32 22L2Q2I20ì2\2[2H.Û1[2z2Œ2‰2È33ž3,2.1¤0s/®0n06/½0í/Ç0Ÿ/´/:/¬.ú..>.z..?/i020r0Ù0`0š0c0¦0ž/í/š.ž/‘/.›.’-Þ-Ó-—-[-w-u,,p,A,w+º+~*Â+0*í+k+°*Ž)Ë*Š+3*])¿*¶*ð+»,++ª*í*Û+û,³*ú+²*ú*«*J)¶**¼*=*x)ù)F(R)z(Â))¾)C((Æ)ô*p)è)»)µ(ë'<'S( (³) (»)8**Z*“*B*‹+)“(“)\*8*?*~)X)()))(d'@)’(È(Ç(Ï(V))+±+G+*Ñ++Ô.õ9 sNW;ÿW2ÿ9ÿ7ÿE)þ~)ÿŽŸ •w6úam:ûl;ûžl<û k<ûÏj<ûæk<ül<ü*m<ü m<ü˜k:ûШ]Øÿ¯üãüÚüÚüÃü¤ûü¤ü…ü£ ü² û' üÚþPÿÿ­ÿëþðý×ýB0ÿ°3ÿÅ2ÿâ5ÿT3ÿ~0ÿ»7ÿòLqC§FõGûFëD|DFCBIDgD—BREDLEE"C¨C'B(@1@‚?¶A‘@OA|AsA³A}AdAi@î?à? AåB±C€BA›AÒB¢CïD·D€EGDóDID¿ENE^EEFDEEùF&EûEIDE—FFFEFôFmF?G©FsEôGHmGpGƒGŠIoIýJ JåK1J K}JÆK®LnM¡LoMRNINëOZNÝO•O¾MVMßM¡MãMtYg[ÀY%R& ‹|‘B¼8U.ADdM™KwKL·L7LoL%MeKïJµIûJ,J«J«I¨KªIÆJþK}IÂI¼J5K>HøI´JëGõHwE5Ç-±;»)€ “ È à 2 r%â0k/¥2[3ª0¤/ò++&$ú! ½ å1=1ë%^! ï #3ù,Þ$ ^1¬KvLLMCMLDM©NçN¤ONçNÎMLRLL LJNzN²LHNZN$LäK÷LwLßKÛJ5C¡4ËK wˆÝr»A.ø% & 9JbMçM˜MgM\LßMDNN=PþO4O4MÈMOOùOwO’PÎQvPP\PßQRCQKPÊMØLÄM³LÌLJUH„JtI“IúHCH0G5H0FúEyED’E!CëCÁDBöCâC³CsC®AB@x?Ž>>=_>A=Ú>Ž=<':ö;p;$;k=Ž=V;\;Ù:$8ô8X8%8°8Ë68D8Í9F9¾958º8¶8¼98€7x76H75Ð6 5ß65×5_54Ø542þ2p3/353C4œ3è3;3:3±3B382½2È4?3C3u2ÿ22e2&1î2Þ2 3W32s2l2ã2Ø2X2™3#3S2´2Ý2Ø2Û1Ì2´2t1ó2:1ý1’1Ü2W1à222ð2F1¬1’2 2Z2™2—2•2È2m2~1&0l0ö0C.ø/l/i.n0m/.ê/y.€.s.³.¾.m-ë-ý.è.¢/h/o/‘/f/®-¦-±.i.,,ô,õ-¶.!.'.š-é,M+‘+C*Ð+¶+w+ð+**¼+G+`+¦+5*Í*€+p*þ*Š+½+,<+¾+M,*, +Ý+ë*£*è+s+r+k+£*+©**=(D)Ž*3) *)(~)Ì*(Ê('z)))(¾'þ';&Ç&\&Ó'ú(D(Ž)**ù+°+‚+D+;*‹)Q)"*f*)³)‹*!*)%(d(â'ì(•)d)J)))*C*_*Ö,)*”+*$+/.Ø7 I=<ã=‹=<<<‘<Ø=:;Ý;™;d:&9û8]7”8>8#6¦7”8Ì99¹8†9N9w9ò9@8†7„6Ì6È6Ž65à5¢5Y554c4 4`3h2¸3444o3ê3è3â4$3Â4;2Ò3x2Á3P43Ž33=22Ü32m1ñ1é2¯2¿2°262²1ë1Ù2Ø2a2d22°2*2c3"2â2°1¼1Ë2|2Œ2•2Ê2ú2Ï3Ä3}2L2•2C32ù2€3@3332g2$0¬0,/.ü.ú.¶.h-¾-‡.|/-Å0:-º-º-p-à,Ž-ü.0.â.¬.j.,.¬.¶.k-¥-Y-!---8,÷-(,â-Ÿ,o,ç+ª*í,u+G+,,T,n,÷,´+k+9,,z+1+ÿ+5,®,µ,u+÷++¼,´*­*î+3*±*k*-)Ã)„)‡(Ï)Å)Ì)E))ÿ)L) )N+¹*D(÷'‘(½)©)ý*4)«(A' (V)W)(É)²))Š*ƒ*ú*Ê)”**S)Ó*+F*Ë+*‚)Œ(Á)¼)ÿ)Æ)+‡)Ý*Ž*†*Ã,*È)W*ñ**<**§,d.s5 NL™>ÿ6ÿp9ÿ9ÿ*þ-à© d‚.û°{0üñn9ü9k;üúk<üÑl;üyl;ü m;ûnm;üYl;ûçj9ú&¨JØÿk üá üËüüìü#übü“ü“üX ü" üaüºý%ÿÿ?ÿžþçý¿üüüM9ÿH:þ|6ÿó4þ8ÿ`0ÿó3ÿ&FØB’GJFDF\EÞC·BûCèDcCØD…EÂFREC³CcCfBuA€@PAJAB|A„A„A@À@{?ý?¢A.?i@v@¡AAºBDDCICþCúD EDEqD@DÈEûDÎBÀDKB™DHCšDQEEÕDDˆFÇF•FG¥FÄFÍGDENFCF¯FGFÀGkGêH¢H[H)G²IrJ.KoK²L®M'L=M¦OnLqN]ON~OÓO[L;MaMoL÷NcMUôJrKËj`©´]<@w5Í2FMIN!MvL¯KôLYJ.KoK'KKWKPKÙK×LYLJnIöK*HòJkHJæJjIàJ­EVFD2æ02a$ H ‚ l  ¬(T/2Ö5´32U/(×)'Â&$%¡,O+’# t B î$ .Ý1±%³ Ã&ÇEhKwKõJ†MjM¡N]N(MbM¡K¤LËNˆMŸKŠLzNmK!KˆN=MäL`KvMzMæLšKq@A9¾V STLe3G*ó)AMAOÃPNzMNBO:PêPkP*Q4OmOÉS8PqP2QOqON‹O„NÛPÄQÍQ´N PfM3JK´KsGÓJJ?H÷I(HîG2G³I.G?EkE4E C®CmCtA°A6A A²A¶B%?…?ÿ??ˆ>Ï=—=Ÿ>Š>¹=Œ;Ø;ç<‘;×;c;Ÿ;š:+9¬9,98„98!7Œ7Ì8û9E9ÿ9m9÷8Ž9-8s8y7}77@76f6“65˜54¬4u4·4®4.4/4õ4­4!4§4%4°4)6 3Â3y4(403ø3½34=3„32ý22,2f2`3é2³252$2#2°2j2ˆ2[2„332²2<2r312´2á3k21%1K1K1×2V2¸2‡2Ñ2Â22S2Â33J2‰3Z3!2T1˜0h0r/|/Æ/t. / .©/¸.ò.-|-»-,À-n-?,F,´-r.4.¶.~,…-·.a-™,Þ-1-@-,î-w-è-"- -¦,¯+©+ö+x,o,ò-0,²+ü,u+î,),0,m,6,õ+ì+»,-+¿+Å+¹+ù,«,4,2*¨*³+?***3*y* )ý*z*q*ö(À*·)þ*B) )ø)Ä(’)Û* )´&H(5)7)("'°):)x(Ì)*)Ò)“)x)¸+*×*U***#+**’) )Q)×)–(K)J(ï)ž)Ú*Ø*Ã++Š)P+K*•*¦'º)+'*ï,h5 EK'?À4ÿ%7ÿ6ÿ*þ¶7°ƒüo~ý„t$ý†n'ýo'ýo'ýKn'ýŒm'ýªn'ýYm(üGk&ü¨“ ÿ\±þµ üâ üÛ ü]ü¢üÁüªü}ü3üË ücüËü[ý¬ÿÿ?ÿÿ(þ¨ý@ü-ÿä8þµ>þ¶>ÿ\>ÿ–7ñ2ÿ·FBB¦G«FjFEC9CC®CÐDCFCŠDDàD.B^B3A®B·Ax@½AÀA;A{@ÿAG@²@@ @±A¥?(?àA©A–@ãB3C»B»C°D‚A²CC4C­E|DHED CREŒAXBœD™DCžF EÞEEFEŠD EmEÙF¾F8E}D>D–FIFñG7F–H6G÷GjG„I5I9JúJ‹JKqL.LmKåL-M+MLµLrMåN/N[McMrNåNØL†SIJ*H˜r¦ ¢\‚Ao3#9 M&M\L?LªJªJiKiJ¨KÙLJìK0J+JóJ=H==N>‘<Â=ó=‚<]=<L;:Y9Ù8|8D8û9&98 8K89ð9s9>8ª9w9+928ê767 6\5Ú5£6H6 4ä5›5Ì4Û4!4-4v4l4£4Û4i4`4 3æ4C3Â3:3²33{3Ê33€3{3C3P32§1æ1Ø1®2½2%2³2Ù2Þ2¢2¡22—3 1ð2'2o2°1K11ô1±111€21Î2 2À2y2F1×3K3;3ƒ2Ò2‰2–1Y0à1ä1!/3/í.ò.í0)04.»/.9.l,†,ò,A,‡,+ë+², ./.d.$-¬+´+Å,b,ò,Û+ä,t,£,x,è-Å-ô-a.'-æ,ö,t-¦-&,ö-w-f+õ,s+¾++½+8+…+±+÷+*+=+:+<+s,9,ô,3,",'+/*®*©* *¼+3*˜*0*|)6(Â**€)»(ƒ(~)»)·+/-•( (P&'û).(©'º'¶'ø) (Œ(Ž)S))!)*d+7*H*•)Ë++‡+L* )š)Ñ)R)Š)¸*E* *N**Ê*Ò)‘)Û)Ï)Ì)v(Æ)L'˜)+)þ-Ô7 NÌ>ÿÎ4ÿ½8ÿ581þ¿H›¹AÞÿ'ßÿSÞÿ-Þÿäáÿ¡àÿÙÝÿªÝÿiÞÿaßÿ§âÿTãÿÃåÿ ür üê üü£ü#üÓüÇü,üüüÊüZ üRýìÿÿ?ÿVÿªþ˜üûv6ÿZ6ÿ®8ÿÝ=þï<þ'9ÿ\:ÿ3GoB~E¼E>DäEcEÛCvAµB‹B˜DÍCËC©D®C5AB£A@C@&AlBrB7@ª?¾@<>Ã@³@¬AëA¸A$AMA²A©A­CrCqBžD`BRCC|B¤BéCùDPD‡CA¾D’BÖCÔEUFDzE‡D‡EDEEÏDÊEEÆEEÇEºCÍDŽF‡FõE÷F$F°F¹F*GsH?IJI\IIÖJîMYKãKoKôMVNnLèMƒM4M¸MiL¼NˆLÎL›LwN&PfDóL1„욎XZ@œ0>ÊMâL¤KtJKjJ©JfIšJfJ`JßJ¡KêL)LÝJ(IqKìLŸIèHHàIhGdGœ@à/7•1Ï * F B ó V ½)/â1_8 3Ã3ô0%+(à'–&z% ?1,ø%8  ±#Ÿ2Ò-`%÷ J œ;%K?J½J K-JðKmKlMÛLmLKïL›KÂMwM~N·MÅLqM¡NžL,KØMOQ>MTIö8hAÂFrIŽF<+,å'ë7æLvMM+MbN‰LNuNsO`PaP!OgN3NŽORP!QcQÖO£P˜OPFQQIOOOƒM|L=JIKÊKKFJéJ7G2FaF¦EÛE§G#E°E;BÅEYC¡CžBšB”B«@íB¨@±?ó?ôA?ˆ?>= =z<Ö=‹=M=N=<Ì<Ò;Â;‘:”;H;H9á8ù8:9–9Ï8ÿ8º8s7Ñ928}9192908·8y76J765Ø55`5Ò5J4S4A4(4a4÷4(3r3³3¢3ð313²3â3p324(3²3°3ï2Ú332‰3 2R2'22¨1ç102/1ž2s2ã1í2£2 32Ï2º1ð2g2h2á2ù2<1ò211‹1‡22¹22¼2E1–121‡1Ç0Í0|/â0f0d0â.Á.´/ð0q02/q/t/.{-“- -w.u-<, +Ö+ô*”,|-¿-m,±,ø,²,¬,¬030å,õ,ä,ô,e-'-í-Ü,w-™- -©+¤+?,?,r-5,D*Æ+ø,=,³+´*´*Ï*ò+ö,1+þ+ø++ÿ+Õ,?,*+ë,2+j+j+2+**ÿ*ë*ô*ú)r(G*Ÿ*‘* *w'Ö'†(})1(C'((«)º(O'D&ÿ' 'o'(3(„(Œ)) (£)* )Ã+ *×)×*)Q)€((A)=) )Œ)´)À*ù)É)Ø)Q)œ)š(7(¦(Ð)–)'h'¾)(å*‡-Õ7 If=ÿÖ5ÿý4ÿµ<Ñ.þ7O†» Þÿ¥ßÿ”ÞÿŸàÿ-áÿ áÿ'ßÿØßÿšàÿZàÿãÿ%äÿ”æÿ[ü´üY üÓ üq üÁ ü]üÍü¢ ü#üü¬ üý<ÿÿVÿ˜þZýú ûÄ3þì4ÿô2ÿŽ2ÿr:,7ÿY8²EFDDËD†D*C±Ct@dA:C”D[D§C¯D D"C¯BÝC+@p?0?)? @Ž@Ì?W??Í?x>Í??¸?»??þ@ò@vAÃB AB‚AÎA‡ACGBª@ÂB BkCKC@SCÁBB[C E E?DCÀC“CDQDCÛEC&CD_CÎDÖEŠFDF•EøF‚EMFzHGºJ JŽKJîJ½JGKëL#M]LgKçK~N N+MzL²M³L¦M/L•LaNgNbH8C•Yü–Ý”nLO=3GM«L/JK|J;IüJªIéJkJnJôJuJiHK-JêJ©JuHüIHñG«Dñ<_-V0â-l ¡ Æ Ò  x! ”-¢-·0X9'340À/+*w(Å*% %:-Á,¹$w ù " ³5 ©.Q&` 9 æ,I@JùIÇK6IçK$JªIëKYLLRMµNfNfN®PN“PÖNMÚL§L–LWLNOL“KÞ7_:iC%f)<úA±0q*—0ÕKóMÄN×O7OµLÉLºNéPšPNÞOMöMOOÝP#OlOŠNNNúO PIQºPMDLGLzKÉJJ~IÇI½HóFªGfH6HœHäFFlEæDÝD CdC,DA(BàB¯A|AÛ@¶@µAdAq>Ù>‚=ý=?;?*=}=F<Þ<•<;Ò<O:L: :9\8é8p9@9ÿ8‚7Ã7„7 7ø9(838 8z808>6þ6J6y5É55™5Ñ5R5P54Ò3ç4œ4+443´3%3é3¹3ò3:3è33(3ã40393J2‹3Q2/2T2[2 221i0ÿ1¢1½2£2 2ß2b2ä2¼2w2X2282p32ê2r2g1ÿ2è2E12u1Ç2K1z22M1Õ1V1Ì1‘3y0Œ0È1O/Ú/l.B-t.S.¬.º.M/ã/9-H-H+š*ß-p+Ò--z,ú,i*Ì+¿,q+¸+u,o,ñ-l.q-ê-î-v--+-h,c-i,~,(-”,í,m+¤+„,=,®,t,x,G,°+w+ö+ * *º+i+³+ó+Ä++º*ö++M+4*z+Æ*{)*†*+=*½*¹*µ)*…)y*€+i*¾(X'Õ(ù(~()(Š(‚(°(Â(;'Ê'A&'O''a((X('['Ð( )^)Ø*k(¬(.(\)ÿ(û(@(Ú) )‰(P*9*=)*‰)Ô)û)¯)¦))œ)f)&Ú(Ï*-)D*­-•1M?ÿ4ÿà6ÿ³=ÿg/ÿ´WǺ gÞÿßÿàÿdàÿUáÿ˜âÿàÿáÿYàÿØáÿßâÿÝäÿTåÿüäü üJ üj ü3üÜ üüÍücü üF ü¦ýJÿÿ?ÿÿ8ý†ýÔ ü/þ…4ÿ9ÿ8ÿÙ:ÿ°5ÿ¸8BðFEFEsE¨E[DrD D˜DºDÅD\DÜDãC˜BÔAàA·@b?/>é?&AACAU@¿@†?}@ð?t@3@l?¯@ª@"AbCaB¬A¾D…B4AACCìD«BÁCÀDBõBüC BÆA—CME=DÀCÈDPEPEÇDDCQD"DID[DÍC“EE>DwEFG³FtEBDCG#GôH|HŠH‰HHŽIéJáK)JýL%KõMTNMMlL·L¨L¡L®KÝMMeM$NPNrGÛGÿcœˆ’FÂ:è5BJ¸MYLdKëJóI+J¯KJLL.LaJrGÿJjJzJ£K×JiJ\IòIÙG)C[8.¸0 )| ² • ‚  D! ä.«-02Ø9¨4c30ª)ñ'&Í&A! ƒ'í,É Ø·:K'ª, ) 6 ™&GJL4KLuI³KJKKKÌLK§MÆO©MôMDN*M(M™NÕNeN\M[JïK©P N Kh;Õ5º@@F¾MOEƒ2&)µ(·EwJÍJÑM¼KMJrKBK‚N7N"N£O$NvMÌP P°OÂO4NM]MOPIOôM÷M·N2JÍK H÷HI8G¼G4F1GòG›HÜFŸF%EØEßCèD_C^C$A'CÎBØBaAfCâB(@4@æ@(?z>ñ@5>2>s?´=G<È;à<Õ;T:ˆ:Ì;F:P:V9œ9b9a9ƒ9H7Ë8l6ˆ7F7¸7z87ù7ù7Ç7E7x6 5Ã5Á54Œ5 5_555”543Û3ß4 3ã4%3r3+4h3X3:3±3z2K2Ì2~2L1â2[1Ó1Ú1e1¾1)1(081?1¨21s2'2ä2¬252g2˜2K22;2k2-1|1ñ1»1À2p29271H1Ž1O1½10Ç0ƒ11’21"01`1Õ0×//ç/å.£/j/|.Â.ö.B-…-,+Œ*Ë+É,J->,¿*Æ,M,¾+ò+k+¹,³-®-¹,è-d-u,²,õ-p-$,%-.-Z,à-)-.,+±+ö+­+t*Á+ + *û)ò*+!+c+9*?*:*Á)»* )ˆ+w+&+G+v+&*µ*õ+<*ë*ö*¸+5*-*w*µ*ˆ+ *y*{)p)ÿ)Z)û)ó)Œ'Í&Ò'ß(2(A'' &Ó&L%Ÿ' (_'‹'K'¤('˜(Ü(Ò'Î()A)È*Ï)'Š(™)=(Ë)‘*(Ä)×*B)Ò)E*¼)(Q'î(Æ*(¥&½) )º)Í-l3 ÓLa>ÿÏ7ÿA8ÿÎ9ÿ€+ÿí5q ÜÿåÞÿßÿàÿ™áÿHáÿ×ßÿØàÿ‘áÿÐâÿ–âÿ”äÿMåÿü¢üÍüQü“üe ü2üÔüü´üè üm ü ýdÿÿÿØþ¨þI ü34þ`9þ4ÿ9þ:>þ57ÿB4ÿÆEG F3EmCJDEDhC2DeC&BïC4B°C¨B{AïA¸Aq@-?·?„?@}@8?.@Š@>“?>N>Ï>Í>¶?u@ @»AC@ÃBAB¾BÇBûC{BB„BÇC9AABA—BBA—A2DBDYC”AgB“CBFCPBcBšB“BtB'CXEˆC—C D EADÎDÓE DÖDÕEÞG¾G—G H¼HVGÿH±I¾KêJ÷KåKðK8LM)L>M¿M=LÝKpMœNVNÊONËN²FNHÕd ”¤6utC›:H=bL¨MeJþJöI}J§J!I8JöJøK°I9IkJ0J©JoJ«I4EEFëGàFD5¾7Ý4½(] ±  ™ ì /%”/g/ 5#;3¢6è540 *(+š%ÿ# S \+#¦ üã -/[&‰ ® Œ# LApKkL7K¤JrJVLNKÔMHM LCNO2O°PO«POÌO‚M–PL¦NLKNÊMÁO>5‡J íM®LLBz4è+ )Ö@KÅJ?N¾K{KýL{JMÆ?°?µ?*>ê?í?ô=8<Î<‹;Î<F;9á9: :À;9®8´939Š8ø7À7z7 76Ô7z7{7­8s87Ç6û5Ó5R5ø4Ü4^3e3l3ã44Ñ3ç3Ñ3 3æ3Ö3Ò3-3n3 3˜4X2ù2ú392Â2K2S1Û2”31Ú32!2€1á1á1j1*1¯0ç1ê1…1®1¿1P1h1£1L1‚1Å1ì1¼1(1@1º1ý1Æ1ô1Ž11Â1I2>20–10—0ß0o/¢0c0e/Ø.N-ë.Ý.’,ê-¿.I.„. -Š+Ó,‘*ç*Û*â-2,©+º+Ã+¾,+ñ,r,,7,-,¥,c,©,D+ë-y-x-©,è-Z.ž.£,«,Ÿ,*è,í+°+*¹*¶+u+e+z+0*‹+ò*â*0+<*Î*ú*œ*‚*Î*¬*Æ+e)õ*„*µ*)ÿ*½*¹*€))Å*H*„)ó+º*Á)ÿ(Æ)u)º(þ((A(('ù(}'''R''ü((­'˜' 'P('‘) )(Í'Ñ(Î(g(­)I'd'/(q(¦'Ü+ÿ+Ä*œ*)H))‹)@)‚)ø(À(Ù+S)]&ß)*(†*,Å5 ]Na?ÿ|6ÿ5;ÿÖ9ÿM*ÿx1ÿgvÞÿRÞÿßÿàÿ#áÿáÿßÿÚàÿ™áÿgâÿfãÿUäÿÓäÿÔüÚüÚüÀü+üe ü¥ ü¾üT ü2 ü3 ü+ üìýÿÿÖÿúþ ýwü'*þ™8ÿ 9ÿ¾2ÿU9ÿÒ6þ60ÿrEF*EHF"EÜ?\>¥?‰?ù?w>¸?H@‰ABfC AÑAUA‰@1BˆBþBnBêAºAÅBIBBIA“AÔBCA”CÒC%AÃC C–AÜ@®B£B*AúAcC£C—CDIDÒECE‚EJE=EŠF FÀI†HGøHµI?I}IóJ~K9L¤KçLK¸M¢NÙMÿOeMØMyLuMeNSNÑN‰OOªFäLw ¦¡ ›]?Ú8ÏGÄMcMmK¸J­JñJ?K_IïK£KwJÂJ»JtIÌHÀGGÄEúDVFsDü>40z6 )­! › 15 ñ ; Â(’/4/Y4/;d6í4÷1†0·*,'4! û F'{  o  4$ø*)œ  _ 3JuK1JéJäJ®KŠK J’JYLÂL×MýMkOñN;OkPNËMßN$LQLÙL‰N¾KNKAE7‚G NhIZRå5˜+ *I5ÕLòJoL=LrMµMKNwO'NàOcOýNªM¸NeP#NmO$O”P_NÛODMLpKºJ·H¹G…IHHKGÀFýFÃGjGŸF¢G^F(DOCìC¯AæBnCåC CÚCžB7B¤BlAx@¦?÷?€?¾?°?z?±?g=ˆ<= =D<;Ð;W:Ô;D;::T:9k9B87Ê7€6Ä5Ó5™5Õ67:6Ë7A7J6„6‹6 6 4Ü3å2C2¿3¥3Û44¥3²3¹2Á2ú3)23B33u2õ2„2Â2K2O2 2V2 241b2f1«1î2\2,1­2l3i2q212/2!2222'1é0“1 1Ð1¼1µ1J2}1«110Ô1ü2C21”221˜1“0l0{.ú/y/Õ0a0b/).¤-Y-¢-;-M-Q0Ë-¤,ž*µ*í*'*,+Ø,Á,Ò-:,+†+?+µ,î,Å,†,Ì,ô,B,@-/,î-ð-«,¢,¬,b-!,%,d,“+÷+/*u+¿*¨)ö*s*·+-+Œ+|*û*¿*²++9*¸*8*G*)Å*u*1*ö)ù)ñ)*|+v+÷*t*ý*¶*=)¼)þ*Ì*E*~*?)¼(Í*q*))’(Ö)C(²(h'*&Ó'ý(*(†''Î'+'•&ú'Ç(ç(Õ(R(ï'&Ä(ü)K)A(ã()(o*+§,K*Ì*U)Ÿ)Û)¹)* )‚(ì)2)])ˆ(W)<()Ô,¼4 ÐJ˜?t6ÿC9ÿ«3ÿþ/þœ1þ×yÜÿUÝÿdÞÿ%ßÿáÿ™àÿßÿáÿàÿ—áÿçãÿ–äÿœæÿ üQ ü|ü8üó üt ük üÉüÃü} ü« üA üýÿÿVÿ(þ\ýýú-þÉ/ýo4þu5ÿ¢:ÿŒ:ÿ­:‚C1GƒE}E}E8DD§AGA¨AÜB’BlC®B@ŒA®@‡@ ?@>À=ë?¨?@A>_>†??W@I?A>Á?5=B@´?D@|C=@ýB˜B A¸BDCÅCãCrAðA0CkDrC¾B—B C4B¾CÅBËDCõAôBBÏBÿAÒDPDÐDÅCÓCËC‚D©BÃDÍE¾F-EiF-EBFŒFGGFùFûHtH+I.KèMeJîJcLdLæKíNMlNeLåMkMåLßL£L#NPMçO¼O»PwFÒTù‹ «“TI>9:‘J÷K·K÷LwKaKœK®KoJùKUL]K"KâJ«IþItIèHíHuE¼E<:J:83*)Ú! ,Ó ð J ¤ #'Û13&A¯LüDL@„6«1ë-õ,›)K m ‡#è ˆ # o Œ&Õ& Çg Û%äCïKI}KÛJõI¼GÿHCGFNG;FôG-FeFaF¢EtCBêC(C—B(AiB\A­C)B1A«@ßA@ç?ù@e?-?e?ñ>¥>¸=ù;Ø==<=";»;L;;I=É:N9M9™8ë9“8€8ÿ7ú7T6‡6x6”6È7q7z8<818;8"7 6û6·64ß4”4É4“554R4Ö5–554'4d4š4ª3²483«3ó3r3>3 2Ó2Ê38222\2‘3Ð3I2Ê3H3_3Ô32ã2<2n2w2g22 291Æ2>2;2Y10x101|0Ì11Ë1Œ0Å1 1ÿ1<11T1Š1R0Ï1Ó0Ñ0ß/e.!/Ž-$-0-t-õ--=-[+¤+×+•+,A,ƒ,»+Ò,²,ô-²-C.¶-7-«-¹-u.2.9.».z.o-Ö,æ- ++y+++u+ì+ü+ø*ö*q*À**Ï**ð*¹*°*A*‰*ô+s*Á*ÿ)V)†)D(»):)7)y(9)T*G*—*Œ)Ù* )õ*ü)Å)ø*‡)Z)º*e)ú)Ç)–)þ)Ã)7) (Ê(£'O' '€&ù'0'I(“(–)((x'ÿ(Ø(Ý(D'?())“(('Ò(ˆ'å(Ñ()m+P*2**)(›'à((‡*V)'ë''õ'å'(‘+t,´4 LLê;4ÿí<ÿp5ÿý(þ¶/ÿ®w‡ÛÿœÝÿ›Ýÿ]ßÿ”áÿßÿÞÿÓàÿYáÿHáÿ×ãÿÖãÿÕåÿËü³ü¹ü üüùü£üì ü›üÜ üê ü¬ üýÉÿÿþoþqþ0 üm*þh6ÿØ1ÿÝ6ÿ+<A9ÿD7ÿ>zF*E Eó>Á@»@@><o=’@M@@=Ó>M<P;Ô>L?Œ@“@‚@¦B2@“@ëA×A¿A«B¤AƒAs@‚ASA#B¢@ @|BRBBÌCCÀD:BAMAÎADDMAbA™B©BÖBùBBâBfDD{D{DEFFËGøF»G}G‚H9I:JºJ¿J@JäL¡K©K¤L?LêLÀLñMœMÙL_LáK¦LÖMšLYN“OCN.G±d  “j”Aã<Ç@–M)K;L(KrJ%J;LJîKÓK©JâIøIûIëHvHwI§G“EòA2¼?u/ # › h R t ^ e  †*0>aw‹ƒ^l­i><R6*0»09-&¼ À# ý ÜÏ:I ¨$Ü Q‘ ! ‘6ÄLÙKÞK$KÜLLÏJÙKÔNsNÞK¡MkN5KÅKzL>NµN?NwN£MMãL·MŸNwN¡O¨PO ON½L¨MLÙKñIG—GGF‹EDûCDGnF`FæG[FëEsC÷E'DŸBrBtA¯AúC_AéA¹B(AêAf@?¬@/?ð>þ?8@>·=t=Â<Œ<N;È<M; ;I;8Ò9–9-8r8‚7Ç77Ã5Þ5Y4Ñ5W65Ä66´7¿7ø7â7p6©5Á5»4„4Á3Ô4R3Ô4R3¤3æ4[5š3n3p4"3Z3Ú2û3ñ30323d2ø2¹2V32@0©2\2U1Ý1Ü2C2Û332a22Y2n1÷1þ1v0á1}0Ö10Ÿ110 0 0M00‡0O0Z0S0J0b0J/ž/ç0^10Ü2H1P0C.ç. ,õ.£-+û-¶-¸-9,ö,H,Š,Å,´,:,³.A,ü,K,¶,Á-ü-4.6.u.….´-¹-º-­.õ-í.£.¥.#-Ü+ó+Ä+ú+Ë+ù,q+ø-<,0*ÿ+;***ø+6*„)Ò*ô+*¼*)Ÿ)ƒ)4){)J)Ä))Ã)ö+*J*Ñ+)Æ)y))þ)ì):):)º*=*‚*Ã*M))(`(Ö(V(L'”&%3&"%]%È''š'Ñ))(™(ö'(É()J((À)z)O(_'ð'™'°(á& )g+@*_*!))Æ)Î)))æ*Ä(å'D'@(}(æ%²(ø)½,24 ÄKà;9ÿ48ÿä:þž&þŒ0Ô}èÜÿÝÿÝÿßÿàÿÒßÿ›Þÿœàÿ™áÿáÿPâÿQãÿåÿ“üÌü™ü‹ü,üøü›üž üã ülü” üÕ üÔ üPÿWþþ þb ý (ýe;ÿœ7R6ÿa5þ9ÿQ5ÿ‰?HE¯EYEêEiE[CìCbAsAõ@—BeB|A@T>U?×@E?@®?;>=Õ=!<p> ?Î?>=I<–=—>C=È?‘>?ù?²@@ÑA…BzA­A9A©AòA†AÐ@šAÛ@@öA8A˜A”BÀC—CÈC´CTBWA˜@qA˜@æBd@ÚBRBB–AÑA¢BÖDNDCTDDÈDØEPDýE@FÔHHùI»JJþKsKLàLiK~KòLµN+MaMjLèK/KoKßK£LdMWP8OUM»P$n ›‰ ¢N#>Ó9³HÀK7JòJ¼I®I±IJãKòKqJ JnK¡H3H·HmHVEæB7æ-W0”(> Ö êì ´ ¢ P$ )š2eD›å®˜kžÄB1Á-Œ*2%è  » 7 õû=C´ … œ §Ÿ ­(hB}GLH,JÜK!JÙJäLMˆNøN´O)NçKÂN–ORMÑNLLÆOL›MKJIâ?>ó7áudAJ \7Ö*¤& -6[JîM`MåK§M”OaO¥MµN\M6M•LïLíOXO%N“NšON×O4K¸KnM_MTKÒJ>I¸HF×F&G HŠF‘EMG?F6F¥F­FlE“CàDjC3BõC*C"C;BáAýC9AnA?Û@@Þ?v?b=¹>p>&>¢>1=Æ?/>B<<;ñ; 9T8ê8î8k7•88O7ó7T5X66Ž6G5M5ƒ67°7³7ì6{5Ã5—4L3œ33T2_2o3Z3r3b3Ë4333d3³3.3o344Y3´3ô332¿2Æ2Í3s2‚2F2N2‹2»2¹21Ú1Ù1ç1n2&1ß2÷2«22h21•1ž0Õ0™0×0W/Ð/Ÿ00 0Ž2€100Œ/“000Q/o.¾/[00G/«/Ù.)-Ö..s-£,Ú-?,ñ-?+Ä+›+T,, ,,‚,û,,9,µ,û-z,Ø-+-s-­,ó-",{,î-'--è.,.a-f-+Š,0+,;,²-³-¦,v,5+¼*o++þ+m*‰+ +Ä+þ+:)û)Ì)„(~(\)Ž(‡(Ê**?)Ò)&)Â))>))þ)E);){*3*)ô**Œ*“* )¬-)×'•'$'y'ý&Ä'&Ó&f'Î(((V'l'£&ë(f)E)»(Á(@( (!((O(Î)7)L)Î* *€*=)“(É)Á)Õ)£)”)* )/)4($'|)'ý(ð'H(À-.5 JÐ<ÿþ;Ã8þ?4ÿ/ÿ/ü…bÝÿÞÿÞÿßÿ”àÿ‘ÞÿÞÿßÿÒáÿ^áÿäÿNäÿÍåÿKüü©ü#üÛüüÛüì ü³ ü2 ül ü üüßÿ®ÿÿéþ#þ³ý[$ý12ÿ}1ÿö7þƒ8C97ÿÂ:B¥D_FèF&E×E—BõB6B«AÄD!CgBãBgAè@AaAn@ž@¦?.?î=Ê>€>º<Â>‡>‰?@@h<ø@8AsAAA¿C°BÞBèAûBòAÅBIAZBÐAAAMB®D:B€CDC½BCxCC B[BßB¥BÍAABCKC BšB—CÑDºDÂE©DÿEBEŠEFF½GGZH4J²JðJ:IÄI|K=KöK©LtL¿MqM1M"M)L;L¨McLÚLáLªMVO—OQM MJt ¬xnB+<í>)LñLœKáK`JéJ°KqK¨J|JõJèJñICI:G¬Do@9w+—(Œ$ —"  Á ’n É 9 ß# ‹-W0[As•¬l†(¡¢E/1é2É.‚*¿  Ä Ä    À ü: È㜠Û1‰C²G¹JeKïL$LæK±NLL>L KÌKÔLåLðK~JöK­KÈI`KKK J‰I­:ý>C6Ôr™FÝ?#A)˜# P.ÉKÒL`N’JûMçMšL¡LîMtL£MúLïM³N§MáLdLÛN¸O N€O›NêNQNžLmINIûIíJŸI;GÒH½HuH2FØEÚFGœGUFÄE DÐA½CtB B‹CZD’A™BCB¢AAU@[@ž@>á>ë=ñ>ª?!?§>7?=,<x<J:‰9¥8ã7ó8*788G76«6Ó6%5ž5]5"565§76ò6…6³5…4T42Þ2Ù2¯22t3+3®4Š4\4%3D3µ3¥3Ü3ê4œ3¬3u3¤3C3=2?23G2ÿ2L2Ž2·2²21Þ21¥1×1&2e332ã3¯1«1ç11Å1T11—0Ô0Q00U0Ä0ø/Õ0E/Ô0T00“0&./¡0X0?1[00‘0/Ù0/ .m-ñ+’+¿+D+ ,,U+–*Ì+À,5,Â-{,Æ+Â+±,9-"-4-¥-j,µ,½,·,/,ý-y,§,ç,¢,ù+Æ+¼*û)Ý*+¯+s+E*ø*ó*ÿ)Ã**ó+ë+ +ú+|+ú+³*|)Æ)Ä))¹):)<)r*=*)T)X))P)<)D)B)¾)*‰)·)*K*Ë*)¤*æ*—)Š&ý'¯'ð'œ&Ò&-&Z'Õ(q)@)µ)º(ˆ'Ÿ'Ó(<('†)(Ž(™(“(Ë)S(‰(ø()‡)Í)D(¤(%(Í(Œ)®(ì(œ(Ÿ(Œ'*(Q&¹&'ô';'0)ý'),*4 ïLI<‰=ÿ<ÿ%4ÿ,þ®+,’ ÷Üÿ–ÞÿÝÿÕßÿßÿÒÜÿÛÝÿßÿ›àÿÑáÿJãÿÎäÿÌäÿ“üª ü= üüyüºüì üj üë üý ü¤üìü›üGÿ6ÿÿ þáýïý¿"þ»1ÿ6þî5þe8ÿ~5ÿ£:ÿj@ŽCÕB°E‰F8EVDÕCÊBBÜBãBWBåB AÚBv@¹@}?ì@d?{>l?÷>:=É=Á?ï>Ë>y===ø@³>/@ö@zBÄATAþC"C;DtD>CzAÆB†B@L?óAp?ë@£BlBœAîAÿBòB²C>CrB BŽB[B’BÀCICûCXBUB?BøDzDID„F0DÊFF·FóFDFHGHôJuIÀK(KvJ$IÁK>LÜL*LòMáL2KK»KíLXM†KÑM_L—M"O MÎRWHùS … Z@n9‡HL–KžK*K(JáJqKdK`K§J~J0IbHbFQ@ü>u-*¾'˜ Ë Û Ì : ü ¿ „&Ð, 0<öw€„€eÿh [=§3Ž3.Ã'x#œ ’ Ž % e ÆŸ?Únš [! ê:óEèIwI:KêK²I®JJJˆL=LCM M5LñJ÷GéIIIeJ`JÒK‰KJJ:Ã8˜;¡\+F%1¹< 7 Ã) ¶3rJ-KáMÞKoL¢L$LÝMVMZM3KÿK¶M;MiM)M&MMQON¼N¹MpL'KmK\J5JöH3G¸F—EËFG,HGZFG×GG]E×FDŸDgC•B"C,C[CHBhBAâBb?g>p@i@ž?Î?_>®?>á>é@?ž>æ=ê<B;Ê;{9€8×98s8`88 7G7‡77Z6Ë5Ü6Ç706H6±7w7m7h726¹5ú4^4S43Ý443ì4œ5`5Q4Ù54R4Ò4!4s4]3ä3Ý3´3÷443y2ì2„2Å3C23-3¹3@2„2›2B2_2f2š2b3#3n2ð2ª22 2D110–1/¥0Ö00Ž1F0ü10Â0Õ/›/ª0˜0à0]0í0Ì0/U.á-£-ã/.ã.¡-»,J*Ô+C,|+Œ,?+×-¨--,O++ù,z-,-à-5-5,ý,m./3 ¾,A,G,j,¨,ª+û+z+9+p*ÿ)Ö**G*þ+´*}+º*‚)Ï*¯*„*e*ÿ*ô++7*>)¶)~) (‰'(–(ý)(ß)H)í)G)Ï)>)3)}(õ)v*6)ø)ú*C+**‚*Á*†*ˆ)(¿'‡'ô'°'Œ'Í%Ò(?)y(ÿ)@*D)Ó)ß(Ê()D)V)?(Ä)¹) 'B(Ý(Ç)‡(¾) ))÷)+*M(Ö(#(#'æ(L)%'F't'š'4'å&P't(‡)w)Á,l4 RL>ÿ8ÿ®;ÿé9ÿÖ+þ¬-ô– ,ÜÿÝÿÔÝÿVßÿSàÿXÝÿ\Ýÿ]ßÿ“àÿ¡àÿšãÿHäÿEäÿœüû üé ü!ü\üš üi ü® üj üU ü—ükü“üuÿ5ÿÿ¿ÿ“þCþøý3$ý1þµ.ÿ 8ÿ!9À9ÿ<5ÿ¦>CÑ@ÇEÏEñEWD™CoAe@è@ðB¨C]AâA˜AhA1?€?H>è>¯=·?t<–?>@?l<J>G=<B=<‡<8<d=/>0@öBB´AûBÌB=B¶Bº@ßBAI@º@;@ó?Á@íA¸@9?ó@AóB|CðBóA@™@é@áB¤AÓA]?âB_BAÁCDÑCÄCEC‚CƒEFE:E½FyFˆGpGýH5HBI÷HtH†IúIîM&L¯J±M‘LöLpLÚ?^?¥>5>6<E;¸98$8%8«837b7ˆ897Ì7V6ˆ5i5a6ø6ÿ6÷4É65P7¡6é6.5{5½5{8¼<&3Ï455554Î5U5N4444Ò4!3•3’4c4®4~3t2ö3q3O3>2î2s2 2ð31Þ1¢21©0é2i2b3-1à1Æ1Ä1{241{0a/Ö000ý11100ó0I1@10 0È0Á11/ô1±0€0€//×//-³-°-1+‚+, +ü++Ç,±+ú,¼,ý,,…,A,ú-¬-¥-®-ý-E-.-ô,L,q*þ+r+¨,*+ñ+@+|+û,8+}+¼+¿,)+Æ+¹,~+Å+0+î*þ*m*À+G+*E*:(ÿ(z) (“( )m(Ë))(†(ÿ()J)Ð)€(÷(À)ô(ÿ)¾)v) )@)J*_* )É('ž'Î'"'Ê' 'E&Œ'¾'Ç(ö*')ô*(—'Ú'u( (Ó){()P(ÿ(J)))Ô*))y)F)N)º)(’)(I(Ê((L(ô'¹'{'1'µ't&”(' ')8+°5 LMšAA5ÿ¼;X:ÿx(ÿÁ2¡ Ûÿ“Ýÿ”Ýÿ”Ýÿ•ÞÿUÞÿ$ÝÿÜßÿÒàÿàÿÑãÿäþýåÿ ü` ü) ü ü¢ ü üØ üj üµ üdü¬ü üKüÝÿÝÿ˜þ%þ2ý%ý9“;ÿ;ÿª6þí7ÿò6ÿJ>lF DA¦DµE.E DÐBzBš@’AAÇC-B»A¨@ì@÷A:?û?o?è>2>ë>Æ?C?5=î>k>¾=O=Ú>Í=º=<>2<á>þ@à@¨?÷@ÀAJ@=@GAÉ@‰?U>D?µ?M@x@‰A7AøB@Ì?ÅCB;AƒB;@L@a@³@ A,ALA¥AÆBCBC¾DPCÄD:DEyEôG¯EFÏFÇHµHmHIuHÅHóJ€J¼KRK†KeJ/KçKïKæL&I0I$JSJçKJ¦KM˜M›K¦N”L•M*€ ª\¨>:¼IüLæK!MJõIìI‚I©IlGuGêEàDÎ=\,t% }' t³§ [ºZÿ « ," q%Ê.å4Ø97°5Ü2 ÷2Ø6Ì4 4Z5Y,t$[ ®_  ¬·áu º ˆ Jp *Ê?GóI§JiL,KÉN†5ù@J¥B{.6! [) ©e¶% ìEM LàMRMVJ¡L LiL0L:JÐJÈKšL9MeLnKìMMÈKÌKyKøKƒK}M_K5I|F‹EPF‡F¦G%FÁH°GGåFÜFæGEÚFPBßCCB"CiDgCžB±B@êAo@ä@ÔA\@™@”?œA?V?^?à?>¤=ù=½=½;@:Ï:9\8p6Â6Ø76\76^65â5Ñ5T6‰5[65Ê6‡6º6±65†55 4–4 3•2Ü3j4!4Ç4Ò3c3ç3Û43Û3ä4ì3Û3â3¤3¦3ã3i3.392¼2ý2Õ3n2î2N10™0â1s1>0¾10Ë1«1ï2/1™1>1w2<1ò0$/h0 /È0/´/ž/.Ý/B.›//!.o/f100Á0÷/y0F/Œ/Î/.Ò.-/-,1,A+ú+º++‚,z+Œ+Å,N,•,Ì-¿->-á.d.£.¥-­-0,ô-ó->,ð-9,ò-x+‹+ƒ+ý,³,s,ñ+T,,«-5, ,+y*ó*ø++0+ **Ù*×+W*O) *~)¶))É)Ä*)X)¿)×)9)C)ˆ)** *3)~))x*B)Æ*€**—*)'&( )(^(^) (X&''^'Ô)Š)ÿ(ù) (Ñ(A(Š)?)z(ƒ(Ã(å(¬(Û**û*»*¹(\)L)U)D)Þ)Œ)U)t(x('š'í'ü('i(´)E(o)u)_)x(S+ú5 RN“<ÿþ6ÿ;ÿ$3ÿú,ÿs0ÿ—« ôÚÿ•ÝÿÜÿ•ÛÿßÝÿVÞÿÓßÿSßÿ#ßÿ›àÿâÿˆãÿÍãÿÕ ûŸü¨ üüÒ üª ü²üâ üÝ ü| üLü›ü…üÍÿÿÿÊþ³ý…ýeýï4ÿÀ6ÿË9ÿä<ÿ¶>ÿÓ5ÿŸ9úI ñC¡D2BëC—BâBïAÜBmBb@B@»BA¢@ã@`Ak?¯>ì>/>v?®@9?‚>d=á<$=ƒ=—>~>4<º<°<%;­>ó?bAì@ïB<@‚@ø@>ª?>?ƒ@ä@¯B*@@AAAêB@B9@û@ùAB(AöAÑC @bA×AYAÄBØCýCxCDCCCøDèDõDEE;EúDÿF£G2GñGiG‡H«HsGµIpJsJ‚K²L"LäL$LdK¨K_KhH1K¨JgI"KbKLPMZLâP^K e zóC³;¯BrLÓKªL™K¥JbJãJ¢IàGçE»EH9ø-$ # ²1£ GÕ¯n× ¾ $ h+2/S2 E3Æ6Š6Ý5/2m3~0I-:+<+Q"  g # dкj¾äa ¸Cà Î#-7ŠD“EÁGèK]LðM5MCLýLuKöI)F½B>Ø)î;÷HGÛHIGèB 6—?WSœN£-¶ ( "?& EI·LZKIML–LL’KYKŠL%LýM.J KÇL°MLÞK€MJLÅLDK¾J:KyL~JÒ>X=­>z==v;û<:*9U7š7@77 6%677O66^5 5•4Ì5S6”7¶7705ˆ66;54J3Ó3Ì3c3-3›4“4‹4]4d4Š3Ó3\454Õ4•3h362ý2ì2à22ú2Å2„331V1P1Ê1Ø1`1+1.0ð0 0Å1º1ï2®1ª2~1€10ƒ/×/’/Ô0K0M/”0y/.+-§- ..™/"/Ð/_/Ó00¾/Ž/‘..V.].Ö.Ú.[-˜,í+”+è+ñ,|+„,r,ó-:-­-:,Å-}-ë-9.#-;,-;.s-ð,ô-7,µ,è-?,i+Ä+Ã,,,,k-2-t,Ë-û-ô-t-0,x,>+ñ,>+µ+++Æ+I*_*˜*@*Š*–)O)) )D)Ç)¶)”)**L*‹)ú*B)•*()½)*/)É*—+I*')ž(5'Û'ð(À'Þ(V))-&£&Ï'À(­('¤*)^))*ƒ)(œ)'ö)‡(Ð*)‹)I)Q(U(5)#'x)š))(C'¶'f&­&'5(%)(s&†'ù(C(ë'J)>+7 CMš<ÿ6ÿm:ÿ4?ÿã'þx9³ ŽÚÿ%ÛÿÜÿWÝÿÞÿMßÿšßÿÑÞÿÞÿÓàÿâÿ—âÿVâÿüËüÊ üå üA ü; ü üÌ ü` üÔ üšüüüÝÿ{ÿOÿjý¾ý•ýýZ*þ9+ÿË4ÿ3:ÿW;9 9MI èAÛB¸AöA§B`BÖBkB—B,A A­@®@c@°@t?¸?ï>¤>o=ì><í<à=Ç<<¿<µ<?:„;ã:(>£?÷A+B¹BâA@ƒA)@÷>Ñ?8>Ž@H@M@#AB2B´AIB¿@û@@®AÃAAEB\B\@åAÌB“BÑBJCAC‡CB@BÿD0DDD±E7DƒEyFqEüF²HfGéH6FFHwHÍIöI JïJ6K,KˆKbJ0K!H,HOJÓH4J^KKK#MNXL`LÛRŠ\ƒ ´UË>v:„JJK‹HaHéIcH´H-E[C“7) M  ¨( % 4é ª æ ³¬U M( Ò+ë0T2ü1&1^5c4³0T-l. +[*b' f Ÿ ã ô TŽ Yä© Ð ìC€Ø ·-È? FµIJÆL|JÖK…I÷JbG±?ò4‰)â3ÃGcGÔGFæH…Dû:?;>åPþG‰.+# X‹-½8EK_KÃMKgK•KÿzK KËLÚL£JëK”J¹KmJ‘LJÑK€NsMJL MîM4K:K+JêKjLVI/JI§G÷FíFGÒHIŠIÿ0IÿuHÿ8FHFFÿ£Dÿ>DCWBfC>CãCCÇBÿ1A&C BÅA B@ @U?Ý>?=è>2=©=ê=á<G<H:7ß7+7O8y8K8:88|8µ7…7X6R6×66{7·777ù8‚65Å4†5x4@3Ž3b3¢3‹4‡3Ð4I3á43Ô4m3Ë3Z3ã3í3e3s3²3š3»3«3+2‚1’1½0Û1Ñ1`2S2É2š1a0ù111{12¶0â0Ô000 0Ï0†0/O/Î/Ä.—.d,§,¾.—/O/..¢.è.ì.Ø/Á0†0.’..-Ú..e-à-¤,Å*É*+‰+O+,¾-u-0-~,n,î,ª-j,ò-h,û,þ-r,‹,¹-O-,,´+Á,t+¿+‚+|,,,í+ô,D,º,6,ì,A,r+î+þ++5+²+³*D+*J*+H+*O* * *¶)û))¹*h)}(ó*?)‘**º)})®)r)S)Â*z*Ì*B+8*B)ž(˜(3'ð)Y(Ç'è(X'ª'I& 'Ù'Ç&))Æ(Û(í( 'Œ)g))K(¤'þ':(œ) )I)Æ)ˆ(È(/(¤'w)R)(B('' &ª%Á&´&þ)&)&~&^'Q&'‹'Å)×5 ÓMÐ=2ÿ‹7ÿæ8ÿŒ+ÿ¸AC¸ÿ ÝÖþ?Öÿ‡ØþþÚþtÛþôÜþyÛÿÛÿÃÜþ<ÛÿBÞþ¿ßþ½ßÿÆüa üH üË ü¢ üÚ üR üã ü üQ übüüü7ÿ³ÿÿ“þ3þAýŒýW.ÿK5ÿÂ7©7þä8ÿØ5ÿÝ7ìI ABåCfC]@nA0DBï@mB“B AÎ@“@ž?ô@æ@ã@/>Ú?7=~>K@r>ó=ÿ=û=­?t==ü=x;Ò;¾<½;"=÷@a@¹@¸AvArA«@ÀA@ˆA?Ò@ÓA‹AèB³@¼AÒB¼B}A@A¾?õ@ÀA/@„@›AŒCBÇB¹BÿC:CB BÉC=C·EDDÁDÁF.EîF}F`FrG*G?FDGÄGÅGH‰HÁGÊHüIËJMIÌK.HÃGHóIDGGöK_LKËIìK]L§LåMÕPƒWÖsˆsí@; FÀI-H«H.IbJbH+E,A¦2ù&  G ª% ï$  C  g š (³ç Š & !+é1*/¹1¦+ §/J0 º. {/c/ž+ ¸, þ' ª% U  \ Õ“ z „Ô¹Ûg  ‚ ©¯ ã „');àFnKLÒKKÖLMK-ICf1% ‡:.E³FŸGnH—GÓ>l@»8d>eJwG /b) a 7\£9!3ÀKRMÖMWLJÌKIJICJvJ.IŽIJùKàKVLKM»JÛKOJÒMN©NtLüKëIãIäJ3KbHâG H“IMGÉH&HÊGÍGÿéFÿòEÕFDICÂCBB¡C™D™DBÕBAËAËBÿtA@ÿ»@R@”AÏ@"A>à=÷>l> ={<<:Ú9V8l7Þ88O7º8ñ8j938„77ú7Â7Â7x7å8%7ð6Æ6Œ6O5t5B5G43’3à454þ4O43Ã44443¡3å3ã4 43h3n3h291R12E2…3}32z3»2•11â0ý0û1Å1‡0ù1110•.±0…0[0E0M10/Ê.×1s-ù-q.’.Ú.×.-°.È//’//J--H,Ó-Â.-à-ä,€+)Ð)]*+†,b,ü-u,ÿ-¶--6-/-4,ô-€-¦-·,³,¹,M, ++Œ+T+Ì+Ž*œ*Ö+ +„+»+K,4,l,å,j,?+€+ +,6+¿*A*Š+F+°+*y*)Ç**) +¨)Ã)ü)ý)E)**6){)D) )5(Ä)†)¿)À*{)¼)G*y*<*Å(ë)g(Â(Ô(Á(Í(Y(:'|&Í'(W)r))È'¡(4(ô* *(d($, )U(S'â)(Ž(Ž)(D(•(É(((ž)F(L'²&ë&c(&'å'z&Ì&S%è&V()''ˆ(¼+86 åO”>8:ÿ‚5°6ÿì.ÿJ0¦ÿ›Hþ”KþJIý'HýIþÑJþÐLý'Kþ‘Lþ™MþKýt–L§>ü ü üŠ üÐ ü© üküéü) ü|üóüü£üÔÿôÿ›þeýý¬ý:.ÿ:0ÿÚ<8Î7ÿ0;i;æE ÝBmBqAn@ @©A @1@dBÂAB@R@A"@í@(?6>Ò>Å=Œ>3?r>´>>? >Æ?~=0=5>3<r<2<c<i>-??Ë>šBCBAkA8?€> @A1@GAê@ðA}@@AÆBN@ÑB4A0@‚@?†@ @½?Å@LASBBˆBKBB‰BCÿB´B.CDÖE.D¤F!E1EEÿEXE¨F(FBFùG{GýI-HöHHÝJ‹K¹K/KkHÿI4I1IJfI¦IhJK]JæKªLfM]LPU§iÏ€ÏJœ<°@äIÞH/G÷HbH2D©B+4v$ V & Ñ  @´&É  j z² mm?Ó-  $ ‹) ¾-B0s/++¨* Ô. O+ Ç, ð-Ò* z* ' O' o#  M Q *tÿ楶po & ²  ] ©yE‚"f7-CÿKLM|M>KnVàD5·+7F¤F'F¤I»F‰3ÌB8‘<:F¯Cï0’* Ý" á<n- 8§LÓM©KwKQJÓJJKMIgHËIbIIÊJrKfK'KMJÔI’L;LºM³L1IÔJ;JùJïHÀHÇIgI˜IØHÊGÿùHGZHÿ;Hÿ;HÿkFÿ·EQB—BœB/B"CC‡Dÿ°DDFBÿúBXBÿsBÿqAI@ÕAŠ@Õ@'>æ>¢?6>=s<Ê<;N;G99c8n7à8Á8I88G7ù8ó8ñ8276À8„767>6ò6Á726Š5Æ5v4Æ4ù3Ò3Ñ3Ù4Ì4@4ˆ44J44¸4]3Ù4Y3¡43‚3g3š3)382à2w32Æ2÷3}2Ò3¾3µ2Ê22'2e2%2ª210¼171`0“1B11D1900½0²/Á0/É0+/™00‡//Œ///s/.É/O/þ..€.M.‡.,à,¼+ñ*g*)*G*ø+&+8,t,¼-<,}-=,ð,ý-h-,.-¿-,I, ,V+,,W+‡,++Ô,½,Å,õ-t-j-",ò+q*ø*¿++ð+¯+j+*½*¾*¹+¨)ø*ƒ)Ï)(Ö(Î)‰)Â**¿)»)ó)«)N)Ž(À)x)p(÷*)Ê)D(Î)P(ˆ)e(¢'¡'y'X(¤)&é'Ý'&à$º%Ý&†'Ž(_(Q'¬&ù'Þ'í'ã$Œ&8(H(&¯'«)>(…'Í('' )) (Õ(P))_'å'n'\'/'|'=$9&Ó(0'ù((({(Ð(ª(ï+s4 #NS=ÿ6ÿm7 2ÿ³&þPS¤ÿ<þýÝ;ýþð:ýþà9þýÕ:ýýü;þýÁ<þý;þýÔ;þýª<þýÒ9ÿüo¯hÇþ. ü¢ ü"üÀ ü’ ü ü¼ ü üüìühüküüÿzÿÿâþâþ°ýLýA)þ/ÿp<ÿ©:Ñ5ÿ*:ÿ7SG rBhCiAk@¦AA}@/>·@×?çAB?É?ŠA @Ü@è@1>ñ?Í=Å>±={=6=w=<>ª?s=9;8;H;1<5=²<÷;y=ã>¤B0A·B3@•=Š>Ã@V?R@p?v@*AA¾Aï@„BGAöC=AwAqA®A=@Ç?ÑA–BˆC9BºCC:BLCBüCDBzBSCzDuDüE·EFFcFaE5DÄELDFE FÂHªGHIHBJFK"GüH¬IèI£IgHéIæI+JK¦JÞL(L§JâNpawtPÀ:E;wIHHaEsCµ@Á0º# 5 $ q «1Å' ¼´¤ S™ú V É$ -( â,ñ.0Ü0…,è0S- J* W+ “+ - õ+É-x' '~ û> Æy" 8#Lõ³6Õs= K ë Õ  ÎJ³ ®*d@jJ‘LAMJNdI‚:>“)É' Î3Ô=ÙEaCð:-¢89/8 CcC&2P* –  2&÷/eI6LŽMLOLÇLÖI’IœIHÐJ)IâH%I…KÞKÙLÆL@K›IaIÞJÂK‚KJIœJIÑI=I·HIuJIŠJÿuIÌIIÿ¾GŠG‚GÿxF FHDÀB_C DBBˆBÿõBŒDÿ¾Cÿ6CÿÿBÿ6BAÕAØ?[>á@@?î=v>¥=ò>0<þ<N<ø;L98é8k7Š7Â8ƒ9¹8á8‚8€8:7¼6O7786ü6÷6º665‚5€4¹4{3]3Q3Á4€4843È3Ï3È33!4"2µ3&3T2:2¹2º221û2¼2Á2C1M2 11Î323831n0ü1b1411þ1¾1E0±0£10–0u0Ì0…0…/Š.Ÿ.—.–/).i.š0¶/‡//þ/.Ë.Â/û00 /±/Á..I-œ,«-–+ø+P++=+e+s+­,p,à+·-'-2,Í-ô-/-¶,ð-÷.6.,è-<,Ý.¸-š-,O+Ö+Ð,Ä,5,w,,ÿ-5,ì,é,z+¤*j*¼+5*õ*{*~*ª+}**T* )ù)Q)(Y()))E)M)C(ë)|))))ð(ý(Æ(‹(„)Œ))W)[)­*(j' 'à'¯'6&m'&&å&o&n&J'&¦'·('-'&(­*O'“'š'x)#(Â'a&·''Y(()'Ñ((W(k('Ø'f&¤%ó'Z'k'u&G&º&õ&D'7%f';(¬(Æ*‚4 €M<ÿŒ8ÿ­7þf:ÿë,ÿ3m©u;þýf;þýC9þý9ýýr:þý:þý:ýý&:þý&:þýŸ<ýý27ü·°*Æþw üc üûïüIüê ü£üdü>üü‹üåü³ ü$ÿùÿOÿ“þ¤þ8ýýÀ*ÿÞ3þS>ÿ¤<ÿa6ÿ7ÿþ8ZG ?AÃAÍ@þ?¨?]AÈ??¡@ŠARA:?Z@^A@÷A.?ø>y>Ö=>{<Ä<i<ü=é>¹=ˆ;Ž<'<2:º;µ=ý<é;ï=t>&@k@H@ûAnA‡?G?M>Ã>ô?°>À?=N@õ@D>Á@p?…A@ºADA6@É@‰?`@@ÞBBEAÔC8BÉBTCB{BmAüABD=CôDlDµE-EÛD1C™CÚC…EEPFEFÊEÞF·H½H‰H*IlH¶HñHxHnG·HgGïHäHvJ˜LLÛMÃJãL•\zkáUJ:Ÿ8QF|G^ErC†?Ð1°! x [ ò" â+% ‘’¾s  E I   ! †( ¥* f& É-ð1+ñ' q)8$ ô' ") - .+Ì,( d! 7 è h”Û Vï‚’ŠE 0 | œµÏ Ù; « ,'(>?JKDN&L—DnS?á+' ' ) ï+P.a7H/š8²9 >A71q* n! Ž+ŸKè8YFÞLÿþIÎI^KÛJHI@II?GwFåIJïKaKFJÛJ¬JSJKTJÓHëH™HYIOIIþI@JhJJ–JHJI‰Iÿ0HÿóHÃGÿ»EGÿ7DŒDˆDÕDECÑDÿlCÿ¯CÿwBÿèDÿdCÿwAÏAÄAÿ«Bÿ¿Bÿ°AU@>š?k?ä?#>/?_=A==;…:Í9Ù8t8²8á7¤7[7‹8 7Ç7º7‚7Œ6Å6Ž5Ï5‹6965È6C5E4Ä3Î2Ï2š33‘4 3”3ú3ž4N43™3Ú2í2u2}2]2é3+332þ2L1”1ó0À1Û1 22{2ò3 1Ê0&0¸1$1)0ó0ý0…1131£0›10’0½00ê/˜//ß0/X/Ž0‚0€0:/X.§.¢.Y.ù0/Ð//ü/K. ,™+ø,ê,›+²++E+„,o+ß+9,ñ,¹,c-£,Â.[-­.ð.o-õ.·.¾.ñ-ç.«.F.‡-„,‡,Æ-,-}-E-|,Ä-¦,¸-8-},µ++¶*©+«+­+*+ö+·+v*=)¾*¸)¶(‹(]( (‹)Œ* (Ï)t(ñ)2)>)È)u)—)î)m)J))q)K)Å)ˆ(Ï(!(¢(Y'>' '0'ò'ß(€&%\$$»%å'Ö((Ÿ&9&C%Ï')'R'_'–($%Ä'a'c(('N'M'…'Ø(‘(Ï(L'–((&&_&a%Ü& &{&~&0'…(0'ý(t('s(³*Í3 qPH>ÿ74ÿ{9ÿì6þn)þÇi£ë;ÿýÒ9þýb8þý*8þý 9ýý29þü8þýÌ8þý²9ÿý…:þý“6ý°ÞÆþ` ûE übüÒü’ ü¹üáüŽü[üªüü­üãüüÿˆÿÿÁþUþ³ýOýX0ÿp:ÿÁ:ÿ6ÿä8ÿf5ÿs3ÿ¥H SBBM@O?0?*@+=}?#? @@‰?œ@"?ª@1A(@6>ñ>‰<Ä>;<=¢=j;p=D=†<Á=;‘;F<=·=.<í<ä=p>º?«A­?“@¸@»>É?G>|>Ê==|>%>Ë?U>?D@‡@ò@Ã@I@xA?Aƒ@I?Â@ËA½AFAAPAJB»AÊB–B³@>@V@ÂCyCøD7D»C°D±D@ÝBGC†CÒFŠE–EšFE F‚HåI{H{G»H­I1G*GjF‰GôG/H/JI¤I°LÉJ“K"Tæe.PÀ:'5nE8F+D|:{/ª$ h  '  ª" È+¥# çË  š *s  é$ <% B)¸, Ÿ/,0¾,ª0ç1j. ¯* †)X)Ï*¼) {/Ž-M.) ‹' †$ q ½ P0ó ß ’ & Ý Î @  8 ) Ò;] ¬‡à}  ê:áJtMdKâH±Z‚ ZMA14Æ3W8¬8´/–8Þ7é8 G==ö1¤,   73žVõ( ’FcLÿ$IKKÿ¼J‡G™I[IQI'IzF÷HÞKëKäJ*JnKÕK[JIHÜJKG´G@L@C@WA@D?ç@ÿz>Ò>b>=r:Ê<?>p<;º9Ã9Ð9¦988U7À8?7Ò888¹7 747;7z6s6ì7e6w7?5÷5ô514z4Á4‘4B4¹43Q4 3G3È43"2ë3%3*3o3‰3¢2ó3ã1Ë2¬2ª1Â3u23>2é2¨3>220æ1¥1ê1{1Â1½1õ2*1À0Ü11E1õ/Ø/V/×/Y11?0¸0·1!0º0;/.Ú-é-à,à,°.b/!.Ð-È. --,³+a,8,6,³,d+°,¦,ÿ,•-o-è-'.g-§.§-õ.d-å.â.$-Û-¤.".i-€,É, -,ü,<,¿,F,3,,±,B,‚-,,,„,´+ë,.+#*­*¿*9)ù)Ç*0**@)))½(K(Ö(K(ƒ(‹(p(@)F);(ý(}(C)±*)É)(…(Ì(E(Î)ã* )´(m(ñ'w(Q(¬( ''('×'(#&ö'ž%Ã%‰&L&³'t&ô((m&x'&ó'˜'¿'&'—'Œ'Ù'û' &è''Õ'x(;&<&¼'&–&·&»'E((&%â&â(l+5 ¢Q>ÿÏ7ÿÞ5ÿÉ8ÿ.*þ=q— X;þýÃ7þýÑ8þüÇ7þüÏ8þýX8ýüÿ7þýÀ8þý9þý³;ÿü6ý»²ËÅþp üuüÔü{ üè ü2 üJü2üLüZü² ü#üá üÿ ÿÿ‹ÿ€þdýGü7-þa8ÿE6ÿ:ÿÒ=ÿ 8z3ºG |B†BBF@±?â>Å=£?$?a?È@Í@"@Ä@a@©?ÿ?z@%>¼;€=‡=s=p<Ã:Æ;Ð<<|<E<5;x<þ=r<o;Û<=l=ÿ>H@T@@?ˆ>›>Ÿ>…?#>[<Ë>Ç?º?Q>‡@7AtAì@¯?„?{B6?Ï?„?ƒ?»A6A•@ÏB BËB B A„@~@¨A´BCBÉCõD9C¬CCBCAC”D_FIE EWE^D_G0HsHzH²H»GÿIkI^G»HrHnG°GÿImJoH‡JÛIäKâLJ[‰L‹9ò1ÖAžC”=n1¨)T) ,+ Å' %+Ó%  (1 ˆ פF¬ ~" Õ' % '(ð,~3¬5“3ø.K*‚( –) 0¶+ * S2Ì/Þ- ?* <% $ Q ™ ~¦Ì=I5 C¢ÉÉ # N&+ê“ Sëî1Yt$ Ž9I8Kìe7Q:]¸r mgySAH©;e1!8–C4·5 Ô<#9Ó. ) Ö! ®&Ì+œ.‡JJJÿ¸JEJŒJ—HÕG˜GcGvHÈH-GIŠI}HFIîJ I'HaII$JIóJØIÚI‘IJK-JkGïHäHæHG’FØGOGÿòHÿ«Hÿ/FKGÿ3D‰DEFDÿ³Eÿ;Eÿ+EÿÏCÿ Eÿ­Dÿ,Bÿ´Bÿ2Cÿ5Bÿõ@ÿüA@Ì@ÿ>@>¥>Œ>Ž=æ;}<}<‡=3<Ç9×9Þ8ò8!7æ8%7Ð7Ž88¸8|7¼7½736L6Â6=6z6·616ˆ5r5¿5o5(4Æ4N4H4ð4u43Ñ3Í42à3J4O4V4&4†3ž3Õ3&2²3(3š3)2ö2è363¨3ª2s2J2Ä2F21c1#1=1z1¯1ö1^2…1P0È1Œ19/0=/ø0?0­140†0¨0à0(0ê0‡/Ô/Ê-·-Ú.¢6V00.M,ò0(,v--,á,é-œ..-õ-b-7-<-.m-¿.'-ž-ö.-ò-æ-÷,í-é.k.>-Þ--x-,Å-|-h-â-s-»-F-º-°,ë,ê-f,l+´+ð+~+™+?*Ã*²*C*6*)(V(Æ(W)(Ì(ˆ(\(|((<(@(„()=) *)(‰(Š(×)(Ð(ˆ((µ**(þ)6' (b)Ê)(ˆ''Y(P'ˆ(&d&à&u%M'h'š*@('(&¾&¦(Y('¿'†'O&Ï'÷'×('Ä'&2'p,T&Å&…&Å&Ê%“'&–&%Ž&'â'D'˜+3 ~N×=ÿÆ:ª4ÿú@‘-ÿh{ 1¢O;ÿýJ8þý˜8þü¯8ÿýÀ7þüß8þý17ÿýÃ7ÿýH8þýó9ÿý5ýé´ÿuÆþü³üSüK û& ü!ü«üÊüÛüc ü5 ü#üD ü3þÿÿ„ÿòþ³ý_üü.ýË5ÿ8ÿ‰5ÿé5þ®:ÿ•8µI BÏCºB/?q?ê=¸=¯>Ñ?À@FAo@S@„>I>Ì>Ÿ>¦>«>0<}=<>ÿ=»=²=%<i;¾=y=Š=<¹<Ð=s<k<ã<±<µ>]?ï@âAø?Ä@>—=J?O>?–>T>K@Î?B@3@èAw@:@¶?ö?À?Ž?7?Ë?Ì@9?ŠBºAÄBHBOB‰B¸BM@@'A/@ýA¾B¼C*BéCçB‡DrC‚DCCEŒEEIFÆFXD FIGGrI}HhIfI%J_GyHªH¡IdIçJèK«K®L$MIJiS·Fa8‰3 Aå;µ7’/>-¿L07…*º% ˜ /Ý àI ðT  ' =(»( ï-œ3Ø5T66q. - +Á)m+!*@/“,¾' 'b)Ë% : Æ M Öÿ ð×ÍÛ n •@Üœ(øNrœBd`Ä? *p9 X¸IW<7Ý;”9(8§3»4P@!D‰EŠ34 ¿9[;0 /, Ú% Ò('2P,85KJ JUJHoF«F3HãGHGuGIIJ8H8HòJ¢G¤G)GéHYGªHæH¡HH‰HþHÅJmH¬G¶HžHØHŒHG‚GÿëGÿ³Iÿ)Hÿ}Fÿ°FÿpGÿhGÿsFÿhDÿkCÿYBÿáCÿûDÿ©CÿîCÿlCÿ§Bÿ6BÿrBÿ´Aÿ¯Aÿ7AÁ@˜@]?˜=Ý?b=î<²>j>ó=ƒ;—;ß9²8é999ˆ8Á8@7Ã7 7|7û877G7„6E766>6u5A545®5®5o5655„4Æ555~44…3V44}4‡4–44Õ4ü4@43'332Ü3’3¦4`4ì3ñ4<4v322 21å2"23151Ÿ22210±///M/‰1l0ì0;0¶09/²0;0I0B/T/C/È/ú00‹/‰.’.&.-,î.Œ/._-¦,”.Š.e-i- .".¤.¤.†-³,ð.5.º-é-­-¼.·/l//i/³/w.¸.v.«.}-¾-ù.,-ë-¹-à,í-l-ª-á,ç,p-1,ï,ù,i*¶+*ý*Æ(ý)I(½'Œ'a(X+F'Ë'Ü('Í'Î(((@)<)o)W(k(¶(Ç)ø)(Ä)(#)¨*H)Ø)ï'ð'È)^)(F'&']&T&§&ç&§&Å$†$Â$Ä'k()(É'W(F&”%Æ'Y'¡'&§'Y(h'å&&%o&R&Ö&7&µ'i'õ'ö'w&¾'þ'u'q'1&Ž&Ö&Ü(K+ˆ4 þP›@p6ÿ/:ÿ:ÿ!0ÿmvÏ¢r;ÿýI7ÿü†8ÿü7þý97þü?7ÿü6ÿýÉ7ÿýb7ÿý™:ÿüO6ýû¶ÿ&ÅþüAüR üZ ü<üüTü&ü¢ü\üÓüküÐ üQþWÿÿuÿœþÖþý,þž.ÿ°;ÿ2ÿå/ÿÉ3ÿ8ÍI >@ÑC{B¼?ê@,?G?<>ð@?ç@6?>>—<©>²=ø=w=²<Å<5?5=b=ü;«<::†<ú=É>÷=8<=z=|<ä<î<‰=°=p>x@ë@³>É?Ì?¬@Â@„?ýAŒ@¶?…?j>ê?•?3>ñB!@G@Å?Á>É@Å?Æ?E?»@ŒAIAÐBA‹BAÖA_@GAËAêA,AøBúCBöCüCàD2DqD;EQD‡D D{EFÎEÌF-GæH.HñHéH/IžHoG;HnG€HîIoKiJyI©JuIìJŸN”A.6¦4†:½3,µ& °# j& ›"  ´ ;N‹§@  = 5  á% Á' Ý+ý.v/Ã8=?7E6î0 %-Ü0²-ø*w11P-Ì.M-c,"$ Ä# Å Þ ì† 5Ç…P ˆNëI’æ>4n+74Ò»ZL ñ6g9F1­0e1Å598‚<¡@‡F£E¢FUDì1Ò4 {5°9ý. Þ* É" Û2º|o6º-ñH¿GçHeGáGëHGªF5FGîGG×I^G~FÉFˆG6GjF9GèFïG­GeH×H“H?G¼GúI.I¸GâGdGH&IÿtGÿïGÿõGLFÿòFÿ³FÿiFÿ´EDFÿêEÿºCÿ÷Cÿ}AÛCÿ?BÿxAŠAÿë@„Aÿ¼A@ÍBÿ=Aÿ­Aÿw@?Ô?Û>í>²<z=÷?0>‡;„:Ó9°9ª8Ø9I8È9{87ô77877þ8795û6ò5ö5¬5û6¢6+5­5l5÷5i5 5a44÷5ò4ç5ö5~7A6¸44C4…3Ó4}3„3Å4ƒ2Ü5+3‰3Û3Ý4×44.3i3û3{2Ô31Û22&1Ú1î1ß1E1±1j1º0Š0û/Ã10¸0ä1[0ê1h0®0//é0„0Ì0K0†/û0„0)}(Ï)…(½(F( (K))5)>(Ã(¼(Î(Å(V)Ì)('“(A**Æ**Ñ)”'£)‚(Ù)e('f&Ý'F'–&l&ã%±&¨$\'ë))(?'Ï'Ý&'&º'è(B'0'c&Ñ'y('W&i& &Œ'&E&’&'«'å%þ%Å&%Õ&%c&&I%é&ø)Ö6 sP@ÿÞ;ÿT:ÿ;ÿÜ5ÿpuœ˜;ÿý7ÿü8þý˜;þý86ÿüÎ6ÿýÁ7þý28ÿü.7ÿýÀ:ÿý‘7ý}¶þ¾Äþ(ü8ü:ü‘ ü›üü#ü2üâü‘ ü" ücü´ü3þdÿÿeÿ›þmþ±ýæ.þo1ÿÜ0þÛ5ÿ­7ÿ`;ÿ$=uI HA‘BµA @,@R?E=¨>ß>Ö@?Ü?,@?>?·>-=µ=õ<¯=®<o<;¯:¦<£=A;ÿ=³<!<1;¹=ò:ñ=e=¶;Ï:Á;ç=n>ä@1? ?Å?{@‚A?S@s?x@w?@?1?y=²={<J>N>œ?>Ì?È?‹??_?ý@J?À@ÇBtB4A}?Ä@}?@¶@ãBB}BA¸C®DhDqB½CÿCIE C‘D=DþEsGªE­DçFwF…E³FéHØI£I³I®I¨H1KnJè d è Ý! Ö& w) ¦-0_5'5‰7 5Â32 0Ž-^-..þ. ¯1!1r) & % ¼$ Ã Ð Ö ‚ ¸ HJDØ1á™»Ÿª\‰Tó¡QV$b>, ' Ž »/^BF{DCÈEPFgCEáGÊD—4O4 …6Ø7…. ¨+ 4# ”6ÌUæ4 * ¯F~G’GÊHZG'GëFöGpFLF}EµEÑEUGÀH®H®G¿GwG§HÄGEÅG HMH@J5HGH{IìJJÍII IHÿ´HÿvHÿêGÿçHÿ£HÿåEÿéGÿ·Eÿ·EÿêF EÿoCÀBÏBÿ¶BÿÝ=j>k=ò=¹=º=q;Ð;9v9â9L8Ù8 8B7K8‚7Š6½777 76C6¨5q6:6s5ì5í5í8®8@55¯4ø544÷4/4w4¯5p4=4Ž4M3Í4;4C433ˆ33Æ443_3š3Ø3™3©3å2ð2²392É2‹2R2Q2Y1'1¢11C1¼0K110ù0D/À/°/á00r0ý0}0¬/±/Á0z/Â/Ä07ÿ :ÿ¦9ÿª4ÿ„7rH @M@Å?Ç>ÃA*@¯?¬=²@>–?@?ÓB=]=ã>ñ=ê>,=q<8= :¨<2<&<#=î<&<2;{<°<â<h=s=ê>6>j>c=a>#>^>é?ÍA‚@]@ý@G@AO@÷AxAA…BLBk?ü>ò?s?‰>Š>;>J>L? ?>£>b@?Ã@@×?Å>K=?FA ?G@9A=AkBuB2CÅDØDóDxDÿD€D¹FbD{DEFxEÅFâF²F2IlHìGæGèH E‹FÇI}GI IƒDYAGÜG:C2ø66,$J Û *‚ÏRm=S¿ 2 · ‚ û T& +û2œ3¤5Š6Ö6:¦< 8 D7‚5å1ˆ2g1 140ô.A. +) ^# š  ˆ! " ˆ A ( Ž kŠ ¬Ï á M í ( 8²¢YÞ- ,¥" Ü$ yË z/Ê>­DøD„DEùC»FTGGÂJ9e3 Â7R6. é( ! +Ä?65U' ^F¿GUHGÛH&HFÇEÈFF¹GFEËGGûH0H+GlFªGFóGÛFlEwFØFFÙHøIæIîI„IRIfIÿûHÿ5FŠHÿôHÿzIÿ.GÿkGÿ1Eÿ÷Eÿ:FÅFÿ4FÿaBÿ6AÿûBÿ:AAÿ2Bÿ¬Aÿ³AÿiAÿcAÿrAÿ3@@„?Î@U@Ò?Û?¡>/>u>ç=D=;œ:ÿ:”:†9L8Š8Ê7È7Š7‚7½7w7Ž6¾6‚5Š6´6‚5J5ò6c5å5í5ö5G54²4?3º4v4v4ö474=44?4~4n4ø3’3Ÿ2×3Y3X33Ñ3[3!3)3Þ4¯3­3-3n2é1Â2&1Ò0è1i1)1§0Ú0û1=/‰0J/Ò0090F/Ç/ý0»/N/…/I0H0—/‹/ 05/Ä0û0¿0>0 /À/»/9./ 0 /½/C.•/./.Ÿ-ì-|--ô,ü-y. . .{,þ,æ-è.ò/7.·.-®-¥-a,ö-:+‘-E.È.+.p-í.f.­.å.p,ó,¦-²-ý-,x+Ã+µ+À+.>*…*}*/)ˆ)(_(q)|)Ü(X((–)°)(Ö(‚(í(û(|(']'T'’(](Ó(Ð* +'÷('ó(¢)’(2)ƒ(®) )1(T('×'[',&¥((((Å)>(Ê'h'Ò(™(Á)Ñ'¯'5()Ð(&È'™&¶&¦'Ÿ&÷&Ò'º'ƒ&¸(Ñ'{&9%Y$é&2&”&%e&{(7 gOç9ÿf3ÿ„7ÿ 8ÿË3ÿ¼— ÈŸú<ÿýQ8þý 7þü;7þü»7þüõ7þýQ7þýš7þü8þü¦9þý©7þ¸·þfÂþcü üAüSüiü‹ûÇüü[ ü’ü”ü ü¡üéþ$ÿÿ?ÿoÿ¨þ³ýý +þ×6ý8þã1þ±8ÿS8ÿ–8ƒHÏ@@À?O@öA¨A^?l=ñ@=š> ?ÝAë>Õ@>V=|=®=½<B<m:%:Ö<b=f<P<›<*:ù<b;x=è>a=Ÿ=¬=ï<n=™>d<è>£@r@³AìAMAB@¶B©AaClBµBBABGAG>î?6@D<Ä;Ó= =ù><X<Ø?@a@A@ý?‡?Ã>@ûAB@ï@ç?è@üAÀA©B|CìEªD·C´CÿD¡C‡E¨D»EBF{F4FEÊG:H;IXH GöGZFýHHFHF†=6–-4ÇF9”//þ&?! ] A* Z ž ¬3 ÚO ¼ Å ;  9(²*B0#/£0˜4I5 ¿6¬8Y8 ¿8 ½9ë5Ê2 ×3'.q/ o,É+Z) K) Ï'" ¹  Á â 8 } Y   €Ò\9@[· é J E ™ Û‹¡ã‘( ¶ =  ~ ¦1?:BÖFvEF"HLGŽG¿G²6Ä4 484 ¼. ®&  ¾-©8o2"' “E³G§FÛFšFF¯E±CÍDÓEEæEEF~G¿EýFìFäH!EsFéGeF¦FZGFQFGFÍGùF·E«GoFæHKGGGLFŒGMFDÔD’Eÿ»EKDÿñCÿ±@ˆA Aÿ´Aÿ~AÿµAÿ3Bÿ9Aÿ¦@ÿðAÿ2Aÿ«@ÿüA@•AJ>¢?‘>â>þ@ ?2<Æ=?;l<3;k:Q9»887Á98897³6ô6û76…6u6«7l5G5À645ì5¶5w4Á5ý5v514~4.3÷4ç4N4C4x3þ414°4G3[33’3Í3Ñ3a3I2à2¡2Þ33Ÿ2ç2a2®1|2G211ä1›1ã0ë0Ü0Æ0‚/Â0ª0/Ç0>0·0>05/ö.ü/¸/‚/·//J0 /„/Á0+/¹.É//’0;///q.‚.f.Õ.M.--ä,ò-å-¤-Ý.æ.f.s.¯-È-‡-G-¥.*.w.].-u-¯-`--ò/©.h.?.‡-ý-ï-J.¥.³.®-f,ù,­,ª,++?*º++y*‰*)Ë*?)¹(Â(T()(Í((¼(Æ(F)(Œ(Ç)((U'›'Ô'•'”'»'Ì(Î)(( )I)[)>(£*D)I('Ø'®('—(u'}'Ï'”'´&è'«'¿'È'P((('V'O'&¨'c'Ê(#(`''8&°&ï&ç&e%Ú%´'('¾'e'='·''·(£(ª'»'B&Ñ(Ù*å8 SQ‰;Z5ÿÎ:ÿë6ÿ9ß  |—ø:þýz7þý 7þüc6þü$7ÿü„6þýð8þý27þýâ8þýr9þýq8þ¼¹þÁþªü‹üê ü* ülük û> ü-üÓü› ü™ ü2ü‚ü^þîÿÿfÿ«þRþ(ýÿ(þ31ÿ¡4ÿ*5ÿ54þ§9ÿw9áE@Q?áA—BA]@ß@&> ?=>±?A‹@?K@H?9;ã<h<ç<í;:W;;;Ù<;9Û9%; <&<n<[<r=*<‹<Ÿ>·=ñ>¦>â=í>¸@vA AB@®@úAøBJA†BÆA¿A{Ah=ô<O?F<Û= <M<V;˜;a=>É?H?@ê@ýA}A<@‡@ü@·@v?3?¨?­?AñB®BéCúE¬D¾CùD}DûCøC¹D¯EEEIFKFÀG-G£FûF¸G¦DüDuGvG}A>6I+è.š'¬)Y6ˆ.5*Ï(Y#0 s8ž§ Þ á9ÅŸG: M ¨ o! d' H,-§1P3757D8w; Ï: `< h; ¶; :97 >6 6º5¼2b- ¼, `+ M) ¾' F# > Ÿ À ¢ & À U >  €Ó a Šõ¯ # b ? T&a‘) Æ)g  µ/ùDàC²CŠGHDéFSEÂ\ô8q2 Ã5Ç1 Ä, # Í  ò67—2'+rG#FÝE’F`EoGG¦F%EÒFýFIGAF»G2GöD‡E?EvFhEjD¶FoF EªFYF‡FEYD—DJDÉEÆEíDìDËDREÃD]FDËEQE-EÖDLEL@ÿýAOA’BÿBOAÿu@ÿ}AD@I?ÿó?ÿù??Ô?œ??Ò>>â>¨=ñ>=ò<À<@;¦:´:"9Ò87š7“8À8:6‚6ý6õ6…6L6|4È4…6|5À6)5!4ì5½5î4ð5u5¨4þ3ø34º3ñ4D4x4º4p3õ3ù4B3…3É3\2«3Ò332á3&3R2 2î3&2á1ç0¼2~21]22,1¥1ô1c0ü0B10·0÷180¿0³/x/u/¶/Œ/¿/¹/x/ð/ð0²/ê/²0û1<0´/ú0c/v/.…/.ø//5.C.-^,Ï,Ÿ-a-i-Ø-å-d.?--u,½,t+â+½-,,á,d+Ü,o+|,¼-8-,-H.?-í-"-7.4,ï-h,µ*A,#+·+ø,0+z+°+,*ò*²*)¿)ù)(X(‘)A)))(Ì(¾(Æ'(P(þ(='Ï(('‹'¡'Ð'“(}(×(È)O)R*)\* )Š)C'È'A' '_'–&›&E&­'n((S(¹(W&ï'‘(F(¿'˜'”)L(š(“'Û(U(„(‰(ø(E'¢'j'à'&Š'((Q(ç(7(l'÷%!&'I&ö&% '&)å7 cP<B5ÿü9ÿ…7ÿÐM¸Q›Þ9ÿýÙ7þü·6ÿüÃ6þü66ÿüM7þü.7þüî7ÿý7ÿü×8ÿýÙ9þĹþWÁþªüRü3ü ü ü üR ücüüe ü« ü<üIüûþsÿÿ?ÿžÿŒþý· ýÌ-ÿè3ÿò3ÿñ5ÿ2;ÿ 5â6ªFE@P>hC @ªB@!?™=Ì?”?=Ï@×>É>V=ä>â<1;˜= :à;¥;#;Z:§: :Ú:$8®:!: :h;ç<¯;â9 :d<à<Ü=”<R;£= >ç?;?‹?Ð>CAEA³AA^@œ>ã=Õ>Š>†>Ü>U=×;V<K<„<ê<d=›?N?‘>?ª@Ç@û?½A–?ƒ@³@CA2?v@4@}AyB6BóBúCvC„C9C$C¥D.BwAÆCDƒBCÛCRDýEBFEC]BïXPIX20Û.!.û,S,—.â'œ'4$ß 6 °ßö ô*=³k6 1 ê" „( {( Ô( g0ˆ2à4À8Ê; §;";È= é@ g< µ> R> c; ²9 «8 Û9­6i2"0 Ÿ- È, ) ( å# ‚" N" {   Ó  Ó J  € P æ ˜?ž g  !#  xöbZÐ Q6Å : z Ž š d$ ;{DrEtE˜E!GC¹d>9 3 6G. É* —! l&DÐX32Ð.ÎCâESFÄG”EßF EîFïFNFtE E‹EËEFDDDDFúEëEòF=E³E4DªEˆEFFWFÃE‚E EÃE‚E±D2EêE¡EŽEÍFLDÿe=l=>>q>|>8=;,:>:%:L:9‹8I876Â7=7u7‡5Æ5C5M5G5½6L6m7i5p5·5ó5y5ÿ5¨5?4·554z4¡44ÿ4±4€4ª53C3{3R3™2c4Ñ5U33‡33P3P3§3`36251¨1Â2€1R21ä1£0ï0k181;0²0200ú0B080505/¼/u000·/î/³/õ05/å170t0=0t0A0{1-0k/¶0y/é0|.A. -ç-Ð.. /•..æ-é-»,<,p,5+†+·,s+ó,1,w,?+å,,9-|->-Í-@.>.}-Ü.,,ã-œ,¡,ò- ,q,3,†+ø++*+{,.+*ñ*y)Ï)¼)H)Ç)I)P)†)F)})„(ø((^(È(×(?((Í(=((™(ˆ' ()º)È+N*_*P(ä+—))Î'Ð'ˆ&4&q'&_%ì&o'{'ƒ({'Z('™(Ã((k(u(d(S(Î(L'Õ'Ú'”'ë((W'$'a'z&ß&n&p'Y'Ñ'à((Ô&·'u'±(E&G%Ò&'•+7 CNP<€8ÿî6ÿº7ÿF¶ ʘ:ÿý 7ÿýQ6ÿü7þý!7þü.6ÿýÒ7ÿüÇ7ÿýP7ÿüÎ8ÿý`9ÿé¸þ¤Àþ«üÒüªüãüÈü{üâ üü#üôüÒü±ü[ü¤þzÿÿ?ÿþþjý.þM0þ7þ¿4ÿÞ6ÿ™2©5,GiAM>¼As@AÜ?à?Š>>M=Ö=Ç<?=—=ã=r<@k<.9i;*;<’;¥9å9å:9Ø;:;3;«<+<u;é;ñ;S<\;ž;!:a:ð;q><=”>œ>‚>@MA@È@Ô@>Ñ=c>'>=¯>˜><9<[>à=„<Ô<~?"?à>Ð?ÑA@Ï?†@Å?ÄAú@E??ƒ?Å@»@@KAúBôC)BºC·CCsDèBúC6BBÐDÞC‘BšDÇF‰EUE CÊB®BE Bº>M9n6{4}1s+2%ñ'÷  " š  #_  ¢í …  ¨" ‰# 7$ ç, £// 0ß1 G5+8 »= dA B E 4E gD 'B ? ’< Ô; ”7 é5 ¿3Ü2* X' 2( m$ »# à!  n ¿ ×     I  K á×"©k [! Ù'í Š ûæ] ,Pd Ý ’0 Ð8ñ ƒ Õ*¹C4DáE¢DØFF÷b‚83Æ3t- & ñ  ¦# Ÿ9>>*-Õ+ÆGEG GBFE×EkD»FuFDùD§EC‘CÊE:DEôDóEtEmF¤F¢DìD-D%CÙC×F»G2EýCûCŠCýEÙEªEZDÙDÏEBÑA×B×CäD›Cÿ»Bÿ:Cÿ±CÿoCÿ¸BÿjAÿ8@ÿö@ÿ®>Œ@ÿ:@ÿu?ÿr>Ô?Æ@ÿõ?^>¬>!=)=f>l=¿=‡=I;í::™::;9Â8Q76R7?6Ã7¼6¾6 54U4Ï5Ê65î6t5´4÷5p5j5q4ÿ4v495v4q494±43Á3L3E3M3;3S433Â33 4P3‰3 3—333”2ö3q272B2†2H1Ü2b1§2b1^1±1©1Ü1é2%1q1*1w0q0?/}/Î060u0=0o09/ú/ù0ñ0·0ð1*0k0¹0c/¶/²0¬/E/{.//H.×-Ä-Ä.^-u,Ü,z,0+µ+8*©*À,2,©,&-$-f,ª,æ-a-u--O-ø-¸- ,É-©-ç-ª-~,æ,ð-0,Ç,…+†+I+²+ù+¨*®*F*¶)ÿ***†)<)Ž)* )y)€)(Ê(ƒ((ˆ)))I)?(E(G(¾(N(P(‡)I*Š)ä(*)T+H)B(Í(2&m&È'&…' 'H&Ð'( 'É(O(¸(ð)?((‚(Z*%(U((å((I'Ø'™'«'d(!'¯&p'¢&&f&¥((€'f'ª&Á$g&x%Ï&¹&%o%&ö,a6 YQ>ÿW4ÿ\7ÿz4ÿþDdºá£ÅEÿü-7þýõ7ÿý7þý¢7þü66ÿüÖ7þü¿6ÿýª7ÿý`7ýÀ:ÿŒ¹þD¿þ¢üü ü ü+üóü™üZü$üQüüJü@ü¯ÿ*ÿÿ?ÿ}þtýG ý.ÿú*ÿÙ3ÿ3ÿ2@ÿ4ÿ8«Fm@Ä>?Î>‰@1?é>ð=ó>->e?Y?k>n>(;z;Q;‚;(;2:¦<4:h<$:o9à;%:p9»;a<s;.;ë=3<¡>=<É=o:Ó8ê;á<w>#>>†?ÿAAˆAIBI@¢??;>Á?”>À=Î?? =Ï=<%=¿;Ç>‰?ÿ@#AyA@âB1A¦@¥AËBL@@W@Ž?ë?€@z@ù?ÏB¯CÀAõ@ BÉC1Cw?û??ÅAþD3B’AAXCPCCÄA¥F«=Ì4 2Â1ê2ë1,,ç*]($)L+‚ .  ‹ ñ  | ã-.  À Q! 0$ ±'™' 3+ô0n2<2>3E8 žA ›E I 9I ­K /H ¡I .F  C ¾B ?>ë<|8K5 ƒ1Ñ+ ·) ë( _% d% s# U# ! µ i ˆ ¯ Ô Ñ ~ Î   à Þ t÷ é ì è'_,! r ]} @Já.B °0 z0 ÿ Ê »!Ð4DDáFcFÀaÓa[5Â3€0 ½+ ( j Ô! î/”(é! °/ÒG!EDeDjDâE*F4E³EMCúDgC)C’CÌC D{D:CóD}EkDíDjE)CïBäALBªCŸBYCæD,DyD0E C¯FWC×C—C‡CVA-BÒD'E]Fÿ²CLDJCÿ½CÑAWAŽBÿî@ÿ÷?ÿ%@@ÿ©?ÿ6=”??>×=Þ=3=s=6=v=·= <Ž;^9û:g9Ê9I9;9K8N7Å7¾7C6Ã7254×4“466{6n6'5^5w5 4¹4ª4±4¢4§4h573‡3363J3M3„3E2Ì3Ë2[3333x3<2•3€33202š3%2ì2±1ƒ0‰2J1Ø1¨1™0©11q2.1k1ß1*0é0´1"160l0î06/þ0¯/ç0¸0÷0(0[1S1˜11'0±1Y0¤0h0%/œ<ð@Ü@3A>«?¢?¯>¬>\?)<$; ;W<ò:8:ï;´:ý:æ;¢;q<å;¦:³;j;k:¯;X;c:u:y;<3<+;«;=<f:·;F=3;„><Ž@]A…A@Ú@ÌA?ü?>š>–<Ú;í9*3¦0×3a6Á:Î=ý= >v>h?rAjA§BˆB­?û@xAû@M@ù@ @}?„?Å@ù@‹@ÄBùB¿B=@‰A ?Ë@@>@UB)DAZBÌAÆAU@«Au@ïA.5ñ%('&i'%&ú!J(g0'g , * Þ ó 7 # 2:ß ê ¸" ! # 0Ã)±/ 12­4.8 Å@ .C %J rP tS †O cL L ÐJ ”H áD ŽD 8@ :@9<3 >1 ;, ‡* á( ü$ Ê# ¥!  E Ø Ø  Ï M r Ë ˜ " Í r·”f ¦ 84. ±  I% ÔE ¶, # „! š m ! Ù%Ù>#CëC¨DÌsÁQœ5 41A, X) ¥! £ õ!y;Ã" Ý+A­C×B¡@ðB$BïD+DrE`DBCCèCŸCTDƒCDD±CCE«C²E_D¥C;C,Aæ@ B˜CVDñD÷EÝE¡E`EEeFIEÿ¿CNCÿ,Cÿ¿BÊC@ŒDÿ>EÿªC@CÿöCÿ¿Cÿ5AÍBÿýAËBÿ3@ÊAF@ÿ2?>×?ÿ½>ÿý=‘>c>g<C;Ë<=<@= ;Þ;ò:Ž;c:S8É8K8Ë7“7Á7þ8D6Ý6Ã654f4š65‚5T6u5ð4±50514ã4ð4y3Á493ü3ü4525)5<4¶4¼3ƒ3‚3¿31Ý3Š332‡21Î1m1¢23d3r200 /œ0%1X0ê/ô0Ð0@0©0ã0a1`1î0v0à0x0/«030 1c0œ0s0è0è1ã0ã1\1y0×0a0)0_1{0"/b/.-Â.D-Š-Å-Þ-H.,^,h,v,),°,w+±,b,e-",¿--(-æ.t.3/+.C.}...è.~.n-à.m.X-µ-ß-z--¡+ä,-"+f+8*ÿ+ø+u+w*G*=)})W(O(H((X'æ((M(Ñ)H()( 'Í'„'Œ'''[&P''Ó'(ø((š)K(Œ'&Ï&É'Î'Ž'Á'ˆ' '(8((I'(G(€(I'™'^(¿'Ø((‹(‹(@'¬(U(Š(J(' &˜''S'È''€'Ñ)'®&¦'ò'C&'±'ã'ƒ%ß%]'¤)™6 ›T:ÿW3ÿ>7ÿ39ÿMN¬ò´÷5ü«-ý+ýí*ý¬*ýü+ýd+ýŸ*ýû+ý³,ýE4p˜ÿ÷ž ü#ü2üKüÑüü©ü»ü"ü™ü’ü¥ülÿOÿÿ?ÿÿ?ÿÿzþþ±ü.þe3þ…1ÿ’-¢2ÿB,ÿ¯4ÿ\CJ=ì<·?Ê>ù@ ?j>y>;?g>Þ>‘<<å<¢;Ë;¸:Š;ú:<:+9}:˜:+:Ø:*;´:69+9´9‡9»9¾:@;³:º;+9å;a<?;í8”;{=(<?=°?K@Û?÷A?¼>ò?º@?>…<Þ:È.$"¡  ; X ã! }.U:‚;Î>t>l@ÝBçCKABÿtB BICÿq@ÞBÿ¸Dÿ/Bÿ7Bÿ|CEBÿ¶Cÿ}BÿñB Aÿ~@ ?ˆ?ÿ=>N>Œ=å<ç<5=5;ó<<Ó==`<H;(:H8Ï98Ì8 7¼8Ž7C6L6ú5Ï765Œ6ƒ6s6 6%5­5.5t4ç4¶5i4€55©5,4ü4º5©5+4®5i4@4¨4A3’3Ì3I383B3332’232m2ª33-210V1‘1ç1'0á1œ1,1:0n0¬1q0~0/º0ú0³01.í/q07/¶/h/ê0i0Y0Ÿ0±1(1 0˜/õ/÷0>0v0ç0d/D/?.x.~..N.S-Õ.R,×,~-,,²,³+Ã+¸,½-5-d,í,£-h-ª-¬-\-i.--Ù-É.F-Â-².q-ë-â-ð,ñ,ˆ,ç-µ,â,µ,/+þ+m+0*î*í**)´(Ç)ƒ*)µ)*L)Ì(Ÿ('Ô)((E(À(Æ('¤'Í'Î(€(r(F('…'‹((‡(Ô)2)p'’'&á''¾(C'&ž&¿'.('(•'Ñ(T(”(C(Ä(J'(E)3(ù(C(!($(T(Ã'˜(›'&º&¢&è&Ñ&à&Ý(('Ö(W'¢'q&é'd(©(<%Ð%¦'*8 ŽRˆ?36ÿí7ÿ)6ÿÔM³²m¡3-ÿ>%ÿ•%ÿD$ÿU$ÿÅ$ÿD$ÿ$ÿã&ÿ&ÿs7ƒ½þiÁÿ•üü"üÅüûü#üüƒüzüZüIü‰ý„ÿÿ?ÿÿ?ÿÿÿ‹þ"þ³ýù#þŠ2þd1ÿœ4ÿu1ÿ†2ÿ6ÊDr<k>¡>–>:>t@¡@6=Ê<¹?V=ç=ä>%>M<s:É;†:ñ8Æ9µ7ê6ü98:¡:‡:õ8;68·9I:8Ï:?:4;99 :Ø;k;5:¬;G;:§><È?LAAÑ@R@á>¶AG><¶<W/µ f ¤! æ ¹ Ь (U;Ž<Ô@A@?B7AC8?ú@ãA¿BAA@³?[?>>H@Æ?…@}A1@Ê@÷Aw?ú@ýAA@€?C>C¹BˆD;B‹@S=o@¡D}E~@'!î Š _ D Ö#Ð--< ¬ ô í ¢ ð þ ‘ û U ƒ ú " Â& î-G1g2Ú2T5û>¦A wI L ¦X Ýg â| q Ú{Ér ”b ßY Q ÎH 'A < Á: Ý8 X4 ~- µ.%+ *!)a' Ý% Z" ô$@$ # j" ó  † â Ñ ¤ ;  ö~§f š ­#?•; ¿%  ½" í"  w î O 3 ä Á+@MF÷Q¨LØ2-®/Š3) ." ÷# ±" F,4bA6CjE CgB]Ac@ìB¯DäEZD¹E¤D×DODÂDŠD8D;D2DgD¥C²CoCÞB§DCËCD CC(BƒC9C¦C'C¢BëE]C’B Cÿ5BÿìAÌAÿ¬BÿìA„BÿrBÿxBÿ÷Bÿ!AÿëBÿóCÿCÿtCÿµBÿâBÿ°@@ÿ7@Ï?ÿë?ÿ3>S>^<w<õ<t<;ˆ<Ó<T<2;;£:_9Ú:N<]8W7Ã7 5•6V5L54—44G6N4Ì5ì5¿6/4·5¯5&5(5'514h4ò5*4p4·4Ÿ4ð4·5æ4§4é4.4?5/3q3x2ÿ3A2Ö2Õ3Ç2ä333¥3í3t2ó1Ã2˜1æ1¥1Ð2Ø1‘0ü0ð0j0ö0u/O/…0s0,/¼/·/±/³090/ð/¨/ö0,/y030¡/²/µ/³/ª/ò/õ1³/ð.þ.ö-P-“--\,›.-œ-L+è,0, ,¹+ø-;-¥.#-§,*-i,ñ,è, ,¦..¿/0.q.+.l...e.,¼,e,ž,4+ö,4+ø+‰*S)E)½,c*4)³)9((¼)6)~)A*)))(½('Ä'Ã('“(''Ä'D(~(,'Œ(W(·(J'Ç'Æ( (…(K'ß'Y(­((@(B'Ð'd'€(F(ô)z(Ë'Ü(É'Ò&á) )9'¢)Z(S'(((Ó(º(Ô'á'—'N&Ø' 'H'Š&Ø&Ð&¦&Ä'È'Ò( &æ(^'a'ê'´&…&')7 åRÉ;P5ð6ÿ¶3ÿ›A%˜Œ¾,ÿ%ÿ&ÿ$ÿE#ÿ,#ÿ†$ÿK%ÿ&ÿ'ÿÝAU½þ5ÁÿÕûü üü"ü‘ücüšüü±üüÅþ¹ÿÿ?ÿÿ?ÿÿÿCþþý6%þ0-ÿ-þï5±5Ë3þ_4ÿwB;è:A>œ=T>r>}=ó>1<u=ð?f?¥>i<µ;p;È;‹;8G927Ë8@8{9´7À987v5É6»9H8¼7:8È:ÿ<z;*8Ï998ò8C8ƒ9Ô:Ï<£?%>ã?ï@u>f>Ñ>é?2=Î;Ì8t#º! _*ˆ87“ ˆ C Ö G3ü=<ß?ù?;?åAÜBŠAü?Ò? ?Aˆ@ÐA%?Ñ@²??¸@ûAëB°A:A¦C]@îB†D#BôA?BB}C×CØAA˜@ @Ÿ?^Ac,Á ò Þ Â ë p)ô-ž.Ñ&Ö$²" × ö   8 { q ®$ »* '(D% {- 0e1•82=ªAÐBcJ ïV ™h „ øÞoÊ”ÿ o—ÿ °s ªZ ©N ;B ²? u> : 3 , ‘* 5)¡( N% ¿% ·# „# @# b&û'›( # Å! / f ¤ Ý û ½ ”Ó ¡ @ i#í4 °+ h! ,! ²$ ß"  % T =  X T &2LC$J^>O+B,J4!2 &›  u! õ![&I;B8DbCZCBA¢AoC^CpBëD²CîD˜D‰CÅE?E®DµE%BîC_C¥CmBñBòCÚCJBSBÎAQB~BB9B¸B©C&C¬CcDQCÿ¼BÿD>ÿº>ÿ}>ÿ9=È> <¥;ë<;þ;Ü;”;£;£;{;H;p:&99Œ9Œ7Û76K5ž6\55L7c53Ï5ÿ5½6°6ï6÷6£5x5ì5ç5ê594±4é4Ã4‚4¹4²4A44i3F403¶23x392Ã2~2€2Ñ2—2_2L2¡2X332:3m3‡2Á2\2$2k1k1Ý11÷1­1n1u0¼0Ä0 0s0ó0ø001/Ã0-0)/õ0¾0þ0½1<0³0u/t.÷.ï/|/Å/º0 /q/>//ã--Ž-Z,’-Í-g,Ÿ,v,ú-&,¥,¦,,-=,*,²,-+õ+t+,¶,§-¹-ö.x-ô-ê-ì-í-£-×-Ù,ì,°,e-$-+,­,°,)+½+ž+µ*ã*|*Å*6(Á(Í))û)¼)…)('œ(('S' '™'Œ&‘' &Æ''³'Å'Æ'ý'(a'þ'L'(>('ß'/((Å)Õ))”'1'É(ˆ)<)B)[)(€)F(Œ)c)G(Á)K'§(e(§*)¿)«(€(K( '!'Õ'ê'\&Ø&Ú&Ð'&Þ'h&]&§'ç("''£%ù%§'Ì*J7 …O;ÿÏ6ÿv7ÿ¬7ÿý,ÿà!ýçsz*ÿ%ÿ &ÿ”$ÿ¤$ÿM#ÿž%ÿT%ÿn'ÿD,ÿgBb½þûÃÿüâü› üüürü¸ü|üÝü üåüÜþýÿÿ?ÿÿ?ÿÿÿEþÌþ#ýä)þ20ÿº4þ67ÿN9ÿg2ÿú5ÿÞ@˜<R=d<#<P=~= >«=ë>h=,>Ú>ä=;Ì;¶;‡;N:ˆ8š9Ü86Â98©9?8÷8ý6K7I9ÿ8½7º8÷;2:…8š9<6»4]395$:½:“;Š>”<ó?#@A?u>9>E?g<”0Ñ I(8: .gÀV®/ öÑ v k(ù><‹?°>ñ?Y@ A‰@ú?»@‡?Ý>›>“@ÏA€@ˆA>BóA@A£AßBBªC§B+C¥D.B£B³@øB{BùBDº?ÿ7[9Í6×-F$†!È!  þ k +6-ø,¡'ê$g# Œ •  m  ¢ „! $ y) ¡( »' µ.e:16ñ9Ü;…B ]H ÊT Í] Ml ÁŒQ¢¹Ä§Ѓñ´þù…ÿ 7mP pE ,C ±> N; î6ý3 A4S*ˆ) ñ( u$ >$ §! # :$ Ì$ §'´%Ë! Ã!x   ‘ Ê Ô ¡ h-y<^ >#Ó'·)´$`.& ‰" ]!   › e R µ ·,+EëGã3¡)Ó,1è-H$ Ï  Ð#`#€0§>zBPCªCrB-1-ã.3-©-i-d,è,½-+-d,é,`,8-h-î,c,ž-u-·-¾->-î-,-=--l+þ,},4,6,º,k+a+6+o+¶*¶+$+/*û*x*¾*o*i*{+;)Ô*u)8)>(Ï(('‚( 'þ&Â&Ì&&Õ%Ä&q&…&y'Ã'“''''U'ˆ'b'')((Â){'ˆ((z(¸():)J(ÿ(x(K(Å)h(@(( )(•)&**5)y);(B(2'`''O'a'''—((("' (Y'Ÿ(™(¨&÷'4&À(s+ 6 XNˆ<0ÿ"6ÿò5ÿÃ,þÝþîoX*ÿÎ$ÿ–%ÿ‹$ÿ"ÿå#ÿ$ÿ®$ÿÆ&ÿ+ÿV>§Áþ½Ãÿ üKüZû†ûÏüüÙüDü£üÅü›üúÿyÿÿ?ÿÿ?ÿÿ?ÿVÿ”þ4þ™ýa$ýí5ÿ¡4þ74ÿð4ÿ&47ÿnA<<Þ>O;Ê<z;Ð>¸?h=þ=ë>8<î=„<‚<;;=J9×9 :Z9T6Á:t9v8s8è6¹7H8:µ8‘8~8¨;E904°*E'Ð$ qË É(¥7:Ô<4<Å?*?u>R>–@»=I>³;?*Å&¶+9= F*t0 Íç$%¸<;×>õ=¶>¢A @?7A A?Ð?²?q?„? @ŽB7@6C+AqB BTAàCaDPB¡AbAdC¡AáA§@ÌC DþCÐG<4‚('$ o"‰ Ú / F'è+&/ü(ì%)$E#¼ J U Ð þ š Ê! ›# # ý( ( æ2 c.W7>2M8ÔI ˆT P W f n – Í­¯Ëÿ 3‰kÄÿµ™*wÿaW ÖJ A ö< D; Í8 ¡2 ö2 S. ¨0 g& z% ò%T&P& ü% $ 2*r(A%š$”! ç! û 9 – ð  ©¾¡× ‚  Õ5 %æ&–*5"4(?&f  ® n ß "" /Fô>”,ÿ) Æ* 3,4#€" º$+)“>ªA+@iC'B_CA+B!C4B2D-CDDCÓCÓBˆBKC{DyCrBªCaB;Aó@E@¬@5@áAaAa@BD@J?)@[@D@:@;@±@«@o@Z@e@)?œ@‹@˜?Õ@ŠA@ÿ>?M@ÿ:??C=œ>ÿ¾?>T=R=Ó<<å=d=,=e=l;„:‹<= <;?:Í:k:å:T:ˆ:@9Ï8Î7&7W6ß5e3 3a2ì3å4‰673‹6 5t5464Ü4å4·4·4¤4:4*3ó4«5k4ë4²4â4þ5>4¡4m4z414±43Î343Í5 54’4'2í2z2[1”1¤2&11c1 10´0î0¤0m/v0h1‘0o0¨0è/ù/â0­031"0ú0{1b1Û232¯2*0ì1(0ó0õ0¾/;/2///@/>/N/Ë._-’-]-Ÿ-¡-é-ì.l.,-ì,²,´-.d,!,ê,b-ñ-æ.¨.ò-¸-y-Ç.>-ý.s-Y,è,‹,B,h,n---®,Ä,„,¼+ê*·*À+1)Á)ý)u*;)®*=*~)Œ)¾)z(ƒ((;'ü( 'Ä'ü'Ê'q(y&î%þ%A&°%%‡&}&‘&d&\''À'È'd'ˆ(@(F(( '‰''&T'Ã'Î(@(¯((Â(‹(ì(R(‰(V((‘))F(Ö))9(9('"'a&&!&Y&×'†'Á&›( '¿'V'›(J('³'ê'¹(ó+¥6 ÎPS<Á2ÿK3ÿ{6ÿy+þ'þ´qœ)ÿÆ&ÿÎ%ÿ¢$ÿ}$ÿ$ÿe%ÿ]%ÿÇ&à)AªÁþõÃÿPüü›üéü›üüaüüü«ü“ü«ü£ÿÿÿ?ÿÿ?ÿÿ?ÿÿ‘ý-ý=ýK"þë9þ2þž8ÿ©2ÿ3ÿÕ3ÿýB»=Ø<”>G=¯<Â<A?-==>Ò>'=[>k=]<z<r:“:Ñ:•::•:ñ8¹:h9³8þ8¾7?8‚84909þ9p: 8Î1w*«+p&t"  v ù ™%¯8]8ó<?=¬=£>Ä???Ä;:*€'ì'+9¸\U?Ò&´Ê ¹'±%þ8<ÿ?a>¥@R@R?<@bA?´4Ó+¾+* 2È=Â??IAOBÄ?ÇA4AlBðC?|AwC!DuD"AòA¿BúE+E7DáEÓ5~$  x ” %** *'¡+¶+m% #W"Å  â z 0 0 O ¹" Í$ œ-Ú. ô+ Ù.Ã3A5 ¯8 > < E áT Âa Wz ¢¡‚®'‡4¥Ò¸ªÿ¯v ^] [H éB *= 9 Ä6 B4 Œ/ e* Ú& À*#,,Ë/»    ¤#)4 CE ¥&†.'"Y! æ" O 4 v h_ ÇvS B&'H(=(o$G"Ã" ý" | w Î -5</t) y+K6Ê4|&‚! #$¤,zA{A»@.@ÆAïAv@l?‹AõB¡A²B±C:BßC‰C B@ˆ?Ê=Ð<!<—:¢:¯6C2Ì/,¹,.ñ/•-ó,¬+,,,)é'v(š)o*ž)“+†-7+ˆ-+ú.©/­1J0¤1¦1Ú2Ü4z66—7Z8M9J9Ã<^<b;ë<g=+<3;|;Á:Ò:•; ;Z:â:é9¸9÷8¯89Ž8‘7Ñ6š8\6£7J4“4d4M3Ú4ù5þ5´6l6d6æ6¯5õ5%5.5h5w4Ù54¬4k4í4l434r4ã3ó3ª3s3»3ü3ª3@3Í4433Ä3Œ3È3ƒ32(22y22¦1R2R32˜2$0–1 2-0î0d/ë0à10µ/ò0h/ç/ä/Þ0t0ž0r/ð/ö0ª0t0´0:0{0}0A.Á/»/+.».º// /B/D0 -Ù.P.×.^-ä-"-$-ú-r-k-+-µ-.-z.- -‘.#.¥.j.5.(.°.÷.q.«...4.6-ñ/p-À-„.F-%,°,l*½*?)÷)ù)‡)K)ƒ)K*9)ö)µ*4)(û(M'Ä'Å(<'”'–'L&†'Â&Ì&$ #V%$M% &^& & &Y&&N' &W''«(}(½'1(x'}'’'Æ'T(ƒ(Ä);)ÿ(ø(Â(Ž'Ó'ä) (º'Ò(Â(Ó(E(Ä( '¡'''Q'&j&â&&]'¨&×''Ô'Ú'£('ó'ì'#'&ï)+µ6 M‘@ÿÎ4ÿº1þÅ2ÿ÷'þ¬*ÿðx<+ÿþ&ÿŒ%ÿ‘#ÿZ$ÿ„%ÿ^%ÿ%ÿÿ(B(ÿ•BbÁÿAÂÿ—ü³üüüBüñücü¡üÔüåü$üÿÿÿ?ÿÿ?ÿÿþá ý?ý÷ý…!þV5þ{2ÿ+;þ:ñ3ÿþ/ÿ…@·>—<Ò=Ä==î;>>t=ñ=h<O<Å=<‘<-<®;¯:@<N:Ï:Í9Ã9B:/8ü9z8ê7e8G6Ç8|:+:´;»6/ž-Ô5 ¢FÙ*^  '–17w:‰=D>=î?Ü?L@{?=ÿ-¸+7+Õ3@>r26!p Ò#­+ß(i9Æ>4?‘>à@×?¶@¹Ay< -Å ¤  ØÄç(<Ð?Ž@B’@¹AfAîCWD'CiCêCCÛE%C-AûBBD†D®6±*Ì003ß5") *_3 8+Å#ƒ!1 F ] ÿ , <  A  Ù%š'«' ¸' ²+Á; â1‘0 6mC 9®H TX 5a [} 4žW¯L¡P~ ¨$µÿ¢—‘u gX lJ )D ú= V9 Ë7 4 t. Ö, X. 2 $ £ ¿/ u' ¨  ë# g%@)@*O3 ž(I*6&F%  D = e ãMI ? ¥ Î l!®  ! Î  c e I # —7”0l' F' §-YÿáE7;à8|6R4ã4½3î4‰6777ê6p6ç7Ö6É74‘5‹4Ž5D5»5A6'5ç5Ø5§5è5æ5w5–6#5e5­5¢5b4è4s4¥4j4©5"4¡424$3í4µ4g3~4v4²4Ç3”2F1c2d1§1±12I1Ä1™22š3Ð221Å0I2'1æ0&/Ç011+0h1 0ß0d/¥/¦/ê0'/¾/ñ0©0p0>0G/Ä/0n.N.D.Î-ò-È-Í-Þ-Q-Ý--\,Ü-Õ--›,Û,Ÿ,¯,¡,,ë,b,Ù-'-¤- .6--1-.-~-¯.o.d.^.°.s.t.ë.õ.à.4-í.(.0-¥,~,{+j+µ*ñ)É*H*(* )=)?)N(ü) */)û) )ˆ'Ç(?('’'Ž&Ã&Ä&&%‹$‚$û$É&8'%¸%‘%]%Ã%&z%Ç&Ç%W&‘&Å&Ã'M&&'S'F&”'Ž( (‡(ú))('Š'Ñ(N( (J(Å'ž'Ï(„' 'Ê&²'&b(!'&Ÿ&F'@'P&Q&ß'™'2'b(\(\'{',(j)0,i6 NQ=ù2h4ÿ²6ÿá%ý-ÿ:t+ÿÍ%ÿ‹&ÿ£#ÿ\#ÿ,%ÿ$ÿÞ%ÿÎ%ÿÆ'šD5Áÿ‰ÃÿüKüÕü üó ü{ü üáüZüü ü+ý¤ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿþQ ýïýÖýô!ý½0ÿº0þ 6ÿ´<ÿ3 1²<><É<==­<o=?·> <R;=.<»=?;D9ƒ:<ò;Œ:…:T:y8ö7¨8±9/8’7–7e8n88u9/1¥,á0]U âŽÏAA S”)ú7ý;;Ò<±>¨?E? >”@3=¢1{/g2.×0í-" Ä+ƒ/˜-ÿ=>ž?€>±A0@7B;ü0- #Û# ï ˜ R «-ƒ?ÖA¿B‘B@/A,B CDBáAsC DßCÙ@ô@þB>CñB°BçBïA¿B5@™@~;U1®)9-†8.(6$!ò  ¯ í   0  }! –! &¶% e) ¦)Ê. Ö. Ô2V5 ? VD¿O ,X [ —~ ð¡ E®ÿ bˆ “Ž ¦þ ¥›ÿ ‡ g O ÔG íD ÉM i< ç8 ™- Ð) <8Ã# f' w$ š #  % G$ $ f%!%ö-a*t0 +h(#Î"  ³ yÅßÒ Ü   !"= \ %X G 4 ì €6M/Ã# )% *ô<æ>''Ð  Î ë"&í?8@/@i@5@™BAç@{Ao@´@6@í@1?J;D,¡$w-4.Ï1ô3q4š3g2T2f2c1m1¡/O-‘+›*n*‰./)Ó-{2‰4°5¹5>2Þ0w0j.ï,Í,Ê,>.1-í/-§,i,ª-j.).B-Ž1Ù34Q8?j@YFÝ_þ’„û¸mýœxýg†ýGkýtPÿ1>û7À3ÿ2W-\+H*º+º(.)ô)Ù*j+î1¨55“6…76€695F5¶5à5b6`5ï5ã5'5o5o5æ5454m4t4*4£4i424+3­4y5!4¯4)3ç4­4x3ÿ5A3Ø3Ÿ2c2j2n2o2®2$1¨1–1W1ç1f030©11*1*1q0¢/·/0b.þ/å0¦/ã.®//ç0/0ÿ1{0à1"150 /„//ÿ.…../³/‰/Õ.M0 .&.ž.Ò.W.¢.-ç-h---¥.%-™.)-]-ì-î-k..-f-;-h,œ,–+ +*,m+ò,î,÷,ì-¬,l-4-÷-i,¶,>-5,3+û+ð)ï**H*y)ò*x)¼)ë)õ*)Å)Á)=(B(y'Þ('}'&Û&Û&ù'~'%È&v&Ô&Ä'O&ú&W&P&&C&Y'½'<&ö'~'Î('z&Î&é&&N&Ý''(c(){'(T(ë(²(=)9(¸'€%ñ%‚&2' '’'û'‰'Z& &Ý'&P&g%ï&'8&Ø'«&¡'ì'ê(s'ì'»(o)×7 PÃ?ø6Ð6ÿ44ÿÂ&þu(þ7r:+ÿ×%ÿ–$ÿ"ÿE"ÿÝ%ÿ_%ÿW&%ÿõ%àDdÀÿJÁÿOüÃüÔüCübû7üZü”ü”üüÙþÀÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿþÝ þþcýó(ý¿.ÿÌ7ÿë2ÿÜ6ÿ®>ÿÕ9›>©;6;‘;O<Å<7<ì>¯?t>0==E?=.<v;w;è;T;:P:V:À8ß6É7ý9<7;8-7w8?8A6ª9o9&/½,Ÿ2 œeó£®Af )Úk‘!“8 ;>=0<²?–@>T<>>/3'1,9·1\-ƒ-Ä&$Š-d2Œ,{>B@@<>C?‡@E?5c2m3†4ù:÷)  50 ¼ Ò9Ï@¬>ô?a? AY@£AkCC{?åDZC_DC-B¯B¬C²BºD>AEBp@Ç?@H8$-H(37+*4Ò'z$À"ð Ž ` æ #ˆ! ý" ï$à$ —' W8ê5î0Ú4e2 º> •CDC6J “T œ] Ó Š› Üÿ pl 9ˆ 4ÿFÿ zp êX Y éH æE ‚< L[5 ‡1 -* “)Ñ# ™" ’"   , " À$ õ%á#y$†&~',8 P.¥-H*#Ð ô c Jß4 ­¸ƒ 1Ñ #Æ% Ñ!  ƒ.11õ$ †" ù*x2«D0.–%…!`  #v0èA/AK@î@jB @é@±?î?©?†?:?­>z=†" X R.Ù11C3à7L8=5 4L44J3Q1à0¤,Ñ+¡)D(B)õ,,J1©170à1Ü1Š.å,‹+è,(,^,V,À.u-(+G+ò,ª,Æ.4.j/‡13M2p8S@A¿FTYþÒtü &Xþ?…ü ?wür[þôGÑ<µ8Ó3d+R+‹.Ù/H,R,¹0£/z/—*ª%0")#Ñ+ 775ÿ5G4¿535m5¯5®5ç5*4ê4¯4÷4ª4¦43µ3æ4+4%3¾3t3¿4(4!3ò4k3ï344A33W44E2Û2è2µ2ó2Ã21Ö2 2’21ß1¤2]1Ê211{1¨13/Â/ù0x/r.ò/e/Ü.×/¬/G/¼/ô/ø0£0«0ï0á1t0ó1207/D0v0&/».Ò.U/V/W.¥.“/”/%.Q.¯/].é-ç-î-µ.ï.ä.˜-s-ž-_-d-,Û,›*w,#,Ì-•-™,Ù-¦,ç,¥-0-N-¬-i-­+«,j+ê*ô+.*z(š)W(š)B(Ï(•(B)D)ó*u)x)N(¼'t'ƒ'Ä'('J'G'—'E'†(~'v&%ù'ê'«':&Ô&Ó&¾&þ&z'4'¾'5(&(5'x&Å'G&Œ&]&s&”&‹&ë()) ())((:'ù(A( '×&=%I%''Ë(Ì(S&g%ï%é%§%«%%(% %e%µ%÷&·&ô(t(§'D&I'E*6 ÝQ>r0ÿÅ8ÿÚ9ÿ„)þm.ÿbvÌ)ÿÿ%ÿ¶#ÿË#ÿ#ÿE%ÿ=$ÿ%ÿ $ÿu&FÕÀÿCÁÿIüé û%üŒü üHüÓüFýøüÖü‡þÙÿÿ?ÿÿ?ÿÿ?ÿÿÿýGþàýE$ý‚7ÿ²5ÿH6ÿÖ8ÿ#5p8ÿ]B5=Ñ<Ù<—=;y>[=t=¶=u;U;=<™;‡;ò<²:U98Ê;„9Z8×9Ê86Ë766@6¬77º7i938¯1g.i0 Ó^ îz9ˆ | 7  ¿!59Œ<=˜?'?£?ñ>F>¡>ñ>ð85/WI°1=/±'5(­*™*‡1P>ð?¸>Ã=H?6?F=²1­2í6^–K@ö N ~ é4?a@aAÈ??lB&AÓAtB:AìBBçCXCiCñA¶AkDcD±D¢CæA²=×>­5Á*"'û/1'ÿGæ+·#!ù D Ä I ô  ò$¹&,n&ë& (* A.7“7 4±;êB1M dU âc ¦t —‰ I| X_ 4 ¯…ÿ 2t @b »Q H æE ¶A 7 ”2 )0 ö- |+ —' ´'j$ä" 1# Ã! â Œ" m »" ‹&/' Y's,®- 3 ÿ-3)!J N»?•GH  /  ;/"â ß" ª Z*"% X  ë$ u-©6»1º#Q b! U! %|8ÐB–@ÙA@`@ã@&?Ã?½@¥??>î?r?g=O( # 'f0t061e3þ3ü3"0C4I4Â3˜2œ0,-&+µ+y+,+P.++M12h3_32r0ˆ. -Ÿ-Ÿ.y,Š+[+è-†,*â,T-†.‹/î0 -…-?/p5¼<‚@I?×EÛOÿÑGöeý ÜQÿI#@+8ò6a2/.!1®3N4³2­2•0v0¥-ó,)s$º +t6@5B5B5D554t5¨5y4ù4õ4t4¹455*4ì4-3´3â3Ý353õ3ô4,3^3k3|2Ê2²373M2Z2Õ2Ÿ1ï1x1€1È1Ð1À1%.ö0ä1ï1¬1j1c0Ý0Ï191h1¬1¦0ï0¸0z0ê090¡1X0h0¡0ü1<0¼0D0ô131o1;1q0µ0r.š.‘.ú.ö/~.Î-Í..^.. .È.L.’.j.'-ë-à,µ,a-ì,ë-+-4,¤,³,¬+!+#,+r,$-°-ì-ª-$,ã-l,h-7,Ú,$-«-¤-!,*,**Š)”)V)I)))÷)ª*{)Ž** )(Ð( ('ç((''<&Q'?&O''6'&%±$|$Æ&±&û'%û&„%Ä%Œ''µ'K'M(,&Í&–&T&Ü&&Q%À''¡)R(R(ß(‡(9'†((E(ž(b'¤&·%Ó%K')E)&ª&)&m%²%&q%6%0%ð&@&±&ã'Ü'x(³'Y&‘&“*6 šOÌ;ÿW4ÿ67ÿ‰4ÿp&þk,þGx)Ø%ÿ•$ÿk#ÿŽ#ÿ$ÿü%ÿÄ&ÿ%ÿž&ÿ§H¿ÿÊÀÿ€üºüÃüÔüò üüüRüüéü(þÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ{þbý7ý: ýÜ1þ7ÿÁ6¡3ÿ?7b3ÿe@À>A9]:9Ç; <p<¼=>>%;R;:S9Ÿ9Ï9Z:é:ï;:Æ:¼:P9:Î7R5Ä8;8E7K6L9¬9s858Ý1Ø*Æ/ yB ÁU 8 k  ~ t ,+¯$„;>Œ>Ý?@×>Í>=Õ?E@›;¯1ê9ÈNîB17*U$}#É"å8r@Š=•>î=Ø?³>â:ø1÷4!7¬lá£Dø + ( â!„0>Õ?è??î>?ŠA!BZBïB ?YBãCØF^B¾B$BåC¬CÄE3EnBâ@ƒ?06v+-)h)à,š+ &•!0 ° à ³  D  þ# ¶% -# :(î( µ- X. f0¸:é8ü?8BÆK DX ;b j Ÿp ¦c \ Fn ûo Ze 5S8V¹D ÆE ‰< I< ¯2 ï. –, •+ «' ]% F#  & ¼ ì  «! Í Š$ $ ^$ü'H(Ë)‰14.ª&€ ' # ^Ò nl ò C 8 -º"" ÷ Ú" ­& v  ! 8+$/.c$ ® Ð è €" ­*ÔAr@(?é?6@(?ø>„>3>ï?â@¦>±:|'Ú!! )á*ñ'ˆ,/ð/é.5,·-B.,.u. -ä..+ö*L*6-K0Ð3=3ã3q2Ï.}-¦.&.%.à0Å0B--[-.`.L/0m/³0^.±.³/ 4˜:~;/<f@eE«IySÿPAZ;Ó9ë7ù5$2Í1ð/ì0Š..7022l0|.X)h&©#ì  ·-˜4Ê5 5D4É4÷505p565³545j4«4ù5y4ê4c3C4C3¼3¦4;413«3º3}3º3|3;2‡2Ô2Õ2Z1f1ð100,10j1m0M0þ1¬1¯1'060o0^0Å1¯0ï1³0w0;/Ë0½1+0œ/O0P/v/«0m/³0ë0á0°1t1;0N1,0«0/”/E/p.û.É.^.Ü.Ÿ.+.^.Ñ.Ô.‹-ä-¡-k->,¸,6,!+ª-),~,ì,¿+¯+u,5+ð+ü,d-0-h-æ,«,¼-ª- -a,™,¸,°.l./-m,#*™+>* *2)‡(È*B)À*K*@* * )J)K)a(Ü(Ç)B(Î)(™'Š' 'Q( 'O'8''q&h%¾%€&C%~$Ã$F$Ë% &<&Æ&1' '&Ì&J%ü%Ö%Å%Ã&’&B&P&\'H''@'Î'V((t(<( (ˆ'”%ì&è'ž&­( &Ø%ß%Ú%³&Ó%Ï&&$„%(%ë&à'k&~(ä(ª(h(µ(²)v*Ì7 WOÉ<93ÿ„6ÿ¥1ÿ%þ[.ÿn~¾,&ÿ%ÿ•$ÿO#ÿÌ&ÿ]&ÿ]&ÿ&ÿV&ÿ×J#¾ÿSÀÿüØ ü ûŸüþ üÔ üZüüœü üÿ¤ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿlþjýkýmýE-þü1ÿ;:þN7ÿý8ÿ 8iC9=Õ:#;K;Ô<{:i;=§<);É<A:Q8Í:R:¥:g:]9G9Á:O:›:Ò8J5 7—7I7ø5Ó4B8'9*7p7™-Ç*c* Ê5 º7 ™+   Ô%[-0,S':<5=×@Ë@Ë?Ò??—@ @+@y=uEÞUR Ù_ ªG n@`(û&}.­? ?°=µ>î>=s<ê:­3þ2…3Ožy-8÷ · W ›,}<ç?Z??Ï>?Ž?Y@a@ÏBVBCÊ?àCÜAäB)B¨A­D$D$D)Bò?>Q2©(_-v/“)ö+,i' ÿ  í C"  ­ ˆ  é! 8$ z$ +L-' ç4%3¤3¼9s:0<ÄD þM óO ³W ‡W GZ kT ”W £\ Õ\ Éb #wªH‘A M ê< ©5 :4 Ç1 k.ð) á' ­$ ì" —" T + É  D Z ÿ Š" “&G& '3-À0ì.œ,'y ü ’ ºû )¸‘  £ á$4 Ñ# _ k$ "# ¨! ˆ,Ö/"+Ë&˜ A # ® 4" 8A?>>„?¶>ö?0>Á?¦@h?c?#>Ü>äAT>û;<.Z$4);-m0ž/-Á+K'0)T&‹&?(¶,-S,^/{-U,ê,-Þ1o35H2¤1¥01/û1Ÿ/-Û-F.|1f0.-y.³/.Í161¡/¿10©5q8’:7ƒ<Ç;MCQHÔC=Â8ë6ƒ5'3 32†0^1N.d.Æ0-ž+#+U)]&\%F%Æ+z3¡3Ø5A43ˆ5k47404ð515(504}4°5'4«4«4º4ã4]4¥4u4,3ü3{3r3|2Ê22Ñ221é1¿1ô2;1C11r0ì0Ÿ1+1.11Þ1\1!0a01‡130ñ/Â/D//½0|0¿1#0-/´/¨06/-/º//õ/r.Á/±0«0x1­0//ˆ/¯/.]/H.ƒ3!/Z/ /m/›.L.&.,.2.#-à,è-q-Û-Ý-)->-(,ò,é-®,¹,,?,u-i,«,â,÷,¢,r,i,ï,½,¤,ñ,±,;*ð*¸*ú*F)†)ý)E))8)~(ù(|*1*€,ú)û*m)*8*);)ç(t'x)³)l)0(¶'y'<%þ':'0'2&ÿ&5&%Ì%C& &&{%è& &Â&Ã&Ã&'1& %ÿ&Ò&Ñ&˜' 'A'~&s'I'8('·'ú(‹'Ö&ª&ð&Ð&[&’&™%×%á&R&6%7%$% %ƒ&û&»%â'Ÿ'®(£'b'x'„){6 ÷NX<ÿ\/ÿì7ÿ"4þÞ!þ+ÿê3@'ÿ!&ÿš%ÿL%ÿ<&ÿå&ÿ„&ÿD&ÿý(ÿLK¾ÿÑ¿ÿIüÉüJ ü2ü;üÐ ü üzüóüüEHÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿ¾þûýÆýNýe4ÿa4ÿ.9þ½;Å6ÿ²6èB1?&;&<;»:½9‚9ÿ= ;;"<.;š<Ð<;ë;i9®9<:099Ç:9·59h8´9z6ˆ7J7¶6‰7!61,* ) %+ œ, þ$ˆ) 32]+S+p>F@7@ @ó@9>È?±?š>]D\RM‚ f Š_ VS ê?Á6Ý61Ò8;:Å?'=ƒ>7>°=Š8W2T.¥,:ÑBg,é `'ö$5$å/©<h>á>Ÿ?ï?…@8@8A%AàB7C@#@,B¤AáBëC!CYDåDuBwC»@º<˜0D)$*ù'”)ƒ1–'Z)" E I  W O š! / Ó! +f(@(é.‚. 2D75 *; S> /F 2L ÇN YO nR …S ©R HV N\ShLaE ñ@ ý= > %<ñ=©.  7 )) O% ^$ ½! ¾ "" ¬ 1 û ¹   ? •(Þ'Ã'j-S,M-+@'Í! ' Õ £ @º*÷  q ü   j L"  é" Q" )\/I% å# I U Ú Ÿ 1! *4@@«?è@R@™?2>C?+?r@›?0?ã>±>w@¤@><š6<"A$á'Ê.Ÿ/ 0f.(11u.-/!00@1H6K5S1Ê8A»J1]^UQ<%833S5Ú2÷/í-¸1{424%0s.|./.I/+1J+‹*Ï*‰+(¼.º22Ö7 5²3Á32ü311Ä4b3F16<³3¶4¯6y4Õ5—4 /@-À+~(º.$5_6X5J4À4°4ú4Ã4í4E4}4¦4­574·4ø4ì443²4(4 3à3ä3ä3v3©3i2Ð2Ç3À32£1¦1¦1ã2­3A2C1Ì1¦2ˆ1Ö1-22•2h2-2w1+0Ì100ª0{0|0;/Ã0t0õ0k/s/¨0«0¹08/ò/ø/ó0t0C/Ú/ñ/è.l/m/‚/û/ƒ/§-þ.û/@/.ø.Ï.‰.œ..\-ã.a.+-+-e,«-X..©-G,ð-,ú,0,`-n./-ï-,&-/-+-W-•-,!,ì-&+î,e,0*ë*x))A)I)Š)‡(ˆ'É'È(H(r)p'þ(ð)½)õ(q) ),((ý('y(£(½(5'Ã'D&À%Ü$Ô%'/&î'i'%'e&÷&÷''&½&ê&ô%õ'«'·'C&û'<&ý&r&ø&'„''Á'ø'm&Š&Ï'&Å('ã''''S&R'œ'Z'Ö&&]'°&×&*$Â%ª%Ä&Õ&î&;&'(Ã(d'%M&X(´6 ¼Q:È4ÿ³7ÿ¡2ÿ²'þ§+ÿê†4ÿ½+ÿ†'ÿ’%ÿÕ%ÿŒ&ÿƒ&ÿÅ&ÿ &ÿM'ÿ–M ½ÿ‰¿ÿüüzûÆ ü"üÞü‚ ü`üƒüÂý£ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ…þbþ8ýýü1þ»2ú6ÿ|7ÿ†2ÿ ;ÿú@Î? ;†<y<)98:k:b;@;N;V:Ð=O<:K;9é:œ;:«:r:=9}8û6Á9M8Q8Â7B7Ð4ˆ7µ7Ç6}-ë-Á-v+T-U+n/Â/h,¥&¡.…@t>‰@b?ìD >ÔAâ?=ò^ { îæqà\ ÒK K ?> A ­=:Ó>s8º>€?&@“@-?´8Ä3d0v+Ÿ4þ3Ã*´!‰+,,¬-F3Z<h>™<n?™?œ?Ë?ð?¢A'AàC%C!CC—@¥BÙBàD&CîDåEkBvA:´-Þ(à%z$þ$5!Ò+&(ª P   { ¸ f ï"ø! B('# Q( #, ÿ. º05h8;~= fB J £J oM GbÜf [Q ÉU@N¸LIàC œ? Î: €8 í3 4 ¡7 Ž) €) {( l# ™ Ø < i 6 ‹ Ô ê  Q'”&¥'¤){+ó'Î$Q%ž ³  ß øgg 8F ì ÿ ã ñ # q ¬ á# ¦& “)Ÿ'ç" k « Î F  '#M6Š@?@ ?¨?ª@j=X??ó?*=÷?®?3>ñ=î?²>J=ö9£'!$p)Ü).?/æ0g,e+"*c+-L1¥9 9.9};d;¡<m>+CþDvFhEgEÀDìG“C“:m7;666525M2È/ç024¹5‘52I5ì:°9»<œ@¯B$@GVYÿúK®EBÁ=;p6ï5ý3£34ö6 5 4Û4ƒ48/î*#(")®4œ56 6H55B5?44ú4B4M5,5º5û5:4±3ï4r443{3ê3w3²2½3A2ù32“2‘2T2110¹0é1²22B11i1î1¬1¯1î1r2m2"221œ1U17110q1 0ø/°0ê0í140²0ë/£/†0º//Ã0°0?/ô02/6.†/0/ý// /B.µ.Å.€.Ñ.‘/..‹.¶.'.n-Û-!-i-*,ï-+-*-#-·-¥-*,6+Š+µ+²,p-?,~+c,,%,!,o,ç+¢+ç,·,ã,j++*p*ñ*û*ª*¶+°,:+‡*ÿ**ó)ø**u)½(Å(„)D(³(ó(r()J('J)v):((;'x'¹%Î&7&¸''Œ'l'¤'+&D&³&¯'D&Á%ù&±'x'u''º'<&õ%È&'Ã'G'€'}'q'>&¼''&È' ''š&¤&8'\((W&ä%©&&W'&Þ%§&l'”'&æ%C%ê'“(('=&F()Ç9 &P9K6ÿæ6ÿk0ÿ$%þœ+ÿÛœ¹@ÿ11ÿ+ÿe*ÿ)ÿ‹(ÿÌ'ÿL'ÿM'ÿÜ'ÿ–N”½ÿ ¾ÿXüŠüëüû üYüSüEü‹ü ü‚þÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ~þZý_ý†ý¶-þ-1þ'9ÿY6ÿY6ÿ’9ÿ˜?‘;–;I; :v:ë:š:˜:<:†:Y=w8—:à;U:Ù:9­:q:s9w7Ô7Ñ7 8Œ5O5Ÿ3µ9S6h56U5L,À(,Ø.‰/ì-ã%ž(Y#n#ì1^=Ü<w=ôAÔHlM ÔR ~S ïK l` t Žk —eFM D !C Ÿ=ôB `H =C =›62M9 ?Ñ?<@e:800Í.]4±: ,$ô)W7îB06â>M?N=ž?@~=?„>½>—?ÌAC A@î@kCPAÞB˜CDšDsBþA;;.&€&Ð$Î%î#$œ$}!˜!™!!!û!   Þ%;$ /" %‹' '' ƒ- 1 1 ®3‘>">.;Z> fE ÑL NH d]ˆJ XU ]WS £H¨LT œ? ë= L9 gDb; Ý, ã' Â) " D   Û * ý Ÿ  ï ê G! ×" ä" «'),˜&7!J!`"µ  0 ø.  » Q    ‘ ë Ð @ â% í&m)‹#Ñ    ï O 7 ú'B?AÞ?ê<>l>0>ó>§?ü>ô>a?1>¾?ó=ö>X>´=ð<L/å Í# $L& +#,…-ë*f)'ž+Ð-1á8È9Í8‹9±;¬<X<W>n::±<*>B8Ê:ã7E3<1ô0Ë-r,&+­)m*i(Ž)0,ž+Ó,­,Æ/¦8â:œ<Z>÷?>‰FµD’:ø>O=Q:B42·0ƒ262Ò8Ö85$6‘4–1·-*U(Ú/@544Ç5É5ú5„4Å4Å4 4Â4ê5-5s5:5f2ý4$4¯4·4!423)3¶3w2þ2ˆ3C2A2Z2‡1Ù0ò0Í1O1ü1Å11/1.0«160ð0ª0q0ù0ð1.0·0_0%/õ/ð/?/é.Ç/=/õ/l0w/¯/k/t/-/ù0}/…0~/?/Í.Í.û/~/õ.Â/‘/Æ.õ.¼//‚/.Ñ.Î.–/).Y.â-á.ž.7.^-£-²-õ-,ú,¶-®,ö,ï-ü,,ï,w,r+µ+3*ê+(+²,3+ñ*í,+)*ë*«*»*{*»*s)þ*»*z*|)†)) )J)Ú))ˆ(ù)ø)(…(ñ)h)ú)){(À(A(ü(Ä'Ò(2'7'o&ö&Á&u&¸'z(í'ª''|&D%Å&t&T' &¾&Û&A'D'&Ä&³&‚' &Â'º'-&K&Æ&½%Å%Æ&œ'°''„(˜&ä&Õ'](–'Ð&µ%j&›&ƒ&F&%v%©&Q'˜&Ü%%‡&b'š'³'}&ž&š)‡5 “Pƒ9ÿ^1ÿú5ÿ4ÿí$þ‡)ÿƒ‰„xÿ¸=O53Ñ6Ï<R:à8h8˜7^Yk¿ÿŒÀÿLü üêü™ üCüÌ ü üaü9üJþÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿfþ ý5ýôý¤1þî.ÿ@2ÿÔ-ÿ|48ÿ@n?r:Ý::õ9°8-859ð:•:K:Í;ø9);c;!9Û8i8,8â7°8B5Õ7ƒ7f5>3c5F4ý58v7/5ý3ç/'¡%æ*©-],J![%è"—)44Ö;#:×@I Üa ,\ ‘l ^l ßx Ï_ ®Z ár[+AD ,J w?!C 8M ?P9+4;4.5b>œ=J>a9€2„4)/Y3 >t'ó(~0â@±A§83;Þ=¤>Ê=è> >Œ@…>Â=m<ì?–@"B!A¡AÍ@å@¥@­AéAõBú@[>Í:-B'%’$#D"@#(™"l # /$! š w  X# ç(2) ) *é.¾.þ0ï5 FAÓ9ä81< ñC E H pH G cI ONF ‘B y> š= 74142( X' ÿ, ( ±# }! ­  n# ,! S ¬ Ï# v" # G$:$µ$») "~!¯"$ Ð X Ê A § Î   à ! € , |" ÷(¥#ñ b   º 9 F#Ó:@¼@o?¨?i?«?x>0@ ?º?|?.>;>¡? =¿=®= =:;5G \"´(])!'I,|,h)d,v+É*F//¹5á6*6a8H;k<¡;Õ=§8ã7„:·=Í:ý:`7Ï3º3£1ò-Û,',\,ï)>'¹)ó,¨-$.;0•3F4ü9;¢;Ñ=f;HDXCw>->b9ã5Ê0ô/û1r/œ4Ú4þ6a6§4B1,¨(9&6'13L4Å5Š55w4ñ4û4F44 3Í4¿554ë4ó4³444´4å4¨3í3¹3p2é4|3H3>2H1È1›1Ý1.1î2c10Õ1”0¢0f1s21¤1Ø2'1 1§1§0õ0˜0 0Þ0º0ó0µ0¼/¹/x/N/‰/ô/º/,/ò/®0:0m0 06/„0ƒ.Ã/¿0¸0³/¿/À0w0/È/N/Ž/T/È/]0 /_.á/š.é..&.'-…,£-ï.±-ñ-¾-y,í-}-÷-0-7,ç,¨,$+ê+¯+Ó,«,ç,I+â+å,3*³)ó)Â)Å*¼*+i*()…)Š)÷*{)K(È(H((I'É)ñ)2(N(Ä(Õ)()´))}(ò(0''ð&þ'ô&­'8%ì&†&¯&º$ñ$%¼%—%H%—%ì&„&Ö&†& &E'@'„&c&û'¹&¶&ç&s&¹&q&ó&¾&F'B'h(;'·&á&œ&’&Ë''B'&å&œ'&w&K&Û%±&ò'£')&,&§%÷'Ó('ù&&a(×4 ÚR :ÿ0ÿ²9ÿž8ÿÀ*ÿ 'ÿZ%ýF&þÿbSõqÿ[ÿN!þÉ%ý$þª%þä0þ:0ý—üšüÙüS ü üeü‹ ü2üKü¼þÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿnþýŒýŒým+ÿd3ÿ4ÿr8ÿZBÿh61B­>ú;f:µ;>9¬9(9ž9*:(9¨;;<á:¢97ß9!8c7ê998q88Î6m7"5µ8:7ì6ô7m6~4†2ð4%.Q""ï$ ]"f"*#§%Ÿ*E;•<P:"J;S Êf _ Ö| Hn ×p ðo —c ¦^ oZK’N Ge!W R ÌE B6:3•41´8u92;Ú:Ñ1³2õ/l/j-˜(ú*«1¥5 <ˆ;T:Ý;ž:8=Å<>‹>k>>î?Ô@/?çAÞBi@²@2?¾AéAAµAƒ?Ÿ?i:i,Ð%—&%š%$##Ó!(  «  ´! „  « ƒ  Æ&ø)ê$ Î& -,b/+·17(9 :ÃIª@ "@ b@ ìC yB G oI ‹D ÞC Ÿ> o: ÷5 £0 ‰/ j- >( Š8]( [' ! ´  A ï   ­ ©  # '$X  ã  ³ ¨  ©" "¯ í œ"#[Û   ¥ À ¤ t E < '$ß½F ¥ p'¢!“ î C N   ¶  2~>?<<Š?8@">À?*>ª?[>>½>¨>g=w<D<~<Ï=}<:ê' 3$+'Ç#ú,/*ï*Ï(—*)«+D.2T4ˆ78ä;Ù=„;=7¸6‘;<‰;Û9)5‘2D1K/©/#-¢.`,i*( )g+L+I,ó/¨25…8“:;m<´=àC'?_@=÷9p4/-.£0¯4ï6õ5s5¶4‰1"*Á'þ$+ô6„6D65Æ6@4«4†4Ã4<4F4|5´5k5;5q534á4r4o3²3á22|3ó3(2@2V2…1¥1ã151l1>00¼1 /i0s0Ó1ª0®0*0s0®1 0Ù1'0¡0ö021n10Â/‹/†0z/ .Ä/:.é0$/ð00/°0121)0ô0x/¾/¼/v/¼/ü/ú/L/¸0p/¾/?/E07/ö.Â0‡00O0/.å.l.9.ë-ê.c.\..-í.¨-í-%.o-0-1-1-/-¨-Z-$-š,¢,î-m,²+e+@*;*º*)ñ)ò)z)€)‡))*0*(X){)?)G)Â)R)Ò)O)-){*É-=)v(»(q)G)j(,'ú'ê'p&v&¿%Ì%ú'('«%÷%ù%÷%÷%%%,&X%Ô&%™&%A$Ð%ÿ%ý&'L&%C$ø%‚%³$þ% %°&k&i&'>''’&x&ß'…&‡' &&Z%á&&ž&‘%¨'3&Î%¯$H$ÿ'c(T('q& %à(’4 ®R;ÿN0ÿ:8ÿÞ4ÿ»&þy+ÿ„ý þ¿ÿþÐÿ‰`ý ý ý‚ ýû ý° ýÉ üZüâ ü= üT ü; üd üü©üÿ%ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ^ÿÀþ¹ý-ýS,þî6þ´8ÿ 9ÿ®4ÿ¬6ÿ¶= @1<><¿9M9¸8á9Û9©8ª:i;e:];Ø<$:x9•87_7+7¤6ä7¯7F87™567 4ÿ5D3á3í4(5¯742à&}"“G<ü1A%»(P6—:@:‚;»T b xV ØV sX üQ l Š^ `O ãJ üh/µ^ vL TF ¡X ­M K=A>÷@#@ç@¯BmA~?D>Ö@ýB;CAÐ?ú?:i-y'z%˜$¹$Õ""Ï!Ô q![  Z ì Ü k!Q! ¤  N" Ý# z1+/ -23A: —8œ558 = P> 8 Í::N=Be?ç>6Á4 3/ / -/ p0 5- ¿6;% š# > J  C) ) " ö K  U" Í  m Ü @ ¶ e È  Œ![!t!ü#š"  ¤  Ö « Ë „ U ( -Ë)A I  4   » < ´ Ï+×;‚@9> = = =ƒ@œ>þ>L? =“>q?§>>=ð=À< ;Â<Ð=8;";¦2! ?!.#ö$^&Q)À)¸&û(='€*401n3I43}6T;“:Ÿ:Ë6T5Ó8u:o9:74 1Í/v+¨*#+p*Í&%„+u+B---e,l/Ö35î;§:2:–:>Ÿ?=·<;L7õ0ê-ç/’-à2–4ç4Õ13;0o-*(a%%é4Y8v6 5Ï5Ç5Š4F4ö4ƒ3ù4y4´4½5ó4õ444w4½4494q47353?2Ç2h1Í1‹2L1"1ã1–1b0«0y0”0U0Ú0Ú1a1/00€1]1[10Ý0²0B/¯/q0*0“0’/Ü/M//8/x/{030'092¸/9/Á01<0/.”/L/±/É/÷/ë0½0r/€/e/300l/†/[//¼/#.Û.à.,-ã-¨-¤-å-w-}-"-&-X-/-(,Ž,x,!,,f,å-c-,,`+¨,4+ô+¼+ü*A*t)ö*1*ð)G***…) **9)Ã))ü(Ê););)J)h)µ)ª)‡+)})~)¹)¢)ú(Ë)v(2( '­'û(5'h&v'™&þ&Š%Õ%½%Â%¼&M&/&•&2&2%¯%ð$ü% %Ž%v%Á&x&_&Ð&U%¼&%È&%ü$ü&3'@'Ã'ƒ&Ò&'&É'&ñ&É&F'&Ü&”&Ê'J&Û&[&3%û%û$å%½&'Ö'ž%Ø%X*Ÿ6 »TD=y3ÿW<ÿZ9ÿ@*þ)ÿÁ#ýáþÁÿÕÿ¯ÿï©)ÿ þØ ý|ýÑýSý(ýÓ ü²üáü[ ü‘ ü¾ ü ü{üÅýÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿeÿ¡þAþÀý*þž7þO8ª7ÿ55ÿÆ4’<©@â:Ì;:c9m8(8ê8ˆ7—9T;‡;;É:È9Ç96¡6ž5í6›6+6ü8¢8’6Ý4^4‘2Å1 1k3í4X5D430o)Ì j:.f,¥:Š<Ý<-<Ì<WI T ’Q zb Q_ ëu ¼i ¶V a ~} œt Z HW æV ÓT ÄM !Ah@¾5À4!3ä2à4D2˜7m:=1z(B ø"Ò#9)Š-Þ4d;Û<Õ=b;Ö<œ>W>™@?¤A@ÿ@“?F>'@6?÷@äA*A0B­BûD¨CG@žAå>/Y)À(g%Y#\$ "ú"‘%""U"¥!ã # f# Þ$ æ&$ <#š)$-*,l2 ÿ3Š3²6[9x; w:¤5ò8u=½4º6<N5 à6 801 •, ê( ½+ Û, ¦# !  ó " -! … x& v/ ®"   v  ´ =  — – ! Ÿ#X"  v V O × ù ¬ É +"€ Άu § ¯  h 4W ” y w8ô=Ø?F?v>ƒ@q=>s<Î?:>Á>ü>h=»<‹<@=ƒ=<z=>w>]<6 " +"["$Ð(Ä+)(/(þ){+±0ˆ.T0ƒ0á3ƒ478ƒ9ö8z5a2Ÿ6Ò9ù8Q5w4÷//r-ß,-<)¨%õ&•(¦*d*È*Â*+¯/ˆ2ï6·7®:Y9i;É<q9§:¤8Æ3ë)Ê'v%c*F1h4E2x.l/û+)K&n",)6Ä6=6O5›54Z5_5ˆ4‹4e43Í4·5{5t4Ç4C483Ê3°3>3o2€2@2C1Ñ1’1Ë1Ä11¡0£071E0$/Ý0c0Ó0e/„0r0²04020r0ò0¬/8.÷/×0+0?0/Ý/ /‹//>/w/0C0é/ì/´/º00.Ú/ .›//¼/ú/|/F.ü0:/h/w//ë//Ž//a.Â/Z.).$-›-+---è-è,À-F,¾-2,è-*-¨,ú,ò,é,¹,x,þ,²+ý+Z+¨+Ì+¼*ý*ù*»+9***m)ú*ü*{*9)(É'Î) )K(['Ú'À(((ÿ)~)ø)þ)õ) (|)5(º)c*±*s(ý(7(>("'\'¯'F&o%¯& 'Ž&& %»$È$Ê&–&œ%€&&%Ð%†%7%c%q&‹'&T&Õ'‡'K''õ&ú&&õ%º'5'°&ý'‰'L&û'ƒ&8' &f%ä%9&\&Ò''‹%²%¨&#&y&)'¿'ã&ò&%Ü%˜+:6 |TK?)3ÿã3ÿ+2þý&ý&ÿ@8ü ûèûûoû÷ûû7ûû7ü !üü!üø!ûöû´ ür ühüÉüù ü üJüzübýZÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿdþìþÒþ¡ü'-þG=þ:á;ÿí9ÿœ:¸<¼?´9Ó;4:ê8ü6N8ê8´7¡9Z9€:“:§9:"8S8\5ñ4ä5í779:8U6æ6Ù55˜3ï3h2’2š2Ñ0Ø0'12>2>1Ç:Ï,54'7E8Ê;ÒAIM ðG ÞV b hw ác Qh ¯zÿ ¤[ ºn™zXt wÿ k `T ³X ØQ K nAM<ñ<»;>E8í9e0[.£*Ç+j&w!$#}%[%±,R8Ò8¯9»;%=†>w>º?IAAÈ?:>K>=2<ó?:>2>x?º@ûAµB¾?‹?ß>c?“<0ý'Ì&Ó$!E!ÿ!"O"O$.#V$(%k% õ" 3'®&% 7$ ý'±' m(z* . 70 í2*5 9!;7Ö4–5 –3i6f6U2 H0 2 44z2“+2, ' .% G% Ë% ±# ¹  ! N# " n g" Ì%÷   Ý ~ Ð ) ¶ 8  =# "„! ‘ Ä O @ º : … ÿ Æ â¬nêY| úMد Ô ['Ä<Q<P=ç>V?‡?;>»>w<¦=T=N><Œ<Ž=¸?ú=Ç=ø=Ð<Æ>y>•<å8Ò)Q Q~!s&Ï,,Ô)x(2(Þ(q,i-80/Œ2Õ16Ë8]8G7S1¶38ÿ9=6’2B1Q/“.>,Ž,«(U)!()0+ž.z-n.w-p3ú5û8Ÿ;€<??e?;Á:™<:S2®,{')§.322ü0?/f,(Ù(·'á$0Ï76A66]5W5‹4Ç4?3Ê4Z3C494z5;4L3Õ3„3ý3ó3 3r2ù2Â2:1ú1…2 20ˆ1/û1+0;00 0Ú1“1T0ê00¸00060f/t0+/¹/f/`0k0³/ó/V.l.À/L/Š/Ó08/‡/~/÷/?/}/L/ .….p.—.a.Í/@/}//v//†/v/~.û/C/´/A/‹.R.Q..-j..q..-î-.,,¸,Æ-+Ç,?,?,º,;,3,¡,¨,è,a+í+â+i+1+@*ú**<*­*ú*©*³)Æ)À*~)ÿ*8*q))e)>)x(‡((€(W((„)F))û*)î**.)y*µ(þ(E'ñ&÷'ª'9'2&û&í&B$Ò%¸%%‰%I%[&ƒ&T&ˆ&„&‚&r%ð%»'(&!%ú'&Q&X&Ä&&@%Ä&¾&É'B&M&<&y&s%x'v&å&‡&&Õ%Þ'‚&“&›&ß&Ù&`&q%l%¹%³&k( (Ð(™('(.(+24 ¤Tü=ø3ÿl3þû0þå)þu(ÿ‰1ûù úÃüœüvý8ü½ýx"ü'(üD*üe.ýú.ü~9ýŠ1ýQü“ üH üA ü üœûçü‚ü!þøÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ^ÿéþýoý-2þs1þÒ3ÿÉ6ü4þ½8ÿ<Ø?4::°9ð8=6þ6s8Þ7Î7á8“9Ï:]8ç9¥8n9™8A608k88:7_5ž4£6Q7•3B2f4\20/ +¾'ì!Ú ®,)09'O: c> ÃM âl vjÎq ”hžqÿ mX Q å‰ÿ ez ]~ÿ”€4t %o åf ôS |X ôQ ˜P ™CLAŒEÃU €I 7928*ë)¤$ # 2u2Û Þ!:$%Ö(Æ.L6­:Ç=ï>@@7=Ý=u>Ac=Ë>9?2==F=ß>Œ=Ë?>ˆ> ?g>Y;ô2¦( #¢>®>í?C=ˆ=ù>z=…>€>><=?0=‰;=÷=ª9b0¶ € ´Ï%â*:-?)‹(Ç'ô)',¤.K-e/K/2/§1Ì76Ú5122§9æ6Y473Z1Ò.U,)c(ž'E%2&¿*£,¢+.<-6+b25è:8å7Ó=J<Œ:o918Í4²*”$ # &×,Õ2 0!.ó/`(¢$`$$Y)15]6V6P5È5ß4À55A44437)7ý4}4 3þ3ô414w3þ3«3i2Ð221Z0§/Û0×0`0*0>/‹/¢/g0Ú0Ú1Y/ú/Ï/¼/ô0.0±/Æ/@/½0v0\/î/|.ƒ.­././C/I/ú0x/ú0{/þ/ .™-›/.Ž/X/.’//x/C/†.Ã/;/>.ú/±.|.M..&-”-•._.--è-Ø-7-b,¼,5,+G,x,¨,w,±,~,++Š,z-*,à,0+µ+)+z+1,¾+y)ñ*)A)ƒ*4)ƒ)*x*¹)‡*;)A)r)1(Ã)V'Ò)?)u(¼(¼)‚)w)ö))½)ì)})µ*p)¨)²*å'Å'm'G'q&ð&w&w%Î%K%>&1%€&4&C&& &S&&¾&N&T%Â' '<'®&Á&Ê&O&´&¼'r&ø'‚&…' '&b'ó%$Å&w&z%È&'B'{&Ï&&&g&ø'x&O&$&&Ú&–&w'%%Ø(!'í'¤'ð,3 á\u>2ÿõ7þ·3ÿ˜&þ &þå6ü{Bþ>œþ¡¢þ6´þ§ÀþÑÃþÄþÌÄþ“ÆþŽÊýzÊý²Íý5Íý& ü ü" üd üä üb ü‘üSürþSÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿnþ3þþý¥3þ\9þ2þ65þÏ6ÿ5ÿ ;Ñ@*<¼;:~9r7¶6ú7:8S8:s:Ì9t9ê8>7©9o9Æ;r;r8°7û76¤6%5ã4(0ò/ç/ß."· u K # þ'S ´'B<{` ¦V b  e Xb jW „^ T Zr ¾m puo Âr „ÿ ­xÿ Ëj w` 1^ K •H3C’H ¥S ¡Z ‚F ¯>r9L2'ã!^!è"j'•/¦ r ­ ; ´ ‰ ä)*¶9m>Å=…>ð>Õ>P=Á?+>G?ô>:>‡@Ç==U=Ð?ŒAN??H=ß3j*ò$[  §  ó"©!  å! v ¶!K"é%7&²)±#ˆ ¨ ‚%& æ( #+ M+ }. „/¿1;2¦2Ý/-ˆ* Ž,É0å.Œ- %,ó-)Š& µ*U+& ?  ‹ Á e ™  ­ G ! + w9|&G ð ¾  ø* ö ²  ì ³ ë Š  r$'H%$‹'Œ' M µ ÖÞ'wë 7 ° " :Y7û7B9“;;‡:ç>5>P?:>Ï>M<ï;®;ÿ<2=ñ>¶>¶=&=0<z>I=©:t5s#@ <!S&±)Ñ(¯&¡*n(n(ò*Õ,’.“0«/ 1€6ä5Ù4;2Y5a9¦9p83C4õ0+-.d+‚)Ä&¦)e-‚.Ó//2‚-{+›3$9Ó;|>¤<H>0<<V<D:t7N0)Í)*"/®3).«-S%^M!«%D!›-·6g5¥77’5e5‘4J4Ò4¡5\5D4Œ3¶3Ä3ó3¹3Á4=4³3ó4:3x2E2¿22Ž1Q0Z/¥/î.Ç.Ø.‡/‡//È0 0©0ô0./Ã/Š/†0­0¸0>/&@%ô&†&¾'ÿ(Ë&„&œ&¬&-&Ž'W(J(Å(Ã(O)&- f6 ^c{=ÿÇ2ÿ"1þ=2ÿ(þC+ÿŠ3ü(L8ËýÝ·ÿĬÿ±ÿÔ¬ÿ]¾þô¦*Ïý$ÑýÖÒýTÓý Òý[üÚ ü” üa ü-üRüŠüUü{ÿyÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ^þþÅþ ýQ1þº1ÿƒ5ÿÐ1ÿC4þN8ÿ›;Z@c<r;Æ;h;8ê8m9X9U6˜8Ü9^8 8)8æ8(8f7å:­;q:¨9u99=6Ã7 4I0w1/")â! Œ Ê  ­&,0¤*ˆj% .PF ZK ›I ™G ÔJ À[ Àdÿ öz ^lÿ tr NÿÙ{ h Ça˜€ Ám @g Òo Ð_ O E(?[ N QN :8ÿ:!8*2x)£"S” j,&#"³ / o ˜ ì ä ª w š"1¬<ê?`? ==>½=<ç=Œ=Š>K>?q>‡@$?ö@­=Ì=A<8ï-L%ú T Ü ‹  }  å#E  Î" æ' .&n'3" š*å# ³" Ö" Â%â& <( P+¢, Ç/”+É-h1&0"0—* ' ™+ 2d.|1>.ý+A*ä'z*&& Í# ! l! Ì i 9  0 Ö  @#)¿'® < G Ð a ˜ Í j 1 Ò © Ü J) | î · ¿$ë$í%‹'W (ú³ ælg­R  K /ã8 6Ä80:v:ò9¼;¨<`=œ=å=<P<<É>È><L=Ã=G<É=Ñ=t<¤<À;ü7›-¿ ö"ö$Ó% )G(L&(ê)_)ª*æ.”.-Ñ-ý1+4°2Á0706“9ø3Î2•0v.Ã,/*ß&6'$'°(n/T/ƒ,‚0w/>.‘5S;=h=w<ˆ@AJ?Ì?#=ô4/*Œ(d*++W0S/¬*r+É"Uð †!u%š4þ5o5v5i5á5b5d6N5 4™5T43!2Ï33„44I3À33@3‹22Ì2ž1ã0t0-/9/?/ù/†/M.Ò//f/ß0ž100ó0¨0:0ú0D/Ã/È00æ/«/µ/ý0-/?/´0o0i0Y/“/ /0/Œ/Ü0]0S.à.’.$//.›.ß-¡-ë-­.e...t.þ.í.j.m-©-Ü-3-}-s,¼-<,„,ù,I,J,ü,Ä,|-=,Ž,Ž,,½,C,‰,,z+J,x+Æ+¶+ò+{+ *º+9)Æ*R*Ò+2*÷*2)ò)À)7)N)(È(V(r)(Ì(É(Ê))F+{)))ø+0*ù****u)ó*ª*g)x(ª'w'0&ú'û(x'i'º'9%¶%N&R&Ã&¾&¸&%ˆ%%€$Î&&%ÿ&Û'?&7&é%ð&&—% %&ð't((P'Ï(a'Ù'_&Í%ÿ%;%ü&Î'ˆ'ñ'Í&z&%‘'°'Î((D'”%¡$ï&Ç('Ô'Î(>(þ'æ(ç+¿8 Š_À@ÿŒ5ÿ_4þÕ:ÿ³(þá)ÿ›2ûlK¾ÑýŸ»ÿH®ÿ‚ÜbÞÂþ—yÍý®Ðý˜Ðý×Ñý_ÑýYüXüÙüÖüüË üeü\üZÿÕÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿuÿ þÇþýý¨1þD5ÿ³3ÿÃ4ÿ¹5ÿl0ÿC8Ã@W;2>;!:^8¬98Ê87Y7Ý96k5Z8—7d9`9æ:à8”9o9è9|7h7t5Æ3-ß.â'P ) Ô ?  Í ƒ#+''·# ^%X3N ¤P ›I GH G ÁO ÿvÿ ådÿ é[ ˆq Çp O] ÄŽoW€ô~ Vg $fÿ ÚE3?8¡>EO ÝL XBG<ž=×8¤.è,¡& !""&Ç+Ä.@!–ÿÂig ì Ï U +-:Â>°<Æ= <Z=Ð> =>Í>Ä?@Ã=D=†@¶>¾<‚>€<Ñ3&) * Î E Ð Q Y! Ÿ y Ê% 2þ($(Æ*­"È |! l$ ö& l( ¦)m1®-N,‡0µ4U/±, Ô) Î, ¿.Ø- +r( ¥' Î& m$ ½# V" ! Q  Î q I ¹ 1 ~! f! N"Æ"  G ¼ Í © q ; ¹ M  @ I ¶ D Z  § Á ù ˜  S ' boœ ô á;¼ ® § ©# 6°7¥69:ê;ñ;u;.<:a<—;>G?ƒ>==D=?=¡>l=­<¬<Å<t=è<z7¯2Š q Wš!a!ÿ%”%«%l&z&û'-(ö+º,)ó*-å3ü7M4ÿ.ê4Í?|7™3W0t-Š,v)-%&u'÷+«,•,).3Ò-Z/&69+<ˆ@£?ºG*H‘CJ?q8»,I'y(¶'Ö-D/G)'¼(” æ K d.q5 646t5}5=5t5%5›44#3®2 3š2‰3Õ443Ð2H3_32Ö2­3b1=1i1?1,/E/Â./ /V/È/‘0d/œ0¯0³/„0ê0ù0º0²0±0‡0¿060å0®/ö/÷1¯121'2"0Ñ/ì/µ/ì0v0ä.².â/,.h.©.›.Û.e.¯-­.©-~-þ,Æ--‡-Â..¼-¾-i-±-0,‚,r-|-»,z,9,º,=,E,;+Ã,C-,’,K,A---q-0-½,ƒ,†,+„,½+ƒ*Â*Á*>*ñ*Ã+~)É))5(Æ((ˆ(((‘''D(É( ((Ã)A)))À*{*r*i*)þ)ð)¾)ò)9(÷(é('w'º':&Ã&ƒ&ú&0%ù%%¿& ''&Í%%~%÷%ü&E&¸'´'&s&°&'&4&±&:&t&¼'Ë'U'(™((P'Û("('¼& &¾'5(:'ë'½&T&&J&¿'x'¾(z'Ë&›&«''Á(%î'&'™'4)˜,¥5 Fbu>ÿ1ÿƒ6ÿÀ4ÿ‚*þ(þ®9ü0N>ÒýWÎý£¥u/ÅýôÄþD˜hËýáÐý^Ðý%ÏýkÐýü"ü[ü+ü«üÌü™ü’üÿÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿeÿšþþþ ý6ý8ÿä6ÿÈ7ÿc2þ5Ð:‚> :<é:¯8¨8i7/8[8˜7˜777Ý88ž8,9a;®9q8¡:t:p9ò8û6¾3ø/,<%°!¿Ò Aý“ ª  ì1L-p#± “%¼A JR G ^B)F ”R (j ÷W *S ;F q[ >Zºe“m ¢p ›R |N zT ÃDz;1&= A>I 0M >âF 75ò.†,°#² ¶%Ü"c × r ë/Ž‹jƒœ ¤ · Š,ƒ:Î:Û:ã<+<K<==Y=Ÿ?²?ì?º@Ç?´BjJ´?Ã8Ä-%¼  B } • e# J? ïh )K ÏE * y  ! Ù% ž& ã& À  m#É% ÷% ÷'í+´,ã2<6U;h2£-ø-®1_-f,÷*E(ƒ+|$ ˆ#Ø  A # ì :  K Š Ô" ÿ  k#Ý    ` ˆ¨ õ{· Ö ? F ˆ  ›  ô : Ð Èò™?OÚ° T Š _G ƒ+^6ò6v7o9J8u;Ò<,:ë;Ð<:Ÿ<Ž?D=U;:ƒ:U:"<S=Ê?!=n<W<¿=í>h;(4)( ®2!ž#¨%~()&º(m'³(¥+].T.•+?+§,ë5¨>3.½-&1^;\9!4¦/ê/J+&+œ(À&ƒ&Õ)€-61Ã5914$2F8(?bHPP!C˜eþ¸Tÿ¾M,C‡7Ç(ò%!(8(7.O/Ž-®(|!Ùs  ü"24W5þ6©5£524ã4·6¥5Þ5S5’4Ü3á4¢3c3X3¢4l5432å33ê2°2À290É0R0Ì0•/^.ä.ê.«/p0s0@0q0/ƒ0y/º/J/@/¹/‹02/Á0f0é0o/ 0-0/0‘0X0/'.¡/,/s.ò.«.Ù/².¨..¶.©.`-z,Ã-,Ö,Œ,Œ,Ð-˜.. .„-À-v-~,Â.<-~,S+Õ+*Û+\+“,Ì-:-,ß-,+â+‘,ƒ, ,H,G+À+Ð+Ì+]+T,}+A)Å)z) *€**))=)¼)(Í)x)…(ø)(V'Î(“*^(Ë(È) 'Ê'U(W(’) ))…(Ã){(½'„(x)7)<(±(,'ü'&Ë&J&&5$Œ$Ì$Ì%¹%Ñ&%¶%÷%È&?%O%±$½$i$¹%w&>&;%Ä%Ä%Ã'v'z('?'Ï)R(‹'À&¨(c'˜&‰'¸&«&z&Ç&Æ'A&…&„&È&R'Á('ð'É'û&'I((À'–(_(Q(Ù)’,„5 Ïbw<ÿÒ3ÿê8ÿ09þ—"þ!*ÿ3ûîU¾Óý ±ÿço˜PšËŸ“˜¢ËýèÏý-Ðý.Ïý,Ðý%üUüëüõüü üâü|ýÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿÿ‰þþµýÃ0ÿÁ5ÿ°2ÿõ7ÿÎ*ÿà8ÿN7‘@±;Æ;¾:²:c6ð777½717d7Ð8U8c8¤8ž7m6±9i8µ9g<$:=:i8?53v0™%ã"â#1 xŽÛ}­ ‹!œ D Ž  û+ Û9 Ã5œ5Ç>„G CH =? ;bI ¾[ ÷e zZ 3P äK ¼A‡7c<Ö4C-Y1p>±3^6H9 I;h4õ$ì+ »%Z  Ž!A µ ê r ² eO{=5S¶ l ôú2“<O=E<Z<;¥:é;Ý>‹<›> ?8?CU:¿6ãGœAŸ5})-    O d#ò& :% ¢$ N# l" 6 é# ž! ï! b$ å% Ù  ‰" ô" & v)()Ú+†1ë6b2ô372ì0þ+è+~*)+F) ß$ ³!  L 4 ÿ … V — ÿ ‘$2.­ ‰ Ø U o ´ ‰ U ý5 T   H! j8  <°6^3L2W4ú9X? lB 7 ~$ 8…ÜW7ž h H  §3¡7æ8¢5æ6'649I9:<:¦;;Î;Ê;˜<–;:V:`;n<k<û<þ<<$<d=R<¡950„ ê· &Ð(C)$&ê%ß(a**¢+*a*Ü*Ø*ö2ò3˜.[-—-e1æ2î1,p,-ž+Ý)ô(ó,Ç/1V5)78Q3Ï4V:LK Xÿˆ^þvY»‡ý 1fþ hWÿ×Fc8à.' )+O0h1„-x)à”¹ -è6z5z5ë4³4î3Û4¤5g5å53×44P33W3‘3’3â3è3"3(2ç3ï2·1ô10/Ø/Ø/’.‹-c.v.î/i/w0©1+0"/=/~030¾/Í/Å/C/ý0º0;010´/Á/9/ê0»0a0_0£/á.ý/C.Ä.=.6-ù.1.á-ø-y-±-ë-î-9-»,ö-F- --&-Q-.0.Í-Ö-S.,+, ,B+’+e,+Þ-“,–,W,H,À+Æ,K+G, +Å*Ü+Ö,Ž,†,Ä,S-:+*¨*ü+W+ˆ*¿)Ë)Ž)) (Æ(Â(Ö)))W)J)‘))Œ(B))Q(É)H*8)À))¾)Ç)M)?)({(C(»'ù'B&¸&ñ&ø&%ð$þ$$F$$‰$%þ%¸$>%L%€$Å$¶$É$$9$¹$ü&%ñ&'&N&''W'X((Ý(M&à'¢'''M&Ã('º&Å'¹'º' &<(&F&Y'Š'(:''T'K' 'Y(K'Ë( (¥((Ö,3 Êa6<ÿ‹/ÿË2ÿ³6þ·!ý=&ÿ2ûX¾ÒýÌýó¦ÿ—s¨Œ¾Èý¤šÌýêÏý+ÌýêŸÎÎý9ür ü$üÒü#üCü[üŒþBÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿÿ¡þ#þµý+-þ™1ÿQ-ÿœ1ÿÈ3ÿ­5ÿ8Ù@t; :Å:¿9k6‚6û6á8"8¶7ù7ä6~7c7&76c8-:79@9í8 6«451¸0*Z%%#^ < Ù R, àö÷ ë2Ø/c  Þ' `& ©) t4 /å2Š2 Ö/25 1í= €F ü< š: 6 m)#n)Ú&($v I ÷ å ©   ”# þ$$Ù&"$˜ é,t( ÔdºËái d ÀÜÆ $à7M;9h;®<#<±<§=Z?>Ó>Ã>—@G?1+/)‡#º  î   Ù  m Ô! † ˜ I Ð …  ° 5 ž"  Ô! É" q$ ¢'4((©*.'3»1C/G19,g';&'R'P& " ª ê o ^ è / ¬ ¾  I 1.¶51*E M & I q b>  [ š  º B4ÇE ,6},Ô)¤%{  ;%,4JQX‹B f* q °u&¿ ¸ D# y6:8å7´77 5ª7á8Ø9ƒ;;Ø:ç;Í<Ë><Ó<¤;I;˜<=œ<6=8:æ<a<˜<R;á; 2[$ ¸Ë"»&Í)Y(g%£'d(ÿ,g.7-P-.Œ.2#3§2j6¬/Ð3¾42k-´-}.k,@-&*ô-b.f/Ó313C5§4±6á>SZÿ@€ýxþŸuP“þDwý ìXÿåEo<ð8á,q(Ó,1n1f.é&NEr úµ4I4Ã5.4Ç4´4°54544N432â33^33a4%3\3 2/3a2¾0²0ý1Å1}000N/0W00b/Ü0+0ó110°00|0ÿ2=151-0=1?0ô/å0c1:0û1#0°0q0Z0/c/u/ˆ/H/p.¼/8.½/x.ò-õ.v..-¿.ö-ò-‰,ü- .,[+£,,?,ª-b-™,ó,ê+u*á*1*ê*õ*ö,Y*«+ *g*f+™,,M-+×+N+Ð,+Ì,F,G,,,A-ò,¶+g+t+Æ+:)Ï)È)È)M))8(Ð(×)—)S(Ñ(¡) (Ù(Ó)a(Ì(Ð(Á)?)ˆ))(Æ)W))‡)) );)t'ë'Í'C'L'' &Q%r$E%$Â$„$•$ž$P$?$Ì$P%Q% %D%:$µ%~%¸%ù%ù&¿''–'„''ˆ'P''€'V&ß'&Ø&e&'S'Á(Ì('Ã'Í'°'û' %Ý&Á'G' 'Ë&Ò&b''W'€'~()Š'«)Ž- •6 ßeï:ÿ 7ÿž3ÿ¹4þ&'þÌ&þo5ü³WŽÑý¦»þpŒ6·þõ ÿå¢j™NËýb¬ÿå¹þ-ýbÍý{ü+üzü*üŠüäüÚüºþÕÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿþžþþ¯ þ@+þ0ÿ5þÇ=À4ÿô0ÿÀ8Y>û:[<½;6928w7m7¯7ð8d5¿8¦6/6$5š5.6–6r99; 857³731”0d-‚'¤(ž!`  P z¡ê × ¶ f#˜12)æ!y#Q"M&t,™)±"Z%Â%‚&ð&)¿# $) … × < ‰Ž \ S ªuõ Ü €Ç    m*+AÁIê'3  2 ê ø ¯ k L Ô¥ æ"+-h9ì:W8´9:;|<?=r= >S=g?Ï>Ë=ÖDØE¥<J4C&³! Ž, œ1 % 1  ¨ ¦ ~ 8  # 4  ~! õ" ' Z" r Ý  ¿  ³&Á&x'3)²,U0_6 2]/‚-Á/ù+»*½'Á.< ’(e(m&­! °  Ž { 9 Ï ß r Õ -/A+Ú!C Ô è ø  Ù J+ý4 é -/<…;u3“(V%Ÿ  |  8 ú! ¯/¨567‚13ÿ9ì,  ÷| £ c+6628&6ä5Õ5c6™9Ž98#<F;;;’<<;Ð:ì:£;m:¡:\<;~:b<K<;Ñ9_:D5* ¾!Œ$ (à*Ò/Ó)X*+Ó-V/æ1É32;2=0›/C/$-œ*5*Î&Ø$Î"Ý"¾$0$½#˜"o$ý$€'¶,q-|- /ã5ß?ÈeþÇüe}þÏŸÿ¢ýèý ›_þrF“>»8B+Q(Û-3S,™*‚¦ ² E*Ä4Â6!5@5}5ù5$4”5K5Ó5‹5 24“32Ù2R2.3¦3X2™2ã3i382º0·1µ0Î/P/0.Ð/Ó0/è/á/e031p0°0‘100n0‡0s0~0ì0®0ü0þ0t0ô04/ö0â/¸/ª/[.è.ë.¼/4.«-á-ö-ÿ/}..n.+,±-¥->-=-í-=.E.5,•-P-”,Ñ,¢+E+°,i+-+¹,%+7*{*ç++á+."+$)ô*·+®+ž,,€,Ç,^,/,+ä, ,Ô,•-<,Ä,ð,è+}*ý+…+ñ*B)Å)=)(À)¾)O))J)(Ò)(Q(È(Þ(Y'Ø(É)(•))J)Ò))ü)‚)=(L(Ã(U'Œ'Ç'I&ú&' &Ä&J%H%Ë%E%$Â%6%‡%u%D%€%x&q&}&%R%É&ý&µ%£%s&ÿ'ù(†(‡'Ë(½'×('&à&¶'R&µ&œ'T(2'Ã'Ç'Ï'‚'n'¸'Á(2&À&†'&Ø''K'R'&—'&–(`'c'ª(w+³4 °c¿=ÿf8ÿ*9ÿ)7þ%ýn%ÿô3û%YGÑý§«Ô³ÿ Íý¡Äýhœ™ŸÉýèyúàlü=rüîÌþJü"ü¼ühü¢üÊüaüƒÿáÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿyÿþ¯ýgþÇ þA)þF1ÿH5þ5ÿª5ÿ¥7I7R@î;Ã;ý:n8¤7t859–9&8 6²86f5ò7o6j86¨7ü:@8û6E4µ44»+š&œ"! t…  cæ &$  ÿ»!^#A   D&x" Û$<0=t. *«'Æ" ! Î  _  Ø ¹( %ã݃b7Ç i$V0  £ » F)­-ª3â;ü'ª  F ‚ v €`÷B  ° 4PØì £)Q8Ø:b;S<˜<»<í;Ä>R=W=ê?<š>¸=€?‹L>-Ó&) /E‰  â! & é&  É  <+ ª' Ë  e % r  # ;# —(â,0‰51Ë/÷.E,Š*¨+¿(¿-d< *·#c$Í&$ Ç" ç X é ² ½ q ¬&ù$œ ü  °  ! Y C ˆçœ ¢Ž" 6…9¥5Ú+™"¹  å ¸ Ï ˜&@+t%<$$H%³(:3I. Î | 2Ú5k7Ý8Ó9 9„7ã98Ô9L9:9g;>ˆ<€<;á<¥<Ø;R=<ª;:]<f<;/:Ý8ì7“0v O6 ”$(.¨+¼+<(M#ò"ì ã ¼ä‘ä X ^ å 0  ù . p – Ô ø ~ª ™ < M ² Û š+K..J‡aÿj`ÿ /JÕDÚ=Þ7N2î.o7kIk0*gpâ #5q586"5ö5;4í4ê4š4×5Ã4Í5I5 3×3Ñ3×2Ÿ2X3•2É3ä2Û2i2°2µ151æ2­0°0?1Â0Ã0[00Z0Ý1^2i1a11_0`0l0u0ý0û0ô0ª1²1 1ô1ê1ê150|01/î.ª-ä/¨.±.2.y.+-p-F---=,½,õ---³-1,Á,Œ-;-…-þ-•-¾-Ø-‰-&,ª,Ò-,+™,Z+—+å+'*v+Ù*ë+Y+˜+â+ê,+Ñ,–,H,%,s,`--^-‘,È,+Ê,ë+·+n+y+Y*«*Ý)ç)Ÿ))×))(¡))T)T((é)€)V(ž's((˜)™)A)Š) )W)¹+>)L((þ(¬(1'y&ü&Æ&L%Á&½$É&º&A%O%?%9$½$v$$[#Ó$Í%O%¢&&&H&z&?%¸&(&o&•'['–(_(G''' &ß'm&ç'S(W(>'D(:'Æ(‚'Ë'ƒ'Ë'J'B&´&[&&Í'O'É'„'1&…&H&I-'h'î) ,%6 ‰`´@ÿM3ÿD3þG6ÿo+þÌ,ÿI1üiZOÑýeËýà‚!jrjÁþ”™×Êý£tün§ÿ£hùCÍý2û/ü‰üê ülü!ü üMÿ–ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿBþBþõ ýö-þ{1ÿÂ1ÿÄ3ÿƒ0þ§2ÿÜ6ÑA :N<:,9_938o8 7i7q6<7h6¶6±5p6 8+6®5 6ö8o6½3Ä5ž2/'Ý$R › Ñ ¸ | q Œ  x"Å$Ï(°-Ñ&ì'Ú&²! U%¼.Ÿ+Ý,-)s(å*'/&C%ñ!Ù V %‡ ëÉ–«‚–‚  } Ê£*“2)*)€ I h • Êâ  Î  M N v‚ Ô Î&Ë4;<Ò<â=!<§=`=›>Ê==ª=à=Q<š;›ASI«5i%ê ¥ ß    × %•$  ³ * ú0  B q ¬ ¡  M" U% Ë'Q(õ.È3%3%.B-))»(™(£-Ž0§,¶)æ&š'%E%N%Ø$\ Ò -"8%°&´"œ h ü Ù ø ¼oÒ`O;z Ÿ- 6Å2Î-y&" | Þ ô v D õ# Z! #   í! ˆ" ¹' Þ)Â.7:3™7—5k6m7ž8‹9»9W9R9Ì:Q:J; :—;Ô<<…<N<Š:.;¢<¦<¼:ê:;:ø<<Æ:Ì;Æ:€:¾4É*&ó'N(qe ¯ e ê z5ñò ?8#ø Ö& $ îië6©s U  µ Ì † 4 ‘ f C  Ë üéì Z#¡$;$`#í',§IG‹A#(! ‹ õ+ô5á6«6r4¾504ã5Ó55 4ø55ø5C5@4‹3’21â1±1æ2Í3[2ª2(1µ1ð2j1p0Å0ù0Í1r0…0Ž/Ö0Ó1š2Z1t1§1¢0l0÷1ê1|0,111Ü0ñ1n1(1p1°0Ï/„.ô/c.§.“.g.-ï...?-±-),,|,‚,»,®,µ,º-.,Í,ö-=,ü,J, ,Ÿ,‘,)+Ç,,Ÿ,g, +^+n+g*¥+.+$*_*¶*ç*ç+Ø+p+å+*Þ+F+*«+U+ä,Ÿ-U-Î-,ƒ,‰+Ó+’+J+*ë*P)Ý*P)@(‘(ˆ(Î(Ÿ(_(X(g(ž(Ú(Ö(ÿ(ß)˜)=)<))ß*F*F)ú)H)®)()(³(;'&G&&'3%Ã%Ñ&{&Œ%’$Ñ$Ã$•%Z$h##$x$Å%Q%%Ú&@&-&Q%×&¹&&'(T'f'P&ß'j' &8%u%u&6&u&Ö&—&Ð(r&Ç&B&š&Ë%ô&l&%€&&H'º' &%% &V&N&Ó'Q'](_+&4 o]úA‘7ÿ{4ÿ¹8ÿø(þJ-ÿË5ü^¼ÑýeÏý´žÿnf]~qÉýè›ÏÊýã”CÉý«Ãþ•Îý9ü0üSü üÁüƒüýkÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿÿŒþÔÿ‘ý¿&þ.2ÿ*;X1ÿù1ÿj7ÿÑ5ÿu@’;;¾;9ï7°8k7ê8l845|6³7.7*5£65u7Ú6166523ì6w17.'E"9 z  Í ô  t V#€' +ò.ñ-’-p*y'(! Ï $g$1' *,Ì,.î/.«-{-ô)š'& È 6 û [ 9QÚR L )6Rí   ›Sÿ=/9&‚  / ×¶ K Š 'ìÐ Y ø à ®'w3¡;<=<:î;æ<£=W>B>)>*=“;m:«;kOo;}&« Eé ~í œ4 à5 /" J 5- ( o Y  ã v _ ¢  ! f%)‹..8/3+N)()¦)'|)-)&)®)‘(Ÿ&+$B$h%×  Š Ò!$,¹)$  L " ´ c¹ìˆ"• ´ " ¹/G/¡+Þ'($ v"  ’ Ž™  • ‡ l † ª Ê  ;$ 4' v) O+Ô4e=ÿ;887L839D::ü:F9ä9Å:‡;;:U<‡:`;: </;¤9È:?9Ð:Ë<9:W:ƒ:Š9·8<0u ƒG K Úyîh Þ · b €±Pª¾ y ¨ ©Ø Íä × ÷   J | f 1# ƒ ¶"\%u)*#° ?%¡!c%'5÷,´'92µ5r6!5ö415(5§6Z55M4Æ54€55x3Î3„3W2W1^1›1$1f2b1¦1ï1o1:0€0I0’1…1;01Ë0˜0f1 2$1¤1š1a080)0i0@/O050¬1-1l0(/ø/¾//<-ü.u.-,j,â-§-”-«-š--+÷+½,t,*+ò+ÿ+ò,´+ü-5-©,ü-;-¯-ª-9- -,¤--,§+¶+-+2*²*-*e+,f*†*Ú,",",],++W,,ë,Š- ,Î---Ì,V,Ž,¥+‹+º*›+K*W**[*!(‘(™(™(h)Q)*(Ú(È)Ø)P(O)j'×))B('Ö'ä(Ë)R) (Ì)({);(O(T&Ð%Ê&U& %Å&%€&ƒ&´&&‚%ˆ%&{%6$³$Õ$a$ý%8& &½&º&&B&^'&e&<'ƒ'¤&ž'!&X&¯&9%þ&e%ä&‚%ó%¢&˜' ''&Õ&]&I&Õ&f&&‹'Ã&˜(&Ø&%%*%I%Ô&P%®&Y'5*æ3 oS“7 7ÿ*6ÿÈ6ÿ ý—"ÿ#4ü^ùÐýªÂý½ƒmÂý|£ÿ’¤ÙšÈý˜ú"«ÿ–‘6Íý¸üûûo ü[ü" üaýÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿtþ§ÿ« ý¥'þ 2ÿ¤7þ¾3ÿE2ÿz:ÿ7J@ Z:Ä;~:¥8h7h7à8ï8õ8æ8j8(7Š8\645.67376ñ5¶654û-‰( '¨ ³  Å Z < ž Ú#R' 0S26 °/0.+ž%­ À! ï$Å%–)™-Ç/ƒ2|;D<;763E1#-{-:(-"¹!ü˜ ^ 5  ! ë$¥– S a WdY}I.+j ¡ Æ M ‹ l “!e%Ä$ß T Ö Š ›%72;Ù=g<Ò<Ñ<˜=Ó=Ú==T=­=s=æ=:æ< EÀBß(ö!l ,ñ £:ûm Ð9 Ô <  ”' ! Ú Ó # V Ú l Ò , á Á&É, +…-,2*«& +½)¹))(a(t'«'&(”']%”%& #  c ]$,‚' Û /Ò  ` ç UG¹õ 7 " ','õ&" õ œ I s l s 0 L   ¦ À" ü! ! Á& ê( g)t,ž3\:‰=[8”6Ž7 99~9Ê:ˆ9‰9Ä9›:9“9ß; 8ç9;&<:6:¤:ø;˜:Z:Å:H8À;»:Á9v3ÿ!àw E ¤ t 0 b É(;4ˆ2m& !O XäŽP.;› { ž_ [ë I ˜ ¹ M š Ê& *#'2†2€'Ä.-ì*-'^Þ‹!Y"…%J& £› = !  š&Ÿ5÷7)7ø6O4ü5j67ƒ6C5_4I54×5 3Ù4Z2‰1Q2#1­0î1'1Ò1)0©3ÿ1×1)1o1ø1ˆ0À00œ0Û0Ë0U0Z0C00Ü1Ü0‘/w0£0«0ô0)090¼0î/ª/²0/x.…-›-ò-ô-.+q-°.d-w-þ- ,q-/--,¶,4,4,l,s,ü,´.k--<,ô.|,Ä,²,ô-- -Ò-++§+c+3*ê*x+2*è*è+˜,S, ,+ +•*•*Ÿ*î+],U,˜,+ç,+í+e+¨*ò*ƒ*5*Ü+$*Ü* *)æ(é(¨(ñ*Y)Ô)â)$(b(ç(É(ˆ(_'ž(P(O'Ý'o'Ù))\'É((W'È((ÿ&Ñ'Ð&&&&ì&>%È%ò%Ç% %%%©%Á%?$|$|$Ä%5%y)s&ö%õ%Í%Ç&¾&Â&s'O(M(^(&³&½&;'8&©&?&]%æ'/'Y'Ó'¼&ù&×&Ð&U&Ì&›&l&]&Š'{&ú& &É%Ç%&%&|&¼&A&Y&°&Ç+Ï7 Z„0ÿ63ÿ±2ÿÉ4ÿ"ýí%ÿ)2ûO\ºÑýd®•¥D¶þß°þ˜™™WÅýš8òö\úø`ýrËý¬üªüÜü¹ü€ü*ü€þâÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ}ÿšÿ‹ ý¥/ÿù/ÿˆ:ÿÊ4þÇ3š7ÿÔ8 @ ™:ç:u;÷:*7ë7÷77h6³5µ6ß5w7k66Û5b6!6Ö6­64ã4ë4v.~,0)è N 8 ~  ç /$ù) ¶4 ª@tC±L :Š4>s"±!´"'G*ˆ>‚=Ÿ>?<e;æ:Û;´I )Å!- ÚË I ôX µ3 I ý  W( ¦ Ì Å † % Y B « Õ  ø#¥' $û%&è&*$Í$]%ª&¹%Á';'Q&Ò$>$Y$•%O!Ä " q .' )ß Ê ý â× çê ]P±Ö h$f,?(]"¶ H â  Ä i X ¢ E ¶ Ø k l £ f   W" |# õ" =# È+W0¦6ÂB¯9d7N7F88Á:y:8Ì::S9:…:_8J9%9í;Û::Ò;·;: :;L;:;d:Ç9þ4ë,Ô D = @ç | ‚È$#, š! ñ.þ Ú‘2^$(-=o ºò - œp } X Î8 |' ªtü ×€üÀD|þãVþ~>‚(á)B&’)G.á+Ï*â, ÌÅ, § —·2¹6ž7"6ò716Ú676W76 6L5Á54Ï43 2W3P1›11¢1Ÿ12¯3R3e1,0·00Ž/R0Ê00Q0]1E110U10Ü0Ú0 0­1›0l/?/±.ù.ø/€0v/0-.ù.†.9.)-a-[-%-¨,ä,ä-¥-',Ü,t,ž+¥,t,5,|,ã,¶-n,:+Ê,+Î,ó,‹,j,i--G-˜-",š,Y,[+¥+)+¨+Ÿ+6+Þ+”, +•,,+, *ã* +“+c*£++ *ç+d*ü*Þ+f*£)â)¨)á*—)Ñ)ˆ)O)R) ) ) *Q)Œ)š)é)’))P)H(Ž'—(S(—(ß(É(ç('â'(‰(X((‡((0'C'2(º'@(%¸&&&=$%y%%z%½% %%V%e%½&=&I%Á%ü%T&|&Â&ë&È&'$&R&f%*%¬&¾%á%Ý%ß%’&( 'É'{'&×&@&Ã&Â%™%×& %Ñ&@&&A%Ï%n%†%:%è%¢$&;%æ&D*f3 ŠVS4ˆ8P5þï7þßýÛ#ÿê4ü¡\Ñý_±ÿäsM{¨|¨› šÎÉý5nùüÕ‚ôÍý{üüKüÎü ü#ü3ÿ@ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿÿ?ÿÿ~ÿ‹ÿ¤ ý,þÛ6š;ý9¢4ÿ©1ÿe6ÿ–A ’:B:¿;b9µ7w7š7Ý7å6ã6*7¬7.6a5 4¯3ð4ö3l6é4ã4k5í2-n*Š'°   Ç ¹ a# ·+h3 X íŠu¸a J r@˜=ü › Õ" ï(R-=4ª?Ž>×ràis£X†J @¥7·1Ž-[*¬*Q%E# æ V ¨ a+ão þ , šLS¶6¤% G G ?S$,3e9 /,W)7+Ã#ã %i5;Î;×<’=K<ˆ<Ý>$>R>M=¯< =¨=;œ<i9¬HÇ6¤ n ´ ‰ , ‘ Ú! À ""($Y  u ß D ! Z 1 ¦     –  —! Þ! v œ%Y'!(’'í&–&['Ð&ã$ï$é#Ò$ þ ‘"  Ù Þ $ #à _ jê | à QŸ } ¼ ò C%T&G! Ä G  T! ÷ T ’ V ‰  › â ´ í& —òEç Ï •" /% L( ¹,Š.¢.ð6ÇFa;^7—7 8889Í9†:š;é<Û<K:7‘8ç:/9¤8Ò9è;3;[:‰<<9º9u8ö9‚6ô/Þ =ú< ùatã<*  äþ%fíÊ=#\ NÍÑ âÀÄ Ð R ç %…Dÿ$ ø$ ª= áK «Xÿ °jþ¬tü 9Vþ ±3h57qBUA@8Ý*[ ½ ¶ % 5 £'"6ž5Ü7¨7ç77l6¥6Þ6€6‹54À4Â55~3Ÿ3Q4Ô3W22L2 1d32j2/0­0¼.ö/ 0Å0”0J0†0Ë1 0‘0¤00S1T0Ý1Y07/ê/Ÿ/¨.ö.ÿ/p/{/¼/¶.ü/0.0-¿.).ã-Ì---Ï-U-,-`,­,î,œ+ý,8,l,5+º,u,,@,s,,à-e-j,­-*--†,ß,”-Ž+Ý+k*ç*ß*ß*Ý+¨+6+Š*Ñ++++ *Ü+C+,|,{,¼+ý+Å+-+!+,*Õ**P)Q)V)™)I)N(z(Ð(Ø(d))(š)#)Ü)á(d)Z)( ( )(á)‹'È(Ü'a( ((—(Œ(±'Í(>'Ã'/&ø&‚&É&Ä&"%‰&|%R%Œ%G$ÿ$Ð%8$Ç%4$ƒ%2%F&&‘%]%I%„&S&È&G'¹&‘&[%%‘%Õ&‘&w$Ñ%E$±%¥&°'™('—(&Ñ' &&J%õ%&%%„%Q%%.%¤%E%G%s$ù"‰%¡$@$¶) f2 ÷WÇ>ÿW3ÿõ5ÿ±1þßþ¸*ÿë5üÈZGÑýç¹þ°žÿú¤Qžÿ6¶ÿL™\Çý3yýí¯ÿ°ÿ“Íý¸üküˆü¹üËüÓüÿåÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿÿlÿ‘ÿ‘ ýì&þÖ3ÿ¬;ÿI3ÿ”3ÿä7P5ñ? ”;ü;J:i6J7À6ì6A866~4–7¶6é5S5f4á4ã4å455»4h5M4ý/Ô*-î#U B ³ K X å' 2 =B Ûu§>}–] ÄH rdçFê ´!Í#`*®3¼> íT ðk Þn–âxA¤¢WÆI ô<R4´0t16*&è$4 Ï ™ — ¿     ²MÉB 2ì&ë#9"y°#@$f*,†.œ'º'Ù-Š*õ$+×7å:C<þ<“<Q:%=À=H=È=;'<ï<¨;ê<Ù=O:‡B‚=Å$T$‡ t · ó Ü M {# ‘!   Œ â x v T « Ú \  ¦  o u Ö$d(R'Ÿ&ª%ä%Å%ö&¤$©$1$’!4 ¥ n ç Ê !$F"% Ÿ |¼ 8 ù s Y  7 Ð&C' j — $n ¤" Š Ó  … ü è u b à Œ  vŠ  D ; µ u! à% g/š12, -þ0ò@B=ª7I6]8~8¨:¼;Ø<#<;„8Ñ8 9];.;a9¯:19Ë:ò;j;A;9;918Ž:}8¸1W$‡Oˆ:  2=€%U= ß1 É4 É0 t  ¿º!Ð<Ð l0 ©k - ¯  ô3 ÷ „! 3PCÿ EOþg=gRþú>ö7 8a;ë[^lfF-,']&S` ¢ê2¸5a78&6¦77T6›7š7A6×5ø4»44ø4Ñ4Ù62Ê2Ô2 1C1@1g2'1Ø0.0¨0&.j/9/Ó/Ï10Ä/Q0/S0 //I0P0Ÿ1R/§/M0ô16/h/d/9/†/è/Ã0/ƒ.}-|-º-k,J-Œ-R-P-.,$,Ö,æ-•-O+¨,›,-7+Û-,2,k+½,~+ù-,,¯-c,ö.5/¨-y- -M,M,+Ÿ,,,Ü*Ü++Ó+”*Ÿ)â*b**K*\+ **—*Õ*Ý*›*$)á+)k* )È*‡*)þ*@))5(Ž(Å((È(—(U)Y'u(›(˜(h(Ò))n(ˆ)'Ý(f(‰(‹(Ú)(Ž(C(E' (|(y'F'A'9'q' '2'9&í'/&*&=%Q$%>%D$´$¼%-%C%Å&=%S%•&%—&A&&”&y&Ê&”&‹%È&'a%·%°%ö&m&"'('Ó'„('M&ˆ%%u&´&~'0%Æ%O$Ï$%%E%É%$ð#Œ#d'™$|%& U0 ÖZò<ÿ†0ÿp1ÿ 3þ‹þ&ÿÀ2üXXÀÑýf¿þõ¶þlÿ´l.Äþš—Éýÿ€ý}Qô}yý!Ìþ@üSüÈüRüãüÞüÿÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿDþÏþ§ ýj2þn;ÿ›9ÿW2ÿP8ÿ›55ÿ^C =®<5<Z8l9"6»788Ÿ6ë7¨7[7Þ5¥4ë5+4ì5.6¥5*4Ç4L4/Þ-J3š(Œ c Æ ! Ç' 0 a> œR*‡¨¢cKM û>YÙ0Ò  !Å&Ô,<9ÖJ Ûb /~˜¤¦&o š~ªe KN ÙD ?3ù/-G*$&©!S!X lÝ O ‘ˆ 0| £ ¥ ­7Ç< 0%¨!(—$"å%¥(-* f0 ¢* ,¿/û--A3Ë9•;;;;Â9Ë9—;;L:—<@<‘<¤=)<0;ý;â9Ñ>"A:,^& £ H  £ ˜   I  ù Ñ ƒ G o 5 é 9 ‡  S ‚ o ±! Û!±"% &&Z%›$#U$z$\%"ô ò { U ßÔ ôz 5  2 8! , ú ¸' ¯" Ù+ 62À Œ&02# f( ƒ òÐ ð Ò   : D ™ Ü ò V ¦  ë  +% ‰& Ó)ç)¢/k,82 MG ?D7Ô7†7‚7Î:;Y8É9r7Ã5é8â:59ð9'93:Š:º:™;V<:A:§8ÿ9H8Ã4ú,< Ò Tñ a¾_ Ö+w  h+„ „‹¾ýãf â y \h  êÎ œ šN ;  ü.¶3F<L;ÌGœ5¥DùT1EÈ<:9¥-Ì(n%›$M(W*@&–%^5ä7k6·7­7j7$6‰6Ô7K7£6 5…5y4À4Ð444–2â2Ù2Q2X0^1˜1j0ª/@/0|0(0ª/s00Š0%í&m&]'È)j&&Ï'&M&‡%Ö&G&¾&¦%%À$Ø% $ä%U%˜%$¾#¼#Ÿ$ä'&$E$ó' 5 Y;<ÿw/ÿô2ÿµ1þ‡þK*ÿ@5ü \ÑýÍý[†zÄýé¿þš—Êý9Ãþ ~ýŽþ†Ìþüüüùü¡üêýlÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ|þÆþ·ý{)ÿa3ÿ17ÿ<:ÿW7ÿK0ÿo5ÿ%A Ý=:>/;Ø:67ó8*8e7ï7c7 5í66£5¤5§5@4ª4_3ï5ö5:4Ö13=2Ú(›#ì"n"7$ Ÿ, £5 ÅF ™h&Š}âV –H 8æY‘" † \!u&s0Æ? O ­m ¯”"¸@ƒn”k’ûr MY N 5ã-Ú+´,(h! á  ( kÕ  2 ø F #Þ,\.¸)—$ú#). &‘#®'­*F. ä5 Ã0í/ä0_3¡4ß89;:»9K9I:Î:: 8¸8ž8 9Œ;#=‚;§;o;ä9£9èBf-†'`&q  ê ëÿ ° * l Ž H I!„ ” î Ç ’ !  ¤ ë : M ‹ ! !à%x'&&•&ü"" 7"Œ"e! å k »  U Ç  F ç ®¼ 1Þ& É? k5 --Y)¸>{F(6Kt@¨I®3W/ ÿ M $ˆ T Ì Â j Ë  ë % ¡ s š Ñ$ " œ$ ¢& f) D* –, W2–ED‰8Ì5Ä6Õ8N:;…:9$8þ9¾9þ:«9¢9ó9@:æ:i;g;N9788?7ú8i8'/Ë#6 õ÷ÒM bq!Ì#Á Ç%ü'¨$t ù"8näP:Èíã’šÍhS ¢ à ² ¢"ƒ&/"0q*g,b7 :ð9Ž5Û230//ô7]-»'±0J8l8 7^8^8775Á6Œ7¿75Ä5y5I4Ò3Õ4‡4 2›1Û1Ü1Q0R0Õ1Ù1ç1`2p2R0µ1.0v/ò0q.ú.û/š0t0/™//Û0^1Q0±/ø.ú.ÿ/ó.º/ü0/¹.ÿ/¸/|-Å-ƒ-E-4-Ï-,•,ý,Ê,ƒ-M-Å-x-È-Ê-‘,’+Ð,Q,§-%- ,é-w-ï-w-d-+, +ë,),ò-6,Â-C,|,‹+d+a+^**l)å+.*–*Z)­*Y)à+)²(ï(Ù(¢)›)Ô*7+()É*‰)Ÿ*Q)&(Ô(ß(P(Ž(I)(Š'…'ÿ#˜($)Ï)@(Ø*Á)˜))S)(È(Õ)')S)”) ())((X((„(ƒ(¾'ù'&;%ø&'Ž%‘%›$Á$R$Ð$Ï%Š$ø$L$ð%v%i%¹%|&&¾%ö$ó&& &A&&^'V'[&”&m&æ%æ%£&—&Ð''€'“%Û&¢'C&%þ%¹%ü%û$Á%r%:$‚$I$W#ô$ˆ%a%¿$ì"Ì#Š$•% 'á&0*6 [y8â.ÿ4ÿ>7þný®,ÿ42ü*YÐÑý¦·ÿŒz š¥™â išÇý4†þÂlûÿ×Êýÿübüü‰ ü½ üdþÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿ{ÿ©þþ ý\(þÇ6ÿZ1ÿú:ÿê6ÿ²;6ÿC S=³<ð:­9*847µ7«8—6£7Z5ë5£607/6h4¼2´3#1ò3»3A5<5H4²4[,%ã%ô(Í,}. ›8 ‰M £| Þxc X fH C<¤_!  œ! þ)1ÊD 8T ùmß ‡µ3…Q²¦hu '_ ÃI w;2¬.Ô*÷' !ß ³ ¯ ó n ö S ” ‚ $"j%ü(Û-'E%#¢.M*ñ&Õ(¸-Á1Ö5ý3Ã2à6E5Y77Ý:8I:8‘8‹6ù787”789™99á;/;:’7ÝBT/²'é+ƒ#2 n a p  Ý ø  ò ì  Ÿ ¬ f ¸ Ý "À õ ? ¢  å ½  ¬!è$%% %0$Ï#S" Ó! –!   ³ ‚ —£   u ‘l +¿4¢8 tåAä2/~Ik}¾*‚T‡)ÝaD  £  Ë' î Ð" ˜" y" ´ g ! ™  õ  + ¾ (  Ú   q" Y' œ)û0Q1³5ÌIƒBÆ6Â6U8Â9ø:M:Ù=W;Q<Ñ;$9d9ó9Ä9Î:ï:Ø:Ò9’9œ8ù7B6M7x8-3½* ú˜/Wá -ò=ú—qÛ"v# à'   ¶" ä3¤2†/ Ç. D1 ë'Î,T3I5J;.>¿Nôg{ŠR¢ …îŽÿ½tIkäXYC«<a3·./þ0ã)Ù%#Q6è7æ8#7¥7\6á6œ6Ô76Þ6D5Í4Ä5Â3Õ3œ2K2Õ3D2Ô2¥020¡0ï0å1’2›31¤1f1-1§.É/j.¶/8.G/€/†0.Ô.Õ.ï0!..>/(.õ.q/1/ï/õ/º.Ï.Ž.Ž-ø-¼-J-}.0-N-W-^,Æ,S,Ö,Ï-N--V,ß,ç,.Ž-H,- ,Ù--§.e--<,c,/,™,&-±,¯,w,†+Í+U*Ó+›+*Í+ *š+Û*b*¡*ä+Û*-*ë*å*¤&V))Ò))&(¸(ê(¡)')Q(n(k)U(–(@'‘((…'Ô( '9 é%'æ()(Ñ'Ê'X'˜'''2'Á'r(^)É)P((‡(ý(´(ø('ƒ(Õ'Á&&·&ƒ%„%[%Ì& %%Ã%C$Ò$Ð%Ð%€%n%³%p%4%Æ&Š%I%Š%†&%Ç%É&&å&¦&á%Ö'H'&e'' '†'Å'&Ì'E'È'D$Ä%Z%ò&f%%t$‹$B$Š$û$K$‹%n%#Ë$$%O$P'›&¡*Å7 ôUŠ9ÿÖ0ÿ+2ÿk3þ}!ý×'ÿ“3üß\KÑý-Ìýëÿ o…‚ƒÀý½—ÖÅý;‚ý`Yù„îËþÆüZüüÊ üL üþìÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿÿ?ÿÿuþ§þÆý´&þU3ÿ)6ÿ#=¹2þv6Ñ5ÿÔD ×<÷;E:29´9ä8d7}8Ý7Í7i727‰6r5)4m3±3µ301¹1¹2G5M63æ3ß1z.Q,3(g+m._2rU žyµr øh j^ ~N †@@d<  Ë ¿! ‡,7áT 9V xx Ž\‘S‘|ê‰*o ì^ #I ÇB Ç9 93 -£+n%£&Ý&`%Í%Û$!  ¨  -)p%}( E)™'Ã()Ø*ô'e  %æ+w1\2ò5476ˆ5_5i8¾77Ç7”7M57_7]7ž6Õ9:8ß8ª<"9Ï9,6ä@É/.++þ"Ë h G d õ € Ý ä = Þ † O  {! Nš " é  š Q Y Ê ²! ¶$ W&6#é   U Ç ½  é ¥ 9 wÌq % ×ê ‡ ^7 *ÚEÁs"D¢'ê&ÖB ¥f×)Ý4Ã/0´ 0 < ŽdS$ «& ô1 Ì" ! ý ø § t ðêø \  ¬ ò " $ e" Â$ e)2-›0§3K8ZS ÿ>ä7û8¿99G9Õ:œ;;S8™9R:¦9µ:S:::U;:T978=8÷9o7´/ùX]û…àÇÿìÓsÇìç…2fl Q" + A, Þ.«)ò+-1‚2#3‰;ÿH›QyP£]0cðlÁ][gDR :›3².++)Ø$0. 6¨8 76’6Ö5Ú6‰7J8;76²6‚5Ž5Ï4Ú3‘2b2W2‹2_0Â222b2H0Í1ž2s/î/µ/ì1«0ò/ú.¹/m/ð/±.Â/×0š0›+ë-0¶0¨0G/Í.x.Â/.ÿ/.ý-·,Ä,¼--t,»,p,•,Ž-,Æ-Š---Y--J,æ,d,•-,¤.-g--*,t,~,½,B-³-?,æ-+Ê,r,´,Ï)ð+"*Ÿ*ž)Ý*œ*Ù+,F+‡*Ú)i)ª)ä+9+*a)à*+*c)á*)Ò)Ê(Ó)¡))˜)R)(X(O'Õ'Ã((”'Ê'™%Y (^)O(X'®'&&Ù' '&'*'|'½(¬(!(Û(“'§(9'í(G'Ö'%&Ý'(=%ù%O%$â%*$w$Û%%˜%%“%€&%E$T$Ä%q%%é&6&&.&±%k&D&Ô&“&Þ&ž&p&m'`'Ÿ'%'•'Ï'‡'Í'<'E&¢'M&Å&v%t%=$ù$Š$K$û%%%n%$›$ù#«$>#$Q'|$“':'Ð*ó3 ÍPS;ÿ>/ÿï5ÿ,3þÎ"þÕ+þÿ4ûþ[ÃÐý¤ºþî’ìÂý½¯þn˜Ù@Èý±ÊþÅþD}û[ËþMüÌüjü®üµüŒÿ@ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ…þþÌ ýÄ*ÿP3ÿp4ÿí6ÿ94ÿ6ÿW8ÉB ;C;M8ó8á9à8œ7$87Ó7Ü7'5R6&43Z3®2i2·3£5£6/4·343Î3 4O4À3%¦ l  Ë tº.-½I p6/ ¢$ ×& ½! úºíÑÏ%ý0 6¼7 ¶3 ‘) 7lêãD ¢ 4æ[~rò ù _ ! 3 O%m-º = d ys}  .W5ñ5ö8'8å7“946é:;8ÿ7½93947…88Ö9Ö8Î9–9˜8–7›9Õ;%5ñ67J@q5…-õ2&Î)  «" € e r» í à … Ü º  N!©   \) q  Ð !è#»"! F    ˆ  £ ¦ :Ywؽ Œ  e ê% I1¦+—?/am6ž$ê(ð< [K è.D3w3 ¬ Ã$ z\ ‹^ «( 2T ð å »   –# Ï% þ# w' p% 4( |-.³43¹9 ST ‰^+?ƒ7ó8}:m9z:¸;J:Í9M9ò9G87Ó708£9ž9:}9¼9Æ7ù7(8ï7è3y)—¸\ ã " -r Ô « g D fPÆ(½ø› ¦! H' +' •, u+ ®.t4 @2ñ/<5;">3>ZD(HŽMÖM)Y5VFZnAÓ2u. +¤*9+X'M!J"Z5n6·8"6X5“5›76Þ7K7û7½5ƒ4Û5J5 4’4”3€21ë2R0¥2W1g1§1È0Q/¸0?1™2;2“2“2A0ô-À,5,>.§.à0‚0›0/¾0"0æ/¹09.É.Æ.-½-|.G-}-ª,ú,À,‰,8+’,ë,„,z-u,Ê,.œ--E--,Ü-R-“-,î-",è,¨+ÿ,ð,¶+É+ß+ +P+€+·+;*»*Î*Ñ+ *P*)Í*O)!)˜)Í)Š((Ò+W) *š+N)Ù)!(œ*Y(æ(Ú)s)*@*z*P*(¡(U(È(N'‡'…((('&‰%Æ j&~+ë'>)'ç'V&è'"'3'#&¼'«(©(ª("(_) )((Ú'Ü&Å'Â(%Ð%ø%Ú%(&L&^%Q%2&Í%I%[% %“&%%$é$Ë$Ú$Š$B$…%9$í%%Y%\%í%å&n'Q'È*Š(Â(‡(¾(~('™'N&Â&%É%Ì%½$y$»%ƒ$Á$”%Z%M%e%¸$‚$¾$$´$m$H%ƒ$‘' g&è*25 SPR=Á/ÿ8ÿ¢1þt#þ~'ÿS1ü"ZÒÐý%³ÿ˜¤Éý¢¼þÆ—W™ÉÈþ„¦š?yúûÉþÏüüÑüÒü ü…ÿÖÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿÿuþöþÑ ýb(þ6ÿ]6ÿ;>ÿ†9ÿ9¹7ÿžB ›=ì;î:„:{7´7¢7Ñ96è6[65^62â0­1b253…3«9u2ø283z6O6¿7»5Ë5 1ç0÷!X Š ®fQ ö ©ÙI) «  9 !v q Ñ ?¾ï®ˆ & æ ¬"=Å2O‹äºYrrô"x æ K2ñGIFa0f5†5†7G7i7ñ8i5€7T9Ê8Ï6H7d5V6à708í?A—@Å>Ÿ=×7™7Q7Ë7Í5Š7Ó?¦7ý-m1â%„ð% ›- ö% Q :U  aý=  G ø Ñ 5 F ™ dO a Š ‹ } Ä  U ³ë+ å7÷'ÍÎ÷Ê » m1ìG›+\,*; ÿN l,&' G.ð3 ý-Ä1-F å" ç)ÑP A *qx 7NR> Õ¢  «+à  ¥ ë ˜  h  ã! 2! •! & 'ë1/ 9 žI ¦[ ùgè=819<7Ä:r:‹:L:#;i:»9r99h9ñ9©969:/856÷7+9¿9ß6-/v Ï  «Ì  žWF×3×q í «»+— ! ²" ˆ#“*ó0­.~-s0 2n7O;==–>«@¿I FÌL¬MZCO<ê2À+Ì(-Ž*.  °,«646±7m7H5é5Ì6Œ7 6Œ5û4ù5 4‚555Í5D22f2(1ã1œ2_1™1.3‚4ð7p8“:w8N5V/y0¬/{'~&Œ%K(\,"/»/W0@/æ.õ/Ø0"0ð0$/k.û/.¼.º,Î--‹-Ë-†-ý. -r,Ó,Í,ç,µ+˜,\-C.!-É-—-E---^,,é- .&-7,ù,È+Ë, +Ä+Ê+I*~*Å*…*M*%*Ç)Ë)Ì)Š)Ë*+5*Ä$0  – W b+8Ã7Â7º-´)§)i(¨(()c'~'M(á(g'Í'P( (O(;({('º'ƒ(I(y'“'€&Ü)¶-Ø)ç'Ð) 'f&¥&¶&ñ'h'ê(í(K'¢'æ'ì(†(Ð(Œ([([' 'J'ú'%Æ&°&¹&^&µ%ÿ&r&Š%ˆ%$§%Ù%Æ%$P$Ö$J$$ #î$Z%%K%%™%¤&.&å&4&Ü&Î''_'”'ý'‚'2'I'²&€&/%ü%‹%€#Î$Å$@$z$$#à#ß#s#…#Ä$b%$ï$%´%…' ý&Î* 2 ¼T„=ÿÍ1ÿë7þ57ÿÃ*ÿËFÿp3üãZJÐý&Íýjãk–w‚Ãþ˜‹ÈýxÆýþ¨ÿ0qú‚ÊþÆüfü›üìü~ý:ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿWÿCþÄþÔýí&þÇ;ÿL3ÿ9ÿA<ÿv7ÿÍ:ÂB ß=Š9„:Â9<7D8k8\8ò9`5Ú6ê63 21Ù3ï3*3î423ª4)3|4578²936}6‹2É1j0T&c -ˆ¥ ±/ x K K 8  b  H ý Ð :.ŸM q MØ f„ñ³CE…{ˆ€w=Éf ­dõ —|M v ×-)7¹8H6@7ô:´6,8v6q66Ö54Ó7\6à7>/‡(û:Ì=í/"/T0É9+8Ù77Ô8M8À@;Ë.b1‰'­$…*ª: 27 × ¥1  *4 Ѧ6 ; Ê  ]Õƒ‘; Ô ) Ë D   R2ÜZÔ óBê˜qæó Ž Â* |9Ue2% & }- MA R*Ö  –#b,<+ð,0¢+’ ‹',Ö8!2A1YIÏ2P Ö& Ç È;²eå) v f g  œ  ì# Ó! â" " ³! ð" §% ‰) *n1:3·; L =dvz»<„899ø9µ9Ã9ý:Y:¡8ð769 9i9K88Ö8Å8089N:x:68«6v3f'­å 9 w€# ” Ð {‡ÌT ¶q(;¶ Y# _!!G'õ-É*%}*º+ò2;5ë5¼=:›A BEAÄ?:¢5]0P,Ú&C$¶! ¿ ¶ 47T86h5€5Ù5ˆ6Œ6Ï606;4Ø55“65Q4Ñ64ê422á142­5J5é?=îC¶;˜=§=;8$5L7w4/À/¯/Í/÷.Ž.]/O01·0.Ø/%.¼/5.±.¨.)-ƒ.-³--C-û-û-Ä,Ñ.7,õ,ž-$,¹+ñ,Ô-e-_.-É-X-Æ---)-b-,a-h.4,,},ô+,¿+D+#,I+?**Ø*Í*L*¼+*Á*+G+ +Š*ó++(ø(.š,¨0)4õ/ƒ+)l)Ý)Ø)R)Û)Ê(–(’'Ú'U('È(&Õ'Q'N'ˆ'Î' ' 'N,R.=*=%°(”'—'e(å&ñ'´(ò)/(ó(Z(W( 'ç(V'd'e'R'#'Ñ'à'&ò&K&G&K%‡$Ú$k$Õ$©$ê$â%O%${%¹$ž%>%$Ç$ž%$ú%%š&Â'M'&È&Ö'$&‰'['‡(3({('þ(<'ü'E&À'|&Ñ%<% %¯%% #È$:$\#P"Æ$#Œ"ÿ#Á% $s%) ¿'—'Ü*i6 NPR@k27ÿ*8þ¿&ÿ(:þÇ5ü([WÑý Ïý ¨ÍýßÌý®·þ眪šÁÇý±’ý.ÂþQ‡üýÌý:ýý$ýÜýŽþÍÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿ8ÿ8ÿVÿ’þÉþÒýI%þÈ4þm9ÿ 8ÿl8þo2ÿÍ:ÿäC T=l;::Å9à7÷7)98q8o5%3ë6U4Ü55#222{3s402m2·3J5ñ6ú6ø75”555í4+/ë  _ !< ¨ à   ² V 4 ! ô & ´ 4 ´] ² ÿ ˆÒPé<R¢Bfºï¢ˆX/¨Ö†  é(Ï2“453¶4Ö7¯4.5c5Ò7%6S33ž66d7;248,Ê31,à);.2A7Å79Â7Â?–<Ê424¨(å$D4ª= Ü0 é Ÿ }Mÿ t •ül éoF«ò Í j d › ø ï « l ¤/–$uš–Œ'MCÂWõ/0x/Nl¹$ " $ Á1 K)! ñ  r,ƒ,—(ò*¹*¼  ï'+Ô0µ065!1²3½  P/ èu¢ƒ:0 âÒ v! ½# O$ ?' ¿' , c' È& à) 6),ú-c2P9õS ÇuM’ÐrÂ9º9|9í:O:}:\8L79909Š9:8©8á8Ã89C8 9I:928075b/  V  ˆ ZÜ/h¢ §Lô;óÝÂjÆ ^ !" G# W' F& ¤! Î  n!£&ž-ë4<6Ü:È=DEwC7¶62D-©%*#1 Ê 2 '26¥7!7l5Ù6A6S6‚676þ77‡6ü66g8Z8{8´;c8>/ú.g/—:*@õ=ø?»G4F¤BH>r?é9m1Ê1<2z1ò1¹0x/Ì-Ð/y0M/Å.á.Ù.¡/ª.¹.ô-½-Á,‹-J,Š-----»+G-9-8-‘-í-½.4-Ž-\-W--¾,É,”,b,¡,\,Û+À+é,b, ,1,,Á+,@,Æ*Õ+Z,{,I+ *]*ß*•+A+C*)’)ë*+++¿+M,Ì.h0ê2ñ.¥,Ÿ/«. *ø(h)×)O))C(N(M'š(•(I(<(<(9'' ) ('@(.,æ1(“'©'](' &·%‡&k&x&·(“(_(^((Î)j)Å*)9( ({'ú'í&æ'&ð&~%Ê%ƒ%R& %‰%'%@%Ò%A$I$#Ä$#Î%Ê$P$Å%=$€&<&c&š&Q&Ä&Â&‚''Á'²''Æ(C(„(E'Å(R'‰& %Å%y$À%ü%Ì$Í$Ã$Ó$a#Ï$V"Ç#¾#ž#Å$B%4%Q')#*Ö5 ÿRC2ÿå7ÿr5ÿ¸&þØ)þ.ühW’Ðý XÅþÃÆý ðÉýÚÆý­šxšÄýösûAÆý=†úŸÇþƒÿÿÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿÿ?ÿÿ’þÅþ¬üÖ.þ5ÿâ3ÿ7þ_6ÿ«6ÿF9‰A Z;k9ì8Á7Ž:j9^8 6¨7ª53V4`2â3˜0|21©1?1ƒ3ë2p34n4¥3ð4‚3ƒ3Ù1P4º4¯0À,Û ¹é,• @ Ô × T ¦"ˆ  òÉ) Ÿr    F Ç à l  Ãj  \ ` ­ \ 9 ñ´y  `ù:ÑÙ/ÄÏ Ç/a451õ2•3®3å6Š5Z43¶2-203n4Z4f4×2b2ê4£5ë5]342/40Ö5[96p67>7<S4C3¯+ü%‡6sI É9 'y ˜és âê¼æ ¹l».o ª Ò ? d! ì , ä  v– ' Ø a8ů\d" >6Ž, d/T! ‡" Ä*B'Ñ# ä&g&»'Õ*'Ô!g%l($-þ+m1´+†1½%à! —9 >gHV , Ÿ O2 ¬& " I% $$ ”( 7( j' ü) ·+ ¶. Ù..É5/I §o àz =•.e`:c9 9ƒ8Ö:U9¶9j:9:8ï8c9B9 8”8 7É7¹8E7×8¹785}1F p D R 4  ¥ ” :  X Öù*ø`ù‡= W" b( i" ¤& ë É ¹ W Ç" ó& n-s5r6R9k@Ç;Ö4ç2´2„/9%X%< Ò  “37¥7â6Ý666Ð676É5—5˜7<Z?K>Û;W;Í4:1 Å+%Y+£.´:ÆBåH2ñ2;0Æ0¿.Ô0/À/Ã//‹/S/.«.a.,.h.;-ì-D. -Š,Ô,Ö,€-D-,ó--¿-4,-z..;-Ê-Œ-(h+X-ƒ-µ-“-Ø+´,¨,|+|+Š+þ,ø+Í,¹,Ô+W+U, +™*++O*,*L++ ++ú*’+B++F+]*Ž)›+&/4ä1l.K,ë1/$' '(Ö'Ô((æ(K((L'‘( '‚''p'('™)/°/).«.%Ü)'Ö($'0&x%|&+%ý&&¾'g&|'í(]'™'ø(A( (k'¾&F&ö&r%ú%ý%½%€& &q%%$Æ%¶%D%$Á$ $$%7$ô$ô%M%x&B&Ó&š'&ä&X'D&¹('‘''ú'A''Ç''Ð'N'B%Š$†$Ê%ò%#Õ$Í$% %C#S#‚# $6#¸$´%¯%V%×'Ó*Ê5 @VÅ>3ÿ%8ÿº6ÿi"þÊ'ÿa4üXPÏý ¨²ÿÎj#rÿr¶˜ÞÉýû›9„þRœÌþÿÿÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿÿ?ÿÿBþ¬þÌü)ÿH0þ¥/ÿµ2ÿð:ÿë8@:ÿ\B Ð:†:ô98758­8â7ž7ã6°3è3§3ã3&4™2þ1ó3h2ý353½1ü3b2Ã4‚2¸4Ã4!1f0Û33ú0Ã1ý*2 ³ ³ ; Ü p ‹˜ q" G% )%'©&k#1!ã! ¨ 8[ ï ¨ ¡ Áõ´ ` E Ø Ð Á ~'s Iâêsó a @*ï3K431Ý2f34Õ4×2ê4³4®2n1­2]31m2]3 4¥5&5Ý6 75ç4|0ã.V8‰555ž=g9™7^7‰-Ë#/m>U7|,)%~ ø Dá Á ã ÇH8  ) † t€ „Ô X 6 ¹ á °  / · * ¡# ` ^ CPßá ùG4Ó& HB ¾/À ! ö&&&â$ÿ #”&æ'$)( <%j'÷*k(%(˜),{ ä# ®; X_aI‹+:iŠÿ·2 ž$ A' c) Q' p& ý) }( 9- 0- G3 E0 ?6 ÜD íI 9R *p—ã¤þ³Q7Œ6Å7S9:U8ì9#908Ý:¦9Ù9Š9;9p8~8°:ý:x9s75õ5t+qÌ ÆI,µžq» \ h ß@aÙo«  T ª y V [ à  ç Ñ" n0 <:ÿ ²8 «6…CÇO÷6]3ù-©*"¢ Ÿ$ ¥  ³(˜7J87 6Ü:8Ù6š6Ê7@78.>›Dˆ>4>k5.À-,¦-Ž6p<Š?.@®L "LžCß@bE˜–ËýtÌýúËþFÌýøÍþŽÿÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿÿÿ þ¼þ ü?0ÿh*þ¶0ÿm1ÿ¨3þ¿=ÿ6;AA Ÿ;Ê:Î:ý8Ç9í8§8›7&6’3k3u2õ2e3§3·1°2j3/0é2{2<0ú294©4w5z40¼3%2X0“0ˆ0×/c'Ÿ — v t á Òás Ñ0Á.I-Ø-¸**Õ*û(“$Ó"T%§#ÁØ! !0 * ý ¬ Ò’ˆ#À(N6@4„8®L³O ìG!É0?3å2{1º44Í4À4F6ú3ƒ3·1¯3Ù1n1á3v6Y54æ4š6]6c6m5Q8=2f0@/0 96$=-9ž55¤1)á/4§8F5{.i.1¨ ½d*!Ö èä ¡ Ù ¨ ® ?, U å ó q | 5 —  ‚ d¸ ž ‹ 1 >  >2‘% 2Y19 ¢ ]#^&Ì%½ ù ò'­'¢'ÿ'±!­&’'],@(S(æ+V&O L# œ8"Mr3 ,±u4§ÿj$1 & ' |$ ²# _$ À# ¦( +: ¢9 }3 –Eò8…;¨I $tœQ˜è—þ =U7b88?9 77{7ˆ8µ9-9Ù98¿9}9r8ò9î8Þ9(9(6v5î3+ `ñ!¸# æº÷á¯^QT³K±¨ o 7 N { 2 c } @ E B o+D5 áFþžEÿ sEâIÐ9»9¤0C-˜* ¸ H"  î3¯87¦6_6¯66I6”7_9_?œEsEx?6 º2 ì, ’+ ) ·/ì<ËDX?¨K$IaI BüAÕB:3G2è2\2¾3<2B1¼22}240:0z.¸/Í/W/.’/ .C/.£/d.+..-{-{-- -{,É,Ç-0,Á,È,,¢-F-½--Š-ƒ-J-Š,M,ù,-,Ó,ˆ,Y,,O,\++ø+ú+V++f*'++ *Ú**Š*Ò*Ô*K*Ã*Ä*Ä*+ˆ+¶+Á*Ë+{*Ä)(‹)O)â*+-6UIØ; Q42,#)t/Y*·&î)E(Ù(\(Ã(u(´(:&Ž'Â'Ã'J''Q)Š4c.´."*#¡'Í&Þ&5&¼&•&å'l' (x'Ý((¥(Ì(ø)?)~)8( (x'ð'y'%ë%Ý%—%%A%&$ÿ$V$Ÿ$#Ö$$ #Ö$Q$ø%P%%%ø&W&& ''L'V&ñ(Q'O(Œ'„&%C&‡&ù&Â&Â&ó&x%u#Ô$•%Ë%Š%Q%%Q'D& $"t#ý$O$8%%X%Á%&Ï)“; K¤>K1ÿz:ÿq5ÿdþ$þþ2ü TŽÐý àÐý ðÑý "ÐýmÏýaËýéšNËý{Ìý¸ÌþÇÍþ†ÎþGÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿÿþÂþÁýˆ)þ1ÿÀ5ÿ{-ÿr2ÿ«7ÿ.7ÿåC Ü;Ç; :„:u8n7Ü7÷5ž5§1F3t4æ2ê2â2÷192(1k11É0ò/Ç14ø2ø3“3‚1ª02t/.î-ù,ö*ÜÓ „ œ t Öý “P,©:0://6-=,„.ç-5+½+(°*b)¨)D%m!è l"í$w&é, 'Ý*`R)IÊ5€ á Y(§0J43’3Š4I1S3Ô74Î43«0<0}1f1¶2ž2å4ß85¯4_7Q65 5ž6†4â1V)J4r7 <v:4£5`4a-13G -CÚ4,6&2æ/!Á  Tψ = q e ° 4(c û Û Ù9  ¿ Ë ž å Ó ¡ · • % ƒ , ”8 Á( " ’( m0õ! ‚ û  +#Š#+  é$Æ(£$z&¿!æ% ,'Û)'Í('!™  Þ% 4 «9ø.ï3ðSÐTiwR # ´ ! G $ ®  G  ) 3 òE…>cIgA¼G up’0¬þú¨ÿzsÏ9 7 8|8S7¢88N7c8(8¡7Ö9J88¨9&8Š7J8«9ã8Q5a5å)qoôŸ j   r7J ©]«+Ó¯Ÿlá mšÌ X ˆ O y ° û&,j)I= ¢;÷@z:E5 0Ì/ ~?ÿ m0 š" O$÷887(76ñ6+6b8AoD½CH>Þ9 0È-a%]$ |* ì4|@ëNìdÑQI;³?gE"BÝ< 4È3c1G2E33¼3D3422t2=20/.Ò/‹0†0D0/R.É/.-­-z,A,¸,ú-ˆ->,Ç-H-9,ú,I-,‡,Û-Ë,½-=.<.¸-B,Ä,J,y, +Ü+Ð,9+ˆ+“+4,h+é+ì,e,e-h-j,…,I,S*Ø,ù+Ñ**X*S)Á)Ã)Ä)d* *D+ƒ*…*“*)Ô)‡)•)“(Ï)U)Ô,–GìI `7 g1q-Ž.„(Ê&c(Q(])(ü(½'ø&ÿ(q'‚(('ˆ)'7  4}/‚)Œ$U(Q'%%ª$ó%&&]&V&¦&n''U'Q'ã(Ë(²):(@'¹&ù&p'O& %B%Ö%Q&$Î$×%%$%&†$C$ $$H$G$È$Ê%ú%F%Á%¾%‡%P%&4''Ñ''ž' (&&Q&H&S%Ë&Ã&¾%A#Â$ƒ%|%1$ô%%z$È%J%;$ #~#x$)#¸%8$ì%q%ÿ(d)ê5 sLÝ9Ð5ÿ´8ÿ]7ÿëþ !þ4üëVUÑýgÐýæÑý6Ñý.Éý6‰¶ýÊþÁÌþGÌý¿ÍýÎþ‡ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿÿ?ÿÿ“þþ*ýB+þz,þ‹2ÿÙ-ÿ¹0ÿæ9ÿb9 B ;“;Î9M:78t9j7ì5 4d2L14D2¡2¡1í0Ã1<0ü0E0¼/S1û/Þ/È0Ž1T21 /’1¿/ý/ê.Ü,ü,)=D  ì ù  + vT i?6-.N/{.ñ/Ø2p/Ù1€0Ë0<.ç-E.[+ù++,ž*%ú"Ú!Ü!4 (H )>Y ‘ n ¢,ß26u2X40›34×6»4ð2ö0Œ0L3~402é52 5ž4¯6X6˜4­2¹6¤4,5Q9 3E(R-i6_<¹8Ò1m5Ô> d+æ.LG éD ;6\5Ó4 2X0Ä'k=›)6ä` Ò <ä kcd£Yˤú £Œã ì < ã î * ß | žR " …%ø! °$R+B# “  »#ž#½  t#†&ß#a%F!$ æ%›'(&è%*$© µ Ú% R*ý/W*Î139éNÑ*Ÿ » ¬ ë ¨ - ÷( ]+ @ÿGÐ_÷X ÿ_ÇQLg G\Œ}©ÿ'¬ÿK]19±8µ9‰8d8j6Ò5à7n7/7•7½7s7:7r8½7ø6}8í6é5$51< ¢ÄE  ˜ &ŒÕá]BÖþË‘ç3 ‰ = c §Æ s G ä& # ¹% È+ v% ,Y4ª893Ù6!2*t.‰) ï!1¬9×6Q7"7^7t7‚>6JrIAò> :5ì/>, ?'ƒ( T/|4×;ZPôRžasf%@¿8¼:M8í42–1Á1E2N232ü2J2ð3{3i3<10C0Ž10D0ˆ.c/M.!.‘.Û.#-¾-Å,Ê-Š-ˆ--±-¶,†-G-º-8,€-e,¬-.>-Ž-Í-y-- -8,:+Ð,Q,+„+ë+ð+,+š+ó,Þ,t,÷-p-ó-,J+—,@*_*ž*)Ú*“**‹+(Å*W*Ï,„*)Ü)›)Ž*“)») ))g)-F;a>  7÷2,+F1$#^'U))À* (Â'ƒ' ((º(ý(—() 6S8 2 ,ÿ& ;%('•%ý% $ô%²&n%ü& &<&ñ&Û&0'Š( ''Ÿ'J&™%É%œ%Q$Ð%$’$$6$ $—$$E&Ž#Ü$D#I$[$‰%%/&/%&9&/&%C%Û%ø%A''U' ''›'t&©&Œ&&&%È%É%T$Â$’$Ê$Á$Á$ƒ%%Ž%V$ò"z#|#u$F#N$$½%&O'\)Ã4 ;LÛ=2ÿ58ÿÞ8ÿÙ!ýÏ(ÿ 3û·TÑý2ËþDÌýüÐý^Íýa¿þ—ÈþÏÇþ@´þéœÎþÇÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿÿ?ÿÿDþ´þý&þÍ/þ^8þt5ÿ”0ÿœ4ÿÝ=2¾2z1è0²/P0š0Ä1a1|23l2Ó.€.©-G-Å&³ U    ¾ Á Ö ¢6Œ>T/¤--Ø/ò271Q2ü4›5u; 6+0]*5(û(ž'Ñ)x&O%“"Í!8mhç¸ TT P$/‹4ù5ý6®4N5…2ý7e482Ð370¯1F22~44P3å4j4$4¶6b5ç5p676&6ˆ9D3‚+(•5Ù=½93¦5 8 »'Ï0´7¨4 q0:*:3õ6\6.5èQ á,î²õ À Ž~š\Lý‚L÷ É-  ä $Ì W » Ù ôe –#ý24'þ  ¢#È%R$š ‰ Â í$\ „ ‘"Ý&W#”$ú "«#E&9$4&g%R w V$ , _'ú+g1z4ê4³)‰š/»=±0 · G (( v& n% ³Nù`dO hÿXasnˆ§šî«à©ã¥þ}AT9ë8|7H:8«7ˆ7k7ð98F8ø878¼8ê8ª9ÿ9y8£6•5Ü4v(Î ì “ ' þ ª2”dµÁÿUºBÆ X  ÿ^= f £ ªg!Í$ ½, '6ÿ á!)(Ç.z2-º) +¹/I&Ä)¹7”9R7ì9%7-6çGzThI@à< 33ý-Œ+ Ÿ, Ó/ ˆ6„597ÔJ÷a aQ]¡TØJ¬<h3¢3C3<1Œ0‚/Ü070j1†1Ž2ú22²2g2ò2ÿ2?0B0?//K..Š.Ó/._-g-«.,,Å,ù-Ž,Ð-„-}-z-1-„-6-p,¶-P-Ë-ú.8-C-I-z-?, -,—,Î,+’*Ù+%*¼+A+i+ë+í+ø,2,*Â+Â*ß*P+Î+y*Õ*Ä+:+q*Ì**…+½,ñ.?)(Ñ)V(Î(I! § & 0  ;+à*†)­)Í.[2$0Ž,ú" s!l))¦) )C'Â'¸'¿(“(Œ(N(Š('2Á8 59/5)¬"á'o%Î%;%~$ó&%»%ó%û&%ü%ë&ä'È(I(»'B&K& &È%$%“#æ#à#á$)#$$&H#O$ $ #$˜$¸$Q%~%'}&º%ÿ& %Å&&ð'p'K&’''€'&×&í&•%É%À%ø%Ž&G%M%U%C$$É$$ž%=$Å$!Ú!€"5#þ#Ç#v$ã$„&–&à*„4 ¨O :Ñ4ÿ'7ÿë7!"ýß$þž3ü³RÓÐýíµÿ—‹uÂþÉÌýáÅþ†—Ö»þènûWUù¸¼þ·Îýÿÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿŠþÂþbü¼)þ'þ•6þí1þ½7þ–:ÿ…;üA Ü<?<D:8¼8;6Y6Q54V3:{1%1Ø0¯/¯00I100|1õ1½1p/…//1Œ2µ2 1P0•33R.Õ.“,ê,t-x"„u U m û!?,AË0-™-*ä+ð,“-!+Š*P/93Æ)š$¬$¯"R$~ È!Ê# £ d ‚ ½ –  i ’)¡186è2¤5ë5@4555à3/2¹0Ô2N1¹12ä5W5Û3Ú55â77 6h6n6w779 6à/¼&2-Ü6#:6,8¥/Þ*|76ú/(5‡,$ó2p8H \@ J< Þ# 8 L ÉØäœ¶ÚÚ]Wš&­zê ÷¡ ŒÂ D k 7 œ• Ý""M,ýC.+j! ´  ’"\& ` g Ù" %"§ Ð ³%˜$$B  Å$÷#"#  ý  Ú# z$ œ&¼.2ø0º.  )ÉS ï˜þ Y^ Ì" zF- K) ›' ¬I[BY…g)kÁw+we“¨§ŠªT¯Ûªÿš|Y9s7ø6Ê88´87M86Ï6<5ÿ7/8ó8(9(9r9>96g6P6T0„ Ñ% % 3 Á&R åq¿ Úm Ɖ ) > l ¼ · 7 ŒÞf £˜ ý 1" Ä' Õ$%·*+š)d(œ/ß&ª(Ì2Q9Ó:I:S8'7Ý=ÑND‘= í74/ Ì- m1 å1 Æ3Ê2Ñ5m;±QçhMuqìP Ií;/32Z1§/×/Ï/Ú/©1œ0&22†21D2¹2”0Ù1Ê0/æ/H.v.ª-â.&.h,û-@-».9--T/9-,£,Œ, --,Ñ,ò-,,+-J-Å-U.--?,„-°-z,×,Œ, ,+Ú,*4*&++++r+„*ÿ*e*•*`*‘)`+¸,À*Í+B+Ù+++ )ž))À* )™)‘)S'X" %z$ý!9-þ>“;÷6p0³-,C(%+  q |(Â)((œ('I( ('×('b'”-Ä6 )7Ý7[-ì#ñ''v&Þ&l$€%¢&ž&{&u%Ë&2&o'H'È(“'Q'‰&Ë&I&’$‰$f'«$#0#p#é#a#j#¶%[#L#Œ#‰$$y$$R$Û%%”%‡%ø& &%%Ð&»'&#&L&Ô&e&§&Ì%Ö$”$€%%û%Ž% %‘%´%C%%?%$Æ$#!ˆ"9#D$#ñ$%…%Á%'b*¼6 ;PÊ<3ÿ«7ÿA9ÿrýã%ÿh7ü¡RYÐý%Èþ¹þbyp|Œr–Ãþ‡›ÿýh÷«±ÉÏýÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿsþþ#ü­+þà2þf3ÿ¸4ÿr5ÿñ4ÿT?µB Š<<¿:±9ö7µ7é7¤6`5(4o2¬2 0å0A1±1Æ/Ð1x1ô/‹.â-h-.Ý/Ê1W1[0P/Š10×0.V-Ù.,G-I!î–Ú Ô & Ð '°#œ7‚/>( $‘%'&%•)ñ(ç*[)f'o#Ê! 6 , 1_ Î õÜ N Ç0?¡ =O– ª Z,0ü5f4¶55 7î6d2Ï4o4o0Ú0¶0X3%2µ285T2ë3&4)4z3à6c4´7§7Ù5×;@7ž0b$%n21H0•0_/0Ï.å)x/ .Y"M°0Z8™<Ã= ¼0 5$Ü'c%P ˆ 0 ‹¦UN¯>ÆRÚw • N hG  zò!Â*é* &8$¶'/½UW/W"¼ Ûà"¤  f š &# $Ò f!|$ß%M'!z"I$:$" ¿#» G ²# ò" $ =**å, *<•'g3EHÏÿ UL ¸% ½ ¿3ø) ;* §ZÛZMZÇ]Âm»s‰ÿ÷Ÿÿ¯¨תÓ§¡ ¥ÿV9 7º8J8æ9B8L8Å8?786£7ª8ª9˜8o9m9n8 6Ö664à'\ Ê N '( ];­0 ^ Ó9Ó·‡v4 s Rß d  r ÷ M , «! ã ´$ _ º%‰-ñ.0v&=+#ž+Ý7K:Œ8 9g7±6ËRWjžT,5¸2#0 G1 ˆ3 ž1 2=3ƒ39ŽP£^‡x ƒjvþÔ\ß7s3È4t3“2µ0Š/S/Ô0^0Ê1?1Á2‚3z4+4ú4¯68q4°4¡1÷//ó.ó--ö-:,C+ƒ,J,,L,-. -[,Ý,“-™-†-w-×-Ó-Ÿ-D-J. ,ú,Ê,ù,,F,-‹,ˆ,Ì+Õ+¨,,,c,b,,/+í*Í+À+*#*"*Œ*ø+É*ä*Ó*‹+ ++Ô*ƒ* *Á+ )À*$* )E(Y) )T(/)›/QE3Jm=R1û0ß-c*"  ®&L(—)(X(‘(•(R'ƒ'Ý(a'–&Þ+j4 n2 òR¨0å& Ã$5'h&5'm'P&›&å(&$&:':'Ê'Æ('Ü&ä&Ú&—%Þ%â%#©#ê#?$n$'$k#²#¸#G#k"ï#Ì#'##¡#©$ % $Ò%˜%ˆ%E%O&&%Â%>$@%‘%è&%­%†&.%¡%$$$‚$’$â%T%J&%»%Ž$Ï$@#9#$Ï"Ò#ð$°%B%{$ô&2%%ž'Œ*¯8 OQ•9”2ÿr6ÿ“7ÿ´!ý þŠ3üªQSÐýkµþ8\² ÿþÇýi¼þ¤–eÃþsü]Dö|¨HÎý¾ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ|þÅþ,ý¼%þš0þÇ2þR2ÿ«4ÿS2ÿÏ7ÿVC <Ä<„:E:49*8i7,6c4­2¢2~2¶/è00Y0Ç.,0º//Q/.V/^-½.#/Þ/¥.ç/"2/ã0 /—./v.;-¹) 4 â | ( ; Ô   -›/0$  á á x Ì Ýê å† À  ±  # :  ¤ç² 4¼â +!/Æ2655°2•3N60e5ï363/W/^.É3ƒ/Z13}2ò2ø2–3S4G203n2t3w4 :•7Ù2Ž&+*¤+*Ë*W+*L*Ž*‡+O(Ø)š))U)(è(š(‚)˜,1)8ÌI“JÎ>Š2m,t/ó).#ì$'ž(ž'Î((^((¦(/( &‘)ø6 Y3 qU8•)Î"¨%Ý&=&v%ä&°'^&ê&e'Ì(r(&"&'|''Q&Ž%O%ª&e$!$ž$’$o#¨$#"m"ì# #'#g#§$$$&%C& %% $Ç%¿%H%Ù%™%H%$Ã$Œ%H%÷%æ$²%ð%’%%$™%ß$•%%À%Î%’%S%?$$ #"÷#6"µ#G%E&q$Ä%M%Í&U&–'h)Ò8 òUE7â2þ=/ÿû7þÇýkþ±2û¿SÏý*Áþ£»þîËýoÊý¦´ÿ‰–Éý{­ÿ¿½þ‚¦WÍþƒÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿuþöþü¿%þŽ1þ6ÿ«4ÿ¨.ÿß.ÿò8AA ç<ã;¥:â9¾8¿836Z7(4ó3÷2/4w2ž1Ã1N0†1C1 .Û0>1~0Œ.î/ž,ÿ,y0Ù- /Ì0ü2W2Û1I2Î.ö/.¿,Ág¾$I$ú!Å™ Ý%â)¢!@  » –  “  ² 0   ”Ö § ‡Ì _ JË G 38 ›"T.Ò13:2y2·4+3 4z0\-20á1¡2334$3111Â2€33Š2Ò2„5(4ç3ß9Ó6¡0ä(Ó"º10L2æ0~;v3w0A3ä;Q4¢1D6W6ž-5%‡!„0y=Ž9 9œ5G)÷"ˆ «  ÞË '3s (® ß › d³ v$Ñ'!‚ Ú%&$†"(@2î6&ú  , ± r ª  f$ ì#  î%ð"Ü Z Ó!P#" ! Ž n 1! 2# ®" ˆ% & $ Š).·2\1]60œeŸþ O’4 Å- i* Ã) ì8 _E ~VbeÑu©†Yit2ŠÔy•}„ˆ•Yé9»8E8]7z8•7C687ˆ8õ8?9y9p9ž7]7ß86â65Ó5Þ0g j ‰  f ¸AÒ1>  j ­ÙsQ¤›±¥ í Ï  k [ * ¼ é E ã É ¶  Á( ~;™:8B.84š0ß.Y9¤8÷947›7ßE6Dº? äB<è9è520 O2 1Y5t5î6Á<IUP °VcaŒXçPÃF¬<1.2î3í2o2=3225Ô9ÖFæLŸMáH[AõCºB¢?ö9G3Ž+ )f*Ì,,ð-z,*+ˆ,z.5-Ž-,œ,¦,w,Ï+ô+L-,Ë,Z,f,–,Ú--A-T-Ã-J,•+ß*ª+×+L+Ý-F,d+ã+§+3*v,.-M,ó,·,,l+ú+ª+«+N-Ä*—*“*Ô*Š*R*L)å)R*T)›)Î)ƒ*))(Î(­)-³NÃV >Ò<|J äLÛBì6&2#0!&Ø!'(œ)(“'á(ß(Ó( &Ú(Ã4 ¨7 âB +BÒ-“$ $Ý$Ý$Æ$Ö%%²(&ì&A%_#¶%j%ä&[&”&A'%È$á%b%$×%¡%$Ñ$!$Y$$ $V#™$Z% % $Ï%—%Ý&Q&%‘%%%%5%Y%X%È%Š$–$®%j$å%Ý%&%m%$L%%$d%V%¾%Ä%I$‡$#Y# #¿"Â"z#8#©%~%F&q&&&R&Ü* 8 {Sœ7T2ÿv3ÿ;ÿ^!ýÎ"ÿè5ü TÊÐý  Çý°m-|qwÒ¡£–lÉý:€ü©~ýn{ý©Éþ‚ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?@ÿÿtÿ¨þÓü)þ|.þt1ÿê0ÿ˜3ÿ"/ÿ56@ à;:â:>9)9î9@7j8j5a1,0m1Þ1Z0ì.Í00¾0³/«/.Ô.S.¡-{+Ã-/j/”0ž0/É200Ç0Ù.ê-È+’!7"œ#å)â*k(ü$#‹!ª'I f < K Œ ¡ Ê b . Ù\JÞÇR Ö ¤Ô“ Ú J 1 p —$1D1€2i0t3b3´4d2‘0ÿ/P36=44w4?4ü4²36464y3Y3š4•3¼3ƒ6 65ˆ;G8 0¢% µ/0X2/0‡B ç/-'/y/ü-×5#3÷/Ú& l#þ;¨9Þ8è9m9r8_3Î-V%¢Ü >u X ê]®Íx  °  Ý ÿÇ·"†")#p%J(V1Ð"ê ¤ B ^ 0#À ` e# @#°  ê O$‡# ‘ Õ"y#ð! Ò Š a! %#y" # Ÿ" \%è! Î! ‡*1H3¢0Ù/i>VÐc~âH + ¶( ­+ . 3.Q=ÌX|o}ˆu´hÊ_‘i®hÉ~²†¤D¾9s8676@7D78ø8'9´8£87é8á7ª76^5Ò5!-9 Ô±ú´½ 4 Ñ  Š6êV2Ó® \  ö ¶ ¥ › š < ' ¶"è)4.O> CäAq<²6 3j,”0‚Q68¬7N7#=S_9µ6 ç8¹=™:%1 y, ‹.ü4¡75 <¤C+H5O XSQW±WÊJ?Ÿ3¢/Û5-4a3e2n3|1î3g9ÎL‹TÚJçH ^? ß> ê;ý95Q2m1¹-‚.Ž0/ /*-÷-ñ,Š,+e-+Ü-U-N,Ó.,Ž,R+¤-- ,ð,m,™,Û,V+â,T,‰,˜+Ð,&-Z-,- -",d,æ-Y+1*~+Ô-,c+|,1, *Ã,$+ú,9, ,ù+Ã, ,+*)Ï**”*)Ü)R))e)*)–*Ê0+`­c›H(5Ü?!C¸D%;Ô4s-Ô%  !&›(‹))E'ù((W)X)ß4J6 G@  D±*t" —"»'%Î%µ$p%¥&~&š%/%i&&%‘%$¢$Ø$ï#§#ï$ã$Ú$ë$ñ$ê$ò$é$Q#¤##$Z%%$e%$ã$É%%Ã%ù%6%%%‘%Y$Í%×&%¢$ž%)%=$ô%Ù%˜%P$Œ%$b$Q$ˆ$Â$•$M#É$:$="Î"V#"Ô#­#Ê%•&&=&z&#%Ó&ß)Ÿ7 ¯QÔ;3ÿ67ÿr3ÿqýÕý0ü)RƒÏý¶µÿ‹Ù}4‡T¨G•Êý­°ÿ)]ø6eùÙÃþšÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿÿÿDÿ©þÕý‚(þ!.ÿ¸+þÖ6ÿ6ÿ<3ÿ‡< @ Ú9×8Í8D8õ8,7ç7§6¿7Z360{0w/À/†/þ10?.Í/.Ô.-”,è-e.Œ-ñ1/œ/ï/¢.0M0Ö1ž/Ò/”.:-³$á"¹$ +$-¶+·&5!hz&j –  > … "k  Ï$K B 1 –!9  ¸¥   ˆ³ Ñ( 0…2]11¶5c1y2F5ã4-4j5ù524;464ã4#5U13©3à1Œ3X2X4¼5Ù5™5á4<-8†3x(§$1þ3á0k2:ù1(,Æ0½-ž)54œ9“2®/ÿ î0å<77Ö9r8æ8z819l6€1Ø-Q%t ¼ É ª„Ñ j ˜ Û + Aj, G% • á!¤"Ù$ƒ$)l&¾p Ô *    V ˆ 2!# O ‡ r ë! # Â! ž" Ò! N Í b  # # ÷#ð#0$ Ä$Š* +J*6.5ì7”;CT /_ .*   ?/ e< 0‘Uahqûo²\[QÁ[[alˆkÿl:°76¿65z6D7¸7Ï7ó8T8m6¨5à7à7ª5§5Ø5K4Ò2É%´ œ Óï Ó |Ù  >  8TGLÙÞ ¼ ¶ = d l `  "µ*0±3î3<Š1Û)v"ú "+m77;Ó8F7U6`H>MÇ7h79¼94â/ [*°(ë5µ6ô8tA`AüR ÈU–PŒTåOñCw<³/†1 7S4X4c5Ù3]3r8LgJ A; À;  9ð6 Œ4Ì431e/¨.1”1j0á00R0‘/Ÿ0”.>+à-Ç-ù-.¯-,„,",_+©+‹*Ñ,+õ,ž,+,+-œ,€,À,+Ÿ+å,d-Ô-,ß-V-\,¦,d,ë+ ,`,›-,m,ë,t+¨+±-),¿++Ç+ö,»,;*Ù*Á*y*¾*Q)œ+ )Ö)) (Ô)c))–)Ì-Éa-n ¤Nä9g? a7ë7MAGmA&5š%¬  ¼ ;%i(V(T'X'()&*£3.5 (>$+™$ æ"²'·&¸%½#ð$ì$²$N$¡$è%$º$'#¹$r$j#±$ #û$a$œ$ã$â$²$$)#™#ê#ª"î"à$Z$9#×$§$€% %Q%P%G%²%O%O$Œ$$×%©%B$Ó$ª%i%d#É&~%“$%F%U$ü%$Ð$×$t$„#Õ#@!Þ"#}$~'u%%t%¿&>&°%¿&œ&b&›)Ì7 3R7ì5ÿÜ5þo/þÔþ#þü4ü«QÊÏý&¶ÿÑt&Ó—7•ëÊý´ÊþÀ©ÿ¯uþºÉþÊÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿÿ?ÿÿûþ®þüý0#þÖ2þŽ0þ 7ÿ 5ÿ2ÿ^;{? e8á:.::#:+7¢7•5u4í4%2p0ó/x.ð/0®1O1Ž0Ê,ñ/½-¤,°,ñ-í0*/2-¿/Ø0`/±-2.©051.1'.Ã-<"ûê %Ñ+)‡'$ w#uÍ  Ž H % · w Š . E U1|]Ô Õ È!õ !®eò § Á ¢ \,Ì4ñ4ƒ32?29/®1÷33þ3í4a3B12ÿ3·3+5#2t2·3n2O2g32V5,4ª5Ù4Û;Š52ï'©#=53e/=0/5É2h,f4!-G't6~GúA v5»'38¥7Ý679848«9%8å9Ñ8a75ó4R0N&î"£ ÜN2À u ÞÖk"  Ä$°$b#Þ#ó&O$$Ò!s" ~ g ) ¢#3 · Ÿ! Ò › °x Ç k g è! N U m! %" ž! ¼#: Ÿ ," % W%¼-R-k2Y0‚7;" Ï Ù* 1  õ ¬- 934*[…W mh¶d ZIÒHàON`{­zÝJ‘7ß6ô5‹5¹87×6f7ù837½7:6¨7!7k6¡5å4É4V2'#c ¿g z ÄG„é ?@1Ô* 8-—0 J$ ¹ôÊ AÐ Y Ò Õ }d à  Â"‡.ˆ3p6º>:65V7¡86™8SK}H1ò9 ò; ‡= 59 D0 0/ ) Œ5±7ÿ;ÍCñLgY !9^!àY>T_O±EÛ:è0í45Q3Š3S4@6OBH PH ö?ë545~5 ž2 I/"//þ0Z0Ò1e.£0˜0Ä0S/¶/)/ç.!..1-‰,Ë,Á,Ã,Ç,Ñ,Ò,•+U+,Ç,c,¢+°,¢,¡,“,”,],g-,^-œ,´--Æ-.-i,5,­,`,v,r-Y,c--,ô+À+¾+G+¿,Á*Ã+,=+ *Ó+M*Ç)Ï)‘)\(æ)(›(â(f(œ*)Ž*Ë-)PnO¼Cù= B¿E3¦4Õ?ÉK3J<;ì$*  Ç'¨)(Ù(P(”+9? ?l;1' •!ß'm'%M%ê%£%=&é&©&¥$ð%â$@$Ø%`%\$p$k""û#±$ª%Ó%]$c$l#³$3#i"i#b#/#ç$X$$Ï%%T%‰%ø%%N$´$É$÷%ß$î$Ø$â$Ø$³$²%¥%ä%;$ž$Õ%O%\&_%y%$K$#Ó#¹#v"Í$W$ˆ&&{&~&ö'æ&ç&z&I&š'Ô* 9 òQQ2ô5ÿ36ÿs4ÿèýl"þn4ü*RËÏýn¾þÜ¢Q ¬ÿ‘œç–ÕÉýr¡Q“þº{ú›ÊþIÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿÿ?ÿþýþ·þýüï'þH/ÿ 1þ78þ·5)3¢5ÿe? à8Ô:ä;B:O8?8­6{5‡2Á1/ /.….¹0…0r00N0Ï0ˆ/N-Ô,€- -+Š-?/7.±.¦.ñ.¹. .˜1H2•0n,°'Î!¡$¥)<+ß*f(Á$ /"÷$¯   - Ñ 7 . Å! &ÿ ‰ w  Ï ã"Ë  ` ' “ Á k Œ za.4<2c4Œ0Ñ2K3D3«1r3¶3ý4|4214•2¨43ü3#2*1L43‹5€4Ð4<5q4ð69–1Œ0Õ+ #4a1±,].74¢.Î$L/A+Î%Ã4Ü8. s5“*G:æ6°2*4k8­9[6°87á6s587h7!5,3â19/+`%Õ K ­ ¬  $ Æ( ë+ ^(×%%¦*'‹"$L%ê# ³ ×  Z" B ø Ô ©"  É Õd ë . ! -! $  &½#"(! w  = ÷ 9" % g&(»/+-=**-" $ A4 mìg¼-y¶õ: š+/M#gpT9[æL B5I+Q\ñkúcR9Õ6¼7x66Ë8h8ƒ7q7é8o6<5¦6Ý8 6$._-‚5”2¯ ‘Á¯©(©,{+n ` $  x Æ +' Ç ø ƒ “ eõ× » ä.-5hAägJm±dHL‰;4 3H5n6>6‘9LNCDì6î: ,; M=„6 q2 º1 s) …4a7x@hBØPã\!Å] ËRwWEM”B¿9ç1,3·4©5Q6X5ÖAËT 'M %? %;_;Ø10¡0,-Å0)0$/î/è0’/ã0]0^.ß.k/-.Œ.å.c-í-ô-®.s-ø-Ž-,m,˜,!,+-.,±+ó+Ý,0,c+©,$, +E,m,‰,£,Û-O,$,ö-*,è,k+o+¾+ú+K+ *Ø*‘*þ*–*H,¿, ,3+J++Z,+D)ÿ*Ã*Ã*Ô)Â)A)’)&(æ))Œ*{,¤K{RE{9q?N<Š2 m.1f9êHBJ_5Ã#‰ T%9)&((")?ÃV/X\  G{3£1 /4$%L%%3%ª&£'&Ð&H%Ø$¹$á%Š%g$Ð#µ#±$#j#³#¡$’$(#é$Q$­$¢#¯#È#ö$O%G$<$$¶$Ð%K%“&:%$Î$„$Í$w$­$×$ $¡$Ÿ%%$£$¡%Ò$Þ$¨%a%H&%Ý%D%y%?$‹$C$$;#$$$}%%È&%ì%«&©&›%&Ÿ')!9 âOß88ÿU3þ61ÿ¸ýöþÂ3ü\PÓÎý¥³ÿQªؘÂý©šV•’Èýq§”?ŠþßÌþ†ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿ_ÿÿ?ÿÿÄÿ˜þýý¸'þ,-þF.ÿ¨2þï9ñ4ÿ_9¼A [;ù:Î9€8s6 5>3•481±1¬1w0x./F/ü./²1:/z.Þ-ä.7-=.q,?*Ê/¡,‰.¸.A.ø.»/ï.@.u0¬.ù,H*GM!'=+—'Û(6#u -"Î#êb´ ‰ š p ¤ ý d )i \ ®Q$<&›Ù ™ Ê e ™ ¥ ý v©, /`1y3c0ð4 /2Ä1:34q4z5é2õ2ö2õ2à433%4°3C4†4W3Ý34;4÷2T6Ú94)3Á+#‹0S3Ô+Ô.“5£.’$M/c+‡! n/¦.æ-Ñ+Þ,ÿ?27®, Ã,N5%7j5ª6Ý7Ü664é3 0w/µ/±/±0é1Û1ß.°ø v Æ ^  Ë%â / B2ý,Ãz!È"‘ ã! k Î H š Ò 6 Ÿ ì ë ¨ !Ð ü  ¦" U  Y ¿  +÷$€%  Ö t    h'ƒ)ð,….Û3•1 )R  î# ?, ŒVê¥ýurþ8  ýÈ6 ä( NÑ[-D ÞM B ¯?Ž@ÏAºK4[Ii7F¾7<7R7 6…66À7±7°7<6ö6±6á7Ó51 ¡â!Ä#ý w Ám ü ’&+* · ´ ò ( )w 0  L  àm› t ? V!±)Ó;<]§= R;CGAã*”$ð u)\(+'ª1hS×fD_:U V ‹3Ô0g)ñ ù%L$ $²$ó&?$w$ÿ&S$¡#ù#Ù$Á#Ë$©$0$›$ã$»#{"Â##+#â%%#ü$*$c#ç$E$V%#æ$Ð%¸%@%Ô%‘%M%/$r$k%Æ$E$e$T%'%%&€% %s%›%š%)$¨%O%Ð%s%²%A%%H$ö$L$####v#¸$ò%$¿%A%j%}$D$¢& 'ÕA »NÞ4“6ÿ.2ÿ43ÿ"ýá!þÿ6ü2PÏýµþ¿ehêo‚Šù—"Èþ†ÉþEŽüЫ°ÍþFÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿÿ?ÿÿmÿ¢þýý¤"þÅ)ý//ÿs0ÿ¦2ÿC6ÿ-7ÿB J<;K9s94c5-2D4Ú3‚3V1°/ó/ö04.Â..ƒ.J,).Õ0I.ê.x-,-ò. .m0a0q.¬//1(2261m/9.ÿ.l,O ù!‘%s-À&¶#r"¥ "ó'~#Í!Í!› "*""6#•" v"B ò!1#ð#º Ó#¹& — û Ø } _ / Õ §q+¹/š1ê2j3'31y3¾21ï3'54Ÿ2à2£3_2¹3»4¢3Á3F6€3b1©2Í4ù4v3=6t8Y6®3×*—((+-b*‡1R:¹- %!J(ó&ö,2,ï(-'*2R0,ö&†'U6"5Õ6é6f502¼0/ó1m.q0Ý0r0p/Ù0,-9!Ñ O Å+w-F#Lô 30‚=N"³!5 º!Ô S C ˜ . ? Õ Õ ê ð  ž O Á Þ  ¯! ]  '#+#‚!    !  »(«*~)<0¸._*B! µ! !( c7 èR ?Zù93%­‡% æQ J Ž@ m8ï;18M3´2p1 2 0900[12‡11Ý35—8h< :ãCùC¢H EŸIŸHE›@™<|;¯:66 76Å2ê4d3Û1æ2«0©/2,ê-",¡,(,ê,c+v+`+ñ+ø+,i,p,,m+û+T+F,C+ú,*+†+¿+‚+‚-+L+*‚*‹*I*)Ò)Þ*š)Ý)â)Œ(ä(4(]))“+¨DCM·EÁ@D=¢8 Ä2 Ü/ ø1óYPEIè:Ö-4*v"=$'Ò,ÔIV`q\ß\Æ:A“A×.1#r$Q%¾$s$R$ñ%%h%i$à%%p&&$¦$©%h%"×$¡%7$®%¿%%{%¤%S$©$c$ $R%y$%%¹$€$Á%& &:%©%¸&%V%Ž%h$¥$_%&Ý$F% %X%¢&L%â%%E%{&5%{%>$ù%8$ $´#Š#Ã"J#B"Ë#–##Ç#Ä#¿$H#Ì#º$€$Ò%Î'–; ÉDl.93ÿþ2ÿÖ0þ®þA"ÿÈ3üAPÏý_ÉþÁÉý¿Ëýï¶þo¤ÿº—bÂþĉþÎkøI¥mÌý½ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿÿ?ÿÿ_ÿ‘þüý$ÿ€'þ–1ÿ‚4þ?5ÿŒ4Q7ÄB < ;99s8®676L7ñ6g3_3&0«/Z0%.°-z.€.O-/•/ú-Ù,Û-ë.!,¶,r-ò,²/¯1Y0¦343[02/–0œ,ó+ŽÃ!A$Ä(×(4$¦  L A&%h$$ñ#ý%¨#g  U$î$p!=$F#Ú%L$>"'à / ‡ E  ° a  Ë#•./'1e4¾3O4ê2¬2y3ò455b4"5Š6L4^7F4Þ4,4>4µ4ú3K22ú36547<!B&<º9š,z)>,'*½*Ô: äG ž/ Ä% $ å& Æ  î! º I  %@'+'´)4*(*2è6b6F3ç5K3c32Z0ö0ø1d2/0û1ó/·-i+«"¾ü¿Å(l'Ý€ L Þ)5`-g 9¹, $ – –  @ ‹ ; … u À ü ¸" * 6 Þ&*$í!‘  ·  i h% &'‘& º(Û/©)è#X# <#  $ T. q7“JµAR*»1x?˜2ñ<9VlT Q> ? e> à:=6Ó5 E½K‹c Zm áG,7”66ƒ66F5Ã657·6605÷6á5s+©(N1À Çt \Ó_p Ó¨™  £æ`xHÉI’ê6 -ÿ ©" ¼ €  ØQ(4 =Ù/2hÿŸD Ïn  `( (>/5:³6pD<£7œ<¤<&=ó<e96 S0·, ; ½J )Y >^ ¹ZoT»YJ½C99)2+5#606/3ó6|CªX úH $; T6ÿ63ì1›0±/f0^/-2´4^9/8V:þ<‡AdD¨HÝHUMûS‰S‹TÐU WbQÆRúJpHXF9Dÿ>|=<b@;@BC÷DÚCE?Ù>A:ê7÷/ˆ/7-,4,7+©+è+3+†+z)™*‰+ª,},4+ *Õ*++H*Z++@,E+ž+Œ,v+Ä+B*ˆ**)™*)€)›)!)(Ú)*I18GÁOüG;Kõ9 Ÿ8 ç15,µFã0^m<B7Á/:*j!È"Ë)3:rFËTùI¥L/4“3Œ1‘)ÇÜ#C&1%X$$ï&É&3&&k&&¤&Z$Õ%—$n#g#Á#©$¢$4%+%3%¤$¬$‰$í%%”%$O$g$Ñ$Ÿ#§$d%Ã% %x%·%4%n% %–%`$]%&‡&&&%Ú%Ó%â%q%Ì%É%%‘%8%B%%8% $†$3$º"Œ"²#ì$#Ž"ƒ#ü$¨#õ"Â#Ë$|$%Â'&7 vKg4ÿ>9ÿJ0ÿ¶*þÇý¥þ•2üëO‘Îý ØÍýªÌýóÍýªÉý{™&˜bÊþÉþLÅþÉþÌþÇÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿÿÿÿIþÕý4$þy,ÿ-þ3ÿS3ÿä0ÿ24ÿ%D ‡<¹;{9\7/6p4¦4Ã3@1Û1ñ1è/¸-µ.³.¾.Q.A.Ï10‹-Ý+¬-,ï. ,@,y.Y00v0+1)0g/¼/o0‘2c.w* z!$q }!Z"ÏI h%î&É%&â'£%è%>#ù%­%r#Ê%o#u&>$ &ê$& ˆ 6 œ .  î Ë +"_.L/D/æ0 1K3™1d0R2»2å3©4y56‹5{4p5$4ì5}1Ð1×1¿1ó2ù3¿1ö1ž8‘FFi?äA'+Ä%Í-`)Q) /ã20 - ( ç'r"  l   E + F f$¨+Ý-R3ê5ø5Þ2õ3²2{5Ó2u2¦1Q2 /Š1©/x+4# '$§ ` È&:,*™Â Ê #ø.¬1y$ 5¡ ”Š B  × I V 5 ÿ g & v ] ( a & W"ù#   ’  º Ó ~# ë$a# ³' ô*J*Ö# Â& ç% þ$ £% 0S×[†5 G ›þœUY/†M gF¶E G9 d4ú8¸<¬2'9PFÏJIT@^ dW^:7°5È455ô5»6i7b6!7r7)6Ý6Ñ5æ7]5¥0LLåT·? þ6'šœˆÜ‹ÜèÚj 35ÿ « ÊŽ > Ð$t&P*ù9.)9† µß gD›46˜7Ÿ5àCÔ>è9G=!:n?,<766¼4>/ ^C —K W 4fD\âVõTÆLÆCÿ84 7]87R4ã:G „sÈH e9~85!2ö2›12ž9AÎC•T%NkCxA C˜L“QX,W5YEZXHWÈS¸Q;NaOnRRžTîM;L+N¯KÄC‰KZÐSaUCLÇMI3BA:5“253 .+%)Ô*+++*Ï++x+B*Õ*U*›*ˆ(¸*h+C+Ð,š+Ð, *§*˜*S*)š)Û)a)_(à(h))Y**/¤:Q/Bå=ß4 Ó2ý6S1žRîkNDi>Ã?1A*Ï#!ü1úFýE'?ñ;@6¥2^1ï03.%p$&D%·$¨%™&Ó&,%º&*&³$¶$þ$ÿ$©$„#Ñ#ñ#B$#Š#C##ô#Å#?# $#%$Þ$N#Ï$H$Ö$$ %—%%A%¿%†%ˆ%O%$Ñ%%%Ò%™%Ó& %’%z%b%Ñ%Á%Í&&%$ $$Z$í$J$K$ø#<"Œ"J#Æ#L"p"ƒ##µ"¼#T#m$%&e7 ´Dy2 4ÿä'ÿ.ÿrþÿÀ3û·P Îý¤¸ÿl%tsÁ‰Ì—ÛÉý8§‘†þ©Ìþÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿÿ?ÿÿ^ÿ{ÿšýß%þñ)þ.þD3ÿZ0þÇ1ÿƒ<ÿþD D;;x8„7ö5z5±3Å3»5t521v/3.y/s.¹,Å-V.U-ˆ-å,â,5+n*„+ú-¸-¢/_0//w/«/«/p0Ã.ª0"0·-È*˜Sê û¨ ¯ ¡ 2 C!Ž%â'ü*&1$-"~! %&ý(%"¹%8%3'Ö'<%(x{ ¾ Ù  “ - û Ù Ù0/Í.š4s0ë2p26323A5­445/5j5"4ë3ü3ù4M32;1‹1t1150¶3¨=†GdRöF–Pe)Ž)1'Õ Â!Y)V+®)À)Å$è( #º  ³ ± £. ¨"Ì%   -/î4¸2À232ì3f4•3R1^1<+¾)‚%”&€' Ÿ { v þ%k*v) ¤ ’ u 6'â(³'g b ±ÎÈ"<  § ( %  ù  „ Å µ   d . ò  " ? º   Ú!°)”#¨& V" ×)M(µ  .$™& w%0NDdO]4ð7PÊzY3±4G20ã0 Ô/ W< ¹5U2b5E< ë? ×>’K òY žC6¾4495B6u6²685¯5i5æ6k6%5Û7J4‚4´ BD`­= Þû eUk“ÛiéoÔæù®Ó { j r"Î&Â&É2/D Œ I uã æ=®4Z585bC:ø4j9¤8œ;Õ<Á4.5 3­. îB V ÌK ­TAl adXYLäIy95¢6Õ6ß5V6Y>UOÉpÂG %; Ü:76h8²@18<MdþaòRkXLhMHEFTšV”X}]Yb¯fØ_x[ÝT»USKN*H°LiV'_cÓ_€YnORma\"]ÛXZYxQÜL”E%AP<<7‡750Ø/Y.Ò-7+Õ+T*•*Í*…*Œ)Þ+<*Í*Ó+N+U,,z,Å-,,D+*š+ *—*Ü*Ë)o*¥)›(æ)Û*+)Ü)Q+ü8;? ‚=u=Ù5 C>ê0öU´]GIp>[;ñ2Ü*ˆ$H Ž52@Ê=Q937;3¹3°2w0:##«&¶&;&d$^%Ó&M%õ&¤&ì'%&å%Ù&0&#%1$x#÷$¢$º$%”%+%\%Ã$ü$ô%U%Ì$F$Ø%9$–$ˆ$Y$Ó)I%°%Á%Â& %g%$G%%§$­$æ&%Ÿ%Y$â$¢$Ò%¥$Ó%´&O%ƒ%ü%Ú$‘$Õ$$ $Ž&ê#š#F#>"Ì#M$"À! Ž"³#D#ü$y%Á%'/9 ­E|:ÿþ3ÿå2ÿ1ÿ‘"þå(ÿ0/ûÌLÎý[Âþä¹þ÷Äý{³þ§©ÿ¬—RÂþK†û‡ý¼ÃþœÌýþÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿÿÿeÿCÿ©þ² ý+ÿ¨1þe3ÿè4ÿ3ÿæ8ÿB ;A:?7þ7(6Ð62l5o22‚341¶.E.{-…,Ô-Æ,+ž,_.Ö,´*Ê+Ï.0-Á.;150t10u0t1®/‹2´0ï.1,¤1á d 8 C Ÿ . ##)%)$)È&\"Û$L%H$U$¢''V'Í&^#Ž#Ê&@&Ä)òÚ O ì  þ 4 ¢ ìð/‰/V0ª1×3‚1·33†1Ó3±5+5@34ê3=1é3%5G35ö4¶2z2À0ê0ü2 4äHaF²_RŽP"&ç õ 'â/f6m.½-’''õ*40*ý ô ³õ Æ  ‘ S" 8/<:S1ª34¥2«3f0ò0ø.!&[!\ ûÀ† ‰ #º"÷* ‰' #p; + 1 Î ‹$%#d!` Œ F  M  1 ¬ +¼ T ] ÑŠ @ µ –"} M !  |#‚(+ø(Y% /$ˆ'Ž% ‡#=&f*%1Œ8 7../Ë1*3+Oi•þ¯Eh/Ó)+' ¶' ÷*Ä2 B1ß6 Î4ó4Ü8946? I «K7þ4Ë4³5þ7+7¶5p54‹4‡6y4ð537!5ù3 èFÜÔªô \§E1Ò¥€)¡NM,Éñ yé ÿ&%óº$˜"ˆ c ¤$!#ð6p5)6_6ð5¨=b:å2g8|8;Œ=“504’4N- h?"RFL ME |u¹nÅ`mR(HK87Y4R4˜4R5ñBPVnèH q9q7"@4S¯YjKùKž_ UMLS RdGW?rCOüW€]=`gª^Ïb7[ž`;—5{22Û5;2¦/ ,‚*ë+§*á)a)Ê)Ô*>)X*a*+½,Ã-A,y+*Ì*Ë*”*5)æ**)(m*)É(à*š*c,&9‰B¼@>>>E05ý5•Y Þ]ÏJò=7;÷3g,S%× f2ˆ>#8þ7÷7E9Œ2Å/×)Ö z"é%b$j$^$¬%»&j%X&!&b&c%­%X%Ÿ%X$ñ$`$.$r$§#ð$©%"%,$õ%%£%Ò%Ë%Â$Ç$Ü%Š%@%\$P%%8%%¸%À%n%}$ú$™%0% %q%ž$ß%$è%%%˜&¦$Å%“&<%É%I%$†$D$È$M$¾%ñ"Ì"‡"I"J"#4# …"`"û#|$@$Ë%% '6 xGw.ÿ=,ÿÂ1ÿÖ2ÿþs(þ.ûOLgÎýÜÍýíÎý.Îý³Æýê’¶–!´ÿŒ› þÏ™WÌýÿÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿÿÿnÿ‘ÿ©þ˜þ€(ÿ²*þŒ1ÿÞ1þ42ÿ /ÿôA ;;ƒ9÷6è6«64l4ä5L4ˆ1 1\/·/q.z.ø,Á+l+|,š+µ,r,;.31_-½-Þ0—0d0a210g0A1-1c2ë0¡-Èî ¼ ² ¢ Ð @ M F%þ+Ÿ'™&)8#S$&%%e"µ&$%Ì)·)*=)Ï)X,JY A Ÿ  Ø ˆ ¬ ì s.,¬/K4O4É2É5F33ú4µ3Š5l305X:¼3$2£32„3É3B4q3q1C2ã2%= ½N Q ÖU d Vƒ$°!   B&9+D=@6ÖB 4œ'Ó(+-²-€'Ñ!°  z ã  # C# /33y/¶043§5•0¤/÷(* ŽÞ o ¥yµ«  ¦+"+ q  … è Ö"´!6` Ð s « ! © QQ)*0[3Þ5% g ÈÌ  >È ¦ ‘ Ý"%K$H# Ë" :% 'U&z%ó(62à3….I/§36;6-4 =BÓ*¶% Ÿ' 7*å*+®,Ý.w/,/1—2·4Š4‚< H<O4É515»5Ç5H3×344I4€45·5³6e3<‡‹Ï!q)± /ýZ…ÉÂAs R¶Ò&µ/ • L"™$þ$¯ì N£)'23Ì67M7Þ5K<Þ;C0 b7#8Ð;²> 4à4Ý39-Ý6ÏY.eÒs HR ÿWÔSEK)EÒ6þ7Z4¢4#3(6$A‰\Þk¿L 7ÕDISnV\uS!V˜Tá[èO¼GÉRÈE&8r9=ÿGÁTxYhaæa c’gëiq¡wál,i±oIj0jåo¾fBa!YIX¯I=IýVUR7OþOôKGS5J@H:4~2÷4=<Ã<'5j1H4k3&1q.Ä-,+µ*‹***Ž,9+, , +–*R)î*))è*^*Ô)(§)X)ç(§*T)Ê)ó2±;·KCE¨O:Go;¹8U?VEHd>N9Æ4*`)!x7~;Z8j7ê4Œ3…1.# ò#Ì$¢$ß$&$i$·&š%-%±%©&±'û%g%&%Ÿ%©%:$î$â#¹#$%š&%&]%%$ä&%Û%Â%$$Ò%J%ü%Q%Œ$—$ÿ$¾%0$ß$°$t$$*%y$Þ%g% %V&%!%Z%ã%%D%Œ%@%%O$ $O$u%%6$‡$;#Ñ# "¼#0"Ç" # "¸#ƒ#¾%{%]&E'Æ'Ê4 ÁG˜6ÿÕ0ÿ~9ÿ%4ÿ+ þ)$þ2üLWÏý¿þæ”)™M“ÔŽ…—#ÇýxÈþu÷µ¶ÿ¦Îý8ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿÿÿeÿJÿ¢þ²þ(þ|&ÿø)þÏ/þ¯2ÿò2ÿ= ”9Š:6ÿ693‡5n5d4«3]4Ñ1·/¶/5-º,Ê+Æ,Ž.‹/Ç.G-_*H-«-î,ô+,Á.%/ï/§.o-7.Š/O1Ï.“2?/€,Ô< L Û ñ ³ ‹ F À µ! Ï*-&Ý&+&Ô#˜&‘&„$â&Û(æ%Q&&Ü',(O*D," º 0 d n Ö ç Ò\.Œ-Ý.Ø3~2M0Ñ2Å3M4@2‚2B3ö423©1É2L/×00Z2T/é2¾7™3a1t3©C aD ŒT ØH­\ w4*! t '#þ%è*E4£.€6 0j(X%Ú&‰)ú+¨+(ž&mD 4ƒ5 4‹4Õ5V4ˆ3Æ34;3¸455t4ì4ô44 ¤ÕÜ%H †Ò ˜ ¯¢Q%­êÄ¢t^ô± “7 ª m Ú eH E"× $*Ë*É5&5v6 7Ê8Å4›9Ql=§6 O:<»A»7Û6¬3+-w+ ÊVm.rýkMVEÙDÊ?¤8r7‘75f5à8)@OPÒOjP7MÍbâ¡•»|Ëz]nÉl“™wÿnYòN´C91Ø.ƒ247;é@ÂKÝPÍ\½bÇkfj$n m†qxp¯X¨iÄl g‘_ \5UrSîJêAŽHJoKðK!HaL–Kê@g<>6®7]96JµE8O6x?õ9‚427254è2J10²00­-Ï,*€*Î**G+&)ê)¢*"*')Þ)œ)u)Y*K)o*)¯54BÚNÕPWK(BK8e@ ÃF”Lj?ˆ=Ù8ç0«)* '½A±;8A177z2T0†+w ’!)%&%X$L$ $¢%$%–&W&™&©&†%o&W&‰%ð&¡&Š%Ü&W&²%á&Ý',&Ý%¥&%Ú%$%Q&&Ž&&R&%’& %Ò%G$ô%ˆ%Ñ%&%ß%ç%\%&%ˆ%&& &%•%²%¼%R$W%H%%#í$%<$Â$ $E$½$E#Ž#Ä#B"‚$½%»$ñ#% ê&©''6 Dv3ÿ–7ÿ};ÿª/ÿ9þ+þÇ0ûTKíÎýe¿þ,”Ρ ÿ Ë–[ÃþF‰ÿK„ýÒºÿÛÍþˆÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿÿÿÿÙþÇýÞþˆ%þÙ)ÿ90þþ3ÿ0ÿ1ÿÕ= ß:›;Q9‡6}4ù4â34ô5¤5‹2t/Ë.¸.<.@,•,¢,•,l+î+9,ì,ï++x,¿, /0)/¢/+.2/²0Á300~1n.}(èŸ & Ç Ê R 0 Æ ä$)+­(c'Ä(Ã){*·&Õ*=)J(‡(€'i')Ê*ø*Ÿ*#ü Y  … Š ˆ -  D,\.Ê/Â3-0~.Ð2M11û2é1þ3|4¶1÷472‡233¡0&1~5^8*0®1 =ÄB ß:A¢D šK =&= ' ¯$ý'Ú)þ+,J-‡-'ˆ)ÿ1‰3?3Ã3 3-/D-#%o Ç  ¡"‹'*{#Ù%44/l+Y$ V Ù .W« r Ä  E  û%’- +7'(&®'&ä%¶%!) 3!ÿÛZ ì  ¸(‹2z1{/&( "Å  œ µ ”! " ~#!B#ü# \ õ  0$è# ,! l$ $832Þ.E(..2/t,K2È)Ç" u  ». {Y ­‘þàjá  Š÷, ._&?+#*:*Î+ *«-¾.Ž-¢3 ’E¿8ƒ4Ž44ù7}3Q4¾4n3-3L3Î4¼5?4‡1&‰’oà·‚ââ­#¤ ¸&éõ{ ñ B O- × pÒÁ Ò ï Ø ø è UJ$|%R+è:Ä4 6_7 85™6+LòQ8@[4 Ê; ’A7 ¼3Í/ñ+ N- NU ibÌn7pGf:J“C¨75Y6¢7%5Ø6{;4PIeÛxim7MÕb¿€r}~n x7qYqk‡»g™V’J²C¯;ì15/Æ1ë7»:=¢FXOŸ]Qfÿi„o~nAeÀhY]EfÞdqYÍ_]]sR4O_MoD“?BIG—K¼G€D(=‰6æ0\47È<ŸC”;¹6š<ÀAt;ô5®0C/B:=B}DŸBo=Y6_4–4»0t,T*ž)o)Û(õ)œ)÷*¬+"*a)ž,’)ë)±)¯2ËB¼P+F¨B9?ñ6 <cDÀNY>?9­0Ù(±'–*®Do:u= +5%6;0ð.$|•%}#é$+$â$˜$ª$´$o$¦&»'&%ê%`%W%è&›&š&$™$"$Z%é&[%ï&%Ö%&!%‹%‡%& %Ñ%ˆ& &8%L%€&Y%¹%F%Á&%¾&&¿&% %Ï& %®&[&B&%$~%A%A%K&%‹$±$=#²#A$=$ %¨&}$ $$E$N%~% ÷$ô#¾%}$¸$¸&ú* i8 ŽF)7ÿO8á;ÿj1ÿ‘þ%&þö2ü(K,ÎýæÏý (Ìý³Áþƒˆˆ –dÈþËÊþËýºÌýxÎý:ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿÿfÿŠÿøþñþ!þ|*þÔ-þ¿6ÿC+ÿ@/ÿã@ Ø;:V8²5ú4¿4,4:4Û4/32£0u/E.A. -ˆ-;+,Ò*4+z,¶,ª-{.>-l-¨.".¿//i.Â/z0x2†1´0“.S&ŒÔ ¥ d Q ´¡   e%ë-™)_(a*Ž*h*÷+m*°+p+;)ö)A*)`)$&Ã*–$™ :! ƒ † a š 9,&.Ñ/Ö2D/Ð1±2“2Â6/2É383þ1ÿ2:4s4µ3L2Ý10G5£<z792›8A =h9”8t? ¶?2 “ <%7'À'Æ--Ö,”+Û+›0#3W. ä+ % É% r' Ž' É* Ë+ , ú+ }" ® · Ð !>"&+¤24-r*Ü&:! k b ®I  #]-+7~s“êzÞr«KZ/c)‹$r#¯ F J = á  wJ.î4 ·.])·%O    Ì y 0" W& o)W*/%¨-( G! p# ]! X  h%Ý3N0<(x'Ú/Š'¾*„+Š'0"e  Ã) F Ûhÿ X‹ ^S$µ­%3.r#)D+º,-)j)X(¸)k* û;<==3Ç3 35h6w4‹344ð4}675®513¼(– }ö] ôx ëZ  ˆÍ, °: W Ç # RŠ ü Âoÿ 1 è ÷  • Ò Í)ù'D(.4i7D5•5ü4ó6 FÎK{KÍ? Å; s: ½6 ‰/J- n,Q, !]-b—e ½_ _Tÿ4N8;ì3—6è6·7Ž>”N5^írõiÍd ara–]Saºn9e¯j1_ìwÄd1S¬Q€L»@Ó6Q5'4@2a1ï39@5E¶NÇXÑchßo„k=\YP”dñaZ•[ŒUËQLRG&BN>ô:F;>Ã8|5×483ñ1O0Y8r7"5r3Ž;~;Â;“7ü4ã1ê397–<¼I6PÛTvJý:™?WA‹>5œ0š-g+b*4*$*â*Q+‰+_)Ü*k,+±*a,Â<%B@Ó@þC œ8ñ<¼FòF¬AAQ:é04*|$ý,×C>¬5 57ü3—/å,3&#$‚$K#Â$L%$ï$î$®%(%Ä%{$¶$$±$~&&œ%š%¶$Ë#a#:$ï&&¦'&À&þ%È%â%’&&N%a%Ú%‡%þ%ö&À&u'¾&x%†& $Ý$$î$Þ%%A&&&]&Š&½$~$%ü%~&|%ù%E#Ä#B#Š#{#$^$;$E$Y#ô#I%p$%<#¯"û%%z%W&p' ñ; VHa3ÿc4)6ÿ¸1ÿjþ#þt2ü)JtÎý§Èþ†}Ao†?¾þ’—VÉýûÌþÍþ½þ£·þ¸ÿÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿfÿšþþý_#þI&ÿ™,þ/þÎ/ÿñ+ÿ€5ÿ@ P9×:×7U6ø53w3©4ª4r3à3//É/C.-€,b.:,á,c-!-d-.$.-×-Ì.1-©,-w-m-s/ì1?00É.Ã$  M  h&  ø " o/˜,Ê-9,ô+Ã*“+…*ƒ+Í+G+8,µ-³+Î)-)Õ/±(· T  ²"» Ÿ ¿ > Ž*t0Ã/ž2k/²1e1z2ñ5d3w3i3ñ4}545›5w3‚5´2Æ25CÝ;8~3fD[A 7Ð5µ6éA çA* = Ç(÷);+Y.ü0Ù1+-5 8) g Ï $ ñ L k k {$ º* K- <. p& ® ´ o 2 ç#þ(Î+ +F$Ô# z ô I ¤ ÷  W 5$)^;6JLòR,3‡*ì)$#"Ç"¡  M  d y f1 §2 L,×&Ê!ó! ! $ |%Õ!Ñ# Ï( A>8Ñ3G-ÃFº(Œ#é' $(w,V+È*C-Ÿ/*+)},Á&c'”! ‰' >( :5 ˆ6 />0¢%Ä  T3,b%º(­)k(ö+Ü(»)U's&Ø% ú0?•1ì32”2l2á3h33E4845.5o5&2²(G ± _~ gft´  }Õ] ¶(b¾ k R  ;k ›Ÿkõ '2v,@(V ¶ Íúµ'˜(12û5Ñ66ò5º6)BhD4? n; èA ˆ? ã> ò6 4 X1ß. çX ÒSY ÖW K,Fî9Ÿ7Ã6Þ>ÅK¾ThUåS¶][babc®cûgÊiGg!Ócnd¶e[:SóO~RþK=þ4ø9î8ƒ4Ÿ45‚6 9";7BŠH™XdŽfkBbcf£_‰VYT]O¾F%@Ç=ñ9Å7¯5J4=/¿,B++Ê1¤5—5G2O1Ì:à6ô5h8¦=·;ø5«9]< ?}?¥>¦@®?uBQ-UJV@9€6¦5„4`.X,,+Ó+Q*Z+U+_*Ú*e)ƒ5ã>SC íD ºF n8h==CQE|A¸D;Î1•)N(ú6€B ¿8 }4 )5Ù5G1ó&£ 3%‹%$$þ%H$à$-$.$¶$û% #¢$ $Í$¶$€%'%m%%#â"é!$/%&\&É%Á&@%%F&Ú&{%À%‰&p&I&&‚&%P%ˆ&‚%À%’% %W% $ä%ä&–&`&7&‰&R%%{$»$å%©&:%3$Â$¶#$#ü%%w%>$M$V$P#Ä$E$²$Š#Â$m#£$Ä%@&"'û9 F±3ÿ51ÿ­:ÿt1ÿ@þ5'þd/ü‘I$ÎýßÌýu³ÿ@™ކ­ÿ$—ÈýúËý?Ëý>œš•ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿfÿ“ÿ°ýßýN-þ,ÿ².ÿä.ÿŠ(þt2Á< à:98Ê5½3T2}313§6Û4f4i1½/ù.Â/!.[-‘+w--V-ß-â-¼-¡-™,,-¸,@//.è-ö.§.°0¶1Ä0ˆ-‰ ¯ ® C Š x à . —5ñ1<-J-¡0á1b/b+Æ,G.;/V0­/-ú,,÷.o(â$%ö#Ý%O#) £   ž&/0 2 251°0r2.6.6Õ4-4o4Á6 6&3à2Ç2Ö1J7¤K :‰7O6™I ½B L6k4N3tW 3HK ì&Ó/-ø0-0~2b05.42( j Ó c ¾ š : H £ ß ¥  Æ!è) p, …- + þ R ¯ Ü _$;(Ï! ¢ o ÿäEF Ê ª!{ !ï$Ò$!tFgy ·! Ë ‡ i Y  s2s-ò)ö$ !+!²!ü&Ö0È*Œ$à( Î;Õl0<Xø:Êq°&" ‡+¾.M'<-9+c'9(„+Ò)'Y! Ã"~&_$ 4$ 'Û++Â&¨+x1r'û+')Ë&(F('% &ý#Û# ý. =Ï5¹4‰516l3Ž2ß3V5w55594»30Ë*\ Ì ‡Ë Ö§a Ù  y ã  ÿt Yö& 6  ) iÑû, &ù § M"J!Y X0ì6/%-Á6À5ã>zC j8 ü7 ^6 ä7 );°4 ‡4]3”3 žY J :E ÉC:C³@;!?£ELÙPÝRèYž[&ZÔ]"_êcf¤g«bÍ^¾\SXíRTÕM±GÖC€>.<$>c=8Â8 5“4¶5¥375S8? EÔVÙafµbaª]7Zé]æXBNñKå@=g;'8%7S2O-Y++¶.ñ<É=5…2j3»=n=º7:8¹S>l“hSÛHDA$<-:ú8Ç7î0Š,â+ç+•,Ð,æ*9)Ã*{07q> C ÎD  <’=¢G'DÔ>x<þ>1Ý)=#Ä9: ò3 /3 š5”6a-„  )#²%ä$È%:&>&+&c%$÷%x&*%=$J%³%ò&m&k%â&%—%#$Þ$g$9$î$è%ï''9&%Ç%Î%Ž%ˆ%‰&@&L%Á%G&œ&‰&ƒ&P&z%Á&¬%Æ&(%y%s&/&V&`&<'9'J'z'&~%õ%%ë$$‰#Á#Ó#º$%?$Æ$”$ý$…$½#‰$†$º$†#ø$v# 8$ õ$Ð$'8 GG37ÿì,²3ÿ}5ÿ¡þý%þ?2ü°J¾ÏýÍý¬ÊýqÁþQ½ýý¬ÿò•¡ÿ|Šÿh‹üý±ÿ:Ìþ‡ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿfÿ“þ¿ýý¾.ÿ¢.ÿk.þ*ÿ}.ÿê4A@ "98Í8É5–3ƒ3ô3b3h434¯3 1/0ê.‚.-N.Å-ú.—-à-Ë-˜+è+è-¤--Û--.w0)/'/'.õ/w1=1G0>*¸Ã X  § Þ ô  Ì8 ;C ß> 7¸6 }5 ¶4M3X0Þ2Ó0Ø1œ2®3á0¿0/81,"'Ñ$ò$Ø%`!¸ s ‡ 4#›.™/Å2í/†/?.J2m4®3ž3¨5©45¹4ì22R0ä2ñF¥J>5Ò@v@ ß?Q2Ì-·1Tj FC: D0º45ú4¥0æ.:/369- ' . Í" l ˆ ¢ c#©%œ$r$w#V!@ „  5' S. :$ ÿ ½  z S § Z'J #  V Ž ’ ¸ ¹ Û Â  A à * 9 N ™ - ß ]ãá Û ì Ý)5,)%'—"í"® Û"f5£>Ï6"+õ(ø8 ïTo~C_dTEG3" #Â%’(’+ %a&:+j.€'£ É$(ó'ñ'¸JïIË0;4´tÎjÂ,¼)Ñ*'¯'&%å#ó! v!©" " Ý# m( ¦6a=¾3Æ2X3‘5}3 3ü3Ö3—3ž40& C M*Ö }Ÿõ¾^ÿ „´8)  zž SUK +Dÿ î v ô2žœn V z ²)§"¢6 þ _-½-¿!ê*>9š4­9!Bð= µ9 8Ò;Æ<|:Ý5¡/ 7™? ’9­7Q;0?BŒG0K/Q—SQÁV3X¯Yga!dîh‘l £d%cáZ­Q©K…M#KzIËBæDHÃIÐOˆKPD@@ÌA®=>7ª6t314.<÷AxAìS”c [¢c`qVXX”PH¶BL<b7G4p0-¸-»(A*ì;?CŽ@K5È4Ò=¦A <í:îG¾eùcsYRÕk!,p rg H_b7bX¦QªAE8´J!U+_EgƒYÐIKEì>D>²DDã;44G2y3*781Ÿ.V0@6–A ÙB ý9 Ä:7AŽN)G´DtB£=]/•*¶$°>8 l/ Ô1 –1R0Ä# (%²%C$À$ %,'K%%'$ê$Ã&5&c$ñ&n&c&a&&&H&O%„$å%/%‰&%ã&É'''8'¹&ð&z&R& &&K%‰%%¿%¸&s&‰& &&L'O&R&3&Þ'N&Ã'I'G'º''Ô'I&{&3%B$É$%÷%Æ%p$þ$.$¿$‰$$…$#ä"‰#ƒ$J$2$p# ÷" ¼$#»$&Æ6 ‚Há9¨+þÜ0:/ÿ±þ5!þ¼/ü°GaÍý ØÁýp€µ‘Àp_” &fûIQøüÉþÍþÿÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ^ÿJþ¬ý—ý.(þV4ÿ!/ÿä2Ð-ÿª2É@G:Ê9E85F3q2Á2Ï2¾2ö3Á2ô10ø.„-- .U*r.e-Ô, ,`+z,j.¨/ž-/#.2-p-i.%.¶/2f0s.Ì)„ƒ â þ } Q ’  % ² O< ÙK ÐJ {E OA ‰<*;¨9Ø8j4¥87ª6 5„3x6÷4µ4‘/›$B k"¯C  ^ç o,¡._/M0 0{0‡43µ4¡4¨2±1Œ5r4ü350C3ëG©B^A76D ;ª90š.4 Dg  @+4k<=8ó3 4ƒ3…4 $ ë# ƒ" Å! ¬ Ý «! %Ð'à&>%Ò%Ì#4 i  Ã$ $- Õ% † å1  • z ý!` Ï~ ò : C , ´  ·4 šë ¸ « Œ Œ « Î „ R"¸ 0")+&Ž%Ü&m ˆ#7t2^JR>!,Ð1 )B u¬J UÆBYTB)@$À+N(C&¥'±0}/8$¨$<'v-ü2~7¯8¢Aò8çBÀMmc¯Lx+/,F'Ä*Ê(%Y$! 9  6! —$ ž$ œ0VCü3ê2X3Š4€3ä4O21ç2@3Q œqRì•,ïh) þ @ S\³   Q & £' µ Ì jùœØ¥  È z  î%» ‹ †"ž$F/\5Ô6€4 6ÞD®> ê>  < ?éAñ=œ6(+X4•5š5 g2 š7n?QDjO4StOÁPFU Xô],_Qcfÿe™_ÊZ‘WpP QHD›BD@ AýB,XTµT:V Z–L¡FªDHFJ‡>u74D4Ý7p7ØNö_dRdq]0ZDPÙH>@Ê8“4•3).6)w'¿,K,í:0?5C7^=‡<Ä8O3ñ9@ÝX®g ÕTt]÷o"¸r vq"Bo$ûe! gÀbC[ÀR)BA²TìGEIVÚcj_¶UdOßJ7=ý>KLY@~=ëC—MðIæGÅ7î;…F '> Þ4  8<<ºGHAZ;?Û;n.œ*É%(;É2 48 ™5 ú1",/ N %%u$¸$û$ò%¥$ä$ú$î%:$0$/$à%a%­&œ%f&!&X&‘%™%²%r%¢%À%—&R&E&ù&¸&H%ù%%%Ð&:& %Ð%%×&w%†&%U&I&8'&£' &“''C'6%Ç&&É'&a&<%J$ð%»%`&?&G%“$†$%y$À$¸$¾$E$—#C#€#Q$1$#Å#I"Ð#‹%%&6 8Fæ8ÿ/ÿÃ39.ÿ{þ6(þW.ü¸G Îý XµþzTÇþÆý´³•ÛÆþ­ÿ„rû ¾þtÍþ—ÿÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ^ÿKÿ˜þé#þÙ-ÿ1þ>3ÿ×0ÿ(.ÿì5AÏ98Ÿ7Ì6±2‘330Ÿ1æ2˜2p0·.ˆ--”-Î.L-¨,ô,¯-c,Ù-t,þ.£,õ,Ë,·-/-,-ñ.o->-„/\/Å- f1‘ Ð ½ © € } Ë }  …nLM¨O O ŽKÛE¼DˆAˆ>’7ØDC<Å:=kA…:o@}8O"š  Æ î Í ÑÚ$ °)."/Ö/×0N182Ç3q4b5­5k3 4º2Ž4F2´2C5‹?šC54–C c8ë3)0m0©2MR i3R"õ:mÿ $kÿ }U sV ¨D6/ ×  ¨&~#È  j º "á"Y&—&Ž&=')º'«"| > Ó! o-+ÿ Ó ß x ö 1À#ÿ 3 x ’ ¼ 8  $‰3#8W(ˆ"Œ   ã!Ô&Þ  Æ ¾)r)t)I%&*.^ ç ÇHxŠQKl—Sw7À, X4 ]Mw t*¥:£5¨9-! æ# þ(y)‡-œ)X(#©*4.²02û.Ã+~2W1€2ž7(>µb‰8ä+¥({)‘(&'‘  å › ’ % ‡  †% d,dC¥7ë2Ò4l4Š3L11›1-3\3,y" ¸N ¤¡ N ½˜¢=¸ _4 ÿ6)ç·ÚÅvHP…‚  C ã % 9H'‡ [ C3ˆ6Ú636¸7Æ63C:C«F XJ J8F¨: €2 -,í4 m3 Í0 Â3 Ú>£HÍOìTÏU†THZŠWX“\^jeF_ÉX"RàL!DòF0G«Dà>ŒAèDàBX/37†7û6WFÙR9F>>ê_®b4SKLH;Á3[4+4F9qW7a-`C\ìN$BF>z4Ú1Ä/ê-I+A-“27d<®>~9æ:`;ì4˜22w1Ó1û; MðMàP>YZi]f^d_e¹cÖamW°LsKêV]ËM:EÍ@NG_S>Zõ\„W0S&DØ;q?‹EBD$G4O!7m>A ,; 2 c7#AJ(B : õ: A3 æ+ Ü*ã.<¸6 ¥- Æ--)Ƙ!;&3& %ì%{$Å$ü$¹$±%<$[#!#¿$$á%ã$ñ%Ó&š&g%ç%é% &"%Ÿ&Š&I&\%§%û&Í'¿%Ç%–%H%È&&»&%Ì%$Å$õ%ó&8%%%%â%ä&&Œ&U&@'y('ò'´&`&È&N&>%A%%;$†%`%h$F$‡%y$…$@#G%¸#õ$°&è%¡$C#+"Â# "y# _$'= ÈHa5™3ÿµ:¢0þÿÿp'þó/üJœÎý `Çýÿrï…ruæÖ–ÞÀþ‹sù“þV•ÿºÌþMÿÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿnÿ’þÿþQ ý«)þN(þ<.ÿ(ÿZ.ÿ´/ÿìA=9 9M8:4W3ˆ5²3†2Æ3$4 1ç/Ž.Ç..‹-€,¹-.[*Ã+©,(,t)Ñ,ý+ð+¨,¾+z,÷-€-À.8/Á0.È)’]K S Y ] 9 @ þ õ ‘' l {U -j 5v7w\F H A_?q@EBR?o:æ<ê>8óL Ig$â  ˜ Û Í ÔÊß ¹#›,ö.œ3¬1„1ê2î4n4¯2þ5¥22Ž1 2º326S;.7±44<53/¥,Ç-Ž-ð^ \9l'O?)Œÿ /}Mn Άþ +T :+ £$ )&ò$!   Á$q$ã'‡&Ð%÷%œ*&+ _) ×"_ D c ˜1i2  áÆ É wä Í• ‚ § f ù Ö ß  i!  = w Ô @ ° 9#Ôx £%ˆ&Ø%'y&â$X 4"!<cAI|€¤r G·?7 ·/ Q< ±V M: Û0{/¨<U'ô'+ˆ(i$â'*R..#, ))*y*Ì+Ï-€.-1KJÛe?º-¤*C&<$ f" °  £ ’ F …  &# v' <»@5G4@2#2T3r2Y3Ô44‰534;1œ+ Å¥z  ª5ãS U  Žþº0 w §>Ö— ?(p\—ä M$y Å"Y #ÁÒ"6q5Á8U75‹6£569fDÔM@V?RòL=< £0 š+…. ®5  6†DN7S¤UWUÌU¨V’T÷W0]³\XZPR IèGE‡AÝ>Ð>WBU@ÉCØBK,Â*.A1Å2ê5§8¸XBÁ<%P»iÛ[ZT¶MR9î4348@LYnVÎFE9g6v72B3$3Þ1¶9SN K«@e:S8Ø3Í5o7]9t:å:·4Ì0á6a?QAF{HCFúK\MÄM¯I{JM’JÊN:IUfüyü^’XaH’BÂ=äFÚRhX\ñZRMXBm9:;9Q8ÒBQ699V8 92n/9ÆFúD88Ì4 º4 - ž-ñ+ô/HXIÊ:í2œ#“ )'Z'˜'$í%­&%þ%û%±%x%p$¸#l#H$~$ð%)%°&"%â&t&Ù' &—&’&%Ÿ%f%g&§&Ñ&&%¾%Î'Å&Â&‚&O%Æ%Ç%%Ø%@%L$T$ß$X$«%%%õ%¨%Ï%œ&R'g'#'&ã&Ê&À%Ó%Å% $€#Å#´$ý$<$¨$Æ#¤$H#=%\#9"#q" w! ³" 7"ƒ$=$'& 6&Ã&¨; bI÷5ÿ­2ÿE7é-ÿLþ¼%þ÷2ü6I&Îý ÜÎý·Æþ‰¥ÿ(µþþÊý÷–Üÿ0tþ®ÿ €üYÊþLÿÿÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿtþËÿ°þ©ýÛ)þ],þ+ÿ1ÿë1ÿ«.ÿ}D¼;M:Š8 4‡4ø3‚1Ø1ý2D3¹2ï.--ú.8,N,,m+°)°)«,“*I*„+°+¨+é,©, -?-.3.¹/8.Ø.Õ&Ê!ñH c  G Ú  ±  V0 ¸ «V f Z óY Y¼LëDÿIæI+D5D@4?G<(?XF Ai Rn¢)ö s Ÿ  2 ˜‰  Ô-s/Ò13î4Ö3_5“42®4t412Í1O4q/Ï7 7­3´2§6 8õ4Ñ;g2s1-2@ Ç5$)&AŠjÿ /Z ÑU N_ iE¡9³" Î&÷%‚$­ þ i$# W' Á&+$#ú"è$4"%½$Ë ; Þ Å6Q4 ë§  Ò e  ‚Ô   D   7 H!“"J Ô$ … „ ú 8"ê%($Æ$@#1 Ú Û%þ.â;SI€u•r{‘cµ@ €+ ¯- …< o? >#`)Õ-E-¼"'›&Š$š*.C+þ(,¼2\/¿)({+¤+±+œ-È,Î.%,Z&' &&r  Þ ç q  n  ½# r& î3µH¯9Ò3ü4G4Ä6‰8>6r3×3‚3ù41â*ý Q › ÄÇ Dô å6÷¡d÷ ©™ñ ‰Sb ·y o È  º v!À  Ê"#ƒ)5Ò5l7^5[5^5\4H2LBGN»XþXhNI< é.°-ê*œ6öFÕLm;b<î:Ë=Û@•B‚C¨G:4S+±*Ê/ú1Ï2Í4ŸJ¿\ùCU9¨EÁwÆ]=S‚LäP<;I0ü1ä6;:R5Y0ç11g3"6­:¿NiwUl=-6´3©5¢<'BöHœJiGÈG=N:É9 8U<p<i8N9­>…EŒD(B+C¼E¿E¶XÃgy^`ºOfPZxROE DÈ@@ßMTXšZ,T‰JzC¥=Z7¦7€4V6'0³-r-u<ÊBÇ;›;y9Ê7y9%3Ù&Ê)²F07º3³- t#&d%ô& $î$ç%þ%â%á%Ø&l%^%Ú%7%h$k%¡& &Õ')&d'"&ª'Ó'’&¡&a%ï%Ô&"&¢&–&&˜%É%Á'e&8&8%Ì%%‡%U%&O%Q$Š$Ù#ø$‰$ß$á$ß$å%—&#&d''D&É'3&&%%K$##Ó%9#Æ$}$É$…#"p#"ì"²! ÿ  Î"€"}#"ó$E$Ï&'Ý9 ªOi2ò1ÿ>6ÿ™0ÿþ"'þ#/üzGTÎý YÏý ©Ïý¶ÏýõÌýàËýu—–þ–Ðþo…cËþÿØÿBÿÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿlýÎþ­ýý·(þÆ+þ—1ÿ¬-þ×1ÿB4YCu8š:7¸4Å11:/ˆ1Õ12€0±.¼.{,Ñ.|-Æ.,´+„(«).*Q*‚)Í+u,o+ ,l-,,s,z-à.9/I/‰-ƒ$ã!ë"_ ì 2 [ *aõ!ž#ôB Óƒ9X -M ÔI!EâB}C õG mN ¿Q ðQ yR R zQ €Q X ÄgG‹ 6”V-8 ´ p Úãó f œ ¡ %S.Y0º1ñ3~0Û3-422x3J2€4Ì2í1À278B/‡0å2Z5‹5Î5«<".ó.~,¼4©6 '‹5.C CsCSI=“8! ,Ž%›&^  Ž#›$' %¬' &% #!ë!Œ$& ¢#f!Ø f Æ :62é ¨® #    a)¼$(  â –GÛK0t%|% $W ê W š" ô+H)X$M%A!Å !*@*ç1wPf{Øvúš¡x1Wü@ò: 1 ñ) ¦0 *1 ú' ‡'ê) /#”#C'¼,é,W'¿%Õ,T(ð+(ý'A*-G.<(í+ >q¦ÿ2<\ å ¼!Ë I ­ ÿ w  ö% ,wAÓH¢CöBnI:QÿÓRÿ¦Sÿ]LÔE¼:4Ð3' ô;  Ï Æ ÿ çâÄ æ“Ô aú *³¶eÆ kí Å Ï'Y"" ¥ u") Â0ä4<54 4 4Q4e4Ñ2è9•H ¡Q ù\ hO Á= -²990ûAKIûKjN:NºP  S ùT —V _RãO°Hm@Ÿ;Ý4Ç48;ÿBTCHBE¥AÇC17...¨1R1p56cE¶LƒA9Î5ÍIUZÀV‹HïCüE58ø4Y362~1G1V1¾8¤7Ô7l>ÙE¢M->„74õ12Á>ÚI«NñS-O¡GïIŸDáI8JIÐFB¢> 83.3à4œ7->¢Ký^ce ö`¶_Ú[¹]$VÿPySŸKO/N™I³E©?ëFKL”YŽ`ŸYúL`A:5=0î-6R8 @‰GWE–AxBÍ@û2ç&l4®8 ½0!*M$Ù%Â%õ%$o#“$ß%V&% %)&##í$¬$e$«&7$5%Z&!&ç&Ø&_&˜&R&Ú&+%¯$é&(&Ÿ&Õ&×&M&{&V%Ð&w&z&A&x$$÷$ö%}$•#¥$Ê$©#Ç$®$§#}$#%N$m%ß''D&ú&F%‚&O&%Í%¾$ù$®$k$·$ $†%y$Ç#Ö$%9$Š#!ò! }":#"¸" "$”%(< ¢XI5ÿ 3$<ÿß1ÿ@þ:%þÃ1üCÿeÎý ŒÏý éÐý Ïýç¼þÙ —NÀþÊÂþãÉý5ÆþÊÊþÂüôýãþÖÿÿÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ| üOþ"ý®ý'&þ×)þÔ1þ…3ÿ»3ÿu/ÿkE¨: 9Q8q51Á33³34ì342,0.’. .U.Î,‘,c-]+8*÷+ï(×)+r+ó+ã+ò+€++Ñ,X-Î-g-¿-ª-‰*Z'T"ÓÀr þ b$ $Ž[ 3~ßq mOkÙf üi 5e rh ›r žq (o zp êu Ð Òˆ =Ì’ –¢û™O:ú ˆ6 ÁYމ x‘ ˆ.‹0ˆ1d1}2¿1È0Œ0¸/ú2Z0Ò2n1+1‚.›0w.Â-ö, 2N22‚-#.Ü-0,1†0†).-ã1‡2 8M<29ã2D! »5 ›*-)>  y  e$¿#“' W' À+ B& A%³S 9 H  ï  #" Æ Ù . G5± Žu Š “  & þ3 ©  ¼ ó$ •)Ý'.&C$r#± E#+‹,"&5$#‘"“" '+î, Â9 ¸P´` ^Þvx€ñh[NEË94˜%š( !, D.  Ã.B,@(Ý)Á+Ÿ+7+Ø+/%ý&9'(š) '"Ø&S&Ó(g+¶8 ån nÆ<Ô  _ ) G! ? ö! ¦ ž × y 3# Ž' Ë)ƒ9¦K{M—PSÿQÿ5UÿWÿOUÿUþ3Lÿ·CWAm7@ ;r l wý t Ø ôc ?ê7”æ¾ry2 ×õÙ æf *ÀÝ! & ×% ‚$ ®, ~. Å4ÿ ˜2ÿ¸6Œ7Õ8 7 W3 C3°0c2ž3î? FJjNFI Þ: Æ>=LQ?YIFòI>JhP öV T ¢R  KÌI=Aº=S;ë<V;-<I>üCCsH}FïBŒ@>‹B£9.3ã2;1Ã2Ç6·7n>D_?q3~. ™=ˆsd[fI/=ð9ã=;]6u4Ò8;ã7t4¦4ç?Ý>–<8Å1y064Þ;dLUÙcBbHOLüPiQ RüT «U˜6ÿV3x6þ-ÿí#þv(þ$1ýxCÿ3Îý KÈýûÂþ¤Êý Æýª›ˆ–› ¢Õ©KŒýÊþýŠýãý¥ÿ€þ¿ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿsý<þpýnýE,þ0ÿÀ4þ”/þ¿/ÿ{2hCì9R9<75O2Å2/ê012!2X0G/,e-Ü/:+ï,a+/*\)Ë(j(ª*,h*ƒ+²+¥,l+“+i-0.T-Ù2J5•7/!$;Â"J"u 3"¸é!Ù&L… ¢uKs ?y‚} ây | ±{ É{ Ly ùs } } ìŠ ‹ •ÿ û— —ä  ™Ê\Y ( ù % Cóâ«€‡ &.’0Î1]1C2w0 2d0C0T3]2¤1ì0Œ0ò4›02*Î+ 1U1m/¯/ù/·0…+þ,ã2½+º+.0R-Å4}87ý. # „: ¼2 ’*6 Ã#U##a& h) *& ƒ$!Û à£ ± ˜   Î ¾!ê  ä" N8 â:²>­AsBÂCC'CLCASB BŽBDDÓBéA4B;¶5Ó3±6Ø9ã9«:õ@LDo>ò0­41B±WÛM•GÙEA@}=¡:Û:ˆ6ý96R2…3’3°645¾1§/ß.87V<‰3[>…Uî]/d¦[RS{\#gveje¸^nSÐB¹@ÀP-TóPÛKFFDI>Ì:Y7ô9 =ÑCíIøUHYJVLX²WçUpYWõ[ÊY¡Q*JVA%<)IHRTåQ@l5á;hBÜB‚Bõ<Å6ö5O1¬&¨+ b4b.Ì#ß sñ&%´$¼#6#k#c"j"ª"s$$ #À"ì%:$é#à#‡$%0%â%j%v%($³%$·% %¨%T%f&&%È&&%Ò%Â%¾%$ÿ%÷%S$$ô%%=#à$"$j$‘%Z$á#¾#@$¸%p%j%µ& &R&>&x%×&4%%B%$Ê$ƒ%%J%J& %ÿ%%ˆ%ú%?$|#3"Â$Í#ü# Ÿ$ Á&h#Õ#$,* OE $UO8ÿ•5S2ÿç0ÿÓ þ»)ýÇ3üÂCÿ*Íý Ú¾þ bìpEo…@•Ô¿þ…uüIgúNˆü›ÉþJþþ"þÿèÿVÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿ8ÿÿàý…þàýÿý]-þ2þî7ÿv/ÿ"0ÿì/ÀD¨9†97Î31Ê1¼1N1ø1³1°2"0è.¾-Î-*ð)¥*â*œ*ò+7*5+u)Á)Á)ö)‡)Š+ù+Â,(-x*¦/Ø9É;.6«-ü(ô"î#E!$b$!Ø# /* – Or ¯o*ti ºg åh ún l m m n õs   G ˆ nˆ ¾‹a‘l‘ 0 Æ  å    ( Û µ» ³,,E+à/‘1¿0Ë.ð/R/V0Ì1R0N1F/M0ì,I(î(Ï+°.÷+b*$.$,ï,ñ,f+q*í)óPGÅ5Ù:i9Æ-²'q< ö1×*Œ ü-+'o$'~) u/ Š&6$ !³ ´  ™ ×   )! i!’ Ú +cb-)® + ( $.¬x, I2é1H23ê87÷49À;-7v' " /$ ''+%\#ù# ½-§30Ö3FJ\FÀN&Rp>¤95/.G+¾&Ô'i% »!  E)S+`'‚(M(q.r/s2°6«<™@¤=æ6ù2Ñ*v'„)(ë%ô"À# ã  8 G [$ ¡ T  M { s ! # ,ø(¸+x=g@6J²Oÿ8Tÿ_XÿQÿçNÿüTÿ‡Vþ~RÿËI@í"  ¤ úƒ ¡ T Ö õ (! È   Æl¸j;ƒÁÅ ] ¾ µ ü q »$ y( ­5þ ®([- ×)8( Y$  K “ Ñ$%*)ã)ð.÷0q5 ³: …9 w<=à? ™@tC9CüE ]C A ÝAP?<@³B?C·DErDßDxDÈDÊCðCÅCD»B§DóDkCDD5E{@P=¤;›=>)>ÿ?ì;¶7. E@|<ä9=£<(AJH;~:a6¦624Ü6q<+?Ý@:¤1^,˜.÷8A5ƒ3Ö=ÿMR_gúb¿X¤uKw{)€Œ€FunW*BèU‹[©_º\U§XsPEMG0B;Ó4î6J8Ÿ?FÿL^Sƒ^HW9RÖQV2XÐVÀUàO–QN†D@DhNñL4BtBÓ:ð1ä/-/..<*‹#1 Q/})W"+ &Ï%¹%û%£#ó#r"ª!ð#¦"#"«#¨#¬$µ#ç$c$é&]$„$ã$ê$$/$º%)$w$ð%¯$¥%h%¯%š%$v%ÿ%=%@%_%%t$–#÷"ý$f$i#¿#v$^$[$`$w#ß#ž$@%g%á%©%Ñ&¿&?%½$Ç%f%%<$Ù%“$ù$Ã%-%C$}$D$ÿ$„%h$ã$ª#·%#l#è# ¶% ­% $¾$$]) ? hQš7ÿ^-ÿõ,ÿ´/ÿ{"þ¤)þÜ1ü AÿrÌý šÉý~Äþ ÊýªÀýx¢V–cµþ(‡ýwûü“ÿªÉþ ýìýïþyý•þ ÿÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿ8ÿ‘ýÈýµý\ý(ÿ1ÿŠ2ÿr/ÿ@2ÿ¢/ÿ×A896È3220–12@1s1õ0~.@-Ô. ,*)Ý'%* (ã(§*R(Ÿ())()†+ü,7*))™-´0241a/ä*( %x%4#¾$f$w$|P òˆ Ðm Êbx] òY I\ M_ ›e@_ [ ³` ^ #^ ¤f h Áp áu Lw ÊŽ n“ Yvˆ&¦à  ?   ¾ U0 V ^-Ï+3.’-*.ß0…1H.Ð.X1 .J1…1ó1Ð+ (`&û%-@+Š(í)A(¬'g,)»$h& (&7¥?d1G4a, & g8 '0* ß $ ­#0$,-ü* = s( 0}2 ²"à  · •  Z" $"z êÏ ® !?4SF$Ú "ö-)(  Ì$81 ì-z&˜(œ*e,¨4È2.' ˆ' ¦8 0> Z-P(ô''"|#å..÷,t( '*+= U>(A*<ç6 5{-£.Ü/ì+)'\& £& &þ *U#Ø%”(ö*.+à/x/­4(5/¯-'Â%B#w#1'm.?5U&H-6)g+h*e%»(¤& " y# 9! ¤' (š-*A.°J <ç@_Cg>É=p@DnNgO$JðIíK‰JäI8I»KóKK½J¬H—FCETE{CéCLDCÖDÔD÷E@DôBJAv@£@:>Ú>X;~8D9ˆ6á48Û>ä>:N9¾=ý6ÿ8Ý64‰=¸H;M¤JHI@ë2P+Â/¢3H.*.Ä=DõN‹T:OZédÀm;o¢z†(rqK5Up rºqòk^ï`j^ \XõQpHýAÇ803j2³7¡9QF¥OþW4\X'VT[¤RlQmOlRL8 4{8ä:–D™Et=x5,‰)x' Q h.Ô*!b &Y'%æ'—'%ä$¤$+$($r#»(„#Ø#("`#"ì#a$³$d$v%©$$-$%-%4%1%'&%È%`%)$×$n%_%p%0$Ñ$I$_$#á#ª#.# #6"=#c#ã$'$o$ö$‡#Ž$W%f%¡%o%D%Í%M$$%f%O% $Ë%K$#ù$ $ $‘$V$V$$þ$#E#ô#}##À"¹# -#@%º#Ô$Ò( û= Nç:K4)2ÿ*0ÿÀ"ÿ¨.þO4ü+?ÿñÌý VÍýt¿þH…Ke—õ–”¶þ}¢ÿ²þÅþÏÊþJýÜýâýVþÙþ€ÿeÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?@ÿCýsý¼ý¬ý^-þ„4ÿ10ÿÙ;ÿN4ÿ/ÿ6@»:R9ƒ7ÿ4D31L0\0”2/u0>-Ë.. +å,×,q))Í)¤(`)g)>*+)ù(ò*,?*A*)Î+/*à(Î')[(þ#¾!Á%ç%"U$%c r µ_úZ J\ ”W ÆS ¼X XX 5RhYPR gSŒQ+RiW¹^` —dÀo ƒw {m Ÿ2ž­ ] ¿ à   ú ® ë% +Ü- +&,w.Ñ-è/Ö/»1¢0º/Í1è4Õ0)à&U(],R)X&7%ý)?(6*c)J*”(_&Ä)v9 ·/2P*÷' A 7 ¿-  y+;#Î# Ñ' I& Ä%ž$K)#(Æ$2# Á ù& ©- m  † » T  û  ÑY‘Fc 4ÿ+ 7P ÿ ±'"+z)h Ì" ‚" ž) œMOY (H \6 0¦-Ç&3+ w$C)$x$ ÷% w- , Ó1 L. R+ æ Õ µ w  •,,8))O(½*W ö-{ ")-')(G(6+)Ú)÷(0(‡(ƒ'X!Þ"Z$&ù+79<Ê4m0Á,µ,[) &§%# _& 'È'H' o(ð+/<2üK‹N ?×FKfPÿ6Ca= 6K/á-i+·(æ!4 A·ts“Êi S í Ù ãkð J˜Ù"ÿùÚÏA¨ Û ø È ½# 9 ±  D  Ì Ž P K  U# ÷%2%á)¹/Ù4•4334#3ñ>lDFiO@YeU±S“OíNvMéMOØQ>PÝQ[QRCO“MºJ¹JMFE¦E³D¸EEEKCëC|@Ù?½@Ä>i=4>\<9à5W9èA[Cm@–?V65á6 XS5â7 B9Þ>;B°?ü?C;î3F3A3C2‹.'®/a;vCgG¬SÅg]¬cyb…kJunSQU½z¹”hÂvsppiœg˜cMbÒ]5WÜRÅK®Gÿ<Ï.È0ù7?DJH'N³V)Yk]s^`å]CTàLL…;ä4»6³B¿D›IAEJ9|-.&Ò#¨ "ä*º!  ¼" H$ ç$Ž# ª$ b$ & ¹% ý# ø" ÷# #[$f#Ø#`#["p#Ž"$$P$$³&h#3%c$Ü$°$®$¨$.$V%„%â&%!%Ð%Ï$ß$#¿$ #i#«#|#X#U#”$e#ä#Œ$$#C#Î$†$x%‚%ã%i%o$Å%$þ$ß$“%!$‹$É$±$Š#Ï#¶$P%$È$=#Ê$%=$$<$2#°#{#"þ  Ž%³$Š$›& ) …9 oPØ8ÿ¦2ÿ¿,þ‡0ÿ©þ·-ÿB2üx;ÿñÌý ^Êý6yˆ~'—KÆýx•š²ÿÃpü%Zû݆üâÄþfýý”þCþqýäÿ‘ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿNÿý¤ýCýóý[0þÅ0ÿ;-ÿµ*ÿ‘1ÿ0'Â>ý:Ã9Á7¬3E202G2Š2D1…0ù0.F/¦/)-„,R-+y)Õ+:)@*,?)™)—*K)Û**Á)(¼(ó*'–&\*$$M"H$!°!—%ï'ç%Î&C0c} d ä[ ×T °Q jR O UL ÊNBHÝNgGuHíHOFðKjN’UÈ_b·j˜fô? Dn& ȳ × ¾ – h x ÿ'N*ì*è+*-,Ù-Ë-Ð1H4 3^/}1j1ç%¨& l&&*W$$Ø%ó*Â(u&&œ"ï"“&W&û'“30+;*~# º< s7 C0ü  Ó!Ø! #±& D' %l#"« ˜ É#Y"ˆ$B  „"@ WÙ 4! >#ý#í, ÞjŒ>j äáM6 ˆµ F,¸4 âYÓ(".D4_6ª;(C œG Ç6<1ü)f%,$ï$^' ¾& ž' ®' i( ·% ¢" D! )$ &”1à' ('Æ.o'‰)w%ý! «(" ÿ#4#Q(þ)ç*0'*!†%©+e+¹*$÷!°#6&+0/H íoÿ {þ Ü:/M-6,h(¨++Ü.*!)‡*´.þ/6kJÏ`ù6 Î7 2d0Û':'k%Ù% E% þ& o! –  g N ‰ înÖ.5 ø ­ 5 “ë­wÐU—ÙëÕ ‰î h L i ð ú I ä ]  Ñ $ ð ö  }$ ‘& x+ d/ ,, 2+ ¬. ., D>Y]WVR~RÍTóR³UáU UÜY!WyWU/W¹WU‰QÐWeV(P‹LÓHÇGñFvF EéEêEeD×BƒD=@Í?k<„=i=7;L9M OüFžAe>:~9"9i<‰5 ¦: := ªDzIF?Ê5 5r9ã;Ï9r.–,,O3á<˜F…MXWfâa§[]&YõH¡g _w+àvÈp¼qzlçpp mfñ[äY8PfK IÄ>Ñ0Ö.©6:ð@ßGïJáE‚O0X…\ eÝ[§Yþb;XBNÀVF8CäD ?C..'Ò!u‹)!  % È# ä# ó# # @" <# o# U  Õ  Î  # l Ù È 2ñ!h  ¬"÷#Ÿ$È%#%Û%Q%´$œ%'$$e$$‘$$#ß$»%'$ #%#©$c#¤#Ý#h#é$$%%_$í$h#æ#¾#–$€$A$$à$n%$Í$Ó$Û$ß$Ü$š$R$A$[$ˆ#Œ$$’%|$Ã$Š$F# #@$:""Ç!ú! ~"K#Á"•%æ$Œ# &‹) ; M<16ÿ=1ÿg2þ¾ ÿY-þ~+üI:þFÌý  ÎývËýë¿þ‹›Ç•Õ—ÜÄþ†Ãþ…ÃþTÇþˆÉþýý•þ)ýUýÑÿàÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿVþý_ýÊýmþ@-ÿ{3ÿá-ÿð3þ®)ÿC)$;P::}7ò2E/[01Ê2ø3333`0z0l.î-’-Ô-Ÿ+å*Ä+ )_+Â**T+ª*±+¶+u+@(ö&I)6%“#µ$Õ"ûô k!¼ \!z$Ð%J$’%µR %jùV.R—GED«C˜H­C£GõE*AèE}B`>f< @pB U äS TrSêPxB¢") ›= @÷ 8 Ð Ù x  µ ¶ I)|-Ñ,£-/h.J.r/ï4*2ø0p.}/$Ì! ,! *•%B)$æ&¾)Û%+(Œ «"_!%Œ)',q0*ò# %6 ¢1,/#Á ˆ ©#%% ð- É% @$ @!¨#c#;$ø$õ'`#‘$/ Ç5 o"È*j)G%ö5Gvá0ò # ®G—'ƒ$Å+}+îÆÕ*^,V6ÓL4a =  21/>(&%@$œ" ž# Ä" Ð  _ z  P" è$®*¿6¾- >+ +-s.ô2‹)ú&0%´' ì Ø# T!à! )I*¡&ã& !T$Â'z(¬&ü&w)'ž' 1‡3M6´89BÿL'4i,_,*ì-ê3m0ö1ï+D*×4Ä8ˆ>³Ohjw3 "( Ò% f$ ê% ½#')]) †% ú ­  ð_¯°·Fi‡ Á ! ’§FÄ eK×{/Öç é  > º ' É  F ¼ » ã ¨ ’ õ 5  õ  œ' - À. ô0  0 1‹7FžSùS¹PêSâW¢Z{[¶ZD[YYï\q^ž^œbçeq`^bb)ZÖY›^+VTìMJäHÛG1H 2B/¾1W7»?`BÓD¶AãH½V~[^p]+m ‡BâQRcNí>‡=é4Ñ-¤)X0%C   =! ß! y" §#  d ²  Í ˜ > G ± ‰3Ãå᪗Z Ý Ý Ý ["_$œ&.&%$$$-$ž$W$&#f#n##Î$$Û$t#Ü#´$3#ú$™% %D%%$¡$X%(&%â%‚%u%c%h%(%e%%‡%N$$X$h$?$J$M#F$T$É$Z$Æ$Ý$ #K"Â#„#!! ! !@#V##m$¿#µ$Ì'D(P9 hL#7ÿä/i1ÿ¾-ÿñ ÿh*ÿè2üƒ:þJÊý bÆýè•¡ÿ¸œJ¬ÿ¦•‘Çý8ÉþÄÊþHÊþAÉþÏý6ýUýýåýƒþôÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ¤þ‘þ;ýØý|ýü(þ¥-þ3ÿ­2ÿ©/þO0)B£9:88x3Æ/~037292+3-3Û/F..Á-Æ-è5Ç,¸,;+’)Ð+µ,w*z*2*L+­+?*ä'°)a%B&ê%Ø"ž  6!L º!D"¿"¿!ü*ë^´QñH ØG šE qCÑ@ ìC YB 5B ƒ<«<T<þ<;;8=7:„?äKKXNiJAÏ%Ž ˆ Z „   ³  í ¤ « Ñ u!Ë&Ú, - /{- -É-’/G-V,–.„0–'$A&-*(\&†'û(43m$ã(¾)f /!0(u2`54-û,o! b3 „(á*»&˜%›+E%"- Ú+ N' Ÿ( ‹&0£$÷%Þ$Ì$A! F$™ ¯ž&°$'‹-·*Ã%KY8il#™ù. õ+S Á f ÿ+-í$y,-09W7 ”7 ‘5 “/Ÿ)|%F# ! ' Ï Z ñ ³! Ã% ©( S* ’,Ý.«-g+Y-/3Ì.¥* Ç$Ã'.a å" \#‰";$û)0V-D52³1ã,'V%¢%5'¨%®+ä/ï4Ž;a .\ D5 ¶,*R+>-ä;Ú-A2,Ì,699@I ` {â) ) $ a% ?$ ¦% È" h!  '  i   h*éZþT‚Ü4 s  ê <%’@פ­Ý¶u´’ { L Ž 9 V v 7  L Ó " ß' "( 53 9e=‰?µB9GH¶LœJûM>RVQ.T'VpTÞVW®Y¡Y²Z°`¿bªnTo5mcÃbêe²bYfTÐQšL»L NYL¦LzLµJÆIíF²BŒ@~=—D¿F$?ÂY|UoT ’L]B>‹9Û0 Á4 t9 Ð? =S ×VG-DD@¸<¾8–B²9s65<›>Ó?=<¿9j8÷<dEyLN OÚQ,Q÷Jv[IaZb2fl_ýcña1av``(`,aq`|\äXQûKCô;†6;3”556Ö:1=¶@óA¨EBE(NTaŠ_JB(MZiM‚7£4//º0…)o×!~ ­ á# µ# ! Ð  \ E 2 I   І Àår¯ ¬sú–& ñ;`Ê ¨ Ž!$I$#ä#ï#—#a"Þ#Ô#Ã#Ÿ#`#±"Â"m#9#Û$*$$Ï%%G%%%R&£%–$ñ%a$È$V$¥%%%I%H$Ð#À$W#Ò#Ü$]$B$ó$$Y$$$E#A#û#!ò  •!A! "Œ#G#ö$™#°#Å%&¸(!6 BJ 9@1¥;ÿ$1ÿ«þ®$þå/üJ7þ@Éý êÇýô©™ÿ,_¸þó–RÆýx°ÿ–°ÿ£Èþ Èþýßý|ýBýzýŠþÒÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿ¬þ›þ ý,ýêýÜ)þV.ÿ+.ÿ¬*þ/0ÿi-ÿe?¨7±8„7ø2Ä1‰0U2ä1²2s3¸2í240Q.À.9.V.+æ,;-7+i*¿*÷+q*h)¶*0(É'Ó)&'9#Ô#`!5"ÐM å¾ m »è$õ+Ô/-F#T &ÓE "ÐE !k@:> W: 9 «: §9°< x; ³7 ñ1 81 ¤5p2«1Ì34Ã6?8G7Ž?5>b+  ¦ ä Ù Ú Ú º †  ¥ªÀ!R)%½%—'è*-*r*»+ï+ï-Ô.t.¼+_(Š#9$¶$ˆ&$X% (< 2Ž!ÿ+%êE$u$Ê)w($)" D0)M'/)…&%,&#É- £1 ²/$~$³&C$$“$—#ˆ$2#â À. ø&°&ï&'+)³+ì} F{ è žF7# A ð#3 q(ê )˜+/á5ò932)È&7! ® S p v ñ! K&8*®*1*(¶&Ú&®% Î*Û/+. Ž++H)Ö)p6 +" ç 5"±%æ&Ø%?&á+h4­8ˆ=X4M.Z'î&o&Z'*T/ËH/ND/7$ – Î%ö)Œ+O1t8ª26-1/f6¿AÿRÍm¨–/ W& I& A% Æ# _ Ç J ý R '= Ø :Ãö½C| Ä *    n ¼DŠ À ÎU/½9 @ )Ö ¹- 1 Z S ? ¯ ½  H Ò  š$ G, u2;³@[AùB¥DâE GšMÉRnOPO¬P6UU•VXMX6WÉ^»^2aÊfÛmBt’vÿnnygþaÅXæZ@V¢UþOoN©QšQU#PØPÞLÝHÍE2F/AWôAÑJ§WT ÀVŒIpC¦?O9D+ ë9 áC BR dSRöK%BÖ@v9¨AàHø:æ7Œ:ˆCšEÂEBA¦=ì;þ9Ú=AFI L¸NN,YUeg\Â\?Zá^®YâYùYøZu\]§aÐaO]ÿ[–YWT«LqG.@à<V<8;Ÿ:Ø; ;%<Ì@éG6Q~aÑ`z]TLA8s/ˆ-2_1¿%X y  & C" ñ! D  ×  ¹  Á Õ ˆ G M À ðçUNÑùÈùŸÏYU žf’­ ‹!H#›$$è$~$#I$-#§#)"»"´"Â###_#¨#Ü%“&ƒ$Ø$Q$Ø%$Ö$U$U$9$%$ê$×$_#Ú$S#É#ì#ì$Ý%#ú$¹$À$Ï%p$*#»"Ï"E"û!H!¹""ù#>${#·%J%È&W'=*Ð4 ¹L’5ÿ4#3ÿñ*þ_þc&þM,ü{8þÈý {Ëýu”ÿ:hDºþ&¼þ`–XÂþÂǘÅþÏÆþ[ý?ýÒýÛþˆýMýçÿÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿÂþCýmý,ýý%ÿ@*þO4ÿd.þ·2ÿí/ÿ^B¦9•8þ6H42‡241~1õ2ç150ù0¸1°/Ç//-ç,i+6*‡) *)Â(’'6(Ï'P'˜)) %$Œ ­#(!% !ÌB#!%ï5v;“C !0J "ÄF !sB„AQ;Ú9¹9€9Ð< G9 > g8 S6 3 1 Û- Ä+×/ç/Y.µ.8.K.‰6F5Ù/= = Ê î Ä  c K ¤"³+V/³0ð+–%r$''³)Þ)\(1+C,.*Z,Í'¥-*'Ä$T#@"P,p1N/P(€'õ*1&#ÿ"©) * %*$ 8, 7 š2 ˆ? 0%*™#)- È, ™& ô'þ(%î%U#Ê#s"è%Ä( ÐÇ. ¢*c+~2G4Ö291¦I~ƒ/æ L/†+“ D r k8 Ö=8 #û&ý*K,á)'§! T “ : " V# Æ&Ì%Â!Ë%&^)›(&º'!* (ã% [%©$ ³% Ä%4~ c% × »!Ø$Æ&»,Í- )‘)º'¢$À*€(ö(%ý'r)…0]E ¾lüwÿµD L'0 : “'+¹/†6Œ52,ß.Ê1t9£M[qw—õ7% £$ % —" ð o s! Ú W ; w   w š Ö P ° Å  ² ë  ä Á ø+›Y  ù › L 4 › _ P Ÿ ¤ ;! # w$ N% / S=E CvC=C¨DýDÿG1JEOüTÈW•VUªTV‹_SöY_²a"e‘df:g3byvÿpuÿ™e¹^‹PÁT0d¢\nW¥W¦f^jîdkf±[TRKM›ICÞFÑUBxbª[GWŽO³HFˆBe9 + ­G !ÇQ >Y ;V RK F à@á>ˆ8.RÓF0=ì9ÝCRS½N®K¹HêC5=A;ý;¸<(CI\KŸLrlô`\ÁV»UWT>RCS¸V0UWŽ^c eþk†iÐlo³pÇg2V7J€@ c929£5ÿ0Â4438Ö=`IDR·X`TUñ?g/¼*¿,2H* À +! ‡( /( æ! €! ë" Ž ˆ = „Ç Kœ@ƒ_’ÕÕ™Äá"ËLŒEǦÒ~…TÅe Õ$Ë%_$¬#$#Ÿ#ñ"G"€!Ö"u#¡$a$ %I& &%$„$Ž%O$*$0$å$o$u$ç$Ö$Y$%#Y#1#|#Õ#Ê#‰#Ñ$F%2$½%ˆ$À"þ"À"!©!K!! ?!Â#¾$“$r&¥%€''(5 Jç4ÿ†4y.ÿÍ/ÿËýo'þ|1üÛ9ý Çþ AÅýan†’ˆ—Z“]•RÄýÿŒézßÅþBÆþRýOýaý¦ýwýLþéÿÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿ{þLý.ý~ýÆ-þl/þw1ÿs6ÿy3ÿ0@m:ú9ã7:3ô2¸0¿14.Ç/)0¡3g1±0¢0ï/¹.È.L+k*­*l(±)¾(Ô)›+‡+ê'ß(+¹&Ê#:$ †!d â ‘"L!Ø%(+ä9~IJC-J sJ¨@ ”>†@ Þ?Ó;×;j>÷?ÐA „B >> Ü< G5 ”1 Ú2p/ —( ‡,µ/--U,n-\.ä0§3¢ p ½ - ‚¡  ÝR"%µ-Y/ä(ô#-$p*ú&a&p(ý(²*%-W---Æ,m,0A2¿. &ò##"?'(ý("K'8(Ì,t,N+™)Ë#…' š* 59 ‰6 A :#y#Ï%Û* Ð( Õ(ø*  )»(â&s%ï&7%’#X&c ÎU3 Ê( +Ü-ê+z* Ì2 2ƒqÑ`à  í; ¼!Q Õ#-¡Dh%mƒ$¶' 'ü"ñ w8"¢#‚"¬  `      '! T$''V(~/d(^&P$ þ#¥$ˆ#Š" ! …%+n" @  $Û'Ä$´'A+ *—(´**(é$ä$C'°%·#~'V)Ì9jNUe=€# (Ý %è+‚3)+Ú-:/12Í1C8 HtM=}& Y& °$ 2" ¼ I œ Ç Y €  å Ì R  õ  L  Ø À ? ¹ ï Ô „ À m F Åf‚’†» ¿ } ª ý ê " ¨ ,! c! k$ ( ®) ž) ÀEyBW? E®IÙEbC÷EäD7K÷RHQ5P¤UrVdTO[.[ƒT_UåW¡Z‡^Ôd§cþjdŽk¬lžf†_îSËQôZ X«S€eWyÔyUr©tþY òV%TŒOCHµCTR HûCèS‰G MG ÑJ CF çD „C 6 I+ ?E xU FR QM qI }F mA Ë@1@cWEú< : QR$`zT¤O[LFD²? =I@è=ƒ>AbIZYROtJHœEÏC»B}CjC6B£FnKûSËY\…_°dàiÛpýdËT~I< c7 “8 –0 ¯-4/7;B¿GIIJðCZ5“* Ç( Ê+  $ ù  ¥! ´! ¼ !! †" Æ!  À … Ò KÚˆ–U3ËVÔ.MBZ'™äÂLý ¶cZ Ì ¡#$#Ö"Í#æ#¬#b!G"±#ø$Q& ' $Â$Ø%Ñ%O%$×$"$f$–$Ø%%$Í$•%$^$&#›$'#Ó$Ü$:%%ø%$$W#D"Û#"€"O"?"Ã"¿"Þ$F$…%h%Ì%Æ&R'S([3 ºJf5ÿ§4þ/ÿƒ0ÿÜþ+"ÿø.ü‹6ý:Åþ ÉÊýñ¦ÿÎjêpöºþX—²ÿƒ–ç‰öÅþËÇþ þ2ýGý~þqýVþ<ÿtÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿlý¾ý¤ýÞýÍ(þ60ÿ¤/ÿì/ÿ¢2ÿ’4‘?¢<?:i8‚5-2L2²1162–21_0‚.O-,©."-†+&*æ*k).Æ.ƒ/T4º6.2[/Ù.Ì.+q"CV ß X"Î'Î2b@ D:B BG ŽE "ÖC .C !ãD OB€?F;©;Ÿ;i:È<p>Õ?u? 7 I1 ¸3ª1+ Ÿ*h*)a)¬*³-o2É#R ã y o&è$è"{!W#-""¡$Å$P >(+.)&•%$_#ê'm(k)©*Ô*ã*ß(@({+6)'‰'=(t&o&š$=$3D!‹$Ž$‘${' &£! ‰# ì0Õ2·< !&‹#¦%ã$÷) z( &+ õ&˜"| û q 5#D&%^ à _/ ) Ò, À.  Kc‡99@B8‰½? ü‡,É /";0 'Œ!H Š o  $'Â*p&ë$¾ Ö N! O! ß æ#– }! t! ô ‚! á Ì# d  ´! g  Ó"B" :! ,$ g/ü Ü ë <" ç'],.'’#X'Ž$ ! 5 q!»ªÍ."0%.3@gª’‹]û)d G é%ã+76Q3°2 /X2b3M3a2ß7ùjÕKy( t' ¸% ¬$ w T ¿ D ƒ Z Ë# !  ˆ! O! ò# °" í  € ý v ú À  à µ  | R ¢kÁQ· 0 _ ž  !  ¦  ‘" ô! í" ." Z$ B% #  & ®- ×=n<\AÛH„DôA@¯ByEÑN¤PxJJLÃNYuV&U`Q³RšVXÿW­^hbædfcáf·gÞiQipbB]ój@w WòU‚ovcaaHX åX2VSqGwD ­M AHòIâC ŒM§T !§R "‘L çC ë> 8/ L/2@ CF ïE fC ¢D ûD :A Ù@7E‚UÁE Ç= `< ¸Zud(WÿO(MÇK$H›FAÀ@ó?º?z>šA A?ÔA’?‚?ÆA¶@ ?¢>ÿ>Ù=W? A;=š@•@RBeB›CDE¢E’BJ@a>ò7 17 &5~) ë$÷,3ó5s6B::a6¯3T/Ÿ% g U ³ Ó  â   F  * ‚ È · þ ºOÝ+×H_ oDÅ“ØÊIÕÔ{Ÿl ofF‹¬XÇc_ º"à#Î#â"Ì"¤"©#$$‰$ß%&³%Ï&%ù%ñ%$ã#1#˜#8#n#ö$†$$N#Í#¥##[#â$$d$‘%½%$Œ#Ï#F"ç#%#•#‹"M"Š##U#Ä$Š%N%‰&D$î%&¡(_5 ÏLš4B.16ÿ^1ÿzþ:&þ½/ü”5ýÄþ ÙÆý¢‡Ö¾þ¶þß^–ŒÁþ‹׎”Çý}Èþ—þ1þ8ý/ýUýZþêÿŠÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿ{ ý¥ý<ý¬ýŸ(þ<2ÿ+5Ô0ÿr/ÿì.ÿÅ@¨<3:56„4 3+1r1t1è0ì.Ã/²-+F*d)O))w'F(Y*;1®4g2 H/ - Î+ {* ï/ ³3 I728[5†/Ã'Ë ß%y(<CFÄF D~HðD7A¼@lG KAc<f?28þ:Ã=íB“B¥Aç=;>%<‹< ë8 À. û2 Þ7/ ˆ**B((Ó,- )É Ð ^ ê !T(‰($[#RÏ_ "£'N,^*&]&w$%Ï#†$'',(Ì(ô+*%1!QÊú!"?!¬&|$— \","ã&Y'¦ }" Ý+Ê-%4 D,e!Â.ÿ#T' ï( ) í& "¸!R  î Y! ˜#Ì#ì" & •,* Æ. À'Å)™-¿.‰:*9öb½j,#WÊ# / Z.á&‹+ C æ­«!³(%" /" 5 ! g  s  ` × b ‡ Ø  ˆ  ¯ ’ Ò %   K# ¯ ~E ´ Ó$a  &,â+`%%S)e"É!½ ¯ È E gb#’(ì99A¥B¹(«!ñ ª(Ç*ô/À4 ½2¸4«/’1¸2k5ŠD-qpSÐ" w# Î& ¹# ÿ c g dÝ  H" T  Ü F ô" X  Ô$ $ 7% $  ' ~  — ^ T ¬ C Ü Z Í I B È# Î% Å% Š# j" ¤" K$ Ø' Î3e2 •* ¨) q- Ø;/< `;å=E>T=„?£M WLÒJ^IÈFVDE K LÚMN™U¹T™W´X¾YðZ}\`JcVa\¼_"^X]aŠiW`®Y`3a¸WöUÕW^S‡T)PšJZDþG DJ»F_IwL ‘K éE JF ÁF C Ë= ˜,.?A 9K ÜG F uJÇEö? º> Ë@  I¡D ¥C ]> I ËNƒL¤GŽB–?å;\;5=W=ç>0?nA´AF°D"@{AbA¼A ÀC C C¹C ŽC }D ‡C ñAv? ‚>0@ @»@oB Å>ãBY: Ž3¼4 ‹;56( I# ¾!s$›! y a&s.è4-Å! E v ~Æ $ F"  Í ü! g  Ò ‚¿’ŸGæÚÎRO\ —PJ—S¿ÊNm#ÛMåžšßZbŒÎ ! #­#Ð#H#ç"˜#Y"Ð#À$€%À&%¿%ë%ý%®$Ï#¨#$}$y$h% $\#ä##"Ø#\$Y$$$#Õ$$“$¤$b#†"„"Ê# #Œ"p#E#•#C$$˜%J%´%$%$&ã; %LÙ=L50þ½3ÿ† þÉ)ÿÐ/ü‚4üÞÂþ ØÆýªÅýì¾ý5‘i— Åý4‹•MÇþÆÉþJþ0ý ýMýeýµþ2þÿÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿuýYýîý¿ýA+ÿx+ÿº2ì1ð-ÿE= ã9z64b1A/[-\-b-­.Ô-Z*N+V))•*(@&â29?8ù7å6­3‰2x4 u5  6÷4 E2 w2;3J4^4ð.")“-ï<©F{@L<RR QLú>JC2D3;Ý;>š?=AiD÷FF ìE^Ar>;=:>s9=8÷7 :Ö+ Ê*³)@()¾)f-ú · Ç F m!q$%)Å&,"û , Y#% 'B&9$$o&u!¯*$ö&d% %''à+Ÿ,Ü%ù;š ß\F®yº × #ç!ñ<" œ*/ª-±8–#s% &.& ;' 5. )¸(¶( ­' R$i"Í%Ž&M#q ¸'$- \. ×+ F)˜1[9âEDF¥?D|Û@slt!:  Å(æ: d! £ ¬ ô"´#(!š#_"«  s Z ì 5 D ? ¼ ?!Y#¯!  Ñ# !  5 Ñ Ü c I b ´'ÜL £ © ]" D O! ’&ä' v/1.9'ù%È%#ƒ#Å"˜!Ô"!›"$m(¸#ö"³  t$+I*?*Ä3I/ˆ2Ù+. î2,8 ïAs> = ¨; q4 ,8%@E:µ* & Ã& Ž  „ / g! /%­!ƒ F …  Š+X# °$ B#   s#  P €W¯ Ú,k$UD›*àÖêa¨ÜŽ ’Þ“/„â“ù†Q° ‰" q"m#Þ$2$G#(#$#($%%À%F&‡&¸&$ #$#F$4$%“%Ù% $ #ˆ#)##µ$&#×#ž$7#ã#Ó"ô##¤"#$Y#S# "Ž"#Ÿ$$ÿ%%%y&<%½#Ï%ˆ'K: •O˜5ÿæ,ÿ?/ÿí3þ6þ’*ý¿-ü4ü5Áþ éÌý+ÿ¶gÊm‹¶þ÷—aÆývµþ&ŽÆþ€Éþ þAþ!þ)þBþ9þÝþ´ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿþNý9ý´ý¾ýb,ÿ$1ÿ2Q0ÿ™/\0ÿm@;+7l6¶3„0W/ý./ì/o,5-Š+¥*³)¾)1)±(4;Æ<|9²<©= ; < ³: R< =; j8 Æ5 <0 S1 •3 ¨4 4[4­1-CANg9•86B ¹H\;£<ó?©? Ã<þ>–@;=b<EØE F ýG!MI"Bb@4AÄ= h>(::/3l( »))@)µ*þ-$#Ê — ½‰ Í ù&¶#W"Ä  Á%x$M"Z1 v )m   d£ °#è&(&J&@(%¡ ­  î ©¦ ü Ë ¸ ã UY`! £%Í10c8”&•*k(o' G& A. @. ¤/ jefL  ,s(})‹'ú'^ " S2 / ×6µBÏU¨xoXE…A“W;f#(^§ ë ö °'Ý7 ”- ‰Ë!  ß A$" Š t  ë ; ó' |*’'' $ ¸%Ú'Z*Z(æ&,"À M cvÐ ‹   ‰  Ù" "ã$J! # ¹# u,¨6ë0#™$#" u#Æ$£&¥*œ9™E›Lü5>,.-`+¼+»,%/Ñ+R-N*n.í0´1 :ZGV! O" Œ# j$ ! Ã" Ž( ®% ¾% u& ¶% ‘% L$ Á$ ~    ž# ±# $ L& ?' Á) ‡* F' ž' & š# $    Å " ¢! b  6 8$ * ‘3z9e4* Š( X/Û3(- ’# ì".# À& +0…7y?  < Þ> ? ¢@%=OžR£J‘FŸBÇBuEÖFÚJ\LBN9N|UR›UåWQWVDW°W W­XÕ_e[^ZÙX¥TGTÏT8O¨OÉJIÀG˜E AB DD B šB FF KH QC êA –; m/ ï*M+B \I¼<,* í( J# ’ÿ—Ó  æ e([(Û.Ã5;×?dA[C JE ‚F G bG CE ÙF 4G G •F »G F ¡F °G êG ³H ½G ²F ‡E dE ‹C ºB B 6@ 5< Û< ®< ¼? A; L:s8 ñ]]`­P SA ›7 4(ñ  R¦Ïù½ y é÷ ) G[ ¸";$ÛM¦µ­œÎ  äCÕû„lèb_é^·¬kYåÚŒÝ ‘  ­  .$•$Ñ$Õ$Ð$—&z# #`%%N$ì%î&$w#%#f$¦$b$¥%´$»$Q$h#Ú$$^$2#ž#.#ž$_% $ #õ#ì"ç"g"ª$ #È#¤#""“"Š$J$[$Ó%I%C&%B%Ò&†&Ý6 ßLÙ<D4ÿ!1ÿ\0ÿÎ"þK'þ42ýy1ü ¿ÿ ‰Èýž{Ð}Ã{† –n´þÞn•ÞÇþLÈþÑþ9þ:ý>ýEþyþÔþƒÿÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?þKüýµý}ýj-ÿ°/ÿa2ã2à2ÿf2ÿW@D< 5m33/É-‹+›)ê)ø(Ý'm' %Å%Ý&Ñ%-(º4ü6ã; 9o;¯? !óB "o@ !'A "½B #ÑD #…@ !tA "6? "Q< ™9 f4 ´6 $6 ^9 “7É4 3xF\—=b=¹>Ü@ñ?ø?m=MA<> @AVGˆCÚG C‹E )I!œE ÂD ø@ï?h?½;3>, h& N*`,M,U+¿*ü V ­ w!á!H# 6%Þ Ój ä W à , › æ ® ¼# „ › n  î"²#ó$ý''k   @  H „  ² N ï ? Q ~ = æ Ñé ü#-+À.±)¯"ˆ%&é% 0‹- 1 ÑAÝ*^%Q$ m$æ%a%" F ´/ /é:JýQ—B¥K”\‚OÏC8m„9\< è $ Ì „- B,Ý t  • S ¹ é ç –% ¶/ §6 ¥6U4”*&' ÿ# µ# =! w&R*c)&ª# w { ã ± ÏZ² o Š ­  # ï$^# ƒ#  Ç  Q)B0Þ0Z*%ÿ!½ ä$3$(* 69D>E2ý-M."/ó,+ì,»)Q*)“,?-l,ð1ÛF‚T¾" #! ß" & ·$ Á $ ‹) ‚+ ‰( Ò# Ì% Ç# ³" ê \ t ) "  É$ Õ& 5, r, .* C+ :, #( ÿ) a( ÷' U% P# ×  !  8Õ" ' £- [6"4î2g+ w) R/M0 ê) $$Ž"Ý  ‚( Œ- ‘-§1i5Æ8¸:ì= f> I ¦Fú@´?ã@,ACMòMÓJ±GèIKìM¼QöW-Y`W¸VTV UT±WWW›Z\Z”W2V‰SªO¢I3H)C ÒE ðA iC @ ÷A ïB  A ? +9 Ë8 2 ?+ V+ = ®@ 6; é1d# â+ “"îíø@  ú¼   Í)B2"9Ð?ÛD  F nH 3G ÃI jI J çK ÏI ôK FJ ÷K 1K ÉJ ŸL MI ÞI F *D ¿B «B Ó@ ï> 1< < x: Ð9 Á; £6ü( ¦:W<gHÂX¬V ñG \@ ~Cz:ê+Æ üöè&ÿ’zÑDÞaÑÿ$ ‘2cm•M8yÌÁ‚B´ ÝÍN[£hÍòV¢«y¶¯ Û » º  R! ý )  !#þ$g$P#›$”$¡#Z#ò$E%*$ü%À%þ$ˆ$N$n$Ù$F%P$À#$÷$$‹$‰%2$Á% $$˜$ã$Œ$Ÿ$%$#š#Q#`# #ê$ #Ÿ#¯#$e$Þ$v$ó%B&Ê%¿%™&Ö']9 |Jw:3/þ¥/ÿK4ÿA!þë'þÛ0ü“2ü½ÿ TÈý7Œ¨ÿ­ÿ+©ÿ6—ÊÄý;ÁþÕ¤ŸÈþÈþ”þ*þÙþÚý'ýLþ ýßÿ\ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?þÀ ý.ýýý´þx)þ/ÿ;2ÿž.ÿt1ÿö.À;<š6Ó3?/ +¢,(ö&ø&V'G'ÿ$R$€#W&–79ê;²?: B: Q= !²? !ÚA "ÜF %PH %H %^E $xF $=E ${A #+@ "‘> }9 k8 s9 Ù5 ó3  2 =ª@ïOËL4BûC°IpGÏ?_?q?ûAîDÖE»J“K wF{F°K #‹N "H !ŽCÖA ¿> ˜> 9‘5 R É'  ,B+=+¯-6 e Õ œ á v  †  Î F õ   ã q ™ ˆ Ð  å Ò B!^'É%7%&ø(ø 5 d È   V õ Ž Á x + m  ø ´ õ ª ñ$ò'|'‰-p%&"Ì"ï% X$ ‡(n*U1#,u(„%4&¤*'(  Æ*®0 F/0Z<ïWx¿c)VgHÅU X¸%  ¤  '(â%Å u | W £ ³* `7\<ü; G; ½: g7Ó/ o' ," V  ¶  ~! +  ~"ä%F#ë   ú T ÀÕE/ `$ .! & v(Ÿ% ÷)Î%¡ ç $æ%U*@+Ô)%\(*,ø=WÕ[^:ˆ/|+"-@,.-½(R% ¤' –(*k(:(Ð+ A;L ~" µ" `" Ñ! k! ë# z) * *. 3. U* 3( m) % l! T# Î" å î$ q" ' )$ ) * ~' ~) Ê* * ^( µ* * 2) ! Ò *Õ  «# ‘) f06Ò6“1Ç+ ¡* Z-+ Ö& ú# ‘$ 73s8j4 å0j2i5ù:Ð< å9 ¢8  8¯9ï:±>"UŒWÌMQGUB„AßCgG®]8g!Y¥V;SÏRòSPRwR¿R½XÌ[`Z^\[—aŠ\›SÙIE ÇD  A ýA ‡? ? @ I< [? Ï< ±> 19 + ‹0 k'È8 Ó9 R< ¶-?( -)Œ# X Ú ¸}pEtn#z16@°J âO Q ÛR9N }L ÕO ¬P ·P ‰P øP lP |L M  J I ÆH ™E C PC Û@ ž? ˆ= Õ< +: 8 f7 k8 U9 ¡- U. _= “>û; > TK öO >?7=3·/e*%Ð&à(Þ(ê)Ã(”! Þ ³ y7Ð<a>?µ<Î< !8 ‹@ "œA !/E $SG %ÊG %jG %˜F #CG $¢G %¢D #$E #sE $`B %=¿<¦:ã7 5 ò6 . _3‘>fH4`W…DÛ>Ê=?Š>þ?!?°EXI¡GÃEæG–G“H!ÈH!ÂD]B È@’A d9´$ 6" µ'Ó,^,¬,°&Í 1 ¯ z œ , V × Á Ò  y ¡ ¿ @ ) 0 E ‚  M ¬ Ô&¹'& ()+(w Þ m þ © Î ×  ¸ ð a > ± ` “ £ x$Ó&@$’)Š($$”$ñ(q0‘7.½4™>õ,«(w&~&!&“+P" 6&/ !,p4­BÎOÒh¸§Íq RÇ?Ee ¤2b ª ý è ´ )H'“ } N r% ­6 @ G E “G FA @ '8£5ä)"  " ¥" r"@ ñ  Ñ ä b ÒÃiÂø Q  Ô  ”  p(h+)š)k*•(ó  j!"&ê)Ã)/B§IH?…8¢1V. .c/a)€(ù)r)' M% _$ K%€%ò(}< áA $ g$ o" ª$ c% U% V, Ô- í/ Ð. - ÷- †. b$ ©# ý& ¢& <% Ö' & Æ& >$ % È& ·( 6' µ( ¤, * Ê+ '+ ç( ‡$ g! ÿ „œJ" ‰* A0,44n1 †, ³+ è, -+ _' 3! ù# + Ë6D~CÁ9 S7 3Ì4*3e4…5 ©8 = 5E ZFÃCB?v>N<Q=ÑAŒ`(^œUOëNrLIL@J„MNQ§U¢W§RMÍKì^n!W[ŒNpG$CæCÌCwD C SD =E jKqL JD S> #9 Ž/ ô 7'$: ­< ì= L7 œ4 f02( T';hùÌ í/iC¦U ýh?] ƒX \P ¶T @W  X?UõW ÁS ’R 1L  F lE D ºA {? _> i> = ˜< = (; D9 7 Ã7 .7 V9 Ü1 M: —> Ö@B@Í9`C ÐL ½@ á: Ñ3 °( ‚+ã)r ÿ†™Þcó¦þiç©äÍò©¸ìŒ„ô ”Æ€}Ì^“Säà™ãb"%± 9 * ¾ Œ  É" # G" G" ù" à   %Ç$Ê%J%¿$É$Ù&Ü%&$„$L$D%ˆ&Œ&&%»%O%&u$E$h$è#„#‹$ø$#”$“%Ó%Ö%%&H&ˆ$æ$Æ$‡%$Õ$­$c$¡$¢%\%$Ô$¢% %%%æ%ñ&X&²&Ž2 `L9Y+ÿû0ÿp.ÿ¸"þë,þ .üM0üHºÿ bÇý$g;n†nN{Ô—SÄýÿÊþÊþÎÊþCÊþ„þÜþÞþÚþÐþ*þÍýïÿJÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿkýtýªývýˆ0þ4°4ÿÇ7ÿ5±3$=> W4O5. &Ø$ì&r(›'ü(Ð'ï" z |.3@­=Ú:¯<;<86÷7“> !ëD #pH $©H $F #ÀH #DH #µF ¾H $YC "šG $ G $‹H #E $C " > b;"7N5 ï+ E1 ?7V>'F©A²IHD¥BGD(@Â?ëEFK VGH ÔH 2J –I žG!3B—?eB D>Š+ U Â( Õ,C+‡*¯*A | n · Ò 9 © € ¼ ò{ ' V ˆ * § > l ‘  õ 2 €&"%¾#X$l)Ñ(˜&: g u a¾Æ t ¿  s { ¯ ½ î ) # E&ý'L%˜*g&>(9( 6Ë>4J=MÈ2+Í)~'-%^&Ó)_%í3 &0 Þ1#BSp_t”?„Õ^£FK åG° /° Ã!Y%Û%> 2 ©( ¶? •@ = |; = = å= g> << 9 Ð, >& ') %B$ " ×"  ³ ® “Q ç à Z I  E%³'i õ  *$ *´)p){/»./  ¤ x Æ!Ï$G&*Ó? Ûq’o …E PJÙOoD ïC J\<õ 8# L+2ý: : 79 {8 k/¹'®!¥ ¾+Õ w —$8?ÔR 8z ,S ÐY …]iewdæa°^ Q çM ¦G ZD dA ·@ ß? ™< ž<Ã=!; š; N9 Ä7 µ7 –6 J5 4 6 p7 N> ?#<™>Ï;¢= †= $< ê: c4 Z* x"0+ &%Îe òêµ9Br'­ óa4çµìþÏ$œIO;aˆ¼öÝ<ðL3 Q  T! a# x# ˜$ &$ h$ ># ©  † ó º"æ$Ø%C&x&%%B%×%%$Ý$‰%&&‹%ö&¸'8&Ð'&5%O$9#E# "Å$}$Ê%0%¾&`&$U$”%¸$Å% $Á%L$V$U#æ#z$Š$Ñ$s$[$³%†%Ò%Œ%u$¾$Ó$“%Ã4 #Ji8‰,ÿ|0ÿ6ÿt$þ£*þæ,ü‘1ü¡ºÿ Çý釂Æý¼ÈýöÃþD—ZÅý0ÉþÀËþÊþ•ÊþLþÒþ1þÚþ$þØý6ý?þ­ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿýlý€ý ý,þÖ-þ¿1):q.*1Z9Ý; Õ0ª1$-‚(z&{&*) ''$ô$ “AUD¡A<¥;Ê= Â< É? !D %K &ÇJ %‚J %‹I $ÙM %ºI $CJ $+H %G $vE #‡F $«G $ÞG %ýE $ÈC "üB !{<è6¹3 ö2 U0 - ¯:éAHÛLð@µGôHTGC>?yDæGÛFGD àJ -BáI D è@xC !ŒD "þ@¥1 š þ$ …*+9&æ&[$_ é  ¸  › « Ö 3 ù ¾ k 8 í ) % ¾ ú 0! ‡#(&ë%#,$ë((Ô& Œ e ô 3 U r Î h ¿  ” ¼ ;  k%( &O*|&â*Ù8ê2d3W?^EôA×>.D(û%²(& /Z(á+E5 :2#<Ui3rÛf|nti–Së: æU Ý0ÒM„ 9&X ©*ƒ9 Ç= : F9 8 è: : q8 ¯9 9 ­: i5 +d& %! 3# û -  ž  Û v   ô Á 'ö%Ç'R-f%¬! ß# †# L# ƒ'Ø&ø&ƒ&ƒ q Ë ù›$˜*È5´LÕCt6CÑ.äÊ È%;#$ J" ¨  h g  j" $ò(o* ;3 ¥# k& w( N+ D, 8. - ;, ý/ î+ + U+ Ã* ) H) >& 6# 1  ò# ý' p# Õ" Ð$ % ½% ( w* !* ¬, ,+ ô, ç, h, s& r$ Ö( g% Ê% ¯$ ¤% * “, ô. ê2c4Î2 4/ |, k. ³* Ü$ Í#g! Ò* õ2 Ÿ5Ê54?GB(4Æ- »- u-*z* ˆ( ð) !) Ú. X4 ¤:É<[=@AÖBCYDfDCuAEEƒE˜DXHØJ†C×F¤TRNK?Ù?::?>‡=âK~GèL4@ –@ ’G0AŽK'Ñ. " `*°6 ä8 þ: X; û5 ‹3ø4Ø+à! ‘8"’>€I ¥{2€˜Q  d^b ÐbN^ˆXšJ ÂI 2G `B a@ ™? w@®= ð: R: U9 æ: Ö: ¼8 Ó5 Ò7 }6 Á5 ù5 ï3 Œ9 ¡A ¯= ;8 €;è5 û: n= ¡8 n6 O-â+ Ö ˆ( è ¾g®Jø+¤Ja=…$šSÍeO•ÔVª†a^¤åR” Ø  G! Ð" # w$ w& 5' Q' n& ‘# X 9 Þ V#@$k%ø%‘%Ö( &K%d&$¬$\$¹$%Î%Ð%Ñ&|&A&r&ª'¼%ô$¹#ñ#!Z#”$ö$©%%ö% $é$·$·%%K%B% %%O$J$d$'$*$²$l$i%%Ó%Ã%‹%-$%$"%i6 wJ`Bz.ÿ«/þm6ÿ³"þ¼(þ"(ü¢/üˆ¸ÿ `Ìý-Åý¶Éý+³þ¡–bÄý¸ÊþÊþÏÊþ–ÉþTýzýLþÝþÍþ8ý×þÙþÅÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿ]ý&ý³ýe ýE)ÿê/ÿ»9²/ÿÌ.ÿo0©>F9 V.p.Ý, &z$%’#$$§'…'ð#7:EéEDA ÜA!ê? <= ùC "ÐB #šG %¡E"¡I $EK"TL#ªL $‘G #vI %LH $ßH $‰G $ÎH %©G $¦H %äF $åC #qD ">Ò6  0  / ¼* a06G=æB¹GhI–KÑOÛO¿?“<O@>B³?ºA"JwD±C6@iBŸD!#9 " " X(/'È%E$$ó Î ° «  Õ SýEK k n    ù ƒ ò"ñ%¦))##œ#’"¯%¿']Ê Æ ÷ N ®s nò ƒ f • Š áãß   Ê'É'±(Å-£(Š):4Ø>N­P+\M@À)d#w" '!(î9ž) /^2ÿ4 J(fdqÍ©JÚ9=H _:  ‚©K ü!7# 2¶3ÿ9à: ÷: k= zE –F ?F -C íA > [9 Ñ6 ^1 ' ú$ y# Ï   ¯" §! Ÿ  ¥  E v   »!£&œ'M*&â"  ©# `% ?$'*ö%%Ï&## ) M!®%Ò&¢-Ç>j:#1-Ê$  ),% ¢$ ! £! ™ µ ü"  Ì& ¾) -+ ; ð" 6" \# * {* ¼- , 6* ¥- ( Ð* p) C( Ð) ¼( Î* ¦& º% Ô' °' ^& ò' ƒ& õ( ´) ã) Ê, * ä) ú* ñ- h+ ñ) ' T$ È' ,& :$ " 2$ !) - 6- ÿ/ ‹1i2 W0 ±, * %* v"D"!6) Œ37:ÈEýQ¦N-E9y2,0 ë*¹$Õ%4 ý ‰ Ñ2 g=Ê=œAãA%@8? = @t> ]ô= ½?„?óD³FaD¾CâH:IØKu5¯& S&`7< Ç= %<Ò=f=n>›< ³<  < N?î zé 6 : ]*©1(3m; 8; ÷6 e4 ´5 i#ï߯ r0ÝGÇVxP J< J8 ª7 “8 l6î5o5Ì5 »6 38 «4 í2Á3 [D zF : D8 p6|2 §8 H7 X0 â+ ("oÔ Q( O$*7Ë †xóŒ`ÊKd稡jIX”EÎËȑΠ¼  Œ! " " ò" õ# ˆ% Ë( ) ª( ë& F" E qÌ  " Õ$•%%%F%a%Ê%Ë%¬%¤%+$ˆ$‘$$$È%È&‡%À%Ñ&P%Ç$ñ$#‡#w"Ã$($ü%%%ó%ê$°#ƒ$·$Ž$Á$»$“$Õ$Ó% $Þ%$#¤$N#£#{$d%%Æ%O$g%$%&V6 O&?)ÿ†1ÿ¹6ÿ)þÿ)þ”.ü2üƒ¶ÿžËýíªÿsÂeG£ÿq–dÃþEÉþ–ÊþMÊþÈþŒýEþ8þÝþÎþ#þ$þ)þáÿÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿnþaý>ýíý¼#þÕ/þd1ÿ9ÿT2ÿw4‹>¹7 ,<,f,ú$˜#g%W&$•'%!)ÎBNFB¿FD œ@ô?Û@ %F #]E!|G "F"jG "LJ"üJ"òN $¾H #ÏK $G #»F #¸E # G #nF #÷E $©G $¾D "B "> ©; ˆ4 ,. q, p/ b1&5‹>jB„AåAÞHkOvL_Fj5˜Iç(Ó ¼ µ   i+ì.ö: b; B ¨K ÎI \A œH P ÍR @Q ÄK !B ­5 ó,P% Å% à “# t"9!  D Ï ­ ´ 6 þ&x&½$C(»*‚,A i ¹$@(Ý&^*+(°(Û31¢! | Š!ë#¹#d(‡*Õ(W'0 ù'2Ó# R# I# + B ]! ¹# m' >*Ð* `* . 2! ¥! Í# & Ÿ' †+ o4 51ë* $ g$ ï( A( Ä* 5+ *  ' ±% P( ä* ( >( ‚' j' ¹+ /* â* ê* 8. –, a. t- u* È+ À& =% ' ' Ú# Á& þ& Ä) —+ „+ :, [. !/ ñ, ,+ ¬) & ³i[% >/º9RDmE²DFCŠ>Q?y=`- ä, ) Ð"  -O" ô+  4 9 û=  = Ã96 &7 •M lAð= Ð?½?¥@ 'CºEÞ? ÕU ûItB ¹1 ' S#S7¼= ò> Œ?v9 "= < `A  < Ç@ @+ò A  ~ 7  Ý D&<e< z> 4> •8±0 Ë* ˜$ 1" `? ˜CoBF>  S Z ®] U uL ÔG ÅC †A J? Ž= è: î9 9 b7 Ö8 -7 Î5K44 S3 R4 û2 ¸0 r0Ì< ®I 2@ 39 55 q2 *1  7 ‹1 ”* x U 4 c è ç oŽËãz ñ:´^Ë<?€PÜ_·k3N  ¨! ½!   æ à ] Z V  Ÿ! b" +" Ú! Õ" ©$ % Œ' §) Ì, ) ˆ" Ú µò n% -$$ $Ù$è$¡$H%&y& &d%Ò&<$ú$‚$û$‡%&&3&/%ô%]$í$ %~%u%.$t$û$ë$u%:%|#y#‹$ %{%U$±%$Q$Ù&%$$#æ#3#¬#š$c%Ô&;%S%g$¥#»$M$…'5 œNß=E*ÿt2ÿ¼0ÿ¹&þ|*þ,üÆ3ü3´ÿåÊýí”æ‹»‡»þÓ•ÜÃþHÊþOÊþOÊþ ÉþÕý'ý–ý¦þ(þÓþ%þ*þ)ÿmÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿ^ýÏýeýÎ ýÁ#ÿ0þ¬&ÿR2þ483ÿŸ;‡7 %,N-B+z(Ý%Ï"™#C#Î& 6ˆ:ÔIH’DÂExCêCÞ@ÐF!/G "E"üI"¬I"ZJ"§N"K!nK#©J $rG #ÂG $F $G #FD #ÑD #_F $¼G $$C " @ !C #=.9H1 Z. ', Ö/ Â0õ6W8ŒC)F¯RowGQnNmA@€>ŒA ;IF—@™B?ŸI "ÎI #³?&+ ˆ% È(î(+%Ø#´%*#ý . k ¢  Q5¥ ˆ ( Q Ê JÆ ©  2"“)Ð)B*6*a(]#ù(Ü!°!  a® | B ] J 3 “ † m B É è ½ § .++'¡&€(G/ Ÿ0'5[;·P…_ÉHú, 1²B".q)((µ0 -ÔXqAÓ,†1Ë2¢E^Q,H˜OHò<ë1cH®1SGN  %'„,‹. »0 / â2 ˆ6 z8 bB 2G ŒM °P ÏP ùB “5,) $ ® 2  Ë%[!Ð" Ñ   k  & ç$<- $›(((]*‹  P% ý% ×(¡'ð( g)D'}+Ü)Ö  ™  ¯#(#q% ¤$   " /Î%¤ Û  A# a# Â" Î" Ï& +8+x* ‹  è b  à'˜,³,;,Z) î, ”3¯3â. 8) q( Q) -( ²+ ') m( Ö& * q) Á& –& –& Ï% J% ‘& I) + // , É+ œ- q, v' 8' & ë% & # % 7$ ü% ß) ¡( ;" ­+ ©- T) H' ÷!E ‘jš× ÷+±6:º<;AàA'?>ž9à4s-€- 3s' 7y F bI¹ á v 6*6e=s>±=À? ð= ¾> ‰. .$Ý< 8 Ó · ­) &6 ¿: '8 û6 ›8 F9 .> û> : "> –@;> >ƒbñ)À” œ,=‘2¹,¸4ô>Î7 0 ô1 9<j4C åVRU S ÈS 9I ÎD lB != ¿; J9 Ú7 s6 W6”6 ø6ˆ4b4’5 3Õ3 ì5 Ÿ4 ;0 Ï3 O ÞH ™8 C4 j4 –. 6 ­8 9,  ! ‘  Ñ  µ> W †Z ˆ® HÛ’Z‘‹±@K‚’F¾} d Þ"   '! !  # [# ­# ## «$ «% ,& F% ¼' ( ƒ* ¿+ â* ¶% ÷Þ R$ †& $h$‰$Y%t%g&&”'Š'&ƒ&%X&K%Ó$Æ$Ö$|$ß$Ò%%+%•%Ç$$u%8%$ä& ${"¾"7#¸%}$½%‡%%N%¾%$Í$ç$5$õ%V% $£%$`#Ñ#Ù%!%e$ê$Ô$ø$¾$º$¼'¾3 —Kµ>þ-ÿŒ4ÿÛ3ÿó#þÄ(þR*üW2ü»³ÿäÊýìÉýwÇýð¯ÿ‘A–Ãý½ÉþQÉþŠÉþ‹Êþ ý§ý¬ýBýLþ0þÓþàþÙÿ’ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿþÅþþ` ýB#þÂ/ÿØ1â/ÿC1x-j9Õ9 “/8/@+ú%š%õ$*$"&.7™R‚=pIpK÷IQD9GæG¨C°F  FäGªHåJAK !KÕH¡JÎI ?F!ìH #øJ $tH #ÂJ $FH %G $«E #EB !A ÊB !.< “9É7¿1 ÿ- %0 J0 À/Å1²8Z;öIFÊ=ÔRrLèEƒ>ÀF’@=K=¾:Ä;€A©G!B½- f# j$Â'I"v"¶"²%*"! ›  ž `£¥ â m6†f› p - g !…$H$Á%×%ü&„&b"î ¥ ûðÿ „ ž ½ c ” ¥ ¹"Ú%[%ó!9 “ Õ ( µ+ j'c%Ú+>3–4ŠAsXFÖNç4n9ëedPl/{.ÇB ž2¸G„Q3(/r/±3×?°?bJ‘RÕ7ô2&<b@ Šù ç“ u ð# &“(œ'í)E+ 11 ; ¬=A>@ æ> é= û= À8 è0 ã% G ± –" ß# ' ?" Z V K W l! å*@% ´" e Ò#á&–'û$B # ÷*J)$«* Î0 })_)u,|,i. t9 f* % ?+3+Ë*&ü&1# ’# À(Ò(¥'Ú+ú-]'., Œ  ¥ ± u j $ ++ú+ ]*ò+ü+ Â, - œ- ¾* â) Î) ,* Ú( ø% “' «' Œ) 8+ 3/ ¢- Ü& Ï% »# Û) ¸) .+ -- H. ¨- q+ …' ­) /' =' $ Ü$ e' & „( œ( '! §) 1' ?* r* !Õ!ž— k+ 0ã4˜8ç8÷9c9Ê7ª2Í0-á' –#M&g$ ß 2 [| !%Ò"'(‰) # .& p ¬ ñ B' È/ j1 -7 Ù6 N4 _: T8ï6 lO Î; '; ¡7 Û< ¾> Ÿ< Æ'éOi•.K ‘ _n Õ _4‚643¸6í0 _, 4 ÙE CI èOÿQ T ·J ®B s; ‡7 ¸6  6 è7 è7 ò5M5*4Á2 ÿ3•2ì01 0 ^2p1 Ò1 ¥T T= ‘4 2 ·. . p< à4 „, 4$ ä z 1 ‹Ú 0  P ¹ õ‹r–¾¾“/ ¡ÖXµ (÷! —" " '# 3# h$ # »# l# % % Ó( 4* 3. u+ ‘, Ÿ* ð& ¨! Ž  þ ¡# Ö&R%g$,$á$'$$%Ö'•'P'˜&%&7&&W&»&„%{%1$þ%l$Ò%)%ô%Ä'5&ÿ%ê%é%i%¿+ 7!Ã!“#4$$û%0%ò%"%D%O% &$S$í%D%R%/$=#§$#ð$I%A%Ê%S%T$·$â%<%y&Ô0 åK¢Bo/ÿ 5ÿã:ÿrþL(þd1üÇ4û?³ÿkÈý¨‹“™Üÿ¼–ÃývÈþÎÈþ‹ÇþÑÊþý7ýŠýKýMýÕý|ý‹ýwþŸÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ©þ!þ< ü%ÿ¡'ÿx6ÿ¼1þN1ÿÃ6;8< ÷/ö/Å-Ï%c$¡"R$4#~8HÊDjGóKÿIPDzH2I2FyI4I€J¥J‘KIIcJuH´HuG H !ÅH "ôI $ðL $`J $ÛJ $uI %ÈG #ÏG #¦D !> q<½:Ñ7}2 Æ/ Ç2g1´:v;u>"@¦? CgY¡F <™BpFpFlDã?P>˜;ØAYE!Dä. è# Û$…*3"n!s"="2"†!à;æ" Þ ‰  Ë › ì½ ] c( ¤ Ü ÷ 0  R!ü×É"o  þ ï Ê„€·qG  ² à ‹ Ï, ;0 ˜-  ž … ¬  ¹5ë'd%ˆ'˜0¯5>fH¼UƒUØPFÄK G¸9jL†:¯8NeY ˜FR/0-È03p49 ö6"2«3´1ºT–, à @ Œ b G%+'’']'´'\+0+É. §3 ;;¡<[5…2W2Ø3 Þ. š% ·# 6! ¸"ú$ ½ b" 9! · Ó ì Õ+)þ" ½ Ù! ‰% N*æ-Ø)$ ¦$ E,y'Ž', ´; t@I2,64ñI …Aa/˜--s'w+c.µ+ ,,þ060e3x1P0'3 P v $ þ 6 #  Æ b  W) c2¦2Û/C* ï* ) †* «, . @+ i, e( * ‡) s) }, Ù+ ¬( '  ( * C( «( }+ Š+ Ä, G. Ë- t* ×+ /' þ& Ó$ å$ ò$ 1( #& ì( <+ ¶! ¹' '( ! JÀ.:%XD% ¿, ñ2Â8™:Ï6?3p2t4{4Â+¡!< )§+r$o¼ ö v •ï"Þ&?%­%1 ± ò š Ç% «.²1ž:ó> !@ A C0ÐA #; 9 Ð< qP ‰R J< N@ U; M> >:ÿ: , Ø Á5"– V ø§ ƒ"u'Ø/e) …+ Í3 7 sRùHîH „PmPCH …> D8 ½6 3 Ì5 »3 ¡4 ¼223&3Ì2„5œ3¹0ï. b1 .1 ‘4 Â2 Ý= R6 º3 L/ ô4 ù9 N5 ô5 1 ñ%  À ¹ “ ? z ¸S¬q/ }Û³*‡ Ý@! )ÿ  ù% –' °$ ®% B& y$ ù& Ä' Ñ' á( 5) }) ù+ L, ") È' U$  ù 2% .' s&$^$e#ë$t$ $l%;%í&&ß&-&i%À%®&&„&L&Ì&¼%ˆ%¸#ð$«$â&6&™&¸&è&;%"¿" "z#"¸"O#E% %:$Ä%E%$’%;$Ë$8%~%t%M$€##‘$Ô%%$”$ó$ñ%#%0$Ë$Ã$Á'K0  F+Aö*ÿA1ÿ91ÿ%ÿ¬-þ-üŒ0ü€²ÿ2Éýì·þi›ÿÍf˼þÓ–X¿þÄÅþŠÄþÔÆþÉþÌþ@ýþÌþ"ýäýÃýÒýÛþ ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿþ®ýoþýÍ(þ-þ¶.y0þO3ÿ 1Y8; ü-{-E-\)Ž(ä%ß'$÷A^F™@CöMµJCFœI6F¤E,K¬KXJLëK KHJïKÙJI5J I "bL #CK #L $iK %nI $ E #s@ !kE ""A •= ;º:É64¡5ü6o;]8p8_:@sDCF@%=ÅEFFzB½E²CŽF{F D¬@ã2 ú+ G(·,Ó%/"ð"¹"¼$8!¤$Ý-P ¶ x à  TL&à œ S ; ž ¶ Ð C  ± j l ¹ 2“rEà€+ E¹  ï ^ •n1 F Ç F â9o2ø(()þ=®9?VüQHWAUÃf×LÆP'Jª7¡0¡7{TåUòCy8­.¡/5Û3š1K1‚2 2i-M=4T x R Ó Ã" %B&&M%Ô(•* *’,s.-1÷4ø:/7?5’7¸9 x7 )2 î+ 1 u2ò5B(n" × Ž  ‘ ²% Ï-£&,#m 8 2('®1 0ü! Ö(=%ú&(Û,^6` xg ßUC4431W.i'Ò/w,§'y,W0Ì0w3 2  6 B×1 }  ¡ é ¾ ë › * Š ( „" ø( . 3-2]0"- 5* E) + b/ ]/ a/ Ó- ª- c. 2, á* …* L* ª) + 8( ƒ) ‡- ?, 0 7. y/ :. ø, P- U* º#|$ |" ë" 8' Ÿ& o% G# g# $ º' n  eÇ£¶$Ä& e- 1ë422…43,Ò# ãÀ(Æ)E&[ Ô’H&ˆ+- =. ·. à- ë+ Z, Ì+ f1‹+ ¯ Ç% ¥ å7²3Å+Â:5e6 j; ˜= : +7 œ; E= ÷: Š: Ï? 3 ‚  w1SÆ 6 @4!   º%ý' ß, û/ ä0 Ú3  < —e–L3C €G ÉFE ? t: õ5 R1 Õ/ Š1 0 z3132‚3.4 k4 ]2 $1 O2 ë< :7 ˆ2à6 V1 b1 €1 B7 d4 º2 0 '- Ö+ ¹( 8 ë&» ‰¢œ Ì ùuž¤÷ëMÐ?œ¢[ l ÊTs# Þ# è$ i$ u% €& Ý( :) °* + J- ƒ/ - Ë+ ÷* V' —" Ø ö +! 4& * &Ë$Ñ$­#Ý#–#?#Ñ%;%®%Æ&%å%å%ë'6% &%%í&¦&˜&I$Å$`$î%%ï&H&‹&Ã&’%2"’!Ð#ò#T#L#"ü##Ð$Ì%%Å%œ%L$¶$…$E%T%|%@%$H$K$Í$Ö$œ$W% $ý$î%0%~%>%&1 7Fê@Ä ÿX1ÿâ-ÿ¸#þv,þË/ü3ü¥±ÿâÊý)‹ÐkÙ¸ýz±þ¹”ãý„Xùónüzûa¾þ3ýKý/þÒþÔýDýƒý‚ý¹ý†ÿÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿþîþ¨ýWýÉ!þŸ)þ§5ÿ®3±5¤3#8¾< Ø,ù0/.…(½'J'l&o)Û7>NCþ?ÛIzH?EUHÝJTL:KiLKãNMlMœJ‰KõL¡KÁI1L¯K_JJ}G !œK #H #iF !6D "±E "‘C!xA?‡?<;›:`5½4Ð89x6Ç5þ:Ž<™?ïAB>‘\}WwQ°UµM¨EMK²I tH ÌC;2 o- ÷-ö.–)*!/!ì#5"·p zA<,½ 1 v!J $ œ Ñ 3 à  ³ á ’  i  g j Ãâ ‘ FØT°áùvÇ)öƒª² d ' í! ‚ x" nHÀ/½)ë+"5bAd;KE˜Yäp*j]u _^OE°>4Š454G0Ho:2252Ê6 F: Œ7 G3 ž0?-;UE0 Kƒî §  s&Ž%Ä))H,[,\++ò,A-£0·9g=½> A :; }A ¶O ƒWæXƒVúTâUOB&j Ð  ¨ ~-+,¹#â$" " ¯$,\1 þ-ñ& (Ó%”% ,³0¸5·N Ss ×~ KÀ1à-P+7(ã*c)k)|-4é6 œ: ÒA K¸e¼# v 3 E . v  ë ª W |$H# ×'”*•+:.T1u6[9 7 N5 1 $/ / „1 P2 ~2 - \/ O/ ç, >+ + W) š( :' ¹) '+  - l- È. . . d+ Å) €' $ &% à) ¡% ¼$ ¹" ›! Ç! " s  ¢/çÃSÀ / ¥”! x% %)°+Ú-ž/¶,›! LÄ$õ'¹)Z/ 5 1 ×3 +0 z1Å7 ^: C<÷: 6k6s4 ê5¿1 q) % <  ¾  !È &}&Î$Ÿ. 4å4q1$9„>4=Bí |sÙqX % h! Ý! # î& + Á. í0A5 4 Ü5 ÔB eauLÈD D {A z? J9 Ñ5 Œ4 É1 B. ). ž. Y, –2Ð3 I4 U0Ä0 07÷6 5 ë. È1 Ú2 ×0 g2 e5 3 Î0 (¨. ß5a4]+ J" · ÇO ¶Yb¦—§_f•ù)8ªG% O% n% »& î& –) µ, ¢-¸/.à0]0ß. |' ñ! ‡ È! Ì% ¶& Ò+ )F%˜#Œ$6$?#n#¹#}##¸%k&c%˜%c%s%á&—'a'&a%˜&%ú&~&À%m$‘$ #e%m%ï&¿&$Â#Î%†$ý#‡##€#]#E# #›$_$Æ%½%$‰"é#›# $$Ð%%Š%%<% % $™%M%]%$n$$$Ç&0'É1 ErD7!þ–0ÿÑ/þ#ÿR,þö/ü¾2ü»²ÿ%Èý놚]›à—9“ÛhýЋûÄ¡pÅþÑÉþýRý<þyý•ýŒý#ýBýý3ÿeÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿÚþZýïýŠ'þo3þŽ2ÿý/ÿB1Á0ô5Þ= a01a2m)–'±$Æ#Í& 2e<ZGùB*J^M*GŠGCK«N6P¾QŒPgR{MäQPIL—M¹K@G)I˜IéIoH˜HJ ]H vI !œH " F "ëE “D D4AlAy=6 Ã566:t8¸7þ8{>t>õ=‰>xVrKjN/JÓIÙFNïJ.O »GN6¬4`/è/Õ'vj„ ù  çï70 õ  #Š"B & ú |    G e Ý Y c ³  Ù ¬ ¤ E twˆ&‰ü ³HÛkSÙ»  Ú û7æ>U.<+/PK=ÚElPfvo×eŒ†íR,nî<9þ8ð/107k2´1 1+2z1q3/,/¦4d,Nú$ʈ è  ã* „')V*+A*k(¤)r*ã+ì/ã9ƒH‰F ª6 uA 0VbT²T\Q'MñG U2hÃRp)  z  & ,¿&ò# 4" ¢! E" (±++ N-]$ & G'( + 4 Õ: < =>6 $0w83Z(k*ý(ˆ-%3†7 : ÑB LH ^<_ÿ k Ø W  ¬ Ÿ  «! ¾#ø'ù%º&Ü+%,T.è3Å0h1À/Ñ46†<K=3= î; 7”7p3 3 õ4 3 È1 . «+ ) œ) (( ·( ±* '* h, O, ./ &/ i0 ¬. E. ¥* f( e$ D" ‰ í ì$ ²! B Å" 9 à  iô¦P ñ u ÿÐ ‹$§,j-Y, ( ]%#_$s*[1 ¨6 ¿5 P8  =$;ð;ä;ƒ<Q>£?õ=·< ˜68’7µ1 ë, º#¡ƒ  ¸ Þ P — Ú S u ¶» ;+0 33õ/þ#4 @ K á” Ä)~- {. ´1O7Ž<  < Y: œDôTºQnR FT “K Ï? §< V5 ¯5 / Â0h/Î0Œ0 ò/6 ¾8 3ˆ0u0 *8 C÷3 c/ + 2?/ È) ¢4 %4 &/ ¢*Î(Z0 6Û1)(=h   + " E ; ¿ Ü Ó  \ S µ «?ö(  Õ$ \% µ& Ò' * u, Ý/L0þ.e.ò+ ÿ' K  * ¡ó m& ) *&È'$ä$Û$v$j#‡#·#®#¾#¾#°$i$×%^$¯$ê$ò&&&%r$¡%%ù%~%Ç%Á%Ç%¼%,$ÿ%®%†%x$É#z%ü&—$#¼#B"C"ø%E#Æ#^$ #Ÿ#À#¾##J#–$$R$‰%µ%¾%}%N%o$Í#ñ$­$Ý$"$=$$t%t%ã(*1 5F#@Çþ#þ,ÿ…&ÿ3+þô/üN2ü´²ÿ£Ëý·ËýµÌý§ÊýèÉýó–ŽŽÿº„ýš¥L¸þ¾ÉþÓý»ýËý¥ý+ý#ýàýÚý²ýÙÿ‘ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿOÿ’þâý®ýú'þ÷6ÿ¾/ÿ‚2ÿ¯-ÿ1ÿ×8Í@ >0A2Ð1*Ž'»'œ%N*`3t:WCÍBXHÏJ…FüJJ4LHSäOPS™TDTWZVfS+QOëO[JFOHqG„H¾G÷EºG *F!ùF …DýDŽB¨@C@$:q6$7š:Å;É8|5©8BßBù;F>IBèR‡L@n?CÞGºRàAË8‘6n4Í2`(7"‹6×  À$»S"5 xª´ Q_ Ô h ž˜ µo 2  ÐGû&‘ æ V ).kB˜Ú¸œ]¬hû×KI Ç ¸Gž9 E.¬,È6ƒa–Cnc7YóNˆŸm!SÿRº@ˆ6¢, &))//®+Ú+(ä(¯/A.Ü. ‚'V ‹K0 ], )ï7H75ï-u/,/”0z2`4Ú<=C l? I Vû\ XÁS‘PQI µI ê\ ¯c ék g?“(þ&& & ƒ.y.Ä$ ¾  Ñ  s  ‘& % '¸(¸*6' “% & % #(»+D+ =/x+Æ*¿/w9ê+®*e* —1£6Ì:¡=0@(DÃOq8 T + } é ¦ ¶  Í#º%**>/¤1È3H4b36é8Y4Á6M6~2ˆ. Ž/ 1¯350:\D—I2E»C> §9 è9 8 &8 y8 35 &1 —, ±. Ó/ È. / J/ `0 t/ ý2 ý5È6c1 E+ ¦( Ã! v H  é% )$ ž# 8" ;³ b \û’ä 7½! "#ý$ Á& b% Ÿ# Ä) 3 1: Ý8 ’FÀDÀ=Y9Þ9N8Ã<L:ó; 5 N6€:9†:†7 C/ E( ½ ý „ ™ è ·   è ñ ÷ Ö ã2+¤ ,# nzå >§™ ]( A, 1^6f>F§K HD : ùStM åV õT OJ @C F> 7 o4 2 š0B1,2É3?4Ó523e0æ1þ3 ; °D œ1Ð. g' W& N' ³1 ÿ8 f3 u. ä+ + i- ¥+¼'ýuÅ ák M <(Â$ ! ý" É# ¾# s À ÓÀ  B" ³& ( ½* Ÿ) º,I,õ* ß' Æ$ " õ å 9 T ò# =& o&î%¦%œ&f#}#·#Æ$#õ##…$8$$>#È"Ö#¶$•%V&!&g%Ú&®%™%P$Ö%~%‡&%“%R${#ÿ#ª$s%¼%{%Ž%Ž$v$Ž% %q$|"Â#ë"r"8"²# # "¹"Ã$A#‘#Ñ##Â#V$Ô$-$¤$Ô$ž%$$Œ$J$á#ë$,%*%/%µ%ò&C1 ¥Dp>À&ÿ)þ&'þ!þ&þ”,üL6ý!±ÿÌÊý-ÂýzÉý£ÁþŒ±þ»–…‘þí ÿ½lûªrø‚ÆþýªýôýLýTýîý;ýbý“ý•þåÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ½þ‹þ ý»"þw3ÿL2•(,ÿŽ3ë4ô> 1Ô30Ð,\,';)Ž.(-V<NE.@CHîJÒLZN~NîN"S‹S U#VAZ®YUcP$RÔMxO*Q•N±EØF”G#IiGæC€D8BîD yC‡Cd@¨??;8û9+:ä;œ<,:‘=cBA¼A´9&@¥Q£XxPBIÛJKKtS•F}<ß8¦5J4/-'#ç#%g f‘TQÿÖ’óÃ3J,c*ìúè ¬ ë ÉCÐH• s¤ S  ºVè §2¼…á S ‹  Ò3-M ‚9Ä62lMGJHK”Za}^dqbkDx“aõJ©4o(š%%æ(.(R'Q! û  %  E"`  ƒ b þ@n9¢ Ø23 Ç(¼)`<¨JmM]S’H=775Ö5&6†=ÏQ äXË]J^X'R$KÙK S —[ ëa Ôe ~g ÜV¹U ¨U 4Q ÛJ dO µNâP ÅO òKˆAI;I72 *- -c& ›' C% '( ƒ& ¬$ ‘( ,à,ò5p0c6b>Ó?)G$M8QÒTÂP«AR//§. -\%y! ¼',-L-0Í6*:x8¼6»9ì9—9î<ãKKd‡xÿ –Xû@ù-¼-Ù4’9¯:Y8Ý9˜< @yEE D¨= Ú: Ž< w@ ®? y@ ó? ä? \9 26 8 ê4 1 w/ y2 °6 G7 G5 A1 * Q& # a" ¦ = y ù Ù a  ÂþßÀ - Ó"H# æ$ ™% Ã( ¡6 Ë9/86ë6è8·6‚431á6é1Ñ0’0 5Þ0Æ3`6Z6/½* Õ' æ O å B — ¡ Ãô ž  ¯ Ü! ¬+m ¢( s! â 4Û ïà _ ¾$ Ç) . 63Ì7ó?QI &8 Ÿ7 ‰E ¢D ºN 1O F d> ë< 68 Ð5 }/‘2$/ü-B2ó1’3x1;0¤.Í/K< 84e- Q* ó$ x- ´6 ‹? 8  0 z. 33 ·1 è# b(u+Î'ÿ &{Y}%a(j&è& T$ ”# ! Ý Í à  ›# Q' i) * k+ o+‚) 6$ œ KÚF î " +# õ%&!%^$r%>$~$#L#µ#›#C#r#Ì$t#Î#Æ#¿#^#@#}#¿$-$\%š%%Q%—&H%ø%%%—%G%_%%$½#ù$ $k$Õ%%ž$²$$ð$>#Í$#l"F"="#{"{#%%$@#u"º"1$$ì$T&$P%$c$\$R$% $ #0$µ$Í$µ%‚'3 fEi;0ÿ)ÿ¹%ÿP*ÿ-$þ-ü†1ü¬°ÿÖÇý) ˜g«ÿ"’r˜8Dfù;cúSw÷ÄþˆýDý%ýÔýÖýýcý¼ýAýúþsÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿEÿ þÿý:'þ.ÿ¹8ÿ*ÿ*ÿŽ-ÿ¾4?= V23¬2^-N,X(›&é*s+F>ÏH,CoH|IsK½PS4RôSMVP\3Z‡YŸXNYTTX£UJSòLINûR9LCLKÁMVI6I¿DéF D»DoFmDÌE B%AÊC˜CCDÜDðCX<ß?HBÎCA’@)T×u;pPMÒDQå_VLBG<;9~3ë/J. # £ÿSÂjaªarò3jš‡J¬?hŽ› í ½G‡m9•÷ ‰ M  \"âníçp·¸r»ÐN2Ì Ö u ê å C7 `lcsh0dU9T-JW-bPZYZæz‚«X¶NnD—?¶,r1Ê' %'¸$"ñ"i%! ( ‚ Ê+ g_"n ½ô %1%O.$@øD³G‹JtNãHµILÆNôR ÖW_K^,]ýW‰PGJ H dM óY ndÿ lbÿ }b Ûd Ðhÿ 2e "gÿ ugÿ ðg e qg Vd Âe *f ` ¬d \lÿ 7g EH …5ô0W-/.A*E" Å& û= Ð\„qâ…'ˆÌŒ–’Z”.’ Š @„ ‰ XŒ ä‡E„2qœ_ÂDÜ3&+•.…3#7u7\9];t>AÎC8CËBU^¢‰ý W‚ý Ò‹ü ½ˆý ƒ€ý š\Ô4–6:-;5=d=:‘763 .5 b8 Ê9 < Ë= = ý: >8 ¬: ¡> ®@ fD ûH RI ›B E; ×8 ^5 €4 4 >0 ó0 ®2 “/ œ* é% º  à ìâH"dc  Á 3$ î% Æ) —, ø/Ô1@12»3S2-0  %Ü'^*Š-P/À161Å1Ý/‹)Ÿ)À*Ž+å% N ì  ¾ µ   - ù  Ú Á!ê ³ ç! W Î  @ . Q$ ( ( A+ ¬/d2Î3{5B8EC? á= 6: ½I •B =8 7 ˆ5 2 û1 s0 í5*6-6ò1·,«.4,Ô(Ô/ ¼2 ¬(€& & [% ¦. ±5 é3 [- ¹) ü,(- @!b !&ª)" òÓ¬"b)!'$ 5! * ˆ â  ¹% ) ²- /c- ú+ [% A …Ì ó! W% 3$ ý% $ü#F"€!Á" #‡#†#½#Å#"Æ'Á$B#ù#ÿ$;$.$#W"­$B$~$$q$?$6#Æ#…$>$¿%\%Y%š$Ÿ$ %~%Ë%Ê%À%}$|$}$*$D%%#|"Ë#Å$G#="á!þ ´!|"8#$~$À$#L"w"?!»"¸$$;$Ä%„%Š%‚$L$"$!$¢$¢#{"º$%V%d$Ã'43 ÛF8 8¨3ÿ¬/ÿ-þHþÅ(ü-üC°ÿ\Åýò€úz>„ÿx‚C—#¿þG²ÿÛša¶ÿÈþ–ýœý$ýrýý'ýèýˆüÿý€ýeÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿtþïÿý¬!þÂ.þ?0ÿž)ÿÍ/ÿv2c5TA Î4Í53Í.A-L,U-ü,Å/cAVGmDªH¸IÔLPP­Q§SÌ]Ô]`a+[…]~^;Z(Wà[O]kOÄL›I(OUHGYLdN¿LRIGD"EøEÝHÄEÂFqK»K»IEAáCUCÝ@ü=&Aë?7AŒAäSîa…i¦JìZ…S§qÌWûPMFF>6R# ìÿÞÿ…CT»ÃtûíBãsÕÅÛÈòá ]  o4(=®1Ü ^ ~ !ú)$ rÀð)ÛY¤Ö & 6 ‰$‡7Rýdhr‘|±} ”xq} ï† ÃŒÿ ¨„ Ž .{ Wg\WŸ[åd¼_q†OKO†XaIE83+Ì'ç(F%Š%9%¹$B!  P · üb9(úª U E" Ì" &•/,=e?^@VE8JÿJÉKÑQXR ÍXú[ <_ƒ\wSÈJxI ëH ÙKHT Àb Ð\ à\ W ±Z 3` iÿ úi j d |e fÿ 6e “b (b b Ecÿ ¾cÿ ufÿ îcÿ ±` ™a ò] )Z.^¤w ;~ wvmÏjnjbm®pÞ~ ;Ž þ•ÿ q MŠ U‹ÿ «Žþ ¸‹þ yŠþ þ‰ÿ Ö€Šj”Mý@©?@CÈE˜FxFsJuMýOU®pÿ'‰ý ›|ý ©hÿ @uþ „ý ›‚ý Pzý ¯R 6t:Ó;í<*=™;¾;8˜8&7Ë5k2ü1 …2 p/ }1 õ3 æ5 ©8 Y9 u; = š? (B ¢E %J [J€H ZI H LE ÌB ¶>•<!8é4‡7 t6 . ,& ‘ ú $Ý3 .Çà # ï"& †( æ) g+ U+*|&­! ”%±'Ã&Š%.)-,å1A2a0"+ˆ+˜(i%! > Ž : t  ¾ " ‘ ¨ ø ý#} ½ D H Q Ð ³ Q! U!n$ <& R+ - Í/ Û1 ¼2É3Q9 `: ¶9 x0 1 d6 c4 l2 à. `. G* ã.+4Ý74˜2m0ê. û, O) ]- u, a) :( Æ'°$í( ç+ <* Z) ß)9%ã „ ü ì m°~ k  # à# ]  h" «% õ& Ž( ) [( $  šk6` ‘% + t+ (( þ(\'\%Ï#"ö##"Ä"#,#B$"ƒ"“# "š##r$<#Ì#Ï##>#¼%¹%o%²$$ $º#Í#Ž$&#¿$q$¨$ð#‚$$f$Û$á%O%_%$#ú#Ê$2$ƒ$Ã$H$Ë%:#!í"±!E"ˆ#z#@# #"³#³#;#8!ä#i#«#M$¿%L%•% $×$ $[$Ï$Ú#¹$³$5%n&4%Ç%¸&Í4 Fª7á.y7ÿ—5ÿÙýœþ\#ü‘,ü"¯ÿÅý¨ˆ~’ÿ¿–ÿ/˜ÿý•8›ÿ­yûTTøhý°»þøýtýŠü·ýšýbü§ýüöüýbÿVÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿFÿ»þFþöýC"þÄ)þg.ÿ/ÿV-ÿ 6ú9B²6ž7’5-Ì,£*.-b/X=;AÜEbJ;KëSUîV Z__­b‚ehffHaD]•^Z–U¿LIòM¸JrOžSÝMmP¨JHóF E®D9DŸBÛFÁI¬LíHªEcDý?Ø@ÉBj<°=‘=qA·B>Dã_£jU$yvjÑeÖ\¿P+HæD[8, Ó€ù[F˼…âkr]ÞëIjŧ ¹  _'Û2µ)[ ç Ù ñ"².˜ ’íva ¹»ÿ$ .2“Qòi²ÿ v”ÿ ã”ÿ S~ Lv òz (h)[~X]çcD{=s„tC{cpùj¤iuWŽZLLabgä:„-ã0±%'µ'&¼! Ó Å"°!8 û_¥2WH ë C ßÝ °&š.=6õ<ÔFëOMPLP ÔS W ë\ ¦a oZÁM nJ ²G ïG áK €S O^ ßW ¹Y :T ŒV ¤\ í` Ûc ¬l±qh Íoÿ çq j æe Üa æd ×d ©càa §aòh#mçy@t:lLj€j„j8i8g°fcÜa_”ppŠ Ã†ÿ ª†ÿ ȇÿ Žÿ\ÿÔŒÿ„ÿ®œwÎrÆp¡k+gÙffÇj xþ9€þ ‰‹ý âþ Akÿ †Zapþ +xþ q|ý ùý ¯jÿ€@‡;/=?<å:Ü9ä<Ì?>–< <l;M; : 7ã3Ê2 Á1 / é- ¥0 Ú3 ý4 ƒ5 6 ¼8 ±9 À; r9 ü= m@ MB G ¡K zI P MV˜Wÿ ¯SºS©NCç8 ´, & < O ÏbC Œ ÈÐ]Ú u Á ”   œ ¥ Q ZØ –#‘$õ){'x$Ë$ø#Ì#N q  {  V    ¢ ¥ — ù s è" , + :  º €ã n š(±& B' ,( /' á+ i, º/ R1 J4 ©3 :)  / c5 0 ž/ , Ê- «+ Ç+g3 e2 x-ß/0 s- + I%H+0,ë0 ." Ï W'u+à+M(ú# r Ü ® æ \  } Ç" " g  "    ü ðHA" Ç$ ) :. }2 ®. ñ- ~+%é$;# "ß"|"S"ó#8#Â# #…$~$ $u#l#;"S###"J#½#y##†#O#¾#…$‡%1$B$÷$è$,$r$é$¸%!%Q$$K$H%+%c$­%ã$æ$ß#º#J#»#º$"%&$S$P"!Õ!Ý""Ð$•$„#À##!À"¨"Á#“#Š#L#Œ##$F$ö'% $P$!#é$ð&-%F% %U&&%»&—)J5 oG¹9ÿG"ÿÉ%ÿ~3ÿþXþ²üú&ü¢¦ÿ‘¾ýµ€΃ÂOƒ=‡§ÿXúæEõm’‘¿þý™ý ýý:ý°üý`ü–üŸýÐÿëÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ}þîÿèý-þZ2þ’/ÿÖ.¨0ÿÄ>ÿm/KCJ5P5h4$.Þ+·(É+¢,Í0;å;ÂGzLÆI¡S´W´XÝ`±cb,fýllkÎgJjà_UY¢ZQWÅP1LýL$NeUóS€HÎHyFmG_ }T T ¿T ÓZ 5] ._³]Ê[XEX°^dbg’f —h pÿ ptÿ¤vÿfsÐs^p÷m_nçmÅn'nÝn•lÓl‘nlXg -mŒr•m¦sF‡ }¾‚ïˆU„䉜‘ÿ_—þ m–þ ”þ æ–ý ¾þ ÁŠý ‰ý ç‡ý í‹ý  Œý Òˆý &vþ *eC^±lÿ Ólÿ –hÿ “wþ “uþ ÝO_6Ï;?ÈA=•?A?’=ÓAùA…A”CC×A¤?í?ô>z:ý9¯6»2 —- é+ µ+ L+ @* ½, . 5 .< > ÜB 4B lA $< ¼: ~= `B ˜G ÂUÿ ãYÿ ‚dÿ À~þ®}ÿ¤jÿ0m%l™_•N»<l1p. , # @" 3 ò5 é ½ S׿ H } b  ë  ð N § pÒ ž  ?  Ü S   \ ä± Ý ˆ \ • = I¿(ªÞ I Û& ±( m' Œ) ‰*  - B- ¼/ ­, -9 ž9 1 1  . Ä. / §0 z1 ‘0 .  , C*])  ¤ Ë ` j ¾ Ÿ § Ë <% a  Ì G ¯ Å ð ó÷œIï ˜éÓ ‡% .* V1 u6 Þ8Á6Z1Y/X+¬($«#±#A#Ä#K#"£"R"M!ÿ!¿"Š"Y#/#³##C!Ñ"L#¿"Š#³#‚#Ë#“#þ#ƒ#T$#ý#Ã'F#Á$>$¼#Ž#½$5$l%($ñ$Ñ#Ç$Z$$$Õ%À%ª%J%ƒ#Ù$##[#´$(#Ú#Ã#B! #å#y$#·#8#¹#R"Â#<"€#/#Ç#¿#G"°#ß#R$…&ö%‰$Ç#}#Þ$N$¨$Ù%h$“&³%Œ%j&Ÿ(Ø6 ôH«=_-ÿœÿ@.ÿüýb þûü-$üfÿ©©þAy‹66s6/a,Ç'î,ç/ï+”5=hI¯N~K¯Tz]ò`Þ^‹``Pf„mZlhrì=r77¾5N7-:>=_> ?”VåUÖJ±V¨pÜl^Q H½EŽ5ë Mhuü}TEµÅu1¿j ÿ‡ ;dÛ v ©#c%ï,E(;$O"D#= ü4­!AžÒ ˆ  µ ð9rWÅ•~ Ý} Ÿÿ ܦÿ §‹ w ¬s Ff÷_³V|M+M/KÀJíK8V7K³LIÊIcWf| rLHkZ"OBBñ<6-?)Ç+'  0 Y" # Ö 6JéL8 Ê  û! ê© y%æ3DÃNQ|SS?TuT=Xê\£_ §Z(NíI ÿF¢GgKGU¼b Cd íZ ö[ …XÛV–\.\|X„YÄX Y|\)\º^_\ \x^#b³aJbŸgknr“r rqÂqÿpUqÑo „o£wNr±m¬jÞu‰‚G-ˆÿzˆŽÿf–þÿ›þ™žþ Ošþ —šþ À›ý ¹”ý 9’ý éý ±’ý “•ü ¹’ý @†ý þrÿ Ï`ùaå`6eÉjÿ ”rþ £pþ ¨U 38_;n@K?)@B»B¹F 7G‚G3FûGGH‚GUDAª@{> F= V< 6 Ó4 ô- Þ) º, c/ $. a0 K2 à2 “2 þ2 ¥5 d7 < r> ¯? dABÉCÃD uC íE úP ‹[ÿ {_ÿ [^ÿèqÿ ¿\vÿ¦wþ —tþ ¶jÿ Åcÿ «] ZS L C A :< 2 x3 a( 2 E ¶³à' % ðŒÚ7þ©A™›a _ £  ¬ öM~   ª V E T øõ  ð"ð%o$‚$¢(P.>.‡/¾1*2\4u2„.*+ $# B ×  Å Ÿ ’ û”g   — È åјáúí3ªfHÔ–  ¦' 1, ­/ ù3 £3 . û+ <+ þ+ ¬( ¾%#¤$t#¶$9$)#ï#ª#ñ"¡"Â$I#y"¨" "Ë#y$<$,#*"#@""D"ë#­#ô#û##ô$|$%t%=%0$6#µ%¯#u$#ù#ª#Ø#c% &z&3%$$Å$›%#$È$à%?%w%ˆ$Ž$^$$õ$$“$#Œ#Õ$+$##y"Î"Å#H"E#Ê#‹"ü#–#M"q""# #Ä#w$5%.$Ç$#Œ#Ÿ$%*$x$à$£&&L%[%0'm5 DHé=}.ÿþ2ÿ*"þNþà þ‚üõ!üeˆÿ?Ÿþz•mìpnxáwCwéRþaMûUoî£þ÷üü–üõüÆü†ü§ý0ü¤ýØý1þîÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿmþFþºý-þ´-ÿ0ÿ,+ÿ¾234ÿ$8–@8<845F0Ä,½(G*¿,i)í/ÄAG5M_PAR)ZacÐiBiCjZm\rÝt=vWr2mvl¤_UTR™LÖU®bè[›XuL_I1H…GÕD­ABAB´IYKeN”J£E ?=;6U78;Ê<ô;>‚>”<zL×V³RbT_ƒ¬}†|6a:LCF -†,e]Ô#“5 ¡¯³¹,ª@,Z- "‘*7'ª.N*‡$û"' 3½,À &æVò%6Pbó‚HŠ׆ 3ˆ ï¡ N§ÿ ž Ñs ÑsZY—ý £‘þ†ÿÁsÿ§lÿ¶nÿ sÿ Fwþ æzþ çyþ Znÿ ÌQo-í5…;?ÅA6@SA^E GëH¹HiFðGùHzH¿HqD^B¢@ w> {> t< ‚: q7 ‹2 ß+ Ñ( %' ~& Ÿ( ˆ* }+ ¦, ++ ¦+ )( r) ±) ) ‹, ¾1 Ü7 ™; ®= = \A 4> A ‹BÈAŠC‡BúC îD bC #A îD ºD }G dK ÃK iN ÊO ÕL éK ëH ½B Ö< Î= ü8 3 . I* i( 6$   sAì¢ìcõ  ¦ : $ Ì Ì } Ì T? i ÿ ïG ™ Ú À 6 Ì Œ Ž" #( ™) ß' þ# I  q  ¦ u – [ Œ   c ³  Ë  Ü Z õñç6" ¢# è& d& v) + Õ. / É. @) "Z«¶ À  k  9# %# ‡$ð%6$î&${#W#Ç#‰#‰#B#U#¿"Ì"ƒ"Ò#N#D##o#¹$+$š$l"Ì"E"Œ"ü#~#C#:#»#»$3$´$j$3#Â#z#‰#[#$%#ò$q$°$Â$¬$”$#Ô$Œ$C$¶$´$²%%Š% $X$Ÿ%2%S#s$ß%f$Ø$#"Ð#Ì#J#"Æ#y"Ò"€##‘#-"€!„"/##Ö%%?%1%6$8#†$$º%¥$™#¨%&‡&–&2&>(a5 KHê;²*ÿË3ÿ´#þîþóþýªüû…ÿ7þÙa²fLi»pªw˜þjžþ{ þu¡þü¤þôý8ýéýüÌü&üÆüüüýàþÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿfþžþìý—!þr-þ–2°0ÿÀ1ÿî2 6×Dq6a7»71.µ'Á,ð-1,–2ÉEýHÅN¶Q W;]Â_emHn3xlzƒ|dzSzŸsÛi¤^WU˜SRsi%ebX·TÞNÂIGJŸJ%FÕDnDæDŒGUOñPëJ½EVA=Â: 8 =@^AAâFßHH´OlZ]q wª{MoŠn’|ãX¬7RàKF•`-þؾµ4t{ õ@ Lõ 8×]ƒ ?#*¯2“+|$7 · ­&1+Œ) C˜Â! øWñ€U–²’½Œ ‘ â¡ÿ ³§ÿ Ÿ¡þ 8| $u ã\‚U¿TQOßPqM@N+K¸KcKKILZMÓML¿LOlH–P^f ÇL­D³L^SQ¯E6Ô.Q.h*:% ,'7! £<¨Sµ ¦ ñ „žõ M j3:<HOöR8T®RíYì[wYãY „P áJÄFÓEüFëLÄP .\  < à: ;7 1 a- ½- Î' & & -' R) ‰) ¹) ‰* M* ´( Ž& Ö% $ ±$ [$ 0$ o$ à' ) * }* ï, ¥/ 0 À4 O8 G: ; < _? B A X? > Ô> B> ·> ~= ˜< Ñ; T7 L5 *3 N1 -1 !0 u. X- v. , ÿ, É. M* Ô* ( æ' h& B% Ö% ±$ …% # –" c! `! Z! Ó! ! XE 10ÿ `H ! X ³ ¤ š! %" š% 3"Y'-'£! ! # ä& _* : ù T$ ’& Ÿ' ‹( ,$ Ë" .% % ’# ‚* o$ d! ˜  · © ë/%†?ÃB5ø ÷" ý$ œ% 3$ €' ' „'š%¿&u%î%,$|$<"Ë#}#Ç#b"Õ""!©""Õ"f"Ž"…""Ò"Z"Q!ƒ#C"ª#Ì#¬#l$$$*$³$($"##¼#Â#¸$!#ñ#v#‹$ $ñ%)%Ç%i%F$þ$7#Â$^$$x$P%^$##¢%c%y$$å%g%$þ$ #‚#ñ#0#$y#·##ƒ#Ì#z"È!þ"."}#‹$K%h%-$¼%m%Q$w$%«%S% $`%T&&•&8' )g6 òJ+;+*ÿÞ5ÿw/þ|ýfþ>üMü›ƒžþhלþ£ þ›þ6xU›þ1•ÿ#•ÿ"£þ9¥þpýSüÝý ý¢ýâüwü/üÎýHüfýµÿÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿdþÆþþ˜ þ"2þ˜3`4ÿ91ÿ'0ÿƒ7 Dô7¹6z6.1S+È*N.c,­*4zCûI4QjNåT†bFfëi}loŸwš"í×|÷pgi0f'U¡U«RÛ[NZäS°P¬L JåIÀFõFmFµGìFýH§UžTL&FæDŠ?:;žBKBDúDÃM1JmHñZÖw¯x jì~6`‘_bwM\) T÷O¨(ÛBubuýß°ùr z ¹":ùž„ '"%B#X ” S á&+k%° q ?( Lq]™Kž–-“±œ @Ÿÿ á£ÿ ÝŸÿ ˜… ëu bn¯R¦S£PÄPÀMÉM”JÿJ‹L·KKCKJõN~LLKæK>CWXùd Ý=®P†IôP_E O é=—;»2.+”'$ 3 6OH! & `Îcœ ä!.A7C?™JnR%R—R¢Zw_i^MXÐSMcI+IôK$OˆScX ]ƒc¨d¨lr¯wÿ}xÿ d{þ ¦zþ }þ €þ „þ Žƒþ 2Šþ äŽþ þ ׎þ ÚŒþ '…þ ¸}ÿ‘wÿ˜wÿWzÿâ~ÿ’~ÿUÿ£ƒÿцÿ„ÿìƒÿ7€›k|Åužwh~‹†›™þ ¹–þ ¸Žÿ w‘ÿ ›þ 7³þ »þ µýú«ýö¨ýªý‡«ü»­ü õ¨ü /§ü w ý Êþ…þxÿщþˆþH‰ý pŒý a†ý t~þ (sÿ¤c"G8 N< ôA A €? Ï< æ9 95 b4 ^3 -0 r- m, 7) Ä( Â) ¹' Š' H) ¨( x) ) E) ¯' ‘' % ˆ$ ž& ' Â) ' ¾) À* s( Ð( ) x+ + {) ' Ø' ®+ I) à) Ú+ . / #1 \1 œ1 h/ Ã0 õ1 o0 õ0 •. Ð0 Æ/ ã/ J- Ú- ª0 #/ d. ò/ ¼- …- ÿ+ •/ )- „, ) Ö( Û( O( Æ' Ñ% ð$ a; ÅB+-  üU ù ¹ , V ¨ ½ ä Ë Î! G'Ò- 3 q2 §2 61 —1 Î/1# ”* b( v) ›5 E6 ?: «= : Ö: ´4 ) ê Q ØÆ •ž  ›  Í# (% Ï% ª' S' ( ( ' ­(9'\%ë%k%*#Á#r#†##U$#‹"Ü""" "Ô#ß"ž!Ð"""T"†"S"Š#}# #€$$ä$g%%&%$>$Ç#Š#Å$]$o#Ã" $#N$K$R$0$®$¬#õ$$æ%o$¹#ð$R$ú$M$M$É$%$Ð$È#õ#»"ø"!×"Ì#E$½#Û"À$"¸"è"""Á$4$r$å$¬#6$1$ÿ$%c%Q$Ã%“$P%R&¾''’)n+ó6 G÷8Ê,ÿ¦4ˆ1ÿtýœþòü¯!üfƒÿ~þ˜Q3TS¦^lyWœþ´†”} £þ­§þ}ý üFüý©ý)üüîý!ýÙý1ýÿVÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿCþöþþþrý.ÿé5ÿ5ÿƒ&ÿT3ÿ/3A?8á7ö6&0˜-©*š+9*“,¸J,DÅKˆQ7R¥T²Z_+cþoâwUŠyŠÖ’ê‚·o¨aü`OZzUÞQ|SàTçQMJJsH5G\DìG*HtH´HvMõUuPêJG‚A?—?ƒ@¸B§@KJ`H°QjS&TŽnE|x‹€k~²xuÒT„@Ÿ( ^uè¬D ” Y Ï ñ {@ 3% Ä€kg Ž ’ êô-¹  "n"!S! d%_*b'ê$—†0‘i 3£ ¤¡Ê¡9—ò— W™ ̨þ ?¢ÿ Õ˜ÿ ÿ| ·x n¥L³L=J¢NlPMŸJ¼IöJ;J„IKõLîNHNóKöK­MðG=Gìk 2Q•C ?NDê?­C ÆGú@y9ˆ9P1X&›$¡0šK!  ï Í^FÍ ¬'Ô7m?£D¹Q}R,UÀ_La`]\TQEOpPMVPWó[eem„f¡h[qbuÿ2xÿµwÿ 1yÿ {þ Ý|þ á„þ –“ý 1˜ý ¿Ÿý 6žý ²•þ –‘þ ÛŽþ Y‹þ aŠÿŠ‚ÿ:}ÿµ}ÿïÿ ‚ÿ¦‚ÿh‰ÿ…ÿ°‚W€0·xÓw«{ˆ…”Žÿ i”þÿŽÿ φÿ î…ÿ ÷‰ Ošþ }¶þ»ýï·ý«ýi«ýŸ¬ý„©ý °ü ªü ùšýÚ†þ¶€þù‡þ\þ NŒþ ý ÿŒý gƒþ Âuÿ`tÿ˜ZX"Q<7bC@GËGNDsGIìKÈLÿøNÿyMÿúQ·R³G ~K|JLG OH ‡FbE îD íF »B ? RB HB RB A “A ç= ó74 ¢- ) @( Ò& & K% ß' & Ž& ¼$ $ –& =& v& ¡% è( ˜) É, ý. ‡. I* ú+ ü+ u) W( ”, "+ ¼) ƒ% ù& ;$ % O& ) ¨* %* ”* ( ™& & ‰& .' ( Ÿ' <& ‰( 5& ÷& Å% Ì# P# 3" l# !" Ú" i! ­! æ ¾ H  òI ¼- çEP0 1 t´v r„f  e ‘ ²/ y+ à & ó# , û2 e0 C9 K! M 0+ n ) è3Š<Gÿ ŸIÿ ÎFÿ fOÿ‹Rþ9Oþ sMþ 66ÿ ¿4ÿ d1 0 £1 ;- k) €) T& ¡& ²' ê' ,' 3& k% ‰& À' ( ;' ´' 0' ¥&Ü&&%%{#½#T#ƒ#‹##E""¢#^#Ä$ #:##\"›"E"ü"Y# #J#Ê$)$¬$£$á#‚#ó#3$#L$I# #ó##K#A$$‡$1$ø$n$ç$Ú$¿%i$##­$˜$o&V&M%R%$Õ$o$å#“"Ï!•"Ç!Í##u$ú$¹$G%$;#x#r"~"†"Ç#@$j$,#Â"Ï$€#È%%?$Q$R$ž%Ó&Š'z')“, ×6 jKœ;I1ÿf8ÿ4ÿ:ý¬ÿ¸ýÉ#ý³…ÿ°šþ´yu‹ÿïŸþ¢—ÿY{Ržþ2~Œr@¡þ}¨þ?ýÑüdü‡ý‰ý ýü§ýü.ü_üÇÿóÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ“ÿ‘þþþ ý6&þü5þn6ÿÖ-ÿl/ÿç5žCñ:1;o7’0ž-V*Ý(|*§4­Z†LÒIENýStSkZ—d&fp½ys{‚"‡ö€{rHíJ×K6NN3KÔDAš>|?Ž@ÆF?JHOV·WXKQà`òlUwéxjcl4[Œl`k&‹ `ÎösIÞ E Âb¶ tq ¥ Z¡ Ï[ù ­ Ù Î4!j$'#}#Ô%h ® !=2oC©ˆ¯ ·£ î– dˆ ó•ÿ qžÿžÿg—ÿ ÷z óo ¢\KqI¹GqIKNJ6KGLBLïI×I:KJøL¤LKEK1KúI‘FnR÷] MAï<Ô?&Bd>>£B==€9Ò0¥(Í# 3 nCœ ¤ `¥4ƒ8A#B8ûBJ‚PSÄXË_ÄdÔ^O[˜Y¸Xm^se³k˜p÷s`møh’m6rßuÿ²wÿ $yÿ©r †vÿ uþ xzþ ¾}þ ïŠþ •þ  ý >™þ ‘þ 9Žþ 8Œþ ¥‡ÿ Ňÿ†ÿ›ƒÕø$M} €ÿ<€Š‚‚U|îw3tgy‡ Ø‹ÿ æŒÿ &‹ÿ ãŠÿ Q‡ÿ Ú‚ÿ u‚ Uÿ %®þѾý <ºý*±ý˜ªý¬¯ü *©ü l«ü ѧü ó–þWŠþ|ŽþŽ•ý1•ý:‘þ”ý œ”ý þ5zÿísÿ,c,cÙdÞXt:¦:BIhHéD ¡D ÿFìG[J ONÿ rL‰Pÿ«OPVÿ«VO³UªWWNV$T´RŠP‹QÈNPN –M NK²HwFÔAš8 :0 |, »( f& ¥$ Ò# ÿ" î" ï# `! ä! °" -   •Ò i&‘) œ% ª( , ( T+ Î- y, ì+ à, 7* & J$ Ò% @& -' â' l) —) >* Å+ ä+ l, / F/ C. ­. \- Ó, $+ Ø+ B) 2' õ& t$ r" È" P ¤ H} óïw% Û$ %@ÿ çIÑ1 †¤ß W¬ ñ " „, Ì- | )i3 /0Pã C °X< w  > F ¯5C% ò k/ #Oÿ ¢Qþ «Rþ AÁ, …Gÿ$HÿéHÿxCÿ 1@ÿ ];ÿ Ë1þ ~3Õ3Ò8 Ï2P, ( #( ' Ú) ' Ý' å& ×& &È%ö%®$O#Î#š$%-$¼#S##¦#Q##"‚"Ê##D#å#Â$'P$T#Ê#º$:$l#"Ó!ä#'"Þ"<#¡#I$z$#Ö$}%j%h$†%u$%$o$X$#7#Œ$($%'&Ÿ&$%!% %Ú$á$š$#I#ˆ#8$P#‚#P$Ö$L$<$ƒ#Â#›#I"u"$6#$J$4#ë$’$ý#Õ%[$Þ$I$J$H%&E&ž'j)R+“8 ~K™:ÿ1¤6á7ÿÃÿ€(Ú<ÿTJ gû]¼\qp ¹¥þù¨þw€ÿr„ÿitÀ¦ÿ„ªÿý`üŸüÔýâü§ü†üüüü7ýqþLÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ{ÿSÿ*þfþØ&þÞ-ÿ¹4ÿÊ0þw4H3–Bý9Á9ç8˜1«/)F)í+^(˜<LS—M´MKMKOEiG£H¤H¥KL¤HÀKãL%C<=P:Ž<+@ÎH"Q¶`^[Èfð]…R½Jäb•f\i_Tw³r¶R9YNP_¦ ØÉ½ Œ ÿ ® w ¶ œ\äZV™îЛ«SšÏ g  ¨ »° ¾ h @ÒmÜz Ÿÿ %™ÿ )˜ÿ |ˆ fy ¶u ,ÿpžÿ ÿ Š’ ×| \`ŠM’JbJISGzEêJIMJïMMKJiJ‘K.G€KIÔIWKÃHÒKiP£TgFhCDNN=A®=þ7é7j08,ó#Ê# 4 #>› Tv[Vß¦Ç "+…<NaPÅTjSÝTÃXu^Y]&`†cÂf:jkk‹putOt×rÕv uXtAxÿ 2xÿ´q oÿ ;nÿ \qÿuÿ |ÿ Êÿ Qþ ®’þ ¢‡ÿ Ȉþ X…þ i}ÿ Ô{ÿ¤{ÿ»u†p+pvs,tÌvpxcxhxYv©qFx‹ƒ º… )… ‰ÿ èˆÿ å…ÿ +ƒÿ ñ M…ÿ ®’ÿ ¨þ ·þɸýõ¯ý£¬ü ©ý œý " ý H¡ý’þ2þœý¦ý G¨ýY«ý ¡ý‚þ‡~ÿš}ÿ£vÿ-vÿÞtÿ rÿ¬kÿ½Q´: >ìF2‘E˜Pun—Š–~ö€ …ƒ ’… Ò 㥠ü¦ Ÿh±¢#ŽŸ?›üü¯üÍüwý¨ýhýÈüüÎý ýÀþ+ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿfÿ}ÿ{þ}þY(þj0ÿ1ÿ3186—Aó:S:\6?/?.S+ž'H**EVUJPwNFRìT>W•a&gÕi3vÈwè‚â„ñ„ÿvÛgØf`µ]'Y[ARkPLÃK£HAEäGqJ%J¤LO'JgKwHL@:À2f9¹D‹M7NS5]­|afXRþVYy^ËZó]BXøN^JòGƒ8þ¨gç »=p¦ uHJ ÓýKMë.NÚÖD Ë “c‹¨ YHa×p &Šÿ °•ÿ XŒÿ ;‡gz ìoœm ìŽÿé˜ÿ‚Ÿÿ Ö d| ªVwIgHHÿIÏIF IÒL—MöLÝNøK7P‹KéJRJSJ‚Jð_¶T¹RSS¿SñSaRùJ ë7¹2@1 =. * “( œ% " £}©$ß"=& 9& Ã$ Í ð! þ# Ú" ´# ©$ & é% Ë& ' œ' ß& î* %* M+ Ô* n. . ¥- + &( m% N$ # 0! ´{5|+È ‰ Œ×  r! ªA '@ÿ 3Î5Eÿ5EÇ9 ý%G Ú Ò# f' , O ’% ^9 ß4Ê>¸C ïAiÚ Mÿw Œÿ . Y ¶@ˆ=ÿ ^, »2 R^ÿÄgý æVþ ]dþ –6ÿ þÓVþ%[ÿãJÿ?' ¡! Ï! +ãAHûYðW«. ''ÿ ŒRþûRþ™H|:þ =/ÿ ¡.ÿ ,0 ,)5&e$þ%·$Ä$V$##R## ##É#‚$#Ó"Ø#Å#Ë"¤#<#»#“#O#n#U"å#_#‰$ó#Í#Ê$Œ#„$#Ê$L#Ñ$‚$p$"ä#l$R#â#³#T$#Ò#¿$Y&$–%1$×%"% $Ë$ #‰$÷$Å$]%V$ž$ #Î#…#ò#2"Ñ#v$k##·$‰$s$z#ª$%I%m$É%%Ô&&J&K&‰("+8÷Kc:ÙV¨ÞÓÎÒaÐŽÐÎÎMÐÿ7ÒÿhÔÿ&ÖÿÞÙÿ]ÚÿÛÿTÜÿ ØþoÕþIpþËüü%üü'ýüýHüüïýÂý¸ýÏÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿÿ„ÿDþ þ"þõ5ÿ’6ÿi3¡1a5FD8w:T80°/ , *W-Ù/ÓAR VHTïQ…SuY ^]_xj m˜w){Þƒ˜®z¤c‰d„^žZº[%U.O!M1K®J„GF÷GèFôJ’L3UµL`KXDŠ=Ÿ9÷7¢@MF2CzFrKàXRmSéP¼ODP]ŠiZn'TÆB´FI?Î5  ›0PðûÂŒ:»jÌîÊѯûÑtëäâÀÙí½C%^çÓ Í Á+ jeBwdp w† Sˆ š| Ku 's üv t \˜ÿŠ–ÿ (¢ÿ ›  { ZTfGtFNH’LJH+JÕLnPªOLßOd½WQLµIæJTXUl [ºXòXÇVÀU ©X àV–OH G&FRDA=¨4$ ü2 ¨( ªkš% ö1Ûå?† v% ,. ‰0 1 €5 /8 Ç:>jFäL ¯Rú]½d²lÆs?zMÿòÿî~ÿ~ÿ ’~ÿЂÿ –}ÿ owÿ å{þ è{þ vwÿ Oyÿ«}ÿ ›xÿ 6tÿ êtÿ sÿ ¶r‰puz€ÿ ƒÿ‹x\rxjæcãdm€wÿ vŠþ <‘þ -ÿ —† ß~ µ‚ \ytvïtRw ¬Œÿ Ä”þ ™‘ÿ E¦þ ¬ý8¦ý ñ ý¸œý)Ÿý`žý—ýl’þ•þÛ°ý L¼ü ¶ü ³ªü ·›ý Ó‹þ€ÿ“~ÿH€ÿˆuÿï€þ gŽý ý ÖŒþqÿ›aÿðPFFnPEVCVùSÈRÿ {OþM îL M QK ZK XJ ]H §I J ¤K ¢I *H ùH ÆH |F ‰E E œF ÒF wF ¬F ÑE §D ÐB 3A ë@ öA /@ ¥@ bA ,A z@ Š= ë@ ´= k< ¦: Â7 N5 Ý1 Õ0 + W' ì& V$ b!·ªcÓØÎl °²:  qMÝ  P# 3$ y# ¾% Ó' :* ( n& ®& 3" )ø¦"üj†8Ê^+C#·;ã„4 [Jÿ OMþ |7ÿ|.(0ÿìDM–I*Iÿ ü;°4 h/ ¾, >! §( Z: 8 6 Õ3ÿ v7´6a(n(¥"þ T"ÿßþ q ÿ TDþ¢'þ Nþ ÈEü àvý ìwý ¶hþ GxþÏQý }%þ äHþ fþ ¾VÿF8ý ó"ÿ GBþ¢3ýá: þ†9 Â# ¥SþÄ`þ*V"0þ CGþ›0þ çCþ ´Gÿ ÞCP96*4ì3Ž/ê+»&<$n%:%${$ó%q$}%%#Û"¨"•"#–#‹#”#`"g"Þ#ß#Í#T#ß#ˆ##a"Ð"`#$@$¹#Ä$<#­"é"n"s"½#]#ß$V#ç$ï#¥$o$#§$Õ%($$N$›$l$$w$_$[$]$1#ª#8#²"¬#Á#ù$…%l$þ#ù$¶%$g$w$F%’%Ó%R' &|&Ú()ð:üKj9ýXþ¨-áÿÚÿàÖÿ`ÔÿéÕÿ ÕÿX×ÿŸÙÿÚÿmÛÿeÜÿÓÛÿÝÜÿžÜÿ–ÙÿÃØþÿrþÐý˜ütý)ýÁüOüìýÑüWüý¸üýý,ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿuÿ“þå þ&ý÷1ÿé/ÿ/-ÿÚ/#5.GW<8:B8ô3a/B+§(Œ,v.,5ZKsW_V›U¹QËWt]`QeµmÌoÂtÛ|¼Ñ°rOgÏc~\ôZ¯TVí<Ü; DD‚<‘@éJÑSGH„L•V½[ˆ]i]˜cÛa BP\Õ7…!<û§jY?ôCóònÓ¤þÿÝ4l‡·~VÆg+T½k [ôF+ ¯HÉtQ~<€L’ÿ ® F‚ Ú‚ 1y ¥x 7~ ÷™ÿ‘ÿ ®£ÿ ”‘ Ë{ XWßHMIIÈHéGÇH"JzKqKâM1Kª[8Z¢UKhT÷gÐfÒ_Z WÅY!V/SÖTÐUxS¸GoAJGïDÚE Q:¹>¦:/ I( ´) Ó* u& ×# $ ò$ û% ë$ ¨$ ¬# :" ! P$ # Š# % # €% ›- {3©9I?DF¢J×NÔXÁdÈj $f mr W{ÿ Ö€ÿ B‚þ ©‡þ Óˆþ „þ C‡þ P‰þ §„ÿ Æ€ÿ ƒƒþ m…þ eþ x…þ ïŒþ Ûžý M¤ý ¨ý ϧüðžý÷’þ ÈŒþ v¤ouuÿ²Šþ ¶žý ñ§ý ¦¤þ T›ÿ J‰ ŠŒÿ  Eyxå| f~ ăÿ ì–ÿ W£þ £þ F þ Ûý óœý žý Ž›ý _”þ’þǯü ©¾ü ·ü à¤ý –šý c“ý ¨†þ!‚þ;…þ ?†þ Ý“ý ‰~þ Ûü û„þ ¨üy³üu‰þ¹|ý v~ý ~ý /}ý {ý  wý [wý vý—yýÇwýxýMtýnrýqoþGnþ€uýµpþË^ÿÕQ D #A f? =; Y: A: V: : Ÿ9 É9 9 '6 5 Ù4 d2 c2 1 ê. Ú. a. À. + 6+ <+ ]- Ì- «- n. / /- y- ß. “0 0 f- ä& æ% \% D$ ñ! Ñ# ¨# $# 2" ´! 3  „  ¼  )  ã á N!G kÁ!8z­ÉÝÑ@B ³óÿ\*¾ý;þ Ø`¼5„"¼7 ÍLþ nGþ ÝLþ ¿Iÿ ÖFÿ(>-HsR w[ÿ XYÿ 1Kÿ 9 ­* Ü0 5" Z  u ‰$ · / # É © a,Ø=ÝYÿQ[—Yÿsdÿáoþ¤xþ írþ _ˆþ dTþ Ñ(ü %4þ Jtþ iþ dý …Uü únÿ Uü Q2ý ®þþ Ÿ þ §þF"ü ´*û ï5û aMÕ(þ ƒ5þ ÿ‚Büðmý ûkþ HEý JGý @ü 3Aü P?ý Ë7þ â-þ ù% ^#C%ÿ&`%Ø%[&$ò%ù$ý%ã#"""ò#Ã#Í#f$#Þ#œ#Æ##"ê"¢"I!è"R"a#ú$‡#""Ê!ó"ý"›"Î#"##à#—#Ý$X$Ù$Ù$n$ß$^$·%$Ÿ$o$8#|$k$b$#„#:#I$p$|$u$Ã%w#A#Ò$E$\$È$§$M%É%A%y&;&B%Ê&O'Ò*^: ™Mã9ûXY¨>Üÿ§×ÿ!ÕÿáÖÿ¯×ÿgÙÿ\ÚÿãÛÿÚÜÿ›Ýÿ#ÝÿØÝÿcÞÿÛÞÿ£ÛÿÿFØþÿÜtýüfüŽýýŠý9üÁýˆü5ü\üÎü—üÿÿOÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ_ÿƒÿ þ{ý÷4ÿø1ÿ%63[2ÿ—3WFÔ9!;e9¶4!/“--,õ-´/hGúVaVXVnXZÏ\˜bæcDf;r%rõzßwÚyËwfi$hÞbM[b[FVN´N|KJGJA¶DÓG§HÏHŠL[WÑO!KCEk@1@àA;FnG?dCHžN6H´KgM`(b}_QR˜J•C£=’>*+ß <e˜îÜx FçQÿ~ ÿ>ÿkj ³6ïŸåëN\€‹í— » ç ûV@mw5 uŽ`ÿ µ‡ ×v w `{ *ƒ 5›ÿ^šÿ Щÿ ˜ÿ a| £eCHHuI·G%FG×LNåKLæJMÆIïFd>(Bt?•AÐ<ú>*=q.~& t1 N/ ' › “?Ž  ! ö" ?! $ ð! —% # “$ 4' ã' û) ¿0õ:À@1F NªTqW.RÏGÔ>¶2 M. ÷- >, …* ‹0 2 (; £E‡Pì]Oc uÿ k…þ?˜ý k¡ý Ì¥ý n¥ý2°ý T´ý€¶üîµýƒ±ý¡ý Šþ ~ÿ Sþ »’þ U¤ý éªý v°ý õ«ÿ @–ÿ á’þ r…ÿ | †{ Oyázœ‹ÿ¸˜þ tŸþ D¡ý Ÿýžü ºœý¡˜ýê•ý·£ý:»ü ²»ü Þ£ý ‰™ý ”ý ß•ý Ý„þ b€ÿ yÿý ¬xÿ \R­YW_t|ÿ žü µ«ü ¨• +‰ÿ #‰þ•„ý 5Žü zŒü š†ü û}ý ãmþ Ïpý§xýyýÍxý tÿbx&‹ü²üï‹ü;ƒý™uþ¤dÿâZ ¾T $J SF äD ¥< Œ: 8 à6 ß6 £4 2 Ð0 h1 / ª/ ³. - ) °( ö+ 1* §, (* K( ´& ú& –% #& ' -% ë% " f! ë  " 3" ç# b$ è& /) ø* 2( 1) ³' Ï' Þ' †( ) ”) –) Ô) ( P' ‡' M%—$#ì!ë 8ƒÄ|ÑKAdEÉšØXL¸r;ÇÓ<- á;ÿ ÙVþ ïXþ ([þ a^þäZþ »Uþ ­Sþ tZÿ Á^þ %^þ ßkþ Ûaÿ ¬C s2 - ~! 8  O'‰% Q& Í.ÿ JGþó<þ ¯9ˆZUÿabØbF-þ ½Kÿ[zþ  eþÎý ý‚ý j…ýh€þÇtþ ßQû ¦Dú â8ú L:ú ¨@ù ’Eú Rû AUû v-üWIþ/.ü ÓLý Âsþ ßkþ lý Ònþ H?ü Þ>û ô!°"Ú#…$¯"†"z"u"ª!¯" #Ô#b#¨$&$]$7#÷$p$>$0$^%6%$¸$u#«#Ò$d$S$#Å#ó$S$‚#Ã%O$¼$À$¸$‡#À#‘$/$ð$•%±%%„%²&t&&'+O:ÖJ¡6ÑQ¨ZÚÿÕÿàÖÿ'ØÿäÚÿÛÿéÝÿ_Ýÿ˜ßÿßÿÞÿáÞÿÚßÿ“àÿ™ÜþÿïÚþÿÒtýý˜üŸýPü§üGüÞýØüüeü\üüžÿÜÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ^ÿ¢ÿ¢ þýœ)þE8ÿ‹4 1ÿ,/ÿæ3ñD 9Y:›;4¢2§/+r)I,v-Š<½KèP QrSjU;VšWØ]£a¿f÷jmr‘tµvGtÑm=iÄb^ÞVTSOáL‹HFÜAÞ@¢CZDëFðG;NgNDQ—JcC?CŠEFhJÐOkIJGMMIñJ¤S­tûh…Z£\xBñ:€Z ;4².óÿ´[D[¯ƒQ@É$•²£„½EÖ½{îBXQS¿ c< Ti7r!(–ÿ ¤„ à| §y ´q[y (€ à’ Yžÿ ¥ÿ ! ÿ Q€ HmŽPåI/KüJ2K©JïNÈMÑOºOöLÏT¼WÈO™_qnÑinîf6b—`ad\gVáRÂOTK€G@.F>HâJ÷J £J $J[Bà- 4 N3 Þ% ã v¢e  " $ f& X& y% Œ% Ã$ ! & ½* ²2 L4 g<CFRKº^5dZXæS{C³@¬8J,È( ¼$ Œ$ # h  J  ¯  é # J$ j. 0 A0 ø> PP Ú[ Vs š€ÿ²›þ V¤ý ¤¤ý … ý æŒþ Ä‹þ Óšý ª«ý Ï·ý ï¹þš´ÿ«ÿI£þ &”ÿ ^‰þ ù…ÿ b}˜¶€é‡ ŽÿÞ‘ÿ×—ýz˜þ˜þ ”ý±–ýÿ¨ýÀ¾û $±ü ï¦ý VŸý Æ™ý R–ý '–ý œ„þ wzÿ¦pTzÿ ÏeœTþKeH÷W€þ Þ‹ý \œý )¤þ˜¨— ¦ü £šü ¶›ü d¥ü ü e„ý }ý ý‹ýOüðzFr ÿ€…`…ÿ1ŽýR’ü;ŒýšˆþR‚þô‹þþG†þ ûþ uþ Ÿa ÛR ýI +? š= < s7 ®6 Š3 ¬0 ½0 *. u. \, ©+ À+ X) _) i' ( & ‘( «# e% ! "  }  © | 9 \  ö! ·# ï& M% ž$ ‡$ 3$ l$ s$ # H% & 0' ¿( % ú' ' ›) D* Ð, ƒ. ¾0 t/ ›1 Y8 Â: i= : 2 M, Ò' ½# / Ø%d(ê@_æ†òo? êB Nÿ ÝSÿ %Zþ °aþœaþícþ )fþÌdþ™^þ £^þ ªaþ ãeþ rhþ ný qÿ0mfeƒ['9" ­ è+ž; )þ ü Ïþ®?þãGý¾bþ aþ w0þ þ?ÿ!qþSý pÿ …pÿ Ôn )tý ¨lý wþ wþ gUü P`ü Ëvü “‚ý Š„ý ˜€ü?XûPlý kü -hü Ètý ±nÿ !dýS9ûß+û Eü Xrý µ_ý ÍIú ™Mû @Zý Uü Ž!ûl@ü -.üúDý ‘Eþ &:ÿ Ö7ÿ(* s" ×'2%|$S$y$J$3$ó$ú% $õ$Æ$R$&F$½$$2#“#O#†"ò"¾"¾"" Ã"™#œ$g#è#ß%c$€$¡$¯#÷$¦$¿$™%i$$f#â$h#à$"Ñ#þ#’%8%%6%U$…$û%±$ #q$M%$%%H%š%Ð&Ô&&Ò&ß(Ÿ8>J¤6IPÓ§ØÿXÕÿß×ÿÙÿ™Üÿ'Ýÿ_ÞÿßÿàÿßÿçàÿÞÿäÞÿàÿÑÞþÿ¥Üþÿtý†ü†üîü¤ý‰ü×ü—ü&üvü]ü ü üµþ¿ÿÿ?ÿÿ?AŠÿÿÿuÿ°þÂ&þˆ)þ23ÿº+ÿ\+ÿÅ/ÿ 2©G¦<<<È5Ê0N.-a,t+é(d/à@vH1K SU¬Y5Y$]0[Ð`³gîpl_ngm¢k^jLeþ\{Y³RÍLÉI3GRGŽC¦ACQB•D®EVF”WpabPÈH—BB9GiQŸUPN1JÀKH®IçE‹OÒté_XLÊHœX>N ¦]j@·ksv»$ciÿ׫Uu¤ˆÿ/êŽ-F ¹hÓ3(ý¢¤RÝ‚B9   ‡S‡Qki ìz p”ÿ oÿ µ… ÿ} T{ >q_vƒ .“ ÿ ¥¥ Ô›ÿ Ò„ÿ wf.LƒK“NýQÂKØIsMäLÕNrP7L¹LêGDÄWH`3`ÅfioYo©ir[B\´Z%ZNP±J{EmS©fÿ £qþooþ5X €GKƒFþ@ (0 #6 ‚*  UÉ/ l é# %& +% Ù# ¦& •% Y% ]" “% *) Ò/ Þ:‚DzIÚP`ÏeÈT\G¦@Œ<86õ1{/ q, ›& ª% H   … .   ø ] n €$ w) ( „' £* æ. ´6`7~@lT íq ª‚ÿ ÈŒþ Žšý °ªý W´ýý´ÿ‹»þ :ºÿ ‹³ÿ «þ ™þ œ•þ =‡•„«„ÿ,ÿE‘þ'”þ šýYžýâ©ü §ü ñŸý š™ý ²™ý ú™ý á’ý 5”ý ã‰þ ªxÿótllxÿ xÿe lÿriü`][bqÿ ’xþ b‹ý #“ÿ ²¤ö¨ü 3›ý š‹þ †–ý (—ý ¯û ¶´û uŸü ‘ü/—ý Œÿ‚ u ±~Ëþ+’þ~šýR˜ý\˜ýªšý½œý2—ýžþÛþŒü-„ý mþ¹hþ Øeþ §aÿ È_ ®Z®m H\ÿ Naþ /Yÿ ¢N = G4 _/ j, ( & ¯' Ç" È Ø — Ö ™Q Û C! ¤  è# 5% # |!  Æ ë! Œ ¤  ›! V" # $ ¨% å' Ô' ( % þ% †& ä% ¯' f( ‘' * -ö3W6 J7 Ñ< ï? @ pB ´7 / ' ð! ¡/ýî¸. XJþù`ÿ ]þ ~Wÿ žWÿ ÐZÿ ]þm^þíMý Oý "`þ gmþoþÏpþÈqþtý §rý ¾výxzýÿ„ýPÿ‰y_ÿ ´Y+M¼>"1=9I>þ2DÿHÿ2*ý ÝFþ™Zÿ/Lü bþmhþ ~jþ ã+ýg!üRü8Ký =Gü ™uÿD[ý }oû wý p“ýb—ý +–þDœý˜ý ¹}û œ’ý 1}ü¯oü šYý ¥Cû|ü {hûZdû<^ü"ú 9øö1ú-û5úòLü 3øINü Â\ý óYý tMþ Aþ V<ÿa5Ä2;.¨)J&,%ó%$~$=$ù$µ%n$¬%,$p#ý"Ä"x"¢"{!†""4!„"ò"X#m"÷%Ù#ÿ$¬$‘#û$n$V#ì$e%à%f$m$›$¬#¤#š$W$$8%¸%®$ÿ%x$Ý%$„%%$t$$Æ%&p%æ%X& %Û&P([, v;«Kà7ŠO¦ï×ÿ§Öÿ]ÙÿÛÿ§ÝÿÞÞÿVßÿàÿáÿáÿáÿgàÿbàÿáÿWßþÿ;ÝþÿPtýü[üwünýPüTü.ü‡ü×ü–ýrýÀü]þëÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿÿfÿ}þ—þ‘,þÂ6ÿz3ÿL7þ'3¹1)Ee><Ï;á6C1y-Ý-˜,á+*®/=›@ýB.H.KOR>Sl[I^ýhWkfn(rxmêgcƒdkWÓSWN¢N¹LOG¿ErD4@õBMA @™CEù_¥r Z7KÈCwA›CúEKUJÆK¿JÌEjHÏK'L¾h»IPJŽEñT .W î\LbuÈEØaQº˜jê|aòöÁ   ,»¢ D ü  “M ¬ ¾0¾X\Unók‘ ˆ Œƒ hu ¬~ Ù{ o} ?‚ G‘ÿ £šþ ¸šÿ "’ÿ /‡ IsæS×T ÍT!DT!:M¨NÛMkN¨N@M8KJáNIj*oppx°n iâlUc_Z._Z^«Y‡Hn=…WŒþ SŠþ×|þ Þqÿ A‡2:37¡D þ7 ¥2 1' ~ µ q ·# ¬% 1$ a" " # *$ ' & *- Ã1 h;¨BÑHâUMj_7O>}<ù:H5ê14/ , h) º& Q# ¾ Á" ­$ Î q% G  G t  Ç# ' Š% ;* ³, I. Œ. / k4 _7ûI”wÿ Oÿ ¡þ V´ý ^¨þ – ÿ ¥ÿ J®þ Y¶ý ç¬þ žþ ¿˜ÿIÿ³Š‹ÿ²Œÿe‘þâ˜ý ¿žý Š›ý „—ý •ýa–ý ›ý …™ý –ý<˜ý •ý Ó‘ý 1|v_rªop mée“qÿ tÿ wÿKZüJU»i Tƒý d„ } Å€ šŠ ’ Æ›ü w—ü çµû n¹ü ¨ü "þ †ÿ ƒþ ˜—ý ™ÿ 6˜ÿ v… X€ ˆ ‘ΞÿœþÆ©ýÝŸüÛšüŸû6“üÉüÄ•üÆü ¢‚ý èmþ th«€þ ªzý iþ œnþ gþ »|þ N€ýyN ?`fS»B 5h+ $# Û!  c 7žxSÃMÿ  " N$ ‹! T! H   Œ "h "!R! 2  á" " # ," # „$ …# {" # ‰# K# X" ¤# 1# @# í% b& ¡, Y2 Å5 2 Æ0 Œ2 ‚5 53 û3 1 Ý/ Ñ+ ¥' Ï$ [. œBÿ 3hþ rþ rþ‡oþœgÿ ‚_ÿ YFþ ÇFý dUþhfþdmý;mýörþCuý?yýpyþ‰}þpƒþ ˆzþ kü ²wý Z}ý ÿ‰þ 3þ „þ vþ ÷iÿ ÈVÿ ÕHþ š7þ q2þ ›4þ 4þÈLþ.\þ([þ£=ýä5ü JIû o5ý É:û Eú +ûEKú _û 'JúUvü •‰þ ^•þ Šü )þ T¤þ #fù°Cúd‹þ ¦—ý >{ú $ýÙŒý ³{ý 2wý Èhü MFùš,ù(ú£5ü/&ûÑWû Ý0ú Oû +Eüû>ýgþ [Rþ Uþ RLý òDþ Ó>þ W2ÿ #,("$û$}%§%è&f%@$é$##ª##R#!Š!§"…#w$#Ý#ï$"$$^$œ#w#ì$5#î#æ$F%m%›%$Ù%+$#`#¦#š$I$§$Ç$N%%^%¾% % %ˆ%š$Ñ$•%Ñ%A%Ê%Ä&3%â&«*E*;åK!8ËT±©Ñÿ¨ÑÿkÓÿkÕÿ2ÖÿÿoÖÿ¨×ÿÿ/×ÿÿn×ÿÿ.×ÿp×ÿ*×ÿ!×ÿâØÿ!ÖÿÿÓþþörýÏühüü'ý`ý9ügü-üÔü—ü¯üüþ9ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿÿuÿŒÿàýþœ.ÿP/þ'-ÿI8ÿn3ÿœHÊ>ç=>92ë/¹...$01<=’D%EKHwHåHbJèRTVZzX^f”iºj,l}hÏbdb7U³PšM!IHI¤GF›DˆDóB?AwE˜e†|]3GR@É@ùBuETJ,CöE[FÎD£LIYž]ÉDýAÖGIJ+C Ò`Y|ÉmZdù6¶:êï –%Vø7  v z  ™ë ›« û #   ›„9³Z3Yw~ ®† ‹ˆ w t ç| Åx {{ ‰ ‹ ׈ ê‹ "ˆ ˆ rXXáS $V"ðR7P®NŠLLIZM2MvJÿHŠfDqá%zŒut÷v¢k[_·ZNa¨XIH BÍLH‰þ –þ Œˆþ ölÿ JB½4Ó5Ä6 :æ< +I Ë1 '' 0 ¥$¸ æ! e$ /" Ý! ¦! ù" —# £# !& Ž' B+ J0 :< @D²L‡OÅM}I%<I; ;8 Ï3 ­0 Ï0 0 S* ' # ¨" þ# Ú) & % /! h% H& À' S( !+ * ,Ø-!2 68¢?žB·T)‡þ všþ  ý õ˜þ ¬–ÿ Ýžÿ ÙŸÿ Cþ ·¥þ Z þ n˜ÿŠ—þj”þ¤”þR•þ [–ý ·’þ Pþ ¡’ý ü•ý ]—ý ž—ý žŸý ªü s°ü ¬³ü Ö°ü Á£ý J•ýz…þ/zÿtÿ±oÏf»`uÿÁj¼e£VEî=KEE[ rþ e€ý†ü3ƒ cx $u q‘ü ûéŸü˜ü S¨û ´˜ý ¬†þv‹þ ™~ÿ b—ý îšþ ½• E† ¨{Y{&ž û£þ ‰þ ¬ý†‘üâšû³žüMžüŽüÔŒü ·Zÿ nuýQŒüqþ –zývü{{ý üÆuþ Ûuþc˜ü ó~ ´ohæ{Ÿqÿ N c? 3  ÆÊ5Q›À„ @! ¶  û Þ½ XVQuF! !$# È$ 1"ž" "   û è ì  ]$ Ë  % D! À" ¹ ñ ƒ" ›, 6 52 , @ L9 2 ‹, ) å) r( w) {- , î* , ·< [`þ ôpþ qþ|þÆ~þ QKü ˆcþ eÿ [þ ÒZþ Œeþ ™hþü Dû ºKü Aú a<ú ¡HúYú ëfü yý sû {‰þ 7{ü Ù?ü{þ žþ m”ü –ý á¤þ ˆü ¦J÷kcûcþ `0úQ(ù’+ù"úÚü,ý•7ü  3ø}2ü‚Iý M=üÔ1ù_ü oþ €aý 6Xþ Tþ Ö@ý ~,þ Ì# J#H%©%£$Ü$ã#ú"ƒ#ç#u#s#¶#l#;#*#õ$Y#ô#¸#é# #E#÷#w#ë#¥#·$8% %­%I%I%#k#_#à"ç#^$a$à%%%Š&C&$‰%à%L&%G%Y% %S%Û& &[%«&¡& )º@–Ká7ZR¦oÄPÅËÇÿÏÊÿÿwËÿÍÌÿÿôÍÿÿ¼ÍÿÿõÎÿÿ5ÎÿÿöÎÿÍÏÿÏÿÿ>Ðÿÿ6Ïÿÿ(ÌÿþpþÉüÝü&ýPýýùü®ü–ý`üŒü%üEüµýÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿÿvÿ…þ?þ-(þ¶-1.ÿÂ-þ—0ÿm3ÿ¦HV?_?w:ë5¥1›/ó/.‘,á.Í*æ:<j9¦BFiHIKhLvNÆUTÓYì]Îf^c#d€dd[ù[MT>L“OMKJ¸P=M¼IPFÆBæ?üF3ElZ‘jòUzAÃA­BA³EÄI¹EvF G„GW­UƒD§F§?ä?ŒFÜN ®l\gÒ\¤=« ÊÁqqò$`d ‘.â¹#5 a*þ&þž  i  ? Ù.ÖAWOùTËxXw”}U‰ z M} O| + / ‡‘ µ‚ Û‹ £ƒ d‘ -’ 3„ ¦sWV>UºNÍMwLgMP#NlLèFOãc€:n'pgvtjw£i^h5a_[\TIKÌAårÿ AŽýîŠþ ç{þ ZO Ì@ ^;V9œ=I@yC+P h5 ›$ áÖ” Ä! q I# M" Û R ] m" °% & ½& ñ, 2 Å: œ@ wA´FPG!I\Eð> ï; ¿: Ö7 Ã2 Œ4 L1 ¯, ž( Ö% –! +$ % # Ù& (% Þ& :' æ+ ˆ.0(Z. ì12û2ü;H8è:ÎFDMˆ^ q…þ äþ î–þ )šÿ Цÿ ×­þ ¡§þ d¥þ©¨þ ©ý *¢þ þ ”ý v†þ í†þ ŸŽþ fþ ç”þ …œý ¥¦ý ±ü иû ´µü ñü T«ü %®ü Ö«ü —£ü ­ý ˆþšzÿËzÿ!mæa}þ›uÿî|ÿ„vÿ×`oV|`žbÈTàV Ýgþ óyýÞ‚ÿ ~ Šüü“ûrŒü 7…ý Tý Ì£üŒŸü o–ý ¯ˆÿï|¸ çšþ ²œ¿‹ ©³ÿ á°ÿ ÿ”þúý „þ §ü ¨û é•û½€ý jeþ ¯Œü ~ý yý ‰rýèaÿ oý^gþ{þ —šü ¥ e} £w KŒ`¦ýOý ‹RåRÿwTÿ–PÁ6 ]Kãh Xg– Ñ  ‘{|¶C¯´>6þ |!t! Ó$ Å  (" Ë Ó   ¢ 9# ! Ú!• ¯5  ›( ó% ã". 2 ù, )&O% ˜$ ©& ¥& £$ 6$ ë& $ #& ~* á3 ÝN _þ «fþ èmþ è^ý ¯oþ …þLrý ¥Xû þmý yþdü?aüŒpý™vþ uþUxþVsý zý `„ýàjþnþ ‘ƒþ ¨þÀpý zþqþdþ º^þ øRÿ ‡Cÿ +Bÿ ?? xC æGÿ ªNÿ ™TþùQÿÇSþ)TÿMüyKü Oü²TüÐHû ÏQú oWù /Où)Kù ØXù 9Nükû ²~ý bqû Aˆþ é‹ý ]{û §oú VCö—UúˆA÷#O÷#Rø+K÷ìGù û9ùß6û èTý Vý Lû Eû JUû ºrý ±iý Òfý âLü£\ý faþ ÕHü «Fþ ¿3þ 0 Ó! @%)$k$0#9#{#`#¬#Æ#»#s#†#l&h#Z#Ì$k%$-$&$0#Ü$9$O$í&%Ø$Ð$#$I$˜#×$$ #ˆ$$%`%Ó&“&¤%r$­%j%‘&$$`%8%¸&1%ª%Ü&Ÿ%Ú%¢&ä)Ö;•MY8ÂO®¨RÄ Åÿ¾Çÿ<Êÿ9Ìÿÿ~ÍÿÿuÍÿÃÎÿÿ5Îÿÿ¶Îÿÿ½ÎÿÿïÎÿÿòÏÿÿ|Ðÿÿ4Îÿÿ¢ËÿÿÈpþ˜ü.ü-üwüýqüüü¯ü»ü‘üüÕü=Pÿÿ?ÿÿ?ÿÿ?ÿÿÿfÿŒþný/ý¯*þ0ÿ¡2ÿü1¹1ÿ­GŠ@ß>ö<$7‘2Ï/R/™->..».4g9Ø:]>ÂCDGdJ%MoL¶P™Q V¨XkY`úbêa4_ì_ÈUhR‚L¤LwM—S 8U L:IˆF“ANE¿E¶Fm]]c IaLÚB²>ÀAŸCòDtDEŠJ¦N¶OùBÅ=¡?tA¸FÜDµV0K„<Ž-óüªK,øÓ‡Vü n  ÷¢  Hx # Ì   á  <š •GI€PNuâ{Š… ì‚ å{ z Õ„ ÿ“ÿ 7 È ‡ î‰ , iš Oš ˆ‡R dÒMZKwJJP’QPJKDTiNyÙ};}ÀvÆ{oËoDY•[^gO©C²Fwþi‚þˆþ aþqNjRÿ wC ¨8S:ù>>êJ ¿9 V%  × Ñ" œ# l$ k! œ" Ç" S% ƒ$ °# :% F+ ‹*02 79 T= Å?¸A öC ¤A?ð: Š: j8 F5 Š3Ð0-à,( & ~( ' µ, Q, $+ 5* Ï.Ñ0A2ù2!0³2 58È6Ó?ÝA4H…JÝOÐ] €þ ¬šþ K©þ 2©ÿ ”¯þ 5´þ @·ý á´ý Ÿ§ý |™þ ˜þ`þ ]Œþ ɉþ Õþ œý þ«ü ,°ü _²ü éµü V¯ü Ú¬ü â«üqýí™ý ÿ˜ý Ó›ý W”ý oˆþ€{ÿÆxÿ#zÿÛuÿüƒþ{þ>wÿ\þ ™sþ *nÿ ­~þ úxþ vmþì] VQ W @eþ mý ºzý…ü"‡üš€ýŠ„ý Èyþ uþ )‡ý äŽý ¥œþ ªÿ Zxˆ|Éÿ F›µÿ ­ºÿ ƶþ X¹ý ¢¨þ–þ‚«ü «ü V†þ Yo1™ü /‰ü}Šü n”üLqþ Kyü °jýðYÿ „ü! ¦“žþ¹˜§«ü¸xþ x^ÿ&Vÿ4Xÿ ¦Y äZ À8 t, ­& " Ë ÑΧO€wéýÁݯo! E £ 9½ Ó ˜ q ñ €  ¯!–" r% !g!L' }# " –' ñ$Ý! ®! ù" S# Å$ £.a7%! }" " r# ™% H' ã: AMÿ óVÿW_ÿ RgÿŒuþá{ý¶sý›þ‡þVù®Gøgú mŽþIŒþŠþŠý ¿sý ‡„þ‹Tü ¦=ù ;sþ uþËbüEuþÊlþvcÿZÿ mWÿªN 0F !A …B î@ ›@ –E VIÿ ®Jÿ ÈMÿ UOÿ Oÿ ‡Vþ üYþ ±Xþ ¹_þ ¦]þ ‹Sý !Oü "Hû |Fû äRû É^ü9mþçjþSlü ßO÷cUøƒgû bú ¦Tø ö]ú `û ÓI÷YJú ÃFøR>ú Ìgý ÿwþ ƒxý àrý lhý ë\ü Ueü Š € xƒ O”ÿ 4™ÿ ­‹ £Œ Š ¥… €œÿ àŸÿ š• šÿ ¤‚ Zh=bèZN÷MÜHãGVEòDXÚmjwˆp€øƒ¨h#f|_KUºP8Fu` %kÿtþ™Q—? Sÿ raÿ H Ö= P<;>A@M O8 % ™$ Ù# Ž( ( & Ü) ( % ²' P% "" J% f( Ü- . ¸/ ¼1 2 ý5 n8 : „: < Ž: Î8 Ñ9 45 4 4 ¯32Ï/ò-û* ' î)ð+ ‹/A- ø. i- ï-¸.¨4™7é5 í5Á=k>æ?ÎJ.H/LLOŽLë\ Žþ îŸþ  þ i þ p¢þ ¨þ •¬ý µ©þ €¤ý xþ C–þ Œþ Kˆþ ‡þ £Žþ G™ý Û£ý ¤¯ü é´ü Z¶ü /¸ü ¶»ü %¸ü R¬ü lŸý ˆšý [ŽþˆþÈwÿ}tÿ°rÿ±xÿ¶xÿÕ†þzÿ‚þ zþ yÿ uþ òpþ pfþ }eÿ Ï]ÿ qM ÉH ›Vÿ /bþ Ûpý3sý%cÿ \rþ E~ý$‚ýOyþ çqÿ Mwþ ÷‰þ S”þ K©ý "˜þ ¬›Dºÿ œ°ÿýŒÿ´”ÿ ˜þ ç§ý c¼ü åªý s }Ÿþ ˜¡ü pÿ`ü |þ Syý äˆü1^ÿ d€ýÍwâu+¥ÿ…¤ýæ™ý}†ý ó]ÿ{U¤D Ù?DA Þ@ Í= W; K9 ê: G: v8 Þ7 v5 ð9 x1 Þ/ r. 4'¿ Ä–¶ƒ!!…-ž Q Óµ‚% 3. ó- Ï, g%  q!_!v    º" ÿ' w/d: ô<  $ + ¿ ø   °# n1 E<CGRÿ¥Zÿ™XüÿFû î^ü %‡þ™ý Ž|ü òŽþ šŸÿ Ÿ žÿ A¦þ !þ þ âqüo8ú‚sþ sþTü ¶iÿ ‚`ÿ Yÿ .V AM ÈH (D ×C ²B §4 ’C –Oÿ ?Rÿ 0Tÿ rTÿ ±N ÝM×N $O 2O ËNÿ 3Eÿ ž:ÿ —7þ ~@ÿ Fÿ Kÿ ¬Vÿ «\þ 2Uý!Sü …Sû ýTú òXû Uú €Pú ÍNú SNú eHú çPû8Vü|Wü sGû âiþ kþ FZý Oú ¦Xü “2úWAú Nü ¡Iû fRü 'ûüòÿßý/4þ §+ÿ a%U#n#á$ê$ß$%$ê#Ø#ñ"^!ç"A#Ñ$ #ÿ$5$E$Í$¥$#ê$&$Ç$X$$Ö%$U#Z#Ü$f$&$É%Q%%¾%Ò%$1$ú&8$â$ã$é%#%ª& &+'&Œ&f'a*R=/N“8ÿ'RŽ­ .ÄIÄ’ÅPÆŽÉÂÌÿùÎÿFÎÿÿ5ÎÿFÎÿ1ÎÿÇÏÿ(Ïÿÿ÷Ðÿÿ>ÏÿÿÌþÿ8oþÒü¥ü‹ü—üÍüîüüýügüŽü¶üÎüÚüÝþ§ÿÿ?ÿÿ?ÿÿ?ÿÿþ>þý¯ýt-ÿE3ÿ„7ÿ&-ÿA-ÿ43YG›?x@ï>C:4w/û.g/ö-Î/}/³,´0o9^6«<m>­?7G»GK@N«O$KQL'LÄR`NÌN$TƒR—L:G¢JQORÈLãJ4IGeC¢BÀBÓGˆP{XÏX X¼LYCûAí=ÅAõ@u=ÈGÿWÛJO<±6š66V/ý2²0†.‘4/3? wÑ-oA &  G FSÑL¨ j !C ƒVz|þçËj¢! êH¾D8?¿k(€Ä€ ,ƒ Y‰ –ÿç™ÿ Ñ—ÿ +Š è‰ ­„ :| Š *‰ ¦‰ • H P| sy ¸hŽNSM JóFIEšF_EÕGk]Üfr%ul‹¾vÇ…Œni^§UîSÁLñSqƒþjþîfþú20‡8 ~Uÿ 5T`H ê<Ö=Ô?·P ƒF ¦; ¢D G 1J ¹K :T b Q áO VK Ü; ¡: ,7 Y6 c3 2 0 ¬1 |2 í4 Z1 à2 a6 J7 q8 {7 }5 82 ´6 3é2¼01y.",Ð. Ó.è.±.0ö322Þ5.7ƒ8L8 f8B< Ç?0AIGBHLJRóS±RÃ`y–þ þ Ýþ 8ÿ ƒœþ ]šþ ¥–þ ›™þ WŸý ~¤ý ï¤ý ¦ ý •þ J‹þ ‰þ ‡þ —…þ ””ý o£ý &ªý Š®ü º­ý ªý O§ý ¥ü ýý ‘ý 6„þ¬zÿrÿ:sÿ}}ÿþ„ý /yþÿ‚þyþ mÿqÿ Coÿ ‹hÿ …aÿ _ÿ ÏYÿ nG ™+ !< ïVÿ ˜aþ i`þ ¬gþ +hþ ·vý ypþ _{þ Luþ +uþ òd Mþ œý i§ý y³þ ó·þ ü§ÿ˜þ|þm±ý£½ü yý 3† 8±ü Ìý ½–ý ‘ý W„þ+ü  i? l? ? •B :G ±M Vÿ i\ÿ –bÿ ¢f kÿ Mrÿ 8tÿ /wÿtEfÐSˆD 4 ù* F% L% Ú#$ s  Y!7!   Áõ ð   :  + ä û ƒ! F) Ð3A1 è5 )6 1  ! - : “ À ó y Æ+ 5AäHÿ5GÿëMÿ­Pÿ”Tþ 5dþ {þ"ýò›ý 0›þ ˦þ ”¨ÿ X«ÿ é¤þ ¿Šþ …þ ´hü L5ùìhþ …kÿYü ê]ÿ \þ¦Vÿ àP ŒL ã? ,? ¹C WE ;È/ÝAP Zÿ 0\ÿ ;Y hZ HY ®SkTbR _R N ˜G Ü9ÿ ë? 8 Ñ: < ÕA RB ×Bÿ äHÿ ãPÿ Qÿ ÆRÿ QOÿIMÿ_Kþ¹Lÿ’PÍUÿ V Xþ ¸UþtPý ~9ûç?û dMý XHý¸Dü qGü {>ü ;ü ÷6ü ±3þ „9ÿ E9 ¶( F#Ð$W$K$ž$€%Š% $¥%$ #˜"î"m#’#L$ $ä$î$l%Õ$â$ê$š%($Ò$%$…$%@$Ç#£"’"ö#`#ò$á$F$&$â$‘$p$/%J$é$J$ó%g$Ü%ƒ%Î&M&%º&¿)b<âM:ÔX¼­ ýÄÉÄ ÄÑÆÉ…Ëÿ±Íÿÿ7ÍÿÿvÍÿqÍÿzÎÿ±Ïÿ ÏÿðÏÿñÎÿÿâËÿþÌoþSý`ý˜ü6üîüæüžý‰üÜü£üüTüüÖý¼ÿÿÿ?ÿ8ÿÿ?ÿÿªþÁýî%ý…-ÿ/ÿë-ÿÚ/ÿ/ÿƒ2ÿ>FA^?´=¾<Ž7=1Z.Ö.ÿ1Q/†1›.M+f-(8Ú:ø9=2=Ÿ?*AvHíNtJqQ=JŠO›MÈPNƒI³I/D¸F3JÀMhHÈGEÛCL@à?ü@cDF0JÒGüDRJ1E×?;¬9ÿ<=’?ÈD=j6¿6Q3¦,†%„&1s=Z=2% ‰ùÞ± èÑ Ý 1,@óp › N   h™ æç0<–â¿éõ $DòG{PGgMr1w - n‹ÿ 2‚㉠މ ؈ éz ƒz „z …€ j ó| ½† ’ÿ %Š õ„ Üm;MÂHÅFFÁEÛDg]VÊQ—hàmAz|yDp&p€[gSeOÎQ^aW‡ÿ d€ Rpÿ 7°<°E¤QF_•Q:KÇNJQ¦ab cW çY ðZ BX £U ]O «K zD xB €A < -; Û9 Ÿ8 ö5 ›6 1 ³1 g/ æ. ©0 - K. Ž/ J/ Â2 G0 Ê4 p4 ƒ4%23Ù4=0€-ñ, ï/Ô0—.,3=466ÿ:a>oABGCõF1HâJ^M¨PlS/VçWjyÿ ¤ý ûšþ ü¬þ ¯¶þ U³ý nªý ¢—þ ™þ –þ ]—þ Äžý ¡ý ¦¢ý Œ¡ý јþ þ N~ÿ C€þ ¯‰þ Uý »“ý %þ N‘þ Ë‘þ Ñ‘ý ôý ;‡þ •‚þ ‚þ³~ÿŽzÿÜ~þðþ¢þ°…þ }þ£{ý ºiÿ mÿ oÿ Önþ æhþ ¥^þ 6\ÿ …M æ0 $«¾3 M Ë[þ *dþ ^ÿ Ç_ÿ Ïfÿ Dmþ s}þý ó‰ý ¨oÿ §’þ §þ  þ “šþ 8¬ý m´ý ™¸ý1Àý  ɫý ½¡ü jŒý 8¤ü %…þg¡ý Ú†þ Ù—ý-©û u„ O‹ Œ `” ”šü ä ýí†þ …M ³D Z=? ¾; š5Ñ7 E7 Ø6 77 75 i5 ¾9 r= „B G 6N ÑVØ_ÿ kb Çlÿ 5sÿ ã}ÿ aŽþ ;•þ ý†ë„ÿ 4 Åp Ôm š^ «W æL Ÿ= l1 ) â' l' o# À u k ú c! ! ®# ~$ -= Bú6=7 )5 ­/ =) ›! ¼  ° ° ý Ç 3ç# k; Nÿ™`þôeþWYÿURÿ ÝXÿbþ)qþÞ~ý q„ýþˆþÇýüƒþ ú}ÿ ‡pý ¢vþÈ`ý …+ûœRþ D[ÿIþ ÏL ÙQ ƒQÿ Oÿ #:ÿ |Ä |D H ­1 Ÿ' ´# Ò@ O [Dÿ •Pÿ ¬Zÿ ñ\ÿ ñ\ [ d] \ V Bþ cK^O M M oK *J VE ü3ÿ L@ÿ !Eÿ !Dÿ ¢BÿÐ=þ ¾Bþ8AÿnBG·F3E¢EP>Ç>r< Û>ÿ <>ÿ 1@ÿ i?ÿ â@ÿ GAþ ï@ÿ Ó7 t. Î) V$ æ%%M%g%%Ž$Ñ%$$$Œ#ê#²"§"é# #Y$O$y$Ú%#%œ%N%¦%æ&%«%Ó&Q%‰%$N# $#"¥"|$'#Ÿ"ý#è#`#·"Ê$µ$º$w$¨%a$é%S&'&%&+&B*)9QK[5ÿæS*° *ÅIÄJÅJƈÊÿ´ËÿºÌÿðÍÿÿÍÿñÎÿyÎÉÎÿðÏÏÁÎÿÿZÊÿþÂoþ ýAüÒüuüü/üü†ü}üdü»ü«ü üÒüSþÔÿÞÿÿ?ÿÿÿDþþýl&ÿ?.þ•0ÿ•.þ÷0ÿ/1 FA{Au?[<B5l4¼0Ž.‘-”2v3J.–+ñ,8.›;> <p:r<e<M@FHJóGWHlG G“EßE°D)AÍCùDùFKDÎC]>ñ>=n>®?£@èG˜I™LmGvF”DIFÁF“B.Ao>¤9¬7ß;ß8R/H'*$ Û& &, Ï7 :7 å0 ê [ À×ó0= B a zï'Úy;(/ ä I e  · JC „vàÓñ D?=Lº]B]Pmõs;mÅ| z {€ Œÿé‰ „ x M|!r Äq \y ö§‡ ’ Kÿ 4‰ÿ 0…ÿ èx=P-DÛI9G×J`b\¶_ d kéyÝ|.l£WKP;P0NÙOh OÿŠÿ Îf ‡58´<JA6UƒIüD0C?F¥Yÿ 1S ï> ‡> ~> šC > Ò6 6 h4 y3 …4 L3 ú5 1 X1 H1 K2 ý1 E. * ‚' %$ Y# Z! V Ô  ¡ ;!â$ # ( Ð. o/¼33©3L/à2l1—5q8é9<=Ù=h@„B DFöGØITL÷NëT XX•YZþ j­ý ‰¤þ Ô¯þ ½þ †¼þ ·ý Eªý ™¡ý -šý }™ý ¬™ý éý ¡ý £ý ¢ý Þ ý iý š”ý ü‹þ fŠþ '‰þ æþ ^þ Šþ ‚Šþ ‹ý z‹þ †ˆþ ™„þ´†þ ˆþšŠþE†þ߆þê‡þ ‰ýªxþ«kÿÃdÿ"aÿ)`ÿ`dÿ W`ÿ r\ÿ 4Q \: é  ‘f ħ= êOÿ ýYÿ bþ Xfþ Ý_ÿ WU Žfÿ Êtþ éƒý =‹ýw—ý?•þ Y…þ 7„þ eƒÿ ºý ׺ü ÿþ ʵû ;ý -•ý Бþ ›ýý¨ý Ôý¸´ý A®ý ‡œN…¥’ 6—ü›•ý H†þ X >û9V3È5 ý1 *. É0 / . Ø1 s/ û. ý/ D1 Î4 d6 X9 ^; ¡? ”B §E *H ‡M áT óZ %X Z Èa í\ ê_ å\ š] [ eX DW yO ƒJ @ w8 Ã3 ¯' #& & ¤# 2" þ# é$ u! R8ö2 "- |( G# ³  Í! y  F ò à ­! <) ]3  MmþÚ|þTþGiþ ö^þ zWÿ @Yþ ùbþldþòbÿ ¬eþ èaþ ùWþ ‹fþ ‚`þ 3ý E<þ Kÿ »;þ æD4Mÿ "G ÆI Ã? »+¨1 ”F ´H ¨1ÿ l"þ ;1 ëNÿ rHÿ Ê'û 1=ý¡S Ô]ÿ Y\ÿ ^]ÿ K]ÿ Sÿ Iþ MVÿ NVÿ ­,þ :1 ÄQ ÉO íO ÂD =CJ ¿M Pÿ 7Tÿ ŽUÿ ÓT ŠTÊTUCVÿTÿËUþ’?C@Œ?:Þ;µ>³> AFD8I;FìFÝISJ—G8DòAD:‰6‡45i1- ,·+ “+ )0 Æ0 ). ü › ÷޾ nq "¬&; ‰ÁH¹é['ðëØÇ ¶àåö c ŸêÌ|e e9ŸLîi “m1k¶p|oùx ¼v € ‚ÿ}ƒDÓ} Zu ôu »u v z7… ˜ ˆ 9‰ ‹ÿ å…ÿ òÿòqcr÷`#WÎaÁYUc]cNftnwýih_Ëg Ý^!CVÚN!p ‘ÿ €‡ýÿL v,139)HûD´?a?qAïR O? 2221 &/ o/ 5- k1 a- €* * –, ¯0 ä0 ^. “/ / û6 m9 2 , R' ,# ^" ˜  u Z"Ÿ™¬+×$ H# å+ Q0 é0[2µ6f8o<ÓB€ArD:BÜJ"IåP²Q`T•YÿâWÿñXGYHVæU`V«yþ í«ü ÷©ý =¯þ \ºþ Œ»þ ·ý qµý ­ý Í ý •þ ‡—ý x–ý ô—ý ­šý jœý àý \šý n–ý >Žþ ˜þ ŽŒþ Šþ œþ Åþ Šþ ™‹þ O‰þ ܆þð‚ÿ@‚þý„þ¨‰þ¬Žþ\þk…þo†ý y…ý õpþ}_[´Y‰aÿ Ä^ÿ Î[ÿ ¢Q ÿF !- u+ (& Ü# 4 o$ Ö< IQ ÍYÿ Ë^þ  œB >F ¦M O œQ O L PM O ¡S ÌTÿ ðM @ "6 "+ $ G" /! ~% ß!  C Ò " \  ü Q ; ?  × ¶   ¦& Û* C+ —2 ñN °rÿ÷ÿ ̘þ aÿ Cxÿ Çcÿ šRÿ µPÿ ZOÿ JQÿ 4Rÿ ÌGþ H o9ÿ ¦)ÿ ÇF 5þ ÏCÿ Nÿ GLÿ QLÿ ¥Jÿ ²Mÿ 'Lÿ ¹N CQÿ WOÿ Ÿ2ÿ „7ý ´Lþ ™Xþ °Pþ ÔZþ .^ÿ Èbþ ±bþ,dþ `þ øXþ ëXÿ ‚Tÿ ˆ/ý%&ý -; ÕOÿ xAÿ ˜: ‰? ŠD oA îB 4D ˜D }; 9 ZC ¡Gÿ ·Fÿ 2Fÿ 9C LA > *7 2 , C) —( ƒ( -' })!&,$f$Ò$$¦&T%C%$Ñ%È$è$à%/#ç&S#³#"®$§$#$#Ô$£$o$á%#$N%$þ%Ý&„%Ž%e$!Äæ! „#»#Û$#$#$Ù%$â"À"é$>$e#â$3%Z&Œ&L&%&%C%q(>+R;ÃJª5ãVÖ« ë·k¶·¸e¹œºš»¼ÿ_½P½ÿÞ¾ÿ¾ÿÖ¾ÿß¾ÿÖ¾ÿ ¹ÿþ+nÿÿóüEüÞüSüþýÊüSü…üÂüüPüÎüŒüLüáü‘ý ÿ8ÿÿÿDþ´þ6ýÛ(þI/þ'/þw/ÿc-ÿE1hEKB¡BÃ?7:Æ5·4™3b3j2õ1A2,1O/w.·*ë*+7!>g;×=ê=·<«:ã<â@ü?Ù@@cDzBßAãBðC´AÀD¡A“==??á=ÂAûAÄFpGCÚB~D÷BOCù=h3"/Þ0î-j* Ë. . ¨#  ê Õ G ÿ I< … g Y Ð#µ(Î! 0 Ï©ñäXåæ»Û…ß!*þÕË9P ‚ B â ,êFyY¼d6]ómNbŠu pƒ { n€!z ;z yy ¹wxrv >z£w y}=} ¸„ @‡ÿ úŽÿ *ÿ ȉÿ á„ÿ '‚ÿ ƒÿ ÀevmY_cZ9deoe€ap]‘aS¥RjJ@€ÿ 1‰ÿ ­ƒþ‹6Õ3 9ø?ÒEƒINFÄFPMwSùFºCÇBh?Z=,@ @ fE D Ò?{B B‹BIH”HaGiCºD¸Iœü·‰ýV’ý Õˆþ ”ü ¸…þ Üœý H|ß³ý µ.ŠPv×”?©ü .Yÿ >8 õ7 á4 Ô4Z2 C0 ß00U- e( '( ™+.;& á& ' •) Þ*b,7/ f1 7 9 ì@ ~@ú<ñB%E=MU©Zb\ uW VM qA ; ª: N8 ð: ë> ‡D K O ìR –Tÿ ¶Uÿ òU M Á< X, +! w ·  >! Å  ¢  íü ¨ ‹ : L • Ô  Ê' â+ ' E& 3( B3 \D ,Z Gx íÿ /˜þ â„þ tþ €jþ IZÿ KOÿ ¨FüBD5=14=4F ÎJÿ 6Qþ ±Tþ-Rÿ Sÿ RSÿ ˆUÿ ÈLÿ üì6ü 1[ÿ ‚fÿ gÿ ‘gÿ hÿ &kÿ —kþlhþZhþ_Zý icþ ™Vÿ M!ý Ø<þÿTÿ Tÿ ÅDþ ¡I ‡H ÎB ò.ÿ «'ÿ “,ÿ û6 ÷/). â6 4 —1 Ð- °, y( ó$ ©# ÿ& b& ( Ö* o. A0Õ/É*Ÿ&–%l%%%Ý$Õ#P$%Q%a$$#!¿"C ï!.""¨#'$"$A$#Ý#œ$<$N#^$Í$H$º$d"Ã!vËó!¿"É Ø"#n${%*%"$¼$ô%u%m$â$”% %Ë%Ë&Ž&„%¨%²), ;ÞKº;QV”­ ]¸T·Ô¹’¹\ºº“ºS»»Ñ½ÿ½½‘¾ÿ_¾ÿž½ÿ·ÿþ«pÿÿ%ü›üÌü ü©üülüîüÔüü$üLüüÿüÔüœýÿÿÿ?ÿXÿ|ÿIÿ ý¹*þ…/ÿ›.ÿû/ÿM/ÿ*0ÿîG¾DCÛAj<ê8^6ª6•4ª2µ3+/²0)-Î.¶,Š(r) ƒ5µ; C !7A ? :i: Õ<¿= ÜB »B CÏE ÈF sDD ÑEAwB@½@ìC§CDDI¾K7JD¿AùClDfA²9ì1\. Å3:2J0 8* ¸ W s À Ö } R ¬ <#ñ# ´$ _# %4$#'+' | Ë °?Ôàâàj,èNžÂªòü ¤Ô O ˆ Ÿ & ÆBÓJBYxMÌ\ÐfÈq Uq gu †v Œ| æf‚H}¢‚L–‚‚ÿµ~ß|ï{ ë€[… Šÿ <Žÿ ™ÿ‰ŒÿÉ…ÿ ïg¸]0bRe_Hb“n…hÏfë]fT‹VßMŽþ ®…ÿ ¬ƒþ .C+ã1õ4u8_;=;]9kA Z; h2 è3 Ý4 –/ û0 93 ­4 ¨8 ÿ5 «8 “4 k7 ^9(A oAûFwF`E#BÆCŸECóB¯A³>Ò:é6å4 0 K/ D) " ó'^ ‚ b v& ³& Q6 ÏHúJëLÛO÷R)QÛdÿmÿªuþ,ü }ý d^ÿ!XT%R ª; ù8 b7 i: : –A àH R ƒ[ gÿ ^cÿ s^ÿ ªO î. o Å 8 à z 9¾ûó py % ±)é+$$ J% |% q( ¢) ©' x( @5 ­L Wa l ®sþ ºmÿ ‚eþ ôaÿ Š^ÿ dUÿ ·FŠ>Ú4Æ0^5z;ÈC ¨D ¹H šNÿ ¹Sÿ ZVÿ óYÿ vTÿ ]ÿ Žeÿ ðf Îk fm bq cp ân ›kÿ sbþ nXþ ™aþ «Gý 3ý ÌJþ«Zþ YUþ §Jþ ±Kÿ  Iÿ ¯B â,ÿ ó. Œ. ‹1 Q, Ä* ¹' [( ÷- Œ) ë% —% 4% K& æ! ³& & ¯* (- ˜3»6ô6b9é35.%'`%µ%[%ä%'$g$(#­#~#$ $í$"†"¦ Å"Ê"o"ë$$##!"F#m# #b$W#í#*"u"à". Ï""œ!Ú" "^%|'ø%t$µ$z%¾$ê%d%%“%%S&Ö&ü&œ&Ê(*Ð:J 9ÉWS¬ \¸›·d¸œ¹\¹Õ»Zºšºœ»¼Z½!½š½Ù¾ÿ_½ÿË·ÿþ3nÿÿuü<ü}ü{üuüküaüìüÊüLü!ü üü5ü›ü\ý¤ÿÿ?ÿÿ}ÿŒÿé!þø&þ²/ÿH5þ_0ÿ²3!4G¨FxEBª=Ý:Ð85)5·4f3ì4%2ˆ0›-Ý,Ö*·*c,Ä3Ä;•;=¼@ ? R> ²8 í7 O> Á? A WA Ÿ=©< <k;N>”AyC€EdG‚HhD¬C Aü@8> BM>ê. ÷ è Ñ Â J  k Æý å ì! ä)) ^-A+Ø) *1% E&ý(‡+Â% B  ³ S ³÷Þ«æÚ ;}t%êÉ”*ã) - ð     –+€HjGH¡LeQee ¡o s Ât Ìx ´v qƒÿ è„ÿ~Šÿ®ˆÿìÿ £†ÿ 9…ÿurÿk rCx{t ¹ý ¶ý °¶þl·ý:½ý L¹ü ý¼ü q¹ý ½ü .¼ü `¼ü »ü ºü ¸ü â¸ü ]µü 7¢ý Ü”ý ¯Žþ †þa…þá…þgÿZz }ÿ¡‚ÿ•†ÿ¡‹ÿ2’ÿËþõƒÿxÿ(Œý l]ŠU]SàY æY e]ÿ rV ãGý( Œ ÔKÉL O& e" Ÿ"  Î% > TÏ^ e Lj +h sþ :yþ^†ý!…ý‹xýàwþ ¥ŠýÕšü ý¥û ø•ý z›ÿ Ä{êu £²¸ý¤°ý ¢= ­) Ç' §% ×$ $ ÿ G  ¶ è>"?´eßåv q â " 9$ >$ Ð$ p& ²( (* [- f0 g4 »1 = @< 7 ¯7 != t< ~=2<y8˜: 79 ¨: ®9 ¾: D: EA [O ^ÿ ±_ÿ |W ÛR YC $ L E I],Uçîé°`ÿ% -.2+Ê( Š( .& å( è) n& J# E# „# x% Â0 ]6 íE ÷T ¿]ÿ ¯]ÿ i_ÿ Y]ÿ Yÿ ãUÿ MºN IƒE8D–C’Cÿ6@ÿ 2B F $H ¨O ¨T T ðZ Ô_ÿ ´bÿ ñdÿ üdÿ ¶\ÿ áQþ õ[ÿ \Mþ ‰9ý LAþ Mþ õJþ ŸAþ /Lþ 9Iÿ Eÿ l@ ? ^7 ›ÿ?, Œ/ "+ <% )$ I% Ó% Å% ' - î/ h3 Ÿ5 N4 Õ45s:s@bDÔAîAô>E7æ/R(¾&5& %_$ %#Ž#p$2$!$r#g"ý!u"N!“!ì"&#(#é#Ç"”" ¾"Ú!Þ"«!ž#ë²  Ò"·"ÿ#$«%“%E%ª%i$Å%‡%®%“%Ê& %I%Y& &L&œ&è'¨*ß:ÝJÛ;úZL« "¸\·¥¸Û¹¤ºä»›»œ»S»’¼ÿÞ½ÿ–¾ÿ¾ÿ—¾ÿ•½ÿµÿþñnÿÿnüüËü;üáü‰ü<ü¦üÕü•üœü]üUüÃüÌüý4ÿÿ?ÿÿ_ÿ…ÿ}ÿ›þ)$þ\2ÿ–9¢0ÿ+2ÿ46¡EüGÉHrCí>Ô:þ65Ð4ë3q2L4ž5®3»3Í-û+ç*£' Á*\-©3/2ù487“; >  @ ÿA !™> ¥< {= x< ¢= ‰;˜7o5~:=À@?Ó;:;&9e9¶: &4 É l[lÊ’ » É ñ% ¨*·.H2ö0¦.4.®.'*‰+ä-}.¿.­+Ÿ' Ü#   & m  Ù ®=öœÒ‡Æ!'ØÆƒ—¾ ô" ±% É) ­5}L}JAFÃMöN%PólQr!q Dv¥w}}–ÿJÿÀŽÿ‘ÿJÿño rn ¼o7m JY rX ÿk e ªiÕjÊj X|Q_òkda#pÅgËkÿjÐhŸp ÄZ¦T…I„„þÔ‰ý»W Ó  Í%:%$'ª.Ê0&/ .) ¨*· ‰ d õ! ¢& T' , €3 U6 6 õ5 12 ‹2 Ü0 `= _B ŒG¯i QNRO uP zB ×; @ù=;ò>Ì; §6 8 7 ¸6 ¶6 ^2 |1 Ñ5,/ Ð) È# ¡# «' Ü( –; àfÿ«kÿ*tþ´pÿÇjÿ‚eÿ^ÿKTÿ Qÿ =OfNüJTHÈF™Kp~ÿʬý ¹­ý r¬ý >¯ý ©µý N¶ý è½þ€¾ý ^¼ý C½ü 5»ü ³¹ü ü»ü Yºü ·ü Pµü `°ü zªý d¥ý §™ý tþ ȉþ œ‡þ ß‚þãÿ‰{Éÿô‚ÿl‡ÿX‹ÿÄŽÿ••þ©Žþ!xÏxÿk‡þ ˜^.TöW›[sY ¥\ ’Kk5T S õ_bò*   … Õ ä þ" …: ÚU >^ ÷WªZ8b ñ}þ yþÁuþwþ ýŠ‹üî‘üt¥ü Ï ØŒ `ªþ³þn Ð&A¤ƒ2! Ò# O" ã! ‰  © °" 3 Œw mM<)…crÀNx<þ B! i" n$ <% ¨( * ã, ¯- 1/ Û/ µ7P: s5à1 ³6 Œ8 Z9Z7Ã3¶9 Æ; @ QD G ¸F ÉE “F †+ Q 1íeü"¤B¦†" š* 3/ ], =*+ ^) è* Ó+ !) 1) /( n) c( . ) ) j/ 2# ùF)Ô6 5@ ?F dP )P [M ¼M ¨Q Tÿ nVÿ áQ bOÿ ·Oÿ ÞHÿ ‘Cþ ûDÿ bBÿ cCÿ éBÿ ¶C BF Eÿ ©>ÿ ÉC …D :ÿ@™@ Õ7ÿ ¯/þ rBÿ ,B = != ï: 6 Ê1 ¦. ¼) 2& b% f% *% ù) ë1 ¥5 Ç6 Ç9³: =¨? í>‘?TA‰D J…RVTàPÏIçAì8D/ß* %·#ƒ#¶#>#w#)$,$ #±"!#•"3 4 ] j"K#Z#5#¦$¨#¿$2",#!E Q{ss ¨!Þ#1#ñ$Í%*$¼%Z%4%.%l%¤%r&%ˆ%%‡&°&¼&ˆ(M(ˆ*À< LŠ:‰Y­ ¹#¸c¹b¹Ûº£»b»Z»’¼ ¼ÿÞ½ÿ]½ÿÞ¾ÿ^¾ÿ¤½ÿI´þBnÿÿ&ü•üÛüÕý¨übü–üfüÝüTüÍüÝüDü„üÚü^ý¤ÿÿ?ÿÿgÿ¨ÿ£ÿ’þ9%þu-þ’6þ?/ÿ¨.ÿ´4 H²EâH¥Bd<ž8^6ß3e2(2¨3.3s2Ã2L1Ø/r/Y.à.1/Á+Õ(G' Ä) 1œ8Ñ>K?–>A=s;y<":Z/Ù) ô" -$ =( %) ( ª4 Ö6 _6 š6 / ) § 7 2,  Í r ‡& m) D,©321¶2í0W2h2Ë+H*4'<,5,)F,é/-v( ä# ÿ" á  ®  $  c £ ð !réËÓ£ßê\u¿Ä b ô  ø% ½-‚3l2<¨D*E˜H«M Lêi.„mt õr øv © œ† Ñ… ƒßÿ:oyil ˆrpf .V óRœQÔR$X )` ?_ nOUòYhÎ^Ñnvm}r ûpÖlúp?geV^Lv|þ³…ý¼] ù )A#w&ƒ*V-—- f. n.uÛü¢t <  ¢( ›* ]. q. †1 a2 Q6 5 ==äA­JJCL9 : õ> ÙDiCBB R@ ÒA “? ˆ= Ô< f= $8 8 *6 Ö4 5 W9 Æ= `? ³9 7, z( +) ž( v< íoíuynÿìeþ;[ÿk\ÿ ÏP O LN(L¾IÉIE=EQ ž™þi©ýú«ý ÿ¹ý ©ý ~°ý 4¸þ Œ½ý ¼¸ý ß¶ý ²ý ˰ý @°ü ;¬üù¦ý ¨ý þ „™ý ø’þ Œ“þ ‰þ â†þ(…þc~ÿÞ|ÿöƒÿ8„ÿöˆÿŠÿ§Žÿ ’ÿ–þf†ÿ\|€ÿ”…þ ’[ÍXó]_DZ@OÙ5 •Ó& ¨X¿  Å ‡ ¨!  P! ï B 0# y? µR EYM[ðlÿ ¤t Æpÿ •oÿ E}ý¾}ýkmÿ ®Šü¸† { ˜±ý—ÿÎ0Ô Bn ) ?ìð¶ ! é& $' % %! t u .ö4|wŠ«™ÓŸÝ¤*ý.•q! é! ü" A& ¼( w* * V(Ø+8. &1 Š7 ”9á9Ì?)<ø:5@ < œ; A &C B 7* Ö jíu´aÇ! ç$ Ð, . ™+ ]* Ë- y, ×. , G. L, Ì. 0 m.ø2 g1 ?/^4 1 T €™¢ ɪá& C1 Ø8 ÎA §E ìJ O ìU ¡X V[ÿ &^ÿ \ÿ ™Uÿ 3P Oÿ ¦Mÿ äH ÕG ÎFÿ &Hÿ Cÿ 9> •; þ8 ˜6 „6 3 Ý1 ™/ L- ‰( G$ Î! " v$ q& ( ˆ+ °5 ,9 Å: ü:S> mB BE7F’HßMÍO•X0Yþ^9` b`VgO7I¤?á/«'x%;#œ"ë"ã$g#o#¥#U"¬"f"æ!/\"!Š"î#o# "‚!!=!¬ f"!¬!!Ð!Š"Ï$¤$©%%_, %k$à$£%"%[$Ì%Ç%×&8&Ó&J&&( +€<ÃJc<ºZ¬<·ÿU·ÿ·ÿ•¸ÿU¹ÿ¹ÿU¹ÿºÿ ³™ºÿ‚»ÿJ»ÿÁ¼þO¼ÿQ»þ޲ýmÿÿçüÆüBümü ü$ü¤üLüJüÒüƒü üüÖüÅü”ýóÿÿ?ÿÿ^þÅþÄÿÙþi(ÿ28ÿ0þ¶4þk0ÿÔ0IªIìHëCã>‹9O7¤6‡2ñ4p76z53b2l1!1“.ð.+½(ø&Ü$ê(Q'¢( Œ)õ,t* )+ $- Î* É)¾# ê 2 ž ÔIk e D | ¦ ó  ˆ l Z& è,Æ/Ã/Ò-Ì/+\./E/¥2/|1K20*--è/_3®1€00.‹/-Ì,÷( s% -" +  ž ö x d  [ ˆbB‘–´pˉ ¢ õ# x$ ª) ‘55û2 3=rC¨DHuNPN_ÿƒ‚ÿ ¨{ׂÿïˆΔþ<‰ÿXn Áh Ÿh e hmø] CS;QÑMòM±P\U ­W 8MXT{YPkek2iñu y rÄma”](N–lÿ 0|þ–þJ-  þ$Ô+4Ê5 NCÿ éBÿ سr–A !âm G" ) †. ¯3 L: SA°C; þ:Å>õB$L ¡V á\ LO áA Ø? CŽN†PªM‚G âE iK ›YK gB æ@ ô? a= W= 4? ©? ª> Ù= H= Â6 ) ‰) ©- æQ :k‚lþ-`þ²[ÿ ÎUÿ ¶O eLªKhF DC§DqDÌCˆh g¨ýâ²ý Þ»ý œ¯ý b±ý ³þ Û¾ý |¸ý ©±ý ë¬ý Ç¡ý æ£ý %¡ý çý é—þ ˘þ Vþ qŽþ :‹þ êƒþ :‚ÿÆÿŸÿ¬€ ƒE†DŠÿ\Žÿ!’ÿ#“þÚˆÿ~&~&þ Ð…þ î\LYê`ÀU…G’9G M w 3˜# å Ì# " Ô% % Ò" :$ P)É% ª! 9  Z / Ô= áK |X 2gÿ ¥fÿ àpþ µyþxý øtþ ‡üº „m¢ý ¦ü ¼wÿ b‹OV T ¹  sh î Òp$ Â# u! h , [ ÐÜáŽvlØËÖ^ð  ‘ [ 4-œM  ±# % D' Í+ 1- 0 2 j7;;;R9 ƒ7 È3 °6 ò> C Š= š$ §  å© ˜! *$ , ”3 ¢/Ù+”- »5 1 ì1 u0 ¹2 ¬2 Ð3 Ì6 9: I9 “: D9 £47 ³ ŠI§!qþ™ B\& À* ”/ c5 ì; {D I tP V¿V éXNS )P ûPžN ZL áH :F bF D ‡A ç< 7 |4 ¢1 }, À$ A" $) ÿ4|5p5¿9,?CEÜH ŽH%G ÝIðHðO·P¾Sƒ[!]s`gd6f³aÔf÷fäd²aOZÇVOÒB0.ã(Ñ%„$«$#ï#ì"é#"""ü!ë ï#.#@":""µ!P!Œ  X eS ’"€"Ñ#X"_#¸%Ž%+%u$ $¡$H#à%$Ó%—&&‚'&‚&V'_)N9 H!>ºZ¤¾©ÿ¦©ÿÞªÿVªÿ^ªÿ§«ÿ_« «ÿŸ©Û©Û« ­ÿ\­ÿd­ÿd­ÿ¥þšlÿÿ^ü^üýüÌüÄü«ü‹üü;üSüCü#üSüülüLýÿÿ?ÿÿ?ÿ^þ<þáÿéþ1'þ3ÿ“1ÿÕ0þœ5ÿå3ÿÏIIâGîF«B:O5˜53¢4695q3“2F2Þ1Ø1Ï/ç.¶1Ý- &.(›*$-W/w-…-T,‘+µ.m/g1.ï-+Ü( h | ! Ï! & ' F( ( ) .1_2n11/º,¾,o-±1.`.h+|.™/Ó/Ë/0}.’-ž009/K/þ./Ý0 T+ Õ( x$ ß" F  ·  ž!  { W h  A ¸kwCõ¯ Å ­ L" I$ ².z6­5¨4\) Û/CŽHD4F_M‡Mxeé|ÇzWzMw{ µq „h ql Aplp h QV $NÏN«LñLâOñMCM†MïIQ¬cCq=mÈhÅm ÁE¾J#V!5[!FF¦C sJ ÕI ŸI SI IG ŸF $E ˜C ÌC B Ì= j< J< M< è9 9. Q+ Á; ©\ÿôaþ¿[ÿ›P ”O MK©K I ?F[DÕCžFäI°GÙKƒ‘þ+³ý ò»ý k³ý ¸°ý ¹¸þ λþ Þ¾ý “°ý w¢ý *–þ H–þ ‚™þ •þ Íþ QŽþ wþ ±Žþ 2ÿ^†ÿ‚ÿK€ÿ*~ÄÚ…’‹w(‘ÿåŠÿRjz“~“ŠÿÖžý ŽŠþ ˜^é_Uf;¦) ƒ  ) þ f —$ “# ! s% &+!% Ó+Ü)*I( ½% *I, . -, Œ7 EIªS2e hÿ çhÿ álÿ Èrþ™zo‹üº‹ýT¢ü oþ 1¤ # Ô¨· ” Pº²ÄÖ‹ z.F 1| ðg*õBUk ß £ ø b œ +Ø Ì ÏER© ´ ã ô ¶& L, Û0 „5 Ú6 (5 º4 C4 ¦> õB Ú0 Z! m Ú ¨  á#  % * %7 K3 þ2-/‚2s= 47 Ð7 8 l6 ©7 }< ð= Y= Ù> Ñ= 7> 05 ; æB@ Â# * M- J2 <2€6n01( W'W  Û# Ì$ S$ % H& N( , + (, ,. , Ì0 1 Ç7 6 Ì4 H3 µ2 1 ÷0 í- Ö, h+ (* [, h6šCÛF\H°IiLñRçVhY[OXŸZ:Y X\¬_âgTjýjhyi“hgîiÙlOo k_g7fçY\TÖP>ä-±)¼%¢#ø$R#:#f"•#+$˜$¨"ù"µ#\"F"!"‡ Öe!ŒK‰î í"Š#$"Ð$n%&%,#$e$Ú$¨$÷%'%D%%È'&ñ&%ž'(Ö1‰>p8 V[¢§n¨e©e©¥ª«%«$«\¬#«ã¦¡«ëªì¬$«à£ÿØmÿÿ®üåü'ü”üdüÑühüüŠüÅüöüÖüÒüAüÛüý[ÿÿ?ÿ^þ¯þqÿéýì-ÿ.ÿ 1ÿÜ. *ÿy1ÒJ}K8KG¤AŸ:6ù5e3ð5ë5R6k4}2Ë263J0×0—0m1~1†* ,W+Ý/à.ë.x-ð-…-‹/t.O.^*#)U)š,1,ä. *I,M+F,é..Ð/7322÷1ß22/Ü2C-;-š1Ó1/Ô-¦,ý.Î/Á/E/&100£/×/1.@0Ò.È1z0 »/ , Z* n( A% Ü# ~!   ¢ ½ é ê ¨ {   à Î " ø 7  ¶% )2[5¡4J* –! ú" A7BCÿDÇE I…LGKåc9~ xäo Œo ˜r g ¥pŠpöh WTøK?QŽNÝPñRoK×KK¸J°RoYófzk¾t áf?f‹acbx`çaT[yf0~ÿ Ç|þæ^Z?ÛNÄTšVÿ 5Eÿ »;žÐou § Ì( ø2 Ó8 ¨C›K½S Z Y "XHU ˜\ÿûwÿ…þ\‚ÿ …ÿÇÿ}þxI äH¤GBG•O 8L¶=Ä< „@ E F ìH E eE IG ŒG ÙG ŸE ? "< ô= »@ Ÿ> %1 65 õQÿ xWÿ VP KóL nK°I G ÅE DD —GSJéJÒLÚi+´ýÏ¿ý #¶ý «²ý q·þ ,½þp¾ý )¯ý ãŸý ¸˜þ ˆ–þ ]–þ Ž’þ “þ [þ ôþ ¿‹ÿ €‹ÿ‹ˆÿ …ÿ‰…ÿ„ÿòŒR‹ÝŽÿÙ‹þ ñ~«xöw»yЇÿoý w¢ý ‡†þ ¬bÆ\L0 ±9S Ûù ! è  Á+ ^( -- + * í/_0›-ª.i) Q.04 Ÿ94 54%2ø/†3Ã>äCºNãX …_ Þ` Ø[De ®yÿ Ö€ýñWYù h ¸¡ tÇe d 6 u¡ 2 % €ãã Ø÷ðQñ›Írã*o¾ û ôá˜á C mãÁö‡%ª–VÎ+ –>„GC*? mE 18 Ÿ$ '" Ý$ ×& ü' O* ½; <; A4R2³2)4"= äB ¸> ; É> à< ØB A Ì? —? 6D ; í5 Ë;×Ñü# È4¿A@EÚJhNzOùSRÍO_K±L°HD.?Æ=èBM>`<"<%6 0a1 U5 ó4 ½5 [0 Ã- / Y7 |7‰9S9ª?ŽG4OÚV[3]Ð_J`Öd¾c–hCo7o°jæh?ghÎp¯pn?o²tçu×r`r¯scsér›smo ÄlEkÃfWb'\šU ®M w<d.g*¬%W$#‚#C$$›$.#ò#{#ÿ$ƒ"÷"F!¨"| ! £¢.-" !š"'#Î"$n%S$¥$ñ#Ó$X$ñ% %$%¿%F&&Ð&H%ß'U* e;+BŒ@>TœÆŸû§¯©æª^ª¥ªõ«m«¬¬c¬#¨ج«ì¬+¬"¤þ'lÿÙüjü:üÛüû÷ü¹ü£üNü3ü"üœüäü¼üÙüüçÿÿ?ÿÿñþÿÿšþr)þÌ,þS5ÿ*4ÿ%-ÿ'.ÿ¦I9IžHOD}>K9¼4§3u45Í6S41f4£2 2“-í-ÿ-·-¾/ß/+0@1~0¿1u2C4y5_6°3$4S1®3.Ã/Å01w,Š,§-×-Ì/F0/”1¸1½2Ú2x2Ø2m0Ž,©/3»1ä1"./º1~211`1œ32'/ª0l/Ž.I-Ê0K5u-ƒ0 |. . J/ U+' Ò' % % 9" ä  n -   â  } ¯ –! Â! ò! Ö" u# <$ 13•6|6Ž! U · j#>¹BRG˜H½FPCTGN^êm ÈpÿYj b[j Ûy i Xd g_ °R´RSgOpO>R‘O«NKGNUW]Ùh÷q Ðt àq dÉZéUMÏVTê}}þ^iþ yBGKDUE„6 iDj$¿./ 1& Ê4Ø<ÃIŒT ` gÿ dÿçdÿ nþµkÿ mÿÊwþè‘þZþ –þþƒƒþq] ­JJ8BºFmEÒ>9 ¼; 8= ™A ~C ÔE G G ÔG LH vI ˆF ãE Ó@ àC D Ù4 Ï7 –M ITÿ ¦Pÿ 8IzJFJ µHG‰GCHœJBKI®I¢L ß^ h“þ =®þ ²²ý é³þ R¹þùÁþ …¿ý ®ý ¬§ý Þ£ý 9žý }”þ ÞŽþ þ ™Žþ å‹þ p‡ÿ шÿ‡ÿÖ‰ÿFŠÿ ƒû{Õp±oŠqŸtv|Éáýþªü í§ü ûr’b7Ð Î ‹ =… Õ! I + –, µ. d0 X1 V0 î. ß2 h5 1 8- ‘+ ¥+ ±0 n0 ø0 Ý74;ß8Ö8¿=7:ƒ;S7³/•= O½Pã] Ëvÿ ª}ý X?%‚Èu ¡ z dnÈ¿ £ g g …ƒ úÛ5–¨sÀ‚µƒž€ù3“·ýc.J•øCÖƒ¿Ò ™4 æ,M`·7# dkh‘þ›ÿ­˜ÿJŽÿB…ÿfzÿ®e*VG Ü< L4 9 `? $:”5ø4h5¥8»;¢C 9D «C ? ^> )A Fÿ qFÿ zL C –4 ü9 ž/ ”Œ ^) F>L€OåY 1_ (_ va éa ëb Yd ik ”j :hbf²kcj ÷jzg 5cÂd` ]š_^[x_'^ç`Xa_§_r]o_udßg"iÈkŒoán Ýp¡p£m7rv Âtìwn¡w­yxwx;xµ{Ž| uéw"|Ø~€ 1€ p} rzŠwVpîg˜fádã^§VƒP ]L ^;Í,í&É%T$Ü#É# #Ô#â#œ ‘ U »!N!"/!&!^ Î*ºu ƒÀ ±#ø#@#¢%ª%$¢$($œ%%œ#~$Š%%¸&&Ð&h%§&£(n;-GÀ:ÃS¢¡  Á¥â¨çª£ª£«$«d««Ú¬#ªî¬ó­+¬j«á£ÿ¨oÿIüÕü[ü=üü:ü(üíüÞüäü¥üŠüLü üTüßý¥ÿÿ?ÿÿÿ¡ÿ¢ÿ}þ³*þ{/þu7þ·,þ/ÿ!1ÿIoGHMFl;H7340¤4 4¹44Ž3’21a.È,á-ú,y,+v.M1r0ÿ3(2ì4 4â4m44F4G5H5_2ç4"1þ/·-ü/.1,1V4'3Ä22ë2-0²5‘1±40]/ï1l/E2±/H-æ/.W/2¢1 1¢0+.­/È/k1å1U23-2]- %0 ?+ `- Ö0 . + T, M* R% Ÿ% # " Q  ¤# 1" $" k# " ¥! ª" Î# ë% 0/7í4  La² Ù1=>˜F¤IõH•F^GÔP³_¢f8e m_ Ra Ðg Úe ÞX ö\ ÐX ^X RQP …D [F QF I wM oWtL ýM åK ÄGÿ Iÿ ÐJÿ í: 8: qMÿ ¨Vÿ %Rÿ ·KèK .I ÅI¹HÝK¹NtPxQ6PŒRóUge…ÿ o¥þ Ê®ý ·¿þ ¿þ ž¾þ ƒ¼ý #¶ý 5®ý «¨ý !þ ƒ’þ 6Žþ ’þ †ÿ Áƒÿ ÿ ”‚ÿð‰ÿä…ÿ]x^k‚m¯lzs_y!|Ï{r  þ‚ªü ô©ý K˜þËcI6’ÌÎ " Œ" K( &+ F1 b4 6 8:3 0•5 '0 z. g1Ê/ .+ ©4 4 Ø8þ;¦? >Ä<Ë<ž9œ8™6J1É-'% Ý1¸Hó` Øoþ õQ M Ù`Îõµ U.œ®@,s Ì· Ù³Û Ü–M ë ± tÿ cÞvg* ˜ ‰ ê Z d! R" ’ K  ð! ©! ç «# n5^B 9'x!T!(!‚(«` ì›þåþ<«ÿE±ÿ¯ÿQ«ÿÕ¥ÿÈÿÆ—ÿ”ÿ“‰ÿW€ÿ›{ÿ)sÿ2]ÛPëC@Ÿ@Ž? I@ õGÿ "Gÿ ­Eÿ xD A sD ÓC aB ž9 4 ‰>·é\) ´A²NÔP,[ >i k Ìi ês Ev ív Ìw ùy òy z |v ‹x €y w x Dv!rXojifHi¶måc–hÖi:haædºlJpÿsçut"u žx ‰z | | È~ } Ãz âtuo tfwj öq js 'x Û| x¸w‡pÿq}} Ö|J| ‚  ó Ev¤t Ìu "s oœn©f_&[JRK ï:.+u&ó%#$$˜#â$”#r!t" #·"üìß 4ÔÚ½ Ÿ ì"6##f$s%Þ%’%@$k#æ$¤#Â$J$ò$Ê%&T&H&7%&d(?<cHq7ÑSq Þ¥é¥{©åªt©¦ªäª£«$«£«Ûª­ªµ¬£¬s«¡¢þÞnÿQü“üüüéüÃüJüküˆüåü+ü¡üüªüàüÅýÁÿÿ?ÿÿÿDÿ•ÿeþó%þõ-þõ2ÿµ6ÿÉ-ÿR.ÿkH¤G’E6Cò:ã4J1·2j2T1Ë11ñ0õ/x0b-K+À-L-ý*á,.2R342X2m2w2Y1Y43 6E4ö6786;1Ì0"10C0Ø3¾3‚2Ö4r21)1i/ô.J.@.B-z.«0“0b-Õ.¸.Ô0ú1e1~0ô262Š1‘2$/¡0"1,0ñ4f0+ Ì, ž) é- I, r- p- + u* * »( B' ’# % Ñ$ ƒ% ñ$ ~$ Í% 4# R" Ö# + ò56Q lu–Ý ü9õGŸ?²=CCÂG*DQEYP@a…h O]‚b 6^ OÐN&Z ÆW ËS&SïQ0RéQ²LNFîGDLFLsSO^*SäYÓ_ X6SEJ|J6I2tÿŒý©sþMC Â- ¾YÝ Ž " Ò$ 2 K S :] #þ¸ÿ ¾ÿ “þÊ‘þ’‰þ¦ŒþȇýºþÐuþ§xþÜýê§ý:œýz—ýú‹þF^,P1G·Dê>L?Ö@t>ñ7 U: G< ™@ ¹F G 8G ¨M Ÿ`ÿü]ÿh\[\;Pÿ jOÿ KL > ^? Zþ ýZÿ ZUÿ 7Qÿ :L 3I@I ýI÷JºNø[ÿ Z`ÿ!_ ÖZh_Vs vÿ ¨ý é¸ý ,ºþ '»þª¿þ †»ý sºý X±ý s¨ý 9•þ m“þ \þ ‡Šþ ~ÿ Zu Ów€H‰ ŒoÆfUoˆvb|;‚3€ƒ…'ÿé§ý"²ü ¯ü ɤýnró=®½ 8 O ó î# M$ R* é/* 1 ä/ ~5Q<c5Š:<õ; w< <_6R1 ‘3 ?%@¹Dd> 9ˆ;¦<7Ã/˜0¨34*½(é*;.}:‹O &D áX  ‹  l â f © t 6 í   c æ æ › úo { " “   - Ð Î   m {> ü 5+ Û  s  0& 44 C ÒH 5 p' œ' Ù23' ¡W¥, ù~ÿq¡ÿ‰¢þ?§ÿ‰®ÿ§°ÿL©ÿu£ÿ6 ÿFžþîŸþìžþS›þÏ–ýr•þÖŽþ ÕŠþ ~þ —wþ ósÿ Ojÿ\ÿ¤T Oÿ 1J F ëD |E D Ò9 ¥5 +? + r‡! 2#F±R8\hà} ©y êv Àz y~ î ñ„ Ø… "ƒ ƒ îƒ þƒ r€ E~ ô ú Bz ¿u Wr ÖpcrskvvsnâvL}[}Ô~ y ›x Ût ¶z ù i€ ²| z ~ Ë Æ~Bs Êm ûm ‘j úk Én qo 'm Lh ™] Œ]ÒqA… ³ƒ í„ o… X€ ½{| ò ®{ òx By upelücsW :L üC ý5+ &H$v#w##ë#±"®"S"¸"ø![Ä V![ QÚî"2#Ì$·$Í$Œ%Ô%Š%2$$^$ ##G$R$ô%I&%™%$í&&'ù=bEè6YU4 –¥q¤ê¨5§v¨¦ª«ª¤ªk«+«©6¦º«ë¬,«á£þnmÿÐüêû'üüüâüûüâüüËüIûüülü©üÕý<ÿÿ?ÿÿÿ‹ÿÿ;þñ*þž7ÿÞ/ÿ¸2ÿZ2ÿ7/¼HäGƒGDÚ>^6³,P-¾.0:0\2V/ó/‚-–..â-ò-ù0.©1‰274641}/·0ñ0ó1þ1K46k55£4ÿ0Œ0ü0‹/É12‹4[5è5q7a5*3Á4{1^1r/.ó.è.00Q/å.j/h0¢1Y20w0¨3¤2â1'0®1¬3–2P.ã-˜+(Í) f* \& 7) + ¦+ þ+ y* E, 7( :( ?& & É( ù' €% ( 4( ¼' Ç' +  ¹# *2‡8' 9ì[ç%NNGYO?V?ÂCnHcGçFùFýLÔV’b \úOÎPÌX \ ›T V ŸPMžJnFÁCâD?F!NªPN|HLRÊJ@L­KîLõGgWowþÙiþâCÖ «ÌÆ   ƒ$ M* Ë2 k@ ï_ÿÕrÿvþ÷mÿèŒþí¡þ — ÿ œþ ¤þ ˜™þŸ‘þ%þÁŒý*wþ/zþf£þ¨þ Ĥþ^›ýþŽþÝh¿] I”DèDZAH=“;Ÿ1*/ 08 â> ÞE )D ÒG úJ ©M TÆr)n+ZÿaSÿ ïRÿ7D ÂPÿ gþ Öaþ q\ÿ Uÿ +N eM ºK ÎO PbOPTª_ Zd ›a)i £r 1šþ =¨ý }ºþ ºþ kºþ¨³þ Ȳþ Oµý Ú³ý Шý ­˜þ “þ ÝŒþ Tÿ Ït r/vÞƒ ß~ Ls.x~‡„nˆî•ÿYÿèý ?«ü ¯­ü <®ü èªý‰i ü& ê N ó | A ³* ®+ Û+ Ñ- D- ‹, \1 s0 Þ4×0 Ü3 $8QEüAøDq?D‹9 ×9D!BŽ;S;¿=9M0 ó;‹>#EO‡NxQ¥^ þ% $ B  œ-®( ù$ Ý( D+ ã* é$ €0j, þ/ ¦1 Ú- ¯ ©Fí œ3 Ÿÿþ°—ÿ ÿªÿk³ÿͬÿÏžÿ@žÿŸ—þ²˜þî–þ Aœþ þ —þ ×þ Xžþ œ›þ ›þ Q—þ ”þ ¹þ ç‹þ ¤{þ hwÿ ^~ÿ®oÿqcLT—E rB ÷7 õ% ï" N0y9PT‚_gnwy^„ ‚ u† J‡ Ù ÉŽ †ÿ û‘ A‰C ÚŒ d‰ ¼ˆ æŠ W† X… $„ ¡ é ö… [‡ ]‰ … é‹ [Š «Œ  Zö‹ë‰ ï‡ ¯‚ > þƒ 4… ž‹ —‡ Ÿ† (‡ uˆ ;Œ šsx(v`|l‚›€|Ip°t•xp{Å{ý‚ öŒ  H‹ –‹ O‰ •‰ ƒ j‡ Z‚ 0~ 6} /| y Q{ ¾v Ok ê_ €R ûI Î< ®0)}#¶"c#x$#s!í!ö"  h""F±;!s#$¸%.$ù$³%¥& %r$§$$"Î#$S$H$$j$Ù%5%,&g'ê=,E¿6QR¢[¦î¥ ¦𧮩-©Ýª%ªë«dª¤©ä¨ï¬#«â«ÿï£þnÿ‘ü[ü‚üÅü<üüüRüÚü#ü!üÉüÊüÒüîüÍýØÿÿ?ÿÿ?ÿÿEÿÿmý–,þ2ÿ4-ÿ/ÿA-ÿ38H,E•ESCl@¡4.s0•1'//â00Ÿ050/!.q,‚,Ö.0]3Õ4÷4G3É2”3M1709282…6á6/613È2ƒ3"3â1è1z2U/s0]0µ1î2©2Ü2f/û-.œ-4/-\/\/.i/í1P0˜0%3101p1n/y.²,-,±.O0¦.®.##Ô&N% ó' v$ *$ Ü) ˜* ç) –* ´' A% # ð$ F& ±% Ÿ( E& 2( e' à# „" i Z# ë592: Êü`õ)ÉLÅW‚R4SÅ\ [ ;PöQŽHC·BôHÞLøLÅK&LîJµDtFCÕBo@7AAž> ;I8æFçN\HõI²Q}UŽO¥QuK‚EÕEódþ qcþ ŸPÿî+ Ô# •% Ý+ 3+ >+ _. 1 ŠVÿ©oþ ¼rþõ}þþzþ}yþ=þž©þ á§þ ´ þG¥ý¿˜þŠ“þ†Žý;„þ·pÿÊzþ£§þ ¨þ -«þ Dý4Šÿ §v"zb"æPÁHÅF>ã@×>G6<% % ÿ7 šD E G ]F ±G !M ”fÿ9kÿ;[ÿ×WÿÝSÿPÿ Tfþ gþ ñ`ÿ I]ÿ ×Xÿ ïUÿ òWÿ 9Zÿ äV õT¦[B_ çabr`^p Ÿÿ ‡­þ ß·þ°¸þ ~·þ ˜µý ð°þ G«þ Ô þ Ÿþ È‘þ b‹þ q„ÿ w l‰sm~ ^† ¨ws צþ[±ý§´ý ±ým¸ý T½ü ò´ü ó¬ý I¯ýB©ü¼p ‚#  ˆ ° Ð o X Z {% ç, / ·/ N0 F+ Î/ «2 ®0 5. ' •& 2ùCÓEF8à;6Ir6 ¿7 \0 `6 Â=FSH 6ÅGUMRWj] ×d `ñh+{¶wH@ 2A' Ã.†# % Æ* Ñ.42I0V  é4~*Y+p-æ*a-Ï+’% 4Ç# & >  b&  1  > ]" ´% †1–0Ÿ) D+ û' 1ö6¾.x65 —3˜42™1ª+ Á$ œ  ø, VeRs ƒeÿ–“þ0›þ¿¡ÿŠ˜þ<þ«†þ á…þ oŠþ Еþ ‰žþ c¦þ³¦þ ¥¨þ{¨þ¸¦þp¡þ 5›þ cžþ Þþ g•þ á’ÿ Ø™ÿ …›þòþ R”þkŠÿNÿ*qÿ“gÿoez\#^ijhsԆϑ員š Lœ Mœÿ | ÿ ìŸÿ â¤ÿ  £ÿ á¢ÿ ážÿ «žÿ û ÿ "¡ÿ &™ È—ÿ ?›ÿ '•ÿ ˜•ÿ ¾”ÿ wšÿ ]›ÿ Ûšÿ £›ÿ ì›ÿ nšÿ vŸÿ l¢ÿ ç  Š¡ÿ ²žÿ lÿ ÷›ÿ ñ›ÿ 9” Йÿ )›ÿ æ•ÿ r–ÿ o•ÿ ·™ÿ j—ÿ ~• L” Œ‘ –Ž —ÿ 6˜ÿ «‘ ’ÿ 8•ÿ 1“ÿ «“ÿ ·•ÿ é• Ž’ÿ {“ÿ >™ÿ ,—ÿ 6‘ÿ ü‘ÿ µÿ y‘ÿ îŽ O‰ •… Ú‚ ­ Û}  z ‡v •j çW oK -? x/ #)º#¬#è"ä$$#²"¥"w  l!‡!  ñ#J$„%+$Â%%S%%ì%,$à$#¥#Ë#P$’$L%œ%9%&$F$å&( W=Ió5ÿfX¹›‰›ÿ šÿšÿÑ›ÿÑœÿXœÿ˜þþþVœþלÿPÿОþžžþמþÍ—ýnÿ üGüÜüÃü`ü² ü üüLüÄû–üªü€ü‚üëü¼ýyÿyÿÿ?ÿÿ~ÿuÿnþÙ,þG0ÿ*1ÿ2ÿÑ2ÿ/ÿ.IrFƒD>Õ;Ð41Œ/¥141Z/-;0 .,Í.^-Ó24¬2¶3E2©20ç0. 01-À/¨1"0®0>/m.90³0û/!-ç-`-7//±.Ò0S/…/i/é/ë0›/½.6-ø,t+µ+**´,*+)™#ß"=%É" q( & ù# k$ Ë' ú) ’) ý( ²% Ç" " % û& ‹% & ¼# ß" W" 9  ¼! z( Ð3³-  Å”G U Ò)²5 ;‹F ÄP W K] ÚZSÝTïVƒO„L H2F¯D§@ø?l:à7Á6X:þ<-=„<r?ä<“@\=÷CQDDJþJ/HUG«FAaM [Tÿ ÓMÿ)E Š6 Ù7 ¡8 ˜; o2 1 lAŸ`þ9lþðþœƒþBˆþÒ…þÓ’þí³þ Y®þ §þ OŸþ ˜‘þÜŽþƒ‰þÑ…þÎxþÚ{þâ±þ É«þ ¬þ „¡ý·†Ïm!Gg$TýKeHÍD>Ñ@F==/€ e H. ´@ ëD ‚D rF Kÿ ÷lnÿ_XÿÖWþ>Uÿaÿsþkþ ,hþ âaÿ ÄXÿ pS 1W _lþ ¤tþ Ftý ·sþ ‡eÿ Ða L_ˆ_cur z±þ é´þ ³ÿ˸þqºþ ®ý _¡þ £þ •Ÿþ ©™þ á‘þ êŠþ =~ÿ svnshtq‚ çx ÉŒÿ ¹«ý >»ý J¹ýÙ¶þȹýoÀý Š¿ý W¿ü tµý&®ý¬ÿr3ã3™.. '+ ' Ð% œ" S(A& Ÿ- è/ ™0 1 ž, Y2 I/ E- % ™" ˆ" # T0 <8!2z2 å6 á< P> îH FTNûZ 6^˜N¸W¡Yˆa3Ujÿ .q fiJh’næp­dÞ5 * )" ø! ¹-¡( O* Ô-ÿ4O2Ò.|(›?I' v( ¢- Í.+ ') 2/v3, & ð& t& ‡ ! ¬  » À ¤( ²* 6( ý0ö@ó72ï5‘9È6 6É44&5ù759}7ˆ0-- g=”SÕbŠpö{‰…§‹ÿ&Šÿ`€þ?}ÿ Šwþ ÿ€þ 2…þ ¥Žþ .˜þ ,Ÿÿ ¤þ ú¥ÿ Á¨þ }¨þ 8ªÿ ͪÿ@ªþ ¨«þ q©þ &¢þ X›þ ­›þ œ™þ Jý ;Žþ Ãþ Tþ®…ÿÑŒ”šYŸО¦œùžð˜CøØ”²¨ÿ ·¨ ©ÿ 7­ÿ .±ÿ Y¯ÿ Ü©ÿ ê§ÿ 5¤ÿ ´¥ÿ Z¡ÿ f¦ÿ ¥ÿ Ü©ÿ §ÿ u¦ÿ 7§ÿ \¦ÿ g©ÿ œ«ÿ Û¬ÿ å«ÿ m«ÿ gªÿ c«ÿ Xªÿ á§ÿ ê§ÿ +¨ÿ §ÿ Þ¦ÿ Уÿ f¢ÿ a¡ÿ b£ÿ ›£ÿ S¡ÿ äœÿ ³Ÿÿ dÿ qŸÿ ™¡ÿ ZŸÿ tŸÿ à›ÿ 7›ÿ §Ÿÿ  ÿ J¡ÿ ¡ÿ å¡ÿ %ÿ ç™ÿ ,– •ÿ l“ÿ í“ÿ , Á’ÿ 4‘ ‹”ÿ ô  ‡ ™~ *x o Ûb ÕU-@ Ù0 æ+|$Þ#¦$$?#*$!s a! aùù#I%e$Ð$$«$ž%%ˆ%ƒ%Q$b$Ô$Ý$˜###™$½%]%x$¬$ø( 7<èFá5‰Sž›̘ÿ«—ÿ­—ÿnšÿkšÿâ›ÿ›ÿ"›ÿ£›ÿ£›ÿ¢šÿ¤œÿ#œÿbœÿšœÿ˜”þ(nÿPü$ü*ü˜üükü?üüÌüQü’üAü™ü=üµü’ý)ÿÿ?ÿÿ?ÿÿvÿ…ÿýÍ%þ97ÿ(6ÿ|-ÿ /þV1¢KÓFÔFTA ?4D.C+›*Ã-Õ,Û+á+½,'-+·+¯,/*{,`,›, ,¶-¥.½-.³,€0¿.Ö/l1Ê0P/Ó0\0ü/M-T-.“-Z,Ø/s.á/X/å+ù-v.â/#.¹/".Ê.˜..•/ì+ò. -c.(.§/ /.,^+N*™&³)'*[)c(''¼#g. %  ƒ  õ" »' b$   Î! U& ƒ* * U( ÷' ¥$ 1$ "! ð# U& H 5 Ô! Ä! J" & (2„/ î Ë" A  t  ²" Œ(Ý8<!@›IAIÌI FF²Dy={;j5œ35u3°5È:Z=4?þ> ýPÿ (QÿDXþ{G; ú< ¾= ; ´@ ‚PÿËWÿVxþ\†þJ‹ý¶‹ýwŠþ•þ±þ 5¬ÿ —«þ ñ£þ 7þOœþ þˆþ’|þ þ’¨þ Þ¯þ €¯þ Ã’ÿ9ƒ!te "éd#ŠVˆIHGÇA=Bq@ä94Ã Ý 4 < ›B ÊFRJ I]ÿ«\þûXÿUYÿlÿÁ|þštþ iÿ fþ 0cþ ÿaÿ Tdþ ø_ÿ ÷bÿ -cÿ biÿ fÿ _ÿ z\|ZÚ\`\ ¸_ ó¯þ ÷»þ Ü·þiºþ ’ºý ©®ý ¡¡þ Æœþ Ÿœþ •þ øÿ ÿ xv fv›w •‚ ¥u bsà þ Œ®ý Ò³ý cºý¸ýùÂý ¼ý!Âý Áý ¸ý`©ý ‹L:\:F;¼;>"@O>ð9S7Ê/ å. o, a, Œ- ) {# ’ ~ é  ¥& V/ 4 …<Ž>£8ãBzMQM œK ¯H {` ëc W kPÊ_ °W …aiW gÿ e|þÜk h_ M`*pÿ žzÿ Æ; —3 –8 R. #. 0, —& Y& +( 4ú,ç.d*Ö*)9.}/(( ®( Ë3s;L* ä.:/ˆ) ¹) ²$ Ï ¿  Ø$ !) <% +! ) 31 ]6E4 / ¡1 Û99³8q45ë8:¡?>’<;â:=;T<AfG VbhGs²}(óuÄo¶s ]q ¡{ J„ÿ ‹ÿ Š˜þ ¶•þ k›þ :£þ ¢¬ÿ ß°ÿ ¯ÿ ±ÿ ‘°ÿ аþ 8­þ 5§þ ó¢þ e¢þ –¦þ o¡þ ¨Ÿþ tœÿ Í¢ÿ¢+§á«¸¬ «N©`¦Ù¢ЛptÖ|$£ q±ÿ qµÿ ‘´ÿ î´ÿ Q´ÿ ²ÿ ]°ÿ c°ÿ ¥®ÿ ¨¯ÿ 6±ÿ ¸³ÿ ˜¯ÿ û³ÿ #´ÿ f²ÿ 3³ÿ \µÿ ¤± ‰²ÿ }°ÿ 9´ÿ k³ÿ ?¯ÿ ï±ÿ k®ÿ °²ÿ ä® ¬ÿ ¯±ÿ Ù±ÿ ˜®ÿ ¢®ÿ œ«ÿ é©ÿ ïªÿ %©ÿ ¦¦ÿ ”©ÿ âªÿ ¦ÿ Ú¥ÿ ž§ÿ ¨ÿ ¦ÿ ¨ÿ É¥ÿ å¦ÿ ¨ÿ Õ¨ÿ N¥ÿ Œžÿ ˜ÿ ›ÿ –ÿ ú›ÿ `œÿ Ü™ÿ ï›ÿ ÿ ’œÿ ”ÿ ,Œÿ ´ w xg FY nF 2 ³+ñ$O##e#¶#";"¾"Ä" " !"#P$%´$Ö%¢%D$Ž%•%Å%=%%$$$"ã"t#_%%$ò#U$ë( õ<NEæ6VFw—ÿæ—ÿ­—ÿ/™ÿãšÿ››ÿb›ÿa›ÿ¢›ÿZ›ÿê›ÿcœÿáœÿáÿ œþß”þ`nÿKüýü~üü+üëü’üÉüÜü4üEü¤üüqüÜýÿÿ?ÿÿ?ÿfÿ“ÿ’ÿ’ý©,ÿ›-ÿb6ÿ.0ÿŒ0ÿn5JÚCV<N;Ý3˜-{,0)¡) *÷)z*S*X(ï(v'î)Y+*µ,>+ä,[./.#+ß-)*ø,¼,–..9-»+.Ž,p,L,ƒ+:-n,g+),+ô,ç-Y)A+))V)Ê*™,£,Q-º,Û.U/N-a+ü,d+é*™-/,,¾'ç%ý'd)!&Q%/%†"4!*"<é l e  ¥ U# ¾$ h! W! ! ¡% Û( Ö+ À+ L, ( '& ±" ˜ ë# Ê# ß$ –) ») ¨/ A0 «' ˆ! Š Ë# ‹$ x% z' K+;@d<(5³2¥1}0¨/ý.-‹.- 0575:Ó?D=MPAU)Z ¢;m-_;˜8>:çAþCCæD·A=È;iF 9Kÿ¾gþtý²Yþ±? +;óDÿ 2Hÿ×Bÿì;œ<E? ?ý<ø<I:A5 '/ ;) Ñ# … ñ D «$ 4+ . 2 ›4 %GGIÿOÑX ÒZ í] d^ –i ”m ÕK¥Ub_ Vd µoÿ fhÿ ®iÿ Ûsþ4b Üa Ë` ïuþ gwþ HF ®2 ø, \0 / 5 / ±1 R0 ™+ ”,í4|1(/1†* /% m3ï% /A1Œ3, S0À0 õ+ 2 ®- 33 á) y+ o' Ö) q) , ±, ¸, {/ v2 \3 /9‡;9ú7 Ï:=A¡DHDD@DDâDý=ƒ9¹99˜8g<«D,Oû[&[ÖaædÏc$r qÿzÿ 0„ÿ ˆ‚þ ¿ÿ Gšþ |œÿSŸþ ñšþ í¦þ 0­þ /®þ ¤­þ ¸©þ ÷«þ é­þ «±þ x°ÿ ¯ÿ …­ÿ ^©ˆ©ð®õ°?±…±ä¬έî¬Á¡\™ z]©T•–û³ H´ÿ 4µÿ 4¶ÿ -¶ÿ Q¶ÿ ß¶ÿ Öµÿ X¶ÿ ¡¶ÿ í³ÿ Ùµÿ Ý´ ´ Hµÿ °µÿ ¬µÿ ª³ M¹ÿ sµ ̺ÿ .ºÿ ª´ È·ÿ ÷¸ÿ g·ÿ l¸ÿ ¥¸ÿ ^·ÿ /¸ÿ *¸ÿ ×·ÿ éµÿ «¹ÿ ·ÿ Þ´ÿ ²ÿ Ñ®ÿ «ÿ Þ®ÿ È­ÿ Ú®ÿ ±ÿ “°ÿ G¯ÿ Q­ÿ ˜ªÿ ˜¬ÿ ­ÿ ‹¬ÿ ‰¦ÿ Š«ÿ «þv©ÿ§þ :£ÿŽ ÿ Ú£ÿ Ѧÿ š¤ÿ Tÿ Ýžÿ –ÿ_…ÿ ºz n †Y D ô2 C(E#s#`#ë#K"¤!¹">"[!þ b#û$î%,%%Ñ% %%N%V$Í$"$¦#Ô$™$#ß$Š$Ÿ$Á$·$÷%\'³=ÃFï5ÙYœ¾—ÿf˜ÿ&˜ÿ¥™ÿ¤šÿª›ÿb›ÿš›ÿ¢›ÿâœÿ›ÿãœÿjœÿèþwþg”þ¨mÿÒüfüüüüü*üsüeüüIü[ütü‘ü–ücüŽýñÿÿ?ÿÿmÿ¨þýþ5 þ1(þ/þ¾9ÿñ3ÿD.ÿ&2QH <g6f2á.ú)˜%ü&0&_()%(¦&Â%ø%S#å%Ô)¾)÷**)Ç)Á*B+D)œ)Y)])&3&7(('2'«(¯(Ì'¦'Ç&†%­&Ô'¡'0&¯$Ï's%Ž&?#¾&»&Ë&J&ë(ä+)@('Ù'¢))c''&ž(n(f%µ$X$Y$”%D$…""š#j%" Ä × † a ‰ç` ã! # 5! I  ®! " W& ‚* - î/ 7/ /. ‡- T- ˆ, °, / 0 +. A0- ‡+ t& Ç% ý$ G& Ô( à% ).B8…=G:r;/:AWApIÝN»KD²Dâ;o3>-y.:! ˆ1²j¬(:¦:û?CþBBÍDÇHÉJ,FÔJ©oþ ½†ýûý)tþKxCIC ÂIÿ 1eþ;†þÃþÁ‡þÔ‰þU“þ˜þ ¢Ÿÿ û©ÿ ¥¥þ –›þÃþ ˆþK‡þ„þ‚þ‰gÃŽþ¸¡ÿb”ÿ{"(w #öe#4_!«QÀKPJdK`G@?•DÞ>È$ "  $ z?ÊNäOeTEbSzþ .‡þ‚‚þ ˆtþ )eÿ 6` #a É\ Ü`ÿ *^ÿ 0]ÿ (Zÿ 0SþXE__ŒW EH ]A!> FMsù¸þ ˜½þ c¸þ ¹´þ ˆ¯ý ·¥þ ¥þ Ë›þ âÿ І | jw `y !uø} ›iøkM‚ÿ`›ý »œý 4œý ³¡ý |±þ Gºý àºý ¼ý εý´¹ü ÿmBfDYFcGJHIðEjDfB¡=8c<z;@9 ´9h86 û6 »1 Ë4 v6 ƒA ÓIõIõP ]OHzT Ža öW ÄW ì\i \ƒP)Y¸bj —o Épÿ R] Dd ÖY óW ßYzoÿ @uþ *M ¬4 ±. K4 a3 3q.-Ó+ §-9) l+ "'N>†8N-U-ü=ADÅ@Ž-Î2y?8Ê0 ÿ4 ÷1 Ä/Ø1T- h+ ô( Ã+ ½- ¼/R/ 43(5 '6ô9%<ž>ÔB BIBAÇC9CôEµCsAéF ƒI .G ½AABBéBé@ÿ= 79nA|HePM[Êf:nJvÑz@Ô†–’ÿ„“þ q”þ à›þ ¾Ÿÿ J þ 3 þ £þ Ϧþ ªþ à«ÿ n³ÿ b·ÿ á´ I³â³®µ|´J³P±4°¬Ñ¡†’o}*k¹K(O¤±ÿ ñ´ ·ÿ ¥³ÿ ö³ÿ «³ÿ Ù´ÿ á´ÿ í¶ÿ ½´ÿ §¶ÿ Q¸ÿ !¶ ˹ÿ â´ ›¸ ¶ ”³ f½ÿ v¹ Žº F¹ J· O¹ I¶ µÿ ¬µÿ ®·ÿ ²¸ÿ !µÿ ¢¹ÿ ,»ÿ 4»ÿ é¼ÿ¸ÿ ²ÿ ç³ÿ ®ÿ ˜®ÿ ”³ÿ ´ÿ L´ÿ ³ÿ š±ÿ ³ÿ ±ÿ ±ÿ P®ÿ Ô°ÿ E«ÿ f®ÿ S«ÿ ­ÿVªÿΫþ ø«ÿ @«ÿ ªÿ ‚ªþ 9ªÿ ¦ÿ .§ÿ É£ÿ V•ÿ ² € l BU t> Ê. ²%B$ˆ#˜#p#X"‚#?# „ ##ê#p$M$$%I% %y%K%\$S$9#Ñ"Þ#S#8$#Ó$$¡&$ø%a'é?ŸG¨7ÙX›‹—ÿ¦˜ÿ&˜ÿ¬™ÿešÿkšÿä›ÿa›ÿk›ÿ«›ÿâ›ÿâœÿ›ÿ!þ·þg•þ!lÿQüüütüüÑüVüÞüü»üÚü¥ücüƒüü\üŒý:ÿÿlþÔý_þýk*ÿ#-ÿ«4ÿ¹3ÿG,ÿ~/ÿýG%6f2^3H0š*'í'%"$À$F#÷$‚%$µ$Q'O'Ì*@+%Þ%$§%Û)á(U)Ñ* '©(H(y*î*I)z(P'í(´(B("&M(7$•#E#w##"Í"F$[$Z ¸"~#'e)¤(\& 'm$Ð&$Ê!¯ ü °"k!ññ!"é"‰"à b Ï"Ë!Ý ð ™š  Z ûŠL çV~ r  ®! ¹! ¸! x# -" M% }) u- ·1 ›2 ç4 “3 a2 m3 ]. ù/ q1 ~2ó/ Ð+ ²' L' ' š!  > „ ”   ý+o8AD3;H8v* ‘ ¡ŒªQÿY$ðÙ4*í?K$Oô\á^ýa÷d÷hÙkómÊ–ÿ ™ÿ-™ý ýŽþ kÿ 2gÿ Kdÿ Ýiþ¯tþ•xþÛ~þžþœŠþõ˜þ§þ T ÿ ‘•þþ>d(K¬:ë%:#Â_/ aqx "Šl#¸Uï[ œR£JxLL!H !E‡HAZ%X ¢$ Å;ƒO®Vy_•pÿ„}þ Öþ yþ áoþ zlÿ Mnþ tmþ ñeÿ W]ÿ ìV ïU ÅUX»jÿ'fÿµXöF > ;‘= 8 ÎDlu ɵþ vÁþ Y¼þ –µý ù®þ C©þ ŽŸþ &”ÿ Œ‰ÿ º€ { òx ç{ ì~ •z [jÐn€€ÿ0¢ý ¤ý Éœý u þÀ²þƒ¼ý Yºý ·ý ܬý t²ü [QW+Æ! ! *+r.¦:<7C¡LÕP 7MÈNPÏJ¾Cÿ? ; ?6 5 Å9Ý7 êB ªN FP €N ©N §V Z ÿ^DW ·X !_ ®cŠZ å]¨_+bf ùk Ëg DY äa¹]™[õ\¸j Àmÿ ÂL Ó8 W8H= =W=Ä?Ø>ñ1ø3H2Ð7=;êB¡0i0»& ­Då@7ò4;?¾>Q7 ²;Æ= „4 r5Å0ë1é0 Å. '.Ò13†65.8Ú=ç@"@“@bB,AV>–>BöM X [ µX RK q< [8 ¾6 <4 ¶2 2 x8#;8,BŒMØUÁ\èg—r¨{Ö{¡‚YŠÿìŽÿrŽÿ$—ÿážÿ þ ñ þ ›þÿ «ÿ ²ÿ h³ ´ äµ ,°ž­K®‡®z®¢¢E‹o{­sO(8Ù–u­ K« î¯ÿ s±ÿ š´ÿ ’´ÿ Õ´ÿ –´ÿ ’´ÿ ‰²ÿ "³ÿ µÿ *° ³ ´ µ K¸ÿ ;¶ÿ }¸ÿ m¶ÿ ©µÿ |´ *¹ÿ ð¶ Ä´ÿ s¶ÿ ¦¸ÿ è»ÿºÿ è»ÿïºÿ p¼ÿ Úºÿ f·ÿ \³ÿ Ê­ÿ ¡¨ÿ ï«ÿ U¯ÿ §´ÿ T·ÿ Cµÿ H´ÿ ³ÿ T°ÿ Ü®ÿ N«ÿ ‘®ÿ ήÿ ¬ÿ ©ÿ V©ÿ ª¦ÿ ªÿ I­ÿ H¨ÿͨÿ§ÿ¥ÿ e¬ÿ ›¬ÿ %¯ÿ «ÿ …¥ÿ ‹˜ÿ H Þk O È9 ( «#]#]#"ï"C"" û"#Ã#)###Å$?#ö$Ô$Z#Ì#ß#—"Ù#$'$„$ #æ#g$&#P#Š'0?#G(4ÿÝX|š–ÿž—ÿ¥™ÿ™ÿœ™ÿªšÿ£šÿÛ›ÿ›ÿ£œÿcœÿ"œÿÙÿ™þ_œþæ”ý/lÿAü1üLü™üKüãü>ýüÌüüöü…üÉüRürüËý¢ÿÿ?ÿÿfþÁþZþý#þß3ÿ!3ÿö1þ¯/ÿ®3YE1I0<.*ý&R% %A'ô(¡',&¢&ì'—%C%Ü'I&’$î)%j#ž$N$b&^(t&Ö''`#è%`'Ö&å%p$´'Ø'Ñ'[$÷%:$$<$Å$4$#S#“$ "ê  ;"b#&¤$‰$Ñ%'$ö"l!ø!© vL“‹ =ûå "ð"Á!—&  D Áùu ƒ Õ  kS  [# Ø& •$ Z# ™# ‡# Ã' Ž* t, ¯. 40 g3 ¡3 ‘3 ¨2²715 1Ï. Ž/ % S P Ìu ggö¥Ò OÞêºA·&FºïèëÑÒÙ ±,·FºV n–v!Ëy!Ó|!¼mJhâ†ÿÛ£þ ¥þç¥þ ÏŸþ –þ Aþ q„ÿ O{ÿÄxþ½ŒþZ‚ÿÍsÿ¿}j=Ab 6 Ú $ ) ƒ › { @  0b¤m "žf")\!sc!U2MK÷I!I!&E"áHÂEÃ((5K`Gjÿtnÿnnÿ#oÿ ‡pÿÁmÿ ‚kÿÀcÿ —Zÿ ýS ù>7 Ø4 49K'{ ›µÿ …Âþ $·þ ó°þ Œ«þ e¤þ uþ ñ’ÿ P† Iz ÷v ?x +x r‚ Wr GcÏgëuá£ý µü m¦ý ´£ý <·ý kµþ ĸý ±ý £§ý ™¥ý ‚M56»0Z$ ·#E! o p š  ¢" H, g6ê5á@ I .QÓ]»\¥[fV{SþLFgE E yC {A PF P~_ –T fN ®en(`…g·iÿ ûhÿ ú_ šd Kfÿ ýc»` Ÿ`˜^’b¯cÃ^ XT íH >IJ{=“?\@¸< ¥8 î< AØ64;Ô9QEN4!;ï<ù9Z79 G7ë9¤8 8ò<±7I9Î:Ø;?9R<W:ž;’>]<à9©<®=Ö>Ö<Ã=h> î=> =Ê? »C > ?; î8 Å7 W2 l1 k/ 1 1 –4 B8 ±:s=2@ >@ü= ž7 ¾, & ´+ .ø6¸>ŽGÝO¤Zfmp#z$„ÿ>†ÿ¦‰ÿlˆÿ ”þ ¥‰ÿ XŠÿ ÷” Á¡I«V±³ÿx°V°)¬Ò³M®{1†Øy;q„b‡D²…بÿ e®ÿ c¬ÿ ªÿ ™¯ÿ ±ÿ °ÿ °ÿ ²ÿ ­ÿ U²ÿ‡±ÿ²ÿ ^¶ÿ Ò¶ÿ ·ÿ U¶ÿ Z³ÿ n³ÿ î¶ÿ Qµÿ ¨¹ÿ p·ÿ ]´ ȵÿ °·ÿ l¸ÿ ñ¸ H¸ÿe·ÿ_µÿ ¬´ÿ ®¹ÿ ì³ÿ ®ÿ V¤ÿ ¡£ÿ ¥ÿ –¦ÿ ¦«ÿ á®ÿ ¬ÿ @¯ÿ Á°ÿ¯ÿ Ò©ÿ Y©ÿ E©ÿ ¨ÿ Ù«ÿ ¨ÿ ȧÿ È¥ÿ ¡ÿŸÿÖžÿ [¡ÿ ¢ÿ Ù£ÿ âªÿ V¨ÿ ¥ÿ ¬ÿ §µÿ Цÿ Íœÿ ‚ ` €B _/ 9# W#ã#&##½!Û! !Ç#:$X#Ÿ#×#$Ä#ø$º%"V"•#X#P"‰"‘$e$W#®$¨$p#F"$3& “>®Fñ4BVQ˜?’ÿþ¶“þ ”þ”ÿþ¹”þÁ•þH•þÉ–þ–þ€—ýO—þ—ýO˜ýŒ˜ýM˜ý ýlÿÐü¦ü\ü"üDüÊüåüœü,üüÎü[ü&ü¨ü#üýhÿÿ?ÿÿuÿèþþÓþh(þT2ÿè0ÿÁ7ÿ*ÿt1ÿOE«/Ø.Ó.j(Á&)H'2$û((€&„&Ÿ$Ï%&õ$Œ%'m&t%3$Ÿ({& #–%…%“&E&Z$™'Ë'Ó('=&4%Ã$¥% Ï"É$y&É&ù':#˜#ñ$#_#0!»ÀÌ Ó w!‹#h © ‡!# O ¬ ”‚ Úƒ  ' °úíã ë· ÏÈ C Ö ¾ ê ß · ? z¸ ©{ "# ( * H* [( $ % ¸% $ b% , 4 ê7 <Å;9´:þ60:' u ØÑ Ý¡ [šþ @£À 3 ý ]  ì ´ [  Ô û K ’ . fƒ 3 ¶!ê/Û?ßPçT—\v ¼w  „ g\bsjqxÞ ý o»ü Ó«ý §­ý 9¼ý ºý Ô¸ý â´ý –¢ý žý ˆRçJ;x4ã+F †! ›! A Ç Z : ï s# S" «' ô0 8 ~F xF8U T tV .] Uh Õl #jCvîkˆ\ R ÅL 0I œI æL ;M 2P dU ¾Q U ÅZ ÜY ïX ¤X ö[ ] ] TW +W šQ ¥M =M“NLHD–BQ@ ^< o; Ö:É6 ó3\8r3(;‰7 ÏAx?V=>£?n:$8€=ù;­:›=#9;4z1 ¼/ Á- *°) ( , . 0. ß. S, Ö, , Ã. . Ó/ }2 ¯4 ã5 +6 )8 !; C:é:~;ÿ9¼3ð+ ‘+ ~& 6! ¾& } ° Æ õ! d% Ù$ M# & "+92¸;iE¼O¡XäagÇtôo wÿ s~ÿ }} °……•¬n¦Z¨<«P«­‘©’¥Ïp|7qèuìoIÚvPŸÿ ú¤ÿ å£ÿ â£ÿ 5¨ÿ ¡©ÿ _¡ÿ ¥¦ÿ &¬ÿ ʦÿ×§ÿªÿ °ÿ‚³ÿ µÿĵÿɱÿׯÿ ò³ÿ Û²ÿ å³ÿ ™µÿ c´ÿ #µÿ a²ÿ w²ÿ )¸ÿ /¶ÿ *²ÿ *²ÿ ´ÿ ¦³ÿ uºÿ S²ÿ Ú¨ÿ ’ÿ +•ÿ šÿ œÿ Ÿ ÿ ןÿ £ÿ …£ÿ U£ÿ £ÿ Ÿÿ «œÿ áÿ oŸÿ žÿ dœÿ ÜŸÿ ’œÿ ˜œÿ Y™ÿ ¡šÿÚ–ÿï—ÿ áœÿ Yžÿ ןÿ Óœÿ›ÿ ˜¨ÿ ì¶ÿ ¦ÿ ‡˜ÿ v UQ Ù7 a&ú$?#="î$³#/"t"À#9$$#Š#Ç$^$‚$×%O$Ý$#ª#E#T#ç$#."j#¸%Å"Ã"#Ù&C;ªFñ5’S ‘Rƒz‹ÿlŒÿ,Œÿ«Œÿëÿ+ÿcÿëŽÿkŽÿ«ÿ£Žÿ¢ÿrÿ*Žÿéˆþckÿ‘ü ügüüZüDüúü]üOü üÖü üBüãüEüVýìÿÿ?ÿÿgÿèþÆþþþó'þ¶0þÏ7ÿ"8ÿè31ûGÙ.á.J.^*'(à&#¬!j%&V&²&þ(%F"¢#<"– ‰%D# #Ø#Û"æ"á%% %>%e#0$ñ%R$%&:"ß!¥%\'_%k%+%]((T%;#k$T&Ö#!½á$J#¯#!¢ø Ê ¯c ¿  ×  Ó Ü¦l † ¯‹à æJ ; ¯ 5  ® ó ú  î > µ —aîW-ƒøT% ) ‘1 ù3 À. º. µ) u( ™( M, B0 4x:v>?J<.8›4R3_+c('‹+U.9@01°+<+¬*1)‰$† d Rä Ì"ê'g(_)5&$ _ M | T + Á ± å _$ ®( <% I- |0 Ñ/ ‡, q( O' œ' °*4.57 £7 67ˆ; U:¡>ØCÖG ­Hv]ï`Y_!%^!$g"øZ!ýS #‘S"‡P $HM &ÛB %Î= #I $'FkM¨\‘W ×N iJ ³G ND.AŒA¦NÖWcYSóJDGœ= 801g1À7J6;4;X<r9ú6 ë7 ;>IØgc‰ ²þ m¿þ ñ³ÿ ƨþ =¡ÿ Ô–ÿ +Š *ƒ }>uQt ß| G… J Ibhúmwó˜þ Q´ü ÷«ý Ý´ý T¾ü 0»ý H¼ü {±ý b ý %˜ý ¡Z¼O²F?C6£1±,)q%‰# a(ê%"T  '$  §$ ! ^  m# +š0 /&5= œE ÒR Nl Im hx ’‡ÿ »Œÿ ƒ3’yŠÿiÿj‰ÿè†ÏyZsîpˆh a çZ S YO ¨L ÜI !E fC;DñA©<C:]:*:7‰7è2 `42-3Ç/ *+ ¿- }+ †) Å* a' Î, 1 ô. ê) ( h& ¥$ ¹$ v$ £# ¼! ê" m$ Þ% P$ ˜% ) .. *2 !3 3ê5Y8<?>š?<ö9š5>0K) Õ$ r y9J P B   ô ß Q Ò h  ! & Ä+ ‡1Ã7ë5Ø7Ú7e:¯CÁM®U¾\žc Þl Ïs‘w;‚ðŒ““—Ë žŸL£‘•¼t!l¬€ˆpˆL%u‰š C ‰› ‹ÿ òŸÿ ,™ÿ þ” QŸÿ ­¤ÿ Û¡ÿ  ÿ ¡£ÿ £ÿ ¥ÿŸ§ÿ©ÿM¨ÿ §ÿ ܪÿ +¬ÿ £¯ÿ æ®ÿ w°ÿ ¯§ x¯ ¹ÿ ]»ÿ ·ÿ ¬´ÿ \¬ÿ Ψÿ U²ÿ Z¸ÿž¬ÿ Ÿ¤ÿ Q™ÿ oÿ ù‹  F „‹ ÿ 9’ÿ õ“ Ęÿ 3œÿ $œÿ f›ÿ m—ÿ ,“ÿ ¯’ÿ ¦Œÿ u‡ R’ÿ ÷‰‹ÿ7„ ‘‡ Pÿ v” šÿÈ‘ÿwŠ —ÿ ë±ÿ p²ÿ –¦ÿ B‡ ‹d C Å*"°"“#«$c$7#~#ª$1$]$g$M$œ%Ó%”%$ñ$r$_#Ÿ#,$)&#f"è#1"R"!!_!ò$ :½Gò7åRòT†÷‹ÿ-ŒÿlŒÿcŒÿ¬Œÿmÿ-ÿëŽÿ«ŽÿlÿmŽÿbÿiÿiÿ ˆþkmÿ übüµüÉüûüq ûüü…üßý‚üü”üQüÅüýƒÿÿÿmþïþ ÿ þ+ÿ4ÿ¤/ÿ­0ÿP,ÿ½3ÿïJ/ï,A.g*¶)Ö&%"Ø$¯$W'"'æ( %s#ö" "/ ƒ#µ%¨"Ý!m Ð#U#Ÿ&O$_&(%Ê#{$("[ Ü$##À$.!ò®#á"9! ‰!|Îÿ!¸ Z“‡âcè y A!P"H öXe 7 G Ä • W E y¨¼ â & ` £ m ) ‡ í 5 # Ó  ÿ ‰ f 4  ^#&=ÇRÜ Ú¦x/.K<s<v</9 Í< ¡= 6 ¯7r5K7…7Æ;“<:<N?DEGNDôDlABDBo?69«2ã-[-(ô#ÐÅ…9$ë/B299H766„3á-5*ÿ&ï– 5 ƒ N { 1 AN Œ ] ƒ)h)9.­6N?b?ŠA#AnF—H KûQ¯XR\•j=‚"¨l "žg "k $hg#»d$ó[ $T$¸N#èF #š: =7 ©4‰ ö% ?5 ·A ÕD oI*P`LtGÞ@£5 ,) ’ " 2»8456™753®6 7e=:w:û8Ú9:“?°I°n V Ñ­ÿ dÀÿ E²ÿ J¥ÿ À¡ÿ ^Œ ìƒ |{ut%} } ؉ nÜcígsmšvý’þàµü 2²ý ˆ²ý •´ý ˜»ý G»ý Ͳý Ný ^˜ý ãYÄUÕLæI£@¿:5õ/A,c'V+2(¶'Ü'G(§.h(È)¾"^$E$L!’!q !!©"ø$ 3+ ’0 0 5 =8 g6 ×; W? ÏD áK ™\ ‚p «{ Çi ça )\ 0] H[ Y X éU T }R uP ËK æE¶Q ;I >> ?U:²7ü;77s6@6ó5ó7ä6Ç5 7*8V9897´5y8;3¢1à2ã5Ë6¥76á5q33M5Œ7k642^,g+ä*z$ e# S  O–ç [ å â Jë L “ ¾ 9  Í   D   C Ü “! G)0N2:6®8c5Í6K=6@;?nAoIIU]Ûe’lät/}¦‡Ij˜u›O‹wYi±l p´VJ9…Ž” ” ›• ™ — C’ Ò“ ˜œÿ 1¢ÿ )žÿ ì™ÿ mÿ  ˜ E˜ÿ ó—ÿ 6˜ÿ ¿›ÿ ¬žÿ ( ÿ w¥ÿ ç¦ÿ `ªÿ ¯¨ÿ µ¦ÿ õ­ ¥¹ÿ \¶ÿ l¯ÿ <§ÿ ªÿ °«ÿ ¶ÿ “¶ÿ J£ÿ ¨žÿ ¤–ÿ l‹ ˃ ¸‡ N† ‘… fƒ +ˆ Œ ˆ € Š’ÿ¶•ÿ 2’ÿ lŽ Šÿ uˆÿ ûƒ І  ¢€ ª} °€ ä„ æŒ Ò‘ÿ ¢Žÿ ²‰ ͘ÿk¶ÿ l² Àªÿ ʘÿq tR Á2 §$€$##”#($ $&#¯$e$.$¯$g$á%‘%+$ß$ò#º#x#Ÿ#ï#î$¬#~"8# ""˜"Z#ç% ª=­?81ÚWÌ—ÍŠÿ­Šÿì‹ÿ¢‹ÿd‹ÿìŒÿdŒÿ«ÿiÿáŽÿaŽÿ*Žÿ[ÿiÿhÿˆþ£lÿ üœüpüüübû‡ü$üMüÅ ü4ü¤üü×üžüÇýâÿÿÿ?ÿBþYþõþü ýÃ-ÿ´0ÿ¬2þõ5X2ÿQ0ÿ®H¤/+î,Ô)'M&q(T%’'2&â'å%5'¾#É$d"w# 'K'*%Ø%$#¯%õ&Þ%÷#ï#!Ü#""v!¢#£#Æ"#ˆ#O"º$h%0#K È! Ü XÙ²Õ;z´ê ‰"3Ã3‚Ÿ[¦ 6 & ® 6Áp % u ¤ k  Ä ” ” ¡ - b Z¼.‚ “ © T Ç z N ¶G‰ÑZ´Þ$È>º sŒÀ¢(¨8tD K U Œ^ ©` ¦l)^ÑV>RŽNÜL“IdKmKPN~MGýGyG!IECp?²<€7â5¯2½67l7ç9«9™9G65Ÿ4­4•3 0e00 ½0•0ü, «, d.k.‡1Ø3‘;ç>•E+F=J LÉMÈMÊN\OZSœWhY¬Xbee9‚br m"zi!d!’Y ÜRJy?;@ %? =[.I!—+YMçZ ÝG£5Í+ ¸ c Ä ‹ Á Ø# ;<4>M<è@]<<G<-;Î:å;Ð<Ý;=>ÃCüRÞi2| °ÿ QÀÿ I±ÿ ¡ÿ D˜ N s~%](@$K »   F ¡¿ ™Ê — Ø b" %…%Ï$  <   à È Ð  R!K Ò$è1<4D6ª5§9m>#ARFÍJÔHëEªI¿M‘Xia dÿpp|&‰† †J€Onfyd2V BÃ`¢Œ ¦ ¤ ë” ¥– R Ì ê  š ‹¢ÿ ¢žÿ t• Ž˜ @“ ËŽ #Ž Ì’ ˆ”ÿ 0•ÿ >ÿ "žÿ  ÿ p  Í¡ÿ ¿°ÿ ñµ L³ÿ ð¬ÿ °¤ÿ Õ¡ÿ ˆ¦ÿ °ÿ #µÿNŸÿ m™ÿ ­–ÿ ¦”ÿ ©ÿ iÿ ‰ XŠ O… V… W C•ÿ i ÀNÿf‰ Ê„ —… L‡ÿ õ‡ÿrƒ H} . j Ñ€ Ù‰ †‹ÿ Œ aŠ ‚œÿœ¹ÿ ´ÿ ª¬ÿ PÿŠv s_ 7 ã'é#Ó$Y%#¢#©#ð"0#r$$N%$û%D%,%!%Þ#ú$R##¸$I$*"¾"¿"‚"9!Í"É$Ô& lB³Hq4"W—€Šÿ¤Šÿ¤‹ÿ$‹ÿ,Œÿ,Œÿ£ŒÿªÿbÿáŽÿXŽÿaŽÿâÿ!ÿ ŽÿЈþ«lÿŠü“üüSüÑüü†üKüŒý üÛüü üü üüþÿÿÿ?ÿtþLýåþ°ýq.þ4þ…2¡2þ®,ÿ¦.ÿ+FM/G-$+>)ú&ð&^(ï%v$Q' &á$h$ $ß"´"-!ó$X$®%o$g#·$ý$&!¼"Ý!W" w"!_ N!Ô"Û!Œ!Îå»!Í’"Ge1 ã!»!r Ï"<„E²"l éÇMVç&õý í = M SÑ å  <ø ) ^ 8  ¼ 5 N 4 9 ÷Y 6 Ò Ã h  Jæø UZ»ùæ¾ÝÝ!ˆÀ5‡€F,<t  dG+˜Q]“X"i„ƒ `‰ÿ ²… Ɇÿ ? Ývú‰yt6i{eþX«ZÉLÅKC[AÛA<h=b@{A+AŽ?$:Ô9©9 9g:,8æ8@7 ß7 ž85 Í5 K3 Û4 ‰6 4 j6 6 £7 æ6 ø3 ü2 œ4 Ì1 “- * x- @- ¬* C* ±?7~nxÃj Mj!mf V\P£B FDþDq<$;ã4â  ï ­swD>(>  À|—ì ´T'£<™B|D@Ö@==J=…;o:{=S=>ˆBNNæ[÷r9z­ÿ 4Áÿ P«ÿ vžÿ ¦œÿ ±‘!}iw9uRw Èz Aƒ Ry í_Ge®k±rzƒÿf±ý e°ý ¿´ý ¸ý ¼ü 3°ý ήý ï ý §¡ý AjßW²X€UROKIDCBz9ä4©4j5/1ì=!8?75ú3=3ø. 4±,Ý-'1Ü3m/4¥9C=8M:C73*0Ì0÷1/Ì/ý/K1î3o4$2è1,á-*u'ô'm(l)(p)²%'r&v"Œ!á%- Ó&m)›*Å*Ø(ÿ)­(9(ð+ë(ð)**(v%Æ%#"ƒ"7"Ò$'3&ê%j%M%Ö(*%£&Á&¸)ü(„+ï+Ô-’)¹$=! Š m „ ³  Þ ” æ"E&1'Õ+É*:&—$< d = ÖN W 6 t!C",& . 3º5ã7¿AÈAkFyJ¿O´U|XbS’KELDPƒ\dìpÇvv‡s1g†_ N¹:X<~¸Œ q u‘ â” "‘ šˆ ê… ö ™ P ÿ ,›ÿ ü œŽ ‹ ^‹ ¥‰ ‡ Ž “ÿ ð‘ I’ M˜ÿ áŸÿ a¢ÿ ï¨ÿ ïµÿ b¸ÿ ¡±ÿ ~ªÿ £ÿ ›ÿ l¥ÿ Þ°ÿ c³ÿ „¢ÿ b•ÿ `“ÿ 1 ÀŠ † j‰ Ó„ œ† Ћ Ñšÿnœÿœ›ÿŸMÿ pÿ ©Œ ͇ Ú  ‡ÿ *„Ô Ø{ ¬} vz ­z w„Š †ˆ N¤ÿ мÿ ܹÿ ©®ÿ e¡ÿ Á d ‡> '+ %#à$$#$$^$_#7"[#q$0$µ%*%'$±%$$:$Û$b$9%=% $g#º#Ó"B m"#"–% ¦B Gè3 X—CŠÿ¬Šÿ£Šÿ£‹ÿ+‹ÿëŒÿ«ŒÿëÿbŽÿZŽÿaŽÿàÿŽÿØÿŽÿÙˆþãmÿüüšücüœüüÓü ýüüËüOüŒüÃüŽü…ý¨ÿÿtþcþøþšýG)ÿ/ÿB5‚0ÿk1ÿZ3C\/­-M-2)ë(&\%¿% %%Ü% '"#F# !'%$"¶'ö$2%"ê"î"¼%²%|#Ü  Ø ¢â Ì#s"{õV!† &ý:\!" g! !Ñ©"Q ÷(€ƒ#%/ 5N”`\x[y\Lg.avc®lÿtb[ pV X MR 7N pJ ±G û> á@ Î= ,> 5> w= ±8 Œ7 6 D6 3 ¨2 t2 Ü2 †1 0 Þ1 –5Œ4]1m/¤0v-K+ž,¥(c'"&Æ%xRuŠ‚ŸnklØfF^M2FñF"<¶9ë;¨7  E ‹ß4Dî# ?$·˜!*’» E%æ<&DœCA´@@< >=>q?àDüGQ]„h:uå†ò§ÿ vÁÿ ­ÿ `£ÿ RŸÿ W̃Ñ~ y z M} <Š =mEc gårbví~ëˆã®þ ±ý ê³ý D¿ü 0½ü â²ý ”®þ ¡ý džý [xYÝ_ŸX1VGSÃS—MWBˆ@:>¥=Ç?û?«<ò@g=}7V9Ù323í4’0­2÷1o4©;[=]<’=!<(:J;;9 61 ƒ4«8!;¤;¸:2Á4Ú1+ä,Þ.?-Ù/)™.ƒ.O,g,¡-^+0*˜%ÿ*Ð(º+î(v'#+p+I+Ù+*Ö)*”-2,+Š*ê+ *V)i(ë(Ì))Ž(€*9*å+ +Æ*N*_,!-D,§/º./[+(¢%«á 5  $ O G&O& 'h)ö-ã(M)"&#Ú  0 è :  ¶ T  }$$Í(å3þ58:)?ˆEK³M:S³X_¼ehk@iúe ^[Vdªi9h©`mSPA’E—uÄ  c“ ¢™ c ‚ 〠ƒ ñ‡ í˜ ÏŸÿ î™ÿ xŽ Š Q† ç† oˆ íŒ Q ‹ Jÿ ³Ž ”ÿ ¶œÿ $šÿ ö¢ µÿ ³ÿ ÷¬ÿ =¦ÿ ž—ÿ å”ÿ ì¡ÿ ¬©ÿ î®ÿ Ÿÿ ¡šÿ #ÿ ñ‡ Nˆ † ¤† › ³ u‡ ”ÿ­˜ÿ'—ÿ' Êÿ ­Œÿ ³ˆ K…  &… J†ÿs| ñy þw z Æx Ë„L‰ÿ7… äÿ m¦ÿS»ÿ Ù¶ÿ ó±ÿ R¡ÿ€ Th ZI . Ý$J$&$)"ß$%"ö J ž#=$:$7$A$<$3$ô%9$)$¬%$e$Ò$“$Ð$ì$n#!]"’#-% }@F©5ùV½˜ŽŠÿkŠÿeŠÿ]‹ÿ#‹ÿd‹ÿÛŒÿ#ŒÿâÿÙŽÿ ÿÙŽÿZŽÿáŽÿÚÿ ‰þ#lÿüÓü ü¼üßüçýü”ü~üLüwü¥üÂüSü-ü>ý}ÿ‘ÿ}þÎþòþ˜þz'þº,þ¿3ÿc0ÿj4ÿÝ1GÜ0¦,W,ñ*5&v&§%%g&'È#Ô$Ü!ŸŒ ð!§"":"Ý!6K‘Å$9#3Å Ìø F oÁé ƒ!p i!/!ezYý{ T˜ˆé#SË!ë C#ðM ¯ þ ` £i < ™ „ [ ç $ ã Ÿ   À | N | ; ' - g «B G Q 6 W  j í ç  Ñ > Z É,× à ) +.ƒ[æÁ2®JS&îkÒT+Ò ‘ Aƽ T ÷ 4 × É†¡xt³‡°R’Ðð¸7™“f ¼ | ÏQ„ ‚  " 0•*\Tª J å® ~mJV~åh\n·d!¸b¸YîDrEÞ@=@¡@<…-A 'ÇwF“Qÿ, â ˜´Ýþ: — ­(K?¶HžAè?òAp?><”?H="GˆJVoa&k O€ σ .Ž Þ£ÿ {ºÿ ¡®ÿ Õ¥ÿ ]›ÿ Ùÿ çƒ } z ÷{ € ÿ :j@cj,pÊt™}0‹«þ ƒ´ý Ô´ý ½ü ·»ü z´ý °ý .¢ý išý lˆþ ¤Z ^V^Ë[eZßY±T MYH~G@ö@^DAF¤C¡Ao<Ø;7Õ74U4j;›75V9°@">øB??“> <Ÿ9O7È0È/Ÿ5C7ÜD1@}8280¯0o071µ1µ1K/Ž/Ò2Ã8 2>222G2ø1ø2ö2þ/‚0/Ô-õ'&Ÿ)$ ¾  @ Ï%’'+(Ø+ù-ï*Ä+v% Ô)_$! q" ß   !ˆ$± : ó02V7¯=?A«DþJßQZ¼a™h pV{lƒŽ…P…ju*h `]QatfŽÏ” ¦” ›• '˜ ²Ž ª « ­ v‚ 7‡ – Ì›ÿ ó‘ÿ 0 ÔŠ ܇ Z‡ §… v‚ ¡Š ˆˆ щ Ü’ÿ :˜ÿ /ÿ 3› Ž  4µÿ “°ÿ .¨ÿ ï¤ÿ dšÿ ™–ÿ ì ÿ eªÿ -°ÿ  ÿ \”ÿ #‹ ˆ І ߃ Û «…  „ eŠ Žÿp“ÿ 8•ÿ–Ž ÈŽÿ ¬‰ ͇ÿ ñ„ ̆ R‰ÿ µ€ ~ >{ ¼x Ãt Ò~ ‰ Á‰ÿr‚ b‹ÿ ¶ÿ á¶ÿ ~¹ÿ ¹°ÿ c¡ÿ ˆ Ëp 8] 5 &%$ƒ#ê#f"l""Ó#ë$+$Ã$ë%é$ª$3$ª% %C$I% $y#’#ã$+#{"Ñ!É##$((ËAG70ÿvXÇ• †ÿâ†ÿ†ÿ"†ÿY‡ÿZˆÿˆÿYˆÿÙ‰þ—‰þŸ‰ÿ˜Šþ_‹ÿX‹ÿX‹þÖ†þXkÿ‚ü%ü¿ü$ü¦üGýXýˆüÖüüÆüœüýùüÌüýÃÿÿ?ÿ|þÄýVýîþ()þ=5ÿ`4ÿâ0ÿ4E3ˆH\/¿-,}(w%«%œ$!&š%û%G!' h¨) ­"Lœ""µî!úóÒ  ö A  c E  nf"g¬,ºÄýC!Qï þ!´ "FÕ ø ó û  àA Ò Ø ? w 3 ±  å å &  Ö Å  s– 1 ‰  † ›   U ¥ Z Ô _ òÉ õ w » Ì @ñë º t„‹÷¢ÌLc6Ú{2r0¨×'[nµÖOÖ•€.Vo˶~þ ¶cì®%è—ÈÛ«Ã~À"ÿý»ù¼%*cÿ‹¡~¦­W‘tB…xu ‹vÇmœle Ú]SK”G!@E>m<IB!q5µßîÿh4v$¤ ü ¢ A¹Öj¾Uþ+ :CGZB7?ž?*?ƒ>?=“?GŸJ¤Vÿ^7g¹w ‹€ Œ H–ÿ r ɸÿ f²ÿ Ÿ¢ÿ œ™ÿ ÿ ¿‡ y ){ ¼} Š… ïÿ jiˆc^lâu³w0{ŒG§þ àµý ‚±ý ˽ü ö¸ü {±ý ®ý a¥ý [•ý 4ý ‚^¼X¤_Ša|`€` ZäVRíNEHEhH³IáIFE¥@=ÿ:b97„;‡8ú=m?µB.D~Aþ=ç;¼:4Þ62E2õ8þ?+?¸Až:ö4Ô*¤,Q(Å);.Z.Y0m/!362¹,“(**H.µ0’220\2P2n2†21¤1}34°/¨0]/[1›/¯0¾/ï3X6U66Ô:Ì9 8Ø8Ñ96!4D3j371º3m1 1;/6,|*€+‚-#,:(£ 0 +)2*»*þ,0Ö/í06.‡-¿)‘'ó)+s+V"0 ¢  ‚    Ë$ç+–2¥59°B¾FnM[QxY%^Œdoz䃄“Œ(‘ • Œ°‹/ )” “’ • ï˜ .𠝔 å ¬ i~ -ƒ œ„ ‹ —ÿ >—ÿ v ˆ S‡ „ å„ %‡ å„ áˆ P‰ ™Œ œ”ÿ ¿–ÿ ,›ÿ : ÿ ï­ÿ é²ÿ ª©ÿ p§ÿ ]Ÿÿ #“ÿ ¥ÿ }žÿ qªÿ ¬ÿ ã ÿ íŽÿ ê‹ Hˆ … M€ ’€ à„ –ƒ ŸˆNΑÿ ì“ÿ éÿö‹ÿ ²‡ V‡ ‘ƒ ›† ƒ ] ~ ë} "} ê~ x ã’ÿï‹ÿ¬~ à‹ÿ 3¤ÿÖµÿ o¾ÿ ¦¯ÿ ¦ÿÿtq ¾a B %) ä#$Ë$##/"A"‚#¨#ø$ª$s$ý$r$3%¤"ú#¶$$$#ç$X#é$Ñ#†#„""e%¢(ID&Ho/aPýŒ t{ÿ¬zÿízÿå{ÿë|ÿ+|ÿë}ÿk~ÿ3~ÿ¢~ÿ™~ÿéÿ©€ÿ!€ÿ*ÿ(|þ,jÿÁý½ý}ýåþ‘þ1ý6þ‘þcþÒþÝþ¾þJþIýWý¯þ ÿÿ?ÿÿnþ=þþýg,þ?1ÿ.ÿ~5þÄ1ÿ0ÿ†G0%-í,r(ü%F$³"B ª ë! S n O   -  F3ÙÒÚ’q ¦ ®  * Î « ì 8 ¤‰ž Á ½BÃì -•!"m D Š"ƒ !´!!¾% W ™ à ¢ 3 í å ( Ó õ 2 ³ a ï  v ·  ñ ×  w « | ’  ß  ü Ú Í ? ½Ñ Ø‚‰ 4 Q   „ “‘ Æ   ¹žbA¾ªh˜v\ SÝ3Éy8öÍÒɰK„„„ltkÕ`9‹l­‰•%€–`Ûï/³Úý%ïÈx8Q²\Rû) 7`Naon ¾dÈ] ]ÿ?ëIDAôC<×;ƒ?Z5„ Ûj)DWè+)5 ¼ƒ PYz¾ c- ›ETFÀB6AV?÷@@BACEoIbOžZbcq Úˆÿ Ìÿç’ÿ ¨˜ÿ qœÿ lµÿ °ÿ 2¨ÿ B ÿ ™Ž T„ /| C| Ò~ Í‹ ÿ fªdnNsñuͼ’Ú§þz´ý ´ý ‚¼ü hµý …¯ý â®ý $¥ý h˜ý ežý ÀgY)^Ýc”c€b¶]Z+TçRºQ®N6KwM°HkLUGBG”D¼A:?;=;´;É@,EAB…EpC„B‚?Ú:ï87#374Z6<ÜEzAÍ;}4z+ç+I(¹(“,¬-º/Y4.3±3®4˜0B1/2ð.F.ó0é284Í4Ç4Ž5û6=5‡96Î2Z1/#//×1¦1˜3Ú7‹89Ë;Õ<B<:_:T7è7%5­4r3`21€5"2ô1¹10¦/v-@.N.I'Ç$ % ¾+n..Ï4•5¡4Í0!/0ô/ø/?,Ó,& $!ê!Ó!Ë"R'?(-3g6C8•=ýC6H­N—U¼]Qdtn”u |=‚ì‡ ß‘ÿ õ‘ `“ B” X” ÷› ¹š ú‹ #€r} î€ w æ„ á“ÿ 2›ÿ 2–ÿ ù‘ÿ ±‹ ‹‡ S… ,† f† Rƒ !‰ N‹ D Š’ W•ÿ ±™ÿ ð  ‡±ÿ ³­ÿ í¨ÿ ½¤ ¢ÿ — „”ÿ ú¡ÿ rªÿ ¦­ÿ X¡ÿ dÿ }Ž Í‹ Yˆ ̆ U€ ˜ƒ X… ‰ˆ ŽŽ‹Jÿk‘ÿ ¾’ÿ þ‰ #… ¤… ë‡ „ Ù t‚ t} ²v y ;ÿ 8•ÿ¢›ÿÏ€ 5‰ÿ ù§ÿ ‹¶ÿ n¼ÿ í¤ §ÿ “ÿTw ©g QM h- O" ·$‰$7#ï#á# "‰#2#²#¿#S# #Ÿ$7$7$ë$²#("è#s$2"©#¤#B!Ï!Þ"Ù$˜(AE Fø0ÿ®QJ¶zÿô{ÿszÿô{ÿk|ÿk|ÿt|ÿr}ÿ*~ÿa~ÿ™~ÿéÿ¢ÿé€ÿ9ÿñ{þ«jÿRÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ?ÿÿ=þþþýR'þÖ3ÿ3ÿ]2ÿ·.ÿ93EÛ0ì.+ê'#Þ 4 |!.  |! P Yâ , ô < ضçN±  Œ  ¶  ¦ Z  ‡x„„ Ïã“ü \ šb†kG !# × Š"‡!‰ 5CÚ ¶ õ ‚  «  L ˜ å ² Q / g   | ¤ & – » & Ø 7  i˜ · @ / K ì i 2 ”S⤠ | t x ƒ “ w   Œ T Ϊë{û¯2ŠÑ?do[É¿"Ê £–ýöKñÙµ¼SÞ¥GB½y'µ½3­D3GÞq è\Ý'ÆÖGë ™?`ö&ŸB°cYh lŸX,]²I«G›Kè6À9H:\=5Ì2²ÉTQgR#7œ#‹.—}%Ž#h C¢µð Ç+ hCyC˜B ?/?²AÞCkDïNO`Sæ_(ljƒÿ Z–þ¼“ÿ S—ÿ ¢˜ÿ 0ÿ X­ÿ ë·ÿ ­ÿ Ê¢ÿ Ž Õ€y~ F •€ Ñÿ =ÿ •kafÍqDsNv‡è‘›¡ÿϯþ G³ý Šºý Ƴý ®ý Ì«ý bªý šý Öœý ÉmsT9Z@ceke¶bE[íVƒR¥R¬RPO'M¾KqPtK0M ISBDáDš?w@­GI=J…IB_@w=0=6:8(8M747îC2GlB;º-û'ô&­(†,á0í5Á2 5­6i6«8E2‚0´1/3‘4 3±4£7I7w7‰7‹97O5M3+0e1 /®-@0n11l4Ú6Ý;==€<×=;¤;œ8£7-84¯2C3ó4£5h4$3i161ê1+0÷1†1Ì,ñ% _' )9*¦/2O1¦30`3p3=3d240ë2k,c+Ê,A%è% ¾)Õ*+'+b2f8}=²ADDM»SkY¡^Bf÷nÝwûƒð…‹W3)‘Ñ‘ ‡ Y” – ³š ­‘ ä‡ ‚ ' ¡„ ‚ ‹ ” š • W D‹ ÙŠ Õˆ ”… ¶… ˜ é… _Ž V‹ ”“ G•ÿ úžÿ 4¥ ’¯ÿ a¦ ¢ Οÿ u–ÿ 9‘ ˜ÿ ÿ£ÿ )§ÿ ì¨ÿ ( ÿ oŽÿ ò‹ ͆ •„ f„ '… Š‚ / £… ˆÿù‘ÿk–ÿ ”ÿ ° QŒ ¤‚ Ć çƒ ) û ³ƒ 8| ®x ê Û‘ÿ q˜ÿ›™ÿ× ¤ƒ ¢ÿ ‘µÿ *½ÿ ±ÿ 3®ÿ‡—ÿ| aj ÀU F6 #˜#æ%l#:"ö"H" "€#é#¸"ù"ú#ü#ð$'% $X#q û#ã#§##%"¹"‹!""*%) ÿDEF01’XŽ zÿ#o}hÁ ~ ƒ ò — E B   ß = û T Þ Á  Æ 2  b1 r £    q  ¬ Ð Â ¦ † Î k ] ê  ·Ã  ® ° ‘ Ù æ7 k # » \ ,  W×ù) ›²©œ‰¹Ku‘BGÁ3Hl€ÁGNC)Äkö°é”#ÅlzŠýÝ|ýÇœ[¨Ýù †€°2g†> ˜n$h!¸dXq^lMRÂRQ^N MšOFO[QôMAIòC=C6DþJÅMmMzJ×G+EÅBy<>¬<:‘=vC0IàJàAÒ91¡.*Õ-y-¡/€1m6Ë5z7)6q5`32ó1«4ž7T8ö6Î58õ;88z9I5©4ª0i1^-C.ƒ4Y1ö2`5Z7Ú;L=>º?<“=I>:Ý8±6Ø7¦5ø5°4*5}4y62'0D0 0ò0Á2,*&'O)¸.0Ê554ü5ü2/4^4W5]2W1Œ0•/Ú0­/=0k-¸,ç-S*ˆ.w1š7å:æ>FDJVN‡U¡]¸eáqÀv²~Ÿ…6‹ÚA!Ž+Š`Ž o‘ î˜ ´” L‹ f„ š~ ±„¨‚ ß‚ `‘ Ж ]š [” ‹ ä… ¨Œ Œ † j‡ cƒ °ˆ ‹ ‹ Í‘ É”ÿ õž ¬ÿ )©ÿ ÿ¦ÿ ¡Ÿ œÿ 5”ÿ ù –ÿ ö¢ÿ ó§ÿ à©ÿ Ýžÿ ¨Žÿ 7ˆÿ ½„ ¦‚ æ… ¢‡ ކ ƒ ÔŠÿ1’’ÿõ–ÿ¥‘ÿ }Ž … 6„ Š Ó… ¨€ ¿~ ò~ ?{ °x ±ƒ “ÿ °›ÿ ˜œÿ˃ ¢ –ÿ š³ÿ /»ÿ Ñ·ÿ ]¬ÿ ]ÿ–€ Ÿp ñ] ÏA ×%ˆ#¥%$#ž#§#a"0"#ð$ $,#Í"Â#$l$`$&$:#ô#/$[#ð#³"›!Â!¨#Q%S) †GýFà6 XLÊzÿ,zÿìzÿëzÿó|ÿk|ÿª|ÿë|ÿò~ÿ)~ÿ°ÿhÿ¢€ÿ €ÿi€ÿh{þµlÿ ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿwÿÿmþ:þhþ©ý¿)þC1þ/ÿM1ÿj/ÿþ0ÿ–IV1.U-%ú"å!jR j¬ð l5 a ˆ F ñ ü Ð — ž  Ø Î ô g © Ç~  +  » )   Îe÷-f„­óT &K  Ÿq ~ ­ ² & ¿ P Ý © H ýH ´ ]°ø Õ I x   / ~ % › ´ V M N Ž È ’žL ò T Ÿ w e ÿ€ ­ Z œ + HC y M ¼ C9€™ ƒÐ{ ž‘{«m…ò<5P’´Ê¸ñLTx›\:° Úâ*ÆÉZ7¶‚ÉSÕC4SKŸKôVH8£Øuüg £eSr ìd ñ__UÕY&X³PéXã?“A,<J5/¥ « ‚n =Q ÇC81++I)a!ä&ƒ*p˜ m˜Ab ¥A{Bn@·@-AgC_F KPÖT³ZÉn '†ÿ ‘þ lŠÿ ÛŒ Ì’ Óžÿ 8˜ÿ æ£ÿ n¹ÿ ¹þ ½­ÿ –ÿ :‰ 7€ C~ ¬ ¥ÿ (Žÿ Üi¦lõo7sÃ|ª€Ú“ë¤ÿ“®ý s¶ý Ì´ý Õ¯ý ¯ý ›®ý V«ý מý ü 8„þ :V ]·`0eÿgîe§]U>VºTVRIQ‘RÝQ;KJLÛN™U*PèL?K…HñN@S£SªSoPÄLGyEÉEDŽAVCÿHLkN JàB”:1 * (ê,w0¸1›7ð8°<¥<Q7L5¡4 2¤5‚:í9O:99Á9ð:‚:|5¿5 4ð7b2..u/:4«19193}549›<Ø@?¾>ù=Ô@E?€:98§6¬56:502š626p6â5'1ª1r1o0´2Í0&)?'‹,g1'344Æ5¿3‡5Ô32 3Å4º2*1Ž2L1Ê31Ø1¸3Ñ2d.y2/3!7<ü@­DâIËMQTï`l¥t¾{w€ª‰_‰]‹°Œ¥Š­Œó’ ç” qŒû‹ U„ Ù„ #‚¨„ §Œ Ø“ ê™ ¨š µ˜ ® ‡ dŽ X‘ Mˆ ¥‡ - ^‹ e‘ €‘ À“ÿ ù“ Ç¢ÿ ¬¨ÿ ™£ÿ (Ÿÿ ºÿ °— ‘ _‹ ß” Ì ÿ |©ÿ `¨ÿ ÿ Žÿ µŒÿ 2‡ “~ >ˆ I‡ Žƒ ž‹ ŽŒ“ÿ õ™ÿ '“ÿ ïŒ ™‰ ñ„ µ† 3‡ + ‚ 6 ¿~ û{ ·z - ž ™ÿߘÿÐ b… ‘ÿ ]±ÿ Ù»ÿ Sµÿ 0ªÿ Wÿ ^ "r ¹e lL™(2#|# #•"$!Ð#z$*#˜#Ï$/#ú##$3$²$ #Â#$ð$Ì$­#ê" "û""_%M)‚F>Ha/ÿmS¡Žâzÿ4zÿ6zÿ³zÿó{ÿò|ÿk}ÿ"}ÿj}ÿè~ÿéÿqÿé€ÿh€ÿ™€ÿ`{þílÿÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ²þýµý?ýE(þÌ0ÿ,/ÿ2(.ÿ­2ÿÖF`0{-Ÿ*h&˜#ä"*Æ œ ÷ë 9 ' ¢ N * P ‡ ýs û  á Ï! g !8 ¥ } ÷Y ‚& M ‰  î w zËœ“º‚ –1ª 6èáh Î  6  R ã / þ ³  p N â Ï H Ô à R° åÐ R  ¡ ® ) S ¢ Í ‘ )¥ ‘¸Ü ¬¨ G ì Ÿ ) Ï È ¯ ä !   vo - v / ª Q¢Iµ½  j¦¤zSñ!Až…ë¬Sl­÷*ƒg ùas„¡¥¤Ú:Ùk*ÙéÁèN š=  䝨$ lj ¬p ”c '_0az`ÇYâs uS†I<à<}7J.†  ‚U=^ iJn:»84t%“À#2v 웆‚Ïñ#·C£B¦BS@ÛA2CêGŸOHVYÒ`át OŒþ =þ ³Œÿ ¥Œ Ž’ U›ÿ °—ÿ lžÿ õ¶ÿ X·ÿ Å®ÿ Òœ ƒ =~ å ÷€ È‘ÿ õ‹ÿ =jÂm"rÃv­…6„T’€¤þ¶®þ †µý ™·ý È«ý Ó¬ý W­ý ªý …›ý ¨˜ý œˆþ Õ[¼YO\eÍjaf%_’WFZÚW(V8T>RIQlOÀOÿRêOuYYSóP…S¶V¸YêZX,SCNK!HsDÞDÓF‰I#KBR*RrOõ?8<{3.E,.30-36ÿ:š=…>†;7O6š8Ê:~<8;®:ð<¨=\<d>ð<;7ƒ9&8D4I/°2.0á2¢12-4«6ô=DAq@©>_?@=Bp@‰?:¥7E5‰4ø8e5¹7w5ê5_6(1À20²1î4v1O+Ã*0+0g3ƒ5°4Ð43w4–3j2Ê1Ï5ý3Ç3n3Z5›4Ù6.4‘4C2Ð6H;ò@>õ;Õ6.–.¸2§3Þ6s;8>A?J?=‚<8å6A=Í@›=>ë>ã>-=h>¢;ã8`98˜4´3?0É/80ù2¶5v9y<Ï>ÝC¦BôB»A„AúCíA=š<X6ù4ù4Ê5K8ù8w6ª7/7ï3µ4-1ò142k2{0§($0ž3L6A5†77¼65Ô4€4Y4Ç1×34˜4s5ê5c6u8õ7s848;¯?›@´F HWK±LüL%S=V8e pÑvJz{ï܆‡Ö†þ‰ë‡(Ї Ÿ‰˜Š Q‹ Š ¤‹ Û” ’™ 0 µš î› e• É’ —˜ÿ ðšÿ þ’ ÜŒ Xˆ }‘ Ó‘ — Kÿ ¿¤ÿ j¢ Å› '™ —s“å’­ëŽ(™ÿ } ÿ »¦ÿ %¡ÿ b• @‘ Ê _† æ‡ $†  ‰ IŒ Ï “ ËŽ [„ l„ ƒ q„ 0… ëˆ !‚ x °| ô| ê} | dƒ † Œ›ÿÑ“ÿc„ ÿ ö…ÿ ø§ÿ Ÿ´ÿ »ÿ ž­ÿ ¦þz„ Tx Co G\ ý4 Š$Q#"y!­!G!œ ë • ƒ"¾#‚#é#¡#y#‚$S%Œ"X#P$%.%>$à&O#"’%M(ÁJ~G 1ÿ)Z ‹pþ§qþqþqþŸrþrþŽrþÝsþsþ”tþ\uþuþ”vþTvþÓwþ sþjÿ ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿtþþ¢þ þ-þ081ÿÄ,ÿ}.ÿ¨.ÿG”-µ(î(õ$Cà¯! Y  & À ³  ½ ±  ²ø " ; à £    r¹ d®¨ Fy Ó Û Ý X 4 õk G`~H­ # ÿ´ª C b ó ê ™ G ¾ Ö › â  ” ï X ï ú 6 c 4 ® • í 1 O ¡ “ T *  : á z © ã \ ÊzÄǪT @ ü w ž A €   â — ð  ž Ö Ø\› Ð ÿ } " G 3iã`}cñü€ûHt=mû*`€lS¨g°° á¨^ø.ñ»_W§ñù¯—ú¸¢Ø" ]5Í` r cp !(m ÅWSmt!´SûB9±4Î/!Ý^%?˜Y ,@&5.÷6o(N" W$ÿ*Ä5Âî$@— ¢¯? _CB NDEIˆPBUƒ\/cPr “Žþ fþ jÿ  „’ÿ d‘ÿ n”ÿ õ©þ ² ÿ Xªÿ Û¿þ ¼µÿ ठ’ } } Ô… •ÿ M€ FfVfkhw{=ìçížþûªþÉ´ý ·ü ÿ·ý ³ý “±ý ¦ý WžýWœý ‚’ý å`ô]Âe;fygígkeÚ[²][]Ë[XÛX¥TËVVñQ”T/\`]ªcmfäeócô]Y~QÛPýODO†RyV‹U‘UU°QêDÈ=Q?v2—-Ú0¿2˜6Ë=BvBAÏ>¾=1>†?(@“CBqCYAB A•BÄ@£<);¬;ö:[5o60ù5§5z5.4ó9c?A9DµDÚCÔA¼B[D)B @ý<Ý957E616˜6Ù6A97(9&6o53 3î3+0/.+F.w1$6ƒ8ê:9÷8æ7ñ6þ53Y1Ó4$5€5o7\8(8Ô:e9ê9ß=i?@@óA¤B FÖK—L‹JŒP?U\·gÊks>{Dyô ƒ?~B€΃ …¡„ Ù‰ ’ƒ +… –‰ ܈ - ³˜ ™ [“r– t’ ¯ X“ Jšÿ ¼œÿ ú“ Ž ]Œ Ý’ Șÿ yÿ *šÿ ¿˜ З˜–`”¡m UŒ ž‹ ”ÿ ð¡ÿ p£ žÿ º“  _Œ Ј ê… îƒ pƒ `‚ µ† Ò† Y… q j€ ° ¾ G} ñ öƒ „ n~ »} µz 8t Lw ~~ £Ž ÁŸÿ™ÿR‚ÿ { „ Ë£ÿ ™°ÿ ˜ºÿ Ù«ÿ §ÿDŠÿ3u ôl Ú^ þ@ ç$ ß# "°!´!"|!”"D!Â"Å"Ä"1#B" %h%H%Ï$¹$G%@%:$ã$$$«#»$:& )¹J«Dï1ÿ­TÊŠŸmÿ#nÿbnÿ"nÿ¡oÿoÿ pÿ pÿ qÿ qÿXqÿèrÿ`rþæsþgsÿ˜oþ¦kÿÅÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ|ý¿ý.ý¾"þá)ÿã3ÿ#0©.ÿ0ÿî4 Gi.‘(!%n"qÝz"k ¥#dH  ¶ D Ú ‚ ¶ u ì 2 Ý ¼R ` ùŠ,,ò ÐR  ¨ * ^ ɤWžc›ÕˆL Q ƒ Ý y ä å Æ ¶ ¢ á = , ™ è  ‡ ¾  Æ À ƒ 7 Q V  ¿ k D 2 Ø b { ë — Ö@´6á”ð‹Éˆ  B ¥ Ê - • ‹   î r  ‡ € p 3çÄ É _­ ” H Œ i ÷ á3tK:[‹¬L®37WÅ '2«Ý:”Õ'îL?Þê“SñgZø0éÍEƒ½)|OKL ]ðZ—då^i ág Jø:-9¦5Ý+t A·ZEl91½/Ì-ø&y& ÷$Ÿ(—"¾_kß0”Q+= CˆC“DÛHLRCXõ^çk ß‚ÿ Šþ ó‰þ »Žÿ ’ÿ â•ÿ  ‘ÿ ¢—ÿ \©þýžÿ ^«ÿ ½ÿ ĺÿ W¨ÿ <‘ ¬} ߀ χ ²”ÿ Swrg?dþh zP|r•Žj¢ÿϦþp¯ý |·ý ̸ý Õ³ý K³ý ¥ý dý Ÿü 9–ý Ùb7[_jbf¸itg(a^Õ]]I\€[”_;\+Z¿Z®[a/btd´jJkeg<]¡WUÞPÄQºSâSÄ]—ZŒX¡V5RàC@·=2—0=1j4›:N=Â@ÖCÁAùC#@ºAC¨IŒKGDÕEFG¹EEEÇ>i=û;K:Ò:N7Ð6Ü99‡:Ë9^>ÓD4EâG×ETDéCåDNDn@»<â:©9-5Â9´7»779a8ê87Ø604?7'3Ÿ3>4#/Þ-®-"4L9â:Û:£:m7á:-6º5D77M7ú7s7k8T8¦8}: ;];\>b?ñ@¯@GDgCOF±FxHgK÷UJ`8eiBmat¤xg~¹Ø~c~@€ó Ÿ~ ´ƒ œƒ ä â„ ©Œ W‘ 0– y— õ–– ” / X• —ÿ û™ÿ ¨” È Z™ žÿ nšÿ ±—ÿ 0‘ “’ ïŽå`Ž`Ž Œ š” ¡ÿ ô¦ÿ ›ÿ = NŠ SР܇ ` )~ :} } ° n€ ¤| y Ó| ‰|Ð} @€ ~‚ ½ A ô ± «{ ¨x =} ᇠ‘Œÿ dœÿ”šÿQÿ 9‚ C†ÿ 7ÿ “°ÿºÿ ²ÿ ФÿT‹ D{ s ±a ?M &Š$P"r"2!Ç!™"N"O    ’!$ö$k$b#ñ%"Î$&&&#¼$¶%6%$Ò') JÃE*2RW‰–mÿãnÿ¡nÿhmÿãnÿáoÿ¡oÿÙpÿpþçqÿ`qÿàrÿ™rþ–rþïsÿoþjÿËÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ³ýVý:þ%ÿÑ*ÿû2ÿ]:C4ÿÄ2ÿ'4šE¢()'í#¶"«" W ¿ — Y  „ » Ë P ‚ í „ ß G ¬ z Î ? × Û ž ñ¸ Š é È 9 Œ Ç<l{ ø ‡8 î € · ¥ X ¡ ¥ ß ° E ø · ª Š ¹ E Ó ï »  «  Â î  L ü  ) S 1 6 ô . 5 €M Fí ¬ D Ç  ½ 1 • ) { q ? Ø X  û à r ° " °Ö †  Ì Ø … H , ¹‹¾4¦ÆôSnY›û¡ ýÙ Û½½lhÌ ˜çÛ)©PÐSâ ñ ~N Z»RdLíX›]9ZçSLTuE?:î5p+ [ ÷>U6±7h2É.R(>) [*3$Î"Û ýù÷ ì:C>ÑD£ERGˆKP„W^ g÷|ÿ ›ˆÿ ‰ÿ Œÿ ƒÿ …’ÿ “ÿ ó”ÿ m›ÿ ý­þ þ¡ÿ b¦ÿ ›·ÿ ݼÿ š© ù} »Œ m’ÿ )p[`À_ÃjauN/€ñ4žÿa¤ÿ̱ý ½µý Š·ý ´ý ^±ý .¨ý ›ý Пü xœü ºeœ\î]fchflnŠbÃa‚aÁ_ Zø\¹\ìZóX“\\á` fg\m€nVi¬hsac]¬U»U•U›V‹]óc8`¤_]T*CÕDJ<¯.¥0á2¬9_=I?ñCDBBl@ÑDÏIÝOéL‚JÌFÓGÌG–EàGTB¥?ü?ñ;;Å9Q:—<‡;x;Ö=Ý=pDEF†HãEtD³B¯E`ESEBÍ@N;¨;^9ì8ý:”8Ø:v:A6Í6068826ÿ5å6ê5ê2Ù-!0Ô5H:î;%:(9²9…6–5è6«7¿78<9`8-8Û9›91;*< @¦B>F§DvB}FG HC FAOÖSèZ`æeÑlrw‹yLz„|dyÅ}ú{ ·} ´… … —… „ &† ¦Œ (’ }“ w• 5– ±’ ì ë— ‰˜ Óœÿ ±˜ÿ ü“ ’ Õ• h— H—ÿ µ‘ Ë‘ J ™‹ ™‡ )„‰ˆ îŠ ” L ÿ {Ÿÿ x– ’ ç„ î‡  …ù ½‚ ° 0 ñ = X~ ™{ Ï} P„ 8‚ ±ƒ w ³€ t} ¶} = q{ j| °„ oÿ v–ÿ&œÿN’ÿÙ… V  ”ÿ f®ÿ ¶ÿ 0´þ ²§ÿ ÿ t| Üw Õg „X ®( $K"æ!"P Ð p!£è V I!9#à$b$)#Á$e#—$S%„&%s%-%=$ü%&>)WMÙF£/™VGŠmÿªnÿjnÿ¢nÿcnÿ›nÿ’oÿápÿpÿYqÿrÿ!rÿXrÿØrÿØsÿ oþ×jÿ„ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÂþ()ûì7þyþœ2ÿ+/þ¬2ÿó1ÿU.ÿª/ÿµ6 >W%I)£%|$X"Å ‚Ë Ž T ï   ] m € ù 2 ^ ð +c · Ž ê £  ™ ó  / . Q ¢ è 4 ä)Ðe ¨ ÷ Ó½ Z ¼ W Š  C „ p / Ä W j å Ø r 8 ç V ˜ ” T ¿ ö - ¢ Š ü  € Õ › Ò Ñ9°ÞR‰ëj ÿ!«  ¡ ä  E c  ¹  q Ÿ Ì ¿ ‰ » ¡ Ü v  ¨ Fw—' s > + " ‰ æçûò ÷z{k]…óæîp|Ï8¹­k†µˆ²þ´à8ÊðlgŒÌÜèª2G}u ÅJYhTÏLÄF·M']ƒV—A+3å4É*G(¦v ZNÿMRo55ª<¿;¨,¤* =) ODØZ55v#Ó/{õ[ ” ¡ ' £AEbFUK OÁS‡Yqcxq Æ‚ÿ Òˆÿ ‰ÿ žÿ ÿ Õ“ÿ —‘ÿ é“ÿ 4¢ÿ ê´þ ô¡ÿ ™«ÿ ¶ÿ Q¿ÿ ªÿ ó’ zyÑ„ / ·Š Òj7^cŒf¯m£zÀ‚4[œ›¥ÿæ±þ Gµý d¶ý µý U¶ý ©ý ßžý Кü}—ý ]e¨ZX±]deµkawÿ­e·bÆ``%aa]ù]¾[]aÌj+lïn=pŒpog¹a+]dTUZœY%`Kcwcë]×`[UZF Gq9t1ß5¥7Þ=²B/F†GqIƒGEfGÿL›U˜UÁPöJÜIŠMHcGÛIWE›D5BÜ?è>»=ø=†><Z?X@ FJmHúHsGôGE¥F-GåEóBf>­@‹>/5Y6…8?6ñ:3="<b:Þ8v:£9¦9«:f8?5A6Ù5P3Ò9s<9þ8Æ7q8-7@6„7–7õ8 909è<&=’<p?m>d@>GŸFŠGIIJçLÝI¦J³JvPSTôY°^I_Ma^h,tshuTu8yÎzŒz… !… ߃ ]ƒ ! à„ #‹ Ù 2” @’ ü ·“ p ®• œ— T› N™ÿ ½— ” T  È‘ÿ ùŽ ˆ ˆŒ ¤Œ‹nŠ Œ ‰ø† ò– Œ¢ÿ kŸÿ c• ‡þŠs†~„Œ8 ­} 5{ Ä| d} }} –€ Z‚  |‚ 0 ô D v 1| ò| ) Y‹ Óÿ /–ÿžŸÿ ‘ÿ) †̅ÿ ø“ÿ i°þ1¹ÿ °ÿÄ©þù’ÿ ö x n 4\ þ. `#¬#­!Œ!X!ì"!©üõ Ê#¼#r#{"Æ$ä$R#¡&=%r$à$¯$»%&$‹#ä' KˆEñ1ÿ£XŽqmÿinÿ¡nÿ nÿ¢oÿnÿáoÿapÿYpÿ¡qÿ"qÿàrÿ`rþ§rþßrþßnþíjÿÊÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿô ÿþÞÿ "þ’8ÿ5ÿ±9c-ÿJ8ÿõ(ÿY)ÿó) (/'”#…!…"p!iô] ÿ ä   ; _ @ ¤ P U D e f ‚ @ l ­  0  ?) §  g ® y ž ×hè FÍ›J‘ T Ý$  - r  3 w @ Ò Í ½ ù Ô ë b H ü ± 7 ¨ Ê · ( ƒ U F  ò û ã ¼ ˜ ç¢mŠ. â@ ¼Ñ © Y  x ì ¢  _ o à  Ž 1 ð  Ö x Q  ‹ b  Ë Ù è C 3 …  r ­ ~‰rwÕÞ iÊf„…v¼ÂkèÊç–ѽ¤µÓ±L´z„ÛCzÉôÐ ¢@¶MþNÂD>GRV˜E°<y8û3x)²! à>è_[Ü34F8¼'S&j" Õ2RVåbÀ9Ë+‚*B ÒÉ š} Á% 3< EàHÑNOËVú]#k §zÿ o‚ÿ “ˆÿ ɉÿ ßÿ -ÿ ê‘ÿ å’ÿ b•ÿ ÷®ÿ å®ÿ žÿ 1¦ÿ гÿ ׿ÿ ž²ÿ $ ò~Õ… ? ¥ƒ ÀaØ^±e_egp®ya‚¿Œ™¬¤ÿsªÿÀ²þ ޳þ A¶ý  ²ý Ú­ý É¡ýÌšýSý jµYúVEc?gºnÕyÿgûa[d€aQ``Ù`:`÷^«`ýdmh^nêp1tüpp°iBeÇfc;e’bðcÍiølÎd…b]ÀSøK*Hä962ì8j>=ŒB1IyLKBòDiHŸLŒVŸYAZ TáNN-KÅIÞHïFäF%G™DAp?I@AÆ=.B¼EGÃGåMúK7J|GøF2F'F EJEfFˆBÛ?ð@"<=9Œ6è9a8·;í:r:);ò:}9ë<O;Ö<4t7—5Ø8·:$;"<•9«9+6ú8±;9*:Û9Ø9;'<]=D>tB¶?¬AÔI“L‹IKJK@J\K%MßMöPÛTæYüX\KbDgWiÃppgrVtø‹‚è‚ !ƒ æƒ —‚ – ¨† Ž  f‘ ³’ wŒ ó(‘ e“ ˜—ÿ 8š Jš ˜ ‚’ š W ‰ Ž  ¤Ž RŠ \ˆ c† ÷ˆ œ‹ Sˆ “ =¡ÿ §œÿ ,’ ˆ ­† °…z†ƒD ¿À{  ~ Æ} N~  Ä€ ƒ€ 9ƒ h è~ |} ~ þ} c{ 4€ Z G”ÿ r›ÿ“¤þ·›ÿÌ ‰ÿ íˆÿ ¸‘ÿ w¬ÿ¸ÿ бÿ—¦ÿH—ÿe„ { p sd °6 '$$d"n""[!m!› ÔÇ1 ‚"’"€#¾$¤$#z%P$Å%D%0%²&%û$&}MÈGª2ÿžW”‰ mÿ#nÿanÿ©nÿnÿÙnÿÚoÿZpÿYpÿ`qÿ(qÿ¡qÿÑrÿ rÿ˜rÿPoþWjÿSÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ± ÿÚ ÿXþvÿ!ÿ ÿÚÏ&% $V#a! c ç Å | }  Þ ÿ  @ n  ì ò Ì  ï § ìY¡ Í  w # K E & U  Ç W æ úØ ù ¡ N   8 © ½ ± Å   § } «  ž { ø Î v Ë Ã Ë y e ¸ å ² [ ³ y ¹ _ œX<µ°ˆ¤ ÿ Þ  J g Y „ &  ó å l á ­ Ù ¼ à "  6 û ) Ú 1  2 F f l À  ð p nw"$©œ”à #Ò‰Šc*6¤¬ÕJÙÁ¥Ý–·P T10æZ³*ñ s5„BûL!KQK»TkM¬?O6l/Ð-&'!! Xdÿ cÀP 3~0:+()N!§Ø-çM»M5;o)ø)¦ Ü— %V^( #>FÐIùNW^çgu J{ÿ  ÿ è‡ÿ &„ L‘ÿ Иÿ È’ÿ i‘ÿ +œÿ /¶ÿ £ Èÿ °¦ÿ f¬ÿü¹T³ÿ b E † ˜Ž –rÂ`3c¿c[dÊf£up…Øå—`£ÿtªÿ‹®þ µ°þ a´ý `³ý Œ®ý ¤ý–›ý× ý Ïn³_STPgoi©oÈÿÏm[b%eÆdŒ`h^*\bobfÈh–f¥nsz_u‹sl n,jRpdfêm?m”nëmÇk‡dï`ôX®NÜE»6½6[<b? A§IùLIBC¥DêIÞSä\Â]C[ƒXÌT3Q›PôP6KÎIUI“H×GŸBîD?Bé@ÊDËEÜF¢KKJ…HÒHÆJ?FNGöF¼HGGFøD’BPBUB>÷9C9c6¹9=<<a<Ù<N;Y9â:Ù=×<Õ8Š7•66à;,:k=];¥;47&:²<:;é<X<_@?K?]>;BeB¶HÍHsKDGßMøQcOýOˆMXMžPïU¦^`B_€_f-jIlÔo¡rzâ}>€ -ƒ $… ¡ƒ ß‚ `… „ ë‹ Ž 'Œ’ UŒ v‹ ïŒ ¢• \ Ý• “’ Ò’ Ú’ ÏŽ ‘ÿ ³“ÿ ÷ Ù“•‘ÛÉŠ † cˆ å… ¶Š h”àŸ š Š ¥‰ ¡† ·‰ g† Ý‚ é„ %ƒ 6€ » † z ¹ þ} z c| € h| € 6€ ²} ƒ n| * ˜‰ b ™šÿ ]£ÿÉ¡ÿI† MŠÿ ¡ˆ @ÿ jªÿO·ÿ ´ÿ‡¦ÿǘÿo ny ½l h LA F$å$##t"U!Ì ó +, >‡µ!>#t#°%9##$ã%=$ó$w%'$£#%M'ÑJÏEÁ/ùY}‡Ûlÿânÿbnÿnÿ"nÿ¢oÿ!oÿ˜pÿpÿpÿâqÿZqÿ‰qÿÐqÿÈrÿnþ§kÿËÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?o#ß'Ô#õ$!!*!jØ^ • ? ä í * < - X $ d —ò0 ª · É g º è f  ) R #  ¬   Õ ™ * ” ˜ 5 Ž   ` À& 9 ê Ü ’ ° L @ u € U º  – ¿ ƒ _ Y ª J « ä  › Ë  . – 3 Ú U ? ä81:–͘    –›f ¼  ^ N è  À Ð =  ä D Ÿ ˜ ¥ ¿ Í ]  ' Œ %  ê ÓÖ 7 Ì 2©’ Ï¿AÈÂ;y·Ý@"Œ‘ÿ|žd ‚Íè¸Â$ˆäþtÍÏŽƒñÞ_ q8ç9¯>‡?FFF^CÑB`6W1n,G$ŠêD]g%L_8-U-3&y 亘$i:>2„%Ê ¯%’'÷ Uâò, Ï@G“LtP;Zõbbn§zÿ ý}ÿ &ƒÿ uŽÿ U“ÿ –ÿ è›ÿ †ÿ kŽ §ÿ %µÿ ™ ¼• Ù¡ÿ o­ W¼ÿ t¸ÿ Ø v} AŠ ]Š %m` b`:b÷kætÇ„_“\–ßÕ£ÿ¦ÿU¬þ ê²ý u´ý ¯ý Ø¢ýu ý‹§ü 3w^&UWb‰lŸqKÿ”xÂefQaéb¤^Œ`öa­c¯gÕjËjIjp]yZ}wÛn´mxl÷uÃnt¥tqµpûkœg,c1[HR7E…8ü;RB¾DõHùM­P=HB‡HCPóZŽ\>[A\ÆYŒW'TèQuN†PþMÆMMIåHŸH/F6FCH FÃM^FBMgK»HÉJÒDÒGDêD™JIZK IIC,D]B¸@ä=a9[5=˜=_@ ;§;Ñ:L<E=@Ã>ƒ;n6¡7¬8È: ;p;¦9å9ñ8í:Û;;<Ô<Ú<dAŠ>Œ>!>(C&GùLNQ©J²JKRdRXTOQR½S–Xå`BhµiŠgnj8iónÅp¢qªwÆx|s‚ a… cˆ Z‡ "ˆ "Š ¥‰ 7‹ ?‹–н‹´Œà å’ O’ Ž ŸŽ UŽ  ŒŽ Œ •Ž “‘‘ÿ {‹ Ù‰ _Œ@ŒZ‹ œŽ g“ Y™ C“ Á‰ l‡1ˆr„ ·† í„ æ~ û p‚ p€ ‚ 8}U}  | B~ q| € Ä| } ¸z wx é} Þ‚ Aƒ ?Ž Ã•ÿ ³¦ÿ ŸÿÆ… d‰ÿ 6„ ÔŽÿ 6«ÿE¸ÿ÷þü¥ÿ Мÿ^† ¥~ óq Me VK Ö&A%U$­#¿! h!cU  ¯!¯"#r"²$¿$½$:&A%P#€#æ#Ü"[#c$[&sL¿F²2aUH…–dÿaeÿéeÿàeÿàeþçfþ§gþgþ®gþ§hþ_iþ%iþ.iþniþçiþßgþ/lÿCÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?&Œ'ß$7"*!zµ€  k í ) Œ î Œ  ä ž   u ƒ“ ' —  ó ã ‰ l ‚ ½ | Þ î dˆ Í , ¨ ø  Ë œ ˜ h ¹ f Ö ü ¾ Ž B ] m e T á ¨ % Ö   1 Ç / r â  Å ó ¦ , 2 ­ ` |  – ù u I ‹ ”ɼ q! g   ¶!ò V ¾ t Û ® – l „ z £ ] Æ = 9 â § à 3 ~ Á í å M ’ V ™ ð - ° ` hÓŒeºö@iPXÀÒm H’ëJÓX#êd@ös@”‚õ\ð'†®v/8„7Ý7•=ê<997–//-ž+%€ Ueþça™J70_+s*;œ ?u ‹$]$ô 3¬ä¾Ë ~åÄ1 œCYHNET±_ÕgÄy €ÿ ,}ÿ¨‚ ‘ÿ ™ÿ ›ÿ ”™ÿ ’ÿ Ø †¬ÿ µÿ ‘:— Ô£‰©¡»ÿ ;»ÿ Uˆ ΀ v‰ … ífRc£]Â_¶emuò‚ð“[˜Ù›Ý¢ÿ§ÿ †¬þ h²þ ²ý ‰°ý  þ ý·¢ü ÿzÿ ¯`hXsd;i¯rÿ¹„ÿɉÿnxi f=aKcÅc·e/fàiRlPnÚmiuXxR{rupÖpÓtt°t»v?yáxÐrÜháfàd«[RDD×;’?ÌD-JÑMçQ,O‚IÙG·M°TàYÛ[‹[[ÏZÓY«WÝTtPÌRàR\O¸P:MGMNFJIIŸJÚI§LäG×FÎIyI FþF•EšI1JzKDI_IH"E-DW=~;G9C<*A‡Aø>:¤:›;Ñ=œ?Ô>Ð9Š6£6¥9;; <>91:î;k<œ>>]=>£?IAÄ@ÌAA CàGULþP{P2Q°V>R¦SiUXYZX§^ aªdëh5m®oám^jøn£tpVqm{4|b|ù{ˆ‚ ¬ µ…°ˆr†þˆüˆ—‰Bˆr‹ሠ£ Ž ‹ ’Š ‘Ž VŽ Ï‘ Í—ÿ º“ Ô ˆi‰ §‹®Œ¤Œ )Ž ” ’ÿ ðŽÿ p‡ Ð ì ¹† -„ !~ :…†‡ ®ƒ ¼~ Ï€ v ö} †} Ì~ 3} 2} } Í| { y 1w +x 2~ f‚ Û‰ šÿפÿVÿÈ„ “‡ U‰ Ôÿ 8¨ÿÔ´ÿ ȹÿªþ|œÿ† â} »{ ­i …V {' P% %Ñ%G"€"®ÙÔ9!8#²#è#©# #ª$ ##ä#s#ß$n$ï#X#™%’(MFæ5ÿÖTß‚`ÿ6bÿíbÿ¬cÿ+cÿ¢dÿ"eÿ*eÿieÿjfÿ)fÿ°fÿéfÿñgÿigÿ`cÿékÿÔÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?(ü%ò#$#Ï ðÙfep X F $ œ ¾ … Ü   ¿ ‹ ¬ q ¸ I ‚ Æ0 w Ï • eØ [ © : ’  T  ü é ™ ¯ Æ ¡ µ w © p 4 m ² ò ' í ¹ 0 ß  ‹ A  ^  1 | t U n Ï ý  ñ é Ü y î n Å ö ejÊ ’àé A G þ!  Ç * C  $ ÿ X (  î l K   7 ú Æ ¨ t I 1  q X  P ö ] Ä ñ <” þ ^ œþ ˆH?|½”âêyî`9qßêu‘Œv¨¬…¸Hc+Õ¹W€"!*½/U0ÿ1'6Ö1Ù31310*(,#6& ptþ šX¥?õ*‘'¯+f !#ë%£&:*6 .ÌâgÀ A m ê. 7C0J¹Q¼[4c\o7~ÿ éÿ ±~Úƒ *œÿ Ïÿ ð¢ÿ @˜ÿ ¦“ÿ —ÿ =®ÿ P±ÿ Ž!— c£ Ö° •»ÿ y»ÿ S ø„r‹ ›z aa3^…`ê`ëc-i•s&‘ž˜œ'ÿð¦ÿ ©ÿ ƒ²þ ²ý &±ý ‘¬ý Ÿýþ¤ü ýÿ r`Ä[_8l®uÿ,„ÿ^ŠÿØy–l&i+f5dEcÆaÒh6gäiSlìr(y |Œw2yG{]|¦v©~†|Œxø} |v úp Œn eâYíPF&?¨@ßGŸO~P1RƒMUM_NRTüX§]J]W_I^Ñ^TZX/V¤TkT0NÆNyPNûOMÿMxIL…M[KI¬FÁEBËE‹DÐEhJLÕM«LÛNIKF-Eç@«?#=Ÿ@HiDî@‡?W>Ž?@3@@M9…3è4±;G<„=¶>c=ï<ö=ô<ú@@K?ÁBBÇDéDFFÇFUIL‘PÛQnV×YœVŸYß] [_dti¶k”kop‰oMlœmCm†mÎoLyPz~|wY|S…„G…€‡J‡†”……ê†j‡ ^ V‹ ÍŠ ψ QŠ † WŽ Ñ’ ! oò `‹)uŽ!ŒØd $Žÿ ~’ÿ |‘ÿ òŽÿ vŒ ƒ å† -„ æ€ 3„ ¹† ¶‡ 6„9fp{ z H| ¹y ^{ ‚y Šz ?v =| y hy õ| ¤ƒ gÿ ¾ÿ ©þüŸÿÔˆ Àÿ r‹ÿ uÿ (¨ÿ œ¯ÿ Ú´ÿ R«ÿšÿ ᇠL| {w ƒi ±b - u%Ö%g%š#y"~!P!!Ô _!#”$$5#V%4&/&÷#ä%%ò$}$û#d!û#&’N®G74ÿ»Q%ƒLaÿ}cÿ«bÿebÿòcÿédÿ2eÿ1eÿªeÿ©eÿâfÿ©fÿ©fÿqdþ7bÿúdÿ2kÿÄÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?'Ô$ #í#Ÿ"÷ ’Z;A § ä E g ‚ ‚ {  ¦ Ë O ž ' è ¡  Ê X þ Ç ö v ¨-L  ßÈ H Á Á Í  q ú ¬ ã  “ è  ‡ É ( Õ § ¬ * º  Z û i Ý  < l ˆ ÿ Ë À   Ë › q Ä  †  ö¤ý"! c £") Î1  ‘ ª é ¦ s ˆ | 6 ¡ ¥ j  ½ N  ° à  9 a  °  ¤  ! E b 5 D H ƒ + ¼ 0 sbZýÐÆû½@'²) 4s‡‹|7â‘ÉÆÈ…ý6­\ÞèÙ ö'É/ .õ0n2M/Í-€1õ,„&…(H#õ4 mý ;F‰-–&='¶"& ã%ð++  '$ a Ö ‚. †. ÅE KÅT1_áj:wЂÿ j~ ×|²ˆ Úÿ S¥ÿ Ÿœÿ Ž È’ÿ û• ލÿ z© I‹Ù• £ ° †¹ÿ ¸¼ÿ a“ ¶†{Ž Åxte-_‰`ýdsf.nVr:{‰ o•Œšžžl¢ÿ o¦ÿ Ó´ý ¹°ý -­ý _¬ý ©žþ •¢ý Žþ îay[ýcçnwrQƒÿŽÿÒ‹ÿÀt«oÎj6fAa£a+h8f­h6k›tM‚¨„ '€û}Vê€Ô|”zÍ{|È‚| wx án He íZTP EÅ>:ENNS“QNK¥PRLT>XÛYB\È_ax`\ß]X±XâTGP‹PùMÔNÉN°M·MóN©O@QL™G7H6E?GkEFüF¢LôPíP9OÔPM¾IAD‡C£DYBõDcBóC>B>C„C­B;AC«B2;28P9):-<7;ð?@)=i<°A@Q@€AyB:BGCG HK;KN P¼RçRW¡YY™^Ê]>]‚`‡eïn¢pis¿t†tqsvn©k;l nxoBrht±v*y{×€ž€Ðßo‡•†T:~ ?‚ â„ ]‰ ‹ Ÿ‹ Ù XŒ † à}q0ŽwŒ ÝŒöŒí¤Œ ß‹ L Åÿ rÿ :‰ ˆƒ #„ y… °„ &… nƒ ä… tƒx„ = ·~M€ ¼ rz { w Ö{ üy ±y ¹u Äy ±~ è€ !Œ J ÿ ¬þûŸÿ Œ Æ‘ÿ *‡ ‚ÿ  ¦ÿ Õ®ÿ !°ÿ m©ÿ ÿ µ… ´| )x þp ?c w7 %\'J%š$i#‹"" æ m!„$f$+#s$!$;#$½"™$@#º#¬#)"Î"¬"ô&ÛL+C-ÿjS„Ébÿtcÿ#bÿôbÿêcÿâdÿieÿ)eÿ²eÿóeÿéfÿ¡fþ·eÿ0cÿªgÿ"eÿlkÿ„ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?Y's&%L&5#_"D!xä k  '  ¿ U S ë ¬ ¤ *  æ ¿ $ W t  –  S ] × åc%‚‘‰  2 Z ï  ê ' ¬ Œ ù J ? ´ Ë g ç „ Æ ò e \ ê # 1 3 ò ­ ô A Ï  6 Ú  " è  Þ > F t ú $ ÅLéŸ Æ ® ÊÐ Lñ   _ þ Æ } é ñ  É  ‚ ù  Ê  t á Ö Æ â Û ª Ï Ô Z V ó 4 “  U Ÿ ° à W ¯ 8Îc3ÛïMAâq¼êž w2Öùö¶ð² 1fÎû’›™ºÛz`>% ':(¥*8-z,+.­.ð/ 5(Á#l&£"GB ŽEÿ k0%"Ñ à"%Æ%X*2¹(r ƒÝŽã ‰ñ w Ø ]m é6 qF&NõXƒbl®zÿ º‚ÿ ©~ S}â ¤ÿ bªÿ ×™ÿ ¢—ÿ i—ÿ å˜ÿ ´«ÿ ¾±ÿ qޤ‘ê¥ÿ :¯ÿ s¸ ƒ¼ÿ ’ ö„ ý‰ ‚vóeìb}bd9f´j%ryz:…o’ÿ¬•ڞХÿ¨µý =´þ ¯ý ]ªý 4¥ý ­¡ý Þ–þ RaˆXÓbpk¾uš~ÿàˆÿ þ ÐqmêeÙg&hWe¥g@hto,y µ‚ 〠… v‚1€Ý„÷¨‚š} {Ó~•„ aƒ “| %n @g ]ZWOÕG¼@GÐQ{P¬P7M!LcL!NŸPÈT2TwYWA]«c@c;_Ÿ_É\ ]kW»SòS³O LËNNBNTKåQOLÕLKMMKFŠIãH¸OlQSøR`RiQ,MJ‡HGKGFCÃDDˆECE>DåF_EÚG€DÍ@=0<¤?(<ÿ@,=<;<z<z>ª@OA@ÏB‰BBA BÃFE°KÁPóQuQ¹\ŒZVXY“\a5^Ž]Ïhalšn×n"p¾tÆv‘qqn¥mznnkmroœsKuBu2uìyŸ{£‚å„Q‚#¦ƒCKø€ s€ :‹ /¹Š ·‡ˆ€‰+‹‹»Œq‹tŠrˆ=‹=‹ê‰¨Š e’ Êÿ î‹ Ê‡ &„ … å‡ ¡… §… („ k‚ y d‚ ò‚ ²€ ü€ ,~ ÿ~ G Cz ÿ| 7~ %y ­| wz jz ù} :} ¹Žÿ ?ÿ ‰®þõžÿ ) NŽÿ ˆÿ õ‘ÿ à¨ÿ Õ°ÿ \³ÿ PªÿDŸÿ Š T 3t j e A 5&ˆ&Æ%Ø#Ž#!‰"!Ó!"P$$j%$+$M$$5#Ä'z$û#ï"í"—!µ#›&ÔLíDˆ.ÿ„QeƒÑaÿ´bÿécÿjbÿòcÿ«dÿ"dÿáeÿbeÿieÿ±fÿhfÿifÿhgÿ)gÿ`dÿðlþ{ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?ÿÿ?G'ê&Ê&F%Û$!M„ ¯ ± | t + ›  ¨ ™ † ¶ Ê " ­ & m n  d Ë fª —‚ÍPü¾…X Ÿ m f F h ” ž ] í Ž D ¬ *   û i  D  ¶ $ A ( ž Ü U ì ¨ ö Ë ê ™ b  â î D Ù ( u G  º =" rê ×!!] 2 o ¥ ~!±! › ³   å µ s – ó ÷ ; t ê s ƒ  ç ^  *   ÷ ¸ ®  ' ±  Ý ä k [ ¯ /ž`Ù .«ŒFQä <4•ßabpî+L¦h4?äÆÂ㮲T€_U)’+B&F*(* ( A, \& Û%ê"×&" ´:ÿx* Ì&"Ó 5‘&m%˜%d< KºÚ ðƒ Ž ¬Ù ‘ aå -7 (FíOWÖaKr { Õ€ÿ 7~bª” ¦ÿ e«ÿ Ì™ÿ ¡•ÿ  —ÿ âžÿ ¡®ÿ ý´ Ê” Ÿ˜¤ E« É»ÿ £½ÿ Q• ¤„ v† ’n3a³b>cnh©jilzsÓ€P•ɜӠÿsªÿ Ƴþ ʲþ ¯ý ´±ý L©ý £ý íŸþ JeYÚ\Pf…tá}ÿþ‡ÿ Ošþ ƒ’ÿx*nØm¬hˆgÅd§hŒhÅv Ž Ì… € êŠ ÈŒ/‰V‡Ѓdƒ[…½J€?‚ e~ R{ Ót °g ŠZÃNEãDÜKˆP L½LeK±JìLgKªNÏS5T©SŸ[*^«aaŠ_d`mb}[¯Y-UP¾O…N\KñL)L®NfL§N`M¯MéNÖNP KáJÞLšP¬V’UÍOgLLKÄILõKîK¬M%J7F¿GHHrITHçH!EìA‡>?1>ï>s?6@ã==?X?6BnCBÇBÍCûB¹DIEÅIêNQVVÏXÃ[Ö\XÓX¦^D_ûdf,i\lŠløoEr oÃp—t8nmsSo½l²lJmJn®t!v7sñx®}°€p‚{~±{ž{'|–Ö~€ƒ ‡‡ ·Œ2ˆ ôˆ‰Š…ˆTŠGˆ‡Mˆvˆ9‰E‹ºŠ Š Œk“ Žÿ º‰ lj Ô‰ † ;‚ †„ 5„ ›€ Á~ ¨   í€ 4 7| µz È{ †| Çw x rv Ïx †y ýy <}  1~ Œ U–ÿ+ÿ˜™ÿ 7‘ÑŒÿ ðˆÿ ô‘ÿ ,¢ ­ÿ Ÿ°ÿ ë¨ÿ Ù›ÿž‰ Z~ 7v ‰u j fI ­'Â&z'd%4$ !Ì"R!? k m!ý#´#W#/%Ñ%`'0%ò%m#š" "p"÷!v$Y'K»C©1aRr‚Úbÿtbÿãcÿccÿ3cÿâdÿjdÿ»eÿ3eÿ«eÿkfÿ)fÿ`fÿ¡gÿigÿ(dÿ2jÿËI‚Ãÿ<ÿ}ÿýÿ~ÿöÿ¯ÿ)ÿáÿ£ÿ[ÿÿÓÿäÿÔ ÿ ÿš ÿ! ÿ© ÿ) ÿh ÿ°ÿ¸Ç h(;&Ç$1%6!~«×ñ D Š ¿ W ® U \ î *  t m / ¶ i ^ y    ß]Ò ƒ +øÀ  O ° Ò g n ¿  Ø N ­ b , »  ñ ÷ \ n z u i ˜ Æ  Ý   0 Ó Ü w ¸ · š ñ ¸ Ñ  $ ˆ z A³"5!©  #!m«? ^ þ n Q 8  # ² T #  . Ú  ¿ ¹ ß o ª C · * à È  Ô ä ö à Ù  | e  ° q Õ Z [   yf¦üºEE8xo©Ÿeu8b©ÓüG¾°“‚BrqFù"Ç ‡'{&Q)â)_(**í. F)È%;%C% )úgG "%¯) #p J R : ¦ |  … ß 4 3ð õ= SIßRqZ.cu '~‰ƒÿ =„ÿ ¿Œÿ öšÿ ©¨ ©ÿ \—ÿ ¢“ ™ÿ ¾¡ÿ 6®ÿ {¿ÿ Ñ™°”¥¢ÿ ø¯ÿ Ù¶ÿ ¿¼ÿ Ôš ‘ 4‡ ˆs‰d½d´hmiåjaf¤lHpœ{Þ…›”P—ðœ£ÿ —«þ ë®þ °ý ©³ý Τþ D£þ ¥ý ôe\[5Wyk°tö~ÿ½ÿuÿB—þ b~]r—n¢jkd‘eŒi²z ½„ ‹… –‰ Îÿ zŠ.ƒÝ„øƒ‹ƒц7‡ïƒõ„ K} z Ks ¦c Y“MwGÝJ¹KWOêKËJ HöHøI2J]OxSñU¾Yá^fc–da‘e;bÀ^«\¶WÿTETjT»WòW4VÝTôVrT=V,WøWªUT€U9TFSEU„TdT’T¡RÒRaOaPŒSûP§QO"KÿK·ONÅI(HhG§E:CDFE„?;<ŒB$C@œD‚DÅGoIHwG}G1GéJjI,LPZTóW¶ZðYq\kZéYB\B`0_mb+kšq poppuAtûrÑpƒrÛv vgr~s-užwH{}¤‚߆ô‹6ŠÈ€™z|ì€mœ}•}~Ö‚Ï…L†Ј…‡Jн†ÁŠ ¶ŠƉH‡–‡y‡VŠ/Šö‹´ªŒ ´Ž ¨ Ú‰hŠ k‰ ë‰ d… g‚ c€ ¯ ú ²€ |x Iv v r —u Ôw Ìu t ûs 7u vr Qz B} ±‚ ¯‰ â”ÿ ÷ÿ (˜ÿ ù‘ªÿ "Žÿ o“ÿ £ÿ \«ÿ ²°ÿ .¨ÿ -ÿ ¤Œ z ­o ³s o X ã+ &W&Õ%¦%7#D#u#‡$$Ÿ#’#É#û% %p$¸&"&ñ%™#Ð"y"º"’"å$ù' GN#E1.ÌW8‚†`ÿàaÿ`þ×aþWaþŸbþbþŸcþcþgcþgdþ%cþÞdþÖeþWeþbÿÑjÿƒ3þ"5þ4þ`3ýæ3ýý4ý¶4ý^6ýs7ýô7ýZ8üf8üô9ü ;üo<üÏ=ü~;ýY9üž9üæ9ü+8üZ6üí6ü8üd6ÿü?5ü47ü7ü1ÿn($ö%#? ó†T • — \ Í ø ° – Ü  X   ? © þ Ÿ 4 ¦  ù1± 5ê ? o Ž` ƒ w uA ö  ^ ž ~ j  ƒ í ï à F Ê 6 ž  { ± ? * ¸ | q « À  × G 0  Ö ª  – š Ø G Ï ˜ B i « ¹d* n™ |ÑÍ í ú! l  ˆ í D À ¹! N  > N E Á × , à É ™ S ? £ p õ .  H b Ý ¬  ¤ Ì ±# ” A  ‡'F >1«+NºÅ¤¿Ì›‡Õ¤² ñËÜÙå–Û,\ Àê'Ð&;'¤)y*)j)º&]&ž!ó$ C!K"æ$ˆ/A0Ñ @ + Ð z r | [ B# h< þL>V¯[ ®k wì}"„ ‚uÿ ö ÿ جÿ S¯ÿ A–ÿ j™ÿ \™ÿ ?¢ÿ ý²ÿ õ¾ÿ d• L—_¡ Vªÿ *¹ÿ Öºÿ œŸ … î‡ @riße¸dðf¢freksßzä‡Ù“ÿº— ™Ž›ÿQ¢ÿ Ö«þ ª­ý º±ý L¯ý ¬þ ‚¦ý áfË_-W®bÙt8{‚ ‰ÿ™þ  ‚ZxÏoqj‡gèercâe–p¦z ­{ ä} â} †}ù€Ÿ"†~™‚w†¤„h‚ ¤| œy Òp üb 3Y#J8F)LøP›NLsJ½KñMZOÈT=W¤Z[Ð^údi7kÒlÕl\màk%fb_ZæZª\%W¨T¹TÏVöVVæW-UuU9U S;T&QñUãUžVuU§X$XlUêSÿR»RHQÈP'O PåPQMÎNZMOKÀKKMíL FµAV@±CEðGZIKLEJ™I2G+IzJQKLáO”QæUU‡XEW¹Z7YwYv\j](cån‹oÊpùsªxì|-|+zcy<€d~yw { ´| ~| ¸ 1„<‰˜Š±“O–0œ à›S• ”ý™ “ ò ] +‘ ®Ž¢‹ÿ‹‡\ŒéŒFú’ ­– ?—¼– 6œ Ôž ^¡ ]¤ ¥ ’£ U› ^• ’ ®4 d‰ ç† ê ò ý|Â~x} ô{ Ív ^t™v Ov u µt Cršm Ûm ¤m Ôo Ôp‘x Žz € 4ˆ "•ÿe›ÿ ã– ˆ’°•ÿ 0”ÿ k—ÿ Z¦ÿ ®ÿ ž¯ÿ W§ÿ Ò›ÿ q Ô‚ !t äpco äb 1 ‘&|&Ä%£&#$?"÷'¹#{!Õ!Ù"ý#N$@%h$è&›%Õ"W""#}"þ"Ì$) S'E>.bY}~Yÿ£ZÿZZÿ˜YÿªZÿjZÿê[ÿ)\ÿj\ÿ’\ÿc\ÿê\ÿ ]ÿa]ÿ™]ÿJ\ÿíjÿƒý¥þý6ý\ýÖý&ý×ý_ýþHþÐý'ý×þÈ þ˜þý_ ýþÉýçþPýþÐþŠþˆþ þùþ õ(#ý$¶#·!Â!)ò…  £ e  º O –  Ÿ ž M t Ê —   £ ¿ $ z üÝ ×  E D â ; è f o > &Ð! M ë J j q F g c ò  o  å ’  Þ : y Š  © I ‹ Õ Ë (  † ± ) æ X  ` « Ã Í k  à 8 ²‚5 ¶ý“ É f É c8  ‘ i  ' á ‹ É © b $   † • : ½  ¤ Á – j ] D ü ×   = ´     5?ŸÉ9 ʹÙ÷  ‹Ù‚жT™ÎšSÑ[Œbp ³Èwä p þ ªÔ á #+ )¹*k,I1+®*š'Žà 8$Ý*˜*=$*"·M G J B !ÂçÆ ó  ò K “ Ñ>NvZžc‘m ‡x çâƒ^‰g–ÿ ­ ÿ +©ÿ ¯®ÿ ‹™ ™ÿ yœÿ »£ H¸ÿ t¼ÿ  ”á—#¦ÿ µ­ÿ ¨·ÿ Ù¾ÿ Ò…é‚sCiÊmøl~hHi hägnu3†;‘Ñ–Øœÿ0Ÿÿ#ªÿ ¯þ ü³ý ¨þ ǰý ù²ý ñ¦ý yfý^éW]c0vfy®ÿ >ÿ ƒÿøtlqEhÍcôf`bþi]l|næqUq(xD‚,“—*–”Œjˆ \} d ã€ÿ 6~ÿ vg f[ÑU'K>H"M>N;MªNlMóN©RÅV…Z¬]]\ç_ cÈjp$m]qQnënòm#g¨e‡dÿbÇ]]Ð\Ú\\cY2XµVöV«VñUðR/PeQ R*R>S¸T;UùV©X¾X'T§R&R`QÖQ’Q9P*OßPîPvO{OãP_P=Q-RæL•EF~EöI(K•KÖMÀLÀH–I!I¯JkJöKUORSSÐUX¡Z9VsWìXÃ[+_¬eno»t]tÝy¨}×z~UzÉzê{Òxw†y ½x þx ­v ½| ß '†¯Œ>…·‘Ř V– ” s• ` c ÚŽ % Û‘ ‘’ • •› dž gž ë¡ Š¡ ¥ÿ ùªÿ }«ÿ h¨ †«ÿ 0¨ ªÿ <« ® f® S©ÿ ´¥ÿ 4¡ÿ  š Ò“ Š‹ … æ~ «~ é} ¼} |€ 2~ | ú~ u~ d{ µts FqÉoÜm §p ‰q ‡v y Jz Hƒ ¢‘ÿ u–ÿ { ‘ Ž’ÿ «ÿ ­•ÿ  ¦ÿ a®ÿ ô±ÿ §¦ÿçšÿžŒ Õ‚ dv xu Ûj Ú< =%ª%È%$3"º! m#§"¸$Ê#5"Á#ö$¹$®%·%<&¼"ú!À#ÿ#O$´$Ç& 'MÿEp/zXC{ÜYÿdYÿ£[ÿ)Yÿ«ZÿjZÿê[ÿ*\ÿ)\ÿc\ÿ¡\ÿá]ÿ!]ÿY]ÿ¡]ÿb\ÿtiÿÃÿÿÿÿÿÿÿÿÿÿÿÿÿ]ÿÿÿÿÿÿÿÿÿÿÿÿÿf@%#ê$¨$€"L }  ß Ú Ð  - ß 1 s  ` B – Þ  ¤ K  £ % « ìá & Ž ý N ' – µ J ¥ p² «  Û ÿ É A Î E  h ­  0 °   © ± !  à 6 ê á  ¯ ±  3 å ` Ú ;    : › ž ìÈèY •   ‡ ^!E e6 ‚ 1 r *H!;   ³ æ F 9 Á  ì   Ÿ ý Ø )   Î  m ð : þ = k Z  ò < Ï $ ´ í ¼ á & «< ý ½ î «[£À— i•  ¸  œèl™ë¡ 2fà ýÀÄ ä 1 Š \ &û*$´ ý‰ j 5U  · ÃxÐ W t n Ü D " g Lüë   ¸Ä" %D N þ[ Nd Üq º} —€0‡[Ž”—ÿ ì£ÿ æ¬ÿ %¯ÿ ¥ G”éŸÿ º§ н ·ÿ ~“ šð¥ÿ ²°ÿ b¹ÿ ¾ÿ ‰ ×… ½…ˆwðmûpåg“fVhPgÍfHhrp<¼Œ f•dœ_¥ÿ bªÿ ¥®þ ý²þ ®þ Eµý r±þ F¤þ Âkt]ÂX{]¤qyàA‡QŠÿø…æx”pNjÞg&cmakÌqìv_x%€yˆ £žÿ âªÿ F¯ÿ ®ÿ «ÿ •ªÿ “ N z q~ÿ õx ×f ^ nQ HKO‚P,R!O*ONáRçX¶Z¡Yæ`„ch¼kHr_prKt t]pémãh¹ažcÇcÃ` `a’bSb`•]–[0[àZìWiQÜOeQ-RmTçTtVwV¾X³X;W\R‰R÷SQƒS±S·R½Q·S(R_QáPžQ¤RmS´MGBGG°KMVL?M - e  D å C Ù € ? Î B ×  — : 0Þ Ó ¿ Î J€6 ´7 ´± õ ýÅŸ2*Å‘ D¡ ÜÉ#×fb g– °¾õI!^ 2 šÎ L ÷Ë 9  9 ™ ×5Ê  ™ ù É  tº" ËF™R \ ïg u Úÿ k ݇,ðÿ æªÿ °ÿ ³ÿ ¢ÿ ô¤ ‹¦ÿ ¹° Áÿ  ­ ’ëž 6¨ÿ ò³ÿ ·ÿ /½ÿ œ P„ »‚ ®x€nønejŽk0jýlmkymép‹i”ü›Í£¤ª ¬ÿ ´þ µþ ’´þ ˆ±þ Û¡þ ®m¸^…ZS^ÅmQy½†–‰"Žÿ |~ŒrÁkØi$d¥e¤kÌxÙ| Ć ¢Š – ¡ÿ v¤ÿ 1¦ ‹¨ÿ ±ªÿ ö«ÿ œÿ —ˆÿ 8ƒ ‡ÿ  Ök ù^ ~PÅITNƒN MN5N/PSQÈVôXÿ^^µf?iúkðk¢q^r w xy†{ x!tîo­j5h f”eee’fˆfÔe„c‡a^]\d^”XU*S±VvVðW¶VÿX>XÄV®UoTìX·VpV¼VëU*V½V VOWU R\QbUËMRH¼GAJâLKÐL³M÷M¹KºLŒNPMNOËRARÉY1V$T¸V|Y÷XxX÷Z0_)dßj×nûu©{Ówá{Ú}ÿx‰x‰y Çy ´z¸z ·}5 / ~ ž… Ø‘ÿ ´—ÿ ½—L–Ê’ gŠ<…u ƒJ‡=„ñˆ Œ;Š ¿‹ ü ¥ Ù’ ^‘ ˜’ W˜ ™ žÿ º¥ÿ v£ÿ ÷¡ÿ ®¡ÿ 3Ÿ Ô› &œ [œ ËŸ Πÿ ãŸÿ ê¢ÿ g›ÿ u Ú Ë‰ \† äƒ í„ "„ 7…† Û† d‡ ሠȉ Öˆ Ä„ ;‚  C} À} ¼ ?‡ ¥… ©‡ ž“ÿ ¨›ÿ•œÿ é’X‘ ÿ ±Œÿ 3–ÿ ²¨ÿ Z¬ÿ ç³ÿ ”«ÿã ÿf“ EŠ ~ Cv /p fp jM Ÿ({%$Ü$ô" "R!Ó#!À!M Æ !; š#A"Ž#T#C$"#í#m"e#Ó&ÈPØB4ÿ^V¶|ßXÿìYÿ,ZÿâZÿ"ZÿrZÿª[ÿ*\ÿ+\ÿâ]ÿ!]ÿé]ÿâ]ÿá^ÿ)^ÿ\ÿ2jÿ‚ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿmÿeÿ]ÿ_ÿ^ÿfÿ]ÿtÿJÿQþŸþŸþ¦þ´þ§%§#–!‰!< ’ Z ¼ ) ë 5 æ  ñ W  # h  Ú õ &  R Ú z  ¥ ù O ß X Õ › >‚  0 & «  é ê ‡  5  ¼ ’ ’  ô ª å Q ™ ð M  ß S j  } ¡ Z X g û I V  ´ † ¢  V À . ‰ É Çz› ¡!T ¿*¥j!\ æ — m œ X â ¬ 7 ¢ .   < ù G ! < ’ Ï N  R ' m þ ò ‰ Õ N <  > Ï ! m  ¦ G   Ž )  Ž Ë – # Í Ñ ‡ . ” 7ÊR ÍÒ ì 9  MÁ 4 ¿G… \ þ   k 6 S%  Û ¢ ÈÀqÙ à Ñ #@ N 1 Ê ‘ ¯ ^g | Í `â j µ  w NÒ( rL©[‘b k K{ÿ ¨ÿ «„ šŒ ¦™ÿ ²¢ÿ a¦ÿ µ±ÿ ±ÿ æ¡ÿ µœ N« @¶ “Àÿ ¤£ ,”œ¢ X­ÿ `´ÿ ÿ¿ÿ ½ÿ Äœ ]ƒ¦… |#r.nii×i{i}g²jvj³oÞ}뎚ǟ=¡"¦Ñ­ÿ ¶þ ï·þ d´þ #ªþ y£þ ;q^þ\]Lt~u€æˆ+Z›ÿ ¼„ÅvFpkne1f«kÎx  ¬‰ ¡• ‹œ H¥ÿ ºªÿ :ªÿ q¨ÿ ç£ÿ žÿ ¡‹ÿ X„ÿ x~ шÿær sa j[IP‹NnQàN}LõI–KEMæS:Z™][`‹aÙgGk¢oSpuuvÊvÖzÕ~ËzWqøo=o8niºo'k­m^n§k±i *~ ò€ h‚ ×’ÿÝ›ÿ`žÿ Y”Q“ÿ µ‘ÿ j˜ÿ ©§ÿ Yªÿ ö±ÿ $«ÿ\ÿê• ‰ t‚{yu!r ¯] z+ F$y$ƒ#¥"´!û! Õ!Ä#9” »!”" "·!À"‹!ø#¬",$6%o"”%B*ARMC·/ÙT¼€IYÿ+Yÿ+[ÿ*Zÿ+ZÿrZÿâ[ÿ"[ÿá\ÿ¡]ÿ ]ÿ¡]ÿà]ÿà]ÿà]ÿà\ÿªiÿÃÿÿÿÿÿÿÿÿÿ^ÿÿgÿÿÿfÿ^ÿÿfÿ_`ÿ_ÿEÿIÿ˜ÿJÿ¨þ®þ¬ÿú"a"?"T#wš 6 ö —  ´ ó ß : ‚ C S R Õ " ‡ ® ‚ Ÿ 5 … s ‰ ³  ? %  á ¯ æ Ô = r ô: V ð ¢ Ì „ K Y N r æ R ¿ -  è ü ˆ 8 Æ z { Ð Ÿ ˆ     ) ¿ 9 ž  ñ $ Õ ï † ~¸ ý‘!†#ð!Ð!Y ë/  Q ì   ¢ Î f ½ ‘ µ ? F  ^ x U & ô  ë y  ç e 5 ™ z ³ £ @ ” Ì â Ú Z ‰ A ° ? ­ / © 4 ¶ î < Ý ½ ž  h {  Ž U Zº ’ 6 † ² È ¨ É  : Œ ` ¼ › † ¨ µ¯ b×] ’ ‰ ­ ek .N [ HŒqò ; À  ƒ ' â % |b”´u— "D+ 8M Z d éq ^{ ã9‡¼8š I¦ÿ f­ÿ ®¶ÿ ®ÿ   S£ ¯ Eºÿ ë¼ÿ _šÔ˜t¥ ®ÿ h¹ÿ ÐÁÿ Q½þ v™ $ƒ›… ºÏu˜r©ovk8fhxj3il²|¿‰Ì™0Ÿžb£‰§ÿ 6²þ ±·þ £³þ sªÿ …«þ èzj`]S[¢m4Uƒö—ÿ ý¦ÿ å6wFrq_mžkènFwJ~ rÿ ©™ÿ #£ÿ ¦ÿ 9¦ Å«ÿ ç§ÿ 2¢ÿ ¤”ÿ úˆÿ 1€ V} æ}Gl C_sXçQ—QoPçP6OhM½KªPUö\Í]ØaÄdgël p^pHszt{wz|Þ~×ymz)r1o€lëj·m,k1nsocr“soêo-ljeGb`•_`‘^Ê^^Y©Z¥Y~]/`.`*b`­[ì]÷_s`&_²\8]Ú\$X§TgV%[LU(OÝPQËRySuT£RêQ¬P€QGS9TÌX[&Z1Z4UÅZeZî\YZ´^ã_–dÌhEnÿqmwàyÐv¥xÉxOzswQvÎw uZxAz q|  ©„ YŠ¥“ –äš ¤˜ \˜ ^” ¡Ž $4Œt‹þ…@„h€ ƒp…óŠè +Ž 2“ ,“ f“ a— ãž ˜Ÿ Sž ” –› W›ÿ 1— †˜ ‰— Ô˜ÿ »™ÿ ?ÿ ¨›ÿ ª” É‘ `‡ ª‚ ±‚ :… ¤ "~ cy ¨{ u o€ l‚ 7 ` ¯| ‚w “v ‘w Mx Ìz z ?} m ˆ V—ÿ cÿ `œÿ ¯ ç•-—ÿ (•ÿ šÿ e¦ÿ «ÿ š±ÿ’«ÿXŸÿ.– ˆ 2 îv ÿnâr ¤d K6 O%|%y#e!ð!y!L!! !Ü bâ [!õ"ó#ã"ú!È"©!¯#d#½#% (ÊOÞC¸6ŠQÌ€"YÿzYÿ;Zÿ±ZÿqZÿaZÿ¨[ÿ)[ÿè\ÿ©]ÿ!]ÿ°]ÿá]ÿà]ÿé]ÿ©\ÿzkÿËÿuÿEÿ†ÿeÿ^ÿ^ÿfÿfÿnÿmÿtÿ­ÿ³ÿÿÿx±ÿ†ÿÕÿ³ÿpþ?þþ6ÿ¨þöÿ"Õ#¾%Ô"Ñ çª Ù ø s ? \ h ¡ ú Ø - | ~ Å | Ö » ! G k  1 ‘ q ¾ ˆ ® › ? ß Ë $  U : ì Ô z  · ¯ w T — î D ö î ü " ñ G ¾ - Ö –  b r  o 4 Ò c Þ ¤ < ~ ^ Ä  þñóÂ+!c!s i!D n $ t / ^ & ¹ “  œ  n Ø f ª * n Q Ý Œ Ú 5 Ñ Á á S È f }  ! u ¨ €    ¡ º j – D   í ü G ‡ Ë ­ E m ³  A ˆ ¿   šÏŒØ  ; >  T ® , ² Õ | 8©5©ø ªÖ9 ¡ ” ÍA š œþ™ý  ^ ©­- " c ý3 ÛßO¿íÅ)  M [ ²f or˜~ ¾„ó ” Ÿÿ ²©ÿ ²¶ÿ Ä´ÿ D¥ÿ › N¦ÿ õ³ÿ u¾ÿ n³ ÉŸ ܤÿ ï¬ÿ _»ÿ 4½ÿ ¢¹þ ¾– ¤‚Ø„ ü‚tbr,rÕk½hþlgl"iCpš}ꈳ™&œW ¢¨ÿ Ô¬þ 3³þ 1´þ 4¯þ -«þ y…ÂaÔ[Ð[ŒhFy+…Aמÿ <ªÿ ‘ \}Õxér—qHr?p8x` |–ÿ q¢ÿ ©ÿ À«ÿ \§ÿ ¢ÿ ž¡ÿ ¥–ÿ ±Š â‚ ~ ƒ w 5d )^þU·KLP¯NÇM KGÁKuOÛV=Y \Ù]’bpaŒdj£m#ptSw‘xä}X–}"z!vÿv²pxq¡oqo%o›sRssÖutWvÃx;rëkhh;eAcUab\à\ªWùX¶_dòaÿ]ö^ta4]»_µb\dc]µY{T¾[$]‘ZS OîRRVéW$VåTgS¦SüV¼ZÙWYù[êY|Z®[®\\\e^ ]%]Þ\5gÐhlúsi{Ï{ÉyHxz| ·}¾~>w&wãz| ½€ «„ aZ“—•[™ › M— ¢– ï“Y‘ QŒ ¤Ž cø‹1Œ2‹ ¶Š ¶Œ Œ éŒ í ‘ _“ • ®š ¥› %š $š ™ O˜ ßšÿ ½›ÿ ñœÿ ê™ÿ ò˜ H™ÿ <˜ÿ 4•ÿ ½“ ‘ R‰ –~ ²~ ¢~ ~ '€ ê~ ©~ n| { z $y ºw †v ÷r Mw |w }y v z ø| ={ >‰ Œ•ÿ à¡ÿÖš Ž:•• E”ÿ î›ÿ ë¨ÿ ­ÿ ]°ÿ_¬ÿU ÿ%—ÿ÷ e„ ¬y ¾r Ìm ¡f ô@ k%»%N"\"¦"y"¨#"? „ò!{"¼#f%o"ý!!€#ö#í#j$ø) N"C,,ÿ‚R4{©UþµUþ-VþtVþüVþôWþtWþ¼Xþ4Yþ5Yþ-Zþ4YþôYþ¼Zþ=YþûYÿxkÿƒýñýÍýÿýŠüžüíü”ü›ü[üüü¢ü¨üœüÂüÄü‹üküÙûûüá"ü.#üe$ü%ü>%üþ&ü%ýJ! !%~$Š!J Ô³¸ p ¯ Ú – = u R ™ ~ ó M Ð ‹  “ ` ¡  } E    I  ¢ 4 ï ß —@  –  Ú  ¢  / W Œ 8  ‚   ˜ f s l A Ñ ,  7 Ù Ž r ç i u Ž ³ b ô & Ñ Å  C Q :ü}cJv Vzip5 ‹ q Ç u  | ³ Ù — Æ ô s 0   Ž ¤ ´ > ! l à £ d ‹  ¦ ˆ ì ¹ ñ +    Û ë p ] ¶ o ß» Ñ  e  ç ¨ ± Ô X @ · { “ ­ o } ^ Ì    ÷#ÛÙ " ó ‹ “   C0 Û U±  ñ  ÿ ª ÎÇð×r×Ñ3  ï Ø ü€ Yn + ” …Ú2 –T_ 6k ×wÁ‡æ Ó– Ì£ ‰¯ÿ "´ÿ ¦ÿ µŸ ¤ÿ ñ¦ ¹ÿ /½ÿ –© Àž ¶¢ ²¦ÿ x²ÿ AÀÿ ‘Áÿ ¶þ õ˜ Ú„ N‡ ±‰r>q§ilîkmk¥k5j#lzóŠ“`šPŸÿë¡§ÿ ©ÿ õþ '­þ ±­þ :§þ úŽ\c ]Ž\É_nx4„‰Ç¡ÿ <¬ÿ ˜ %{”z!r]pßpDprw¢€–ÿ `œ H¨ÿ c¬ÿ i© Á«ÿ ž • ‡ ‡ σ R‚Gm Ò_€[ TyM$P"M¼JFJíI‡KmQ}W.Y›Z¬^\^âe÷g·j&rrŽuw!}Z€Rƒƒ—}œyäv·x—q·q7qmpaq¦qet›vNtàz»z…{„y t™ool>fQ^Ú\YWñ[[õ`ùa@aû`É^F]_lamdZeb×[6Z)^`Ð_J\ZUÈVÎXüYrXsY3XfX®XzVÃZwWGZ{[j\,ZñXøZ2[ñZ¶\ñagn²q w1zJ{Jx9vÊ{{|w”v¦~Ô‚‚ ‰3‹3n–Y™ ¡ Pœ )š !–(– H– Q’ ¬ ’ .‘ %Œi‰ j‰ ¦‰ ²‰ƒ ý“ ´” &– Z— ˜ ™ Y– “ Á•ÿ w˜ÿ 6™ÿ *›ÿ ,–ÿ r• Nšÿ ¿š J”ÿ | T‰ ‹ˆ 'ˆ Ø€ œ~ ~ Z} Ü~ m€ z~ | [| m} ?y ýw s p Ìr Qu ‹z ?v Iy ‹ qƒ -ˆ O‘ÿïŸÿ[• Š)’,˜ L˜ÿ ¢šÿ 6¦ÿ © ®ÿ Ыÿ”ÿa•ÿ㉠’ƒ ¥{ ru ;q ãm J I'|$##!ë"7# !!!hå^`"¶"¬##û"i"b# #e#¬"Ù#ž' œObCç1ÿ§T‡yYOþŠOþzQþRþQþÄRþ 4  ¸ × ¯  µ x*: { †Â· —–® â · F µ ë  À Š DÏ  hJ  Ð u P 6ˆÇ-OXm Ì>X‹d \q >y ¸€ ®Š ”ÿ øžÿ &«ÿ «ÿ î©ÿ ž \ŸI ÿ ó«ÿ =¹ÿ ¶ÿ ï¢ ä¡ Á¦ ¦ÿ ¨µÿ «Âÿ N¾ÿ Ú¯ÿ O• )† =‹ \Pp¶n°mzo(mÙn£ndlænvÿ…ìÒ•ÿ¼•ÿsŸÿ §¡ÿ 5®þ ­´þ «°þ ·¦þ '§ÿ ˜ ŒcÞ[Ò_ygMz„wŽE ÿ ¬±þ y’ ÏŠ|uuËwÕurCt¶wH’  ÿ 5¨ÿ جÿ ¨ÿ æ¤ÿ 'Ÿÿ Ú Õ Y–ÿ¥ ee *\Y–RÁL?MüJFGDK4LjKuP’U»Z\P_’aeøhÏkñqu–x{š„…‰D„†}ÚR|xßs1pØnotçt–wÊ{0{²|C}ò}D}Ï}ùv§o±k{c×[t^×b __b^a]œ_ÝaáeÛ`éc"bã[G[¾aa•a]ãX‰XQWUZ¾\£[-ZÞ\&\ÜZÿYüWHYx]î\nZXÀYY8]äaÒb]hBlstWyU}||ÎyI{€|úy”zK{ŸzÑ}U€ü‰·“d•¢› ˜ W   Ó› š• î’ åá‘ '’ æŽi ÛŒ 5† ©… ë„ y… ©ˆ óŠ ¯Ž j“ e— n• ·” ã• _”  Ë ˆ‘ÿ ¶–ÿ ·™ A• S™ ™ J’ Û I ‹ Ÿ‰ ¡ˆ B Y ! € (ƒ  èz y{ /| s} t{ y …v r s t Nv Œv É| ±~ … © Â’ ‹ ÿ ¥‘ QŒ ®’&šÿÿ Qÿ ¬¤ÿ ¥ÿ 3¬ÿY«ÿXœÿ­•ÿíŠ Î‚ .x |t Bo j ŸW ä) ä&û"©!æ!í"¤!•!Æâ¿q?!Ê"#+"º"«"r#e"ê#$' fORD†2sQÌ{]PþKPþQþ|Qþ‚Qþ QþKQþüRþ{RþËSþSþ{Sþ|Sþ;SþKSþÄSÿÀkÿCûí üX ûfüØûûUûvû½ûEû}û¿ûÖûgûÝûWûGüpû¿û¯üÀüˆ ûDüAûGûfûþû/ü+üd 2$¶",  ˜Œ B  ð  ¡ ü ˜ + Ú ä Z 8 ¦    !  J é < ¼  ã æ  L M Î O · Ë } Ì Ó Ê K ¹ » 7 ê 8 ö  G f ¸ Ÿ ™ º b N ç ƒ û  $ Ç  ‘ } ì ³ û ç   Ÿ , Ü v ã , ‡ÓÐç²û9 ¯ Tœ ž ¡  h È  . Ê  « Ü °  ”   Ê _ õ › w Å Ì \ S m õ + ˆ h ! › d Å   Ë r Ç E V R 7 f e k  " Ž  e    · ö Ä ³  ) , j r c ˆ · æ ` e øóTO ò e=ç + ¼ Š > “ ¹0$ aI~ ùõ Ç à Ìä tÔ gA™0‘ „  àD^ g t é~ Sƒ´Šª‘ Ÿÿ ­ÿ ­ÿ Œªÿ Σÿ à¤ÿ ¡¦ÿ ê®ÿ mºþ <« Y£ W£ #¨ Š«ÿ =ºÿ §¿ÿ Š»þ t¬ÿ L’ ç‡ 9Œ `€&nn²lÂoipâsFqÉm mvx½‡ Ž Ïÿ(”ÿj ¥ÿ Ü©ÿ °ÿ ´þ ;ªþ ž¬ÿ Ïš f\\J^™dÍw傉ÿ v¡ÿ X°ÿ _”ÿ ¼ƒH}¨xx¥v×r»q÷y ” Ÿÿ ¥ÿ q¬ÿ Æ«ÿ ͦÿ Ášÿ ”‰ÿ ú‚ V nŒÿäs t\ˆY‘XÖRDLüJ¶M]M;OhLîO#RŽVwZ\ _ŸbœfiülæpsŸw•{Û„•‰yŠ=…H€’€û}xØwÔt›uÐxÌx•xx N| w;‚?w~ú€~}vlrýn‚hÒgÆd b»cÃ`{_dfgÝhÐfgRd×a^b_˜edÏfc\u[_ì[ÿ\º\w[ò]è[á\à[`XZ»\¼[ñ],]¦[î]­^febh¿m/ortzÉ|wy w›yÍz wvizퟄˆ®c— K˜ÿ »œÿ ª› — Uœ ä” Ù T ^Œ ‹ ëŒ ëŽ0‡ û„ 0 Çpƒü‡ ±… i… |‡ íŒ 9“ "• 1” Ù’ “Ž 'Œ ¤ Œ’ –ÿ ;™ÿ k›ÿ óš ƒ› Í— Ñ‹ S‹ ‰ÿ ý‡ … Ù ® ï õ€ à| ò{ ñ{ ýy Î| }} îz þy =y y Íx w Mz G „ â — É¡ÿ aŽ eï™Ùœÿ h˜ÿ ( ÿ ˜¤ÿ ›©ÿ â¯ÿD¢ÿ]•ÿ'Š € #w pt Áp Tm uZ†0 Q&C#ä!é Š"n!Œ!È!B5t>{ê Y!´!ð"ë$>$ $ "¡#Û( PÛD¦3ÿÞVƒ|Pþ„PþQþKQþÄPþËQþTQþ‹Rþ RþLRþÃSþLRþŠSþSþ¼Sþ ´ n  L ÷ H   9 G  ž Ð x 9 æ É e Ì 5 ä  0 ñ \ g etmxñÈ · µy c ß­!$5 ;  R © @ ƒ $ "!   ¸ I ® ¬ ê < ß ® Ü - h ¬ ã ½ ò ë ’ ¸ ½ þ À ² « ë  Â â ô ú 2 % Ô 3 O / Ó ë \ ã ½ [ T  O S @ ¡ Ž š ‚!  ¯ 6 \ 3  Þ M ( Þ o ;»ÈfN  E O¨ · † Ü 1¹3 È † ÑW b † F· „D:\ì¤"” •I Õ_ Ág Í| é‚Ј T”ÿ z– Í¢ÿ ©«ÿ Dªÿ Ü­ÿ Τÿ -¢ ˆ«ÿ .°ÿ qµÿ « Ú¦ 㤠T¨ ­ÿ t½ÿ –Àÿ …°þ &ªÿ Ή ~ˆ .Š Õz:osnñp+r½q2sJqÅnqou|àˆ –“Ñ“ÿ2Ÿÿ©©ÿ ®þ è¯þ m²þ Q­þ Ú®ÿ Á ˆg]Ìa5fg}„€ Ò‡ ŠŸÿ ‰®ÿ Ošÿ eƒA|§uRy~w·rprb v¡ÿ  ÿ Íœ A ÿ ¡ÿ M—ÿ ¯ÿ s‚ z °ƒÿ ¸ƒÿêe žZZLVoO(PO-L÷L°PdOäPÊSV«Z[`^§cˆd…hDmeoÚvy.yô‚„P‰ ˆ§‡†M €‹~ù~@|Kzz zŽ}|Ä n} ÿú€½€ý~>€3}üzÄ{Jx&sŸtysÀo™h&g©hp q…mÍl€d$_¨acûh¬h²fÏd#ar^èa%]ôZ½Yù^å_X`_™_£[ü\­^![:]3] aæd—diøn+njrÛyzIxJ{‚vÓwœ{Êyw'yá<… vŠd‘š“ Θÿ ¾™ [™ š i— Z‘ {Ž c â /Ž oŒh’ Ž e… ÷„ ;… ¿„ ¶… ~ˆ t† ¿Š q + á• X‘ ØŒ "‡ cŒ – ’” šÿ 3žÿ +Ÿÿ tž Cœ Æ™ÿ q˜ÿ m”ÿ ;‹ÿ ü ×ÿ 3‹ Q… ¦ •‚ Õ æ m} y} êy Oz Î~ 8} û€ 7z qz »z Nz { : º€ ¾† æÿ éœÿ ˜Ÿÿ ׎ ÑŒn‘á—£“ ÿ Û£ÿ Ó¥ÿ `¬ÿ™žÿ%–ÿ ¢ ‚ ây Às •n «k  ] U8 D( %Ÿ!±!é#¢"* ?z;Cò»$I"D#2"î#h#ì"ü :#.( _N1Dø4Q}UPþœPþTQþ•Qþ„PþÌPþüQþ…QþÄRþ•RþŒRþÔRþÔRþÄSþSþTÿ jÿ‹ýUý…ü·ýmý‹þR þ[ýÙýIýõüï ÿáý"ýÉþ2ýˆþkýý~þÌýCþƒýþ`þ:ýýÏþý  !&:!Mª Vø Ï Û Š Î k / = ! • Y j . š  9  Ë K ®  ˆ ½  ‹  U ’ ] a r Ö n  _ à ; ü Ë Ú Ü x ¨ / »  1 K y } ‚  Á t % ? w ® î  J  ž  ó ~  ¤ ù »  ¿ Ÿ  « Ëâ ªµ!,¨ò è Ïë) ^ \ Ç    … ‹ † ™ ž Å  t ñ C ã ½ t I c O ÷ o =  G Á í  Ã s J ‰ ü > ` – « ] ¸ ¡ Ó Ÿ t ° =  Ê º Ç ¬ á 5 ò g ’ P Ç $ ˆ  Ô  î a j  É ± º ™ 4 ¸ — J  h ~—eVÿ Í ž Ù à ™ E¹  5cP Æ y # ? Ô :q • vL3bk{0 ^… "”ÿ þÿ *¨ÿ  ¬ÿ Õ¯ÿ Î¥ÿ kŸÿ ¶¤ ‹­ÿ æ²ÿ Y°ÿ ¥ª ü¤ ÷¢ W¨ÿ ´¬ÿ â»ÿ W¼ÿ ¨ÿ €¨ÿ À… 7„ ëˆ Ÿy:qóq¤wnxZxÊu†q^p]s~g‰ ×"’–ÿ1 ÿ Öªÿ „¯þ ö±þ ò¶þ -±þ ³²þ w— Tg—_ƒ^QkŠyæŒÿ r¢ÿ ƒ±þ ýžÿ œ”€åzÉ{NuNvm³ °™ÿ }”ÿ uœÿ —ÿ !”ÿ ô’ÿ ¯„ X{ éz¯‰ÿap …ZUX—ZV&SÃRNzO7N1PšP¢OnT~S\^Ø`Y`³eáhÃnÙmîrÐyÔ}O€Tƒ¤†fŒÆ8 .Œ c… ·Ez|ûzÓy£yƒ qI|; ­€ n‚9¿}þ}ÑÆ~W€{}‰|Ï©€"}¡tËpÈvèuïqúnÇiXhÑc#dVe‰l4k²i:gEd&dUa._2]¼^¤^ ^l^á^a^ž]ä\3bT_fe€bSdejºl®p)rÐv{‚|UyRxv$vyÛ|;~(~ u… +Ž Þ‘ јÿ >Ÿÿ v™ N™ œ— _•j” %’ ’” Ñ“ — “ &  Z… v‚ v ú‚ ù‰ éŽ o‘ Z“ “ Ü” ” s ≠¯Š ÙŠ ØŽ •™  Ážÿ t£ÿ k£ÿ cÿ ½– B™ šÿ u—ÿ à”ÿ ö Î ‰ Ž„ +€ $ƒ d€ h r} Æ~ ‚€ ò~ ÷ ¬ sx À| s{ °z ‰x Á~ € ω p’ ¢ÿ Ÿÿ _ ¤Ž “—a‘ t R¥ÿ •¨ÿ U§ÿÍ£ÿ™ÿ P † Ÿ 3v Dt [i ¬] º< |$H$!¼!,","x!R MÆ! #  ½Ú¬"!¹!€"z#}!ž ü"Þ, 7PXB81ÿuT{ÙPþ OþËQþDQþ{PþüPþÄQþ{Qþ„QþûRþƒRþ»Rþ³RþÂSþ Sþ Sþ‡iþ»ýåþ! ý]þfþ{ þ·þó þFþ ýç þ% þÖ þ­ þ þì ýN þ þ_þó ÿ1 þ+ ÿøþs þ: ÿÁþ, ÿ° ýOÿÊ —&< Â) þ d o 1 ë Ê ”  ö S  ­ Ç { = æ : < ª ¯ o @  q ' $ 9 ? £ w r ò Í Ÿ Í  Y í 5 w P ö b F ê  œ û ° S ­ ¬ : » - ë à µ f — n ” O ¿ ¨ í T E ì Î w | n  ói)Á -" ô ê¼! Oé ®ûü Ñ “ I F ª z ' æ ‚ Q   ¢ Æ p b  í -   * Z Ë œ  V  ® Ô  ô - Á ¤ ´ ² ~ [ ‘ « . * ¨ Š E  Œ . r û Þ Õ  /!x u d  8 ˜ Ý  Û € ‰   ß è ’ ¸   Ù Ù  + ˜  Î á ê # Y Æ ð qIø* – \—ó Í  # É’ºÅ4 † ¥P þd6l äz±…]‹ _“ ˆ¡ÿ ´¬ÿ V¯ÿ ®ÿ S¦ÿ d£ÿ ¥¨ÿ ]°ÿ (­ÿ {«ÿ m© £ ·¥ÿ e§ÿ j¯ÿ ¢ºÿ œ¾ÿ G­þt¢ÿˆ ›ˆ ƒ êwÅvÿxSx+{w}ñwìs”pÛrÒQŠÑb “ÿw ÿ Ý«ÿ O²þ 3¶þ t¸þ $²þ ¥ÿ T÷iP_`@iö|„ •ÿ !£þ 9³þ ªžÿ ‰‡Ñyý{KxuqZoÙ… [šÿ t•ÿ ©œÿ ’ÿ ;† ! 〠š| …ÿ ø…ÿ«a ÿWuXeV TìM>K±MÿNpM,OcR¬S7UVµ[­^ª^åa\eŒfImðq]vzЀ—V…”‰€‹ ‹´Œ mˆ ì‚ ­ð # ²‚ ëƒ w‚ ‚ ë…g î€ q€ b þ@€x}}ºC}}M|_}®}-~X~WXz¨xoy_u2pGliŒl‡kön1kíj²hNdÛc®cfdÔc^p\p]ï_í_ã_^$^è_š_(cd˜fGhkdmjr!r%uØy‹{œE}ByÊuöw©{[NƒK…3„ªˆïŽY’ ˜šÿ yÿ 7Ÿÿ ¹— Ž Ú– í• #’ T‘ Ž Ÿ‘ – -• g”!‘ ! ,‹ Ž í‘ œ Ú ŸŒ _‹ በ¨ˆ ï‰ "Œ ® § Üéš V¡ÿ ½ÿ þÿ z¢ÿ s¡ Æ¢  ÿ ·šÿ ò—ÿ ò ˆ‹ VŠ ‡ ؆ f„ æ‚ '€ 0 E : ø~ 4€ õ ¼~ j{ x ÿu ’} {} A}Z€Ù‹ 4“ ¢ÿ Øžÿ rjª’ £—;–n• ›ÿ z¡ÿ /¨ÿ §ÿ Z¡ Æ ÿ Œ K‚ Ü| ãvI{ Ìm+_ š9 ø%t&^#ñ"Þ!r!]tš+Ú\Œö 1à~ Ñ"ë#!‘"”%K, WP§BÅ-‘S zìPþ Oþ³PþËQþPþBPþ»Qþ QþDQþÄRþ{Rþ{RþüSþSþCSþKSþjÿ þ þhþë þþ ÿ:þýïþ_ÿ¸þ}þt þì þ/ þ þD ÿXþÌ ý•þ- þþs þn þƒþ3 þKþCþà þ^ £$yÀ` £¥ † J É ì O  2 v }  ¸   û 1 ! ç ð F æ ¢  ¾B z ç Œ ( ×  T Ò ’ o  B # Ž  ˆ ° ´ ®   9 Û ¯ š d  ® ™ í ‹ À ¾  … · “ J ÿ ; „ ê º b 2 7 I / ö ) { G@  ¢!qW C: ý W æ k  › Ñ Š \ R ž ù ¡ ê E Ò e ß    ¿ µ ’ À : ç … Ö  ž à &  O * 5   ¼ H æ ª { í 7   ì  „  Ì * 3 H ®   ¹  f Î Ý  n K  T  µ  e • » Y È ¼ å J Ó Á T w Ç Ž ( µ ª z R ¨ Í " Ôµßäxµ cw s? v  R *aúnÄ{ ÷‹L‘—œ ̤ÿ ðªÿ ‘¬ÿ Ϋÿ ¥ÿ â¦ÿ o§ÿ î°ÿ Q¬ÿ g©ÿ }ª ˜¨ÿ ;ªÿ ð©ÿ ê¬ÿ ô·ÿ ¾þ <¯ÿÇšÿ t… )‡ œƒ õwfvÔxOyí}}ÂxAtas+ty熘ÿz –œÿ l¤ÿ K©þ q§þ | ÿ žÿ ›ÿ"ŒBl{aÁa„kÔz„Å‹ÿ ' ÿ ´þ Ö¢þ <ÿ>…>~7| y¼p;oä‹ W™ÿ 1˜ÿ—ÿäŽÿ ±†‚ _} Û~ÏÿZn vZVXo[ÂV©QLQ‚PUP%MtO`QR¼S/U—Y¶_Ø_a_3ceeÐgÀlër‰v‹xÖ~•€™…†™ŠVi l‡ ¤…éƒ ê‚ ï‚ qƒ o % a~ û…ð†ª… ÷ m}‘ñÁ~È|„¼€|KJ}y}=~f~{gy§vòt¼qÁr =ƒ µ 7} :{Hz ?y x y T} L‚ ‹ 4—ÿ i¥þ|žÿ Þ“!Œb‘Æ—Ì¢Ÿ Y› M™ÿ õ˜ÿ hÿ Þÿ á–ÿ q A† ~ ò|DvÛn &` [ ‹/ -$Ë"| Š!|!ü" ! µ©Ž æñVâM  "–"å""Á%~, BQF`1YP vöFþOFþGþGþGþGþNGþWGþŽHþHþžIþIþIþ?Iÿ@IþVLÿ”jÿË ýÝþlþÅþëþö þÑþþþ|þÄ þRÿRþ­ þÍ þœþÄ ÿð ý7þ; þ¯ þHÿ² þ¬þÅ þô þõþ¯ þ¼ þ†þ“ ð$Í#UR€| ß f … Ê ù [  l œ 5 ¤ õ ‘ C Ë A ô ñ  J ) ¶ á â ? · k ô ? ‰ – œ ÿ ,  O Ì Ó 0 À · x € ² ò  " 0 ¦ É Þ » U i S õ È è – . ù _ m U ^    L ¶ ¸ ” © &  * ¶  ’ ì… _C˜ ¢²áp  û ¢  3 ” X Ç §  o À   ˜ ï J Ž z ˜ & É - Ð "  } î ¢ ž   ² ½  _ e ™ ç4°@ ¶ œ – c ð    Û Ý 6! ƒ!  °!   ¦ èðò O   / Ö Ž S  @ B ³  ¼ G g ø ´  ‚"± Í Ÿ"*!P / q  É ñ  ø  _ J -   H × m S è 2" ÷  ‰% öP e`rU5Žšÿ 8 ÿ h¦ÿ Þ¥ÿ gªÿ §ÿ I£ÿ ¢ÿ ð¨ÿ ¬ÿ ­ÿ F§ Ï©ÿ ª¤ R¦ E¨ÿ ñ®ÿ #¸ÿ $µÿ £ÿ œÿ ¡Ž —Š d‡ÿ}p€Ÿ}z y$xíx"tYr×uö~Έè‹®Œo”jŸD£©ÿ ¥þ ¹¨þ ü¤þ |¢þ 6ÿ uabû]ò탌ÿ .œÿ †·þ ¤¦ÿ T•ÿ _ˆ¬‚Š€¹òvswˆ Ô¥ÿ ã¡ÿ ”‘ …ÿ ³ƒÿ¿ † Ý‚ÿ ða 7YpXã^‚\zSÅP\O­Q^R×P`PÝTšR·XWO^_Y`ÚbTde[jxnnuÎzŽ~ЄK„:‡8Š@ g Ú‘ ^“ Š Š ‚ )€ é~ ;} ÿ|ù| |‚ t… *„ x| {|z„wÖw¾yLz†|{þ|Àƒ€}a{jxmyj}zÓx’x’~}ÌGM‚F|uÚq&fäg“idÚdjci`öa¾c5d(hi…dËiBh=enÌkvs|ris—w|½‚8Ù|\}Ü|~ ~ Í·ü‡jŽ  î“ ˜ W• Ú” ” .‘qó’ ~”i‘ d ß‹ œˆ Ú‰ ë ‹1‹ý f Ü‘ /’ × E’ ^’ ž Ð’ – ™ÿ ô™ ‡•  Ö’ [ž Á¡ÿ $¡ÿ /œÿ ùš Ö Q” æ’ × ”Š _ˆ ‚ ©‚ s‚ ¸‡ )€ ÿ >‚ s ø} ~ û‚ «~ V ü|Œ{Qz N{Šy m žƒR T™ÿ °Ÿÿßœÿ '‘ ¥‡ø–Ξ ´£ ߤ ÉŸÿ h–ÿ x” • H JŒÿ y„ [ƒ ï€{€y xe b ; A$}"¡!ô"5!µ!†hÑ( ï 6:A"ˆ!f!x"ü"ò+ µQFg/ÿlR$v«EþÝEþÍGþGþÝFþžFþÏGÿHGþŸHþHþ—Hþ¥HþÕHþÖIþHþÕLÿjÿÊ þ þþü þ$ÿá þíÿq þ¾ þ{þ† ÿ`ÿh þ2 þ4 ÿ€ þ” þû þ{ þ þù þë þS þf þs þ‡ þÊ þ| ÿÈþT ë#°!•á^ Ç S  ò  7 ‘ ‚ A ‡ ] Ï B ý ´ \ Ð ‚ – ) 5 y D  ½  Nj  K a  ¬  µ  …  ^ r a · ž £ 1 Ê Î ` ½ V @  š í › ë ` “ ² ¨ × ½ _  M x   ‹  ÷ § ˜  Ž àù  M 9 ëÚÈ ïŠ o Y }( ' µ ´ ¼ ­ ˜ S ¶  6 ç È Ý ›   à + V ÿ q Ë Æ ´ e c { ‘ %  ] 1 \  V  ï ” ¶ Æ ¢ å “  b  ö " ¢! 9" X È Î '!Ó µ 4 í# 6  ™ x Z á % Õ K ¯! 8 !H#†!¥ ö Z!Ç ú e _ ´   p ô Ø È › U! ¤ ç » Æ w „ " )! « ó  4$ Ï& sK þgYs‚{Þ•[™ÿ =™ ”œ Æžÿ cœÿ ÷™ÿ s C§ÿ ]ªÿ Sªÿ U¢ …¡ L¥ÿ ®¦ÿ ¿ªÿ ¬¯ÿ {¸ÿ /®ÿ ÛŸÿ !œÿ ¨ ‡ ¤³{š€Ç{A‚{)xözkrräuÅ}°¦‘–”Ô›¡¥©ÿ ‹¦ÿ Ï«þ 2«þ l¤þ œ›ÿ Έ &cha4\ÙzÇ@„ÿ ¨–ÿ жþ  «þ v—ÿ $׋3‡6‚üzÌ|}‡ e°þ ;¦ÿ Q›ÿŒÿ.‡ÿ òŠÿ w–ÿ Òq 8Z¥W½Y©`¹[ZT—N&KIPQ\O}RSeW†ZºZ°_a‰ccšhÈjÁjBp¦u\z~ ƒ;†r…ïö‘ £– @˜ ’ Ž …Š È† /}Ã|{yƒzŒ} Ä‚ e jx ñx ‡wÍtÚw–ytxŒ{M};}ÇÁƒ†DÙ}+}Ý|&~Ê~Ž‚-ƒ ¥ˆ ‰ ž† d„pƒ ¯x†m´h^g’hhfâcyb<`rb]c˜dÕhChˆi…gŒkn–qOp5q¯wOxÙ~‚N€ŒÎ}}Ê~€†‚…‹‡}Œ¸‘! ’á µ’ ﲌ±è‘8Žñ d‹ ¡ˆ c…y‰ 3Š æé‘® ï»´‘ Š‘  “ Ù’ R“ ‰“ Ö Ê™ • ˆ”ÿ ù‘ Q t Lÿ 5œ Å– É• Г '‘ ÒŽ Œ ‰ˆ … 'ƒ 5‚ è… j‡ '„ «† ¦„ ÷† _€ =€ zƒ 5}f~Á} Dz :y ù{Qy {‚ Ä’ CžÿÔ£ÿ\Ÿÿ ¥’ íæ˜ ž   ¡¨ °ÿ p´ÿ ¥­ÿ q¢ÿ õ” Ñ” ™ÿ ÷ ì/€[u1c ^[ @K ^# ®#""k"¾$õ!Ò» 3„fþ c!uæ È"±!'!Ý" * ]L«Eî2ÿ^O)wéEÿØEþÏGþGþÝFþÞFþÏGþ_Gþ–GþÞHþÞHþfHþ–Hþ•HþÞHþžLÿiÿS þs þÓ þ;þþÕ þº ÿ9þ´ þ þh þ"þH þ‡ þ®þõþ¥ þ÷ þdþ þ=ÿ˜ þ þ¿þôþý ÿ0 þ,þ÷ þ; ·#" € (y Õ  ú ® 1 u à c b  Ù n C — ~ ò    P R ø k $ ® Ô  á P Ô 5  c Ÿ N  Ë  ) u C n Å ° Ð Ñ Ð ¿ ç r 4 Ñ , ÜŸ ý Ç í  … Ï  : F b  t Q Ô  Ú t ”  û  * mˆ ‹] Ô ]ËŠ ^  G!º ž î ®¨  Í k % Ó ¤ p O / ¯ S Ù z ü  S › ` Û a / ­ C ¿ " 1   ç  Ÿ î î – ã c y å Ó o ä Í  H" â ~ Í  Î  ' % Ë à!  ô j s " ¢ ! Ô ?  • R!%f#"T ,!Ë"ûkza R!n † M ± õ   G W  + ] å • ì Ù# I  U   $ |(…I¼g tÄ…7‘Ä— •ÿ {—ÿ ±–ÿ ð˜ÿ 0— T” ËŸÿ b¦ÿ ñ¨ÿ +§þx¡þ ½Ÿÿ ‰žÿ y¨ Æ®ÿ ¿°ÿ æ¯ÿ "¤ÿ ó• HŒ ¦‚°†ã€·~G„.‰Q…Y|*xµw\r¨vD|-‰]‹˜‘ã›Ý¢Ó¦ÿp®ÿ H¬ÿ ã­ÿ ˬþ ì¦þ ýšÿ ’•ÿ äd÷`=ZÄsS‡’…ÿ z“ÿ X²þ ½°ÿ Åœÿ «ËŒÞƒlƒò{V‡iž Bµþ >°þ d¨þ–ÿÿ c™ÿ X˜ÿc pYkYn^T[æVpRšL1N¬P¯QKQPâR˜S®TZ–^-]³`k_çdRgÚimssZ|NÊ…‡Œ-ˆÔŽpª’ – ‘ ÓŒ [‰ '„ t~@xËs—u tÃ| .€ j€ ¦| ix òx ?wBx Žy VtÞy€~ v‚z†‰r…DƒÈ~ };€¥ –‚<† ¨Ž Õ–ÿ q‘ ’ÿ ´ … šw Êo_juiÇlLgÜkIc(coe¡hÿi,f–hge¦jmj`ü]ïpD…>‡ –’ÿ ï­ÿ Á¶þ ¸©ÿ ž“ ‡;÷€||¬‡à ÿ ´°ÿ @¯þ 3©þêžþøœÿ ¦ÿ ‰ à[TYi\Wa¸ZkRP^L:KO÷P]QçQ£PQÊQdXIZ‚_­^­]ŸaipžsÔxMzÁ„͆Œ†å‹“” ” d™ B” É ‰ ¤„p}°xGvYst€|h რ•} kw zz8xtÉwxƒ{ 4{ s òˆ *‰ ¾†ƒ€Š…9ˆø‹ :—ÿ úœÿ *›ÿ eÿ šÿ ⊠z oplÒj™kUjÁlxi:d¦j‰hSk|kÇk„kˆiRlo oÙpuq–xj}@U€‹¾€"~R|‹…X…ýˆ+ŠqŽ6‘ e” W— •a”a• &’7ué ga‹ k‹ 1Œ ¥Š Š Y‹ !|’@³›‘ S“ ’ Å‘ ‘ Ä™ÿ =” “ X– – ’ [’ Q¢ ¡ ‹ÿ i™ Ì—ÿ ½” ‡ ‰ Û† _‹  ȇ c„ i… .† eƒ bƒ Û… æ‚ m ¦€ á‚ íƒ h€ ñ} Ô{ z ¸x Õ~ öx ¾} ¯‡ K”ÿ §žÿ”¢ÿWšÿ 7“ '’ò–ÿ f™ÿ èŸÿ #¢ÿ '¬ÿ â³ÿ &ºÿ ®¼ÿ g¸ÿ î¨ÿ ½¢ÿ v“ ΃ ~w pfè^ \ »6 /"x"!ä"~"¦ ” A‡Uú!³^ã§à!€!=é"Y y, ¼QmD-1PKuuEþEþÏGÿHþFþÕFþÍGþUGþŽGþÍHþ^HþHþVHþOHþ–Hþ¥Lÿ‹jÿË þ þËþ þ<þZþ' þ- þ½ þVþv ýv ÿ*þí þ2þcþ þ ýG ÿ(þC ÿ¹ ÿ þûþw þû þ þVþ† þ” &ž$$¨ V Æ · ¨ –  † ¨ Ò X   â X Ž Ž × =  “ 0 ß ò ` ³ ® Q L F H ´” ³ | Ι ö Ï K ' e T ™ C  ¬ ? u ›  ¬ Ô 7 œ É ´ Ï N ² ù É  ® Ð r © ƒ ø ü  ¿ Ð U ¨ ô § Ô c ž þ Ù5ñz  5 ï° + ö´˜ M Ö e Ô p Q  „  Y Þ : ý @ î  è j ± æ p 0 c | y h  A » ¿ ž Ó € î ¦ ‡P   > 3¸  D y  © / n ­ © Á Y µ "  Ò z \ ú œ% N  ¤ ‘ Ë ' ô Ä õ € ÿ ² X ,ìR ý!^`  /X ú d % — .  ¬ { '" * ]! [   ü ë  î º º$ |(Ð-¼F×mz‚‹¥“ šÿ 4ÿ p›ÿ c› Á¡ÿ ¢£ÿ á£ÿ ì±þ ÿ²ÿ "®ÿ k©ÿ ²¡   [£ ¦ÿ ´§ÿ ú¥ Í© Ϧ E– “‰è ÷ƒ «€7}åƒ7€ÙÎzwésäs,t({D‡t™¡¦’¦«ÿy²ÿ ˲ÿ ž²ÿ ³þ vªþ ø¢ÿ Ωþ or0bl]=jóƒ,… Õÿ ñ¦ÿ ¹þ º¯ÿ –ÿù†q„Í‚®„ä…÷›ÿ 3ªþ ü«ÿ«þ³¥ÿ ©ÿ ƒªþ ¨u ¿[™Y)^J[çWxQ.N.O0MÈPëPdPPãQ¨QuPáSyY]¨^`]ejFmfsÍ{}Œƒ7J„z†Ù‰ß’ ¤š › ƒ‘ TŒ ÙŠ b…è~xs[s¡p¬v~»† ž„ È{ dytYuGvøu †u þ} ºz ÷| ¸ q(ƒs´~”\уMƒJŠ æ ç™ÿ xžÿ aŸÿ $ ÿ šÿ #Žÿ º€ £o§k…kl4m:k‚m5gžiÜhfÕgi“k k ilOq2qÅtÌyúvl|Ö}”‚„†ƒÃ}øzÑ}ꂟ‡‹3Ž4‘ ‘ ˆ”  ƒ‘ ‘dg‹6玅ª9Œ ï… |‹:Œ Œ "‘‘ Ó‘ Ñ Y’ ”’  ” Ó Ý “ ’ Í“ Ô“ Ž’  #‘ ‘’ ¦˜ Pš ]œ W š â” Ž µ êŒ … ªŠ b ­ƒ ᇠ¦… ܃ Ù ™ƒ *€ ?{ À{ ®| ¹~ i€ m| ‹~ ú| y y F{ ú‚ … b•ÿ /žÿ¢ÿSœÿ Ü’ ”¦”—ÿ ±œÿ ™žÿ â¨ÿ ºªÿ ù°ÿ +ºÿ ¹ÿ Ý´ÿ ¬­ÿ å ÿ .’ € µt¯n¼iw` u^ ÁA "]!( Å!l!ÿ« N¸ñ“2óH ¸%“!R X!ö" ‚( °PeD65bTduqEþžEþÎFþÝGþÞFþÎFþÞGþVGþ‡GþßHþHþHþ_Hþ^Hþ—HþžLÿÔgÿÑþÕ þr ÿ@ þmþÏ ÿ± þDÿ0 þ5 þã þ ÿþd þŽþÞþ¾ ÿiþnþ þô þ× þ} þóÿè þŒ þD þS þ| þ&3$!Ä Ã˜ Ë ¬ S æ e í ‡ / ƒ - Q ò æ É r u m  H Œ Ï ‹ i d ƒ ð ­ _ $€› ¯ | « ;¨ l ‡   x  ¦  ¡  ý ( ] ‚ ” = W é : ä  ^ - ~ q Á 0 Þ ™ & 9  « ð ‡ š  ù  · š ‚ù • w ½ 6 ³ U+ èÓ  & ” [  W ^ P é 6 D ¦ ˆ 0 · ÿ [ î  ¥  ‘ Ð Æ ê ¶!Q ^ ê Ç  c ` 5 Þ  u $h * t!T ó § ~ } í , õ 8 ² Ì  V b! >! ó Y ^! £! z# ; À 6 ´ # Y ×  ¯ Ñ ”$  F! …%¬"ž!1%Ñ"68  ýx «  G! X  ~ ^ . Ö Â ¼ ý  = Ÿ - ± } °  ×" Û( }/ G¤oQ{DŒ«•ÿ¼›H ÿ '›ÿ {¢ÿ ؤÿ ¶«ÿ 6®ÿ –¯þ}µÿ ¹ÿ ʲÿ Ø©ÿ ©¢ÿ 2¤ÿ z­ I³ÿ 9»ÿ \¶ÿ ©ÿ ª’ † m}H‰ ‡@çå}NC}x—uhuv{ „Z‘虣Ҫ˫°ÿ®¸ÿ ±ÿ°þ å­þ è¨ÿ S¨ÿ „€øbð_wh…X‡ Œ‹ÿ 0žÿ ·þ ý¸ÿ A§ÿ aˆ¡†vƒJ…jˆŒÛšÿ ܦþ¾­þ«§ÿ “µþ ´ÿQg 1[6\˜_•VBRŸOôNoMyPàJ–PéROÅPÀQBQU¥[8^¦bdSe{gŽp.t×z ~‚„‚¡Šn“ Š™ÿ ¶™ Á—ÿ y’ ÒŠ ߃ ë}xtŸr–sÛvJ~Ž c j{ åwÁwxxDxûz»zÀxºz ~} î€ d€ u}³{}S‚…„ú‡ n P’ š @ ÿ ¢ ÿ â¡ÿß›ÿ /Ž … $sHqbmFjl8gj[h`g²gýiÚh*i+fÃgNfúh÷mÂqHr vhxP|Š8„©º€½|Œ©„b…—‰ŒŒ¿ñ¢ \ ‘  åŒ î )Ž8Žq+‰ ¢‡ ¦Œ Ú`޾£ ' Z º Ž ¤ Ð Œ Ù £ ÒŒ ¤Š n“ C’ Q” _• ˜˜ Yœÿ {£ÿ k¢ÿ 6 Á› J›ÿ ô—ÿ ­’ ‹ ‘‡ \‡ V† ƒ “ƒ Ü $ & î€ ¨{ ½| ê{ ó{ 0y Åt ã~ J { J{ÀP ô‰ —ÿ æ™ÿ \ŸÿO›ÿ ž”ÿ y“” …—Мÿ öŸÿ X£ M«ÿ ´®ÿ &·ÿ '»ÿ [¶ÿ «ÿ ›ÿ ¾Œ ã ¸u/nÁkE` |] ÅI 6#›#4"5!Ò/ * ‰!³ 7  ›!N""J ü% Ÿ. PF¯5ÿU/u+AþOAþ AþÕBþBþ Aþ”AþÔBþ–BþÝCþBþŒCþCþLCþCþKIÿ jÿÊ ÿ` þA þU þeÿÀþ‹ þÍ þ5 þðþtþüþ þ4 þþ<þÅþ= ÿþ> þ: ÿ( þô þÀþ? þÎ þ~þì þs þ+$[$ñ%¥è .  ’ q ÿ ÿ U  u ‡  ð   O   Û 4 \ ¤ q  ƒ r n \ ] ó*º" { *  ÿ »  k Š U î Ÿ ’  $ € ÷ X Ä  w  ô Œ † = : % ¥ & Ì , 4 í “ i ‘ é º à ’ ³ à L E ” ý pó ò "!  S ¿y F í > Ú l  ©  è í à 7 x ø ¼ & ¨ Á Ê à é ¦ 9 X , ? ¡ æ  ¶  É ¾ u ú T D Uh D¨ É" ù Ö œ @ « m Ô ; à  ¹ ³  *! !"  € # Ë! »! V" f ~ ó £ W  ´! Ñ ‚ E ¨"$Š"Ò#%0 C E  ü q  ä     q l å !    7 2 ” ù ` × K$ :&"0 "P 2t }~‹æ” Ƙÿ é˜ÿ ´Ÿÿ ó¦ÿ ³­ÿ —ªÿ rªÿ ¦ÿ ªÿ ’°ÿ ݱÿ ›­ÿ Ü©ÿ v®ÿ ñºÿ 1Ãÿ •½ÿ '²ÿ (¢ÿ ó‹ ·€A m‡ ˆ X‚ùz¸Ë#€‚|zwìvàwV|d'‹°˜~¨ÿ%«ÿy´ÿ ´ÿ Õ»ÿ ³ÿ °þ m¬þ §ÿ N§ÿ ‰ dê^·a«{“‰ÿ ¾ÿ $šÿ a³ÿ ¾þ ð´þ qŸÿ 워£‡I‡§Ž+”ÿ nŸÿ Ó«ÿ °ÿ «þb| ž[rW€aR`SáOjN9N0NmM/MmSP„N‹N‚SoQ¯T´Y[?]Åa`dIgýjés‘yû~sÁ€†„ÆŒ£‘ W— Nÿ á™ÿ ~• Æ ÔŠ Þè|ów“utQvD~ 1~ ì‚  îy ÿw ý{ ©| d{ #} £yH}€€ ®€ á n §€µ‹€@Ë„(Š á’ • šÿ õŸÿÞ ÿ Ø¡ÿV™ÿæ‘ÿ î‚ Ôu‰mñm}nmQlJhälšgzjiåkh i^fXl3n0m`päsBshyŸ{”~ƒ ªƒ X‚ô}}Μ„éˆLjž‘4‘ë‘ ”‹ [‹ .#‹ë‰v‡HŽüè Š5ˆ .Œje­‹ÿ b GŽh &‰ ¬‹ WŒ ¥‘ Ë ’ Ž‘ Í’ ˜™ › QŸÿ u¢ÿ -£ÿ m¥ÿ +¥ÿ i£ÿ $œÿ í“ ’ È‹ ݆ ¡‚ ¡ Ђ  í J æ ¾‚ w‚ / 2 l| ½x žy P| x hz ÓxZyž‚ óŽ _•ÿ ÿ¡ÿ‡Ÿÿ R›ÿ §“ ß’­’ ™ÿ õžÿ àžÿ Ê¥ÿ Ø®ÿ w¶ÿÞ¹ÿ ¶ÿ ݳÿ “¤ÿ .– Š Z„ 2wp©jÀbC_ Q É$É$Õ!E)”!%"Æùø W_ W!Ã!‡ Ö"#- MPØGµ1ÿ¦Swq<>ÿš>ÿ>þç?þ¦?þ>þ>þÞ?þ?ÿ˜@þV?þ¦?þÞ@þ@þ@þ‡Hÿ>iÿ þÅ ý þ§þÄþöþ<þ¯þœ þz þm þŠ þ‹þt þŠ þV þ þd þõ þ} þ þî þ& þ þ÷þ ÿH þÉ þÍ þ¬‡!i!á#²® † ;   ¦ Ã × V œ < e Ÿ µ b 1 µ Ô 5 · *  ” ô © Ý z " $ õ ¡ þ â I   $ ý  ® Q ± V Ÿ 3 Ñ ø € n ï g Å · ( M  õ T G V  ¿ [  p 0 à # ž ™ Ü Û @ ä ’ Ž T³ W 3 > ‚ Ý  × >  ý . ö ÷  « 1 ]  µ » f Ž b Š § ½  ‘ p ¦ x £ é þ  h  + — Ð 0 r 7 ° Ì † p   & ‡" r ù ?   • Q Ï ” M È   æ þ ? ¨    –  Æ  8" l" r!  ¨#  e! À ü ™ È   "Ã"d"ì ql †!A! {$R"ö! ¦  U B ­! Þ  Ä à ¶! - ú ½ >  ¤" Ž g# .! $ Ö+«3ÉW “u8}ŒÒ”A›ÿ !žÿ g¡ÿ 3¨ÿ ò±ÿ Ž·ÿ ¹þ »±ÿ ±ÿ c± H²ÿ ³°ÿ ]±ÿ  ¶ÿ š¹ÿ a½ÿ ¢¹ÿ "¯ÿ g™ ݇ñ½„ l‡ ߎ „B|,Lƒƒ>{‚yHw«w7y¸x{ºŽ˜¥ §t¶ÿ %ºÿ ^¼ÿ [¯ÿ ¦®þ ?­þ 9§ÿ ¤ÿ E–ÿ oe³a;aãp ³… Žÿ «•ÿ ¤©ÿ Ñ¿þ x·ÿ Œ©ÿ ¡ÿ `”NŠKˆÝ 5™ÿ ½¡ÿ æ°þn¨þóˆÿ4c&Z;Y»_T^&PxP*L(KJMiRLONfNúMƒKšPDOBTñX`a#ceHh2kkqv¸þ€‡à “ ›ÿ i ÿ ä˜ÿ ô“ÿ 1Š &… ò o|BwÈtWv‘|;ƒ d„ “ Û{ ðz ®| ¨€ å Ô{ ïw Çz 7} §„ Ö‡ ]‹ ˆ  è~ƒ:… ý‹ " ß”ÿ üžÿ'¡ÿcÿã ÿM ÿ •ÿ !ƒ çu l¸jÒl ikåißfâiÙhfèj¿m£i*h©m˜mÐsÖm›pHu0xæ}€z‡ f… Ûƒ í‚0€Ã•„L†‘й³/ޤ"ŠtŒmŠ o‰ ´‰¸‰µŒ¶Œé =Œ5ŽzŽ µ ^ ª‘)’(ŽJŽ´â ÚŠ ‹ " h‘ ¬— ‘šÿ ê›ÿ â— À” ” džÿ ³£ÿ í¤ÿ 1¥ÿ  ¦ÿ æ¤ÿ f ÿ m• Ö“ QŒ _… რ] +…  ´‚ ¯ *€ í} õƒ œ‚ / $ƒ Y‚ ¶€ ‡~ ~ Wz -w ™zò~ ÿ„ è –ÿ ° ÿ œÿ é™ÿ t•Y”\“š˜  ÿ h¡ÿ ¢£ÿ \­ÿ .³ÿ £¹ÿ Y¹ÿ—°þz¢ÿ á— ˆŽ ^€ õtsqÆjþeJ` Z ó' Í%J"bo‹…© A!k!ì# r!¶ Ä  ä#*- ~PäE 4HSHoA>ÿX=ÿè>ÿÐ?þ¦?þ>þÇ>þß?þ'?þ_@þO@ÿ?þ?þÎ@þ@þWGÿFjÿ ýþœþ5þ ÿ!þWþÿ þ« þ¦þ< þùÿyþ~ þÔþ þ2 þÅÿA þ> þ’þnþ5 þþF þ þ] ý'þ× ä!% K#!â Z c 1 o + ¶ u  K  . Z ™ · h ‘ ~ I ë É à . Ø r ¯ ™À œ ­  3  2 ³  j Š á ¶ × Ä o º À   >  › u ü °  ¨ ½ G £ h Ÿ ü !  ` m —  ´ H f ¼ ,  è Çh D Q ˆ° ‚  Ó ; Q O V + \ · ú t 8 ? v ¡ Z æ ] y A Í À  û œ f  ú Ö <  c — r  P U Ê  à I G ] ‰ ô & ) œ  ®!H c › ‚ á @ B » F   Ö  ò w B  W Ê ?  m" F! ˜ 3! ## :! ï! . ^  [ C#³"ª!â   ž!’"3 N ý   " O * © Ò" ù « –!`  %! m ¿ ­ <  š  3# †# ~' ä)_1 \] ’yº´Ž“ÿ v›ÿ w¢ÿ \¡ÿ 7¤ ‹¯ÿµÿ ½þ lÂÿ „¿ÿ ã½ÿ ½ÿ P·ÿ O´ÿ N´ÿ Ñ´ÿ ì·ÿ b´ÿ ¨  E„È€ƒ ªˆ ‹ Ñ‚ Î{©€Ä…½…*‚÷zŽyvzTz¹zŽŒy™¤§ìn·ÿ k¹ÿ ®½ÿ ²ÿ "²ÿ R±ÿ ¬ÿ †¦ÿ ÿ fça¹bçg΂ 1Œÿ á—ÿ ˜¨ÿ ¤¼ÿ ˆºÿ Ȫÿ §ÿ [žÿ .Ž\ŽTˆ†Šè’ ™ÿÒ†fdl\E[´]W`ÒV‚O>N»M,LôLsOO#OaO™O8R«QnRrVV\­aa)eOjwlìo˜v{Áñ‚5ˆØ –ÿ ³œÿ â› – I‘ J ˆŠ Ùƒ ­} ÿvÈux|®} ÷} ­~  | '} k€ € _} ¢| ²{ ±y x| ó‚ &‰ ]ˆ  Ê… €i ¶„ ì… d† ³Ž ^– Ižÿ ø ÿ äœÿ 6 ÿŸÿ™ÿÑ„ ßu fpfik“i£jãhâf5dÁig°hœmäkímîmànp…trtáu { y…0…H‚²ƒ 6‚Á‚DȇAˆ‡:r‰-Š(‡óˆì‡s†<…C†ŒŠ·ê ã² ¯‘¹ý ÷ ´‘ 4‘ ó“ ÚŽ l nŽ "Œ , 0“ Ú— ›ÿ øœÿ ë™ÿ ®” dš “Ÿÿ º¥ÿ i¥ÿ ï¦ÿ ®¡ ¢ —Ÿ Wš – ’ Š É Ù‚ ˜ƒ ؃ ^~ *} y~ †~ A| J n‚ æ€ '… ­ƒ j} œ| \~ j~!| V{Œ~º† Ÿ‹ÿ ò›ÿ â¡ÿ Mÿ ä›ÿ ú• ß“â•Z• U™ÿ õ¢ÿ ¤ÿ ݬÿ ضÿ T¸ÿ X´ÿ…®þþŸÿ m– [Œ € +x¢r¨kÿfNa ¬_ G1 }%##”}7ƒŠëñT$ ?& 6!g!Ø!Þ!` •!#`, %NÞDð1YR mü>ÿP>þ>þæ?þÏ?þW>ÿØ?ÿ?þf?þŸ@þ^@þW>þ×?þ@þ @þGÿGjþ{ý^ þ•þ% þš þãþ– þ« þ´þþ· þKþ ÿ’þI þ^þV ý_ÿ€ þÊ þ÷þÝ þ•þþíþþgÿÊþ²þÙƒ"!= | . ñ  ö  ‹ i  I  À 0    2 ò Ç Q ù Y J ç ™ Qø ß O K _ õ  ² 9 ” ' º þ 4 K O  Û y   „   M ã ? ·   E ² ­ N ä  ¦ ¬ =   j  ¢ ø ™  ½ ø H ¸ | M È \ x w õ  à E  î ¢ Ø   ° Ò l ß Õ b ƒ     · u Å  µ œ , + p ù  q ( J "!     2   J ç v Û ! z þ ¨ æH  N    O Ž ƒ  r s Œ ú ‹ S l    ! \!   ƒ# R! —# r" “ O ó Ë ˜  þõ$-"<  _ Ù è!AŠ Ò J ý l ò ›!  < ‚ ü! L# E €  U  q  (# 7   ã' t,:3 ¯a Ã|>‚FŽÔ–ÿ =›ÿ è ÿ šžÿ ëŸÿ ³¬ÿ °ÿ ¶þ û»ÿ K¹ÿ ¤ºÿ ž¹ÿ S±ÿ ­ÿ ä´ÿ ª´ÿ ì±ÿ o¨ Š› û|k€ƒ ¤† ÚŠ € x¹|…°‰æ†§€wfu¶w¢{P€¦‘M˜z¦B¯jµÿ å¾ÿ \ºÿ ™§­®ÿ ˆ¯þ <°þ y¬þ ²žÿ €hÔcaçd”zÀŠ —ÿ ã¥ÿ ؾþ 0¼ÿ ǰÿ ͦÿ Xžÿ å˜ÿ ³Ž‹_‡. ч o ï^¾\~[¼bº_ÎPÃK¢MUMIM®LêL»LDN´O­PêRÃRVPÞR¤X `@aÊchhùh²oxz{¾zÍ‚ æ “™ÿ ,Ÿÿ 'ÿ (˜ÿ ñ—ÿ 3‘ ÉŽÿ 5‡ ƒ í|;wÆw} n… % %  € ( ›‚ “€ e } û~ ±~ .| ò~ %„ ‡ p‰ ‰ “† §‡ j‰ Y‹ ˆ Ó “šÿ k¥ÿ ž¥ÿ “Ÿÿ Öÿ \£ÿÿ_‡ %q /h`jkÞllŒf+gÞd¿fögpiefRkîoipkss6oÎusbx } = v s…°€ µ‚û†=† ‹ùˆ´† o‰j‰˜ƒÖˆ ¯ˆ1…̈ˆ3„}‡CŠºs f ©Ž ¦Ž ¯ *Œ ŠŽD“J” ã“ /“ /‘ %• ]– Ý– š Èœÿ 5œÿ *” •ÿ { ¡ÿ wžÿ 5 ÿ í¢ÿ ¿¡ÿ º  š —–ÿ ; G ‚‹ÿ ó†ÿ ¼ ” éƒ l -~ ‚ € =z ¾~ ú‚ Ѓ éƒ ô Ny]z ø| „y 4y ¦zK u„ Žÿ 3˜ÿ fŸÿ Mš šÿ 3– Δ”R” Ëšÿ ,™ÿ ö§ÿ c²ÿ J³ÿ ž¶ÿ ‰µÿN°ÿ‡ ÿd• Ê € °y–sÿl hÊ` , ¥LåDn1ÿ-Yñpì>ÿY>ÿZ?ÿX>ÿÑ?þV>ÿÐ>ÿÐ?þ?ÿð@þŸ@þ?ÿP?þ—@ÿH@þ—G@jÿ 2þþXýÜþHþJýiþ»ýý'þºý%þ©þaý®ýþHý-ÿ¸ýzþsýýgþÄý^þ›þ`ýŽþ²þü[ Ëý ?Ò b ³ £ ! Ã Ú  ø u ô ¯ G ` A  Ü ` % f  ñ ƒ î x Ï  % x Z q ü ž ] ½ O =  b Ô ' Z Ó * °   Þ Æ % ^ /  ‡ Ž k 1 A ™ ê D Ð U q ' y i x q ¢  [ Õ Â ” 0 n « ; f! ¶ õÀJ S \   :  % 7 ‰   ä ä Ç B õ  Ç C * ® = 4 g – 4 ô ö e * Ý F * Ô [ U ø é y „" Ö Ü  ¹ 1 Ô t G Ä V Î r / º × L   I à û ' – — › Ø ! ò < ä Ý! â! ½  .  g ! l! 3!  Ú"¼#à  U#!´ ` v ! H Ò ž ± – Ä ` ‹# .  <" ç! v" Ü" V# —" 'V.Î5 §c ‹|ú…¾•–ÿ ´šÿ ² ÿ ô¡ÿ -¡ÿ r¤ÿ V¬ÿ Q²ÿ E®ÿ ×µÿ "¶ÿ P¹ÿ N²ÿ h³ÿ µÿ еÿ ä¯ÿ “¡y—¹‡f„—‚ m… † ˜ >xny††:„å¸zÓu…tîwO„“TÙ¡I¯׺ÿ k¾ÿ µ ± ±ÿ T°ÿ µÿ A¬ÿ ¥þ »lvc8c«g{ +‡ “ÿ \œÿ ±¹þm¿þ ©²ÿ Ťÿ ‘žÿ œšÿ 'Ž Î‹ ˇ ž€ wv Qjx^u[p]d<[íO0L”KRMîKnM'O‘N{N­P¨OüPãPQOÕRÊVõ[Ýašb‘eŠiômUqt O{m|j)„ «Œ ’ †˜ÿ sžÿ d¢ÿ #œÿ r—ÿ r‘ÿ {‡ Ó„ ®„ +€ ®~±ƒ Û†:ˆ “‡ _‚ ™~ ± € œ~   ‘€ i€ à‚ ¢‚ Û… …Š ‹ M S‘ N•ÿ )–ÿ ÷‘ Œ J’ÿ xŸÿ ©ÿ ¨ÿU¥ÿ PŸÿ £ÿ ™›ÿ #‰ œv l“iÎh±m[k_h]fZgNiJj›iªhfjek o£tsýu|t4s +s ox  ~ ‚ 4† n… oƒ|† ƒȇÊŠ°‰wŠ‰í…Š…Eƒy„ 7‚ýƒó† ‡Œz:‘ íŽ >ˆ* ¾ ñ è’ á” ˜• 3’ ¨‘ #• [” X“ e” š“ d™ –™ Ë– –ÿ 5–  Ÿ › tš %™ nœ „š Ι — ˆÿ‹ ‰ÿ 1‚ “~ ë€  D‚ rƒ ƒ ƒ Ø€ /€ ~ ¢€ oƒ b ,{ Êz Wz Êz ¤{›}† å‰ Ö“ÿ £žÿ –¡ÿ K› ‘˜ “v‘¶’!– ̘ÿ k¡ÿ ñ¨ÿ i¯ÿ ‘·ÿ ’¹ÿ PµÿT«ÿH¡ÿ h— N Ôƒ mzQuco·j_ ·b+C D#‘%_"€!MÊR ¿R¸" e | ¨ Ð  "Ÿ"S$‹/ šO$F_2ÿ›Ws!?ÿ>ÿ˜>þ?ÿH?þÖ?þ?þ&?þ?ÿ˜@þ§@þ@þ@þ–@þŸ@þHjÿ‚ýýîýxýüý¥ýùþòýuý%ýoý|ývþ@ýÎþÉýŸþÀþÉý5þ8þ|ýþý6þÉþÐýÿþ‚ý·ÿ!ï"*]!M ! ï N Î : l [ ï 9 @   n Ô Ã ×  @ T Þ | ' â y -  ­  v Å  ¼ U 8 Å “ { <     ø r Å $ ë & ¾ F U  t Š ž ëo V Ò 9 ª r ÐÖ ˜ / ¸  = O µ " k ö  7 ? Á"9ü! çy A = ù N Ÿ  B 5 Œ y = J ð A  Ç 8  h ö ! 5 Z E « õ ( Ì c À W ¬ Ó ]  Æ w W  " ?  ] ³ ä ›  ô D ¢ b  N Ë e  R ð +  e  § S ˆ ¼ e" " !  ¦! *$ ³ ¯ ‡   ×ú!-±!É%/  ¿! á"" é Ï  -! X E à ­  µ G    > z  ×  µ ™ Û"Ñ! #¤" &/Q8 ¶h ¹‚°‡ü’¡˜ ×£ÿ ) ÿ ©¤ÿ £ÿ ߢÿ å¢ÿ à¦ÿ ™¬ÿ e±ÿ Û·ÿ ”¹ÿ ¹ÿ Ñ´ÿ ³ÿ ¦®ÿ 3¼”~‡*‚׋~ º… „ Oz Wvcy}[…/„„€‚z$v8w¬~߄ߓ¡“§â®\¸ÿ ÷Áÿ S³гÿ©±ÿ ®³þ ©­þ ÷­ÿ ªþ ?qÙc€difQr¥†e’ÿ *™ÿ á²þ ¾¹þ ý³ÿ ɪÿ Ÿÿ ›ÿ )˜ÿ . Ÿ† $ƒ ww Lj ç_Ü\_‰d UWPÅNâK*N_M.L¶KÄN´NcPÑQ}SQ˜PVRJX-^ÉbcÊef¿khpÙtTuJ}¨{€ƒ 7Š ›“ ™ÿ $žÿ — ÿ d¦ÿΣÿ Ì›ÿ Þ˜ÿ ¬ +Š Ìˆ T‡ † † Zˆ ¯‰ „ ×€ aƒ  ¡ƒ L ,€ … H‰ Œ ÀŒÿ þÿ 6—ÿ iÿ c ÿ ™ÿî™ÿ ¹˜ÿ ø™ÿ k˜ÿë¡ÿ Ò§ÿ «ÿ B¦ÿ S¤ÿ ¥ÿ ÓŸÿ ˜† Ys ºnsn¡k,kcig–fÎhiÌjÖmLoæpÇqOpPnŒr0vpr±s²s°} ƒ| Ù‚ ú… ½‡í…Á„ʃ†ó‹¶ˆ»‰j‹k‰w…¹ƒs‚ }„ †† ±‹úŽÿ’ • p” ý“w“¹’Œ”í“ ß” ]• Ü– â— Y– Ž’ › ˜‘ ¦“ c‘ ¢’ b• â™ ^’ ;• 2™ š P¡ÿ .š — Ò– «™ Ôšÿ t’ I ʈ _€ b~ 𠤂 a 0| Á} ®ƒ ì‚ ­ °ƒ  æ~ ñ~ è{ 8y Qz Nw øu | À~ §„ ¥Ž •ÿ ´ ÿ $Ÿÿ ”œ Þœ ‹”­3–$˜ Ušÿ q ÿ ø¨ÿ ®ÿ ’µÿ ¸ÿ ·ÿ—²þ¹žÿ °• Ð ª… E{Ñvàp5lý_Y^ƒJ }$ò%F!Å ª!5˜}’"Î ñ"¯  x#F"3![ È!Ä$…. Mš@ó1 Uúp¯=þÆ>þ<>þ >þC>þ>þE>þ”>þ‹>þ»?þ{?þD>þû?þ?þ»?þûGÿÄiÿÊÿÿtÿ¤ÿÿÿÿfÿ^ÿ­ÿÿVÿÿ]ÿÿÿÿÿÿÿÿÿÿÿÿÿoÿ^¼"°"* ¨ v ¯  = X j Á  Œ L 9 ª Ÿ î   ª z ™ ï R ¬ + ¥  W ª 1  ( w  u ” Ò  B ¿  Ó ” ± h £ Ø Ã [ œ ¬ Ë J ò  R a W ¤ e € Ä  Œ + r R s a ®–b t í ì R Õ ã æ0 Ž+ò Î  Ž 8! Ã; ¯  ° ª  Î ¯ q T    1  < ® [ ‘ Z 4 ô   ™  ’ Ý 3 ) , & ³ d  9 t À ú & g  w å ø £ !X µ Y i n  „ « þ ? J “ Y h n • Q Ü ‡ w ,$ " ¼# ½# # ¿! Ð! = p q  Ž"l"Î' f")% # $ !` æ  œ 7 ´ Š î   ÷   ¬  k  p" f"¦! n""#j#«(ä8©m †è‰z “¶ ÿ ö¥ÿ ð£ÿ ¶£ÿ —¤ÿ Ì¡ Ç¥ÿ ˜©ÿ À¯ÿ °ÿ •²ÿ E¹ÿ ¼ÿÇ·ÿ ±ÿ <¢ ñžè”ψs„çeƒ 3… Y… —{ ñv§vßw}-‚ü{ly¡xìy«|`†z–…ž¦.³ À¸ÿ jºÿ áºÿ 4¸ÿ >¸ÿ '«ÿ ­ÿ ¬ÿ U¯þ ûu^d@c9ežj …â‘ÿ s˜ÿ b®ÿ ºþ (´ÿ €©ÿ ‚œÿ ­˜ÿ û˜ÿ ß’ÿ :“ÿ =Œÿ ru ™g ~]+[©bÃe ªSVLkL„KtLMsM-N0PRP*P-Q’QÑRKT*W0]ž_Ta”f¿hµk qSux°yÂ~<‚ /‹ #•ÿ z–ÿ °—ÿ ê•ÿ t” ˜ÿ ë•ÿ ò–ÿ p—ÿ .—ÿ 4•ÿ lÿ ñŒ ̈ ㋠ˉ … õƒ „ € Ÿ j‚ Ö ‰ÿ s‰ ‹‹ ÿ û‘ Fÿ " ÿ “Ÿÿ’ Õ ˜ÿ r—ÿ 9˜ÿ ï˜ÿ +™ÿ bŸÿ¨ÿ ©ÿ ªÿ ÿ ¢‹ Õu kl ihWl”hWg9góff"lŒn9oDqŠožqKoUpu¼tyw.vó|H„x… ·…óˆ9‚XƒÌ…þŠq‰ አ«Œ Œêжˆ/‡`…z‰´°‘b”0™ ²œ ëš mœ fš å– ã– • Ý– ™• '” ˜’ ¢” &“ 2‘ s’ 'Œ ÷Ž ß• ‰˜ ˜ ™ Ê— œ žÿ ó˜ÿ õ—ÿ ­•ÿ ¹™ ‰™ÿ p–  ‡ ƒ ® ô‚ Û„ ¥{ € š )€ ù~ € ô ð€ jƒ u~ ø} Œ| | Íw u ž{ F ©‡ fÿ ø”ÿ k¡ÿ Ž¡ÿ Ÿÿ µš ˜–ëà”í–Ù–ÿ ¹›ÿ /£ J«ÿ ž­ÿ Õ¸ÿ I·ÿ Rµÿæÿ a˜ € `‰ 0~ Iw¡nxldÖcJS ÷'Ú%E%"N!Q ©• 39"$ >!ã&Ñ""b"9"D$`- °MÓB~3ÿ&Xèk|6þÊ6ýV6ýŸ7þ˜7ý_7þˆ7þÉ7ý×8þ!8þÀ8þÈ8ýW8ý9ý?9ýBþiÿŠÿfÿÿÿÿÿÿÿÿÿmÿÿÿÿÿÿÿÿ_Xÿÿtÿ~ B N"$!o ¦p‹ ® »  ò a ‘    › 1 ª ˜ \ Ì > ¤ » ú '  y  K Û Ò 7 œ J ì õ ì ¨ A ì ÷   ž v ] ë y > 2 œ © ½ à é Ö h 1 $   I   Ê “ Õ ¸ Z Y ÑÏ ¬ QÚ õ 2 h 1p 3 w ¿ý)h!¼ – ´åj ñ V 7 u  z Ú ³  j " Æ Ä ™  p Å C   î [ Ë Î Ž  ‚" !  1 å h ’  " l ¯ S ä 4 Ç ¤ ¶ » Ý ‘  í V¤ ° ó  Œ H  ? £ ¥  ß _   p    @ Ž! ò  ©! ™ »  U  Õ + š Ö ä °"à J%ü!í# … Î I ¼ º x s  ð è 7 } ª   G! ¹!h ‰"$"„"™(@ Öu x‰ö¯“Ý™Ÿ⦠Wªÿ &¨þ ~£ÿ Ǥÿ ?¥ÿ –¬ÿ ±ÿ ³ÿ Ù±ÿ ^¶ÿ ™¹ÿ •µÿ l¦ zžø–9’*ˆ„©ƒ_‚ {† ä… ™~ ~x(u“x{*„û‚×{"z™yyφþ—ŸЍ%¯(³ Å»ÿ 2»ÿ z¼ÿ `²ÿ v´ÿ —±ÿ _³ÿ “¬ÿ Œy]erbgj=}‚Ž – ϧÿ ±ÿ ´ÿ ­ÿ œÿ ëšÿ k’ÿ ÷Œÿ »‹ | Ns Ögº_›`Ñh êb RÚLÏLYN;K=LtNQPPÖSÇQlOéQÇTxS U:Vö_Ía‹aËe‰i¬gñmeq uw ì| ª‚ c‹ Ÿ ç“ “ –ÿ ¥” “ÿ +”ÿ æ—ÿ h™ÿ æÿ Øšÿ h˜ÿ á–ÿ o– D•ÿ dŽÿ yˆ å… aƒ ~ ¤| ´{ | p ª‚ [‚ Xˆ •ÿ {Ÿÿ µ ÿ Ú™ÿ '‘ •ÿ :šÿ ¬” Řÿ *– ]™ÿ 2šÿ ®§ÿ¯ÿ†¬ÿ ¡ÿ Ž È| Çj\jTjÒjj ‡ §€ û} € ± Ø} µ} ±~ p ô‚ 7~ :} ë€ `~ À~ × Š}  ~ U{|‹~ )‚ gˆ ÏŽÿ ¾˜ÿ ë ÿ žÿ Óÿ òœÿ ó— '•ù’S˜ _› …ÿ i¦ÿ m§ÿ ÷¨ÿ 4±ÿ _´ÿU³ÿF¨ÿ ¤œ L በîwp@kœfcØ[ð3 Ç% ## iz ,ƒI!D!¶ í ‡!Ú!"ü"×"$N/ Oä@f-ÿoV^j¹6þÊ6þ 6þ™7þ7ý7þ7þÈ8þ¡8þP9þ 8þ€8ýþ8ýŸ8ýß9ýBþGiÿÚÿ~ÿmÿmÿfÿÿ]ÿeÿvÿfÿ_ÿÿrÿ‹ÿ²ÿêÿeÿ^ÿeÿÿ^ÿ\ÿ]ÿ]ÿ¬ÿÂþGþVþUþW Öñ!!³!p=q* U Z Z   X  ‡  x N @ N ¤   D ¤  M k \ ² h ‚ ž   ' j  k § Ó ¢ c e 4 å ©  ñ  6 É Å Œ g ¦ ; $ ² l à {o& = K 9 d K c * š | 2.÷ t • ê n ß Ð ¿ ƒ ýy¡ } w Ù Ÿ w l ò  | b   ¾  | g Í   ² œ - Ú  8 õ  § ¢ ™   Ê ¸ % ç ¦ J 1   D 4 ' ‚  2 þ  l  µ E ¢  & < u š  • ¹ !  Ò  ˜! â! ( I . 2 µ z  ï"³" 5 °$!ƒ ‰ ] ` » È “ w"÷ #m"î ¾$ Ä Ó   n   g z Œ ~ ¨!k ‘ _! !$È# M" ®" 5) nF ›y ñ‹¨Žâ’Ó›Sžg¥ —­ÿ –®þ=ªþ é¯þ µþ )¹þ r½ÿ żÿ ɾÿ E¹ÿ §¹ÿ Z§ .ŸÈžo–µ”*Š…9ƒ† <‡ uˆ %~ µy‘wîwa|hƒƒ„r yï|1€‰ –€ I§¥«å¶ÿ t½ÿ Yµÿ œ¹ …»ÿ l¹ÿ Y°þ ¼©ÿ h ÿ h} eêc3dfl5u‰ £  ÿ d³þ ±¶þ ¸¯ÿ ¤ÿ \šÿ `‘ÿ t‰ N† ª .s faŠaÈi ?\dSîPÊLûNeMëJMÝKGOtPÖSERWT8RUTyX Ze_Ä^ËaJd4dtg†jvnÑu ·t ûz 4 ¨ˆ ¬ÏŒ ¥Œ gŽ ÊŒ  Ä‘ÿ pŽ Oÿ p‘ÿ s’ÿ ò‘ÿ õÿ õŽ È‘ÿ ¶‹ —„ <€ ³} x{ jx l| o| 0~ °| ò€ ­‡ šŒ ^Ÿÿ àŸÿ ו D Ì—ÿ ¯šÿ â’ /— „˜ÿ q—ÿ 2™ÿ ò§ÿ “®ÿ U«ÿ ħÿ “ÿ ©~ ¦p&ihKiohíl·f¿g g‹j™mÏi7i\nLpÙs–s—uøtœy}/~ Ž… >ˆ ¦ƒ 4„ ¾ƒˆ„Þ…‘…†8ˆ ´Šäfb©‘äb‘n•0—í™ 6˜ %– ž” Š’Ú1”j–´–¤• T• &’yŒö î %Ž $ X ¶’ {• f• — W›ÿ ú› š Tœ Œšÿ ÿÿ ·Ÿÿ ªÿ tœÿ )œÿ æ’ —ˆ ç„ ðŠ‚0€ 0~ )z {ƒ x‚ :„ + · ä~ ­} µ Ï} “ þ~ ñ í} x€ | w ®‰ Û Õ—ÿ *žÿ ¡ÿ ÿ ·š ˜ ”t–æœ œÿ ¿£ÿ ï«ÿ Y¬ÿ [³ÿ ›²ÿ ´ÿǰÿŽœÿ ¹” Š Y€wáröki dC] n>¡%v#t!Ž jF½’ x":#ó#¶%œ$¹"#i"ò$%>0 !PA£/ÿgVLh6þR6þ7þ 7þ6ý—7þ@7þÀ8ýO8þ‰9ý‡8ý‡8ýE8ý8ý9þHBÿ»iÿÒüküFüìü£ü×üEýèüÞüÇü„üË üà üœûü™ üZ ü: ü ü€ ü ü³ü‹ü£ ü0 üé ûoû— ü¨ü(þ!®!Õ#à ËW Ü ß 7 ´ ² û á z _ T  ñ E Ø Ë ( 5 É Ÿ   E M Ë ­" _ * â  m ;  e P  À \ [  ¯ w ! d j 8 Ø  ¥ Á  O 3 ²„¤  v P w Ê { ” ô g  †  Ø ] ˆ ¹ º  á ¢ ì Q ê t y l ® y! 9 :  … – Ý q n “ £ $ ƒ W Þ ˜ ‹ f ² º  y u ’ ¿ Ô 9 H I ÿ !  ? ¸ V Ó ¢ · – 4 û  € ¶ ê h '   ­ M ³ ê ›    * Ï  „ F  I! ë y    Í  ç$ ¢' " !  Ò ï   €" X! z ¾#¥  â  "}!à % ñ  £ 1   >  X B ý  x ",  ¦  ï$ ø# G#À% ‰+ DL } ².“Ú– Ÿͤÿì¥ÿ Ý¡ÿ ɧÿ ”¯ÿ õÿ »þÿ¿ÿ¾ÿ–ºÿ Ù·ÿ ª ž| t™ì—ÿ’ê‰ЇK…«†I„ µ‡ õ† á}Fwžv_wîtƒz…õ}s…«„Ó+›À£Ê®´ L½ÿ ™Àÿ Àÿ ¾ÿ ¡»ÿ æ¶ÿ †¬ÿ ¥ÿ ›¡ÿ —| Œhce)bôhFo{† ‹ K™ÿ ,±ÿ °þ 8µÿ «ÿ Ì™ÿ fŽÿ ð‡ K†  ¯s¢f|bc ·g !VÂSuP‹NþLÜLßM/I_M€NûN;PRPÖS=R¹V2\UZé`˜a•aÎcùeûk'mÒr9u ­y «€ %……‡ w‰ šƒ ㆠkƒ í„ Ò† ؇ V‡ —‰ Ó“ÿ ¶‘ÿ ´Šÿ xŠ ‰ˆ Ÿ… Ö‚ ¥ ¦{ ³z ~wÃz iw t{ <} ¬ eÿ z‘ Ξÿ áœÿ ª“ÿ ° N‘ÿ ³›ÿ¥“ÿ } ”ÿ qžÿ a¥ÿ ¥¨ÿ §­ÿ žªÿ J§ÿ E–ÿ Ú Oqg¿i+idi-muhÝjQi8gl×m¡m¤om¿syrVuftÌx|ô~ € ¹† s… ®‡=ƒ݈‚Yˆ‡®‡§Š­Œ1†2‚2†sŠûx’I”·–—¹“ª‘{“$“-‘¥ŽæÙ U K4*’ & ¨’ Ü‘ g‘ t“ eš „ž ¡ÿ 4› ™ Í– ’ Ö– Rœÿ 1™ÿ ¾— šÿ 1› Ä‘ÿ ¸† ­„ s|~ D{ Y}{ Ö‚ û„ w‚ : ,z R µ 7~ { Š~ ‚ ÿ} ¼| | { Ï€ ø† lŒ •ÿ éœÿ ”žÿ uÿ ·™ Ř(“ð– %•Yšÿ 3ÿ t¥ÿ `ªÿ Ø©ÿ —³ÿ³ÿ °ÿ —¯ÿ [žÿ è” gŽ ™ƒ z˜qzk˜hÕfN_(G Î$‚"£ ‡!à  âÑ2$ø jô%˜#Y%B!Ý!E"¹$­&1 OZBò1UgO6þR6þ6þ6ý§6ý7ý7ýW8ý8ý?9þx8ýW8ýF8ý8ý‡9ýŸBÿÀiÿÿÈþ…þ…þôþîþ×þßþ'þþ6ÿPþ7þçþþ4þMþgþÿÿÈÿÁÿƒÿŠÿŠÿ‰ÿ’ÿËÿ”ÿŠ o#¾#Ê$Ô¸“ž ÷  r 7 Å J j g r ³ ¿ – ¥ ¿ š è "  ô Y © ± ö ò Õ Ž ƒ Ó Ö Ø a È Ñ ¸ A g 2 ¦  É # t R  ? ¨  * Ó Â ñ P ’ u b Ç Ž ¬ G } : ý m Ç ¿ ª ± ~ h  § A H#IÌ › Í2™xQ#U  Ž    z  0  ; – / + Ê ,   ¨ ´ ¡  Ç  { n õ 1 ã ” … O Ë Ò ,   ‰  ¶ 8 L ¹ j § ¢   µ  ¡ ; h S Ø M ‡ Û ½ Ï Ï ÷ Ÿ! ;" ö# ¥" c$ " V# # ü  ó  “!   á" "  Ê# ü  v » ˜$  4  U e!  Õ n l!  0  Ž ; ¸ F ©   Ì ¸!q! ³$ w! # ¼, M e )6’™›ÿú ÿ0¨ÿ #«þ ô›ÿ žœÿ d£ÿ ªÿ [°ÿ d²ÿ ²µÿ u°ÿ q§ Ôž VŸ ž¨›C’‘¨‘³v…ý… € † ôˆ Y ´u—t›x%€}…é‡áˆ•‹0v¢î¦¯­§¹ÿ p¼ÿ -¼ÿ •¹ÿ Ѹÿ µþ ü¬ÿ ‹£ÿ €žÿ “~ jdCcejp5ƒ Ðÿ i•ÿ h¦ÿ ›©ÿ -²ÿ —³ÿ Ç ÿ ÑŒÿ 7 Úˆ O… tPg¼cAf fbRùQœQN%LµMqJùLîL-L0OdSLTS‚S´U·Wž\]ç_ÚdÿdPe_gõhùos v {x j :‡ ‰ ‰ !„ f õ… é… +„ 4ƒ u‹ P •ÿ àÿ t‡ „ Ñ… €  ¡x Æu Æv õy jx r| k~ j€ ¥ˆ  šÿ é¡ÿ ¦˜ÿ ¢’ÿ =‘ Ηÿ %œÿ ’ @ • Ÿÿ Þ¬ÿ ìÿ Ò¦ÿ ߪÿ LŸÿ ‘ÿ ê `p’fNj1hôjðiþkWgïe(hVi_oql¯oWq@u3v vÌx„{q~)~ Ô †¹†¾‚˜„P‚‹´‹3‡ñ…†‡:ƒþ€ˆ~W„‰’ŽŽ‘´“p”}’z“õ;l \ ˆ [“ I– • H— Ešÿ {— X˜ l› Ù¤ÿ 3Ÿÿ ·ÿ ô˜ÿ <• D˜ÿ ð˜ÿ ¶˜ÿ *” W—ÿ ®˜ ”ÿ ó Ë… u€ Ž~ Ä} 5~ | D{ ×€ƒ +„ q† 9~ …y Ï~ ý~ € ¿| È 7~ î{ ˆ~ ö| à ‡ ­ A›ÿ Ü¡ÿŽ ÿ bœÿ ã›ÿ p— ¬’ý’9— ššÿ µŸÿ \ªÿ d¬ÿ תÿ Þ°ÿ ˜´ÿ ‹³ÿ ʪÿ RŸ ’ ëŽ £„‰zápøk•gjgjb‡S°$ !ûä<?t #8! Ö£) °!L!¥$, ”!_"Å$ý1 ÒOGï.ÁRÉg½6þ6þQ6ýß7þP6þÈ6ý×7ýO8þ 8þˆ9ý8ý^8ý8ý—9þP9ýßBþiÿJÿnÿoÿ|ÿAÿrÿtÿfÿnÿmÿJÿ”ÿLÿ’ÿsÿIÿBÿeÿeÿ^ÿÿÿ]ÿAÿBÿ}ÿDÿFÿ{ÿD…! #ý# ¹h¬ œ q ~ 6 ‘ ¹   r Þ ò ‡ Z - î ˆ ç ¯ # /  + ¼ ¼ B ° l Ü $ ½ ·  é  _ Û ¥  p ¸  - } ý ¶  Ë ¨ š = Ù 1 û t ‰ 4 m Ô Ü i „ Ë ( ¯    á ¶ ’ © <  Ó  §‘ï!ì Ü „`"6 · ¨ Œ % ›  ç Q Ö Ö  H å  Ú Ã   { Ê  È ³ e ã † ¥ D z ¼ o ˜ ² æ ü <  | É í  œ   Ã Ê Z   ú ¯ u ð è L ’   3! z i 7 Þ  Ô  I! · ·# ·# ¤! ®!‚!ï "! Z" Ê( Ë Õ †  " Š! {" x À!^[€$ " ] w ý ì } ¬  6  Ë  » Ø G  # Œ  ï! ®" µ" C$±/ T ‚ dê‘¡ Wšÿ *Ÿÿ ç¥ÿ +¥ÿ  ÿ žÿ  ÿ סÿ è«ÿ ¤¬ÿ |®ÿ ^ªÿ ’¦ÿ gÿ ô P² ðš@ò”ÈŽ²‡>†O€„ ‰ ¬€ ©væv¥y÷€ä†`ˆ؃ƒÚi—¡™¨0° d² Ÿ· »ÿ l¸ÿ ¤¶ÿ Ý·ÿ Á¯ÿ „«ÿ R¥ÿ •¤ÿ X‰ QhÐeácÌfWq=ƒ ì”ÿ ¦’ÿ ö¢ÿ تÿ @®ÿ °ÿ N©ÿ Êÿ 1 Z Єÿ üs †h ªh kh ac ?VES MëMõLNLmKuMlOšMãOíSëQSS9SBXf]c)`»f¤g¢i¨j£iÐk Žp0s ïuúy¡€ ±ˆ ž‚É„ ƒ ª„ .ƒ ì„ .ˆ ÓŒ Ë’ÿ 7˜ÿ Û Ó‡ÿ é Ô ¢} p{ nx ?u ´r sr tu ¹v zz ð€ ㈠‘ÿ +›ÿ £œÿ à”ÿ é‘ ‹‘ÿ û˜ÿ ­™ÿ `•ÿ m”ÿ ˜ÿ yÿ o£ÿ ­¢ÿ ¥ÿ ©ÿ M ÿ“ÿß~ ïr%k‰hƒj>l5lòiOg÷eh+gµmutÌn×qrÂqBuyº}ñë€b Ò†…‡ ÿƒ†~Šø†»–…T„N…C’€Õ‚ …ÇŒU‘“ù”9HJ’³’ñ–š• g“ —‘ Û” œ–ÿ ýœ   ‡Ÿ ¤ÿ jž ¬¡ÿ 6Ÿÿ ù› „˜ÿ <– Ì”ÿ x•ÿ p“ÿ ð” W“ ®’ “ ð’ ÚŒ óŠ º‚ ú|Ézß{Rzå}ydû ûˆ þ V} OJ‚ ~‚ ù} ¿} Á| ‹| Lz Ï} ÿ‚‰ ¬‘ B—ÿ žÿ ÿPœÿ Ò™ÿ /— ‘ ¬” g˜ N›ÿ é›ÿ 4¤ÿ è¨ÿ ›¯ÿ Ò°ÿ ž´ÿ Û¯ÿ ©ÿ_ ÿ/• Š‹ X… ë| ×rýlžg¥b`Z#- !¸‚{ù £È‘ð f#I""R! ·"Î#£2 JQZF51 Tïg…6þ6þ‰7ý_7ý6ýÇ7þ7ýß8þ@8þˆ9ýG8ýÞ8ý¿9ý9ý9ý‡BÿÁjÿ ÿlÿDÿsÿdÿÿkÿ{ÿÿuÿ˜ÿ|ÿmÿtÿeÿdÿnÿ_ÿmÿJÿ”ÿ€ÿ"ÿ‹ÿuÿ{ÿlÿ}ÿuÿuY$$Ó#Õ)à ³  ˆ N ¸ j 9 g  Û +  ™ Õ I  × Æ y f è ç  r ¡ ¯ ì ) q & . 5 ÷ Í Î 0 Ž Æ š \ h è l K H Å y ²  I 5 : æ ï-œ Ì :   / g è ^ 8 Ç ü ³ ‚ k  l 2 Y ì Ú ã  ^ G¸[™ ™ƒ  E é +    f ç ¬ Ó ² ^ ¦ u l s o e ? ° ã A ù  P ð › Ý ‹ ¬ Ÿ ’ Œ Ç P  e å Ñ K Ò @ ê " > § í » "  J f ü ì  $  ª K š ó ü" •"   ­ ± J  s! q! Ï! ì Ï M  k º"  s ; ™ ÷ Æ   u ˜ ¦ É ž P ® Ï! ö Í | x! ¦ ³  ì ¼# × t# Ç# J) A[ î„ ž­“[’ †žÿ¨ ÿ c¦ÿ U¥ÿ Ø£ÿ Ëÿ Ÿÿ ^£ÿ d¨ÿ ʬÿ ×­ÿ s¢ G ÿ ñÿ òžà›ð,’=’ ‘Œ=‰_€  ‚ K  ‰ #|‡yã~q„"‡Š0‰Lh”^˜<£©6°™¶ Œ»ÿ w»ÿ #´ÿ µÿ h´ÿ ]«ÿ Ï«ÿ Ä¢ÿ ¤ÿ —ÿ |f—dicšc"to‡ R’ÿ éŸÿ J¡ÿ S«þ ë£ÿ ž§ÿ h­ÿ L¡þ† ‚  Ùs Åm  j lh =e:UÆT OíM*OTN&L¼M{O^P]OXPQ N#QRUñY£^J`adòf®hìk•jZo p Orrs iw3{ ë‚ hƒ ÷„ %ƒ ¬„ 4… 7… î„ ß’ÿ :šÿ ž˜ÿ ‘’ÿ 5‡ L Þ T{ qy s Eu 3v (s w 2w n| *† Í‹ÿ z” žÿ —ÿ `’ÿ { Oÿ ù–ÿ q˜ÿ ,’ÿ ø–ÿ *‘ šÿ ä›ÿ *£ÿ ]©ÿ “§ÿ S—ÿ )ÿ i~ nmòlËnêhÏk·môm„h£dRi6lj¸l‰rŒvŽrrCpÆsŽx={,~é€ЃÊ…A‡„N…:„w‹8†½†ЇW……Ï‚K[Z„WŠ“¿•,™"ž™œªšyš*’$– ›˜ Þ› K›ÿ yžÿ vœÿ lžÿ 5¥ÿ ñ¢ ž ‰žÿ ô˜ Q˜ –ÿ j“ÿ =‘ ÕŒ a‘ Ž š— %” >• ï“ ÷‘ œˆ Ç… þ€ x ›|L}|©~VÁ}ÔË€~—} “} D}c~ Æ| Ãz R| Ézà{ ^{ Oƒ i‡ *‡ ¨ P—ÿ §šÿ^›ÿ˜šÿ Ñ—ÿ ?” R’ 5’ ç”é˜ Ô£ Ǩÿ ¸ªÿ S°ÿ Œ³ÿ Ó¯ÿ £ÿ”¡ÿäžÿå˜ÿ 4Ž … o~ It½p‹i flbYY6 ë# ”¤ŒP oã – Í æÒ è$G#Õ {!·$]/ âO™A¼/ÿêUi}4þ‘4ý×5ýŽ5ý~5ýE5ý—5ý…6ý6ý–7ýÍ6ýœ6ý¬7ý>7ýŽ7ý•AþÇiÿAÿÿ¢ÿrÿeÿ_ÿuÿ”ÿeÿ}ÿ“ÿtÿDÿ}ÿ}ÿDÿoÿ^ÿ]ÿmÿ{ü¾ üþƒÿ{ÿdÿfÿvÿEÿtF!Ÿ"ˆ#´ µ§ /  J  œ ë • Ë : ‹ J ¡ p  à   ’ / Y U » m Ž º ¦ › 2 2 6  À @  I   ¨  - N   ä ü ø © À þ ï < X uG Ð ( R‡ ´  Ø 7 –  n ¯ E x ¥ Ë _ õ M s ÷ 6  I R"r!Ö!—!× «˜˜  Æœ 6 Ÿ  ã õ K  È ¥ h § • m ) á § w j =     Z á É  Ž G ~ æ ¦ 0 À Ê    ã í i ´ ä ß Ø ¥ ì · ã \ û  ¦ íh Á ñ" >  ˜  º! # 6" « C ú û ·  z  _ ® W } #   ò! ßÀ  ³ O  û Ú U  €! ; 9 €! ë ‡   ’ ” – ø  ÿ" ß# # ! ê! ´$ && ™X»„ «u %“™ÿ o ÿ ñ¨ÿ ^©ÿ ”§ÿ W¢þ p£ÿ ¨ÿ €°ÿ ³ÿ Ѱÿ à©ÿ µ¢ÿ xžÿ ¹™‹–j“•ýŽ܆+ƒÆI x‚ …‡ o‹ çƒESå„1‹£¿G›çšš› ¹® A® ^² ˆºÿ 0¼ÿ ^¼ÿ r¾ÿ %¸ÿ ®ÿ Œ¤ÿ Þ ÿ Рÿ “ÿ geUd(c[gDunˆ Všÿ –¬þ +—ÿ ž¨þ ²¬þ l ÿ ’Ÿÿ Xœÿ ÈŽÿ 0Šÿ úƒ Wu öp ^i £f rd 7VzR$ONõK~K¾OZM&PN™N[M¢P”QZUöT [ _`Á_cÀeüg¨cÌlÝn ”s„s Dq ;x|‘~ 2ƒ ä 6 è‚ #‡ ˆ S B–ÿ ª—ÿ ž™ÿ W‘ÿ $„  I€ Z Üv ùt vq t zu v xx ¹ [ƒ ‡ _˜ÿ iŸÿ ¥ÿ Ò™ÿ .•ÿ +šÿ &›ÿ !˜ÿ h“ÿ µ“ÿ ø”ÿ /—ÿ î—ÿ tšÿ ¨¥ÿ Ó¤ÿ Óšÿ Ý”ÿ í~ {q1oHlÿn3lq¤pèlf|j9iGnOiÂk‚nørÆtGq swxy $}¨€Y‚Pƒ̓ȆA…‡4…Ć…‹‚ó…΂ƒ–‚=‚Ɖôª+“§–£™lšh [œ ^— Ù˜ ÁŸÿ rž Ížÿ úŸÿ ó£ÿ n›ÿ ½– Íÿ ³œÿ /— ‰” ’ Žÿ ¹ Œ å”ÿ ·›   ™ ¬” £“ î‹ ú†  @| œz Ñyæ{XzH} æ~ q{t~Û}]}ŸzÕ}Õ  |~ Wz Ÿ| |  õƒ •… –ƒ J‹ j™ÿ Û›ÿœ˜ÿ õ𠆕 B b‘(• m› ” Þž  ¦ÿ è¯ÿ ¯ÿ à±ÿ !®ÿ •§ÿ ÿ%šÿ`”ÿ p Ñ„ >x rþp ksjÓh^ ÔD t"e"K!Ð Ûw wÖ K ¥{!!!J ¡#G$Q3 }MáA4ÿ-ZÒf.þ}.þ£0þª/þr/þš/þ±/ýï0þ!0ý¯1þ(0þ°0þ©2ÿØ1þ©1þ¡=ÿ iÿÉÿÿtÿeÿÿ}ÿ{ÿtÿdÿmÿmÿuÿªÿBÿBÿtÿÿvÿEÿfÿeþý þmÿ^ÿgÿtÿÿfÿn\ ð! "b!G™ š Ù ÿ : «   ` ´ F â – à ÿ  b ¦ ‰  ¾ i  î q x  & B ±  ƒ ¢ q @ æ Ý + A ¢ - ‘ ß r ú 2 .  6 „ ? × â í  ‚   º ¿ ø v ‹   â Ž  q ® O k 0 Ñ G z ¡  8 Ø! ï"<tÔK I  C o _ ‚ h #   L ë d k 3 £ < ß ‚ n ¤ ¿ ) ¸  e   Š > ö ¢ q È ¯ !  x Ü   > ’  m Q Ú ± £ R Ñ Þ ;   S × á ¨ R B 7 ß!  , à 8% &  t" ª" u » ¬ × œ ‘   ü# ! ï! o°"0 Á  <  ã  /  ›#  ø ,!  j E A (À  à 5 ½# Š" "   À% Ÿ* '] ›‚*’f’– EÿõŸ‹§ÿ &ªÿ ¦ÿ ¤ÿ E°þ j´þ n¸þ ·µÿ ‘°ÿ +«ÿ k¥ÿ §Ÿÿ ù âš¥—|“A“ ”‰{‚Ç‚€ …„ ‡ îŽ "6…’‡nŠà• —+™ùž&á£Z¬³² R¶ ºÿ ó¾ÿ Àÿ (Àÿ ^Áÿ Áÿ P¹ÿ ™¢ÿ Ùÿ X ÿ Q•ÿ Rdádhdevш Yžÿ Ø¡ÿ I›ÿ  ÿ §þ ú™ÿ Þ•ÿ ¢•ÿ ï–ÿ ªÿ )ƒ Vz do h ád u_ËV@QgOcN(NFLtKøN$OÔOXPˆOQUo°nÃqÙqq u¿yùyú}©„f…@„ŠˆK‰Š;‡Å„݇V‡š‡À† „I„ƇìŽy1•ö𠬙 b– ®’ô—à– &• ç— › ‰› A› D›ÿ ¼š †› — V‘ h’ WŽ Ð × Ž M‘ÿ ø“ I—ÿ !” Óž Ñ¢ ‘š “ VŒ 1Œ  … ý} Ÿ€ y _z§y {Ðy ­} %~Ù‚ »~ y˜z‰xš| Ux¨{í€ ‡ @ â~  <}    € }ƒ 5 ô~ ¼| k{ v ;‡ ¡‡ OŠ Ð–ÿnœÿÞžÿ Hÿ ^“ÿ ²’ “ Ï‘ ã•Ê™ÿ zÿ ~ ÿ ¤ÿ «ÿ Ȱÿ W³ÿ ¬ÿ £ÿ ­ ÿ^–ÿ 4 H‡ Ø‚ ðyœt­oµoym·c þS ü% /%A!¾!O" ûÛ  º ¿° Ç#á#è"I#†$A/ ÆL1>A0ÿzT[e—.þt.þ´0þ1.þä.þ½.þ³/þù/þú/þi1þ+0þp0þñ1þs1þ©1þ0>ÿiÿÿÿÿÿsÿuÿfÿÿfÿvÿfÿnÿ}ÿÿÿlÿfÿÿÿuÿvÿuÿÿ$ÿeÿÿÿÿ^ÿmÿþ„#>#"v Û ; * P ƒ =  é ¼   y Á å 0 ò ] R Õ Z Å º ø Ú — ” ø Œ Á 1 ­  | \ í U  é ¦ R [ > ñ W U  G u § — B  B Ö l v œï ¼ P t  2 Ö z ¥ ú l  Ö y  } * ‹ B ý ã i  Ý!6!vXå + &‹ 7 ´ Æ / I   c  ³ q  H ” o Ü [ ¨ ¸ C •  Ð „ t 0 ñ  ä ´ † µ  þ à O Ñ : • 8 3 v U F g! » à Ï  c Û Ã ç ö ]  /  ç  o %    S# Š ¡ [ “ e ü x  H  '   á    %  Û ü [  º! ´  ³  '# :# + Ê!   _ c! $  ç ß  D$ Ÿ" `"(`' ]'˜% Ñ& œ. ›g å…’q–M–ÿ lžÿzŸÿñ¥ÿ ¨ÿ …©ÿ C¥ÿ £þ ÿ¬ÿ ¬ÿ ‰³ÿ Ƶÿ ®ÿ ª ̨¢£ w ô£5šé˜r— JŒx‚Ý„°‚ w„ ‚ † ±”j’¤žžh eŸ¢£P¨w°g°ÿ ú±ÿ `¸ÿ v»ÿ ÒÁÿ “Ãÿ ’Áÿ \¿ÿ Џÿ ç¶ÿ „²þ 9¥ÿ Å¥ÿ m÷c¢`,a0y‹ÿ ú”ÿ äžÿ S›ÿ ÿ ›ÿ Ú¥ÿ È•ÿ îŠ L† ì‚ ks “jðf mbf sa UQZMïNkLýWO)OVOÓP™O‘ORRŽR SÕY"[!`cf fÄhhi+l¨l£lo q’y /| ÿðý… ­† ºŒ ’ÿ ¨˜ÿ *¡ÿH¡ÿœÿ Uÿ &ƒ Š€ } ”| -u „t Žv u v w †~ 1ƒ ㇠^ ߎ ™ÿ z˜ÿ áœÿ kÿ 5œÿ ¢˜ÿ ¯’ Á‘ ‘ÿ r @Ž Ì –ÿ ­›ÿ ´¢ÿ ®¦ÿ ”Ÿÿ “’ÿ þ} örÞp½n*m9k„n7otk¼gÖg]ilºsr u€tÊuüsÖst×y³}肞†¥ˆ{ŠˆljÊ΋‰ÿ‰¿xŠ;Œ;‰ºŠik”¦’¢˜ [œ \ _› «•±“ ?• 1” kŽ ^‹¬o’ Z“   ÉŽ ˆ ©Œ Ò‹   ÝŒ ‘‰ Jˆ Ž ” Ê• Œ– Μ KŸÿ °¡ÿ 2¥ÿ "¢ÿ ë’ ƒ‹ _ ±| Ÿ 5z M} |¨‚ L B€ ±} {| ¿ m} ¼ =ƒ ƒˆ ² ¶{ z A| ü í‚ c‚ ‹ ‚›ÿ YžÿT›ÿ ]œÿ ”ÿ y“ “ ’ Ù™ '˜+©ÿ U®ÿ Œ®ÿ ¯ÿ Ò²ÿ Ù­ÿ ©ÿâÿÿž’ ؆ õzØvro—q³pzf X T) $r!“! pMV Çv!ë"F!¢#z"¡# U/ 7N`Bm3ÿÌU¢e….þm.þõ0þº/þ*.þ³.þk.þê/þ£/þà0þ 0þ²0þš0þ¨1þc1þ´?ÿiÿBÿ”ÿ¨ÿCÿvÿvÿ^ÿeÿ”ÿJÿ™ÿtÿmÿnÿeÿeÿ|ÿÿÿ]ÿuÿÿÿÿÿÿfÿeÿmÿ™"K#s"4s     Ô ª  8   y » Ú t Œ à  J ¢ >  Ÿ º  > y  Î ( @ ? ' Á @ R å / Ð á • ; Ö . t ¬ – » ÿ E + ¸ Ï ‚ Q   Ø œ ‡ D Ï Þ { r æ ¶ Ø ¼  + z / p  ô ­ ^ : Š A°*Ûé!* ñe#{ Þ  á Í À  c  § Ý ½ é q = ½ × ì F  Ø j r €  ÷ ° —  W Ì Û å «  7 Æ  H  ª Ö  ƒ Ù  J º 7 ¸ š œ w »  è  ^ ,  ú" Z  ï  %! B! á D ^ N  0 ì R Á  ˆ  ¨  f g 2   p!Ù! U# * - ;  ¤  i" Y" P#  ò'²# # % µ' )% ¥& Ý- ·o Úˆþ¼”Z‘œ ¢ÿ þ¤ÿ A¥ÿ Чÿ §ÿ Ê£ÿ Ü¥ÿ ‡¢ÿ ëªÿ ]ªÿ ‘§ÿ 2¥ݨ+¥ ¾¡3žG› &™Ñ ³Œs…~ ú q‚ : oŠ l–u™—™–q›ù¤X ‚žY¦)¤Á«"± ±ÿ è¸ÿ %ºÿ i¼ÿ ª½ÿ ¶Áÿ ¤½ÿ àºÿ «²ÿ þ­ÿ —¨ÿ Ó¤ÿ Àvïb(`/_xÿ I·ÿ µþ y´ÿ ­ÿ D¦ÿ d˜ÿ ¹ˆ › 6w ÎiBeËd ýc a€aV2UpPdNªL7LfNuOfPfRÕONO“R¨RØW?]\²_ dAe htlm’oGnœq‹w|vÀzx|z… ·‚ 6„ ‚ žŠ ‘ÿ $’ÿ¬šÿ ˜ÿ Šÿ w Õ{ ïz æ{ mz nw st Äv w ÿx € °† ˆ Œ Û’ W”ÿ ðšÿ ß¡ÿ •–ÿ š•ÿ å–ÿ 1 VŽ M R’ Ž —‘ÿ òšÿ ¤šÿ µ¢ F§ÿ "¡ÿ Ù–ÿ ë õvn¾kÈik‡nqmäk7eÉgúiºoàoÚpHu?vVwvÖuXs‚x¦{`€_„â‡ÙˆÙˆT‰ŒN‹@‰‰¹Š¨X‹!Œ%‹äŽí~‘ &• Ÿš +› ê› I˜ š ¦œ è› ¤˜ Þ• §’  î‘ ç "‹ ˆ ¡ˆ ÜŠ !ˆ ׋ VŒ Yˆ Š š ’ Ÿ“ Ê•ÿ ÷£ÿ hžÿ â¡ÿ  ¥ÿ n¦ÿ d” IŽ ˆ‚  Õ € € € œ‚ Å Ö~ ù ç€ £u Ít Ý| ~ „ ‡… v| 9x Iz †~ ·~ èƒ ¨ƒ ÿ 5›ÿœÿšÿ ÿ Ù“ –Œø“ÿ wŽ ›— g– ——sŸ D®ÿ e±ÿ ¢²ÿ ž³ÿ ªÿ ¥ÿ“¤ÿ–£ÿT“ Ë £ƒ ù| ×y$q>q÷r„lû^Ú/ ü#4""!%y ` |"Nû!$7#´#1$z%0 .M§A¬1ÿ%YËcC.þ<.þó0þ³/þk.þl.þ*.þ*/þê0þ11þ*0þj0þ¹1þy1þ92þ]>ÿSiÿˆÿJþÄþWÿ™ÿ|ÿtÿ™ÿIÿmÿ^ÿoÿmÿuÿeÿÿÿdÿÿÿÿÿÿÿÿÿ^ÿmÿuÿgùñ t¿ m ñ ± ü Å º 3  å ‘ ¬ æ M i u  e ® J ä } ” û î ø q F o    t < ò  6 × 3 ´ Õ ¨    T ç  3 ® <  Ù P y l ® g Ž Ä å µ ¤ ú d F l ¥ K Ý w $ ¬ V Ú q h  À ¬ á £ _!ä o ‘›« ë õ Ø W Ì ‡ Ó  ® k h { = z  b   Ô Ž l P À  J ‚ = Ï  Q Û  ” T Å ˆ œ ¥   d ˆ ‹ S ¥ T # : æ F Z  3 Œ þ # Ö Ú M | ' i"  }$ í   f  o   8 y  «  " ™"  ƒ! ‚ º [ e" Y   å  a : Å é# Á% %# # $¨  º! Ë$ # r' ’& ò& Ê2 n؆V¸“Ü– žˆ¡ÿ t£ÿ c¢þ ¸¦ÿ ¥ÿ Õ©ÿ ]«ÿ ®ÿ M°ÿ H¬ÿ ™¥ÿ ¤`¡ µ¢\š5› aš Ö™ H‰1Š j… ´‡°ˆqˆ "‘ äœò§Ã¥¦ÿ­¬“¨ªÿ²§ÿåªÿ X¯ÿ ݰÿ ³³ÿ ¸ÿ ™½ÿ ¬½ ޽ÿ ÑÀÿ Ù¶ üÿ #¸ÿ 8¶ÿ ˆ°ÿ ˧ÿ Ä~ Faî_7`³uq• L¯ÿ Ü»þ ª¾þ }»ÿ …¶ÿ Ø«ÿ r¬þ >œÿ "Ž V€ Xp •c—_äd ½`_ÆW*P³SAMtLnK$NÔO£RˆQÑN›L¯OÍPÕTÌX-]ƒ_^ãiskÛj®jíp qÆoŸrLstKt —y ~û€ «‚ Ø g –† Q‹ Šÿ öÿ é•ÿ fŠÿ ü„ | ð| #| îx ü{ 3x x ¸x ÏwÐ e‡ ‡ Ñ” –ÿ z›ÿ dœÿ ç¥ÿ ’–ÿ .ÿ 0–ÿ !‘ÿ ·‡ S‹ TŒ –‘ Ž– ’–ÿ ·›ÿ ¢ÿ à¨ÿ È£ÿ U—ÿ ,x r*h¯gèjGjÅlñlökÆdÒg†kpp•qp q‡tsÖuvvqyª~“†£‹ †§ˆÈŠÍЉ‰Q‹–Š4ˆ™Œ«‰ &‰ g‹ãõ‘1‘“ÿ üœ Y™ «•°– ☠ؚ ·› ¬œ ,˜ — M— à” “ ™‘ Œ ‹ W… î… ­† ¤† ]ˆ "Ž ÎŽ Õ #—ÿ ¸  N ÿ t¥ÿ Ö¦ÿ Ø©ÿ e™ ‹• €‹ Ć Ó…   }‚ Kƒ ‚ …~ w~ ³~ öz z 8| Á} Œ þ ¼{ ¼x À{ ¸{ z| h… '† ^ “ÿišÿžÿ Üœÿ §–ÿ j R“ I K™ G™ Λ(  ‰¡ÿ o©ÿ ]³ÿ ²ÿ —«ÿ ˪ÿ  ÿ " ÿ—–ÿ øŽ “‰ "„ öys³r´qüo€h ¦; C"´ × © ¨Ì J _Q",##"ˆ"0#D%2 šM`A¶5k^;b‘.þm.þ«0þù.þÚ.þ¬.þô.þ/þª0þ1þ0þ±0þq0þZ0þR0þâ=ÿÖkÿ ÿlÿfÿÿÿmÿtÿKÿeÿ_ÿeÿlÿeÿÿÿÿÿÿÿÿÿfÿÿÿÿÿeÿdÿeÿmˆ Ú©½, î è n H ç Š Ê a ¯ þ î  ­ Ï 4 ±  ä ƒ É š ¸ W z å : - ® T § ' J 6 R = Ô ‰ Ø [ ^ ¶ ð   : ° - À 9 å ¿ á B Í Ç É À J ? ! ; G • ô O { ›    ² Y / ‘ è y  ÿ µ d .  ‡ ù Y  S E Ù » Ñ   Q Ö ï · Þ  q  - ¿ ¾ \ 5 9 ö Y ÿ ë  Š ¹ B À ³ Z } “ Ž G « ë 3  í 8 à “ Å ‘ ¦ # ¾ ß  ‘ P # Ê   š Û k »  ¦ È  3 ’" ß Á x 3 ö ó  Ÿ  8 N  ¦" Ò ! ï Ç   Ë Ï  ¹! " ^ ù Ä$ Ž! $ Í" š$À$ $ # $ $ ì& ­) n3Ut8ˆÆ“m’„—CŸ O ÿ =¡ÿ 2¤ÿ \¦ÿ Z¬ÿ §ÿ ªÿ ¥°ÿ $²ÿ S®ÿ © Hª S¡ › îš ç— Ñšÿ ò˜ –‘ nŒ°Šõ†  † ©ˆ `‹ –’ ¡(ª[®‰­ÿþ®³ÿl«ÿì®ÿ •©ÿ ‘­ÿ •°ÿ ¯ Oµÿ ¼ÿ f½ÿ ¿ÿ p¿ÿ K½ ·ÿ c°ÿ ô²ÿ ¤³ÿ`®ÿ ¶£ÿ ‚ •cÒ^`§r³’ …ÿ °þ 8¸þ ;¶ÿ ºþ >±ÿ H¦ÿ Öšÿ 8•ÿ p‹ Ëx Ej ·dËg ­c2c9YnUKOáN0M,LuLwPÝQUGPYMÜOsRPV9Wo^ b?c j4lÝl$oVpâo·rpZqrSuÃvS} 3~ j "€ \ ´‡ Óˆ R‡ÿ ú‰ÿ nŽÿ è‡ Ëƒ  ª k} ¶y zx Ay 8 6y ü{ ü éŠ ‹ ‘ÿ ú”ÿ 1Ÿÿ ¥ÿ ¥ÿ T—ÿ °”ÿ r’ Ì’ÿ õˆ RŽÿ 1’ÿ a’ÿ ²ÿ ošÿ ñšÿ #¤ÿ Q¥ÿ ¢ÿ šÿ ÚyÊtXl›j’hÎkÇkEitiKe{gUg¦l(nœr^p)s‡q{o€s=s vÀyô}I†Šƈ…‡:‰ûˆ½†\‰Ól/‘oŒŠ.Pè”.— š ˜ Eš š ›œ &š C—°–q•š š™ Sš H› •é› Ù˜ — &Œ ̉ ¨‡ õˆ ㇠#‰ Þ  l“ ,›ÿ µ¢ÿ k  Ë ÿ *¢ÿ y£ÿ ð  A— Þ“  \ˆ „ ‹~  ×€Ì~ Lx Ç| Ay Ív Ê  ¾} ô{ Žz ~ ív x †y || q€ ¾Š œ ‘˜ÿ"šÿÞœÿ ¤œÿ V”ÿ 4ÿ :‘ Í – – ‘œ ߟÿ <¢ÿ |§ÿ â°ÿ Á¯ÿ Ö¥ÿ ¯Ÿÿ§¢ÿW¢ÿQÿ ä’ ÝŠ '€ ÊzZv¾q;q)mZi 8E °$Ÿ"Ž©íB ú [;y!M!Ü!Ê"™"Ò"É$ W/ åKÔ@ü0©_`J*þè*þ1+ý+ý6*ýu*ý…*ý'+ýõ+ý¬,ýö,ý,ýœ,ý,ýÝ-ý;ÿËkÿ ÿeÿfÿeÿÿmÿeÿeÿnÿtÿvÿÿÿÿeÿ^ÿÿvÿuÿÿÿÿÿÿÿÿÿgÿfK"ý ^6Ô  O Þ O V Á / 3 ï w   r  ½  > d H ‚ N x i Ü = c Ù ª + ò x m m  Š ¬ ì ¡ à W ñ c  Å ÷ Ô a ¹ ¥ C ù U 3 ý  ÿ  n 3 × > “ Ä í „ H ¬ ± ¶ * ª Û \ Ñ ¸ ä T M € ¯ ò  “ ² > _™ Ï"Ó#  . K . v Š µ ƒ ä ü ‚  ¶ ° ¢ ® n 4  D 6 > ç  ‰ î ³ H U ú  M ÿ ˆ  ë - ¦  › É Á S ô! d ´ É Ê U p ü ” X Ó      í ? ½ è ‡ e E p l ¸ Û e ”" & ‚  » A! 1 ï! ," M" ½! v! T " " € D ÿ = } q  Z(:$ s! 7" Þ! Ã" æ% z% o' –. >‰‘åÕ— œ›ž Í¢ÿ §¥ÿ Ó«ÿ «ÿ Úªÿ P«ÿ #«ÿ c®ÿ N«ÿ «ÿ =¥ Øž œ œ œÿ ê˜ Ï– Ü‘ ‡ þƒƒ j… ^‡ h‡ ¡‹ /˜j¥«O­ÿ+©U¥œ£Œ¬ÿ«­ÿ %®ÿ _­ÿ a­ P´ K· »ÿ c¼ÿ XÂÿ $¹ ×°ÿª¯ÿ8¬ÿñ©H§ £ Œÿ xd•`¯`'oµ Õ–ÿ "œÿ ¦©ÿ «ÿ ƒ¥ÿ Ú«ÿ Ï£ÿ š•ÿ pŽÿ é‡ Iz 2m gi ¬g @d føZ­UñOÑP&OjNdN®Q–NZSOÛRýSCTJW0X-`c/cÈl¤nœkénfm¨mpp^s pÈq“u y s| ï~ Ú ¦{ ´ *† ‡ÿ 2…ÿ =ˆÿ üÿ ¯‹ÿ  Šÿ .‚  æy èx ¸x õy ýz ð| ƒ ¡‚ ‡ ŠŠ Œ”ÿ t›ÿ ß›ÿ +¥ÿ ̤ÿ È™ÿ §” ’ H•ÿ *Ž ˆ’ÿ uŽ O‘ÿ {–ÿ 7—ÿ g›ÿ ÿÕžÿ Z¡ÿÏžÿ{ q£lÜkjPjÉn.mq|rvx3{¤Ó†Ȉº…@‡J‰{‰)‰·Œc’^”‘’ N ÞŽ • ™Ø  [œÑ Üš dš!™#—7“£”®— þ™ ¦™ ݘ j•£™›ž _œÿ |— À” N Û ”ÿ ´• C›ÿ 1™ ‡œÿ ÷¡ÿ 1Ÿÿ ê§ÿ ”©ÿ —¥ÿ ——ÿ ã“ÿ ½” ÌŠ o… ; € ƒ ì ~ Tz ƒ{ Ìz z Ô~ ù{ ý} 8y À| Ä~ ¾x B} >{ ~{ þ‚ =ˆ ‹ –ÿm™ÿf™ S’ÿ 6Œ ÑŒ j mŒê–‘– œ Ρÿ (¤ÿ ;¨ÿ Ô®ÿ ‘°ÿ ©ÿ ¡ÿáÿ , ÿ ÑŸÿ ã’ `ˆ ´€| uv _r.ol*g8R Ø&Õ!À!J4 Gûrç  Ý""‚"¤$ $0 òKàB´3Ù_I`'þÁ'þ‰*ýg)ý(þ¹(ý?'þÀ)ýç)ýÿ*ý¼)ýÅ*ýt*ý¶*ý·+ýw:ÿjiÿÁÿÿtÿeÿÿtÿlÿ^ÿlÿtÿtÿfÿ_ÿeÿeÿÿÿuÿsÿÿ^ÿÿÿÿmÿ^ÿvÿ^ÿm¿#Å" .ï—× S ^   à : v i  Ø  v  Ý ? † ì ð 4 Ÿ ã K   I q  Ü  É  { Ö ` Ü ž í e ¢ . Í ê    Š/ ù Ë    i À C ñ å µ õ » h ý w 7 q  i ¢ – ‘ ó œ ! ­ 3 ö N 1 I y  ‡y  á •  ê  è ý   ê Ä B  D E ú È C J í „ é  Ð     _ Â Ø K Ê ´ à  U" z w  " â ƒ ì 8! 3 Q C ß  ò © a Y  Y •  h Ú  ^ Û d  [ y  2 ^& ú Ö Ò! I ° f"  W > É ) ù  ¯ *! Ú" " i  A! H  ô! ï% C!    Ö  £ u ½" *" ö ~# ]& ± è =  8$ /& & ×% ]% “) ¦EÝWŒ@”t“”– š¥ K¢ÿ ¥£ÿ Ÿ¦ÿ œ¦ÿ %ªÿ ܪÿ °ÿ ̲ÿ ã²ÿ ᦠ[Ÿ Sÿ }šp˜ ®˜ P” $”šŠì… ?‚ · è„ ã‰ PŽ — "Ÿm§)œtš£œa Ò£ʬÿ´¯ÿ´®ÿ w­ ¨"® ¹ÿ `»ÿ h· ½ÿ t»ÿ (¯ÿ«©ÿ ®¤ÿ 5¦ ˬÿ ´¥ Gÿ ôgb,^íl~ Ž›ÿ ذþ ý±þ {¥ÿ Ó¡ÿ £¡ÿ ZŸÿ W’ÿ  ‹ÿ t "t i ¦dAe b Ïc þXsSÕRCQŠQÉP’SJRŠT…SzQRPRÆV1W,Z_]¦dh´k(i k9jFminÜqUrPtt Ÿx5w­} 2~ æ} #{ â~ i — ž‚ ÊŠ DŠÿ |… ƒÿ >„ Œ{ wz >y ñ{ n{ ?w E~ .‚ #ƒ %ƒ £Œ ÈŽ Ä•ÿ ¨–ÿ ðšÿ Ò¢ÿ • ‹’ÿ õ–ÿ «”ÿ êÿ îŒ ÿ º—ÿ V•ÿ ²– ™ÿ «šÿ àžÿ Ñ¡ÿ V¡ÿ Sv šqokgmf-iIoðlÊkdNj0m2mùjâutÉuÖwbsp~pwvwwAw n€Þƒ r‡ƇMˆˆº‡IŠ0Œå Ô“ Ó Ê’ È™ÿ ö› œ ž ž R    š › à ™“˜‘¨”|— *–p˜,š '• Ö• Wš šÿ m˜ÿ ±•ÿ ¾” L–ÿ ·• “ Θ J™ „˜ÿ3›ÿ/›ÿ ±Ÿÿ&£ÿ ¢¤ÿ ëŸÿ ø˜ Ô• Ž –‹ „ øƒ ì‚ ¼ û{ Éz Ÿ} K  ; „|z‘zˆ{I} ºz }{ } H €… ·† f† e” Ζÿ ý“ à Œ ¥‹ i « Ø“õ”rœ ¢ÿ ã ÿ )¥ÿ V¬ÿ ¨ÿ ê©ÿ ÷ªÿ ¦ÿ Í©ÿ æÿ ™ÿ ½Œ S„)‚ Nx+qÄnm‚e ÌZ ' > à ŠF õü ¡ & #!Ü"Œ"’$Á%X/ ÿK™B­7Ó`Õ^Ú(þ 'þð*ý¯)ý6(þ°)þ )ý>)ýæ*ý+ý5)ýÝ*ýf+ý6+ýÿ+ý¿:ÿQiÿ ÿkÿdÿ^ÿÿÿÿÿeÿeÿeÿmÿuÿfÿÿ_ÿÿÿÿÿÿÿeÿeÿÿÿfÿ\!{#Î"´ ²ì – ! ó ï … Ì ³ ® Œ z V î ð ‹  × —  K — ¦  Í “ é  ` × © t º f å \ o F p © ¤ a   ‰ > è þ ä — ç  … b Y … k  ñ Ž ¨ õ  Ç X ; Î n    ¬ » ? b «  Ð G † f } î ü  ²I •Ñ * e Í ¨ ü G ˆ û c å 4  L " Ù " ý & / Ã Ü  i H O / „ q T } ý   Î  Z + ô ð ; B k ˆ Û! ¨ Ô!  à ø ý D á £  Ö!  …  }! T ! .  í! >  A ë ¬  @ ‚  g >  =  ‡ 2 Q  £ R   ! ç# K# ! f    1  ð  F  D! :! ¦ ® ·" N  æ# Ý& % •$ â, 'Kƒ…‰ÐŒ•ñ’꜡¢«¤ÿ #§ÿ ©ÿ \ªÿ —©ÿ «¯ÿ ×±ÿ Û°ÿ ÷¬ÿ ó¥Æœ¡š!œû›Šœ %”v“ƒˆˆ5†D„ `Œ äŒ ’ Ë‘ ) ¯œö‘>’ –v›0¡Ó¤¨™¦¨ÿ >© ° ޶ÿ Ú¹ÿ ºÿ Û¸ Ͷ ʳÿ t­ÿ 6¬ÿ ï¯ Â§ÿ Ø¢ÿ ¯—ÿ iÃd ]åg ˆ œÿ bµþ °¸þ z°ÿ «ÿ £ÿ Ÿÿ g˜ÿ £Žÿ <€ r Lbž^2a™d aJV®SU4QNR‹QFU±Q‹PËT*QVaV*W*W­^ÃaeBfhf›hik4mâoãqÔu rZv5wÔy @| è # ÿ ¶„ ƒ †ÿ þˆÿ §„ J ƒÿ 4~ W È| ¥{ [y ã{ ¬} ï~ ¶~ p… ¤ƒ eˆ X‹ X ”ÿ ô™ÿ ª ÿ ˜ÿ ,’ÿ ü• C’  @Ž ÏŒÿ ¿™ÿž™ÿ Ú•ÿ 6–ÿ ³ÿ ¥¡ÿ $¡ÿ çšÿ i{ róhØf«f­i•mnUiácLhl(m1iùl1oÑtwžt tlr ®u£z¹zà~Ñ| ̓„‰É€‡‹2‰ª‡ e E’ Z‘ –ÿ ;šÿ öœÿ 0› Rœ  P¡ ˆž Öž œ ®˜ ´• .‘â‘ñ– — é— £˜ ” ⎠Փ V“ Ù• ’ ’ ÒŽ ¦Œ › à”  Ú’ Œ“ K”ÿ 2žÿ ˜¢ÿS£ÿ'Ÿÿ êžÿ ¢™ÿ >– R ÏŠ … â„ ;€ Ð}Ü} '{z‚ @ƒ =z{ É}J{žv¡y xäx[8¹„k — • †” Š8†‚ˆ =‰<‹b’¡“ ” ëŸÿ 3Ÿÿ `Ÿÿ ™«ÿ P¨ÿ Ò¤ÿ ³§ÿ %¬ÿ –®þ 9¬ÿ Œœÿ > ƒ ;„ sw ”r«nkKgR_ §, ®!ÂÜÁR ¨ d é' s °!¼"Š!Ù"ß# U1 íJ€Cî9ødú_V(þ'þ*þñ)ý¾(þˆ)ý)þi*ý7*þ±+ýf*þh*ý¦+ý÷,ý7+ýî;ÿRiÿ ÿBÿlÿÿÿÿÿnÿ|ÿ|ÿ‹ÿBÿmÿfÿfÿ^ÿmÿmÿfÿfÿmÿ_ÿÿdÿmÿÿÿÿfÿó#ø#* ç•ÍBÓ‘  ‡ Q G ý ·  m Ñ ì  + V © » ¯ – ó # ¢ + C ’ ¼ ’ Ù … ¡ a / µ ¦ Ô  æ  { q  Å ‘ 9 þ ¼ l Ó – } ò * M Ï C  ^  b à  Å T Û 3 ó ) % ¬ ú å 4 ’ ‰ = z —  ó „Ð ½ à  Ð r w t ð ß " \  M ø º % ½ Ù õ à  A ì k Á ¦  ± € ø í ï % ‘ ¡  y »  Š 7  º 2 d ž ü$ 1 - (  b! š  '   ? H  «$  °   / ’ U  !  c! %" Á ç l º º   i! ¢ ä  M! ý * Î ©! -% >! ³  ½ Ã! l F v O  † B >!  ô! ¥  # ³$ )' ]# C) ŒP僉ۓj”5š$¡Ë¡ Ì¢ÿ ]¦ÿ Ÿ¦ C­ÿ æ°ÿ ³ÿ ^±ÿ "ªÿ¡¤P£ß¡àždžæ–Ï”øŽ‰‹9Št‡ å† H‰ ;‰ æ g• g’’ŽŽõ)–} Õ¤ÿ±¦ÔªШ© ž¨ ĵÿ ‚³ÿ ó¸ÿ 6½ÿ ð·ÿ õ±ÿ ˜°ÿ ®ÿ ¬ÿ ·£ÿ Ô¥ÿ ¢ÿ ƒn8e™^ìd`€8—ÿ ¯­ÿ ³þ ¼°þ =¨ÿ Mžÿ •ÿ 6“ÿ g‰ ˆ} kn äaT\©aZb:^YV2SøQÎSRÄSÊR…S~ Ïwòwœw Ÿv &vay€í„h ” ‘ V‘ f† ?ƒ =ƒ »‹ 7 œ’ “ÿ ü• ížÿ ôŸÿ %¢ÿœªÿ R¯ÿ ­ÿ ’©ÿ U«ÿ §¯ÿ ­ÿ A ÿ ¢ ”‰ ݇ $| †u %mûk h“_ ô4 ã! 4ï § ¡ › } v L 7!Q !Ó# Ö3 nN#C5ÿì^â_™(þ|(þ9*þˆ)ýÎ(þè(ýo)þp)ý¯,þH-þ)*ý«*ýß*ýÿ+ý5+ýþ;ÿÃgÿÊÿÿÿÿÿÿÿlÿeÿuÿBþWÿ}ÿÿ^ÿ^ÿeÿÿÿeÿ|ÿuÿÿÿÿÿÿmÿmÿ_Ú!)"/ Ó°—†R –  Ë ÿ Å ¼ Õ ¡  å §  g  % ß 8 Á U ¾  ½ l ¾ Ò – Ï ñ k Ö T m ø  ¾ Ë © r · e  « ½ s ( Ê t „ [ N @ | Ç × r ‘ b ÿ ” ® _ ô • -  " q  „  ì O à   å ˜ / ¹ Ë Z Á°!9 ~  1 ù _ Ä Ë • n Q C ö  t Ú W ö å  « f t Þ ‘ j £ ž ° • ¹ W …   ² € ð ë ï  ¯  * a  ¿ ! ¦ n  a j ò 0 Í ” j &  [ »  » @ > ò# S   1  I š  ô ‚ •  Õ  i     Š! (! e# ! 3" •# .  % Ð  ‡ ¯  W ’ h Ç ž x ö ²  .! ¤  "% (# ò' Y( ì]G…†‘–=›i£ ¤W¥ÿ¹®ÿ W©ÿ æ«ÿ Ò«ÿ à«ÿ ;­ÿ ±°ÿ p­ÿ ã«ÿ _§ÿ p¤ä¢÷Ÿõœ:˜–¶ŽˆŠ½‡ I‚ •‡ ‹ ™Œ ㎠Qˆ‰É‹üˆ@‰9‰†—± T¦«ªgž/  «í¸ÿ 4¸ W¼ÿ +¼ÿ ©ºÿ ö·ÿ ¡®ÿ Ï©ÿ ¤ÿ a ÿ ®¢ÿ  ÿ kb°_êdM~1“ÿ ÷°ÿ ¶þ 9«ÿ ªþ ¬¡ÿ ”ÿ äŠÿ s† @x þi F^°\µ^«` F\ZWÚT?TîRýSûRQKPON OPOQ W~Xé]IaJabŠc”h‡i3jkl2l6måm`m¡o¾su Ju =y 3€ ± à~ Ú€ ˜‰ÿ ¥†ÿ >‡ÿ é†ÿ r‚ÿ ½„ÿ 4‚  M{  z `z )z ›| ›~ Á€ I€ š„ † MŠ N•ÿ ëžÿ ¾–ÿ ^–ÿ §”ÿ í‘ÿ ª’ÿ  ÿ #ÿ¯”ÿQ˜ÿ`—ÿ +“ÿ ®›ÿ 1œÿ v™ÿ ©™ÿ v—ÿ ãz Us¡jádd$kn´mLk¡eciyhzoñoâjÍr‡r•u…süty‚z“z,~¥~Q} Nƒ‹†„ƒ†u‰h‹2‹ëŠ ª *Š 'Š Š ”‘ šÿ ª˜ÿ jœÿ tš @Ÿ Ež „˜ É” • Ý”ë’ çn g” É— –X‘ .‘ f• ‘ Þ ¤ Œ õ‹ ? œ’ Q“ “ÿ «•ÿ t˜ÿ 1”ÿ µ“ÿ =‘ O’ Î Š Ð‡ i„ þ„ Y z| f}({ ×| ¿€„‚ r‚ 5 =y Ê€ ~z Uz’x Þz ü| ?|  ¶‡ •Žÿ ¼ M‘ Α P† > ?„ ðˆ 'Œ ŸÓ‘ïÿ ,Ÿ ÿ v£ÿ æ®ÿ ıÿ гÿ ²ÿ  °ÿ ͱÿ ¯ÿ ɤÿ ß–ÿ °Œ S† w| Fuªom†hZb :@ †!F åLt = W Æ  ÐC¨ënü"j3 ˜Mk=Ñ5ÿÎ^maK(þT'þá(þñ*ýß'ýþ(þñ)þ±*ý~+ýF,ý®*ýf*ý¯*ýw+þ0+ý§;ÿgÿQÿÿ^ÿÿÿÿÿÿnÿDÿtÿfÿÿ^ÿÿÿ^ÿÿÿdÿ”ÿmÿ{ÿEÿÿÿeÿtÿeÿuÿç"…!O!ü i¼ f Œ ã w B u ÿ  Ì X .  â ú U  ¯ g Œ  ¦ Å Í  Õ ¥ ú } ë n v n ) @  ` s c I   _  † Z ð ó M B ­ 9 Þ ü  â ± î  ¶ % s Ê ò š 3 ¥ É w Ë ± Ø ¬  Š * ¬ C ·š ð Ü ¢ ' Ä 5 À f ¸ î ¯" € ä ¶ è Щ [ W ` " 9 0 M Ñ A : × ~ x  ú Ò © k ² Z ¹ < q  “ É Ø Ô Å õ" ! ¬  +  o" Ë# W s  õ  • Í  7 F! ­ € ì 0& ? ¾ ¤ s  ¾ õ I ÷ x ª     # s à D" Â! ³ ˜# O" l 2 ·  N Ú Š  H ¤ N ± Ú# "  Q  ´# ¿# ¨. nÝ„á‘I˜2£ ÿ ~¦À«ÿ ÷§ÿ ’§ÿ Ȫÿ “®ÿ ­ÿ ¥¬ÿ s²ÿ "®ÿ ç©ÿ «¬ÿ %®ÿ u¨ l …›½–x“H‰üŠ U‰ ÒŒ ‘Œ Hˆ -‡ÿ‡ƒ…Õ†‚ˆúŠÍŽ ’Ø¢£pªQ§¢§u«œ° Å·ÿ è¼ÿ æ¿ÿ «Áÿ m»ÿ ©¶ÿ æ¬ÿ "­ÿ˜¦ÿ ®¦ÿ ¥ÿ @¤ÿ Uo lfßbcêÿ è®þ ³¶þ ³³þ &¤ÿ Ę ”ÿ Îÿ k‡ @w Ái óc ] ]] ¤\BYÓV¡SõUãT`SõRKS¿QBQ OOSTU>Y¤__H^^a•d gíeøh>hAkõmàn m Ùr —t ¼v Du pu °ƒ 'ƒ 3… Ù„ ÄŠÿ g…ÿ õ† Jˆÿ ©‡ÿ %‡ÿ !‡ÿ b ~ Èy 2z Ü Mz Õ€ ‚ „‚ H„ÿ 2€ „ÿ <‰ÿ û‘ •—ÿ 4˜ÿ ª”ÿ m˜ÿ™ÿ×’ÿ&Œÿ ‹ÿÜŽÿÖ™ÿNŽÿ õ”ÿeœÿ Q™ÿ ó˜ Èÿ f–ÿ ët æs8mbôgšnrn2iÞi"i=h%kio.su¦u|tosHrùtz&wy wz Ý| ~ „ˆ=‡ˆ<‹5ˆ o‰è‰ §‹ ®‹ ÓŽ ΋ ã Ü“ —“ Ý“ V™ÿ sœ Õ› ‘š Ì— ’• Ï’t  Œ“ ™ eš Z–ø” ë’ Î‘ UŽ g‰ ë„ ;… :‹ Y‹ * ^“ ÿ 2•ÿ ý•ÿ ±”ÿ *Ž WŽ Ã `Š àƒ ¸‚ Ê| ™} ~ « S{byŠz}  ½… ÷ Çv ¯~Ê| >{ x w } | z ~† “‰ Üÿ 9Ž ÓŒ )„ƒ ¿… ÷‰ ˆ ÿ Q“ ˜ÿ 4Ÿÿ ›ÿ ë ÿ &®ÿ ‚±ÿ U²ÿ ²ÿ `²ÿ ˜²ÿ ¯ÿ S¤ÿ \˜ÿ ñŒ K… Ÿ{ w#p8lÈjb‹I©#f#…éž ¾ b û  Þú¼ ú¸ ß K/ úKã>¬5ÿea€^(þS'þÔ(þ9)þà(ý7(ýî*þ*þá,þ9+ý¦*ý/*þ¹*þñ*þà+þà;ÿ›hÿÿÿeÿfÿÿfÿ_ÿÿðþÜÿ›ÿ}ÿuÿmÿ^ÿmÿEÿfÿÿfÿ~ÿmÿŒÿ”ÿfÿlÿEÿmÿlÿv!<Îh Rˆ ¯  M ä s K … d  ‹   2  A c ¶ “ — ; ; G 7 C Z ¸ û  ! x  , ó ø q q E . Ÿ K \ Z t é / à _ ¸ r c  h ‚ £   h ª ÷ ú f   \ < f  2 õ ] Ê š Œ Z 9 š U m ï  ² ð   ´X gˆ k Ò ü ‡ Ó Â ‰2 | è ™ g  f ë  = m ÷ O Š Î œ 2 Ü  ¶ í o  æ ¬ ± Ç  p  6 D%   í! Q  ` ò" ‰!  c C ì Ï  ¹   ™! à ·!  ä ª ¾ å ° ›(¿  :$ 2  î  ç 6 Ø  Õ q  ¼ Ø  ¬  W# -# T  . ¸ ã ^  b Þ S   Ô  W  ß ¼ # v% O  2 –" ' }2 áwº†c£•uxœ§¢£Õ©ÿ §ÿ Õªÿ Ò¬ÿ ¯ÿ –°ÿ )°ÿ +±ÿ ±ÿ `­ÿ ä« ¦ ß—œ —˜™Â’x+Ž $‹ Š %‡ ìƒî‚MÜ „M†Ë”®—¥ y©ÿ=ªV¤£D¥´© ß´ÿ ­¶ÿ +¼ÿ °»ÿ n¾ÿ ú¼ÿ ß²ÿ %°ÿ «­ÿ õ¨ÿ u¤ÿ ÿ¤ÿ £ÿ It Re `Ø__â”ÿ §þ 9³þ j²þ o¬þ ì¡þ ÿ“ÿ _Œÿ ¶ ‘z úh w\à]h]ƒ]^ZŒZ W&U°RþRR‰RÎQQúRñNÛQ[SÌU“X:\Ú`F`‰cQcQcPf»hEiõk³o#pXp Žq u u w ýt Â{ *…‡Œ ¦ÿ v‹ÿ ²Œÿ q’ÿ ®Šÿ q‰ÿ o†ÿ .…ÿ ,ÿ ú€ Ž| Ó{ ê| | ‘€ †ÿ v„ÿ ¼ †ÿ ìˆ @‘ „“ÿ  ™ÿ ܘÿ ášÿ›ÿ ÿ ,Œÿ ä‘ÿ cÿ à“ÿ"ÿ¯ÿ 3™ÿ ,™ÿ$˜ÿ +œÿ ¢™ÿ `v ’oñkRd,gmi•l±jh$jái‚jµn—n¥ru"rmtÕt_xAy M{ }| ${*}H€ t‚ 3…µ‰>‡Hˆ{‰)‰,† çˆwŒ™Ž ‘ Ü— ¢• Ö˜ Ë—ÿ õ–ÿ {› €žÿ ÿ™ – ‘— Ú˜ ¥”kŽx— ” Ô– [” Ÿ’¿9†F‰ «Š æ„ ,‡ ]ˆ _‹ ç “’ÿ ¼•ÿ ¼ ‹ È ’ÿ ì‘ ‘ ¬ Aˆ 7„ ʃ »Ózz d€‘{ | ¶x =z ý~@€ ó Œ 0| B|ˆz | Å{ †~R€T v| †ˆ O‰ ÌŽ   3‚ ®…Ï…C‡ü¢’ å–ÿ 1ÿ ^› ›ÿ «¥ÿ á®ÿ V°ÿ ܳÿ å³ÿ %®ÿ ¢ªÿ ¢ÿ å–ÿ â‰ÿ ú‰ ]} Ãucq1l°kb ¥S & Ÿ" Ê ³˜  ½ .u —á  ÷3 lNt?­3ÁcË[!ý½!ý !ý#ýD!ý”"ý"ýÕ$ý½$ýº$ý2"ý´#ýƒ#ý‚#ýz$ý´7ÿahÿKÿÿuÿtÿ|ÿvÿlÿIÿ’ÿlÿCÿœÿdÿ’ÿ›ÿ}ÿJÿ|ÿEÿsÿuÿlÿDÿ}ÿDÿEÿnÿmÿuÿvÿ‡%üºª" Ë8 o ä î _ 4  ž G  Ý Þ Û    ¤ ² ½ Œ ³  ½ ~ ¯  ±  Ô Ô  4 Þ ý U ¯ Þ ®  „  [ Û Í I z Ê ¼ / æ   ø t | : 9  U ¢ Ç U Z  Å  í > ý }  « õ ¥    è H Ð 3 r ë l å [ k  ïJ© ¼  O f  Å v ï –B ç  Ø i } ¡ Ú ÿ _  ( € | Ò d! ƒ P Ÿ ˜ Ä Ï  |  „ þ — 3 » Ü" b! " Ö  ¨ !  # Á" œ ˜  ! r ô F! ›  ñ Í  - Ÿ d # n  “ 0  É t! 8 [ § ¡ Æ Ç t   a! Ì  Õ! # s  ^    ^!   k!  M    c à ç á  f# ! Á$ ó! ^" ß! b# À2 v}‡úŒ'“¿š2—8¢ •¨ÿ è«ÿ 0«ÿ X­ÿ ‡­ÿ È«ÿ ›ªÿ ô¯ÿ ð¬ÿ ä­ÿ ªÿ ô§ Ø¢ ¿š™'˜^’––ª“åŒ ZŠ ‡¨ƒuŒÕ„‹‚Ô‡Š‹Bò£«ÿ0£F¤©£Û¨ æ® T·ÿ ¬»ÿ )½ÿ ¶ »ÿ õ¹ÿ ¥°ÿ Ÿ¯ÿ ´ªÿðªÿ0§ÿ š£ÿ ££ÿ  #hbcGS”ÿ [¨ÿ E±þv°þ ¬¦þ÷”ÿ ]Œÿ # Ú{ /w -l W^Ì^P^‹a²Yo[VjUrSSÊR SÅQÕO–RERJU;V‚‰Ô„‡:‰BŽo• ” Œœ „ÿ ²¢ÿ ‘¨ÿ Z¬ÿ ݱÿ t³ÿ ì°ÿ “ªÿ I ÿ Õ—ÿ Ž ˆˆ )} Mtnpêmðm c‡X - #. Ô z ' † ¶ P DåÖ¨ Œ  ¿3®Lz?ï:”bÐX“ þ’ ý^!ý=$ý"ýF"ý¶#ý/$ý—%ý¶$ý."ý5!ýÜ"ýÔ"ý$ýw7ÿÓhÿÉÿgÿ}ÿ}ÿJÿmÿmÿEÿuÿ…ÿšÿ|ÿsÿ ÿJÿÿmÿCÿÿ~ÿvÿmÿ{ÿ|ÿ@ÿ‘ÿEÿuÿuÿ}ÿü'=!P ÄÝC  ì  õ  : Š k  ² ù 9 á } ð 9 ©  , ú 3 … J \ ` Ð D   ô } – ° [ Ð E  % ¶ Ö n  ¯ ô Í 4 ¢ Ž ½ Ð ³ š  ? ë O  { v ê ò   Ü ˜ S Ï Í / £   Y  µ Q 3 E h ˆ ‰ å qô Þ î F#g! ´!J   wÉ G e¡ e Ï! 4   R Î 9 e ‘ î  · 3 @ Ý š h ‘ 3 C  W  î –# $ £ X# (  ¥ Œ# B! ˜ ° ž& 9  ¸ ´  ' ,  ^# K$ g! e ×! Ç G  i   Ö! l 2 Ç Ù, Ø! „  h  # ß ·  M X À ¥  g" E' ¢% ë! Ñ ¹ “ 8 ~     À! ¿" ä Ÿ s" »    .# Q! T á ¤ 3$ ì5 {Ž«”–ƒŸ     Ȩ ªÿ zªÿ ]©ÿ –°ÿ ”¯ÿ å±ÿ èµÿ o­ÿ 0­ÿ \ª ˆ¥ ®¢œšË’“3‘ #Š %‡ ã‚«H~šÈ|ÝÎ’g k¢_¥F¬¯©€« N¬ ­® Q° ɶÿ *¹ÿ p¿ÿ a¿ÿ ¨½ÿ ³ÿ m°ÿ /¯ÿ %ªÿ ›ªÿ £ÿ h¢ÿ ×¢ÿ Òƒ çkeþc‰zkÿ ,¦ÿ ³þ ü²þ 3¦þ7ÿ ÿ  „ T Us øp >e ¾a |e ê`†\PZWbUõV»U0RÁSýSP×M©Q‘RQU VYõ\¡\ídÇeOc¡eäegjvjÝjÉo nZuÁx y ¹y :y ¾{ šÿ ½Šÿ ï“ÿ ¯“ÿ ,•ÿ ä‘ÿ®‹ÿ ´Œÿ é‡ÿ 7€ Ï|  | £| R|  { Ìy Ö| `| Œ} q„ Òƒ Ї ˆŠ ”“ÿoŒÿ õ—ÿ lœÿ 1œÿ f–ÿ .”ÿ aÿ ¯Œÿ ý†\ˆ $ÿ ÷Žÿ ü”ÿ 5˜ÿ e˜ Ë—ÿ õ–ÿ ´u /nLjfeÿejm×l>nFjk(h l³oâq rjsðpÐuUw˜x ycx µ| [} |Ç‚‡z‹¼ŠЉ¾ŠøŠvŒ2ŒMŒº~–c› ¤œ Wž Éž žÿ ±¡ O ‘˜ “š ˆ™ R™ Y”µ” /• ” Ú’ÿ ýÿ ´“ çŽ åŒ YŠ ßŠ $… ‚ â„ ¯Š߆M‹  ÿ |ÿ é“ÿ ó— Š’ ç—ÿ yŽ ì† y€ Wz uèu ªy+yyJ|Cz ÿ{ 1{ Ez 7y ÿx –} Š Ãy K{ óy øy z9zÉz õ !Š ‹ ”‹  ~‚t… ‚«‡e† æŽm™ %œ _žÿ r£ÿ î§ÿ ”§ÿ ™­ÿ ¡µÿ Y´ÿ 1°ÿ W«ÿ I ÿ €”ÿ ­‹ ‘ˆ -€  é À# ] œ # e! ©  ° ³ ä 8! # ú  Á" ?" I% e# Ü  ˆ  ñ é!  H ô  ì  o  ô  v É" ! Ð ! ¸ ú   y  ù  _ õ  ¹! í S  ! 8 Å  ý  à   ù } ž ¸  w# ‹" Z"  ú } „" æ<uvÁ!Ž6™6›Ô¢ÿ 8£ÿ ²¦I®ÿ .±ÿ ¯ÿ ä³ÿ ¦²ÿ j±ÿ µµÿ s±ÿ $¯ÿ `ª £ \›ñ™S˜Ô–¼1 ¯ m‰j|}‚ˆ~`~ }Õ€Œˆ ”“žÖ§ð§5§C©E§¬9± ³ÿ ö¸ÿ 5¼ÿ ã»ÿ š¹ÿ ²ÿ .°ÿ ¡¬ÿ ©ÿ ¨ÿ “§ÿ Ù£ÿ [£ÿ χ ÕnmgEg°zòŽÿ ê ÿ Ò²þ ø¯þ r¥þ 8—ÿ “Œÿ ö‹ÿ /† Ív El 2dC`Pbø_Ç[”X¯W#V¹TpU‚U‡S PQLNïQTT–W Zª[è^c eRfc™g=j¶måpÓqrMr Ñx >y ¼~ G|ŽyÓ| â€ÿ ø‚ÿ 7… ‰Šÿ ;ÿ }ÿ !ˆ …  ” ‚ ' T‚ €ÿ ý ç{ ~ ã| ã} ¾~ ~ ê‰ –ÿ ñ‘ÿ q‘ÿ ±–ÿ r—ÿ ,•ÿ *ÿ öŽÿ }ÿ · Ê‹ÿ ¿‰ÿ zˆ Êÿ y“ÿ t–ÿ äŸÿ #œÿ "•ÿ ±w špÇkÖeèeúkm?o«rj£i?h8m§mïsÚuuväyßvH{˜‚~Û‚[ }œž†Ö‹Š†Š‡†úŠëŽ~¸¿ŠmŒ#– •š £œ Ò  ŒŸ L ÿ } ÿ ¼ ™ — a• Д Ó— M– “ ”’ O Ž ˆ â‹ #Ž ˆ „ g‚ ø… ؈ !‰R‡Ÿ K ÈŽ LŽ ™ J• ˆ”  ÝŠ 3€ Õz Vsév Ýt Ùx €v Ét Et Ÿ{ x{ ƒ~ ~ ÿ~ Æ| wy r| Æw úz °yKz y  ‡ÿ òŽ ŠŽ ‡Œ „„ (ñ†½s‚2ƒë š /¢ Ô › I¨ÿ ߨÿ Ù°ÿ u°ÿ s²ÿ ®ÿ «þ 8¢ÿ •ÿ j‹ÿ >‰ % EwZq´o2lg1\ Î= œ"Ž ÀŽ´ d  O Ç ç¢¼ z! À3 (J¤>°5ÿBcÐY!þ"ý"ýï$ýï%ý"ý•"ý"ýÿ#ýþ"ý¾!ýç!ý$ ý§!ý'"þ6ÿ"hÿÊÿòÿ’ÿ’ÿŒÿ“ÿÂÿôÿ“ÿ~ÿfÿeÿnÿ”ÿ’ÿ}ÿCÿ©ÿCÿzþ«ÿøÿ¡ÿBÿ|ÿ©ÿÿ¢ÿ™ÿ”ÿ” Á!úG F ã ½ ï T ' 9 K S T ä ' Ó Ã D  ’ # ž j Ž   ( j ¯ } " q ±  ‡ L Ï & ¢   \ H î –  • õ U y f ó +  ê A s € Ù » l  C Y Ž ! È '  f ^ P  — é : c © á ‡  I { Æ . $ ÜÐ  - ±i   æ8 ð h œ Z Ô é › Ÿ ‡  î Ç à ¯ 3 v ï ¶ “ L Ó @  æ" m q! ¢ Ï  =" =  ¢ \  º  r ‘  m $ ß  ! ˜# è# ! Ö Ê$ " ! 2  C  ! < Ñ ™ ã u ô i Á ø  $  ž   ã  =! z 6 ˜ Ë Â ž Ì  ¢ ® T  - À" J Ë 5 … 1  È ¿! ñ s ”! o – K 5" Ö  Ø  o 5 A$ >×€µ‘ž•c  \šá  Õ¨ÿ õªÿ ¼´ÿ ßµÿ ·ÿ ¸ÿ f¶ÿ ¨¶ÿ ¢³ÿ ·« Ǩ   ´›—™ ”Ô— ë– g¸.ˆ+ƒ¾–|ë|œ€„ˆ ‘“™qžݤâ£ö¥ú¤Ë©…® n´ ·ÿ 4µÿ ò¸ÿ 0¹ÿ ¬ºÿ ¢µÿ ï° ¯ÿ ¥ÿ §ÿ ¦ÿ Y£ÿ d ÿ Y m¾gøhew 5ÿ ´¦ÿ ¯ÿ S­þö¥þô—ÿ ‹Žÿ 1‰ÿ µ† Í| âl +døc >aA_—\–Y'WcT‰QgWìU…S“QIN&NÝPSQâS%WY4\\^Wc\cógdaeœgk´o!qst©wx,|d~{Ž} ®  Ûƒ ‡ÿ ÷… Àˆ Àƒ „ÿ („ÿ eÿ p Ù‚ÿ jƒÿ ¼~ Û~  š€ ‡€ ” Ô Ý  Û„ àˆ  C “ÿ º’ÿ ì ŽŒÿ {Ž ÄŒÿ ³‰ ‰ˆ F‹ ÿ /Œÿ ¹ÿ ª˜ÿ #šÿ ¡•ÿ °| ph7c0fgj‘n;oénøj§k}h%nVqoºu§w–uHz {Ï€:‚n‚€k‚ †ˆŠRˆˆ‰ˆŒ2’M•F”5”ó—ïšž Ö¢ Í¡ L¡ÿ t  Œ› š (˜ e• Ý– M“ ד [” Ï‘ J ê Š ؃ °‰ … q„ í~ F í„ eРɉˈ ˜J‘ L‘ ˆ Б –ÿ «– Ž U„ } U}v 7su7u !t Ôu s ×v žy S‚ ƒ h~ s~ ©| «w y ìw Wu W{ ¾z{ v~ †ÿ ùŠÿ ãŠÿ 0‰ L € & ‚ d…؆ F‘ ™ è£ W¡ ¡ ¯ÿ ° …´ÿ g´ÿ ˜°ÿ @ªÿ Á§ÿ N¢ÿ "—ÿ øŒ Š b€ çx u!pm{f´] ]GY$ !ÿ  0¡" - @ ç8$î  Ò4µKéA>;AaìY!þq!ý–$ý7$þø'ý."ýM"ý~"ým#ýu!ýU!ý ýÎ ýýÆ ýä6ÿ£hÿQÿ¤ÿJÿ˜ÿCþ¶þ þÇÿ’ÿ£ÿœÿŒÿuþÆÿ°ÿEÿCÿEÿEÿ}ÿ™þ¥ÿ©ÿ|ÿBÿ˜ÿ©ÿ‹ÿ|ÿDÿª ´!a"E+ > î ¡  ‰ † þ ´ ÿ E }   Ï  ß —  Ð y ì c î C  ¯ ]  p  … c Í ä « é # [  f M 9 î o 4 ¾ ã ü  k | @ … ó Ñ ) i Þ È Ž h b ì Ž ‰ ¥ ³  ° w Ÿ w  ¸!@ ? º L ² + ó 6 Œ!  z 0 7 s ­˜ Õ ë â I A +   3 |   ³ » Õ Í £ ? Â Õ ¼ ’ D l è  % L ‚  Þ - î  Y Q »  W  ½! ¨ ý ‡# ê! ç" q  2   í 8 ¼ ¬ W × ÿ ~  Æ Ä © ª ? > Ê# õ { í  5! 3  ™! # V ½  í  >   T  « ò  ,  ½ )  ² M  = 3 À ?  `   ö  v å! ~G΀‘¯–Rš: 0¢ Õ¥ÿ ·§ ªÿp®ÿ p¯ÿ f´ÿ ]´ÿ m´ÿ ¡³ÿ ç±ÿ (®ÿ b®ÿ ¶«ÿ ¿¦ Ü¥ ç¡ ¬™ f— ´ g‰ †ƒÈ‚‚\†‘Œ)™ÅŸƒ ”¤ã¬¢ð§#©¡² ´ÿ 5µÿ k¸ÿ o·ÿ /¹ÿ $½ÿ '»ÿ R¸ÿ I±ÿ Q¯ÿ Ƨÿ §ÿ P¤ÿ ä§ÿ J§ÿ —ÿ jo·h|f t Uÿ >¡ÿ X¬ÿ ‹ªþ¶ÿ Æ“ÿ ]ÿ å O~ q €f 0_‹a¹b í`Z™WžVjVV°TÈUROâOMO[RŽR#TIW~Z2Z]&cabYbÆf†h@iðm(oXp˜sstu¡wcz {¢~)| ©} € P… È…ÿ Ý‚ Á„ÿ ÷~ÿ °„ÿ µ…ÿ „ÿ ·‚ÿ kÿ 1 Ž Õ Ö~ Õ| '| ´~ _€ "€ X~ ¯„ † Pˆ Uˆ ¥’ÿ .ÿ üŽÿ ºŒŽ ‘ÿ -‹ÿ ò† –ˆÿ ¹ JŽÿ (ÿ ã˜ÿžÿ \—ÿ :| ënlfubªgÉjŒo½lMfkfgšqÆr|v:uèr–pÆwy{ã‚X€û}£€„‰ÌŠÈŠ ŠTŒ†‘þ‘ý‘û’ù˜r™ž UžÙ£ÿ =  Ç¡ ÌŸ &—™ ­›1™ +“ Ý ×’ T‘ “ –Œ ÀŽ ]‹ ìŒ W„ âƒ ë… ª„ 숗‡ ˜ˆщËÿ|ŒP‘ –  ú !Ž g‘ !ƒ 2 s ¹€ Fxsët Ÿs ’s v æy 0w ý{ < ñ æ€ }{ sz rx sy ox €u Ó{ ¬| L€>ÿ1‡ Œÿ 7Œÿ â ”ƒ 1‚x % tˆ Ÿ– —œ R*¡ Ѫÿ ±ÿ f³ Jµÿ ܲÿ °þ 3§ÿ ¢ÿ Ÿÿ ‚”ÿ 7 Š '… +| w‘s.jªfµ_(O e%"#7 ó0  ' tr d Ö ø ´" 4 µKá?Ì6Á^ÒYÓ!ýž!ý~$ý†%ý®'ý"ýí!ýõ!ýM"ýþ!þ ýýNýnýý®6ÿ¢gÿJþÎÿ’ÿòþ¯ÿ¡ÿ¨ÿÑÿ"þ.þßÿ©ÿ¨ÿCÿDÿÿËÿšÿûÿ±ÿ‹ÿLÿ™ÿKÿxÿšÿÂþ+þÛþýþ´ y Êà »THC Ó É s j â  m  ý … ˆ ” ‡ n Q Œ   © ‡ Î ý  ¾ ° „ ¬ þ É ? Ö  Q  Á + Ö è " "  ,  ¿ ã Ý T # W ª Ü ª û Y ô [ Ê p Ê „ ; Õ S † n Õ ‘ » À ó    æ õ \ gC‰¤ ¹ | [ ÿ ø ! Â å  ôI l E L ¥ Œ ] M E g  ½" E! w Ì Ö À ÷  h  8  “  ¤ # U ƒ £ › Q Í é | × & á Œ! Ò! ¤! ! ˜# " Õ" ¦" °! ´ S ò ? r o  |  \ ß X , ä! # ý( Ì a Ü m ¿  Q  d ÿ! .!  • î 8    B ¯" á! ) ª ƒ" ³" ¡ „ 9 ý j 5     a " | Î ò  O" ¡H⃲’­•åš…žè¡å§ Æ¢V¬ÿ ²¯ÿ Ȭÿ Ѭÿ Ú®ÿ ¦²ÿ µÿ /´ÿ «³ÿ  ¯ÿ y°ÿ 5«ÿ ÿ§ %¡ ë— ¬àŽ ‡@¥‚*„TˆPŒƒŽ•–ý L y ù¤:¥F«å©e©Ô® ϲÿ ö·ÿ ¢»ÿ Ú¸ÿ ºÿ 7»ÿ P¼ÿ ƒ»ÿ U·ÿ ‰¯ÿ ªÿ P¦ÿ Ý¥ÿ è¦ÿ ¨ÿ žŸÿ ¨tohdQsÚŒÿ úŸÿ Ыþ ¶ªþ +›ÿ Œÿ Šÿ ðƒ Æ ‹o Éf ºc ú^[a8\¬Y1VìW¯TÉSPSSQQÔQKPLNpO¢SaV X?Z¬^$ceøfÿh9g»k3j¿k€mýsxtõtÔx"zyñ€~ -z  Ë $„ ƒ‰ÿ ´†ÿ $‚ÿ êÿ pÿ =| ˆ€ÿ ¶}ÿ î} Ù ­€ Ê &€ € f ¤} f ! ê… U„ š… \‡ Œ I‘ÿ ­Šÿ ÿŒÿ :ÿ ûŠÿ ÿ„ fÿ ªˆ –‰ ÎŽ Õ’ÿ þšÿ e›ÿ µ œ{ *o l€hcýd)iÃq|mÕi,eVhElq±z“y&zœvPu†x¿}˜ ƒH‡B‚†I‹‰ˆ_‹™Ž¾{‘fÿò’d“&“^•Q™ KŸÿ 6¢ L  æŸ Ôš Q– o™ Õ™ ј X• jš ž• “ ‰ ™ˆ ˆ qˆ ý† æƒ °ˆ \‰ Ñ‹  ŒV‰ mˆ ìŠ £ š– $šÿ <™ÿ t” (Ž ( ý} vzÐ x‘s äw Ds u v »t ÷w ñy0| ë| Œ ~~ rz  v ²| 0| /w y ¼z ì}Ø€ÿ 1ˆ …‰ €Œ Í‹ œ† f Å Gƒ… #  &‘¨Ô¡`¬ÿ ç°ÿ åµÿ ¨µÿ §¬ÿ L¤ÿ À¦ÿ Á£ÿ žÿ V˜ÿ ¤ Sˆ ؈ .| w¯rrf Œg^S }'   7 T ¯ A % B » — ¬" G4œM3?û7ØcUY ýgýå!ý !ý9#ýu ýKý’ýÑ#ýëýÝýjýQý‘üîý¢4ÿâgþ:ÿHÿ’ÿ¨þ¯ÿCÿBþ·þ3þÚþ·ÿ{ÿCÿšÿûÿËÿÄÿšÿ›ÿCÿDÿŒÿKÿ‹ÿIÿ¡þ‚þ:þÍÿÀþÎ! !#Æ ˜ú$ ?Œ 7 u K Î j ñ  ó á ? À ¦ é °  ÿ E p ’ 9  n ™ ¨ o L  Á ’ k § ÷ â › , Q Ã Õ P ú Ê –   9 ” ó P æ :   ¦ å  â Y 7 ¤ † 9 C ù  h v ˆ : ÿ$   Ý  # ª î ¯    F û«  ­¢¹!p! Û  ù È ] ™ W Ä   ! ±  Å Å ˆ ” a ä e  ¿#M : @ 6 K ´ õ ä" " · T ˜ ø › p Ë ¢ i d J!   ó" À" †" (" &! Ÿ  .  Á ø% % ¢! E h! O Ž# u ’   Ÿ C B £! 7 Ë á 2!  å §! ç A ­ K  > ÿ ¯ ò i  G ò @ ÷ É G E @ · Ç o  o K ™ Y Q% %N…'“'–œ™Û=¢-¨§ÿ ô«ÿ ¥¬ÿ Ø©ÿ (­ÿ ¸¯ÿ m­ÿ æ­ÿ ô¬ÿ ÿ­ÿ *«ÿ ýªÿ .©ÿ »§ f¦ã™¡þˆÑ‚o~9„á“—”—•%–m›ã ~Ÿwžõ¡·§+¦ͨ?­¤®²ÿ p´ÿ õ·ÿ ä¸ÿ š¸ÿ ß»ÿ Ê»ÿ “ºÿ µÿ W¯ÿ —¬ÿ ¨ÿ ›¥ÿ §ÿ ¨ÿ #œÿ àqvfbd‹w <Œ Œ™ §ÿ ™¬þ |Ÿÿ ÿ Œÿ ä‹ÿ l‚ ›p Lhpaf_û`H^ÑZçUAUPTZSˆSÈQ®QrNFO^NjO2QQ»VWXZ‰bêcTc€f:hümoqs(wluvÚ}ƒ|…ƒ ï Y€ Î} M‚ Oƒ Ë€ • €ÿ ,ÿ ;z Šÿ 2€ÿ | Ó{ «~ /€ Ø€ € ƒЂ \‚ àƒ "… Û‡ ‡ Š… H‡ Š‹ Uÿ 7‹ EŒ ň ‰ ‰ Љ Òÿ ûÿ 4‘ Ž Z—ÿ v›ÿ ­—ÿ è Ón³h˜g/e±eÚjÈoúrzh{h†j~i†qät–wezYy!v«z9|o‚ˆƒ…;„ú„ŽˆU‡‹;ŒäŽÚ‘R—‘õ´“è–´™èPžQžà¡ ìœÒ› G ›œ(˜ï™ ’™ — S™ ‘ K‘Ø ‹ Š Ð‰ [„ èƒ Ÿ† Uˆ æ Ô W \‘ÿ ù‰ e‹ å… z Ú• ‘ _‘ eŒ à‡ (‚ 3~ Cy Ìu nx y‹s s Òr ¥x ­w `v yx h{ ¶€ (| >y ‘z Åz x ƒx x Ez ¡{ Õƒÿ µˆ ‘‹ÿ 4Š É … ƒ _ {ƒ ìˆô’]’~“2ã©ÿ ð«ÿ h°ÿ ¤´ÿ œ³ÿ •¦ÿ ¤ÿ £ÿ P ÿ ˜œÿ á–ÿ î LJ U† î~Àtirînjœ`Z>- e!ã!~¨!  uâ ´ÂïäE º! 4iJ1?…6ÿåcVÜþýý¯ý ýÌý›ý£ýê$ý¯ýýµýÄý|ý<ýv1ÿºgÿŒÿuÿÿÿ‘ÿ™ÿJÿÿšÿÐÿøÿuÿœÿòÿóÿ“ÿDþÿÿ©ÿ’ÿ“ÿ þ®þ¾ÿ«ÿlþ·þÆÿ˜ÿ©ÿÀ Ê&Ã!Y# ´ Î ›  ·  !"  „ Õ ! " / . Ô ~  ( É K 7 ¶ &  Ì  \  ¤ ª ¬ S Ô  ”  e x < ‰ ‹ ” D  ²  • \   Z ÙF  [  ˆ ·  + g ë ² ð   i ä 8 q | ¿ – £ 3  p ñ Pùí Ó 1 . % + Ìh ¥ K! õ 4  ¼ ÷  ò ¡  xâ ]   ! Ï" +  x q ¹ k 4 f - C Q S ›  J è ” # ! «# a! ½  B  N Ü# K# {# ™  [" '  ™" "" H  Ä S  Y ­  *,¶# t “$ Ó  # c# È# Å ¶-0k  ë  ƒ! T) ¸ û h  i& õ Í T U ¿  ›  ê ñ  ù  > º Ë   Ì j M ò Ù p ± n * > ƒ Î& QÇ‹†“ì—žœ9œù¢"¦ ‡¥ Ï©ÿ ©«ÿ Ûªÿ ¸¬ÿ è°ÿ ¥­ÿ *¬ÿ `¯ÿ ­ÿ t« O¤È¥ …¢ÿ ´  V”ñˆ¢‚6ƒÀsˆ¤à•¸˜÷—|˜4›X¤ž¥ž° Ø£Þ§Ò©ñ®æ° Ö² ƒµÿ ,¸ÿ \¹ÿ I¸ÿ Šºÿ ¸ÿ ³ÿ $°ÿ ã­ÿ -«ÿ ݪÿ £§ÿ Þ£ÿ ^§ÿ jŸÿ êtÁi”f | 1Žÿ 3œÿ §ÿ §þ }˜ÿ á’ÿ vˆ E‡ L‚ Ýp Óg Gc ¾^j`Q_Ü\]X{XsV1U†TÍQšQ£O¶P/N*OýN~PÁUÚZº[æ\_bÑgb cúi¯k$mÑpÙt(yš|ñ}©~j} á„ §„ $ d L„ÿ 3ÿ ü} Ú„ÿ lƒÿ ˆ~ÿ æ~ÿ .ÿ !~ÿ t G Ë} Õ… ß„ Ø… ƒ ‚ Ó† ^‚ ¡†  † L… ›„ ›… Š ÿ ¸Ž ˆ g‰ ’‡ ˆ \Š ! ”ÿ {’ÿ v“ÿ «™ÿ nšÿ 6œÿ ¡– ‚ Írîf%d˜f¦hÝjUs¯s‹lÂhÕl ÏŒ Êÿ <‹ ‡ Æ… ^ƒ k‡ °Œ "Œ ˜Žÿ ý Ž [ YŽ ¦ ¡• š‘ Š † e =z x{ …w VwsewŒt Ôs Qu ´u s üx Äz õ{ áz 2w èz Ny Ãv Ív ‡{ óz y ÷ H‡ÿ +ÿ )‹ÿ *Žÿ *Œÿ ·ƒ K‚ Ø‚ë„#ŠÒŽ-‰ˆ•g™ê¥ …ªÿ l¬ ˆ°ÿ å±ÿ ž­ÿ ™¤ÿ §ž Œÿ ¥¡ÿ Á›ÿ k—ÿ ëŠ O‡ '~@rqsèmÂk›aÎ\š5›#!Ù!úg[ ™ ë Ä  C  O7Ië>70b5VqþYýÕýUý.ý$ýôýûþ@ ýËýfýþýRýCýÌý1ÿâiÿKÿKÿJÿKÿDÿuÿDÿ¡ÿAþÞÿ£ÿ™þÖÿ{ÿ“ÿøþÿÿšÿJÿÁÿòþÎþÝþÎÿ‹ÿ©ÿ°ÿ ÿPþ—þÏ %V!HN8 § ï ð O ž  { ô  í   ! y ä 3 Œ ! Þ e m < | |  6 » q u ; ô £ % € Ì  E ® â Ü ® P    ÿ ° pï  Üx ø þ È  L  ý Ý ' ½ Æ “  ¦  < w G É ¾ @ ÿ à D ¸ _ Þ ‰ j  ¬  | . ­ Ê ª ¥ å È < ¾ è  æ Z , õ ú ¿ +   M  $ ë ˜ × ô ß ó Û Þ Œ ‹ ª ø t â t B 0  Ú Å! Ö  Q   í" / ü  z  ì  » @! ~  Ú  À ©! C! 7 ÷ ¹ # û" *1 , )$ ‚" Ñ# ]' ! ê ] ¢ Á g%  Y ð ¶ Ã ® h M ‡ 4 ó z    k ¼ Ú C { y · i ¤ · | ¤ 3' {Vîˆe–Ö–œâš¹¤ Ù©ÿ u§ ¦ÿ ¶¥ÿ ´¨ J¥ÿ ¨£ÿ *«ÿ ð¬ÿ 8¬ÿ ¯« ¨ § ¤ £ Π˜»„ú‚õ…zŒ³x‘왘&˜+™¤›œ†žsžØ¢ ¢¬£ ¦« ±B²J·ÿ o¼ÿ оÿ M¾ÿ ½ÿ L½þ ø»ÿ ‰¸ÿ Å´ÿ ç®ÿ *©ÿ Z¥ÿ ¦¤ÿ .¥ÿ Û¦ÿ ` ÿ ?x–i¢hÊ ÚŽÿ Þ›ÿ Ê©ÿ @©ÿ P ÿ ÿ ê„ £† D€ 7s _g ëd „]©`‹\»ZéWýXVpT¿SQSÞNpOÊR°SPZP#QíT-W…_ˆae fgAi¡lÕl’pSsˆvÏ|u~,a~˜â„ \… à„ € Û‚ ’†ÿ ­…ÿ ³‚ÿ ª€ÿ rƒÿ \ÿ -}ÿ 2|ÿ »}ÿ éy `€ lƒ ¹… ä… ‡  Š Ž ×† ‡ QŠ ‡ … „ ˜ˆ H‘ „Œÿ õŒÿ ~ÿ :ÿ ôŽ À I—ÿ h—ÿ d—ÿªšÿh™ÿ (’ Ÿÿ "–ÿ *ƒ üsifòdïgXi–mJqÂtl·hÒjFjÃqãuitòs¤s”vUuy~󅂃·ƒ<…¹†̈ŠÎU‹ªp’÷”v˜å˜4š$šÿ 2›  ÿ {Ÿ Õ  Ü ž O™ F™ÿ ¸˜ › ›› ]˜ ”— – Ž”  T‘ “ÿ vŠ ˆ TŠ ‹ “… +‰ ¬‹ †‹ ÓŒ ¢•ÿ 8˜ÿ 4’ L™ÿ n– B Î… ` 7z *y =w Ïz 1v ‡xx >u u s ‡t Cw Kz v Ìy ¿| y šx Ey t v Gx þz ã‚ÿ ¼…ÿ 6Šÿ /‰ ŠŒ Êÿ ¡„ — ¤€ ü€ úˆ ‡I‹^’u™ÝœÜ£ Ä«ÿ ³­ÿ ê®ÿ æ®ÿ ˜¬ÿ a¦ÿ ²¢ †£ÿ  ÿ ç™ÿ ·’ÿ »‹ i€ üvßujn~kœf^áAW#C#! . b … Ç ª '° ¾J $ <K*=D3ÿì`ÑW2þºýNý%ý¶ý ýõýóýŸýÄýýÔýýý“ý†ý3ÿMhÿJÿJÿBÿ{ÿ«ÿœþ¯þ§ÿ›ÿ²ÿBÿ±þ¾ÿLÿ±ÿòÿÉÿ‹ÿEÿªÿ›þçþÕÿÀÿ©þÇÿ™ÿ¢ÿDÿ›ÿÈ í$n"Šu w > ó  X Q Å ‘ E ž  J Q Ø ¡ õ — D =    h  ÿ ’   Í U + Ÿ = š ½ ¦  ¶ !  b ö P  ô ” J  tµ e à ٠½ ` p w Ç *  ? v ‚ µ  – B g   , P i Ž š É Y ‚   ð ì õ   ) íð « |  Ò    ¼ ·Éê ŸÂ ¾ 4  ¥ ü  ß ø ! õ  µ §    C ? ƒ ý ô ¹ â# Ž ¢ Ù Ñ !   Å  ‘ e! ! I  S! ­# ô! e f ! g  ¤# É$ Y" ! ž! $  V# ÷  B ¿" Ñ" ³! š  š  r ¸ Ù | 8 Å c ú  Ø  6 à  ö! N  Ž  , ¼ à V G Œ  ³ h  ª Ã è ± ö ª · K) X/Œ5’É”;˜˘V¢ ?¥ Õ¨ÿ ?ªÿ /¨ §ÿ ú¥ÿ ê¦ÿ é­ÿ x®ÿ m°ÿ U­ÿ n«ÿ ø£ –¤ g¢*œZ–æ†ýŠgŠéŒëž’”Ü––˜›Å›ºž±ž  w¥ä¦ ¨ M² Aµÿ ô¶ÿ ý¹ÿ s»ÿ ¡½ÿ ¼ÿ ½ÿ ƺÿ ¹ÿ ²ÿ ®ÿ š«ÿ Ú¨ÿ ¥ÿ £¥ÿ +¥ÿ $¦ÿ Þ‚)i£kv Éÿ ãÿ ͨÿ K®ÿ Ášÿ Öÿ 7† Òƒ !~ Þm ÑjbYab\¤\fZÊYX(TÐUsT4RPQÛPWMiMgPlVÙZeaZeîg'h‘fºi#j\j«k —m_v yU}Ø€ g‚©ƒ ä„ € ¦€ ‚ÿ ú†ÿ 7… Ä„ÿ c  I‚ÿ ÿ‚ Ê„ÿ ¯} †~ œ‚ r‡öˆ Úˆ  ‹ ÝŽ –Ž ‹Œÿ q‰ ÛŠ ˆ R‰ CŒ Ìÿ ’ÿ¯ÿ¶Šÿ °‰ÿ½ÿî‘ÿ 3ÿ ¹˜ÿ ª˜ÿe›ÿâšÿ_˜ÿe—ÿÛ ÿ•—ÿw{ ’qÂlŽjRg+kŽm×qÆqiÄm‡k“mo’ÿ ð‘ …Œ èˆ â‡ c àx Íu x (s y ux ét p És t Nu óu Cu ¶u ¸w {y 4u oy Æ{ Çx Ù}Y‚ ï‡ÿ 9Œÿ ú‹ Šèˆ ߉ } ê~ d{  䈠“ ˜à™5ž  ’¡ § ­ÿ ¶¬ÿ X¬ÿ J¨ÿ ¥ÿ ^¢ÿ »™ WŽl‹ m‰ ¥‚zít:lqm_g%_V ("f a ´ ¯ K ñ ¡ 6 Õ Š  Y  K0Gâ=½7ÿŸf[ÔþJý¶ýeý+ý ý6ýlýüý•ýýýÝýý¦ý4ÿvhÿLÿúÿóÿŒÿ‹ÿšÿ”ÿDÿ±ÿ¢ÿÿ£ÿ£ÿ¢þÌþ$þ+þ·ÿ˜ÿ¨ÿšÿŠÿªþ„ÿÐþÆþÃþÉþÞýGþ( á#$"w#Á   a « ü Ø A 6 W  ” 9 D ) ´ '  ü ö   - ê Q  ¤ © ù B á ¡  Í … ˆ å é Ù ü † ß Í Û   T Ó· x  H Œ Ï v •  þ { ä ¼ À § ‰ ö <  ð  \   p y  ¥ x( ¤ ç M §  R r h Z Á A  Ž L ù ä w gÜH¸ Å ô r  )   ‡ ` ú   í  ÿ B ‘ £ Ó ì } @  â ø Õ F œ P ¯ † ] Ç A Û# ñ l æ  d  A D Ô Þ   û! h H ×  % s  è ” Ã" Ï   N x  – ˆ – y ‰ ù ¶  Ü  s æ ¬ õ Œ! ^! È  R  Ã! ; t  s j [ ² x y á! Ù é' 8[O‹ u”(’ í ¯˜ _¤ ¦ÿ ¸ªÿ k£ÿ ²¤ÿ ð«ÿ (­ÿ ,®ÿ b¬ÿ «ÿ •©ÿ Ù«ÿ S§ÿ i¢ÿ 6¡ Ê÷™ò•‚‹éˆæ‡âŠÙ”˜7—ý–œ¾Ä å¢b¤d¤.£ Þ§ P©ÿ <®ÿ ¡´ÿ »ÿ ¾ÿ ѽÿ •¿ÿ WÀÿ N½ÿ Q¹ÿ Ôµÿ c±ÿ b¯ÿ \¯ÿ ©ÿ b¢ÿ0ŸÚ¤ÿ ¬…ocj¿€ ÿ î™ÿ ݧÿ ¨ÿ Ÿÿ ‹’ÿ çˆ Z† š} {o Öh ¹d f ~bÌ\Y÷YMVLW±UŠTIQªRwP±OwM"L·NsOR§YÀ^ècÂe„fChújhj!jªm%o•vÞ~û‚u‚®€±€ ¥‚ l‰ Š ˆ ׋ ˆÿ =„ À„ÿ sƒ „ ‚ R„ € Ë J„ L‡ Õ OŽ ” Kÿ ´‹ ׈ ¢„ v‹ V“ÿgÿ ­Œÿ ½ÿ é”ÿm’ÿìŠ ”‰ ’Š SŠ ÍŠ L‹ Ö–ÿ ºšÿfÿm›ÿ"˜ÿ-—ÿtžÿ -žÿ fƒ >sƒhwd†gïišnNn\n”gJgÅknEq}s|q¨tow|vywÓxÀ}«S„Žƒ‡†ކˉTŠ„”l’°–ù‘–– —…šœÚœÑ Wž ’ž œ š Z™ — – ” Ì• ”—‘’ Æ’ — @“ÿ ý“ š‰ ¬‹ ô ­ ¬Š j‡ µ‰ wŽ “ Ж “” U‘  Ó‹ ‡ â~ } 4| * 9SÀ€ _‘ב ~— í›0¤p¨ÿ ¶­ÿ à¬ÿ -¬ ¬ÿ ò­ÿ ó°ÿ ®ÿ ¤®ÿ ™²ÿ ±ÿ ›°ÿ e«ÿ ñ¦ È¢ ˜°–°•\–£–Ç•E—e˜Ý–˜&žB–¢ôŸû w¢n¥é© ž®ÿ ¾´ÿ ܵÿ ^¹ÿ ¯¼ÿ æ»ÿ !¹ÿ ©¸ÿ ï¸ÿ ¦´ÿ á³ÿ m¯”­ÿ l§ ¢¯¬]Ú› Ì{¤jŽhw wŠ †©ÿ ΰÿ ¬ÿ #Ÿÿ ª—ÿ `ˆ Ÿƒ à{ Šp lþgÉcÓc—^û]~[„WÜV–T‰TSO¶LTLÌMüKNhQaU"Z´`‘`l_îb\eJg‚jÂn©jõj‚lòt/yç~X„ƒ5„ ¦‡ ˜ˆ gŠ ¡‡ á‡ æ† ¢Š Â… Oƒ ˜„ J„ ç† Ñ† †‡ YŠ ©ˆ è† ò„ q… rˆŒ ¢˜ ×—ÿ 1‹ ‡ P ÆŠ †“ÿ 7–ÿ dŠ ÓŠ ,Š ¸m e [’ ä“ ‹’ Á–ÿ ò™ÿ 2—ÿ ð›ÿ vžÿ ä… sTgMeHh@i>h´h„j~he$efh^n’rst/v¦tÚxæz—~ðQU#„âˆÔ‰ŠU‹ŒÍŽÏŽ–›Ò‘•°˜v˜î™•›T𛛥š.–– ]•!” *’ !” š”$‘¬Ž ì ÖŽ l‘ Y ¨ u p’ ‘ a’ a’ +Œ D‡ œ” ” ã’ á“ Ë ]€ € ÿ‚ 3w &v Bq ¬u “s ìsèq -r Xq %q ow v v Nr ™p ¶r èy Iz ãvÍuKvâ{  )† ìˆ Š Ÿ† ‹‡ …ÿ ¸ š}û„ ‡4ŠF‘’N•”•A—Ä¥ë©Y¬c®“£Ûš Õ—¬— ¥ 4ˆ îƒ …ʃã©y¼q›qÔlµe°[08Ë@  Œ ž 8 5 e R £  ÔÊ' æ;sK <;7ÿ“efWòýüý¥ýý”ýÈüÆüžüåü¯üïý)ýðüõü÷ýè3ÿhhÿFÿKÿ¸ÿ°þÞþÍÿªÿKÿ þÏÿšþ·þ>ÿúþ§þ¶ÿ£þ%ÿ˜ÿAþÇþ¯ÿóÿ‘þÆþÖþ£þ·þ·þÿþË%ú"Z¤ †Èº3>v}’ Ç f 7 " _2  # Ä# % ˜ ~ § §Q¼šÂ =rà19Z€ , t œŠö‡!©Ø  ô ­â û s é ò l a € % â Æ # ñ  ­" <$  ˜ j ø) N$ \" È Ö  š ú ¹ Çc ?r!]­£ÔþC w  Å"9%Š%ƒ& o#¡!;"F"q&{%""¾!!X Ÿ"+!Œ#¼"ý%!# ¶# {! Ù Š  G  [ m æ : ö £ S   "! Û A ^   C ‡! = • Í  „  Ÿ# O# S   ”  &  «  ì  G ¥    ) D ¿ ô ¯ ß  Y  F  5 Ë!ž } Œ ô ¨ © @ { ‡  ˆ 1 Õ -  õ" — Å ^ í ‰  ² # Œ e á N ^ M › ² ‹ ? ¼ ‘ ‡ ÷ z  H( WƒË– •’™ôž¥ô§ ¦ÿ ô¨ Óª ª ˬÿ ¦­ÿ ®ÿ Ö°ÿ à±ÿ ë±ÿ °ÿ *¯ÿ .ª ¢ ž›²–¡•|˜v™zšZ›•˜u˜ð˜ª›šYœAžp¡ë º ú¥œ¨ÿ ¾®ÿ µ±ÿ ,² ȸÿ -¹ÿ ´¹ÿ ë¹ÿ 1»ÿ ž¶ÿ ±±ÿè¯@®Ç¥Ф¢ŸFš7ží˜ÿ o{¹iEeó{  \ªÿ F­ÿ V¥ÿ kÿ }˜ÿ ( †`|Úv pgˆbä^ðZS\<\nY¸VåUwRàOÃO¦MLËMOP4R¢VÜZ¿^ù^xcfi{gÖgÚkÇkFm nÂpv¢|‰~F;€„|† ©‡ ¹… è… m€ ó £ƒ Ú “„ † 'Š  U‹ Y‡ 2ˆ «‚ »‚ {‚ ƒ ‡ G f• Д  ZŒ #† d† g† ó“ ˆ”ÿ ù [Š Š ¾ ¦Œ ò V‘ ‘ _Œ +– ž˜ÿ ?˜ Λÿ äƒ ÆpTeƒb}dfgFjùlªk»h×fQlpFq5rÇtoOs;u$wX{Ä|xÝ~ºƒ †\‡Ú‹‰¤‰ Œœ‹äŽ“”¢•Ä—¿˜5•Û˜›š©˜ –(•š˜h“â’*”<”~“„”»“x‘øŒ þ½‹<‰ËŒ@Š^ŠK‡" t‘ ,‘ q 0Ž º’ l• þ— Í …}Ø}¡z fu +x p «r»rkp ¨q np4qnk ûn óp ¼t o ¹m w,|ax¾pSx|~ O„ œ‡ ݈Y‰ÿ ? i„ ƒ Oƒ ã5ƒ¶ƒX—™ݘ`¤L¨²­o©kž)• -“ Ÿȉ … 9ƒ ˆ;‚hyxÐqÜmºmne}T®> ¤ \ Ù ¹ ä ) † x ý · ¯ ›<SIá;…2ÿh \Vý¥ý+ý1ýÙýü¶üžü.ü>ý9ü7ýÑý0ýðý 3ÿpiÿÿ¡þÿþÅþ-þÅÿJÿDÿŒÿ¨þ½þþ6ÿ±þ¿þÆþÔþ$þ&ÿ þ´þ$þþÛþ¼þµþÔýþÍþµþÝÖ%d'! O F° o þP  ýˆ È  !t!2"i!» Ú ŽÖ¨¨# ×èu XbÍgû #U"9!ÿ   ¯ # [ L † û ™ A Ç Ó [ õ Æ  ¡    â  ’  Ž!  < À  ¡  ! < % ˜  N ¯p  – ¯ j |!/Ý !p$ K& |& j'%ù#j$¤'L&ò%$#ë#D!˜"´%'!"¡$%@! * Ù# '" ý   æ" @$  J  ñ   ± E ž r  ›  2! F!# :" $ ¾# b$ {  ÷! ’# } ×# ½  ¤ á * ÿ  õ –!   3 8 Œ! "   L t  A • Ñ d á u! Ð g u  ¡  @  2  h Ì j % —" j Ò  a! ± ‹" ¢! « E C  q ƒ <~ Óƒ 7Š l‡ º‡ :ˆ ² bŒ - Ꭰ¬ˆ 8“ ’” Éš ÿ 5ƒ oãedÜdXdi¾l®mžlókYg÷gémCrr·rÄpÑqKs¥xCx‚uš|ó„"‚|ˆg‰$‰¥ˆ«…ñŠ,Œ,‹¡‹«’Ô”L“¾”2—î—Ù˜h˜p–.–]–n‘ô4‘þ”ª”´“ï”C‘¿p‹B†Ú…ØŠ‡6‹ÖŠ‹ ‹‹†è üˆ ‡ u `• ‰ ´{4{/{ks6qÇsþrTwñuqu ín×nÄo·sútþl æljµl‘qWq—pt³txú‚ î‰óŠç… Ø ¨€ÿ }ÿ 1ÿ ßw ÿz É{Ɇj†e’ ™Ù˜d–Ù™®¡ Y ð‰ Ê„ ´„ y Ìx tiœq kp|ðz¼rÐndedHOÎ8 à – – K ޼  ë# è$ X! ê/ ª? æG÷;¦5‚eÏZ,ý6ýÖý›ýüöýºý9üüåýØý!ü—ü‡ýýs4ÿ¼iÿŒþ·þ¶þ½ÿ¡þÃþ+ÿÊÿ±ÿ±ÿÐþÕÿÊþÎþÛþ¼þéþÜþãÿ¢þ·ý-þ:þåþÆÿ þÊý=ÿÈþ­ý?& ™%- û& ±!Êà(Y\ g ‡x E 2 £  ”Ä H Þ$Gµ ,°üê }# , nµÚ 6 Þ m! o  m›!Ì!WÁ™  >  N  a ª ¹ § $ - S ¦ ð ê  ‚  m  ¥  ú  A r t L 4 0  û ‚ ¯  I ² á L V Ë ÔØ!¢ƒ"°!O!!é# $™# M%" —!$Û# •#% 5( k ý!û#'! ¯"d#C  û E u s  } e    ! v  ² q × ñ ¾$ {4 ´ B Å""E  " k$ B' ‚  Í! Í ž  t! K  ™ Û ] × $ ‹! ‘ ) ƒ , Î  ] U | È  Ú* Ñ * ¸  J ã º  — m P \ 9 )$ f$ ;" L È ’ Â$ ! " U! â! z ‘# }" _  ! € "  ! (  x! m >! ë ¿$ ÷, !YŒ –X‘M•Jšy¤¥Æ¥ÿ ¢¥ÿ +¦À©K¦ÿ 5¤ÿ ¯¦ D¨ Ƭÿ«ª­ «¥¡Ÿ#œÁš?’ž‘š ™—Ÿ”•4” “4—:”†”ˆ“~‹]”=† r‡ [”_!ž –› ä´ ²Û³ÿq¬–«]¥ÅŸ@›„”Ü’5–J %&œIeæVƒYŽo!… t¡ÿ ¤¡ÿ å¢ÿðœÿ ·‘ b€ Gw [mÎmõf'_X^ô^8ZÃYV¡_Â` ÓTR­OqI MJ0NJÞL†M„P¿V!WeZ\_^ Tb 4dLb¦f’b$\ûc^l]oßwÍw=x°o†nñt yë{ ×vyØt [mÆi#k ¡n ¬puÈs %r;s+c\oBvèzísÇ…Ö‹ ÿ|Q€h~ € Q‚ @y oy x l By Ús¸ A| žˆ º† +ˆ 5‰ h† pŒ š‘ – Az ®kõb)`úbXciwjFik³bnapd fh›l•rCsvo4n.p™wÖx}à{{}ì|Í„÷‡"„7†l†gƒê‰.‰‰ƒð0ލ•­“+j‡ ¼Š ½‘•w“4”¾•‘ ÿŒù‹ñŽ¨Ž ´ŒHŽê‹„Z† ‰Èކ~r† ‚ “㉠/‚ Ð} ƒ ‰ 9ˆ µwðq†tôb.amcP`Ef1^Úc ×fi ¶jitŽu·w1nV\ Èk'm_o?oo—t5q;xg˜ I{ p 6} Ä{y Fs Em Üm ²€¶…µ‚‹Š®—’O‹š ‹ î‰ £{;d Èt ùr óp ›k j »Y¸]‚[ ï\ à] û_]>]XÕF^) ä, ¹# ƒ&Æ  ,( ' &$D'!@ú1Ê; >TG1> 6ÿ¶deVªýýUýÁýúýqýhü“ýØýyýéüÖüÇýcýÉüÞ4ÿòhÿ“þ“þÎÿÙÿ¢ÿ¨þ­ÿúþåþÝþÕþÝþÝþÜýgþ2þ9þÓþÌþ½þ+ýVþØþÄþãÿ’ÿŠþ½þ¾ÿøþ#Ó" £7 \6 21 + ' ö:T4µ!  3 ‡"~! î å œ k  )# Ú¨iQ“ æ! "€ [  - !ÇX k! ¾;ý(   ¬" §$ 1%«&,&F# S Ž $ Ú / ™ N ± ~ · À h N ø ! 0 ) Ž R · ã!  " v$ y s y ® f  Ø w à# Þ" {" Ì# u  T é#! h!¹!i Ó"!8# #+"y# ž"i$ #¸!! e" ó# Ì Â! m& (! ã" ö! »  í! `! ^  i ¼ x ò ì" _$ É, 1 P)   . Ê -$ è'Æ l# 5" R# ¿" „" ! @# ! i! “ F% ž"  ò ] î  {! ¶" $ …% 0! Z ¼# ¤$ S" x, ;6115P*`c@ ª8 O/ ©1 Í) á%•' ý' - ' Ù* ¬' 9. û0 ý/ &. Ô4 Š6 ‰5 1 ^0 q. (. ‘/ í+ Ò) f, Ó+ *, Þ( ?+ 3+ & ¤' •( ²* ò- ß4 ×]û‚ ‹ Œ³‰‰ W‘ñçžK£© ‹ž p©ÿ ¤ÿ Īÿ §ÿ ¥ N  ÍŸ „• hŒ Þ“ ü‹ ¼ˆ r† –‰ ^† ª‹ ߉ K† ÀŠ áŠ : ” ͈ a| ñw º‚N ‰ “|2}ÿ}HzΊ *Œ G“à“‡pÖlh„UŽv‡{yV^mcjb|ªyOoàr¹\ð`T_ñ€G{ýv¬mÁdýHàEGê3A°BùC ;{8å@®G7H“E;B!C<@ÞFQ?w;ÑA@;¾ACjA˜HæH4F[K°EXK¿J²Dç@ZBÞGËOgY ˜]?Y´Y ÂT 'K gX "X æS '[ €U0RJS ùcže@da? ÀT ðZ ód •W c eÍnKnUo ¸lÙa bã` £VuX ™i ` yi in}g Kf ¢e ¦mÅiþhsdÐg{m^oÍvûkÝZUU ÍJ ŽC &> ™@ îF uF R êQ ìJ 2< LB nB ¸@ í> ºD {H D 9E ÙH ÈW zU àUSHMÆT÷T/SjVlQ¼L?ª>ÜGöJHäA×DzB9EÈHn+;;Ø@zD?B;C>@žHI<»9¶HTH>ð-’(E-ø8S:Ä<BA+<õ@¤F»IwCü@™D·C²=•7¥1¢0Œ(ˆ,¥-t-#+»(¾'p(¿+‘+ !Í!Åà éÔÿ_ÿ,ÿtþþ€þ^þ^ÿ8ýöþ$þ5þ/ý‡þ[ÿnÿMþÏxSÿd!ÿ ÿFÿ¬þºýoþ ÿÿ!þSþûþçÃæÿJ1ÿ3ÿâÿ 0Û?B»?ÀAqD D?@µC¼9{9„=F@ô;¹DæFç9ë3ÿeWµýßýý ýEüMüfü5üný9ýAýâýý˜ýrü4þÇiÿUþVþÿ8þ3þÖþßþåþÕþ×þ×þ¾þÇÿùýuýÉþ3þ0ýíþ%þ¾þÏþÓþ+þËÿÀþæþ¯þÛþ,þÒª  !š  ã²2! ,b3ê1"…®$_ ÆÓ ÷& 2% ê$ v 4 3 * Ã05›†<)# ´-f+ÿ. ) «$ ñ,B Ê# P)Ì,°+ + + ’( ~- *' ’# Õ$ ¯) U( ¿) ô+ ¬) Ú) g+ g) # P( Y& Q& % «' Ï* J(¬)*É*ƒ*“' !(J(/·)Î- É' K'o+ B' c$  +þ!Ó"/$! $ ™)n'&Ÿ, Ã( %ß~2 !)Ï#ñ%(â(†!h$i,[*5$R%î%¿*î'?(¶!«",#ñ,  4ù6p6:ýýÀÿÔ!Å!+ì&Ö$7"e$<4Ã"v&k!Ý!Ô%ÿ[ÿÆÙ#ÿì#þˆÿä ÿØþšý¯ýHýjýŸü×ý˜ü/ ú“ûOüüúÂùù~ù'ûšúäü û*ûû;úæ"û['úV$ûc&ú?%ûZ#ûšúï"úÏúµúÌ#ûÌ*û(û|+û'ûR&ú—#û $üÑ&ü´(û‡&ü7&üÍ,üõ0ü1ýz4ü|6ý`9ü®6ýû,ýu/üß&ü#*üC5ü$6û'3üß-ý|0üž4ü3.ûÔ)ü¥!úÄûãûûüøûuûÇû3ý°ýãü„üäüÂü9üËý ý-ýqýjü†üQûû”ý)ü,ü5ý¾üzüü‚ýÈýý¿ýýKýÄþ þ‡þdþAþþëþÀ þq þQ þ²þYþq ýï ýg ý­ ý¦ þP ý~ ý~þ ý ý ý­ ýã ýDý­ý‘ý,ý ý¬ýäý7þèý´ ý+ ýt ý³ ý{ýóýwý[ ý³ ý+ ý ýîý3ýÌýƒý~ýýŒý|þ` ýýœýlýÂý5ýuýÏ ý– ý¥ ý þ) ýý ýÏ ý| ý’ ý6ýÏ ý¬ ý þa ýlý) üK ý üÕ ýK ýà ý{ ý¢ ý{ ý» ýà ýýuýMý{ ý“ ýš üW ýXý1 üå ý ý ýt ý‹ ýò ýŽ ý­ ýv þ± ý· þù ý¾ ý~ ý¾ ý ý&ýþþ+þðþÑþ ýëþ)þþªþaý^ þ9 ý´þxþ:þqýþhþsýßþ˜þ¨þý/ýoþêþQþèþêþ#ý]þÐýÿýöýmý·þ°þêþ˜ýÒý>þ¨þHýîýõý'ý•ý-ýæý¦ýåþ ýçþ˜ý,ýãýý.ý.ýeý×ýý‡ýíýcýMý—ýuý¤ýåýjý¼ý¼ýý\ýŸýÜý›ý…ýý”ý¿ý„ý¶ýýìýJýëýLý½ý#üGýõýºýBý ýý3ýýü?ýý–ýŒýLýýÅýÛýaýýÖýýýÞýý]ýký„ýýNþTþþDþÖþþ þ˜þìþc*?ACv?$A0J¡@ãC;@=<N<9;À=õ>vF$E§9B2Ñh V„ý_ýõýyüýqýýQýüý<ýýÙüÿýÔý¶2þïgÿÿ(þ%þáþ;þ3þ­þ;þÜþÊÿ¸þ¦þÚþÏýëý'ÿ°þÔý•þ2þÒþÄþ,þ*þ4ýŽý—þËþÕþý>þ¯ÿ‘þ)ýOþäþzþ¼þ¬þ‘þ¸ýþÍýýUýMýýÕþPþIý6ýìþ!þ;ýüöýçþÐþ(ýoý5ý6ý¾ýbýwþqýœþ˜ý*ýý½ýMý»ý ý,üïýÃü÷ýý²üDüülüJüçü6üåüÊü/ü¿ü;üÅü£ûûŸü¹ýiüuüJüçüRülüµýQýÓýÚýÓü5ýÐü—ý`ü-üÏü¤ýÈýñýRýhý üŽüüfýÑüFýý ý1ýúýbýøüîýˆýDý-ýýäýÔýHýYüçýüfý˜ý#ýÙüÎýÑýSü/ü_ü·üàü ü˜ û}ü]ýØý`ü'ýýYümüÎý0ý™ý`ýýü¯ýPý#ýHýYýýzýÂýýýˆý‚ýÉüÖüWüwü‡üGý8üýHýxýAý¹üÎý±üý¸üü§üýAýáýàü%ýýÄý¹ýùý{ý‰üýaýqý ý#ý¨ýýªý‚ýrý£ýÔýý(üÿý:ý¥ ý$ýný% ýr ýý ý>ý2ý¿ ý] ýo ý þ˜ ýýý« ý¥ ýN ý9 ýõ ý&ýµýwývýSý7ýÊýD ýuýdýÔý´ýõ ýì ý=ýCýÄýw ýë ý ý.ýïýD ý¤ ý® ýF ý< ýŠ ý; ýõ ýv ýs ýû ý. ýà ýÄý´ ý] ý ýô ý ý¢ ýôýý ü7ýòý[ý² ý ýcýý¢ýTýUý*ýüWýýQýÛý ýh ü'ýaýBý¤ýjýqýTý"ý˜üçýóýáýbý9ýãýúý‰ý²ýÝýÓý©ýâý´ýeýMý=ýêýýœý¸ý,ýuýs ý@ýûýýˆýâ ýB ý³ý­ýì ý%ý¢ý#ýÜ ýê ý¸ ýÛý¤ý¤ ý5 ý ý¢ ýýcýÒýðý"ý ý:ý-ýü ý ý#ýÂýbýíýý!ý*ý$ý+ý3ýtýìý.ý¥ý×þQý—ýŒýWþýþXý|ýâþýwýÒý­ýíý­ýuýþÁýÄý5ý½ýýÖýÍý[ý”ýýìý›ý\ýÅýýÍý¶ýßýÝý¶ý-ý*ýüýý8ýýŠý©ý–ýÌýÜýÔýMý:ý ýýÅýÛü‡ýšýêý¼ýý ýTüµýIý¥ý$ýÀýýcý1ý¼ýýý\ý²ýxý›ýìý˜ý üýsýŒýtýûý°ýýZýÁýèý’ýÜýÒýÝýýøý2ýÜý*ýPýºýUý©ý»ýAýÈý{ýÁýŠýŠý‘ýý¸ýCýý ý<ýîþ‚þþùþEþKþòþ þƒþZ+?jC(C)C|CDWF;DQ?æ:Í;ñ?<=lK®G0;½3ÑddVª ýe ýS ýAý0 ýj ý9 ýbý\ý*ýÒ ýe ýë ý¢ ý9 ý /þ/hÿ þ+þÕþþÞþâþPÿ°ÿ©ÿÈþåþ½þ½þÍþRþ;þÕþþ2þsýâþ1þþþÛþÙý„ýéýŸþþþCþ-þIý>ýLþˆþ!þ(þ þ+þ±þ¥þþÌý=þÓþÓþÐýíþÌÿý}ý5ý=ý+ýþáý6ý\ýMýýý,þ³þÛþÛýý°ýLýDýœý ý3ý;üsü,ýÑýQýŠýØýèýÊüÏýÑý›ý4þÉý‚ýØýZýtýƒýý!üçü–ýÊþÒýåý˜üÞü¶ýxü§ý;ýÏüý9ý3ý€ýØüýŠýqýIý<ý×ý3ý#ýüüÏüý‰ýÈýËýDýxüíý˜ýIýiü—ýýÚü×ý!ý‘ýšýÊüßüíüÏüîýéýQüWýÁý@ýüîý©ýÊýIüOüïüüüßüü§ýü\üžüîüeüŽüæüGýü—ü¦üý€ü×ý¨ýÈýXü†ü×ý`üÞýÐýPüWüüüüÔüäýýÈüfüNýý€üMü—ü‡ýHýQüßý¡ü—ýÈýšýüýÂüVý˜ýýkýŒýéýðüýüvüïügüÿýèýâü4ýšüný ýjýëý”ýÁýý\ýó ýýé ý ý) ýºýâüçýyý¢ýbýâýYý+ýSýÊüÇ ý‘ýìýsýñý ýÒý`ýèýùýôý#ý3ýñý¬ý¸ ý2 ýò ý) ýý´ýRýòýüý¶ý]ýé ý° ýpýàýéýáýø ýq ý© ü.ý"üŸüßý˜ü7ýèý¨ýèýáýYüNýýcý ýÙüßü-üoýˆüŸýüÇýéýý´ýhýcý)ý"ýhýYý°ü_üÇý ýºý!üþýÈý"üwýsýTý™ý¢ý"ý9ýÜýnýâý›ýqýxýjýÙüßü¿ü?ýèüýQ ý:ýYýý"ý` ý!ý¸üýýÔ üOýmýâý’ýÚü—ýÉý1ý ýýºýý"ý¢ýûüÅýóýrý*ý*ýýiýý«ýýdýäý"ýýÓýTý+ý\ý ýýýlýåýVýýý•ýéý$ý“ýŠý-ý¦ý]ýáýKýZýÒý;ýŠýÁýjýÌýSýKý~ýtý ýÃý<ý³ý©ýý;ýaýµý¸ýÊý,ýýYý©ýUýDýƒü–ýÑýÑýàýYý¼ýkýüÇýjýý¤ý)ý`ü^ý’ýYýÒýPý‚ý³ýIü×ýPýýˆýyüwý™ýÃü^ýüÿüþýÂýñýèýýXýùýiý1ý1ý2ü'ýÐý(ý`ýxýšýhýtýýÃý»ýÓý‰ý³ýBýƒý‰üWý ýñýâýuýlýåý9ý&þ‚ýŸþþþ‰þ‘þJþ-)@²D+G–EBu?‹GñCÊ?:€9’>²@õMõG®;Ê:bbXX ý/ ýe ý„ ým ýý|ýbý¬ýSýbýv ý. ý‹ ý ý\,þ-gÿþÔþÒÿ°ÿÀþåþßþ,þ>ÿ(þ.þ6þÜþÆþþÕþÔþAþQþHýŠþ+þüþÖþÆþ1þAþPýœýOþÖþ+ýîý³ý…þÙþÚýþÍþ0þ0ýGýóý“ýVýdý—ýåýÜþ0ý–ý7ýœýàýFýþÐþ2ý/ýCýTý“þ!ýßþ)ýZý\þý·ýäýSþ0ýUýüŽüü/ýý™ýÔýÙýÁü&ýýhýoý›ýýýˆýAý‘ýØýÙü—ýBýIüüÕýýIý3ügý†ý/ýÁý<ýüü…ýü¯ü÷üÝýˆýýìüNüVüÏýý>þ‰ý4üWý©üÎüÿý!ý©ýšý’ýÑý*üÖü?ý<ýüý ýÑýaüîüæýPü¦ýqýûüçüwü^üõü/ümü/üžý¨ü'üãü‡üõü5üÞü/üvýéü¦ý ýÀüüUý˜ýØüeü5ü'üßü~üžü'üü„ü®ýHýüWüïü.ý˜üýüçý™ý¨ü.üüåý¸ýÑüöýšýàýýýÁü—ü×ýQýü^ý©ý)ý`ý1ý)üuü<ý*ýëümý(ýqýÀýëýxý«ýrýxýÕüÞýYý ýjýúý¢ýqýÚýÐýPýTý›ýTýtýãýjýYýYýñýÊý‚ý\ýÄýéýæý±üwü_ýxýyý4ý#ýsýaý3ý1ü×üGýêý:ýzýëý|ýqýðýýÈýèýùýýýBüýèý ýŠ ý:ýñý«ýiý¡ýüOýýšýqüýòýñýýñü–ý°ýýýÊü'ý*üßý*ý9ýyý›ýÜýlý©ýýèüþü•ýpýÁý:ý8ü7ü/ü·ýýàüý«ýµýpýéýôý©ý1ý©ýjü¯ýý»ü÷ü¯ý0ý«ý)ýiýqý$ý ýg ý*ý üoýzý ý˜ü¶ü·ýýòü×ý›ý¢üïý!ýèýpýXýºýBýñý¡ý¤ý&ýcý*ýiý›ýâý9ýsýÕý%ý>ýbý›ýŒý|ý[ýUýõýÌýlýdýYý$ýýÙýQý•ý\ýPýý£ýBýýãýdýSýÐý¤ýÔýý°ý‰ýìý ýaýÒýCýÂý°ýDýAügý üÇýÂýƒýÓýùý’ýýqýý{ý{ümüü×üNýÐýCýünýÒýZýIýý©ýÔý¢ý@ýjüžýÈý«ýYýÐýý3ýQüÛý±üWünýZýpýËýxüfý<üÅüþýpý¹ü×üõü•ý:ý¨ü­ü6ý@ýpýÉý"ývýrý´ý¸ü·ý‰ýoýý²ý$ü_ýÐýèýný™ýƒý}þþqþ°þþñýþéþ#þ!-×CnDhH‰G‹DÎ?ÈDiA¿<ó<9ø8„>2M!Fü:ý7ÿ¦__@ ý5 ýÅ ýB ýýCýbýQý†ý“üÇý,ýký2ý²ý+ÿÁfÿ•ÿ±ÿ‹ÿšÿÉþäÿðþÌþyþQþÛþÖþ(þÑþ1þaý¥ýÝý=ýUý¤þHý›ýþÝþ8þ"ýNýKýþ3þ!ü,ýíþ þÈþ1ý7þ4þ9þ0þ0ýNýMýuýUþ!ý%ý˜ýwýFýKý.þ!ýÓýÁþÛý/ý5ý.ýŠýDþ0ýŠý!ýý¡ý4ýÞý‰ý4ý%ý%ýÒý*ýxý›ü/üßýQü®ýý’üŽýÈýHýÂüFügüGý˜ý5ýçý@ý üýýüUü_ýšýý`ýQý€üŽüÿü‡üÆüuýÁü—üý€ü'üÕýAýYüWüýIý4ýqüýzýNýèü'üüßüümüÖüüöýxýˆýKü7ü_ünü~üoü'ümüÖü—ý±ý9üücüfýÐü^ü&ü>ýýàüü]üOüŸüßýèýü×üÞüýPü§üŽýÉý™üÖýý#ý!ýêüçýØüVý(üüü_üWýüüüÌý°ýQücýüü´üjýŠýHýý üvü_ýZýÁüEýùýÃý©ýyýèýýšýTý¨ý0ü·ýˆýêüŸü§ýáý°ý0ýbýRý™üŸýüý˜üÏý;ýµýý¡ý¨ýiýÙýýZýÒýÂýDýÚý)ügýý±ýxýAýYý)ü?ü'üŸüÞüý‘ý¿ü§ýòý¹ü† ü~ýpýü§ý™ýXý‘ý!ýéýéý(ýäýüÇý ýRýªýhý˜ýyýñü¯ýaýXýÑýØýXýÈýHüýãýðýrýòýqüü•ýùýýýý˜ýpýÐýÚýúý±ü?ü§ýÒüoý©ýüülüfýøý)üçýêü5ü÷üü®ý(ýìýÜügýÉü…üþý)ýÔýaüý±ý+ý2ýÚýý!ýZý°ýØýÙý ýpýØýZüçüný^ýýRýãýŒý²ýèý"ýAýšý™ýèý°ý¡ýýÉüÿüuýiý1ý:ýaüçýÉýBý™ýêý,ý2ý¶ýÒý+ý£ýÓý{ý†ýIýÑý!ý(ýýýZýÑý‰ý£ýÛýÒýiý”ýýºý ýRýÄý³ý’ýBýzý1ý;ýÌýýýFý’ýQý’ýýBýÊýrý²ýýRýý¨ýÐýhý‚ýãýÉýÁüOü¶ü{ýsýQý¹ýýZý“ýRýüÏýrýÃý«ýýRüfüßý[üÇü/üýýü\ü·ýÁüÎüýÐý ýüüGý²ü¾ü6ý:ýýùý¸ý+üÖü^üü.üwýÁýµýñü‡ýˆü¯üoüVý@ýýüVýÁü~üþýÑý üýmþÉþþAþÈþQþ(þkþ þz,f@\CxErHA)B¿DW@;:~8ð7;óKcF°:}3Ð_úƒäý6 ýTý™ ýfý#ýŽýNþ€ýÓýcý$ý‹ ý¼ýêýÚ-þ¯eÿÞþ3þ&þ$þÕþÞþ5þ8ýOþ+þBþ!þ1þþòþ›þIþ3þþPþáý7þ#ý~ýNþ!þåþ0ýWýMýŸý?ýýiý“ýOývüßýMý>ýýEþ2þ(ý/ý-ýmý8ýUýý6ý?þÐýÏý•ýsýýCý*ý%ý<ý]ýEýØýýâý:ýÙýKýØüýaüÝüoý4þ1ý4ý™ý¸ü_ýý{ý’üüü_ý ýý¸ýÑýˆýKþÐý;üžüýÃýÊüÚüýÈý¸ýøý¨ý˜üŒüýÐýÈýHýøý,üOü~ü”ý˜ý)üFýøý1ý3ü—üæü–ýJý+ýÊýü¯ü6ü¾ü¦ýCü÷ý!ü%üçýˆý¡üý‘ü^üÖü_üßüWüÆüü¤ü ý‘üüWýüïý ý‰ýXý¡ýüßüßü^ü'ýbü'üüü÷ü.ýýüEü^üGý±üüWüýHý¸ý ü.ýªüü•ýÁý!ýxü×ýØý³ü‡ý`üŸüÏýýPüÏýüü—üü§ýCý°üÆýHüÏü×ýÐü¯ý)ýšüü¯ügýèýRü4ýÙýYýÚü_ýèý4ýÙüGýüêýùý…ýüüOü—üïü¦üôüUü×ý¸ýQü6ýqýü,ý“ýÚý(ýYý˜üýðý¨ýáýØý®ý4ý€üöýyüÞüöüvý`ýéýpýªýxýcýÅýÙýËýÛýðý"ýÊýýáü»ý ý`ýÙý|ýlýjýáüÎýÓü%ýýÔýÊýðüü7ý°ýüîüý8ýHýPýØü·ügüýƒýý@ü×üü–ýñýxüöü}ü¶ü­ýêý`üoülýYýéý ý©ýÉýâýÉý˜ýZý ýkýÎýjý9ýÌýÔýãý*ýýbýÚýËýòýÓýüýüoýšý˜ýRüwýàý0ýTü—üæýãý¸ýbýPü'ý¨ýü_ýšý`üïü.üýpýóýÐýLý¢ý$ýêýŠünýRý™ýŒýÚýýQý!ý°ýqýXýLýâýÔýÓý)ýý•ýTý¬ýÏý!ýýjýKýZý›ýRý0ýÚýÉýký9ý¹ýQüÆýñýhü{üGýÃýýñüîýüGý ýÊý9ýýHýAý9üýPýÙüFüýzýYýZý`ýxý`ý›ýKüÏýyýÊýñü®üŸüýØýüîý`ý°ýÁýAý üü—ü.ýhýƒýÉü§üüõücüïý¨üüýøü–üÊýˆü­ü–ý°ü«ýüvü­ü‡üüÎýŠüOýxü¶üöýèü§ý€ýCýðýrýý‘ýCý×ýµþþ‚þÈýwþyþþy.>žCCCjB©BmA:A•=Í;7¿7Ö>ƒJ¡GÙ8Ù1ÿô>æsþDü"þùýÏýÉý!üýQýöý{ýýýÖýtý‚ýøüÕ'ý›0üþÖþ1ýžþ!þÔþ*þÔþÝþÏþ%þ4þÏþ,þ1þZýOþ<þÐýcþ8ýïþÔý7ýFþ#ýFþ@þèýýUþ+ýOýýÞý½ý,ýÛýýýFþ2ý<ý_ý6ýJý™ýƒýý}ý‚ý,ý»ýšý/ýçýCý ü—ýBý2ýBýºüüWýÀý üÏýüÆýCüOýJýHý@ýQýyýÑýBüÇüýhý¡ýùü‡üÏýÑýJü.ý@ýIý€ý<ýïüüDýiü?ý{ý ýàý˜ýaýˆüïýü×ü]ýAüÎýAýåý1ýüžýü—üücü—ýýñü‡ý‘üßýüUüžü£ü¿ü•ü¿üFýýIüOü¾ýªý ü•üýPüü¯ü·ünüÞü/ü–ü­üÌüîýáýZý ý°ý@ü üŸýIüßü.üþüžüÖüçü.üÝýýIüü–ü/ýÀýØý1üÇüýXü6ünýØýàýðýšüOüÎüüü•üžüý°ü%ýQý8üœüþýýhü¿üOýü/ý‰üoü¿ý±ü>üVüöü&üvý!ýøüþü÷ýñýQý¡ý(üüôü—ü-ýýcüæü&ýàýIýÉüÞüvýÉýpý ü.üŸýÑü—ýqüïü&ýðüüÎüü&ýýØüýQü®ü§ü§ýJý¸üßý ý8üný¸ý@ýqýáýØý ýÒü÷ý°ýý[ýéý]ý)ü¶ý ýjýü6ýëý™ý¡ý¹ýÑýbýKüWýýÒýQýüçýýLý`ýý|ü_ü-üý ýØ ü® ýiüý ýKýýŠýAý:ýIý ýcý ýÐý¹ üý¹ýéü¦ýpý1ü¿ýýiüïýRý[ýªýpý°üýsý0ü÷ýÙýšý“ýRýÀý:ýrýü/ýýÓýüŸýüoýý¢ýIýÊýqýÒügý˜ý0ü¿üýKý™ý1ýIýPüWüæýYýýPüçý0ýZýÊý"ýôýýHý)ý‰ýýÚý¤ý¡ýýý‚ý‘ý²ý ý±ýýýXýZýTýýýÏýóýýcýýÐýýIý ý3ý«ý‚ýéüý:ý€ýý@ü7ý9ýñý‰ýýÙýýAý°ýÁý¹ýÈý¹ýøýˆýˆýýSý:ü¯ýñý*ýùü—ý‘ý"ý±ýýrýýØýÉý`ügýÀü÷ý³ý’ýáü_ýùý0üNýÒüßüGüüöüçý9üÍýhýèünüžýpü¶ý8üýü¿ýðü¦ü‡üvüüîý±ýýñü.ýøüüÞýÀý±ý8ýyý²ýìý€ý4ýýýÜýLþøþSþþéþýVþÉþJ)–>¥@ç>úCkAû<CÞ@<q<÷5×;NB´KYEî8Ê9ÿU2ÿ”5ÿ`$þìÿ;%ýþ9þP þ þ  ýg þÁþöþ ýŠýÁýnýý<ý3þýþåþ!þÇþÍý6ý¾þ{þHþ@þKþÇþ×þºý^ýœþ3þHýý´ýþHýœýIþÙý¢ý£ýÖþ1ýçý7ýNýqýÑý‚ý{ýFþþ9ý?ý=ý‰ýÜý1ýˆü§ü†ý ýðýýºýþpþÒý×þàüOýKý;ýJýšýÐüüŸýÊý ýý¡ý‚ý1ýâýXý@ýÁüNüý`üýaýÉüŽýý’ýˆüŸýÑý1ýýHýˆüÞý@ý¡ýaüüOü§ý;ý’ýIýzýÀüUüoýÌý2ý9ýÚýøüüÿüý,ýHý9ý¹ü‡ü<ü­ü&üçü×ý9ü/üý‰ýRü_üuü]üµýàü„üÆüžüý‰ý‰ü_ýÚý ýÀü#üÕüZü†üOüü}üLüÌüÎü¥ý€üüäüUý˜ü§ýýÈüVü{ü üü'ü–üýHüGüßüýIýü‡ýÉýXüÞü>ü§üüöü‡ý üÕüÇý ü>üü.üÇüýøüý ýHüÏü7ü•ýXý˜ü—ý8ü—üÎüÕýCýüÍýÀýü¦üü¯üü^ý0üçü}ü¾ü¯üµýhü”ü¯ü×ý(ü}ü%ýèüÞü_üþü¦üîüMüõý8ü–ý²ü/üåü6ý¡ügýÈüOüý0üöü'ü­ý€üïü¶ýàüü/ýý0üÏýêüïýÔý`üçü§ýDýpüïýýÒü¦ýaý¢ýüü¯üü§ý®ýcü'üæýÐý™üýü¯ü×üßýˆü–ý9ýüvüïý"ýYüäüwüü×üýü~üÖüÏýüNý¡ýŠýùýsüçüÝýxý(ü¥ü¯üwý1ü'ýàü?ü&ü®ý ýýÙü„ü<üõüuýùýüŸüý"üoü¦ýý™ý ü^üåü—ý üŸý±ýüÏüýyý9ýIýpýáýàüü´üÎü6ý¨ýèý(ü¾ü&ý üµüÝü?ü.üÞýúý¡ü7ýðý™ýéüïýÈý1üOý°ý*ýAüOýý ý üoýÉý¨ý ýÔý‹ýIü_ýÙýÐýëýëýý™ý9ýýºýQý¡ýÀýýiüý0ýaýPü'ýyýYü·ü–ü×üÿü†üOýýÈýùýÈüüýýøýÌý!üOýcüü§üü—ý9ýáýhý‰ü'üÌüÜýýÙüSüüü%ýýüMüVýPüÿüIü/ü†ý9ü_üüümüüÞü­ý üüeüüÕü/üUýXüÍüküfüü6ý¹ýèý@ü=üÿüüFü.ü¿üíýBýýðýý»ýÐý1ýEý×þùýþPþøý>ý•þA þR-D@ôBµ@{D+A =¸D³A;¿<t8È7yArLD¥;0þ®1ÿ¹-þ†%þŸÿ $ý÷ýfýþ¸þ<þX þ² þþªý›üýüÎý±ýÉÿ¢ÿÁþzþ"þ-þDý]þQýØýïþPþ ýÝýFý•ý¬þ-ý>ý•þýïýÑý^ýWýDþ)þ0ýLýJý6ýZý8ýEý™ügý%þ(ýý­ýEý4ýŠýÑý[ý=ý²ý‘ý˜ýÈþþÉüÖýqþpþÐÿ¡ýDýý4ý5ý4ýýhý€üGýýúüßýýBýˆý¢ýÒýÈüNüfü–üŸüÎü'üGý"ý+ý,ýŠü¿ý9ýQüný€ü?üüèüûüßý1ý+üäü³ýpüÏüüWýÐüFý¸ýý ýyý€ýÛü7ýqüýzýpýÐý‰ü–ýüüüüçü×üÇýËýÀügýXügýàü>üœüßüæý üfý1ýHýüWý ü•ü•ýPü×ü]ü¦üžü}ü†üßü_ý¨üüçü§ü/üü-üUüeýØüWüUüüÞü7ýÐýýðü¬ü®ýøý"ýˆüÿý¸ýðý ü¦ü®üßüüŽüŽýŠü®üîüLüü^ýaü¯ý¸üOü¢ülü×üÞüÞýÈý ü®üçýüÍüNýýˆýÐü×ü=ýüfü¶üoü&ü}ü üüvü½üüÇü¶ü%ü¦üuü—üîýJüÞüçýpügýü¶üýØýýXýúýQý‰ýáý‰ý!ý(ü6ü•ýéýjý1ý(üügü/ý±ýÂýóýiýýéýýrü-ýàý©ýðýüŸü/ü7ýàü¶ü¯üåüµüwý¸ý0ýxý’ýýýÈý‰ýü·üý˜ü.üÞüöýrý˜ýÉüfý˜ý‘ý ýYý‚ýaüý˜ýLýÃý’ý’ýýYü7ü/üný"üüýrý™ýðüöýªü5ü6ý¸üÇýýáüuü&üìüüý©ý¨ü¯ ý ý¹üþüwýÁü¶ü>ý°ý ü®ýXýØüFü^ý9ýü^üný(ýèýÉü§üWü?üfý²ýYýÈü­ü­ü·ý ý ýøü¬ü^ýáýx ü?üçü6ýèüŽüýý£ýÂýkýaý0ýYý’ýý£ü¦üFü×ý ýÓýý`ý›ýÊýjý‰ý¨ýHýýRý:ýùýSýšýÛýyý@ýüFügýÛýÉý°ýØü÷ýùýèü·ýzý°ýýØýJýóý:ýRýxýÜü_ý ý üOý£üæüµý¨ýéýXýQüìü,üµý‘ýÐüü/üü–üçüŸü×ü\ý‰ýˆüüýÐüNüŽüFýÒý#üÎüügüOý˜ü½ünü|üåýpüåý`üÌünüïü?ýyý«üü7üü?üýýü5ýüWýHýHüîüÇý1ý=þøþÑþ(þ3ýÿþRþ þYþI-AA¬D¦E<í@~@CDWBô?:ý9ÿ8JCìJEf<-.ÿû:ÿ!0þ>#ýõÿz&þ‘üý|ýµýf þ¥þÿHþÀüOü~ýÈýÃý\ü?þÚþÚþIþHþ(þ"þ2þÚý®ýOþ3þpýDýý”þ[þ;ý'ý‘ý­ýÓýëþJýFýÕý‹ýLý–ýùý"ýFýšýEýŠýãýUý5þ1ýœýIýÜý‰ý)ý*ýŠý1ýúý9ý£ýFývýÂý™ý5ýEýËüŸýZýÁý™ý’ý‘ü'ý‘ýýˆýüüNüü­üMýšüGýüý²üÍüý€üŸü—ýCýKü'ü^ýyü}ýüýSüü•üœý ý;ýSýqüWüýiýÑüÎü•ü]üFýÀüÇý¸ü÷ýýûüçüýAýIýAýPý<ýÖý@üWý ýCü§üÆý@üåü&ýÈüoünü—ýpüWüWýýiý@ý@üßüTüCýü'ýXýYýÀü<üŽü5üügüý‘ýü¯üý˜üüeü§üdýüýpüÇýümüçü>ý¸ü]ü¾üVüÎü¾üvü¼ýpü^ü{ü…üîüfüÜü üüüVüüæü®ýAüüžü¾üžü_ý±üü_üÖü ýXüåüîü‡ý@üüÖý ü~ü=üfü?ü>ü¯üuüíüüýüüôýýXüýü^ü×üü.üõý"ý¹ýéüõüoülýÙý üîý¨ý¨ýZý‘ýYý9üüæü¶ü#ýàýbýÒüÏüÎüŸüNý8ýñýJý‘ýbý1ý±ý³ý¢ý’ý ý ý‹ý£ýýÉü~ü_ý˜ü÷üîümýjýÔý±üü‡ýØü_ý üÖýügýxýpýáü&üüýüwü'ý’ý2ýýZý ý!ý™ýÙýÂýüçü¶üü— üÇü¯ý°ý˜ý¡üýˆýÒý‰üvü6ü~üuýéýúý0ü.üÞüü6ýAü†ü­ý[ýüµü¶üßü¯ýéý üýýˆü¯ü—ü– üž ýý ýýüGü·ü7ý©ü—ü·ý8ü×ü}ýÙýYü6ýXü>ý˜ü%üöüü6üÆý ü—ýPýüÆý€ýŠýýký„ýQýZý™ý”ýý±ýBý“ý)ýèüçüæýªý0 ü­ üøüNýRý ýŠýüGüýý@ýóüýÀýÉýYü4ü×ýQýXýÁý¡üoü_ü§üþý1ýüŸü/ýý üöýˆüFý ýkýýýIý°üý˜üüNüîüŸüýÉý ýèüŸü…üÏüÝü/üü'ý9üüü×ýAüý’üüßü¼ýügü¦ücüüÿüüEý¸ü,üËüÏü½ü«ü–üEüÍüvüoýpý€ü½üýý(ü½üæ ü}üNý`ý˜ü7ý0ýÑü¥ýZýÛýuý7ýþý×þqþ£þ þ€/xBU>};è@g<»B£BAz>5:n8¹:øG/L£Eö<ÿÖ5ÿ0þV3þ}#þÿ8,þýþÌý!ý- þ’ þZþ´þžýžý8ügýzýûýþÚþÕþ:ý_þZþ*þ0þ,þ,ý?þâý^þAþ<þØýLýœýfýý6ý¾ýVýý”þBýLý3ý•ü_ýóý|ýLýŠý˜ýZýFýlýFþ þýœýPýýÂýBýhü6üüýâýÐý{ýÒýÛýÈýHýˆýÉýÉüÖü÷ý¨ýLýzý!ýèý‚ý»ýQýHüüÕüüÕýüÎüÏýý‰üüýHü^ý³ý“ý{ümüUýÈýHý}ü×ý˜ýyýAý,ý&ýáüfýý¸ý!ýýØüNü…üüüïünüUü¯ýñüýý@ý$ýëýëý:ý8üZüDý‹ü_üçý ý@üýXüÇü†ü•üÆüeý üMüÖü üWüôüŸü•ü–üÇýhü&ülüü|üæýØüLüü¦üåüUüuü¦üWüçýØýàü_ülüÝü'ü6üÅü¦üüdüü§üÞüÆýàý˜üœüWüŸüüüÓýŒü¬üçüæüÓüŽüü£üuüüüfüÖý¸üWüÞüžüëýØüOýüÞüöü&ü¢üÇüÎýbüüÎü÷ü§ü7üüvýàý ü¿ü~ü¾ü/üõüüüïüåýPü'üü_ý üÆü=ü&üßüü¯üžüüUü¬ýüwý!ü–ü¥ýýÓüîüOüÞüåýˆü‡ýPýyýý)ü7ü'ü'ý[ý#ýóý²ý0ýáýYýIüžýðýÁüvüïý`ýØü¿ü§ýšý!ýýè ü-üWü÷ü7ü&ü'ü?üžýýaýáügý’ý[ý`ýàýýˆü^ý©ýý‘ýÒü&üåýØ ü% ü¥ü…ýü®ý+üWýiýaüßüfügü,üeü¦üÏüÇü üµüæüíýyüÖüýünüçü®ü—ü?üýýý’ü®üîü. üvü­üÕüÝü§üýüÇýèý üç ü~ýýXý“ü^üÝýÔüüýÈý üGýxü-üÇýýHüçýjýQýkýìýŠüwýœýÒý‚ýÊýZýèý¨ü×üOýêýcý‰ýaýÉýRýýÑýùýüßý9ý ý#ü_ý‰ýPýHýBü·ü?ýü·ýÁüWý ý9ü†ü>ýûý8ý¸üTüÌüßýHýüGüýýèü$ü6üüÎýbýý ý™ýý¡üßýÊüý€ýPüüÅý`üEü?ýñüVý8ýêüVü&ü‡ýHýÑüÝüÿýªý‰ýâüüfýpüü7ü¶üÖüïüµüFýùüöü¯üÎü6üwüwüuüëü„ýKý°ýü­üMüüžü"üôüEüýüÍüNý´ýLýýÞýŽþ°ýöýõþýçþO.-F Cp@9BqBMC3CïC-<~;À9Ž7ÐJÝKG7;‘2ÿä1ÿd.þÿÕÿ©#ýìý‹þÒþ`ý ý.ý‰ þ›þ3þiýcýsüü>ü%þ;þFþ˜ý+ý¦þXý¦þ™þÔþqý~ýMþ)þ:þý£ý²ý½ýêýÂý{ý.ý7þ*þ2þhýÐýàý+ý?ýœü&ýÙý=ý¦ýáü÷ýÑý'ýmýÚü&ýýƒý‰ýHü^ýü¼ý\ýAüîýüýÑýúýPý ýàüü§ü‡ý“ýÍýYüÝý¨üFýØüÿüüÇý8üüüeü4üîüîýÓýïü÷üü¶ýÑýÐý³ýìýýBüOüügüìü¤üîýÚü^üÖýZý‚ýý@ýäý2üïüOüüTüý¡üÇüWüOüNý8ýùý,ý$ü¦ýRýXüMýØýèýÐü/ü¶ü–üOüÖüOüœüFýýØüfüòüüÅýüüüÜýùü'ü#üŽüŸüüŽüœüüsü"üœü{ü¯ü¶üßý¢ý`üoü¤ý@ýüü=üwüVüÕýøü'ü†üwü¦ü¦ý²ýügü¼üütüDügýÐü'ü$üóüyü#üLüüÑüÏü>ü–üÞüëü4ü%üçýpüŸü×ýÑü/ý¸ýýÉý‰üçülüWýàügüoü·üçüüFý°üîümü%ýØüNý ý ýËü–ü÷ý(üîýjüæü6üÕ üüüåüý üVüŸý¹ýhý(üöüüîü_ü-ü<ü¬ü”üæüeü-üwü½ýèý©ýØý)ýýýrýbü§ý(ý0ý0ü/ýâüü|ü¾üvü§üfý ýÂüoüæý‰ýàüü¦üïýØüWüÏü.ý¨ýZý ýýºýXýünü/üEüŽ üõý@ü7ýXüüüfüü”üÎüý ý! üoüuü7ü>üÿü·üü6ýÂýàü/ü×ü'üïýèüütü…üåüÝü=üöüWü®üwýXüçü<ý‘üöü&ü½üîý˜ü–ýü·ý(ü?ýÚüWýŠüßýàü.üÿü|ümýhýýaý¨ü¯ü•üü_ýQüžý±üÖý ýüÇý±ýHýÛýÙý“ýý„ýdýHýÁýýÙý¢ý*ýXýhü×ý#ý ýKýjýšý;ýzüýHý½ýyýyüOýÒý°ý8ýkýÊýŒüVýý*ýòý+ýèüÎüWüü7ý²ýHü§ýýRüýÀý‰ýØüüOü×ýèüWü§ý ýQýªýÈý˜ýXýü¾üÆüeüýÈýÐüýèü¶üÛü+ü.ýÈü÷ü7ýÅüOüãügýHü®ý@üÎý9ü/ütý!üÎý(ü ý¨ü^ý’üüÅü<üŒüâü<ý°üEüüMü.ü ü}ý8üŸüƒüÇüÊü—ýýBýþàþùý¯þAþ1þ‚þP þ¹/2D¯AwAãCï=øBÅFBBú?Í<w9à;ÈJ•KUG¯:‰3ÿl1ÿ˜+þ'&ÿê!üÝüý/ý\ þØþþ þ×þ²ý\ýBüeüêü«üþ+þ˜ý:ý¤ýŸþDþ‘ýœýTþ’ýWýfý.ýý®ýõý|þÔýý”ýMþÒýCý›ý üŸýpüvý«ý“ý‘ý‚ý ýDý²ý!ýIüßýzýÐý’ýÚýLýtýtýyü×ýRýýrý@ü—üïýEýxýiýÐü†ýAý@üüÎü¦üÝüüýXüÎýzüýÂü½üÝüJü·üMü_ü\ý8ý°ýˆüÞý»üTýùü–üOý ü–ü·ý¢üþüü–üÍü¦ü†üüÜüœýÈý ýIýAý!ü×üüüÖýIý2üUüÇüWüÇüVü>ýzüÿüÆýüüDüNüýý€ý üÿýqý8ýÙüåüþü~üfüüäüÎý©üüüœýüïüVüŒüü¦ü,üü\üü#ü'ü-ü¥ü¶üvü,ütü¥ý˜üÆý¸üü&üÝüüü·ü¯üVüßüümütü;üümü<üü³ü¤ü¬ü›ýÀüÿüNüü¶ýøýqüÜüü—ý¸ýPü#üßüÖýüžü”üÖü–üçüü¥üküdümü®ýyü7ýü.ý ýpüæüæü6ü–ýØüîüŸý@üíü_ýQüuüOüçüüµü®ü¦üdüÛü«üýüÿü?ü…ü×üý‚ýzýHý üý‘üçüöüüný)ýýý‹ýý`üÿýÑý¡ýüîýýðü½üìü6ü<ýàýiýâüÆüuý üçüöü®ü4ünüý ü¶üüVü¦ü›üOýèüÏýÚýÉügüü¬ü-üîýÁüOüÖüíüo ü üüµüÇügüýšülüüM üo üfü&ý`ý ýÐüo ünü×üïýüýýàüäüüîüžýàýÙü.ü¼üìü§ü%üíüýQü­ü7üßü_ügü'üÎüÝýXüf üWýaýˆüÿýÉü.ü¬ü^ýHü…ü—üýümý"ý ýaýýDý²ü×ü3ýüÏü·ýáýèýrýËýÍýÔý‘ý‚ýàýˆýXýŠýàüæý(üŸý‰üý ýiý$ýüWüUý‚ýBýˆýÙýòýÊý9ý ýÑüôý8ý0ü6ýúýzüü×ü¾üŽüuýøü§ü†ýýÙý°ý‚ýÐýIü/ý0ýÅýIü–üWüæüæý ü×ý«ýÉýšý!ýýü_üü¯ünüüOýØü¿üGüvýPüüüý©ýHüü–ü¯ý0üÃü¿ýÈýÑüüÜüKü~ý@üÝü•üÎümü4ü­üEüƒü.üÏüöütü'ü½üwüVý˜ü?ýbý:üüuü¯üEüŽý©ýÈþµþ²þjþRþ¨þQýýŽþÑ1ADaB–@¡A"A¯?ÃFNAƒ==;M<y@KžKEá:„9ÿt7ÿù0þµ(þEþ/$ýÜþ ý!þþ¹ýÇþÆþ$ýßü üUüü/ü ü“þ<ýÿýAý“ý§ýVýNý•ýsþ3ý.ýbý§ýžýÍüoýýßýTý”ýãýŽý‹ýåýêý£ýáýŒþ8ý‹ý™ýBý’ü]ýšýÑýüýDýiü·üýUý”ý“üFýˆý=ý‚ý@ýˆü•ý ýüMügý›üýüžýBýÙü-ü•üüæüüüÿüWü¾ýü~üeüçüÖüü–ü…ü>ügüüÕýØüü¦üŽü-ýügýèýüüNý ý@ü‡ýÙýÁü üý ü.ý¸ýJý%ýÐüÌü†ü?ýøüwü ü>üOüÖüoý˜ýpüýHý ýÀü×üœüüÌü®üÔüGüÕýü÷üküNü‹üü^üeüü¾ý üÞü]üÕüÕüµü‹üoülünümüNüÕü¦ü'üæüTü¾ü}üeüfügü®üüÕüßü­üÏüŽüÏülü%ü*ü%ü$üìüûü¤üóüµüüÛüÃü³üÊü ü"üüÌü—ü4üülüëüëüæü&üüÛüŒüòüûüLüýÐýü]üü\üü$ü_ütü¯ý¡üoü7üöýYüüýhü/ýpý)ü&ýXücüíü,ýÈüÖüü+üüWý`ü=ü&üÍýÂüŽüýüŸü…ü>ý‘üWü'ü¦ünýü=üíü¯ý!ýhügüü?üžüŸüUüoýIý#ýÂýèý°ü½ü•ü¿ üuý8ýÛü¯üÅý1ýà ü+ü-ü_üNü¶üü§üµüäü5ü–ü—üü%ýPýÉýÚü×ýýÐü” üW üŸüVüæü=ü üãü¦ü\ü^üæügünü³üóü‹ü®ükýüWüüõüÇüôüÞüNü­üŒü&ü§üü~ü÷ü– ý0ýèýàü6ü¯ü4üÜüŸüÿüýèü¿üµünüßüÕüÞü_ü­ü¤ü6üýý˜ýñüßüíüýüŸý°üüÛüµü¯ üMüæý ýü¼üóüÝüFü¯ü&ü/üÖýøýñýâü—üöýÙýdüýjýbü'ýcýÓýýÛýÁý™ý¨ý“ýŠüÇý ýbýáýýÈýÉü­ýüSý¸ýBü·ü~üýÉýÐý¨ý ü5ý@ü5ü¾üFü­üüµüVüüýÉü_ýPüóü_ýü[ü/üWüŸüýüü^ü,üü¶üüNü&üŸü„ýéý1ü_üžümý1ýèüõü#ü^ü/ý(üfüÞü‡üëü«üCüü.ü½üüüSüý2ýàüæýiü¥ü=ü5üæüoü†ü£ü4üvü†ü/ý@ünüþü#ü^ü=üƒüÃü7ýAý_þ@þ;ýýýÍýeýfý0@BçAöBb@óAx>×Dt?y=z;~7¿C²NUH#Cw:Ú5ÿ2ÿ€2ÿ#&þ?þJ(üÆüÛü¹ýýMýÕýwþ“ý¿ü¬üEýðýØü\üýVýÝýæý¬ýöý ý7ý<üýýãýòüoý©üŸý*ýOýœýœýÓýRýÊüGý§ýˆý[üÏý‹ý3ý)ýDýUý]ýpüŽü›ýYüýAý™ýºüý¸ýjýŠýHýXü÷ý‘ý6ý¨üŽýˆü6üVüÞýùýýÉýÐüü”üßüWüüWü„üüÏü†ý@ýüŸüVüOü ýý€ýPýý2ýzüwüÆýPü¿ýSýxüüüžüOýpýü§ýˆý€ýQüüMüœü&ü.ýÛýÉý8ünü7üöüÆýÁü$üöü/üýýBüÕü?ýýAý9üÆüüfüfü'ü&ü„üüüýˆüoüü•üžüTüÆüÌüWüãü\ü†ü üÍüÍüÃüü„ülü$üüŸüüäülüüœü.üü¶ü¥üíüuü'üüfüýèüüíüuüqü]üŸüdüíüÖü¾üæü4üþü2üãüîüÛüü«üÙü&üÝüŽü‡ü=ü]ü´ü»übü•ü«ü¿üüŒü¾üõüžüSüÖüÍü¯üüìüöýÙý¡ügüÅü[üßü¼üügý˜üSü¾ü®üöüµüüìüü”ü¼üÔü\üEýüÏüGý!ýÑüýHüßü—üæüý‰üVüÎüoýýÉý üLü#üçüöü×üWü]ü&ünüüÞü¥ýðýý(üßý ü' üEütü?üîü®üíü4üüÜü›ütü-üŒü¾üvü¯ü—ý˜üÝü–ý€üOýýPüeügýÙýŠüç ýXüOüVülüdýYý8üü"üWüüïýý1üdümüöütü†ýHüOý(üåýüüäýàüÍügýü¿ügü&ü¬üÿý ýqüÞü-ýéü>ü%ü]ü.ü?ý™üµüæü\ý!üŸüµý üÂüîü'ýÐýãý ýY ünü'ýÐý¨üîý˜üóümüoü5ü¯ýý`ý‰üeüæýXýýXýýÈýÂý©ýáý‹ýý[ý,ýIý™ýiýÚýJýÚý\ýŒüýòýü'ý1ý²ü—üOüŸüçý˜ýQý)ü‡ýðüÏüGýü•üÎüý€ ýÑ ü$ýŠý8ýü×ü÷üdüÞüVüÔüýýÊý©ý€ý!ü¦ü¤ü6ü.üœüüü_üµýøüWýÐý`üÜüüÏü'üåü-ü7ýQý‰ü¬ü4üäüÇüzüTüUü•üêüÇüüVüzü~ü¦üƒü~üüJüü=ýü´ümü|üoü,üTü&üæüŽüsüýüÄý(ýIýÀýyýHüüOü¿ü?üvýjþéþúþøþ"ý?ýþyý$þÉ2DC¬BäAâCdB7DºBÃAx@m;%6ELæGªF÷=5(7ÿ1þ·)ÿÑþm-ýô$ÿü`#ûÄü¾ýøý)ýQ ýÕþpülýüôü¿üü÷ý¦ýVý£ýãý¥ý\ýþŠýäýkýÒýóüüóüý•ýÞýýüöüvüü~ýéü~üÖü'ü¶ýÈý@ü§ü/ýñý‰ü‡üžüýÑý#ý©ý\ýWý3ýüÄýÀüæüŒýPü¿ü×üåüüÏüü üü^ýPýˆüüWýPýÀüýŠüüÔüü üïý±ýAüÍüýHýBýuý+ýˆüüþüíü\ü¦ýøý8ü•ü×ýÁý‚üÆüGü üNýñý‰üÏýøýý`ýØýÈý¢ý$ü'ý@ü•üÖý0ü¾ý0ü¦üüüþüÕüÎüGýÉüü¾ü}üÝýˆügü–ü”ü¦üÏü¦ýØü&üÕüÌü›üäünüÎüüKü”üsüjüTüäüü›ü¬ü$üÍü¯ü6ý`üýPü–ü»üNüÍügüdü.ýü×üVüü†ü2ü¤ü×ü%üüíü,üûü©ütü+ü¬ü×ürüdücüÝü¥ü_ü üjü?üÃü¤üãüõüüÛüÛütü”ü³üüwüÇü&üRü]üýüü£üsüÌüëüuügü¶ü¾ý°ü>ýÉüŽüžü.ü­ü†ü¯ýhü¤üÌü¥ü#üdüÖüßü¥ü_üüü‡ü–üßý‰ýÀüüüVüü%ý ü•ýÒýÙüÞüwüüöüUü­ü5ý™üýPüµü|üüçüäý€ýü4ü\üfýÀýéü÷ü?ü»üuüÎü=ýXüfü¶üÌüoüwü†ü6üåüüëüeüü üoýQý€üOýüªüü} ýü¥üWü]ü¦ý"ýáýü\ü¥ü¯ý0üwü÷ü6üå ü4üüýýüü{ ü¼ü%ü–üÕülüßüüäüLüÝý üfýØüëýhüÇü/ýYüýèü=üfýx üüÖüýüoüöüîüüÞüïü¾üü&üŸý ü/ý‚ýÐ üü_üwýýü7ü/üÏü·ýXý¡üõüíü¥üŸüçýkýÊýdý“ý¨ü7ü§ýÒý°ýüïüæýóüýý’ügüöýÓýðüýéý˜ý¢ý¡ý ý ýÁýÀüýüDü»üçý9ýÀýü7 ýsü:üü÷ü—ýünü¯ýˆüßýýüÎüçý‘ýÈýýÙü5üçüíüçülüfüþüçü|üWü?ü[üßüüµüüÔü¾üLüÖüŸü¼üUüvý¡ýxüü/üïü…üüïü^ü£üTüÝü›üvüDü·ü„üÌü³üƒüûüêüÆü.ý"ü¤üóüý9ýÑüüCü–üGü\ýšügüüvüÔüÓýùýŒþ`þŠý_þ:þøý;ýÎý= þ1Î?™A[A[CjA BÛBA:<6;ü6þG¡O¤I-Dð<Ö6ñ;ÿ˜5ÿÓ+ºþ·,ý|üzüýü­ý’ýqü?þüÜýyýhü·üŒü­ý+þpýòý ý“ýýÝýiý«ý4ýýUýSý¡ýýœýôý(ýôýœý³ü/üçý‘ýpý±ý ýXý2ý“ýý:ü7ü ýHý2ü%üäü£ü¤ý¸ýÂüVüûüüFý8ýšý!üfü%üîü\ü…üRüüŸý ü†ü'ü_ýüfüõüÕüþüÆü…üýü¦ý¹ýIü ü üÿüýüîüÖü_ýxüüüÞüSü]üÌüÏüÿüý€ü‡üÍüTükü†ýQýCýüFüýÂý¸ýüŸüÏüŽüfýüWýü%ü^üEü½üLüUüüFü?ü…ü>üüTüãüüŽýPýÀü6ü•ü?ý@ü‹üünüæüVüüÝü®ü×üü+ü”ü”üüNüŽüžýèý¨üÛü[üÌüíüEüeüÖüUüýüüüü&ülüÕýÙüdüüü^ü^ü.üœüäüüxüüü”ü[üÛü…ü'ü¦ü¾ü¥üKüü¾üEüüÃüüüTü$üÝü5ü•ü–üÿüÇüåü£üSüüüÌü†üÕü7ý¡üæüuüüþüíý@ü‡ü-üUü>ýðý¡ü¦üý üçüwý ýˆüöü´ü×üÖülüüVýóýjüüUý€ü.üeüíüOü—üüÞüÞü%üÎüeü]üŽü¬ümüý¸üýýàýùý(ü_üü-üË ü] ü_üçü¯üŸü¬ü5ü³ünüçý"ü'ü»üküÏüoüîü3üüåüöýpügýüõýèü¶ü…üüdüü_ ü üuüÕýüeü»ü-üÎü–üÞüVü§üãýü#üä ü,ü§üçü¶ü¯üî ü/ü]üöüMü%üŽüUü§üü/ýÓüü-ýÈüïü¦ü%ýñüîü´ü¦ýìýÙ ýü-ý˜ýòýˆ ümý™ý üöü¦ü¶üoýü®ýýý¹ü.üeý´ýÃýæýÓýúý ý(ýý:ýÑýüVý)üÕýiý±ý$ýšýaýÂýÑýñügüWýiýXý‹üVý‘ýAý‰üžü^ü^ýšýqü-ü_üVý ýRüÇünü—üü5ü]ýýŠýÑü?üÕýüb ü;üGý!ýü¾üÛüöü×ücý(üîüüÅýHü•ü¦ü·üüü]üý‘üWýšüoýsüý0üCüœügü%üMüüÞý(ýØüUýÈýHü÷ýHüæüöý’üþüüÖü¿üUütýýÁü=üüFüüüü üÉüÉüƒüuüÜüübýaü¿üËü§üü7üÆýðý8üNü–üUüÝüZüÞýpý«þþ þþ+ý6ýýýMýO þ4øBsC#A·B)B÷E‹DA_;6=€:zJaOJ„D¢=9ÿ3;ÿ7þ¿,ÿeþÆ1ýW!ý¶$ýûüîýÐýÃýœýÜþˆü»ý üvüƒýÈüþý‰üý ý+ýý üÏü/ý{ýëýäýrý¼ýNüý4ýÜýáýÍý”ý‹ýÉýiýÐýiý‹üUüƒý"ýDþ(ý*ü^üäüÖüVý`ü_ü/üýáüVýüÞüžüÞüüOüÞünýüžüýÉüüöýQü–ü¼üýÑüÖüœý{üü=ü·üLüTüÎü§üü|ü´ü¿üüÅüüÇýÑýÑü$üýÓýiýüü”ü¼ü_üÖýºý üÛüSýxüEüýÈüßüý ý€üÏüüü¾üöüEüü¾üGü½ü÷ü.üÄüýüuü‚üõü|üOüòüÕý€üüýü/ü¤ü‹üü•ü}üKüÜüü×ü“ü%üýü—ü¥ü‡üoü†ü_üœüÅü"üªüÄüßü¦ü›üý@üžüüîüžýHý¨üMüVü¦ü'ýHüvü¤ý üünüÞüÞüÎüü3üdü*üÔü,ü\üü_ü¦üêü”üÜü…ü<üßüžüüEüæüLýüþüFüæýaüÏýüßýü—üÖýHüÆü]ü–ü—ü½üKüüôüü^üæüïüæü¦ýXýüÎüü^üÅü¦üŸüü¦üOüüÎü•ýý@ýüÔüâý˜ýxüýÈý`ü=ýüÔüfüýhügüüýü}üÖýüfü/üÿýpýèü'ýsýhýðüo ü¤ üŠünüdüß ü¾üCüóü%üÕüíüwü5ü§ý¨üýÈü¥ü—ü…üü÷ýéüŸü_ü]ü–ü]üÜüýÙýˆüüüîü”ü¤ügüýüÌü.üfü›üW ü.üOüüüìü¥üõü$ülý( ü+üŒü.ýyü—ýØüü]ü$ý¨ýˆý ü7ü|ü¼ üü®ü¯üïü6üîý¨ý ý‰ümüçü¥ý¸ ünü.üfýRýÊüÞüÝýýÈý˜ü½ü'üWýèýûýÊýþývýYý¸ü<üÖý*ýhýü&ü6ümüþüçý¢ýý#ý”ýýÓýèý’ýTýÛýúüýQý1ýcý¡ü}ýÐýpý ü­üüeü%üUýbüÅü¤ýüÇüýüüUü–ü/ý üŒü½ü6ýðüÌü¾üü·üßýHýùüüü¥ü/üýüýýÉüwüßý€üOüÆü­ü.ýšýPý ýhü'üýý ü>üýý€ý!üÕüü½ü¶ü•üLüßüEüüVüæüJü}ýùüwüœüTüýüý0üæütüüòü«ü¶üCüºü üãüDý€üŸüNýüžüœüµýüüÿü}ü_üÍüýøþ þÅþvþƒþòþúþñþH þ[1‡B‘E]@˜B¤?uE4FC\=^>}?*J§OKëE'@s6ÿ®4ÿp2þº8$ÿ¦'ü{ýÓ"ýý€ügýÒüJü¾ý—ü“ü…üCüíü\üKý£ý‚ýXü…ü•ý²ý€ýÑý2ýyýyýýßý.ýý¹ý€ýLý’ý¤ýÈý©üOü÷ý!üü=ýxü‡ýÝýBý!ü‡üwüýØüfüæüjü—ýüŸüçü^üÕü‡üüžýHüÍü¿üfýÁüFüæüüþüûü'üOüüüüüöüü“üuü-üýQý0üŸüõüÿüü…üü\üü/ý‰üƒýpýHüüMüÞügüfüüOýýHüFüåüŒümüÞüVü;ýÈüwýºüü‡üÖüÔüùüü‰üÖü?ü üÆü$üü?üÖüìü?üÅü|üKý@üü½üÔüsüÿüüæüü~üýÙüÆüÕülü,üÜü\üfübüÌüMü¬üÄü´ü’üýüLüü—ü—ýðüÍý ü7üMüîüÝü¦üü_ü[üçüöüæü\ü ü´ýü{ü%ý™ü­üæüÕüªüUý‰ü•üäý¨üü&ü\üíüôü¾üüeü—ýXý1ýHüýˆü{üüŽüÎü6üÿüütüõüücü~üü–ü¯ü_ý°üü­ýàü7üïü^ü%üŸüWýÉüÝüüëüäüü¬üÍüÇý€ü×ýüüÏüüý@üÏýÐüü–ü‡ýâü–ü–üwýHüoügü>ýý üÞüëý˜ý¹ýaüëü·üDüüUü4ýQüþüã üM üüç ü ü®ý˜üWüíü¬ü­ü®ü3ü£üOüeü]ü^ýüvü·ýèü-ü>üÏü&ýjýÚüëügüý¸üüßü¦ü$ü%ü&ü%ü|üãü ü–üVüÜü÷ü•ünü–ü´ülü¬ümüêü¼üsü^ü$üDüeü=üëüÖüoü6ýÑ ý` ü_ü´üEü{üüwü¦ü¶üNüÞü½üü~ünüüçü´ýðý¹üVüæümüîýàüíü×ý‰ýðüfýyü¯ý‘ý‘üŸüü=üíü.ü^üüü÷üý)üý«ýýºýcýý²ü—ügýüýˆýzüŽýPýÒýaýý€ýÛüïüæüfüþüvü•ü÷ü–üeü'üýü-ü6üãý@üÞü>ýüœýü¯ýhýpýñ ýy ü:üÆü%üçüÏüæüJüüÝü_ü¶ý©üöýüæýðüåý ü-üü|üVü$ülüŽý üæüÍüüýûýÔý!üÇýüçünüeü]üËýÀüDü¼üÔüVü†ü üWüÒüKüùüøü;üçüküƒü„üãüýÐü7üzüýýÈüüUü£ü–ü·üæý!ýxýhý@ü¬ýKýþáþAþ³ýýýÏý›ýþ²1‘@K@ôAàA£@¥B‘FLC/= Az=J˜O–LTB§@/7!6ÿ“1ÿa5¤%ÿ›*ü}ü-ýóý ýjýÒýüGýŒü¤üfý1üŒüÂü"üý×ý'üþýüýý‚ýýkþ0ýDýÂýÔý>ý«ýøüÏýÁýµý2üWüOý˜ý,ýÍý ýYüwüwýyü‡üÝü×üŽüý ý`üÞýèü~ýTýBýrüOüÎý)üuü~ü‰üöüýýýüüÎü½üÔüÍü‡ü|üüMüÄüeüvü*ü#üåýÉýIüDü$ümý8ýáü­üÍüýLýáü†ü~üütüý¸üUü|ý ý¸ü†ýAü„ü4ýÃýüÔüüü§ý)ýý9ýÈüÍüEüÛü ü üGýüVý@ü&üüFüåýèý ýpüFü†ýü ü%ü´ü…ü]ü/üý˜ü—üÅüü–ü?üNüãýÉü¦üÏüÖüüüÞü%ü³ü#üÌüLüüýjüVý‰ýrüvüütü7üÏü&ü×üüÏümü¥ü^üýüûü®üuüþü·ý(üü•üDü…ü§üÖü,üæüü[ü¥ü#üÕüÿüüVüVüÔüüü—ý±ü=ýøýàü&üýüüüŒü«üVüNüÕüÍü§üýàü•üWü¯üýèüïü.ý¡ý ýˆü&ü”üòüsüöüìüEýJýÙýàýRüçüŸüÎýØýpýü%üÝüüGü¤üGüSü—üþüÖü§üýÈü÷ýYýüOüåýJý!ýAýQüWü.ü×üÎüûü2 ü üc üGü¥ü5ü-üÕý`üþü¯üžüœüü÷ý¨ü_ü>ü]üFüfüÝü…ü üÞü§ý˜ýÑümü/ü–üµýàüÖüu ü ü•üümüVü’üüüªügüüSü[ üíüÆü[ülü>ü·üžü/ü-üÝüÔü,ü üüüíü,ülüäü­ý ü—üæýñýpüä ü- üfý©üæüeü÷üü/ü¥üµü,üïý ýrýâüÿýøüüžý¨ý™üŽügýüßüÇü§ýºü&üœýxüåüçýüüýHýIýXü§ýYýYýQý½ýÁýÊüÆüüüüŽüæü¯ü/ýýÈýsý ýØýü]üFýYýXýqý‰ýÁüôüæü‡ü«üüü^ü¦ýsý˜ý™ü¯üžüž ý üT û?ü>ý¨üä üW ü_ ýšýðýýQýŠýPüüîüÏü_ü\ýèý¡ü&ü&üŸüTýðü~ü<ü4üüüßüVüîýüíý ý¡ýü¦üæüüvüOüçüvýü5ü üEü üªý³üüvýIüüüÑüüÞýÀüôüöüGü÷ü¥üüöüüvüÅýPý¨üNüMýý°ýqýàþ:þþþ þêýŸý÷ý>ý¾1¸AÒA#? AÚ@àBjFöB¢?x@òA)JØK¬JåD*>°3À5þŸ6ÿA,ÿ #ÿ»0ýæýÐ!ý® ýñ ýÉýNý ýÉý†üÆü,ü¾ü²üÝü<ýMþ£ýýý‘ýÚýÚýSý:ý¢ýóý&þËþòýaýýÉüoýšüü·ý9ý.ý©ýXýÙý‘ýzýTýòýðü7ü~ý›ýÐý¸ýýý¤ýý«ý9ýBüüüü%üný ý!ýÑü×ýëýý,ýÚýyüýáý8ý!ý(üwýpü¶üîü'üWüüÞü·ü•üõýéü5üuü÷üeüüwünüíüýü´ü;ü.üßü?ýpüÅüÕüEü…üGýýüwüµý©ü¯ý"ýGýwü6ümüïünü·ü&ýòý™üõýáý!ý üçýpüöýðýIünü?üÿü5üÇý8ýòü÷üÿü¶ýºü†üwýðü?üoü¿ü‡ýýØü>üÝýÀý ü^ýü¾üŸýü?üü¦üýÑýBýXýýÐüü¥ü7üüÖýpüGü6ü=üýˆüDý@ý€üÖýý ý üoü¦ü–ýüÖüNüŽüßüÿüüåü ü¿ü=ü|ýÂüêü¤üüRý1ýùü=üü^üýü]üÎüüUüŽüýàý€üü®üüìü§üæü§üNüü'ü/üÆüUü­üüMüSüÒýüüýñüüwý:ýÐü­ý€üOýÀüOüßüÝüWüÍý8ýBýˆüÆýü¿ýÈýáü§ý ýÀü”üVü•üžü•ü–üÏüžý¡üeýÀüÎüuü^üüóü5ü¬ üBüíü—üõü£üü%üeüŒü¤ýÙýðýøüÂüýýZüGüÕýòýüþýÐü7üåýèüãýIüýHüüEüƒüÜüMüŒüWýüüOüêüLü_ü~üµü=üåüt ü§ü†üü¥üïü\üÜüÆüôüÆüýüVüýü«ü×ý@üÝülü–üåýü•üåü­ü– üüÎüTüÄüWüÏýýýIýIýÒýü½üíüÕýüVü–üWüüvü—ýˆýàüÿü-ü†ý2ü%üýÐü†ü>üFü üÖüWýøýýÚýSü6ý¸üÕüdü¿üüÇü_ýý ý:ýü¾ýªýˆý3ýòý°ý°üwü×ü^üüü>ü÷ü¯ýpü÷ü<ý¡ý¹ýýPüW ýÀ üý°üìý°ü¾ügý¸ ýp ýpüý*ýòýÈü$ýzý üÄü|üÝüUýHüÔüüÞü†üÞüÃüþüãüåüýüÓüœüóüÜüüŽý)ü?üýý:üÏü†üüÇýZüü³üMüîü¥ü7ý`ü.ü'ýxüü<ürüšüÆü½ýÁüíü}ü­ü7ý¹ýÚü¶üü¾ýðüLü¼ýüü/ýÛý*ýGýþhý6ý?þŠþxý5þñ2yB[CY?Ah?áA]Bj@æ>m<,BøIÞJÛI]D!@)3ÿÓ9ÿ}8ÿH/ÿ#ÿÁ0ý/!ýìý¯ü§ýšý|ýŒüýWü…ü/üýàü2üBnip2-8.7.0/share/nip2/data/examples/framing/0000755000175000017500000000000013224651032015521 500000000000000nip2-8.7.0/share/nip2/data/examples/framing/framing.ws0000644000175000017500000004754713224651032017460 00000000000000 nip2-8.7.0/share/nip2/data/examples/framing/framing_picture.jpg0000644000175000017500000003137513224651032021332 00000000000000ÿØÿàJFIFHHÿáExifMM*ÿÛC  #!!!$'$ & ! ÿÛC  ÿÀú"ÿÄÿÄ>!1AQ"a2q#3B‘¡±ÁR$brÑá4ð5Dc‚¢ÿÄÿÄ*!1A"Q2#B3aq±ÿÚ ?ÃF<+´ÆÏ±C4ú†ÔE¸`ŽÅmÁy·!ÇÃ5š=ìÛ¹”ݤYÑ'̹µ‘©ßÜwJ/ÿ”*¥ˆ`Ïêm÷ë©°ï6ì·5ö|N›p°Õòn‘Á݉ZvÒA”,€$7C*ƒ‘:“{Û”&¥î ±î©F ™œIUùSËõ 2™/ Ø¶Ç Ô.6±P¸{T°ý#*²Ú)dt×spŽÑ›¼8 ٠а—~éeÚš5 .sl2qeÔ© lTq“nJæº{Föóqü×Z‚EçÞZ0ƒä= 8¯ÈåÚ¿ETë½lú€À!`.óóò·~‰AÓÔά­• Æ75»¹ZJêú H‘ÍõÜEû®A­ëºåkˆ.ôû7° …NS‚^!|«Jm±ÝEÔµZÕo Ç‘ì8²éŒgÒÛʺÊ6ÓC¼Ï<Ÿ •K›¤"ä¢V]PùeÍŽ;ÝÂÄ­‹Ò™Ìöáhꪃœ Ç™ûgÊ«{CJb× ‰M„Ö4]=÷s²S£mÜ(CaΚ¦üGQÑÆcõ]¶½ò¾ŸÑºvI¶Ï\ÂÆÿ ;Ÿ¿Âå±>Ÿn£Ô’êSÆ TŒ¸Ü. Žö+éŒÀì”Ý7+09\çOhCßÙT˜éã°³@x_(~ںŚïQŠJW^žŽñµàý^Oóþ‹¿þк‘7Òu•NpeD¬tpƒÉ6å|UªVIWY,ó<¹ïqs‰7¹Gðêÿ&xÎM½žBW‚2ª¸XýÓÜr{¨‰7ò›E6x›&¥ ¤²¹®J|@™EÓ3u=3wLÑò¡é½ Ó³ØÜvW™.¤¤€9€xZ#¥ßWï©y‰¼†’[¯Œ7&7¤gÛ56H÷K“¡¨$ƒlK¶Ãb ù ©iZ]I‚©–=ˆàýurëµâ/a™Ee §”ŽÂ¾ø;„ÇD6ã”b™^ ÓM¶ áe '3+E#º‘ÆÌ©ƒXÛ›YN#Ê«‘Ê$a˜R62{'†X+0²r;©‰Ö½°¢’"ZŠzvC$cÇ*Šd8™ÇRjš;^å]’­"Tô›¤söä&ÔÅñe³·-"0²oÍ,0 geSMé¡‚ë%ƒç‰!,{£v6!V’=«MÕôBƒ¨§ dÇÕoëÏõºÍJquíéŸx©¯‘\£†Ñ_kIQ– ©OM(”S1€eL9*1„õ ”‡‚­B «MøOcˆ9+9,œÂ 9QHÖÙ#M—žI ŠXeYnšœ }ÖåT«`³Zc¥cH슷gáR ¹%„uÊveåY¨Ó"žÚHä*”.pð2ŽÇù8EIà"'6­¤–‚°±×sÁLÂßk:4utNYã-?+Ÿ½®åŽ-6!/µ,å ê}£†2cì+1¨VÅ€ó…¢{&ží…¤Ÿì‡œ–gS3b¿·ÜQh¤òª¶<É™—žÊ¨Ÿ¤ªK]% Í€^ÎÁ ;WIQI/§Óvw„v¥†9C‡g59šÉÞ\á€Uêyeá}C=^lAì±ÕÏÜA»‰Ê;]3¥à¶ÖÊËÕ¼€Š“ÐÒŠ°PšBÜ ÛÊRC¤%Y©~×Ò¨ÈI+jãc,ˆÁ¹à.ÁûÒŒÚýF¬èC…3@ap½‰¿øºä”ѹî åÆÁ}cû<éÏô.–¦§, ©˜ fq¹ì0°åÏ ¯ìêu§§Ë5 ÊØŸ<Ïk#hÜK°•ò7í_®?õVJúy ¨éÿ*N,?ŠÞJìß¶®¹BÐ_ÓÔSÆU0 ]–4öýmü—É5S%s‰¾Q*°»¿“ÃòlN]WÁîÞâF>rÛrSžIQĦñ@Mäö<¦›—õ²mб°yÂ_”‡ÂQ~K fIÆ‹¸›ºOOÒ³M§l`+À/?áezzÜkdn÷ò´Œ™Ñɼ¥<É÷þÚ ¢ü™©œÇé¸_ç²VV¸ág›;¤qqåZ‚B);¥!š‘­¥¯tv-v>V£J×6‘¹Ãiäv\Ý“½¢×¿K_éå/»Š¦c<>·Ói5fÇY§Éyão¹ˆås £s c…Šê:^¡š9b[‘~QÓTÚ½7úŽ’Æ2¡¢ï¢Û¿—unOôíSgŸ²'ù’9Û &•rX]®àµÍ6 ö*6Å?RÈ>ÃWˆRš[•9;³§ nÊ@,½r«*Ël8Rµ›¤hòUv?…zÎÁò±–¶@F\DŒ 5®Â=U†,íi&öYQé6[N˜˜îJÔP‚ìñØ,N—(vÀ8ä-¤<¢ìZ5ZcÒõ †måbz‡Hú–èß±ä{ÀòµU•¯‚—Ó§?œþþK¦>W‰e÷o÷X×Rk´ü/+Ü5@4ºHkClÞmåA©E,.% :Ü-E4qGpl*ë-P±æϸ“úlÆŒªŒ¬žÀõšñ¦2Å ú ¬Í^ªê§ç[‹öUêKâìª×ÅÖЂ“ôô5òUÄ'T‘ηm4‡2 5®-!ØÊÃC˜Á(Ö—\i§eÈÚuKb½ ?v9ù:3ºnŠ`ÓC£òb…W~Ï™'ººÛ-p¸?öZn× ŸdSy]’ J¨C˜àP®}_‚;~í/Ó Ð:?NQÕ×T¹²WÉìŒô³ÿ'û-Ž‘§ŠÚ—TÎnÐîr¬Í¤Gk±¶ø Í Ÿ…g¢öíÁ@Û¹GÖd¹µ ÈŒh ¼Ð€.œÉ­ŽBeLÍl.uódÊf©vjRˆéfvÛ–V²Xä¥Îí6 ”[þ›Ã^vÉÉñð±õRÂiämÀ ^þlšPµèS„ÖjLs<7Ú×d,µDö%Û®‰j•mq!ïÝqü–ziw› ‹„{Ð.VæŽG<ûW$éê—š€ÆºÜ.áÓô,4P½Þ÷9·'Ê6zYf÷®²,Ðéî”ú’gÅÑaŒÿ…r(CTµŠ¨©hžíÞë !œÜžã¼ެօ#^ÈÜA…ÅuZ·ÕÎéd&çÉZ¾¨¬55.ÚòC¯u‡©¹$Z÷FA|éãªá|Æì"ü¨£ˆœ•1mÝb¤cE±„ZÑÕÒçfeâ&ŒÛ)˜r¡o Fª1Ü^†ºx y.Ó]_QMQ3>Ñ“ceÌ¢v@ìˆÀâsn³‰7S#³éšbš¶&˜ä‘{+ŽÙ./•Áú{]š’f‡HH¿•×tÝQ•Tì•„l¡e^6)Ê⺞W¦‡Eƒ‘Ø¡ÚT‚ñµ„Ürziֺ溄Û\\ É(ªãäOKÇŽYJ¹À»ê‰O{‹w•Í‚aá`9鸒lŒhlªÔ˜%ÌQ{ò{ Íú®{#1Ô+D–©Þ×–ßõ<¶£…ëòléSd½qÔþßôŠ91oÍsOÿÊæ®q$ܯTT>iŸ$„—8Ü•_wk&T¡#ç—ÛÞM’;# '\p)Ï t %Í’‚š0¼U‰’Ù^ý~‹Ž3Ùi´XËhËȶâ³MálèáRG¸oõBreˆà"…™d³në«n16ÖWC,%2c¡ñ 0);’0qem—<<ž R"LÈ^ZÓb¯Ã@ÐÀç‹Ý_Š ì†•©xh¢,-Ái ²Ð>äæÜ$4ÐØDßä©÷‘n€F8ƒ…¢¢–NŒéÕw÷a¦üBm<Ì‘§Ç•N ¡À–¸Y%bר•­0V¡E-t”³ 9†×ò<ªÀ·:¥,zÞ’*£ÿÝÓ¶Ö¸,fËU}ÈïÕé8c pšæ©íðšà,¶ÉعG´¨ÿ)æ×¹A"ZM5›i~NP÷¼Dˆ­”ëf«2JÔWŒ+1V2IWã˜ÚVÐã©FÐl\WO¦ÖµF±°T½¡ŸH¾6éXš“¥qýÛn>ënNWŒ´iÈ–Z OÔzÅCm%|¶ð×[û Zο¨ÇH#üTŽhà`)M~Æ¥¼÷Ux^SÍߪ>G“8ýªÿÌmÚoöUåÆÊ(¦1;?Iä+(¥´z\×ã?î£ÀRMµÇsO)­²Ù= +Im&Å8ÇéPm’Ë›"Ô¾èÀ@ÑŠC†º÷XZ´kÛEæ=Ñ<9¦ËsÒãÙUøy]v»€°²ý7 æ‰1Rˆ—ímò|!ãú`\˜©Á£¿ÓWæúc•¦‚x- ½Åˆ=Ö?HˆËNµÁh° kG dcqÉAÍ¥£Ëc ã_´ ôÚʇ†–sžËÖÈí ðr¾¬ëz::Γ­Ž­ím™v3»µ—ɵm,ª‘§(ž6ÞOQôë¾ä~¢åC!¹R“` ½Ü˜!„ßÁ=,^¬ìaâ÷wÙ3«+vÓEI÷;ü)èý¥Ò~f5Ú¯_Q» ö…‡{Sý{êÖõ«½âJa9^<¦›“tÕ)¿ ÅF {H8PPiì'‘tÂRH©CJóB•­ o”PºZ¸ÚuµŒY«3¤ÅzÐâ0Ñu«`ÀKyRü°Çó$‘p àáW‰¹V€ö¥²añD±6á§½Ñ/L²PxîªR¶ãìQj†æ‘œ ì–ðo¢Ô$>!nÊÃYíT¨ù„ˆØAOO¨é^žÉ_ÈR5¶mÕ2H‡‹p…×BïP "ÄöPÔÃêÄYÍÕ¡.¬†²Š:mkéj¹iÁU]v…°Ö~"/ÝOïàá0µÑ¾ÄB+F£¦ÉFòÙßüÿ+vúKºÿg-¬{&‘…#ÚZKH±!5ˆÆû†9Zª­DÀp{¬ì Ý(ZzwÆÚpÞá ÈzH´cò ¯Ý+/Y’GÊÕמ{ÜáeklI²ßŒ j¥ kª‹`-Q“+%Ó®ltÏuî\QöÎ ðš¿YÖÿ"û/’…kF3N,}×WðB©=ߊs Çeœ¿Fœhæ`§³ ›ãÛ”On. ¨ŽÌ½–‘ÞQÊ*DéK`#½“;-Ð}OðCŽR4¤¾µI¶vHš+ìoÀAAF4ç‡7o……¿ÄÓà+é—°y!69¡¥}Þð2’¢ E÷„êysŽPŽL,³Gi龿§¦ÒY)ÿ;´n~Ûxí”ýCöƒ®T4²9ÛLßÿlšäZtæž 8w C,ûš î±RÎ=}_žX^§Y­¬yüUT’‚nCÜJÀk7S—œç=ÖˆJ7rk͈ŽQop±Ç…¤_æ†MÄ&Òù½Ø²‹€|¥q¹^n^0u'ò>jÂP:Nà`|¬l®.yq9GuÊœ2œYçQG ?³Ä}Zþöô^!„ÝzÇ•ëÝ-슉{¯•ìW¾ëŽ$!^á;•F7›vS´÷ "‡X.9ìÐh€=ïwq‹-GôY½\Èï° JÀH½’ŽKüØÂ…ø–" 0¡¤«a¸)tžÆDôÄz¡ù,pBè1)i‘y€u=ÂßäãáïÍü"Á¶`!¦q‹„v×möé—‰pRƒ‹Y{hHn8Xç$±.S±ƒmÏ)‘·7*¬™)5 MíõXßpæÈ}4®‚v¸v+F[vœ °˜jN0rõO²êʵ”µˆÊÓ+²Q¸}û¡–Z –þ'I ¾qö@šÝβ6©~8µ’Å#3{"!嬸* xìЦ8a “yfa*f¸²ÏVŽ@Eª‰å ©7ªV-hóúNtdÚùGY9ò³:[Kæpi¶rЉKy)œ×äÍ&²ÃÐÎo| ÕoßR]{ܧ6¤í¦ù=IIºÇfüxá䲯‡X%©ŒOÂXmaœ§V8ª¦û "²s†ÒÕð•åG» ‚Z ƒüGÝ8r£ Û”à¾IÁðˆéï y7BƒÿU<2–d”㕃XÉj$õ%ÁÀPœ*±Í¸’NJY%·u‡\h_9®Ì²É,ñÙdÿ€²Í˜ (Äu 1~vE¬ÚÓ²BHCµ¢K"}¸$)Rß*†§6öÆ/‹œ*UÝñµ4Á÷Â|d4l•;•mR EN i÷?Ÿ²aŒ¼ò.TÔì`ZêƒQRùçáS9Oy¿ 3ÆQÑXX>wdÜääþDÅø^°î¼>Jö,®fxr–×û¯ %Ï…Ä>Éâɇ•àH9PÑÄ„–Êð7O²©Ñèî§6;³òµqCìYîžk[LÛß9Z¦9¶²Qòc:Š‘í*f¶ëÍÊ­ÂY7±„V‡Q UEÑ\Â<¡tãmSOk¢˜8[!lôÚ>©¯ø¦çº>„Ú¬”x`,.õ%ŠB?ªrP°.+E…‚_S[Âuó`UY#®©×ÓzÑ©¼+€\áLæ „(RêòŽÆLå5·:7páb„¶Nw3®"è¼ôjœ6» ½[@©/ÁÂéŒ%¿ý&½a³l0¼ãíM/8û'à&±•×Åg{ò‚H}ÅW‚»}(tÜñC¯S‰lZó°ßçëdo^¢4Z‰Û†Iï GW²xça÷1ÁÃîNÖÝO©hjØØ,|ò;VÉŒ»mÿRÀªì˜9K&/•H>Ò_²¬#Úž ‰ÂÁ6®AéÙV‚bc÷QÔÍvYf¡ù  Ps½çÂnál&{ÊBᵑuGÜ᫆¦°ŠZXÿ)¸&Ü«]!<ÛL® wYoRÿ&,ú—9ZÕqz_ý1ŶÉMôÉÈu ~ˆ¥öúƒpï’‰CÑÚ|M¸coÞâ÷Dvv8ÿ ûc³Æ9^<›5Ž'À ³ÇÒ´ qÚoŒÊ˺CO|BöÇÒÚ£³$áÞŸè—a· ´?¤h\Û=­y"Ä‘ÀøCfèŠ X-žn­–AɈî˜@ºé= q-‘Ì¿ =WFMwE/ÿ«‡ù\™ÆE¥H,ˆO¡ÖÀNèÁ·‚ª:žf:2?EÍ¢M&ˆò(Û~Ç G ¼efôf9´€›‹ž Ð@Þé-ïòcJWâ‚ÊÛG­HÛc²¹l%s{Eh§l ü«ò?ÜÇŽá“X2B>rYÃ.™ÑFà-¯f‘x]*Qu‰aÜ7å= Zå0ÞáJ£8Vò¥¶m!L.£,€úœ;^ÙE³‚†Uþî9-ð´Uñ‡Ò»¶Vz¨^”ÿÊAFQ,¤Du"˜yNs½¹Pƒà§v#Z/6«È=ò‚Mõf ã”_¨£jðYi†c¹ÂÒÐê•“𞻌]›u•¸•šiË,{§öWÙ (¹ÁáøiœàZU}ÅK‚HC%·r…ŠÆ‡p–K”òÙ»JI\I9UXí¦à©àë=wê­ÂÁ9Êa)ä&í.6 L•”ð† “…r—O©ªp1Dç6Â; ô´šƒ›5I1AÔý—MÒè4Ý22–œ´[{…ʑ̅ZùY‘‡ÑúP«Û%S 0÷.ÁþKqCÑú3 ÏxæCÊ2Ã4¢Î6o„gKÓ_Q(l1n—vHìú‡w†ÍVŒÄ½C°.ǸeV—¤(¥f×:ã°Ûk.щ¥ª6¸Áj1£„˜á¤a½‚|ÈÁí–ŠË8ãúB¼†7ïýÕYºAïf oÏñÂêUlõä%ѵŸô„2ZVƒaÝd¾¡&ÿZP9%_GT7pŽ/ðí7½ÓáèÊʈªŒ™ x]‡N§Žž_UÀ9ß=‘zØ)u:]hk­‚0S*>£$×u”.¾·%øœ>*(éŽÑÒ<…v9Ñe¨Ôô³I)lÌDMƒ¬€Í¦î¦}ÿåw+ÑWÊŒÖDs¦I‘þ&Ã/âû•‡Äòׂ×ANkÁDvÏ€ýp[üC¹) tÃçù¨€Ç)¦;öQ“‘ç×O{n*ê²þå7£ä(f§¾,¬¤KDÔ¦qÉÉE-{ÜÜeçSr,›$bÑIÀ.¢¦7v¡’\H°Dj©ìNÉ"±WÊ9tÚX_J ÉDYLÀT´Û|¢ÑߺAÈk³QüQ$,ÚÇÍ—š1Âq¸o)d½^e7 Ñ?p,ºôÜ("u¤ D²ˆlÑé—Ã!=‚¿H=”ZKK`p<ÙXZB–MælÞ+G€¾ HEŽ ×±kÝ U$sIܤQ·žSîªÎ%b˜…¹o„öã+6Jÿsml®‹c&g€HZ.ÈV£Ë»6×ZÓ,H–ešS‰ö•6}»© ö§ &Q¨BeâŠÎP©y%P¶ÓØëYÁ%¾W²G+Ò T5Mcö<à¢/op³­$J×5»%;›óÙa8| î=ý_YH²sHIíx»MŒଆJÜm.tö’ÚÉýi±OqÊN×M c[w]KŠ:jf48`ZÞP|›¾Üp½-÷Ù¡§Œhdg„nŽ\Û Tò· EC&Eí…å/rõ›Eå‡hhÈ¿ ¦è:tPÑÆñAp¾+PÌÒ½íýBÐu¨LQÓ=§sE¾éäûì!§×EriHèãgp|’‘·[mjóÒ9ôã'êBÅÈ ÇY¹w}ޝ(É7¸º£,ƒ„L³Ün |@Ü´eƒv² ´Ü'¶ ·*WÄ*¤Í-½²®Í˜Ê#jÞÉ£toË\,n±ºƒ§Õ ¤˜Ý–Ÿðµ<Œ>ª8«a}<ƒä ×ãÿ‚û©ÎÀ.}5t[dhÜ8wpƒUÓOHââ7G|8%ªlú}S£~,p|…fI¯fÙlE²ÊípÜv…s©KÐskÁVcªa##*ާ`é·%ƒü,ÌÚËéÜ[cqç²k\ãbÊn,è,–Ü_º™¦ŽE—*“©ª›ôGmÝ”úš¶äï'à›­º#=uÔðÈ ÑSŸÍý×(Tj.h©|÷Hz¯T±¼ÀŸ$ewÛG#¡UPGŸÌ@ê(vÞÅeRê/;Ÿ5ÏkŽ›ÔW7ÄòJt &•Í£ÍÉ7DDE¼…šéíbIi¸X-$u"F¤MŽxûŠ%h^"áx¯rRçèÁxU™¼ÙA /3@ä•nFÜ©h üíöá_¶"W44­Øæ!M;}ÀªìqÚ…mÞø®•?r¼+/$<¯4ŽˆʉHÏþ äL €Nì£ ÁS’…R¹¡Ðü…k²‚¢å…ttÉ0ïfp' »ÛnWª}µRùŠAoOqO~ Û)ÔJ9.9á¨.sÐéñ„UhÖ`l¤knxHÑÚâëж#c….à—ðÛ;«±–†Œ¨æ-µÁUÉÛ l„û] qYš.Ì÷Tžë”ÀMÕ\Ù¤m’Ò5Ú"‘î˜âØu¨ŽF³×u‹ÓÜè"h´œ”Hê&íi÷éEõ9ÏAõMãfΞ­¢ÙÝ6¥;YsúZÂZ ŽQº:¢H$á+»Ž3®GC¢®‘Î]k4êÀÜë;Îtê·\63u¨¢”Ø9Ï»—ŸäÒ‚ã3´éšŒSѵÛûJ«iûžj)Ø3õ4,u­QNÿÊ~ ®ÎÅm)+j&c ¦{ZæÜ—vJçÖþ $³”gÌ^ʳÛbµU’R6+T0ä2JÍNÍÒ5¤6ø (¼§‚‹£%Ü*òÄl¯¿ÕÝ`ÜxUžó‘¶ßtD[ 4G Œ •M’ C‡ŠÓHÎKŽ £SLÉ###ª·«Ù”£“5¨Ñ3R¤6Ä \,5L3SLèÞsWDcOPXxìU}SI‹P§õÐ%Ÿ)Ç•ößWà”öÚ9Ï®ð}Æÿu ] >£fÉÙÈ…n5$¥’°Rc\Çñ„æ2ÿ(°)G:f^§Hšå²ÄvÞÁÝŠ5ãy6ìºd&9™éT4=§Ê¡_Óís ”Þà?†Ù \”õ/@ì£G<1:ö²cšEð´’éáŽ÷6ʄԭéº3 mÃMøR22O ói m¿É^Š„7‘eVÎÈK¥áqsÚF÷[h` eé˜XÒð-{çìµ~ÐÛçùûŒsÅ_‚+†Ø¦›‡)7’,˜ä¿ä`¼¶ç4{X,ûœQH˜ß²ÊoE¢‹-â×V"7k…Õ`B–ë] $h†>íq ;T“›;áW.Íî­£™d¥¨˜ë·©[ÆT4q(}ͬ¦hUÚ}ÊvŸÕfÑ$ŸeÙŒ’,¥)²‹°€¨½,a5ÈÔåo“p¡— ·Õ\é;¸„ÌâìvOk}’1k)Ê~¢…Ô¢3›4Ù p/Ž­Xa€<öR°BsYs…n*wô”ù±2YØÜEøL‘…£”R:Wíú3ÑÈo‹SV–æûŠXÆéZ<•aôrƒÂžŽ†GT4‘ÝKxF+Ѐ´›‹ùO}3ÁàŸ²Ñº1{ ° °…4ƒp᧨´m++›GÊ/§¹åÀw-ÐÖC”ðoté‹Zư]ÝþV¶†F–!±a4ù]»­Ê5âe —Ÿ…çî§¹¢·ö›R‚•ÁÖmüÞå¤ë3@׳‹w\òžŽy.u‡W…Û¾¡hä“d®|XäÕ\þŠÍsKÔX7Ý®•Hc})›Úü¬5.§£P½þµ|{ÛÈÝu3º·J~ýµ;ZÞäwÙQ}?+8dÿR¾Y¢}HÞZÖ’%A,ì½Àå‹V¥¨¿áꢓþ—¦tĶã'ÊÍñT^u~KFHœÂ/÷P> [v› ±{ˆÏ*7Lèòã•ße¯ «QR¶•ä[7º©¥®Éû£L™•ÄX[„2²ÐIêÆ Œóð·ƒÿÙzU¯¡Š¶]¶<¬%~›5†í»;Ð#’Ø' *©"©„ûGòåG"T¼? ¬­KhæMqk•øjËB#[£m{Œci»h_ È „î»c?e‰+é`®Œ¹–l–äT’ÓÊ[+-óØ­¨æ‘”é uåh £!È”tö'J{2­sYÆ8”š¥$´oÜÜÆN é]Êc ©, '¯ ßtäÄGì´þ¡ºÊt¬'ðçÇù­cqržåË61ç8‚­÷—é²YXk}ªvPIå…à¶á‡0´¡c”R˜Þ xU³Ã£é;N V:Ͻ’ä/ a\šQ¸«ˆ÷g–Ü(ZàÇæy£fS;ße0PÎÑ•3pT-ÉS4žë9.‘×Ûä'„×ñª,e5‘ÿoy6%×q#k^á‘×m‚uGðFÐ: å6šÛ¤·Ù\—OœÄÙFÒx¾TÆ ƒE¹¬aÍlMÒ“›ìg÷D¡é€ßª¡ |5 ›¬\ZÚ{Ü•BN¯®s¶Ìáz,/Ø‹25ÍéúF3Ý)wžÊ)tºÅœ7[’JÆ¿©5ÿ÷.ÑQŸSª–û§y¿7+º¤NÙ­š=>‹±·ùUᬡŽRZæ,cæ‘ÄÝÇù©©\Kˆ¹Ê‰% ŠÙ­–® .Aû*• „ý:…ò4;aqñdaúEC¡Üè¶4Œ!›KÐØ<ˆ"t²4-7¢þ#ÝPuN¥´ÞA,½ÃyA+uꪗÆãíoýЮ»QÒ-+}7°j´“RF½Ã–‡ )*ºÕдTÍp^W3¤ß‰i.&øÊ"çÜÙ^<×òÙ„¯—Á£VkU."JÇíwð·Ûý•ˆ*ªg=î6òI@¨iËÞ –®†ŽÍZ}šãüQ‹²_,|l~Û’£”½¦Í6(‹ÚÝ e,4ï{M•£S³ôRvâø5Vˆ \›Gð»#ú¢ŠÌÃlº˜¶ß ò¦Xh´l’ñ†ézâxßjÊvÈ ²Ódf—¨tíEûY!熿 œÉ'Ê=†àP6}6©n+ &<©¯Nº[îiS~.âÎÈðW7Óº’¾ˆµ’;Öˆ ¿îµTZöŸ^Є2ÿ±ÇûyI/ú|ëÛYAÕòSËßs2¡”_iÂ]ÇŽZ ‘¥§sF >dž¢öÞË?¨i푤Û+A CœÍŽMšñ{*ÂR­š8©#žTQ>2E‰{Ák¾BÜÖÑ «9YAÌŒp›Õz— “¯—±•0:EÃ…²²zžšú9ý¢ñ»‚¶™iN’ž:¨ŒR‹øF×s­çàu)/ûÓq†im Ü þlµ2Sï87A4ª_ÂRHÒnOoÖwÂᤥ܇–äJÄR%"Î*¬Ã*ô²¥5Š&þÈ!ö}вlˆQºñ«X´D}.XØ¥q‡vMÂ]÷!ð\µg• €_ )žæ÷:n<*ã –FÛ]Xk±eU¤)˜TÉX8S4›eWa¹V}ÙYH²&Muí~éܤ\edXÌëÍöÆ>I@‘÷ì›^‰ï…»½ì…6N&³¹M©ž+FRYdPDç]ÖÀáVªn 8 @AõfüÝZí +ßH–5ÒS‹~‹ SK-<…’·i_BMÒ9Xíw§¡©c‹X/ð½b¡ÉÍ»¥$"ÚUE$îaa-ÕQG;³¶ßrµLâ¹ÉG4]9óÈáfó•B->W<^Öû­všÆGZM¬¢K:%I-šZ9i4Ø=¬’ܡڞ¡QWÚçme¯µ¸ Û£'.QLøDdï`ÝfªŠyg;Ò9ÝIpí'º¯÷V«ÃMd»MÁrªµGÓŸÎoݧ„Èð*fÞv×[ƒ{šHÊ¤Þ µ°–•§“·Ú´ÅLÀÞ\U*ªê}2“$n¶MÝC,•†G| ÝQG;eYÑh(TïP¶íG…YËmð¹ý'[Ç[ oa¶TÕ?´KCbŒ¼ðnì´è¿dl×T´auŸ©ŽîÊËËÕšŒŽ¸kœ\øi:‚¼“ÿðoœœ)ÂDlÒºÛ*¤û°³îÖõËúNûžöQ;TÔñ›)×ì²LИ0¡te¦à êZŽãa óò¡’¿Q/¹•ZL”ÙºÓºŠ®€†HïZË\sú«¡Öè5 ›^9c°Bâæ£Rsw–¸·í„±TêPÊ$is\)uüìÚÓ «‘(¼?ãpvœ«1È?Â纻];Du_Xàñu¨†®WYÍëÎÝÆqxcš®RA©¡g-U ï·ŒU®mp±R¹¦Fð„Š”Ki˜šÚ1ÅÀcáÚZV⢘€VWR§0’æð˜Õgm0i¤†ÓÏpXM®‹én ’@x ,‰Í}ÁÊ/¦Ö‡J3’8V¶§ÕàµV,ášIËmÍÙ\)ÏŸpî‡TO’C×[5œ‘ã/¼„JŠAéœÛ+<ùìn ·IT@çù-ç^bd§³@\/Êðp¶ ú¯›”Œ«ìp‡ûL׺ ²fÇ\=ø~É^6ò³sÔgƒ‘Ý\¢HšoÈ]*ž™nëñ îTÌlP#R/ÿ•$u_+LŽèÐFñnB•Õ Š=ÎrÚ»U:½EÎp¥f¨rdýĶj)ªýgœvW}F[ê +CR[ït@U‹_rÊtïD« µ4³'‚¨R†ËP;†åC_Sº<œ(ôé…Ÿ%íØ-ã«"SX Ô–ì7+9] ±¹Ê¿WT3•ž­¨½ò·¢¶dŽ,v õM½ðÏÊ UÊôñb,]NŠžk’ÀJÈ×Ò¾ ˜Ûp¶Õ¿¼(Xr#®N36¢G°‚‰EAZáíqZ£ÕZ8€ÆTrU¼s¦V úŽû÷Uß§T\™G…±—éBê>’­ÑR9Õ|F*·°Ž ¦M‚+¬ÿõÎÊèÔ³AcUä ®ÙãÓé1È—6£ÿÝEÿP[šï ,æA4Zæ¡w’{Ym):6±‡8ÖBºg÷­ýVò/ܵDVVLÛ3îé}9ƒÛ#ÅŽÑʈtîžÛ±6=‘©ù*8¾¥vBl«MÓ:~\øƒ‰î{%›B£h#eÁÁ=Ê?îÕZ¤¨',4ª"áù $a9úEd9†›r>¤êŽäpÚU!hü‘aÆUWé”ÄÛÑoòFîÊ€ò¥3²À²iÐ4b1o•gÑÄ?€#3pU7ð¹’¢#Á`ÚG…¥Ój½`r< ç•b‹,¶2…¾¨Î;7ªÆž Sc¸? â Åíy¸ò–.ÙQ«àýÒ Áx4®Ù«¬i³°v©âRMð¤¨&ÜžU7wX¨(½J@ºšc¸–( 2ÓÎÇEŠ$ôÛ ãº.2oLúJúìZè|õ`’7(ª>²¨H¯#YM’ÉS¹ÜáX¥© ‘¹ wM+iA`ÉIä0ê‘c”ÖÕ[º¦ï¥DyY(#NÌ¿-H|dnåz–²Ñl.àª.áEOõ¿î§¢Áe'€³êNëßù'2¨ùCÏe+8 •iÙ—$­ØÓîTYRdšäß* ¾ ‚›ë Ê´‘››É§†¦Ìq qXOñ À¤þ+­)²Õ]Y,uܤ¥œÇHÑ{’…MÏꭟܲ—Õ"²›=SUƒ”¦{ƒ•n¤›³é?dM0@ÒgÿÙnip2-8.7.0/share/nip2/data/examples/framing/framing_corner.png0000644000175000017500000004232413224651032021147 00000000000000‰PNG  IHDR––³cæµ IDATxœD¼[Ž$Û’d'¢ªÛÜ#òÜGUƒHþ z GC gÃÁpì‚dUWs2ÃÝl«ŠðÃâv'"ÿ™éæû¡ºd©ñÿßþ×?~||xm½û@„F‘ëýzEVftØ€{vV`ȽUQÒˆ”Æâ:–%%‘1f·®«ZcuŸ„#€,ËR iÛ L€²‚Cpæb,+ 2lƉ dG”³wfÇêîHvŸAFÄÌ2‚k-(À–+森 €Ä¹ÛÊëêãñ̈Ý;˜aLíHžÚFŸ{Wæ¢2 †á1 j 2×€„f¸bõÈFqÁ°=j„È|¬ekdPÚ´G’% ùŸþÿ³4üþû¿ÿÇÿø?ýùç¿üüõçµ÷Á<ßMâoù+± Dž>5>5ûñX3Sëè Âܽ#keí½»‡tisoõØÈdÒaòÖì͈ªÌ©{Fƒµ@ –í R0$–<¢%H2”ɈØ{ˆ§íçó!IñAÀŒ ˆÊnAX ŒU =€ IÒ)´ýù~ÉxÌw  ðÊ#"VÂìSó8þ[ûTÃf­Cž‘5žADf”„H˜´Ú+¥ ° #͈DEdÀ ‘3°  ŒzD2ƒ&@¨#ù¥®ÿåþÿóþ¿Þ;þüùÞ—ûxÌ  l®ªî uÄâbѱª2v` ;‘Th'Ë ‚‚ÉØ’dR¹ L•Õó8Ìm`2H aŽÂô½-’"˜3q†UapÐGL*a$P3’¦2ÊÊJä&]e˵‚#D,ÅmE7ãx$^çîÑóX—Qc]û¬”gF:ÄBfÙ“4£´°{î%×ÛC¯Ì™¡±2j¥ '¤ÈH(ˆêÀ`Ít$3£÷š&Ó†]ÒhdÀȈû+´.L{__üQÁu¼âúu¾<ûñx"08~¿h’ª0½÷Ùg"<¯ û~v޹FØ#•e±g2I33ÒvT’²‘4àÉLè¶Ý#)áŒivìQ„«I&`ïë [²¬žÊy½¯ª2ÉÞçœ#K 3“eló~¿‚ÚçŒóÜs~½êoåÞçõΊ××P¬G}}mñŠLZÿz½~üøÍŒ÷ù¶­î}îc=l׊õˆÝûõ>ësÕSó"ÌX{¬ÕPØVD0r·Û²A„ᬄÆ0€òÀy^ÿåßþåñ\—6ä#×)Û¸AÇ}gd̾Ιã²»‡ ÉŠ † ™c‹‘•\‘qÁª\#êx$é %]çÅd僑ëQ2 W2q¬Å`Ï€&¹÷Ìn[$332¯«¯ó:kuÍ×y‚z>¶!˹VYºÎ«ªÖzì½Ç¶u¾êXËž×»Á §FGòã82YÏÞz×ñOÿá/yŒze úXke\ïwD}~~l™ñ<>L÷¾®ëÊ\{KƵ÷î 3Á¸Î³ŽµûŸçžãX•IàëëUUcìVäúãßÕWeœ¯¯u,i>>?NÆìùã?_¯Ó&³Çck×_Ќ툈 ¤é‘@&‚ =ò@!ü>_õø~¿j‘üó÷ßãYŸ?~ýùM±ÒÏGåÁ¬ª=çQ%r·>j•›‘k=Æ ²²\€03\¼/(2C‚¤Ê¬È¨ÊÌ»îȈdXŒÈUôfDÆqž§zŠ‹äª£VeVOg¬ p`ûêˆõùøœ­Ì\²‹ÀÊ5 5V>L6ÓŸÔÖûº‘‹«Žã9󋦅µFãè¾ÇDZÖûëÕg|>=s—B«ªK€<"ƒG=Mæãø †Sá€IÉÇzNkwkÚZ”V$™á "˜U`H0D²‚ÔŒ3Öù¾´µ2?~ûøùÇêþš¯Ÿ?_€ëx>Wc¯‰ã`ï 5g¼¯Þ{ï\×Êçóˆð¨wÊή=DiËèzQ–Çdó:· ÉŒˆ 0½íy<_×–mfwÓ:Žª*YÏÏÃàõ¾>ŸÇ¹Ï÷ùò¨ÇÏܲìÎdï}žf€Ep¿¯ˆüñãã÷ßÏG=ÖãçÏ_½²VV¥û}½æ÷Ÿo˜d{Ô$WBòZË´ºŸÇ×:>¶®ªÇôU•‘1sík˜ÇŒ^_§¦‰ï-•U±VJ±¯ëçϯéf䯟cûùñ¼QÀ Þ¾,3 «{$ÝåŒýù—ß*”ݵž†þïÿçÿ=Ïe&-WF>ž µ–(µâ}¾BÀL‚€²E°ÇvÌ8ãÈ\ÒÌœƒd™$Ò†1`P6L3[ Ì,kÆï÷;ÉÏçs‡á ¼ËÛ Æ"xÿ À0¥×ë $-#2‘2\UIIWUãý¾Žç#ƒö4¢d̵A]çiéãã) éZÕÓr=ƶлk13÷õŽò±÷aµ0ÂéªÐȤ¦40cÉø ›deDÀ6€’„m 9¤g(€’¬=µrÜ눯¯Ÿ¿^_ÿöï?ÿ“äc=$ºÿXõ¬Œ¯™ ævf ƒWPᑨ­ˆ0PÌ »‰°% èž„‰•+Ýo[‘Ë2`†mõ™¶ÿko¾¯&ùûŸ»ª2Ã0à0)Mp‰Óß-°ð˜3{:ȉ‘e¼‰ wãÑ`¼OP04#p\Ó§[ÌXŒ¶~ÿz~Fp›Ð £<ãÏkt³½I‚¤aX¶2“ I$Eæ]ÌÃŽ(™F%ïOj»û¬då²)@åÝ™A+Hã}}Yþz÷ÿ÷¯_çß?ãYdÉË ™ãH<lž­m[&¢¤5ûÞý¸{ Ñ33sWT‘¡!N&lÚ8!“`ÀšëºÙY™lÔE˜ÃþÃ<`ZC7̘‰Ì™ž1Ì¢Csíî:ŽªÒ\ æ%FEåh,Ï æ¤m¶Á Œì»[&`P0mdö>/&<¦D-:„{ÿ˜d‚¸yôØD ˜Ý‘AD Œ!‘ãqeÝF)³ï¯JûŒ $g_ Ît­Ú=˜ùòùãI71ÏGFˆáÈ);`FÞÝ4²j6<Ž¢M à0$LB½A¶÷Ã+ënþ£2Àëx½®Ñ¬u¬ã D´tS2B3×:÷¢-çʨ ¦gy]W®$s@-õb"hcÑ ÙÝ‘‘™}ízFùpL˨¯®$=c0kiLSî ïëbIq³žuï–>>?Çm“N"$;‚hd°¬¨ÈÊ™¶:ÖŠ n@×cOU#2oææ°-&ÔÞ}î\cYÊ `¦¯Z)ÍóqüöÁú§Ç?ÿÓçûõUkU®«;²vs$Æñ< „ºwëÜÞWïî\ˆ÷è^²3#€ à°šœ*ÊÞ×\{Våʰ†à{µÚ˜¿~ rU¼Ë“²¿yTÄ£"Ó¦ ETÆ‚)IR«%Q0>ÄtØ®DëÚsU-ä £2ˆ´w×ñ7´-i ë º3‚$ ŠèžH“q]#fD°lI—`2à¬X’A1}ÓTfVø¦¾÷i$?hÞôç¿u÷¾ŸT®Õ—ꎪ%œÏc=ë±zœÇñ÷ßÖ÷÷çß~[ýáÌ4â¼\y\×õñ\GeÆëõzŸý뵯 i‘ŽH›0º7@:nhËBee±Š$Ïóz¿Þ°3A³²âû9a#¤©•«V0Á@ànJ<£™ 2™ECÁXëG÷–´wÃÁ`o‘AÒn¡z=4òXe3¾ñ,#×u¹;b­õ&Ê×ûu¬EÄcÛ³Û×ÞȌDZfÏ¾Ž‘Ì\Ç:ì–Žž¶çjØAß8˜’my†3"4<7ã¹s… D1™K¶vӎ̈ÈLYß)È«ñoÿö‡E›ò1ã¨ÇϯæøãùxÏÏÏÏ_¿ze1ô|þö1êˆþñ<*#+ó‘õǯ—‘¶‚œ†íã±%s,y’ލÊ\µ>Wö3¥™}Ñ0dû¨ÊÌÝcØ@&‹ÒŒûq¬u¤¥ÞÓÝÁ\«"£"3¢lqž»X4,¸‹=‚™«ï×µ/+ב"IjlAÿòñy§Ex×Çq4ŠÇZ ºŽëºÞœG•;ðÒÖ€dpVìu„UF´ô>ç&ò‘¬rDÊÖ¨·æ^”p×q̈àÝ"ç*[¶3ƒÇÃÓAF’TDþcæˆk·$«ž6¾^çµe׌Éõ¾ðókÿùÇ++±õëç/‰¿ýåÇãY• 4ònhpž×\3Úd ŠK°@+v„Â,ƒ¤Åž-«»µwpO[Pˆ¤,yÜ—öiGf ‡Æ½›†"ºQ7fìãÞPóýoŠŒô๨äˆ3Ž=»kEe½g´gÆ©º/zº•òõze-kkÜã…:QKÀy]=ž½5â9{ú®£"C# P´h#à€%Žû›×ÌMD5Œ¸Ï’ªÅ »ißÕƒþG‘Sd´% ìž^ǃaU«áv¼·üëú/¿¿=ýú󵝸ù«+Yus×`,’3ÒÀÐŒï»- í•Ý»ƒïQGŠ -«AaëΟHòî‹áȪH+"l!¢2ëÍ&•ÁÌ äŒG&jŸ—ˆ€‘ÆØ|—ò™3­½÷1…ó IŒõ~m€F؇±JÞ×Þ«êñ\¿öËÀÊ’<Ó¶³4n çn8’iëºfï«*«¢5Ïçç{_– ƒˆLÚ€éºifެË#ßMÈû ˆ´GA0<Úß ( Ý}šªÊÊUYöÅ -íÁû×õµýç¿þý_~/®çÇo¼¾`çªZ #C$Lï½¥É\w’=£Ù¶¾¯8Ù¦d{îADTéÁÑ™Iº}§0•¨Š±ï¼&ïNaš÷£‘G˜¡ ¡+J#í½ŠŒº3Èû¼º¿†çh4Ç ˜wݺ®kUÕâÙû¨¬bwg¬¬ <²- Ø‚)‘> W®¯÷9Òóã°\¥î^k ŒôÞß 5îz­Œ˜"±aà>´,Ϯ̪à˜ VïÏ`xzϧ<Ɉû¾š.ò±âŽfßï××ßóâdçÇçGÆ šÑfJÀ8([ {ÚÂÒôueÖªèìˆÀ½ö… ²`‡­Ü}•l1°-HÈHܶÀˆtFÎFöØVk?ŽEÆMè!íÞÄÝ«1½ño_–уu<ÆŒŠz½wÅBlº›xתé®2¦kÕuuVž×YÇÂÝ/ ƒ&ö%\×~OpÖñüÚç[ÛØ³÷ã(P†˜:˜Ö¹²Z¶¹Ö#˜3ò}ÛÆÀÖ]‰MwÏLÉu@ãx¬Z>_BÀœÝ;òÞÙ¬`°‰ (0ßû·äßûÈrï½ÏÈÉUTÒI–îF¦îÜÜ¢„ž~>ëã3`ÝÇþuÍî»·K„³"xW$šéAu÷Lƒü¦qcÁþ.Ð'¾ž$axî…½Ûæ} ˜™Xaí=Í ñaíªåfäºv¯Ê½ßUÌ÷¹‡«ê:Ï*N 6°V¥€@þø<XG (ý¼{²žý§žM;3k­÷ùÊÐ\ûÊ\dîiƒÁ:ÖqSÉo\|c9#7ÝyÞÒÃke“WŸ?xܡⱖfÆ}í+A¯EÍHûº®i$" #þùŸ~ØbþüåŒ,~¬õ<òùHR ‰p3™¹lZõ±ðùYÝ×Þ ÄëuvÏãùÈ\DØÓ""“Lj¹·¦ÛàZB3ÔÝ +ת[Úþz¿@xâ·qÑW_ž©Z€ŽµˆBæ\Εy>Þ{®÷{QëCÝ7ä¼¥ÉwÚÃp„«¦„îaÆ‘²³"á8Žƒnãc­XGŽÑ­;©ŒÈôªî:H›Óm©ŠÂ\ë€IúñÌ•  dժϿÿëÛj`ݰ?+{‚AÐâ¬JNïQ³Ÿüç¿ý8ß/¹VoöÌŠúXñ(üåc‘ nl–x|Ô̶”™ÛÌTy¯ej:œb.¯ÆÊ® R œT•&eeF"£Gûj3×Z‰XUÀCjÀù-[ž ‘ŒÙmsÏQו3úÇeã:žu];€ªz<`¾¯K×çš™Lvóóãqç]1ß%½ð^GJSYy^ÍÀÞ›!y\Gå:ŽŒ¨ŠÈØ=#ZºzG jõvo“k÷HÖ·ß„³|€qÓ Òßõ~¹µ*ŽÊªe„‘ Š›´ÝTÅ3d-hzŸ&h5한Âuí¾äéë}îs³ÑŒ;vÐ7¸}É÷Y¤³ó>B¯îMÀFoá ÅñÝi˜ÈÞ 8’ß0ÝFAÖQÚ3UiÞijà.53#y_~¬¸eŒMµúª›XÚßKm7L›ÚÇsY#Òs~~>f´hŽŸÇzŸ¯£¹/¯DFEâ®›@>—0+yÏ×ù&2+´/ò¨Å„WÅQÇuuß¡±²¶‡š âfà ,ó]ÄÙ™¼?“qÿAÔóùœî\)b8§=v·îS0âfþW`fæÜü°)xzw¿¿^¯½ù¾ôó×eñõk*ñï+ž¥n02Cî:ðÞ§¡uT’Aj¾ @6‚ÌJò'ð}ßPí~Ðßl2Hðe“iB¼yF­µûüéqdC:ƒ½-!3¦}^[2îØ«¥ 눬°çµ3‚ôççG$»G Ò=>ÏËJÛÀfÌæ–Hu,ÆÜ’hä2C7î²æ©÷×iëýÞEV­¬”è¬!õ€oÒÉ`·f|ï8`@*I ¯m\ß ùn*´ÑWO;"-ÌwK«ÆDây¬_ç—F™¬•Ó Sú®z_ï÷î_/œ—Á\©^ù¶f4óûî‘`´g\uH‹ ¿œ`dÉ0q‡j¶X0l˜¾±bîÀd„ÈÌE¾0èîݾ²mÉqÇÀfow· ¼²¦t/f×Þ•‹ÆãÙ«jŒi!P•4Î μ=Žã|Ÿ=;H*¬ñ ÓpÉ·¤é½»ƒ‘Q0“7û&@ƒ6nqóUOG€HɰdB`Äk|Wo$ón*`â:õ\Ï›‚†Á«¯û³á΄ˆC’ÁÈòÞ&’~~½ÿË¿·ù<žuߘ9· ÛÖ(63J $‚•wêå»áôªŠDë¼ÛFF€l¹g,Z £ š OE:·L1sÎõÍ’+2"®ëHçÝYÃqï!áLÁsï•è«ÇÅß¿¤™c=wÛÑõõúõãÇ0’}ïã±b Ʋd¢»WeØQ)kfGp[ΠÁžII3`9YG%  ¤É@À¸à;µ¸c¹"êXÝ3jøö x]—'“”Ôý–~„y#`É e±…CÈ8rŨqu#§É1`â¾ÈŠDä¦gßÇ$2<=×882LCcöÜ·†ÓŠÈ˜˜V+oAÝô$AÎ5^a7ïæD ”•·\È`RÖ}ZôÕB\—`öÜ ^$M©ûëýfßgj~í¢ƒÜ{‡„7™•°ÔUÙWÃÀXyÏDÞqwü#ÿ5à™–‚yŸ–èKÛ¸Sþ[>ÊÂ3ßáTøïjÏ8€ˆî­é=×Õ}‹…PÀÛ8³¾õ=„%’£‘'YÈà±rìUøíTÄ|޹/K¸M–¸74¦‚ĶP#il£nôùýñB¶<‘Ò% sAãÌ9™w|•QÞ'µy‘Iàõ~Ïtä’`­"ãõ5GQˆ[â…ë¼2SBÝ˶‰ðccêˆçãÈÊ™ñÌãã132¯Þµ+`'„9fKµ*‚»ä3ðí3ŒèJöT·Éû3:™ÒàFžÓ™ARHµîu_y7‰Ž»"•DÄ‘fdtëzŸµ2ÎoYã¦8½‡FFN·Í¼Ñ$‘*Tz¥C8Â}ÖßþúÌt®Õƒ÷¹g¾eHF¬£ìIÌZ1c°®ëª¨Œ°}sá;L˜¾=|Jõñx0x^{Ÿ3ƒŒÊ\_¯€Uu‡>Uä0äÈ$313¯÷{tïRgÉ«O7î‘Ì$8R_ûŒ“„'su‘°²2 Û“Y’#Vòƨuh•DŸçI§G»[v­õõõš¬ç)·ZHÒæ­aìsWˆö¬ ÐÖÝ]Ü>T22ðíøeñû Í[,fØÈ:ª–A@Œ(Œç‡¤îM!©2’äÊ ¥Dý(üíÇ£ê(‰çY3ßKFvÅ"3ÃÏ£@în[ÓwÒÌdÐDø.nröîÍàZÕ½vÏmuÇÇu=5Z•@gE%#ת£{Fþx‘µ÷½çº¦§W­™®õ£·<¾Gc"b·®ëPG%C„ÏkFA²2Ï`z_;ke˦ͼõ· ¦¥ýú:9ÖÌÕ»Žu]ï÷zbºó–¶ Fð»ê†á™KCé1ãˆÅ›Szì0#‘À¸µ€¨Ç£"oÌM¬µº'+ÁŒÈªuWääZ1ÓšÉ ù]ÌFÆñ¬QÒÈDöÈy>>žUj]UTLr¦íÁØãZEÙ·¨bIÃ0¿a„=ÐÐt„€LÀEXBÏ=àdxT?2ÚHŠt°#BÂÞ¢s“·Ýˆ•4h­{ãýãÔÞ{3W:>k„^áÏÏãëýດ‘™~Tޝ:jcÁ!1sµœÄ*‚BÆãÇcöõz9Ó׳zk’ΠLÍ佩€HÙ#‹VÞ^% ßb·nÁûȼ§õðùȵ @eÄm‰˜“€"` _ûý[<îÊØ¨Ê"DëùXÝ[n{˜tkFÏØêŸ?ÿÌ*8’½¯s_#£2kñLè¾n¯¢2mh0ƒÐ7ÀȨ Ø·NqO­‘1÷ÊʪãH²å&Ù3ÓªXµ*èµj϶ °·F®\Î+®ób¶Î×ue)WÈCš…ó¥ÞÓÃk K¿´Ö­¯d-ô†–ÏsWRÒ0A¡g_çy#ig·lD8`c¶'úñ|hz{à{ðÐ=¸õ»oiÀF{æŽ<1¤Ç:T84SË·G¸÷ÞÓ¼‰~÷™o\„£‚÷LG€p%àMŠŒ»y#ׯŸ'pþë¿þQŒEƾ®Ýw%„geÑ3=ÛÞrʽ½ÛADÄ]ìdeFtϵ0¬UE†AÆÊÊʈ¼ç ûÚ¶žÇðÌf ·oûŠQ‚^µv·£;Ü«ÇñXpg̪q¶¿Gƒ"üx¹œÁ¸C×Ý3£Ì¸•멼òªuÞIm“Ê ËÝ}û {oRDÀwT`‚2BöÝJTbLXÓ—|H!a‹çžóüúùuö¥s»‡Y2fxƒðÇÇQ kd™Á&xOõõ˜`*âöÞr•aõŒ”™°€‰› ðÒ8ke†ý»wÐǺ*êý~g•LÉ-gMÍŽàhÀïúÓž ÖÂói¹¡k­e°Þ͈±)VíÏCØ´gH²ïH·Q8 ÉcÇuM02Myz_³#d‘pÅï±&о»¯ 8†¤mݤ0[–LCšŒÌ¼úªˆ[&»Õà"n­2§‡ðª´dÈ0ÌÑí¼FV¼‰° )F-’Q‘ Þ×õó×¼N®gF=ltƒŒS]qûócÑ„!Xa$©!Ý*edèjY-“=ö. ⺚Yü±D*hÂßao侚ߑ“Sk!¡"ïXç¹®–:îQ_‘ˆ}¹RäuvF<Žfö•ùÉŒH®XÝM󎬃ë}^™u†Z›n—!$9+y‡1ÀÌZ¸¡,¦#±2¥1hw|}«á@Z++þØš·¯dCn³×™Ž$‘ä=àPq·¹4'`Ý$Hrf||®ãxüþsE­ì×&ò8j"M0uD¹ì‘zÅ÷3×h`;¿Õ©;ãæ}5ß̉}ïÞpÁµnæ`K²“dØ}^'‘…Áî©LÂÒX¨ªÁ¬,„óêx‹¶Þç•ÇHôŒµ»ó8.íG=sõµ¯-½Ž„ÑëÚÉ´‘ä ¢oo[%hoÍìGõœm"*‹ÿ0T¼bÏ·7«¾›u¦äˆ{ŠÓßMÅô^Uy[ñ‘!ú{Ð¥*ˆ•üø s|¿$ ’*84\u½»TË IDATÈi nŒ9˜–5®#24¸²VGU%™q¬ü|®çãÖ˜†T³6@ÁÆà”=- [¼ë²J>ž5ÒëÕ÷¸¶Ô×nµÒš¯×›ÁœæÞ]«€Qï¸EÍÂóùÐÜ6zØcc_•«ÖÞ;cišb€®¯__+™-¬¾&ëñz_Uù8"²|Ÿ×Kï­•u×e cŒaì虬ªLó;@܈€[ –i‚÷š%·ä@dÝ­ýÀs<ŽÖ–z=súÔ fZýüxÄýމ[`ñL«[Ò­©Ý†2ïBôD!üö€+è#ñÛDZðñ<>ëãY?>?#½ï3ã¶è@›’Æš`9ºç½÷¨Í(3ðññ@ð<û}vfT@ÏÔ*¯÷É{ìz Ì\„’Ñ3Ïc¯×{Ï<ê•0Þ×5ƒçñ)ÝEßõ8žûú½>Vïßz»ûªµÞ¯kÕ:¯Q?~++Ðf¸VÔqOø£g‚$Iüå¹>?j­x¬\‰#°*» fT*ºo$6ý]mS2™ˆŽömnb­z¬z® p-FD·FC²‘U‡$Y”ôÝ,çÊãq¬@ïþx>%ˆþñQÝ^¹öɵâÞÝG0rA:º8žÇíx‚÷Ìb%«÷쀑åñu+ɸÁ«‘•e |ÛЈä eBÁo§Üîݰ+3‚ëXö‡&Bk!Ð×y½¶ú2PmgÝ(@}ƒ—¼GNg$ß:ø=‘¸_3½¦îù üã·I}ÏðAòV¡x·˜wuz_ w›¡¹ÁÞ—íÝûãy€¡™ ía€†®kÿž_RGe†4ÓûX»{ªjOßçÛ]ŽÝž‚å¾Ú@ÖŽ€Ñ°ê¨_{ŽcÝó•7Ò—A&°çœà{tâ~½€û’ä{¾wõõuY¾ß§SàÊ\½µÖCrÜf£úŠeóû—zŸä FVú»› €fØ$÷!qÉ‚I "”Ô*þüùúã׿_3¹2+3#`µÙ+ã¾ ÿÿöÎfÇ’cIÎfæ™U¤î`ÞÿÑ´Ÿ ` Íewe†ÿháYœÍƒ>ZŽ-I°»x²2N„‡ÙgRϯrV¢áffÖÿÉØ˜{ÆqÖøœ–» š%—ݨšqÓ\Öt®H´d ZfUÑÐ0³¬øñ#Ü÷à44H8»€ÝUU96ûFu#‹?¯dïÏãÜU}.k™7ª„v34$™°ž‰-ÐU™sLԳܱǮ1Fçœ5uÎøÑ³º}¼«ÕþyÔüÖw­Ólä:–Ð…|Œ:C8@øá Q™PŸŸ[?Žay@´D²ÊE å‡zPH6=ò¹æl°9^‰„ÍÓ¬gR¢ÕÚ·…dþÙ\Â͹P¦]…L?(š µœã›§HŨ€­¹¯¸#À”l¹5P°,Š6SñqÍ™Yƒ”™‹b¡AEÝBsYu^±ÝŽ1ƒî“ žÍ°¿·ÒDÏí ØÆž?ÛíYKAMvA“‰Ê¬+Bn¹Ód@ïÝ„Èê²ãX…Œt7 #úÉåšh–€@4svုc’ªnjÕØÙrÛl®ciî´ž¡»ˆ‰=èñÚÏÄÎ(q6`ãt˜ç7Çþqî¶0«»øúXÙsÇO÷•¼ ørKÊÐÈ̘;Œ4A5{ÏYLô¼lM›««² “ÛX:Ù©Ç.'Òý{ŒÐ.œŸë<ýºòºwFýŒ\w’´™9o­Ûð×&+ˆ²ðÜ36&\•Ýí²¹€¬“رm­j¨“†X7[&°yíùc‰”›Ô¨­õDéçMÁwÀ°FvLF 2‹¤SÒ?Ê“Ý]ÉJ™Oî§Çªþm•ÀªÚ;3KN_­•½wfäá~ÞÓ›)5?Æãæ>Ï5ß«á¦Nt–›iÂÞdf\÷åË̇»0Q)`òl謞/áÌ–9[™%õ:pÏíPL Ùf"ƒ$ÌÅ ?¿ö¿ýûÿý#Íæˆ?ƒÈ“ÊþsœË¦gi«øÌ¥ºÇ§•Uƒ¯!Ø™`68ýçulÏŸCàùÖÅÜÀâ94É÷dƒ?ÿV|/t“¹ÂP g„K#Ÿµ³@>Ó„“Ùè®g‘|¾Õç÷)«›„¹4›Û!Df.s_C]ÜÆ{þl?Ö2! UIèÞ¹£žÈr³Q÷}7[fsèÖß¾îîŒÙèÓä3ÿ\&tJ¨Îšu&ÎÕÂ3c0tu€-kîÝÿöï_ÿóýÄ[¿(-3ÍäÜ&&h¢k¨Kó›ò¸ª©?ÏÍj¶»Í×Ðak•i¬cñ<æ?êê¢D¡+Ð 6IÝ HPÏ¨ÉØÿíûÖ%uíªltgKO`—°~†!"m­Å6ÂfSªªDº[W=Îj ºÈrÇÇéîìtаÇŒÍW¨Îî6RQ¦^>v¬·~Y³¦‘ˆˆ¸cOþøù¶ ×:czƒú×\ tÖc†€.ç¾þÜÏ.˜>“=veìã /™‘|?ÃW$Á»!3Šæ’IάP–LfÝ5é½Ìh”DÊÒX¤­EQƨÓ\讪٭>”¿(³аeˤ®$k¹-Nso½ 5úë몈{$Z2Rff&ö÷9ftM¦éû…iRõ,¹Ñ¸$˜Oh ²8€‰ãôåÞ]so=ûίٳҾõËr4ªú¾oQn« 1o0‰`tëÏM6±–ÙlT:9–)"gdó5)šËÜ™Ö0i5¹VwÕlÎÙƒÁãûM|Mª™"UvUÌPØ]ÆÌ«blbÆUEÌ¥@ dv‘èØÝ9ÖÎ9Ϩkˆ†ÒŸgŸ˜ÌìlÍÌeÄÃ~¿…¯I3^`æû¾Íž˜O› kŸãÖ=ÑdMÂ&cšÙȆÌ3f3¨ tµ@ ¼»UÛ=Çã®çë Ô¸kÇÜ×Õ×Ï;£²$_€†AôhÞC™¨Êbwf`Â6-ÊDyGÜwŒím0‹soLy7²’O¬î‰pþ'ßñ­_—†*µ÷ÎÜ$+@µ6œu¬ÙwÜûç†K„rïªÈάÜÓh!RhäÞwVèy¿›D>¾î®gOKîÇ!³žþ3“zëåâÐ!ë¾÷Z«ªã0ÑÌÍ­ °ÍÑUEx&ÓÜTª0ÔÔ$Rl ͵‡oE RÏt „™+‹¤Å$ì÷:úšT™çÇù@Ñ`&ß{‹p—›»yW˜++&’Ššü ¢Qà íg8\C}¨ê¬$šyf5s,f’?¦òJ²eªÎŒûý]øš ˜¨ÕmŸŸ¿¡º2 t–ĵVUš?×­]Å1­ ïú¾îÁŽÃå¹|›‚ü‰×˜Ï*+ï½3[fÝ ‡»ê½Ž¾&Iwv™ûG5®û63ÔFî‰uësk[™ÍìͤŒ`-õ<¶–‰´!.‹Öã!h̥뀛öÞs÷2ƒªž°ç{?óšT]”í;Рz×.äÓéâXËÑM­ñ4v?6ÀªŽ]•p9åY-ÙÁ—9ù$s˜ƒÝ®IØ$‰çpÒœ§ñ9:¾õ‚T‚ª˜Ýaά|Œz0Õv’,òÃN¥€,T3³Æ™Øè§7Â5+¨Ï€*nnæ>üÁnsÇrÓ÷-îû)¾"Q•Z Ä}Çrïîʢ캰q‚V…ùâ]T¹›Ì²ðÍ¿‰) !á. ǹ̕ƒ)™SåòÞ {-JóÜwÿµŸÅßTƒ´PF‘²µ*ÈmeÏ9.#wWVÅ}ßÕ %•²ž$GdQÌ ŽO‚ËÜ&m{]1…RòÃÆ.O“l¹g¾kkŒïï—$¶DC±²–Ÿ¿UMf6¡Œ½ãkØ2Ñ8mU™•¿}Ó“æ-šx$†¤m„ö¢—Ù…ÌmøQò‡UòWKÉ$?Ž¥FÞ—HýüùÕ€º‘U@ÿøy ‹ £±1/sLü`hàKx(óm"›=¥ŸèìÚDVíå"{ï{GŒ•¨ÞOð%i*„J†½ïó<å¦à˜;òúІuíLuô hÖbWt¥É2[™¡râÝUc×”™/­Ó€˜¹èußÝøøø½ª#|/¤/J&}œGæ–X]‘· .3S7¤E®LU©Ûfä9Î;ùÃËŠ‡ Ö9À‚úö­=¸>CkØÜ1ö9“­µ*‘$ÌSå_ýiü-¥;‚ôc±CR5ªËÝ» -³c­%÷Ç¿ÚÈ.™C“Y׌Ö"c–ÜÙÐ IñOÃmI5 wI+7c”½O†/JSr˜&‹©Ü«Çü*â÷ß?ÝUÕ{¨)¨!l­¤Ég#SUßyDQr;d>DdÍÌ&2Â-ë)Ž˜CÅû\øšœ´©+©BFîk“ïo,3w±±w ãuö›ÝjŒiM€dN˜`]ê¤hã—Ñ÷}ü„37T7*ë¾oŒyºâ½#}Mʺ%T×Î0÷èôeU1¾Üww±qßû·ÏO“²Bhf-Ùd¾ºØm¤J“ì˜n±™p]ÃÝÝVeçqePª¨Êà߀·~USo–¨MNôdu‹Ò¾ï*¸ûPß~¥ñΈŮÎÜ;†h b“˜2s3L7Qc¿ mêW§·Îͪúºb÷_ûAü}%°«¶ÔçªêÃÊZ¾PèÚDõõõ#vD>™&#cßU{³"dìaä¡HN)AEÅN¾=QÄ$f‡ªI­uëštUý÷?ì[ÿ•DZ£§E@ ®¦0óîÄm«¿®Ÿ‘;# …¹곜Ywä=}žȘgåZ¢Wö¬§kyMóO#cR<ü 4ß~üW¥Üùqþ&™™ORwQ=çy½*ª"+²Â—Ìdª(X-w> ‚Bufï;Çú6 «êì~âÈææÇjv ¾tncÒ?×$PûŽnE`GËVf5;3ö}O-Šù3…Hƒ­5È)B{9¨ˆº#ö½¯ûÊŠª0SuG •]fÊŽDþÝ݆?ù¿¿úÓø[Jwìc}¸/ÊÍL3ŸËŸEb.gY1ˆ²©¶ÔÃ-åù„ 5ç‡Êʬ"[Æ5 ’^}@DûúŠ}w ök˜|oý²ÜÍÐuÅ&ÍÖúúú"Ù€¹™/М‹Þ®Dg·=§C²ZߨAÂŒù`*!³Á*vu%î;ö=Äl¢Û?Ï3'­ï•ô5=ֵȰuþüù™ e t(ÑèbìRkÍW–YTSaæ%9,Ÿ|JC&B©€74 7ufF°ÛdCÑ~¸9]û~ë—5m‚`ï«ê6ˆãHs[qÇ×}UÑl¬4@ÏFæO!]ÄîžK¥ç²xbÃÓ±$5p“¹ï¯ŒÝÕ]ÈìÌD ,æ=yQªØQµ—L² 5/PÅÎoHi½m¤ªÚ |j\{¢™/š}‡LYÝDHé««'@ÓÏfˆ‚$[fkJ¤ÞúU Z;ûº¶¹>>_ÇÓØA±:ÍlG˜­Ïƒß¥bƒ^XçQ _«1€û&Æ•Ø|š‘3*ª;«Ñ}øBuF¢HÌŠ]²î{@ó’Dâð#;î}Möé'ª úúúÚ÷6© üøÀ˜#vu=dŽ*D=Àap}|8€a6`¶L>õ’ÉÖSŒFš‰wV¾w3¯ÉÇ[–Y;…Øw禠ŽZÇQ¤CvíÇ×+J}õ«Ê ¦,ï&>ÀìÞ•»:õئ`KîË–ƒÜ…jCÓLTÛ’ü}_ø¢žn–óãÃd÷õõ€±µ@ùZ{os"kɬå"÷½ïììFd쌪$ç¢ß(­õa:'X÷õ³*¨tòÛÜ]ÕmƧÌámžyI2Óòå~t“t€™%w“ë {6¦ɪìhaöþÐ0ÓùùéþôR”îŸM˰$Í_ëóãX‡Ñ$y5*KâáKPeM?Ï_úQü]¥Î*Ö}ß±÷ϯ°ågwFä×uee;’R1‹HôÂL [N’P5b—ëd+’ß@Be__‘w‡º2#†ø_õ4ŽwÖþ5)k#ëã84¨Éj6«Ç9sRÖà}EUWç¼ys;KfÑ †O¹VéhžÇ§ÙÑÑ=¼“óêcßwìº~îÜù°½&ëÈ_?¯Êº®ëXg×?þs ®ê&Q;Q]D»¸cß{O¼Zf’w1÷îØ™qÏ¡»)ò{Žsソá.ëÆu߃“¬~ßú¾"ûŽ}ß´»]ûë¾7%¿ýö1Ôìu¸i—м37e”Ý{׃zî.vÆØõ#3+#Sßáþ|;fÅ)w7šQ±wD¼ïš^“ªž¾à®ú—ùÍØbîë«"ª€Îθ¿î{_M¬µðÀa•Y5 ÊÜæO‘PwDîª4ѬÅvQb³¢²zŠz‡éËØÕ­ÿÜþ¼õ‹’-ï]¶˜¹w—öUÝ”Û1TŠùÇ¿Vsï"™{Э½«kö,‰®½wä–I²ó¢Ú}MW@¡øøXóÞÝ´©ô™#€3™®lS›àînüý÷ããØî~¬%ê½¾"Ç„]n«ººùuU·µµ¯eëŒ]QñyžG]AÂU™(›Î!4¢r­O"†ŒYÙk@]SۉʌÊ]U!º»}ׄ^U»ß÷…/IüÇuúúÿø½›5IMá¾îåÎîÓO–޵Ð`”’Üå'›a‹rT„šÆÓ €ŒÜS肮ꌺ«[ò†ö®nxÛŸ^•òë^‡GîÌøøX`™hòs­nfÔŽ‹bÆŽÜÛ:–IÉ7¢³»Îu0ë03“» ¿ªIn2§ M»of¢³"ë=ä~]:Oš´ãŽØÓ•EçŽ ìèë<Ülùÿø¿N˜BÖ™ÛŒh¬u,ÿ@[5wåÖjZ²½#Pu¸lJ€ÞúuiùÑU]Aa¤°÷¦Hæar·æ8Û}Íi _–TD¹Ë¤µLÒŽ×$OÅÖL»««ËL÷Î}²Yr€A#þÅÆßSÚ__ÝØ±×±(¬Ã}-7yßûXgÝ)Ì…adwRùE–yUߊ̈ÂsqO0«2"»™U î}_÷®ì}Ge",wV1=lïïÂW$Úéþ±ÖÇçùéæÕu__±³ªÏóó¾Ó´i|}zCa—O×5èY–ù'Zn.Y©E*¢3Ð¥*íˆëÞfç±>¦¿xæâ•É~;_” ŠÒ}§ÑÜWUŒ &£MG!Ùò¬Œ.ù¸àl¯T*W$¯;Au­CZ™‰¦ìXß »½#bß×}‘•1·7üéeq·QúñãâÌ»2,wpNçaâ’,w#½ L8º$çù[7 ¶ü$ÔÁ.J.Ó8¶e¿¿}®ó¬ÌÂÜ|9DÒÞɦ—%Â~üñ3"wÝYugRVQ¤ØûÊûꬽ«ªvTÁ²u¯ÃiŒÌi䦚2â̽wVu—¤®ªÎAZž‡¯Ã«óÞ·Læ|ªƒñ^I_”f¶GÜ7P²&+¢ºÊ—ÉÔÍêrÙÇyvï E¬Ã²£Í4»Ì(ŸE6rJÒÌ\¢‰>46±º» [ǹ–³kKekKßzEº÷Ý(¢Öò®Š{sª ³¦ èëgƒ¶¬~¨r'¢Ù@š³‘ÀîÚB¢¶Ô¦^n¾œâÓS8÷P¦y~hu¢¢H®%²Íû!¾$²Ù÷}ê ¹gqù1ݹëô¹X2S£÷Ž"2"bçáîÇRÅÝÐÕõd°¡éo2&j_E&[ÇÇa¦ŒÿÝÓÍúž‘¾$¸®÷uëããE?Ž»v ¨ÌüãwûÞûÚ¹sz®#*®@ÐÕebW±0W·UÓ„PÕ9|„c9¿Ù••A¶/óµžJ.êý¾&-—Àu˜ÙÚ€ï;+ÑÕçùiëÈ(P@gÍB˜4~ž§›dS²)Œ‰ªjf!3³j.#ò¹Æ$ÐÜ5Ø™I6eë¾kïêwÇÁ«r‚î&yVwYFv¢íÇ:(EìU‰eëN zß13Aø²&ï½»ïØÅ~ð±5´6\ËÝôôÚGtª(s³5u@õ§ñ·”Ð;ÜWî+³Š¢LUU±–çÇ1 üæ@(ûü8×qDVdÐÌ|Ù±;÷´ kïÊöL­u¸­É%—ŸÇ:×1oÛð¸ÖZkyænÂLÇqPzz•ºMkùAè8>†`èË(ðÁÐtæž:»u~öôõV˜sÄ Fäu]Ýó¢‡á­W¤¸6²;óãü01ÆÅ+Àd¾²zgUÔØÝ]Q w ×»##+ÀÞ;2@«ØÅÊÊÜͧއÔùñžÚ®âÃŒª·›û5É]Y{¬-Ë4³Ñ¸‹ºU¶`ë €ì·™lšºÐã·w_f ²&"Cf] bGÜ÷m2ÑÊ<¢™{7ÙøWÿêÏâo*ÙRt’}}] eÖ××69šËûŽ!rÇ—bOÃ+xª¶'Ô2a]3šÙtÊÒ—ëÌݤ7tï•2Ÿ…ß é‹RW-·FËðãÇWfæþ]·;‡½¸ï}gnÉά¸ï«Æ´ý] [O\ÔŒ„L3›0éè!zè9Í«O ìû!¾$Mìïº"«@4(­ˆŠœw…¾|Gpœ-B¼öϵìÞWUÕcínÙ€1ø|Ãõ4Â’ät¾ÇFefFuSFmÞKé+*¹ëÞ7­'lvGe’ÃÞ¢¹WVdW³~8PnŒ} ¸*Eºª»‰B“0[WDá±Ûăg~ß¾(Eguu§ FVÆSÏ„0 Rk××.4ÅfI¨ÊXGͧF´1sTwUiBg\âB5ªQEÉéz–ì/þ$þ¶’ÙQ€ nìŽFïû®ÊªŠL³ûŽýußö ƒIDAT¹‰Ê4izCHe± æªîºžþBt™æ•=‹6szzצ¿éO¯I×ÏXM ˆfWV TRwÕhw‹ñE5¥µwš©Ðkýäu·F‘®}ÝÙU2¹¯P…©Æ#ª³»ejÎ(ü}¶Q"+"L.-Ó™•!…Î"X@íË©†I²M*2=)O‘|SO±3#2» ©ÉïPÕ237 B×€ØÞoáKR+‡ý#.³ƒœB™©;çàgîæ{gdW’ªj3£H¨œò³îÊ’4€¾¦±ù)17_‡Ìm­’çèÜæ^ÿý_’º±¤ª¡3äÎ)¹k d¹ˆûþBc™ Ôþp—¸ü˜{ L ³L²Y)50‡…*˜¹›» í¨*ö³ñDtGÔûÖ÷5i¹w×P› Q] ”‰ËW5§DâXçŸ7+H;dk¦lf²Á®i¡´&ª«ª*ëO–zº†tñÚ»;+é[¿,eed˜+3Ì\ÔÇyÎ Qèå™ÉÍÌ—=ôŠ'ßT¤Ø‘Ý–Q] BhUaÎÓ•Vµ3®FLßï¾ïŠhdfv·({_¾*eÉžÁØN4v÷Ž›$e(•‘%‰äLd]•3»ÉìŠÊŒNˆŽfÏpKfî¬Îª²;¨Ù½Tg“ÂŒ\ßúu©jFÔ:ü¨JÉšíËdî´ñÂ\×þ&Í>€˜ñ±mtºX$Ýͨ®ºï–à•ÊnJ ’F>µÙ&[¾PD³¡BOùÖ_ýiü-%3£YfU—ÌîˆÌ&MddVuFrú,Ö‘Ca^¾Öá&SÔ#@†VË9åçcyš<HÒꙂ-ÑH™ Ý|ðPï÷ðEi¶õ;+«HÅN42·™Ègž¢Èqk«fys†É\ äG¡ÌHšOqE6jžrÑ ÔÕUEN£šªk8o½&M °jÄ `Œ‘n]((ªIÍ+°sÜfìž](0özXG’´ÖZþÀ€DI>BJ­ šFôB÷Û üšäîA TvËÐH¹{Æf]¬f $磙™ Mq!ÇCؽs |@‚d700–m3³±ëWEÆ®¬¬|[.þôÜt·ÙšD'A¶Ð¨¬| ~»ºe8Þ¬‡•s®€ RIl”Äï+ˆa¯Í’Šª®,~ú2jÒ1“aÃ{Fú²„9FPîÇdí—Ö㟯ê.°†GE òÒ4:ß ékú.Òìúè´~IEND®B`‚nip2-8.7.0/share/nip2/data/examples/framing/framing_complex.png0000644000175000017500000031015313224651032021324 00000000000000‰PNG  IHDRûmî^ IDATxœì½Û’$GŽ,¨¸˜{dVñÚݳ+{VÎÃîÿÿÔy˜‘i’Ã[Uf„ݘ{û|ÁŠL´4…Ì̈p7ƒ …ü÷ë¿_ÿýúï×ÿO^àÿùÿ'Iùñûïüñ»Û¶ás2å Xîþþö5CTãøúþ&"¢""$Ì äý~GICEª *J03÷}Ÿó YU•U$@UûôúúéÓ'CDTõñxˆ¨Å>DDÍ*³ªT5I€¨¨T‚¤Y³JUçœ×š ÀuÉB²Hªjj$ã`ÿÄÔ B ° B,A^K’äúT ’èÿAÎo“þÌ~©èúOAfR ªç‡@ "@±>†d±d}ŽP¬/Ÿ$H¨*²TÔÝEäñxøUI2 DUE¥HV²ÙæÃ+‹dV<Ž£ÿ¼é¬*’J¨ª¨’ŒˆuûUU3Ue±H²1Õ"E²ªúfY‹Ð·Ó>¶M™%€™ŠD›ÆÚZí{|~o߈êZõ[Uœk³ÖUUž ÝT53X”µ¡ © 3é-NÖA¹³R‰m 1göí Þ=·UªJDÌLU³*#ЬÌ^ÌdfQ’ªÂbVÝD…de !Q­j[‚ªµî$³Ïl]‚,öª§­Ÿ¼Œ¼÷Q Ū*Eeóq-ND`fîN23#¢Š#â8ެ@ª `ÎÙ‹™*¸ªõî wî¾ïûwß}~<î¹í€Çýñ矼½½#1|ÜnÛËë¾ïnŽÌãýþ~»Ï÷9Æ€Y·Ûms‹5}Äœ‰Ÿ~úÕûöÌì›o¾ù·ûÇ÷?|'U¿ýöëÏ?ÿ—úë[Vöj™»C‚Ðv.¢må"’™6F•dÛv5­¬¬ÌÌEdøþòé“ÜïÇœÐVnª:noGâŸ>}Ê™G’QYÜv÷÷ì“£J)”€@E4fd– ÃΙq¹cЍªê:“ÂbUe†ˆš™©Ùµ µdddVUU% 9ÝQÛ¥"Šå‹.$ÒÿoS"Ú®c‹ ŠË.O¤>ýgD´}E5S@2BzéU2+æ$ùù›oÜýëñ¨ûUªBT_“ª˜ùù"/C¡ïó¡"2óArÎPQ¬ÓÍCEå¼ïödo-Ñ`UVšššf–(3¢OËu×½ƒªÚ7îf–™<ƒÐé I°Ý“ª‰èå°Ì\TÀe9×'g–™öZå:ùñ`ö}ÁqÌ̸‚ IQ˜}ø¾™žÎ±âåõ•äã~_Û¹¼íÚYT5³²ßö1FÌy¿ß#‚,wW3q7€Çñ `ª½ã™YAÃG/~DˆÀÔ̼P}k"1å#@öUSDÜ ²vS3÷ÞU;ͱW¢DÔLI>¦ö0“sÕU¥Šfºm;Á˜W VèãÜ7,—'¢ªž)PÕËa1fdDÍ™ÿ|ÿóþþîîc U‰ß~z‰cvøg1£’ªòÝçÏÿö÷í%f|ýúõíým¸wûP¤ "(‚ÔbUE¥››kÜßYDf‘*éoY~@öñ&©sÖœ½gJ"g#•¨öàÉÌÆbˆTóbˆˆ2•)€0•ËçV"Žv<)EEeyªåÊÕTPQ™¨ëiEÀáºq<Ö?³2eÅW”(Yá ²2ë4xU333m¨„$3CÜ•¡I £wDÍ ÅœÇãe³1¼Ï†’…¬a0•1°ïf&YÔæãewT±R›ûív‹ˆ1†ˆn·ýË×{f:€1scüùçÛ|<"&„®Ç;‰ážLÖcA0gU[Z™™ª™Û0QÙú Wåœ3æ¬Ì1†™ç¾™û˜ó‘Œ – „Tä>·Œ5Æ* ‚U¦¥ËšETXQUª®ÔD…(•n¢¢ ÙK€"WH# ˜÷Pë}Í­ªÀìC/’1+B)û6Lˆ \¤H‰¨ªªŠ"+âœø`å‰íòp:¬våëà’–cDµA͕ƈ!ÈìÔƒ,CžA—¢*Jˆ@ j*yï’ùx˜¹‹8CªTj•ªš˜ÊÙ>\bÎ Y¢*€õª™PHT‚ZXÙ„Àƶ‘d¥J¨ªi “ò!c@&Á¾o ª²Øx64îËÊwÔh÷*BV @³†Ë›4¸«EU(Ò·QÕ ¤¨¨»PNh¯)H æ±0.™³b\¥±Çï½EuÀ€Í°›1‹5Lûmª¯íÆ¢B„Tâ6èîU%ÈŽ("I.ÞNNUƒ"¥P‡P@˜ˆ{•„*Y\‚*¶÷±`•”â\ ‘Îãb¾“tUs[·ÁXc®¢&¥9bÆÂKËlÓÜÜMDª$¤íBA n–ŠR *uÓˆÈ ])ŒÉ *s>î·aÛ®Çñ^UÇ U*"Š¥&ê»/”™ñöçãñõ‹pd5„ÔÌÜ¶ÍÆ8ŽùÇ<Žtw?}yÉ ÚsÎ9ç¾mªˆ˜Ã‡Uµ*qTæ&SIQ$“ ï…{9D4 5´T´@ɇép`QnêæYõõë—M¡T•*'.~F±Ù0÷ƒ'Á¤Z,3ÀP(D½vƒ›‚ïHÚ ¹Ù{Ÿ‘è8 Q‘È”:Sºu„‰“o"(ö[¨|HEÂUEB)(´D«Ú7‰P΃ÑdN DRE·m˜YUMFV*jå§þ{µv¿l"¦}Vj¹;}à,–ÊJ|êô}3s¸Ú÷mUû^™gšþÈLÄDu‘\Yó±ïûËËíñˆ9ãäBr¿)+ÉÂbBÊTÍE!Ãý8Unƒ™Š45Wwr`îf&â`ñvÛ«Ø×ѯªQ$ÈKEUCÄYYL/B¨*ŠÃÌ2+s^ŠÂ”üòö…äç~hE°Mº1ê6njƪ9gqŠàÊ•GWË¡¹¨ Lt¨«©™‰KåXH'¼Ë7G½©Õkë›ÉjÒö b×¢6E2"b_ &a6š¸bq΀ˆªf&P¦>g‰hU‡Ô:Ž£3 ³¦aèŒîî>:yìuÈÆËªÃÇœpßͼ2IÊâ@W„h#!‘Ù™š+¨YØ÷Û6Æ1ˆpóZ6t ¬¢ª€˜So/û¾íï÷÷F6Íô8âáÃÝEÁ9À0w{UÕ™õ˜Qňv¥ U°èËT˜™«ªÊp…¤«¿Ü+_6uw¦¬ˆÈ ¢ooGïW)²*3!h ÎK"!’¦cø¶ïsÎí •P5‚Ùd u—‡­ŒzøPSqjdV.‚ºH%•9y‡™é®UMvŠŠšÙâÓ·ÝDDffÅesjai¢“­TqÆg,W#­ý•©œî©2ë$®åò³íDDef ÑGWšDÈÊ#ƒ'5fÞ¬mù”æU;›ë,ÒÇ0ÓáÃÜ_2ã¬0\giæÞôêœ`e¦%*^ç ÐGbÛ65µc1CU̬8*Óf\œ”H™™IºŽ8‰.›ˆ*«D¤:©ìÅQ-Fs(U|<d©ê¶ïn£«3"× _4¡Væý~ÇÉO¹¹ªFÄå_dÈzÈÃLÝ}aOÏÕ—­ ‹ˆ’E2±¢x—GÖÎ=)'¾êk[Äèî}&3cý†'Y.b¦ÍÇ·k¶ÍyTòåå–Uû£W¯ Vî.b5`‰û ¥¹9œ‹@dÖéÍͶ›™ŠDDsäû†3›Çáî9çì´‹'+Ìs‘W [ Cóucñ ¹Wõ·C™‘‘u&Ûû¾«iÌi¦Åúñû­ŠÛ¶õÊˆàˆ™Ùµ˜EAª~VÕùHá0|ùúçýbEN²“~0çܶM€mÛÝ%gT¥ªú°o?½~óéö2ì6äæÊœ¨¸ßßÇû¾oÛv¢}Ç1±JHMµ¶;#i¦sÎÅø9Ž€»Wí}æœÍ8’ŒŒN¸úW'­U5wQm¥W5³˜Tó*6;ÐTîrX'ì•óÅóÕ»¾2óçç-V‘ɚ͚5uÝþ½]ªªºÂ„* á§w@7õw5£ªÂ…Û|!«†UQx6ĦÜMYvbNnâãuÝTsähúhÝeûÖR$¹Ø(@š1lS}•)T;­î-p‘ªŠÐ¾‹¾wUu‡a-ÂuµdUzäb—"¢ßBjo#)c ÕýZpwWm"ƪjÎÙ‡Ö̶m7ó.Ò™™©fårY"*bþ·~Wf6µÑÖk µÚ~æÜÈ4‡™[çu'uÛ§ª9+sö‚ØhD gø\Ѽ×Ê÷!äY¬¨’>°µ7¬E°ªÜ¥ïø\42‡ªîûž™ùÙªêñxÉJS¦fcÛn*6㨊ëD\v1Àx–/N†ÓTå8jN‘1Ìl@M373å8wîÛffÇœU%'ÿ«¥©Û ™íþÚä$2çlšîc߇ˆ€¦¦½­7{Émß»€óT¤²Ì<$÷úòÇ_¿~­Ê±mIÌc&1‹ï(0R šÅˆs˜}~½UÎ?~}ß¿ÿ´¿¼¾îæ"ûªñòòr{Ù:P·õ¿½½ÇƯÔ#§š5Ñ8Æx<Žˆ¸BÜDUuÎ +"/‚¹™é¶õv|ý®ÌÚ÷­€ÈbN‡UEUˬˆèÞo7³0QWM ­§ÈŠˆ« }Å+’&ªf¢RU±*B"¦ ÍäùQKZ ª®æ8>@Õg8ð/ÿ²Ü– U™)‚ŽêUŒäùÉÒÜb¯Š"Úr‚Uüê*ò099æ¬&k«ªT JÍi·7g¢æ›ªt ‰€»©¬»ƒª¨xU‘£}JFÌY»ÁlÜn·ö)î¾mFÄ勯xPÅŒêí;ŽàÞõ;t Ú·mÛ–ˆˆÏœª2†WUH?½6ÌX›V¡ÓêÞµ6ôÌT"!ª)33•L¨bß×i!9'qµVx˜Y«RDí4ŒdxMEÌ}ß2³· „›ûpU}<—¶@U‡d&+·1®·œ¥U55#h ˆ -e`r»mî~Gäfâ>LæÐ##" ef«Ìk¬:*ߺi»ãh!™¹èc’²˜Ö·PU{A"RÖʤ °m*’ª|u³ ’s¯hÄÒ¬ŠŒÈ‡šf™©uGM@eAU¶m˜uØ3²^_oUõž$S&47QKRÄ›hSµ9ã~÷Çýç_~†Èço¾×qûòöU/û IˆŠp –e9á÷û—Š{ÍÇ·Ÿö|ÿmåã·ÿúé÷?ß}Þ>}úÞ$#æ÷º™Ë·ß¾¼¼XVˆVÌpÛo"6†W圙9Er W­áâ¶üÎu{Ų†­³Üõi2‹™‘}÷ÝÜ="ÔŒäðå2H’:笌m ÕÁ³vN޶³ˆÞ€Žó§lG4âhÜ¡§¢çô8Ö^uÉ·ÔÍä,A>Õ.<ù°‹Ã:o™Ù÷è>.èk&ª’!êÚ¹ ¢ª²J‹×%=A„Fç™îBY1Ö̆yydmaÎ’<,€7šŸ1çœP×±7>U•½Ë|Pæ‚••‰Šy„ÊØ†Ã@±mƒÀ=¦ˆ”¬"ÛÍ;àlÛÞ¶ôÇF Ùúzú⡨ì NujU¡VÕXP6Û·&önæÃIDfrV$’ŠŠªÛP—Óè¯8¹¼ƒ6t%‚´gt4[Ÿ¦®åÍã fÛx¹ÝLÛ¶UQdF Y©æCÝF‘Ñ2¢™èÌCU bm$ˆ,ˆ „A*MÕ¡T±Ìlž^¡PŸ‰$“Äœ©â‚­Iù&–³@¶úIßg~y¨Ù¾ï®,>Dèn0‡H<Žj„EÀš·‹‘Ûí&›“1ÌoŸ*î¿ýòóo¿ýöú²¿lÁò·ß5ÿÛ¶}#ª¦&­UŒKð´JÑÒZØÒZ2=ëÖg¶h"²mÛËËËtE„Ô*3­„ÝUU\[Gpyˆè CÝ6y<Ü:¯ìNµ¿èr" Î4Jþ-GxÞË…Âì¬aý˘‰Ùb+/^\°0£¹“|<•(;‘¹p¥4—¬¼.¸ïåL=äÄû„¸ëÚÌåhÝyŠƒšlÎJ9 fš¸¨—(Á&þÏ¢RQ–ÇÄR6)’IQQŽ‚Ca ;Q…¬"ŠU€ ëäYR°ÉŠ’*Qµkx¨ÃZû”TR„ªÍê^l½[€(jæûÍô:±5çÔÂØ_êþPQ…²6(nf…ÈŒ(¡4UG –L¯«è‚•Ø"ƒªR «P%¤\€BDbH‘j£½Ð¿ž‚¯*\ if2Éšsæ¼b£Öæ+;ó¥jLffd}½ß/ 묦T-½Ž£é‘jcVñ³Ú¼Š•—)n›“<Ž8ŽÙg€*eÓT˜i“ÏíѪŠ(ÕÖj¨UKÍp¢uŠ”»^Z62I][…2kVäZΪ3&£Æ¨}ˆ™Íœ]"&ªª@ußÜ V…¥…$5 E!p<ŽÈ´óŨÎx̨þêN§ÅZÈ!€ˆ·VÄÅ4ÊæãÓ§OsÎ_~ùùï?ü`&_~ûý?þýó}ŒÿÙ‚D’½}ÛäÑœes·,FÌãh=…\ûrXuVTíûžYÇñ誗ñê=h?Õ”®ˆ£N ¹NÇÂõWåg±–zX±R•À~¼xäqÝõõ9ËaeªÊÔ¥Â! P<1ýÇq\Îý˜‡ŠŽ±åL*3އ@f=È(JV³gbhг 3 B#ù~¿?î±m#H"Í0µébT½Ì£…£qT…v!M9Z)ViÛ."Û¶Çãíþ8~ùõ·Ïß|òÍ¿ÿÛÛíöÇ×?3gf¯²+q#Ó‡›©*2£Ï:Ž8ýÑZÜ‹&¿-ãóyžImð¤ÆÏ]_= §b¥úÓô¬í·l¨ÝYÿöý]ÚdO‹Äª n♌8Ó̦à~`ÑÌÌxŒ12ëñ¸»‹kS3ã ú è>ºÛ ËOUU‰Ó‘3 U÷¤  î‘§»¯¿¶z/>Ô%Õó@’,õ­ ™Õ?c[ø˜sVˆª«*)•MöñC»Û ¦¢yà$éÿz>h»<&Îj ™WUMñt¨ºŽ²”Q-©XÅîûYr¿%¹üý·v²¦Jv5 XÕÊøã8.»ê˘‘nZ9 ¸{×dšEÑõò³¸Ü ÀŒ•s\µúo’'FÆã1¯$€ 2¬¼á#0À…Ñ>¼L;žãHYÜßÑuUc¯S¼Ö·ï.$çך­-î¦$A‘™Õ‹LÆÉ¸ UpsÝÕHÖ‡Ed_|UöY¸lïäBzgíÒÄ\î¸ã·¬œÊI¾¼|âVRPuAÔM"˺ê˜ù°MHx°¢üúÛoo}qñÓÌ>þüåýáfâ–be7µV…»aÅLƧm7” TZÇA¼øøóëW5ûÿçß¾ùî•,h©¸ X&™ì´Ÿä~Ûª²*÷ýÅ=ßÞî×]7Üyå\8êí<¦ÍÚÝçœsαɾ߮Ï1³1Z)ƒæ•ÇXþâò5™Ù:€‹>ÍF?»?wÑFædƒ”%†{~oDdÖ£ŠsΘÈ윥ÈTõ.Ó4™9çÇùTUçlL§"°.fÔÆãñèþ‰N^ÝÝÇ(X~$ kÎ ÅÜ)KE¢g¾}‘§×ÖÌŠúxœ´à‡Jö:™"bV×e¨xf&Ú½®Ú|{[;Lûš“èüè›!¹ïKMÆ%ÿYg÷Š(ªê¾õÝ]%æö&‚Bw´¸µI¨š»¡`Ï=‰§{j£ºXË+ýoðx⬵Ú+èJ/äÂDü ´Ë™¿­Sð »N÷½*ÝÏ¿v¯ÓJ?›™•HWfŸ·`Â¥?X¯+Á¼Šø—©ÈÓ:<Îú¨Ì§sµ|¬ÜÈÝÅ]˜7S[Õêlù]¬,V„¨Ú ñöõí÷ßÏäë«u§ñëëíë×?Á÷û›m/v7Ç®°vØWmÜê9gÌãe®š1#&Pªª> óëû‚——U™ñNúëËçÇ#ÞÞî§ôÔDà6JT·­ =*ÛqÛ¶]Ët9©kϸñŒ`Iä…SzºÚí¾ùí}ÙkUµ¢¤ —×~Ÿ'œO¡ãª üª7ì¬Ö/=mgÿ‚®}ŽH*]>`û¾µüçÚl3éµ½.XõÑ' Æ„øp1W`WUŠÕ3’¦®""/¯Ÿò<$'Nü‹ÃºÖp8QÂ\õ£c«²1#2IÙ¼5+ ©xÊŒàîÕ˜.’ZüP‰°––ɦ®Ku·æÛa•ZYñì¡$‹Eµ¥IM:§\+Ô•TY¢>’ÝVÒKWK¡ÃT¶QÙúi»™IßA£„t ‹¬ùtÔY$Ϊ1WÔ9K,Í ò$+–¨’d>-³ðî @€B³rÕ¼Ö‰\úÒ¾—ƃ8…`Ëâª.»ív±®o¶& "¢)„tN~Y¸œKWT(v'Öùåóþx>ò”Î_WÿŒ‚«j>‰³ß¿€ã8„`°š‘”ƨŒÿüç??¾}þü:†eò1ãíýž­º¿§h³<ï$o/ûo¿ý‘?|ÿãÞCçYêyŽ“²ô>‘™¢p· Òw c7R,I×Y¸ù`VzÕÄÖõÛ¼ºaŸ²ÎˆÈ\ÖwɈ"3ý܆Œ â]Ço¨Õ@*š‚”Šù!Ú¸ "ëã»L—†eqORä\•;÷ˆEvÑLJÕÑö× R˜¹¿}i²úŠê}‘|jzötèV¨Ó¬›X¼n0"bffrdÆ1g{ü\ÙÚEñôÇö)Ð=¢<”§é/ò„°°¤|‚X=íËÓÉYW'SNK]_ÊÕ·íÃNyÚúÞ–>.¹ìÓÙkhx-ËGüP©'1JñÓTž¾÷Ôj6x}ì3[ZˆyÅ`|`©’+|^Õ½_ÆyYË;/—q™“A˜‹ê àˆäåVŸ9I]}íSx%©Oñ—úW„õ|6Û.ræ uÖŽ2SƒU»oÌÑ"¡se±„G–l//_þ|ûòõíååÕl|z}uß(F»c3ÝwÅ<æQr¿µÄ›Ô¼Sâª2â>ï÷ª²bfô1xýô‰,³øòç×÷ûÛëë+€J²¤R Œ˜$ÍU„™y·_~þ%“Û¸=ãy ͽÖ“42ç4Søp·}ãh L]ô±WPÚ>;…ìt‰ä\Ùž’Ü@>xwq‘ÕCâªÎ9³RåTX,’•u‡ŽÕWH_Æ’5»¥Hš°¦Ü¨jè¿í4€@V†«Üˆq!öÓ H×^¹‰ˆ« gMà<-}àWzrÆiÃRásÞï×Ê4pÉ̈|¼¿±å|ñü-€¥Ñ’=ªœ™Ôs îï]–­*¢3V;wgâs1Ehm¹ÆÙˆE»íi Pd5Zªê°í|ûY’‘93ÀÌËÓ‘ÒäJ÷õ¡t7ì•S~èõž [\x¿{Øä£GÀY†vÐã:;QÎÔï4¨“-½¾,ò/(fm+Mÿ:Ïg%¼*ÌîÏ_]Af¢€ ft£Ì?4Æ®~9 zzí¶=ª+™¸\Þ¿:,¨ócƫʼ/C°nÖ.ÛL¤¹¨ sÖ£@Ñ/_¾þöÛïcÛ__?3Yfê>T¤Õš=Y…@·â¯²P“î¾»í*i(E¨ÙnÛNòÈšG|~¹¹rÎǾá£WÞ IDATﯷO¿}‰_~þmÛï///BÕÕ¡ˆã®ªT &(_ßÞ_>}WÅ_ÿøC¦­ÃA͇YSÚVÖ,&f¦‚¨€wÇ\­Ò)9笙ÑkÇÎ%Rüô;«B†&ß©VU•5A»~Ú„B&#"y måcc̤b¶öG„&ÕÌ̳L˜ TóǦj¾‰µ…’«Û·%ïm¼NN[wTÖbeu+7keùœ³JÆhæB̤‰ÉM·2Íï,;>€äœ£°AnÏfz%Œ-×~<ŽKØqº¹*}•œsbY€®Èq…^¢ËS_>뺪¡ŠN"J·N’ØvmþÞ±‰ÈÉã>Ê„·Û®kZ‹Šªô°)æÜ{óeTtéñ‚s°öíãÌ”D2Ì[¢d±õT‰áƒA­ÿð ø7š3“ªŠ<À&ÁÆû}¶Ÿïô2$Ma®NËKË̘Tz§Ï¦–ÙB˜‹Ø‘ Ñá‰/{÷ÇSD¨ØÙ±šº™™e•Tn"n–CzÜÕ²x J/ýÊBH‚zýû¶mO—!grºzNDFˆŒ12óu«ª¯Õd""Ð̤ÀLDK€á›ˆ›nÇÇãíþžGů¿ÿ6Æøño35ÓŠR¦ Æ‘‡ù-H10v¿ÇEf5é®kFæ×/! €EU¯J3™3ŽªªÌãñྠ¿þŸ?ÿúz»ûé›ï>}ãæ.)ÛV ”¶Æ¸¨UU¤`*¦"¤Ûni=…¯`rÅ’°˜vÅ·+8<ÿPN‘Ô3‘qñšUu§íìüˆˆª¡j'ÜæsÐpU3ÕSÌÜ|Ùm4j6Fë°û«UÕ€+_Xˆšä¥E~~õ'”gtêŠU»!­¬Ö ^<ݺYWÙ÷ý_>P?m_ªÉ‹²>’Áë£D¤­³£D㸾Œn¨U6*µFþ„xßgsH³¹ ÷ž…õ¯ÞJ[zIÜÈYÉd¼Ñ6R¥Ší»1Jd‘†Ç‚‡ˆˆ>Tا†Û¸™®ÃÙÅœÞâîí¹‚Ä‰Þ–øf©OŸøõóÏ>Üý²šsºpŠ~Ô à®Ír^?~è6·ÈŒ3ñ'Š ýìÔŠô̸ç¯>ÜrXªÿÄJA>þóŠX ¶+ê?gßV©}~{áʶm¶Ý2ðö8îïÇ—·ûã19o·Û?þøòòrSU—8$³2ãØ^¶¡Ý×Ì<æÜÆómÛ¼W"Žã¸ßïÂi7ß|õŠ`Û6V ã í«Ùöòòù×?¾þüËoó€ëËß}.ÜÍ6•R-_S ÐÔ¼%”&®b¦}"’õ†âÒÌú…«q÷cüµÞwñÍÏ?|ÚßJö}ïv³æj-T’ânÛ¶¿ì›6›–Ñi „‚,º]í-˜ÈŒ8€5ÐãÙ,p‚|¬1o¬Dè^h‚}xU¡R ææÖbkÏUÕ®2ôáÏ>¨ükBÑÙC{‡:ù¾ÖR©ªH¼Œý¹n°V¬JEd4ÎÌB™I£Ìp«Å¢ëRB.§ðqM¨s,ÛFfQ®JuRYU@©ÒÌ›¬$Ww}v¤¨ÒSÏ>’zt÷h•à|‰ô”2´\ )Ðä×Jñ>ââ:fm<«é*kv¦«š-2÷sòMDµ*=ûAÚ­ÿKÂ~ˆ"¢CͶ¾Å–J˜']Ðoof¦Ý³¥™*äcû‡ëcËßÝÓô‰ÀI«Äýþøúåþöv€òòúòúùÓív‹˜kòmÖšÞtú¼mÛsvª€5$½7ýòÂRÕ1LT‹õ1“PÖ²ªê¾Ýê8>þîßJÿã?ÿùåëQù_EÿüŠ—s·m“1¬jVREU µœ”iÏ&ìÐD5¿$3cŒ.fV7[]j)_ÉÊè™XÙÍG®®§¨]žPúi—’Ç1«jV®ó8öñ4ÝíT‡mÛØoÞêü*ËÖ˜Á.ëKªª›x‹ÎŽ#æÑ„šlÛVyÉV»í¶êìã½ú(̨šsÎy´<‡T•(‡›¨TfcŠÌUÝòÑ×»ïòùʯĶX­ÁPÅ *€á)+¼T¯×è9£·`ÛTöÑbí*ï +"¸«r§–ÚܬáÑÝÜ¢O¤÷òYºF”È„T;z¨%µ5–¬âܶMDæœ@~ú´GF·˜ºêÀI'FdêS)¶¼·¾¡PãV‘uêDdœ”Íói?Oïµ³¥‰ZJ9é9¬À)dÝ#)ק͙¿|Å"1ÛEcmý3¢©«û÷ëµèd¹_ÉSËýås¯7^fÙdŒq­ðq#ÏîæùŸ½<U \wÙýŒ—Ú㣵bj³´èxŒ¥U˜9y¿ß¿~}¿ äõÓë·ß}ûú鵪î÷=…ÙÌ»š±DŧÆe‹˜Åì~=¥³ÓÍõ8Ž!&X@Àq¯·ÑqxÛ69çÊ~óÍ÷j·_~ùõ—Ÿþëxà‡¶ÿûüM jC”n§ŠŒöTj"ÚB˜)"ª6£lÛ6Æèê^K`çÌlÕ6AéÖV—Ϩr ÿ]Å8Ù¡RÕ./–™û>®r†»döA53Т©èMü5jÀI¯ªj Ô#Eà.cl·ÛvÔØÝgsÙÝ î>T3WÓ{G)]äÑ:uޝ¸ — ik'›âYò䤪¹g9ÙäuhÛïägƒWQÏÕ±îÁÊDD<Uµí|ÒÇ“˜kÎÙš¶:Õqž¦tÛ7Ì9çlì(¤ÇZ¬yúŽK©ãç³mž¼ z–Ù{[g§Ç…´ë¯ŠHÕl±šª‰Ð]É>tú¯SPB žÝ}[•Óݬ«p1ç<Ž<ˆ©_ß¾Ž1¾ùæ›o¿ýÖl¸›Z×%råp¿’åmlî^@?.¤V¯Ëî\ÖÉPªrøsE.Co’âóçÏ·ý¦†cN7UWSÜ+~üû3âŸÿþ¿þöõ»o¿ùá»Ï·Ýh5LÝM‹Ê¨”RA zÎÞñ8ݹºë9|xÉ[ô©„æ¥ýyö§ºƒ O õ3ª,W‹•Ô,öqlz:²Žë0'KÅ™çHL,RsƬ——·ÑÕ9²œÍ¾ñIs £-@ªx¿7!‰÷ûÛ¾_4³ìûÎ%ãðíŒäùá8T«zð±|$}ª‘ùõí(.9¸»&øÑþ†“­\`½:H^ËeþñƪRµ^Ÿ<±êz€õ„/–TÈéØšÁ:ý küiD0dl7B欯_þÈÐ ©4RòøS4øá»ÛËvʸ‘îRUÇ£#ÙcÛ¶¾’&òú‡íFyòMRèâÕ\Qr ÿx]Àê‚XgM>j¯öë8‚…Ê€DÌn—Jà/äCöžYÛØº‡ì rl”ùHÓÈkÄ‚^ŸÀ“jó–ÿŸ­Uò£Ñïy—›fâ9bà<ÝPõˆy†·q_WE䤷úÌÌlëÔO]¬hû!9Ünw”ý¸ÓñÍçï^_oÝ9§ºä½×­Ç^4ÜcƒêÛý½*÷}ß÷­µ ai "E=+ÜœPñQj"<Þ"”mÛǶÏx“¢ä¤Š1àò|:øíþû—þöË˧Míûo?mÃ53Rª6U¡2UÚÎ2¯Ê3‚"ª(ôtd’šÔT?W«þмˆõíáè蟫ˆTÂl°çá ª *fJL(¶1ÔŒyâ>ÆØ[$˜->a ¼Ì¬¬¢šµ;0+Û÷›*"ªgyÍš g-q빘}<w­§GŠÈã@Õk;Y3à yB•"z̹x3Ì`Ͳ ªz&U©¨dªBˆÌÈ}¿™KJVÏ]è¡2Ìpލªq {hËØeҮهȌ8Luó˜ETå¥ãœáCÜÄÜÍ\Õ gAçûÛdÝn`%Ü,bþñÇŸcÛýÅÄo¿}ýé§ßÞÞ&ËY^ªcßìË”¾Ùnj`@áCõ–ó8*1†§èÑ~ ¦ ûáQ•9ƒ…N6÷mÌR#ì 2UÉÊädF =£FÎ uÿ±©dkæ¬~€ˆDôò,+‹˜Ç,Ö<¦šB»¾šÛÉ’I‡ëÔ¦5ÚO¥jç\[fÎãî¢jTV'ÈÌŒc>€~úQ?QL/(­ëvz\ß_ÐÙ €¬‡³ö×™ÁRN‰¶,@2£yÀîyVÕÊ&%P y*€³N1Ð Ę̂¬ˆœÅè$æó7¯·—Í]ǰ­BE!Tå‘q×á*Œ²}ß7Žñ^9 3:89€+óAL23š‡.J¥wÛ6pÛͼföxÜY¶É>þþ÷âxüúË/ÿüé—o?}ÚÔ$sâ»ÃÖ#T”„0V£^Z²”òŠ&¬¬ÊÖEÖÌ.9C!ªÂëyY‹¢3³sZ €1–œåB¡ …£¸ˆç“›ìqƒ3OZ š}Yóÿ“¬ŠÌŒY@¹{åãþ>;îEDä ÀãÑ´Zº¶tg2{qpP•ö}AV‹Ë/>®±4€&È:½'9EVéBÕö¨¦O·—ž`ÎCEUzDz¡Sªšs¾Âø£®ã¦¢ÌêOfcx1 FÄDöôgP)‘õØD1U·Òî«’"0ÝÜ£˜Çû 5"~úéçŸ~úéoÿÇÿõÝßdòe¿}÷Í·"÷ÇooÇã~ˆjDó?çüæ‡?m.´Š ¸º›ïcë±3Dõ\©óìÉœÓÔ›¬¸÷öScŒã8.z؆a=?D)T…REôzÜΕMŸ‚fÎÖ VáñxtíLÅu,¹IUÝ;•dùéGH¤ªÃ„^ ÚÅ(Ëj‹SŸO2o·›|'•Ý…ÑZ'¶D ´3¨âœ¹ ëï¦8.[)kÌÏsW3âíííýýNÔ~cXÕ¨HFN°ÆÉ>‹ˆ™ŽáÛ6ÜUA’Ieë¢Ñü¾ï·Ûí_Ä¢]Òÿ(!™™åÉpÇ1çÖiBTµÏËñ˜‘GüãïÿÊ×ßþøéŸÿåÿÇ·ís÷)EdÖ#0 `3칈©­!¿è§«t“·öƒÛ ¢4PªÉ³Ý|Dó2ÝÔá}ŠÈZVÓÏ•¬¾þN."¦€:Ž~IT‰]j9éL|´ûT]Â¥†îkª=ãÈ™‘‚Ùe”¾žªŠæ_†“kÌ“®.iŠÚì##Ë,÷ÁRüì½[¬miv4.ÿ?çZkïsNUuwUÛnw n[Q,ƒ,òˆÄ ‚@”§Dâò€„Ä O %QÄsëå\ë¢çÓÚ[ßv·@»Gs­)µÊNd”Âÿ9”¤ÖZjßÞÝ]xÐÆÙá4Ø‹ æÄ9ƧžXÐïÃ^Î=L4t¦äæ½›SÕBÁœžáBΜ„)e¹r_†`Òf|ØÙ'gV^œ7 ÌÃ?9;ôÄÇ1sNòT&eÊןG Ì=­‹•H áb3<âHWæÉ<§\é †Ù1¤ã G*©Š{&¸¼×„ÀáV ÜB´þD”€!¢¨µ.KY×uÉE©æŒUÄÝ{ïÉñ8:ÜRÞ O ÿ"r¹\n=¶}Û¶!ÊcÆÁžå—À¬»/2LGzï]ï.G‚‹‰æª§u]W€ùýå²m;‚^½xñ±·oû»µòç>ûÎÝY«Jµ¶—¥„Gz@ SŒ LšÚ†éû‘ WáA° ¸[ŠFjAîrévª>q›(µ0ݾyŠ2èm) GEª$²åΫօY0æ¤iüøÞó²dy¦KÉÛËÌ›u3sfUb"ï½Í îŠ!BÀîx2}”¤‘—’–aæû¾§÷Iü鿆ÓiÍy6Ž Þ·€—¢ËR‰Âla$¹V•¬IÝàÂl|  ™%¯“(¼ÛR•Çl¦Ì´ äÖ(GoæÍúö«–ÓålžKî¡&Ö»™¹Y|üñëÂÜÍa©t¸‰²œ˜H)WE±oäz*¢Dé¶ãp:Å~½¾Î㼇‡G7³î¥, Db溔ˆ|†Á"Iœ%ÀAªÅ")KÅs»¹”:ô!r€ ònQÕ$_çæ^“¸ÁðHÒèPŒaŒ’oGfQTµø¨™õ°y¿qj4«ò¾w¢p•c2PJ ÷æ…Ç “Ò¦p‘21ñ!Â,’2€È~v0uèPåHá"È,¾Êi§JaB‹¾ï½”z:•œ¬ÏÇ4Ç̬ZÝó% Sï­µçó)óªgRæRj‘ÃèÇ+Ï»ë˜ýçßšsUvJ*ÎÐtχ²5—w~lì™%ûfNùºˆKxp™¢på°ˆRäý÷ß¿>¼ùèã×ö…ýìm#ãX¤zY-5 ‘pD0±H7óHOf ÷ Esïùa³ Â@D /Iæ¡%4‹L€`¶»w<Ù™0ç„^´5ï¢ýtZÇ„G„JŽÜÓ¢j\¾|Ëéþr¬Ì¶mËQúniHE´™4, *îàÀzZÜݬFŒc‡R~BnŽHßñuUD0c 6ó<\˜E˜µùgc2bJwÓðŒ䆱Ïs³QMd¿Ï VŒs1]ñHmš{U 6…EÚ¼³”êŽ}o!¢ h»©Jž;´Ú%g-?Ž G8,VåõT…ÉÝ„u=-„LµDâ‰JO©**¥„²Ö âë튩"¹&`~¼¬ªëº††Î‰ÇQ[eóÈs2HµÎÆ·t‘Š(Ox<>jºääf+7xE½‡uGQ'¢Þ¦è…ˆäoEØàÙÀ˜°çw½Þ®×[¾£Z« "R$Cfeãþ¦!ÓÆ½OÁ$äóEcš<ƒY¾eÖ˳9÷›@šäác`,:9eôDàááÁ¼³àþþbÍ00sk¾® 3AMš«|žëȬà2)N¡ê­õ66°åøš9ácÆÀ—×Z³"˜øÌÀ2Ñ*94FÒåúÉ¡¥œOë‹—ï~ç›·‡o~Èw§Óe-çEΫ8öˆ(:˜±B”¶Ÿ9*”@âá½[ÀJ)ðÆ׊¢AšKÙßœÅjÛŒÄÓ;”¼áèÝ·–ÐDX*+D—Ôó“,ðƒDó˜$ê`fŸ•YÌ0+Ò9Ñ\5ŸÏ›`ò`†1Gš9331Y·Þ]X=& QxYUpëÉu!a*2çDŠr¨Ü8ç]073‚Œ¥é6IÀPH À™„K„€ D½õ¤Øbð{Çö€¦6̃O^•q‡ù˜g˜9‘çv"±Y­e±ÉnAÌ¢E‰<\U´‘w÷ØwéÖ%-´…X8ÕkóbA©–‘ÆJ­ÙA ìž,TäŠíåÇlf{ï@Ó¢Rê0Ø'Ó#-S3+ŸÀÞ¬µ®:~3±‡SÒ˜Â<ÞÈ,¯w0 f ™ù1Š:°)R<AéVgû¾ù4v<*š¸)³õ ¤ÿsŽ{ÇiÉÝÙsd–›õÙ^‹™1@Êm’¹Ë¤RÖÊÏ–Ugï–éÐ&ÚfÒ0²JêËÊëº2ËÄsìF bJÌ »‰¬Ù-%ð{¶³OzªŽÑ‹ˆ™÷n9äú¾„%"yº—¹"M´€RÔ†;éª:4ÅGsíaÀÉd¢¥T}ùâ~]åÃoãÃï|¯Ý¿w^ä½ên[Û§åøé¥Ö¤ã„hâcYa}ÇC‚B ~ ÑŽån>ß9n н™ZED ìËÂádæ·Û¶÷$¦Ál_Ö3…Óp'âZÖ¼sDJÄ#£%¯ÌÈ›SM ‡1E š÷Þk-Ìi7ïó³y„nâ v&AÁqàx‡EXïíz{Hp´Nl¸:íĹM‹ç‰AÊÂT2f¦ 1%!891âØq0¹’¬Év(˜G•&¦`’Ü¥äbI€`Þ²cw<"†æÓBDÔ=à Ý"ÀZJ°¬éòc½]A¾”ª’æ{’8°¢º¬ëVd=À™ëi­¥FPï= ?Yœãlc&óAñm­Ih¥WqÑBq0ÆÇ`4&à3ü¬Éî67Ñ"c|8&&EÕaN®¤”ÿ˜=„ûȹGˆ†9MŽŽ˜y·„›Êº¬‰©„JfT §kßú¥h p2¬…¹²wB…eö)c™lË£ ç¢c÷rd1`êN*ù®i°a‰ÂiLápÁ /tGlfvÝòLNR¾æyÚSß#@lÌ&Íꎨ0WU‰€m»vwómß÷œ@çh‰¹ ê¶s­â^»Eäa³îÊ=‰3¥TucÎ:çä)*U'õ e"DRËš“ŒÇV…˜\”…À@XóR ³0ÀÈÑ\âÕ'‡D0G²˜b OŠ߆…æ¤s‚öÖS&.íˆ+à6†¬Ãà–ÚcÀšê+g ¤"3%õŠ€#Ñ ~b~xùeÇ–ÐÁŽ“ä¶ÁlÛvÔ¡qàEÀ¥ h9Ÿ×W¯^jáÞ÷pɲët’{h&"šD­ˆåõ´ìûnfÌ4Ég€—“>ts¸µ=Y¤„Sʧ2»û¶mQû¶]¯×Ûí”ñRJß÷·o.§å$ˆIÝB>ã ÄQ7æ¾€@a±žêásË‚¿ów~‹¨½óÎËÖäzµZKëF‘Ìùfò#)«¦Ã%Ú~VàHÐ8n#¢X–¥jÉßxÀÂsß`-=ùPÄÌ­ažBO+137Ä¢LLP":y6Ç T@rn2ËKax>¦£Íå0GšEtâÍjÖä‚ôe §9Ÿ§0}¿Ù} µ–å€e!&%Vfv{¼Õ ª¡‚¹‹`ëQ†åÓ9mï)ÓV.‰Blp¡ø¸•8‚¨ú¸ô¼ÏÇ37>v n :+ Ós 'ó xHî蹈ˆÛž¿`†2ÖÅ æê¶T9—RD'M ¨ª ®ÊõrÉâG¥¡è{DÖÅû¸I²ø!#€z§Þ=•—Eµ(ÓT KÞÄHâL}½ãsŽÄýˆäd´xîÄDCÈ—óºe….É@5gìÚ#ÂÌEž"*ò¾Aôm!b ¼)¦ˆãÎ?b™°ˆ?›˜;qšíg~Dª¸ÌmÏ“Oo~-s:-FäP?Ÿl¨6MòsN1~çwîïïJ-™Úòûðd’¿IȽ]¯OW±>só¾œÖEd™>{1 (•ùùÉ!@­ååË—ç󙿨¯µqJ„ô¶mµÞ9«÷ž‚ÅùIÌ$Â˲äÚëî|WÊòâ~yõê‹„ÛoÿöWAôÁH©o¯W˜‰]c©%,(˜HlˆÞÄR¥Âޤ÷8(W9'(ÝU‚)R3ÓÌëÂÔZî‚RJNÁ’=ÍÜód¡áûÄN$½mÀt5™²¤ ïa Cpc”TÈ9Ï£´ˆpêDÀª¦ƒ-4Én"3¥e›‘icc!óðÕ19`³h4ñûÞR—­ù‘°0=Àðaá,ÌJ-µTfÝÚ0”æ'éGD˜ "v¼—ñ<”!%H”¶+ã«Âó0ãZñPöE3ÏêÀ€·}?¬œºˆ¢CŠŽŠ Ìôxd‘d·D±‘ }gÃô!æ1ù;ˆ!ðÏ’¸mîÌÛØˆðP¢G“N™:¦$“ÍZò.j\0z8sP^M$'A4AU@²È8›K$ø<{|DÄ4rÝ×*|¸ŠyhÕ¼¼¾®KDN¾,…‰ÜÂ1[N~µý²YŸ žÀ2k)6%ç²ÍL~ž?w g÷7:Á|'3 å'¾®ëH.ËòÙÏ~æÕ«—ª’`Ôˆp‡ˆ¦ïL^óRÊårI4¯Šìsš–À ÖZkCiöà·¦Æ BnÇø¨°æ*°™hY.—Tþ>nÜÑŽ<­œ#"Bµ²”aÔÞ[DNyÆ«\–\rõ"´žÊOÿôÕRþöoüvköÿ០H˜1Ü|Ct¢B)_HÌ4dÔ¥[´Ö¸Òr^+–mÛHÓ:2ÜDÄfÆ*$BJN"R*9(ËCÊ¥tÂ*CPуPª ¡4¹ -CÇ‹“˜RÚù} bĹ«™#ÒP¥OQ)¹þÂ9Ç×ÉóÆMà‘ab0) ¹{X­ˆÄ5 EV¾Ì£GÈYÔugÌ$`¤€1±æ$˜zã!ä fd_ÆÌaÞE–bÔ¡k@YŠ0 gõ4æ&yYÒÙ/¤^J¢±HK° TNFöq<ÏžbÄ¢eÍÌû0ù1 âÁùÔ²ÝÄ€€Ç\â ‘/¾“eÓh=-xõÎ=3ÌÕ|Ûù˜øá–I µöÈf#úIûhûSa<9ºÊ…Ë'œ>…)ˆ¨’.kòEäØ%ˆ,•= €cÒ$2–P#ã0“›¤F’E+±3Ç»Éò‡»óËq§JqwDðäÜ"wœ£¼œM ¹.˜ˆÓ– ´”…f‰pÕJÜ)n¹Þyr"‚™ÒlöAL:þ–EÜÏW$  “ç=©ªÃž2ÊLJà!“NDÃ"›ÕCe´½ƒjHœЪ²¸'’‹‡ý`ö"A)›ÍDd½ùñ¨peº äë`)ö¬Uaá w dm  ™ €I«ÑëßR ÁÁÜ[ëÝŽÊ—™ÝÚñz8Øýv¿ì?×>Ä<ëCXÊ Lñ|bE¢KðÉÌoß¾m­Ýßß¿÷Þ{/^Ü'ƽšñ<õóÇ PBž² ªÙfšYBLQcXDÌÞš_KˆAδðæäk­e¶ž×½,K=Ä?E„Èç#!yùFý¬ãOÖuÍm[­Ëù´è¶mDôþûŸýèíÃ×¾ú;Íü üØËWwDÌE<:ÌQìä?˜èÌœ$Û Ýú·æ#7Ñ¡êüä`Ï–p€ñ£—ÄäÇey˜—ÔAá1| ‰%½[Ž 1‰ ‚G.Ç´’%­J1Ç}™‡óAêÌÇ=ϹÓ~ é(¢áD©NÇÁZjjJë1üO…óái­Edßí”q"">(¶¨qä&Ò•ù¡Ó\OMæÑȃr“yLHqÌûiäçâ’sù…ð8!¡aÑZ»Ýn·Ûí|>æ3Ÿy÷Ýwidúô¸²Þ÷ä,"IçÌöƒ¡i½µ˜ ¯|Á‰j,Z–eéf©HBç#HŸÜZ£%äÉË£y[Ì©Ö#zíøšãü~¸ÞþÈ?òßøÊ·œúçÞïN%g¦½Yó-³Öâûnó`”R³€£tR"^Ê¢…°p`wgeí…V®•H4Ÿ©nH´®'7 Pa)½Yï\JYE9·ù`.KKJT†† ,"Šn&N¡LØŒPDñ¡D®°”«vMÂQrÑd(E”•”JˆÊhGw–µÖ,±ÃcT ‰‘©»;I³Z²¥5'Õ…ŽÞ½ ‹¨¾ÿÁ{/îï0\¹"}¢ÞýôpšÙ*Žqƒ*Ë"À`Í”4Êm§ó¢&@¬Áª®Õ=̬”1pp¸*­÷/™_¹Ûw>zÍ0.ÎH4Ââu*å1·²”A*‚0ÒÚƒ ÃEe¼ìLý4üÌR¸$š·îT˜ª¤8zv0#ç¨J)kbÜ{7 ¥ò %·|:ÔNÔ{äüΉDd]—Rʶmîqww¹¿?ç# @U¶mãy M䬠èâø' =9E9ôEÔ[KLuä9µ,‹ÖÒ»aé»å•@(Zhp§Òw&wšÔ#v³fýºïmo¾ûÝÝÝÝýËÓùüòåËÓéôÝï|x>½t÷ÃcY–LP9eï½1«¨ àî뺞Ï'ë-ß`&¬Ä˜è²,çóùåËWonMU{§n=7éN,¬¤"‰ ‹ÊQCŽŒž Ó"ʨU‰¹2QÛ7·n©¥&Ë3˜µíV¤œê’ž½ÞnÄr^X¨Y´è'¾Õ¿õ]ûð5ÀEµ^]V]aŠ)\ÎçÉø'#Ø÷íMëDXYïX¸1G­ã*HM™ªRj½»cfQíµ–RNöâôpÅr‡ì1µ”ìIÆOˆ[wlS匼vìæÈʱmN¤•jQE1PN@ ˆCƒƒA ôÖAT—J w÷pP©ËÄîndõT³Ÿº]¯EJSv¤é‚³퀧ÞÕº¢Íf©'ëvÛn“eâ M‘v'¢»»whÁp¾¬U„‹–ä2ºç:uÎYT}¶ÁÐÂ4PEšÞ6³›Rgg"¥hkD)º®‹Nñ/ÌûÊÌnû[¢ì°‚?úùWÄò×~ó£ZÊz:N§Z #òžUUT—eæÛ¶½yó¦í{©õr¹´Ö>úè#b½\.ï½z÷\JïÖÚ¾ïM„k]TõÍ›7o^¿†‡ª®«.‹r½v"^k}mîçËÝn7www¯^¼Z–¥ímÛ_¿~ûzßw`ŠØØ­¢1˜ù€²™×]ßyõªãìpYÞãrFßnû›ÛíÑpʉæš |­57'âZIµ„HMç<)«þdç˱,«è)íTX‘Q=Q‰Þ"´®."è½[„wÛÛîn “²”IĨî¦ÍÔdÑ—²Ö»óéåKQÝ··‹2GgYA)É‚H…,iab]ײ®ºmÈ<öJ8•<eèª"ÑôsV_øÌÉÌ C~ˆŸ,­TáK­—»»ðHW*f© ~òacê‘ÓÜ÷\ꢅ;ü±Üx¬;˜â‰cÍ*WUy ¡‰4Ÿ~!vwj©”'ª“,Ìî4 ÊZ<…†ÕLDÂ1öýZ4qCÂ"RÝ¢õ†”û*·ET  к.ÿÚŸþÙhÔºåD_"Â<÷_lnäDZIÊŸ˜³åPfŒ&Œ`2ïk7ãtH„×E*„™×S[v>C .97=Ô`Ìzþ¬?þG>óöÿÕ_þ?j­uYT•9e¹¨Š_¥}oÛ¶!BTj©Ýú¾·<ƒj­Ê‡^"’$ƒ¾·,Øçx!Ò·IU9àµ<<•s½õœóæ£äñ1ÑÓ˜H‡áÍR¿Ûº~“™9˜…Ùä·ÓC f”XÃî€Eh*Eîß<½—FG{ ÉT5G“y<|ù«ßû½¾üïëZÿÌŸú‚ÖŒ=® D¤Í˜ 1õãZk¥¬džw‹pIÌö¸kMÉoÍNu £pà}3phºÓ”¤Gmžl& *»G‘,°O=iL8"g˜_ä*„J½ínTd=ŸÊr¾nvkþ»/Ìï;¾ûñõ÷÷?üý#þ þþüŸô¾g«Rdt[B¤ÊU—TpU† z8D¤œNöÄÀâ¨ÝrÂótOxÜ9Ù3‡i̹٤Û-%  ‘*µˆ{0ói­À2õ9õ¼ò¿ü'ÿØ¿ýñÓ¾rÏA Ke±\à0i®œu4”›·Zõ˜ñóä Š1LÀ]Ö>Eë[k˪>Ö,“w)9ožy(‹˜¬WÌ}åâiÒJ} mè|'sв,¥o6¨öR€\‰ªZÏiÿõŸLœOå?üwþ)=Yr;Jaf-ͨ…Sé?o—fãó=¶.ÇŒl¦Ç¹•½ÆdŠÉà-ÓÅ£%ª`|Ï€Íú1ï·G¹‚œB¼|±üüŸû§ñ¯üÖó‹óÓ¹pÏAD£pêÍ‹n½K@$¥YYD[Û{ïi%—Ÿæa² ÛŒýDÖSž€»ïû¶7¸wtëÝ„d¨ Œ +g³D“&" tï­µÞ{„iÞ ­·ãØœ †ÇåÑñÝ}÷]Yè}‡­çJ'Q¶Ú›Ýn7Ñç„õÉÅ¿øÏýt’¤°ªöÞ[ÛëRix:qʶàØì•̺Y÷€êPyΩfÒÂó;ët`ž³ê8$DrA‘ƒ-€¤ªªc™#BÝEJ2øžnxR@ „ø'þ±/<'¬O9˜{§mïÞ6Š}]—º¸’Æh©ÌµmÛ¡Ö𤇗aœéŒj]˜uÛ÷Þí|Yk-ª¥?˜¼1Öm³×¯æ8?Ÿtáxd–¹ј›£Qï%YYgŽ )Á ¹ÝØníÍëë¾¹;õ½µ½?ª³>Ç|üãìƒÉ5êf»Ùf¾è¢2'7ØÃmÛ»;$ˆ-<8–ZQ2·mgÇ*õTÖBN©ÿ`­ ka­R- K!)¬µÔS]Vњح粜K=i©ËRE€hÂV ¯U “€”DI9a¦DK)Xû¹÷Ÿý´/áÿß#€fvÛ÷½up§œ·ænÈÖ*ñç¹ Ü÷=ì‰e‰¹‡I4騞¦uÏÝÝåþþ>LÑÜijl ¤æ)•$µ²Þ§„GÈ!ŸfùaC .™ 4È´,½w'_jYjå”ç>úø[ßúö«Ï~žÊüƒ{Ž?ø¸¿Ô¼WN§àÖºJ]Ö%ä*µ¨„íÌRŠ0‰JŽ<;ANËÒy@%ZÛUÓda™0½4É`Iùwß·MK©¥PÞc#±(s%+™¹™Á!g8ƒYD¥ fq„YršŸãÓ Â@¥›‚hàÛmK_賂€ëõŠéØ’›Š1ÖôÑ-ª*à@¤fC)+µ.˲´>Vj™“u Í9ÒÔÑO÷ä(õQ}àè»;E)\ƒ‹àá ™ËÔZ´äü,% ZkÌRÊùÝwßûÌg®=ÍÍÓ—JžSÖ'o¯ˆ{7ÕBP7*¥ /½Ûhñ„ÍðÜ¥¤¨à í"RŠ\¯[‚k]ÜÍÜ:h#}n¦æÆlU)¹0ÍÙÐ!tj½áfäN=‚ÃìÆ,‘;¬$¢!ÞÙ;[j¿çjì9>¹yºxp¡$QªÖËå¼m·Öo·[ŸèCv‚•!áÇL*})é…³6"n·«{L¬ZÁ1D”Jǽ÷Zë¢Z•‹¬œ¨J•ZÊ®æ`Xᜫ®äQ¸D…óg±y‘3¨ji´ÓÀI긿¿{ï½Wßþøê 'çJô\c}‚ñ«_þ?úï•B–œ¦íÖö¢ˆôpw”RùÖpÀEÈ¢g1ò¼eA,Š…¨¦üež;þ´Ž6) i3¶ÝBÄ™Âͬa÷À$àˆ8YR‰ÈÍã£7ûßó=>Çh0¼vå;Bá\(³öÛÃëÖÚýý 81J¸ï7Ûê~¹\X "ážzð0³–ÔwU*‹Šr»=¼Ub‰P1õèaxUÆ ˜øWIZ‡Yx¢¬äIÇv8®æŸGj˜©–šÞmDBœÑ$Š–G”¨Z "õˆïîr®Ïó«O8þÒö+ÿñ_øÒ¡‡Ó£lßGÂ2Xíûpèb+EœÆ±¥è²½o"¬¤‰™jè„ N™D µŸ´16m½'K˜úÞx-J wT8ÀCë0W49]Õðöç~î¯~ª×ï9AVB„€çZ&—»K¶bÛm¯‹¦zÌù|Æ\è-K%b³Ý'瑲ò‚GD˜UáeY‚@ g78.—‹™Jí1´L¢J”Ì€BD’ÒO –D),幜f(§¡UŠSòfæ‚;é#‡ÚeŽËzëÙÄRÀÜö}ÿÀ¿=ÇTüá/ÿ[ÿÂÏ~ñƒwÌm´#…#RÁÎ À™ÂK‘e­%†â­(†ºÀ÷Hîq'È!ÛÃx”»“ˆ4^…3 ±ƒX)Ë(¤+@Ä8z’+ÂÁ  ûÕ/ûÓ½tÏAóÓÍ®Ÿˆˆ8íéÝýåË——ËåÍë·˜>™¦-@ZU³ª¤Ùø²®ÌÙøËØÚ1ƒ¹Öz:ÀžC*æ¢÷÷÷£ÂÒ!˜)C_BR-P&ã*³Õ‘¶˜“,”fÌp÷žT8¢É¿ÌG\—Zëf9hE€DYF¢,½÷xžJ|²áÿ~ùßü3ÿèþ»̜lçe­‰„¾î·ÞÝD4P8-Ì™z§„‹§CEj€t2ÀÇ­©ªÝ;%ßÇ5¦J”Ð`Þ:ƒQlè"‹»'Y2UÊœÐB"E4ûµ¿õÝÿâúOóÂ=Çc-Z—õ¤:ð›eÑž+‰¢YmådfnS媔Þûš¸ît»Ý,´ÖºÊZ—·Ûm€ôÌúºžKIÅtwë­µÖ{QN‡2Ǽ¥Ü»›'N5Mâ–*foË*ëét>ŸU”ˆC¾ð0ë)ä™ÈE—u]åyèþéÅ¿÷ŸüÒ¿ô'¾ô“_|™íá4•ò¡wÆÞºEu*u~LÌœz¥•Òd“¹³ªOò9R>•„‰Ã#…K,HUI@óÃd¹µ6%rRÄ‘þê¯ëøßþ¯Oñ=ÇïŠ[ à‰hzx s2Có.Z×uoƒ~_JÉÃ@‡ë¢è£Jè`YˆD¤” {Ú&º¡í¾G 9 @µ–eY£wöÔð&¥Qþ¤Úa˜ É‹lÓ/$E>ÜmªÆåÄ”o·‚îïïk­a–9C)pz ²kyFb}Êñ ÿýß&¢¢ügÿ•Ÿeª‰hIÀ“"Òˆ¶[§GŒ/’ -Bª`Ê“Œ§’`"eÒ,Å/˜9)éR 'ÿ¡OjkyTNVàý•¯ý•ÿýëñ¼—ùÁ  ÉÒ©µV Gâ­n<Öj!š"ýÈYgz½ˆ¨¤*Ắ‰‰Ï6Ð,à„õÞ‚¨SÂåS^f0zBÙD÷i^MÑR ”ñŠIDD‹™åx+ì&d»¾PTUëîHÍ÷èçËykµ‘P Q 3‡#R0„ÝÌò°”uY–e!bwìLÄJ”V ÝÌØ=BåvÛ‹–Z‹ -‹: Ã<ÄݘX±¨®ë"ÏC÷ÈøèíND?ÿßýõüíûïž³túçÿ™Ÿr³õß›Àvf6£ˆpjD"…H‚ˆU¦n²° ðµo?ü/¿òÕ„Ã|ó»¿O çøFjyjYDAär8;«¤–uãZY•k]’6cf€J .hi=“ˆ3'¢º¬Ö:bY×z>ŸC¢ïnçóyÛ¶2_ÁD3w‰HèDªÇ'0õ·j­É°‡0­ ´÷ò]逸iq÷ÔÛDX¾7! O>‘µæRVšÈýçøÁo}ï–¿øþÓ_;þðÕýòîËeü†‡£¦Æ MfþÎÇû›ë3 ð„``è•Rzšû99‘e£ µ=ÁÉ 2·œÇ“GÊ·ƒPj¥)U”=¦™õn,Þ fBpš-_ÂÉ„á>ÛÊØ!2sÊ'Ùz­‹ˆ@&>~zÝ#­\%½Ò 7‹±Q3…G·ëkRëíöð ý¡Žß¶ß¶OûU<Ç'ù¸ëÙM9J§ÖÍz7ëC7 –(§J) JFr†ù µpônnN%Þ't€˜xPs2ãäJ'^’\–žVˆÖÌf‘àtò(µÔü8êá§Óš`w÷Þ{gæè¡_ÿÆ7‰HK1w&Ú÷ö\d=Çsü…ˆÙÀ»ÓÀç‰ -˲Ú°¼•”œv÷Z qÈðÔÞ]òRî|]WJóä‰I‰ªâ…z³Eär:¿¦‡½uês‰“ª4­µmÛã©)æ\çåv/!a±ãøÃäU«ÅT“˜äxóúõ¯ýÚ_{óæMňyß·ç ë9žã‡(ŽTS¬[Ρ¯yL ⬢Ž/i{ûè£ïek•ú3iŸÓ=­49¿4àÖ½m·~w/u¿í½ûívË3eEyzáPäØŒ¸µÖ{=ÒV¦¤¸’? 69¢R˜>§ÓÅ­ ëé´z>ŸÛ¶/KínQk5¢tëôœ°žã9~˜¨ ‹(33ˆ€¸Ýnʹ¯£ZÕ’Þ¦Ó3^DD•‰Qk¸µ ”¤6•Þýõ›×­µ/þ¡ËùþâlZ—S)%EWÂ"­E‹ £æì-…pŒÛiâ§rª&&I³Â”„—ºh)5Ñ"º,‹V˜Ù¾ï ×2ßi=ŽIÿs<ÇsüðRwTUµ=ܸ.Ö{D¬ëÚ¶=©x©êw>¯‰@(eHúy3½[Ûw±ÄK5c°ÏõóŸÿåË—çóJì­_»‡Y'¢Ù>‹Š*«&ܞͺ»Õ¢û¾õÞ"’v#ÌD w—AÅf†ŸeÊ©0ã±.U†J2ö}¹ý_ÁTqÞ¶ÛõzMVäs<ÇsüÅÁ{)U×e „ W-›ßÌMJÚÌÏäphxI)ÉËDÓ'Ž1òÐ,½rÿ¨ÿ7{ï²$I–d‡}Ük݀éá‚Ü; …ÿ¿Ç?`È † Îô£ª+ÂÍîÕjf‘=€@ØÈT»ˆ~eGx¸{zI¨¨=zŽìz-i­-·›ˆ–n•3cìSë1¬êÛÛÛ—¯_DÄsÛV3k­}ùòåw¿û]½‰ÖZ%ñ\—9.¼ŠÑ6s"š6mÎòÅVÕ÷÷÷³á/}j#—™æ{œÍ¶®ëºjfœ¥æ´„¹Ýnû- ö–¥ÃÚE µq ïÊA´,‹»SD4‘#¼™ö¢ïÞº#æ´)CDzÛA€»çõ¸?š6fj·ÛtRÕÇý¾Eê^§9.¼ˆêôX…šjFŠêÒÚý~KØÇÇÇ©)=݈¨µÖšÖIòÜ Éæþ‡?þ)"–¥9úÒË-¹6xcŒ¾¼ÕÑñs÷#-¥{õlç% 2JG±³÷‘õ¹R˜UÉÝÙÝÌ"“[]Z#Óݽõ^§Ù¨çy<_¿¾1Ñú|ÞZñúB”ÈŠ$øuÿ\¸páÿ7aզ♠13"^–åv»=?¶1žÅ—»»ªVÂÑ.0ÈH€„Õ¦mc çqRR‰â—ZÍp´;Õì[Biå C•‚² ½>™ø Ùïo¾¦fnÛp÷Ö"DD%‰0ç˜sดŽÌ±­Ï'Ý)¢|i.¹è… ¯ f2«´Ý]ZdôiˆP‰»+é®ßÜ;/±ù¼Ýn,åUf¡µ¶ô^W4Ԗц¯«X¸µö™%}èDëeŠ®Ð[Wáï÷ªäTÕð½˜uÛÆ¶= 1çíù\‰n™!"eXáÿÊŸò… þ‡ÀÝÓ&“”ÈàR¥ª2Ïâ¿{—ÖZ«jî>ì(³pæ?þ›m¬L$*\‚ôÌRÒŶmc$}GAAݵ+ÜáQ'4¹{Š‚…#â§Ÿ~BÞ2S…3£¬OÁR‘)"’н™µ¦Çãñxô.a´Yd$íé‹­Q`Ãe†uáÂË¡eí:­ϹÎkEHÕëTÃ%JÜN¢ªª?þøãsýc;õZ „9”E$Áî#ß»¹ìÞ¡å1çL ÌBÃrýØ~úýç6º6x ÜÆúûüÇúÿ±ÉÖX À¡ÄʤČâ&úåþøòøúv»7–·ûeFÆœ6‘L¢HQºü°.\x0—ÿ 'L9‹>níÖ…ÒÃfE=›3Ì7âP!¤s9-sû ö1V›2¤Ô8R"Òû›¯÷ûM´/ý«ÐíÔŠ*€ØË2ÁJ”3Ïi"šÈÖZï­+ýúåËÛ½¤éKïs7#µ9§°×ÅŠqo½÷ÎÌYÇ1#<#=Ã=ÌÂqù4\¸ðRH ÓE˜DÒš,­‹’'¢µv¿ãý}ý³½ƒBôž„3±‚TU[7óÒBU(×ÒÌ ‰9‡ôæîs¡LóZeØGÂÓF8|"ƒ2#âË—/ÊøÓŸþ‰Pþ3¤Ú~üñ··¥ýñ?UïG̪:ÝÜYTú#Ýï·Ûý„™iCúÒµéûÑaäaë~M….¼ÜÝ9ìQ‡oŒôÞz¿¯ÀŸêëîî‘2ÒÝ…HX‚33[k§Öív{Üï™T=Ìûûû6Ò]ʾ4 û–P„—’m}Fº;Q‰ÑsŒÍ‰Î¯/÷3ƒ¹µ¶Žˆ2)“p30šH¦|¼›ÓßÞDèv[Zk3¼”÷”q|]¸ðbÈt/Õùœ“æ>Æ8,ค©«ÒV¹ú¬ý9²&ÇÒ=ìO\Ž¡"˲DD1E6mÌñIêãê©:×”ÃOè¾èË’‰Lh“{ï»” 0³¸#y}:%Yz¿7bô®ÛöáÛ]…e¬’݈Ö[c–ŸÊ£ù /\xˆE”’‹V¯êQtûœ^ÝÓ6že¼.ÄcŒ¥õ1e®[­æ¹X\–EU‘YfyÛ¶=¾ü ¼¬sV°Åy¬£„¹÷Þ{ß¶-b+¥üyÝ{c¦9çóùlúÖ{·ØE Ì 3§À¹;BUZ“Ö­óo~óƒ»ûÜXH’X ÒCNqáÂ…WÁQAˆ£¨¥=:~·œZ­œ>« 13g“îL¬šQ¹Í%(­XèÒ^©ªÏ=q¬µæ{‰1!ƒ‰[×ÞûýÑDÑ{»?Zk› ^=UU®á… /ßI¥Ó+8#bÛ6pÎ9KÔ}Q>2L{ïM”™Ã,’D¤œÖŒ1Æ| žÓ–íÖÄ^£e <Çb³ºÐÉý('ëgòze–z7ÏȨAôv{rÎi晄Ãã†Y@±,=aëú¬>nÚt¯x2€¨b)®Š ^yèÚ#IgqcXLwíEÊ̪Rf.f¸×œøx<ªæôÞ眽wF&¤“…¼=Þ·_ÖbÉ“]æMDˆÒ#Ϲ¹ïÉÌñy©“D B¦ 0 •mæ›Ù“ØAé“™Δð‘>˜áaaDD"6Íþ›ŸÏ… þöIHJd$QŠÐœÃÝ2ãýã÷Ùº0ÈÍ„öMbISxgjµŠûKd"JÆžðHKLKä4ËÝ­€:¬©à‹Q B‰&ÜO¯ä ¤»»ÏÈHH&‡‡™ clc¬ ]D”õîT% bPFÔú@ 3C„AW{uáÂ+áP`×0³pï ¬ÏÜÆØÊî ‘uES\ý ¨f@d¯V‡>DÄħif2Ó¶­ÛöLɯ_¿þöÇúé§:Í9N"¤¨xá[ë5,f"Ü‹†/_…ýxðŒ¬þÜœˆ*…pŒá¾P×Þ;%æ¦}`4·ðr“°k$¼pá…°3îL”‡Å‹ãv»s C µÜç6öÕžj)ªt¸»ˆÖ,yv0§–{º‡»skå¡ÜZ¿?¾}ùöíïÿþ﨩4Ó##²Î ³lªzë†•Ìæ#G¤:®ÏÙùíñ¶ô?Ui‘‘ÀádCD4ưi¸d .¼NÆ}ßÎöÜx¢úCﵚsß¶­.uJôP?S¬ƒÄS'@GòésN[¥,ÓsÌñåË—··7e Ã<îîæN#§5m­•wÄÑF•,^Ž×Ø]#êÄ'‹ŸŠˆÞZf®ëzF/× ØŸbÑZVa‰D-ù„Kn¥½³ª~ŒÉë¶mö[Bs23܉‚€Œ@œîJ'Æ”‘L?¿~DFWÀ—ŸNƒïïïKÕÎÌ rî½kêŸ?æœ#¡* ®Óœ ^ ‘‘ fÊÌ2Žˆ9§ª.z›#¾khÂÌN;uL´+¶2OW«Ìt³ <Ûí>§[ wVmbÁ"!"ŒC8z[n½ud’igÓODx â™Ù}w¨vŽŽ ÕFD½õÌüýï_ñ­însVØÄÁ¥•ºý°š¿ G/\x)ìlSîÖSÈýw¹®“G/QT5\'ƒä¥íŸî R}SU1gé­n·Ûþ£{sW5j +áhfÚôu]o½ «ö›ƒ€‘1Gò!Œu[ XŸ+1Q21“0‹€ÀLåX%̪ÜTf*€Ì4$NÊê9×5›>·¾°JJ&%L¤ªfîÎÜ»0ë'åváÂ…WÀQ›8k>ÊL*‰Ê¢Ï*¾øî¼v‹#BN}ù¡Q "Ui]n÷[Ü42R‰’U™cH[ÓzýZkÒuŒ‘⥘ËÄ>Á“E´2î¾1k½³õ¹™M"Še‘®H]¹»Q:r]í¸òç¶z¸!®äç ^*²(‹8DH„ÂB,,DÂ,½/ÅdeÂÌ3¡ P&e€Xz]Þp$ÔzK„ˆf¢O– n½ q ™Å}}jxYF4ùü:¡µÖ–ÀÝEZ97«jdcÊE¥3Ó¬fIžsÎ9Ç(‹òi1Íæ˜—ªáÂ…Wí*¥$ÎÒaEx¤‘ 2–e!îÏñóÏ¿º*/c[ź›awe`WE¸;2¹mÛmٯ̖yé»»‹™më:Æ,‘€ˆ0ß·EõÞ˧&3—e¹ßïuWH‡CÖÞ&T’5€Ü»wÊMD–e!bùúõëžrxQX.¼Nï„<4çg¸ÝnÕ¬ê º dªVTšN¹TfæÖú²,Ä\Ï{˜,3S¥îÇÎå‡sΦÊD™Õae©€<™÷ý:šBï«…÷¾°ˆ™•Ôb]Wó±tai´Gãd¢È/ U"BÐæ®*’`*7®«ÃºpáuPj†óBFš€¢6þ­5; õNû¹7ÜE U¡#–´ê0gB˜ÇýqSÑÌsV1¡òÃ*$`nºëÛQÕ‘™“hYuR™™îN@fªj¾u„(asŒç3A*â™Ù¶m¤ýŒZ¼*Ö… /„ïUU”•¸ß(ض­Ú(:Ÿ봰:2i² ¸jöŠØe¥Ë²L÷Û lºDÕ8•ÞÚ/ÛúééND˲,½oÏgøˆ’#0K5\­5Å~*XïuY0¹GÙ9ÔÖ ^VXT´i|<Hwðò‡ ²,$ŠÏÄ .¼ÜÃÜ(!OQRUó½™sVÙ*‹ä~:»­DD–ë(ÌöBQÎ Û6X BN¾m>ÆÈÜçOwÿ´×êËRe/b?¡öðS܅ÆTD¾? ªQÇiaP$™ˆTl}•¥²Ue–zÚ]~uéÜ/\x)x]'G~`æÖZµTøÔ[å‘'¿ÓXõç*/§cÂac3s³È]z»ÝX$<Æ5cfõ;»ôÔ}Îqоˆ>Ý`jÉ̢̌Þ{¤±fƲô2AõL!$Ü-ÂÙZ#áÀîhª*M•ûýάÏçV¤ÚU±.\x!”F€Z¦E"9F‰Û÷èåÈŒÌiû¥af¦%DX„q¼¨¶R)$à*Z6 `â ˜ÇË €À‘á1#ŠD Œ}y„$"N …ˆ3 $‰fŸ6Ó#ê|Ñà$µH±‚…@1-Âæ6ÓbÆ­À²3s.\x ´Ö˜gfµZ`íL2™€Ö”YY49ÞÇH–·¥#nÊ‚ Ÿ#€È4Ÿ Œp÷™éÏõý—÷wBfØîGåJÔ5ÌkáXŒ˜Ë×tGuX½·óTð»ÃŸˆpDXU@ðc¯¹{t11qy<ÔœXÿ]–ÊÌŒ„™q…ñ\„û… ¯…rš:˜÷Ý y]·r†Y×uÛ¶Œ8œÖ£. ™@î9†¤Mk'¨*5N`nnV|½1kktâ”Ò"RÁö™At¾¡cÔŒ„üów\+Ɉ ß'Ç3a©3È¢®sT>8»Ë15ÕÝâªY.¼ö_ì–X™ðða›ùfÃöÀÁîñ‰ô@DPR“°»³±”²Š¤¹Ç´y«VÉ#KóD8-•?;,f*×v AI{úaHœ~|Ƚþ‚6Ûpʵ¹*vÝ–ÍYv9Âu6¸'™ÙœVmׯøÑ_¸pá¯E5»1PfysÚ¶mÅ©ï+¸#_‡‘g]Mï¢Nó#Ö TõñöX–%#¶mÛ¶@‘á•*¿gY[BáDÖ«3¡©È¬|±¦í(mu”viõ€*~6§M«¿Ãün“ì&Ë*¥MÝf¶±y…?_¸ð: r1ѲÜ"³Œ[Jî^íK閪М(/Ïò#-Ò½„ßo?üðCíçÑ[/³õª9ûibRåÖDµX'ª™NDˆ„Þû©Ç?[­S÷yLˆô©v©ÿ0s7wÐÞU‚(.áè… /…´NR»D e¾P…5²|RCgÑ(ÄÂ"ÊÄÕÙ0³Ù¬’Wê(wcá֚ʧ¾½ VÒþ&˜ˆ’jL G9Ì<çŒðS qØcñ²,­í%ðv»©jf¸û©áªÛiwÜŽœô€‹w¿pá…PÇÏD§.ò)M ";‚ûè¬ 5»ûÎ.¼Ê\dø!É$"÷¨#?ÉÄœ3U×ùêŠO{†Ê ps7ŸîîVš¬R«ÇaÑ%3àîR*-cŒmLç#P IDATóT T͉Èt÷L¥½ܵd1Æzü… ^"»VDäÓG„‚wû¯\M’Ñ®ŠuáÂKaÎÙÉ2ánrÓˆ™Pâ=Û¡tâ[˜@Ê÷¥k#"òPQäDLIª-­ÜòÄ-…ù¶,c¬Ër#ãA,J43ò(·†\ב™îuá'™°w¸§ìE³ Â,ÇÕbfÕ¿%A´ëÁ"¦Íð&ËMKeÑšˆŒjÀ„…Y‰AÄÄm7$¼pá }Û¶7>ITöyÙZK3ÑÖÚÈ’„¢ g&ˆ’©¨&³Ju®*—ƘÏçsÝV{Ü*ìõm?ÍØ‹ÍÊÚGF”Ìî‡IÕãÅaOãº(º;×ðÉ”¹ó_‘ÈÌé¾Ù\ÜDTŽXªÕQm7$"¢r¬ ^™ŒP\6°³@`Ž4Uí­ˆÌCO¾ï«¤‹¨È˜V°ð…HTËÍÅÝ{oÓÓ=æœfçO?¬3ƒˆ*±§°“Pž‘ˆÓƒô{唈¬ë³ö‰s~dºƒÁ¤ºóÿ&.ÇJ±µN€ÙŸj ÄD~I±.\x%ì «Üe•B¢ª8$âQ¤ö(—D¸›™*ƒ©¦1bª×nND<ýý—_¶meæ1FkKï­yÜ–%¸|×v8Å];¿~>»—¾ëƒíB‡Ì,SÁŠK<~–H¤¨nKg0{ø6æé/áá™i¶ ¸Æ¶M›WÁºpáeIDÂrƒ‡Þ=O ™=?žëÇ|O8 ä6F9LiºO3ósšÛs[Í|z}“똘@Ó,#NyDqXGòjd¥žï™SDXø°ü¾$"m-¨ EÀYÅ3·1”Ö¥+kméÈ·cûùç÷Û—¯î~U« ^ ‡[}?œÑáà¾K—˜9¢‰_„º2V!@…tjàĨ€0T•"Ü{WU1¶m5Zòt­Ã"ª[s¯ÖiwMd&²‹ª£ß¿{ìþ§PAIáÑ´µÖ;Ÿ¤XDÖsµ¦·Û­Òí¯%á… /„ºkVâ:iþ~ wüš'3+IoˆX>Äœn‘Ĥ,Qü—E†;#—Ûr»ÝænºDz^öìÖ~¼¿ö‹XuÄ#朒%H•ˆÈã˜1"2ÍÝsOy 3³’E„{EÊ·RU”Üôß,oÜo»˜þªX.¼""#IQꪬ~ê0>Í]ÎÈÑOQ:2Â#£"bÕ›¹Õ±G˜Ï®²m¸I|dD0€9W³é>`fQiMŒGîiÃlN÷@&g"Âܪ*Ò˜:'û˜¶Zz´É­·;²eTE[dho‘N]Z¤31%_K ^‘Hb¦F$9}û_^1Ì &ÈãæYU „DX ˆÀ bâ ¸·~ëªáþñüx~ÔÏ2íó&‘±k»i|­îŠz%²º#b€”YVîõ&€°¨," C(ˆ")`Ã3¸ô¥æ‘mY˜Å}ê^g›6)ÐZûµ>÷ .ü PCX%qíøê(§õœg:ù—03›3##3"ã`°‰8ÜK?ÆHàþ¸alãÈ]Þ¡Zkª p"2÷*F§=ÃaA'yV_ÿü3WNõ>ôÕ»¯Lé÷÷wfiM¨˜ÿéÛ˜û[d¾õ›¶¾m?_´û… /‡ºa.}¥ˆLßsRqØ·”Wòqí¼cwÆ*> @ø³´Õi!€m’HQ%ÖRw¢„£ªz»ÝžÏu¿H<^`¯PeÖujD„üÌùé½E°»œlºÆ ÏçÇÇûÇívûöíZS˜•EX˜DDˆÛr»«èœ~?_¸ðZ0sÑ`戜s÷’Z×õù|ò:ܨÊÙç2ñX2–R*3ÇÛ¶½½}‘ãy]ŸZÝÖX’?;,ª w:=NNžˆXX¥4{W•™î!ÉÅígJ™¾ïË¢ï‚Q‡Ý”ÉcØœÎ,€d’Ì}é·_é3¿pá¿DL„ˆá0/•åœóù|nÛF¼ÛçEĹ ¸;ó©~HßnäDk]UAÔZ{<‘D\‚,ŸîMõ³`©êí¶lÛ˜sjjžÂ &VUD¥Kïñ­•³S5UõV´ô¹Ÿõ¤ƒeYU!¢9fºG"6M¸g¦Í@þs£¯ .ü-CUE4}ôÑ®[ªïÖ~°lg_Ò}â;|cÎIì 2wU%ÂÇÇ}ûöí·¿ýöñ\‡³H™†úé ¿¬e¹Ýn33Jä|8 ‹(@tFâàükôsw‘¬'ÅÙ”1ïý s‰ðiÛÆ}Y”ö-“J„•Àœö«|î.\ø«±W¨ý·¾µ^@UUµ÷žw«_|UÉ̪h'qNL¹§¢Rf ªu9Óz'øº®OjwùŽ4ÿŒù*!<€òÞ«Gä‘AÇ èî™Á̉d><á¹Øµ¬q²žj üÖúãñVÃf‰b—e™Ó™µµÌ»W\É.¼jÁ‡XTËø *ˆdæ =§~'»«½:ÇCd]ÐͥͼßsΟþôûm{z Ií"¢òÔÊÖuýøøX×uŒÍÌ" )D “ªÏ–VÓ¢0 77³ˆÉ mܺ¨îáˆD„Àø¶MÎÊpßÖ‘D”i1ÜÍüÒ^¸ðB¨F‰™kÏÇL b02“asóˆÓ=÷ÿÎ$Ôˆ†ƒG`f¿üòó¶m÷eéýÑÚ­±P"|„Ïg Ÿ6æÜ"œ(ÍGÂÎ'€$J"$Ò†o¹‹rí'iB´9Ÿ™Nœoûã~þòÜ>¶$ILÞ17Ý—¾M›ÂJ$ÿµÏäÂ… “ b&V™n¥yšnAU0‰È°¹‘QŒ<²Aä ”Ÿ¶ëv»1s&Â}ŽmÌ9"g°u(„1Çœ›ð±%<ŒÌ9Íf„ÃàsN‚g&átq8I¨Œ ORâ’8ôÄ`î¼ÿò ‚¾¼}en"ïïÿ×ÿýŸ7çÞï« × yÉ.\x-3çΨÏ9“Ñ»öÞÝýýc;rtv;æÆÌY•¤n‡Kñ@ÄÌ>溮½÷eYî÷»GÜïwÑ%€êã–¥?Ǻ‹0‰j;ÄVZËFU©ƒiÕÖ´‹HÙ2 HŠ„2sÌ9猀UÏF©"ªº,}Yšˆ4an­1þÓúûüǰmûß WÅ… ¯ƒ]GÊØsŒQnQ%¼*•Cñ_§ЉKü$,½514E|‹èãþ¨p°Ú0Ö3¯ë:Æ@bçõ°pk]dŽ1‰¸éÒÚ¢ÚÓÍ,fæLÈDFÙ¢RE"2äÓž› 7b&òú»ó?üðvÿ¢Z~õcôÞÿÃøßÞ·X§U5ÄazáÂ…—€æ+TG}´Ûsž;·C,sÎ ¬ÿ«M‹‰/o¿ˆ=—+ÜËÐ8‘á¾mÛ2çíŽÒ1`f3ßEélî)Ò*´õããƒöR‡yd£•rLj‘A¢s8„º-÷êYànÓ¶H¯kj›³â}n·ÛßýÝß}ûö­¢bŸÏç4» ü.\x-w‚hM‰è~¿«jiGó°ñûøøØM“"j­UÂÌ,Üz/ËÌ@h­‰02EuY–ÃUG+—‰ ÀÌ·m›sÖq;v¹ýô÷÷w€T{D¥=I3<¢z4‚0³ŠvV¡ZUî„ê^‹A÷9'Ýn·¾,§B÷³É_÷ó¿páÂ_f®0ÓÖÚ²,qžÕÓX–¥ì±p ž»E sï]D0•d§Ùú|Î9«>”úá4¬³ô9¶é–LPfi(‚˜çœ½-*š ·(ÎË=<#f!ú´÷Ëfê‹.KëK¿ÝnÇ£þ>qèUO» QÑËëÂ…×Bfðá±^Ìz¥=—‡pµ]Ømòü$¶ê»ª*û-àÎa­ë:ç P%Ì»û¶mgcµßHŸÂÑ@Zìj+X¤ qSbæÞ;íq8<ƒa+÷¶ ‰ÌQÑŠUµÒÓ#D{æbfFÎiîÑZsȰ´YJ .¼È„»«R…ÜhkÕQïh+Ï…ê¹>]^’@$L*B¥À"&BdeË«¶Öû}¹9‰H¥M÷Dz,U°˜zO“r #`éK—®ì½w¢´9lZ¦ ¤°¹M¤ ØÇœ4UdlOe„ˆ#“EÌcµ)ë{ô®*·Ûú±&q D9ƒ8)&S(]3á… /:Ü¥s0ÊlpÎmÛžÏçyIµÞËuŒ¹®À_¾|mzÃîf³¨*3©ÊIà]¸páo÷»ß¹Ûyä|†Î´ÖZkuºüöö6çx>×u]kñ7Æ(3{Ü¿ª,î˜ÓÝS¸gÐØÊÕ%Ýíù|V}fyžN£8,aQâ‘HBLÕ@}W›¨.§ëÔ¹µFÁH)‘EÕÑÖZiÙ3S[%Kko½6ª Ój¶e¢éMXøê°.\x˜Yo]8ÇŲ—yT1åsÎòó3÷û})Ò½tšº+1išmëtO&A“²tæÞ´›™Ù¸ßUí½±ì²§c<ËrEh£ŠM…·Þo·[.GãìU¨Ê)²(ˆj½ûzØý~+{ÓÞ—ŠÏqOUµisغnØ‹¿ÚGáÂ…¿¿¼ÿÂÂsÎޗ̈؋TqUµ‹33a9{¥rõ;'¶±Ímµ FŠ˜»pWYªÃ"¢Çãq6IUvJQ°;Žª(3@ T•@ÔZ7.s®¢ZógÅԛǶmhÕ[™6gY_hlcÛ†»÷Þ?>>"âþóÿó\'À·å^kÎ+EõÂ…B&ÌvÆ{Œ¹,\‡~îV“VI±®[„—xÀ²,Upš&ÑÓ=ÜlÎA™L0Ÿ>gD”Õ_jDaVÝÆnúÎæ˜cÛÖçsÛ¶ºB5;Qå.Jî‘ɽ÷]«¡ªæ;¯*¢Âࢨ¥;˜åßþ»/íADáè}aæK‰uá ¡NbÜÝݘËlo(}xfÞn·ŒA9VfVËÁ§æœá±­Ûa“æaDÐÆµ¦ûøø¦ªÒ—¾,Króµ‚TN™µL(XŽ[àtŸHšÓD„IÒÖÃÍÝXï­±hgfÚ¶锉L&¦zksëúñþü3)Ú¢ÿÇÿù¿ÿù—í¿Ìç˜÷ÛÄ“/·† ^É,–™±[³˜™*ïÎ.DªÊìÂRBôÞ—ê³ê*°`2ç´m]Í\˜ED,”@ØsÝnÒ$H$–¹MŸ•K(Â*Ä„L:̈(QŽ15 †jiifsDƒgÖ"Ì J&Jfd"sΙ$ÊÒ[k­mã  a›hk$°À5^¸ð28îêM«P,Ëa5Å~êv·¿O懖¾¸¹ˆ[¯ªŽ NL½µ 'QdŽ9I(G·ŒTåÆî™É‚2ð#¢ÓRæô…(žwA>¤\cÌ1F)Â(‘©¨²ØôL´ÖÌl}®"eÏgê][¯£Å_烿páÂ_j¬ZSá^&V êý6Ææ‰ª;á(Öýv«ßúûý^%¥fIÍ9ÃÆ^@Öu•†Ù—…öçÈiænÈýœÐ̶móc yæaKF”°¢d8üáÏoWa‘ð8ÓRY¸¸x÷û­µ¶>׳ð]¸pá%°_¹ˆœ^eÿY¤xþe¥C¤)GDDM[k­~÷{ïÅÐ×w™YT«;î šfÕ¬:,¦pgb.VlÛ¶mÛò¨&uTþ fÓ=Î÷]+ÌJÈ â̬ä®êËPÝGÙeYT¥â©‹‡»ßï‘qùË\¸ðrÈ=ˆPŠöï”æì¦UÚίôÞgEüUȪÈ÷Þ-ªúööv8aˆ˜¨ìdj°ãzÁÊem­ñ!´g‘<¦¿3Êû„hJ1Q¢{3«÷¶†±—¹Þ3×íN]rŸj "áÒ4\¸ðZ¨ãßÃÒ.+Aç òÂÑßàÎÎbTÆ~f6¶íûêV;Äz6" ³µv¿ßë‹»ý3æ €ˆpïJœ¾WÄÞZÌíìâÎV  ³ÔU¿gf™®ªãc”G»™=ŸÏ[_DÔÌßßß“ WH»“{2J~ök}ô.\økQÄŽ*¼xì³D¸{IÞ·mË`P–«Z§úC‰àKêTâM‡)GäjÛcY:ú8Æ>-fé¾ÏnÊIgEl­ÍØË¾ã§ÎwFî"Q¨÷ºöX @Tº.‘~»5mc›™YUš%×òãÓ¹páÂßÊ⊄úõg‘:>vE›Rù .üK‘(ay™4œAª§K%Çœ"ûp&""XŸÏõYDØ÷Õ@ ?Uê@ZUúǨQ,©2oDJIÁ˲øž‘CÇ1ÅaœU!©GÔM…8«êœ»²¡¶„ã˜ë 朔^Z‡úÁ9'H믤ª1¬4«ÿÚŸõ… þ;Aìrö¦Kd´h2䂃f“ã'ˆ™‘@¢èªïmHE$"E¸5eæÛý¾9Ù\kóX0»Œóôf(¶lŽQ©\tÜ%¬u›û)w(¶¿~𴼩'4·iõŽ•™…÷èW"ÞbmN;Ü'.\¸ðÈÄœÃ}7ì¬ÊpS§ÌÝ¿—,Ôæœë¶}_ÅjWXˆpwSõææn@öÞËlãtf]«úýd¶ï#Ë;¢~@Ù+T…ª÷Q/öññÜêE˜ùù| ËÒ—eY>>>Öm;-ŸçaS†ªß+÷/\¸ð7ŽÌ¨ßßÊ=ÍL ÏF ‡«¾e‡F´Ü¬JUêh€vÚvüãñ¨×"”Ž*ËqoŸ*K=‘™"L¨G”X¡©»j*&ZK5z8 î+ÂïâÉÚí~WÕmÛÆ5\aWÙ—â:͹páåP¬3»[EÓœ‚§ÓëýóžæPȈs&û/„£;i^9Ï ß{gáÒÊﲆªD{â¼~Ò`ó¬&ç}»«(sκ˙s3›ó|½õßüö7‹Þ܃ˆe?×Έ<³Ã=Â/ëÂ…—çx è½­c«˜‰ú"37òY²RcŒpªK˜Gëæ^¼UïÝÌJŸåfsNâœS§™S›Ó#¢:¨ïHw€»WÄQ¥Î‹œjíÎãÁY˜y©ÂjfÌ=é°zÏŒûíF³øá‡¯"2Ç$"³=«È1çÕa]¸ðzH¸ûœé~[–>ç\×u[7³ˆ‰E„…#vZ½"M3-}2«*‘ˆ³{V«5<;·²TPG+”,ý Û‹kדPw÷L˜%f¡Òz[vö]Ù‡›O GZ"æÜÂóã}ùªÒ›²‰˜'“"-î)]1®s ^" ÊðˆHU!â@D„êÂ4#F¦”\ZÓ´-ûÇÓ6½·"ÎÝ­:¬ú5ÿ¾ ªª‚C‘Gb|þápRNfUfY×5"ÊÓ=çŠSÛ|fLŸÖ÷öXîŽ w'Îãoæƒà½“g¯ª}é¬<6‹|fÒ4[×-e˜û©Î¸páÂk aæ &$×ħÊî¬Ê™ÉBÂÎq8)—çLfÖ`p¦»[¦Wp 3ˆ2Ò#\„—e‰L§öSd#ÿvñþê~̦%Y8U£'«õ½Ðë;ž‹[kõý:‹{Œ1ŸÏçºVíôˆéæþIËñYn/\¸ð·–j‚üWNPžŠñª‰HDÍdeÝWÁïÕëT¹¨o•$3ݬ”\8|÷"£ ãO1}©ž¥‡Ž¯³ˆÀëìFÊ_ˆê‘î.üIªEpI]県,}=‹PdxþüçŸWÛ´iï7i*¢²,‹¶F´ÑÕa]¸ðR¨B3ÆaJ´m›û$"Qú<€1ß,NÊ›ˆ–ei­mÛF$7íE.Õsfâð.iîÃÍìó‚ç³ÃQ)ˆ&¸õ¦°— IDAT½iKxbfÕžH&åì™ÝƒANO_ÇÓbš'T Xî·Þº€A Õ`OO°ˆL³€“j€Xš!¹]~.¼ ÁLÄ)Ê ßÆÓ3ÚÒHÈÌÍ‚›Q5T>"‘"Š Š2b–ÛíÑ´»%‘ì;Äd›çLúNšžf¶S\æ€1Ÿ^‘ÄÌ*¬B”¥h0 ÷v=1ýˆ}oBéé뺎9“øÛo~üòåÛ²ÜÃsNs§âÒÝÜX„èŽ^¸ð2(a“êNædzd”HÊmúÔûÒº– 3×Í3ÌÊ ¡z«$’Ö–:U$EØ´ÔS!€‘ˆ ’(îˆå±Ì:°®ôÞm<8ðQ@òB¾®áVjÉ݉x×UaS±'›´[¯yZ­1Q¶ UÊûÄœûÜGï½ÔÙ¢"ÂyN£¥®²7gæ‡û‡/^–ªÎ ¦Õt¶Þj³H^E[ÉXíŸZMDa-:MuªµêÖv­±cwomY[¾Ùà|$ÀDL”äT–ˆõãÌ¥”=3UU3*Õ¶Øú}`ܼ’@ª &U-á‘NðùwG /#"M–sÖ[ýî\ßyç­Z8|ÃÍTX™DÝÍà`"raFÖ&!aR‚Ú€0¡Jó\çi:MóT'&!DÑ˜Š¸…r…‰„Àm·@}ƒýü#!€5!0ànc €æù,²Êרù,%Âf¡ŽRÊýÝ}­“™› ÀEH”ˆ}i÷ˆÓùD*A1Æ2Z“@–ÂZ«P%aDØè ƒ[x@ÁÈvËmó“!÷hKï­»9a-\ŽpC ++jŠyôE¤¤h% b¤9áüë8pà ˜˜ÒF¤ˆD¤*ÌäácX¦Ò5'¬-Ab æçf0ÌaáÁŽàTjÅè!¶{´+€ei—K„éË_~¼\ïîÌ£Ns· dLê~¨œ'Í›D"n·[~¤ –ËpbÕR@án¢5ŒDá±ÛâdÝ=pàÀG y¿—")©HȰ.¬ù5OFWIN% ”5$çÇœ“M7³œ ‘Ú)¥`ž£”%¿pÍ?ðÞ«WŸÿüæyz¼\—Öf›“¯¢ŒÜÜûö³çüÙîž'Í·Û-——>D8AQž¦ æy®¥Xë„ÕÌo³Ù sß<å8ð‘3§kOô‘ÞÖü-^3uÈÝk­»KBú7ˆÊ“ê +ÑÃÌ3p À±}tZ¤Lój/ÓÇx¼\XXKqwÕJ$­wŒ‘ë–>~Èã[fêfQb¢UN&ânËÒÎ÷o½õ4º:Ë8 ô”–…;ÑqKxàÀG‘ïýgDÎ~“4Ñ^öd'õdKåkÏBÛÁÍþ%ùñ1ÆpËZ²möVµ&ÐRë4/­·Öë<½ýéwÎwç1¼µF Z*ój±ØÖ–­5fÞ~ªR§ânªüÎ;Ÿþô;o¯OzÝ$ÒZ×pÖ£Ã:pà#ƒpߢ}Ü»^¯|ðA†+ã™3ßójµO…æ¶ë³ž[úmŸ] DE¤Ô’V1ëN¥û|:¿|ë­:Mé:M“HafaNÓ¿ÝÓ=e¢û³É§òÌNÐcõrvêý&"çÓ¼ú¢‚Öðg_û@yVþ8ð‘ÀÎe§“U’Ei)“ŸM)ƒ™Ýn·ÖZö\é¸yÌ™3¸×ýN9 ,QÝ¢æWE’[I÷ùt®Óé½÷_]—„W¼žçé4²iŒ¾,œöðëw÷ØÎµu—PåjK*ÝÇ£õÞû_¿ø¥/½÷þ{½ß”§Ñ{E¬¢ `æ´B=pàÀG´%qí\6ÝÝÝ13‚ö& @Ž_çó9=üvºJ'¥-‡kÚö¹RUGïî1†ËBÁ¼•®ëš™­ª‡ei¯^½z||¬U k¥¢Ó4•¢@´Ö²# ¢5S ÏlZkc˜R˜{8HÉ#®×ëÒÇ÷fVK-«¦+4Uu;NsøˆaèHDÚ°\»EP:^-˲ßH§3B~U ¡–Û’ú†ýûÔZ‰(Ü“R¢i®µtw&ákÒs£¬O'šü¾»¦þ|>ŸN³Íú²·S‰Ýj&í#ÆèJr Áªªçóý‹/D$·¡½÷ôt/¥~?8ðÑCz#ä?;<ÉG-«´MÙ=þYï=»Ÿì³²{||\–Ň]/˲dÿÛ!!6²í°²”Œ1j-Äaî­-î‘·8؃¦{ï»AW>³}]ˆPE€˜ôa´4w‹ƒI"`c0K Zï™qöÿîømÀÌÜuWZÏç1Æë¸äZ0PŠæÅrVŒ¬M)‰XÇ5¢]þÎ̵Ô"Z&­¥¸{ïÞFB'<ùc¼ÿþûcŒ”|æ!"VnJÈÝÜ3@¾&ίJ…µiÊQÖD̤LŽR©*ÅÄkP­S©%‡BÛ´øH`ª5KÒ4Õd„²±JBýþþ>½v—,aé<“E£–ú|>ÛÏw €‰c˜™ÕRx ± ªò–py|¼ìÚÓZ+Èû²‘í­ôµa‘[Úvm~7Ø4¬}ôÑe¤És³œï_œÎw\È|!P)E¸žÎ§ŽqëÝ~àÀG{¡ÜGÏŠsww'"·[+¥¤¬4É¥ô&ÍÆJU‹–ZkŽ„¾¦{ÅzNè‘üT_Ûmé­Î"ôüøYUO§ùÕ+^¿{Ñái_Š€<`ªi¯ O*ûí03Ϥ¹ Q÷h­D+[ÜDt ‡ô¶,cÄ1 8ðQDÅ;91‰p¾‘³QÝ“ Êúõü«Zké´á±ËvÎËÌàÁ e)¥B‹ Ë­9ÁÝ ‹ª®ÖžÎJÉÑ /·Á„¢ZŠ"(ØN„°ÙÎóœVÍÌ\JÕRE•˜ƒàá¯_¿.eÜ¿u—.¤®N½Þ½§4öÀ!¤pÜ`û‰^–wwaæ»0½ÖH£Q›¡èª>ϯÍémmŸŽAUHë¥7€„$ºñú  j©ZÆÒ* Ñ®ã$8 ±»°J@<†»€LìÉç”JVwW- Ks3r.,JZhžêétš¦éþîît:ϧÌΈp:bŸø¨ÁÖ, Ú”î‘)^f±,ÃF×p¾Ý–Öú0Á2†eÄߨvt»ÓCDÔZ‰¹ƒsNÀAf#¥’–Z«d‘ ©pwÒ kR%ÿ|C™ÃçþSmXD0 ‹h-"*"fÖ{ËífDÔ:E ÷ž:á~Xb8ðB¦‘_ɬ$§–e¹^¯½wfÎKEÍlY–|Ø~ƒî[¢§2ë™Ýi)¥ÖaFÌS¦:å.2s0Ïóg>ó™OúÓó<—Rr°Ü/}ðd2¿þdyʉt¿ZedÛWæSêKó^.s[–¥µeŒÞ{Oõ¨{©9|„°ý%)äké“­UÂ=˜ÅFôfù_á2Õ“p(©®ýŽzë¶’nŠÛív¹\–ÛmØÓà™a­5ÉJ J…S¦¨¦GhúaóøÜtXp‘Ô:‹"éÝF Ógòa)¥rw&ŠÍ†tš¦iž3´5›¢õˆÀãó_ø<› ^v£Rl«,o‰¬bù˜ç¬ù<Ï¥(R½ê«š€ˆ<<<0³›EËêMAk\ØÁa8ðCúßíVn³Vì£Øóûç]¹™—{éåÀ_ "6÷”ŧ~ô Ã¥ó1i/íµT«·Ös0 ózQŒ{­u‹î7>Y¿ÌÌ]ºÛ[§—äÿénÖ—ËE¸¨n·é©Ö²,ËõÒߨ_ýÀ¿IJ,½Ï»ýÞn ³ ªj€ÇðeéÌšMÒ.!Ù£·¶P-ÛÉŽ¯.0 ÑÇê`žç—/^^¯·ÖûVz’´²]Šg†î»nk¤ Í*‹6,stxM‡^i/w?ŸO´Wº€Š–ÇÇËýÓ8pàÿµÈ‹ûé¾ï[^Ü×»Syö™ô7Ç£µv½^Í| „Ï æ{%³¬xÍ °Í1&çÇ\Õ¹;@"ÚûÈC>.—Ë~o¨ê4¿óÎ;Ÿÿ®†‡óÙY¥(£‚tØè6î•´p §0¬y‰ª»Ž»ŸN'²`Ò@ô6l¶_Úå|ºïËETZëwó‹q1BY¨à÷ó ïï~Ý_…ü¿C•ÿÌý‘D€H~ã‹ïÿß`"ÖD’+LŒE-:3¨ß¼wg RÅ`Ý»@ îÔ¡*c0x„;ñë[7PB÷Y UþÎ\jÉX°•Ãúàõë/,µ.˲ô‘%)à>F7ëY3þ99ü}øÌ_/½å…Uµl6ZkÚ¡„¹Lí¶¤ A%s®ÇTæ©”ßògúãÿâïûú¾.ø­ø×~è;~òÇÿ¶µ`.û>óöéŸýÜ|`㕦2×2©*qÆhµUÁ:ë­¥#óp‹zP>M“ª’HÚOåÝb>+ðêÕ+ÏóÜz#¢}éHD§Óœîîžþ ¼vn«)M ºvJž™E¨T)UJ)*2ÏSQe‘¸Y)tí½Y <ëɧò£äÛÿØ÷VU‰ðGÿð·¿ÿºÿ©ÿ迯ÔðOÏ7·[Ôiªe" ³S!’"þÙÏø/}!“K™ˆ@¹š[™©¤Øk•0'"óž³á#÷’ö23bV_=Ü]U²¤<<<ˆÈ«Ç@¬ˆŠ=5'©¯eY.—Kï½”ÕuŒž?{?Ü5cØŽ w嘈LµÖIYæ¹¾õÖË·ß~ûááÓ4ΧRаÔZë4©ŠÙÈ‚õŸüéüá?üYl²{3»;éŸýw~øM½Z|’ñü[ß?•¢Z{³Û­îªE7ñÀ¤ÄëÁ Üí¹”òÙÊoÕäY^ÖŠëõšý;² D`ýgÚ[íª®µ¢éÓªq çiJ;½iš…ùv½"¾]o·Ûm×Y¤šAT÷% ?S·ç¬'Ìʦ:M„Ön¯_ÐZ;ŸOo½|kW…™ÇÇ‹™«ê¿òÏ{á®"sÑÉÌ܃Iª–Ÿüñù:¿T|Âñ#?ð{ÏsÅÖÚ¸{}ŒNDßù»Î¾që©OJiš¦]Y™ º”/äö>vÉoÖ}´åZ¤¨ "Þ{ï½TŸNµ2svd)eªZT‹ªˆ€¨õµ©k½õÑÍìþþþ¹“úCU„5›Æ—§7øâ8ð‰Â¿ù¯ÿ¾»S!¢œÔx aÖˆB]‹ ËûŸ÷Óg‰HEò­š÷ÅØNÿ Y4àîÓTK)½äž {”ònü° §D§i‚*÷‘´ø>Ì= ‡ùcÒg½÷ÞÚr»]û誫¢=7ƒD4̲~­Ju¹®B-‘Ö–ÞÛívm­s­¥Ni®JYeUå|ÛËó\ž¾°Öü…{îž­£0ÿÄ¿}4Y|=ðö‹IÖ_–¥µ–à ³°¬\ö¦®"·n[ºèž.á[Êò®ßÌš@D½?…B_.—>¶ù¾ìÍùL2-bµu‰X§ËüIÃG9"­µeY R¦ÚšY áP"b¸E¸ù0Ï€i&Jõ—¸¯¢P"ÒRÆcØããåññqžëù|~ñðBµ´eqaQ­ÿägïÒ9~'ïU¤Ö²eÀŠ–Â,óTT‡Ò~gñÏüþoº?­*KYG˜ITöxÔý8Ï̾øk¿áF U£_®¯ÍQˆòðnŒ‘GĪ ÙšQÉ çÀF.aµ}‘`ÈÍ»›=Ù©¯:±p#|„w³2•ù|&Ñ1œŒá‹1FÝ|!çÍ-þKݳ~½^/—ëívkK7óÞÆår%B„î"Ízkºä"¥eÏÒØ“³îøOì_}S¯âŸ|ßw}fŒ¤e"ïX¶øPÝ×kØf23 ƒˆˆ2®Ô5-™E™…Vu»è&¢DœóÓÊ£÷MÏ%{`)©ŠHy¶)­õCÏ\§øi¹¿¿ßø©'s¾œŸ§ŒeøÜ¼AUÑû²,Ër[Ü£Öéî·åz½½ÿúƒ1†¨@Â/õ½}‰`æcOÏœ9µò9¸ûýyz“/æw|úå݈x||\ÚŽpø°1l¸g’Vx˜ù<(̲ºqîøîïïóíî³ `šêù|&3Ex[Zo )EØÊ`:†fäî­5h½-méýéÜ8ç,Ú•V8ŸN–eq·ÝÙÝ“·ÚŸMŠ_[kû0fªµÎóTj)µ k)Åæfac VM„ªºõÞvãAIU„–dʶûÄ-›ÇÝ¿û³ßðuø¤à³ßü– éæ·eîÃm˜õ1Ì=ˆˆBË®ŠZ§Eë×”R³ð욆]'À fbF)ZŠº[¦Ïgœ ÌÍWóRN›â5oB5[¢4FÎÆhë°žbÎ åÖûØæ¡5ö›lÏíe²»ë£E˜(•ZTUX˜ù|:‹èu¹µÞ¯ËÍÝr%ð…ŸÿŸœp¹^¯·‹¹!…]€‡æ–òYÏå#?úCßóF^È> ø¾ï[·«Ã{7w 0 Ú÷oü¤ç¤Ë_)EçyŽˆÞûívKÍgÎFé˜ìî×ë%—sÌ\kÙûž¥-mié¤Ó6¯½üHÑBÄ›æË³`­ºÐd²i<ëkÒLf¿ºÎ+ê$Þò#9Ĩ¥ˆû`Z‡ØÖ†Og-%ˆZksfÄ:—Û­aáÝG³ÑÓ[Á Q&¸‡ƒÂ}¨ÊA½8ð;fʽ#$œÜˆ¹4‚3ïx/©œÚnxó“ÁS='EDaÖ`Æ]„D5­\ÖGIϯBOD¨®ÓÛ„½1Ze "ršçuô3k²Te1òÍ€Ô·Š†g ËôVfabbP¸»j½^nï½û>§´]J™ç©L5E[YDéµaæŒ €òŒÈÊiq•M¼õb~C¯æsÌUrX˽?sÞÿF”’÷gÞíÝÝAD×Ëû|ð~VŸt%ZowzïÃF„ïv i"ŠÍJ‰U•Y†Ùí¶ôÞc;¡6X;inf)Å|:%sF™šã[Øa–¤ç¿ØžráñdÔ—ŸJ±{ï]YÂ#€ÞÇãõzz¨$|.§2OÌÜÇbæîD`€#È©³"ÄðÅXÛZÎeÛ§I¿®¯áŸ œ&©µÌNÐyž˜ —¢ù73ÐÚ7`f·1†¥â2»æK~»]k­¥j­ÅÌ–eØ©5uw´(˜È)K3³–ìЀØ;»•kÏéQDXdßòæj <'¹è¹L4ùüœZÍÌz·Ñmiýr½­óæ™NäDAÝ£ždëüµT²‡‡Pwôæ½dëÍA§ù|÷àË­]¯*EDhõJÚ²p@Êt½>f»\nÌ•H†=µ,¡ù\mËá!€VóÓÕ›&WŒyRC«×rä`©ZÓ‹fÝ'yif€ŠÊû¯Þ¿¼¾z[Z™Î}tŽ2zS•ì‰b#BÀͺ Gê3ÜÍ™,à™VMÖ|•¡o}À.™]Ûº®ˆÔZ§isæ3Ûoj­EÕÝÍÆ‹/ÃMEïïî–åv}¼03(e_ÈrDxd-§àŒfÙ{ºü!–v¶ˆÜ9 cY¬-R¨5¾ÞFë’>l¬‘Á@€n—žÇ0gÙàg>z´Ùc%ïkz…íÊóRJ2õ¯[ëY‘vìªu@Ä©%óNk®äRÀŸt=Óµ¯H×P‘ZA©Ó'7Àù|‹óù¬RTÄBü¹Ÿÿë´.#H„TI•E˜ee×Èánä  ¸9žÕ,zÞn8pàÃA<û'Ñû’#Ôn[T—çÛ3cW_)âyÌ—†ÙTyÿªyž7íTæøÑüìö¿Q¸÷ògeyÊy·¨›§/Ù®—ysËÒâJhk¦vç?f^–e—sf3÷ëõÊÌcŒÓé4ÏóÃ#ˆhšgÚÌÖ-ak=5¢b¿¹I¢ Ïøõ<ÑÎ ³/líßižk©½÷Ö[ž.(^º]]opâù°%E±hm¬ŸÛ›Ëg8‚Wøpñ»¿ñüüŸÄn«xJ<ìññ1åQòtÀOZ+"â§qosCÈiÉö7oš#çXgf—ËÅÝ÷0ú4ç3w"ª¥œN§,‹§óiž§çùÒ  µvz¸Ïv®NµÖªÊ¼vzPW£ÒUÇ+kT)õv»]¯WAˆI“øÇדLó|*¥´e›ÁHê×þi(üNÏT*JÂH9Øó/‰ç­ëþ?ÃÝ{8kÒ»±È™¤µÎ¤Ì<•©›±Ùl˜ˆì’ò}—— oó#»*{+^ýE{©êTEDzoîŽ-¿>õnž†Ù6­.܉¨Ýo_R÷Ô4OyWº©©NLl棛ˆún:Ú›Ç7ss§ˆ˜¦I¹ä¶ár[Þ ðì IDATü@毑ª3¯ç@Ì âÛrÕaª%U`i£ŒM¼ŸÿÃ|pX|˜xò>pÏŒc"¡Ñ½Öʤù6ïÖó-)"cŒ7ËÀ›x÷7ý~÷·í9‘»¹¯Nvô5Y¶tÝÈ™já¬GTku³÷Þ{o ¿yJ… Yƒo2ËÒÜ;H‡™™qQA´”ÊBÁŒáJW¯Ñ=b=-¼V…  ¨ÊfÜe’¹L÷wÓËçn¯…Å-ÌM9owÔÊÈìn6‚ÉU «´ÑÍ|Œt°ñ\£æíÒ}qøbݲ"`Fâa…‡­ {‘jJ—ö+—Ø|ÕÛÞ¾¤‹¹dJiûšF(D\kuwf™¦©÷A !P¨wcx¸ˆ¦-žE,à ¤ù]µ¬'ÑÉßgã C43ÀS8ÚºeLÂ?S.V÷d©3·Þ“æAã4Õ‡‡‡ói*¯—iæÕò9"Ü)…"dË$E+F_]IJŸ4³ð§ú­ßüÖßÿõ÷ÞÜ‹{àÀÇçyü#"fQÍ;œ€I"†…wÖ"œùÏ+UN1ç­Ë¶úì6F¶[ã)‹¶»šÝ0GIE14Æ8Ýß1s„1Ìm 2°?gÝ[åaáá›u| £ß…ïÀj… `?3c\/Ww›ja¢Ñû4MEËétº»»+E…YE7ÍDºƒp# f0C„ ¼Þ2ºç¬»›NàÙÑâ>,¬o«`!(£‰k°…‡#«S:[±ˆ˜Õ äN±ù¸?½»7‘y‰Øvhù©<æKÚgˆ¨¥¤¬ˆ’73·¼¸«”*Ÿn¢@vMWòëýY(˜Û–U‘¿ç.ŽHJÌ;Z¿‰¼,µŒ¾¼xñð©—/îç©™ˆˆÄ_þ™ÿÆ=2NCtåìÜœX²áM R¹Ÿ‹™F˜ùvæxÐX|˜Xyq8Ä”l7³©²å¦?L’e ZëÂv¸#"ƒv7„uBl­¥"JUZ–e›ÏÒ†øaO½÷,>ŒV…y¬i†‘Rsaûýà–ò°,-©/ÍÎóœÛÇ€RtŒñxyÝúr>ÏÓ\_¼x¡ÊÕRæÓ ÜQÊN€r(• &0„ò,@U (‘ºÁ"8ú¬>4ðš#Cî«l({ÏÕ>փ筭âðg].— RÅæ•àt:É–:øÇÇÇm¤C¾Á±õL"º³L)Y'¢xv縩†¯“纃 <û'§ÐË̦iš¦)k™ª¦KåJ—ø`F*ÇDˆÖ—ÇÇÇÇË…@ ¤áünhLAnB¢\öjëã8çÖäû°%y|ý_Ô>ž мìnc|MêªM'VÕýmG›T}åáx¦ÏÚÏchKÄ6æÃn·k6tÏÍÚ}c‚Ìì|>ŸÏçyšD$½Þ³Š­[BU…€"œþîn¾‘MÀõzm­Íó9e"²û»g2õ<Ͻw"™e>ç¢᣷ÇÇGë6y8O*:ì€Y˜Ö%eɪ÷÷`Uë¯V£ø¼´#á …™È¬ñ $ÈŠ°y·,Ë`lô92$p‰¤TÓÖTÓ.ÊÉïœWkmš¦ˆxýªOõ ›8`‹“ RÕl»D$§Aâ´¼âU Ö ¥×—ưR„E˜H˜¨­Š‰½̵å΢å“óUÃUà=‚ XÚmtQ-<×i*’0eff'{„ÞQæI˜Íœ0Ü,é>¯ÏÏôµGouàÀ‡È¼¾íªe]q­Â„ÜË1í‡wY öæ+çA¥”6–ÝÐ}7ø£Öš1Ó41rS—ÓÛ¶^V¡<3‹»OÓdsk­õŽQÆÚëhÄ™[suT–©ªÛBãR%|ôižçùÌ̧è ëãÆuU£G¸÷6úâ1Üš+—ª»¼¼ywÿ¡ÓòÜ{ÏuÃÖvnÇÕk"᪥ÈOíúUYëÀó ûíðóä!qʹùÙ<¸Ï}ÈçáÃëf_Eá¡ÄÞ‡€îæS óaÊêfá^T‘œH™ªÑ{SÕÞL¥ªèí6ÅFÁ¬Ñ€¹¡Û&´ïÙꊺø¬úT-ÊîcY¼”ÒÇ’¿CªóG½/ßyçÓz|¼Ìå4Ëð°ˆÌ¤Î_>"'g(¼ y­½®Nù©ÞÛuø° ÂDš«ºýý%"D‚àeê{6ÌLœFì ¬­Æ: $]Ûò1 ‘]ÚžRfbâX sª ë®/=`^߯W¾ü•¯¾z}÷ðV2îk‡¥eíb á䩿rw'ÐÇH·Óôr¸»»;ŸÏéZÏÌKkª…ˆ’½3·ëåúþû¯Æ×ëÕÝ3“"öÄ0@O|^ªVS‹¶qó¿…Ãúz¿ž|¬! xx P€b‘®Ô•Š‚×{ùf,šŽêkÚC¥•±Ü`N¬U¤x«Q y#ãeçÕÜÝÆâM«K»Ú_¹5ˆŸîêp̧™DlÖ¼åPlRû ÜD6¯fΪ¥ª7sãØ8ðá!œ­±"敟Jr)˜½w o±÷Y9E­Ä ëõJáÁÏÍEWW†‘˺ä¶Ü±z–æ#y%õWgÐZ+ ³‹.½ŸNóétªµ*€YåSo½cyõjÝF”Œîˆ`Qõ& B òïS›mù®D Ð K0óðh×6¢M§OEø7|Ã7†GDxfñúàlªÜŒ˜{ïƒh>͹c"•û¥H­µõåM½®|A"ìcõò÷ @†PhQ'©”ÈÝŠ.²‡è}1³ðxx盲eÙv~ ÷žVV{ìCNH„-k~Q°ÊSýh¯øp±«#”ãÍæSL³¸Ç+ßd¾£–<µ!¬ök×Jg=WfÆÍÖµ=%9oç}O¢Ó »ÏV @Žt´.(BÌSa&7óîÌáA ÷Û²¸”©ÎO=!Öô±uyÇÄYzÍìõë×ï¾û®|Š?õò퀑JIÖ“ch "ãVD´¨ˆgÞÀ²<©j²tùwüŸ?¬øpp¹eçÁë´Iö Db‚SVÝE/rd!b-=Øú)¢@`?ÊCž’äWçUÚ¨¤1®!ÄÓ4IDqѤö7¥{3“ZIL, 8ÁAá1ˆÁL¡ ðQ@ˆ˜IU&f±á½÷Ìš÷ åµpVÕÓTâ "û[-ߺ§8¼þbÙ'¶Þ¶ßÇED˜³Š–ÃëÀß ÄêàÞö]ÂÌážî1Âul!¡½=^DaFZÀÊTÀ<èéMu* xì_áá eS®Ó-+H±ÊªE5Ì)C(‹W×ëÒH% à pA™8À °8ˆk91+@£›;ÌàF£HÌãòøx}ý:¬ŸÏs-Å>R¸|“.™{kMUUešww³œ-¿æíÏT+¯<$"Â*$U2f•j­Âüþ{ïýÚ¯þê¿øElAªÉ“íŠá‘¢©1Ʋ,£÷1Fk-3|n·Û0‘ì§FÂpw°ˆ*1ot|ä&q»Õöˆø_þ÷_y/é_ü™?ÿ¬£Ÿj*Ñ…7*«rU.Û”#ªâá½÷Ÿæ»yž}»á{6H­µfO8Íï™TÌœq8ÑZ ¬ÑÆrÚ[-޳íÚsÁ†;œ‘':ˆˆÖz ³1ÆmaæÓétÿp´jµr*Œ ü‘¡EEœ…ó<¹ÖªiÇžT„Š À!8}t &DŽá“ «:ÄÍæ1ær)­¶¤éý¡=pàíN 8ƒ$y²bÆbr7¢BZY-f–z«oùÇ¿ã6Æ£÷eŒ‘Ç(ëÎq»NÉ‚µÉØèffFL”f2¼´Ø°lP4UšLgÁAŽ„½¤ñZªòœO ÁÌL½u7{ûSŸjÖlã­Ü=ÅîY;ÝÓÈkÕ­–ZUT„E+³³”išªÞ¹; Â"BL¹€Pɰz!¨‚ˆHáܘ©Í_8ȃw?pàCÇfÃð´€wóé…]“4FâО¿G›S{^33(RK•–2{N}ìRx<Ù¬ D°?å­bR¤Öº´Î¤ºzxò9åöÞûðÞs²+" ¦iÜF#‹bï#—Ùsõn£w2fv3R–nC„ònˆ¶_†Eˆ‚‰̹M@BFXö§Ì²7¯rÓ/½ûø^Ï>¾0±e€º{z)P¸[0sŒ&÷dÇ)/[Œ1Æ0÷8?¼uùÊ—°õSûL¢›n+B69) [Í­TÕ7yªHΘàz½F„“š[rß"B4ö‘0"ë·†[Ò]ÆÌæŽpV‚P-UTK™úð¼•QU÷= èÉfÏ)ˆ©÷VŠáv»‚ªù属ë*2ÍÆÑÊœvÃ8Qð”i?xî-vàÀ«MÙX9h"ê£ÌÒ§€5žv¹û>¬¥ÿºjU9Çeõ8o7‡4JhiKåî,»|2b’šxK5˜#Ü}tZ=ŠÁ&‘’ó«ŠK€I••™¥AO#&æËrÛεóɇyÖb¸õ`Ѽ¾]-¼÷åv}DxÒlEKký;þÀì¿0Q„ sënîÝ·Ÿ¼éq´¡ø¯úo½ÉWõÀ)~ê/ýb"" ŠòÖ{o÷îÌœïåü*"úǾã»ÇèùV€Ì"“Lw_âœáRÙ ª"…IŠp³Öûpšêy*õ<Ÿ<È-Ì®0 ‰€óZ™PM›sÞð°1òÇìí\68Y>ž/Ç0àdÌÚÒl¢1hÖ ÀåòÈšF¨¤¥•i>m’AÉI¹ëTˆ$ÂZ»G˜KRì6,[73»ÜúÿÃýÀ¿=\—5ÛÅÁáNJ´ÞY¥‰Nј™Yo­af›ËÌZkÈ Þäß·ÛÍÌTõr¹$•^T™gP0ó°‘™=Ì\TƒÀÆèÃJÛÅqDòY®Àfôpó< Ê ˆòV(ýdö‰l»ºÎÎ}'˜"M¹†{)%3ë¹µ^©\¯×Öi¾û­ëiež"¦ØÂ#0œØÁä`՚Džc< üß<¬øÁmØä@¸1!ZØl'áÂ$³\Ð9ný¤…D—ei­-Ër½^{³=pk7w‘išÒò¼÷Îë8¹JFY2†Æ@Hò‡yÕ7”R¤õdšxÛ @T§iÒ¢9½¦h€ª¨ Þùww¿^o­õˆÈ`DfŽ *¥¦j4)ùeYÜ™ÌlY–üžË²d†âV•WC¬á6̈QU‹–,”£ßn·Þ“ß‹±»¿8pàCEj!m[Á¥.aUY®Ãâf¡îžm‘¨.KK+Qf.¥$™•Ã` ž2û™ïîîò#"š©ô«Ñ qf;gw Öz>Ÿ§iÚE¤ùLTueÊÍ’*òÖûõz ÷yžU @î¾´ …ªÈ«¢ÝÛ2Z›Ô¢«êùî®Ô’“c)¥ÔJL¯àtš§iú†oýî¼ArƒÁL ‡³™'™à­»1nŽ–ÿáç>÷F^È> ø™¿öËÙmDPÊ›r}ç}ŒÞÖ¼Â,"ˆø{~ÿÊy+ÿ»”aÕ¯«2ó«W¯^½zµ:Áâ—Œ˜¤)SªºDV!znö’˜ò-Aš\ lZ9+FlârÛS{ï_ýêW¯×+‘IzÈ\.7"%‚ˆWgU¹³”ˆ½«H¬aVJUÑó‹w²J®«Ô )ƒS Aò§?Wö‡ïWóM½–|ìñKÿðݵZOb6rjXoãÙžmŠ ‚jÝCÿðÌߊքAÊZ–§/D”éËYO’P´LS–X£TWeüî1µ_^#…£¾­˜¹!"·Ñ­µ5iËÝÝ?øàƒ[ëçû»G{3‘2MÓžD1Þ—eLK•R ܶÔiv·e¹™@Ì$¢i»±J163YPº‚m† ÌÌ×ö_Î>öøÊû·oz§Iž¦ttê¤L"ÃGÆÍ§ÉÌÃ[ßiU ²Ë¯ö‹½lAܽµ&"/_¾¸^¯Ë² ë}ô1zÖ¸ˆHÁD)E‹l‡:¼Š:Ó²™±ÚL`.½•Qѽ7¢°ƒˆU&•)H‰µLgQ˜œ*àI¼xÃe.çYÏ<Šðé¶`ñ"厠¸Þ®Ãzk ¾áÛ~Hý(‡AáÔÛèm˜…ÙzÉšZwû+õßÈKxàÀ' ÿð‹&J«D€X˜½ˆp¾×i‘Ó<‹FËÒ®fݽ,0@æÑ›&=Ÿ'³6ÆÒÚUeân·n…¶á (Ù( x [bÜ(˜UÏ÷¥Š{ŒœNçT æô|š‰HU@žžF8 _¹·RJmôÖ»ù°p)ªðÝÜ=½¶4óØ‚mYn­µõ0”H„•äK!…nEw»ÏÎxž#¤þÀßyüáÖ¤ˆmö&aF„ðæýbîåíû‡‡Óé”YÈ@…!¢™ÙÝXH‹ƒ…¦¹žÎó4UUU"˜§pÖÍ-‹Ò_ ëÅaZ±î)ýkF©ևûû»óº}Ü…Wù€ ÀØÊÊJ„¥{LróçÓ‰….·Ëíö ™1†Ñz–išÒikØcüÒ—@›CäU3Ëjç€ü"Ü<þÝ?û?¾±ðÀOþî¯|yxƒ8ÒJ .<îO23$œ-/ɦ«jNm´ÆOÈîºÚW1?ïËöpËžÀ~c¸ÕœÍwy»öÛwÖù4ŸbÞÍxšþÉäO® Ì|>ŸçÓ)^Òþ˲¤ç|N¶},*T+‹2£µ~ícÙô`œ}Vl玗%ë(Å›e"éö+ýÝÏ}ùM¼j|Bñç~ú/·î&2ÞÏÃm˜Ùû‹¼×_öÞ“Úîëö07‰;õž ýãr¹<>>.Ë‚g2«,g©@Ø^Øìö2AgQ­¸»»«SMÁõri­¥1M¦î%™_<¼È‚—öZ)£˜ç9+‹Ù°S-¥p /íª…An6lŒ@0­R‰¬YîþÿÆ—ÆhAƒZ™ÅåTâaæB`wëöSḮ×k–'É"­PêÚ·pøõdxžçŒGÍ«ltj­©Íš•׈©S‘±~äkF½,4fØycY¹¿¿Ï8CßbϧÓ[o½|xx(¥`Ó\¤¶âåË—÷÷÷ÓTJÑ”‚FØ4éÛo¿õðp—ÝYD<7>^–%ŸÍ¯þæÅ"ˆ“Ί  ·1ÌþÔüWÞÄëuàÀ'?þ“ý‹ï>Žá–¶é\~þ—¿ú§â¦-“+5¢ÌTJ©µ¦%Cþ?°&×ç0¸›ÙÑæH|¹\²Þ=/I«_Ä0[–¥Ôz¾»›¦ºÓÙHÖmÝ5_Œç|ìcä·HùeYæ²Òá´eiä³Ö:MSw»^¹VeUº»¿+¥LSyøZªT4¢1‹Ù­ÖSVÃÿê/ý½?þCßú¿ûÝ=—©Iaù°ÏýÚ«7ú’8ð‰Æ¿÷Ÿý¯¾ÿ{¿ùgÿæ¯çGÎçÙÝÃY§iJãöÖVΧ÷<ŠO^}ù©Ûí¶;=˜]ƒ Ðz3(¢ªîdîk!&rÞ‡o˜0÷1ƽ©ª¹MG«ñ͸^o×¾Ä0d â3F-Ÿ+ßéTëT¡Âî>FÉ<ÏBôúqù¹¿ös=ŠÔ»‡‡‡¥ozUÄùßý¢¾÷;ß)ª .Dñoüûù¸SÖ0×R#œ€k­DPZíùüõ¯»½þôßÿïÿþcóúýù(­þ]IÚºmÝþÇÿóÿþ¯þ¸pá ˆôòòZ'áZj-]*7k°­#-3ƒT˜„xW?ìʧÛÍÌzßÒøSUÝ-™/„ ‘ØÆ&pˆjYíÎðÃðH.~Œ¡Û’ Å\UŽ1f„Z+-Û¡ ó,[Ç̬¶)ϧSEñüñ¼Q£‚0ßæŸ~úùÿø?ÿøõÙÿç¿üåo¿~}ûéçÓ·ðÂ… Ÿˆ8͵&3[{7u ß·pAˆ‚H¾÷Y˲ÔZçyNñ¦ÈÎg•RæyžÚdæR„¤´ÖJ)]vI*ÄîÔàªJ@çð‘R,?OaÆÉ«ëz¿ß[kù̈˜ç9[½÷çó9† s4 D,µV‘mYFïo/_J©"RëD´V\Cß… Ÿ 1Ö• ¦Ö\mÛ¶L[ä GD7W@ˆœ³Þì ʆ֚H!¢73&’=QJ)鯑Ån÷굨jxœÍ–™¥°"9uHaëív‘Þû™”“H=I‘:M·—Úæ,R˜ÌÜ|ëÕÚ¶¾ ç§'Â+fðÂ…Ï‚€pS`ŒVE‡“ÔZ[ ÑÓk!Â͆jß•ÑxаÜ=5Y§ëºªÕT3¨Úº®ctÊÌ1HMBúC8eÌæ‹2 ¢™!Öø‘‡Ú¹­ÌÆ/ |8üü˜ùùüÖçÆ÷y63(Ì/·›xþX—e½wwlm*ÓÔêœwá¿ã_À… þã@aƒˆ4B ÜölÀÝå=ÜÝ"DDM—eÙs0ÌÝdöYuÛø§Ÿïˆ÷©gb裻³”Ú‘YJ©ªö;~õ.\ø­@ÄZ¸2ºˆˆ”>Œ…˜$sç Ý=ˆ¤Öš[´ñ;/oÜ#Éq3=—eÝÖŒŽžî÷Ûë«,ëêÀäáPkk­…©…¸l®.\øLPÓu AB3™[™¥fp[˜#0Dš&PkµÖ¦îªæêa‘4—[¸ƒZ 'çå„ÉÖ`º¶z+2A ÁqDDÈÌtäê@Rhû]"s„çwrð©Íý¥¹?ŸÏçãéáL<Ïs-åñ|üòë/:†ˆ„ÇÖ7Dbw¤‹t¿páÓ€kmîž›ºÜÈ彊ÙnÄ‚éìÎLÄç‘àÏ?ÿëºÀ¶us?¤Tg “¯ðx<öcCÂ,5§£Ön•—$:"¾¾¾¾¼¾ŠH¶j©F]×õTc¹û)¬8M¼rL€"âá8ßffþñx|ÿþ]Ç>fš[Þåz±¾4.\ø@ÄÛ<·Öˆð¤³E„e9a9»~1ïÓÚaÛV3SÝMi²fõÞÍtY×=YgžÓú8íS“°Ç|¥5–RÞÞÞî·[>"C"2Õݳ:½ R±uª±Ò즶–Ž\©ØÚÖ o÷[ªº˜¸”š¬[ZÙ'‰váÂ…Ï‚äpˆ(uÙs à©«:bu<¹ïüM<¥”ÖÒ~]Â}ŒÁÌ­¶TŠfp«ª~ô uÛY©Ýwt—5䋪ٷïßùuê½yyËTgHÅWveøÁp}žç,IÕOÓÔίë:úeH‘··7†`U%&wÀZk;ü½.\¸ð‰àî\ÙlŸ´XŽ9éŒ;õbÉi®÷އo_Z*çéør(=K)Yà–e)"¡cÀn²,§†A`ë}]W 0Õçã±,¯û™bÿD˜ïD‡ïr¾MŠåOÿÀ1†0ˆ@˜Ù×oßܽ–jƒÃÌÔ1_Ð#zßzïí~áÂç@DŒÑ£2žAË¢NÌLÍÈ£µ™RÕ?¾1s†Bóž]hži©x´Tžõ$cg®";ª$Õ¼… ÖZËÁƒç“󄸥ۚ:¬1FÒ[ù³ªŽ[ø$²,Ïp{{ý©÷ATÂÍúèáà½÷BˆHéÙü{}û.\øMˆH!Á¡ÍŒX·­ˆ$;”¬ä²RãÙUExï£V "‚ð°üŧÝh”“.GÄZŠª¹E`ɸҴcÈÇ 0lÛ†cŒmÛ¸îí"I)x2K!^¸×T‚å²`Œay<ýzk¨j€Ø¦©–FT—-l¨CˆTÆ"Óèݯè > ö©–6µyyn>ÆãÇ·u]Á4ÔÔ"ˆ©”j¦NeJ-33„ûxŸ(KÉ­¹û<Ïf¦Cçùþì»êiç  V G‹—€À]8ïî®n‡ð݇2 ¥IÃî¤ì^kÍE@_ûF³<þ£ùm¦çÚ¿üüs)e[µB¸æ6ž 0“ùU°.\øˆ7€mÓ,&„ަÚ­/C»ƒ98WÎ\{|®½Vj·»p݆Qxîþ`w¯Ò1Fš‡šDF Þ•° 툦‚î5ÝÔ,»$Îtœ# â8tÈmån‘u* YÖ;wï}¤©àÖ×çóñx<ÖuÃ#«‚¦i2Óg¢Rë5 ^¸ð¹½f‰3o­"œq^'%<®íçâÌÍ]N!Aª´ÆPw¿ß_ǽëƒ`w }7‘‚%È(œÒNXG "!Ä=;â}$ìÖÝÜTÍí¬gÉ„;»Ø”(=O3,ÁÌ:M÷··û­ÒÜ(sžÍÜ}´:‡ûºî9õê.,váÂ…Ï‚©"Z–e*»Þ*ïùN'†Ä©0GÄÞµÖº? ˆ™#\ß/¥™ðˆgf`}Ú“¹šíÎI£ÃÙa¥!i˜”°g‡õÞÇP"„£He FúH§ÑxV´R¸V™omŒè"lj:t¾Íëº"µ J‘·iÉÙ.]Ã… ŸmjÓÔ˜Ù]EdYžªGbàQz凜eYR¸ðúú%="ÂM·ms2É•bJÖUUÍ·­ÃæÌelúòòEê™ûPWË©sŽ~ýöMDÖ±ì®Ìg J«†Sßµ‹°ðˆ,<{?iSåD`>8‰×u‹ˆy¾¡ÊG÷¡š6¨×õó… ŸffæAœó áIF'o‡¯z–‹Ãº Îi Žs@@„óÏÝÍ¿|ù2ÕyÛT€™Kkø~KxZʤ§òyW˜¦XI–å3Ï÷ûxZ˜—™[+næaî6Mí~¿ßï/I¤™YÊÜÝÌMµˆ\b÷ >Ü÷Í¤Ë €{ Âé?í·5±ëÔ)inH÷+"ò\ô¹#åãÓ´†ˆh]WHöi÷¹"b®µìò˜¦öX~0 €ïz0ƒRÂÝL‡jRý0Ƙ¦Šˆi¯ª"L”4ô¾ê˜Ká–˜šš§ì4ŠH)eé[Þg1F¿ãWáÂ…ß„,C½wG6`ìÙ€=Ž!±ˆ”á»»p%"BcĶ¥µÀáõŽ Ïç³pE "0WÕišR¨@К”"n@Û¦à}} +F‰‹#x˜ksÁÒ×myþ€Pâèæ«» ³›‡n JåRH8Y°Z¤®‚Hn>6½ŽŸ/\øDp÷Rjª ¶mËÃÀ3³ô2`®á¨˜Ë4ÝK™Æ0J¯@ôœk­¥”uYÍl Þ­G_^^²Ê­o!žö {×¶mᦚ<ïâ¢Rª¦Wà!Ĉ‡[@ìUÒ=rˆððTXЖ‚ ÌÅ€šmϥɵ%¼pá3Y˜ß)ìÝaN×* L t‡\Üí¦1Ó”:óˆÀdÁÏõbþ'3?br’D2 f÷€Ã5o÷tw"ÂL,2Mmš&D½dtäK‘È^­D(—ˆ„ÈøN§¦AÍóù}D¸·ÖJ!Äa[ÖUíš/\øL÷¦ãQq2câ$°p ÷w‡àny•œ1ªº,‹™å¦Yªœ•”²Ü#Ø#'D°oÛ·oß`ïˆàô|ȧÍóœÚ+Õîîf#ö%_Jí)?" ‹ª>žÏç²ä´Â=±Hà—ÒýÂ…O5%¢©µì`ö3¾#'5Û¥S­ ·•ÎàH‡Oç¿€@Dl­æ]s)òòòÂ[ïnià™šCˆÌCÇsY¾þú5"î÷{){4aªãÏ ŠÖûº®kkmžî£äK)‡±Ÿ„{„/Ëb6¤Ð²<×mUíµŠ»—Z¦iþݾû .üFÔÚ"œEÂ##h¯]'•?$§”ûÁ¬k¹:Üý”‰„9ÿ«…€13еo}Y–1Fzø; FÀ»½Lª®HJ«í§/¯?ÿü¿þúk毪*¾ïù9öH3~yy#^¾,˲­ƒ&ww3 Nm(†°LÌ4‚˜Ñl¨õK4záÂ'‚™Â§šyïûq1¦ìYOzïg`×9fÿ¥¦QˆrŒ«µŠH+"¨)!jÕÓµæüùê½÷u[ݽՊg]ÄøRA”ƒ{óe–Ô©éûYb„{ Qz9«j„ÁÛº®)¦xO»¸páÂ?>ö±1…£ˆh–'1;òa§+VþœÓœ O%DÞÉœdn4d”»#î Ó÷œ8Žlv•=1ßï³Çóù$¢$ÌÒU&‹h­Å"bY–­«™3Ëþ鵯Ûë‡Î·9<ÂÃÝûè¸,Ï%"<,tÔ"뺜ÿ‡.\øÇG)¥”êúdz•R’Ï¥aF/ÉÄç(wÚ9 âTªÛ®;MÛtD("nvx:0ÀžÆL|~` „pgl­…ás[ÓóátSÎcæÖ"¼¾~qwµ|ÀN¥Ï³×Ê}¬³H¸›9=ŸObÔˆÒ×QJÝÆPu躭zÝå\¸ð™Â°›#›y‰#£ü"’xz·PÕ\ß©ª¤ÙÝU‡3ÕJ€€î*Ó´­¦±©*×ZdªHY°2ý‚‰…ÙÝM!)+bš“žr‰¬‘û,º'ßì[€ÑÇ6ÐQî/˲’™nÛxûòöåŸÞÖu[7p3uÂå¹P\ë…σ¡ãù\ЗŸ^o­µišÚV[OÞ ßI%eÙJ5ÒöŠ~HäE¸M%ÐXˆ…¦¹–Rž‡”šQë¶e¦ î©ö…YwT½Iå=NXÏç3}û²<™Ùº®ëºÚaŒ5úBX9zS›ÝmÛTÕ¦iŠÛGNt÷ç²öÞ/eÃ… Ÿ ‘’Ë}±fª©q߃ÏC³¹9 ,8 †"ª¥qï}ÛzD))ÿØ‹]@GïIƒïɈHÄCÁΊy¤ã²Ÿ– ‰ìèð%$¢1FòbÌìF€ ìŽÉ³ii.:Ýnúõ‡Ì~6é~á§ÕZ"Ë”":¶Z«™‰tØÍŠwö*)ïÌÖ‚c!ˆ‘‚M~_ú¯ß{Ç¿2¢!ì¡­pzº‹ˆ©센™ Ø¥í§B,oyö1Æ»ÃÌá×ÅTUÕF×é~g.„ Ò^_ßö‘[Fn[»Ü.\øL@ÄðP×oßžýë_×uɨ€ý&s¶J©‡=¥,+ÈRSu„™àívûþø±‹ T™93Y‰˜K-Ï®ævöhµÖR¤÷AˆÃ]÷ÈÕìúw»ø±[eQ.{BCÂW,¡ËÒ™K¸™ŒÑjmM׿»güÇ…å… þÁj¦M轈ˆè°Ô–g¹Ø^²¥Ò _ÁÌ‚h_æ,IDDC5¹ùRj)ÅTí!CÅà "2TiïÓ<<ßTõTÇç: i©œcw……[€:’ù¶=¿ÿøõÇãÛãùHÝi)5m"Ž¡ÔéÃÂòÂ… ÿà8½CO{kSÞž5%‹FJIáðUO)‰­u݆*ÄN=¥nk÷ u{‹êP ¤¡gòó~BMD°¿´»ãñçÉðç›cl”Û#Ÿ:£X™¡ÖBLRø~ŸÉÝÒqKé}œÿWn‹.\¸ð pªÎû›··×_¤žœþÝcÌ,=d’YÊæ&IwÕÈ¡í¼=„Øozòœ°<¶á„áš¶¹%DB&d&$4ƒ0&€'€BX™‹@tí÷» u„£Y7í†ÀÌ(‰üåe~}y3)œw×6tYÖeÙ…™k-×DxáÂ'BªC#Æp i¥´¾I®×–#„p ‰Ô¦hºQD˜‡G8¤ÕLx@ÖRßî¯÷Û} _"Ð-%©±o #ÌtŒÊ…§ÒZÁØjß60ë¦[w7À@¡‚•kDd†pÈb)j¦Ö·íIÓ½–†ÄÜÊ…Ì‚ÍÌlYžWÒ×… Ÿî>|«RY'†"4à # d»t°]`@HnLÂHUÊTƒ #G6ôÀpfi¶'°më#ó&J)EÄ DPDtŒÓg¦”Rk­µ2Ê.hè½'%æîDìI„E˜Ûº®}‹Rnm®»Övlª'ú¶ý¾ßþ… ~ˆhš¦BÈ­5 Î9ndËuÄhaf&)ÌŒ§”t) ö­b²O)6Máúóù$úT¶:M€=5‘ÌÜÔÔUûAy¢|^ Ñ‘ü ŒÇ«HŽ©ó<»{€íÚ¶MuÜfª­D„5 ü!/†ˆ/ÆýÂ…Ï„4Ãb ¦‘®¶,Ëóù\×ÐÏ¥Š òF}cÊ¥ž‡ïÞSRð,D¤j:Œ™KeA$w8òë÷"@fæ¤n‹™ƒb?ë!JE=ŠìƤ€PJAˆ¨µÔZ#ÀÌú'±ofœwŠy”ÏÅ÷üú]p‘ƒ¡©"âÛ—/·ûmŒa¦éJ‘R†¬t—ëÂ…Ï"RÝi¢Çã‘~-‰zº$Ÿߣ¡ÑÝ×uÍÅÌT F„#bÊÜS\Z¤Ün·¼ÿ;¬e(ï{vÅ$":€©Ùaqº¹gpT>”³ÉJ[÷Ôex1³0 U&]×u[í¹<æ[{y›èXˆªLSû¿ú .üV2tbBUU_Â÷Ó?Ý(ö=Þ®tÏ'f‰`fÕÑû¨Ø³ÔZûïy«Ó4½½½™cZÿ9`$»ãèÐm]!Œ ¶mëc#œ"y(¥0Kæëüíßþ¿RÊÿøÇ¬¬¹é„Üš©ª7¾m1µ—×××R‰™!>ȹv™ê… > "Ü̽‘E0KÞÇÁC¹;áþ»e-'Qg¢jʵ4óuú€x›nч&ãî™ön‘ CUXö-žGÁáÅåî9xæAP>+¯O fI™k`¹Í7B1'.üúå­UF¦(ÂS› xÕ~yË\¸ð¹à®®®µH‘ÊÌÅ'ß:û¶»»£1íujßi EJ)¹ss÷´ùc¬Ë"¥Às]Ý1‘‰˜hôÍl„:,ˆÈ T‡«V ÄZk«ˆ¶mÛ¶ÎÌo?½232X¨……;P`AdNá>ZÐíåÕÕ¡›,üLw³ïÈÒnÅVÒ€‹ÃºpáADŠ´PEÅ©4ÃÝ úðáèAäÀêî ¥`)ˆ˜ö›A¤p7°›öÍ™N“Ò©Õ t€î„èŽó\*…@PèNœ‹”ôpÈÄ1Éj¸mÛ<±Ÿ’«½Í{{{«µ¦OR­…™ÇèÞ¦F„ë¶.몪:ÔÔ4+îéî|áÂ…Od–ZÅžTŸ!]¹÷ƒÓß%¥ ù›~º÷m[ï}¸»š%áõ1LD’n:zï뺩Z’è A„ބĔ'ˆˆT„l(¦˜âˆîc˜y^MÓt„Sïb°yžÃžá"—ZBÍ݆nëºDÕúÌ\Jíf–Óéïøí_¸pá7!3)óŸ#"…IIc•RòÐqŸ ‹Ñ}wwÔ&6õm¦AnAc(‰™Gï#óLiºØK›í}™yf&„§5߬”ÒÚ”;AÈ—85 éãî„\kc’Íú²¬\œ…ÐÝk«r&&n£{D\~.|„‡{8î’…1îšÏc¡DXk ¿‚Nû¼ãàYwOшì³özäáµÖ± ¢•Ž‹ÓyAÂ}˜Ÿ÷››ë8e±[¶w@8-oòí“KËK­«P„£Y0 "ÌS­Óìës+R›æR ©57s¿F > RcEäˆ""ϧ-ÏÕqO{È©ËÝ,»œSì™5+{.FD‘ˆ,RKiˆ+"¡ÀÌÓ4ÍóÀ_Ø¡’ß­÷ ;<‡Ž¤ÁÏþ-«’ªá‘ç8¹bLÃÓt@DUsó¡:†akušÛ<·ij¾md%ÝRózá…σ8½¬MÙ^ò«D¶EÙʤò)Ž ˆ÷8ÕlÐ;š=+>|ô®fD”…%kÜîy•ö2Ó4µ©õŘ¡”Â"aªªŒðñþfŒý½ŸüIªE—„Œ¥”Ö*¹s¹ßîÌì±K°zïªûÏïûí_¸pá?Ž07÷á^s;w¿ß54Ws¤æö±„eÑÉRJ!DTõÞ5”¹”æÜ Žjóï>@’îàîC³)¥`¨Èy‚CD¾m›ªfFaÊê·mÛ2‡‡H¸1ŠˆíÏå‰Xkž8Š0!…ŸCïÕa]¸ð‰îªYƒÌ¬¶êÃ#œˆEØÜÜýÝöKdøûœg$:^òɃÑiE×@È1.Ÿ›ˆˆ¼%d.UêÔ‡‚A8’LSZÊœOpO^Ìwφã|'{¼1F­ÅÃÇØÒ©¦™úöãùøþø1txW Õ¾õ¡Ê""åwùÖ/\¸ðŸ"n\¡ˆhYžÏå›ù&‰ BYH„˜Å=T}Œtd ì]×µ÷ÞÝ1ˆàdÈ™±÷žF ÑûøñãሌHp x€îUIÝͬ÷qn%J+D$ˤ÷Ϭy"rÏZ´¥‚Yî÷{˜ù|¿{„ˆ<Ïu]ùh/Ö… Ÿ ç”wx·˜»1sïÛY˜‘#"§± Ä|…ä¤J)­µ|©C„U2ÙpWŸ¤š>Pê9„¢#€›Â)y?4¢¹ô¤«N ïD4ÓÝ— ‹ˆ´ú˯_pš¦?ÿË_¾ýºZ4"¸nÛ¤záÂçÂéǰmÛu(oëÃ`OÒƒåŽjÍÝËÆ‡{U)E¤¨ Šý]jmô\{Rõ;cè„À”~ïÀ[‘ü(éÊðq7yZÞäÛ|l¸„yš¦Ö »AWÄ×o_ùå—?ÿùÏá1M!^Aª.|"äïþG ;"B`žÄ¬ëªC#€Òé eRªº,K6\î.Ìð!\‡Þn–îZùàä»’äŠ÷˜/ DØsžl a,¥fýË÷€ô¯9Ͳ–eÕtšG Qx0³üõßþºm[þŸµÚþ÷ÿú_ÿÛÿõß~þùgnÓ4ÆÐ#èÂ… Ÿ{¦_ŠÎERÕ„D}SU7 3?ÈrJ÷«\ fÎVzŸî É€Ài¿NÌéè0ÆØ¶-‡ÈìÔöU#Qav>:x0³0Æ¢/UØçפ±²óÚÝ“SîŸU‡¹ýúUDÌÔÜþËÿø§?ý)ýã§Öæy¾DX.|:œÎ|˲¸û<ϵ´}CÊö*OÖhŒ±®ë¡´â,Y7Nûu9€œEø£#àGV»ßæïß~Ñ0„*ŒL€ï¢Ð€l²ðH£>_z·ÂI?a®µ¼¶¶ô5Ë*ö1ÐðTèÇ¥½pá³!+·/_^ˆ¨÷‚DŠHÐt=@¥TfNü™V3Æ€ÂÂï+?nŠÍì4ÉÃôU}é7ÆÎ§¼Üﯯ/Œ€yoícôSÏ {koŸ';­µ···ì•ŽÜ×@¤—××/_¾ ÑÏ?ÿ<Í3H‘ÓÝù<«¾páÂgÁ:zÇ”ÇÌ`æg’zÏüçÞåÝIöPÌì ”OiÔº®ëº¦aÌɲ玈ŒAª¥É|›¥°zˆ1xß–mYj)ð¡ºùùNµV3{<˲ì톺«úXW_ ÚžÛ4àhµ€›)b!ĵ"¼pá3ÁÍ·>¶ðˆpµá‘§3€Ç<±§ýåb°ÖÂŒfîžÄ¹›; ÈX0`FfRëÁ"™¹êQDj•¡6†íEƒ™`*Uðpªê}ÌÓÄÌcëY³òV3Ë„ŸZkïÝ Í´ë03Cx<¥¶míÛ²½½¼–YºÁpó0c¢¹^žî.|* ©ÚЭm§ÂCw±‰€™•"­UU:Ü“-››ä­rnc–6U1ì½t‡ˆnäfAÉâ¤E !ÕÖ¦i: j-¸§‰åð½Õ:O1»µCâ…fûm䲬½[jÙ™Ù1êСªá~QX.|.0s)’k·ôkOBÈC½1FDD€ˆd¤à»òSD–ŽÞ(|O¬Èú“‡‡YRRûp¾¾À)'E€t„p©µå˜zȺø óIúnø@4Æ·Èk!¶a‡€R5=›EŠûé΀ˆ¨fÛÖǯþÂ… ¿i ÃL­µu+¸!ÕisläöÓüówÍúqÕ‡(Ìœ }ôeY˜K6_¥Ä„H\–m1ý`L ó<'–ŠxÈD ‘D$™¬ù¾§èaŒqú7ˆH)Ó4M"Å=Í|ëÝÌRû€¸7n‡ĥúpáÓ %â£÷”¹§ºŠ8 h­¥´ Fö7°·f%—†É¬ŸžzcŒ­÷?~üøñãñãÇ8&r Õ€½Pœ*P("LÜ{ß O}W—œ<‰HU³ëË2™¶_¿~]×µH™§{)•P˜‹yr«ÍL‡7C„÷6ÒÝýâÝ/\ø<@ŒØ[¤³|ôÉi±”RÊj#"·Ûmžg8$ £÷}å·÷Iîc 7Û¶m]WUwËrá¸_üÀNº§îGˆmÛ‚©÷.Ì©W8dS™O‘lTÏ ÌìÛ·o­ÊÿðOóíVÑ©”VÛºuU«¥¸‡uDаtíR6\¸ðÙ@DÂ’¶ çµ vê½÷1 ‘Sžºf^–åëׯi„§ªi|pzg¬­™º‡#±”2Æs]3™uxA¬1Ʋ,Ëó //“ª~ûö L9tjíDDº‹d“uXÌÜZûòå ‚›™©S婉°|ýöýù\ùõÆLÌ»v|<Ñí*X.|&±pI ûTæöŽÇÇ><‡°Ó÷…™K­9 ®ëºHìé IDATm[)Âyð'ÂŒ,bÈÌ|˜Á |ðtÇ­ÛA„EJ!¢®æÖ«ó{çæ`昂Ô®ZYD§iZ—on]ÇeŠ`U55Sw "©­v#¤cS …¹Fü{GÁ .üÃ8¯\À!Òþ¸‹Hï=uš€0MS„aÄ€pSíîÊ\‘PÍÜ‚©J‘J©‡›Bú»‘pYÇ÷ïË0,DHÂ,o?½>>%¡çº€#ÖÒÈãû·ïž<ýi>“âTĨ ¥€[_e”¹ÝÀ¥–‰™ ©5ͺkiˆWÁºpáÓ€À@ÃÜ̺ùèæáª½«)a8ˆj JÙ}´V˜yY¿›wP%DD‰0b Äut ìm*04<ÐÀ™væjWºýúõñxx„›m}C¼½Üß0üëº>ËóÛãËýþÓÛÛ4MÞû6To·"fºWv†0OS-$"­°@äÛív¿á>zßúªjª[流Ö… Ÿ ˆ¹¿ËíÜ$qJ Ì¬N"îZªÞyr÷14ù°”Rk97{Ä»è¡÷îAuºå§»t{€¡}š§wSSW5SõV§çöC‡Þn÷VDÄívSwæ}Ÿx~ÄJá6M­½Ün¡®êó|Sµ ÌÜÜB„™ëÚmÛÖßå+¿páÂyÜÇ€ƒe‘uí¦–KÃT„š(J-i0e6Ö5¥);‡CÊB‡d»Z)À|†ë¸û¶ Djµæh­þôÓ—m]¶e¤>«÷ŽÈ¥ÕYóPÒÛÔ4dÒ;"5¬Û¶™Â6MhîªfCÇ6ŠLcD+ó„(ç)7 •Ræù†ð·ßç‹¿páÂo"ºÛ:ÖsWkcë[ê¢÷îîC·F˜wŸ¦zúƘYÎìÑ0"Ì­”é­P»©C&K$æ¹ýôÓ—¿üå/©Î)naCÝÁ GwUKƒƒ©K9÷q䲺»Q¸››Ž±mÛºþÛp»7bªeZú¾>H¿†¸b¾.\øT(Ez¡ÃÌÞ]ùU­µ5u$Eÿ ß}ÕŸÏ'ìMç¯?"b“°ûÉð`ipVYæÒr R8Ê ¥H÷ØÖÈ­Í„…ˆEJZ s:”îÞ~ï6€DµÖÚ!©™Žˆ˜JDзµÖˆ=ðçlù~¿/ÿÂ… ¿ ­Mˆ8µ¶_ùÁ§¬á:Œ1ò6°”rf¦–Œ|ÿ`;˜6[²û&ç•ÏY[R·•RPÈ«-ÏžûÖÝCǘ§{ÞF#r­•YÂrµˆ§*ÿÔŽ"bßz¯¡ª1,j­÷ûTëmÝž}Œf&"IžQMåØU°.\ø<Ì•/»Yh­u]W ËØšý¢ÐÌÂÁ‹Ÿ£ù_™±”¥ÈnY »µ:¦';£¥ÇV¨êËË‹:vÝýÙ÷ɯ¿¾¾|ÿöÕlY«»!‚H9 0˜Ø#ή*_=绾m÷YúX‹`)r¿ßÌ\ÍÌ"Fßzw¡"¥œÆò.\øc Q„÷®fûY^ŠÑsꪵ1¡Yäü„ˆXkLûv*E°Õ*…™óT'¯oó<µƒK›ÔBÍ’ÕGDBœç©Á¤ÒGïßAc¨ªX€9¬H# îGØ}3¢VJq³p7U7C€Û<"©âó¹®ÛVDTG€-ëwæÂì} ÝbÌ!‡,s!š[›ê„„ÄÄnáµú¨BˆFˆFð|.ÿò/þöý»ZZï2"lÛv8¶ÛšbùmÛNƒTÜ#ìwÙßÖ­o=ÇT7£‡;"dÚ!œaWµºpá3¡µÆDf¦Ú à˜×’Æ:K)ˆ1MdôÌá΂H{îNžìDøqµC±.KD¼ÜïLÔZ‰ð|…=Èë×_¿¥ïU)Ìl aó<3ãùºc .ûýà¹n̰{@ä²’R (³ó„‘ÜÔû6–åÒa]¸ð™ÀLæÖû2t6O:#,‘2R„¹£ª!þ0Ä(1g;–£¥Í“i÷þ|þ@æ´ä»ÝnRç$Âv2¬o®Çøž“Ì|¿Ï¥µˆ"”á=ðäÏÊåîæŽ€¥”Ú*1e\ Q:£jغ¿i¿ ü.\øL@„R¨Mõvo)s?­õçÐ=-Ô©NØó)P˜ !ŸGфë².‘vZ¯¯¯ˆøýû·Þ×6µ3#z7“A¢Ìní½O­å‘ Ú@ "j­1@„år0?k)eš¦¬t}Ûˆˆ™„ejS­Õv­jï}ŒaÂ.RÆØÝ“/\¸ðY0͸÷R8Ù«<¶K Žˆeh­º›ˆ° 3×Zh #’#n'Rø.,°m››·VEH„ÿô§ÿòòz3jö×÷t?Kã{‡•=§k f?UkõÃÇý½Rî“`i­Mó$"~È4ÆÐÞ‡{Z>벬˲Ž>øŽ^¸ðyp¿ßZ“¡+3”B"°g;dÑØ½ûDˆ¨T&>í?™HˆÄÌvÒ=†ù0^7×6•RÒó/Å\j=NKx€Ý¸!·Œ;îîà„™= ˆ‡†5Í‘38'Ŭ„­¶ZJM ˜»#Q-- zïáD컆ëÂ… ŸÞZoR´V___{·m‹4APÕmëµÖZ¦@ Â)&ð ]>'<{®œ±N[vbc@€™ã²<úXEˆ‰õh§öÉ0`ï’çÏS@3‡,^fc?#Z7sÊ¢ˆH .ž¦Ö7¬iëe¾m›©1 "01ÏóÖaëFDS›n¯oóô×Öê%k¸páˆ^^^´$`¦pÊëÃ|¦¦óö#ž@UC>‚é ¯|ÖuÕ1x ©µLÙµ6és]וÊm©|¹de©;ñ¦ö{Ew@ÂÂ4#ì±­w% ~}K‘eY–å àŒÁèácŒÅm-¤… ( -3Tõv¿ÿ_û… þ3p×Ûí^ËÍÂqÛV$G &aa"ppUtL®({+RíæÝ| :Q˜¡ýè— u8: 30Æ\ÛT9¯‹šî'1{ })BÌÉõ'UkẺN~ŠHé<íI·™Ö*<žu}®Ë³o‹‡‚ÕB€èA„E¤Öªªëúܶm]—Üb^¸páS@Õ¾}û¾<—ôtY–åù|Fï½o[Àô¾mÛFHIo@D$«EDóܸp„ÛîG"R[û»ð-&$`"‚€mcô¬B‡ùÁ.ú:ÆÌ¼ÃŽú®€ü¶mSíósØ@hïéñPþN‡•cZ>íô;f挔>Ã&²Î%ì ¡.¥ôÞÙ!"F_m¨ŽÂRD‰˜X$}$)½¾®ãç >F×ÑG@”R˜38Zkó­•ÂH{^Ắfš‚'ß=ŽwóÈû–4{(¥Ò!ÍÊŒ™ó zÛ:f…Égj©•ã(uˆé¸\åƒé>dÊ}Áy £¦®ƒÀ…3¥šRQ 3Sê¾v1ED–ÞKÓpáÂ燇j—ÖÚ4ÝJ©éÇ0Ïów7„8”õvl\]¦W_¸pá³ §$Aä1FßÒ kßö¾š3óÐs?xêàßͳà…p÷uY³û)E²ÀeÛÄ»K d¨ œk M«>¦Â$C;¢{l(Ô¸P ª+ ¹)xLm" "•©™Ð)XœË¢"ÀŒR¨ ôðìÝܽ”š>ËB1ÆÅa]¸ði ܘD¸¨jm%Àzߺúþ\ƶ) ³âVÚTŠˆ°j/…ï·&àÝu%÷PÕt'UÓ”kE@×\&34 EÁÚh’B‘ö2áàÝ̵O•Tµ”ˆP€€P'B¦¼à!B ÷eYkm„äæ›†ú¨eF)R'sಷo¥Ô½KŸîšw}ÌèˆB´‡V±wOéU ‡"!/3¢"‡Äiš’Œ÷#1ñdâwAV„™BDÆêä‰#¯Û EÊç<>0Æðˆ9f±ò5šº;1Ï9æ˜ÿòûß?wœ‡q¹5\¸ð퀈T83G«‘™6cŒY1£wNT~{"bfÇ£X­b½kÙ…ÏŒR•ADÂ\˃O⻞uH£D8„£yú kkÕ1Õ‹‚YU?ÏYŒUêˆñ¹£ø”YµÖ"¬÷Þ4XD"sN~}eæûãþ¿ý§ÿô³_ÿ{î.ÒTýrk¸páÚ¢,L Lz<¶ÏŸ?ýðÃ"êJÏŠ0Ï9Y'ë €™íÈûª‰Œª€,˲Þ^Tdß÷OŸ?½cê}­)²:¤9çÛÛƾ~-½×¹žMc>çÁrÕZ–¥®²—Y×õipsØfÕa$se©"ÓÍÊŹè73ë}ùÿÃøðÝUmM½œ‹ÂºpáT¹ ªî÷»pÛ÷aæÇã9fáôt©¿Ö¨8ÆxŠªö1ö}Z˜É,åûã‘™¥G­=žÏŸ?㔚÷Þw–C'iQ0‘™‘G«öµ3r”8Ò¨GÁgCHLLäO‘EÑ ËËíöw÷wªÏ]æOrÝ/\¸ðç!f£Š×uím%œ1¨gjò³`="ŽJQU½Nê‡ÊÝ­˜¥ÛËKk½÷¾®«™½¼¼¼{÷®„ë5Ì¡Gö³Ÿ}øð!3ëìY2OÍü—7zç<Í•«·*åÅÓŒTEËT«µöt¤QedŠpõV­µÞ¯¨ú ¾%dzõ""ÒÚ²®/ëz;"NŽˆÏ8B3{†Gd¦{±®Ë‡w·£M‹ ÂvŒ1f@D³}¨è5^¸ð !³vŠ`ßGýîéV^ À‘™JµÅ`ŒñòrkMç´}{ÁÃ3žkƒQúÎ ¦¿?f.’ªºß÷:Ï+ó‘¡¶ý‘Ë¢#­=«öª‚ŠSdÖÑ41M7f$˜ÚÒÍlØ ß#Ô&÷v»­€˜¶}Jãæ°ÝòãçæD²PúÚµN(¢ëáÂ…? îÑZ »Gx¥ãD„;Âé¶¾¾Ý·pLŸÌº¬+ZkcLaQåL‘n1ê0ñTqB˜3S„xyyí½G2ÑÇ̲¼¢ð¨¯ìRDZë™QK3f>ÆÈÓL¦ðµ½L6FD”³örJz¬æ¼½½½½½•5²»×8JGÓV¢‰Crõ”bÕŸ«ñë½×ÌùúòJÌ©­‰Ö!cDx-÷eN¤ÞVY þ”ÿÂ… ˆ…é´`7³j©ÌLDêw¼&¸Ão¨p޾'cŒûãnfnniuÔ,)i½xµMÈ3æËÜæœD$3÷ÞžÓ³ø=cï«rU¿gz³æ—×—¦ú•ÁÖáãuêÃFDÖuïËO{ù/\¸ð¯GMWDüÜ,~*Eq*ÉŸ¯ÙðéýYuÇÝEøåå¶®ë¹kæV£[ÓVR5eO9zœ28e6-9ÍLÂR•(NsÒ ÈÁIÀ? VUÖgUcD溬¢ácìÕÖK™ù4›cføsœü)/ÿ… þ$©6T^ ýÜç«‘-NVÕ‡mÛÇÕâÔvX!µÖ€l­½Ü^Öui­ãl¾ö}ÿøñÓýñ˜f5QFD• #º€{Vu"â1Æ>vP˜òv¨Ï÷œ3‘éac ñÒ:%ƶo÷‡Rã"²´OÛû¸Ǻtàp ç &ÚömPÉÆ.\¸ð €@Ä>ý“û]–¥5À÷¹mc‘’…HAªº²4œûÏO…yDš…YI_–Þ×¥¯t¿oû>9å¶¾[Öw$+qISVòÄNì™ql6mÏCÁ<}Ÿ–4õ‘j{ï8LièybXy]"žsz'æôt”ÈȳŸÊ£Æ‹¼.\¸ðÒ==3£µV~V½÷¹Ym&·Þ{ïæÉ¬ÚÚ"ÅV{M`µ¥ŒCÐp”ŽêÊzo뺎12œ ö ¢"@‚”E0A[+Igï½iÑð|l•ósÅ)hÈ?6`^×[+º]Že"¢ƒ¥;jS½úà ¢Ûíåê¯.\øV‡v µS\«ËU’žâ§•‡—ïBÍt·Û €1åOU437P„=¡jÅ¡ðz2QÏ÷px‡2Ó°IæNÌÇòàódÐRUÌ9Kbÿì*H€Í¹®·uY nfVac¼}ÊwK¤-¬´Ké~áÂ7"¨j#-¯„ûý1}w÷ÊÄ“YÏÌ1Æô‰¥«²™•ÞªŒaæœI`&~ê1«Þ%2™:+êÄïù@1ú Ïõ)¹,l¶m<¶}ßzfdV-–õ3ï{ë±8…²9Ƙ6…Àäá1/Úu˜ïû~Í„.|C8VáÕ¾˜Í1§p#¢9o†ê•’¨j™sޱ7åÛífûcÐz¯2²Ñú #o·µÝÞížcff®ëz:añaú‚C”0‹W:…2ˆó8³ðÇaÎeÍU´T¹ú•?²6­*–yl%’øÐзÖTäÙÇ]¸pᛀ{ŸólˆÀr4Jµ¦sœÎE2Q#è½UZj-!V¾Î±o˜áGt¼Ç¶í±®k½Ú¯~õ«RÔ†`QQ #Äëpƒi­…w&®HÔ*X­5V© ZU³O×›áv»5¼_„Gp²²#22ãøăÜ<ÞúO{õ/\¸ð¯G‰¤æ<´ßªÚZwx€pNpå C$,ZŸœZñŒÈLQmªQ<8íq„}}Ùy&dEwUÍÉÌûý¾ï;3[àè˜ê¿yTÐç¾¢2aE"ŸÓç;.¥{©á÷ǸÝÊ2PDPŸOµ¥¦ñÅëg„“g—ëÂ…oe d ÓK¶IDáaæ%~ÂyúÏÌ|¦Û@„Yˆ©r Ý=ª*™Ï9ATv/™HaAd­æ”ÆsÛ¶9'3£tXU䪓Z×%#Ï ÊD&DÊ>42 àaÓܵ鲮`’¦·—1ko½w·Cnz,2³ ÀÕû™[o ÛãÚ%¼pá›A̤RÄ÷±<÷aÓÃÜÝ(Cˆ˜鄸ú°O„èå:œnÓÝë%…ˆ‰„˜#ÈݤÈx¤‡i_R4‚•Á™0"a"‘eYEÕlˈL¤#m˜P…í܃ME„/ÞÌ8sÁªà%SfšÛÁFñŒ¨¯+fî­•½i×̈}Žåv¬E„{Êi®úS]ú .üˆ(Jý( ÚZïÝ÷xžšYdÎÌÕ|y¢†¹Z{ffÏôp³™5Æa,¬`f$1×ô)Ú–pÿýïÿáÇ"ÝU•U‰+Q@'EË2]8Áäɵ?'ÏIµó]Öz6”ËCDäàãUö9ܼ]‘aÑš¤²Y#âÒa]¸ð­€ˆZSàˆöªå–ŠêÂéq\½•ˆ˜Ù~X'KïµIÃL‰}$èˆíbÎÌ9 –µ½ÿàŸïÌL”f¾mCÛîDdf `ì3"2g†yï É•\XÎ %“3{§32ŸcêœTáÔŒäCDµ|QéðíËáT^Z_;Ÿ^¸pá/GăÌ:#âIZã ýcæDÖ²p [k¢­\öj¨bb™6ÍF"E¹5-.,"Y(3UeL"<ó"TT}·}ߥ{içIH¤$£¨áó³GUwWC©jɺª <Œ#2™™›¶’c0qE¿Fd•¿8æô~ø]¸ðÍ€Žm›|²ÛåÏçÉQyU°ŠDb:Üö}a9êdÕ/**ÒS Ívp`6E»’Æ÷Þk›Ì$D¦×Ž*‡Õ¤lnžë8e2#g¨tµ"Ò›øfzî[gFf9IÏx뀰¨0_»„.|K < 똖¥/ËÆý±•` ‹½ª#Å1ÌçhMß½ÞZkiž ex Vµåí~i·——×a‘ÇútØH÷Ðòt§sB(•IAááÄ9Ì÷„™ wã°¹=ÂÌ=ÍÓÆlL°¡”aVeØ#NÈŒ32)#Íws7Pšï?õwàÂ… ÿZ}SMWcŒu½½¼ÜZ“¾hÁ0 &X¤EÐö˜ÿò/øýïÿ‰Ö´-º®+AÜp¿±;ÀE•»gXŠÈÒ»Ï1ËBÞØtßç§Oo‡?ü”ŽzÖé°•@™f¦,%¶Bud "d"#Ü3‚/kPùÏDÌáMD%swâÈ̱_ëÂ…o •)#DϤ‰:úk­-KðÛ›™y"3‘0ƒû>æØ·1ç¸ß·u])áîù d&2+¦F›¶ÞEd˜1X©ØýÂã ´ ¤»EH†gV6˜˜Ne33’Yš°'˜¹©š{úSbª™žA™„„G2!"ÝGï-OÓœZ°í—Eò… ß ŠiÊéZÌõ>¶···i)틜ξdî¾ïcÛØ(>zûðþ=6=3™µwô¾«*ˆ…éÂìæûý±›ƒ«`ŽXÃŽr‘af3ROæ ™Çº²‹rÑUU)³å*:"’á8÷ËŸ‹Àî9Ã4÷}X–ÄqHZ¬b/\¸ðM€P{{_ÄV‘·Û-‰çðÓD䜾mÛœã”=@Âìä€d¦›G$³¥A¥i–|(Ó+S"Ø´ˆ8Hw"d3–ué½õÞDx<Œ˜Í¼µ¶#‹[?]ŽQ­sÎÖ{¹ä”Ö²ôeíÚtì[Âö‘î±,Kk ,ÓYÊ~ù~¿å8qáÂ…¿tѲtmÇù`9É,KgÕý7Jwê½¹/·ÛJæ|÷(_­mÛÝ#ƒˆ9“ÊáJ{×øº®ÛðÒDø‘Ò `ÛªòéããýûÛëëK97OÛ3"™‹`bœk:g2ª³zì»"Ëû&á}¹ýüçß÷Ý»øaÙt#¼¾Þzï»93÷ÞÀ4"÷}ß÷í§ý\¸páOÕžW{Uçwõ׈/’wðamÅšËÒZ— 7ß}÷ÓÌlI>ÆØ÷9§|ÎjиµN¬@ežÎÊøÒååg·Ûív+YÃd&UùÙÏ~öë_òŠ ;Ëá×¶îÌÌʆŒ Ðr+EYÄHÌõ¦ïÞ¯c4JkMÜrYŠZ+«fRU]×u]VàÇŸú›páÂ…-N… Ã”Ýæ°ô„—:s|Ù‡1R•ðl­/+oÛ–>ë¨"eæ :ÊŸð±–ì>gnÛööö6Æx]ßU•<’Ÿ÷±ßnëë»—÷ïß?¶O³V›JÓV#+3è¹T;ŒfžsØœ bÛÇ[Ä;æLøíö‚¤:›lª3`Ó‚¨ß^ÖuíËòS^û .ü‰`>&:”L.€ ˈcW93YHE¸ 'eº6†Š8qĬDÄÄ*ˆâôü# ÂA‡ÃÕsí¯„¦ëº*€PFkû§ÿçÿÝ··_üüH–¶¸¡eXÁÄ’ˆÉ9„™LÌ,Óæ°p7 w»õ.§ZÌÈ4€IÄÂÛ²ÐtQÉÈ1vJâk•ðÂ…oÌì6¨Qž9ëËëÌ6æ †ÛÎÁÜE”X(¡º´®ûˆÌæ! /£)bˆ²Ùôf6 @‘*Ò2öÞû»w¬ú[máÖøûï?0b%œfoow›NÄœ úbeÑêˆP.­µÖˆøüW.ë wßûý~ß÷‘ [fnæÓ²lp<3Üírk¸pá[ÂQæãñøÝï~w¿?ö}6Ô#´±˜¡râ‹¡G’#0‡ícš;@ªÚ[o­(s½ zz?œþض ™cŒH;r UuŸ•;vœ÷íû.Ç’ ©*áÞô ؘËü/Ÿƒ+Q"ÆãñøøñªJ2 "é­×P)¢mW=v²KáÂ…?D$,Ól»ßÿÏÿüýìg¿ü»¿ÿÒp»ÝNü±‘sXͰÐSˆÃ¼Óçœ1=#wÚ  Ö»™›ø´Ùª9±ÖþˆèååæqÚˈhï«Ï¡\jú#ñ"æLd¹¢ÌEjâÂ2˜[+bY[ÚA`0›L$LÏøÂÈð9÷}c „/·† ¾$,Ë¢Iñ«lmuwVžseŽýf>=³Ü½÷~$2³Ö23SDç~âizú@ !sÎzîç·û·†šÎ„[•7‘ÖZs3P”3¾PïæÆ²˜Í1™›(‘ô¶ŠteRf÷ØÌ–¶fIÑ8 Ç?Ñ…¿p០b›ÖTÿþúûpšQ~X^¿ËUÊ¡,ój¾{îKŸnTŽ#¬ëËÒ·}gfdÎ9¨¨š9§§Ï9o·Û‡ßiû¾3€í1æt&™sšÅ¹9ÃÓlÎéîETåñ¿¨ ºÊĽ¾w/ƒr ÉÄsßö9¬ $Ê‹¦üeŠØúI®û… þ$´Þê8ï°‡¡ã0¯ìˆ«õ)kÏ8+Æ“ä*ö‰PÄ–¡ä£föÜ~yº•¸ßï½÷9çÛÛgwÿÍo~£¶m'ò.ÖƙéÜ,ááQ®ÌÏè1B‚ÈÍIRD„ÁD4çä±m¯¯kkK•Teƾÿæ7ÿõ1BÛ­ÞÍeàwáÂ7„DF¦°P@ÌÌI`aŽ'KU³áiD|ìFÄsœª¾Ö{¹K¹»»eÆ9B™¬%šo­ýò—¿üíoûÿ÷U¥ÃÊ·RÖƒ™4"¤ªY&8'o˜wY6ʤ*ȃwGnLœˆŒãÅ÷mÿñã§ü‡¤¶üüÿŽ»ÙœÏEŸ .| dŽ9Và\xIk­­ëúô~ð1é“qšªÚ€Ì"¸#ƒ™[këšÌìŽJwc0·Ûíö7ÿþ×?üøñÿ?þó>ÆáÖp´ª$q‚2áÚvpöyS ònœÈÈpw¤5%4–¦]X„yìcŒ-=‰™o½÷—××N 3´©èiqáÂ…¿x!wgéa–c°÷.ª¢Êç™ ˜ðG‰ªÌ_vfˆàaûØÆØ",áDÙ3+ÄYêÙôùþfÁßýü—>|P汋¨Ræá1ÃkŒD"kl%NÊz+Tžî$JLæ>áÎ÷ŒÍ9·µs£¤p'$Õþé‡÷ßýíßþíï~ø” ©„Ÿ+„âÂ…o™9Ç&­˜©1F’»çÓ¸ôëÌB$D ÿ<1ÄQÂJ÷áaDénû¾™…6%Uæ$%ˆˆgÞw°4ŠTâÃ^† Déá_ìåOª,3A\V”)©&Ô$d¸Ûœ9’Ú·ñ²¬ b‘– $2CD‰" ÖÊéáÂ… ß"Oc(w·™(£ªü*³_™¾ŸÕ1²ˆYU#’‰<ÂÝYX2E„äp-kSÕ¶¬Ïü‡£`‰ÂPŠô%n¬|Ùtà¯f/›*ûs wW†‡9ÇœˆD˜,,$‡³ªSŽá·õå»_¸ð­ ¶ù(†ªµ]–ÄUŒð…ÕÂ󬈘È"2“éxNx´®}YzïsšˆôÖª‹H÷9$ËÒ×u}ÿÝ÷­µÃ%ôùVªoS‘"Éäé‰\Ê©âÝOËÐ@¤Š0Áæc̱g&(EEµGƘ>¦grDޱ'âv[ˆ$“Ü€¤Ö–¸x÷ ¾0‘¨?vqN©ÎUyŽáŽˆŒ<š—DÑïî†s=‹hkÌ\VÉf³4fæá}XE‰*b „*"Rš«:z|Î¥e>SBªzŽŠSºÏ9mÎŒ³mnÑ—ÆÂæá‘æ4 4[.Âá¨, ;5\.\øËGD<¶‡Í§³ú)œ‡€ÏRUý <Â<ÝQ¡ò ¢„Šº‡"’/;Y‚¬’Ëg¦M{{{ûøñã³f)€ŒLNmª¼0Ói=-â\LjPÖ¤ZÚñð  1‘rÄÑé×\É9#ˆ„<¿˜(çfaý©.ý… þ „GH>CÿJ Z…Z_ɯÀgKP±ÕõñÚ(ÌCm¯:¥­QŠª$=™ÍìÓ§OÅšEÄW¹„]´5=5¦Çû‹JÐ9ÉÎøVDRûÖÂZæôÜ–®M˜Ã=à òð\µ3“˜ET¤}þ4WýÂ… (ùdX""LçÆýXé%„…@îŽH Ócßw–“§¯y–u `ŸwfŽÌÚU¬¤{Äœs&Øãœ ë0"(8ôîÄÂÌÄšÌÚúcÌL‘‹rfÎ9Ëv>"˜ ÷·²zv·p. ìÛÛÛOrÑ/\¸ðg bMáâ3éžÁÈç@w:MYñîc±ù™¦Ss›0·¦O¥ûÓ½/3Í-ƒ2A,22å°±ÀóÕɘc é{åH'qÌÌȘŒD:h bp«ËÛºîû.}Ÿ}a¢Å˜#Òœ ‚9…ØÆ$ˆ Kós>.O÷ ¾«NæyÌaæ&ÒüÈp&•fÓël-ˆ ät Þ…”Ù'í|lΔLSÌûþˆˆ}q»»“(2AêžDLWÄÄÄ™dH3·iyn*2uU5fÄˈ*‡uÐhf™T¶5™N\Å’’)=˱^Ûúúú’¤îA$\É.|C @¥Er|•©LU­hšçžÇ‡%@T²sDuüÀÜæcŒˆäöz›î5'æ‘y¶X ÀÍ-Ò ¤ÚX˜ÎãÉ8îqœDßZk­íÛcdÀ"2F Òx"UÕ3eFdX˜»ÛœÕm¹ÙÓHÎml›¶, 1Ƙ۶•J‚î1ç$ÊŒlÒUAZët¤ŒEf”Ѫªòeàwá·ÊL³(³d’¶%‰ÊÚ¸êÀ×{…OÞ@VÜ<ò䪈O>"{ïïÞ½+Ö‹YÜí`µDzïï^_KÏ\F\‹¶ð C)!F&#ùXq,šŸ$Ì1ÇPé™YB|3Ï4"äÂÄ­³*3é²tU%›ªmYn‘Í&Ƙ÷K‡uáÂ73±1çžéÌœðu]ÍìÍî¥ ÍcCæàæÇ OD'3ˆ’‰ÉLcŒÇ¶½¾¼öÞom™æO ØaxìúH¥×ŒíÍ=Z¹ñòŽÛòˆ]|W d÷H&…t˜ ¡ «0µḬ̂ 2‡Œ]„_Ì|ÛÚ’8‚IÛÒ—7FȾMöûßüæ'¾ü.\øW#<Ô—U;6mc¦ÍµÉû—å¶ôíñöùóGf²˜àH ‘EL73›á–AkB“ȉÉÒâÓýÓÇÏ¿÷ý±0[ø›-ͧ©3EvÖðPÔ&³³¨6³é]  ޳­#U1¥?ëO íê›ùFȦ².ê>ÝM´Üm„˜Tߨ{ÿÊ âÂ… é ‚ª ÉÜ"ýÖoœ03a.3tf!&01è‹­ÞS_ðÅÎ@ d„[€ˆÃÓÌß½{y÷ú²¶åíóÃlîsjðNûv ,ôJÖP&[u„g6"ƒYf! iáHf‹cpΙtzD0'óœ; ™œˆãkdˆpflÛ^n cX¦¿ÿðú×ý×ï>|/‘®Âß}xÿóï?´®D´ö%‹ò¬ëÚZ{<î â}ß™ÙÍ2³6’îûæá¯·Û¶o>­5MÏŒè}afQ©«³ïÛ[m~·Ön·—ÖÚ33™¨Æl‰¤pO¶ÓDÔ{kÚ¨ËÌêÏSàŒ_«Ñú¨ìeËg1ÊS< Jdz„iþE*x™ J€ò°g$ˆ‰À@gæý~ç¹+¯bo6]´/äL2ifÆ¢ 3çÜ ¾Š˜ßm e ñ’!D$¢Ò±…ôW%•è:ÎæSUU48=Æ4›cº›’6á—Æ=")ƒÉ£‘‘°O·ˆ|]”И–’ª¡Ì¼®«ª˜û¾Ñ˜ àv[—¥W^‘Ì9ÇxØ4÷93*²("0#3)"×å対ÿð‹w¯ÊÓµÕÝJ@Dzï¥4®[[kˆÜ§å¾¬«ª°í{f.ËâfS›´Öîo÷ ƒ»ÝnL$ªu{¸?OÍpD`&,"œYT„ÞL “9à$$ KÓÖ™%rOws p¯WŽˆ¤ÅËË˲,uÌC„eYš.ûoooÕÈ¡sGBx“Š‘™m­/ýõõU˜·m#¢Þ—}߯˜L„€ˆÎ92èŸþéŸî÷­µNÄ«v%! Dű—‘]X*…3#×ÛÚ[Od]¢}ß™øv»Õ=ÌÝÍçYQãv»­·[FŒ9ŸÜs9[k½w­¬¼rÆ<oOœ¤‘ZG¶_ U[ï½ì¢ÎÒw/Éw ÌëZý·gñÿõww„¯>^´ÓS˜é§„étòŒŒüÓçOõëŸ1+³VàËË‹gF @Lš„HÔw¶Èu I˜™©h)¦¯îDHRéMx{{c¯ TVÕ&ÂôÕ•Q6g.•u¦RbÌÒû AA´ ÛÆ>§Uå‹ðêñ ²‡×6“(a³Ù¤ßnKï-3•¥/ÐM˜)’–Uÿá¿üã>7i(Þ½.ï_×µ“иµ…yREØœ½÷¯ÝÍãu•¥QDº§Ç¾0A¶“Hc§œðÇ¢–·…ÜS(מf;o•Œ[«Fk©jnιݺfnh"ʤœ‹R¦fJf‚Ð çã1"B‰ÂC›‚Y[s÷ #eøÎ$åˆÏ"U`–D1¹± Â:¡­j )œ9ÌÜuxÍÄ|Yû”0·ˆ¸­ˆÆ°u¹¹%A™ÙCÏýRœ?Ï™î.¢ª¢ªf¶ïƒ(ZÏÖÔ=‚zkBW¢L¸o€&!9Æ"‘sr0,÷9Ãn…€FÄd¦Ì,ÈpO'L8™¡j–͹®‹´6}F ÀsÆ` rÏôÊ%ψbe`lA±ÍMÍ|Ú<Š‘6$<žPhM äÛã9‰ˆ°9#sw‚ߟ“ÇÜ6BÂ7íËëM~øáŸ‘´.ëü~ŽÃ»‰%URéŽ}òð_üü¯¯¯‘Á„·ûÛ?üÐZ{ÿþ}>ýRÊãÒ„———Ú]+ᢛÕ]¤êH_–×——³:DÄ#!*næ¥2›Ù[Qk)iRÍ•`Zgô, ¨ŠÈá65ÆÈš~бf6³ÿ×)¢Â-ü‹Yh]߈Ü=23³YÚÉ{»¿½}VAïºmcéÍÝ·-Tú#HHX¢MPùO · e¬¼Öm&–Á*Lɨ:hÕÖÛ*,sN"M¾¸Ž \ŽTîn̼m»K¸¿án½¹Ydæû6÷qä¬Ö¦“*_L”ûÒU%"X¨ }Qbˆ'Fcþ—?ýáè*ÛxÜ^_~ñ‹_¼íB!i tó$‹ HÒÌ’óíñ‰™‰ÔAAáY- »û¾ï@‚}ú&Êïßߤ¤k‰Ö¹5 P0ãv[ˆ–ç(@ fn§ð5ˆSTË~µîTO_1÷Xns‹¨¶T˜#UN"®ËEçœDÔX{Èù-?~\<•)‘­¹#3)E  ›öWZkN¯ÁLÌZZ•±ÏZzÚÏ%„§|—¹32Y(CÖÞ2SÌá‹LßPb˜„ºf6mœGp8ì¶”?(w âÓIipOG€@ÄŠj*ˆ9 Ä ÉÝvŠÜuAš9ƒ2E@ÄABÈ0wgpF<Þì¼ÙŸIœÃYôÖšGÌ9DX”HõÿLÕŽôu­Cˆ|NÏ"Dµ}ÈpŸMƒI›FDîäOòäŒ0w‹ !e ’"µ„Šä{šío?Ƹ›Yï Æv?“ÌÃAÄŒÈÄøüqUw@ÄR>ÂÉÈàˆ¾Å¨áö˜©+Ò}–*ˆˆØŒ2‰’ˆØFzd¤D”ã>'Uµ ³j+ÐS¤U÷ ‹ˆtó*’¤»;…ÍÜkÒ¢#6¢´çX4Y–žÙX˜‰AدŸ>ß>}þøéó§Eõýë«ðb¶%œIäǶ_%.± IDATMs@É©f ëºJÓ@Ú>´ñÒº»s ‚8̦cŒF}]T¨&Áœ³Ï1kÞÏc$¤R¾cß¶h5D(§gf¸MOÐÛöc¬ëBgçh ÎÌ}ßm!D¸©hã m]3sŒýöÒ»v¯Þ×}þË¿ünŒí»ï¾ë]¾ûðþýû×&h‚¬Pk‘CRoM[«C¸ß…™ee‡™‘´,GÀHn.Jà¨; %zké]…ÐÍ&Uf®D "$›«4æº%¡hâb7ª.WÃߤ/¬ŽcE`Œ!­ápóÁz[ò¬ãááõRª‘éÁÒT¤& 7óÄ—xÛˆhÚD„8=†Hצª:Æ ZJ …Pî@Ña.ˆ#’‹$Bfš*Q×pOxF‚„„ ÒÆHV‘·8‚™Î3cJ˜ªÚ—ÕæQ]µ=‡ªXG& s¶ÖXÎ]/fˆ011…GødñeYx¸ïƒ‰š kI”AXÀjž¤_ÒÌA¨A˜E…[F’“B O$€gµº*’˜©·–uÄ„eéáLìØæÈÔd±™ !p©¢qd¤¤GF$"9DéÇos"•Ðz|Rø~ßZÓÛÒ2"}– R„" ûtô$ѧ™!³XÅÖ>FfÚœ sÝÿªú¨…1sÑ€k"Rærvws5¥pwQÕˆPåei¬œ· aZTˆ6mÃÃMµÂ«JPš*–Ö&QayY…h1_>¾ß1æ¾Ïð¹vV'ñm»ßo÷û>mŒ¡}]n« %v{¬.*‚„§ÊéáafÈc¬ûP1¹//¯•3§ß²®DìnQ·3sß-¼îªuÓûüùþ¶=^Þ½ zœYÝïw$ßÖVö¥y¤¯bÎAËCD©ik­õÖÞæ|{{«áÿý»—ï¾{ߺ(8L pRDpïˆÞû«ª»#Ûð1ŠWªxXañ°LhRUw’Î43à¥wbaF_š»Í¹gJµëÓ›êSç€9Á_6-…U…[H;ƒGž×Ä̘¸v›jȇTÅŒh>¦Ú;‰°*3§3ª—‰ƒÒ3kï@ ÉS,ŠjI”FfS¥§Ù`N ‰‘aŒ²$"¯¶›&òt8X¤â?AžÄœ\]Œ[Ñf 1ÇÆ¨_öÇöøüùó0Û÷ùéí³Íè·$âÜn7%›ªGDâ1Ï_¸Úù Ô²w:wiˆ™Á¯¯¯=ÕÌòiàçá½%mÓ™acÆÚT¤)Õp4=ö‰°€#“82‚¤#è¾éänÜ”i´Kg<îciBÚé7]7в¾LÿíÃ6iü"˺®ß¿~ÿ²ÞÚÿÇÕ»µÉäX‚ç0Ò=B×ÌêÝÿÿ¿zfº*+/R„“†Ë>ÀèRO~õ ©Brw: Î šÂÖéé %#KQT»ÙØ##òÖvëXÀÅIç Š€*:FUóÜö[O}*RªÙ2S†Mè~ƒU«J:Ò>"f ØÜVt<ê¦EdP ¾ß_£ðööv¿ß)£Ÿ.¬*aÿ…’Œœ3|V™CúßW•éµ6Òš²¤rÆìe$QIô}ˆE8RRz‰[›EG?‡îûÞ pUаšc }<ÞIš©»7já€$‘Bt¢£ûŒî)ÍD{+Reõã/&,J‰Haað$ÁìAªo¯mk+{ŠpP…†­5ÐJm{µm3“®n(—¿%åîe6HÚ'‡¬lâ°·r+#B…M“›™Çùþþ^Õ<Ž£þž%‹EÑôœCO°jÅž.KˆÊXáIŽ›´í]0bÃ6z¾gÁ³á?lûè–yŒue¯÷**-› ¯ªcP¤)" n÷›]ò – uŒ±–2TD$¡*ÊÁT²" Ä2‚+ý@MlñÔB]÷<bû˦ª¨ž"J¨Ûý6]j{5üê3‹Tö±‡´]FLlèØÌ¾|ݾ}üö÷xž¤|?æïß~?Ã_>¼ªíj÷ïßÞ3ðý9,¥ÆËç»Ñ|>EæPQPÄÎãQ÷ŠÅÚû‹½fÉ#NU½•xÖ¾m,@%f×HÈ—ÛÊgÆ{à D¨®™ÅÝUõË×_n/w§D‘>#µ ÓkÎØoØömŒ"žGºՈʨ,Ø÷×ûþó÷oßþüúõëËí¾Í„¦J”ÇÙ¢¯Œ(aʪ²Ìô<Ïó|ôˆwÛ÷löq46Ô‡¶ »ZûyœÂm*˜ó!iU³*ÉL3»ÝnÇQ¥˜5 vè³(íZWd:XB P-ÐEæP»ï·¡¦L‘sΙde‹ý+ö‚4Ÿ>Œ)R9§çy@u1êSED"H²Ó*¢³e ÉŒðæûþ •ô#££2Ó¬s{:–hÙzHÿ¼ˆ”°´ÁáÌŒ^jË6NeK ²*t4vfJ‹ÀˆiÒ)v£¢øo-Äí’3\F½~.#jÛº{Z¦÷~ ¯a³_E{6ií @zN„ê‘tôúŒg’d?êO… Ÿa˜(²GÍbß2¨ Ë/ ªjÑç,¥ *ÁÖ$uÍtÛ°¬ÎWAª¢eýc€€ÉfäA¬UêÚݸ¨HŠ ÙìwØ i-΄X›“«"ϵ4\ð"Ö¾ÕŽõçëÉà§„Ï#8Ž„¨Œ¡€™Dü@H¯¯£.`¤«g£íˆ}ß¿~ýúþýû_ßÿüÛ¿½¼¼üóŸ~ªÈ}ß_î^ïrßç?åÏoßÞÜÓýíÛ·o¢PedlC÷m'{åÖúö!ì^ºs ƒ6Îð¾§•jfk*ÁÞü\Y‘³’QÉ~6‘¬BKËc‡¿~ùúz»E<‰ªbVÉyœ!2>|R5ÔLÍÓO÷ªªAZݪªÎˆ ¢Où¬VÎÇÕM3U‘©LO¯EX%U¤€)"µþ„Â3\ª Ùâ”!ª,V°ªâŒŒ1ÄڶДkçý'ìÇ¥™º:yÎó*ªØ0R¥!€(¨TU4©ÜLôF€†n"—d¬¡k˵QY‹‰WÑ–Ñ-þáp0mXK76ÛÚá•×]@FdÖ̉k­f?“ýkŸª¦¢2#¨ ì~3¯¦XhÐÚ‡$8¡”DedÄ9q%˜ÙÚ­DË žSO] ¢Tš’ÁÌ@‡¤4š…ŠL' B)” 5B$ aŠÈt/ÑBÁD2»¾@%DÌ~…J`úôˆBv·ÛÔm&=å/è*›Ñ Bªß{E&s¶DƒDäôãX_äg¯Çy:ÉÞÙWè^ÒÌŒ Òg–ã9­geN0Çèûµ˜Iö ÒUs: ¸*Îó}lZP±ªÙâGßýÓÆæþíœóùõ­Ø4cªÈ§×çöxÿþ­Â_nûCY`2Xyã}h¥Y5gþù×÷———;ì¡×ÿQTlX$”¢B%¿ƒH7ÛQÚ¯\j².X>1X*}竲‚hÎ 0çq>”Z xÎó·þöŸÿùÛ¶Ý>¾¾üíë—O/û}S"‰2•*e߯ï|ûÏ¿ÿ½tß?|y¼=PõõËç—ÛN²"T‘Q.¡b„Ÿ©Pš)Œ„Iiwói”ßÿúã?ÿÏÿ¹ýÏÿ¹­LÙ6Ci! E“Û6,ÂKÂl´°?mÏä"%"’R‰rGÖUÐ&ê"êÝ·²÷3³…d á~Vy†Íð‹Ð5îÇq*•¦Š¨P o»‰À¨*ô9ÅÊù~FæmÛÆ6ÌTUÎóŒé}¬ J‡– ¹þû©‡Ï¨l¦ (bH¯¨ÌÌVî´7ÂÑ_e—äþ§ž¡EUyM…E÷¡°Ü­ ÆèŠv‚Ebž§a€ŒyVVoïU' 4ˉ«1433 Ïg)é7ÐBå}ÛÏó‘ç”Ö¸S……Ì*.QI¦·AC"Q•Ȭ˺ hÔpIRÚá@2]Y!ìÕSÙ EÏÏ*¬ RÕB‡=¡:ª+í@–n¦¦Y…mHVìÝw¨0•Ì""«L!¶ƒëR×uñ«JY™U„GLŸ* Úw!03÷³*n·­s>L.5„ÝþœgOë¼îð¶T„‹blJtǬ¨ªÖ1Ï“ƒdÏ×UwÅwYÕÈóêã§×Љ}Xe 0Ãßßß>~øì JÝoÛœçqœ%€îÿøí7 ^ï7!«‰ˆ^]#¨"X‘"f¥:jñÍéíccä÷dÇËÜöaà©éîî¨Á«¿hËŠ*‡™*A$!ooïooßEʬ>~Ð/Ÿ÷û†!!`Im*³ûf¯¯/øíŸ¿,%ùáåååv"î§Ê öC‚̘„JÉ>l¨ eÚ[SIˆüí_¾¾¼îŸ>}˜sŠqßGUǼ&ˆ$*Ñ–![¬êÕèvìDŸ‘Ij¢ØTݽ ¨DIu£®ÖçéÌ B¤*¥—,ŠZf¡Bu%Ô¾/u ¨¦…‚(„¦cÎ3"mXe.=d7P"¸Gö&ÛJP§ÏmS•H,¦ì§†‚Ow!=É'ÑS@mX½*Û?c2H†„ˆd•éhâ¬gMŒ+²öÂbó‰”Õ•'ÞÌ(³YaixZóRlü ;/Äã‘a£žÔ€(‡©È>L#óTM Š4ÀP’eF³&<‹Ñ’B;+z¶ê‹¡jÑ+¥öeÃHÌéU16‘vAÕž×èM˜IEŠiW™þ,ÄSBS•qÁùþˆ°HFBaQCG÷¨²}âY¸v³‡J­Šªh¢³/Ýó2M+—¥?¦F¤Hòžò’Úö9¤j(´R(Ÿ½pÊ~ó?}@<¿ë^öÜǰûM…ûØŽã=Ë7¹í÷­MÄý¿û}{<äþá%"#<3ÞÞ¿ÿý·øúùã‡W3e1jfåÚÉšÕŸ§Ÿï7\;ÿþàû³ã3C52¼"«¶}@ ᨒ†34ÑÛ6¶1¦gÔ1çïþqïÛ&÷¿þrýPƒ?!$xžGd¸ÝÕöÏo?ÿø_>}ºßnû…æô%ƒ TF¤o;?|¸¬ùý¦@Þßß©*¦úáþúùë§ÌÄ£€ÌJ E%¡…È‚¨‘¾ðÜŧ/ º¿QU[+ÈÏ@­?[fTÁ†éá2T)¥TÊÂ_¥E“N5凥 yj[f¡,Ì*S‹å#l*¹•¦Bm´Nˆ’ê&^ˆ\ôVaÅÕû=[œU™•ì\¨Pý1àw‰ÉmPdßïf[ód™µ üp÷ûýÞUìÙ qI/–#'³xYÇI,ÙO6ý~¨ªêc3‹6œfæyžÛ¶-…§üØ1±L?"ªî>ÝLQî¶m"Ü÷Û!Bàû_ß[×S¨mXe~úøzpüã·:ñ•ð™åÇy>ŽCU†ê“Ÿ¤ÈÓ‹Ú)-æ¹ÝnÛ¸Ï㼺Å2ÔQ˜µ¾†U(fbz>ϧŠh±*µm²ßîDt«á™˜¨€µÉÎméʶ}ÛÆXÚ béJ*ûÑ¡{dx&{,gKz"[G¿Âr"—˜?çyÎÌL‰Ì˜ÓÅ$ žœš#W#Ñïrø÷¿I  jÊÈÅ‘Í'Ù¯øüּطm@"³[zŠjÊ|{|CaìÛýu÷é3P€§g<å”]§à-Œåêáó\ý1Á=;|’=b0µµþ£P(ŠŽBôEu5¦]þ"ÅÖo€h m@ ¡»i:zæî͘j‚ U(Zsž"»H붘™î 5XÇùøI”P…ì®gY÷W³RUE!•é3Pi*¨þ1ÍL¶ž‹ ­ŒÎ–SSá…É&^øfB´—#(D¥æ,,ay¹#¢[¿Xû–kê9ÓWCîÝ˜V‘­ÀÊV€’¨äSgûÔa‰È¶mÛF•A²!Ó­aÓ+USVBz,*UY¨š\Ûr…—ä2<ÝUBUÅŒ*Ñ|p)„Àæµ›>yŽ¢ëXªb"=æZn .fãq»Ýz~¤ð8Þ·¡ÿb/óý¯ouú¬Ðaböx@9q»Ê•ˆˆVÛK„%QªZöÛí~ýÀËbÔÆÇOŸ§Ÿç;¡(A¡ égÔŒš‘sâÛ_ó}fø§O/ûõÓ°ªy Ûf¢Ì”ŠêÅ@dU”3£2ÆØUô”q&d€SÕªHå°m çœkùñÃGà#€ý¦c¨{dÆ0©ÔÊ\ªY(•Ð|ž™™ác R Õ¬ðS0Ìz…Z„7=ÑÓSN÷¥(TC¡­*-ôÄå2g;oªÜÝ«´"£[AÄ gd*Ûch¶ë5:‘}…»Ä´Œ™D‰ê(,à ”È.UÕê‹‚l¯G‹Ä!a&z•uAÚ?+}~‚NÚÝꙹ8;(E•k)7/Å×*yˆç›N¦¨–õZKÈb2Ë{¸P#y›ŠªN?3ƒ’B›³Ù¼‘`Dfey¬FE©+«<"ÓEDFóˆòBõó,•\‚ÙìVX[ƒÚ×YÕ¤JE ±`¸H3«ÄûÛÙ\ŠY8OW’ 4U(T’Ù©-%QeDƒvÀu9:–W$Y(H•´‡!"#E¥š„Lf‰€ÒBþ´²ágœÛtÈÒ4”ŠÇ äýþ1{4'»'e%£¯8K[ß l6?Û=IPÆÖΪ̬,TäCIîþT™7ì€åT[ JÍÈ öx|¸ß^Eµ3­ŠÛ}ìûض:>¿ý÷ß¿#hcË´ãÀf1†R‹ôD»ö}üøJΚN2#¢¨ë[ì^=ö7M.¢Ãt)„DÄËë>çRšˆT§5QÚ7'$÷}ï¶Õ23³ ÅÙ<;¿!úž]âeµ’c{}yõð···þáÖµvÏ3Îé•©f=¢©Ú€T®Íf¦[D’Ü·[Öø¹\ýv^\Íq­üU¨f:LE ý{!‰ä%ûÀ½Î4¡îó¹-kÝyÏÛºo£Ö–ðëüY·}fêª.Ùw®ásÎÞxôÔ:åOœñ³]Ã:][‰KZuupm^è…žTDº¼´kfEÇ*&¢"-Pgf¡8¶­*[ÞâÀž`òuƒ=/]¦Çãñ¿ÿ÷ÿ®ªmÜǶmïïsúãvÛö}˜êËËÝ=þøý¯*'·ðyGÞ¶ˆÀR½j-DO23Âo÷×cFËSþúë¯íÌ‚lÛvúÔ&nÇãûq¼?f¸ïC·±‰@©­4JÙ]Æûûûycl‹ÌÅ“¸èÿ7²ªõb}‹T1³u‰´Ì½Ëàõ½,‡ÝREµ…~I4{°ªÊ$EMÍP*’‰U Ï  ÐðP&DWåÏÙó=DN½.ï YÌÌë|5íö""Îó$Kµži]Ìl] SnØ~€~Nòú…íB°"šß¤h‘%¢c4"Ôn|køFÕZÂ."í~"kÛ¶1¶ó\ 6™‰•æ´ÞXg*Ô2`–ΙÈÌmM[ðÖµ™Êdþ×–93«›eYþg©’î&zß•ˆô¶Aľíÿþßÿ½Pÿë?þc¿ÝÿÛ¿ýøœsšÉv¿íÃ6÷Œøûœ!-OB³>݇iDEB.êiß·c¾»ûÃÝ Çv{yj÷ ÀqßGV÷ ­@m¨Ð«‰ˆŠ`fÇñýû·ó<^îûß~ùõó§O"ž‘á!‚Õú–„Š5дˆ ;0³<= Û¶ocóQ˱VË`U1}nÛý~¿? ¼^PaU¼½}swRE¬“ÌÌFïçy~ÿþýñ8>~üHâ<ψlÞàœÞ»“R"tç*¢2gZ‰¬œ|)ŸñªèÊÕ\ÍÚjž‹…hoÓ=‘­Ä<ÏÈ<ãíííõõuÛ÷DÈ…2eâ)[¿ô~]˜´ø~Ū唬ÄyNU#‘M}‚HT0»§èÇRU{¹Qžr)È#²ûM€û¾?q.‘Iü_MVŸá¼±ˆI¶mµö"¹ôL”^ÖÔÁC¸Ä ˜3Í´A3ï³u{-¼ IDATC…‚vÆ=_@„, ͸ÕÍFU´ó±‘d G*•——sªzm?ïd»+K¤ÁøÆ˜ñ<-fO¸hZ “,~¾r›käWÈÉ:ù”û¡ªVÛ¸\h3@ÏÜ:=rµ{K¯Ó6)Ybý>92"QâÒB¥Bfã\Ö'D?Y‹¸ìBòðî[MGœ™ µ KãѱÐù_ qD 5\šäŸ;î¾ÿÕÕJÀ"ÂKýúË÷ïßÿã·ÿøôñsþú7FÕéóñHƒPï÷ýË—Ooßÿüç_JÚT$*<‹Yž9Ýž”ëåUëðÓþ§¦OU­”ªž¾äJ}ª¢Ðwý©ÛÝEªÑÌ•›ŠÚÌúú4 Þ¿™ÄåúI©”™½8†}Œ,À#³‰î—Ѿè,vØÅº–Éd¯ö«ÄÞù •µ›(ܫ޿j—‹²€Z©Ó f)`I·Q©Â¶-D¬Ûç¾ÿ¯!²¯^?S—ú¯j¨’œ”¸ê.É;ðãnìÉ"£A|!a­Á‹¸ïûÿ÷ÿü¿Û¶3u÷¡ÖA=ª äfããÇïïÇãp!æ9ÍdåaQ<ÎIˆ™RÒÆÒâ¨ÚÊMù)ý¢—P˜š^sNÞofVévÍ;•È„{ιŽÊŸ>üòåóÐq¾?|úP*ïûØÕîfC3ˆJxT«d$EfTt®R»Ãí0†Þn7³QUsN½¨™ =q³AÊœ~³²î¯/û~ë ‰Uefû~‹ˆã8Ý}ŒZÃù5 fŠ@ä ¸RÛæœ5;¨ÓT„íÂP1Û›vž>F—­õ®¸VuÎW—!!!Ê~ôŸgøÿ÷Ÿç¹ßnnCqÕ”gè—xœ²ähAÙ0Ãr,×Q%«q[#Y-Àh.–gG.ÁËõZ eßoݵ—ÖôY¶ZO<'ßU°Ü;ž¡1ºÊ_ÛAôú»’¹ D˸¯|¸ªä–ó<½ò-sy»ƒa´ª}ß-Èí9 Af§6´M§û ÊsníIvÜn·Õ>ä”K½Ùt~3úÑ!]U™õ„&›@`Óvωi¥2§/ÿ‚öPU>cÍ De bÂ+r©9ç'SŸµ"Ò™¥}ƹ{D©* g®JÒ>t5ì²»°·Ëås}õh+wŸsΈT•Ÿ¿b¨ð§ú0Þ¶M)]ƒÿ¯îr]dS˲̩ Î"ýõ×Dˆ'†èó<§Ç6nûmûòùããýx<þñöý»œ„  ‘•¨cž­™:æÔa>çâıò$dŒ÷«Ãº@⥔sæ†B‰V†ªšˆšnBhlÖƒ3@Û´[À~ò÷}ˆÈôI”TE23HY6lß÷ïf-$T%Usv{‘BÎ^áIÈE晨Œþ¥è&ÕU"²mfc/áøõ ö]ÅB›/ -Õɪܶ]µõQ6°H¾J°_ËT£òœ“«û*’,(©ûÞ£MD´µEµS\£Õ:*k[‡ˆ -÷ØÆ‘eˆ‚²P×þ¬ŠKYºÖ/üe®véV<ÓD³r'²Æ¶eeGÈ?[æþ·Ý?Œ«Lf ýî÷=+(©ºõ-ZÅ9R?}¼ýí—Oó|áj»ª©¼‰Y¢(Rxj ¦ ,÷ɨÓgÚ »HÝ·=ªÎœ’s¢¶ ¿éýûqí8ýðxøüôåÓmSøy¨ÑÓÇ0UK”k‘ŒÈé>§·¸G…ã<8¶6›÷$ˆ%ZˆBÙA}óóç3Þ_^vÑ {fvndDBFÑ 56sNŸÇ9qÎ}ßãÛº“ÛÇÆ‹ kô±òv¿©ª†çœ'¦G;c>ö¥«,J icïfgj¶Úu>QYf†Š¸è5f´€XQÈlëEC8بçŸß‡*5É&b5)J®vÂʨ²b$€"R!÷mÔ°VK’³ ¸í›w>î….÷Y”…¬+¹ñG“%¬ Ïª¢PLb‚U^Y€Fâè+žÙÇ€Ùu.y V¨Az™UÏ™ªUðºNŽ1Z¿¸Åªhö­/V+ªÒŒû.€fÆœA ÷K¥Rlm 7n£nŠ*”ÇL÷È„¢•M’L!L%2z†$˜QQaf‚v]HhýÛ¦Ò¬c zíˆR&‚hYB%¢ª´ŠÂ*aø:ë/®2Û±BÚ("ÄXRgjÀÊõ¾Ë$¤W“]”1æœ>çû`)>³ûF¡²¾×ô‡»geæ¶m½Þ骃5ý±Î°d©nºõ-'…Û¦Ûf¶o™çŒQ†è#Ó…˜s~ù¤oßêŸIž"&9¡»¾Þ^ý1CpñÔa%ŒHÙošRIã€CÆ&c0R¶}è3ŽñÂ"<3sÎé®Ï˜^DfÞzïI`!}$€———?îÛ@yžˆ—VzÁ„5K‡Tr-4ÉÌb/,©8[ë`"ÑÛ"ú=Ed•gL?æ÷?{{ÑÁ¦Å‹/#›{ôµzRÔU-ÉGz4ÅØ&çШJ"EzŽq³®S½%ôå¶giÿöú:-"æl³bzÎEW )ªC»QçÐ^? "®¨*ÔÓ)F@÷FñÕTK¹vzÊU°Iéœî)Õ´…VTÎ|DTxô#¤—ÃF®?O뜈˜*WçõD’bÞ;¡xŒ•õ,úc»O'J¤{è&D9« j6¬WI‰]SmÏÍ*ÈD¢ˆl»O!HO>½Ok1žÈŒ™,¢LÙ­`Ï¢xmżÀàªT=£¨lw3Ý2+¢Ý»D´áq•®.7UBiÝÑji6DŠ-zh+’{^Yï@X¡?hÖR%„‚ªªâΈfôъŸ%ø‰]>«XÁ þÄvf©¶Û{Û¶ó<ã WÍu}.X=sSë)uŒqÃÈìm~ô­òÔ^½ŸkVVuÇ „—ÖYž‘™³—WÚØ6™s¾?ΪRÕUíÓç/ã•¿ÿùþÛoÇØôÃÇû¶"Õé„uù^+SUo:H}ûÐgõEiަ–~sÎòÓ3[ä b¨j¯Vºß7%)%•†K£'!JØæx€ç9=ÎyN6")„HD4Üêׯn·œgQùHDPuduš‰N?²}¯Ò_ë®ë2ÙÅœ} ÑKM;p§/Á¦Â±Uæ<Ú$+ª ŸÙ®¼Nÿ"ÑŽ“åj`zøŒ)"D™]>•ŠJ×ËÈ’U¨2vû ¥KÎÇ™F553p…Rýtâ5J€çÚȾí.±{e6_cl‹Þ%Ÿ7Ðó¶®*#P‘¹þðjþ-§]f1w÷ïW~A?ñ¬z]¼ö}¿´ ÌÌðÂÚÒœ"ãÙ'þôPQ;„¨ …ÎvâO+Îú™‘K‘¿éR*ätí®¾h@d€«}^.’"5ãýíûCÄnû‡¬•åÒ/(¿ —UUD"QhÜ ²Àsz¸aÛv?Ïãñ8qÏ„H¹GUê¥Öú©7YRùTÏ¥Š§ÙÉúážO–Q©ª?_„Ṍ,™U ¸{̪RQÝï “u÷§ˆ¬–]ž‹bÇqô½j¨mãê‚¥ ¸”ýÏû¡'èþözYd|‚˜>UòY1#ÑbôŸzp~ûöíÏ?ÿ̘////^÷ížÄãqˆÎHùøáÃûé߇ª¾î·¨rïàV+xäi÷—¤Ç™å¢¼Øó6œ¯å{™<Ž£uùÍ8dDs6k¶ÈÓ3 Q©ª3çÉûn7T¨Uäì´?€f²í1{5/›:‰ÈôÌ0ëKª¸–µ×xc¦"õë/¿T…ÇœgD] ‘¨3Ô8áºÐ—[½]ºëm¿„ˆœ‘á‰"³×²Sõ M6¯Ë#º®Êz䞟Ü0}:á¢lÏó¬+ñš—,ø­ù¤ÕºƒˆZrs’QK˜Š"¯•Yõ²°2äú-H¯"­S®“€x¤ÇšJˆ5z¬ðìÒ %ø!dÃSÊŒ>a8_±lÿÑ™ ¤ˆJ¥ˆzDõ'j™.Ez¥Ó=˜N:¯f¹~ ¬ÌDUøÌ+li úÝAf¦ˆ´{ÁãЪ±mËÈ¥TdwCªz%afv¤°Ž-¢ÞŽc õ¬ð˜î=˜jO¦]™{`^6c÷lÌœžU™QQ­ÿäésñ!Yž¡ÚQ‘­ÀÈ•rQ•×î©­™~1°²˜ôâƒBa AË×ñCµf'…åYÝ0ÓgsQ$ Ðþ«Wräóf*:çŠlí!UDëbo®îx1ªs^pÁ(€ç¨ËBœSU‡­Àô È‹e^÷¨/3)²„a¦‡ŸÿüÇ~þüååÃ+TÎÇYL¼½™ç¡6H¾?Ž…W˜&N÷3Ó3ýýýû¾ïfRE1µB¬Àðˆdôf¿ö䈈ÇãÐ1ˆjNMD¶——ï§+µ#Þ¾=HlC•©ÛVé`³ƒVP˜‘u.g:)™¸ta­ü!Bë§§Ÿ¥±k8²H—f1YªÚq„†gU§e3XºoX³ý"à""zÔ$ AÕ*–p&žÄs¯€#sI@žê¤ëØ_º ~ÈŸ¥ä'Cÿ*žÎ HO5=;y²å6}ç¡:™§ÎÈÖJ£×?ÿ|®Ô+b­J(@¬5-UÅŒª:EDD*àÙ—ýxÛ—.£oĪJd¹˜Yg·´d(Šd„ˆöÖùªNUõóœ!4UU‚商èàžÝùŒ?øq)Ÿ$=ŠT"P ÕV¨ò¤WE¹¨H}$¨m‹•(s–{-ß XGAÀ(°zÏ›H’s6`˜Õñ¢M» ˜¾$µEYqLT%µ÷‚BŸ «•ƒì ´I-V6HU2³XËɘ ºW¡š ï"€êW™§O’fÛXI#Æh[ ÉȘ瓨•¶²ùËŽ…l¬™(ö¯¤{§V?Ž£Ÿâ"T²ËýÏãd=»Ý¬Ê“Þw`´Þ 3;Øki`(½²ÓªêþúòßÿÇ¿ÿËß¾fD"òv9g{såÛÛ»Ílº»/²ÒgÔRID}ÿþÞûrÐ蟊´VNäœë­÷ìÁ6×^Âýöv¶y­Ý'«dØØÛ¶mÛ_î>geâœ+G-ÙœT AéD×–ž·4hïpèÉjÝÁ«å+IÕ Ò@B,vboå­‚gf`Û,#?mÑöAòôÅŽuéhµ’ó2}Wç¦ÎèöÊT«¼_†ø‰¼¶ûõÔ\\“ZÇ`­?ñèfj¡Ë…ˆ¤ÍºÔ Á ØÝmŠ+k¤ÀìõÜÏ% ê#­ªÔ§¼‹è½-Bðô öÆ:J/VmïsõÂþ;VU¨¬†½/x©@1UÕÆ4Õ^º&*%CB. ¼|"“%«{jØðzÍk®³ý äx*’X¬ê)Öy­±Ô¼(`E3K« ÏLVJ6Î+ª|}ËýŸ–Q™ºš\Hfžç,”³(”Z‘ÄÏbª1êG2Z_ `íW¿?¬ápö:ÒÎS{~:PÚóxYmÀªèÑE’jkßõ  C`ª* ÆV0i»Ø³žÎó„¶h íë(yf×]æ\Ô lª¢¬ôg1ZGŽEÒãy’ÉO*¿ç'[ …¹`¼Î¯éìõötöÙæÎ‹.Xc©j»û_H -K:#,z8E¢‘ç9§¯*S©äó<¦P›ðUU™î5çì9Æ|üðzF|{{÷é T4ó\¦eM `¿ßÚÊ¡ÔìD1­v “ò¢»õ¼Æ"4Ú(YX–iÛ×zžzVªÒD…êå€lÃÄ$:K’h¯XE2²$1g|œ#ا&®¶9<¢&ÑЮT±Ýx­Ÿ†{U©Ù6všÎãœ>I — ”WÇC¢;ççxSýq–§GV!’ȬXF0‚ôXXò‚8–©DAf³¬\/ £.©G¬lÈ. —²²–——e©[²ZšŒ…%ƒ% kGç^®é+ õI]uZØIÑÌò3*sŒ-2ªdŒ›,£LG.h¯MýJïÐî ¨«Za­fì¡Ð=ºfÎh‹JwKÂ";¦A€aR9ÐÆŸª: =Ê-½+Ÿ._,y»Wë=æÒÛNUm9øúYëK‰ÑŽ<=Ov¥ˆò+û« }U­¿`7[QY‹N]-‘6«Búà¬T4°73Ù¡©]†Ñ9·³€¬Ìè­Ûm3Š\S[KÄžmxÔOœr] ×BEûGšÉ@E† Ò“îKà•Žë–Veû¬\7 `f#¹® •Ȫ`eû=Ü=3È ´òGQ2P¢CdèvG¯ï»͇V‰˜ÙœîÙ;OæŒ*D+)½6… [ïA -køx³ßþqv'¶A¡šÔyúùGøIn_~ÑŸÞŠš¥QD’Ó÷sÉáJ±€[*ÉȬ@%Y–fB°6îî"è5'1#¢Qdñ¬ö–fâ<€ÇÌÌÈgc‡ýŒ‘d–ºK+¼Ç¶SØÚÄV?V=e8s$ŽF;É*ùÿË:·õFŽ[¯Dd’R•Û5ã™÷¼ùvwÛm«$fFà°/Ii¦uãCÙ"™ÌD ?¶@–Sôñ¨µ£MÒyéܸʜ@‰d¸S lîʯ‘Á%F~zí@XÚÊmjΘŒ^²F±n#å&Hèµ:ô +ƒôH<5‘EÐgâ5\Ìá¶‚8HÀÉhv&°m”e $BµÞ},,Ð1jm£”í\/³X@Òt Ö‘kð/±ˆÊõUz\Þ¡LO‘,ùVUY9+b•°`2™1ƒ'¼kCkñdËÕg5L ’)"¬ŒAª„jžÙ=.Ç@æY­vF¹;¼´Ú õy‰¤˜‰,§Ê 2Û¥šgôú²,RTÎau7fÈ•œ¯Ø÷Ì|TËB UÄd—ðª"©á”Z8Fç5:Hˆ´V'j`É—rM\-¨XZ"#.æR ‰Dב‘•#bÌŠ LѺ?êù”êN”€Qº#ÛºOµÔÖ÷m/UÞ"â©&÷—ÞZ¿ÝöÇãˆyüëÏ?ùã×àZWœ÷½ÿòí…ðˆiãqú°½íJ…´Çëô¨i2F-ˆ`ŽSÈÛ¶Y®7œçic´»6‘oß^ùþý¶iÄœçÙ)f)‚ÌöÖÐÏÓ¡î†GM ((¿ÒS |&ù3µ|!çül¨¯õ“Dµ,3ËÔ> ”uÉ®\föq<þz{»Ýn?~ü¸ªªuâ7®Ç ›³¦23k}_„›9ÝŒu]Z-±\Ò —e=½eáŠÈJÕ¯¾ÉSª¬ó)³vÛ‚•¤¹{µªžµ’Õø`‚¹è {ÏŠæëO^c£ ‹‡S?% Ûînák„—go%/N¬1 ^g®ùš‚®Û½žfwOh­õ´V»­lñátYÈ‹ùUÅQ -ë;0ሠ¸ÍXo­–ÛD&3í‚d´Ö.™·+DM“^&‘%é`-ø[X–Cåka“O‹’¦^t i1ïm©Ÿ >R$…Îç)»ÚÐõ×o^e»Ë2…xP¥8 ×#]^I㵩\ò€ Se&„Œê´`­fý‚JÀV«¶9g­T,?UÝ šd­lß«ØäZé' wf$Uj9/€1GӪͿh‘¥,"+òë̺qÓTa”Ö›Üö¢6¸M }äÆ®ÊŒ k­©|bWŽá¢zý6=ǘǜ‘TPöý–TmmÛ8ðôâ:Ö±à~¿oÛÏ>š¨Œs˜ßf™‰}Ûo½÷×ÛÖÛññΘ°ÄYëÎ0)JöHF!í2Ár¨s­ê¬gØBJ pÙ¥±ôf¥ü¬Š‰ªö‰“瘞“wa>G£ÀãÙä«ï _ɽ®^`'3ó˜Ã̺jëmÎéñÕºÀuXûÑêƒ”Š ²b7¸ˆ·KÊ!Ñ!HÏHƬ ;ÔØD™•Q¡QZ«ˆKzÃUâáß*w-5ño*”>2m–S¹5Um¢I33÷Rl3—ô6çÚGM‘yL]L¹UŸd3Ö`@F¸3]Uˆ$YP³ÕNÑÚ( ˆÔHvíþö ¨(YëëåP-“Ôô$©dëM(&&V$]gfïÉç#/ÃjU¨•©”jéVúZ´D*.`ÞeÆÈÌÚ ~•{«®Ï”«4[Ä®2^Õ½]’Çuvf–’R !2K%‡"² W –‘á’¡„ µv ×x­¢ü'$ÜFˆApÙS œ­!\Ö1#õËVƤ&UJBDx™#šºª)Tó2VgDS[ –­^¤9¯©~A'{¤O‹æµ™¹¶ÃR«cÎóqÜﯿ|ÿ~Û÷çwÀæ$7OxfÛ6Ñ>Æü͹[B‘ÕÎc+ÌÙ³þðÛýöÏ?ß^"Jñ”ßÿúKÜÿöË|ÿÛ/ªJÏs~ÌãP¤'ZjkM’ŒÃö[¯r=–ë *‹K%Å ÿòõyÌ© ö9*_g]V“´1ÌìåþmÛöúvæ\L*¹ÜuJ¦®P’L€KrZ¶¥¥7žµŒ£Dº¢Rfù­ÀdmÜYý¸ç…¦I$Ãýôçá­¤påaY6“õÝ¡D¦â$¶K2–•çVÇð–Ë[…éa@Š–¾X A2¼uÖ1à^¹Ó,æ4Ãl{o­Ù58Æh­Ýú&ϤY„,S+KÏ1[[vbi# y£µÞ´gA褤ÙÔÖ½Û–p*¾ÿíÇÛÛO‹üø8Û¾5íæk$;‰âdÅ3ÃJæ~ÛðþS…­oïïçtù¯ÿýë÷WjѦ®Q¾¬Ž¯5O *t/&? ˆˆ}Ûz rf)ˆ0É«d±é5Z3©‰ðÄb£‰¬V+DÔ-írZJ\ÕEQö* ‰êI–¹Ýï·Ûíßÿhª­µp×¶¶³škŽH@µ‡ûôYH†Ê–“åcŽ+L¤G¸EéS•RU×\PÌb<£ÛŠA>m”+Ç.9ÇCW»D·mcŒa@ªèõ  ’%É×™ª­÷k?³=oÜ\Â?]ÎÆŠƒÈštÍçï]Ä çXݘ²/°€pA‹(IuNËÈH·HUí{™×Zke¨®Ñg­Öú'sªòÿ1FfŽÕ]I³®¨k2&ÖÞ¶ÞJ¤«ùL_‚Ô2de†Å"_¤³$óˆˆexA’tÉ.t«Ñ(-²žLRö}»VcyfÑ\õ 4F¨[t™UꉸH?Ï!ÂmÛ œk“³VFvÍBûcQL±R®Ï#§nöÞÛswifŠt@ÌÌ#E„‘VäÅ„@¦çœeµ+,/PöMHÉŒò»W_JW©æÏj7Ãk]&µ-®÷Òòšaæ*PiñûïÿÌÌß~û-"}:PFþLdoˆV·¥Ú¬/-ZÙ(êÓªÖsédÃjAÐ<-aA$µï­ißöûñxŒ1ÇǹßîÇxË•ÂÔ~™â€·÷·ýë÷°YéÉ~{½á—íå…Û=äaø™I¤D’¢­Ö«ˆ-Ògª#ÑÄžÌÇ,çJw2EÙ;’¾XÝaÃ2;€„Ä\æ‡ ¿0e5ùå ¹o½æ.$µ¨;ç(<…6ˆx³Q;ÒþþÏ?ãÿýöŸÿ™Âc¸çðÞ;‚戀'ï÷»ˆžçácRX†²,+ÂlIæ%G¤1Ëò‚ç‘UËâê—Tƒ5×ÃTf3…d‡ „**½S7é"µ/ží©‘”i™O*ñÕ¤§Hc“Xsƒáe´Õj¥Œ¥¯5}¬Q¡Rô9Ï1͈ß•„ˆ¥(MŠ„ÇŒá‘mí M¯¬æª¡™_¶%zx!“@Ø4mª¢ ÂKø{²á+®Âf†’øE¤e±\€–û¬(Ï-¤L%RËŽ?Í.K*ð™]‰Þïž2Ï𰕈A{Û¨›G-GIŠ$a±ÀXÈQsïÚŠk D†;t¹4ĪP·z³¦a®³R6—§òù— #<R:¯ (cU…*SE dJ ªL­­B£ –¯gE,rrÕ³”n¬)ÒZ¸›_bÜêlÜ"¥¤ƒÕFmºÝCAPdÚ Gë·ÌL(¥¥X!%Pi!­&=m.Qleù.Ü3¼ü-tGEðŠŒ6“Ëa^L-m*ÊiÇÛƒ¤:æðã8+¥ÈˆvA~[çõõ~»Ý¦eë=AKùýçù×_̹í:燈fB¨d»÷–ášbÏÇô*Stë Í-ý]D„±5Ý÷—Å 7 3ºS1Øú³yAð"›Ê¾¿´¦nÕPC%:±Aáê[G̵w@(ç9íç²µö~úÛÛãåÕn·Û˜Vc}ÓMT³¸¦û6,3fµíõ /cz•]—8Z¯,‚.tÝv™)µç3/LDT½S:Žl]PúÍHCž3S¢„•LQjº ·ˆ2…JIAeJÊé1§ÕMY) V£Ô=W U)Såý»º\ÈR¦<ÃfÚ¨ƒ]DD·ØîûU£Õ†N ¬ü‘½u"!.™¢m-3Ò,Él½ktÂÎa™&”Èè½KVD%f¨²–kÕÉ?çã´i­5mME ŽÔº¸âžVû‚HV×?ÀBŠÕXu&RD×ÕX2¦Y¯&—Œìn³¬J¬ß\zÈŒâô?•Éô‹˜¾ü¶„"-²–Ÿ!¢L˜G¤Ù¬ŒÝ3ýv#uS•iæÓë½}®ðXum&B$Ëœc1’Ë\Ni­¡«H‘H%-Ü\™ª¨•OÚj–õà!R‚X4G’̳”P¥˜dJY:Ìf…,îPµm ,æXAp#`³¼½]„äFíDg%Ô„´N•\ü¢œ 盟ө Œ)âÈuÖ>;“<’„ô¾“œÃÊ¡vžgæò{Ë¢M¯\ðË/¿˜ÙûÏÇ㜙xÿùqXšy9×:+ÒU:í ·âjiÓ¦i™)º•aá”l*dn½}ýek»óx<Ž9Gݵn¡m«”²„§Õ£¸ï¯÷ûTÕó<í¢ˆšPÏg©\˜=Þ¶ý~»Í9Þßßë ß÷}¿ûûoaÿ”…ÓS]„B4›Ó#šj-8ª{–ÐRÝ/Š\=`ƒd+”å5 §¢]Û½Éúî/¿I ÎH3;çÓ›–`Ó 0™ÚÔsÌëZ°2©yC13›àj†XÆÒׄ’H›Vþø§²†K?*‰àºDkç]D„»@uã×Nó¥§|îtººuÇg|õÖoîsΪ(+½*iù‹%ÿ4‹Ho½lBN³ãq̹`a½uÝúgѪZHŒ²ò‹tEzYÉÍÌ|¬ÂSìØ¦Ù´Uuð³ñ_ß]ï]Ö2qªê¾íÅá;g ƒù 3kG´G„¹/×øu‘ ,eýò¸–$›Ã¼Ÿã)0Ué]„²ç_ä[^WsÏký2ÉÌc»ßD[Ñì”:ܘ¡ÁjÔ^]nŸÓVw(³àSô|¦Ÿ w3_=œu¾©¹.2µÑl´®Û¶­i'9g<¿ÿãï"òß•ùVkÍD$á>çsæBD^FhÊ"©}aŒ ¾l$¬ÎDkgѺËÀý8Ž—ïßôìfæ–ÏȰJÂ8#ÇÏçYœÓC¥A1™®mZ£0æ8«:ˆÈ¦™˜å…¹Fvå¶÷0›s sÛß^^_7mð°1ç}ß"ažóã="Dúýå^^ Píïã‘~˜›™m} wkÙYæù‰È¾ûí"2csŒqæûGk£÷Žp¡wm·{¿±Í9§ùññáñƒ Òâ"ZU\¨k 1ãx<¡}m¯Kq®\7’hB [k iN‘ÖF­®±RÐËecNiÚûæîc±Ü€ÁÈ®mß÷"”»÷v»‰ÈûûûÏŸ?IsD¤jÏRå¯63³5Y£^$T¡¢¤‚TqA¸Q%Åå–¸„亓.éiæ¸nÓzž+û+{Fõª:®h©"µ]ÊžÉ QJmœ·õ­ùÅVï½g~Üö—üâḔå\7øÕѦ½7 ÝÍ}^ფÖÀ¦ÉLhÅš¦2A䬫Ó[{ÌcÔ”VDf„ûô‚ ]‹ÔÌÇœ6ÆPJï}.Ê^<;¸[DÎ9k‡¨{æ¹Öh{Ì…¤pø¨K`fñegjÄ,1¹is÷ïß¿W@ç1^^^ZkçyǘÇ9Æ 5%ÝLTTáQHI‚ˆÏhr- …ʼ6ÅÕ%Z‹$“•‰pÛ4"~üǶ‡ç˜‹±f.ª/ç9þçþÕd!yÖÖ]1j<Pe$å\ ÇÖš¨ âiK¡.ø}kM¤‘rœ${ïmdöÖh¤¹ 2晘™S¤5ÿøÇï?ßá…òJe‚‘ÛÖÎó,“DDk”Ì)×ÚƒåEª¾y€©"Òœ™féžî‰ÌÇ9 xi[£0ñúòío?~ýùøøý?ÂÑÚæ‰£&Œt÷y~òggf= ÐL¥ˆ¶È•É×ó6ÜÇÛÏÒ/½ZHó˜vÔÝ%^y %ƒ–! ªzy?ÇÐ?m¥«^¿~æÕÿ*õ¤0&æî«çJ$D@•¦ÒZ¯eŠ™…AZD!\Û/ /}DUµ|gn""lá„`©Sû /g¿HC­TW6Õo·Û·oß þññû¾×I[×@UY¢Žª“ ¢Š*33² ^µâ±EŸcSlÛ¦Û~¿¿ø5õý¼2"2-ê®p {ç³Ì|–WÏÿ«úO—eé¿ñüG_sBè½×ÞfmBHuâår”¾c—É(/²ÍÊ®%€å­â5™ëÍT°Žšôá³Ìú Ç+>‡…iû|«z­ÃùRo®ÌNÛbÎeR¤¡D°iWÒÜ·Öý"ðe¦ˆ–“÷êjSM Jqw*¥ÝêÓ­{¯ÔEk‹j[¤ªÛ¶½¼¼ÇQ'¥»»J¨nZ‰\ö [ÞÑ^« ”˜Ww»@"®Ú.c°<¯0kP@–Húöö¶·þýõÛý~ŸÓjܶon¡ª¡ÇQ‹˜`îUb×1FH¥ÉQÆó–À—Ÿ¾éý¾oÛ–‰1æãqÑZ«Èð< ¶m«Ózƒò33ÿ?ÆÀu¥¸3O)IEND®B`‚nip2-8.7.0/share/nip2/data/examples/framing/framing_distorted_frame.png0000644000175000017500000021234613224651032023035 00000000000000‰PNG  IHDRën8\™ IDATxœì½Ù’dIr%¦ªfv÷{}È̪Ð 0"Ùáß8À'ò#ùÀ?à;_($E(2ä‚A£zUݵä›/w±EUù`‘YÝCÊèt7üdHˆ{¸G¸§›ÝsUÕ pÅW\qÅW\qÅW\qÅW\qÅW\qÅW\qÅW\qÅW\qÅW\qÅ?øý®¸âŠ?HX¢¢peYEQÖ øñÃ4ýL/z%¬+®¸â?°DU]ÕuÝÔuß6u]×uÝÔU]•uY¬VÝv»êÚj=´em¾ýá»ÿáüŸ¾ùö^•_þˆêï’¼ìïðo]qňpDu]u}×÷ýеM]¯VÃjè×C¿êû¦mª²¬ÊrÝweYrb¶S ~™ÇñôøxJSjíñþ0BX¿[\ ëŠ+þø±ªªÕjØnVÛõªo»ýn»^¯vÛõzú¡¯›¦ú¶®Š²è»®,Ü<ŽçãñññáÝ»÷÷wïî~øv:ïß¿||H)ˆpŒ>x?OS×u_ýÙ«ªëH€?]] ëŠ+þh€ ªÊ››íí~»Ûlú®Û¬×›Ýî«/߬×CUUeQÔuÕÖuU”…3ðÐÇûû‡Ç‡ÓùÄóéÝÃÛLJLJ‡û»w?þðýx>sâÅ/~^DTD81sba"Pk *Y²*CTQýl\ ëŠ+þ°`À9ûêöæõ«ý›WÛýn½¿Ù¾y}ûæõÍ›/o›¦.lál‰`UÐW·+ÝùxŒ1 ‹p:_ÿí×?ÿÛ¿Ïçï¿ûîÇçóÉÇÈœIUSŒ`ɨˆªª"ˆ©‚*3sVÖÙJS7€x§A~·’ÕoáJXW\ñ D$D¤Ë?ƒäò÷Âí÷»ÛÛý7ûýv·Ýmoon¿úê‹ÛÛíjÕ#Æ€hTI1"bQçÓùp8MÓr>N÷OwîÞøðáÇyžçy^æYX a ‘ˆT•ˆ¬µ@„€Â‚ˆÎ9N²,!¥ªªˆª¨,B¤HÈ %€&Ñ´, "Ÿó³ºÖW|v€1Æ9W8ëœ3Ö…­œ- W•ÅjÕßì67»ÍÍÍv= ¯nßÜî_ívû¦«1Ñ{ÎiXŠ)%æüÓ¯¾ùÕùô8NçLJ§Ç‡§§§§ÃÓÓétöÞ/ó2OÞ/>±" °²*‚"¢ŠkAAUBHãä#3ˆ(:ks¨ETX犢´ÖUUåœmšªÉUæ0~õ«ocH*bP€ (~ƤðJXW\ñÅ‹9èå8E"rÖ–…m ÷Õ¯ÿü϶]¯vÛÍv³îºf³í6›f½i›ºB0–œ pм.ß¿ÿñÛ¿?y¿œŽÇišÆñ|8<ŽO‡‡ÅÏÓxò~š—e™RNÎr”_UAU@XA™ETTPET‰É”u½ª«¾o˪,«ªk›¶íú¾ëÚ¦ïûaÕ­VCÓÔ1΃ÄÊÚ~ýõߺ">=œïÞ@Œ@ˆVùJXW\ñ üéí|×SeÍ“eÑ4uÛ7]×¶MݵMßu}Wýgù³ö— Yþñ~\üÁOï¾y8ŸOçy^„~QPY¼|8ÞߦiÁ‡–efVeÀ„ˆÈÌÀ¢)bJªª (ª,¢Â*-IŸY‰,kKWtm·Y¯º®©«¢mëºmŠÒ5M½Ý®‡aXo†¾ëŒ!$`Nãx:žãòÃûûÓããÃ2P»Zoð—ßþ½±dNàQÉ1>Ÿk®„uÅÿQ QUUM]5uÝ4õjµÚnÖ›ÍzÕ}?ô][VES—…3Α³PX aY¼Ÿçi<÷¿øù¿ý›÷¿OÓä½!.~~ÁÇ9qJÉÏ¢Q`HIcÈ|ꪪ̌HÖZ@eaH)‰ °°ˆˆk WXçJëêºé»¶m›®oÚ¶†nX ÃjÓ÷]UC×®×CS92,ÈKXŽçƒ¤¨Â‡ÃÓÛwßýðƒLÓx>Ÿ§yš–ɇå|>N產+,‚A,¿xýUÙÓ8[g #1€¨0!!Èçâ¬+a]ñOô|Ÿ¿€±ÔÖMÛÔMÓ4u½]õÛõz»Ý®×+kÌííþææf5ôM]Yk@¬±ó4øðîÇ·ßÿpwï—i™ÏËt\¦É‡°,‹>TT˜ETÁ0ª  ̬* NïSJ  B**A!1‹"ZëŠÂ9W¹¢èºr½Þ®†¾šaÝïö›ýÍ~»Û¬†¾,LYÙ²´UéA%qŠ’Ò<çÓÓùôí7¿8ÌÓ4G^¦Ó|>ž Ìçóqš&DJ‘§i‰IXETSRfADkÉlÖ;cpžŽÎUå‚TF’I„®ÆÑ+®øÿ‚ŸèJ€€ `*¢aè¿üòÍv·yóúõ—_¼~õêÍv½©«²,Š®iœ³hP„çiòayzzZæùéîû¿N§ãáðt<§yT–iš§éãƒG‘”4‰ª*cɰ¬ `Ð,£¤Ä*"‚1rL^‘ˆÑB2䜚n·Ûì÷»Ýn½Ûmöû›ÝîõnÿjX •ueáŠÒ”5Š.1ùƒŸÏÇããx<<üp>Ÿó4Nã8Ïc sŒ“ #@Œá|:‡ÈžìœR]B†ÂZBœg?OžRRa@%B'¢S䪲ÒÒùilªºi]˜æ¤b­ (iÂ, ~¾Bá•°®øÆ‹–„Y>F@BƒD†h½]¿Úï÷ûÝÍn{³ßýÉ—_ÜÜtMSm6«º*Û¶Q‘åOÇÓ¯õí/~üñx8<wOÓ<~ÿÝwÂâ ‡ "‚ Yk² ²,sJ шB"QP•$,š„ 1‚U%PCVÊÊSÔ–6Íf½j·»Ýzµúâ‹›ýꡧ »í°ÛoÖ›•!RB@Ò”Òñéüxÿþ;Ÿ1ø§ÃãáxÓœRôËC0Æ8²(„ Ó4ÏgN‚ˆ¢"(¢U‚#6. $¶ èO9Ådb¬¬‚VÕ¬â‹&^·û²±‚†Å;Õ’ŒC jœ%BølŒu%¬+~¯q¡$A0†¬µÖZcÈ)uÆ:k³«U{ss³ß¯×«®m¶ÛÍë×··77mU¦°ÄÅÓXÅ8žß¾ýá›ÿðíýÝÝéxôÞŸÏãáé8gNRÌ~H4dÐT…-Œ!爈YQT4‰Ì“)¢µFDü’R ²D`Ð"k¬%cœqUU–u×u}ׯW«ívÓuöõ«›ýn³Y¯›ºÕ$Œ‘¦izšïîßþòñp7žŽ1gmXæãñ!„- Y@C¬"I…E•5(³,s˜¦¨¢d ¢2E‰‘u¥(̘fI‚„Æ)K ,’%RETÉ:¨c×C_—C(ÑY¦pšpá µåBŽ•©*­óŠWÑýŠ?^äR<€"XkË¢, W¸Â9[–E]UuSu9tÃv=lÖ«¾ë†®†U×5ù˜Ÿ¦Ñ%Ž~^N§ãx:ýêë¿ù÷ÿçùðôxÿáýáp8žNª*cVP$2ÆñÌ –.G›0xÏ¢€ œ}PÌ*ª„¤ ˆT8[UYTfU*šjX¯6«®ïÛ®mŠªv][öCÛ }U•mSUUI¤ÓxŽÑsŒ!œ~øæÇÓñ°ÌÓi:¿ÌË)EŸ’gŽ,q^FN)úHdÚ¦-Ê“ÑÅ&† *¨¢ƒ¦̉Sa•Ä"" € X×%‚Q@…eQB.*³÷Ì’bô9L¥‚ VÕŠ ¨+¾k ‹Ny‰ 99T TBUüÌó_®„uÅ>dnR@ÍEM]õm{s³ýÙÏþlèû®mW«aµÚ¦©Ê²kë¡ïú®«¬ Þ?><¤–e^–åðôþÛ¯ßïCðOó.ËC`æì„RPE„—?¡ÑhbHª ª1qJETUTU@Á[U•!ã¬ëšªmº¾««Ú…mªbÚ¡o›ºië¡®êªlšª!D1h‹Ò¦”fïÃ<Ž¿>>Ì~™½ŸçyšÆsŠCbNÞ/Þ{µÖ"§À"D„HÂ'ì”K:,¨™Uµ¥aY‚*kÁûR’lÅBA@"2ÖY˜“2 ("¡"0Ô Þ/ ʤÁ¨ ‚€E!PT4@Q çݪ"Ö™Ò‘Ù¨¦Ä"|µ5\ñ{ ü(p<½"b¶3"!¶m3 ý0ô]ÛC¿Z «a¸½½Y¨W·û?û³?5dü2{¿œO§Ãái>Ý=¾›ÎçÓ2M~^æy:)Åižs3Êù<h]•ÌÂÌ!„ËÁ‚ˆ€’”U…Y8±Š(«Š"3€µÆYW•¶tm]Ö]× }×um]UmÛl·›3ð·nKŽûóFÎeO€¡õzu{³¿½Ùï÷»Õ0ì÷»Ýv½¿ÙmÖë¢(‡¾ëÚæáá!Åx8<žÇóéíÝ÷‡ÃáééQRÇQUcçó9çhÁ/)†<@ADU%‡!yX ‹2ÈÅï­"¬**1ÁóoY㪲ª‹ÌJÝz5|õÕ«W¯¶C_o7ë¾oÚ¶®›¢mʦoA•9¤èCœc\æùt8|·,Óá0…0…°pŠ)N)I@Xs2~I)è<û”8E%Uˆìçå)¥èCð>°(çˆNP„˜Q˜.ý{—¦%"@Ð%‹äÿ±(  ˆ´b ª2$ż*¬¹ûFX@Ð|\²ü‘‰(>s"æO‹ˆTDUD•SR•tÉ{/^ñ%ÂzNÛ•QUc¹°dI9Å”e a™çÊRbá”ð“ ›žIï3áJXÿ$@pÙŽ?e§œÖ<ß@T DgMß÷ÿÕ¿ú—ñÿÅn»ùòÍ«?ùò‹ÛÛ}×¶D`1„y×Nãøøxw<õwß½{÷îÇïÞ½=Nó4 sfDÊc’ò±krÝSR¸8'3òMfUÈe/½<¨* …u†œ3eStëõúfßî÷í~ß½~µÛín·ë›Õ°îÚ¦(-®jQœ‚?û0-~á8Îããaöß,çÓápxJÑ'ö)†BJ1Æ|H)䚘’XªC0~Ϊ¶f‰†DIXcJKðÌ HˆÐÈ$e,Q ˆP–èòI?³²M'ͤaèY|¹pÆ…¡€™SLÙòލdð™̳Á"%&Bc­!DP"RB$TC~ö‰“ªŠ ’±’éíYMd&`@ UbÑ0%¤šºÚR™Ã<&gT‹c1W!D$o*EU”¦« júl;ùJX4øI,ŽˆúìQBBDÌ–DCÆcMálé\i\U–ÛíæÍëW¯noß¼yµ^7»ÝííÍÍ~CœÇñ|zχ¯ÿúÛ·?¾½¿¿{¸¿?Ë<ïóÄUA$4Ö:W¢#cl€" "˼¨ècŠGD9å N‘Œ5¶,Ц¤ÂÚÂM]®†Õ~¿Ýïv·¯nÞ|ñÕÍþõvsS•-@B|¹ç‡é¼ÌÓwî¿ùîû0Íg‘‘)Íã43G"Êu5f†xQµ¼>DaeAQ8))PòiY€y",T U¨¢À,’4 À¢sµ±5€É!‹¢(²P ¬ÌŠT$—TÄ3 Ú|ÊÈñd¾MôIò—˜ÇZ« 1%æ *BÆ:%"Œ„À8D&ä9.€ˆD(:rexq‘‘¢"^ÂèLX’¢J¢™’Q߸›Ý•‡("!’‚Xk‘ÐZ|ç¥®ÖÆBúl#G¯„õ‡|V.[.zAn†…,¹QYeáʲ¬ÊÂ9[×uSUuS7M½Ù¬÷¯n²ÿ§m›ºªV}ßW-Ç8cô>»ºOõ÷_?>>>=>>>>ŒãüüpÉ5àyçg’rÆ©!ZˆžE.A³kJ*,„É8SØÒ–eÙÔMUÕ…+º®ÛnvëÕæÍë77·›a]T¥vµišrYÎÌ¡ª,"Ä” ùî~1žÏór>oOã»NÞÏ)‰°IÁùEçyŠ<;Ç`B‹_’X[aá ( ‰Õ/ÉE@¤BÕ°³‚4ѪyNž€Ìe0 SbPã[PaU‚Ef‰œã üýe¶ªâ3òݬ+Yë,åu~ö2•Ä ¹Æ§ jˆˆa2£0ˆ°°¨"! Á\ö à%rP¸$’FEQÑ :°(’PÁ¨s°Þô›õúx<Zë¬-å…7T–…( ²Ö™dÚ²²ŸUƺÖï ^<Û/Lϰ”[î !¢u¶.˦®ëºª«ª©ë¶mú¶mÛ¦®êíf½Ù¬vÛm×·ºÙnJçŠÂ©È<Ï—bÛ4ÞÿøÝÇ»Óñpzxº¿»;óã8ÏSSFä˜.–¿—7ç Å Af&É{ó’½)!Ea­±dë¦ú¾ëº¦n†a5¬ÖC߯×ë¶m»®éÛ¶©ëªrdDÔ}8Žçiž—y¹¿¿?þøã¼,Óùt81EPy||Xü,œPÐZcJQˆ,‹ÆU¸¬K@É¡2+KγP8qŒÊÉ*8cIXJfQEfU@c¬uö2z0BbH„†\€yFT.Ë«‚hPy6•cÌ 9ˆ’K‘ T$›BŒ¨JD@ˆJ™”.#;s"–rÑç³+P``àK0& …¡‹Þ®€CZE€gc¨"åMu¹«¨|iœ)\Y%*®hêUA§Ô·ýjXÝìoº®[¯ºah#§_|óËÓ<¢%ŸâyÇq¶³ÖUdA@Ę¢*ÎólÍQ2;[^›ŸÏñ16º8#áù& ^Ò·OD@T•¶®‹º.ëªìºv·[ï÷»ív7tmÛ¶«¡_ C×wJ„Ö˜¦® qÏÇÇÇÇûww?|3Mãx:ΧeYRŒÇãñx<Æ8¥Ä’øR‡KŽ‘GPæ\>DPU!+Ü º€7d¬±ÎYg«]Û¶ûív½Z·mãœ[oÖûý~èûº©ëªª WÕµsÎPÎLcXÎçã8~x÷tòþ´„cˆ‡ó|ÏË2ü²,Ó8…½OÓŒuÎ/ Ñ,DHUXHÕÆÄ,bŒU%:C&dÆДEMÆ$æÐ8[!QTA ªÙ‹ˆ5hä²D`¬ °¤‹$žc(ÍÞ¥ +)€"\ò4}ùBPƒX¸ÂX#bMR^„E/nUÑ$’؃ƨJä$ð|>xÎѲE PQŸ³}¨ (@H’)IU„ YgbálUVuYÖeYWU×6}×6u]:×´ë¶irËaÛÖª\«º.‹²®+ã •uõoÿúÿzÿô¶ì[[YôÀcÆçœ!œX1†8%Ê3{¿€åXÆ|ÆœðJXÿ‰øt .µÌå·¼Å/‡Àóü „дuN×ڦݬ6··¯ßÜ~y{û¦ï†õºÝlºÕªmÛR5Ƹ0³pNAôîîî_ýWïßÏÓ4Žçãá¼çÄœ"GÏ—¶’à ½Üâ,ß^Ò6¸ŒãfÎã•$‰Š:ç\UklaªªÚn67ûÝzµê‡~h‡íf»Ù®ú¡/œ-«¢nÛ¢,”e™NZN%…àÏãñéñí¿>„°,Ëü£Ñ§?‡°Ä4%"QDSâiò‹_€b’y)iJ¤Rª4"F„‘ȨBfVë*«’Oh.YQRÈ™J #‡L$h)kع8©¢*B%qD4Æ ¢±ÖXàÄ)ÄË:>;Ëô™§A ( âG¶BU#š?[a‰¨^R@I*9@eE``•<ž^†Û(‚QTÅÜdŒ¤‚Š…+HAE8&(KgÉ‘Á²°eáê²lšêæf¿[ïú¾ëÛ¶(mኢ(J[[Gd «¦8!qì†6&Ÿ$(ˆ‚MIÉ$RMsšÍ/¾ýåÿúïþ·s˜›¢*‹‘h <+nòœ­BV3é¢lZ2žù³z±®„õxQèÅ[¢/ß.éÛå&4¢b,µÍEHºîv¿{óæõoÞܾºY­V7ûý~·] «ªª ¨ApãiúðþîááíÝÛïùó»‡û÷oüþíÛï‡QUcŒŠ¤˜8Æ£ˆX“ƒPAΗxð–]É"¢¹ØŒ ƨgmåʶoonov·7»õzè»íÍnÿæf½ö»MUWeéÊÒGÌ).âÇqžÏ~™ü|zú0þòï¼_BXÎç£3(³¤lçŒ),Ë‚§1Ïó03SŠ23ˆXa+\L#ù`‘DML&§rI€³ß¡,;g ˜˜U•Cv‚+Y"BG ‘ * Q‰4i’$ª¢É#¢µ–ˆ²þ’?¥¼š1Æl¡$"" ŒªŒ ç¯ T`eàœ-â¥Å'[º(Gá9ˆj$õ $Ï'ÍÎLc‰ˆ—¨I°0E­Z2ÎÚ<†TAY•QÅ*œklQ•UáŠõzµY¯_¿~½Y¯û¾mš²(l];WZg Œ5 zžÆÄ‰ & >ž£y8Ö‡“(¨qÖ£ç8Móù<ç‡Ç§Ãá$*B"ÎÇǶmMY:Pä4+¤, ‘ ç2KNk Y2 D³ë3áŸaQÖˆr»¦>·À%…ûä©J„p)Àe’A¬«êv¿ÿêË/þÍ¿ùoþëý¯û¡éúf†u×ΪˆŠ¤ϧãéxz¼¿ÿöoÿæááá׿þþ»_ÿøþ݇‡û‡y\B  ¬ÂH`(7xåš•Î)a昲䄀 R¶-‹2 B´DÆ8WYWE×ö«U¿Ý ¯^o·ëÍv»½¹½ùòË7¯^ßXCh-¢HòsˆKV’§»÷�[æ)øùt>Ý}x?ÍSŠQ99K…s zÏÓ4¥”4'™‰9¥#'æiZD‘X„YP‘  QQRA@+¢@EîG‘ AU‹Ò6‘¡‹j¬àyÈî+PQIœʲè#3ç‹» à²,—C€{@Q—`S?érl•­1Fˆ)y£‰€TÅ28V›DE…€ já,eɳ†%¢ª¨J,N £Š*:ÂK-Ñ Z“xäÊ` d C…+ëºtÖÖM³Z­†aú¦ïÛ¦­û¾Û¬oº®wÎÕMM†\aâÇÄI#û$aœçà %h™æ‘…¼KJ^Qǧó8‚ˆŠÏÓù4ŸŽ§ó}RÁxqr@J"¨ñ—_ '”TÙ’XŠÒ™Òø%w€z¶²^BLͳY)+í"@j²3ãóÈîd„…ð1!ûDXBä÷ä%²EDcŒµÆk¬±† ëŠÂEa­í»n³Yí6›Ízµúýnw{³¿Ùï7›µuŽP °Ìó|Oß¾ûõ»·ï–q<<>>ÜÝ?=>žŽÇóé¼ÌKSëqo IDATðKJÉ!²"Z•V6”FA a¡ªÖïCX¼ä+`$Ⱥ’@i­uÆY[8ç [7M·no¿Ú®_5ÍЯûýÍöË/¾è»Î9çJ* ЉÏK÷jè7«õzXµMÕ´õjÓ5u]Õ5†9¥„9Åøøðøôpüöç÷W‡Ãñx:Ïçóù<Ž~ §qÌ»$¦$Ù(œÔ)Y0(˜YI%±Š$Q4¬ ‚)±ª"ëlUº²h5M[}߯V]S·]Ûm7t}×릮‹º©ma­%cˆ%ư¤b !¾;?øàƒŸ“Oa‰aö‹÷sò‹¦˜¯ORHiñ~Ò(u^¼çdœCcfŸÏQ–„ ,c4H€ ¬ª`ȸ¢p>¦%jD“Ð*Y"G¹Ý„@ô¢"ì3¹xÇ.E€Šì§ß²ÒÏîÓvØŸ*µŸš*?}Nfœn !¼¼Äó„ü(…¼Dh­ý4T…ì«Ô|ýRD,¢†¤@6 …hSÙŠLWÕ«ÕPו+\a]QÆ™².©)°²T鮪‡º-°tÖ‘Eë,++hâE !¢ ÌNaÎ;EB Ó<û%x¿Gïý8ŽÞOÞ/1ÅØZ›g‡†–Ù{/!d·:ë€ùÙ‡AŠ”4B¾š| 3ƒ¢Q€Ü½ˆDhLaJWye†®ìÚ^X˜%¥”Si0ÆIâ‹7P_ª¨Ï5æ—Ó¦”'vD/AÅóªýöøÿ4ÂzÎÙPá9+F‚œ±å{Ï'ÅŸþž"$‹Ø·ývµÙ¯wÃzkÚj½Þn7ÛÛýîOÿôÍÍ~Õ5®kêº*‰(ø%x’_ü|>Ÿ>¼ûá?<ÜÝãqb‰³Ÿc˜X–ã‰ïýâçÓtš¦s ý’bbfQI1y?'Y°¤H…5 %°l”‰¦(1Å"GeÖ¤TÕRRŒÌÀZ—Ž42hA.%xÉ8‘!$kÐ":AÊSGb /Ùe1~ëü”z>¶›<ßýíGûOeÈå"é?y¹aÑÇ_ÒlºÏAPM)(!:k e.! 5¥C2h±dz,š¢ú¾]õ¶­Ê¾®Ú¦*˶ªººn‹².˪®È˜±pH1Ÿ=²êÒY".,2ϳ_¼°`qžÆyšcŠ1Æèã4‡y™—ÙOS¯¬ÌqYÑ¥C”rôªš“â”’QµÈ”ÏçÀASB–ìÚBrÎc#kZÆX´ÌÊ**9ó¿\|~ñœ/ V8û'»WmçŸ3¿çS‚1Rºˆ\Ï1TþП xYÖFè¨JˆIç2î'WsôÙúöé9“ž‹ŸúÌÆŠÏ×B@Cf½Yïv7ûÝn½Y¯WëÝn·Ûm_ínv«mStkkÛXç&Ž Ê)ƸLËÓÿ«ÇÇï÷çñWß4±&W”ÖØS>ê /¤I"Ø`l´Œ²Î=}•˜È˜1ÇÑ)U`K%¨A™AADƒ„Ĉ‰l¾,ù§ôuŸ—¥ü´¿äånÎà~ccüï| xá&ø­òå'Åä“·ƒcòœÏ©ªCöm”ÆK†lS·Ö*«ÆºqCßÖݰY¯›ºn›&ç±ëªÝô«Íf]w VN Š ¢* |ñh1(X@VH„E9æWÁãét>Ì~šæÉ/át<ŸÏS Œ‚Â’bö“]*º ˆ1¦–U)Š>¥À‚bŒ’ hJÊ 1Id …É‘-Ð82Œ„†Ê¢­*g¬U…LFIeŽ1œ˜yI‰ErÛf¶^\²ä<°+°m]ýÅŸÆ$ ’ŠÂ9çRJDäœH1äEÎl%‹ýÇõBDƒ¤ „d ¤Ïwíçßa!ä«•E%@•N$Eü˜ÑæàðبjÝ4Ûív¿ßï÷»Õzµ¿Ù¿yóf¿¿yóæMßõUUµ]SUµª,Ëb˜Os\Òááðí¯¾¿{ÿp|<žÏ§ÃÓÃy<ÏÆÈ£'ÖPóX#d‘G1b )1 yRO¢À ‚"  š˜DUPò™Ù4®²uÕ¬‡n³V}·Û®·Ýj×vo6›UY ¥¬µ(b 1Ã’îÞ?Ì˼̋ÿþþ|ÂJϧ,½¸5/—žÍnÏŽÎlæ¾L(VÄKÛ 4mSsŠ1UEåœsέûU×v¯^¿îÛ®n\ßWÂÓþvݶ…µµ1Îê».Æp>Ÿ1JW7*â%L>¤™”ªÂCÑD„Czx¸Çñññéáá>x¼÷~9žæeI} Ê ³)D.Áú³À$ ¹)%MIRRybLI«1PV®((€uŽ*Û—¥1–0©FáÇiCœ—yy8%ÎÍ›pñ·d^ùIxúÿQ )¤Ä„’Ý"BH¨"¡@D£̘ÁY|v—QSV© Ê‚QAæóõæüC +WÜ.]LYXÉ0GIÆ}ßï÷ÛýÍÍÍ~¿Z¯^¿~ýå_~ùŻݮm›¶mû¾€Ù‡”ØZ« www¿úîÛ¯ÿŸÿòïñðxww÷áýûq<ûÉ#dá3_ˆ —PsH‹¨WH*àœµd/!,+{Ñ(Ê!ñ +ƒÆT¥kêr³ºÙ ݪoû¶] ÝvÕ÷}Wu]WCß7ue‰ü<Çiö§Óôøîñ~JañqaSšCŠsŠçi\b È#X•R"U+ ¢ID0q6ñPJ b%›É"š$ ªFÕ)[NFA cà€y{«1eU…5¢Zˆ†-jj/±ª(Šš(![¸ò„r•  ¢iN¹ií2 Å 2‰£ªë\ɪ1ÆO-©/*U޹>MÓ^”,xÎà2åŸdÿÓ'6’ì²™å”}ò˜/ÃÏÂ!!3gWd¶&Ö½¾½Ýï¶]× Ãª*Ë¢(Vý°ßïSŒó<÷]W×ÕíÍÍñø¨ªšžÞV•eNB`–Ó“åä} "J sòc c ‡ñ<žÎw÷÷÷‡ÇÃáéäc !¥”TrF]:c¬‘Y­µ16_‚@cÊÝÏSLIòWŒÊœG07uÓ´}W¥uUQµUUK,!qay<=Œçñäsòø´L‹¤O¥~G¸ä?¢hSBƒÖhAZ %Q!ˆQ 1Y Z"áÅÕ`Œ5&ŸÚô§1Êï¿“”P­3_üÉ—ñ—?{ýúͰê×ëÕ~·µµÝì m×÷«õº,‹b URLó4¾ûðÃÝ¿¿{ÿþ݇»÷§Óùþññý‡ïÞ¿ÆQ‘ÀY—KÌœ8bÛ"šD#¨²hâ [rä* , ƒhÑ2®s…sUUÖMÙtUÛÕ]W]3tíf¶ë¾p¶¯ë¡l˜ã4çeœ¦1ÆÃÃßNÓŠÓ¸ÄÈ"¨ÉkŒ€c )FI‚‘5E%ÅŇ¤Ê¨Q‹pÌ6…Èrû”Ó&“kmÆØ\àbB“‚X`§` X„(‚—–?£-28Q“ «²23]622°BPð Ây”·³TXT X–MÑ8Å” jÊgKBD²Îñ4Æyñ1 QÇšX‚_~#kû9w_ÿLX1 "82/‰Ãe8 ( !ÙÂQAd1ÖÙ¢mêÕÐ;çêª\­†²,6ëÕ~·ëÚ®,‹¾ë›¦!„õjå,¥E8‡‘1xQžç©.y½®S ÓüVÔ‹Q•àc.„Æçy>OÓ4Žãøt8ùi>Ï£_žæñ0O>fÍÞ°hŽ=ÉE4EUÔfñaž=’Äè‚O†òÇÝã‡Ì¿®–03€ZÓz‚Zwz] ÝHs! z0=Ó]UY™ü w?go3[ºØÇƒ¬ÖtkºdeuŸ™ŒÜIºùÞf˾ÞžïŸÞ½}ûî݇§§Ëåº^ÿú?ü‡üÝ›·?¿{óf]–ÞZwwïëT¦CUÉi¶¼ÌP%˜kcë€æ´R¨*UT 2îÌužj­'+V¦Róáþt|¸¿?æã<ߟN÷¯^?–Ù¨!%dÄ}Yâ|më’ëoüõ¯û²dÒ[>]ž>œ?ôhD’á­e YZCïÒ;‰&L"bõ¶†»2¸Á¬IQU@•4¦Š‘B@TL¥DÄûwQ÷Xr<K1 |["Ȇð ÉHxG"oæé -4;•¤14s”‡“Û!²…5©DªªjQ%zäê¨Y«;ÙI&¡²^Ϻ; ±°î™ÞIn4~â¯Ú\6B%DÛ-RÔ¬”C±:‘ÇÛ›óáp81+þ«ñøøÃÃýýÝýÃýÝÝÝÝÝÃÝÝß¼žÕ4E2¢MS¹»»½1’á`2ûÚÒÝ#ûº.«?­ëµõµùúãÏ¿[–Kï½{[–åÝ»§·oŸžž–ïž–öËÚÎçóÚ<·C$à‚¥ûÕ=¡°ûttÞQÁÆ!H°z”m>¦E­ÖS-VkGœ„¨˜A÷è½»÷÷çå7?½]–kï=r|ÐAõ%^ƒ¸ºûÛ÷çî ç5H%"Ãó?•:i(±³ èÚÖp¯Ó–aZÊ/þ„Þþú¯þíÿü?½ùß¿ý³XåíÛ÷—u¹¬ëûËù¼\[D÷€H†ß|„DEdª&"péA I!Šˆ©PDóýá~ž§ét¬¥–»ãéþt:ÌÓTë\êÃÝýýñ8Õ23…Ѝ‰{_=½õµ÷ßýôãß.q]âÚ±^ú¹õ…-±J¸7#=¤¥µÞÖ¶$BD(‰È¤fæ”9%5´##Zc‘yŠ'*‚á²-ø“9&5IæÈñ1ÆI±šDÑWt!2d CB Ò™-CU´PŒ2rQ’’c6%Ba™º=$ŒåÆñ“Â"(éãåIÆÍ˜ú|^âÆo‰m41  OI¶…‰³ÃT‹ÙÁê]=LuªóAë$j§»‡R§Óýñxœ¦én‹Ÿxõððp8Ì z_õ«_=¾þÁìTk»G@.—sAˆ2sMºG‡¬­_‡{±]ÖËå²,çu¹,ëu¹^F'é|yzûîÝù|~ÿáú.—ëÒúz½®×¥¯k\—Þ:ĪŠebAz2RÇ|4’!pÊêâ¬*¦0ˆNu²yùn33=ª•RD­û¿¸öþæÃ‡u]—õÚZ‹Œ¼µ¹_âUö¥DÂ=J©µ2@Lä¶¡£u’RL’7›l†Ò‘^«·w²­EÿôÙK“Èüé?þõ_ýÛ_Ÿ/ eÛ½…Q˜´J  t55ÑZĤÌS}¸»;̓ê6Ÿ¦ùþt<ÞßOÇZJÊá0•j’©d-VMÃûº\³÷‚>ô¥ÛÚûÒÚºFoÞº·NwDÏhôK¿¦¤˜øàÊu]/ÞVß %™™9“„$™L*T•Â=(¤¤WaµR„b޾,ÙSˆ¤Ä8 ºÉm -ž=z0!ª:<íÛè8À7;&Ô‰«ûÕyž´rlC6s¬ŒwÅH"ÇÃË[©%|ö…`"@€ B‘ŠA!Ù€˜E(áp\[5³ªjz:ާÓáx8ÝæÃt8Öã|8Íóëûû»ÃñTç“Íó|8Þ?”ñO‡»èTGf”RîïêT105á>¼s?|óíA´ XMFﭵ˥-ëzé~^ûÓõúþ|yº\.˲tï˺¼ÿðáéü4|˺6µµÖ=‚=rY»GvO'I‹,ÍåzåÚCŒ¢…9òj¢¥Ô©LÛa“"ˆŒÖ"²Še&²e,$efd´Özï㈗¾a¯þTE²”R”šˆÎTºHSEréT:¤~ÿÎg¦‡Ã¡”ÒÐ2â0Wó‚/ ™Š“Ú«»ûûoN~»,×{îQ€YupÝLõx8Ü÷§»Óétÿpÿýwß>> òeU•b:›K1ÒHA$J§Xž.ë»·ïÎÞ¼§G1f[—ÞVF1Þ âéëÚº÷5£EwMÓµõîÎ;Éî™N(”,ŒÊ<ªš‰¦È(ERÆœŽe*õ0OÇz¨Ç»y*Õ€XšŠœ¦ã±÷÷R Uhš"-(–½÷i¢ÖK@¨@*ËiÍuyóá}oX¯ùáéééÃû÷ïßþüóÏ×Ëu]–¥]×¾ôX{´µ­Í—Ö{÷ðLOF°­l#mƃA bm±ö<⤌‹©ÕZï¿=Xˆª‚’ɽ“éÁô>†Œ£yÔ{XÀaúnC·/·ròGÕ6ÅLL(‘NFµ˜§,5ŠD‹>«²ÌëºúÕu ç b`Z©­UMÄýqþrwÂÏ.X”ñ •ÌåzþîîÕýÝŒ?ûöÕ÷¯ÿò›‡‡×§»ï^ýðêáõ4ÕReªVªQ²{óp÷µÇÚûuõ¥3Þž¯ç÷ïÛõÚÛêm•ô:G^¼-Ù[øõ|EP†$’>Çt²ÔÑæÑZ^‘PíIB‡÷ÙC3ª¤ ØÐè *` EQU€‘ˆ?@rû'[I‰ŒdH%rŽÈ‘¥Þ3{tHIŒ- &4DZ¢hÙÈ›k|C/=»‘F;aXLz÷dG6q<‘‘#D,• J¢R%tä†Ñ¢‰Èns­Çc½?ïNw§ãáñît÷Ý·ß¾~ýêîtšçI';ó|,µÖ:ŽG(ÕtõÞéƒVœ§»“iñô·k7Óñ6þgù»>Š4FÍœÊdÄXRá×÷ê-bi¬GøÀ9tübƒœqKÊñŽcbfŠø"Sˆ)X£·9šÍ9Uº*ÊÃÃý|9ÿú7ï®— ⤘’H°»BŒ8A<… 8ÛÊÅ M±  tˆ5 'æ()ÆÈ7*8z:ä¨ ÅSTˆŽh"n0£?öŸÇI&…TÞ6?øÉS’¡Pnûã3LMDFPhÛ&ɸ&‘í[•¢ÜEU³”^˜ãï1æ°©”i>§yž¦ãáp˜ëè§<<<|ÿÃwöÃ÷¯ŽÇÃÃãÝ·ß|w<} Å IDAT3O¯Ì^ÕéõtP›¦.Ä¥õóûo»wLJw×wçU“¾x»úzÖ³w÷e]Zïªâkï év9_ûÛß¼ùù§õéÒ—µ-ËuY/Þ.ÑÞ®×A$¤@E¢ƒ=NÏp¸†{ßVe$»3<Çbß6j%8ð‘?‘€n(Âñ]ÜG,XæŸô´íOU$ ã¶97n © ø qÊJ]…¢"fužçÃá0ÏsÒ3ƒ™¸Å«èƒŽ~~ÁâXsQ1…¨ê±{[!ŒÌL­uz|øfš~^.Ý£R¦¤‘)JÀDT”b躅%¸˜”’¨‰ Ä—H•zä¸\T¢`Ø ¨”&OBtGSUoÀ>ȸ‡ë'«¼2(¸d’JÞà 0RH4aÑ’ƒ_#L—ø‘w4 éB …º¹zDmuS©UŽežìx<w‡C=¦:éÝÝáx:~óÍëׯO§Ãý«ûÓÝ©ƒi™‹ ¦¹Î‡)²»»JÕ¶œ¯ëõ|þ1Þ_C~ìþ¡Çy]/Þ?‘é½ûº.×åÒ–sú9|Mië²_®m½\¯ëº\—Özôar¿z¿0/É5ЧQRă @Õµ¸X'<ó6¤@0\‹4Ó¶­¦ 0Bu GåÊ[ ÝV}>î9G<óòøI›{ן€0Q¦fʉ¨ªIª‚I1}›j r[II³b¥b]»Løå¬ñÏÒ€š<„<”Yµ¼ï=#‹MÍdš¦;ÑsKwÍPÁ0ûë¨FÝs-%KÁ-ïVÓ3Ó)¡pØeB4rª“J ŒHéÔé›r‹­”D2“2V×(ãÐc`2$DBG›[XY™ðÈm²2` ™2næfµLÇÃ|<ÖLJû»‡Ó<ÕÃa>æ?¿{}ªÓñ8O‡ùP§ƒê¤óA¡MŠ“m P‰ï×÷žïÆ‹;3ÉÖÚ²®oß¿¹\..×õz]ß½Z[ëžçóeY×Ö»÷ˆ@²ºK¦„'%ÕR†M’h&l"#}’6¥{Íz”:k­RF‡»k¤µ~imu6fÛRxžC ñ¬ð\Žž½»þôµ÷†g}|DDÌd|Bh,ÆÉ$©±Á >Y_¯*$*ãÇ—Ñg¬±e©‰â”+–u]‡?Tna’ZJé‘"ˆ”ì}ü±”bj€tÈæÎËŽˆ€‰©=æ¹E7ÜNH™=¤xWnÛð]”²%ªoµÅHUŸ¦–ÉÌi²£ÙQÓ2Ûýãý㫇Ã<½¾»;ç»ÓéþþîññáîînšäõëÇÓÝ!2":˜XzöžsùËÙßJÀÒtM+¬³š²÷Ö{»^–óÓår]ÎOçç‰õt¹\—Ö=ÖîKkî)*™ÏqÃ8¿YKs¸A…ŠÁÖ‚Læ>pGh$kÁTQÆ&Ét<¦i1bXýº¶÷ÝÛê±ôæîÝc«HÏèìMî.’àDŠÊ¶7뺪J$€"IÉÀ°‘ÞÝݧ©šÙ4Mµ”ZŠˆ”Z¨ö îaqãí) ¢­µ‹;@ÓBªÙÄNPóôpzwYÖeeˆ•”D`¥¨™À)ç¦“Š¤]¶æ”slëYM¢se\SR*Tb²a“Š¢ŠIU(X‡)ÀDŠ@&b:8“ZM‹I­öÍ«WwÇã|<æW¯îNww§Ã\Õä~žÔl$#˜Ù²,ë»ó‡ß½ë[=!À4H7À6æj@ïýÍû7ó·ÿéý‡÷çËu]×µõóeY›‹( ÎÌ$DkD„ %KÄ8àHþÞL"‘É„,ªÕ´¨)`Óá›Wß>NÓ¡Ôiíý©µK[—¶¬m]—þc{ÓÖ±[¿W ]ÿ%äű?㼈 ,­y[àMÕ ½û²\ÇyìVªª3+d"ÓŠÚ/·`FP¥NÊî]u„A@Õ„.ÈÌé@Wt¤j E= iƒKª¤Bœ dêT´°Ã”šªÊÈ‘´ SˆJQ¨‰˜i3) ­ªÓT«–Cæ:MÅjÁ<×W¯îOó<Íõ0×ãýát:§R‹I›Êt:8^¯ïÂûuªìî5+—ËÕc­ÓTÌîöz¹|øéÍûwïÏçóu]—u½\®×µµî$DF:˜š˜@½çÚD0ë`l¤dr¹l4ŽÅ»ҦjµNóáXKÇy>ÔiR“§Ë‡ßýüvíýº®këýÃûö·o–µu÷ù ÝõÏJy›œ÷Þzó‘3TJ)¥´ŒÈÐÌbf€oÜ;ŽUŒ¢ašEJõøR9õøÌ‚µUÑá¬T¤JЦŠÒŒÆèO–^±V馭NQCD ÈDu*n"ƒÎ2Àéã´$WŽYÛQuÜ0µZk¬–Rf«µÔj6×z:ó`»ñpÓñt˜æZª‰•ju²:Ùñ0U+äˆggx§{»ž¯Þ;2§² —eí­NsföÌuíËÒÚÚ†—ºõK[ÛuY–e-žuñLŒ·55`JÖñjZ:¤%%Ò"ªˆŠ˜ˆB­”:ŠÚÈP3ÃxÔºG¦•V®­-ç·×u]Ö¥»_—¥íµi× )‡›a‰ÜŸ0Á+eJ†Ôj·]zˆÈu]‹UfNu’ij¿Ø‚µ­é&0Ï”H–š*Wøcaøe‚ bò¨‘‡$ ÷ww‹_ŸÖ«&˜¸›ÅRÔŠh1•j6•:Õ©Z©jsæi>·jåx8ÞÇyž§yª¥Ö:Õ:U&3-**šj¡Ú‚kfdÞzÄâmmyi¢f¤g»®×§Ëº´HöÌk÷+üÉÛõº¶uDOùº¶óùêÝŸÑýª* Ü豦3)Ý·íÅ›±RTm+IݩŊ¢:KóAmƒÂt÷óõº¶ÖÚ²¶õº®mm1“¿p8É®úÔg2nyî¾®kf¹QH@Ý{P„TPoŒYr³ ‰àËE©¾„qTnnýLÏŒ¢N: ª‡:¢Ÿº9™dá7§Ìy~ïÞ»ÿ0?þëÿö/«Ù8Mµæižlª¥Ø\­X)ÅŠªNÇán&ê‘+ɦ@“ì¾z_¢¯D÷©X­¹÷î­÷Õ{k½7÷î­5￞—eik÷îIûˆÝ.–±…¯k#’¢¦LX)¦Ed0šG®”©ŠXdê ˆH÷ˆôd™±Ž0ÁùÉÞ·|ª]»þ8ÊgVÑØ@S wWSbx‘&]`B\7R…Jê5V³RàšN(¿\XýËô°D0Õ:Mó%ü©G'1ÉHfpé­Ám6›µ€füÕ÷ö/øó¹ünYÏέµ³A¹“RDÅKÛ´˜U÷ìÝcäÐ$9ˆšÉ1}‹ÌíB‘ÌP+fÌ¢f0“9’Zko[ÿ퇧þcßNCüäÇ®]ÿt5¹ñtŒ Ç( cå6M©’&cñ”Ì +uË^\¦Œtä/S±^†8j&j’™ì>Û¤‰NÆ3  R«¤L€®Oç7BÞç®X%_ÿsóþ›ÿëé¼L¥–¢j©S9MeÐót ô„‰ÖH»Ý"¶wƒ[P3E4ΈDfD¦§GDÏ}Åv×®›òæP05²gBÕÍ亮Ërí=Ix>'EBÜ}šfÆ¢P“ZžS‘_X/s%T¡hP‚V¨`)€ÙÎÅ4•Á&iëz˜§dÂÀu]^óê_êôWõ×èa±&Qzç fGæØHÞ,#¢¢JPÍr¬ÖD&Ò#|ÛÙù‚³Õ]»þ)i02(eb®ÞÇ4 LAPSŒ¢Ã%=àƒÆ‘#¾Z’”Ü2:H–¢ß|ó€ÿã—x¨/Q°‰Þ}5Á¶÷î"2 ´c­”r8zïããq½ºš©jx8ý‡ï¿½\–¿ú÷ÿé|‰5ZràÈd$1è-±-ÆE짤]»^Bc++ ¥”ahè½›C)‹»Œ0ûFAÈÑ ðî8 ˆLššnÉ9)’ÿB¹9/tÂRñðÞÛ0q$9Üý뺚o¹"c‚0ª˜&U™Ô¸^¿ùæ±Gþ»ÿðãßþîmü³%lïÚõu•dBIuªÇ Zï±\—ãñXjÑÉÐ#¥;"IÝ– ™¸%ˆj&UAa†«Ü‚^TŸ?}ÙÐÁ£¾PU3süÜ{ǰf޲=/RËØ™¼ý²NVʨ*ÓdK»èÓµZJ™¦Š½`íÚõµ4.3c¥RÆX½5'˜¹½Teè`̾¬”ÇW÷÷ñá)"Æ.-ãÌõ…^Á/€—‘-¿øcZÊ ±Œ[!I÷­÷QÈJ-¥Ôôn¿×T¤“Hö=o`×®¯©ä–Y—ÙÕ 2Çnà–.¢D„{)Z‹Ž§×¯^ÕZ{ø`Qb>‘̰¢_ˆá÷ù´‚0¨Šª`Xõ#¢”Ûw&˜™ù1h/#B…N N… !ѽK¯‘ýóžÔ®]»þq"GŠÕ¶Œõ~PÕL°!üÇ.¬J™óéþ¤f¿ùõoêáh¥ˆ©ªŠ “¢¢0U^ÞZôYëc°¢êØ@ð§q˜Â­c5Bšä¶ÕíîI˜è–aŒ-5ÙŒôÌœ²k×WUD@Œ\()èc˜&0eQ„@ÄDSL”‘¦2Mó<Ûu=Ztœ³È$1Ï+ý õ°>«é~Ã?CT ÈL5UÑq˜ÚÏÌœü¼jw[»@’éî‘L&4§YKüÃÏ|^»víúGÈ3R‚LIÊ@dR…¦( Z-6•:×Z 2{ïm][ëÓ4?>>Çñª ¢§ãñ Q’?«`müù[å"Gt>»®J)Ï{Û`\I§{ŒTñ¤«Ê<J©ù…\ý»víú{D$57Ž M¨„äHHÞÎZª"¢JÈÚÚåré½ßßßy÷u]˜™ŠDFkíË^Ä8*:Êëh¹‘뺎CÖ4M+0‚­Çó–“, 3ÈÌA`Kî¬]»¾®ÄŒ·U\¤ º ­õm˜&ѯËõçŸNï÷÷P)3‘—Ë9âKåæ¼ˆ‹&"$8Ü…ŸBexÙÓÌnø±Ž>O'˜"‘á©VvÃè®]_[²E£ J \áŠ.  o-3K)¥Uͤ»ãhl,§ÛŽ-ø/ñ0?넃*Ê NaËø“ו\—¥µ¶®kkít: £ÃØê¾‰dZ)ó<õÞ¡vÔ²[ÜwíúÊÊHB!¨ã@ª 4táÈ–S‚B’t÷nNf[×Å×ù0Ëd Tdšê!«}™,ÕÏü¦[ó Ãu62ô>¶Û9‚††÷}|꣭tàk­³™h}]–õ‹ìMîÚµëïÑ8IŒ6•¨$00X( gžOL µ·Å{C®ŒÞ»»ÇÀ•ÒT¤(í|%„ŽpB³ìÖ€žÈ‹Ð$ªa‹Ü.DD¸÷.t÷ØËÕ®]_S„”ZK©VÌJÙZÒ„A4Çùk££($ÉtêH@ô°.™ë²zø/qJxó5 ÛèxÐ{B’#BÖÝE$"ø1PÀF€&sY–ëuqÏ û¬Gµk×®¤¶v²ntd…(aDITž ]Ø…KzGJ-ƒY*ª™¹®Ko]‘WÂÛw©Ÿ\Ÿ/}¼i;gaÖ ™ÉÔR"ÕÃ<*9CæØ Ö®]_W™901 Ñ„&(„¥(Es`F1@T8èBÏ ŠñÖ_3’¾¾„^ ‡5ð2½ð|%”2̼mxÇu]_ E Š©À$˜€JXľK¸k×WÕh΀0B M”D XÒBj«YÌÈñº…l-~,e`ª"¨Å¾ÄãüÜÕJšÂ4¸ì·åïeYk[!Ì4{ {g€ˆTUÜÒn€Ýé¾k××V&!Õ A!²{vG #Œâdfv÷Œ‰¢¤BÜR+°u{&rw¼}ñ×ñgG b*vé­êl&©h­3}äCŸtèòK wíÚõ÷+2!È4H0¢­jëáx2Œ¬Ñˆçˆð4±¢ª„$EE¶œ©H„¢&B5¾%ùsw E0Mužª@1²kª:€ à7úV!#)H@7¤èæº"¨({~Ä®]_Uoß?¹€IÆÀiÂÆjÊh¸KLª'«6ßI1OMšD&{ À~ïòbúÜÕ’aÿüàžé}·¾»HÀ* K>_A ªZ)$s/X»v}]½ynîU„ šzvSÒVçS"ê,X‡€ RE‹¨Ao‡(¡È½)¡ÛùååXŸ·ü<“ÇŒP>ö~ߪN|jË»~½JvÛÜ´·‚¶¥mˆ¨ª²O wíúÊŠÌ$ÔLTT%Ù‰&lÈ•ÒCœ’ŠÀÈç™ásLabOljl¸¾Àë–Ÿõ™ßü‰›aó7Ü~Ù%E%M‚@15 O+…@©u2+sf/X»v}]Ýò>Çÿ@@e(œ¹¶ gpÃGè(.x‹) õ£@I¥”/Äúà ÖïÝAˆèG¬û R ‘ Ta¤ªÕiªEÁ±â¬”RJy†ü½ÄSÛµkש29úèÃÝ= “²¹·pÊŽ®Ööò|¾HÈŒLŽ\™ô°R_$˜á3}X£oÝ÷Rl,âàãq)H¦R%”0U»Á„8JªöW±k×®¯¦Ln=§s ±&¥ÉäbI¡…„xFï½·ÖŽ%“­÷dšYFÒ£¨¾ÈnÎ \ G—}kg ã(™Ì  ƒ¡ @C*e‚ÁHгóeYW­è}Š(ÅDëžñµk×WVÞÎMá­3¥®˜=§„§DŽ+ b0ƒéÉ1:dF2ÒMÕÔŠZPtû-/©Ï,XŠŠ1;H¤©–:­½1UŠ-Ù›$Ô”aˆ4Q… ó†ÑáÇÀ°]»v}E‘$2:¤B4Ĩ%µ¤N”~vÒ’$,!=¢u¦2•Z ºŽTB D~‘WBÔ4#fà ‹zf Ù…2i’(ƒ˜ÞûH'ôÖIª…_ļ±k×®ÿQ3'«ƒ¶"B2U¥Ôcަe¸ÁE¢8¸D_{ŒZ'Uƒjª$ í‹T¬J~–aÆÂ@ôŽ{Îl™Kïî.€Ž«#1r ½;ÁFÝ6'÷еk×AA*1OP²\UK-µÖRÊsÌ(À„Е+ÓAnÜQ‘CØÁT¾†—½3½À•`ï½·N*e\†©¢))áÝ$ˆ‚SŒÙi’$”õ¶H(ck|·5ìÚõµ• &pfôˆÃÁLË o>ƒX@Å]‘tó¦M óQMc`´©€¾|`ýg,Þö‹2"™€æXÃU$QV…©–R«Y ï=cÇà§Ò½^íÚõGRaÖèdF4äˆÄ–±úê®0KM:¨ásV€‘YŠ$“H9Ö _ü!þÁ¿“·óÕÍ8*¢ú¼ìÌÛ"7¡ šÕZ§2H†`D*K“ˆlY÷ɽbíÚõGY€ÌpЀ¢*™Œ—CÕç,0ÀP`‚åØ;$>¦i_õy=,RŶHŸ‘óÌš€Š4¤‘ȈZ|^Çù;ßi|F†d¯W»v}u%EP™Ûþ͸>þ²™MÓ4MS­u°X”@#–BLĶu;RÆ4P?y%¿ÔÝð³~¼®gœ°zÖ²uf  ™hr>éf.ÝP…[É⾘³k×CA¬• 8rdzd/ÅJ©Åf³:–Q$³Š¨Q$ $‹iU­õœDM^ž:úÙÆQ‘ß³N) 4‚ÁL0s˜¶€B‚Ÿ¬~Šz @QæFvصk×W•§Û!¹tˆ@‚ðä$nØ:ƒ¡ô,¦G-¬@„8Øt,sÏTƒXQ}ñȾðaÉ M?~Éd2(LD¢§¬Ð.”¼ ET±”ŸŸÏvÂÊØËÕ®]e„™$WÈ i"Ú§ól¶£6›¤ŠÎZ¥{M9ˆÝvSh¦ÅlX(P~ïêõ2zågSQ&™,¢—Ö—¶äT`Œ”¦%Œ’ AQ1BLÕŸÙ…¤lý<Ô#÷ Õ]»¾¾‚®6‘+¡"M)u*“(úœ´0ªSªˆ%ddò™èàp¸«šRêT€õeäçö°6;èFò îîd (¤ŽŸ¹Í87tÅ›<¦Š#_U„Âc/X»v}}E†hB]4Á€$D@ª÷IŒÍÃpok‹HQí™Î¤ j°{ñÖ^°¶ÒŠ 1À¢UQÉLDJ¦dÚ5#‹ZdFæ­Bs Žv»¸hФ‡ï=¬]»¾¾"ÊÅy›æ D"´¢Y,DŠ$ĉSE¤Xª&ˆ!È—­XŸ}%ඈ3"R#Ò & Ž€3€Ð±y¨jd¨D2Ù¼…»Í™\º_,æÖ¯{Å®]__‘>n9’l98àÀ]@hPµÔxQÙòÁT¥(‘DÊÀ5|Εp[¦QÅ vwï}ªuª“&2~ÊÍ…UŠõÖ"ÂT¬ëÚ½—I(îqM.­/Ï„°]»v}5y¤jQ1@E ”Á=ÔLªJ)éÚD›BjHI蘟‰ŽæU¶3ÊËêsœî‚VK¢/Ë…f¦ªJæ`õå"ÙŠµˆ¨‡O,˜R¦h$ Þ}ÝOX»v}}µjUôc¹åZ%9ÒDeøÝ“’V:ÕÌTÅaN10A)ÖÝ­V)jņ â›<ŸqÂÚXТ9rqÈäFô(Q#kÂØb ÁÌZªˆ2Íó|8X×e]—‘gÑ{çŽHÞµë«+"?F^Ý>(¸U‚`æm`f5=2 ¼®ír½zF©5Áž¡E‹½¼¯ás –"@7ÑbµÖR'3ˈ›Ìmáæ9‚ÑÝŸÙíjffÏ{ˆcŒ¸Ýwíú£¨»•A>ã6fÔm<öÉNÝö_Ž—yŠÀ±ORT¶½—Ög¬çºKªéØ3ªµÈ $ßììüx°äøn5›É ø§:MÓ4Oè¾W¬]»¾¾Ü26Rˆ±òñÀ%ÇúÛ$i*E‘ UŽ·Ö×èYÔ|é!>à7êFMV}N‘à³þÎýnÃnEIL’)"ó<æƒYý"ìú]»výÊÌÛŠ–Rj©2ÂÝe£ñÝnx·Í:@”`š‘ÌìÈn…(nÒ/¦Ï-X"ðÞ–u0†€Ó4Ý.zøX˜äï^fG±G-3}¾'Öò…ÍvíÚõi`ÔDEJ-u*à°^5ÕPURA·&Üš=I$… Q‘ÈìjVJyq"Ög¬ñ`237;Ù^Ø 3£N©ò“€U@T­–©ÔIÔ<’¢=³÷Þ½g¦Zù"ðú]»výƒ’m 8| [ýÊDDD†Ü|”€DDï.›ËáÓ¨wª*ˆŒIîÀ ·x^ æk̼÷ëÝ×µµÖÓ4yïÅÚ%·éð´‹h)“¢wÏÔZ‡C­UÕ^vºk×®ÿr%Àdë}YV|䤴–ª.dNS]Ví=UCn7ÄçN•ˆä­aO<§/åÛZW IDATø ÿð–A… ÀP'Î ÷h½{ï‘ã$õ èê÷´uß·%ʼ^—§§§uYzï­û¾K¸k×׉̷PÕH…i`E–uí™1ÍÕÌDÌÌ’Û¦ŽˆÞnS:Ïsªªqkm¿°þð–QB©"šjbødØ{w÷ÖZï};:"05Ué-27ˆêcá]"zï{ÁÚµëë+™„˜™@˜@*h"UÅ¢£˜VJ™ç™¤™’ŒˆaÝv‹Uk­¦öÌþˆžz!}Ó ‰ZŠQd¬iO‘îž™ÞZ©ãSf8~™É¸Ádž‰ÑÉ‘¼k×AãÅhÅ̬õŒ„ÁT&³ÂŒZ ÙäÖ™i2ã5«ºáZ¼wïd÷nQˆ%ãy—ú^Øø•0„<–°TÉëgžŸáóÉk¬f²÷Þzk­gf±¢jݫծ]yDdªˆªÉàS@,†Þ½÷ž"BÂ=6„•Ãá8¬Z뺮­efo½·Æˆ›Géż Ÿƒ—!Óa¶T£ m<¦RÊápØÎP"RJy¾ååbD&233GÉ:qªne ÓÙµk××–{& d™ÈÁŒ–ÖÖÖZDP•ÌØ¢tTk-£¿>^¹Ï­ž<ƒ_ˆk<8ƒ*E·Ýl‘°! ÒÁóàP3þ¿ì½ÑrI’¬í‘YJÓ3»çæ˜ýïÿz;kg¶%¢*3Âÿ‹¬!õÌž#ÛäE~¦‘Q ÈÆ a‘‘îL11¬jýÍÿú‚/¾û’Õ4/ '“ 2Å[¦q‚ €S‚á×  µÖZ‹ˆ½5FS,¥Dœîæ~ÄY<ëE><Ã: 2˱~ä4 ÑúPåß ²†|ÖKyy¹´¶of„›¯ö²âåb—ܸ¿öY¯&“? ™*fRšs”ª Tom——àÌܶ-•n\,/v ´ìñ ­Ë²¬ ^_Ÿø"ï°8bÈ!ÅH f‡-á¨P·“àx‡8 FqŽ´FWi²Ê²Úª†¾OYÃdòHJÉKéÑÝAK¡ƒlæ£ÉBôTêlDÎK³á8œÊLH>4 «9|®›Á»„££ ”rWÝ|¦ûÆê¨Sgý2£™¯k­Ë²övì÷è ‡æ5ádò¤^\þÁ™êRKEf[Íñ‰Žè÷ë+:$£‘’îÖ38.מLø®‚%ˆ¾^ôâ¥xkmßw¼-èϼuUæ~;)ÞîDE¥"aHŬW“ÉŸOJ=S&#{ffìÙ¹ÓÜ Ez&¥è½íûæ^he|ª‰$…h¢-",´tê©Z÷wFÕƒ€Æc>ã<øVŒÎžkþFáøé½õ}ß £±eßú~ݯ-úÞÖd2ùE$´@g‰eGïP¸b%×Ó”äŒO¹©è„j)u]Öe)4õô2–ŸÃ{„Ç•Á^ÖmD%©õ¾J¥”R‹€Þb\-nmß[,k!’^U¾£v¾¤$Ô‰Õý Ukµ¶ý#3Ç>ðñ#8ÎK±¸¹•âµ–¥Ù–‚ñùëGBÀ³{¤§0BQÇéã}ØÔQŠ€Ý¶·‡Éª­X)>„³fæÙ{)ÄšL>€”¶×R›ŠÈ`H®¥^L>¼îpoÍpŠÃÏÌ?B0elœ½îþ ¼×ýüá#!IÊÐ˶­×V›˜gRª¤·‡Ã•¢Ö:n‡oŒÈ,ÆËR—ÅݤÍM©Œé‘<™|)µÞShô0O–„wYèh@òäíG2OAi@ÖÆ"TXþ'rsÞÓa‘‘f6´ üÉ 9ý~)eœ yæ¥$#Læ@Izî‰Oyc“Éä—ðÿç÷ÿõ—/4Z)è{k=Zk¿ÿþûp1ðq±–©L‘v `5P ý”e=Ñ5ê:,Š€gY¸Ø¨Á?å¤óøw:&Cãâ A }c Ï-®^£,ñòâËúc 9™LþD"dN!Í`P!,ÑÔZ¿|ùòåË—á'|7ÆRâÐfV›ûÎJ¬Eå-wç<\À„ÅÓy;Ç’¥÷ãÄkæ·òæõÕ êTGtφæ%ÁN ©Í‰ûdòQıۜʀ”C²0Zªu]ÿö·¿­ëúfgÜ\d„”BP7Û¼vVãRiÏí@Þ±K(ðeùª&Åa0èîµÖeY†‰(:u ä¹Ii”C…iH}$5fï­õž3”p2ù ^^¾j{ë}Œ“‡×ñ±µò׿þõ·ß~;$Jx‹ý:Âu(Bf{ˆ$ìÙÛÏïõt7™ÉNË®C~Uk=ú¬»-œR $HK­u©e)4*å°Þ°Ö¢÷М¹O&½,€G(s¤!ó^µÔZs÷3:¬Zê²,#Â~ÛöLÕZǾ4cÂóÄÉû;†î4)£¥¹W+N§q˜N´Öò¬=7Õè8åš™‰L(Y¦È 9á˜9õ“ÉGqàÜo/ÜÝÝÿþ÷¿g¦™õ~¼Í½”jžÐÈQ•»Açâô9#£÷ó®[B¡€#–ÈÌÛp Ûyæ§Ž¶íÚÑ{1h¶ïÙwm̺ÖÞg½šL>ŒÑö6²DÍÞ „Ç?‡“ðÛ*ËðmPfF†D < PRÏìCx5„—Oy…ï)X"!OuEªŒ—9îÃuðxÞy :ÆX­má!ÈÜ–PBrÐ3m¬Éä£P¦ 3'cì9"E2"n_ã&]zë× ¥bYÜÌN失;­›ÖSxx†eD»ŠZvÚ[ê)ÐÈ·t³Éw¢C ÚZî-UéÑñ_S×0™| ­i——Ëår¹Çàˆî# 懽¨gDÄÚÁ°&@”gTôå£VƒE%P Cžjãˆçá¡o!:anVó í‡gX& ‘}ß·Õ ì"EâÔn`’°ÈT\œpoÊ€ •ú®½GRÝ; ÝÛŽ} G'“B™®(Ô®0ÉeìûNÀÝo7ƒ?y0ˆž£€‘–¥Ñ|]¼Ô‚ØŸõ ,Xb=ÒvÒ.ëº,ËußI7[Ý {˽¿vµ\ôB­Õ›òH× ×Ë™ÙKÑ=¶Øç5ádòQdÕaÙa¼]rÈÚÿ‰]Ìyÿ‹ò"( _[–ZÜ ö¬ ágX£ý;‡ëpY.µ\¨BT³ZËj¶€¨CAtª’GlP(¿_¯¿ÿC˜T™ÔuÛçòódòQô覶º\­0 Sч9ò` ¦ßîýÇ£Bê¶:,ÒŒ`>¢Àž7˜~Ï‘p ÿ¡SKgIc‘Ìéµ.K.¥z]+%)©ìJ˜ýÛÿú÷ï×+Œ0”R Û·ˆ>;¬ÉäcÈG[®îA‰¤ð¡ Ç[“EH ¼˜†Ç”ÊŒ(ËR¼XÆí“œÊ×a‘а’Ô[}ýNcfz)€@¹s1_Ì;QK)æÄðC6¥-SîEI%©Šôy"œL> IÅäHGäÆeY­Ö1™^–¸‡ Íev‰J¨w[àF% ËÑ'~¨ßg‘<ºB4 Ò …™Ç9Q9 ÀCžð„’µ+®¯öíÛïÙ‹zQ»Ð¿D_Ý.Æ'ØN&“è‘ ü˜]™—¥¬/K¿^o ¬ÛA0 JÑèα,|»;XOº!Þs$a9€C…"0–‰º»ƒ;‰d¤m`/É5ü%Š“ ÜÃúæÊÕ˜ SUrÀ%„b†N&EHfFkMyë KÃùR¼T7BÂ[–ê°žyª²òÑ[B%I·Š¼(º˜@º!㸋GÔ5ì4£§à^‹èE%UJé‘#"hxfÎPÂÉäÈ̽,˺,û޾õ éô¹»5÷w…:=h@Jc\3; ÖøÆÓ>Õ ÐLéP!Òh#ÖÌÆíakR­ÕÝ×uÍL2Ö—K晴]Qº©xø’fNUÃdòad*µÔZªõ"22ÓÝ~ššMCÒÀ#2 „è´âc¤Ã:ýy<¬t7Ff1rʬµ~spÏÌÖš€±š3¶sÆO’i´]Ø„ÃÛo¼·ÙaM&H¦ã­:étpîÿ«ä®!uJé°ì»w#}ïÐa‘R&Æíyæ§÷€÷¯ÕÝiÞú–Øi­Ç÷mÿ½÷WpÔ,©œõj2ù02cT¬ÿ—i9…» äùù¥J ´§.¿C‡%™EäkYŠ—¢ñš%’î¾ï{üØUJÙb“‰ÖS-³Žã¶¦ßèdò¤D8‡ÉÓ.éLc8{+IîžGZ–e1rß÷«Œ±¯ùX8äænîOl²ì°H€ð"`¯ j%¡›Öhub5n †*ž2G/&!"zoãðxÖéY²&“cG}õ¿üÇÎïé]# ëÍ}óf…›ª‰9>ûã H£C…}Š#! #¾\JAòæ,s&zõÞÍìínóí=‹ÍF8Gf¶Ö{ÖÚxЦ¨a2ùPþëÚ^ƒ[°…ÆVó?Í…ù¡ffF£{¡¥œ#¦´G{îgúq¥;„á1jÇâãÁðÀ}Ö~j¸{åù­7{?SS/:™|0×ëkk+€qZê½÷ÞoÆv?iGo=—»—Z«ìŒÇ 2’{Š|³uê°0JÖysyÇŒ¾ne‰* nává0žp3-œL&Eïq ½ù¸ÁôO.ï?£¡} ZÀ¶›Ö§îvXgÄD)åߟuê`éM p³HkßzkÈÞÄþgÐý<N&IÄ¡ü¼¹2àt6ñ÷2Cï­1Ç yš‘vd3''ž`Äò¨‹0‚ß]Ü,7ïÁûŸûDœgÉq$œ÷ÉäÉL3[–…äè­J)—Ë%"ö}Ç™¦sÖ²›£h!J™@`”-7Ùi”õþƒá»–ŸG’ÃM{u³%,¥<#F޵R@4ÈÞÊÓ©FË1Þ›5k2ù8BI³ZëˆÉëÐ1œ·jo“, JD¦dfq,û¸>t7/þ¶Oøîšõá(Î%ÇaÕp¼‡›û„»ÛèÇ>¤ÁJÂ%auHÔ¤‘Ä8™L>ŒSÇÁèMþÏÔíoÑ£C"Ÿf¶®ô‘I1ž¶ÔC1ð”9Ö»tX2ÒHšÎæp܎猘œñnt/ɤ’(¡Úå!—Žã/!)bÚN&IŸêmÛZkãÌôO• áQ©B ¹Hn(„ÌÈËZŸ(}§F^bFº›‘$k­ãT8 –¤eYÞ"7R&”P X¾m,MšÕj2ù`z8FµÖ›šá§ðzwæÀ‘TYW²F§q‰óJº”Ñ{â¹éñÔÒÓ˜ #­ztWã¸;ÞÞ¸}¾K½ÇuÛ¢5õ`ƒwë‡úW×¥“ÉäÏ"2ÜüTekm8aõÞo3¬Ì¬µŽœœÌȽ’5Ó¡¢4Ê Þl¦ÎZñ„>ë¾»×RÜà²,ã~aß÷Ëå²ïû­ÛÊÌ­íH_Œ{àIžb ž´ÉdòadÊ쯾›uß½tit,†Ý_†”p+™œ´È.vÁ‰zFÁz_‡EJénË²ŽÆÊÝK)#äú…Dtꪼ2“(î£+N÷¾Éäã‰Ì›"éx$ÂŽyϸŒ¡d I{%—Ö2ÔÌ`F¿#ÎÏ@>íƒýÞ븀Hbô­µã)gc9L²zDVßúvUÛ™¬^Ê‚ó$øƒØt2™|y“‚ߊÔýFθF“ÆþAL)ÀnžÂ¬*Yœ _ï—¨ßÃãšHÕs$jlÛöíÛ·ÖÞ6ooØÝA† ÔÉ ò¸ÅMè1™L>Šá#z;ýÝ,XƉ§Û]D´ÖI˜8¶¤CÜÌ7p7C±šQ©‹Ûå\ey,(#™!ˆÊŒˆ¡cß®BÇFRk-²‡! N¥AN½nD>e “ÉÇÒ¢oÛ6äc¶“™ãm|<Ç×™Ù{è¶V‡Lua÷ÈHZ! PŒ+äÏJÎy|—𻉕ڶ}”äÞû(X·xرóûÞt©¡ÓöJŽþËh8Ìw&“ɇÑö~}½ŽcÓh5"¢÷>TJµÖ[“5&8ÇF!S耓‘ÙéË1·IÎV€G;¬qI@“1”"oÇÀ[{õÓïø:rü1ÁNž™ 7è÷¿ŸÉdòR[+7ë˜ÖÚØ"üÉUfT±Þ» $5VV0†í£J錈Þ¯lx¬Ã"qÕScÚ”™Ê1bÇiㇻͣñê{ëmÛ"úi1Ý“ Ì§\|N&“Ç!Í<ϺãîA¢ÖÚ{ÆXÀ±—Ò[ò GÎ()A+G…h0ƒ˜ßooð`ÁÕÖÄñ‡`*oÒ²Q¶FÁºmê:ú®³û:V–Höˆÿf`2™ü œÍ†ã-]Z7ÏF ?óêîî‘¢hdöŽ/eDòß¼¦Þy6|¬` €Ë—X—¨¥ˆLé³ótª¿ý·fR‘A£ÁÆ ’;7[kÑçÐ}2ùHþþo‚ÓŒ†Twó6PdÖ{Dt¥”R«™ (´–iÈáî>lÏqËüzͰ˜`:á²r(4dd­µÖбh6¿î›¦TF1‡?„²¥NÚ°…ÒûšL&Ð#5f>F ÀFkàv ¡†gJÒqH²ÓϘDúpÃÓQÊîU¨ïå=ÂQÊ”"¦4¶ºyÇO=—›C ;`ÌâÇã™ñúúz“›N&“$2CždD6°AC‡Ã:ÆãúÍPDW¦¨1Ã"@á‰É9uX¢@Ò"™ è­½¾¾nÛ6Ú«áÓ0X7WeY./#×e)¥ Ǩk­·ˆ˜²†Éä£Ñëë+€qkï¥dJÉóüÛÑèHH!(¤ÈÑs1” ñ,-Äóú«Çý°0ÓZZäPéXãuj àr­çˆ­/^kUæ¶ï‘yÜó–p2ùP„ÖÚ‘!£ ²(«Áí;äùÄ#KTã è&·-ûÖö½m©ÎOµ™ì9£¬uX`J‹`^ÇãÎï<­Þo!ÝN…ÑÃÌj­{ÛZ4%20ö¥‡Ðቕx2™<€€Ö(š¹/µ|!/ÑÝl©õBÚÛMÚ©‡P7ì…Wꪶg ôdEÀü´'~wKòŽ˜/L"B¢›‘Ø€sy°”2¤¤·‚E²µ=7öÜ·ýš™·“Ç…Âd2ùxö}‡`tÚjFgd8±ŒÐ¯!m?>ׂPŠØ3öˆ "3)éÊj¾zy–Ôýq‹d'N2!øÍÑ­NÝ;~ôÞ”¢Yf6¦]­µãÎpÞN&MŽi”(1Ó2¡ ›v’ÃBj,¨mSÛ÷ë¶¥ÐÒ8@Ò„JûÛׯïpYøwìÒI³qCpæÌÉè°ݶmlKÞ®ÿ–u•%Èl™)’~[JºðL&“ÅŠßk¿÷}QÇEYkýá£Ê#ÖO™æ`„“žpÈ…ÅËxÂûû¬Ç Ÿ ráÔ‡QN»¯ãyoFWG¿uç3qdϦ»Ìdòh[»™^g£¿€ˆè=""Gn_Š@I–Ä ¯)oé©B3=g<ýh*DUSa÷Åæ6z¿uXÃÔŒfÜZ?M ß– ¡é8:™| zÎíž6£NÈÌ}߇aÀeYÜ—Ûf°i¤å¨Â<É”'ÊM¿õî×öh‡E8d¼«‡Ÿ éîÇ>÷¾GïCµ0‘ fÀ¤ˆœÑϓɇ㥯…ûšuIÿ4­¾™EǤH° ¹×¥,¶XoÏxïsoÕêö¢$Ph€8Yh>Äî©ì="[䑦pZô½·¶ÏÝçÉäÃÑÝçðV¤ÆóÍ}´”Rk]jõâ#[”‚‰^ªyi=j­Ëº˜Á˜÷ÂwV¬GŽ„·ÃܨB="#ó¦iFW=ÂÜ×R—ZÍ­C‘Ù²µÖzjüÿ"“»ãñá~?™L>”1¬¢nnQç pÞšY-¥¸ÛYC“TÉ!;Æ CØÉñÑ~‚¶áQ?,Ò‹ÑSk½÷6Þ!†ø•4œÀèN³q zø·MÈÃþŠ¥šŸuõ9™LF™y_XFc5Œ±p -Ç š8,®È1½’rßûõÚááÚÉ=ò0{’&üÁ¡»—Z (Ž}‡@cH] ›Gš¢`\ÊŠÂÜ6 ƒG‡¹, Üí±`“ÉäÏ'2¥Ãyœ~ÆŽ0Îù*E͇«E#˜ðLÏ`ìÌØÁ&ífNê)‹w45·Eœ1‡2;¶¶!™;È-úµít£3‰`)ÉŒ´!ewƒo¦«s-g2ùx„ ºÏ"‰È‡Ìée ‰C̤ÑaÑ‹4…!« ã0¨ÉÛ§û#VsŽŠ5„rµ¤ƒ‚2¡ý3^ãYß(‰Õ Šº³Uö.eöyI8™|8™‡æm xL²îׄÝ}]W3gËbÂê%ë²”ZJ¡QD‚²2†ÞoáÑò¨Ëèn@¦â¦¥ŠŒo¯¯¬^/KgîIÔ±÷8frd?ËÆÜJâ{‘WP˜1‡î“ɇsÛ<[+7W»›ËûÈ(”Ô#”yL­Ó™¹XƒµÛe7—àEæ@ðÝÖƒn f,%`¯™¯„H3£”[ß6ôͳ¤S§Å‡ïàB@6ï"Ws¡§%M&“GÑé„…Ó:gJÃi½=Sâˆù82ÁÈÞzföž{0°4[;ÊðÆ3>à,Ž‚e%ÌØÜ݆Á1H/¥,dé=ZÛ‘igMGYR)åË—¿,ËEVŽ aWÿî73™LžÀ‘6øÆñð™Qø–:zŽ¢‡Ù}ß#²G¶D·ÚíÒáC³ù”—ö¨[@P¢±¬ëº,Ík]/—¯µ¼ì[¶kSR `iž´ òØCtÁÅÒ­v[ÂÖ&k3˜p2ùü«p…ajp¯ ¾9îÐìP5ÑK‚I=Ö£÷þ¬ãÓ3,8W¥N¦»j 2¥g±KÊ÷n^éi¨܅̈íûöú}C–†åZþRüëuÛ·˜ËÏ“ÉÇ“w+8÷ŸÉ±|ËuÏ™,>ú-/µzé2ƒœiÑ#;êò, ÀCJw D¢@½µ¶oíºíÛÞ ßÊå˲üE/Ø^75¢°/¾&ŽtèLd `‡w{ [Zî}¬Éä@;äJ?kF’‘ÅK´-Á`m¬Fwá#݆lDR^<꤀PG†×Bè¦(©E,bÇxgY7?´™ñ/”“ÉäÏ&ßLD¥ ²Ú[XÌÛÍà½îáf‰ÞöÍÁ’~¹b|á“ÊÕ£C÷cŠ>쮬º Ó T2$£‚@šdü²!Ô:[£Ÿ<þë™G°Ð“ÞÔd2yœLeŠNÒ¤aÈyŠÚÿo93/ë RV²¬ªÑ;ݬðΗøa\Í9¾ J­õ²xñÃÌT¨Ð=Í» HÇ¦z ÙSÈóM@Jï¿ñœL&O ¥i´›–ÿlþtï¼pßD&­KˆlÀ«˜OŠ~~P8jG  ,´Ì`R|§¸dÝ£!‹ð¾{ïÚRد8ÂÎÆ"å²,’®¯¯ÛõªY²&“O€¤‘|äív?>§%Ö‘ÞNˆ`¦ó9fÖZÛ6{ÖùéaÇQ»Ôå‹nß×µX]^˺ÔzY.aýâÚw…Ø›wØkbˆXG—uSÝ;ìÌr5™|DƒWø­h‘ÇjËÙ$&Y·‚uÿã< ˜Y„¤´'m??²K( ˜}ñú"SÏ5é°E\Àš°D xˆJ0Ó"¬ 0§›…‘·:êîº^ê²Î‚5™|$õá„ÝŸï]’ÿØv܈wF4ÄéSú~~ý· Œ¬bM,p‹d—¥Š`)™. D I¨H˲ÔZK)¸Y¬’#û8-O&“&¥ëu½î€6$G:U™ÙZ“4ëGFô}ÍÚ÷}X*¾Yà=„šätß3–4ž.…Çk MIÈ\æ‰BR)Hˆ1¥™…RÄTºO&Ÿ îÕÍÉä9·9²zï1|f~7üñïÓ-k,T?w ÝaIë¥ìg IDATF‘2óº~ÕR°®¹º™€kû&&Iá šÙ½C9 G'“ÏáÆJ8ÔG†CDèZçŒCŸ¤RʾïÃOy|릀?”énçáû¬…½`‰Óqe´êý_meñN5HÊ¥V%ÚWqÕ+;Z¶ÿ‚‰Å…NKR„@žaB¿‹Édò4DŠtÀ ì=2º—BZ)åþ–püȸú[;7'ø»_IÚ-nÁ ʱ[4ËÈ`B™J!E‡Á2’ LiC2êNº[)n–ä1–»nÛõúú$ÕÉdò>$dPI%"K-æ(¥ô~d©â‹Þ.úo*"Fåz{n«9ïM'|`t/&j­Ets‹­±G¶†H#S 0z~ûö½ï6$ñ¾\Ö¥,ã(¡aMsècs&?O&ŸJD$Rʲ\J©÷.ïÃ1¹÷þúú:Æðƒ‘`x«YcŒõq·„(RÊ~½~'µ.%z‹áàgLC¡LD=@$D¥m[l×Þ»ˆBXd(p '“OB*8GÓˆÈÖZþÓÓÆþó¨P·Yû½—Ãy7(RXý£ÉM &)#3!™©ØŽÜr™e2ÈûX<ÌpËòõrÉÞ·âUÊŒ`­f6 Ödò8lÚ™°ÄY³î üpÝצ›‹C)e|wüsÈåÍÌÞ5m?x,„âëGo¹m×="IKgW¿ª›¥¹èAkÆž¸¤ÜÜ‹¹ûnì$R‰”£>§î“Ég@ÒkÛRîF3ä¡Užío+У$!®Œ+¸÷6ðIB¬ÝŒiì`—ØBPŠJ²“tˆR Á4Ä0&¥ÂH:2§;õnwúÉdòRzÝ÷ÈâÿJ>u;)éxð~Âu7’ ˆFÙ7ßc”üÈ-áè »3k¹,ËEÙ/q‘ÛÊÞ²_w]÷ œ4¥dfæ¤zïÛ¶mÛ6V"ÃïÞÞcïa2™<áM°pÖ˜ŸQ"â¾ÕÚ¶äMMŠ»ågI©4éË—õõ÷í/íѨz {Y×u]—Zª{ØZD§T"Ø;$GºäBIÀˆøý÷ß÷}?~‘Fãl¯&“Ï‚ .$M4€v®¯ðÍ£` 5Ã-úöݘÛׯ/öníÒc~X‰4¥)‘Ù#%# Q¡Bc5Tàø:ƒ’.—Ëo¿ý6ÚÈÌÖ¥)eÄݶäd2ùHrÜÜ<Ý[ŒÞ»­Ü,Ìl¬ ¿­I_#&t”¾GydùyDæHž‰×××ëõõzÝö½Eà@J¦»-Æša@Qº’ãÄkv;åÂÎ"Ý{äôÚL>Ò<#Çúïí€8¾x}}Ý÷=â‘þä0ãî7ƒãxà3¤XüŠeY–zŒðq™‡e²0ÈÕYžK%BÝDfFôŒ„`çUhfÎsádòià1ç¯æ!©’Æþó‡Î·éÕ·»ûq{(ÏÉ¡øå‚E¢”B3ÒI¯¥FDDJ¤8*z¤ËŠW æN³èÑÍ ˆÌ=³¥B€™ã9Ö“ÉäiŒìyœ—÷çÙ1´²õŸf8’Zkû¾g 3[êº./Dé3´'¸øýú-a÷ *VJÑ@•)±)PìéÖà ™²"±‰(dï‰3Wö²Édò>Æ!ðÐ]ñч+V)¥µvQˆ»ú¥#{U¤™òh²üÊÑÇü°”LPãø ÔR¹¸ZìÅÜ,¿·ë5£¸÷ºoŬÞ£mÐAs êSsÜ>™|$ì{ïM‡m#¯þ´ñãO&î'înÆáÌ £C#aîïµjÀ#ktu©RŠEÏL:ֺ̳TS¿®\^*E~ÛZx6o^ fBo´ Œ4 ؞ʡû˜ÝÕdò)ZkYÌ⻫¸:ï-Fî¾®+I·H ÈNk`‚nþ„—öÈÐ}DbdÄuÛRy¹\ÊlTTÇo_׿|ýRk•IõèÝŒR4óqŸ8z4AÑcV¬Éä3 @€™ÕZÜlŒÑ3ãy?üÔÛþ3G6X*;°™u²g6¿þq~}踙û1u«¥®ËªÀëëÞZO©!¿÷ÍLpÔUiÜ6¸{¦ŽCÒ€1ÆŠŒÿÛy2™üIŒ“Ͻfj³Ææà½-òà‡uœÃ+ööºïßz|[fÏfúS ü$˜ÑÝ€(^¾~ýRëªd¦R”Ùqýþ]æÇq2HãBpTa)ƒF¯Vt¾‘Édò ÈûTúã$K­czuó½ï¹xæ$”2£K&dž3¬wñÀ k´}„H ¢Gß‹» (f^j©rkÅñ»2hXGâ yimz+aئ›­Ë²gü¼ª4™L>Žóâ^g¼ê×øûÜ×iËR€  ì9¿\°xŒ°`^.þRŠGö²”T¬®k]W‹åúºEšÒÈ2¤ ¤Iqv†£àÍíñÿŬW“É'"%ƒh&Äè°FLÌp]×uxºß¸Y¼K _Θ 2<É`æa±¼Œ”ʺ2€0v“ªwbß{&H7À0|ì3j­Ä(Ìȼ}¡¹H8™|®œ„Î2s+8_¿~Á÷ÞL *G’C%h…ÈI?¾ÿùè#3,ÜœŒì­]·k3,—ZÜ^ÛvݶÈÒ3@ È±9X̪t=7¢Ë‚­˜ÖdòyŽñùm¶|æÒŒÝB¶ÈeŽ÷Ù£)4ЄCµ7( òh-–H‘ýg»èÉdòQJ 77¾ñ Ô{N2Ã!*3Ç 4ì±VÀ¨UÉóc†õçæJ0À8Nª0šAk)^¬˜Ù#÷}ûöíußZ­}»þײ.µ·µíjmÏt²Dô­µ—øâ‰ 쯗Ë~o¿ÉdòD$dŽH®|ú³aÃ(d///7?¬Û2ÛˆÔ‰èœNˆwþ£¦½ OWy)G,ÌÊRk­CS‘Ê.(ÉlD‡‘(R‰Îè gRκÔÿïÿï‡ßÃd2y.ùÛ”jšÿ cøÉYôöu&MÈ^ ÕègVâýÇÂü°Hp4w¤\/A€2"#G÷%=¢G˜9ÁÖú¾7ÂF©eñõ²¼ïL&“§!àº^ÞÒ%î*ÍÍ@æ–ñõƒpÔJÀ ,ˆUmÉm‰mÑu±öåRùgïâÀQÜÇ‹$© tÑ„â^}õbÕ‹‘J‰9‚~2#S¤óè#‘­]ßó6&“Éséß¾}Ûö}T˜¡a0¦ì8ÓžoÁôµV3[×õ/ûÛ·ïßÖÊ—jUø]; ¨_¿¼,ÿ¶¿çU=æÖpø¢šjW#!P*à¿ÿöÛ×õËï¿_·í»9*!’`ì=®B3K/\–ŋѮÛë{ÞÆd2y&‚D®{ °÷ÞÝÖuˆ›±Ì½‹äËËK)e¿^×âÕ´+² ‡RI¸Ž£Ù;š¬G ün–Zj­£M2 [xò·Ë×ûò›õ¼X©IïZ` Ì={|oýwa÷*/ªK=Wýu¬ÉäÓ €ÆRÊmT.å-xHšÝ־¯¯ŠÎ £¨4²»ê åmk\–åëׯ‡ErÊ„ÅÜ"ÿëïÿÉ–U¶Ò«XÅ ˆ`9VŽ‘n(ÑÐÛÔaM&ŸCy&’6d ÃûxYŽ¡óÈ£™õãëZ—€>Œ±` %ŠÄ©-ýe 8PGG8N°ãK@‘íºÿçüÄ0.ÅY+˜;ÔöØ®AÉ æ^–ºža´Ç§“Éäù •™¹bX­QÏ£ref=w¡ÇOíûÞ{'½.«Xe–J™Iht*ö-!AB¦¾˜Œè‘”a Ó3b»nnr¿î £JÊSl ½KÉS›O)“™Ð÷ëþþëÛûÞÈd2y’†aÃ]3¤[±Ù¶íÿøÇOÉÆx+2 Š x,QÛÑ”blD?þÂPºÓdìtX D37sÈ !¥ *U¦ J…ÛB@Ù—hÒÍD»öøýõ½‘°“ÉäY¤Ð##ã¬Xt/f‡›;Éu]Íì§š5¾$0€Ê8" u8¾ó…ýºÒG4¡ Þ[k–©Rj)‹[‘<Ê‚•P… P•]i΋QÐŽc&iæ7 ìd2ùx$ v¦>¡z)>¢#*õf1zc7_šÌtÀÍ0\ÑùîdÂ~Áiß•=nGÙZ³*¹Â%?³}\r¥¥ ¨’Åìðo8œW…ÄÛ8n2™|8ÜýrY‹»†ì]çþÍè°¾|ùr‹wDľï­5Ë=ygƒEJï¿%|äHxs ?¬…ˆ$TÜÍ–¿þÛ_#¬÷{ÈÞCÊŽ„iµ.ë:6'9œtnY¾û½L&“ç Tì·D«ˆÜ£/ËrÛÅ92ÜÉŸÖ qæëH‡á‡[ Ÿ¥ú€ßÈ+ãm'åvݲº_.__÷ë¶ „D©g"I’l´>¤hÓ/€™ó88™|Èòðh­ÑØêz½ÞŽ„7áû­›9ÒFulòA ±–RÊ{m’ºQ•jbzfÛûþn gäÞ:m-Å-,./uÛúëÖÁ$™Cq{ç“Éäs ))óŸúÁŒÏì8¶ÖFÃ…“)N#­óß„ù{ss~½` gD—e$aÃÃÏ­oû7ÉÆù./Ú¯#WûZÛÕ//—¬s4’™ç™pÚ÷M&ŸŠó#zZ—ä{ÕÕ Ï÷ÃO™ok1"ǰúÎ-þ R5Ї)»ÐS“RÃQ” h´ ÙRIØÉHé€RÛÞ}º÷M&ŸŠ3æË̈Ӿü< ¡øµL±§aƒÑ;—ø† ëTŽÁ÷c5ë±Õ˜`©#dq\K¥»¤½µ×½](•¥PŠÈVª3pFEòLDDè=æ‰p2ù< {™Û?íFq$M¸ÿâ|ŸT86aŽ´·\ÃáHüÞ‹ÂG,’]ôC^Æ< ¬”àvmÛÖ ¾xqw3Ñ`CÓ‘ ÉH'ÜM$i–˜Aõ“É'âP¹}™:—ÿug1æí¥”RËxfdÂYj5³áªÜ{3"ÞñYÿÅ‹$èÀØ2"Og Òˆa5_‹¯fr¢K¢¤ oý #:˜¥ø²®,%Ýfîódòyžî¤-µšyD(S§%ÖÃH£I…ë²^ÖËX?ŒèïïKX9ÖaØ`&òx ÍS2³eY2Ð7(=s¡–PO6g×sv@4+µîÆ™ð5™|*”ŠHu©î{ïñG+ö{íäÍ.yô.hVÜ×Ë¥ïÛP:¨ÅiÀ;Ú“_-XªÕ×—šn\ #q¼HŠdIHrÊ‘ÃV”ÅÜ‹ÿ$_Уo=oŒ“Éä30:,iH=y[œEjŒÛÿégöœÊ“Äëõúºzk»f…ðZ–bí#ë_;Rð!•ÔS‘«S8“PDo×mÝöDÂ9  ,µ.µÞÙcßöÞûOO&“æHÍÑm­€î>Rù‡äã·L Éè m­ýþúýu»†D¥x­þ¹û¯uX§×e([øËB…AïÀØ$§†;€„ú¾åžûéÍqÅIÝÒ“ÉäÙªÑÃ!FC¾~¤´ßÁûzvîëd¦#÷­C±+ša«è9æF4{W ů,Ü(cPA0AÑ»˜É=½qé5#Õ¢Uãb&CÏž×ÈÌKÃWwyf2‡/¥’þ®dÅÉdò?@Ff$" DêmŸðŽ›Ÿßý#™yŽ|Ž'ôÞ÷Ö"Òì_ó ¿V°[PhLûÏzyë Ljk„â i;I2„ë²jYY êÂe±e)뺸—a¬<™L>&˜ho iù©yR¬ëZÊ1Y ÉRªÑFØ3‰ˆÜ[O4Rÿ¯ÖÏ/+Ý3óz}õ0ÝÝ,®§þuüo¥23ÌShæ…°ú‡‘ÒA9;¬Éäsq¬1aÀxÍÉí9ÃNjÛ6Üݾ…zÙ£GJ2!žÉë~±` 2RåæÓÌÓ‡¸3{V¢K­$zo^AŽà¯,á9fOqÄûé‡Â4’S3³”²,˰N&)H´&V©á@õ.©û¯;Ž€H¹9¤‘1æj£N鈫€‘Âh÷¯qØÿÉI7³¡Ñ˜3÷ÉäÓ!d({©Ã³Á”ÊÌûÕ}ß{ïîþåË—ÛfÆ,û‡_8^ïšY?OÕt¤Wy[5"q” 3V ¥bw‚´6€`tî³ÁšL>‘¹µ¶eÆW‚ÜŒo¶¢o_’ö}ÿöíÛ¶mÃ*kìšñ§ù¶»¿3üù‘˜¯qa>&ع9d` Ę +2rÌRÊ2j‰©z)V¬“!îMœ~“Éç¢G|»^ÿý·Eä±a7LÌn÷ÖÚa7,íûŽóÞ°x]êâà…z†Q¯ÞS²~=æë¸DïQJ1ÚÈW„@ÚËII9½GDH„©fhÈÜñÿ³÷¶=ŽdI–Þ9f÷º32«ª§gzÞv5ûa° úÿ¿B‚Þ @g€]¬vÑ3ÝU•¤û5;úpÝ=˜‘Y•dLWu$tT'˜¤“él€3»ÇŽ M¼ÀV2ôo1y ¿k´ï?ü¸DÓs­$IÅý0“‰ˆˆè¡þjföpÖkÆ]ç´ï‰'ÍàÆWW…w*Ý·@I@™i´%[€C~öFDïÃI½ôµÍo"!¯”¤\ÁÑj0xƒdêÜÖ¦L¢[ÌPÛð ¯è_?$dk‹'·ãù”“:Í˜Š—W6®_•aI­E‹uY—`d^Öå|~Z.gBîÑJñ‡‡“»¹›™hxx˜û±BïŧŒ,@_îe ^ÜýÛo¿+µì#yÛöæÈ8XÓ4í™peF (3Z[û®0À%Ït n0£]«»îá‹TÙ• e:Ek‘]k‘È•¹0›K©%òéßÿp0Ÿ çe¡å4ÍÆBL†D¥ÂìÛÆƒÁ/ˆ™ÿö7¿y7ÍÖdÜÀ("iûµÆ½³/¦è*ÑØV²FÆÚæ¨/ú{ ¯ðö™]ÏÚ %¬Sµ‡o¦‹–LVwwcês±’ÌÞ©'¦â-JÄÌ Þ)uÓ;Õ› n+‡ÒݾµÞÌê] ˆ,nVͰ¥…yYŠ/Ëáçó2öo I„ùf·§~à—ØŠ¹÷Íôꪟـº§`-º›ßÕÌñkæsî\ó¥.‚/žÀº63+tIn$é^¼¸€:ϵTó’­©+SÙŒ-"2L C8:¼-$!Å„ h]õÒýj^mf-Ûpž¥4ƒÛæRšÊm°§ë^;LxÿŠívÕåTÐÌÀØÎ; ff©‰æÛ·d¸÷­;FŸ¦©x 0`X5 oŽn~åoËg¬›[Ñ®–Mì˾®µï|ÞFAÀ%º3¶Ì Ó$Gþ::¬}QO¿æ ÓT+­fÖb¥`-§¤…’YY¦Moªâfóü¾z5ºÁñì@8 Þ [Ó}Ûمܲ +î)õÞyŸ"<Ô Ÿ2¶–f¥ÖÉÜ$•F¸¯4F¿Ûq´oéÑæÜº”ÅËÃÃC)E©*N‰“ì$¯ Kš*r’*Tzt’"î^Å1 ~yúì]©…n"ÖÖh,îÓ4íªÖ¶S¿O뼓µ& % #}_ux?wdX}ˆ°ëÄúT£õÏ‹›­ëjf䲚`‘Su³i]C4ºEéî–©y®ïÞŸæòPþðã»oCwpm‡Õ÷¡v·†î•ü©ÞýÈ?úeÓ4m»*˺œ›¢ýZ›Ÿ ºQÑÔÖå|~„`tí߯¬™Ùæ:µIKHL¤Z[À4ƒÔ"ÖóVÏu]F†5¼A2ûÒ (¥,kôQÁe]×u-¥ÔZ_äVø8Û:”YÖ­B}ÿß«oé® K…,Å•K/£5ˆ„!ûjœþ%¥,ÀœYüñÖ8MfYæ²Æš:ƒN›3[„­Ù–奬c0¼Zk™¡¢ˆòoîµÞ§J÷ƒ~¥ï“ÒšhÍ”ñklÍÙE fVJq/=OóôÍ7ßôPšiD¥&ä)›÷Á£Róýûâ%3{Ö@4‘»øu0¼!Ô £Œ$ÕÝ €Œì«[>¡¬ÍŽXœùð`ï]nÈ×åY÷¬Z«i,¥Ôiªµ(33ÝLØ·¿Êˆ"U¥…,Áš]AÊ}œÛrÙ‘b oBˆþ³ŽÌ.kŠ ]uõsoÝ ÃCè@˜Â¨b°Wÿäïkº÷…ƒì²ŒÝ¸‹ÔÚÖ¾_Û2¥Ö¥E¬rm>_ ç3#£ï¦|³O%Ýüßäè5 ~![“«ˆ„º©U÷lø´uõY2ór¹»W[k”Û¯e‘¬¾5ÇûL3€}†RÒaÜÅ„Zk-Z_N()SÙÒå&§lÛcýÔa$XƒÁÛ£e$¼þêÆhuhJ{ëç9]ô΃MòÝ[s2“4ö™B(ÝÞ$$<¬‘SóS5/>™`¹–('>œ,Ûž[ef$h6"Ö`ði]·ôSÜsCýs!èxµ7©Ý¬Û'¸™ñª¼»JB¸¥¹ÑK$<2[ÓÌLnp(–§õÃ9VP&̧iš&d£àáîó7'>.«É »7ÎXƒÁÛ#RÏu¶9âë%¨ý(ðÚÃW/=N„$wo™Fû·üäï( ¸Û»w¥Ôu]—Ë%#‘F¸PÀÖUv‘¹RaL* KN%ª7ÃJ5fSF’&Aãˆp0x“¬­µµ)ÅÏ ÙO§S÷“ù™OØlf ª@hž§cYô½Üñ6¤õª8ÖQi\„%kx„Z&cË\–e–›Ì`çËòøøø«Û©Ls5*c-á`ð&Q_ÌyÈÜ @wÿþ½»oý©Ï°¹$D63™q] jq·B„pw²r_IhÆeY„ ‘PJZÖU0÷ÒÄ„rÛN ef‚æ$%´Œ5–Æ[²²E Ö`ð!½,«‘ ±÷qÈcÝà<Ïçóù³¿_m‹í3³ÕZÝ‘ÇÖ/r/0ïäžÄŒ ŽÜ½q5ô!GRjknÈj1Ð%"¡D!XÿÖ’ÌÑÃ Þ Ûš¾LwG/ ÷lj]×ÇÇÇ® =¤¡/жþOfü0·B¼úœð®Jr³–¡±ŸæÉŒ@LKËkF‹hj'+fNÁa‚ŠÌT:ÝÎÂÞ>£0Ö`ð&I!SP¯¥6ºÁh´öôôÔ—ªþDI(Bf(îïÞ϶®p3NP¸9~Ow¢W‚*Að™äS‹@Ê’ÉH¤ÚÄì¶%д™®¢{§äÁàM²¬ë²®îNj]×3B’›i·Äú¹qBˆwzWÑ ´ÂÌ_GéÞóAv«Ì ~Béj.·hP‹§öt––%•aæ¥X¶>8™TAäJ#Í™ÔC7:¼IRpsëšq²E®ËRŒµV`óAøùAh%òÚçOÖ7ì¼ÚTꎖ´7›ºGŒq×9€¢Ãz®#ÒÅ=@¡œ‚¤ÈŒEº™»CŒ–£5¼]h‚p3e¬ëÒb;%ë¬ë_Wl®é½õef˲FËhjkìçl¿¼_ÿ7lW} ØvO /^k™…VáEn‰Mưo|ý¨&‰Ð놶ƒÁ¯@ˆGwÜȲ[¡wYCw¹ú‰·¢›—RÞ¿ÿþÃ?|óí7™X—Èøud ì«ÇRíz Ùvr€®ƒÎëꡚzj™ ·U%§ýz3“E—•¼7hƒ_ zíĿɱF$$šŽWÚÏþ®ß·­Ù2Bˆÿé?ýç?>š¹ ûá/œaõP’»•R[‹háî€(@…êšöá’çÀSÃ9r‰\û°ÎÕQ­“Ƥåhºo”¥mª§+ýÀ »{Ìge”¼µt÷¿û»¿-S!|®¿™Ê·Å~y·Ð^БÑ­º¹VÆÃ3 ­+ÊH/H ¥éùKî—"ÃÐ}0x³$ÌŠIĺ¶eY³úsIÆ^{1Å+ÙÖu­µ˜1²ŸnÜañ)÷ùaõåL 07`ë¬&˜º1 ½.¡§Ëj¥z)¤®·-’}wtJ-ÆÕÁà­²Mp7tÅx(´U?%hØî0ÓãÓ‡ˆÖµ Ú—¾î~îêa €Ì€¼xÙºVTng…H*]Id*Ö4z©^J9Nýh  d»œ‹’a#à Þ(‘Œûð³7s$k­¥”ŸŽY2b%¢ï¡P 0IØ&t^S\Ý‘auí°õÙúw@"ƒ C‚¹"`àæ.A©¼\.>Umèc+ÕÁ`ð¦ÈÔñ‹í{ç§iꦩÿ¢_ü„u¨Ÿ¶LÊ"ðûßÿqY’Ü$|­ÃÌ}J÷Þøçž%¥Ô”î¥QÖ„T–RŽÃNI­µˆèBþ}ɺX>sºo—>JÓ·Õcë²£{ÌìC‚/]’÷ÓCÒJL§™hµ<(hî¾ùöýÇóòx¾÷~îSº÷¾ûþ µˆiššà@b?BØ´ :„W=fõ/FÀˆÈ4•Œ¡Â Þ.™RÊÍb³BÖV9IûfÒÏn 0cÉìTç\ü!´8)éa>ýâÃÏ$)¨ÕK)µÔ¥­]Gfdc™›KŽ»/Ë ”âî=<ŸÏ˲l½°íhq$XƒÁÛ%"#ÃÝ2’nâó’ÂúïÓª°[¢KÝ=Ï¢y¦™y" ´Ì×™´ÜsJØKBš[éP0ÉÜÎ8 ù2³¯C{|+)I$ÑÀ¯ƒ7KßÏ 2”tOIÚ|Ù· òå‘ßõ@t¦2õøøØÏÜÔ”¯Þý|kÀÚlçAB]Åà€§<ä©"”TIxÂR½ýÜv÷Òùèã$.ÊVlˆƒ7K7­`f^<3[Ä¡nïÛº~¦JÚ}•uÕêRöŽØ/Ýt7‚R&ñ”|[Ò—¨Eî@h,ûœPBú6ÿÈ~öãM Ýè`ðv‰C‚ÐPìÞîýÕ£$Äç¶@÷+[kµÖ½ÛlÙ½.ǺK8J´P xÂæ•jû8w3Ç>ÙZ»ÞD€½E?šXƒÁ[%R”Û¤ ÁÞê邆^èñ*#¹®¥ú“]!PJéÇ‹[Öb¯, ï X‚™õŽÔº®—Ë¥­­÷Ô.¶8j]²1OS÷Q=NÓ4­ë ÀŒÝŒ²ËɃÁ[$"2·¶Í¦WÈ­ÄëV ?_v_–ý±eF*»:êu%á==$‚‘¹®ë²,‘QJ¹®õzô!ÉÍ- H<<<|÷ÝwûÑ&‹ï­úaˆ5¼Ybû}êÐyîÝô­Tê¦Ï†­^öíЭµ®‰Ê\ÈÕL¯[¤zGÓ½'Ý>Þ6ÁêA{†•™4ΧS/Y÷rf~¤‘ûW$¾œˆ o ŽEswA ͼ—MÇ* ì¿âëVµ»÷—>ö¡‚dÐô‹ë°þâ/¾=NsÆTlf)V°mÔ°>(¤ÍNóÜ ¹7o÷ùáÇu]ŸU,‰ ǹo¯ o™£ EC¤  û­ÎÑÃÚúB?±ò è!Á0d·j¹—[3,7üû÷wnt77§;Œ9ýPDºdMÙ"úé_B0“òr¹,ËrähÝ"F‚5¼YrÛ{³÷<)_X5ôêoY–Þ§¾~þx¼ŠÀ _%Á¼5`M±¶¶(›¸\‹§ZNóln}ØpY×óå’™Üdz¹[k½Zžl“ÏCÕ0¼]Z*ý£IeI¹/ÂÁGOæÑƒ?äW¸ª±É3E]Ñy/7÷°Èu]Z[#¢H’‚ÌRX+hAkBËŒÌì–‘‡CC/hû÷<æ¹ó'ÚuƒÁà-°f‘J{n’?Û—õ^v× ô_úÑä:Z]ÇÞ/ À&¾&`ÝÚâ; ÌÔÞcÛ<ÜM´Ì¶ à’oÛ 7Uv3¬”úÈÎÑ¡7lþ¥#^ o–ËÚ>,瀔êÚ©¾·{7ý[îþ©T—>ìuÕ³á0_×r¿=`¹ÁŒ`©x.¤`ÒÃ,@!ÂÍ#ÂÜ#3Z”R£’Ç]?ï  o’5b‰i`þì8ÍÑí¹Ö'¯z[=ÖÒR ùý'n·¬m–†„›™¹$)½P ©tÐ2‚S5wH)­ZEgŸ™éæf¦l$7ŸåÁ`ð&É„õÀb¦èQrŸ>ò©åáõ'h_\hæîõÝéô×óÛ>,ÆïRìvn XfÖÓÀˆ<_.ÕJ)æþáý¬°Öb)uJyd:XÜ·¥`™Ë²ÔZ¯úpû-¤ áè`ðv¬9yѹ=uãƒcÂFŸ3Ãz~ë¾YçʵE—Kk«Ü&7— w®t¸5`3$DÆ¥a.2:é‘ ‰”}IlnÛÀ¶þz È̈h­õÙ"3²µ6Ž ƒ7‹$º#[7t×c^I®>mB¿8=\–%3O§S¿²-í_þå_ÊôÞÍq?7ËÌ”@×Ô"6¯d5¼‡”v¨Èú©ÑËå²,k_ýšÊÖ†ãè`ðvi‘i´ZÌfmç|>w)øÏgX½ ÔÅY[éèM¤ùT^±ëëÖ «©•¾›õ±¤BXjqÈ Z¬@ñÉÌ@^–™…#öá£ç¢·ÿùªÈÁ`ðëÐ2d¤;ÝiÌHdŠì ½$<ÊÃëmƒ‡PkK\6eC€‚Œo¿}Àûý÷s{Ó™L DÐB”´‚„ (¤Kp÷bÕÜEfD¶f…S™K)q>Ÿ«XEzyåØÁ`ð+©–YœI¤änGTêqª6b«£N<¦ŒK)ó<÷˜Ñè+,åk©þŠt忦;­ÛBì )4³Ú%ë@‚*ÅgZ·ðóR(ôZ×Ýûàc÷Ì"·Õׯ›Ø ¿‘ù´\ˆÒZËŒZ§l™»í0[—¸_¹í­kÕ(¶rJ@%kV^£¸Y8j.‘°-:Ñ”)¤w¬H1aFw}†t]ªÙ©p2­­y2$2rùxòh0¼)Ô=ÝD2D²Ÿ ´®\OI:±ùù=›²Ÿà¹ÿ³í6ýÙö×Or»¬¡ =Mœƒ4<ªÂÃyFzžmDn˶îâæ’Ý"t D8Æû¿¾ý‡H6´ mv_j—Ë—°å²˜O$!ôÆV)xº÷¦ƒÁ¯C¦ŒÌ-cÚ“ ’³ÅêÐŒâW"Òcæ™d­53{Øê=ùcn‡¯ÚUkÀJìË æ‘ÇÚú. M¢¢a‰HúÉæ}U¡ VyÌ"±ÛýQÛ&ÃÁ`ðv1аé”ABšB-&Z5+ðãí8=¼\.Ø[ïx.÷ô G¬;,’%Jfݺ]›ñ È^F®xé.4a5üÓ{”ÝICn;a»íî[ ¿"äóbÑ^IµÌ„ä&7˜%Êkk».]×µ+™ú Ëöi=ŽˆñŠIâ›eP{I)¦¦i’b]×Sé÷×Ò €ZkN? 1?ÌV,•Y„`™h€’bmB÷Áàm³,­šC:/kE‘Z§yYBíÜ´æµQßÁ!qx6™‘AÞÿ³_0âF¹Â”(naVH#¡åTF3AÙÁ6_Â~x\ÿå?>.k’¹7Þ~^×? Þ—%ÁRjÖ[9  ¬ÐÆÄÇ ÖG\oÕ 9AT‰ª»¶v¸cø…éM¢"ÖK[W¯“qU^¬ßŠÌÌdŒˆiš3ÕÖÏó©‹Ç¶œÀâÅËk ƒÁ¯F¤²k/i‚ ,‚‡jôUÊ]  äZÒ}¶%U2Š«˜•W¸øÝœaúž 0I‘VJÍÌÈfÖO»˜ÌŒó<íöƒ,¥<==ýðÃû # ’ sƒ·Í‡Ë¥E£ÑÝ f‚'Jh Õ@ÍD^†íËVûqáVö+e¯Qºß^¢ïç!’ì"SÚ6 ’}ÄÇ'êsF˲|øðá‡~x\[J÷Áàóÿþþ-û Z¯¤Ðc–<à £ÑW ±»¼÷µð­µˆ¨µÎólVºT“ÝlùNn×aXš;Í2-3“…}Ås?·„APß³HZDôU×’ú­ož^$„ˆhí>û®Á`ð+³FëÓÁ-§æÙAgÒŠ™jí:`õ’Z[ûc/Î>Ý'ЉûÅî·gXƒ ó$™¡m²['oóÏI®Î Ìì›o¾y÷îžíÚ.|•<0üjD¤™AŠ.¿x-Ó4ARŸv;~Ë×C9RK¿2#"Z¶µe$xEQxWI(@»Ê}+P3÷Õ‚]©  –ZëÔ %úíÖZK)}[½ Fw³a/3¼iª A= +HŸªO•=Óºr>ßÞµM®=ÌIh-–eíFž‘ àm¬›Þà€›ED7ç£u#ú^ æ¦(ÛJ¼f¤¤u]Zk™ý^Å6Y÷ °šæê¯²˜ ¿J1Aæ1ýG²¯bxx÷®”òYq’¤ŒÌP& Sò¨{ZÖ‡‰ï½™›â·ä-û"ÁãI¡›ˆ/fû±`DœÏ—KßÿLŽÉîž™™‘ÑÜPŠÛ+LRƒÁ¯È¦¢z~¢7užW¾0î Ùgï´Ï|è㑃Áà-cæDÆ1× «k!ûáï¾ÑEñÛùšhÍ,€M Ñ^Q`ÝœaÑÜÝÍ%µåv8Ðo83Ÿ¢åOU³}͆$c½[fF´c$r0¼Mº/ûæŒÎmº}ëºö<ë¸ò£€¥°xI<Šgq[_˜—Fé³ÿâÏpk†µÖˆX–…æ^)ȈÞÿï"Rs£Œ4 ïGÔñz†µ%öµ†c‰ê`ðÆIɽL6ÕK;ç]bÙ®„WŸÃú¶1H«Y‚[Ε‘åþÕ„·6Ý#âáÝÃoþâ7ÇÒyäJ„Ë•ª)ŠNsÀ6Yìñö=Qì…nl¥¯›ùðà Þ8™Qjq·ng×˪ë|*"^´Þ÷Çdnó<ÕZçi.^öÂLnwë0oʰhÌŒu‰‹›¯ !I¯PöÓš;ë•|a»é>It|IP²üÙð< þüd¦Ì"³7SÌÍšÙ6W·®k¯Ÿ>6êë lQ¬¥LS©µLóDã>¹'3¿wWýM«Ë%ÖuAà4O@wo7¢@°+ÇŒ/núº×ë^[%lf¯ZW= ~5RŠ /ÇAµ¬k©µ/Èy‘£àãƒBAÜ=#¥hO²^¡Ãº1`Y—¶w‡À”¬‡N™dHˆ&!3“Y§ÉÌÎçsfÖZO§Skír¹lÑjwóR²ÇÚ{ïx0üÊxB]°NÊ-{×ý: ùøˆðJ“ÅL]Ö%¾_2˜i¥£N§LûÅ,’NŸçùtzØîHu½»v»ËT¦Ž)m\¥W×Ñ @×b°[Ò ƒ·ÍÉ'FFkiXÍ>Rf½pâ¼êóì¿zAJ¹ùIm½ëWŒß–a™pw!%mÖL1C¡ÌÓ€ˆèj÷ÃÚÇ 3š»¹Åº,ËZT^µ8c0üªLp¤”™îÍÏ—›4BÊ+Y¥Ö"1ïîݰXŠ+3dÊ”"ó«Bk„ÕZêdÞV±‹ÚûØ º-²”0’B4f3+cUý`ðöTƒ“—„¥kŒˆR ° Àè*‡Oä Ò6Ê£nîÒZ[—¥Ö‰¸;a¹møùèŽo’Vô•9 ¼O¦3seʰ;ä’™û¨Ñ1‘Ôç÷¯2zXƒÁ[G¤ Ó¤”hæÅÜÉ(É£œú©_t—4mn3½¿ÍÃܲn“5ÝO” `Ö…÷/¿˜Ô홵ÖÖu]¸ê²—µîÖ oš– Hö„E®teÚÞkï×\?ôfÂÈÓivw%2Ÿ“Û:\wÛ„£¤¶e‚„ ðϾñ°‘é·D.ËrhÜyäf@ €5¼}æÓT&Òd¤d‘ÐËÀëÑ|<£Í(f^k·Bànžµ½voÛýÆ’´L´=—{¾›ã.{0ê»Q¯8œçùÝ»wÓ4mö2Ú7OÜ[ƒÁŸw–J7‘„Jñ‡i>}óÍ7××b€OÞM@­­Rîž Ç`â/SVC‹G7Nóüô´¸Ù>%´ßÑ­¶}Ö»–¬GQ3S&Asƒ¤¾6Ì‘a _k¬k´E ÷4šáhõô¹œ#·Êwa jkfæéÁ‹w#xKI ÚgÜÏqS†eŽÌ ­‘Ù¤ìÖ}ýL°ßqÐïÃÈiªÞ7]KŠ„€%{?~0¼eÖÖ.ëù¼œ×5Üjf®ëú‡?üḠÏB_Ÿ¹aó¡I%¤ªœ3ª±’ðnŒÐ‹ïº“Û–ùÚš;Z‹F@v+Q’§Ó©”rL8÷[¼?ÿ,?þ¼ŠAìó0@…ªÛ©–‡R&nþÅ­Ý;ër£[ƒEÈÝÛÚ¢áEVÄ«}>Ç×è:îÞëÄÌÜ6)îî_"h>ÂÕ`ðö1óµ@¦Tk­µÔZ_´Û?y¢,T…ªóTü¡ØÜÕ—J¥Tü>íè­§„n0© .°éö€ÚÏÛåd—ËeS6,KwïÛ? ’¼+#` _æN£ºtëVi>ú/?#¨”ArÉ"¡L¸{­•ÆyªñÝw÷ÝÉ-‘6M§ËyuŸæy®µôá C]…«ÓÍ¿´¯{í¹Õ•{ßf]¦/ü ƒÁ›ä鲯]™™]æþÒÀKßQîŸè&­”RkíqãÛoÞßu'·æÀݪt¡Ì@^7Ý3óééIRD¸ûÑ̺N¸j­×j,B)µ^ ƒÁWÀù¼¤©x±«vn:1K…$(ef€ê"¤¬w–„·Y$“”¹y´4‡;#¥ÝJôO¥”RÊ»wïûÁcºÖº,Ë.ÁH @Íl_kDòXEÚ…Ÿê6_x'±çe’rž§5¦eý!± ½”_¢‡¥zfì'‘ÖW_ðŠ~qîô¿v¡ÃËÔQp±;h0¼Q"ôS5õ]8‘ÑMîð…‰à.]Ú.˜æ©–b&s¹C¯¿€p̈h’íÒ ±çPÇÐc?\–åÐ7Œˆ‡‡‡#ç¨L:Ý=ãçìƒÁ› ƒ„÷lÉú®®Ì­¨É•ä$3E*“г–» q¯]í§„ëº>==õ±›nΗ{B¨žX­ëzXb‘ì…—Ë¥ëʸ{)·Ö.Ë2âÕ`ðöUk_‚Š}šøç¼pÕzï1aY–¾–B¦út!$è¾¾Ð%!•™ÛAÃ7×=¬ë£ãù^v‡¬çS¿mE<犃ÁàÍÓTÜ)åæÉ¹opÆ®m"y èô·?÷ˆ€’+(’ñN¿KÂÍëx¶¶®+ß[ý=ÚkÃcv­+HG‚5|<—˜[Q§k‘À³®3˜ž ˜™;mðqY.ëÚÚ‚'™€ßk:zë^¾ÝËÌHÓ¾v°ßßµ«_ˆÚ;=´ñÙ.¹û®™C×0|¬k^.at3€+l>3Uw¾õFÐõ¤°„ˆX–-3M¹Ù­»œ;7ö°6/¬­DöæW-\;¢öÛ½V”‘œç¹7çl‡Ä|ªµÖá<¼}B¬õ}ñ‰2ÉþdïéºìÍm©ŸÔ‘°>K(p²Ü»èï6?,÷”H”RR¹m~ÝŸ³§ÏÝú²,>|¸þýP±ÅȰƒ¯€Ì4ÎÒ”‚ÐÀäOø±<üüw?Jñ.2'ÍïtðûrÀrÀŒ|veîñæå–×ÏÒÃÙG³+ë®g3ÀÁ`ð–!Š[.‹gÉî^ /üüŸß½KŽ€Hq¬V½‘[e À¶¦U½…—ë_<8þÚ=ŽÖ»$3к ã”p0xûdFµð\jý|½¥¬“Á°;Ö­[súG*<öiçCˆñÙOèÇœ$iîn¥˜­šp0ø ò4sæZ.1”)úfÉùÙ‹¯|Ï̾ҡŸºhÑRV‰¦ûÕ=ðÚ²½¯œèAêˆe‡xì^×·ÞuîR#+úªèÁ`ð¶Y# ͱΖE2õuÊÀÞ™ê›ýŽë¯Çõj­Ý‘¸”r>Ÿ—åâfføñÃãy͵Å]º†/_L@™fö¢}1ó|Dk>UÒ$å=¦£7eXŽ  hùôôØvÁEGîÞMwßäÈW´X¡‡k¥Ù`0xÓ8¤‰´"Ld•Úµdá˜fÁ• ¡ÿü{ËèºêznÀïâι­$„ú<ΦT­(í Sù;® ÀãžÎçóù|Þ¢)ÁˆâV§‰#` _ ™»«;Áb^©—k¾zîÅ}ë¸X×µÖz>Ÿ{K«Ç¯L¹ÃÌïêaÝ`/cÖ5©=s#q,¦ïtwÁ~ñ!³:d ýÊ-¾n¦Z™><§iƒÁà“ÉR|šœ™[Ϻ¿zè´–GÕŸY–¥ƒË²\.—~hx¼ª{ZC_ΰœ€ÒÌ¥”XÜËT¥<” ]¸°+´ïtþ-úAf¿E™{FFjø_ RN´Ù乤œ·«Iæ4M¥,/’¦£N|zz:t>QAÜÄ—–õj“LÁœt3K%6«, @¹{)2o…~Ǽ½Ñé3"b´Üƒ¯‡ÌJXœ ¶i¼CTyÝœšçùÅeîÅŒ}µi /¼V IDATfOeÒ¬H¦Ä]=¬[tX! ÖyšO'/Ñ´‚`”šÓ z€ о-GW+"¶ö=pØ< ƒ¯Í–\ŸJ®®æøL†—Ë¥€×/v?™Ìçž×fR¦x—|ü†¶÷¶”^ÜK­“‘±«öœN@£-´fŒ]bú;?rçnøŠŒp0ü9ˆÈJÕlU«!Äø´£Ó Ýj¦·¨J)µº;™ù<Ÿ¦iîÖÛ[€¿ûÝoo¿[ìeú¶¸÷ÜÖÐã9ZQ)Z!Ú¼DÄqO§SfßFxëƒÁ›§eɸ­½»w2óééééé `š*É:³®20€î…Ûìóó{ÿÿû›Ûoㆦ»ûižk5ä²mš–¤Ü’¤ý2%¡Òmù2©Ì-¼}l1~Îh~i1Fsƒ¯…}u³º´AÚj¹O• f›agf*û¢w" ¤”À®Röµ™ÙÚj[•î}á³t;Ķ•t«Ð”aP°{Ñ 3ûq&I/ÅÌ%y©ÎÂûüNƒÁŸL•RÜL‘$̈üü*Šnßò¬•C8ëz¶BÓ*YIJ›¨óFnè#"㲬§ê£µL¹ûî„LFs¯TQRQ7Å}fžÏçeYÜ=÷SBe¡&ܹág0ü¹ašæZ _´táÂa|ðŒê~èk*hAF7™’ÒÝtÏhΗCÆB=!ÛbÅPv  ²«¿ÜX7NRŠdÀ¶†¬Ïn_Æ@ë{¤m4݃¯…ȤÛÈ 6—¼NwbÁÞ%ê«H%µˆ]`î…ÌÌF:YéΈ?i†%CPʈˆ&Ò?ŠqWŠÕÏlÎ0³Óé4ÏskíÇÜFº¡â–£ ¾Ök[[„䤜¼´fÅe””ìã{ðbÙ²E33ÑZ ‘¬erwIT$á›X òOêÖ`fÈDª­+)›ìzyħލ×ýuífÏÏ4R_ùÜJo¿ÑÁ`ðg¤µˆÌÈÀðìÜ÷@÷ a™›¦¼Ç%¬˜’€õ(™m]ÿÄ~X…æèÿAõ…­×¼~¾~^Ò²,Ýe@e@y9?×:Ö`ðµ À°%RОRaÛãÜCVÊL# HQå…îˆl¹®y¨1#ÚÚÚ7ÚSB&«ß}÷Îk-­=OÕô5Ο}ã> ÙºõD„63©E*sxº_ -³ÿqw í®ž]“•R£`”é‚ðâIt(•d‚ $iD!*¹ ê⬻|ñ¾ÜH*æ…<Í“f³Ï*\?}cG×K((³€Å<¡aé>|-07$úq ¶…]À.ÈJh5¬DÓpÌÁp›5N ¸ÍDL’Ýír¹Ü~7yº;ë*)#/M#âÚëZ&ÚMfº «?È¥”:MK‹»j×Á`ðg†Ö¥ ‚2Eûhoƒˆ …ÜèvŒ ú¬1ˆZçZçRK×lfS÷œÞpT—鴧ǧh-#2ÚWè|¼ÏWKt´_°'_Û,t’A4iimdXƒÁWD&öíºä}×b’=d¡:Aɽ‘Å ´L¹Ë¡tŠùB‹€›I*îÖwól2ª«k~ZN5MS)eYI¥8+%ÐûPõ`0ø*è–,4jÛߌZ¢µ7JSB LFÁº2xÌðl-–eu÷B¶¨wO ¸!`¹)[ËT6Åýš W ¬CäúòJ’Öu=ŸÏ×ú†ŒP ÏëIÄÁ`ðÆ¡×2MUë~.&”­!`êÝ­ÜâO·SžUñ‡õ»™ñ°l¹Óqô¦V·¾"¹ Ö|¼Êõº<ôkú Õ~‹}Ã@5±áä“ÛXƒÁ×é¾-Q&p<0É,UREpÉR¶Y³`7Îãî1e¤EäÚŒñí»oáË+"l¯6?!B­usæûx«bŸì:†išj­¥”yž•YŒ'ÐC£$ ¾"¶Ááý¯<ô@õøÅg}Vÿq›p­*Ø HÍÝ"¢Epâ¯ÿòÛïáË%ad Zöð¢íÖž/ qÇ#Éêª«Ô RDd¦A¤Þy)jC‡5|-HèúKî´Ø DŸË‘º{KÿÙƒ öúlWà“ã8#K)´;†Š¿$íÍ}223 æ×©Ñ‘LõÀ´®kßóƒ=HõîU_B‘Ý.ÇÌŒx5|=¨[bmâª>xG–Æ€€„L0ÀÕe˜~$Æ<6}õª‹fà­Ê†/eX›!Cw˜iîżâÊû¸/øÊÌn{zí?M~;Ø GM8|-Hzº\2EE²Lr®N³ÌˆÔj`[oJ˜Y©U»1úuQÕc‹»ßåÚòÅ ¢’ Äy]Ÿ@”øiqCoiuçuYtϰˆ2¬Áà«AÂÚB)Êöáåþ»·n2Ê Sr¨‰hÜd ÛàUAf½[–ÆÛ-±¾”aÓÙ”$ìù”ò'.þ$f`¯][k©VÕÖ`ð•A³Ít³6À¶/„ï‡*01©¤{w>r¨žd™™»õÉ™eY`v{îò…SBš‰lÊ>ë¸~Ütÿ¹·òj—`/z÷ƒÁàmC><¼{ÿþý{À„o§ƒ"@É ™ S½›ô¢âÛ;î¶ÿõylæn( !6MÀ«Ðëù›;Í®WÑÔ·ÊQ¢dÅj)Úß; ¾ ,ýð«ñ$ô&AxŸ‹6Ë ­a}$g—‘öO8âC:S=}¹Ýiê Ë…ÒòdV•È@·ßú\RÕcÓ4Mf¶®ëuƒíúnH:h´Q_’ŸêÓY¹ ©ôPà ‹ˆT¥·ÄyY¶QAlu¯ê­kͦDÒo»¡$4²&«P§mzü3£ëD©µÖ¥ ×z÷N4#Š{1ïªïr0üy!íÛßüÅoû[#ló2ðì†~‚ %QÀJ›h½·µý¾yý!ìj†ÝÍJ§üö¸/Ê DJïß-—säO†*­µu]çy¾Îñ^¤W™a¤›õ®û`0ø*Hå¾ÿAy1dUÂæVyAÒŒ4C-¼”RëeYõø‹‘áZëÃÃC—jF$ðRîðó|)ò^–Úwß~;ϳ)·ý]×ÿ’v¶¯·Ëßû¸c/%9’"‡}ß`ð!!èÓíV;Í“™C}ek)¥”¾%ëðL¿ŽD×±WoòOxJ¸›Ö|øðár¹@0Z¦Ž¼é0ê[×õXˆØ¸»¤Ëår¹\2ÓÝ#¢”R¼ØçlKƒÁÛ…ð:OïßË k´…ŒcŸÃáÄÐS§î‡þ"‰9.Ã^xžË²SÂmì9õã?fÆéáGÆt\v(­zµ­ó:´WW ÌV˜>Ö| _B“8›‹A@ëÐã'ßéî>MÓ4M}ûÌ!,Ç>,}íïÒ-§þ¤%aׄió¬Ù÷öü¤_¿ÝZk?.4³yž§iê]­í»)£zo™Áàë¡Eþ×?þ¨êaÕÍ J»ú_çSGLøT¯p=kÜ+³µ­y³[ú—3,Ò¶Å®äÚÖKk-¢ø¶šðú¨²¯M=N]xÕ»nÓ4õ’Ì-i¼(/£‡5¼¶¤]‚@ݽ–2ÏÓvçn¥XqsÛÐû/ª[5iorç4×iòi.S­sOJy7ªÙ\k-S)ói.Ó4MÅK©Å -¦©¸—þ±sÿ÷ýÐÏ‹»ž2½ÄårþßÿÿûÿüßþŸýý‡÷ñõm÷^Ðg¿Ô z ‰ÒŸM”oàK%¡ ŒÌV%˜¹Y‰ÌŒ†]ÙЩ#8G?^ûZ<4W}ÚXÖÖF†5øÿF–Zj)îVÜ{©UŠ›;ìë7×;7ssãTüÝ\çÊw'˜­¸ ^ËL3x™¿ýöá»ïdqª¥V{÷~r§™ ¨¨“Ï®ÙÓf÷©ÔZ§:Ï^¦›““±˜Ù4Õë(s¹\"b/¨öÈá—U@;}÷îúÿgË÷ÿëÿòEüñÝ»wçó93k­—ËÅÝk­ÝýÓÖu»ØOápGÓý˳„`!dïЛٵ¬Gb\-Lí'ƒÇéf^)DI: EÞ²al0xK¨ÅëT¦Z§©NµÔêµZ-¤É¨ZÊ»‡o~ó›ïN'Ër1z¦4£" p/Åë\ëT§Ó4O§ižO§¹–Ó„¹`.>M©tð])ïkypœ\†µå"çÜ"æïÞ×o¿ ³hH3L³)›OXõ»ßþeyüáéÝ‚g©\.˺®ËúããÓSP—§öÝwù·û÷—Ëúðð0MÓwß}7MÓïÿûï¿ÿ¾ç.Ÿ­{&øò%}¦7ÿS|!`I)Ñ‹õ¹ ’¶÷àô½ý@ðº™Õ³§~[=r?÷³œ’¹W7¿ñƒ_‚R|šë|šNó4Ïe®6O>ºmÙ;¡œ¦êÆX[éc©eš§Z&G1“{œlžÍ Ë<û÷ÿðß}óÝo@5NÓÃ_½ÿûZ¦.>œçÙHÈA›¼Æú0ûTÉ„[rʰ¶-ß³¼/Õ¢ÅrŽ\B-=>ž×ÔJ®ÌNFH4=^~|z:ÿçþ/ÑðÛw;Ÿæ©¶o¿ýöñÇÌV0S«""ÚMË—ËÒÇTÖu½\.?üðãå¼.Kbýþûï×uYÛãÓùa%u>ÇrN³Ú£Û_ýÕ_ýã?þã»wïþéŸþéŸÿùŸ{#ûÓÿÃ{bÕe¥{„:|“ÿT~X['Ûtâ•ÎþÈ4í5à‘[•Rž Z²”“—*VŽ€5øQ‹?œ¦‡Ó4OÓtšæyšçòîTOó¨V¯Å *†RŒÕ¬ZøÿÇÞ»ôÊ’$gbŸ=Ü="2ϹçÞª.v³$›A9‚ÐjVZ ô´ÑBÿqf1€f#`f!Z Ž89$‡Õìêªû8™áîf¦…Gæ=UEtAê‰QÀ­óÌ“énnöÙ÷}†ê,ª‰È ½’U%Ê©Lyšs.’OËéñÕãétžR*š‹–”J™—EӜӒ‡íµ^5©ôµ©Nåtr’ukïÞ¾?•ÓgçÏ xÑz]»uUf ‚É¥µ¨PV ôH;áL žÜx7BHˆ¡e(1èô05‹¾F®Û»×uÛ[«­noß}õÇÿÛÿÉø?Zó?þŸÿ÷‡Çó‡woUåòü¼í×½n½[ïèÕ{aª‚ˆUÇæ»\RÖyÊóûì³mÛZkcéxw^6 G†5Ö×Ò¬¿?-!¸‡!@7Üj<áÊ@Dû¾{æišÌlß÷;Œu/0ñ§o>KïŸ×ïùüþáúÿÕ•T–eZ–²ÌÓéTæ%Ÿ—ršrV)Y'•ÌX’.s)‰…")˜hkÖÕãýu«î`…w¸KÎA˜—Ó4Í%—²(—ÄÓD*§‡ešrÉ)§4¥Äœ“¨2gÖEr&0‹ØM,È#<Â"@´ºh­í+£L¢âÆÍán«{ RœdÖÄýRƒVÖ,DˆÈY»µÖª5|ƒ5B#KÕNk,{°£QlÖþêú|¹^ž¯Û—oß¾¿\®Û¶®ë¶^Ÿ?|¸nk…uòç}{Ý»9ÃÉ÷G?úá'o>™¦ùW_üâÏÿüOÂ}YNI§”Ïóž^¿þätž?ùäéééÄâÄÜÉYN§¥”)"Z«‘’F„GÛ÷÷†Þ?¼¿®«3ò‡—çççu]¯×ç}_O§åÇ?þÍ÷ï?|ñÅ8 öqÏ8"zoÓT€ ð»"Ç̾¿Kò÷?¹¹Šx m 1(3‚›ÛpDbæžîìö{þUJyýæ  ûÞUë?\ÿ_£Î3ùf~{g FÍÿ 3«ò2•y.š%]æ²,S))¥¤¬§Ó2OIÕSòœižÒ<=ºc»®"¢Ö o°ÍzK’JÎÃG|Ê…ˆr.Ëé”sÉ)Oó)/O)åLÓt:’¦êÞ2¨h]z˪iž,Aâ nðF€àìc¢:jïæ=†%pÃÄÂfÄÉB»Ï”²jV9®dÛµí¾v·íre–/>\̬պ^¯u«ïß¾ÝözYë¶íkÝÞoë¥ï›÷°îÏk~nÓn¶·­·ÎŽ"2eJ ÑTr™ç¹Lå©”O³”óüøæU>-:Í̧ÓÂ,ð’R¸G5ëšóÓ«Oáy½ú¾E)ó²Ì$VÛ‡ÖŸ‰‰L¸·Z¯—‹ªácÌó¶?#ÑY´n%üº¾¿ö–ÒéáUÒ\%é¶Õ|õRÉùOܧ!Ñ[–y¼MƒXñµŸøžKñû¬1ô‚U™˜‡¹ÌK¦ÕGÍMD­u0ô_òñ‡RU·msžs€íâÕÿí×8QDÆÉ­iu@ŒL`&&Œ1Ý`ŠÖ4§¡_å´#–ÓüøxV÷.Ì¥ä,ò4ÏIE„N§Sw‹0¿ôkµÚ»•!Y§¹ÌB“È2Í%M)ezCœÎó4Ïšf"ëv:=œæŸÏç\в&Š!<A 3Û®ÛsÛ0%«Aæ¶Ã+‰ ]Lȹ‡vG˜×°¶[wD­ÕÌœœQ»·^{sD´ÞöÖ›õÚ{íukû¶¯õº¢™oªÁb'»x»ö}íûµn­îæÖÂFîdMš§à”’3'¦ô°<<œOOçó_½>?II$¥2ŸçÇ.šJɪS.š2»õ ÎêB×뺮;€ZÛçŸ~¹<›5ëÛùa>Ÿ—2§nsäI$1“Y\=ø}µ·µ5ï.Y4ÅÛVhÞ¯½:nÈ‚ÐOiÊ +pÙ¶¤v¯-T‰™ÝˆIJ)¯_¿ùüó_lk0 ‘K¨Êqs/Žø[9M}W—0(‚…9¥Ä a6ëø:íâþ»ßk׊!¾gaû¶åiŠ îø‡xõw¹˜IG«IU5±ò ý1$‡˜y•™((Bª’ròpw[æršÒTRbÊL“rQÉ“X*Ì‚¤ééñuæYš€yÝ7ÉiœH’¸äf®š˜…GLš:Èç%¥¤®‰D”)ÍåQeIš+ƒ„"œDF€™SJÞ Zpã,ª¬BäµGi›¸ ©m ÷ÖÚ¾­½õ¡ó¨ußÖ­î(vkmÀ©­×½^̪™Y—ðXw»®h½÷¾¹]£¯Öwë뺵½’¹xðá)âŽ@ÀÜ;TH™T/,,ö½>×y:©Î$9 æn½uGïÄAŽ¢|J™ •¸ÁR°8Qƒ$áÔoó»ˆXøº­û~œ…§2õÆfÄŒÏ>ûìÏþì?®× € .çó󇇇G ”g YG¼úûâa³Üüâ[BÂ{pÐí…•ˆâÎ∗ñ-ˆ`÷ðG>.NI“JRII“HRVfA"¤"ÌÁÌf&Nª*\RÖœC Td*š2"„(ˆYU’ä”KI:ç’S «HÒ¦óì È,“jqÞVdròTä¼]"”Æ”U2"st îåÙ÷·HþZBŠˆ0£øßúŒ[sëPò!3<;SÃGå7ÊC"@"$^ býߥ"9iÉZRÊ) ¥Õ2a#1gaI\9‰ª„wVfQìuoµF„»¹ïÓŒ’3‹Œsó± MšRfI¢§yIY5§ùtb-™¦Ä%/Ë¢ª)¥Á¹®«µ>‰ž4'C–°³2!)3;|w&™RVG&Q5xD…oÞö0BšÎ ‰*#‚E-š·­a¬uæ”\>üêí¶m¥}õ*7'âÝû»m–g{¯êåíårÝêÖ«{mÛº­j]·mÝ·}ßûvµº;qbb¬îb–hd0Ä"ó¼œÎó2§œΟýôÍùñÕã4Ïc¯ƒˆR¢”çe™¦™…‰Ù¬³Z.™ˆ@pw 'pkÝÜ}0,Ê9ên{xãhŒ1Dƒ8B† ±;¡ITDBÄ€9<ŸÛZ S¸¤½ø‰Á˜ QPñ­qÁRJ&ðx³ðBû ÛØ2LY·à€ÇØçãgî&šc‘¼$01‘¨²G§™¤ºmíÚ­H>O…)Âì˜Ì`$o¨ðKm×Ú¶u‹r•ÑXäÏÛÚÜÍ©w˜íµÖV)§s™çézY^ÍӬ϶"@PÀX̬1fÚÄ·ê¶_·=ý·o¯ÿfÐ>N:ò£Á»1CïZÞ Næ­µ;+Œ‰áN„ežUÿ¯åa¡ä4O¹”4—4Oe|¼L¹µÖÐKÉiÊY™rR·ÖÖuk­z„›W¯–ÉN9˼hIšL‰2qvR×I´¤\Ê”–\oMià‹‡kˆ²DT„o¦û¥ˆÇÓCžòàMâ.Ñr¸‹Š²XÄ2 åȤ…XZ,©$É ÄT"F7¯„˜Y6õÚ°¯É)öÚk­Þ[Xõ¾õö…µº×Þºµ¶oÛ‡Ïu]ͮ۾ֶ÷Úb³v©)R½}÷vÝ6‹ ¦ÚªÛ;ô&0—L©”yÊ%MSšç”g9?|úƒÎO¯ŸržçåaÊË2¦œNó4•<:‡rwQe‘ižX¸#®a¬âîƒ. ‚ G895¯ ÌbpÃc.…nzûÑm ¨y6ߢI8œhŒ(V‚F‚A¡ê#6÷ny|MI6âÅð&'ÕA ":æ|íªuõCÞ)"T’ˆºß$/½zÐѪ»9D4‘&fÈÐ 3w1³™=??÷ÞçyÖG†6ÎfŽPáâfw‰næ½L9ª]®×µ]Z´ Gãâr¹¢s7ò­Ö:¹e%"0Q§Ø½Wë es˜7whbVQ I¶,é|žëÞjõ0|r3¦jÇD:ÿ6 ̯ X ­%"¦Ṅ‚ÑÌæy&°GôÞ",àA ¡hdqä~D  v%Rê[CxN ûáîð‘’z{)HUrN*R’Ls^æ’³”tø*³0‚Èç9Ï“–„e)LèÇÕêÞ÷½ö¾¹_Ùèa™çi*yN¢I¥ˆ‘jÒ4ÏË6¿ŽÀA¤pûø|C™ó±³Ú;­;Õ½¥”ó ÿÃF°Õj±V[%˜ò¸«ãù–¤§9]Ööw Xãþ¿è>ùêÇpxÒt¼‘¢ÌƒÒḭ̂ŽÒœZDšóÏðÉ~ïÇ¡\Tÿã_üéu»è²rR0sÖ¤š“¦hxG`w_#º&UÉ*¥äSNgfM‰R6¿ûЧ4l¦ušçR 1  ;³B B¤ˆ:=Â_.>$U…„ƒ"ój õº®!Ö¬™‡™ƒÐ»¥”’"nùÑH¦Ü}ÜÍÍÝ#îcyk½ÕÚ{¸qßÛ¶®¶VÛÛº®µöÖzï½×Ö¯»·Fˆ ‡[„‹à$Œ¬ÐœJYæRrþì·:å2•’¦’¦²œOó2KJÂÂ"’ÒÀ•U“¨N‰$%Ê™X™y*e)…VfÕÚëe½""Išò4Ï‹&Ùö5ž—SÊLìæÉåì Èʒݧ·_QÊÓ«§OOçÇ‘8àF*ÞÝÜ}³0ï~½\RJáGR•tŒWË¬Ö Ó²$ÕQk °ÇoËïPî»÷°˜™ˆ#pb‹°1þ©GáŒDAˆáò4Ï%â.’õ{ 9Î(ðƒú¾^¾a¹BéBÜ›#¼LLD­µËå2x?#vñðˆ,ÔûÞ›»‹pfÀÄÁÇ_"Zæåà‹ŽòpÕo/߈òˆtDÍl§íÊÎLr¹\w´*¶özy»šYï6~3猀u·IÒ- ¢4(% ”Ô¬_.Ïu߮ϵõÞ¦È9D:AJžÏ§‡/è-ÐoÞï¬a¬÷(‘Ÿ¦¿—€ Ì9ñ(izm÷•¡ªcM¨ b¨”!ì­…*%ZÛ1Í%å4—üÓßýí”S ëfLø­Ÿü~.4¢›Šh’ÑŒ'$ &BQ.ªEX¶ÀÕ£qN‹÷Êî2O'w¬ÝÖ^:ÿHÝ“ˆ"`0ó‘ã„™› ÞÆzFP„ÝkÛ#֘ŨË0£îaqÅlœ¼õºnkíÞ»¹÷ÖŽtÒ̬‡™µ^ͼ·~]·Z›õñ_7 ‰*FÌaB€<"ÀA‰XEÓˆ&œ¥ÌeÑ鳬ª9¥’²ŠŠJR-ó4ŸÎš'V&i°f-S™ÊTJ‘4¥œDp3§œTu´>€‘Œ?G€&òcÅÃ8VknÞ® „€»õˆXQ/ûVÚ{¯í™¥Ÿ¶ÓÓãK~tc"ˆ½6">-˾ï%—õºöÞG£æ¥*~` µÖ‘³( eM©äÁãã‘t¸ lŠ>BßB@âæÓ} U$óafb1â O@ƒuÑ …&A0Àã‘;gdUãiß.gâ4ZŽ~~~ýf™¦)àæ=ÂR3D€ 1÷ÚºYyN…Ù"v'ø`uÄhŠ®~ðã¸Zo,¬)°Þ¼G€̳1¦S†Å¾VI‘˜XXò¹5_·M83&¥ìÝvì@$R˜ò†ÕÍRTµ›íû¾^÷ËeßÖ¦:i¢©LÓ4‹ëNo^úù_}q½VÀ#*sfaæ!·.ÌGw3Æú^UᯠX·­ ‘”TG^|?g^€V±ž}•@bM“O“†'•îÖ‰€ðÿøÇŸýæÆy2:$PÄpD0+‘Ö½Fxë„äAÍ×Àêaî\Ów‰Ð}n,¨5Ð1NÉ7‰Ž¹Ûá’Pk¬qïa½[o6|‡˜sÐ_oÊuC8<8ÀaîÝ6¸¡›íæÖ- D¢ ¢©dMi$™(eUIÌÂ<ÏåÌ‹ˆŠ.ó’K>uæ¤I™å¡%¥4/‹Š’Œ …ƒÂ#(ÀÄ¢B €«Š¨*:1F CD48¡êtìaòˆNíGˆ*Ýt Àa2;з±!Í‘‡;He0˜€çRJÉó¼”ò˜dAR¦4&X„y ÌÙ÷=çŒQìðGo§°Q5GÀÃ=† nálD8 À,ª `0ëÙCáñ"`ݳžÛJ»§`:Ü\H"?ž-ùdà¸ã·,ƒHÇp÷n½µ‹Ð‹?º5o$#õŽZ;sˆF ¹À3Z«Ìd®hÍl3µVóVJGP7Ñ©Ì9%ŽèfÏ—ç»NX,ÌÝ[ïšs6ëuÝ[í9•ÓyaM½;8“j09%v'sN`­{uwM‰Àš¤×¾^×ÚêxEL5L[oá1<ºzÛ¶õÚ*˜§ÇÇ©äBÌS™‘©ÌI¿¼^ê/~ñ«÷ï/î!Bð%’—ù¼­öõRæûÄ«ïtkÀA¤¿éž¿6¯y€Ž|ÀðáîÝh"Vámïîæ!IõtZDzïýŸþàÍëXLJýÊÂÂêÞ÷ö¥G½EÐáÃ,üü¼­—ÚšGªD4óÕ¢º537#Šâ®ð°Öw³Ú­c/<̬›·Úö:øÊ¸ÅÔ¥cEh7W ¤`Uç%kt›Ä¢¢‘'3‰¨RÎ%OKáûX :ŒŒƒÖÆ<ÜEæiJ9™™›æ1FwÔ&Ä,ZrûPÞ½‡û°T#¢œÓqFÜÊ âûóöÝšG7ÕÝÿhˆé–L‡8á|âN1˜D!Ê"%§tQ $Ö”™b ŸBAF¨Œ*")g"jûND)%I©·v8yÜVš«Že{²?’ez%#n}¸Ý´ÀØò²M6’¸ÑóxQ- £Ì±‘á… "uÀn˜írG8³Œ>’{ŒD©[Gmµµ¦"˲ #½ñB‹õè¨0Gd€Ü`=´ˆ(ÎéÁ̯ëN€H^×Zë5©‚¸·`š&U%f@ŸŸ7õîDâ'ÕÁKÆÉÍš8QApN’´÷ΚŠÇù|^–eÝÖ r§ `U.ªÌ|–fÆÔ“¦”rk˜8ªe&dî^½HJDh­|žçr‡Ù4Í×ëµ[zõ괜߼yóÃߨ^¿þ ><ñÅ/§RÜ‘0sžO'+¥´VÍœnÆ„§€5ˆ‹)Ë «¹‡@é6#‡o\ÇKgråµQW›…÷n­µëõʤµÆÿñ¿7;VRkmÝßšõÑý³7zw°mÕú¨à(g¥!çŠ _fž„ul=b&º!š4‰È¨PÕR&U•Á&8þÇÃ4„…4¸Â‡È-f C Ѱ#VNYG Õœ¹÷'¦¹îqÇÅz·ˆ#03w àI•IU‹°€œF·0y´n}°á–ežJàùE³õ¾«ïj|zï(}ãcÜðÇñê̬”¸!€#ûK)ÉÑÔ`‡8ipŠ3Òpc{Í=@Àغ„‚Ô Läëºîû^JÕ½™}´{¨ðSÝ|þ1èÐGNÍ¥Ã醮ޓ¬ˆ`½ÁÇLÉ_`L£Ð3óÝ£'f¢88™Ð!Æ[ÖSZÂ0Ĩ1™%±J&b‚ÞøDˆ}ß¾øå j­=œžž~#À;õæ=`³?gá²o[«ˆk­u¯O¯uYʤ%Oi¯ º/ß©·(…§iïÚðøÍ¥ˆ TI™’øPÐ ¦FLiR.î‚UrQa‰.¨-õ}÷ ®ó4ŠÍ”S£"<‚ygJ¯Ÿ>IIUGóAß¾}K„¤é´œ’&üƧŸýÑ?ýgÏoßý›óßÁœÐ ‚YÊ4J^¾üò«÷ᅧ0Â÷å |GI˜KzzzÞºw^ï‚ÁÞ™GïM•(5GÒâ@5 iDom˜wOÓ4D‰=@DzïƒQCgdnƒÜ4ʺ¸µüïWÜ_ H÷1S8B6¥¤·ÒG§ˆŽ€·ì '¹Gxèœñq©.áJ·?; ½+Í{Ý{„aÒ æ"*< OÄ<å‡e9 ç^Í=XØ<¼8Ek-¥¢¢%?X×Ëó•Yæi[}YrJ§i*¥ VŒYJžö½P¦)OS¸×ZÍ,å,9©Sà AD‰,bJó®¨DYUK¦p±]œàBÄÖûÐ;2¥@pbÕÄ"½õºïµÖ0WIDÑ­ £!rʯÑ{'‹7¯F*}>ˆé«¯¾²R>}óæ¿úÿâz¹ü÷ÿöß›SÌe~õÉëßþùÏ~ù‹¿fv" èï)`¥Ä¥èþ| )“ç¾Äð¡ª×ëµ”¨Š`_[­õééõoþð5¢\¯¦’ö³Ÿ=<<<œÏešT?r‘ê>ê˜Q‘åZÛcÛ¶CŠBÎB9M£Z‘æ¦à=Æ Ex ò±'U–"ˆ@º}÷càl§oVqdC|óc–œ3Æ`A4ŽßéÑýüï½G1 ‘Þ{‚•Ë$)÷#†¬ÀHgT5%…6Az·8 aߟ·ýÝ«§§ˆ ¶¤”s k‚3ÒËZ/@œ¸±„Žù·Úg÷Oïq ÷üëÖÆÇ›3JT"‘©C‚=îpшÌÈ•8Z}þðÕ¾Õ”ç’çRÀIÈÉ?ÿå/øÑO~òáÝûeYDR‡|ÔÚFñ—󡬸¿_÷ŽÊýE¤ãþäÝÐ?l·å‘m‰H.ðëõÒúQ"Þ£Õ8ËÜÙ-">º*bß+ˆ9œZkûvHEKÉœUˆ^?}8Nômµº·uÛjÝ̺û¨'XD…ÅMÜÞLÓ”Kyxxxÿî}„ —°ñ 9)©&"®ÍÐDîÄìfÃõÝ(<ÌÁìƒ7ùqa[x '¢Ö¦öFQ&"±në¾m1ÍsZf:îš{µ$¢'˜£AzpÎsžÏažrQÆ{Ý™KQÆãiâ¥ü×ÿíóÃô“ù¯ÿåÛçwéA>ç?û©h›þ=­;ܨßÐÃï¸~-‹°Þ¢yN_ÆîGô}é€0$`ëºþüw~ç'?ùÙ²<%9ÕÌ @J2M9%¹_Çì/¦zu;;5ãœr  Dè¶Eà|>ç¬ÌZJóÇÆü‹o¬æñ•ÁŒÏA_Û®ã¾N[þø¢ÆÎI‡j*¥0R'Tª¤9étäDp"ˆ .¨¢÷¾m×áR&œˆ`V»Nâæt˜sžç9Â{oçp'êDµÞ»ˆ“b’„ˆ !=|”<“Üo4YK¨”r¿9#ayùzïqíåIŽ=ÏĈpw– U8"êÆŽà€pÄÀx£n² ,¶µ¶½YÀ̯ÏïçvMäš´™ñן×Z§)]žŸ÷ýòôú)¥G úÁ½™ó'ü÷ë%ée^yûYg†Gô¾wÛXH%ãæl5Ƙï{Ý6s»É8nƘcð-¾3EÄz]ë¾Ï¯Ãƒˆ÷ºç´ …¿ˆ><>¬ëv¹¼S-Ó4SœIZë­íăc…aö `š¦ùt""x˜[JYr"âÓùU¯•˜Y!ªð pæ®Iánµç_X$Öº 9SQЋÑêf#²ÑíaFÔ`°ƒB9f&*S‘”"¢ÕÊÎ$S.%ÁYó=ÔÚ·µqQbI%KNŽhfÏÏÏNQ²r”R´®û§çßøêý¯þùùÏ?ùÙ›ÿáüw_}ùårÖ—ò‡ÿùúË?ù_þ×÷fØ»ý=`Xê¾ðKFV•М´ 4#s„ÅÍj­­È¤ôGÿôŸ}öÙ›”¦ äT² t ×õJGý@_/^>òqÜñØó4ÊÐk-ˆ<7¤é(N¿zpK1Xø%3åã_ùævÀýg^ÖY·@5qDX‹ˆÃ0FwòJ…hO4”Ÿáâ>l£Ž$n𦗛mšæQÀŠ8¨ƒÈr9"<ˆ)©ÞDJªR˜2˜‡ÕÇ›6\öG¼~YIݧW~ã>ÜKÅû tÿVx´½†#DLtÃ"F&9î%^ F‡øŽET’L燽Õm½üêó¿˜Õß¼š%Í­7ѶdŽXk{ŸÊÉc ïÝ=ò}¢Õxþ¢:Š£;•ÀÐÓ ì<`-¢µn­n€2qró­õ}¯ÖC$ß~—JžæiÆ-xÝï›™÷­ùiy4sU™»4ç<ÚYãtz PN9å™ É9ˆ—”DÖûõºv™ç9—Ü­K¯AIHÅ{ †L)Æí5—0Hù>è/ÖzØ1³Šï’h†À~kd¼€1Œ|±z`àŽ ‹ ¢$d½[8‰äœÝ<à*ø@üK"«n}Oiiµ“HííºmÛ¾”X”XU—9%Õ篾˜ˆþ‹?øÇ?ÿÙß¿ûr¿n^Ðþðþñ/~ù—õWŸHò[Ûño¸¾“‡åa^­fm)MSJµ¶îx »½u!bbë½[ÿì?ú'¿ÿû_~ñ×Y’ä©:)9‡9¨ {ÎÊ"„/0BnºÐÇk4t‚xTa£R"%(@ûÇyˆß õÜ¡™ñ@x±—޵~HYð²»ôí|m<@€ pd'0Oa-Ð…Žk®i´P¦ÌÈ€FÛ1¿{€ôqï±ã ú¸ñßùœ_¾q/ßz÷ ‚¹›WÀº7Öú.œK.n@x€"H$©æq«Í €ˆ ·u&bfÿ(x‹¬‰–ÓùtfâÖës{Þ·šs’©KíM‹>ÍO£æÓœ >8p6ÊQIyYXˆ<‡¹1šFæòQùÁ.4pRIDfn½·u]‰hY–£¯±Q@#À­…0²â ¥CÏí6nô°§bb˜(ZuD¸Isöp§0DïkD#d(¸4Ïa9 xõmµmõ}cbÛŒ‰…U,È·ô®¦ZO˜–ó›v:÷Þ·uÓ¬¿ûóß"¿úWÿú/þÓ/þ¦üáo¸¾£K À Xº'__+ÌDª,âSÎÿèwƒ–2±¨G{s£KLsÎ9 8¬t âG”îxtဠ2Bršó›&ã^}ìøÚ+¢oõž*ކ Ý{¼Œxƒ§ãGÌ ±Þ­¯ Ô-6æ˜Ê bx€ÀÃdhÐõÝŒÀ»E ÷Þ" ѬZp„r¸ï!‹’ã DLæçVƒÈ™0²¿Ñ*O8äÀ¢ñÍí}(à^ô [`èÚî뛘FAÃdƒiˆ1Ø„‰­ÃxDZïÝ\T5¥ ™ÂãÍ›ʫǓ†NsúÙO²¦´ï• ¶šB1‰³ì|Lçñqe|o1È`4òD S­!Š1á+JL,Ó4ŸN×k­›“°òh¾€‘H‰F™ D´v“JÌì¸øQQ—!*rŽVãmNiDÀ‚HÄ áQCišg§Bõ¾yäT»9>@vAȱ*®LÁá÷éŸ7j Š*FûvôNPÃS3‚FK„…àQßGDëBÌlî­»¹‘9Jíˆø@ï 0aF°]÷`˜´Ú»!ÖV×^kkl›‹j'‹¯ÞþêÚžß-Œ‰+jµ€Lúü|ùÑóþèß}øw„/M,º_¿>Ã"q*9§’äðĸ¯ï±½UÓÐrI’Ÿýä§Oç‡õÃes7³Ñݼo»ƒ<ç2¬³îe'þHã½lPEîa gøÝÜì!Òã/ÿsŠo]Ë{ì¹”4—d—æ,¤iÔn$¬îFAqsžÀâáá[ 0kÉyžÏá0ïD2–A³BQžˆ}D¶íÏ· «¹…;ÜÇëI~—_ExªIUqC™}pÁ­9Q˜õñòüïfÜ‘¸»W7Ž"W^©oÜ®—éêýM ›¬ÔoC“ '’AÖ?‚€‰“…¿:?†k)0±*Ì%óã‰X“;èµ2Ç Ï¨È C|§ô­Üø[‹tôçˆuTNCj{ÌûcˆP’ç@+eI:O*¬Ý¬×ë^÷‡‡G" #B‹ðÞÂ#"†WÙÀÚ ÞÃSNæNŽÐœ8)†wªGŒs†\Œ¾'Ô!DL€G§[G G j þÛšŽÑȤ0¥Ø‘ižÇtw ²Ðá{Cì½õ¡-ë­³2'aHÜ#È‚ìxÛ+ƒaÞ·æ½G„õÞöÝ»YëááÖöúþzy_÷5­û‡×}÷¶ÇV·f¾¶}«µ»­½ÂÃöÚ·ºÏ¥ä¬;Öëó‡}­ÑC¨G" 3·ÞqãÞ}çõkQ° —&ˆ°ðÍRþëNð¿÷óŸ3¸ÕNÕcN6SPôÚÍÚÑ­8J!Îʳߺ³t ¬[sÛY#% 4ÑÑæÐp“°§èP!aGa3Â8ŽÏ¾´ñï¿>jY&`H(”ܽ7s·\×Í"2 "¯^ÕÖøÞê¹røùDTrVæÞ:RÊ%ç ïÖ­öp·>èÊÖ‡³ gD€+x%lN¹°¹V×XgG˜[ïAD)“*tÒ|Ii}‘›·ºoÛˆ˜’“¾[kÞ:™×¡q½^ž?ùdÝãO?ÿŸþê——ï|Ÿ¿#Ã:*uónÝZ«ÀÁ?RM£Y^æé'?þñoýì§û¶nœ–rÞ;=_öNà ™Õ CÖÌ­ÖpaæÖìý»÷Ì2MÓ}xýAQF€ˆÍ½îãôŠ”ÀDî±ï=nž-÷÷²œy‰ÇœóùŒ¯A£ÈP2)±·¶‘ƒ€pëdÖÿÏö¾µI–ã¸îdVuÏÌî4TȤr(Ö‡õÿÿˆÃ!ËÞÇÎtWUfÈšÙ½uI1dÚ´æ|ÙÇÌΣw:;óäÉ“œ*¥0œþõtZ©u9¬‡ ‚F責‡ƒŠF)Eeu“Ö˜oyYÓ÷œªá>"¨z(r$ëéøt8EÒ‰Qǰ =µÖ\žlZ^Χ&òŠ}v ç¹+ÁÈMÁz8œò®­µÛ±úAxº•©ÆÔJUØè1ˆñ»%MIDATwXd<*R$â:Û¢†ˆOÛ8¿B•,ák˜r@‚Y`¦Ê4Õ%iìøŠ¤ú°Wr3þæõ‡ä|eÞ—HQ:GÅd^òC%j €Bs/§e•Ã÷ÞŠ–µÖã鈌 Wê0lñ(‚‡RW­ ÷¾€x¨ÍÑ¥]hâ.²ˆh„£3QÀ vÈ…² Ô·Í{Û…Ã4ÃØ-œJMÝl0x±w3·pëûù|~ÛûóåùùýÛ·~:—º„Yom´Ö{ÛÞZ;?Ÿû07súb!\j]G2ÎçK@ÝÅU×Óñ-¥O®o­™{©¥Ö%È™sÕ¸ »í¡RJAÐ̇¹GzZËZêZ«½íÇÓñ³Ï¾xzú$ ¥­B˜°˜‡öÁ½™ý¶Ý«ÿ²€U€¬¬µHQŠº(K)‡õÁ¾ožNO?yz|:•¥^öaþ>ÌÍ5ÜÌwŒá¥tˆ„ËéôIÛÞE4sÂÛÄOr%I9«%´R¤ ÈìCpiÇ!Ⲻ  ðê ’Y¨H13Q)%J‘, ÝcÛ÷°Êápüäp‚äi׎.E—%_;1Tu©UµÝlýéé©Ö5wFˆ¬Ù¹×bëŠRCõAD5¼Øãñx½®§,Å!N$½åI£Ï¡6FDr'/GcÛ¶§Ç§’É”EÆIó 0‡B~ÀmeZÑ{—©€Ê?”(Œ‘„¥@qÛïE eS‰)YN­O€ÈÃjRphŽãLÆ‹LÃËdˆ¯¡*¥+òRµNó”œ͇¿f…1õ#/±7%K*’öxY×¹l\¤°„æ<E «”•Ê©ÀŸGX‘¯mdF?ùþ|Ž  ¬V-6Ú¶=,In·ááV­Õ±ÛèÝÇ%âb~1knm¿<_Þ¿Qøa)o[»\Lå0Fì[ë£ubkÌ‹†Ùe»x´Lë$å²µ†»›“,Õî6Ì™¢›Ò´*£–b0úe¤uµh(ǰý»¤Sƒ0÷mß<ø"|!<Â!(꤇ƒ¬UKN¿1öáÏÛˆ++]:hÑã?½ýþÝåûwÏ¿OTú–…CÙ–þvEôЫH9ŽëzhmWÕÓÃCîž8µèáð¸Öâîìô½÷,s…(ž×P©mÞzk£ÖEDÌŒŒþ$‹`Q•¢…©@ÁÍÑ‘EJêPn\ûk~-s«¦•_þ~]לÛÉ(7F‡ØáPΗ ðe©ërY¥«ª¦·J)93c s›§õš •å°.¥*)¢‹èAUžŠ¤ëËK¦"7†[FVƲm}Y dF@ AÏ#9s§…\«¼œò^¿ú_¿*¦oóÀ0¿šç€*¢µd‰×-r®N¤ª,ë²ÖE!Á˜’¹L(Šb^Z8s,Hq.Rdv4ÀœaŠà(RE*(1†§ŠÜ´ì 2K )ðœæ”¢Z´q]õ’r}ÈG’“®)=t„ÚB2yŒˆð°1zw3DІ ë³ÂcŒ1Z}0ÜÍÛ¾·}ómßúÞÆèmoc˜[ß[;×%TF°Ï¼ÈÃ,§óåéñIëã¶a¿4Úº`=ª³«{óý·6¶u­RõÒÛåµ<ˆ,¢EDcÄå²ùÕ~%Õ ¹TƒáçgªæT™0ÞHz`sæá¨¸h§wX<`„`úvˆ g 'ˆ6Øíjþu;΀@,¸ÿ½Ø_ãÝð7?ÆÇKBŠxžŠ"®¥)Ô©ñcˆ=t©Ÿÿôó§O~2z;œÖuñ l€\ÍÜLE×e¹]I¤[](§Z&Y™ÈÜ8š)YZÖ©*™¤8óÜÏ,òµ$¯bÖÍ´(ó¬[[“ÙŸt9r š„P(*XJ9€•¡ªZ“Í--IÌeÁ²Ôl°¤ÀBTTX«•l“#•1óízD–z(塨犈‚U°RWŘҖCÑP‚ÊPÑdë=ié¬X¬7¹¶ÐA–ZPÄ$âÕ™-© c:‚Åœœ‹S¹'PQ•r“Õ*„¤ PTFÒº–²èU®H’ºš BÖdÉB)rj `8<™¤Gw’Ö»¹ Ò§bÒGÀ¡Ù}¥#˜4$h ‚³ŸA·Üs2®»™›G8=nSÁ½µmÛ|Ø0³ÞmŒ›Ñ¹Ûè½ ÷hû¾ï{ú …Gë­µ>Æ8N¢ÒZÛ÷ÝÌ·}s÷tÞQ¡U­¨%=n˜ÿ÷p©uyÙ"öKë}ïnFz-R :„ã|yÑÊ¢!è6TdÕREtïãÝyˈzsŸÌ«ÈnÞn >3›á¬ÜÝ×nxž™§ Ì£ÿiný£9µj´P”)˜Ìkçd¼Œ1zßÿý_üò«¯¿z|zx~œÇ0+*Bˆ–(‹ªÖçi3%EDZk­í¸F™«á,2ÃL 9hIæV §ˆ ùÂ+'^—9¯eÊ9ñ7o"ŠÔe98¨u M…J„/fJ³v<ÈRÖ9T“°Œ½m[–¥V‰R3æeÏc5_ÉU¸G¤H„RÔÎpHˆd@Ððšís‡¸ˆ$R.@¡BiÒÆrM·3Vñ*%ùp:þüÏE$Üy5‚/E(DDD™*]‰ â&p"BüÕïQ ¡8×åÞ9f)¶'‡–ÿ )E´,ÃRÃ…Ð#­ßÇ`t†Ì:ážfhûó¥_vo£]šµf½ímo" ƾm—móÞÝÓøzZ¸ˆJ7¿l73ó1ú0°ÖE‹zD„ÈÏ›‡Ç”–€¹ïûæcØÞöy!ÌÌ܃qjZÕÜGÎpq*F'† –’}†”zA™ÆÓ!:x6ØóØZOE.gøM‰™x³qæä•¥SÒÁ9žÑÝÛ°ßšÐÙ>ø·„,­µH¤DDg¿9‹rÛÛ¾o½ïZøÕW¿øÙÏ~ÒÇXQj…fjJ’ª,/óMtïGŽÇ#®k¹Š5E$+7[×eY+‰ëHL'¨p½Í¦ü¼J(_³Z×ÛÄ-ưp@Pܧ/ž`ÖH/])%&Ó{@„'›„˜d1¥@^i³?xÂÙ)7ëùÆó!—º”*¤Ø0† „Š-ëœA®I ©"S$™¹/°.‹ˆób^g œ*A|øžSý¾@á«-y`Ógžˆ[*Š«0Ó¥’£]»Ãªª…AÑ’Öá8|ßw³è}¸™6ÜÜÌöÑ÷ÑŸ÷çË~ÙûÖúÖ[?_.cŒ|FmïÖ:Ìa!Av³>úáp\Ö%«4Ɇ‰lY‡­··ïß1RÏ”v_OO•UT'ctswú03·ÖûÃÃÍ<žrÝ3€œ[~CFþ~·\‡1Û:³I­„žw;qÕÙ|Ð h¯ûÙ~>"]&_~ÿ{qÏÿfñ;„£*zÖZ!ÂÉÂÌÜØ{W•/¿üü¯ÿæëRÙÏgBÀr¹z§3 ­ï[³½×@)êmoÆ™ÿæÍ›÷—³¹³Þ{ï#ÂÛår9ŸI³a} 3s"§°ÔÃÆ\R'q-¯ùMÊ,2>>5‚áµÊi9÷Þξ%š;ޱqÝÜŸÏgŸ¹ EåñüÀÉWqêËUÝýÛ·ÏÏÍpÛ‘%Éè©–âo·ÑÇ+çÒW'ÃKxÇn¿~ö>z.Ýñ¯‚ß°ÈZ5'¥‘‹Õ"|ßZÕzló·_ë»÷ßCP•½/²Ö"€—À½šûã”çn½vNã-Å$anVâe¥RþIúß~Ìo²v;=^½ÐC‚5Ç8ЬË!Ç*–¢‡C…rô …Ò!RëP73†Óm\BéZJq¨æÇ—2EØL`p½‚³ )Š"¡™ò;†µr©^‡¢$)*·õwB÷£Íئ¨ªk1ûåÒ[ë­1ÜíÍ›·ïŸßÛ07k½÷Ö<¢íû£·–å«õÞÞ÷Þ#åóéÏãa½omÏÅíZëápXOGhé½·Þéî ÷p–u=˜D0Ò²PU>ýäñ¸ÊRê¡f¼ðˆ”•}÷ëï~õöMsÅr<˜xuQ¹\¶ËåAW‘nñvÍ<ü…92˾‡ì#Þ·?f©tT<|T8 椱q:z~oÛù’Æu"ò÷ÿ_þú¯¾ñ¾‘¡¥æ¾/E •.µ®uIJ%Dü,·àrË’²À¹-†¼•‡’Ñj6¾eö·^=ÎÄx©.˜yÌ.—ÌÜ¢é~™!0ÇU] °Ó-B44Wµu]—1„ª”œ™ˆ “êfT‘RË¢ÅམJ–*¸ºÊQAE†ÇÖú…4t9X}T­dÒ5¾·Þ²sÕÌ-ßÿè£õÖ[÷}° ßZÛ÷½÷­·s´ÝFïÝÜ®øh£¿.sE+€lχ{½µ6<’º% •ãñXÖe¨l"éïÑÑ;ú{ÌÞ"Û°}߇Y.JÖ’"N§§§§uYañþíPg„7w{·ï·=Íí’¶ *ªJ༽ßë£;>ÀÇ3,j2ƒ*êrúþ»çïß¾þú?üÝßýçÃZ›‡#´Öb”Hz˜²¨LB#nú—'xuüA÷£®¯Ì¯äΤÓòn¯d\À‡Ô{––·€%" ©UTU,-ÓaEÓÖ”â FC¸FQñ0"TŽÕ+çl|Ø õ‚.¢Q«-šPä·m¼ëvöáí²™ôEµ°>z¶Ssޝ[2½…^%æ‚7ê0îÐ!*±*` ½–Òð,ºŒ¹q!è1ˆFËA¾E3ßÝ-÷0ôI+GïýÒÇ>ÌÍÖÃáøßÿ1»õ¥VUmîïöǪ̈:3¬WÍÂ1¼ÿöVÕwüQññ + ^«Ë_|ñÍ7y<=-ÿõÐv®õñÓO?;ž‡UöfŽ“JŠD]Q$ÔÓäG /f#Lˆ›:´÷þ:“º)æðÚ•‚Mcü)PNx„Eö³ÜS…ì9;àæ‘ÄÝð)§ ^˜sÒ]-1„Ca'3&=8˜ú¢¦be•¥–EIËRÐ { ‡Goä’^ÑÂR¦ Ë< ¤gê T͸»¸3Âà&—mL_ZËì3FìfoÎÛ0¦<}’Á soæãE˜ƒ)Ì‘¹£q7¿†ŽïUØÿï⣋!âOOǯ¾úå?üÃûìóŸ·_|ñ%bí á*Ê1.%X×9“"EEƒÎ@¹xÓI­EŒ³“—wO„A2TTЦ?¿»µÖ·íbæÓ%"dwvs‹€{±Ð3F9DÒê5U…‘Sä0K‚9Ë«ˆðpq>ÈòX× 銡W8i„¥!W©¥jõ"®ÌgþâNÏ€%°ð6:ƒ­æx×× ‰©ÅJ]$CΗqS›Ò ïʨ¬‚=ø*ï¸ãO¿SéŽÇ‡‡¯¿ùúg?ûòŸ¾ýîr鵜ÜÊå¹õ}˜ÛðÖZsçq]WU¶!-ÔÃÂM‹vÁÈÕã†Çì©Û˜ËK#LqíøÌgM{z§˜YÄvÍEà b!…Ó;®A!’4 †“­÷¶o¬D„à²,ØdyÖ‚ C¢1z„1×p9$ nÝK)VP˜IU€E<ïqÓ!ÏœèšÓàX>ø"¸ê-ï¸ãŽþYm€?ûâøWñðt\?}|Тs”/¿üËO?ã°7ßÿæû·¿ æÊuA  5s»ÐÊô6ó"æ¹›°¹¢=;×)Ýrm`%ßäî0/¹Þ<^Áê¤3¼Hv‡Y’_!¥¢(Éa~Ùs8ô¥•kœÙ†¿ßïuÐwü àcÖ²,§ÓÛÖzïï/ÏŸþ»ÏßÞ.«Ö>ÆÞšƒÃ,Îq.! !ºJz޲ ,UÕÁ¸2ßœÛWHâ„óecð×JQž‡?¹zô•|þ8ì‡a§ýŸ9hwÜqÇÿ|,`­ëúôô)Ç Ùº”‡£^Îþ­˜0ø?þñ¾;?ÄésŽtÆ”v›^oÂu =¹µ¯5T·Mwî=î ÍwÜñ[ñ±’ðç_|úÍ/¿ÂÇffÞ‡‘ZD÷6Þž·áÓ-&ñ‡Å0þ3›wÜqÇwÜqÇwÜqÇwÜqÇwÜqÇwÜqÇwÜqÇwÜqÇwÜqÇÿßáe¼±ŒƒðtIEND®B`‚nip2-8.7.0/share/nip2/data/examples/2_point_mosaic/0000755000175000017500000000000013224651032017003 500000000000000nip2-8.7.0/share/nip2/data/examples/2_point_mosaic/example_im_03.jpg0000644000175000017500000007273513224651032022065 00000000000000ÿØÿàJFIFÿÛC    $.' ",#(7),01444'9=82<.342ÿÀ ôÂÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÚ?ùþŠÚð›mñ5™$¿×ýƯUˆÇµL“ˆÝXœ.à3ZBL6 §:‰Søb©°Á œ‘Å4HPfµš²BÜÌ8Q\æ½ñ}>ý-ílãeÙ¹ŒŒsÏNŸJ«¡xîæó]TÔ™ÕѰ‰ Üúô½z$ ‹ìAm¥†C“É<þTÑ{uq$‡C{Ù¤› ºÃ©ö¬2깯§zÉXܨ#ƒŠÏ…øýjW^ü)a_2Øût-«Ü£õʬ;Uglœ Œ­(  FPßZU]´šNisÍMé„G¸ªw1/•ò›ÜÖó¶OJ ËóñR¤A-Øf¥¶* L°¶G^¡±U­¯ü•Bs«õÕ$éyn“Dß)ú{©:nç9¦ ­¶¸ÏZÏ—XÀ¨] c½G#\Qlc‚¼‘R£4lÙÆ£nƒÅI–ùsWQ6¦OZ¯q&æÚ;T[«Î¨«ZwüÅäk¹²Ô'Ž=¬å“ýªÐ7p‘²ä$Gó>µÕ»d;ŽÕBçXdDÀ°=Hêµ-½ÔsÆ 8u<†éf…Á«êtŽ2óŒë^y¨Üý³T¸›±m«ôS-_ʾñœ8â½BÂÊ?³ >aë÷kZÒCo 2˲$™Ï@.¦··Vëq;–,üÊ=}ó\¼—÷ÀÂÁt?>Òé¼õŽWf/ÀÝØÖƒÇ£»²,nb{ZäÛXšKòð·îÚÿõ®žÉ­î-™ fÞydsÈÿëU+ØÎ$v©í­ÂȾPÃô­>f³—11ðG\ŠÚŠèÜ)f]½ª´¨Tî¦yŽX21Rö¢Šinx£'áÒ˜Ã'#µ/AÏQHŽAây¡¾íFËÆH¬ è W ;g"²¥%&Ç­LŒG¨¦‡PÁP“ަŸt¾e“ŽýGçY Ü2jý•ãØÍë}åþµ±~àX4±Ù«{f¨YÅ4ÀI÷'ŸÊŸ¨[ˆ‚º ©àš  È@TÉö«ñiØPe Ÿî¯APÉIÔÂSœñëTY‹—$ú žÚ ¿½v Ž‹ŽM\iWa`ÀñYìI9¤ÍyõEA&¯‘wè&»ˆìÁ]¡*ÎÀŠ¢Õó¬L"DX ÉoAÖ¨»]ÞN"T@XòqÐVì%¬ ch^zwõ¬ýSÄvöY1%×Fð¿_jä.¯ØC4Ò6_Ÿ~ÕÍGÓúÔŒ6ÝäW¦è—ÿk¶Ÿ‚Êo^+a­ Ô£h']Ðä=H9þb´ šHXE'o¸Ã" Ô´»]IN1Ïiw÷çw¶wúeÉY]¸o–E?)úéT®õ+™Ë§œäH ?=}*8Sivæº o%eF!½AÁúRê:Ü6i¶L<ý‘}}O¥O¥Ü=õ¤s’0s€½oCÅmDBD£¿Z˜ –<ãÕU]¼w¥¢ô5R™—Ò§¥¤Î*7ÉV*94G(ÓÙ šp9ІWuª’°#8ëTgŽ6}ÛTžüU{…AaÐ+ž»™í_ ãièZ#¸wPKŸz±ÖqOò†2Çhì*͵Ë$ å<ö«p¿š[ÛËh`U¹'p0:{Ô:{C4‚8][žpÖ¼‘á²Z©,›pçéT®à1ÂKpOMHAƒŽõ<ƒ†¨‹ã±¦™1Ú“Í?Ý®ŠÕðâî×íGûßú ¯K´ƒ;ŸAqNGZHíñÈç­h٢Ƅñ¿¿Ò¬y™à×/â] Ÿo·áØfUý땹¶’xÌhãƒQ.z˜"=ÃØÕØ4C9Y }Š•æº­6ÀAipÈÇ`ÇÎk£²ÜŠñÆO½^;pä‘Iˆüzšãõ ï6˜ÐÇ“¸)dg5Æm!¹ëžMY‹|„@­k4ž+\$œJÝ<¥Sÿ„Vòæê?².ì9”=Kv®§NÒ5M6Z±ŽE'•!—Ôr29þµ± |ÀUÃ(^µ3N<´ˆGÅ6vçžh¤ žõÂf“?x`Ô¢ŠM¢KQÍ:„ÎàÇJi”1\b¨^9G#8SÞ¨™À{?gêz¢C’Ÿ4‡œv°A29wbÌ{šš¡ÏcÚ´¢ Õ F‘ý±JFÃ…ê:Ô±9ïTµ3ÎQÀúÕŸ­­½ä“\L±›SyÆry9ü+©* eÑÕ×AȬ²‡v}OjŠhÌ€,™#¯5 ¶P8Ȫ÷0e>S–ZÉ’dŒ€ÇïUÛ'¾“ˆÔüÏÚµ†—lMy-·áŸÙ÷ÿô¯MY„#i_—Ö«\M)fp?"_ZH@ó0zò*Ú0ÎUúS‹TrÃæç«’Ôl„W.!ÈCóiñJѦ[ ëJÀ¼€I"íCȽm(Ú›~•eÆàvÇJ‘¥³Ú [‚½zטϩyŽÀ1Û“UÒáKÿ[[À¼+­ÑPÜXZ¸UÀ Ûý£]e·îBñó Å_ñØ×.PœýÞû¢±Ã€xëN3;VŒ¶{¢·‘ÕxÆ~¸«Ik¶höåºæ¨Ìy^xõ¡NGÒŒàÑ‘KE4Ÿz„nY>öA=*|óHà9ªN‡ 5 `µˆÝéš + èEejv’H§ì{Lrô®VKi¡r.•Éçwñ¥XI üTÊ­meÁjÄD“×嫱¾ì"Õá(-Ô‘ÍUtÄžƒ¥Pr«’ç“ÍQ–v‘Š¨Ú¿Î¤³i"˜ädœfº-2æIæòæ`F0 ëcì@Èr3PMcºOãUåÓ$„_ 1“ÏA\EÜ‹=䎣NUý"âkyʆ#±­ÿíï yïÍy5¡¢K$:¼DånÃß)®²æöæÙ"yZWi\"p¹÷ö­«Ï‡Þ"Ž]ÓÜYH}c‘°=€**(|9ªG6ß)€þÏ´tÉ£Œ†Œçœô§yeP9­1”Öv¡h%(Ê9Æ*”ö« *Äov<8«PC#€Kt­¶"!‰ "±Ä¡·•*Çq#‰±8¦µ¯|1w–.#”µÀRdEþ§­ySx.ì¶Ø§y{ “ýjÔ_/ä–í`çzó cSIàªÅ©´®O ¶Üçþú5ÚhÔ4­#)…‡%YÀV`XŸ»Û¯zÓŽøàâ»áBà¨=3Ú±õ_!JÇcÁG˜!„œ¼Q±=¶Šµ»ÌGÊ:q€1SÇkÔr[Ú«_é’´bXã;‡Þ¢²ÖÕÀmÄ)¤[]Än¥FéµÈ'¡¤'”r¹4ÆSœŠg–Þ`nÙ©2Á±Ž)X«ÖSšÌ‘³;¹îx¨üügÚ¢î=rMHâ9P¤è¬¤s‘Ú°›ìÌíµ?)Õ¶‰.ÇÏ´SÞ©Ë–í†^Ì;Ö´Ta˜|Ì?*9VÀäUïØÇEcª´Ï>õñã ?’ØOúŠß°´b·¹È®ªÆO:Ô³œºœ‚bÊÙƒÔV'Š5uNDq4Çn?º½ÏòÇDƒŠ·f;˜¸Pß7Ó<×p4Àýæ}ñ^Ejøj1/ˆ-PŒ‚[ÿA5é£KŠñE¼ëò; ŸCž¢½Wlšç¬dÆ¢ËÓrü¨½f ø®rõä^C‘Ï­5%” 0Î:ç­J’FÃ/Àõ늊ïOs#‰–«ÀSŒÕ”´X”¤qÜÔƒ…Å0dðMtz4 nÁÛCŒŸîJÞŽC1)¸Œô¬ËËeY6 XÛ?0ÇZ´žµ5ÌÏ)þê«þ5m ­”e-¡Ž :íQÏÖ«Ëuö…hOÌH úcšÀ¹»‡E¶TžO:ä ¡@åñÜúŸZŸKñÍê,wœ}ÐÆ*k¹ÄÎUIÂ÷õ5bÎ1*êGQ[và`cÚ´ £ ŽÔžR²á†GzåµV+§XÝ]:‚;VVHb:sPÊJË“È"£d`ÀŽ}ªj2ZMÙ nãHÏÚª_J-í&Ÿ¦ÕãëÛõ¬Hï¢{=îÀ0àÞ³d¾ÎÊzJžÊQ$Ÿ3:jÕË~è <šÌã“ÓµZ…©–"GÏÂúWltéVííŠ/›"HÊj†XÌ€“ÆEW›L13B¬G=ÅgÕ]‘מœŠH ynõÑYI›TÎ3Zús„£aïQRÝF ð9¯=×-¯Qy¥Bbè„r1ïéUí¡yPíOl×U§xj#§c‘’‰À®¢6hâDUùT2{WÎôWCàx–ØFϰ7™Î3ÿ,Ú½4çŽöÞ21™tÆk©Õ 3ÄÁGÍŒŠælm. ßÚr>n ã¥.¢¿»lW?åG,Œ%fH#‹„Ù1ózÕk4–äÌIܪø± ¸An¾”— ° µbêzÍ–‘q W¬éæ‚Á•7Ç=êÍŽ¡g}šÎq*+cp`ýJׂòhÆD•¥e¨¹`X®sשx†þcJ8ϵVƒUiíP¾D£äqþÐãÿ¯øÕ[«É#c¼úô¬KYá—r> óôª“¸¾ºIÜ—y’}Ïò©„S g§³ïZ–w+mp7ðÞÕÓÇG;U¿1c‡æäŽ0+6îíÝ1»hôZÆ•FûÁsԚ˙JLr1žxïLl8¤Å%!ÐqÁ¨e•ùx¸\üÙ­P×/ak%Ž6–Éö®9¦d˜ºžüúR<Ùl°à÷©‘ÊŽOJ’=Jd<þñðž£éZ6óGv†DÈìCU˜š4”)ïÆjY•‘ˆoÏÖšŠ[žÔ­;î#{qɧApË ÁœÕé%I,0+"yárí5±~1WÚWžüŠ¢ÊÄnþ¯JÓ¶‘Ö(ý¹ÅjEwûår¸ çŠÐ{˜g?+Œžpxª2Ú‰Dh3žþ‚¯.eµ§–Ê>úÿÖ¬Åg5¸ÚàOZÑTP ¾h¢ºÈãaÿm?ô[W¸Ù\´Û£œë¦k ºrŒk&výè$óŸóô®W]×à·FŠßÉœd}ÑÇëXV·SMrMÆw0È8ëô­‹xžåv¹ÆßÌÕËXbµ‰‚€br{ô§»÷ëU®f1ªÿ´kƒñK›Ý\îéÿÙó­_ Aö}^Åæ'ô¬\;¡&6e?욊×\Ô໊4•]YÀæxÏ·5éqÊX"©ã¹ü*¾Ðã'БþGåD·$ñü'ךȼÓì.›çRÿLÎ?N•‹©4ºL0ù«‚NÍÀæªé^"¹½™¢•!ùWvUNO8­VÖe·Ã,hÄtª5–“fŒ}¤ÅuÞñ¥Î±¡HE±G1ç~ö G8ëúWMáù|Èn#c“»\ç=ÿúõ5ÊäœVUÉD, ýk>ᕘ9¦eDeFrj:(Å1ö¨Éª’¶î©Ü&Wâ±oÀŽ-×ük.ÞÂY¾b¤/©ïV$µŽàgÜÕ ˆ$ Vô÷¨¢×Í]…»pI¯Ö¥i‰=y­ëF[ëhØŒœ`ýEXx(‰U^ø¨Q†þ}h’MçñMòD‘Ku©!±Y¢Ød`>•¿“ Ä‡œSî4Ÿ³[™„Û°GúõZà ҷ€[!?ÄÝ~•en6J´%V}(ßï_5Ñ]¿är°Çý4ÿÑm^Ã0=@Y·gy\rk“ñµÞ©¼2Û\ºÚ–UCóìIëŽß•r¶sË5ÄLÓ·’¼²“Á5×Z-Äàˆ„þñàVÜ[)-óڥ䌓֞§<PO\NQpޤàQc᫼k‹.d-œ7 ?×ÿUjkvH‘ÇõÛÛêLà®cÇASÞ“-©–>L1#õ¬ /YðY¾”‚äüÖ¿,±Ì’M‹0‡ zŸóíX7f ÉåÜ07væ‹í^á™Hs€A t¨¯[ ‘È#ç]§UG‡2?Šg'ôÕAsqjÌÖóËŒ1é²Oq/úÙþ­šoãJ)TdÓ°EI³K’Þš fû¤‚XÛæFj¥žy¦ÃdšÎ¾EŽXÁPsËH¼Äí^=^³ÐÔ ˜÷fû«]¯…ôÏì©­6,ɃpFX @ xþ¡e&•¨ÜYÌ›%‰È`Ï¿ëU œâ¬Ecu2Ûå ç/þ¡¥Ê,A—ä'œð+viÖâÆÈÊ,§"³&r›b³|ÒWƒ‚jXBŸ¼Æµ-œ¨<÷©"P·$…'#¹e»x Aö«×£x>¢³¡†1(`1ŽHíS3e‰4Ò™pIàSÛ$Œ~•'˜ÿޯ讋À¿ò9XÛOýÕìŽ7!ë>EbÜÖ-ÃÇ{ç[ÈÈ6õ¸ù,î<+â%¶»MÁ:’3½|~cê+¹3åAöãéMŽg,8šÕŽ!³#Ã<ÔeLYd}¾Ç¥WI¥y›»UVÅ€Jõ­i­ÖêÊHøÆ>‡µp²î„²ËÁˆÇ¸àÔpªä·BOj»#7~p§nìéUGp7I7\áV§Šn2iõÇZuÃZÏk$W rûzç¶:לdzÞ^ Wc F[©5FñqŸZC/™f‡¸*ô/ãþˆ0:»ŸüxŠè>´zRÍ8RƒÍXw7Î0*x2¹É銒¶­þM2âÕæ£˜¯< ñ\ìØyÌàš± [ÀUÉ4·#O"È%^˜ ä~µ'ö<ñ€„~SÖ®Y͵„x*}+£´Ÿæô®kÇ>MM£Õáb$EÍ€ ѳíÓé\”:bZð"T>½MA}8‹)ç<Öi\üõÑÙÀOEò~¼ŸþµgêÙŠÍŸ ÀXbQÇ5"ÍŒV•¬ß¹^kvX¶­«‘ñϯõ­+DEZÔ2¶Jyqü«>6 u榚J3E|ùEmøE¶ø¢ÍÆ7óÿjõ8õ)£8c¼^´Ë›÷–Þe†ç2þìÜûûuªZM„Ö“Å<ÅÐîTŒö'ü^Ö¬¬{€âùgꢪÙéòíþósSˆÃʩ¨=ø­q`‚éÇLš‚fYL6°qVLí#¡Ö»àdÖ„R æ¹Ýj [«×ò&Rí‚ʼá«Ñà™¢~zûÓ¾Ô‘Õ¥ki×i„–]x ~•©n 8ùr*k«tm›W9Íqº£ ä{Q“ $>Zå®´—±rÊ3øþuFky?;OÒoï–h­ãTnÁp3ùþèþ´žÃÃÖ¶·)²dß¹Iv=Ž:ùÖ½A,Œ¬0¤ÔÊKÖ¤(GB)@Ïjy@kBÂÙÍÄMާŒÖÀÒs&0Y‰õÀ¨.¼ûOÝÇò/*@9®vãHYîKÆÁrG½liÚ<cùÃ#“òyÅ2ïK–Øä:ãµfKqö{I^6©9ªZTÿjŸpUæº8¾îGZ°²"£HÙŽsé\F¦±%Ô¢,˜ÁùIôí\ÄÐ<÷fgáACÂ:cŠÙY¥[h‚mPc˜Ñ µ * s†æ£}O+“ !éò¹þYª’øvØ‚bžQïa¿ ¦ íF!»Bf\VδÒæG$MƒNàŒz}+ 5«õÆÉ°z}Åÿ ½e©êWnÑÝÈåªP*Ùˆ’ œÔñA9ÚžrzQœ.M3{ÿ‘^Elx\gÄvŸð?ý«Ò:Ry¢?˜ö§E~âa'wÖ¶bž9ãó"`W¿±ô¦7½DËò–ü*…Æ:w«¶‡´ONsùÕØ“Ëi\mïê*)5QµA8ªò_O:í.Buxüê´rPÓ”/³€¹õþ•Fæâk× øèéQ¬D•½á»T–îO17 Œãœs‘ŠéͼH0«ìMWã†0$àíú×.ÚxiUpXƒþ4·º‘—£ë˜:EÄÒ‘;Tò7`~5ÑxwB“Oœ\É,ev•1€N+p`1Ÿ‘H2ìFjÒØÜœ~âL;O#Ö®ÚiŽÃ÷‘0ç½/æ~î<€M:ÒÏ‹ UON‡'úWEžÙ£`7 bµã„êvŸÊ²5Eˆ4Û›$9éõ¬YJǰ7IÐ:»Â( ÐŲæÜ(9Ük)âG]¬ ŽàÕ(RÞ ÀŠ€õ*0áþ~ €ÇaÆOJmÃ#ð\g¶N+áÄw2çtª¦#s’¥°xáw ÀZÎe´“±_£WSqáèaÒânü«ò²ƒÔzÖq…bAŠ¡qt­)U)#™ l ¨$c&°åÕ®@©|£QçyÔ•ŸêÄÿ:ÐÓ­ ¾èéï[V[åcVw3`rïVR0”üóMž”í¾|¢¶|(3â[Aþÿþ€Õé)QYóÌÊ?úÕ¿˜›‡?^Ò¦–fS•Îâ·Ô$©½Oôª—ymåýâ;úV|„1ëùÖÆ’¡ìבƵÖN1E`^Cݰ€a>½M šW€8*G^*¢ÚylWƒƒÖ¥£9"µô|‹‚u8ý+tš«4a× 3U QÏò¨®7¸ÂWÓÖ³š$Y µºZpCˆÂ«sŒóHË´àÓÒ##®ÚiâYº|«ËcùWLÛÞ  aJjÉè)¥rìNõ5JòêÕâPïÈpEW—ÅhÑ~õƒÑ™ÓÓñ­Ý+Ä6þ"ƒÍ²¹#ŒI]¸ÿ* ä‹NŠk‹† Œ±'¿o©'¼òMbs¨½Î2Œx=µm[jBå7£|½ÏqWÒQ·–â­ùk´v¬R-"WE Îàp}« \íÕìO˜Ê#l°Ï9ŠpzqNéMa¸ãµ'•õ¯Ÿè­Ÿ sâ[Oøþ€Õén@ST' Pç·Z­ N­»iXoZЀˆÝ¶ýÒ8ÅhYc-ÏÈ{µmmì³F¨6ðsUn4ÉÀ8@~Œ*þ‘nëpCJÚ*¡Bÿpóª·\JĦsŒŒÕ6Vˆg5Fây p£#Ò’$|–8ÀàŠ¹,ƒäõö­ >/.áI=ˆ­_›­1”$Õ s°ãñª8D,z(ɬ&Ôó0'œ°ãÖº;9í|ØOA‚QíI"¶ã¸þnÚ2ÌGñ7JØ~ÉFäu'¾jw»U‰?ˆà*Š ––R¯Á긨ïKºÉ û¬½IïÚ¹‹·@6¸<â°fƒ{NIêO9¥²’K¥¸·á•C) ñ«^$ñeÿˆ ·´”"G ,æ0GšÃ£ÛéõöF)÷Ä3Ô ±i,‘Î dQÛÒÁ+θ…Ÿ@:W@–ò ¼tëšç|Pûn­­Ôðª]¿üaE‡˜³rJì´ÍE$”$ñåAGê3Ü}kTÏêj1pÌØSMšà(!¹®SÄR´ÅHWfp=MpºÝÕÔ‰26ÐrÄtÍc¬§jU}žö§Ç ‘ZQN ®‡I¶%òÝÖµHÈ"˜ˆ¨8Í+zR…,B€K€­vøRÀÁši<Ý£~Ö8ÝŽq_&Q[^Çü$öy8?þ€Õé郓RCd¬‚IyUi“Åæª¼úâ™ âÏáD ä† ñ[PÄ ’Iô´,£T‰ñžO5ì3¿0•õªqjÇK•b¿ˆ*9âE9üÅkX]%ö¢ó#…b!úŽjÜŽË)ÈÈÅV‘·2óý+ø|œt©­4X#¯5b8vËÀõz$`ÊÊq‘Ö§ݰ$ñÒ¦¸±º‚0Tyª)`rIöªÏa5Ô‚8FKpÙ÷«·¾±—Gh/ÚþúÎËü_áYú:iöÖ˧IqäjO˜“|¤±ôìG¦; ÜMw»Ž9—÷]K©ãéZQè±[\}¡efU*‘Ò£ºˆËÐq×5TÅ€:qP°*Û‡sI}p–êG̸aèEbLnô¬™ÔǑǭgËç°;NÓíUöuÚ{Õ„‰“œqV-¿iRŠdnôÅwš|‘„X¡]¨½O­i–À<×!­éúÞ²ó¥³´5UaƒÛž:ŽIªÖúlñ°2DéþòšÜ‚‰¸œÞÕaîC@ÌŒr½EInïåy‡«túTr6Ü£ëXÓD/&ç"5ŸZç5›sk#ÆèóÔö®jHÒ` 7lPö’ÃÓ =ª}¡bר«Sè®aYíyÊîhóü©ºMœ·—~^Ö ‡çÏojî•B(Uà€)i 8â®é1ƒx²?+8÷®¯íêyÝú×È”VÏ…?äe´ÿÿè ]ýËgä^ÍZÒ¯B‘e1Æîccü«M¡NEI· Ž*DùR¯Úôr}I¦JþõÌx€™]¢æ²,uKÝĶÌc†ÆU‡ôú×cgâdÕ`2‹V‰ÃÙÇcŽ*F¾,w(Ûøÿõª…õÓÊ2ª&´47ZùNܹÀ>þ•¬-Lh6üÕ•bäÆWwÞÒªí.»°?¼Õ‰©IÌ<¢Å@Á'¡úTšUÇ—u3ð±Ú ê§·á]CF±.0ïŠÝѧ Fê;úÖô7JÌ0yõ«2G¼¹ê¬‚v’r*•ÜÞgîÐqÜâ³ä¸†Ð¸™#^û_­CÜ[íåYŒ¦«¼rNøÉ©E¨E õ®\ˆÅ($ :÷®i­D2™@‹éJª²g ŸjžÎüý¯*Ã0ÍmGЀ«PD.Ç<µbÒÓ–6d.¦®YÉ&ÒHlòqV¼Ôþúþuó­áŸùmàú¯CXøHÝÛû¨¥ä*¥ÐpÊ<©QÐç,¥tUÿÛ` ''ßÞ®Hê£'¯¥Gæð 8«–Ú…²Úª< ?9ZŠâêØ/OïVë $e8½Q–Í®$Ž4,x®,!µ´H#ãhäŽç½U*Êy”ìÓ‡+|JÝ"¡x­YòmâßýíƒwçÖ²5ëkH´ã4Qí›*ªáŽqü«žKÉP`òïV¡O´€áv“Û±©&µËÊAšjÌA=jõžšÐ§Ú8|g8V¸ø‡Ö<ä¤Íqîk>FtSÐf£·¸hfYœu÷­Õž9ÔI>Ç·µX‡|Ò¢"îrpk¥±µµÒCp×MÔãîûJmÔñÜ©R§ÔÚ±ç ùð½F—ìT,H 5©l]{¼ËÚ´UÆÐIäŒÖF°ë2ìd/çÍsnªŽY“¿ö~³mz3´:¹üÍz>(Òçg[5’R¸ùŠì=:óRZêAû¨£ë“T®EíÚmžè”ÎJù ΞØ*È:üµJ8I`@ÍhÇ€t§wÎ)ÝE! (¥^¢µ4é^ܘÉ9ª&lsÍ|¥Et߀>9ÓsŒfN¿õÍ«Þ|ÈòÌ:Sü¾ø¨OÌÙÍdky{5Bxwä+œU p;ÖͬeÆÑW×,0ÜqUÖ&’ö(Ô~ëxÉï×½tÞX(P¦=«þÍZW0¤»Ú«ý™±†AÃæ®Nö),¥’ÜôÎTúŽÕ˜lï5;è-líäšG$£€=Iì=ë¼³ð‹Ø"Ë|é4¤p‹«þ?ËÚ¯ù)Új|°,ëÅtZ|%æŠ 1·“[â(õ¦IiæFWŽzfŸcfÐʆPŽMl¤`åUnï­íOï\n샓\汩\^[´p°†3ÁQÉo©®Nh66}é>Êv“PË ‚;VLÈŒ1 )Ï5Ÿek¥~ðÈò• ¤<Ž¿™­øFôñÿ-®ï¥ÿ šÊÝ‹$÷Ô\Ò®XmÓ$’HÀvnòrTz škønn2WÇ*}iûÇ® g]¢ÍÄäwª¸€ô'£m¨CÑÙÿw5hêqPŠÄÔŒV]åÓ>X÷¬y æ¡»„OkœdÆwgùÔ¾_:æé÷¾˜$Wii~qòö55Âl·wô˜ølûЉcëK·âšä¨¹"ƒžç ‚8¢Œ‚+BÚaÉ_z³ý¤ðµ|ÇEtž8ñ¶žë§þ‹j÷˜\âª]ùðÌB9ØÜŠª—2ù…NqÓ ¬]Nîéî䀾'¡ªÖÖ§væàô­hjœšx¼·ÀÜÅGÒ™.£n ù¿ËYmysspÂ'HÁ=Wš²Šâ $bÌ'Ö¥”N…þè<Ô·Zu®¦ñ “æ,ÛŒŸjì-´ KKSžMº’7wÜ@êO_^´Û›[˜âË®ð¼eyEÕYp¤f–Ú %ôÅuš ©I3.AÇZÙòpÝ8µ&Óôª×Zžmv£lsÁ5ÈËv©vÃvâX޹«Ew›Ó5¶ªèUÔ2ÔéK8'n>Qš£} #ØŠçu->i#ÄDàõê®—†w2’® žõzK“Ï5 ·¤ LóH5kŸ¡¬Ù®3+sIµ=¹ ÇÌŒv'‘ô5«ØÔ!G„0VìÃó©üŸ/§4ÒÜãV[¬6àTß"Æ Ÿ.^ÕZIDœý1SF˳‘ß=ê? ÃzšÝËÛͺ‚+AÈ ôϧJî|Ùû2(ÏeÇ–GÈf}ÔVmèxäÊ| Ž€Tq;0Ãu©h¦H›‡\eqJ£h£$v¦;€:¥)¸ª¨l})2ÿÞ5óýÐøãÆ6þº趯o·”€IlÜÔw’ÉûµŒ§;½ê+v$ýMRÕmíâLpTÊ•mD»Q‹c=?Ï ¥–Þålå³Êv)'ä=…rízû+p§¡ô«"ñ$Œ£8ê)ÖÂ5‰äÖ彂¡ÝpªÒŒªmÉ=êü^’eܳ úƒVl´[›;±,»J à®zÖÌw µ\Šå¥Aš'‚Þt"d¼85[ÃÖV·3Oæïóc;’2p6úûÖü—’Ú6ÕèþT±ê—0•1£¶® J|êÈ1Uõ;ÈÚÅü‰UŽ:r? æ$šRpvœwÅcÉ*Û^3Þù' ­M>ý®Wd€y£Óø«IWåÉdÓVhæˆàúUvµ,0Z­6š"F>]Ç“éU.¼*e—tsÅòŒ À‚MfÍá-Hs–ÇÔ#úV]߇uKHeº»HÒÆwüó\åÄÄ3ïU„­““‘ž*6̲¬j ,À õ®îÒÌZZ¤apB€G§ùÿWGa§J£p¸ÈèkWo0ƒÁ¨.˜5»+wŽ×ó[åQrriÖéwªÜ¤L™˜ðö¯CÐ`û2ý–O²F›™ådõ-ïÏ_JÒŽöÚîá­¬çŽyÆ@ ß׿áR\Áqc&Éã HàõñªW’2*x¥¢šZ*6nÕT«É'Ê úUµS±Aà€)Ø5óå¹ádñU“ ËeÀð¯nH\DòßÅìj# ï"§„ˆŽ6±©$o:TÂ`Ž=sVã “ŒqNñ,ßcð½ôùãÊÆ~¤ë^*5Wä}jH¯Ô Š•õ’£l|±î{Wa¥©Òå²Ò*©$žÕßGæÖ kå’h]¼h$3óµáÍRâ8’ÓÂ8?2}ø×[qH7£QÈ‚¸ªw7 ’`j4§æQ‘õ¬Ÿ\²øm‘¸idUǧé^tlÌÀ²œ0*œñ<+{ž†¯øwÉKÓ<€3/¤tõ5Ø#$ÇÌÞ6¹¨.ugÄu¬™gi 9>µ™tÊ<±ô¬éf 'Žù¨!µÎW *ÌÞÕ£ÃD¡cëÚ˜óK!%än}ñŒtã§­z'‚t±Û¦­wºâÆ6¯÷¿qô®¦êKkˆY."%OJäo풛ɓ̋³ÍTRÑÞžÑ2¨jŒ°œ¿0⥀ ·åCmBSFAÚùêŠ×ðÁ#ÄV…züøÿ¾ zþŸ­0Ä7GxèuZÚUY6È„2žâ’fH3dóÀfÞHwÇŒw§ˆÞG!F—UÒcÖ´ ´»©d% —ˆÃ c ÷æóü1ˆ3 }bTž Ùüˆ¬ù~êËÿú…¬Ÿï†Oä P¹ðOˆm&8%s²aýq^Ž„†=äÿ”ù“Ò¹lýD‰7)Á1Z¶ÚÓZÌX*¸#µ»i©Ú_€#}’w¸?‡ÿZ¬Mnq’¬ù!ظGzÕðŠ´û™—GòÌ3 Â&'+.9?C׎ŸÊºé]ìã…ÉÆO ¨¦¶ù2OZåu§ `·ù{þ•ƲbS sÅbŠIéUÂ+f$îäûÖ*éÂËP ªL Êû{Ws [ǵNÌì‘uºÈ€‘Ç9¨.#ÌN žÆ¹Ë¨ É»{Ö5Ä'# '"©>wœõÍK fB09?¥tÞe‹Xò?†deÇ©ÿu—¶a]pµ¬¯ ”+3íÜZ»%ÜK˜¾cQÈ®nYžîå¦~¬xƒµ%ÌÊóé÷ªž(Øñm©c²fl¬ þb5*äc$jÀBFÎj’ȉ;(mÊ*𜘊¦A=鈤³n#ô¨§˜ +޽ê¦÷¯ž(«ú(ίÿ{ÿA5ÚÚ/“r¯ê1[q¹SÖ´b¹Cá÷—­mé’'xêõ¦“sjÂÜ7÷ª®¡wµQ0 ’qÍQ¥‘G!@æ™rÓZÌ©ž;T'¼ŠD%r­ÐƒYs6åÞ§J$â<ºa½2++P´ºº …0£îà:&¡eh×w1*[¨Ü[Î\ùÖŽœÞD[ór½1[Vß2î^žµo9êsVí€##¨<Öþž *‚<özdy»¼‚#¤²?†j…·‹4'›Éµ¸k‡ï±H®?­s^#¾[›Ÿ.%*$mì¿çÞ¨ÆË #*Œ“é\åö­sª:,‡÷1ýÄ~&®i²Ël7¦ã !XÁÿëÖõ¥œWòŠ™ Ž•«o ZÀwI#ÈÇÐàV•ºAòጠ=qÞ­…È­;[y%€: ã‚*P¥8`Aµ$—ImlóLÛQFI5æšÖ£qwª6 $xåì8Ø@yÿõúÖµ‡®YaµÕULhN'Pw¨éù é!Ô —÷¢PÈ~e#?5:Úé'½ I;k¥À)¼«œQ6Ù3¸RsƒÒœYeˆµFK³€ 𵇣¼ÝD+ƒÈ‹ÏÖµU£†!1¬q'ÝU}+“ñΨÖú'Ù°÷O³è£“ü€ükÏ#5­g{4@l™”ÀÿCZqø‚h_nÜû†Çô§ Æ–FvQ–9뚳ǎªÝÉ´·ÄkÄœgÒ¹Ø&¶“´‘ž+V\fúšÔ‚T•EŽõ­c8„0}j)ÖG¹g‘‹è}½*XãR1]lv~k* Æfžñ`ÙF=;ȹµX 1r¾ž•WΞ€uª³ë1ˆÚ8ã-¸Kp?*ÁÜé*”ÜàF;bº/íÌ»!-.>bÇ>¼V}ÄóÜÒ¿ÐUõð@®±Ÿ˜pÝ…e¦¥ÿ*vÿxñš¹±Ï#v¯¢µ¼2Jø†Ôƒ¿ÿ 5zVš[ÔüѧÌÀ÷ö§xÃÑjZs­€Ù6å*¥þ^¿˜ï^{w§Mes=¤à‰Š§#ðöª6É=Ž+¢±½Hº¿8íSÜݱƒ÷GAO¾¬¶)f—óÇ Cj¬o·¨Á5‰t%y²çyÇ,Ç&¦Óa3](BѰçw Mn,Ÿi¥ÜX{t®îlÒÞ%f’vÀU=+GFð[Yµ3å¨Áòü߉í]D¶VÍ`ÖI ÇÚ£Ó¡÷>ýkœµC¦ßªÿlê+y¥,Ø^I©áR¼°ùªÒ±Îtl« ylyëZª‘OéŸJçu«q+yqĽG©®/QÒYX´jqÝ}+ŸšÜò6ŸÆ­è_lŽðùNÂ8<ƒí]µ±h×z¥Ïè?É­hï¤xÂ:ƒŽ„qRÇ27±÷§íŽJ‚}OjUvŠUt$2œŒV¤7²M2m=EHî›ÛwÝÏå^eâûżñ„˜íÔGÿêßÏô¬ß±I<`#€\ñS›àP_€AëNEýöÓùÖŒC­*¼U™´”¾‡díµXq´q¦ƒ©è²´²Ff·‰£{ú/zm…ËÜÍ1‘¹Î5ØÚ[,jò¯¹õ«jJŒóøTË>õ*à¨õ¥%ºœ[[õ=[Ú½·‹sÞ¨]Î@äX7.YÎ[ò5F[ˆ¢p¬NqØV$±–”²‘·<O=*Xx~zU·Q‘·§µI ÀÄÐ<ã¨hÖÆeh0¸ü«/ìÑ0ÃíŸñ¯ ¢µ|8 kÖÀuùÿô^mÒò"e» ZQÊè˜fA\¿Œìe³Õm®Xa.à;Ž?–Óø×#x›gÜ:0Ïûf%½ñZÖÀãÄUÛk9¥¹ùxˆŽxïO»Ò¶ðã¿AKsfö:_•e¯oO–Š£½Oÿ_ëZÚ?†¢±´+u!iå8?,~˜õ>õ¿iik`ˆÊ»æ ´Ìà>¿J‘î†i¢|àÉöª—ö/:y¨?|½½EY³¶)yïH•qF:õ©@MZkŸ.e#¸­(µ%Ú‰ô$TRJ¾\²çµP¹Í&Ô s\ö­eõÚ?|Ç î*{[í­Äk÷±–>¦´a"¯]£úæ®DE8αòx¦&«oʬ҄ÊñžjôwJsŠÿîœÔëp° îÁTw'¨Þx¢Ê%s†Y9Ú±úýzWŸ…ÊòÊŤv,ÇÔžMLÙq¸ãÐÕŒÐ[ãœ.O×§ô¤Hwä²àôTñ‡^sOip§Öº[ ¸¾Ã n[hÏÕfU‰ .GtëšçuÿØßÿ¥éÇìw,¿qÓ±ú~]êo²¢24ŒŠº±õüy¦† `Ðrá@ïZúyû&Ö„â@rO­t)ª¤ñí„óìj¤÷jјö†ÏsÚ³–$iWÌä•CS„yªÊã¬ÙZJ’1†æ¦N·Sæ}).uÆN:Ö#N¡ˆÈà×…Q]Œôõ#9ó8ÿ¶m^èöÏŠDŒã¬Èü<ÃRž@ö¹ËzŸcZ>!Ð,5K;vºŒ¿ÙÜ•ç¦ìgùʼÿÇZ•¶ƒ ݤe@l±9V㿾ßθpìß"ç5Ðéö˜ ÈÙ>‹]†š-®Q Œ,r¢ç ßüjeÓùY—(9wúU‘ÇÐ}qU¯#aH¹5½ËM‡^Òš7—é‘W­ÑÄŠÅy«Ž ‘Øw¥Iƒš~§4áÔ¸§îô©cŸ±5s:£4±’¤tµŸÒË3Ipq!è{UÄ•WŽGò©b¼„¾UÁÇPx4³^·D;}ê¤÷ÁFÞ‚´­„±+Á#2¼22§Ò©Lê&ŠåyúÕË ‚mÀÉÀâ´þÙû¡<ƒš¿owÙ/šÛXdc½fÏy‡*¤ýEU/“Ò¦ˆŒpyô« 1Œò ¢¤ûP©RHÇ~+V(_ÊV`‘*x|ÕJôî+žõJx³ =Ç5P)Öä´€ŒñÏ“{uq¥23È@l© 5³¥\µÊ¹` |ýI©KåÚ;/Þ`@ö¬5¸ç½xÒü?ãÆúv?é¯þ‹j÷D¹Uáð=êG½·H÷çw8â©ÞxŠ%¡XÁfÁ5Êê9Ôlna™2FTzÛõÅyÖœ²Ë*ÇnïœmQ“]|:dÐÛy“F‘çî‚yÏáýiÖ°´W $NÞbž­up?ÚaÜʃï xQŽGJ©©|¶Yƒ©®©ŠtÛ2™ù[=>†´.‹Û–† °ÃX7ªÛO_Z†)^ÆasYsNUÉôªsÏÆs×µQ$¹ÇsZ–¬Àô«±ÌNßÊ«Éõ25äa¹R`Q½G­!¦‰K/°§í.Bü í-l×LÓã…$Œ³ÿxžôõ¼Ù+1€ù íX²ÌÛˆ#æ'–>µŒ³Î¥Ñä…¯š&.0ï]DVy#Ž}ªW–Þݶ¼€¸þÖ£’öI¾Õ\JPåÀ$ûUè-få°ˆ{µthˆe·ʧ¬1Ð –8Ë0 €*ÊéèN_,J”A°ª€¨½:SŽ‹k4ÂY‹1œ\­þÈõ;”^d*sÀ8ªèQså®2rh•Æj†«hV!pæžõç—·¾¡$»2Cc“éÿê¦ÿiIÿ=Èü«Í(®‡Àÿò8ØÛOýÕíi6 '8¬ý@Ôo­m^ÕWËMÛ²O|c§Ó½sRxsWŒ©FúH?­<éZ½±–êÑÑ1&CÐÕJ»Õµ4´´‰žW ÷®·]ðŠiw[ÜÒ<*û”ô<‚3ߟçXãF–ÞL£n_P;{б6ugåÍ4$r#•![èjÌþoÞ“hõ5¿ÿÌM Ý]1pëxÁ<œsœzW)LF@ëÈ«p[I)Â.qÔö«öúT—{â…CÈ«¼¾zc·ãX÷#Fy¨â 9äÔÀj;†ÇœÔ¬ÄƬ;€j³.s¸pzÖ5ä[ŒJö"±®¬¤6q×5IÎæÅ="*7c­XFÀ­ s4ØlM_»µ@ŒöL[G `€»(çžõ•"‡Ê¸Ç8Ç¥6(™Wkvã>µ>8ÀéWìô«ÙKktvÀZèVGŽÒ(åÆõ\U n8æ˜Åe5‡ytDÅ:Ú£ŠäÇ*ȆS}ë “ÄWšƒ,Q¼S©ú“W­£EÚ²½Ï©«à|¼Óª{yÄYÊæ¯G?˜3Ȇ¯,…öíl`V´hÙNðK ¶;DlÐãkt­k[…šÛ ž•1(TÆzt·¶ö‰ºyB÷ ԟ¸#4­$„³1,@éJÇol~ „¹NkReR»C `׊øšÎ]&ýчÈÎpÞžßçµsßÚ×õ®vŠé|žgôåõó?ô[WÐv6vr{We¥i)Ç€W$~5¥.ƒ§½Íº[GÚ«º¯>Çð<Ö4^&x•â‘ý6£ñÅihÒ¼=ÿg[”iÙ‹3}ûV?ôk›¸­îm!yZ6!•HSíߥq1‡FÃ+ uSÚ½*Si®hIâ #–%cŽªØê¨>•Çéþk;ùd¸‘f¶‹ýHýϦ=+V{ÝÈcõ zW/o¡¼`ÉzûFxE<ŸsN™Ã··AÉÚªtPÛÅ¥X,BTóO2’z·øóÖ¸ínÞí¥„å_–†¨…ãÒ” ¡v¬ÏŒ`:ϸÖͳ‹eIE˜žôG©I/p>•Y]™ÿxr ÉŸ$0¬L#\‡ëšÉŸNTa"0rÉMÜcTL´ûéœç?ΰ'mÃæéTâ˜ÒíÀÚNkÿÄZÝy-š£ïº60kŽk×–êId໊ж¸ šÑW2a±òzúš±eå†p*¥õÄq‹–N•H±ùvºV—gieüŠUÌ`çq98ôª×d4²Üˆ• „nÚ?úUA(¨ndºc=Á¬¹.˜U†ië#ºòH4(Úw!Ã⺠\Íl’HâF=ñþy¥d$ŸJ¥pv·°¬™×÷…ÇzšÏH›$2 “Œ“[Vº6lfF éZQ1S´®3Snö&œ:QW,¡39ç¢ëZðÊNÕiÌeÓ¡õoåÅ_‰T.ÑŒŽµÁùÔÀªÍ¹Ž›q;ÊgŒcÌ^Éå’ªsƒÔÖke¹ïÞ¢“Sº·UU”Î[·ãO7qÉ9Ã{ó\ÿˆÚI´k£jà\D¾ddŒò9<}3^j5ß0y¸<ÿ©_þ&¹J+¿ø'ÏÅí þÞ?ôD•ö5P)b,riÔPNME ÂN̽éeŒJ¡OLƒN `(Å;ÑŠ®+KôöfLïbÙäf¢Õt8®?z¥£n2WéŠäu»°XÐH$/ÏLŠæn#pä°ÁªþÕVúq¹le»W!uœÅ¾é''Þ³'´aÛŸZ†ÞV‚@dBéžFk¨³–;¨ƒCÌgÛ­(ÕUv€+3U³D." •ãŽâ²”ñšš1Ž­uQjöGH‚ÙᙦŒ}õÀÿ¦*¶#ÄÀFFMbÍ+A!Cø}*µÅë8Ø^¸ª€oš®Ä£ƒÖ¬5¸q•>Õ=ƒÉe1IA0¿~ ZÕ•ÍgÊ„wª¦ÒF|lÎjÖ—mqo¨¡ØBCjèØSsȧ罨©’GÆ­+K‡0Äœ+©Ðn·ÚKtm»ŸCÿê­(¦n_=Å>á”ìÚsœœw¨Š7?)ü«'X‘âJ¶ÞpMs—Æ_9ëKg™ÕrÍZi|ÄWN›”qÿÖ¬˜´›YÔ¯ï#'Œ£s^*· Ä%ÓJ&RûYpTgÖ¹ßíýü~åôW |ÿ’½¡ÛÇþˆ’¾¿¢Š)¹ Y}:æš±$[Œh'œ ‰.YîB<¯vçÒ¬ÑHHQ’@¦šHS¸œçô¨îHkYqóRpã\Åý¸Õ#Æ@0­œ÷é^}|dK©#/(J“CTØŽ¦±®Ì­Àd'Ч%¸ÇN[~9ÖoØüû‘ zúWC ) IchAŽõVþñ‘L)Æz¸éôª6w†Ñ¼¹>hn¸÷]±Jb~TИ`9Á«1äw§´…$Ÿ«ß:Ê‹Î$Ÿ¥Q%cô -Ôr{V…´eT«Ñ®zSä`n=êͤâxŒdüÉÀ÷©d@£qãµ[íÞ´¬T¼›ûÖ´)ç4bŽ”áRÆ9«0¹AÜ×AáÙ@½u'‰÷ôçükNêh"?ëTèÜÒØÊÒ±evxÁî;Ö«Ê›OÌ?k Uh§µp$zW-*cvÑšÓÑã1¯˜ã\ÖôRg½@öI'˜£d™É#¡ü+É>*[j°ëkzÖr½„p$báåIÝŽœžõç?ÚcûÕEzÁ/ù+Úý¼è‰+ëú)íRqš…n£i|†'b¦ ûÒÑE!Î:ö¬[›kטïo11Ó8ÅOa%ÚJb”ˆýÒz¯øŠÓ* ‘ëÁ®SÄ7qiöæÒØfy³÷ø×ŸêFŠª0穬‡¸[Ë‘‚’1É⢒GLŒUY#Àâ³®FÜ&~véE¼+ÿ¶zšœî+Ô÷ª7P¸‹ ãëéYf)W Œ­9e+”Çäëƒü&§b®wdÑö´NÄý*9®|¤!_ƪÌÎÎ9ÂYŽZ®À4zž™«±NUÇÒ¬5Ä0¦d•P´@¬éõ‹U$+ÿujšë’C:Ë CƒüG¨«–º¼ú…㉈T#(‹ÀÕ©lò£¯­tþRDã¯Ö¦¢z1H2(Ç©ašPKíäûÖŽØr¸$gŠ×СI/V3’5§q¦þùc<lVb±6ŒvÊOnh–\!èžõ•qM ÄÉÅRk2ÁW=MiCU àTëûµ¸jÍ\Ly!ÎIúšój¯a€.¡Î ®R]\ÎItÚO¡¦Ûk³ÙŠ<Èÿ¸ßÒ·­5+=INÆÙ(d~¿Qëþxª9n=©¾`ÇZœ6úTR ç5JXê“@d— :w© ,J&«²óŒõ­1¦Å°ï’qMû ' n?SQMiqä'ZçUQæ0àRÛÜ,ŶåJœóU5™î·°ÁeÕ#åàsQˆó×ëV-•Öò%‹–$õ®Ú(þÏÜs)1÷«vöÛH‘ßq=t«„ãŠLóJ)¾` Š\²¾W¨éRG,[ý+BØÁ+.ùJ óòæºMÍ­µ›ÏŽTaµJç¯ÐÍóUöç œšIöÆIf ­bÝ8–_—îÖ£@AÀ$g°«"Vç=ÍYòaX˜)ˆõ¬«Æx¶(ÜRj8ï.b]äèëXZç›(„•y<õ5ž^\ðó½è¿ä¯h_öñÿ¤òW×ô•‘u ‘Î’ï8ÇLñZÏæ&1SÑESw·õ¡[pÎ8¤•ü¸™ýrZ¢Ý\,†BvõÆx¯ñ}߬΀ð’²õþïãXøÍOga5úÈÉ…TîÝ ô­‹;´ƒƒ#räzÒHò¨÷…«¡¾P}…3vsšŠHóUåš VE•¶—ZI¡Wù•ÁSÜt5V¦I—i ƒ’1ži†] ÅG<±Û'™#m+*ëTi×lKµ¼zÕ¥¹l“ïV-›É™_°ê=E[¾a(Œ¯APª€A2'ÐóRéó,S†~ð7¡®™îƒŽ8Êô°ò$­h¬²¿ü²#ô§)d$¿Nƒš”0ÆAȥžԴRcZZUüÖQ:1e Br5é–—VÚŒ~d<0hÏUÿëV^³³Ï@¤oQ‡ö5”_iäR«¡ “ŠšI72ªò:’ G3õÆEXÓä&ÕÉèÍžjÜ!~aÇҹ˻B“;/Ìö¨ü¿c_6Ñ^ðKþJö…ÿoúO%}HX(É z«rÂ]‰™2yÇAïš–|£Û©©¬ÛP·§5»4¬Òž§¢Ž´Èˆ*p03Uõ ž(~H÷“Û8®Z÷X· až)#sµ€8÷ãµ|û¯éÒYë—6ÿjK–B ¹$dÿ:£¬òL# Žy=p+¡!-tÒ‘ ÇóªŸjÈëM3ÉUyå`V”N ´mܨþTèÀe¸¦ÊZ%äñØÖ%ô´Ê× Ùn; YLw®‹Ã¨2÷°3üëv{KYл(W;ÆükÔäK‰Þ\¼p­Óue¬e[·Z‘Ô.Í( Ž)âO“kv£ ²+pH§ÚÙO¨Ë¶1„}ÏA]–io š+ ‘ÓåÞÜçð­(öíùU}…IšŽA¹1ŒÔ Ž•ý*Ì$˜T¶A÷©(¦»„çš’) I‚qÞºM7WP‰1fŽáz(þ/Æ­-㘚YÇÞ<·¾jRAúT2ã©»²>UŠžœµöŒÆœ¶:š¼eK[X÷8¯OsY÷žd¢02@ɪrNzƒËæ¾c¢½à—ü•í þÞ?ôD•õý#(a†ŠP00*Ž¥ö†ˆ,ù½Hö5UÒùÂåX(eNkYT ÔŽhDGAN¤c´¨´€0)“cÊ`{ôú×;¯ÛiÃJ{‹ó±Ôb6_¼[Ðzׇ_xvòûYíäYžW-°)AéëÚ±“t“6NNsO’FkiÌåG0Çó¦]x^ôÛ™bqÕü¨†6¶µŽ;…+ *ÏëJ&ËqÀ©w?wÞ¹E|Û—d»E°ÿGP:V­Ž®lÑb’, îjÍþ²—0¬6²gpùÛG·5J ÆG©.£HØ7Cè*œòã7%* ³`úUg¹sÂŒù©’)§ˆJÄ:Þ»=àm.#"0£ ƒøOÿ_­Y·!˜¨ÆÜæ¯*ã·¸cš1Œô¥ëE'zAëÍ5@Sò­Z†Q¡À'<õÑCr¬œåV˜‡AêMf]^D&ÏEæ«%Ò9ã¹êMY2|…½QRòY‰#žOJ¿l…ƒHFYÿAJð‚2Í€*¯˜G¾c¢½à—ü•í þÞ?ôžJúþŠ)¥ÎGZu5P)8ïN¢™"–çO¦€wO…UP³œÎ}+™Ö´7×/gºhí"ŒþéFNz×1Ag<‘En@žI÷ükÆÒU˜^9ééHetèkkJß%ªHÇ$dÝÍjÀÎòch­¨¡@ÊGTé¥[^Û,W0,ƒg¨úáõ›[[RkkWy#ŒíËu¸ü+=܈ÈMfÌŠˆXŠY-Ì!n23zÉ,3ƒùV¦‰¢}¬K<‹ò‘O¿éùÕÙ4©!)ϵeÜ@CípCc½Qž&DbzcƒSÃgk备q$dóÞ•­m÷a!¿jÌ>šéÕÝVÞ>ùŸÀZèí´«;D_HTp_úÕ®™­¯UàvH¤;ð¼ ã½jhœ7YŽL%ØŽÌ=EniŒŒYH=:óR”Lq@u sKŠ\qO~lÖ¬s"Ç–lJeÄŽöÌ „f²Ï"—$4­{rc( à÷Ç5"]‘jîH˜ÈoLÒˬϦá""ölq\Ž­âmT¶Vð”í´ý+þ+Òsý¥r3Û}yÕè¿ä¯h_öñÿ¤òW×ôQEÕ å²J\ÔÐIÚJàŸ­ ’£pÁî)hªZ ”ÙHbRä/Ü^¦±lnd`PÈÝ ž•åž6¼½ÓüA›{çXæd1 |‡‘Ó?p*‚)2 ÚÝE=‡=8­M>ñD~^6søWAi“‚1í[v°1O<Ôú­ðÑô§”ß?Éÿh÷ü+Ís1$’Ää“LdsÎ?*H¬$¹7®ØÃdœöúV„ö¹Î1ŠªÖD¨y5ÑØÀö–És^õbH•×~5Z[(¦âT êzÖ¿¥´¨¶pÉ <>ß›~µåCÃ0k_A½X¯¶2‚$Tž ×I,Äu4ɼ°AíšÉÔ"6å[ïT×>RH]d™O ¼kªÐµÏ·/ÙîúJŒî‡¾Æ·À¥Å%Ö& ‰˜;ƒëÅXÓ²(ÜÉ÷GâiäÝ×&¶máv³c)ÁaYRFcm¬0A¦1¦œÔR 1ÈÝÊâ°¯dV·Ã?®Fþ틲ªàz“Ö³1!æ¹ú+Ð> É^пíãÿI䯯é)b¡#¨Í-Rn]Ûw ã8ÍD³$§oO ªØíš}&á»nyÆqKi{V6»mi ó «*ïgã*£žµóæ¯|ú¦¡s{+»|€ö^Ãò¬×¿=*0r0zŠ[V 3 98çÒ¶ôÛù¬îcÚwF[ ­Ò»ËûyØ)>[ÿuº~¹ßµî®ÑýÌbc¡é“þ{X¢-ÀÍKÈãŽA­”…¹^Ù㊆â͇Üù‡ëE¬.fýâ·ÔUðĶ1Ç­;4†šFj½Æix˜¸·G÷Ç#ñ¬èü7oo9šÞIº¯‚èjÜKÆW¯qP<3³R}9ª³Âèľ¾µžöM:ĈK9àWeaá9t½$݆V›¹#×ÿ­M™¸ã“NaV+) Í"ä}*å…©¸¸Už¤ú Ú¸ÑqG±®îÚÀƒî*¬‘´nUª.¤ŽÔŽÔ†à\Ü–q1pÀ‚}ëÔm7N­eÅsW |ÿ’½¡ÛÇþ“É__Ó H\9E.:69úBBŒž”‚Eaj)­ÖVÞ8 Yö0Ì·ó@Ÿ5¤#&a#tQ€*ZhEVfOZuEs:Û[¼¯ÑGOS^kâØ¯µXž¤<ÀÎ~aýÜöé^e©išt.íÞ=ç†ÇÊ~‡½>+h™(æ§u³;1´vïS­„(¤ˆ€Ï §Gd¡·7 9xJ}>eyK8'®ÇJbX þ6üjD±Erû³éÅYHöœæŸMÎz~t RÑEPzTmEKo¢]ß0ÄEWÕ¸©Æ›œdB—£7¯ÿZºki|ÛPò<°§ò¬©-’Ñš%zúÔR[ïN@NµZ"rI.;Qk:³íVVÔJåɨßN·L±‡l˜ë“Už‘ ‚*±9àR8Ú´ì®J>Œµ±%Äf<‚:̸[¶k6äî!Î2j½5Ø*=¬I r3lg9èx¨µ¼Ö2Iye Ažyëí\©ÑîÔmØÁÖ¸z+¼ø3*ÃñcD‘Îyù?öÂJúú+˜e¤Š}³RnRqžij+• làä u«2ÒB÷mã®áÏçZÅyÈíKì:ÒÔ2O²â8¼¹~~eëSPNjƒÄ×–\õÈ ¬mNÃd‘dàÿJå¼[© -'É!3ª¤g8ïøW°0+/=ªUŒîÕåA¤àqQ— Å9iȾ´ú3IÖŽÜTm¸äŽÔÄŸsm=jÅÐXgw¯{O³Žê9™†ÒÁ«?Ùqã"F«ÖÑ[¶à#©5¦gXÀU=y&³5XY–X×;†=êkY 6©Œ0ÓÙ<à󎔞^0¤rjxlq wûV•¾j(XÊŽ¸ÜiãL‰9†OLÔÖP¤¤'§¾k›¿‰RÝqÕš³6óƒK±Ni0ñ¸nAÏçW£ºôëPÉ \äÕFfvÉü¨ªwW+±£SÍbùÉ|®A<žõÍÝİù~s,`}Üàcßk¥]Ççn¿Þ®Ší>Gæ|MÒvÜùÜÿÛ¯«´ë+$¿'¦jý¤/æ3»äg¦*õ5Ÿkk`†õ¥´ṗ5± ¥ÐÏÒ¤ÀÎ{ÒÒc­"‚:‘N¤Àô Ô qWsé^WñCyg†è]nbÞ\i·…dœçÖ¹›xŒ0ˆØœ¯­8“ƒÍ$R‰ †Rã#Ð~i‹V-É'ކʰÆqO š\f–Šiâ¢(7n8íV"²’u, 9§µˆP2Äý*ö–ŠHwgv Ædû»Œ ­Œ>VnEZ—t¶ä#|À‚(µ´v¼—‚sÒ¦@RB¡ºµ8š5“kp{{Õ˜î0~ïâkZÝË8*V*Mg\Æn_$pÚ¹Ÿo$ÔÒ±rd<ñW"^qÒ›vyUõ©÷–L#á—’=j¨ŽN´×]¹ªnfÝÀãôªw–î܆ã$V-€v–$~UŸ}pÁ¼¾‹YæDƒ ÍqtWðQC|]ÐÃAûGþ¸I_^G DUÀ4¨… Êö”óYú¯œm×É$pHô¦éÚ{AhRwœÕ~8ü¼ûÓ袊(¨.% ÁëÁ¯:ñÜ[íàCºD,Ütô5ÆÈä·×­SV2®HîjZ(¤Ç­:RÑE3†èsŠç4ücé]üKcaÕ²OçéCÇ»•›6Ÿ2 ½G§QW4¨<é7·ú´éîjíó‘ ½ÀéXßjiqQ CšuäÃÍ•ÉBxÏ$Õv ]š 'TćhЉ¢1mŠc¶W CóÒ´ì/mà…£’Ò•5 ÔÆän §åÀíéUâp­6q–Ï­DzqYšÀ[YT.”ª·¦{×™jaàd•9 ëï]U¯ÃýBkHek¿)ž5c?p‘Óð¯2¢»ß‚ìâÖ†Oo?ÿDI_Y_MØ÷3…‡9ü)šlñ<¥UòÅsÐÖQEâŠ:Ñ\.5An-$òíä1Uù·§ò®R7—šBîG%ŽIüj¼Ž¤«Ó½DÄGZ1Šz!sÓ½5SWŽ‹xÚcÞlÆåˆýæÕ“ . #oÔÀç§5*ÀÒP¹,@×55ÕŒ¶Ž”ãÔÔ(›³ŽkbÒÈA˜ÿ}ÇåPΊ, â ŠÕî§Ú€…y±À­ë;U¶€ªŒsÞ§ß‚ ,¸ùyÈ4ÐÜÕ'l18ïN#8æ­ÂØÚIi †Qߌ £w šY#\ŒqÓ5˜ºCîijþêæ¯C¢ÚcçÞäú·øb§K[{8ÞC ,ÉPOÉHIbÄòi™ÍmG)sè*ÈžM†1»¯p*›ÛL¼²cñ ! È4nÙ*dqV`g±¦8;NÕÅ@ÀƒóSI®sP¸]Bœ†Ç&¹ÝØ_x² +¦‰bFóX÷ÂàÏ\œqõ¯O3 <îÏÒ¾r¢»„ [â–Œý6ÿÑ2WÕ×ЇѧP[ò ÿJ<=‚Ùä›ï¹Â@+g´QÞäŽ T{Ão&ˈðFL ±±LÇ êäTw­,vÆHY0Û}@ê?*’ ’âš3•q‘TuË5¼ÒäR>dù×ðÿëW•jöþL㎠ýk4ÓGÁëF=ªÌ]‘b};×E§h©Û‹°N«è¿_zÑšRN=Zç5=+lÆhÈT?yGcT¼•AÆ*þ“j'Õ ŒôS½¸é‘ý+ žØ‡rà2±î21TãÑ¢-æ*€ Î=i¿deÝ‚vg½Q–Êk‰ÖpI?1ô»œVVË kœrXŽIõ¨e =ùªîá>ö8ªÉ82:†b¹$Të"²6ÓÎ*™µ—1EÆwj¤×r$1POJµk;¼D»dç­Z¶äóÖ¯·¦GQÒ„™Pc9>‚ªëS•Òäìd!õþµÉ“šA[‘ð{Sæ!#Î*“9nZ ˜æ«È0y§FøÀ=­N͸`w¨eŒ…Ë ¬XnÅqZõ䶳̨ùÎ8æ¸kÙ$žQ,ŒYÁêiãYÕT5+°yíÅdÑ]çÁ„ßñkDQßÏÿÑW×ÞJù-èÈáXð`/J–Š(¢£šž2øÔUxì…¾î)#·20UZµällzSž2ãVEÞÛgGãŠä|G4[K'Ë7qšá¯L þ¤¯J£´UJ+ºø6îŸôFï?÷âJúúÜÌãtŒ¸ô¥ù·öÛM>oœ»vyXù³Ù§“ŒRÑE=¨¢ŠÎÕµkm6ó²ÎPƒ¸¯/[«Ba)—c÷TVÕ·†m#·“í‡ÍžEÁlðŸOzÃKò®'ŠpNϺGz¸bpïU$“§*{U&È|‚T©íZö÷Ââ0þðpG¯½iÛd[/¯<Ó$l¢¤è 9ŒŽƒøMhY£F#b99$ Ð0ÊœŠ‰É^´×a$eÎ}ñT¥ˆ ûÅûG8¨›{fâ5].cq€pÞ˜¨&ž(C¶ÒÇ¥)êXòECkk;Ê陯j°"ç­=aÿZÇIpïØ’jôr¦Þ™cÐRÞé³Ïiç<£ gaþžõ‰ce%ÝÇ–¤çø‰è¢¢td$È8>Ô€ƒÍ,vÞc1' ÛwO´h§/ ÎÑÁõ«êÿ¿SèÀšÓŸ•ýk*ír¤zÖKBCc·­@€¤À±ïÍtvö{päòMW½MÆßöAªÞmfê˜hÛàæ¹-nÝfÓäF)#Ƹ9#1’¬9ƒbzÍ¢»ß‚ͳâÞ†Ø'ýþ¸I__ÄÅ—%6óÒŸEG3ˆÓqõ§©A>ô´QE! “Q,¬ó2®Ý}yÏøVn½eõ°C´J§å'œƒÔŸJȶ°µÓT¬1Ù‡ÌÀrj+‰1ÈcX÷Ë!Æ3Ò«T`õ¨$(– }k.ââÄÉúR@äJ¬½k®€l‰¸­(Ã> gñªú‰[u@ƒæ=@ªPÞL²0cû¿ÔSÞðÆH2ƒ5=´å£-¸õõ©í±+´¯¡ï¶äñóê*®¥p¿gSÐÇ?JÂ’à™NµV’W˜–vËzÖ•µÑød®0}ia¸cq¿§øVºe Š.Ei4¹9 õíXqGµqúÖ•¸Ý¸ŒÒ¯Êža\HíÚ¤ÐÇr·vµÌêp›{âØùd‡×½g•Ür½{Š–#“Nµ}$qO8Í+šIµ)ÎGÊ=0+=ï'|å†>‚ .ìrXÔM'Ï÷r+¢ƒW‚;hWyv€@äTë-ÝǘPmœ÷ª2rÊοy`¿pÒ!Tô®'X×¢‰ÚÌ[—™dÆßlcúÖ+µ¥ÀC‚¤sQmþyW1Ew?¦[Šš4¬…Âùÿ(ÿ®W×Öw-ušÐ´Y<9Èõ«TSÅæÅ·Þ«Ák*LNûT=*í^{¡ ‘ ‹s×b‘”0Áņ%“z¢‡Æ3Ži&„J£ûá¬-M•%{b°.AÚߪ'(Ø`sÞ˜îü½«:bL0È¥1¤ ÓR¡Ìˆì<ÖÕ¼ï3@«ðŸµZõYy\íâ±.†àìl gªÝ>ôYû½j85‰ MˆˆÉœüÀçùÔ«âèÐÆO¶iç_uÛ)ú=V½ÕÚîÝcXgpbÛóž>•GÌ?ÄiàÓÄŒ;äU‹{¥S‰0®+ZÚêedØ/ïKB#(cøš¡L™ÍjÃ&Ò±Ž‡¡­8LÕ[»ÒFÈCϹ¬ýR/´Yz3ŸÀõ¬¸tÛ™—tiÛqÅ2Hgˆ’6ïÔ~t$™ µ¸ù¶´P?. ô¬‰¶ XŸ®*³:’F0 FG8¨dÎx«¶+¾å/&·DA×ÍV¸´+óÞ³5£ÌÃåU'ë^3©†kÉ%q––?çñª   Àãô¨|×'ýi¬Ê+¿ø&ø»¡‚2?Ò?ôD•öAE'\‚8£„_@)AÈÈ¢Š`¦L|äc4ú(¢¨]Z¤ùÞ¼YZ,VWM¼úÖ\Ú3ÈÅ–á“Ñ”ŠÊ’ÈÛ\4r2–ÚR³îlîMÃà‘—#o«ˆn"¸dEG|â¥qƒœñW¬åE-‚kIeTŒ¹<(ÏJÏ“V´S†“袳o®£¸<`´xªLFÆ¡ª¸ÀSv`Òž{PTŒUpÙ›$·VÍ ?9ö§;R–lX*Äf2Ëë[–/ÜÆÛ€üÅYÔ.¾ÃfJ¶e•?ưíî~o‰cWZV*{õ«fA8l`f¡Ä“øÓLvò6ãîçԒܬq’øät¬yÎY' LòséÒ©QšksSÚNa}Àž tÖ7¶Ò.ÑŠÝØ®áWappU²: ä¼X‹„ªNÝ£8õÍy¡r+mÉ)Wÿ"¥À€py¬z+Ð> É^пíãÿI䯯è¤##f‘‘_×4à(¢Š)2w·Z‰dapÑžA¯õÿ>õ5E*§³/ÜÇ^Œÿ ¬°ÄÏJ˺‡Ì½‘ýp?!WV2©Œ{V}ô±Em'˜Šût5€¤J‡¥!àcÒ”Jꌞa zŒÖ}áùǦ*¶ïF§n8êM!¤(ê)…æ”:ÔC"i9àô¥œ9¥ ô¥Ç–9^ÆÅ_ÔT·wsÞJ%•Á`¸㊄1<žµ*O*r²0?Z—í×É“wÔS¢¸w'y…K%ï”F9ã¥Sžå¦ëÓÒ£Ý) ¤‘RÙˆÅä>q>Vá»Ú´)íEG ϸ‡©^® Äú…Ä—"ÚFsóÜúæ¸û¨ö9Q÷s¸U û®`ó~ñN=+=e@ÏA\õè¿ä¯h_öñÿ¤òW×ôÒ pA㸡Ãÿ(Î9ëKECÀÏ\TMæ:1 •h… FAûÂ9öö Î¤àU]CQ{8£xížrï«ÇÎkS¿2˸'–62?*«nDÊrøu듎)²]Ø[dËs=ðrJȟĪû’8J`à>s‘Y·w±Ü(PI\dç©5 N?QéP5Ã1ôÔ,œ|Ç5Z膑ž•Iƒ“×ò©_HúÔ£?ZCœqL*囿8ãéW-ãÈ.@ÇAš¦u2I4ºÄˆÅYLoÔuç>¿¦ÙÝ.f’7##0I‚=AÛƒRA«é·ŒæÞvm£ŸÝ8¨«Ñí ²¤qÖœä Ë %I9Vüø©¡˜(äÒ+n'ÒŠP)y^‡Þ§­5ºP™+Í:Š)UK0U“Šìté„Ö*¥‰x€BO|t4˘™ã` ÊêÚ ÒFpѸ=˜s\«§Ïl¿êØí=îÇåX“j~T,#Œ4Š?ˆq\Û\£1fûÄäÕ*+Ð> É^пíãÿI䯯袚Ä3LyÑ9#Ò’5wbîHô5'9ö ŒãÚšl„Ž„~´ú+;RpxÚ¼W«ÈέžØaX†éäqëÖ©Ít$S¹6··J…dSÆy óMnE3yÇJQ&*¼›Ìå—îžÔ¼1øÔ©9ÆOZf¤K°QÞ¯ÇÜt¬ M7uä²mûÒ3~µÚiú¥Õ›¥ìÉ9ó w'Ú¸øìm"-¢ø•óùóùÕ…_* t¨&,î’MFˆ| pAô§uÁÏàjʶôÜ*•Ó|ÀT;òx8©ÒS´Ù«£ ¥f 9¦æ™¼Û·ñ§ðµÔ\ù€f¥'rÑÓ'¯Ú´tÛ¿³ÞÄl•¿¥i]ßAžXmïè•s1J°Oa\gˆtˈâ2Ûƒ,#––ã\m´©\ DãµhYÄ“iÊÎ9ŒTò(LP8ÏZj±h=sR'"•þíV'd«·ø¸"¥f*Ü{ ±$J˜#$‘Þ˜%hßå8õ÷«9ÈÉúÔÖÀùì3V^©ÝHÑÚÍ(ÁdF œ ×ë×2³LêÞ_šC2Æ6ƒÏ§áX?kœ 5ÿÙnip2-8.7.0/share/nip2/data/examples/2_point_mosaic/example_im_06.jpg0000644000175000017500000011043713224651032022060 00000000000000ÿØÿàJFIFÿÛC    $.' ",#(7),01444'9=82<.342ÿÀ ôÂÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÚ?s1ÏÍO·?¿O­k³î[eÊ®N}éy© Æ÷úÔŒ¾V8¦1Ù ÔD’rj)ˆXXž0+—Õ¦RŒÊw3…ëU<§Ç¨kM¨´%˜È'¡‘¸þUÛO.ôcž„ÖÆ¥„¬ëëñÅ3 ®æO”mÀªÓjà¶èH_sT`8˜ `«!Ç=>öÆ_²Êårw*Ek >î;TÒÜ/ÙÈïXú‘Y¡SJœÖ|1|§Ö®¦” nA‚y©rÐá ­j.§Ö‰›ÒD\g—>°³$?;wÃt¬ÛbæL©#ÛšÒÓu àš¢ãvX‡SÃwÍtZN¹$Áa•˜\(ÀÇñ}=ë^ME¤]’ȤcúþµZæõ&ˆãaǵr­q%µÃF[(Ç…z7H¸› —›ã[rÌYò*å½ùö®RIsp\3Y:‹¿‘Îqü…U¢Š÷öäÔ¶Ã7zØPÒLâ#’I5Uܹ%ª«.*U÷ƒV„‡&•û`Uiƒš«sƒk6OðúW¨ê‹n¿"݃qXˆu-i>É0ÊÛÚ\¡?çÒº+oÃ~¥n‘­Î9*Û”ŸçTu”a˜˜2ž˜9ªú5³]ÜÍ1æ8†Åÿxõ­cfY°ªI<_³ð‹ÎË%ã˜S®ÅûÇü+¦šÆÞk,þär§–ÅHÉí×Ö²ÂzE”,U§fÆéô‡weªŠH¤šÈ¹ºÚ˜Ú:ÖsHÓ¸Qߥ_±µÉÞܪœ}Mho1ñ×>µ#[—‰X.IQÐVmÕ»BK0Ú¸ÎMs¸YÙ£ásJ[zä~U5¤ŠXß”#8ªÒÞ|¼LÉ­æT˜Â™!º(ë]å¤é¹æ­ ]xdzzܽÓ"AÉ#œ*(ËTæ¶œ9yYOÝê+Ó|•ð”0ÈîØ^Øm¿ÓùU™®â ‚ÀœÒMw¶²ÛÍÊH¸'ÓÐþuå«siw5¤„«Fä6=süª›ýóM¢Š÷ì‚3V,ÆnúV¼z‰âG­W0Ö[®zgëY²¡/@ >(ŸåÎZ²‰†çšŽxƒz}+2MŠ$`2Zá5«8ÚLƒ´ã®k”¹Œ$›CJ‡Ì(§5„ow9E“Ë“ש¯FðÞ!Ðá ƒ#“#àò ÿë`}s[v¶âÝÛ ?ÅÞ¥žy5jò^Dª3µƒ7µMª~5Ë^‰b°öæ¹;ð dpÙ9<O~*Ä=«a[(†´VhäLîÍv¿Ùûm"?€tïÅp^'¾‰ç6¶BHùôªšV‚º­Ä¬æ%L*g'¿ù÷¬9¢{iÞ)ÖÅc»Žžžµ½ƒ|A>?â],Kýé°Ÿ¡Á«Mà˨P‰ž5> ’jƤ¥–¥ ’]Ͱí8Æ=M©È!|FJ¸ëƒ‚?è|!â+‡Im®í ‡¿AþuÚCh—*dR5\iòî;£Á®SÆúYF´¸¦9Ì×2c†p¨K“Á«–vņâ j³sá´Õ-LoòKÕ$ÇÝ>þÕs£M¥Ú…š=®­ózØçÒ®hÚ2_[—˜˜ƒ1¯ëéZ3ÙE ^\;Ÿë\QÓe#$môÑdÀíp@= ¨Òg˜Æ‘Üô¯JðÖ“Ÿ£yöñ)¼™6‰Û˜àè3ЧyàÍKìçkAgÍŸÐf±ÿážÏ'ûF@Àóå¿®iÖÿhŽñKÉäE9>l™}jãx-T|ƒEë\¾§s>£|÷“ªîl‘qÀéY“q)¦QE{êÅ)zŽ=+KM‡lm+rz.kJІ¸*À¶¦1Ywm*Œ#JÎw”©%ÜêMŠÒJTòHÍmÛÛl@ϽTfÚÌ= …ò¤g­súšf@{‘\GŠ-Kp†ê,ñ¹B¶=ˆÿ]-—Ž4›Ì-À’ÒCýðY1þ·´Kˆîm&½ŠEq,„)RtéPêWÒ*0VÈÏBþuεÍÍÌû#ƒ<¶Þ•·¦Ç48•chó¹Šä¹8êsþsQZx.òî6;¸0àä*ê°g{[°õW?áYW×Z{~ð =p í%ñÅ”úb"Æö÷-òÃ!G¨>ý¿ÅŸH²¿‡ÌU]Ì2$Œã?ãUdK*Ýmâ›hëÓ±¤°ŸQ»EWS+s€0;ÕÉô Xgší/÷Æ1ùW®Y\½Æãvæxsc«cõÍc^Df,kžºX´ù¼Ó̃¿jåµ;â'vê\äs[¾“eåÍ乨3ÜõÍv÷ü|~jº ^îáEsºÇÄ–›N–ÞÎR·e†Ç…8<ò}½+m5 »uk­S|r.áæ;3gÓžõ¥§ébâ5q0*}º{Ví®–``§æŽ:ÖÔVÐÀ¡å!LšË×íí58Ÿta6”ÛŒc޵‡£ÚǦM'\ éžã¸ô®ŒGc2ù–dny ú×3ý”‘¯›8ã°õªz…„Wpy‰…u?/øU4³[xŒ“cw¥mÛßÄm-Q&¡V xéÍww*$…±ŒÈ渭F2¬ÀŽkœžÛ|›ˆ$zV4éÝHª2wg&¬Áeà ŠÄÔG¨J£ ÇòVŠ+èÈ‘ŽÕopí\éŠ}¼¾DÜ{S§ÔÓˆÛñ5-ï˜r#ÇÔÕc)9àbe*%ìlFäWOçÛBÛT {µ9s4„Fûwc½BZ\gi‘}q aL€HLW)ªßY]ȰÇr¥×*ÊAÌV ÖI•f8ì}ª¤ÒÛ[€¡Ñ›¿"¤–mú4¢+–G£"žÕš“|‡š®Çhâžy9cÐzÖŠG=‹ù–óI ÷£b¦»gšdÓ K–i&Ø<Ö=IïVvYÅd·\†Sü ÃgÒ²Ø=ñ*ÇnãÁî×MÂÛ¨(ÃŽ£ÖŸ. ·(R!÷‡~ÕÁkús´í,r`žÄð~†¹ %ŽçcXñƒÔæ½MÓ–ÃOŠã.}[©®sSw’úCü ðG¥G¦65`†§Ô$id{®çÀÓ4þ?Þ·™“ð8lþ§ò­IR5•ð KW›ëWž|îåsþEr÷ ¼ÈGñ b¦]fö;d·Ö”cŒÌÕII[Ì–F‘ñ1$Ó㌻¿‹¥kG<Ïjª´p“µðçšÑÒ5¹4û•gË@OΠsõõê"öÖºóÆê {éYÏ,×gΛŒýÔ좫ܦÔw¨R-ÉÓ§ÀG#¨éQ¨’Y7o$àÎ(ŸNÙ¸W’qƹ›Æ3ܰä"—éëM!FìÀ¯M±vŸD³ry0¨<÷õ•¨Àï/å\õͱNÈÍbÞXŸrðHëMŠÙÐá—¹Ý`mÕfýŸýU(¯¡ãp£Ž•fe•PÅhÝùdmÇÏÚ²sÅ@ʸùi„dTCý`­M:1$ŽÿÝ­ƒ¨ QxY©ü+ÄžLl²27Fï“^O*|ÅXóžô ¥‰vîÜ£ jÎxܶs“œÕ«+Câå¦s“òÿ:l“£¨®S³{M^xe%˜6Ac’Aä~†™¯šH –Ïj¾4{™"ذ°'¦xþuSPÒ¦±*“mË.á´äVIVô¤éZÚ[ˆ¾i8AÎ;šê4{»]Jö;yÀÀíUî}+¤h#¶ÊÆ@î;ÓÛ[šÕB)Ü–íøÕ´þvŒ$%_iúÿ†k€Š%ósô®ûÁÙ¢ÖX|åòœ²0Á*:mÏQÖºèã*¥84É-÷TKg̹>õ•âõ¹}a··iœ4¬«Š9úõï^{s¤‰âiD2õÇST£»‚' î:Чv.Îr0 §ØÕg9÷®»Á>W›qæ@€ ŽË§¿ô¯LŠð<*ìÃÁ$âª\êñ7ÈŒ ÷aÞ¸¿¹·f3Dw/Ó¸ÿ>•É›‘Üzb–[éf‹ÊêOñV†p–ql=[ÔÕ…ÕÚlG•Ðç×Ö¦> šÂw ûرӨúçµEg¯Ï¨jF9Â"0ýÚ¨àüøÍU¹´_2e`I2犭%”Öðwd=ñÒ©³É·j±ö©í.\G>ìÙà×EªøOTEŽòÝ ÒÄ ùˆ:Ž;þã\r€:Ži’ÿ¬8¦QE}²º®0’Ä“Í1Ž9íO3F))jÖŸ3ÛßG"v?7º÷®º@ ^TŽ ej +BV%É5Àêú[ÀæA ‘s÷~S\½Ïjާwl¶¾^Y¾î?„úÕºþ$—øTm–gÒ Žâm:ëÌ´£u*˜ïZ´—VÑ^\¢‰›©ÇQØšŸMf/÷°sÆÞ+­±´óâó[‡ïY~%¶Sgò|˜ÊŒúõþ•À3³M]ÒaßǾ$Yù‡jf à\J‰Âï8ã¶x¨-ç–Útš*ñ°e ô ñ^»Òjš\Ñ}ÙP1±èGàsYwLè~è5gû!ùVU!”ô®Rò/²[³Üs´3|Õ›6µ›OŽv—l¶[ö"ºmÆWV1Zê'϶f 柿¹=ÇÖ½9“tl>••©ÛÛJcݸ¯Þ’ËTófV&ÓÐf¢Ö4Ø¥qs áöŒ~5Ãê^™u/6$&ÍŽç#ø}¿Ëñ€‚g\ §iQØvýGëXn+õ'½t¾¹0;BÍò·?mO¨ÉµÓ$€sŠÌ“Se9SU&½2X€¸ç&°&‰‹3F &x"§¶‚M§Ë\œséW¾Î<£É2vôúVl®Äx ô© ¸!°yÈéA&)’x¸d;‡ÔW`šMÍôGVZ8gxqÏ_|Ôöð‰˜eA^œŠ[¯C|†[6ÍÙOÝcý*¶á¹#œ›ØXˆ_;JðHéùW]-Ô‘E³¦}jæuÏZjŠ×6Å`»<œ•þ£±÷¯?»·–ÖêH']²'dÞÕWЛ‘JoÊǃš}# j1cƒÚŸ‘WmÓËq3*ßÒ®ÖÆå£éî)óËm†qŸAÖ±u÷1°ˆì>ýëεÕwŠx@aê9?s“ikyo"¤l‰ üjMc†e‘ð¿yKΪê7pMÚ3 À%p{ÀSµö¸#‘W!™Ýþf$S[b+O’GËÎ=k©ŠâBÁÁÂ=*]rµèLBò¬¯ƒùZòûÈ|‹§CõjÙ6ÈQ€GZ£|Š—Nô"©íî v¾ÕV8®të—T@<èÙÎìÃ'ð5jÿ\¶žv‚Á~ÒëôAø÷¤Ô"¹¶µY&#(Çùö®nþè"žå¸³'”íA’xö®§NÐÚþØ}ªFÌcÔÿ…l\\ßYZFlî^5„“´z3ô¨,.¾Ð)Ÿ29á‰êkzÎÇ€1ô®‚Ölbv‘ŒšèÙØéì·‡¸ÆÞ¬ÇØW›j–Mwk  ®l­þÓ$mÉü ŽÕ¥¦iðY³‡ŸÓ5ÄÃÛd.Ò|«Æ\Væác>§­t–‘¼dJ§GOQO¸´2åÔàH2¾Æ°#°½¼•¾Ãk4†2 ycîÜöéúôO Åy4Qý¾ÛÉ8`ÅNáëÅm]\Ådœ(i;(Ëj’Ë4žc1fcŽ{ “ìkäo–ç+h°1h-ÑrI$sõ«vÚl³²EŒ <ý*þ§`<˜¶®|¿…p>.c‚î$ÚÿÖ¬{-(ß±(â6^ç½z„0ý‘cQƒ÷Ïÿ^®Ãeæ6ç-./>Ñr¥×ŒGž8õ®¦8¢{Sm,iäºì(:cÒ¼ßYÒ¤Ò5·l²º7þòöü{RÂóÀÅUšÁœ¬‰¸ò=­kéL–BÞ9cÔð­6lÌ9­™|6“Æ¥n”+œÔ¼/:hœg89ãZ^°Ô4ýNY$·+g$X‘ãp<_ιøå7W³\7Ydg?Rsýkn]•DR*8çæ\ƒO¾ŠxÖ9'±#oX~u?‡QW­áŽH“Êdõ#8?•>ý"Oš7?ëP öÈÅyå„MðŒçËs·w¿j무âÎW˜ ×d¶# (⣤G°/†a–ÇÅZ•»|±\Û,è=Õ°SúÖáÜšŒ{_a'©®`XÆy-ަ°o°#'ÐäÔú|‹5Š:Ãî‘ô8©Þ8•AªV8© ùŠO§N«K @Ϲ[Â}kϼslŸØâ` 2̤þ9Ö¹;HZǰ¯Sº}PU•%g 8p?_½ÒÔ¸e<‚:U©£Š$Ý9q÷{šÈÕíd‹=ª“ÀL}ÀÇ_¥p·· gJf€Â{Û€F@L{rk¥K‚TT'©©ª7ï=¼MçXÏ;Aàšì<99¿ð­£—Œ4GÛi ~˜¬ýPZ@Íž0ýòÃ#ð®3S½KK‡‰˜–S‚ qùšÂKIu«æ6°ÏÞv?*û“YÚÍ’éÚ¬Ö‹(” _œ.%A<~5BŠ+¸ŽÜgnÒÜ›”Ø *AàW±hþ·¼‰.µd¡¢Ž2„ŸéKy¡›+–X¤ £¨#ê+ò̰$g5ÏÜií0ùÔç=k´Ðôƒ¦é0À#!Û.þäÿ‘U5ðÝŒ€¨?ãXÍ·7©+¹Èí]M®ž@±ÈåäÇ'?ʼš]4Ç+¦>ëúÓ–Õc\íÁêx>æGQV¼àF~j‹YÓ[Ó KqÍ žÇÐûþ¿jà ó 43!Á 9¢®¼lßÃÓð© Nœõ©,dó.a·‘¸fL×£ðøVuá©’xàsLh¦Óü9©\L<°Ñ1D'œ‘úâ¸-=zÓ½kÙϺ\ç¾+¨³¸UŒ8QËnõÉ6°÷ZÍË7XÎ×z~¥ªï6+“|¯zË{Ÿs#ë^—áØ"¿‚+¸±´¦í¾‡¡κ·ÈÁÏõ5•©jú^ŽÚ®tŽ?™¿!ýk'Bñ\ZÏ‹ímâ´òSË•˜å›#v08þë]™€ ¤s×u-àÀÏjæo Ï)„6 ñÍ2+Y,m )4I$sUm£°Y¼ËÀï0<3|Ê+eoG•‘dOïÌëÚ´©2µ¯ÜCóæ°µmmu¶¹,Ñ1´|0ÇN+ íà¶v‘Aÿd1íêjÖ“dæ9/†Bòª¹ëêk½ð·‰DpG§] 9;b‘ìê+ ¸Ë6ç$ýjâóo:lʹ_xUuÞâĬw=JtWÿT¬tDÑ,£ˆ{©yÇLñ…Ã5~7ˆ5,±[\ư\•Ü.N}©Él­­¾ä„íÝÔúŸzËŸNidÀù@êÕŸ©é6÷“@Ó3ìb8.LÕømÖ+xÕG ¢¸Þ º `Ÿú¬š(¯E··yv ^œzWS§Z[éÖ_mº4ÈÊ“Žp?wzOŒ4´ÒcŠ J¸Ç—e°}Ž3ô§Gt¬Û™ÆIÏÞ©åÏ.¡›Ö¨[iÂ[ÈÄ‹…qÈíé];[³Ì9#5Îø¶Éŵ´ÈŒÇÌ)…<ŒåY–š=Ô»óDW ¿$cœŸBkFÏRŠè€Ž£çCü>§éÖ¸½IíÖþà!Þ|ÆÆ:uªñYµÄlÌ6©àc½aê1ÞXÌÂ%Œºò*¯m#´™$“ï[P\¬ù’¸TI8ÍkZ]ê¦îÍHÜ1#€çÔ¦)°¡r6Mh%²ÉÆÌŸaR[øzkm~ÀL‹åÊLƒ¸A$~ç]lëµv÷ªˆñ[Ê$•€Q’Ìz޵ÊOâÅÔ®®-®m¼Ý.RQr®=xúgýVÃFµÒVëOžRÒ°Wp;}r1‘Àýk:Éq‚®áWõ ¶KT¶B7I÷ˆì*Z|¬ O³ä2Hgë\…ÌWv7]Ìo˜è㯸õôÖv#?ã]·‡îåÓ´D!ØHÌ]0q€ÏëSÞø£Pž³½Š|¿ž:×9pÏqìVbçhQÉÝœqë]o…¼<ú%ü—¨>ÐN}|°Fúàó]N©â»>uB²Èåw ©Ûó‰yã+™#µPBÜS\Ö§¯ê>PÞHùW§ã]‡µ‘­é첑ö¸p%cpìÔûˆ~c‘×­W‚ÅÑuÜŒœwö¬ÝT,!ƒr}+¸­™™q–\ŽG¸ª‰<“ºG+ðO-ß×G,in‚èçŠë¼' é:†•$×ö¾tÂr¡ŒŽ§nÐSÍuÍŽ—sKu8X‚ÌFvëúÖ#èÚ=¹W·´‡ ™‡äMQ¹˜G”8 `VcšeŠ1—ræ½N´³ŠP¶èÒ[&Ôõ÷?Ïó«÷W ³HèÎ@ÈU$×/t«ÞÇ*ÛÛDanÏ$ú{Ôº·‡î´Ûî. Ãæ ÉŒö¹KØÄÑ¥VÒ®›IÔc¹ð„à8=V½#Ì‚öÍn¢oÝ:îÉíê¸éF‹ykw%Ŭm™nÿ|{}?­fëvvŒŽîÿ8%Oz“^Yy9¸¸gþp¸bºøbÚâÂ;Û©¥L•D 3߃]]®“§ m”㼇v:ÒO-djGe.Ù$l.:Tw7)a–bs•GV>ÕBÉ®ï%SˆyÇlzZ¼öfáƒn ŽGCTHm#Ë iD^¿SXŠÉ!-´ã8éQ=üºLÉyßCÀÇ =µ;Ä>:Š{t‹IR²:ƒ$¬?Õžà{û×ìò9bŘýæc’M:ßts£Ær}éÚ”¾v¡,ŸÞÇòVŠ+é6ü_êÞY@cÌ}r+FþÖ7U)•$ä€xïT/1i`å‘\·§ûÇ¿áÖ±!²2!.§xëþ5µ¦Y¬v’!Ë’å[¶’¬v~_@¤óUåÔDnUTg±'­`ë:³È¢6À@s…MsóxšòÅÊÆá»'5œÚÄwèèòØŒ~‡ñéWtHE’§ÿ[!ùsÆÿ¯ý+y¦ó'Œg©²|iuähS(l4¬±Œ}r@kÎâz>•­²fæ©I|ëvc‚*Ëê‘ÂAÜ? Šã^¹’7Ž7òŒ|§ŸÎ±ù$÷=ëF7YÆÄrGZ­É$ž§­Z€|£ Šèô{´r¶ó€§¢·cX7QiW;‘Š®°ÎpØï[6—öORlÉ!GÓ½fjWÏ 3K$Œñ6}k[GÔÞâÄÇ)Üñ¹õ©—SÇ5>lf¼k–ÆØø\÷cÿÖÍv6Îb*y>Õ¦±ù¸cƒžþ•®hË«Üéðmûj.Cê«î?¯µO©^ùñ¼R`£¤Jò]kGžÊñ—ΖHæ2ÌN¡ªvZ\ÓÝÇ|ƒÛëí]÷öq´³6ÊìQŽæPxÍC¡ hõ ˆä\NÄùo“‚?»íYÞ7½{XÊ=Á§€ÀÛéŸóÖ¹[;2ç9õ®ÏJ –K†; ·Z·-ÄñŒ*°ü1W´û£r¸`UÇ\÷­¨ÿuæžÕNU6é@aÙOJzý)—7RZÆÞOúÂ8$p+›”†%Ø™V5³Åkò8%±ÑFkTŸíöín€ÆIÈ9ëìk˜ò ƒÈ4äœaEZHD`ɪWñôÿ‡ò¨(¢¾½oK çÚ XrT)vð:qŠdöIÐIÎ@Ïò®{QF’påUáA¥ ²8äÚE_…6!cîN1U&Õ „­ç7O—îþu6®òLd•U@pµBåüÔcÔ‘šå5I7J­Ÿ”®úÇš~1?Þ5½¢¥Âém;NÄnÂÆç#¿Ÿò®Ã@ ©Ã ÈWt$£äõôýé\ïÄ1ÜÚX–ŒÈ؇½_Ó…Y*:RÃÛ®|°ûr Î3ZÑhÖñ0´JYOHu×v ê* °±1ïT­f?k ß­9cGŒùŠ ×/a,r´ñevî+îò7 %7@› ‘A r99¬]v&†e‘@ØF2=}궘yq¼`‚ýrq^þ±h±m+FÀ`‡ù”Ÿæ+ÍüEdÚ~½sjÛr›~ïNTëYtQ_j Ñœv©EÚ‚£vrk—ñÖ×:ƒ %¤Pxç5qpúaVˆóTà7b?ýu˜ú•ÄùY¤.þƒ€? EÜIɬÆ3Ìì»qbr{ÖªX:@Ž6@8®Ä¼W¯ R±8ö<ŠÉŽ“àçµl®¢!‰cC…UÀÑøV‰u›‹Wp«4{—?Þ^ß‘?•RñÅ­åï‹¥xíeh$ʹÈÇøçò¬¸ìÛa*„2ýå§"‚´ª¸Î; »¡ÛE-ÜÛ­£™ö©Vd AÉöãÿ­]bX¹Æ[bŽÂ¢™B—ž˜æ~7æKI?‰7£~‡ük•A޵«m,cÖ­ª½R… Ï¥>Óí\ü¹æ®ÜH"T1²1X·‘¬Éó~¸¬˜cßÃæ¶è·€HëŒóúUëë;>ð9o6"pý«öwr$é,nUÐåqÚ»kOCqn©>b¸<—>µRöÍg“Î}kœÔ-²NsÎd¶¸ó!8eïë^›§ß[kZzÏ+ü2Fz£c¡®‚Âc Q§;1·¡1Â|¼ûÖ5äNÀ±'5Í_Ü¥»€0déYßl›ÍYÊx«Iµîâ à,Ãå5.œâ°+\LsÁ©š`4À­T’äIí ñëíQAoB;·‘Q»’Þ°µ Jê÷PY¢vŽ(¸‰s×Üúæ™>­4’4O+#ÐqŸÊ¹ûÍÎç'<÷5Tj3Ù6²ŸÝ= GªÝ<â5`W?6ÏJµádj?j~‘ rúÙ¯P´˜IH§ ŒŠòÏøºøÿ×?ýµEõ4ž.ÒÇú¹d“ýÔ9ýj¬ž+‰›÷q¾?Ú U/RâòcžBÞÔßÈñé±<#-æ…úø ÌÑ´›ýFëˆ $|d€:{“Ú»›o}š%{¶Y%ë´}Áø÷¬‹Íy' 嬨 ·-ä¶S\]HÉov ¸“^_â½kE»ž *ïÍÊ”eÆäSùVE„Qjaõ; DîÓL~€d“ùUøm´Vºh ºk÷BCHX$UPwîH®ÏE†ÆÇk²Ao‘×I§xƒU·‹U·’)wfÊŽàžõ±ksm}4±,™]AÇçXú÷‡áéV £wúȃqUìô{bG¹}ò’¬Á@5f]ZÂÍ|¨n-cÛתY¶¿‚ò– RD9ÁF~žù¤¸oWõàךøÖ3Ó…dLŸŽAžk·D¾"&Ð>ó‘ÓüjÄv’[LèÎ3ò·µ\^G°©ã*6äz°‹¶ee\ã5;Ú\ÜF ÆBú‘ÅX‡ÃÑË ¼¬XãîçÓ£±¶·?%¼jý+“ùži×ZrÏbëî ãûÞÕÂ܉-f& ýΠ~u×xjÆöx>Ûw ”ÿ–JÀ‚Þ¤ûUËßÙÛζ÷ $m·qî£úö¬ K[° ´4ŒÇ r­UҬƴï°ùH„o$óƒýx¯Hðեޗ$QÂ$$¹'ÔÕù.”Ý«Œz U›{‚!!ýÜ€ Ÿálwö¬ý_S·„ƒÉõ«žÒ?µnžyò-cà´ßýoð¬­^ÜÁ«OpáJµlße…Qy?x‘]…µdiM¤Ï€Ù(IÇ>•ÆøÊX¦ñeóÃ"È„  ½Aýk Š+Öbº·|r¸«EQNBŒÕý7ûFX-ZÂÁ®Ü Þ7…Àó]`ÓïnmV9­•3ƒ÷Á?ζ|5o&‰¨y¬äC Ù*ƒœŽÇðÿì¥hfvHÜn­f\Ú+>On•ÉxÊ$ÂÚš‘ò´ ¼ôçŠùÂ_(MµW*8-O6ƒË-è3šÎ·¸{iؤ¬™;N2=+MÖ­­äQ+±9Éã9­ùuh5íü¥qå© ¼uèxçë]vu˜Õ8Æ*{·ÝtÇ¿ʹMyü¨eòÏ9‡5Å\9l’s]§…o ^µyRùÿ¾É®…n„Ñõæ²õŸKâo¶U€ÇîÃ?)ÇL}*™ðÞ™¥²¢L×.Î[w{ÿ׬MBÙ`¹%?Õ·Lv5Q¶¤NÎBªŒäš³ Oi¨Í$N u‚çרÛÃ˜Ž …^}>I†s€4}›Ê…WfMyèGCO·¶7pk*ð–!°2=)šmÔqÞªN¹øã Ú·$‹yù@9ôéR@Ð[DîŒKw*ýž£ky2F²aØãb¶u%Y,©xgžƒÏéš•¤ÓÉnxÉR½ úzÕ©5 ‡ø¶+:ãÄ#”Ž8óÜúV}Õ×ö›…¸äòíY·½i£bH¤82àâºËao¦é¾\`¬0¡$žþ§êkÎ.æÝLŕ䑋1‰æ™ ³FF‘èÕ¡ÐP åO¨¬ÍAÖKÙNTãªÔQ^Ý ª[Ò´m¼3=ÐåB/}ºm O·±²I0ÆdÜ™Î3ÎzWN-¥HF2pO¥g^\„ÌC¿ÞaV,ïU-ÂïùÐeêEYZ·¹³:Ç2öþ÷Óü+Ï÷cO´$Ä`“¿ }+3R´6· cåa‘Mh ¢”VfÏašè4{[“ÌPœõ'šî´„TYÉeïSjRÊü³Ï}+›Õ>{)‡û$þ\×3q]g†¾‡Óó«0#ñÍm[³DáÈÆC޴΢'ËO”ÊçŸÎ³. w¹9?ݬ›”ì“’# 9fãÃ^^½ãìRD ôõ÷4ý0¼z„7(åÆv÷¯fÒ."žÐ!M“¿þÐõ° CË?/lU ¤¼}*—’«/Ì>õJÊzÔmr¥tÖ’€ ÒjOnmðA›Ž:â¼ïR±m7Q’ÛÌÉ‚H÷çÞ¢7 Ý«ŸïR¢—a¸’}ê •Û;§ò¨¨¢¾«·³„‘°géÞ·l¬d$¸ï¶‹})ÖíÖd* ™Çµ"ĆÞ1–o¾}+ŒÔÜÙoAA&¸KïΗÊöø p3÷½G¬x¢ßËŽHK<¬US¿S\oˆu]SY!ï.KB0<¤ùT\§ëY@@ásWâµ, ùdcÒ¨k±–‚ÛóG!Sô?þª«hLhJ×¶º)Œv®£N¹/p¦áZ3(.îHÏ5“«[æ 1ÆPƒùWœÉ!äjÚÑõ‰,´í‘@Ò8ry8^÷ZÔï˜;Ê1ÛÇ­kxrá–Õ£f6&È%º©ÿëæº¯C×îýá\§‹gº¸ºX˃f½ôÝþÕdÛZ+°b2kfÞÐ`¼Jô HKà ±ÔŠÛ|`gþ/zt±,ƒzóíY÷`Gì‚àÏ5•«êßÙzo›€÷R.#OSí\–‹â¹-åû.¬ÅãcòÜw\ÿ{Ô{öþ[ú•Š\˜e]¬3Äֱî4å=‡½néðˆ-Ö5^zŸ­h}gF%‚3òÓã m]ùà×;«K·LÊ¡O|¬=@mÓ®»8ü±\þ›ÆæPwV¡Ò„±’‡kqÚ¨Ia,-º@JŽr½)’j“¦Ø£œª/)ÅA&£s*y™õëVìçX$R8oîÔ­æE“Œ3Ï Ö¯Gf׫8ÇÍž^*Å›Êÿõë£Óln_JU¼•‹cÝÕW°5‰©Ø\iáî¶¶3÷ãéøÕ}?ÄwË:FaŽ!‰=ÇøWyi¹I–x”HWîLcÓ#‚sÞ¼ûWãÕ®f¸ådrÊÀñŽÃð¬åŸqzV­” Êk?SO/P•HÆ1ü…T¢ŠûJÅ8#D*€áÅoÙ!òww5Ü?¾'Ed^ØËµ¦„¶þ¥Aë^qâÛ«¹-š¥!Üò®yÓ—RUßµBÃ#§­gJÓ‚ŽQÐV¥³1ü ÖŠ Úˆ:ñXÌ ö™ qÇ ‘Çj¡‚`ÿ½Í8Ý(È ­ Soí[`Ç ¶Ü~ÛEj—×!¼Â¡G ŠMSJVµÞ¶XmÄj^&6–v~¥p9úVmˆŽ,€Û3 \x¢a™çûÆ£±Õlìu c‘ÙQ”£¶?Oz˜jZÆ|™–fÎ>S×ßÖ¥´n÷yŸ>üäxÒE£ù™O÷‰®j†«­ZB±Ãi'˜ã%š>™ôÍlhÿc°ÑÄØK5Øfà »;sŒúö«ÚW'Ô<õ–( Úr ImYk2›“•=öªºˆ6s\j Í,’œO½—y¬MBî_Ο%ŠŽ= ®vòË9ãÞ¯xbúîÞèØ¶^Ñ”¾Æþí]3BëÌ+Û5¥im-ăb¾§€+z%E¬€9yYNÓÐf¹‰¯ 1AÆÞ dÜ5Ñ•Ôm/Ÿz¥x»¡+¼@ªiMÊ[¶Ú¹m ``qÓÖ²¯”Ø\¼RŸ0÷‘\Ì’•äÇÖ,(¶Ž$šé-äÑJ–Ýl¢·¸ÀÁ(yŠóïø~òïVgI ET CœŒóŒzb±Ã®wÞGø!5 h5Ù?ð U7G‚FLÒ“n"»X]@ïÜÓ¤šIYcR\vkVËMC÷|þ¸ýOJx.¦;0™Ír:¬O¼£ð=ª¶‘y©$“ÚÀe Al0ã5^ëKÔ­äÜÖW( }ï,ãóÅY°Ög²p·—Qø57Uš[ÛÇ-s+ÀpÈŽq´zc§\Ö`EäôõjÕ>ÐdDuHâ´´ûk‹[…‘€qœ§5ÖC>ÁòðùíEíë^Æ€¿{'©¬ùõ‹½ê®¨AêZ<`~Vêû,G—sÕ[“6«>ŸqÖª¨íwÀƺ}/ÄÞtJ÷Èäõ)às]nŸ¬ÛÎhd‡¶—è±åNIé\/‰î?±ïLÁAI¿xª{ŸâŸó¨"ºŠöÜMàðAê§Ò¢(òž•nÓO†h·Ê¤ŒápqWOŽ6 ÁãÖ°µÄ^Ú:ù°H»yÆO§cZ¾ÓbƒG¸–FÎfÚ0x þ&¥¿À({W/v†YJ,IàœÔž½¹´¸ºòâ‰mдiÕßœŽÜf¹Øð’§éÏJ’ÂO+#¹5· æ­XmEšÝÂ7ÌóXÿÛwÑHûY ò9_ð­‘su&ÝÊ…‚ŒàBe•ÆøÀãæ°u™|ÍGËÀ$ €1ïýjΗ?”Þ_nFkªÒï”6ÓqÅu67^a¦*?éÇVðIJÀ¹º´ýôx$¼?.^YkªfÁ_VC]6™söè™âÈ …ç±5Ö[D)P2;Ôù@pÜZÀ»Òn/îæ¼˜ˆá_•u*:`žµjÂÍb ¢ãùÓïô’b2 $~µËë:+ S2•õãp®ymßvçjœ±˜Ÿrö9¥› df»¯-Õµ£%Ó*Û·0«u¿­¦Öôé¡–k،ĔÀl{à殬f°I§‰ÃÅ÷ˆÎ1žõÎÝÎsæàòy5’î]‰Å>Þ2óª‘Æs]-Ší<“úŠÄ×€ÌásŒ/_÷EgQE}Q«jšñÆÜÉòñúÖ>‰¤iþ Õ¥ÿ˜~Fe1¶Ó‘Ž3ôÍt/áÀþêÏ,;»³gõÅ:ÛLŠYvÇQD¼³…(«÷VhV#¹Pvé\V©w&£vÒ•ù@Ú vED“%zR²Ý:úŠš •¶8R™ÇBjí;vRŽq‚Tæ³ݱ¦í¬;VáÔ-ဈ™dsÔ“Šæ|E,ºœ& ·Ì9Üxú×>å¾ä| ç Á§XÈmÝ¢#ò=«¹ða/¨5Á9X ìz~_á^“ªè$E@ò¼Ó˜Ê¿^µËøŸD–C êæ8Xì㓎EUµ·Z$1çË\àÞ‹ˆLŸ|œ{T PcPŒg¹«6²céÒ¼»Å:IÒ5éb‰JÁ/ïaÀèQøŠÛñ‡…Ægcyn¸ÛEt8ó~=ÿúõÌÇ?œÁ$ÚxÛÖ¨€Òº¦OÌqùתhÖ±¤o!EbÇeÈÅm6‡¦ßEæ"yü[:~Uã3´êʇr™i=HÏ¥>Tkvˆô9ÍtºkQ0=knÓPòÞC$1å°Z’çâŽ%´FòNv§çßòükËîd2Îòm‰ :z ëü/#ZéÀÆØgbÌä?•l[I<—Kå1ó ûßã]D†³`äî+÷€õÃjëâ BV JIíA±C¨ÅbK[ÆßíÀÿdÕ›{Ý\‚ójw„‰˜#]n¤étp6¸; ÀL61Û'R·† Š6šîBÊ ±UàcëÞ¹ÉV¹…ËDáGA]½ì2[XM2„N1ÏjóÙ-ŽâH9Í5åºHL+4¦#Õ7?*¥“Ðçñ¥Q½€«úuÂÙß«º‚ò·°=ë·¶³†O€çÒ¸¿¨O]*ô?ôYTQ_GøÂkx%…-„†fd(=3éÞ±<+«Ëmã=/zW˜Drzo¨¯c»…$vWàž•“zËk‰W*9Ï©®2öýî%ÙЀòIëP#€Jæ´-a€¤ñÖ’[0F]€öõ¬=F {rÎwnÇ˃ÔÕŸqÎGsU, «à±ÉéM öf%›Ž¼MsÚÜ×·áb“lp±__îûûÔ2øÈÿ §"„•d+¸)ɾµÛè-oj±ˆÕHrI?Þÿ"»Í•²-aŒäÚ€ug8Þ°µí[M¹Ó峇tìÝHïŸð®n2ˆŠ7 ƒš[É/úµ$ýªtÙ•ZgdFB/9¬ø¤òä*{¯âK/µi°ßEÉq§È'EnŒ ‚Ê}¸ð¬‡ñݶ¯nÖº…ƒF².ÆòÛrþ¼Ö¹›}I‘ÍÊ´JNЇ©ªµéU‡baCqL³HÅÔ.äíY'Û5èún£hëµgN8ëŒU=wÅ­¦^5 ŽU–Ãr…²¸ëýErÖ<ŒAŠHßý–;ëÇëQkÐMku SÆÑ°p :‚zûô£OÔÚ;o/Æpj ÚiÝ‹H[ž9⫘$ÏOÆ…³]Ã#,NÇÔEi$ ¢6ÎÜ1ÔWQ¢ÙÂVÚr2Ävö­[Ç)¶©Û\½ì§\T® Žx„Š 1:š­©pŒ»H®£ª0PX>µ£’ß@²F@`pG¥dxªU´·KûÌJßÈW‡Õmc뙑qŸö…z¯ûËU…AŽN}rz…¶d sõôªrØ´q’W“Y’Y9'µ{YØH:t4ÇP{WG¡k¶6Ò7ïS…cÝk\3XÎvóÿŸEïzÕÜQO,—Sª»A<þUÊ A¥o-¦Yâ•d`ps_D]°1¬¨rÜúW1®O,Êa`®W·jóÑ+ÄåÙç?kZ0hÖEŒï=NÚÖ„»`#ëUî$î?v~Dà‚85“â(]áŠãfú÷ý+IÂ@}øªáØ·È ²µËé,`ß¿ ôî~•ƒdíA‡Þþ/ö½Íi+¤É•ëéS-¤m̹#ÐV„W+a# t®„|D—NÓR+m=^ënydÈϰÅqÚ—õ{Û×{‡ó»‹ôÿ9®“Â×÷:ö›-ıƬ“” 8ÀU<ç¿&º˜¡Ž(ÇîÔ8êqÎhi B_9¡â¹kÁö{ù2À(ÁäãŸ{ã[-=(¢7Rc蟙ëøW’)™ä q?(è=«ZصÁXã]îݪ=CB–ÙÖRÄBNë´Ò}™#‡+’EZÒYŽ¢ñË»=Ç9¬i.EÅì· ülHÝ¿LU¸îª¸ä`Õ»–á÷M#¹éó18éSFv¯ÝÈô2¥ÑŸË(@éÅ6æYlçT1üÄg kYß[Jˆ$·eaŽF oÛÜ[IÈè=ë¡Ó® û0~Vêrzšši~R3Éy ÉËßJÏhÒ(Y#¿Z¦»ÚjøºtP3‘Ž•fÃ]:uǘä<ô&£ LÇÖ©Ý_DÙ;qT|°c’l÷I"»Ÿ‡†Ÿc¡^ý²î8¿Ò‰PÇý•É®¦_NÕžA§\‰Ì;|Ü# ¹Î:ž†ªÞ^ÇjŒîãÐW5{ã++»Õ‰?ʸ}{Uº¿½Ë)*T Õ¿ Â1«YC¦ë m.?é$à6Ofè>ùÔ~!ø{q¥É¿Mº[ÈÏ;1‡QïÛõ«ÞÒݬÞy£d“;‘Œzÿ:×Ô-í-´Ù¥¿m–Ê0í´œd€: õ"¹´ÉîÞ¿ß8ó|·ä{ uúÓ¼Y¶Ÿ ±Ñ¤f’3®‡-îDZÈÆpkRÂÞâíü«X%™ÀÜV$,qëõ~ \³³Ïit€œí0²ÕÉt¹#¶0Åfêxä¡üiÖö‰‰˜JŒ7oÊçõY}jb„”BgØ`þ¹«ÖKøV¬F5¥nŒÐÊÝû£8«¶BþæÑ¦ ±)Û׿?AÞ«›«¾ªFjÌ =V²Úí¼Ü„P*ÇÚ ~#µKge5û‚ȳ˟é]]¼V°,1zœóZTεæ:s…*yÈéŠè&€ßXR¤{=+ŽòL7 ÊUÐí5ÓxJèXêr¾ï½_üyOô®–ma‰ûÕqªŸš±îµ@ŽŽß2£FzJÀ„ù³4„rÌXÖÝ®rz{ÔÏ©Gj1ooSÀ«VæîA¹Ë‡#8çé^‰ )aa|‹ó{žÿ­`êo¬|ÈÃc¡è:çï—„|‚:7ZÅ »'ƒÈô5©¢[Á¨I gܰ‘¹|×RÑù$ P«Žè*ÌG¦?ýUb •ŸƒÇ®kÄvÒÚÉn'„38Ü=ýé¾´ÓN ’\IIŒÅó »½ÿ¥vÃù®ZîÏuĄަ°ït½„²ð¿Ê¹ÛÙC)0ÛOÞª/Œ Ú §|1vãÐ/ò^Š+ܼ)ÿ„5£#Ü8|²ÃŒ$‹ïž¾Æ½ªÊâ×T²[‹lÃæ^ê{ƒY—Vâ%G"¨HÃw=ê³`{Ô&R: U–rI@=G­S½T»WIHfdh÷0ÉŒóË·•¢uÁcÃò‹MMSû™HVÏcØ×«Ãf¡Uä*ª‹–,@ õ=Ö«ÞxæÎßNtÒvÎñåvûŠG§÷ºý>µå×¾"žúîK‹æ3¼‡%‰æ±noÁ,"'oe~µX_ªBD€)õªQÞÇrc—®xª·2c#¯|ƒKgÍúLkG oi° úÕjé»yûŸKÔ/ô˳&Ÿ3Ç)p!‡¡­u"-Jù|íZn;* gßooçíPÞiÖ÷¬€Uxb£“UVÁìÈÜÎïé]‘`’ÀÌ2&~¬9ô5$âçO›Ë™ 硃ô5ÝYf=Ö-¸m»Ûñæ°¼]n÷^ÔcK7•»©ÁúW’éÌRk­°¹HÐ|ÀàqÍcø¾À,±êQaeïŽôü«ÊfÓ’çmƒQÀ/5;¥´±‚K‰ß…D?ýaï]=¯‚ /¬Ó‚?Ñ×î©ïø~µuü/¥Hr[þ™¶?Cþ[QðìvZSJ—ƒ0P¬¼úõÍ5¬€Ø8ãƒ]Oƒ- ÷m;çË·>…Jéu ŒðNOzåõ+’ œqõ¬9'¹¸-äDÏJ©‘:±’öcnrë«¡Ón4}6Sš¢IˆÃ1nO·ÿXVô,nØ AŒUVîÛJÓÕ^T‰ç;³`œuþŸC¦Ý[Í´G¿s7ÿÙúSÚ†ÃÍ.ïÃÿ!XÏw¸u⫉Ô>IãÚ©j·F‡ ÷¬žE9]‡Ó5¿§ëZéa%³ÎåCÀtc4Éd†u-Ç¥{7†<# Úhöº–˜¦åî#ßö™pXv##Ó’j¾±¦d7Ë\×––…ƒ¦å#§­aêRËŸ)ÏÊOÊíZ:&«qo²–HóѸ?w6+mªFD¤c+uü kIÇQ¨ÀúV]ÃìƒÀæ~'ÐF•yöëDÎvä‘·§Ðöü«âf¹*ŠÇË^ž§ßëS¿ˆ$M:âÂæ5¹ó#جÇ9àŸqÖ¨èçì÷ÑÊJÎî„b·l<%6·ª´˜}•ŽWiË{`:d×­èzá›"Ò5°ýä§–sõ늇Y‚;ûr7m•~ëú}}«€¿½½…ÚgŒ©Áo_qžÕ“wâYöGm|¡‚¸ëêEEöëk…ÄR©'øOò§Zk·ºAe¶”ylrѸÈ?Ö¯'‹­ïßË• ºuʟǵ>y!cœÀ¡q¸ã#ç¥OsªéÈž\RÆ  íQ·ô®{P¾óT‘BžÀòkAÈ*Ä0èAéZº_‹õ 5ÂÊæ%í' ùÿejú‹êz”÷gr¬ŽYPœí ü±Tw•f)âŒaTƒëW!…nmÄÄ’I#éD &Ÿ?Bz‘©„î4¿Á:¤ñýš^›Ôæ3ýERׯãÖ'ƒcÿ£¡ 0ïžÿ¥UkÌXT󬋻À‚+ á<¹Ù 'ëô¨è¢¾“ðå›Ë¨Ir너m_v?ýjßò“{q߯zŠõ¶Y»÷qì*Ì ôø%ìÑ‚*ϸ%ˆçÒ©µÐx(ö šÃñ¯=¶$q2ƒ)l× =Ìãýl¤¨íœÔ1ëZÎ%·ç0aÃ~Þx~ÚoCæG …Táݾè>ǽv0húm•œ–æ1'˜¥dw‘ý+Æ|iáFÛY’Kb²Û…ÄIœ¿Ôç5ÆK<Öìc’6GC‚ëP5䧦}©"ß3à±ÇzlÑnGj<²˜ÏSN »Œ~5-¼hn£ HPÙ8ô¯Yø[âxâºÎUcŸç¶Ïi;¯Ðùzï5XU•†Î}k“ºÒ‹fYȇ$ž3\F§43‡ G@*m"Öigùcfëï]Í°ŠÆ(…ÔÑÄOw`3ùÖ§Úƒvá"„6Z¡$«#ž8#¡“¬ßÚ-œÖmNÒ.Ò‡îs^]©JmfhcŒ.yÜW§Ò³R"yïÖ§ˆ¼,\ŒýßZ÷ [éZvºtËpg¤Ÿ¡fôÇltÅOu¨•'¸¬‹f HpÊ=G5ƒ©]Ú]ÄvÈ­/ðöüëƒÕc—sA e¡+ 5nÚ˹ÖÞiÎz×u§x*;}*Rò‡Ô™r§8E?Ýú{×4×0\:H$V*ÈáF*#3;nI5 ‰®_÷hO½YƒI–S·*¾äÖ½§ƒíî72õ®?SšÅ¾³ÒtË;‹(Ü!ŽFg,X‘‘ôèk’Ù‡Á¡v•ükgNuky#PFþ”Û¦X£.A#¦e»™}‡ ®I±òíö`\î=ñZW×c¦™âÚò) ÍsͬO'Þ¶ŒçБYWÒ‰ïA—>\çÖ«ÑE}oÙéÐù 2ðrÍŒî=úVF©â ;üµÝ,§’ª:|ÖeæµveǬr®w»+ßڪ˯_ZÚ-¼-ª ·'õªñj•Òíy_=rÐ*‚) ß,³:ÉÉ<àÃñ;<×ÖV‰t¯ÏaÀþµ@iÅ á½kkž°Ôî§þÓ“æ·!¾Íа=Ÿîõéù×¥Gs´ ¼I1ªˆ0zL’è8ÅsÚŪ^Û´mÔ>†¸SHYí¥ŽTÓž}«‘ŸDV‹Ìð{«tÍg›ií†ütÝŽþ•¯£«©pêBMkÆUeéÁ®‚À´àWu˾ðüèÃ>^$_¨ÿë^]q¥Î×^L´Ù@«WÚÝŽš·R¨fȨs·=2~¿®=j;k‹KÃmsÂòª°Þ1ÆúõÐIg BcØ ‘ƒÖ¹y´é­¯L;ת²®r+jÝäE£aÇF¦ê.háÇçT-Ò=À’NJÎÔ£òµ SÓÈUJ(¯©îfŽ@|½Ì{b±'³¥ö`â´Â3o可:J¢ÚznÉPO­7û:[‡ Ç¿¥u¾Ѭì±rÈ$¹^|ÉCèo­sšç‡ì×YyºuÊ60UI?/®3üê¢ø~Ï+ºŸÀñª·zsØË öò/Ú#?+8îôC»>˜ÿëâº)¼9Á„ŽçÐ.RƒÃvªÅE§˜{†$Öf§ò'D_õLJ€:c·åš©atv¥krßNƒ|ï’G¼ÕÆý’Ôd-–!#±ÿw=…]AÈŽ2Làãø~µrÞ%—pç>µÓÚýà1[ðÂ&¶xœd:•#ØñY‹¢ÂcÂþìŽÿãW,¬|¬ï!—µ`x’Á.H.6ÍÌrcô?\VÌö) *D‚2¡²ª8¬MM“ÈØ‹ó‘»ur72²ÈryÍSÒÌTð3œšÒ·¶]€Þ°µá·Yœ{'þ‚+6Š+é8ƒÓ=)š…ýŽ—Ÿs –0FçÇ ÿ´ñµÅÅÌ’\YF¶¤å¸~Æ»uTš(åNQÔ2°î5b ©Ôí[&ÛU¹?aêZuÌ—/*•é÷Me:M ĈËüªOœ'8éVl ¨„ gœŠ£®K»Sd_áP?¯õ¨LvCA½¹’ óGò‡Éö®`]Y·&ÞzüÈó¦KªB„,qD¿DÉkZœ{'–>bïôãÒ³Qˆ1çÞ­DùjÂD®ë•-ÏaÍ^¸Ó->Ô’5º±d{&›„¯µ]MþÉ ÅhîŒ*ñÛÔñú×i§èPiÖâ˺õ¬9?áW ¶+ŒŠê¼? ß,¬>Xã=}OJ»©ipkkÚË€ÙÝÿqýƼ١k;¦·‘ KÚG¦?Ïò¬í_A·Öq Äw=ܼ=½n$qıƃª}ÈŸxV ‘¶/ažióÆ3´Ô çõ93»£zÕ{M Q<§3€ô_þ½[šÂUaUZGÍ~+£ðµŠ¼3ÈÝ»wÅt `ÌØ “ì)NŸ·?!÷Årš½”kw>Äï`Ãך󖶿¶¸ž x°²IÂã·^´ë ÝI¨-Æ£/š‹ÎPžOaÏjëÎe{nbx€$¹s»ó¯;Õ<5{¢Ý~{MÙŽaÈ>Ç lYË as&[ÐVõ½ì[Є&·í®ÙˆªYTiâ8©vóQÜY$²G#"¸Só+ ‚©îìüË41ºqZÀ’Y‰waqÔk”»µ—Ì/$øðçõ¬éÄÂMÁztätÚU¯Ú4è¤ ÉÈ#ƒƒ“ÿÖ®KÄHc×nPœ‘·ÿA—EîñjRÍØ¹ûÎüîz’ïI²ºÓ¦-º[²C‰¤?1#·°ö¬(ti%"5 ûÀôéÞÛ…L š#å‚»Ûô«¬ˆH,ËÎMyß¼_â›}rßû1RÚÎÕÔÆç˜ÿ¶;®;Ϧ;OA¯éËd†<àÌËFý×úç¾EMö•á]ÆMR¹ ¤• =Gˆâ“™í\Ω<ÒêS‘¸©l޵±sö?êG®?ý ë^oý­µxaP\j®é‘€Þ Õ$¼/w€ ËØô4ªÛç9)çµ\…FçZz3ùú‚ۈٳрÎ=륹³xÖ6+» È®§ÃŽÏcsG•W ü$þµlýš',®6œzQifG™€J©õ¶-cû5¡ 0d|þªjººÙZ)ðç€z“ô®wyîg%™ÎI'9©-A/žÂ­Ü@'°b !æpóI±s dšèl­ îÆÇ9äŸÆ«_Z*ñýÎãÒ±¤|åPü¹¦ªa²;Óä\ЇfÞ¬ØoŠQ$'kÚ»­"å.î&Ç#×ÜUó ]©‹ÍiŽæ-ëì+μa•â«ÔôÙÿ -aÑEz–<ÐÙD³È^mƒy=Ím[ꉰ _našèßWðúM$±É+3äà!àÔÐx³I¶P'ÃÂPhG±’vLÍ!î}‡aíI¨Aµõ«Þ¹û>§<$ñ$yúxþuÜ´Is•T3'PFsU£‚C|Ë‘ØÔ×÷–Özx'E#©÷®"ê{#M)!½@*¹ÓäÆP†ïBBð§Î¤W-™@/=Íj@»À%«LBâ<†óÍQº™# ²Aà€A¬´9Û¹ã4¥ÀéÖ¢i¥< R{ži’9Qòç?Ê´týL±Ìv¸á[Ö¦žr\Õ 9ùŒÄËÞ§†ÎAµ‚AVc¶[pX3®*6 O+ùSŒ!a,yö¬û«ÑÙ¾PrTw«Ð[ˆ¡PtQR:÷N 5qœ5XŠ<šœDJ¯}vmbÙ ‡ô®wR‡ûON–Ú]€8àóÝÖ¹-'Á,ÏçjÒPx†6àý[úWe 1Û±CÇŒQ€)õä6ÿ‘¾ûþÙÿèµ®~Š+è@µº·I¤¥IÁ#ר«^+Ñì †Å¬íàDùÃÐ)o»Œãñ®dÙœt§GdXç Õ²ÒY´™¥‰¿x$?!ïÀ®Zö9VW3£#¯$Yˆ IæA==«¡Ñ¯îD¡ fH€äŽük¨†òÖK›KwBës'”á²0öç®+¡]&Ò/õvñ ê>^i®›#*8¹FÚA2»3|Ùž€ÖeÑŽ!Œå½«>Yq‚~•OSe{™CÆ®sN𶧬^ÈšE¹›æDnp#ÝžOû<ƾ‰ð¯Ãý?ºÛÄ<ûéT‹’0\úE‡çÍGs¤Oq4…caÏ«YЮb’$s’3ËRh>º—RY„ê#_¾Àp+¸&lcÈó1€=G­aKt±žÅ¾µNêøM°=±šÆ—vÖT8˜gXñ¸‚(WËs뚎ÞdûIãäÅiÁr¡ŠNzc­iJÎ ¹È¬k§ÄgzUM7$ÑGáLqšˆD–'ƒÒ­q‚I¥=ªxzm¾õmŽÄ$ žÔÇÒ¾ÑÈÅK0Ï=«:m-âFýÞ@þé¬à…~ò}è=zÒsë^Cãoùï¿íŸþ‹Zç袽ïB7v³3ß¼^"ÆsèM]Õ† °Çu1;w}ÌçéÒ‹_*é|ªì>îjïØB'ÝÀ«vP‘c8_ïg…s:Õå¤ ßiPø'|ÿJž‡Zœú|ɵ̨$kU8‘3È^xcޏü©Ö:mÓJöÑÚ´YÚâE+·ë]5®ŸobÛÌ:;Ò´™ý* >cXº¬krFå‘\ÅîžñLG8ŒwªOb³®7•#œâ ºÐ¤š-¢ä ÝÊÿõëCÁï­xFîá­[M¹‚éâó„áÃ*¡?tŒs†=}ºW{wñBßLLßC“ÑVl1ú. ¬ƒñ\_OåÙi† žd‘ßûæ¥{¹5ÉÒWwùTn-Ô}+·±™ŒbŒcÞ²¯˜´’>âXñ¸õ5‡)%ˆæ xÈ@[¹ªr²îÚ¦mî¨$\di‘ÀÌÜ¢¶,‚+"¨#=[½hÉ“nÛrÌ£ zûW?,Ép¹Œôê;Š«EÅ8ŒQ¶…$œ•4i¸ŸaO ƒR¤dtî LPÝ0x”"ã=*Õ½®G›)vþêô­{H’7[1Š»,qÍ #Œ©ë\¼èÖ·&ÞSŸî1þ!QºúÔšaO(\@9­#ãÒ®mÂ…R½mäp: ç^RÙÀÍV™ÁJf2kȵ%†¡%‡™åÆŒÜlú}kVÏ[’êí!6è  ž;Ö¹“ÂMA4Èñ4eNOÖ Õ±ÀQ”jË™A˜ãŒv£µy¿äo¾ÿ¶ú-kŸ¢ŠúVÊÂïÊbNÄõ?…mÛÚE䮿ɵ¥¦épA(K+àžÑ‚ÏMšR‘åP°Ü:`W›ê>"¹ØÊ‘Â Žª§üj¦Ÿxmãó$lÏ)ÉúvþµÕèµõúEÆÁó?ÐWt·ʪÞ$Rfvq Ý'ÐWö溒c½’2IQžƒ°üª##n „78Éâ¦x.xüqMw&ù3žÀ÷ª×ÒYÜÞ&ãð®]<÷–7ky#r¯R;óÛë^Á§Ãg&• štB;v^Aî½ywÆ_—ÓmuØW2Z7•9õF<ôoýןh×gå¯@Òo QÉ5ÛÙÙÝlŽm¾I9a‚GÒ­ÜÝmeÆcŠÃ‚m³¼{xìE[+pàh2 êê?Ͼ(älxå»ÔÅ•#Í[KP‹‚½zÕu¶0Ý«mÈç«°±2â¯5¬w(©0ã9àÕ=RÆ(]$‰1#ÐÖtöÓÛ²¶Xt­ ¨¼8ÎS#ð?ýzÝ2Æ‘K&q…=M`¶Æ=ª»¨NœTÖs;L"#p=O ­ "Väpj‚/ï½êoᦅ\çœÖ¬kån'=j;¨¡¹B“1ѽ+h&)Û³zÕI »½GZНéSGkx&”6œ`gšè¢¼‚L”pqëÅAst„~ì‡?ÞŠÉšFg%Îk:A’OzŒœMxÿŒÛ‹/›ýÏýkŠ+ê›­I!·–vj)n{â³4ÏÙݰY7@Íü/ÀÏÖ» yãÓô©o'uòFXm9Èé|Wqâ‡ÔSS·¾UŽ;ˆ$HqüiO¯ø× m§¶`%ÎÃÐûU˜ž;É|À ÀSÇá]×… 6ö’æd72·(!GAüë~k½‰’À~5®ëسò ¹Œ™8`Oð×(š› s!ÀÏcV-5?2U†YÀë]aŽ+#Q¹;V>í üªŽí:à¦&þUWJ„”UÇå]¦“z4Øœ[Èb{sŒþ¿•jêúT¾—sc8osFÄsãóÈü+Ç|5ðžú+¢5{ØàUb(>yGrz/ëÖ½*ÛIÓt(³€# ¯ó9üOôÅ<ëöëo¸£<¸ÁAÓñ5‡sª£±üÇ…ÓRUG.ˇÇåUîfd9$sUöв®^1»¯µ\¶]¨«Ch)¸RÁjÅÃôù4ÙcÌtÏ̹æˆ_±«Cö˜|¼d>•HX¹EÝ…#ƒšqÓ‘äÃ9#‘U®m ÿÑ÷oÆ ëô¦EwˆÌ2óØÜz¨ÒÆeeA…Ï£‘ïZVQ x·7ßaÍO¼J• ûtªe~v±¡Ãª†=3Q,¾†¬i÷†;ljÏîœà{»uðGnÕ–ñ¸R äz¢¶î$eÛ“ŠŠkw°Ààô¥µÎâ[§lÔòägå4ÕàpqQ³°f»Ô,ø5¨Î˜Zò)O^©ê6è XtQ^÷©\¼¶ÞH'~aô¬èÐ!ϾkZšò4·¶iIbŸ¼~Ÿç­uZ?€íï ™õ‡<Æ@Ž&Æ îO¨ôÁê°]i.™p ÜBÛV|pËØ­Ea ÝBBDTÇ÷†3zÔ³‰­¥Y3»hã=ªÖµ¯›-6&r™(çéÈ=ÿ ànïÒâá›8ìô¨ŒëÐÕ‹I ]B‘»Π`÷&½`Å/•æ%j¤º<×à\Å"¯–HÚßÄj l.㲟̵|¤`OLg‚išD9eUަµ5™~É¥3…,Àüª:“ƒYÞñ×ö•Ïö-øîâÑÉê¸O©íùzWIs­iV:‹X5Ü?mn|½ß¡ô>Ýk2úêWcצ¹ƒtþfÑÕOSZVÖâÝ7Ɇ˜ñŸîŠ~p§¡ÍWe8Ü#v*¹1WàL…Ï¥_WD …ÉÀÍjÇ*ÜqzTW׋i–Ÿë›§µfÛfI$䜓Z± A€sÞ£ºä‚¤g½U2 ®‚2XV]Ë!)çùU&R9íWtáÅÆÙ¥ ã”SüF·"·Qu·Ì¹ç=ëXE *Åf¶—H͹òNO"ª_Z*[>ÍņÏÖ¹Ôœ7p)«'ïòzŠèà¹W·ýë Ê0rzÕ6eš]‚!éêjh­Z#Ï#Ú§hÔ¦ìkž™Á¼“h7ãÚ§*»J“ÏcP7B«éÉôªÅ‰ç9¦ðÇž´¦¼Æ¿ò7_Û?ýµEïVq¹$¾ªsBX=Ë•ö-è+²Ðlmt¸BB¹'«±É?áô®Š[áoi°™†æ5ÆøšÙu(d\ÜEÈ8ê;Š­á¸I €ò¹#g_¯çWî´‰4‘ÀØP©¬ÛéÑxmî/¢$@F&\a~¼µyD™dõ<`ÖÌp”}÷­mhÚ#Ç«ÙÌ—'1΂™ ô¯kÓõ3;d]øÎ妺m’LŒäþµ¦A¥qºÇ‰N•«ÏgŒ[”)2o?6@=®{Xñ]ÍÚÆ»cùsò #ù×;oÎ¥¨alí1mÀF~éõÏjì4߬ ]jîKn( !O¹êO½o %w:ùŠ£¯p*”zlr’኷¨ä ²tÛà Ç‰¸ÇÊyüª¤0’ÆÈÀtaƒZTqÍa,…†VLsôt]HåwdV"¼…TÄcÔTo"Nwy€ûsÅo蚚ɶÚá†þˆþ¾ßZޙżeñótÞ¹™Ì²JÒJ lóV´õèOžþ•¥&ìqÀª˜lO4‡<ŠÌÖ.¾Éc©fù‡µQWYpÙùOJV§j®v‡Ü8Ç5ÑiÒ»ØÑûö5º4öòÕrÜ ÈÔo-ö4q‚ÎÃ+‘=~ïOzj©2/ÖµQ8ÚiûpÀú¾fîœÓ†ɬ»-#F’9fª«Ž€•#é³b8˜c–â©BŒÞ‡;iÀäWxÛþFûïûgÿ¢Ö¹ú(¯ZþŶ}ñ6ñ×å8jÚÐo ÎöÓ;”¼yú:ï,Õ2±Œ`õ«·r+DHj¸q!’£#¥^Ò-~Ås$€à:‘ƒZóJZ"£?þ¿é\n¿=µÜ¯fñG2«€A?¥q÷^ µ™¼Ëh9Ørʨ¨×LºÓÜ àe_ï•üëoNeшÁí]Ö$bØýã°OÅÞ&ÿ„~Ò;„µóä™Ê…gÚ8zjÄð§n¼A®‹;‹xaˆÀdR™Ý¸Ç'3Ú«xºÕ¶Ž¨ø†N?‹'?Ò¹Ö³–GÚ‘àúã¥v~HbÒźGLœ; ûýpsÞ·6ÁéREaå¡l|ïɪé7¹þ5¯gi Ç­cø—DÖïïK{uke@¨Þj‚ǹÆxôü+:Å.¬ôɬîcòŸÌ.ØpxÚ r ô=ë(óÇjLÍX±´ó”ù\‘œäÕ—´xNâF}JßҮ忌­Àfh†ÐøàÿõêKˆÂH:0æ¡u1Ž qЍu Ø+ûÕþë.OøÔ«­[ùÞ]Ô/ã¯Þ§?¥hÅå\&èeYû'5ÉêÄÝÞ?Íò#aqùT)ˆ×hûµb.¤CPJ¡Û?¥lø~p’›g8VSè}+¤i@\E†=½*Ž£v-¡ËåÙ¸µ` ³—-’}jܽÝ#¸/²t À,3“ïZÛ£ëæ/×4ì¡<2þtô*gmŠÏºº8DV{,j>Ô«o½:­g;´Ò~§ô¤Úª»[~5ä6ÿ‘¾ûþÙÿèµ®~Š+è;imî`Ã"ºmÜ?ýUZÒÁb¼ûHvlŸ^MuÊÞS—=íQͬÃkpŒÛÎ2¼â¡µšÞúä¶óô‹Yñþ®cŸÏ?Ö»;‹pp"Ÿkl©“°t⢟1Ì@õ-­ÆÒC}Þõ<3†˜&öDcÓ8Ü}ëN6Á€Àî)nœ=¹U?z°¥‚B¬1ŸçX7é´`ýàzU)ŽqZú=ÂÛάCqÇÖ·~ÞD0¶MN.±Î3è*XY–^I9îjÌŠ®0ÜÓBªôW9«ê¦{qˆpqÉ&°f»ú eI˜ØÇ­h,ŠÉ‚áÈ uú×Qa§A ºLŒ%v\ïÇO¥:H ¶W?•1D‰¸3ÓŠ‚DfúÕf¶f<Šì›ˆïŽÕ‚¶ìîÌÇo?­=ô+È«ˆAO»óSÂä~TÛ¢‚,óö¨€{ð(yŠ D8lòißkp…p9þ* à¹'·­WMÁ‰jHÅy¿än¾ÿ¶ú-kŠ+ë+(Äñ[ÜÜ¢@~UBŽ~½úÖW‰ôË;‹il¯YĹg‹ÌÞ¡F0Aê3õ¬Ô¸,>cÍII%DBÀzVÌv‘ÙY¬Vã 'Ï|õª‡Q†6É'ò©_X·H¹ŽÀW.n˹2H=q]…z%ŠH•Ó½M«®í>D^­…ýkƧ–àj—‹’.ÉÜ|ŒGF>•¥c©ë°°+¨Ü'¦æÝüóM˜ 뇼Õ.¤i\€Ìªm €zS.³©XÛ }G¶µÉcÑœ“לcV¦œ5{ùc¸Ôu{è`<”I™wþXÀ¯EÑí$†Í¤‘Ù¼Ó•ÜÄð*Ìõ´gØ}«—×ï¢Óæw–F‘‘¿vª~|öúVï…¼Pž%ÓK‘åÝÀq,YÎáه׿¡ÏµnI3àìP;óT&º 2í·éXšœ\!¸‰‚8<ûÖN6OÖ”ÀŒVµŒDÚ!ǯó5}F6 ÅMç°T´¡´+ϵXíÛôˇ6Ê$2Ž5Èj1<×rJ#]­ó£{ŸzÏ1°ô¦á³ÐÔñÇ’;Õø”)jè4k½„[·Ü<®{Ùe¬½RG‡k! í¬£ªK{¥U>ýéñkòŒ´nŸ­O5ä"ÕÞ7±À9¬R2Äc¯4À*H«a@]Äà{ÕIïÀÊÃÿ}…D¥@Ý’Ìz±ëQÉ%W—Ï4æ tn FÊגx×þFëïûgÿ¢Ö°(¢¾¤ñl‰ö;U —.ÀöÀã\ªºÎ~VÆ8Á§a¢åÔt«òïpW;‡j¿-ÕßÙ£ÜpKzzb³/Zâ(ˈwGܯUúŠ¿j³Þƒ—Ž¢«Çoy I;Û0ßj³ ®·AÑ5+™ƒ½¢[FÀò&ÒG¦:ÖíÞ„á³*ŽqŒr+œÔ<5jñ9K=­’ÿ #$õ®RóKÓìyÃD£Ô‘üúÕXí¬u]:D¶GYQ²ªçœúþ<ÓtÈ!¶^â=Ê={\VØ…µ è-¡ÁyUxã“×éßð¯A¸·û ‚$qèÖ²%Ôà ¬*+9Ë15ÄøÆøš¡0ÇÜôþ•‰§^O ê‘_[™OGSÕOé^³ý·a&Ÿ ÒIÄãäŒýàÝÔþ5ÌhIw9iqŒà(è*w;Æp*¤øF¹¦VÅå´v‰’áÆr0}I«K{h片Çü*Hî-åb© -éƒ].˜± (ä 7䟭’àÔuõªrüÑsx5‘s@8åO_Z«5¼2DLŠ7v= Pò<´ùG=ê¨Äù9#<ŠÑ$2tô©­ËÈb8ìkjÎîI>C#’=Nj¾»~--ãfË»d(ÿäéš]Ò·'·aô«äŽ:U„`à çö*Œ™`¤ô­F <ÔZ‘×xž+¢a’N}Kj<Ëõ@Üe»V…Þ’ÐÄ<°d|üÄñù  #+Á>†‘†MTŸaËÇz«”î|½š °ô#µy'än¾ÿ¶ú-kŠ+êÆÑý‚!Ëv$û?¥pà²I”ÈlÖµ¥­Þ«/‘.â7lóõ­ë/jòL~΄sóIïíšèÇ„/f\Ïsm»¦Wqãò¨o|.tûu—íRÍ´¨Lqƒß>³ì´(mÙ‹€ÙrÁásÛ³å,‘…à ¡TƒEt›üØbœ’aéê+>ïPK¡WÊ’µq¾ ñ†–¦8Õ§º?v F»é^ew{sªÜ™î¤,Äð `/°¡¤#ZÊ&†Æ0{ŠÙ’ÑnÉ’/‘ŸjÝðÞ‹6™,zÅûDoˆcÝŒ“Æ[ÃŽÝóÍvwZÕ´H—°‘ © sšâ°"ã+`7LZ›xU,xÇ5Íøª-ñZÏ܇ñÁÈÖ]”I6Þáê:Vܶå4ÇuáÐSéƒþªpe±&:õúÖÏñ[‡'%—8ô¬ÉAóNzûÒƒÆ)sRCO˜õ5j&!Á½t¶3«Ú•/µÁïIæÉŸ7̧€ENX‘U®W§šÎ’DóÚß0"¢)Q½šJ¾‡ÔRÞ=„ƒÏPjXS952ßC oó=*ޝ}ì(‰»†ÎMcqÒ´!˜G€X Õ„»‚$8Nýª´Ò_qÿõTö×Ï ãz~¢¬jw1J–þ[‚¸'#ðªc#žj)"rÇ`>¼v®‚Êëí¶YrHø“ŸÖ³¯níó²57÷»~u›#1<Ô0Çž”…€8Þ3À漗Ƈ>-¾ÿ¶ú-kŠ+ÜÆ´×ARòîG•?wšI;GNqêORM<Ûç÷€e½+gÃÊš°#`ÆWùé^ƒi3¡$IíWÑæ5­\™´ãƒ÷X¢³¬! Ѿ´õ;NsSÉ}u “}™—åçi\äW›x—ź ·¹H(Ë9W‘FA=³ÅpHç%÷Ç©'’kBÍÕäÆz‘]=Š%á*„ Šëü?¥*mžãG*¾‡ÔÖÍóÅv¡%D ¶IÆ8ëžÕæW,´MQìÞážÅ+ÿtãÍ7MñdZ¦¦Ög òþé³Ëëþ{VãÜ”Œ¤’¹ïYºÖ«fú’ÎŃ•›¥ÜG=Ú$|8ú×cöxã€C)Ë:ÀöÍeÚB>ЀÚH­+‰r¬TpÀ5’íæ)€NÀ¦S…$d—Àjô32¨ÏQRý§'¿5jÜDW;niR±´Žz É-™¼ã÷úæ­G*Ê™S’:ŠF-ŒQÁç½+ÿ«Ï¥QóP¹¨ñ‘Š@¾´ú’7^„â¤Ê÷‡çQ8Ëayúº™(»ºâ”'Í‘L’0CJç®;Õך Í!¨]Fà{ӂבø×þFëïûgÿ¢Ö°(¢½¾óAw%‹…à¯QZZSî‡É#3'‘ÉtšDmuÈ õÀ5ÒFÀÀÕmjæH4ã4GXdúXÛÆK7ó£’§¥:VÑ€åpãunws ŸÞ5nB ±ãä×…xŸYOøIuíØVgQé÷Žk;ŒOZ¹måa[”õ®ÿÂ(™Îå8ü뺆<`Œõ½yÿÄßÿgì;7 s éƒcb‰õ=O·Ö¼ræþinša‘žØS­ïç´¹†æ9›‡BOpr+°¼ñ욉ò¬`ÿ(ùÜ‚Ä÷Àè;Ô0;H3+3¿RÍÉ5¥ní n9®ÖËR7ö©rÇ,~Wö#ƒSa·£©ÎjS¸¡ÉçSgëIÚ¤J’26TóS¼°b1Æ \‚Ú[”.ÇÊ‹zš ÆKi‚nôï¶Ìñùr6åÎi¥·¯ð§ÀÍ”ñÜUçmùy&«³6IïQ\Ý@ïTì¿0Oµ<œÒQE'J38E'¥n[èÒD‹‚GE=MÀ²!õÕY®)v'ÌGZ[‰#ÛÐä·³Èùi´Öm£Þ¡(Cn-“éSãƒ^CãLÿÂ[}““û¿ýµEõÝqˆ”{Réº,vR‰éAÙjó0Yòz‘Wc¹‰xÞ§ñ¨u_i×–ñòÍ ïc#õ¼ÊaÌ*²cçž”O©¬Ñùjp|ÕÝ.êæÊÜKŽÎBžE[¾Öï.­$UD…H@ûבj:V©a)“P·•7’L nRsÏ#ŠŠWÿ–ÿøïÿ^¶4MRþ 8npò¸\ìéž§¯a^gáï »´½ûlx„;p}q¸çô­dñ= Ò¥¸ ‹¥X[®îÜ÷ÿ ò=vº¼–[Ø–I¦bí!±=óX§Aí|õ•â'î¯ÞãY/§\5ÂÁóäs…ŽIúWE£øtÛÆ³Ý£ÇrþíÆ6céZ²*FçjícéIÏpá"Bì{(Ítú½å„2$®¢90LxÎÖ¶R^=1RoÈÆi™À=ÍC÷›ð¦1ÛÉ¥$Dá‰îx§çÒ¤XŽ2zõ«±j2ÊÜtßUn¥ó¦$t}j¶à)Ññ µmQÁ`œ÷«?2ŽFNW;p}*Â9ô¨6€:cð¥·dÔÂÚC‘Œ`~u_'8èE8dŒàŸÂ˜åÕÚqW´¥i.‹´ èk§†Q¹BôéYÚ¾¨¬ ¼.8i==…a8òÆO×­F®\džô­´•͈É›™¨©«È|mÿ#}÷ý³ÿÑk\ýW×(yM§x8#).P¡Á<ŽÕ‰Uºj¤ºÍ’3Ë7Ü£=+“_‹±#°³ÓØœåZwÇAþ5Ä]j­<Ï*w,V3€9è)`¾•Ü rYŽz%«H!Ž ®q“ZÖ$Y'‰Ò22ŒG ô©îS|©´eBíÆ=úT?t]R$°K¦ç̶!1õÒ“ÂÞ ë3^Ív·Q„Ùnv”*ORG#§œšÞÖuÓFžA‡1ŒìýzȶÐ$¹ÚK¬j}y5ÏëZe·Ù/–ãxÀÚz‘\q¶½¿¾ƒJÓá7H£ËÙÀeþöOAõÆ+Ñô?Ûøv×Ι„úƒÞL ê«è?Ÿä _L’iÔÀ»œðGLúT)¡F¡EËùÜ/AøÖŒ0ElŠ5EôZ}šRäw«VZ„ÖR™"ÚI]¿0­»MfâñÚ-T”8u=8ãƒïXÒMs?úé¤P[Œý)‚ *±m²°=2GëVTå­!ß!FZ¦¹Óeµ]°TŽHíYÒÆs»ªûU‹uåw1éZQǹwwU´§NT†õ=ê¼ÖïÃñª¯3P¥¤·2²Ä¹!sÍ641™HaÔV“ÐóUn-Ë1`9ïWmaÝb­Žä~µÊÛŒ“Ú‹PðÉ÷€•jêyVå6ñõBV<}ê — !QÚ£VŒ~híM(H=¤H–1Àüéõãþ6ÿ‘ºûþÙÿ赬 (¯¸.­á‰ž]ª¤ýæÃ?‰«:V‘l¶ñaœó#ÿxÿ‡ ­u–EÆ×8úÓew‘·1&›@9Í-&=é›X¶zÔÐgÍÀì3Z(ØBsNÎNj?3-ÈïUeQ#7®ið®Ò ãªìç×µXr Q´h`y`Â’é¡@VpjÊêª~üL?Ý Õ¸µ7iv·`Êj¥ó˜ÙHõÍWWTVf`ÇÅT´iRVdìsÍiÇ Æ@â§Þ àò­eÞy6².ï\U«{•]6@&@? £y/˜Iã5˜ãÓ)¬»†:{ÓD@SëO¨Ýö°çƒOÀ+Í`b–Œ×xÔâëà?éŸþ‹ZÀ¢Šú>úéѶvÜ:×Ið¾ÀÛØj·îí#K"ÂŽOÊ ?úé]SHëp®:µ•¬K(BTñŽMyö²Áb”ȽAäWž^[•Ž2;U#£ •t9WW¥_E}bAnýbúŸQVíl®MÀ—Ë">Œ[Ò¡¾ˆ3mNè}k:ý®okq4’ˆ—jn9À­Ÿ ¾§—°°N6‘ÿwÓÞµoÞã›"îU',zWy(¸—dKN«Vî™d4ËWFrd”†qž2:qOÞw‚[ «‘‚g­>óÅ`PÇëAÏj9Ç\RÆB޾õ:\7 ÍYŠV8È4 qït@y5Z qy)X¤ ç¯Ò‰!x\£™x$T‘’¨ ýêwœ[“Á§#å}qQÈâ6àcΡ‚w4¹ëÍh [¨\ßš¥u/”J/>µ›w=éÉxC´lÜÁÍZ[ÕHË; Ë–S4ŒíÔúЗF…ü§ži<‡®) ëIIFi¤j9×r:ƒNl„uÅ*dš”žqNÍy¿äo¾ÿ¶ú-kŸ¢Šú£û&Êà~úÿÀØZît. ;@†ÞÌjäÈFIäŸSøRÝG±09ƒ©\¤Pë¸7¯8×§qò…XðMrÒ@\³œU3 WàsZÞÐ7jë{5ÓÆ#HS€ßSéí]eó³Ý‘Ë{Ö2¼SÈ9ƒL–ÈÉ D^IÅ]¼Ô,´5Rvq¼í߯?¿Öï5)IÿUhÇõ÷«z5ÌVWŸh¸C&F„äÇï]4— è2žAêì<¥p¸$wëR†Ü3FášNýwj) Å3vM•>ÔòN2*X®®[‚;S^c3äœûzS£ w úÕØ§S6nƒH§ø”óÿ×­–°´‰23n““UÖ0IòÀ™éT¼ÔóH@0=)—[ ¦îýý+.yJ9|ïSЊ™. E¹F8ïIÔÑUùô©>׆a¼Ò?È3ž=©¡ƒrzÒ@4¥¸¦{R猚3FàN)À|SˆçŽ´Ò Zy£É2Ù p@ªË,€òƼ«ÆM¿Åw­såôÿqk Š+ÑSã7ˆñe¥¬Rñu~?þ/‰-¶•´ aÿíJþÐ^,a†ÓôSÿl%ÿ㕟sñ¯ÄwJÊö:Hû±IÇþD¬{¯ˆúÅÚ…’ÖÀc¦ØßÿŠªKãMEAE¡ÉîÿÅR/Œõmßg´ÏûÿÅTñø÷VŠU‘"µ §#äoþ*§¼ø‘­^Äc’+0¤ç Ž?öj«Žu8W §\ä£ñUq>%kr-tòqŒ˜ßÿ‹¬KïÞê7¯up"gsœa°¾Ã'Q nàtŽûäÿO‰o#\mÈ÷Sþ5fÛÆZ…¨`Z°'8ebþ=VÇÄ=\ yGêÿÅP¿5u {.Øþ*ƒñWoùw²ÿ¾ÿŠ¡~!êêò,ÕÿЧˆÚ¸Ö?÷ÃÿñT¿ð±õùö±ÿ¿oÿÅSGÄM_þ}ì¿ï‡ÿâ©?áaêùÏÙì¿ï‡ÿâ©OÄM\Œ}žÇþøþ*—þ6¯Œ}šÇþøþ*“þ&®zÛXÿßÿÅPŸ5xÎE½âÿÅTŸð²õŸùõ°ÿ¿oÿÅR¯ÄÝm2[Ø+)È>[­øÍâ7}ž–O¯•'?øýC'ÅÝ~Deû&š¹ÊÅ&ô:¦Ÿõ¤ÿ—{õÿøªY~&kS*«[X ŒFÿü]@ßufM¾Ež?Üþ*œ¿5u\ kûáÿøªÄM\ÿ˽ú#ÿñU ñæ¨\·ÙìÆ{oþ*¤õ€¡|›Bª?ÿNÿ…‹«ÿϽýðÿüU/ü,m\ÿ˵ýðÿüU'ü,]_û=—ýðÿüU(ø¬ùw±ÿ¾ÿŠ£þ6¯ÿ>Ö?÷íÿøªÄm\Œ}šÇþøþ*›ÿ Wíÿ€?ÿ@ø‡«ùw²ÿ¾ÿФ?ubÛ¾ÏeŸ÷ÿЧÿÂÆÖ?çÚÇþøþ*—þ>±ÿ>Ö?÷ÃÿñTŸð±õùö±ÿ¾ÿŠ£þ>±ÿ>Ö?÷ÃÿñTÂÅÕóŸ³XÿßÿÅTRxÿUäÛÙ¢7ÿ\ö¡}.¥}%ÜÊ‹$˜È@@àßéU¨¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¯ÿÙnip2-8.7.0/share/nip2/data/examples/2_point_mosaic/full_image.jpg0000644000175000017500000052136613224651032021546 00000000000000ÿØÿàJFIFHHÿþCreated with The GIMPÿÛC  #!!!$'$ & ! ÿÀ âî"ÿÄ ÿÄO!1A"Qaq2B‘¡±Á#RÑ3báð$r‚ñC¢%4S’²ÂcÒDE&5ds“¤âÿÚ?a—|Ž¢• $d œêPÆ6ÑIt5ÇBØuä\°Ú¤FÜÈÔR…s©¤I”aŽv8–8„kÐRB^Õ$­ÑÄíO@[Ä*à i< glçµr1Ê1Ò¸ùæ¨†à ™sÐâžf,PŽÇ5 ŠnDÈ|}å4-,ÉpØÝw¢QÃÊÙñPkjVÀê2H˲’GíR£†%œÈ¨ˆÆÔ£ÎzÒ'G0€¾´ê/‡¯zóy—>›Óq³9ån¾´ä€t¯µEñBÈFàZYCŒïN˜¯W8Úšpî­Û#­.4T@ª0r@äùFÕÂ/?+.õ)¡ÀÜzÒÏJàÛzö2ÀžÕРtÛÚ¸Ùæ¨7°£Û,>Tõ³É*bTÁ{Ö¤r iãg!p¡G¯ZêBAÉaH¼Rm»~´«U)Ó4÷^´ƒs  89æ¥{9ô¦K6¦å´G\×±¨KÅœÙUʧ±©èK¯6'±§UBŒõÒ2kØ4Ò9”²•8õô®I¼›ö4è\ ï(î2j<ƒÃ<ßwÒ»¼‡e*¾â¤R]K g½yG*®àAïI "¼ç ®®B{×—-j÷.ôÌ¡›nÕÅNfè)M_(qëO…’cæ9jDñsÂBÌ7ÄFHˆÈ#ãRðq]Ö¼p@#½v’ÀvãHŒyXb¯W«Œ¡†+ 06ÿÕ¤1 Î{w¦2YJƒÐ‘L«bLgbiúæõ÷zâç;ŽÕæ`›±À®’ÏjãÈKŒt¥Å(–>r0s‚)"ÞÍ ‹˜ç$ê@\(Àǵ{¶ôžÛW¹@¥gÚ¸ $ùN=k¬¬Q¹z€M7 ·‡–3nsJU!éÎCé\"™s½)[`w«ªsŽôÄÒaŽÙ§”‰G|oIKy¤·yÖ"ѧZòΠùSèñËúS¦ @ÝiÍŒ׊0ŒWÀÅv$y¦X£f8¼¬FAߨé\®à‘қߛښK„iH =*@É®ãašæÎ¸a]EÛjè½t©#>•åRÝ;R'ˆ¼,„År.r0ʺYAÁ85ÜƒÐæ’YùùBü)ÌW+°÷®!ÏZV5ÆÈ^aIV-šR’FãÜŠC…OËÖ”¹ÆõÚæù¯gÚ»M¼«ó7JìR S˜ v¥ÒYs½4òŸW“98ëOô¯ O8Ê{טïös]ÈQ]W«Ù¯S|Ü­Êi}¶ë^ò€A\-ƒÖ½Ÿ.M6 /ÉŒÓÀ0:W«ÜGµK±·k¹Ú8ÆJ£9ÀT‹ ¾º¢Uݰ;U…t™@>írïO  LªUöÁ*~šÖP®Ø?dj ѼLRE*Gj~ÞßÄÇqœb¥‹­x餧•‰nœ¸¦F‹w&yFž²mùu©ivFÒ†öH½XZ‘ƨìb…-£¼œ±)&C€ïE–ÄÀ!r{ŸSQîíÚ<9\v¨˜8é\Å-cæ; ûÓÆ$EÎI4Á;šêl ö¥Ç r=*@µä'¾{ÔÛ{•rÞH½{Ÿ…¹KKm"DX—Ãa˃¹fõýèÚBÊ0Ûñ¦¿‡ÛƒÌÁ³ê–m‘Èēڛ–4äx‚ƒœS)•ðßf­º‰5í±™'Š(ѹ9NsÐvùÔƒÀ t×ýÕ䯑ŒìIý¨µ·iðòsM(Î|î?`*ª@cÖg³·B˜B(ßc¸üªDú*ÃióåÁ>!õô†OªjBXßj°ÁÃ:’Û—ðV &-!Ç*ú`o“\nŠüéšFô”Pé­ãŽnHÐ`Šb8"f*q’3©Âg¹Xùs“O¶ƒkgxðÝBƒ°øÔiF0pA̹æÁ¦Í¼€ã”°ÿ.ôêèÉå¦E¤Ï4"QˆÃ}ÝOúTy­. È’#Ëê7:+#LÑó1ß©Ýݤ>=ºr²îFIȨ„ÎJ×eŽ"@ œé¸m#I†›Ö§-ŒÑï$-ƒß¨ÓÛVžb§!GSRÔª¨UaK5êãl3I •–Fk„sÞ¼ÆôÜÎrOÀRbº{╳wèiÌHvéŠKäò¥»WzŒ©Øv¦grÛŽØô©Hœ×™rA®2’ 1ñ®Ór·—½KÑl­ï/ü)ˬ|„ŽCŒ‘õ«•…”…í äŒ,I?ZììÖÔ(Q›vcåJxÀíAuKG˜«¢ä ;T8’H¢%Ôèh\ÖQJì΄†9ÇJ!¤[D—±…USÍ€?ßµXÞÎÊa™-c$õ!p^³±´µ™ÞUœc||;Ðn#µ6ä]ÆÃ•ÎzZ©K1f €–c€Üš7¦ðIJq¨åGQw?õz|(Äz-µ¥¬·2„F!$«A..,¢rVa+góéB.¦Y›dÀ÷¨2Fyr¨øf½oj%Y$‘ùQ_SØWFÀ`S…)æ\­0ñŽ¡ØÓ™H÷¢šnŸ%Ðq )‘:¡8${Q5´)„ž9à ~D%p öÄOj‘øì˜nn™šÚn ‘R#4`à˜÷#åÖ¡™OCœ°iØ‚òÿH8Ï­2_ÅfæsœWcXÇÙ“qVîº)oqÎ2üèè¼Ü™Íxʬ¥AÇíC䱊+çºl4Ò–ø `~éSšPwÅ (üÆHÃqS´Í Ò[‘u, ÉÈ­V—Oa×¥¿·ëœƒUÛ›q3§½O¶µÚ.a€ËÌ~{ÔYÍ„LÁU aFæ¡\]«rCÞ‚Èq!±©Ö×wOÉ çð‰©Òé–è¦wŽ2z(lŸËjiá>'ŠO3g;ŒäúÑ{{õº$ $Çäáý©ù"lp(|ì -Œ·.ইÅwªjÂåæO°ß•3ÕòMHŠ6•¶Që+Ÿ$+Ù»Š}`—0f%]Á­ŸMŽ)@äd€vëQeŽ5ÀUšŠÏžPÃÞŒF(S7±€L;l}è3îÞõ6ËKšì,„øqŸ¼{üIm1!b£$Žç½OƒGÓæµIf‰™É!¼ÄPí[K†Öåü8ÊË’wÉß•›ÊOfíCå»™ØEÉÈiÔ°W¯qR$ŒÉ Làö¯X¢åºŸZò‚ÀÒ í"L•À®Gö9})\çJQ¤–À¦."ñ™O˜v¤[«z’Àrò ¾ß,¬Fp×¹§yTñ^Ïl`Sg–cÐ×Ur2w&»vYŽr3JfP0H÷®³œæ»\!·Á¤â§éÒ¯ápvÎ?в‹³S‚§ ûÑû.)ŒŽMA03ê?µF†æ!5¼«,g£)Ȩs!ñH#­Ô&A7€§q»j$ªÇ¶Õ.ÅÄ|ò…M:Ü3OGy¸ ïIÔ&Ióá‘—|j>ƒa§ZHF9îÏIÓÐzQÖ s8$J¥k³jóó3²–æ^cœ¾CKEô§M‚È0A q¥H¨Y[(:äàÓ&Ø2CËù{JŽß“<˃\–+Ê:ç½@¹†â-˨Œœ`lH9wqŸOÓïÍ¥ôwç0y{Õå®`– KRPÛ‰-pü£Ó…´íqvŠ£ …M†àÚÌÉÔ8éïPᆱ1><@·õcÆ„KkX$ØNæ IÚ”ƒ'6ßRk9L1),ë»zbˆØê,Ò”æË“Ž‚ŠG}ʤucNÜܳ”œb¸o¢ðÄ€ó|)PÊ—Q—;;1e7, (FJ*O]ÅBÔ1'Ý*«| eqÓ¥Ak‹¥'w-É·'n^ãýúR5WçI¢n`˹¡O îri Í$ªªI« £ p¸Ø×®æ3#6yFô®$^n‡=íL,ÅGó $œæ§ Rsn#gæ9\T{‹© »xoÊ݈¡ðN¹;’MOU `ÌH=¥FUA»·Ê§[Ȫ£}»SßYþeü+«®ßZNE´Ëá©ò« 8¨¿Ä.噋r3¹É$RË9 gÔSÑ.7ïR•†Bž´Ìî$<™òô¦bµ‚ r9Ø‚2ݨ֓à5Š"º±RrÜoJš$™±l;žôVÇNo»ä!9nÒ™Õl‘Â9ŽÉ ºv‹kq©H—Öþ,~ sÁÈßb=è±á­ͱ ïâ8ÇçU­WL°±çHm0àìÁ˜íëÖƒ7/Ý\Sxõ¯ÀØW1ojîyqžõÇ9SH Tli‡ÇÏ6sïN©o†2´¢„ž´‡ˆ8ÁfÇ Úº‘$@òÍ+¦äâ¼Xv®õâ»TiÐÈÀ¾”¨ÄŠ6b~4ìkÊsÐb›’ÒéN P¯W¾Ç­.&*êÞ‡4Y®=é©'lfœÓõKí>ÚvŒž«Ô7Äw«3qůðù^æØ­Ò¯—ÃÝþ¢€µÿ‰ÏÌÒoŸsQÅÓǺ¶*RêœÐªÈÙÉ#½+ëò *â•ü«(v$ãµ;ü^fifÉ É©bè%SÔ6h;®n¢ É^øû^õTDy#™H ®  Fw ±šʱUðŽN×|Ñåµ„Ûøs(`w4"ïKXœàeF¸P69v9 6Ûÿ&áHÞ„ÞEõ˜‘ •äã½¾·Ȧ J“ƒ“]¶ñŒ ´éZ[·º ¦-шûCÐS s%Ä„° ;.sQîd(Šw'jˆ­:’í3ƒ×f57L´Ôu‰ÙRnH×íHû€{ …uÅ­ÃÛܧ,ŠpA®[€òò“¿¥6rd(‡=}©76×(«-ºBç u¤Ù]M$€ª[ÓµO†æfÉ.wùTkÍvê)UcÕx“J„²G1¸oH†GãÒª7Úìòå cQêrhSjWOÌÎÙß¡Wa½šëù|€(Ϙ•Ú‘k Š^vRÃÛµI¦@`}Æ)‡çäå#¯_zˆñÎ* -œ/jSÓ›#µ'ri!qØÓÈyFNàÒ8éŠu_IIŸGéLʘí€OZxIÈÀ¡ :•+¦AùTˆÉQ½7u #”ºŸzn9ISÈ©ÈrŸ´?:a¥’ÖFð‰RIÉ¥Ó¯¼pU”«/SØÕ–ÃSäÄ3°ðq€{¯úQ ˆ[´À“,.;Ôé µ•A{x‹„ ¦¿‡@rÿWsßT[«"@ÁA9ô¨« l²ì*}µƒÜIj˜6: w£(LD¥Ÿ·½C“Lu‹2&wÆQL¾œÊvÈÎû×­#fSÉ Ä_h)‰b*ű•Î ©K€ëаC'OJ’"Ža‚›ŸJ4\“HŒ»)Æô.áUåP; ŒZ‘Œäö&Ýyƒ66è)æ â›WæÁǽt’F–{7ZCFã5ÎU!q\ärw͆u•za½+’®T±üêE’~rÜÝŠ­%” Nz‚)¦ÝHêhΑ£ê·¨©aa4 ýð¸Rê;UÄtxn`’óS‹ã¶ø·ì>taxv{ dú„ææÉ²Âûqòžã®Ý~4Á€ÝˆìhíÂ1(é±8ªn§aqcsâ9/‡*ý~GÞ£‡òŒÒ—°øQX°ŒS^lò•9=»Ò$B¡ÓÛÑX.Œq"ö@Ì—LÓ1Ïzð»aÞ½rÒ[Å9 sC«ÕÀr2+»úW¾T’@8Å2ïÍæH‹Ÿ y 1‚ø¥W3½w+ÔÛÉÊqËšV>{WH¨÷*àâ—o:L‡”ä¯Zw;×kÛgÞ½¾}©2t¤óf¼¤($«ÂàŒS¹Îõ잣cStÉ›øŠ1lœþÔxÜ)'.0ûÔ9üÆEǧ5G¶Õnt¹Œös{¦r®=Å]ôzÇYŒF1Ö7…_úOz“=  ìíuªž¯©-µßÔbÁr3!wÐTx®¡•ЧÚòž¸¯L㔘çBç¿1±T„ŸRÇå¼âhËŒu”ò¸c½7ÈÑÈ@û ¸ö®N¡š Ç|š™ñÛ¨X†}û °YÅ'ÕVW3ïƒS£2¨ÔÞ©-¬qÇ,²¬sdÞOoõ§â½ŽH¨à©üJŽòfpzfž˜…RyÇcY¶£dö¡Š(ØÅ!Ì@oòùQ{=)‰.ön¢?O;v1ÜtÅK#Îܼ­¸ÆkÍi Œš/c Æ<£È‹ñ4FÜGâó?Úû´Åõº]GÚ;zuÁ$¼F¬p3ŸÚ¦XÜÙ3†xy@ÀU`?*Tú}¤Ö·éÆ&êTwìjŠÑË Ù·‘H‘”ëV‹=.á=ÆaSØý£ý¨Ävé Û×½¹\Ï9ê @®Ñ×vÜv5 ÌIì*BÚ\¶„Pz¶Õ=a QÚ’ñ«)Vƒ×5ÀeFÔRÇM 4jÅö*Þ”»½Ù!’Uâ*…‡)Ø(*ÂÎ<¤W¼©‚Ñž\õëEt;­vÚ¸|H[›™K”‘Ðú⵫}…£_.‰l1ý@·êi1éZ›m"Ûið–.dæ‘C°ööƯoaq¦ÉnÖÑràc 7ª úb@ÜÜ ¯b£6ÎÊObPýw­‡. ð 'ÌžV¨·î,õYí”r l¨;ÖŒhë$Ñ´ÏŸ8Ö¦Íek<âgÎ2;üj›Ä0K¯¬¢s–#£­ ›OŠþÍíåQá·~àúÕSÓfÒo ¼§ž6Þ9?¨z‡îz-k`ŒÂIºç§¥;«[Ão Ýr•Q…b=zD6×6|ŽÙrAÛl{W_‡bx‹Û^`vWüÅ “I½Y „òšŠmäYÄR+FßæÅ30dr¯¹”Ø!€`v5ÂÀR^E Çf8§JöEpàŠLkÊ€´ºñÏcŠà>õÚñ¦ÜRI®F% Þ#©Sö@>4í5$BF¥$iò Ç½((Ú÷Þ¯WŽ;Ò'T ³È ±TSö{š“^Rê:ÓéžAž´¢p) ¹`ExLòcsÞ¹â2œ•#ߨ®‰U˜.pOAëJçt!£b¬AªÓcÆw‘iòAy¸˜."—¾ÍëU–‘Þf•Ø´Œy‹æž çYÌ:J'ìs øW;ØÒ§±½7ªÿ<Ÿ_h¡%cM™‡séD¢uQ–8š¹¹ñ”"Œ(9Éêiž|ÇŒœþ´¸çt* PzQë}vXH*zçQG×­Œ Âøll‡f5W¿¸šêàÏ3’ݽ¾Ä—21R¬Ë˾ǽKUœÄ±Jç³ÍVM/‰íù’ÎúQÈvYE>‡ÛÞ¬2ÀœÁÂ)#ìœt¡W÷ l6 ·ÙZ gbå˜ç=Ep2ê|§cHgß‹ÙÜD¶åZEÇ%iøÖV¼Œc wß­NxÉUgˆƒI4“žE-øÿâ«æÜç¥*?¬Å¼3Iý,EÑ šïUk«‡2H¥3u??€«|ˆX‘œHÀPЋ›|òH>¢¢[éßYvI—ùG®vÍMþ—ng†<‘²¹ÜŒÿ¾´Ì6ë,-Î6=¡¤¾’ìŒù€èz%ŒŠáf-|Öhš,3Hn$æx”ãs€M’ÆÉ­ Ô­žXgŠ%ævF{‘U¸t]I>Õ¶?ï_ïSSM¹Q‰ {jm…›®©T CcJÓ’Î)mÓ•ÙKoÖ‚êP\Ù’Òx¿©{|j6°ZÖî{fìv÷ª¾ä•9ßÚ§Ûió• Ñ’Ç¢ã§Æ¬úœö­#Ï"Q×"¦jv’ë·rr$‰È{AÏ^ÙÏåEÉHÐ"ª£ÔÉ“¯Z«È×@Çâ>žç½‹Ê H¼¸=*5Þ˜Ü@ „Ví4ºò ÐúçµV¯xj~ÕVÒý’Yš1"²g—#lûƒDlÒ6@9G¯J9“ ­¼ªã(íFt~ÓlÃøÖ³/ÿp–ßçTëËaiq,(p‘ÓÞ»£Ù[Ksu-û“BJ•Ø«d`þGj .ƒyu#¿Ö"óéZ\±™"¼„œcr­ba“ žCÔÕæ`í]*%ˆ¡ëÚž‡"0¤çѼ„^%A rvô¥R_8ڻ˾s½tšKFÕÕP£ß֒ᱸÍ{®Õì õz½Þ½^ê),¹^RrÔÌ0òç˜ïíKTþa8À:rÕú‘é ¬ ï±éí\Pia†qœÒ]W"B åéŠpÀ¸5êõt1\©ƒP¸¦ÙÎÁP=*&qÒ… ó¬dœÊ—=¡…ÀVæ¥ C"‚ìéMqžÕgàþ—[»v¼Ê0ùŸ'··½Xï8N´×§žD‘ôé£óclî3ýý}¨v¡ÂVCÍk}8bvYíUé¸~ò2LoƒãƒQFv%Xä…‡1ÆFàT_ø¦6\°lcÞ­VZäúe›C:‰¡ ü¬œxgПé¡ÜIu+O,¥Ù÷ÎvùTy[–/€=MO°·¹¿Œ¬q°†ò…L— nòXc˜|(®Ÿ¦¼§– w–QÔ*–4íçqD·¬QC§ÁמifÎ*rh2ZÆ ú‹ÈßþŒrþÿµT5Ó$wnÑHÄË–9¨:tww®Xà©Ã7/AFÿƒ"ƒŽl6ÀgìÑ+nÔ-´âᤘ±)ö—d—Zf;™Ì-Ï+sçbÇ4‹}Cþm"¸+8VÇaêÏÇZ,:Fku`ÒdMáÊÌrH ãá¸üê«c1+’I4nÚfdĈ?tþôµÒî%ÊÖVŒœ|µb¶áÙ®y!’fÄ e}ñèìœ'a™ü:ó‘; ËÊPíÐö§,xwK³µKh¢rˆ>ón~54iZRîÖQ·ýY?­UõÝ28õ)¤·…UYAT@Z¬½Òi-äUþ¢§0PÁ4›KLêPȤžC u=ëZŶ–‘Ù„•³&û¸¡zµ¤‘Ävæ÷ìE@׸vóW¹·šÀ o±#;`ØþµÝ7„ì¬\Mu)»™zdr¢Ÿa×ç]Ô£’Ôø–°©‹«O…3i(štu'ÔSUn´Ì”ç1°p?/Þ¢Ùx„BC¶Ã›•üмîsǽ5¥èÍ&¡<×ù þ_ó{SšÇ C©êQM ÂÝq‰‚Î:cÐö£:}ž™màÙÂ#^ç©cêOz«q¿¶¶ÖSA*E,ù‰,§ˆüÍ'Dá 2Ú$’à=Ì„dóœ~ýjÏmkøIƃ QŠm¼33rŽƒÞ«Z¶™¤Ê³=Ô1ÆÇÌ$æ*IëÛ­V'Ó­cÓçú³ÊùIógÛóüª-½¼È¡™ISÜUoŒãynlU@QŽO¹Ú«R„ãÅóŸÂ…j0,wjSËdtÏûÅ*>P ÓÀÒ’£ÎÆ—\ß›ÐWIÅ#›Ò½Ïé^-Ój]xg½!ÈPI8­EK™{àeHí^¯WŽ{TYDÍ/*}œoÞœ‰Ot¯mÚ½\Îr?:öÙ®Ò@`Ç'"•‘S´äÌ' Å)˜¤Im‹°U‹M´³¸·æ¶+*¡ä$øÿZ{PÒì-´×ºšÞ3 !#|Ÿ×½áâ°,r/Ú—r¥]|(ï¬$µ›`ýºžÆ³NK‹ Ùmî× Ç]±ëQÒež3"ýž™©ÖVHÌì»åþõY—OTâÙ!uþ[3Ób?½K»Ð¡¹…âŽr¡»>ø4&=P´>‹ÄŒtu9ÞŽéÚ-Œ—(×›‡À<öG˿δÝ"ÚÓÃTxcqŒr²‚ { Sá­&þͤ·´[k¨Ï:´CøÇMÅ9¥ÛÛ[é¡l¢~ö:±÷=ê¨ÌÂ6Ϩ ÷LXÇNõGÕ¬ÖáJX©nbcÖ¬¶6šuΛé…L 1Ê:©ô#Ö§‹¦JíG–æ-*ÊO˜€2ªw¿K±¶Ñoµv$ó“’¿¥‰ô¸*-m±ÿJàÐ,¸±ÔønòÂ+„y˜”ç,=~Xª›¥4.‚yל 'Ž(½„qCÄvð+–o[ÓoZH#Ÿ©§p Nq¾Õ6쇈CQcuèN u _77¾)›˜I•Ü·zAE+ÊTcÒ…]éV²œø îqOèœ;mk0¾–/æðÁ==êÅLxbt’9W*I=Å:ƒ“ùjëLO 9p7î(|°x™Øõ¦£³†(Tc¦FqP5­‹¦A1ºç”wõ3N„ç+ƒúÔó9î½½©ä˜ÃÍÊ21Ò½ ÈÃÄe ŸZ\—,­… ãr A»¹çfn]ùqR¬â–;VÃ+JÊJz¨jW7 Ïs1£ ü)SjŇl ¾7cÚ©úûKüF 30ÔS‘_Í~lŽ€äS<ÎÓœ±#9ªü^Ä_[/o ?™ªÁz©«¼*WbjªÉƒâžÕ7Fq×f‘ˆAñNZv¼s¶Ù¯†›eÀEDŽà$ $V.LS±M,Su©CÖ½LÜ)eÇjM²™$TŒÓ3xHNw=*-³ÜË’$yêGZ›Ì»Ìs½w Ò©¹ù¼äûXíMZBcNvvü…I¤ó`¼´ª÷lÓQÉÎÄSµìÔfº1^™¹QKjóDÑ0Y Fzוy›•G˜úR™NãH$(Ë XT`§T0\ €{QK=8É™×cÒ¬œ=Ñ®Ò?Äbª0ßáNŠñŒb¸±¢ª€k¤ý)_ RjJÕ,ÛÔSöíæÂ€«ÜÓ÷p—·<ƒ.½=ëÐYýZiGóXoííNÛiïs/9òÄ:’:ûT ^À[Ëüœ˜s¿ªÓV‘…!üD!V0ËúQI‹F 2ºçîv£Zj®AìF K–[ænl+yEOúìˆ|Äï©©5ù<6†Ýš>Üç¯Êª×¥…ËNÍÍòwøÐè5²HZ<—èG­8ºÜRø7&7Ž•k·ÖPÒm¢” %Ló;±ÉÆ=6ïS-Ñz±{Õzþö7Õ]bqáÆy__Υʼnü5]÷ÍYí§šÞÙ!I˜ 9åÎÙ¢ëW 9J‚£©ïUí~ôß·<Œ(úzz“T‡Õ®´íKëdí å$tpz‚;Š]—=®±õ‹Þy!¸?Í$ç—Ü|?J¸O«[†iùƒ)û¿xvÅ’g˜/'9Ï(íLýrXîãlclúS7RGÌÍ,¼Îz÷4á‘ÃçVó%¬QÈþ`ƒçµ*K³J¹ ˜ ;{íH’ìs1@{Ôxo§0˜䃓¸”ÌÓ‹8LªG7@=M>œk¨ý|^µÀ„¢„XT((ìÓó÷§ân?qy™,Ù¨'\±q:£³óoœQNÙë6ˆÄ2¾ÿxàGôþ&{Baƒž58|õe=@ôøÖ§g:\ÇÍ«‡‚UæÏ·÷©§¦Ô´0¬‹â¿/`sÞ§ríålüi— ¿ho ŽÂ“Î`6Ôƒ+´¤eΖè î3š…q(yyGÙ]…7Ï·ZH™ú‡ö¥,¬O˜íY¿ÒjVEcm¦ßInÂ6ÌK2:³ùÐÿøû\KB“ϬF´`÷ÀÏÊ©wú‹ÜÜ3ºeÉË3–>¦¢Gu4.Z&å'bC^k»‡ûS–Ô£3x`g'ëË…QÌ~tµ(ÞÛTÝ5[¤µðÃun„ !¨iŠ‘azCUé`d-ÌÕý#«C¸ëNë]¦d+Ñ[½ueI1Hì{W“˜œ±ùSµáI8ž»W˜sëÌJ€{w¤žYqJE 0)f™‹þaœŽ€ò®;Ô¶¶ðÇ•²ïLâÒ*Íu_%Nix©ó5»Åù‰ßÜSLŽ£Ì¤|kЬç 7§.X‹u=é wÆ:ÓŠ„6ãaRÁN9R€ À©–n’ÄAûiþóO4ì¥Ç”œS¬9I*ܸì*ؑۘódïEaÑ’ÚÊ" 㙇¦iP$ùPŸ•G¸²ú±WvTîzQuŒ¬I/6 úWyyŽjFduËn¨þù¡z¼eR}ÝÔÿ¿ÆÈWœ*•æfÆ: á’@œ‚FåôÎÔ‰ui¤¹[hËŸ·+p;ãûÓ¡óÐþKOד7‹ŠMñ½°ã(R$†þÑŽ:ËÉ'ÔƒýêÅg«éWþKKèËŸý6<­øµLÕõ+©u¡¹ŒÀ"$x¹õ N%œ ŸZh…+¾4R\ÅV‡œÊqŠ›iªÃ4ž˜ta½L&7^e ü*Âù¶85F ۚ຀+Êž[°Àx€})2_ße”cïH„ƒìD£âsQg¹’áÃHF˜¦j~Þ.X\œgW‰÷Ú‰éW.¢·šDX‚óÈp''ÐWÐv6Ö:F—mkk(’29Œ ä9?{áO¼¦Î͈Ôdš¯Mªø³³ä„d-¥ëedXf<Ñž‡ºÕ‰îâ[fœ0d9ê´u‚ÝÄ畺’:ÿæ¥Ù]$цIïR£9%²iÀ;œ×M É"«(l!çµE$AÐ2*<0¬r?,ŽCŸ²ÝIð‹äÅaüm1›Žo•X•‡’ O²ŒþdІ€´^:Œ² þêé œñî_zmdia°4åxIœ®Çzq¤æ@£ ¢ZtFKyŽÊŽéÆ/ã'È¿¿íR®¤… º±VFU\±îhdÚlQùC6ã­ ¸ŒÀFüÊ{ŽÔÒ¢ Âô¥WK.Áõ¨þöÅ of  J+ÃHžd!‡çRP1_6ÕÓ!·Îk¸zR';ã8ÆÍËŸuaXóÜžõ½ë¡rqÚ‰[éVŠ9sü¢¼ÀÄö4ûXxñP®¬$µOÊN)„hXââëð¥X‘½Ì\«‡RG¨ÚšD.À # "$æË©þf,RS;œTR-cºðâ‚zŽÞÕd‹@TŸ›Ä% ÅA¸Ñ-m¤ñd•Õ;ƒNè%"%"<íÍÖ¸9 ¶Û×Q@¸ÊZ5'}·ŽÅk 1 ~¹§UVó/|Ó»0XŽØ¡RÜYSÊ$ †*Ýô«]Ÿéw¡c»Si/ù·Lü{|è•ÐHìd¹…•Ô!`Àä` ¤¦£NòÔ¸îAÏähãëZmÓ/$Æ,lEÇçÒˆ[‹w@é*Íî„]¼”ÃjΪ3° rÝÝ0 ?(ÿ(¡²Dòï+¼‡üÇ5NNS(¦Vea‡ØÒC«“ƒÒš©+¾7jñÈ9 \-šI4Í8óK)$¬øÇ8”‚ê+دb•žë ìjT—ü¯Ísêj<·—2¿šLEÚ¢Ëyá«t;âÌ¡”ìiAŽ65Äfrr=éבJ½úÓUãÒ™Ý\`dÕ!Ÿ (éI¤È¬ÈBêÉÃ|]¨i1.Ÿ{)—O'`rÍý>Þ߇½Ú^5´—OK9¹t;Û›Ó9ôö GWº’s#P{‚Šiš™2–2n74KQ×®íà† b\Êã)ž£ÿ8§ocÕî4ãX]Ø ¤lqSì,u })ÛËâ…æ¡ÎMY´¥”YòÎ’$½Ãtǵ”HgåÎFØëBu/âØ­«œÊX§-mnZ4æ_ @·_¦˜yÃdzÔ Ù‡‘2®àþšMÝÕÜq“i;ÑÛ{šÀî®$¼Ö.ïe`Í4Î䎇$š˜—0ZÇÏ+ OR~U[–8Ä›*„ôášLŒTf”7\ã¯qÜæ¬ú >&™+ ÏŠGä?½X,¤sMO”èrÕ{± åæ~ûЙ/ü¤|Þ¼Õt™€ ý½(icËökƽQç+ýè8w6Í·v,]èšglÓ’(o²iÃ!^›“…©¥!宕.@Á ú D†X$)Ô^•Õ (%vö5'O·77Ñ[’í¿Ã¿åWcn*P;b£Éo²˜¥ Õ£æ¢îÉæƒ=± Ó­0Ñc]ŽNR …äî£4ÿñ,ÆžôQŸÆ•s⧃ò'vÆæ‘o,6«M†§$vëköˆûÞÕXºC‰\4Ðw>õViYäæ?…M²¾†×™ÞßÅ”‡ž‚˜º¼’yŒòÒ?\v§l5õ·-ou–@2„ Áô¤K¨É<þ#l£ì¨=*DZŒa1"±nÛT;™Yù”äc©¦nãzr;Û»XÝmçtGeføŠRÞø°x°øÙ—¥F$ö§Iƒ#•aÜ•s¯j3[Gk,‹…!ƒ¨!Ž0M6š¥Ú®9•Ïù…H][š6AÊøØƒ¶hk1 nH©Y¯AÈ¥É( 2Oj‹üÂÜûÓ~<‘MÉ$d«}†½IÎTÞ‘ÌÝ€Í,Æ tzWŽÃjõx W±½6û) ïCæC3ý*uººCÊäØzS£¦+½Åz½NG ’ÄÒ"åW­zÖÊòöF[;I®]FJÃrqœzL‘OòÜA$'ÒE+úÒbæ™ÊÄ¥ÈëÊ3ŠpÃ"œ2àúSM0ÝH>¸§"IHÚ2ß èœ?ÅR6‘as‚ÇćƤÚjpÈü’ÿ-±œž•cÒÛšct¤tòF;ëZö‚’ÞYÉ5Àå›–1Ñt{~žúÃOŠÞduÃF9p ÇAµdÌÌÙ$äûÒ2{×¹«…°iYÍvŸ‚òîÙ As$jNp¬@Ï­:ú®¤ë†»sñÑ„ÕfŸK[‰\xŠ9[«­ }AåRß­6Ò¬ƒÑ½*uÌt…“UUo÷øÐ“åèk¢5Q–Þ†]Ü< @;öÚ†¹Îüß©a‰œ€:Ñt<œÀmRÑ :6$ zhš3¾ãÖŒèÐI⼫Í*cöš×4Ñm/× \DçÎÝ>¿:V™¦½âsLþvÏSK¹ÓÄd¬Š2½=¨-Ü&€Æ ÓúMÛØju…eò•Ãc=Á«„zæ›( 3öa‘øŠœ£ñ"‘dOêS‘TÝnwŠíbW*[Ìj×9\4„Ÿsš`ιÙI>¦‘ÌÇÓàiÅÈÆÃ©ô¥=ÉQ„<¾ýÍ‹V‰,2‰›ƒ¶ÿe}è\²É4†Y\»ž¤÷¦FI¥ä×(\ã–Q¾iëIùÔÄÇ̽=ÅJF(…˜ç=<ïµ4Icè)´iÁF9ÚŸ¯W œíLIÎàxhI÷Ú—:¯ojëžl"õ¥ãlW†Ev½Šõq”0Á¯*ò®3šî7¯b¼HØ™9Š3Þ†—]+ÝëÄf›ðÐ7>:t¯ç"ºK7M«‰£eIß®Ni`žb(Ž‘¥Ëªê0Û åFl3zzÕö÷ƒ'°d’ÎÐîÑ¡óíVŽÑíáÔ§¿µ€E#(F¸=wøt­<À rŸ>Û†èhaÓ4‰YÄúM£:Ÿ½çôª¿hz2i\ÖzJýiä žl÷'Ê;zV{.‹ue©Co6”Ë,ê5䑜~´»è¡™1²\BLl¬¸#¾[Õ^KËD·ä•– Ràïò5[´׋Ÿ²75£hBw °`^rªª7%‰Û¥m Éai¼k•qñ÷¤¬æX9úàâ‡øòËrÑ«·ÜS°,Ìïõ…]¾ÉŒõ§Ú9¹™rO½/Ê(^¹x¶ZcLTlóCª7ñHåwÙ~c“ø÷¢‹®Øhü²^LU‚€${ãÐU¦;« CKÒKvY²3íïU¾-O€µ §ì„`~¿µb,q]  ó^ ¤õÅ%×~làSbâ%8çJZÌq°§Îý«½éÈä(nTö÷¤d¶ì1íEô‰´ÈY¾½.~ËŸ0Ø¢WÚÕƒØKk I'2/*½ÿµµˆºÃ ÛnqŸ…N³Ñ×–âr@=ÓâhGi1Ú\Ž@LlœÀÏýûÕZTól(™·2KÈ€š7¤ZÜ—òªÇr}*Ã4 áEÂã¨aŒ³rr–ùTý:Ê{{‘7:ù×€ç?µyFÞ:r¨ûAÆÔ5/à{ðY™vÇèi•ôpijaçLò scçU««õºu^P…sÔüé¤çnÔð™2žSïR’Y-ÔÍ­õSŠƒq4·R™grîq¿Â™å¥Ío4)I"È9”‘±ÈзCO%»ý§R·½x’ŽzŠk¦[ê,$œÍÔFzSÓð¼–ŠÜ—ŸÁuùÐæ´‘±Ö‡Èí ü®<­¸4ðô¯b£MvÜ{ÔagÏ:²»Fá^ÔHC¸ÁÈ5âÙ»Rá…ç‘b… »œI®Ïm%µÃE×dŽ÷PyP•ˆyP½~t.Öú÷L—ĵŸ ÍÌc;«|GïVéø×IÔ8CP³ºg¶¼’‹)`íÛ_\Vdê6®D¸Œ©õ®€3Ò¡Þ£»¡ËŽ•£+ʤc=jt *Xé\汚ív»Ö¤*ƒzHæR­¾TíVËWVÎÌ3IÖ­Ò{˜¯7†ß‘ÿb«Ã-]‰ú²ïîj%´@1,À»V>É¥@ÇÊ;{Õ,×Ãþ`æ•Ô,®˜`P"aÔ~4ØÃs*ýgÅXº¨+Æ™×5U}J&.òëéU©|7ŸœŒPjŧJ‚ÁP›&¸-£¾¼ŠÖBB;Åzß@ðu‰ÿ öUÿ©AþÕã‚y—ùz’ç·4xýÍ48JâÞ³ÝÆñ²ž¿1\þFÂdQð&¸¼:¢Us8p§%yqÍD›À¹„ÃÕ¨aŠ}t¹¤‡Í*ÆÌÓ³Ù%½·ˆ²`@;`b¢€ ß­)”¨Öº±–=6§^ÜJœ½Oojˆmšþiɧä `Ê¡ËkâDÈ~£4›kqÎ2}MHn†¤“ëK¯É~rv«¤zmRôû/®NÑ’ÙÆØõ«v‘Ão4bŒ¤ƒÌjÅiÁZ§8h¤†UnªX‚*Ô8wAE°Ã 72?~Qý4a-bDåD =8<8ü¼Ê¹®¬‘±åW }{sóïœc™%HF]€ß$7VïŽtq¸4ͤH$Ê‚9{S÷VÞZOk:†ŽxÚ7ªF |—}a%Ž¥uc9ĶҴ-ñSÚ•a¬jú%Ï‹¦_Ëj[r¼­ñS±ùŠºX}&NácÕ­‡7y¡è~*cò©òq7p·Ú}àW”;€zìzPƒ¬Ü¯4×wO)äbwùÕ³„ïÍñ ¾ç˜ûö­d.ZdL’4ˆ3̘ÏÏ?Ú¡OòÄéÈ@ Œª»w§nÐ;s…Û:¬Ýpí´„¤W“²°ÈÚªºæ‰¢Â“^xM¤ª´oœœg¡Þ«9ÎkŠA+Ày‰õíIsʾæ¼P2I0«}¡JX•}étÜ™ŠCL@À÷§Ê†õÞœ„æ`½ŽÕ8UéÓjiñƒEìgg´Œg¿…Dö’ÂÍžaŠon¨™•<DZíTÛ†g’3±êE?¦k—ºK*³­ÇÜcºcûUž^72Ûôè€$`¼ƒÌ¿.•N#šm;Á# ƒl_Ð"ðtoìÓ1mý:Óóªæ«¥Km+Ü[»K%˜1ËïBªÃvüè½½Ú$(¼Ã`;Ñ=*OUGt ~õc¡.R-òÕל³5E¸¿\Û!•H<Ù!†*-å赃Åå/’â‘§ ¯ÞSî)‹`ìÄóáhŒsª„üéØùcœ\)äaö±Ñ‡½ñ/6v5êã•B¦¡Íu$¢~R'@z‚jÚò´Š×,TôØt¦RyFˆI=êËg:ÛGIgù»ï¹¯Kq ˆÎO/o5»Ap9”ãïzÐ ¥’)W ©áy ÄQÔ©;o¸©¶ŒV =EXm.9"'CÞ“,_eãÝÿ#B%Óœ¹RJ‘ëPní<ºc'¢ý_8b<§jŒ` 2NsÓOM¹µ·µ¶HÀö&(‡7RwͳXæ˜Û1 H…O)Áõý«—Z ÝŸ,ɉ”ŽnQö‡Ê¢%Æ2¬q؃\º=¤ˆ‡ÌFÃß­ ‹Ç2•<2¸ëßáD€oïHÎv©qá·0ô¦®°Jdv¨ìÙ4v4‚…nõÂ3µOµÑ/ï#ñ­àåŒôg8ž}HµÌê¤nBÜÔNQ€0)²7£º < %Ó 1ì£ØïûV—ÁÓEuvÑ®á†p}Gû5§ØY$@KËAD1æ'½z‡Ý¯+³æ#­7¦C*ÜK,’mŒýè¡Î*%ÌKãO½6×±”aºã£P{Öõ  MÃöÖÚÚJ–è‡ÔgG!H_BK±ÔM´S¸ß>¢ˆ–„Ç¡ªOñiž×Àt\ž²¹ËÝ0)á—sïRˆ< LR•,7ÀÜÐÙo.ç›ù“ÈTö-LåÁÂàüiÌ× v›„LŒW°'¥:Ò¬Š;zu¤ cÔΙW¹Ÿ‚it+‚s‘K½”‘Éžù¨i!C•©×qEr%—˜éËR¡âƒPa:´–ò_´žøî*eþ ·b)—ê{Õ|ÈdbBá{R…p¸QÔשø$Áäc·lÓÑΪXÉ2;˜Ú<r¾Õw‚D$«:Ž-ħÃfs·jj¾gqÈTwÞ¥ŒÍx\K`6G¡§>¹ÌRU»×Æe¿=cª[Gi!•”…S”ÎííUɉ+ÌF|¼Ç'W‡¯§²ÔYb““ÆB§`zn:ü+š•ô·s´’¸fìÜ Ò„Ér|6B9‰èju¼…Q%bzz и|+]ÅΡ˜¨Rp+FÓd¥U8R£ïl ´ÀÞ_µ½k®$(„ês¿Ëõ§sŽÕÜ⸠íI–E@ f›É2©åa–~˜Ç¯ûí^–U‰09Šèzc5âà©Áô ÷é4¡•¨Í”†à¬£•†ç'§û…Ê© ¬Ž0/7^µ ÔÀ/•¡ÜC¦M`m]æcöpÃ>¹í𧾚/­I/‡q –.:‘‘Þµx5‚ÿæõ©¡ÖX³Ù…eHAÒÞgÿÒNUæÃ&³Ý>úkW/ÍøÑ˜8÷S† áhb•]QþË¡#í±Ç¦>uO¤3o€)ä¿7n”õ{lû׫կnQÓ4žbOLT[™§,pÄXwaëRӘƼàÆø¥W…s8¤4¼­ŒS€äf¦é×0ÚßÃ<ñ—Ž3ÌBÉí×ßNïŠK·ò,ð¾®Ûþ±Ï­¹—ÅYJЃҜMN8HñFG¨4{MžI#{Y«ž\ôÁ£òCàÆ”ƃß!e`6ªôVs˪Ûòr$‚GœrÎß—Î^Mò€àŸn”G‡í¦ðçR›?÷Q¶6gUº˜_šßîš×_Êr= VuË›x"·R¬0¨Ã;‡¹ö¡Ú7Ü]Å,vpk å_wlä“·J3ü@L4%O±©¶.ádèò²²‡c]ŠökÝz×PkÀsš»ºWÚng(¼Ç™€Ü*îk‘Mâì)Ü•óA¯9™²kÔ’ÜšPÇjîH\goJå{˜¦’²DÎ@`Niy®dç­%'Š2T¾NzT„º\䊑7*Çž`AéQA%H¤„ˆ³’zšxl06ÌÇì?Jb2L¬; {5ì׌ã½93ɱør`ÆÀ¶:ŸjvY9ÇZe>ÖAÜQ {—çóù±ß½_þo‰ãâJyVÝÈ ×9´Ç}ÌT‚ØõT¸¼óF«ŸaN2†z× `ïÚºFÔÌs¯!åó f£:ÉqÊßÔÓq]•?U¸R÷Xôõ¤HŒi )Ô nÆôTy )¿¿J•1"åTmI•Ý#$œçm곫ˆÚè«3 9ÇʪڢçNzyHÛU[Ù %S?xU~äùÍX¸/_Ó4[›ÆÔ„äÊFѨ`0Ns¾}?:ÓtÞ%Ð55?U½ÝqÌ®Œ¤~U`†X݆Em³µQ>¡èÜ™®Iù1ý«v›8=GzEyו9ÏAÖ˜ñ¡2çÇ ¥ªò¨QÚ»ñÞ¼Oµ"YV0 w¤‡faÊê)jŸ8¼Rçºõ ÊÁ¥`ÙNEp¢“’2k +ÌB©'µ0ן$\ÇãYÄ%A]‰¦õ(2…¤EïÊÝ{†åhæÏœ”8‘ê;Ú®vÜ@b=E±A+×ãëD授VxeÆUÐäñ¨–«gk,s lŒŠDñ†ŒŒUjúÙÙ%‚ á,;…gªëz¾»º-½½¼#žI7&L·\ôùÕ¬[+ Hêÿ:…{ai3)ñB°»‚jĺlÊŠ‘:Ë),²¹R1žB°4 åÕ™€õ¦"Pw=jÑÃVPKÀþCb1þ ôø{Ö³¥ÜF“Gæt"‰ë:&™¯éÍg¨AÌRA³Æ}Tö¬+Š8Vÿ‡o¼9ÿjçùWJ¸ì}µXùIÎçÖ¤ÍÕí€q‰$ {ZàEõ0§J÷(çÜ u®šlÅÎÀ¾áz ^v®×Žqµ$}¡JÈÎ+Äàf¢9ØþUÔš2åã`{T°6ZzÞ$™å$/`:šŸ†×½É0)ì:ŸíD ·µ±NKxU=[©?:Å>¨ö÷ªl2Aõ¦/›ÏjoN²š)¾½!(pB¨ô÷¤›à™dg>¤æŒéÞé(·Ùž>Sî= {]Ò¤â-AgiÚrÅ\êNýMB¼‡Š8^oí5„–ÍWêÒ‚Ã z|ˆïE4Ž:¶ºÂêvMm Çóa<ËñÇQùÑË øu«O­"Ü:«éD¥Rãs¹êj+ÅÊÙ]Çé@õ-BÕ/ &@c·Þ«ºÔw‘¥Ô¡¸lweô¡vÒ,O—séSä±:Ü‘[Z@r¤4³`f5ôæ¬ëeqõpË»œzf‰èÿXH¬ñ0HÇòݺãÒŠrå†z ]zšhLj3½uÐ3n3NW6Óò4›ì´ê7'"—¾k„dbºzRBàW3‡"Ò”|0v¯ '~´çC\VËêg4ªõ{4Ú>N)Êõ%³Šê®É5ÓÒ’N­6ççf9è)e˜ ‘‘ê)dʃšqT(Àª½}k?Âøâi–ßQSlÀ¹Žè~<Àû«lÕ-úŒP}6Ò7¿h\°“í&½ZíÚHÜBø1öÏQKšÓÆl7ÙîjÞŸ @›žÕKy¬ïÞÐ3xy°N@=€«*;‡dRáÆôýsjõxŒŒR<$²7_zc£EgpeIKaïš9 pæ…꣮F Rõ Y’ödx‹*žPsÖ±ù¬î ™¤•ÁsÝM `yÊõÏOz—õv¶¸U‘w85bÓ…ÝäÁr‚àl:ô­.ÇM–(ÇŠÊð75fw"Ý9ÈÎ}EFºµ‚öÍí®áI q†Gªp/[Oõ„Õ~C!aŸŸZ¢ñ‰·2ܤ³&v pBŽÃ¥T®mÖ²g|`Šdt¯W«Õ¹®×³“I',µâpk…‹l¢Ÿ“Fº¶câÃÊ_|sƒûÓFÁùHeûŠ~ÓK»”frˆæ¦jÕ¥Z-¬© r2ÇÞ¦j¯-$;€7ê³%ìˆØê=ë<½fa拗ͳPK†Hn|I¢gìŽÔÔ¼Ak²µ¼§>ÀþôFÎ&D”!PØ|Å·²‚x•¾Üd5OhäP\=*é­}¦-²63(sTWA–Ü#-ŸCš=¢Û][^$±yP Hqéñ«i*Sœºæ¡<¼íʽ=}j“ªGͨM09Vcò¡åsÐRní åŽD( ‡ÁÛ Ñ®‘m¯‚ –_)÷ô«¸q¿\Ó:úׯÈ+‚==kʲc$}3O”Ì\ŽM‡zWJõ13žRãßÖ˜e‘³ÍåML9á]æÛjèéHrü§ÏÌ„'ÄíM™°d`ÃÚ‘u"$<ÌÀ0éïB†¡ Ÿ¨åbŒ$ÅâY)pà®{Ò0'+ÜÍž´¢v¦$yÐ_0Ǧâ‘jò¼‡9@qR±Þ›bÀäêHfØÒÎý tt¯)–Œ³ìp)Ð00;Wi%¹Nôþ|‘ Ò[Ïð¹I#`èè äú–Îþ-w‡,ux±‹˜VBÝo¼>G#åBO4kqÏÈ÷õn¶’ ›a"Ÿ,ƒ;Ó‘Œ”; éK•G†H=¨sZ a³œûÔëbZÇít4¬°|ö§+Ô™‘ êjÊöi,áqïµt°k ‚é œl)1ó`†7§¡óa€jI€“„Ë|LÔ®Ýr¶AQÐÔÌíʽh—%¸$±êjÁ¤!ºšWÆB(‰ÿJ0ñ3E¿QÖªzÖ˜© žDæ8*N7õ“¼wnÌ$.Ä1ضqCõHŠG”rg8æÛ=*½skÎ ØÕâÖÔ‹u^_²˜ü©è×Á<å¹E²»2Œc8õëRçeåæ,1éLÿ PÜ8“Ø:ú«‹À¥râVß™sËÔŠ÷ÖðÇ+´É˜‘œ®w ôªœwÖó©2;·ÝÎÿ…Ò4ØDë5ʇ`vNÃãBø¢OЧ9ÎÃÊ)6‹œ`àŽ‡Ò®–³x‘E1Ø‘æø÷©Ä¹¦žNS¶ôâ0uæ±^¤ÜÃ}«¬N6¦äŒ¿.[u÷¥® £R©œÉãØ(ßjusÞ“Í’@¤²#m"+|EÕ&’¨µþ[²ä‘C û‘Ï3sSC't’é<Ár˜š;¦êQÛÊ-¥`"}'ìš±¡Pv5Ãq:ôÊœæ™IðIc·§¥IWÅ(WkÝñMÈÅ~æsPn É,^2ÙÍN##cJBH4ªõpçµqIå$ŒSxKÛÒœÐ|éUµ}ñ ªðÆ£¤ê7q[¥“øèó8UýFNà ?÷QOŠ4ðè4æjO1l¸ö=þ=*ÑÂ÷Mu¢}mäŒD\áœÇê ?άk2r®7ÏJp°Û¾kŠŠ£n•î`”d{T[–˜,Y]·Ç÷§maxbÄ’bsð¯Iyoq,9zæ _jpC¶qÒ›³Ÿë('LNTŠ'-ÔÐ f•cS¶XãJ„u«B|’†ö]ê·ÅzN¡®él4-HØ\nZ1°›Û›ªŸ†Þ¾µóÖ¥cw¦êRÙß[ÉÄg’ úû~ôÊHã;ïÖ‡•³F´-i!²’‰ü? ²¤ïå?Øþµ"÷ŠÄQ‘jZvÆÍöT~æ„ÚÜê½ß‹u;4qb œg°ÿ~•nà[ø-ø‚îÊIBˆ‡.OVSÓã‚kI³gKÆ@|¬¹#÷¤k7sÚG >lÅzЦê×JÄE.[rØéUíZ é„ÿHóXº_ùlžÄPæ;dv¦ÄÛã5ÂêÓ¢cµJ~•ØðÑr‘Ò”<­ÓSG´µ¼–QqÍ”€õýªÁ† -S#»y¿Z’$DE =ÅÕlÞmS˜+¨%½;ThôÉ™ ž6+ÔŠãY_E–äRuqV.Ô-­bž+Ö¼¤gÙNÛoóëG¦wu$ŽÕ@Ö5¹»+ ÿ)Žþ¦ª‡mˆ9èhN¿o⥨ÇÙæý¨UžŽn®•ò ØÕÖN[d-Ë“ØBqõ†21åýN³ðã*ó|hÔrG!*ezM³R1òóÚöÁqÈ:õÕ×–Îõ‡ñ¦¤$âÛ˜ÔäÀ%˜9ù“Q4y|;žywæÛ˜õ iòIVW CK¾Ð¯oµY/b’Y9p ì z{TÛ^ÔSƒQ¸ln-a+2€3±5%¤D‰ ¬$(ÏsLÈ¥‡òÿ:U³ç™HÁ$ײz½µxôÚ¸½+¹¤“ƒÓjBMÙ¶qÖœ DíÊ™÷ªæªŽ\±€j±u}b¨CŸQÒ†ýoþ`‡>Sý*Pyd<‘‚ßµXQ½RÚÊÀrùKƒ»J#¤JÎ$vÀbB|š"îŠØØŸJ[]%¥œ—ý„Àüª]³‰ YU댂iìŠã<™®ûÆŸXÞH¹ùHÇ­5È®#Ÿ¡ã¸§Ç°¯RYùHÏzéÜdRÚ7NQ"挌dzÓ&RJ’3NF’¼ly6SŒŠmòX îw¢vv‚IHœÃ²c9«¶Š[¦…© `ú³V­Um"褨$µùÔŒòŸê¦éÆ9aYƒ«e`zƒSö¯ 0wµ4ʰÄÌ ì3^‚O>rœ»Ó¹¡z•‰¹uh”n¤œPöÒ’4 3\ç” NÚæÒ åŒ:TN*yAÊaDÊÃð#÷ª´7T†¦ÜqF™%õÃd ò ;»v°ÍgV½Öõyõ+ù9æ”ôvQì(qÁ;ÔNRKrç=©Øã*3!ɧN1ƒÒ¥ÙÜ-¨sˆu埳JŒ0ºFF ç!”ïžÄÔ8O‹Ë -C]UåG'Qÿë~µg{ø®IµšÃî*¹}kmâ‰;©=è­Ètùn9<ÕBéH´0 Œìªj$¬²¹9;ûS–$É<²ØQSÈªÈ +|ûTí.oôÿ™Hýÿj;i$·Â%ßÈ[—á\yðÄg½3{qr´¿L èSÝù³rû±ÍGw’Cçb}©\Īƒ÷F*Dz¥ì’ZG;x.1ƒ¾>”5ää>`qê)*J<ê õïPî4다æ¶&ðú£ŸOˆÛiÑ[¨#Žì@ïH–Î>|œ“︦g·B¼È£bj-²‘°?•=l¿U&bÁFX“zŸ§êÖ·P­Í»‰-ß`ã¨øŠ3™‚½E¾0ÛÁ%ħ–4RÌ}5òWÖ¤Ôµk­F\™.fy[âÄŸÞ­l¿(HÙ‡RkFСšH7)ûGô«l ÉŒÚ)+¹®Ë'3”žæ…q,Ri1ç â3±ørï]K›g8Y3ò5,~˜4–šNÄógjéeëÙ¼6Ú»^8¤²,ˆQ†Aë\Ž(âNHוitÔãžåëUfѯ´Ù¢RDƒÌ£=HíT5X RXö§C¦oå°? uùš"¡c@‘¯*ŽÂ˜¸‚%‰±Ž£±gJŽYô×¼šUUŒ6A'mê~Ÿqàæ‚e“×qñfxí¤¶X.#YîA®ØÛ[[DRÖ3DçäŒûdíS<î3KT ÀÛÚžW¨ò¡çµßÒœ·¶D9#™ªx·޽ý)™­üI3æls2ޏõ¦ º²e†ô{†¸sëóýnìeèõ§Ã×ýâ×­XYj6Â#cÔ`§°öö¬òöÎk)ÌRŒçì°èÔìP POY†0z`Tè#U@£Ú¬\:±¾£!lhŠ}Á¢Wv¸cV¾k­>K¹H·s”ŒýÏo…^:ŒŠñ¯;ƒ\TTQ]ë\zjHCuéLýUPtÈô¡ÜC—@œ`;ÿÔ+>½f¶µ3"sDžgnê=qéYf¿®>§|H•¾«"%ßz X6ã¾õÊ⪨À®×Žâ˜˜“Ðô©V“¥ÎJ+E–•âÙò½U—bìkCá VçTÒå†âÚC=»×|² t?æ¢×ÚkÝ¢sÀìPäcj{¥ÞF‡’ÍÀõÆßQø†ÖkE-sÆR¾Hø|ERdb[ ¹ì.;G}æléjdq¤IÉ…Ô¼W±ø×UFrIøSñHEfh—Vöú‹K9 ˜Žûj†²ó3HÇs½C¹ÜÆÏZˆvïIõÉ®0ùøÒ<Ç~m«¸ÈÜf›\´¹gú•«¼Gù¯€¹ìk¶š¼S7ƒtRöoºßÚ¦ÍV…«‹i$yŽ"mÛ=ªÈ– ƒ2yû½ˆ¤\MܧòœyþÔÜEmm–Ö–(× QеØ<1ØÅl æø÷ªÿ&£sÁú¥¾—n×s@bHÕ€'›ÊNI`IùV+Ã\rˬE5±Œà@ÈAo|ôÇ´ÝD°•Jà(ÿIvϹ« ½†gX£P©ŽÝ¬§J¶žÿ.EÏføÓÖhÛ’E)ŽÞ´ÚÚÌ'ñI @:•GÖô]JöâØÁe3„Œî±±ê}‡µKᾚyg}NÊTEPÈCg¯åG›ƒáPE½Ü‘ž¸ý1LÝpÌ¢——¡Î ¿Ó®ì—2Ây}Fø¨Én$·V$‚ޔхÓenj~ w–&nN7iØlng/á `½w¤Éi9w§ý(Çü9ÝÔn¬ØùŸ £Òxvð,¨HÐrªŽÂƒÞÍË’"«·²$ ¤ƒ˜Pøxe²£z ’²l—·µL‚n|ï’(¶›3F~³Ý|ýE^#h Ü2ó’2£¶;%a+I0i>ÈÁ嫤oÌ0:S‡cIPF{šUqŽ1<΀ÆO½F›T‚ÂÏž”ÎGWø 6·$ñ=Ê‘ŒUÎß:§ÜqÖ ÒøóävEØ•; ÒJ .Ç¿¡ªðDWrêÚ"¬R /5¶p¬:–_CíÓÓß6\ô®czLy-ÍœzûÓú×CPJ~fr7è+‘;Ãpѱ% È$ôeÑ„­v#æ"ƒ'ÃûÖÁÃÚ›±Óí£[x£Qá ïêIîMX› sÕâõa†I[l‡Ö³*o®iNÎ0ñ¿8ÎÝv?­gÐÆQO0½GZ{jõ\tž±Ô4 {ù'%“›!HåÙˆôöõ¤\ð½¬_bæ_˜„Ϥ¤YÄì~"š‹L–gU‹|ž¤t£SiÒG§ºÀäÆÀfƒxWq‚’DëŸU¡ÍœÄ’)€ë,Äù €>4£ž« m½p¶kØîNaHE%¶#~•ðÊÓa”€£oz 5ÔñÞá+!¥±Öç–J¬@ žŸSõ›;‹˜À…HEórެi:HÒÈÿ›Ãû Ó›ØÔ>~gi“Ø ÛÌ ÿ0¦ƒ%­ëx,ÏõëE$œº PŒƒëA®­ü\ר¨LðÌ®£Ì*ËÙU•6=Ç¥³ºVPsþ”V'†ò?Að=Ç•klÚn©mpˆ©"¸Ïʵ;øDƒz-²ÂŒAÙŽMGðBd·VüªpÄzP-n>s&wíB§¶‹“• ,NªïŒE4;nôôåÊìr{™üªÄÖÛF±DB¨ûD÷>µcˆj6ùPËâ(<à ŒŠ±Mo`ËÈ,àSè#4ö8£>H|«·#iî 9¢è3ên'u1Ú)Ýÿ¨úïV+Í>8­|8£ ¨6©zž“%ç–%Ã)ÈcÐPÉ48aáCܼGZx€ÀêF A³@d+Ê2»ÕûDBü¥”Øa•†CÛIÖø:Îß‹ç*qbq*ÂOLŒ‘ŸéÎh­ÄÈ–f8ÔÀQбèÆ;M2 Xs?œ¶»9s¸©bæ@À1É5 _»‡ø_$ЬÌÔŸ»êGûïUûXQ˜<„Îàÿz«ra£RF¡rÏ÷©ºiè#oSW[8Ö+s MÛÒŒ¶±g¤ZÁ¡2£Ë² ûG×oJj[ØË Kæ220r ¾¾Y3Ëåö ³Ldœ±è*2ÜËHŠûC»ŠüÊÜUÃ8êùÝ}ÖtœK¨^µíýÉ–CÔ¶Qè=F¼ã .ZÀÅaS×8ñö§ÛPñÊɪ»öÏ­Óµ+ Onµ]âÞ2’òÝôm5¼;pq<‰±ÿHÿ/¯¯Ã­Ú™~`Þ\â•Ë¿ZpïLN[” =zÓ!][rqNx|ÎŒ~ýÿ¾µaÓæ6–ü„d¶äŽ£Ú‹ØjŸSg“ †›þµmÐ~c¸¿·Òõ(Uc‘ŠýjGÇ(Á##µwÔôu¾Óeü­ÈLn7å8ØíÔ{WÏW³^ÏpÂòGgRT«mÊ~ªDÌrvÛ+“œWX8„Èòާ Ô8c'ƒì‰ûþ;PÍ{Qk)cŽ4Y d°'MN ‡™Z6ô;ŠvdYÛìÍžv?•Gº×¯¥QáʱEAûй.î¥9’yâÆšÍ!· ò°eºÙÆpà ë™Í} §šßaýôøW¾¦³ÿËÉ0î{­Õ´µŠt,BF2¾ú×t¨`{ÔH°y<çß늲,EÛ¤ÐýOI¼}íáæŒžbßá@.ã1XÎ °\F ð '³:TÆýqDባ‹”ô™C2SÊ}hL0“3È ÔÈ¥’ÖL¶Z#±Å…ŠêÛ0éëF,fHωq Ž!Ôš+c{üA¹9g ¾ƒ·Îµ8ÜϦÛKÝâR~8¨ïaÊÃÿ4öê²ZUS¿CéB£¸ŠwÄüÀ6*Ê3Ï’ÇzsIåëP$…Š0 æ#j=cv,tÈ­á€xG;±ïì=+ÍróDyÎXê·-ôANpÊÇñ£wrÛq+8 ä|h%Ó(,¤õÚ§ðÖ½ü:cerüÖnsëáßáê>uv¹]) ¬2ÜUiá6÷M£öhmí‘$1U}RÖÝRGÝäPs†j¹Ô¹d?îÞ—.½­+…¶º&7 £õ#5ѨÝ]©7w/<‹±rrHì+†ùr±»r¦rI(„Z‘…¹Ñù—¸õ«¨Crž,2´ Ý~4^øî¼±Ÿ°7qÞ«œCupgHãòú÷5MÕX¬–’cÌ OÜSü÷lXý£±«Ÿ3 ³Eu ¶Ñ`[~a5Û,]z·öª¬ÒÜêm{w9šWßœŸÓÐR­¸º5•ì —Å öoŠúÑ¿ŽdçfëÓÞ¢¼®Ò=Jï9`3R€Æ 8Å(^˜Ç‘r}M!ﮤ3¾© w a>#jоŒu»8¦8õ(ù®eS¼‡¢¹ýÈÈùÖÁy­¥”êÅlî¹íR›Zb 2Æã#—¿¥Uµn&¹”¼aüÿ¥vüMg¼Kªxö¢×Ÿíføõý*¾‘ÃqßÍßãL˧«¦y~t(Í=»˜Ës/¿qQŽä0=*e­ç) )Û³T‹Rh¢{h$#˜a˜vÔµàr3MË" ÜÓPÎ$bÅJíI “\(¤JQÊF1¶ô@ß[r…Væl}+Ér_˜OéM©ëÖv"O O*Æ_åÉÅ} Péö0i6D•·Eœ;dúžµ@ã>ŠãP[ðž¸vOë¿ú¥¿Žn_1¾:R’ñ_¼¨*1Ž ŒïDSLX—u爌FÀUŸL·ºH^l‹ûÕ7VSq},»•Îà(è ã½FuÀŸjõxô¦ù°kƒ !#¡ÜûR÷-·Jë/0Å0IŒù˜ïVßK€—Ö Ìô‹­6ÖôFÓEÌ2{ã­rÎÎLÛCÈÌ79͆ÍXª|–Jm ©Á]Á>µIâÔEáéÝã_²*±0éTÛ+~lG-âß•¶Å†š6äpppG¥&öÃÃ"d‘ÔPÙ-à (<ãó¢–<Ò[‰Z3ƒ÷ˆÛýj{éKƒ%†ø= V5éç’e³Teé̽ Õzàô:pŒœÜDËžþóý«VÓ€MsŽ@W ÔõC”µPúØgðœkIz¯5ô7Ê|Îüøö VA$—Ì–ó8çe*OJ7­©ÞÔ«k€ÌNÄb™šî1.ç"˜–ñáé'(ö;SÚV©4· #’ˆ2‡þ#Ò´ëõM)2Ør9Ø žÕÙæ?+0MØš®^œËâÂynëŸZ`ÝÏ$˜ ¨¾ƒ4`ñ[éÚ!DŒ›Üò¬‡ v?®Ç©™™¦Éžff;Ÿri»bkŽk{bÉcßý(gŒÉ8hØÆËЭ¶×."ncñú—cøt«¬Û^ºÀ$þa鉢ø¯W«Õãð¤ã%·•Yôî2º¶ˆ[ê25ÄcìÈwuøúþµiÒ¸¹ »Ú´ÉánÑ9m½ÇïøÔ­r;™\E(vqUÛÛ¥g2JÿëLY\™¦h@ÂÀ©—Ïg‰s1èwÚ†Ip—-üß'¦: ˆÙ#à×3Ó˜ïH‘ŠŒ¨É®/›v?­/bʬ ¶ã½CŽ`NçaSÀ=ëÄàl3^+šàW<1ÏÍÞ¤Bœ êvÉ«”é§ëzlèA\Æä“Œá†s[…•ÇŒd–B …·ÇJ]òÅqa*ºs¸Ïc@ ¶ˆÛøî¼‡|¯\oUýFÊëÆ2ò”v¡Ó"N\0'©¥&³oo¦-»¤¥ÆF@ÜŸz®ÞßÛr’±KøïAgš ¼ÊŽ© Øc;zÓe‚Œ±À®×Žâ™db}©avÆ+±‚£œã§Â”N)·î£>ÔvÝùóš–i&XbæwnŠ HÓË †´Y_¨ 0séFÄ* »ª7$ì ¹â +SÉl¿XqÕ†Ê>}ë±^O¨Hy‰ëËÐ ÇÖkiÂ31id¹DÛ ò±ýª•§ …Õ.×OÒd¼ç•îǧûöªÞ•ƲYNÿÅ-\÷?=¨áÓ"ià‚0*|T)ÎW2•“÷G_Ïð¨7 ‘Bò€ªMšLô=i‰ýœ{Òb¶Á éK#•IÒô}*Þf¼»ºA*ÊB¨nØëÄS’èv«—·b¾ÄäT)-¤ˆù€#ÔP˲…”«wÎ #ë7 nbŒŒúŸOJ`« ðk’tå\÷k ëî;Õ6ऺ…Ä`‚c©_ÅEºCi LwŒP¹g¾zÔØôÛË»!p+£îG¨©œ+du>"HYmüÙs¶Ã¢üÎ?:Óg‘¤pˆ bp¢QD¶–Â1¹êÇÔÕU±†RÓB<9;Ѫ»R£•‘~uW×õhÖüÛFy„;wnÿ… KövWcŸQE¡˜æS×¥I„£řÀ =I®¥šP¨0=úÓ©  >UháëFK‡ŽiËÛF»ø›{oVPAÁƒÜWkÕÁ€që^ Kª•Á®@Ì‘¶*lwo ³ÇŒ°Æýª;3;–f$žæ¸.ZÑÖtûHr1\’Yn'i¥ngmþÑ]¤HÀ Æk€Á)GÓµv˜™d`< òw§#Œ.ç¯éK'18 V=ö®Ò9pŲH=jv7*N;Óè]œ2îsžµ°p–ªóÚ½¼ù cÑ…hV°0¶—sÖ[(O4(síPu .Å­™L89ìMgݳX™b 'õJ«Íƒµž(Äíµ–U,Dga¶iœoœ×ˆ`«Š¡.vÚõz¸q×Ò½³/±®#½L‚ò8†?V=!Ñ¿çÐçUÈÇÆ‰ÝKo!I]A*r­Ýj½¯¥åÁB³™#ž@qM»ÐÌ69Ͻ†äÙ,7Šã+¹ã>¢¬—ZÊËmÍœêà6"œÑ᱿¶¸[›i%F˜Ä¹Ávö5@ã˜!¸Ô¥¤"8mÆ/Bç¯áÓñ¬êâÕ£æ‡1‡Z$’¤Ëã–US³/U«Æ…¨È` pnW#‘ÉÉ÷uük[‚å®l£’M¤åß›¡HyÜy›€¡×Pªó; †æ†rC<~$N®¾ ÐÉ™ܸòU …–ãW‰“Í¿—ýêÝ ìv<±?';ä¤YݿӥY´«y›OYîe—Ì@èvåŠ"±FzR.58!þX"Géʽ¾5^ÔnÕ-]æÏ†Û7Ú‡ÛIoq!¸‰ÖDNÞþâžKXî$,¾\uÅ:ð˜×A¡z…Ò@†¿ÄoÈzÑûXZÛL†ûarß¹¦¹Q†{æ‡O2€|ÛÐIùy ¾v5~ÕLŒ)̽(´ h²€r(-¤Z†¤Ü°NðÄ6ñ2F>¦‰j<'lÚ#6œê/ŠÇ/1îÇ·¿ÄÖy}u=ÜQÅ*à'P¿xúÔKOëw>þÕjŽ` °E4ËÕ³–Y$þv„ ÇMþuoÓ#½pG8ò7Öžž\f«ú؉ûž•W¹Ô¤˜bvèGQðª…×_iaógÍÈíæ?ïÞƒº¼,c‘$^ªÃž‚öhã&ç;¸¢j¢i›¹÷¥GÑlˆÛ?Q:îivså`÷5s²ŒAo†>f<ÆŒÚÝB-ròÈq\þ%:ŽVÁê}*h9Í'`OjQéµ’ââ"s†ö"¦#–\3 ‘éN²+™È¦ÉV½i`ŠP¯ ÷¤HœË·_Zꀀ(WI»^ÀÎkÕÆÁ¤ž˜Î ,t¯W«µ"Þ‹™D6°¼²žŠƒ&´îÓolìãúë(”ä8Ç©­SH¸k»X+ÿz&«Ê0* äDóÐõ¬£‹î95\D xC2úcñªÍä¶ðÛýeä3ÓÜúUr{ópÄ>Ëž¿òœ/ÝjspiUê÷jJœ“µ*’ÄíŠòW›R‰ªº\ˆÜ*ÎÊ í“Zn‘‹©ü7X¹Š©ß=j3Ü‹© l(lÒószzÐ+É%†FæF ž”ZÊé£âcåê öö¢VZž£i÷L¼î¼„0ÏN”÷ĺËLO;nsëUÛÍ5G3œ’z w§´ñaÃs €{QKáhï,o%»‰ˆAåä?e}¾­kÚf¯oZKQµV®u[ˆaͪ²2œ’§¨ôÇz‡sÅq`ö泿—NܽöìiF¯&šÄ¼B` ”ãûQΰÔ8‡‰šñîyfLŒÌ<¡zrØoWÍOZÖ4°[Z3¨ \†O€qøPÙx³S¸„E(‰?¨Ä –üI¤ÛjöÁ±'<~¤ŒÊ•¬ß[Ïg vò¬œÌIÁéþ´:ÆöÞÞÔÛ‚VVbÄãc󩉩xX!ˆaßjaÖmžÙä'¨Ù1Ôн6'¿Ö¢ñ<À·;üÿéW ™0(T®NsC.äPéÁ-Ê7å¥[Ú<æ!õ©²Ç¼'ÌX½(ü+ƒ“~qžÿï5"ÛNðÔa÷Tb‰Ä±¢íœSUN Òb·œÞÁ¬S>9[ýj›©,PV/;zž‚‹éWÂhTÊ¡ž29— aZ5¦«mn _ËeÆz¯ÃÚ¡ÜÝç|C/mŒöÂYC[llE@KUEca}ÿÖ \#Fä3dþ´"þÞÚí9'Œ1¸ø«‹oªÝ·7/@h”2w¢0ùñŠMÌBÑcku%1ŒuÞŠ[ê·³83Æì1ƧÛßâCm䥵• ˜ÝÇ1è3PoõÉ‘š×O”ŒÍ(öì*äj«¨@L%Â0ìÞâŠTy!/.Kò§pZyºmJ¨ì¬’³/BsŠ{cÐ×9H4ºõzšožUØQ§§\‘Þ»^®}©·2繤'‰Ÿ2š .OJè!†E)T³c·­]tÞ Œ¢ÜjW9F„Pž£Ý¿·ãVhÖÓM·ðl­Òîuøžÿ:'¦æâ1 ùš±i³=¤á!f«_ù°Ë•=ÇZD÷–æàDåÔ•ÈnBTüÆÃçYä\ë77OˆæžW`v…Tõ"öƱŽÒ[˜¤^hÂ!l©øw‡ËÂúýž›.¡s¥Ook9žeä#$å;õ#µxÃ{Šðæ £·zQÎ6×€n]ÎMs—×zò’\äJ9íM4ÈU±’GlW  ÈK =éÆlU6)¡WfpHÆÄv«× _Ð%„>|9Ž1è@?®kך‚³2Ë ä3µ@þV9ÈùÔ ça/”½>t<¶v"¦‡\ç¡¢úC¬¢h†ìpàj&,>¶˜hlžÕ@⋠ƶ4ø¤b‡”>¦Ÿ–ÓÃ'ˆ®P1R’Á-¡U‹¯VýñR’Y|09¶cĸ‘ƒŒÔ9eiA`w¨ÊªO0zš¯Ê‘<Îè…=*@ nMkG:t–zÍüßjåùPc¢¯¿ÄŸÂ¦k÷<)÷'òª¥ÀQ)*6;ÓX¦Ü¸è Òb1 *…+Óþk™õ§íîfµÉ¦7Æ2;ÑÄ3¢ÿÍ"H=FÆ›:å¼Û ÅŸê½2nÛb=óL Ä.§–.$ß ‚{ŠI‘‰˜Ÿ6Pó+ŽÔø™”ùPŸzêe%›#åŒÒ5;6 *a«L±Û2àóϦsX¶£z÷³°AË“È1¹¦š³€JY{Š+kn-îB¤¯Fê*Âc`Šm“¸`j}¥Ì’Î<~=À?tdˆ«ií*8ë÷Aéñ¨Úsr…@u'd%Yj§teSöIøoAîP´¾&:ìk°ŒUûL‚Se±OÇjvD˜3!SMÚ‰šVŽUóGz©§.Tßä*—'±§»N[Ä Ú‹Ú£Ç"¼d«)È"­–w_XŒuµ%†EEñOŠTméR#/ËçÆk y*½^¯tžmÍ$¹  ƒJæÇZP Ón[›•Fr:ÒUd’0k€·6ã:uI®JÊ‘1lcé«y|BäÑ.NL.7«Çê-&š-dl¼ ÷^ßÛð©wR°BÊzoRôm^bþ{„$îÄô«ž™uñÌD2¨É#¥FRiùËgWCZÆ ßëM^^ÁŽ]Ärg£½QxªúK½ úп‘áb©ÌV*7Úõ{4†r½Ÿ…t1?t×së]¯S± 0{Õ9 ÛÊj;Mwi™­^Hœud=½ê¿{Ƕ¬Ræ6ŒÇƒzíÔ©ùî)ƒÆ|BrÒj.àïåU_ÐQŠZóQŠÞêîfwÈ !$úUÏsÐfˆZi×WM…åOv5lÐt!g|—R\mÉË…9«ªÚG*sBU—¦TäViÅ6É£8ÂÇl²ï’ûö¨’\A&Þ"žàaä 2Ç­Œœä]QµD¸i¦ðáUË’pS®uS{v¸e†&ò©æ÷5&2Ì2zÓ­ ’9ƒç ëí[Ô.‡Ã–vòÖðª¶Nrßxþ9ªF¹«$—P­1×jix·¥Ê+I©¹^¯W©,w]ñ½y?Zmá@„ãp)ò ö©y÷¯W³]FÂjô—‹ lG™€'˜qžMI.ÞfxåÏ*²ÔøUh¹¥é¯‹Åû`Þm¼d¶yy\€wéð«‡l——bÂiŠ(©síVÛ]ÖÂc4|B0]ŽI;‡\rÇ3sÛ¥º,I\ÚƒÜÁ ª5Éz–ÇJ¡j ^0y·Û":x¡\DÉ‘‡¨øÖ»¥éßü‹O”DO5¼gñQN¶‘$²°Í8œ="fR+?â–.!¹Œ¨Èäëÿ@ ³¨„ìÕÔ–$´˜¢vÚÍ´N©s²¹ÆøøÕ¦Ü«ªInÁÃn¬§ Ñ2HŒs6;S0ƪä·Ú=*N+ÕÃŽç¥tçRížÔÃÎàùwäD:’v§€¥%—"½¸Æ(W«„ÔLI I€~TòÁ%æ"ŒÜžÀ{ÔÈàŽÄy3w$T¸ù¦Oô©Ö3 {ÔÃc±_QV&“'a@.®yžO  @Öµ¾°:6¼äýbAâKŸºOÝùt£‘0e §jw˜·SHbmAuyÙ¹¹æ'ÓÞ³KýUØÊ³y—>Ltåª Ø•Æ0q]$ Í6ò¢¡c’\ DW)"ùiÝÉßa]æ) |ÀŽ”àé^=*<¬¾¢«L‡—=¨Ž›§qr1‹Ë៼2þÛPž*Ò¬uÛ_ DTž1ˆ¥Qºû|=«2žÆ{K“kp¼®»{qD´í5Â\`WuÆØ>µ§iRøÚly9xÇ!'©ÇJœˆ¬ø=êQNET(1Dôÿßê·#1KÓ=ÿZr]N¶240òûX8ªÝòÛFJÆ¥ˆïš$&NRÄ`doRSP·‚Ùšêdï1Å5¿§<‚5våÆDŒ¸_ïP5Ƴˆ¤[RsÊ»sc¹þÔ‹}7ˆ³H õŶÑcMå~l±¶*tZœÚΛ¨]K2Åc:ÎQÒòî†pw­÷Úí–¡#GÒτǕ±ÿIßçT½]dÜCtÙo!¸ðÒeð˜å£#95aS’NûÒ'  A¤¤Ã“Ìwõ§Qƒ.AWs¾+ÅA9®×©+ ¨ è1\Î+¹ÎiELä×…Àaå"£]°1˜‚*›ª[-ÜP¬¬A^nŸ/íU©­|"Q‰¦£ ‘J¤ŒýéÐÜî]Û,Ç$ÑÍW{B ‹¤l Ç\VÑ ±]@²[H$ÆCŠ\Р3¹ÆsC.ʳùW êhDÑKÈÀ"Œ’j™­Þ=ë"ÚÝNßæ÷4Åm¬µTº¹·¨Ø3È}qVé-£»ŒKd¸5²èI£ÅÃÚbÏhŽ–±*‚¤ ê ®ÝÞi"äª_ÚHÏ–U?½AšãLqƒwÿåÞ³N&ÒVëˆn® u’7åÁCžˆíUmFÌEhXç(Ò«—AR"ã$æ¢ZJó^G/7; úúV˦iñé¶Û EÁÇL÷üꆬ7¤ýZ6èæ¼ËÊܹÎ;×*4ʹߩ©ó{WHÚ J„6QK/SŽÕ2(ÂFæsJ8^õìäfº:W«ÔSIѦÕÄæ)£Œ@·>rsžŸ…?7 ßžKÂävTÇïMÇh–Žä†õ¨÷Dg˸= )]¼5[À¤ÑH®¿iNE¸Õãh9P1­DÓõQi«Û_Kj· ül#§÷ùV±cÄÚn»=»²K÷¡}˜•±Ÿ˜Ü‘͸ˆ¬¨Àò6}iAïUq&1³D£Áåþfõ•_â–H¤œ`™Þ€6ýQuˆÒ{¹ q—Vò·qNÚXxj¨ ý XìVâÐË…|dÅ·-õœ“œŠ.JœÅ8ÛÆŒ`A¥Ý]Kq –sŽŒ­W.]<¸ç=~”†ÒKF’U&PJó#oÆ ¯ÕàdÄ~"£sáÏ6w÷§¯ì,îæúä%¹fóu¦,ãú¤î&.›ÕŽÖÙd‰e¹”î ¤qó¹WrMBúË]M€¥b`zŸsTë5ZâègùWà6¥O®<^ÌθÀçßzÂEú¡S¬ˆJ)ýx€FJŽðìyGÊ“g ‘ÀV]‰bv©@0+„â»^¤± Si“19ÈÅ"XØûWƒ2Á‚¹mð*ÓJ€ mL#ʪI$·¥4^bùÎýóPïíˆD‘zãz¯êPËŒ`àü(#fÏjqlÔë[Gx„a{{Ö‡ÃÚÅÅ®Ž"·ˆ=ÊU |¸íš¨êZôäßÌÅÔì½~µ‡_µm(Ivÿó å*ïïUû½hß/‚Ø…3²çføš†ÑÆ I0 îhtÖ¼üؤhº¡Ò/;¥i,˜ù—©Cê?µhÆH¦&…ÖHÜs+)È" JR7ˆ9ÏjJÍÌÛ®+Ì í »Óük9Œ–SøÕZãD¸¸´–;xY9rFù®éœwã¥Î©p(ÿÒÌß3Ð~u~´Xím’Ý]Ý# #sÆ¥ò†©ô§Q@˜ß³êkÕâê3^®Æ+ÊÞôÜ‘–|ócn•ÅNì ,g=6¥œf¼ ž½jßÂWI¨Ë⩎)"#®rÛñ«-Þ•!‰ÙÄ`6ÅS5+w ™Q×÷NeÔ¡Û1ódó{oFgÒ!†w‘ Á÷hÐðØ¡ê*($àzR%"œu­ †xNóL·]GP“žâ@""1Ôúþ•húü‘2«FÌÞ½èõ¡Xâ–ÜüjQ'SŠ©ñµi£ÁËvüÒ¸<°©Ë7¿°÷¬†êSqpóxa”v•¹^ï^¯SS$’Áwß4¢¤(U ò–è×I$¯SE&³e/çQÚ2Ëèj,–¦HÙYwížõ[~úÖ§%ë]”ç „ôÛsRaáë8.yZâYõ#z?o§Úª gÆÄ“OI¤ÛIº/„çï/ö¨sÀP²) FÙò¡0F dò•&ku†Òi®fF¨Y‰;(äÖ1©jRêš™»F(Š”Æ¯ÄÑkMzT¶ð.1ìã¿Æ‹ÚÅsw øhKIæÛ°íGl´÷·µ0Ë/9'˜6_aM˜ãIÝ]ƒh–“7„yñ v¥ÜI=Õ×(RDØ×ÜÔŶˆÆËã,lê@`G—n´4•µ& §Þ¥ÁjÎ:T¥€GÎÊ>Ö3ñ¥¯MëÕîÕá^¤È<¤×$ ×% \ÔYyçTˆaÚ4ôQœu—8®QŒS-6Aª·åúzR h2HÞ ÜÈ[›”dtÞ„]B²Àñ°È"«Û4•;Ž ûTý"ÀÞJÜÀøi¹÷ö«+Y„A¶ì*vŽŸW¸rç•]s“Û^æÕˆåGvx€` !8ææsÛ êá‰\øc¹Ú½k«1°x†Ã=ELŽðÆüËçŒõeÒ8z=X­äÇþHo±ÞOooz²ò,!q¨Âªìô¡¾!“Rn¼ª„~t–½…eU Ç$ ö¢¯jáF渺|¿jW HêjJÁqòÄG°¡NÄ»/nôˆOóg¦Õ*Ü´Y^©‡¥Mæ‡ZÜøë¸<éíRI›ñG6JSs–½öWs]Pq¿Zí4äómHÜSÀeF)À;TÖ< È *ù¤J++ sÏ€ÞÄì:°HJæ€\r’0î WÞÚ8®YÒ0­Ó cjEÞª!‡À0ts¾ßÞ«3Ý4’slg©šñ$Ša£ <ÄãÐUçƒxÎ;3…ª¾-òÁ;ðô±þŸ~ßš,–¡$.TJ—c)Îßg8Ö˜â+RÛBžm!îTgÌ2B÷ w#ÓÿŒ缸{‹©i¤9gs’M3wn!`ŠÙ$g”=•—s\¦å“Ã$Ò<|Ž¥9ó®{Š]$–æÀR¾5êD€<¥¾¬wÐjV†hð6‘¤ÿjb^Q¿z޹$¶z©ß[ØÙLjù¯sUËK‰¥“—$!ßãV{QÊ‹Èw¢\ܰ–# øÐ‹‚¶ñ £®;Sv:‡Ö­¼h""<•ž¸ùV}ÇœK-Ô‡A´|"nOSÙ>]OúUJ wXy±ò£:V-õÜk.R2rG|wøV…W¨_JyäÂÇJ¨ ³¾ýIÍ 1ÎÛéR"‰\dœ%iÆÝ· #$bG-ê0“vXã;lK ~Tßó/Öö媞½½i˸$·ˆLÃ*>Ð@õ¬ç‰´«k Íý¯)†]Ê/Ýcû¢NÍ4¤*³>w8¨“)ì{Ó' ô¦&f'•PŸ|SBÜŒ»ý)èÏ-žÔ%۞„êò(ã¨è[dŠìLñȲFÅHee8 úÖÑÃ:…þƒÖ©Yì?C"öb;góëDn£UÙºj‹¨£Näã : ϸ†à}kê1“y1ëØT+$Ùö¢ !¥Gæ¶)äRw=*LÒË%´p´¬cì©; ö“ciwq*]nP €Ø×ö£éa¥À3œ<Ëвóó;Ó¦ðcÀ§m5Akv’ç+ч¨ïVYÂ: #<È㠎⪺֥mc,’ìw?éT‡Õ¤Sêy”1Ilg­7sgq"ÄŸWb$>\Ž´VÎÆæåVœØ³ð§F,ä±;ëVxî&¶Ó’kçPÊ<Øü³ïU›ËÉuÏòl‹ý"¬Z>±-¼kÈlºíMq,îÓÅr’±·rã›`G÷¥Uî$FB äÔ`s^ÂçÑ^Îô–¶®©ò Ó~Ž?ˆj1˧-¡kXÏ0¹Æ3ý$÷Ïnÿ.š¬BÚÀxaÌҮũ¹ç2)ÈNت?Û˜ÔœfÐ~Õ™]™mîšH@å9]Å vf|¸ÞpzSlê½[îee89Ú«½3<ž„CîiqÉÌ:è$Q’A”¤ªí] ?«[Ù,°Ë—•ç\l·ãV4¼¶¹`°Ì¬Ç¶wü)·IñN9FõÍCJ²Õâê X$ƒfOý¨Mއs¦êqrÐçí¯b*Æ/ZÕ¼ˆÆP®Õ9ä. àç¥vyCÌÔÆÇ¶õc±Óí£µ"[t•fLa¥¸áH¢Ëj„Nyåk­¥xq'—*¬Úø sÞ&Üãî¿\Uzá Ó­ÊÈÊåFíð5{‡ ™™±Œ“C.5 …%#aŸé¨Fì£#HrIùSSjp°È,>U¢ýèóG§>©#°kÓü´ÎÁëñ'òÅ^§±d•³ß‡]Ú«&T„KSŸM©§B=ª# éÈvÎ 9Ì„WNR¾ôÜ’ÊÙÀú¸u +Ù ‘éJ¯W«Œp)–˜*“éAo̯ÉC¿^ô [–‰ü§oLPÛ©¹$øm@…Î'$ý“µL ßtá~)Ôôà¶’Â÷–9IÞ?úIý?J»Éª%õ¯=ºaûÇ5RׯÓKÒ¥ºr Ÿ,kýLzzË%™ÚVæ’G<Ì}IïD-ln‹µ]>órbÿÜ 8Ê»´lª79ž™ “]Ó%1_ 3€À¯ûü(¼—˜''5 [¦ÎGCM Ì÷®ËÄ:ªÛ 6’)$bøÏ¦sU{»‡ºº,ÌYWaMñâD8ÇZ#kRn/(Ï0W%âxc¶–ÒH©(¨’kÚÍÛŠA6ÀD»Ÿ™«6Y ³4×o$ŽÅ‰öÉíF®mmõ(A`eYè}EwG»»„¾t9&ˆe;‡Oj8“©À# h´Ò8 '‘qÓ½ôûuÃ[çï““þ•שׂ IÇr*“’H¹otð1‘sãŽøøW&½žtÉ!(6 ïMÆþ}Núü.²}sCnõ»›¸‘EŽlã©${ÓHyWJö7Í%—'©®ƒë^&´Ná+^Ðo¯58ŠÌ"‰Ñʕ‚}¾ðëZÝ€µ³Òâ³² †åƒ?‰ëQIydg%Kg|SåˆùrqÒ‡Ic䋨‹G÷;Tá–ÚE“N TÄq¿ãXŒ°·1f!P\Ôgó0¥*rœŠë©tÂg¸¨†ÔïÊù>ô›lªÿ1·ô©‚AŠP×­t稪ãÛ݈¡Œ:c©¢zl j¼ÛxÔú{QíFzކ‘Í"žSð§™bNgo¨’܆*Žž´äQ“¾)o eÁÚ“á]†(î‰,²)¶u,«¸l}ŸcG•BŒ0È¥Kg IJó*ƹ%‰ÀÞªZ½þ„,.lÞífwF@!ûö9é×Þ¨¶ÇšÞ"z© þ5Teûã&€ÞR§×jn;_¬#býÑß4ÂZ-ÕÂÚ•Âg;V¡Âw²C?ðæªü±ØÛð­R&·BÙÏCQ$Š._6ÃÔš yõl‘ó·}ö¡lŒ’:TFpNOMéVÊWÊI§$‹2ƒL]S(Îç5à¥Ü)ÔŽHÏ/Ý®¤à¹\mNçÌ7ØÒ»×©%u&£¼gÃlúP‹Ça1Ë(PÞ›œÕBêä Z0AïQ\±…ÏSÊhtZdó¶î«ùš(úÕ,C™LŒ#CL¼Å»BOÙ9 =mww q¼dÆ6oBâ=-õ¸#¹ŠèDöÊI·“¡õ úôÚªV°IÎ’ÆQ†64fÛ1'U¹¥Ý]§Ô&ŒwF•S…ÃÅ*6N3E³ò1œ GˆRElîjY›ŸqÞ»–jQ@b,àl;ÔF^hš8X,Œ¸ h;ÛMnØ‘>};+ŽCßµGå(í›P䈤…}(å¹^Y¹p{Q8î“ì(Õ­×”oEHæä,<Èr­ÜQýÔ_ñ´ å¼G#ÑwÇíó­òÊÒbY¢ Çï.Æ]iΙ1IÎ=Æ“ ¸[Jf$nÕX–%730ßÚ£)¦_œ(óéIsü²œÔ4‘™©ó‘•ÔãÖ¤*…ÚàÎù®sÇCJ¹ºp ¹³ú=´wÙ§y%?þòQERvŠëÄÉvǨõ¨ö·mü@ÆÇ(ùöÏj6ŒØÆø©–ñ¨Œ©·­5=¹†Öà©81·)ôÚ¾|¾Â¸0:àu ÷±ŒFFøÈ¨kW-ͱíKeÎÝ«Ø*¸åPÞ¢x6ƺ •˜FjD‹(œr8_. HXä IÌÞôC×ßµIYÁÃ.ù£0\+C†YAÈ©$‡^^™î;Pé‘âbŒÙäZedupÚœmQ-Ж‘×'&ñÒ>™ÃúLw>·²³„¾@Os’=íTöúj:…¤pi)mlÓ"Ìó9vXsŒqŸZÛ4]vÆ8&’ÚXî£exNþô™8šîwe†$‰s·Þ?úTk›s©ÃÉw#·psöMSåHáÑ%"’÷¨¬ÀÈJ1åêGlÐY§i/eæêëF¸fî &Ñy¥–?UÏûüipEàÝ yrTó?o©Û™cd"X“±ZE—X^´6‹Ì·/vò‚:Ö›žw.D›¡;J†òFrT¤POjˆË“^E ’k¸lׯ^Ƹ‘òœ“Kbq°¤¶â•¶6¯6ã¼rZïjƒ,lñ9’V'ª×Ó:‹—¹4å‰Ì:×£ˆËä'¶ÍI‰&(Ž)Û½ôÙöÉTæÇÃzc~ˆ\Ï@<¼¿¥_t‹è56‹H€WSÕOö4‹¥rÎ> Þ™¥I2‘ßµ@¹„[KˆÛ*w¨&n\¶zmM5Áu#=EAðÏ.6§¡•ÒHßÔλ9ß™FÇ·¥v˜7!=h„ÎK°¯]J.Næ‡3°ƒƒœÔ³ï±ô©᪱tË’£HÞ²n:ÔâúÖÆ6ÊÄF÷$à~‡ñª£¯’¶Ž€_éðÞHΊÈ7Ž7ÁøÕÚÕîìð†s*ç [|ѽJæêK)­tøši"Qã˜úôû+ê}k<ŸX‘dxÅ©WC‚$;—j±?ˆ$žDX³ºªöýhѳŠá±á)r2lOΪF»^¤±{׃¹®«f“ $aN qrFûWUÕ”Ö”Ntt¦ s)dUo]¶ä•eQåqùЬ]æ>VÅvVÎ)oˆØ±“%ŽBâ¤ÄDˆUº0Áª‰‚A!S€AŰ»¸Ó'KˆNvåuìãÒ®±M õ¨ºˆå|Áô5Xµ»¼º¸eUlt<½¾&ˆ^X2XxÜåÝw P"ÊAÈ5.×MšàsòxqÿSu?N\X-¹QçÜ÷¦¼0AGÀŠ;(‘Õ01MÛA5ÌŸËÂÕ˜à ;@ªAÇ\P»©9çb:LÏZtÛ3 `:ö®‚7ÙÁ÷§–LEr_jµG§Äm-Ū‚ЏíS¢Ó˜È¨íñå¢_Áà–Ý¡uÙ'|qÂw¸&Ý¢{`òŸÏoΠEÉp«$#;`~5¯éÚ|:f…mc ±¦ì½Žäþ$Ó2·)ߥ ¼pòš<ä…¯zŠÇ;“šær+œàlk™9ÅtôÌ’„  úÓªIPOzó ŒSQ3ó22céÂØë]'¸Ë” ŒÖ»ÂÚ¯kðÇ$Öð]¹§¸Ã ?ËËŒü†*îð5”±2ÊÃG¯ÂŠÛó4a›¿J\³-º3¶Àu¡ÿXE›9ΊÆSêì$Èæ\`õ¬·Š¬®gÕ%†bÒ#΄ ÷ý«.¾ ÎDy1®ÀúÔ:mØ… W85Å•³ÊɃNOPEv¼Ni9SÔW²«XÕ®œˆ¹Äâ‰[[ Tæ†nýH£Ú~·Ÿ§›i"–F _™qŒ{úÔ KY{¡Ìl›ƒ?Oʉè:gÕmÚêxü9ç”ÉÂŽß:'y«Ùi–m>¡0‰eõsèsY¾«Ä ©ß;¢ø6äåS;ŸsY¶£qõ½jæläsr¯ÀmûS|œÃ~‚µ_£íYdÑ¡³ï 2ùägñ­-2Y"Vþct>žôþ‘Ð-¢Ó¼I&ƒ$¬òÌÌNO1õ'ýúHÕ´]3ZŒ½Âˆnq…ÿ1Þ²%ÓuÍP1\(ú±ÿDÈÃðØû'êvÐ[2Ê¢H“Ê7ÛüOyžy\¼’1fcÔ“Þ­2»ùÕŠ¼dWb­X¦Õ#ŽÑ¤ÔäXÂå;gåëð¨>¸š³Ïš”‰Üõ?.ݪÛf0«ÍYôÞQHØØQ% 27ìh{AáÌÊÃ8éïJ¯Wª$’p"'rjVÀì+¿ áëHb éQâYŒ˜ûG5/¢ù«ÊÊË• jD®ø¡×±•uñßPkË+I¢ÈQŽÞµêVj¿àºnj±¨I-³5Ä`2õbÇìÔX5{‰"B«þQOFVf$Ÿ1ßz‘õvsÊ¿OAStË¶Óæu Ïý¤íŸ_M¶u„P«ž€Q#sV’KráaQç'ÒÁ˜¹g·™'Sº° íýêÌ-¼;XöÁz‰sld@qÒ‡ÉhqÍ(ïA#…†Wó±9ÁW$¸‘]¼€ ö¦ Ø<ÜÄjh̽w®Ç y qÔÑhI`9—ÒŠÁd— ©•üþTCø(…OÕ²}›­JÓR[i<c<Ðãì·úÑøm¹T»–õô©°GÎþãó¢Q£B5!@5! MÔòЛÍHGtÑró¨î=jO§cò5GBsð¤×ŽÂ0P’’²)~C±íJrê)¹I:‘¸§—ì±]Ú½‘ëM/+K³dõÅ>ªÀf徕ràÈ4ÔÔ.MÕ¼w"+DÒ òîr@ééWÿ¯«0*øÇåV-2_­Z…›,½y¾teF>ÛyŽi ‹s*}qJb[­TxÆšÅÄCÎPŒÓçX|þV5í¿jAq¿µq\7¡¥×«ŒÀu¦ÈÎéŒúPù§¦eVäåÛª§<¨˜Û©øT‹ûl³rŽSP-íY‹óƒ°WO´Fœ4à7&êsFÌËœŠªqŸ°Këg"êÛ!TnNäcÖ³å#<˜fÁ|`Ð(ô}IG0µwºoÒˆÚéWŸË@±‘Ô9Æ*óºúl3/ÖÑÞF.ÛÖ´$ÍPC¶gÒ¬`‡B²Tõ± p ð=…V8ŽúÕÒ\KC+î÷¬cS üR| ,jÜÁGmû× ‘‚„UËQýÞÛÎ÷C"€s±ÍA×t­WS˜Üýsœ³ ŽUQè1G8[F×4)m_FšÎÚê$1ÎÑù%¡†Çdg#;Ö‰x(ÌN"‰S¦L†ë–ÝŠ0¶2~׌¬à9˜üéYÍz¸rFÕ[c$ðË‘”;ûŠ’©Ív¸W'­sN¥R_6¢¢,â$;ï©/p’*I¨ò£WMÁÚ‚½Ãd–lÔ[­FÞÖÚIæp«‚=ÉôC»½—PœsXò§÷¤Â Rs'NãÖZª¿œtý*[g ˆ ¥¼#“ö»SÑLÜØ9Þ±pͧ‹Pßâ¶[à?×#H±YµËDiD)âÌ[”rÈϾ+Yh_— †S¿Æ‚^sýmÊ’¸ÛcQ¦iž‰˜•aËÓ}èoÔtr}55£r íŠ3ˆƒ(^¹¯[Æ×r S+·Ù ¾jÉk¢-¤<ÓžiOP: #kaÌj7kk– ½(BíÔì)ä²æÙ‡*ûÕ¦ÞÖÚîÑHò°,7øT9læµpê¼Àw:YP:ô?•;=Ô6«™Xs‹ÜЋ‹Ùæ?7*©ÈQÒ¡Hüò–=Næ‘\* É&º+Œ21šç å ž•érr 8Î{Ô®EÆ1œm^åmµ,t“œÔk‚ဠiȱêv©àÑ .ý¬nËäò²òœvÿx­†ßƒu;V纾Ž:!b?0*åiaàYCq•@ ÔÒÙæ¸8m°i`e‰ ‘í]Åu"ç8ÉÇ­DºÒ­'R³<„|Gö¬sŽxjÛNÕ“øk;$±‰\‚y²sŒè*’Gоj4¨@ TXØx¤ÐoŠ–$cJß9ÎØéQçs¶;R¡<Ç=±šI¶Œ±eØžµ]O Öfoc¶Ý© ¤²0`FþÕ+›/Ã71†Î78Þ¦ ÀVB:OznB] “±ª'iQCr.­° ‡¸Ø7¯Î XK,Qr¾ø'­´˜]ÝxI~N¥†BÕºÒÖÅ`, BàÆ¼§˜g;Ñ0o²qìj'Öñ)ßlíYoë>]Fæ ƒáåM’õd”x±ïS"¹†/)@ÞýêÛÂíäWª±s0h€Éÿ«ûV—¤ZC jí ®”ã©õ«†µr…tÈåe˜ޏ`*¨L\ùè)ß àŠmiãèï< —YpGl`zŸ¦éçžãrê¶ío;¨bTôÈÞ­–#½tœWrJõz¹œf£HÒ¬¡”Œcz­”Rv$WXdb‡L…Y¹Ozˆ|E?ÌÈÆdu*À0ô;ÐKO‹êæKHñ?eæÀoƳDjxVþ'ˆ¯ÙB6Û×ãL¶Ú¤¢4dR22=ÅN…ÙH ߨN®ûš% ˜™W;Þ¢™¸VL¨ÂŸNÔ2äsLI>U…ÜÝÇä‰yÛÔô¤Y_êvN •ä°dý”rüºU¶ËX¹–xã¹å1ó9>çj´>žX(ìNئ§ÒŠƒÈß"(tºEäŠ%Ÿ N2»š¢ñQ5µ‹!À (÷íþþE¼¸ÓïÒky å=ÁÖ´}I.T ˆü7îGÙ?ÚévO+´‹þ¯bjÓ›T•%°ÉWFžÑœ’¬E8–Ò;o…´N¶ˆXNÞÉß4~ÚÕ#~nLŸê5N¿ÔL…ìÑ€P¹ >ÕbââYî ¬ä±õ§’äˆðÇ& Ì9±Šá?xtïK"½^®1¦ü5b9†H9ÔïAH+– id☒lÊ>fšŒ 3žjyT™ùWð©öé^WÓ±Kãé6Sƒþ,°ÀõPjx.¹Û˪»zú™ÂÛË#gÁN /O²Ô&¸2Ý)‚|Íý¨÷+`*.O@*B«D¸È#¹=é—)4fHŽGO…ffë>¢RÕ;ž]ÉÀ÷¬ãUKeŒœ7@GzáŠã4ÊD±±e]Ûµ:!^ncŸ‡js4ÓÄ$Îv>µØ“‘1ÜÒðAÚ±éx‡Rx$¹¹!†1Ìì±ìçRBãÝE·Õô½&fÒ®A1L³ÆP •æÊŒƒ¶)„áÎ%´å[Í.e`rwô5kÓtËÄ´F–ÚXÛ(R O† 6s³Ö¼Ê}(^«d.,XæV&—ˆžYHT@IÇSOiÑH o"ç|í“ë¿Z°ZYÜxm™woO²ÜˆÕsÐö5#žq¸›þš1§p¾¯«iRßÅ„'øq0ÃMêFÙ¬C‹8O]»âKËàÖé•bÀ¯*…Á»t¡6¿GüS|?åaŽAƒ†ó…>ÜÅqùÑOÿ5ÜW¯<·ºjòÐÌå‡à˜üêãôsÁœAm{u¶ëv“òbK~b©ËÍö‰ æ´ˆíÎ9Bà®ØÇJд->Êó†í¢¾´†ãÂg â n\œœg¥7«hZ6m*Ø[¯!꫌ûUY´í>Y9¾¤‘¦zr:›om´ mkTs’¹'$íßáS"°$˜ìzÒ/´—¸·s •2T×Ú«KkpgɈ®Ý[jñ³¸f#(8Îi[<%P¶r3šàØ`W¹³íImzTyFÇ(4ÿ1DBFv²O/0¨3“â*ôhN¨ÄÜE|¨9Äÿâ¡›ŽWÆi™.ù¤#;.ÕçX.¡ðîaYc=˜f«Wö:m­ß H»e¾ð\ö§b·†{DµÂÍ‚˜9GëPî,¥±lŸ'±)&–þökË“Í,Î]¾têE†<»c©hzw¶÷ò74R l/¯p~y­JÓQ-£†HdžÇ8~ÔFHÒ5äŒa`=ª̨¤1í·JfÝ‹–ÏZy朗áÈøì*צkv÷²HþY"Œ¹ˆ&³k¹$‘É\‘×~æ ¼Sõ)œzWV9sr7áSAÍ×Ò¸ƒg±§xûRˆ]©´.T±?*\y9$S”Ìѳ`©éÚ#4†‰Xv¤x|„2l;Š#ig;ÛµâÄÌœÞ#}öþâ¥ÝØýO–7 ³ÄƒßÒ£ÇáÇ*ÊUXžR65ôG ßÅ«p–u´‘‰c ã©_.G¨Ú/7†õ®ˆð9Ÿð¨——‰œdW­.ÝáúÄL6Ç÷©±ÝÁz òJ:¡ïðõ®%©NqÌB¸Á¯Æ³/:v€æ9îUÇ2D»ÈÃÜvøšÈîçk«·œ¨^nŠ>èô¨ýzW ÛÒ¼»Šö w¦ÀRO5Pm´ˆZÐÛ¼!¢uåe#!ëš×øWNMèÓIÓ£rÑÄÊO\€ùŠw?&«–é*úuGQr²ì3TFâqÎÈyNämC ¾¸tþb‡ß•%eŽSÊrëškQ°’ãOÙʃÄa–]öìW,t—·‡•ävlîHÀ¢Q¯„H#±¤¹hv"æušà!OÙþ³éð­&¡Ž5!T(v Ú¶‘lnd»h#úÛn\ñ=ÿÖ™·á{ÝJžk´µ…ÆF<ìG÷ãEm¸g@Ó÷’y/õ\aÿàôüªdšœq Š0¨‹²ªŒðª¤Ð[»ë«Ùc†Ô·ŒŒÇªzƒÿvp=À¦ô~?ŽI¤Ó­aX­ù¼“Jœþ;Q}JþI#U–@fqÐtQP¬#3æ6m×óhÓ Ž1²þ§­ŠÚ "4*ÏÐ’3N,#ÀªŸiÿVg’öÎàÕJbRs×ztïÊŽN@85ÑÍ8§bÿ N1µ.¹Î¹À9¤óö¸dÂÓ(«cpj¨šŒW××hHÊ1å9ûJ6ͽԡI¿–üávbéQà¹úÅ¢¶ÌzÑÆaD‘°*·,2<îí¹c’Õ&Ùì¦(’\¢Žd;ô§UÞ}aÒœµ¶k¹rA¯Ú?µ?}l†Q€7ÆÔ&m #¤Ü ðG•¾t2hO‰—”çqQÖȬäÆ@NÕlÐR9¨ÈÍßz²ØH°ßC3)nVø¨Ýô ‚T‘Y_5áÛÅýW<òHF{úþP´\¸NROµ[4>»Ô”Ḭ̀ÄN6äük-¢­¬zds´¨Œ\³ lw {gõ«‹@ä>Sä>ô2倉‰ùPȧ˜«œ€ÇJ÷1''­;ÄÑ$‹΂Eå`§ÃÐÔrz ótÛ­x uë]ï^¯Ic·ZáaË—éé³(ð°G]Å:¹å=ë´†p6kÞ"ã­7$Øe@>×Zv0Hö«V‰:&“4Ý$æ0?µDÔ¹¥pFTþTG†8eõk¬\óOœ¹ÛúGï[~—u¾“¤PÖ%å v¦­Çˆ2ó¥ •o#c›=i¹-ígSãBŒ1ÜTt·´³-$*ɱʇ8?#Qž4˜‰bb¨ ô5@×~“5yVM3H­Š—R¯óN6À^‹ñ;ü*ƒ-´×>$ó»Í4‡,îIf>¤š$l™ÈȨs¼ÊF»wÛ5ØfIåÙ»©§@ ×sŠîExšñ8íQ&Ѥ³L°R>ë®êß Ñ,-þ±¶>?wýê…}ky.ªma€´ÈÙ#gÜûQ­AvcÞ¨w(ÓÜ …9ò3Œö¦ä³Xà‰QÉð×À;z²M&¨¶Ñ¢ò”,ǾÔrÂÁ‚|‰œ“ëS®E©TåÞ‚jöº]“^ê {u`¦F€IÀéI³Ôt½@æÇSµ»òó ¡ˆøŽ¢¬6Z„ð•åäÂôÈ£vºãÉ/,ˆ¾›6*Í$ÑêzpCå”+ƒœíCôÍ^X#ŸMº9í›8=Õ·ñÏåLÞêÌbHlOz®j:ÛEº°üh6±«K®ØB.%òÂü¤ ³ÓsêsΣEeàÆ®¤éŽ”zÎâO 1b£'µ´˜ÛºN=rG¨«ÕšÇ<)4'™dFmG,l`7ɨ—ZˆŒ2ÀGßoíU;ònd.ò–÷'­Wµ^WœnGPrÞ¢¶2ôÐ@Ú¼qœW&›VÁïHš^A寡›µ-‡$†ÕËËØ`Òî'¯2¡ÆùíYÜæ)ónܘìsñ¦f»%yG|zÒà”Ž‡ ô58kW‘*ªÝ~FˆÚÞÚ_žX[–QÖ6?ëSV8âÁÀTé‡"/( ©¨às¶É©?ZšÚ·I9S<Ü ´…¹ËŽ`'p{Ñ¡9–%r s òõÅÔOšå ¹‰ü |òEŽdøg¯¸ r„,~ªdxûP­øZ!¥JñÄàש«W‘½ºFP©ö5c°ÜÚGüÕñ9@*Nù¡¸e Œçµ7cÁ6/ng• Rœ‚›„Q«="ëMÄ£nQûU‡N> ^//+±ÏÊŠ½ÀhÃÖ¢Lë€9‡ãC®<Ç– È9S • Í!rŠ€k†î5t¿Äb(ìjAÅz’îtÍ{$&NÄÓfT±`1Ö‘ËJþHÉA¶sRvÅsÒ»^¯T7pã4ñ^X‹c˜œS̯&Nù4Y`| °*tzlɸV%:åv Q½@›ˆõd±™ Lç?q}>'µlñiÚu”vv°‚!ʪ¤Ò–c‚B— Nrv¤Ú]ÂØUpÇÚ¹,Ê'ažR§Ö¤‰£ö¨ÏæVPÄdc46?å7å'=ýê™Æ|6«¨ ^Ú?$ûLèÞ¿1ùzžyYp Uõ8>¯}8xü0§§¯¿Î± Äà{S\ª$,º&ºÄšI‘y•IÜô§:SrÀ+Ÿ•¶¹"#‡)Û›§Â¯1º®jW|¤ztýÏ™†#ÌFÙøš­ëºµ–›hfº˜.P² Ý›n²ùx‰õ øÿ’!„¿”÷;÷4zÙä˜ýUG6~Éô©Ö:Tvú¸óÉÉËì7JGw•i„p´½€¬óéóë:­€x³x‡Ü(?» ®ýiâ$¸œŒrÛ0ù–_õ«ÝÝÍÄ$˜¦töo‡.Õ´÷ÉŽ…C©ò­s†õi/xnÖýáXe9¼0ÜÁ~x½f&/âœOþ7õО+’\ªÛ¬L¨ ŒŠ¯êzU…únïjÝš6ÀüíU«6}ÊæxæKÈq““ÈÃßzkÇm%úXM§/3°@Â\uïŒU”k‰sxf¦n¾ìbÿÂqÊ1ä çñ«G},iº„—zM½…Ñš$ñ“ÆåT€FA'¸==jó¡ë7—ÜD¦îbVXÙȽö.½hÍüj U~æ2“A.ðmñÌ2qš‰Œ]†1ŒS'5êæ).€ïP§u…ÜÐÙЄ-Þ«×±câŸÔU1 {«ÖXT°$ãµN]bšS¹û¢ ÜBcR!QØ …A…™˜óuM´ÛH· àô#¹NKÂàÙ¨îr·– lç-ò=?z+œ#’}h|è­+|*„ qÓŸ’ᣌGqJŠ‘´ÌWŸéšå­Œ†FA*üÅX´žª*™‘˜±'­1wÊY&„€3¹#ö¡ÑEâHª~4bÊɼaq#n‰£ sÉ»üj|SG"­Û¥rIJ®zÔ8õ2'å”yNé‰$29bÄúfšûÄäï^$‘ŒÒ9B)åëÜúÔqÉrŽÃuß5/¨Þ½´‡ ‘œWvuøÔY-D„gÔW­­ÞaÌ5(:Ò«ÕêKýƒð¨ÂÚá"K™ •bo²åSð=éØÉ#ÚÀ;ÔËgÉ6Ä“¾*ùÂ…ù²¹¼‘dLbvµ>æÓÇ”H’b1Œdœ@U€T7||ù}»SöNê^eè(œöðÝZ=´ª7"¨Òè²ÁpÉÔ!ÇN¾õTã!æÒ×P´RM±ÄáGUìß#úûVmIÜç5åP:WO¥2cA2³žŸgãOäõveç·ôå9"›:–¢bŠúpŠ9@ñô‹¸ƒˆ´î¹½Ò¤úÅÄ8-âoÊØäußßáX”¼O¯j¥¥’øÜ\JpÆ@AÛåWM6`mã·D36Àg'×q±YÖ⯆Àäo½3K!'›Ž+±±—;SW¤ø ‚ZCŒôç‚äÖ¯`7÷¼köPeÎNþàõøU±øCHÒøxɤÙ¦„fGûO"ž¼ÇÛôÕ3P·~RÊ2=»Unæ),ǵmòÎßL¶²†R’"bÛoíGç?Z³xÉØ`ÞªSê’ù£8B6>¹¨¿]öÛ8éšÄ×äi‚ØW`\öÀõùãð¬âK˜½gtPK®ÄZ;m‡Æ‚MrâF`ã˜Ùå|³š1a&CÏ#»mS%†8n#h…a¾ùÞ¬vã*PïVˆò-™ŠòžRqéµU…¤lÁò1ÛØÑ7!UcA…QMH¬É…=M;’±RvèiÕÊ!Ï¿z"©o(Ün t¶®ö¯WˆÍ%/A½*›`Æ@Ý…,Šè®µ!TódÒÉÅt׫˜ë\eÊ‘ë[>†"³Ðìm™)«dwÆÿžhWiºt-òXÂ9|²r Sìvª4Ö¶@ó dö ‘ùÓšV‰¨j÷†6ÍîXd *û’v©ðÏÑóéêÚç‰uYbˆá ÉÜõöùÕÞ@Ïclg¿µDú¼™ —rúT‹Å&ÒQ åÆpq@tÝ:H&3O'ˆÇ|ç4^FHÓÄb0µèîA’¤S­k Ôd:‚?K¶·{x 㘳ßjjvwέ7‰“’î0ôÅMº–ÚR’JÆ2›ÐS¸ç‹,ô­+ê|1Iwv¥[rgbH>þ•ŠÓD”ˆòààgzf™df‹RrqÐf¹$bDå?àS˃]ÃbsRp ÷¡!Ô”b‚jf)Ò ƒ¶XÈ8“@›†õhï"…—L¾,Öí”´Ÿ,ííð5§èw–Rè¶÷PG Hƒ˜ ûèÏ}óRÚñ¹ùAßµ³O1.v;÷¥¼.˜Üfæ÷’tIPFÀ`rïE4ÉŒ²ó'‚®v€´Rt9R½³»¸ƒÇ3+CP.ôÛûýBkˆÙ!™›ÔõØ{×`ÒÖ1>]‡©Àü(Ÿü´–ïi<1¼V”r°øV?Äš.¦q„6šmÑ‘hŽæ‰å'¿ëë@µŠä7QQ,fͤðºÜÃàñW¿¢@§XÖd#Ì"Œñ-ý…k‡8Ú¹¾OáI9ÈÁ¥ŠW6â¤!2P¤ç½KD0 ØÇz|DæëÄløý:×om„±î7ÒªZ†ö8 2÷ݲ1.ûŸjrûD¼¾² ™ ¬qšE¿ß[B[Ý›˜Ó¥ÓŠÙÍË"˜lK Å]ôë£Ê€¶çzô‘Â2q— Äö<ƒQ°c,e³—B<è1Üàî=ë µá˜âÃÜG$ÇÕ‡*þF N´%Uʪ03UéKLÄ®ÙëŽõ`á›\Gq8%BÏ? ©Wh]ˆÙA&¨¢à±,NääÓÉq˾h¶›tK9Ï¥Z-£ñôVºÆé8\ûcýEÓc;7áV@Ì4阱8ºïÚ«»ç-¶*P·Zuv\šVqÒ¸Ië^Æw¯tí^f =†i1Éψǭ.’soJ¯W7®×sIå”°9åQí’kª²’!øÅH‚߯˜Ddç¡#4Y´Œ,…̱Ÿ¼£Ót+g"F€8›|ÕZk'‹Uú™ÏøÞþìUø_]¬ª" àíÉþT~ÚÝõ fŽâX]J²°Á¡úGÑüMsâjs•SþeW²zŸÊ´ë+K{t¶¶†8b`‘¨QYóöOLlk—pÊeçE"¹æ¥GUÀ& Þ<ž*¶9†1Š…gÔvâI´G'Jü©˜.îäHÕò§ ¢ QS­ó•»ªa àL‚õIãi>£a¥Ò8¤(BûôüÇçXv¥uq}~÷——”ô죰 ‰MnX‚6¦â"W*BœŒâ»\9'zà© «­\Dø~YWßcøÓ­«ÙÍ* v,ݪjÛꚦ©=ÛBÖÐ;ùL»^ƒË×8øU³^±¶âN@žÕ"³‹•¢n®z6{g|ãÔÕcGÒ¯ X¤(b8ìª{ëFÝ-Ç"eœ÷=hÝ”bÖÝ#~¸Ë|k·'ÅF©zÍ5kàx éç'|dçãFìä'ÑËyØ”‹tø.íà¸F²ï qÎ:ÃƳ©­æ²˜$ƒ·VìÂK…Eæ‘Âüh¶©Ãq)·T*Ê2ýïZ°FÙØŽ`zZ#qg²fPGM¾uM×.Eƒ¼1iJåAíïY6§ ]Z]DK,ÜÌ]¤'Ì Îsøõ¡—æEûÍñ9¨6v·Ï©,ÛI#Ì …UÉ=ÿjÔ>ŠôÛý>ç\:……Å©!š2œØñ3‚FýGOQZm3<žy>µØeY# *@ÊÇZèn7©p}‚=*T0<¤•Ö­£É7$Ì9QŒšì¶¥Gâ­°iñAØzÕ;^ÓTºúô@ ‡8pô?ëOè2%¹u»b .KlzÑkîß, Oõ'_ƒÅ+Å#BùÆp½“PŠïVku"OærŒu8«¥ªŒØéDá™òcLÕŒ--`ÔKÛº‘(,È¿q»Þ³-qe¹š(aSˆÏ˜üj'Õ'*ïêhþ‹!¶Ó Ì_%‰éíŠòµÔRC"(WRŒl‚1Ö†Áú\ªH{ˆ_+?0jÜ›mO9è­îíQ£áÝfÛ›êïm6{s:¸é°^ÁÁÓÁq-×+¿'Qr:aU»~,¾…@X ÛÙ¿½¶ãbâá, 6¢9²ŒB6@#|y¨ý¬¦Eßr=ªt^gÆØšNÛu¤©'b+ŠåØ…Æzr½LÎ ¦ôŽrp ߤ®×«Õêî)$íRTdmR’)J€œW–Òw˜"Bå›eI$ûV‘ÃÚ>¡%²ÿ„#)Ç7Ç÷£RiÛÝiÑq”þÕœkvÆßŒ§æCÊXL2=FsøÓÐ]˜ï"'$s ¿ðüÒÝ@å²óã>› ¸Á  @£lÓ’\‘‡LTÕš6–ëëS#ÁŒ †øÔw´ Îùòã PœAw'">¸=iû®HT*ì1ŒzTZ@øzŠ\ƒ¿jT3xr©ÎÙÞ§É{lŠH~|v]èlúôPDÒº¤1(Éy¥cÜ[Å­ÍÕ¬z„—<Àªã‘}@ÀÆp{ŸJ¤Lùa¸¦U‰݉Å6é“·z^y@º+ÕãT‘œyŽMs˜¥O,X%Nìz±ÚÝEwn<2OúWd9'lTVŒ9û ã}ź'•íK=Æ—÷£vð¥pTùÏ0ôÏz}¯`µ0ߥEm~dS¨åÏWmÏáB%yYå’FêXî@œj‡ªë ¨F ‚Ø*)Ê»ý¯—¥ XŽ_$ûÑ]ØÉ¬ÚF9€iUI^ ƒùV¦šUµ¸Ê4„ú±Ú¸Éhþ$‡ã$öª·gÆ«=Ú3|ª}€Ûô¨Ï£OšI,yW\žøøÕSÒ_²XBî3‚ª2ô©Ú ë-©Ãv,F7WÌ®`GmÏåZ¬ÉSŸ r¯aÖ”1Ir n Ó© `a0O`*u¥Œ“LT†_JŸw¥}^1á#3rŒúõ¨ÑZMÍæ£B@.Ê@W;}"µEˆ‡\gœ}ïz³Gú”9„¥'\¶W‘C`)‹™ª<‘DªÓs‰Õª]„é“‚ç˜ûzQ&»ä·yÎEU$‰_<Ã$úÐ1£é¶Z‚ÜÁ‡/Ú!IÁøíŠ7mtŠÁ_¾Ù¤ÜHÅJ,œ„úê¡« Žæ êÜh$°XÎíZ’M€LäŸL %¥ƒeCɶ8«Wð|·Ú ÝÛÞÅËÎÛH¥zÜf¡.›>byÜ~ÅíÔQª©ûg#oJ‰o4f^c’Þ”#QÖæ²½–HÔƒNNÇzüCª\+½dN˜ ·Ëz‹af÷s˜Ð|O «…Œ6ËqlŠ¢1¶Ût£è„„è*D0“‰îwÍIÈKgŸØÒ¶Q…®ó2v®×#©Å(ç°¤«†$6©6Ö·7“x6<Òc<¨3ëGÿà½U4³¨LÑ*†ÁŒΣÔöüè)³–;‘FKŸ³×áSeÒdˆòÈ7a»P糘Nb)‡S¾jU¥¿=ì6çíÈáWˆô\ÈÂ;Ve;€õíÒ­ZÚÙ\-Äçšä—¨_‡½Yy€ÜÔ6²¸7m0)ÊØÀÎý*¥Æ3«j½½æž‘äˆß™±¸'ö#ðªÛp¿Ã2¬š|lIÙ–UÁüêéÂp^iöæÓT„ÚÈÓÁ`Þ\A=Á«úŒlÕ\×/~£s;>ÈFAÿ¶ˆX_-Æ›o1†D.€€àÓ­:e%‡.TúƒG&mâØcÉêhm¥º#KríyPŸéõüJnXül¸942âí-$0G†—¸l€*,·³Å,k*™ZA•X÷üªr£˜¹¤Äc‚zPë½M!‰ÒÝC°ûÇ¥g½ô—²·re9ØåÕQÔÆy—ôÇ­ w,“ŒõÇ¥)NÝ+§~•îŸàë½p¶wôüé@í½w­SÅ ¹¸1– ½j sø€òœ×+Lº¸·ÔÃÂIlt=Ç¡«Ä.—p‰Ê~òÿI¦nm™1†éަ‚ÜËâ’sòô©¼<œ÷7 ß”¶ÅkäRFù zý„0M±»x’}¥ì­ †ÝÛ|mR<„lGz&šÐÜ#n´ð±æÆØ¢:E¡ƒU†\á9×MÅhîFH5 áŠÊG”ö Òé±ËW9å=éS»†œÌ*¯Ki8åOÏ/AøQ=6ݹ †˜…Ô©ceo:à×A*=5ÙÐ*Ÿ¶=êÿ¥Z­¶‚г—e›œ“ëʧ–DSI˜xŽ„&øÅ3wQÚ±žT„m»|j-—C§ÄÒI"ýXnÞ!å@=rzQ펴ž!âÑ.á’x?Ä„ä0ëƒÔ{©Z•½ä·By¥y6åÇn_@+&âî 0ëQÓ˜<7ó°v‘‡o—ëð©vCä Çžaö”õSïFa»‘”ƒ'”õÚ¥ÅK?½ Ô´è3^ø’#"8;J§j—³•`¸1K.[®3×òÍ\eÿÓaºÈþdjǤPà†«8KVŠ0^B@Z¶i3g¢'‰X¼# ;ã?‡çYßp®ª5âÚF,«3:(—$7õ={ûïÞ¬Ü#õ›£èÒî-îXJZ9P£)æ`2ý0j³}t"›ÃC׫z{UÿUœ-|«ƒÔôÓß ip~;Ð[éÖiÃ+8ÜšŽ€†'=jËÃòxVó1êÌåFá*òó=: =e kfÛ Ã˵K…Ô'˜sœ{S˜Þ¸ä·ZB©L’Ùø×ˆf9#n¤Cmpa’b†˜ÎNã5&Î×Ç“qä}èŸðV¸cÊ¢,l§ÔS¶ú|i)¶ddÛÌ{ÓpÀ…ÊÁs€ûŽuü²*V¡ëz~µow qÍ<¯Ë S±Øããò­>ÂY!Úî>x¤Û”·ØÔáhEñ~oåJŒníO\é6ɼqÈüj-žƒk¨jvÏ4 x-ÎÛu|¿áÝúö©lã[¤ne‘+m뎿:%acŒ ˆKs¶I=j\q¨”s‡§PÀžQùŒDå¿ékpá2UÔýáSJ(Œ³}‘¿Æ“ ’Ì Lsî*u²2©P|€àg­B½Ó#ºÔ · ¯ òœ°¦d cϾz÷>0;æŸY|]ØäûÔ¡u2À#8pÀõ”²ŽPê'}ê%Ä“\ æˆCÒ”ì•Q@v¦æŒInÊßxb¨šák[WÅsÈ?z ÞË*ň î{Õz`åùØ’ORižQÌIïÚ•^ï^"¹žÔÄѹehÎ9})ä@:âºHQû¸fÍ ¸T~o^ÛPQ%Éð³}ïAEíÑbš)ç'Ñ›9çKÀðŽe;ÐbŠÍ×bŽ2òõ8ü* Γv€æÕþC4æk:_ʲBëåêÊGz½[¢,±årj æŒ.ˆºyH2uR:†Vƒ*Ñ.Õ îí<° çÎ*3M aýw;cÒˆÅl»uî*u­³‰ˆå^`w«dÊIM4#,phtøçn]ñÒ…øà“¾h©«Æ·mGcÎŒh÷ÞÚB–ïüÕ²ˆ÷øQ ¡1l ZU¢eзE?‰ÍYtø >µ*ó¾£ÞŒCw´rÌ ;úì*'ñ7 §"¹ûæž¹º–ߨ-¶ªF óÃ5Ò–g‘IÁrI#·åT­Mîï°·3¢ý”Î|¨uœsØßGugpöל¬‘·+/ÀÖƒ©}/j_ð|ÚL#ë.‚8ï¢ S±b££úcnûc|çMœ‹Q §,‡b{Š̶÷ 5»qùûUßO¿l¥,YsßÚ­zZÜͧ¡XÈÉ''aŒÔ.-f²á™Él¼¬±Œ{ÿ k7´¯;T#®æ¯:£e•­•ðq1_°Îã>ƒ;f®âhâQJ¨‹Ð mïyN¯Iuü°dáU^%»a¥M¤¢9`1ì3½cúæ³sk¦ÏFDŸe\ õïþµDK§=XÓÉ76Ù¥ïœç4â:‡Ã ¨Õ”è±ÍXthd¾¹å\„]ݽ]B(U` i`EœÊ2 :ÙåÛ­%G—´Ÿ£þÒï´»«ÍjÍ.Ràøp«äQÕ‚Nß*!ª}[KÍ6ƒ¨ømÚ ­ÇɆãæÆ«q𾽢ݨڴ1‘ÊXy•½0Ãj1g¤Áð¢†'8ÏJŸü2fUžE)nBãÖˆ?Eq ÉÀ݃w¤O%£ÃÈRxüËžçÓçAô‰n..–ƒ;çE_í¡ð¥T”óËÈ7ì ¦u ¥‚t’¡w»Ñ?ÁÔ,ÌÁbpÊݪmµšAÎÊ sR–f.Ol q/ã]®%FRHÕÃWs“@5,5Á[\stf÷ö¢6—>ñ¦b™æ ž¦ŽÂ9·µ9‚3¶*-Ôë ™dp±¾h#\> UáB±Ž€Œrê<ƪÌF6ƦÛy£SœÔÅl{WK`b˜r Í1%´—Iʳ˜Bœó ê§«G¤Ml—R3ÂTŸ ò:äcCøŽÑg :`¡FàûÖW­]YXNcyC;Ñw#ûU~YüMÀÂõ¨Ìäì+¡ùT–èijr ƒw®Ò@ÅyCg&ºÙåÚ£Èç˜.{f«R…V 1LEb÷r0F ƒ«ú|)Ém-íâðb\ÌŸzöºŠ£›KW—;}“€{oV«+bUQ .3ƒÜfŒéÖÁoÄœÙåS¶*N “øGêéÎÿbEªË¥Ü™µ;)Rå2¨È]ûÑé5;[÷°¶±™fŽyQýÜô£wNPªÌ€Ðûˆ¢˜óƒÛq@5HSÂAöª.œ¨Í’zd "–œ’‰!‡CDãF( ïŠ&e°‡ŸMéám~ö¦H¡ç-Ó”/ÔÊUÇ)Fâ ÞÚ•,È€‘Ôcr*F›ôyg¨ÙÍs­)æSá¢eY ûÍïíþÀ^áôÒ5‹Ý?UÔRÅÂZÄï?­IûYØ`ŒÕ®çJ¾H{v‘Y¹UÐgÚŒŽ c€Gv˜ØÊÁ¸õü¨•äAbðã^ƒ”cµìŠÀçsšbHéùîYôŽrs$,{ƒ¶j­zâY‹¼7ªÕä!%cËzPY¤noåÂ6îw¡,üó·Ö•ÁÆ@Ú¤G€š$‘$RƒpvÍi¼6–qZÅpcç¹”±í¿zºÆÇÃ_0ßõªGÒÞÏi§ÛÛ[M*xåä1¡`¸\ ‘Óí©ööS<Ùe ç¡Ú­úm‘äPÀ`njÁçÁøƒÄe>©«;—¹”±Tëñô§nî\ÆØCøâªº£›”ãyº ñU Ó ¿Œ Jù†:íYÕå´)+ŒžëµGQF$äæÓ¯áRí#ÌM# ú`ÔÈô)ïlMÕ›fUb¦3÷¾õÜ\ýhZˆÜN[—Ã#>•­è–OÒãˆàÈÞgoSD«‡¥xl1J·î'H—bÌõ¬i—°ÚYÃm ÂD¡@øU’ßRPóî[¬•žÍL¤78ÉSØÔUÑì‘íí|)ðL{.;œt¥=¬fÄÛ€µ=)È© `dt“>—3Ý©2ã¯ôÒcÐ,l&–kXÕ%¸<Ò7rµwê-â—Ú¢\Ùø¬AaÞˆØX˜-"ìÝN=êyLŠO!ÎÝ)–ÿûSLX€XwÇjRmÌ:‘Ö›fl×>¬³y0èÇ­H€2¯+Žž”ðb:SŠíËÔ×'Š9Ь±‡_B*2Yâ.@ßdìqÔT;»|Gwq\ÓÔÉe;ß½O!”n1L—Îj-ÍÌVñ4³H±¢Œ³1À‚ËÅÚ:ÆcŠçÄqÙ9ùôªÇk1êr‹ûԙߪ·Ê_Gxÿ©€ýë?ÓõGC¿7Öo´GŸÃ}ÑÈõÛzÓ´¤=']…!{i­o”ÑlÊ}Õ»üÀ©3ê±4ŸÊçVöþô7QÔÄ–åLdÈvïLpÕ×=û‰ñáúv\÷«zXKHüÜÜÇ8ýºžbH=Æ(•›]ÞÅ .K ±ë€:ÕºXá†Ð°B¡F¯Æ«ñéo1g•|Fcœ¯QRbК ¥º‘9¹FÀއÜTÙ7ƒ֪]ÃðëöV’"Χ1H£,ýqV®Ó'ÑxvÏN’V™àˆvbr{ã=¨·ÖU ÁsC.®£Y”du' ª¬ü@òHâ(.v'9ÅFmBi:ŸÃjK9‘ÎøïU[ý~Öܺ0"’9×ã^y!»±Iч+¯0öõ¡DDç’̇áBuÅŽ pšrÜ’­AÏzB²Lì븧9—8¯d“Ò”§#=864°Ô“2‰@Èîi«¸¹Q¤^€Rl ä´¶.y±ééRÞ0ë„˔“—½g_IWóà œg–)‰yõ`ùGÃ9?!YêÞ´ey{TÙ®üh7n£«æe‘ÈÓÞ½^¯àÆ+Œ Þ¸â³pa‡_zpíÚ»LÜ;.>×ST6ŽX“Þ ]Kjöï•Y@w« jÿX„i—lL±ŒFÍ÷€íñ«) tÅ0&S§oZ!¥][¤“‰f Žf=iÛ¹ã)”•NOPAª¾°Ï$B23æÏåU‹«`m\ÔUƒ†¸~;=9¯e³Î<¿å_õþÕ.U–9ÎFwjŽì$õ¨ðO­Ã¼r:à‚*íÃ\Cm{g%¼ó(šØdž¼ÉØüº~{Ñ´øõ[fžÖæá‡V/J5Ÿü9'š9 ”¨^nQê;TižIi˜ôéŠäRKæˆòã¾3REÝÌ¥D’år3°þÔ§±.¹…°OvïLÁj ¼ŒN§$ìzYMŠM ò¶68ØÕKZ†];RŒ]ËÊJv#¾(=æ¥ÕäþXåå;óUqÍŸZS\ÅåÛNôQÔîe£¼(úÏΩ®¡³ê:Ñ-ìE1³•¼¯ºØ÷FæRˆc¶_ ¬:Õ~{7™ÈE.ç°Üš‰“)6@þ‘Ö¯ºE½ÜZ qo$H2±3 {cýúT»YÕ¶èò« ¦¦Y‚ódަ¬f¼°ÌÜäÂÇí©Qîä–i ÂBrN2{f…]»E ×2`ˆÔ±Ïµfz®¥wt²x×r•ÇØ …üU4ýJ];SŽhfxЏ-Èz€zZÞ´åiyYÇLw÷¢_Vt¡úÖ˜&ЮԦyc.?íßö¬½àãÿ ð ‹c)”9òïµ·³æp¤oCÞÃEW\OJr¦ýM8NÙ¦£|±niÝ©Q»)<ŒW›cƒŒÒ·2œõïW]:ÚÀéñ\Û@VGnbX‚:õÛuáWF†e¸…L¨ÞVÿ/¦> Õ²'^BS…%TdŠ~;¨r§#ïcµz=ZÑnÈ9È@J2~+Ó2 ]ØŽ\“¾ÕF¶“ ȾÌ)Q¼àóeø54`HÜw¥r’w;T{x£µs0–õ'½LVñ TypÏÓ¥s!bcœTuFª€:mR‚¡•%Ðݰõsw#xvè ]ÙXdÔ¸˜¤ $8=7¯˜Éð㚸Š™ #åp;YuS¹À®<Ñ Ë7È ê­Ä\Oe¡¤wSØÝN²¡‘T(#±$íøv5™q¾½¾¶òAjÖâz¿76OÃj¢Ë"¨ÜÒ…øª¬lÍŠŒ¬ÁÉhù4øéHyR?´Ø¥+«¯2Gµv½\ÀëŠâª)<ª=}éT“¸Øô¦^X‘¿™*©>§ze§‡º„€Ü¦ERq¶IéZ4ðXÜ9766ó缑+~£Þ¡É ðëÈ%m&~ Ä dø8¦o´]:[I]縌 .<77Öu§‰ÃÐ\²jš‡,v§Ì±¶Þ!õ>ß­X¯®ì§Àl:c(û>˜ª¥ÔIÇcëQ¢Ôaµæ\aØ'aq-Þ&t+;~×úU‚ Œ±–| TjX›N’ݸ“b:tÞ³k»HQ˜ý°OF ýªý^¨Ô/†yŸŸëZç q?¿ é_YÔáÍ«B¹g £ téèÓq%±$[YË!Ü…õ¨ZÖ·qGVð# tæ8ùíùUaôÓ¢¿)íµ{oç:ã£ùÑk(Ñì€Þµ%€8ÈÍ85Â6Å%c sšVÕàzühŽÈî‹"£ÈÝ ]`½Yf‹¶Ç@(Ž•¨Åg~#y‡r6ÇÚŽ¦¬ÑL.ƒ'B¤õa’òš&>ï“Öœ’%òôQéLÄ„ÉÌéC&¼Ž}E˜ã8RI#â;TàÞ4MwÆÇÞ›ˆÝÏ Å*™ó»l6£*pôú¸ zÒD<Ó,ŒåéøRäM² ·—s°¦‡˜äÔ]N6“Nx\±ß×ö¨zu¥Ó…k¹ */2á›ãýèÒ€Nž”ÜΘ1¸ÎFã4»H"‚•¨;nI¤°0Ã5x•o ö½)RÉ$@rÊqžÕ6)2à¨æÎÕ"@Æ#Ø÷hN¡ªXéQx·“yŽâ5Ý›åûÖmÅ\Aq®D¶±°·ƒ<ÞߛӘÖqrNË&r§=©’¥r¸p'µ(téŠjhD£sƒë\‚ .C¾NMkK€Ü¤ŽlÅ[ííR4£·_ZvvHâ>ŒnÌÇUoTâ8â…ÓKE–`6’@yË©¬Žö)^vi¼„’pÊ¢-›6ã8õ¦¤·eVÈÈÎ(ì±x%@è{®]Ajú|So+¤eÈÉL2}zæŠÀh?ýóÿúÿÿÕ=oÁo*Ë·†ÿO±ÿÝE-ô¸íµ(æžAunÑrò?½ªÃ«ZßG E*'·µ0¬ëPu/案±Ú«ñÂ-ç"CÌ3ØQË=Jߘ#N¨:y¶¢é©Ø¤N>°®À‚ЭKS(¨ª•Û³¹|õ=*$‘ ËImÛÿQp=cøÐ\McoŒyÊîTŠÖì ™$rs'¯ôÑ…¶éµ•ƒ¶}Í@ȳ¼„IÈáAÌW˜ò©oJJ>T6:úR‰cÐcÞº¾„ä׫ÄmDldUägÐѱ©ÛŽXÕˆ=¶¨wá'IDƒ*Á±š±iÚÑ·¾WŒFùA‘ñõgÓøŽ[9™®\β ãAìG¥°×ÔŽ.•Q òòýÏcëE§$Ú·„sÎ0zzÕXƱê?V…¿š‹ÎÀ}ÑÛæhÍ”sƒåS^ÔZ(¤`C>Àì§ûÍ>WfjSL#\F>f™†y Òó± íS›'+š‰8fŠŽßXŽ6)œãloNB—ªµÂŒ€ gãSO¶àSfñ[™.s¸¨mâ]]ƒXãåFÞÙš5|¡zfšú³)óíî)Áe ±žr[Û47Y†ý¬šÓJˆœ`@åÎ…¤_iv<š…ÇŠFêd ÷=ê6©Å–:læ"È,Šïê}«¿hd×n¯`¸¸1ÌåÔÈrÃ=‰9Î(MΤMÔŒ b>Ô.YYG9'­4zW° w®õêõzà‘€E" êŒw®ŒóT{¤g•Al mQÙšeì(ˆ,ßhÒãSö«-¤½):‹Ï KˆBm›#¡íB[Qeñ®[s±¡\A¬On±Ç12J¹Ë)ëŸÂª‰o%ÅËHËËÌÅÎÞµb²“”` "³Û£ÚUW^¹í^{­=³\#Ÿòœš}Ä—±²Edg ¹¤ {l)0ßjó7× [^V; Y¹œçüXÔíKL·Ô´ãŒ½2œò¶:ÑÎú9Óm¬­õI.u×Çš4þ’£±î Ïb1V™muH­Ú¤2.y¼EÜûP~HäNm²{޶ìe qW- ÑnuKhy•7À êúÖ¼£É5Ö€zW7\ã¥(jêGž>ƒÖ³þ Õ®$»çº¸%æåÏ”nz Ž’xð£ ßGšÌ:u‡×µ ]Q"­´®#î Ï-1¨Û<0œ.@lUCTµ¹d’X<ÏÙMTìmn?‹D·$‰‚@ì0A5ošð¯2ón;Ôoâ…#bNý©˜u^QË+e}}(f£}Í2ÙÄ|Iwfyøñtåc¸ø/k®Úê1o!2¨ó#Œ©ÙÈIÔïÊkÅbSþçáLÜ]—”u?•EmB3 ‰O.Ùæ¡“ψ¡Üg˜w÷¥[0$Œö¡‹«>9Ó¦±´k©$•eH•¹yÈ>`Nrq°5µCup±¯ü¬jäe°ÄŒþT¶¾¸P$a\ýè5úx0¬ ]÷êE †åݱ"ð©Uî´—\©Á#áIŒ7‡‡9"ºˆTäšQ8>ÕÂÞRV¼—L¡A9È'µsÆš@K>ý±µ)T*íS–û’%P™`1’ièµkÄ#Ãa“°«¾’$·Š,¹wÎIÏ1ïVë[«¨A…Æ9¢ûÑ;=&Yݼi¥9w=ý*`òËÊ6Ú–ŽÝiLß{Ò“4‘G‰+„_RqC‰Û±-X½Ó5]šþãQ¼šÞ[¬Ê­öFÀ{bŠé†`ÞŒÊßµ3 iØÙqœþ4ügÊíAoµ bWŒ(%¶ÏqCbÖ–ÊoÄdÆØÎ*×âÊ¡”€Í)n¢,È\dW¾³N¤«r¹Æ@Ø|i÷<«„Û=ÅE¾s™3dôñ8¬óW¶úÅߎ˱P½Tu]=cQ€NÀuùÕ&ñDW’¦zSö¤±ÀÉWkÔžcÍ‚§ãŠU%بȦ^F¥ÂŃgµ:>܉Ì:ŠèŒWB`Òª}¥ÃósRîõ[Xakyòîé¾=ý¨2Ì%Ÿ˜TEGâ;6žÆÚDì¹üGúPë;<ÀÎzì¸üÏéùÔ˜²2¬0EUoµ9>¹smÌCƒ¾ãÿ›}B‹|Èœ­ìs\…"–ðÊ :U—M°¸ºŽI£™<4À&F Z'j | ±èøýE:8cV†xÖKp˜"° ¾ÚÝ›`¨UUåÐQ85/#â+’YXÝÒÀ¡Ïß]úÐKM")¸¡t¡~ÑFã˜;.Kg”vÎ*ù Å¡&-¢Æ c,ßux™ƒóKh€u$}V±”Y“= .GåO5Õ¹åŽxÜ"–![| Î.µ§vñS%‰èÆ«:¹æ&•ʯ.9}h†™­A4Æ×ÀðÓ?Ê$õøûÑèÇ8$!©HÖž3[«rJ:älOÆ Ý[ ‚ðòäóCnt4Ž`2GᚨpEåÔ¼"vÁŸ”¨ü(ßq1iæLt"d9ùf‚\ð×™V3¡\ã»ÈüEV¯æks,%(J=zP–¹rÁIÊãð¦nfÊäžÕvàÝ)WJúó®LÍœ‘×¾?SíV9Fr¡÷ …ÉØöªÕüγ•n¿­E2ÿ/ vªÃj ¦±E "äá{S2qôØŽØÙ(UbkEàí6ëH–;ˆKËË¢±Ê$$¼`‚7ëëŠÒî v²Ç Ì‘Ã4ƒ™bwÈøg5Tº†4¸žÒHâ¬ÃãµDº‘^Ü‚»På ”~ºõp°Î+¸Þ½HwåêG;gj‘j„Ûë¾{ü)üøhIJP$Œ‘Š÷6çjZ3+RC}*É£q ‘\¬wò/…ÙÊî¾+JÓîḅYdVV AùÕŠÖ_ùfHð†síUíCˆî4ëy®š4dL“Ïר ¤ñö›-Ü^/kâyO?™Fzn?µÖ¸²ÆÒÑq ï+r‰QêG­UN©qu/<’´‡ú˜çJÖbñ®þ^ÕRµÿæ1Ü ÿ@$zôÅÓæ›Ê®ÅñëÔTíS‰ít{‹;{ÌòÌ ò €$zuü(Ô:„Ʀ&#®Uäìiý'SƒPŠáaç Æsý¾Qæb7íUÉÀ2jÅipF˜¬˜&ÄmC,¸†Â=Y4Ç—s·÷9óö×Ö¹yÄÑÜêßV¶-Û@rºVPIÓêO(iTs!Îr=*~¦ê$;RFsU•ñƒGgýìoòªž©oõxå‘ÔŸ mžçµfÈÑÞ:ÉÕ¼Û÷¨ªFqŒRº×«Ôœå±ŠVir7é] ‚HïJ¯g|W«Äâ¸X`œR9ܨ!6>ô½%æ¹´%J)Ù}O½.k`\6p}éÈ"Ž3!Ûášs,2Ú‚’rÈÚž¶…J¢5¯J²ØB¿VIB¯¦@¯—µÍ|\q&£qÏŸáÛ9Îwõ¨jhŽJ¹íšœ5è­ãË6Oôަ¬ü?ws¬hÍâJé ˜‘œ°ëë[F‡">m)_9@ú‘±¢—Zö—¦y&œ<ÇanGÇÒ…?q'?8ŒwÈý¨ý•œVЀÙg;’iùäÄM€ª™º—ë"à’²«ó«Ç9§YO½¦Áp»H|²/ô·ïó£PÚÃm‚H‘ã;Ê¡7ñB“‚NŸ‡j<ËUZî1âHÛôTXÕBîî[Ù¹ß`>ÊŽ‚¤ÄÖË‚ÒcƬ«Åú“§¬ÚÕñ‡Ì#F¼†F=6U'5/¤?£É\òëüÌNù´œÿø#C⫨õÛõý2[™.`Cª$'p1åZT0Ûj«Ú¿u 0Éñ¸¤Þ4vÑ€ACšöLe¶=+©Óo.\aa‰˜çØf¾p–ÚK¶![ NwïC§‚[wÄÊTöÛ­"ÂÞ;íVy›Ëï‚G ÷=+`…â–Þ(¬‚ª( ¨6唹¯-¬TçÎã¨]ÿ®^jFêO°7Àhï+«w RMËœ?0ô¡SF·2˜Ñy™Îrh­´zJ˜]IÕ²Ä`ù½µþ7¨$ÑÉk3[§ü*ÕÃCns+)ÙŸÓåúçÒ©e²¸¢°È¾ 0Gj1itü¢2ÀF{ŽÔuo’Îi¤@¸Èߨö¨—_¦±[vIr§> Þ¬Z.±£Ý”X¯áç?uÛ”Ÿ‘ÅÔí%â®=–Ê"ÚÛI ûª½@÷-+AåÓt‹Há–x-!@Ew °ôÏZÂúæ•¥® µ+h£iÂòHÄc°8Î3Šæ¯Å: \Ⱥ½«7p$Š©¤ê@‹[Èå=JŽ£åMj‡c%¤¥X‚—;{ £ê7ßR!1«9pqë^Óø–Îß5¼£Ý0µ[8Ž8yn#–[×¶c$m×Ü€EOãϤ?ÃNþ}gtò³™qç)€¸ÈÎÙÉê;Ï鋦¡C±¸4>ã‰õíHæóR•×l(Âþ‚ LòLÜò;;ú±Í6$æÏZ]"IV%Ëý)¸n#Ϙ“µ8Íèk‰ rBž•ÖUe*ÛÒø`‡;öð9ú×]«½«…À®ç=+ÙÅѸŽKTKkÔç€yU‡ÚAûжb¸Dи‘FZtÄ¡ 1  dçµ.ÐÚÜ xüälAíò©’sœí€(Æ”fŽITªç#5ó¶©ô#¯Û]¸¶âKK¦'<ÓDÑçã‚Ôã诎­‰ðÖÊëý›ŒgÿÂ…\ðWZ®gáÛ’ÿm’OÿšÕ¸ Å,x:Ôê±M Ó´ŒÖå9]O;Íž›~U¯ë÷oÕíØÛÁŸ²‡sñ5 Ð#„ïÞŽÙë?Vú»Ì‚_ î¤ã8éW sMÕpÍáOÿÚ“b~¿*%¹xÈçÁ4[!1p íŠ#Â|S èzãiš­ËÁ=Ñ^Goð”ôÝ'=zzⵉa稓XÄé—ÎFß«ke4èüŠÒ3ƒÊŸßÚ²MDÝK¨I%ÙÌ„ü€íj†Äï^Y°w\Ô9ÿæ®–RG»gëUkDXu!}l¿Ê™ñ ì·¯ÏõøÕû…m žeð˜Æèz•iÖvn…I†üÞ‚£jŠÒNÎÎÃ×:Ù‘eÀ']¹ÿäwqµ$lƒæ d÷IceÊ*Hv§Î£››#1¸ñ”õ^\΃ǤIu*éV®#Î 'eùš½è6Zº-ýω(è=‰ïRu(£…\¬q0Îz UPÕôËy1póH§B3ùôªÝæ±q9åHÄi﹨rÌòŽncÓ¥IÑ-ä›S!ˆ¼²XÔzúÖˆÜ- wDß;¹d(@¾÷o‡çSôþÓoob³¶²2Ë!ÀævÀõ'~•²iZ=އ¥&›§B‘Ƨ™Ø s±êÇýöíĶ–6’ÜÎDRXžþÃãÒ³)îf–y%æ*ä.zÕ°®ôÔ*X8J 01Ò›–ÈeŒá{ŒRbµ9Û=ð1E`´GŒ×¡E3elyN ÆÔìV38̨?‰änj$·—ReÚâF-¹%ŽôÄd·1fbÝÉ9¥•RrFM9 ²ÛȲA#G"«)ÁgÓ¸¦‹TCÌĈ>Ñô#÷ªÝÕËÞ^Iu'W;ÑG`)š@CsŽ)DÓEÌ9zR£@«Ž¾ôæw5êᎭ3%¿ˆ¸r õ¤[Á8e]ǽH*¤ô¤•dç]½iÌ CÄ$ÁmˆïN Ò¸:ú׈ûÒJg½y®I=i¹¤(õ¬ÊÓYúÍähbŒq’r}¿:¹é:Œ¶ròÇ&9»‡Ú¬:‘¹QT§õ f™&V€äàc¿µ_ííàðPŠ7#¹§Õ&Q€á×ó zŸ0ÔNýTTLãziÙ²z‚‚Ïoá\0c¸®Çuo”œŠ÷4¬å·'4ã\3F`¿½¼â+KÄ L³ƒæXÏØøûûU»AúD<Ñ[ÎhÉ ŸlgÐïŸ^&Õô¹ì&»ŠpÍ hº?ÃB³Ñ–úýõMqƒ™ŸÁVò¯ '¸žÕxÖ8óQÔ4¨´›"`Œ/$Ó)ÃJ@=1ŸZ»p? GMv¡7üݺù]Îò ÷îGúúÔ=ràÝ^»ŽƒÊ£Ú„j<%äa¢¼ð壮F~"©·|7ªÃ1E…e+ו‡ïŠqmso”¹µší—B£ñ©c‡¥ŽÍ%I?šw1·§ÇÖƒr,ðL„yŽU…9¢Þ#ˆíeR Wåø~õ¨Û^HÒCeÏ_qéJÔ@ž.dèFõW† ˆï%h]”;v¤Ü¥ÌÑ8ŸuÆÛ`Õ]áËó$÷Ñfâ0 ÐoJ«Û.OR>¡iEf°Œ¨‚Õ%Ьƒr’Ój¦ë1Ï3æYB½9ŽqU-Jج«*.ŒïB® Žß&$çÛ jâ?ðífÆñ¼¼²¯0ôRp"kgÔ4âmL±’H9Á©Ü9*é<×>ÊfcÂû¶ ԸķzƒÔUGˆ5/®]‹8[0Â|Çú›ý(k[4–Ä ó¨È÷¡xß5âœÝÞº,nd †ŒçާŰ•I~Ö;w©éÌFÃjƒp½Êa€ ¿.wJÚê8×<Ù8üi¦iåcâ0 NqÞ¹,Ëü§v óJÒ¶HÀÎi ¯WJâ(UÛÖ•^ àu¤:#à0sJSœ×0ì è;zÒ«ÔËHÈÎ~4§9Û5èöòö¥Ëf•H‘]€ån_ZŠ©1mÔüêR‚:‘K¯R%*«’qŠLr “›`âí«Õêõ!)8¥â¸AÁ¯ ãëͲ׻u¦¤cÚœÆNE*›’PŽl‘œ‹pÅÊãlV@²J’)Ç#W&æ éÚŽÙÝ$ƒ•Üøƒ¦ýEѦŽ[°ùEÛÞ­qÜî856;×ÇÝùõ¦ï®¡rIh%h³ë‚GíV½B’ø0Ïά³Y³øl½r3ð úΓà¶9rf©:…I`cuÍUo`ò†Æãµ'M~´K …íDo3ëaÒµwÕ4+9]·’%滃ùƒDíÇ0ð†Ãµ7qq=’ Í• :Pø#=H4ZÜŒ¾@ mÌp(DÏ)‘׉#lð§ÚÈÈ3ÇÐô©vzkI û/z~°ÛæŒ+OaCMêŒù½(ã=ƤÏâÊ `Ͱ¦}3¸¢k ã›+ÓÙ™­Øt=GÆ€‚GLRZK6+Žp)µŠxŠõx×ãjàÚ•^¤?7. ú×yqÕ½H®,ÙéKt¥W«Õä`þÔµ$Ž´àozèÜRwærO ¥`"€£v¯sa 5ÀvÎsH7¬rÄà T’ò™®ùž<‰+Ñ‚•ææÇjöwÅtœv®H;ÒBœoM½¹’2ŽF;Jr$1Ĩ[˜ŒÒé¹!IH-ÛÒ£ISæôÍgpX;å^å…O3E ºCË‚½ûšâÎÙ cæ¬zv©¸.Ùwó7/SG,õÃq,qƼ¡Ø('z± ŽRv¨Z×9HAæ4Üg‘ÜÔÉ¥äÓÞC¾@çT»§‚f~L+) ŽŸ… ¸ñ"ð©rÇz|ië{·†Ö8Hg;ú’zóÜ<’r ,Ç` ÕøŽóG³›J°»ÅÕÀþiC‘ö?ÔGáñÆ*Ú%ôš}ËG&ZÝÏ}?Ì+@Ó®þ¯ e!¢qÔzzÑá.pÊÙÏJ—ÍYÃ|UËL¹±‹ŽwFeÉR Áô«>›*‡N`FÔ]oÄ’*G,Ä=~sÂú»Êê^R åztôɼ'ÎþRzJhÞx™ä;ŠÍ~øFMe·¦À£ ÿ1­ÂÕ‡o^ž•Œÿ2i ÷É«V}õ[4ŠVæeÏÙôÍ“Z™ >@ã®wÀõ Wc­hÎE›ÆÑ9çttg×±íG4_¤KB#õ2u8o ÊüÀ9«M§X]=´Ñ7}¯íY7Çu|ÐïÅeSŒg*3ùæè–ד…0ZK ê ¡"®¦ÆæÞÀÍw…©oôªïjeôÆ{XÔ4gv}öïµgo Ω0Ë+g~ÃûPø&·¸6÷1´n6 ÓÖ‘¤@²]È¢Œêõ¦YéáT‹x¤oV\‘øÕºÎ>UÎ01€(¥•œ·S…!WvoJ°=„M§† Žª{Ы2+Tkˆ\,k»=>…¥þ­"ÝCaü>rÃËŽ»g5c’Ú&mÌD5ì'þX,b7*Þ!Ÿ7j‹¯ÀÍ¥­Âõ‰·>Ço×R'¹4«yy.T“ä;´[ÚG—4Re#M »•Vv·Œä)ÃZ®êº&)²2@ìjp7=).r¤€IãÖ˜!Ó›HyQÅf£©m…IÔŠñž5f÷¦ÅÇ3Qå§\…óƒòõ¦æ¸Ž|VÏ(=Zr)RTŒ]z½©§vLžÇ¥r9Y‡™E-$YEt¸ Š}©‹+˜‘¡gG–^«ò©pÜArœñº¸ý)£{c„×ïsÕ"Vg”0*¡zœLU‡þ•´íKSš×P´604„[Ïœ‚¹Ûœv>ý>kHFIQdã †SEtì)$í½"FAË=é»g#/6yM<"@ü܃#½&`9sŽõèŸ)¹éK>mÁÞº6šAâewò¥–­6ò0#—½yæÆ·ßäž7èØ>ôç0Îv¼H&šib `Ãü§5SÖ-ÍÄŠ?’ý=¥B‹H¾¾±šò8ÈŠ5,3ÕñÔZ©ýmÕ™P´™8åϬzbÎÄ=ëyGHÎÇæjï£,S\,¼¼¾ÊBF?½–ábË;`{×¼x]WlsàïJðyØÀjzuvÓLD¶1ðëU NÈÚj²bÞ&@÷ß4*Vå<ѸeÎ2§#5Ûhe¹$.Ê:·¥C¸Õ vW-£•¸–61»®åëT蕤¼ŒY˜ä’w&Ÿù›1¦j­m,6w¤‡•N>ËŸ#ZNhð@¦oñázòÑHà.FôwKÛžYSœçµXâ¹ä…ö£±mk¨ø—påÂË×Ã>¸£ÚÍòÅ™274m^fåÎÕõU‰ «òŒd×aÕZxG'8øVWÇZMFmcN‹·šâ4݇ïøÐÖëQŸÃ|ƒí¹è£ýö«Ý¶ ´^lŒ3­Y—[OeªËk"± º±= 3ÑÜ> ÖöˆÒNHhãAÌO¨À­–»µ²†îår6Ï9)ŸR6¦íoødêrÀnlΣ ðÜ8Q&}w={U’ ˜UÃSÛ­9p±Ý[IŠ¥d\n+7â`µc( î®ôÆÑ,­ËÄ’vîaP5[Xï`ä’·TªËe~Þi†:n7éW -Ue•ñ ÜzU¦Òý°P¨UãE¿±šÈE×®>ÿ¿ÇÚ‰ÊñC O#„‰FK‚¨Ú®¦ú¥Ç$@¥ªŸ*ÿW¹«o-¶’ɱf2rúgý©3e274ÓIó½ 6ÄúÓ’B.¬f¶?úˆWà{VwêÁ{c¥ÜÞ)”!þ¿ »è°ø–>ˆQ¡òžaÔv?ïÒ¡ký•¤ ma*Ïrv,ŸeǹøU*{©ä¾ÐTPsHr‚úv¯ Iá…m†Kco†j5ÉœÃ'…„<§5P»‚[‰yç•ä#»â‰EªL HÁË(“R`¸.þv%½éíÙÁ|¶!ü[’ ðÓîíý(Ìs‰"VQ•##4™gB’d/ ¨öÃÂæ(H©ÑJ²¨= 7-âÅ{±\óŒ“ééR )CŽd*7=EE`(光︤Z¹/Ó==)ë¹c†XÃ̈ҞDV` go]¿J…w Ïr‹œ² ÈùšªqÞº8c‡ŠZ¿&¥{˜¡ îƒï?È~dVu Ë{ tË{¹RÞ|ãW!\ƒ‘‘ß ¢º2Æìªã”úö­S†u;í/–ÜÉnzÄÇo—¥hÖב]Æ VÆèzŠMÄéOJ {v$Uu“r û‘¢ß$’4€ØúŠ=H¼’.[˜ç¸¥±^bÔØe;¼ØÇ7CI¨!NÄôÛÈ¡ÕXà·Oz{}ke{‡Á' £© ïª½ÎOØ vQOÇ|¨¡¥\ g#µN‹P¶6ï4s+åÎÿ…?az/bæ»7±ªßköиÓ#›ÍŸæ²—ÑOïUÅý» -'’2ý|'**Ñ5;˜dŒÛ2+®Å¨ã‰FŸm#Ý0Kxбe\•zVs?ðº\\M¥ÛL&™Ë™ ôöà(¦Š-ÒA,ŠAÎ|Í¿áV‹7•ñªÆ²ämÏNÃ¥fh‹Í9fëæ; ·h¦µ£‰c–'1íò9üèݵ„°ç”e¤Ô[W‡lo ^êö‰>ÀñIÿàŒŸÊ«("ge?{§Ï¥|Ä’Ísw-ÜíÍ,Îdvõ$äš±éZÞ£(ŠîNQ÷IæäjÓÜÛ* ÞFÏÿlíø\º×SS&1±oOÊ†á æäßÔšæ¡4V¶O|Ë£,jÎZõg¾{–YÛ9ì3FlÀ'2\ ûG¬Lœs³‚zGt©cŠo)]ð1Sµ‹»›£ÿ–ëݽê4Š»i¥ôhO3<…ˆ9Îû .-ÙLR§™ºçph%ö˜"Ï;õ=>/Ç#|úRdÖ¬¬ÁHYÇÝA“ýª•¨Ü¤—ó]@žHÅŠõÆjÑ£kÖ‘è±ÅvXÍ &î?LÓ7ÚÝÅâ46ð‹xX`ï’Ãßµ ”,V-q*œ)Á g'µ´BN[#V8Séñ©ª¹ÝNTŒ‚;×0#lýãMÏ#D‚~uESææ8W ¼³½Gú´«!]˜Óý(–í¯0ô4.p‘\²¡Øù€î3]7"ÚÝçoº3SØPîH¤×滼š4/g Ä·«ä2Ú¢r¥ÄMÜâ“õyÅÁ›˜’vÇlT†EH›`’MBŠîÞ6²+“ÙNƒ}re¼ v Ò§C'òƒ+`¾Õ$Îí0Žwäô¨féiQ~Ó1Ø ÏøéFÒÒcmÃÑ­íÊìgoð”ûWéïYÓj:業E¬^ßÍ5äN7'hÈ9£ ·K r;Í-uü¤J°ÿÌû1•oëð5‚ñ?\q»>­pO/øvñžˆƒ¦ß™÷4-&NäÕ»F¶&DÈØÖ•¢iî±xÏŸ ì]´ÛfHLÄy˜a}… ÕoU_à 0?3U»ùüki# Aa±¡íB´®!šÆú)n `‡vHî kðÈ“B“DÁã‘C)Á“-Ïso4íÊ88Á$ûôüéÊyÏLïO¢Çáƒ9XdÞš•â@KÊŠ«UÝK‰´ :7žçU·b½3Ø UNN9µÔ¹Þá~°žEÏ•{Æô#QÖæºñÅg•Žsœžµd°y¿<»HØ$Ût¯]É,ÊrýßZŒŽÁ/‚*»Çë¢Y&Ÿ¤2Ë}#ÿÌ6v‰}ù±øUqn ðñ‘‹+o“ûÑSêèÐnU6òŸ³íVó<óOÉÍ—•°>&¬:§ X^éòEerñJñ”!¼ÊÇøÎ°[½UÑä†-NÊKv•V`qî6ª†·Æ:”Eþ©á@3…&>fǾN?* oÆ Í¥j÷†K†!â¨PO¦ÀÒšö{ä»¶œÃ,H̘Ñ8òËRОm^%·¿†>r‘ý™ÿéÏB}ãT85Mø‘µ[¥ÊLydEm•;ðÿ}jç1’hÂss'QŽõ ‡ÕƒzA¦‚[‰üL¨Õ»Já×¶ÒÖýƒ,“Pg/¯Î¥òêüʳÌÑ0Ã/9éP®dx1ÌwÏ¥±’+ë¹@œz7ûýh¤N_Í’§¨¤Þëºn˜¦>Qÿ§øøžÕqF½®júŽû‹xÎ-¡$']«vëø c#s:¥XAm¦Ïs^xв«ƒ¹¨Cˆ¯ïôYô…Þ’¦CÙ°vÚ ýH[ÆVöÔòáø‰$@YsÓ½X´N8 ›€< r[¸­‡5#ˆ£Xt›Èß‘rñ+¨ÇY&絈¢ý£ö}«-×/dmAcè‡¶Õ &,¼ÒÉË·ÙïQ´ýóZÕå²´’(ÙPÌb@# v|š×¸jÖöËDµ²¿t3B f2XŸ/oMªÁ$Q´±;FŒc' FJíÚ¢Ý[G2•$ïèhfq ´ï4±e•NÇ—ýŸÎ ê„D!ùTžUÜŸ…`:Ú¥î­3sßj×BÔƒ}6½Ä (Ò`a³Ç˜ ÂnãrÒ£Œõ$ljÝ YÜÜ[HÈ‹ocÛò©÷34û©fèÒ8]'¾ˆ^‘ ä©êÞß:ºêJ"ET ôæÙ"…äQ’¿w½R¯Rã.ÅFç§J¬[ñ¬ó(ÈÁÏíHfT€2u¥FA-Ë„Uiä…QžƒÓáS¬ækVY­åh¥C•‘j¼Ûqö».žö×N.™ãðįö—ßn§ó¤\^E.˜¿Zpãþ´«-:êtÈ9#;ƒÔ·Â­<5µÕ]lb#ÿrÖ‹bV^FC•*V9ÀÞ›deNf8>•™M<úV· ú-å?m{˜­&{k)tá4‘–2€êzÚ±î&àÝB]FmBÙ£¸Éɼ§„wøÓŸx—Ïe!U;†£ó­!¸ÎÙ¬Ó¸šÚÓY¸ŠÜ&#XÇD oÍóÎÕžKõËùZòêC+ÿà@; nX}piv7î9Ìb@Ã\|kEáѱ,?WF ‘Ì¥pW¾õyŸf8Ï]—5¥ÙéVK`a6ÈÎp ÕxcP‰ÕìÖ#b3æ\úúz³ßpu–¥Àw\=4¤Ç,a‹¨ßHnaó†Õ—jÿF:L|#© 9æ’î8H³Ë»(æÇLïŒuïX<-‡êÑ¥ÚÜÎÁÛùkêÝ Ò8~ËN.IÿÔI²»µðbãLÊ-åŒ2¹À#§úSë¢Ù-©´ž$¸·î޹ ¾w~xÙÐømË;Pí?Qwæµ”FèOqé]šYàGµIƒeO(üèÙÞ606®¢rŒ±Éý+­œíK¹?*Yó'#n¹Î)åeÆÛ~¢¤)5Qu3©ŽNIaUë½Dj mr|8“ïv'ÔÔ´uP7L~Õ-'‹˜,r)a¿(;Ô™uâLÆ2ݳPeÕÆLσíÐÕwSÔÏ«(ôõQ¶˜Fè€füªn6d%üªËÃ×þ‹¦\·‘ÏòXö?ÓóíW‹8 œ¸%p>«N…¨’Í&U«ëïF %±¿­5µ iWjåygí ƒûÔÁÉ ?L‹Ë¥vÂÒ¨¯pÑÞŽC‚7Í‚î9_#í¸X-[1)è(Žs\=+§¥r.™=sÒœÒ@Ü*-ÅäQ óçÞ\jFxËù¾ñÏQAînpNô1µ«›-€¯ô6àÓ¶ÚÌWÍ€Y.ü‡¿ÀÔø¯îZPFaý'zMþ¤V0²ŒØcó¦=½GöªkÞ/ ŧ¤Ü¦æPXzªïúòÖTÖsÉ)h\±Øg¬ú ´ºi\Æ|cОˆ=õ«ö™v/$HKc˜“Ú£ËgpmæØÁìÃÔU?‰øILÇZÒ#ÀškuVQúЬ@WäeË€w©­nâ>GÏ0ÜÒø#Q]bÝâ¾ ×– HÙ׳ëíóø]âš3}ŸÖ9eÝP°Ë׋5¹Q†}©"£¾ZvEUÏNmÎ*=źÉ'*Œ¹4ò݃ôd_´H·ª‡]›.ÔJ7ž`¶ëïÌ@oËš²[+s$aYwì}*Éagü³‰¾0AZÓGÒo í:ß“l² W?1Џh¼=ÚeÂ\išj£uJK°>ų•â²R }J1±ÄoúƒúþUU‘=ëY‰ZKH‹¿;ò€ÍÓ'¹¨î–v³Ü;ò*¡ÉL¼Ö!ºNTËШ×§ôéŽÔ4ÙXÉõÉmc’à€¼ì9ŽÝ:Õ–îô­§„ãÓÒ¡i¶Âæà´„ nG­Y-qÄd``âŒqÖ›¹^k ˆÐeÞ6P=È5IM2óÿåù‰Û¨¥A£ÞÅ;I,•5d´†dHÖD`F3µ¤(Å+&›a$|ÍîE:¼*Ùê3LÉžC@5 pü¡¶^½¸å“*=sCg»çRÙÇ­žoÉì:Tý(,—wÛ>‚ÛÌ«'0;ž´ÍÒýrRÇnAPyä\ÄÄ•ôÏJƒv¦3r‡¡¨àóÇùS¶àîŠ:ïRðQHOZ¹ð~õ{gÖg^f|¬#úW¡?Óáñ«4wÙEvüÐôܧÃÚ«ú¥òÉvä£"{zš|YWs…=…1[EªÀ·ù\Û­8ôB(¢[¢çšEP>óWS†5äµO¾zPÙYæ˜Ë#cHaʬFß n³ÊʱDÏØàUÓJµ’=>4šER3²œž¹¢i x*7$u4êÀ¨  æjœÚl—>i_”™§WL†ÙKGg†÷µ.󇆨©âÎ#*y˜ã¸ª¿éÐiÖ¶38h¼F-ޤ‘ûPºÜxàŒ{zzYE†Ú†êR\é¬Ñ<§uxVIÅRZÉq%Øx`¶ßÿYÕu‡µ°†(%ð¢Sêvîjw«ÿ0H’}sÖ§pæµxúŒ–¤“[Ì 7(ÈŒŽì;~¹5ã”N[;{ÕŽÏ^{{5†ç•%C‚ª~½zM}\dIŠ·ÛkSIkc|²º‹…?d20çš‹üzö×_ñÒVVR+ƒ¶ùõÍiÚn¡«`·P³¦wCé]¿Žµc*å”y뚦Il–³• sñÐ +b-%_æ&FCQ§ä‹Uh"„Ûª¨ žaëV;)„6œÆ2òçe©°LgŒ‡‘zjK!è çØPíZ']2å B|øÂ_•b­ä×WRÍͺý“Ó`*ƒÂéô‰Æ‡H—Um=m¬Ú`Â/ƒ.ÀdcfÎËïW6úÑt—ç“T½¹uéöP~†»'éšz D/&ûs¿áŠMµÓ¦½ä,‚ÙUÎhÆ› r¥Ã™ìØ …e4¢V‰”«Çöó÷j­ªµ¼ÓÍaj‘<­œŸÏ¶}(qz¦DœFƒfå9ôªÆ­«J!k8/%x󸿮æ´]+Wº¥üîÒO0Ò1ËíZ ñ¬:¥ÑÒµ' t¸ð¦; ôŸCúüzÜœm^‚Enh³ºïŠéT=3A¯J±+þõJâ{ÕÒ´k©Ž …åˆîz•|ú^êåæI¯&xL¾"Çâ¹ß|ø?­L¶v€ŒØ£öºÀB†k7 w VÞŸLÖõÔÓí£¸K‰¹œ4꼋€IØÕÊóOŸIš8¦š7ñA+ÈNØøŠ$Ð&£¡Y¶¡\úÇäFjŒtÅ…ŒnO2œjÔ¡Iž>Ur©žÕ]Ó5Ž¿ŽÆØÍ)í îvY“è•TÔ^d*͸;g"á±å'ãM$%›8%W­O„òïÞ§[¬³K¨Ï1oÞ¬¥ˆìV q¹;’hYÓÐ_3 yI¤€©ly¶589š?´­æSúÔØÐF6ëÞŸ·µžênX¡’b:ª)cùU÷CkË]*K{È(ÐŽ˜ÿ}i›™ãGf/éPžHîcÁÁ÷ z¥Ð´þZuî}(@¸ ¸aš¼YñÓÛh°ZÇj%¼AÉâ9òã±ÀÜœT¨&¿¼Qu}rÓLÝì{‚D¤3‘Ž´âŒ ~Ý¢Y•y—ñ£V÷±·–±Û¢¶ó‘n_|ÑÝ5ešÙ¥~PTò|zÓÉâE#|çqíG4ëØgÌoå” ã±ÔG "²ÁÚž‡•ÞUMf¼[+jM4Ê­oª#¡æ ¶N>dÐp>ƒSÖ›•ù£ è’ÿò¨ÌƒvÉÛãXoÒ–™&­K¨Å²ª¾é=þçýšÈ5k´¹´hÝŽÄa _êÆðž;^ÏË»oïZ'hoü-…½¡Š$mä#ßÞ«Ú•»iú¼ÊÇ“åAô;ƒùл«ßN[:„oˆLxŸÙ>®¥Â2éú…¤ž3º °ÎTúç›§­ÖørP«5ª<øÙYFãØŠ­èœc>‰x×2ÿ€™¡Ø2ÿJÒáâ;X²†óF­ÆàzxGò°þ¡ž•É¢·ž6¸¹Á(2Ò³÷&£&¯¦ÚêVÚd(÷N<@È1\g››¾Þ™«L+m|§TùIƒì{RŸOUËBþøj‰!¹Yå+ëÜQ0êc»‚3U.#¾…­nmÖ^i¤B¡±ò>•òÕÆ¹¨ËtÅÜ j¿ý Ïx>•¬f’X®cš6r¸ÆÄu÷WÐZÔ‹t˜ñ=úYMol͹‰ùà~ôNÕ¼=bNÌyOÌb¬çRAÍ’1úTí;’ê,j0çvÇP6¡º§[]é÷Y¢%à%£wÎÿIöý+ ºúöŸ%Í›‡€ó–>˜ ô4 œ%F3W]#[’ 8@$PqŒ¶¢úf¢É©‰Ëa¹ƒcçšúViñPss ©¡ÖÓ¼Ë$žXØò1>çóÅN½iÊp==j»u}ª³Ï*FõµŸq^¯¢kQKe1ºŽòÕyáhÿј¿ìt;ÖI6™ua+«1æ;…y&c±«FŸ _éë2nÊy[ãW_£ûmÅXe9XôøÞ­\G;I©Äª3ÊŸ©4úÝCÇÊëÐþ•Q~:UýÈXZK5‘¦L åIò©ø ÃÞœáß¡~´âu׿ifue˜Y¾ oöÆã›p: ~_¤MãSáå·¥xÔLªƒ˜åNvk€ºàAS‚é[' ¾à‰l.¬­ÝÞÁA™AóoÜõØû{Vw©}j\P–ºT†].f,'c¼ :«zŸO_Æ®vÍk£Ú}JÕ *u-ö˜úŸzϵ-ûQâkÉíáX­äa#Là ’7øœæœ6¶Z\ËþlØÞVëòô£ü/¤·‚ÚåÒŽvÚݰîÿ°ùûP5·ŽâE½”N<’.FY{—ûéT¸b ¸=óN…ÅC¿fTPŠsëØP—Ö!ÑíH¸G‘¥(öÜþ”Âqœù! ŸVÍC»¼š[¶#p1Ö’líŽ'f.dÆwªõîŠÒ–Ø…?ÒÇcð¦cEpwõøÒ$UÏ2mžÂˆé,hX¶üàé½â-z=:ít˜mä’ä€Ia…ÁéŽæ—§Ù<Ý]±{—HÇ ¦õ;(®°ø (7¯± ‰+˜d^SO­º»Ÿ]xcRÒ“M:u·ònƒ‘_¬Œ{ƒÜc·lSÚ„¤ïUË£$¤ª úšàO…p0h&¼å¢A±Pw÷ª÷š7åq‚*u¤Š’«‘œv«æ†Z僌„OíV€ѰÅv§[H±Œž€fŽé´ŸÏe3‘ïV+8äiqa“¿(Ík;–!V<Ó4fÏOV§›VÇ;~»1˜FD r3Qn,$¾Ñe³W-"ÿ1q¶ã·Ïz¥Mnc´‘ñöFk– ¢PÅI=›¹®Í¦BãhÈ?åÚž·ƒþYb9ƒ¨¿HöÜhñý‰6ä™:åo×dœ9ôk§}r{­N®®[êð‘…QØ¿õnŸ±èZ%¼ó .€ç+EZ´-’­á…”,.™é‘Ú³Þ+à›Ž#ס¹²¼ŠÒ!‡!e,v'×cëØT3èsB1¯êwrãlgà7üêu§é:ÏZ=´SÇ¿ˆS™¾LwÅÓõÝHr Šl©aÐu¬óЏ-]çF+Ùæ{s²H}G¡öéðªÎ‡¬pu½üv–qÜx¸ÂKœFãbp:íïØUsXÖuÎ ” RþY—>XsËŸe|úÖÀuþ°²TÔo¡ŒÄ¼ˆæEìHè? /Òìv¿UÓ4É/6Y¦>Ÿ| “ùV‹ÃºÓk|/gª:ªI4ÌTèd0Ù—!ó’ÄœÕKŠx¦]9Jµ›’Y<òê‹Øg¶ßZ§Å¨3¾KY¦­ êIK¼›˜‘ArȦŒªƒ/¶ø¡Z¾¹e¦Z¬—hìáU0Xúœ{VoÄšì7ÚÊRßVRÃ's·åò¤YÞòAÚŽ%É‘T(Ìž¾ƒÔÔ¸ß8‚0rw$×®Ú hÃÍ U힦«Nþ#³ 8$)¦lt>•páNY³{™äš#¼¼«€1€{Š=­Ûé·„Û¬“Y«(›×=ÜЃ8-Ö™¹æxÃG»ÙÆhÍÑÉ ¾½E7ä’u¹ÊKøœØlç â­UÅÕý³ §±œsgÌ~?Þ¥ÉTQŠ…t¼‹ÓsUí@ ]~èÞ¢E§>§2[E3!'YpMÄEZòäU„~çûU®Ö8­Æ‘EGœc­uHa‘Ò»Þ¤ZÛ½Ôá9¹c¹öô«U¬Â$(ò€…]xb`ö·0ƒ¬|Æ?j±A ‡.ÃÏÛÚ•vB@F c–ô>G8ò®Mu.^Ú ;“Tí^SÒ¿6Òdò¾5U–O°P:Ò¼5Ëû[‘„ÁFBI¿àk±êë|œÏ)BÃ<¤à~TPh®a’ÚFÅR§Ú°û+ãÕ/tÛ=>-ƒ”˜FœÄa±÷Žÿ![p†¹©7‰ªK8ñ”7™Üöa×׿J¶q6“k¢éîà³É‘³Ëÿ-ÿ ¥Ûǰ£VQ»KéSµŽWÒG×ãÃ=”ÿzÊ´ÉåƒS–ÒåZ)£Êº0ÁRãªß`²IŽîǯ», vd3Œè*¯ªh3 6w‚0eT, ŽõŽÊ×W—Ò98òŒb¤-˜‰ysïRb†22Ðx/^—I°–Ø·‹“˜DO\ñéÓó«n¡ÅšriÚ•¬†O©FZKp2àü=3¶z ÂãÔ5½~òÿVXe¸ƒ5âåP~ÀÞƒÚ¦ÚÝÝÍjÒA"—e?:uò)YQ–D?e¶4½Q6:½¥Áòˆ&I·+ûWК·Òßoò{ؤgÿÂÅa\U{ÁÚž¥s¨X[êp\Ï#Jå¤^VbrN7~ÀÒcà^ëN†ûOºŽE•ˆçV‰Æ{w¥{LÐx‚Û‰4øu-9Ò(fq‡\.ûvÎ1ó­Â ±ì¾l}‘@õxî.ó$‡8©š‡üºeÏlUbúÍ/S$ò¸Ü•D­í¬šÏ™ <Ç¡¡q]5ޝ¼À(oµþS±üªUÄ·7÷¢XÞie>EQœÿ¥\´o­iZA²Ô.yÛ›™Tn±ç¶h>»¬½´/ ø›c¯Î‚YÇ&£HÛ–äëñªæ½¡Ûýv"³Ž8‚€9²zûâ£^p¬è¢;5ú±œøk…f#íòª>­¡Þéºt÷RK‘ Ç”àäì6ùÖ{yâ7Ý(?Zv;ÓR”Xœá@É5ë’ Fé¤UÏ@*©u`ã<ëó9&¶“”‚Tv«¾qg5¾m_™¾øo´>"¬¶ñÆG™½{J‹«é]³"0U|ÖxV. ·‡ë²ÖäúÕƒCÓÞçSå ñ§Ãñ¨¼gÀÚ¥)× ²Á¨Â9žT<¼êVìp;žÂªúÔ’¢txÈÈpvÅ}õG•€ôj…}a5…Ååä!mážFÈ>P7¬Ò ë ÷"ÅÕÑ~Ê0Ã(øRÝ"-† ÷QM{/²làß±ŒoùPCmàê÷oólª€6íé½9 ðž¡v/%¸’ÖØ™Îþ ~™éñ­ :ÒÎÏêZ}´vðœ–TPÏR}MccÃ÷¼3¨›»hød§*È2±é>ƒÓ? ¥owŠé‹Û=GÀÕ·Súâ£Ãvúö…É|×xÒX,ñƒ¸Ævm°HØäàU‹ž`‘êrYJª‹?2¸ln ’>Ǥp¯píƒ%ÈÓD·Añ¦%Èø°ùoVýoNŠÏKšæ ^Sñ#öª 3ÜÏ©¹fæ!ŠŒŽ€ªÕ_ÊWR Ž»W¦¶3B@êF*›ÄDÿçhã.àg” “ФGkzn/ FdzmŠ7 Þ_ßÿ"A—2yKcßjwþ ·R¢[÷º—9 ±ò¨>NkH±ú=ÖôsâµÍlr°RÄôÉQŠ«ð½Ï+7Ö¢öÁªœGZî·s‹dˆ4î¥c_™ëðÕÇGàx8SÏ,ÇPœ®:a=p:þuÝY#ž3τ݀ÜS¨K¦qbÙ…g¶¿…ò0ÉVÛ·PꕬjpÚY‚.äŸ@7&©ZÏèGÂ6·M,ç*Bw·*æì{–ÅJ´ÕF«7*ÆÈÄ`èí¤‹\/¯qE|h™G+†øo_n4|Î8Å9•o]ÈÈ®7JdÈ’pÌvÝêÙ[%ÿ×3ânNïM]j0[ãĉÎ{)üñEBáI>”å4òa°&£Ì„xÅDcr1ÔÓÒHÊF£j ëÛjϦK Ç!Ûu².$·¹Ó.ŤöáAó$ò|;UmÏ7QA5k‡GTQ΄y€=ê½-ªH ¨À=j5™‚¹þÍÇ(9=EX´-&;O×2á‹Hì(•ÝòÙAâK»—ÏíUص{Ëké.$s,sæ&vÇ·¥9©Ã …Ô-š~Ö;‹Àl:·øT§•£ êpÝ)r¥Åƒ¬‡•Ôs/Æ«ü™<Òœûv¤‡>Ø_Î§ØÆÁŽG”ô£Ç€KÈ7'µ?¦\ &Èœ’žÞ£÷©CœŠ…,ÑňÈÉôªm«µÃ S’N*Éí\eÈ®c5Ð06¥ éÈÆ!xrçÛ{Fº1ës“…I8ì Áühw¨bv”1LwÎ1Cb¾šK•…'Iê§r=ö«$,>¬‡¦ÝèF¦a–9biS%Jã5—ÜÃáË€sßj^ÊãùjÙlúÕ Ã>{Ô[ÍÎî_?‘6>Òt?Y?Ó³êoØÅ¬²ÛýoÄšh²ÆÄt·Jù¢mlòÉ‘ñ¯¬?øjÖõG€/´‹û;ˆ£°¸çµ–Hʬ‘É’B“× œP­–RñƒÊ3ŸÊ€_Þ‚lÉŒ5QÞÖK[òŠ¥Ó› ”÷ùVŸ¢ÙÅe¥¬€ï*‡f;m¾U„ý$ñéâ é´ \éˆÜ³Ü)ÿêìôøü:Åá-R}'‚êW6DãmÚ1íê=«bU¶¿°Gµå#F³?¤­A×IM&åkƒÏ7l(;™ý+žÕà›Å…™NC)Áü\My”¸ ;cNãûÔÍ?UÏüÉ9•Îäýßz·èú}¤÷2<Ò‡1Â%è}ÉïV$8À ìd‚I¨b÷þzF€FñÆ<ÊÊr{`ìk+×8~Î Iî­-’Í–Ž$ §à `|Õ»p¯µî…eq#æFŒÏõ ›ó€qÒñFº—Q*½¼+áFÊ>ÞìOqžžÃÞˆiúz*x|¿ëRµ;›F‘p˜Àÿ¸VoJu¨B²Lãðc½[´ë&”¢¨É?•½ÓكŒ‡cŸZ{b$Bä ®EÁ·WÚѸÿÛÃÞF^‡'§®Õb]:ÇG·k{8‚gí9ûN}I¡0YÚ^^½Ó[¡ 1‚Íþ•~’5–??qUýOG³š6 9ÿ1¥á«X¬tåÓÄS$L‘ z{…>ÿsQ†Ê"yãNr2<¹5@×|#tª`%X¶ØÅU&Ô¯tó"iò› ßhÁåcñn¿5¡kW sqg<Í ø ¹ÉÏCøŒ~ˆìZÞý.àäÉö?á‘ÛáQã» '͞ƠŭÉa<ôÆø5&צ[¡õ«‡xŽÄ7o…hZF©Ý·‹ÁÔŽÆ¿Cã^T œŽÕÃæ,Ç#Ò¼†ýÀ¨§Q¶Ï,áŸót§c@ò‰cÊGMûÓ‚!ÌI?*A·…_Ä©aшÉéÙ²EtŒî*±¬ÜëK9[hÊÂ[ËûD|jŽ£g2A4-=«Ìó¡õ¿ µÃ\Ë:ŽÙ\ŒuªÎ½Ž’·z­ã¶ ec\ìzXn¹;ßKq¨Þy¤o²;(ì£ØUAîùÄ&O^Õ{pÅŽ3“š%¸U л•«;áTw¡Ööb[ƒqpÇ zš( ¦H銃uޝ$¨[§íU™áƒ ïŒl)Ëk†·Y©1I³FÝýǽ=oûE‡/oz‘õˆc>g›Ò'Ô x ¡bÀìqµº¹‘â ÌN:TVšI)n»u©Vh[<Ã(»š5Ìg“”÷ÇJ) )ÊA¨—º•¥¾D·Q«zßð Sq´r·2;)È*1úÔöãion-mâ¶+áfrrsíè(š©æõ=êפ[¤Qs¶Ò·Ýþ‘EkÔœìÕÒ­"BTmšw’ຬDäŠ7 ¼^ \ø€aЉ©Ú|(·A|L©a¹øÕçUÒ˜33‘[|±Í&ÇE»³1Î’¢óv=½ÔIåa—Ïê:P[¶•ävR¼ýª¸Ö-Èå×-œêh–›càÛ€ËæmÎh´QˆÛ$|ªB±q‘ò¦nÜýabvœže#9ÍaúÏ ðÛñMÆ«¢h¶¶.[ÊÐÆ:°“銿ðeüÚV¹eÄìRäJIê[¡ÿð±½i÷Òº½î*¥wnÒÝ™R~RÀ ãEnÓ§ß%Gˆ¹ÁÆ{{Vô‘ô”u•~áÆx¬þÅÜààÉŒk»ê{ôéÖ…gi¬Aœdž‹ëEìÖi§!rÇ«LѤŸJU˜˜q–_Cê*›Åš|º•åά#fr $¨=qøÖ-©]I},vvQ02Í]ô>Ó-´w²¼….à3Ÿ^ܾ˜õª–»Â—ÚEÚÉiÏqi#a%Qæ_fÇ~õiá›{ß a–9ùÔŽaèjÃuz¶²„d –ÜP]C‰O×#·Š&Ky<­)êË ¢öñ¢iKàžfo3`cÒ«— 5ÁvÁå>ZbmVêÓI»·³$²‚Ÿ»ž§ãŒüêýÀú‰Ázd¯+È õÙˆýªão¦ä縩w6ì¤DL–Çê+#ƒ…ø†~)¿–£†u&Wç=†OOj¾ÙX}F…ÃÈNíÛåK¸ðÌ,% !Øæ™ÐàÓ®/Ý8, ›ïµÕ&¿x #ˆQØzƪ¼EqéÎÍ4¬B¡__SíC4«#2¤cÉ ÷õÿÍ[yãKIïu1&4‹(½‡\þ•‡ñUòXÙHϰ=€$þ•’ÜñdWè9¡’Ž™ *,O>Ÿ)(þ4$ÿ„Ý>^•fÓµÝ/Y8äð.þŒ‡ü×Ú¢jë[ù|ǽ…CW  ÒŸ‰ò™'94™‰aŽÔ*â-É¡71€ÎO¥.f ‘°Nøô¦&SÎ[#:ÇJk›A?ŽvåÏïNAåk’O§-6ÚLh®rçÓ°Žû ç=é1]@ד.GnŸ7¬¼ÒYŠYB±”#¿á@Ö×ÔSf"®7§<#VÈ';b´½'ŸOŠîéyF þ¡êhÜ6÷7‰Uü(Áû]ÏÀQ”cgõâØ¯“^g Ö¹!Øc¡§£º‘Ÿ àwQ;gYöñUѳøÕŽÇH¾[‹[ˆÌ3[ ‹Ç 鑞¸­6ê1=ªä’ …{Ãÿ–‹”l jªJ|8ˆñ®ABc †C†:”-‘ÔI!'8Æ(¶BO/`(eôm¯ÌA' Ÿz§p®D®ØŠ®ë@ÄåU’I‡ ƒ'ýúÕ@ÎÑÍ%¹uo½ÍŒQÛ;»P_™OPTã”úÕÿWâ=6ÇI†êúf2ºËe¼ØÜm°ùšªØëÒë1Ms§Yb4n^i˜OÀmù÷ª/ÒV¯¬èÖº~± 9XÞHg’Dp2­ŽÇ”ïÛ㊠ßêœ5v3pÍ××.u,šsdËjÀ૞„ õ#}ºÓº1Ôd‘£¹É6s'0À_aéZG iÿ[¿Ìh|8G3±î{ßåZiL–Äœ=aP$Ó|5c"õß~ÕñE¦kÓjö LM–ý¶î±ëC­îH}‰Å[4¥’` ®yö iëëI-Ì£(»œvªÀÔ¯/幎ÚFŽVÉÂíŽÛô®Ã¤Ï2È'*…wõ8¤[O}²=Ä‚ 9BŸü ~+Y¯fŽÞ ’l2p(Ÿü)Izæwtl£ûÑ(µGM¶K[9Ä0Æ0ª#Só^ÉõI#Ý‚ãcüµþÔ~ËVԮЫܔ£ª.FþàŠ™žT¼þ+?9,Ű $ûSw-Û!ufŒà€wªÆ§,… ¶/Æ=ÕÝ«#HVX…%Î gފǬÉnWÝŽ:dÝýzè¦Ûôvkõe¢òŽóNÅ /ÊÝ;Ã˽4„ŠFOz…#y =rh«{áÂV02{žÕjŽòNò3“’j£4<À–ß;ïVýE†}2Îæ8çŠé‰¢#gÆO0ïŒbŸÕ8pÍFg\í𪤜9qÅ&Ï(èÞ´ˆt“‡q8_ðù[ÿp½Q¼fäUÇOZýQ…¤ÈªÛ2ƒñªî®·ˆ¬æhÑXtüþTæ?ˆ¡z8ëïïG£ne¥ã½x®{יЮBæ’²f0̸'µ4×KÏÈ#b}k±Ý$ŒU³ßn”ãZ£q£w=ã%´AQA@ÁrHõóÒíãYì2UÌ%˜zó7/ìkWÛècšöí-­Ð´ŽpïG´hnæør˜›¹ÎOõj)r¥‰,䓾IÍDW©¢®ÜÓ&”_-ƒµG™22*¤vè×7 S«Õˈ^ž^ƒçU©gšáˆfÂÿJô¯D¥$V]ˆ9aºš)ô“ᯘá±è{Ш£ÛzEÌ!H£˜·ð¬ÿágÌ}+Fµ½FÓ¡Hò¯(¦L|ªE†§áN`sä“§±£I|¬b6$ÛÓ¡ä.#êr1Š’¬yÈ®G܌҂€Ž«´ H9‰iº•íŒÞ$3žSö‘·V­Ã‡uKoG·7%ÊD¢H›®Ã¢•¯D"Ò˜(Á‡(ÞµNgå;׃« 𥼾Ÿ6Kmòi)XÆó×¥{MœÜ_´Sÿ:5BJ¸ÈöëIÔ-SÎ`Qþ˜ú~IÖ¬åyÒàaÕT½½¨t ±H’²ó€rAjå Á²Ì7VP;ÐN#½{•Ž(r¶Ë»öË{û '£[ˆtÄHÀÉó¶;“Dí¥–Þç! sŽB¸ÎAíRí¸S…£ÔTNÓàÔ$Bqº£°=A ü껨pf—y,’ÃEs†C†Ûõ:ÇKm-SÂO ÙåýO½{×P Š{‘±¨—ú¶™o ›û¸àöóõ?7?*©jšŽ~­ea4·+?® è|ØéT¤áâÑÈÜ̇gãZ•¡1$é‰Ü}“÷§Æ•ü.K»‘ K¹êOE¦„ñ&•QfÞF(ßqYÇŒ"½Â¾¼¤×½A»tK·#uÎH¢Iva ,AHÙ”ª×â¥þÒ s®Hô=ÇãUûÅdc…Î{W´ø• y$#›ØQ»n(n<7¸ñ6 3ùÑTâŸkXTžRÙê}¾«¾Q¦JFyŠœT+ÍföI<ÅdüúСÅAšHušß˜žcŽußá¿åR4»û&–ÆÊçÇ…|ñ?¨î=ðië«©`™y9$Qû jÞHã„H÷ò6ÇåV lÍ \zÑUÞ0ÌqM]-”“ŒÐÙ¥H‘óÊ£&©Zž $v+cãÒ«’[·fbÊ¯Ê Xt­*ÊÆuõdçg#,O±5+H¾‹Pâ‰%ó<á2žÅ½?O‘«Á‚9— Hõ ЉuÃZEêÿ6ÔÆÞ±±—J£ñÏÁkÂZ›ZÈÒm#a¸*¹ê>ó}…¨¸g ÷GJý‡ÐWÎô3P0Åe3;¯Lã#'áïPìí1¢6Pý3¶Ôr0lrM+ ÌX š.¤º¾ŽÙ|¨§šL{vüh¡È¯u)#Áòõ늉$w®©“…ß5Ûé„6Í9àtsT+ÝsMž)Ì–ÇÒD#æÚ¾Yúk³¾n,MDO¶7jØ$™pG70íæcYaŽt>h˜|ªåö g \H¿ó2®?èŸÞ5ÃíoM½Ò·S½FžTðÉ^½zÔí*Q%›’~ËŸÐT…a,…Äw¥HI!“Ôö :Ì«=·‡4ž(y˜ÔÐËv6ªËkr]|«møQ ö­9$!ñòúâ´It>ù <^‡ïDZùö5Oâ5]5Œs$ÒL§ Ñzn=êŒÐ4R•ü)ÿ D|Ã Ž¢ºœ§¾õ"yFßd׃€6éMË*”*NÆ¡ìVP¼ŒpFK¿ðƆñ[ƒÿ5ÿT‰ba“æ<«Š pá—$cãC%‡™¾5*)+aÙ'Ò¢ÝÄ/m^Ü?.zþúTÞ76¶þ ×1Œ¶wåÿJ¶,B)f•z‚NÔJÖæÚV`&Gå<­œ~åµ·”‘Á>§"‡jJÆÒhRRcu8=jµyso¥Û‰gÌ’·ØLîÇöõE¾{FüÏråØíº£Ð{S°Äc‘0Bž¢¯1¤ÛËu.¡$Šï柴IûÇÔ~õa¹IÕW'6HmôÛ'$Žb2ÍëYþ³!rUwÏz̸㇆"]NY–€j´l—Ql?÷šæ•} Á­]ןÉ“øŠ±ð–«×®4Y'BÒfXW˜g#íÃäjGßZiP4×w1ÀNo´ßÔÖyÿ›½Q#¶F1 ¼‡ô¨—ñ1kŒLBzúíK´Ö›Ož¡<­ô>Õ¨Å=¾©¦Ã¨Û74S'0öõܨt²B“"ó‡¹@‹¹Ï¥_ør ZÞ>{ù•b#Ë Žg>ßï¥Yã`0:zPýJàE9/ö ŸJ¬jZÅŒÊ`ŠñÎàœΫˆ\É:†‹=ºš]¥Î,ÅÌJý˜[ÊÌ}¯Ê§ ‰&f—Ê:j.&™c>µ ž±2Í'ù€9ÏÆ´¦¾´±ÊÞjö–øê%•ÀÔsÅ<7yõëiÿíÿÅ„jÜeé>–­svÒBÊ|(v[”h|-k£—3[‹‰Ü`É"äcØ•úX®­Ðæ¹,BUå'™ŽÒÞßxãÙÏ1ÜÔkùî!µw·e”UàUøõ`Zò²HÎX’ávü»QýìÏ/<®Ißlv©0Zxrʸå“z—LÊܨXv®E†eÎy”W’Ä $–À¥Ì±´L$—æ©ÚŽa¬Ç%µÚRE8)þ`kåO¤Ýîóˆ"þs õª´i nRç›rÛÇz¡½œúuàKëwŽP¡•zî L†òC 5]–oW\ô$Q;Ý­É0´†Mð8óðΫw5•´Àãì:ÀškE¶»¶K˜oah]X7ëð÷©þ4hqç¹§Ä¡—|õªÜK°AѼ”N^C(ñVUK™Úhƒã.½GÊ­oÄöi§5ŵÊË'DŒ6}ÇP*£üû»‡žf/$‡,ƹ³_«‰1‚½Ï¥ wERsvö¨ŠÁ_£S„·®îj#Þˆòs7åIŽY®3DÛÔg–´ ³Ó…Œò<\×ñ¶Û)éËéïVhÌis”QæQH¢G(ë֟宕îAÌ+ 0+¸®µy—™pM2"˜ŸM€Rqß¶*ã¥ÞÄÖˆ@*X“ދıx>J.øQ€3P®æð£%¤êƃB)_^r0½*\rŒ(* ÷×Lò[¤î°ƒŽPqñ§m§–%}ÒŸ‰íSe¥tÖ£$ÑYÎÉ2 €è}*—-<®ìÛ±ßÔb¤w´vÆ) ªI_½íY—}'ØðŸÉ¢Ýh÷I1»Mƒ °Ï/)Çlç½Háÿ§.ÅÕåæœÒë6ÌqשNaéG›éo‡uš#\³åéÌf íðQ8‘aˆÉÍâ‡R@!ª³ªë-0úÁ˼‡Û·¶(8ÔÝYVIsþŠÑ«%Wt–6½yÎjέ%² `ŸÁ‘z?¥Lƒ_–F *ªËŒxƒ£|»Q[ë–žÐM#–,½ê—©jÚ}¬-ÕäPI÷yÜ~½S¤Õ,&˜¤,ÓŸê €¯k·SÝ\ x‘¹É÷ü*­h÷–º\·Év’,k—à‡­TtírúÏY·¸±”Åvü¹±Æ;üjuÞ¥©\Ü;ê2Ë$¯Õä%‰ùÓV·« á‹s0è*}þ¯;…Ÿ*NÀoŠ¿ð†¸ot`«/‡ <².q“ØüÅžþêÆo!üôªî»«> Ü‰˜¡ÏÙõøÕBãKÖoæ‘ô­.êô.´ ñ#¥@“‡ø˜œ6•*Ge_ÔÕ¢ÃDúB³ÐZÆØÃkk#xœÞ2–àŒ‘ò«÷ÑΚºF‘,:‚MHJÒs©-„`Á osŠÐmåY¥ 784Xª—©j–ój÷VS0œ¢ç¾6"©:ô–Zz“;Éò§vªâÜxÓ‹™nO.<ƒŒû …uõ«ûϘ©Ên_…i<6÷O^qüè†$¿æ©wÁôg­ÈÙêü¿2ÀÖ¾x´¸ŠÒœÉÙ=jËÃZŒÍ¨bðƒ§m¶Cý«L³²P2Œ§o•–Î7‰yÁÈ;Ö¾íŠrª—\#5hYæèHÛS°ÚÇ B0¹ß$×>¬~°%o•©5ÃÒšš6tœ¿Æ“lŽ–Q,£p;R9eªŸ.rOíOȾ$l‡¡ª_YêzŽŽt­XÖYd pÎyG'qŸÃ5•Ýpî êÉoxÿ\º‰˜§tèëíX¯ÒÔ7Hz˜ˆ¿”E³õÿ j©â´g f‰è`]ÜLŸWˆc•‰ 3ß?µ\#¸xÊÆ ‚vøUM!iظ~Âñ%µ½¶Y£Îv#àzФñ Ùðä–ïmxd[‚JÂã΀wÏqþ÷ªº¸]ó° ÷1xÓ<­œê$vª¶ò\¢à3òç×é&>aµ?¥è¯©ëÛª·(<ÎW¨Q×û|êÕ'\Ú1 †^ÙïBoae% 0qƒB&·dÈÇ—Ö‘i¦Ex$—9\¯(J›J³#Ï,¯íÌý)”á¹uɦڻ0?k~Qñ'aW‚b²¶+}0fc–X»ü[ûRx–£ZÇw£F-ùA†N]ð­ßãžÿ k†5¸onãµÔ¤\Œxoœ ½¾?­_NzMÈ%(y3ÍÛ´æåóu¥WÅsÍÍ¿Jíwµt(ÕNfô«žÃà Ǘµ3ëòEÍà9ÁØžÕYšI$•Ì®ÎÙ9,sHBÀu©0êóÛ_H¹»az×åeëñ©6ºóE•¶Lžå³½Uµÿ¤-fÕZEhõr’üj¥'Ò½s©Zƒv‹™¨±.Jó ŒzŠÑãÕ`]änAêjtz¥ –4k…Vs€ ÆjÓ¤K<îè’£Dyƒn¦Ýkçþ<Ó$ÕøëW½s“7†®BƒòZ¥]pÙEwdò¨ÏJ«I§'!_7¥} ÁöÇÀºe¤CÂt„?›ß'{昞éÕ3Ó˜õìh]ôÍLã ÙØÐË..½áÙI‡–x¤Îb“8Î6#ÓÆ’ßLÚÔ–w:-½Ê Æ23R0ENéNâFV}á#bç˜]ŠŠwQúA½Õtøl­ÅÝ´hÙ#ÄÆF6z÷¡PÂó34¹çcœžÆ¬ú-œH­q;rÅ—sèÉ¡PܤÒOpÊFCÊF:lMgÜ_ªHth­cÏ,® ŸP7ñý+>ŠsÒJy4Yµy%…Ö99þÕÚUV,Ç@È·‰àäÆüÄU¯…ôvÝúÚ%º¶“ÈÂ'É}“¿¾Ù­L77¼W(ñx{2¸ ·Ê§?èú­Úe=d‡ÊFÞ?*´pæc i-cmr.9äiC€[; ½€‚ë6èò72ÊzãzôW[6’0pAïQ¾©~.";®ÅGqÜU– ˜ã¶ñO(çós6ب©Æ6ú|¯<ÒöQ±ùÖtÚÍåýìŽÅ̬ÜÙc¿ÌúûÓ—¶3ꬆòýD„ç óŸíS-x[N€¬ÇĸtyöSz#¡ÖfÒnÀ¹–â/QóÅiº%‹[\#ļ­Ú«Kœg£ÙðÅç [0¹ÔU–Ø æ?Ôq²ûäöÏÏ–ášen§5~Ñ­£š$eÆsÓÒ®Ú&¡w ¼€s(Mƒœíµ¾âk{!×™†Èb}ð;WßùéHbÊêsåèig=«‹ÌG˜½w>Æ£°¸*S.þÔéš5$‚+†@A*r})0LÒó†…£å8óczz©‰ gnš¼ñ…³}]rçlú Ï,µiÍì‚9Pä`27¬çé‡PÕ´Øíµ9à³x3 $ó/2‘ðÃ~5ó¦±wu©krjצâNPø ôËàŒÁ¢z%Ü6³26U˜nOCW62Ü»žõi±Y/¬v‘%´/q<˜»»öd“X·jòëšì÷ÌH‹ìB§î è?‰4 òà)øÔIa–edŠ'm·*3GHiÑ[2«•_7¦zŸÎ¡;Ä.>bá‹,ÒK¶‹&SÊ~Qþ¿¥Y5• #ähmΗñˆ§ˆ:çoQó :·ŧé77<’² ¬ey³Û{ÕÎçÂW\ã'4RÂöÝ5(ê1,Ç:ž˜ÿ{Ö›âÇAaEHÇ@£Sbvh™”ïœP{î[¨%·›ì¸ Õ{7…ÙÚCÔUÓ†x¼Êë§k“aç`ÞÍïïßõ»)ÉÏjW]Å{êK: ˆeu¼Q¿)\”®M8ÆûWy¹<Ø'ØWêv8ÆúEÑük– ¯,`nÕþ†î^a€Ä°#¡¨„ái½ÏjA dƒä<Ù€ÜO4Bæåhó­fým˜Ä¬ÌÍý=>uRkÙ£¹71ƒÓÖµ½Fþ9lãžÌY9”ýꋨËw«[Ç;óeÆþ€oŠº˜çúÈ’Þ&ÈÝŒ• ‡OÔ%™äšàÉ’Y‹€I'ß­5¨éw2ÛI vªy†9ÁÆ>U›I¤^Ũ\‡· ,„gp+UÐîd‰#Eb€1ÛjÅ|F¼?Ä¢ý5¤´¸O¢=3³§©g¯B6¡—ZÖ›ª[Æl.ÖC»2}–#óªâÉüXµŠVý®aОŸ¥6ö¨&çÊ~ÔëE¶š"píåaíØÑdchž ý±GÆ©äñ/š5ÉÆdÀô«(—N~ ¹´åŒÞÜH2©cêÛL|ê»scŽ…¨Ý Ÿ ÖVÇÁ ý« Ö®>·iøÜ¢,ž\}¢qUÜ]Oµœg¢prZ~†NMjŸG×w«¦ÍÃ2òËÌœÈG0 tõÜ~u¯Y[%Ì ÷‡:wïÒ‘%¸°Ãàý>„=j«¯sZ_É(˜Ä­†ûXÿz¤êº¹Œ†ñ‘Ì©wzö£o3Ie¨N™9å yµ^àÖõ ˜ã¶˜½Ä¥@Âõ'¿J¯ñ ’é“Æ× +ä0çäßzEŒ¯ªêeü ^`$—úTõøœv­ˆøB.Æí4É%²(Yy3!þ¿ïé@ ¹1iÓ"ÿˆçM·4â.Rg-Î1‡n›Ö­Âe¥Ëj`Õæ[{˜W"FÛÆþ·ëYpµž·5îœR]:îBê¼üþžR{ûjËD³+µ´e›°_L[M7SöÀÂ0$A×£Þ¥ßk0[™£ÒBÆ@î£Øzš Ýê¾,í4²´Îç%‰Ü×ëÊ9¹JàûW¦b®? p oQJ®gÚ¹Ì;~u ââÄà ý«‹n9¹¢”¯³oS”`{W™ÑqÌÀgmÍx°Î9†}3H™Ê ÀÍÕcÓ#¶{ÛÛXË•±†cØdo_,ý-k¯ªñ,z,s·²PÒ0Ì„wøÔÖTñ\àuÁÞš\ ¦1éIF w,c€=jÃc¨\éì2z˜ØdVµ¡êzmä²…·’E+wÏ`jÒ&®Öz\:D]ù¤#²6ùŸÈZÊÚ&$3ŸJu"å“¿#V [kya‰„aIÛ#cN]XH¨Z3Î=:.ÒL',zªÂ¼"D©°§²jáÅ6ÛÐÛÍIÔ‹ËÝÏßQÊ߈ޫ³ýÂ.ìõgÍ«’G aý¨à‚â EŽHÈðÇ.Fã¥1 ¹Š"{ã â+…Pf^RÃ#ýhõ³;s•Æv5dàÿ£ÛýM¿‹IgÍcš0ûq‘ñ>ƒáVFÊ®1ƒÓïA^#jB$¼ì®{ Re%v#¢¬ˆnV7êFƦŽØ¥r’¤ãjJ–qèièãY\g UÎ ¬ìD~v`;{P;ãÍ•‘~Gµ–7@¬G•ºa˜‚­s”òòçâj§«YsjRš@ ìv9KÖt¡7ó9³ê*q dë‚jï¦Ü‰4«RNâ5«».‘odÀÞä®”ôlûŽÝk`±ÓôްYgå†9Øyœ÷ ;öMC„\ÝK$öðÃ9凛·µâ xévÑø®"0öé¿ÄUjï‰õ  Vßù zœäÿj¬Þ^Ì÷ õ‰žGÙ³Bï¿æ¬Þ%Ë?UÇ\Òô¹Ô.c¹ÕîM¥¸!¼$Á‘¿eüþošH4;»‹Kd䌀êÄå˜{š k—CRÔ'ñØòzœ SQê+ xD]€ºpE­ð¬I9YZm¦Vß8gâ¤~u]Ô´hìîæ¼ÆÕ¤&Ûòé4öÊG°–ER ^oïåBãOÓ¡{N†!¥]O©á­å FìÞƒýþ”?M´•îÊÇHXù®vøQ ý1æ"NC [’ެ0ÙÎùø«?ÔïÖÒîê7 rHÀß~•S7R<Œï‚XçjýŒP1‰î}i‹›Xn9ZD%“ueb¤|ÁžŒb%ôîrk½>õ2—1œ€Ã5öïaD222·2²úÕjè^G®Ã ó!=C õ÷£ÒE4Ȱ( ›Ð èœnNÌ7ËÀ³\Ç/6Dg<½³ØÒ’?ç`®Â¼êÃsÞ³7Ö¦¸‰Æž¡¼V"çÈÏŽ§¶¯–µÍ/X²¹’}^ c’V,da•‘‰É F²±ŽH?˜X’sSi,g—™CN*D\9§¬‚C3.üÆžJ´˜;–íF­âH-ÖÜ&ÕT°mMâv¸*Ñ‚7ÙéŽþÔ94†FÀœ–ž:9wF.¤¹¢[ªà*ö+`ïIn\#§µx[qJ¯W°=+Õêõ2ðóyÀßÒ˜6s^¿ƒ -);` › ›YRMN9’&è}Èý^øfçÃÒæ‹=&$~‡êd0jOyÊ”ó*öSÞ¡5ªJðÏ~•4ÂÎCI…í·ZRDN¡È»ò'Z™õ5œòH¿•0ü=dòHŒ§ ©ö¦M‹˜Žv5 ˆR@9¦±íŠ'a$jQâÂȇ›]"¹†{ug$n èhEì°:•p®}ż"HyQp©¸¡d 縯URËvÅdN˜Á`htœ7sªÄ$Yâ@rSŠÌn´éàv7\@3ÿ©OÖœ†þ+H$,Ávòñî˜P¸øÖÀ}V–B2"‡?2F?zÒ%ú½¸þ|ñŶ|îõ¦W[Ñá%‹Z’{,¡¿J¬_Ãw~‚üH‘v#a“×öªEÿiðjM MÏáyBF9‰=ý¿ñM]q®«-«ÛiöQÊUžQÎÄéÐ~užêGSoù›bÃö wRBàò”eè{Õ“MÔc“NCqiÔyF{Òn®'J…)ì½€-=©»«oÔ¹Ø2OÇ¥–â(ù%GecŠŽ½Â1À üh”WÃ9ÑÜÀÇÍŠÌÆ€jÒYÜêŽ4øÌV©²‚Iß¹Þpüwú|é5¬­8Ï)ëñëká-`O!þ# GÇ(‘Fß1Ú­š§Úi±øVª·WDlªr©îÇöý* ^mFí®.¥g•»·oaè*ãhþœL¤/*ŠË>˜n#Ô$°±‰A)’B:ú(ý*Ém®u]=Àµ¸‘}ÓºþŸ}vC 7pà‘»'‘£:V£m7–'Rþ ùU¿Iž[‹¤‚3ƒÔ“ØzÓÜo¦ËŽºœOζìoÈÛoð8ük.·Ò5í^i%ÓôÛ‹ˆ‹æ*ù:ÿWJ;§p=ãJ§WþÜhwÿ¸Ú´ÖËC´k}>ÌÛ‰1ÎNIcêI«2­½Õ˜ICþU™q?j:F£>” ‚06ç'œ²‘±ô±^á8`»>óà:øªXò…Àódúc‘«4W:V¡wP[¬–vçç=؃ëZ<F±ÄˆƒúPf?HÚÞ•Ä—±Z¨þr¬Ëžá†çßpk¿’âêúY¦-#»d¶*/#Õû cu ѰY•±¿Ú(ÍnRàzVCt ŠãíÛ8N72ZOüɹãc€ÞŸ°,n-Ð6Cõ4ê"³!•C9\އ¥IBøÃFçQõ Ë{F¹¸f6‚–å÷Ú¤BTFwm÷?§6"ƒ_\M%ÃÛ#rDW”œu=ð*©kZ0K3 cš­jFÒÏC¹ÖÐÍl‘–q:†B1ÔŽõ„C½ÕÅÄÖq"-•¨QØT•‰£Ù—¦Æœˆ~ô¬ `m\:CȈ@'s°¦Ñ2Ût©1^®sÖ¼÷¦Ý››•zÓBë‘Æ IS•Ö»Hæoòã9©V¿^½[“˜œg ¢‡‡äÉ r§«ÞœƒE\ŸÄÇÝè*Ñh-­-Ä‘D‘¯@ª1“PµÕ7V :ÏoØÿ®*†^Ý&ñ£e‚¼ÃF|]¡¯p})n¨§# 6¥.œ÷yWy¨Å— ZK4×A¥V|6ÀÀíµLÿ‡£Y9’S°ÁÊ×fÑUáåw}qŒ{ÕBòÎ8–áÒNu@pÃlûÕT¡•ÈØéšAçVeXn µ¼’X–<ØÜg­rYs¨mÄåÉDû=Ï­3MMq#ÌØôQ¹t]GÇ“-Œì;Z÷ñË»h+ «óÉÛ;U‰ïu)äC$ï<Ã?â>yߥQ.#¾4pÁŽç•zÓR•%÷2g?eÏèjͦj÷v,æ9+à2äŒWÎᘸ›H›Q{é-ei Ç• ùùíò4&]S±Õn´ëI Ôç´¥ŽÑù¤@FFSf? jßÉg¦\ŽhçÈöÙ¥Slž[‰“‘ rÙÏzÑm;Í=ÇÈqÊþ¹ô¨ï¤[G!iXvP:“@õ-4`6â ØZ¯ÕH]ù\ŒŠ–m‰;Šèµö¨º®t«ŽÀ. Ä[(ñr±®K¨*'%»s1êÇ ¨’ßH- ±Ì‡`{Ô;XØÌƒH£è𬨭øê=*í§Ë,0ø#ÈqýñEì´Â#k2_ õ¥jšž•Ã:i¾Ôååü8—w”ú(ýú ­èüiq¯ØµÔȶ蒲,HÙ ;oÜàè5ÛIªjÒΤ8œì6• ¿Ñ<9ÎfÞªºÞŸàÀ%UÙ[çPôx×ø”r¶1›çZ¦p¨ ©÷õ«–o­Œ/n.#b+/2Ÿc¨î§mõxÇ„˜Œ*¹íðªÉIJùAêOZ”ãsMµ¬LI äïÖ›šÂ­ä÷GR§5}(ðî£?\[ÚÝE¼@Í9bC0^Š07ßô‡i·vˆÑ\œsËØ{戱!ðpE"9ÃJбÃÌSããHÃó`î¾´ÓÀ^u~rô¥?2!*N}ék "•ŒŒW€l+´“½F–%væhTˆ¿ÃÒ¤Eo5ÃrBœÌF}*Gð¹•Oˆê¿ êf‹j°ê¹‹7)ý(ó7,¿©ƒ â ýeÒæHÕɈ±dÉ¢0ÈÒ@Ñó}¥#áPm#¿š\?"®0Fz{ÑKY–‘ª_4@ œ¨æõèjlw)ä¨ôrÂ~`ªcëDJŒdœz¨¹–#o §íßÚªAÔtIåÆìBþ&¨fs*à.*]ª7.}úÔ›œ%£l ; ÒtÀ¬dQ´¸òæ¢HÒ;°žlG¡¤<\€wâi#l"íëÖ‡ÞÅ4ðs„ÃôªÅà 28¦:‘Bnn¾©l¡rIÎ ªÕÜœÀ»71?‰¡7# yHlwªåÕ³Ë2¤c,sŠ7ðO¨ß.—-Ì0NGòÚf#Äÿ(À;þµ¯ÝÝ¿ð¬Êv–5nc»7Ã$ŸÂ±¹gÔlõâ¶÷’Å~®dñÕ¼ÜÇ©'¾{úÖ£¤ý#hþ“õ.6Ò¢{ ¼ž ‹™f Ðû~‚±3pþÅÍ¢Zܶ›Ê«œ•c×íÛz¶é×–×±[²3œ«6¥Z[G,Ü¥e9%ŽI;н^ÂF€ZX_*I²§"žg‘ÁÂþ•VuMU°Ô¦³Ä#Ã#~MúëWÙ®øjÖöøs\N áF8ü±Cµ½6D±•äÔÚÖÜ© $E û ¬ÿÌ9’'%:dŒdR£…ËT$š~mQ £ŒH£î©Üz™¥iêò†|†]ˆÆ0jå §Z­äJ[•‡8'í/¥hzU„z¨´–&e†HÆB;U›^c¤èÆæÂÄÌÉ…¨ØzßjœÆ|[s%ü62Ï8þc,kŽÀsŠ­iVº–„×Vwñ´2sù¡l‚§¡?—Qµ\¸zæ%º“Q”§˜ž£~Õ;W¸Ó<}ayŽû)?µWî´ ­oOžÞÒÎuç\¤Ó!DÈ ÍX¸;èN9,Rÿ[ÕÝyÉÄVé‚@8ÝϵZ?áí'B»šÖÞÑXF|¯'ˆí×ö®µôЂÈ|b“¦ñêÒÉ ’³…H${oR%³’Iø`Óznö2mYlíµ e»ÆRxÕÔõVœ˜¤üˆªÆ»( µU¬Pk:òÚOr¶É;„Yd íû~5©XðÆŸ¡Cˆ#æ“ïM'Ú?Ø|)Rê–‡3Ý(Ó,GáAxXÐxƒ@k¥y'ŠQ"¼¼¤3¾ý íXWè×V“øñ!–)9wí‘Û4»x$Ól£µ·EižW= ôÿ~•ú‘“kψ‰ü±÷ã4úÛ¼K,Z6`z¯Â¦ƒš~ò&3òæH‡6=j¹¡XßßßÜ]Ýœ¡\dô…X­l™.ØíQ>@£È7®“åÎ3ð+»â¸Àœ`€kÜÛÆ,ØÅ7-ÂDŒXå€$/­f}wpíû\L§Ü’Ã`?Ân'Î0ÆÀS+¾ "HŠ$µIÀÏZõz¹÷é\å祵z½ImÆÔØŒ³ìqOåoV.„Iõ‰HÏ >{þÔNhC69LZ[xwæOò‘Ò¸IKªHö¥Ocq$Ç"#¥’7GðæV×Ö¥Á" Ï7Jor®ÌÈÀŒöõ©¦6¸S&6QÖ™(² ?Ùï\Ž_2æAösÖ¥C¬IlŒ]ÀÆþ´rÿ‰mmáV[v¸B¼ìPãÛ÷¨vÜ] ]`;ËnOÿr?ÿW4;‹æµ¾ÑcKˆæ‹œã¿‰¬ÿÁäò–û•2$ 2^›½“˜$qãsšõšHgVŒ…+¹&ŸÔ¡Ü,ËÒA¸ô4À*ëË‚MDtåíÖ‡ÜÇ$®±Ç×­Ôì$™•H™GOZ¢êsbÍãu<ÈÇËÐЭÎã[Õí4èö’â@„º:“ò5©q/põÜ#ê‘5ŒÈ¼¡âÜêv?,VM¨p–£¦êQ1 spÇ×mÇ_ÖèÜ \.±¬)ÄCÃpXÃ1ì=»þ¯ë³O¨N×oöP>èôªÌ–±\‚"õ3ïUûˆ¼;‰#ìœUƒ†îî&­fň óžÞÇÖ´Ý(ƨ €GJòE,ò:±ǽ#êRjR<£í6*­>‘¤Â±\ÝÁi o‡aÌç×MbÜS}§êE5ÖœZH\( ËË’6zÙ´ ¸/8;MšV2 ²¯b¾R={P­O[»Šâ>h›pÃîŸ_f­§¼7&ý¬lG¨£ºV•Î'Ã#ªíŒ ´j”lqKƒGµ¿œ+Bd]ãDåáÙ-tÙÊâáy†ãôùU‡„ kxZáß,ã%{(½ZZåsqˇ¼¸ë@xË‹­8†a’8w¹—“•9#àûÍfòqoq @,«âõ\/#©ö÷øLiKk&£ÿC!+ úФj¼;y ™ š5a¸*ÄùUZúò{H$MGN\¿ËÖ©ª»ÈÍÎpM~«¶º¢o8—âML‹Pñ•ŒÒ bA‰¶>"”‘¤QˆâPª:]'·®×ãc\m×ÐÓqøŒä2•¿­&BV_–ÕmV;eĈŋrƒØ{“B/¯f‘‹rg ^§çXŸjé}µºÏ®¼‚3»`ÌÕ"M±® ò“Ò’]ù¨Ͻ<3ëÕêæAÛ4“–Î7Úº©`ç¥{­AŸÄY˨o@EJXî!ZànûŒ=êOEn Xx]‚ÜL€ýµ ÿZ²Éj%ÉO+þF˜†ÖEVy<„‡Ò–ñŸ r€ÄžÃzñnE Àæ‘,Q]§…4a—±î> ëK¹‡˜¢™cöëŠæ›’Ì–ñ}¦;ŸJ¹:-¼QÀŠ rãÞªz2“Ðâ™{°G\Ó]©\fžžì‹KVY†C•#eÁÇÏ¥ç)#Æ3µGº—M+ Xzt¨¢Öh£- ÞºN Í!çé‘E4‰ìc½&õÙc+€Gõ¼Ô½FêÒéZÞ°UÛ¯7o—÷ ±¶N\ᢠ£¥BÔÔ;©`A™îJÅ8ž[†Ô肋ËìLe=;ïÒ­ÿCq’Öÿ_™?–êöå‡|eÈùrÆ´ J_´:Õbh”L&™AU9ö÷§8‡’k_!ó0"¨/~b¹kyÇ•öìh}Ôaœ²f7*µp]AÁ™±Ó§J²iµ²€‹wb;Õ®)ò‹ÝOZ]ÅßÕã˜ÁÊî#%S›=…g—ʼ}*}•Ø2 ‡Sö€«e«,Öì Œ:‘Ÿˆ šf±k©X®îI!£Võ:-Aå¸V̇|z ‰ÆÖZV±Á³Vê+_ªÿ6 å8 øû?÷tÇÃÒ¾w¿¶µ·+Í'Úé˿ΤiWÕn¦iã´ˆ%aÌÛôøÕrãY{×°¹ùíÿƒR8{‰›Eâ‹{ XÃ+xSÆ¿yö£b>´Ê¹Z§ñ4ïg¦Mw>(L¾Ã=ÿß­d¨‚õ%¸¸æ—›Xàoí\ÓôÝ£ËYDçüÙ5úl¢m2¢ª–FÔNžu ½Ê`°çæ®@ «Ä€3I!蕷μNi T/6p+‹(nãà Ò\+ŽRFj§Æ×Wz? ϨÙZErêÊ®$'§nl»ãñ¬'RÖµ­W#P¿ §„§‘ôÀëó ’}YQ€<ÍÛÔWåeŠHÛa\ (Hd€¥H Ž•+NÒ¯µi;(yùYŽÊ>t1k¦·et‘I ¬0WjNGJq#.6Z}´ù ³KžFä|1¾=i¥L°QÞ‹išYžO¬H1 gm¾Ñ©·ÖèÙæ\QB§G,p¯S€£z±hzKZJfÿ3“p:j:X¯ÄRäó[ó‚0i•!qPïxçØSHüã#"¦[+¿cÔÑ( ¶YÚáaE•Æ€ÜÓZ”¢!´ùöªÆ“{5ìD‰Ø•fn¿…Kµá“& ÷¤á÷?Ú§EÃVÏË*<è.ÇöÅUõï ui¡¶EŽH@«°Èþy¡<Àœw£š^ö{ÿQ©±±s—;l£'­hnHÞÞP?è5Dm¹”ˆ¤I„ˆ± è€2î1M”íóž¤ÔW2ó7Uýnê8äh‹Ås€3YV¿-ÁÔ"¶ŠÔÈnX$JOÛb@ \‘øÖÛ¦éöü5Ãö4¡-Ð+•èÌwfù±&„ë„6²sx©Ì>îsùU'Xâ˜d1°=ÔœBÏ__ÛŠÕO•IbrÙíïCu šå@™âKÓídÕ-ËE#<¨yYqø½h.³¦Ï¥kâ ˆš7h•ðÃÿRÆPˆ7=·ºð[çz‹uz¦åÏ5Sî‘~¹'‡¸c‘ó¢VZdWQr²Q×#½NþÖ™’"zt§ôýVçM»Y¥ˆH¸*Øò’ sVâ+”Nc(ÍÑù>تÝß_L¤£¬hzj-†±t5«gšv(·@s¶ãçV+þ „^,p©]³ÔúÔˆ¸ãL³P;‘?¾*}‡Ò¤¾0µ´Ò‚¹û ,¹ÛÖ¤h–:ƒk y$‘Ã$î[ÃO6ää‡ÌÕâF‡OŠG|iÀÉÉëñô™ñ¾¡­]xš­ó:¯Ø…>÷ë@#Ò­‘ù<“`_ÍŠ®Ø4^Ë*î„qûÔ{mgT´ÀYüEvAŸÏ­h¼)Å“êr,#Âaå¹ò­¾1ñ¨:—"½šîòÖ)[&(óÊ:)=qø Uƒ——~Ù¤ÜÌï7<ÌXô“c}u£ÞýfØžFÚHó€â´;-sžÕ.Rw…$å }±ÛãNeB±ç%Î9˜õ=·õª§Ü Ø„Êß͸î=)ž”ê|K¦[M#úÔJ{äs úFòá˜ÃahTÂ+«ymgÑJ¥{ÃuxeÒïnô«ƒçŽ\)þ¡Ô˜Á¨P_Ej¤K(LôÍ~œi‘–Åbźƒ½V¸R WÓ hmFY˜g™†Ãóý+L–.}Ã"º”a·=Ï­sÃ,JkÆ#±bv©%Á… º¿ú«„¼·eŽÒ¡£ó¥Á$7(Úe‘?Êi戥»˜ÏóqIÆýª>¨®¡iâ‘É:Ñô(ã­HÔ,âÔ´Û‹)†Rhʘ¯›ø›J6\ÈÀs+lveëU[GÄO&7B(v¡±FÌcØÞŠè:Õ!úõúfâAåFÿÓ÷4FU lPX‘ž`sQ$» pfޏ+×pÖŸŽDf8>Ù¨Òy¤$ç$•$´pG™"ûš>¨D¿òí…ÆüÝévZ…Ä÷$ €2ëS‘Œ·9cÓ¥H|H¹zwÒ• ð²$!q±ÍHk˜ü$`±oaYLÓ<òÉ#Ÿ4ŒXüÎi‘×4K°_rh¡D3cPÙnÁEÈOÖ¡M†Àô¨r®Ô˜d( sSÛÒ§«(ŒÀ¨Î…”‚6¨…Øš¦ñuص¸Wsæç8Ææ±Î ÔçÔ!Â$MÍ.Äß5+JúDâk–Þk³¨[€—$³ƒõür*Ë7i·Ðr¶m§Æáúì¾*¡,·S,ç2Îâ(ñêN*üº:ZZÅn€•Bg×:σo5"¬ÀZÛÿ÷$‘ì;þUuÑx{FáøÛꃚi$–FË7€í× ðæµvú•ýŠÝNŠ"ç.ãoŒŽõZÖ´]%?S°ŠA…þõF¿‘í%* í€1U‹«÷‘ÜgbOJå¬,‘ó8ÈpªOoZµGA¢³ßÖ¤Ù‡»ï„;î)zDî”åÛ½Pø…ãE©ÃIöùj¿¥<Œ|¿¥)ÎA÷>þæ)¡ŒÃ?(ß҅㼌Ë"²œr¥kü5¨Mka¡q2ºò£÷ÇBqW>Õ5dña¸ƒìT‘ßJMÏ\I!™Óþ÷‡GÂ,nƒÉ‡û¸ëQxŸ…L¼5w$¯‹ñÆÄ¿åšÈ.´çˆóF¥—Ó¸«W Û.l³K+žcþ_JgXÓ¦¸‚K»t$¨Ë(¿ÃÞ¨`4÷ 1»c´±²³x$ñð°mŽ;ÓòÚ¨`‘IÌÇ`1BõH.ì¼/ ¥óöºíïQbÔdXÂ#r½ç4ôÌÐIÍà†öÎ*JkÍ,œ­LýîlþÕ2ëFÕ§Ómïîak{[–> }šP1’¦ã~ùÛ5;•tï¤ $^]Gmd$gg™‚¨!€Ié’ùÖåyª[H –óGpŸÕ†•ƒPŽá›Ã-å89ªGÒŽ–óévÚõ Ä–Ì#œé?e¾DãþáéY$A™‹¾Xž¹5úågjP‘˜–òÌÑ® ŽX‘ñÿZ8:Ry²}«ŽNG(&»ÊtÞ•MÜ[ÅuC2Füª¼4W±¸úÏŠÒ¸ûò…ÞŒÀ³¼?ó-‚wQÜ|j ÖRÚêFþÏ ãY—toIe¹rÄJ竚ʾí­mÌÐ4ÒF$voüëd“å4ØŽv‘N@N†ž{cË̹l àR ‚i—h˜ÜŒfŠivmªDš™"zŒžÀŸJÑ$•"ŒGª"Œ*¨À ™LÒ,Jw'ð§.c>‡z¨^XÊ·$ªŒîHè)ýÌÞkö¨ùP¸‘½07ÇϤ¿˜wÍGŽÕ€Q…c“N<–v#<Ã(Ý€ŽäNþñ‚3ƒêh”R´–‘Ë&0ÜZs&f`vÆÔ6á‹1R63½žßëOmâ‰eÖ<í’q½G’ñ¥ÈµåÇõõ¡R¥Ó¹,¬Ç¹ÎM0ÊWb>†¦iùñ‰Æ6£PDK‚: wP×ítØÊBâ¢O£Â¶s¥ü‘Ç )YˆUŒÍ|ó”6×’ %tr¡”åp2zr(šêõ›À&vQV‹m%¤e<¸APµO£t’økVm»\B£Ûí¯î>uHú„Cˆ¢Ó/d0$’„itÏCóÛ~Õ¢§Øé)ɸñq·fùöùU+‹tK«‰-d”Cφm³ÒªÇ‡§š%g+»66çNf€I–q³(ïV®á¨gâ8%Ô¡I©qŒ¨#¦}J×µNŸŠohï H,À€Œy°œcüÀuíT}_è¾Þ Ç’óW¸™såHÐ QóÍW.ø_M°É…$fœçòÅL·Ö Ñ4؇#¹bJ#¹é“ò¡zÇëݣؤ‚ÚÕÆ8÷,=÷ùbªËm,lQŒWëž¡{rWѨ=I'ô¢Nó¯)†ÉÁÇjUÄ×B­£Nä€Wœ.®M-¤u‹—Ù¯G'8¥óŒàõ¯;r€S]väBpN; âåÑK®\Ԇϊ(`ìi›«›{vžæd†5êîpúÖÅÜEkyÄ—ÆÒ>x‹`4ößoŽj.“Âsêì—š›5µŽÌ#_+Ký‡¿áëBu:v¼¶JÌme%£~ü½HøŠ›ŠÛÃÈŒ‚w#Ôyà’6.ƒ#¸¡—±lï½Ó5S%°´¸“2 ò±ûÃÓãF´Ýä•ÈÎÔþ¿µ?+ùÈ= BðÅÏ;Öy{ÅZÜ%^ÇPžÉ‹d¨ÀõõíÖèÿK¼Ch¡5[X58ÇVÇ…'â/þÚ·Û}#ðÖ¹wahò¾œ¯0iþ´¨Q¾9#úâ´+ÍJ­„ö— 4oºÉ†R=ˆª¯©_ w9;y¿#\Ó –ÝÞJdŸ°8Â|*±gÁº}þ­%¤× 0Rç ŒŒç ÍXn¾ˆB§5Ÿê>!ª¯ªð=Ö–Œ÷œ*d—B¿Þ“Á¼i'jWÐ%íœü¢]ùX×=÷èzûu£OÅö\O«3\ÿ%åòÅî¼½€=ïQn¸n ßQ·AjȤå6ǧöª­óËrî²]ÊèAsÅ?¤p•ŠéÿÄ/¤3óŽháÜ3÷½jûôQõ3Žçµ¶Ô-]A¶,¤0;ûükJÖUùŠÍ“Š¥êºjÞk‘y=~5žëš¢›9-‘`;TˆfºÕu(ì­ãæiŸ•@ëŽçðÞ¾Ž²â 'D¶¶ãE¶‰bçwå\ާáU½Kéš-2_N½úƒ“ºeOýÍ·áT”Õn~‘¸öQ{s5”*Í;ø¼…Tm¾ÈÑ+M;JƒS|zœ—(§”LT-è7;{Õödž`1†ÜÈ:ŒµiúIUñ?Ì*DÚŽ–³ZâY9ÁBÐí·±È¬×ZÐ4Û»¼ý\Îܼ¥ŸfÆr:w£Ö¬úV©eon¶Ú•™”ò…úÀ<Íñ#÷[Ómõ9-͵ÄrÀœÇŸ=ÇQØÐ !´¶aoxŒœs‘ÔÕrmÔ¤’Ë9d÷öö©ZV£gc«EcŒŽxþU¥p õ½ØÔãŠNb̲ò‘‚:ƒûT®&¶çîpf¥»JJv;UWUµŠ 懛•~þ4*ÙK08 ì[X¦Œ # Šý<³–ÙåþJ>Ã9+DëÆ¢HäÄÊÛmMZÊ9ÃJ•È3ⓊW2´«ÔÓ•ÂØ=+Äí‘Q&½)*G>3³a°qÊ;šƒ®[AªèóÙ\Çáäs#çì0èßlÖ]cÂ:}½çñ è|KŽbÞndÔŽÿ¥ºà•|úíU½JO‘Hƒ}(NIæR=)–PIÉŽ0£î¼Ý†w¡É(g w؃WÍ ‹ØøÏ±sÿfˆJÑÊàŸlR.má¶±’ár˜ÁïAVž)QcO3œJüRxØ$„jš{7:ì§lˆéX¶­£=´®aÈ£³}¡ýêËôo¥ýrêMNeæŽÔxQäus×ð­[¸¤˜´Ï' îzzþÅg“+GçëVK{l»b3ÂóÜXq扪—ò-Ê£{#V?ƒú*ú.YÌ n½+8ãÍRÚÖÙ!ˆâfÌnÀÏðŒÞÈe2+ó‚ ªý•íÖŸ!šÎa® çÒ½,·7’x—wNþ²1oÖ»9|caDtû•^>xÊžVe8 t?‘¢Ò5Ŭœ…ü§£†µ¿£>+[Ö“HÔ¦ÅÂ'4r¹ÚEA>£ó ¶ßk'S¸k9ȵQüÙÅý‡·ëQÌ*¹ÎÀ Sšë˜É§$´ÈéCçƒÃm‰¶*]¾–×FâN~lá9@ØzÕcˆã[v··bÒ¸ËoÑ}>&ªñÇá·0'$`ÕçèÎQI9ÄöÔÛø&´mFó*‰¨Ø«;NR;úÕZöÃņXÝsqUõÒ<ñcݵN‚Ñ‚ö¯Ò V°½­­Vf*¹çdÀÆ}hæG­xôÚ£Mhdl‚2(Ûj0¸· ›î®¹ÍX¸…°[›3^º·+STµy¤!¹vç4õµÄwVé<e¿/Zë/Š2ÄjŠÚ]±’7-/270!ùwùS·VÑ][˜œrž úªjÐxvŒwVÅSo€|92= ™Ÿœ³‚=3H•Ñ”(9j|ä •Èê*Ájü`wó þ´°0åH@þ…fÓîÔ[ÁmgÊ gß½òëϸî {TD’Ùa9Á<ÛUOR‰­Äooœ`Ô æiìÝAîøÏ[þ!þOŽJãܸüO^,µæ!ìÙG¯ˆ?µ9ÿØã˜ÚËËê0i™ø¦Â[)ãK{…wFUÈ\dŽûÕh\»ý¥”®àÓÑÏ$c F*Lh$EÀ=óÒ¬–3F|Ñ̤wålÑ5D··rŠY‚úUPìXØ{QËIDµéÚŽÛe÷méÛëooÈŒŽ0>è5ÌbûMšÛï2ù}˜n?:¤Ãkq<œ°FÒ?pJ\°\Ú°úÌìYqùÒÒz±é9O{¦†=½û4.û’YC®6v6SlžÄšŒÀ·CLL03Œš]¹<ЏË1Àv‚Ú1Æ>èubÌ…Ôeëð¡rÃËr¹Å|ùô‰,wœC$F–9F=Ïãú ¢˜Á<ÈHaò5õ¥¹ ’–ä;g×Þ¡-©WRH#5b¿á©ÖG†&(æ“¿¶õR@üáW!‰ÅÕtÉ-¬ìï»GÜÈ$#ÈÇOƈiÚå¾§-¤ÖÁ”dó«yŽ}»Õˇø‡Bm%áŠëÂÜ»¬«ËŽÃ~½h^·pY¼§ÊÛ‚;Z§jìú¶fȉprjåm¨«‡N'úÈÉm—×½CÔ5 „ˆÇ*ž^ŠÃqð¬çˆïB[ù’uöjú2¸ð-õkWÉH#g”g p:ýÚ‰¯ëñêz“=·?‚€*dc>øøæ«·Í&|‡ÛÕ‹M´–þ+hAc‰YñØ`T‹ÛREÍ^Ø­ºû‹´¨ì•çiAiyN7ëŠÁ5}~ò÷[¹Ô<#$S¹ÂƒöW ö S›W¼¶”DWªc ü=*®I,Iêw§£‘óÊ7ÍI{yŠò=3NéQ;]I]Èæü?óW8a†[%Ž`\œ ¾zW,í®4½R)™ÀrP>=ºÙøtÙÿc”—ò«lÀü=N‘ÑÃF>Ö7øPË¿.ÇáUx¸†HøŠ!|á 'Ã9>P§¿èsíV×±Y&ÊìNïSæ»6V¾A€‹Ê õ&³½jÙŒsÞÜ1iXä±õ5ZaÊ™=ö`ዸ´~Âöy9"Gó¶ ÂAØ|jÕÅ?Hú=ƒ¬pGw4ŒœãÃ@©äOJÍu¥ FVao¦&;›?õ¡þpnåcõ:1žñ6?#ŸÖ¦Ùqv‘#ªH“ÂÄãÌ™ùS5N$Ó´ûãfyÔe÷Âlú×é­­¥½¤e-¢T rÜ£5'lS- Y|.Š{úâ!ŽG摘6ã˜çÕ<¹R qN—P@'­tôÅC¸Óâ¹ðÖBY¹¹;1íš“ÊP(G/p6ù×BÜÔ£ÓÖ¸Tb‚ê–É;4g8Æ*¥}Ã^$L!ºäsÓ™Ö«÷|;~bI`qÇÚ “øP½"úÒXžæ? °pÙ8ö4V¢hˆósŒ{P©|uåÿ–ÿÚw©å0ƒ‘p=1ŒTÝ5ÇŠ¹`0*Ç«}àj=Þ©`’‘=Ò©O/sÒê·Ö7ȶӉ>NcÜP&˜ñ¢Êü»äÓ--œñ¥àÆ:W//Nµv ÂHÎäþÕ)Æb@ïNf¼¤ÁÁõ黺1švd=˜æ·½10ñ:ú÷e°’•'§ª÷cŒ‹xi\,Q¯1>€U:]b[Û÷žVðÔœ(ô^‰%ß$%ÁÉíïRl¹#ƒÅa‚ıÀÅ&[‘,˜| öö¨Òéú|çÍ «éåý*d;ku‰N#Œc&^©¼»ä°O.IPÀc=÷ r HWmŽ69ŒÒ[ )V®"¸I ó9Å]´­CK/ÖfdôVSÄU… †TŽ¥}TäUk]´HlåX|¦@BŸC_0ñ$~%ÅÀA•W'#ãTKß9pUNàúÒ-í„£ÄÉ"¬:rE,¾wÜíÐzUÀZxöÑ‚6e 0ð¾eÄŸÅuIâK%fYΘv÷É ã¾ô'ޏÊÓˆm-ôí>Ñ–ÞÖNu¸o/6ÄaW°øútGŽ)$m•Ž}ªLb[y(Ás\žæQ&VgçêwÚ£¥ÄÑÜxêäIœæ¬šv¼ÌÊ’y×±«­ü®‚8×,Gj/ox–å–Uñ £?,TWú?ÿ‰.¾´,„$õü™ãµzã車xZ©ðö¡\²´mn’yõ˜aÓcYÄ­%¬¯Ñ´r¡*èÃHê½H²¿¼ˆ<Öïàœr†zØ8†ZÛH#S×wÿÏwby—m? ÷ïš9 Ū—M ’(²Ê¬7æíMÝé°<§Ì¹nÒõ6abÏkp?õO&}ÁÛðÅbüS¦jZN­q§ÞÄÙvˆQè@Áþâ„ØÛýnàB#©ÇaS¡ÓEµÇ‰$€(smƒï]¸¹|¡ÃÝzT}>í`Õ¢”TùHøÖ«Ã–¯%¦žÎ²ecåÓåZ]— Àòߺ͌kå3Ö˜âK8—AžÚÊ?«ÜâFÑìÜ˸߮OOfZ7Ò=Â\oÑ¥¸`Ž£¿ûëE/ø“ëˆf†eu=9{j¦jºÄMü‚˜Nw«÷kº†•§G¡Ë6NcVëô'¿íV;ž#úôËs+`Žô+Y‰ï`ð[¨nl¨ëT]d­‡„ù”±\Þ„arˆ®®«·);×u=BBû˜m… uØæ„Ü¢"à±ü…FúmÇáQî[êL…0'2ûc½APÒ;I#f9,NI>µûÕâ@'† wgÞ£>i9JVŶí]&½šm¤ê¸f q•ãéQn/ âç à¹*qÔd~†¦«·Á¨sÄÌK. ô4å¼($•ÆÈ3ñ=ª®Ò¹bÌw'4\FíF~Áb)Vr3×­7u»encVOº_•Rfxd¸™ >El ûS!ySOA{uƒÛ͸¡z‹1ˆ³’w4(Hàa\ü3JÉÛò¤é9ßêð Óo¹¸ï^D+ð¦¦.·c¦kÞ,‹ ÊÔœíšæõå)&’ÝıHѺô*ph­ï_ßi‰fü«†Ëºì_ÐB–Wa†ØÎ¤Çyr»,»Äf¦jôÆ„eGlb¼ºœ³K‚¡sÜ—õ¿ ùè{Ô;­\ÍX²£ßõ¡É3.Y]•ÿ¨éàRFç5Ýé¼:’ËÖ´½/L±‡L·šç# â0½;W.¡ –Š7¨8ªq}L¿<“ªXd îAõ¬_QÎdO2Ê#ÐÐ;.ßP²hÊòÊ7R6Þ…é©4d¬mÌÙЭOT»“V7vSµPã.!{?ª Ú#ý\ú¿Ù÷¢M(ÖxjÒòBII—þ¬½ 0¾œÊ‰ÈÊs̽þ4&öÖâÖLN„g£v?P—ë_7,Ý0wÍhœ ¡GÅ—rE;=¤Vãùí˸cÐ õý‡ÊªüeÁš× jÌu·VÒ6c»ˆyÐ÷N;–j¿\n+ö£Ý#ºî1\•dÿ,ó8ÜZD&v³GÊcRQBôØR¹©¦•AÀÜçð¥»ö™½+‚6u"f˵Dyٛ·lX÷øT{h¥žyí ÇáAèänÃ¥?-Ê–*OÊ™ºÔâ²±šæs˜áBíëÛâj«©ñ¥öÚE:ó2Ê…=ô?,Õ~ Þæs~Wê wö§ÞÜæ@Œe޽â}'O‘­ÚV ñá“áj¿{®¥Ô ™Lä 9E·åŽW*IRzšä÷ 1T^Í2³3¶ûŠbù‰B±ÐY önõØÚc°bOéRT¾<øÏµtúÓLÒó&ç;f¤ZBÒ:£›µ9rúdWš­¬äsxR̪HõÁ9 ÷Ú¾§L©{«ØÛ—Ýæ?wú²=÷«’[^½×ß4ç$$©#÷•küÇãˆl¤³Ö qêVíÊJ W6;ŽqéÚ­Ú®¡i¦Ø}nY ´`oÌ}ª¡ÿ†ŸÀóCù±’jϧßÚê:kYI"L®¼¤OªN¹Ák©ZÜé² Ys˜GCØŠ§[ð{轎©È—-æ”®ùôÛûÖWuoõNæÏ—˜FåW›¸ì Rìcd”6NAØ ·­RßXgÒ"™\óŒs|h}þ«*0gÎeOcB$Õ§`T·“ßµÔ§Šø$ yAØŽƒ×zŸ?Êñ“éœÑÈl$Áº9\;üÍ1©Äb4C±ÁÇÝ4d(åØÑ1¸·EaͶàÛwÔ¯æá‘2Âoq$,Ý×sø¨üªç>‹&‰zt暥P 4$¹ìr:ÿz1i£Úß[ýZòÙ'ö!—4#Vú)–Òæ Ý+Ä{fp<)6*~'¨ïW+M] OKx‚Ä«æf'w=ÉÇô¦ç»ŠìÍo|‰<3 :8ʰô"²í€Þ™ø~uXïΗð=ÇÇ~¢$ÜÇrŸÖ¤Ù‰ìqI™Š¡#¨¦ò%ƒžgÁÏ­F{‰®gðáòÆ7'Ö¦E#”ôõ§&.¸t#¯Â¸C¼g”…'¡ÇJ, ‘K$)¿½Iñà`xÛÀÇ- ëÊ(~¤#ŠØD¨Ä;àzVi®Ü$€}–æBj‰üJæ"žEd;ô5 óTK§oœ?õÌ Y±‡SŠëã;Reû,GÀÓ^1$–ŸZð›×j{+Ÿ Äzg#µ2Ç1ç— èiõÜW2I#ÅsœgM,u¢vðâgÜÕc]Ò>µÅ"R™+ )ÛÜŸÞ­º/ iú´+e©XEwlÛ´r a·cïUÍ_¸{‡xªê)œ"žW~ ˜glžOãKµµKU‘uÆÕéeb…˜£°¨(’I¸§ÒYT`ãÖ¥Ã/йÆê*=㔋cŽÔ9g`£ÀüjL72àƒ&qïD rñ=iìí½6XuZCÈ‹ö³KPÚº=i‰Y•²§ð8=jEœBy‡t]ÛûQËk·³½ŠáØ==GqøUÊêæÙ-VåæT‰Àebzæ\êñò¹}¦þÕŸqF}õynì¹î7A»(öõ¬ZøÃqyÊЫÈN>ÎXŸOZ©ðàÓõXäxˆ–\J0ÇAéþýh¶¯«é¶ñº[´ÎøP=w5Ÿj¥®n¤Ô"bÑ1ÝIÉÛáQâ—È o’}hÕ«sF¤îkCѤÚ"ÀÇÂ}Ù±Œš¶é /ŠPhºƒéY—Ò.“ɪ_Ì?¨L wÈþ¦¨ºIÿË ³Gõâé“sá‘ÞªïÈíÓð¥ÛýrÊî Ë^t–Fàt`rùÖÙªý#pòèÖ·<ækéâWkX†ñ±†'a¿ÏÚ¡iQêºÉš{—ŽÍD¾ûàžçaUÍ^Cmysk#`ÄÅsÓaÞ©w7-yp[~Q²j; h—r]¥Ã3GÙ•z•ï¹Ûõ­*×B°Ñš;‹+â€|ncÌ{õíòÅW§’òËQÃÝÉ4aË¡v, =sïÓ?*·é+«ÿ7Î+êGjºiÚiVWU«<ŠžAÊ#m¶VÆz…¶±sz}“o•k–¾ ôÓÜÖÆú\Ö:­½ëÇÊ·*TÿÔ¸ýˆü*&¢jz„ê¶ö®y· ÞP~f´ '…§’9­f¹PÜ…ˆMùqïH¼ÓaæC"ŽçjÉ..nå'Å•(Ž…§Ü_Üb’O(5«Xh°iöb@îÃÎäg˜ÿjªhê/b(œªëÐtëR"Ð"žÖH&ž'\6g: 뜖aq"ÒO ò²ö9éF¸FžP¢ú P±.;· «uêéúÞ£oy§˜ô®#¶eheŒrÇ9^€è{~‚çi³¬™»„Íæ~s’Ië¿k|+ ¡°¢É²— #®çç• ×ç29`|©²Þ¨··$A,dà“œÕrçQX䉋ä‚Gj©qv\¦BX±Ø/ë_¥°fç)ÊÈæê)üžk’ùvÎÙëŠjG n² ö¨ËÝÊr¾µ68c¨Ø~tè9ÚæÆ½I,±°¥f†jvÂö±Î#‘O”Á¬s‰àÕtH›ø…»ò3ù$QÌÿwoQ^f™Ë°;àT;¬òA–¨1Øš}ôÏÊçn1QY”7.w®W«…A5$@R0[©…0qÞņN éïS-!Ê û+¹£–Ñ™&rEI—C’mNY„`…Âí×aWÑ,,f½‘<±¯OSéúU*ãLúÝÜó̹–g.ÇÔš}£]iÈ.2öä㜲} ¸‡ž.x‡MÈïí-ö•ÉêEz+í>áù"ºBDZÛõ§ÿÂ`èC‡†jWñ‰R™Èæå'ŠjÛ•ØóoŠ%£GåÕÔøÖŦK!PóDY9‘ü¸ê C‚æ7•­Ôä}jBf!†qO…$T'¼yæS×±®Ís v†ægXã]Û˜ôö¡IÅÜ<ò,W:‡Õ$c…¯*·¿7@>8«Îbn!l£Œ«)Ù‡ïR¢»)ÎvìEIOvDgf °Éè=¨«ì1P®Ü[YµäçÃN Ÿ_JÂøÇS‰µwÖtËD³žOˆYf# ?߯J¡Ù\q±¨x0‰/î¤9,Ä“ñ$ô‰¯i÷úfµ=¦£I×òœ«6 ÷:8|R˱Qæ€ÚÈ ©1“ÔmS­îâ3ƒ•q°5}Òb•,…ÔêËÁçÿ°« qÚ@Þ 1D£`1œUKˆuµL—N²òì méYÌLÖ·Ê{Æø? е VÒ¸uu»CmÒ,J%3 û=z)ëQ4æºY#ƒÛ—¥Ô!7:nEˆGˆóe};ÿ¿jo¦Ø^xK-²–L$t"­Ö¡„k“îk:ã±õ~%hÙRâ4“›ÛìŸÍM3ccehU‚x¯ÙÛʯ:T"h”‚wëVTµ/ðö'•‡:“ØúUgˆ¬Í¬QÊË…cÈsÙ‡Oßð£Ü;Á|gÃúª]\Ak ³àO“ä²ûr‚2;oúÖÑh-ít¨åyƒG‚A÷íUcQšýZ"­°;(?kãëU2Ùf»™.:uQð§u- ™A–r‡(YAå8ÆG¥ þ ñÈ=˜wiÑô?ªZ™YUž]ò?¦ªº¦˜-ZOˆé×zÁ¤€½¶åæÅæ1¢p®“e ÜµÒÊ\Ìžoý?\|ÿ*ÐVÒ9&ã×Ó4oOÑíÙÄÓBŽÃeæPqQÝd“Y›1øq¢r¨ÆÕ{Š’Þ[DŒ6.²„Ç>ÕJ¼™-íüÎüÏ­TõÔy•–Òà#”ˆÎùéŠØøBævÒ­¬u«¯Pí7§eÏr??zд=Jßø¥Î‡L¿WñØŽƒ ||‡ëŠÈYÁAÔÇæSä>ý SuR‘Y»ÌJ›%…g·w³\Î^CÌ>ï°ô¯×ખ¼6®º‡B§¡¦R%6æ!Ð+ŸÊ´‡•0 o¿­1â‰ù s?…N9ä<»æº3ñŸjl!ÎÝjÞ¦–÷ ¡fo½(Ú¢›Ä’ÍŽ]êLz‚:ŽPqÓÍAµ×K‰¼6ÊlËÏ÷¨í©Gw§Kª²FéæWØŠÅøÁôkmhÁ¥Â!¿Í r¼Ç|ÛjªÉrÎ0£”~u”2à×zŽ´§¸ O6qMÉÉÜÓ€pƤùssš’¶mªÝ]ŠòÓO$Ž o°éPf¸XÛÉ¡\<ós€§Êj9¦Ï Ni¶C×ãëVM/R´I®(ÎCÇί:lipÉ"8hß~u9„q®µwÔ:F•3EàáæePÜÌFÀäz~¾ÔÆ…u}w2ÇwfŽOß@TÕþÛLŽX / ¼l0Èà ƒB,~­`×þº²óØ2[°ÉVô'ºüûåßLÜ;¢hú´G¸Q}u—žÅDGú³Ñs¿—çÐÕLÒß"8מVûrvh“‡¢M.á‹¿†I8ß§oJÌïô[Ë”y¥’â1®I Iô£Zr:Y–WÆ=h× ÃákVþ%ÀCá“ËëZ‹Yiö¤ ¯G8g#?…cÜiÇÜCueek-ËÛŸ ‰<ŠXuß©#§NÕCŸŠõÉæ@ñÚ`äxi“øœÕ¿@Õ¯äÒ¢¥i¤KϾHî~X«­ÄW¶‹,{?˜ÐúSŸQq vo#o°ªþ§§Û˜Ûœ4ˆ7å'¿­Q®l~»©Emen¦iÝbŒÜ’p~&·áXì´+[®1ª„æðúí¹ëÜïCŠY#qâ–>\~õ#M”Kt9~ÈšŸ{¦éáR¾‚Ñ_<‚Y—Ç\g¯QøÐë¾2àöÓ¦³¹Õa’)UY¶ù Æ5}6ÛP¼ž K¿ÊCå—«סz7¡iÐi–âX£…z±–>¤÷¦xׇˆ´_¬Ú§6£f¤Ç¼«Ý?qïñ¬vÁ <˜ìKkT¹o†SsíLXé)o1–Gçd9OoCñ«¥¶£õè rœJþõaá6ÛT v…Ò4†# O·ÀÓگ鯉ÍÄLGBCùgóª%ÏÞÁ ¥ÊHf<£ÄO$ôß5eãö¾³ážÐõ K¸ã-9FÈ%UUOàOçA´”P˜l7«-ŽŸ~röÉ*¿[{ÅæSžÁ†ãó¦,­®´û§M_O’ÍÂ_·øG­-íÙ9Ä«(;åvÅfH «¨[Íj¹‘…yzsKá» .,QeŒ‰£o ÁõáŠÕx_GÁ<ì˜2ƒnÃýJ96œ«*°AÌZÅ?s«pÝõ½¸ÿ˜1—Œ¯R˸ãŒ|ê÷k?×ø?I¾ÎLöPÈO¹@iý.Þ94Ï@ÌU˜Ý†jC•³…UàºH8Ž(ŒJõõž*Ë3Gç¹x¢A÷‚þf£ÚÜé×åÅŒ¢ëÃ8sà|ú~tV+¨mÕb”2 èØÎ(^­47­É ,°§q¸&¾f×ÿùj¾’åœ `o¿ïD´þ Y¥_­·€ÂB<µ²pMí¾¥n4ö<ñd|çÄO\ûtü+EŽÈGñ séQ3g{4–QÆH“ãt ät¬¿Ší/´™XÎ ÀçÉ07ÇÐûVgª_6õ©é¶ü¶–Á× ‘ªàöÚ¤]iìÐ3Û._gûP¾ÔÒV›ã?(¹w·±Ý‹)?÷rÖŸ®\i0–k»èWp>Oà7¬Ãˆ5 >{K««2ò­¸¦<§lŒãa¶~5š^êòêgêÖpòœ*nÌ ²h\gà™¸’iavK{R£“Ý›|Ÿaø×é‹)æÊšqך—I q¶w4&{ Éns©;äïŠ~ÖÑ㙌‘« lsœœX®<¤‚q·jñ<›“·ziåI"!ߪ!´’f”?Ô65mÔÝ,†âXÇtS±øg¥O†ÖÎÙÇÏ«žcùÕŠ/¡·Ö¥·7-0ç}Áø{ƒUÛJM?G¹¹ŽEª«ž­«Y&–y&™Ë3’ÌOROSNâºjǥ鶓Y ¹ˆ36ù΢2p wöÍ%ž acÑ%ˆéøUróI½Óž<¼G¦àûÐÉ®a‡!›,>è¨cR”L¬¸ ÙêØ'„h’¬ È§ÔÐ{VSdÖâWé”Ûo…WfŸÊAR:æ‘oi¼ÿg°ïVÍ>0UBŒNßX¼%f„-Îàv5?D¼¿Ó&ñm&(:²Õ¾"¤ÛÛM. òK7ˆn³3Ô“’séZ6‰¢ImÈò¦ sšºZZ`g+ˆøš- …ˆY/Ü`ž¢÷>§Ð|ϾMgôyy©êWWÚ…ñ’ Is+74’“¹ÓÜž¿£z7 ™o–5‡Â·‹í6ëV+ž„;­¾y%pÛòäb²i¯átxgE`vea@.¤†0c‰Sç`E‰®%%m’G~Þ$¯ö*¶Úk^È„rFd õéœV«ÙÈ5«—ŸÍ$â1=Ë “øšm-(Û,{ ×>ŠxNMjyì®$ÖìÌçí6!G®â¶íO¸WOÑÁ´ì&Qʬ¬[Åoó×â1ûUFçFš(H(1÷“qz§êzD†@c\§z•Áœ'ãqñ6ƒ+f oÓ˜äÜÖƒ}a3éWyyн÷ŠÍ.&ͼĹ'”þ”s…ôЦ©|–Ú(û^çûP¥M.+«=.x¢‘ä]‡¨þ­eé¥ߘǑïJ( ¸ŒôE%X i*ŽäÔ»àÒ–S±;Vsô‡Ãm§jIÄ:zirÿÎE釿Á·ùçÔPKX™àæA´˜9>•*G Ìè~=©»„{yVT%OPG­iGî—UÔª1#JþC?½[/&P “yª_#X VÉ•§ êjôp“ñäv±Éζ¶ÈŒÌIb(LsbŠ0|͹øUÇC¸Á]éq¯^Å£E¥ij¯s<‚GÎ0ª:g皬O­ÝYh$Þ[ýZîo"”pAõ#|õ[{âbl·­XxS„ñé÷,\¦PžÎ»þc?€¯ ìôèâ²…`*èí)ÈÏΘÕ/t}&/Q¼ŽB“—o‚ë/×þ—ÖßžÒÀ ãÇ»ýÔü«K࣬ýh÷’ã˜ÆêÀVF^ƒ Ú¬ö±³d˜ÕgY“¼¬}ÅVmôÛ[ù×Qgc,-²ŽSØš¨ÚÅõ”–âÚBÄsLö¢ÚÞ“ $1§ðò½Œ/â?|WµmlE`Æ"’Èãêr¿Ëâ-KJ»•%º|¹,¯ØûU»¶¶Õe¹»¸° q#æKŽbCü=qŠ€–çSÔ Ó-”"Œ²/sWk)®xsV´¹ÓˆZ‘Ê{2÷Sñ­“GâhxŸJú•ŠXö–ýƒØûƒý莚È/\.3áþb¤^Z[ÞÛIkw Í ƒ•‘†A¬Ò?£ :Ê¿ŠËpntè¼ñZÈ2|LôcÝG_~þòQˆ»æˆA(|˜Ší¬:F§+ê6±Å%ÔDÄòrù—ÿ>µöÀÈÉô¡#K†Édf<ÒÊ¥~ï)êïBt›]7@.¶¶â7|óJÛ±öϧµK¦wÙD€ŒŽø¯¾.¥¹3`ÎN ãjŸçäc8ÜšPé¿ZI*¹ß5å`À0¥|«ñÅ5tH¶bN:P›+ynÁ ˜lsÔm$a''sQ$>$¡9Ïá]kv+žo0ZÇø²â눯2‡d$÷qûÕ^öA,FK(ñÅQï@¨sÍÎ Dlr»ÒÆça±½ŠÑKsrÕ–Ó_DdÇÏ|Ö{ÅC«]ñ夨–±&f,æXÏF'×±ÇõW+ÜÔ¸l®]Y–"q±ö®µìÖÈ-Ù[ ¤öMnÖ=®Uã#©åÈü©ãÚÛ>¡㼇“Ž+Íwn®'¶»†xÎ6GþUuÑÊÍ Kº†Á£w—vºn“-Íâ‰Xãþ³U]#Zš)™o‰ ‡; ÓáíW} ÃwÉ*¹õ5sиŠ(/þ§xÃê™åŽOèøû~”w‰x¦=6ݬt·Y.Øaå]ÄC÷?¥foq/ŠÎ˜ìrYÉ$ŸSStsU¹Ô%ÓD0ƒ/26MêÛoG†™À9$îX÷$úÔ…ˆSއ5kÜ%ÁÚ9–ææÖêþîáÚAN@L’s…åØv¨:MŸLì–Ú4I.<­$jØùœš¶YhVOl± È>útÏ©úÎq ÝÖÐÆ™>Ðý«ãÍ"KN,·€<{d“ÿsÿâÓš Üͨ$wŒ©Ô³lôÞ¯:_pÿ ñA³ÔVî·<’4Q\lqÚ®§Žô¾)¹i´ÛÏÚ*ÆÊU”zFwõé·µN·ÕìÔ€nQ¹ÇëHÔ-ònh"A¿.Äš±pæ’Ñi­hy›2ISÐQq§7Ù)øŠÈ„¯dÕo`ŸþVÎ)ž1!ܸ€T|;šŸ$«Ãư—Lr°cÌÑ?¨øú|jjv2h6Ë$œîd"®ù\ŸÆ³Ä_Ü,0F'~øÍ{XÐüK76î#ŸFaÌ3ðªñjpÍËÌÍŸ9Sð£ºs8 ½{Yâm0é×:9‰o¤• ºgȾäúƒƒ·§j¤ZªD&“=€Çj°ZÚÉs0<­Ó#f—_´—Ãå„%´øØ~;VN Ó ‡Û´ŠRWyŒyŠþ‚¥Ü*—,Ç¡éTÞ5ãIt½.IœÅ)æ’T;€ä|ÏéŸQP´sAצåâ½&ݯ7ȼ¥ð09ùwa¿O…V¯›NŸˆ.šÁ;5¤<®X“ž½~t{Nš+XŒ²M„Qœ‘AaÕmgÔ%½¿½‚##g ‡áCõý>ã‰n./xzæFÞÆe‚U¢\[}›¡é¿Mª™Ê¥£l†]¹[b*ÁÂvòÍÄ–· #¼bßôöüH:Ñnø›S¶™žÂîK@ûmŒü}j³=õÞ¥~PFÒ;†fðÁ$`d·Ãlš•Ã| }Ä·R_ܯ‡§ÀØÏCpÃ©ù|6Í3V‹‡¸VKf´r-UÝQU qúöª¬ŸIÚµÜnº~ž-ùw˸lÿíªÍïq þÓ_ˆW;ˆ×Äÿj«ék«iÙíéR3¶i,à ulJ"0s‰éRlg’I‘€2 9uu%±cÔ ñŠój1,$ …õ]êD¬+æâ)ÔÇ å”Ü·ÄÁUV;à鿬[3ŒÊ¹¡¼Esc¤ÜIm;\®7$ã ÏxóÛ•pÏÆþ•K§ -¹•†2_~UQ¾åmYá Y!sާ¿æ*\¸8ŽÔï0S¾Ôõ¤FI¹Ùó ïñ>”PÞˆ›ãQuíµ–BŸÌ`î*™¡<×FâQ”S„¾õlƒA‘#-á%HÅWµ} oâ…r#QžÃÖ¨Ô[SÕáÒ¬ÃM þZg¯¹ö¬ÞúêYîÚYÉ’YrjvŽp䑞æ®:l‘$ 4Š£Ü]Ö˜×PÝ<ѳä89é¸éñ¬·é‡ŸZÕ,õ-!†ÚŽUå!€Ï0À=zš‘a¥´Ie”‚àöõªv»Á_Õ®¯- y™÷IÚÆÛ• µÐn´»‘u⽬ñŸ»±øíW=3WŠõ’¤Ïû¯ðô>Õu³¥¸Hb¤s€*ùo©¦™¦ˆ!d•NìÍŽcë÷Ò¡Ýk7÷HQ˜F‡ªÆ1ŸŸZ¯Mse<¯̦T8e ¸ªßÇ X´M+”î=þ[Vk«êñéwÈÌ8heŒþDz)ºtÃC]D§žäey¶!{~= “{e{4$Á?+oƒT]NâÚÇQ{Kù&eæðäÛõªÎ±¨GmY¹ª©À#ãU7¶¹¸¿K‘t F]TnØ£ÖIcnX†IߎIzÎHäfÁ^Ã=jÕéz„o¨ÝEnŠ0 œ³|nj4_J\'¨)fµ'$‰bê{Ÿ)=j¥ÆZE®=ôwq]HAÁfì1×ý+{™/¯¦½º<Ó1vÇè¥ÑÐ<ÞCÕiB÷7–üˆ)S'•@$ƒ¾ÿ1UÍBüÜZ¡äç89'a\á»߉ô¡s Ë »ˆ::†V^qAØ‚+èë+}MŠêKm2ÂÅ"$1@‘‡\tl‘×cUV—„õ;™JXi—s É ?(ôÎ(]é†ÞK[x­ã"8P"ª½åÓ6r*×ôu†æ}bEÍü˜¹‡AÕè>FµkwT…V8ãŽ%* U½T¼’Il­ìãú¬ñ˜ÌŽ /‘ƒŒ¾uÎà õ(|{‰ •˜SÊü¾ilOö(¼Ac.“©Ocrœ’¦Å¾ëêÄUP[¹f7o¾9ÆkCú9â[sÐf”4 qnäŸ+õ)¿cÔ{üjË­ëz-Ê¢{„!¼ØùÚ¬—×:Uî›äs‡·¸@ê¸ËGB;a?H³ÚÚÜ¥‚aÌñƒœ'bO©9ÚªÜ-¢Ã¬q5µéhíÎYñ± p¾+kÓô°`–š\DúÊLŸ?15e¡‚ ±*EQ€)äfel:Ô„³•T;>A œb«W÷×ú®£ü;OŽHícÿFyÏ¿ öïF-lü 1ld/Cc¯¥.m2ÎÊÕ®®.š(”d–ü=MP¯ï¢¹º?V·`ŒØ;ãÔÓ/4xäå#ó¨šoÒSp ¿Ó.íî [EÌY=Ïe?·MÍfºî½©q¦×Ú”Þ$§!#]’!裷ûÍ ð]º0ϽXt;Ùm-ZL‚ÜÙü«õ¢7ȧr3ŒïMHyHÉØg­ M$FKÉ›œ¹$(;/·½O‹"àL.ù?*ä–ÿó #êN;ö§X‘‚܈£mð+«så ùÏL x{cãBäÓí_Pk™ ’HÛrç 6ÇjšbŠ8Á1¨åóCC5g{«†!æÇ0?±]oKY'–æÒà&w1…ê}½W%q™fpq÷OZ¨òrÍ!sÌÌÄ“ëN Ã§LfV *w ŽØG•Gzw3À¡äæ*wÕ·éÑçÅ0vÖŠhü]¡Ú–ine‰/ gØf´Î㎾TCà†)ÌYxFÀ°û@ôÛåNë6V——÷Z\±Ïn[•|6`m·áXÌ·¤Ð¯Ùƒ)óïý¾U“jE‡b¾aWß ]'ëÚ—^9!…H÷,OÿŠ¿hÜI¦j6Sˆš6[)0yÔìì;†MA·Ž xüYFB׆½Ë”åK|œ);þtjÆgxùæcß­9uÌ‘'rÌvßôªæ ÀDd ЫvâÂÙBŽqÐ;{GúWžÄÒu3˜!'“³zÓô5Æml¦ITMn~øýCGá¾–±J­Ì€;º|©ØYOç?ÌzULãø“éml­n<='M¶—Â<ØYdÊ©sø=¾&´–×tk(ùîuˆ#ô b}°*"qž—q&RñAÙUþ¢¡êÜC"šÁd.Ê>ÒýŽÜÇAñ«v«'Y­ÄjÌÑÀŽø¡ÃOŒ\ÈÉå‰õïU]TϪkÑCÚÛ rýáÝ¿ÈSÖºB‹ÛyG‘Õùæ®VÂ8/¢ºFr{b§_j>o$`3(É=€ªõ÷ÝGnÏÁ6G_fú¦­2‰äRÂUËs“¾}j³sÇ«•Šîv¹E8`>=þt˜O×uKuKƒÈ<Ò«á[¨÷϶kB´Ô¢–$ÀUÁGaÓûQ3`òSšùÿ‹.¿ˆñ¶©89T—¿±¡S¯-£¾:`þt"òêHìØ(o-G²ÕÄíò˺äv¥)¹²Ú·†söÈÉùv ·—r^ÜxÓJe|YŽIÚŸÓ#oâB§ô§®f3K²&ÃûÒ!*%Ì£š}Ä–Ó¤öÎ ÇpG¥Y5Ñm«éVw¼²#2‹$24oWS‚¤n i\Á·–2\êpøEˆ’(ˆÃséÛj“¯Y”%ðĘ”9W ŒìjÙÕµþõÛcü¸Ïü´`°;|+ç»±¨j:õÕΧÅs#åãpAOEÁôláû?«ÞA2YOA¶Ý _ÊÜÇp˜õ ‹o{}ox”:1ó/7j»i¡.QfG ÜŸÚ¤]Ìf6#îGz…âE«Rùyc.m²ïUrêæ{ ÷ ;%ðâHÞé<ÊJ®ÿ…»×\!ðm•ûÎsù ¡ëv 5Óê1)"S™úO¯ÀПÆáF>ªl,Ì9÷ÏE9ДðÊ㱯Õ]^Þp°%{3 gåýêtŠÒÂ^#‰ük¾OeÉGƒš™^øW0N(f¦#{p¡Ô°n™ö4Ý„.mcbFFGçFyri RHžô¢¡ºÐûèDÒÜ™0KoëX?]‹ZXÒe '@;ïÛ§_^r3FÊŘdAe–8¼óH«ýÍBº½VVŠ$;ýìãð«%–›?ðøïoÛêª$>̵M¶’Ú÷’ÿÑyƒ±´YI"/.TmŠu¸*Å´ø<_Öá19ØŸÿJ¨p.§)i­ìFÑò•fÛÛ ÕwHÑø·Nâ‹kxm絎Gþt…9â䜑±8Î7ÎjÁüWS´×%¹±ºšÑ£$ë‘Ðüê½ÃÀñ_Ç£0絑ùÞpw\ŸAîG­oÜOôÀüid!Ô4Õ´¹T åž"‘í†v`}±A~þŠ/~´ÍN(o“VŠêìÊ“F…GÈ ]÷›¡#¥X®Dr[Éè­`ÃjÊ5ï«AxñZ¶bS²“ö~5CžüÜjòc•½XxoZžÌáOˆœØämÇËÒ­·WGP)"¡Ž0>ÉÜç½+OÑ_Ô¡Ñáž8$¹%VI3ÊöøQËÿ¡ëm=Æ¡ªOu"y€‰Dkî7É?•7 }p…ÞŽ÷ßVš)ÒV@ÊÊÇ`7Ë‚s¿­ Ö8 H·C»¿–4`á^D!psý4Ôºx°…$K‰–P=GOCµ Õuy&ÒÞݤ³°;íñªÞ—£i髾¥%°3Œd‚FrFûwÛó©×vÖò@a?Ëæm‰Þ´¯£ ѯ¸væëXFš_’7G*Sìs‘øV”87KþöV³4pH¤2²†æäc58RöÞSÃ0^›•4Wѵ[[ I´ui w9*™l‘Äî¤òó‚‡=¨Õ¥£*¢uU¯_j–6`+Ïâ2ÿéÄ3øž‚«z—_Hœ¶ámâo)eˆøÿjú™¸Wc¼cñªæºÅQÇEš6÷Çþ+7žî4b ó?Çõ¦ô›i5=rÞ„/–+·"÷#åùâ´ÛKõÓxŠÚ37=¤¯áe÷¶۞øÏåZU机7 O{$üñÚÄÒ‘ËÔg'|×Ì6Ŧ™¦“w‘‹1÷'4Bêßÿ–N"Œ³”$2IöªuÖ—¬]T±˜oÑ—üh]æ…­Û)–m>Qªá¿Jå‡ëúŽÖ:MÜà÷HXÇ«Ÿô]Æ—N¥ôÔµOêže$þTz¢mRËJº¼¼Õm|Kx^U†g.UI “ŒgÎõŸÜjfémÑaHÄqªQ»`½v!â0a´Ù²:ú45V¶uå`À«SŸVÓ.-ÕdŽTq±%àhL:t·ªËö³Ì6ô¨Ε%¿4¶ÄÈŸÑÜz©Ï—ÕªÓ]yt¤*$ˆFßq¶~;Q K[}bРƹÛ9ÆF2+^Ðí¢Ô@¹‰ƒÛ¼>ñô£÷–úM³ÝÈ>ÎÊV>ƒÞ±Î){Zñï.[œ°ÂŽÊ½€ªæÄW|'«3¡g±œ<#ÿÆãóéZÅ­í¶©Ëg"̤+s!È ¨ é:kñK{j’\ùãvû„3]úÕÚm%Y˜ó‘éA5¶¸Œø·œŠ7Ù:~uYkH4ieþs3rà~º³³Ô`úµå²I–,—8þjà7§|Ô¸vâÇP0º·ëÎ@÷^êéD1ª·QÍš1¥èz\öQ]\´¬ÒqÏïÓÞŽ[YYY#%”^o»bsøšë"©Èé@õIyf#8ÈÍÒ$3é±IœöÏÃjƒ¬[Yê–ü‘²¶õc þj‡æ‹&F«|h0_^^X˜drÔûT»ËúŒÑ+„‘Ô¯0+1všÖõ‘Æ6*Tn+dú8áí:ûH¸¿Õ­Ræ9Ø$!¶*åöù´Ý}i÷ Æñ¢Oè™ð;Wغ™|²†$Tn$B¤Õ¯’Ea¶ÞÕ+é×Ö¼áOR3]ÙGM©©!I—®â€Ï Ï%ç0tH³¹êHøTyVÓ.ZÎÎ%6ÙæIÉ9ùþÔvÂk© Xû}Ω!_ÇrsŒ+ÌîfO r¸óíUo¤{mBû‚.ì4çx¥ŸÒ©#ÃUóHߨçXÞŸÂZyÓ +’×ÅÃIu.pø·ûÞ‹ëßFK/Ü\i³Ï«ÀGB¢TPyÏî1·Î…ðW{‰î£I'ŸÈ³'BƒÜ`ŒžÇÐV¥e£-Å´N³:9ëÊÀñÍY 4­5RYùÙbØÆG^”/U]TÓ§{¹<–{„ò²7$×Ì÷­nd•#ç–$ã—ßÞ«w:R‰<[6+ƒöþ‡ûÑÒx›ZÕWKд ›«†;•L*û³*rq_BéŸD&˅«‡Öåˆø"ßhmߨÉ#/èNÃíÐÖgÑßÙë°êWÂT—O»Pc9Ï27˜`|1ø×ÐZì-༑€Ûddìh>…hÐpëFÈšgl•¹ÓnäšE&8úƒÜÕ+R”Ø7Ý&\H1©ùPë6êàˆmm˜¹ß¿­,hË…¾}cðPôøšÓxNèiš¥±Ù[.À{œË{P*€¯˜``Ôˆõ5ÿÔnSCõÍrÒ.¸7˜Éü±;¶Oö¬Ýà¶¾w&!8# NÕQ¾Öõ9‘~³té ŽSyC~æ™IëÎÛ(èGÔc¼’Åœm#ÉÀé·Jî¥5Åӥ̧˜)bÊ;Ô^.Ó^-I£!¾®Áý:×ò¬Z[y#“ùˆË“ö¨ž"é$ž gqÊì?ßéN\ë^(ä,I=1×5½jÚ…ç} \ H˜j)â$ ¦#œoêcâ+Ó¸?]‚,º\’Æv/ñþÜâ—qa-›¨t!BGOcïItÇmñI–Ö[ŸäCÊåH ŠI;z Õ¬¬¯. Wº_²‚CuÏ}ªT¶[[3ÄYÜ’Nvª§MàÃާÃØûl×ÌRZ5¼ÎŸh#'ÜTÛã Žõaˆ<£z”¸_*ïN´JFÙÅÓùÅ"bÜŹóþ´6úWyÙNÀ ±U-RÒ9¤RROQßãSôø‡Mø¶·1ÈLsBȤ ˆî2Ã5Í®¬Y¬®Ç#ƒÓÔ{{Uï†8–ïC”‰–ÑÏóaÏæ= ]F¥@Ң¨³êrNYÈ„ìHÒõ{5Š^ÙÏš?OqD€‹3ÛÆÌ¹ØŠ²YHðéФ›Æ} O·‹ {b÷Sަ)| D1G}¨(•KGᓱ#¿úÐÍS:vžÚ.•ü©%Ï;IOP î*ªA5ËàÉ'‚<Æ0Ä|H¡w×Iwn%GÎ{žµZ¸RŠä5vÏW¿x&Ži Aý¶ûCØõ]÷^FÀäÖñÁ×–öÖ–úB0 aõÿŽæ´Y¹kìàyIV{Òð*3Îñ¸WÏ/õc"£ˇ½0B‘œ­œcãøÑÊî?bH$3FÑIÈ¡²û}¡éK™¤BFO¸¦„-4@:ò•;Nª¬8ÎiKâË(?u°)Æ-¶)6ÐÞZ=½ÊsÇ"ò²äŒˆ¬%:WßieÈú´í纃å?†+CÑoXß?:˾‘>ŽXqÕtÈÖ:ü—”„R}åÇùºŸ ¢Ü$ӭ΋9Wëÿd÷_Ÿ_Ž}jÍumdæç´êK¨2ãe;SSEœS~–5 MAü„9oj¸]/†ŒmŽ*·¨]•%H94ºÏl!˜ 9ØžÔ[×F…¥­ºÞHp 1ò¨î©¯\qö›`Ö¦ÂßÇIžE-ÊPž‹ñèl¼]{:µYUñ4çf8 I'¶+_à¿¢mJí#Ô8‹:]©Ü@¸÷s翵mšm–Ÿ¥Y =2Õ-­×²õcêIÜŸsCu›[ÛŽF²)ÌO+8Û×åU,ÒàµAqo G,Œäúüèõ”Ë{ÂÖ720Ï‚‰õ_)üÁ¤[¿…)WæBÍ‚>&kÚŽŸne¼¼‚Ú>¼ÒÈưÞ.ãÞ°½a ×0æ1ÛÄÌÁ¶^ÞµŸOô§‰ƒØhm  ÜÉóUþõôWÜÁ®p6“«%´Víw¼ËqÎ6p3“Ž`z’iW<5£Ks$’Úx€ce‘”©ùu¡¼Eue YC4®ñˆ ãnžÀþÏé?G‚ÛÂx®fqöJ¨~'ö®Kô˜’‚-ì ÿ™åý€¡Z‡É©[$.Š È$¹ÎAýEÓ.RX•ÇSYÞ¥e¨M¯ßógÂŽw ¼¹Û*×8kèžÿêÐÝklmc*Nd~ûž‹úü(¾µÂ^šÛiÐ@IåæOZ¯XpßÕ–g¸_æ;`=‡þj‰ÇœqÂ/©¿k:]ô’ÜZó4F®_˜wps±íé_<·’nFº§õ2±ÿ´°}{èêÃOK‹j÷Z½bÕ’µ‰6ܳÌÀz g5páë­ u66È¡” '”î7cÌß2MiQq6ŠÜ?kopÓÈöÒ/òÔîJžç«|#Ä¢IZ! c'½h?Âõ=5íõh‘¡a‚[ªú{Íׇ4Û]Yÿˆ]Å5¢ç£•çôÏö‰ÉÄœ+¢Û‘Õ¼§,jrÇßó¨èwºÄZ|Zš{ŒòF±¾ØñŽ€÷«I¸VB ʰüj©Ä±µ× Þă2¦Tø®ÿ˜Èù×ÎW7RAªÜ4Q–wæP?¨îh‹h©.ž²´ü—aÃò¯Øÿ§½K‚3 w=*dEU÷ÇZš<ëëE¬ôíNXb¶~\1‰Úžµáƒ%øKÇææʧýþ´JMËOå{kXÎÛ±\°ùëÑ"I2»Ž`¿d™õªoè±C‰ÊfÞcä#ª7qžßïÒ«\-£kú¾°¶:lò”åæmÖ5îH?¥kú•ļ+£4«rÚÛÆIÈåb@îGr}»Õ¤=æÜ-Åœñ¹ê‡ÇÏlöª}ß‹»ÏåÚâ.lçp¿ÞµNáí?IÔìo°·Wdo(æ/÷­fî÷ Ê–Ì~uÚg–ñÕ“Ãòlr7©w:õ¥¶žÏz@¹CÊP}ïF€þU’ñv§¨Âdçi"$ç¢ÜU(.¿ž›õ¢É— ü)ÛKë‹ ¯2y ó&qÌ*ð®“XE$Á>$# Z%¦ÆÏ!ËÊ;P‹õµÛƒ')l€@J"³šÄ^:K˜µpË,8£ÁýMnšmõåõ¤_Zu2¨å•Ð`1ÀힸíDüP °Pù®pÌ3ÐÕSŠqyÃz¯;+Éå*Ø;o€~Tè¶â;.¼Ó5¤êWmÊó8‘Àa¹÷梷[£[ÚýVÖEºeÎ$rs×üëæŸ¥n6šïˆÞ^’ÊxãäÌÒ‡ç\’åí¹ïYÉŽ]MRyl0)cMc—á_D} ßK7\hÓ)Å”ÄÄÝ‚·˜Ä“ó­ò?ë·.õ›ñíÌ—-pB+¼L’êÁü‰¬z-Z.~Fµv#¯†y¨¤G*œŒú0ÅJ²2ÿŠ"EhlrH?þMi3ÃÜb"Y¯dÓ´«âBaf'”úìw«àù&•§»d.çrïúVŸÃº¼6Ú z]Ó4³Ú¨Hò|ÏoçáD."‚âÜËs#wôªýÝœK‘|yô÷ql~‘(Y&ŽÚ8ùW~^§Ʋ[hEÃäP%=>Ðõ¨:Õ¸·(«‘¶kšv¤–˜rŽÜ¾• h|}P˜ÓOi Hiõù³ðµáÁ*ûòã?üV ×FmÎy²UÍRX…‘ç;çÊ;æ±Î#•ÿŠÎ¬Çl`z …—ߎ´ÙXd ücaûÖѪÈá]ò‡§µOæBb^pFãÖªñý𦌲Ýj—·$ ÜŠ¾78õ'åBõ;'ÓšÖcƒ§"ãÖ©f6W*ËÊêpA¡wúÌ7ë `JË»íñ­WDú…Þõ…¼e$Py”dƒÜ×"®0YK41)B™Í)tE´Ÿœ·3î{ûPíB#ÈìhbéŽíÍ9î*]Þ‡k©irØ^ÑÈ:Žª{ïTíy5>ᘡá—îO<ѬŽ2£—`+u­fwÒk:Ë5mJæë¾%•_€è>T-4Ô’sS gÖˆÚè²ó/u#½iú-ÌÖzm¥Ñ%ÖdwÊöü…kZF³¤q.õ½.u|}¸óæŒúL_ÜE¥†¸™v ¨øÖuĺôARãQ™ I$YSŒõÆß©ª„Ú¼ªJ]DAí‘@.¡<Œ0zb­ú&¡¡¤¬\Š“Cåöf?ïSvöó£] –>TýÍIn"‚ÂãÃx]ã* ä ã­]øröÖëN7‰Íá»`½qÿ“U.-Ölt+õžáZVžRU#ê?kzŸm¬ .;­9cºƒâœ|GjÄ·vÑs ôU]Ïãš'ê“ñ.˜dnËúToàvÚÜd£ýZl}°2ûŠ!œ3.…,··ñ,—re*‰ê©ý>t+é+PŽ_ªÙ´¥ #Å(y˜ìÈgñ¬ßNâFÉÇLv¢V—1Ìüê;?÷¢pkÊH þ¢¿YC{W2À¦š%-Œ T[®Up=éÚ÷|W‰­7*†R9˜gÒ„\Y[ÛÛÍ2d‘Q˜.FXÓ¥N²…m­V/ >y9ó´ìëŒë‘ÍÚ“f—r6Ì3Ê}*ym-œ¢I—ü"…Ô8°¤NÞD\nÜûü½*±ȼhäçÉÃç¸4¶MF¸ÔgÓâ’KYLsH¥2›øö¬Wn%6×­á:¥Æé+’JžÌjŸÃW]\¨GãÝ©ă9nçõö'ÛÝh;oo9!Ü’&;GŸºl~´_V¹IôÙDGùŠ9ÔwȬ›SÖïùù!º•G mª—ªê—÷³xLe w-ÜÓú]¼Ñ³? åuÁ´"óˆ´{MRm'SÆí7˜y%¡¶}ÿ¼i3Oõk[bÀRÞ¾§÷«,‡–½†Úf–Üa˜´=êÕ¤ê’[2™XrÈ<ݾ¬K¨Á¶fQžÙÍÔõxmžYd‘R¹rpãT}OЬîìŒöwÐËÈd;àë½Qâ´Åج„ýãÞŽéÖ÷‹k#ÛYµÔȤ¤*@ç=†NÃâvRâO£¦m#øÿ\¤úÄ“«Ë Zr† Ç”t¶ýj¨¼?'Š©xŒô8ØT›.7æ äH€û¥€gø Ô8É´}BâÚ4åG@ÀzòŸìÆ´émE¡ñÛ ãk"ãÿÖÄ ½‰­î¹•b ‡©ß#8ôëÒ©Ú/ÛÏaÒ—Äߨãñ«%¯ Ý\2ªDO®ß•Z4î ¶ÒµK«€n9VawýýkGÒ,ãšWKhDQ@ª ÀÉ=1ò§õ}4·Œs'eþª¯Á¨´wâæV+ 9ß¡”^^(œ·ÄKnßm3×?_â…¼ÓèäÈ0òãxϦ=}ÿ ùéK¸–é âêëneVæ ã~cëŸQÂ\5Är¯”®àÔJòÄjšlÒ*â`»/¸Q±@ØgÚŒiºEñ¾2ÇÉs ·QŸAZ–ƒg)²L\«ô]…h†H†’Ë•ª÷â»ÈåÔý“ý#Ò³^)ÂjÙÛÏ?¨ý¨OJ©Æs:ó/ˆAGï[Är­?SÚ¦Ûkñi¡`2Ç—Ï.Xs{òŽû~”ýÄÑ]§;·?0Èpwüj¿u§Ü¬†HÏ8Û¨øŠÎø×W··¿6ºkæë³2ôÓþïÒ©1A#ù‚³ž¤š×~‹ngÓ‘®" 9d…úc³Cý«t³¹µ”‰TäKö_ÓØúS—0ŒFÕ_ž3H áGJL­~œ»ãʱ#DX°éUž0jšͨ‰FW™p7È9~ ?žÜø ¾çvÅ9£é‘˪ÂyNÝs¶*ðtQà={Tý'G¹g–ÓĈFHnV'çÛáC§áMC„ø˜êZUì±éä’#a÷ÿÓluø÷¤jºµÞ¢qq$Œ l¥Éõ¬ßŠîd/mõ.A?!ûÐøÄŒªXœ‘Þ¹AÎù=ÍÐîî­õ¸M¬O:¹å•º÷?.µzºU3‰3özU?_›&·Ö®5ùtZC ÎzoÜc¦)Õ´ãõHÔ"3yŽw-êMJ½˜Ä…·òô¹ª†¹ÆZV“,º*]t‰z‰îßïÛÕõ«ÍJv“-Ìä³HO™¿·ÀW4u7[6èÛޓ̓:ù†~có¯¦x?ŽõMcLñ"Ø›‘¤UåçÇv¾#o…\e¸g¶nWÇ(æ œ`cÖ³[™üy¦d9ò0ô¨±iGÍq3ŒnK «qh†Oªèñ á®l?éþ'𪖯Â÷𖣝qs IÏŠãý6­èÂ;«¨žòáŸÂPy»ã?¯àkA 'C(R@ɵF‚êý¥ú¤Q†e³°÷ úλ¯Z©„ÜI ÆÀb=Ž3×#zÊø¢æîòV{»™n=drß­HàÛñq µƒœ­´ÍËð;þ¹«Æ’>­uº™ '%3ŒÕòZÕ!+k… n£b* ü3k:uÄ@•ˆ.Y¶øûU},­ A ☻Óã¹1nmóïžõdÓôìåoaZ["jS[²…GÌ=ÈÿBkLÓ¬¤ƒ2¹äGÙP÷÷¢±È¥<)› ô>•ò8mæžD†šF8 ;’}(¸„ÝI9V͹~ØþªÇxÇŠ5{ý~+í6y- ²$["÷ˇ>ž›U³†8ÆË‰`úÚ¥¦¨£xså—Ý3úuýi«(c•XP[·A©6š±^Ò<¤{/ÇÖ®pFdv nµ!´«Hn„;+òç=¿ ¬_4Z|©Éâ+ à SYó¿”2£«¢ñ5»ÏÄÑÆ#aD œlw$þ QK+T¹RD ÕÍG†Õ1Íᇠýþtv—HCÊ'f‚~4(_NšU÷ E9m$“JÌÒ3H<ÜÄäš<·Qê¬r(Ycdt>âŸÒ­ÚmQ-6 6wô“ûTë­$rsÅ"ȇ£†‘ pýÕÖ¹ÑHöñÛžg•ý#ãúf­zÏ¥ø&ÞAæVRk2Õ?Œè7¥cI­"Ï•Ôå$>Ç¡øUÿƒ®x‹VÒMΩC§“Ëàr¼ÄÀ ö'Ðg|NãèeÕ´-"•Q£q(@0@SåXÝÔਔ®ÎjrÅâñBLÁFvj¹Úi­$YEÈÇZûî;ùdaXXŒ€ß&¯š}«'‡Ì2ßÜÑf‰ÊLSjŒ¡ãÆÃ#½F2„!±’TÒø&)‰Šýjã#;|{TŒõåÆ}+Œ3íAîmyÁ y©:«A-ä…9Šªü³ŸÖs(ls¨?ª’Mh9®|‰š²KÓsw5ÅÅԭ✞gêOö¬£]Õç°šK)‘•ŽÌOP=¾4Ü\u=Ö˜–«m›ˆÇ#Nç ú;œuÏçT[ µûÙ$šòQ;6 ?œ~¨uïÑÏ[ÆÓZÙ…FIµ<Íúz“ð«|9¢ñ‡üYgqaÂú™×(ïâ[´`à ³` ³¶kê«=.»ñŠ€ØÆÝñÓ÷ªgÒÏEÃz-¼ÿóú¦y”uŽöÌù~Þ•Páž=±mmîƒI}åz^ÄŸnŸ!LêÞ¥©\©šB±¼ÙGË÷©zŽC*Ÿj½hºS»Ç!æ#ú ¼G †—O1†ÌJUF!Cß=Í3u,i;BeC *|T8Þ\±óDP"*ºKìqÔcÖ‚q6œo­Õ¢ÿn?Ì=*‹sÀÓj/ÿÌoÎö–/4‡Ôg øïðª ÙϦq•þs7†°±/·øN>!øV¤&Û´ ?‚ I ¡ÆÄ ƒ£ÈÖŽšuÜÎdƒa.wtìGéZ|3òØÕ‚ +°N˜4% ÓÒnC;„¶içh HÂcÐbªûØÝM"\^ˆˆ\r‡ T¿Ö«Z‘.±Å ¦At²Û/$ÑýØÆ2~=¾$V±«ØiWZzX\YÄöÑ(HЯØ`rž£j‘ôy¢ÛèëwãI·i|ßU=$wØ×̼K ìÚ”ú‹ÌÓ¬Ÿ1ÝaðªÓc’w¨7ñÜ=³c‡ûØ‘íQ´ëyg`œÇÞ­v–ÉkŒ·êjN³§Í‡u;‚ÌŠg#­g a;\41™䓾ô¦Ô°œ£`; hj¬•r½Ž iܨ‹ÎHå”;Ç̧~¹ýêõi£iæÑbIÙ†[ 3ŸÂ©zï iš…ü¾$nSìÎz Îu^m+R‰£…žÞC˜å$ùHêãó§Ö¶ ñ=h~¥{gklòÈ‹·\ïùœW¤ÞYYýif‚æÕ|>b™V^ÛŒ¶üëɪÿ¹ 7·Fò=}ÍXÿ‚[êVÉÐH£ÊþžÇÚ…K¯hzxæ¸[›˜ò0y÷÷=ãUµ7‰mµh­VHã—Ä–r<`sOlçÐÕ·Rúbâ›û”{{[+ …Û„±ÇåW8x¦{øÖH®@ê˜ì7ö£Îë¯h)ezì`W T2Fü§Õ}ª±xo/nnìí`r§Fßo–Ý*©¨éL¯‡Ÿz¨^éÒÃ(–"Ñȇ™]N ‘ЃZ¾“qy¨ðͱÔ?›rñ)2ãßz/ai7*ÛÃsíÚ®:VTkÙ ?Їæj?D4¿«ÜÛ H§_”vaýÇïTKÙ®'µxâr­&Åÿ¤wùЖŒG@¸„xk%ÜÅÔ0fÆÏM©0ZÄnŸÂŒ*tÀØTÍKIi4in¢É6ÃÄÆ7#ï~[ü«6֯Ĉ–ÀåsÌÃô Ê$™¹"Fr{(ÍOµ±¸ŠìŠÆWª¹§îZ+vñ#sÌ7íM>¯-ÕÌaGÕÇ)CÈ~Ñ#}óŒQ~Ôš ¤Ò®¦ä·™¹QÙ°#b{ûÛ¬tè4û$µ‰Avb>Ów4ñ†"w‰ý¢»k [MGyOlÃü90ˆ¨äðG,v–ʱà rª(¨ô°Ú²®2âŽV°·sãc•˜}Åþæ³üÓs^Ui(ÜšÔxFs&šcr£Ø¡íïó¯ÐíEt¿2\‚†1åWÉ«|qÔ Ò¹TãsL£”$•'4£ÈÉ#Æ2sÜRrL¸=*[u˜žlûzR™¨Áóþ´¤,ÉæëÞ’Ñ_S]Ž0©ËïšnDqœduªÍåÌñÈñ!çs¸ÇP>«9âÞ Ð´D€j÷¿V’ð·†<7rü¸æ>Pqö‡_ZÊ5û WFXõ1,cŸÂpG³:U>Ú ÕÖÊ8Ùî¾Â©$“Ó¦éÿGz…Ž…¹y*bI0ñFrb¡cÓs‘·¨õ­C†ô‹kKda–#®3óªŸñ=Ö¦i|B¼4*™ ¿ßÆ‚IÆš=¿™£¹$vTþuAã£+/¤n^.Ñõ[½?S™9±Ï %@À$§Br ëœdšÂõ#Šø&ìA¯irÚe¿—?ÚŠOú\lO·_j»ðGÚk2Ǧ_:‹¿¹„ŸjÙ´­@WÂÁíêÿeki¢èϨްHÎO\zrk*â­^ëˆ5Òe-ãσ; õ>¤ÓÖz ìÒZÉõžcp¹ ïÚ®–vš”QfX\ªŽÃ›ô z÷CÃÿSúäoq$î͈)P:úõ•.ËŠt}IAK¿ ÏݘrŸÇ§çP5[‰íó)o#¿:Ö]IJ¸šËY‡ÿT%Çs)ÿ~‚¦C­]Šš7¦\-ÉúÔ€ºE²ŸVþÕ`ӵˈæú­ËóDçÊ ÿj´Æ*Hó9êßÚ‡ßøÒZMòAëŠÍ5ÇžãT›˜»më°ëZçpÚhzkˆùoo’lõA÷S土rhÝöŒ×*M½ÀVôq·â)û[+Í;O‰,ê<ü›‚Iɤ^êq½ª‡GsŠj‘­q¦«m«‹m'RžÍ‡Q …qñÇSF4¥n0´Ä:ˆ‡Qî¼± ãÓ)ÄÕ“QúL±Ö8RöÆãGhæž#Ó~½@#lã®ø¯ŸxžÝí$-y,Û칩ô5W[%Éû.wöøÓqÁ"]ø/ç;õ«ÞŸÃöV±Îm¡’I7pÊ·µZ4It[¡7ðë{„éÊTQì{W8ñ츢ÊþkKƒjgˆFË"å—*8Îø t5‹?Ñõ²ækR¿ý1ýÍC—ƒtȳÍwtçþ¥ô¨­ÃzDc/â·ýRb¯\1oe¦i‘Ão"ó ±9c¶wø ²ýmy‡³vÅNҴ鮥®TøLFì[û “ÅúÝhàA ¹—°ìf²gG`¦½Žep+<¸³»“RkiâeglÊzƒúÑËï£n&·Y"‚+{†#o`?ülUtð÷ix†Æx]{¡?"A¢s꺆¥ \iº…œ°È€8–<§6:†^àŒþ[UfHaT@˜lîHíH2ÅÀ’ý€« èÿYd‘.°ØF]³ñÚ®ZgiàΡ„g˃ÔUˆkFÓ aŒƒ——²Z4×ö¥å³žL¸æ~VÆ}3ëÖ‡ WS6²™¤nhøB./ne-Ï ew9 FÞ½hw ñ޹mv–í¨;Û“…Š@A¸È¶5­hüip̱Ïgýã%½h:v¹ ˆ­ÊTŸS^׃ëº=Ä¡æUç„ÿœn?Ÿ:Ä,8´6¥%ØÅ©<©!(}ý¿J9)Y7G B§"»oj..â€.yŽÿõb]&ÄùVÖ8³Ü.)õŽÖÒÎwÃ1“;ù@ßò¬B×A°šw’u–@ÌJ«6Àvé½X­¸^X W0,0¾è@oíó  `—Ý[Z¶Ñíí¡¸—–K¦1Çí·Sú|êªj0¤4å-ë)â[uþ*÷ph§óy«¾h|Q 2f|l£xÒíîmA’1». µ~¤rÇ:ŒŽô±¶ç4™eŽ$-#…ô6=@fI§Â@7Ò¤C©YÊG-Â}N*Xd;©Sð zïè8ñE©ß*M+"AÌàöˆõ>èâ°+Î*FAõ¯xŠv]롲Hï^-ƒŽõTâ=bX.¾¡hYd8i àc`)«6šXÖ<Äýâ+ÿâÕí/xt’ oõ¦LuÿÒÚ³-šâe p ëZÎ…§ÙÑÕÍŒÍLú{VÁÃð$úZ΢X$VF_PI úœ3pΓ}‰2¯,ý\Û)ù~Ƴ9mÖ{vúÎ#ÊqÞ¨2¤’êÁ,FÀSÞ´ T±°áëkY‰:–þRîFXœŸN´?ŠlõrÍ‘bŽçLeÄ–!3Ì:ðü«Ö¸G»Ô±Áw²A©E™%·´1c¿?T9Ûü¸ýkúéáë”â­0ÁªY2œ»S>ÝÀ;ö?€k‰µ=R÷½º=¶p±+'¾;š¡-ÃÍ©" †Ã/&þõ±pkš³Å}8úó fÈ¿å^§âp*É«Ú åír]€VSÿ‚+翤-I5Ž?ºÿƒhÝGù€óî$|ª-…ª’8­Òï­–ïêöñxê7‘‹eåК{ˆ¸%u»Ÿ@xâ»uæ6¬yQ˜oå?tûtøV[¤éú¦¡Ä#A¸†KK”8˜L¤x@u$~ž¹¤CoeÓí£ð’ÊC cãN\ÃQÃ7oSG­uHΑÎò”®w'¥L¸“–Ê>|(P2síUÛÑŠá¸Ô$ n˜`@Ê–öÏéZÕ¹76¦öÂÛ«!È#Ôc­CŠs¯š7cpÓÇË*xrŽÙÈ? ª}"ëéZB¥±žö@JòŒòœÇóÇúV ô?#ää±Ü“Ví:õ/.O¬ÑÚÏ|¨‰jæGòì½hÝÏ$ZÃK0gXšF?µe:1IY¡<Ìû±;`Ô¸4x )4™y u8ÂçÓjr®Rá¼yb¯:^¿¿ŒÎâ¾¾µ²ð´ë{o%ôÈ$ìFO¯RGåEoôô½¶e P7Nõ”q'ÝÛÂÒ¨!mÛ¦Wýâ©0é÷Ü]¥$Ï™â0ÈTæþY­GTkAζ¡0»»þužëDÄnhE¿j×è|–~)M2ç¹ ÔþCÞ©ÜoÃiš½´"W–Òê.xæa0Ù×o|N•WëBTÝ2 ÇNµb±¿ÆhÄz¹…ƒI;PÝwR½2©‚êD,Ùcïþ•ÝRÖ.Zád¿yhTõ'ÛÚ´:²(ñ×8tÆÆ‡êòOcÃ÷R1åyÂ8Û<Û~†©V{2‘±ƒW½3Tf†9 {CZ6•ª3ÅE*¬sWÝ*ó¨ÏZÁþ•4KŽãÉï-]?SZ‰Hʇ'ù‹íæßૺOÆ÷ZÍ£»VC‘’qZî™ÔL—` PK~¾õeÃÄ2$S¸>´7Z¶—W±m›¬m+˜ã7ùïŠ[i×¢Þ73º€YÊãØUŠ *;‹ UøJ¯_pĆé×Ãæe[0ïYF³£¥–«2[̲ħ+ŽÞÇáCnìJÄ €sЊl’)–9€ÿ½áí&÷TÕ”ÙJmŒ,Üö÷ê=ý«m¾âýDµµ:œÒ–”ò±ä‚ì@íðõ :¦£ q|ÆK}U9†kÍ‚ÿ)ÁïTrO©_6-Ò;"ŽF¶3¿½S¯. 1HÛ™s¹õ¨X-“‘V}ÎU´ŽG…€sÍ’»ñ«Þ–c4fUÆÀ_¥KwxŽzaÁ§¹Æ3ª£»²uuó/Ëý*‰ÅZ“Yè‚“ò*õùþÔψRÙ\Üâ]Ë1¨:ÏÒô±6ŸÃ Â§cw óŸúGo‰ßØU%me¸™în¥y¥sÌòHÅ™©'­m¼ ¯µÖƒ›på§´P‰Ü¼}¿Ÿ…\¢“'pCzS7:¤ó¬ ÀJ=êC01ø™ÈÆj¯+.f?i7¨™Nñ"ÆÈÀójùûéÂæ{»¾k‰9Ê‹…müºÎôåšÙãäå<Í…øV›ÃúФf ¾øÚ¶Þ™M…£0ß¡÷5#Œô·Ötܺ¶>: ûøü ǽd[¼î÷ýâ>Çù2s…¼éÊ:²ûúT >ÈÇv<½‡Î¦qËÃ6¢Å=äÙææöÏp3}Ïz%j’[[ &Ç$r3€ûã¯çøÑ§I¨EàÆ0Þ=áîÒ´{øõ'‚;ËôÝd™T?åSúõøV™ªÓD¦AË#zt ‡`>Cj™kc6¥¨Ekrƒ»>3ʽÍmÚT°éöÚAåŠ$ «NÞi¶úŽ%„ý^ã®qåoˆýê$’M§ž[€QûÇàk9Öõw¾Ön.f²†å\ž møVÃüÁ×¼%§ë)Ãör\\B ¯"xœÎ6c†Èê zk;{càÙÚÇv ùmD`]7Fµv»oõÆ  ÈOlôøÕCŠ8‘ç·k E«Œ9œzUì®°©–øŠp[\¬ $…—­1Ζþy˜//¯j”œD‘¢·Š²  Êj.§¯[¼qÌmˆÊpÝ~ oMŽX¥”?¨R;û×5rêêÝ…½×ƒ#ò“óëXçi„í0Aâ’s*É÷õª”úY³…¹ùNy±¾höŸy$怙… ?«¦+én‘,´»=1[™!ƒêÄ䟙5c¼–å-ÈHÛ$f ¶”ú¥‘ŠEæ2©Gn˜ÈÁ¬žß‡"Ò5‰âœ´×±»+Êý»l; *anR3€E@kXb“¢ËSoMø¹œ2ì¸À¡üo¡ÄÜso |÷¶¿óøêYz¨øŒŽ*‰ô9Âözì|G6§‰hmE ÈûÎy‰_F^@sÛ"¨ú¦wúõÖ‘y»ÀøWƋهÄRDå†IìEÔ$vQÉ%Tdg¥\~ެRâK’ë•yOÀOë[Å“Û-îàŽkgÛ•Ô0_qYÓ]†—¦Zé6–¥»•äu •  Ÿü«3²Ó¤dæ ÌûSü;.n~ªI"C‘ñÿÅhIrmàEW+ç6Á¢Mô…¤hÑe¤{ÉÇHâ96éúÖwÇ<ªñœvö÷Vð[Z[9h£Œe·9c×åíUÎŒ?Û;)d‰¼CŽØèV¶×r¼©”º(òŒì*áÂÖ“‹všgnI7 €õøš‰Æ:4zžZ+ë­>å–[y™GO¼ €_zǯôŽ ¶˜µÆ¥u2çQ;°?žÕ4ÛÙ¦îç$õf“ŠÐ¸9M•Ž¥¸*Â$÷ sç?©hß]c,sœy°?<ӜڭÌ@_¹_ÄÐ.*±Ó´žM2ÒÜEfQ–#²’w÷ü*wÑõ¬7j-:*²&F6ØŸÞ‡ñÅœòk n?›º•õ;ŸËH–Èv¨Ü+sJû“šc&¤$_òüçï¿ð}új¢ÂဒÜîS±ùt«üPZD€ò*g¹8Í}©edѸ{“Ëè€þ¦É¨À‘£Ë2A eØ('8ýj&£ÄÖšlG eA°¬ƒ‰x’;îKfˆBž'89Ïc··Z¨jK+ÈŽÒ3GР즚µxã~fÇ_j#k¨ZÜ\¬k'(aŒÕï…îM†£Ä'#8 w¨­>ïP[ktºH¼@ä¾:‚j®Þë°ÛÈem5e,ryœgñåªõÏÒjXÝ\Z¦™ÎŽ0O€‡8òÐûŽ1}bÛêQXýX¹ \KͰ=: ïkºŽ“ôm«ßÂÔ–‰Dr1a‘¿L×ϼ[ôƒ¦q½¾ŒööÓÚÜYx¢â9p@-É‚¬:)ì>Æ’ë5âÌV1Ê3ëßö­IåÑ@^^å†ÀV»¥é¶öúTPNЀX6ÃsLjœK©DŒšs©la®oò¹ü+ ×xÐiÒIk¦º½æ>,­º¡=~-ùÊšÐçWs)ñ䜺ɒßëW¶µÓôy5KçðÚ+K4°XÀÉ'á½|Ù®q5çq4šû‡‚ÙO%”DàÇ>SìO_‰øVÀÿJ:´w6Ú¿êLÂ8®W,güÙûCÜïÔïWoI!—<ÄœœQýähaŽeýÅX–Eqö°GéFôûˆå"Bæ†qï _ñË¢é×ñÙ¼²#9‘IYNyN:nç~+Ô¾ŽøŸ„ôû‹íFÉZÖÝ µÌÏp> T{;{t̲s å<Ùøb§4/ww$°aQÎA}¿*³é<5h5ÜÏ+㛕|«ýë+Ö/þ©¬^Æ$ÊÃ3(Ï|Ò¹gÅqH9/ åÏßqóvÞkk¨¹­§YWØî>#µ"úÀ]é—ur2Ÿõ ÅTld<ãzÔønlàIžL'îûV…§Çjáf>~cÐôZTå‘e]€ØÐÝWP²ƒJº“QˆË*InO`=Í|éª]jò8·©$ª¼œÄÝ:Öûô)ªIªý˜'e2XÞK¡ÄƒoûÏáW+ˆ`DkØ£UèzÎ8«X’×”aÈJ©=ÍRħË4þ#g$ãJм„2F[Ðãj0mLè¾!UÛ èUý…©ÀC.|ýQ.&‚KÖ[XÂÆ›§¹¦/dV1C!!~ÖÝoÞ¡4 yÛÅo.àmA8ƒ][,¤raœò&N9ØþƒÖ«–òYÛ”ñL¬ä»“бêG¥74aŒQ{tÔZÞxQ¤CâÂän§¡¿ã[ Î/-#b{r‘סý ÒôÛ9¥²O­¦A–ôõ¨WüYúQkx§· ÿ£m† ñnƒñϵfú¶¢š¦½.¨ö‹ldP¼ˆyº džç‘R\¨DçЕ ~=+¯¢M*âK„„¸Æ‚jö+§H«Œ`†n¾ÿ˜§4Û®bk9×uÝoèψní4x­ŸIÕ$7«±ç Ø Á à mUÝVµãoª]\Z:ö#ÊÒ©ñöì}ÇÄúÔ›];Oä†ÒU¸ÿ¾Ó~=*´Y'º‘÷nfÛáW®Ö,4{Yá]¥ææUÈÆ¿±­û‹tÛ¼½Y³4Q•>gÆzu"²{ÍbóŒ®,ç×®q5¬B’%r䜕Û'|l@ÀzšM áÑnî­/m®(B¡ù¤ôm‰Àè ª ¥Ä¶w±´ŽÒí…Ω1Pïá(Ë|òP|ÍS¸#N»¾»!,å1ÉrSñùÖ±aÂÒ«+’!©ZO\Ø[éShóªÜÈš#}džÀ«ñŠùÆã…ï#Ö$Óíà.±·•º//bO®¼=  *qr@šnRQ€¹ëZ)üa!¹chœ`Tµ×%Yb‘!RïÔÿj¾éš‰Ôš<òȹ –;uØzQ—KØíÔµ´Ñà}ä"‘g¯8s S:ʾ‡Ô~+¿¿ÖøGPЦ‘/¢1—+º÷cÜ ù§CmFÂI]cSmË<zôÈô;c5¡éòÁv±µ´˜ÉRzUÒ ZF-»í_:ë-x÷ÒMum< #+,eNçÞ†¬¸ïR"¼’9UãvF_¼§´®k½KKI¦“œ³ŽÃmè-ý€Ðø©¢¹Sá8D@؃ßà#åV›;ÔX–D} _8~iåÃ(Ç>oaV9Ë«¨vûKëÞ©è•©†Ìÿ" FíÜüèîÅ·ü=¨ BHn?–W›<„ö'±Œ~”8Ç^µž ëØâµq«À¥#Æzc;üóUÍ ‹¸•ø‹G±7aa»»†Q’ÈÎ#;ƒ×­}g¦ÉÞ4ŠÆ0FqïR¦”ŽõIO­âH„Ú<’Œx9öȬþn-Ó´hÛÌד¯þŒ-ó=ëíYÇñÅ÷<ÝZCmmlÄÇŒ¸'®Xü;`T>sâP[n€f­0pĺΜZé|%ðÿ©G­‹FM6íín”™c89ØqíI¼O J±Œt`Iâ[¹‡ô«iX+]/Œê:ò¯”gâsÿàÐKk’ª1ËïÞ“©É"¬#î1$üiˆ»`lh‰‚õáÆ"˜Ï6ăRcÓî×K–í€o 1æª>«ÞÃ6L1̤c 1úUçOÕ mæ´x¹¿¤ójµišµ¬7‘J‘†Dèmýjܺ½ÒŠPvÉ^â†ÞÊ’“Ï!Œ`wªÝÄé7;F )ÈcÖ„^²xþ/~´»IÆ ¡Á"¤6¤è0ǘ~t{JⓨʼnzÁ‘ðË}ý¾Éø”j +MY‘Ú"8èW#BâÊ3a!‡*ü¸;UX†@V'FåMÎF~45¯,,¬›žp€³¶=ûÕR=Y5Ë„Ht©@‚Gp7'1½Z$áç]65QŒœcó5AâOáÖòý[˜´8<‡ìBh Z½ÁçfÂ{TñwõUŠåþ5õëñÜðÛðõΠóÙ;)Ìžg}Þn¼½6>”'~Qƒƒ\RNsJÎÛRQ1/1n½v© å[Öi÷6pkDáyíçc<ñ‚‘tÈûméýë$ãkí>?¤[«{K©GåžM„ŒrßuFqíŠ×ôÞ ‡K%¾ß^Ÿ†U?éõøŸÊƒqCýZ…'ŸË¶=j§¥kFTA6Tîdý±F&ã=^ä·]6ÓÃu*|NfÈ;zŠÇfáxbÇf¢4-ÏÊzdŽƒÛjÔøg‡ pô.$þdÌ;±íò*'¦I™à¨«ÄòiÚ¼–‚Ñg…†ålã'Û½/Lâ^—ˆlu=RÙɳ ±¤Ã*9† Û#ñ­zÇþ¾±†mÚd-¯(UϨ^‡ØÓ7,êÅåYýZ.–n]æ‘’9Ç¢ç¶Ø?1A^Y¿š„2ÁïN%Á$²œJ‹©_D–ÃÇ„J ïÚ€[Þ'6X²ŽÃ´/¢ÍR ~8 -Ìh‚'xË·.I g¿ZúUdÉ eö9¥µìRùe$ÿ¨A8¨Úÿó¼vP‰ù”+,c=}EaÑptÏ®ß\r(‚äó’ÝÉÏ6ßþ4OGàë"êY¤ŽK³å'"Ž7§n>µq;FȨ¨Åyc]¿Z¤ëºd—ÍspçaજúT\†9.¥ѸZÖé߯²I¸ý+JÐt(,íᲆ¼y8Üã$“¹÷&Ÿâ®›Œ/4Ö±’;F¶7vxgp; Ž{ަ†ßðžÂn-à—ë—(CcÌðoÆŠi|L®ání<Ÿy:~3‰¸Žf‚Ae}Ϲ áœrƒëÜVC«Æ³ÈUs,îqÊ7$Õ«‡þ‹îtëeÕuÈÖØsGlw{·ù½»|z;=¾¡§K9°º¸´iS•Ì2,3œÅÔtë­CKñfY ÒŒs>ràäûw­;CY›‚ô…d>"ZÇê«ËûPíJêk& #<êCr°Æjãe½ý¬wPý™>`FiöÑf‘DðóŽlmOZébFÂÆp6Ï­eŸJú1ÒuëM@Hïa#'»¦Çò+Yµ¥ÊÂFP3çí÷¢IàjwYÜÈR9dUb;dã>õZã£Û¾Ց䌋 òÑH£Ê§º“ÛÔ{|(Õ%’!àÀåOp§zvÖ+«+¯ôî)éu«r¦®5ç–=íP vj5ÈÔ&r"sæfÛ×+¶óÚÛñv‘<’òÇì.ìò $×ÐÚ·Ò×iêà¥üøh þS 1z²[†çBpHÀ5ŸëÜoü.GŠ(+¶XçzεÞ3Õõ«‹).™ ™ Œ>¸ÜЍp¶¯6ƒ¯[êfÍ/¢·90JH b;uÕ²Zè_E_HúD÷k6«Ä¼ÒÇeÏO ò°Ïu#ßF¶ú:Ö4ž"†u¹Óæ)™ê3Ô†kYFT ± UP°¬ÛŽ5=-rM-­îÆ©gÈÕÃue Œóg`Þž´[‡åá§ËÏky&£4-Ü41‘ #@XŒŒõ5ŠjK{«†Œ ÄGšN¬¾¿ëCL\6ÅrÞÑï®L$–åRÛüE}SGSŸ•9žÕÐ1\#"º™e-Ê@éRá¶i±SËë]>4<­֜Ima£ Lf(¢BÄÉ8êkŠx“ˆ%’bÁfvšií œœ‰¯ ¸Š- áÈôMsQæšÉBAq*eŒt î:g¸Ç½»v±ŸT–+Ä]›Ã!¹sëéTÕáyS]Š[tuQͳƒŽ‡½3ªÚ½®×oLuøRt­*»ØÔ‹ÎÃÜt[ :“ͺúõ_¹¹´°¹ÌÑ<*z:¢^ÜÍsΤ»;ôïB.ü(Tò®OozV#&·•à¸O½#àEjœ+®MgÂšŽ§¯ê],”YŽ[zž¹'š¬èš ñ½Æ¹wvRêæfuÛ*GöÎÃáE¥á© B ¸¦ð¨1ª2÷$î>Uë^äÞ$°3Ô‚œAÍ}ÁZëÉ£n@IÜ€ê§ Zµe⸅• #°RÙéš{Y¾ixÏWZI<ÇÚ¤R€ý(}Å©gy#È'rEÔìQty˜0Ç”g·ÚHÔô÷ä±/‘|¯ðìjÇÂ-$vRˆêFq±ÿJ±$÷“1H*ޏ8¢p]µ°Ui•Ÿ¦AÈ3PhÞu!²Ïœ±êj±vR)['’0 fôÞ³M}ï/ —+9tk£H=½*WÐ×pîÆÜÜ]j®“_I¸³“?i—ß§7Uükê}_IYÐ<\®² «)È ô Õ+Sá‰-oẇΠîÁÁØŸz‹? Ãv —NBöS¿Î§Çcokc´jcH‡*Œçjƒu¤i×s .ciÇ1ò«o ÜØXA«Aq)å×â}*íßivº=Ì×w<é Y!S+prIÇAÞ±‹ß§]&ÊÜ'„õ&i4m©«s Ç8O3zã¥e¼[ô•®q¼Ö–š¼v¶Ö±ÉÍÛÀ„í’I$þ8£;ÁWÒ–½žrTÂçõ­'†ø#„žu1i‹$«¿üÇ3ç÷$U߈øwL½á;ØõgH-Õ9¼fÇò›î¶þõò¾ Š²É ¸r„Œ¯Cî3Ú«3&å ¾q½ ¾·hîä2 xG4 ÝOCL,=˜0¹(˃ØÐ{¹ÌSÇ3¯3Fà;àÑmKY±Ôâf‰Œnz¤ƒûú7[ÕŒ¼?k%³x^4yº“•oïX?^ý¸`·iÈ9çÎÀÕHÜ\!}€¢±é¯mj9òìÞgosëZgZÅ¡éŒ]ÜÝòòýÑòýI«ÆÔõKkXß‘ä|Fqß5kšÁQŽJä|«æ/¤ÈÖ¥­Pƒë `ŸÊQûT Y0 qôé“ÔÐÞ4Юc5Ñ “m¶Ù?·áU›u£Ë‚:‘[Äœ¼9§D²`Gm~ íQî5ö*s'çUûÝs9óþuLÕµ7¼1Y¦4•¥Î7$ãlúl™§GŽ]¶«¼ŠÔd/*ŒòtíÞ£.¥y©ÏõyÁ‹²&Ãþµ­ð•ᬚ¤£!ÃŒžäÏá·ÌѽZýUYWr;ÕþKiÞBñ…|gv'ãëTUü)UÝÁ/1؃ڠK{ofêen§¢îqÜÖ½¥ivöÚqj ²‡u2msR­Ûz ÓxE!Üs>ž´½CX´ÓtØæº˜DYð¾Rrpvͦ¼Ò¯õë©MÑ>#ÁFëøVËÃrè÷º0éq¬+ á¡ÊŸ]÷9=ê¿aÍmÊbùªe挓ÆQ—±ôª&¹Z9O,­²©ïU)Yäg.2Ç'µIÓmfŽyÃ,JŒrï_JBr‡á½ûRÔȘïNæ¼NiÈf_²NWÒ‹¯’Ô (ô¦$™JeÀ#ÜP˵“WðôkÜÍxë (>§ôõ®Ûðõï Í-®¡ŽáŽ9º«(îëNÉpP‡ ‚+Pú1‰n4}JçjeS¿L/úÓ\GÅv6Ém`ëqp2 åCñîh6‘­Å­‡‚ñ•îTd†ûãÔQ›Kh­ ˜^c“¾~TýÌü°äŽ»jªkS´½»Gžn„þÔ !â¶3È2_ìü(¥„’Jàò ,p3°ªÝ%µÉ6‘‚$ò–“õÅI¾Öoui­4…¸gN`J…É;l>9ü+máámœ6q¶@Û8« •Tœg¥55µ½ÀóVþ¥Ú¾múb¾ú¯10oªÁžÝr߸¬²ë\Àä³uÅáý\%©–CçsÔWÐÿGÌ“ð”W9cÎÌäþb3ÿ¶®±\ K½¸_«cÅszÐs{o·›áH:¤áJĪƒÔîj+Í<Çù’3g¶vü*e¼îÆK9IðÉãŸÔP-zÞK ¢¶ÿåæŒåp7ßÚ‡YOoaiqo$æ.cÎ|0ÆÇjTÝ”R€/"¼¸-ŒÔÓªGѤgÖ½& ­sçBïÛ4vëJ±»b¸*OVoôª½ç¦›:IÊñÊÇWÒª=·ò™ßtûúõ«]÷ðç_ÛØË ½Ô¥qÚÄwBÛíÑFý7>Õ“}"ñþ¹¬_ÇÍç$Kç[h¶=6îzîw¬æûˆú×üFó\@èmbc‡<ÇËûš¼]35óucšù·éwL¸³úEƒÄEµìRNÅ”r‘ñCÑ'@T`œUÆÞæÃ[Óï4ù&”Ã*ºÿ¿_jÆî­§Ñu[­:ã!áb?xÔüÁçF"¹žÚÂÔ6|7ŒnÄTYµ&Îc°¯ÚÑjÚzëzäriÚ~Ì ÿö‰×”ý‘ñßÛ½[m¸Aµìmô»slÙt[Ü“’Mv> Ð..GfmØ÷…ˆüº~UAâ(µÛ¸­ff$)–œmÛáB ³š-F(âC$’0EUêÄìoÖÖÑèš ¶ž§> aÈûÍÔŸÇ5TÔîË#Õòòî[—··G’RqËäÐ˾Õ¯¤A{2Ú»ò“ÌÄüßK°náðí¨Ø5íâà£ÉüÎo‘Øc×uÒx…µˆ³m$~ôÄÛcßô«uŠØZEõ«¹b·LâLáTÓsµR¸r÷[žáµ5 r§:0£aÛç@¾’x“Nº°Ñ†“¨ÁtRIÄN®Ì:Œäþª–·¼×ÜóCæ$œcj¹p¯ÒEÊ}iÚÒDÙda³C޵²iºþ—Åzx–ÖxÄñ¨i!æÉPvzƒƒ½ Õ¡žÞl­îvÙH>¤€¬Š.¥Öor|ÜŸh¼Ó  ·¶‡% ‘ºNõ`Óu«o ¬l#aÕ[c_GF¡FÃzU4ÅÑŽ?1Ãy±zY÷WbŒs€¿:HÃÀ ‘Ô{T{Øïð­P뚇Ԡ–P–÷0d‰H`­Üf«×üW«óò¬èÀv(*™¨ñÖ¼…ccläFcè?%Ã\4ó͵$ l‘ó(HØžlüMJ¹âÍ öèZÀef|ïÉ…ØëíéÞ²{Ù •ýÄq‚#V&<ÿOj?ÂzŠ5êËp@xÆrkeѵ!YÚ@ªƒ$“°êŵó$èå¢#+ð¢‘j¶ÒÊ#ÊqœÌ~“¸C‚oëˆ5¸U¸51\cÄp¡Aå Œ ‰¬ïBú »Õà’îç]K-˜b–ºú¾rü7÷Žúú@¶²’óKºÒµH£²C3$€zò²ø[Ù.•ÁÚM…ÀŽ+¸­N¡Ä˜Ë Ž ;Ñ[«hÝyŒ¸¨sÆZ dô¡Rº$Œ þüJ%‹#¨ëOG }ÀéSìàat:Œí@xÆòÁ®m­a¹In æñNyÇSë·J¥ßÞ\H2vª•㓜 Té5_Ý›ÌFÿ™¢k½ÚÙLà8‰ïé[všÂÚP¤’ƒ;wÆôÝô¦y¦±D03ßÖ²ž&“XÖoùnncµ°‰³´Yoû˜í–ü‡nä¹c§_YÇowmÒÂç@¹Î;t­“AâKÛ=¬n"#>'doCþZ ¢C¨K%õέwã^Ü•vUû1Ÿ(öÞžœ²9VØŠ€îLÍŠrÖê2þ’¾{ü*­Åú±¶Ô-mc~R±™=Î?jªÜq5…ÈkK©V7+.|¹÷ô¡·ZTR¸“lÎ;ÔÈo/l XtéÞÑŠ•-å8ôÍSõKIlõ$žå/‰ùœŸ½Íî=ꑨñ Ôµ[›Îb®JƒÙzøb†MyÌ:Ó߯¶¬¸ÄƒqïUkÆy'2?Ú=j-Òµ ô½B ø£ŽW…ƒ˜Sìwð«-ÇCªM$×Öþò±feó)'ó~ú²àÝg‡ñ%œW’Ïl ˜¼UÜ«/F$tÎÙÁ$WÑ:ÖŠ¿WåHªŒÀVQ­hËÃ?.àUgT’âkq@Äb²ý¦ßz¨YÜÌš€ºŽWŽ\ìêpGáZ· k·s@‘ÝâncŽuañì*Ô, ÓÙLö˜iB³†Ç¡¨wüª­´Z¥ñ6eÄÚlÚE沇Š\dÄûá‡ïê3X äWÚåΕv†+È›úê=AƒC£º—Ju½‚á¡”t*wolw¨úƳsÄšœw—±Å‰¢5À zúÍXm#¶Ôxz{‘ ÈÙ‚VSˆØÁö#óÅn_G?EO¤:æ­Ö¯p/wSý\¿wØuõ­îýA;šÊøºÁ­å—PÒ£Ë6ïè¿æÚ³ ­GY±wº‚öE”‚ 3øvùP8¸Ê ‹ BÙ£”“Í"78'×}ÿZ\×Ö×(%¶œ7pAÁ½J‹é]Ó#Ï7ñ:rNrÀ{7_Ç4nÓˆ­uHEÃsÛðåÛ>ùèEH±âM3L¶ºñ’^f~ndPAwÏ\Ð}G‰ín¾¬ì¹ê̦©·3Ç4Œþ/9=Îrj Íucp.¬n$·”ž6 Š1ªqÞ¹¬pØÐµ&ŠhÄ‹'Œ•Î8ØóÓ;US$t4ì3Ÿ£YéžÔJÖénï¡‚E<ŽØ#?‡çDntè†@Œ~SAãN"ávX­®>µf¿þË9, ”õ_–ÞÕ{ÿó©c©iþ*ö·òùLr“Ü7n†«šm¸2·‡™UˆbwÛ=©:Ž–£p£mŠª^iÒg—ÔWÔB½^; Ó\ŲzQ=2É®lsûÕÚÓ‡`;JD¯Õ±kÖ\w«kZO›2ȧtAÔà÷ýÍ_¯Z ÝPBœ¨£¢ÐUúv3̤“¸V?Tu7,ç}ªªêqYâ$HädªýÃèZ®››«ë…†g‘Îȵ¨pŸ éÖK¨ß:ÍzsÌÌ|±ûïUþ!•SR•`'À'(ÄuXœNY¥I20{Ó¼;Â÷|W%Ôbê coÊYä-œôvǨê*ÿ¢}h¨î5> Æ1 +üIoÒ­D¿Gö7qË-µÝô¡†âå†ÿörÖ}ôûÂVštF½¤Y¥µ¶öS¬c;´gòqŸ…eúLn<¨7WN¤ŸPjõke¬É§4W^-«ãwNlÑí%µ;[9h$t·RìÈ9‚¯RN:w¦ÓV¸¸ŽI ªs…'$ç Ú»¥éÖG’]kT¸Õ/cV™[Ë;ä\ú“ÐzU›†ÍÕä‹ÊC¦Xî~U´hV’éë‰&ñ€Î6^ã-ìa}_J·-çF£ü,ýà=?O…V¡ÔÀœÃ~]é›™9¢8léP$…D+Ê¡yOaŠvÒE‰Ï6yHôëK“WNu¸¸Œ¥©nWldŽ>8¨\'ÅqwM%½¿Õ´[OµÏöîôöÜ퓽KânÑ´»y5ý i ]–K6<ëæ eIÜoŽ~UMþ*J¯qfcå\dPûþÔ.fiíÖ8¢c’]°ðÍ.Ëèùn0·š«×–ýÏö«>—ô}Ép±ýBK–@Ë<¬Oà0¿•jÚ]œÏoà[ÆG×Z·auà´žLÅfúÕœ’Þ%µ¤y‘Ø ¤œ ÐaÓãÓô›[4Ü@¡9½Osó4¥ƒ`©¨wO=™ËšÜȧÔäcS/Ï1ÇÞ VîïÅê,Ä,ryC1Æ ŸPt˜²LÖ±n&Õ®5^"¿žKàDoà¨ÏeªÜ—¦0Èb’@F2:U‡‚5]rûU‹F²¶“QWÙ`ÍîAì|íð¯¢tn °ÓJ^jj·WcqTÿÖ?—ëA>”8v-áÉí¡so~©Ê’¨ó2u)óßñ÷¯’µ>×4‚Í-ô+÷¢ûCâ§Ã5X’öì;#1FË‚Σ´óH|ò±ùÔïªj¹ÿ·ÍFŽÒBX¸Â¯ç]PÙÀúRÙW/€}(ö¨>vLaºŽOfi`© f¾Õá.+·ã®´×íÂÈð®¢ús9‡°9 =ˆ :¾‘5õì1oÜöZÌx¾[-‚¸{©<ÌírþÃ5C†Ê{Ë‚ÖÖÌyÎyTd Ôø_C¹‰c–ã•S ä“G-8¿†Î£4ZÈVÑNRÔœ<¿õw ùŸj-ô•ÃO`‘êÚLAtÇ!e‰пcÿIüÄVd.fdðÌŒS94âJH1 n”F-vÃHU3Û9ÅÓøBÊé‡Öîe`zˆÀ_×5}и„à•d}"+–õ¸&@~Dãò¬'VÒßMÖu  [‡„g¿+š†ª \À ®Æ¥ZÎ-fŽl~uÎ; äÕºáCV5‰Ré­Œf0;ž¬=ií Â;ÍML¸ðãóOSØVh–ÑL$/ÊǨ,0j©®ëš¬:Õ͵¥Ò5ª?òÕ£S†wëÖ¢ZkÚ¬^ÎÊç#—DHøìE}3Ì{ P9®61½F@Þ. Àm€§/EÜ0›I¤UryŽV­¶ÇJ¿‡K¶%„ì#^`~ÐÛ¿­үΞ¡ÂÌÛ:ºöô£w×]*Gxc2¼gà 1g?¦È¶V–†A¢¸ui£ÄWÉüQÇ\K?ÞØ^Eo¦ iLWµO.Ý1ݲ0{aQ­µ¼¹tÜæM˜à íÒ®vöCž?4ÕÏR=>n¶¹9äfò?nÙíQuM8\Äy†êr*­u*•Bv_js„ÞçMÔæ2HÈ#=NAÏëZ†›'ñ¼C7)z)¬ÃÊcx§Œ€~"Šqž‚œU·ºó4 rªèø Q õ­T8wèㆴ;ne¶kË‘Òk£Íø/Ù†}êñÃ65 Aîõ8ßOŒUlí‘ÐwðýúCá­oVáI4.k[6–EfY¤lƒr„¨<»…ߦ;×È|sðmÌQëº5ÞŸ¶EÊ/<s€‹•?s¿J‘ÃÜ\55^GÄêpÈæ=«[áZâ)Òl‚Ñø;Œç¥nZ>·i¨Ø‹*ÄÀaÕ¿µWø§ŽŽŸlö6,’  pe#¸_SYœšÿÕUæ¸ne=ëŸAIÒx„ÜO(’ g–B $cevíVtœ˜‹˜*3È[cíU]O‹µv †Ÿmâ(È,¬@ùäUYâþ/¿ÓomBÂU#,È‘Aè»ÿÔ@«ßÌš>‡k¥Å'<ª¼ó8ûò§öÀV‘-Ó]éZ–ò.Û÷#ô¤é?srá&xUq’æŽÜ𥵵“η ã¬ev>©wú=í•ü1i±<¿XnTo»¯1ôÅXC>—o¼~>6wû%­X¸oV¶¸ÔÒ0ÊÒÄĆÁsøS·ºtm~’Mh3‰úŽ*».“£éšŒ·¾3\rŸä¯!òú“ê{PíOˆtëK î%IÙc^l>Ãz¥Çź–ª“-¥šÛ¸Ї<޾4*-_ZRšŒ·n.@<¤¨ò¶Æ —TâË¿ß\Ê«Ô!Oí]ºµñ-KÜIâ; …ïîM;$·QpÏñ[È$9»NA–Áèq¶k+Ñô¹&²Žâl™'̬}KoS¦ÐJ²Ü•ÀŒ ëåÂgr õ8í_ApÝ·è:,'†‘®nz¼ûlY¿nƒÐQFÕ瘃C/®’XÁñïŠÌ¸ŸGŽK¦¿„üE¿ÕYGh'SW¸€ççnßZ§ßp»ÛÏü©I;†3¦Çqkvaš–V>ÚˆÜÚÛe›•°‰“Š«-ËŽqÐ7Lv¦yÏ6X–Ï\Ô³x¦0£#ã[ÏÿBšwÝÚ^ëVZ]Ͱñ£»œF^@|†<ìXnÏCì+è=jæK‹S– `[ÄB aëžÕMáO£ïT¹ÖxS¹¹ÈH > FýMŽýAê­®ðëðn«uk0/m™¡—ñ#܃ñÛÜU{ÿή‘§iW&K[ˆuˆ˜#tæŽGÆÃ˜vÏ\XÕ•ûÜ\Kõ©üYdc!v;–''?:/¥ÜêW:ÂXhpIqrÿy:(õϧ¹Ú¶‰ôÛÏá?Îtžñb^c†`7ÇçT)S½ŸÁ†ÕU‰Ç)É+ñ¨:¿Í'P‹J2fD|EVc±a)VS×áSì´nwk™×.ÊOõ«v‰Ç¬’ÕffEòApÇ|K_CFïn9âæ H#©ªôR:´²oPì4û«û{‰Ö6[~nE8ê@É?˜ Ž™"JPBÅÏLŠ' ”—“ýo›ÇNWRÀn_–õpÓo^) Npñ’¬=Å\­¥‚þÆKKÈÖ[yУÆÝµƒq— Ïšá·óIe6d¶˜ýåô?æÈ÷ vÖ×W.!AÙÎÀUî/þŽ6eå=³Fô~i˜^ƒ$ûUÿJB¡rk6úHáä)¥b%ö=©Ç8 šLìÎeÜâ¬Ü3h·šŠ4ɘ¡!Î{vüÿJÖ-.‰ØèÒéÁ·:î¥nn¤NT†Þ6äy]Ž ƒŽçäj“Ã_Lº/ÙG§é±K¦?ýñÝ|ý—ÿ´æ§MÍ(i2À ƒ×;õ¯Ÿ¾šlÖwMnȘ§ÊÁ!C‚ÝJŸŽÄ|1éY †³©Äò zœÕçEâm\O½áe'pÊ?µjZ>¯-ëÅ•ò@ØoZYLm¦FFüÃÕ7RÒîmï亙‘“å+Ѹýê7‚ÒH“dz/_qV}"á­áQÍW}ÄÒ‹™$"8þï«v£“Ýø’=1SôßF—wYàèd?ÛÞ­S„ˆˆÂì  ‡Êºò „ã¡ê›ÄZ½Œ±Þš A$«/pÀí_6_ðÏ _q-Åï Ù ë·€1ž¸N€{.*Õ¤Û&Ÿ¥•’dyùɃ°ô¡wüY{í“øp+ÿúAéì*¹¬jQÎœÜØô^â‰pe„°÷Æ*Ý¢ S2ÈÀ.0iÝ[Vçe¶·Ä¥zvÍÐ9,Y'_ç±ó6#¶+—š:Ï̪yFz‘Bì­F“Äv“:øh Vv;`‚3ùÑ­O[Ò $¼\“€NÇ¥Q︋Mºcà`: ùÕoR‘g‚P¢>G gΗ¥ÄŠJž\t=*Uöm4¾" .~ØÆE@:vG,i¹ôWBáKo¯%Æ£Ö9ð3åÏno_…^ø®ÊÎ÷…žÅ‚FmÓĈ€F ö=+,CÓ$Á¹´‰½”rþczu¸wLÇ=¹’";g˜z`—sÍýNG.±¨ÿž¸‡¸õøš²Dgkv˜Âç•9ŽÛ.ÙÞ‚^^•Fn zV}¯ÜêÎï‘d{ЧÞÚËy+$"Y7Æä±Ìšuð²-4„@3#!Áÿ•™ , §òÎÀã©ïMò,ÀàòçlPyøz8Óš6‘½rGö¨Rè’$2ÜŒx1€w;ÔD´I”cçV-'O3Î#‰Äkæ9Ü‘ì+já&‘f¦4Ök'™¹X©¨­CEÕî)r¬éÇéV.áÿøÓ¥¶NX¯‚–µR:§Á±Àö¯—´Îúޮٕͯ†ȶ² ôbÞã éUn.ú<ºÑnPÒ‹M¥9Ï7Vƒü§ÔzÇÜßÑf¡«AªÏ¦ ˆÙŒ²±„x„ìæž½{ÖÅó”?Pk°éqK„P <ÍîEK»ÒVé¿–9îN65Jâ.ŽÞTžù`?â:oVï!刦9-ñ€*©eÂךƱca§³’ócl ÈøžŸø­,Ìh rY`1ì=(eÝ“^:ĪU {õ«þ‡ÁñC [$Üä¸ñ ºïúb½{ÁšrºLštoëÎ ïë½DÖt‡°Òá[,(Ò° ccמêaì5ÐÎ ¥Â‡‡ûüèÕ®¦–¨džeŽ$ÅØàë@ø‡ˆ‹¬?‡Ù؉ìmÜHgtËÜl;¾ÿ 5Í–›`¿[`ŒF0<ÍðžôΟtÚ„'`ŠAØU×Dµ{`e,xÒ9ƒc ?:)©i\ÏìÁJ#p:þæ Ãö‚nkvd'¨êNÔmŠéÙ‡9Œ~"ªü#¤[®¯¬$ÀfT” PÀqìr*]êµ´²óÅâ”¶WuÏÆ³^!gyžàìî@j¡3É*r¬Â¥é¶Ñ3¡Èwn¾ÕkÒí£I$ B‚3½lÅN)^WøÒ©èeðÎëÌ*Ý¡Ïn£–2F9`v9«­›ç”÷¯žþžõÑ®ëðèò‡·ÒWšUSö¥n¹ÿ¤`{Õóõ劮H=ˆ£š/Òè áMpu;]Žå‰p=õÆù ڬѡHóùÒ¢½‚âÎ)í˜]ALl1Ú£¼¼Í¹Ú…Þ^´HA}‡Jϸªñ/­d·xŒ‰‚O©¬*þæE¿xà—•ùJœüÑKõð13ò2Äš…M*’I9&¢Lá%ˆö5jà[i¾©s|"[Ê_¡Ü‚=7Å} ¥Ý Ò’áa:ŽY”ëð5Èô;ÛË©-‘R.Aœ±ØM¨¬*ÛY­½óX‰n`¸ÆOO}é™o9'PN5ûœÀÑÄ0Äc>”ÞÙüC Ä–û¬{Ñh-™Wç«Ùô½JŸXÖn£³²·Ï#ž¾Àu$ös_5q§Óf½«q=•Îâéú„âXíU¹^çíHG|tàîFkéÞãk-sK¶¸¸™DsÄ%†äùUÔŒù½ ÔRG8ðñËë½akÅ‚]XØiÓƒ/üÙí#º=‡ëð§,®"¹ÓÒx\ùˆ}Áî(’Ü[Cjó^J‘ƒ.îp÷¬ó_úH½yÆÂL°BX3ÝÉ,Øì†üϵ\ø‰§×§ŸM½Ž%»Š!(t àäv;м%³§ŸÃ!O|~”oDk®l.Ì~=¿ßµOÕlþÎH’B¡¶8ëòªMæyjäG"Êcå úP¹EÅ¾ÒÆñŸR?zD˜HýhÍôâºprÌ»üȽRle…u VPd\£ ‚3¾G¥ãbÖË‹¦¶Š¢XãAʪÝÏïUé8£ˆ²¾À~W×ø’Yô‹•2s¹^` ë‚íYÓÏssqãÎ|§ìc ß½HŠuç5‰•¶ïGô«ç³¹I-Q•Ô€X“éŠWðYµM.M/Oµ_¬OÊ‘¢€¹naøW>ú+‡ü;ÝRAy¨ Â/øqû˜ûŸÂ­í§óÌœ‰æ=¨­…¤ˆÃ ½jª‹j–¶ƒÁ†#ú»Ömô•ð@ÿñ-¢*O%Ê ²ØÙÇÇ?#ëT¤WˆÇ"ÆdèE3¡pÞŸ¡ÝÞÞX«u!ß“Ø{oGbt K¸4ôW±yŒhX¯~”h$†` –^m×üh=ý‹Ý)E9ìçcU9xu®®Ú;Ôh O´:öތš۬  (¨PeÓgü¥dÓcI·²?Ä­–xÊ)•rÄlkd‹MŠKhÞÜ«ÂTr•Üb¥®ƒ?"¹€w('i¾LÐõ‘F{5a¼o£Osk –HhdÊå€òž “ò?*¦?êšÏ*ÝꊅqËo’Ÿ‰ÇéW¾Ò-48íá…^A¼’ã%›¹ö¨üeÀ6|Sd·:yŽÓR‹%Œ#ŽêØéñþæ³]?NŸ@¿–ÓWY!™@<¤u÷¸÷«®›©Æ‰ü¸”ŒÛU·HÕd(T"©ñ“V˜šæXÕ$bKo‚1RÒ c«v8yÁÈϵ/K²[f6¿ps>Äæ«œOfö (Æu`‡°8¬UÓ®å ã[ÒâH-Õß”b@ÜmékÀºåÕÔ6ë§È#ÿeIldã; Õx7èú÷‡´Û»këÛiyyó±¼ cp=êå¡éÁ/šâ ¾dr´A0çëEî“Äc:e$ê š¨ñ7&”†)nÌ—ÚÜŸ‰ô›Ýñ¾§w(ŠO ‡Ê±ä¾ô»>8Õ,ì-ÄJ?ÁŸÍÿ»­[4n-±Ö-Ò[í>ãKf«H9‘ýÔõǹ÷«=Þ¯a¦h7ZÄò m­bi¢!¹ð:Ù=>uòqæ³ÇZ›6£ü‹h 6Ö‘“Éôù·«ÈmU1j³X­/èë‰^ÛLŸ„îß!¼ö¤úutýþmH´ú[ãÐ5NžqtJ`¶¼˜“40äùîÆ ÜðÅj>$°‹sÍz×ñ«N‰­ò?=´‰<wÃyO¾jÓfmï®Äº™f2!?á'¿/Þ>çð7ˆô+{­j]BÖð'<Ò*Œ!þøÏãFøD:6¿i©H¼Ùp®‡úÇõÎ=«`ÄÓ³¨ÂôQíU®.Õ5­/„¯Û†æŠÖí—{–@þvæ vcñü cEœ{ļ ª]ép¡ýê”xŠPÄ,»zs«È]Ç0ea‚+Ës+éi|ÅÌ\CÐþŸ•L¶ Ñ&Póc$ƒSä˜@#yû{V©ÃÚeÔÚ5½ÍÔÝÝsÉíØãµIÓ„ºmîG0‘Hö;VÙ-…îd’[R˺ŒƒïQ.ìcr—ã–hÈ<‡ïO³Ókè X+Ì oSnu8mÞY%Ù†Nã”{úVQÄÚÛëWò”É œ)=>C°ýj¼ÁSF£_%CÔ “•=æÇù1ÿQþeÒt{+˜c2Éœ™$܃íéV ‹kymDR °èýÁªf¨‚Òc ÝÎàOZÉÏ’û“¾õ"4<¦˜’"XšBŒº‚F3Ö®9~ö/È®³[“ç˜{CZ_×´É IEô Œ6æ)üÍT¸êêÆM1myo4ž8%c1•·À? Æ5er˜æ'lTm?Fž;ƒ;èuü*|ZÜr—ȬrÚŠ[X˜Jç˜`®Ü¹õ¡úÆe~¾íªÊƒulyúƒÚ©Í¢Hšˆ³²ÍÎ(ÀÇãðõ«–‘ßQuiH’^§­(Ñ7o_JB!ñImÆ:TÈÈNMJŽ$ñ‘—;v¦5ÛK[½k[¨Õü@|0v!»{b¾eÖ.ç²»šÒäš&(ê{Uµ7º­úÙiÖÒ\ÜH|±Æ2~>ÃÞ´Nú1ðZ;í~A%À!–ÝȇÜýãù|k@þ|7åDìàWp+Çò¥Œ€1]娖Ú¤ßÁ;i–å#æˆ/1ÇRqéT«ŽIåhÑCc©ôªæµÃí}•YTìÍÓß5oú?úÓç×à¸â>¿ÍxЕ‰¿¤g©ß~Û_NZiú}…‡Ôml­à´Uåð#Œ*cÓ”mYpDÚ~§m}¦°“J¹˜#F[Ï ;‘î0__S T…%,f2zeFhE¬kcsãÚr ó‚3T­j;ÿâ×]\I&[›ÌÝs¾}ê/… Fy—½?¦ñgü(íqõbgb2§ñ¦ÅÐLç|{Ðý[^’ÛE»ðAW¶6 íÛnµó½ÍÃ}fW”ÈgbyÜÉ’ÇÔäÓ–“]Ë$‘L¦>Ùëœÿj ,µ Yò4 ñ°}€a¶ù#¸­=ïmxƒG³Ömÿ:2® ç‘ÁÃ/ÈþUNÔô‹™­ç‡ÄSm æ 0#>»Œüª©ðâÚDâÔÏ\ý£@´k/k»i#<ËÊʤzìj&œ3u±óÌö_WpêË’7éÛçøPž._‰åÔ"CÉ:);w UÔQ§Œrý¡œR¸)\ݳ:G rɘúŽøþ"µ]]à”0m±‚=jå¢qnmku£§\Ý J2òãÊG7¿½_¤.–K}aȸUçQ¾zÔˤջ½µ´:;CÒ,o+Oö g»ãÒ‚ñ–»s¨±†<ÇaÊ®~Ùþ¦þÕž­äBᤙ†£ôùU·‡µ¹®`[V—0)þVAèjß Ïáó$Œ§Ú‡j·· {V ,„³’3åíøŸÒ¡Yé÷×7"`’Ìò1Á9«kiËhŒÀ.çâsCu­èÊâW¸ÔìtÛëÆÆdë+± ¾À ÏjÍu^àû‹™ ŸZB„œ]³è6ªí×ðËÃ1M?2·)À)ÆÇÖYwiÒgˆÆ«œŸÞ¦Ç2C 1;øb¶ÿ£Ï¢™¤ÓÇqe£#ùíl¥‘åwsÓæ}¯GMCÉËÓ½Sï"Ù‡zÜøgUúö§ÈàÈÏ+ާ›4NúÈCp©$Aáa”fùS–&ÚˆQ€åÎr*ÅZ´š½ëY$F+hÎaœúŸíUfÒ-Ì¥˜ÛÇQM¶4R+‡FA¾ç¸‰†`]zzÑÛGñàJ±Ø[ÆÌW˜®7¥^4P›¤'úwÏåU-^î;‚«ád;1=¨huQÓ4ÛÍ ÿ ¹id$—Ÿl×½i¨o.­.ÅÄL=ô5eWŠîÑš&ô„î @¸d^W›¶[O(‹ÃÈÁrrßéD’ÃNlA>…ȧ&*˜Dص7qË(æÂ÷ÈïMÝB+ÂÛ%BÓt¸ fŽÜ¾YÏSFLJ‹Êß­G1ò†Ï6ø§¢ävås£½HT ÏZS˜íâiœáTfªš•ÕÍás(DÎBƒYÿp2ñ.·oz/þª1ËrByœ˜ížÙ>Þ•cÑ8Jáû?«i–«~܇wú³wý(¥z¯æå*G½.¸IÉØ‘Á*û{w©¡‹[óIåoÖš2êzåôZUŒLr906¤žÂŒ]pœv¶«má™eûÒ‚Oö®é ZÑïåQ9Ua;tïïW=)ÂÛ’@«$žf^„‘¯ñ¤:E¼—2¹ŽÞÝG>7i:éTMéMâ½B[Éî|¶NHíäcË{ŽÝ^ÿ*›,âêlÅ*>}iÈ, 0Û$о1ÒÚ”k·/‡'ÄnëøV «ñf¥µÅ†Æ1áˆ$Yr{‚-ªtZÕ–¯j[[9ðœs?¿Æ§[ØÃºFöáJ€1ï[¯Ñ}ÍükhºŒ ·Ûµ.0TÊãÐõ?Z¾Í§Ä[˜¯˜wErl”#Û­V5;‡·WT|ó9s·Î°ÝoX¹±Ôgµº'Œ²;Ú>†´ø¬8ÿ‰¥AÚ¼ç {ÇTî/I×u¬ÊÁ~Î{÷ªä±‹¸Œ Ê­Ø·J»iréšJD×ÑN±© ‡Ðc ©k4`†i^¹©×—(ò0 ô#½ŸW•]ÕXc=h.¡ª‰´û„-»FÃò¬¶üóMâýj é÷Ú¦ ÖÖQäœs3* ÷&·^ÒOÞX _Mÿœ#tlmý>Ýÿ ¡p¤º—Ô7xû|Gö«Ç Hš¶ˆ÷—1Å:ÜIvŒ*W~§c•šÝ‡\’:Õ_Š,MÞ‘#c> ,Ÿž?z¡K 6ÉÍ)Ç îhÄüî̫ʵ.@ñzU ‰áŠðËT’¬:­}ô3ÿÃÓišô¼CÇ1EtöRaf<Ñ’:Jà÷é…=:ñ׉47œ“m€ü¹9ÇJªÝðDím=ËMJˆX““Û5ÁÁñêRøQ^4Î[—–$ïZßð· èˆóÝóõ—qæ‰5ÅåœÐEÏã°†:±>\{Çá[ºØ.ºv‹  t€à ø““óªV¥ç%‰ø „ª©€ÂªüG j¥ÜRilŸË!/ÊßÿÕ·  ¶[‰.îzó±8ýêó¡Msx-¬æ•Á)s“Œ‚ßjr{[ƒrñ³}–# íÖ†Ü[çÊëT‹ëFŠCÌp‡¥[þͼwwï)8O „Î}®µ²¾£¶Q­¶m¹ÀéíQ¤Ä©‘ö‡OzŠeËŒµ3)`}}¨]úÃsi4O²ýêÉõh$²+e{duªíå›}]‘× wSïUÈ-þ±vˆÃ*Nÿõu²´ºÔåä‰H>Óœ{SZU†¯yaoiã46± \ÊÙb¯¯Î«É&™ªÍetáàF ùcÓáV«+nà[¨27BF)Ñd"¼‡ËÑÁüé|Rñ؆¸’@±‘€Æ©œ- Ãô‘ÄWŽ^ÇM°‹šK´PdyÈ»í‰=ü½³V+ï¢{†TI¥Ú®¯ öûÈ©C¸ùd{Ñm#…ÒßùÚ¬‚IHùGÄ÷øU¦ÞuÃDŠPªÙ ÐëÅV²š6mHª%þŒ·Žñ©ñÏÄUJKêy[¡ÏZhhS³,¨Xd€Ãü(6¡ôg|ìN©qòþÕ­é¿J|MÚT’ñ/Y^ÿ3™g¸´ŽßËåÂc˜äž½(]çÿz„ÌÐiZ]îÄÑÈŠ}ÂódþU"Ãé]âv:™çñ”¨HÛ•; .*ûÁÞ—|ðÏp¼¹ô=€ý>umÕ¥ña ÎY‰ÙG@>IÔ³ÎÌ7Å6ò<€°å^¸=j É+»ç¡à#/Ëåriª4d…ÜoPZ•²½=M°†($Žgõ=ªÕdè`W;1';ûЭ~èYOÊ¿òó‡ò·qûþ5[”©`ÊṆA›¯WwÇJì`¸s³]5ÆÙ€OjuA –;ÔãÛµubnLµJ†ænSlëâ ž£çRb±´‰¼¸-þTþõa±K1‡if\ˆpùõ« ·òãT$Û‰,’kv»•nmÔ±ÉÀeêAª¤3Gu‰øŽâ¡^Ü%¸ÀÞCÐz¹EjénˆFp£;b¥ZAá—l`©r¡nê¯4j<}ѨÒÉ?>ÇT9ZDÑ» œÓIÌ`€M<Ë‘æ9öÔeÙqJw5 V<Úd©ýX˜¬§Šµ«Ï „'•ÿÄrãÐ~¿•D³Ö¯G‡ÌüåUº0ùÖ½ÀwV|A­évóÙ¸Œ•;s€Ã${ãµk|_ag˜‘žMÿšÈܼ¿åÈÞƒêFü=sÖW†Y»På!UNÛ‚psƒÞ°^1áØ8zù­ÌѶZ)Xç¸ïZ¿ ñv‰ØjšÜŽ—ž#@‰™$+·00ÁÉÀÞ©EôÇ®ßêpi<1k”’¾¼1swu$V.˜¦–Vœt]ÎùéÐê£ÁüIúBøWÚthóì×, ô'ƒœuííšÙtË«DBc” ÃZŸ&›m3øMéÔUzíb†ýíŒñýa~Ò«æ£Ì|4,͹Ø{šŽl‘¼’̈#ncöjwea­ÝLö$ª1Êó ÝÎ= PõXe´½{k”ä’#‚ëPíôŸ îïm¤ŠÚaΤRêOQí‘WÍ:T·ðã´±•TmV»+̱äŒP=GIúßZåXçl9=6ëù¾Eeµ²Ao*F¡T{PÛ¹"ˆœ gðª/³]¤u)ÀÎaðüá¨-â^YîXÍ1#' ?ükWá­YîƒÄà‘6z{Sºõ¼¿óF y¶b6 úÕI­– Ùã~eaŒw¤¼–ñ ÏqŸè樗öl£–P@éA›“$órƒPO´—˜c¿åCÍ©_%½°g‘*" “ò¨ßJŸF2ýO«±gÔô£õµ‰wÄ_ú‹Ÿú|ÛEa\;"Îê­'(Ú¶ŽÐF:Õ4ë·ku9!×qZµÂ_YEpÝYwö=골H-oÝ»î¬{Ša bÜÍÔÔ[>)6äzrÔ »&†ÆV ¸;m°ªû;}õعÒ^VRõ©>(·aΧj9cphŽÁÏëRï´øu]*KY7' žÌ:oRͱV#•¹—b=+†6F) n”´ p6SÖ¯z]”OñáGú”Q8‹J³†ÞÔYÙ¤RHIf]¶ÓçU—´ðæT=ÇÚ© `އ³J&ödÎE7*˜®)vч̌ °¥¸(þ`;ÔëK¦VQ[É ì;Èj¦ë:Ä—Òµ³0¶Sæ=ä>þÔ1L–‡Å…€$`Š„îÏ!v9cÔš6¼W¬¨Þxßþ¨×ö«~}sy¤Ewr¨Bp``~Õ-ç•7ƒÌ=¨.£wüÒ2ˆØ)?wj§Ý«-³‡ïƒèz//Cµ(ÒHF êG¦+LÒ´oxfŒ°‘2²ìA‚+\µŠãø4 ?3ÌW9$üè„}ü&+²Ú»")l7›>ý*¨ñ.õ®I5 K•„ó äæP}N+-â;ä<üÊÊGb:U[‚l›Sâ뫲œéknÌ?ê$(‡5[/-$¸b¾ rã¥X>øæÜ.èÒÄʶHëR4¦:«ì7ëþ´NMB % Æ:üÍD½ã /N‘¡·qq60_ÿMOÇ¿Ëñ¬ŽµkKQ†æâé¥EO æò®ç è;R¸'NŸ‹õ"cóI¹¶Y7òñýmê­¦À#xÄÌÞŸµGŸŽP–mðòÛûÔ(¡ñ®žå˜9.=Aß5Û­A˦d%c9QïëP®@¿V—”4Rù±íU}Jù42dÞ7 O1ù óUmC¾¹wÜšM­ëÁžY&R¼ßõpq×z)¤k÷œow"]¬¦Kdæ'nEìÇáÚ­zGjrLL0˜• ²ã÷«Ž—µÂ}eùÏLöÏŽçiWWQEq 6FvßåV´·†(IeUU'+ãî)¹±â!gkt¶ò< "ÆQrÀ³FFý?*ÌdÔ¯µ=YeÔnà‹ÎãmªÃc¯¼‡™[ ‡\VãÃ%¦‡œây‡Šù#=áûÑÃx’#Føda‚+=ã;Ø,>¯¦Û1y‰¥sé÷Wñßä*½,ñ( Ì|LpvÍ9eo5Ðf3©å=1ŒÓ«cq„ÈyýóP¥ºg E(¨py† 5Uâ…¸“W†+b¼ïnÉÁ˜ÕÃè–A¦êW~§§F¯w÷bÊ œì§õëíªßé±Ê’C W·‘J˜A=Í—[°EÇRÄd/÷ô W×m8$:òú)Úƒ]` öÞ‡0Á¨wW"& ¬w©uÂ}+µÃUÎ0Ó.u-X,î óçFämÓµgZw^Û¸žæÍãWnA!_+0 7C±õ èvKxyÐõÆÆ´ÆÞK¸ä…[’!Îy½{÷éVv` æ›[ÒY—†ýͰ¼Hcr§_zk_Ò´­JÀÁ¨[ÛËž‚X•óøÖYs£i¼6×riºlVFèªÈñ“†Æq·AÔôÅ ‚öÆò_ ˆK‘Ôvo‡½_øWˆ-¸^-¦Ó~°.3º6`` ö#®Ûu5¤Xk:®9mnÕ%;˜¥ò7ö?"i˽*g|*íÚ±ï¥g]…îæÎ./êÑzïžcòP~x¬ ͹H{áËéíÜCâžP¯­i\6—¶wVú„ip&PŽ­¸ß÷÷¬ƒŠ8kPàÝdA.e±˜“o9ûÃúOù‡úÔ½*ð¼jy†þõtÒí4¶F˜¸gÜúzÕ4khì¢\á¥#ÌßÚ¬QÎT‰^‡áCø»]‹KÐÕ¦µ’ãëyŽ53Œäžß¾+.›Zyb>1¯©ëBe¾–CŒ’çUýXH’x«öT5ie3ÀË–æ%9G©éZÿDš&Œå¸vñ&oêcÛä6«>»§¾µ§´öÒx òƒÒooõÿb‰SD¾ŠU”Aê ЧÔmì.­®1õ˜Xý®S¹ çó§ne>Ž= CŽMB 1 rˆdùzïÛ5Bâ !̲]AÌÌÇ,¬sŸpj¤T…u~½qéZÑž‡JÔo_Êf——8è¨3ŸÅáZ¾¬±Û¬ ¡yzj±¯ñ´ºn·Š[-ÌAKæå*O@>[üêÙÃK¸,Ö)“у¹Èö9ÍUâ’îÉ~¨ñ¢™¾Ö|ýÅYt(tåÔ­ZåÏÕR@Òª®Y€ßô­Â×V·½‡ë³¬±·B?·j¨ñ5–›#ýjèÅ€Nwè:ÖE«ñ1Ô5.—RYWýL·“§­"çJi.Vàr€AGöíQÿ†@ªÜÎÌÇ`Ù¯>§[ÛóÉj&”$Šâ[iÄÐùJô`éJMö¦“AžAâ°?wÖ¡¬‹*s jwNµúÍ×<ƒùQýÏ¥X¼iK(Š>uF3š} ¤ #Bñ‚Øó †‘;}–¢ÊÆ)Ldä‚E3s16ÌòœŒMêÑ§ß CMÇ3 å“ýþt6úÔÉÚ‚ßY¼„üÌž¦t‹›ˆ †(T–ó£…hÚ6Î<⩆ƒ•N Œ­zlòàŠŒîHÜ“Š`1}½* Ö.íÌúÔóšAp­‚)`ä\Ç›9¦n 4g¸«ѵʹ…÷jöñÍa:¬‹Î¾"ûÝIßü¢j<¦Å|Ϥƒ ü79\û¸¤­¤Úu!q#f#Ö—Ìñ0ß}ÅG3°8QùÓ¶òOõ…’&äý£Ò†ßqDª<6\8$s·Þª?ë“ܨ$ ßÞ…pôQMªÆÒ9\ô-Ú´]6¿ºú¬Î#c´dï¿þ3GeÓ_KxÛïŽÿJvN+Ô´&êö+¢b¶…¥ðäó.útíXý"j\ü:[Û(l…œeLp1*îÇÌàÆÁF2z÷ªõ  ÔV‡¦è¯6–—v,¨ßmº0ÿJÔ¸"âðÙ5ž¡.§ùräpCïVN&à;¾"᣶K=´ëÎ`3Ù†zX‘ôyÅßñØá$±u˜ÿ0\J¥#gí“Ûá¹ÎÃ5õO ð–‰ÂÚGÔ!"æg\O,€”úc°ôù •„š}ËIR-«7—ŸªûQ]Og‰¯oχ)|1ÀÀß'ÐUoS¿ˆiü3õ,·Á }ÿŸéT-GM(ÒE´rÃcf÷ªµÊÝ[ÈR_.z64nËEŽm)† ža3‚ƒ·Î©÷ü$º6³ëó<@óFz©=±•xÑ¢iÂJ¬'zûUž{µ† ʱ¯NÀUn{”Õ.|HÔ®(Û½êj,­)@9F6¡·á²ÂFDŒÓ·'–ÕRÔäÏ0ª&¦rå€óVé¢hòðÿÑF‡'‰É%Ü^4Š3âeÆO\àâ‡=ñ\ã8MUfGžîK‰rYÛ'52Êí-füÇ_Ç­^4¼Õ™f»•­m÷y3èO‰üèçÒWéš^•c¬ðµšÃs¦§-ÌJI7Qر;’OÀŸ@+ 7¶¦nä„H²VUcþšµI¡I g‰£ld ;§]Mh%ÝP|ùÖ[Åd×÷ú³±cÜ`Œ±×½UÒþ2 ò4µ»ºìk_ú%°¹½Óu íàvF™c.\ÿùB´PYR+‹Y9˜ “”òïïCß‚®ìcÓî#¸ˆÌä¡ ŸÊƒêšUÝ®®“\[, E`w'C½[ô«VŠÙZA†#8ô”ñÇëÜ?Å]ènòHܳã˜äÆ:`ÇzÖ-¾“xSRàHx¯P»ŽÑÁðç³-Í ˜ ÑGV¨=0wÆ"Zñ¦ŸÅšq¸Ñ%gUûq0åxÏù‡ûR×n&V^fÉߛۥCÓ!:ƒ î¤>}Tõô£ŽÊ쀠lLL^GQ±ÉªÌDH€*¹PqŒ×¬Ð™OÂ[†8¹4_H¸‚í¥·9C‚(üùÜ•-Œv¶Í<ÞXÐdš¨Ýj2j~;yPl‰ý"ŒØB†v›íQ""#`ÜÈKsg=Í2Ò±l‘šys™•ŽQ¾(ƒÄrzQùÚr6ïW=3øUÍŠ5‹1Àó#ìÙîH«6i§¨hк’ ½;kê¢Nœê»’7ùPÙ4«8“™!ÿܽR8dµÕËŒòõì?ÖƒÍ9xqž¦ŠèW†`±AlÊ”%²]Nzõ©Ú3üÅï¶=ê ÆVU O3.y}Gf+×¥tcfêX`mHŽx¤@UºÒ™yˆ#RÇJðé\=i»k‡´Ö-nbûqʬ=÷ÜV£©q6‰Œ¤æg F¹Æ}MÔµ©&B"*±‘‘˾~t6FÔØxǪ̀©žrÇwîi¸8›„¬—:í²ó‘‰µ]cB‘Ö1«Y©+Ì Ê«·Î³¹KMn±¬œÏ^µ'Æ9÷©‘MÁ(Ÿ€©S–Þx®!p¬„0øƒ[m–™þmy#ºKs—}Ç+ €G©šýŒúgˆVž ¹þ^ûúc­e:ÄZeå¼¾=¤ìrÒ,C™pr}é§áÍ"[e›O$ÄFÌŽOãžôo´eu—·Ó¢y­8°Â§¡Ï¯·•jö:p³x¡ù÷QØæ¶ ¹m´Å•# ? Uaçh¹¥æ9m‡Â É©ø-•TÛÛ¥Iˆ£\B…[lžÞøªwqçëqpN‘¥º ¹Ôî€* _v0}Ï\~Ì)›ØîaˆEðQF Æ»Ó„“çmÉmÈ¡¿RS&'Et€Frié=è…­’ê:SÛ^Û–‹ ,:ŽÄW&Ó¾¢ÚÚ[Ÿ äTôÚ©MÅÚ~Šd‚å&‘âûj*ƒèIý³TËN9Ôµ—‘tèb²…N—™ÏÌÿaZ'jº“ª_bee% 6sëß¿Z°$^_Ä6'>ê.¿k§é:|—º†§” ÷¦ÉôÜŸ` ¬jÇŠW‰x«ø-•¹ ;xvîÄ)‘û öè®ÝéÝg†µ»}VÛM»ÒnìÞêd…ZXYA,ÁF0w=«júBÔbÓøYdte´²äQ KʃöÍgñ‰qæçÀ/ÐJ¸üú~u>8 ¸Nx%IWú‘ƒʬ¼9 i©zš•Ú î<1&ë=¯½k:mâ£}Ì#›”w=¿ßµÔµy&² ùVE}£µŽ¸òZD´­Ì«‘äõZÒÿ‚ÜßX@dµ ¯°<Ë‘‘ÔoBN‹s§ÞH·1‹“Ž3޵ó_Ò}í€ãû?L°ŽÑmñãºGÉãÊÞfc¶ý@Ïr Ò­âºÌ\U¦Û†¬§ø«ÿKÖÙôaͺ ÐZÜÊbšá¦)) 3Ê£Ûúk[ši.ôøee`Ì£±Á¨ ôªÏßÜhÜ/{©Y¤Oq©U•K)ó ìè2k$o¤^!’2í:Æé +ûæ¨Wúž¥z½ÄF_ò€©-Ííøþupá¿¢½BøÅwÄ Ù[1È·OñX{ÿHüþ¡&…máép­ª¯Aëñõùׯ-dš;q‚ù$c¯O—­ÿ-3ÀHÆ>ÒŸßó§[@Ö¬ã’e„]FXŽH½´»Ž}ZÒ.\óÌ‹ß,(÷-ªFФ™“Ÿ*Äã­U­®ÖÞBY gÐô©sjÖò„øˆ§ØoùÒ­/šÆñ.­%*ëê6aè}«Sѵ+]^ÇëyYv‘ Ýö÷¡Zôó]2G!Oê>´;yÒFèUzœúU®Ó m” ’ s矘ä´ÃDXs é—Q4°PIªêÆæþx¤=d%Ôg¥LR…6û]é™ðÌ»øéR4y^ý]ÿdƒŒ5húcJ°rH2Þ¾´M1¿2‚=ꡪÙÚFÜéÌ@ß| Îø‚í¯gŽàF7P:‰fÛåD´ÈHØ‚j*#d •g*Û««gÌF*jJY÷¦îììïB¥Âd¯Ù`pFj»s§›kã³—Qך¼ÖOZDÛ»v„Îþ5ÃH]‡Â£°`J¶+À¶p@Ǩ®Ôx`X†ô÷60É5Òv=Ï¥yPÏc^= ¦­-/¯ov–Ï4›¶£‘p†¿>ò˜-@ëâIŸÿ4õæ—¦h±{‰míÖgÄ ã,OA“¿_M¨>¥ÀzÜóIµÄ-o!?Îf*ܯ\ãÓ?A5‡‡%I¢ÿŸvÀúË®9¦>ï·ëP–'žU¶ · ÉþÔu­ Š ³7\ôP‰¬¯Ý&Aó¨õ˜†y®gX-"’y[`‘©f?!W}è߈õ[«Yu8’ÂÉœ3¬üÆLï€3ƒ\VçtË !W ª0ØT]rí|y¤ÇjÎ5´ëË¡Ñs—Û›¡üi;M´¶ÔÒÖÉ3žßkz>§¢ÁzeœUp3ËÈyXŸWÆ9ŽÛž”bÞÝdÖ |gÌðßö«5Ã<±r4¯cAn-²ó¤ÿ𪷨M ,Ù›ìœöªäüEo%ù³‚Oyˆ=+Lá;ÿG]:ÎúµN_âÚEø¹Qê?,Ñ)4ä”3 *»Ÿâ+[K).nr®À¼{ ÏÒ™‹};Tˆlá13G´õIN R5+›m*ÜÛÎû$c«¥ K -r®Ÿour©4aÂü2:ûÐ-7CáõÔ®–ÓG³Žä*ˆWJ\¶G®“ml‘G Œrª7 ¬q¿ÒÏðb5¢S[ÁU‰¼°ŸY·ý#‡ZùÛTâ#ã`êZÞ óH2%òŞȽǩÆäÑE*é"‚9v¯¦xo‹%×´x’ýñh‚9XŸñèÿßßãUÞ8¹[Þ½‰‡:1ŒFF­g0pͶ¡Už`Fãð¦åÓ®¸|%ä^5p/Þ=pG^€Ö¿Â÷6÷VIv˜*À‘íWÛ)Ö+@ýä9? ªM •°9ïBmôø5.Tá_væïíW{K ÎDŸá AŸjÄÚ´ZnŸ=Ô® Ž9z±Ø~C?*Ë/¬tî!NMJÎ ¤û¥Ç™~¨ù¯Ÿ£oª——F›™Iσ3 `ßßñ§­,nìç[{»gŠAÙ‡Qì{Õÿ†î¢ij/òó0#¿jÔ!ºZ€¨¥\ç­|á®}1qyÖnílÒÚgƒ™°Ùæ';{VµixúÿÑ%­ÕÓx×—š~\àiy0[<À¶¬êsËQsŽ´C‡¬®t¾ ´Õ9|RœÊbUæÊ‘¾ýlÖXRXÛ™dv =/%PË•ÌÃ×ÒšÔ´zñ8ŸÂðó·.sœ{ûR¬ôg‚øÁý4nëF¾½Ñî4Û ¸ »¸ŒÅÌHQž½9ÆqY|œ ®ðþ§g5ý„â ’RŠÏÌÁX‡/·¨¨úë³Þ+Ès+/3Ò„Q\A \Ä®¼ÙlžÕd]øæEUe:W4÷¿²ÔSêÝÜò×ÿPz÷µh2Û¡µ$Äòô냊°³ÄÎÄíÚ‡Þ‰|@bfŒ³)ÁÂj¼Cg¯q\ÃÏóvb=ˆßñ©–Iþ{.±~¥³K!fvÂ}Ô¾>µGÕ¯žòõ¡’6‰"8T;‰¡÷ Ú´r¸Ã N(+Æñ)/ŽQß4WJ»ƒêí²bNb@ÁÜ`oDEÝ¢äxÀ|A§#–ÞF%V>™©Ðý¿lTK»ÁÎÌ|£¸¡—Î%- 2¤ŒXúŒú{S:•ÍÄ®bÉ‘ïP‚€:oH–1áózSb½·jæ7Í{à+µÎ`*^ŸªÍ¥ÜµÕ¼‹ä*ÅÀ#{ü(_}/êvºK¦¤¥Ã3ø_e"$oaŸ1üÇ¥b2k¯q:G¬jw¨ÜsJrö_Eö¾“á ž~ŽÂêFšòÍ=d^Š~#§ËÞ†jÜBê·I`$~b’4Ç ü‡oÒ¬¦YüNv^sƒƒ½*íeoi ]]H9bðÇSñö¨·º~¯\Å{02˜“”F”c9z—¥ÙZ%ü0[[GJy™Q@ZÕô·–XZi0@E~4‹æW”·ÌVĺƒB墑°d rž£ ª¨š÷-pó• Ó›sV-îDWŽ9¤ëÎãíVkYN£ ±ËCƒÔV^ ¼ÕÆ»k§ÝËõˆ\“v]·ïÓ¿¯ÂŠý!ý&ð÷ÑÅ•¥Æ½Ü­zΖñ[EÎ\¨É$*ý¡Ôúã85]ÿñªëRÑ´¸4ØNÁåoOe uyªks ó}$·yË)lø€Òô«éá××Ç!üBUˆÎÛ~Õ.éž×Qþ--ãYL1Î$ðÙ·+ ÁÇ¥kôßc¬VYv·L<¢öÉséΠ`üGàjë?p~³lcŒK}ž‘l0j«½ÁM=dxˆæå|Aèq^·o䤇«ŒãÒ¤Å3Ã8š ô4ÃÙÛÆ–éšW'!‰ÜQ—Λ£Op»´qž\½Ð~xªþšm ¡_)WWÛ£M;àg¿Rk篥†]zN&Ó­ÄPÝ7üÊÒvû»ûüj›in!ue\œ÷ï[èÐÜiñMoç— þ¿ úJ¢p—Õ-]¢¹ÔO„yN†7Ø|ë)´ã^0Ò,Í©ÔúÌã0Ý`s³}¡øâ´®ãË i絺±’Êá1 ó¡Ç^¿•^o­íu!hË4J9²§;Õ‡mã†Î{W\¯0*Ãb6£o{, o(Ø)Þ]q¥Ö`¾·k^F*Y|ÃcûþµiÓDkeFr²p}sÓò¢iŒ€qCõ(`ºx’X±‚®2 W&ákXωjL`ò¯C`b8bê~9Ö©=…«½ï,‘*!†z~ôCºµh”€U¤ó0ííò­õk[Nº¼BÉ¥³ÊKœþUòvž‚ó‰m£O2Ì­ºùIý«èÎdƒ­,æÛÁ/ý1ÌOï@“MäV·ÆÊÇçDJ[Bñ ”g±«“$‰ÕÝO+/0Æ¥µ«]©m•ü­D¥ERS«zw§m"–#Ú ëw>TÊPdc®MU5-RYYŒ¤³·V}ê‘{3Ow$ŒÜÛã>£v¯Z‚·q¹ sëZRÚ™!DEæ=°Ób³Ô+ ý…L0‰²NÃ4>ËK¾ñÉ7‡O•¼ÄÚ»$*Ê SŒÒ.ìLð´c®<¤ô>Ƴë›6¶™Ð©R‡Oj†òîi¢Å\TØa*@(ØîÀTá ÈXyFûQ =&[˜ùÕ<?«káëV*ÌZ¿(P±?r{úÑÇ)’í€*µ­$¬¬‘ué'sì}ª¹%© ©Þ‡_ÃÉlÁº1ÅAŠ2¨¾Œ¸9¢Š‚d FýÅ?e%VTÆVeʱÈô8ÍAšRIRr Í5(f½*Hˆ:ò:ìÕ hE±-.ËÛÞÝÝI$­£]€¸›1®zâœ$ Í5 ‚Ppå§kÕêm—ÕSS[›©e×?U²ƒÌ盕p7ÜŸÔÖqÅ_H¦êÕô.A¡_K’»¸îƒÜïðëTKk VE•K!ÜZú;èã]mNÒ)X¨[ae_ë9¾}ýþU¦_hv“›‡’°Á(v?*unºk¬ÙçeÇáC®®‡‚‘Õ·¤DÌ„21R;Š°èº€‚IuÉaÊUÚÛtU…,L¨ÝÈÊg¾â†jzÛÅ“Ú\¤‘ò–æRƵ+Óâîs“C/.9Lp¯ýMûUó†4;»­+ã,B9y¹NF ;zƒVÝ;Lkh³I$â­\/.¸Í°a 63¿P?z¨ñÃËÄ_D:„°ÇÏw¤:ê7ÂdIòðÙÏÈWÆv7ó"Æa•Úµ¹Ô!…e¸œK+o¸(ôÚ¬¯}Ív—Mi†Œ’ÅílGJ9ÅÐG¨}.¯L€4r᱑æäýꃧ2‚3ëWþæÁÖKi9NwS¸?V»;Ùf‰æ™‹¹%˜úÑ”¿Ym9‘y /¸ÍF}Bhð|Lp2 Õ>’4=ñ`ÖuÈìæ›Ã)Ì̾¡TŒƒÛÖ†^ý9píÄImeõ›Ìœù•bVüN*U¯^jý5¤6 ÅÏã·éCæÕ¯§Ô–Kû†$7)^€vè)VúÞkI ”ŽE*Êk%¾ÿ‘ºd ÌåIî*Ñôyô…c¢ëƒIÖ$äÓï )ÜC'b}Cò>µéO‹¡Ô¸¸ ,¥å•˜xƒìÉý\¿3ר|ßÑxnÇZÒF¡á ¡¸PFê_ÍX8'€%‹‹${WŠKwO ¶l仆´{~k+ÀטL{ÖZeçäš3‚ å`qNLÖåYĨHß—˜dü2k8{sªqGÔã†X’â㤃•¹sæ?­k>'…ö0Â¥¤¤ª²îqš®j3ÙÞ$BH?o5‡µvÔ[+PKÆ}GR>_§ÂŠ´Xc‘Y×ÏÖ`·{ˆâBWœ;ÍÔ¿Ëð§8z(d ¤« Òr*ÅÆwÇè·_~p¦[V€ß„ÿò«ç¾FÿŽ´˜Iæ¥ ¾ýF?zú{IÓÖÓO’òù˃ñûW¾«ɇäBwÄ Ñ+¨ÿåyWŒ`PІ`GcDžü½²ì w'j%£ÝÛÝÙ´¶S¬¥\¬„7?›®æCpЏÁîEÕ {‰ÌªÄj³«[4 ãJʧ6qš¥ÊÈfr‡*NÄR zÏ2^¢c×ô5 Ùjó}Pª@ˆèæbNvëÚ§[jË/'_AŠ–™™w%˜„ÑKf&Üsä¶õÞX¹‹ǽ â @éÚYHY‚!#;Ÿô³[»é&æ`仨œ“C‡½-FM±¹‘ Ä:ô÷káË}>ûV)v¬2¼ÑÇ÷Y»ƒýªé= +Êl1Ú‡Ic7! 뎔‰‘Øä±?-£7˜þ«cà*¿¯éò ·A1'û~ô,ÚˆJ˜7f¿½K¶WòS#¸©Ü¦C¸ÂžÔ¿-¼eæp¨;špDÓ´©XÏsM,‹Êõ¦£¹™diœ“œv¦o.%¹ ±Ë~B…ÝDÞ^VÇ­)Od@@2yiÁžõÚñéIΛzÁþ“o8Šç‰dÒïH‡ML5¼qd,«Ù˜÷9ù |ÍVÓN9–­:vš—z½ð–›6›«Çynå y¹Hûc¸øVï ñ]Z$ðç‘Æpz©î ÖælY\s?Ý>†ªyܓ֟ڤI2¬H¨ÛÔ~tÎ`Õˆ5½:ÂêêÎæHWXÔ«c#=Ç} 6ºõÝÊ­Æ%#ï Áü:~•6 Ã"wsÓÐVÛÁw ÿY7 ò¯ùØþôzo&S%ÔÆ±åŽ=˜û“ÔV®¬56K‚íÊy’Lý¡íFx-/øÂöãLX§ ¥nfw<ASêNãØ×ÈÜC£Üp¿k<<Ò³6î[`ùÇ:«æ0~t{…ø‚âÆaÓ4–¤ìz˜ýýǵlúE©ÔãW¶S:¸È(3{Õë]ÒåƒèÓS±šr[–@qˆßÿÁ¬JÊUŒ©#? ·i·Ö¯Ê¦P‡Ñ¶«¥ˆÙ…µƒªÝ@$Uk_½‘o…´d(Œy½rÓóÿÒ„o%݆§’I/1ß¾Wÿʪu¼²KÊQGmµ ½< mo%†P>ÔnWô«· ?k1w«Ëq-ÔPOàÄX žU ËÓ$ù‡Znó_b§ÁæW‘µRMÒmd¼¼”á#Œdû“ØRvtƒèÏø.ž÷zÏüÍñ\ŒåÄݱýGÜü½j¢úòêÜeY› }sZ _>ªGjc汓 "žP:0÷nÚ'­³ÇqmvÒsŽe–#Ž`½KžÔ,nm5˨¦’.ebêâDå걜çÐïY]³ÅkÌH܌ŀvɰ'¾‡\†£ú s¢Ï,(n!fðäÇ™A8?=¨Ý}FP¯ç 20j¿ b‚݉_óbq¿-ãÀa·ðŒyÏ0?*k¨][ͧ#+‚¬7ÅiÉqÌΛ«¨aó¬OézÞâT­áy¥’õ"TE,v»…fQéêÁŠ´òÛ8êÛ%Œšì¶ò°W„ÌÅpFW8êù TWvRçI°hïPån¤f扇B£;ïøRìtÎ(Önž+ÍJîæÞIe•ŠðÎÀV§ÀÜ%¤¬©aañÐø×2É»IòO§l{üëXšíP¤±—fÀî(&»¾‹,Þ;¢£Í’@:wß—Xý'Íü[ÕìÃé.þÙûò/õ(èê3×q¶k}‚î9­#º²•.-®K ä0# Љw<ñ’d—ÊFq…ŸTµ™žÜ€êÛ6wM¾³Š ¹E´ŒcÎÙßÞ£€BŒî}jn—>«1¾üSV¸¡1’qœÔ˜žHP**íÜïS´éæú×ósíGâ†áÕ¥·'õcjt@‹Ÿœã¥Uuéo&´›NY2n\£Óæ*‹5„È9¹| }¥:†c#£ùS‘DÀJƒÒŠZÄU èAè(½¤Þ«+òºîpA­N¼[û”‘âæõ¥Ì™ŠAê¤UâêöžhædA¾ Ú¡Ž)¸I¼?9×»c†(¥¾¿k)İ»zÓÜßU>2Fhe÷"†Am Œó€r}N{ÖyÄ%k¯1Òá‘ÌH ·­gSk:ž¥Vºts¢¾%•IÂòúŸïNêº^]JÕÕ®FA3ëóëøÑ»+øWL[/ c1º0ßãZѯ\K¡]ë¢2ZåÌp“¶Uz}Û#þÚ¬j?ÂîMŒ–ïõß`é¿z÷· ®Hì; ‡­GãðÞ¡9˜ÀÅAîÀd~`Vl¨ËÔõÞ´Ï¢Ž*šÁdáýWÄq%íæe8º•ÿ¤þGãG¸—Š ÷†–¢€;FäŒ3ú …iuÍ@[¶ÕéP$lîp f†+‡$ãÕ;N¹ŽÓPŠâUb‰œ…ë¸#÷« qš€I—>ª?½>5» ªÊÙôQýèþqk>§o!ÆÙÏ8¿:¹\^B!p³&BœjÎY¹ËÐÛÕç~ta±'¸ FÃ/Aœü(eíµ»Ýx‘Ä«¾2}hMìLHòûSšuÉfh$Ù¾ëþÕ?Ì"‹ZÉõ~W=3V«y—Àø‡”·¬£Y×..¯$„)Ž%y3»c¹þÔÍÀ˜ =h²¸‹“Ä8çØTÄ)-²¹5ë9✉óƒ¸;3n›Œæ©×hnfvæ+æ'#¯Zˆñ4M…Ƭš.“c}hne•¦‘.}3ÜÔ ½&æÚfrªÈI ÇÛåQy6¨³É›?…¹ŒÏ †!×í6z |sÀB±2'@Ç­>9òÓ”‰>ÁÅCñÌ3Žcå;ž+Ø”–Àa¾þõëJŠyLª€3}¯zUž’f¹ŽÎÖ#$ò°TnIí[nÀÖz•Ö aoª¡‘ݾʬÞõóÒ—Ýq?˜f’(l-¢«røC9æûÄŒ“ð…'FúIºHÒlj³2 ’õG˜ó×â7øõ«¦£©X;Æ Í yƒ >ãÖ­\:Ö×S±1G!*ê6ÿy­cN‚Š%ðS  }‘To¤Í÷ˆ¸ŽßN°0­Äö#LH_+¹ N¸¬î¡mMnPM &ryÈÿ¦(õ·^C0ŠâÆDe=œ~`ÑÛNxîÍ¥–ù|¦9ÔïçdFÇÉYµ[#4AÜ~4¦³–àò®>´JÓN†Í0‰–aæ|nÕ2K˜á³häÁR:g5–ñ¾Ÿ§kbñ9Š¿Alqûü騡‡V¶3Ã)€úeŸD4WbÎõ1“m:‘ÔíÊ}jk‹a¸hícH$p¬ÅŠ© l1ûÕëXÓìØÄòø“±¦ä|}(þ¦×HTG7Ù¯ÄÑîd•VEò¨Èz:Ô4Ùmâo Ÿæ;lAôö¡òð%ç$5Ô``FµÕþïnt+Ý8]Béu ÅæbT€zWÈÏÌÑòêyJˆ>”FK OêÍ(°¹1(Éq+™ º²h-U§–'ŒÌÄùS™NéÔ è-¼/!²MeLúµýƺ“’Ûø£ëmùåß”¾3À×ÎÎ|;ÇæR0Ø#½¶¶[˜¯œuÕ°p ¼Ðé:Œ»… LuËŸÒ¶‹ î­´»XD™ÄKœŽ§ªæ¡§.«=ů\[«Ÿ5»(xÆ0;t¨s¦­€kyלr“ò¡2ZÅq>'Gn¾`zŠ?Ã\&Ú¤²9O²‡¦©>‚„qW ë:F¥Ï-Ò]iÑ01ÉožRÍèØ­Q 4"Eû.¡øÕ*öÜÏ)…ÎÝÏ¥[øKGµ6—ÛÇÊÙT?æÀ?žõs±šM9X­°“#œRÕä½W• H°y@QÖªüE«ØiWj·w ¤F A»u=…eÜaô« „öú-ŒÂåÔª\M… þ`7ÏψYý"kZ]Ë=ìò]X©$öWÜ¿Ë89­^çUҵϣÛgH»K‹fE]ºÆÅ€*ñߡ¯}Èaã=ÁÀI£sï‡ü³_XݦXÕ#SÃÔ¤ÀÀ0ýÿ:¥ñ Â%‰¯. VäàŽ| j[HV¨ ddrî¾{ÕWWÐVôãü#ì3U˜ô´Ð5%¼ˆ;äâ@NÌ¿ ½ÙXM¨F—)úº~õ~Ò#Ób·a€™ùѸfåòö¬óVÖïôî)». Pùä;ŽR‘¨ïÅ_üÅŒö¢M‡š3ŽÞ†¦[q6—#ÒÇpße%ØÑ¨%¶d9#jÎ>œ¸’ÎÇ!³YU¯^éB;¨ä|Ÿjù¤ê’]røö:T˜¯ðÊèü®½ Z¸wT†óR†Úé–6cÔœó¯¤ôH•tø29TF½½©Þ&â?ƒøBûˆ/Ë46ëå‰~ÔÎ~ʉüOA_ñ/jüO¨__ßÏÍy/;räQÑô>^I¥?â1å^ƒ;U«…¾‘5>±¿³³‚+…º!JO,N6-×#ä(´Æ¡®LºíÔ—¢çeSÜÐ|ªÁ° ËîjÛÃÁ±Õ#³ìˆÛ½÷Oã·Î´fpbuÃ)Îj\jêr_cØSWHEÁÈÅE•9E1JF‰'S…©Øî¤‰ g(F0{TË­_?ƒã—íHz(©Zž–@$Š?˜Oz .f‰ÔÅ+')ÈÁ§>¶]‹J|ÌrZ»Ê ÊœƒÐŠ)c1H|) `>Ïö¯LÎç=aL‰LD“Ó…º¿¹3V8$íëéJIÚEæ*Tú^¯W†kÝi'%sŠ5¡i ~þ$¾U;éêhýÆqks–ßÍ$Ž {Š…¨46¨dqæ?eGSC쯕حÀÆO”öÆ ÝJ³^;/Ø 𨭎c½$Ôg_•bBº;Òá^PÃv®º19ÃáNdôÅ{;âºG¥z¹×nÕÜö¦ecÑ—jbYãñóáäsÔõ¹°Ôí|}>å&‹§—b¾Äu}&ðL|@_WÓbHµh”g}eGcþoCò=±‹iSÉm¨™ rFJ²°ÁSЂ*ÿ¥^Ow§Öµͤ¶qF³(™ARpAÅfCXúÕįÈ.wùÔvâ6rNÃ5#F²:•ÄPå'v'¨Ͻ_ÃXF4ëhü@êî=sN…hÕÆXdQ5[ý/NÓâ[›¸mðV2Þl ¶MR®uHnòÖŠHy¶Ïʬ:wM¢ZG .« ‡œ³mÈN•7QúF½±BXÙÝ9 æ^ožN? 7£qõæ›·V o3gž(çTçÀª—¤Zíô·vªÑ¿(lànÏ5‹ë¶ž ’ ˜È`pAØ©¬³^Ño`–(Ì«#€¬£®ý¥áé/¸`¨òH43 x§ß8u=}»ŽÆ·£ëÍ7]Öí.­ôè¬îQ€’Ýr1•#¨Ï®õ½kSê)aK™Ž~ˆ4^ წjWú„/påmü'@9FÜÇ(sæÏáWU»ÔøòÓGÔÞéÉXå*6ÈýÁùUOé#[¸âYÄZyo¨Z Åñ[±½‡·Æ±)të-OSXn-cß%Û`¸Þë:›lìlî%„ŠÇ˜zAú?Ö/Å®¯{fFŽÏ–¿+:±® ÀÈõùÕú; kS ´c}Þ¸øT\Èò…IfØ(4wOá]J䬷OõDë¿Ûü;|ëEŽi‡)šg™ÀÁw9'Þ¤¤ûìk¬Áˆ ü©Ù4íNTWOºxÙr¥abõéM¶ªªü6ë¦ÿÉoíC&Ša*ÄñÔzÓ‰5{xÒºUt`vÏZ™®Iw{ias<„c!ÑI œägÐÐe·”ÍêxvêFÞoØÓv²Ã+¿OKd,9†qSl4'¼ñešaòŸSC/,¤‚F†PU¿¨t>â¡E,¤€:·­±äuVCä'”ûQ¨-gY‡#¾vT™ô¦1´‘œg–ƒË3͸‹ÊF:©sèwvÐ¥Ã"råÂõCïH³°è)Ùcñ ßu=F°´hõˆ «±ð;Q[Ë Ï0Àýh;Df~l„ÆÛuÅ´”Ç©bØB.Ù¾¼æyL§ú½zâXã´Ê0%¶À¡`žnn\Ó¡›ŒWsžµâ4††6p쀰Í.¸Ù4’ê uT)÷=«Ü¤?0"ºÃ*EG^pÝ0=éqÊ’ɸî@êkµÜâáNýêv‰¯\è,lm4幎îo…È|gÓ=*ú±=Ü!®¢h ë6OãN(†Ú>XÔ"J®\‚Ìò¤’j'?” –ì(Ž™§[@ÂmAVY3åˆî úŸZ¹Û^³:ïåQùÐn<ḷD[›UUÕ­anž*õ1“úz‰ªÿ Y½–oŸ†ääÈ áº’wÈåVXÎô&麔ê"êz-–©Kd•‚” ¶5ƒôÛ›K^IH Œu¦éÆæHJŽÇzË¿ø‚á߯p]§ÅÊ.4Û€² îÑɱǩ)ødö¬K» ‹\ÕŠßWYG‡§©«_ÂMÂÝȼÊvAê}jѨßGgd^b‘®2KþµK¸âžQ«rÄz·Þ?Ú‰Ø]˜ÝeS’:ûÕçI³–ú1:Èßg=1êjÁoÃÖw¶§ë¨ÎrU“ üGZ)a¢[iç’Þˆz(ÆÔ~Þ Ò‘©\¥•§†‡ù²ì=@îjuË Ø`î*«Äv1̑ϸRG|úÐW³{hc€£d(;ŒÎùù×Õ|+ªÇÄ_Gº^§pÊîÐç/ÿÜO+ñ+ŸWøƒ[ÑàWCx’°+œþ[UëYY‘ż)Ü3ŸØUZîÎ{¦77x(î*¯hö±”¼´†åFÀKl|j¢qOð½®—õ´³iDÄ¿eÌÈïð¬sŸ`@ëÚ¨±ð®¹5¹¸Òü-F%ûK€ëñSûf¶. ÓßNáK8nbh®dV ±Îì@ÀùV¡Àº„ ªÞiçiš5t> 0üÁ«¥úXÈU§^YnlmóþôˆÕ"Œ"€lïS nU> f‚êò¬Ñxn ÀïëAí^HÓ˜¡Àîv¦xÆÉµ¿£ÝVÔeŽ/õC͘|ëåß®\ÙjöòÛ1Y`a$õÓç_Rpçß& 2«øR co)óBHÉöǧJ›©¼@^&Êõ9íU6pd8û9¤ógµxŸ$dIëÐzR‰ÛÚŒ ÚˆZÀe<ì<£§¹«ëÆö) LXü†(z ä'Ò¢_ŒÛ ³†ý…”Ê;c½…ºç‚ŽÅ"¥° 1ž‚ ÞgNI}ý*6Ÿe×U$ñ‡¾jÙocef¸‚Ú4n¤¾iü†9ïIÈk¥¸·Ã6Np r5ß4e‘Xu>¦ŽCqžõóGŠç2Úâ):•Ç•¿µ –ÚHE*ò°í^·ŽU¹£ÿ0åÀÎôgP´–i Ì¡”eAÎ*—t²Cw"ç¬FÕÄ»š1€AÖ˜f,Řäê;8WósJGWéš]sààíëµês9ˆ¨Tç&„0L7n”£Œ‚zŠïzíE˜ø¤¢zŸZìr{SìñÍÚ”pë„tÞŠhzˆÓïòÊ<9+n= [Sa"Œ‡©®\Î [÷ªæ§rÖò(Ï•ûÒ¬îàðqÛ¸©ØHbi$8D&©—÷ïutó¶qœ*úJ0iÏ^¢Œi\;‚·Z¨  ±êßÛñ¥ñ&“¯h‘Vê1„n€é5]²ÒÚÖ$Š[™¥Xܸ„¹ðѽBôϽHºšÚÖÙ¦»™!\â· 3O‡ƒ´«K›(')jŒD±†ÜŒž£Ôšªð^‰w‰²@¬2"FÃ¥f\QÀÚ=…Œ·R¸y>äAWsñì+ç¾,Ó/#™Vêo*€g >SÓ.î´D][yveìËèkRÓµ_®ZGso‰#}¹OP}>4FÊö]Y¶ÔÓÌðÉÎà}à~Ðù‚EZ—Žn¾¿,·–k5Œ¬Lj›.ŽÒ a³¶72¹Ûʃ÷5TÐøïWŽlޱwÍ¦ÎÆÞXåCìÇœíŸZcÁPi\K{}|OªÎéj§q€Ä ¾:~>•l·“7;ÅJñ$ä)Îp}é¬\f#`w¥×ŽZmÓ#‘\Æ™?*/g´1’ùØŸâc·ÚÚ‘#² lzÔk‰sÛïTE‰yË.Àõ•:7ä@ˆÖŒC ðѰÒ ÆÌ9ÔžôÅÞ`½qlÅc`s½>šÎ Ÿh¤ƒÝqúT¸xTÿ>Õ€îQ³ù˜úÕ…Ï*ÃÎŒvåuÇéCçÀ˜x“ø‡ê¢K¯[Éáx]ÉÇ_ü Ÿis˜Õ ¨|yˆîh”sŒà°ÏÆ‘vmd·f¹ * óŽ«ð :ŒFö#‚9dLÑ]Bü=õÃÀç |*¯s‡,é9¨MÖ’i³ çmϧjPP3Ö¼ßdZf íž”é Ížôª÷ZI]¶ë^jfNf˜Þ¤Wª9ƒ’^u;¢ŸQµv½\=kÁ³±]¢¶·…à¹Ë.ÙõJ9ZkBÍÕ|´ WY>¤Äå0^øïU˜f½úÊÈy£µês·?¯–1Ǩ¢x<¡yrïíV[1lœªìÀEæ>nP¤|+3ú@úPŸJ×RÖ&–¢ — ')P @ǶsïYåç[_!- ÀŸpz¡k:¤eÙ¡f^㱯Ø_ëº_Ñ¥„ê7ê× â<’6^'!A;ì07÷¦l8âèJ"Öã3 ãÄ 7Íz–+aá¡£jz`Ôa½Žê)n§Ñ»ƒíVÝ6õQl8ÇLtZ›-ÊÚBZÊ嶺wšƒ´ØVê7¬WŠ~Œ«Æš‡Ũ-µÀYZдŒøÃuØgï¹;U—Hà>ᛊo-ùexüWiüì#gú°ß#½d‡Üq¸×8*ŒÜÄØ\ì>>¦ q6ˆþÖ-±„pqÐ7÷ÿJ£ÉóÇç¹ ¡w…}moj,4ÛM:0¶‰"ïÊÍ&HÚ2&|0iGj©ëïfé,IÌA—Ö­E’8®`}˜Flw›­fê{e´•AË:ìH횪êÚ°µòDT9õÜ•ÑôȬ­"Ô¯®VöíÀxؤ`ôåìO¿áFäoÊ@Ùô4ÌÓ`o@õŽPdˆ~õKm.>&âÝ*ÂVi$¸ºŽNà+0oLd×Õz³/‡ôPWyRÌÀϺç:Ì8‘gñ\HÙa¹ÏzÄx¿WL†>V@#¡ïûÕ{@‡Ê*N‰¨I jk+)’ÎCüÄýǸ­¬åÕ£Ž]=D°Ht]ýê\–2iújÛÌÊó à°YžÖXÝä‰ÝRTH;ð4!t{›‹Ø¡´VñÝÀNSƒœí¿j×L²iú|V—÷²_M iXó>µIâWMNU´tyJùÇAÇßÚƒh:,Z¤ŸÄo1%¢7”v•‡êúU¶êa&1·cNZ$®üåJÆ:{ÔíëÄàf’Ì{Ò©*X‚X`úW€9ëµp„æÉÞ¤$ò&9[{T¨®eb0û|·òåˆÇ©îöÞi|?ÔýµØ“R¿…Ä4å¾µ¼©ÀhÈÝ õ?éQâR’‚ÃaO™åoJá›=êD„ÈYýw¨ x¢'n¼i1\¬ÊXìsÒ§X¼+tGÊOLÔûÆD„ÈXtÇzõÉò÷?Ä~“-Öm"Îð ½¼¼‡þ–ÜƲ¹%äCƒ½IáM,ëœS Ȝֶ¿Ï›#cŽ‹ó8ùf¶k“Ï»;j¤EÊ_®:¿Ò®ÅÖu%¬ãïFØÈô>£ØÖÓÂ:Þ¡ªh‘Ýê  “ʬ£—ŸZ¾¿Ïnan‡§±¡’)Æsç=j%³Ç&¹œàÇ`f‘ÁÀ|O~Ã5vâ.Ñ5í ôÝ`¹ˆîžr´l:0øg¾Õò¾§Àºq…ÊßO Í£)’Öh‡/8$Óª‘ƒê7Øš°ðô u׊ãsÈÊà ŒnãCøKèÖæ¤‹yÌ©ü&Úqs',Á|ÁHö žµ½Lü¤òõ¨’°hÙ\d‚=j•}g'<ñG'Œ«º“¹ø~Õ?KâFKO«%‡*Ž;|}>TÝæ¡|ldšI9 `ò®À þ5N›Pig2Hä.{úQ‹ÞÖäéWRÿÊ9ÄNOømý¾Õþ¬Ã’SsœàÑ>×§Õ’ê9åñM»( qžSž¿«\[Îh#t?Ô æ­œ imÄÖ÷i¦Z¬–ÊÒ‡XTq€AÇ©­îÌ…Èó{U^ÿš'!‡_βÞ*½šéš$‹‘Ó swøÖ%ªng‘¦c»ºP‹»M”l)ˆôGÔ£h$v†Õ×b>õ®ð扥i|5ŽŠmÀ, ±bÌz’}séAuMF8¯M¬à™†ÍéšB@“ÚžTÊH5'K²ƒNYuk·H–5<®äƒ»dôôük=âï¤)u9M–…ü¸W*÷Xó?²ƒÐ{õøU2Þ'ùfvrz9­/GâžÒ+ ˆ–Úh”"G¦=µÓܽë+G̸ûG±¢ÆPSŠS6)<êÃc¸í]V\Í*¸H›w4ŸµíK‰í RÈñM‘º÷ôº€)á!\u5ÅcŒÔ¤|d£ØìGcV½ ;}FÞ_NE0õ”d«Lõ"êÞòCgHÚäƃê2%¤`ÜíQà”8 wOŠT7$„ã=AÇ­A·»–;“ ǃ뚑4²æ<¸í]‹[FiI²šz+˜.Æbl7ôž´ÓJ…Fàu÷¥s mHæß Ø;RXž´”-œ‘]2p¦¼ÎZDŽ|ÕØäGŸJñF#*qí^pz“K ãU'Ú \ÆÊÂE$×5õ¿yå#=ºÑIð“zYèß cµzByg¹©¥(t¦eût¯ý*f2|uùþ”û}ƒð¡°’×/ÌIòç•HGƦ’ hcæ9í¿Æœµë§j¹hày¶©ÝuT(Îã8¬;é áz˜ÆÁ—þñX•ÏØ5|ú.UúŽ¢ØÆ` î@]¿SZö’ª`rTl¾žæ†kxɵTõ>²Û¼V‘ÃŽëcjŠä/„»·AVØI$dÒò|A½A»'œïW-šMÍ‹ nNkúEóñÍ¿™D1€à f…pˆÂäÿûÍú ¾ðÐÄåÛ¤'õZ;?Ú¡÷¤‹IpH¡àsª«/–KŽ_.±±¹©2I$ší$ŒíÉÕŽj£/Øj wFžIJ¶fvbPd“V£ò|mPdãù_þ]jZA&Éèçö«]‹Te%O¨Ú­UÄòÍË$ò8ôf&»®õ p2oY€.X-c:ÏÿÍa‹Œ]é‹°1ÒŸÀUvè*Á É ÒnTHÀx£lûUj7KÍæþjõùU“NÿQì(_ҦܸŒ`| c¶Àrô>ßfuÍXÙ§„sˆ«Â m°©0{Ô©{ÐÛ†e’2¬AçƒD‡øâž¨ó“̃>µÇéJ‹ìŠä_ã·ÄÒåê)‰:¯ÎŠ[€¿ tõ£ü<ͪêí3˜UËPvß*Í(ì*ÄŽÃ]E pmš~Û¢Õvãÿ¬qþvýj5¶÷r“¹ÏïS›¡¡ó€m$ÈÎÙ¨‘’¼¤î(…±'©©iöq¾ØøSdŸïéR '¸øÓ2ý¯GŒ“Ô“ñ§¤ÿéßåú×-~Ó|*Rý‘]¯w¤¿Ù?*j_ðáUÙ÷ükÿÙnip2-8.7.0/share/nip2/data/examples/2_point_mosaic/example_im_01.jpg0000644000175000017500000005447313224651032022062 00000000000000ÿØÿàJFIFÿÛC    $.' ",#(7),01444'9=82<.342ÿÀ é¸ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÚ?ùþŠ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢¬XØÜê7Kmi–f…È>µª<¯žš{ßÄÿ?á×ÇüÃÛþþ'øÒ¯Ÿù‡·ýüOñ¥ÿ„3ÄôoûøŸãKÿgˆ?èß÷õ?Æ“þí8þÏlÿ×DÿOøCõðäß÷ñ?Æàí|ôÓÛþþ'øÓ¿á ñý›þþ§øÑÿgˆ?èß÷õ?Æ“þßÐ9¿ïâ4xC]-´iíŸúèŸãNÿ„7_ÿ sßÄÿCàýxÌ=¿ïâÁúñé§·ýüOñ§Ââú7ýýOñ¤ÿ„7ÄôoûøŸãGü!ÚþqýžÙÿ®‰þ4x€Ì9¿ïêð‡kÿôoûøŸãAðv¾³ÛõÑ?ÆøC|Aÿ@æÿ¿‰þ4¯çÙÍÿüj#á]iN ‹ßÅÿxð†¼ziíÿüißð†øƒþÍÿühÿ„7_ÿ sßÄÿaðž¸a°mÞžb(ð޼_hÓÛ?õÑ?Æ—þíþíÿüh>×ÀÉÓÛõÑ?Æ”x7_##OoûøŸãAðoˆ]9¿ïâð†øƒþÍÿühÿ„3ÄþaÍÿühÿ„7Ägû9¿ïâð‡kçþaíÿüh×ÏüÃÛþþ'øÒÿÂâú7ýýOñ£þÏÐ9¿ïêð†xƒþÍÿSüi­àýy1»OaŸúhŸãKÿoˆ?èß÷ñ?ƃàí|uÓÛþþ'øÓG„uÒqöÿ¿‰þ4áàßù‡7ýüOñ£þßÐ9¿ïâð†xƒþÍÿühÿ„;_ÿ {ßÄÿ_øCœÔ" l¬yoïd³dc5[ìrK‚óÒ­‹ aGÞ<šlöûPäóTvÖ›OUϵK€Pœæ…­I{YçQV#´ 7IÉì)÷W-8ê~@=ª(Ñړ :ùRª,€C 8?^$H3šé´»;W³I]X¾Nyÿ>ÕlXXÆÛÒÖ-ǯ©IcÚ±ª‚1À¹ˆ,š{†.1’>µnîÕAªÆ+6H\òâŸa§=å×—‚‹Œ–#¥l¾n‡-—ÛÀ€*¤ðÇ!PíYÍqSÅ>K9@ùF~”ëk\¡22zSnS@zU@jqÚDB’U›[V¸äœ"õõ¯œ«¤ð.?á*ƒ?Üý×­œRp yÍ-Ô{K5tsgpN+gNE–BÄ— ­LUy*}+=¬Â¾AãÒ«Ê»‰@¨‚ó[P0XÕ}<º“Î)n&·eaÔW+,rùæBÏžïZvZ0]|ÍýÑÐUÙdµ³<¹ÜGÊ VL÷êì|¸¿ªr4®2zUvPAÍ$(¡·¸ùGoZ]¥›ŠvÌ “ÍFÃ#–‘@ïW¬R&ò¤à7Ý#Ö´Í‹E÷HaLtìA¨fHʪ:ƒè BºbJŒc“c©èy©Mmõ>µFÎØ©› |²±>ƒŠã‰ Ú0=Í3y…FÚ{ ùƺ/ÈÓoþëÿ#^·ÐqLnlb¤<^´›E '=8­)vÄËžõd\20*ÄÜV…¿ˆ6—#zÿxu®²Eu™×ÔU+ÙE¼@t¬¦¸¹ëN‰ƒ89¬¼ýÖ¥AGÌÕ3])‡äóQ¤ÞT¢UsŠÔŽTš-êy½+7TC*#žªqY¢08©R Ã8âžlVP~^ƒµS0ùYcH±(û§ð¡¢Èª·QF‘—9È÷ª‚pÝ5,Sà‚8"ºK{ß:Ù\`ñƒõ¨g» ãj“T¼ßÞ‡rqšp¾ˆKò¾CÅ6[µ$ípET–Epxç±\Ò©“@ü |¤d(«¶³„±vi.Á nã4ùn¶áɦI}ò†SŠ·k*\ÄN}G¡­}ˆLŒޤš’Úò+˜ÛÉmÁxȪ·C9õ¬iö‚w0÷¨a¸XeÊTŒ«+€çÜÔE‰«v‰¼÷«fR*¥ÁÉÀéU[®Ié_=×Ià^|Uûÿ šõ®ÔЀŠwSKE4õ©à}¹¤2àà*&‘sËT_InáávFõžú•ÅÍÓ<ì#¤2I4‹3#eM?í|„XgwçOkÆB  ßMÛHŒd éVmî›~AÀô­ % FÇ®k*n[=©"˜† ¤äœ[±'—–îEGqH7taXS¼ÿlPýØ *ÌÄ÷ªR ®dg½Sº|D/QéL‚Ù° ­ i×x •nÞ†X–$“ÜšŠåðª9Á<⣠6¼Ö¦™¥£%Òç#Oj©§=œ„ç1òµVˆ•ÉØHöÔ|ž‚¤’Ãí#1±WÆ=Dн»yN0G>ÇÞ¦‰”…ý*¤¶wfCÄz´ž6Ë)Ûé‘Wôë¹,.KËFÃæ^™ô©/5)ï› vÇÙJ~}%„ÌÈ›ƒ®6ç‹Nòv!›`ôQŠÎ•ŽIoƘcà)欙"É99îiÉ«VÛÉÀn¨«†aœçéP<,:ÕYárFËÞ¾x®“Àœøª÷ÿA5ë]¨´©J)Îâ),¸}ÜÓŠ“ÞšQ±ÁäpI©7ñMinFiÀqJzÓ̇v@À©ÖäI­s dôª²±PGåK¥ÍoÙ{A#Ý÷®„Ä ¬ ž„µNhåÉL䙪1@Öû÷°ÚyëP¹ó=ª9cÊÔPïJ¸ÛƒI´STòAê)&ÇËœ÷«vhŠw²Ÿ¥jÅ0nG5$ñ­Ý³ÂLJ\gš4¯"E¤<žjäZEªœœŸ­]p".5È=p*ž³b.-¼ØÔy±z¢¹ø)8«h Ç 2=iÒD#ꪓÆYÆÜt¦­¹~SZ––j›™°OAO}8M—ôè=j³Y€üp1Ò k“ˆÆ=O§}.Qn !î*ųÚHº0ȧZ¶Ö„Yb‚j[¨±o–<äVtÀ/Ò¾o®“ÀŸò5Aþãÿè&½hRÒ•;I,x©ã¥ U_Þïù}jÎO´¢–Ž¢ŽÔÌÍ4°PXœ `”ÉÊô©õ­:šNÓš¼5áv6)Zü¨:çݓ֬éú´önwÂz£Jé­®íµ·ÂàžêzŠçõ‹À×DGåC–#¹ªËtÊT™O_jµ÷Ór¶jŒé)çqÇ ¨âŸËùd?J°’f–R¨Ÿ¥FÓ)ÚÀt©EÆü|Øö­»s…U8êj|*IÅg^êãÍF €yoð¥þÙŒmW1ê{U¸õTS £u«Ì|ØÃFÙV«´bnÙ·mˆóz·å¤1íPŠ¥6%”‹·`È)TþðUõ]±/=y54Rdô¨Ú%2dô¬©õ†æDHÔ 8©cÖ W…‡Ð棽¼µ¼¶#qY•ÈïI¥ØyÊd‘ˆ_AÞµÑ?•TQ]®bw5—½˜ ¼J}sšÚÑ4©ôµ”K2ɼ‚01Šãµx~ɯ\ àÞ?­|µ]ÛoŠ 'ûÿ šõŸ­9Hè ;­ª´§smíRCÁÉü*^•’ÀÎ)C«ýÓ‘Nw¥íBÐFj¼ÎY¼¤« 00)h¢£tVÀ4¡éNúP3KMäš^i{R`g4¸oJš’HÉ« 3³ ±©èkwHgºŽA.7+vª]VEŠÕbŒ‚ÎÃ8íþx«–P¼+cŒÕ»ÜÚÃØ÷®G^¶m:ã)þ­þd?Ò Cû¥Ü~b3[0Û!·]„ÿ:Ç{&°Õ®UÆ2AˆÍHÞ\ƒlЧ=ˆ¨“N_r§9ÅiY$Áäö®ŽÒl®;ô÷«W14Ð>úrµ ¸š1žŸ:3U ÈX®5ŒÍqmp%NáÔEkA{Ñïuhœ}äaŠ·mu²&p;Õ{­]¬Íf䟹Z1ø‚)áG…~~êOJY¸q…Ž5½ë*ï7FyUZ\’+äjè¼»¼Oÿaÿô^¦cg $TѨ^IEDÑå²*AÍ€jO:\;`zU 6Œ(À¥ H§{ÒÑQˆÕ\¿sR k Ò©ÈÅ.*2®_=ªJ@yÁâ–ž±n#qÀ©$·Qä:ûÔPÆen>èêjGŒnTS«ÃÃ.jHÉ`ëS„ëÍ_¶h–m%êí‹3 • :õp¬rÝ¡bq zšÒYÔœ‚3VN¡1nrr:õÍjš”ºŒád!aC•Lw÷ª‘È]I$pqZ6:¼Vï¶Fàz·«ysÊH£|cŒr} UK=Ã;‰5 J<íƒøx«v·- Ò¶Àã t)yneWD(Äsš¾·iŽQ\ž±3ÝæÙÊ*6FÞæ§·ñM³[·ŸúRuáþ•b-\êù©¶4Uz­U¹•ÚÍ×~;õý+5%ÇQS¥ò$,U~AÒ².Ì“9’F%;K¸ò¦11Âã+í[?n*Œóô¨fºóTìùyç=kå:é< ÏŠ ÿqÿô^°p(Ld‘O¤=(­4g4½j+÷™`R1Àæ‘wzu‡šZUÌp3Z:RRž”I°É©ã@½©Â">bjÄcÍCùS„kab¤Š5‰ƒ2înÞÕè[ŽéÐÔ6Ör`³:O{MÇ‘NŒ<,;{ŠÓ‡Á±OÞD›‡\óS´¹åzÕmÎIËõª7„†*$uªr67zÒ’=M_‹TYY±€I=ªÃk‚5ب0ã'š —%_'ד[³Å噙ƚÕ_˜V 1ÔG."wmã“\õæ ¯¸EŒ7zý+Û¸ëSi×2Ú\’²~íÆMk=ËK‚_+Ø n\ƒQn1ç­T–W|äŸÂ£¶È¿J¸/r»OZoÚI' z×ÍUÐx)Šøš:ìýתEr$m®0}jÎ@¥'ŽçFh½4†ÏËOÚGÖLxÝÙ0>PrjâFÂ<ã“QHŒv♳w±Mò]&Ev[½K,~TŒ€çèE$‚*Á·ŒóȨšÙ•ê§½L¶íòá™-Œ±¶1Ú‘à1cxÇf“¥8·$jż2«î# {U±žSÞ’\Ç×½SgåŽoÅjiÆÁ€G­1­A-ÐVtŒ'`°„ù«òG墧SŽhHË ãZ{ªÆ„’*«Üă¹>ÕŸs9”ªÇsU Äšî)§Ú«ÂŒ®ò1%­L$ìi70 Å>©íÛ0ÊÈ}}uÙ¥á»E•`°àÖkI‘µsŽÙô¨òÙëÅ.NhÜÀ䱫¶·å[$T­x˜;Ž Uk¥là~&¢2óÁ¤æœÓ…I$ùò·üqâHÜýצ BjìX VdqMcŽijN6b˜ÞÜRäÁü)½ëOM·ÜÈÈÆÚ¶Ö¸$‚6ö¤ò—kÀ¬wç$S9õ#¥8îYÎ*ÌE2Î}ª@¨Ss7Ëüê³ÈÒ|£!GJÙÒåC“'r ©î$B§onæ¹û™79É,i`O5Âõ4ë…Š6Qî#ïµiv“~í›:{ÒOr‘ɵNZ—ÎóÔÚ©]˜Ò›Üö­˜¤eöϦšùxY.#ä©–³p¥Lˆý;ƒÍ qICÍ]‹[”`HŠÃÛŠšëV¶{uØÛ‰<¯§P]ÀÃ%±õ§9O)™XcTbÀ.)84#v&•ˆQš‹ÍÎx¡\0È9¤â“#=izRÑHzR‚Fpqši¨äm£êä"l“ÅZïJFkÀk ð`ÝâXGûÿ šôøâÕØ£ *t’(ÀÏ#>Õ tÉØÉ‘¿Ú¨(ç"¬‹S圩 {Õwµ1óž”ÂÙÇÑéi ±REfÆ[sVšت—CÊŒñ×­cyÈÄáj6nx¡fõÍ!mÔ¹'‚x©P…=*å« úcߥ%Þ£”1EÛ‚Þµ˜O4à{ƒŠ $cµU•Ùr’1Óø¦ÞOÌ:Ô©!É‘OÜ[œâ˜ÍÚ™¼3m=iáqÒŒQQHBI§)Ü3Ú”¼ô½©A¥¤a»­&ÁQ˜‚9e{T¸È¤Ú)qFqG½´v¨ÝI¦¤[rÇ­HzÒoáú××EàŸÀ?Øýש ;ðO«kiçòxQßÖ§6âã'=sP4@ŠÚ³”Él›† sPÍcœÓçô^Ù« ûàŒqíYóÔìÄô¦‹{¸Øþé°G;y¦àþTÆ!XÞEA:néUñ$rA“ÜUÅ T|¥sɧ@£oZo—ó†§ÑMÆ}¨Ø¾™úÐ}¨ ÎM:RÒdRÑESj‘Ã`œŠœô§QE&2i6Ñ‚+À«£ð7ü0¸ÿú ¯^‚˵‡ÔÖݬlW(éV&´,¥½g4†L{½sÍjÀ¢Kpî¤ëÔV]åÖç"&ùWš†Òæà°Œ¿ÊO5-Å„ í . çƒUÓJ¹•K@…ãÈëCi·ª9¶“ðSP¢]E&$…ñî*Fµ™˜³)Áè) œ¿ÃþUrÎÂ3 }¡~gãéU®tém›rüñzŽßZ’+pT3¯'·¥#ÙHÇ÷c°«ÖZ;©ß;`à^µ§$H!Û G"³n,€!ÀûÝxèk>}0ºãp<©äI üjF‡åÊûÈ, Ó ¹S’*dŒ°È¦4R!TŸ¥iiú_˜CÜ:íÖ—X±Xe…1qØÖh„ã'І@ËÐgéH4ê\ 1JAx¦2ž ÐVF*1Ï §´M7®3ÒKí@\šd‘²r2G¥¬zÐèÊÙ«HŽ$Èjx”…É<ÓÉÅæƒÒ…4gÚ¬Ãk+ÈŸ! úWÏÒøþF»÷ÿA5ë&í uÚ¡€êzètÝNÞàc!uSÆ*ÄúµšJ±£Ï @àV}õÒ‡òmñ¹º‘ïVïüèì|¸X=«œx=*[f"`sÀ­6PŒÖ¦Ÿ&ÛE>¤š¹ö“"‘nNNzbªy»ÆáÞ˜'Vbƒz†âR%ô©bï }i$…Xå8=qëW ±«·Öžì$Õ;¿P9ªòê1‰6˜˜ƒUè;ð¤(©c¶†ñ3!)‚0E[û¼…† |³]‚ _@AþÿÐMzΣÜz÷ª¯ÜTñHÇ Ã'Ö´´¤óoÓqùcÎÏ­mM2±!NkÖ¤4N n$ƒT✞TóéV¢’Glf· ”@´äV0»»žµVóPòX~6œÕ[mEÊã#Šlo¹‰’jÂÌ‚Ç5cÏÜ85*ϵy«Ü…áÞè)³\äìý€FÌOD?ʱ^L®OZÎP¾µ¦’¬vê=iÞwƒŒÓ#a#0-œzÖuÊ—•ˆéÚ«GJ’9äCÏ#Þµb™¼•8Á4°Þßrz´è|ÈðAì*…Äm,‰˜òhžÌà lŒ¨ÏÖ³À YÀ#µD\®P¥*0“Wlf‰.wàŽ†¯^Kí‚ qíYr[•9‰²?ºj4C#aǨ5T°‰™@ÀÏJ·Ñ©Å@d ÛG-VЃwZ…ÑÙÎâ”[ʆ¦ŽÆwû¨ÔÔrØÍ ¾[€ *@#”‚œk¨’ÑV1±T)ÎÝ0yØ)ʯQ× ùTÖP™.HêÕ¹=³Ås&v1ã|±]Ô7Š`ûÿ šõGTžÂªG&ìŸz™eÀã­ZÜ<Ÿ³u®&«7Ì šÎÕdÒñQ[°\‚*ìF:f´bœ1Æ8“Ê¥ðIàV~©"}˜y~UFÒê3(@ß1«mp±óNKõwÃïVQÊœƒÅXŠò&lI•ÇB;ÓZç“ è>è§Çs’$<úŠKYˆ*¨9÷ª3½=©dfŸæ¾1¸â¤KùØÀ;ÓÚå™NÒÒš®J‚MG¿'#ôpn¯5b{–UùOÒª¬Í¸–bsVmn]edÂ÷ÕÈ5¾ØèJ«°À'½-õÆSoSÞ±Ã1ÁÎ)@È9jÂJ\g¸©CŒÔçnª3À¼°#šbHÝC0R##r0O­J—¾iëp;ŒyŸó©`»pøÝVµ Ù’PFñÐâ²Ws–?•têjÚJ+#n °Þ•†ÎñœTM 3®ÞsZºlgÏ ÏZìtØÑáS ÏÖ¾6­¿ >Í~&ôVþUècP•£(ç*{÷-¼ÈÇÆ}*ü_Øu©¥n:b³.f–3”þTiÒË8™æÚ6œ.8©^G v2ñZmnÛU×8ÆH«7&£º}®3ÜV}ä‚HÙsü5ä63¤³0ÉáW<“Z&úû•>Œ)·}Ö­–ŒzãšpqKš]ǘG½hͤÀÍ;3¸íëMWSÐæ¸ƒÛŽiÏ!““Å6šAÍ ž{ÔžclÚIúÓ¥8hç4ê@Ä8§!À?­JŽÊZI"¡d:sBD7J—®*n)cl­;$t&œò»¹‰ÇLмœu§Åpvšé®$’JÒ$•ÝÐ{V÷ÙÀéÅMezн •#ŸÎ­ç ž´ äf–ŠŽF*¹“J‡r‚zšv½ª9ËÈâ„E^@Å<ò)йÏAOÍ Òš(Ï8¨ä, `TvìYÎMX$ãޚŶœŸz®ªàüÜÕ˜ø÷§³³i3FqK¼Žx¨×æúS€`RÒ”ÝûëÖ•ZœjÍ¥•Ýãl··’CþÈþµ»†çƒrʇû«Éÿ ìtÈš++xFY@æ¾)­ !}j0NÖþUÝÀ»UÎ*­ÉçŽOaSÀÓ[Ùm8Ýž3ØRB÷i2ÏÌÝ?*Þ‹SYí\ÍÙÔ}ÑѵcÅ.½K*1—<ˆØî_¥Y‡Ä‘‰|JÕí¥Häl ÛG#IÑ„œ.*HǼ7S ɶ$ãŠÉº·ŽîŒ‘Ï*} b –òÙØ8<Õõ—0’n@ÈcÅ[Òe¾ æÎLŠßu[¨¦¯ÛÝJ·,'?#žþÓ#áÒ–£‘Ih+ò€)ë÷G9£ñ¦4˜lJ2O#Šu¥`RFyÅ&ðE&rz÷§ ƒšD@ÆiôRH§4ê)¤žÔ¸Ï\QÓ¥#6>´Š[óK¸|T b”×­øvæ;ÿ ÛHˆªÈ68Q‘PÝFU÷/æ´­Ñ9½r|3[Þ xŽôØÿú ®ö`¡˜ àŒÕHÌ(Åäq»·µ=î-çaH7{U¨-€ÇÍÆjêYHp¯l· ,äb¹VÂYµ)eÁÁ8JdÅcï ꬥy­”È0㯿½K! 9¬½W/kÜÖèH¦Iè̇œw¥‚<21ìs¥uqí‘Q¸ÚÃ¥Mä <(âÄ™4Ë8©äR3p{ÒÒÓXãëUñlb¬ ïKž(ŒØŠnÖ8`i²à&ïJª.Ç™ŒqW7‚Ǩ23FqÆ)w{R“Q<»Ah…Â@©y¦ï óNhç4¸Í4Šb†-“Ò¤À'¥¶*œŒ×qð÷PÛqs§¹âEó{޵Ö^E‚jm1Á‹ììy^žâ¾­Ï 1ODTdì~ÞÕèLYÛ,?Jͺ26Caoÿ$tÖÿ–BŒU˜f1`1ëWу/Uwµ.OÌ2M7ìkˆfïÅLªAT;>nµ¨L7ÇFqœU„Ï :õ5~úÞ;]Âà»0ËVL5½§¹0˜Ïðò¿JÒS¹A¡Ž ÁºS©i¬HéKœ c‚ËÀæ„@ŸïT•1´´ði çÖPÃ#èj•ÌŸe#i,Hèj«^GÏÀôJIÌ1ç«et÷.yìkA8Í ÁGZbÈ;Ô™—h=Fh À¢˜Ì£ƒP+·ÚäÅXÉJp9´SIÅ p´Ð§½9@*þ‘ztíVÚéNn »Þ½vñâòRfuTa¸zŠÇ³Ô£–þ4€}ئGzøºº ø’þÃÿè&½9P w¬KÈI»”ŒàµYÒ¬›Íi[8ÛšÓÒ5 ÍüªºÆÌrNkJÜíNMZQƒ‘CF%9èi0kÄSˆ4Éäþ?º§ÜšáZòYÜn‘Ÿdžq]Ÿ+yk±Ž=+JðMw§ˆ‘w6ðp*¬}ØÆ`jÕµ¶š6£`;Ö„|dS[psL°ø#¬f–ŠJ;R u4ã9£p<3@^i$8\ÖUøÌ™=…dÏ2¦W<ú §öŒË‚qÓ¦óßpÚNáЊ×:ŒhiWƪ՜…à@Çœqžõ1À8©<åŽ0Îq“õ©×;yëJH5›Ÿº;šs)#=4&@æ•8©8£¿LÒ2îi¼¯^iç#Ú‘2äðkjÚi‰Vši$*¡FXoÛ†„C<|8Ã)¯’k¤ð.?á*ƒ##cÿè&½Q¢\åxª¦Á¤¹ùá`­ÈnØ­j¨˜N1ÅCöT$ïù½ê-ÆqŽj!€N=3W#œFª’0ÜxPx&®Ç"ºazŽÇ­LÑå1Œóÿˆ·~M½š6 ®]±èêJäm qÉ5ÒiEÕÆTí=EuV±žõ£rj¶Ä"óùT¨[9åÆBGåTlÙ¬{œgÍZ ¤€}éÅqÎ)µ´SHÈ"›+$IîjLS%Œâ±õä–ÖO,ëÈÅs99ç­M£ÈÛŸå_ÔÕÕUŒ£ñïQË$ªA+ÜzV•©Ú‹†*ˆ£Œš¹ï0ÙÎ{æ¬][CqÇ!aŽ~SŽjhdA»…èÍÖ¤ØHõåUª\†\UvRIQøššêMN!UHçÞ hж;v4Ö‡ ó]¤,Q‹«¥ˆùö¦ªêzRÆÆkaòJz}+%Wscó«‘F²œ2ƒõ©ã±Ž7$+WQWfиÒº€}н øöº?ÈÓûÿ šõ¡¸Í,—ŸgÙ]ÊÍVc–9Ótm‘éÜT v;Ô.|Èqÿ-ªñÊì—¨è}j aŠ{¤¸‘2SîŒÕû'óncµ@ÍiÈÿ/•å¾4‚îûÄê« ‚$E]”…$òyÆ;Ê®éÚ vûVF!ïØWI™º†3zã¶,¬‘ã&LŒ—Ú¤6¯éz0¦ÉŽQ“Þ‹˜Ù´éQT’WVm¦Ÿ4· –Ø$dÚº?øG¶ŸÝLÞÁ×úÓ[F™c`à9?Ý5B[)mÔ“`UxÓÌ zbÆéß4èÕœ:ÓÄRÚªI¤hxeaõ£”ÖlëB®SµؼÙ>PHî}+"óKŠ [Ë@–÷¨Ù#¾qŠw”ÖLaÕM\Ž9Iç&7 ‡ÍÍ›fJûuð®¥ZiHÃõ5Ðh¶ñÊæ@Ê>µ¡.“ó ì>Ȫió¿2dyyªœ‚AàÒñš|W–é!WÜö«NñË˜Ž tÆ1ŠÑ³±ŽK%C‚Xç5bÇGUœÍ:‚ª~Uõ­Ÿ¨Î1YwO5‘2)réÁïO‡îïïVVoZ°¬8®ƒM}Ê`oáéô¯k£ð7ü0¸ÿú ¯XU-Œâ¨Èíó1&«ÛÞ²ÁYO¨­{[Õ¼ ¥å$t5Ba–‘þðÒwR匌sP[ÆŒß2޹®šÂÚ) 0¼jaa‚¸Çå\³x|A«J’6ècs·ÔŽÙ­YÝDacœ Ü´"ÞÝ<ÏÖ´"ŸpÈ5*NwcVf¬b2FärGz­ ä· éY ï™ßÕ‰­{‚+~cEÕç¾€¹„8óGU¥TšáUã“Yn S’NpÖ‘na¸#Ö¤…ذÞÙõ­cæ+u祠-æÀFzŠùFºD&ñmºóôÿtׯý‘â<ò=i¯d’©p¸#õ¬vµXåo0ÏJÔ°Œ,%ÔpÇùU³oæ¡sÚ²g¶•$-$dÓÒ³ï8@ãŠXòØ“íVá‰Ãîæ¬7ERºVÜjUVEM\†O5ru«ñHŇ­h¥â,‰ œ–1½«§Ð›ýhÿºÀЏËɪWbã w¬×P‚qP\å” UISëUJò*ÞšRÖf21àv«-rÒîÏ•Nàà MiI!òוNY Μ€NMXÑõ!i!‚S˜\çýÓ] ÑPF#zÆ’?*b¤pMR¹·9$ ž·U›9#¨›þS"ëRfùl%~”5ä—’VËŸ¼}i³ª’;š¹ÿ–ß3e}kbÞåv 6úæ­­À”C€+žÔ.¤7 ̱§­ñšÓÑ׃PÛrqÞ·,£äK{®É‚ÕÁ“£?§Ò²cjZâI0z³Ö­G­­Ú‚­:I†ß”äÿ*…\Šz65&ð§­;í®£ ÅF×21Ë×ÏuÕü9 xÎØŸùç'þ‚kÚÕƒdbžª>î85]ô›y¥bêrNzÔðÚ$Ht«Û æ›wÓÐÝEqz´iý¬è€(p)ðDTW‘c,MXû&àÙ5IáÃaÒ’ W’] =«I4à-Áö¨.‹Z@ß/?Â}ê ‰¼"bq!ùIþ÷ÿ_¥z.‘ŽGø–­]\$ ñ¸úW1ªI=Ó´¯ÝÇÎ6¦ðΨí¶Pväw­Ôn É Ëô«"àHtÆx©|€G4ÖÛ•3ÁÇÖ£w r5m¥R|àïUeš<€X §!G<0¨’ ¹9äÖ¾—ª‹|[]7îÿ…ÿ»õ«SÞÛ9>Y,}qY7W£4÷5—2îïYSªÇÀäÖd²‘#O†P äõ¨šuÞA5—oÎî= \Ónä—åË(c€ õ®­ŸÉ·­Ðb³æ9‹{´ñÒ²ÙÌR–_ºz­\Ê8Ç¥[Ôuò#X-ƒ(#ç=þ•œ·‰ÞIü*´÷’ÜŒ¿Ü£·º–û³Ç¡­H5eÏïS߸5¯Éqô Š–Š(¯®£áùÛâësÿLäÿÐM{Lg*ëFÙ]K(bªy#µ_µÄÑzjšF†ÝwJáG¿SU?µÕœ¤HU¼jͼR\ÌHSÜ׫(]zåW8WÇ5jØ5•©ê²[ÝbUtNZѲñÒùoºOPÜÎ¥¹”—0À9ºkXíÖÕÝ@ :õ9¦H9¬ÝN'…c…,2j$D ÆÞGáW\ÔDã˜! ·ÅQ¹Õu I2]IŽø4ÛQ,àf9ädö«ÃCŠòx¤rÊÉÎW¸ô­AaŒ è9Ï­Y‚Â6`Î U9ÔÓdˆ+èk6Y$ƒÞ¡lcž¦˜ä’8üc¥vi=Ü“J7 ]¸>µ$šd –Œ‘íš®ð2uQU.1AïÍ7Αb*½}O¥DAóHä²àqïUd¶ÝÏzçÎÙe|pÄb ¸Í¼{NÕŸæ’IÏZí'òVfäc%{ŠÔðÄk‡¹`vEÀ÷jé0g” Ï=}ªÛ„Xü½¹\c…}h-àöôªcäšO”(É5ÎO¨ù“3/sǰ¥Š}Í‚~•p>@Z—ÌŽäåÏ\SU¼ÎF:Ôð´Ð|Ñ;)ö®–Ñä{hÌäy„v©Å-!¯®—Àg+·'ûÿ šö8®aNGá[–¤[ųûÜŸ­#2«?”B;wƒuÂáÝØ¶O\æ›2Nié÷âxÇ#+Í>{¡$À²«¨Æw(•ŸtêpŠ~c×Úµ-míÒF!/%«cN/u+IŒD¸ sZ"2+ÜÇá˜gÐu5Bâà°gÆ:V\rC;…FéÉ NcYŸ}©æ/,psUneXËž‚®Ø£Gb¥¾óüÔ1Æïz©,ƒžy¬éq‚HïÁ¨GZ° ät¬½K(Žª6ñ\Þ–WŽ?ïAü*mGDŽ;5"h¹bNKŽù®bêW¹+¹pè*;8—sƒµOÖ¶Z¿et ŒÄ±€¬s…æ· Ê‹-÷Û“ÇJŽY8¬{Û§nyïX×’I{`õ+×ñ¬9ô»˜í»Ôw’*®âU¨®$•€è£®;Ô쟔pi¡°G8ëZÖ[§ 1ô&¶’EGSž*ÛÜÆ‡ÏÒˆgYAÀ ŽÆ¥5à5»áˆaÉÇÈÿʽGO»HîÐÈ]€8õ׸8ºûUŸç$“xÒzuªS8Æ3‚}*” s“Êô5¦n …ëÁ©®®îåEŠC˜Õp0+âÜI“Þ³Õ †<üØÎjÍžÎCpªIùJ×g¤\º'•/!@Ãw®¦ËP¶6¤a)Áõ¬»í]™ŠÂ¸_SÖ°ç¼>k6ܱ÷ªk¬ËwsÏÿ^ª%܆äΈò;UÙ'›V¹ŠR=ÁUG¯©®Ì­Þ“f«30êAÀüjˆ×ïö•q'¾ÜúÔi¨ Ù1'¿Z±=ô/fá#¬ëiã·w-ÍÀ"¬­ÞÞr~µa5ÙHàéÖ¨.ûËÅ«¶>‚º)EÂðÀªNÄ“Tå<ÕIA'œ ÒÅfäí¬H±Ä‡’Iâ³nbAP®0Ù©¡´ÍœvUµükS±KiK¢œñÆ¥`Ý”†o¼åϪ“^0â?ÌÖÆŸxªÑÌÈiåMt«wñoFü;Ч$ÌI’jÕ°Þ¥ÆIµ BBaFÑTŸå=k.úÚ)Ap»_ÔqTaýØÇ_z»g­¤"LoSÈúÓ!–âÚfXÓ'¦H«éq!LÈ0jÂ\ù¨wŠžK¨¡ƒÌÝ“ÐÞ«ÚjÓ‹’óÑ·ðÿwé^C[~8×â'û­ü«ÑeU˜æºö¼WµIgå+8Ü%R¼ŒŒÔÎà‚k5ÙƒO4±°Üje†¶QLŠŒŠHaUµ;/OšP6²¯W;ai!ŽYˆÝ“ŒÕ¸­QÜ» c§Ö§MѶÆ{ÓŒŽ Ó%‘³Š¬ØÏ^MgÝ”v#øª8À ]„ìš}TL~äCqúö®³R”-»ûð+œœ†÷éPÓ[=©€;0jlÒfž’Ü2±R:VWT™ïqïÖšuD~ªV˜gV<E3qÝqJ%nyëÞ“qîM7oÌT‚FãJ¡›–ÍUÕ¯,à²tº`X•G\×<²\9fàv°§ÛÂ$_¥_µb— >SÖ´vH¬6(_±w¸ìL‘Ã7j¼ö€.æˆïTä·Ên÷¬{Ûv_zVD¡ùùN=j‰M¬E_Ó”µÜj;çùWEäÈ"¨$Yq9§J¤Ù;ü<ÖP(éøS“ôn(ý:ŠòªÛð˜Î¿?Ýoå]ûFGJ‚Y¯mЛ`äv¨äÄ_Þ°1xdÏÍŠrëw‡™4Œ;üÕÑh÷Ë{lpX²œÝkM˜ñÆ´ ÓÒLy— =ÓiâÖ u‡ÎN8a“LÖºé`Íï(áwŒž+•¶t‚Ò4' ŒŸ©§¹VðÇÓ³“M‘7ŒgžØ¬MJù"³ÂInŽã·µA b ÕciÚIè{×káeµÒ$¹cÌÍÇ=…&©~ œÅŠìÍ8ˆ)Ï­Z4”QE5¤¦˜×*8›“íS‚)hÍ<)²]yhvõÄë*Ë|_y`ãpÉéY别V û¹ê3WÒXd˜¦ìÓÞ·´›x¯,¤–^€w³ ¬vÀˆÔ(=qRÁâ¨I¥BŠÎ–0IYZ‘H"1œyV h÷sì‰ #©ô­½Ю±m\’['þk°kåDtÁ¥3uP*¾§`-ôÙ¹&¹¡Tœž†¦Žíc9SϽynø@gÄPÿºÿʽA$ŒTœÖ‚Ķœ°îk˜Öt´¹Ý@¡eæ£VP†}­G­Í*4´‘3ןzéÎÎx5,JÈÆjDuh¤V÷pxÔ°á¾µJñ!øF}cÊØ$BL”ƒÖ’]V$bR7|qœ`~t’êK2yqŒ“éôªÉ¦BÃæRry«ðéÑðrp;U¦Ó ž—åaƒZ±ê–:~›&(¢PŠÍÈ5FíÖt/«U9¬eIDÛ‘ÙNz¨­t,@ÝœNa•"¢GÛjDpÙÁéNÏ¥–Š@è{Rn¸¥Ü1œÓLE ›wCP\°hØÎ+ö˜‚ßx-dËRT暤Æá”ã‚)è@5µ¡êBÚù<ÒJ7ÊO¥wHÀ9^ÔÉš(æ]L„gfyª3|ÄžœÖ}Ó¥´e›—?tW5tw.ç$ÔºdÑÛæÝÔ.ãÃz×G¢ÁZÕ¼Òü±©bÇÇÊk³ký.8ÈûJÿß'ŸÒ©hÙ0È•HúðªŒÖ—63IJ θä¤Óü®zŠÈ»Œ$åpqÖ²çr®@®&º_€Þ+€î?þ‚k×@è*9“x €Ec_D#†L03X Ï7›€1×Þ´míw}Þ=i & ÁíWmÎU•`_Òœ’Ø€p­R»`ŠKG©ª0ÍÌŽ¬²)84N!îXÔÓŠXÞ+ˆM´Š 2ÕvµT  ÁÍhÚ•™¶δc‡o³’Þ\w»zÖV¨|Ûˆ Ç 2~´Ø"e! ýkFÈ´.QÈmà ‘Vóš)Œ€ôP²;³ L;PN)sÅÖ8Ååò #¦{ÑóñŽyªÒ´˜ëQÁx<Ó0Äõ¨.áÁ ?ɾM›_ƨu5"¯LUØm™c÷º×OõÜ–J-Ÿa †#©¬Ñ4±Î$$ùŠsÉ­ ½e<¥1/ïù³ÐÊk¡s'ïç>½þ”É6 ðEU–ß+œZÚ&§µÅÆw„~¿­©:ô5WÌ?ÀÚp;‡"£–=ø…fÞØï•X.Iâ¨Éá«‹›Ìë D “É?…yUu_ÓŒ-×þ™Éÿ šõ÷€¯"¢x³Ó­Vº³2€ÃkT×B³¶‹-æz·SV-­mbÀ1óõ­1µ¶ÑF ”žÃ¥C.}ª_ ¹ù޹ß$N¶P·ÎË™qØvZÁµ–KgÝ`úv­kY伓!zv÷­X4ò®%‘ŽG šápÜòi¨àH œÐÕË‹ƒ$kº®~ùÍ:( Á#°¨ç³ŒÊfO˜?\ö¤XFX€Aî;Ð)h¤´Œ8¦¨8æ‰Õ¨I+.u©c]¬})äg—˜PñP‚±¦ª ÅT”–Ï¡ª7‰#*Fk"HLo´þõ©¦ÙnÍeÿv¯<ð2jí¡ð0lãG¯ÊkÛDÑÏ Ê‡†íéUä=qHPòkþøO8Žò¯CëïSYv.rkZsÅÇ•-Ì‘\Ç ;Î7T:Φt»&•ˆ2}[ü+ƒQ%Äí,¬YݲÌ{š¹œ’8P8õ®–ÂÅm­†òM^ôªÓïÏjþöjT<Õ˜Ô#íWÕr¡i’+£ƒÜÔN¥ˆÉÉÍIAéQ—ÇZTpý)ôÓ‘ÒHFzŠB)# Òó¸qÆ)H£‘PÍ÷r5FYsÅUgÏZI]«>yÌŒ0¥tú=õ®¡@ʱ\"àÑ…h‹ i·VàG€:Væ#;Ea_Mä…pÆ–Ú_6¸©ÁÑò§ñØÊ´tˆûdK$¯³= qÒ®j:’[’‘á¤ïè+*=EúžùïOƒU¾i[ì–Å_³û\s¬Ògx9%Û“]ɹ®#9ª³»0ÁÇ­xmøLãÄÿºßʽ—MM–aÉÎþ~•30ª7«q5œŸdÁ“§^ÕÏ[\¸+:`pk ¶]åZ#¸J×P!‹Þ 9?DÒ m ã¥aëvRj÷+iLí7÷E4ƒg IãlöÏB+NÞ5 1è*îG–p§ S<äyŒqQ;§”]X¬‡'óD× `|ÍéUÒîE‹~¶tÍRÒfÈå%?t‡é[2G¹&¨4Lƒ'ŸzŒŒP~íBNiñ°Æ*LŒÑF@¢ô sÖ–ŠBidb²ï#¶F6š¤ÙÁ Vu×-¸õª§š|[„ªQ¶¶xn˜¯J´Iœ^k‰¯.:†ÿä„às\ÝÚG‘Γ\„Ò›‰ÚCО «6çEJ¤î«dZ•Þi“`ä÷­[1Ùcag'êwœ*#r=kGL½Y ·sÉåio®a·ÌpçëÂkgÂßò‹Ýoå^¯mªô×n=rÓÎxâEÖlTNä)¬ë¡òîÏ™$…[ þµNáòŒÇ’+=%*ü÷«@šè´›ûÛ¸hODnqô­©'71îÝ×°í\ŸˆïAe²Œúò»HÜW¢±`9p? œX¸+i^3l™Æêh‘XpÀÓ%9<µk6Ø ç¡§4äñPZk\:Œ¡*ãEQº–MŸ;ÏÔ“Íp¿àÜÂI¸ÿÈצ¼×Üz¾õ£nã ­¸uÁ¦n ÷Î*9.©Ç½5Fy'š²#8¦ùX9Å ¬$R¹ÎxÅt1ÆÁ~7ãœS¼ØÓýkµ‘y­éð¶Ø·Ìîë\ííßÚï¼ÿ-cvà¯<ª–Çžz ÍîSU£Œ³(qÁíDñí`ª0+gO­„RF¼~µÝYÈ$¶ ¼« ŠVƒœ £<¡¾TOÄÕC’IªÎœ“Þ™mj•Ô5G2Ÿ,ëMU$ŒÔ¾VA¦‚áºqRw—Þ–“Ò “b¡Ë ιv´°õ=«Iœ¯AQʹˆŒã8ØFܾMX¹‰!D(0:Tö³–S¸8­UY¢“plZÏÔì-ç&xóì~aÔzÏŠ…åãÖ­#ásR­Æ9ªšŒÞj ô5FUÙ[¡«<Á:HåÚÄzÔÀûÓÔdõ¦JÁ[^[q9ó°ÃŒóÊÛ𤩈!w`«µ†OÒ½8\(‚ ûTÑܬsFýó€+Eeàš{ªÈ‡wàj›Saå‰Õi5“‚±—ÿx×ã½gí÷ o,qÄj$cÜÖ¯„¼ZånbÔdšW._9À#ç·ÛÉâv`¹`pÓRD^S—bßSš¡ªÂ…oñYŽÛ†ÜgëU.ÕM€8梌‚¤¼)¯Ã)µ<¨¡·zÓ£Õ#‡ä9u ÞÓ|AökUHÔ0bØw­ÙŸÌĈxÆEU’}¿{Š®òÓšˆ‚Üš@¼æ—vÇj@ RœšNhϧš ôªÒ"ùdm=ëëxr¤ð gÈ2ôø‘Iù¹ïR!JeþM™+Á³ ¼’$  nMuV×i}l®pËèj ”u?­1^1Ç Œô5Ÿ) Ä)úT !ÅFçxÍ ‰{zÓ×r85pzñS@|ÁŽõs5úU'rïšHÜÆùç­yí[Óo“è•v6—2C7¾•« ÃË,39ÆÖl×M#Y7ZÃÁ'–T´©jõ¼âxÕ—FTúŠmØÍ¹>•ÌêzŠCo#)k‚RX–=O5«áà_VX:síÍzLPDѨ ^†­ÛÞ-¼‹o¸}¢n#R{¦ªêº}ôYžóS«`|¹É%·ï°:‚qW¬.D‘2ç=úŠ­®_ÅmiÃM0ÊcøG­fi†"pf‹¸'‘ô®–CÑ "`Tʳ〴ì kFÝ# ‘Þ¶­.gTXÔ’3ßҮʾ`ªgrä ‘7cæ§QMfÇ‹œRŒÐÃw€mëH² ì <ô£µ0®5“©[–pè3‘Î+æ)Úß•*neM3ÌMØAõ5,…^ÝÔ°äzÖJÂ3Îjܽ¬âHÏûÃÔVÅÔ‚}5¤„ç8úŽzUK;fÀ2ž¼ã½?Q€*¬‘€CT¢ŠIˆÚ=MhÇb‘Ž~fõ5VHp梔„‰Ž1U6<ƒ*½Y‰ I-ßÒ4ÊbžMT5,K¼óÒ¼ò´´ß«F¤g†þUÜGk»Å=€BíÒ¬6¡y(ÌP ¦ÛYÏwr ²)NO¿µm‘µ8ví\®©âV¹g¶·#+1êkšÕ.¿Ðü°ysY‘ŒŠ³g1¶Ô-ä^ ¸çë^™at¦Þ}ð?:ÔŽÞ9HÀ ±Ã÷j+†A¶S†­dëºM®¥lÒ¡Ì9ÈèßZá®`ŸMve{d g¡2¾XçÓØUë]©*î<ÍmKqŸœòSÿ~™µ-ö£F¥!-Ž;ýkª·ojÖ²á·Õ¡îlb™2¯˜#=Å2Š*µÃ”eô'>xêBy¦òM1"#’y5!;TŸJ·®qŠd­Ud|ÐU9]_䊯+~徕Î_È#‘Îãü"£†Va×'Þ­ÄCELU-×°%¼ÌŠÈ¼)ê*Ü2:Óoõ(í•#h÷‰8íI¥\Cu>ÄÈ+ÎíZòGÎGNµM‘¸#&©_F¨O99ª¤¥W¥@û‘°Æ£.sÚ›æ6jÜ(àkÎëcà _]ˆü-ü«Ò-¡ÄlÇ©ªÓÁ¸ûšrÛáUjü$[G~´ñ!ï\ψ4¸ÌÍwuûàÖ¹©,åÔ#°©“@‘NVUaéÒ´mtH+<,ì9ç¦k¥‚Ý7©)þím@pŸ7­JÒ&TLÕ^éaÓ€ä áµ›µ$cÌ$§ðö¬¨Õ·|½jõ­¸’TV-’ÀV©ÒøltÞžÕMø{3C5â]šËnC¯jØŠÞX” @Ü8$t5r,ªqRÅ) Ü £Ì%°ªI&¤ÏÍ´õ¥Í%5¢W#¾iØ¥¤àÒ7c4êk}ÓUK°ã8Ç¥7Î'‚Aª÷aC >ø¬Ç—aÁqY—ú®Ä0ÅÌ„r{ Ç^X³rOzš0Cdu­™Bg¿¥L©¹·Å)B[jŽ”èØ©ÁªwdÍ;7aÀ«ZEݶœÒ4èÙl Ê: Ý[û+ˆ‰‚áI#Uü£Q¼Y8#8¨šôªwQRÉÕ{V;Ý*ÊS;ŠÝÓlbš¹fW'¢ŽÕ{`2£ä•»áˆ¢ÉÀØÿú ¯A7‰Ú$B=3Tnu[h›ƒ?÷}*HuD•ö˜ÔUå•:ƒŽÜÔ„šŠQ•?(>ƹk›=—M´c Å=|Þ0I?¥mY³mËnnæ´–Uwç,Sc89¥•÷·§SX>'¼1hÙÈÉ‘G_­p­v[$žiÑÞ c 0­.ì¾§l›2(ýkÐl-Šç>¿ZétÕ–{+ø£MÒ•‚éL.Ò­iÑ;Í*Ë*”<²ûгml°±8É‹È77šUCzq8¤1JE-4œT2$Ô«÷W¿ãÍU•F~¦ªÊË (É%©<Ðj­ôiu–X©þòõÍÜh×ùeýêuÈÕQ î1S½»À<¡èjHúäñíW!&F :w­T òã8Áª’€›jÎ’U^“T]Ùßç5=²…“wzèty“dç&·E ù‰«ÉbŽÀ2qÅPÕ L³’`æ=É®$)bXŽO5¯¥»®B1sÅt–I%ÛeÀ'«Ç«CFC&§¨É ÿ*ë^ÎužÒ!•ŠiV9dO¼€œq]uçÃ:Õ‰K볎~r¤ÿ*«iáE2±Žè„gpëWæÓHrãôÅWr€íÞ0Š¥sf%ŸpÍR¸TK¥….Þ¸æ¯ÁoÜ~¦®´1Œ1ô¤HÀ$dóZÚNŠofYfù ÉûÞÔÏøFÞò aŒ¼d䯬ASëô®I~BNdÙ¼Äÿ?ëV`ðFæl[yîd=•Û¡­;/†qý¥g @¹Yäf#ðÏó®‚ëNK b…dß•êF2GZÔÐ"òîöeô­{‹ˆÑqéֹǓ̕²sƒÒ§†9&ÀQWSM`yïŽÕ7ö{6C0EaÝéFÚl3½GU¡ˆ? ôõ¦Ì‘…]¼T%”px¡99íJÃ"˜aÝÔÓ¶ ŒR‘•÷ªÒæJϺ;§,:/U¦Úýj>[¯$Õ€ûW$ñÞ±æ¸2Îí±J“€¤v«aÀÞÀ^Õö›NèNWû¾•r„Q~cÖœ¡š@­C¨#ìÚ î>•“,ÌÙþ¢™4$üÀt©-“<þ•ÑÚÙ„„0{z×CjÞeˆÈù ÕYI÷)Á«ñ&¦o®ÖÝxH¹nzµf*üµ­¡ª N$•r’ü§ëÚ½ÎÉCd•==kçzÛðšyž …Ùoå^§§Z¯Ûmè#xàzëuŒ©>•‰§±ûLêqÊÔWãrzšçî#ó'ER7ŠUܹÚÇ#µMÀ`Þ ìiñØDóòrN*fEBW1-´BYFó…ïï]E¤ÊaH•~±uut"a…ʃ¿Ö·mõD’Ø…\Jx5$,¢`Ý»ÖíºmÁ j[s‘RìïYZİ<[- èà®nà`ƒÍA"ýª-»ÇÍÖœ‹µqKœSw{QÏ­1Ÿ¶i’6È™ÏE®VPG$‹6r䕪\^È_qàöÇ¥:ÖéDŸ8ö­™%ˆˆØÕ3ÓÓŸJš$n€sS‚rÜš-Ò®D‘ÁK«; ŸojbÃçÊ>穳éÛÁÜ É–†B޼Ö˜ˆ‘‘]«ißµ´ù JñŒ3øÒ^.å`8È®÷DžѼÐNrzÔöZ\"$ûgF®ÊÊÂÞ݆ ld×Ol¨–àcžÿZùŠºoˆÏ‹mÄ‹¹v>ï“^Ëkd£Q·d9@Ù÷­½FÜ\DËœp}ëÚÅmY›t¤@èTÔ—rušÄ†hÃ2áKûØéL»\)ǧçRéÖ$ÚÆÌÏ'5£€ƒ 1Š‚X÷>sÖ¸ÛßÏcªÝ@-cšÜ¢œ•翦ÞF Ž¡³Sê*À­Ü'÷Ñœ²â^õ¸7JÅ_ͽ7ÆÄ©aê¼Öz7;yÈæ®[¢²qqб(ÄVœD,;=«sEºæÝ̼¯¸­cuomqm óà(þ´—rÈIÐVDÎrx¬ë TG_z¦¹?/­&1ÖƒIŠa”ë[TžQ3ýÀxêkTÛC7ßEcëÞ–;U‰Ô«£µ[Y¶“Å|×]/€ÿäkƒýÇÿÐM{¥âÛ]ÆdÉE9&´fÖm$~¿Xº—ˆtí?æšáAÇ Üשx„곤0Ê ?"ž–ÉZ<£0!ºÛ¶Höü°îjÀ™UBŽi Éâ¨ÝM²V9ù@®*ÓD¾Ö.[ÈØîf<y<×ZÑ-b‰† hL VEÒnÏ­ix=dR™òÅBc8Ü£«+s“Þ³•ÄÓ€AçúT v?6Hª³43e‰8ïŽk†Ô§‘$ia•ÕC|Ç¥mÚ]?Øbw‚PIªw­ÂäÃtÜqÁªúGˆ5eñ š-ô»^PÏQ^‘ÉI–F'!É5Ó]ê3¦Hά‰u c¤±úU¸  Ö¢VÚxÇ4(¤n•RF/ÅW•~\b³.b*¤¨¬¸´Ç'Ì›Œÿ M%¸Q±ŸjDðõõúH`„¶ÀY°8±ÒI6ê N0˜ÛÁýiÆlÖÞ‘p·Ù†å8Á­IãÄN=…f°ëUVP'ÖšesSÇ ’,ÉúU›Xc$Œzè- ·«R{ŠMFÊ(àC`6îqÞªÚż„#žõ{*€*ŒNŽvàUp¬vž C9-Ò¾|®—Àò5Ûÿ¸ÿú ¯Y˜j£:©ÇSë\gŒtñ1Œ/ (õµ‘¡B×Wyˆ4¯$žƒ½v6ö Y76 «êÊxª_áÜ$lÈ#PG Ró†òÙàô­Ý=R45 ¾€`Vv½n±\ù¸ù%çèkš¹·²ŽõgJy,”8gëî+ ¶Ô@pçÚ«êÒLjæFÈn{ÖZÜ3·È }*×Ùe¸ˆ©qáŒõ"¸½vÎïOsËû£÷]G UšY7òôªÖròÆOÞ…\вÞ'±gçÏä+ÓñëMÚ´¼ p4¾•&ÜŒŠtq‚~qÅHС—jŽ1QÏmåË’;ŠÍœl|ö<ÔjUùªº‚âRj`i0Ï1Öµ¬tÈäa»åNç¹®ÓLÛB±ÂŠ©è_­y—Ž´a¤k"X—×@ºcøH<¯áÁúæâ¶¸¸?"zž^JDBó¾ïaÒ’VÖE(ƒ ô·Á»¶ó •à Õ+¬Ç¾k,I«Ê«ØV¥µÇîÇ5b41Nr:ó[{r }*Æ ÀG=IªÑ0ä÷¥Î)À`çÖŒsšRÄ®+À+¤ð+¬~*˜àlý×­‡I…`ßCY÷8‚)%n‚y¬5F¥z°òÉ’ùþïzÀ»Ñ¥Ðuù—ê+‰›r¾Ò8íR#‚\·ù›tÛG( '̹(°R?v@éPÈ3Óâ¹?ëðý‚8·˾?AXrÍÄzVhGtž3ƒô5¯á°_Åv`z±ÿÇMzv=i8Ñó p¥Á54i»’zTùÉàU¶¶Û°Ž¤je³iþñ½ËW=«[5µÁˆ0x¿…Å2ÎÞI~TSÉ8«ÆÂkÆuæ•4ûGO•HÇ^j)öFÛ†qô­ëgeǦ*]RÎÛYÓÚÚhÃH>hÜŽQ½EpsØ Y w)Á±µ)ŠÊ!Z¨PíÉ×EiKû†y5CTÞЈG˜Å†BúVAsß·”{ì8¨üìVµÊEÞ¹µƒ-²ÊH»—9æ®é°Gicø@ì|U©ím¦Vr¡Xñ\ûBÈY“Ÿjɳ·»û®Sjç9ƒ]$<¯)íp Ácè+šÕK˶s´1JçæÒ¥æ²îlñÍW’Ý×–Fø«ém㨩¡·cÃÔÔ²~èc¯=ê'Fi#Sïj£[éHÁäH”ƒWåPë:…µä¤E‹¡êGük6 w¸p€ã#“é[:fžð$Ÿ89n¸­aò¯\šž6;qŒR‘ÜÒX:SƼ¶¼+ÿ!øÝoå^‡Ú…êiÖòO­lI÷DÕŸv¨Üõ¨¿êÇûµq:þ ºÿTÕ›ÿ,ÇÖ’ù÷d'Þ©…wZ/ü-ÿà_ú«=¿ÌÖÿÕEø×>?ÖIøU [þ=ëX)Ô×y£È ËýÓüÍ^Ò–>†¬Ûÿ­ZкÿTú¤½k¥‹ýJº+RøõO¥:ûï'û•ÏIþ°Ô–ŸêSñ«¨¥c¿Ý¨ï¥Om×ð¢oº~•…uÿŸ…Tãÿz”v«×ßê­ÿÝÊ«KÑ~•Rëïþ¢›þ=é\ãÿJÿ¥héÝZº oø÷?Zpû¬§AJz#èhþ*ÿÙnip2-8.7.0/share/nip2/data/examples/2_point_mosaic/example_im_04.jpg0000644000175000017500000007014313224651032022055 00000000000000ÿØÿàJFIFÿÛC    $.' ",#(7),01444'9=82<.342ÿÀ ÿÌÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÚ?–î!å“Ðf¹»Ü»|¼\î¥7Ïä©é÷©¶'b°ÍYó2zÔ¡9IÏkJóU’X48ùfÁmqrO•ŒÉ&¬¶‰,¸2ÝQÕPqùÕ¸tÛh7Hçݱü«SOš8dò€ ÇãWeM¹â³çmªIíXrÞíb ÝŸJT¼6¤Œ­éšÐ†îu@<ÃÓ½67(üµ3Übl઒kŸ·ÔîÃgÍ$z×µÕX7ÏçÐâµâ˜J •+õ©Aph$Іd¤’Aõµ¼ó6V¹ô­tD†=‹“êOz¹§KA2@«w·«o=d'åö¦iº´€îX°ìþ•±=ß‘hÓ"‡ÇlÖÚÌògj¢ŠÌ’þè³4àöª0g;™‰>¦“m< )œ©à('O3;3Î:â½I‰ŽÔo…†Aþ5º‘,K—#uR¼\·›Ã¾õÅë1yÒ´¼ƒßÞ°‰Pçïç\ÓH¦yjqÍ8¤\Ò4˜`ZplÒ>àÀŵÞA¾™b-­—b‡¹>õ±fääÒL8úV¥¤OrwC´êkTðí͹º—ËòòÊÜæ°JškT$¶î 9I#‘Ø àdÕgc’Ì*h›p>h®WâÿŠkþÛ§õ¯+¢Š+Ýò9G–Nù×-â‰f¾òJ²ÇLާ֩[ÂŽaZAp²-á#Ï¥6âà¶iœŒqTì3í#!8À(†O.EÅXyI=j6lÓpØÈ5 ޲·aœVvw1cÞ¥HïLFdn U7/$„HìØ=ÍO ¸b=;ÖÜ,±"¢ðAZ6óñÖ¤håYãÂʽÚp€G®Š -–Ö)7²†!»TR¤‘œ2‘ïM‹|²c'L‘X±éÖ¢#æ¤n´Ðû¹ŠCtËò¯™•rI$Qx5=!8¥¤ö¢§Óâ3ê6ñ~@?Zõ›†Ù÷x Ò¢’ç}¸sÔqK ‹",Š$SžÏEcøs¡íÇWÀH˜?-R”+SæçÓŽ{RžžôÇOÝœŒñP©#ŽÔá&NpW`rk›ñóîðÏOùlŸÖ¼¶Š(¯i’FÏåU¯XO•"†¡Ç5œ–%b/#=( ´`õ OÏ=ª;‰ËÂËžÕ· ­ž•n7 ÅOÇl7Ò¥Iz‘XŒTŽvFj¯›ƒ“ÈéD–ѿ̼éTÝŒO¥0º»nö£ì®Ï»n¹ÍZk‚?qg ‚éš·ÇZ1¹UÜM\ÑåþÒÕ¢µäÎsôä×}#b©ÊàðzUdD]ì8'ÒªÏ0]Ë×5P>î@¥ëɨØí$*7ˆ±È©ëN:šÍ‚­šGZRÀVÇ…n|CoŽvÿ•z ÓeðzUv†yª!䎵fÞÕíІ`Tò1Ú¬®« "“·Ò±üWû­(0Œº—ç«Î$%rTpj£îN9¤ïG Š:ŠnÁJÒ¡Ædˆ—æ“K©F$°!€)üUæ—Öè— rZ<õÇJÈ“Î*3M?{4þ=hÍF*?/ƒ\ÇÆ<3ÿmÓúוÑEè´r+¡*Ñ[M8¾ÓŸŒ0>µ²G‚Çs~•fö:ß*>eç²âäêvúÖ¬V‰Œ/ÌyÜzÕ{˜Fü⫲•ÕH+J잦¥Š8á$¶×nÙ§‹œǵWvÜÄžæš:â­,jT´ÿ²±NO¡§ÇhàþñJzÖ³Ä©ä¶ ^GÒ¯$ °p|UÄ\c­!™BË6=E7ûÑòP2c‘[¬-íÖ@zÅ$ξµNg$b©HHõ¨³IÞõÅô4½©§œŠd;²wv©i¬Ç4§åZži@$ô&º=?­/—=ä¡Á#9b>½«±ÓþÅd¢+{u¶z“õ5z;}³>áæ­ãŠ¯";6CqéD0•$¼‡éRÊ|Ä1ŸºF1\»²ˆÅÆãúW(Ê:ŠoQLdŒž(TÇ~)Àb–ŒÓ2Aæ¹_ʧåÉó“ú×—QEèäªçŒ±îibvе cšn¡¨Ék~N7±ïéUôëóu|´X,z¯A޵Ò:µNV@ÅHõ$‡q&ªÊÇiªñº«‘DÓîWÞ®iÚ‰·” ÷ÍfÝ9¸ä<剪ßg\w¤ï•S`õ4»AëKÒ–›Ú˜çÉ¥ “‘RREP¹Å-!#5%´+%ÌHÜ+8󭟱ÇÉŸ›# žÕ–ì{Vç…mîæÖa’1ƧçqÓ•élƒvIé@œŸá›7ÚƒäDJçµXÞZ èXv#© ½YŽ•¿½ëPjº¾Ÿ¥@~Ñ"îaÄKË7á^k«êòßÈÛ#ò`'„qîkûRdg擵(¥¥Å&+–ø€1á“ÿ]ÓúוQEê–«¤pÆ ‘YØdóÒ£òŒòê{Rͧ†0õÆ dÏo%´ƒ+òž¨Dh¤œrkcO}°“Øž+Z0Ëûþ•¥rA\õ®G]Ò^òQ2I†Q€§¥bÁ§\¬„22¨ã8âº}I·T "‡óÏA]^,£ä ‹ÐŽkYööª¹âªJp¦¨¬dcߥ/J3ŠCGjÇJ;Ñš2:Ð}©¸"Œ1ÎqŠU@§Šu5Ûm01íHÎ@ç‚zQ,µf6òÝXv Ö£^,ç¡ÐÒXi²jWÞT(}]±÷kº´²zG¸eTîSëZ^lœn-“ëR’BçšD›w‚)í( «=É]¤zôªÚ„wé²›GÙ6Ü©ÆkÏ<™e•žffŸ˜±É©%³&.Ð ÌxOj©$$ÊpÔøË‡ŽôñIÞ—&Šå~ Ÿø¦ºÿËdþµåtQEzÄq–1‰Þp0(I~¤}*ëÜÆ«’k9îæGyÀÊ‘´€F>†ªórÃ=NÇåVí¼…#85 ’É€ f´þåTtÏlƒLp·2Ó©­[kX¢€Beþ.:ÓþÁ;£;t«1/•Üäõ5?• žj n`Ÿ¥VyÑ›ÔLÊEW*YÏ8ZŽWx—ò=jÈÎÑJ)®HR(!rzÔm.ÆäT"S$»K=ªÚœ g4´´QPÊݨˆñ’)Z<¾ìÔ°V?J½Q™¸}ëB=*â~mºÿ³šîô]6 :ÈBe<¼‡«¶êätôª·“˜Lx\“OŽf–õÅGÂGu«,xªòüÊFIëW#L"¹ÍkG݈Ôlå€ìjˆµó£HÆ}+–¾­eh‡š¥MíÒ…¡‡zhreÛŽ*S\§ÄÿÖé²Zòº(¢½¦h„qŒvœÂ«+ç>´0síO‰Õ² þ-½¼d•tü+zÎÒÜÆ«åÒ®>›kä»ðÀdrk&4ĘaZQD±.ü|ÄSÌ¥jÌw#`-Ngr Só97zÓ‹I=é¾ôPzcµD–üjjk SȤ\óC(=@5–³·Ÿj(§QFi3Séú\š­ËÇ…ع$ŒÕ¹ü1©[¡}ˆè9ù[š ÐKÂ9ÇrÞ]‘ä¨Ýœ‚EzF…t·º\sˆÂÁÀÆH⯻„8â…a(ÈíTµDØÒuÀ¥³bè[¥XŽ5X(¦qJêHÀªÒ|®©ûUȘAy ïR1Šöܨ ƒYbåT|ãµs~-Ò!Kò¾BH¾¾†¹8Òv¥S lnœ5;urÿ>ÿ¶éýkʨ¢ŠöO´‹»1 l½P¸%›8â³<ÜŠ–@y§i2…8§a™ÖNÍý+R× Ãõ¬ä W ç嬵ÚÄdS³dç4Ò¡…<ò1@;iäÒu½©h¤èii¥wRö RÓiݸ¤ê–è ¥’6ˆêW##5½á’± å$Ä-t¢à:•' Œæ5Ö×,‡;z¯Ò¢³ÒîõiÛÃòç—a€+¯Ó<inK³çÈ;º? è’ˆ<¥1Øv¨Þ5,N94©B[¹ªwÑÃ$‘ù˜8èjXÔ">èïL23·îþèêjTfȜIJ(Q-ºËÆÁ\t5R9-Ûp$žØ=ª õ5‚g õûÇÐWŸëúÌš½ñmÇÉLª/o¯ãY¥E/Ü$u¦Â‡nI56)H“Êøüá®?çºZòÊ(¢½šÒ ¶1€:óùšÏÕQ£³vÇRsâLu§‰±Þ´-&ýÞ}ë ÿÄ®ÚCÔŸÇÿÕWm6…õ­ˆû ‡#îÖ\cõ2椗4£ŒÛFM5 g-Òž4mç4´Rb–Š<½ýzzRˆ è@§˜ñŒóZ¶v\Äp€0ïïW"ÓÚ7—åõǡ׬ößU¨´Õòì€<$šÚÓávÛûѵŽ0kVM& §ˆËr3[V¶ËAQ@°«‘€AéR¢Œ2tÒ x<¬rHõ¦8ãÚ¨=¿Ÿ2Ž€h¹‚Uˆ$M•'œõÅ-ºa#*­Ö®B29©¦È1$㎦¸Ü"ܪ[ʬ$\>ÓÓ«‘eÚô‡‘QíàƒMŽ*QœRÒé\¯Ä ÿÛtþµåtQE{ ó ¼3coÒ–(ÚN5#ÚA´‰ ŒŸ÷ET}&Ælíƒiÿd‘Uÿ°­Ø|’ËãšÑ¼òáÑßϑӻ‘\â\ÜcY?5zÑ/Òy)B ÁsŠß„0_˜b§†þjSσƒÉ¤\±$ð*J)Ž¥†)›_È©GJ3KFhü)qMµaÉŽûÓ`Ÿ2ëÆjÒÌ å*Éà¨9öª÷„ªUxô¦ÀTÅæíÆGz«#彩ˀ=zaažiñ\yDäd'¼uMË…É®{SñqÄñ.g,0Fx®išN½}=*¤’9æÒŒúÒm掦—8â–¹_ˆ?ò,ÿÛtþµåTQE}s£YE¥G*««í^7qúÖ;¢¢ü  ͸¼ )@GRGvŠ,Þ°îodº €N9ª« a’y­ :ÔJ ‡î©ãë[ò„”î®fRÊ8«ÆƒOÏjB9ÍàR–Ú9¥”u « drÆÒ}ÑšˆÞÁã­M yÓ$[‚ï8»WQeáhdŽO6Vy@ùvœ Ç»Òä·”ª©ÊœS-–ø%³Ï ¯u¦Mϰíþ,v¡ô»¨-çìòXpÀf·´Û=´ ²çšÛ¶ÒÄ æLß°êkíà`b¢’”ìG9⢺ÓÒæÆ[vf ëŒúVü!èW1ÞH­Û+‘O¶ðä¶“G8»,Q³°§_Öºk)a\~µ5ØÿD~qŒDz’鯘í .˜uçµjXŒôü*{GU,Ì@8ëJîn[ÊsO”mcÚ ’,#:®p:Vj4—2ÛÔÐv§ÅÎó¼…@xõ4û‰Ý3‚IéXZ¥éhrìpx +œ¸pF[ øÖ<åYÉB}ê­œ{SÆhÆi 4°Î æž:W-ñþEŸûnŸÖ¼ªŠ(¯¥õYÒ;EC…PzJäo¯<„y (®l]‚Å™¹'&•ïW ýjœ’y’Æ)zVÍ„›-‚ûš¿ ‚Ä€3ZÐň¹î3NŽ@\ÇÏêZkr8¥HYƒÑ›'hÎ)»I9îjާ˜[ wã õ=µ«¼œ©ãµhÿgî?¼)=(6fPª ~´ù´È|ß$ïqP¦‡¬;†³‘ u6ÑHÖH^2N`Õgˆ,A}ÑUÖLœÔ«(2¤:а§&ž÷r=éÅF$½*0àÈWpÏ¥Ew–2U®KV,e}ÔÏÝ!c»“ŸZ¢Ëµ©¼ Z) æ£hÃ6êp+•ø‚âšÿ¶éýkÊ袊÷Ý}ÄåFâ çn+‰ÖîHÑ0YTòEc#ƒÖ¥GÝR=GJT“kUø'Î+wH·2þùÇÈ:{ÖÕ7hœsN<Ž)À®ßÁð-¥›Ü8çõì½…k^è:V¥–hD2Ÿã‹ƒøúÖ3x2âÖO6Þ_=@84øí<°RD(þãe4Öx^¡OÖ®CeÐãf`EC&š"1°¬D³5jªIêµt°ÁödA÷›¹§Ý‚bß4šlŽÎÉ(ÃzVšÂnô¡£ ÀúR²àqÞÀ¤Ï RíPIÅWºÈˆ…\ç¿¥T´³ÞÛ˜ŸÆµ¢AqSàcƒHÀàŠÍžyL¾LhqÝ©-ƒ$óQ¦l㫪2:Ô”Öj‰¥'‘a# ¿®k*PÇ©µœ¿ÄÅU¿•gëFÞÙÜÈê3Î3ÍqW’¼¬±®ÔÔ,ÄóQòM)|ß&ž=¨ëF8¤7"¹?Ÿø§ˆÿ¦Éýk˨¢Š÷é#rå‡È¿­`k6Æo$|½Hô®jH„¯·ž”dñµ³íR¢m‹¯z¼4uf’ÄvËÀÕ[; ‰oE³!R9o¥wD …#Q€¢¥¤4v§A–eCÆMv׊ˆ¨¼«è Éö®ŽÍq-Ç“QßÃæBT"’OŠ®=1Št(JªÒ¥–È9R#­(àéžæ˜mÕˆ9⣖ÝE>ÖÕcž¬jØ\ RíLc£aéÖ‘žM+†ö¦ª’sOòðÙ¤Í(<ÓÅ1ã Àã‘ÐÓ^%8ëTeM²®Õåšù5‘®[ØJ#bZB7mª‹øŒÎsxÿxÖ­xÏsæ«áÈàŽÆ±f•äb]Ù˜õ$Õ_'­H«…Áæ®zÒl §œÓºS¨¤ÍFc>fð æ<~?âšÉëç§õ¯,¢Š+é³…P p+ […¢unÌ+›’Ø$†PÒ‘pçF}*[xÂN¤ Áà‚+j8‚€`˜«1F2[8ÆqV~´™æ–•»vêj{gH¤;ûôÅiA*—ì‘]M„Þc&Ô :ô®Š òr)Ò̬1‚MB$qÉ«Q AŽ3L¸•—å^=j‹±-Ÿ­=$8È?M¸°RF­JõVYekä†<ª–j¸»‡z'’*20¤â£vðM>GýàL{š\í¥Îidâžgæœ öýhŒïR­@Ж¸Qü#“V€ö¨æL®Gj¦5æZ”ò6«rÎIo0þ°¨b¸`øÍ%ÔÙ8äU5mÃ'­:ŠCE!é3Å6'.[#ŒñO9¥®Oâ 'øì&Oë^[EWÔ~H=«/Ä„X ä£W)‘O‡6‚Ió“·Ö¼¾Š(¯¤Î«s ýÜi×&©Ü Ë¥+5É)Ý@Àý*Œ¶Ár3ž*‚E’8­†Á§wéN4ž)KšAýjå©+ qÔFEoErî2àd÷«÷©mr¸$‚psZB÷. ¶ o´Ä©Cü@ÔÌ€.1À¨•2Ý0*ÍÊ›œ œgÞ¬Å&~^¾´‹ĺ'?xš¹ˆã œã½L­JɸsÀ© ñQô¨ÉûS°^+-,Ý®K« rÄáZh*ô÷§;\œb£ViGȧß+‘» ¦gQÁIÔÇ’{а_c*¹·EÍXq°*+‡Ž2K HÇVc€+÷ÄhK ï/QøWºàÉ>öf''q¬®ô†ŠNü uE$*ýzÔŠ0ì) b€O^Ô Š†f Æy¦Ç8gØÝ{œœk•ñððŒä ~ù?­yeQ_FÚÃ&Ü0ù{žXöBíè+5ˆoÊ¡HÂtëK·"†$.GZ@N)Éö c¥-zU«gÚ‘íW¾Þ£ ‚*¼×jH`ù#ž+JÛQhåIöœu­{mQà˜L$.Ǫ稫öÚ´’NÆB Ÿà«UdDZ3œúÖ=ª\¤C;ÛŸ õ«pC&F_HÎ~fíR…U§o >QÍ@îÄç&­ï$;š‰¥ "Ÿ£ ‹Ën Ò"NÎÀ±{zÕ¥Œ€2Xäp:{ÔS³Z±g ,[SRsÔÂçæö‰%@Ö±¤Ñ®®ïÅ̳ùj>èSÎ*ýÌÂÊJ’Tgë\–µ¬&£fÖÒÚ°Éʶìà×4ò `gëTžá™vô ¤ïE-QQºî!4 ‚Hó!ɨÖ%ÝéV@&¹ xcŸùîŸÖ¼²Š(¯¤¼Ù¹ÆÐ=…5æ‘ò¤‚½ø¬ëÍѰ)À#Ò¡ŠFn¦¢˜ë•¡G˃֕Wm)84ÒØ”,ì¨@õëHœÌM<N·("œ·S0äÕÐiêR$üç’}ÍoBò©IPàŽÞµ¡okspß3·9=ªÃ ¤cŠ\óŽôìäR3ª¦\€=ê“_D\¬|úšÍ¿½>r+9·v§[¡F ržù­ûcˆ}jTaR‚ Q]ÊÑœƒY2ݹbÌ9&¯iú‘YBíéŠº× ¸%¹=©þj¿Ýæ–„ ŒaÆ)y-šËÕ´¯û8®jkQ´‚GJçõB¤éÞ±óÚŒæ“?6)h=) “ÔS©ŒÄ:TdµH™ÙÍ:šË’ .Á@\W/ñþEŸûnŸÖ¼ªŠ(¯£þÑ “4J’̼mSšI£šÕöÍRFFj­Ã" _¥:ŠLóŠ\QLfÅU˜±8<Dd0ç=þ•'ÝRh‘“KžiE_²Ô¥·•DŽL}Áæºý>ö„0ïŽÕµjÙÊõsT®ï¥…ÝЀ«ÜúV^,mÓF@‚¦·eñØÌ°J®ûsJÂmF[–ÜÎXžjÌ–Ï?Z–î!5¯©S‘Ii½Á#Úµ%½6Z|“œ|£¡îiÚnµô%£ûë÷“¸«fý"¼Š&S™RqV.ÆMc\õÀ£Op³QOÔoÒÕ¼Æ98ùSÔÒ6¿é¢XÛ÷Ïò„=A¤±¿#ÁSœõÓA"Ï•ÊÃ?J̾+ç6>f¬›¨E.TäzW1¬Dvyj: šæÉâ”)h¤4€Òž”ÑÁ4à1KIšZLÒÆq\¯Ë ò8ó“ú×–QEô/‚t2uk”ÚÄ+ëê~•Ø]ý–ê"“ƒŽÇ+”¿´ó’ #쩎)h§ym·v)„€)Tî©-Ë’(1ƃ!F}i¹j6R)¨ÓúQIÞ¥†ymä•aèk®Ò|]Õ‚ù|³ÓÍAÁúŠ‹Åœ>J[Zȯæ ÌÊz äóÆ*Í»,û»Ì¿tþ©Á¶ñŽùíM—_†Wa|ñÅKc¬Ø¹ÃɰÿµÚ¦ñÚMgoklâF™³…9Î+SIÓ¡Ò¬A‘ÔHß4ŽOéUïõ;5¿±1Ü#˜y‡<sŸÂ´ïuí-WwÛa#¶5‹ý½§Ë)Sp¹'ƒÚ¬}¢À•XôÇzƽ™Úg›#û Æž%ÜcvÁ­|EmQ$r(Ç'®«JñV–# ö°ƒ¿˜Åq—ž+Õ$º”Å:ªo8ÂŽ•MüE«8Úײsôªææird•Øž¤šˆŽ¾†…àbPÉ2¯õ‘\;RÇ4ªw.sC(aÇZ@øÀÏ5%%-7u.s\·ÄùOýwOë^UEW×{"¢*¤j0è ªZ¥ÌV¶L6ÏÂŽù®Q™ðAlÔ9ÉÆ)M9 –ù[@1íQ½·ñ)ãÓ$+WRdã®*ƒG#dm<R%³° ‚Xü·+œŽÆ¢'ŠQȤq•Å6=Üäçð©)¹ËRæƒO‰ü³ÓŠy¹qʵ 2Ê“™“Øäç4çbí“IœT‘\Ížd.Q‡p(’òâc™&‘Èõ&«–fq¹‰üiøõ :qW-5)­ïŒ ©õ=N+¸’82òùëô¬ÑHÀ7£ïLòÆìæ¤è)h4Ò¤ô8¨¤…O&ŸSN*jE@¿CNúSv ÛþÔƒëF¦•¥Q´W)ñÿÅ9úlŸÖ¼¶Š(¯¬ž`~ñ圊æî®ZòèÉü#…Õñ/x:ÕLPPŸºy÷¥³Á_έ¢²6ÖëVHéÅU“LáƒÛ=*ìSª/^qQ“#Ÿ˜Œg8ïCÈ#çvª9sÓŒÔ`KHzR(&IœÒ0Ȥ ŠPy¡—pÇJP´Æ'4…Å4psOeÜ8qHjWÏRiè¬Kg#‘Þ¨G÷‡àiæÙ›”ýjÕµ¡ 1ú –ëd2´oÇ&«‘Ž5™)in÷ «ÖÀ•ëŸÆ­ˆÛ®(’ÜÉú­f‚G¥4ÒŠBx¦†Å<ÒÑIÚS¨¤4ÅÏñÐA# c­8 Z)’Åbiàâš$`fš±ªœõ>´¹æ‚yÅ!l @ä…íIæ|ØÅ+Ç3œT÷±\(u½ NÅ*åC7Ažµ‡âÁ¡IB/:iYè¾µ§¦ê¶š¬[i8åÞ{™¤ÈÍE+`r*LëšUEPp1š¾W©qFx¥íM]ÀàþtâE0¹ÝCJŒ÷§+«t4 ÒÒæ¹Oˆ på²ZòÊ(¢¾°¸š;h‹Êp;Zæî&–ú|㎊¾•ÐB¬–ñ¡þšÌÊÃ)¬ÝéÀ¦^ÇçXJ½H‡á\ÏQV-í%˜o BŽõÒX –Ød`¯5¡¨ÁkŽ&W˜ÿwøk–æFïUó“Mcž(ßµ‚óšŽFnv€=ÍaÜ™å8y°«÷<ä¨À©’á¤o˜þ+ÞCm·Íp7sVâ™dLÇ¡§»Ž‚«¤b)~RjÒHƒÖ‰¥G¼óOWVPý'ò¨K¬nAÚ£iwHqÞ¬rÑqP;Îá´ŽjºÛª)fà’kÎuív[Ý\Í ÌÛåbÁÇãYR^Oz×NÒHØZèt­ð²Ë•aé]ÖªÑVq‡ÇÞìkH‘ŒçŠ­-£c5œóì“$îäV½´‹,*ËÓ+t¤T9f`0zPqŽÔdSN—x<ÍG¸#<ŽÕÅÜVÿxåÈû¢©›Ã! úTÉr‹÷Îßz°×+@CƒššVt ½ bk:š…¬rr>ñ‚}+ñ+NºnÆv1—ú×!EWÑדÍupD§xUö¥‰ÁSƒØ×L–ìÉܳ3R˜ËØË“úÖdöÍnÄî,§ô¨|ÁÇ4=ý¼ |Çàs\ÄîW)÷I8Ïjè¬õ o°¡‘•YF Š‚çTiU£·RŠz’zÖs…XLÆ:ŸzÏ[ÈÙ¶¿Ê “ަž:zÒ`)ÉëHìÀn^ÝhI"—;:€zVlÑ•‰5JeT“#£sJXß“Yè~ݬÄí÷C`g°®ª(Ö2pF½$«#8*pëR"ç’95 eI‹ gÖ£¼¸ CM·rWæ­,œrj'”³á—z{Õ-KY±Ó /s*†þ±5Äj¾-Ô55ò-‰¶·!h y1!Çœž ÏÄox­mu$q» ¦Ì€i‘ÜKo&øœ«×ëZ:?ˆmõhY'„ÏSò¾;ð®fÿZšm\M ¸¶ŒíUÇÞ_ZÛóŒ‡*ã Õ`›'¥U¸šfl$Žé´‘Z]½íÆé ÌþZFóÖ´÷±Ë+œv5 ’1̬N{ýjk)…Ò²9ù× õq•°½ªÞb…|É(îZ¹xšX#°O¼?דÆ}ÿ⥺œË<#“Éc“Zv°FØÃ`ûÔ«ª7PÂÄIŒ‚MS¾–kûé/fˇ=GaéUe·xòÉÏpjkY<§ƒÈ®ÃA»²ß¶IR9[î«W_»¨ãä}*ž¯rRݶöéõ®L]9|dœÓn‰0œ·\U­ËP[›[ø Ý ~X0û¹Áã?Zïáä“‘Å q™ &ÒÍ“ÏZ§w Qæ‡Á^y§ïó #d¸=ëŸ×$H¬äó Éû¸¯8’'”·™óZžÚÚþ „Œº7]§?¥tšu‹ÚÆ%œ5ºü5m§`8j¥y©Çgy\çøW¹¬ÛoͲfƒ*ä`‚~í`AûÉ€Xž¤ö­èÌB0ÜU}V˜ÀôÞ+Ÿ¢Š+èfl´sëZZdko*ÜH¡Û=jëEìW0åoºzŠ¥<ѲÌAíŠÆ‘d–@¡±žæ©jpmØA$ f²‘ȤÅ9G9«*Ü{Rd´«õ«¹XÎÞ¸®oT‘¢C–5Ê^Ü»ñX“Ú™®”$x#Ý1[ÖÖwÄ%¼LÀ. ž?Z©yá«­!`ë.õ$”»åT|‰wä®ßlVΖ²2ù$ÝjüöNÀÀ¤ƒJyœ*.2zžÕÖG¦¥ˆ…8ŸSTÚÔv‹zzv§Ê:Ö4Úö\ñÎØ6õéu/C”Ó¡ÞÿóÒNƒè+"ÃX¾Ô'´»Ê!Aì*åõºÞZº‘– õÁ¬H,åG_27@àífRúf´ µ!€#­a^ø™Îð¶*X¯¥µ—+©ìE"\\´¡{AP¼„6Ñ×=io`Ìsßšé4¯jpy¦X1€’d•úÕ£>½ý£4ab( r ïëT'âàùgq=BÕˆídÛ—ÏA]^ŠBXÃ?ÌÖä#M#1'¨ê»ÖÉ€$jÈÐnJÝ=”‡*ü¦{ÔÕ´ØžÙ‘³²ý×û¦¼âãI¸±œ™a!{Ð}¥nh¨7e‘¡ÇШRüïšáµm^;i¤ µ¥$áGE®vVšâC,ä–=Ïô¦H…@ðjÅ…Ä6ÎVUÆz°®¯N.¥O/x¦x®ÓÈÑsŽ|ÅþµÃQEôLkÆHéÒ­E6Ó‚qVMÉR»[àÕ˜ËN»¿Zlƒiã­U½mñŠÎ’=Ѷ*°9¡_æT7ú‹ZΑ„Ug&¬Y^¥ÄˆÚþÝ hH2¤žÕÌ^È%g‘Ž$¥e澡!òÆ?xÖí¶‹gl º‰¾z´÷*˜EÀ¡½¶pnHä}k1lðèÔS–ÍmI’% qøV&±«jz~Ù#Ž)°2ÊÉþsO×59 Y/,`Œ0ʪ‚ó«¿ð–˜HI-w¡8$?OÒ¶íg´Ôc[ÈŽªxaøUNÖ8U¦l$aw1=¯"ÕuÔ5‘Aƒµªk-/Í $ç òZë´ Hšù#0«Däã¥u cl2‹o†êŽkDZÇ ‰|¥ ·Š«.…§OÈ„FÞ¨q\^§ðþgº–{ÈÛ{²A‚?åu->m=ÚÞáBË䚥ŠÔÓts©LFYWøŸ°®ªë@³ºÓ’ÚX¥‰~Gsïë\ƒÚMgrÐN…]9«1ÊJ~ïƒëSA#C*̇,#Öº{cÜK*t=½ i¾\‹’GLWA ·ÙÐ?ÞÇ5 @£Š§z„ÆF*–•¦ª]µÛ»ÂýjÍÛîb;ÕFŒ2md õ[Ë pœJ¡«Ý5®w(8m¥Wêx¯3Š2ò|ÝsW'ÄP '–5 Úñ€:г¢Cºí´S¢²;à†‚ë^k6måÃhÝö®*—Ž^á"þóÏLμ¶Š(¯¡Ê·ûV‡ØnAò±ŸZ–ÛLu#ÎÀ\óƒ[F¨±Ä˜^XyÉëéY÷0Ë!U‰K~íU’)£‘¢‘vpEVšÙ¢ùÆpi@ZpAëR_éQ]ÝÉÊ‚8¨-lRÎeuÝšf©¬[ÚE‚Ä–ãW>].ÌÝ•<éMŽüY8)Ðu½ÊÜÀ²FÙVç5ö”k¢ŒÀ|ÝÍi=Ô#î¶ï¥W7 ¸Â3ÍhlB£åm´÷¯<«¹×¢ž•=þ äxÀW ¸Ûí.heddÁû†ÆÚhn¼Ñ+!‚§¥â[‹«ÿ Ë[ »/ñOÎ¥ð¦—g¦hñ+ÛÆg•s+2‚yíVuXNÁí¢XŸ›`ãò©ìô¡fG“ó/~9­µÚ៨íV[I?w›srE³y$)õ5š‰Bw6ëšó=Zâkûû‰ú™$'­T¶ŠV˜.ÒrGA]†Lã>•§¦Ã«[vYÔ|þ>ÕÈ&±v‚d!ÔÔÑ©ÎGãWôëã§Ýy…Îz{×{gb5•X>FAŠÑ„4€Ÿáf¥1œõéLh„ƒT©n=£ ©$±`:U PƒU5Êx¾äǧCë+î?Aÿë®^wÀsÞ´ÖÊ)¢D е‡l®ØÒ@=wf·ô iöqÊw\HŒ »ö?JÔÖ1mv$äpk“ñeÇ›¢íÿ¦‹ýk…¢Š+èhþcµW'ØWOÈÈ ãŽõ'“•À95"&½ÎjG´’sÓÞŒp²¹Ë84ËÍk¹–DPF&²µO±Ü‹w!ˆ\œ{ÕíÖ9KƒÁè*i6”Àª7‰ µ,œ áqzê1 p1’sY³ß}ŽÕ0 <5‡s¨·™»q«Wˆe‚smæ’}ßcK> é31$¶rkNÃTÜç*sÞ§}W®×­k]^G³Ž@ü´çÖ’çZš+¤d`9âºKÈïíÄ©Áþ%ô4ùí£¹@²‘ÐúW?qh©pÌ08Ï­M )2”llaƒš’æ8íöm–'Ú­ØüçÀÇ5¡±–òÐ`zÐËÍFÀGï\~½r g‚0Á]»šåoo¤ŽÒ`[çÛ€Ozž‡šÛB“HðFŽ¡‡Ïž5z Kj»$¸F=ðµ(Òíc;YÛp<‘ÅkÛÙ¼Vê×crzÕwG´”+©èjJÖÞöÔ<¿+ºÝϵa»Å1Fœv'½R’IToeUQØ÷©ôßßý´Û¬ÿºòö"œŽEušFºÖ î%ÐòÁ_zìmn!½n pñ¸ü©çƒšá—=DÑ€˜¬Ë•!k–ñ-ûXéå¢b³>UqÚ¸+‹ëÍHÄ÷2(08ÅOm2ÄFêÖ¶º´fÃ8Qß#ŠÚÒí’ñÊÁ*Îè2UAZÁd·}’!FàúU­RÜÞéß/ßQ¹ÏÒ¸?@ÑèùcŸÞ/õ®2Š(¯¥âdAˆÀõ|\0UïÇ5z-Íð‘O†B‡.¼æµ¡+*éOdܼÔñõ­qšÜÏ>³>ÞˆvgéTÀÇ$äÓdo’­BŠö`°ûÞµæ~-¬uW>QaþŸ­r…Á–Ü€Ø æ±‘g¸“ËL¶:œñ]§"øß8îFqQ^DÑ^2°àšŠkôҫ ÇÛ’k«ðtðßCue1ÉHy¸­]GK’8Ãg!z5SÓõ¦Ó®ð;pÃ=Ev‹¨[\Y‹ˆåSàóÈ>ŸZ§(Šé@ ·*5Š+U2Ï"¢âcZ µÜ(„G¥&!û¶Ü=úÓ2àc :U¸ØH€‘ÈëQܾÈÈSS^]ã-] Õ™GÎåA€W+q¨5Ê Ã<×¹é}«Âú|Ýw@µ™v lÌxk—’í[q¯5©ev²XÆ{ŒŠ–FŽp#nA§\Ø,ñ¨¢©Æ}«Žñ-œºt©³~Æ9Wì}«ž½¿–á³mvïPéÓù7Ѿ3Úºo·ÆÖäö®§ÁŽn^ ÇiMØÏ®Ââ`«Ö–Î]ñ2žªj;‰˜dc¨¼ê«–è{× âȾ֢êÚæ9¢#bF‡G&¹Ü€+‚¸5b6\ŒàŠÔû *@ Ž+ªðM°·žêCÁÚëZŒ»õ3Üà-]µ“€+Šñ¤at–e?)•­yýQ_FDÁãò­+5.›˜1ÅjÁ#ìõP)ì¬NI'Ò´­­¼ˆ¹'{ŸAO’V0¨YéUï乡r¤Ÿq\ìªvnNy'½*Û,‹ž ŠK"ÊÿY‰ ·UÂ+–ñ­‚OcuáŽÂßÝô?μÛOðõýÌ‹p|˜‘»©÷Æ·4Ý 2|¤cˆdŒ–­ë}2 Wò!Œ.ñÔŽMrþ*Òn^æcÊH(ÛQ´ð6±yÌÍ ¿³6OéWm<iŒ/§šGÂÑÿꮃK°Ó,dÅ­²ÆÄcw$ŸÄÖÒ”e*T=ErÞ Ðev’êÃÏXñÓÜ…sþ¸—IÔw\ùžCäH¤´úãÖ´µHÙM2ÜF;K(Ë}@íZWHOíyäggÜÇ‘ƒÛò­ÕÕlt·a{swæä§Z¹¤ëöZÁ˜Z"",¸Ï¸«S¹'T t–ŠòÈ~Eo¥r÷šô·ŽH;ôP{W)âxVçÉ›d8ô¬[t9X×>ã5ìþ—í^´9û¹N=QñC-ž‘q1b6©â¼Ù¯6 *zÖŽ ‰hä·æ´t[“{}–苺º9$ÊcÒ¨ê‹iq§”éð¡FyÏJ¬ì=éáãHYs¸`×7yµUц±¬Ãpé)ˆ¦]^4LÜGŒÒ‹âêL;Bþf²5<Þ[É’K3ê+„ƒÅövÒ„S3©Á­ß}£T™­»·9àp¹é]=Þ—-´FYÙT ÝÇjÃ@]ˤÕë~1Ú¥¾ÒZòÔÏeÿÇ…rV÷.ö‚ =knÞBd®{ *å» Ä½²k©žVNO+Š¿hÄïDU”I¥Šî÷È-ÃÇu)‹-“Éõ5Ðø^ñ´ÝDár’.Ò+»[¨n"/†=׸®'ÅÞ!E”iðŸºs/=Oaþ}« ÝÄ(\Ÿ@j ë³,†<òí"²Ðùo†¯ZðÔgÃ.¬ê«§©ÇZ¥ãEƒT°ñjvв¾âÁÝíÁ¯4þÏ»24P˜î ò|¦ÏŽ*-óÚ“Ã$yìêG5Ùx9RKYg|åß Ïaÿ×ÍuÉQü©–Ås—»ÞB_ÿ­X×jŒ¥É=« 줎eÙ€ ‚ >õbûiÝ*OP=hÓïvÙËxpϽEôñ^#Ûî2ƒÀØ6£?’²o(Äe”6@®{TÔÖIÕŽ<ÓÔŽ3Tc]ˆ9 2iöŒÖºŠ¾Òco•ý…o‹#ç+…ʆ"ºôð~gw¦¤°Csˆâg {ÖäsÛÛ@ÙpI9Ú+"þýÝ™"Lddg­S‚щó.—æÎvçŠÉñüp8Uãó® Š(¯¢ac@¢´m¤ŽD$‘ê+¨Ñ%W´a‘ò·JÑI†þ£m `z¯Žj­äÞL[Ís·—+.N¥QA¹ŽzRµ—*XŒûU_±ÝÃ#$Xp¾ø&³ïžîÐy³ÛȈ3óÇç\ª[XÃ{uv¨îX7Aô¯Fð¥ìRi‘M ª´gc…­­jÆãS³ m“–ÏB=+:ͰÌêGÓšž TŠL°È=­#fQC*‡‰<·3hØIåL9‘á½þµ‘ ´–¬C»Ö­ ræC“ÏJa·Oîþ•Ëjzƒ_Êì›™ÎI xü*±Ñì¶à+øF4K@rAøÔKg$M Éç4Éî®cºŒÚ³^…OSZV^‚æëûKP‹±Üaå'Ôÿ…gøŸKsJÚ=±¶7¨ê+.a¹J Ÿ^â‘´K»âÆÆ&¸(¥™P|ÀV|&v•àÜñê¤çÓ¥iáÛ»ùyÄhz³.JìôZéñù¨Í,øÚdoO¥7SÙnÏ Ä®r‘ê3LÓ"c aó…£³ŒsT/mÉè;W)©/‘uƒHªn¾tDCTc¶¾œ•ŽÝØç‚¦¶Ñ.„ÿ4NÙþòÕ…¨E ´Å›n#¨‹ËxÁ- úS̉4‰$G#oSWaDrò}+Ç(«áÏ•@ýòÿZó:(¢¾ƒŒsÍ\¶` zßÐ&ÿK’>̿ʶF‡#h#=([ß7A8ëW<¥ÛŸjÌÔе´›{+’•Ÿ;M>Á<ù‚zž~•Óù0ÊY÷Ÿq¦H“a;ÇqÞ¹ŸˆßbðÄqgkÍ:Œ@ ?Ò¼¥õ«Õ린½Ñ®À@nã—÷™=Aèq^ˆp€‚8íTîeSnŒW'6èî_…ƒè+¤ÑlÏ8 õª¾+ñ® q ýÜ~¾çÚ¸­\šI@½²ÙŽžÕÛ¥²ÉüÄd Ͼš+)§‘GȽ1ßµxýÌ·)y%ÀrرôÍZ‡XÀY×cwaÒ¤:‚<€/Üõ«C]:*®üô­‹]: \HÊ­61ŸJ¶­½±Ú’ðDÐ0uWFe#ƒ\V¹á‹8vM§#$e£c•ü=+áÜÑÙ›¤aûöÇÌzãÒºm{MÑ®md¼–ÕØYa‰ô÷®rÂÀ䮆Þ3éÃ¥szí·úK;œeÇþƒIe>Uv­hìÞT,£¥FÐRæ±5--%ŒAœ Š£¦hS^@0¾\g–b:V´º=œÐ0 rÙçëV<=§-µÛLvå!~•³sldqXÚ\Ò8×äõÑ[iÖÑÙ ‚$‹åù‚ŽõŸu¦D2ÌI®föÙ ¸jµ®£]í­÷NÃG?Ò®ÿj¾­eó¾Éz¼r+—šæâ;Ö“Ç&žÓ+FI85-–°-ã*Ç;;V·ˆy6`!íÍAâÛ–›ÃØ'?½_ë\Q_@$¿¼iä⯈$ Zš1^FÊ2Àž+Rò{£‘ò¯ÐQb]\™•Ž{žÕ¨Ó²®w VUÕÓæbÀ„ñÍ\Óí|¤ßÑjE»<š›w9ÏJÉñ‡§ø†Ù-/á.YN Ÿc^M©|=M?Ux…óÏl½€Ã} wþ³°Ð®DvÖÞYºY™²O¦kÐge\‚9¬Ö“ÏÊ©#½WšØI²FQ‚çúÕÍW\µðƆŒì²Nˈã–oðåSÏu«ß½åã—‘Ïà ö«qmB]v…{$1“-àJ­âçyÑ#ƒî™Àïé^w¨ypïg ‘Ú«i:cj“””zŸSíQê:eÆ•79hÝqÐÿõêö‘y,®ˆNÒ9Zê„»£Þüc­6Kˆ €Êò£½A†öe`r¿7[PÃëT¬BØÝ¬ËÇ!½ëFEµ]{쀟*$'§Öº(¬‚€­mX‘Ò¹¿Ä!dÇü¶QÿŽš©£†¹U ‘Á$WOklëTî"Ä›ÔpjÔ"KOpxQžµ …V?-*Æ:V£ ,ëaµ†ãJ¿§£C„ ý*(íRiwKþ¬rG­·q5ä±F»bÏÊ*­äLÒ>2Ã5ÎßÛlvlrz×5t0NjŸ"W\ä7 Tw¦K‰¼ÂL ­)dˆü§?JÍx¦nv5@ÑÏnèI+“Æ ^¿Ôf›Lû3Ê÷¬Z(¢¾……ã¹HüjÚ»™­] ÷jq('Ô×MwiUjiWæ=½ë6éü‘ÇÞn•QNãûÁ})ŸdÝ€{Õ¸m_ ^2G«02+¸x±ëšƒP¼X‹È¤îq\«i3#.æ9äõ«p«–W‡ï) ;t®éŸÏµŽlcr‚~µ5Ô)! 2çÓ<Ö.·¯®—WA ù¡dìz{çÇê‘ÜÝ] JæU–Úaº)ü›}¦;Чm¨G1dF8ßë[VvâF^3¸àZì-ìÊD.j´ÞÄÁï\Š|:ðj àV‚kÇ»~úǨFŠ-K(pÛ˜:T±Cû B.:Š­3yy¨¬‹›³»æRîOm¬»@Ñ+ïNàõ9¾…càäãîÖx¶·FV'©­$‰a\)ÊÔª7 Ži[Pˆ`PÌ#Ú¡nW'¿ZÊÔd‰W>•Ç_…mçf1éXæ=®sÞ·¡Ó爑$`«U»©¨ÚNäŒç³R¾Fß­gj°¼p£žÍŒÖd²îŒ.j(¢½ù@QV`¼–Ü‚¬xé[úf³³Æ&‰#— Ú9ükµ–ßw¿qTµ ^Ú4* çŒšÈ’C+îs“LéïVKmŒx©>ÖÈ€mÅW—ÌcÇß=j¤Ö¢Ü¶?yïŸéXZ–|ÔA˜ÏãU’DÞ1ÏŠßµµXÀÇ>ôšÕÁK·ódË}д¡Ú,É!ù¼ÃÆjÍö‘c«ÀÖwŠâ?1ˆà¥aÿ²wZÁ¯Ü)e2=£ äãxéIwàÆ±¸Í¾>êÁ«úV˜ÖÓ¬³¯ïðöZêRH„`}߯zkÇÞŸˆ¬›ý9¥‰„ɘÜzWwa,Cp=­m+Oy(ÿô­©­‚ Põ¬«)îZ'`=ø¬YãKfÊF¡A㚆ì+˜¿¥2Ñ—,x­ëí|´Æäàâ«\® ª;ŠÊ rsÐVµ¼»0Ò~•»mq@ÎÁF?ЉîÄ̦Ǹ¬ÍFõ¢˜y‹»#’+Kø%‘ŠHó€¯ÅC3O3DŒÿ¬võ© ‡”ðz’Òû2ùaº^µ®' qŸÂ¦Êý M÷ºŒÔ.q¸õZSˆÎNõ5Ï^ÊŸ˜~u…,2Oòª“Ôš»iáØdî¥m¿ÝN?S[e´RÌÑÄq®Ô«óh°ÈF¯Ôf²î¼->âÐÜîžk—ñV‘%®+IRŒ#ðþµÁm; v¦ÑEïôgš•)Zî´e¡Š8ä&XHà÷Z’þýo$dŒ-:{žõžÃŒƒLÞÈ2i¯{¢DãØÔ¾rËä'õ%ÊÒI×< }Ì‹±‰ÁÅc]*ʸ`^k=¢ÛÀÍhC;P¬pWƒU.ÆøX¹€àTú-ß–ë†Q­k`1ǵiÅÐ*œÜÔM †W%ß5Æ‹œŽ}ë9n$` ßšÊÔõ‰ Vùÿ‰Ç {VI¹¼œ~úêiì\‘ùUÅ…®ŒÇA´`u5ÓCa°UqûÇÖ–;´>OÜïïPêDF6/ £WªÛî-"cœV’ÈÖ›‡;N Gku‰6€Þ½hÚ]ýŽù7cc­[7qõ5‰qp¶¹arN*¬<è<¶ùHíRµûÈÄŽ¬súVîqç¬~aÓÜS5ˆÃÀž+ÔŽØ\ôÀ¬X5+•“ËK‰#ÕsÁ®F¿[˜ZÝ΃u©Ý m‘jŶ£,-ûÓ½AïÖº{IÒîÝdPÀz0Å^ST·;cšÊÔ¦ùv àrkijž⥷··7½ÍXšmа Ëõ¨´9沚'ËyŒv·®k®”¯ÝlûÔ«ÉèqïX~/ÓÚ÷Ã÷Š’!ÈCšñ¹ô¹­´†¸— €«Þ²¨¢Š÷ãL1è^DB§Zа»šÝv#ðÇœÖÔ1â#µ°ç¡«?0E'“Žj¥sU$pÇÇ­=\ªÿíe‚…—ÏZ®×pcPy<µ,¹LŽ?9°HR:棑Ñ\„äþ´Å|ž{Õ«hÑO ‚Ç9fóVûÇ<*ì276 úTö:„òMó°À\ñW%ÔcCHà{w5OûYn%èž:ÖV£|ª,ÿ…sÆâØbsÚ¥Há@­­>y-YeL9î+au(n—å;Hꦭ¥ê‹m±Œ‘X—r4²2±ë\õú‡Ìxàu¬y-¡·†RÌHéï\½ÝÃ$ŒbVÇ\Tî|G3˜@ËÆ{ÖØñÊÿeÕ¾è.Û¦kœ»Ô缘¼Ò íùUû;Ն׀# ©´­@Msåù˜“õ®º;õ³ŒyþñëM›R[˜Y¤p ýá\†«xgÞ«ƒõ®}®dgšužªöW±N‡‘ê;ʺ=KÅ–Å–;%,ÌGÌÜšëôý!"o>åüÙ½–·¡;Ž?„TÌÞZ3ÀÏÞÏ)|-Œ÷ƒ5íÂe2÷Ü9ªmûC*c{ÔpëSyË e Îzzéa‹zŽã¯ÖªøšúMM·¼†4gŠu 7CX«ñWn&®UþucOñF¥©gý6E òËüªÌKqqu+O<²äÿÉñ¨‹Dޣʹýk€¢Š+ߨ=)6ÔŠO ?:Ú¶•‚®oí¨‘9psÔVLú¤’±Š®—Oœ±Í^†ê2™.¹ôÍWGY°l‚jå«D»™¤Qøö¨îu6Ô%ÊéX³ø«N7 ¢V.ä( ½ÉÅ^YrzÔÊÀâ´­dˆ¸ >aÐWšüMÝ}â2Ê ·ƒÈ$’LW!Ö¯§Ÿô[û˜û.jÇü&>!ŽmÒ]ùÄqûÅÍvÞ×/5].IîQ‘° w«RÜI'¦jŒ’¸"–Ï[Ž)„wê¿é]zö™øä*Èqó63ô¦NÙþu¸‰Ž{8«Ðø‚mäg!€\ŒµÌÞx²ißýB{“œVÛ¯nßÊO<ãRß¡E¿ó\U)6[¸\ mÉÍyþ©r·ÓH€*8¥µhZÑC›Ö£šuWÛ=êÄ ŸÎ£K—‚ôJ¤‚§+õ®êÓPŽêÝK`ä~Tù4ãp…¢}¾Ç½g>‹|ò¤f)#…Þ9½qà(ƒX¿rÌO5›o ið]€Ö±2ôäf´gÓ,âÃAoŒdaE^±½‘àØççN9î+V;“ €MUÔu¸¢°—pÁ+ŽJå`×<²C厥b_Þ\ÜÞ|ˆì¿Âª)áo<—{ˆÂÄ£ Í[³²Y€e ƒÒ» &?܈¤ê>é¬?‰;bЭT°Í÷sÉâ¼Ò9ZgT'åì+¡ÒÕí¤IÓ‘ë]…Ì3vŸzÌñËGÿþÕ`Oš½?óZ(¢½í$Hî IšZrc<Õ”½©ÍO)ç'½gŒÑœ ‰”t2›y*ÜéU>ܱE!e;†pzæ5Ï9XºàúŠÁ[°— äÈ5ݽìÂŽ§¨Îi±ë¯#ªÆÜƒÎ{Öì:ÛZLíÖLw«Õ¦ƒSÕ¦œ£)r{b¨Ë¦G°· äîm—í%zwµ¯giB§Í>aê1[fžn/$uÜÝ3Tµš]Rn»c>Zã¦ÿ^°uÙ¼‹©c$ñãð®C¹½)¡™z*BìpÇ­=g'ŒÖ¶›uß[¬ª®…‚Ã=xþµÝÛé–.#S$)âµÙã@`t±«VòËØËéOº¹³9* 5ÏMx‡-†VB]p[Fÿ(sõ¨ìfõªQ Å“ŒõQ½)7 ج+¹Ìs:ˆØòk—ԼɒJÛÖ±>Sëšë ¹k>ÇøFj­¼ëkz†VÚªã'ÚºÈomnTJŸ1Ç'ή®šÛŒ‚=Ùî¼ÔrØFÇG\þ£¢Â.uLŒsŽØ©4ìF¨£€)þ(°û~‰çGŸ:ØïR:ã½që7ÖÑùo)–?î·?­K¥\®¥«˜æc,ž ô­«‹'”÷¬ñ$°Î 6W¡ãµkÅÙÁùHª³ê¶–Œc‰¼ÙGUSÓëSé>)–ÚMò-»:v­û9bºÄ‘:¸=Åp¾$7k—³[Ã,–ñ†EBW!@<þuÊHÅäf#“M5~ "úà»à÷nëO—D¼·™d ¸d6r+gIðÁ»¸EYd‘ÁÎcùô¯FM$éÐ$Îá߀G§ÓÖ¬}¡eL61Uêw]ãä5Fë_µY™ â¹ËA¤'h5¨Ï"JÃ?+r)š5­ÅÕÓÍ.ê‹Ëcõ®¦;x-à2JþcmÎ; äçg–û1œ!çØWGáíB-3Q‹uÎÇo\×[¯ék¯m—3 ùÔõúŠæ,©ž›xÍTLr¿5hYë×ÖvÆÙd"z0Î*½í¨¿Ý}(aþ°ŒûÓ-€”0Þ†ZÝ€‡žÛ=«.âñ¥Gi_q#¯¥s÷TüÙæ«QEïQ[\G#‰ösŽ*mœm R•x¦…çÞ¯ØÛƒ: ê=}«vhÔåHVMÍ£UõBæ ›HëÞ«ó \VMêâåˆïÎ+R@ÇŒW1*îfÀïÚµ,%)hˆÙ TwÒ.ðَƵ´•ûUÔ)×<×i>J\ñéÞ®E#ôvb1ÐóüꆬbØ79Æ@íX’4qà'Š»Ô }¢DŽ20ÅŽyÍô¥Ä¢)¬v·b+ ™•‹Æ8Ï~â·të¹f‹0ÌÃoTÏJµ,ä/ïÊ*͹Ô.¥ˆ[¬Œ°¨À‚GÖ¨¬EH+ÁÕj  ÃkŒúÔ‹}qe'›m3Š´ÕnàÓ®m„ß»¹Îæa’ êk:M6{8<öØðötlÖ«Ø\ˆ®CI JÕ…z•siuˆÎׇ‚+ ŸÃðê:zÛÉ”# ®:©«J¶>´B™sÈQË7¹>•J¦Ô®·NÜ@hIg‘1C¶QÜt5åÚ–·$Z¤ñÈ…ãW#*ßç4©©ÚOøsü,0j4’"¬Çgò#\ àp+¤µ–1oäFcÆ6¨À¹Já­Ä°1û™…`ý«åÀè=*khï/\-´.ý²z…ÕÀÒáŽàpP+àç1T¯4ð¿:‘ºJÄÕÙ-‚‰Ì¤aAÉ÷éL´·{´F ÝÇãZ­g;*Ù@ÈŠ9‘Éê}+SOð¬\4—,Aþ\~µ…{5½ª:Nã|lA>§½yýÕÑvuCò©EQ_POlÑ!ÀÊúÖtÙHX‘íTIÍ&8«Üì!_§cé[ÿ1€rN*œ·‰ªS8ÚA䚯HO±¦¸i.ŠlSê}ªÍ»Ù$ÜÔ©î+Õ"³¶|ÛO3ƒÞ@+ ]MUŠîb=E:;˜æ ŸPk¡ðî©•è’P[j{×G/‹0ÄAbX/R[?ÈU!ã—bSpZ–Miï´¿ÃÓhâ¹mK[žkÆò"'Š–+g»„M,ŒþìsU.lÎÐ0¾•RãO½#Ö«ÙFñÌû â­˜³É$Ÿzo‘íNâ³Óayò ±ÁávûÄŠr²(ËõNîåÊùŽÀrG½XÓ d‘‘]Fh¡Ðgo9Ö b{k*?Þ>0¿†ªùRJþc³3·,Iæ´ )i‰&uUû¹>¾•î°±ZÍ$`ä) õ¯9º±2†“©'&³ÞË€j˜–hª¹•»¥Ü=Ôgp AÀ#½uúPX#ù°Ìz𝫸aµ›Äx%X“f$ã'ð¨—Áše¢í,­ýæ#ùU»{£;QØ(éÒ´b´}Ãl™ÇcQêú¾™hÆðWD}ÛÚ¼ÜÌ²Ïæ Ú¹È^¸®·B¸–Q-µ»¢Îɺ"ç#¯ãV4û¦‰ÊÉ˃Îrk®Ó®L^}ãKo³ë—³±È‘Ôsúæ¸×‡cš…À)”QE}{~ËeUAv+›ÔWeº‚0I¬vš‘P8’H6.ìäU‹|˜Éc…ê'˜uj¹É9=i¥ÀêqU.®Yv±§˜,­ŒUf—ÌMîkPòîùGJÇ–ÕpH@g9h%¿½i[L²¦áøûWyáò,¥šR˜Ø¿º?úùü«Y×´××6}‰~È¿+IÊäç–ã­h'‡šöÍ®tEgŽEùCk”}úÎõmï xÝè~†ºm>ÂHà 9@3ƒRºÇbr;ŸZ©ynBå¹8¬x”}­ u©Yà_½*©§Aå\¹X]]€É*¬Ë•Jçæ™Eä¥*O¢iß%Pü§¸¨ÉØ7TJ¥É'“[zlRFj“žÕÕYD²Ç¹{:ÚÓm^àïÙ”AÉ>µ.¡wm¦BóJrØùPujóK^ºÔ5Hg™öDZ¯E»5ןªŸ”óWaӿу1aY—6[ \s\Æ«Ùï:cr‚+[F³»t_*ÚF^ä/vºuʨ2Olæ·,„00f—$ç˸’RYHÁ횥X“¥%ãÕvõÍsºŽ“y©N­ç³ž¬[hvÌ I(þ"8AYFÁ|ÌÃ$“Ç­tzV>Õ’ã(§œw5ÔÚİ©ÐW3ã½8Îö·8% mÛ#ùšó[Ï‘ÙOâ›%¯•¦ùïÃ; j¡EWØ@\’Ü“\ω†É!xÀ$Ö¯LóVâÀ—L>UüiöŒZèÝ*¹R®Tõ®œdU9!.sœTƶNkò1EãÖ²¯ùƒÜ‚+*GÞ0?:’ûIÔ, Wšºä62+HƒÊ€ô'š³eZêQùvþx'"3‘]Ưt–¶ gl‚2ˆÇðŠâîmò2£jM;R½Ñåf´™£Ý÷—±ü+RMNç[xÚkƒ¾1òJØÓb¹/1'§&¯½«Ç"¿U=E6ê‘Kk-tŸ9ŒŽ6Ä:ûûV‰¬–àt@ªI{Á–LÐ\ÜŒu m\À 6žµÄ_´²Ý¸’1Ó TIn­KM$K,›‡½JºVßNêkFÎÝã`¬¥kGOG´¾“qÌl~çõ®êÎ%†Ùv‘Ó8¬Kß ­ö¥æ<®RCǵgë¾ Ò#Eû)t¸–c çÊâÕÈ`1ØŽ•©ëÛY¡ 0GCV¢Ñî¯cY¥¹Ž4qrjõ—†¬æ½€Kœ«d³ŽÙÍuòÀŸfh#HÀ 1\ôÖ² ÃÇ`s\ýýæÁ°VœÕí"üÜÛ”™äî;ŠÔHÑeP=ê´ñnz \(8Çz§¨ïòv¢’ÌqÇ¥;êloC\*n9Ûï]eßîÓr®këR»‹&0«øf±îuÉçŒCxÙU<q\槦ÛÜ:Ïm€èEdj’#Áòž„=+Š(¯§­üEz˜ÞÈãÜsPê÷IxVg Œ(5˜£'8©wmUä;äÉëVì¡ó¤‘úS¯áde”ŒÁªÊKqšŽTÛUš#eºUK‹ êTò§ô®/S[¼ðÎÂyž±þÔÕ#Lf8Žù>ƒÿ¯^‹zC!R^˜ö®3RÐí®%Ý{$'ø®ǦE¤Âg ¾V¿qô¬¹€¸-–Ëžk-ÐÂÇ<©¬ËÕx#¡§éÖ宕÷ Üw®ÆÒ@ ÐUŸ´—‘X‚;S å”RµN‘(çæ8Ídj^2°÷vq4øèOʵÊêzÕÖ¨ K±c!PZÛðlÍÒÛ±;e]Ãê+¦–4|‚y= sº¦–îL˜ät uª–¶Ç(a}1ÍtVjˆ 0Ò¬¼JHdáMj[Á ƪÈÞ£{T·ÔÕÇ €@=«dÜÆŠ nƒ§©©­¯ 6Nì}+ÊumcZ²×¯ HëûӘߑŽÕü$ÞxÄñ˜ÛûÃkv9£»Óa1ÈŽvàín•»¢Ü$ºX‰ÕƒÄÅr=;V¾›(‡ÌmÙì3Ö¯ N0ÁY±èkS¼ÌļמxªúF¿‰c© ’EK¡k :#¶ìq“é^‘l­Qˆa“Š%·/ÁçÒ©¨Ž ¸öJúôo(þ¡,Ù]Ñ?•Òh¢êV-‡÷ðœ÷^Æ­\A™®{R°¶ÚÄÄMqz„­tµG9;}…aÜÛÜ¥¿™$eS8ɪTQE}8­n’¢–⢚„.ZÚ  ïÍ[´¾šÐ˜ùúæ,¯)bçvîµ]CÐãÖ‰X2òy¨qTî¦hAÚGµÀê°fy$Có¹%î}kªðšÖ:3ÞN15ÓeA샧çÉ­›·Ëc¦k*çl ±?56æäKl ÷^k˜¼‰#lâ¢g(`s¸tô¬«¨ñp  Zq.V´OüéRÍqåíÏã\–¥ú{±$†99ÅRk?7%~´ø,Haæ>µ½d‹ÄR)R:zWAu3E‚+ÔÕyu(ö5ؚɹÔíDžb0<ÕÛYÒE³æ27V!¿ó¥ÜO€=«fÊã žJ]Ô³ÚÖà pI\Šl7¦æ5˜e˜ôQÎ ^kèìmŒ×2,h:’{úW âC¬jâ´*Š»VNïõô¬"åòÆ0°4ºlñCxܦ=zWm¡êqÇ+qØçšèVŽ+Idêâ±æÕQÆD˜õUµ—hi•ñèÀâ¸íNuºÕ¦pr€íSì*݉ äàzÕ©|I¨Bèl§xãŒýÜçwç]^‘ã{l ˆ(ûÊ8ÅY“P‚cæ<˜bzY®Y^I›ýÕÏJç§¾kK·‰Øì'ŠÔðÍì‡Ä6â' 6C{®+Ñ'‘UzäžÕÍøŠ}9§‰›1Ì¥qWfnäôªš”þf—·ý±X4QE{ø=s[0ÿª_¥%Ì>r ˜>™ªf­úmªïVëšò0GPjÀutÈ<ÓŠ³/>•Y“hÎsL,+T•Öb£vç8ÍqZÙHæŠI%}ŒÀI·¨Î>™®þÛZÓ.í#uÂ4q¨:2ìyª:– H;Ôšå/õYÉ*Ò£ô¨-–k›5är®x‰âŸ$Lc§Njî‰e5ìï’L}w•áO¦j_xzxZÓì±K;îØ„íüªªi·öц’ÒEÏ÷†)~t<§ÜÔ77’8µ“u(™Ç¨8«60g¨ùGZÒ0ÆS8V[M¤ŸåQ½õÒBÉæ3`pÖ^¼ò8óéÚ s×޴༑´Á ”<äõ¨FµuÚŠ¨G¯5ëz“ÿËä©þáÛü«[J–+áºåä’QÔ3uþµÚÚµ³ ¨0Ϊœjmò øg ¬I¬œ¯È€QI$«2=q\õõ“ZÜÈŒ8ÎEA’' ²7ªœWb&¸:.ÒwHBä·Vï\íÍ̘!œŸlôª–SbësÀ8Ç­6(Ýå$‚2sÈ«¹Âm'Š®O̓À5,)5´âXا©ìEn&£½wÀÇ$òOÿZ›%ûäÖ6¥p²ã9-ÛÐxÖ–RR6>ý+¾þcU÷+‚ŒV#ÔW›ë.ýíþìÈǸìk"æìK GËœæ©QEï¶âáWéRÍ‘Û֨ǮI¨™žEA:À-ÆzThØät«!÷(¡¢!3T¤;[®{ÄK6àñ“÷1^yvYÝŒ™Éõª1³#†V*á‘[Kâ …ŒG#yˆñuüꯚu ’(ÁÝ+…ÅwCMò¢H‘x@Uû]–[œ¹<í ÖY#†1qª¨èT¶³ù²H1 sYÚ¤¥‰ ÐW%¨§VSÏ¥s—±ƒ‘IÊŒøÜOô­‹I¡h·QÞ§‰ —ª>óZóéxûߥrÚá[Fò£‘Çå\ãà S!S·<š@Û†QRC1]AäÔ,rrNM)‰ÊîÚq[>µk‹¶êFIkªM@ÙKþ’¦H³Ðk¨Ò¢±Öí –Ò.;‡B=±O—B‰¾XÆ~´ÅÓ#vªŽ rž-Ò– ¨ç "`ýEs¶ÚSDÅIyÅk¡iFÅu¬Ý_F’HŒÖÊNÑ—QßÞ±ìí\«HAÀéZ±Ì΢&]äp¸ety¥Rò§”½‡z篠òo%AŸ”ÿJ…w°ÆãùÐ$•Œ§ÐÓѬ/õ{Ÿ" ıákSSÑ °¹0FÆFEùîÝêëVþÔç˜ÂÓ‰#Ùò¶ œ×Dþ/¶¸åb¹ŒŸï&E^³Ôx•Ù¹a1Ž+Æñ[Og Þj ˜Îйå”ÿ‡õ®!—~5Q_@B<É•G'5¶3š²ñ:©Èª²\“Æ*³]ÀR~‚ª]\G>ÅPA½,P(U·€G€(*Æj…òlFaÉÍj“´¶îÅ3±O½p7bpvÇ­e¸Új¤Ú¹'ÐWa¡ÛIl–÷“ذXOÊOzë¿·t½€Í(€žÏÒ´­å†xA‚T‘}Q³L˜ùQ´ÀQÍ[³‰!¶6CÈ7µeê&2í‰Tç±®zîÞ9ŽÄ“Š9®_P‰ ½’HÞ„¥F’JrMå¾äâ·4+¡u«ÚÄǽwº%¥³Hq¿øîkÊu8/ÃMqçïEmÚ5¾„-æ*Í %ò;šãçˆE;¢¶àÔT¶¶Œ×P ÑÒ‘C>: òkÔÓáö‰h¡ÊÉ3c »AU.ô{+p|«dïŽk>Á>Ízä TaŒö¬­Rè<̟§´|+O©O;.Höà×§Ú\"®'^OñS.ßL²·–îY"òÄâ¸_x›HÕaŽÞÙd,¸; ŦB¨HÏ¥iiöDŒb·­tÌòñëT5¿[ÛÂ^ÓÛ1À>Õ…áµò¯¤‚æ»r:ÚºYôÉÝrWjžŒk“ÔtU[ù¸.r9ü*­Æ„ñCçmËvŽÕœtñtèÃ#=@®ÏÂÐÇc Ĩ#Šéìô› Û$º’Ü<’d¶ãžkûLµ´vXm£@=¹»øÂçòª7w÷Q¤iòÆ1‘׊Ï1µÃ)%©ÍU¼µh!Üzf¨QEô}•¨‚Rùòš³¿2èkVNPVmÈùk*H€~¼UWkÿZèlà8þ!šMI<‘¾k?ÌÅWºut#®F+œ¸L«Žø9¯?¾·ÎJ•¹úU6…¤8ÛÏ­X±Ck&H’5½¨xª8¢ûªnu]®ì8A\­ÜÍ(ù›%5­åÍœ­î$‰‡?+[ÐxËRxÒ ³ `Xã @÷®Âׯš~¥¶$‚fà#Ž¿A¨±y02Iì*;Kt·FÆìdŸJ¯ Ž÷Q… JCg’:šécÑô‹ˆB=Œ%ÀÁâ²µ/iD] @y®êâ;{¼À­ FàƒÈ«Ÿð”_\²¤3ÀP­é]2Gö‹tiSná’jçu®QFÝ2ÚÞk¶ycå®TZ³¨Ê©¿pG W¦ÙÜý¿A³ºï$@ŸÊ³æ³,…ß‘é\–µuå9XȰ+ŽÔ§f›#<Ÿzè<9wo¡[5Ô÷ ³Ì3·µØC§+mu ¼v<óGd6.SÛÓëTn¯¦¸Œ‰ úm¬adó\æ¯ÅªOys6>œõVF·yURdn»UÜ÷€GcïY²$6ˆe 71éQÚjC˜ †= w>¼[­!†1å¹üÔz¬>igQ\¥Í±.r+R…Ä#g@yªP/<Š5qÿïø®~Š(¯¤–L Té4^jþU×Sdƒ!úU’V'.ØúÔG'©¦;0mêFd!1Ø ¢öÛ[Uº†`¹ƒioFï\N½«Ýiî#‹3dË‘Šç†¥ÊRxÂ1çpéš­uwäG¸bzgšÍŽúO;s×#©ÚÇÚ.Œá’â½ ªÆMügÌ2°bJÓÒíÀ’R>UùEmh–ñ3âÝøö­io䲺¡ÉAèi·š¼z€8Ö5Ï w5bÁÒ&unÙíZO|ÃçŒí#½!ŸÏ…žLg°5Èjö°É!%yþ÷zÊÐí#Ÿ\Ž#`;¾;WzëojÎÝ1\dÊ›ÙÁëRiryØžÀÖ–e.žèâ½ ÁRy¾g& þ|б«Þ®Ÿi$ŒF =ëÍ5)^I Ðô#¥a]ãr1üqU— j]£…)”G·iç<Ö¨†VêFA§æKyG$:œ‚+Ñ4¯tX²™»)=¾µz_fù 2?,M2uÄa@ëUâA’mI²À*·’d*ާ­)¬R8`¡Qy5ÆêN..7/§ =ª®1œ ì|ãmÔ8ä€ÜVÍäjr7 úVÕ¾sžMc\[)”Õ!fÈjÏסòô¾œïËQEô8f ‚ 8Áâ·Y^UóÍdÌ@’LóUZ\šaëQH éSZ©icAõ5Ñ"†qLšÌ²tät¬ùÐÇ9ãäþ$vº¿’võÚµsä sU¤ ǨKBçäRq[Ï¥¬–ß1ýk˜–Ýâ¸0wgÞ¶õ ê×AK¹”Fªê6½Èê}+2ßP–Í6Ääg’¸àÖ¾—âFƒ|rÛ©Þ~òœ’ûR‚uÈ}¤ÿ íYfóʹC|IÐÛÞ‚£šÒ‚a!ýÚtÛÙ¿rÜô÷®{Z3ÚÄL‘ÍÀô¬ámµ+y‹`¬ƒq=…u$ÔdfÍ6W NwƒÞ°[|œÍZµµ’)¼‡Úd˜€Š¬ ïéÒ·%°D#8šÖðìóiS7•¸LÙPÇÅdø£P»¾(’&È—Ê8Ís¡å11ßïíX×[ Ȇ°¨z³ FDÉÎ)²Âpk_N1G'\ðk`ؽÐ(È`{ÕíÎæÊô+Ãæ¢>á⮹¯¢2yl|¹ñ»Ë~¸þ´…„‰¸þ>Õ¨Ü-‘o¸ªF«­ËÁtØY:Ù®ªÞØ»oŒ‘š¯~&u0±8êÞõÌj±ˆš4Æ æ³[ž•±¤jÙ—…Ñ›—n b©ë~+Ôe¹’8–@pROó®fãTÕ’×rz)Çò¨VÔóp_ýñŸþ½hÙk× :$ñG´žX1Tõdßî‚5o”÷5EWÔ[‘ú¨8ö¢K‘ dõ5”Á.<ÉŒ…võ]½j‘ëIšCȧA!÷)äWC§ê8Â|žì­ŠÔóa“×>„VN´Š¶Ì¸9¯ÔÓÎ’R:N+›¼£`ÙùMñ‡]ØqZÐ@±Œ½¹úÖÜ1‡3éU.ã°Ó®¢¿¹Còá'Ò°µ^jñ4 V¤ýÎ¥¹îk`bÜàT­ €ÏåQÊp#>æ¡«6×rBpWÐ×I§Ü< *“Î kÆ]l9rjôz{Þ°l¨‡øGÍZ-à"[fyZbq€cÂÿJá5Íô+…Î#ä¡#{ÊšI1¸€95×xOHó$“S~±¶Èùþ.çú~uÛM§ÛÝD  É‘QË,b5_” šª°v¤[‰à帬/øjÚ-/íСŠ@À„$ôÈÅyÌÐ=»aÇâZÐK{Tfç¸ëQ4ñD<µ ¹xöª²N[#µôîn›È€ ©Ïn+Ò´ßì^îrìGÝNç["àˆ‘PÛ­q3/²;¨€#l=¸íý:ƳñÒB#¹%Àà0ê)÷þb’¾õ—¯©]•ÉU_¼}«±³Õ%µ€B²7–‹€3šžßP7S]÷‘ÐÔ7°#fIFâZåõ L{ðW5FÛQa9ec‘Øô Ý ¥bßxœÔ,VWÚ½/ÙA•Féþsö<ŸSP²á*:(¢¿ÿÙnip2-8.7.0/share/nip2/data/examples/2_point_mosaic/2pts_mosaic.ws0000644000175000017500000003135313224651032021526 00000000000000 nip2-8.7.0/share/nip2/data/examples/2_point_mosaic/example_im_02.jpg0000644000175000017500000005420113224651032022050 00000000000000ÿØÿàJFIFÿÛC    $.' ",#(7),01444'9=82<.342ÿÀ ÏÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÚ?ùþŠ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+³ð…¥èÔ~Õk û<½¾bÛÙÆ~‚»áíõÓ-À¨ÛÃZ)ÿ˜l‚â¡o èŒt`û?­4x?C+óX‚ë£ëL“ÁÚŒx1Ì´†‘¼£†ä}$áL?ô’×^£¯ÿLo‡Úf~[«±õeÿâi‡áåkËø)þ”Æøwkž/æüPUi|cþBøÄ?Æ”|Æ2?­Gÿ þðýÛØ?i²xQDÝö«R>­þÅðªã+=ž?ßoþ&‘¼¬ãµ?IøTMà}d'é'ÿZš|®D~’Šað^º?åÍOÒTÿcxC]^¶ð•õ¨›ÂúÒu°Á”ÿZ`ðæ°ÙńǀRk®›sø!4ájÃþa—gé éL:>¨¿{M¼Xü)‡L¿^¶W#ë…0Ù]/Þ¶˜}c4ÃËÖ'U4¤u}i(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šî¾uÔ¿í—þÏ]îÓŽ”˜¤Çµ(Ru8ÆM&À$sNÅ'jLóбKA¦K‘¤Š *JB£9ÆhÔÉÆajX×jþú1Ï´S ’hhÕ»sUÍ»£†ŒñS($r0iàc¥)b˜¤± Ž)Úx¦˜£o¼Š~¢ ’Ö äÁè)‚ÊÎCÿpïÿ qÒ´æë§ÚŸ¬+þèš[Ì2Ïëä/øS‡ô‚¼é–¹ÿ®B˜|7£6â[oø.*3ámƒ>/À‘ýiá-ÿÌ= Zgü!º û>“?øÓO‚t&<[8úJßãQŸh§¤s¤¦¢“ÀÚ?o´ûiÿ֨πô¦àKv?àkÿÄÓ_Àh<\]ÿßKÿÄÒ¼°#"òä}vÿ…Fß-sòßMø ¨äøy®á¨¿ãÿ~£tÕ ý`ÏþÍC|:qÓSSõƒÿ²ª·‚åҴɯZõ$X±•NH¾õËQEz‡Áë(ï?¶w±<Œ`zù•ÙÝ'—rñ/8b9ì^8ÑS×Ú«ÉÑP‘Î*Ä0:þñQÜP3øÒý‚~®»~§š ØØ'šb¦T’)¾^[ Ö£[;€ääMHSRã¥4qÅH¨qêi6âŒp}ié °ÈBi²DÊ0ÊF}E1#ÇLÐÁ—øx¦«o$`ŒS¼¶fàñKE5½(_zwáHÝ2) “špÎ9£4ÒzùS†qKMü)xô¥¦–sB°a‘N¦°¦³®à3OÅ`P1œSH¥ .)h¤ AéQ‡cŠ”tæ°|dvøR÷ß`ÿÇÖ¼¢Š+Õ> ¶_ÜíJôcf«tó?.Ç?Jtɺ"1š mòNGÒ¤µÒ³†,v)É÷­÷ŒlT:+2æ3É²ä‹ YªD²WŒ ryÍ5,DSgp`)g*ѳXäÒ†ÅPžAü)â?Þcvî}+ImbD aýïZ¯-Šg(qOeòÐéQJ<ØÊž½ª˜%IÅ Ûš•BƒÈëWÈí Œ‚âÕ£lã­V#œw¤ÚzÐ1V!…²K´Ó%·ÚÙ^1Pcž„S±J8¦‘ƒøÐORÏ­)8¦†±Jç 9•¶ö©—j®?­ ãš\çêi_›4c4Œp( ‘šPÛ‡´Å0ä7éwv5ÏxÒOø¦nWÕ“ÿBå´Q^Åð¢a…®G¶·þ€•ÝK1.­Ú•¥@2OÜS·¡éZå< «ÁjÌ|¦j§v‹œ­d\ãðïJ—›¦UÛµûÕk¶tœ‚ÇœUVsŸj‹·^µ£ik9•w}MIs僶8ÕTz ¨]<ãimî|³Ü§¡íWZhŒ{”õªsÊM–Æz«Ã2‚Eß8üj1Ö¬EîM\†C Õ{мð-Ü|cÔ{Vt‘"¹ ¾:ÕiN1Dp‚ù5l qÚ¢ºP0ëT[jݽ”s€}:š{ZªV’ÆÙâFhòO^jí¢C?È»WŠ¡!ÛœuªÍpÌvƒR.r§º³&总úÒŒœSÀÅ-1Ï/ÝîØQš†rØö¢3Å?#­Æp:Ò•'Oj»¸¨ÏjŽG%îj› fâÊiwã4ŽÛ—˜„а1áQîÛÚ¦I6¯Ö•f äÔ )H%r{r'ï¶>µ.IëR â¤ÞRFä9Áèi"!{UûG‰­Ô42 #Wà´+-:Š­{nð2qÖ©Ùé°Í$¢t'mäŒU–Ñ,åwc¸ÖEÕ¤ç¬>µTÚšFG4I“šp>´×ö¤Šh-¿ž$ŠsM}Ä`.~´F¥ylSúš6Ú”Òcµ°æ¹Ï¸ÿ„o¼Ê?yW©ü3 |?s¸ËÓè ]|–Vîwm9úÔÙñç ýj7·0º¸b‚)É#–f,ǹ©¡ŠC*ùyœŒ”ë‹yCnv,Iêy¨Zܰb¢krÅK ŠprqÖ›ŽqRF¹ ÐHÜiØã#š­$YF Ö«l1ðqšCM§$JZB3JO‹ž¾´Â0ÀžiÁ¹ÈÈö©Ñƒz™NE3dý)ò§žjhÛxÁëPhÎàUûYüÄË cõ­kk±÷%aŽÇÓëSMn@ÍA,qŒãµ k#Qub¥p[¸¬Ù‘—!IaFr¼P¼ŽhaÎjce8PÞ[ò1ÍDÈëÃ)Sî1MU äšP1NÍ&(4ïIõ4ÔœšqX'¶Â,`*.µ+ýÂ{â²äBØÕ)m™ÆèÔŸP)Ñéò/!Ú¸ãÞž,Ö0Ô¤vÅFØéÞ«NØ@O¯¥ ‘@R1Uïâ 9â³Ö î)~ÎêA0úVχ—˾bê>îG½u¾te0Ș<ŠˆÎˆ‰jW€RÔŠOÖÁç­`=°GéœÕ¨£XÀ("º9„Ђy`ƒYÞiIYðœV½š7’óÏJÒ&fp¸cùW;yb ¹Ü š«y§‹È@Vt×9"<.ÑÈ0ËJ‡< µ f ÿ•2âÙ!—Œ|Ý)ϧ™°`õ¨¤°¹…wlܾ«ÍT!”à‚>¢»§…u*‰Ü¸9'µG‰ÉƒŸqRW ’‡éZ,-b]ÈzU³pA<N‡7/¶0]aU¯a6“y)F#!}©ÖªŠ8Mqkç 1cŽ£Ö¢ŽüŸ˜§Ë`6üãèEEq¤ÜZ¢Kå #~Ž£?kYéòE þìîa“R6ŸpÍòÂç𬛻:21)ƒUK ÿ-¿ñßþ½H,ü¿ãÏáVô¨”^ç98äbºv‚9Ç@[:^"™Xõô¬Û§!Ú3ÕN*°F‘‚¨É«±ÙI€_S[:|&Âç4-µºêRÌ~e®³ŠŒ¾ɬ›æi[xŒUU!W'òªºTš›³G™‡qÐsY‘YýšWŽaûÕ8>Æ´¡…84ºJ]¨$á”ä`UÈô(£±wÞåÀâ²X2.ÜdýhŠÈÉe5Ã*‡äÖC[ʤ²Àã>‚¨JŒƒ)Vô#“<¢·4ŽX2°éS‘H 4Å sÒ\_ÄCþf¿ôÔŸÒ¼öŠ+Ù<a5ÇôÙ#çCŒÿÓF­øb‘˜+) Ó‘ZvZÙ›¥P¼ݱñ\ܶR]]ÇaCu&µbÓ–Ü**ð:ŸZ°,÷¸rH­u¦[ÝÄ$‚?­S_ LÉ´Ü ü \Ó|>ökpn·mm Ö³|_Û›iÿ¼ œ{úë2ÜNø­M>Ý®äòÕ¶asœV¤Z$bO1¥;±ØV•ŒËó.þ?ˆ*̨©&@_@(4«.[5ƒs`Ò;ªqÍS—I¸ˆg‡±ª /ÞB? ·£Yù·d…8þ#]Q‚2qŒt5Ÿ$ —Q¶8ÏçUît´Ý´æ]‘‘’ª9ÍX·°¶´lQŒž¥¹&©\ùɈž¥KhyºŸ¨D G.9ô§DUoÎ¥x~VÉÇí:É'^{U›Bóo\ïÛoœ€:ý+^ xmcÂWù×)¬è³Ë¬É4AV)1’}{ÕûOÅy–Fvœ ÕŠÒãùP áF‰×±â¹û½Bù‘ËœËýj”ÐËon‰Ë¸’AëKN3\Þ±óê’àÐ~•@Ú3ä ªwy¥HÆÓ­LªqN„éN¤”µÄ|E?èÖÕßù à(¢½Ïáä›|¦®?ç¯þŒzë .àZ·b…¥Úù­ÛbêÞ[Uç‰e£'¯éT~Ò¢Ç;ªvŒñÍC<,Òž ã­U¹²‘€†±nlnI,ˆÙ^w1VíoœÇ²î<ºôu îúã½[†ð4 ¬`cžj;ûÿ$™ðßÂOcâ1sk†\L:z²uk’¸UŒ}Fj…ì­v¨³íuS•t¨RQF1€©´«µ¶ºv˜ðÃŽÕÒE*È»•SVáÁ¥™#žqQ¬ª Úy\ê*2ãŠoZ®ö¾scŸÒ¯Áo´{êq֞ܡǥ @Ê7 Ó†H犂HñÈéUÚcó J0œ{â³Ùe2v-†éZ0 Db¤ ódõ§™ŠÇŒfœŒ@¥3á¹µNGÞØQ–-SË+ZÚy›C0 jª—o',@Ù/U~HÆO­só]Ì÷nŒÄíb©ç@\ Ž‚˜¼ò W7¨0:„ØìÄUBÕ›rÛ'Î"Ÿâ¤f ¹') r)Ô€`ñHsŠá~"Ÿ—N_y?öZáh¢½÷áÊ/ü+í9Û)ÏýµzÖIŒ’{ô«¶Ìëp6 Žâ·P¸/ƒŽ*ÒêQíÎJãÖ¹VV»œÈÄ€>èô¦ZøžX-ÚÞA¿qÏò5vËX:Œle—.TRË*˜$ ø YË!ô©b¾ +–+>è¼Ì]É'ùT’˜.×?u¸5¸.ÙTíÁôÍ#Þ  œwªÞxŒeϳ\l@Wž•oLÔeK… êŠ~ðsÆ;Öâk¶³+¼r±ž‡‚k>mqØ9òª£Yx×,¥‹wÍY·ÖfW¹õàÖå­ñºRû6ààóÖ­‘‘N©È5(pÙõ ³”#)(0Ny§oÃsÞ‘ØÍCŒœŠ1Q´#ÌÜ&”?ï¼²ô4ù/ÄnsR³äqÖ¢ TMEAíÒ¤¸;í¤Ld²×s­¬Sý ì 3ûNmÛCߥ@·Mç³±Ïzº³ v~µ$X'ŠåïÿãöcêçùÕZ¯4EØ´Š»xíNeÜ1@ÂŒt¥¤4›®â1ýæœ=¤?ú pÔQ^Ëàù'·ð¥£?ȹÃpC±`?&­Ä˜¡Îx­8uH"„ÄòíZ_ZÜÿ«˜þëpi÷R­½»<ŸtzW;s|Ó‚s…ì?Æ³Üæ–ÕÌ"Ub¾¸ïZ¦åeÁ.¶zTƒ¯£ÉBHÅV–Fc‚MBCVÒïjí?…y,⑤0hGU‘ùÕ;‹1þ^éM[©=jFÕå*@A4 é™TœTðêr.ˆúúVΑ¨Íov˜º?Ê»HÀQ»<Õ&GRx¥Šâ-å3ëV äpj7Ê ‘Ç­0°9ëFA€ñKJ¤­ …9#¥V-¹‰4ÇJ<Æàùë\kx¢ú-Ju_-áW*ªËØ{Š–óÅ2KnQSËb0̧<{W+,ªîHñ§­ë„ Fìt4†åØŒ€)M̃…vô4ô»¹O»<ƒñ¨ä•ååù9É5<,«”mÄuÍEs)äqUHÅ!éQãñ¡~V>´úF\ò+€øˆßéV èüÅqTQ^Ó¡¦»ßµÆòãpÃr§5åÏ»åˆÉö¬ä¼|Ãëš×°ÔL;dv5=íÀdTW<æ³ä¾E‘QÎ ÷«É22`0>Õ(è)ÀbƒQ»±PjŽ’DÜ„dŒ÷‘© 9#½GxL6sLN!?¥y¤lÍ!cÕŽM,‹å“¼ðzTŒŠÊ”ö¥Î)Á ƒÅ+7f梸Ì' Y³Û° (Éöªí¯U¨›?ÃÖ•F:õ¥Ç9¦»íúמ|@}Ú…˜ôˆÿ:ã袽›G|hh~Ëþ€*Ùv OSKªãƒÏqéN'›†{Ó©hïŠCG#½&*7m«Žõr%Îx«Dô#½/ZUÊô£’rh¤4ԌӅ-1Ð75§§ë2Y§”á¤Uå2Ü­^›[’÷ï0BzúŸÆš“2޹­KKÅ v Ij÷w×åÆ85eô«Ù®ãwˆ½ÃŠ¿ö[‘"¼wɬ€^1íN¨žLG5FD™î•†]Oj·/ÕÈÔâ½AªÑËûç\·õ¬ŸßË•4kÃáwçÞ¸¸­I{å5©Fl8åEfóɧŠnîpiHãŠp­Õƒ;qš¸ØÇŠ…ˆÎZ‚]ˆG#?Z©(8`MPxðŇ~¢˜iiµyÇÄ?µ­Tvƒÿf5ÈÑE{>ˆ?âC§׬_ú«õ—†ÊŠybŒPN(¢–ŽÕ©4Å‹³T æ¾:)'ÚœFiiÑÅ$Ä„RqÉ>‚¬½ƒÈ™‰K`sŠÙ²ð]Íõ„w unã&7NŸˆ¦Íà}f!ò%ÿuÿÄT á=Z4&KfãÒ³æÓ.b;Z2ìi©¦]J~HŽ}z:U±œ¼­:T’ÏoïCg9ô«÷>jci í]&–®c„`ø×cä(Tœ°-ëQf¸;â+žz×-{[ÜË uVÅO§Œ€ç“]ç†PJ­9CˆþU'¹­§•€íšmÕRsP¯˜Ñ†W>µ:¨Ú7qÍ(T…¥8ôÏëWв4[Šô$ŠÌ¶¹3)Üݵlµw—ÈYWÍ^£5fxÐH$S†n£ú×âðF¬‡±ˆ3\ø<âŽ(Çёָô¹ŠQÁu4Òù¸f=ºT@’GéZÖº{«$’8?J‡RˆG:c¸ªŽ»`84¬ŒÂ6*;â²eF-“Ò¼óÆgþ'h= _æk¢Š÷(-ÂÞ+8Ù™ EYºjP´S•3Ú¢’&SòŒŠTBzÒ:2œŠ¬Èë'¬F¸^O4âph4”.HÍ©6vQ´àûUÃh„ +RÊÉ[bF¤æ»k=%­R3Œ“Ë ô­ƒ Ò­¨Å ;Ò 2ŒÔk³ëUär—,›NÒ3íUÞÁå`˵ÃxÇOz¢H>ìÑçñÏDÇz€@Éšõk†ÓK‚(]YB䲜ä÷¤ž`ÄxÅ žÑdVàŽµÝDŒpO¥\ŠQ$`©§ÒÀ¬«æC)  ‚;Ö5ãCo•]®Ü+™ud}êÄ89È<Ö¦¯43½%ãÌî>µŠnmîo x&ŽAåòPƒŠçYHlÓØRtЍ^G<’)cÉn¼U”%%.íJ5*ÜL`‘‚úIœ°,Iúš¹jâBAAÇJÓL2zŠæîìäó*ô8¯,ñº4~ (ÃB¿Ö¹Ê(¯vº¬Äà‘Ž¢Iã4ò¡M99`J›vªÀm$Òšk.@ïŠ;SJ“ÍÐiþ[¼¤qA˜õ®‚ÎÝ|˜Éë׊ꭴØäEf\Q[:Mµ³ –%Vì+D/zìRqšî•Jãñ©Ñ· nÆ– Y‹ÊP)ùzæ($©£µs6Ód¾Ó¡’ËËýÕë‚9¯9xwFR½C Sìµ;»ͼ죺žTþ·Š ±”¸]Œ{ŽE6[Æ‘T$¤ éƒÅjfU’¦»M;æ€1êzÕ©F¥Jd™8Ú ªVï#8Pzɼ±YÛ%ˆã­dÏ£\76àH¾ÇšÁ¸$1°Ã/„ã4G½⛜¶)¦>M4CƒÅJ«ŠSÒš¶iCp)Ù©#Á§²Ô¶¶~{ŠÔŽPZö,\nf¼oâ+âÉTö‰?•rÔQ^üÈV݉š­›dPzÅYc>Õ n]ö¯¦­ã êj*Cü4áo)íúÔÉaq ùPûÔ&ÒUÆÃu©­ OµF$PÊXŸzÞ–ÉPacUú Á¸a$§¨èj« ;T¶±yÓ"‘Ôâ¶$·¹U\ì?wÞ»í""lâ.0@­\QMb‘œU)#ØaWT ŠFïŠn¾A©ŠFèqPãd'€0?­s:Ý¥­ä-æÆ7¯¸[½-í˜ùm½?Z¤‰ )$ AJ’4g*qV-$y.Ñ%ݰ½zU’›{hÐ’H'ÔÕäýꜯýõÞ–VÀÚ;VmÔâ8É“…õ¬i§7#åáA« ´²švèˆ[ô¯=•žI™Û«šnîjJCœqÖ˜ŠÀœâ¤¦–`~šZˆ©-Í¥I'ð§ç5"L¨˜=iÆöÆ1R¡ÄªOLÖŒR drÅ\™CÆ’ÕáÿÛwŒîý’1ÿŽ å¨¢¾…vB0X`Õ)£PÃièsI,韽NR qO2{Ô‰:ŸcKöƒžZµºbÀnÀ§j2yn². aÈÏJÍ39|– çŒWGw¨Å-—Õzãó¬ á3øÔE‡ŸZÓÓP‰Ãàpx⺫K8î£FG#Úº«GÄ`mÇÒ­Šh!¹Šo<ÿ4œr)ÌŠNH§cå⡜Hb>_ß)Ñ®ÅÛœŸZu÷¤uÜ„zЉÐ,[sÀ¬R4òŽ"¹‰`Y_©È4ë;4´f ngûÄúzV~§£pÓÚ.;´cúRø^ãO´ÔL—€«c±)ïšô8ãB¹0<äTª6ñÚ«Ü£$ñ\ýй¹dVWøsS[&@¨µ8qžjd¸l€=*Å´Ò9mîÄ‚¼wÇ»ÆwþÞXÿÈk\åW¿)Þ2;TLpÔÇŒ9çŠr¨ƒJßtš…Ûðx§+²œ† Ò¼­#nvÉ÷ r{w©RãÌ·UÁr*$š| Šrß{±5§o:¹Î¨®ÿNÓCØA"ÎAdr+V(^5å?¥XÆW‘M\/ËÒŸÒ“¯Z ɼ•¥ÞpÇ'Ö˜“åÈíS•‡zü¦²5 VòÙ‰JÁh‚9ÈäóÒªË.ÉÊÆ)ZþW2{V—ɨ …' ï¬d1AÒpTV„s‰0A÷ªºž~ÌÌŸæ×®Vþ@¤­Š··=¨\bOPÕ_WÕ©$D¦ÁãnsÏzÍ'öæ¤^‚‚ëJ8¢ŠiaëA`«“ÀÈæYÔ‚ŒbšPš6.sN¥^µ¹§A‹çq$jðïÿÈé©`ç£ÿZ稫º:$ºÝ„r*º5ÌjÊà ‚à Šö¥%zRQK’)®ä.8æš#š}„f“~Ñ´S•ºã½šzeÈ 'ÚµbÒîä@Û /û|W XË"ÛÁ lP2+Ifd>µed jSŒô¥Ïf]­žF)K6⣒á¢;X~´ZdË®Ò;Ui™’UP*x¦Ûœ”àÒ ÍV¹baõÀ¬y"Äb¹ÍFO.ì…=«*áËd±æª+„•XŒ€À‘]¥¯‰ôç*Œ²EžFkr˜$å$Ÿp üµæzŽ ä²)êç"©õ£¦ŒÒ`9ê3@4Ýã±oÏjP´Ž¹íBF¨>QŠ}”Œ28¦¨ óRSŒ²”Ûæ6ÑÑsÅx÷Š|Kÿ]1ú È¢¯hŸòÓ¿ëê/ýW³Žii $š\g­é¬Äp:҆㚠ȨÔ$Ô bŸA*²€î+Õ`Òôû{hä³·UÔ0`2NG­S•”»ìkVÑãr#±«ŽFEWÝ!ÎGÊ:bˆuŽ#•XdàV¦óX _|Ô‡òǘîô⥢ª\D͘Ö.¡Ìc†VŸ–"¶,íRÞÝs¶;·53ù{H# ŠÎº‚ʱSŽ+‰Õ£[yÂÊÃ$dǸp1ŒséTúµX‚ݧ`¨?Jì´À!·TgÜ@Æã] ²@¸Áô®KÄ>‡»°\¯W„žâ¹ ‡¿åRÇâ{Þ«\F²ç¦ª„P£ §EqŠFÎ0ZjFsɧ€:RÓO4£¥-2CÇÄ'= ”öÅâ„(?¥6;YîåRûÇ^?âdòüM¨¦s¶v¬ª*öÿ!Ý?þ¾cÿÐ…{?aHI?cNé@£Öùy&qÍ(QK€:PH¾õéÞ¼ûw†Ò69’ÝŒGéÛô?¥OsŽt­+p·ÈG~¿Z²0Æè:sG•ÀéT.­·.ÑÁ=êÍ»n@=8ÅYÎ:ÒÑE&9¨e·Šf̈ãƒO "b¡`H ޵…¨I$jªƒœó\ž´w:ÈÇnÕÆÜ{šÃ™vœzR¬,`2ãåÍ[µ.>Tð®›J²”Â$bNrMt6‹å#sœu§‚I>¦±oü9ew+JÇ!ë´ð ÈÔ´x`·@åOV8Îkš–Í£r ƒUÇ^ih¢Š/zCŠOá¥TO’F߯šPîôwRCr*ͼ^{Œp£©­ab‘€ì7wç¥6ITt÷¯ñ#nñ>¨éêOýÖ]Dÿþÿ_QèB½žšØ¢‘—i#­34cwZ”žiÔ˜ ÒnçŽqH#šxé]g€ï¼V[F?%Âqþðéýk´»}:Ó4û•I¶o~œ÷­loê)ãQùþ´©Ù7„sOaÆ{ST-°6MKHN*³ÈêÙûTèÛ”ZVPÕ’$#, æ5ÍbÂÚ\´ƒv>âòMsC[†æWD@ù3É'Þ²§X‹+ry«ºxI!òzíëô­€.6¨Jзc,zÓ¶º4È ;UY¹&­¤¿>ÜÓŸœâ±o¢<îãÞ¹]B!æ¹@ÄÎcŽ)E™ iBqLÝócÖÐbŸåqžjÜ%²rÑ©mÜ9¨NÎÈ?*X”4£äwÍi*ƨU Öš¯îö‘œVF¡lÉ™î¾ÕàzÙݯj'ÖêOýÕ +GAG“ÄpEf"æ6ÂŒð ¯biœu4+ÈÇ4ÖOQFB`cŠx­:œQÔR3œsM`Á)T‚pzӳбaw%ä7Qž7 ­u¯ßê!¼æHÕº$c{šÐÑçWÊÒ࣌dކºÈåf$qê0jÈ£Ž´ÒÇ8Áô×RëŒõ¢8UìdúÒO)‰Cc#½T:€`À.ÓÛ5^Þáæ”ïÈ¡õ­5>Z{ Õ혟î†Ç½+ÍäM€íaŽç^}â?¾”|ô“Ì·‘¸b~`}ëRùÊ3ÍKiwä]«ò´ßWìfcè+6]FîîO-X 'V‘…Ä [î89'õ®è¸m²FÀƒÈ"­Jì°³¨ËœV-ÕØ’"îÄãøk åÕÈ'šÅdøÇsTÏzfüu¡˜mÍa"˜Šw#­9#óU@É8«Ë¥HܳªÕ¥Ó(# ÅE{nÛ/?{’k? ÔƒŠ‘%ÛÒ¯X°šò$õn•Ð:ªqY÷“GLX=zùÃVmúÍó†âCÿ§Enø4gÅvCýÿý«Ö äŽjEÂôëM½QˆÙÛ'V9;šY"Âå{T; P‘9pŠ7À·Ó@Ab|ÆÄíÈ=—Ú±fàÇ"àŠdq‚ù#¥Oö?5NÃéS[YÄZ0À<Èö“Ã5·3¶ToC[-p½=Ÿ¨åa$%HÏ5Yœ¦:`v¦Is Ë%'éQÅ0üÈ×cÆ j[ëFÛt?ßƳõ±q1~Eéï^ |wj'ÖV?©ªôWIà–éñ± 3‘ÿ\Ú½Ž].d9B$_n QthÛ úŠ:Žhܨ2ç®C$¡RD$úœb…žé"SÆA$µnëN ™#SƒØzÖ†›¦-¢ùÒŒÊz³V&”Žk&ô$êC{ÌTòÛiô5r°`÷« Tôb¶UaÔ×AqeÈ©í-£·píƒ'ojé-š-×/jLóŠu”„LeE›´Æ‘2îžõ˺n,à’pk‘×n§ýÑ‘TdÿµXÛ÷v¢Ž3ïKE1‡g‘:Ö¤A'·OÌ­ù’äY̬êAØ@É_þµt3DdƒÏ ¬¹m|¥û¬}Ȭ{ØJ¦ÿ,¨“Œ ç'?¼l3Ö¡œáW5,Váq95=!£ô§…êä¼d_V®_·e°ª’ÊÊ…AíT‰'©Í&iAŒÂ˜~aÇZñ “ºêSêäþµÒü?;|o§úéÿ¢Ú½ÏÎ+Øš&òd¼åÚ~µ€ªY†:zúS5ò¡Eþóg5¸ŒÖíœ#ÌY2AµdÊwnéž ©'› AϽQ¹”(ÆìÖT’–5XÈ r@¹©åã–>Õ4lô¯Y¸i‰$­Ý6aåt¸„l9 Á«»¸¥÷£4ÅFäìôª„w2I¹Û¢’jˆÔÚv/+AÛ°s|Ïp[s4YàçŠt79Êõ榹ӠÔíš—2¯ŽTןÍÙ®%ƒxpŒWxèj#M#-Š}-A ÜØÎFwFêÀ’1‚*õ³>õ1Ÿ˜œWe£Íolc]£Í¾çù èù"£i8ÏÖ°5Yáf…@—µÂ²n™ƒ)ÅH-\±Ó¦Ô¾K òñÄ÷©GºAÎÃô5]ìçCÊΣ1¸ê«vöìê· r*36ùX±'žµÊw@òm*ñQœi2I Z\^çs±õ$Óh®‡Àç1°?õÓÿEµ{RÜ.óöªº•ÓÇÁß©•™iz¢]‡î·CïIs)’uœ•bÝ2EnÚ¸Š\€ƒ«Õ¬I2}žÐ”‹»Ž­NµÕ P„¸ìiÏs朩ëU¥›øAúÔd«.)ëÊ}*xdÙß?Û¢N¼ŸjkjÈÚTéÖ®Yù—÷qÃ1ˆg¥zM•´zu¤vêÙ#ï1îjè wÎi’ËK¹Ü(÷¬Û­v#fE-€NOÁwTŽö[¸n]|Æ,c'+ôÅiÉã9æÓ¤Šhn6ü’/LûŠç¢¼yeó%³ž¥ºÑsªÌÇËRDc¨õ©¡½ó! ÍÀ5~Òô3’:T¶¿)Fµ·|nwÈW9Òšàö¤N5'QLrBœu¨v‘Í8®å«Ö_º;úúhÃs¶e~x­›_ÇnLs#Hˆê+§ku¸‹(ÙV0þ•çúÅÅÕ½ôÖ»€¶2½ÇÖ±È%¸¤`AÅñ]†H1ÝuëøÕûÙVÙßîŠÊy㔌µG“½Œ¬ùÕ‡¾µ>P[ŽÂ³fºÉÛoƒëœUf`í1íL ½ºR}áKÐRuÓò£1êkÃh¢¶¼*$ü3FÛL*ÎO¶6ÿZõ½5‹FÓ“»=3Dò™ŠË¹PS‚=*#w»‚Xõ­; èV'iÜ)AžOZ¥w¬µûmS¶%è£ùšŒê+l€ž‹YÓ]Ë$âRä°è;ZVº¢ãi;Þ´c™eyþu(§"’{ÑHEMkw-ÂM u9â»Ø¦°¯ïIŒ ?{­gC&2¤ u©$™ÇBæ-¹x%¹&„ÆÙ*wº ‡õ>•Tœ}iÍ#6B²åñа:QÖ“h"€¸éв“F±€Ìô¥YòpÆË0Ö½+Fµm7IRîãpð3ØVWˆô¡v‰tlƒåfõ®RK ¡l'=À¦µ£+¨dûÃ9« §ªs·*}k[Fµ±Î…b1úÕ]a‹0ˆtêkЊŒ³#4›Ž:ÒbŠi<Óz7±§“ëAéÅWöÛJOd'ô¯¢ŠÚð´rM¬¢Î÷L väW¬€°B±)8Q­OmÕ2?VéT¯m²ñp{ŠÇÇïaН¨Î°FŸ™¿AY‚ó©©Ñ÷ÄçÞ¤ÈüSÜ" gštSË ‚Œxí[Vº²ÌëˆUÏŽ†´sKE'SŠ‘t8aÜUÛm^häWnXqõ«M©I4¡pŸz­=È @ùWIš«7s¬K±NXŽÕPJÝÎ~´Ö9'Ž 7E#8¦¨?ÅÒŸHqÒ |ʯåS¨8¥úR š0i dæ¤\ƒVÖ=‰»«*ô[9ÄñÄĶ0åV¥T–6FèG5Ž–¨å°8SƒšÏ¿·ÆØò«Þ«p‹’Ò§³ž4‰Ãº/<k:í£wfóçÜV\ʭʰü Vn•-¥FÇšHæ•NrQOªš†Âá‡h˜þ†¼RŠ+§ð, vW*ý‡=¾eæ½6Ø-ËyŸòÌzúÕ©U ™B‚sY2]"îfö®kP3Ü4¤SÓhè*š±ƒV`ºÚ¤1úU”¹r„¯Ê 4Lwf®CpÆ>oJÖ±@²™vô}k^'2)ÏPj\ÑM'Ò–š]s·#4€|Ù©$RR1ùN)ª Án½Í«  ùõ¬àöû­ØÈ#Ò²áò’Iö¦È¥°is€3N'ÏjLŸJÞ§t¦‘Å5IªZùLJõÿNî?ñÓ^5EÑxF÷w—ª G\œõÿ€þµÞØÂÓ8€¨&µ ÒVÄ¬ÛØ{qZET•\“Ò³çPIÇJË–Æ2ĶHô¬[¤DfQÆ EéÓÖºý:Ì}‚õ\Ô’Y ü ,H”0ZËÔâ)x@ãåEÁd椉°:sZ(`?…hÛ“îš¹F{U~ZN:TÊ¡iØæŒÒÒfŠny î$b”œRƒškg‘§Mw¶Gòúo&²õ´O¸‚ Xcß"Ú¼öŒKŠ)8¤g"—­7açæ84ª—âFLJoÏý1a^?E½á®·>¿'õ®ÇO¾0ÝFÎÜ2ÕÝR#‚(1°\þuVà.ïz£"lY•ÀD0Ç÷»ŸJÊÕnofªŸÖ¶$±c € v®ßIÒCé€ùd§5<šdQ¾1ùŠcÛRWšâõØYuW 8 ¿Ê²¦‚ÇCUšwN@â‘/d mµ®¢ÀÉql’J¡XõÇz¼T…ÀSÊz}jLñKLg zSºŠB*bO\T‘œ‚O5 Åf“µ8QH}ê'm¬"ÆÓüŠ þ•2B¶ü€ úTë™m¿•X·*e óÓª_#Ú³ç™C6ÌâºÝ Ýí´õ’SûÉ9ö¬‡Ò¤ÞOJaã’j¥ëæ†#¹›«ðûÓ8ÛÇÖ¹C€Ì­”ëM` (P('áEbø¤ãÃwßõÏúŠò:(­ï Œý§þýk£†&c8®»IÔDpfeãgsQ]kW7 û¥z;˜æ´ Ž'¡¬ë‹õt+ç¡oð¬Æ‹~s֩˧jÒÒîVg[iÈ~ëþÕÕǨÞ[B‘E9TAµFÐqúTj—Í&é.÷øRi\“þ°øªWÜÈd”O|VEÜ “hè3X—?’ÇÓš£l »UKœôÅz ³·B#1Œ}Æ"¦ÝÒœzŠa ±Å©=?æ”ãFÎr¸Ö¥Q´C0‘J -sO°ûw™ûÀ›<޵,š*)É•›ð¨Ö¶|©>üõ¨¦#õ°Ðä°éV­ÁaÏAQê—ÿÙÖm7”Ò€ áï.îu9Œ“¾Gð è*¤‘˜ø"¡¢½M&ñJF{QHqÞ€ t§W;ãS ÜVAÿ òº(®§Â’=¤Ou —ÌÆ}@Ôתió›ë8î$ˆÆÌ:þ⤸@#b}+¼B@è+œÔ¦Ãy*yêÕ ŸÊäûU­üÔ€äqO\犿s©Jöë¼`°ª0[OpIŒŒÉ-S¶‘4˜2]m^êµj>@Ë»ïŠ×ÓäDÌ€zsSʸ¨\>Ô&²žôƒµ›Ÿj™oØÊßQWMósøTÒ™šŽ\zóQ ÇéSGÓ%7œÒÒö®kÇ ?á—ÞD­yuWMáË ?ë©þB½ Gñd[{µý©^ÆFu½Ï¥ZUXSjp;ŸZE ,PsëéZ’Oö[uf}íŒzÉgyæ.ç$þ•¯c|Ñ’SùU}UÏÚ›ŽÇsYr°aQ€:Ñé@À£4œRŽ‚» 8»‡ÉŠ,Lœ–‚+®Ž5„fF©—eB¤p{×1«¡q²NÝ rÌR)2gÒ«± Ù¦‘L(¹Î)Y~ZbÒ³ãõ¥ šG$GJxä ×1㿗ÇÞdμƊ+¨ðêÿı›±œüuk¨¶™M¸Ž iÅxÑ€Œ¹B?Y:ü3ȳºÙG{ù¬ÛdFy­€€?*°6‘†Ç4Ë¥Š;Vd0Çó¬èî‰p­ŽjRûÇN”°I²AéŒTÍ)'­1›4Ó¹FAÍW—÷jò1ÆzU%9=M=Ó+9 äŠ&ØÜã½Viçœüò±öÎ*[{Q$£wN§Þ·¡&pÀÅ^ÊOGäÒ’Ò7·&%—¬mý+JÜ<ó,H2Ìp+D[ù-óƒ»ÜqS}­•v`úb™æ’™#µBÎNhY]…8Ï¥5¤,~cÀéB89©Ú(ÀäÕIo¦¹_W)G RÒcšB9ëJ8 ×K£xf-KL[¹&tbä ƒñ®ÚÒ k EŽÒ%D·Sõ¨²Kg“OuÂg5waöؾþÒ:V=ß…ÂYIqöLJXZåy¨Øí8ö¨›%¸&•sÐÐÇ`È5]Ù‰,Ã$M¸f¦Ï¢¹o¶<<ƒÖá“W™ÑEuZ  ÊÄgÿAZÕ¶¹Afl2+¤ýÛÂ’G‚¤pEU™›iQ÷OQU’Ñ$F#å|Ô1§­7Î#’j)å/-SÀ ¸«Q¾X«w› S$…H‡wjt­µ1Ué`®Ö£–ÔJ~U\Ê#;[‘íM9i‰nÙäcyÇ"Ÿ§<Ö„3tÇZº³\¹Àó[ÞE¸•îÀùasØÿú³[³mn=ë6{d<¡ÅHÛ­U—h8^•†©êJSG»äÆF+Î¥Q’QT§R$J‰2O"œsÚ”Ÿ—ÞšËû³žr*$qÐS„™8¾r«0cÒ¹ˆB€÷+ÿ µyÅWYáÅß ÜúlOþ:µ*£g¥li·ÆÝ¼‰îØð} i\¼‡ ¬ønÚLªô—I"aŸÕFiR“„çùPÐm;[š<‘Ôd}jÏ=h‰¿x­hª…\U9_sõâ£<Ò¼®Èó÷¨¾ãÏç¶`ÈaÈ9­?²6@cÎO½XŽÒ5 ‘¹½ÅGw§±q$i´7qMŽ3ù¿:$ßq§½wú%§ö~ L>vÛêjñ ñU°Øï¹qžjƒ¦\÷§c7*j4'"œqAæ”t¦±!hOº)߇4„8§[‡–ò(€s^©:„Q: TQÁç®íàSÃb‘(`X°Oz J’ŒØ÷¨u„‘ô™ü ›zõæso.Çlò*›’[ž¢›žhÈÍQÔSv Pƒ* ¹8Ë|B?ñ'µþ{ÿ즼êŠ+­Ñn™4ˆbÈÇÍÛý£W‘3ȧÙã½hCq¾Ñ ˜òö§ÛŒª½X¸‹Ï·#ÝFk: PN“ž•©äˆÀP0=ª¬ðåóŠ«"”V<àUD„°;ÎÑRFɸ'Ö—í'i~59¥A–¬ùA±ÅÙóò‚ÃÚ§†~ðíZñÄ“¨­Y‚ÎqÅ[XQþW@Ëèi$Ñ­¥BÈ}¹ëM!¹G“œñ]ººü½*£¾ÓTel·]ܳS £´ÒMZ†ÚB»™O5zžG§oÖΧ’Ýr9ö§ÚÛ•—b“†íèkE¡hø#$*­YEä ²¢šÓƤŒäž+4ÜɸóÁ4†PAã¡Ü3KMcA8Õpx<V#=i¥rCc‘RQÅŒSPsœæ¥H÷·P+¤Ð¬¬M¯,BIw—äº$»u8Wàtâ´â 0W=EY ã×·JjC¶ìdÔŒIúWâ5òUÄc›œv®AÀ¦u¦S‚h§ŠZB3M ޵ÄüB•^ÚÉAο® Š+¤Òptø³ïüÍkFçîÕ¤ z˜[K7Ž*-¥XJ© 2;1îi‘ßIbÌmäÚÇ®A­oË'îç…XŸâ^*ì2ErHCÈÁ©Ý‹|£µBñ²õ}j´‰æ’›r=kêW†(u^µ§£µ´¥¼ó‰ùAé[!Ϫż{× sÞ®ÇÅÆ0je‹sdðM„a´döâµÔ aד×5Ó¥æHðç„dò÷’ªrêؤ|Z„žàòi™ëIœÑéKHW4„¦¡Ú Æ:`f¦Új0)ÔÚ‹oÁ©¾çšx8­IçYÀ7LìJŒœy?C]E®—zŽ¢uxq¸Jß² .)Ã~0ØÏµ=éH¤*ÌÜVF©£Ë}(+“Ó'½yíå´–·2C ù•>™]€*1×½@äŠXÛ=j\ÒšŸæÅçCÆMp~=R‘ØÔ™?öZ⨢ºý×ÎÑ d8Ý“ØüƬŒÆJAE^¶ˆ‘½¿V„™ùZ«]0I=k)åiÒ«º”­ORkcMvŠA SŒóô®¢8’EóEA$hÇõªº·Ù쬞fP ®;žÕÂa¥s#rÌrsW,ïÕ¼1]%œ¾ÎÏVþ•ÒÛXTعš½$hz¨¨58S¢U\2Ž}kRÑ‘Î:5X¼& ˜Û>+•žS€Šxêj¦Fê•d'5.p)\Žôú(¦žiÍ8Ò b¢yn)UAäõ§F ÉíRb¶<0ÛÆÐ–.2;P½¹u>Ô–ñzµÒZÄ‚#œÖÆŸ“ÆÝ9¨®Ž£¥qÚö¢×W l1Äy÷5ž‹òæ®ÙE š) `pz-­²ÈWjàc$v­$€1šŠN*¤íÏ'ŠU™UsQ¬î%ó`ÕëÍGÏÓR=ÀÈ[=+¢Üy&š`Áá©Ë ¨ÅHFx( ¶IÞ£|Ñ‚© ¥5B$Îx§šiŒHSŽÝªô6r±í °Ï>”׌+môâ¯hsAi«[Ë>v«ƒ‘Ú½8ãpuç=>”æçµ ‰ÉUÏÒ£yÕN*håEáÆ3ÐÒÎ…‡ÊxõZífk2#8ëô®+RE·™Î¿Rk˜yFË¥F@4`KE&21K\ÄSþ“`=Ïê+‰¢Šô]&5m6ÐO’‡ðVØöéHqõ©Úç#hUQŒqN·hüÏ›ð,°Äàü¸Ï\VL–`³É ˆQN –ÕmØÈÓ&?­q”Q]Æpb³´aü1§ò¾ñ ðÈG#4¦.3UJãœÒBÄ8 Óæºb6Œ{‘TäFd)ÅKº®ØÉ$Ò´ÖÒEØxö©P^¦¥Œ¶2ÄÓúÒÑE5ÏËP§ÌØÍ:@x ß½:ùÈÇ5iag;zÒ¬ˆ¤„€ì@ÅoxA7ÏöË…"?"Ÿâ?á]S@¹‘Ž˜Å9ÀŒ/=}MI½Ldç¥290Üt5#¹ª³³áNKËÔ4÷·“«¡ìk†û C+Fë†SƒN¸´AcÀ­dIÆOUáWç¡§&BáŽi“½.y¢¼ëâgVµìƸú(®¶ÈHöPF F¼í]6‘3Xe!x9«·l¥B¯N¦³e‘U­ž‘‚Jì¼È6º+B3\¾¡i7.† ;‚8â³$Š5i?ji¾¿¾ÁŽ/.3ÖGã5ÚéXÒ-|0ÈY·dý;U¹UËqÐt¢`Ä7+Œæªj+3lX}ò{Š}¬F8þn½MJPàžM? õÀë pr:c$ò5´9‰7þÔCr—Q”qÔuìj±ù„«|£ÔWâß±‹ØÖÝpƒã¦;~5ͶxÅ#:©å©C)KíLÉW·jvìkÍ~ 6ïEíl£ÿjåh¢»Ë[GH’69¨LãÀÅZHÿ|ž™­¹'v6=ë>úÇíÅ6¿—·Ú©>…xƒ(Ñ¿¦?U’Êö#ó[¿üŸåW,¦-w Nޤ°ŒVÞ£uµê—ÈܹàTë–IÎÃþjiu+kòUàåHæœ*TæœN - Á4ìRb£$±À=)á»u¥#4ŠZ ¦›´žÅè½}Í2ŸúÿäßÿaP¿ÅÅvÝý‚zý¯ÿ°¬ë¿‰Ou6ã¦m\`/Ú3úí¬ÛÏÃtPˆe@•àà÷ç<Õqâ(q÷fü‡øÒ~ÜõIà?Æk¶Ãø&ü‡øÔ°ëöbUܳ(Èä¨Àýk`x—LÏü}ä6ÿ ½kâ[t·¸ÀàyNsúU™|a¡ù/ùÇüñ“ÿ‰§'Œ´€5ÿ?õÆOþ&§·ñV‰s!Ž=B% g2üØVµ¤çþB–_øŸãV®ï4»]¬ÚÖ•*îoc|{`Õq¬hÿŪYo´'øÕ·Õ4BàǬiÁo´ Çë[V i¨[-.ฉ[ih$ã#¿#ó«fÇzŸ(aÀíNŠ×|~[¨?QUΟk#‘6°àí8­m6Â+{vHåf\äní[/:Ûlã Š#‚8Ðy`b«KlË'ŠÒ´·K[`@ÏÌØõ¥ŽÖÁü°wp*É4îØ=*7PNGjŠKŸ$ «0§Âé'+ùS™7>Ð~¦¤,db –hÙíÝ7õªkj¶èY@ó|äw 0`©R™ã5$m²MÀ}êC"Èø#›*¤±Û¡ïUâ´Ž%#qn)cŽ4Š¥¨Ü0N sZ”äÎcÝò¯\w5‰=Ër¨¸÷5A‰lžôÅ.(£ÓÚ˜¼ô©9¯(ñ™ÏŠï=¶è X4QEQEQEQEQEQE­Š/hs̱& ›»£ üØ*ÙÖôœÈNËþÿ§øÒ gHRÈÛÂ/öæ“ÿA;/ûþ¿ã^aâ‰ã¹ñäÐÈ’FÅvº0 á@ê+"Š+ÿÙnip2-8.7.0/share/nip2/data/examples/2_point_mosaic/example_im_05.jpg0000644000175000017500000010056613224651032022061 00000000000000ÿØÿàJFIFÿÛC    $.' ",#(7),01444'9=82<.342ÿÀ üËÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÚ?ùþŠ*ö¢êº¿™ý™¦^^ùXó>ÍI³9ÆvƒŒàþU|x+Åg§†5£ÿnÿñ4Ââ¿ú5¯ü—ÿ‰£þŸÿб­à¿üMð…x¬ÿ̱­à¿üMð„ø³þ…kÿ%ÿâhÿ„'ÅŸô,k_ø/ÿV¬~xÇQ™¢‡Ãš‚2®ânb0.2 &ÐO=3ŸÊ´SáŽäÎÝ 8ëþ—ÿJß|x “ ð?éîþ.›ÿ ƒÇgþ`_ù7ÿQÝ|)ñ­œ^eÆ‹±3Œ›¨OòzËox…X©Óù}ÿIÿgˆ?èÿ‘“ÿŠ©`ð6¿4ªj©ë#̤ûä“úU¥øy¬3íYçý÷ÿâjOøVÚÏ{‹õwÿâjòü"ך0ë}¥•##ÉÿÄSÂmtËæ›ÿ$ÿâ*OøT Æ~Ù¦ßÙ?øŠ†O…:ôòó§·ÒGÿâ*ðÇ[i ‹ÄãýcÿñÔÿÂÿ©‹ÿ$¿ûe7þýL?ù%ÿÛ)ßð£Çý _ù%ÿÛ*7ø'°gþ ÿÛ—ÿl¨“àÚÛüB3g×ÿ"RIðkËÇüOó‘Ÿøóÿìê&øA´gûwÿ%?û:¿ÂaA-íûHoedPOrÓí“Mo† q³Éw¨€=$Oþ"¢á®…?1Üj@í"ñöø]¤g‹«üWOþ&£“ᆕ–77Øÿ®‰ÿÄÓcøg¤9ÿ›ü¾ŸüM\O…Zu»Ôÿ®‰ÿÄSßÁ^´¶âÎK™”œÏ,îóè¤n•WþÝþ|8ÿ®ÒñTŸð‡h~ÁøyÒñTÃàíËþEþ*—þÿχþF“ÿŠ­ _xvHw¾O¿“ÿŠ«ü=ð̪Xi àãþ>%ÿâªÌÐ,chãÒ-YKnÌ©æŸÍ²qíQˤhQ¿Ø¶$ÿײ…V“NÑ@ãDÓÇÖÙ?™ƒ¥H£U‘?õî¿áWdžte„“¤Ø’9ÏÙÓü)ŸØ(ÿ˜M‡þ'øTsh0L&Ä}-Óü+ìmm&"ÖIùKG©Æzd ãµYnúX˜ü¹ã­cȇ¯\Õ7ûæ›EõÁۘᖖ¬ØeiöÕëÐwÆWw8÷õtîÈ 9¢9c•w£n½(`Ôîô‘š@Áò:ŠB.¥›Bô®GÅ÷ð#Ù¹°rŠsŠäcµ—Qœ¥´ar~f=SµM´åI#È„Äö?áI˜’A$t=©ÒBz¨ÁªÒž9=*kÃcvýÛtö5£ß:w\óVå$Uv ¸óßÒˆ­6N¯¹Xg$÷­ˆÜH:€})̨Ę>Õ Éæ6àY}pzÕSiþU®.BÎUºŠkHŽ»Gz¯ÄsîOi³ rªÃ(9aV<´ » RˆÆÜÕ]C iýã“PÂÞ^?Z½FìüÙXÇ_zÍÔ´í’æÎŸÖ›q§ùqÈ~ñ?0ôôª,¬§=½hÚа-R@6ðÃõ«äˆâT…[°?#|Ñ3(êÃ󬫞GçTäUeàò*î’¡ÐõÆElK[Ií&°Ì¸ïLy²¤V=âŸ4ŸïW#­Ú™. ÈäÃ6®Ç·Ò³.ãò®9ã~•WÓ¿! ðâÁøÏ›0çþºô°£n1FÕ Rd/Ê*8|TÇ-ŒSÝÅ( 8cȱ©fíLóRX°Cãk„¿ðñšý•äqtp3¸V„PEiŠ £ó>æ©Ý¸h™\jË`AS“Un@%ˆÇ½Pg]Øõ­m%‹>E­v /4$1¸Ý´zÌ–åÑ›Ë<ƒR‹·dÉ;Xv¦ý±Àó 9õ«M;¢áO>ô Ù±‡U#Úœ.U¿„ŠÅ¼|÷ïT$°UXí=E;G0eëW¥¹,6¨õ«6r msô«ÊŠÜv¬íIAº :"⣆0ì=k^¨›zÔ‘DgzT7±Çp8ê=k—bWän£‚)àå*³f/ßH¨zN¸  vŸCYònZ„©šÙÇû;‰-æ„dzÖ¤Ü]+™d,§Œt–ˆ«ò§J®ð«)qô®Wı½…›H“3ù@'‘\2ÜÜDÛ–F>»Ži&¼ÜŒvç°éXÎX¹-×½6Š+鯂h¯ðòÔ±Æ'”Ú¯O–£a“YÒ¼ÐĮ̂\z ¹k3Kfú“i=)Áˆ8#ØæII rAÁ§“Æ«Élòg2éR¬Xˆ#±cŒn5™=¶ÂÁ†{ƒXSîÚßeÎìN E¸m95^SµsTŠ#囿>ôÀ±/5ØUëV`åjÆä 'аHòIöÅdOˆØŒŠ ’‘ò±ëUsm.G'9ÔÿÛ’½­8k…ºB§ñ4ŸÛ­œ}˜ßU5ËÏ;É¡ŽqéMŸzxlsœSĬ9®A{À|ƒô­¿L~í×>æ³æ˜Ï3Ù9«ÿ(÷íZ6Ä¿-Ö¬Ïp¶ðî'“Àª1Ë“x5Ÿude¼%0ù'Òœú@X÷,ß7¸ªÍgq;wU5kM¼ÇgR08ȧÞ+¨fnWÌ’CŒ•lŽi¤qQ¨ÚO­nØ!¢“Ö´M©+’9ôªSZlòšàqe^½«2]. H¸ÅWÕb1\ÆxÁýMQ¢Šúoà9Ïãí{(ý½>šË¸`Ó3·å'Ö˜©+I’Ë·Ú¦q‘ÅaqNíIA!FO£yvǽî3Å,r,Š ŸzIT°ÀªR‚¬«©}µz/RትgªšÎµ„çgе,K¸¸ïÅbê¥UŒ`žµOn4e9V"’y^Q—l1Ye°ÇœP½h'=i ¢“<âƒÏn´Ý IclÔÌ£š‘ ÛÍ;­ ëJx§E,‰¸+²†à☃øS©wZ]çûÇZ²“…^Oj®åô¨ƒ|ÝisIŠ(À5³ Üì‘­OGå~µ³*Ö±ƒnуµ˜c#µpvï2·Ì‡¸¬‘ĸèETÔBDé.å žW=kV—λ >îÀÓ&¨ÑE}1ð ³ðöaé¨H?ñįQlàã­E³©8éLó•ŽÖ…J«Ž‡J}Fi?*ñëMvrÄ’z ­$Ͻ. ô©P-¼Aç@—ÉȪSêv‚Yb2[çcÁ¬ßíP)‡'ØÕµž7Qò°'µT¼Ôb·WFoÞž ª°]¤¬1‘õ«RO¶HÀìrk¢H’EWÀ9ZeͰŠ(<¢².n6 À„»qM‹S´‚Ç2³u`9Åh!2¤L|À*%‰ Jžµ{{¨¤†XœCº;~>µÃ÷—z™nv7–¿ëc$ÕèØ‰*âžæ¯Æˆc¡©"ˆ3ƒ àö®7ÅVóAu™´gîßJã¢ÑÞöõžF)z÷#Ú¨øªÖ =FÞt‚ÝOÔînk Š+èŸÙìðž§ÇKãÿ¢Ò½áQ"bsÁ¦ˆO¼ž=)Ï.Ò?ZzÃ#¥(9= #çR3ˆÓsœÞ«µÐ‘~N‡½,sY²i—Síˆ:õÎ? ¤—ØvF9öõÎø†ÓNXf¹òÄröÙÆOÒ¸Ö˜g“PXäÓBâž¯Ž½)…¼ÃíJ¥<G=jXm¼éçM!,Ð9…C))ßJ¥<ìÀ(8émwoù?*ÖŽá¢qò€;ƶl¯à˜¬d„~ÁºV¦¡t,tÆØq,£jÿS\ÕœWHùIsМ×ac˜”É‚M\¹Ñ­õÖ;„ÝŽC¢¨ø–]/JÐÞÖæ•¤M±@{ö¯(·°9›gÎ%­Û==c@λ˜÷ª:¾Š·3·Ê°67zȇOšÚm²'Nâ¦*žnJ×O¦j¶éf±ùEå^8‘ã-jâ(b·+HÄœ pR®[tÒ;ŸöŽjùèÿ)®ÛLÒµ•Í´,@|äh-¡C©ìG"ª]FÈ-s÷ÖòK’¹Ç¥v>Ó>Á£ÆbIO˜ßÿZ‹É<©ž1ØÖT²Ÿ´2}«pÛκsÌ,‹*§×W &¿¬1?¾ Ù\Uy®onWý&åå^»I⤄Pp+‘ñ¡Î¯ý{¯þ„ÕÎQE} û=±ÿ„_Wµà?øà¯bS‘J¹ïHFH>•˺/Ȥý*˜ów0nO¥_‰ 8÷§ƒžEªÓeòȪïbïîÜÆJX,JàË1cè*-Wd6{ÔíÁä×6gw”2Ȇ¹Ÿ_I=ê üÍddwëN©ìâÏó ¨­dÑ ¹ #4d÷Õ[Í}=L‚E–2q‘Á…gIû¯õŸ/ÖªÉuÙ?:»¦\na½°ÊzÔ“Ý´w c ³>k2âiFb:úUB wǽhÚ1øÖªÛ‰bÚzö5Y e}­ÔUæF™Qdv;>îOJÛÒ,ÖnK ã¨#­uÖà1K¨êidÒž3þx®B{4×.D·²0“<8ÀôúS¯´hX¡´ 9ÁÏâjüv0Çn!Ú;ã½rþ'ŒÙËnèH㹂Éup0–ò±íòâ‘t-FFôž~cZZTÖNL¬w`:V7Š!ó„’ X¹ˆòŒÖÞ‘¥´²‰_Šö{ ›{}1E àw5‘<‰{3I" “ÔU­44lÊA^ù¬Û}%f»Ž=§i<ý+¬ȤA´ ×7â(LQÈ9ǵPӗ˺7RÀ^ÏŽÞº2Ve 0`ëÛ¡¯?¸²HåpØcU¾Êe¼±Ò³d½²4 „¸=øÉx–fŸQÛ¯”êkŠ+èÙéÂøZà ¤?øí{3 wc ïRƒ“A£<ÑE¨ÜHDáA"¬B® fµ¼%0Ɔ"Cg9»oâÒÄ–CöÀ¡÷®vêâ[™šY\³±ëUd[Ç*mÝ·ç§jè-—ÊVG .>cЏ Æ* émí¡ó%Dvp ÍrÒß]Ép\°Á< t­‹S’²0ùˆäÔÚ¥€¸±ó#ùeC»+Þ¹[HwЯi-哜w®;KÒÒâ,—*Àö±©™4ý%M›:ʬìg"©[ø¯ZX£†gYaS÷Jàšé¬uµÄî¬9©otóFV@:ãŠÓÓm’[#$sì+vH­£ûò*ã¶kV‚×PòÔÆ]blƒÓ5Bl¬f?/ãŒV 7-ivöÞfÕaû²Ý«œ›Í}Eá|™7ÖÀ!PvÖ&¡3dºÁük‰ñeª[5£/;Ì㜠stQ^õû=°m+[ˆ®Çü«ÛcEAµ@JuG$É›¨~Ò›SšŸÌýØ|SVáx"ž¬¬Nb¢4„‘óRÓX©$Q¨Hç…q^#Ô™µŒ¡S¥so*†s†9æ³õ sld¯ð€{Öt`*z 'O>•v,E庚ÚE*à ðA¬Ù,wɲ!€OéZöšQ(TœsÒ¥¼Ó‰·rG8Åa\éòG {æ¸}Kå‘öž+žºÜÀתhÖŸc°²à ƹöÈ«ºÙ_ôH[þºüª­¼Ž•t[ì {æ¶ín‚ʼn[ÜÕkÍQ#âò}OJ¯g©£—Y› ÔVÞ}m&UNÙ=R=©÷89VçÔš×W‹Ëa0ÄŠ3ÇñVMåãÞ9‘Ïû£Ò«F $§ £$ž€VޡŴsDIFSê+Y5(Ä[väc&³ç¹/lèË–Ãix¬["ÚÞóe³sµ»UBÕ‚*4.{ eË¢ZˆÞà…FH=+=!}ÂH²½Á¿`ÓIk½€Ü;×Cb|«@ÀüäóI$ц,îïÍeê:²Â[°/žIfŸÛ d¸Ê6;r `ßÞ-Ê;ÇóÈn¸¨´(‹\›Û‚N>EÏó­÷(Òª…šÇñG•g¥K,JBB©úšòýzâiÅ·šû¶îÇéXÔQ^óû:°û¾=$€þ^à(5Fýâ5ËçòÛ„‰wœ‘VŽZ¶£ŠûÇ;Z–8£™”`ž¼ÓÆÞبîQ䄪>Â{ÔP[*¨‹‘Ôž•/É@úšäõûQ3“…Fë5ʼRÃ6×+žØéYz–Y•{“UT«÷jH#Ão={RÉ¿'çÒ©›ä…ðêÇéRÿlÙ†C‰Õ·gâ›8]Qv݆FN=t³jzN¡§ˆù2±Wàúõ®cÄCì–äü)­y­ì,ÛÜF̪2Ä …õq™uh9g{|ÚC5žÈ6«…3Ò¹ájðLVe!óÎ{Ñ5á‹å¦‹kôša¹þoCZâ2À1éTfpÌ@éYr±IXƒX×:Ôrb)$óùBu­‹=jöæÑVñZ9ÿ¾ß.곦j“I<É1ܨp½l,‹ Ü‘ü«ÅúÂé­gh[ýs/P¾•GÖc¶Ñ¬£6ò¨ôíI/‰î%¸¥²/8$æµ!}Nã1<&2GÝeÛùæ¦Ól&²Õdyœ9eá‡CíøV­ÀÞXú¡ «nÇò¨¢¶D"0>R3ô­+T¡`u©Öo.#ó_SYsßBÓ‘»†9>õ‰})—sdñï\Æ¥)ó°½ÔÖi¼’ו‚zÞ·tÍNi¬ƒø®šÎúc‰›å¤×I¡ø{JÔôÅ¿‘ZYC`_åolSŸKµ·Õ­Ö+X–)$” ÁúÕ­SM°U8²¶þ¹ À6£´‚Õ{mP2k:U–97Bút5—-¼¯;;IêjO8m ù8¬hХƵj^ q($žã½zº\‰{÷¡íí%Áx#'銉ôËI:Cìk˜Ö4ãkr|²]p $zÕfHò'!÷¦¶³ÃöuÈþó…fÉu-ÃfGcYrÜ.J«|۪«úßÎw¬R# /Ý^õÏI%$6’Þå©4÷Ш2È Ž?z~56›Ÿm´-@p ‘íýk£²½ùŒlzô­8ƒÇ>†šúŽÂ¹#Šçnïä¼Ô&,~ëm ÛŠÎÖ¶%¬R¹ÀRWëŸÿUaC1šL(;{ ܳÓ.o:!t,GR})-åm€³Ô÷­e²”±ìû£½p¾-ÓþÇz’H ,Ëžq×úW9KìF'€M_þʾ} ­¾îŠçæü«¦ðÎŒ¶w«t³ÈdÚG ÁëZZý½¢êÑK4¹x†K¸&¸_‰–vÉ¥=¢ly¥€bGðcù×Eí?³Ü1M{¯ P6#€ŒöåëßÕâáqMiT&ãÓ¥L²”0ÔSØÐÓbge&EÛƒî)¬ê_Èèi«oµ‰b¤w™÷Å;õ šå|ai²(¯Ñ›*ÁvÕ 6äáNjþ·¤Å¯é Qö„ù¡oOƸ ;J»ÓïVä‚’¡ÀSØ{×w-Ì (î9”ÈÖ8¤9žõ)PÜ©Ui“Ž5©¥Ú‹[rØýä}¨œº)'šËy‹J1QÈÑ ò±Ãc·ZʃÄ>]Ä¢ê "1ã×ÐÕvñ$·H"r¨ ç+ßëPM¬˜•§–RUœ“Ó•ÊEªÍ«\M<Ã,[Œv…tðåÞ·;yl"‚3‰$cÓð¯MÒ´{- –éºR>i[©ÿ Ђ¸&³VÑ!2³I¼7¹ûk¸tÿÅo,ª¯6T)êsÈþU¹7‘.ÂrzÔ7“¤)#¿  ’G¥yî±ãKeóÞÚIHð ÿZà.üQ©Ý1ò’8ÑFOækOÁ:­âxªÜ]]Hé0hÈcÇ<ôü+ÖäAµ®AëP³przp3\>£«ßZjSEÅTl)Û“Š…¼AªJ?ytÿð—ùTÚR±ËÈçÔ’MZ±¼ù’g(“äãšÕÔ"Ký?fðNàÃoÂZE“ê‚;ÈI ¿':gÖ ÓåòX«•X»á §9®^÷ÄÉk–¶“s)ÃÕ§á}}5æ‘%0GqùWÌãÔ Zì‘JÇ“Ç §,™Î*Ï“b±`@>•ƒ©ßÛ@Å`¸×?¨Nd”a384Ë{q<ÑÆŽ¨©uo\\Àa¶¹C܇È8ü*Ž“¦_iͲâÈבúW¢iV±iò$ÐJKHŽ¥t±¶Õœ“Þ’i0¤æ©M6GZã¼B¨Ú¥­úà|7qr ÛʬÞßñ¬OEÕ,£ýí…ÃÑ£BÃóÓø ÇQHî–öÆX`p «·'¦0yéí]üé 8u>•æzÇŒ>Õâ&–Ýoyqú0Oãþ©/ˆ–æ/ô!€G,zÕ¼É\‰ bOSZöVGp8âº6È„ÞT`ð«b&{o´"Ëå ª¿k†qû©ùÇEO >sǯ¥L®¬X+÷KYæg±OÞÿëW?¯h6ƒI•­Ô›„ù÷“ËÔT¸tÔþùûÄŸJÒ¹XnU MÊ9íZ:EØ/™>CüGúVÌó©ô4Å•¼¼°Ò©ÝÝ„GÏ8\‘ë\½î¡ êcò2O|ô®·AÓΛ¥+:ây~gÏaØSæ"yV" †`1Šé­®£PsNÕ~ vÞܲ4R×wÏøJ´K™5ÚÆÝ>qùÕåû5Òa$ŽEaü-šóïX5„ˆ£ç…òØþïÖ¼Úò8ÖBcàUCžüSNžnYZ!ûÃÛÖ¶­4WŽ0^D¸ë]>ŸáHd³’äÞ«²¡!t®Å6ï ä"(ÉRzþ½`k×<[IùR óÖ>¤URÒâ Uy‚….¾ dQEz7Á‘¿ÅW©ŒæÅþ>•ôV“cåEæÁ~ŸJØUÀéHíŠCµ”LHÄ{ØsëON‡ÔŒ£“œ©ëOÉVÁéJ˺£h8ÅHà ÕkÉ)ŒÖ=äÞrì#åþµÇêz…’XúÜH„«!qÔuÅjVЙ<ËyŸ™Aû´ý>ÂãU¹[®r@Üxë]m§‡ÚÆûìÓÅpAìÃÔžÕÓ\4Z~™#€GI®Uµ›T$0“#¨ÛPI­Y^°˜î Ü~è•ã¸ëŸzá5¯†·V¬Òè³4é×É—‡CÐ×(/o´›Ï.â'†E?28Á®û@¹¶ÕàDFñ÷—¸>õÙiúk»(ÆTœf¬kz’ØDmmH‚ßÜã\}µ©žä’XrInÿmØi% hœÇ'Õm.õ­DËn^YXáb‡\ }¯…5” ˉÛaŸÊµ¡Ñ&‡dËŸA[¶:7‘¶yFIö¬¯É x¢LL“zç#Š5œ6ÑœÔèFAë‘SZG8.~ZÑ_&Aò°úf²äˆdÈ<Õ‹4Ž"erdø’ùo4é,âB töü+ʵKkˆó›rîÀ#¥fQEz—À6ÇÄÁï§È?ñô¯¥Æ(àVuæñp 9B2bj:›G|±©Âªô«Ú°D2I(HÔd–l ÇÕ¼k,Ù·ÒÁQÐÎßÀcèדØjÉzîÎÌq&ã’½-nRXÕÕ²¬21R«=i«:;F Û”†~÷™j‡…QôÕÌÖóå*FpExž°¬þ!ÔOñ—oÖ®éÓ4nF8Ùé(í̓¸u®òѾQÏã\·‰lž;ϵÆ3ÜýÒ1Y[ƒ’ï\÷¬ií!.¶çrg§aW´èHb²µ%kñè°8û ©ßtÙûÇûµ¹s¦,*j À鎔åc#–nKµ’—NrBÿtw®‡NacÁj«}ÕG¬·%ù¥yçÄˤÒÎ07ÊL²`cÀþµÆD›`ϯ§¸{m̹ w ˜@â® Ï.ÙÔžœÎY‹Ë…>ù§HÍ·ó¨È“vÒGuµŠ•¬@û–ºmÏìàܲüì;öÓÛ¼Œ Þ¤hb¸ùœbAÆáÖ±5Ó5¥£†ÉFãzô®{JÕ×Y²}ØUúœZõØÌ‡äÈÍfGŒ™¥Q‘÷TÖ^©¬H™ß/°¹âÂY ?9©b´ŠB7 ­$–ƒ¢j•ÄWHÃc(Kí;òƪÍ,ž{:îÀô¦¥ÔáùfÁìk3[ÔÚ5Xá¤c€+™×Ü=’`™Gàk¢Šô?ƒ½¿ŽËFØci ýV¾”²¸Îfl)õ«~nò}*ާ}mi@p{W ¨]‰¯žX›pÀ±'ži܉[€xQÚ¦·¢åˆõ«°3‘lWgáûö!ºŽTÖ”×qÄ"X; Í:••¶â<ÐÀuþº©/‹leER³p£ΪY®®Õ틤`c :šÌñGŠaÑol¾ÛˆfC™dŸNµç·–÷:ÕÝÔ.)%.¬;ƒZ:^naËó]f‘M:nÀ5×sb óˆ_CÎkWÕ¦’YYbµ^O¿Ö¸Û¯4òù1# nä}æÿë{Vµ„+2+Ä SßΠñ^¨¾Ó B?Òn~HWÐ÷?…yÝ…ÍÕ”ÂxgtŸ;‹ɯBÒ+XuhLª³@K#¹ï\u–4ϹÆÄõ= ém¡û¡Hã,:œu4‰~Q¶Œ¨þëU«=OʸÜíò·º«î/×}´{ÑN u«3Y_Çó iIôUÍý°Œ˜&‰½"¹OÚÜ_X,Òn/nr»‡ð÷®VÁ¥²qh_øO@k¥ÓJNÛ£Éã §kÏs§=¼|Æ Çw¯>šÎxä  'ØÔ^\ªq±³R“÷mËœW}o¥ý¢?!ÔË·é\Ì.ú}Ô¶®¼ÆåHï] „s]H»…ëÏÔÙÆc÷ÊÕKíZÖÅX³n ð“\³â'’F6öûAþ'9?•d[Z_j`Í+°€N1Ÿa^™£ø²ÃNðý¥ŒâC4cfÕ^íÍfÜx°Ýê1YEjPÊÛCJÝ?*ŠãGß)ydU'¨EÅIgavŒ;1ÆpMiGfp1õ¤kV–mÄgµ,º_k$[rYHZóéÙ¡d0;M,1®>vÓOY³žöÐÇn™Tù›Ç¥svÐ0$cÞ¡ÕaÿC$ºÁ¿oëXTQ]‡Ã-U´ÛݬbLE"•'W±ø‡Ä‰«¬1Ú«GœïV 9ïH:Pz`Q#'úÔñ¾ kÙʪ8ÅtpÆ›,ÑJ"‘”ìsÎ=ëˆÑæ½¾ÔZÞÖf•ÎKsÇ©®¾+CæI‰&=XöúV.©*¤¥µs®Ý¤0ýk½ðN¯o›$RL¡ùR;z×d—2° ô Ô‹t[¡é\ï‰ÐÞºFGÊPƒ\í¶ [ùRâ® _³Y˜`ÚGðŽOãT%„ùsóŠÂ½Ó•vqÎ fù*îv®“MÓ`F<Œf·mU °ÜiñéOÚ%¿ž/2v†kõ$iKÆvc¦8 jsAnVCæv;«˜Ôµx$³±F5w@ðœÞ!ÅíÂ4v x#ƒ!‡ø×I{¤G b8£ ‹Â¨„tspX ´Ó–ïnêŒÍƒ¸•ÓOo½Žr eCgv5åHØ*¶ >•ÚA¥™b ò.;•æ’ãL0XÁ9M$‚ËNƒÌ¼¹Šõ‘€¯$ñ¶“ë·-§J%·vÜ Žýê+-#Pºæ(¹àW]áß ^[Ü4—M—:æ²|Yà¸ìfûtÖÞVùÕz®Ä‘C¤Nʧ#o9ÿhWE¿àÏù­Çª¿þ‚kÔÕqÍ8óF8¤Î:Ó‡N*EFÆEX·˜yª²«žMjëZ²[è³,m‚ë±{u®7Ãò^Zê)}fá GÜÅzìwv÷ö‰Â³õ8@x¶¯$Ÿ…bÞØ˜\H:?P;Û·qŒÌê*Ä&"»Ù‰>•?Ú†qÛµUre’EQ“Ö±u>be¨è+˜¾Ñd½„ÍLàgÞ­/xÒãEœi—‰$Ö,Ø)‚Zê=½E{ ³Šä,ñ²¼n2¬;ŠÉ¸Ó#Žå˜&ê=j3…P¹$ô¨Ëc©«vÚ»Ú0ڻ׸5K^»¼Õí¯®,0Ù-jB³L‘œW—ê¶ÒÅ4rË,…NHŘŽÙ&«é²}šùKçËc†ö÷¯L²¶ahª¹úŠèí%‚ÆÍ¥»œ*/÷'ØW ⦠æÊ1[ #–úúWœø’EþÊUÕÁÛ‚#æÄQEnx?þF{Qž¡ÿô^ªjŒŒÓ•§Rµ2r;U¶!@â¡p™Éâ³u8çÔb€4›2ìgŽ™©ì£Ö«~§ëS‰Êerpk½Òáÿ‰«1ÿ–y$Ö6¡®Ålå-ÈrÌÃ¥1V ø„ËÉnã­[€y1„M¸“½kŸÔÒX\7­W{6† ù±“X×å-¼™ÆqÀ¨muv å U^ žMYÓ§}O[JåÒ>A'=?úõè6ŽŽ›ç¦*ט ÅE-¼r~ë{W…jWâMBy²F?©¬Ç¿w|&zⷬÓ¾µÒø[Äh>Ï1Ývî¿Jëõ·KFº2(„.wW?ÊÜÛ¤ñ‚òF}3Šš«“¸Ô«'¯¥fÝß"]´Dãn`ë0-ˇ*7Ãõ€,œË·õ>•×Áâ!¥é‹Df OCéšæFµwsª\\ßN΢&À=9à~ÍM}ç;Hz±Ídêrî³gÓùŠÁ¢ŠÛð>(³ïÿè ^°«…Á¥Ç¥48ݰŸ›Ò†ËSãÊŸ¥Yi  NÕVipÛYOÔWaá­,Xi¯y*þþàq‘÷S°üzÖ^¯ #:(I íÞ°ž'>gZÓ›Z»:\6FB±F¸ã©„Ö·GZv“¬Mk¨$h¦Hå8dÌWK>©,%¶…À¬k¿]Ä*:V,þ(ºó‰ò£ÏsZ¶>$†æÄÉzȲ ¥gêÖz¤ñÄX•dcžßʹ?´<`œé´´ ž¹äWci¨%¼{¤lãêjô7ÁX–ç5j+è¤ÏÌÔןx“@Ñ$¸zu°K—;˜£c€iÖ_ ,d·Cý¥2\‡` ®}‡_Ö­7Âûý:{kèu8nmdiˆ£ÏBk¶Y£n‡¯µG,k»pªÓì$ôª~g `вd *XâÜ2*_:iت(Üp2k™¹Ô£Ônd¹… &qŒóÓ©¬éÚI÷&²]ŠHA¥šó-×­mxvk§»Ž6·—nAW*q^„!ÂîÈéY€ nðÆ[sp̧Ÿq\˜³Š –8¡PÄ…d×Bº ‚èH%$uÚGzÓš/´YýžbLA·Ï©-$´Ú0¸ª ~F"ªî ÏCLKøâVó_Îq\sHŠN÷$döª©­Ï¾xóÊžßJصº·Ô#ß{¯q[ºo‡%»>mÖc„ò3Ô×ã6}÷P#É §!Ç÷}½qôÉ5ÅÒË(Ï5JŠ+oÂ')±ÿy¿ô^´(¤8šnê·mm$€3»¥kdICjî'“Ž´ºf„÷ºˆóc"(Æù ¥t÷ò„„ÀéJæn"Ãos“Ú±nŽæ9¬{ËÑɇ ÏWšîaC$ñì+±°Ñ-ôûF‘¤Ý3/2AíX7+¸ŒqÖ³fy•î<úÕ½?ÃWµ²Ü¤‘ÄŒHù¹?•tv>²hO¨H[9"5ùæ¶tßh62îX^Y1ÖG'ôé^mãû/ÄÒ¬I²Þã÷±€8ê?<ÔxYcP䣎›9¸lïäHÃI”^™â´^[»k,±°í zU&”ÜÛùM9MÄd¯P*ÌKi ³yɤc–oƺ-ÝîCÉ´žHZí-b‹Êá—;»×;®iÒÙL³Û Û1ɪš¡öÝj)HFqQ¼e˜2jD/•ÛÉõ¬í[YŸF¶yV.¿.îŠsÿ×­? É2Ú}®ñËÜ\üÍ»²öýj5ý.ÌI¶p¤i>fÁ€O®;~”ºt€áGÉŽ¢¡“ÃÖã÷®Çp1W,¬lbûFèHÉ­ëKVU%ºö‚¶à¶Shd9'¦+êýë*=»VV¦´Ú—Ú]~H²Aíº¶f öª³^CÌ’*Rk?OÔí-¾Ô^lFϹ=ê)|Ag#²¦ö#Û–Ú©[’U1ðI= VÖ/¶›q&:!ýx®-²B¹P8ô¦A¦Ü^Ý-´ #ÌÇ…פxcÂVú*‹‹ç]c…u?ƺ™.U‡ X:¼ {Dü÷SèkÍu= ¥uxBÈ7/®BóK’Õ$}Àª6zŽk>Š+g‡'±ÿ|ÿè&½o"–šý)‘! ŒsW,oîWPŽÜ"°#µv{Y8‘ œw­‹â··12nÞy"£Õ`ŒÀ qæMÃh&°5mg¦Mw$Níî1£rÞ¼¢_Kw9háXãÏ I'ñ¨áaq‘œ7Pk ÓR;hð£,ÝOsZë+KÆ9ÇJͽ´Ëy˜úŠÊ¹Š_½Zš Ô–ö­16@®žò ‘$8=ªí£^%äaÕYOSU[¡«ÑÁÛÌø·Æ0x~&´²+. Ãöëïí^O«yk­¦¨ò´“oÜìÇïâ½²ËÅP[iius!{FPÁÇ%Gz»ªê–VÚGö&…Çï>‚¼Æ}Bk›ãpçç'#ÛÚ¶í¯æ%aü=)í{s6è4èÃËÐÈßq?Ä×472ßI5Þ瘛=«·ðKKsö¯žäÏaÞº–· HSÈïQ_ë¶Ñ使”/¢ŽKŸARh^!Ó|K£ FثĈßyÐÔ k–'ËëÜU;‹EA•sô5Å aÇz‡^ºÛo 7÷¸ªLÌרç…ÄêZ¦5[°+Ö³oõ5šÆt,rcaúW!E§áãiÿõÝ{^h¯ê犻kz🽷ùU½CÄOo§Ha@%#ºŒšóàwgó bç$ž¹õ¬IãýéU9 Üá@É'ŠÒ¸-ÄQäEÆ}OzŽ(až]Å7cšë<73é°È¨–nôâ½Â7)z$`·CÆ3Þ·­ÞÒ[×€L¤!Ã(=* _]ÐôøŒou˜½?˜þ•%ÚωQIVäI®­ì k«—Xc^¬Çüæ¸Éüm}«jFÏL¶e´4¸ùˆõ=€®Ë@ÓÎÁu,Í.Ë“Æ~•Ó[\²7–Ù)üªÌÎëÅq¾&»–æ™1ôÁèkoÅr>É8˜àHz5gMŠ_ö[EBìC¿Zéítéu+ue(¹œdÕ‹O\\Ý$sH±FÖ_˜Ž+²Ó´4ûµóž@™çgšÓ³‚+"ÞI`®M>çbFef ’ÇŠâõ_¬ŒÑÙ¹àá¤ÿ ÀþÓ–Y ™™°3’sSÙß^´¢==ä xõü륷Õ.­×f¥R:òÏÆ?ÇôªÞ#ñBC¡Htù±tä $rž§ò¯%‘'‘Yæ,Äœîcɧ,>lvçÖ¶´-G)&9Ìn ŒÄö¬%šæ ÖM4†8$`ª[€}E­Ojøp$\wãõ­mY†õ™PHĢ­uWÁWj6ôQV¿²Zü ¸ÐìUð=1[z]‹Y\†A° Áük]ˆQë\‡‹fµ¹U·uJ>öz(ô®[HFÒ¯Z[Feˆñ$yùXWhš¤sD¦ÁëŽÕ7Û‹ ÕZkô‘°ì2ô¬÷µ Èœ¸*ì’胞+’¿øk©M{qt·ñ„–F|ÎFN}}ë™Ô|)wckÃ4Í3B¼ò¤Yb1¨|†aÚœ¶YÏæ"†”tb:V£7²J¤ç&²® óTƒÁÇZÚðÖ8³, •³É=;Sø×Y…õ/±Íx&…R$.O98㊂ÝFŒitê„çš×WÎë©yÿj¬iÏxš„n²H﵇$žÆªêl°ÞO9¬W•âá zÖ¦™¨¥¿Ë(Ú§JêíÊMº°+Œç5(Ð…ñK¿´)‰Ôl 3ÅZ‡F†Þ@Çq#¡ªÚœòÙ4o.I#$g‘=õõÈ>mÃíîÀ®wX`4›áœþáÿô^[E{E8×´óÿO1ÿèB½˜ØÒÒH$qÞ¦8*Sn®šöQmn›‰àw¦Í£#Oï&¤³Ð¤¥ÌêBg*zë4å°(ÆÖ'q§j!·±Y$•ñg-ÜŸAXð뉬º‡Eùb@GËëÅV”´ŽxϽ:+c¸f²uÛ%µ»iúDë»>žµÂIâ ’þRÑîµ' ½ÔzýjÄ“ÛßÄ»WÌ$`{f¬¥º| '9Àéþ¹žãM[[µ"H†·V_Cî?µšÙU÷Èî)²Œ©â±5o)âFûüòóQ–92רønÝ4ŸÚäm’àÜz–éúb²¯§2ÈIàU/).J£¾ÅÈËcµm¥Ögn#Р ýibÕl«‹¸X瀮 «S^z7³e¼`ÍÅg_]™-$_lþµËÍËî³áÍ0_HZWÄA°Uz±â½ëO´¹Ñ¾Å,*°ñµGbZÏ‹O‚×(°Ny=jF‚Ö0~¼ÔF(Ó;GÐVV§½-Ûé\ÖÔè>¦°¯ãwPëÁ#ªÛ3º¦ì³3Ž•Ùéw¶úUÂZ,`‚7î=벸ÖaŽÂH¸u’2ŽÙËà s®PƒíéR¥†[8â®éöþV¡ È'ù‡YÓíî%yvÉýåêk“¼Ó¤Šé¶fcͰghõ>•=ž›»pp ðÍt–6u•·VDÆ gÔéöécaª9qÛ¸ýsRHr+3R„KfÜr0®^ú•8SÓªÄߨ÷Äö‚CÿŽšòú(«šAƵb}.#ÿÐ…{*cw%4¼ÒF»›qT:œòChÍÚÃ8¬‹=gQ±”É ªŒPŠ»ÿ ­'ÏæFß𠻦ø“W–îÞÑÚ/)˜)1ÇzêfºX™‹1$óÅy·‰µio.¤…Iò³ÂÕ?Êc½6ìÄ$¼¨®âÞ)0fù­Khî7» ñȧxŠÎ;tWO˜ õö® ãÃPÍn'2HåOô¬›}.âƒF¸ž:W[á‹Û˜Aw‚ìž%“î·Ðö®È@ÐL$2F+UfŽH<ÍÀþÕ›=ÉŸzÆv(ïÜÖeÂg£­rzžŠ×ší¬Awpá[Žž¿¥z5þ%L…UTW9r˜rq“Qr½±X÷úÔnƒ¤‚8ÈùÆ9ü)ãLŠÒ!)Ó«§ñ®‡O†W*³«*…#q•Fmþc¸ôïU'B0'9ƒs‰ýs]„åh­¥d‰™„Ÿx.{ ì ËpŠâ7 ;x¨Ûæ=j ä¤ãÇëj¤èó@è0If¸ûÛR$;—þU™uP ç"¨Ú[¿žÒ[°µÓéÚWü´•€“°þítvöVꤲïr½Z¹ñ ¶×Ï#æ']D6l!_0|øæ‘-ü»„“€¬?^•$[ƒžíZ~¶þϰ–öšâí²Iþàè?™ük§›Ãš>ªéqöq€çt_('ÜtªóØIi˜£ ±zª±ÕºƒOÁnAsP®xÅeËÉ!Jçuý4Q”»me'ß kÅh¢­i§­™ô?ô!^ʇ¥<ç·¸ ךx8SR­qþЮSR¼û,©xÝÕ¸¥¶Õ°ÊJcÔv5ÚxrÞCRµ’Ý’=8®Z±7—æm'ïmâ±µ?"ÂŽ&D.7ã\õ™ÒïA;„Ñ6F}EzE®¡¦&“¡q:D’ `§–úÔ×5©øúY.E¦j#È9–Q“P½¿än&Õ.¯~Õ=äí þ"ߦ:bºm Ä9‘-.ã!˜á]G÷®¶ûK¶’’0‘ü=ë=)¦¼ù‰î: ëU"†Ú;xX‹·vsQ>èRß/ZŠ Ê䎃­9âäÕi.cÓ'` )ùGsUæÖ’ì–—)èALŠèMÔ‚½Hð³ãhãÖ“Éò»å©³®èóŒV¤¥Âgûµob‘£?JU_øò¬ß]é6ºqµ•ºq”D©õ5¤ø–{6ŠÙ£óˆPïlîšO˜têI«Möyiþ*ÂkëynvÐxb:Ñ,Š  #-UfÔRÞ"2Î8³#š Âßi*¬ý{V%Ö—r/¼ˆÓxnUóòãÔšÑtÛ a™f8ù™z{ŠÑµ˜<€‘·Ö¶­Ýðié§Iý©Ç’_ŒqÛÞ·þÃ#¯$ ÂÔf†ÖfŽk„R¼â¹[ûÈnîE¼ ¸±å‡¥mÛ_¢ªF ƒn+¯Ñdůš[;ú}*íØG•ûëú×=¨\}”F]Fç<éT¥Ôfô ¾Â«ý²IGRE5eg< Voˆ¤ áÍQ3–û$¹ÿ¾ x-U‹FÔÿÓdþb½¤)4â3HƒNÎ*¦ á ˇ5çÝ»é%cŒ·Ú´, yæªHîk±Ñ’çM»ŽâÝÊ:úw®ÖF{‹TiIfq’}êÓÝI5œ*ÈÇË]™úW+­iö—7 5Ê àcú×5ªÍR€1Y~·ûN¡s;)+qøšÕž4ü«ZÞоѨ4̹HF~¤×k‰FîÒ‰lðŒWåb1‘\íÅÔ¶R¾åNIÎ+*·,±’§¡à×C§j´…Ê·9iÚ®¹i§YËoláPzûúWÚ¬××&i_$ž`=+FÓ ÎkBF ŒzWAjt«*‚X—Hã"(ÿ˜ZÎm:þÝ\Û²§ð¶A¡¢Ô˜~øÀÆ9©þ8Üd’;‘Ú³îüIµš8¢t-Ü׬N%º2YˆükoÁú{_‡»¸;|¿–?s]EÍóY(Gb¡};Õ 5©¦ÚÄáðç­[€Ç$>zœ¡ä…A,år㨦ï᳑žk˜ÔõhÕÙ`Œ–«p+ [Û©ã3e8®‡Â±Í{ ï;–T!W"»=Þ4JÅóÈ€*ò‚A³AWífo´ à†â­j:•¶› ™äTiÕÍy§‹ne‡\tÆø™ynÃcÍ|ç€QZZbÍqs <îvÇá^•‹ KýÔ ð\“ž+ŒÖ5¤»Ô‹äવW}D3OZ×ÓdY`cÁ©¥òÐò f¹ÝJ'¼Òu-×t’Á*"ç%H'Þ¼6Š*k3‹ësé"ÿ:öúCKM"±|H.Fœ|ˆÙòpvŒàW%eb¯)b¹ç½uÚ]¤jv·Ëžø®ªÂÉ|õèÊ£&¶²})Vàq×­ZŒÅuú‚3Yš·†´»¸ëH•½W*Oå\¼ze¦†³-´n¾kdï9üª40N~R÷Zê4-JÓK„Á4,K¶K¯?¥uOgx¹‚dcýÜàÓ&³vnÁxÜ?Lqÿ-'mƒéÞ¼þÜãº=&âE"%loàWSŽ—6²Å8ƒ\6±¤Üè7»æ¿Õ¿¯·Ö§²Ÿr›­tzu¬÷ *YÞ?Ýú×]f«^½Ï­h,˜ÁQñ üö–¨‘ÂËÔŸáü+‘–îGS»aUVc’zV}ìdfEéßÚ°æâî4²ìvšïtw–±Â¸8­KëX¯­ÿ}ĸÊü5€Ö¯yoÔ~µfÎÝ­ e.HfÝ·°¢c˜­DÐ*¦rkR´IA=Ö°%CT×uá8…¦€²ÉæeÍj‹Ò£–$}k›Ô/fŸTib•Ð/Ê»N+EñöäˆÖ`½Ï¨ê÷’kWÍ)VÉáÐU]KM¾µ¸‚V"†X‡’Íè;Åû25áXÛ:zÖ¥¬×²‡!ÇFk«²ÕH”JAs×çõ­~HÌ‚ÚU>ƹfÔfåØî)‚ò]û·Waák—šÊ]À|¯Áë^à4±•^[µeÅÛm[…19ìüf¼Š*Ks‹˜£ç^àM'´êNõÔfHˆ¡á­'MÕcžÎê—)ûÈå_•±Ð~Õf_µ”Åca*ã¯åVàSiqËsŠ“í "äñPù˜ã¥Iĉ.cüj iHÆ2ã®kœÕõ&™‚1žjŽ”‚K°Äò¼ãÔ×Ok»“a·lÕÿ³½‘Ç<ÿ©¦ñÖ›c4ûìH[kóÒ¼Óľ'›Ä³A3À°,I·bœŒž¤Vl`ö®ž×OgµYmØ2ž§½v–cmäÜ/ÌÊÙëZºÇ…åÕ4ݼn¹Æy_zóí/Áz³kÿÙ²Fc‰~c;—oø×®éú}Ž—f-mÔž¬}ë.îÆX$/dFÇ€9Å[¶,ížîð…T]Ç=«iŸP<«òÈ>E?½«îÝrÑ“Ïf‘5´¨Øå8V¤qÅkåÈ¡‹›5•{¢‹)EÜ1îCÜu­§Åò$Î88 ½=ÈXË qïYÂF˜™&Âûö®C š-èÛÔô Õ9ÕÄÈ£¡<ÒÎÚü$g5ÏÝ)cƒÆN+ÓïíâÓ¼?§Ûª€é \ãŸÖ°žV žj—ƒžµ=½ÍÕè†;8ÞÇ ¯AÑô›kFB<¤òätúSüQo±fÖïëóFÿÝ5åñéä]ùr`×S6”¨ÃÈÇ#½E ±v`•Áãç:ô7Zf¡$3+™¥@§8RxÍS‰¦”|¼þ5emîÏ݈šô¿AiOöÈÝ%3Ó×Oah)¡_›vrZcƤä¨'Þ¾N¢Štg¡ôa^åÔf˜ÃæñÒ–’c?Ù58eÀ6= v—RCåQŸSÖ²ooP‚ª¹ÇsTã‘^9©b8 ÓFŸï ·å¡R¨W¦Fk’˜¼‘ŒòÕ_älE?QSÄ"B ¢¥Y[Ö‚d•Ý ×uº°ŽbÄvL•ƒ©Û½ pÑ—Lvçð®:ú 9£mÐÆ„œ–UäS[I´hƒÛ’PŽ ¶kKÃv¿lhíÕš>rGÿ¯]•µ¨ãŒ›w"»iˆŽØx ¬† -žOòª²^2©Ue_=}kR¸¾×5HìN·Yd#‰[²ûãüö¢êÚSÁÝôNâÀÃÊóßLC±ó×ÐRXàI«ö–Ïä‘A ö§Oa+0ò€ Žç¥séÖí3ö]=¤Q² äûã·ã\õ¦¹¨»µå½Ñ ýÒ¤øWQ£[\YL"“zo*Ü~•½ ˜iƒ0®wľ$Ò´¦ke qy¸§…úšá´½JkdIzì-åm®øG¨úWssàyEí´Ñ^Å5±esÁ\ÏŠÑñtÒ®•+Àß¾B¥Naý+ŒÝÜAD±+ŽäŒ~½*ý®©Ã*´LŒÇœŠët°U¢Œw®ŽÕ›cààt³î˜‡b_5ƒuf%¸ó„Gp8'ÖºË{kcoe9Ø3ÉëTï-­ãy%A³9Íywˆ|5s¨j“j÷++HGîß  `•“igqjå."d`z0­ûHÁÞºý|‰6 ?¥uêWìûr8À³u¬{» QKÛGùÆÞ‡ñô¬ù´94ùÞ#Ÿºª~ZR #2tþU¡äù[sÔÕ ÔÃ;+p#éL䀹$úVΙáÝKQšð´V冿~Üõ½&\EU*Œ; çµGËW+u´òìuÉn28¦ZZC Òć N #=«´±½²‰Ú%òˆÆÞÕ½OjüQ†¾ºòõ­Yré‚N>µFXWOçX÷·0BÅZ@8Á5úºKtaˆçhäšê´MkHš(ôÁ8ŠðŒ²IÆöö=Ò¶ORûˆzÖf­·µyvdŽzåÒ=ܱëÖ¦< UûF ûORj±ÚXyIíÑil•™C9É<š£i'u$˜Àv$qÓšl±n½y3ò†b¸?xÚþ ¹´‹ÚØÆvÉ;™¿ÝôõÃÚÁæHK’ÌNrNI5Òéú~T0Zëì5á¤iRý½ŸÈw!êqýÑU.uí?[Óå·q»±S哆ûñæ™el2²(#ý¡Pj:jÅ µ²•‘›·Lúñ].‰,¦ÇsŒ²à6>•ÐGt«®pzš­|  ùÎ{ e”+;ó“ǵi$ŒÕ¬Ç=ͱ†Tfëžã9Ås«os bXN}jЂ9“l°_qš´hU·BLìž•&š] `{ápk®Ê[“øWqþµá²)¸Õo¼ûpTQE{’rŠ}@¥Å ``QÇz³§ÜEiuæ4K ÚF=*Ωã];N·mÛÚàýØ—ŸÌö¯;Ô|E¨ë·ˆ%œÄ»·G 61ç^•£jæïIC6ÄcÜúÕ CQ¶1¼r#HùÆÆ dÙG œH89àã¥oÛÚ«,¤^I=MC{¦Ûj3$ÛÈE\a;þ5%´71¬1ç$õ8ú×mfí"– QEÉ ¤f¼÷X»as.×8ÜG±D³’d/€:f´¬'a‡eWoï0ÿ"µàÝ+«¯ÊAž Ö¦-âj0ÛÈæH— –äŽ*ß‹¼]ká+Hgº‚Y|æ(‹îsÛ­yôÿµQñoZÆzmå¿:®Ï& ÂS3úäžµ%¬²Ã¨.â['?JšôGéîNŽ:“Úº â#éÑ%µÁšòàûê>§¯ã]D^2µÔî-I¨vük'Pcöt Ý—9ÑÄjOÞ#&¤ ó :NH˜r>µneòl$Ù÷Š•Öl åÆ{rj »Ø­ÎÍÊd=5Æx§Lšý·¸Œ`ãø—Óð®M#Ú@ès]χÄWöß.7§ ¿Ê¨øàí ±N®w·Ðtÿ>ÕÀ¾•+bF,¼ñÚ·ü%©Ç{%¬“;¦ÍÁdç¡õë]ÂJ× xö¶1Ç"µìPÂ_¶HÍO.zÖ¹¹ï.­ndHäl‡ Îyâºûv+ #vß›ëV•Ç•^âDF ìSQFñ\ÄY §£ò@?(Åck÷OoD8gF=ê®™æaWqÀ­ûÙÚßÃ÷òî;–Ýð}È8¯(Ò_ÍÖmþñ8>ù¸*(¢½¾Ý·[ǃŸ”*šŠ)‡<Ö]ÕÝÃÈ`¶Oñ1¬sW°°³k4E¸ºnIþéõ'×ڸ؞ãí+q¼ùŠr z¯…õº…'^adJè®´”žS*¾ÒÝA]­Å¦ífëÇjŠißi@~÷\zTq;Fr‡´ôû•YY¤8À5ÑÁ­Y$K›¶NùéU/5Y£pÃç­pw·“ÜÕ)åÀUù5Ðhº|×B}È’ÉÏò­ËK3`I<âµ´¡j³*§©¬ÿˆÚjk^¼‰0Ó@<øñ×+×ôÍ|ýo;»X‚+­ÑÞdŒ9”»rNq[-<"¹E,§9îkSSŒÞxYîL{Y@b3èq\µ«`ŠÞ³‘£!‘аî+jÖV(I$ž¹5z;–’¡–cË2kžÖ¼ko¢\$OÎÌ2»[ñ5“7Ä«¹Â¬vñÀ¾¼¹¯ô«ž)û[> A>§`þ‚§ûTK ‘&Yx`ÙÍ-Ö 6œäµ %fNý*=^½ÓuTžÑL€q"veïš_këz“\bUÀDîâºÆ·vd\ãq£µt:>•iý¦³Ì˜à®õ×FúSÄ­5¬\*Œð#ðªúbàÄPƒŒ¹©š÷*FÑÏ|ô¬è4™n5î #ó2ùê1ÒºaœT‘¸eÖ~´È‰îù"³´ë¥´¸Ý»änWDÊ ô<×ã+¹-1"m!JŽE`Zø¶êÜóoþu§yâùõ k/°ì3 »Ãtäv¬K;F²º†öy#Q “¹±ØWQEíVCm¬$s˜×ùU sKE79ñ\GŠué­îžÂÎ6‰ñóÌG'ýßñ®N+vfÜÙ$òI­kk=Àq] ÖWÂHþéûÃÚ½-d…]TŒƒU¯„~A.~aÒ°ó’I©¦.5G¯5…©^ÜZC<°ÊËü#ž+"-RYÀó”1õZž;ùcÔðwž” x+°ëïZ‘¤ÒüÒ>Èû*õ5Îêªö×'~JõVÍYðòÜë7n¨ÂÿXäð¥y‰´³¢x¦ÿOF%"”ì>ªy¥Òoæµ”rZ2y_Ozô-&Ô¢@¬ê{ã§Öº‰ì-â AŒàÕç>ÃëŠ×µ½Œ`8"·ìåŽEù\Ž™­H"ýÑ t5ªÊÆãËá}+ϼ_™l“þ­ð~†¹˜2øçŠ»¼*`WOá= µ "úì(üºÕ;û‰låh¥Ê¸àƒMÒt+ÿMû c¶癇Aêkµ‡N²1Z(',zµr·±],,9Î8«öPJ·ˆðåJƒ^Ÿ£,W°«¤A$}G­Eÿ MÕ…ÍÄ EQˆ?ι·¹i$go¼Ä“îjd˜‘‚+GO»‚êzR__Å#‘ §Þ=«>;­Ò%ÈÇ­S½q¼+r<ÒÀ¸ÿY´ç¨®¿N†k›E1«¸QÛzÖ^¹á«ÄRi .ðüuâ¹{Ÿ ý‘Ê£.By¨Få² §An2zš©y¥=½ñSó)äò÷FÙJ²œ#JJ(¯kÓÎtûcëÿ!V À4+esN¦5bxƒD]NßÍEhqËC\¤VL§ ¤Ù°²ÆNa]M®œ ¸çµniÑOå±T>HïTõ'`û9Ç­gZMì™æ¤?•¹ãù[¡Æ`ªXœ3“X7z…Œˆb+çäöéše¦™ Ë¿=ÝžÕÒhþÆÌ$ÏqÍuZm‹XÚ˜ Ëdb¬¾GjÇ¿³mFT¶UÉnþžõÔév0ézzÛZ¦OWnìkÉükáy5­m.¡‘#c•·$úQ‚í,#F9žOâÝÓð¹¥A5•Ôgâ7 ÇWA©Í䨹ÆIùGã\(ÐSs1™˜“œŠzéÐİ;G©§@žc(`gïWEòÛÙ»nÜUsƒY29•¤•úœšÄÕ¬óD»\eÂe~¢¼Úã“V‹•ë‘`ðÊn³9ÏqU¦Òôßê‚(ínH\ü¨\ ûWom£É Š@¶fÜG®01QËer ü«øš[[.œ+ë‘ÅQ¸Ò-ó›h•@!{šÛÓlÍ”¶VV=½pº”¬/'ÚyóùÑÌr²~´Œù— v­=<Å*âL‡ïWŸ+·É 7ûªMRºÑ S¬ÑFé(l4x#5«i E+«ÝÀrük_JðÞ›ý¡+KàFèÔŸ”zŒWMqÅ”ª¨«À` κH²s²¸¿ë}‚yJ©-×@Šz}k€–Y®çó%lœü tÑÛªÜÙ,sß'Fõ¯ÖFÝsP—2üxÕ(¯kÓNt«3ëè"¬7CQ,Þ¦ëFÚC‘Y÷:lo)‘W¯QDv!:›µvš?†å’Ò9.Cm?6¥r>:ñ©v–:l¦íŽIŒãs…fØx¼\ªÃ©¨I: €àý}+béíÄi€0*Ùüjþ½Ä‹º5aŠì,ì-<”SmëY>-Óíi¤«ÈŒª â¸Ôðèq¾žÇ Ö¬>žÉ ®+R$0Iöh²$‹k¸>‡8þF¶a—,)íà*Ì©Xõj°fÆr0+”Ö’ÚÖáW¯¿CPE²õ 0hÇ÷CSX…¶¸Û#+Û±ê:©õ©µ›yÙDjÉlÅr’êpDJGû×ï´äƨ\^<ë–àg ­"2Ó(#>ÕÕCf“ÄÈë€Ã7†íׂÌTŠ«/‡-¼¶xÏžÕâ3h©­ÞYÛÚÏ'—+(Ùn3ÇéŠØ‡á÷ˆ.P‚%ÏEy@&½gHðêèZ ypã„nEÆÈÍcxD¶ñ-³Ž³HA9õ¯RÔA ÄV)%ºÔlB‚GZæu[ôðòµñm×rŸÝGž3êE3Þ:ie‘u[6 F~ÑÈ?Uëùf²î×Í‘ß3ÕZ8öe˜|ÕÛø~ÖÆM2)%µ¤9ÜHÎy®ºÕm!‰|»x”㲊¶.t}+ž»t“W•v€[7­0§ :U›iÌR¬Á¦júõ¬0¸q"ž9ǽyωÙ¼vòý.J¿|ðE5n:ÈïZÖ—B¢&ÇlW¡è°âÒyp3šðoçþÍg=~Ý?þŒjÊ¢ŠömÿćO?ôíþ‚*÷QPMcÇ4±‚£ SE4¯>Ô’) `Ò&ïýuz.ñi†ÿž|ñÜ(⸿ë-ËÚ[œÊ§7÷O¥ràr ÷®›Jµ¸²·ßhÎÿ8mØÜÞ‰ŒŽÁq]¦ûÈŸ9#œš~²Ñż» È®BóÀÊsYH¬çšçüm¨Om£KifÍ(Úå:ªŸþ¶kÈ%&ÁR Z‚5Iæ^•ØøN&Y$~Š!füxÖ»ý9¥‹Oˆn<äœýj•ürOyæ-ܰ¸§ËñªïÎÑ‹€ßïj£ÆZ@)Ç޵¡¤iîéŽÌÆ;™£\𻫉-. ñ ËF>Þµ­oûÍ*Øãˆ)àb²ncÌ›{V¾m TáG¹ÿëVôQËnsúSãÌÌe$ã ¬mzùtï(fb ã§jáµÏêmnén#…Á*2Øükͤ¹ž Ÿ´$Œ$NCq]—‡¼S±¦MkpžUòÄȸû²œp¿µYÒ¬î ¾„M‰“ŽWkÛZxͺHîT“íX·òÄò‡G±Ç¥sΧ \ƒÀ’Âþ-Vܲ|²!áê)%²ämÜ­cßY`a<[ZnžÿcY.—çÆBúÖ½¡1‚¦sZ Ýó\¯Šg÷ÖÒ· 2íϸÿëY-z’H®²chê*7×n­Ü,/½{†ç5·m®[ì`cl~®[âˆØèÿdˆán=Ï?•y”R?`MZO<ôBkgDÒµ{û¢Ö6®í°@Ó©¯KÑ5¼Vú„fÚë%J·sšðßÿÈÙ¬óŸôéùÿ¶YTQ^É¡|?§×´ú­ (À4P8×8úÓ£ä ×¢ÙÉé6É+FAïŠá¼eá´Ô™¯lÓm☟ýzóëw1Ü…u!•¹t#ÖºkkÂp®§M·˜F³LJäeT÷¦Þ&§4®ÐÌáS•íϵCk«ímïžElõbHÏô­»«Ètí5ï]Ã(&Þ=±^cw¬\\O+Èä»1ÍswöÓÍvîv’@¥YÓtÛíû”!üq]Þ‹gw&Ül‘pß8ãžk´¶h~ʱ¹à´ýkš¼½Î£]0—µÔRDVÜNA¥p\eb»OÁ«º^ .¯£F\î`?*³Ž´ÛÙÄí^¸úV Ëdduª)çÀѼÜëP]hW–i+(ÁêUú×Aá/Ûé:tÖWbW!÷B¨¹'=G «÷Þ!yø‚ƒÕÎMV³Ò5^Õî–U 1]¤ã5JãÃ×–Û™íÉoU9Ï_[J¥‰óþísú†¡ö[# ©3dàƒë\¼Mk=Á]BÝ$W<¸á‡â+¬Ò¬í4ë*ÙŽÆ;cžµ£ëZêL§åC†÷­vRêæDn]Ô2óÚœdeûÀ¼*e•WŠl± TòA=+$˜âÞÒ¸êX׃k®²xƒRu9Vº”‚;æ³è¢½sÂí»Ã–#þ™ÿZ×=8¥¥¨äÀé×Ò¢[~OZœ‚F:Uh4„T¶Í\#KuzWDo(Ú2½±Jò‚¹ÏZÍ»”Ä»³PÛÊ’NHíRµÆæ< ѵŸ$+Q™¡·.ß.x¨ÞÅm’GËvÎj…¿‰´¹$´þ[žÎ0?>•jyi7ÆÙR5ZsåŒ7~”A3Œ|¡‡¹éSXÙK%˸B76}…nCòñóV¤o’ƒÁ—•|ýâý94ïÞ«¶›ÍØd[™…ÊÀª\±ÀÅv‘DÚ}€i¨Çà±®KR–ä_žBêÜ¡=ô©m¦†Mz/„mc›Mši£W ÛFáé[Â``Ñ&Ïe©AòÜ85ynB€¡ïWQE¼´ æ°î§3LÎzvª&EiB]ÏW“ZÖv1[bW¥íŸá©æ"E*܃ÔzÖQ´ŽØ‘áO~õBÿQŽÆ"ÛWô^ÕßøaœxVÒgP­6\Û&® D`ÀeM`j׋nˆ«»¦qÒ¼ÃÄi噉ä޵ÆIkó’x£¥^y2 iÏÈßqc]$ñãŒcó¤¶SÕ¹fVxUG-К׶‰bO¥eø«ÄßÙ6ñùq•[iù¾éõ®*¥Ð%ÒLž¼æ¹ýFú9 eÈÏ­t^šæßD¹¹y¤mçl1±È⟷}lûn ™=¨ük®Ð5 ;P™‚IÞ78&ºh'T„SÐUÓ2ì/âk*êä“Á9®cĵק·šy6„v–Z³¢ønÆÂÖkÙ TòòÛ’sšà5­fMGT|°¡Äkê=’M4_Zˆ˜ÊŸCX3ÛNÑLƒr{W±ø~#Ãöˆ×yüúÕxÆ1Éù½k.úí¶²«|ð«ºUÁ¹ÓÆó—CµI,TI´£5“¨(M¨Ù'Ò­èW6‹àuüDõ#Ú¯I{wõ»ŠeÊH î3Ȩ¥Y%Rd}k*}P¶Çãïñ¯RKSm¦ÚÛ*ãˉTê5VEž?絘Ô!“q^y­:4˜VéÔ ç%„I\Ug€÷+¥ðÔWw¶öëwXˆ™-øVÌëE²5 Ž+1­·î¾ÕÄë°›&â7̰úŽkÏw3UÒ9/nã·Œeä`?úõè[áH#á#] Q=+—\ZË–×aÜ ±Ôø^úòUx¦”¼Q÷nµÔ¥Ñ_§¥Bø$Ÿ^•RãÌRª‹÷/ýÚéí~É-Š¡ãÛ‚¤gð5æÞ0𥥽üZ£˜‘Ÿ nzg¯ËYÚ`2^‘ŽŠMX¼ðÌž§ åŠ6B¸Çé]áU†%*ýBMdݬrÎῈúÕ¯dÓ§’4•UHäæž·8g’ê2çÕLJ=ü>axð8û⪾±R¤±\Ƭ0âµĶSÛûLǨ2Qéž!±]V3%ýºFT‚Í2Óë]<>&Ðó‡ÖtðLܧøÖ¯‹|5Ñ´ºæŸ°0$ …9ýk¢‰où؃ï(5Ÿwãï²–_Ø“ìù®[Uñ¯†ælÇ­@Àö?Ò¸ÝGÄ:+NÏò0=‚·øU×´ƒís鱿£‹\ÑU·=ÞqÛËð­½;Çz5¸1ÍtÛÝ"&üºUMSÆÚMÄ‹öyœ/r#aÏåLƒÆzDxß,§#æÄf¬hpÇ#DfipvƒÇÞø‡ûFàÍtîÞŠéQ.­h¤|²ß#ük3P¸K«Ù&Œ­ŒëÀ«QEvZ'Œíô­ )-e‘£ ó)±?Ö¯ˆ–ݬ&ÿ¾ÅF~!C“>Oûú?“þ"@ÓXýfÿìi£â 4¿ü˜ÿìh?Ÿ¶–¿÷ÿÿ±¨ßâ­ÓMAÿmOøSáa\ÆŸã!ÿ aøyž, ð#Aø…~zYÛãßãQ7µ"x·¶Øoñ¦ÿÂ{©ö·³ðÿâ¨ÿ„ûV1ÿoþ*—þ´h[P?ë™ÿañæ²H?èãôÏÿ¯R§Ä_FAY-ÁôÄS¥ø•âYSc\Á·Úª4×.NdºOÂ%Ò±ÍíÁë'è)öú…Õ¤âh%Ù Ú_¨«Ëâ­mNVýöEÿ I nip2-8.7.0/share/nip2/data/examples/overlays_and_blending/blend_example_vis.jpg0000644000175000017500000001521113224651032024530 00000000000000ÿØÿàJFIFHHÿáExifMM*ÿÛC  #!!!$'$ & ! ÿÛC  ÿÀúú"ÿÄÿÄ? !1Qs±45ATa“"Bq‘23CSb¡#RÁ$DrÑáÿÄÿÄ6!1Q2ARq‘"3¡±ÑaÁá#BCSbÿÚ ?å´Ttg¦&–tMü±±oèT~L"‹³©·Mà -)<½ç“U«=¹{O‹ïèT~L#¡QøH}0˜BNÓæ7ÖÔñ?Q~…Gá!ôÂ:„‡Ó „#i󶧉ú‹ô*? ¦Шü$>˜L!O˜uµ˜GB£ðúa0„m>aÖÔñ?Q~…Gá!ôÂ:„‡Ó „#i󶧉ú‹ô*? ¦Шü$>˜L!O˜uµ˜GB£ðúa0„§Ìc­©â~¢ý ÂCé„t*? ¦FÓæmOõèT~L*•]50®¨ž04ŽøFÕuTúοQ¼w"„ž^òÛM©7)e–ŠΦÝ7€L%è{:›tÞ0£Ë‹*jûÉy°B’4B„!B„!B„!B„!B±y´n7±¶_>å’ű:¦¶–‘šå”jØ3)ÚPÛš‰a¦Û~*î•_ÉrǰÖÁÉ,(ÆÓh"ûo­S×YÇé[ÿ‚˜}Ý—'sK\Záb ˆSu {5¹›ÞŸiê…Ũ­ÓŽœ†„*ÓÌB>³¯ÔoÅ\>³¯ÔoÅI¡Å—gjE¢‡³©·Mà zΦÝ7€L&%Å••}伨!I!B€!B€!B€!B€!M`cIÊXÿ ¿ÙJ©ESº³}A½œü¾JÆÂUsÈÝô*×®Ô:ç ?¸ëx¤&L&µ1r N#'3]|Ý|×mÄZ†FÀ55rQÅjÑ(¾EMÔ!˜g‘é½8²w¬¸Ò’¹ýQ„!PŸ;‚„*}g_¨Þ;Џ*}g_¨Þ;Š“C‹.4ÎÔ‹EgSn›À&ô=Mºo˜LK‹+*ûÉy°B’4Bð$ØÔ³¸éª¦vÓ@é]µ ¥F·™ßúíú¯*\ꩯð7îû^GLOvkoa¢STT®dþDøS„cí,³{q Ýùê¶¶®r}VqSd“±Óy)ß”Z/õýEõtù ‰ç?”>«c_1ü°¥#¤dšeO»ù]’ãOæÄ:0î!Z&?[D2Ÿ…O²¦Ö ¦a×î kL°ï§óq—K‘Zm,®î[ …Z[‡~ÔÃ0ßÚœZ^Ÿÿ?›û‘å "¢0Ùô¶· yøÏÑ\†þÕ½˜oíO-'MÿŸÍýÆ$¦»ÊcpGŸÌ?E³ìÍ?Ewfo…0Ì7ö§V¦¿õüßÜ)U]ç(š ™ÑJÒ×4Ø‚°]”¼œ’¢ˆÖÓ2óB.承þ.~¼çR±••wMðî¡2ÚY4UË¡£‘ãX3’¼r‰°SFò,J¡V4ôÔ£ã8ü‚ê|™`‘°j ^ Ck™í]´êìå]­ó%üäºâ½žÏþ+—ò‚"i¤#¸ßRê8˜&†1ûUƒŸÛ´¥ÜÇi4zÅ[E{¦Öµç¾8Ýó(^¸¸´ëËÅ—>A”\dâø B¸$>³¯ÔoÅ\>³¯ÔoÅI¡Å—gjE¢‡³©·Mà zΦÝ7€L&%Å••}伨!I¼ÇIþ0rïL°N[W¬—Z¾éѯ7qS„x/ÔZ{>У)ïð§"¥·rf(Ú\ÑDžpW;Åc¦òNÇM䚎6'#…6â/­Ž›É96¬“QÆÛ§b™&œC­Š—VIØé¼“QÆÌ“‘FÄÛ€u¢±Óy'#¥íMÇ‘ÆÄ‡ëD££iu5=Éøãgrr8Ù’Fô%Í29˜pØ Ãj•Ž6Ù9mFÜ—x†“![†Ü[›uÈý r\à˜“+éÚ%Y>èøÞ>GZú 8™±#Ê.OSr‡“ÕXlh|¼owÀþâ«u*‹¢âø­èDc‡¸ù*œ‰q²LŸz꼜ø(Ã"‘¸¤í}‹›+šHÕ‘²ë\œþæJšÞQ>–Ò-U­•*+¹/^òéZÞu$cöªn'<åz¨oþo®Ê£‰´{Éu‘¸ÓåÀåøŒZ*ù²>ðJ)œz 'd€y ³ã³Q£åÞ–Ø~Y¸¢–í¬¯)oýÁB`Ê‚§Öuú㸫‚§Öuú㸩48²ãLíH´Pöu6é¼a/CÙÔÛ¦ð „ĸ²²¯¼—›! #GŽû¥zع^;î›lX4Üë[ÎŒKûU#ú¡XÌG¢9‹'¢rÖ6OÄå®lLbHFBv7YGF|Ó‘¹6ؽ’F''##%µ'"v¤†$„nÔ‰Ê>7dœˆù¦[ ’F7w'#rÉÈÜØl’»0œŒêQñ;Rr3«4Ûa²HÆíIÈÝÜ£ãu¬›cìm†É ÇŠ©­C=ŽÜ‚o5ŽÔ=¼›ÄË^)¤- æ4¤Kƒc´aµV1æÑó'`.{\nI7$÷®¿€ÄÖd¹¿'©ù¤…Óp…PÅOÒXH³ÕuVü•CÌ•oªêÍù*– Û¸ì\ªh¬7`¤cPóéžm›}åXWŠèƒšæ‘‘T™c•Ì? ²ÏÞC HñïꕆÅÕ è­Ó[/Ípù?‘Š…^x¸*}g_¨Þ;Џ*}g_¨Þ;Š“C‹.4ÎÔ‹EgSn›À&ô=Mºo˜LK‹+*ûÉy°B’4xu¼dY2’a÷–Ï£ßR>_¸äVS‰ÖpR¹FDà Šz"¶’b¢‰Ïšr7(èÏšr2›lV Üœ‰Ú”|G œˆêHl0HFíY§"rŽŒê²v'&[ 1¹9”|nÉÈÜØ`×NFufŒêÍ2É-ÞË$°[ÝÊ7Lv¬´ÇjIÌBeÊŠ‡³’X¡Ü×tw€GÉmÓª •õN’e®æssØH 57A“tøm]Òþ—Ôæ¸0·4.…ƒü+Ÿ`ÿ è8?¨b}-ÏSÕ›òUšÖkV‰…éÛòPŒÈ®T.í0U+cÖU+€ÅX]k5ùƒçÞ¯ÕŒÖ?‹Ýd€j6*¦î9¦ÿBƒ§Ö?ŒÐ§4²éµ/Ùü™„!R,‚§Öuú㸫‚§Öuú㸩48²ãLíH´Pöu6é¼a/CÙÔÛ¦ð „ĸ²²¯¼—›)Œ“ÕØÜáWÎGêþ6®ÉÉŸe¼ž`‰õкºPnLŽ!§ø {ºt¶Ë[-êímEb<ÙÁ›¯dnpÚÔq“=¤A7}Ù†àô4p6j8b`5¬(œoÙ§$1÷>Jü œÍ!ç:hÆäí»m}J~‰Ò([T”¥JM>EëèÅHGÙ¨›ò>0ÀžÙ^ë²r·ØÔPIYÉZ·ÔónM$ö#ö»Qùªão§¨£ª’–ªÁFƒÅ5_u9º-=½FŠÿÒ pˆ2jèL!¡ª¡…FÖ†Ü+®¨*ŸFDŸ”€|” gzž—ðÉ@Ö÷¢¡kjW+{Õg„ÍO#nHÈy«=X$•RÝj E•‚ò­¼n­ª[O„Ó^¨¥|жNÃDŒ=Î+ZÎ5‡ƒâšôeB¬¨ÏŒ[Oá¸>³¯ÔoÅ\>³¯ÔoÅH¡Å–:gjE¢‡³©·MàÔ°éêþiΦÝ7€R”DG#\{Ôy¼eivqº½qŸee¿S«re‘Álc@¸.»Éó 9.#V6ÍÍu hæÙË+wå–z„0–Õi\‘k±@a5:Fƒu<ÉFµ¨ÑåE%ñº‰žIÝK’ûUöwKÊ,\J‚E‹Ó4½®klgh,>{ ëÅÀƒš©³]K¿¬­'š_25J¯MÓšÜÏ„v»šn6 §c6S^Ðp˜ðOhx­$hŒšVÜ9ÖþÔezU½xÜQ…hð’OÔój´º©ºo¹à‘Œ„äfÊ>22Í9µëc[$„nÔÀ ÊÖÖÑ.ă›$˜›b÷Mæ£Æú×¢o5Ø%ÙkF–ýê7Mæ½Ô„à“Óy¯tÞj4LWºo’îZo5ÌO 5Ý÷þ–Í6J7—œao™*=ÎêR/ú9 ­RŸìÉ ;[UÇÔ;ÖÕqõ5QÄ÷ø“Òþù( Îõ?/à’ƒ©m­³ *[­BÔ²÷V –ëPÕ,Ö¡É)x¬|ÊÎp<_ùH)Ìj+Ä×÷´¨5AqšŒù[§V‚×+$·O_?<‚§Öuú㸫‚§Öuú㸮ÐâÌö™Ú‘h¡ìêmÓx#ƒ;¨êΦÝ7€MÄîk¬uÄ÷¶‰ZEÔm e|Ë[ sG8«þŒó}õÊâÛsRÔ8›á 9ʶµ4zRgÐø'(‹ FýUÞŠVŽs€_8á˜è¿äþÕº‡”D4“ûTó¥:o1ÎNÞ1ˆ¸zZ|F.i<åÌ£å! üOíAò›—‘áLÒ‰9ó¹¥±2úÝl¿„ÜhÜÝÔ(å¶ÄN¤)EÎ\̽£b±bÞÑqJ¨ ãk„WÚZ*»’gÉ+¥óžò\NÒSq¹{Ý­oBWø¤½/­>¶¤ªsy$#6²m’­F¶K°MæŸÁ'¦Q¦óQºeî™w0Ii¼×¢QµFéŠ÷LŒ h“Ò«Ý6zÔn™3GO[_0†ŠžIÞ{˜.¹9Æ jo⃓ÄVF´Þk-0Ú¬Xg³ŽTbœèb¥e¦~gøVX=‹âÒD×KŒÓFûfшʥ«Ò 2‹ÙeŸÓП *òk*›9ΘmJT¿ŸJ¨´ ÈYÔ×ûšû”exÏ4L± ðSFÛ¨º¦ Ùj­¯Ìæ«ÕU¼â@*Ù{BFÚéÄÑHÍ¡@¦_Qæ–¸9J¦ò;”þ©Ú)J…ìX¿ªýÁSë:ýFñÜUÁSë:ýFñÜTzYäºgjE¢‡³©·Mà zΦÝ7€L&%Å••}ä¼Ù±’–äìÂÚ×j)d$4ŸúÏ^¸·Š„ÖÒ\øú’TKcÊ’‹–ÝîæÞJ¯\í*7'AzßÿIë{XÜÖ&ø—0é,fÔcO™n¨åË¢adåÏ!üª½N#WˆÔšŠ¹KÜN@œ‡ÉBFíY§bxï+Ð,t«{%šk>òºêþ­ËÄÞîDŒn¿zm²XkQ‚P5,´ÞjÌ‚KMæ²Óy¨Á?š÷LŒd¦˜m^‰…õ¨Í5׺eÜ $ôÞhlfžÅY¹9‡¶¢¡µ‹€nÖ•þö•VÌ•ik;ª›ø“¼œä¬˜‹Û=qtp댋¾{eÀ0Š:™5;"nÆj±„´06Êù…y«Æu}Væö_Ü–î]ÆþÎÆ´q¿Ÿye¡§ `6RñE’Z‘¿â N&d©mm]ie–X5 !a-#%ÑÊÆ½®-p¸*EŒËRØbÔµTôE(í!Ž·+å³j¡%Fî‡R}íå¼ì·räõb· ­u|§šÚî>kêi!ËR¥òË‘Ô|¥Ã‹\U±‚aœ ÁØv…>Þö½„Õ+—µ}è¹³Ôe£Q妿Ü×Ü«õ•úóXâî©Ã«&¡¬ŒÅQ‹ÃÜB«VWë÷–¡ÍIep66óά¯Ìæ¢_RI¹rJZ¢çt³ê<Ó d´ë”VßQæ¶ÓK¤áA¾¢ýëvUÿœNOQî!µM˜®˜RWšMX®1ö—ÃøÉ<©õ~£xî*à©õ~£xî*²‡x™Ú‘h¡ìêmÓxÂ^‡³©·Mà ‰qee_y/6BFGbýHeñûR)zÚsUJèCƒI ‚B•iQR¯ Ë‚c´d£4Ù\c¬æÊš, ~;>…z0i]¿B·_›Yøþ¿bÍÕ¤ûÅ´¾ez&;Jgìy]¿B±åývý ïæÖ~?¯ØOYKÄ/¦;J÷L|ÓdKúíú}‘/ë·è»ùµŸëö8êSñDÄw•è˜ßY[¾É—õÛô(T¿¬ß¡Gæö~?¯ØçYOÄn a©©kMù£2º6f†@*FHi£<ç9ÇXÊá…ËÍ ,>¹v®êûÙ\ þ‘B4­Ô×oû eš½áÍÍs\2q–jí†TÛš°Õà^£¥QÈ Fjfpª}Pp«EîÁÔý6QƒÞ"d‹5­«K·’ß[I8î"¾&/$åh)Çj)I{Õf­¸o§ÄùçÛï&´Tò®‘€s†ªÃ]þë¢ù𢰽Ä]}Ùí n;ì÷Ãy¤¾ZI vž{G9º¼À_GK[PëG¾n 6‹u·BTæû/We¨Ò· Ýy¨¥ÍàÍõkCª.u©8p LüßÚÏþÔ¬m?á ÚìÊ´Ý8ðÞPßôâÆ†cG5é¹z¿Ø¬ÅO[TF†ÿ± R“™“2i§ ,<à.§ud¡T¼œ·-ÆPéýÜ]8b{·o~¬>³¯ÔoÅ\>³¯ÔoÅ7C‹(tÎÔ‹EgSn›À&ô=Mºo˜LK‹+*ûÉy°B’4B„!B„!B1~R4U’TlGücÉo‰Á¯Zjk'®éí;Zmr_Bû†Õä3W :³W¼¹} Xm…ì­T¿vÎU©)o ¬fWz»áÕ1¹™:ëŒaø4‹•rÃqkgª×µ”(élm[´¹kUJL[`]u*Êæ8kÍZÐÕªRއÉS/š^WÝ)ÒÛµku[-­3wªÊ¬pv0Ã1®{[E3œ@Ž$žì—Âò~+íþÅ}—ÊLBžNbOšÆ1M'8sn9§+¯Œ®l,t|ÉNOô1=*x•(ùþÀ„!_pB€O¬ëõÇqWO¬ëõÇqRhqeƙڑh¡ìêmÓxÂ^‡³©·Mà ‰qee_y/6BFB„ B„ BÙ¬ëmLd˜6 ŽäËÎmþ«’YÞoº=|§OðÓ{×/àf)Ë\ ž¡®-ææ«w[á›FG½epRFµ3¢QWä3VZD‹{Ö\¾±¹X)1,‡¼«jЙÔi1B-ï)˜ñm^òæØ­ï)X±OÜ«gE‹LèŽ߼¼v*-~r£7Ëï-UXäPDé$5­$¦U»o$–Y¯Ú(Å7%&¢Ž[MXt@öü_Ö_ÊàJo”¸ì¸ö.ê‡!g»v ¿Ê„Z‹JE%óÊ5›ÕytçÊÜB–R‚„*}g_¨Þ;Џ*}g_¨Þ;Š“C‹.4ÎÔ‹EgSn›À&ô=Mºo˜LK‹+*ûÉy°B’4B„!B„!B½k‹MÂñ¥Rt¦§††Xðá—òi0H7ml¿ì>‰.<ÕH)TŠÏ³.}ßÀÃ\曂‚½ì6*4HÃÞ½ç´ Ü$Jâ o-䳯TY©ñk ÝHÅŒ·ýÿµHÓ4jrðÔ»áþÓ.ÝHf®§kEfuÃнÉÊጹÒZÞj­‹ãÓâ#BÒ[îPï‘ï>û‰X§)ЄW©ë³¹N•Ñù°BŸ3„!B©õ~£xî*à©õ~£xî*M,¸Ó;R-=Mºo˜JQöu6”Þ1sµ1.,¬ª¿¹/6f……ÎÔ\íIÁš;Qsµƒ4,.v¢çjhX\íEÎÔ а¹Ú‹¨ ¡asµ;P3BÂçj.v 0f……ÎÔ\í@`Í ¨¹Ú€Áš;Qsµƒ4,.v¢çjhX\íEÎÔ а¹Ú‹¨ ¡asµ;P3TúοQ¼wm¹Úª5z£xî*M,¸Óµ#ÿÙnip2-8.7.0/share/nip2/data/examples/overlays_and_blending/blend_example_xray.jpg0000644000175000017500000001177213224651032024722 00000000000000ÿØÿàJFIFHHÿáExifMM*ÿÛC  #!!!$'$ & ! ÿÛC  ÿÀúú"ÿÄÿÄJ  a!Qt²156AU“Ñ"q‘¡±2BCRSbr’”Ò#$&DE‚Á%3c¢4„áÿÄÿÄÿÚ ?ÕÑé—Piîu2QÎYhjª°jù);‰©•'Ü7ÀùFèý;f‡º„ð ñ5#²¤û†ø&¤vTŸpßpR;*O¸o€âjGeI÷ ð' ñ5#²¤û†ø&¤vTŸpßpR;*O¸o€âjGeI÷ ð' ñ5#²¤û†ø&¤vTŸpßpR;*O¸o€âjGeI÷ ð' ñ5#²¤û†ø&¤vTŸpßpR;*O¸o€âjGeI÷ ð' ñ5#²¤û†ø&¤vTŸpßpR;*O¸o€âjGeI÷ ð' ñ5#²¤û†ø&¤vTŸpßpR;*O¸o€âjGeI÷ ð7uZLÅz ‡*ü&ZÛ-êG·Jz„&¤vTŸpßÄÔŽÊ“îàNAâjGeI÷ ðMHì©>á¾à&¤vTŸpß«ªÈÉ6µ<ÖÉÀDHñ!¦)Kˆ©jÜù?´DÞP,º7GéÛ4=Ô'(ݧlÐ÷PžH’uF·%"ĵcÆkÌ«§ØA;Ž $>–-˜smd¤7DUÔ«¡=êç†zzK:ƒS„Û!ç:IëªÖç2ßKU=%\^Ü-ÓbU8,¬|™Ó2PÒz œ¹ð•g¥SÒP°#2b^xnÎdF£š©ÖŠ–èTµn|ŸÚ"o)m-[Ÿ'öˆ›Ê—Fèý;f‡º„ò£ôíšêÀÒI;Qs|©ˆ© ª©òZž+ì)ãô.KJ6™’ò2¶X䆎r}¥Ò¾ð7ó dÌ´IxˆŽdV+šÑRÅ?'S¥VbŒûôɈ’j‰f„c•Éöl?UÞ!ùã.dø·…J¤4K!T`C‡‹“È^ õ¨*Z·>Oí7”¶Š–­Ï“ûDMåË£t~³CÝByÑúvÍu à>9ÈÖ«—‘Â+â5;Èñ65®:“Zõ—]´oÌDý'IKXJ³qÓ÷ˆ±¿4ÝIŠè·Ì‰Ôná³´ŒºwòÔoÌDý'«hYxîH^þ/è,m%Ãj\·&òõÜ(Ÿ˜‹úVä®_»’óAfÃM¨IÈX™ òB¡þb/è=[‘bE¶¾BsJÞA·C¿M¼‹­,^³õ[af§Ç4¹U“òÙC@'0ŒÏkUðb9?Û}š Ç!e¾ @Xê‰0õw¡4'ù:»ãQ# ²Tø]˜óÙÖI½Ä ר˜º"=Š×X¨©b¡òα{ˆÁNž¥¾Ìé9—ÃKß%W9ŸõsLæYÊ:[+ÖiöSÐî_–ű}ŠßQ£Tµn|ŸÚ"o)m-[Ÿ'öˆ›Ê—Fèý;f‡º„ò£ôíšêÀÞdƒ³rÖŽå[&Yï?MÞ•è«›”çj™†¿öCôõå½`J¼„\üF~ J¼„\üF~ J¼„\üF~ J¼„\üF~ J¼„\üF~ J¼„\üF~ J¼„\üF~ J¼#T"ÙL™[lý›½ÇÌüM}j%”I½?6 p7©Ö§ÛÜH7˜‹ÕÖåŠ/PƒzºÅæ h2æå6Vq©jËÇDuŸEÞJûl8ÂÁ®Kq•vIË‹ ÈÅÔë4/®Â¶’™IÉYªÛÖ#•«òW­Tµn|ŸÚ"o)m-[Ÿ'öˆ›Ê—Fèý;f‡º„ò£ôíšêÀô‚¶LC_´žóôóbZÔ±O˧é ¶Ó¥–Ûm„ßr³¼Qx¤KÅÖ/Xï^)ñu‹ÅֻŊD¼]bñu.ñEâ‘/X¼]`K¼Qx¤KÅÖ/Xï^)ñu‹ÅֻŊD¼]bñu.ñMFRE³'æVÛÄ÷“/Y ÊØŠ™>ÿ*Ï-¾ð8›Ü}¢õu¯¬{­P^b€O½ÇÚ/qö3ñCíêk@&¬U³BûJÆ]¿«U©‹b|eÎb'Så·Þ©è, ÜN"¸‰-–°b«‘?,­ó¾Ûºåõ˜RÕ¹òh‰¼¥´Tµn|ŸÚ"o(]£ôíšêÈnÓ¶h{¨O ]F·- å„Ô¿ô¿νG=3U¨Í«íœt:Ë,ôª[î²tXl[­]J¶õ*;&éÊ‹oîðôÿjޏ¶šè®‹U‘^ÿŒè–½WÖ~Ȭ—È 4…5­EäKW@ÞxÏ5í™EåSÒ÷&gŒòæ"ó&gŒòæ"ó&gŒòæ"ó&gŒòæ"ó&gŒòæ"ó&gŒòæ"ó&gœ¶[E² -²Ø©îS{y‰Æåäk$¤Ó;çG Jûíö&ºýEò±¾Äù}‰¯¾]bý@Ø_¾Z®e6NªšŸ5+—Sä?þ®Uô‹å!UeÙQ£ÎHÄTÍ ÐýhŠ**"¢ÚŠ }aÓ4IH¯ø÷h×ýäоÔS`©jÜù?´DÞRÚ*Z·>Oí7” .ÑúvÍuõÚ’ÓäѰ–ÈñmF¯ÑNµ$Qº?NÙ¡î¡ÇWæ»Ö¶Œj[¡,O"µýjªª«jªéU]fhìHèªz"îŽÑÊ_üÄþ‘Kzß¼§çÄ]%áÁ‹ÿƒZ–òFøÃlSÞm6*šäyêײ¼„4~ƒî~ K¼„LüF~ K¼„LüF~ K¼„LüF~ K¼„LüF~ K¼„LüF~ K¼8>b¢>CÌÿðv9ø•ÇQ•*’m·EÒûÀç."÷5ËuûEòëb‘—X¾Ä×_.°‘—XÔ ,å5÷§Ëà"Ñÿa9S] =ô4ûKw³Á¢H—9O-‘³P]ع«œßb¸Þ€*Z·>Oí7”¶Š–­Ï“ûDMåË£t~³CÝCŠ­Ë|»0™¶#Ýž˜Úv´nÓ¶h{¨BÊ*wÂ¥[3 ¶ÅƒËg[@âÐôhF®£4E°YqpXïáÙ´UГ? 5KS‚½U·çîP,Ôqê× 2W#ªª²¿O(¼Md5‰jÚ/™xšÅâk!Þ À&^&±xšÈw‚ð —‰¬^&²à¼eâk‰¬‡x3ú€™xšÅâk#"9SQšCUùhµâk*¾cÙ”°Ó;EÃ}êY«'U‹é)̽X¬ÊÈî{ÌeŠ©£â¨¾Äù}‰®¿>_yÀÙ^â6&¶ýu„ŒÎû}‰­¾Ä_ï?È3KË-±SÍm‹ìU:´[RÔ8¨®lXO„ý-z+UŽƒ0隫ު¯cnž«Öæ®j¯° ‘RÕ¹òh‰¼¥´Tµn|ŸÚ"o(]£ôíšêÈnÓ¶h{¨OCQ 2;QR×J±yÀÑF™—[#@sq³AÝŸRÅK@àR‘Ás,˜©&›3YïRÄ[V ? ¼œÍ;a¢2Øzstu û¢2yNÓ©¯Ž¯}¼ˆA¼Az€LÏÄgâC½Az€LÏÄgâC½Az€LÏÄgâC½Az€LÏÄùy‰õ ‘ýv1®·J©è‘4ï© ÉêEÄ„‘ ’ R-gZ|8µY†Ej=ª©¡Éjr!ÕÞh8*Œ_õI?8 hj™;3d(‰¦í~+¼ÚŽ2+¢ÁŠèQšèon…j¥ŠY O]¦AªK¬Hi™4Äò]ô°P8ËåúJ}HÿhÓ:mУ>TV½Š­T^¥2lãWR¸¿Ä_âjÒe¿HÊÿR²¿ÑʪnòN:$iù>¬äŽÔûÉbõkOiÉ_› Ÿœ¸ÊyUµ3c£ ;Õj{SÚŒTµn|ŸÚ"o)m-[Ÿ'öˆ›Ê—Fèý;f‡º„ò£ôíšêÀ C³g¿µMyë-â;bØ«gR(eæ"óGÆÍú•õŽ6oÔ¯¬ åæ"óGÆÍú•õŽ6oÔ¯¬ åæ"óGÆÍú•õŽ6oÔ¯¬ åæ"óGÆÍú•õŽ6O©_XÖ¾Õå=Qøœö]ËÓ§Ÿ*éÅVÙj¶"u§˜ñNe¬ÑK‹Þ'€.~&HüJé8H–츽âx§ Ös\^ñ<±ø™#ñ+´áY¥ÅïÀÉ8H–츽âxbgâVÓ‘³ó¯Î;Þ{¯òêÕD¦EE_ùÀæ!׳¢9ÓmµUmjºÏ~³î{õ‘ OÊGø‘QS´)-®ò✲ópªPÆÆòbXŸ+YÉ6$Rà®È¶zƒ5Éj£íó¦’º‘Éêœê¥Ä›óWå93SÚ©±"ë=™/"´ŽA­ˆéù´Ml„–ûTéä¨4™E&År|·ùKí¸‘¤Ö'츔zµ~[¼”õ©ÒÈädÃbÁ7:ß íˆÔ„ÛlV­©¥|Çjˆˆ–"X€RÕ¹òh‰¼¥´Tµn|ŸÚ"o(]£ôíšêÈnÓ¶h{¨O¼¯ô†oÎÝÔ '!³Ê8N‡_Œ«ÉäõYþ cP ÐÍ  ÑÍ©Ê|C$$2ê1C. 2B\ ¹¨íÇr&¥Ò„TCÑØDªNÇmÒDF"èòêÚ–5‰‚޾†øÊä²Ä´íÓRÕ¹òh‰¼¥´Tµn|ŸÚ"o(]£ôíšêÈnÓ¶h{¨O›Ê™È0çXÛV’ÿ1Ê"dXLðb%¬zX¨p3òœtéo+]­ˆˆeaõÉ™¦HGÔKO¨š@"¢C4n|DÒz"i>"¬b¹ÈÖ¢ª¯" )0V5J“kaùnÃW´êÈ4Ù$“–±Úb¿K—ü€-[Ÿ'öˆ›Ê[EKVçÉý¢&òeѺ?NÙ¡î¡hi?¢öÁ5ùiåþhi?¢öÁ5ùk0j{%•½e{m»D$!3Ÿ Jc ;Ep8­wYSUzë}úûÿT?Gú…§¾Îð“O)õ O}á&žPQEEPQEEPQEEPQEEPQEEP£S]—J].¤àÆŽµ§ÿ68þx¦õPù½»oÐplÑ‘2õpj*{ÒõŸ`ãAò{¥¬õ-…×±-L¥äîtdîÇ‚†Añ­ Yr÷`a„Ìd‡bFަö/yQÀÀÎ=™ï5¡4}ðê-+袎Õ{àFp•%DϺýQ@QEeMUë­÷ëïüEV«¬©ª½u¾ý}ÿˆª £ýBÓßgGøI§”Gú…§¾Îð“O( (¢€¢Š( (¢€¢Š( (¢€¢Š( (¢€¢Š( (¢€¢Š( ÎþXf&éåwOÛò‚,ñËå <8çÜ”ƒãÍhr@“€9¬^Ä›¦¶òÉ~ÔnE¸æz™i%i-# Ó¸Ð[—K[…µÎ*ICÑÚ@Ox)ÝŸýU9òY ¸z<©™Ku¼¥” «¡ǃUƧ±ªå6S,NzÙˆÁK-I)Q*ÉàŒð+Ûäªû6É{:jã9S›šàìT¬ 4BNxê¬àwæ‚ö¢Š( (¢€¬©ª½u¾ý}ÿˆªÕu•5W®·ß¯¿ñA£ô¨Z{ìèÿ 4ò‘èÿP´÷ÙÑþiåEPQ\¤Hf,gdÉu-2ÒJÖµ€2I ëanÐÚF]þâwvI!–AÁyÂ=yïî¬øÇÊšúê^ŒˆÙ#;|íGôÔÊλÊ>°YKn"ÉnYD–xp÷ºG‰îö ÚÇžGíC{="ŸýñA “òœ½+û#ñ*üµÙ?)kÒ¿²Q¯ËT“0óŠbÔ.:P[Ãå#-óFþáçJÇñÛ]ÛùF^ÖU¥"w%GþÚªZ„=÷µoAÇ¡AfâöcJÅ'Û%CþÚì~P£·n–Šs×2UÇý5]7kAÆ^Ö­þè °åêì¯ìÌÄ+ý+ª|º]ön?üõ¥A[´qûênÏþåA3G— –AÓq‚{œ+?Ò»§ËUÔÿg£ÿÏWúT=»?ø+ÔÝŸÅÄùdº+®ŸcþqÿJëþØn)IZìQÒ”Œ’_ ïÅF³ŸîWšý p4½ÎchÙŒâÓï 8 ¿4õò£±F»Áu—XÈS.‡FqÔ{©µP~M‘¦lg3mTéˈ–’þÍÛˆQ>‰>þð9|´²ã(ZPTJOTû(#>P¯¿6üœ_o)XK¬EPhŸÿ"½ÔEfï$–‘ÜÒœÁqD©J ÆI9&¬?”ž L]5cÓ S—yÉRÂ{ß<û7ÿ hÆÒÓL¡#€ÚéææK˜¤€ËÑÙBz”ïÏþ¡Pë5¼L×–t™:‘).!|‘¸gŒç§ßSK¤Çžší¸5ú¦#6æÿ(«àšƒÊqp.LMoöØq.¸æƒKWí%Ó:†6¦²&ç²ØÞ¦Ô…Rqÿ÷ï§TQ@VTÕ^ºß~¾ÿÄUjºÊš«×[ï×ßøŠ Ñú?Ô-=öt„šyHô¨Z{ìèÿ 4ò€¢Š( Íþ^ü¢ ½¯“ý=sìÜIæãY*¨k#Ïÿºõåæ^ŸÐw[´ yË ~¬‘’Hû³šÂ3âêgîò¥Û^· H;Ô䄨¸¥I$uäš B)N: ú³ZW*šq OëVRÜœñü©dxÿ´Fë£fF@iYÅN¢ÏvO!ÍŠÚ­ŠiïÛAæf²˜µ øWìæg~Œ{ôOe縟mû9Ï}"U»ÊzÞR£]¬m¶NR•2²@ðÎ(%ŒÂݦ,Âx4ÄmJÛN£S? ÷6."JAëœçî©k,·Å…˜]=bÌ?ðÔbõÊ;×E5s³Å„?dKiJQàx{s_VÈWt*}ËOËAq‹M­'>—QáA6fþí0jïM{™iÍq¿D¿?§ä7¥¤Ä‹v;{f ©¤úCv@ç¦h;³oIýÊö·k÷j·nËòãn§Ò_|GÒ¬M [G!½u6Ù6_h .[›R³W~­íÙèU…© -‡ØK8’•!C!@÷²Ò1P us׺u›•ú$Ël{ @ RPñ$~öJÉgÞqA(aj; ±”´Û`%HÀHêµ3óqé’.wÇœ5ð¦Ûœ†TpR¡ÐÜjoƒåùS“5ÛÞ—rÚêJÛØ,:FR 6û ú¶$Áq·*Î+2Zq :ÒÓ¹ ö`õ;ËmÐÞüº1$*5’0ddçõ«ô”GÜ@©Nðþê¢åÞç]u}æõ'œ-éÎ’ÚNˆ9Æ@u\MæÝg›…è8)RȺduΕ“*;ÿ¦äºc(0äF@{p!JyH؈^YWÎÿ|Ö¯îÛáXq·¶ÊK­p¿K<ÊŒ{ý•äÔžpˆ/®IrHNPÚÎ>ÐK<@5ÖFÆ•n–àZWÚ¨¸—G IIÈ ÁiîÅ[5Ÿ<‘k[¤ ëú{PZÛ…s‰1žCûðé) tÎ:û«AÐQEYSUzë}úûÿUªë*j¯]o¿_â*ƒGèÿP´÷ÙÑþiå#Ñþ¡iï³£ü$ÓÊŠ( ‹yCÿ垢ú“ŸÒ±tW›y qµ$ô"·ªI^‹½¤u0_þY¬§\+µ7’xRºŸm¥“Ò”hèÛæßb¶ê œ§ÊŠvà«’>â 2aX"½ÑÓkZÚR§T@ý£í pÉ☲¬`Ò–iƒ é@á•^özŠRʹÅ•g¾³*W½•f•2®{ÙW¶Ë+Å0e^¥• S•@Õ•`ŠbʺRºSONh²£Å*ÖÚU½s¡®:Y骄‰Á¾„”mZUÓ#?³^öUŒWÔëÌšÔ‘Ç´Žh´J3  Ò=k"T]|~ï8D7J  í<Šb$qÖ£zÂù ›ÒÓçÉjã"Û%Ö[Ó!( ¨{‰³ÉÜg·G[ž’É9;³““Z?K2B295Hè :­–öØqÀá R÷Žª'üêõÓÿ¹@õÆ&7¨'H[†ìVnî­%{“޼?E¯#%U6—:#ޮ܇”ËIumàå)Q!'Ã’“ü*uIR•áAŠ‰ë¸ª=µ¦Ý™!%¶â¶ŽÓªyî9šÓV÷¤HµÅ~c<—JhõBˆäu=´Öc·"ËnKD¥Æ–’;ˆ9¤¬·ÈØ"Dƒ„%%Ä€}R=½hQEeMUë­÷ëïüEV«¬©ª½u¾ý}ÿˆª £ýBÓßgGøI§”Gú…§¾Îð“O( (¢ƒ„À ô-«úWóê×,%Õ87nV3Ϻ¿¡d0FE`9Ëlßg†Šp™.' îô¶Tx®VÉ®0Ýpìd ¶Œ„rsï¯Æ—ÐWh°Ûnæìä­[Ý@AIéÅ…µqֽ쮕´¬w×½¥qך¬ª˜°®œÒ–ÓšdÉs@Ù•tæ˜2±JY< SV;è4¬÷Ó&JYXÇÅ•øÐ5e}1e\iK*éÍ{›t$u lÛ  k„\¦[mɶFzR›žÊÜi¢‘”g’®áœŸu3óŸmq~ë+Œ7&SL®Bû6’µ€\W\A ;³P g÷Z¿ßKŠlEµ®+HïVJÔ†0>ïuIœÔhÎÉ}À†šIZÔ{€&«}}­aÜ|ßfÙœ}}¤D”)L-’²)*q ¯ôð`léÿܬûfÖPílÄnt½ª™BÕÙ¡*ÆFzgùUïa››Rgǎ䌷Ú!”à-\täã4E%cU\Š£-)\8å/”z*œÊAñ{i=ž¦œÂÔq®ÀÇìÄ6•a×’TH`Ÿ Œê‹Çè„­n[Ÿu”€KÁHB=T¡Îh#·&‡5`y$óõN”êIT/7 »‘ÑĨlÇ?Ý'<ƒÛUû—3ã—£>‡6§rÒ…{3L|“ùIÓеÖ™r_Ž‹ŽÀÊžŽ´'~p2¢03žóÝA£h¯ÀAƒ{ëö€¬©ª½u¾ý}ÿˆªÕu•5W®·ß¯¿ñA£ô¨Z{ìèÿ 4ò‘èÿP´÷ÙÑþiåEEuN·¶é˜ø(\éeĵæì” ÿº0sPk_)1®R K¹ÕŸ÷|:É ãÒîÆ1ß÷€¾«ùépe0¼¡êèM–Yº¾x¢¼}Õ}·ezóV£gS\»×STh €‚7í<…n8À#öÒuèû¡¿©-6©w)R tÌC¡m»„“Úen“Àã ¿U0¡ÅvfbÍÕPö$!-7gœ“Óîñ£®6Ø’gÁm×bÄsd”=ípA0þòyçˆú!­»¨à[.¡iÄ«ÄdGºû ɦM+ÀÒvUȦ-+ ™X$S&•À¤Ì«¥1eYÇ4V1Í1aC¡…t¦L‘@Ù…{i‹KIÚXõêLŒqš(}#¡®žqí¤žsí¯¡ øÐ:Cõ{®ÈÔzV2 lNí—ÆIÚ2°S#ÛAy%ADGCŽ”5„õ·¥¤0ÓE÷%”ÅÚT=3‚HðONêyE‚ã~Id·%”%!–6/!;Ag…J¼äp3Q­k$«O¥žq䃟g4ë ¢û¹ …8Ql1àjݰECm¡)$wŠ€ØÙJB2*ȳà%8 ø‹a²±«î2µÆKÈe‡¾ÌnJŽðH?pþùue—ÓµöêAÜÒwóN;V þk(ŒC¢3JqíÜ+•íN;±Ïñ¥wúdÖhŤ7Æ=H7)¹IÝ“6rsÝ¿$œ &£’J÷'‚E•Ò÷'®úNÛq‘ÈÏ<ÂK8•%IWC€=G…9¥Zvà›¦š·Î ºÂJ½øÁþbšÐ•5W®·ß¯¿ñZ®²¦ªõÖûõ÷þ"¨4~õ O}á&£þSµ±Òp" Ú7™ûš„‡»¨øÇñ©õ O}á&²ï–[Öë壳AX…k-)$)( ¢GIñî4]›„‰ ›ÓîI“%ó&kx[«uÔþæá€”à~ÖOùU¢Í’]žDbn¥«†d;,%Õ¡‘Œ% )$r ±îöЦ­6ÍBͺSi›‘4¸§’…'²rHÈ?vÚ i•qÁ¦ ¬ŠK2ÑxÒ×ùöiVçv¶æô¯ÿ˜ç¯'¾˜BuÇZÜó…d€’ Nqí¨íÒjNµ±2$-*HuE°¼‚9øÅy—wº¥Ce•J©/£ŠîõÁ„]â²ät—\B»7ˆŽ1”øóþTV™B~®»\®ã%0Ð’¯Dr¢x9Ç8ð¤^TÝ-–ˆ{ÜGk5$-³‚ýjH‰Qc©S-«8‰þ¦¢úÊ4io['ÉyÄ"ÔñJ¸(`uš e rŸ °­UV𽯏ËóxÌJ#hã BN#¯5`‡/‰Ch²ÆŠâÔ9rJÈJ¸r‰¯Yî¿Vý\¥÷úüDÉéÔ×HÆ+Jš-Œ=´8B½Î ¹#í¥1dê92œMæÑ!JÚ´%YéŒxfƒÁ1j91Í<¼\Z‚îǘ’S·qq¶Š’{Ȥëu¹qS!­Û27ð4ï%·ö¡ê–m2];§2¦šôRìr{ÂðïÇ­PžIn°Q¬ß€§Xqo2J= Jw†Fjû +*j¯]o¿_â*µ]eMUë­÷ëïüEPhýêžû:?ÂMd,±¦Y¼«ÝZS+K2$2½ŠZJVL»ñ­q£ýBÓßgGøIªó˦‘zÓ,ê[Û… •© ^ÞÕŸÞÇGßA˜­—[´(ÑŸL˜«QÂeÔ/y8'9«3çþÃD¨òZÔ¡Ø€„¥*J¶‚ÞâI`œ‘‚;ÅRLÜ&©•½Kl¸²S–»D)}6ޏöŸi÷ÔÆªz2Ù 4¦ÚR°ãiVÕî¾Þ¹þ´Kj›¤‹dI!øEˆhK+j*¼êNõ+*Ürxçœ{+×®.λ)‹TXN9 Ÿ÷˜òéM’v v@ñ’°Ažþ*¥±jY4ã·8°‘úEy)z,a•‚rÜð'‚{ºÓØZ¦;:²ßr”†e¹)j:m‰mÅ„”€ ŠùÏø€X陡æ].µ,Äæí>ÁK*wÓ ÚI ¾r@ÏŽkÇRÍ•&#ÍÛa0Ú{_>”Ïjè ¡ +I!#¢¶ŒgœŒf“ܵeÊ\váÜ$©2yn°„Ç*vòpH %]j)¬|ª"Õ/Ù"ìy÷”ÔG›gÍÔá'Ó J”B³ÀÝ´tÈ ¯.w—¯:Âï0ñ.†™q„¤qüˆþuÝ•du¤ì:òÿY …:®V IÉ=i“*ã4 ™V4Á·Bqž´™íº‰ï r$ïWïœûi0‘Šú=´<ãÛ_AñãI|äæ¾¼äÐ:í“ýê<ã '|+³é/vQÐ]pŒíh 9ï¤z²âÄKÔë…µ¸ ÒHô›'÷‡Ýšì—d®˜Ó òžÙa°±ßŒóÆ:c5±kfu´éöÓbmmà 8uÀ½ùVÃñ Œ7g›…ÅW› çjÞV:ã*σ]ÔòãÉásD™-E­É ’žäàuÆ5±käÝ5súQ‹+¹´ q„†úñŽ<=øöâËìk»[—…¨ý†æŸÜÇ'• ãëA*‡t¾Ä™±xÉŽV”!ÆŸœGAÖ­h“bÛ 9:sÉb3ÞãŠè;ê#gm*J’’8 ðjm Öl%@+ÄE¶5ÃL͘ÕÂøÎÍŸ; ]ôi9# ÏA¸óŽúQ©.е0ÊÙ·I¸-çCaÀ%9îVHÀãö×IŒ5Dµ¢;),Fki €RTWœñ\n£n Yí.b_\ûJ­á*–çB˃Ç{C塚Iœâ£^ÓßEdƒÆr¢zu¦—¯*ô¸¨”Û‘Q *ƒ£pퟤÛuÒÛåCõíú+ îVG9šÖúNê‹Ö‘¶Ü½ål„­XÆVŸE_õX½rÈ9ÝÈ­ƒäîd[‡“Ë<Ø!¤¸ÀÞ” Ðp£÷h%U•5W®·ß¯¿ñZ®²¦ªõÖûõ÷þ"¨4~õ O}á& ŒƒÜi&õ O}á&žPQT<„¢ýû–ŠóX8_\W‘ú§Wþî“ßÜ}•›¯ÚwVi—÷¦æ[Ê·™ˆ’ÑV9VþSÞ:þ„W7˜fK*fC(y¥ ) HP>ðh?œ–›’á‹ò»u82;µ S•c1Œw©Þ“=© 1‘––Â8 £û ¥X9÷Öîÿg:9ù¡jÎà¬ùªzç>Hü£4–˜°h‹Kök (¹p R˜h$‘Ù¬ãi ÏŽk9ï¿.FB˜”!Eó¶(‰'Ž˜Íu¹E/H SÀT€Ç‘¢>ù¬ÈÜ6¶í=ôí¥xÐ5ey=kÜ—¶Ž´™/%=õõçÌP-µ\Œ{ö(Qvzã'{…n„:´må “Ó$ O¶˜iÍÛ[“Ä…ÙYjsVô²…6Œ4¢ÁÂÊI'c§Jon·A»©:¦ó2™Àk±K66 wó« )ÜJTFxÎþ¸¥¾P´½›DÝ!OEæì¸ËiJr Ö§é*ôœ) 9PÊx$‘‚(ÌÒvÝ;¬.ñãÛ[º¢-MKó†·–”´ï*(JHQRR‘×Á5Ê÷¤íó$0·Ë´[V´0‡f7 #ö2¥emä©D¤7tÇ4ñ™šcU\!˜Ê ¸¤®Ž5°Ã»Á@•0¾„sœqÓ µbo%»§äj)¨¹ÅŒ‡Q ÕJÈÂ@Úœà¤ã#­86«‰–.¬]¢Å†úœmࢥÆ[©V6 ‚I*$FŒTÕ»ƒìƒè-­hâàí¯FÕšná¢_ÐzŽá )ìC¥JK`…+ ‚AÚRÁÜr?…Cu,MA;N·¨$:à“oq ¡xXql/n͇n×röø’9—;§·!/¸€’sÊ€Î8ûÍF®NO¥Uãú‹ì7¼Em™¬6^^ô¨ô¡ûyþCÅ&÷2#nE–¤a´áí§Ã9Ï>'4;…Ó¨ÝH\–I$ª£j½ID·Ïf  lœ+î5øýنЗçêÕÊT9ÚåŠ®Ï úÂro±´ã“Ϙ¸]:‡ŠwŽRF3ÎîœVsóä8í¸“Þ YþAnÑ‘åf ¾XËsVH)q ­$cÜGßA¶«*j¯]o¿_â*µ]eMUë­÷ëïüEPhýêžû:?ÂM<¤z?Ô-=öt„šy@QEQ?*wKGy(Ê…Ñ ¯8«Ú þU´3¾Q¼›ÏÒ±æµù+ihëea²……ûè?Ÿ¶Ç[+uÕç+;G÷G…4LŒµ{+䧨BkXÛÆïEYÿº¿ÉSS}5¶~ ÏÏAFyÇø«ôHÿ_#ä¯|ÀWÂϲ2ÿÖ¾\ù+ê;-e>;¢,ÿÜ((¡'žµ÷ç'Æ®ÿü+ꦶÏÀ¹ùëº~K7À9Õð‰öF_栢ğm~‰<õ«ÉÏ’Þ -žËWÀ îÝxÿÕ\ÇÉgSí­·ðN~z Y™(K«¨qÆAR[NãuKmÑ,ðfðÏbãîÕ0e¼”6J¿x«‘ÏÞM ×:AÝ«dØ&]D·¡ÇKŽHŒ‚”åxÂpI9ÇðÍ1tÖ Y$Hi€Ò áærKxOJ=9ÏAß÷PZöë]É«#É™?ô™;vÆþðVTrNþ}#î=1ÍÀ%‹Ô8‘´¼›<—›X}亡û¸#ÑO?µƒ÷{k.ÅEÖJáÛ¥ê19´¾ÞÕ¦VæHQÈ+Ü“ÓaÆ3×ÛW¤5_ת^¶Æ‡h]¼´ÿ™-1lœ$î!J H‚zàP9r~£½G‘w?b~3¶R‚ÞI *p$îåu¨ýöª¾5¶ë¨ˆ’Ôhî°Úd&Cî=±%*@å<ñãÔTJŧ´ýât{möSëpÌ}9Tõ’ØÛŸLñܲsŽƒš™]-÷:wNB°F°ÌˆÝâ/lä'\Ê^mÀZû†@ÜIN94›¾”Ôºn߉7Kdu2ÿªßÄ£µZPµ€° ˆãöNAÁîÁa¤¬wÍw>n¦‹|fÀã+qNÄmÓÚpR®v€sÓƒoµV˜“}°Üu”&˜´MŽÐn+Qd…¶âÝ» ïP8Ͼ¼ú]nØ5âÛ¤ÛbQRPÛ!ÛŠ[J·'yRµ@«$ÿL`PGµ¥¾"5*í\,²o/­µH\WUJB@ÜT¯I8ÈÇ¿a@Λ§»Þµ°Æwõgj¤ ú\) RÉ9Œp:b•]ô£×ëd;ó¶©%rP“*lb—PxýaZU…!{\¨g#ÍzmpÕ3@ÈLËôwãDŒDkoŸ)…¶ P¢ŽÏ9ÂsÓ' ©<¨YnQÈ¼Ûæ¥ô«kS؆¢•”6p“ß·§žsUËòd¦ ˘©§¯#ï­åm^ôc­»¨¡ï—/¶VÊ–s•('©$…HàsT»Gêûý­•ÛìO¸‡Þ—NÔ¨ IV¨Ç—6J–(6ÒЕ'wóÀæTÇ£KìŒÍ̓ÿ 7“:V“òyòa™uƒúGWÞ¥BmKâ+l„­C*ý‘ž?g¸÷`›rÑòuж›ƒ²y¥:Kk QcÑ*P'wc­=¶ù=×WXJ¸ÚìÓ“rs!æ ZNåc9ÀÈ÷f®%_'Ýd«ã–ñyvÆäÑ"(1‚ûE$çT0¿Ÿ}l&ÛCM%¤ % $e}ÐqŒ‡Ñ´Iy/<¦´£`Qö œËZ«×[ï×ßøŠ­WYSUzë}úûÿT?Gú…§¾Îð“O)õ O}á&žPQEEPQEEPQEEPcŸ-ÍÛÕå.õç°˜q¤ìhO꓎ñÅEíÒí¡¦#›\€”¶i))R@<%@øõâ›ùbE£Ê½êJ]ó6–…©\¤m8ôûªâ;mQÖ§örŒ[ó¦1Ê€Î'§CçAiX®6»|–“GIÞÑôV–‚Šxù=ةΟ‡§—ªÜ{Ìï-Í‘é:µ<¾ÌúYá^ˆãŽƒAÙ"-ý‡ÓxfZ•!’ANxÁäuîãÚ*Ѐú ê)Îͼ͎—›&Sa!#?«ès’(.Ùš†ÚË¿£þfL˜êÊÂVË-’®*IÎzcŸeqÓzrÀõÅ…5~¶9@–ŸÍJO¸+úÖn¹°í­´Ã-¶Ö6‡Ö£½¥î'8Mo‹å¢%ÿOϲNÆœÂØsiÁCư.©Ò7ÿ'úîeŽnÇ‹ã³jCª(CÍœ„¨s×ÇuÌX6TÊJÛ¼>ëí±·_Ã{Ê}àÝãÝV mFmì-W™Ñ£2´þ­Æ‰Ü|¸b;öØÒUÌ«´Rpžvà÷Åõ§m²¤E…§µäØR$:¥)©*ygôö·-wWmVF«®,In<†{ÛJ‘‚ RÎy9äžO²¨[Ã2çæÞc×&9jB §8Ϥ“¿¾¥š§Ŭåª,xì:Û’â”ã ¥CÑÚ{ˆÎOùf‚Ã×7g&<ÝæÝå Y¢lC[’¢J±”ƒ“’9Çô©†›…gò}h›©u³—p2Ò•="càµþ€Iñöbª[dØÚ’Ë*4Û4¬ ‚·£9R8Ï?äkÞåêë«´”d¢¡wJÑgjÔ„8p9ÊRNû¨':ßTZî3d¹_ì‘­Ê-H@ÃÉ’Ù (($¥'23ÔWº.žÓŒ[r…5z–[¨TxÐîiJ/³IØ$‚A=jg¸Nº^Ülé¨ðmñä¥N7BNå)D¨Ž ¨$í÷RišÉR54LÅŒ°ôŽˆÎ8°¥¼}´¤„ž G† ëžâµ^£Ô¬ÝåZo’˜’må)¦yýà¬{²jÃi¦˜e ²ÚZi%(@ÀHÀU7ävßr½9'ZÝûf{w\ìW¢ ‰ «ƒƒèƒŽjç (¢ŠŠ( +*j¯]o¿_â*µ]eMUë­÷ëïüEPhýêžû:?ÂM<¤z?Ô-=öt„šy@QEQ@QEQ@QEQ@TO]è{f¹Ó[e¡ JHßWf¦V:GORÊ(0&¿±ÊК¹Ë}êÚ÷k°-µ!§²1¹8ÿ\Ô}2lÄ¢cQ+¶ÿŠ…¬¬¥y+¾$tÍ@õš²jË‹-ús!¾ªJÇ)ð)=A¼Vw¿|•Ã2^ÓÅúLÆ–ÐR•Ó)+œã¼PgÁ)ÆîæØ\"·1SʇîãŸòéN|ÑSmpf™RdÍJÛ ()(;†AÎɯ«Öˆòe†›5ÏGÌm¥¨ß(ÜTBwp¤3Çv|:ÒSS0ÜTÈÓ—èN¶RRìÆB±ÔsÆ0?ÿ(&ÍjÙùÎC˜Ûn[‹kC­Â`§Ò#’O€»ÇÝJT»këË&b\ ‹çB[ñJ±Ç^þ0{ù¤Í[õ-Áö\‹g”Žô¬ö‹@#rIè®O\U­£ü€k U‹†¥º&RáBP´+´JF:r{¸îæ ³Ê ôõiöí(Rb¶¦Ü,ÈÏj£ÉX)I'­^¾H¼Ÿ[Unƒ«n”©O8²¾ÅG¤ô_9ôˆÍHt_‘M!£Uڴʦ¿³³*{”­#¦äô'`öU˜”¥) H HtˆB@ChJ:Œ ú¢ŠŠ( (¢Š²¦ªõÖûõ÷þ"«UÖTÕ^ºß~¾ÿÄUÑþ¡iï³£ü$ÓÊèò~aéþût„šw“âh:Ñ\²|M>&ƒ­Ë'ÄÑ“âh:Ñ\²|M>&ƒ­Ë'ÄÑ“âh:Ñ\²|M>&ƒ­Ë'ÄÑ“âh:Ñ\²|M>&ƒ­Ë'ÄÑ“âh:`µò¶ÛpaÆÒ±þ!šùÉñ4døš°„%!)@p+ê¹døš2|MZ+–O‰£'ÄÐu¢¹døš2|MZ+–O‰£'ÄÐu¢¹døš2|MZÊš«×[ï×ßøŠ­M“âk+j¢~zß9ÿëßøŠ ÿÙnip2-8.7.0/share/nip2/data/examples/manual_balance/0000755000175000017500000000000013273071606017027 500000000000000nip2-8.7.0/share/nip2/data/examples/manual_balance/mask_01.png0000644000175000017500000000151613224651032020704 00000000000000‰PNG  IHDRôôî½€VIDATxœíÝÁN1@QÆøÿ¿<îLÄHæu@‘{κí›r1.Hàr^Ö6Y¼?ê)8kÔñíQOÁó=Hô уD=Hô уD=Hô уD=Hô ÷¿~€FŸòáÿþCô´ö>¾Üé­|"úøÁŸôoov'½ÄˆÿéA¢‰$zèA¢‰$zèA¢‰$zèA¢‰$zèA¢‰°f­Þ×·^ïšM;ñ,[»Òñ£}ÉèA¢‰$zèA¢‰$zèA¢‰$zèA¢‰$zèA¢‰$zèA¢‰$zèA¢‰$zèA¢‰$zèA¢‰$:Àšm¶|_ßúuóÄxÐlÚìøÕKœ™y`üè@_ò$zèA¢‰$zèA¢‰$zèA¢‰$zèA¢‰$zèA¢‰$zèA¢‰$zèA¢‰$zèA¢‰$zèA¢‰$zèA¢¯m­Þ×·^ïšM;ñ,[»Òñ£ýDWèA¢‰$zèA¢‰$zèA¢‰$zèA¢‰$zèA¢‰$zèA¢‰$zèA¢‰$zèA¢‰$zèA¢‰$zèA¢‰$zèpÐ6Y¼¯oý¾ý¸ñ Ù´Ùñ«—83óÀøÑ~Ù!Hô уD=Hô уD=Hô уD=Hô уD=Hô уD=Hô уD=Hô уD=Hô уD=Hô уD=Hô уD=Hô уD=Htàw|´² m  IEND®B`‚nip2-8.7.0/share/nip2/data/examples/manual_balance/mask_03.png0000644000175000017500000000147513224651032020712 00000000000000‰PNG  IHDRôôî½€VIDATxœíÜAŽÂ0A‚æþWgøŽ'uÕÞ~ȽEy½x€cýèy×Öxh¶6»þƒ-oîž︄g=Hô уD=Hô уD=Hô уD=Hô уD=Hô уD=Hô уD=Hô уD=Hô уD=Hô уD=Hô уD=Hô уDíX?zÞµ5š­Í®¿ð`Ë›»ç}G.Hô уD=Hô уD=Hô уD=Hô уD=Hô уD=Hô уD=Hô уD=Hô уD=Hô уD=Hô уD=Hô уD=Ht€_s¬=ïÚÍÖf×_x°åÍÝó>$zèA¢‰$zèA¢‰$zèA¢‰$zèA¢‰$zèA¢‰$zèA¢‰$zèA¢‰$zèA¢‰$zèA¢‰$zèA¢‰$zèA¢‰$zèA¢‰$zèA¢ÜïX?zÞµ5š­Í®¿ð`Ë›»ç}8Hô уD=Hô уD=Hô уD=Hô уD=Hô уD=Hô уD=Hô уD=Hô уD=Hô уD=Hô уD=Hô уD=Hô ÑÖëGÏ»¶ÆC³µÙõlys÷¼ü‰$zèA¢‰$zèA¢‰$zèA¢‰$zèA¢‰$zèAßþ߷篎Oò„è½*ÿìBt-~ÎÒ*»}šMIEND®B`‚nip2-8.7.0/share/nip2/data/examples/manual_balance/mask_02.png0000644000175000017500000000141613224651032020704 00000000000000‰PNG  IHDRôôî½€VÕIDATxœíÝA’‚@A™˜û_™¹‚¿!ÇÊÜ7(Ýêë!ÇÓ7ð†séÔx²‡ü>}MkŸã×Må ÑÇ7þ¡ß½Ùs|èCŒü<}ì'zèA¢‰$zèA¢‰$zèA¢‰$zèA¢‰$zèkŽõ£ç®­ñÐlmvù /lyóîy?ò$zèA¢‰$zèA¢‰$zèA¢‰$zèA¢‰$zèA¢‰$zèA¢‰$zèA¢‰$zèA¢‰$zèA¢‰°æX?zîÚÍÖf—¿ð–7ïž÷#ÿA¢‰$zèA¢‰$zèA¢‰$zèA¢‰$zèA¢‰$zèA¢‰$zèA¢‰$zèA¢‰$zèA¢‰$zèA¢‰$:ðÝŽõ£ç®­ñÐlmvù /lyóîyÑ$zèA¢‰$zèA¢‰$zèA¢‰$zèA¢‰$zèA¢‰$zèA¢‰$zèA¢‰$zèA¢‰$zèA¢‰$zèA¢‰$:¼éX?zîÚÍÖf—¿ð–7ïž÷ÏA¢‰$zèA¢‰$zèA¢‰$zèA¢‰$zèA¢‰$zèA¢‰$zèA¢‰$zèA¢‰$zèA¢‰$zèA¢‰$zèA¢‰$zèA¢{üºÉ~:ÏŸbIEND®B`‚nip2-8.7.0/share/nip2/data/examples/manual_balance/manual_balance.ws0000644000175000017500000001514013224651032022236 00000000000000 nip2-8.7.0/share/nip2/data/examples/manual_balance/mask_control.png0000644000175000017500000000211013224651032022133 00000000000000‰PNG  IHDRôôî½€VIDATxœíÝAjÄ0Á8äÿ_ÞœƒñhÓUgIÓè¶(__<À6YüZߺß~ÞxÐlÚìøÕødæ‰ñ£¿W§ó\¢‰$zèA¢‰$zèA¢‰$zèA¢‰$zèA¢‰$zèA¢‰$zèA¢‰$zèA¢‰$zèA¢‰$zèA¢‰$zèA¢‰$zèA¢sìšg¯¹››$zèA¢‰$zèA¢‰$zèA¢‰$zèA¢‰$zèA¢‰$zèA¢‰$zèA¢‰$zèA¢‰$zèA¢‰´M¿¿.5Úºß~ÞxÐlÚìøk^ØZû¤ƒñ£Ýô уD=Hô уD=Hô уD=Hô уD=Hô уD=Hô уD=Hô уD=Hô уD=Hô уD=Hô уD=Hô уD=Hô Ñ9öºæÝkn榉$zèA¢‰$zèA¢‰$zèA¢‰$zèA¢‰$zèA¢‰$zèA¢‰$zèA¢‰$zèA¢‰$zèA¢‰$zèAÛdñûÛ£­ûíç͎ͦ¿æýĵO:?:ÐM=Hô уD=Hô уD=Hô уD=Hô уD=Hô уD=Hô уD=Hô уD=Hô уD=Hô уD=Hô уD=Hô уD=Hô уD=Hô Ñ9vÍ?­ánnzèA¢‰$zèA¢‰$zèA¢‰$zèA¢‰$zèA¢‰$zèA¢‰$zèA¢‰$zèA¢‰$zèA¢‰$zèA¢‰$zèAÛdñû3¡£­ûíç͎ͦ¿æ©ÔµO:?:ÐM=Hô уD=Hô уD=Hô уD=Hô уD=Hô уD=Hô уD=Hô уD=Hô уD=Hô уD=Hô уD=Hô уD=Ht€5Ûdñk}ë~ûyãA³i³ãW?â“™'ÆôÈèA¢‰$zèA¢‰$zèA¢‰$zèA¢‰$zèA¢‰ôs÷p¿k~êø$OˆÞ«òÇ>ˆ®À¿ó ™p"Ÿâ¯rdIEND®B`‚nip2-8.7.0/share/nip2/data/examples/manual_balance/simp_base.png0000644000175000017500000104060113273071606021421 00000000000000‰PNG  IHDRôôD´HÝ pHYsèèµ{Rk IDATxœì½Y“#×u-|€Ä‰Ä<Ï@¡¦®¡»ºØÍnª%™mYa)rXÿ?ú§ø8üâáA’)о”DªÉfw³kì*TažçH̉Ä}XŸëú»ßûòE˜ýû©È®!‘yrŸ½×^kB¤B )¤B )¤B )¤B )¤B )¤B )¤B )¤B )¤B )¤B )¤B )¤B )¤B )¤B )¤B )¤B )¤B )¤B )¤B )¤B )¤B )¤B )¤B )¤B )¤B )¤B )¤B )¤B )¤B )¤B )¤B )¤B )¤B )¤B )¤B )¤B )¤B )¤B )¤B )¤B )¤B )¤B )¤B )¤B )¤B )¤B )¤B )¤B )¤B )¤B )¤B )¤B )¤B )¤BŠÿß¡ø®/€BþþïÿžR*•DQ<;;³Z­4MßÜÜPåóù …B¿ßï½÷F&“Ñh4Á`0—Ëqg2™þøÇ?z<žP(ôæÍ›üà.—+›ÍN&–e+•J³Ùä8îÉ“'³Ùìõë×n·[©TBhšnµZÉdÒívomm}óÍ7ÑhÔb±|óÍ7¢(ÚíöÛÛ[N÷èÑ#BÈíííh4R©T<Ï+•JŸÏW­VyžÅbÓét<?|øp<'“I¿ßoK§Ó{{{¹\®V«ƒA«ÕZ(f³™ÛíÎårf³Ùn·—Ëe—ËÕétvwwçóyµZÝÞÞn4Ífskkkss³P(F­V›N§Íf3Ã0Óé´ÛíšL&«Õz~~^«Õ¶··‡Ã!Ã0<Ï¿yó& îïïg³YQ Ãh4Êf³jµ:T*•Õjµ³³“L&³Ùl(ê÷ûæÁƒÓéôÕ«W{{{*•*oll¬V«Z­¶Z­¼^o¡P (jwwW.—_^^µZÝëõ,‹V«ýüóÏÝn·Ùl. .—Ëáp$“ÉÅbÑëõœNg«Õª×ëüñp8üüóÏN§B¡EQ§ÓF£d2éõz-ËÍÍÍÆÆ†ÏçûÃþ T*ƒÁ`2™T*•÷îÝ“Ëå©Tj>ŸËåòV«¥Õj9ŽFÃápggg4e2™>úH©Tær9BˆÝno4Óé4‹Íçóׯ_ïîîÚíö·oßÚl6ü+EQv»ýÕ«W@`µZùýþN§3 L&Ó`0Èd2ápØn·¥RIÓt©TÚØØp8­V«\. ›ÍÇEQ´Z­f³Y£ÑŒÇã‹‹ ŸÏ·¿¿ßét!jµ:‘Hˆ¢¨Õjišæyžçù§OŸ^]]Õj5­V;™Lf³ÙãÇ‹Åb¹\…B‹Å"“Éø|>Žã.//†Q«Õ¹\n±XN×ét666hš~ýúµÅbñz½WWW¡P(–J¥|>/“É–Ëe³Ù”Ëå?úÑŠÅâ7ß|ã÷û)ŠZ¯×6›­R© ¯×»··wqq …>|øé§ŸªÕj¯×›N§­Vë£Gz½^µZÇ«ÕJ©TâéœÉåòp8œÉd:Î|0 NNNhšöù|F£R©ƒÁ~¿ŸL&€Ùln4ëõzww·V«‰¢ ¯®®\.×x<>>>žÍf<ÏÛl¶z½žN§wvv‚ÁàÉɉÁ`0V«Õh4.—Ëëëk·ÛíóùÎÎÎ!6›çy…B1ŸÏ///ƒÁ`,«×ë‚ (ŠÑhT©TX–å8®Õj‰¢¸¿¿}}Ï玎*•Êb±8::R«ÕF#*Š/^8›Í–N§õz½V«m4„G-—Ë‹‹ ƒÁ€…ír¹ŒFãïÿ{Š¢Þ{ï½/^D£Q»Ýþw÷wßa:½ 껾BùðÃišeY¯×Ë0 MÓ4M÷û}–eY–],ãñØf³©Tªår¹±±¡T*‡Ã¡Ïç{ðàÁz½Öh4V«µßïët:ŸÏ7ŸÏ­VëÖÖV$‘Éd³Ùìððp2™ ‡C½^/B ØÛÛ›ÍfÓéÔáp0 3†ñûý„­V‹Å&“I¿ßw:«Õª×ëùý~N·Z­666¢Ñ¨ÉdR«Õ}ôMÓZ­ÿ³Ûí‡CŽã:ŽÍfCâX,&“i¹\Úl¶P($Š"MÓ^¯W£ÑT*•Z­&“ÉA( £Ñ¨^¯w»]ƒÁ°^¯³Ùl£Ñ!›Í‡ÃÉdrss3´Zíõõu£Ñ0 Ëå²ÕjF§Ó9 ªÕªJ¥²X,E1 £×ëF£J¥â8wàèèH&“ †{÷î-—Ëåréñx”J¥ v»¦i•J¥×ëY–m·ÛF£qßl6Ïf³p8¼\.'“Éææ&MÓ¹\Îf³¹Ýn…BA¡iúööÖd2™Íf•JåñxŽŽŽ(ŠR«Õ‚ 8Žù|>-Ëjµ²Z­Ø?úý¾Ëåòx<“ÉD£Ñx½ÞÕje4C¡P«ÕÇ>ŸyÜl6³,‹D¼»»«Õj{½ÞÁÁÃ02™lww7w:ù|‰D4B¡ƒZ­–b4ïß¿OQ”Á`Àé;‘H\^^B¦Ói¡Pèõz¥Ri:R%“ÉŠÅâp8\,¸íív»T* ‡C£ÑØï÷e2²·Ûå8ÎçóµZ­^¯§T*5Íjµ²ÛíÇ©ÕjFãóùºÝ.MÓ±XL£ÑBîß¿¿\.§Ó)MÓóù\¡Ph4§ÓIÓ´Z­ÖëõÕj•eY¿ßOÓôz½¶Z­6›M©Tnnn®×ëF£a³Ù"‘Èt:U©Tƒa0h4ƒÁ€¿¸µµÅ²,Ã0ëõš¢(Š¢Úí6ÇqÓéÔçó…ÃaFCQ”ÑhÜÜÜœL&F£1‰,—KŽã677ƒÁ`08::‡©Têþýûx+÷öö‡J¥ ûûû^¯·ÝnÇsuu¥T*­Vët:µX,f³Y§Ó ‡Ã@ °±±¡ÓéœN§Édêõz Ãx<–e¯¯¯Óé´L&‡¥R)›Íâ%"„¬V«xŸït:4MËd²Ñh´^¯‹E¹\¾[èÕj•ã¸ápÇ‹Ïó×××óùÜd2µZ­F£±Z­pñËåR­VçóyBH¯×;==‡³Ù,—Ëu:¹\^©TZ­˲ãñx6›Éåòù|žL&×ë5Ã0¹\®ÙlR•Ïç5N§ãy¾ÙlŠ¢Øl6OOOqÛ_¼x!“É\.W¡Pèv»ØŠ …B¡H§Óè‡(Šº»ÿ<Ï÷û}Žãz½’ûd2)—ˇƒeÙf³Éó<>`»ÝÖjµãñ¸ßï/ †aªÕj§ÓÑëõãñX«ÕZ­ÖjµZ«ÕÖëµZ­‡Íf f±XL&“V«…JÖd2ét:½^o·Û].—N§3Çá7/—ËÙlf·Ûyž¯×ë³Ùlkkk<W*•H$2ñA !¤ÙlªÕêz½~~~.‚R©Ìf³µZM£Ñ´ÛíÙlÖjµ†Ãáõõ52B"‘ËåƒÁàôôÿT.—ƒA§ÓÉçóFc>Ÿó<¯R©L&:WŸÏçóùÊå2²U¡PÐjµƒ¡R©,—ËÑhtrrR¯×±a\^^Îçs—ËÕï÷Çãñx<ÆOñ<_­Vëõ:6¼ÕjÕn·u:]¯×ÃŽ…¥…LwvvÆ0Ìááa£ÑFÇår¹t:MQÔjµj6›ÓéT.—7›ÍÙl†âFE¿ß¿^¯kµú¤T*…¬=§Óéz½Fï5™Lîß¿ïr¹Ap¹\;;;r¹ÜãñPµ\.W«•L&E _±X\­Vf³¹Z­"½Êåòëëkô ¢(V«UTññx¼ßï/—Ër¹Üív5M­Vãy~½^w:F£áp8hšÎf³ƒ¡Ùl¾yóf0ð<Ýe<c;Q©Tõz½ÝnÛíöz½^«Õ úþÑh´X,²Ù,O±Xì÷û£Ñèôôô»Ë¦ÿ+Þ XfµZ=|øðôôtµZM&«ÕjµZ‘¹°,²Ùìjµ2 óù/›F£1¨î›Í&Ò‡Çãé÷û …Âf³µZ-¹\>[­ÇqF­VÏf³ù|.‚ÉdªT*õz]&“BDQì÷û„P($ò†až:jmBˆV«U«ÕóùüêêÊëõÒ4=‹Å¢ÕjU*• à tmr¹|±X >¥(ªÑh¨Õê~¿OÓ4’K(j·ÛËåR&“™L&‹Å’L&Q×+ŠG¡¥,cµZ)Šây>‰ÈåòÑh´½½m4år9®ŠâõzQ£r´Ùl«Õ*™L¶Z-†að=<Ï·Ûm¼B„Éd‡ŽŽð†¼÷Þ{år™a˜G)•Jô7‹ÅÂívW*“É4Nçó9MÓ‹¥ÙlŽF#BˆÓéÄ}¾k¤êõúz½V*•«Õ %$Çq*•j<Ëd2\ál6#„ Cµ;ŸÏ;N¯×E‘a…Báv»{½îÇqóù|>ŸãªjµÇqãñX„ét*“ÉЇÕj5µZM±Ûí™L¦ßï#o&“ÉíímQ§Ó©Á`Èçó‹E&“±,‹~E&“Çcì^ÇíïïËårQóù<Á‹‹‹l6k4õz½(Š*•êƒ>À2Fýá÷û£Ñ¨(Š&“) iµÚN§ÃóüxŸ·Z­ÇÕjµÑh¤T*Çã1MÓz½ž2NEQ¬Õj&“Én·£ Y.—<Ï·Z-¥R©ÕjEQÇh³€ÏBž={6›ÍAÐëõ‹Å0 !u’(ŠØ ôzýp8Ä»Y«Õðpq H÷è]ðøxžF>ŸÏn·Ïf3‡Ã‹Åhšn6›«Õ éR§Ó¡¹‘Ëå,˃A‹Å’Ëå\.—Õj½¸¸Ðëõ‡c<‡C46› è">²ÝnE±P(Ð4Íq\6› Èï‰D"¢<88`Yv8¢#G“½Z­*•ŠÑhìõz(nî !„a•J¥R©†Ã¡L&CÛn·ÿ{sçÿ-Þ‰ÊýøøØçóáfÅb±år)‚Ïç“ËåÝn×ét2 3™L<Z­FxÆõzÝd2íííдÙl,Ë*•J·X,Ç´‰F££ÑHEŸÏGÓt§ÓyðàJ¥ªÕj6›íàà€¦i¹\Žç…*Œ¦éÙlFv A (J.—[,–@ €2ÖçóE£Q¹\>N½^/˲¢(b42ŸÏívû|>ïv»óù(Ã0è¬9ŽÃü@MÓ~¿¿Ñhloo£Ç²ÛíEu»]»Ý¾¹¹‰a±X:mnn:ŽÛÛÛÅb!—Ëóùüíím³ÙlµZ™LF¡PÜaÍ:®P(ÜÞÞ †ét: †i4Ùl–çyÇc6›QÏf2™Á` ×ë C½^w¹\ƒÁëõÖëõƒƒ§Ó9vww‘¦}>ð†aPs"[­V¨dW«U,s:¢(j4¥R¹X,¶¶¶ÐD£QÇc±XŒF#€ˆår‰ä.“É<×ëL&jµ:¯×ëù|ît:µZ­Ýn…B«ÕJE³Ù|||Ì0Ìr¹ŒÅbƒ¡Ûí¢zd‡nÕh4©0˜1Ìçs‡Ã‚ÚK&“F¥R¹\.‹ÅfXf>Ÿ "GGGçÛo¿E®,‹‰D¥q"‘˜N§xNÇ`0d³ÙB¡À0Ìh4šN§z½~¹\& `‰¨ëÍfs±XäyÞl6Bð×ý~¿Z­žN§.—+0 ‹Å€%j4‡Ã¡P(ÔjõÝ~¿÷÷›„Ýn_¯×x4<Ïß¿ßd2% §ÓFq·m6›(Šëõzssó·¿ýíwšPÿŸx'*wN÷õ×_‡Cìétº×ëmnnv:4VXÊ××ר‘ƒšÁápˆÒÅ)EQår™¢(•JU*•L&S§Ó™N§XÃáðêê îjµ²X,(z½^<Ïçó³Ù àÔñxŒo±Xt:«ÕJQ*•­Vëôô4¯V+š¦Ûí6ÚR¬Ýv»=ƒÁd2Êyyy‰)"JuBEQ­VK­V+ Œkôz½×ëµZ­ívûÞ½{(â´Zm±X¬Õj€/kµÊä««+”ä¨ ¯¯¯ !4McÜ*ŠâË—/Aè÷û&“)V«U ³ÙL¡PÜÜÜ0 ƒú#¦b±h2™^¿~ Fãíím¯×{úôi2™l·Û<Ïëtºl6‹ª¿ÕjÝÜÜ`ŸFår¹ßS«Õ­VK„?þñø×ãããápHQT<W©T‹Å"—Ëi4ì4…BS;ÀGf³y<—ËåÉd²^¯ƒšK†aòù¼R©ìõz···€óùüp8ÜßßÇV„ý/“ÉmËd2*•J&“5›ÍÅbÑl6±ñõZ,¦ßï×j5«ÕzvvÖëõÔj5æ “Éäââ¢ßï›ÍæÓÓÓårY©TÂá°(Š˜v>}ú´R©ˆ¢X.—^u»Ýn· Ðf±X´Z­åryïÞ=Àè6› àJ¹\®V«Ñ«íîî^^^îììàá²,k0p…À”8ŽÃ m«Õ*‹ Ã`>4³Ù, 8žç'“ PÊf³‰ %‚ ù|^.—Ëd2µZ= f³™Ñhäy¼ŒëëëR©äv»‹Å"¦&ívý_,òÇ'L&Ùl–eÙù|žH$æóùd2AJév»¿«Dú¿…ü»¾B±Z­{{{Ø-Y–U«ÕÇÙl6N§ÓéX–Å\P¿ß ˜Ib‹ÎçósP_cQŒµ^¯en4Ëå3±Z­Æ²¬^¯G¿^¯{½ž\.W(èìX–Íf‹%SÅq\$Ag€U«ÕšL&ÓéÔn·Çb1‡Ãáp8¬V+V°^¯w»ÝøC@ç9ôû}WnnnDQÔëõ€M!<@±Œ>Ñjµj4|éœ^¯ßØØ@=h6›].W$\#Š"˲N§s{{éh•Ýn—Édè P:U*žçÁ=ÊOQÔæææÓ§O !èâñ11aÆ%Q…!ót:tn6›{½6T…B1µZ-¶ŽãÚív:N§Óãñ¸9ò pIŒU±Esçy^«Õ¢ Aõb pǃMTì=€È8Ž ƒ@Ì]. üP(äñxÜn7Ê·Ùl†6h¹\bR]*•f³Y³ÙÄ( ¨Œ&“Éív£ïv»Ýv»Ý`0Øívǃu²³³ƒß¼··g±XT*•ÙlÆhõ¬ÙlFQ? ¡0ð‰ íÑjµ"„Øíöh4Š1¸ÛíF,йÉdb³Ù Ã0:®ßïW«UBÖÏóµZÍçóá§PÝøjµZÕju6›M&TƒÁ Ùl‚þ¤Ñhd2MÓ¢(¢çÀòöûý@'“Éîî.úN»Ýβ,F©@ɰAìŽ'‰èõzF£R©X–5™LxkŒFãÝÍôz½<ÏW*•Ñhtssƒm»×ë­×kBh0v»ÍV8V*•z½Þf³F£Ñˆ/ìv»Ïç³X,v»=‰x½^¼³f³Wâõzçóùt:Åhã8Ðrúý¾(Š£Ñ¸F£ñûý[[[˜©:Îp8<ŸÏ !ÛÛÛeët:`P4Mc Y­Võzˆu4¡].—XÿßU"ýßâ¨Üçó¹F£eâý÷߯×ëý~ßãñ ¾°Ûí].×d2¡iÚétƒAŠ¢!‹H¥×ëít:£ÑÀèƒóœz½n·ÛïÝ»÷æÍ›J¥¼Àú` › ‡ÃG¡P€uuu%—ËñK°pѱ]­V˜&F#¼ «Õ X9Úd\<’~ Eñää`Q©T ü1†½^O«Õ¦R©>øÀívßÞÞŽÇãv»ÝívÁÂTÒëõÒét§Óév»Z­v>ŸSU«ÕJ¥Òr¹ ‡Ã±X¬Ùlv»Ý\.‡"Ñl6¯×k ê@àêê «ñx Y–åyýi«Õ¶4F£ÕjåyÞb±Øl¶Z­¦R©ÚŽN§ã÷ûg³™×ë øÃF£Q$A‘ˆ=ø6EE"Š¢*• EQ¨¾Y– …BÝnw<£d¶ÛíxßXña‘g³F|F¹‰ã8Bˆ^¯ÇÝs»Ý.—K¥Råóùõzíp80:v¹\ápøÕ«WX'ãñØd2á-Å.‚¹¨Ífët:­VëÞ½{€}0œ§(j6›õz=Ì÷òùÏó ÿ~ýc½^ÿÁôû}­V›Éd8ŽÃ"”?\.—ÛíE Çq Úúý~lN\}óÍ7H‚gggEÝáòçççàó˜L&¬êÁ`Ðëõ!˜€/‡Î Ýn÷û}¼‚ ŒF#tê€d+• šår‰&ï®ÄFh4‘—×ë5Çqv»”³B¡€OÑétycD¯P("‘ˆR©Äe;Žëëk«Õêt:‹Å"ŠÑï6ÞÅ;¹û|¾z½^.—•J%Çq¥R©Õj¡£DA]¯×S©EQNg¹\bô‘Éd0ÐG£P(âñøê?#ŸÏ«ÕjÌèg³ª¿l6 ÞZæÑh”H$ŒF#˲ù|~0PU­V™ ÆG•Z©TºÝîz½F³†7ÓBt|’Éd¯×ÃG(•Jë;N&“ÁH m)8ý~_„íímâ^¯w4Ùl6´)ãñØív<‘.™LÞMG}>ŸL&C©«×ëÑÍ äyeû`0p»ÝÝnC¡Á` “Ér¹È!étµáÕÕjCPA"‘H³Ù¬ÕjF£1‘H tÄШTªT*…L ð„’J¥P“–Ëåx<¢X,* ЊìÈd²R©„Ò²P( èK&“ rƒB£T*ArP«Õ“ÉØÂh4Êår`ò òEH$™ÍfWWW f³Y°ez½^·Û8V­Vóù¼ Õju±XŒF#àBHI>ƒ€{wÿ PTL}l6›F£áyÞjµŽÇcÐù \Š¢úý>†.wy¤Ýn·ÛmŸÏðp6›á/ ¸‰¾9NcÛÈf³ƒÌ³^¯—Ë%ÂV«U*•°r°Çƒ¿\.U*Õùùy§ÓÁ–“ÍfÑB Ðò*•J¿ßÇX%—ËiµZA0Y­V™LF¯×___‹¢ˆY,åry¯×ãy„f³yuuÅ0L¥RÉçó¥R MƒN§[¯×ù|ŒÞd2Y«Õôzýl6K¥RYe],ƒÁ P(‚€ŸU(«ÕêÑ£G¸N‡Ã1Ýn7Ô J¥2Îçs0ÊT*U§ÓÁfV©T©Aæ‡ w Ì:‡Ã1›Í0“³M®­ IDATët:‚ `y‚N§1À»ººr:ëõúíÛ·Z­||‡ÃÁqzBH»Ý‡«ÕŠçùÛÛ[páçó¹N§Ã® ¼·\.ã‹b±˜N§EQ¹ö;w"¹?|ø:&Î`tØh4€½R‡õz´ßN§ƒ)FR@yžw»Ý‡ŒF#lù|^«Õ‚•È0ŒR©Dõ½¦i(‰†988À °L>Ÿãu±Xà;ïJ'´á>Ÿo±X‚`µZïß¿¯T*A|4™L rà;u:Õj]¯×. ‡Ã ±ì€rúý~d2ôA­VËëõ‚ì#8½^ïr¹€{ †ýý}“ÉäõzÑb£e{ww¸`AÀØF„±.L ‡ÃAÇ„H]2™ PôàƒÁ Nët:QÏÏÏÁ×Zœçù@ °\.ƒÁp84  !§€a ˆ`!Ä`0x<(M?~,—ËËå2X™LÆ`0‚D0ìggïvµZ !‘H@Q(€Š€B‡©xŸ …b0ø|>ì 3¡«ÛíBÀ¬—ÉdøŒÀš¼^ïz½ŽD" k†ÃáÃÃCǃjå[$1 *•ÊçóƒA0Ùý~ÿb±EÑápŒF£ñxì÷û‘ÊU*•Ñhl·Ûèœ*• !ÄårwÆÇÌçó`X¥R)¹\>›ÍªÕ*8ÚÀÜd2€ x¸ÿøýÀ[À”E¡ Ñh¾†r¹\  ½ÿþûÝnw6›¡¼@¢›X=ˆà;ì⇇‡@íÁ‰êv»‹E­VÛl6è*!£Ñ¨Ûíóz½(}ÀÃQ(èÔïêëõzm0ÀÝÄ <ºÅb±³³J…ÃáØÝݵX,&“Éáp€ü†¡1MÓ€òT*ºU½^? 0A¡iúÞ½{àãÕ†úassU£Ûí. Ø¿ÁËbtj,§·oßbÐ%“É …ÅbÁxÉétžœœ|W¹ô¿Æ;‘ÜÿüÏÿ\¡P@‘h6›QSX,td;;; És†=ôA€˜QŠnll°,‹.+ TñBŠšÅb±»»Ë²ìd2Q*•v»Ýét–J%Aööö@ùˆD"GE¯×«Óé‡ÅbA{ Nô|>/‹ØZ­À Lí‚Áà|>ÇÆ#“É0Ü·Ûí~¿ßb±L&hml6ÛW_}…>õJ³F£ ûõ×_ƒ79‰Ä\`—/‹««+Ô/¨þ”JåÙÙÙz½Æ&70G5> ;h4LD···1±ŒÅb˜iµZ¿ß?†¿¨ÓéD£QdýýýJ¥¢T*€ÛíÖétÝn7 j4È^ðF!?Îçs”ب4ƒÁ !,l€]@œ1&±ÙlDonnbSˆ˜ess“a†aŒFc0ôz½Ç¡—– `œ ™L …°`@̘L&hº].—ÅbÁýW*•€ÝÞ¾}[©T ûÁ¹Ñht»]AsµÛm,›ëëkèrQWR•Íf‘sÑ‚p©R©p—ðk;N½^Ö¤ÑhÔ^X¥ ¢³,‹m@Ÿ ^¯www·Ñhôz= ƒM•\.?>>Æž!Š"P>š¦#‘ —;$ýކk0¢Ñ(!½¯B¡xøða4”„ÙÆN>ŸÏív7ƒƒTLJ‡‡`[‹Å²^¯ý~¿V«mµZи9Îf³‰ž{½^ ‚ …€øE"·ÛÝï÷G(r»Ý¯Ak … Ë/šÍf¿ß/ …Bq£ÑX,ív;‘H  gggØP"ÿl±ÏAŽT­V³1CL& !wŒ#B¸êÀ»Pëàæß)ød2Ùææf·Û-—ËЯN§Óžç¡7©.™Á`ˆÅb6› õùóçßM&ýÇ;¹=¬ùæÍ,Gü'€¶V«•H$<Ïh4j6›ì€l59å¨øî˜ (²*• zºT*E™N§)mmm5T*F‘¬s¹ÜÙÙ8³år™eYlz½þää@Û_|q'°Îårãñ˜ã¸d2 ÈÓ|½^‹+4žX,ääéÓ§‚ ÜÞÞ‚£òƒüçf BVÌvða‘e0!‹- ¨.ÁÀ»‡ j¼¨Cooo‘Ôju­V›N§¡P*y‡Ã ¨Éd28'èʳÙl °c4¡\­VðW@Ù•N§_§R)žçý~?fzhYF£h.—³X,ÛÛÛ±.—Kpo*•ÊÉÉI³Ù„É`0˜L&$ýR©d³Ù "EÖn·ÛS5Z­¦Óél'–Ë%ž@óËËKæÐϸ].—!\Äf2™M@%„`ØjµÐR¨Tª@ @‘ÉdHd«Õj0ØívtëZ­öÙ³g¿þõ¯‘Ânnn Y·X,(N!A¢i"d­Vk6›!×Òh4ÚF#ÀƒãñŸeÙL&ssss·ì …B.—ƒþ¢ÝnG:ƒxõnâJ•ÂëׯÆááá`0(•J„ÉdQB­VƒDîììlooš ÉdpÏëõV«ÕD"±µµU*•ž?þ½ï}’Žn·›Édð¸qýXÞƒÁ Cà¦Ñh S2 ñxüääÄb±<|ø-ÑjµªV«æxÖl6­V+`Ržç¯®®°`ëët:ö±Œ»Ý.š‰J¥‚õïñxðBAÇqJr !h\æóùõõ5P,A—´Zít:-—Ë …âììl_©T^__?yòäææÀ#æa˜¯ôû}PÅþ;“çÿ%Þ‰ä ø JºÓ¶X­V­VëõzÁ“A‘¨V«Ò:´Q*Bƒ‡«>~ü¸Õj¹Ýnè]A3|Q.—ív;8-P0©TªH$ât:_½zÕétÀ™‡èg !²mnn—ØÝÝػݮ×ë×ë5xX¯;;;¢("¯iµZ¼º,Ë>|øØq±X<>>ÆÇyðàÆtÇ]]]…Ãá@ D¤{$†al6t6› nøãŸf³™Íf3ïÎÎ":àÔ;;;€b!Hp¥RÉl6?~ü8•JAÌ…qÖ|>7 è¥n`¸­P( iì÷û‡‡‡ÙlE"ò£×ën`2™Pæ ,‚ÄÆÆ8ò(Ÿ‘+Qæƒ\µ'¦¸¥RÉï÷O§S íð„¸ë{À·a³Ù\.Ã0ççç |à¾aj®z§ÓÓív7›MŒjÞÿýÉd‚Q!¦»<Ïõ‘¯+ôD>ŸO¡Pôû}«Õr¹F”‰DB£Ñèõúíííd2ùìÙ3¯×ûúõk›Í†ñ>–.”ï½÷ xÐÁˆËFߨ]pÙ^¯ãA(é@8ã!Ù ŠS´YEƒA·ÛN§1ĸB©T¢!…Bè*xžßÛÛ+‹ØÏv9Nœ=z”H$ÆãqµZU«ÕÅb1 ê 1…B}‰D\.ôÞæã¯ã‚üŽê{ootäétÇ)ŠB[Œ1 0çªC±X, ÃÀ/Án·‹EAå†Ç%2œ8Ž1áüüOÅH$ÖP$Ê %ጠK¥’(Š¡PH­VkµÚƒƒ¼Ô‹óáv»Ýëõ0V%„F¬ŸÏ÷äÐÿS¼°ÌÑÑ ³Ù ŽèƒÒé4ž7Ã0.—+‹adït:A4V©T÷ï߯ÕjƒáÁƒƒ†3Z­öææF­Vf2BÈÆÆÖ&“)O§Sǃ,i0PÞ¢&„ÔëõX, U*•Õj…À2QP(•Ê»NÍn· Pô€ ®ú¯×ë îììø|>tî›››¡P8,Jx ¿···‘HÂ}HÝ’Éä«W¯€zCe·^¯áv‘m³Ùħn6›F£FH›››P®ã¯Ì*Ûí6¸ùàá.¶Ùlf³ùùóç`qaÿ`F£Ñ¼yó¦ÙlÚív@(6›Íf³>ù¡Ýn7›Íxv>T«ÕàÀh4šD"íÌt:ÅÇ_.—F# …B!x¡@šHÓ´Éd ‹ÅAèv»›››6›-ŸÏG"‘P(êz½v:¡P±T*Åb1‹Å2Ë, Çc4Q¿#;@l‡Òb´ ÓéL&“ÑhL§Ó°OIfµZ ‡C,ËN§S¸wÁÒ`½^G£Q°ÂC¡Æ90¹+‹ÀÍÁÌ~Ôþv»}§}…Þ:IpFu: 3ðp>|ˆAŸZ­FùK%™L Íf3¬Ó€ Úív¿ßßï÷Aå–Œ)Q*•‚D»5HŠÕjÕf³mll€œƒg½··‰Ép8´Ùl“É$%ô»»»@`:öz=¬"`§looët:I¡Ã²ÙlÁ`°×ëF#€P¶··].&7Ø`àçÇ«Õ*Æi…BŠœV«U©Tzûö-î^"‘SÃ6ŽãºÝn±X4 FàžH$E˲ý~¿×ëÙl6h_A¬„àÜh4Â!Ãjµbü Èò1§Óùå—_b[­VH;4Mc³Çç… $…GFé¼#Þ2ïDåÑ3&3³Ù¬X,²,{§Ãn6›ÍfS¥RÁ ©R©€yZ*•`Ù‚ÍfC\©Tº½yó’NpQa¦!ŸL&;==:ÙívQ„BeVÉl6ÃÔË`0 Ç×ét(d0Üs»ÝÉd¯Y¿ß‡ oÈår`ív\4µZýÙgŸù|>ƒÁÐn·wvvÞ¾}{ïÞ=È—(Šzüøñ×_ ƒ:ðý¡^I$FãÞ½{ƒÁ¥+4P°ëƒ±°NÈÀ>K' ázFì‚N<öìY4…ßét¦R)l` ºƒ1›Í Ä 4Y•JŠÅéé)ЈїË%ÜQ@ Ân¨* U«U숳٠q©Tº¾1ã*—Ëétæ´T«UØ e Ú çèèHE­VƒÂºS£Ñ O(ŒFãb±À¸Œ¦iàT‡#—ËÈŒ …8ŽcY¶X,f³Y$,\•B¡ØØØÀcO1Ø a ]P”l6 6'˜²ýà¼#øÁÞ„Õjc<céò¬E@:yÎb±B€{Æb1 Ó4J¥P#ƒìϲl¯×ÛÛÛq×ƒ×Øh4†Ãaˆ>@QF£p5¹³ã€£$EQp%Ã|ì{ÀÄH ‡ãéÓ§777<Ïooo+•ÊÓÓSð…êõºÍf»ÿ~¡PØßßóæ Ïó ÁI§T*9N@¢„»÷î݃@ƒn· ûFš¦Á…À͇çÉr¹ø Ëå"„Àr$Ð1{?R­V£–ËåÇFÜœýýý~¿T úHApv-p:V«U§Ó©Óé0«H&“À@`à“Édü~?žŽËåÚÚÚB^°ÛíËåÃdì¸>Ÿ/‹}õÕW>ŸÏápÀZ«Õbû1™LPZÌçóÝÝ]ìÊ‹%‹A×¶··×jµ¶··áS„i34zr¹úd¤!ÌH±ÂQÂ×ëuBà.Ðl6ÁÄ„ž0ƒ­x.ȉÐ[>zôÈd2-—K³ÙŒLÓ4J˜R„B!ÀGóùM,iBˆÁ`ÀSˆF£ççç`aa)ÂcG¯××ëu˜;) ¦ºÝ.0Ußòù|¯×óx<årƘŒ€,؃’É$,a ¾/Çq4M³, Ì NO§SŽãðR,‹H$Òh4 ÎÀÒâyþøøøòò(.\š²Á¸Éd‚»´X,B¡P¥RÁ²‡Ã]ïv»ÿþúŒw"¹ƒT„Cu%4ÁC”‘ÍfQW†ÃáÙleÈãZ­­:²F$Éd2PÄÀä fÙÐs“Ïãñàí ìz½†÷EQ>Ÿ‚:·Û ²àjµ‚Qà¹\®Õj·¶¶ ª!ÊXp~¿Ð!Äl6ß¿N,=ÏÎÎPµq—J¥ÀJ¬Õj[[[pgD=%­ ™L@!ØB¡ve<‡jjÞB¡‡¹ooos÷öíÛÁ`‡I=xðÎèE@ò3›ÍWWW[[[áp¸X,nnnîîî~úé§~ø¡(ŠŸ|ò‰(Š?þñ}>ßp8|üø1¬Ø5Í矞N§?üðC gJ¥ò¯þê¯ÀÙÙÙãÇívût:5›Í!rùâ‹/T*ÕOúÓׯ_CÏâõzÑÆçDz,vdaìX¨Fáñäp8@Á0A,k·Û,Ë"‡©H½^7›Í7°]moo£ç8ódALÃb¦FFÃívO§St„Re2L¿ùæXø¦R)È#EQ„Ó˜µK …f³‰–vp€lD×ëu¡P@+P­VÑÂBT!Š\.g&bYf$•JºM¼&à À$€¢(ØšïííAå„+„;(ŠJƒÞçv»áû(^ˆ0°g §aô¶ ƒ°N$„ @·@]Å6¾ùæÈëd2Y¥RÁ~ ŠA¿ßÇðÚE&“AB0ØlÀ¯_0oÀ0V£Ñ$“ÉP(r'Ô[?`d­V«+• v;0zãñ8´Ù¹\Îívƒ†´X,@À…âÑ£GÀB†q»ÝwžwF£ñ;É¢ÿßx'0÷ ØhÀ|V¨‡Ã!,ÙÆã1æ*§§§p컾¾. <Ïg2¤rˆ­ápr®J¥›B.—ã;a¾T»Ý.—Ësá†ù|žÍfoooµZíjµ‚SÄp8¼¹¹A~Éf³0év»Ê!ë¼P¯×qJ@±XD…Õh4¾ýö[LüÀ%Ðh4‹¥P(´Z­\.wxxˆâøõl6;88@W08/€çy€ ï0„W6:¹|>zD}6›MLk Ú…¯5ü* ¹þúúZ©T6›ÍçÏŸ#/#·ò<ÿûßÿ¾Ûí²,{yyyn´Z­ù|^.—Ú) ˆ‰R©s¥ÓiFù|þäÉ“§OŸV«U,Ÿüä'±Xìý÷ßßÚÚ ƒÁ`ðÞ½{N§Óï÷ôÑG‡¦é£££÷Þ{¯ÙlîïF£ +ƒ‚Œzüg?ûÃ0,Ëþìg?ÛÙÙÁ÷?~ü˜eÙH$²±± ¹×ë…ŸóÎÎPǃƒXoâÿƒ_wLØæPussãt:ûýþõõ5¶ºN§S­V‘.0¨F(¶Þ¾}û]çTBÞ‘Ê}ooO©T^\\ 0A‘‚ÍŸapÈжÿå_þ%£øñ¬T*Á±Á€ÏçÛÚÚúüóÏwvvÆã1Žg @l1¾Ãùø}ƒápVBt1^¯÷èèhµZ}öÙg‚ <}úôüãd2‰F£———E½ÿþû¯^½2›ÍxÇà,îçÀ1; ù\.—J¥Pû4 «Õú›ßüþ­V ç.U*@Z­6`¾Šrf¤J¥ÜçR©„…ûæÍH`|> S©*:t—ŽãƒÁáá!HŸç¯ÿú¯?ûì³>úH«ÕÂÉÇ`0üíßþí?ÿó?ÿéŸþi·Û…k ö‡¢Sñ4—ËaOº¸¸Ëåð7G}šÉd’ɤÉdª×ë¥R©R© Q¸;Z‚wR.—omm¡wƒÚL ÐÝcSõ Fç0`©T*}ôÀ}0)W«¦Äàƒ#“Â!’‚I2öTÈ/!›ò˲,>F£ñòòr2™`ö+—Ë;ŽÇãÙÛÛÛßßGe‹ÅàW`ç‹/¾X¯×Ïž=+ `Èüö·¿…8àûßÿþÕÕÕb±ØÞÞ†’ƒÊD"ññÇg2™f³yxxh0>ûì³àu€ xív 8eÆãq¨FAÞ0›Íø°ðŠV®> lƒã„#_ þ"„€qˆ#5€VÇk6›Pi‚C¢T*1м¹¹Æ¢Z­—ÇC]AîŒÉà!Ç᪶{¥R²áþá^¼xAQ¦ ¢(~ñÅív{ww ÷@ û³R©„©>Ô¤×××w†0¨lÐnF"‘h4úé§Ÿât­ÍÍÍããc“Ét×ÙoooÇãñù|þþûïçr9Xy½Þ/¾øûú/~ñ ½^ÿäɧÓùõ×_[,–H$Òëõ€ÅK0›Í`È€|Ì0 àà M5÷ŸñîTîïDrO¥RN ÄN§Ó0~ê ©H¯`4 tî>ÜÚÚ²Ûíh‘].—Z­~õêî5´p›››>ŸïÎg %ðЇ¢ýÏa½^O&“Ç' ß¹B sGËöâÅ‹d2 D.µ`¼ázà’êp8à 3hüQ­V 5#!¾thWKx<°,0P5™Lˆb€ N&¹eG—J¥o¿ýU,vÓét¡P3'{ŒÇãú§*•J N|öÙgÏž=óx<ÿú¯ÿúþûï/—Ë·oߊ¢#ïû·óù|ñxø1l˜@£ÄY66› ÔL@ ???×étGGG ­?yò¹{>Ÿ+•Êétº½½ ³Ì½½=x~A a·×ë…Z 𜣣£d2‰au$Q«Õ˜pBÈ«»ÝŽ^É?2™ÌétÂÌ\=ƒÁ°µµ…ã_@U¶Z­ÝÇb1¥R‰éà-ìt:OOO1¸V©Tÿñÿñ‹_üÂívÿã?þãöööÆÆF(úÕ¯~E?èÏþsŒ.iš~óæÍï~÷;ü L&ûä“O°g§R)|ê\.wyyév»«Õj¯×3™LS]^^‚¼»Z­:8@1YóÞ½{···„LbÀñ…Ѩƒkkk Gnnn–J%ˆn`Zëp8€PãÂ^mnnV«U`4¸Ýn€Ë×××Ðëá°q6°²@ †aà€ƒ–wvv 3p:~ø¡\.?99¹6‰|óÍ7°‚€ýäÉÉ *<°õ›ÍæË—/Y–Å­»wïÞ矎Sb`%ôÛßþsã?üP¥RU«Uš¦?ùäPøAa|þü9z£n·ÛétL&S2™Ä<cçËËKQãñ8lNÐV‚ß,“ɬV+¬=a*¥P(677 !¨$ÐnBAù.Ä;‘ÜÁaW³•J…<h ‚¸Ž!$™L¿åää¤ßïÿÉŸü Ò“B¡€FîΠ¦ÑhX,x_ ìv»\Ã@§Ó½~ý¶”/_¾Ä`ö)Rú_¿~=ŸÏ1.‡·¹ÅbÑn·ëtºd2)—Ëa\…ƸèhhÏ1.‹{{{@Ø­x½Þ'Ožôz=¬~dº^¯·»»Kæ‹5„k¶X, b;ÙÞÞ†+!Ò=¦I>ßùâÞ»wß@©;ÓëõŒFãÍÍ ZK•JõòåKpì^¾|©Õjg³¬rµM&LZºÝîéééb±fE8@OœtT€d;*€;ôêÕ+ð;¡t¿ºº×Njr¹Áöö6Yœœ¥ÎÛæþâÅ ‡‡‡X =¶ñ#Lâþë™JÃáÒ|>år9N8‘ÑÞÞ·Û½±±±±±ðO>ùZeL’?þøãŸÿüç¿üå/ÿâ/þ"™Lþð‡?ôz½(ýnoo?úè£~¿ŸN§¡D…© Ýt:xÙ<ÏËåòD" QlÎf3 ( A~L¹½½…ìÇ’ÀmT"pÀ wƒMøàƒ¯¿þy9cÂE¥hV«•eÙR©„gÔh4ž?Ž Âêúséws?88ðûý,Ë €ñéîî®ÕjefccË?û³?ÃY©ÇÇǰÆßÞÞÆ¾íñx¶¶¶à®u|| :—Ë…C-¼^¯Çã¡G0D1ˆCQ¬Zà9åv»ax‹Å xƒýï›7or¹Üýû÷ÁÈüÑ~Ôï÷äBw® úV£Ñaj£Ñ€ž§KCºZ­@â/Ã=< ÂÆɺ\.þƒ- Ôó¢(‚Öjµ@Ùv:Ø 0NİnkkK«Õ.—K v»}_¥RiµZ‡Ã‰Db±X±Xôz½Ïž=+‹?~øð!ŽúðÃáø¸··†ûÁÁÁb±ðz½°¸AÁ…Êåòò2Cœâõz?~Œ$zù|³8”<=ÂYÍfóúúšeY—ËxRœ~g4q¸>‹ÅbaYÎ'pÉdGGG^¯÷Å‹0'Àd. àc@71”fV«gzà¶, pì... u8Åb1onnbóv»Ý„†a0 H^(ßà‡ l§Z­ƒ¿ù›¿Q(…BÍzvµZm6›€ËåBÁËqÜÓ§OѬ|ÿûß·Ùlûûû˜‚ªT*Ø9P‡Ñš€ÆívC=···\'|3ŒF£ÐÙÃÇ h²0¹Å‘I84œeY¸@ÃD³\.«T*4=8drlüñx¡˜mooãÛf³™Ïç¿F­8üŒ¦v» ¿£««+hј6»s÷»ßáU‚ÛÚ‹/666vc~Îóüææ¦ßïw…ã¸Z­¶\.aw¡×ëa n>æ¨V«uww¢ó888€K+h¬8%‘òäÉ“l6‹Å¢Ñ¨Z­¾ÿ>NBÞÙÙÁiY<ÀI,:n{{‹*‹Á‚ ÝÁ`àt:/..¾Ë|úŸñN$÷ýýýn·ûâÅ øò L#„Ôj5lË„žç  9XKã.G"{c±¤žZ­ZˆÜp¶ªÏç) *X,†Ñâõõ5–{¥R1 ‡‡‡ 4¡2•J½~ýz:þä'?±Z­ƒÁÀjµÞRŸaBŠ}¥R¹¿¿s`½P‡Þ¿ø Œ-qu‚bÕï÷K¥8 ãñÝÆl6»¸¸@ŽY–(ŠÙlk=—ËÁêqBÀÖÁ`€“=xžŸ W¯^Avû›ßüæÛo¿E™&T™Læ“O>OÇq§§§˜rÆN§3!~¹ººÂ™õz<X>x½Þ­­-V‰Óf³áàÃr¹ áIÛn·ã¿÷Þ{n·ûììl>Ÿ¿÷Þ{Ëå)P ƒ` NÁ`pc@ì³Ù S¨Oqøì¥f³Ü !XT~¿;7Îù„  Ÿ^¯…Boß¾Çç£>Êd2x]ëõúóçÏ}>_.—ûôÓO! … MÓøÃÆÙÙ@üR©tzzŠ¡z:þꫯ@|L$0 þòË/óùüÉÉÉéé)T ØøýþT*õâÅ‹N§“L&W«ÇqóùžkwgD€x‡ÖW'ïÒëõÁ`“Ì31÷"g2™pì*`1š¦±À nww—¦éz½eÖíí-DÈjµº\.Ãu¹\>zô€. ƒ%Š¢ ›p:˜ëBEŲ ° Aæ=¯ Ü•¡zÅTKwgg'7›MÇ“H$Í5Ï?ÿçȃ03R©ÔÝ‘oß¾å8®\.___çóù››ý‹x®…Bá׿þõh4êõz_~ùe<‡ §L& ‡Ã××ןþ9ÎJ¥(ªÝnCtvvv†6 æÀ8Àjøì³ÏFµZý»¿û»n·{||üàÁ­V»··w÷î]¯×KÞ4Pâ‰D‚y&ʉ‰ ‡ÃAЇT*-—ËT7 îFGG1ø™´³³C.yåóóópWH›ÂiBiy½^§ ÙGº(µáÿ‘nzLpú*@€ÈNuäˆD¢—/_ºÝîjµºµµ544´°°À¥¿¿¿ÓéLMMa7§ÅO}7<<ÌÂdµZN'¶~ŸÏ ‚©Ë嚘˜°Ùl>\ZZúàƒÇÆÆ?~|||ì÷ûÿæoþt¥Ýn§iàõz9ÂZ,‘HT*•ˆB¥ƒìšú0=«ËËË••æ=À!lÞùùy x5™KE£Q“É´´´ …4ÍÒÒ{µßÂÂu è·;wî@4šœœd’‡if2N±…Bagg‡a’ lö`V'&&è §„cŠ…Øétö˜ŸŸÏf³CCCn·›%å“O>ùë¿þkµZív»ïÝ»7;;‹é„RýÎ;“““õz|…R©\]]¥HŸššbût»ÝØ€i냹|O9U«ÕšÍ¦Çãù_äï^È·IË dP4Œy!“É?~,—ËïÞ½{çÎXEø¿M&Óüü<†7Nî‘Hdvvvvv–gÛï÷ÏÎÎnllˆD¢Ï>ûŒúâîÝ»Á`Ðl6ðÁ8ÔY:×ÖÖÀ W«Ux^GGGwïÞ¥#i2™¦§§Áê’ÿ‰»Áh4öf5‚ õƒï&ONNj4V:¦”èÙö‘|2ÃÅT‹ŒÍ^ü–t@}*•Š35­äb±¨T*1CªT*Î=àÐb­N$pûz@‘EK~qq WVV°R(áv»ß¼yãp8\.—Ñh´Ùl?Ä8??£êÑ£GˆvغÈú裨½^š>yòÁòòòöö¶B¡xüøq¹\.•J`=p Ã>³X,´¶ 3Ó¬‡¦Ðét˜ûáÀÄ1_­VÉ?A³èp80â›ÍæÁÁAè‰x‘À1RãCåø…*œ`mm­¤\[[S©T”xh.kµÚ/~ñ D8/_¾Ä†‡é5?{ö G ^”õ\ö\.wppP*•@{F£Qǃg)_£ÑÐjµlxL˜œÃñ·ÛíäN§ÇãaÌ311®†Œz½>::j6›9ÓÀ9==ít: ûûûxð|°PF£Q ÏŸ?¦çñx¤Ri±Xd&±¯'ãÉ*q:tÉfffšÍ¦ =ÛZ¡P@kHx“ßïGæ/ù!ƒ ¤þþ~Zjõz= áÀjµZœ{êblüâ‹/noo™í;ŽÓÓÓíímÚS×}}}` Hߦå’H$(±‘ç‡óù¼Åbáiâö ‡ÃÇf³í@Ø$¼R„pì‘:(ÃÛýýýwEåõN¨eZ­Öéé) Ÿ¨_ˆS@È*óÕW_Át.•Jëëë¬/GGGÙl–:‘P:xÓ‡‡‡‚ d³Yšûûûч,..òm}ùå—´€{}Ûxø€$0”ìÍf¥Úöööää$a{ù|Þn·[­Ö½½=ü“P\Òé´ÃáˆD"¹\niiéæææùóçF£ñ£>b{Î…k›e ¨V«ûûû …bffT,ÒïpÕÃÝŽÅbÓÓÓè ñ^÷ðz½Œ+Áé‹Åååå¾¾>¼µÌ-B¡ÐäääÎÎŽH$ÚÜÜÄŽáp8@ ¿~ýšµlmm}emmíùóçÅb±\.g³YŠh8Ú0~år9VÉ`0X¯×{à_¢HŽŽŽ^¼x-“•šF«ÕÐÈRh2™€ªã $1‡Ö 6ú|>||LJ'”FÐŒ˜(2í@´C @>ŸgÕX]]¥ Åðcyyùêêê¿ÿû¿GFFž>}Z­VÿùŸÿùã?ž››K¥Róóó+++±Xìææf||üOþäO´‚ Óé ¾'Í"˧ƒ CŸ÷Ã?ôûý J¥e ñÅbÑn·Ó–ä}¢ì¢(îv»ÑhŸäd0XµZñf__M|Äþ´õJ¥R(š-—˧§§(ŒŸ?“H$îÝ»×étÎã9$CR¡P°¯¯¯ëtº»wïJ¥ÒV«EÐÁùù¹ßï/‹L}m6›Ñhä©öûýÔ•v»=—Ëa] ·¿¿™-`)„í´êP|_É”U.—ÃM<==åC‘† KÀK0èü’ùùùf³i2™H¶üôÓOö÷÷“÷ˆ$‰ˆT*ýòË/ò“Ÿ‚€¶’nff†%õΗ_~IÀÐóçÏËå2#èh4:>>Î.2;;‹ÃjµxR(pñâ›§E© $jŒ‹wîÜ!ÞžÊ H}ô$ݰ£äóùžW •ˆÙlƊɤMš¿žM·Ùl‚‹j·ÛwîÜùüóÏ·¶¶ÔjõÊÊÊááá‹/ÈfªÕj»»»>$£V§Ó)—˘’8F£Ñ‰‰ T:F£±¿¿¿¥D³û/ÿò/QI¡öã÷ÌÌÌ@q™››#ŽŽ3Ä2x<üÌvwwY£ãñ8Ýd˜GGGƓɤÉdzóæÍëׯÆãq©Tº³³“ÏçiÎôr¡P¨ÑhÐ O§ÓDš‹ÅÑ×I©T‰Ì!É`0 5!á¤Z­ 8Γ“ôívûèèªÁéé)£@}´5 `BŒø—?dx’l‰¥B:M`S$í@¥R‘ì 2¾G”£yyÉAmnn®ÝnóÍ7îq0äóùP(d±X‰ÄÛ·o±Fÿþ÷¿§Bzùò%\0È”›››"‘¨Z­15Œþ‚Ú¿Ûí&“IʼnD[¥Z­4F\ ¾l´?îŠÊëXÜggg1wÔj5ÒiC&aíŽF£†ëÈÓ××DZóÁÃÚÛÛÛÙÙA©¶½½M[†€läw‘H$“ÉÌÎÎnoo'“É©©) rCCC Ä&?{öL«Õþò—¿¤AF"‘lmmUC›(„Ãáb±xqq½sG6›Íår ¯à#Òœ£`±X~ó›ßÀæ…5fµZÑ)Sø@†¢ì­V«z½žìV§Ó‰J×jµÎÍÍ Ü¿W¦›D"a±X;“Ó餢£±>===33ƒ1äöööøøxbbbzzÚf³±„Ñ%G)xxxH|ÁÚÚ Mèˆ2‰­) $€ÇãñT*Õl6766P+b”áíÛ·ÈÏC¡P8¶Ûí¨Ñz<N%B.—³ÇB{ +€J¥Bå¶‹)"xnZjl6DÙ±šqößÚÚB‚çó£>b[¥é\,ý~ÿ§Ÿ~J2õûï¿?11Q*•>ýôÓÁÁA¸}ôуÚí¶Óé$Ïb±ÌÍÍe2£ÑH¦CZ´8¨)ÉWWWAp:}ôÑ_|122266ær¹°}‚·5 étš! Í`aéð¤‹Åv»M7Wøððo¨HBHPŽ¡ô§+âv»‰D"‘0›ÍÙl¯&Ë7z0„™Šh§¯¯ä5ZÞ^X ásœ,Åb1UN¹\Öétx\é” ‚°½½¬k}}G®ËåÂ/æt:¯®®pK€[YY¡ó9<<Œïaii‰C¡Óé|ðàÁƒ|>çH­V»¼¼ÌG#ØyÛââ"ó DÇÇÇ}ôÑðð0š%º½ìæL777Á`Ðívg³Ù““¬a»»»Z­V.—C lµZ°¤¨ŸH!§›±êÇ[Mÿðz'÷ééi¿ß Ìëõ:÷ù|‹…\.—Ëuvv6<<üøñãz½@}" !1§>º«««år™|íímÂOË%›Í>~ü˜øÓ§O- €uNa.—K*•™L¦‡êõz ¯X?ÀFÒ~ Š’„N§pa4e2:œÁÁA·Û^›ãa³Ù„C„R" U*ê "///C¡t**_‰D‚dˆÎ,4 ‚â.//ý~ÿàààÅŇzFóGôGؾúúú.0 >„9ìv»án3 + £££‡#•J-..ŽŒŒ Y^^†¾´´ÐU$­®®2ôÃZâv»ïÞ½KTÈêêêáá!ê>øÍÇ].W«Õš˜˜ _Œm¤T*¹ÝnV ®'µ7F£qjjŠ@(u(êô^ù.z!±£££ÆÇÇAËå.—keeÏôô4  áp»ïÎÎ:œo¾ù&‰îMÞõõõÁÁW{gg‡Î÷ }[ò’ŠÅ¢F£ ývÅýû÷ñÜbqP*•8àÐÞ½{÷ää$NÅ#¥µ.زËR¶Ý£ÏN u\.·X,~¿Ÿœ ­V‹¬óìì ÃtFÌ8dŒ0Íb¶_,= 4Óý~ÿÅÅ#\ô*~¿hæPÀÌ¥ív;>5΄ºô÷÷«ÕÊH3Óápÿüób±øæÍÇCB4íZ­–J¥L&w;ﲚy5ø9xg8ûûû/²Ü †T*…‡#›ÍjµÚ`0ÈèˆFM©Tš¥“N§›Íf6›ŸŸÇ$dVµZž‡Üà›››ÞݯÅñ±ãÞ½{=]ÿññq.—à ûèìì ƒÕjýä“O`UêtºL&ƒÛƒH[FÍív›4±X,¦Óél6ÛÎÎN8ƇÈ$ÙÜܤhÃå°O¡PüêW¿ùøã ‡ÙÞÞþíoËðùÑ£G±X cA<GC->úK4ŠÛív·Û­T*§§§N§“xHFÓjµ0¨3ÈywböÞ‰Å.óz™LÆX†Æ(ES*•Â`}tt‹ÅH´ÚÚÚòz½4U—––2™L:öx<8HI¢Ž³X,üW˜Ÿd<’x 7Fƒ0X >šÕÕU†$”`´Jggg-Ë7ß|!—˵Z-ŸÏ‰Dü~Þ! º!kn·Û]__W(€qˆÈèëëcZHÏ)’J–6Æ;~¿õ ú3¿ßŸËåÖÖÖpÒB eºÃà»ï¾º{÷î‹/šÍ&Ïp6›…að«_ý n¸F£ùÉO~ÂÃIAMsB4edšJ¥æççE"Ýd¥R©T*766æææB¡Ò&ÄHz½Þívãê&‚iNN‡¢)Nƒ|±€†L­V÷2­(á‘úiµZ_4 ÀanooQ¬#„7Ÿ|òÉüÇhµÚ¥¥%öxN4Ž …Õ® dż÷Þ{Ø”JåÚÚ ³³³‹‹‹¿üå/à3ö š¦X,‚‹H§Óàê...@~BZ·Z­¡P¨ÓéLOO#1J¥RÄärb …øÐÐe$€È™È!°Ùl»»»µZ Ä t4?}}}tá´À´¾¾¾´´txx¨×ëY—¡~bTV«ÕJ¥’Hd”6b±˜Ý1Nãõ§§P(¦¦¦2™ŒÅb™˜˜€-:55EâŠÏç[\\ìv»“““?ûÙÏþå_þåêêêÞ½{0æÌf³ÓéêKƒ>g8öù|”766ÝÝ¿ÿúúznnî‹/¾0Á`ðööÖçóÍÏÏŸžž2€ ruu…TŽ|8f`‹’aæ¬@ À…ô»ðz'Ú2÷ïßW«Õ,ßèL&9¿ÌŽˆ‚ÔëõOž<Á8çr¹ä#ÒZ]]… h·Û§¦¦°¼?~ü8‘H\^^...>|øñ̃O-,,À#ã'—Ë?üðCÇ#‹‡††ØÛN§Íf£gM·Î`0Ü¿9;·ÛMJ¿ddzG cÉç‰Df5\.?88¨V«‰D¢Ñh A£ÞDÐÍÜU©T Á$’…mè ºxV v ö †f½”Q©TJu‰YldddttÔåra6‡ÃjµúÏþìÏpŽŽÞ»wO$áõàFêää„ÌÛÛ[ªN§suuÕd2¥Óé……lŸ‹e~~>—Ë ‚°²²2;;KPçƒð”ÓmÃCpss³ººJ,8šz¤ ÓAõÎIØ#U*ÕÒÒpÀ¹D: j‡T.R}³ÙLÛ”Fÿ• [=¾ýö[\ßÿýÑѹ»oÞ¼aÇýöÛoñÄ'“Iš!Õjõøø‚)Ò#šÑ6›mrr*á£GÐZÀÃX]]•Éd4‹i"#˜œœDòär¹ ƒ ¨Ô êÄ9¡Ó镬V«ýýýƒƒƒüƒ"¬jNÇçóÑM¾¸¸ðûýÄ‘s»Ë$gÕívßÞÞ*•J ÿìÊ,Ê‚ €Êb˪333C[ftt”-ŠrÕh4bh"‡$2¥R‰ ¤³Ïç£ë­T*€T*íïï}öìÙþþ>…I^Õju}}=NsKÜÞÞ’mtss‰DzÞèùGGG´þ%ÉÊÊ “a¯×ˆ^YYÁY’L&ñ—MNNZ­VàTOž<)—Ë?„Y†B¡@ @t ¼Šv»MR‚ ØÁ88B[Bz„rzllŒFYÿëׯŒuôÿ}½‹;`¦`0X©Th¤R)Ž–±Xìääwïåå%öÂr¹üêÕ+DîFu3Òh4zuu…æ^*à*º4 y`çöõõ™Íæjµº³³Óh48f¢¥}ùòåíím6›%§B"‘ìííÑ\X<€â0`J"§iww{-@T¦[)z‰ J¥’˜"ŽÐihµZ`Ö`êž2ÏÌ„z½ŽÜX­V' 2ü*•J.—Ã.DÕüêÕ«óóóž*`ooO&“%“IŒïGGGoß¾%¹”ÿDö[±XÚµî818™LrÊF¶Q­VGFFôz=“íV«EÛŠß‹ÅÌfs$ùùÏn³Ùi ‚P,¿ýö[—ËEG8Qn0666ž={¦Ñh”Jå›7oÒé4ÿò׿þ5¤„h4úúõëX,FŠÔÝÝ]4ìȇ ‰sNBõ”ËåÐkCŽ=„ÆF&“<¢!vqqøc³\.§]F ÎÞÞžÉdbã¬×ëÛÛÛH6“É$ÄX<ü§L&OÐæõõ5ïmÞ‚R©T­VéÂøexCp ‚ÅP(DC†™p/Z²P(à¼Å碇¿þúk†ºd3Ø\YY& yv˜è¤Óé/¾øÂårù)•JØâ¾ùæ›­­­“““µµ5zeôWe2Ùëׯ/..¾øâ 8"ˆH[K¥R´ 0º³“†ÅkB|4·ÛM'ç¥x}òÉ')(”J%y’œF)U¸ J¥’lÉX,ÊÁ«€ìW¯^år¹±±1²ihÁCF¥¥È/<::bì¾¹¹yxx‰D"‘H©TR©T{{{´Y9Ž+±¾¾ŽTËãñ|þùç´F>ŸÇŽ· ³ÐJ¥Â©nT§ÓÙßß§“‰DR1–H$T¦ƒ¼Ív»=55åñx9NMMQ@ñè"‰q8ül8ôˆŸKÒçóvCå‹%n%ñöóAãv:/^‚rm¦_ú¼r¹|ooïúúZ«Õ¢£ »C£Ñ(Šßýîw ÆqÃÃ]âh¢IVøöööàà 9ã±Xl?‘H`Á%MlïÕÕªžx<þæÍμx‘.//á÷âi¢ËÇq<Öj5"IÏÎÎXøÄb1êr„%ì1]Ý»wïêêêéÓ§ hþñÿçäÊÊ ¤{ÄK6›Íï÷K$©Tº²²âv»ÇÆÆ¸n“““¸¥ ý•ûéOº°°àt:ív;sQ•———0P-Ëää$kk&“Ñh4›››¤<òæ1|F"‘N§ƒ…‚‹Å¤9SU@*fš§V« lºººêïïoµZp³+• ÑqøòŒFc2™ÜÙÙ©V«¬t†eT$1ìFFqu"Fä‰2G¡P `Ñ€#úòò’áS¥RÙÛÛªT*oß¾ó°»»‹še``ÀårI$’§OŸ.//Fž››ã8òÞ{ïMLLd³Y¿ßOäénjⓖŽËåºÿ>µ6¾?¶ŸD"ñÙgŸÝ›ŸŸ‡°Ôíva=jµZ­VFgff ;ŠD"™L¶±±dcc£7êù´¹€###H]9…×<==íñc±Øñññ¸œö^ïÄâþ§ú§ív{rrÒ`0`| žžžÆáét:çææHi˜ŸŸA$±´‘qƒð¶P(|ðÁD$¯¬¬¨T**²ÉÉI³Ù<==½ººŠ‡xtt™3×@ @ B¥R=|øtÌØØØÔÔ”H$š™™YYYÖ811±´´Äð/þâ/PŒ`߸¹¹¹wïž HÆÆÆA˜žžæ6²X,n·»V«Y,–¥¥%z#^¯— ãììŒz<Ðùv»Ý DÁ¹Ž6%tŸŽŽrDm6›Ì-×i4š>ø`rr2œŸŸOMMqŠ ÄD p×rî¡~„ÂÌðã?Îår§§§0TQª°†BÝalkµZIkš˜˜0™Lø5Ûí]YYAšf·Ûûûûu:ÝøøøÈÈÈÄÄÄòòòÅÅ…F£™™™ ˆè9Ýn³±vËËË(V釈D¢ùùy¨ &“‰ÎÛèè(b•J¥’ËåZ\\4›ÍÄaÓÞ0™Lì^0ñ·¶¶¸Î`×p31–h4*• §ªJ¥‚æL6›ÃÝvÿþ} 9 iZ­0¥««+š*GGGÔ}loPÈì%x¦£ µ0Á3`w:###ÍfS£Ñx<žÉÉIZ¦ÝnpJà"ÒXÌP{ø³£££ rèZ8NpL´žfgg'&&p5Ûl¶’—––ìv;Ì!‡ƒ ‡Ûíf¥›ŸŸ¿sçÎÉÉÉøøøÔÔT.—ÓétþçŽàäÎ;ét_÷*±±4I¶¶¶0+)¶ººº¾¾.ÂÄÄö%·ÛL&s¹Ü{ï½·¿¿¿¿¿ÿðáC¨î¸ñ7ÌÎÎò×!]Em955…HßçómllÐà ƒŒÙÉ.p$•J­V+-õ‹‹ B1±(â`êµF#ógÏžý˜ëé¯wbqgµB<~~~Žÿ¥P(°L§R)ŒgØ=x ‚ðöíÛR©„9¾Óé §Ø9ÒápH¥ÒX,†c;ì·ýý}©TÊ AH#ðÂåóùn·«Óé˜G C¦ÆÇßDÀ&w?†Xšì0iéT`Y¤C¸Ä–-LáÀ:.//Q À ) Œår9&øMp†3™ g@ä4Ngpp0ßÜÜ cáH‰DX³^¼xñæÍ›­­­£££ÃÃC‹Årzzú_ÿõ_˜3™ f³ÙB¡À¬•cûÕÕás¿høéDö«Ñhp“£Û½S>ŸÇ\F ²Z­Îd2Ñhôööv?Nq€ápgg‡ Él6óN¨Óhc @üŠÂD¯×ƒ‡DáÐjµØªÕªR©äÍþ?==U«Õ䎋ED¢"‘¨¿¿òÔÈȈJ¥r»Ý±XÌjµâ?H‹ I,{<žÿüÏÿ,‹‹‹‹¿þõ¯Á‚®¯¯¿yóA4C`µZýâÅ 89¡P(‹)•Êh4Šf¼X,®¯¯¿xñ‚]mø—_~Ibb³ÙÜÞÞÐÀ‹C*»££#ö-X=V Q¼QÌ™™Ðäóù““:ÔÛÛÛô8èt»ÝÝÝÝL&Ãé‡?Ez”X,V*•ô¾®¯¯9ˆ yÒ‚Û×R£ÑàûÊår.— ¹'µ­!è`ƒÁãñ`ßw¹\t;Y@ÇÆÆPÄCÇ£_T«Õè–ˆÅbúƒaww— 4ʦ^[áÀÌÌÌîîn±X_¼½½]©T‚Á`>Ÿ—Éd¥RéßþíߪÕêææf8Öét‡‡‡¯_¿¦“Æ—R.—ñ.i4ýlö಑Üd³Y¦ßt>¹ñp t»Ý¯¿þúG\N{¯wbq†[¯Ûí2°FfÔl6Ša_ŠF£Ýn÷êê Ëh³ÙÄþg2™'V*•ï¾ûN£Ñ4ÍÍMä´ív§¸H$úú믓É$!ÅÁ †L{ssƒølgg‡Gˆ4 ºoˆµZíááa*•€‡³Ùl­V×·½½MN÷ÙÙY&“¡Œ©¡Ñh‹ÅH$B{kk+—Ë©Õêt:MÍ‚OŠØxƤdס:@Ûƒ@‚¶¬Ùlæñ6™L„‰D"­VK ò[œ‡õzÜ5jrÆÁiAÊeDQ¯×!•³  7]__GÍ€|pxxÈtš‰|raÞ¶Ûí`0È3€ÎèM<ÏþÝl6é …L&#’£AýP>Ó­†À]A :4B‚°D&“IšN@fÈÅ&܃xrrR.—wwwÙ´ˆA.‘HBƒr#…ƒÔ–±X¬¯¯èd€wççç´\¨hµZšK†Ýnwoo¯R©\]]©T*Ê£ÑøöíÛz½>22‚€/^¹\FiJL#yÓØ…¶°§"_!ó0‰Õ±XŒ°·µµ5 ¨nö÷÷[­;4+/JÇ·oß‚ÊAÖU,S©ÔÉÉÉåå%WSE¥RáÛGôBGûüüœùM>ŸO&“ñAJªJšõQ.—ƒº£^ùꫯNOOÍf3ÊWCƒ“'.„@ À¥J¥œÀp™€Ïðpss322¤—’‹ÇG¥R‘¼È]Dkr2§Òéôåå%©¹Ùl–ù-•éÔy@Éh#ç¥Ù4.Å\.÷¿=÷?¼~úÓŸöõõQ®ŠD¢¡¡!ÀOL¢é¦Y­V´‰dbbB»Ý>??O Ü+‰\···gii‰kMLúòò²N§ët:ôæpñäLNNöõõim41Ç?~üøúúºX,®®®®¬¬ûN§Öøêê TBIAšÍ&é4•Jz u‰ËåÂM2>>Îg$ëƒ&'3ØÃÃÃÃÃCœb‚ óN·V«ÝÜܼºº¢õÊg9<<Ä1Gä:ïï7Ò)AÔj5s$¤ívÛ`0¨ÕêV«522;—2Ó¡¡¡““.5§v¾M„IؼSƒbÆ»^›ûŠT?<(?úëXܱêà¡`@_©TÎÎÎX¨z ëS†ÜÜÜPéär¹l6ËZy||Œ€$™Lò˜Ñç!Ü9‹µZ-ˆ’x²R©n4Ðq<ÛZnoo“'@AJê åƒÉd:Z©T, R(»z½ÀP«ÕÂú\.—çr9¹\Îq8h$X¯‘:ÀЀ&‹ÿ"½âü~vvÆ¥à.ı•L&Ûí6™×T€kÂá0n{¦‹L}M&S£Ñxùò%”jµJÂÃþþ>ò»t: e22|êÎ(@K$’óóó|>ŸÍfA ‹‰DPm ˆ²|:´+()ˆPÍÁ.¦•L&a2ůÈðÊl6ã,k6›Lª;B•JÅA‡n–KôµìH3¯¯¯©— r~…r¹< ñä³ë|õÕW™L†v!hóáøƒAäLÈX£Ñ(XÁÃÃCF³±±Ážä†¥ÝÝ]J‡‡‡˜ ÿꫯª^[[Cy],áß–Ëeb°P%Ño¤¿ÄÍ@_¥Ñh ™7™Lô£ Š!ˆ£‡“$1ÁÌ /××׬‰¡Pˆ Aðœ<èó@Qo¿T*±ÕŸŸ ‚Pu¦ ðmX%Q²bXå¬6::J!ÅDêg‚N§F¹æÇÇÇÀï2™L6›e&¯Õj)‰Âá0ÔŠL&“H$ÑßÜÜØíößÿþ÷Ùl˜ þŽƒjµ:•J%‰ãããT*µ¹¹Ùßß …r¹ ËW¯^1ÌG0ƒä É ^B0С±(V*ôš±XŒ±G£ÑxGböÞ MjÎlÁct=99¡¥ÕjµHdGS\—(gív»MÅúú:5àéé©ÅbáÝßßÇãx‚úûû«Õª [[[8›ºÝ.7X ±X K¶4œ,>l4d£ÌgH ™ €½Ünw«Õ"ò±Õj‹Eb€0yS…FÊ^¦²¼h s0®Õj` ÐùfC"S‰*Æjµ’C̓Šu…¸dÞR·ÛW(0žèDëtºÍÍÍl6ûèÑ#Æt(Œ³ƒââô-•J™\]]N o–¬K·Û;õí·ß¢k”Ëå333···¯A€YFP"‘À?øÙÏ~˜°ùC¨êzMt:‹ÚÀÀ¬öB¡ R©²Ùl£ÑJ¥ççç©TJ¥Ri4™LÆØÎõ çq~KKK …buuU¯×{½ÞËË˽½=€ /_¾T©T###x€õz=¹Ò$Z@|£‡†0ÿææF.—›Íf¸Wï¿ÿ>B t:Í\®T*¢3Æïÿ{àÆ‚ 0¡Í§Õjù,µZ=²\.ƒK»¾¾¦/ÑétøÊ¸hpF].×Ë—/‰•ç'Ñ¥`öFà  £ü¸™™™L&—Ë#‘·ÊN¦Ç±XL&“ÈãÏRµ€ÿóGû‚Ô=N¨tx¸z9báp5*ßD»ÌÌÌ@íf;|ï½÷vvvÐÿLOOçóùÕÕÕB¡ …X¾½^/6ï‘‘‘ÓÓS¦÷tül6Ûwß}G"ǯ~õ+‹ÅB,3„ؼyó¦Õj¡MŠF£À‹xî`} ÕÌ®®®ˆ D=,—ËAX[[s:,5XÙß{ªðŽ,î¤÷öõõéõzèþTƒÁh4B-'(’³Ãá xZ¡PÀÝ…šJ¥ø"e2™ÝnÇ&g0:³ÙLê#t²Z­–rƒ«ªÅbZåóùÈ¥ÞDsÜårY­ÖB¡@$ôÆG4vêõ:±ëÄ,Ð!¡Î°Ùl0Ád]ˆÅb<ýýýlWÍ;ÎØØÕ:JGÎ:“““Á`«a¡PA«Õb+2ÌyeeeJ|…BñäÉ“ÍÍM‰DBh}·Û%E.—ÆN§suuåv»A`g ƒ¤ Ûl¶v» ÝápÐ4`²•?Ëúú:žXZü©\.g·ÛÁÈðó´Ëaãðp2`P«ÕXÕ8ÈkµZìµìÇÐ?Pìàay’J¥X%¡êC¦†Ùûàà`,ÚÜܤö‡Mrr255…ä½Z­~ðà‰DÓá6òûý¯_¿¦hÇã,7Lð¤RéÂÂ’²±ÓÉdÄ ‚@wëìì i¢ccc~!U$úG¬PCÑhT¯×s3›Í¡Pèòò’ˆ"N·äíᢉ§×뇇‡8ƒÓá~&©Š,À5 °f< F£#™Þ © óµZÍm„ý ½'¨Å[ö,û À±bLNN ;pFúÓŸrb ‘Hzg˜½`A°ÛíTë6›íÁƒ çæçç‘å‚€ÙUîgÆH$qJ¥R4TÍf“H/|^ØÚ™3á€#o„ ƒS;v⥥¥ý×ý‘–ÒÿßëhËLNNbbüš•{š"N$Q†“ªžB©T"¡ˆ“Ëå@i ï///ÓW*•´¡9]Bâ¦õ™Ífm6r¹\~rrR(˜I"¡•FòoÒb±¸\.B‘ÆÆÆ¨4iòv:”9`:ôzýùù9»HqµZ­R©°œ ¦yì[t–¡&!+V(œÇù˜ÀÇ[­ÖóósÒ e2}ŠS,”———ˆ|AH§ÓŒ€D"Q>Ÿ'l^B(ÒëõTšP Då9___?;;“ËåûûûL¹Wt»] ¨Š©aµZ- Þ¡P˜šš²X,üíJ¥2N_]]ñÞÈS¦šŸŸ—ËåÔSë¡’&rïòòO/¼ºá,L*• -7XÞ¼d+B¥ [‡Á nOi¥R©V« <™iã~dƒÁ<Étšu–Ñ.T;FÖÐîB¡Ýn§@&â1•J)•J’¯¹¯^¼xÁ×—N§Ûí¶ÃáØÝÝ%j*•JÁôÇÕq}}Ýétö¡×‚8Ä€±¯¯¯çˉDf³9+ z8àà9`ÙívšøZ­–{ýéé)Lœ¨A€dI¢_q²lNçççTH=”9'±XÌ „Q$ý1XÌ®¬V+£Ð]¸|inPÎkµÚ³³3lŸ2™ìùóçøiáS­Õj«««$¡»¿¸¸H¥Rt„R©”Ýn?>>&~  AäV©TÛÛÛ‚ ¬­­ÇÑív½^o>Ÿ/ Àyà‘ˆÅbdÇ2™ŒC­&‰ Ì¿DA€R“4AÚíö÷ßÿc¬£ÿïëXÜŸ>}Úh4ŽQ†¨ÕjÈÔ …"‰`)‹,Äè´Ûíááaš˜´ƒÃá0·c"‘ ‰!8Üp¤¥RiooE„¼:Χá% ¶)Žx´8ŠÅ"ro¼²,ÁÇÇÇÄ'}ÿý÷4CñÈ]]]mmmá«B$€8’:¨Z­òÎñ¿ah,‘HXÂ8ðz½^TD©&ñ:´,¤R©Ýn/‹,aßýû÷‰¢§“£Ñh˜‰Ÿžž¾÷Þ{”Æsss~¿ 2¾8îb×år¹^¯'vyaa#3Õ†)£%² IDATÔr cÌfóÙÙÙOívÛh4žžžì‡õ<88Ø‹hÁÃév»ÑÒÑ\*•JJ¥‹<•#@Ìh¡H¥R­V‹ÿº’”Ž ív›™-·­Cb3ùöæ<˜†²Ù,®AÀâ—Ëå‘‘ôõz=ú lÜX(±wúý~²i0mùýþ¾¾><&“Éçó1†÷„oSR·Û]]]]ZZbÇeŽJÏÊn·ãoèïï§îfúb0èe÷f D]3ž¡`¢‹ §Øíí-‡eä/ÂðâÃ-Ñ ×&6Öd2 …/^pV«U¤´ŒXŒF#6.•J…6h '}Œýýý´ …‚V«]YY‰ÇãT²drŠÅâV«5>>N7 ±]¥R1èùÈ«! g*ô‹½^/wÎôô4Ÿ‹jâ“0:°d«Õjú{\öZ­Ô¾—XÒƒ|ñDÀ°DeZ¹¿¿Ÿ£$ß |zÍWH81£££4YIÊáüü|dd„ F³¼¼ÌñÂ( r©!z¸7’óÈAöJà ú&ð/ðYù€œr8ƒžŸŸ»\.PwŒèR‚H$ô”`MÉÆa°ç÷ûm6³‡ÁÁAZ7÷™`MOOc‡Ä¸ÎØÌ`0üoåþ‡baAXæšÍ&ßËY©TÂìCZ¹‘H©p0 E– €UYÅéé)MÌÚñ¤I ?¹½½ÅÏ6P(("P £,æ \(r¹ÜÅÅE>ŸG’¸··G¹ŠüÇÐÍÍM/4ç«¥½‰%[µZå.Ç*B ]:¦‹‡ŠÕ gÚ!—ËE}D‹™l Twáp˜nr¡P A‰DÀ}nµÛí E"ѳgÏŽy¶wwwiv ` MÎ=²îxªx´ Tßx:HÄ%9«Z­²"àzgš‚s€ËåÊf³±X &A:f~þ—ƒZï7prâÈEóŠð.'0ÆH \%aƒÆ(ÝX®+ÑÀÀ@8æK¡ØGÖ½±±A$!§oÌkÄ2Äb1äƒxñM&S8N$`I[&%•¨ ÒNÄbñ³gÏd2Ít¸[[[;;;̽ñ ¤Óiütø?8E‘:âñxЖ`…£_,‹ …J¥bâÍ·À9N<G ËmOæââÍßæíí-m&Pê°ISDÓò¦e·P(àÀ,ÆŸo÷Óíí-©¿‚ P&Óîp:lø¨ýIhÁh4*•Êׯ_' ½^zz‰DHwX[[Îår2™ ¦q±XdÖ•J¥¸·‹Åb,+ è^*•ŠN§#z÷ææ†“Ùl¦ß+“ɾùæü–###×××F£lr³Ù¬V«\¨ÙÙÙF£Ñn·].U‚ËåBì;::ªÕj Âöù|.—‹„9³ÙÜ+WÑJ¢Ã6LÊ©¦R©Ìd2£££ýýýñx\$)  h”ÈdéØP}óéACÛγÀõG¼ŸN§ pý1‘ NEÔË…ù¿ ÇÇÇÙl”ÂÑÑÑÕÕ•T*ÝÝÝ5›Í}}}@ëÔÔ2‡••»ÝNoÍáp`r³ÛísssÈ‘;Îòò2’|Òoèõ‘ÞƒìÎ;œç¼^/¢ÌÉÉÉr¹Ì­R(:Ž×ëmµZ@³A@2+“É8qö| x! PEÕC"Õ§J¥ ‡ÃÎ@ÆÿˆËiïõN¨e@Œâàg¼M°Ûí…@®Ž d(ƒD ?Çãñ@)€uuu…7eÅøøøìì,3¤PJh Øíö{÷îÑäÁÇÏ|öÙgð²çææšÍ&êŽëëk¥R922r÷î]h¶"²%©¤l6Ê\€pVY”N'm ‹%‰pò£Õj!á5 î(êööö|>_½^gÞÈ5Áè®ÏN§“Ïç±Ò!IÊf³h@YôcþD°Á©Âï÷ŸžžÒöEoÚ+ùUËË˯^½Bǧ§§©é°¼²;N$<~ƒahhÈï÷3”Éd&“ Ýnc²B¡à-1`ïï˜ÀÌ©R©Ìfs>Ÿ7›ÍÔÎ}}}‡ÅzÎcµZaUò·(â÷ûS©ÔØØpN‹Åp¦àc|ýõ×_ómB³8;;;== …B*•ªR©Øl6ò›jµÚÍÍ ãeüú$¾“‹ ù9c˜ÁÁÁh4*‰¸ž™L¦‡HÃÓSÌ2Ì­VK,Çã¹ÿþ‹/øúär¹ßïo·ÛH¡ ’”¦æ@q€‡ ÕÙUdQÓØív¸r=37Àèè(¥ÒÈÈÊ%N—J¥è‘ €=€Ýéå.1ôSSSÌ“ÕjõÐÐP Ðëõ333777333/_¾Ä-!•Jß¼y›W£Ñ¼ÿþû~øá/~ñ‹Z­F)ãB¡Ñh4 ÉdfÙÓ§O¡{šL¦½½=@NÇh4Rh3Æ#ßQ mÈõ¨ÔhÜ1èªV«>Ÿ:#ŸÏ#»ººÂþÚßßïv»‰O ›‰>'P9nüÉ?ÿùϬµô¾Þ‰ÊsCÎ^#7%¼ "‘ˆ‰(ÝOt¾,|ôtŠF£`õáÒÀwì!³Ù,Î$%`B{• ™ééizTFccc{{{ì1Íf“äOn&lDŸY¶P ‚@²"=hÌ·| HUÄ 2ÅÅœü’$9<Þ‰¤×n¢,’Éd(Ôj5œ(i¡PˆnÕÛ·oéJe22 ‘Lžo,ãÇȧŒÅbÔï™L¦'f‡: úŠV«Ì ç‡8f¦s(ÊùB‰›t¹\Îd2ÔÚœå1…R¢ .H8.•JT[¥R‰áj½^§ÁX‹ZùÆÝX…BÁøôêêŠ7/—Ë‘¬aU¥½@Ë•^ÄÅÅqµÜ'çççìgô|Ìfóíí-Ú•7oÞ°ô\\\BtÀc)‘HT*ÕÆÆ ‘H¤Ùl2d†¥S.—a5C÷E Àì,ÎIpËår½^§×'—ËI6 °ÄÓQ…B t¿ðüüœ£L,#ð–ŧ2H$:;;wR.—é€s¢OEÝ€¤ô­B [þ+ù6Š.//YU¹åT*ÙØÙPë"–'a•–aXT«Ñ[[[#³ôûï¿Ñh4ð«9䑼qppðöí[œ}ÏŸ?o·Û­Vëðð ‚“““p8,‘HXè9‘D"˜á½‡…Ò/ÈÞ컌¸èß2°Å¾„w‰šƒG»Óé|óÍ7?ârÚ{½‹ûãÇ)oy0p]3S¥åGÚœ;¤cËårz)P©žPï‹Å¡¡!JÐÛ±X¬ûCr›  …ˆ´Æ3<<Œ’倊Øápà’µX,¿þõ¯Qv#@T[*•’Éd­Vƒ¤Ádž»‡u„#ó@Žccc´/qñ2G ð2ñjSþø|>m.— ¿Jòf³™æÕèè(ÞZ‡ÃÎåáǨÂY¿¨pN'¢oÌîä{p‘;N&“A‚ aƒö&/¦8ŠÆþþ>ݘ·oß<áã3ΊD"l®Ìh†°8"%bóãKç¡¥v¦Ú%b‰…ž<&(N`Ç{Ú òáб;"E• [†-nÆÌÌ P°jµ¨ÈÌfóÝ»wé6ŒONNr4äPÒ××·ººŠ.hdd„.âÜÜFƒÁ0;;[.—‡††pH!ô¦4;; ÚáppT¥g¢ÕjÑJ!3‡yòå"†,d|à  …Óé4›Í$Ò[ÀŽD×…V¯×Ó ?>>Æg{{{ r€¹K<g›?99!î&ŸÏsËíïï£2ŒD"ÇÇÇ=×1=æ@ i YlllÐtV«ÕŒ¬!•6 ½^ϯÕjûúúØn9\r£Üf„z“¢§m7ÇS*•@âP4ÌÎÎÆv»Í¼äää¤ÑhƒÁééiœ¨‚ LLL0i§Õ6222<<Œ—j Ú ¨J¥Â¤ŠÓ#(t„2ÎL[æ dµZ}yy9>>ÎIb`` Ùèè¨ ƒƒƒhg­V+ P>²R©\]]å— ‚ÀÅ»cR}'*wæûN©Ý•T*EÛöˆÍfc¶F,gÒB¡€ëJÉÄÄÜÙÙÙµµ5 àù|žÆ¢V«=99/G¾šH$Êf³áN äïâââw¿ûÿF¥R)ñf³ × £0A[áÇáiäà Dq$?jXz²l<(»ñ4Q]f2˜¬›étšó„ÉdJ$`ÔzUÛÙÙïÓÓÓD"AS( qèæØt‰p¸\.wtt›— D ´ Ö××I`àºÙÿ‹G1žœœP¦ÁA­V«n·; …ÑÑÑÃÃC2á8Ùðl·Ûm†xÙl6™LÒßļ^*• NËçó¥R‰n8R–HH¹|v~mô Ä Y¦–’o\ºNßhóù<° ÊOX èVƒÁ â6E ƒÝn§}Ç ‚"“ÉìííiµÚT*õõ×_çóùZ­ó’}-)\ÆZ­–N§¹wvvŽŽŽ(Àéu”J¥D"ÁðyËåb ‡4ÙXS¶R\x,1777{{{Ô(Óá;*•JúQtêø³¬æ ’pçT¨T*ív;3BɆX‹~n5">0ß#”D~Óétø¦˜Šsä)Ò ±XLdãòòò³gÏð¸ããc,œÉÎÏÏø6ONN°é®­­Éd2ކ›››777ápÀT:~þüy2™<;;‹Åbpá¹n‚ ìííñÝe³YžÄ½½=Rà3™ γ³³l6‹†‡‰17I8Æ›B×ú’M©TŠØF¡P|ûí·?Úbú?^ïÄâ>11¸&:–{‰DB¼N§quu¥ÓéÈ…Á—LîÉÈÈ¥dÔf³‰¹yoo^é*J¥rHK.—{ûö-Ž>•JÅi·P(Ü¿ÿ·¿ý-ŠIµZMà¯F£‰Çã;;;nXÇÆÆ^¿~Í G“T*•žžžò"Ú£q I±Z­Öjµ¸ ’Ž„ †ÖÔ°þþ~\JÔj5’.0FöÎò”fÉýèt:H’‘*²fQ§___»ÝnÎ7@€¹+S#~•Ífcnát:Óéô«W¯à:`‹'§\$)> <©TšJ¥xÎÉô°»»KÊáá¡ ƒƒƒ‡‡‡Wq‚áØË±<ºX,¦ë‚´9—Ë¥R)F( 1(‹E…BþÄd2K+—ËÖ œ8‘HD"‘t»ÝH$ÒB°‘òÉ'Üc(Ê …ÂÄÄ"<«ÕjµZ‘?#èâ°ˆ:<¦½^_­VIOb±¸Ç<Ó‹Á‚—#©2ÜÏ4¾ÎÎÎм£ Æ~ljU!ðM7ùh4 < N_\\ ¾GÖÒívÃá0{J'î7vP‚ ©-W0O>>>f»íi?¢rÍi:ƒ6ƒA…Äi7Uô»9Œær9¥R íââ‚B8™ #ït:IH$333&“©R©,,,°ÇŒÛívrø<1Å8`1+<¢V«9â#A&Ìét2 ૼ½½¥'S.—‘ÌòWx<D„|N/0€•J…ú®R©`lüQÔÿïõN´e&''9-RàÞã O..rŒþö÷÷Y¬×××gfft:røééižm€'4sFGGé ½ÿþûä¬;N—Ë…~–¼`—Ë‹Å|>ßèè(q޹\Îçó)Љ‰‰ééi*ÀCƒa~~þèèW›Íf;99±X,8n´Z­Ñh4™LlõóÇÆÆp{¢¿Ä/ŠôèX£Ñ@&ÁÑ»j\<#1a’¶X,"‘HDµZçoƒ\þ+÷·Á`À6ªÓéÌÍÍg'CxêóùºÝ.˜››¦ƒÿ×ëíëëý‰[obbí¹ÇãI$èÕúÒÒHaz;$“°¥¡àðNV2ó :àÔË8fÉ5,—ËÌiùÞqÙôÂíø6¯¯¯iÔëu¤ñz½Ê ÔR¤ëé"‘ˆñR©$…Š=€ ÇÀÀÀèèèÎÎN XZZÚÝÝåŽ}þüùùùùÄÄÄþþ¾ÅbᦤrßÞÞ®×ë>Ÿ2e/ý±………|>O†8Ì«««ùùyú*4s°Y‰Åâ±±1æ” ¼Û±±1«ÕŠh’¨2‡ÃA7ŸN:éöÌ*4ÍÝ»w¹ùÁÈÀ–@rŽš Ñh¤Óix¨‡ƒFËåzõêU*•Âx‹ÅPýŸžž~ôÑG¨NOOó>QÙÒþ2ñxœ¶AΑ¨æ:ÎÎÎîn±X̉“R›äììŒ^± \(:ïSSSbѶ‹E†(ܨX”ß…×;Q¹ ‹Eª2™ õÇdb …y{Ìî~²¤Êd2$¸1áÊ"¶•ÉdJ¥’…ƒš”˜jLx&ìàlèà…CÀd|cc×F<§GOþËÞÞ^6›•ÇXµÑh`·áM2Ç£"` ‡U5“ɨÕj$À×?„Ý€já‡Ï J¥|X$_Ýn—†;fz§ÓIÜ6"ë‹‹‹ËËK™L†2I­V“H$hïÈ»yõêÕíím2™Ä)›Áétrýa!Т!4"Z Fº[¨ ‰¹a’‰ibj»Ý¦Y̤´X,rõ òb:£¨¼¼¼<88BËù†Œ¹(=„««+¼`‰¤R© ¡Z©TZ­V©TJ(G«Õ‚ÕEG›ûBød2 gB71:€„Ű|@[Ôjµ‰D2Ôææ&s!ºÆ˜ zLíN§ƒéœ*/“Éñ@~^*•NNN‰„ Pär¹V«E•¬P(èàœ&ív›™X,ž™™¹¼¼D0p}}-öHF‹îC!ô$H8 ²NNNZ­VpÄ···ÀˢѨJ¥òx<ô²ÇÆÆZ­cáz½ ïܹ³¸¸¨ÕjÝhµZæN§;"é9T¸¸ˆ {»¾¾!‰v•V«EŒ¸¿¿eŸÉD¥RA€ÈRÒ “CÃ@k…†ƒX,†Á"“É8Ò‰D"¬Vù|M¾V6Åd2IMÇœm"ƒááa½^ßjµÚí6“‰û÷ïc b:B{}ddŸÁ` †ðù|œÜT0ägZÞl6—––²Ùl¶¾¾>ÆÎèÍ}>­3Ä6§§§xÈJDþ‘H$ðO%“I›ÍøGÎÔ"€ ðàÀ B:ž 8ü#²Åt:ݳ1cå%VB+O´Ë&±òÒU‡¡$B·Ûm4Ô°|w|^öì¾¾¾ÃÃCf9Ï~÷Ýw˜ûÀ.ÞÜÜÌÎ΂-C£EŽñÅÅr¯Z­Æ\úììÌl6]¨V«ãããjµº^¯Ûíöááa¶™±±1¦÷ãããŒ[ *©T*ccccccœïÙ×½^¯L& ƒ´@ ;óü_öÞ­©íôJû¾%@{! ¡-Ú" !!;»m·»“îNRI§&'s’š0ßj¦¦jR5SO¥*•¤Ó‰;Ýí=¶Ù#@ $„B€v¡í{ð{­Éó¼ï¹}ðp4ãv0HÝ÷Z׺®ßòùp-[,àš>Ÿ4›Îär9$+<òZ­›/à ÿ+ËüÏ—ÛíFµ`µ_”u¤Aé£5t¹\h¬V«ž7­ÙlæàÆŒÈîD9½~ýx÷;wÇÎÎÎêêj$ÁöÙgŸ•J¥d2(‘À~:ǃBÝn·Æ×_ ÑIß¼yΛÏ‹x¸–ÐÍ)ë˜=šL&‡Ã·h``€ :Bå' ,ÀLì" ŒÅþpp¦Š²‘æ—3§9Š|À9jµZ"‘`¯1ÎÜH$‰Dž>} »<‘HàMæG"G£Ñh,‹^¯…Bœ>,´cr @Ä$5†øsssCü§V«=|ø0“ɼ~ýk4U(r¹|ffÆår}þùçûûûúÓŸ4ÖÖÖˆ¤súsæ’©ar@¼¾¾NvÉf³ !ôz=yq,¤¸ÓP¸õy5 Ëÿt:8u,}¼nBˆ««+f˜lïüæ›oæççY%A/‹¼ôÊÊÊ£G E&“aÏT"‘`^W¯×ÛíöêêêÉÉÉùù9žnx)|+Èt8ëF#`,üŽV«µßô° NØBæÀWWW$iZiµZ|–81ðF@]¸àa7AHGº!,ưÑn·£«˜L¦R©„­ž\_´An,Z²r<ÞhåxÂCx¦èv:···^¯—ðàôôt¥R °‘ëõú³gÏÚíöææ&¬ÅbQ©T@ëJ¥0z‚l®Õjét‡[?%C1±±±mìØbD°ÛÛ[—Ë…Ë«1ˆön·ëõzs¹–bUÖj5¯×‹[x Ä釀Áaô¼½½%Êô‘|}•ûÝ»wÙâH(?ŸÏ røpóù|¹\n4ÇÇǧ§§r¹|bb¢V«½zõ “éöö6Ž<ïkµÚÖÖ‹ZâãÛÍçóÐJÜÓÉNLL ¬¬¬Ð¦Ói†Šü}|lJ¥òÍ›7V«õôô”PI£ÑÀ[ ãý=}dd„ØjµÚ¯1ñƒÃMeÈää$*6õ×õõ5Œ_Ôp‹Å´ªV«Q) ' !nooÉ¿ÈßoÃ9>>&ñijŽ"„À†DÇ7ë›égÉÙÒq⮞Íf™£²' ¿.޽½=ö˜ …x<àââ‚m«õzÝ Ô`;& Z‚£(Ý­V‹Ý ÌâÐO°mÀHalEt·cs®òÛ±n Â",~FÍf3N#^… ´¤ÜûŘÕñp IDAT/~ ª Ús£Ñàår¹\J¥’ –‹Ñhäċ|,±ûÕÕU†ÿ­÷ëGÈ…Q§Óit„´ü08eaY3§Á=Bª)b a%ÚP| 8ͨ¬wvvÀœœðÒÕëuÍþ°ZÑhær9^7œHÜ%$z0ÝÄ#Dbœ¤1 bLt¸¤Ãá°Ýn'§ÕjÍfóöö6H öwÃtÄ033s||¬ÓéÒé´Ëå¤Ðç;b<ï¾ÇÇÇx"AÒ¼ØÞÞF„A6¡•Ôjµ§§§0–#ÑÖ÷ÕKèFÜ”Dá0YòL’I¦¨BQˆÅb•J,J´dÍÞGQ¹ÓC6‡g ìEœ4a«Õº²²‚_$ô›7o@²Q7 Òmll@= Á•ïo2™ž>}‡gff` ¥R©\.·³³C†å¯ý+³¦£££P(tppÍfÃá°ÇãÙÙÙ999ùÓŸþ488˜H$Ú‘Nä9ÃíS,IH2©cªÉ‹™çÀÀ¸sÚüñññR©Är*RÔcccô<šäGnnn@ÅâŠéo[¥ÿ Û‹ÅðG²ïp#ÜA„!1bl¾ßs­V«©MX_ „À±ÀN¢§OŸ2ž¢ºgÁÝn¡P Ã¸¾¾ÆC‰dÁ‚$:V*Y C™LþRÛíÖjµ[[[ø|˜F„Œ@aµZ-N+â`÷A: !òù<$¸Ðê™$3܃yIŒ¨o߆ˆÀöA|ñtëz½ÞãñŒŒŒ„B¡­­-H¿HÄÍz½žÏçr:V«Õëõ²§pff†(#37œ¬8ŽðãSájGC`ÄJ “•¿sss¬%)‹‰D‚fhhäÆññ±ÕjZ „@§‹U©TàeÀ> !Æàé„õ(„¸ººâ¸Êo³Ù(ݳƒ‰e§r¹e’6zhhˆWž1…¿)>éf³R|"‘À# ),îÞ½{xxh±X~õ«_­¬¬|þùçggg^¯ç‚ÙlÖétøŒy%Y½Âøš‚cffæààÀãñƒA<òƒ0VEØ $NÎÏÏÇÆÆð\ù|¾õõuÞñN§ÃKÑW´Ôj5ö'.žb±H¥200°¸¸HÐ$µ‚˜Î‡9Fÿ?_EåN‹'•JûO'sNÒÒ Áð j4š••Á‹‹ H³0ö€4‘Æç=`µJ§Ó™šš2 étzdd„[!™LŽk4ŸÏÇsŒCFA¢¤Ûíb ‡Ã‡‡‡8ˆaÑñ© ‚æþ` ˜…iSx,dsÀ{ÆW7::º³³“N§% )v ®L&C¾Ø)58?!{Ѩ@ñ–€Á#ˆO§Œ?¡SÅFÉܘ©©‚-n4¼ø8w»]`èb­<I€-­VËd2auK¸ÆãñµZíñx€ŸŸ“uÂ~099Y©T†`ªÑëõ;;;½^n C|è^¯—+G"‘pÁ«T*ÒCè$ø‘ÐFÁy ·U.—™¾€SŸ˜˜Éd8·Æb1´©Tjee…×!›ÍâD"U ³Ùl:ÎËËËW¯^át&Ò2??ß_¥trrR«ÕärùÉÉ LP&8²Ù?Óh4hkXE‚/ˆ…D¼G\E˜s€†÷ñ¢2™looOö~-I¯×cŸÒ H"ÂVH+ì>U*•TÕjÈé!Nîé‹‹ èi¸¶Ù™EjBžø}†^¯gíµF£áßÂ)(•J©NˆRÛl6ž‡‘‘*Ü»wïÚív ‹@Àáp,//‘0O§Óß}÷ú¼N§û_ÿë1*ˆÇãĉ···÷÷÷YÀÄàÊãñࡢ傉ÄKÊïE¦”VT"‘P(¶LPi5Á`ÀûP«Õ*•ŠÇã¡t [’Ëå¯_¿&äˆ ¥N¯×³/lß?þøÓþ×Gq¸[,"ívÖ‡åV«µµµÅ„Åb±h6›³Ù,ê[¡PX__G²'rpp€—€ U,c^yyI5Q, …ÂóçÏ …Ï+.§ÓùäɵZ½°°€éwooïùóçü t”õzM­ív›s–X˜FªÀTi!ÐY’fTÀÂ0¨ÙH=¨ÃÙl–:]Á.’߸nqkÔjµ`› ë°q~îºW¯^CŽgDI>“C Å€oÅ‚ü*ß}÷Q)^´µµ5å¡4³P›Ú%AðžÆÆÆ€±°µgoooyy™w£é ¥Õj±‹•™; c qL„XSˆø 3Of0ˆîq}}ͬ˜a,anPž1¥R‰mÿ+H­V›žž6›ÍOŸ>½¾¾öù|Üš6›­^¯Ÿžžúý~^üÛÛ[§Ó‰+? Õjµýý} p/È(Qù¦R©ËËKü|œòÐc¨-¸Õâñ82ø1OOO­V+¯®!æÆ;;;ؽ°íïíí•J%ºUDó³³3’ÌtB4dÜ[Åb‘[–§ –ËåÂâ Voxd$Á««+D ùØV*•‰‰ ŸÏ·½½Í•$Ö¹\Îês0!LÈÜn·^¯7›Í@àéÓ§ÍfsrrÒd2a٢îT*}^©Á`J¥lä}„åÉ“ÌkËì·ÛíòÉçó°À(ex³*• cáX,vyyÙétšÍ&Ñ9¶·oßbÜÈC3]*•^¼xAÔƒíð°.2™L"‘ø`‡é?|}‡ûÏþsÓ333Ø]ü~?£- €d ¥RéÂÂÀ„‰ÍÚd2)б±1¼íl½R(tÊ;¡•b½¾¾žššÂDïr¹XyCá911‘H$B¡T–Á³?A©T&“I2uX&‹C©%›NˆÕ #ŠR©œžžfÉ? ¥€-ˆ:x™»Ý.ÎNª3©Têr¹Ø,È€¨X,2[S(ýFž¤8b(Îbê_ÄA¥R¹´´Äþ³Ù ×! œ‰F£ ¦§§ÁwÌÍÍ…Ãa²ûKKKœ€*•Š:Z.—»Ýîp8ÌB¬ýN§sll 77(C'ZêõúH$‚˜ÆÆ¸P(D`³Ù îP¹sÆþ?Ê|‚qq±Xd“ÿL…ÙlJqttDÖœåDäq"q¤¢Ã0)%lE‹0== Ñì³Ï>ÃË8RN&“‰É<Íx©T2™L¡PÈãñ@Óét°ÏÆÆÆHù Fƒ—Ÿ'Áh4 ‹Å‡5ÍØØØÒÒ’Âf³MLLôz½^¯÷ðáCÎ_¯×‹>ÉÚîþÞ\:R©½)‘–2b¥[¥;aäv»Q>I~1ãסr¿¹¹Á!N÷Ìt¾J»ÝÆã T*¹GY¦JT ‘š{lJ¥ÒÒÒÓÇÃâ:r 2™Œ}îÍfÂL:žššr¹\?üðƒÃá ÛcuŒÍfƒÉ˜IOCY066Æ„€o¢P(Âá0jÞââb hµZÍfsffF§Óáp8à0'''ÆgŸ}ƾ.c£Ñ€ÛÐákBBZäo6›p嘊 !ÐÁVWW?èúÿ~}‡ûââ"3^0ILŸqƒ ®áļEÀ¶'ë“ a]__›L¦‰‰ mN§úy0T«ÕXš‚Á jCÿÁÁAr€TØ%ŽŽ° Bðýâ‹/H·îõz¨7 …‚Ï! +ìv;î´`0ˆ;MßÅb‘ß‚lp"ª*∿étš³›â”Ø-p®¾ìØn·×ÖÖ8¼7¢±T«U:J¦¬NçøøÞ,QÃjµº±±A@æèè(“ɰLüððsX ÄZšnòñÇÇÇÝn— £E" »§ÕÍÍÑhüüóÏ% X|Œ°s9†W¿ßÏ}ptt4<< ‡)eð«P(ðG±{–”o"· R©d ‡µÚÑh€3~j†18ÜÁà Ôüàkkk¨gñxœÈÏÎΫø(çÉ—@h4«««pÈ ã¤×©T*'''N§ÝnÇãqš3zÁ›››ÝÝ]æ½^/ŸÏ»\.Àœ ¸Z­ßY¡×ë)Ty/0eqİ$ˆ|4ÖxÔ-™Læñx0Þ°¼÷÷5§¶^¯ïõzÀãøÈࣇïéœi?.ø´ H8Ü###¸rI!¹\.HÒp„°ÒòyI&“ä?K¥R,#ÞÅJ­V Þétòò&îîîb¡Y]]…žÄ̰^£R©txxÈóYªh¯×ËårÛÛÛÐçÙI2<<<00ðìÙ3{a<#ÒÕÏÆ÷©¢ççç°óð‰òîðâ“tu8 ~ࣨҴ’îa©Óé¤V…7È…kÃ;ÌÎd‘Fc¹\Æô¢ÑhÀS¡ŒÅbÁ`]*«««,*¢? v„“·V«MLLloo‹Å»wï>yòëôÆÆÑvHa ¯¯¯———õz=Ñ¡ÑÑÑl6[«Õú‚ôÑív¡§¢Zb¢‡ÐĨ©©©T*tpyyYÁœsddDzÈÒ;ìhäªøá§ÛK@0’ÕuÉ”ÂôàJB0I¾¼¼L§Óô³yþµZ­x<ǵZ- RÊå2¡ÇD"Á Sl*|0€€ ^ÿÅÅEút0Œ7õz=ÓW6æ0=>>~úôi X[[K¥RWWWø1Ün7éy´NFg€MÈñ !‰„N§“ÉdÇÇÇü­V Ë Öøýýý^¯·µµFëõz*•˜H$˜X^\\l„â ytvv–@ùðð°ÉdBx<år¹¤Ri?ë„Å‹©2ŠœJ¥‰L<ÿ;NüR©Ä^!ÀD‰D‚´Æåry£ÑÀ•Ä* •J9ƒÑ(ÞP˜Bår#Y£ÑÀùŠkˆII&“™M&“TH'''§§§xÀcW*•B¡ÀÃPN8ë9( 1 êv»šø<âTþgèÿß×GQ¹òÉ'L#É)t»]ZZ–ž êQ&ÿö·¿…mK±|ssãt:E£Qên­V»°° œ¢›4s8v8J¥„4þ Š ¼ü'!D¹\ ñxÜjµšÍæv» ÅÑytttqqÝœ “Õz½n±X\.åsB›öhÈ\PÊÕëu0ÐøÙÑRyjô" RÊ.¤ ZDR«ÕЍBψ• c>sNL¸?.•J¬×Ñh4áp˜³Pð–ˆ$n·{aa¡Ýn[­V<üŽ<ÀÿÞ.ApK õù|ˆ­´ '''n·uÕëõ9&qq¬Ä{‡-Â1,Oâýê5F£1SAÛl6¬i$PFFFpv ! )2§Ö6 \„dÓ«Õ*þ}ž¥r¹LiLÔ@­V³‚<ì9‚Oe¿Û>ØÈÈÈùù9µ*é»ÝŽÛ}aaµÄçóª …B(u¡Pý„+:¹ªÁÁAm¼F£‘Õjµ2ì„ T*Ñv8t”Äûe┟‹¥=Açµ9"yŸÏ‡‘‘G¥Ó鿤¬áãIåA°ƒš·ÛíÎÌÌÐýð6‘œššJ&“ühñ¬È  ßÇbz‰Dr||Œøc2™2™ +œ8ÄonnÓGGG- CZŸÏçt:[­úíÙÙÙØØ[!­Vëüü<ÚÏ>ûŒÂp£Ñ0›ÍsssµZmaa¡(]89G—Ë…kËï÷£¿³j†`9½>Ål ¤ÅbÑãñüß5{ÿóeµZ™g !8s Åœ ‡ÃJ¥2“É!îÞ½ËÜï§?ý)ãò¹¹¹N§ƒ˜Ûh4¤Réøø8èýP(Äú4Ø5…BÕØÌI¼^/ãÇŸýìgçççJ¥Òd2œœpÕÛ´Màp8(UhœÍf3r3>EõûeÁ(òX°’¼½½åAÄÕ€ª¸±±7†ô R©dêH|Ÿ MhJ¦ çT«ÕÊd2xêOOO ú×ëu¢¼ÌHqì„ÙDúZ÷ùù9Ó3‚àì@ ƒÈÓèãJ333z½¾P(x<@d5qPø|>°Stå…B!‰ †ÓÓSt˜ëëë±±1—ËlzzZ"‘@Á˜H'„à†_Öjµb“çvçÌš˜˜èt: ‹GGGqU‹E˜½THðÜUB±&“éüü¼T*y½ÞX,¦R© ÿ‹Eºˆÿ8£vwwiwâñ8 0™èl˜ä„lO¥°B°SŒÞ¿P(är9H‰„Q0éPt,@”@ÂÖét£££{{{ÌW àÁ9)‹ð¨9åñqšL&¾³x¿‘-ít-2™ŒSÑ¥á  s0È⨱ÛíWWW„Kl6X`,:ÇJ) ¬,¨ÿ|:,‹Ûíæ±ßø|>…BaµZ™U öÕA=J$HIÄ*•Êúú:4MXip^Ùõ(—Ë766Øc¬”É0úï Î Š3Æ'*• ®ŸB¡8::b< ’­èãëëë¼_jµkT].\åþ*´ããc™L%) ø¥3–Éd›››´ÝôpR©”G XÍíí­Ûí&úðAOÓÿùú(*÷/¿ü’AåÐÐÐÌÌ ·Û-—ËRSv±Û÷H(‚AFá–´Ûm–êfóûý ‡£X,ú|>Œð>Ÿñ½m?!‘CAfxY¯×S( coooµZ-¶zð |Z„Ø”J%.xöš²8‚Ú™”õ%Œ\.ÇÃa‡È ƒ|&«0P9U»ï7Ê" à®BÐQV«U|Ê´Š~¿-³ÕjMNN²lÞb±ð Ö£¾&"w­ž333‰¤Ñh0)R«Õn·›!*[oþÆÙÙY~Gxª0j¨Ëîß¿¯×ë, §áØØØÜÜND‡Ãp‘>Ñ+YÂYèÂXø­1ÃbÃcC=Å€ kð\¢q3À Áïñx2™ÌÐÐ'׳R©¼¾¾N¥RÀQœt:üª]|“ì_eHŽ“;€}î¨R©4â< ƒ¤@ñkñ`LNNbÉ÷z½˜ýÍf³Âãñ8N4‹Å‚qhÏíím à¸d*#„ÀþÁïN1NÇ£ÕjU*ÕÈȈÍfƒË6666:::88ȾYX1dð~àJBH¡V@pèv»D ¦Ò¤bbÞ@: Ñ|hhÈáp0è6™L777ôd333###ñxÜh4NOOÿå/q:Ì~.//¹Ò˜«aüç^ä bº†jÇ^&«†††@T`év»V«õg?û’éøø8žË;wîôwóz½ÞN§ãñx|>_µZžžædÚŒŸ ›ÙÅÅd ~w&ä\óU ž1¿±ÈŒåæ$ýß¿>ŠÃK"yB>Eðžðd“r8¯^½ê‹ƒÜÉÿ;8$"ÑÙÁN]^^‚ÙÝÝ…Ç2Äè|>o·Û¹Ã•Jåöö6.Ý‹‹ ÂÜB<ÔôËÕj•)y¯×c¼ s†O5OÛÈÈz1B°ÅbÁ!£V«9°¯Ñ¦€%(—ˤ ÏÏÏs¹\,#ç²··GÑz||Ì–‰ÝÝ]$¬£££T*Ö8™L‚Rêï”Æ>0>\\\À‘gÒ%•JÙˆGeee…m–oˆPÑØ¢û;ŽJ¥‚ÚÐ÷†²ÐŠÅžÙXÙ_ÁIíöö¶_sÁ`úÇÿœµ¨ÔæôÑ€wijÁûëp8˜µ#C€C¥RÙívôbl—Ø©÷'&&@úæÅdŒfuuuwwç-üÙÙNó‘‘6r6hµZOž<1™L@oHî<}úévww÷ôôÔb±d2&@õzçc7ð¢Ìî2™ÌÖÖ—4o4vî¿ÓÓSh8´G l ¥d³Ùþ«W¯×i@™ñôz= jÐäÑg‹Å"CÚjµÊË؋׿V«år9ð2ü¹Óé”J¥”G———døÇÆÆ...~ó›ßL!X´¸¸h2™âñ8«Ò·¶¶Ž- ­ÀÊÊÊññ1«fت¸¹¹Y(ÎÎÎ^¼xeˆl½^ßÚÚâQ)‹›››@ãñ8jj"‘ ÑÁwpxxÈ—Ä­d¹\楨V«ïÞ½K¥R¼¶lÞBÈd²‹‹ ~`øT4ÁXK‰ð¯C+:88øçéû¯B–ÈÔ±X,ã4$k€Ø¢×ëñ¿ïííñ ¾{÷ðøì_˜CZ­Ö»wï¶··ƒÁ nˆi°>‚F£ñéÓ§N§3N#z‚ý|÷îÝÒÒ&à<"¡Pˆ'O­V?zô¨Z­îììP,3½äTeÚNÕÏŽÐB¡011¤È~/yf5>ŸïôôÔçó‘$¤•iµZÑh”ª$î™LƲ*Ê®óósLudê8˜d|‡TÖØéhtXWíñxÔj5;¿¯ÙlFæ@ùôÓOõz}³Ù<88À–zxx811ý»Î b~±Xìðð0V*•`0Hjæüüœ†4˜^¯‡I^˜ Èd ˜‘HçüÀ*•ŠÈ³eÂ&8R fMÎ:¹L&CÅW«Õ¾ÿþ{:¡×¯_ÓËã¢ùâ‹/àîe‡x¡Pðù|x¥ü~?k¶\.GZ sÌø¼Î···ˆÂ¬‚q8¨Àì?Áá²F£ÑôÁxB`¤° U£Ñlllh4^jjîœ6lBg¡R«Õ"ÎÚh4677ãñ¸Ãá@ËI™è üîBø½¼ªŒPº ñùòz½õzâ£Z­J$òAL¤,îíí±­4™Lz½Þ›››íííßþö·/^¼`åúüÇÐýÛ¿ýKÞ;Ò§>Ÿš. Øz½oŽA.Ô~¼1>ŸÏb±üîw¿S©T¬‘ ƒƒ]ˆ×}}Ýï÷cæ‰F£ïÞ½cñ>,8Ü)¹„'''ìüòz½8Žt:ÝÞÞç8}Òîî.1‚|>ÆÅ¤„öš<ÔÇðõQTîÑh”K­Vc¿EÂBƒATcƒÁ055'Y¦T*…B!»ÝÞëõü~ÿüü¼\.×ëõÑhÔívóm­Vëììl(ÓëõD–x“æææ |ùå—Ì‹ šL¦O>ùÄív³æØl6#Äò±H,]¿V« …BL¤û†††L&S¯×ãþÇðŽxW*•€¢à4 ß¿½½ÖáñxðC…=;;›™™a#f5º{tFTu‰DÂÙÇ"f|¸LÉP9ºÝîÇ1 ¸\. 0v»•¡z½ž]\ŸtåwîÜ¡SÁžÔ·ÁP›°¬£\.£íÜÜÜLLL°YõÙn·+ŠP(d4£Ñ¨Ï盚šB9E6±X,SSSê§§§‡Òï#JÀk%qJêÄjµ"pËårÞAXTD±Ün÷ÐÐlX êwî<ìÞý#HXHD J¥Òþþþàà ;š!É0XB ®€@D¨¿ÃÃÃli ò¸¾¾>99á ]+„h·Ûóóó´>¡P(‰H¥R(¾4þ¬Cqêÿxè9¬AŸ¤‚ÿÐ’ò`Øív8øPz:ÿ+!O>Á1hqlôFl4 ƒ©d&ä:±H.—Ûív‡Ã199)„ÀFÅ!Þï÷#Ý0òÅx†¶V­Vïß¿}–³ÒëõÎÍÍseÕI©Tââ»I$’ÉÉIVݽ{W&“% à?*•êòòR«Õbrc¹Çw$aƒæ£GÆÆÆP2q'/--MMMmoo£‰ÑtÂ[¶Ùl¼§´ ,Aõz½†Y4X'Tîeæ¸Ç IDAT4¨‹‹ ¦ÊB£Ñh³Ù”J%vÉwšþÏ×Gq¸{<žf³IÁK€t f–ÑT*•f³‡aÚÍÌÌhµÚããc‡Ã‰DX"ŒzÞl6#‘H"‘Ðjµ>T«Õ¬Wæ–žœœÜÝÝ]XX /ÃFʼnDdï)ÒøP0A’Á¥1™Lä8¸*8©ÑIÃá0ÏÇîåååÔÔSu‹Å2>>ΑÁeÀ?ÇpŒ• !‰¡^^^îïï+ ›Ís``€~SAUØëõX^‘£\.‹E€0 ¢˜KÃ4'áÉÂOº~ …0ûtb¥8Õìv;?GO½^' •JNg4Íd22™ [$Å8«MC¡Ùl^]]åÈF¡‚{ò‰œÎÈȬ+ô+jOäÒ˜ØhïˆéaEa—Ëåý\’V«%è@²à¢×ëÅâ)—Ë}>Œå‰‰ äˆn·;::ŠöÂde{{Çð.v6‘ò'WIàÅ‹ô`M±úÀÏ€`Nf]©TBÙÄ•é›N]§ÓI&“„ZÙPtŽŽZðx<€%xwxëÙÉÅ7D‘ WWW ȱÃ[­V RFÓjµh‚‰ìŒŒà—ç5yI}0::Ê®.æö͹>Ñî ”Ñƒ²˜Áçó !ÐpºÝ.'øƒܹsÇår±,S‘Ïç¿ÛíöW¯^]^^ÚíöÝÝÝ—/_ÊårìÅñxœ~‚û“'Oh;¤Réwß}‡Ó·ÑhlooÓÆI©T*ûûûÉdR!—ËŸ>}ªP(˜Ž’¤E(ÿî»ïZ­‹¹“8ˆt:Ýíí-ÏŒÍf«Õj…BÁëõ2*¦f’J¥é€>àqÚÿú(d™R©DÑl61cà*á;99B°Ê‹Ï‘""”ûûûwîÜ~ñâ+ôZ­öâÅ >Zëëë{{{_}õÕÉÉ kss¹Ü¿ÿû¿/..þýï×h4³³³àR‘ÿž={ƤˆåñF£‘«ebbJÑàà N§‹Åblf†‰ˆÄ¦N7Øaƒå¢™L†Ð ± T*3€Æç"-*±,MN“v»=55Å©ÇÆF Ä 8CýB@­c J4“4Üý¤ÃYo?00v5`Øh6›ñxœêþ+:ïV h)»»»@`ppðÇÄ:I:j9ƒÇx<žÍfgffö÷÷¹)á@moos£W*•V«µ··—ËåpI¥RBFÜdù|~oo Ê 9 0)}ÆÛ!ø4êõz•JÇ- ßA©T¢-0çp8pIlr߃Sn·Û‘H˜øüüü¯ýë?þñV«•)´Ûí>::òz½áps=jƒn†½ˆB&“‰W†ù {µ;ß9µáaÎ!dçp8pßój`˜ašŠx·ussóÎ;P‘!©áO¥RL///9ÑëI0¾†ÑèõzX‘ÊëƒZªÓéäWc¾rrr2::ê÷ûß½{‡'*‹1«V«hzlÍEùa“ nž°Q/^¼à/€MÇÆŠXg±XX–pÿþ}V«Õꥥ¥¾Ÿ™óøø82.d2¨Bˆ©©)\ŒûûûN§tU§ÓÙÞÞD"WWW¤¨ E»Ýæ7ŠF£+++õz½Õj­¯¯ñÅ îðã­r»Ý*•ª`B\\\¸Ýn¨JãããÈ­ê ý?¾>ŠÊŸv1àMµZmqq[·ÛíÆ·Î\'>“““S‡‡‡ÇÇÇ].û0- & ž6ê…B±¸¸H]f2™–––R©ÔÄĉíñññD"Áòëééi:åh4Ê‚Dz@†½,ZûGú³×ëe1‰mL0 u:N¦ ` ”RVc}ƒ ™où…z„ó”!>©+êúV«ÅXTÃää$‡¾ÅblÃÿ¤ÓéÆÂëp¡V«Ãá0Þ‹Å¢¢……ÊüÙÙYFsrrî޽˥566)‰×O‘ÛíöxPív{ccƒ®d.ŽƒÁ€íøêê* µÛm ¦ýµÚ}ŠZöòò2.¦t:ÝjµXµÈu+•Ja‹Æb1(IWWW‰Äï÷G"`¥wîÜÁß‚ŽŠ+Ÿ1O]³Ùä¹%”·°°‹Å\™ %ÚÚÚD"˜¦®¯¯µZ-)Ô‰Db·Ûm6Ù.>wkkkò<}ÿõQîv»]­VãÚfÂ^N&“½|ùäPGA2™ÄèÂ)¹iggˆÒþþ>ÆVîò$iµZ\ä«««2™,”Ëå««+f}ƒƒƒ¬+£‘—Éd¹\nddFa»U¡W£‡ !ôz=qMRlæÃKÀytvvÆ}ƒ—?à´ãÉè›Àôz}?Ê5@¸‰OÚÈÈ‹Jz½»D"aÍ&Eâîî.8f*&B8ý±µ½~ýš[ ËG"‘(•ÊT*u~~Žj¡4VE™LƼï9Ýc+0aü„××׈ívÛãñƹÁz "”xx866ÆmJt¼`/Z+Nz€<œˆ0a94Ñ£Íf3¾V9C­¡îq8Ýn—]%¼ªLày›à§öz=ñ¾s¢/´ÛíýÏ“›>-ê6mè®@ÎØº°˜¢ðç¸ßØØàÆ…¼‚1•JüYYYÔýòåKZ’~øA§Ó]__?{öŒãÑÑÑööv·Û]^^fu lWkkkìoH$^¯—.Ÿ_+mK¥ÒÐÐ?9ž«v»ËåˆY}¨³ô¿> Y©«Ýnïìì\__s1¦Óiº?@cgä(yõêÕØØúL2™|òä‰F£) ³³³}Ô­^¯_^^. $Ùd600°»»ët:i Õj5t™Lö‡?üÁf³ùý~lO­V }íôô@,ãÈ`Ý+Ð8Ƽ}’-;$¯®®Òé4ÄGÂJïÞ½c4M $O̽{÷pžÁ‚ßÛÛ£É@£GaÀZ[.—GGGÙVÁP—†‘Ú-•JÑŠÖëõZ­†ÌÅ9¥Ñhpv³9 Œ¢ËåÒh4¸ì£`¿+Gúd4Bö©T ‡¥N§á ‘ãèèˆ-ÛõzË•=7™Lþîw¿óz½,π̕P*•PWŽa?œœT’ÉdȬ=aÍ&Æ!2= ë°2”£¨go*0Øl6{uuU(ŒF#ØX•JEµÈâPÚ¸z½Îj9ÌQètúÁ`#Él6ÿío«Õj<à¶F£“Éd6¸Váá"ÅšB!Ì¿»°°ðàÁhnDOæçç×ÖÖ08! ñ.8ÚÝÝErÄüƒyÉ‘}“çq…pe)#d #d½z½ÎJn(r\uÈ)õzHƒhæ7äz²Ù,¤k,4<œàáÀ MOOã¸-—Ëà7ì///‰Ë˨BÙã˜úúë¯3™ ýz:}äƒ0Ñ`0HÆ{ll öN±X ‡ÃŒîÝ»·±±™{£—æ=מÛ4Ó‚O>ù„Šž¢›É¶N§Ëår(xõøìîîòlàæ à†õ3•J×ê“kµÚ‡ŸoaasB4…+@-‰DîÝ»Á<LOO³¦’¹œÛíž››cˆ¬Á¸ì“wvÓøý~êbŸÏÇ €5Cä€&&&âÍÏÏc_Q*•‡ïŒ¼UƒFrnnŽ!â µ¤æýÒ^LÐLup²õfbb¢¿Å‚•|¤ñ«à©',j·ÛaFú|>5UtB˜—N'cÜÊ•JÅd2±gG"‘ÐÈcSéÇwa1Â9áôù|÷îÝë{H˜õa|äfÉíâââÜÜcOǃ÷ã'?ù ‰!¾3à6’г³³€\„d^1dŽÚív¡xR‰ãÌ9==™™¡îfÁFspp Ñhà‚a"½³ÜÍB¡puu…ò¶¶¶éìââÂápØl¶D"A  ñ–2*ÄÐÐP6›åÊÿ‡ØŒ×j5¥RÉ¢gÈ·°K™Éd²`0Èœ¦Ùlb "qÆÀÌÎ}Ç388¸¿¿ŒÓ¿ !P/\“òãÕc)Ò`NÔîu8 y©Ä…V«•ןt?ŸÝnçaf8ÍÑhê #!Äèèh&“ì÷û€L&:V.—Íf3 ^65æóyÀ[;;;ù|>•J1D±Ûí,æeÑ|?àMsÀk*•ZZZ‚âr¹NOO…‘HD­VqÂà5°Èúx4@WÉd’õL¨[@È·Z-€þ^¯— tëV«ÅðF­VOOO3ðmôÁ¿>ŠÃÛV.—ÃX†– žeggÇáp@w¹¹¹áÆ>{®J:¾ÕÕÕjµj4[­^ìùùyêîT*ÒpÛ-ƒŽŽ˜Y™ÍæJ¥B’‰nˆ°¸w¹ºÝîüüüøø8Ix^|l¡9)@ ÐÄ MMM1*p»Ýˆ¶jµÿ2߇# ´xŽ! ìõõ5ôr^ä9)™¡*âLŽJ1…—yeeEAõ×ív×ÖÖ2™ õž_(7 ¾.//···Ù;sss¦‡™&z»ÝžÍfÏÏÏI–•ËeÊg‰D2??Ï€Žz™…;¬ßlµZƒƒƒ,¬à½@/,Ìù‚ÂÀyÊìG)f’b¸Ô¯®®ôz=$ŸZ­Æîッ8üÊôÎHL'''„BÙǸ½Å:Æ– ‡‚Õ¾›‰d}}í­F¡Pìïï3 ã¨‚a‚>FHÇçóíïïrûÒJÞÞÞæóyô(Š¼Ô¹\Þä8’´G‰Ä`00( |dèuÀl4›Md. v!”lÚ–À Œc½ÅªË5†Ë“&«+»!år¹J¥"G†‹ÍG§ÓQœ1Õw¹\¤:†‡‡y°Ù P.—=ÕjÝÞÞžššÂþ øÅáp¯Œßl6§R)L)ôåö÷÷ñó¼xñâîóçÏÑ3™ fß?ÿùÏl¸¦¥®Õj+++T{[[[D¢677±°zíîððB¡T*Ùív“ÉtyyɵqssÃRY¸xL›`‘c-Ú;Lÿáë£8Ü'''”ñ!ï« £Íf“åAl“ è£G Àê‹ÅøóÝÝ]ȽOž<øæÍð5———xcÓét/\( ”Âì-—ËÛÛÛ7‰‡Q2™Ìår\ •Jemm}C¼kkk777°& Gó³q–A"»¹¹ÁYH™ƒ¥šƒó»×ë%í ‰S!¸ P<‰;SO¡sð!à žW*•â/ 955e.Âââ"'¸F£A¸ìv»ô:PMˆ;1‹;::¢Q¥YéG¨—¹qIžŸŸG"‘|>ÿÍ7ß!Ⱦ²…*z³ÙŒÅbl«999áp¯×ë@µ°‚p$a=B \]]K¥RÃÃàw{´ùäSþ£Øž¥Ói´Æ¬E '—j‡« ~(šžžFÄ‹D"ăXCñÉ'Ÿàs˜˜ ;âÌ£‡‰JõiG™L633Cj~~=azzÚb±p»úé§1R©Ôn·˜BG6›Í´,}¢LÝz½>66Öl6‰#¬‘¿;::âa4ÚÃeâŸcÛR$Ãv»ÍȧR©ŒŒŒÜ¿Ÿ Œ ‚Á`$Á/„`‡b6›eÓúú:¾€ÃÃCRdúûÄ4Чà‘aÎÏÏÓ"w:T¸x<Ž/U-ôööV¯×³¿—iÓéäV ºår¹Ö××ÉÐÒ-á ÅÌ+Ælî‹qC½V«Õ ~à£8Ü @L¿¹¹áöBÁ ›L&al•Ëe†',“[^^æ=H¥R~¿cc£P(@¼âìp8vww‰_7ýý}›Í¶±±a41b?¦øbRŠ˜Üãñ@ #î„„?O«Õ&“I¶A„; ®ÕT¸Ø³øMûÐì8»iYú^x™Lvtt; à±#M˜ˆ ˆc± <;;BËlµZغù]˜ïíììÀÙØÛÛƒ]Þét677É¿$“IÌDHÆÆÆ’É$H½^_^^N§ÓP°···‘€æÃçÉçóÔ’.—kbb"‹Õj5Þ‹‹ N=ØÎDH¤Ói®mD,žWWWØËH1AnÓ!8ßU*ð}ì:ÌcIRE âEg`rC. ÛI<Ç1ÒŸÖ¶Ûí³³3¶'“IÔv!åóùLDZ­ÃR±Xdi« Óø^¯‡ñæüü|{{[*•žµÛíõõu ê““ yÉd’h(ì#ü0Éd²T*q¹žžž²…½’È\T£Ü„¡0A2H$L˜UtB9Aˆ§† [(alx×Üt9AŒÊ0›Ñðápƒçƒ0EŠfpfµZüçõzé‰q¬cs0™L[[[CCCDϘÁJ$’—ËU­Vãñx8–H$oÞ¼Á5 “ɲÙ,Óòíííz½¾¿¿ÏâšR©´³³ÃøòåËËËË|>‡™ñ kyXW‚8Œ"ÏŽˆ ù|>NW*¥ÇÇÇ*•ªV«H.r||ü!ÏÓ÷_…[Æn·Û¥Âì¥R©ü~ÿùù9*Çèèh*•âÞæ € E¢`§']¼ÑhÄìQ«ÕðçåóùW¯^áz&yyyF¨ò˜òAe N 8¹\Îï÷ïîîRžãÏ¥öd54ÇËËK«ÕúäÉÌaïÞ½CÓïõzJz½>ŸÏsm ËÃô@U*•|ê°lK¥Ò««+8¨ù|Ó:w¤U,=BV— !¸c4ÛíN¥R2™l||Â8z@ê0R°h4£ÑÈ:YVˆÈd2:wt !Äõõu«ÕB;º¾¾Îf³ ... ÚRã:;;ÛÞÞ††¶ººŠ÷üü|zzZqvv†;-“É ` !ØÿG‚<ó‰F£|t5 “m@P¢šÍ&âõèè(­ CQ@Ç WX\®ÕjÁ[RÀÞÞÞ2¢„BÊQBÓívƒ»¼¼Ä’”i·Û=88 ¥ÀäNOñõ×_K¥ÒD"q÷î]¬“áp§ "ØKbMhâP¯m6£¼IÔ­¼Ú\ H±ÊlnnR pßÞÞ²)Ì0Ö[4}N<²<¨<êxú­ jI.—[[[ìÅ7Üßß—ËåÑhôèè¨T*àè…_u:££#>2À^„NçÕ«W~¿`` ‹±fdyæ¹¹¹f³éñx81IƒÛl6>˜wïÞ%Ã¥T*•JåÞÞ^$¹{÷nµZ ƒØê¸¼Ãá03…BQ©Tc±X³Ùôz½+++ 8¸{¨áˆ¹ÐÖðúu~ýú5£)tKøTdw%‰† V™D“Iå~çÎ>9l«Â¤Á:` a¦m‰äñãÇì™Ìçó“““l–àR«ÕF£q~~> ƒ‹ ‡Ã4q:. Ò/ 5›Íééi¤[³ÙL¦V«C¡Jf8² ÈÜf³9öz=L LÆôz=l”kv áBa#;×;K®)ôh°:àø. jµšd9ÿíímCà|@l˜L⦾Àù‹Ñ´'qpÔOƒÁ€kºâ,Lp°MµZÍëõžA³ÂÍX˜ò–„79@ P*•‹1S©T§Ó¹{÷®V«ýì³ÏXgFçææd2Y8¦œg17® .ªN§ãóùˆ‰Ëd²ÉÉI®*hS໛ͦL&›››i6›Ù¬5%—ËŽŽ’žEÉEJfÍ4.ÒN§CF—ø ?؆³³3æ´¬1ÚÚÚ‚]Ül63™ ‘±µµ5¹Ô†Ùl–%·”#Ø9NNN2™ŒV«h#•Jaé´Ûm‰D2>>Ž}0³Ý brr’Q3d2ý\«ýÔ»B§ÓákÂ7–>,ÙGGGaY³ó…G£Ñ0Éäù¡í€…³ÁŸ÷òÌÌ ç/ovœ¸}¬V+ù [ÃÃÃŒpð&1 ¤µaÂÀäñù|ÄúiL¯®®"q6³þåÉ“'F£qjjêàà Ù P†Z[©T ös¦cZI΀ÌLcF”n§5óóóøžÁÄb1¹\Ž%c붯®®XÌÓ ü“å½tøHB|$‡;BU»Ý&ÞyuuEèc 9UÚXìA«ÕªÍf#µ„$‡ ºÓéÁ]@¥3—=|l˜,I¥Rô÷‘‘RÎÝn—É ª—F£aT¨ÕjQ0áRÎX­V!D¯×s:T‘~¿ƒ-QijIFƒr§R©2™ÌõõµÝn·X,0â;[IYýœº²T*a•ƒDÀœF£¤ˆ‘Æb±€·$€ ›nWÚÃ.üé4=0 À¥^\\¤FcÜ·Àw:VÑ‚èbÈÌ+O]ÉvãÁÁAÊ[,t3œJ¸ânoo ŽáýP*•§§§ÔA´½Ì2ã"qFQÌv$'¨åN§“2ŸAY§Óa|zyy‰íIC¯×ƒ±Ãn)\1¤Ø9tÜn7Ú=èÿl6‹&  ‰=µÛí€.З‘_!>âMÔëõ¸/HÛíîî¢qår¹ÃÃCž%ö¡W«U õz}ss“Ž96ã}føÔÂ<ÛØ„ÈÑ\\\´ÛmÞbžvj†«ˆ`Õj^&>%Æ'$ 8yU*•J¥bRÚ·¯ŒŒŒìgrÃ_Æ)ÀPšpm%ÏÛØØáàq0pÈšèt:>’Éd23Çôz½pl6òÍÍ +„ĪW].è=‹Å‚‰û|t6›ÝÙÙh‹Å˜?ñ³Ñìôô”´A§ëÓ§Oá<þS *Ÿ”\.G Ÿ H$ì/Ãk‡3¸Z­¢©ðøçèÿùõQÈ2V«&—B¡ÀgÓŽ‹—8¥Ùl¾wïPÀz½îp8¾üòËååef„n’Éäääd øûßÿŽŸéêêŠ'Ùâ=æÜl6‹¼0:::77Gœ F<9#ÐÜlwœŸŸG¤'H&“z½ž²®Ûí†B¡ÿú¯ÿb…c:v¹\¿ÛÛÛÌgȻ󻓺Ä3<<<44d·Û?ùä“|>o4a`¢×ëõ° °Kr”—J%Öl¦R©ééé{÷î½}û¶ÙlâºÁ~Cfrr~äÈÈÈööv¯×›E!™ššºÿþøø8óo¿ýÖårµZ].—YWôý÷ß»\®R@1íšàÊ IDATĈÛÈl63T(½^ossÍ ’Ãáxùòe2™œ››ã‡d²‹Ñï÷³›щ_º1ËR©455…y\¡PLMMñK !¹Úl¶ÙÙÙo¿ý–šW&“aYÁQ3<<‰D»Á'`p6Äf³9ȈÕjõç?ÿy6›õûý:.úý~ˆ˜`¿ÂáðÝ»wWWW§§§ëõºN§ûÅ/~ÑjµèAËŠF£_|ñÅßÿþ÷L&ó“ŸüÄ`0¤Óé¹¹¹×¯_Ý»wÏl6û|>T…ÉÉÉgÏžñû2 –ËålòjµZ¬Š5¡Pˆ”2pGJlòÜšLƒ0_k4òÉt3Bàéççç^¯h.—cÖÝh4`1îîçóyìÄ£zÁnL$gggÄ‹ žQ„B!æÏ¬´D_ ´±±a2™~úÓŸþéO⚇ݨT*ÇÇÇ5 ÏÌààà¯ýk6íýö·¿}õêU$ýþûïA öùÕ¯~•ËåÖ×׿úê«×¯_ÿõ¯ýâ‹/Ìfó‹/¤RéO~òdz±±ñàÁ!&T²„ƒG;gÆÇÇý~¿ÓédݼU›ÍÆ–±ÉÉIjGþ‡ìüÙÜܼ¸¸°Z­(6z½¾OÏÿ°Çiÿë£8܇‡‡™\ d³Ù©©)ž'ŸÏ‡K©dpp0‰LOOÓa9N·‡nmm5›ÍÇ3ÀAVÆ@ö›ßüæ?ÿó?)ùÍf³Ãá€Z÷‡?ü;u=G š)V¿þŽ™™•JÅš«Õº³³c0@ÎƵµ5ÜÄt ²jµÚÌÌ #‘ÈË—/™Â£¢ðqEÕÝÜÜĨ€V@ã¹½½M5zvvFEpyyI §£L&ÿ„6Ý羞Ñ-öw0[­ÖL&#‘Hd2…?Œ§­­-"B¤½‰°Ã2{øð! F³ÙÜjµØß† 5×××6› 'ÆÉÉÉùù¹Õj}ôè#„ÉÉINw||l³Ù&&&È£ÎÌÌ ˜?zôhbbâÛo¿íci™˜ÁŠ1 @€˜.`„$FGGÑOggg±èÀ¥Á/‹ãPÁÌÞŽÂï÷Ó’ !P™ñŠŒŒŒ°þææF.—çr9·ÛÍ…ñîÝ;“ÉôòåKÀ8ˆ¿F÷÷÷_½z‡‡`-nZb蜛››xT¢Ñ(B¹Ñhœ››BÜ»w¬2³™htƒ!‰°–Þãñ £¡Îõ÷R©Õj²iWWW˜\ñ³ÃKÀîóù¸¨@žazE=ÁyJæƒ× ÚE§Ó±Z­ T*•N§ã~¢/R}tt433Ä–`GöÂÂÂÀÀÀèèèÔÔß„¶ ÑhÌÌÌ<{ö ½žÖ §2IFˆªoß¾ít:ËËË4—ìò¥™þãÿH¿ººÚn·!BóW(Ìcæççggg½àe {Á­XðÄÆÆ†xcÒëõz™ö“h¡­„F(eºÝ®ÃᛃŸ‚fâcøú(dhˆX„¬†@DÛØØ`îvvFÛ…¤ðúõktól6;77···÷âÅ V÷ær9!D.—{ûöíóçÏy«^¾|)‘HVVVž={¦×ë³Ùìññq½^‡ 3`mm ¦î»wï‰o<±ø^¯·±±Á óôôôàà`jjjwwwuuÜ.p•¾8"ƒÓf³Éæ„ÃÃã£#ªéx<žÏçÑ1Q–Ù`@Ï häûYäˆO¼ÕjýckLÒãÞÞ+;ˆÆ(•Êb±¸µµ…âÄ”â‡~¸½½%¤Ã•pqqˆ™Ëå2ªÕê?üs8onn‚[X^^~þü9µ[¥Rùúë¯Æ‹/²Ùl§ÓI¥RˆE/_¾ŒÅbv»n¡PˆÅbëi‰€ ݬ­­¯Ùßß;ŒÕ•ÉÁÁÁÁÕÕ§0^ïëëëååe©TŠ)(•J äóyÈàBPº''' ùMɾÃ7®V«h8/ñ†K$T ˜øxx/@“ V*•+++¼;ÇÇÇT¿ÿýïS©”Õj­V«¯^½²Ûí¹\îÝ»wR©ôoû[¹\öûý¿ÿý–J¥kkkNg}}½R©Ðõ_\\|üø1>nôÃ¥¥%XÓÝn÷ŸÿùŸ5ÍÒÒ?„/½^ •UàH¨%¼)xþ®bU"»ßn·U¼U<ÿàj¹Vq7©T*Òm­V«×ë-,,!ppc§á£¢EÔ³T*1‡$@Çxcpp°WQÆÂöj·Û„{õ㥹¼¼|þü9NDz)!òãÑÑ=.9Ü„0*•Ê7ß|³¼¼Œ¼™H$NOO[­ï¾ßïÿüóÏïß¿¿³³ÓGÏÍÍ…B!oXܬé @„ KÛÓé4½/¥A-ü0„¸º(:Ûí6ý:”ÿädIåît:§¦¦Úíöîî.n$öÏ’&ØÙÙ#²4===33ÃŒÛl6ƒAšSÎh»ÝþðáÃT*e2™>|u$⫞žÖét•J%‰ƒA:Y® tOI‹‹‹d"?~üå—_ ý×ýW8JŸ}öÙ矎Ró×Ѥ@  …0žc1†¯r{{ûøñc~¬ÐüÖ4|Z0\ãÞ#QE‡È8ŽG[0ÆÀÐ ž—ÕjM§ÓCCCX˜‘ny‚1ÑC°‘J¥|tß¾}ËoÊ {ssóâÅ‹‘‘‘Gõ³0™Lfzz3œZ­ ruu…³;§ÉÇÇéééäääçŸNFbåððʼndfffrr’›57 V\ñkz½^òVÑhtvv–é¨ÝnÇ®ÎþbÐЀùß !UÒÈx~ÐÖǨ” ¡ ¯3Á##ƒ˜P*•ÆÇÇñ;f2ÿ7oÞptÆãq1€šE®¯¯ †¥¥¥­­-†BÂ2‡#ŸÏ“bB`£|þüùÀÀÀÄÄÄÊÊ ¯Ãÿ÷“­Ëçó3Ìéé)F B¡Ào2™... &1ïõØ ÃÃäU*{àH“ÁÚµÛíhkr¹|rr)ÿáǹ\N.—³E«Ùl²‡¥EÁ`òo ¤<“É„Nâr¹<ÇóÔ¶………ééé/¿üñ“< é*ŸŽ¡Y õz=^ÌO?ý”òŸ÷ˆcqqñíÛ·‡‡‡|vø`D"Á^_p@ápx}}Ýd2ùý~²Êx…A8ÔjµÝÝ]ð÷•JerrR«ÕþñR©P¹\†`Ï ÓÐГy¸HaR©4€aŠ÷Á¿>ŠÃÝjµz<ú2¼äôÝJ¥’ì8†ªD"a±Xئ½¹¹‰D˜Ïç)]‘Ô‹Åb:¦ŽØßßÇÞNqÄ’Q*•8ˆÙHÐl6…´ZÑh4ŸÏ³Ì!*_F¼(‘H°xÁh4b{ N,•J4¹4Ôâ}Áµpp€ÏºçÂÂÂÎÎÀU(}«‰ÍfB€`‰J¥b—)'ó4ÒÐ]Âá0'¦·þz?4Pìó|ö”J%e$Ræ@SQ6¡µ´ÛíÙÙÙ‘‘‘wïÞá$¹¼¼L§Ó###¸<O$!íÅB­ ``llìèèèààÀ`0°ÄO=Rì¤o˜6k4†WBˆjµJ2“ŒX³Ù¼¸¸¸½½%ú488ˆ“¶Œ×™P;65#ß„ÿDü‡$îlnŽ^¯FƒÁàÞÞ^ `ö “€³ƒí\–KKK¸Å3{暇nßëõæççF#3yvì"é×À'Òðw6´0³Ùl䓱ô•ËeÌøJ¥’»¤o-Å ‚5…ŠòŸòdÏ@¸™L†Ïêþþ>®s¶^°C‹C0‹9ÓÛh4l6ÍápÀòûý[[[D`Çonnˆ2Éd2†{à^s¹Oî4¨~'''ТñéõzLë¸Ç0áu:ÂÔò ?™Ažž:Ž~õÍQŽÁ7ýÍÍÍéé©×ëe2¹µµFAžét:‡Ã±··—N§qšÃ’t»Ý¬¤Á>bŒ¸ÓÍÍ káH“ !@±XL$@ÕËåò½{÷?~œL&‹Å"¼F¨dF£‘^Õn·'“É««+®X,öàÁÂhN‡nwrrR¥R}ÿý÷¤‡ú™Õ……“ŠÅb0<<<,—Ë¡PH&“Á« ƒ}Ê<~›ËËËb±©œ,.ü¬l6‹ÅØÎЂ; Ûí¶Z-v>( ǃUŽ¡÷½{÷x=i;ÎÞÞžÍfóù|­VkjjêôôôÑ£G777±X,‰Œ¿~ýzgggnnŽž©Ýn/..ÆãñíííGÝÞÞÆb1·Û%oþÖÖZÁîîîèèèÀÀ=ÀçÛÛÛ@ €3º!U<º%CµZ}rr‚é‹!ŠÍf»¸¸ÀÔÁÝær¹ Ï[­VvƒÜ¹sB5ÏžL&c›sppõ5hØöû<5Rz½¾Ïs§œ§YÄFòðáÃõõõüqnnUºÝn×ëu¥RÉ„Œb…gŒ4´#Ô FãÍ›7SSS  ÆÇÇ¥Ré«W¯¤Réää$}Ïééi¹\ŽF£@`}}}}}ÝçóaÑÉçóŸþùÚÚÚßþö·¯¾ú ‡Ãá@¦ƒQʸª3!äSÜGƒÁãñ°C‘°Z­*•J¿ÌÉG+ÙÞÞþ€Çiÿë£p˰c¥^¯å%+ ,'b³bppÐår±áÓ`0Ðø3RµÁ³ÈG÷$) Z'"'X÷H‡þ?ì½ÙS¢yžö}³£(Š ˆ‚ ˆû’ijî™UÕ{×tLtODwÌQÇÌ_1ÿÀÄÌéDL/ñôRÝÝ5µtee妙š¦+*»€²«(‹€¢ÏÁçmžyç}ÞÓ©<Ž*²*-„ûþÝßåº>R\f©À17’‹D¢ñÎÎ2×å7þüç?www³ä´¥¢t:Á` ¢½óósþ£„ÛR,“càñxl6› èå)ÄûûûáQZ"ÎÅÉCœ\l›ššø0 åTäÝÝ]l§§§£££ÌЉ§¡‘ÄDsëÖ­R©äñxÐh²e"Á/m8iJ¨*½^/:3ž1ĤH¥Ò@ ä–”õµD"Mìõz%‰ÉdBcŽv[.—ã>quŒƒi>øx<Ÿ’6H„B¡àñx0È¡ÉeÀBB,Sà怛¡P(á"„:‹ çóù`0877§ÓéØñ²ÆH§Óétë#eÇÙÙY4‹ÅômR©´««‹ðéé鯯ÆÜÜœ×ëåQÇi:{zz€@|ó›ßã˜ë‹Y>ŸÏçóhÛ¡µð &ÃyDu¡P ›¡`¯£TNNNXHàMEꇈð²H$R(\.Ÿíéé© èkwwwU*U?“eþ¿Èâñx*•Òh4øŸ`‘¢7M¥R;;;(»p¥ H§Ó^¯wvv]â›7o†††À®ùý~ƒÁ`±X~÷»ß½ÿþû<\af0YZZº¼¼DxÊ`D*•R­¹\‹Å2™ ã{\dt -..ÚÅ·¼ººªT*éöìv{&“988p:Ÿ}öJ"\ˆ4A¹¦p:.×ØÖ ‚ÕëõKKKÿÝèÿÏëX¨¢¯r¹\}}}X {zzð%ŽŽŽè!3F|ÇÓÜÜ<99‰ñrii‰@%—ËÅT‘‚W­VÃJ4™L„® þ zü±XŒrÌ?ödV«•õ än´®Ø(ж;º„ËËK¼šxDår9v±X ú© Nžü°éÍfs{{{WW3;œuȼd2™Åb™ŸŸŸœœt¹\v»]­VÂä'0kfEÁXÍo‡âññq¨ß¸%M&—/Sþñññk×®iµZ¤¨ýýýN§“ù8F[[¤ôOž<ñù|p¦ZZZvvvvww'''aõÑ 8àˆÈó- `ôûDŸÃ-Á£ˆ¤¬±±1“É WLR‡Rét:‹ÅBõm2™É‚Œ§¹mkk6‹Ö"³50^L0ZZZA‹Å­­­n·›©—‰š˜Î+•Êððð{ï½7::Úßßo0t:\{ääv»')¬†è––òpùó©‰Y!ÎÎÎvttðý*•Jø‘‚  ›„ö è¦P(`‚§nP©T$Þ¡Ò£¾fL-Œ'kppÐb±°¨ƒXÐjµœáØ"9X•¶¶6™L†™ˆC?ÖhAè-'‰Z­666Õà lËB¡@7†š4©T ÏÒb±LLLO4å £­™œœÔét4%‹…lHÂÛP+±™ ‡ÃĵRO£ÖjµLÌNOO!Pîíí½}ûVTóLE,‹ÃáˆÅb °ß¼y“æ@.—ódÝÞÞFgɬ¼µµuooÏl6'“É••fñÉd’Wel¼?Æ$ÛŽ“Étvv«²µµµZ­òÎ3óŒ©T*&“ 5>Ìô̬2™ ldòr¹|ww×ét¶··×ã™}ét:ªÖ3¹\_¨ßïommœœÄ¸÷³ŸýÌd2½|ù²¹¹ydd¤V«µ´´ŒŒŒ€ž&ïôôT«Õvuu½|ù2™L:úEf·¶¶Ôj5â×H$BTÜ`>쯱XÌívãð*‹333Г ˜°BËŸY«ÕÆãñÎÎÎT*Eh TA>DDô‚gggàE"Š Ê#t>˜62™ ’ù¯ýõNî<`©whÙ•1Y]]‡{zzp—`õÖëõ¿ýío···Ù{ \ ƒ@@¥R=~ü˜Q>Š·•••½½=lÇìQIÅ,‹ÂAcgù6çBCCØ[F³°°À2êÍ›7©TJ&“¥ÓéÃÃCÜC¹\ŽÇ8í0¥z(B¾éñx ‘är¹½½½žžB‚€J¢µVS,{zzˆ1Ã;“H$ÀâûÇ9Å“B.—R˜ËåOŸÆbÝ.[kV[§§§¡PˆÍ îZ­öòåK  P)´=mmmþÝÛÛK&“üÖ@£¢Ñè_|U"›ÍÆãñ•••7oÞäóy‡ÃÇ_¼x.¤>+JÛÙl¶X,¢µGji R© ÄN¥R€Å¥R)\~Äáp8Ì?†0‘K$¯×K] Á‚n t3I^ÉdrlllmmíìììÆF£ñ׿þ5[ÓbI¬Vëââ¢T*eKŒKÁþää$O²zÒß& Rœ@€)ÀdŸÏ·µµE¡À…’šÍf¡×j5¿ßOACt†ðWû;UJs¥R‰êQ"‘ƒAôµ™L¶`;z½þñãÇb±NÙáá!߬J¥ ‡Ã°ùö÷÷M-Âx¡*Àj†fp@h!4ÚÝÝ!côù|¯^½ªV«áp˜?䋸Þ÷¾‡HI¯×S9Ac‡æ833ù•åÜ kñxœ ƃƒZŠõõõd2‰'•Juvv&‰™™¿ßO¬ ©aÑh4 adòù|ì´ý~ÿþþ¾T*M&“d< áÃtÊ–…ޚ‹/(›Íò9À§ËçóÛÛÛ_ï‰Êë8ÜÇÇÇ™ ©TÊQŽÁn·‡Ãᦦ¦ééél6ëp8æææê'”‘8kˆ &M"‘ Ñ.•JôÚfbb‚Á.­1ã—ÑÑQ³ÙL¦Zkkký< ‡Ã`á\.?jdd„ûÊívÓæ£­\^^F»pÑívcõ4 Eh'«™LFÇJÐGss3U0Ѹ(™AC ¶Z­‰$‹MMM!Â=::‚©]‡Ñ£¬P(õh­V³ÛíÜ~І‹Åb¡P¸wïä¹¹¹x<~ppàr¹Pß[­ÖééiP\ÝÝÝ/_¾4 \úf³yzzšÆÄăøááaÄ! =t®ŒËÀ®Ñˆ ÖG CiLËψ£‡etlS ’µµµ!Äá9>>Žú‚ßqjjÊëõÆb±û÷ï QŸ^¿~°ºŽŽ„4Pàj4šd2yóæMA@JÆÕÕU•JEÅ Ó< ¦Óiˆétš‰¢ÇãéëëaÝÐÐ`·Ûél6†Ùl&“.9|---J¥’ 1¨ÔÑéŽ ‚€ö•ŽÅbQ(hœÎÏÏѤ ‚ V«“É$$ —Ë…‚îôc"‘y].—u:´Ÿh4*‘Hº»»!°›-•JSSS¸ÑÛÂÂÜãñ\»v n.—ëïïoll„DB#Èõƒñƒ>àFËd2dmF›Í&‰ÚÛÛN'Þl‡ÃÁY §ÅóÔÔÔ§Ÿ~j2™îÞ½ 6’¥Çß»wÝù E:::666Ap:ðöööRX¯ÇwÆ} å ›EÿÈÈÈÇüu¥ÿùõNî·nÝÚßßçÓ9==¥qCÒàv»ë÷*J€ÞÞÞ¾¾¾t:ÝÙÙ9::*•Jõz½Åb1›ÍÌ‹iñ´Z-;FD#H¹»ºº¨Pzzz0Èèõú‡2ñ`ˤÓ馦¦Ø ¶¶¶2R«ÕP*Åbñèè(¦ rwvv½³Ÿ´X,4ÔV«•4ŸÎÎÎR©¼BÀ‡ƒéJ,£Žðx<ˆahá£Ñ(ÊDÓ”·©TŠF!2ü¡ß$¢(›Í_\[[fDËšž…&ßJ&“‰F£ÃÃÃJ¥’¤JTØ …‚iøåååÜÜ»Y‡ÃA¥¬×ëÑA›L&€«4ƒ@m===íïïgghµZ;::2™ŒÃá°Ùl¹\®¹¹¹¯¯åßøÆ£GA@òtÁétr@ÀN)—ËÿÑ,b#:;;Ãí ü—]Ä IDAT…šššœN'¦!$:<Ûèœ8©¡Ë ‚À¡@t8 Îl6ûìÙ3äOÁ`wèþþ~$a¯˜Éd677ONN^½zÅÍëõ®­­«!q­Z­7n®ÛÚÚŠ7Û*N‹b±8==íõz™ã•J¥P(400`0ØøÑX¤R©ÁÁA4N§“±O}R‡Dõ¹P˜Øò±ï¡Ï#u³¾ññq©TZ­VÙr744¸Ýn˜NüLV½½½Dª2A6à º>ùaÃ<´·····÷êê*—Ëõõõ±^".cvvvddäääÄjµR‚~çßþíß …ÂÆÆ†Çã‰ÅbËËË”#/^¼à«T*^¯7R›#aÜÜÜ\[[c¯T#‹1²…ÖÉÐAzAÐSÁ.•J¬d4 ¸=¤º¨àØ m 3fRGŠ/Ò¬®®.¬[½½½]]];Õjõ/ùË×xœÖ_ï„Z†3ªB¡€1‹öœ{©îJO$ÃÃÃÙlöíÛ·0û£Ñèòòòüü<Ý“ÍfÃ¥;õRww÷îîî§Ÿ~zãÆx<¾¸¸ˆú  ©Têõë×±X ñµüâââåååþþþ_|ñàÁƒÓÓS¯×k±Xž={–J¥Ø%Ò¤ÓS_\\ÐÐÓÊhªWkkk0´Ùl …+<”mn˜¾¾¾×¯_35FP,Y£ŸŸSs'ïîî‹Å[·náægb‰ €b•Jµ½½MN {³½½=¤?†ØNìŸÏçÓh4`vvv¹^\\d³Y¬›œ§Ñhý½{÷²ÙìÖÖV0DÇýìÙ³zœH8æ òz½Åb1›Í"†yóæÍÒÒÒàà ×ë…ØÐа¾¾^(æççs¹\4å›BˆÂŒÑÿþþ~kkëààà—_~Éþç3ÐR©´°°pëÖ-DÖÇÇÇ(@.Ÿžž‚{;>>îììT(<Æð€ÒÄ}ƒ>§»»{ss“-”Ú½½=•JEÌÛ‹/ü~ÿììlkkë›7o‚Áà;w Ž\]]ùý~°ÍÍÍ@`hhè·¿ýíõë×A€k/“É|>ß“'O`¹ðÀ…BLœP¡@eÊqyy¹³³ƒf±Z­f³Ù`0Hg‹Å÷år¹@ @¾c]Âˬ\¡PpÞ¡Iç“a¤ Ífó³gϸeB¡î¹ÅÅEÊðP(„ÒI$y½^FzšËÔåàà€÷ðäÉ“›7o’¥ÃÊ V¯d2‰bgxxxÿÉ“' ¿üòËÑÑQd²===d³(•Jf•}}}hœ¢Ñ(­üùù9ƒÞÞ^‹Å²µµ‰D ‡ÁÁÁ/¾ø¢V«MLLPé'‰P(DMV.—÷ööz{{Ãáðòò2ùÚtN¥Riii‰-ÅË—/ k%8uK&“ÉçóñxœÁ,æ ZpŒ5àqAÐëõˆ;ß…×;q¸#L$îs '·.ó¾GÑô1êšžž^]]ŸŸ·ÙlÙl“ 2˜d2 /Í% ©T OX,jÚÙÙÉ=ÐÙÙ¹¶¶v~~>66V,ÇÇÇÑ×—J¥ÁÁAj4܉zp8øÃx˜6ËS…U*Š‘HtppËåÆÆÆ \Éd²T*…¥.E©TšJ¥hýŽŽŽh‚@uFš…ªÁ``3L‡Á‰ öÄb± !g@Âî«Õj4K¥’L&»}û6Œ‡ËËË––ô Éd²³³“~“œ¯×+‹ûLÔëè{{{K¥øFµZÝÖÖ–Ïç ‹D"R­!ýÒ@€Ø´Ûíì!A@䇲3NOOO Š'/¢ƒF£éèè°Ûí^¯×n·#œ››cg¾°°àv»éKZZZ ÃÌfóÒÒ’^¯¦ÿðáC¦‚ Ð>b¯ýÓŸþôÁH$‚eh(QÏÌÌœœœ ®hlldú‡§´îÝÇ1T,GFF\.\L…BÁ„×ùùyWWÌ2úE›ÍÖÚÚº²²Â‰/‹ p¹\DKwuuÉåòþþ~ô£ü|@:PWQ‚ÐÔÔÔÙÙ §ž£Î|.ôNÐL¹¢:::`¬ÃçR©T«««ÙlööíÛÓÓÓÌQE"ÑÖÖÖýû÷~ùË_öôôŒŒŒpôsuÝ»w/*¤Ýn¿¸¸XXX¨Õj÷ïß7 ^¯—„Ëýýý>gz‚jµú7ó7_|ñ×s¹\îîînjj%<äüüÜívsµFÇÃxqq¤vss“D6 ›z½ž^¤#²Ž±°¢#röë:HÿËëËŒU*•¾¾>ö9`~I À5¾··‡M|=b±X¯×CâF¡R©‚Á ͸ ÓÓÓdk ¢ªN¥R¨é(ÉeÇÕßßO‘%•JÇÇÇ)±µZ­F£±ÙlŒYŸ?^©T&&&4Íëׯ»ººŒFc(B/%ÂDXKädÒÒÖ!'ØÍ¡‚À* öÉÉ ÎöøÙl6 ¡à¤ý ¨èÎÎÎðÈ¡h><< ƒgЈÆ€ÙQÿÆÆÆþþ>þ¹\Ë!‰ŒŽŽ¢Â”Édz½> ]^^~ç;ß‘Éd u_»_6r³³³xd°ªÇãq€Žggg.—k_£Ñ ÃÀ‹0<<ÌÖÛÛ«P(²Ù,ƒZãZ­Æãœq66H8ã…Bç1<ØL&CTÏrAl6ÛÆÆjËããcN×ÓÓC Æ•úX K„Ïmmmjµzkk+ŸÏOLL°äìèèƒ/^¼@ªôúõëx<îv»óù<øâææfŸÏÇW@†ÑÑÑQ*•âQ©TûûûØdR©¢‹ååå©©©ööö`0„n}}Ýn·Ûívì3|V@èZ[[á§OOOcÓétàvëütµZMÌ)(˜<.— 3ÝÀÀ)|=˜¶,Ëàà` Ðjµ,Hm6[±X$… uÄv–ºÙl6‘Hp=Cñ„0 …ï†ÃáŽŽŽžž®Òîînà ë’É$#»d2‰¬«R©0âLÜÛÛ#ºd}}ýÚµkÁ`pccÃáp$“É/¿ü{ðÒÒÒÑÑ˧P(x£Žäã.^^^fO Óé˜jZ,±XüäÉ`Î8¼Ø²®¯¯ó¬Ú þRAi¤<;;‚%eµZÑLc¯¸Í-I‰Fd1I¸ù¾ö×;Q¹kµZ,‚ ¬®®:N>n¨Ù‚ ÀMÍd2&''—––hœ×××—––ÆÇÇÞ¾}KJª8ÒõJ¥Òéééúú:–õõu½^FÛÚÚÖÖÖööö,ËÔÔÔúúºZ­~øðáÿøÇ–––o}ë[ÅbÁuµZ}ýú5ƒ6þn$AM,RŸ\.‰Dèéðî#ÓÖëõ+++]]]µZ[[éaa}0¢>íììD“×ÕÕûe||œÆœž†5g_oo/ôDÐ+¸ãñ8—c(¢>¢I÷ù|jµÚår Ÿžžær9b%¨DjµšÏç«V«Á`Ðét ¤‡£££Åb‘Ùš–ååeù|þåË—“““@SáçƒAˆOŸ>Exzz*‹···Åb1£†ÖÖÖ££#ÆP‹‹‹ä$ Þ‹–à=dì Ÿ …H$jllD8„{™,étúùóçÃÃÙLæêêŠ:— uRGPqi]^^Êåòþð‡~¿ŸëÙÙ™ÙlBÒÖÖ688ˆ5ŒH€\.i‘Øw•JõôéSÇsçηoßF"‘ëׯ×3Xˆ‚ …Býýýï-þå_þåŸþéŸ...øî‰Äîî.©XL6ËårLIŸ†ãTX8ƒ Cwww8>;;›}úôéÑÑQ´À¨½^/~6ö,àµ1ÿ©V«°%èb™f444ÅdãôôôñãÇ### â½(—Ë6› šÕjŬ4;; ˆí{#@ $”!ˆÉdÁ`pbbblllccãää„#x}}ÝívÓf544 ¹êêêjnnnnn†ŠÃt—l,lÛÛÛ´­`Ñ ‹ðKñà „ßÀ€í5ð*ůë ý/¯wåpïëë«ÕjÀU°( " °eñ.•JÝn·J¥Òjµëëë·nÝR«Õ;;;4S<¨ÕjÕj•‘1d"f¾|âÔ}¬d@‚±¸¸È4£££#—ˑҷºº ¦Ãáp¨T*—Ëuuuåóù´Z탞?N´Ê_ÖúŒ÷ãÍËår8,ÆÇÇ«Õ* šM¤Ö@h0Ç)qì+•J0looÇcM×ÌåŽ$ ‹»þþ~±X\©TØ7‹ooo§á£6™ššÂLxûöíǃœD{ÓÖÖ†¦R©\\\ïàóùòù¼Ùlö„pé'C-&Bx[0¾Rð’:Æ´­»»›HÛöööÙÙY©TÊ*ËçŸn00²QÕ±Ýü´‰‰ (Qòð ‚Šoœõ¾Éd ƒ$.ñë“~×ÑÑÁßÍd2b±¸««ëèèH,ãq‹ÇãøqöÄãqú'ЙL†õ yXV«ª“"ŒB{{{܆¿È'à²dDËÅû![•D›ÍÖßßÏ$êââÌ‹ËåjllDÍÂÅëõb6\]]ÝÛÛ£Lá[[]]===µÙlV«õøø˜æ¬?±”7oÞDiµZ»ºº˜¶£3†š‰oC,ï{ßã®GÇÅóüùsN¤G(¤Y¤÷a»V†3¼UtÛˆÖ¸¼ÿ'CõÿõB¹d =€J¥ÚÛÛƒ¥U*•ŽÕj5Ì“Z­ær¹ðs÷õõ‘›S‚ÃC+\Z½^¿»»Ë_¡PPR÷áè+ p±S©蘫«+œG@ 2ÿ¡ÀO°@2™dsÒšîõððP'JAD"s‰h4 ÿ q‹ßï‰D¬›˜™644 ¿999!—#‰‚fº¡¡!•JñȉÇãkkkûûû`›¤Ri4=::êèè@·Ž˜7Œm:™L²æªÿ à\AÐ>“[ñjssóêêêîÝ»GGG+++ì¥R)ën©TzíÚ5ŠÄ©©©\.Çs/(žx*»þþ~¿ß¿¾¾ÞÜÜÌ“[. Á>C$üuDŽC½®éƺÅä ›~,;>>†É?°b…ÐËñÄýœH$ýÀ¹{'«ZN¾ X———^¯7<¬éT*µ¾¾¾»»[.—÷÷÷ÎÏÏggg777þóŸ×k™Lzpcc#¸fÎápC?ê{ Í - óóääžD  %ƒwÛÑÑQùkÒzýq_c…^d2™°ùèõz38N1 ¡¨I$>~vv¶¹¹ÙÒÒÂÇdžúââ" 1븸¸xúô)‹™Löë_ÿúøøxpppyyÙãñ@òb {||ÌÁT­V‡D"­V›Íf‰%ZXX°Z­h9Ø…nmm}ôÑGSSS™LfhhèÑ£G>Ÿ‹w‰¤]ÈæóÏ?ÇãTµµZ­^€T«Õ;wîÆ##‰Ó4†ÎÎN0åô¼lSé^©‰pcww;@Jˆuaßþþ>q‰ ÀÓé4öw¦Ò‚ PããemhhˆD"xôQk€Öâiã^"‘¤R) ~].×ÒÒrU¨œxD#‘Hccãàà ¢3dýÃ?ü­$}䨨Ø/~ñ ¬žLØÈ  ÿ' ¡íÑjµ?ÿùÏñIžmmmÎEn"– Aü~?Á)D¬­åÍK¥RäXÄÎÐùµ´´`yÕh4^¯—þòò²Ž€ohh@ÚÑÖÖöâÅ “É„nØQ$I§Óì3ñ‘øÕÓÓ wvv@«CÅÈçó<°CÑ'À[,oܸAøx>ŸÿòË/éBü~­V#Ùœ)+UX&“éÖ­[f³ùêêÊjµ²C"f–)qÊ]]]óóóÃÃÃ---Lix–“Ç …¨ðŠÅâÞÞ^(r¹\Á`pdd„qß¿þë¿ Y,®Ø™™JCàû‘H„P \TR©TÌ•T„°hxð ê<ŠHŽ~ƉïÂë¨Ü=zDëÇÖ”1ëx"Ûc±X?³‘©©)£ýýý¶¶¶ÃÃCXíJ¥‚›ÙÙÙ\.Gô¢Ë嚘˜Ðëõ,WE"Ñèè(i[f³ÙétŠD"­V;??k†ƒ>›FÝn÷ôô4Êßþíß°œ…BØßm6 wòÏ=`êì>>>Îe‡BŽXKsà˜*b;Òh4T‹€â‚œF;\«Õ@{ÃÁ$åp8âe&Ú,o¹©˜!p[ªÕjxôa²Ù, èíúûûÇÆÆà`hÚÚÚ‚çîõz»»»QÝu…ÉŒF£éï›“J¥ÓÓÓ¨ Ýn÷ØØX>Ÿ™››“H$4ï]]]f³9N£PšœœäÌBÉì ž"ï\¥RÕ)NÍÍ̈́ӳQÄ^¤Ñh eò±¸\.AÈ!¡7F£"‘¨V«t~rr‚ú0 (FN§†h:fÒb4ùáGGG‹¥¹¹9›ÍNOOà ‚Ñ&›ÍöÞ{ï¤Óéû÷ï›Íæ`08>>Î.N£Ñ8t …‚Åo{{;ŠO‚¡º ýgB¥P(Àä‚g¸víÓm—Ëe³ÙÄbñÕÕ•Ûíæ³âÝV*´†빡ÎÎÎÛÛÛ!i“1d6›¡SRl0D"QSSÓØ>¼70DLØðß©ÕêŸþô§###@á¿÷½ï}ÿý÷ÁKlmm¡sD"r¹˜L]™N¼-΀©©)`ŸlYÁ1‘0#‹ûúú”JåÎÎÎ7¿ùMt wîÜÍd2“““`'Ün÷üüøb¬p,l鱘A¶^.—™6Ô¡óà'Ù[’ tyyéñxvvvHu€ì_«Õžwvvìv»R©\YYaòâÅ œ®/^¼¡««ëÕ«W»»»hKP\\\r||ŒˆµV«‘Z*•^¾|Ç¿ûÝï^¬V«#‘³ÔîînÀ“›››\|ˆ¥¾üòËÝÝݽ½=,…Ø”0±’ ˜œ˜˜ ÆBÀzuuõo|cvv¿a CCCJ¥r```rròæÍ›4BøB5ÛÐÐ@t 08ŒõÂáðÛ·oaf³YD˜'''«««''',¢¥R) 3r¹üèèèää„Å ˆ¤–¤> ‚ÀÖ!“ÉD"F£˜¼¾ö×;1sïèè :\Ÿ Œ¡A[v¯ÕjÑüV«UØ,Cß{ï=ºø:Âwff¦P((Š©©)¥RùðáCæìýýý,ß¼y"jllŒcqrròðð—ìûï¿ÿòåKžÃ‘HçêüãÏ?ÿÜf³‘JhNcc#B@Â}@*–¡Z¬T*ˆð$ ‚MMM.—+ŸÏÃ~aøNÒ)Qèíø/ɃG b³Ùü~?C^Æë­­­h ¥R)g"â÷zN!Å2?¿½ÄØó925äÿ؈<O±Xloo‡qªÑhîÝ»···Y!C†ÂýÉï >lppðòòÒï÷ß¼y“Ñ$” ^¯·­­Íf³ÍÎκÝnN+0*•ª±±ñƒ>ˆÅb´Øl•‘yP•cý¯Õjï¿ÿ>mþÞ––™L¦R©P 17›Íápò"© lã‰;áøø˜š—ç"ÚÜËËK¸²rë"ñ÷Þ{ßc ³Ù¼²²û7N9xþü¹Ûínkk …Bÿøÿ˜H$nß¾½´´tëÖ­B¡ð›ßüæÆ<õÁ £…e7‹|“2Pìl89ˆÎf³ÌGGGqËd²ÞÞ^zf³™¤o½^¯P(ÆÆÆðÐJ%~úüüœ§`gggkkëË—/­Vk6›ee‚@[&®Ë–––ÑÑQÞ‘¿ ÝÝÝèj …T(”W0 ÚÛÛãñ8Å/ÖÖ7n`©»sç_;¾ñb±Hè<€‹‹‹ÞÞ^‰D¼exxxvvƒ`>Óÿ%‰ÎÎN3MMM …boo¯¡¡A¥RCèîîÆÜ@ZÎÙÙYgg§R©|þü¹^¯w»Ý@Àãñ µ5dc±í§œ"K€òüàà@$±–G”ÏçËå2n¯¯ó0ýO¯wâp§ŽÀdœÑ]¤B¡d `êÞEQ ÞÝív‡B¡žžòÛ€?@L<==ÝÛÛ“H$¤a„B!‘H„/Îçóù|>R&¶¶¶X%q5àRãȺ>‘Hô÷÷ ‚ …âñx[[[=·åèèuŠ…B!“É Øl6¬õ 02è6KÕÖÙÙɨ$‹¢Åvñ•¹3’’`0(—Ë ©Àg/JdA:;;Åb1²Šp8Ì1Áÿ—œ{JE ç s¸‚é ¢äÁà÷ûQì`åGËÏ@ŸmA4mii) ±9Ç}]Öɉ òù¦§§{zzž?žJ¥è`(ÙjH$’ããc,è%w¢¬À‰Õ„H]ÐZ¼X,rEAÙnjjzÐêÕñår™‘ÑíÛ·%lVñý IDATÉëׯívû'Ÿ|‚3€Jà'²§Q‚ ˜ÍæÏ?ÿüÍ›7‚ LMM!Ï…À®ïúõë+++kkk'''>Ÿo~~Þn·ÿâ¿8>>V(Á`æÁ` ƒ´BR©TZàr`ÁÈ +“ɦ§§™ŠðápG‚ V«X©Õj±XüöíÛþþþµµµ›7obì, $xX­VÎS¦œþGGG‘Án–Ñh4»»»WWW‚  T4ü¾———¬ÄHI$.—k~~þý¯ÿU©T$‰ßï—H$Ì`?þøcsŸ}öYss³ÕjU*•«««h<N§C©ÙÓÓ‡©3¤Ré“'OhRgggÁLz<ž­­-ºm‘H´»»Ë&ùòòr``@*•’è’Ëå8Á±>uttÀhóûý¬šøM©±ÎÏÏ©½è ¹Ñ@¡ðÜ"¯¦¥¥ª >žœœT©TTÇ0‘˜ã-//‹D¢¿üå/jµz}} °3 7I†0 ê§P(äóy¯×ûúõk“ÉD„ìîî.‹¹———,'x,E@›¨×ëòùzôH$èëëËårØ”E"‘L&3hi(ìv;ø=šì'ž¸Ýîd2 0Ncc#J6i\‚7°°RzØl6•J•L&á šL&§Ó‰?ž¨Vj~ø!­k×®ét:A,‹ ˜\»v­X,ºÝî»wï†B!¸˜ù|¾Z­^»víòòA7^ññqNÕöövZ~£ÑHf¹%½½½F£¿˜D"q»Ý333MMM¸dGGGa•Øl6¢²Ðh£×„ÐÒÕÕÕ××GÂò†@Ä———T---ããã$vq Pz«ÕjØ¢àm9è-Ë;wö÷÷Q(á,‡ƒ6>>îp8.//www»»»‡††‡‡‡oß¾ÍJ|jjŠtÓññq«Õ ¢' ñ“ÜR«Õù6ŽŽ!ê¥ñÿðÃŽŽärùèèèÉɉ Û^]]õôôŒŽŽ‡hÎÓ2~×t:M­€l†%ô²\|Œ,9Yr8Žú T§Ó1¹Fô¸¼³³yRGGa­Ü†ÇÇÇCCC###‚ PPët:»Ý>==-“ɘù`ö6 ÌvwwÃ#ÃÔÖØØÈL¬··×ï÷wvv@w‰Dþøøøèè(ŽS>O:¶oûÛ‘H$—ËÍÌÌñxëÖ- ”}ÌOà4 †öövn"2Ç-Ëæææøø8Èq[˜‰9FC3337oÞ”H$b±ØårE£Q…BªïtB»q¼ †ÿY¨þŸ×{ï½Çâ‚xbòÙÞ`Reä¿T¯×ß¿BáÐв±±1(T+¬ìàLù|>‡Ãs•t:f»b±˜V€ý‰ ˜Â±ÞÐü¢÷x<ÛÛÛ333€Æpß …†>ŠŽM#e2s½^´€­:ÊôJ¥BÏÀÇd2!ñƸO 'r7Òë1àÔ \•H$l«0C!ý®V«Éd:ÛQFö®b¼æ%I$A×EØ©c---™LF©TÂláóW©TÄþ‹Åï¿ÿ>¦-·Û öozzZ¡P@éK§ÓùË_ T[âJàç±V*•0›2™ Š—jµº»»Ë¾o=à{«Õ*—ˉ gÀÊõ€Ï€e £3Ìh‰DÁUµZ58wÈU`¿M`@­VƒÇIÞ^­V{ôè5 ؆ññqFã÷û &­V«ÇÇÇ‚...ÆÇÇ^¾|)•Ji`³kÙÞÞƒƒƒJ¥r{{ûñãÇóóó©TêíÛ·õ-+ßúú:-Âêê*ìÀ~|µZmhh(›Ínll \\\,//«T*½^¿±±A©R©Ø…Äb±p8|÷î]¥R ²»»E_1LÈ\èØçär9Ô™s ˜0°´XZZýQÇ3´(ŒY ÝfO‹ü†Äh4ÖíBœ\|Ψ_ˆe¬Ì Îh4öõõq`qX8Žp8l·ÛÏÏÏ CWWS)“É$‹qëtuu±Éç)ûäÉÌ¿üå/92ÖÖÖ˜´,..¢ÈZ]]M¥R$Ú À¨8¢‘‡ƒy!~kkkppì=ü¨''' âc±µ“AÐÿe³Ù««+† ™L†“ K'QsxÙxtžž—Êb ×.Ñ•••ããc½^ψ’/”àºFCðÙÚÚÃÆÍÍM«ÕšÏçS©ÔÈÈÁ ‡‡‡Ù¸ b& †Ž V+ ].x‘Hd±X(ìØ‘@‰Dz{{¹=ÇñÂÂRà'OžPQýÇü”‚ÅÅEBQ@"×óÓÅbq4ÅXζF,“ FiÖ766è21µÖjµwäp'fîÔ°6› ) & ñÙ“Àc£@îééééé!öˆFv»]¯×sàÚívTíår™œ#”¶h6p”uww_¿~=›ÍÎÍÍ©Tª­­­†††ÎÎÎgÏžaÎt¹\‡ƒ‰D*•R(~øáææ& D¶Ð»AH&“ííí´8Háñ²Ú­GÉd²7n lƒR(...`õ=þœuÐÉÉÉW_}Å/‚ahhhŸÖüªTôm¬j»»»QFò——•ßwqqQ,···ãÉ$5ŸÏ[­V‹åêêªZ­âÜyñâ…Á`®‹Å ÅÌÌÌþþ>²k>4ô Z­6•J1–A%F5øeÚ¢®E"é([[[«««àáhQ>\]]¹\.Ö˜0³ jzl½xn9 ùü9×PUñöP5 ¡ÂB°„zZŸÏGí¬R©ärù§Ÿ~ÊóR©Tº\.¢2ív;Y";;;€6¯]»FËrãÎ;oÞ¼q¹\F£ñG?úصîînJÝ|>½“(gfýF£q````` 744´½½Íd²Z­öôôp-‘ ƒiýà~ü™ÇÇǤ©X,f¨ý@' ‚pxxŸ‡8AÔju{{ûää$ÕZ­Æ0 {ŽX,¦Œ€-Ê-É·ìt:ÕjõÊÊ ±Ô\`óóóT0à×Y6Z­Öööv‹Å„½½½›Í;—Ñ<ñè`ÜÏÏÏÁÜÓ+€laddäüü|oo ŸÏ÷õõ½zõŠ‘c{{»Ç㹸¸øáøûßÿžòH¯×ß½{—y MÆÀÀÀ“'OÇ£Gøôz=³ \.GÖ® °þAH$dq ñE„šJ¥š²Aƒwxxèp8¾†3ôÿöz'*÷o}ë[›››‰¤««+‹¡$ gggHKÁkű¼¼|ttd0´Zí«W¯ Ì0)—Ë‹‹‹Œ¶ÐDCóÀ:¸»»‹Ø|{{»žÎŽKI ÓáP(„àQÍfciÃK¡P¿¹½½MC@QëÃ Š‘x<q… WÂ?ÙÝ£>îííåFÂj¤Ñh.//ºP>‹EÇC,1žZ­vss3NC¾ŒD"PV²ÙlýŠ= ¨q¯×k4»ººvvv{y½^nÑ7oÞgÁ­uvvl€1T¥RÑjµdà ‚pvv‡A@üÛÙÙép8666¾øâ‹³³3ž‹ä…B!reFãááá§Ÿ~ÚÝÝL&wvv4 󜫫+ü5<u:ÝÁÁ¨¨,jµvàÅÅE}ZÍb“Ùåj©TªóZQaC"ƒ 5…¯¯žÿÙÚÚÚÖÖ†û14Š[Ah츢xê$ \û•J…Iü^Þ-ü™ãããååel–}ôQ©Tº~ýz,[XX`(¿¹¹I@6"NN·¼¼L~:ø_”0ðª`5ü5”©";ÎÎNLùè2Óét ‰Doß¾…ÀÆÚÏóçÏF#+nìÜWpØ£|Á;Æœª¥¥%‹±0™LˆgHÖétл˜}qÙ(•JTðð“É$úÆ\ø^ØHxP(\Àää€á0eÉôÛßþ²)x€†††@ Çd<í³M¼)»»»ü•r¹üÞ{ï-..R毬¬Ð×ÂÒQ(sÓ‹9à´Q*•‚ `LH%šÏçq9R¥jÜÝÝ壠PøÚ_ïÄáþþûï‹Åâµµ5`uÙlÖh4žœœ µ. ËËË c±‡f8‡Ã¬éIBSŒµzee¥` …B]]]ÝÝݬVð‰0^|õê®`0èóùÆÆÆž?Ž*«££cssóììL¯×{<ŸÏ§×ëÃá0³þ\.÷òåKO±X Êv±X¥ô‘"þÊÁÁV«¥â÷J§ÓÀ`I#2›Í½½½r¹|hhH.—“.'„5#‰‹‹ ¶‹årÙét’5CÔrRds"qÉbÏÉf³P×ÖÖpy@Ëf¾ÌvÌ$ä&Fù”Qè %ÉÒÒÚg±X̸Üf³ñ'ííí[[[ðƒÁ`(²Ùl‰äíÛ·Œ¹@­ÍÍÍ}òÉ';;;kkk_}õ;Ç#“Éd2!–Œeнs·: Ù:ˆD¢R©´¾¾N~,a)år™l#ÆëTÐÀú)íONNØŸÿÝßý¼Yr'&&È„÷ ¶î&kmmµZ­Õjµ©©éÞ½{¸©¯]»ÆAÆ)ˆV«…^077§×ëáÝËåòÕÕU>ÿ7oÞT*•©©© ø½kkk‚ $“I‚“ßaõL$à*ŽŽ€4pÌ18bîãZ.—áÉd2’@*•l‹wwww{{›,À½½=Üa[[[00ýw¬;H•1Ìþ„^™ëŸœtžFœòLKA€«!‘H¸×:::¶¶¶vvvººº”JåÍ›7/..T²X,ÃÃÃ6› –äÝ»w™°Ùl¶‡ær9ÐVÈHéïïw»Ý<¶Yº²:jlläjíííÝÞÞf‹oJ„?ÿùÏ2™ìÖ­[(P£Ñèîî.ÄèÙüvt3ççç™Lì0žDðô ¸´Z-öi½^¿µµõµ¨ÿÏëË 8%/Osssww7áG\ÍõõÝñññôô4Ý=YºóóóMMM„8£¶æyÎDO‡˜„Ñ<$·Ûí÷û›ššfgg%ÉÚÚšÁ`øÉO~"‹q"tvvòÅs(°…ÃÅñŒŒ'9Ò "ÙT*”¸¶¶6jj†¿Ø¸IØA«—H$b±ØÅÅÅÖÖ˜’IÊG"âªŽŽ¸’h³Ù,ƒšAļ´ ì²àó «ÕªÑh^¼xAÚ¤T*½¸¸ ´ïîîFAB4ÐâçÅbñÝ»w“É$š‹Å²ººª×ë'&&U*Õ~ðƒW¯^cQ*•étº_Ð××gµZáLMM ‚°±±a2™X)ƒ/f¡×ÒÒÂ4øÏ'Ÿ|‚‡ekkK­V÷öö¦Óé““R–pŽð°œœœ–²Õj%Ñ´žÊv«££ƒÔ)h`HÀulµZ9å=«N&,TJ¥ÒØØÞ]Œ£z½þüü~w__ßÐÐÐË—/ß¾}ËÃã«Ñh|öì™Ûí6›Í£££¹\®±±q|||yy¹n .ÿ€X@§Ó!¡©SYìvûÄÄ“kA•6™Lˆíìv{2™dY¢P(&''kµÀœóósL¶¥RÉáp¤Óiv ¹\nrr’ÃÎf³ ‚àt:¡‡žŸŸ÷÷÷Ëd2î©@ À¿§§§R©X­Ö«««Z­ G,;NmmmÈ“šššA`?©R©ÎÎÎúúú ƒ ÜÅDÖ‘oÓÕÕõ›ßü¦§§Çd2544|öÙgÑh´±±ñéÓ§øTž?~ïÞ½ùùùW¯^±r'k[«Õ"¯ÚØØp»Ý»»»xwéär9\‰DòðáC ö{÷îAjÃÅm2™Hha¿EÌ/l4Qàüø\.Þ…BáóùAŸ'—Ë­V+S,j¬|>4¥£££\.»Ýî_ýêWÿí‡èÿåõNîÅb‘*yÏÃ@ ¦¼T*ø™H$l/..‚ ßÜÜôûý°Y^¡Q“ËåX/..øÏø‚aRºÝnŒ©áp¸µµU«Õž1¦X]]µZ­¯^½¢¤Íçó‡cuu5bs…×xíÚ5H¿mmmXõË755±òb Ô××GP0AHÉ È‘ÖÑÑ#B¤èÔJ@½)…¸‚ѽ1tªÕjëëëu¯ƒ šu+ Ä´Ò¡Pˆ>Àn·ØDŸA4k6›%¥X,îììT*“ÉDV2Ôl>ŸïààÜ.ëeFggg~¿?›ÍŽœœ5˜Édd2Æn r¹\«ÕòÓŠÅ"™sù|Þh4¦R)SŒYÐ,Roâ`„؃®C©TÚ××\P¥RÕç`ŒPD"Q,ëèèM$€\p±-,—ËÃÃÃÄÂ0_ÆûÃÍÌ"Çjµ&‰t:qissS.—ONN:Ž••ŸÏGs …˜ÔÁ&<>>¾ººùôÓOE"ÑÂÂ'² ÄÀòtîñE:huî‘HŽÌÔ Üù(˜‰DB§ÓAGa\@yËŃ9^§Ó1Ä«÷<‚ÐÜÜ –½V«Á;Òét‡‡‡oÞ¼U999Y.—·¶¶®®® ƒÏçC+Ìæ\¡P€C~ãóù¸$(nܸ±±±±¸¸HÞ™ÑhĈG^¦Óé4™LCCCjµúÃ?$? æ Æ…Bˆ¦ŽâLH$?ÿùÏ;;;A‰Ôjµ:Á‚ˆÏ>û¬T*mooÓbîììtttX,ÔÀÝÝÝ­­­øNxü¶ ;3ŸŸŸ[­V„s àXä“[äQ~¿ÿëŸ_\\t8l«pÃær¹p8\.—WVVæææêbU`Ó“““ggg¸éÀ7 Î AVWWQ¢Ý$  j*æHr¹Ãg0™Ëª Èøø8b§Ó¹½½}uuU,Q’P_6!;”†¹½ÉdB.›—‘4CsÞVR Â_ïÞx<~uu…NŽ|}ÎÊ+ 4+ \ÄJ466B¶J$€8ÀäääÆÆÆææ¦ÉdbÜÚÚšÉd666 ¢ÌH$Bi  ¡I*•þä'?¡gÏår"‘ÃaÝùÏç_½zU,»»»F#ƒ~›Üؼaü™X¥  1‹Ç]yyyÉ!Ž`Ãétbhnn–ËåhBär9ȧ‘‘ž7YzOOÏ_|G&“}ú駇†Z__ßááakkëÏ~ö³H$233‹œëŠIÚ¯~õ+üèJ¥2›Í²€e$‰à)ª…<ƒ–‹g£^ìÁ•JÅh4 ‚ •J•J%ã²ŽŽŽ‹‹ &Zl5 nllX­ÖÓÓS|Ë‘H„ÝÆÆ†ÍfcÆ-B¡PèêêÂËZ,Ù×£ÍʇH­VË(¦\.“$¾²²òío»¥¥ewwW«Õ&“ɵµµ‡ŠÅb™LÆàT&“-..âS£­„2½°°€¸öððpuuµ±±ñîÝ»d'à§ÛÜܘ+ÄP³ÙÌ»Õëõ"‘Èd2}ÿûßÏf³(ˆ˜šL&ÔÆø †½½=AÂáðÍ›7ÙH£ÉAø„.ˆ¨BDÕŒÑPË„doa`{½éó7qà6_ãYúŸ_ïÄÌýƒ>`Œ`6›éõèý~¿Á`)•Jô•Œ ÛÚÚŽ§¦¦_OOOGGkÏùùy`[.— ˆ·™N§ãM§ÓµZÌâO9\¾Êåò¾¾>ÔâTñLÛQÑ™ÍfʇÎÎÎ`0 Q÷ãÆÜÝÝzœL&ƒÁ ÑhÄ[Ì©LÝ©¯þë‹Cp ö?i0íÌfó£G°üq,‚ Æx200€ÑÎét:Ž–––ááá¶¶6Ç£Ñh®]»F.ðÔÔ“¨ÉÉÉæææƒƒƒëׯÏÍÍñôeôÙØØ8??Ïäall¬½½½Z­NNNÎÌÌ`8êêêO&“ìâÀìììðððââ"Î>1HÄ<1àïV«UÔ–ŒhÈŒöù|f³™ÁV5rµðÁ744Z©Tèá<777›ÍfŸÏ·²²‚Rðââ‚})‹µJ¥²´´„ ÃçóaoÙÛÛÛÜÜ4 "Ì[ ‡ÃTËX,s:¤¨3²£žÀ:[©Tˆ18==u:‚ H$’WA¼À{IãÏLòÏÐÐÞ(˜Àˆ‹ÑÚív ÄË]]]!»B˜ €å&“I“Éär¹Hÿ ø”.’P|Îdç2–Ä‹G®T*¹hÛÚÚèéé9ÿkF&®:žßN§UssóÐÐÐââ"°9’ü~±ÃnF«ÕŽŽŽ~õÕW}}}Œqê9::򯯬\‹Å"œ‘HD,j"‘¸~ý:5ÖØØ˜^¯‡ ÒÚÚ +•ÊÀÀÛ‘ùùyª„º(m^­VÓjµSSSt3£££F.—www³ĽÅb9ƒå¯¾úêkŸMÔ³gÏA G P0…’›W¯^¦ÛÙÙaÏ *ûõë×<ùOOO)è’É$>˜Dƒƒƒœ\N§“•Ø?NÃææfž%ˆÙ·¶¶¨—}>_6›‚Ê•Íf™"@Ç‚ˆþÊÚÚZ:îéé9>>ÞØØ@ŽÏç@©Ð™F£ÑgÏžهʀҀ†®™ôZpzÉd’Gu¹\~ùò%tu‰Dòù石õmmm …B>ŸO&“uuu‰ÅâD"ÁçÍ›7„"»†uŒ (Ó}ëà<ÅæEë IDATÃÃ)T*B—4 ¥ÃÃC›Í¦T*ùî€e¢ÇH&“<Ün·Z­žœœœ››ÓétMMM7nÜ`PÀ|# ár<996l4ÿýßÿÝjµú|¾ÍÍÍx<¾½½½´´´¿¿‹År¹ÜÇ Ñåõë׈q!>2õBöóúõ룣£ÎÎÎÓÓSàáPèððHu  W’ÑUd¹\&Z%sèÖä1!×áÀ…êÌÓâõë×p,ìðq 1’&Ó“Àb± …ˆ–â.X±¥¥%v!4RÆãñÐ\^^¾}û–0z<_“““ÇÇÇÏž=£ÕÆGŠYOOÑh$«ÀjµÖ×i×®]s8¸éißollô÷÷#`ßÜÜ ½¹¹‡?~Œv%‹---ažzþüy©TÒëõÏŸ?¼¾¾~uu ¹…»ººàé“H$¸æA?ÒÿuÂ4a:¦Âc@„ª Z€¯ýõNŒe ¨ êÀùB ƒR©DøŒ¼dwwwww—{¿FµZ]__gÌ …¶··oÞ¼ ùD«Õb6C;588xpp@ŠÓõÖ­[„.’œ²¶¶vçÎPàÈ–½^¯ÙlfÅGGŒÕX«Õ"2ãæN@@"´‰„Óé´Z­ggg333———[[[”´ mÈf“H$˜-9AèB*•ÊÛ·of‚ÐÒÒ²±±‹ÅFFFèéééa¸o0d2™F£Á’·³³#“É(£¼^ïÙÙÙèèh(â>d›ÚÛÛ‹è‚Ìšh4:11ÁÌ—ôåË—>äDE#‰ÔjõG}$—Ëv®Ä'¼¿¿ñ$ âI$D$CÀÕÔÔŸykkëƒ>¸uë–ZlœlÆ8ªŽU*U¹\&r8Öp8<88¨Õj!ÖA+‡C$Õ×n°Æ\.×ÐÐÐææ¦ 4ãPjðßîÁCs¿N§ÛØØØÞÞîëëC-ÃÛ#=¸àÈÈH¥RùÑ~D‹¶µµîÏþóåå¥^¯ÅbÌL™ºl¹‹Å"R'¥R ÜP`,‘Hˆ3%½>(®ã?üá˜`ªT*2µûúúZZZ^¿~=>>ξ G7ÂmšBb8‹NçÀÀË'ªT0ù|Þï÷[,ª+½^ßò¿Ù;“ï¶ÏóÞ¿ÄLÌ3A @€g‘”(Y2eË>Ω½HOÓ¦í¢ÿ[W]ô¤]´I÷$";’%JœI€à€™9`"F¸‹ÏÒ{o×WZ‹žÆ¶DxÏû<ßç;ðFXÏ¢dƒ';)tŒt…B¿ƒ‡ÃñðáÃýý}üÅpÞgMº¾¾#– ºe6p6›Íl6ƒ‘þú׿F± …¦¦¦ˆ‡Åv”µ<¤úét:$fù|~mm •H&4ž‰‰ ¥R‡ÿô§?‹ÅO?ý3_½^'u½Ëåå%žtf³'í««+†àýV«ñ¼¿×júç×ѹùå—l~(ÓÈgÀ³Ø,ÑщÐ_—Ëåh4ŠCÀÖÖö#t,,,0 Ãcßh·Ûq¿#€‰ðääÉh¹\sT©T´$H“jµ‡áòÈG"ÜÞÞÞÜÜÐVŒáÁa¥R9==ES‰DŽŽŽJ¥R,Ã+í§Ÿ~b—K³yxxh6›···wvvnoo¿þúëT*…We¿ß?88H&“¬"noo‘ä\]] !e&&&J¥’¡*žN§Cg€¨„9»‚Z‰ß¯Ûíæ—Åý$·¸D"±Ûí7774é8Ï i·ÛÃáP©TòXÑ6A=àÿò²°Å“€·Š5ÄM€¹w±¬Á›ÜÌd2Aig𬠹¸¸¸»»{ùò¥Éd¢[ªV«@ ÙlþéO‚®þí·ßÂ:‡`þõ×_¿|ùå`·ÛÝÜÜÜÞÞv8H©‰ÓûÃþ@ìu>ŸÇÚoW’IX_W«ÕããcÌ|Úí6æ$á®j2™„È©¨Ýhd2z7™LF 6É´z½ØŠ>Ø@“““øƒ¾÷×QÜ}>ŸR©„< ð‚„š ôŸlŸƒÁÉÉ žé‰Dj6œßjµJ•YÐññ1ÄAº/..šƒÑÙlöÑ£G¹\.N³:#11ñîî.&˜©¦Ói.hô‰Ùl¶Z­b–ËF¿–~´K××׃Á ™LbxÂjL^p H¥R‰„¼.­VK; ¿ÿG¯×aÖI—Íœ‹;½-\nJÕj5Ìeœ:®®®Ðµžžž1Ë+•J©TJ›"œ¡ã­¼¤ƒ• $pf³YÂKq¦¢¡Àëê†@!“É`#Ž& Їub"‘ ÔãbÆê›››X,vssà G~ ¶—|Y<ØÜ||ì$j"ç¹¼¼ˆ`PèõzKKKüпù›¿éõz.—ëÉ“'¸“.--á«…þ™øPRýÀăÁïÿ{³Ù OƒØ¡,Ë`0øá‡02ÚÛÛ”K$8O`ó Ò’Ífí±ø PaLHí0¦nµZZ­¯c¨2´½GpsÀ‚e…3 ôz=*0•J…4ÚãñàY“ ÑÞ¢´êÅbí4!àØYïïï×ëuV_8ðTòÇ3™ G‚¬ 誙Ls`ÒŒy{l¹·õ_ýÕ_ñ·">\¡Fƒf“fŽêp8Ô¾{ ƒ7oÞp÷Fø2™¬Ýnß¿„†ÚP«Õ®¬¬W„ÒÇíßï?;;ò™®– ‰2AWb6›ÑaÒ§{<xiÄ2`~||L|!ì´™™™\.W,¡â2ßU«UžjúVÒ!‚£ð†˜l0HÑh4ÃáÏ#–Wø)R»———Af‰>Ô,Ù˜@Gà6› ˜¢Ñh ×5™LÈR°}/—ËäÍçóyÜX?ø|¾»»»\.—L&Ÿ>} !ŠL!Äôôt(jµZ@:Ø„1PÏÌÌ!ðçB ‹åÂ¥g8:XU<ÿ¼N?U¥RÑ2ãs0Š» N§‚r‰}‚Ñh\ZZBê™L&ùç,É›ƒÁ 7£I¤B¥RI&¸ÙlƒFcss6H©TZ[[s»ÝápX¥Rqôz=P> p-®åÄÔH¥R¦~:n æ ·b€Ì$rEŽX8f)ÅÏàÈ>“©l€Ûí6 x$ùùÏþË_þòŸÿùŸà±U ŽÃn·›L&¾È£¸»\®‡F", Dä/ …þB§ÓY\\äÞb¯FÁgPñîÅ3ˆ8£=.¼^¯é–;2+7] ƒûÿ÷ úß¿>ˆÎý«¯¾2 œ9b‹…H<ÜQ(^d ƒlð°Fà³'OžðÝ,..º\.ÔÀèÜ@Qaš“&Ã?Q©TðÏÈQbb |‹Ý,ˆÉdr:`5ápX«Õb' # Õjå‘À&5Âl6£íôûýôòTìA”JåóçÏ+•J©TÂ^œ“”Íf hÎår´oŒ®pøÐg·ÛmH/Ãá4;¤Œ#ˆVØù@ÇgôíÛ· mßÿ=H!fsøÖ1²°âç²Y BÌÐétÓÓÓlÔM&S§ÓØGh5j>§Óév»ÇÇÇ•Jåíííôô´Ñh¬Õjˆ34Íôô4üHÄØðöîÝ»§R©°2ÝÂfƒ/4<D°ëúúZ*•ê¤P( Ù13+•J›Í†£–×ðÇÆÆF—ÜØØ^O2™ {mØýæáǼ½¥¥%Fóoÿöo©T ÿ»Ýn4·¶¶noo1‚½¾¾>>>FeÖl6I¦ÞÝÝerrÂú—P°Z­æ6bÈcK?;; “’ÅU8Fr…g*k¼zÀX€¼^/ªÕj%, ñ‘½+ð½ÏçãPMNNnoo¿ßŠÊëƒ(îóóó$)ƒb±ˆ&9*áápˆÎ³Óé¼}ûâ6Óh·Û}ýú5õ¢X,âî‰D"‘ÒsRcpTÿãÿh³Ù„éé5›ÍÀ±Xìððð·¿ý-ÞñµZòz}}3Ÿ\.Ïf³NM©T*%ŸÕX,6 ¢d½^Oz:ÛÛÛ[$|4°ív›ÎÇÍÍ ©iœ*®tóƒÁ£N‡¤žF˜idDµZ ê$ZMp|ŒŽ¯®®úýþøø8°v»½¿¿OdC4Ð:Öétñx|wwwrrR­Vÿö·¿“!B§èÍ›7`²år™æ‘Ïßápð}A 9::ªV«Fãä䄎¾P(|÷Ýw$ Œžžž¢Bà6¢Âž5›Mù»œOÆðl6‹8HàV@†$'¹\®T*±”ÆñBeügF¼R UÙk4š¿üË¿äÏ.--1y ‡CÒ¢Ù.¶ÛíjµÊ§š2¹^¯onnnmm) ·ÛMÝoµZoÞ¼ÁÚ æ :ä‘SM±XdêO&“±XL£Ñàá…Ÿ(žÏ\T a™Ll ½è%é:T³Ñh°K¸¹¹‹D"\<X9ÂN‘àñ1Ш"“É`Â(•Ê|>•¾Ñh°ÿo·ÛÐ=e³Ùb±HµÅ-ŽsˆO*~®xAB855…eéÕÕ•ËåÚØØBt»Ýµµµ|>'3eÂjŒv»ýøñc B„GGG½^ogg‹*³ÙœL&³Ù,&T½^O­V¿xñâîîÎn·óÍ7-ÀLâv‰ø µb -d>Ÿ‡¬ÍéõzÑh4 Õj5_À¬J‰=¢‰õÅ#û@(V«¡¶Ñh$£’З˅Í:ê\ÇcµZ±ñ™Aý4Ê»À[x0,..b}}»T*­¬¬°Ä-;¹Мc±aПI¥ÒÛÛÛ³³3.’·oß´999á§_\\ AC4 ÖÖÖ0òE"øÉlrrR¥R½xñ‚¨‡J¥´B!Cï#„ñYTÔjµr¹Ì6‚¦;ßññq¬bs¹› pî™Lá&;·H·ÛýùÏw:8¢`0èv»I—¶’Ëå@+ý~YQæØ8Ëd²ÅÅE誳³³n·›†ƒÝD"™Å_—ìÓëëë¹¹9ÐÈ'àË¢ÔRyñîÇÃ6›Í ËŽÔb±€(âó,ÞiÜÄ;׳h4*„ÀĸP( ÅEXÄäÊ^I‡Êjµ’+À,ËŽOȦ˜5  vtKh‰ðG‚Ä̪kFVÁŒ ´,>¤%Âí®P(X,–p8œJ¥–––VWWs¹ÜÊÊ œf³™Jâ£GÜn7Ûà««+‡Ã¿£ßï_ZZBâîp8îîîx?+++Ýn÷ôôtyy­œÛíÆHŽ˜!%Ÿ¿B¡H&“¸³ÑHQ£ˆ€‡‚m³ÕjÝÛÛ{åtôú Šûòò288$*"’‰¦c_/„Éd¸nò0Œ§R)£Ñ¸±±Ç€R©L&“‡cnnލRÒ%ƒ‡6@ @1žžFd2™B¡R^¯—C@nV³Ù ‡Ã`‹øØ´Z-ŸÏ·±±¡R©†ÃáG}çrnnÎf³e³Yòk˜ =Ø7oî :{Æ=•Jµ½½}~~.•J!óÂ’Ägõ„‘/‹²R©DÔ=f5¥RI.— !ŠÅ"ê>¤Y !8¬ÔÊ™™™áp8>>Ž[ˆJ¥‚SÈŒLé'G†¡ÔÓÉÉÉååe@F¶|Åbq~~^.—ÃÂÐ`à“a¯ÕjgffH2ë÷ûÃáp~~ï§ÓÉàÞ½{L>.‘H趈‹+ǽ“Êû4›ÍÌïLô(ï‰ ›››t…777:. F£Ñf³¹¸¸Hó¢V«ggg1èp:$û`·M!c¬Ñhàhbç=66æóùB¡P¯×#ºo0û Wôz‹Å‚P0Ä«R©ÌÏÏ«Õj²†»Ý.ß;X*m¦Ûí&a0Ð !@íл™L&lg›$ DˆF£a2™Êå235~ÜhˆýcÆ/c8ŽÅbØâ¡&„¸ÿ>þ3ˆ¨-Ë?üÃ?|ûí· (Ìf³Åb††Ê‚¿‚b8Z­VÂ.¶¶¶úý>ühªóññq¥Ryüø10¶t˜k:N¨îF£áh2™“,‹F93$=QLõz=û^êìèG±Å^t2¾#Êáp0øØ±€p%•JBNg¡Pà9e¼šƒûÀ3€N¥£ 2Å ð³”J¥V«M$hÙæææ+ðoùjÂáð“'OÚí6¼2hÿôOÿ$„àü0ÏÏÏùå—|ªR©™+šAÜÁÊå2ÊmÇÓl6OOOM&ÓO?ý„íééi»ÝÞØØ h›8Cv³³³³0šè#!ªã¡¯djç ÃA Ñ|?eôÿy}(;º|õ˜^Ùk#$q<{<žZ­6;;‹#®Z­þè£&&&¸Ø1…ÀV&“á|211Q,WWWårùØØÑà ŒÀ…Bajjêþýûôt‹‹‹lœˆ›¹¾¾fk–‚ÑhD3M’-³ÕjeÀTR©TJ$À m³ÙÌ:ÀÁjµ:NN‹Åêõ:Üm‚"K¥R<Ù‘Cw+ ôûÜ:”ŒX,ÿdT– ÕjÕh42 @Þ"XZZZ^^Æ ³Ù¼¶¶‡#N …ÐI.//C0åŠêõz³³³ˆ’Ð…_^^ÆÏ>ûŒžò‰V«]__çÛ\\\ä»0óóótykkk•JåÞ½{t:……„¬ù|^§ÓQàøšˆ´†ù È:—ËE±ÙlV«Š4°õíí­ËåbXõ‚Çã¡îƒÏhµÚû÷ïCºÈçóPwŽŽŽšÍæÙÙy³ìöÔlà®óV«µµµ•J¥ B¢übÖÁPÉ%$®N§ãv»ý~?÷îÝÃ’auu• ÃÓÓÓTgŒºàÑ‚Dó†ùä)úè¥ggg±ÃÇçóÝ»w{wâqšÍæ¿þë¿^]]Õëõããc•Jµ··‡é®ÑhÜÙÙÙÜÜ„h[,ƒÁ`.—;88@+×h4'“ÉL&ƒM4[h»N§ƒ÷*gKœ~¿ÿÅ_pÈ9E¤& þQáíaT÷r‚„&“‰îÓétþæþç+`ó)1¸ù|>í¹‚5BgºfLœi‰ÄÑÑ£úÑÑnËL”L^¹\®^¯' èt̉ôäé Ö~¿¿¿¿OPÎÛ·o‹Å"]*ÖÁĵ°<ùÞ\]]¥ÓiB`Ë”Ëeä9(Eå˜ø°¾ÃÙ‘BÏš×årñÔ±W .@ªƒ ¯¦ Ì9H/üUläNNN¹!`"Y­VD+—p¾½½===U*•Õjukkk8¶Z­ô>°Ñïíí©Tªd2yxxȦ—L(n>ØGGG¹\Îï÷Ëd2ŒÚår9³?v’ø™`„2==Ífß¾}K—Fs¹œÍf£°ÞÝÝ! A°N´M«Õ‚G9#P©Z­ÂB`á ?ßùùy4E™E |h£`}r¹üÁƒR©Ÿ,©žd2™L&766ò‚Áàöö6[\‘§Ž†PˆjµzxxxxxÈ Y¥#çq6@ùFc©T\fŒÅb(HqUäx÷ûý‘Pㇳ³3Z]lvÊåòéé)ê6}Ù6Cïp€ÎO–)vðͯ¯¯Ù67 ø`¬€qÎ.//‘øãÐÉ÷ÎŽÏ">8ZÈ•¯®®€Ôy$Óé4N¥°]ãñ8…@ @{$•JñFV(^¯÷ÇÌd20I£wƒ€ËM<>>þÐÇØÙÙ ãD‘ôÊì‹=Fâ°ÑÞ¾}; Úív,ƒ…{ £*ø ˜µ3{l7 vrQÞg=}÷ú &ø­àáp˜› f­VËÅh·ÛU*éEÉdl‹vraÙ»\c!Ûן~ú‰ï˜Zæv»‰÷¥ðqÓÒñ !èË@fnnn„F£‘¾rzz:/,,¨ÕjÐÉr¹Ìò‡ u™^Œ†"°Á`Àïxúúú:ŸÏ§R)Téî@ì§$‘kJÈ$l0LÐHb"¦‡b3†q’Z­& 5]¨ýG¸GK?!„ß™q¹\Á`Ðï÷ !Î¥@Ïwww˜}C«àêâKÁQ"zÑb±È‹GJB}× IDAT4“Èî_¾| i IT³ÙDÇ Äî‹Ò³6W~ v\ícccð‹!S£#㛜œ\]]Q¶Ar¸-ÐR•ýØC>~ü˜_CJ>Ú|­VûÑG±g›šš²Ùl÷ïßgÚÃî‘oíÁƒn·›c9¯ÊÁ`€! „^¯B _@îät:¹8±jQ*•xÊd2¾–œ¡f³‰³ã¨¶ÂY‚ I×Çá¿öû}öÀµÒé4‘`0Øíváƒ#Äk·Ûà3PŒ„jµš8ß Œrx´`›ØE8ŸÏ‡TUØKÔ‘Jœ¹gkk‹åJ¥R¡y'\]]iQ©TdìLNNÂðûý$ÇBBw¹\Ìßn·›‚èÌÒÒ„ÇJ¥’Ø–F£!“ɰôx<ŒÎ$̤399ÉIæÃc´%ç‡K«j¬1m€¹8±ï¡†þw¯s‡Ðb4ÖÃûæ(ï"H¡z„†Âˆ“¶tnnŽmêÇLPÑüü<2ŠT*ÚˆÊãç?ÿ9‡Ô¸^¯wÿþýd2 XœËå¬Vk0„¥¢ÍÎÑ9ó/Ü—Ë•ËåÀ1C÷z½.—+"§Ä„â%Su@O«ÕJ#/„(•J¬Xïîîz½4[¯‘¥‹Ùx<Ž9²NL8Ü1¥R©ÍfÃó T*1,3EBPƒ#OeÇÌ·‹ÅðúôÓO_½zU*•¦¦¦Ìf3v¦777¿øÅ/ˆ¢åÆB6IäéH@ Ñh|üñÇz½Þår"­®®öz=»Ýwzz:A<>ûì3¯×K“ÎŽÑd2bçÔj5¤ 8Íf“ÏP¡R©XbÃÀ¥ G©üU 4ö ­V Œ×륙­V«ççç¥Réûï¿w»Ý8Ï!l6>!èžâñ8}$ …B···›››|Ët···Hv¡åÔjµÝÝ]–‡ÜÍñxœu\±X¤eUXøì³Ï^¿~ó ´?‚‚ñãDX'—˱tæ—B ÅÛI=V«Eº5 À‹‰p¹\gggÝnÕR8‡<>Bæ¿ååeÌì,K³Ù<>>æ$›L&›ÍL„³ƒ£‚O’»™á‰ÑQ÷ïß_&Я =!ÄÿøÇµµ5F³¿¿¿¼¼l0J¥—±âôôÔï÷SjonnvvvR©:XôkЩ™ÆÜn÷ÙÙ{,@ä¸Õ0‰ä¯µÙl¨Í!w»Ýééi–ؘàâGàÎ=c£€”EÈÿ÷ úß¿>ˆâ~~~Õô­Ýn7›M<­ˆ¡ÉâÉÇW³Z­žœœÀd‡TŽ&%N¿zõ «ŠW¯^ýò—¿$¼ Þ‡ˆöÅ‹©aÂ(Š|>o0Òé4sV­VËd2ôGê,ýxG(Æ—nåôôôøøøÓO?Õh4ø}“îŧâ sh4ì’lGcΩP(çÃ9úöö–a0z82Ê€ïsóÝÞÞ‚3°äîét:V«•™N»Ý& G¸.1ÃáðÕÕ#Ãáðìì [+|r¨°ÕäùaÞç7:>>&u_–···sss‡ƒ}yyér¹¶··‰ÏŸ? ———‘H“,þ¶‘n+(\ø0}>_«Õ©HàkSš™ÙQº-..6›MTB¤?³]T«ÕÜT[˜v<Àï‰<Þôwwwl¼———O:½^ïõzIWGßÄD…ç"žwår™ æC_ ý™!/‘H`לJ¥¼^/EzF>Ÿ÷z½ÓÇÆÆP0 Œ7pžaxet@Ò ã›*ÉŒ¯4JoJ*…BA®$J $~2™ŒôQÐ$lJAíáƒq`ðc0«1˜¢Î¯×ë©TŠeþææ: %¦Í ï^¯¿3kN§Óãñ@Eý»¿û»_ýêW¥R‰la6êìÉéÝn74-à ¨¢‰‡5D°0©Õjoß¾µÛít6ét2›R©|ýúµÉdÂ{Ö\årÙãñàdÉŒn£^¯SÊÞc-ý¯¯s÷x<ÐŒ ¬1èAíâ2ÄÈ´‘'À1`H¿ß甃Dó„ü&onn®¯¯''' v üze(¢*±µç BÊ$«AÑl6].×'Ÿ|"„`µe6›}>žÚ 7€ŒŒutdð^øàHÉd2V‹ÌéÔ´$,å„Ãw¯‘¹ñíímµZe¿ºÝn‡®.•J)°u:L&s8F£«œååeÈE\¬@M&S<ÌÁ(? âúw9ÖH ŒP3+Ñïa·ÀW«‡¼¿ßŸÍfïîî0TÅÃÃT1“““ˆP¸™îÝ»ÇÖSñá$$“Iz\âÝŠR«Ñh»ñ+3Od³Y¬ÚàºË0Ñ™ÂraQßn·™ð0ù³Z­$2rNFbcàiCfff0‹ôèÑÚÚZ»Ý¶Ûí>Ÿ’î¶8{ûññq„N4Ñx°yGÕIyBÖàõzYxÀ\j6›0 Ëå2§ØÌÊ(+A:ýJ¥BK‹×˜Z­fLäMjµZ$9ÀÜ8† !–——ùÒÉØCÇ‹Uç™#œØÂ@dÀ÷åj½^‡8…]B·Û¥P*•¬…ûý~&“¡#Q(~¿û€V«•H$‰$‹Õjµ‰‰‰ÅÅE‰DB2 Æ÷}ôÑââ¢"@#¶Ûíœ7„Ö< &“ cÎ@«Õ‚ qrrø†¼qbb‚Áæ%v@R©´V«±u`ÓÞï÷I´Z­ì±qÁ‚õ‡}Å}mm -¢Ûíf±×n·Q\^^NOOÏÎÎB„ø¡T*766¦¦¦Õ@¤ŽD"[­V+jµ—ÜKÕäóù^¯÷ðáC@´`0øèÑ£r¹ìóùH´á©ÀÜjµâ­Èa¢s¹\BˆÁ`0==MS ‘ÀÀÙ²Ûíevbˆ#ŽIÀÕá¿g¼€Ç†× š:n–BJ¥2“Éà3þ ‰þ«´®(¡À§¦¦ØC !ØhûÇ£B íÑh4ˆ*•ʳgÏxÒŸOÁ£çM¥R:„’ÜÜÜ€áBÕ@CgªÓéxºxÌ€Aqã¡VbÂŽ|Y„WÈŽh®®®ÎÎÎXÏ÷Q©TXŠ€ŠüðÑHÄétF"‚˜·¶¶Òét¿ßO&“˜ álz •J±ÈAsÇ3"_“Ñh¢%™kkk óBÄVˆo/..>úè#6ç‹‹‹ccc777\ç\µZ RáñxPB#\B»Ö B…Bï‹ÖÛd2Á#à{ÄbÆ r<¿ß†µ†/÷úúšØn(42™ Ï>¬ZX€_ã´´´4==NBïõz…;;;…BLG†æR©ôæÍ…BFYÏèõúáp¸»»‹I2ôM0ŒI/—ËÛÛÛ8Òà‰F÷@Zde>¾e, ð.®T*|)lÈ02"•÷‰©8}¤Çãß ²*‹Jnªà÷þú Šû³gÏhÒQfâ§HTt>Ÿ‡½›N§ …D"¡a'¦‡µÞh¡DŒz³Ù„ÃÀÙJ$Rxð’Éä›7oÐ×`ÕÏræ»ï¾C»Á솄ºëÉÉÉË—/…2™looo{{«¯ƒƒšÊ££#¶»S$9¬_¿~ £«Ñhšš pÃn·ãëÄòŠV—"XáÃáÐãñ`G†¦L©TR÷¹´ø'hŽð†…™ƒá_«Õ2ðG$ÁÆýøøX¯×C\¡¡® !&''³ÙìÙÙÙÌÌL­VƒˆŠ‚'†Ì£vR"‘G£Q¿ß¼ð«¯¾ÊårGGGôMÑh4ŸÏ7o¿ý¯’ãããX,†/Л7oÎÏÏiýà6°„ƒ„ñ/m.—kµZpE„:øTAZ¸ l¡`=¡/gnhµZÀ#˜˜û|¾õõu·Û-•J×××á†>~ü©\._[[®A‰Ç5Á``ˆ™˜˜ØßßGwvtt$„À†ÆÑÄÄê<¦ûJ¥‚ã 3%£ aâ ÁIãñ8PŒ"‰p€¡U*U:†`–J¥¸Ý³Ù,"2š=^1  y™L&›ÍÒ‡’Pi=Ò£{`‡A·‘Éd¸áäry<'^fª+N;#  ƒV ßÿ}­Vcì«V«8LŒVÙ',//ƒ´p—J¥p8 îÁr8&È$Nçt: ´ …Bß}÷^¯÷x<±X –g¥RÙÜÜ”H$^¯wssRÍññq¹\^ZZ:88 'ÛÜÜ4 sss¼aFäN§`—ºD"éü<–ÐîˆÃÅs~~þËéèõA`îÀ@‰„ñ™4µYHˆV«eÝÊln³ÙF6¤„ó~üñÇsss¿ùÍo¾üòKFspp@·ÈÎ6lnnF£Ñ@— …ÁÇÏÎÎ>þøãÛÛ[,åôz}§Ó©T*v»æQbªÓéL¥R#É8˜8:Ì`03‡M}6› …BïÉF£177 å¤V«Å]§ÓÑc™Lf±X  °·äVÀKÒápPާ¦¦*• æ‚È+°=AiIGFp%f¹^¯;É^¯G”O&“A»ÈgÂZIAŠ–LtÖX"šBð‹ÃGĶ…EîÓ§O¾bÜx||<99‰ÇîL&ƒ%û(“ÉD±àb¸tM "*ÛÛ[jvN§³Ùlû‚]@ó( à*• Å#9>ܸkkkèepå…™³³³³ººŠ\ìŽU³F£™ššÚßßóAÛ555E>çÒÒî|Âp™îß¿0(„`‹þàÁ¨OŸ>ýÿøZÝT*5??ƒEµZM&“|#­V iÞA‡Ù¢S Q/ƒad¬ßwXe---‘hòN'ŠÒyyyÙï÷G1‡Ð~r¹œR©t¹\èâ‚ıîõzLÙƒÁ€Ëd2Éî \Á£H> û4Ü”è)`(ªT*v•Õ6›Mþêõ:<ȃ‚ "Ú <è‘·À«ÛßßdzR©ÔëuŒ‚ÆÒÒn-ðJag"çeÜ0%àóƒÃ%ÃZ*ÄPÉd²V«/¬F<O"‘hµZÐ ×××+•Êï~÷;ta©TÊåre2Þˆ žPLc———¬XÉa€+D Óé höo„Y§Óñ­5t:=99 X\*•±Óét`e6› [>mpdŸÏǺvùÉÉI0D‡Õn·Ñß–J%•J IØàènmmÕëõééiŽÁÌÌŒT*ÝÝÝŸŸ‡/Î ‰ ¢–H¥R|&ccc‹åèèn>ÃG"‘å§à×dgpxxˆ!­ÓéÄ„ c_ ·ïúú—l<ñA$°x¤-Äãa‚Ä4†“³D"‰D"üUðCè'úý>eT.—ãüsÿþ}XC××׸âÀVâ°µÛí›››H$‚ceeåÕ«Wtý°æææpµdNBqÆxww—Œl>[ÖZ0aôq`ÖétDË:fSÝGGG~¿ŸÎëëk3@Q³ÙŒ7ŸÑhD‡Ü¿þr¹Lësssƒb©_ v§ÄÀAÙxo•ôÿ|}û'Ÿ|ÂØX©TèšÁ:w×jµÉÉIèÏèKqDbÛ‰žS¯×‹Åp8¬ÓéH\ oÞ¼ÁDB«ÕF".áF£q{{;2œñx<¸HÞÝݑ㕕}Ô/~ñ fØP(´¼¼ (É -ö¿Õju||œÕÅb¡ŽÐò!°žP(tHEúý>pŠT*å>ƒ®SÞ þÃp8d¦T* Ò'p8à!´ÙlX­MNNÂV&$A<úÝÝÝãÇgggK¥R¯×[XXˆ÷ûýPõ=¿ÛN|¸<O$¡BxMGLÂÎÄÄÒ_¯×{rr‚ÈP«ÕîííÚ`!k2™xný~ÿÍÍ w¿ß¦Ã~N1.l¸ÙÀyBÈårz(|ƒáÉߥ_I¥R"¨èL™èÁ¾Ñ(âá= ǨÑAÊçó0ŽÃã[.‹v»óÉÖ¡T*Á¼¤¿¦íE¼>;;«V«U*Õýû÷5 âóÏ?g ¹¼¼ «òÑ£Gèc©Ú m#ûôô4Ãççç¬qÀ—H$€æÈè{½ÞÒÒ˯×ËIcp„§#ÓØØ˜Z­fËÒét\.xk(ƒÆÅü^gôŸ5›Mš®R«è ð½A™155Õl6çææ0ô7›ÍxÌñÐQî1×ĆÓÝÝ]<‡¹_(ÀÜ—––¶··'''i™!˜§Ói›ÍöñÇ×ëu"ãY$,,,À€\^^2í÷ûkkk”c”4‡ØÆ{<ž¹¹9ø ‹¸†"ÇN§S«ÕàõÂ…¸Ìùïü¨ñ<˜œœdõòÞ_Dq7™Lt‘­VËjµ²–!ÿó)ÏЊS Ž"¤Å®®®§ÌÎÎò6Ö××a©T*4Æ?ø`±¥Ä´ @0¢A0+©TJðP à2S«Õœ¸_ žÕjåÌÎΦÓi«Õº²²‹Å¸¤kµFCfgg'ŸÏãV±]£Ñ¼yóæàà ÛíþéObìc¸ÁÎb&“½- F£ =ÔÕÕHP F³µµ…D™xt’•Òé´T*ÕjµñxÜçó‘ô2>>ŽÞR¡PÀv5™L‘³ äç £ £Ý媘››ãæs¹\ÙlV­Vö1Œƒw©ô\Þìçr6‡ÃAsJ)Ÿ˜˜ A™œœ„[É€ã 4çææ°ýÂîèèĬÛíru»]ÜÔj5®èEѾÆ~øþB4=88 3–BñêÕ+XȽ^ý<œ,BÁÊnnnFÉÝüÙF£A, „±0£ýÎáDâ‡}˜Ñh¤nЮ¹Ýîÿ±üýókbb‚ñž;]-Fth ÌÞÛÛà.Ng2™d2 Wa||üàà€• ~¿H‡U¾ÉdúãÿþpzzªÓéÒéôÎÎi§§§‰D§š££#<íг”ËåÃÃC²ÛáÆ±ÖcÌÜÝÝ…ç#„ šÿ‰_q¥R9>>†óάÊìIàK³Ùôûý;H¼YhÀYÙá÷ Ä ¹\Î=¨\.§'EØE‹'‘Hfff@½XÁ !d2YµZ%S»P(àHåt:±Ü™žž–ÉdJ¥rllìÅ‹t.;;; ét:ŸÏg2™ããcJm*•BÊÈç ±:®$“É~üñÇ‘™êøøøÖÖp z1”·…B²Ÿ0×d"‘ÀޏX,ÂL 5Æ.©R©, \{étñN£ÑØÚÚÂŽÀEk¥RÙßß—J¥ý>|¸²²Ân3´Z-äòZ­öòò2 MNNÂ|%t ¹²V«½»»ë÷ûù|^£Ñ,//S¦1%IãF?\ÂM&‹zŽ7òHbšÙÆ·Z-"®ad2#?NÌÕj5ÉJåryöÝétâñ8/´r¹Hº7©â¨ù˜í äH$’b±‘f!#0ŽæÄH“ €qccc„ªãw4 HŸžžæóù`0xyyI\b8~õêD–[@€½4Ó0¢µµ5v˜Ïž=£þ.,,ðI2ךL&ÿóósú-¾dìº&&&ºÝn«Õb!‡_”<³Ù\©Tpí<ðF¾¹¹áãÙAćÔ.NC`…$)€Çêææ†ïúṘ»ß‰íºV«ÁÁÇ„™ 'îóÛšÍæôô4¿ÝÍÍ -–gPoÙÌ—Ëe\1¦§§3™Ì›7o¬VëÎÎ( ݘ LLL`˜W•ë?üàp8Òé4ss­V[[[ƒj³Ùü~ÿþð‡r¹Üjµ@Su:ÛíŽD"$r « Àè|ìÀ˜ð†—––M±ììH$‚qôz=~ÎlòoooGjpÞX£Ñ ¦·÷REÿß×QÜ¡€Ì`ê†:¤‹>ƒÁ0ò˜–J¥SSSpZGEó“ÝÝ]<†°\__ŸÍf³ËËËr¹üÉ“'âèñàÁƒ—/_:Nd‡„L¢ê–J¥<@—ÏLO·´´0½ººªV«ÏÏÏÙ)ñPñäŒä‘Õj•£ƒËÃ)^©BƒÁ°²²Â¾‹\Mj àr.—ƒ½ÃoÍÉ@ R©È{r8ùà·$“I6àr±+.•J±X #‡d2yss³··‡Eu¡PÀêúúp©ÓélnnâbxqqŸ áa#žáÝK¯×‡ÃaÈÈG,Ëììl"‘ÀáñççŸN¡„£‚¯@‡×ë]ZZ²Z­?þø#¶âìd2ÙÈ™T ò‰Ôj5Ò!´cZ­vjjêì쌂®Õj¸].†£ªw‘:hšhHÇÇÇAT(|¸zá¯yxxh·Û@"‘Blmm5 !D¥RyûöíÊÊJ­Vc¯°±±¡T*ËåòÖÖ|Ø™ÀÊûûûÄ@ú|>…Bqxxxyy)„@Ûi±XNOO···á5¾xñ‚ga8žžžB„‡§1ò ârÅSZ.—{½^@KR/ØÀÛl¶ßÿþ÷W*• ¢V è-x^T*Õîî.0œ¢‘ïóÆO9HB¥R×ñ­ý IDATIùÆ…›¢Éÿõ‹7Ç£Ñhòù*‹^¯÷üüœE_¯×ÃzH.—#Ú ? ¦Ãáá!>£Íf“†ºP(àŽ’ÉdR©d!°²^¯ç÷ûårùíí-ù0pLá±§ÅBc,úw¥RI¾óÚÚ2NV\ C•J…ÎÁ: [«ÕÊCQ(4Íööö§Ÿ~Úl6år9ú#™LF¦§H­V£ÚEEh2™¾úê«^¯vyyÉÐìõz————‰ »¸¸ðù|БAº—––ìv;­T*ûÆ•ëP.—Ós!‚Á ݤÁ`€ÏÃZ ñJ«Õ߇©×ëYGF¢'ϬÕjBFF.ï‹‹ žúáõAw‹ÅB¹aÎâÃEANßQ,onnìv;¶ThØWVVT*Õññ10…ßï÷ù|@à?ÿó?‘ ¢?R( æÝn÷áǽ^ïõë׈Y.//Iól0"B8Nàl‹ÅBéÄÄÄÞÞD1ªÀúúú¿üË¿ðM›ÀLJ“›Éd0°¤BÀÔh4¼ü‰à‡ŸŸSïhäq¹ëõzxõ !Úív(B`_CÏêLa2™ Z"€K‡­J&“aQ)„øì³ÏH,’H$—Ÿ|òI<ŸŸŸG ër¹ÎÏÏñ°F£¥R L~~¾9,ˆP(öZ*•?~œËåB¡ÐȘ +Jh”8‚ZàžõZ±xgêp8@Ÿƒ»Ñ³Ç&,Pi½°×ëÝÞÞ¦¼¯FÍãñìîîBÁ¢líîîBéÃg”¬;ƒÁ€‹NRÜŽè§`"Rp¯¯¯þH¤«Q*•?v:oß¾±X__G²ÀNžpzz:‰C±v¹\WWWÀ,ÇÇÇäƒ̠®„-:333>>~xx(•JM&S0´X,6›íÓO?½ººòx<(û¸E¦¦¦À²žd2ùsN§mÄÄÄ„L&Ó@­VÃC…Ǧ/¤©F£AƉ%gRïååe 9Î3ãj4‹ÅŸæèÅÅnhhµý‘ÑÁH´‰F£^¯—/â×€V«5ôæÄËH¥RŒF Ãéé)_Ùp8üøã{½”bÔLÁ`p0x½^³ÙÇ­V+8ýD¥R P< ±ü€óîÄùg²™™™!$ëCx}Å]*•h€¶‚l-| 8Up6$‰Åb!ɺÑhÆ/¾øbt²qóÉçó÷îÝÃ×) ýã?þ#x¸ë}ÿý÷Á`wæÑü>>>Þëõ{Ε••v»Í¹³³s~~>11át:ÿöoÿö÷¿ÿ½×ëD"Bà~æzDÞä™! Ån:uBb1¼•J¥ÌÚ8„°c¸£b£H£J¥ŠÇãpÅX…A{¯Õj0²YK ïB…qþêê*“Éìïï …Bñ»ßý®^¯c6777==H$ÎÎΰ.q8———ìÓHŒ†9€¾Ýn ¸Þ ’>ŸSl’Eñ¶X,‡‡‡|Â(ãÑ º\®v»ýöíÛf³ép8بCìB°<`Dk4ù|Þãñ@‚Êf³ …‚%œ9d¼gz7!éwÜ8„X­VÇ*Âý'—ËÓé´Çãyòäɯ~õ«l6;99‰I¿/ºs8àÇÇÇÁ`p~~>‘HàfDZBc-177—ÏçÉ›¥öÁÛ¹»»ÓétûûûûûûH“ø*N'I"¹õÙ^ûIËìðè"Aó ÅÌÌ —÷øøøÒÒ«fÖƒÁ ?þœŒ¢ÓéÁ8â»Æ@Ñëõ& «ÕšËå帆ƒŽ ¬ý%I2™„Ã’Þ*3÷è2Ã: .Ÿ€ÅbõòåK©Têp8H3¦![êLJÉùùy,czÞÝÝ=??ߨØ`Æ "—Ëmmmqy½ÞL&s~~N,ú‰ùùyžèápøý÷ßãˆÉd2‘ûÆOßÛÛk6›Åb‘ƒa0ØŠ“ßÐl6é½h.1»†“Êdˆ7Ùû(¢ÿÍëƒ`Ë8ì@Ûí6Á8ÞЬB¸ÿ÷÷÷onnØËÇãqL*„ÏŠÅ"ùMûûûF£ë±B¡À¹I&“Åbq{{¨ññq²êÁ7vvvP¥^^^ò„Äb1ø¹ÏŸ?CÄ«ðdqqÑf³¡FZ6ŸÏ7ò’F»yÃ……ΖV«ÅØ‹†ˆÓ‰ýÎõõ5‰tü[N9ö¬—[­V2™Ä^cggÐ?™L’ÃDZxn”J¥´‚ÈRZ­–R©<>>Îd2‚ð“ ;÷pŒú¸A›°ØÄ˜Ù·V«Íår8©AÇæ·^¯Cg„EŠk°L*•B³¾¾~ïÞ=­V»´´„#1ˆùùyìÕfffp­Q©T;;;jU*+G€Ýééiò)š,Âá0Ëp³Ù шü6FõÍ›7ÓÓÓ6›íüü|8F"X=d`ž4 rÞ ¢0¤±ˆÇã…BÞüæææää?žÜŽÈèXý]^^ò FøB­VË¿‚m‚+Ée`åÅb‘†ƒÏŸè+¦gj@s8ˆðeÙBÁ¦çnàžy Y­Öx<¾²²R*•þâ/þ‚Î`||Üï÷COt»Ýáp¸X,NNNnllàEÑh4NOO'&&ž>}ÊN‹¼Fõ6› ¥1ö¨årù3*<…BA0$Šããc8ͤÌCGfâgY¥×ëáÈ!d#w›#]©TR© ‚J¥B„œL&ÃÛ罿>ˆâ>777??¯Ñhðã¥[Á’B.°×ë}öìÙáá!žÎ范Á \àÙÙYœ&“)‹áÍ—ê÷û¡u{<»Ý'ruuË-ŸÏÇÅ G§Ó!|£×ëÙl¶‡B üì³ÏªÕj  C•>žjrFT–xXmzâ‰ó%F °Ö0«ƒ‡°–§Ž½¨Åíí­N§óûý@ Rf(ÖàõÄ)àp€_ ÍfÃädiiijjjrr§udA´„_}õÌüü•J%Ž+R©Æ=)½ …BXW..."£ÅY Ñæââb§Ó9;;³Ùl‹‹‹ñx.ŸÃÒÒÒ‹/ŒFãÌÌ ß5 ½R©¤×ë1:¶X,N§\.CzÞe~~ÍQñ²Ùl`w8×sÝr+CÜÄqé/5Žý œ* Êéééîî.Áxûûû OñØzóæ ¶tÖL 333BLʰRà{„)@n Dápøââbä2Ö‰ I­Vçóù‹‹‹‘w?õ 0T&«Õ XÜëõpO±a¾$` ë]䈌¨zŒÈáp_{$l±X |îa¶v»}¤NBcÁ¹ñ.ð8t/¥RÉI&ɧ3:gt×*•Šå6Ý7ä|T*’fÜ¥®®®’É$Lf5:ñÿ÷¿¸¸Èårétrú»z½þüùsöÌ€WÕj5‹Á ¥gzë÷û8¹& ¢·©?l¿xôz=Ú1–X´e´Gpc´Zm(b/m·ÛÁlßûëƒ(ãiNÓ‘ËåàùB¹…ç@£šJ¥<Ïõõõþþ>€i"‘ ß§Ûíæóy¸€dãñs¹\4åAŠÅb^¯—¶×ë1.,,`]âp8h ©¡,N›ÍæË—/?þøc_vq'''‘H„§zkk‹'êää„q!Š 8àdP C.—ã­²Ÿ¤+¤í²X,` ¬O9Ü^¯°‚øl‰DÂnªßï[,‰DR.—N' >ˆT©Ú¬’p¶ÛÛÛ‹F£(ÅÙa°—Ò–Ëåp8\­VaÖ !à¡$Ë&“É,ð¨xrrBjòü7¸Ã …Âwß}Ç&˜/xP ªáìì, j4¿2ú@>L›õz=ˆ0-ØN³ÙÜÝÝåΈÇã\ÒBm¶€çççP0à d˜H$ E<åtôú Šû½{÷pà‰”´VäxAР¡#ãIn6›‰$ F"‘©©©P(T­V§§§‰Kg dó633ƒ’ŒMìˆä„ Û`0<{ö òì/ùKb?WVVÈ–ËåÇÂÂ6d†´b\s™Äõz=]  Îqò+l6:,½^¡ Zg"‘@–rrrË àƒŽc0æ3¨ŸÀ¨Jôb(åØí@Å\[£Ñ|ñÅø(¨T*Ìí ‚ `™P(¼^/4›Í‡‘¶6ƒÁ ›ÍNMM-..îîî¢â `‰8èÙ³g0÷yÛ\ZÀ;Ø@Ò©©ÕêÃÃC™LQ*•˜!€ªáüÀ·S«Õ=„HpSpzªT*‹‹‹,Qñá<1Æ]\\€Þp£šÂ¿Åòinnnss‰¬ÛíÎåroÞ¼aùÑ)é¦dÎáè]­V‘D±¾S*•`qý~"9q¾V«õáǸ5›Íµµµíím…BåË`0ðù|Íf3‹q÷#Ãa9ÌgEèÕØØ.]F£‘”Ûí Æ5Cz||à}´1™LÀqÜÖN'ƒ\…B!˜õóóó‰N¦êññq§ÓÉÜI–©D"aq‹ê!d0,bPœÀøBP266–Ïçý~¿Ëåâ–ŠD"¸,€„mss&;n\XH!"m4°eúý~4½¾¾öx88@oF1„kµZ‡Ããñs,r¹\µZÅu„v,®§ŒÉB˜^&“‰­p0‹_<hÛ:, ¢ Z­R-’?¥R -šrÍ4࿲ÛÛ[Þ °>—lóËå2´H¦ 4kIbEáÒð„!ºÝ.ŸžL&;;;E¹ÒÅc „€°/—Ë_½zsuuu}}ÍßÍfA«é:ÎJ¥‚@Lƒ–‡¢ …”y‰ÜŒËËK$‚¨@H!ƒ’4-“Éøe±ÀåýãIÀýAw‰¿G±X”Ëå4°0÷G”Äú») p¢±èAK9Æ`kÈ”Øæ€áKƒÅ w0ôq¸¹¹A¾„Ã~"‘à—EŽÄFwä¦Y©TFj& ài¦ÊÖA&“åóy"/°ù”H$'¾^¯Gi#…Üápà) vw}}Ýl6C¡F£)‹:Îd2±çäEí£Í§ŠÑ‰£î&KŽ#JV‘<_4ãHI8~ ÙùÆÁC*øé§Ÿd2£qf‘H_â'Ÿ|¿¬Ûín4¹\ŽÉžwKÄR·ÛÕét‰Dê dPÁh4Šh9‰äóùÁ`€á(ÇžC|iÊå²B¡8??‡óíŽ<¿x.—#c$$¿ DЖð% f{{û=–ÓÑëƒ(îSSS333ô)¨™Etß™‹ãp8!Ð)+•Ê‹‹ Ò—/_jµZB—0äŒÅbcccív{kk "”F£yûö-¹õgggtÁ8ϰ„í%±e||œt®áp¨×ë_½z5==Mx¦}Pw 5t¤çä}«T*pz½Žÿb>Ÿ¿»»3 çççP¶Ù1b³Å¨ÎŒ^*•bM«Ëåâô›L&ŸÏG«833£Õjƒv(ívn¥‚m0äóy‰D2==ÜtiiÉçóÁÏÛØØ`)“ɘ z`Ov:ŒXð›†B¡h4ʲî7¿ù ®„d¡]^^þðÃÔz¨)X3¦R©B¡à÷ûß¼y“Édxz¡06›Íh4j6›Ûíöññ1ÛBFÖÎÐ=á3pH€•úý~©Tê÷û„CÑ,ŸŸŸcyư vssS¯×-‹N§‹D"ð™±?~Ìv—Í n±Œw××פC`ˆ1½Óé¼ÿ~ `ÅŠîéþýûN§“AóÑ£Gü^læµZ-ª`üœQ  ée󿺺Úét Ks9¡³¿ººâÉd2𠯮®êõúÜc' 3¶8ÜM˜!t÷làçpÑÆb1¸öì)ÇÀG"ák–Éd §V*ÐQ3ü…œêÁ»|öf³Éžæ T*¹\.ú@m¥R Ÿ$ žžÂŽƒ9???==Md6 £°’Óé Ýn—<H 7¡PˆoÙl6OOOså˜ÍæÛÛ[â}01u`¢B¯Ëzàââ‚ÕÝØØVMùvÈ’D…ÇÜÏEŽˆvžÉd²^¯§Óé÷WMÿüú Š;É n ióùáK2 ÿ‹½3ûjó¾óÿ£!hCBH ¡}a»íرØm’INÛÓÎtîçbþ™«^õÌœÓË9íL¦iÒű/ؘ}G$´ I h_àwñjÔ™óûâ‹á¢§iÄó|¿Ÿåý~½ÇÆÆFFF€Åb™eÇbµZççç! á9<==Å‚ÁkÉTîîÝ»$MMM¹\®@ 011a0"‘ˆV«õûý¬×=OµZ‰D wvv‚ÊãêÖëõ(.º»»ñ‘  rW©TºÝnÈ«íXWž Ä^år™±&¬1P———GGGè±5µM¼lbA@(Y¯×µZ-x¦ŠÍf³««ëã?šÆ Á¾—(dÈèâ!G£Ñ‡¢%šš>??çîèè°Ûí¸aðšÍæ»wï"Xæ‹ùU¹\¾sçÀkÖÑØ¸§¦¦¨Î\.âè;wî0DÆêÙh4`v^]]©T*…B*ÙívCE¦JÂìN—­V«9اµC¬¬V+Ÿ¿N§ƒÜÒßߌ ÕÇÞÞ¼‹‹ ((r¹<›ÍƒA ‡‹‹‹lêb±ƒ/lAÕj‚ »ß››–ù|Þf³1ÝâtãÿÂïŠv äçÍÍÍüü|¥R9??g¥‰sJ$‘îf0 -Ðßßïv»{{{A°X,H¶ûûû¡ÿã¹ëééá_Äšatt”5Cm:Ej|v³`'¼^/ÎLN=šìBLù  ËårÌ\r¹¼££ÃjµMÄÊ ¬ ".3»ÝÃÒëõÆb±hµZNgoo/?àææ&ZÉV«¶¬Ùl>}úŽéññq(‚Âßv‡‚ˆܳý6 ‚pss£Ñh°_€Kc@D †õýýý(‘¸hE"Q"‘`qÂ²Š Á`ÀÖ„ý­Ñh0wB¦×ë™ôRòK¥R—ËõžTîï…‰ ýY>ŸÇブé08|dô\XH æ&“Ið¶r¹ü£>ÚØØ@Sˆ±åèèèã?Öëõdèíìì€#A”:J>Ÿ‡Ãø3‰Ä;wps™ßÜÜ@…?Žé<‰ ùº¼¼lëCr åóy|XíA¨q[#‡˜(—Ë£Ñ(E:æUŠ/Z•J:å뜱ԿWWWdfÂ4™L†;ƒY¦4°ËËËü—x<Ž›_©TârÒét<Ö××_ìííY­VF·Õj•S§ÓÉ?œP±‹‹‹?üðàà@¥R±¤æÄR©´³³Cª7˜hˆßä€k6›tKmÒ=2ÜypfÈ{‹Åb‡ƒÂb±°EH$ß}÷Ý£GÐêÔE©Öfþ°Å$566vqqAßF±S1ÆÔååe£ÑHXOÿÆÆî,3©TJ©T"«c±ÎÎNˆ1všÍ&¸±µµ5úœh™L†¼½¥¥%‡ÃÁ/"M¡Py.§6·-Ü®V«z½^,SƒÃ ejÔÕÕe·Û×××¹$2™L>Ÿ§ €Å‚4…,0 ;Ø,ñ²4â{`/MÖ(‚fî`l^]]ÍÎÎb㛬T*ãããx•U*U&“!%cddäñãÇ@%///ˆÅb›ÍƇO9’N§ûûû±Â‰ÅbÀî×××´Ý´AgggtZñx<Ãmf¤Cò5€ÏÃÃC°  Ûo¾h¿|ùAõz(P?m‰*°tÌ<“0ÚRȶü}øz/¾‡Ãì½6ÍãÍ÷ü{̨ £–——ÛˆŒP(¢R©`s DÑétvttˆÃŠê:û4==µZ­ggg‡‡‡ccc‚ €}Â~ttt~~îv»K¥R­V«T*ûûû˜ýjµZµZÝØØ@ñ‰E@„vGR>=fÁì¸Ö××ïܹS(öööfggwwwinr¹œÏç£È‚oE1‹N£`W­VøE#¯o4 »Pô¶a~~žƒÏn·“ÇmµZ5 Ê%b+´Z- µZ=11ÑÛÛûòåKJc¿ßè‘ ×­Ïç~õêØˆ`mE)Bò““3''',ZÚ)8ŒÆÆÆ`i`M¨V«•J…XÇ®®.¤°ç@.cÈ¢‘Å+ IDATÛ ƒÈi n”¬D—pæjµÚÞÞ^¤GäU …µµ5¬à˜øjµšÅbAéÀÓÈÅÉ‚}øÒÒ‚¶}>\‡ÃA6ˆÃáÀOK“Í.„\£ÑøÓŸþ´„ºjgÆn8fP^ŒŽŽ_Õh4Xh›L¦¾¾>î06äN§“Ÿ+1Ajµºð ¹Q 7'‰¡¡¡r¹L¯ÃÇK-ò>|½c$¢T^¼TœJz½p6>&Ç355ÕÓÓsxx(•J‰ã²Ùl6› © öh«Õj6›ÙuÌÎÎÁlÇ`0Œ!ÿ šÀ`b2™\.m/äaª “É488˜Íf§§§QPåóù?üP¡P°Yª‡ˆ'Œ1´L&ÃnJ$¬^¯K_Üœ ©TЬ f÷¨Vx=x¥R),ÞLæËä‘Å~yy©Óé´Z- ÜØ”04ø‡ð‘’º‘@ÛüìêØØÞK›ÍÆÉb±˜Íæ¾¾>æ'„•K¥R‡Ãáp8¨ ?øàƒf³ …ÅÚôô4ZÕžžÌPÅbÑápàSŸ˜˜`ÖIÐ d°bƒ±84h·øøY˜¡÷ôô R¿«ÕjRF@° ez£ÑhRâŽÑh4/^¼ 2E÷†M€ÅbáMæì€œÎÙ!2÷“Íf»uëEÇc6›±äŒ÷öö²À*e±X†††Q¸Âƒ£ý‚¿/2›˜Ôd2~¢›››ããc"*•ŠÅb1™L”¨ßQ71js¹\ŒÈùó˜™Ýn7¶#H5À^ØÓðgA`ç²z"N@–@‡c||œË¸§§‡4®ññqFCíy²ŸÏЉ“N§óûý2™L©TêtºÅÅÅ£££t:Í ñ寯F*•Òëõ@TÐ…BaeeE£ÑpÙ@÷åªæ¬÷x”^¯'¢¯¯“CmlŸx&ˆr„y€–‰pàf³‰WƒÚá{¾?5‚}š FX Qú¢ÂJ&“@€ºgŸßI©TŠ¢„Ò¸=‘XXX@3öîÝ»õõu@ üB×××ÏÎÎÐÅžD_‰d{{›û E&“á“\[[#w{ss3ŸÏ#¾J¥WWW‰D"ŸÏf³Y£è#Ab€‡Ø®ÕjA6DÃF0zvHÁ`ð‡<<ìëë³Z­0Œ:;;[­Æ­­­½½=zHqxàA2ÊäQFuÇxüüÚa~d°!§ªÆ6I˜\àf³i·ÛFcµZ¢ða“vuu¥×ëÍf3€þþ~APm¶mŠ8l1Ž÷õõQ‰ðãÐkŸžž ê¯×ËŠmF8ƈ6úùÞÞ^GG‡ßï—H$¼öÝÝÝGGG*•* ‚–”ÉdOž‰Í9#A‰D’ÉdÀ‡ña2ćƒ …àJýà_ïÅáN~ MÐõõµÑhC8<L£Ñx½^»ÝÎl‡o©££ƒÕ¨ÝnÇìÓÕÕÅ«ÈD•1‚Ùlv8l®är¹ÝnÇ6<<Œ Åápp (lµZ ÷ Áêtºl6Ë¿—¥ßèè(OXÁÛyº³³S©TÀ@"<·ÙÛÛËz–×3aàÐ¥RéÔÔQ›ÍÆRÔï÷×ëõ®®®ééiÇB‡‘Ëõõ5¿F£ãU¡P0 ŒÑ ÄÀÒ‚AX,N'>R“ÉÄfž]ú<¶M<¨TëH¹Ø™ÍfpÄ$ÆhµZ†'pnA‰Dü.AÀë‡×ldd„J…“hl½J¥iP­V³Ûí2™¬X,Úl6L@ƒƒƒv»=›ÍÂeXzÿþ}³ÙÌ‹vrr‚¹÷ölÑh´P(Ð+ ‚@IÑÝÝ­ÓéØKsíÁ*@¡Hz .q"r¹ÎÁ`×jµsxÇÍfsWW†/«ÕÊbÉd2µgeÝÝ݉-&i °Nù/pU*®:‘HÄbssó=Pÿúõ^î(š9ÙÙ˜qŽÓBJ"ê¡Z­²%1Ù`0<{ö ÛT,B0iƒÁ #òZ­†Î¤¯¯hœ Ùl6‰P¾¡4XÈC™Ïç±hK$’d2i±XȪKýÚÚqÉD=ÐŽ±C§æÅ{E@` FÃèÑ7Å)m)^\¤Älö±½a×$™D"‘`©§èc— …8ˆqaà*, D% H°Ë)y ….MèÚÚ]•J¦±X,Æãq™Lv}}½¼¼\¯×y&.— # gS$aDÓl6ùÄA@Ïçi§€´ˆD¢ÎÎÎx<Ž#)•Jѹ#­aAo°ÍqjENÜ ¼Él8蓨0 ÎcxÂÇÈÚ¹P(à…a²§T*ÙšÀ)ãÓN&“ÜÇ[[[2™¬Ñh@âíêêZ\\djŒ`_£Ñ¬®®®¬¬(•J¸¸ô:¨5p-íííQÀd܈̟¸¢X,öÝwß!,Q(Á`Ô@È'Èÿ%‰Õj=:::< $¸»”-€Dfggûúú666*_\\x½Þ››nxðÜ Á×FÍ|uÍëׯ!K`áxÚÛÛ#* hóh^c̾tòÐp¢ÁH!Û…wÉAWW~Bœ̦ÔjµÕjSG¹Á¬F¡PtvvÚív>(ÆœwýýýlÀ'Pâ$šãüü'ý&,Äm©°¬¬¬ i'DLØÑÑÑØØBº››<2Hì_¿~Mõ÷úõkœî*•*2›:::¶Ãx—DŽX,&‰ ܦR)bÞ°zÑ=@œïêê¢Ð‰D"‘ˆ#5“ÉàÒä›dV@ÃòŠÇo-§ ó@ìþÃÃÃèy†††Ìf3x°r¹8p¹\áe1¨Õj?úè#ˆ´‰ OhJ¨£™h“ž €Ûäøø¸ËåŠÇãh"[­Öåå%rò««+dÁ‰D¢^¯·™£Œ¶ySÁT«Uˆ˜lÅ™†) –“:/‡)éóÊLAáÙ‚9Œ˜Ë8•Já‹Å›››|V‚ E΀ˆ#áÆm^1„DÀ”·t™@q#‘þRÄ`Ð2ð-ò‘R5·OµZ}çÎZ­Æ‚„šlbb‚Ébжî ò¥ÃáTÉáŽ1J„ÎÎNÎ}Œxmœ}sgg'y¹\Žaðøø$|&NÄNÐð)…†&“Ér¹ÜÑÑÑ|¤ ‚ðž ¡¹¢±Gú|>~`Z¹Ø}>߃êõ:Ën¥R‰;£§§ghhˆÜçó ªÕêýýý[·nµ‰¬‡cËårÑÀ:N:2Fó*• j«L&œœÜÞÞ¦E'‘H&''y’Ìf³Ïç#‡L*•Öj5"lè$P\Á³q„T’H\°·pZ,€j4ÜLˆX–Âÿåå%ŠøV«ÅŠ˜^ž;l2ï ?Zww÷ìì,\¨Š<‹œ_F8§¼^/K*›Í6==-•J9³t:]¡P˜ššb§g6›AfJ¥ÒÇ'“Iœ\HtœN§ •JÅívs"%MôžF£áóù Cww·×ë- B`ët:ƒÁ€~Ôb±Adc4Ëå²ÑhdÙÐÑÑÑÙÙIÕìp8ØdС3Éee±Xº»»y ëõ:ÚPðì]êõúööv(BŸƒáþôôtwwó ÂÀjÜd(»¨Ó+• V ÏØÖûúúÜn7ŽññqB£ü~?ŒN§CjÉ]‰D¸³Ç¤ÎeÌE ‚ ¥ítåðE«n±XŠÅb[éQ,-‹N§Ã³2O&“¡$æiáFÊ%“É2eC)Íø[*•âðd¤ךâ])µˆÉdj{ú ÕÃôô484ZÉdÒd2¥R©ÃÃÃ`0F3™Ìññ1Ñêç5M±XÜÙÙA’ þ>Ë% ’U@ØÀõõ5+\TL•J…û³ÙÌÜæöíÛFãêꊙ$Ü*8|çù|^¡Pæ¤s"/»ú‹600@ñ,žÏ YQoo¯\._]]ýáNÓ¿}½‡»R©„…FÙŒAu`)ÇV„ñ+¼FÚCT´]­VëÛo¿¥ÆO&“h (WQSmnn&“I·Û}|| ï÷àà€y%Âm£Ñ¸¾¾Žb]"‘¬¯¯ƒ  ‡ÃÑh”¾½è»t:Mª´/`¿L´¯®®ºººÀŸ‘‚­”Þ ó4%ÿ 6°±XÞ"ù‡ÃX 1A¹£³!F¯ZÌMlÿ¡P¾ñÿŠD"†0‘Hdgg‡ñƒ¥R‰øæL$a¸‹Åðв.&B¡U¯×E"Q,+—ËÈcå\\\FŠGø!ÏŸ?g‡L¶c|Cl €Û˜¬Óé˜àãéeUH!Ï€»Ñh´ÉÅb‘R ÕjY­VL ­V *—+ÄAÛ24ÇǪŠ"”ÝàÁÁÁ«W¯úúú”JåÖÖ _(Â¥•H$B¡d!ê\ž:Š÷ƒƒƒ££#íF!•JuwwÇb±·oß&‰ÕÕUh—™Lf:>88@€˜[Ó««+Œ‚ ¸"û)g2™,—Ë aàgqñ ⛤GL&“,iëõ:ÿ‰J C/O8? bYD/€˜´Z-"^½áááf³ét: Êèîî…]©Tè9...è,‹Åb£Ñ˜˜˜€®3;; ›‰]n€øLö:::ÚÝ9Oöòf³‰]™ôGFCÕÏX-%G M6›M*•®¯¯ÿp§éß¾Þ ‡*y烃ƒt©^¯7‘H4ÙÙÙÞÞ^|%Øô™'üèG?úñ‹ÅàLùý~ìõH2Ôj5Ã„ŽŽ­V{ÿþýF£133ƒ@ ëG4‹Å>Ÿoww7²—H$HYNNN`Ä3p»Ý±XluuU¥RÍÎÎîïï‡Ãá™™¥RIy^©T ºÀQ…CJÄv|‚ N`ôLMD[M†™ÉdÂA{zsxx˜ ‹¢Œ™¡¡¡ÍÍÍb±ˆvŸwOOÏêêªÛíæ‚$™Å‹Ûíöz½»»»àÈ95 >|xpp T*'&&fffnݺuuuõá‡"þEtñóŸÿ¾|2™¼{÷®V«ýÃþÉd0+XxÙÙÙyçÎx<V ÛÛÛ.— d•ßïõêU(šœœ¤q»ÝV«5‘Hd2®òžÈJìééA³˜L&!#îíí¹\.6¨ Y8|>_¹\ƧCÏçv»u:Ý«W¯šÍ¦Ãá€S‡/// {×ññ±Åb±ÙlÝÝÝ>dÄLó400066ÆJ'äÚÚÚǹ=z”Ïçß½{766†q¬X,¢/„Ìóúõk>LŽ?¢/..HžÛÝÝå×tppP.—ý~{a0šÍf£ÑÀЯÓél6ÛÑÑQ2™œ™™a^¤×ë¹P{zzæççñR’v¼øìì «:Tž4¬ÿ&“éüü<‘HX­V¸Oܲ;;;l³X-⼸¸àg8æ£5•Ðr¹ìt:m6Ûo~ó|d8<Àl´á̰}—£ŽŸ˜˜ ëüƒ>€:9<<œN§µZíÜÜœÅbyñâÅÊÊÊôô4B©{÷îa½¾uëV£Ñx÷îN×¶)R·Á`  gC`¶páonn8åÑ)4<_7S,ÓÓÓ^¯wkkËl6OOOÿÛ¿ýÛz þõ뽨ÜÝn÷ÅÅ…Ãá8;; ‡Ã¨"‘òÒZ­vuuÅË688¨R©vwwÙà_]]±–1»»»ÈfS©”T*íïïßÝÝ­V«v»™Àðð0á“HøU±åïîîf^A²Ýææ&Œ¼Å¼©TŠif À Õ`00†ã$*•J^¯W¥RŒg½ˆb”^¯G½®×ë>F"&Å (8ƒA´14CCC‰D¢Õj!àÃ¥×ëÏÎÎÎÎΰãC‡BÃ|Ÿ2 8äÂFNNNR©”Ëåâ]}÷îÃá`Kl·ÛƒÁàÂÂBGG‡Ëåzöìºu6ÆÐÐ 8Êd²@  …œN§D"yõê•Á`‰722¢V«Áþô÷÷¿}û–€…³³3°±ˆˆÔj5«”V«u||LRêCªc†rô¯®®–ã&§ C ÁþÙápÐbÁž„3«R© gDõßÓÓƒÂ1 ÀFFOOO1Ç=yò$ø*KòÚTÅÑÑQòZÇÆÆr¹\(r»Ý———»»»Xx0LT*•W¯^étºýýý¯¿þšM>IÓ‘¦ƒA©TŠe§ 8r°zü-íAN:¼————°eøq, Od‘ð'0þà‰c«­®ö´4¬‹jµÚèè(m Öeºt“ìuÚ¹\ÎZžV›t³D"ÞæA•Je·Û™ynmm]^^ Ñàú~÷î]:‹Ç㇇‡ýýýÙl¶^¯OLLõÁâ'N …™™™Z­¶³³c·Û///÷÷÷{{{‰ôaLÍfcccqq¨øÑÑÎÛvP Óœ",E1!÷öö:Î6C›O£ÑÀ>Öl6ôµg¤oÞ¼ùAÔ¿~½‡ûôô4k\šXöñC#ö2­V+‹q± ‚ð_ÿõ_­VËï÷¯¬¬``»¾¾~ùòeww÷ùù9¤'§Ó¹¸¸‹Å¦¦¦`jÆh4úúõk\Ž0†êmÃXH• Œ¼ zN÷§?ýéææÆãñœœœlmmÅãñ6þ”ߥ¥%]±XŒÅÚáá!LÇd2‹Å €…B!˜sT*™2¸Oý~?ÕÙÀÀcV€éì% ¤û¶mÚåraraƒ®÷¼\.7~¿¿¯¯o||\©T~÷Ýw0U¤R)‹280¸HØ+Šh4 \îºã@ °¸¸h±X’Éä›7oòù>ÆÌB¸ÒÀÀ’DlРA ™ïòò²=«yñâÕz àîQ*•nnn"aÌår‹‹‹¸d;:: ƒÑhÚ•H$Äbñ'Ÿ|ÂÀšZU,CìêêšíééA;>>ÎØ³Ù„¥!Âìì,Cðp™LF"‘PÅ£PÚÞÞFBžÏçK¥’Ãá¨ÕjÁ`{±¨P¼loo‹Åb² (·{{{g#ñÚÞÞFïOìIGGÇþþ>óö'€>òìì¬R©°]@E^«ÕÐtÂkåþF£‡Q°0nB÷Å>‡'FÿÍÍMn/&6N§óåË—kkkƒ!¼~ýÁÛÛ·oËå2$ä4.— E™Z­ž¥ëŸß$TÑT*a”ZÁår!xGkT(À(îær¹øp8ÁÝØØ€p žÊý: „‰D‚däž ûã°ƒÝØØhoG ÌÿßÌýo_n·»§§Çét;àÓ×ét8 ˆþ‘H$`Bö³Ÿ!?øôÓO?øàƒ«««éééÛ·oét:ˆ%'''333”l.—ëââ"›Íþô§?õûý>Ÿ> ¬„B¡˜œœ¤ŽF‰566688x||<33ƒE›ÕÃJ¬%$Ûívú²®®.ÆE9¬i÷\.ön@êÔ¿f³©,÷? TY»»»"‘H¡P Ý†ŽË.‘ýT*EȈ¸“¢ŒBZòÖ÷›õz\l™LÐét‰¥öa¼>;;[*•Ž9ñE"ÈòX,622B’ð¹¹9€$>Ÿo~~¾\.ñÅœæjµÚëõÒ¯ÌÎÎ2¼wï@D§Ó977W©T0Å RGŸ€Õ‘;¡Òmx2ú®1îô$‚ ˜L¦V«¥ÑhèØ´ZíÈÈÈÀÀ@<÷z½Ì@¼^/Ûºlx^:Ž+þ¯l6»²²‚^; Â9€: ÿ‡íN;®V«±Å~Ii‚¨_$Á8ëïï'T‹mšµZ ãðÞ½{Òì"·\__çTb”ÓÆd2uö+× IDATñ¤©T*Pæs¦¦¦qy<ÄcCCCäÂ@Fj588ßëõšL&2þ- €`U¨R©˜WPks±ñ#¤Ói–@´¡¨Ô‹Å¢N§CÕÎ@4±P"‘h~~^¥RA´Z­+++ðm˜‹²À: Áqmm y,CÇNOO)õÚ&ÀË8WÐ#îììH…¨áúúš®«^¯»ÝnH‚”>Ÿkª*~ŸÏÇò™N§³X,Ä["ô¬ëñxx†%Éìì,4³Ùì÷ûår¹Åb|úôé}¦ Â{r¸ó20ÐÀ°ÔŸí"öN\‹L÷À7K¥Ò­­-–f———¸1Åb1òv‘HtvvÇOOOyY. ‚ÀKB°C¡P888ˆD"ÌI¿ûî»jµšÏçÉ‚!ƒu… ³‚ƒƒƒb±¨R©¶··Ño”Ëe¦~¤°n³¨8¥ Ü:Pj©TB«Ëx¸ 4›.‚.óù:hBŽd2ÙÑѧ!‘^Ø©²Ùl{M 6 »5û|Þ"î...(ÉYÃ2k6›ì<©ýa¿pè×j5ôX Pò ‘"y Ðf:N¥RWWW í«Õ*l5`Ô¼GÃÃäîLLLàfÉdm5cXöà’`ü­®®nllðÀ™Ïç™ð€âùßÜÜñ‡µB =;;«×ë¡PFÝb±¸²²R,ggg>)Š?üáè_C¡¦÷P(„zG,3XÃåF$ðÃV«U&¥$?³|†€òƒ¨ýz/ª`uÛ‹/³ÙŒ>¬#DzÁF[$y½Þù—iµZŸþù·ß~«P(FFF~ÿûß¹IÈû¿þ}d¶Ùl&l/‹---ݾ}®F£‘H$oÞ¼¹uë–ÇãiµZJ¥ßéÅÅY¬hPàž8888;;»{÷®^¯÷î 8N¥Réîî./-G92)ذX{PûUCù ~H£ÑØívf³™Tõýý}±X<11ÑvfõõõQ’ÀÞ is___0„6ƒ Üb±0n2™r¹ÛfÄõz=‰˜L¦û÷ﳓ=5µ*„møšX,žžž^\\dDþîÝ;Œy"‘ˆXg’(ý0›T«UPM^¯wii ±Íàà ûüJ¥R >g4©X,–‘6kµÚ@  P( ÌÃI&“Édòþýû.—ë›o¾)—Ëv»þpµZåÓà!Yð5íx?Öæ~*ŠX,600011‡WVV$ɽ{÷Þ¼ysïÞ=öö´Aè|üñÇ.—kqq=8;OP3øòÉŠaZ,Ú?ýÓ?f#cdooO§ÓÖŒN‘3”Uñ2rXN ’AÈÔ.™ SƘ‹åàà‹u,Ëçóì0-rµ€%ÀÂÃ웘‹T*E!rr‚M» ñ 1u¬ðó¾ foµZ{{{ñxüÍ›74UL¥.//Ñ7“()‘Hp-œÍÍÍšZ(Èoáxíêê ‡Ã^f°µj4óóó>Ÿïùóç}}}„ͶZ­ùùy„ÿjµ:‹™L&ŸÏ‡Ëtoo/H ‚h™ÔQ°çóyãˆpáð̓r:??'‡'WWW×{ *¼'‡ûÐÐw Aq°¨ý†‡‡kµ#¼\.‡_ÿŸÿùŸýë_«Õê/¾øâÝ»wwîÜ™™™Y]]•H$_|ñEÞòôúú ®Z­ž™™!#irr2•JQVè599I2ƒÕjµX,z½¾³³ó³Ï>k4¨Vܽ½½¾¾¾>úuTgg'í3E"Å HY”1Í0F£‘:•Jår9à‘Ì|‘Ä©ÍqŸÍfi ˜Bð—§§§~¿ŸÅ)"eè ÄÙ£V*Õv»ææää„ì1—ËŽÑf³‘çÀqÃp3‹D"ª]h6PÆr¹Üýû÷ùË_þû¿ÿûÍÍÍÜÜì3 «xphoaœ­­­»ÿ>V©ÙÙYA0%1QEÒƒüN"‘LLLP1Bíîî†ß+—Ë;;;¹777Åb±Ëåúû¿ÿû\.§T*c(ˆö]]]N§3»Ýn~ãJ¥²V«¡à—b6›c±X<‡™N\—1{B¹\¡V«½}û–ñ¹íím6êìAÂaåGF™L&Âá0ß ßøø¸F£I¥RãããXÀèîûÛß²­eýîp8HëÆ¥ÌÄ"ÐíÛ·WWWM&ì6›ÍÖÕÕÅŸçÑU*•v»}kk‹†ëŒ0Ãz6 ¿Ì+HÍ–Éd.— ù&©âÄŽÛív†ãüµZ­ÇãaÎÇ­«‡HáòòR„LJB!Ax»a+ŽŽž±ƒ‰F£Íf8þ•óóóŽŽ«Õ …hž …ºœ0/ÏÏÏ?øà»Ý¾½½}xx(‘HŒFãÀÀ€Õj•Ëå±X,™L²ê`‡”Ïç¹[­–Ýngi<<<Ì­ ¬ d§b±è÷ûùóôM&“I ,†hÕâÝ»wïùóç?àqÚþz/Æ24\=‰.¯T*U©T¸<ñ P둃÷ººJÊÓ̶šÇÅ4Iž&“iÿêêj{{›¼±—/_Â>ŒÇãPîàBX]]hƒ`Ñ^©TSS.—£Ñh0ŒÇã"ACc§gçD"”'p¾®¯¯©tà‹‹E´üZ­¶R©@7ÄEMp  cdÝ]bEA°Ñ¦\^^2)‹ÇÇÇì÷öö@'b:•Ëå¯^½báF5W,£[?<<„ÀË388¸°°@‡›J¥ö÷÷‡Ñh<99ÙÜÜ„xŽãàà€×{yy™™ ¯S6›M¥Roß¾ÅÛp˜l,À2GGGˆÄ3™ /ÚGPõÔª‚ D¹ém5³²ããcZ–@ ˆæøø˜àŒ)@6êt:F:Ì.ÈÅÛ ì%[>Ÿ×jµFúáá!À§Ó¹½½ÍŠž¨Õj±RF{NrïùùùÂÂÂÑÑ‘D"aP(ž>}Êï=‰`À) @Õÿ»wïX™`1ϸ‰'sYWWW¡PÀª†M6xœ›››ƒƒ8\@@£Ñ”ËåÕÕÕf³‰pàää„©c£Ñ¸¾¾Îårl#Óét$á8°ŽY N«Õº¾¾Îd2¥R)Ncš£?{)=ˆŽ““:EpÊáp¸T*1çlµZxGÙ„kµZ,jµ’vJ¥p,®®®BŒƒ¤G£ÑÃÃCðà_ý5¯ê—_~IÁ´µµÅÓurrÂLéÍ›7¸©¹×Û6´ŽŽ°Ïx K¥Òþþ¾ hxõNNN’É$"ÚÝÝ]Æt él|ûí·?Üiú·¯÷âp'û»L&ÃI€#T(û»»»>ŸÓ6 :·ÛÍB¼Ñhìîî†B!2"^¿~ ‹'ŽùwïÞQªîííåùã°À:Ïhìèè­äÚÚ„“õõu ޼xó˜Ú“¾D©¾¹¹™N§:::Òé4E( &ìÈZ8LGGG9믯¯'''m6þÛÑÑQf‘f³é7ül6ëñxÆÇÇiGFF˜é³L£¾¦Þ¥IMÚßß•åïþîïXÛívÖ¶SSS6›M£Ñ ³¾¹¹ùì³Ï`äòȲT2n4i‚Á`Ûd$—ËÿøÇ?“Éd»»»…B¡ÑhpËÎÎÎÖjµÍÍM–ЏóyÎÎÎq},•J\„P(Þéñ¹/ÙO¢§dJÆÑ†ÏÃåððˆ(¦dlV’ɤJ¥bÀEËd €ßïO§Ó¤â¦AV‘J¥æææ=zd2™¼^o___µZ˜˜¸sçÑää$Æý;wîX,AÝ-‹^¯£˜ä­Ÿþ¹H$r»ÝDj´Z­¹¹¹¡¡!»Ýn·Ûù@(–AÐjµØA±Â1÷Å/Û”9¬ÍQI¥ÒP(DR6:NÀf³É‘Ícè- )•JZ@®@R·À°àÿ‹ÅGGG|¡PÛ'ú?cPÔÙH§Ói’+è¹Q( ò (VWWÅbñøø8™*Fã“O>«V«:îÞ½{„æçç>|8666>>N–©ÑhüøãÙ7ÌÎκ\®ÎÎÎ1 ÓÓÓÍfÓår=|øžÏçc¹õ“Ÿü„ ßïÇ<<99éóù´Z­ÛíÆc6›™Ôâa6%¯CµZ%v†)'¤ßZ­¶²²ò£ÿß×{1–áàc:ÌR¾ËåB'Ö¤³³³ÙÙÙééi@µ`FpÙˆÅâo¿ýÖívOOO3˜ŸŸoC O•Ëå¹¹¹W¯^=~ü˜\=¨,‹‹‹ƒ÷ùÅ‹¤· ŽP*•$ŒŒŒŽŽ¢š§0ÜÙÙïh±X(Óär9˜¢‚µiŸk¬O9 =õõõÕëuj‹ÅÂLIH,‘H$—ËI$fŽxµ9pI+îêêÇ?°ƒÁÀE‚ W¯×s1ÀØCÛ_, 1o­V«Hþa W*§Ó‰~æÖ­[–^½zE÷ýÉ'Ÿ€´–Ëå·oßfœ2==MÈQ~ssó³ŸýìÏþóW_}EÎ=Án³Ù|>Ôlº–ááadŽì½Y®ˆÅb¦´z½ž”%|1*•ª\.£Ýoùúúw ‘iD/utt` …œÃíŽDÄô¬Ñh´R©ŒÎÔöö6Cg&Hð!r¹µ¼ÑhŒÅbÌa¹¥R©ßïŸÚóÎ;‡‡‡@ ^¯“/æóù¶¶¶¼^/òßf³‰ÌãíÛ·ÀpˆöîééA0ŽÏƒÞi£££˜à1ªTª‰‰ lt“““/^¼h4Ìv¦§§óù¼ÏçC•ÐκbïÓl6'‰R©äñx Coo/x[¥R©R©™¢Q©J¥²ÙlÄË14ëêê:==ìc4ÇÇÇQ¯¢ ‚ >þ«_ýŠ95^•z½~xx¥oppð/ù‹R©d‡ïÞ½ H'‰à¥-Ò˜K*•ŠÅblÎñúÂ@<ƒ3q ¨†T*Åäêàà€Ò^©T2‘€å$“:P…v»½X,îïïët:„•d(Ã`@°äv»ÀÞÞm»Õj ƒ¹\îÑ£Gl†¯#£$³›¢•E¢ÃáØÞÞ>99Éd2CCCëëëÏž=‰D8û—––øc`*NNN\.×òòr*•ºÿ¾ÕjM¥RN§[ ‰„úôÙ³gWWW@€N0 P0ŠzžU™L ɽC6Ó†k™Ä4¼ªÁúÞ$H40===+++ˆ}¹·âñ8)•§§§µZ ¾“Z­‹Å䑼c‚|ðèèsÐÐÐÐÐÐÐÙÙÙÎΤu”2™Œì………V«E$!’ªÝÝ]§Ó™Ëå¾ýöÛùùy¨®6›Q*©Ñh4‹íïﯬ¬°ZoÞ¼”F<7—=bž/^Ôj5,`(–––09†Ãá\.‡âøøØd2Ùl6”|øìÙ3­V{ïÞ=êbôÝdÙ€*-•Jþ¨éÊå²L&ûðÃoݺµ´´1ª§§G£Ñ#@·´Z-©)ƒÖ˜J¥ÂtCbI"‘`ôBƒ!;Š&\¬Ÿ|ò ùì„&ŒŒ cðfEZ$I¨*ÿáþA,¯¬¬$‰ùùy½^ç΂aÛA¬¤6‹Eâg›Í&! 6›g^„ëëk›Í‚”6. >~üX«Õ®¬¬X­Ö6ý{xx˜«Âh4¤Sf?‰  ¾eJ Õõõ5<´Q á*ÑGÕëõp8L!Çç8©&˜­*• =îw”þ¯¯÷¢r×ëõWWWv»·#x +›ÍåÜjµ"G V«Õn·ýõ×8Íööö¢Ñ(®k<{{{ù|ÞãñP6ö÷÷W*•……Â*©ñ+•Êöö¶H$úÓŸþ„Ôdmm-´_cz.`ˆv°³µ£y¤ËÞßßçfjµZççç‚ 4 F¨‰aP°šGV…䌪H$¢d˜Nl“J¥òx<¸´wÁãñ0/æ A«Õîíí¥:F‰D*r¦‹Å⃃¬^ÇÇÇ`gîܹ\%‘H8€ì9ƒ`Ô„ùžžâçþÝï~Ç{’N§Óé´Á` (c|‰^TaµZ%Zžš‘:fJ±XŒYqÌÇQË ¤â DŒØl6øKÆ©§§§Z­¶T*:N„+Œ×ˆIácE¡££ƒÿq·ÛM”L&[­–Óé$Ä‘µ‹\›Í&©/‰äõë×ðb±¯ýÆÆÁULç=¦Jvëëë̦–––0Ü/,,øý~½^ÏxƒïøøØh4vwwFZ(ˆæÀ@¾§§‡OûÓv&!  èRžs…33¼¼¼„CÂÆéé)Š€““ ¢Tñ€.P+6 P‘Hdoo¯8Crqq|”˜b>[¶£¸»a'd³YØ I¹S!G£QµZM20Ä.Îâ¹¹9(°F£q§ËåjCŸJ¥ÒÖÖXy€ÏŸ?ßÙÙ‘J¥©Tª•ƒÉ«V«e2™\Wår9OOOŸŸŸcbBç~rrÂ&? Ûc3ŒO˜¨?<¼wøïT*ÕË—/Ðõ¯_ïÅáîp8Ž …Õj¥¿ƒ£¾Q"‘„ÃáÑÑQÇ311¡ÑhÀçÿîw¿Óh4d‹D"µZÝÝÝ ÐÑb±ŒŒŒH$Ä„(ò!B‡. …¾ùæ›ÎÎN¹\¾½½Šùøø¡$ReÖ/WWW4¹ð#E"Q*•Â?‚’¼J\ b±˜z-—ËøïÉë;f¦mÇ3n=„ÞÝÝ݃ƒƒz½´$וX,¶Ûí Ü©(¯¯¯‰'¥½5Tƒ(ÞÍ ã †ÌÐÐTä‡Öëõžž¿ß1'çøÐÐøª[·nåóùõõõÙÙÙ¹¹9ê#8n¯_¿¾¼¼ôù|h.É=@èb6› …‚^¯Ïår§§§sssF£ ? ,`ÂÓÓÓÅÅEæ¿à³Á)×ëõZ­¦R©·ðr"íîîFµ¶V«áäjól_¾|É1úôéS´wtñ2™,Nïïïcä¡W€í>==](<Á¸„2Z"‘ áüœ™™1 íéÇã¡n°Ùl6›íúúº··÷ƒ>`Ë7>>ŽÌjµNLL¤Ói›Íæ÷û9°ðšrß¼}û¿ûÛ·o …îG¹ü¼^¯ÓéÔjµDXtttìíí‰Åbê\ì]ƒƒƒÐí MÅh*<"è(ÔݰìÓé4È#€ï h*•J(:??‡‚µ°^¯W«UöÕj•%[úÞÞÞd2ɤ¨Ñh°:ÎçóØ¿!y±^bm†B7 ‚ÀïÔjµ2AÅ%7;;Ëb¿³³“à{òc ÅÍÍ Ï¡ l/Éì™™á{ã³íììDQ(>ÿüóñññ“““‘‘$v°IªÕêÌÌÌéééË—/m6›L&ã˜fìS*•È2oEl£ÅîînáБÆþC¡P¼}ûö‡=Qùz/Æ2.— á-yCÀÍ¥R) adttt`‚éúÅ_´O¼áR©4NöÙg¸äáO½xñ‚½?<dT=@€Ô.8±cccûûû¤> ‚p}}-‚×ë…P*‘Hêõúwß}G§¹¼¼œÍfm6Û7ß|sssc³ÙÈf£N)•Jô§·±‡T*r¢»ººÐwc†óÙ»L&Ûßß§IDœŽùžt4±XŒø¹y"‘€ŒˆÈŸgWW×ÁÁ´/Æú¹\®§§gkkkcccjjJ¥Ra‚µZ­¯^½còæÍ†³“““ hѺQ›/,,lnn‚]ãÆúøãy»»»?ýôÓóósìûPbÎÏÏ>|h6›a„a­¢2’H$“““¤…B¡gÏž¡Mbþ€-“® õz}ppý•Óé¬ÕjÐÊYÆ0òbO.ÂÞÞÞÀÀ‰hTÈéééi6›———‡YãA¸HA€1§P(–––b±Œï|>¿¼¼ p1‰|÷ÝwÉd²Ñh`ÂúÖkh2™ä¨‚¡†²–+ßb±Ôj5Jûd2É£²³³óøñc´U„ià•ëìì¤áëíí­T*ÜIü~™»\®ÙÙYÔ„333(¥Ã%Ð×××ÑÑ …Z­–N§S(6› &ñ[h—––=Ò®Q|¨T*©”¤¤ÑU/--Y­Öñññ@ €4U¡H‡‡‡‹åúú:‹ŽŽªÕêp8¬R©¦§§wvv677Ñ)Z­ÖX,†F ÂL£Ñxóæ ¦_¶š@ w|"‘ÀˆH$àÌ/YP§ IDATˆD¢íím³ÙLŸ½»»ÛÝÝÍm„1*•J9ð“«««Øhòù<Ž?“É433³¿¿O¾³³ƒp©j,üa{ÜN§c±ò2§Hì„Ýnÿ!Óÿñõ^Tî333%À%âAO¥RR©M%£‰çÏŸ¶ËËC¢ÐÞÞ^.—{úôéööv¡PÈf³¿ùÍo†††xh¶¶¶ˆ\xþü9!‡ïÞ½Ã%Q’Á±Õj%|I2y™L&‰D"‘Z­F/‡©q"‘H¹\FK—N§~¡Mf=È4¦»»Ûb±9I€2ážžž««+´ >ŸòŸ÷³R©‚ÀñJGŠÐD°‘ ÀØRP‘ᧆÅcBM 6¯··—™ûÉÉ [5^Bäƒ_}õÿºT*•N§QPÐì³ ¾¾¾~öìY.—[XX¨T*^¯7ïïïÞÞÞííí\.÷ìÙ3Ø­@àÉ“'¼KïÞ½K¥Rr¢Ñ(~"úèZ­¶µµ%‘Hð° ]A.¡!Nó g³Y~jjüþþ~t$É1²Ç6e±Xм2 "ghháÉdb@„8—Ëöãÿ˜µi‚‚ Z…äÆétºÝnŒ¦Pdu:Ûí><<¤ð_]]ŸËÔR& aM póù|GGG$ÙßßF£×××i=ÏÁÁ ‚­­­ÓÓS‚ñ0Ê‚ j4çççÀŽ @+Ùg‹Å/^p¨q»#ÑI$[[[ð±iðO!%â>¤N6TFÒƒïã¬R©œ· ‡Ãh OOOwvvšáظ¼¼DCBΟ?ªG:AT*ÕÙÙ™^¯—J¥?Æàt: û¦ªÂÛ¡ìêê J0™-Íf³»»{kk+—Ëmmm)•ÊF£‰¬R©´ã·‚Á`6›e¥¼»»‡5 `»Ý¾»»Ëš[Y___"‘ˆÅbæøø˜ÙÑÕÕ26ô»WWW{{{§§§'''بäJ¥Òÿ-TÿöE‘n2™8p‰cÁ`00þ»ººzüø± ããã###Åbq||”%«ÕJPLOž<ùÅ/~188H•íõzçææn€ç³X,¤—ár¶Ûíápæþº‡¦R©`0Hš¨ÅbÙÚÚúË_þÂÀ‘¦ûúú¤5ÑÌdØ3uÉf³ütmÊN§ëìì<==nŒù­‹\.ÇûÞ6û âfÜnw:^[[ÃðU¯× I`7ü@¯×#A‹Åb$‚@ΉßïGe/ÂØØCóÙÙÙJ¥rÿþ}ZãÃÃC†¸&Ù#»–Ëåø?ýéO¥Réüü|oo/U§^¯{½^®F¢¬< áx<ެÁT(NOOY¤“`‡]5+bd›ÍÆÎ ô§ùÓ§O ÃÂÂÂôô´Éd´´´„[•Ì3j^È:ŽÊºÕj*+•J$q‚'C+Ùßßö‡áµÍf#ewzzzii©Ùlúý~£ÑxïÞ=­VëóùH)b1??o2™fgg™zß¾}[,wvv¹3™Lb±$¿_™L†T *T[¤åäÈår2<ûúúJ¥`dÆ•*•Š[\$¡òÞÚÚ²Ùlʹ yÅ:;;Ù 3H‡ƒ¢†OƒÍ¶F£!ŒŒ]K$AÁÔX£Ñlnnr1Äãq²M¨î‰D¹\&Ÿˆ¨Øf³ œndd6w "„«à"îêêæfa‰DÈ~q¹\‰DbrrJÁÔÔ”Åb!ÒohhèöíÛ'''sssÝÝÝF£‘è%¼Öôåx-ÈårŸÏ‡¹%“·žžž|>ÏÕ‚¸e=8#X$¾Ï;>>í'‹AáA"åõ}øz/wz%A(¸ÐA2€ƒ+®9©TšL&GGG!dݾ}›Êš>tÔÄÄD6›ýꫯ|>ŸT*››cÉ$qrr²\.?xð€F›q|¥RÁЄ[vè|ÆÆÆ~ûÛßbÁ'}ÿäîî.Îì««+~ýƒžžÂPeìËŸÁ•Ê)Ï· a gÐéé)²Ä9‹Å‰‰‰›››¶ŸS,#C®ÕjÀOOOA0›Í‚ ´#˜„2j¸¾¾ßÈÍ·½½Í¸ãððZ §ypzGFF¡ ö¥'Íd2[ø»¦§§wwwgff~ùË_þêW¿"@IkÀß6› öÜr¹<==MñNóèÑ#œ#Ùl+¾’©©)TÄ`-..ööörˆx½Þ¡¡¡“““d2ÞÒÎÎÎÇoooÑM$€>p´—ËeJõJ¥200ÀÞÕÕu÷îÝW¯^µñ#mrz±X¤x|ùò%ûòò²V«u¹\ì ‹Åâúú:‡¿)™LÆŸ¤wÁªÓéž‹¹Ýîv[Ç•J%°_fY¤c椯1Ò¶\$“IFmpI\6›ÍwïÞ!e†`o9 ‘·Ç#‘ƒ\ß}÷Ýyž~ÿõ^î?ÿùÏÑ¥ÎÎÎ’E yaï­[·üõõõ}úé§6›-›ÍÞ¾}9 ¯èÔÔÒi|F£Ñf³9ÎýýýÙÙY§Óyuu%‰ü~?å Hܰøøyø®¯¯q¬03A‚‚ûøøxcc5±F£‰Ç㸫úûû‰bçÃÃC¶+$“QÍ•ƒ5 `< âGC2`ÌR¯×GFF0é {9::‚»@[Š î’Z­¾¹¹!J‰!-E³ÙüôÓOYçNLLŒ÷÷÷cïF†A<Þ?þã?òýÉO~B¿,—Ë?ûì3FÆŒ&¨^ÇÔÔ”B¡ ž’Ëå~¿ßjµ-ÄdÌét ‚Ðl6Ù‹2¶Òjµ¤²U*$=œÈ¥v #æ¹¼¼n³h@ÑÏ:??ïëës:¬a¡Èår\<ƒ>†ß^Íþþ~v¿¨›hÃùþ[­–ßïçP(=’H$Õjõƒ>`0=??Ä‚9qW~¿¿³³SµZšâîÝ»¤ey<žÛ·o+•JFÏ}}}SSSZ­Öf³Ýºu‹TnšK‘HôᇲŸdñÿØ;ÓÞFïû\?$%Š¢¸KÜQ¤¸SûÈòhflÇñ’ØmR$M€¢È(ý>~qqA˜‹Tœ[¢^R©” à•Óª"BÔ\°12ccc°ìA`ÒK’è4wBü÷w§P(ÛâÓ—J¥ssstHõôôèõút: ZÛC¡P‡Ã4£Êd²ùùùÉÉI°B~¿_£Ñø|>|hÁ`ÐívÚ`C½ºÖÀYBbõûý\Œ˜ÍšL&FÃT¿Óé`£èt:ýýýÁ`BÍG½â%U„×dq¿~ý:·Åb!ÜÁŇc# X”Ò2æâ–+ƒ c¼̬Ýn7–ƒÁÁA›ÍÖ××GUîÈÈH&“AÎîëë ‡Ã³L&Óððp2™äÎ?äµZµZ­4C*Šëׯ[,ʦQÖÀÀ‘'9¢V«™‹B#Ñh4X×ù†ó7j4îÔ ©ÎÏÏ•Je6›ÅÌ˼ …ññöw îƒð¡^*•  áÄ'öE±ƒ {{{ôÉ-,,pìžwrrÂY>¬¯¯‹E ®ÂýÈ‹pµ(k·ÛËˢ[X‚Y ñÞ°Õ`0‰DÜn÷[o½%‹i ÛÀ +Ò6-ÌÀ)õz=%¨ƒƒƒÔ¼a½¼¼æÌÅŠFJž·W¥R¡ª#:‘Ú‡-£T*Ûí6ëôs"Er¹œ©F.—ùœN§©%ˆ¼”+T½^gSÉf³ ï>|È¿»²²>àeooo,c|‰D8 öõõ­T*Ïž=cÀˆ¬o6›+•ÊÂÂÂøø8­F±X¬Ýn...b5âÊêùùçŸ ‚pxxøàÁƒN§óèÑ£ááá‹‹ ‡ÃqïÞ½L&ó³ŸýÌh4~ýõ×Ü÷777 …ÂÌÌ ì ñxÜh4^þÑCŽŽ¦¦¦Ð:C¡P«Õzòä‰L&Óëõ(­ÛÛÛ8åÉORérzzzrrât:A8==Eƒ£ó3½Z­vttÄœ"É‘P(Ä7­··÷ñãÇhŒw øp:ÇÇǬ_‹…ïÀÑÑìD8JäEYR©Ôðð0¥QhDô©Õê—˵¿¿ŸÉd¦¦¦Ð’É$Æ|ë_|ñÅÔÔÔáá!áUŒ’årùîÝ»ÜLÓé4ÞDáJ¥òé§ŸÞ¹sçÖ­[gggOžŸoii‰viŠ–æçç»Ýîýû÷éáÈi±X.//ãñ¸\.‹Å´q¶ÛíGCÇÁŽ»¿¿OBbii)Ó:T­Vïß¿ÏhšŸdrrrkkkff†&[±X>üðCŠgé ·X,•J…£Ãååe.—ûÇüG>ýúwçÈAµ§§§ÏŸ?W(.—kyyyllL„½½=…BÆùù¹V«]XXÈår4¬f³Ù……v*···ñþâ)àðSyíäädmm®AÚ3Ö××ÇÆÆärùþþ>SÁÃÃÃx<îr¹”J%ð"ÜGKKKL§Ø'2™ÌÉÉ ë>3[z'P±ÐÄb1Îr¹¼Õjñã]5®p]¹/Z,³òèÈeµÛí>ŸouuõöíÛÜϸˆ ‘Ž) Ç)§2‡!oz½>|ñŸ_à+à’ÄävmmM$åóyôz2ÌwîÜ&«ÈøØÚéé)ÎËd2Iq¾Æ‰‰ °Òáp˜™ªÉd"XB«§§Çd2‘©¡.O µAW-4l e …âààÀf³…Ãa&´`÷¹éºÝîááaÖÐF£ÊVð"Ö,xv¡PHðD,mˆŸ§ÁR²ß3× d 5µÑhðþ´Z­ááa7^¯—ÆçóJ%ˆ‹¥ªèÙÙY4¥ðôôÛÖ’®llàK¥ÒÔÔnKÌû‰D«ÕNNN"=MMM=xð@¡P|òÉ'ÐJèÏB]¡ãirrò ƒLÕ ¨ÞÞ^ÊÎt:]¹\Æ_Ün·“¶ånT­V1˺wïÞ«\O¿{½‹{ À ©‡V{A VÓ2“H$šÍæ»ï¾Ûn·¤p—W«Õ\Ï£2ÿ!«’N§½^¯X,†½gœGoµËå¢Ñ1@+u»ÝÅbq{{é¼^¯S¨MÀdzzšœø%…×€ôz=‚Ýàà Ê Ë7€éccc܉¹«ÕjšzГ1) xiU*U§Ó¡+®V«Åãq&HäžËå2ž\:‰D9xoo¯T*U«ÕT*Ås4™£z½n·ÛïÝ»'“Ɇ††VWW©Ô`6»±±1>>ŽÛáòò2NMMY,§Ó¹¾¾Ž¤‹(üÑGõôô¬¯¯_»vM­V_\\КÍþÄ¡¬§§çúõëLü0¨-//ët:*‰˜ã˜¼sçN»Ý>==}ûí·i_¡*°%G¶ËËËp8 ç––T 0F£Ñb±Vãt¯V« ÇF·Û}pp@ÓÉɉÍfóù|çççWÕÛ©TªÓéÆX,¡pooè¹ÓédW6™LÑhtee…ËÐóçÏñ,}ûí·ðãÄb1J1ú/^ÔëõJ¥BXtaa= îÿööv,C¯O$Üä˜âÒÖMhY ºï¾û®ÍfÛØØàR«Õ Lëtº½½½p8Ì(ˆfp¤ˆA0 4­ƒ3ÃAo0ȾNLLlllÈår·ÛÍtÇápàç Ã Ë“ƒ¿Ë`0\^^BîD2”i·Ûóð+ãÒh4ögff˜¾\»v <ÙÈȈÛíæîµŒC€B¡ÀƒÊÂV॥¥X,–ÍfI$%‰ýýýƒƒ­VÛn·¡û•Ëe®û`Ú€³SÔc6›óù} ñøáÇ\á/..h[>??ÿŸÿùÆS;;;§§§W¦Ã·Þz+™Lb988`ìAò ¹)•JߥęXÀÑÑl!ÛÛÛ"‘¨Ùl.--AÊ”H$ÏŸ?G0¥=‡&#LŠ™L ¥Z­V*Öµk×®±\b`ŸŸŸG1õ½û½ãããF£§§gjj ëN³Ùä&ïââbss³^¯{½^Þ‡p8 hÁf³U*•¥¥¥‘‘溃͕ØW&“ÁHM6ƒèT*ÅŒ.ia¢Ýn÷èè(NCÀOÌè!þàà@*•^V¹îîîNNN6 ìOÈ8üOô@QÈŰP(,..^eâÈj°¶Ûmšs8€‹D"‘HD¨†3ÏC£ÑøüóÏs,--§N$o½õ–T*}÷Ýwggg‡‡‡ÀÄÄF€p8Ì®æõza7NOO‡B¡ÁÁAZu:VÑÑÑѯ×;;;K€Ñh¤cH\OOO8æTä÷û777a¢•J¥‘‘‘‹‹ (f EèJ=::Êç󃃃ôÀd 'ÁF—g¹\†­R©VWWõzýÿwËüåõÃþK.ì™LFÜypp˜›Í†ËÅív‡ÃááááÃÃÃùùyÚ[Äb±Ïç£J& ‚==Q¯×ÀäääÙÙ™N§óûýÍf“g¬j0~ÈAbà†»Ÿg‹ñ€Åb™U(TB7?üv˜Ífs:ÃÃÃv»…š©i³Ùƒs©Ñhfgg 3 k·Û@6a0ìïï2›Í~¿ßív;ŽB¡à÷ûÅbq·Û¥=Õjµrø½42Ç,•J].W0"‘H#¨JÀιoll Z²J¥¢!/€ç®T*áp˜c;ŸJBSš@ÿr9#C4::Z«Õúúú°ßx:99¡«Ïd2ѹJ™"%ΨF<*ƒÄðð0¤h§ÓÉ âp8>ùäðýV«~7 p¼< jµš* ®¡À­V«ÇãÁ‹¢×ëq[óÀpU«ÕÌGGGÑ© ÓÉår¢g¸(ÎU«Õغ™Ò_¿~ýôô”K'fÌNgbbâŠs›“3>]à¹(³ÍÐ.Àó£T*ùÓ¤Æ@˜‡Édòûýħ§§óù<|FÊ(›Í&òV«ÅµÌE¼ýÝ <2( š¹4 19—Ë%‹•Jå{ï½GDö7Þí …œN'qŠññq¾€ÄÆÇÇ鉽¼¼¤ì…Ñz¥RÉ\­\.«T*œc*•Êl6CÄ"þb6›«ÕêÿwËüåe·ÛE"™]‡ÃA¹b±XÄñ‚àØh4B¡HñËËKl'äM8Ï2^‡¬âp8€E¨Õj•JõìÙ3¥R ¥µŽOš†Z­V­VËå2L¬ßpœ1¤ƒäGØá«×ëtB!#wG’¾2P ‚088Èù®ÑhÌÏÏÓta4ûúúÀZñPÝǼ‘~¯““¬¸µZ Ïo©TŠF£”ûà>¦´Ê:X²à'5 U ˜Óá/òüÍïX¯×²Ù¬Íf#Asvv†sÜd21(›áW¿ú•B¡˜››ƒH%°â££#±X¼¶¶†õxee×>NFpˆ­V+›Í®¯¯ŸY,‡ÃqzzúôéS¤Lo©TŠ Ÿ±^J¸×cgòx%|O9+F&v;>5pP‹™äλº\2¶Íf³Z­vhhèÊIB°L&K&“™L†n€x<8èøø8“Éо)g J8ƒ% ±mâ¦6›8ÛÄÄD­V ‡Ã*•êþýû¹øˆ766’Éd</—ËXþif:JãÁƒ¥RÉh4Þ½{wmm×·ß~Ë…{yy™Ð½4*•*•J%‰H$; Õl6 áô.qÙ IDATôô›o¾ÁYËP$áF×j40ò¢Ñ(ÐÊ&¡¿!jad@8ze‹é_½^ · ³Ä`0Èu[„T*555µ±±ÁA{qq‘SÉû￯Ó鞟/•Jív;•J‰D¢ýèGÄ €wËår©TŠX.i=ˆzˆŒþÿøÇ?râ^^^. ƒü‘ÕjåðÎÒ»µÛíNOO+•J–f&ôK¥R»Ýε±¿¿Ÿ ;œ¬+ƒ9`[‹Å¢Óé0}3÷Œ…nuuuppprr2‹‘F‰Åb°WVVؘι\.bßkkk˜~ÿûßôÑG‹‹‹ uÀm¯­­Q-ûàÁŒ*• ¨aÆkz½þáÇ^¯w~~~cc£\.ÓÉurr‚urgè=L ¬æóù££#6³»wï2F&<…F„³³3»ÝŽ/Î…Já{{{aJ÷÷÷#¥RY*•666 íët:¹\þÉ'Ÿ ˆ±äùý~ö`µZ=;;ûõ×_sæ•Ëå¸ ‰œÌŽÄ©ðüëá£L$œ)™ã®Cp©^¯sßïííEµïv».—Ëh4¾xñ¢ÓéˆÅâ ªnA ¿—ÙM‡‘H e¶jµÚ—_~‰¸Ïó°¼¼ ÏÏÏ>|899Ùl6±ŸCµàCõ#µ¢‘Hdmm‚„d2‰A jw ýý}AH€ð$™‘H$Ð01ÑZãñxb±˜Ýn÷ûý?ýéOÉ0¤®pëÖ-¶¨ÿøÿxçwòù¼ÇãJóþûïÿÛ¿ýj°3L¨‡C&“­­­%“IÞ ¨¢ËËË•JÅï÷ó»CŒ9<ç ¼‰AÀ|§ŸR©äþŠÖÑÿýz-Nîo¾ù&éèž »¸õŸ±A"'&$`ddäùóç?øÁÜnw¹\öù|šÔj5¨U½^ÏjxíÚ5ƒ:ŽH xçwð}ß¼yÓçóY,–P(„rttôã?>C…´Çãñûý.—‹D•1\o± ŒŒpƒ!LŸK£Ñà¤Ïuêt¹\Öh4ÃÃÃ*•Šo;ɦÕÕU.霃0çÔjµ±X ÍA*•b¾fS䔊ÃÌëõžŸŸ ‚à÷û9p¬n6›¿øÅ/4ÍÌÌLMMe2"Lç¸ÏR× T*F#LÔóóó7ÞxC$iÀ“ÀY¾6$J¥rzzÚf³MLL4›MF2™ì­·Þb¨k6›§§§ÉÛl¶ÑÑÑ©©©‰‰ ¯×;<<üÿðÁ`0“É8ÇÓÛÛ«V«oÞ¼ILáúõëtAð6àñxpz˜ÍæV«åt:'&&@Š×ëut*(=ø^zzzÀÀâœC=èïïgdŠkeeeppðûßÿ>4ù>ø€ãíÛo¿ _*•ÒþÚÛÛk±XAØÚÚzã7Ôj5ŽÒ@ €ëcjj ‹êÔÔÔåå¥J¥ºsçŽÝn_[[›™™™˜˜¨T*¡P”ŠÙl~ï½÷:ŽÁ`°ÛíÄ‚võööòÜ’êB*‹ÅŸ'õÊGÌÂÚjµü~?Ég\L§§§‡‡‡6›ºÙþð‡?0ŽCËêëëÛÙÙ[°ººŠo$•JE"‘—/_¢àŸ@ÀQ«ÕÛÛÛÛÛÛ´-âß]]]åC!wF\èÉ“'D@ÁyÒòƒâG¥-[5²ÛÈÈÃpž·ÃÃC\¹@Û¹(ôõõŽŽÒF€ ÃÙív‹D¢N§ƒ»†€X±XdGeêëë³Ùl(`Üð8¯dƉÍüI.—Óp¤ÕjN§Åbév».—K$a @„ …BÄÑ …Â[o½…›€"ÓB¡ðòåKÜ\‹‹‹Œ:NNNž={&‹IZpGO¥R8(nÔëõÏŸ?ùòåáá! NlÐØääry$ÁÞÊGP*•b±J#:CQ®Ë¬ã‚ €úp::.™Lâm¥, M:v8Ø„ …^¯§•é5q˼² W*@K¼/_¾äÔ¶¼¼Ìu)‹õ÷÷ ‚ðÁüË¿üK4%|´¿¿ŸH$êõú/ùKA:N<‡;V,Èüú׿ƒ333ß|óÕj …B=‚ˆôàÁÖ‹v»äj³Ù¨îîî>~üxff†ž­ž;£ÉdúòË/Ia…cÕ§ª†€O__’h:ÆOM<µ^¯#¬—Ëeâˆ- òð¿ ‚àóù¸h×ëõ7ÞxUšÑÙÐÐP"‘Ðëõ$ýh2âfŸÄ7!Š„˜ÍNLL¬¬¬0„̃QŒZæŠåryww·Z­bC^ØÙÙ¹yó¦T*ÝßßßÛÛ£ñ믿þùÏ^(Ÿovv¶P(à,‚Aðõ½÷ÞCo=??ÿáøé§Ÿr&ÀA+•Jß~ûm¯×ÇgggÁÎ0ÏT*•Dði^ÔLõXJ¥’<äÑÑ‘V«E‚ƒ“ƒÖÁAxss“ÈÃÃCÒ¡&“éÞ½{ÌíqRÁÑ\[[c 4 ͽ··YÙápÆx<®ÓéxüD"&ä™AH¥RG,ïííÑ“J¥VWW-p0^-—ËAYÓh4aà1¥þT"‘d³YƒÁ`4s¹±vÒãl~¿üå/ô£}øá‡Þyç X&''ïß¿Ï[ÍáC$ÍÏÏW«U§ÓI¹6Ð4ª²ØÝƒÎyÇGFF螥p£\.ëõz’€¤véAOŸL&«Õê7¨ [\\t8||SSSð5Ñ~h;ŽƒƒƒX, )g~•‹é_½^‹“û­[·FFFè§ÇgÍ ’´›F£án+”­V‹‰Š¡×ëU*•¨äÓÓÓv»¦`³Ù„v‚áìæÍ›ô8Ž‹‹ ™LvãÆ‰‰ l-###‹å“O>ÙÜÜL$R©tzzšRæP(DrD«ÕbɇhQ©TX4“Ÿ„¼h0hÚãJU5o  :Îw®°js¹ñzþd¼ttpØ0?PEªÕªL&›››Ã¿‰§­¹¹9~‹ÙÙYÚ×nݺ…à0>>N"£^¯ß¼yÅùã?Æ}8??®dh‰D‚³…” |6§¡¡!tÇ“H$”J%¶¶½½=«Õ:33KõÀn·ß¾}Ûh4b˜˜ØÞÞ…BPÀÂ&®Ï€ 9Õ:0Ÿ`ü í—ËeB‰6›øîðð°L&ÓjµWH÷`0Í‘1>Q[‹ÅÂüMþR ýýý€'‰A ð~b \ZZB˜‚àóù>øàƒV«ÕjµnݺŴßårÙíö‹‹ 0GGGG ôÓ²X0>Á¨£V«øR¼ÿV«•üm«Õ¢$’s4É£¾¾¾P(¤ÓéøbPáíø<<<Üjµ‚@Œ ±²§§gff_|OO×ëY79ŸÏÇZ íOVT"cÙ9 £¸‘Ïîî.]F.—kuuµÑh„Ãá³³3‹*•jqqñøø˜ ð³gÏ´X,a†Ìt:íóù"EµÍfS§Óe2™P(Dv¬¿¿Ÿ€üêméQ¢SȰÝnŸ››S(###“““©Têøø N6›™™ÁÞѸ8LA\!§ˆnPá`·Û¿þúëW²þ¯×k±¸s¡£˜X¥RQ°é÷ûÓéôþþ>v%X`Œ˜@‚†èïïo4ÅbÑëõR`mµZ Uöôô0âgv ŒÇ È m|tQ2l±Ùl?v8t+cÁ®;—K6$‹ÅR­Vív»J¥bìæv»Ûí6²`·Û5›ÍtÜ™Íf¾öüO9af1âÃÖÆR¯×I'i4fMõz4œÒ|>Ï¿‰D*• ýår™0$ù[ŽçÖÖÖvww{{{WWWWVV8ÙÁÛ·ùæ›onll ¼ôôôüë¿þ«T*õù|‹‹‹t5´ÛmºFAáCsÅbк·¶¶8âåóù'Ož0 «ÄX¯T*ƒÁ‹‹‹Z­FgD"év»‰äJm & Ê.i®)ƒƒƒz½mD¥R‰D¢³³3·Û G±Áþþ>º°elWf³7'ª—X,f‹â­ËçóW†¥T*Ũ¦X,ºÝî|>ÿÍ7ß8N«ÕúùçŸ# Ÿ0C…h4Ê ¢R©0‰¡ß3h.—Ã!†RÊí?™Lnll¼â%U„×D–1™L|™ù˜¬âc¡¬6—ËÑΰ~aa^c>Ÿ¿ÿ~6›¥„{úŸÿüg¥R©Óéb±ØÒÒÜ •JÅiš…Œ šV«][[Ëf³_ý5Ùe»Ýîp8`ÿžÅb1úK××׃ÁàÊÊJ<'ͺçóù€©žžžÊd²n·‹£æèèH*•²Ç€'’Žõ YðâââöíÛÈ (6§§§Hó(ÑT÷’€Km4é&Öh4&“)•Jét:›Í†ß±Õj±n±ãˆG^‘pG:¶Ùlz½~nnN¥RQM‰˜óÉ'Ÿüîw¿#;º··GòëÍ7ßÔëõúÓŸ¨Š½sçÎÀÀ@:N§Ó 6ÀóÒìt:£Ñ(7N¤?ýéO‹…7;7Á%´fÌÑøÃh’ã3“,²Ùìéé)Ú+…B9D³ÙÄÎo2ŸÏG£Qöuø9Dä莀Ûßßrrrûöír¹LÇ×_m2™æææÎÎξ÷½ïj0\~üñÇ{{{&“©T*üÓ?ýÓóçÏONNz{{G("'B­V£’”Ó¢±FH÷Øœö÷÷IÒf³ÙÅÅE$ ü¨Õ Q™8Ì2ÑëõrÀY,"lP´ÎÎÎ@O3µ}ƒÇ‘.ßjµZ*•L&$áP(400@¶N§Ã¡Ä'’H$˜‹D£Q†ùì+Àå÷ööÌf3§fŒRDÞÈ7¡Zpdû¿òžýó?ÿs<ßÚÚâ–‰'}vv"&}gýýýwîÜ”m·Ûÿð‡?d2“É4??÷î]µZýÉ'Ÿ$ *«hÐ<88 €Ã'ŸÏÓçÃÆït:Ûí6°IjÁûûûɲâ»Ç”ÉdðAìïï³ ˆÅbvh™LV­V—––R©T½^ÇVÏ´ì•®¦y½‹;襣£#À°,v»½ÙlR>€3aiiI*•þøÇ?¦U€ÆG}t~~žJ¥æææ<O¡P`è;÷éӧТ)ñhG¡Z­þìg?ÛØØ‹Åï¿ÿþýû÷·¶¶øîA©¤6add䯰bL&aœN§322²ººŠXÄu³$ñqÎæjµÚçóñ…ä EUl¥R ªn£ÑÀ,¨P(z{{F#É\ç8®¸Ÿòám³Ù(ð mVð4t¹y\\\Œ·Z-J©âñ¸ÍfûðÃÁgÏÎβ}Ž]»v­¯¯¯Ùl~ùå—XÖnß¾ ßãÖ­[ÄUÞÿ}·ÛM]µƒƒƒûûûR©Ôh4’q‹ÅH±”лÝnþº¡¡!—Ëõë_ÿº\.#Ä#.!†bŠ…Ž+‹¦¦¦(Q»b(2ßFGL`z Ã# Ò0!nWÅbqeeE,ƒÉ˜˜øÝï~÷ÛßþV©Tƒº¤ ŽÁ,®ÿÕÕÕ*ú666ر3¢Ãr©V«*•jdd>¸ ø£¹]Ñ…û®Þ¡¡¡r¹ ù’]ŒíãdzÙ,2"Ìö¡ w»]…B1==ÍBÆ¿ËwhâÀÀ’_dz³³sÅRÕh4 ~écºvíJ4 '—Ë…ß‘.bÜ‹%‹AÚ‚B,•JéðC…O&“>`ï\\\ žÁL5 ?ýéO×××?ûì3Ìù|ž`ǧŸ~ SÄd2ݸqcqqqqq1 âõb½^[[“J¥ÌBWVVìv»X,–ËåV«Õn·_õ:áÍT«Õ¬ÚL\¸\ÊårêDp»Á1–J¥È_ˆo‚ @øàËîóùh“GA"TÅ,dbbB,çóùWµþ¯×k!ËŒŽŽ‚NƨŽQÚn·W*•ƒƒ‚j BÈ”Ëå••¿ßßÛÛ‡}>ß“'O’ɤßïßÜÜäR¹¼¼,‰p¼’JW(dJûúúŠÅ"q¥RI:|ff†¬¶ßï_^^,¾¶¶þ:–A@02¾ãh/ÂÐÐü<"ÎÕjõøøØ`0P°K„¤Õj¹\®+­ ‚ñÝÐÐc´KŒ:N§“nÆ«;AOOO±XDGr¡ü…M‚‰.S#|Z­–F§›7oær9ȉD‚?!›Í~öÙg$\°µ¨Tªt:Éd¬VëÎÎÎÊÊŠÉdŸl¶Ùlnoo“J'qªÓéVVV¸t»Ý\.'­’sss}}}˜  mœ2™ 4<^N‡{2•JAø‘ÉdÇÇÇ###0XÀó²¾3C;??÷x<˜pd2Y<¯×ëf³™, Ky¥R"Í÷S*•¢ Aóþ÷õõAÿ·Ùl~¿Ÿi§L&e¡V«C¡P,¥‹ê Ù ã9gj’úŸþy¥R±Z­‹‹‹c¿ýö[ìzdÍŽŽŽVWWq¢ðær¹ååeŠSÚp»ßÙÙ‘H$b±÷’8ôÉ*³^‹D"ˆPmIãâG’ŃÇM.“É`ï!Z«ÕXvÉ»^^^2Ïç×Ä—‚bY«ÕxyÓØ wSR¦ÓéV÷õõ½óÎ;,÷J¥2 bw!Ô t¡§§çoÿöo¹Opp/•JƒÁëõRFêv»Áæ\u‚Ïçó¹\6Å ———´²¨Tª—/_BŨV«/^¼ @KÑB>ŸßÙÙ‘Ë凇‡ûûû\ >|HwÂêêêÖÖ–D"¡®dpp°T*1/%Ùį h„éÇ&ì¶€ˆÆþþþááá+\N¯^¯ÅâŽÏÀ4iЉ ^Ëd2›Í¶¶¶¦T*ÿþïÿ~uuZÀÉÉ *6Op"‘@’ÛØØ0¿ýío¿úê+C÷îÝ£1¡Íjµ®¯¯Çb1 QÜÑ4°%¬¯¯¯­­u»],kÕjVìõt:½²²B;ýŸ`4êõ:Š'!Ø|>Oú´P(`?àËŒ:±±±qyyÙÛÛ‹Ê,‚Ïç€F;<<ŒM›ÆÅÅ=îr¹< ¡žc  Kø¶Ûíz½^bŠTGžŸŸŠ’H$7oÞ|ÿý÷ᩃAN@$àûûû?úè#b2Tploo£P-;::Jj”‚c©TFAÀRM\,Cèøðá_|'ýþýûDêIÐspЧ"{õüùs©TJj÷wr¹‚ ,// ‚Àå†Ü)Ëz<‡¬r~~Ž.ÑÓÓƒéôôôÊùLŠE ‡WFÐ=P'oß¾=77‡ ‡I!ÍÏÏcBŸH;55¥T*ÓéôÄħc2ë©T ;<ÓH§Ó)•JÃáðää$U·sssf³™y2Zv8‚(‰<W„8®zÅb‘%ì~oo/•Rô§×j5,•‡Xn°lòþ`ü§ ›5sAaÂüö…rØjµxJE"âr>Ÿ‡Ç·½½}tt„ºU­V)‰&õŠ·’Ò…ÍÍM~…ååål6»··—N§ý~ÿÑÑQ$X022‚çÖ­[DÿÝn÷µk×:N__ŸÉd:<zôèÚµk°™ …Âèè(ÌO–Ú±±±H$ÂRÞÛÛËðˆ+ß"’â”±ññSÖò~Ë1ζÝÝ]VíV«Å~À Žn#Ö8œŽÜŽÅb1[J¥ЊQšã &n‘HÄ?ßÜÜd^×ÓÓf„ˆºA ˆD"årÙëõú|>»ÝN÷Èøøx<ÇE755E»ËóçÏ·¶¶È%ýÍßü þñl6ëóù®]»öâÅ ±X ½„lg(B~òäÉ‚Óé¤ÌöøøX¯×ooo7›7o¦ÓiÚ v¨‡@Óòu:8àÜ“–——1­Ãhãƒà±á%“‰·GºÎ¹±ù|¾½½½íííT*åóùŽŽŽd2ž¥““èüëë뜂Ëå2‰>G0È|ϳÙ,Ÿ,?·Ûå ‹ÜO„=Nóžã’L¥R(ív;“¨€k 9k`` är9J‰¿Çãq»ÝF£Q­VÃñè*äfyfffÖÖÖ¸ýÄb±žž¿ßßßß϶$B­Vá”N§É Ð0¼žÇŒïÅFôçìïð#á)‹Å´OLLìîîÎÌÌäóyØ.— ÿB¡ Õ’>t©TzïÞ=6KA|>ŸÓé|òä aÝ/¾ø@AšxÇÆÆpª Œ™L¦§OŸ*õzW¡PŒu»Ýt:M&ñðð«g»Ý¶X,>Ÿ¯R©ø|¾7n@À“Æ%m“|–D"!ªšN§!ýÉd2‡ÃFFãýû÷_ÙbúW¯×âän0X°–——YÖ)¥½P«ÕšL¦x?~üxtt4“Éloo#¯¯¯§Ói‰DrppÀm ·?ÿùÏ ?~|xxH‹ü§Ÿ~º³³ƒ˜ö§?ý‰õë¿þë¿Ìfs:æÝfÇÁjµÆb±B¡@}ϕѸÙl²¡ÌT«Õh4 Í kùddÄår‹ÅÁÁA˜¬ƒÈë˜AY9RÓˆŒŽõ‚–%„5¦¾äxKý~ÿåååââ"¬vIr¹‘g÷·ß~‹9úÞ½{ä¤À­­­E"‘L&ƒ½’Û}4ÝÙÙA~‰ÅbÜÞ=z„eàÁƒ¤x».//Óé4›k¥R!†ÆׯÆw +»»»„qû,—Ëñxœq’°Fº ŽqÐf³Yž[òÓ°-àygCW* T ø­V‹9*œwF8ôÏ!?¢Ûà. Ðœn¬`0ˆd˜Z­Vçr9¿ßo6›÷÷÷oß¾N§yëD"ÑgŸ}FòœÙ;ŒF¼(Ýn÷ñãÇ $Ö××™W-,,lmmMLL tq D"Ýn7“ÉP·» o] IDAT³³™JÔHN'“Éèj^XX@4ÛÀã·¹¹Éè ÅŒcÜÆÆF"‘€;†E Žö­l6‹§ö•¿^‹“;[=h<‘ ï8~V«U.b===ȯ`°jµZ?Mf}}}›››ìÞ+++|×ÖÖ¦qgçúÿìÙ³óós&}}}ß|óÍÈÈ2n¥RùÕ¯~õ‹_üâ¿ÿû¿.a øâ‹/ôz=×áóóóÇ;ÎV«Eí/`U2™lgg§¿¿-ûä,– ®œÊ ‚€ I\E«Õ ‚€þ;88Hý13Ct^Äw„rؼ¬_'''d €&rŠ„a irr’òš?þøü£ÙlÿüóÏ¡Îâ ¸sçZ¶ SSS ®}_¾|™H$Âá0³_z?ÀInoo.-- ‚P,é ‡zY,/..Â%AÊùW¿ú•×ëýàƒjµÚÖÖ m8?øà‰D²µµÅ‰¸X,{ÚÞÞÁï÷³!Xs7qÃaíøø˜Ó7P©T+++ …Âh4NOO[­Ö¾¾>¼OSSS?6™L·oßæ¿víNmNN›9À4q¿ß_E¯×£ünnnòxT«UìÜ` mllPaÚét »ðô ‚À¼„¾&J»Hc1ë®T*{{{ìÈY€R©e–¤[ONN˜1‰+‹„ÉK¥ %«6£QNívûøøøúõë»»»kkk+®¯¯ƒDÅrj2™Òét ¸*ì&ºxûöíh4ÊDu¥P(œžž^^^™™²ßôóœ1/5 ¿ûÝï$ÉÔÔ” }}}ãããÏŸ?'LÃA‹:º¨Õj½wïžÕjU«Õ?n4>Ÿè/Œð¢ÔÅ4›M„«X"ßëÎwU±¯Ãëµ8¹¿ñÆ<²GGGäN‰°³-3‚µWkoo¯ªˆÕj]]]5N§‹:îT"¯Ü»‡‡‡Á“Úo6›ì(t¹‘âÉf³H“DB`‡Á'Àã×ëATëõzÇüE¬#8RàG“,%‡](T*çP<P!Å#1_’1ÐÛÛÛ#ÚŽÖ ¹ ó ƒPü—0 °N2ç!ÊKê3I¨L&ƒfii gýúúºH$ÂÚ%B¹\þôÓO±ŽQWrzzJr {±X„Ç+Âîî.0¦µµ5±X ZV¯×;NìÒÁ`±F£Ñ" þbÔ µZýòåK º´Ô Œz`×ÎÎÎàÊR”ƒÌc "t6›Å_y }¬Ñh Cs•Q*•'èÖÀlÎ`0‰ÄãqL>+++Øs¿úê+tüh4úòåK¶Õh4ºººzpp°½½½ºº 1 ‘dyy¹X,¦R)¥R¹´´DTö=vuº@ù].SYr@[[[œl(Ä@¿. À2ONNôz=u†Xq©%Bš»:$Ùl6HsúûûY‰p³‚ÿ‡ŠWFCöÂh4âÚÆN@”!0µÀ¥R‰Y3ƒ"fþülFC­VókêõzêýÈ ‚ñaé'eN§?ÿüsÐ="NqppÀœ3—Ëåóù‡,xòä‰J¥jµZÑh4‰@ð?88èíí¥§0—Ëmmme³YÅb1™LR{ttÄU}‰Ø ÛŒH$"Y,yÈ)ƒåac(’Éd¨vÐh4|vÜæc±¾­ø_aؽò×k±¸{½^´ˆh4 üúøø˜"؇±÷¾|ùòøø¸Z­’ Úßß÷u€ ;—¾J¥B• aétšzkè]°:3™ m/…BKúÒÒR"‘ƒ»†´T2™äŽÛšŒ‰ ¤¨°á3³BÚ¦_›€Á)F:œìÃÃÃF£‘oð^‰¬GŒLONNˆ›ÓôFY6J®øü¸Ëså¬T*GGGܸ™MA©L§ÓÉd±û îfஈBÍfS*•...òÍD O.‰@Q&@ˆ $3=tü££#TÑB¡€fÒh4ÆÇÇ¡f¨Á¥É+‘Hôöö6›M\7‚ 0ù >Æ'N›Q‰J¥ÂùŽêb–”sz½^XiN§Î}l3ĉwvvÜn·ÇãAï ‡Ã§§§˜ˆ2™ nnøVOžG¢1<Ò„žêõúÁÁÓ`–<¤|þ(ZâšÍ&þ?ˆoçççìs¤Ÿ¸ì2ÑavBš‰8Æ$|ô¥R‰ëïåå%&.`,xm "pà¾Í>ijDÓ»‚Édâ"222rûöíT*¥R©Ð¦)óO$‡¶,½^¯©Ûí†Ãá•••J¥‚_–ÁÍfcb¤Õj‹Å"'-XÖ …¢X,R4O¤kŸøèÞÞžÑh„´ãt:áñ ÚÚÚr¹\'''_ý5Â@:æ v˜"LT¬íímNgggêy;1‘~å¯×bqÿý÷©`gM.Ÿg‹co£Ñ e¢··7•Já/„†ùF v¥RÇ E¹\ŽD"ÍfóªÌ,øÖÖÁEÎì„K¥Ri0ÄÖ¢Éd±Á¡ZRYƒy&Gd2‰œ‚Ø’Iã&B³a¾s|æ‡ó²D"iµZà°% ^&9`)÷s"ý ½^/™™Ns¸à- gzz÷ÅõëבMÇÆÆøóÝn· âïúê¨Áâ]zùòåðð°Ûí.•JØŠñl´Z-–uvA(Œ`7 ƒ¨¥Qèààà7Þ¸wï^µZžž]©TnllÐÑq~~Î肊ALcƛةQýÃS¥Ríïï‹Åb½^ÏRHšÿââ9xooO½^O%þ“¡¡¡P(tUñHÔ“ý‰^fbeÏâ‚峃N§“%ŒÄ¿×ëå‚¢ÕjÇÆÆ/<ÏÀÀOo `ø‰ÆÈŽ"•JÀíÛ·¯è@4v2Z`0ÃîÅl¼Ùlòx ­´ÛmNÓ …B"‘CÖh4à.êõ:»¬Á`Àß·‰Û$ógAúúúØ5ÁR6›MÒà rá®p“¦üO«Õrü"%‡îÏ*vNHb±Ø`0ÐV/ªf"‘`ï„ Hã+"ÛðúúºÇ㙘˜ ×Bx¢X,òöõõºga1v»Ý¹¹¹`0(ÂÐн”i µZ­×ëá1„Ãa #­V+û˜„\.ÇÀ€ùZ­½¾ÅbJFƒf£Ñ@õ*•J¤RH–½¢¥ôÿz½‹ûÌÌ _dÄ+»10ePH“¨œÌë¹×ƒ ¹¼¼ ƒhÐ,Çýýý>Ÿï­·ÞªÕjÍfóæÍ›sss0@¬V+>þ‹^¯çy¥whhH&“ù|>@zz½Nžép8 {O,‡ÃaB€ø‘¹ø×ëu±XìñxT*ÁÁAA¸MÓbíïèèˆÓ.’rj½^ÞË”k<^4n9§§§$6Áï`'ÇZCÃ/›lóóóZ­F]Çd©Tе‹´··W&“1$°X,ggg$;jµš×ë…TÌ„Bjªbqèõzü”ʲY­Vè²333¸ƒæçç,߸qƒ¿}||­†tn»ÝF¥Ï“4)€Yh¦|½½½ÃÃÃÝn—ò&ÚÀy™šL¦b±È½›i‡F£1ÈDÔîа“ËåR©, Œ•øzÓ9·¿¿} »!Žæ“““ÃÃCŠîl6‰eNÇN¯ÓéHÞÁ˜+‹Õj ‚D"m"b£Ñ`®»ººj³ÙÈd„Ãa¦îàbc"›(•J(C|°`ët:´,I`¢^¯š³+£b#°ÌV«EYèG(¡äiA¸RÀ? \¸Ýîþþ~±XLã*9¢}IŒp}>n–ééi|2œf8')•ÊÃÃÃx<~vv¦×ëŸ={†ÃSf£Ñµ¸¸X«ÕÎÏÏ)’eÑ`†|xxÈ(‹iÐf`0 &Q‘ÉdŽÙª'&&®¾YW»,l2|;===ô°˜Øív½^?00À€êo·ÛµZ­ÐA€7wEºÆ"üÊ_¯Åâ}¿ÝnS:Êd{ÐF£‘bÒËËKäuƧ OOOÑàêõúáá!·Z‚þëëër¹®•T*u5íÁ™KD‚âãb±èt:ÿøÇ?...ö÷÷Ó·IIÓÊÊ §Èx<Ž2žÏç韄=ÀOr||Œì ì{Dbj‘˜8iBúÆ·ü‹»¶ 0U R B¡cĽ#'¹>fY „¯³h ‡‡‡y£`k`yÎd2üü—L¤ÁOÒ¤øé7¿ù ×OjAA¬¯¯¯®®’2µ»»Kßi©TŠÇãøµ···#‘ˆÑhD˜Òh4ôì‚@ezw"‘`Jüøñc6xF²œ‰°-sü$¹Z,ONN˜Fìïï3a#žÆÇJU!²5ÒA©Tâ² ÷X"‘s…ûOŒ× U¼üd†Óé4+ïÚÚÎqÀ)r¹|oo/™LRµ VpeeÉ%“ÉpÅÌår{{{F#‰œžž"F‘Då‘ÉdËËËgggù|¾\.ã (‹XnH'¥ÓiPqgggätAà‚È<¿#{‚Ž~Zºhw/‡‰F£‘ËåPäÄbq4M¥RŒÍ1/t:z« îÑNS*•Ô¸BáJÀ5Ïí§Õjq†=>>. ‰DaPŒR©¤2Ÿ¾ÅbéííÅ Ð÷ÚÚ“öZ­‰Db±N»»»ŽÊå2”`‰D²¾¾"™Lâ»K§ÓLn···ñA~õÕWÌ$$ “p¸Íl-Ôg ‚ðâÅ žÿt:}Uš–Ëå6Ré1­Óé e2™W·šþåõZ,îæÆH~œYã`i¶Z-î‰0ÂÂáp«ÕZXX@úå—_ÒEÀY8›ÍnnnâÊbîëëK$¥R)#pµ„Áé›+9¤lÇCæs1)>àŸGGGj:½6{{{蛌þÅb1q\›˜ºI `q£ò­^¯ ‚@i wºÞÞ^†½Tù–RÜ/Ðáp€^ÁfƒŸ§··÷ââtT©T–Ž5Võùù¹Ëå2›ÍívûöíÛ{}>ßöö6gF²~¿Ÿ&,"þƒIŠ–ËeÎË‹‹‹Fã?øÁÖÖÖ£G´Z­J¥Bh¦UŽB2N[Wï?° Ä.— LØÎÎÎÁÁs`ª:nss“/ï'œ¦‹½ßµ–÷ööbù§×Ï—Å‹/6 ðV«Õ×××h4øMÙÒ€»béƒÇ2Ýl6öM½^¿¸¸x~~>>>Ž/Óçó¡}QÄZ(Æ‚€S¢Óéär9‹Åât:ù™ñ”Ëå©©)n XãA*V*n?­Vkkk+{<N» 9™ÁÀ¶¤¯h¨×ë­×ëëëëÌ9Ø(г³3ö$&ÉZ­–}Ž3h† @ü.±"# Â1À®€-‡Û† ¸!9ǘL&A:Ÿ {¸ï9Ÿ‘ÀÀ'Þl6)£‡Kc³Ùz{{Ɉò.áÒÁpvvD!‘H¾¸¸p¹\Ø—ùÊШÅ= —Ëab9<<4“““˜1GU*•ÙÙYî À$€”aÊ@ªÍd2f³~¸Ãá`WàÚcÊl6K¥R˜”ƒç!Çè h–÷ü51̼‹ûÍ›7...šL&ª¹4V«…IÃ5’<Ê‚¸"¼ ‚à÷ûyÎl6Ûüü<æŠ`0ȱ% aq#r‚a铨ªZ­¦ÜY"‘ÌÌÌPÂIs °aI  z'ÐŽ¸>_]<1Ôƒ%€É¡†7bŽõz 8¹'${ РQòÍ$«Â‡_M§ÓI½¢¢a§Ói·ÛüT¡oÀ2ñÕW_Q ~qqÊŒ†¢ «Õêr¹òùüúú:f5dŠ+d•L&³Ûí(¿Íf“1æàà ƒnŠœzzzH~v:k×®¡Ï:»ÝMìÍ7ßÌf³###f³9‰ànâ t»Ý„GˆçpG¤¾¼¼ÔëõÌf`sãX‡B’€G‚/-#Foþ|Ò=TÙ±Ö:ã,)“ÉÀ9 þ,..re §T*¯ø ”jêõz—ˉD<àÀâ[«Õ:`Št³Îm’àH<pÖžööö˜ÕˆF½d('% ¹<t»]Fƒ›³Ùl"#ˆD"FlŸ‹“»Z­&(D<å'@`ŒF#ˆÊ+ê/Cl&Ÿpžm6[(’Éd.— K•V«­×ën·ûã?žœœ¤ÔIŒ›z½dôU°SîÊü„+++޳Ù,[5—<6Œµµ5B˜©¬Vk4ESebQ©T˜ýòÙ#¯T*´z%“Iæ^„<OOO¥‰f³™™âw8£Ñ¸²²¢Óé0PžñMÄvµÂ0êxM4÷×ÂçŽbÅÕŒ´žH$bži4“É$7t€Pjµzwwwß`0¬¬¬ tpzÁår& À2™Œ1T>ŸÇã\0‚OQ«ÕËËË¨ÕØ×¨v$ËÓíva¿¸ÝnFóøîùar¹Ÿ=O !ð„WA8zàd¸²'£«´Ûm¹\Ž§óŠ¡ âO½ (ËHù gñq ×ëõÙl‡‚`»ÝîííåΈÝëõ2x$-…(<11‘H$(æóy– ºFQ‡hõ_g``€ÐzÍgÜW8V‹D"„éd2ÉoÊŠ‰iA£Ñ€•g4Í|×9ë¬D"AÈÆ¥Cô…·\.§Ói¦)xo8 Ñf…ÞÊóÀÙŸL§Óa®ˆhC~GNšV«•#³ÙœžžþÍo~Óßß|ÏÔâ®B¡°Ùl$æFFFð/±anIdQ¥RU«UDír¹ŒºT*1ÎEYîÒHãÏÞÞ^f’ ‡††˜ÌSDŽkH*•bÜäÃÑ/—ËA?âzäR’ÉdØÑè9ô€‘oÇá/3ô"Ÿ{€&! îL„€Ø777¯¶R(];;;䟉nÄãq&Àt¥æóy‡ÃÁu*‹J¥²Ûí0úúú`bó¥8::"¹ `”\.w¹\P¡ÄßµZ²,pຠ‰0mnn2|f( íjN633óâÅ ÖwbÆù|ž`ŠL&K§Ól±"‘(NsXÄÆÆÿÚ5;ø&$_É*úÿ¾^‹“{(" ޽Áùù9Ò!c \_`»›³Äàs'ˆ \„v» …Z­V¡P¨T*¤vwwƒÁ ÍfÃ.“ÉÖÖÖB¡\._YYageo·ÛV«•1l±Üò‚ŸŸÓ_Ñh4(Š”H$œþ°‹p¿J'íïïsÁ+]«ÕX p ‚0š¹"T¥R ç­Z­çÛßßÏÍ‘(¶J¥j6›ˆv»='“IN¾°Ìü~?ù©7ß|“޽J¥ò½ï}o}}Ýét2Ÿ¸*ÙAÕ½ú8¡kcÏà[êt:Á‘Ûl6°0"‘ˆ¸© 4fÔjµùùy¬)‹ÅívG£Qœg@xôz= AðDáAbc ×»P(ø|>R˜gØzñ'°œñ=ÄðÊ:Èb‡†–Édööö†‡‡‘tE"*Ž7Ü÷}}}£££/^¼|Wa1<}ú”YèñññÌÌL2™äŒ d+… H©˜’óù<ßPfÚ˜›q<æ ðš°eįúA¸¢Ê …ýýý¾¾¾ÝÝÝt:Íi7â|@§fXŠÿ5‰0æº(ÑGzE*•J———¸A¨a¤%rrr2—ËqLãŒs T*Á¼&ïwyy)•JAEó`{GpÄ<‡É’“>Î3ÉwõŒLá r¡ÆÎHyÅ•^ÉmÐX­Vã¿\OIæóy®/Øuá—^Y²XIAà¡D9ÝÝÝ•J¥½ŽŽ÷öö>ÿüsôtþ4ƪÑh4“Éܽ{—5"Cu§ÿ}l«D¥A888ÀÊöÌŒ—¿±-¾hýt´jµZ®êˆ9Œ²Ù,¢@|îÝ‚ ГGâ7‰œœœ\\\\^^ÂCæÓaª<–Û@7¦¸P?é{ž¼¼¼Œ*ͯÌprrBŠ Ø}­V#_öí·ß DÆ»'5á»ÊMh…üØ…Baii)‹ŸŸƒHJ¥R[[[ Êñ3·Z-gŒO’Éd¡P ׯµÓé á\Á A¥òKu¸’ï¡À·`¶Ä s£R©d>Ä©÷ 3gžsþWÎøÍfóüüœÙ:>ã%ÎR|”f³9ÃÝ{ùò%J=H>ñx<~ÿþ},öü?¹|cåìv»\5øEØØø" ®ìíí1HÀ´ &÷”z½à :QÆÝÇÇÇÑh”Ù)ž¥ËËËíím‰D‚–ˆ|>_(ð³5›M¾ªZ­5˜€Èïä ^Í2úÿ¼^‹ÅÜN§ËÅÔ”›Ñìì¬ÙlF’æ\†"‹ÅÚíöÈȳ5*ëðJò¦×ëu—ËÅ(’ÕÇáp0C³Ùl,»v»’F­Vceg0ËÚŠÅX§Óa“€*"•J‘SÈò b¡#éc0¸ÿÊd2ŠD°šñs²DrÀDÁ7”®)W=Ÿ¼3” ˜Ífð$ ² !̾¾>±XÌÀ‡ ×ðÉÉI£ÑxãÆ r³ì:­VËjµrJ=== ‡Ã  ‚Á õåŒ%I6›ÅbDu.//ý~?œ$.—«§§‡© ¿`OO¥”N˜ñb±HFœÑßéé) ´¶Lˆ.l4g¢T°‹‚À62×àà ÞƒÁpe9?²?ëÆÐ¹¹9Ù&“ Ö\~A4Íèèèôô4„N‚n·{bb%ÁívSËǩ¯¯Ó!—zRþ“““v»Y I/r¹\¥RÛívDp¯×;00`³Ù¦¦¦¶á€bbœˆ‚GÕ*,_ŽÕ N9{rab}ÇíÊm ÈUPÀYú¹îðŸ"‘Èl6»\®ËËK~6Ýn#|»Ý†2„ú„¨ÂVA._£Ñ`ƒ!¤J•\.§ƒW L'ÀN‡/汞žžÑÑÑ©©)ÞL•J0ç½÷Þ£ —.ÄŒ|iÅ3™L>ŸO,ó`d³Y¯×‹¤Ãyá—ùÁÜÜÜÐÐßïÇÕ>99)‚Z­¦®'Û4j'ÛÞÀÀßw– Œð\û^‡×kñs`EçTKŠšÃáµ’û)s’«lyÊ].KüÐÐGž`0800 —Ëîc2î|=äry¥RÁrCà‚±k#øpëõ:M=¨ Æl6s@³Ûí‚ p,ea%øÀa$p¶åàL}²ðz½+¸‰óÕÒh4LJ gñÅ€€žÃü‡·‚k'…n·ËiK­VÓéÃᎹ16jŸÏÌï9$µF£a6›¹i’-‹Àv˜0{½^rXŒ1v©T*j-±Lùcÿ³Z­˜ù‚Á B¡VŒà@J®ûÜË—/™ð»S‰@¢äòò’Õ-“ÉÔj5£Ñ844Ä™ãUú×”D"±Ûíã¼^/¾x§Ó©ÑhXé, SAƒÁ€³%£°± &“IœBä¥ñóÐÈÃR…Áƒ :Åa`œ±ñ _•ËåóóóÙÙYfE~¿_$år9 àD~ˆòÖU(8=ONN0â#Ê €I{~GNÇ9‘}t\½ÕäÈA ˆŒ["•J]^^2o‰Dv» “hzb±¸P(0/ÁFyÕ…~](@„¢˜¡SÉår§CCCï½÷žÙlæ <>>.€ `!;;;D=*• HòäÜJ#‘ƒÓÓÓJ¥Â9‰,ƒVŽÌÇÇÇ·ŠÅb·Û …B –æçç¹I$·Û/H­VC£ã„¶¶¸¸Èƃ}qqÁ_z•Ul4$¿XÜ’áωDívƒ?ÁõWþz-ª<@˜ÎÏÏK¥R­VÃ>ÜßßÿâÅ‹áááL&sxxèp8P$Ñé0V3WÁiW©T¸þ×ëõÑÑQ@n‚ lll˜L&r ÜïžE€›²U IDATþ¢$šZ÷¡¡¡gÏž¹\®¥¥¥>@Ø5Mòÿ°÷^ÛmŸÙ÷‹N@ôF¢‘(¤XD5K2m¯ñÌš™LÖÊ%ä~ržãÜAâÌš,ÛcÏØê{@4@‚`‰BÔïà÷ I¾ï¤ƒðÈÉH üñ¾{?ûy~»Pà¹?::Êçó¬OƒÊ@ì Ÿ¢X,ÞÜܹÏf³hÍJ¥2ûðá£ôz,Fp¯˜²övcc#ð¾óçùÈ1ƒEˆBÉyzzº¹¹É6 ^4V'â'aÍ9,2tSSS\G”(@7©T ±]¢Z­¢‰S©Qí^\\à ·Ûíx-x™·'Á¥£V«Ùˆ„ÍÕËùb2™^¿~Í:°T*e³ÙŸŒ@F\ç¸f! ‘êÀzx{{›Íf)G(äÁ;«TªD"1±`ýñUŠ“g!*ݰ‚cÔçóa%ÀžÏÏê‚*•ªX,z<£Ñ¸··ÇH™ß‹5³[[[:.›Ír Ò"à\dëäÄĤƒÁ€êÅÅOad0C…´w¬[Éçó+++ yüð=´áiAB ëÓ¥ÿë볨ܟ>}*„P©T³³³H|>_:¾¹¹¡—Ëå±X T‹ßïg¯Š,)W.;B‡ÙlÎårv»Ýëõº\.£ÑˆbCF†5ã <õDòôz}³Ù$¯DŸHUN2–!S6lu:þ‚¸ð~¿· €ŒZ­&ÁDÉ©R©@ S>³Rüâßû•H³Ù ƒf³™Ü?¤ä,¥RÉøA¯×ó¿2‘&!‰@A]©ÓéB¡1ÑX,vyy™Édèa+•Šßï_^^†”àt:3™Ìp8ŒD"©TJ£ÑÌÏÏ#@£¯­­Éd²……p’˜8%ÉÌÌ 5éøø¸^¯ ³³³_|ñE·Û]\\äÏiÄCær¹&''ñ5Á©§ŽCô`þŒuß >ÏÅÅì°p8ÌO°Ë ÷=×0Œâ…n·Ig¹d…N§‹Åb¸ò——— B¡ZìR«Õ ÇÆÆ˜1Òì#×ðŠMOO !VWW‰2Þ»wÀo0„Œ ïÝ»G…;11Am‰D°HQ8p¸cµZíää$/ˆ\.W*•´˜¸Mét:¶è9NjO³ÙŒú< P‘Ú µòþ‚£å…3—›_¹Óéð¯K†˜Op—4×*ÃØp8L>€±šU h6›0Ÿ™”jµZÞq…B1²{’È¥M|ôèÑÜÜCV6šÍæx<ΓùàÁƒÅÅÅëëklÍTÓR©\(4›n·»ºº*•J#‘ˆËåÊd2X_ǨWð°)•ÊõõuLÌø/°xá7ec‰N§›žž†ò@„µÓ'ÏØ–=|¨“ŒQZ‡Ãá`Ç#Úw.—ƒ5O¤;@UEt¾¾¾æÀ"ßý¸Ž¯Ñ`0àCHÀ$—ËÝÝݼž¡œbvv– ÿªÖr.Èx<>11át:Ÿ2ô¸â8¡Ôj5ñ÷z½¾¾¾~xxØû¸ åôô´V«½}û–<|ÿf³™Íf‘‹ÓÅCƒ8==e‡'ÕtµZe[ž ÆȆFcff†):{Sß¾}‹‡8×<>ql`ÐGÎtf6dÓÔjµÏçCjÇÕ®ú¸”3]¯×_]]qv !êpÕiµZú9!R$`­V{ssÃãØ’üƒz½Þh4b±±A4®\.»‚]ê<(‹ …âÁƒN§Óh4Æb1£ÑHuOÂívïïïg2™Ÿ~úéøø˜8:Ô£z½¾¿¿ÀL±T*ÝÛÛ;::bÀެßïgx$É«P(ˆÂ1çEq@w …ˆ•~ûí·džµZíáá!ÈLÚÙF£¨Ö)ÌAâs‡éÄΣNŒC"‘lmm}Êóôã×g!Ë@?'Ô·±±áõziÉyc˜~`TŸššB`ó€5‘Ëå\.׿æ&k†rLo´Z-Õ÷æææÚÚÚÊÊÊÍÍÍ¿ÿû¿¯®®Ü&ïÞ½Cñd8yqq‘J¥ê¶··ÙyV(ðÕ`⦭#‡)•Jñcé#O„DÈ' ¿ŠÕjÍår£è6sIfñ#G³‚q(R>èTòo˜¦ábÚl6ôÓééé““œÔjµÇXµZ%»(—ËÍfóñññöö6TÛo¾ùƒµ\.'‘Hè”;ÎÁÁ² ›}@r_]]% ¦¯¸´Zm¥RÙÛÛ#6I3 ®™ËR©d›k±X”Ëå¯^½¢îkµZûûûV«õôôt{{ë ªîÅÅE>Ÿ'tS( ñ&„Ü|(<ˆx¼PØ„©hµZ#æ3 [V×cl‡TÅ$] x-(¨Ê‰h¢„‡Nà(ær9£Ñ8;;»¿¿OºÕj™¨ÕjF˜ †ÃÃçÓ9??a*ŸÏƒb¾ººzóæ ²ú-@]R©´\.—J%³Ù<66¶»»‹7¦^¯¢Y ‡Ãl6Ë ÆjµbB'´ÅJ[³Ù\(®®®æççyþiVØ.‰´r{{;555ëõz*•r¹\|pÈcã+ XQß¼yóøñcø}È;ggg¿üò bc2™] …4þüóÏn·ûææ†Of³™ ƒLA½^‡á>>>ÎÂ÷‡©×ëÙÛ§×ë9÷Ãáð¿üË¿<|øðü#¸fÇ“H$„n·»P(ÐÄ___¿yóü‰ ìy‡‡‡8ßs¹ržà,µ™L&+• çïîîz½£.òÕƒ9üçðõYTîñx\199‰ýÝ>ÃÉþþþüü¼Ãá8??üø±Ñh\[[;88øöÛoÉpÆD©˜%‚ ¦~a)„°X,hÖð=F3[Ö8ˆ- sss†ƒš"ó–ƒA‹ÅÅt||üúúš~[ˆç››þuNRŸÏG• *$ã»ápÈÌp8¹ÄÝŒž>Ò”apSôû}ããã £ý“jYYY¡Z!Ðït:ãñ¸ÅbÁ‹‡ÝnwµZeòLÌ/‹Âõûý/_¾DšßÝÝ-•Jt²étWöS<<ŒÑHu»\.,ù^¯­¶Õj=zôˆ T0dti±X b«ÕÊ!…à^, 5 ´…J¥b4Ng¡PP©T£]£Tß@)(¢u:¬+44J-°3b%õV*•®¯¯÷ó®9Î~¿¿··ÄÏ•Õj-‹°ÑëW’Òî,,,0Šdë BVÓ ‡Cú}þ vPØæîî. ò¿²ÊŠgx^˜˜`q3ž+ûBÆãü!ÔR\¼´’ÌQÿ‘#˜ƒƒƒ¯×KxDk2™4 ÓÓÓýT9ù|Þív/--±!àôô´P(°4üòòܼD"!p055 Ýãñd³ÙËË˳³³\.'•J—––0¡U"ñ“˜ ‡Ã?þø#¿¨¬È\ôÁ¼5$õ¾ÿþ{‡ÃA¶†ÁýpWóNᲟB€—ÉdŒv5 VòƃÁ›& R©üLd™Ïâpg+<–]0Ä:B&Ål6g2æiÍf3•J¡ŸÜÞÞV*Ö{âdÂÁ`s{{›Å¥ ô~»ÝN¥RäéüñGÇÇǴÔK±X ’t$B@ccc « >±W '/ ²'„-ɪT*ªN¥R O×#ÝRf¯×C}"«Mü4vj%Ì| ñVÈbaE©Tb­ÁÎν'º;€àáAév»™L&—Ë¡¨¤R©áp˜J¥¸¨˜ÓÓÓz½n2™„(Âü:H(¥Rikk‹›ãÕÕUï±hŸ¢ÀÅÅÅáááÄIJ\.Ç¿> vww RÞÜÜÐs@jãíãƒ=ú†x7G1Kb@%Ñú†Ùl–Ëå•J…ð32.YV‚ã …‚WÞét²ªmqqqħ¹¹¹q:P„V«•Œ"2¦[L«$ò2™L,“Éd™Loþëׯm6[(ÆJ¥Ò¯¿þÊÜ\.hÉ‚²ºÝnƒ j6›|:t:î ä¥R ó»š& {§ÓI$£D4Óš±±1ò¨NÐ$åàÝU…KÎð–¿Îã:€.€àO¬ŸÝ/ä0¶¶¶h”;ØÔ¦R©d³Ùxg•J%}ê`0ƒLXù –‡ì œ%f$\êÍf3 )Š|>FC¡Ð»wïz½Þ£GÞ½{W,£Ñè`0Èf³Ìºß¼yƒI7 ^õT*e2™Ãß¾} >‹6†Àr¹üüüœ•pÍFb±X$ð $Ù';LÿÇ×g¡¹OOOçóy™LÆšPht=PG4RX,–H$’H$›à¦vûío ˆœ ŠÁ`˜™™AšÄSe4ív{½^§¬æÔcΆ- iÜŠ88Ç‹Åb¿ß¹P cޤ¡“ÉdPýø4"gSó¯€ $åŒJ0KÔrŒ#ôRÆg|ô 3Ñ‘¦¦¦F$¤R):^¯ÇãTpÓÓÓ …Yá„€C|bbâ»ï¾?B ãÛo¿ýõ×_gggñ#‘½d¼1>>NŽ!2D4E:˜EΚ™™év»årùöövnn.—Ë---Éd2¼LtýÑh”-ä>ôx<µZ ·Y·Û™™akZ 8??'„Ýh4noo„áÔC´!PAl00Ÿ1×îîîŒF£ÉdÂVëv»Q<´Z­J¥"Ùˆ@û‚–J¥ˆ›SÆk=Êçó]]]=˜Ù×ÖÖÄOMMýÛ¿ý^#hhƒ! 1yüø1ï‘J¥zñâ½)[ Ž~œò]‰D¹\öx<¸Â@V`Fôûý¤½0 °± ñšq4«\1½ðk‚X –'Ç™N@ à%//V4™LÆõφ癢žÏ)O&µ­ÕjÅîrïÞ=t!£Ñè÷û‘Y|>:Ï?ü*€üøø¸Z­2)AHÙßßW«Õ$-¤R)ï&Ü$Âk‡he$#~ûÛß¾~ýš$Á¿þë¿’zaµƒ×ëµÛíX€j€øå—_˜ÏóaÁ S2;‡ ² ¯˜.9ºnA(Ÿî(ý__ŸEå¾´´t||<þq•,xÚ(†EøonnXÎpyyùèÑ#àÑh”*+e‚v¤Žþ›%|ñ}0°½ŒdµR¹\æÆb1!mqqµÛí\.‡Y‚ÁN²QN„µÉ_À°Ä• ÖŽ3ôêê 07ö4ªòv» ‡v6DºF£‘L&///q‰Ð6 “ÉıH”Ži,¦sjµúðð4œkŒ_Ô5B¸L&399 òääp.—cMˆ…û÷ï»\.Îb,†Bî6ê#ºûgÏžžžnll onnz½Þ±±±¬cðñÿà°Fe¢»œ*x²b±L˜Ñ%<–À1!äjl4•J¦oÊGÆÉÉ ÕMˆ‚f³I?ÁÎL¶eB·'@ËŠmŒÿ›››ÅbwB¡@™aSO·ÛÝÛÛk·ÛD%:Îúú:‚~£Ñ8>>ÆÈ2Hòæãú7äžîc¤^BÅØ„xx 6"D…îIºj¤¨Àoáùä%ÅÎê%ŠnŠúV«…—†^™¶T*aî­ Êd2Õjæññ1€#`ÈŒF‰´ÛíÃÃCFƒE}ÿöööõë×øws¹O8X…J¥BÅÀc ÿTÇÅÅÅîî.¿>†1‡Ã‘Éd>|øP*•ø&0!øÀòZ__Úï÷·¶¶HÆÜÞÞ‚IàŸ8==‡ÛÛÛB‚)8ŽJ¥-·%ãÅÅú-'c| a°ïß¿ÿd‡éÿøú,wÇÃ:‹ÅBcˆ9âä<|Aÿ vtüòË/$w²Ù¬^¯/‹"ù»ëëëì~Ëd2V«õììì矖Ëåù|žS²Ýnooog2™r¹¼¹¹y{{Ëœvgg‡ñÚþþ>S©\.Ç t Û!†Ãa©TÂÑjµ°['{‚ ‘Ìj2¡LAäi'''±€…ÌÌJ­VS¿³{̺õ8MÀ`0Àʉ¶ˆ ‰A‚˜%‰°‹‹ «ÕŠ·áôô”8Œ‚¸ÞJÜ+.¬8P(ÇÇÇ{{{Ãá0N#‰p\bIÒét[[[ôÝn®÷Ï?ÿŒ×0™Lîîî^^^²$šÕõÀC2 ¡]ÃH~vv† „ü*ÌHLø—™ A´Ûm>¸H1¼žŸŸszÚíöx<.•Jy©Ù|ôðáé©)µZm±XX(½‡ñÌÜÜýͽ{÷¨à`¨¥~øI(B¹W`%)•Ên·›H$èÕ ˜Á H§ÓÉdçrÅ8K{½k­VëÉÉ ˜¶UŒ4ŸZ­†ÿûƒÉ DI–¹“¸!ÌBg†Åb‘£†3Ÿ>Z=F‹0‚ªÕ*i ~lð°n¶··®²¯†´WT·ÛÅ7 XÜát:=YôÉÉÉ@ ÀdûÉ“'¡Pˆ€7: w9T< O(Ìl6»ÝƒN§ãóù^¿~Ív=øÐCóÙä>f”ʧž¡­¿,‚$j~§Ó¹¹¹‹„@¼\._]]òãz( ð;ñ/}ÂãtôõYîÿôOÿDR){½^Z?0C8g(~ÙuF@*•"-„¸¼¼ôûý@`tëZ,üRXŒ=ztÿþ}þ?˜Þîß¿¿¸¸˜N§ãñ8 >¹\¾¼¼Œ³…Ù,|>ˆw¡Pˆi’Ùl9ºðí2ÅDl±XP–°¾’âéF)lƒÁ “.>Ã|˜×ëu: œdˆ¤Ãáç><5ÒªƒÁÛZ­¦GFàŸ¦'¥âå‡=zÄxöÙ³g¤x–——ù•0ÌÏÏS÷áˆÏÍ9ëóùúý~4E†>??gŸíÑÑQ(Òét¸w(§e2ÙÌÌ 4üÙÙÙ§OŸjµZ,Ï«««XP–––°+8α±1¼RBLfÁ`ä Ç7Îô‰‰ \¸×é²1,A*GÅס×ëÝn7ÿa0š !ø›ÍFì–K—e gggü ØdYHÂo„'„ !ð¾M&-`‰z½îñxâñ¸L&‹ÇãÏž=ƒK555U«Õ–––`Õ !VWWyN •2¹wï%CÞÓ±±±ÛÛ[p(ý~Ÿ]wtF£Ñl6ƒJe(‚ïK155…˜ P(¼^/ãPbÐZX:×óçÏÁBh4 arsý~Ÿu`Âü~¿Â`0°ÒEáHg„9qL™Íæ/¾øÂëõ‚4X]]Å_‡ K©¹¶1¡s_’õW*•‰DÒ/KlhgùçaA‡Bœžžþáp:_ý5Ã<‹ÅB´Íår=yò8Ç£Gˆµ³v˜(/ ®(Œ`/³™€ZЋж•(¢Ñh$ ¦R©¸,?ù×gq¸ÏÍÍQOWC"$¸; C¤øøì:¹\^­VÝn·×ëýù短V+¹NóÛÛ[VÔßÞÞâ#fòÓívù0“ ¨Á¥5…ïƒÚˆUŽÎÝív“˜€NG%Bè£R©Fo4œ’§H(”*„¼Ù³C|¶%9i!u=nâ|>?BÆ—ËåN§CÊN:qø!ìðDY&>Š™”Àéé)®y!NP¾'.u>·»»»PS^¼xû×Л^¯·¸¸ˆˆDb6™Lrž"‘s¤¦ÓiŸÏGÄŸj·V«=xð`uu5‘HàNaØHhëàà{âþþ>;7XPGy‹A€Ö~ÄüŨæÐÍáP"@¡„P¤S¯a·‡"Ûëõ²Ù,v#{¬J¥ÒÞÞ^¥R!í6N—J%r’•J~­V;88ùÀˆžw* õz½t:}xxàðøøØb±0cD°F„´Ûí•J І‰E¥Rч!|ãÆ0r–XŸR©¤²FÁG;==͉P1_Ї²q~~E•‘ÅN§c2™PDñÞÐË"aUã)¢ fúÅëw“B¤Ñh°…dË LF€q{{{rrÂÒ~f|º¥RI©Tf³Ùd2Iø6™Lb¦¥K$ÕjuoobhooCv{{›¤Ò»wï¶¶¶xà›Í¦J¥b  ûôôÔh4Êd²­­­QKŠ($‘HÌf3 ïîî"‘ã"¥Rɇ8Íã6˜Íff0­V ‘ç“}‡;{8•P*92NOO'&&NNNŽŽŽ°93šo·ÛûûûƒÁàáÇlΤû>::*—˧§§ïÞ½£åUît:¥R©P(ÐÈW«Ur:ý~?‘H¤R)¥Rù·¿ýíèèOäéé)â Ã`0¸¸¸`/› |ïíí±^’ÃB’œËT‹ ;ú ¡°·Ûí{÷îñ0ét:¯×;==+1S{ò¸°V‚ZÉf³ÅãñF£Áhë'Á Æ>r¹œe°<‘£¥N‰DUÝ||<“ÉœQrîìì¾ÝÝÝ5 ÛÛÛ©T Êææ&££#Š» \ œ•LÛÒé4j2°_ï߿Ǫüý÷ßÃð*•Jù|ž©ÉÝÝÑ›­­­V«U­VqÔ0ÆÀ³öB|X2D"!¶à…YÔV" £…•J…÷…‹Ût0@ÊŒÇã°*oZ­ÖH$‡©M&“V«u8>Ÿè`4ÅJ¸Ì®bô\$Z­–8kgàÊrnšÍæv»ýáÃn>°J¥êÞ RB ÏùŒ°¨V©TÒøS­3Câ|ä ç©c£ Nÿ³³³‹‹ Ùǵ‚L)%ÈN•J%›ÍGbÕ -K¨™%B´¦Xa<–L&‘R f/Bg/‹ŒÔjõÉÉÉùù9×*99©?ýéOÄzU*ÔFf­KKK´¹³³³ ç<ÏãÇÛí¶ÏçûòË/)®1kbÐ↠IÚƒz(—˱Z~SÞ¯D"Å ‹HÅósvvÆúš³³3Ààív;›ÍòýÑ÷YÎL¡FÍÔívårùg‚ø,Ü2>ŸA™ª±¾ÅbI$\¤…´Zm±XdÜKK­VC–Ðjµ×××Xª‰¿þó?ÿ3†èååe&¥úgggm6[*•‚šòõ×_[­ÖB¡€‚ D.—ÿæ7¿9>>B`We¬1"n8Žx<Ε½î F£ñxÐA³Ãl6ã,$/Ã^êS»ÝŽój p ³Ù¼¼¼Üëõ‚Á ^¯ßÚÚBº5 ÑhôîînaapP8>==«Ë‡„—o5ŠÎBYÐjµ,‚€¸‰Dl6Ûôôô?þˆXŒ8ƒÝbuuU ƒÁàÕÕÕææf4õx<„L0¼º\.N‡vO\“gCýq¥™x‹Å‚fŠ1 ^ìÆ±è” IDATx»ÝΓ#“ÉaƒÛ!L&6¤Uª9,C¤É0Òh4ÔŒ|>Kzii)›Í²Û“ä-C"‘ å„‘t4ˆ¤ÙÙYp½^Ïï÷?}ú”ÆÂáp ‰I$’ååeB ­V‹$~JÜ®ÌEÕj5„¾N§“N§ (\Ãî…kÐb± ‡C–mÁFþ‡‰·=—ËÝÞÞƒA»ÝŽÄ³K.š\.×jµz½ž²ÑÒl6C× òÍ7߃F&nzzÚl6çóùÙÙY­T*ž×étúý~J ´¯‰‰‰ÅÅEš·ÛMÏÍHC¡P0ÛWðôéÓl6‹ªÃ499I ¨žT!·ÛM”—œ âw¿ûÝñññÏ?ÿÌÃl³Ùü~?«Wêõ:óRÜÌlhX»Ý.«4O€ßÀ½j6›±Zàšc™ó';Iÿ÷×gQ¹ãQÄ“ÊÖ7¨{ÌÙÿÂxc¢‚—ž ÄPà˜s±'®­­‘aq;±£2¨¡‘—}\ï Œ›™ /#™‹|>•˜<Ó{½%#JV##éR©˜Ø ‡C¤ƒËËKUô©Tнôõ§§§¨À(a¶Ûíd2‰ûŠßˆÀ'½$?OµZ­T*”Šf³Ùãñäóy}€Yõz}ww„@±XD’âÂ#±µ†Ÿ¾ÕáááØØØôô4¥:Kn„Œ‡B!THð–t!Õj5 ²æ¢Ûí‹Er¤½^ïððƒŒMoŒu:®a!BÓhY · ^¯§ U©T¤À8‰ã2œÄþ/›^ÁŠxa±X$77éüü|{{›”Óp8|óæ &Ô/^$‰b±È°—;¾P(Ôjµýýýƒƒü\•Jeggk|¹\&k³³³Cª™u»'''zT‚ƒÁ€b‘‡³†*Äb±ŒÜ\V«µÓé°Æ–½KdYonnH>“J}Åá ¡sô² BBô4 À/Q–™²rf]]]qùu»]Ø“4Iccc˜Y‘/د]©Tx¼éxÝF5>‘0û²ô˜û›é%ÊÌßÿþwÄ÷^¯÷믿rÙÿå/ìX,yConnׇà3KÆÃ³½½MsðæÍ›óóó|>ssÓn· 9RbèdH$´ð¨ãºét:‹Cß –2j´ûÁ`Àª>ÅÓÓÓ:ŽÄŸB¡xñâŧÀÔK&“Åb±|>ŸH$´Zí‡d2Ù£GR©”J¥B 5D"‘ÝÝ]ƒ»»»œG80±hµZ6¥1ÃI&“€!I1·Ùlívú.®²n·ûüùóN§³¶¶FWKü0äåå%ˆZ½^~½P(0b*—ËL;‘))[®®®Ün7v«z½Î@’½Á`@î÷x<¿þú«Z­ž››c‹Â(­ÍfK&“ÓÓÓ(¿0[(#‘ÈÖÖÖË—/il1b¦ÓiV,©h6›>|ƒ{{{Éd’ÅÁ ©gŒ6-àËĈg‰_(N“™\__Gë‘ÍfårùÉÉÉ›7o¾þúk³ÙÌš'ÒO(9|,ÑFX»Jüñ”y68—ËåÄC"‘èt:.Üo«Õêññ1yT.Z2ÆÜ%£pk°Káóù–——™Ž¤'''¬ÞmµZ•J¥Ùl†Ãá·oßžY,–õõu“Éd·Û/..ööö(är¹ßïO&“¯^½òx<&“éìì ‰Öï÷¯¬¬|÷Ýw¬ãøÿøF2hb(øÍfóää„h:>??ÇÌÊX…K¬&*"IiHA××׃ÀÆ>–Pº0½` µÛíçççT»ççç$`ONNP'ˆ[G"(CðM_¾|‰d¥¤0#ÖíÎl6Ÿžžnmmú`šâóùþþ÷¿¯¬¬®×ëZ­fF¯×3+++¼ã\o|4jµšÙlöz½ÿûß±Óììì ‡Ã`0¸³³CŸ×n·5 °øt:m·Û9^¸‰#@ÇäC166¶··GÇÏ €Þh8ò¹†G=AD€/º=ÒL“““„l?‡¯Ï¢rÿ‡ø²‹…¡€f³933Ÿ™¬J `æt:Nçîî.4ŸÍÍÍgÏžQ³·žŒ£^["‘¸Ýn›ÍFI …ð"¤Â„ …BÌâIùý~,nr¹|ii‰nÑh4’?6›ÍŒò…Ä£pËÑŸêtºp8Œ3ŒŸ?xÕr¹Ì"ù»»;JQ"š4ðªðz½^è:f³ÙårqK±ì[.—‡B!Çs{{Ë~ ´ Ì<\0|ÃF£ü-“ÉœNç7ß|Ã(; Ò€x¼ººZXX@TáF©ÕjZ­–k¦Ýnój;¤Fm6[¹\¾ÿþÊÊJ·ÛµÙlêu:ÉdšŸŸ§lŸšš1*€A qM´Æ Dx÷9즦¦<œBvËÙl¶p8Lº’ï&ãn«Õ ì¬ÕjwFÏáõ¿ºº²ÛíŒô1žŸŸ3Æ<;;‹Åb¼ª•JÅårÙíöñññh4úàÁƒ£££~¿ÿþ}¼q+++x±ÇÉd²ÙÙY§ÓÉHÊ‚Ýn¿ÿ>†èÑOÕétþð‡?ðx,//çr9ü-ÌŠ'''§§§†ÏçÃz+•J RQ™Íf8æðÙ@·ÛrÂ#Š) ·¢ÑhäqåÇ)°¸¸ˆÔÀ§}¨Q0$§c±X ɰÌÖãñpŽ»\.”·û÷ï#ˆáa×ét³³³ H@¯×ã· yEK™ŸŸGçñjh ØQu{{;??‡Gp4‚©6›m~~žlPHÕjõýû÷U*Œt:m0ü~ÿÌÌ 5UÚØØØÌÌ ßPùqÿ°Çãyòä þˆQ$LñÝÝÝÔÔ”ÃáH$^¯7ãÉžžžFxúô)qòŒ™L†Õëׯ?õ™*Ägr¸ÏÏÏ“ª°Z­Äÿ( ɆÐT²F€»ôñãÇgggårynnŽ‚w´m‡èÇÁÁA&“ …Bõz=ŸÏ‡Ãá³³³íímǃ6M+:‡Q¶à–ÃGA€…=naajˆô“J¥Â{žÏçqÎ ‡C,tPª[ðVRWbþÛ$„@ía\ <6›ÍíÉårÔ€ ý‘5ØŒa´T*iµZÊùÛÛ[t¹\žN§Éø(•JVv:X,–Éd°ÆS™âìcccD6£‰bçê6x·ÛH$noo?~ ÎáéÓ§ìîˆF£‡ãääÄn·s>ÞÜÜ€:ØÛÛÁÏЛ1¯Ùl^__g‹“Fþ c¿ß' ÆMyrrr}}=;;‹×‚Iát:a5+ "»ggg%48g…Ð 8àZ“ô NH?®¯¯C bº%¿R©àw¢3›™™aÍBFvQ&P(ûûû———SSS¬•`Ž—ÍfANîííY,¹\Ž«„jwÄ ¢˜… ÄÊ:×™™™óósƒŒÁ<˜˜˜À&—ËáâšÍfÑÄ”`ñw‰«šôE@4:™z½ŽÑ–VÌh4¢¹çóù±±1€· x¼a‘R쟟Ÿ“i4ð5årùÙÙŽbá0®y‹C¡Ðþþ>ÍV*•š™™Ìz}} 5¤Óé$“I®¢ápøòåËH$R«ÕR©ÔÍÍÍÉɉÇãév»lý…ûX,s¹ÜhãZÊÉÉ ¿Z>ŸG®V«¤Êq%1¡T—Ëå|Ài {½Þìì,ýáŸÏR¡P¼yóæSž§¿> Y¦^¯£Ù)?.D¶Ûíh^#;Ùh¤Øóós [[[333´¨dXp‘ÍfoooqÚ°‘`mm UŒâææ†ÅÐ`Ø}R ¿—A½^ûö-~JzÛr¹<;; <Š À™F£1’0)·Z-ºË»»;¢Oívøââ" ÑÝ3˜pØét E4===Ź¿´´„É9’éF:¯× )¡Õj¡/Ó¢ò°²Èáp¼}û™åæææÍ›7+++P‚%Éíí-É~ˆK•Jðþ"Ü,ÝnW­V÷û}DpŠt: –ÒKßu:Ë庸¸x÷î¹MVêÍÏÏ¿}ûV1’ÝnooËå2ßJÁÎhª6H Ù 0“D'ÔƒäªÓéŽŽŽ¨Fq‰4›MvÒÚdäp{{K®‡v¤ßïs;^]]y<æ±pëÀvv:^¯çñx€OV‹Øíö÷ïߟœœÜÝÝÝ¿ÿææ†¹‹Ãá€|‚ÙÎjµ²šO4öÍ££#Nÿ^¯|æó·¿ýío‹åÉ“'•J…¸FµZÍår¨º§§§÷>†9qyy)„~\B{ww—L&)>øX1ÂE_¶Ùl˜5ONN„Ì3ŽŽŽxt;ï×ââ"©Ÿd2I}N§Q?Û0äÁb±¨œùùùF£qyy \lqqS,I=Z•J…Å;ÅÇG&“=yò¤ÝnÏÌÌ!$ zz8¾¾¾þá‡PÕˆ•ÜÝÝ]\\$ >›››0 Àƒçóùt:ÍŒ­T*±S›NÐ1«ê E ’`Ó:]l©TcÉàsøú,wêMºlž9£ÑHÀr||üê§Á`¨T*J¥rnnŽü*@¸R©´¸¸È§bnnÎf³U*»ÝN~ïîîŽ5¼CÙl´a,3›ÍÃá÷‰¹®T*%“MIBxa”Äã ðûý?ýô“^¯çƒÄÜÜ`0ÌÍÍáâà%tƒç«u%HE z4Ñ8«z½\ð[@3ˆaâöûýó)W)ëØº‰÷€]Ãü¨Bˆ………µµ5¹\îr¹¾ûî»ùùù@ ZÒn·û|>ŸÏçv»Ãáp±XDÓjµÀÏB^d|MHÝ\©TÆãqUÔ³^¯§T*§§§ïß¿?99 )ˆ±p«Õ¹ …l6HþÝPÅï÷ÿðÃh>ÌÒ%˜à¹\.99ùÉNÒÿýõYÈ2sss…B¡ÛíbSeŽŠ³…!R¿ß‹`Mr¡\.àåO"’¾yóæææfccƒ¿B ÍŽƒ‰’œÇ‚`“OÄY¦v¬¨ßÝÝE¾xóæ HñP(ÄŠ æ´øs¯®®Pr:æÒeS'b dKWØét¨¿°C )3·!2Ê%wuu…*E×ÏõƒvÁðââu‚OW¯×­Úí6LÊQØg0LOOCa3 ëë묅Úßßç~:<<$DC5ÝívS©îÝjµJɯÓé`œÁxá;ãT[^^V«Õ‰D‚äÔæææøøøôô4Ã(\†0C,Ëû÷ïY:'Äd2 …L&±ÞØØ«‘ â ˜XƒºÝ.]HÜív› ¤bdUªÕj“““ÈdÇøÙ(ù©XÑÈ?sÈårµZMÖ‰Ú×2!õ££#ª““™LúJ*•Sâñ~ñ¯ÐÍD"˜ ãã㇃:ÔjµÂÛ1›Íår™Ô˜‚Ó„ǪóU†NG«ÕŽþ›Q¢Öææ&žQGÄG¡qI¥R€-èLY1Øpžžž:N»ÝÎerrÑ 6òêÙÈ}Ka00?Ç܆pâÑ\:bƒ“A¿µZ-þpc(¥\'dSð¤³B„ˆ ±µµ5>)r¹œ>à¯ý«N§ã¶æ¦”J¥»»»„̉ºQ~L&Óîî.îUR‡|šPÓjËårœfà7¸Ï°‹ÊRª5€C´lø¢Z­Tä,ìÏ?üðƒ‚è)©–›››ËËK·Ûm2™Þ¾}ËðN7vÝn©·é$(Þ´ð‰Dâùóç÷ïßG»t»ÝD Ád³Ù‰‰‰­­­l6ËÁx½ÓéÀò!‰_!”°ã$$Ÿ[Fó¸¶gff.»\.€×333ä³¼^¯\.ßÞÞæ'A—©1 fffÈæMMMU«ÕÃÃCíÇ•Ídñ“ɤZ­ž¥Z¤¨év»|8;N*•ŠD"¼¶l§!(‹Åb‘Y“:N×l6A"F¦ôù|?üðÝz»Ý~õêf»ëëër¹ìõze2C°¨¤¥öööþô§?‹Åׯ_£`& ü^HÒœAÜÁÑp×PQRú‘ºä%• Ï*!ׄ2 …âñãÇI€°ONN1;;;‹F£¯^½â.S£V«Ù.»¸¸H®(#VQÈY4 Ì]„áp˜[™á0óp£Ñxxx¸¼¼Œûþêê é†ÄÜÍÍ Óä#‡ÃA~•l'µ*‡>vR&R¥¡üãàR«Õì:??ç öûýì0Òjµ”«ý~¿P(t:xBqÖ!P‡ »Ýîr¹ŒAèÅ‹0§¦¦Æ>®»2 Ôk6›qh½^W«ÕÁ`ðÁƒXEÇÆÆŽŽŽìv;W–e{½ÞþÇ…VP¥Ré?þã?®¯¯û|>ìk*•jaaÿå Ñ|~~ž­&¬ûÉdPp÷ööL(f^êõz‰½€YÚêM°®‰DÌY6$“ɸ–¨µ)T!ÿ£g<Øl6ïíí;ÎF£ñþýû©©)º„jµŠNBsÀ$v0LNN’‘N&“$¸iðé“H’H$,zf©Ör¢a< DØÁ B¦%ñÄï¾°°P,…tÔéX_b±ØØØ˜ß金tæóù˜ÙèõzÎhTè üÓÐ’­Vëòòòîî®Édš™™yùò%[‚ dä ¿ßϘš€¨b{{›Ïr%séýý}æ‰o»V« ‡Ã8sX¨ôüùóíím"ÙÕj•Ìçææf©T¢oH¥R‡‡êÕ«WOž<¡$Êd2Ïž=;<<´ÙlN§sccƒŽ™è?}c­Çlžõz½þóŸ+• }C»Ýæ( ÎM‘g4gffXBpÃAGgpyy‰e¸Õj=|øP¯×㸕J¥°09 @Ñ}ªƒôÿóõYîÐÔ /⨃pËSH¥Ýn¢\j6›R©t0°1Çét6›Íl6‹hÀèf$DL&x–é¼h»0•ƒú#öÉ`´H£ÑØÜÜÄ{@xòìì `7—G$“'“É„àqªå¨×ëƒÁår1³•J¥¬Žê÷û°IÑÓ…Á²;ÏÒé4¦!D¥R¡EÍçóåraÚh4 …ÝÝ]’,ȈAíïïët: 6ìjH&“ì”yñâÅŸþô'|5tô­V+ŸÏ£&U«U•JEl„m|ñxœV½ÝÖ VåËËK K˜¸AÃÚöù|‡‡‡Ô†…BaccãÙ³g´PÄhi Ë´Z-6 B´G‹èv»•J…/†¸=¸qvb/á–¢QBmÑjµleâêBÆ%鎄%•J§¦¦šÍ¦Ïç;;;c÷ {<9ˆÈ(i™L½Øívß»wÏçó±ä§Ÿ~b%b=ûxºx‹G{!ÐÄgggÙ799ùã?bo%N½\.sÙ#ߦå¾D¸k·ÛJ¥’G‹²ìaÈA‡„,CÇS©T&''™“ãÅ\4™'[o6›äP®˜u»ÝýýýñññX,¶³³uFf¿ßgwo™F£Á9ÎópwwG< ìòòòåË—&“‰ãøòò’Vƒ áA8årùììŒÏ Õ:ˆÊËËË÷ïß3b,éë>h4¯×‹JÖh4¶¶¶ÐÁQt:ï¾ûnff†ÈN ‡Ã1ZÓH ‹±‹q0¶ã ƒ“““Ùl–XÖð㺅B½B­V—J%¤*!D½^ÿ4Çèÿïë³ÐÜ?~̃;‚C¡—±jY©T"nàwDÿÝÞÞ¦Ä(‹étzkkK£Ñ`œ@Z)•JìÃCý<88 ˆ–H$xrñ’c$ØÚÚâÄ!ÕMK®P(t:Ýþþ¾D"YYYÑh4»»»¨ÆÝÝÝr¹ €”¤yešÜ£££‘-¼ŒÑh„©ÂqÌøñˆíNcffFûq•>ÜF£Á;FÄ“““n·›Ð)5~0Üßß'þ~zzŠŸÏétb󘛛Ã%ít:ìP"4t}}H$ìv;¡YÖJð4¥*•JàPÞ¾}‹±Œ9Ñг³3¯×»½½·áööö?ÿó?Ñ[®®®¸!0K¥Ò££#“Ét{{ûþý{à·ˆívG, -…BA>Ëårá•â…V£V«1Ø@µäY"’6ÅŠ ¢'÷hµZ5ÍÜÜzK½^B‰)–XC è÷ûsssüã ÏLNNÐÇñÉù` =v@Ÿa_³Ùl~úô)ÃáééiöTà4?<<¥sU*1%¬;dpH_C½ÇÆØ™¡cÜü•Jm 9fÅÇ­/ø|:ŽN§ëv»»»» Ð[°ý ‡C&RçççìÙà†ãòæ²pïñx€ÿjC j6›h•8ú ß2Aƒe­n³Ùœ››S*•ñggg:yž?Îw#BPÙn·?~¬P(ˆ¤0©fó-pSvK9Ï1‰=Æb1¼ÎÔÌØ8й8¹íÎÏÏ»Ý.fPø¬Ùrrr||L¢ƒ½}üÆÆÆ§=Qùú,÷/¾øBöq=XÇp8L/Ùœw8ŽÅbÃá0‰Øíöb±ÇC¡òB0äôD"ØTæçç… …"|õÕW|äxÎÈï‹Å‹‹ š\ƃv»=•Ja¤Ñh4,]¤é†ëŸ½Ùlâxe$@|ƒ ä¬V«Å)ˆ…2û|>2&‡²#B|¯×c“z·ÛeLÏÎd2íííA×Ëd2ˆææD´pA&çÂ`c;c+¾ùævãMMM1Š€f|yyùÕW_ÉåòB¡@R\¯×ÏÌÌðš«Tªùùy>fˆÎ …b~~žõÇOŸ>|vwwY7‹Ñ§Ëåò¹¹9µZ%qnn.‡Ñjµv»½P(Œ6™Øív&"6› 8˰Ør||L×årEáÅAiB`4Öh4 u²{LG i6›ô‚ƒÁãñØívdeF|\WWW Ò›³C‘5.ÉÛÛÛwïÞY,–J¥rzzŠâÇK¾Éd"`Ñï÷ãñ8~µZ½°°@´3”ý‹trì‡Âà8Z°Õét`ÁÏÏÏc'w¹\8>™!ÝÝÝù|>¿ßÏ$#Édb:¥P(+ Å“'OšÞÒÒ+ƒÁ@è”Ok UÚív·ÛÍwã“‚j´x‹”\.ç™???þÑét@ t»]@OtNBMJ¥‹ÚÜÜᣣ£J¥R(Êå2¦Û7oÞÆééé\.·±±!çÝ»w 0öööööö@i•X£ˆm—•Õ=d;¸áÂá0Àä^¯G–¸Ýn/--A¥Ç9ªxð_Ž}Ü|<ÙJR[¯×£PE£Qî¶0b»øþûï?éúÿ~}‡»Ãá Ýce>tl-2™ŒaÔ©TšËå€óít:(`B;N6›åÏ£‘‘ŸÔh4h#Sšb{{j 1KZ3¸ƒz½þúúšÂ$çe2ŒáXY`‡ ! ®®®Ø­Üï÷óù<;8 —Ë´Û2§<<,¢’¬I›ŸŸg·‹ÕjÕjµÔ¶Ýnc@lBd|p #_`µ„ìJ…R(xIŽŽð„QÙI¥RˆT©´¸Î©åE1h¥o4¤¡…€V'Á$„@LÛÚÚb¸^¯G¯?;;ÃöÃÊOýë_q¿ð‚üåÕf7n´ $#GM­Vc…: ^l–v]__sr Ï* IDAT,òú3X²H|ìööõ©Z­BûŠÅbJ¥2 …Ãa—ËE •ع ¼¶ÔŒÍM&Óëׯ{½^2™L§Ó0~³Ù,ºÐÑÑÑÑÑçlµZeìL¦\.çóy¦Äkkkwww'•JU«UƒÁðáÃbµZ—‚tÛÈú±òWF¡ÑhØÃŒºM“ÄbTFPz#A@=£@¡K†‰[‰ÄhDÄ^o(¤È*• ”…D"áW&š”Éd”J%N›f³ÉMøº“““õzÛn¹\f; i¹¹¹éééÅÅÅÛÛ[r­\r¹|´mõúúšMëJ¥òíÛ·p“É$ µµ5ÆND7èÒ¶¶¶ÈÑ+H$’íím|k<`4"|œY´B¡\.·Ûm„Íl6KÖóZ1wÏï­Ïgâ–ù,÷H$‚š‰iïôô”œg>Ÿ'©Üh4p ë  ×ëQó'“I›ÍÑåòò’jnŸÉøññ1LN¦^SSS,ñÁìÌŽzˆ K$Éþþ¾T*u»Ý`jØj„G WÏÅÅ-û''B*žžv»Ýœ):Ž3T,ìØèEƒÁ€mÂ|’'''‰Û(•J‡ÃÁê ·ÛMV‚”¬Éd ƒl mµZñxœY“ÓéÔh4ˆ,µ€Î˜Ëå@§íì윞žºÝn™LöâÅ‹™™£ÑÈÞp½^#0 Á4‡µ º ä/=øäýóÏ?£½2Ù&sŸJ¥677#‘ÈË—/³Ù,ÇZ­¶°°0 vvvb±Ù¥Á` P( …\F_H=B—ËüXW\Rý~Ÿ-Ø »är9ÛE¯? U2½¬ìàÏkµÚP(„i’ v¹\ŽÕjýòË/+• /Åêê*^Žßüæ7ÎF£1‹Y­ÖÙÙYf¤4‘*•Š`ýìì,FUFz½žÕ²ë¶··“Éd8>??Ïf³SSSÉd¿?:/¦xŠT#h0üÖBˆ»»;‚ûÉdòääÄh4ÂJ’H$d¤é?”²¢àää„Å5L¤…|Øh»ÝîÕÕ•ÑhDÇo·Û.—ëä䄌@sæ"¸¡˜—œŸŸéD¯‡Åxww÷ÕW_­®®áBaZÃHƒñ/µ0”S6òÛ ‡Ã{÷îU*ÆÝ£ìËÌÌ bÚ¯ññqf§ ;8ŽQ=VzÈ_@a C( ^4¿ßñ©–ÙE˜Åb±Z­ä“ûýþöö6 ghõBæƒ#,•èg‚üý,÷ÙÙY’âìÓ"ë —Ül6¬/Ýn7‡ƒ_˜L& ÃÂÂéD6à@ŒôÃ2‰´Ûín· ø… [«Õ*•Jp'à^ѹ\®n·kµZÑŽ,ˋŸÞÉ(¢‰CAA°Ã)Ÿ’É9[‡Ã¡P(Is·¥Ói“ÉÄîÓÑB ¸Wh÷cccløCAfn ÿ‹õеZT*6ÇV«¾Š ésðÂwwwOŸ>åôŒF£,8D¹¹¹ ‡Ã,Ðét~¿ßív³`Æ}<·Z­¯^½ ƒÑht}}]"‘<|ø°Ûíò‡9VØ£„O6z±XŒÅbÅb.ëû÷ïÍfs4­Õj…B‚k¹\½‚JÊÁE¥R© ê(  4× gaVAYfv'Ÿ¶šµ;>Ÿ4«X“F„êüü<™L~øð¡Z­|ÿóŸÿ|yyI?G q}}½µµ ¾ÄF[,i°óhmmM¯×õÕWüC‹…nìáÇغ½^ïÊÊÊÆÆ¡¤³³3È3¸k òòI³ê§Ùl¦!Væ:ª6› d4 †~¿ŸGÑívƒêu¹\ˆdŽpèó|J¥R~ :âµ8‘p!OOOÓTá»Åe·Û…°%T*°-¯×KÃëõRH­¬¬05=::ÌB‚!NK¥ÒÃÃ÷oß×Òh4¿þú+äœW¯^q7W«U€K É+ôz=†^4£‰djjŠ¥›YqʇC·ÛýäÉÄUŸÏçr¹Z­Õ7\xl!!r°Ý¶%scv'''°t¸³ý~ÿ_ÿú×O}¦ ñ™îè' ¸8• FgÕ=>h³Ùìóù°”* ÖU3Ge¾ÁTxXt5ÍÖÖV³ÙdWÖÅÅ…R©$#ô'Nc\;88 Fêõz…BÊG«Õ:<<Ĩ°¹¹‰äÍÀ–¶–F£‘Édð’fäc_,±^`B´?î¿öûýè$V«è<¦jIœ¶Lzé F ³³3^1Ätò÷|¼Ñ(...¢Ñèý× !ªÕêÆÆCHút²BìÄ`_msTl dŽV«]XX`6 …°úñ‹____^^®­­1H¸ºº¢6ßßßG”àýå<ÚÙÙI§ÓxŸ‰í›úý> “Ideä¥RÉYP­V- Ç7@!þ$nÝn7™L²‚¥"Ãá°Z­Öëuøˆ&“éææ®:')žX,f2™@îPØl¶ßÿþ÷ïß¿ç¸$êÉŽuV?³¶^¯³4=%¦‘ããc„Žl6{zzj³ÙT*U©TÂCÉ@’A1r Õññq/t{ …‘ .J©Tbb‰»œ`0 ?±ŠONN`-®@Éytt4;;Ûn·R”J%fžù|žùöÅÅE½^ÇD_Õjµvvv...Ìf3aöÃ$“ÉN§S«Õð°þ‰ôl*•B÷€­´¾¾Ns̳ǩ՞={¦ÑhìvûÒÒŒ_½^Ϭ‹I­V»ºº‚)„ ßA„N£ÑH$ŒdÞ¿ÏK)l6ûüùs²rØÕ’É$ÅY™L†íì ?-ʘD"ñxŸZ­v»ÝN'N¯×;* Ñc©Ïðé³ øéÓ§ã¬ÊB`Æ}¦=|Úí¶V«ådÀg„Xò'ÿú,÷ÕÕU†u#s.h8ԎȰ†8 eáBÜ¿Ÿë}vvÖï÷ã´[YYÁEÎVk‹‹‹xêÙ Á[ëñx.//¹ç™ì±üš*ŒÓ­Óé­VË@œXÇ!,ê›Íf·Ûy¦YÝÛét˜øw:™L‰D° ÎÍÍÉårFÃÙ{pp€ý s'ÊXµ˜4ðó^^^â‡B\¤LM™¬¢_“tÅ]ÃÉb±XÜn÷éééÒÒR’ÕjeFÇ«>C¡Dx>9ƒÁ ‰D£Ñb±Èoj³ÙVVVF;$ïÝ»‡{ÿþ}Ö ƒÒ@Ÿ”ÆÂÂX¤û÷ïƒÒeø½Å àíÝÝÝõõµßï'ÂJv¬Óé”J%È*¸¹9æ`—ã“b0b±}Ìää$ˆÁ`…BÀBÐÇpCE£Qà‘p``‡õûýµµµƒƒbÊšÍÍMêý»»»r¹ÌÞÁ7oÞ´Ûm‚‰DÂår‹Å ¬–(à4ÐÍf“n•B"ÙW!‚ ~9ö÷Â…T©TÈ÷â™a˜~G*•ÎÌÌ …B!Ö-˜L&Æ„¡PW²äÿ!ÿûkvvØFfÀP‡C,Ï2™l}}Tù½Z­¶±±Ñ3ŒT*M§Ó»»»ù|ëõõ5@ ¥RI3ØívK¥æb©TŠBwuuõæÍ:SøZ­öìììààTˆÁb±xxxHD ‡ RÒX&“‰‹=KÂóôf³É‡Ÿ49P$ú¾x<Ž Ó=”`æÉä¹$I©Topyy l„_ú<œ³³3ºËwïÞA¯ÓÁ|ÿåË—ßÉd’#/•J±À¤R©ìíí1®ÌårL™ðjµZœtÃáðøø¸×ëýüóÏ„?÷ööh>’ÉäO?ýt~~tµt{{{kk‹õi˜ÞŠÅ"‘™L–ÉdPu2™ IZÊÀ‡i·QÉZ­ÖÝÝ¢#bØp§§§,ª¦ùÀäRÁÈMÏ¡T*³Ù,$(¤6›mii‰B5´ÛíJ¥B_B %ß'¢=ØD"ñáÃv"U ‡C^¼†Fƒç-‘H¼zõj||¼V«qú¼~ý:™LâÅí¤edG=ΠΙ¡“Ï ;@ . Œa슺»»ë÷ûl^åù?99!P†Ç£R©lllP«âöc³ $\7 NËår©TbŒD–‡3W*•âƒR(„¨o&&& ÀðCëdW­ÉúúúÄÄ?¹®r ˜››£?[^^f¯2 ˜Œ+Y)e³ÙÖÖÖðÃ&Ëår¯^½Bø|¾/^€ÜI$‰D‚÷4›Í !†Ãá‡ø¨Öëur3ïß¿gÛ-Ï<}[Ÿ¸¿'&&P>|ø P(Ëw:ápÈ6P„#:ïÿ[ýß_ß~û-–§ÓÉÉè÷û…ÍDí9ÑhØâˆÒ‡FV¯×;Îîî.òî7ªØ90ËçóùQ¿ÏHòr–ÓéÊ xggçòò’ÕÉ”0Ýn7—Ë! î£9â‘§ôදV«  ‡Ã!Á`€ £Óé2™ŒÉdâ~b`‹€Û²k»ÝÆ £R©„jµZt!õ2K'Èj‰DÂ,š`Ûì`Î`—>>>Öh4ñxœÅ~çíÛ·årùÙ³gjµšeC#±H*•¢PNbê`fk±XZ­V¡P g¿¾¾ŽôyqqAìø`0@ß,—Ë>T«Õ¿üò ŸU^V«Å‰Öjµ²ÙìØØ¢Âw3ñ.Îôáp‰C4G§Ó q~'µ3×MŒ‚¢X*•"¤r²²nqqqzzºÙlóÁ¯Å’õž:î‹/¾ÐëõjµZ"‘Ü»wUN/2šÃáH&“,7G´yúô©Ãá ß÷z½Ün7ÎÅv»Ëå²Ùì“'O8,0ãöû}c‚xÉd’Ñ:§9±Ì»„´q1ÂB­‚ÕŒm Ô~ÎV&ðýá{À³Èóvxxˆ'„ÀóZ«ÕXR˜D˜{RŒ[÷Ù !ôz=v,¹\N(O©Tîïï³V‰EcBˆÕÕUšžn·Ë V«½^ïÝÝßïÇãÃápqq‘:Ú`0#ƒE u:×ëµX,···n·›• ^¯×ï÷3e ¢gyy™P¤ÑhÜÛÛW ÕjñXãªÂKFm§T*Ñd(qâ¶ÛíB¡Æ£\.3"b1 ^²Ov˜þ¯ÏâpÇãÄ.ÆÇÇ'&&PHµZ-Ÿ1¶ý‡CÞªB¡°´´¤R©ð–<|øT÷øøøññ±B¡ ;cµZc±ØÔÔ–vØLÇÇÇ ß!s !vº\.Ô•ÙÙYŒ°F  mg'‹L&s»ÝËËËìeŽÅb¬V`;;Î8@N >ºÝn_”q!þbpt¥Ri0Pu^__çr¹n·Ëô`Y£ÑÈårø¾³Ù,Ú=®8~Ž$¿ß|1 ñ#³P†á  ¶ÆØØØ_|Áf+p Û ˵Zíƒp”‡ÃƒƒXf···^¯×år¤Xn©­­-ŸÏGóÙ³g€Ra°0¥˜šš¢ƒÐv»… Ñr¹ÜétÎÌÌ´Z­V«µ¸¸Èùâñx, ãV»ÝÞl6Ù_A°Àn·ƒfCøêv»8ÀA©Õj^[H¡Pèääêz¹\N¥Rh¬kkkõzl$+X¡Y ‚ǰÙlc€'£V«>~-,, VðH.W©TxN`Táoá| ƒ@˜E·Z-Œ1ô4¤Æx¯¯¯ ¾">ø|>œµ¼h1‘1gffL&ÁZFƒq^¯×ÃIïv»áp˜×L­Vc¢~ssãóù fóÙ1™LFÃn·Ûl6H`N§szzZ.—G£Q•Jõõ×_óâó^×ëu¿ßODÉ xßÉÉÉþþ~½^çw?99!iõöí[:0Ö0¢8::‘}~~Î\md9S*•G­V+&"ÖÈ(ŠH$‚ïèáÇZ­¶V«Åb±X,Æ&U—ËõˆU'Z­Óôfô·……FÍ Õè–æyåß½{÷iNÒÿýõYî ܘVCø#npssCP{Éøø¸¢R©  à£jµZ¹\Îh4’—ŠËÚOà 9i8ˆts;;;™L‘ºÐ= ¥úüü|ss“Z N·ÛmR×ìs„CϘÍféàÁ© )Ó°£ ŸpòžŸŸSáÿöÞ¤©Õü>ÿ¾‘„!„$4ÏbóÎ<õé´ÛvwìTÙq¥*UYd›M¶ÙäUd›J9U±+îØn÷œ>}Fæ$!¡MˆI 4€@ÿÅçiùù?Ï è³0+§Ò݇#Ý÷ï÷®ësuv!&‘H zƒ!…¢%Òxö¨‰DqH¹\¦9³ÇƒHèÄ T:µZ Ð ¢¤& …‚…g{{;3f ‡rñ`Ž÷x<»»» ”(ÄèâápÔöööëׯYox‚´ÅQH¼öŸx<Ž‹é'CmÚ)ª?¥R‰[¡,E:)»Ðz8¡0áÄaøÖ7؇H>Ècmg À™È€Õãñ¦óð¼XcRð& \T …â믿¦-cæS(JbYBº®ÕjQŒ0ßÞÞfŒöŸG‘ ^f# ƒi ¯F+Âþœ›¾ ‰=ïñññÉÉI8nmmmkkC¸…(7­­­Á`0ŸÏ“iǘdnÊ&3‹¡:'êÖÐþþ>šžCÌkاÁ(²£*—ˤ±c@áÓc1Ny$‚X,¾}û6Ä@ÜÑv»ŠèÚPþk„²âdD¾½½}xxˆ5Ô>ùò°ÁdŒtôl†½ÌÏÎÎööövwwA±"újiiiyÀÐε¶¶bãÂV ñúÅb1¡ïÈBõ‡Q3®eËA½IVºTŽTþ™l6;::Js "›Í:N¯×K2œ îÄŬ¹0ÙhÐKªÕj¥RAÿçõzùwaÑd ‚€T–¬ `¶$ R™žžH^D;:Žëëët:Íw¥óääü#“ÉÔÔÔFFFòf$ÅcöK£Ñô€¦P[„³³3—Ë…\D¥R ^Ì#F£Q«ÕâÏ”Ëå Xvwwɱ’Édl/H¦ª*•Jï½÷Þææ&yÄDPÄ0Ƥž*—Ëq4³[Ê!‰ªÕ*¾0ò( …–cLçlÕy³Äà·¿¿O+³¿¿Äãêê  aJ¥²»»›OtÌa‡O•Q'„n¢-Ø2£ ƒwöáçççè/inÔj5 h_ƒáÃ?DOÅ´Äëõ²_ííí½ººzùò¥Á`€RFQV˜L&š$Ú¾®®®·oß‚êÎsqqqyy™H$ÊU*•[·n‘ïŒæ ¦?l^½^ï÷û;::\.×îî® Œø•Ðkæóy0÷Œã9†8£Yfº\.øéÍ5ÇIYŠ€áCëúÝzcªÉÌ'Nó›PAÃ(K£À£Çgggòcýïííe©344T¯× fòx<¤Ð´··#0'¤·³³“œñÞÞÞ—/_nll`@Ë‚*‘V†é"Óî†\.G1@†£Y&“!Œf#år¹H:«V«Øk €h44,­­­ÅbD©T¢iãà½cø.ü¼•ûèè(ŸÅb¡cd*¾$ úL“+• 䙳³3ƒÁàóùt:L&Óh4ØâéL­Vëàà M´Ýn'©€pm‡Ã1<<Œ{hhˆÏ‹‹‹ê_§Ó‰û‰ê›“Ôáp Xôz½z½^©Töõõ±K‘ÉdØÛÄb±N§c¾ÔÞÞÎν¥¥…¹P¡P°ÛíôÑK7¯÷ááa(¸˜Ífñ¾RjQó®R"~À5J¸¶Z­F¢~||ŒŒÙ½ÑhT©Tp65€jµšifss3ÂmHhÉz¦ìâ‚éè耉J¾`0ìéé¹{÷.^Ç£ÕjËåòÐÐV«½¹¹q¹\pT”Jåàà jþþ~”y###@ÍÇq à]ÃZ½^GjÂ5 =<J8®m¨;‚ Ôj58Ìðu™< ‘·ÙlH*)r±Õ Z¯× ¿ùæú€P($‘HB¡=D¡PÈf³Ñh´ùû¸+†6kkk$¯²à©T*X.€Eã¤#rëúú»º‘¡¡!¾þþ~àk<ù¨¤$ ™”2]]]t–n·(´Ífc!“É\. æH³Äb1Qé80Ê×ëug‚ 8΋‹ v}Z«Õ”Jåðð0Ý3‹ñp8üé§Ÿ677¯®®’²H$Øî^]]år¹O?ýk^©Têîî>??_^^æ®b„…ã·T*9ŽFlµZ§‘ÐDs ­ž‡³¾¯¯De¼““@ ¼_\‰¯ øI”€‘!ÃZZZúÓÆÏ;q¸û|>±X¼¼¼ŒHvuu•¼Ç|>O"p±XŒD"8ƒ÷ööX£­­­Q òÖ•Ëe¿ßï÷û›››/..VVVИã\ C@ 5µF£I$ÏUa·Û±¢å PàjyN^ü>Ê0šßÜÜ ”@}¡T*ɤ¸ µ¥¥¥««Ëf³Á«!¯@¡PP ²9‰‡ ˆ_•7G<7b.—#èææ ²}\ép  BÔc%U(&&&(!º,l0ÎÎÎvvvp$ÐÎ3¢I&“ÇÇǹ\ŽXAÄb1nL¦š´_===ÃÃÃüþ2™¬¯¯Ïf³¹Ýn¿žÙ»"WÄáb¶Z­¼zÃÃÃwäœææfFÓßß?>>ÝÌl6›L¦ÞÞ^«Bp¥ðÐòÖÓÝÝMŽ+uFSSS&“™žž¡»»ûç?ÿ9]8M*+ñèÌ*• Ê€§§§{{{|ÈPÖ³*Cëõ.ü¼3w&ãè èÑqó9¢Dft€;ŸP½^§¹n@œq“£%ˆÇãh¤("¼^o(*‹p!°Ì Œ^.šq±XL˜KµZEÁÆõîv»Q^__wuu1^§ç\£MÆC‹ÊBÇÊÖÖ–Édb¾ÜÓÓº@™L–J¥¨XYÒÒâ2gƒJyÎçÉ õ!B#Zl²,p·‚™N$ìâA@” –€O §§§¡5æM }íüü¼··—Ñ-¨³³3“É411‹ÅL&{.ƒƒTˆ+šššÚÚÚœNg?P0Ô(…z{{ùgR(f³>>ð†óósºcdx”pß0ä‘ËåîÍf3ZXP-ÀÔjuOOu=†IÖªPЪã³å÷¤®×ëÙlvqqÑãñT«ÕƒƒƒÙÙYzpA¸Ÿ}e.·¶¶"˜JùððˆÝ5IUkkkõz… F1^¯¥¿F£I§Ó”؃!Ÿ1븼¼ôz½‘H~N¡PÀG¡€ã¡­­­Z­"nð^XAÓì ‚ÀŸ!¸^¯O§Óýýýì´0'‹Åb< ‚ 4’Ù)ó¶EÉ|[&S/Š’““v8û677y•´Zm±XħÑh¾úê+háp˜i>âÅýýýöööÕÕÕ¡¡!p°###¬¬XQ"pÚÛÛ“Ëå J](ŠD" uq4bó”J%9e°///‰çï¨T* ·êîî^[[×´ººŠ.3Nã¼kkk ˆ ¤P%ÔëuVzÚT*•Íf[__ç•ÿ¡ÒÿÏÏ;q¸§R)F‰Dzzz<O$©×ë8­á1Ñ3Þbø+‹9÷ONNP€qŒÆãqœÈ!ˆU£Žf›T«Õfgg¿ùæ¬Åb% ýÚõõ5mŒÐP(ÄôV¥R©¤û†Càr¹Äb1å$-'³ÙÌÓPž½E/j.ŸÏ×ëu»Ý.ÂÙÙÙØØ'–ªE…B133ÃSŇ’ Ó<[J¨Ù²ÈAww7e#óPe¨È¡8Æ­­-ÀÂÌ‹h*³Ù¬×ëíïï‡+BŠ£Êï÷³¤E‰xqq177Ǥ;“É`ñ@2ÈR j3VSSSˆ ÇÆÆèZn"[T( =ñ4p|”Ëe› ³ §#sƒuñCLcHd¤£joooLl÷÷÷///D ‚À®££cxxøôôôoÿöoÿå_þÅb±@bèêêºÿ¾Ífûì³Ïî޽ˑ111±¸¸¨Ñhî޽ˇc·Û=\.çŽìééáUÏçó‡oÚÉÉ ðwRLonn|>ߟþô'£ÑHüK*•R«ÕµZ.:)‡¦B¡`‚Fùź»»q0Ä ¬C§Ó!a‚©V«‹Å"+zD–Z­6N3pŸ˜˜˜››ã˜ŸŸÇþÊ2Ÿ¦dccÛíÅÅ…Åb¡äÇ¿Z,!0³d-ɤ޴¨v=== $ɬ¯¯# òc³Ù677% Á°§§§&“‰¾Á+’ó»wï ‚ÏçA¡U«Õ»wï¾xñ¢Z­öööâ•Ôét±X Kr§ÓɈ|xx‰:”f£ÑøâÅ‹§OŸz½ÞO>ù„6¢µµ5‹ù|>pi.—‹í…OOÏÉÉ “4ïŒàÁÎÐV’C  ô‰D‹Å s¤ÌD3 3u(ãìh4J¥€[64HRún¬ª™L1/Ó’ÖÖÖááaBNººº¢@ú’à Z¡Pôõõ1Vv¹\è fgg«Õ*Ç C–––ÞÞÞb±899y||È€.—Ëëë븽Xç& ^0l>››› rE---ÁÃá&¦[‡¬ÉzP„ÞÞ^Z¯×Ku6s~1%Ó³ÆË†¨Æëõâj&%ŸÏ«T*l_LðP×0µh¬Úêõ:z›Í†H‰²š“Ël6ð ¾zõŠA O,™´N§sppf‘ü¶ÆJS¡Püâ¿à¬ïîîÆuÁ–*Áív;N”0*•*™Lz½^ÀÅÅbÑf³U*•H$ .—Ëñëq»ttt,,,¨T*‡ÃAT«Õâhm¨¼kµZww÷ÎÎn;ü8%™vRƒCŽÅb777###8ûh¨¯©…pÁ7è.|ïgggf³™lœ££#*z8K‹åöíÛäÜRý@å”J¥###ð^¾|É€…‚ãêêªP(PÑët:AjµŽkþhÞ)»Ý~ttäóùäjµÚ××bT.—‡Ãa‹ÅBö¤Ãá „Ýl6Ó¥1ËJ§ÓÌmâñx¥RáLïèè º§• ?ÜiúçŸwâpŸÅ ‹ƒÃ‘£- õööâCÖ’Ïç&&&B’¶ÕÕÕ5== =>c ª6™LöèÑ#§ PÔPhk ÿàîÝ»øÐfgg¡8õ÷÷OLLðò¨ÕjNçt:Y1Ž ®¿¼¼ä…?99™˜˜`åÕØÎ)•Êéééææf»ÝÎ4…ŸD"YZZª×ë@€©K¹\>==¥p¾¸¸ØÞÞ³EƒðÏáÍÍM0DñÉ!s­Vc—Éd˜Æ ^ôèŽÍ¶¶6ÔÖn·»»»»V«! ŠD" íééiƒÈ:;;Ë_çÑ£G¤FŒŒŒÐãK$“ÉDìõz].^\³ÙÌTÎõõõØØìõóóó‹‹‹ÑÑQ«ÕÊÀÊjµB•Úßß÷ù|¨Å¡°¢µÙlˆ ÁùR#“¥äíÍo^«Õ¸¼ÉˆÉdŒ¡Écƒ¢Nz†Õj•H$Ð ¯®®Þ¼yvñüü|~~%õêê*‹åt: C¡2Ÿäÿþïÿâîyþüy2™T©Toß¾eµS­V———Ù||þùç<–°¼‹E²ZZZÔjõåå%€ fhR©ÔétÄJéS«ÕFFFh;:;; n¯×ËPØh4bC¼!—Ë9CÁÁw»¹¹Ùßß×jµ …Ù@p±Âçp8 <Z‚@ž$n´j ø0‹P&6Ì»ÎÎÎ8µONNÜn7ûF3>>®ÑhnݺÕÚÚšJ¥NNNàn~ûí·ñx|kk«A ¸¹¹™ŸŸ!‘H,//COK$ÏŸ?gž–H$ôz}KKË矎5:BAØÝÝeí”Ïç—––xÚ÷ööàá4ôòÑhÖ(cÆëÑ|œŸŸûý~î€H$‚j3—Ë‘˶Ãb±°¨©DÏ·¾¾þÞ¨ü¼‡ûÓ§O™2 ƒ(O·¶¶è| â@iç÷ûr€¼amm áúú:UI$9<<äëM …Øû‡B¡\.w}}½¾¾Îk,“Ép‘(ŠÍÍÍÆ@`*•zûö-º¨……òw¶··¿øâ ™L†(F„{{{ÄTnooÇãq–BÁ`Ðáp§R)ZT½^¯V«½^oGGñÔ³‡Šýññ1ÒC,(¸ëDGd ò·Û ”µA1, V«uuu„ï I&f³™pa€±---ÏŸ?ïîîv¹\_}õU*•š˜˜(‹ß}÷^¯ç¼c¢ØƒA_ý5½Ñ«W¯J¥’ÏçC¯†Ÿ; ŸŸ§R©¯¿þçíüü¼ßïommÕjµ[[[óóóXÿ/..ÕÓ0ùý~¼¦‘H,Ú'þ± ²Us¹°jµŠw?ŸÏïîîžžžŠÅb¸‰°€]]]¡P|öìC’±±1—.—‹CªP(Ü»w(êJ¥BJIkk+Ú!ªãp8Œ!“T»ÝŽriddäÅ‹ÝÝÝŸ÷—+ܱ±±d2‰[5N ‚À ˆü¦L&ÓÙÙi2™˜©vvvf³Yþ¸öööåååR©d2™(¤úúú>ûì³³³3§Ó¹µµU«ÕÈxÀ{ó}T£W°ÇÇÇ_£Ñh<o˜.Ylìììàõ#vJ¥R½#‡û;¡–Á2Ž U¤TÔƒP{zzÏòd¨Õêd2ÉÍŒ ˜ÙE<ïîî&s@¯×“Ô $÷ƒŒFc0¼¸¸ ¿¢©©©R©ÜÜÜ`ˆ@íDOŠ‹ÅòäÉ·ÛÍ,¨X,ê“H$Z­Öb±ž[­V)9›››Óéôééi>Ÿ_[[s¹\‚  ¼v(^àÉa°¢|£êÁ¥V«§§§îÝ»711CU§ÓªÐÙÙI\›£Ñ844tç·Ã1===::ŠÕž¯×ûþûïkµZŽ@ p}}m³Ù&''»ººX Öétããã8ªüð°:ƒßßßÏL¶ÁÄŒøìì,øV¯J¥²¿¿ßçó1²eŒwI$ñuìïïóöâ‘¡ýb5ÒJíèèu»Ý”ˆ!Åüâv»5M&“ièÇqÀµ´´ˆÅâd2É«V«A`ÝBºÈèè(@:Ž$ЇÃår©Õj(‰?þçþç©©©‰‰ nÜîîîÇëõz:ƒÁ Õj?úè#µZýèÑ£©©)«Õú“Ÿüä½÷ÞëêêzôèQ±XÔjµ>4 ü±N§cW166æp8FGG™±`«V«¸l|>òS`&|•‘HD"‘€Äa« …зÈd2Ž3£ 3Æ9<<ìõz‘9J¿#Žƒù­• €ð€@À`Is}}­Óéz{{gffH‚Dã ×ë‘'˜Íæl6‹|ž¯˜?Z"‘üæ7¿9;;££•J¥¯_¿¦§éêêú›¿ùúNGÞýÈȈËå"E«»»{ffæã?þ‡ø‡?þØápX,úægÏž±6Ç¿öÿø“““³³³x;ž>}ŠÂŸ‡Ùlž™™éèè ÍøââˆÞýû÷ù„E"U#3Xj¬F¬ '''´ùä“……{ƀ䜰»úÏÿüÏååe‹Åâ÷ûIfS,ñíïïãû„ÝåÁƒ§§§‹‹‹ÈxXä"Í”=ŸÕj­V«/^¼À뎂™„öò\.'ž©\.£&ÙÃb±éóùhÍfóÜÜÜyž~ÿóNî µñžµ··g2Ø{{{ȼ¯´´´„B!¼*HhÄb1%—Dæ›››…… ÕÁ` ï*æþÅÅÅh4º»»KÞ1D»»»±X ”’›p8Œnooïìì ƒO­V[XX€Ç …J¥RKKËÊÊ ÿd¥Ra ˆ£!ŸÏ££ ÀW"‘ìììÓ„ê72FƒªJsg‘H´°°€'¾±ç©V«°5X’·W©TL&S0ŒD"¨&˜M3=P«ÕL~QUîìì€ÌL$Ø4U«U«ÕèKˆCX[[’ƒV+»ÝÝÝ••Ç#‹çææ®®®L&ÓÖÖÈ壣#àõõz+ì$ºx¼c‚ œžžmZ­VÁÄb1˜±¹\Ë‹‡P(„öŽ d((ìQOOO‘“ÓËSy!iEóJ®‚Ãá‹Åÿ÷ŠàÑ£G'''*•ÊívCM¥RwïÞ5™LŸþ9¨È È戗©èñx²Ù,2ªp8 AŒ-[ñ7oÞˆD¢±±±W¯^¡uÂ>Ÿ™ {ÀŹ\¥&—=‹ÍH$‚À©ÑV"QhœL&ÙW‘d±Xb±ÏI¥RÙÜÜ„¦‚—pTö‡©Têêê $5]ì~ Ñ‘aB<#“ÉVVV8»———¯®®Ôjõââ"_"óŠ‹‹ -kkkJçççáîìì€Å¶Z­jµÚd2ñlŒŒÀ! ß"BÛ?þñëëëƒa}}ýèèò˰ÓÓÓ‘‘¥RÉ^Z¥Ra©³Z­¥R)ŸŸŸùå—¬^·¶¶ØyÙ=:: LéôôT¯×ïííA»‹Çã”áápxoo|Z>ON@iGÍÍÍ¡PˆÑ_¿þùñÌ<7NÆóós€ÚH/ˆÁ×i2™ü~?8ÃÍÍMt#ˆÆˆ¼Èçó_ýµJ¥âû;??¿ÿ¾D"YXX@Ï¡€¶¥¥Þº^¯øð!sÿtÍ===lÞ{{{ÇÆÆÆÇÇ™*ªÕjÆè pIPtuu% ¥R955Åè“IüB«:‚ pÊ€C‚€†# èj´Š&‘HÔju&“±X,xÙ)ˆ"‚ `ø´X,MMMr¹üG?úÆ––×××È{NNN†‡‡'&&ÎÏÏGFF‰„Ífƒ“×ÞÞ>99ÉŽ×ãñ¨Õjèø3‘]R2—J¥6R©tooO©T ˜fggëõ:v'*)œk¨°‡††ðöõõ)•JøÌÓÉ @ÇMÃDÜ;ünÜgÀZA*òYQò3²ƒ]­VAà8æ6EnßÜÜÌXÙb±(Šo¾ùÆår¹ÝnŒT0CØÓ R‡(‹Å,Ë~ô#¦XÜ‹F£‘eÑh´Ûí]]]H$©Óéô½{÷¨èü㟜œ ì õää÷"™jµÊõððÐh4âDmmmu8$S_3+À¦g?Är÷ à`°à¯Ñ4 ôàí«×ëÃÃà å;–&N*•ª¯¯ÏáppIyg´e6›+•Jww7³p›±XL.——J%Ü2™ ¸"EJ+¾Gü·¨Pé Beˆ¨\¡Pd³Ùëë뇲2íèèØÞÞ6=‚RÉj±X,K$‰D|ðA[[›L&›œœt¹\Ì}>XH¿étÚãñ0¿šŸŸ‡.E¯#‰Ð¤^\\ Vâµâ¦hÀ=‹æ*“É SþK@öŸˆ]'Ö>2ãjµŠ2§ÉdÀyÀ„ù²^¯w»Ý.—ëøøøææfffÆn·³éºsçŽ •Jedd„Q Édºÿ>'¯×Ë¿rûöíóós±X ·££)q½^çYaæÞ××çv»*š4^çB¡À|¯^¯£6Îd2æÁƒhž>&•>‹/AU¯×766, I/¤ïíí577#¦ä|.äv»ñåü…-óýôõõ5¢6l6%<® JW^-0xëëë,aª˜ååeà‘Hdoo¯±Y… Ç———YTnmmacCˆÊÿ`öBKU©Tòùü‹/ššš@tÙl6•JõÇ?þ1¶¶¶¾yó&NkµÚýýýxæCò„#•J!Œ¡õ¡;N¥RĤ°{ „ûõèèhmm¹ÜÙÙQ…l)"‘ˆL&#/÷ý÷ß·X,årÙçóõôô ¥g ›0—Ë5JkÕÆÅ`µZ{{{¹m6ÙÉÉÉT*ÕÚÚºººZ*•è6’É$Æ™L„‡ØÂFƒ Xâ––– pÛÛÛð0ø„ùkÆãqš˜µµ5sårygg‡&€.„˜Ü|>Oâ“\.·¶¶Æ£§èâââ15Š#ˆ4år™_JöÉÉ *[ºRPÌápxyyÙåråóù7oÞ€n^ZZBÛöèÑ#Fc6›‡Óé„-CsLF û’ÎÎÎT*ER9ж,HõWWWa²ÓQ±øe¼fµZÁ±š‰DìÛñµììì¤R©®®®³³³……P”ˆ”à‰2‹Å«««Ìj¢Ñ(ÚÇt:Í9è»^¯g2ÅÀ;ðŸwâpÿè£FFFèh‡„­ÈÐC9J†áááõõuô|¤¹óé“@°g©TZ]]‰·»»[(dlllhµZ܉v»a•DÓ“´Éï655ÅQ%1N¯®®Úl¶ÃÃã£#‡Ã=/—Ëñ¢4ÀrÕS Ífi~)ж··Y,//3_[[c4Œ²“y:±s@Ç í‹E§ÓÙÚÚʰr||ǶËå¢\%0–A³ÝnG þñÇ#=#³&°T*™™ñù|,ÇÇÇA i%<Ï`0àÔÀª³µµ…–cii©½½Ýn·_^^^^^žžž2ä1›Í777sssb±˜ÃEÈÅÅÅÆÆ-ÑÙÙÙÐЭ†Ífã\ È»T*I$6WçççXÒ…Ñ £•.•Jô×õz!/œ‘HD Û‡Ù4`Ötüëggg¨³"‘ÈíÛ·çççãñ8Vø@ €L»P(üïÿþ/¸×µµ5DGX½  šÍæ`¨Æ4k2™HIÅ|ß×ׇ¼¿¿Ÿí½Ãáp8‡‡‡Ož<¡þᇎŒŒðµ²¯cFït:õz}SSFn},eggg½½½‘â’knnšöÆÑ2 IDAT°fW$­¬¬°*Ç’Ší+&ÿe¹ ** |Ô;;;¬(/2$ä%‚ `ÜÅÊz\£Ñ°*?p||ìp8`®ŸŸïíímnn*Šx<4Íñññëׯ‰ëBþ±±Á­ûàà`pp°³³“åí/ùK»Ý¾ººúøñc(OV« x[[ÛÝ»wÁx.•Joݺ%áÀv»½R©¸\®‡2‡¸ s‰ö…¨†J¥‚ò‚*G&“…Ãa™LFøjƒFÀÇ«îÿy'ð›››d𬤸;::‚!Kö†¬V«ŽŽ °÷z½V«5c2 äbooo ÌÎÎ2ÄäÂà±`ˆ† FN§ÛÝÝ­V«ýýý¹\Ì?œ©ÞÞÞ¿û»¿{ùòåææ¦J¥â€ãDC©‚p.—C"ÆìÜÕôôô7ß|ãv»>~ðÁÌF&k4Æv 41|ƒ-ã즒‰D‰Dâúúg€X,¾uë/S™L†J÷Í›7¼ ¬€h¿þúkü«¹\Ž楥%ʽõõuÔèÙlvcc£µµµñ3RdÙ œ°]qÎf]0S‚ÍÍMêßd29>>þàÁòRôz=áñL |>ŸV«ù‹Ò‰Ý)]< È=út™L†ˆB©QDƒ Êårpi666 Ð%ÞÞÞFK¶8£ —ËÅï@ÜÊôôô¿þë¿ÊåòÙÙÙ•••………«««•Jµ½½ æè÷¿ÿ½ÛíŽD"³³³"‘èùóç‚ ×AQº±±a0~ñ‹_`òR*•sss»»»àìËåò«W¯°_žžžvwwû|¾ßþö·¯_¿îïï‡èpuu•Íf9,„#IF«Õz<žÅÅÅããcŸÏÝZ­VCתÕjp` û²à6B/k4?~Ì+“Épr1Uç‘ÐëõŒÂXH$`\«™LæéÓ§Ïž=ÛÙÙ™žž^[[cÖOs3==h¤óââ"ZÌÓÓS«Õ*‹17±ß’ËåOž‘HÌÏÏçóybl®tœÌ*1Ž`RC­txxØÒÒ’u,bc&f±XÔjõÕÕ•N§£Ñ$¨ò]øy'*w³ÙÜÙÙ¹··Ç3ݨðR´´´Ôjµ\.W¯×Íf3¦˜Z­¶¼¼¼°°ÀO "’ÔëëëÑhT©T&‰p8ÌÕÅ  +ˆD Á ¡´a¬œÏçñ%A¦åõ hUår¹B¡H¥R°±€¡ püÕëu£Ñ8>>¾²²211Ѱ··—~-G0ìîî&£u ÝÃÐÐË7, ÌLàð ÄÝÌŽŽÎÎμ^/Ô~ÒBD"Q4=<<<88œW.—& z¼KF£qmm Ie$aŸJ¥èÓ°r·WÑh4…BÃÉÉ ;¤_L™ä@!`‡Äív³ª²t||Ì.‘f‹ÁæÒ±±1”lV«õêêj}}½­­Íb±0´¹uë„T‰ûûûˆ8{zzpá ŒµwîÜ‘J¥©Tjrr’;ûáÇ333”䈈ºººž={F„w¿Åb¹sçN èîîv8„¡q€÷BõÿòåK˜3 —xxA€=À4†Ïÿòò’ÿ€6zëb±È¨Šd¼ß@l¹\&S;ÿ°'*?ïÄá>888<<ÜÑÑÁö 2óe¤"‘…ÏçkkkÁ õez*•ÂÔpzz:00055Eö#†d2©ÓéD"lôÑÑQ Ž777oß¾íê꿺º‚_D¢¿¿`Ùèè¨J¥"/±­­-'“I‡ÃqyyÉ&y“œp8\.—ißà bO&“ Ã;/Шîáp8—Ë1=???O$t—<£4 ‡ô6õ‚ à)çåc:áõz///‰°¸sçŽÁ`hnnà-’J¥jµúîÝ»­­­gjjjjjjxxøÁƒÐfž={ÆEøÞ{ïa%ãC¦9;;‹”ŒÙb±Øßß?66ÆIÄÚ€¿‹ øWBQ¤RiSS‘¿‚ à~¢ÊnmmEjB(•JѰc]®ÕjcccÄPmr—£ŒÂ/:M©TÚl6ÆŒCCC°©‰3ÇãÚd22=¸$J¥(=ȇ‡‡Lö˳ 2å ×ëõápbe4µÛílªQÒ‡Ãa_ÈKØèbs:*=~üøÍ›7ÄóT*•L&×××у–ËåÝÝÝ““¯×{~~N[_.—///{zzøÅ8 *ªÕj•Je·Û½^/ù³pˆOOO“:`³ÙÚÚÚfffжÕj5»ÝÞ××wxx¨×ëŸJ·nÝ _„ –ü …‚]:îè考¤×ëÿ¢–ùóbAjÛï3ñ%2¯`«†)†ß_ss3îA<÷CCC°{ÈV5™Lèê0°Òyýú5.¤¡¡!¥R‰1º··6:´¬­­­ñññǃùõûýlqïÝ»§P(jµšÍfËf³h]{#.ÆHÉ«A›¹!>&ˆÛõz*‹N§Ëf³ ú)0Ù ‡Çd³T*E"AŠÅâââ" úl6‹HŽTüÐé’AüÈõõµÙl†ðÕÑÑA[“ÉdÞ¼yóÉ'ŸàÙEsrr²°°Àú4“É …BLÉ···‘$ãT¬Õj===R©´££ƒ± ÈlrÆq„år9^ðËx‘Ö××)ÿm6.¿ß/‰P‘â]BÍyÇkœÍfC?‡ G—À¼R©DPªóF®¯âþþ~¡PÐétz½ž4d—„1¼}ûv$¡et¹\«««ÇÇÇ|)ÏŸ?G8ñÛßþvii n(œœùùyÿÈNvww———Åbñ7ß|‡«Õj©TbÉ|qqñÙgŸÅb±l6;??¿²²â÷ûy6>oX]]]]]¥&å¾g˜Ë”yww7‰}ðëùß&“ ·3]æä‡B!®ÆjµŠ…˜ ågSS ©T xE2jHAŽŽŽ¢Ñhgg§ÏçS©T€?¥R)np>^˜bûûûŒþqÛ¡ÀáJ&vª\.ÏÍÍ1©GÃnßd2½y󆼯ñññýý}ܶÀ-¤Ri&“ùÝï~ûª×òòòîîn&“immÝÞÞnnn&Ð<‰ìîîïììpqîììÌÍÍ!³¡úôÓO···¿`£á{ûö-ý+e6›%Ç:F.—“¶ „œ­/jW®ðîînÖ°ï~à8ÜÉ#¢åââ"ŸÏC›Bç×ÖÖ†¶VñåË—§§§‰Dbii Á_4ÅX¸µµ…M#>þ¼©©‰ó‹–J¥¼Ïq1÷rޱX,íííï¿ÿ>·”Á`ÀôðùçŸÿä'?cñäÉN§ó׿þµÑhüøãÉ11ÛÙÙb¾)—ýùÓ§Oëõz,s¹\<ŠÛ Z.Xn·›g,N7¼HûûûŒûð±«\__'ñ “À¿ÅbÑï÷sœ­¯¯³X¦I* ‚ `\J¥Rˆ»êõúÂÂÂÍÍ ,¹ýý}j‘­­-¥Ri||<ŸÏ#Èimm%Í ž ôÍZ­Äb1JPþ# íÑþŠÅb^·íím°¯^½"¿áåË—„{ŒŽŽ’ŠL·ººFÙÇœŸŸÛl6¬à ¾¶··ûúú>úè£B¡`6›ûúú˜¦ŽÛ£‘ –ÏçC;ßP³ØívÈ ¨böööðÖ ~ÙÛÛ ТÑh#ˉ8ìB¡ÀJùøø˜„ôL&æX,& 6…{{{?èúÿü¼‡{ooïÝ»wI_"^*•£øöx U4øX{ººº*-@M/—ËÝn7t¹ææfjϦ¦¦ÁÁA©T a‚È: f¸É Y6fß:þ¸ÝnlŸŒ)Äbñää$à °É”)„(± Ášg4I¤CCCn·ûââbdd„/ôáÇQÇr‚+ »»» »///“É$ž·ÛMØ!ˆ€cGoo¯ r¹Üétº\.“Éd4 wvvšÍfÇ300“ulllpppll QÍÜ_ÿõ__]]¡Dà3¨‹Å0*G" ôÍô|ÝÝÝìQ r¹Ì>ÿýôSDîÜ”.—‹òŸ¬Q¦ÕwîÜ9<<Áår¡–»}ûvãø é!±„Œ:î³Ùìt:E"Q.—㚬V«'''”{*• ´¬D"éééÁ‹O ¹ð}¼ i-ÈKHêÒÎÒÒÒØØ˜Åb8¦Ñhîß¿ŸÏçÿã?þƒÏüèèhss{*5,ÏÅÅE`бXlttô·¿ý-S¦ƒƒƒÏ?ÿKígŸ}Æh~~^$}õÕWmmmÁ`Ðn·s¡Âþæ›o Œ­ýý}x¼l³¡q1 ÍedÁÐ¥<óñX ñ‚“:NG"±>àÛ@miiÑétCCC ÁYWær9ÖEñx<“É´µµ1C!ÇåÀúBò Ñ°ŽŒŒ¬­­…Ãa(Í<<ŒõH޵ÙlàÿÚÛÛ;::a#®T*äUá3ïêêr»ÝÑhtiiÉçó±«àÆ¢1›Í«««ÙlöÖ­[¯^½’ÉdÀ¢÷öö¤RéÂÂÂîî.|›ëëkÌe”†ÍÍÍf³ù»ï¾;::š›››››ÛÙÙùè£ÎÏÏÉSåkii".‚D"’„=ç);–ç?Ì1úÿûy'*w‹ÅÂZŸ ¤‚P×ëuØ2}}}ÅbñÅ‹¬õ÷ööü~¿ÃáC €Ù.X¨ fÙø>¨+™¥\\\ ¸¢óÂIì–ßï'³»T*­¬¬nÜÚÚzùò%êéÅÅEô¯^½’ËåÝÝݧ§§ ´Ä÷ÐÃ"p\^^&àÍï÷çr9Ö> þ -âV%622ÒÔÔ”Ëåˆ2( Õj•°èŒwà q\¯×)år9®Z˜Loü~ÿÂÂá8étšEâùùy45™L [\.WµZ…3ƒ¥­­M$1´aÄa0²Ùìo~ó–Ÿñx<‰tuu•Ëå dï¡Pˆl³\.÷æÍíÛÛÛWWW`‚Á ÿÙz½ÎBuss“9,üÎ8÷ÃÃC‘HÔÕÕÅw°šõàñññææ&­ÛÑÑÑîî®R©¼ºº @ÐØÔjµææf¿ß/‚J¥J$¥Ritt´©©éƒ>Áh4Vpñý÷߉DkkkV«õéÓ§‹‹‹§§§³³³ðÄA×)ŠÉÉÉóósòÞÔjõóçÏ …ÂÐÐP:^[[›œœdvquuµµµ‡>|ˆó¢L&{þü¹Íf;>>ž››S*•¨Y0£23¤W@s ¢T*!Z5 ±X #÷õõõÊÊ è=8+!•wtt¤Ói¶ȸººÚÙÙ-yvvÆ*èêêêèèÖ1¶ØÝÝ]üÆÈ®677ÛÚÚbe0½¶¶†1;‘H0éµÈÎÉh4¦R)N—L&_¼xéé‡ßïôèúH´ &“I¥R¡c¾sçÂP½^ïÞ½b±ˆ™£^¯‹Åâ™™›ÍF@ggçîîîää¤B¡xõêi«ŒO=[phù C2™lkkò±±!‰666°‚S΋D"6"nñ1°`+ Á`èæD"¼¤¹¹™ úT*õCŸ©‚ðŽîccclMÑ)Ó¹wuuQžC+½ºº"Ïlmm¥|>ß××ÝÉd2ÑÄS‚”g²Þ)»Á~$.ŸÏߺu MÕää$ao?ýéO­Vk½^ÿøãƒÁ “ÙÙYâœìv;º:³Ù ™ëòò²ÁÀƒ‡#B{{»ËåÂ?i00Ë¡ÀˆØÝݽ¹¹‰n!lllP˜onn¢ë¸¹¹9>>&:ùüü< R’c¿ …BÁ<š:Ž:ކ” &ì‚ üìg?óù|ËËËTÁ§§§¿úÕ¯d2 ÄýPÿÔ‡‰6dSwëÖ-©TúêÕ+NGNìÉÉ ^$fÊ0ívûÇ1 |ÊårPˆA`}Ç—ÛÙÙ sª¯¯½ K88¸{÷.ÀÚí­-ìÑd€Á, ƒ‡d2»Ý>??rr‚–ÓÐÐЫW¯ T—ËeˆØ&Ô€Å)­åÉÉ ]'ÿÙX,V©Tˆ dŒ€œ€¥+ÉàXQJ¥R[[îä xW©Ê‰ì!¡›ãx{{»T*a…vxxàììì !Çã”Þ`)ONNÚÛÛ)úT*Õwß}ÇIqb·¹··ÇÂS²AH&“d‰´´´€­§9ˆ*‹A@é!•J)¦Hw“Ëå¨JH8!¿4N' ƒÁpqq±··§×ë÷÷÷9ˆ% ¯+C0^æ®®.ÄT¸Ér¹\¹\f”O_¡P $ \.óÒRÚó{B§:#%ޏT†§ðC:;;GFFàý °‘Cô 8—¶ãàà  bsëééÙÙÙI&“Ôª›››¤mnnÜÔÔD÷Æ,Àþð¤Ÿ~úéáááÅŵýýý\.F‘ f2&ò»»»€½ i4šÎÎNF—hØy³ˆêïïoooO$0~WVVjµú"¹\¾¸©©‰3:‹wžH$hJ0³Ì8::"{òððÐjµ6ˆç*•*—˪E.± œÝt®b±xaa]2ëb‹ÅR«Õx°/€‡+‹Y˜£zÄ_b±X¢ž´ÙlN§ó³Ï>#?öùóç©TÊëõ&“É­­­®®®X,Ž4‹­¯¯cjã`áiüòË/ãñ8æ³³3ÒWVVA@puuÅ÷‹Q X´H$ÚÛÛ+•J6›­££n3Á­¤%3 ø‹ZæÏ?n·{vv:~}`[ìRZZZÇMoo/‹x;˜´ÌÈ8Ðo\\\¾H§Óxˆ(aHeêéé¡+Ä`‚a$™L2[Éd¯^½‚\HìŽÙlnàÎiHÛ@F1a )­­­,ˆø³@‹èõúãããp8 ðoqq‘ëÁf³['˜Ô`090ئéÐ   ƒU•Ëåâ óz½´Õ‡Ãëõ¦R) "$…‚ZÉhËf³ŒŒ€áÕjµp€Iê`ñU«Õ’ɤÅb!Cw pG´ÒÈ“ É ‚@ <îõõõd2Y,çææˆ."‹g(:88 ’Ðd&ìHÔÁw ×ÃC¿¿¿O-œJ¥°Œñà D( Ô¶ ‘HÄÎF¯×»\.¶È׸rÚÚÚvvvPAó955æ“t\?^¯×b±ÌÏÏONNÂSëëëcª×ëúÓŸÂÆ`XOG288¸¸¸¨V«IXå?θ_«Õ®¬¬ð ³åõz[ZZ€ÆÜ»wO¯×s¹bef§BŰ•‰|©TB±—ÏçY¦Ói®L¿ßÓ<‘Hœžž"êjE6›ÅÏ•Édä ~Aí—ÏçonnnnnKvuu–"ÂÙÙa¼œÎ …‚‘dæÓÓÓH$Ò)ìééÉf³…BÄj¶µD¦àã•H$sssô¬¤©¨»¿¿ßÛÛËçÿÁØív‚Iõ«_јNMM™L&¼i?¾}û¶D"™½uëV2™Ä¢±°°À÷Åß 6§ÑhÄzŠæ^–ôž­­­ÎÎÎ>úˆ^¤¥¥…öÂ`0ÀŽommE‘Ì“szzŠ7… 6¥O>Ÿ?<úÈëõ–Ëå¶¶6NÞÞÞ|>¯Óé ³…––þ¬v$=f³™ñßÉÉISSÓÔÔA àæ±Âušt||ÌÊf®­­-VêAVóèØ8O‚c‚!€åÏ~ö³æææ½½=¦["‘¨··×f³1UÄîT*•{ìííMMMè366vûöm¢A=zìpbbbff†¿ÝÄÄ-ykk+/Ìøø8:ñ±±±ùùùd2Ù××766Æ^qll 'p‚b±H´&^'î3„ ˆdÚÚڒɤF£wH  `Ú5ŒïÇ¡5$¶ ˆÉd²Z­———Ð:!×;ÎÅÅEJ¹ýýýÕÕU 8ÿýßÿÍÚ–Õÿ·oßrmœ]^^"=”Éd•J¥··¨§\.—ÉdX`Âá°ÝnÐÕÕ5<<¬R©8ùÿ:Îþþ~›LŸŽÉ…ØÝÝý O IDAT‚Òc±X¸øQj(hmm…€2_[­V£8>>–Éd£££èó:;;‘i‘&¡T*¹ØÀ3[¸¼¼$·‹à À‡èk¡îÀ±!ÐîúúµUkk+7– þ‡Ãh4 ¾ ŸÏQ¶«ÙlæQ”Ë僃ƒkkk+++Àï¢Ñ(ÅlNu@„ŽŽŽßüæ7\Wz½žÝ—=„,MMM‡,ê~Œ»F£‘œ€eÇÇLJ‡‡ýýýTý^¯W£Ñìììr~yyi2™\.Wÿpss£R©<ø£žžš×ÎÎNœN§ó/j™?ÿd2™ååe(B¤Ãt*•JÏÎÎà ‚ß"–ú.¶cÌ,———ÈK°ð1ëL$‰ÄápÄb1èµ~¿ÿêê* ñ€‹EºKǃSîòò’[ajjªZ­‚ U«ÕÁ`P&“a|€s€]þþýûDz½ž‰|ÝÛ·o3Mnnn^^^V*•‡9é( xÐü"Õg2Ðà„ä¥R©àÂ'U€qüááa__b2·ÛUr¤µZJ¥D"ÑÖÖƒõõu^ƒåååŸÿüç`¬IÙ^[[³Ùlñx|ooïíÛ· yYGSò A´Ôîîð 6áðÕ †t:Ád}}[ ;ÞËËKAê ûfA‡ÊE,ëÖY(Ø–+ Œû´wår9ŸœœŒŽŽêt:¢YÑÅ777wvv¢²à<¥×ùàƒ^¿~ÝÒÒbµZ?ÿüs‹Å¢×ë}>ßââ"sÂd2év»éTd2™Õjýꫯ†‡‡¯¯¯£Ñ( œoß¾åÖaIh2™¸EÞ¼y£ÓéhБ?CêéüüüOúÓJ¥òæÍÜ FÎÏÏëõúÛ·oqüâÄ7ÈõÌÓb2™Žëõ:Ò©ŽŽŽ|>Or‹  $úžž¦R)ºLî¤ëëë¶¶6Vî鮯¯±n€¤o0ÈAÀÇ ’f2…B ­*æ#8—gggÏŸ?üø1,9­Vû_ÿõ_åryvvÖãñ¼yó&›Í’¸ fcrrßÍÍ XýýýÍÍÍÉd2ŸÏëõúöööx<^,?~¼³³c³Ù¾ùæ±XœH$Gež¹»»ËÒ*“ôjµFÿéŸþ)‹íîîŠD¢O>ù²÷­[·PRüîw¿ÛßßGø ‘H...X« .Åbr~~ÞHx·Z­íííTŸ2©£¾üáŽÒÿëç¨Ü}>ŸN§#Ááp‚pxxˆH/-ÕîÆÆÆ—_~É÷½¾¾.‘H@8¦ ~õêU­V+ Ðct:+S£Ñ’—Ê…¬2³ÙÜÝݽ¸¸èr¹8u:]0d‚Æñ÷äÉÂYVƒÁíím@‰øÃðv’ÊFypp€ M¥RÅãqæ†Á`7ù·ß~ 8ž:&Z½^¯×ë¨Ñívûàà C«ÕŠœµ›H$êééAYįBO¥R°Ç?#Ádëp©‚àr¹øyϱтë3¸~(Ž×¥¤ÓéAxùò%sÏ……F´kkk‰„ñ‹‹‹h4ÊŒ]kH2f³ùüü|ccƒœÙZWW­ŽŽF====xgè@2ájg9 …ˆËalÍ?°¼¼L…˶ðääÄår‰D"³d.óõ‘KEÌ7‰N§“H ®®.Ð8ÚM&âÓÓÓìo§§§Ng­V»}û¶Ó霛››˜˜€éÈ t@ úWWW`°A°ÛíÄ¡©‡T©T8²=ÏêêjC›K T*åp‘H$Ùlð@(ÚÜÜliiá!R—_C8ß>Ó˜ÃÃCÒMÃá0À,*‘HDÊ ²Â››N‡¡»»h-Z2¡€eC(ß¼d‚«C¥R¼ÃŒº´´äv»Fãwß}Gw²±±á÷ûŽŽ\.:H,&V«ÕëõÖëõÉÉIþ•‡ÃñðáCd·nÝòx<ä;¢v›U*•r¹|ff†O¬§§ÇívÃ3˜žžŽÅb”©ôÙµBø@Ð a0—Ëe2䳿ÚÛÛÑM ‚ …”J%‹\Hp äO$“IAR©¶ä¿˜˜þü344d0@xcaú Jêåå¥Á`xï½÷ÈíÕh4¤­Ëåjkk»uë–Z­¾¼¼ôù|ÓÓÓX®ßÿýËËËýýý™™™ÑÑQcccmmmmmmDÝ“þ<88ØÑÑÁ«›ÉdõeCn*p]Dï½÷½ÿùù¹Óé”Ëå£Íf3 ©R©¤›†Ï§T*onnˆFBÑE©T®®®1HE(B?ÉþììŒ Àl6çóy,'‡‡‡DRA, »Àáp¢IÑŠ°”Q°­­­íííããã“““Ä*Ñ7`Î$K¬6*õ±±ÿÃÞ{=5žægûB !¡,PDB€@ä¦é8i'x=S[e»¶jËåÿË>°Ëv•Ë[kïÖéîéHM„DPN( !! ~×oYû=xßîƒÕË5;ÓዾÏó ÷}ÝÓõz= ”Z«ÕÀ^îììôõõ²ÁÚŒazœššºsç$d†²ÙìÝ»wPDȉÇã˜âèííÝÞÞf5—Édxù!ᱤY«T*oÞ¼a¦ÄHnL$¡o%X°p</‹lÓé4iA››› ÔkµrïL&“L&õz=¢.ö<0PG,yyy¹³³³¸¸˜Íf÷öö¶¶¶(7®¯¯™& †7oÞ„B!¿ßÇ·¶¶‡¬¬¬ Î/¬ÓéÐ>F"»ÝnµZ3™ Pl½<Š‘‘‘xEîʸ# êtºP(„IúèèCÇòò²ÛíÖëõ+++HЖ——)Z1h ߎÇã'''ûûû|½3D"é¤ g26]KKK NOOÁu•J%މF£±ººj2™Ø`$Ñjµ6›M*•ƒÁì H쯮®FFFü~?G§9Â&-]]],Ä„.— &²èh4ÊÆf³ÍÎÎŽ*Ûjµ·ºÝnø¨äF"¤x+++X€‘]^^¢p ±«Öññ1m®R‰DòøñãB¡_P¡P(À1"^‚ûzuuõòåKFÓßß¿··‘&‰ðòÜDáÔj5³¤Ÿ‡Ãáëëklk\¢0gÀôÛívŽ{R¸!g’V.—Ÿ?Žé|ggG&“AÙV(“““sssB­V;::Êœ.dxx8°ûÇØÛÛË@`ff†…3A£ÑHt"DY Ì|,ËÐÐAQ½½½ìoÁ«ñÃ…wÝl6éètºl6˵«^¯CãˆÅb„3].—™\]]½xñâêê +òͲ‘£¶P(P ·Z-ZCTƒÇÇÇFƒÝ‰ÅbYYY!І)3®@¬j´ÈB„ärp ZÄi¨V«±^£ßÛÛ“H$|…$ÉÅÅÅÚÚ ËçëëkŸÏ755%„èíퟟ‡>}ëÖ­O?ý”tF½^_¯×?øàƒ@ °··úûûív;‹}³ÙFƒÁ i 4÷˜Qõz=…¶×ë¥UÅf|rr‚À‰àd¦Ð›)øh¤ö‚ —­'¹ŒµZ «A£Ñ¸)VÞùç½8ÜGFF,‹ÝnG³èt:Ñ™2ù²X,8ͪÕ*ßÔ”*@€bý/QÈ333±nCe™˜˜°ÛíH×9¹|>ßW_}e·ÛÚtttüÕ_ý¢ŽO?ýtrr2‹MOOñʼnäêêêÖ­[H¤Ýn÷ØØØÜÜE$“ññq•J•L&}>ßðð0ÄZäê½½½ù|^©TŽŒŒôôôÐ ^(Ñ8sJ¢NC£?§F£¡R`‹È„+ô0ñ—ƒaA"Fm4 \S”F£‘½Uj¹\¾ÿ>ÔšÉÉÉùùy§ð²Ï@ã„ì„Ü2^KÄ‚F£‘B˜„¹`0xÿþ}V£££(yÀÈÈÈðððÄĽ³ÇãaB 3§³³Óår‘V|~~N¹D õá‡φLÛh4Þ»wg23ÞÞÞ¾¾>ü´:ŽCðÀÀžrÐÍ}àè9??‡xµ´´Äö¬ÕjÝ ìÍfóíÛ·ÿûß÷ôôØíö““¾cTÓ »X;öÙg¥R‰„ §ÓIÆ´Á`@éát:¹qu|òÉ'”ÄŸÀœ ƒèR`× ÆIo±XL&ŇËåbÉL3§˜ çp:<~‚J¥Òét:Žññq‡Ãs‘(ÁR©433cµZYí ^Â+Np£N§›˜˜`.êr¹8çç癃÷öö2ó$r½··÷áÃ‡Ä þêW¿B^uïÞ=< HwŠÅâÅÅE*•ÒëõfuuUQ­Vgff}>ßööv6›n6›'''årVVA&¥RiyyÙn·³º{÷.l—p«0?òü‹Å¢ÃáÛÞÞf 4ÉÂårùý~ìŠ "p]twwõ—/‘HˆMþ‹ÎýÏbèĉD¹\öË•xpp€)‘ºr||<—Ëãìßßß§OÄMNyŽ÷g)H“P(DÙKÑ…BÜ…BAk ýÎår½}û–r†ƒÒd2‘Ýšcee…Ê#ƒZ¢è™€³ÁÃˇ ³³(<[2t:Õj…LÛÛÛ+•J9kP©SG ¿A'¾¹¹Éì6™ã>¢#"¯‡ô‚Œq£ðT#‘á ét}[.—ûþûïWWW­V«T*]^^†2s•ü€Än³³³ýý}•ÖÖÖ6çr9ÆA¤w^\\loo"ñ„&Y ÇÇÇ@Ãq~-..ët:•JÅ¢•É Æ"¹\ÎŽÊM8¶Z­LØÓlmmƒA*\„½+Šoâ¸d2BF³¾¾‡®lmm‘Q¾°°ÏçÉ÷xõê•ËåÚÝÝýá‡Z­‰ÌìŠâñx&“ÁŒ€²R© 6yõêÚÐååe0êõú¿ÿû¿Çãqh”ËËËÀâ}~ÝÝÝ”üÅÿÞ”Ëå®®.†™€í„Ìð©•J%&“‰–Q‰Dð¦"êgÿ‰èœñÅ<ëëkÚ)§$¯jµÚV«ÕjµpÍ`xF<#¨Ýng2j²D"qpp€ˆ°Ýn+Šj#¥Réóùx€¤ñ@’˜šš:;;[ZZŠF£xªÕêÅÅÅúúúïÿ{ ¡Pˆ éàà€Óüää„I ×ßÿýæææêê*?¯d2ù›ßü&‰twwƒ<;;£ã›F09«¹\N¡PÑëõB"†ôz=8#j²¿ðÜÿüÁô ·–÷ Ñhìéé999Èq,—ËF$­¬k â¼½^ßÕÕ…|nn®¯¯oyy™u ;t2‰...¼^ï£G˜ƒ¥F¸Æt8—Ë­®®Bj$ölccæëׯAm,--Á8Íf³Œ2WWW•J%¨à'¡Pˆ|ŒJ¥‚(­\.#o7™LÔ‰d•ûj±Xà,Ò¶ó(ÀË â@kµÚÈÈ\¿ßo2™Cq˜ªT*¯× ÙœS’ÕT*%øôúú:—Ë!uO¥RX‡°qÇ!‘HFGG5Í“'O®¯¯ÇÇÇ™oâûO§Ó¬IoÕ„òã¥Ñh¸833O8›Íj4šÅÅE‚÷NOOÓé´Åb¹QÝ$ ¹\Ž–ƒÑ<§ÇïdÞ´T*E@7p}B4×0s˜ÞªÕêíímØ áp8 ‘·@›s¢}>ýŸÅba™Æ:È!*µŽŽ·ÛmµZõzý­[·(BPÎÔ244„\áþýûøbˆ—“Ëåû’Ñhëëë“H$wîÜô«_ýªÙl^__ÿíßþ-: Lƒìë<Ï­[·PY˜L¦{÷î‘Q9::J.@Ç›ˆ»žž‡Ã6€ú…ñˆD"Á“díl6ËÎöf÷ˆ¨‘uE_£Ñ@kÑjµºººŽŽŽèÐ1µÃ e÷ˆ ÿ–mIfv»ý³Ï>cËúé§ŸFĹpZ˜Z O¼sç`µññq¿ßßÑÑ¡Ñh€B¡( f³ùÖ­[H}>|Èùâr¹d2Ò\„1Õj5Ä%çææÀ|>xðÀf³ít8*•jff†9;bDÔ x¬ªÕêðð0vSFŒSê…› ac„‡ A¹ºº²Ûí,lù}e2ÿ9’0ø¼8(š“à‚sÿþ}&-v»‰à#…BžçúúºT*¡¡R(jµš¤iԺЭ‘r5 æ?Ø;!K_^^‹Åd2ùàÁ¾$³³³J¥’×juuõøøš*•"ñšÍ!ûúõkxÚ|©¯¿yófzzšÔßÎÎNµZÍF k'ôÁ6›†÷)?ˆîînt5@¨ìv»ÓéÌd2P4ؽ[­VœPpƒá‚tww¿R©T@=%‰Óé$#Ö_Ô2þ ©êíí===ÅbÄV!ÅÅ«yvvÆ¥V«™]çóyZÅf³¹¿¿¿··'„ A- õôôð~Rº³³Ól6ÑÐmnnÂ$E˜eccƒ-Íoû[Pæ$ù|>xoBx2€h¸Ìy™ÞpªBåd'@a÷Ó²{¸“Pƒp{ñÏ¡$¥:>99!ØW£ÑD£Qf „…²8:99A‰Dë±øBQ¼P(¼}ûúˆ¨x<¾··çt:Y2?{ö,ŸÏ3í‘H$Ñhôôô4 Ýìx …\Yú­\.Çô à%£v6ä”E¡P(•JQÚÔëu";XI¡¸J¥/^¼ /ÁÉdl6[¹\F g î-ÎVÇh=1ßbUGíǤ8>~v`»)™!s---±¢@ððøñãååe^þ½½½££#n_ܘívûéÓ§ÜÁ¿ûÝïÐ>¥Ói`DKKK>½~ýšøÖW¯^!§ù×ý׫««¯¿þ+@(ÚØØðz½z½þFé±±±×…B¨!nØz½é…æ†XôW‰o*Xæœü¯ÇÇÇtNTî°k/ /T*•­V‹± Aq¤îQ׳áż1Öq>ò+À>Ãp˺é- ØÎÎΕ•ôûB¿ßOy^R©4•J½|ù’ÅÒÒœÅÅEFc2™¾ùæÔV?fÓ¶¹¹¹´´DâÉbÈ´ø>}ú4‘H(ŠD"ñúõkþÛƒƒŽï?üá©T C@… ™L633óäÉ“P(¢ ô ÖMdM¹\&b!›Í’Ç™H$àJ‘-Œá/:÷ÿõÁ,ÕR Ynd'a#Ff0„.xáåf2T·«««¼(– ZÚ®®® PÚ¨‹Å"Ò4!-3ðñÇ?xð Ñhlll` ýñÇ777Á1nll4›M•Jõë_ÿšã &•ëëëdß ÉgrÂdœ³§(ò/¿ß ©‹i Þj4üVp É—Øßßg£È Å]Ÿ ?\—„fp¡­$uD¡P¸ÝnvG&“ §˜R©üþûïÁ3ñ+LLLp»àlâ›êv»+•ʇ%™Lâ{dz}}ýöíÛl6 x"pLççç§P(°{çŸ÷?àt:™ó’H€£Íf³1™¡ßaCíõzƒÁ`.—#[²¯¯Ïãñ|÷ÝwÈTFGGÙ:ÂnBܽ{—é0Z·ÝÝ]‹ÅÂÀZ&“MMM-,,LOO#K˜S‡¨ybb¢ÙlNOO¿|ù’6ÿÞ½{+++¨†††îß¿Pzhh¨\.s’2‡¹Jd6ó‡ááá—/_¢„ÃÅzvvFôbbäðC!¾Yʳu`èIT¬ÉdBë/—Ëår9¬pºÝnw.—Ã%  VÄ3Øy0mííí1‹W(333¯_¿ IòêøøøÛ·o»ºº$x½^ÄûÙl6 Z­V›ÍF‡††˜Ì8N½½½¡¡’Éd *‡††n‚™ŠºÝnd̲­V+#œ¢4ÝtÙTµ(8/..)˜ƒ±S»2“Éø|>âü€!÷z½V«õ?þã? ^]]½yóæ³Ï>3›ÍЦu’H$SSSj°¶kµÚÉÉI…BKkxx–$ÌœååeŸÏǾwrr’AkÏ™™ ¿ßÿÿø2™,åg¾D20p1tÛÛÛ°ÛH‡ç_H¥R.—K§Ó dÁˆ¯£0ZC¤´”­V‹ÇøððË W[~)é÷îÝã+tppàp8är9Ù/¤\1ç©×ë^¯—Ë2žDySL0M]^^Öh4¤ßݹsá¦V«6“ IDAT½ÿ¾ËåúíoËw›fÎívk4š¥¥%¿ß¬m{{¢Z­¾uëVOOÏëׯ±}°Q³Z­·nÝzóæ ‚¾x8$€5ÁÜþè£T*Ut0ÈqBîÝR©d6›m6ÌÁþþ~€ä¼5HÚÙ¢!ð[XX@”Õ××÷øñãwwšþùó^Tît„!x ‡Éd°³!šF£QÜ(ÿsIˆŒ=$}±B*•b…8::âõf[…L…¾;“ÉßÄŠ léññ1"¼õõu wîLMM=|øpuu(R¡PØßߟœœ¼ººB2E¬¤LÿˆI„dØCÇ•Ëå9ŒF# \!D__ßââ"”m*z´´¤RÈårÌM44ù|ž‹Å®¯¯±ÑÆãqzÿ|>>Û{]tuL?r¹Ü«W¯xDdå¸Ýƒƒƒ‚@÷÷÷Ñ.//W*Jæb±Y¡ÙlbFçŒëìì$õÐ`0är9Šz!D»Ý_Eìp82™ IlF#‹1¹¼¼T«Õ\9в‰[ÙR©„@ž×q8v¹\ƒƒƒ¨¼ûûûiü±BÔëu¸Z8¥R)røû´†R©”"õšD"Y[[³X,ˆµ€¼}û–yH.—;::bsvvöÅ_ÀÕëõ÷îÝ{ùò%Yåry}}òÊÊ ÛlÔ/èú©s_½zEGµ¸¸èt:‘Ã.,,¸\®T*õúõkpŒ©T 'ÎÁÁƒ ß~ :­r¹Œ/—Øh4 Š÷÷÷SBZ­V–œßÙÙÙææ&+ôgÏžQ{ûö-Ø÷ÝÝ]‚ÈŸ>}Ê›~pp`2™Ünw"‘ØÜÜd”ÏnÄ&wy<G¶”ËåH¡b0ÕÙÙÉåzuu…ã²|»ÝF¢óÎ?ïÅá>==͉&„Èår‹…â—i]<W«ÕNËå2c5â,àL­¯¯û‹(åàà`eeexxxhhèùóç=´·fssswwãòò2t°x<®×ëF½^ßÛÛëéé)‹ß~û-RñL&C`)Õááav©Tjbbâûï¿§ÖxõêUooïùù9êÐW 4ÅãñB¡`2™p‚hµZœP ÌÉ‘ °…0¥V«I†6Æf³‹Åv»=;;ËàF6#,¯×+‘H8ò5ºAyiµZ›`Áº½½Íš—3‚èññ±Á`èëë£ò’J¥[[[ÐØ_½zÅ¢¯^¯?{ö¬\.û|¾ÓÓSE<ÿ|>rrB®¡Ûí^^^>== h*z{{×××···q'–J%¹\—J‘J¥à$£6+‹ …‚!&•)§@ P*•n’†à«´Ûm.©TJ„:}د—/_»\®ååe®LvnÔ°½½½láPÄc„þ裸J?úè#fÊüD”J%¼F\»à…B\ÆîînB_Õj5ŒòX,ÆÈÃív£ÑR(¨u:Å/kÒÝÝ]‰‰DÂívwuu­¬¬ôôôÈd2Ä*¤T#úÒh4™L[5yÍPe˜¡C7‚\ˆÀ‰!>ñf³‰Ú…B‰D„I§Ó´¡áp˜;rwwìÉÉ Z/$7 N©©IVAaLÐ9¬ã§OŸ’ˆÀû‹ÅöööNNN†‡‡ïÞ½‹Ôg||™œ\.Ÿ˜˜@àHßl6 5•ËåpGðܹs‡51›-Ô®~¿Ÿ4¯×ë÷û×ÖÖt:™”x5t:×ëe@ñj†å6¢¬X,¦Ñh€YU*¼h‘!8±q¡j¶ ûÞ—ÃW‚¤©TªÑh°Ñ!Þ4æn·{tttvv¨Û'Ÿ|âv»].×ÜÜÜÌÌŒÃáZ­–_öîÝ»¬Ée•Éd_~ù¥ßï¯×ëä5cðCÚ§—)Ïf³°êõ‰D0NNN¯ˆœ¤”<333Øa(Ø¥R©Õj­Õjx²„xß5S¶pÌá«,•J¡PM'$5šPâ4@5ëëkŠ8 ÒZ­ÖÕÕuppÀ*‘HÎÎÎ85¨Ý¼^/Ål½^o4~¿ŸuR?(ÁˆÿJ¥¤âv»í÷ûÇÆÆB¡ÐÐÐÐøø8 m·ÛýàÁžÿÜÜùS£££|ð31LZ­ööíÛѽ\]]}úé§£££(ð&''›Í¦Õ¦ÙlF )„ »J¥KR*•E è ôgttZƒÇã‰D"L±„hÒ:ŽÃÃÃÑÑQ³Ù¼¾¾Ž•T9ªË½½=Â(R©ÔÊÊJ³Ùd¶ƒêT­VcŠI¥R‰D˜W&“B”ËeþŸf³¹¶¶Î…› ÌËÁÁ¨²F£a6›1LX,¦aCCC8pýtuu1#æÒåWƒÉáp8žíïïÇÀÌlí†&ˆaB¥Rá'Š`hhˆfkjjŠŒªÉÉI‡Ãñ7†XØX\¥\EÕYC¤ à—®Ël6CÙ£°^ÏLuxx3×'Ÿ|¢V«ÆÔÔ”Z­&L1,..º\.tô˜·9ͣѨZ­æ…].—)ˆ6…‡Šé„=6ÚÊGQ¥R)ˆr„w˃¯Nœó„ï3!!===¤µ”J%Fƒ] ÿ#¸ ðÔjµÚétŽŽŽòÊ Q‰r>èõúááa£ÑHÆË;ÿ¼‡;L‚ˆ¦ìèèP«Õt” šÞ´ùèÜy¹ÖÕ@ùÀX&ŸÏÃP•J¥;;;WX|=þ\saqq‘W÷Ñ£Gduwwc¤æíå(‡J–Ïç‰Ä“'OP%çr9N L¸„jµZOO\C‡ÃAØ ”'Q蔩˜PÀ Fá@oµZ³Ù,Ír&“ÁþJ¡$“ÉHáÞwyy¹¿¿Ïbª^¯3]a8Ðh4ˆQõx<¤\¶Z­§OŸžžžúý~¶ÁÅbqcc# †l6»µµÕÕÕÅüŠ™&žuDG§§§¬°êºI¥RŒÈr¹\*•òz½¹\nssS«Õ¸Lx$µ"ìz½ÀÒ&)xˆHó8<<©O€ ÑŽÉd‚,—Ë×ÖÖ°\^^²ÖÓëõð b®V«õzýÖÖC†““À^¿ùÍoXàïìì Aj6›£·Z­'OžÈd²îîn‚â0ˆ>zô¨\.cV„ W¹X,®¬¬ Êår…BšœlÏéééÃÃCØ×¶a¨j= !Ý„rз¡ÂDƒ" Ùl"·Å·Y,óù<ë_&Ÿ===Ì*3™ Ç3Ìv»Ýjµ™  ___7ápøôô”¯ÐÁÁt-~ÄhÀðÜ3D%•Ïç›ÍægŸ}V,;;; 0 Wkvv–á9GHS®¯¯#‘Põ¯¿þÛy$ÉårN§3ãzÉf³¥R ü×_„éÅ‹XŠ (‡ÃᎎœŒÝ„™Læ›o¾Ñét7———J¥òÉ“'ëëëd·žœœð¾Ÿ±gN&“*•Š€bü´_©T r£ÑHº11—Ë…ˆþF£Ñº@´(:6v³dœb"Å™Ìt¥\.ùòå/~ñ‹‘‘‘ßýîw¬yc±˜Édúé§ŸõPcÁºb,suuS£& dƸ÷îÝóûýLÃY}ÿâ¿ø§ú'§ÓùÅ_|ýõ×óóóÍfsffF¡P‹Å@ €ÂD.—þùçŸ~úé¿üË¿tvvÎÎÎ2 Œ•Øèêõú`0ÈYvuuu||Œ`”úk´T*¥ºO&“@€u.“ »ÝB’Q©T2¹\®P(`Q¾¼¼Df~~~n4‘Ä Oêíí… C놉÷†å›Íf;:: ú’[)„ öÝÎÂÂ^<gÁ~xx844$„ K“y*•¢B¤„"vmmíøøu žÑÑÑz½N`){ïõõõ¾¾¾?þd4ñ?ûÙÏþë¿þ+øýþíím‡ÃuÜh4â]d>‹ÅÀgŸ}öÓO?:ƼÕÑÑQ …B}}}ãããlò¨¢šÍæÏþó££#vû(’‰ÏFæKâ¼J¥"ŠÕ1·`>Ÿïéé§#„@}G÷îŽÒÿõy/*÷`0ˆ†ˆÇMê1™è„ôõõQDwvvÞºu *•JõùçŸßºu«³³óÁƒsssóóócccÓÓÓÄ?þò—¿D6;;ÛÛÛK:>>Þh4ÆÆÆè%!|ÒÆþÝßý­"¼'ú¯Ÿýìg}}}·nݺ}û6ãé™™™?ü%™Édf‚òÀ)52ÕD¿Óé„"=66 Ó õ;åyWW)v_œÅ€(:HVc8X«Õ°Vb&DÐjµè£@C9fž8›¢˜µðÒÒ’B.—cA’J¥Ož<±Ûíccc _m‹E»Ý>;;‹dlll`` ££ãáÇ&“ Dßï‡ÅqûömÄ$4Èçç烃ƒCCCÍf³¯¯/ šÍæ`0HÚßÔÔ”L&Ã$ ú¦³³ Ñh´ÛíðUp0 áp:~¿Ÿ5¼e¶ ü U2þÎb±LMM1Ügµ ËþüüüäädccƒÙ q]|ýb±C$R #‘Èþþ~8Æg …@•B¢P(P— !’Éd6›eØ}uu¥V«É¶%¬Ùl~ùå— »¸ûiJhÝn7¼9–ÇÇÇBŸÏ> ¾³³“¿8”BÊÆÆÆ¸H€ÿ°+6 ###äXét:“ÉDÈ*_¦+HÉÈ¥y²ÙlDY!"$gc```dd„…¶Ùl¶Z­Ì6Ñ `7u8_~ù%Ã1îÅP(tëÖ- LHtÀ~ÿý÷:®P(<{öŒ±¸\.ßÜÜÄTÁÍ”L&ICÝØØxóæ §A¹\^\\äa²ûE`ÊÈ…»‚£«« Uh«Õâ„ûM!›6!X °<4Ø»¤R)ÆlTR©TŠQ ’'bÈ|>«¾wyžþéó^îV«õüü¡H*•bºÇá±qÁÒèá‡V©T&“ioo¯Õjá—Ë©T*vý@HB¡]ùîî.wuOOÏÛ·oóùüàà øS€É©T SÆêêêåå%€?ÛÛÛxO¢Ñ(f1NÌíím‚{nF4»»»éôQµ'“I“ÉÄÈùA>Ÿ_\\„ÙøS'ÇâÑÑÑÆÆ¸´v»k‰{ « ÙLËËË´ÿÍf“3(™LâµaµÅ¨ þåÙÙ±œ­V‹¸+N[†Ô¼ü}oXÐf³ygg‡ý-“¯P(–——ÑJ‡B!”šär9ùœÕjÛ-`ggg,ƒb„Ì\ÁàF³iæ–]]]õzåêÕÕ9Žì°7ïïïÓ;¦ÓiÔñ———ŒøÛív¹\†ÀšH$ ðà#Á¿#„ó‡£B¥Ra¡o+‹wïÞB€œ”J¥”¬Çc±þÄÇÌFx;†‡‡øá†WJ¥òøø¸X,|ÿý÷ƒA.—¯¬¬,// †ƒƒRwvv^½zÅ×øÕ«W¡PH±²²ˆ”ÙŽT*ýöÛoÑþ§R)ô-P¡F¾ñ1ñuåñbï`¿ÊZ»\.ó´+• ¬B¡Àôò]¥ÿóó^îwïÞ…ŸÅH„kÕ ÎO¶:Œ³Y©£P¦ýGÛ-Äáp,--e2«Õº»»{qqáñxP§loo#ÜÛÛ¹¼¼ÜÝÝíëë;88@m ^ ;X›Í†¾¸R©°?==ÅVƒ`™`îx<Î=—Ë-//—J¥žžÞ@FÞ\?àæÉ[[[“H$寯¯»ººy8;;£Æ—Ëåçççn·; ºÝnR˜MLL@o‡)“É~ò®ÒÕÕE[ªV«ý~__ŸZ­þüóÏÉþöûý•JE«ÕÒß`v·ÛíZ­v||Øâ­ LDÎ|rrb³Ùº»»‹Å"Õéé)±¥¥%P?à”}>ŸÁ`ˆF£œJT¦}}}¨Í8šy‡YòÄH"$&¥9•µÐ?XTŒèf1@½Œ€„%k›ëëkÞù‰‰‰žž†àìçñËÌÎÎÂ~ðàÁW_}Åöž­¯ÇãùøãÉ«›››“J¥6›íîÝ»6›­ÝnŽŽŽÂÛ¡V­V«9uwwüñÇ|±ý~?&glúÔ¹&“)‰x½^ÇC§Å>€3öH €‚R¯×«ÕêÙÙ)qz½ó÷v» e:•J]^^²4–J¥ˆqé° ÃÿP*•ÕðLÙl6¬üívûàà1"A˜páy/òùÈïftËQKÊ+Ê ŽQ`[úûû;;;i­’ªÊ\ˆœ*µV«-..¢òuû7ŸÏ‹Åt:Íl ‡„OÌÐHhðµÂ©×ë ÄÀ™¡‚@_X«Õ °•E‡¾k` ¥RÉ£fÊü÷êꊴ?«ÕZ¯× и®P\LOO‹Åëëë¹¹9fô7iæ7JMFƒ·Èd2õõõ]]]1Ée7Nžœ\.'ûðââ$=]0èB-t:^¯W©T°Õ#h4 n·›&Œ1í6ÏŸ‚Q«ÕR¡Œ&½dmmíùóç\-©Têàà€–@Ñh” L°¬RÉÂ>»¸¸ûޝ i#2'BcàÊ2ò‡Ã¤—J%6Éüçh(‘±Ãoi·Ûdº»»!/Þ¤fó×g Aøq£:ò$¹R©8NÆV<µZMˆ7G£Ñ dÇ‹jyVjg===&“‰÷EAmïÏçãábv 3Hõ÷÷#+8::â+­P(Ý Á"«–L|”ïÃ罨Üggg3™ŒD"áP Ž‘V«e^LjcàéÇÇÇÄ“ âmïîîf˜.êððpmmè¢o¾ùæúúýÙÆÆI j#ÈE–€ˆbuuõððð†F •ôììluuUF4Õëõ½½½kkkð=Ø|¶Z-’ÚY?²…áÅ&³££cŸ³í³\.ÇÞÝjµÈ#®×ëf³™ª„˜ìJ¥‚{Îf³e³Y6“HŒvvvrp@÷õõuuuñg“Éd´´ŒG”±ak6›ŒSñ[ÝÈÀ…z½>NG£Q•J588‡i …íím!ó}ö¨W9¾kµ£vB„ëõúÒÒ< aƒÁpxx˜H$Ð-Èd2€ÆŠÅ"ƒä›@Œ]–›l```ii‰F4.®R å¤Ä1Ëf0Šþ)Í @¸»»¡›^¯÷ûýLXÏâøœœ,•JcccÜš8Ú¹<|>c1!„N§#8…LDþ52är9b9á–𓚜œD ›H$º»»‰g(Ã_6± ¬{{{ñ‹Ò$“I m4*ø¿pêÝÂ_c …šÍ&ÎŒd2Ic}VëP*yPü¦”)O M2™¼‘Ò¡¬Cńޔb‚wöàà@"‘!8vzzzx5Þùç½¨Ü öeÂÎRH¥RÌm¼P(ê»q``Àét¾}ûS{•Ï>ûìÑ£G>ŸÏívÿÛ¿ýÛÐÐÔ$„}øá‡Åb‘LŒD¬SSS^¯Õ£Åb$¹è2À”J%³Er¢)¢)yœN'ÛvÊÿãããÑÑQ§ÓyttÄ<î¦uM$¥RÉét‚®eˆ¦Ý$—WF\&Ú‰„¦"é tÓˆßoÔW Ÿ ÃÀÀQ–죀„^L& ƒR©DêsçÎnòÿ(¥Ýn7z!®·Z­–ÍfÁ4¢1 ‘¯Õj(¸§¦¦ÀŸz½^Ððýýý4ÅôV«U¥Raú…$ƒ?-°µZ n¦_ R$"̰,r`¾ùÕW_­¯¯riá¬Ñét×××.—kooaT)¶Ìp pTqJ²P¡]«×ë###hOQà•J%CÅb‘ >Œ‡ÙÙY!· ßïDz`6›9/šÍ&?œb,Ï…]]]ççç𥠤 ™L=üüüœÇÅø›Z˜”%À/ƒ¡R©>|œí}­VƒæÏNïþàà DO’Op¥ÓiÇ윅?³X,†ÜÖãñ,--1WA>€b¶¥9ß<%Œnà´9uçÎðÈ;;;‹ennô)ü ƒÁ€¦ ÛJ¨YˆââÿÁñO=Ádl``€©æ<¬^¯“PŒ†´ßÑÑÑÈȈËåb:J5ãp8nüÉär0"K.ÿÒÒÙ4­V«ÅbÙÚÚ±Ş .?¿é;=Mÿüy/wdæ >–kÂèœøš}æ°H€ 0Â"¿¾¾n³Ù*•ÊO?ý„¥ðÕ«WF£±¯¯ ¬ÓÓS ·t:Íh5‹!퀦ĦŽ~Ÿk_¡PìììÌÌÌ4›Íp8¬ÓéðÁkµÚÝÝݽ½=:}¤Ü™L†jýìì +Ýk¥Rá„ Ýn³÷ÇŠÙÑÑ‘Íf)Ì™ävuu±brB™Æ óç#z5:ä˜Õjû8ËO]B0„;;;^§§§è& …Œl6 ¸œ)MC:Æó–)"fGÃd l$Q*• ŽY8×ëõ••èØø[­m/É T7˜Ífsggá?¸+Z¸¤Réææ&þaìTâf³ÜÇÞÞ^»ÝÆs–}xx>^£ÑÐVªRL IDAT*6ô:lêõ:.žp8 £|zzZ©TÒl;C'ÒÛ‘‘‘C#„jÆ…B!™L¢~( æf¤À tcc£Z­‚Šäìþä“O&''¿ýö[æHÕjµ;¸˜óós&6 4¸ÞÈER*•'''ÜR<%¾±P’øZ²ÀŠyxxÈ5L2"ñªÌ¬Âáp½^ç5B@Ô „à L®UH¨›o5c–:‹u/í2Ül!°°«?ådmnn’ 411a±XH¿ã¯¯Õj9ÜëgÈÈ‹ˆ(âV0ЙÍf zÌ^ªÕ*O¤±÷ôô0+c0È7O//W2™D­_.—™¾Rß°Ò¿¹b»»»y+ࡃbôÎNÒÿýy/Æ2.— UC?‡#'2Š%0ʧ¿¿ÿ‹/¾ÀͰ»§§çÎ;8Ð4 «¹V«500@톽bppƒcwêB¡Íf¡<ÖÀ[¸°°Ëå~0”¦w8YhGGG˜˜n£ý899¡U?<<<<<ìèèÀ?ÕÓÓszzºµµEÔž,$  ¸xëˆD¸¾¾&$÷ßEªl*b,‡g:’CØ@2 a¤>444<<¬T*ÇÆÆpr †““BàˆÄ®‰B† U¢„gffÈÄéêêR*•@\‘èÈårvÈ(‚- ÒþÀL–ˆ@BsÝÝÝ͸ykkË`0œŸŸÓ¾sh›&°ÆlÚÏÏÏÃá°ÉdÂWÉÅZ’0€““:-œ¢¹\noo3s.—ãô9??G Êàêê ÿªÕj…V¡s||òž<ÀX"Èüd¥988ÈÅl6£ïììdÙ.„ƒ>ŸÊ#A¾0RœNçØØ†^°º?ýôÓÙÙÙÈÈÈóçÏAQ !Úí6È#ü™^¯c€û&“ ô4¡¸ é9…Ù+´Ûm§Óér¹˜Òî༭T*R©TÁŒóo'«¾~<%r‘xžQ‡±æU*•]]]‘H„ÅI4¥ÛÜÜL&“\Þ2ãñ8Øzdéü¯>ªÕ*ƒ#…BA £5¦¶jµ:00Àò¶¿¿Ÿ=Öàà ~Q´7ß~w\,ÌÊ„9Î@ ³_…ÛíæÐG´FB§ßï·Ûíñx¨T­V xyIår9k$Ë$ !¹–H$q¨þùc³ÙÒé4ûqNG¡W©T0Ñ¡ #Ïèõë×ÙlÖjµ’@Aåþáˆ1«Õj.— ¶ÉÔÔ'ˆÃá€&1??O4G0D#¸»»ûâÅ ‚³766îß¿ …l6ÛÉɉÓéäm±Z­GGGÿ÷_­V///o@wn·ûùóçf³™Q&ãÚ­­-Zrˆ ƒÉEs@H±V«e]Ìß Ï „qj½F£AC´B±X¤vn6›Ùl“!O­V‹>ýÎ=ÐBˆ\.GbCµZ …B›››2™ŒïŸZ­<>>¶X,D”Á§¶X,(L¨àÆÙíöZ­†{€²E&“!8éëë37¨Zil·\µZL%ŸÏ÷èÑ£z½ŽÝL§ÓýðÃÏž=#Ó™# %2RKƒÁàr¹r¹œ\.Ç×FÛ{yyI$k1”þÈŸ?Žf)[,–ñññH$Bu ‚!,U´²³³³ÝÝ]–ÀXÛA@5¨×ëA0)¾¼¼Íd2eu:VyF£1‰¦?::Òjµ4£v»}gg§££c~~~jj*‘H´Ûíááá……þ0^¯wggG¥R±bŒd6C£Ñà ³¥P©TTBˆ@ ÀT׊á!7ÍÔÔÔ“'O„¨f…N§óúú¬“N§cÑÅf•;µÙl‚y!Ò²X,››˜˜ˆÅbè~ÔjµV«å¦GɆª™ !·*•êáÇ&ij%Ééé)Ùu»»»ü¥˜ó°õ­×ëß}÷J¥b™yrrÂÐc65 p¸˜2™ ;| þÛÛÛLT´Zm<Ïf³“““ô”Ä[Bœííí¥ž#ø‰?jy@§§§Bt ”T*ÕÜÜ\4¥4äRyWéÿñy/*÷ééiF%T[ÅbÑ`0€ˆ¹¾¾f ÍIwrrBŽâ0£–-•J±XlaaáÕ«WR©ôðððÕ«W I^¼xQ¯×ÑÂ3RÀ;Nvss³X,òeë ÛÊ3¿µVxÔ …‚ì!ÜêDyÀÖ`K†O&“!ÉÒétøé2µ`zÞ /'5hf²”¸?Å ÐÀ†ÇÙ w´Õji4öcBfôˆÍqE¡iý’Éd˜ÿîïïK$’ÞÞÞýý}¦±§§§øª‰ïa,K™œJ¥‘H$8‡‰C!®!ŸÏ///£ÚÜÛÛÂi(‰ †ë‹ÅVVV°þ&‰l6k6›™°åイÑhÀ³ÐLp|4›MJrŒQÄsƒÏB adOÀMhnÀ59»‰”»wïp|™•¡1­V«Á`P¡Pp…ÓÕÑYdz}}Í M&ÓÃÃC}]]]äg•Ëe”ær¹|}}78Y©TzppÁ|gg›4É×&•J'ËíKÿÁ™…Õ]>ŸO&“p‡xÔ0!°Þð}Ãr…Ê”ûãÆIW¯×Iìãbn·Ûleù~ÂÿMÍ?´Z­0´Y´ °d6Òn·¡9Næ¢Á¸|#ONNb>ïííÅNÀ‡²000ÀêÅáá!­ÝÝ]!D­VÃYFµ!•JK¥5¢Í€GòÓ‡¡-‘Hb±˜Á`¸)Ñ÷7º èFlªy»ê²Gm6›'''ˆ•‘9…B!6˜þÞù罨ܻººÈÜaMÔjµ„LÛ™µA èë룆bS¯×ë#‘ȳgÏ>üðC—ËÅKˆ0ó2«ÕJÙ 8—ûùùy:^]]!ÙÑѱ°°ÀvÔjµ^^^þôÓO÷ïßÇ®f2™êõúîîîÏþs’ö··ñ|ÞˆŸjµšR©DÆë£„‚³V«E¸†”˜¿B?“¬U `0AßÂ^ŽÿÕçóÁ!°Z­À~u:F£:©ÕjÏX,²7;::„³ã%¿¾¾&ÜÀáp :BX­V` ¸ì”JåÍËFiIÔC*•úñÇûúúØ›Y­VÀ÷4Ñ~¿ÿüüœa(%!ïO¡P@×D°¤ýýýééi³ÙL .ÖËÛÛÛ$c¤Ói„ðÛÛÛ±XÌét †ÕÕU¦hïÐæ³¼%{7™F£áñ}޼%Ç.œ`,ŒYàFPÊuww›L&Ò¾z{{¡ )G×`ˆ¢úÇÁ Æëõnll$ ›Í‰A.—³¢À­ ‹Å"l j=·Û-„À8CcIJA­VóM †’þJít: ¶}GGßR©„>÷"JàX,æõz)nÈÕbÂN‹s<ŸÏCÛfÐǼ(ÓDò`% ®ò££#Fsív{aa! ¦ÓiF^Œ¼$ìïïçr¹ééi©TÊMÉÚì ñbWW×ââ"V‹Åâ÷ûðîÁÂ4›ÍP˜qutt8‡Ã±¿¿âÓl6,£££:\úcÆn¬O õ%ž Ò4ý~8f’‰÷û§Ÿ~r8N§ç9ïýýýü¤˜=¼«ƒôÿø¼•»Åb!K ÅZZö!8†º»» ›fçÍŠo¼ÛíF?<<ÜÑÑ¡Õj§¦¦„øË?ÿüsÆë$!0#ã¨EÄM§ßb±0Éd˜>0àТ¢¡f¡:<<Œžš“‘I@4tä!`€KE‚…`–ÇãQ*•;;;˜ýšÍ&ri&üIÂá0M(ý²ÙlÎd2étùž 0žÉd2BBÂ㿺º"'¬T*áÇ(ÀÞ•¢&ŸÏsd€T¤hòx<à6AŸCù`›‡¬¹ÂÀÀ€ËåÕKžÏÇŒµï£>:==eJf6›8ÂÒãWÈçó‰g,¿H³ÙlµZ(h•8d1¦’‡‰Ý^1—œËåâ¯f0ìv{»ÝÆ´‰¬Æ:ANÔ˜ˆî®®®²/‰D"XZ@ó#å'ßÎét–Ëåp8l·Û1¦F£Ñ±±1䀈(NOOÆÐëí%•JONN¢Ñ( ææBˆÍÍÍz½><< â¦a¥¨×ë胫Õ*£¦%Lö8ÂxJ×××\l ™X­ÖF£4IuìNG"‘P«Õ´˜B’¶ƒŠE&p:T"jµZ&š?-…ÉdÂcÅF´ÕjE£Ñùùùžž\ÖHuC¡Ðwß}‡,â?ÿó?ÑÅîììP/«Kˆ`»ÝÀçÅþääD"‘ &“ÉjµJì>vÜãÌ?;;;QyÒ;’pËŠ‚k½«Ífóx<Ü 7o Þ+Vè——— ~d22!vl;L&Ó_ðþ t¡¶…€Ra8ÿðððÌß­­-DZÄFacS.—Ÿ={Æ[±¹¹É26N:?;; …B¦§§L,%{vøºBˆÛ·oã$äݨT*¸lNOOe–J¥½½=xF4ÝBÑ´¬ÅnL…B€Jt&ïXåÁæ6›ÍèA€ØívµZ͹ƒµõââÂh4¢š Ä;??çæ£—DúÆL6#K‰ ”lU`ÅÌÓs¹’;Žx< g2™ýý}˜ò Ñh”–¶X,\ÜÞÞ^XX`ð‚™°V«Ýó’É$7M:><r Ô,hŸ…™L¹<ÕK/eJ<¤ñ¼ÄHétºl6 UвTQ(°&0š`~ÂhðØØX»Ýæ‰ÅbÇáp°Ww¹\е؈îííauæià”ÁÆÌòä!¨E8û¸–b±Øáá!µ3:< g!•&ÉAÍf“M&“íîîr ð;Þ¸˜ª !°Å±·€¯@à§Éd⺢%âÈ#âcwwNww7´÷ÞÞ^zJľÌY·& 4$Ëp-Qˆ@fe›•N§N§Z­ŽF£lÝŽŽ˜É0ne7N´7EÔÉ­Vk||Ô³S³ÙŒ IA¹A©Ùlîî„©R©ð¸ÚívæQì' “wv‡‡‡õz]¥R1‰%R-—ËiµZÞSfM ”ožÆ+šÑJ¥}“þ&NúæoÇÀ‡ôÚwv˜þÏ{q¸öÙgr¹¦‡\.7™L^¯W§Ó! !Þð£>zðຽÉÉÉ|>?==MhçÐÐN§óù|¸¥Ù¯ÎÍÍqdÆ`0HL…uxzzš¶·Ñh ¢%@&LV§ÝngÛƒ·J% pv2ê?Qÿa× l Ž†ƒ„ÿ†½Ü 4F–r¹œé$ü!„Óé„–Ni€o †#Æô7–}‹³³3p1`æççé?x¶Z­vdd„°6r‰dnnŽþzllŒ,:¹\~ûöm!õÃè è¦Õjµ^¯eû„÷hS6iH¼1ž0+fµ5::ªT*ívûÕÕ"3æõzÎ « äO¼9–PC!ÛÐjµÌñØD"îlŒi°3 âŸ_\\pg0vc ÒÕÕ5>>Ž;-†Xâ{¸›õz=ºo¨>\ ‡EÈüü<›ÙÙY&6½½½CCC¸±Ø¬¨TªÙÙÙŽŽN‡;¯Ñh'„`_Gåè÷ûÑPáV©Tü ,BÇÆÆ$ ƒˆŒ4+ü_bB‹Å"s<š0vÎ7ÖV¾6`YQðÝ“ÉdßÞÞ^WW×íÛ·F>ŸgªIu<77wyyÉè¼Ýn¦M!Q™tþ^D<Êd2â™êõ:j1þldúúú¦§§ ΘÎÎΉ‰ à:.ØèééA/„P«Õ‹àŒËå²Ùl¼žÄ53ZÀ¬ƒ3ãދä$”€éïÎÎÎø z<^ &}X{8§€•>@«;==ÍlG«ÕÒº\.Î/*½^qqÑ×××ß߯×ëGFFGÛl6¯×[«ÕÈVuãQ*•7/­ÏçNx U¡B¡p¹\½½½Ì)].—‚Ò€‰q60ÿ‰"z¾ßèÀ¤d2™³³3þ5Zö¢Tý¶Bˆr¹Œƒ–ô`Ö>¸E˜är¹ÕÕÕR©Ä@|ss€I(BÝ´Ì7“V>°…OOOÌð‚y½^»ÝðäÆÄÄô¹³³™Á`ƒP;0‚üEÉ]Îé¦Õjñ©2+???7™LpäÕj5ÆS¬ˆ©YT°AïC“ûU3Ó$¥RÉ¿ÖÑÑ_‰\$à *•jss³££C"‘ê‹W f$wv:îëëûæ›oÐw¦Óéµµ5踄À%1rBgÛjµ^¾|¹³³s~~0````?™Lúýþ|>72³æÂ\uÀj<³fØ&µZ$&<Ì£ÐiµZš'FFBdN ­V+¢I4Zè)”qC³ òJ¥d¨4 Ú”—\'‹94oݺU­V'&&à¹Þü‘øMˆ*Šd2¹µµúé‡~àÝÝÝeøY«ÕX)£_¤êüø1^Ör¹Œ"9“É`"I&“È1„ÇÇǬFI_ÀiÂ’~ÝápT«Õ ÚÊJ¥‚àJ0]ÂÕÕÞér¹Ì )ˆy7_gg'WÝ{’Äô^,T///u:!ð&]]]ˆ4èa^8??÷ù|OŸ>­V«çÅ‹°güñG“É„Nñðð0>xð ‡Z­þöÛo‰à0 GGG0ÓC¡R©ìïï‡YˆöãÅ‹< ·Å÷qtt˜<î¡¡!À¤m,,,tuuáîã4B°¿EûÌ+}ttT¯×¹Zòù<ò8$åryddDÁ(q‚ÑhB`›f“C߀¹ ;CO¬®¯¯ÑZ°i»J-'iˆsðgçr9jØ­t˜;677§§§u:](â]‚v¬æððã_,K§ÓäÊSü !ÒéôÜܱ!jµzwww_©Tb‘ÓßßÿêÕ+¶²èU&''á@‘éÜÝÝ=>>N&Ši¾'lMÑH0¼Æ(„ µGò¢ ãX6›¥_¾¸¸` ÆH*•êtºb±P¾"…bY=;; 8Üd2©Õê™™":ÕjµËå¸wï^2™¬T*x¦n$IJ¥tÏÕÕ•+Ñh\\\B|ñÅZ­6Nïìì! *ùý~žU.—ƒ¸‹Á‡ï âB*G”K(š¸’©v“0*A?®R©€E# ‡ ÍÝ#‘H°•ð^€óËÂA<g‚ϤD´ÃÃC¦g‰DªÌÎÎíߥ{÷î…B@y\ZZÚÚÚ¶Á,ûÁƒ]]]###CCCOŸ>BôõõÝ»w¯^¯c¦¥ëëë3™LèŽh¦‰ÐB@ch#‘Hc µç•„.”š½Z­²&!¼Ìëõvvv²ˆº¼¼„Ýïv»É€eCÃ×L­Vïìì`?f ÅÉÎ-ÈÃw:ÿÏÎÿÛ罨Üçææ(µˆ¦es244„ÀÖl6 ðý׿ÚçóÙíö­­-B¥‹Å"ùÅårW*s=D#x@Pât` áv»É/eË +†%äøø8kÔ©Tjhhg<_÷ééi®n©TÊUøâ†"T«Õ˜§£Éåæ§[øàæ³cccl Ýn7zj «­V ´Åññq!„N§»}û6vA¿ßÿá‡6›Ížž"„ÎÏÏ)º…óóó~¿?•JrH§Ó <DÚív†K¼Õ¼Bh‡$‰Ïç‹F£à÷R©”ßïGTj2™(äøJ$©TJÅ ‹µJX,F‚:†—r¹Œ<´^¯ÓU«U~¥R‰Ù4ScBù|ž?fT°·­V‹QfTLÐÌGGGÑø»\.ŸÏ—H$¦§§=O<$'`Â0ÖïÌp[,PÏ µ¡ J$ÆM@ N§Óéd²‡L§ÓA†Q©T '% ×8ÍH$ÂWt„ÝngEA ÅÎêTÃåååM ”M¼E„âee¡ÅÆi&ÖMV÷d2­3 *Bˆññq”Pð˜Ì°N¸¼¼¤1Ã;ÐãñœŸŸommY,–««+ò=ð<7 Æ,ÅbUK`ŸÏ‡KÖívïîî*Šû÷ï3Cy X"‘ƒA§Ó‰[Øáp(•J®“žžî* v©TzëÖ-”iH˜Ý›´ÛíÀÅ a¿££ô}ދý··7—Ë¥Ói©TÊÐ^  _===U©Tn·»§§‡¡ç/>¬O.— =/ ªjµJÞ9¼È¸@ÑMò>€ì dCý§ð_»ÝßF«ÕNLLðje³Yî1%’)ŒÀ@©TÍšTëÿ©8¤óeêŠçSH‰D‚ï™zG¡Ñhhîíí±ÜËd2±X¬ÕjqW±Ëçó:îÎ;l¨PC:<<ÌÑ<22BÁ '''¡xF¨&ããã¼x„g²õR*•po>üðC‚‡‚Á 5L¡Ðuh–{{{©:µZ­ÓéD©Æ¿ ZI"öf¤#üP63ÅbÿƒV‘F£¡¯"üúüü™V¹\&O®V«áK*•J?þø#6™µµ5¯õõõx<Îbiiiff¦T*mll°ŸDb6›_½zÅmt||̆–œÔþüRüXëõ:å'N·ááa…Bó–k†;®úØØ™&KT½^ƒE)ïp80ãP0±‡t:ív;›Íú|>®ypÙlnD*•êîîv»ÝçççPS p½¡UCAËè†Åi‘F£‘ 0¿ßÃãàààÎ;óóóÑhthhˆÙæââ"k†ÃÃÚi³Ù …B*•ŠÝ;Ç(Á&À㸠Âáp$áO~ttD?±¶¶F©ÞÒh4òkh¢L$ÖQ§ÓÂFp“¢Ã4ä á”R©tww—÷ëúúúâââ& ;X«ÕêïïïííÅ¿‡ßéúÿÞ‹Ã}nn®Ùlr22a†Á"¡©˜èVVV¼^o8üÿ±wf¿mæçÙ~¹Š¤(J"EФ¸‹«DIÔfÙc{–$“&(’AÚƒžµgýzZ @¶@iƒ¤˜ÌØ3ã/²µS µp߉â¾×7LÚï°>éÌX–È—¿ßóÜÏ}_ÏU,³Ûí»»»ápB  àB¡`µZŽŽ.//ÉëCG1oß¾e$B'“É„ÃaŒA&¡ËK&“ÌÜ‹Åâéé)b7&¿l6F/// ×ëõx6þ^¬sss„&ØŒJoK攀œ ‘¡`?@H§ÓÄU Aá‘@·?Ä'd,13¡EìëõzˆÅ{H¨²ý‹‘Îýý=ŽápÈ l!v»fËêê*A€Z­æ¿ç3Ãdx~~Þï÷é\[[ã„ h0(ÛkµšÓéd}dô :!n&¸c‹‹‹@Y‚étºF£±°°`2™˜7Àd§êÄP¾<77733ƒ £˜(ãîn·;???;;;Î(éõzNj´r›ÍÖï÷a%‹E:Ÿ‡¸Àî=œì<½Éd’›’T*µZ­ŒR©õz=Öõ‰‰ Š0âr¹Ú.ÞV«õé§Ÿv:¤°^¯çÙX:N¥R©Têüüœ¥¦$rÁø\]]Z:88ÀûæÍ›h4ʤ÷Õ«WæïÞ½c÷y„û\.‡s,ŸÏW«UÖ×èt: tÞp}1Î!­t:RZàciÂX†yâæ6Ÿ}~˜Dsÿ Ü2|JÙŽj«¥Réóùvvv®¯¯¿ýöÛÕÕUæõKKK(éÉd’ÉR­V;99©T*———‡‡‡àªAp»ÝHÈž]]]S(ËËËGGG•J…Ý.ô¦\.ë ¸‰D ž¿|ùò7¿ùÍÝÝ]<gdÏ5Ð#‘Hð1£k4f³™ =5ŽF¼.þXX«ÕpñP.QV…ff(òŒš©tÓëôz=rOÙlÖn·“ÓcÞ%‹ T^SŽªååefˆ’ÕjU¡P@:3™LçççДJ%Û ÐC_¾|ùÓŸþ”|,ò{\Õ¬“v¹\ù|þèèèÁƒìNF¦R©øýþǧÓép8̈»\.;ŽX,†X.&®­­Á~˜}òä ¤eh3ÖDvArb‰CeåZ°\(ƒÁ€4£J¥úå/ÉÞ+ðmFzÕb4epG—@ò…Ô»Á`ðûýÑh”Ûy„ì»ï¾óxŸ¸xHAnoo/..ñ›¾~ýÚd2á£ÿ‡§§§x]ŽéPAGðY`ÀÀÀÓl63ö`ë½i(ÂýòåK þì#Dìþ—ù—åååååeˆ7»*•J§Ó!Õâ|Å€À" Œ¿'''@@,lnn®®®Âå' –Ëå<Ïþþ>û8Qí)רý½˜J¥(Lù}ùðÊ|_DåþôéSn<éÐ.—‹‘&[€A Ǽ´´T*•ë(Ùé| …B¡Ðôô´T*ÅÀ0C¡Ñht¹\fkk‹fö- †B!4œ­­-ÎÐDð`0øðáC­Vë÷ûƒÁ Ýn§Á„XIœ³K8Ý1îW¶ ½ÃÁIÓͅϨ·J¥â#ĪŒ1W$‰ÓéäãÊ‚o +‹Å¢P(‹©Õên·K˜‚^ÁétÒÆbm¦U”ÉdŸ}öýÅÅEÎPvƒŽ¡{Å$çOŸXgK*Ÿœ¥¥%e–˜ã‡ƒjµZƒÁ ßÐétBËA{üø1² oóŸÏ÷ñÇ?|ø°Ýn¯¯¯‡B!ÀËtë333›››|˜!L°ß*¿>sf›Í†~ &B£ÜG½^ŸŸŸç AªBrÁ湯m$q¹\¡Pd0DØÙÙ±X,¯^½Òëõƒ¾+ U¸.333+++´D[[[8q{½Þöö6î=­VË0§Óɲ‹¹¹9¯×KØ Û ÜÜ¥4¬L ÖÖÖh­P#‘’u:u%$E“ÉÄë&—Ë ßS*•:ÓjµZ­–‚€µSðAÇð’>Hj¼Y@èPžÂ¢à†à-æ­!KÁ ’P0D!H£“ÌÌÌàvÅã`4)†F"‘P©T‹…ÿ’\ K§¦¦Ž™Š¡þÕëuâf³y4A~õxV···y%Õj5ÿVƒ ¹*¬„˜Iîïï}>(BΘA¡rB•¯-&#ñ+„øB¡€ozzúää$NcNea^§Ó!˜3 @Ó@|d/(—%®D™LFRô£Íf£ç`¨ƒŽ‘ÍfÏÏÏ×ÖÖz½Þ÷ßïóùÐ-u:Z­N$L&8 ¡ã‹Å@ pssS*•Ø”y{{Ë8 æ@ Ó¾ r ‚0??šN§Ûíît:­Vk{{»X,...ò`sa ¥|&AM¢ÐjµâÉa1¯^&“™˜˜ØÚÚ¢ddB€Ho.h;†QX⃥R©ßïW©T„cÈjà‡‘H¤Ñh|Ÿ‡éŸ}}•ûG}„ D$a$aü.BÓŒ“ŒÞÆÆʦ×ëeÖqp¶L&ƒ¼¸±±Q«ÕL&Óƒ(¬–––2™ŒÁ`0lC…PAê¡T*ŸŸËåò H¡KKK‹‹‹£ÑˆE©”E®¯¯±l#%3ÏįR©T@SO±k „tÝ!¡¢ãC`„Åáˆû›åvðÿØ›ƒ7€ÒO£ÑÀ!ÁÙ=?? Çñêê*k›ø0 l`pFÂ\¿³³Ójµ”J¥×ëÅÀ>33³µµEÍ ©: J$’J¥²±±¡Óér¹ÜúúúÒÒ’X,ÞÜÜÄpèŽAX^^FÞÅ„> ¶¶¶G4%õ‰D˜E3 düq…¼4+îxˆ²pʰŽ×àB7/ OòN¹\æcÁjµ–ËåããcÕ2–'Ú.—Ë———qjÎÍͱÒÚáp°4Æd2mllÆz½¾½½Í|b8"(á'aǼwaa!píiµÚd2)‹AšlFˆË.— gæ@/ívÛh4Æqâ‡ÌÝÝF£a÷4&WÇØÃ`0ð[^^Æ2ÄÌs8šÍfbèõzdFXÇsssjµšµ3Àî1­bæ™Å§tÏÕˬs”^¯‡BAïBQ…ïV%¢-©TêäädzzzlÇ”ËåLJ¨Ù1ü0V]XX ˜³Ûí>d8¨£Õjõüü¼\.Ÿ››D+äÚÚ~§ÓÉ®³ÙŒy”“)}¹\N> “¥ à¯Çá•©©©³³³÷rþ¯¯âpÇ7†™Mç°[Åbq8&eÇÑ???O°Ñh­7ºËYæ)uY£KRM¥RìÓÑh4 À'''766A‡Ã,ZcòƒjY.—ÙïÅÃÞÂÈŽ³<6MÎÁf³IÔžgš6’È`0`ŠÅI‘™#‰yÊ ¥R |†S’Æ Œd%ÉÙÙŸ+mÓ3Ž›ÜX,Wïææ åõë×Åb±Ñh“R(———d‚Ðp¸‰♃÷9Ž<¶œ-PGòùŸ“Ûm@,ùý~v'aÃzýú5ó¶v°ülrr2‹ñ®c:4™Lß|ó (÷J¥²¿¿8"—Ëe2™ëëëûû{¢|Ñ[0!ê¤7;”@³Jþ8ôöjµ:11qww …xnPö³Ùì8]Éy„ƒˆ!!±o–Ú0Þ„5FmÅLŸ–œ}r˜©ù‡ yÇ/´þ©©©ååå\.Ç Óé®®® Ž0od—(s!———pPAÔ,ˆÂ×××ÅbñêêŠ:Èçó¡‰DòæÍ›™™viªÕê7oÞd³Y¿ßÏG6;ž8ıµai ÇK²qÌ_ÂÔ)“É$ F=“ÉÐða¦Æ Šudmm 802 û. Ã矘ŒUÜúŒËXæåv»Aý´Ûí•••d2ùêÕ«P(„׈)ƒk³Ù|xxÂ"é…BAºjrrÒjµÚív¨&ÄÊÌfs<gpJxïh4ŠF£n·ûèèˆâC‘Z­& ^˜•,Àdd2ãMâñx|8žŸŸkµZL*•êåË—œæcN[>‰Ð=ZL&( :ìÇk=èɤRiµZE,eŽÂOÂ6‰ _ÅãqiŸþ9÷ñÌÌŒÙl¾ººšœœdF‰Ö÷ææ&¾U›ÍÆ”Èn·ó:ãŸ!O;©¨Ö××ïîîž={ær¹@™Íf§Ó yB.—{½^Tõp8¼ººêóù°±Q`q‰âjkµZ Å LLLÐag2™1ÚºÛí2teoâ{=MÿôõATîxZz½*3 &T Ø)r¹¼V«e³Ù@ ðàÁÄÓ ª&v»ýñãǤüÿò/ÿÒï÷/..’¦^ûÅ/~ÑétjµÚÖÖÖýý½\._ZZ’Ëå Ù+• ‰!¹ÓÓÓ8ˆooowvvŒFcµZ}ðà+z=Àëx<.‹!Ê’%±Â:M&8=È4£2#¯LGcÑív‹Å"»œõI| ‡CŠSÈ*≰2bôÊI´“L¹\&uÒív1´Ñg›¢æº»»«% ý™ža_ÃHÀ&F£áõz=O·Û•Ëåf³™¹Y¿ß/—Ë¡PèéÓ§˜8·¶¶pb€fòöñÇ1°ˆ¶ðT5M("¸;ž7 ¨ ¥ &u»]d7¹\ޝIznnŽÈ©÷t:v—Íf2Ÿà•…”V§ÓW":­Öív{ii‰d¿R©Ä¿ÌƒýŸÀÞvP±½^ÏãñT«Õx<îv»á=zôžÁ`˜žžÎårx`J¥ÒÊ8’ƒÊd2ñz<æC,ÌâØb¯³¥µµ5Pe «¦¦¦°ð÷û}­V«×ë§§§É‹MNNÊd2ŸÏGuë¡Y¤u{{K¦ =°\ž ´Žñ¤Å J (‰D2ÞÁ@ûþx„´št:ýôéS£ÑxqqQ.—¡pçóùóóóF£áóùæææk±`‡Leò"ä`Ífs$áLg¤ŒqO04 ¼M¬ƒÖétB¡P»Ýf“Cu”OÌW\ü•JeaaaLæÁ§v¸R©`Àë÷û´tïõ@ý¿_Äáu  ‡Á`H$Ø×²Ùl*•šÅ×ét8ã2™ Ag°ËÓÓÓXÈ•Je>Ÿ§¥Íd2Ífsyyyaa°*óÃR©ÄJÎVµZÆgJ>Ÿïõzr¹œ%™lR&³@d†d,…9½$ßñ*½^Ïb°ãã-nLíA¸¿¿çù£R ‚_[£ÑPà"M¥Rœ¿Ø*Ôj5Fc†Ï<ÜÃáÜ3› 9JØ÷ˆù:—ËápÌV¡P9Éçólá°X,áp%ôîî.‘HPFåóù±QúJ·Û=88À2 B¡Z­¾¼¼d7V$¦»»»Ÿüä'lÝ#ç¾iºAhˬÛíö««+LxÀòT*«Õ:‚ã<+J@&4 ŽÙU‚ Iïv» lWàn£ÙÒh4;;;´Œˆ­FÜ|8&á™L&¯;øR&“Ä þøÇ?š†-C×u||Ì3‰D4 [œö Õ'''”„ù|&bz•Jeff†l$Èbt$–½0–`ä€dG¯P(Ðñ)0šê÷û€*íâç㹿¿ç±dŒ Ï ãh•J…MTˆóO*•’È­Õj …" ²E‡ÞV^ ¯×KÐdqq‘W€ÆÝŸ4¬aQ©Tn·4áRNùN§Ãí;onnxÂá0ê ¬7žº/^X­VvqÐüA?99¨@ãÎYÑëõÞ¾}ËU(x6@0±˜GG¡P 4™LD%šÍ&ÿvæû;MÿôõAîŸ|ò ”}²ƒ!‰@ˆdƒ­T*ÅbÃá0”J%.m’~œ ,CÅ#Wruuµ»»KWEˉ£†²(•J„tœ×…D"úïîî.™ .ÎÙB¡ðâÅ 2œ‰D‚Aö)>ÐVÛí6qJþ_æ3dC%V0<ð N'i7“É$B'î«ÅÅEê8¬i¸Üfff¸I⟃r.‘Hûý~˜L’Fc Û299É)P©T|>ŸV««¥¬«¶Z­ÇÇÇŒ” …•x¯×K$™L†øõíí-'21™·oßîîîBxýúu.—[\\¼¸¸h·ÛÀÃݦɽ¸¸ DzwwJÀÚk·ÛM&“,ÙÝ\­VA1#t:f³É[‰Ÿ!‘H AP‚Šu½X,RÿbšžŸŸ'b·Ûwvv‚Á`»Ý¦{ãÍ}òä <ŒêÀS©”ÃáÀeÔh4ü~ÿýý}"‘XYYÁ&‹/ñ©Ãáh6›N§3 ÑÍÌÌPð¯ÊPœ‘z9[år9[“@ErPXðãìe2ž7ê²N"‘èüüœÝ)‚ @š#ùŒz’~b^C,žõzᦣ^¯W¯×Ù9Þ&õ^r¡…BA*•f³Yê›Ñhôüùsbº Énnn¾AÀ+Á~˜©©)0!ø&‡Ã!ô¡v»½¼¼ìr¹°905ÁƒË„œ×rrrmm K0ä«ùqÛåãÇ·¶¶°]lmm•ËåŸüä'œÅ‚ ð‰~+ ÄI:ãv»M¶@×@¿ßŸŸŸgñUÎ¥÷u–þù×q¸///³+µ\./,,àpZ:«~Ù8ñë_ÿ=„µAÙiµZý~?ƃ¥¥%¦ê …buu•½<_|ñ…T*µÙl>Ÿ¯Õj‰D¢·ÛÍG a×ï÷/---,, †õõulsÛÛÛ¬Š† Œï ÈÜ8W>QšwH¼óóóœbl|FŒ¤ …B£Ñ(‹J¥’ ¥ôéÄ&i2 š`˜ÑëõårcŸ4 ø ‹Y­Öëë룣#Èq¬ÍR«Õ\Ïw¡Zbx]XXËå¬ù%%—ËÙ¶†Ž‘;º‘ÙÙYOüxœ<þl6í,žH&^‚ @¿Ëå¼Ñ„¼ÆðªzjµšâI­VcÙzï_ÄᎷ¹6+Õ¡à‹ÅH$2&tƒË'''¹\ÎårMLLóÒóô“;ƒ§ïîî<n\rüANÇxS…ÉÉIjVi·Z-ö?ÔëuÔg¨d‚ à­&R+‘Hˆœ°-ˆV¡Pƒ…öŽ|Á격Ãá°X, ‚ˆƒà•Ýn§¡ôÈ·V‡ë7úo.—c Á6NCËüNw ã=Ý:–A´Ž‹‹ `&©TŠ™o‹æûï¿'–IuÖl6óù<öj§Ó‰ÙƒíÁÁ œ‰@¸häY5‰DPŠ®®®R¡‹D¢‰‰ ÂAdšõy$€µ‘…+‹pßívyñ±óƒ©!_3==ÍçY^I$D2\cå´ÓépŽŸ#Êçóc;vÃ15³&ü÷x<îr¹.//c±ØÝÝÅb‰F£,y¨V« ¢›Í&! \¶DðÙÔÑív/..¨ÊG£T[¬Sú¸5,K6›-‹XBONNÀ¢ÍQ¹\ô&[@7Â,‚â Bk#P¤B&:0È”J%ð>úÊa…BAx•^)¡Éd"0È)Ïä–Û‹ †¶Ãf³ ‡CˆÙ”´£ÑèêêŠ|5É ö"±¾Š^­P(pªBå…ŒFÎ Ž\.‡«ŠYèèè¨P(À»/‹F£3L·ÛÅÑx~~~yy ‹ˆf¿ßg‘r<‡“úîÝ;(@|ÛZ­vuuE F¶ÓǧÓi›Í¦R©R©†4ˆåív›°áû;MÿôõA¸e `€îbgBÒHÒäøJ3ggn\„ IDAT ‘F£aVyzzÊÆB¡pttÄQ833óìÙ36Ú )£×óÈ ‚¦™‹áôô‹îÍÍM¡P@f½¸¸À{[,].×ø8šÉd¿4›M&þ‰D÷.b ¥J¥‚-•JQ†ð±)•JhâDº‘V‘§ðüprÑSÛäh£œD÷dª—ž‘L£J¥b!ã þcÖ5 Y1ÆãÁð@„íímòĶ}~¬0Ðpär¹ ”½MÉ0‹ENXÜ,ñxœçŸ¡4Fïjµ‹Å¶¶¶ƒÁÕÕ•Ñh„;t}}ýÅ_LMM½~ýºßïçr¹qJ.ŸÏ÷ûý`0‡Ëår½^ûÕét©y¯¯¯Ù>ϼýáÇ †ÈœY,Â\ü„´tH:$û …Ýng²E«ÓéÐá&úÇ€}ii‰%6sssàK½^//>BÞ¾};55 …ž={F+ùõ×_‡B!Ðul’aþ›žA ;¡h²YÒ-ÿ—‰Úx´‹Ëèý£ÿÏ×Q¹///CÄÇã ñyk™.²ÂŠ‰âÆÆ†Çã‡DÕ@8žÅÐÆ¾³ÙÌÁ%ƒEcT4@Að~ËËË6› µu›—Z’ñz.—#ìs{{ËÒH RËËË\0üYŠëñ0P­V3³Ùl  ôz=Öx’™x§8XÙ;CIˆ0Õív¹«˜e±'Œz{8ãr¹Ìüº¾V«1Æìõz: 7—Åà'Ÿ|‚P‹È0 Ìf3…ÒÆÆ¥%¢¿B¡h6›ÀZ‰áàê±ÙlxŠÅ"LyJË¥¥¥n·»ºº …,‹Çãa•j)P3Œ1kkk‰DÂb±LNNšL&³ÙLíãñx¾ûî; ½b±(‹¡ýÜÞÞÊd2¤ RZ4vpn™ÇrŒò6!¸3*ìõz,©àJ“J¥Dz½žxÖÚÙl¶z½~~~>33#•Jonn`ã”J¥p8Lu Ó|rròúúš«(•J±åœXi³ÙÜßßG:·Z­Àl¹“åMOO#sAæ‚ÿÓh4 ŸŸŸ³<Cðää$2 x[ÚJþó¹¹¹ëëkJH¥Rž^^%«Õ HG§ÓGgÿ5vR™LF£ƒˆÌ<“{Ž}8,ÈF‚#å”ÉdÀÿŽžŒ¯1 ÒX¾ÆñNÎL&3V>qõ`žžžÆàÀ5P­V³ÙìÒÒt{†I‰D"‘HPQ„©T*f`Õj•‰"8sfrË*• ÙŠÀj©T¢x"—‡ÍÜÌÌÌîîîÖÖë°f£84èÂy&‰€õz=†^CéÆYÙ$ÄôATî42ŒP˜°Ò™™™ ‡ÃãxÉQÏYj|vv†ªÎRÍûûû££#Ç#–»v»Ýéthuq¡AÓ]^^öûýápøææ`P³ÙÄüÀùuyyY©TÎ0Aˆ¤ŸœœðOºÝ.6(¨À|ó1VÖfðIÊ|<8qt:](a¬>á:h6›‡CúÜápHt*X(<£Œ¼xdïïï- 0©TJV %i¦t:ÍFqA¹¹¹~€Y-„¨×ëdX`RBFÔNþv£ÑlnnnyyÝ„/|4Å’Ä&n~M›D£QžüN§ƒV†±ÆT¡Pøãÿ(BµZM§Ó½^ïîîŽ$@Í1ý† — “'©Tz{{Ë…lÅ øCøú *÷ÍÍM§Ó ¬ƒåg,'dn)—ËÇ“kµZíñxz½éЕ•Ø@Œ8pp³ü›££#t@¢ùødÏÎÎ\.W @ Ä* ×ë)WQ~˜`-‡Ä; .//ùèÂ}†v2Nëõz“ÉDVvÜu2iÄGCZ.— }–%‹.D}Giqq‘ÆB¼¨{^¯— Ëáp@|µZ­.—‹JÍb± ìLOO3v¹\ìMeaÌ#î’••¿ß¤ëp8p S`RÂðšÌÏÏC; ;FËÿ;>ªÕ*5W4…öõüùs¥Ri6›™Já+õêÕââ"%<#Æ'v»ƒÙlfÇ .JB>K‚ èõz¡Œˆú‰_ñZ¥Óiœ90ÔðœpZÁ0 ;äõçwç !.À(C8­ÅÅEòɼ†DŒFãÄÄIýz½¾¶¶¶´´D÷àÁR 6›,’ÏçÓëõz½~eeÈ£‰‰ ¿ßOMŠ–]­ViV˜W*"þ°9bpX#(3 ¾K(Õˆ'!NÓ×r©Õj¬åhJý~Ì2DÐgfffNOOi¼˜ß`§¡±@ˆazzê®-±X¼¸¸x}}Ýh4â¥R)·Î›7o ­s©T°¡R©(tºŽßÖöâ˜4 “ƒZV«ÝÙÙ!²´´„§nkk "ìÇ?úè#zÖ­­-ˆù^¯×b±ØívÜÆ(`̽æççm6ä1áÐ73-€*H4}jj ª…VZ@­<¥ù|þÿobúÓׯÆF·Ûò…3l œFZ­Öáp°^}uu•šn·› K” E«Õòù|të|€ÕjµÑhüøãÁÝn7K”>|HÉC'ÅcŠ…PÀBR$b±˜¿¥Z­ºÝn“ÉÄû½µµ…P¨P(˜ÅñGìaqƒƒ:55©::A!FÃvf&u´x0d°9c·"‚X(ªÕ*ã,"-l!`?†žf"|Ì-9.q­±ÊDزõõu*±XL ×ëÑZ* v¢NLL„B! [™L¶¾¾Îc< ¾Ëår¹\HPk<O0 ƒétÆ–H$òù|4õLÇüŽxNT*W æÈ?2™ŒÕò"‘ˆ[A¼†P$É4Æ$—O$‰¦¦¦ìv» c‹¡T*Õëõ™L†‘5é!šr¹ÌÇ“C9ÉÈ”eØ“"‘H8†äƒI‰™„ç˜m²´´„ŸZ«ÕšÍfbHÌ!ú³ËK8:¤Óé,‹lž¢ÅmŤè1Ny6ˆ ‚q9ËëõÒÿÁk\XX@€¦™qˆ,˜Óéü‘T$²?‡ƒojjŠjŒd„TÔ|ÜóYŒN>Ñ`0ðæ2ˆâÛ^]]±›n 0*j, ·iËXÕ„l 2$ãëV«Åi`·Û |XCçDt‚3îüüÜívC‡¿J¥Êå2× ÏOŽÃáà(àe‹Å~~~^«Õ ¯— -p,#|‘ÉdÎÏÏóù|«Õúî»ï˜òår9,r¹üíÛ·€€¤R)EåÝÝÝ—_~‰FË_«ÕÎÎΈ}cq¹¹¹Éçó{{{Ì6a†ìïï³Áãàà {5¾†®yhAøˆøõI0VEò¦_Æ!ü›› v¼5€—1›`ÜBÐéææ†û¾Ñh³½öààœd¹\8œH$®®®p@"ìV*•W¯^AæŠÇãh5ñx<7›M$/€ŽÅbÑï÷ëtºwïÞA(­%‘H’É$‡)š€S^__#ƒ …ÝÝ]nGzÁJ¥B.ìîî®^¯;¸¹¹¹¿¿çJ–J¥<ÃXf1M ‚ÀKÁ©Êj ¹““‰DÂû^¯×Óé4˳d2)0<ˆÝ•J…ƒsÁèì.¾ººÝô8™L²;žô!pÈšH¤Ònnn¢Ñ(]"‘ÀÉFtK,̰Z­ù|þììÌh4¶Z­ýýýz½ŽÞˆfrxxøîÝ»©©){­V»»»;ñ˜’ÈçóðhAHòÃÜÜÜЦâCQˆÅb(iÊ ‹ÜÜÜðhÂ~¿'*_ÄánµZ±²’n¿¼¼$|ÏJ_:tvmooF#È$.—kaaÁn·³0ïööÓ øºÑhĹvvvÛàêêªÕj v‰ñAßÌA°³³s{{‹Å¨Â L©Õj†Z­öìì Î'ègÞãV«%Ö.>ÓÓÓøñ‡Ã!wîcèWTʨÀüxÝÞÞZ­Vz³Ù|˜Ëå`\\\är9§Ó™L&ñnW«Õ««+t-„r@€Úƒ/âÃh4‚'—Ë''' …î~´i”z®.Aø€õz=nœ ‚ d!:“Gÿ…<ÚívYŽ ¹Kåòòrmm 9}‰x0d›³³3‡ÃA,M†q_  N…ÞÝëõXÅ.:þíííâââ8ÂÆÝc·Û)ŠyãøãËz½n‚\.'‚Ñh$ $ÂìììÉÉ õ2ÑhY¢Ôd¹©sY ‡[+ª!õ«Õjrj …Âãñ Ús‘‹D¢Ñh¤T*á À†M¡Ãìyêr’±|(Ê9@Åb1ªý+3“É”H$@†D£ÑR©äóùèe- ¡<ÞSÔ?§Ó¹°°J¥ÆVf­Vûøñc&Û Õ3™ÌãÇ'&&@­ñ‘w»ÝWWWÙl–¦3›Í®¬¬ÌÎÎÆãq õ‚/]¯×q^]]I$’•••N§Ã¾±XŒ’Ã'H2ÕÆ{:JÿÇ×1P¥ˆÉdlŽv¹\ÌX2®®®êõºÅbÁ+Moèp8Œ-//ãœYXXP£P(°9¯¯¯ßßßûýþããcSžø••<c™§“ØÆrçr¹ºÝ. *1ÆBªÑÖu¼©ÕjaIFôF PP–ƒÁÒŠÅbùÛvb0z¢ #"OMMù¦—dàÜëõšÍ¦R©œ››Ëçóì2¥Ø‡ƒ¬AªZœ @f8˜Âá0„Hv]û¬Õj€Ô‰ö5 ˜ÉdÖÉþ€~´ÙlKKKDB¦È”¯®®&“ÉÝÝ]³Ù¼¸¸899yvv¶²²BÁ>;;ûÙgŸ={öÌçóÝÝݱ?H¡PÐÚOOOJ¥RÖ"’ëADæ5‰ÇãÍf­#ÌA´!Ø,cCŠw¤d“ÉËÑèz…Ó霞žf{%ÿÆÆÆ×_ýùçŸkµÚ/^?B²—ËågggÍf](›Í¦Óé7oÞX­VÈe‡ãûï¿GIÏœ±`srµZ­1]Ë|2™4›Íð',‹ÃáoË‚¡ÉÉI¥R %—-vo.rضÛmÖQ ‚¬á „ã Ãd½­­­·oßÊd2¯×‹pÏ<…j{{›É3ž%Ü&ôOèàétšm38h‡Ã¡Ûí&OGU§ÓÕj5è¾r¹\ÁÒÒÒ`0€Ù‡™ZS±5 Zd:*JxÎ:Kïd\y` À2NÇŒ9'—˽~ýš‰èx?*· 4úðµZ-+;P>™X09×ëõ@+U*ÀA6Æà;ÛÀ‰ÁÞ1$²óóóÇÇLjÏýƒ¨Ü—ޝT+¼‹ãœ¨œz½Þï÷ù7‰oïÜܵ Ù–(.--XŸ››£ˆS©TV«5‘H`™¢‰DÇÇÇœãôÎØYpΕËeªQ|&“““årÞ7]ìçX,H a~ ¢¿¿¿GàÆÉ ‹ …¸1NmtÞ¹¹9¶\v:î†R©Ä‡­X,NLL,,,`Áʆ©L6G?ƒ8>·8¬©¹Èò©Ã;/—Ë%I­VƒÃǧ— ³;lìK¹¾¾Æ ÆÔˆÅ|nÙûNƒ‚9J UÍ„¨e€@dæ~ív›ì'›aÔiµZà Èa)ŠB¡®¯V«!²q²“ѧ…ªT*¼þ4 ˜=h0˜ÍfÌãG*•’¢äŒf< £R©|òä r<X~0d\HŒp‰àä%ÂÆ–‰N§Óï÷/ÅÚÚè]Ú ã½"4Éd’WãslŒŒ“““N‡n¦P(0Ÿ É0 ˜úi€(~ñ⑇)Tx̹,1’"CÑÞQ¥òw ‚@R øÄ`0˜˜˜˜e# 8Lr[HI’—äáë¥è†­Ä`“ûC§Ó­¯¯³°Ðï÷à ‰7.xÚÍjµ*ü86·ÛíÅb±P(F¨“Ä¿c±˜L&ÛÚÚBa‘½ßï×h4Édò›o¾Y[[ƒUÇ:&:4š8ªÉ%ñpÂ&ãICo!¤MÙÇj8TÔõzã"ÜÍJ¥ÒÎ{ÿú dXQÖɦv:6%[Å‘"úqë‘ÑX,ÆßX,†aÙwoo2 _ùÄÄc0Ul·Ày‰(át:¡J¥R£ÑuÉJÎßD"A­Áø1·Ýn!9*ÁÔaòâØliG˜ B©V«¬+‚ZGf•O&üZxÀ2Ñh”‘÷ôôt*•âîÁ$C"·¢X,æ²¹¼¼$É•Óï÷/..®®®†Ã!²,{¨ ‚  ÙÚÚb” }öÁƒÝÚí6ŽN—ËÕï÷ù<Ûív™LöúõkÞSAÆÔxF 333/_¾”J¥ðXp‹jµZ†×××p ßÞÞÆn·ËD‹œÚW58CØúøóèý9: Ê£DK$*ôÐq·„7¸´{—Ëy|ii ËlÛí62<Å,áçkÁ“À:FÔ[<µx®ö÷÷áÀètºt:Í òÄùùy6›eoûíím<çÂK§ÓX9 ÇÒ×R9ŽF#FúJ¥’‡ /-‚¢ï×ÅÅ^œq¾‰ƒ ¡ãîîŽåÀx+–Òâ´Z-jTÇœn¨ù¥RéôôÔ8’ÍvtðއÊuN€N˜¦µZ­R©2Òétggg ÙxDÁ¦ÒÍ/x‚Á^¯÷Í›7ƒ¡Ùl&“ÉÃÃC>ËØÃfgg!lll”Ëåv»­ÓéHB1±#ãM©D8v!;õ "‘¿¦ L×ñmF#ΨáKü¾AЬӛššû¯9ƒØ¨‹ÁŽ!: Çö#ZZދłQŒê`~~žœ›V«µÙlc7=uB¡P«Õì¡€D"‹¥Ñh´#»l·Ûqgj422´ÛFƒ+«^.—cXV*•Œ¹PAÀ,…‰ÞöØ……¯× ¯qÌH’GA ‰À~Öëõ}ô$)^¨É÷pöû}rØpÀQ‘§].;ÛZ­Í~µZE:633ƒß ƒÇãÙØØÚŽ®ÂÐ{¼vUìw6›íææ&™Lâ³Ä>LCÀ„@Š\.'âk·Û9†ø<³pU¥RÉård.>H¼»°!^pÆÇ;ÂÄn(ýù~.9n¨³|\aþp߀¶÷z½.—ëÑ£GÙ¼^ïõõµT*µÛíV«5 ‚¥ã(q:>dÊBE9??Õ’É­ÑhÜÙÙa;L’ ‰Dâõz777ñMƒdÄb6›···1ÏH¥Ò`0HT’¸©Óéd^ò›³L¶0¤2f‡œÅÔ' -›Ç~zzšiÓxÐÿx~ð!¼À ª*¯³D"áM!%‘H¬V+…×ÝÝÓé$ÏÌŸU*•‡ƒx³B¡˜ššÂ—EEOUd³Ù#1 ©,®ãáçÅ|úô)fMÆi=úüóÏAã™ÍfÞ îÚq;Žï“B^ªÆååå@ —ËÙ™ÍfÛí¶Çã2äp8t:Ýüü¼Ë墰Ûí„ÚD"ÑÜÜ:új4hH$" ä=£ÿûëC‘e˜êbjÔh4xîår9C3lˣш÷Z­Úívæ‡.—K£Ñ`tÍf³‰DâÁƒŒ)xŽWWW)@(«#‘À©b±X¯×ÀÒªó ᆠ%dra·ÅæÔÔYP¢žb±Øçóq7phÖëuBÞT¦(†<^¸ Á ‘J¥Ô¢‰Ñjµd»0hã‚'Q2 ÑIEQ 1¥¢dÿG$Ë6A¸ 3‚…› )Ìé`ˆSµÛmN<<ýµZ-ŸÏÃox÷îÝÆÆ”J«ÕšN§‰D àûƒÙc,æõz)N•JåÙÙY<'BBýˆ°;Hœò÷r)òù¡HŸŸŸÇ,ÄUD,“[‡¿ f0„;´±±1N<-..Âr:Üú|ò¹Ëm6[<'+ ˆq.:U0•#Ô&™`œ‡Ã!<"«ÕÊÓáp`—„B:VWWùÛí6&µZ:Ün·™[ÜÜÜpêqzrps¥;9¦‹t*R©´Ùl.,, @ëõz4pˆN„¶ø†‚ 0Ç‚KÎÛ 43âÝÝöÁ`@~˜Í‘<ÃÄÀò"˜‚(¤T*ñ°K¥Ò@ ÀLèÉ“'@&Z­#GµZÙßáp±æ…W©TX«„À-•J#‘ˆÏç#RÐjµbMf´À–l6ËS„ª‰Â¦R©¶¶¶AˆF£¡Pd|½^'ú'¯ºk¡P `2ˆ†Ã30??#Žp“X,n·ÛØ®ú?®QcÂAVù}¥þõAî€az``“ »Ip^\\T?@¯ÍB‰r¹¼¿¿Ï;ÄnÌÂÑh”h>‚p8,‹9£Ù…dtëXti–ñ–ÐÙQ?‚¢_n6›ÊñxœS‰P$1}Â@k/‘HÒé4½<¡$ ¼pÁ€Šù"µ¶¶Öét’Éd·ÛµX, áèÓу‚"BÍ+‹ùˆâ¦¯¾Dˆ'€ Ä·ÕétÉd2‘H¶<;;ƒ·‰Døè^\\0 e-3J¦ÐÍfóôô÷ýp8äpg‘á—_~‰Ù”Wøùóçggg 3x› …o¬vNRPScì^ºápOŸŒÅ8÷Ä€—¹1=5žÔV«…ëŽX2A L‚ Œok“Éäñx4 Ë1”J%;¶X~vv6=„B¼/_¾äLDô ºÌL;‘H0š«V«8ýÛíö·ß~KP,!¦ñ2Z,–Ñh´¿¿£ô‡~€¿ÈÂÈz½~zzÊd˜@©`êZ­Æ‚¹=™Ïv»ëŒw-÷ûp¸ZØW.—1n#ÓƒÍÇëùVwwwøRø{ñãB•Já_ IDAT¥ù|}’Ñ&€X8_¥Réññ1˜Üd2™J¥ü~?žÅééiNÃáŒ.Æ6°ñ™*ƒ®„&Â4K$M"õÂ’U°´È»»»´k•J…E"±XŒLx8¤mp3">99aÎĤP(È40º¼¼D­ÅrÍØ–¢þ½}‡;ÞDÐçÌ܆Ãa<çý&ÏâõzQo—––”Jå7ß|377çóù0 ¹ ƒÅÅE‡Ã±¶¶†¤N}‡B¦…ЬXª0‹}:tmf³Œu­Vs»ÝL/N'±Íf#ÄLП³•ËÇža ã;>ZˆÑL¥°X‰D"p`cÈ%ËÌy34Ã-Çfƒ~¿ËØl6ó§  (•Jô}£ÑÈxŠ““Ýln·{aa+ñòòòÄÄNƒ@ Àë©P(...&''···Ù~‡¡M"‘¬®®.--={öL¥R­­­1æµÙl÷^¯â;ÞÄ|ÜXå–——Ñ^Ün7FÞ\•J¥×ë E"‹ù°±s:=™Ùlîv»@lq{<޹\Îk>;;‹:/~g‘Häõz9¿ M°7úääd0D·Z­f³yoo¯×ë=xðÀn·S9²3Z*•.,, z€Í‰D,c‘Ëåëëë0yx8qôƒA»ÝîõzWVVöööD"у'ÌÎÎúý~pÁƒÈÉêêj©TâÁÀûˉDD"‘Çã¡Éã1œ€Í†7=ŸÏSÕR\SrNNNÙît:ù¥R)~ŒU˜‹Ès…ƒÕdÒH뉒Î n™O4èD"qO„…“‘؇D"Y\\$oŕƇN¯×kµZðÌö×ÖÖ–——÷÷÷Ëåòêêj0Dðd¼ÉZÔ±¨"“ÉPE°»Ýn™L†¸Ê6ùÛÛ[¬ñ333‹‹‹äÈ€Q¦Tç3HlÎ8ÞL¶ø0¿8ÞÓq“Dú÷äää}ž§?~}(‡;Õ¹žN§ F-// ‚@1KªÑh€äµZ­¥¥¥áp8;;ûçï™X,–H$@€¹ŸÏç³ÙlårÙçóy½^J’8œÔ+D¡Áo™˜˜M[ªÑh˜#¡ôû}FC·Èd‰D‚2Ž4)vÎbb~/,A¦`¡×&QIê“h,c–8ÎÎÎF£C64S, z½ž]ƒ‚ ÜÝÝ%“I\ |[‘HDµå÷û[­ÖÍÍ ËHQ±F6›•H$ëëëŒg777i<j³Ôæ—:L×ë ƒFƒë‡Ì·ÕjU«Õ:Îjµ’ðv¹\ÌÍŒAp8Ÿ|ò w o¹\Nš e£ßïóAžžö[­VYÈÅôÛjµÒlÑÚsRàq¹\&“‰¢•J¥²X,.— ×M¿ß?==eÁÂÝÝÝÕÕ• ÉdòòòïJ&“a=!f™L‹Å^¿~Ýn·¹TfÅãqÌy777år'_¹\n2™NNN”J%¶¥óóóÇëõz,7|Î_”£Ñ8>y±åa©¢„ç7™LpˆÂ3ÂR¹Iü‚,.ªl;¦ ƒëS¬^¯§b”5 PÏy/øÛ‘èíÄbñÂÂB½^ÇLY*•ƒÁø2¶ÛíˆN§S&“ ‡Ã©©)¿ß/—ËôÝÝÝt:M4)—ËF£““É‚ 0³­×ë}i(±™'©ÕêT*•ËåpI1]g™‹F£Ql{{{2™lccƒ”Ïçƒ,\s{{+‰Ün7mw7ÿp¦Ùz½žAšÙlf¤Anæððð=§ã¯Â-Û$•J«Õ*'ŠF£‰ÇãÌ£J¥R4M&“‹åíÛ·GGG«««Ôž‡‡‡;;;—yGI'õû}Ü>Ÿ/‹º\.šA*»³³³h4Z,‹Åâõõ5ÊÁ¨b±xrr’Íf¥Réùù95;pÑn·Ë^ ’ äãIî!Ôb™ÂÑÈGš9þtVÄ¡Ÿ²Ç€Ò’Z©×ëáu‘Édè$”K³³³Tß©TŠñš ×××伆Óé<<<Ä@ì»4E.:¾š««+,,ngå)[ú°(àaàX_«Õ …¯ðo~ó›ëëëh4Ê„à÷¿ÿ=<|`Ø¢“ÉäÖÖV&“áãÑï÷///1Q„Ãar½^ïèèYL&“}ÿý÷R©6¾=JWŒƒÄXªÇ\{ˆU8½áö¦g«*P36ÆÕj5ü ¼§üüã4ÍÆÆÆÞÞjjj / j,°Åb!PÆ-Åžlj,c¥Ñáá!ÿ–ªŸ °0dM,%áp˜'¹÷7ß|³²²211ÁHá;D-î*ä˜ø(0L†È÷³þìñõõ5† 4ív;—ËÅãqƒÁ@´‡õÖH…Ø@q•†«œL&!žŸŸ“#RÄrpLØ Ñ*‘§A \652”Ûí–J¥¼Ñ‚ 4›MŸÏG 5æ§c‰¡=BW!‹k2™¬Vëééi&“!OF›Í¦ßïÿþûïÙûìÙ³H$ò×ý×777•JÅãñÀÍF>…ØJ •¥çp°ÏÏÏÉ^ÐL“)ƒuÃÜ•÷ŽE"©T ’ž"4:HD8åØnÿþŽÒÿñõAîˆÂl0 i0~ÿûßSž`AÝØØÐétÅbqmmíÑ£GÃáðøøø“O>Ñëõ@€Ð]³Ù„Ó[«ÕÀóçÏ™>Q’RŇÃa£Ñ8;;ËÐ ¥¨H$B¤Ã±¹¹Écfff}}ý»ï¾›››ÛÞÞ«òñ¬Ì3u:ZÇãñx< …âòò’2J$­X__¼Ž»«ÕjÙ˜œœ4›ÍèæNgkk«P(°òÎQ©T …B ¤5ÍÆÆ3%<щÄn·Qɉ„ÙKDáÊ^^^Úl¶þ畇µººJ\»B«Õš››cë‚\.§dËf³}ôÑ`0øío»¾¾ŽÐ_«Õ¾øâ ëkkkažYæñãÇår™ lœ€s{{ …˜òŠ¡µÈZޝ×Ë]²¶Ùl­V«ÝnÓù²úŽR¯×3;Å€½ÛíƘÔÚçççJ¥2“ɤR)“““˜4úý~<G-%Ý:j1ÓÉt¿··‡[+‹ÙlŽÇã§§§SSS wC¡þ¢G)Šd2999‰~R.—?ûì3p¯Á`7ƒ ,.N§^#j)½?MúÎÎÎxîüöððÐl6SZ¢3ÜÞÞºÝn±XÌ‹)‰hŠ ·ÛMËŒgŽd/‰$vçbWÇ×ßœý´F£‘> æšÇã‰D"b±C!Ó©TÊέV{||< 0S…ÃaHøÃèü¸u`›|ÿý÷‰DB,ÃŒÃ5Q¯×ÃápµZF£lÅ:;;ûè£Àïÿ{¿ß/B$ÊÐh4ž?Ž b±Xœ<{öìç?ÿ¹N§ûÃþ@Ì8‘HŒF£ÅÅEƒÁF)ÈTc†Pˆµ #8\ T¬óFÔž››ƒj0Ìf3pD *jµšàîIÊîZì+Hv£ÑÈápôû}Ú…H$Âv”ééiØdc`†Åbév»ä$I6›u8‹¥\.3Š@òx<|pšC4CIïõz ———ÏŸ?g®öí·ß2|’ËåÈ8›››/^¼ W…ÛøË/¿ŒD"µZ„v"‘P©TƒÁ૯¾Â©\*•¼^/Ïÿññ18ú$ãÐP(T*•g±î­^¯ÓTA$fw SœT.—‹™ŽN®–÷|¤ ‚ðTî*•ŠÂ™«~aaÀo‡94ˆ×¯_ŸžžB¯-•JXÜöööÐÚ*• ºùíííþþ>º'£Bqét’ÿw{{ûôô4ŸÏ»\.î“Û+• «”ˆPrý ä@¼ªÕj¬x§Ë0qSœ²R§3">ó%6Æy½ÞH$²°°àp8ööö°T‚¯aÛÀÄûy¡©"á#§ÕjÏÏÏ™f³YÎ<333üŽóóóˆ …B!“É€7™žžfxÐëõr¹ØÂ^¯‡Î}ëÃápR! •H$NNNnnnK²³Í`0üÇü£§ßþö·kkk{{{о޾}›N§á ¼{÷©sò_¯×»ººšŸŸ??? ¤(¥R)€¶R©ÄÏŒž9s­VC”çcY*•b±³Pz¬‡øâõz=?¿R©ÄúÅ_üñÔjµn·»Ñh ‡ÃO>ùäÍ›7r¹|yyA–¡u1ð «Õ ÁãñÈd²p8 ºD$Ñà3»¸¸øå/9 08­­­‹Åh4úæÍ¾Ãù/¿ür¬ 0NÏçó H ÚÅãqÚÄqô+W½^‡zF¿9…±\†Ç‰ƒbóÕ«W”;¥RiooÏb±¬®®R1€¡&þ†#³°BHg777Ø^e28 ´oVK‚÷!•}yyér¹îïïß¾}KkN]ÌeL‚—«PéXxôw÷wïÞ½cmÚQ>Ÿƒ‰DÂn·ýõ×?ýéOE"Ñ«W¯J¥R$Ñëõ‘HäÑ£Gv»¿,Ã¥R …G6›E3$TŒtƒq+ÎÏÏ3ÞÀƒ€+¼T*u\º9“Éd¥RÁ|t†àùÏÒ?ÿú wh·!z½.ˆT*E˜~ooY9 e´ZíÚÚÚÉÉÉ«W¯<Ñht¹\ >|h0ˆ†£Ýûý~DÚóx<þñÇollŒqØ\Èÿú¯ÿŠ‹2V¯×w»]öÉårl6l%ŠÉÌ–é\.­VtƒÁ@l’{ÆÌÌ JB£Ñ`Ù˜D"Ë…4OÛ;55uuu b¢Õj=88p»Ýlž"§`€Q­T*Õh4&“‰/(³ÙLvª”ÙlÆaí÷û»Ýî×_¸_ÐívsÁ ‡ÃH$òé§Ÿkôx<°à{½ÞÎÎŽR©üá‡h·ùI‚Áàp8¼¹¹ùì³Ï؆ŠzeeezzÚçóáyÏår ˆlÍfóøøØãñú§‚z¸ö0³ã7¥õ!Ó˜Ëå0È’z#~ ­ZÀÿaïÍ~Íó³ïŒ1Æãï˜Å€Ù)ª‹ê¢ª«—êîéÑ$eEÉI2R¤H9Èÿã%Š"”‰FЦgÒÛLUo5];‹Ù 0xÃ6¶±Áccl0¼ŸwÈ;Ñ£÷ðé:ˆ¢šN-`nÿ~ßåº>Wkk+ZÜí0°ŒF#FPvz$K0aH&“‹‹‹LWWW¡fF"Ú5‰\.×òò2ß,šW¼°—'''ÑAcvã2›Ín·[¯×‹EǃÒihh¨¾¾^­V †ù—Q«Õ*•êåË—ÃÃÃ×q(±XŒ‰b¡PØÜÜDx­¸gòÆ}Ã6H©TªÕê@ À•äa‰D¢Ñh¬VëõÝŒ@LLz½~ttô«¯¾B¼t÷îÝ­­-PA¸¨ßÉQª««ãÉgÇÎ߉‰)|CCa~\HF£±¥¥¥»»Ûn·[­V&„ð!FGG///½^/ûŒÆÆÆÝÝ]Š3B0ÁnoosìííMLL°=fZâñx.//?úè£\.wãÆËËËùùùþþ~zX d0ú£–Ÿ˜˜Ád2i4š?þ›: +‡ÃAƒKïË¡„öŒíeY{{{0äôgœE@±\.uð}¤ÿãõZîP0•q*¡à¿F¹ÜÀ\•Ø{{{Ȉ¨þ>•´R©üà? 1N,ÇãqRÊ:C«««ÛÜÜìééËGš›™šÄtÒ>Á×|'TÚëõwqqAÀƒ.fÂD"ÑÚÚJ™³½½]©TA¨¯¯gggb±Y09ü5‡‡‡0oᇠ¬V«OŸ>µÙl§§§×¬ è‹wwwQsÃG{ñâ Fª*VsµZÍétV*•¹¹9ÆâKKKµZ ßÓ±Xl2™ÓàìH&“‹%¿|ùR©T:ÎÎÎNäÆü¼ø,1'Õh4 ¯iT±­žŸŸûý~"Ö¢Ñ(üN€kTa›››‰d{{ûš€  O2bS|RÀ0›ÀêªÕj›››ÙlV­V ‚ü™«N*•®¯¯3¿" …Î]"‘¬®®ò :tDâ{{{¡Pˆ¶Ïï÷ãàÇ3ñðáC³ÙLj#‹ÍÍÍÕÕU¢Ú...P7!ÆO§Óß~ûíõe™N§½^¯ÓéÌf³Ož<‘H$t-‹åÅ‹°ÂáðÔÔÔ¿þ뿚Íf ‰æÖÖŸAð ˜L&¶#gggÝÝݸ½ØÏ×ÕÕµµµ¡òºººB ËvMg«B¡`WÌ^Bo>ŸO$Š0.°E·Z­pÞ̬®®BYAHCŽ.T»T<4²/_¾´X,‹Åçó‰ÅbÒfggÙ«—ËeÖ’±X¬©©éêêŠ_@,àDw‹<ºR©¬­­‘eÙæk¥RYZZÚÜÜôx<,œþóŸÃtÄ_Š¡R©öÖâêê* ÊÁÆžm»Vl† c)˜0*"gªÿ}6l±XÜÜÜŒ‚óû:HÿÇ뵘¹C4ĉƒµ§P(€©;>>†üÇŒ2sŽpªÚíöB¡J¥°;nll”J¥õõuð,>Ÿoggçùóçh$Ö××~ø|>Ü=ß}÷XÇÕÕU´+++³³³{{{ËËËŒ­ÙïÍÎÎf³Y›ÍÆÌ,Q6›…ˆ…‡ƒ&2½Éd2ÀI`ÅT*Äчõôôð7h4„‰.—«»»»¥¥E«ÕÒÍèõz£Ñ‡™•ñ•I4¢{d‘ I!Õ1 Ad>Ÿg7ÐÚÚJ˜‰R©Ôh4;;;hä‰ .‹$Óær9ŸÏ·µµÅâ×ëõÂÓ/‹äy¦R)’=ü~ÿ·ß~‡éýÃá0…6’•/^ììì€FX__ç˜ûüóÏ™Y}ùå—0[vvvp»0Á ðogg‡ê ø 0†Lr'sï²#ÁPÖØØx]€£PjllD9’E„¶¶¶ÑÑQ6x‡ãÍ7ß<==íëë»ÿþääd}}=¶RD·ïÔé¬[ €–Édn·ûää$ R  2≵X,è²êëë·¶¶hËx»ØÿSßœŸŸïîî>{öŒ1F-ô…(Êù0Õå(¡ÉhnnÞÙÙÙÚÚ‚zÆOÿèèY—Z­N$ŽðÄ1 Ÿ™™ã¸»»‹&$&‰R©ÄØÓd2‘ýR«ÕÄb1p4¾¤óós”Bííí,l™¡3Û$Œlkkëôô4—Ë¡}IMözÁ7n †öööÆÆF£Ñ811ÑÞÞ~óæÍ¿û»¿C]ÞÝÝ­P(¬Vkgg'ó.N×ÑÑ1==M¡ÅbÙÞÞîìì|ùò%7tk Ïööö«æóy¨÷kkk¬¿ûî»t::½¦­k ãܽ½=\ ­­­XOi2NNN”J%’Y¥R™J¥VVV5ÃÊÿÞ_¯ÅáþÿðÌÖ{{{ÛÛÛ ¦V«½NV$k­¿¿ßn· yÆÒ&›ÍNNN"ÇžœœºËƆ]«ÓédØÝÝÍ„áÎ;†h¨1쀔Ëå‘H9Ïàà |(‹ÅrãÆ 4ƒƒƒ4Ȇ«›W:ÔNg³Ùìv;.’ÑÑQôÝ}}}T¸¬Ý™fâ‘CÛ+‘H(: 8‹E»ÝÎH‡@GG‡ ˆ±`ûÁn·÷ôô0uioo×ét£££wîÜAÇvóæM’óÆÆÆt: ¥Ré7ÞÕjµ"‘(8Ρ¡!FCöÍýû÷á@ æ!·¯½½}uu•V·Z­B^Íçó·oß.—ËÐ"ÇÇÇß~ûm4¦¬^GFF ‡ÆÛ·o ‚ •JfztîHZÑÀ°o°Ùlج:::@ÅÑ)ƒìgÎÖÜÜ t¾©©Éáp¸Ýn©CCC„ Ò ÎÏÏÃ9 OâÜƒØ .//˜Šþþ~LÑ€1€Ì#óæøø8ÒþýèG½½½"‘ˆ?«P(IN¥R|ðÍf;990AÉÌp»5äöù ‰¯!B¡P¨§§‡! !¬LQ¯C”déÒÙÙÙÕÕÕÖÖF|(2˜ÞÞ^€Ž™YY,¥RIØK.—ÃppzzÚÙÙI¬Ñh‘ ‚‘¡ÓDŒ ò “•Jõãÿx``€á;w4X,öx<.—«££ãÕ«W\9¼idh°àEW&‹ >#öââb}}džZ­Æi!‰°¡¢J`¤s÷î]r´;::Ùܼyó7Þ@»<99Éõãñxظ’Yèv»á韟Ÿk4­V+c4Áö±káYÚßßç'%ŸÊÿå¹ÿ÷kbbâää‰7“b —é=ñ —Ëe‚žÙôõõ]\\|÷Ýw÷÷÷Q7îíí¹ÝnN·°°@.æu“4w¦!Û¡¶DèJ§Ó¥R)’ÌqÁáI¡™¸¾óý~?fwTh`®®®ÐŒ†$Y‘(+£íímþ ©Ä4¡b±x~~êäåå寯Åm çK0ŒÅb0¾1^§ÓièTOÄסà¨""§R©¤R)¤kkk MB¡›½R©Ä‘g¸¿¿ŸyTGGÇÎÎN.—ëé鹺ºByÒÓÓCÀÄ®l6ËR!™LrÿÀ2ƒÃû ŒXób±xyyY*•¢n6 8–‰=ã©0™L2™ œ/®}ê&Šò3Q[777s;žmmmÁà ’Ïç‰ì¸N£ ‡Ã0­èE´ZíÊÊÊòò2=»ß福ƒÁ`:N§Ó~¿zóöööüü<0‰@ @nßÞÞÞ7ZZZþýßÿ=ðcO???¿n,xÂqÖÀB¡kikk[\\D׸¿¿¯R©FGGiPÆÅãqBk9£ù¼ÀFLÂRºX,’Ó ¸”’s”Ý4LL~J¥Ћë)yÿµã—#.hdÁdï!4’H$|  3œ!©<5n½^O_ËJÃï÷³‰Å•Bø –§§§OŸ>%‘;Ÿ8âÏH‚dspp°¸¸˜Ïç¿øâ‹`0xtt …!ò—ÌÎαK è,sÔîîn(§„íìì\¿WTfø!úûûñÓñc"®½½½à:4ܪ °‡‡‡U*"ÔïýõZî ˉcó)‹Ãáðââ¢ÍfÃ>À•ESCCÃòòòåå%ádP^x½^AÒeG¿ºº*B>Ÿ'k"N#)Y]]½¸¸JµººJÔQ8N$d§ÑÈ3â‡Ã ”–––˜íìì0àóùøç’É$ÝC:Æ¡ºˆ€p8 $¶X,’9‰ä½÷ÞÓjµÀ,Á“Ѭx<žžžòŒÐu @¤Ü†Ó€I1Ä>â(ÄøŸ\`èÃ"‘þ‘l6«×믮®¾ûî;;¡Pˆ}i¡PX^^†¨µ´´ÔÑÑ177‰DFFF\.×Ï~ö3Ì&Ÿ~úi­VC(¶´´Ä¸yuuuii©Z­†Ãár¹¬Óé>|¸»»k±X–——Ñ!466¢YdÆÍ*˜$R„› sñÔ×׳†Åô{vv†¤Gà\ ^p3]ko2™ “н½=ø®è‰gBåÆ3vrr2==ÝÕÕ566&“É&''‡††öööŒFã~ðÊ±ŽŽ…B!‰Ün7ª³ÙÜß߇ár:f?o4F£F£ñx<›››N§I•Íf«V«±X (ãêêªÅb)‹¿ûÝïhp*•ËåW¯^¥R©–––X,ž—{®¥¥É -‹Ïç»fØ[‘ËåĤRéââ"WÚÞÞÞÞÞžR©äåñ¨Õj¹\. ñ¨Ô×ׯ¯¯C"[YYé„“Æ¥àññ1œ©®aÂ>Ÿa=ñW04= IDATR ÁA@œ Ó†YåÖÖe>YÇDþþÕ_ý˜L­Vûî»ïòp»Ý¨Ú'''±’Ò#Þ»wo¿³³Óh4ž¤™››CÛÜܬT*áýâG=;;C§pp é?ðy±ÎÅãÇAø¡Üȱsxx¸»»Ëüskkëìì 8œ88s‰DŸ #ÍïýõZ,TGFFü~?36wÔl¢½Z­VŠhJBxˆ7oÞäd¿qãï5$Bã"‘èÃ?ôz½ÙlöîÝ»J¥òÆMMM~¿ßï÷ŽŽŽŒŒðÀ¹Ýn&øì¾±/^\\ PG …YÄ.«Õêr¹ŠÅâµMF"‘0Mæ@)‰\.—V«ÝÝÝeÃ'™Ý ÿ\$¨^Ùl†:…B‘N§‘™ÆX€å3g=œÙl& Ñž F£Ñjµr4¸\®Z­öÞ{ï¡yGîv»Ífó»ï¾ÛÙÙ™ÍfI\‚_xñû@—ËÕÜܬ×ë].ןþ韂DîííÅïÓÚÚúgögÌOjZ@àÿ'ò'³³³ÝÝÝx:;; Ãøø8½v¹\žššêêê‚‚²¿¿o2™¸VA°E¸výåŠTK½J¥"ó–»ÿôô´££cdd$™LvuuuwwÇb1x8‡‡‡‡®°}½^¥"zãS-•JA@Œ`*e³Ùk½ËËKn---0 0E#LüÛ¿ý[vž»»»v»”ùÈȧ,ÆñN§suu•å¡Ífˆ¤Õj—c›`õ‚µ’ñH.—òtrrBÚªÇã!2ìöíÛ±X 9–J¥êêêB¤h±X E&“a§Å-Òß߯R©²Ù,ª$6CX¥®é¡;;;]vwwÝn÷ÅÅE(‚¤D¨{¦…,ld2™Zí@  Ñh¶>H~¿ÿÞ½{ÅâknKÖ_ Ï%‰L&›˜˜xõê668îz{{766HZj8<<ÜÒÒÒÔÔôÕW_aøìííeöG$.Þ 6Wˆ1€}·¶¶.--•J¥d2É0]ü‚ ìïï3žQ8™÷WWW”Éüæ§4­ˆÌP)ÐPÃóŠD"———˜?±17¯¯¯'Ù(1þAòù<'/ÃP eÔ/€¨žÈD%ò'=ŠóósNGû\­V}>îæÎl¶K¥o=ŠH$‚ÖÛ××Foß¾-—Ë766¬Vk}}ýƒfffÞ}÷Ý£££ËËK£ÑHØ7Ù„|rž>}ª×ëõzýäääÉÉÉ«W¯Ö××m6²à½(Ö±@D T¡¾¾žü<Öã$´äd–H$€â"l³ —Á8›øÖ(H‹Åâ¯~õ+4òÍÍÍkkkÐþ°¥ðíV«Á`M/²}4HÝÝÝ §¿øâ ‹ÅòàÁ¯×‡!Ù ‚€’¨2&gä.è…Âá0F-Êd‚ư qriñþ pÄJ¥’ˆ ø3ÀÙ¸D£QFðlŒC¡—b.—[ZZjooÇM¸E–ðÌ+°‹Åât:ÝÐЀP'‘HsBI̜Ӝ¶€«‘¼øhÒ àlŠÇãD)`U»¸¸àÊ) Ÿ}ö­ºu±X¼¹¹)‹>|(Kuê'd6•Jå³Ï>ÃÉÌB2û'Ÿ|"‘Húûûs¹ÜÖÖÖÅÅD …BQ©T´ZíòòòÊÊ ÇHww7© ñxœãE"‘ð„pR#ƒÎçó¥R©V«AÁ”J¥T2™¬î÷yX×g½Õježöóðüÿy½‡{±XŒÅbpƉ?e ÎS˜Íf777'&&°Q蘟ŸÏd2«««'''ÇÇÇwîÜ9>>ŽÅbkkkÉdraaïÉææf­V{ôè œ…Bajjêììlee…Eîd¿ßøÚu2™¤RcFùìÙ³«««r¹üÖ[oììì ½%wGOKK w__ŸÍf ƒ÷îÝkmmÝØØ@xD$qmôõõéÇúÔh4vwwã› cžÏp>Ÿ·Ûí|UP¢À+ž‘éÕÔÔ”Éd¨Ô®kó£££ ÎA&ï/_¾Ä×n³Ùpó2Ïýî»ïŒFcOOO.—‹aSSSooïÏþs“Éäv»Œ¶´´üêW¿Â™±ï'?ù Þ‚©©)ŸÏ·°°àv»Óé4ràh4Š1mgg'›Íz½Þ|>ßßß¿²²ÂtóÔöö6áD0×6660m‘!•ÏçE"Ñééé;wªÕêÎΪA eÍÈìSûúúúññ1¥}$!„‹û†þ,‹uttX,P62™ l–Åb‰D›››ä ¬®®žçFT©T>ŸÏáp †'Ožà~âV t%ŸÏ'‰¯¿þ:™L¢¨khhxþüùÞÞ^]]B¡ «««‹Åb^¯áããÇ»»»ûúú`û466bV‚DV3™Lnll ¨­¯¯‡Ç i.N_^^.--!ïá¤^ZZÒjµííí;;;PSˆ¡Àƒsqq‘J¥®Oäp8ìt:ÂápGGÇ:õV:V(t¡P¨¹¹™¦S&“¡¥9::b5 “ÉlnnšÍfÖ`Üñáp1Ï“'O²Ù,‘&>L$CCC0¥R©ÉdŠÅb˜ys®U€X €ñ@äšH$й‹E¨‚Ñhtvv¶¯¯Ïd2¡b;…WĈ åryvv– =“Éà†EùÃÄ2r°ëHøAÀp@ <âÿeËüÁkhhÇÓéä f”ÆTK«Õ¢¨u»Ý‚ Œ ¢|FFF²ÙìW_}…?ûàà`rrŸ±Ãáà6©P(|>BA+•J&“Ù¯P(ˆ[¢ q»ÝK¡naQ*•Èutt u9::B)¿8<<k%—Ë‘ `wÄYƒ$€JóºŸ-•JL<ÂÆãñk!6Ø?¹\žÍf“Éd>ŸGù?«V«Á“õ÷÷“gð ßöÿžUWWçñx;ØÙÜÜl·ÛårùíÛ·Ù ¡ò´X,ù|~``À`0tvvÊår’ÿ¬V+c‡©©©Ï>ûÌårY­ÖüÇÄ)¾»»{zz:11Q­VN§Ëå²Ùl<ë𜻺ºÈ»@Às÷îÝB¡€€³¡?Í$ ¢Ñ(EÓo¼]™X;Ç£P(PàÑ>G"‘®®.½^ÿÙgŸÉårˆ¾¿üå/e2™B¡ ±8<<œœœ\\\ôx>βô¨2'''ÀŽˆås¹\ˆQL9NÄ< -K__ñÅï¼óK/†àíííJ¥²¯¯ÏãñÆ“““‡¾÷Þ{ÀÍfó½{÷`µOOO×jµöövT^{{{ø´›ššFGG‡††È}EYw÷î]ÚåëûÕjµZ,–©©)ÒZðRa!ÎI©TÞ»woii‰ÊÖÖV}}=Ÿ}N×ädgßÛIú‡¯×b¡ÊáÇœÊ K9¼¼„ìЛøá‡ÄM0ÌÝÛÛ›žžnjjòù|0©WVV¸™ŽŽb±aöb±vFPnö÷÷Á (ŠxJ§•••¾¾>â^! ¿ß^Ûçó544 Æb±ÅÅEJô¯^½jhhh0,À0êêê‚Á °o/mmm‘H¤¥¥Ål6{½^¦ðr_‹EÖéLr Åññ±^¯ïììäÂæÌM&“„Z9W,···Y°×j5ÜO~¿é0ÿ4—R©D–²1ÒÀ)À¡Õ×j5||<L/s¹[ýËËKÚDÈ6LiØ ³±gܤR©šššB¡Õj%ï@¥R€Áƃñúää$ M&“¡>¸¶¿ÐÁ#ÁÛÅ¥P(D£Q•J¥R©VVV°žµµµ…B!‚÷® Ò¨¹4Á` Åh4ÂÅDBdU±X¼¶°‚€§ÔxA'''|œK¥ÒuvÕÄij£ïç$ýÃ×kQ¹NÌ×°Û`ÇollL$.— ”ÒõžúÛo¿%‡½SCCƒN§K$`‰‚Á D"YYYY]]Åj¿¿¿ÿôéSh¨¬Liö …”•@ àr¹¢ÑhµZåûöÛo â2^½z…“ Æ×_MŠ©×ë¥À¡AÛÚÚBl@NeA‚ÖBÉ‚L&ƒÖ"‚Z­fŽŠI@¥R‹ÅƒƒƒÀžØ1R=¹\.Ò?`i¡°<99A½²²’L&år9mr}}}0Ä2“Ïç±ÉXÑÐÐJ¥€;ªÕj†Ý.ëêê²ÙìÙÙÙ_|ñÁ s\XXøè£ªÕêÊÊ AGGG†GGGÉdÒjµ:Î\.çõzwvv@Gùý~œ®¬F˜00%ÿíoËN˜ 7H .NNNÖÖÖ ·cç988xóÍ7%ÉÂÂ[5úht;ggg7oÞ ƒˆ™’ÃÛ‰Åb\årëµþð‡'''4 ‡‡‡ÃÃÃLoëëëïܹCŒŸ\.G xtthY “«Õ:22= òzŠ•ÕÕU$›uuu¿ýío?øàƒt:½²²rãÆ FØÁ`ðý÷ßÿÍo~S*•\.„"|¤ ÞAàÄëE«#§Ó¹··g·Ûõz=ÐF³µµ ÿâ/þ‚aÝìì,pGAØ”òsÄ^\>Ç>~C>Ÿ™ààåM`†Îj¨û'z v,“×¾V\#¯Ã뵨ÜÿüÏÿAHOO‹>FÓÙÙY(`" 5™LèLpu’ÎùŒL8fÍ€Åãñ8BèAE+ |æƒÁãñÆÔ××755588ˆ2D§Ó!惋ÂÍ,•J+•Jww÷ÄÄD©T¢m_YYaíIÒMkkkCÇÓÉΓÊ9)ŽV«•9 óA$ä@ •Jä0—èÅ& š ä¬L&S©Tàl‚À!ÈDÒår566êt:ØLx E*•òx<éœNçàààùù¹Ýnïêê"NóÆÜ¿üÀôô´J¥âýä^ŒÇã6› [ I=kkk†è»ÝÞ××§ÓéœN'ö(\æL±oÞ¼ÉiØÛÛ á ££ã7Þèììd%€]V¯×³T¨V«ƒƒƒlŒyK///-ËÀÀ0}ââ²Ûí¸7ÙU666Âù#.•\7‡Ã¡g© ˆ2™ŒßïßÛÛÛÝÝF£,uèö¬"}›RÎår¥R)³Ù ‹q``€´”$TX,L­|GOŸ>½yó¦^¯D"z½~xx8ŸÏ[,2[ …Â;w¸9ðFÕj5ÐHd2Ùu'ÄDz<ǽ)—Ë3™ q£äÛ¨Õê|>Ï›æš ÌÛd2ñ—´µµ1khhhoogFú T*•H$Ì1ŠÅ¢Õj¥t%Á†ìIX`F£‘߯#Ïívã;¥‚ÆÐ;44Dî ¾Ùƒƒƒt:ýÍ7ßО¢¦Õétëëë„nã‚‚‰&—ËÁöhjj"K¶¡¡!‹étºþþ~Vèèâñ8-`&“éêêÝc6›Èfr8d€à08>>F†‡†X£Ñ\\\0;88v¤V«ùôiµZ hz½žLÇ¡¡¡?þøû=Qy½‡ûää$Æ"ª$Dã9b£EÛˆòôô”ž|`KKË‹/8>ž={677—Ëå=z„Áù ×l0D5P, œ˜¨JR©”ÃáÉd׫ÈÕÕÕÕÕU—Ëåv»_½z…-âììÌf³ét:<ñÈÛ!r½GäQ™àž‰n¸¶b766!ihhP«Õdh <¨V«„©Ó¦ìîî"¿¸¸`&ªA<ÇÊv-?Á#Oàµ666’ÃÀ|†(<®2™lvv¶Z­ö÷÷OOO“ÔŠrY$!y öô‹‹ —Ë®@¡P˜ÍæõõuÐ>¬T*¨ª™3@P©T¨°A8??ŸŸŸGµ†Û AÄ7€kvvvз0~½öÈ0ºAê@n?ëk¦J{{;Žy¤;xp.//¯ßÞD" Áår­­­ñƲ$„MFpn¡Pøú믑xÓ@˜L¦µµ5tßàõ¿þúk­V[,_¼x³zee¥©© Âs0¤ôÿk4Q‚ÉåòO?ýôààÀb±`•‘ jµ:666J$`kµµ¶X,æ“R|kk«Z­’zvvƧ‘Ù…T*lP©T’Éd2™$x½R©D£QãPàÐá‹EVp“t:]:fj_­V‰åº–{‹ v.,<ŒWÕj•½t<§"–ËåüdN'ß&~ H*”J%ÏŸ?O&“[[[Ïž=c4º±±±½½ÝÜܼ¸¸¸¾¾~qqAª_ccãüü;;C×jsppÓ³½½=‰ i§…'ˆŽA„ááa&ˆ½Ð z½ÞP(„…¾Ü«««………l6‡=ƒû|úé§Ôe ÄxÆãñR©„˜Uº`€æ|ŽŽŽnܸQ«ÕXNPðÖÕÕMOOûýþùùù©©)Tz˜ý~?ë L¤Øú3™ Í>Š @ €€ˆ(Aœ–LZÏÏÏÛÚÚ¼^/þ^¶,˜Z···!Åc”¹ÜÛÛ‹À´ÿ:X‰D‚–Üf³‘±yvvf0t:;ÛwÞy§R©´µµÝ¹s> óñÕÕÕýèG*•jqqqrrR«ÕšÍfè•¥R)‘H\Crnܸát:···ý~ÿÜÜÍNZ®&€ÃØè,//©J/ g¿¥¥…Œ^*“É ŸA2€•ÓG›ÍöâÅ‹L&ãv»9èqœnooÓÀ¼Ïd2\{ úAÊ0ÀÑh4ì!³Ùlss3nÔ±§§§ß}÷4É‚ ¤‰4¡»»;‘H0¿úë¿þk¯×‹|`ccƒÜ@xwîÜ …BØ&Xƒooo iµZ…B144²££ãñãÇ8´ÙCàu¨ÕjH¼}>ZÛ††”<>Ÿ¯³³“Јb±‡É“¼Ê݉DÄ£Î` µ¹¹ ]©af³9 B,x^¯ÅáWD"‘˜Íæp8Œ C`cc£Ùlž™™Q*•œ ï¾û.U ôZ—Ëe2™”J%´Û¾¾¾ËËËH$‚Òã›o¾!k©©© * jjµzll ÒÓÄÄÄÕÕUwwwCC¥VSSÓÀÀ@µZu»Ýáà‹D¢ÁÁA¹\n4Yëg2 Ö---|ðHÖÆ¸ä÷û ¬ ‚ÞM&K]ª” Ož»Ý~÷îÝd2¹¾¾®T*M&Óüü<»Óþþþ………?þã?Öjµ“““ø`‘—ˆD¢þþ~A:;;Ëår0D›äõz- ¯R©ÄGƒY¼i›Í†s‡3ÙŒÁ`p8û6› ç!Øj‚ 0ía´ÕÜÜÜØØÈûϨ“ºH$‚XNˆÛ÷p†þŸ^¯Åáw¸Z­N&“uuu¹\®­­iµÑhL$àP0’444€ï¡³ãäÚÚÚÂ7ïóù˜ñJ$Æ t”mÔÅøP[ƒÕf9Y(˜Ô³˜"ñÊîî®ÃáÀ$i6›'&&ÖÖÖ KS!Rþ Ò8??'`|||qq{!Dìóóó 8‡ƒ$ª 1÷÷÷‰RCO‰×F,cæÆò‡Õ›>ô9ËgT%| vww± 555uww·µµ™L&¾HиÇÇǤ uww¯¯¯··· ‚ÀuR.— C*•šŸŸO$&“)‰Äb1±Xl0h`÷öö´Zm4E‰DðÍ£ûÜÜܤÇgÛ&‰¸é!pîÀ…GìÄPˆ%ñ Èu@S\cÅÀTÕj5»Ý^«Õt:]0ÿ„ @•æææ¡¡¡@ Àþ”˜×ëµZ­ŒYÙÎÑ‚@§:<X‰D²¹¹‰â¶¯¯O,÷ôô|ùå—ûûûccc]]]Ñh”µËËKÐ`J¥R,ƒ~$Åæò LU8û³Ù¬ ¨³Èî ÜfÙ^__Ɖ«‘d A{!nB,S™"Lävd–åt:YHX­V%[_S¡(Øù¢ïbîp8è®Âáððð0ŠDï¾û.N4TOd™¥R)÷b±èt:/..fggûûû×ÖÖæææJ¥’ÛíV«Õõõõ¯^½âŽ ‡ÃÌvVVVÚÚÚ8OibÄ%i’Ò¹­Ñhd»‹!ãèèè"P ŒžƒO iäLGGGb±˜ö®µµ5 ^"¿·“ô_¯Åá€~£…B‰Ù qÌîHå誦¦¦××סnÁQÁ÷|ÝdÍḬ̀n´‰e² ~‡B¡°³³377§V«9zè' ¹\Ë”±8üD"qÿþý………—/_¢£Àê ÇkÔški‡\.ÇØ‰DÜn7C ¨a§¾¾ž±@&“ …BPÔù^êëëïA—&™‹]gg'J.EÊ ­VË÷ûýÌaoñ‘‰Di"ýƒÙïø0,B<¾sss€è«^¾| mooïèèˆà!ü, ßÊÓ°·´´ÌÍÍíîîšÍfp@ŒÑÎÎÎ\ ?~üxss³¾¾~ff† ÃJ¥BzQ¡P kA)$‚Á`˜™™Áfÿ¶¿¿ßëõžžžŽŒŒ°•A˜AœP:FÀ£Õj C(‚FP,¥R©×ë­««»yófcc#!ß}÷èc†'étZ$!Ÿe++‰æææPa²xxxØÝÝÝÑÑqttôàÁB_q²¬®®¢1|_(®WJ6›­P( …å«%ôŽqv©T‚˜&‹¯êadTñ …¸Õ¤Réüü<>8À\@M*¬]Ä‘õx›AÝbC˜˜€è[*•"‘ˆA€>ÑC0\>>¸çççø«EòõS Ð(3bbLj×d2ÁÆH&“>Ÿïê‹ì‹‡ IDATêÊjµÂ #Þ®4Ч††LGGGÙl–œ±XŒÌW©T‘w*‰È¡d ÖÀPH\$‰ÃáˆÅbXÐ Ù̱0,“ÉZ[[3™ B À$WWWðdärùææ&ÏÆ÷tŽþÏ×k±PýÉO~Âú[¯×ó1ƒÂˆ~Ùívƒ´X,o½õˆ’R©‡oß¾ýÞ{ï¡^BõQWWG@WKKË[o½Åü÷Ö­[¤K·¶¶òñ£DÂ1Ä=£¸€ÓÕÕ¥ÕjÝnwoo/Õ¨ÑhD÷½®®ŽÏd&“!= ´nÎkŠÄÈ‚ `ÈÆ£ /ÁårmnnÎÏÏã„[œˆùi*•’Édظñ£"§ŒÎÓ½ˆÝ…žž–Zmmm.ï¼óË[«ÕJµ500€ùÍ7ß=ßÓÓ°pzzÀ™Ãáðx<¤MŽŒŒtuuy½^ǃÀãîÝ» …‚55"%Žì‹‹‹Z­vïÞ=B‡=σ>aàáôô”CêÁƒõõõð)¹®È@à¯E)Að&©¹jµÞÈÕÕ•ÓéT*•¡PˆŠ›ó¥¹¹äwkk+–¸€©Têòò’ØÂ‘‘À¹;;;óóóàÆ(ô‘E¡d‰D\6LNØ—Ôj5ª9â|A‘ Á´X,蔀ÛíîèèH¥Rƒƒƒf³9‘HÈd2µZ½¶¶V.—ïß¿_WW'‹?øàƒr¹LàòÅÅ…\.§#AÖ¢×ëÁË8ìÁR©ttt”(QF1Ôø HtÁ7i]$ŒŒ´¶¶ (•JÑPwww3F7N§3‚Émjjg-@«ÕâÒ¼ººb°Fx:.Æž …‚AõP©TBm…,bhh¨««khhÈl6wuu={öìéÓ§‰$•JqÏÌÌ@cž™™ÙÜÜT©T+ -WWWC¡Vmvï.—‹ý¹X,F799‰lžÁ½½½ uår9WNoo/{»vÎMMMöÙÒ( §Óy~~.—ËGGG†Úívöj´\Ì…l6¤e­VûÅ_|ÏGª ¯Éá>11AGìY±X$=yssSÀkkkÜœë+•Êîî. ;I™L†Íx<žL&¡wa'ëcee9tøããã………³³34×›››jÿÄööööööÁÁ×ë­T*WWWKKKñx= øf”ÔÅÅb·}6›Ì¢Óé¼^/î¸ÓÓSJWVR©Ë墌%ÉÏãñ@Öëõ===ŒeH)ÁÓÈMvíUÁÒ …àü™¥„ ‰¶7‰€[Y^^æºÚØØàm¯T*øn@¶‚øõ¯ £*ŸÏѼººB¬"‰666˜$PR+VN§Óèvàðð±'Ðãôô”:èìììÓO?•H$P>²Ù,­[2™¬V«8-1=`°ÂqFÅb1¿?‰ÐÔÕÕA1„Ó"B8&ñyeeeŸ¡Öéé)½3‘@ ÙîÝ»—N§ûúú&''éœNç­[·\*Šùùy«ÕêñxÀôõõe2™ÙÙYÊÌÏ?ÿ<‹…Ãáÿú¯ÿiðí·ßò„œžž~óÍ7ÇÇÇR©tkkkiiII@×BÔÙØØÎå÷ûÙ£à‚_¿³³‡ a ÉÆܹ ¼9ìÒa3~‘ËåðÝ E,K&“tõõõ‰„p›®®.j®“x|øþûïïïïá„ú´îX2™<99«÷£ý(—ËE"t5$`p8Œi[FÀ¸d§¦¦¡TaìνBÎc*• Dø”[·n={öL.— ÜOZ­vkkËjµò|àècÚÚÚŠžt:* >ç‚ ðgéKÈm ¡¡¡A©TRŸbÝ"ýnggG»Ýκ)kŒŽÁ`€o²7 îJ¥¿üå/#‘ˆÙlîëë …B÷ïßgöŠáËf³!Ðä^YYY!4< …ÃáÉÉIDr¹  ºöövœ/È0 Ãàààøø8_ÜGÂè ñRÁgËʸ,‹qÇK¥R6“sssmmmƒ¿MU[[[:f‘ËÈÕjµâ‡­È/ðÜóõ4Jxt©T¢I§à®Íçó}}}ÀI`AÀîp8þþïÿþéÓ§n·Ûd2‹Å³³³wÞy‡EˆÇ㇇vÚyqq‘(˜âÞÞ^¸ŒÐL‘Ì677/,,d2x^@`sssccHÖìì¬L&ctÝM096<ŠÅb‘gžy&Óžr¹Œþ\öáá!JyRž‰ùÀÁM±ruuÕ××G®´Óé‹ÅÐ%ñú¡=“Ë唯 uNOO{zzÐ"÷ööÞ¼yóg?û´äÕÕU(xkkkÄìvû—_~ +‘w>ŸïîîÆKÌŽG­Vß»wÏápär9·ÛW¶»»ÿÊz¯×K%‰D8LJ††–––â···Ëår:¢NOOé·ðBëËd2&“‰´Æžlð¢È(—ˤs$ c'''äÁ2m{^¯Eå>99‰¿îòò’¼!TÀ———´¢X-\.rp(nß¾íóùÚÚÚFFF...ŒFãÈÈŽyp+È<ðÇ××׿ýöÛ ïêëëq? ŸœœÀ0º&£cÔ£T*‡‡‡¯®®ðkŒŽŽòØ ²íôxÛ‘H$ ç¿®¡Ü¢¿æôq:ìu5 $[¿¬’ŒF#®Ñhd'쀼@Zu÷‡£T*ñq•Éd/^¼`»¶¶¶¾¾ÈûÙ³gˆ%‚Á î>'GGG="®„D1‘H€=¢¶ä=!!žŸŸ?yò( %»Ý.‘H–——Y`‡ö I£~þüùu)zíB"©–\WW¢ÐNÛÛÛ`ð7žŸŸS…š:??Ïö»T*…B¡B¡P­V°ð{‹ÅÐÅ—Ëåþð‡ˆèß|óM³Ùl2™®ÅÚ¬dö÷÷ÉÉcćE“˜@A~ýë_³§}ôè!* ñ()þó?ÿÀË—/“Éd¡P`-l6›q ­T*~¿ ãÉÉI]]]4%·àüüœ¥"+J$öET*zp nõõõ<„333 4àе¶¶nooÃJÄ4+—Ë ¿…ß¹±±ÁR'#:88àeåƒÿŽ÷ÿêêjcc#•Jét:tV‚ \\\F—‚¨\.ƒ;Emogyy™Ñ%, L&ÓßßOÀ!‘ªLÿùh+•J˜6ÍÍÍ™L*Vmìf³³³çççÆRôpjwvvV*•¯¾úJ¥R‘;Æù€ñ@Íææ&ƒxò~Ëå2 dž¼r„|!uch¦Õj‰òåd2ÉDquuU"‘”ËågÏž}Çéõëµè ˜Z°Ü &ÅmÄšE©Tær92ÔÑ8‹EÔ2z½?4Ý+¢†ª€±666¸(ÉÏÎÎòù<Ûüááa&‰Dâòò’‚Õj}ðàŠ‹L&svv¦R©KN¶yžp¬dád³Y”W”Û­­­® ÊšN§©©‰!O¹\ŽF£ *ÇÇÇNç—_~ [ôöíÛˆjÖÖÖ ÅÔÔ”J¥ÂÛ522ÒØØ˜ËåîÞ½;==ýâÅ‹þþþH$Â$=µÅbÊKäÖùù¹ßïç;r:9Ìf³Z­'‘HÒéôÕÕW>Y(.—+“Étvv2¹²Z­‰Dâ:psæéé)ä/21àX Éåò–––õõuf‚ ¨Õj·Ûýüùs¶¯Ø¯€"‚ÀG(Øz‘H„¥µ ñuŽŠ LÃèVS© P\:9J]]ÓédîÑÑѳÚjµÒ\^^’‘B”Êôô4îb“ÉÄÖ×ápìëëc +ŸQ SMŸÏ‡1 °—Ëå"‚ŒÅb£ÎãËàQollÔh4ìÉD´ÛíÜ@$LA„gŠ ™hÔ"ôaÔF¯Ã뵨ÜúÓŸB7ÄÃjž5=Í)¥:únzL>½‚ °\zûí·©¬ßxãþþ~Â$ßzë-åœ#ÙlöôôôöíÛì , R\·Û 9A<7 Þ·[>>™Z­vdd„Ç”Yü/z §Ó ÷æüüò*¸ÓéÄ¡:55Å4™—¹¹90Ó(‘©4¦Óékª€Y¨è2™ ÛÁÁAssóÁÁ±« ‹$ @`±XŒØ\«Õ޳©ÆVƒ£Z­*•Ê?ü°X,º\.œP*‘Fœœœ8NRËÛÚÚØ9 á/«Õjz½žAy‡÷ïßf 0==ýÆo‹ER˜¹·èŽÙãåóyBY¹NNN˜þ#ÃÐjµ,¬Êå2Ì?P«¬È=×jµx£r¹œÝng‚k—\\ÈPÅb1žµG1^GȪæÛo¿E&‰Dà€¯¬¬\ï]¾þúkƒ_}õU>Ÿ'.N&“-..*•JŽZA‚ ¬¯¯c ëééÁè8<<ÌÅo³Ù0Rõ÷÷“­a4 …B¹\¶Ûí”,0æ¸0ÇE£Q&ü˜À¡íkiiq8Ä~¶µµ½õÖ["‘ˆ†Iöûpm*Œl6Ë^G.—㨯¯'Y,â\.Î…u+›ž¶¶6xüXIûƒepp"W§Ói4š>úH¡PŒŽŽ2ß³X,<Xþã?þcff&N///‹Åb“ÉôÙgŸ­­­µ´´lnn.//Çãñh4ê÷ûñ+e2™ÇÃZXX ·®T* éYÎéõzÎn¹\Ç9‘ÉŸ°R©D‰tzz:>>nµZwww™ØÇµJš¢Þv®—ËU­VùŸ‰„ùÖÖÖžžžÎÎÎO?ýô{=Pÿß×kq¸ßºu«P(0lM$´E,y0b O4™L,壇*•Jóóó ×QL×jµõõõ•••íííããc\ØDWVVxŽŽ@°’J¬×ë ЊÇã^¯þ{&“ñù| R©T4=99q»Ý '''Do©|pp€H‘vÏ`0€€SƒY_-Q– RJ¥]H¬ÃÃC¥R911!3ARÐ]˜$*•Jm‘H¤ÑhR© ¨{{{›››`¶àóá©988@S¸···³³ëØï÷C•Âsrròøñc«ÕúÉ'ŸÄb1A"‘Èúú:%$Ÿ|™L¶°°°¶¶F;âóùZZZÒh4*•*NSMÏÎι>??ßÚÚâ«"]âŸíííÙÙYƒÁ3³~kk‹ôT¸4„ã0ÍÉd¬C+•  ”Ì™L¦V«–Èçó@þ‚e]FÊ%,YVî`Oärywww0t8·nÝÂÁà%‘HàÒ„ag³ÙHÓf¿÷2‰þçfªóôéÓR©ä÷ûŸ>}º½½Í²Ž÷&íÚÚA$Mãf’H$³³³{{{µZ­®®Ž]4;FÛÛÛ€Oßïøøã¡2 jkkƒ¥ ž”r—0µ%“I$˜Œ¡A@Féóùfgg[[[ÕjµÏç#n÷ŋϞ=£;$ÇX.—ÿæ7¿QIr¯X,N$áp;‰©µZ- e2’ ‚Îæ¹X,òÓ7øÂ...¾úê«ï÷DåõZîÈ¡r l# ^Ucc#Šcô+++tСPÈh4jµÚ¹¹¹Z­–J¥‚Á N§S*•¬¯Ñ£"‘hllŒ#•9àõyZ«Õär¹B¡…B½½½ÓÓÓ¸ø È!Zзôöö¢À¥‡£Ñ¨Õj%„Á4þ@jŸD"›—5—X,ŽÅbÌRØ R©Á/Îò¼ÆÆF“Éd4Ñ›Í掎Ô¼W6› "k{{;¾§±±1Ø{L‡ÙCžœœ`›â\ ƒñxI>š¼›7o®­­ Éd²X,Æ”yyyii 8–%A k4¤¢uuuëëë‹åƘ¡°Ì¤Ó馦&*q¯×ÛÞÞÎzY"‘ìÌ}°¼¼,‰(¯nâ’w¹\‡ƒŒP˜h¼uÀypu¡"•Œøš8lTÏž=S©TµZi¹}€«òù<àÀ÷ßC³éýý}›Í†Õív¿ûî»SSSííí]]]J¥²¡¡abbéÑðð0ÛÝ–––¾¾>̺”Ì„Š Þc#Ìív744 ªÆ C_Åö €Ûí†ô[WW'“ÉÖ××C¡ƒ 8À§§§´8R©.)×'j<îwûúúHÝbÍS*•ØpìííáM …B„WPÎ3‘¯T*x¡™9 œ©««ãa¦¯Ân³ÙXÔSþŒL:"A*•J$7F1ÐݹsÇd2QͰe‘H$ …‚m3ÙL.—K£Ñ°iïëë;??ïïïAíÎc0FGGAÌöööö÷÷£_ÑÜÜ|óæMì²h²Ù,,Øýý}¥RÉ[.—s3ÁëŽF£Ùl¶£££î÷Áî$%ðÛ‚Á 9@Ÿd2Ù—_~ùýž¨¼^‹Ãýoþæo(¥Õj5IZjµrºT*íééaê×ÐÐÐ××·½½=== F¡PLOOcq¢# ŠÀää¤Åba‚×4"ü°Ûíü¨¤R)°|###µZá>uGáÒÒÒøø8S¹{÷îýÑýÕôÝ»wãñ8r.bÛ,K¹\V«ÕØ...úûû­Vk]]¦gŸg"™ÉdÀ„i4ÒP›´´´Œ‰Åb®CÏÎD½^OfFYÌ„jµšåăè9\.;Ʊ±1öÌv»}||¼T*1ÎÆéCà¸N§»uë–Û톽ãp8¼‡$åv»N'G’Á` $‡v€‘Sþââ‚3ôä䤷·—­C[[ÛØØâ³¾¾>­VË;,•J)¦l6ÎÃÑÑQÝ2™ìæÍ›¤FÀt=??7™Lmmmëëë¼íÅbqqq1‘H¬¯¯óq%Õ¡­­­½½ý믿æ1ØØØ‰D q –;99I¥RŒb  ŸÏÇqÜÒÒs˜6kbb‘åücr¸&''9mÍf3å°F£iooGËët:[ZZJ¥’Óéljj"€W§ÓE£Q³ÙLPccãÅÅRw²¨¤R)4p(4(Á`‡’³Ùl³Ù¸Ú‘ òþ—J%T˜ô…Œ¿jµšÉddÜÝÝ;iddÄh4îîîâ,C*²†¡èÄÄsv<<Ïž=ûì³Ï Äììì$‰ÅÅE¬žårynnŽçßëõBë#—ïÜ‘“““ýý}½^ßÝÝMŒŠ5̽‹k!ŸpߌYFGGÅb1Ž-Þ±d2év»z²uƒThµZIŪ¯¯¿¼¼œœœ¤ƒìêêêèè@ì@Ý£P(Ç'Ÿ|ò}Ÿ©‚ðšîCCCgggÏž=FšH$¢Ñ(ILi8Ôhü———9 0àÄb±@ @ì!¸‚ããã™™$.×ô «Õêóù`óîîîéÞÝÝõù|"‘H¡P@”J¥‘Hc&“I&“H›766ÚÛÛ!/RäbeDÉC‹‡å•‘Q&“¡9899Aê£Óé666ˆ£DQ€sšÜm“ÉzŒO0# R©”M)3œ;¨nr¹œZ­Æ~ppàt:ëêêö÷÷A`b±È¿ruuÕÛÛûÍ7ß°¦ƒL„°Éåò@ ðõ×_³òš™™A€ s¹ÜÆÆ»Ý¾¸¸¸½½ 4êC­V‹F£¬ÄÃá0HœP(´¶¶v=IØÝÝe@ï÷ûårùêê*=PG¬®®& ‰DB*U¿ ¤ã>~üdTHô6PÕ V«ÕöööÕÕULª×$H’E[[[1§$“IrT°Þ÷V­V‡‡‡q™NOOß¼y¸yss3I½YP?~ü¸X,öôôD£ÑµµµžžžýýýG±³À ‹ùŽŽ™;N „s±]èììd4‘J¥~÷»ß‘å‹Å˜V…¼••Ýññ11ÂårÇC2™L«ÕF"þ#z-Œ{{{TKhê9F¡a=“J¥à )’NNNØ@"¶q8¤[ÀÙç¯-µ ¿`]Ä=Ǿ…ÏÙÙ¸Vž%ŽÂ­­-âÚoß¾M¯FrÓ­[·P)F …Aà{7™L‰dmmŽ „éÔþœööö‹@N§ÓÐ fffȯ'¢™{t~~žÎi>ŸÇÓ€æ ƒŒoÀd`òbÄ;;;#ó{½j™@ pïÞ½ñññkÐ3gT[™L† &xÆ/4øœëõúü>&“) ^\\H$’jµŠ|@¹\FÔD%Nß½{y,QÔT©À»ºº˜K­Õj¹`f•J¥µµµkØ,Ìpì œN§^¯…BÀ¼ÎÏÏñ=ïïï#9O&“ U`9¡œ¨­ÓéZZZº»»Ñ³@Ø”L&±2Ah<¾ªT*«ÕJd’F£Á=;;Ë%1>>þòåKvů^½2™L“““óóó¹\îý÷ßGî)•JßyçååeìªÕ*×À‡ŠÅ"ýlµZíÀɅŃ“F£­c³ÙA Häòò#[ N..r´wÕjXŠÝn„0Á>óA®Ñ+n·; ÑPãÃDb‹Å3ž!Ûàý‰Ç㉄‡l ™LF¤Õj±ËQ”ŒeµZìtuu²øá˜ËåX«›ƒ šÏçcD³¸¸N “ÉåÑÕÕåóùþò/ÿR©T"Ûå •Édn·ûüü\$íììð4Æãqʈ¦¦&äÿ<º©˜þøL‰D"A 9Ã/¼¼¼Ìf³xYóþã÷ÆzšÏçAÁ°“ghi4‘”\ƒ¦A ×daPWW‡\‡hV\Øñˆ…*—ËR©4 B´?<<Ä™¸µµ¥×ëY˜I$’žž,Q•J… Ìo¼º š¿ÛíÖëõÛÛÛãããPFãàà`.—cjDz}xx˜É‰Éd"¼ivvÖív#á#–:BǘäÙa0.//¹ìAÀ‡—…åööö­[·tU—¹ IDAT:…=úæÿûGèÿñõZTî?þñqµ€Žjhhhnn¾õAr€»är¹ŽŽŽÆÇÇm6Ûìì¬N§Ã´†'éÛØØ˜Á`Àí288˜L& gôÜÓÓ£V«{zzºººxÂîÞ½{ïÞ=A@’œ‚g+‹¡s€,(•Jf³¹³³v¨Ëåb‚¸¦±±1ŸÏ;N$ÃLê)`N'´HD]‚ 0!²•®×ëÍçó¿èØÈk†çÎî«Z­f2,èíXðÝáœÖét*•ŠÍfcÄqûöm`ÅÓÓÓ|µ·oßf2‹œSµ(´µD"ÁØäøøqq­Vóx<­­­`Toß¾Í8‹Q‰T*ýéOJ†ÔÔÔÔÍ›7Åbñ­[·|"\ëéé!¼P( `t`ÌBª2ÒxˆÄ@‰á¯ñÆö÷÷Æ««+ZfÚ|pðLðFc©T‚ñÞl6Ó²Ûí¤€£áý7>Ÿðr>ŸÿüóÏçîììðÇ?ÿüs²q*á|~ùòe,ÓjµU744Ðÿ¡z¤;ìííu»Ýð€“ôöö¾õÖ[•J7\.—³ÙlŒ×»»»IWdžÃO\2™¤t¢ ñM©Tr‘ ‚Àv Î%9Mtî3š‹¾…›¸“†þ4¦¨Â„_ȯ)’…x©½½½§§5áÕÕU¹\îíí…CÇ~[ÓÛo¿3crr’;ÛãñX­ÖçÏŸ3?ÙÜÜ|ôèÝßþö·¬Äà€žžžƒÁ™™~úØÄr¹Ü“'OHä“Ëå+++ù|¼3ú¢ŽŽRSL&Óðð°L&›ššFív»;;[YYï“N§Qά¯¯ ‚€í A b›ÿ‡½7ùj<½ÏöÍšÐB1K@U]]Õ£ÝiÛ±“>^äœ,ýoeáEÉÉ"mÇ>n;ow\sUÅŒ@Hšgé]\ÇŠóþ~ûªEXùt·«}¿Ïóîûº3™L&“yõêbáï¾ûŽ ¡…‚9D"azsçΣ£#V¬ä»2P"¿æFÒG X v Ïiý~ŸT~ÿð*þë¿þKÁH /;›çççÅb»9ä™LÖh4¾þúk"J¬Vëlj?t8›››•JåáÇ(¬ý~ÿííí÷ßÈõÍ›7ðF^¿~½³³CêËÌW¯^½xñ"•JFn­V ¡ldd¯€Z­ÆÝCõýøñãz½~ssóòåK6幊˜Ožžž’ ÚívONN&#&0HΘàE£Q}úŠVxÅ™L†1ôññ1aF…B,R©L§ÓD'‰d2 ôôòò’ß ˜hôÊdÕëuÂÿè H I$èî///1@`ÎbôÁLR­Vó~að†íñx|>ƒ‰D²³³s}}ýÑGáû#+qooÏb±ðiì ¨È¡Pèùóçår™µ-BIŸívN8e8´¨³³³×¯_ób2‡ä‘ÆÏ¸T`±BˆçÏŸ÷û}F‰DÊå²Z­fÚɧÿÞÓ¿ú’¾ïo@!Xô±Ö@IÝl6DS“Öj5FÏggg¸àH?a@|ŽPÆÁ¸× E(ª•N§Ùà_]]E"‘ƒƒÈA¼9××××Ãââb0B` @!~÷îÝ`0ˆ™qá“'O‰0&˜_¨S,‹^¯W©T{ÙÑ2æ{½¸öëëkÄàs™ºü8==m2™(6U*ów亇ƒ\ÔåcccsssÄ–±·Âårét: 6›ÍãñÌÍÍu»]dŽ-ô^R©ÔápNÇhkhh–Ýn7›Íð × â³}>ßÄÄÄÉÉ }+îJ?ȯ^½ÚÞÞN$L‡vvv8€ÎÏÏùLF£Ó霘˜`yËÙl6CBà)‹###Œ$¥Óid°õ€Ífc¬722R©Tæææ¯À$ýËW6›EØšL&QR^__ÛívÇóÑGÉd²û÷ïõÕWÿ÷Ï£×ë].×W_}¥×ëÇÇǃÁ`©Tyôè‘Õj]YY™››#ÖuttÔjµ2@ÉdZ­vmmÈC¾y`A×××Dg0¿^[[c†ær¹0¸* ´ÿ(…šÍ¦F£™˜˜B éðÉ¢>ðÐÐr f† ”(G„Hï¹P@v:‡ÃÁ¯ ý /uÐ+’¯Ï£ q CÊå2A.sssËËˬ+GFFH _XXÀz’N§™…"ÛEKšJ¥vvvÎÏÏùá^ÌÎÎz<žÿøÇD)™Íf4þ ãããcccf³yrrrddäîÝ»«««|“£££¸–––0aÚ`»»¾¾Îýd2™( G•Ëe‹Å²±±áóù¼^/ÙR|:øiµZ-”ááaÜ‹Éd=.ü*•ŠÏôCøú fîÈÛ èR©T“““PJÂáðäääøø8‚-½^ÿèÑ#·Ûm0=À‚°´´ôûßÿþöö–‚Õm6ú°{÷{øðáwß}wrrÒh4ÐTÖÜh4°Þ1–][[#<Œ¢Õjav`F ×××Q¶ yDãê–å ›Í¶¸¸(—Ë h>99þJùƒô%“ä{{{;== +“‚I´¤b(âŠBuKö<âh¦ÿºIŸ¡@K$guuõææ& ¬®®²Ó#VøÓO?}ûö­Ïçcû711q}}=<<Ìò–QWˆÅbYXXàèY\\üÃþÀ´´^¯¯®®ÒÃq„ Öãñ€ä˜FfNð“Íf#‘âˆù/Cj~'̈8nX™Z­Ö|>~¹7×$NW&§8­8åI7ùi.—;::ŠÙl6¿ùæ½^Ož«ñx|}}=‹a$N&“ÏŸ?'ñŽã€Ö;˜Óét82™ì‡~@ENjnŽ“ÉÄíÎQøöíÛO>ù$›ÍòÍ;pc<0˜·ççç xA%‚*‰ Ɖ‰ Dããã<6^¯W£Ñ\__CëÍçóFƒZjž%ð,···¼¹\N¯×“G_­V‰àøv:ÜôÌI¸&å*jµZe‚äwttk•R©t»ÝHTþóŸ‡B!–À~¿?—ËQ”„Ãá7oÞ틆‡<ŸÏ¶Z-Š¡v»Í‡ `±ÛíüJŸßææ&J¼÷qˆþÿ|}cƼo8;:ÎV'•JoooÃáp¿ßGB–ųgÏ„ÍfóààäÏ^¯wvvFâÚØØØþþ>.v½^F1%j|{{»µµe³Ù&'' Ó±X, PHÙÞÞfR¹¹¹Ç¢…BÝn—$ßï(‚ÅbÁÐÁîž©êuÆ;ét:›ÍÀÃ9ép8Ìf3Ðö¡¡¡B¡`0ÆÇÇÙ¼Y,»ÝÎT—6“WáOTžn·[‘H$ÆÇÇÇÇÇé I A•È?áÅI@~:èvVÖ•J…Õ“«p8̾êõë×óóó¥RéÝ»wZ­öäääÕ«Wà"X/Æb±ˆ›W«+n!Äîî®\.W*•›››„!DÞÛÛ{_gé_}‡{0DØÀ|%þo¤î‰½Šbggqz(BþÜétİœƒuªÎp8l0@ÇÙív—ËÛÅôôôÌÌÌùù¹N§ûøã±°ºaÔËÿ‘ƒO*•²¿Åºâ÷û± †……ZTyz»ÝÎëDž¯|>Xb~~¨H>Ÿ'ÂevvV1;; -}vv–Ü’û÷ï;©Tj4úÓŸ !*• :œB¡°²²299‰‘ºÑÂÂ×#æé4j<¬‚ÐiÄãqRe@Ø›L&’öðÓQÀ"ÍB$ÆÊšÀHàºHÜ¥”ÉÏ~{{{rr“,€¬ mœNç`y›J¥&''™ŒS¼—J%ÄWãããpFYSôX(´Z-´Œx<•ú×`0‹Efv»–šGýêêÊçóÍÍÍñÃ"vZXXøòË/Íf³ÅbaPCWAíòòòââ"ÏÃòò24y5Yò“Ó Y„•T*%ŸÄ1»”?ûûûTZÉd²Õja0$[¡+®õ÷xœ¾>ˆÃýþájµZ2™45ÈZiZ94›Í&F•ëëëùùy,|è.è@×ÖÖXp#—ĩϲÅl6¯­­Ñ¹sÇÞ¿…µØüãÃÃÃR©Dô¶\.ðàA H$ÓÓÓ O‘š@GJ§Óv»9ý¾N§ËçóËË˃¡ááa´(N§ÓëõZ,²X…Ķíîî•f€qæòòR*•&“ÉóósæûFƒøb3™ ¢;…ÔÑý~_q~~y¯¬Ûí†Àzooµè…N§ÓétŽ ÅÂÂÕGe2™d2ùùçŸa¸±±Ábc}}}}}AÈýû÷ÁU>zôˆi>‡ºR©îîÝ»äò°š[__w:UÜòò2˜F’Ê9úyaYb7N”3ùËÀ‡²J¥â²,—ËËËËBˆL&ƒ4[’×b±ÀIÇüEÔøææ&¿¢l6Ë£bµZÿüç?;ΧOŸF"‘p8Œ4ð׿þ5pǧOŸ2G™.•Jÿð‡?ЖñÉbÚ<;;óûý…BáåË—ÝnwuuÖ4¨}ö"‰„¦­P(h4†æt«ø¿nnn>þøãZ­V(Ö××I£äÒBF‚ÐÅáp,,, ±ìá7‹í2>6¢­Vkrr^ ¥©©)ÎÓ`0ˆþ%b£Ñ`#‚r ›•L&ƒ;D²§<¡TR©´X,~òÉ'üÔHoÙfáR¤º_YY©×ëßÿýõõ5šw(Ê…BèH8~ýúu<Êçó(z!ÔóQþæ7¿áù'£<“É„Ãa¦•Jåùóç°•öööØaàf*—Ë9(ЀÑGªÕꉉ‰J¥¢Óé`U«Õ™™—Ë•Íf(¿˜øãíí‰?‘ZJÇû9Iÿç×q¸óÍ7Ü{¶˜òGGG/..NOO].Üsœ“‘H„ÅúÁÁA±X$•–ððð0™LZ­VF\ò/^¼èt:¼ÀÉdòíÛ·L`$Éññ1{E¬ö¡PÈétîíí¡BAÈLdâÓ§Oÿ½yóî«W¯PÎÅb1ðë½^o>„t:<<œËå0þh4Ú[ÚÏ““¹\ζÃ!E"€ÓV«ÅìIËøø¸ÝnÏçó···è2_r¦{½ÞÓÓS¿ßo±X(î(1Ð ¹ÝîÝÝÝv»½±±ÁN—o<7›Í¯_¿v¹\hµÛíF£Á£ÓéøÑ€Æãñ¹¹¹£££ÝÝ]ˆ"˜fÇÆÆ^¾|©T*ÁÌžŸŸF>°×Ož<Щ‡\V2з··ájµÛíׯ_¢\DŽCU.—“ ‚1¾{÷h:¹\‹Å'áña,Éd°z!¶ÁD¶u:†ŸS­VÝn·ÉdúéO M&Óðððäääèè(ÆQ¨p@òåÖÖ¾0”‹hº&&&Ⱥòù|[[[r¹ÜçóÑæ[,–¹¹¹íím!ÄÐÐÁØØX*•"ö„@‰ÙÙÙÝÝ]@ž{{{Ôòccc···-Z­Ö›7o”J%*ZÉX,FÖc8ppp€é†'fÖxÙºÝîùù9TÔáòòí ,„pZ¤Ri»Ý&‹Þ—±N§»¾¾ÞÙÙaÔIëÉ–¤V¸F âwvv 7spóyÉårèÄ~‚²R©,//#©,‹³³³cccÔ4ŒY03_\\ôz½»wïîïï3dTBj&b6­<íüæææH«G˜g4¿üòËT*ErÿßN§œKG:楳§ˆÿ!•J±Ñ‚*—ËF£‘ ó{ÿú ª\›Ì®¯¯9žï RqÖôÀçøÌÀ8ÌÌÌ@ƒé÷û …b}}Ýf³%“IX†oß¾U*•KKKétºÓéüã?þã›7oÞ¾} 9S ÛÞÒÒ’‚4tŸÏ···F×ÖÖ„µZ-.--5 îÿ¯¿þ w¹\.—ËÈÉu:Úv&Ôè[PGA)ŠÅbõzÝår•J¥ËËK!Äêê*TnäeZ­Ð+(QfµƒÁd2qVº\.f‡Ãáp´Z-ŸÏ‡‚hqq†Ûí&\´ßï;οýÛ¿}öì™Z­~ðàÁãÇ ÖÀiýöíÛû·{ðàYìÙû£¥t#‘õ³gÏÚí69ˆR©txx]xjÉv»½··÷É'ŸŒ¿xñÑ"œ`0Øï÷www1]]] !8àªÕªÍfCá §>‹¡¼¢=22‚%’ ÞZ<·À¯¯¯¹©ÇyH !nooc±Øêêêââ"“z½þé§ŸB¥'=™lØJ¥²¸¸h2™<Ï·ß~»°°Ðív×ÖÖ0²Æãq‰D2==}xxxzzŠÄB¥Rݹs'G£Ñ_þò—£££ 4ÆÆÆ~õ«_ýçþçää$ã¯ÅÅE„­Ì‘ÏÎÎÀÆÆÆ³gÏÆÆÆÂá0{`¼? t:Á`0 õzýêêŠqÈöäx2Ëår­Vco||üÙgŸ15.‹@8J¥Òüü>>¾²²Òjµ666¨<2™L 0?æá/•JÌE¹#)þv_&˜{µZ-§jKü·ïéý¿>ˆÊý³Ï>ƒÅænœT*=::bæ’Íjµ~öÙg´]“““Ðæ@&“éõz_ý5Ó|†ÇÇÇV«5 ;»ÿ>€ÙÙÙ»wïêõú»wïÚíväk^¯·^¯K$’õõu¬C>ÔétsssFpN÷í·ßž{ UyrrR&“MMM!n³ÛíKKKt¿øÅ/s¯°»^^^fø0 ,..>|øSÌ nÙ\.ÇßN‡×¦P(LNNºÝnR5˜½Èd2·ÛM!Ï}\.—A» Û™žžn·ÛLöX !&''13cYbhNöa*•Âm0NÿéOBó»ßýý¾ßïÿýï7ÿððçÙ£££áp™Êùùy¿ß¿wï^>Ÿ?>>¶Ûí È\ÅV6>>Ψ µ(òÇX,†_ß?H(‚šàÁ`0x½^LL„m6ÛØØbäù(ˆ8ŒX\Ñdàè¾¾¾v8ÑðF ÌÏìf³Y+ÊÄ !øýãKb&C".èl¸ÑƒAÂvÚí6f7JÚ`0ˆ0E<•R ”(Çe2ÙãÇwvvl6íÙ5¤ÊŒŽŽnmm% —ˋňæ(•J777SSSÍf3‹)Šd2‰£[£ÑÀPGÊ3ƒ˜NªT*å·A½Òï÷‰j€(ÉÝ+Q ¹¯.—«R©0xôít:Ÿ?þžŽÒÿñõAîøôXh8NÒ˜>³[Ëd2···¤œ³M¥R777‘H„ÄÅl6«×ëc±˜Óé”ÉdÝn7¨Ñëõ€FyÐ @xûö-ãl8˜s¹ÜãÇ1|& µX,Öív÷÷÷wvv`nÔjµ'Ožðˆ3 Œ¿«Z­âÂID‘NIyK¾%nÒ^¯7::Š›ý n£ÑÈ6{ttÄ:èüü¼^¯/..RGøý~,9,E¡¤ÝÞÞ"Œi4„üþ÷¿‡O}qq‰DìvûÑÑQ6›œœ¤LÃxõôéS2ê`aZoÒ¯"‘sx<^©TðUÀ´»»›J¥˜G3ÞÙÙT^(^¼x7†ù Â&à@íI½¸¸0™L0s°år¹R©„~†Ž˜f çá÷߯R©øÁa²¬P(bRøkµZ„U¸ÕÑwß¹s§Z­>xð Õj-..~úé§(ëaQä~ùå—ÜÁIŽŽÊår0L&“———ðI8”///±ð}·zñâÅÚÚšD"ùÍo~3??2_U&“!Ë‚Ù1?’"/ØáêÀÆÅ-Øl6‰·f›GFh2™$Ë¥V«!4BêN+€”‹2…pvôNЉ^e–If³Y©T–J%hEðܑЋEÔ ß•Jåþþ¾L&#‡‘Ò¦‘‘‘R©”Édvww™°žž’ðÎÌüj©T2›Í(àm EI7öÝwßqëÃó@0Må’šœŸn·»²²²¹¹ …¦¦¦ …Âþþ>¸MŽìŠ{½Dæì(„Å“Â899‡•J¥T*©R©Óé4aaü1s12º¼¼$cùQË|cü–€¼É ( ü1"-d¡#v»Ý‰DÂb± i¥H”H$¿øÅ/¬VëO%Î`0øý~–Ÿ6fggyEÑd ® C @ ‹•ºL&kµZà‡L&¯M(j·Û¨¯ 1MNNRÅC$æ¸'òÉãñà~–J¥‹‹‹ôv»­º\.B°šV©T^¯W«Õ²+ûàÁƒ Fc2™~ô£>÷ÕW_½~ýZÀ>úèáÇGGGl;Ÿ={6>>Ž ©V«éõz¶sH& ÅÉÉ TB ë¼xDÈçr¹?þù&[hæ ˜ÔiɉÄää$hoz[(¯¸Ø:ó7 ½xbÙsªTª¹¹9¹\ît:‘¬I¥Rø¼ùÈd+•ŠÕje‡!•J‰sU,»»»F£‘›ÒápƒA¼@€“7‘H`Ò’ޏëáÇBˆf̆‡‡‘oMMMÍÌÌx½Þ›››¯¿þšŸÈÞÞ90pªívûááa,£‡ þ2šÁ` @Ý:1:E)2³¨˜¢(•Jl€N§\.s[Pnsø’jбÝnëõzFQÄ…Édb8†Ÿ€§ëÞ½{³è—³ÃÏ!M,×ë}öì†2½^¿ººJ<22ÂßHå+›±F4Íf³vSkcÐ;;;“ÉdŽ!|ø|>âJPšùýþ•••Z­FÒé›7o0bÔét="lï‹/¾èõz­V+¬¯¯óû_ZZ"žì'?ù Bî¥RÉv ÊNlóôˆqiès¹z!‹»N» IDATá냨ÜGGGqŠSV ÝÅœr||Œá Ùo›ÍF22>¯×ë÷û§§§évWWWÛ¹Ýî!ŠÅ"“Ör¹l0>ÿüsNê¹¹9:5†Î2™ eÆNÔSSS8’Úíöää¤Ïç[^^^YY!ÞEG·ÛmµZÌ- ââF£‘KKN|‚7ÍfóÔÔT2™´Ûí(¹xðò· …BHúP ¢jÅb@ø:Îþþ~»ÝN¥RBˆ››t™^¯—…»;ˆi‰¤Õjžž¾|ùô£ÓéÄbwrrryyÉZ M<÷z½áp˜¥J2hÊå²Ûí^]]e[`þ,..’˜zïÞ=·Û â$,ÍØùùùÏ?ÿå> T“ÉôóŸÿPgY·Ûwssãñxh\Òéô;wHbš››3Ýn—é[,á Ó2~ñz½¼ø¹È\ZZšŸŸg€Æ.tbbâ‹/¾ˆF£ív;‰ Q» ÿú׿FR«Õ /¨Õê?üá°È!I$ápcíÎÎ΂Á`€Óàt:‡††hïˆà€ÙpuuCBÁ'U,!ö÷÷ÏÎÎGµZEŒ(—Ë!•"W熫ÎüŠt$¤;Dã*rïÞ=‘,*©‘ƒÁ :";ÜÎ —afét:€qü–0E÷z=Æîããã gÏ Üí÷ûüà Ít:]¥R™žžBx<Pe€1¾øâ ̢؞ÏÏÏN§V«ív»4Êä7 “ɇyðÓ) H$d–îîîÂÇ&üÐvtŒF#÷±JÃÃÃOŸ>ååB;Ðn·¹õC¡Ðåå%QeÉd2“ɘÍf<ÌHݱ¶rU*•¥¥%`2ƒ˜Ãá 2›™™ù̫߱„uhrr2•J]^^RD# ÀŸõûèèˆJçàà ‘HD£Q²°|yCFoqqljÄãÇÕjõùù9¾\-€,ööö^¿~½··W.—ÿéŸþ‰Yíþþ¾ÍfËårúÓŸd!«ÒjµÇÇÇŒ&"‘«Zdj———¹\.›ÍSp{{»¹¹‰Ãåúú:‘H`;;;‹Çãd]Ɖ‰ ·Û­Ñhär¹ßïÇh·Û ·Ä’ ­'ÌúH+—Ë öÙg8¼y÷„½^øÖ8Ñ=O4E~ÃõÉðqss“HOçüEétZ¡Pt»Ý“ÉtuuõüùsèW2ÀaZûgÏžÑEQ}Ÿœœ^íÓÓSÚîH$B¨q¯ù|¿ûjötïýëƒ8Üñ‹_¸\.²ô(gh÷ :`_F” Rœ¦ûààÀd2ÙívüiäÀ¾sssspp$èÙ³g`ÜÑP___3£§+‡üý™ÙÎà2 …"£ÜŠD"Ñh¬R4ŸÈ+Êœ0Óp¬F„"x'«ŒsŸ·±T*Q°Ù„R8‹±aFa6€Ž1µ(—ËJ¥R XàÁ_!•J…P,0ÄÀÇk@¾$æw¿ÆjµJ>‘T*œœdEf³ÙpN".¨-—ËÉNâBd2 …booñn­V …B¤§ÓéH$Âj‘ñ÷(Š-ˆA2±`ssÆN"‘ÀK™Íf± 2¶føP¯×3™L¥R‰F£Ôkr¹œÑ<Èe¬­•J…Ïši>¾Yàò …_¼xÁË\*•ž?¾³³ƒzÊ:‰ R•J¥‹åË/¿¼ººB—)‘Hòù<üý7oÞÐt¢Î–Éd,ånnnPY°r8,¸£1å9gúÑjµÈ2ÔCˆí#²qD_õzËXãN§sqqAÀ ñßt¥ j …• "qºXvEhK¥’Ûíf‡úúú¤;HÖŒ°šád0¬c;j4QXIa@6›Mð¿™L&îìì€C×”ËåŽÃá0"º§OŸâÇׂ¾‹[ —Ë…~Å;$n;•J5°qòl4ÓÓÓ¸ÐT«Õ Z ܈õ¨‰¨)ÑþÓ!âäeït:ðJàãëÖjµ±X콦õõAÌÜi”È&FcŠlûSÊ•J¥âcc³°°`µZ?Æx<þèÑ#ðl(É2™L½^w:>Ÿ,]¬FØ+8‚ ,eNÇ™ÈüG­VcŸ¹¹¹™ŸŸÿè£0µ²=£>R«Õp®‡‡‡áüÁ>ü?44Ä̈+\uú_~öZ­–Édd2/z!ÿüŒè ( (6„ Î8ƒÁ`·Ûß½{÷þÏÿA‰{É,ã•CäûÃ?0äÅbtHò•JåÕÕZ½B¡Ëåööö¬Vk:>==Õëõ(1„üNT*Íþôô4Ê9«ÕšH$NNNFFF|>c˜ºóóó Þ™Sk4šl6;22B%ö®D"1??€D ðnk›Í†íH¯×3nâ†Fֱl†û¬^, ¸v\BV«u~~þÕ«WËËËL{yz½ÞçÏŸ“Ö‰D¸ºà°Ù†'a³Ù~ûÛßÞ¿ßëõ2c5f³™[!OªT*ÛÛÛccc[[[­Vë‹/¾Ðëõ»»»ìipʘL¦íímf#P¹Î i4p@z½~@ƒA¹422…bii‰«Ýn§²¶Ùl^¯wss³ÝnŒŒpÜŒŒŒ0Ücˆð9Œl&“ †0>,·ÛÍ;¸†wp1ñX2™ x°RÖ¡&“ N2™d †;”æÌãñÚÇX‰Ày¬Lq p#žœœ°´àm ‡Ã\ÒDÍôû}²®T*Õ矮Ñh¾ýö[–^ˆ§ÏÎÎÐS¹[,–N§óç?ÿùöö–¯T*=<<¤‘%ß'ãYüäç)ÿò=_&“ ÈbBiÑh#ý‡ðõAîñx|ddDü% P(pᓽ‡šP"‘0eëv»ìÜjµtJNµZMúòåˉ‰ &}¤LÔëuæ¸3ŠÅ"ƒc‚Õ9tÞ¾}[¯×=zÇãñ8!Ëü f³™óbÀTáàƒÅbä¼0"y€þàöö /åj·ÛÅ4Ë¡*t¥R¡ßgv9:: ¸Ž¡3IÅb‘\ˆ@ pzzÊ䇨I¤CCCf³¹V«ae‹›Ôívch´Ûí»Ýî~¿ò¾×ë±ËE’/‰)-At@i¨g«Õ*ÚÁF£±ðG?ú” oûy{)—ð±€b‡Lbu«Õ"+ ²ƒÅd˜Ïçív{£Ñ`“ Š™ÙÐÔ”œ.—«V«u»]>,L§\!¼Ïô^¥R © 4·Û½µµÕh4FFF¾üòËr¹ î_ÿõ_ñdï ¦\.—w»]Rü~?‚.ØßN™¿rò”Je6›]\\ÜÛÛÃù<77×l6a¤`ª×ë‘H„,½F£Vx'Ã&È …Âï÷S-æóy!„N§‹F£BäF ¯Z­ÖÑÑ‘ÏçcvÄòúææ&ŸÏã¢CŸGÖk®L†Z<œò´b˜Åøóé¢Ñ(FÖýý}ƒÁ@2&`P|±Ý”½‡Ãçó¡‹gyþãÿX« T*¡‘]]]¥$G:EüˆV«õx<½^ïÝ»w¼Ð...XÂ3X£5á¬Ç!µ¼¼Œú±/ÞFÂ]ùpY8S¯@C†9Ñh4ÒÖc“Éd°ç …SxþùûŸ§Ç¿J–gµ!¿d4±XìåË—ƒagÖÕÕU*•òx<…B+E~ü{÷îa •H$€´Z-9®”Ò\l „à±P»Ž{<Ç“Íf1ýº\®³³3&'j¸ì¡Z’çñx`1ù„´”98!Ý_< ¬j*• à,P%Óß0}^]]ýî»ï¢Ñèìì¬L&;??Gd½µµµ»»Ë0gwwÁÒóçÏ1±—#÷J§Ó-,,”Ëå·oßV*œ; …buuukk‹öíÛ·èàÍÍÍèèh>ŸçD»ººú—ùŠ}žæNüQ Ù éõzöOüÈLcEcb±Èü×n·#"‡=?7:TjŽA·‡ðž³‚X¹\¾¸¸ w '!Dà´êõºJ¥"a·Ab⎎PgÒ$¥Óér¹‡±’]]]«><<¤KÆòM.È#p°ûûû>ŸÏív3s¯ÕjXÆ„ô¥Réììl0B~ær¹àG¢¼…½žÍfÍf3õ>죣#lí &''ß½{W­VÑËÒßpè3³Z­´æ“““D…°Rfïõ!|}‡;6?<Ù¯ 8 À(‘H…‹ÅFGG‘+1Éš›r)_\\ ¸ººzýú5½g*•:::š˜˜ðù|à¡‹Å"ãF£a·Û///9ãâñ8d1 J…B! áÿfÄ‘Ý,w«]*ë¤^¯“ƒ÷’œh VÙlÖçóÉår·Ûm³Ù¢Ñ(Ê_<,*•jxxn¤¥RIX×ëEíÎëD \¯×ïܹ³¹¹É~¥‡Õjõz½¼!­V‹‰'¯_»Ý>;;;??Ÿ™™§ÇŽÉ 1ߥR 1 ±Ã8NDñN§Ê‚R©dqÍ/–wžìüü<•J°033Ón·3™ ¹wr¹¼\.s<ñ‘£"„xùò¥Çã¹ÿþÆÆ«PûsssÜÁœƒß|ó ë>$4ó7ãp8är9zA¯×ËB¸ÛíÎÌÌ0L£¬f¤û_ÿõ_R©t}}î„x¹\Æ«AŽZ”±±1¦ä Rjµ#&@1´‰pFGGwvv”J%zPÞ´+L5Ù1Òlò…³F”R©da(„p¹\€ ùWØ…y­ãããè,™†qgícÏq‰‘ÝÔÔ”ßï'‡Çd2q!%“I£ÑˆÝoffFÁzzÚh4²à!Þdlllbb‚©)‹n°Ï:ŽÇãÍR©¤R©HOív»wïÞ•J¥v»}ccß²âéÓ§fA ãàÆ*_«Õ˜³ÓüA@áíc<³F&lïë ý¾>ˆÃ=“É)m4ÐBPr7 !ØJ³¦ÿâ‹/ðÒ«ú|¾×¯_#U…Bÿñÿj DªËå:88À½B$i»Ý¾ÿ>á³³³xaÐw³ a¤Ð¥9òÞ4ÍÌÌ ÐD¶@|“Ôþl>yÂx“™êrdãôc˜ëõzãñ¸F£Q©Tx Y A cfŠN‘o˜„øX,¶¼¼Œ#ŽiF³Ù„ÌmC­Vs«WLX§Ómoo_\\ÀØÃˆ@H§Ó•ËåËËKfý~¿?•J•Ëåb±(„`˜NŒÓ¯¿þšÞÐÐÐTÂ`0È‚ .ñ¼ʵÓé †H$Â*’m×Ûððp0ŒD"+h?1%à즔cìn³Ù(£8¹) ‹Å255…–" ßF£Q¥RIÆ ²z2~@d²F£Q£ÑP!V«Õ¯¾úªÑhüîw¿k6›àŽÇÆÆäry¡P aJ&“íììp»onn..."Bõù|¹\Ž«ŽÚðð0ZC†æl¤ONNl6ÛÖÖêŒrhòùˆ‚Q#þiŒ^d}±PÒjµ°Cj—J%²íñ±ÂrQ›‘"qÉZ­öòòòåË—BênÆjØ+T*€”@ pqqqyy ¤ ÏÅ@«›H$R©ÔÌÌ ú\D–ˆ»-K("•Øét& Rž»Ýn<G›ÌßÅ ´nä†)SKn/’ø{}>N³Ù¼°°€Y6$4v«ÕÚíva¹Ôj5þ¨óósþÖѼ„Ìv#‘ 2µ¿ÕjÅõƒj¾R©ÌÎÎÙc2™„Ü:¼¢À,éÇ…?fQFiMÚív8Öh4¤h Ø&ÇÇÇà-QÈÜ»wl³Ù¼¿¿_,ïÝ»ÇÔ ×;“M0&cccX°Æb1ò¾IR*•Œƒ‰ ?À›ÌµÊÙëõ–ËåÝÝ]Vô$)Ó¢I$’ååeN1 óÔbŸ|òIµZ}÷îC€ÝÝ]>r¹‰4ÖJØ>­Vkff†9ºÔ¤wïÞeg®V«C¡ÐŸþô'`ÎÙl–…6G9šB>’.0möz=p˜WWWN‡C“óósÊØ2h?/mļ‚º¹Q:fÎ “B¡PPvp§ò‡S‡òF\]]¡u»Ý§§§©R‡††R©üj­VK”6?H@c€|H$’·oß^^^BìÁú·²²BuÅæŸãôôÔl6/--‰  Ãü~½^·Ûí>ŸÏ×ÔÔW:€É‡ïsbb‚M)×Ò›7op'ÑIŒŒŒ\__g³Ù¡¡!²¼éD3™ Î[œºB†B•J¥X,F´üLÃr¹\>ŸgùÇ;÷ß{ÿú ÷¥¥%´%8et:N?|"”T‰„Æ/^¸\.ǃ ™:t  -M5 … k·Z-½^žŸu–¥ññqÆÙdP!îß¿³— áÁÁÁ`ØØØ°Ûíétz||œïvff†Å;% …‚f)­V‹‘Ãá`Ïü„çuT*E h4M&S4eEƒ›ŽnZ­Vó–bnÒjµ`x±• …±±1È$BƒÁ€—ZXñË_þÒãñ`é< „yßl6q3b°Ûí„sJBV ÓÓÓ\–,"‘H"‘ð‹jž…Òøøøââ¢ö/1›OœNg @ĸ\§Ó #âCO$ŒY”JåÊÊ ùSããã ËA¿"kýFsÀ9ÎwˆÓ[|·Û%Bê–ÅbGRÅšÛ¹qÈ=Ÿ?Ž¿wkk ~·D"߀é‘ñú?«ÕŠ]‹•Íf¡·Z-DG m6©Ó³³³Øz›Í&l6»´´n…DïB¡ÀŽÚh4òû§d1›Í†i\0d J (Íä"F˜•J¥:8íÍÍ –|(<`Ô¿ƒT¬2P9ƒÁ@¹¼¼ u -C±Xt8xvØ ²Ú…³È£ÎgMqãv»F§Ó!¸Š±Òåå%{c|LZ­6¼xñ‚Åë„ÁwÈâIX§Óݵ¼¼,—ËS©yßNG*•:40^¯—+* "Þï÷ûSSS+Á‹Öj5ö¸Ø1H$‰DÂâüµ×ë…^É£ Áp°x §ÓéX­Öÿu¨þ÷—ÇãEÄšˆžh€£#””š·^¯»Ýn³Ù ÝÕÔÔÔÐЩê*•*·Ûm¢œëõ:KWo‘+°´!_‘7`°X,Zý;~¥x<Ž@y¿ß'-ÁçóÁ¤:¦nB‰L'„Èd2LQ°°ÓäRX1¬çi#£YúÀxR­VFñxa¾¨&ðI¡laôÄš¨×ë î­N§ƒín¡PÀ4vv–Ïç‰BÇ///ùÎÑ_Æb1„%x©*•Š^¯Ç‘Ë,±ÃáˆF£(sºÝ.Tµ³³3©TºººÊÇäv»­V+°\ZZ©T …‹YµZeq}}Fñ¨Tªl6 z¨V«ÑÞa‹å7›Íü°ØdèŠZ­V:F\+„`ºÊ°x§%«ÏˆÙ½J¥ÚÝÝššªT*¬^‘sP©qb‚…¦ O‚¹\¡PØÛÛsFõz}*•b•ËåNOO¯¯¯Q%žñæÇb±ƒƒ pp§‘H$™L¢mGîB­ —áj(!„ÍfS(TÄ”ó(OÑà2þ¦`À…c‹Ãˆ)<ºJ`n,n(ÓhçÁ Óñˆ"ôfþo•Õ7¿öV«Åš©=ò0ZXF03A²ä7›ÍWWWL±/..ò«à²<¯×ë˜W˜±¾¼¼¼¹¹™žžFýe2™xþÉêÛÝÝ=??çáÄ£Ôétâñ8}$ò9>š‹‹ j»J¥•=-rO‰D‚¨¿ñ@R‰ÃnhhH&“þßÃý¿¿&''±„ ¥¥Ót:•J%•Jq+•J‚Êø ’lÐjµ˜‚z \†•Í5:Hœô{{{Db£vÍǧIDAT`£ÓéŠÅ"}nµZ===ZÍ`:"“““J¥âv»«Õª‚Í$.Ù_"Í´Z-/ÆÊ<ÐÞÑi˜L¦££#Z<»Ý[œfÙd2ûgÌÉ5°"ª‘Ë凃è%«ÕÊ=7è?ªÕ*ò:8\jµWµ0Ø)ÂÏ€˜/..2ìR«Õívûââí9’¶L¼àw¸œ²Ù,¿s¤Ù©Tjgg'—ËalaHzzzÚh4è$(“N'ÿvtt4‰är9º(ÁÝn—ïS¥Raþæz6™LPUYJ…úÐq³ÙL$LÞæ†]½^ûÉà”D„Ðh4>zôˆ¥œB¡˜žžæ¦ÄCw¨V«õzýìì¬Óé¤âûéOj±XVVV\.¹w‹ã ëå¼Ûí>??¯V«@¦ã€7Q(DÓÁ0h4 rØý²P!3Àf³]]]¡Ð Ì>(Hdža¤~ &øoXxPu2*) ‰DÂn·³xÇåË‚]qzzÊ…yÐápÄãq£Ñ´ŽÝ2>™LƪŒÚ â.CÑl6K¥Â­@IÄòFÓÕÕU­Vs»Ýèýív;m¨Åb¡ ]\\”\g‚Á 5œÃáX[[óz½¬è‘x½^¿´´ôðáçOŸ¢Ø#@€17B(*¬\.‡ÜøääÛ·N§cÅÐF£Ñ€!¤Ÿ˜˜`çÞjµðÓöz=ì|Õj•í<Ãq^ýX™x‘÷ñ»"\W©Tb¯prrBzCR¿ßOšêrrK ¾.,, ®ý¸»»«ÓéH$¸¼¼d…Éår±ÒD*ÃëĆ £?-ǃm~~^&“àgÌÅ~õ'Ï€ËåÒétñxœ«+‰8 #°Ì<L>¦7ص´%BnðJŒ›P ÙívµZÍ!…”¨ßï“þ ¸¢×럜œ\__cíI¥R£££è,±øÉb½át:‹Å"»Á©©)$¼xîÁ µZ-ÄþŒC§§§©„Øul ñ‰³Ï«ÓéæÄ¡¦P(Þ¼y#„`D¦ŸÛf¶Øb±¸¹¹Y©TfffP™‡h•'™ûå•F£YXX@¸©R©nooIæá)5  r0<’ïA[&‘HØÍ‘q†VÂívó©yH¯Iœ ž´üTQf³9 ½¿Óô¿¿>ˆÊ]§ÓaØ9==eÞÍftt¯X¢ñ朞žƒA*Ì>BÞœ^¯Çðkkk‹‡ O³~Ôý~O#Õ É8‰Žžr›y:ó®`0ˆ“…™pÍ»âöö–h³ÙLÏ8˜áÒã#bE¾†t=r‚ÑÑÑn·Ë;Ì&#ñN&“Ô›<¯™L)8ß3—/6™LöîÝ;âƒoooyuÁîsÞ±ëv»ãããüžùpËå2ŽGfÁÜILT.//ùn™ìSIÑš0 O&“|(Ùl?º:¨4Åõz‚ )‚:Ó  ž¬ÎøÑ€Õj5 ‹‹‹TÁ¤Ü Rœ666½!R_åt:F#D2™\YY¹ººÂ”Kœ\.q…ÃÝH«ÕL-—Ë}> ^¹\Ž@P*•ò¿9ñÎК`]«ÕŒF#¬0ú4s¨1f³Ê¦‘ "Ñ\.§Õj|SÉ2²çЧÂ%Ï€>Uå€XÀXka*•úëÍÐåå%ßÝÛ˜CÚ»Sö¨Fc~~50z°OÖÃ~!74Ú¦R©d±XÖ××#‘fT:fNd§Ói±X>þøcvfdjÛl¶Ÿüä'¿ûÝï°Ú !fgg™1D’J¥ÔL, ð ¨töZ­5;÷h>ŸG§û>Ó¿úú *÷ååeƒÁP,é Ñê¡ÒEŠëv»Á.âì@iÎ/qnnÎf³ cgïõzôÎ.—kee% I¥Ò©©)âí{½Ójz7dm¼Û‹% ò2˜›ÍfïÞ½ ƒ{bbbjjŠŸ>úÜÐÐá>´±L¥F#‹{– [‡††àƒ«ÕjÐ7 …‚d¹\fN ºß9Oç¯n4媠ñz½ -9¸ %‡.aaaÍ0ó+D#cccÜÜg¨ ëõºR©t»ÝÄŸ}öÙØØX»Ýž˜˜˜››C0NšÒññ±\._XXh6›^¯ÛÑÒÒsm¯×;;;Ëèf!߯ââ¢Z­6wîÜAŠ–U߀ÏçcJ¾²²ÂÜÉét‚6œ™™™œœDÏC‚âK8ø‰$ B”J¥^¯wnnkQÌ,dc2·eP{~~~xxÈà£C¿ßÿãÿx{{ër¹ð[">9??Ïd2ÀRz½^ ಧvc’+„€NNù ßÊl6c1%òÙ8rNCŽÎt:ͳÁbbbbee¥ßï󨳿A–žN§y®Ð†óã#%ÂíÌzC­V3-Õø&ߌà”Jå ,£†|èÕjubb‚R•J5??!R­VOOO†ÄoÌÓ>ˆvâeÁƒH†:"‹Åòý÷ßbÔŠÅ"`Ÿ““p¾(Í„N§é!=B¡899Q*•µZmee…Á#®X½^ÿþ}!íN§Cñ ™«Ð§b—ÁÎÁ¥ËåjµZÜ߉„×R7ëhTÄ-0ÅBŒ •ûq¸›ÍfÖb˜æ™AcUÀÍQáÅK¡P0™L h;;#~ A2™dÇh±XŠÅ"ëS•J…6c×€¦T«Õàpi4šn·; †3]!*ŽËåR©TLWJ µÆDùàà?`Îb±ˆ pxxøàà€5{³ÙÜÚÚbS Ð&ÊÄ×õzj<;mTIl°óùæMü%¬Ž”ž"ú\]a:Ž¡¡!RtÔjõÞÞÞ›7o …ñ2ÜÜÜ|òÉ'˜Z€%d2è.?üð§J¥ …Bd-Äb±×¯_¿xñ"“ÉlnnbY#"x@Á7ƒøŠßÒ ¶ú¤Ñ–J%ˆÖpëpጎŽÒL`Åxï_Äá¾¾¾Ž$…Ãqîg Àý~¿Óé¤ÓiŠ …B±µµU,Y°0fR¯×ûÛß6 Ü¤à™šÍ&€FžZ¬OØV‘0F"&Ñh4ŸÏót"½ït:Ož¬Ùl6 Ò x½^¥RI›É; Øçó)•JÖY··· zp÷ð=°üAz?€á Ýa–âñx(¯Ð~!$'Úçóa×*•JJ¥r{{[A¥ÆHŠÙ.è4Ír¹üððP&“¡ „ jz ¼lâ{¸Ÿ†‡‡Y~¢àÆYC êñL&³½½mµZ™Sƒ>fùÁéÈ G‰Ñhd;7<<‹ÅÐA*Š·oß’½pppÀl„™;±ÓÓÓý~¿V«Ý»wùÍÊÊÊÚÚÚÉÉÉìì¬ËåR(@€¶ÃëõZ­Ö©©)ºƲÂ1¸˜››£&˜››#4‘í%ŒCøECCC³³³Øý‡‡‡///ÕjµJ¥âa>@EIÅC³(‘H¢Ñ(|ö–H5к3c„`%—Ë xA™ÎØš,V¾“t:=xÚa* ÎAµZÍ ‹ €! +!²½÷v˜þÕ×q¸c ¦«U©T+++¨eèŒôz=Ÿ7;%Ú1Ú:6ctR——––à¥ø|>GR©”!ÌìììÊÊ c„‘‘6ø‡cdd$Ü¿Ÿ õèèèúúºßïýâ‹/²ÙìÜÜÜÚÚì0“ÉtïÞ=27=zÄsép8s3bˆêƒ`ü&v»ý¯`ñì@ Þ‹¹_*•òôët:¬ƒPº8ëyµ(¯G"´Ùl<¦étÚáp4 Zr•J533ã÷ûÇÆÆÉƒÁ_† ìBB¦‡åryiiÉívô ˆæA]‡PÄï÷ŒŒ‹EµZíóù0(NOOû|¾T*¥Õj¯9εµ5ö$øÀ#\ZZ þlyyyç022ª™áoCv!Äòò²N§#›B¡Ñh|>³òikµÚÌÌ „[ßpɸeuÆö¢ÝnsJ2}¦Ìä_!wÁT _û—dgš*¶Ü.—kzz/0‰f³9;;ËnvnnYžÑh ý~O&“q»Ýä¼Ó飱 ƒˆa<êÛjµêr¹´Zm¯×^T­VGFF¨Ðqœq'§¢Z­²7BÐ¥™¿‚»?—Ãá€y+„X]]ÕétZ­Öb±€: `Ò˜ˆþizzš(j§ÓÙï÷5ÍÔÔº»Ý„Àãñ,,,ÐÊÜ»w¯T*ŽŽ>zôÜÊÊÊÑÑ#YLgxM¹¢Ñ(U/—Á`À ªD¯×sŸžž2À©ÕjR©”!þÕÕÕòò2ÖhN Â,¹!ŒF#ù®ƒ&³Ñhd‚Gy7˜eÁÅt¹\sss@XÙÌ÷û}nk^v&É …‚2 <Ñ{ÿú wZ›Õ”J%Ñ\„?`Ï«V«Äbôz=t2ù|~oo櫘îëÎÎå!•pp^<”äŸáŽéõz$»sÁˆ M¦¢¡±h·ÛÈ<~`T38ì(ꇆ†p3jÐh4£££¤Á1§Sg{¥0RúÁH {w:ž˜˜€kÊă̦««+ÀÈÃw§ÓiÄ-Lÿïïï'“ÉíímR€S©!´ø¡Çãñt:=99Y«ÕhhÇÖÖÖíí-†#ô× 6a&ƒ»"œ¿ ¾;â"~'{{{šÜ½^ïÉ“'Éd’÷m0@À䧉«£VµZe1Èo›†Ü]ÖŒÈa³Ù¬D"á#¦ƒÇƒú¹Õj ƒÍÍM®DT“ÐqõûýƒƒôoDØ­ãñ8Ï<Ó~Æã1›®mÛ ƒk6›TíHr»Ý©Tê?[Lÿk±¸ÿøñcee5óVNî„{0…ôí^¯wzzJpÝh4bJ™‚µZ-™L¾|ùrii‰†>â*4|È`Ûr¹LS‡iMX¨¨XR7¦·ßjµØà馵ÛmîÙ˜9®×bq'ÞÃwsªoTZ˜B‰Dêõ:‘l¹\Ž>6Âèq=yò¤Ñhär¹W¯^ñ~öû}bBK¥Òîî.%²ÚÉ&+‹333$ú‹Å·oߢp¹\TQ...’Éd¯×£^ÿë×/LŒ¬d/Ó Òé´1¦^¯{<²Šˆuµ, Aj¤ÍÙl6‰D"fS0é‘È-z}™LÉ0I‡Ül(4…B!Žü¼ .—‹ó±\ÈѨàóÝŒ1¨@,#ü€‚&ÖPú~¼ÀøÐÀÀu9yj±âÑí÷û,|íjµêñxB¡ÐåååÉÉ àããcÞpî^* ƒh4ŠìÕüïtÉŸJ1jBh¢ŒÇc,WWW@`Ÿ£¢×륥ÁÜœ›7oRܯT*Ôô0ͲæóùÁ`@Ž£1wâSŒ1œàîß¿OWƒA÷îݳ, E£|æææòù¼Ïçc 5ư!±õz=“19‹;†MÈsûöíL&C9Ó鯯A@ôôpÀM+é|aj;¸mñÄa—¥]‰ßnEü>µZKF±X$:‚THžT@¤mW*:=øÑÆãq·Û}ÿþ=Ä…åryii‰Ã>|³Ùüòå 9e<ÞÜ'8þ#æ¿ß½{—{^¡Pxðà¿çúú:‰:XŠšÍæöööþþ>[.4Ãá‹,‘úH*&“ –cªÈ7Œ1èµÐ_b®d9B¥M€'›••î"¤KÎ^›ILB!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„B!„øø`±ÏñìbIEND®B`‚nip2-8.7.0/share/nip2/data/examples/1_point_mosaic/0000755000175000017500000000000013275300353017005 500000000000000nip2-8.7.0/share/nip2/data/examples/1_point_mosaic/cd1.1.jpg0000644000175000017500000005147113224651032020242 00000000000000ÿØÿàJFIFÿÛC    $.' ",#(7),01444'9=82<.342ÿÀ uÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÚ?&åÔÆ­¡y4âç=?Cµ„n¸©Ó M$¸ =ª¹Ó&ݦ~UoNÒ‚œÉ[©å¢|¸k>î]òcµ0²€=jx]XòkN@<£LqTcwPGnµBðãq'Ø×Ì·=ë.êÑÁÜ ñUã½x‰I>•UU®o‹W9®€9H€ÏN1QXÎ*´®UH-Î+òíâ‰Îþ¦¹†•žè’s]š$]N«‘شēҮæãöíZÀBñŠk’íϾkZÆc2…'‘ZÛrçOXÎ ô§”ÂÌŠT=ºqR«<Ú”}G&¤ mÇ~•)ÝŒã¾*‡y&23íQ3Iù—ò¦EpC`ƒW|á·“Hî¤g¡ÓU•¸ÈÖŸ‘´’j$#ãPÍ'z¢ó¸õ§ã íL–\OZ ŽG$“HmF{Ô gšp…HéX3ðAü)Ѿé'§‘þRsTÝZc€8* r)Ñ6ì“R3¸Ë|în8©N À¨ä^æ©0f,Ý€õ¦Ù>A×¥i f4¢>1Rã ;UYFeÅL?v3Ú©\ÎY¾^im,e¸‘KÞ†í£é“ëŠqp9¨ZsëUä9^O4ø'š¿[SqÎ*ÑÜñd0éTÙ¼¡ëYò ç­hYG˜ECr88Ö°õˆÉzTZ2îWõ­F<ö¤ÜHâ²ïŸæc»Ÿ­rz̬‘á'ëY6Aš@ÎMvšRcXÇNõÓ¤1ÛÀ ëïI$„€y§¬G&³ïÉÕªö™(àt®Ž2 g•J<Ó˜géÚ¤vç)¡N@*L÷üÅHߨš…€-Ç<БryçëI"®;`ô¦¤Q‘ójä^V ’9éUÍÖx`EO½jO8UñP‘×éQ¢=Ìž‹ZZGüßz³0:Sgˆîé×¢,€8惜䚣<8oÒ•cùF+–¼ cŠe¯^jÓ`ŠP0¸ÇåUfmÒ«‘DcÜSX:SC€?\Sá;‰õ¦H®ìUzT3ÄRÁê=j†ž¥—=kqce^NqÍF\ä:úTÌ}jŒŽ©&I¤K‚çzÛOƒIùVˆÛàqž*»Ü'~•3zÒ °èx¦H02zõ©í›€»zñ[1ãðô¦ÆÊ¨A¬ù¦ !^¢²/—7*â·lTy c·Z¥¨Ã– =k/P„›VñUôXŽÌc©ý+q P¸Ï>µ—zâ8È…r÷·˜r Zü 8ߎ)–È7¢€yõ®ãLE´¶™ºVƒÍ#(qLÎÉAZÒW܃žÕ…ªÎpGJ¿¡7šù=««M¾X#­H‡9çœu©9úTùÂŒŸÂœÞ™¤œtïõ¥‘ð€pJ¯#bÌp?B—A¸Cš›+ê(‰òrGZIãW#p^xS?wô5Y×ÉÁ­Wq$@"òG¥T¶ˆÈÅØV¤%T=ªò ÑïRª…Æ)d®xüêJö棕‰^8ª„“’zÒØë\”ÄÉ%6×FóWvŽ´öR£©ª3ÂÊû©`»ÀÚÆ¡»¹ÁÚ§&«–˜ÆMYÓ§-Ã7JÕr¡:UKµßoòž£š©elb\äç¥hªä¶sÍEæ*òp{ cÜ3œ(ëÞ¢ŽÙå˜9ϽoZZÇ`qõ¢W '¹vÁ5ˆnjÒ[\‘Ö¤6ËdœdVkàu5vÒ& 1^GJÔsûŽ{{VUÅ˪:Ôvª_æ~µ«8Šá[“Òµí$e\zS'Ä€ŸJκ„ŽNitÅX󯧹¹©bk–¾»yä8û£¦aÉO9ÊŸ­,ðùpì=Ç¥G¦Aö‹Õ;A®ËÉ~ECý  ²¯nI ³œžs[1ÄMršœ»îØ}«oBuŠ0OzèÒUuбs‚{ÕäÁJ çúõ¤c·¯8þtÅ|·®i²–2(Í5Ð8 ô¦C I–Ç=Æhf –%ÂóŠSÌŠ¿•Ap,qŠ¥!>CçµgEûÙ€n{~± ª¯Ê8*'ý*â`×(ä™´8ÂZˆƒÕIó›ò¯5™$ŽCÏe.ÔÚÇœTqåëS¶úÓ4²O5~ÞÙPî'9÷«èIô©YqŠÉ'ž´Ñ-Àü©· ¨˜+Á¨íÓæ ׉tíO‘‚p1Ï4ˆÌÎAM*’Ƴٌ“ñÚ­ÛGûÑž•¡+ ^µI‹ù¥˜}9¥@ < ‘ríR£lî:ÔWSàš«mK1cÒ´&_º cÒ¡ÂgÒ±¯̼ÛUî” ñžµÏϾÖe`HRx5=åÀ’ÙXd“WôX±JšÐ¹d qøÖ;®ç;@æª\®AUÕ‘tDFO\×C ÚUÇR:ÓZåyçQ¯e‹+,MVxÙ”ÉrÄžÀÕÍ-·’ŽkbÖä‰v+I~é#§zÊÕ$#îhÑ›/Šë!lÿ]L9<jL€q×½=d8Å46ãÈ¥E'õR[p# ÚšÖ¡mO·=j²º„Ø£“MòÙ]N\ÖºO „(]£Í7t“2¯8ô­{ vVõ©®È,çÞ¹YæûMË6xϽ§b8rzâ–]Ear3“íQZêå®c€:Z܆ú91†Í]G9«‘)WvZP­žNE9È Û#šŠ6œšRFá€0iÌ@³õªîí• 8Ï'5.Æ#½K d ó銔ù„ç#ëOÉÂÒŒ§^õÛ}»²~µŸhÅî=«z(ºöæ´„1´!1Î=)c³U9¥_Œ'§5­^.òx¬+h‹H ïÖµ·ÊàGÀ©žv’ääÔÑi+‚àüÞµ©%™g­7PóToš¶ãsý*t å³ùTlÅzÅ0»Iàb’ݸ9æ¬ó)ç§œæ‘TdzTŠW ¡€ôúT,Á‰ÇJTàTè N=)ã;¿Zy|dqÍC$€0¨^Ý$# GŽú¬{Î1ùV5ÅÒ†ùy5]•¦#=*ÌFœf­Íw …ÆqYR^¼­žj&ŠiF"šš\Îy¯Ã¡’7qšÐM$A‘ìje†(Ø(P=ê}¤dç§½Wi6Þy¤ †ÉþtÕFwõ毢,i*±¸ýã'cRC÷ˆƒS/É6=ELHT )ÑàœàZ™Ûl$ Ÿ¸-6Á÷jͲíe-õ«oŒôYX£Óš­vûcfoÃÚ¨ ɉ€ïY)!‚ì¿n¦·aºI£0§HAÇ5Ÿu_Š–4ñŽ´K{Ÿ•A4Ô†IÝYóVX`ÇøÖ>£ ä©äÖ¤ŒpI&¥¶…¡œž•³»OLÕÈ4æÔ"N3“ҫɬ©"58cY¯“Ý’}ëNÒÄZq³LÖ46Ãx27½I4Ñ¢”}ª–ggʃÍX‹NžVËn­;M) .~µ màŒ€ŠŒ¢®vÒ…lGÏ´¦aŽj´²å·d >ÐOOçC);HúT.­ž¿Zµ•ÛíV]φ³3ܰµ£xúS&}³)=*v`ÇÚ¦ˆ"‚Aý)’Ì'ÛÖ³!Ì”“Ó5¢"bÊAãÒ•Ä€`jdÀ äX:¬ãýZ7&ˆPˆTJ‚Ku”Š¡™m$àœ*ÚjE†Ö$äÔÓN¦†ýj¼(÷2q½«ZÞÄ29«r"Ã1ÍRnHcÒ³¯AcÇLVg‘†9楔nPÀô«m1œŸš³ÍÈŽf$ô=)Úy—š|:t’K¹²+PÇåáG,GZÕ±M¥IéW&ºòNÌà5Gy|‘ÛˆÔä‘I`ÄÒ¾µbb@+2íÔ7WOlKÄcJ&h‚x­ +ÀãÞ¬´Ë´î?JáOqS~`æšîsÛò"¢÷Æ}ªTêp=y©³Ç4Ö‘qPµüHüŸÊ§KÄ(6‘P=Þ9«5öî5‹y;\Ým\â®EÈð8508ÍbprÆž–À°â®¥ª©-X]ª¸¢7éÞ‚|ÆÉúÔ°À¦ÌŠÁeÝÉò`Aªá÷ŸäÕèâ(€¶iebP9¦¤LXÐÔòŒfªÍpÅ€'Ú¬éÑn%Û¿JÑe(¼UG‘wÚHÙY»ñØTùTRCUf“r*Žic]€ ¿‚ª{ [–Ûƒýk3VºTˆô÷®fÜ´÷EÜðzØÞqÐ RD^(¹³ œŠÆ¹²! !ü*¾é"ˆ©Î+{HìÁ«Qež˜æªÜI¼å@ämʟÛu(Çri xNF¨¤·läg”ãjárv¬im®ìã5Òi:|q –Nµ¢BS· ª¨Ê÷'½hË*ÛA»¿aX’K5ìÙà•hÅäò“:šµ§Ý‰Áõbå™a'Ú¸·•ãóüUÖYÜ· Ä óT.oi¶ÅÏ5¥c#¢çœúÕ‡¹”’â¨Ëw$O•$w©íõÌEkA0—$‘ƒéVª“ƒÍJ‹òïL¹¸H!Üzö¬ä¼3¶µ(ŽÀ7'­T¸Wˆ³ÄÇ•I/˜œ9ÁÍ-ÄÄ#6yÅ3LåÞFkFyV0Xž¾•œd™ŽàN K·85jÞ% £Ö¯¼QŽz{Uicr*¸ )ÜGãQ5üQXdUw×Õ T_W’fÇ#5$,Òõ­:’?J¹>cœ}* JSàæ›+•WhwÛÁ­x”DˆÅ,Ï‚?þº£2áò*œåGÒŸ,™O§Á ¹Å!9cÍYŒ¼~”Û»‡òùãú×-©NÒÈ“Î*­Ü‰ck¼1gKœËhÌNH«úkù ŒcšÒ–/—ޱ兼ÒCT58²ŠW'qZZ'6œŽœUÉeá{rjƒMæÈW’EL!ù7¬‰Ý~ÒSõ~ÝWÊ8£f\qÀ«ñ äŽÕªÁP2MKmq#Dý*öÍ–Í#uµf òŸN•Rñ·°ªKöݪìÓLÍe±i.zxµÁ#ëSO„‹jõ5²:Êüêì­ûÞµC%‰íŽ´ *IŠ¡ª]yŸ.ì×1}v-£c»¶+ƒ¼®.Y¹9p–ã'¥Yb²rM5ÝiÀ¢Àu¬­CPTâ¹[éÚêàwñZvF'MÜæº=!'§ò©n_ìÑ€¸bÕ›,mµ™›†é‘YÎDqî²AÍY±ºûCí'‘WÈýçÿ^°uXÌWAóúÕë;üYšÐÒTò“Éõ5§&mí<ÃËœÖ\êó(f9ÏZž±•qÁ¬Æcm{¤ç½lÁ†Gõ4¸lô¨#S3n=­ZÄC<»¢lUͼž”Ù§ÙÞæ°®¤ä¶ãíšâuûÒòùjk.ÖÇs î¼4„¿ńŠSqå°þñ§4¯*O­E» SB!ÛÓ5µo²çÔ ÷ù¬ýäß ö÷«“j‚ PŽGV`•¥¹,s“]$vûì:rEW†<|§üU¸ôˆŒcÖ·ôñº¾”ËË\ éŒÖL²º>ãÔu§°WÒ²ï›íLR Iõ©,t&+MÓÐÕíV8ã¶€qÇi0,61Å]¼,–íÏjÊÓîT“’Cgš»xÑÍ V`GÖ¹Ù– ±.¨§é±³]!ÆEuñH©“Àã­rúìŠùòOcQÃfÄ2}áÁÍkÛdB3¥]¿µy­¡åG"©ÙÏå&×á«~|·8DRy¦\é˜`@úÖ¼-+Œ*Ž£>Õ rMr‡Ì¸ž¦®‹DDI§‹¢?•vAUŸ§§¹Àæ“ËÁâŸ;*§Nj‹ŒÒ¦…@:™ ‚(o^üÓfpŠH8ÅS³äö5 ïëÇjšÜáHnþô¬$ž1M„|äõv,*©Ç¿51 Œ“TÙÂÈø4È£ÞÛÛ½j¦<¬vÆ)?åŸAëÐUöÚ wŒï–ã¥ej72GGÛ=Íršî cF yÅqŒÏ#—l‘JyÚ2EG(ÃWa๒;¥¾ðÇ5ßÂ@™OjÒ’4qŒdb²îô¸Ø6уŒ×?sc$™FqTQš[¸÷gÅv¶`En§ÉäŸJι£~ç•°\gÚ¯ÙÝÏz¸û²1RÇÁÁëõ«P7ÍÇjÑ ˜ˆ¬Â;ÐFyæ¶£l ÜN})FÓœR8 ÀéY··ˆ‰´}âjœ0˜ÈÕRH÷y€Œâ¥Ò'UcãÒµ¥\ÂÙÏ’öë,dÇÒ’V"ýjý­¼Q{Óo'XÓ¯áXW¸FÇ~)šM»]ïÞ™Uç¥k[Ÿ4ddTJ¶7ÛùXñ]µÊlŽjv¸B SådñŽj9¯Ñ±·éYW÷ÌÑáMs—34Ïåõ5fäŽ!×u­ØÃ¸gŽ~´ä¹‘P)ÏÒ@FÎ>µ3˱zóT‹É5Vîá-×'ŠÅ»Ö•D4¶å¦”3sšé­c ö˦ëUQÎÒ äQŒ÷ÇaPL3Àªë¹'Û­hiñ¼¿1n:ÕÉ~@{ŸJŽÎó§“±Ž HcJXœfŸå·™Š’HÀ€çšÍ’4Èâ±'”™wgŠÏ¿¾HblŸ¥pzñº˜ŽzóTX¥gwCQÈIcÖ¶|9/—~œñšô»iÌ’žkqrPsÚ™.v’¿…gÈ—g5ÎÞ[‹[õ`8'¥t1Mû¥Ï¥4°ÏJ†gÌl@çé\ÿ™‰Ê“Ö´ìOÍÉã5¥ÎA½ªU8qÚœŒDØìkRàdçÚ£¼ˆÞ½zƒRZK¾!“ÈëR Fp=i'“b' Íaí77>Ù­¿)b·8ì+̲ÈÎj‘ín25²— qÇÞj¼ãj§«5ÓF܃ëM}F@;Ö}ÅÑ(YÚ²Ky0USŽÂºÝÐÛZ¾áŒJ‚9öݺ‘õ©/l~Ù–!’=+=.î-²Ž ÇJ¶š‹8 ÍL²Èý®*7™z©qq”÷«V˜nÈÀc­hßZ¬1¨ƒWí­ÐÚ Ã¶sXs…IÝGc[e#'Ži&m$¶õ¬k]!,ªrkòò[£–'”[Û‡dàç=ë¡Óíýì0=+mNÑ· ªóŒüݪ’0Ž3R Þþ”N˜|çŒVkåØ(<ÖöŽÜÝifà5Ml˜ŒTŸ|<šXdò¨#šEº"CŸNôË›œÅƒÅdÊwg#ñ¬ëâ#N:×®ÞñµOJç`ùçË3Þ¦¼ÀíÿתŠÄg­#g‚sWôf"úH©ƒõ©¸¤qZÐr Ô²¨höšÌ·.áѲ^‰TúU=NL.ÐzúS,!ÚÈÁ«—’lµl¥TÒ—qbjÅõŠÈ›”|جT‘ì¤ä}jò\Á6EGBHâ¡$¡Pï¹ORÖ5ÈÇjè#bÆN*´„³â¬EòB}…E‡$ò)%„¬€ ­"˜ä­p_ËÇ95ÂɘÝ>µËëà;xÂj&âáŽM6ÑWpÜzš›TxÁDNÚÏAŸZ!2€9­=6ÐG*±?05ÛÝcõÇéZ6:„sÿ׫ë u$52"L‡š[Äj«¿'5Ó®N{V=ôæ|ª‚J¥i—9f=kn28#5p6HïV!ûÀWH^Ÿ^µ—äjÉoœúŠÌ¸È¸ ؚЀar&³oØ´êJ·nêÊ …j¾£8òÄk×½O¥!X÷õ¤A$ gúU BÅeRBŒõ¬C¤ÎNPúÔfèÎЭ¡¦ÇivòdçÜ‘[vZFHiMl¬1YÚÁpйëÀÍ:ÍJa’j ôkk¥eãß5­¢XTñÍNÐG"ã5›6ŽHãµOo¢D£'¨«ÑÛ¤KÀt¦Ï4p&âkþY/xPqØV]°6w_¼w«ò^rF0khd¸bI RÅkµ4ÙX¡ =*ÝŒ“¶æ¹?”UµR3íúÔFBXvïH&¥›HíY,X‘šIeQ«:J(ÞüVŸðž*œœ>3ךI%;BüUûhöÄÀõ§"–vr:Ui]Ws`p1YM™äÜzg=j VémíJ’1ŒkËu›Ýò¸BqšÅêsRC/”áºóL¸›Í˜¿­"ÓšÔÓ¢,ナé#²X¢Wa†<ÖýŽ$ÓÊõÇjq´%2¼¸¨D³[1É>àÔöÚš™9$z»;ù‘þF[…ŠsÏNµžžlòdçžÕylB®H>ÕBB±^„ÇZ¸Ä+t«*rŽ*ÌC‘ßéWrIÁ u»Ÿ¥iªîàzUyàÜ8Žim¤%px#¨¦M›.qLÚÞ/‘?Y(’Os†ä÷í]=¬>TCü*Ð)9¨.òÎ)–éˆ#>”¯‚ /CG”ùWô«P¦Þ£ñ§Ê3ÜV6¦¬îõõ«ºx8¬½mˆ˜ ÜJ·¥a RÇ=±Z§ÐuíJþu&pA'òª·—k 6Ì=+Ú[É;‘íZ––"$‡5RÿMYäà~5èï´eN~•Œä.T)PfšuµžPÍÐWAI\ hå¿Zp`¤÷íL ¹²~´péK1Ýd;lTr:¥jéé² ­_'÷x¬É܉Fz})`;äÉè+M$zNCˆX·ÔûÖåÎ\ƽGŸ&Ù¤Î3Ò¸ŸêÎêSvsï\4²|šó§¯ÌpsŠFŒÇò©eqÎ+ Ð¡ó$ÄâºÛˆ·Â¥GAOÒ–7FÏ'Òµ|²ÈÎGzl° ‡RkòÈÅ!t$ŒÔð^(£@ªqï¼¹1»šè-¬Ö9õ§]ü‹Åa\¨7ÈÆ§•†áJ³}Ðjì, â´”  Tl»%ϾkN#òƒœçÚž%‰5#˜¤;9Í]¶ùÐO4±ŒDvñ£g5d.FE2O‘O=j rPåSÆŒtÈæ’NHþ•*‚?‘AÏÿZœFH¬ýNðäg+PYÝ$vÄ1Á¬‹˜ä¹¸f H'Ö·tÛVH7­E‡'¯½9€^IœÖ}íòÇòÇŒÖ|PÉw&æ'šÖ¶³XÆ«jŸ7jj FMYù¹^q Ü6ŒóÅ^°µc 5§mB=jì‹òsUCž‚޼wéšp`x­°QÊù‹ðô¬™çïIó%úVÝ« í«ì©ÓŸÂ²®Ø™*4¹òøÁç“[P²µ¸#­Eqt"‰ÁÆM`Œ¼Ýy5¯qäZ”æ½ÓK9¸¬®hëOE9ÎiÅp:œTñÆòF9Íuš £$c#§Zꣀóíš!B˜cÆx­h1qøÓJðESk`ê䎵Ìê=¼ÇnqW|=åw?­tî (éTîTîùŽk&èqžØ¨Œ…€ìE^€îÁö­qùÖŒiލœîô«p>P}*MįJ‚{pP·|f§±â®à3gñ ªäg8§‡Çª a‚yþT§…ð©p gœ{S #¨ÍN@À§`àriá{óŽœÓ%]JžI‡qa²B šÆÔ’I­´@±ÓRoX×{p= f^_™b}ê(,šfÜãƒZÑ[ˆÔm*¦ñ§ô(ù³S¤æ¸Ë[—sŠÓH•#Àšl™qØU‰ÛäÀú ª 8ɤ —'°ïJ º©Ë0wd•4“ˈǰ¬v³“ŠÒÒ ,å˜té[ E$É¢àá2qY(L“6Gâ=¾T9ëWìN-†îÝë3P—ͶôCèzæ¹ßâ6PÞÜWžM)’BǽGGçWm!IºœSîí Êѧ%â*õÍz6Ÿ…#VÊGûƒŠ©x 0næ´tÉ|ËPjgdR}qU&lDõïXZ¤^d{‡&› ¡Ôõ­âçpãÖ¨\9/œäz͸ÕS9$ûÖ­¨F+BwqZ«ŽôéNTSí_›³Þ¯ÊñƒÚ³(K}+:2Ñ^çiéZqÍó`žiÌýéˆä¹ÀëOnTf‘‰l`sR¦vsŠ ËH#ëV#û¼b‘žGJ•\´MܬÇåÀ¦Rz{Q±qüª‹Ô†3œn¬v¹–å¶Œí=*þŸ¦ÁäïZª‹T 0ÙÇ­9 2zq@8…r:àуéYÞVØøÔ ¤*FG&Y°Çõ¤ÀÈ4íœf³µ ¡{Täž‚©Û3“¹=i×LqéT78÷5ÐÚF`„ÔŠ¼p°r †iq8櫈‚ãŽ~´J;ÔTfA¡êŒ ÉcÇ^•±r-íIŒ òÝjñ¥ÜÕ‹sIϽ(üjÔŽ£¥[3³BCŽYÐb&óÍÛÆx5è–‰¸/ŠÔÀXp*–ªQìöƒóÒ¢Ðî@…£'ž•jâéU¯z§-Àa´‹Ë3} 2ÂÙ­®äÜ8=*ô’ìÏ^j›êÜã½bê6ðŠyÎ*4p $Öµ‘À­8ν ÝÏAS8$`T@´r‚sZÑ¥<’=«>è…Àäw§ÛK¼® ]žSNX‚çò¦·ñ¡z`œTà¨Q“FA9 úŠ“qÛ¦i»ÎrO½: 1#éR4ª½G½;xûÄÕ+ÍAAÏÒ²U%º|œ‘𨶳HS8éÜÕè>ÀBóÍé0V£Vê1šdZ—‘ÀŠÌ“…Â犭Ž)¾`Á¨Øn žÔ€ügË»YÍbûD¥Ø“RFv?N6w̼Ò[GæÝ tÍn¼NàôÙˆ‡'5MžL·nzÔï&)’JBò;ÕyŽÿþµRu>•,:~ØC·Þ<Ó®°¶øÆ?•Íó~*þžø|qþ³Ìvþ~š­ôÚx¦\ ÃŒ`T6òì|gƒZÈëšh“'Óª…ê”0½e7˜³WIãê)e@ÆjhÔ„ýjPsÓ”¬ø9œ¤”ÎyéLPO=½j±•bs»ÕI¦’vÚ£tÒ¦‚Óä ý:Ô‚tŽMˆ¹íWc›œ‘S‰\ÏLÓZn;RyØ9Í,sbzcÒžCdœT±e”÷ÇÞ ¼Òæ²ÁFvæŸ* ¸äô§ÚÛ4’n?v¶|¿.è+"c¶SÞ’2΃ß5Ñùb8@vªÏ!É>õd)=Mg]ÙÍQ‡æ“{t¡kÌ\ŠÏÖïÖwPØÈ¯)Öï ÓyaŽZÇÇÖŒgÖj’1Á5#F+±ð}²4Áº×g¨„R¥8Î1UÈ={Ô—÷Öјúq\=¦oõPOMÝk½x¼›Ž1X K1lžµ¡:®ãÐñÍ>(DŽw ÷ëUoma à|þµÎÜnŠ’z×W F°aÜUû†ù°séÚ±¯%1#9®ry™ŒÍ ÷‡^¹ÍlY_¼$Šém/c™8íïWc}ÿΧU¯Z¯:ðj‚±Š|ëRЂ1ý)e“å$V,»„Ň­jZÞ¬‘Çæô©·0~*S!#qéR$„õçñ¤kÈáæ©M|óü©)m¬Ì‡sŸÎµ£…cPv§ˆvå‰ÏãFŒãÞ•”Œuö¦ä“Ž)àäǧz!ÛÛ8©Š™â˜­“ƒÇ¥5²XûT°Œu5 ¹Š NFEWmI7Š¢'XÛõ¦Üߤi{V ×få™GN™¥Š5Óœ f²Ö½´AcÎMO1Ù1ëZÁÆù1Ï&¯ØÆ¦ä{u­{Œ ÎóOƒÓ5¨ò§’ëÖ²¯eR…T`ŸJ©ü c¿5}ÜCnIãŒ×®Þ< ⸠œ¼ŒÇ<ša¤ N9«PFY±‚jIW*⻯ Å”jÜàúÖÅÀ3K¿7N*hmÚ6 ËÅax²÷d$ T¼'k™K°9Îy®¯T¹òáòBä‘Ç‚‡iPÜdñ]²$–ê§Z0¼ƒŠ¨ñ`ÚçµHñ8!N3Öº­i±Bp:RÞ>ÒJÆœ†F$dgšÁº &éÖ¬[í!K Õk– Tᱚ®¯5”£9ö÷®—Mº[ˆÁ{ŠÔˆ’XÔÉþá+Ö²Ýåˆæ­ÚËòí=zb¦å3“Y×dG‚3ÍSŠàÇ(98'5º’@ÙíëK4é#'Ò©é¤ùS"¤†ÚYÌ ¦µm¬â2}êØkµ*°ÇÒ‘ÉÉãÓ5œð3Á¡ƒÔ3:ŠdÉmÇõ§FêÇcëJoã9@yïPµÊ#dœâ {âw^´‹-ԘاÅg+È<Æ<ÕåÓãÇQYWl±dŒgÖ°.¥y Ðõ¤µ€íÇZ›iF$µvÆØãs~kZ$oÒ™|¬cZÎŽ¯Œ}ÑSØçÍ-ÏZÔºu:Öj<Ÿ\v©¥b©ÜJÍ•‹IÈëV¡@‘î8—¬j8ö)+ƒÖ'iUÞ¹¢œ’GJˆÍ3?Z’ Y…mÛ[íŒQQXÚ5æ¨ Œä×¢[iãÊ)ÂŒVƒEÛ®Ìä{S.oÂBÊÃ:ןëßh¼#¨Î9®›Ãqm·F3ëZš†Öu^ éYšì]:­héw>lsÐsWÕp 'éU&OJ¥uh³« £¥+Ej¨ÜQ_9-ŒÖm¯’kŸºeÞ=©ÐΘ>Ýk£³¸•~aùÔ·©°˜n‘¦ê©itP¸ÇqžµÖÛê12î9©þÔŒ Þ=…Cq4e8aY¦ö8$ÉaŽh“WÝÂMs,ÈÏ@ÌÂB½«ñÞȰíSV-nÆ$ê}k^ÖJîæ´ ‰W8«‰µG?•!+¼RíÏB¤.rA TI sQHû‰*j7 ·àôªÒÈ#S™?Z­ó¾BO[iOSŒõ«QZ…a»šº¶ÉÎNªª z‘q»Tû3ßô®.ærçºÕ'ÆÊžÙv¡çœT±aåó­x—j½jÔ#'št¨0yüjƒ&Äf=MGgÆjVf’@™ÈëJT,›E:|‡Z¢ 4¹+Ïn)·SlF=â¹Zëxy q\l×nåŽr*‰ù5ëA«Úu¹šuàíêkfâEJö§ákPfiûÝ ®ÚЮ?½ÅYa·N:sXZñòmœŽÃ5ææ`.A~rÕÙXk¶¶öjP9¬û¿)¹FGAO‹Xû``ËÉsFºÛ9N@Ï­u0óϵU¸|1ç­59]Àc=jkvùâ«\I$óYzŒ¡`‘Ҹ»áq’ÊN3ž;VašqÀw«öw7êAS!¥M-Þ¤ÎÛƒÿ*Ï)w¼¶9«\êb1´ËWa¾ÕpF$ņª#˳jË—R¾vÁ‘éðê7‘rKzÖ¶ñuÄQíe-Š«'ˆäi‹í<ÕˆüM"üÞY©á*r¸á…hÙøÕ¢@È÷=+N/<в¾;CŽ?Z±Œáväãñ­(üWjàfEIÿ ´¹ù‡ôá¬Û¸ $P~µ$z„$ÿ¬Ϋ‘OµEo3îfãÓ5£n2*ÐQŒö§…ËjfäßùT™Ê9Ž{t§ù†¼ùK;üÙÿsœ*äÛ‘š¹mÆÝ޽ëA‹»˜NGlRéþk‡%ܨªøÐ-É(’;Õ9´V*½{T@½ÚJäÕi´Ëûs‘»z®n/£—}hâàŽõ/öýÞß•˜U›=~â Ä“[¶¾.pFáÀ­X|aåmYxšÖärã=9­h5(]‡ïëš»çÆËÊ· Sç,’*Eײ¤¸0íɵ‰ïQÊq×®x­=wNµ®˜Ý€x•b5ÏÒ¥3ÏZâ Uº;—ïQ“¶ ¼‚jhØÆƒÐõ ³I…¯½8Áå…'šÎ¾¸òQ‰#=k…Öµ5ÃüøJãFšl³“Z ´+°r5°¯’3ÁªEpiLdc­]²c·nâö­»SMÙ8õ®þå'N£Ùúœg±íK"„O,ŽüÖÁ‡í »&®ƒ JÆíM¼–ضPŒb²Úþ(þUÈ­$s¯ ½ ©f]ä`Sdµ*»—©ªéqõ¹§¼snó”Žâ¥¸8|F¤ñÀ© 2ýãü©\LO10äó6ógéO3˜¶`£¨ªSËæ>ÇŠ’—zÄÈ¥¼„ÉÉrjDŒÍbm×’OZ[k†«3‰h„mãŸz£ºdl¨95ie“#zgŒU¨®$l>´û¥ŒÅµÔÇZÏv¢6‘“'éTf²‚ã•AÏŠbxrܶJÖ”~µ†p9éš©?…bW,½+6O LÈ犯ý“jù\ŸJ™eÕ¡8ù¸«6úþ§ a·Ô¶ñܳv­‹Û\áYñëZ ®Ù²ƒç'5˜ÌY²y¢X÷àsZö1¬Vû±Î*Ì$‘’9&´½JÃrzfÒG=N쑃ïN¶Ð4ç|!µ%š¼²—Ï§¼”¤DžÂ¸kRÆAcךàu+“4…†:¥Ãæ®G3ylߥV’rãb£ó8§$˜nõ$.n¿¥Ïmæ‡$†^Mtm¬F»NáŒ` Ô2ø‰3ËŠ…µ½Ã ùÝT.Ë Û“ïV"{‚›rp)¤;)^i±Ø<î7ÇzÓM1aŒ9l‘Sù`2WâµWLµV»±„ãV»­¦ÜxïJ×BgÎyí]&‹q–­+€¡@“zBÜWê£n¡ ëš³bJ–c·¥oDcÚ[“]ŸöwA¹A=¹­ä(ÀALW‰E&Þ8A@g‰×i ¥*G4ùÆ*üPBˆ£oÚ’{8„D’2zTV¶¡8ÜG¥ZHeÞpsJÖ³‘¸¯ÖšmdnvŒúTïi X&OCUž9Ó¤gyªRË+ɵ£%‡JV¶á‘€>ÔËTXËƯC4[ÎFkJyQáVFU…Êí‘ÏZž =‰&§’ÒR@ÕfÓãpHQUŸIˆ¹ÏÒ²n¼/²3íëYòx_å&=ÊGzªt[Ðp±õ®ÂK­It­ØbýÐ㊞(ŠGNµ;‚«ŠŒäòOZH¨Üã vÍKl ¶sÚ¡¸`¯°w«vŠcµ-Ÿ|óYZ­ÎØÈݜלëó$õë\³“ž¦š2:fž\…àš½Í9Tô¥)ƒÆjÄ]ß"±>Õ –³‘€ø«±h—ŽõãÜV•®ŽÀr„Ö‚i#<J½˜ršO°8ÙúS–Ø/!h–Ñ95 ˆ RzÖ•‘Èê=i/£Êäu¬;ø’[b@ËVFö×o¤ÈÉ6ŽÕj]ÅÅdêêQúWŸê²+Þ–÷«6Ž iÁ:ìæµl$}ù­ÈÉ‘0ÀzlÄ„0ÍM=€òñžÕAísòœVLŒ#»ãµlÅ"KÀ沯Håë•=*íˆ(-÷h¬%vàûÕ¤Á\íUäbå?Mo;©çš•ç3UEæo)óQVV($¶ž:SŸFµpÆO¦¨K`ža :ô¤þÌ7¸éX×ðI>•ZÊ}’àÖ¥ÇÏG\V\¾ßSPê–bK]Àr+WAeJ¤r8­&À“Ú²õ Ý€Åy­ügíGòj[lýÞx­­2×Í|¹âº]:`öí[‚ÝVO—§J¼FŠN=j½Ýä(:Œã¥dI¨!'vk.æX]Ë*óëIè‚í5sÍŽeï=©Ñ”Œ€­ZV× à+ûÕå¶2ð§'Ú‘´÷|´ß!£=?:‘!HäšG± –ECö93Ã~8©ÄR"†§G,ȧqüê'¼äp3S$èT*·‰Ø’ æªKmll•YtØžBFúPt—* 5ØÏ'-P“w;Ž=*3ª\) ©âµ<¢%tô­;h27ãV´'äš•“N`σ$Tr‘³=+òQç;qUÖs/éW1åÂIãŠæµkíÀ¡8QÖ¹ ýOp(=« GgbN})ª¥Ž&®Úi³Îã1Jê,ü=…Rê5;ør0s€NzÖö•¦ÇmÆ=:WGo§;¦JñבUåµh¥!‡ªH’2¼c=êD›iÆ+VÞd*Õ£´¯VXRFÀÆE5aÛÁ9ç½FÚlOÁ#&³äÒciÖëæKŠÙvAëšr¾àŒt§Æ~_SR$‹½ê&a¸Š­tåP“õ®~ë.“Ri±y„J³~²E {Wk7³:5ˆ¶ÊA q×&´lü8f#Íb¹ôÑÙxnÒÝ ¼úšØŽÅbQ²<}M±'5h[&Ì‘RÂV"1ŠÚ·¾FT âªM+ÎÇ~uY†ÅNÑ‚Š™AO\zT«9µ¿cp~ër+f&p€±;{-N,ÚrÆö­(lcŒP8€Š »“žÔÊu4¥w LxpOw¨.mP®áÅQhƒÒ´´›¶GÛ#œ ׸¾£Îþyª‘k! ^ÝZµÖ#-†!}êñ»ŠHΦÇFÓTK?žpü}ièäÀêjȶ˜±÷ÅYŽÀÈ»‰ÅFºÎÔóeH #­2]¾XXÿJ«,SÊþ”õ¹³Ò¢*ʼnß×Ú«Zɇã½k³=y¥E;rO2€©üÅ•U˜óÞ¢“ž˜æ«Îÿ. eÜGþ#çšfŠÃÌž:V†¦Ëåóé\¿ötLÌË»>Õ8ÓcbGÀì*ì:V1û¼¥iÃ¥*²ç¡íW¾ÈŠ mTRÙ`¢ªÈ¤1PKWéVáR±ã<Õ$d¶r*dD$ŒUÈàR™ÀÁ¡í°¸$b‘-B‘ÈüªÒà` sžŠ:Ô$Žæ b2*kÎ? ÍÔdÄGf¹» ² ­ô¬—ÓdÜYõâŸÌÖØSž8­‹MMqóðH©-çF!³øÕ=Zà™5ïèj}6Ð${ÊüÇš5xD–Œ=«†’ÜPއ4õµ¨éZ±(u^qžk¨²²óv<À­C €uõ§ éQ5ê)Ø1éRÙÞ©“k`ŒÔ÷±u c5ÆÜS‡ÌFj½Âgå#ŒÕi¢!ÙëY®LOØíD—®W`'=êýŠ$±ÊIïRÏdBå ª0^IÅ2p­n[¿œ çõ¨Ø2Ê­jÙì 3ÅIsrªøCŸzX¯$XñŠ#»ù‰oZŽW3¸Ëp{T°[|ø#бµYŠã{U¿²Fë€1TÛLˆ±?Ò¸Û)ËÌ•Ò;|€v©£RS;¹©Âòx¨ð§¹Æi àAÖ©Ü·òJÏÔ›fœ@‘YºC’˜SóŠÑ¸ŠYd5%Ž›¹‰lV¬vÑFË€1VÚ8ÆQëRBªÍ´ŠvÏÞ~´Ùº}ÚιŒu³™‰}½êx²>\ŸJ˜¶Ó‚O¯J#—çëÓ¥iC0(9ã¾)óL(4縊nÕu˃ÇÌy­­.ðuùºS\Zc{óS[ؼ˜æ­5€æ|‘Rýœò¹™¼dÆH§µ²†Î1Þ¬¡¸ÀÅIk’ÄZœÀô¨™rx­yΞ1"Ôé[¼qVÓvÎ>´ŠK)éMlŽ”çR±äÖt˜f öéYúÑ gøVN„øbwõ®Žé3Žâ´¬ãùA©ö(‘EM Ý9ïNˆ ÄŒc §gæn:t¦p<÷¨e…Ly<ëÞ²e æã5 ¼èe¯j»)Œ®å^j‹ïSÀ9î*Hæ” gövr»‰õ«kerXž=ic«òÃéR´ð'V_¥Vžú€0j°Ô!SÇõ#j•ÃO iBýóÉ­;7{K˜Ð’®‘$’æUÇ#¥hImˆ·½pUK‚džNqZà+9Ç“|Þ9ªRŸ(}+jÇQÝiŒŽ•rÓQHù•F[•¹¹f©â·­-™ R§’w’3–SV¬u%VŒc©«s^G"®Zz¸ÛœäcëMLy‡ûÓ›sJɤÁ[§Ò¯Ä 1ÅN«òòE0àq^m§'úHë]‘¹ZÝû³Úù9<Ó‚~T’}Î8ÇJÉ|­ÖßZÍñ#„´Îy¬MU,×YÞ:Ö¥lm'¯Z·´ïëÈïš&Éç#4G*¢Z™ö”¹Õoµ3’sÞ™pg’z ÊhŒ„ääõjÆÍ|À¨éqžTUi¤·ÙœŽ•Cí`ퟥ!Ÿ;J¯5&Û©©àt¤ûÇy¶²r3š‰­à½*²— U¸¬±ö"‹1[•Vuþž†Ù†`;VV›1öÐâ·eo6 Ç·5 /»ùUMq7ÙžãùVšJÝF÷®Ûsy*sž+6vÊ7ø×¨HF¤NxÍItäªÔ×A¢|¡Y«¬ÓË»T·Ž­{y“8ÏJæµðgpïÈëÍr3:Á|ùã§J¸ñyÛ$Ú~µ×iP*Û!aÎ*ÅÄÊw-aÇ“zçÖ·0Á;œöª7ä3Y7’†ŒcÓ­hx“ä$šÙkD-·" Š&GÜŒ{V­¾¨èUÇ¿‚Xþuý)¢KGù”â’EFPQ¨Û*®U³šFšâ!“ÔTðj® /&­ýµ$¸R[w­;Iãely©ÌÀDÄY­q–&¼÷J¤”ØfºƒüÖ­ŽbÅ*7È*b¸ äóQòsߥf0Åð¬_1äW-¦Jé0Á®óM‘‰LÖìdƒÁ4ö‘„{ç¥Tšw-€p)‘¡‘ò\ôÍ[†ÝAç>µ$aPÖ©ê7 %TVÚ[vp*qw* !±U亖L†sùÒÛ–@¥½ë^=>A9$úÕϳF aE9¹ô§cð¨ÌkǨ&Œ+®;Ô@±¤1Oá†qíY—¨¬H®RHÄW´žµ«¥£Á¤ŒañøÒj ¾ÑóЊÆÒíÕÏ=ÕcàV}Óm…Ž;ó«çÍûgÖ§f,¨k¡ÒÎEtã˜@éSã÷H3ÇZQRV<6;W9¬³3–9Ç«¹Ž~µÒÙ" ðµnÀì¹ðg]]?Ú â‹Aºì ãÖû|°Žù“ªHD[{À¹'Ë&­èSî˜ î ¸ÿFÆÞ£5$0¤ŠIQ×ײˆ·æ«ÉhŠûAÚm¯·#·Ul~”˨#¹\2©+žÔ¼6 ù±¥rwVm›6â˜ôŒ{×E£Ý€„Så»Ùpr@ÍkZܬŠ9PO½hFÃaäÕ]§”1 Wý¹+{Óµdq¦¶±+8ªó3O’NjK{8vÆ:Ó¤C¼…ÀúT{Nìʬå€z™[åËN³S<¤(ùs]­Gܤf·m-Ûxèk¡Œ8Ïz”ÇÆ>£µ*§Œ{Ô.ƒÀçŠrf8ø#²3Aö¨Õ.XÛ¥E#¯_–ªM!’9â“Î,¸qMfñ“ïP•ËpF2IùsÁçÝç-j@Ûe‘Š%r‡ƒï\õýÞû¼pzÖΘ<Èñ]-îÇÍŠ|ïæ­$hþúÔÁoùpjMV`In¾ÔÍ5ÿvzsÅ\²HÁük Y-ÜñXómcŽjþ ÛçƒS@ÛÕ@ÅóžåYw6†\• X·P\Bã8æ¹»çfÜ ‘QÛ]Í |˜üid¾¹e'?†)`k™0ìF}kFÉ­ÙrØZÚÓõÕy9œ[ªlHȨm¯LÊÖ¶CnˆŒcšÅÕWt xÏZv‹t%Epkbäˆãµ„‡lݸ=+£¶š? £§¥>#¸ž?[4eV¹ýWDYAt#šäïl<Œ Ï·žH‘Ú¦’àLwdf¶´ÉÔ Ž=ëefØà‚1Z nC9® 8@$iÒié£õ¨åÒʧ˜¸8¨#|6Ç•tIµÈ¥0›Î1P9󢥊%ÜKš‚å‰m‰€+{D´Å©rmZÄÒ6Ž:×Mim˜ã=*Ì0º±-‚:Õ±€ œz ŒH8Æ=sMvýÑ×Ek–™m¹éO'räcƒžiƒÓÅVœùhyö¥ÜZÜp9\Kµ1‘€qU¤“/ÛžjÃw#Ú‘›jðF*ƒOæ620('Ÿ—¥WI·±Á}jGr«·ŠÈ¿“2(«£r†$UkùJJ¤`­QÔ.ËBÇNµ‰j¾eèÜ9Íz~… CõÅn• c#žæ&2 • 6ÆGjÊž_ô®@#4·ò#*«ùUí2%ýÑœV˜L akW‹Ì³ŒŽk–¹¸ãvÝKXàc¦ildTF T Ô²K\†^{f’3ÆWÀλ³·&£—çû™Ò5'#Ž*´žhf8äÔ2ÇĮǃªhÂPØÇ­q+5áWû™àÖ¦›tRd” ¶yúW¡ØÝ-ÄÀŠÑàcüj½È>QéŒWxÍe«$ ã-^›¥:ÝØG(ÛÈç­gjùsgš[78Ç‘ZdàzÔ’87ËéR‡ éî)5<:Ö£¦‰ÉÚ«žÕÈê{¦å`+h.~_á5ÖZê"KB¤€ØéS%ãløW(Å‚Œu=hŠFBF:ÕÈæ’7VÅmÛŸµC†ÅÄm“8=)öíµÕkLé–ƒÒªO¡Å(ÂYsèóZ>PŒV†“­=¤‚9pWÖ»kFÞpvæ¶’\¨.OS°6Ÿ»Š'sUemËÔiwb#’£Ž+:BÃŽ0irÄUi0ÍÁRJà&ÐA=ZɆ]×L§ní¼»r¼d޵•g!i3Æjä³1ãhÅeß0Þ«vrªÁž7Vv¤X•bF=+6y‚ƨ4ð ç gjÁÖ!‚ò1KW9kp-®‚?8®ûC¼ByºP6°Æh¸?»#åÅq^ ‹ uÖ#m4F@È5¡ªMæ8aŽj+Ë‘ÓÖµb ÆW#=iç¦jEùHÆNĬyH¨Q7È[©jš\wCØW¨i¿fŸ;GT1_˜qVîɪ"L¯õ¡W¾*Æì&8«6:—• CŒz×W—y!ÚjuÐ@_1ÅZ·…Â씦ʭ³&ÍF—Ü®ªéPÏ¡G*TÕy%Ón@aòWe¥êqÜGÆV rØÆ1Òœç9_¦jœ ƒ´ ⣓>_QU2Ŷü´éQLg. â¨Dù n>Æ{s\ð˜-ó޵jîrМã¥dÚÜùsg#šÖyƒ¦²¯ÎfÆF:UËE&€sš¥¨œ‘ӊ˹A…\ûˆÕRâäÆÄ‚?:-uøAØä+b-F ¢áÐæ¥†t#ªŠ¦Ar0GçN¸™ 'U)Y<°»€$Wâ(DLaÏCXWSØÜœÆzŒÓ.#ûyŽxpž•Öèšté$fB8ä×d˜ ŠY‘|’r8®[µY,ٸȫ?³g±œWu¨Û©³&Ú¡d­æ‘ôÍjÃ…±Z˜…dåâ“‚vñÏ­LS÷88àTvÁ^:ñšž@'¥sz݇œœ(-ô®6kg‰ØФcpqбý"©m¸Ï-”sÖ¤ •íO¶±3È6‘šéô˜$µ`$é],WEbã›æƒª3Oóm‘ëYO>',œkjÒïη*HȨÞ(î‘ò#¥Ck!µ—nà9®®Êég‡®GZ™¤À=*£ÊsŽ 5åž•raÏ#5Röà!d ¹=y¬ûy@v®jÄ»Œg,1Zæç.èž:Ôòɘ 8éÅg@WÍíŠÑkܳÞ_6|àV’jðÄ™AÅdßjPÉ0@Tý*•ÝÐ l"$“xkÖ´×ͤ`éÒ´ ¯AëI+BÀŒ\¼ò™.[‘ŒÖÖmˆw ã<šÊ¾ï VÅ“bß…^+R9TF9‡‡©ÈYW\íÑÛn c$Õ‹vÛfpâ³dS3tëY·¶’1ÛŽ~•ufñn,˜>¢ªA$ñŸ‘Îß­\×À€óéV­ç»’aæ>+]Dè…‹†\T^hØÈW%â#3N¨p8¬í^Þaac;Ót»”†%Y1¸µÜØê1LWsŠÜ·o1†x«,¥¡`qŠ¥w–Õ“ŽErö›[‚ù¯A†qw¤0x¬µ ê25©´€9Ÿæ6ÌqS!$Ž•;Ëòq´œS,Ð08À Õ±ƒ‘òóÚ©ÜFÀN=«XÓÁuwzåd´ur ]©ÑÃÄ~UÕÏÝéÞ\…X {Uo²ª©^ = Ie˜&çã]L&ŒcnqS°ç$b©M¨J Ô)³ŽþÔÿì¬0$žµf;e¶RÔ°˜®+Kï3Q`…p¦º]*]½ÇJÑ–“9^µNYŽÜ‚¹¦$£k6êõᔕÆ*£ËçÇ»p ž•3¨ Õ¹nB ãÚ¹¹æÍÑèy©æ”˜x#¥T¶ÆâX¨©înâ · ûÖ<ú‹EŸ(}k2iîfcž3QEæEp ŒHôµ­Õ»nqW4…V»(â½7I-åÇ ­b;ð+>þ}ˆä0éƒ\ìËqƒ“]&+@ªÊ…,R$Ň'Öº-;ÝGëÍ[Û…b ätÅ`].éŸ<Ö%â²F¤c­[µ$Ûs´qÅg£0»`6ÕØyQŸaT®´ôœ@¬;hb `U1m‰•N*ú[àƒÁÍZU0 1ÕRìã-µ‡z±Ýº— ëXúÍÚ´B`qÚ°%œ R5ÓønðÜM·#ŒW¤Y.ØW§LÕ™8ˆŽ9ªÎ2½5Íêp´LJ‘†5ÐønïÌ´òN2:óRÞ#%ÇÖ´m¤çœc$Š'"žŽíã¥HÌ dœ`ö¤¶“Ó$A÷œ°äÓ¤L0µ—êÍGZCp®ùb8ôªw·NÊUÇNµSOÓ˾ãÎNrk¦¶ŒZ¨C‚OSNž`±žŸãY‹qæ’¡€ ñRŒª’XQº•À;qY÷S˜\ù`cÖ³Åê¥À%—9õ§_j%“å"²"¹ß9€*Ô·ðFƒs{U)5/7ĹíÅZ·´š|ZphÑò@&«K§*Ým1ÓΞˆCÇz–ÞŽl cг¢!K°üu¯HÒÉ1ä×õ­'c׌×=ª·RHϽSÒÀkŽ«Á«÷w.n4 Ôfª^óÔdõ®ƒOŽAlåU˜DIaŠÂ–MÓ¸Èô¬½OˆÐ T–Ù6ì23ŽÕ˜„ý¬àŽ+K{íž•€HÇ4šN+*öËÍÉ@•BÖôÆæG~õz]Ø`Œpj‘)‰À ö¬mF,³4x÷®ORo.MÇëT¡·’æDZãŠ×Б¬¯†ìW©i·bhFéV¦}«ÉT;ò1Æk7QƒÍˆôÊôªZEߨïÕ[[Œ×ax‹4"UñŸ­A`ã~ÒGµhKÏA‘ôª¡Ê626Š{IºŒT³ÇLÕ¸&Ë“S¶ õZ«r@}*#NN3ô¬ÿìÆc–#Ò¤h^ëN|ez ýhŽÂÄ´éZÚvüž¹¬÷Ô!‹;BÔ?Ú »”Uç¼iä öÍ$ Hùˆâ¬ -Î €µÆÒAZÚ„GÔÝ“r0GÒŸ)&H$ÖT‰ˆëÖ®É2ùxùx®rþì°Œw¦ÜOû®Ý?çËflƒK4’ȸDãÖª [‚Ä‚2iaÓÞFýãdfºmFØaFk«Ml=JKKDÊØÊõ¬ûØ‚]ÔZ…±šÕ(µ^%DÓŸå]ÊM n@®çFbô­i\/p+—Ön~Þ*=2Aç8Æ*{Y~Ñzd$m¥Ÿq’Vº=¢Ü'ËÏë¡åDpG5̇ÌîÇNìùÎ3ŒS£>L'•¬È¤ðžOzÐiJ€29¨ä'v8¥Œ ZFô®R³òó"¨Îit»± 6ócwlö«w6'ï ¬k¸^&=ÁËjv-!å8íïWlí!²ÑÚI6’ÝEf „×Êbã#W †[qZÙ¸f6ç¦jò VMêx×+¨«[]ÁNEvÚMôw:jmµ- ÇÖÌÇ5Rév“ÐSQN1Æ;Õ„ÊàñR&àF4³JâA¼õ¥’&g^GN´Ã¿=Ef˯@£M¼D™8¢o‚õªSxŠG8SФúœ²7&›¹Ýy¥…[vJÖ¶‡*õjÍçn ^p§U¬‰o‚ÝåqùÕ¥»–C…Ú©5Ræà’Àâ®Í3‰$²â”ùÙrM]f-ÌWëž½dûGÊ¢ªÜ»y1ǵU‰g侕±m’Û%Ï¥>+©GêD±ÞGP2µ«ávxÜñ®ÒDSE‰:´{€Mdê ~Õ»ŒUÛEYmÌgip+ýM¾øði4щԵÛèÑ7:æ®]€7Ç\‘5ÙÎ1íW_Ë‚ÀÍÞ­iªÂY€ù»ÓrëjàóÒºpÀ(;r£ÛÒJ+˜‘гà Öd—¥޽ªÃÈ~Ï“Žc¥ÁŽã8õ­w”†zÕ†"F\{U„)àR¨%z Õ’§z¸®jí>Ï0™zûVÍž¬’Û¬oŒ{Õ¯" ž@^j†¯¡‡·ÜйëÕ’xÔÆ[ðõªºM¾UÏ<ôM.àH‹·µ¤bS’:t¨âl®Ü*Ô_0Ʊuë0SÌŽj_ Ü*)˜g·Zèu !pSÓæ&Q#ƒZ\‘œ}iÊ¡c)速ÃR#§;qÒ£xÖYU·*fuÈPFiá8êµæâÞF=iÂÍÁè8¨&ˆ®A™£1Î*À°aó1VV”Š“ÉAâµ­×1ƒSU..„SðGΣ¹G*1ïXë¨+L_çÖ¬K¨Jà …ãŒU2Lá¤aêsÞ¯ÞÝÄ–Ì)ük&ÞñnÞ1VÞý3ÈÇjÉ24’ü c=j‚Y§ ŒþzÓG•Ü~ïô®ž9`¶Á8éN´·_!óŒÔ†hÀН¤*u< w©’äT7‘ÆXÞ¹ý\F±îB:ÕMð}¤¡Æ)uÔM»øš£§aåíé]æ¥mJKùH‰ºp:×7o´$„ ô¦K'"ƸÀ5¿±"²…ôªV87BL“èk¦ŠTD•ÍW¹‘&bFÚäîeWéŒVDgt¤ñŒÕ«—ÛnrF;U+tI‰È*èLq‡Œ€WÐÔvšÁI–)ÏL×EÁ£Ü6óNYy#ŽjØ9Ëciâ³o à9¬}ßf-#'¡¥‡V’¹ Wdñ0k&ÉLö®2ÿRk» HvÏ98 0MvšU‚<°ÅmÍ2˜º­Ci*á#"´•Q·n}ª½í«O«6x®ZÁ–¨îwW£Ãþ‘eÑI#šÂŒ}šüôÀ5½¬ÄnÇLÓ&ƒ‚9íP…e]Üm5 ~£ŽjºÈD¼‘Ö¥–B¥eR0:â¤[¥Àåk– b9CuÎÒ«ìEWhšy7c©àUÑj ‡$E!ãà d 7í8ÏaRÍA¸ã«z©nr@Ås×wÆK‚¾´ÙeÌc8ª+6Ö´cù“$ â«ÎÓˆÉJ‰mnå?3’*í®™&ß›NÖ² _¶ÓHb£ž+nÇM…fE&´ü…LU…8ì~_ʳmåêÜU"ÿ¿‘r9â«DL7 ð9Íwšs4¶Ê~\Qx„)bãµ)ѧÆAÁB2-®¼Ã€£½C¨ÞµìP½zÖ¦ƒ¦;¯™pz×ehJB1øUZC™Sº¹Ë™2y*m"6žpÇs[š›ùvÛN2xi;¸ÇÐÖÃÀYpœÞ‹¨ü»"0¹Ç5ÅÜ#<¬2½*œÏ¿¶A¤¿VX6œïM³\&8犱41´L23ØW7sjŒ©Êy~Öù($V´7!ÛpÆ=*yPJ˜8¬·WöHFÃÚ¨ßYFØØFORk.]6aòúV±šiŒyïÅXMù¡IŽI¬ýv­¶¬qÓÒ¸b&·Ôƒñ×9®ëׂâÁFâ£Ôà rÍY³Ž*Û¹ÛÀ\ôÝÀ©Cj«™©#"£¸ùFF84Ê%;I=iÝÃb«ÜZ†l=ª(´ÌžH«‘Ù$G€ÓfÝÈ £˜¼ãëWfˆ²c²UÞÒç‘Á5´³FÊ #&²„ûÏANiÊÒ•/|69§Ïv¥AÊ⹫ëñìr? »½–{Ž8ÔæBcÇÞj|6d&æ8Í9` r“W"‰Á`Uè­ÚV¨<ÖõŽ˜$U,0\Ö§ØaE?*à´ýñ¨ùpªsO™pãŠb›v­LTžHÂ¥TùpXc½"ùäšÑ¹ˆPŒu®nòŽeéUJ°¹SÅ\¼·&0F [Ñ®š’¼ÖµÛ‰A\¯NkÎ5ØŒw€0NEC&8ušƼawWT„,xÈ9¬ÝNèG ǧÌ)v2>2MG-çr$×Sn 0Hâ³£>lå°Íu600¶@æ¥d‘cà€Æ³5O1lØ–Çç\ŠÈÂò:æ®›¼˜²Òñnn§5¢ÇŽ­FÄEbx‚%–Ø·¹*QŽ®FÞ•¡¦+€È®¯N¼Y“†@«[¸ìsLÙº^€àf¢–Ð8,ôLÙ¸‘GûTwv›FeE+Ó¥VŠwdã½YµLÙàÕ£$gÉ䃊r°û9ÁZŠÜ“)†=ÍZ—A8ÍUÔmŒö­ÈãÞ°t ®¬P‘‚kÑJ,¶‡%zW<«äÝ…ëVŒ˜¸R1޵ ¿¼CÓJϸˆÅ8uv˜ÇŒUnbó†ì ÕK¯¯Ž/ÊtÅ6MBG<ùT_lrÜŠIg+™?ZÃËJyÍY·¶ó6+MV“CZkBóœíŠšsŸ¥miÚ#Ìá˜qšê Ó-­ÔDÏn)ë©%BI&ÓÙsŒVtŠ¥ŽÁ¨Ês´š{0 Æ*PÀ¡äqIæ| n*dO¶rÊEhK#}™xªÑ)]ˆ¬‰NÉTäV¹_2؃ŸJÏ¡”ÔÙ†q$x8Î1XZ¶—%ãïŒEcZÙI Ì$PWI¡B²ÈÄí­é†ÄÈ#É5…35ÕÈNŸu vÐïÚªVi¾}ÇëZr2ôÍCjŽpFk±²o.Ùw8ÇÖ¤2o'â•,Ê‚®Ý–U`Ecê:ü°\˜ÉOi‰ªAY®âkjÆúK•ݸc=k]Fx zUkûU–ÊŒW=³[\°ÇËžµzÅ’PQ° éW#im&ÊÅnØÞ-ÇÞ+Å]\yÙTˆyÇé6 š«s±ñÍfÚØ"—rFÜúÒÛ'cÇ^*õÓm·8ÅA 2CŽ)m€IˆÈ5bé°¼OŒ-È`Žk—ž#iª+t«Ð4Ù¶ÈÀƒ‘YZŒE'b¤ €H^-ÃjöŸp$P¤ŒŠÑ–Øúo1xëéY×k÷HÚkkNmöàmãVúÝbbpÎhÓ{2ž‚µ£‰F~é$ñT/¬FÜ ßý2ÛìÁŽWŠ]JûƸɨtøÂåÜ.}ꮡ?›6ÀAÔðD"€¹ Ó5M¦3NFr Lêª@®‚$‘naùš¶¬6žWð®7Är»1RF3\Ô¸;zWâyv^6Üg®k+ÖÊ«·äší|=­#Äa%w/Ozì,¯šO•”dU÷exÝÍsZ•—˜¥°¬Kx¥K‚ ^i.f œŠÌ“VD0An•-ó’íùRɯ˜×f0ÍÓcLÝu&O$÷­-Vt‚‰Œ÷ª6 •ÞÀqǵ¬#ón=ë£0² ÜGçR|‘DsŠá|G2½Ð ªv°¬‘¶@éÅyWŠ‹ÿiÊ00 sx>Õ¥dÏg$Wçž‚½ÂøÜ[$É·8äbµ"¿i§dÇæÛHɬ;ûsn\eZ¯ÒM ¨lô«ÑÆdŒ+Çz¡¨ µBU† qú£:Èd꦳íÚBük¡Ò/¥·¹]­ž~îk²žèËŒ‘Ó5A“|9 pj}Bo2}£zU•`Œâ©+þótŸÜvÍ%Œ€¹U=uZ±ã"“ÂW!&(q]£ó ÉS¶\åzÕË»U–@ã"¥Iå­ƒÞ¯j —“•湯1­®Hc5¬—ÃÉ%¬‹Ž+ZËJó€cz؃NX[ ¶J$˜8â©^Î"w k2K–¸Â‚1üëSI²ie°Þº #H—€1ùÕFž¨·dö>õ´ÑÓ'šÀÛž*!Æ·µU%¥˜8©5 Î1\Ϋ3$Ä øªTž,.qšèm.k,Á²sM<ÍŽ*Íà iŸ–¯éX6 ð8ëF§oæZžžÕË,¿dŸqÇ&¯¿ˆ XþðÜj‹koppàT ²0ŠM«å¶ò3Yr[K$ÙQ•õæºe¶²,ø8Á¨e‘ï.3Æ3ZB5†Ùcà7|V¦”¥Wp¶d‘ØHÎ(”#·Àêçuã‚3OÓ&@J¹#ç~3±Åô’¡ž‚¸i AÅiXJŽŠŒFGcÒ¶­µ²$Å÷QŠé¬®Rhc•]I=q]LÜ0À¨§XeŒî+œb¹»í'ÉS$=O<¥m}w+ ÈÏ¥2ÿTŽG@çÕ‘¨qƒš¥åõryÅjÛÙËj¢éØ( Zš$wz¬#±Ûœ Wsmm¦+?--À æµ²Âwb¨+“'U†vXˆlgµI§ºùý§¥G«ÈÞµ‹¢HcÔBt«Ñå‰  ázf¹¹†ÉNÆjäsŸ!~P}é$·•JÎ0ô«–àJ™fJÎÔ­ƒ´‚Õ—O”œb¶f†%/.›/;xÅh<¸Vd¯‡9"²ïL—îÖ†Ÿ¥;¢1Q[°/‘ò£Ô<ŒäçÒ,/Íð©jFx©cFÆŒýjQçqéLe_lõ¨de^2=꼌¥KqŸZ͂薮E\.¬y"°uY"„3¾¼×!$ÍqrX¨ÚQ]~›"ý‰1ŒýjÊó?AÏ­]½F6˜Uí!TÛ/"®]Cº&—éë\v¯c"ï8ë\õ½©šãi9ô­»m( tÏZÙŽÐÁPj+3z¡~µŒ±Ë´ëZQiÎT V„v1ZÄ_ »EU§—ŒuâºKDQ(*8ö«®QT¶<ôª³â-‘È®*íüɘœrj¸2W¨W®êA‹Ç"gñ\MËG$…“Û !Œª àæº8íÝ¢<Ž5^ÛQŸN¸òÁùIäîôÍ]&Pº†=©ºÃÍ,±¶TsSiZšÝʼnqÁ´å´µhKmLã5Âëúp’å~Î@Ïz¥mc9e*±÷9­{x´Ë9PîVn䚇P»[Û¥†&⺯ …"]£¿wŸƒUmlÞ6 pj}BtŠ-½ñÒ³­n7o¬Ý8‘QÙ\"Jå§jyŽq·¥cÛ§•©# ¸Íz2‰-$t¬«ØÀ|ñŽ”Y°e(ØÀ5ИK`¿.1ÅbŸôYÙI©ü¤š=䃎õ›$ æ6qÖªÍ;Lv¡­ fEÇ>µjæEŠ.HÍciæ=ô­;{p¥•zÖ²ºÄ›@\SrLªE ÔH}”J<ÍIe²>”ì‚Ø8Í!œp*¼®NqíUÝUc!@ô®VòCotçp¯—wâf¶V©8ÅsÒê×:„…Øü¾”Öº|´»M -h„àçë[1¡3dãð«×kºÐŽZv/îŠäqZa‹?'Ú º³I«Ç¥cÿdLJjžjõ½žÕÝòâ¤Û×4æLE»Š¨Yár5{t`vÀ¬ëùüÁ²20jÖ—jUÛ·(žD1p£=ø¬}RP¶„qšäÔ~qN—' À®'\³>BÊ0O_Jâo`0KÆ£µuK…b3ƒ]Ž“,3©½PÖô§Ž]ê«/î-g ­À®®ÇÅpËŽàÄc$V½½Þš‰çFÈ ô«U¶hÈg\cŽkÔuhÆÈ°@ëX·š¦ç½e5ܮ٠’kCOžTpç‘ï]¾ªUÕ‡ ]f—®î ¸Éàéá•$‹ ®=kUÙþ\i¶6ÅHÊŠv¨è²*œp)l-£lsRÝB¾g¬É"Ùr Åuºa3B£ŒTZœl‡ŒUßcÈÇzèá¾FµR¬8xË.Xrj¥µé‹tlGçMiNãPY@RQ¼ Ñ–õbBŒô¬ñ+ÜÉóc•~ÒÌîÝ´`Vž6€I·ÔŽéŒáUÏN”)gçpÅN¹Àéõ¥8J€) uäSUŽÒF9éšËšü¥ê¡aŽÕq¥ äZ§srÆq‚qÚ¸}jêi•ÊM ’¾ŸZ»gdÌ"ç5£6–-ÐoÆó]n‡[DF+AÛÊosWÏÏn*¶šå&aòã5³¹t{ñA“Ò”FŸx‘ž´Ë€ 'n8ôª2ܤ%TàK5ÃyÕ­ ì«°ªà÷ô§ý¡Œ€(éZÖwŒ¸ Æ:ìtM[‘Œ6ö5Ó²¤È¸+Í=bTÎÒ2:W7©‰$Ô1ŠÓÓãtQ¸S\Òñ¥RžêXc"·ü<á£a•È©µHÝ•±Œâ° ;¤1±IÅiÙùqK±ˆÅl›E`úV¥daÈõ¬ï´žä~ur[‘¼í {Õ\´kBÊd n¢á8 ) à’qŠår8=ýê1pN*Eqǧ5)}¤“Î:P¬㡦É"1úT|ì b¹m]^;àŒTk/Ãxõ¨æÖá#æeÞ±®µ“q,¼ö¬ÔÍÄ„`~Óé‘à Jà«‘Xs^=åëcî†õ®ãA€´*Në¬ý³QÍjÆsÆÜâ¨Y—Ì:ÖØ$Ž@SYNãÒ£]ÙÏjYˆŽÙóŒ‘\mõùûVK )ãšÕ¶¾ûDAN3ïW–“Ó‘Vã´A‚¸Í:e T`TÈÃËà ÒªðIÆ{R ŒõÛ\æ¼ûÍÚ>ÛÅ'fº™Ñ.mxêEp×¶o팧-ËÌnCgµqšå±ï ö¬e;sг ÑŠEtuvZn¥æÀ¢B§Œjø`•‹*¨>ÕZÖÑPڥª-¾Óåc>¹¬]™$±46~uX]<ÆÅ<) ¨ãÒ§D1Ž&žœg=+NÊåâ9b8é]f“®«•ŽG\zæº!tVR½1£Ž[ Hpì‚"ILÖ_æHÇ‚ â®Á{W,$Sty|› ¹žkªx„èFTäW#w ¶½eàsRF¬fÝéÎmÙß7ú·8¦ÜfåíÅse*ÈÃozjǨ5£mdÒ(b+jÚÙA*àqZ?»Dçnj H+”T%A©’¾Ø¤Þ:)\Óð\Å8CÛ#½G$ñ䫜úSüÅd`{V³œ§n:×|^݈ÆI®~æáƒsŒvª¨òË(lü¹é]&—e$² . ê.Ñm4‡°ÅsÖÖëæ.Ìdœ×o¥o†ß/Zi„—m’2­l§ì äf²í›f¦Àž¦·ã“úSÙO·¥GÎ{{óTu‚?N•Ã]ù|ŽOZ½¦Èr§"ºë)Ô‚}+B6ÏËPÝåJ‘Œæ–6ÈÀÇ5)lpqÏ\Ui%Á8 •ÌêîÒ\cpÀ¬hÀKŽqŠè­o!ˆÅGsqämÉËjZKÂÄ W7ykæ)Gã\ýÞãæ@{ Íx7Á"¦†âX>ëjS©Ì7æ˜o§qËšPå”±Ç=) ŽG5¯§¤{v‚7ß³ÓbkwiH$÷®vò3 ÑXð@< ¶›¸b«U¤R„0û´yç'ÒŸ̸e<ƒÚ¯Ûë—P8>a Vµ·ŠÝ\4‹Åt6úÜ”EE îkJÒÝ9SïZþNØx8æ¹ÔÁ¨085v6—;‘ ã§5¯ YCŽýiÚJ ÀœQgpb”ƒŠé´‰Ë7 ÞŽBN3D¤²ä‘Ò› À䊑Á‘ÀR=y4³[ì‹vF}k޾Þ×rŒUŽ0©²¡zSVéàî1éëR‹ø¥B¯ŒÖuíŒwxöæ°æ´–'Ã'JË»ÓÖC»ËÖmÞ˜DeÀè+¡¶§Kwùr9=*ÿØÄPåˆ9ïTÖ&yõf– 8Ц¯åÙí•B9–I¼Üëš²î®T.6ŸCV~È%Œ€â³g³d,#ðª˜uF=)Ñ'#$dÕƒçÚˆå’Þ@Pàƒô®¿CñfXænÍw_ !ày®jùöj[²0MvZF$µbŸ­Ù™¬÷€¥bèów! kBò´B[8â°Ä’ÚÊ8ÛƒZñêQ˜ÔœŠÕ0Hà(ê*P6 Pz”)õÒƒ¶)®âšc  œS[…ù@¡W#œ{ i\7ük3SFxŽ5ÎhIjÄ^ÕߊP[ X3ëa”´¹±Ç5„óK¨JHáÍ]ƒ¡Pk¬ðýƒJÁ™½v«Å8¸ÍEþѨ qšÙ°·ò qTæ¸ÌåI…An»nß`×M§bÆEhyJ®¬vš‘°;ŒSU|| ÓÝ c‚é\ö¼Ì!ÛÅ`[FBœ®x¨$¶!Ë0uÅjis… ñÇÓà t\b¦”Lš…†Üc•, ìx*zuÛ2Â~`\ÇÍ$œñªg(…Ù¤…ÕŸiÆ:T—6RìÝO5”ñI ÔTbîHqߨš± Ú]¬>„T—PI ¹®zêû<¨Àd ã倉óÅJ—  R]Lvà0ǵjè1Gs »¶E;RÒZ5óâ°^v °ñгU‹œÔÍ4.2ÜV扫¨È” ö'¥jÝÜA$,ß.H®~v*0 ïUb$Ní]»)ˆëPIj$s·H«C6yV®k¯Ñ¼D<¥ŽVùºjKëœÜàƒ]†¯vŠèîä2Ù²ðrFa¸Ü1É­‹KÈ7`šžûMŽêdP°d°‘®Þž•Õ°f'¥*œ`¤ÓÝÿ‡=¨@Nwüi_!s€i¸A8ÅDÀÈÛëõªâsçlã󥸹 ™Ï@*¬Ž¢_nHÉÍp:üû„DžNk’’fÜIæ–+y&äà{Ô‘+3”‰xé]‘¥¼Ž\ýkÑt»‚$ Ÿjµ¨¸ŠÚFÈ•ÇYÛ<÷E°Zº+ÌÛYc 8®6Þá®/¤ÁkN$ýÿdñ[úy é[ÜW•¤?{‚ây¦"•bp¤ÿ*zHÀá€ö®Ä·h¸{ñYV÷±´{6€{U ùŠÈÇ4ûY‚5ÔéÒ Œé[gƒ€j'¨ÍOü¸ïÔÕ{äaÜÕËJ ÎÆ£˜ƒъù˜Û°9n­í?R0²`©«’ØÁx¥Ð¨&°o´™"'jæ°æY!•pséV¡Õ~O.\zgÖ±µk‚rƒY°Ù™þe\çµd_BðÎr1ÍU2¾H'=¹­=6ÿì®0Eurjóéí¹†ìt®9£\‘‘Ö·mí#–ß‚¯jĽ‰Œ­ó /¡…ž"N*ɺgnà{ÓZF Ù©!—s(´!ÔB,㩧ʲ6ì TzŠ*0Š«n£;éWÜ…ü¶ ×cák¬NŠN+Ðw+ÅÐ`ÖÄ ÎAÆ3T<Óks·#šè-g-g ä`SØÇäZ³žp1NåΟòƒœƒM/ÈŽôüî9¨¦(UIAQ“ŒW?}¨}šì7jH5¸Vev5‰¬ëÙ ‘°ÇÖ¸›ËǺ‚3RYéæêUfmm_Ç µ²Á'˜G4ý'J2:aIô®÷NÓRÞ%ùW=kf00§8¬­j@a)Ç3É<ÖݪAn§Ž•™ +LAþ![z1˜nÈÅ%ö%¼[Õx5‡‡I01Áç5Ôi$³ŠžókDWhäqšÎ·ù00O9©.]c‘_#>•·á»Ã%ÒóƒŸZõ‹@Ù9ÍgÞíIw Ö>¦Šåe Š›L¼ÆØÙÀÇLšØóä`ZÐAÆæ"œÍœ(Ç=éë98階S±8›È•ÈÈãéXœ­d_ݬ)–eÅqÚ«4ìe$õ®jóY’åÄØ d˨I3rF Ic6†tO,6V`G´¹ôíL²†[É·79õ¯AÑ´Å·€3’1ÍkªsÚ¬’9ÛXWøžä Û­\Œ˜¢ÈåWžøÏQi$òò1Y`&lãšéá—'¹bÃÍPBúèÊ.1š‘TrE4ç8⢙0¤q\»“y·Œf²åùYO­¸cXžL}+åÜ”ã®ÇGrŠÐG.ìp9íR”úc­L‘€rpGÒ°µÙB¼W8%S#)›‘å·LÖ¸¿HD耎9Åt~š+›&@2:f·¯4¶UÝVÈÑ’pj»hðñR™ ¹]¬Ÿ^ÕÍëzRí&xǵE£¹3/LW¢ÙaSÓҫܾÒÇ~H’H8¥8ŠÑ¾ï"¼ãR%ä'Œæ´ô ËÍWÖ˜Çz§åÁô¬Û‰ð¼c®+¥ðû’ÀÅuð’G Uè÷uÈ9ý* Ÿ•I$ ãïŸtÌr*!•ùH­wÖ² ®Lrj+Œ'¡ª¹Ž PÖH½@ïŠá.>{Ž@À«öryRqUu×óYpqY…Œˆ¬ØãŠê´ºÇJì-2@éZ¸Æ=ê¥æL ½qw™§Zb!hIÀªRœdcÿ×X71ìÀw®{UŒ$Ë/Õíð%Êçw×]F²DÆHíYd49Éõ›æ+º´å1ëZ œm¬ýA‡–GËœWv¸sÓ­I §5›rTg¥Pž%krËŒšãõI>r¤téT­e1H§zí¬u6ÕKqV¿w,D~uÀü˜ÅW•ŽÄVUÑdì*ªN®0UsTµUáfLdu‚T³ZÄZׂ*´ŽùÚ1ÅO ä;sŸ­E! …¸ÍZÒÌi.5h_iñ¸ÂHÍcýŽXœ6ÑŒñZ6ó7–U€È¦NZ`MfÆÞElñZ’MöÄ$ã=1P,&% € I’|ŒZš,ÄH Å[±tàæ¶4Çó Ç­tWiæYqžµ&’sRGm¸_ZÕ‚Åí~dÞº-3ËxËo­) €EajמPdR ÏÒ´Öº›ÍOzí-¡[uTUéWÔãÅW¸Vlgô¤w1ÂrEg^Þ“9ëU--Lót&º(Ao´mã“\¯‰5MÕ‡Àík¹²pFs[Zle¿v›xã×ÙZ5µ™fÆOzÁ¼œ¤ŒÍGu!’$­­L éÅu¶ãr!à{“N¹UÛÔU 9CœW;âËíÈÀ‹i–”tÏÒ­êÑ¢·Nž•Íég÷ÅLóZ·¾qŒ}jΈÅ_@×}c&ckMH*@*k+S'o`k–š'i9=}éÒƒ ±é¬Õ[ä{×A¥³4%i¬‚%Èaš–ÄbAÆ:sVÁF\Vª«mÇá\ù›ƒžjk©3jqŽk.Vq÷v÷«Íº(ÁÇ ªL„¾ìr{Q>U@Æ éP‘ŒŠhvŠAÎéZvz«±Ù&8æ·„1Il²®ôªN‘¢–ÀϦ)éeçíÚ5%Å›C qNÒbfº]ý”i $zVkÛmµ~"¡Ólƒ8àÕíAöÈZÑÑ/œ!Ç&»ga%¦ªvR‘—Þ¬™ÎkÎ-ìÚVàkr×KUÊÐV”VÌà /Ò´c³A0¹Æ*­½‹Ã1!† 3Q½[HŠ.7ÖEœ—ónqœœæº¸,ÒÚ@£ŽjÃq<…'›¹”1LŸÌ  sT¯/1Ü‚jŒkæµoÙÛ‹h „(cÀªZž¤-àa¸g溽ó\ÊTÍ-œA-K¶ÜãÒµ4(ÜÉ»¯.ÉA‘ô§í TÉGÇoJ².r¡­m>¦`¬"©ëˆ“aŸmlÂÉ<{TÚ–›5¶ÒWÀÙ¥bØ‘ö†SŒV¥ô; Ç­?F@.ñk¼fZà;U>]Ö2*GqÆÊÄŠØYÈ€G­mÙZ Fæ ŠºQS…¥HœÆ2SÔ/c¶Œ¶Gµs‘$º•ÞJñŸÂº«+4¶UÂŒŽµrU €Í4Ljñòš‰AÛQÞHþðc Ê嘊ÕÓl÷²³ާг¨Üb<¨P0+…Õ/L…†EsfÜÉ&óÓ•CTŒ˜X}kÞ4eùð6ŸÎ¦š0‘åÁëíYsFTçŒUIr¬¾kGO½x&,zb¥¹ºK’_¿bi¶³Ü©8Æk±»·†ãNÎ>`1Ír‚À€¸ç®kQl$ €H—} *]Þ ·y®’[…œcñQE …[˜­»mw:UÛfž1Ç5Böá®\ƒŽ8TÚe¿’Ǿy«×ò©PH¨,×c©75ÒÂO’HÇ\Š™`i0ÜU«Ôòì‰;zb¼ëSeû@'ÍiØ(‘Wæ¢×Æ-Hã¥rö3ðQ€¬Ûæ|ÖÞšåR'â½ I<@ j܈áw`f²õyHBHŠç¦˜ˆ ¤ã$.d_·•)<{ Ï“cõªÓ¡·l Täãsuãµg«ŸÚè× - RÀ‘ïV˜fLŒsWÈGŸbû€Eq·HÑÝ•\Þ¬ÛÇž_MC<;œªàŠ¢lË“Ÿzàx!<~5^'8==Á­;ü§Þ*+qu0B¦FÖíWÍ\y±ãÞš· œ61Ž3T/v]K• BY5¶ÒGÞïSÙ÷!N0OJé¯,€²´gs1FMÉÆ:Ö»ÜfÅшV±Û7\œó]¶$„Ž8“wÌq€A®çÃR¬öKÎ1WuXCòã Yitäqï]NØñÀQPO ËRªkâÅœîOðÖT²=ôÀž•·¦iâ<31]|•Æ=iŽž›yªr©V+Ö‘ŸÜ Uû’NÕÇÔUF‘€ÆyÉ5¹kÁcŽ+#VÔv+Ã'Þ¹‰&i’FMA`NXã›ï»c=«±HTiøé\Ü×&*¸nÆÄÌÁØ jÜÅ-\ôu¬á'œùÈ9<Õ¤R§‚+ ´á@HÏךڅNÕ.ET×n6X‘òטꓗŸ·^•Ñø|-Ã`qÆh×À6Œxú×X£µO4ÁÁ­; N29ÛhSæ>¢ºd”}œ‘Þ²/_ÎR§°¦PgÖ«¸`ý€ÅajüÊǽQ·ažHöúѨ¦øÁÈâªÚ•¶ŒŠÈ¼B’œqÍ_ÒnÄXà çšê­®C•éšÛ¶]Àp*K¨L\¦££–v•W ÖeÄf(‡9¬Á+5ÀP3‘SD¥YÆ}*Þ¡j­d¤é\ë@Sœ{Z¶°ï¶ œg¥eÝHñ˳=ëwHÖˆËb ©u …1‘T¬'ó/•IêzWm-ª=˜%W gšÁV+Õ85OE’\65ªm„2‚¸Á­ÝLI°Ïº”r±H¬™eÙ3)#š§7Þj ˆò‹zW3<É-Ã/SÒ x .xõ’î!~SŽ*#EÜG½dÝ$»p)-‚#ÈÈ÷­û)z`Úé,/pšÖ?¾ ©¢tS\®[]·ÂíE¬x”È2#µhKh¾jã½Etì’ÛqÞ¨4Y˜Öì¨cÁÀúW1­Ù¼L{U;1$O¼JÓºbaO8¬ûyš•lòkÐôÝR+ÛO/ 6ÞFkxš=C$çž+¤²˜Ë ‰ˆÁUäÓÈ·+Ÿ_Zåõˆ™ŠâÊÜ“‘zWcá¹wÆGÕ­aU%-ÆOJ—A­Êc©â»ÍàÀ3éXÒ$"·duŠ3Èükæwº}€¾Õ~ÇNR›ˆ\V¼0„PÚ°UqÆÜŠŒn ýÑPbÄ`qC.r+å÷“Èã ¥´Œ‡Î5¯,±[Zï!G+‰ÔïüùnÍSŠãÌlb¦µf;À´ë„—$â§¼ ØqÒ›qyæÛªƒÀëYöh¢rî@çŠêMÊÇ`H'µÎ^—œ@äÕÍ*%r¨1W¯”Dâ­ØÍÂ’VÌwª¨#Ö¹^ïr¹W#,ŒpxÀ­ß ó6ZÜ×Sþ%Î8é^}in&»*Ek-¨¶u'Z¿q({^ù«\ÅfCÅumqˆr1Ò±&˜µÏjµ,{­ÃqYó0ÒFH®VKsç—\pjãÄdƒÐàă5j÷B’Ú=øàõ¬(­X_‡ëí[3éÆÈÁÅs\ì¼*Ý3ƒWf±‰­Ã…ó\õäLÿ/Ý<ç5Öx^ä4&3­oËlêC»LY^w Sï.üÛväg¯;ÔØ–Î:Ö÷…öùdqÏzÖÔ"Y¨Û++®;Wy¥JM¨^:u©2X’¹4ë[V–MÍŒÎk ¶UE 6Õ‰#¨ªÊœ¤£ ž*»’F)Z@±“òÖ$Òe=*Ä ´ŽM3P»û=±€Ç¯­qWS¤bprjkÇœ5«~0(ÀÝëU!R`.yûyÀ'8¬U̲1Š¿¢¨ïO׎=ï­eiºq‚k©ž¶[N#Ò¹RÆ9öÀjѺ•^8¹£nëñÓÖƒ?¨ëX3¶æ9Ç4…WÊÛÀÈô©4n/às]}Ì[­[¦qŠà¥QéÏc[ȲZòWXÁ¶Ý7Lf´ ¹\æ´m.3RHå»BJÊ»Y‡J¾$\õš³ »ã*qX÷ÆH¦ãV£_6xäsT.Æãµl¤Ý BqXú´-’vŽ}«:Âé­¦ºg×w¤_#¨8­I%ˆƒŽx¬¹¬LlqÓ®jª@c–9•§ šM*>”ñ¥¬„áü*­Ç‡Þ/˜ƒÍ[Ò?Ѥ­t×iufFàÇWsb`œíP9«SN†È©°Á][É%ãœg'бö™<§^ج÷ŒÏ½›ð­7‹iÆk½€,Öã¦zVuí±ˆ–ÀÇjç¯.^0õÇÞ˾b'œV߇§)/–u›C@ÌÛy¬Ïõož85Ói;¡ ‘šÞPYAÀüëQmÄ@ U˜”c8U‡(é“TÁÜ×ӥẠuªÓ~ï°¬Û˃£Õ{8Ì®N­Ä18W«ß™%`¬Ûh™ßq#Z·`¸º$àb¦»›íA{ ¹å*Ù66ⱌ ¹@@æ–[s$}Ž=ê{ò8¨õÙZx¶¯J­¢FVEb0v2m–ÓÖ¹MfÑ¢609<Õv%£Œ‚0*òHÒNÝêÝÃ,VÛA5‹ï&ÇdÄ6‘ÆqQiŸ%Øb1Ž•=‰2äu«¦"Ç Aª·*ñ:ò1Tn£Yw©¬ÞS8ènrG>ô¶í²§˜ñý¡¾•b$hàô¦Ý)¸”*–ö®Jî7Šb5££j ƒ'½wz}ÚΫÈúV®Õ`AÁVUäb™m1‹[ƒëQj–9sÔb±'ƒÊ€\šÏ¸°TBåFHô¬ˆìt*ÀÇ­hGá¥Ø£"­I§ý‚€j½§]aöäb´/TMnH§Áj»—N+™ÿ|Hç'­oøq±r ëë]SÊy\ŒUIŽ'«¤NÀÈ®²2LjCÅte7dNXÎ8œG÷Òª²àš Œž;ÕKÖ `tæ±w3¿8­+hŒj=ë/WÔ6!Û®BñŒŒ:u«P£@\9¥¶,%Ú0I50‡dä’3Þ®Ï*¥‰PFHâ¹èÑš`ÙšÞ[qäöéY7ˆ]—ŽjQ\"ª¨j’ÝÜ”À­h.s -eë׈„ɬ À˜­ B0â ÔnK£qI¦ÆÎÛŽ2{ÕÓIqž•D0†ónFsšêcìÇ#‘ë\}øÙ,¿0Îk>ÍØÜÜ×Wä‰íð d Ⱥ&6 œb¤Óä!Ø~5¯ Üž˜¨§SÆ ¬ùЫÆk.íp½²jM57†~tù­ÌaˆÇ4–©“â­ ¡5 §rF]±ÇÒ±5˜¹P7È·lOŒ ëô‹‚¸WE Ñ ä}jÆRàqŒúTi¬¿2ôô¨W|-œã½hÙß¶ð‘ï]4~]Ä@ ZÉšosÁÀÏ´2³E†Æ­`j0Û@õ¨Ö%žÜÆ@ȬY-Œ2ckbÆO0cŒ¨«w°¬–gåúW>„Äç±­â[> s\†¾cr1^>DŸlh—¸AÞ»%É æ£¼P"ÎFsRéïµÐî×C)hTƒÆ+³,„çGçOVù:jÙì*6á3޵X¹Áô¬ýBR úš©d60+NæO.Àr­pÚ¤îò¹'¾*ˆ¼Py­V@–{—®),Pº™4„\·é’HLmíÅU·U”÷<ý+qØý#¹{¶-+×8­ý# ØçÞ›|Ø”ð9ªFåÐŒְﮞâó Šµ!Ûn€Ïq$)l¤š¨Ä¹ ãò­í"b Š|À}¥Æ+&î5[À@ë]5£æÁN;Wª·úd‚¬YÁØÖLrMmع?/lVn¨€ÌHàƒU­˜‰±Ö´‘¶’¸®Z úsTµÀvÆ?*Ét§=¨´T¤-\ºÁŒ U+lÇsÒ·™G’§Õ2ÛÆ`ÁÍkvè‘ð+‘‘q)Çn•½¤¹2"žk«êÆ8íOµ•‘Î+møA#$T/k¥²1Š È"f Ú´´ëÙ‚õ´¯0ðîÀ­Ag;eÀéN»í7ÏZÅ·}³8Fv¯Õn±Ë޽*‚wQòäšÚ“D‹Ê^™#5‡}¥µ°Þ¸ÅRž=‘‚Tfª¢™¥ J}Ôcb ƼRœŒúÖÔxòà gëI¨\:Ùôë\œ®ÅŽqLW`x"¯$Ë$‘¨Æ{ÖÜaa 8殥Ú"a±XzŒ¡Ü¸ÆQ‚ãç=‰«Ñ…)æ1¨¦¹P’j 1äŠí¿y ô©­õF¶¶ Mqp÷Iò‘Km –­«íÏœ·ªÊ:ãsRdg((1Ôf  àäAúÒ1à€EVî=Z•‘•>\UQ;«œ…©EÒ•Ç«“h9Zcl'ªÓ×hÀhªyyÍii÷ShÀ"§’Rzãš"&xÍQ»Ì™ SÛ!À ŽYfÀêi›ð½°)s¹ qYóđЖÜe~mµƒ¯BTùŠJÆ’E’ jÁD„©Å:æÝ¡ƒ T–‘Å(ùÈÈ뚺R#E F;UVÓ7ÆúÕoìÉv—ÀëJ“5³z ´×ÆTÚ¤b¤…Wi9U{›¶ˆüœãµhÙê‹,8QU§df ƒš²Ë›u ̘˜¦$¨â¶,îÄ–àñYZ‹‡$µE–Æ®Š=J>iÀªWý¹¶§Ý­c^–^U(¥HŸqÅCuæ)¬½>âö«°Ë&v‘… Oqx¿f10×?2O£ŽÝä?(Í9 –ߌm=jüzšàb£¸Ô.IæyÚt1 ,? ± •ÈP)b·+05¨-x+^€ÐC2ްïôó —^”Ë)Bʈæº[hâ•0Í8Ù)$3Ud²e'Å@Ñ:gºUÁ:È#‘Q3ØÈúÒ•fèÜ}j'Êòj¿ÚY[2Í”=>´Ï-H$ã4Ï# ØTmŽAâšDƒ2$ìx«ñC!Á<}k^ÒÛž*ÓGž qJ@qUä9$¼SàáGLÕ3.à3ŠnÕ Ž*9r¨@Áâ¨ãsr[>NÕŸªÛ—÷ÓŠáCÑF­=5ñ(ýkSPÁ„@ž°³òŽ? Hç’ c‘šÝÃD‚*\,p2k:úÞ6ã5Æ`kNÚÛ’åQÜZ$¬FÑŠÊ’Ö[gÀÚ´,­íSÞ2¡XÆ:Õ{ËC"oP:t¬À'‚"G=*’YŸ®KÑ›J[\ŠÃËæxæºË+eŠÓ8"²&à†À÷¬«ûDÛp1Y_gÃÄkSMÒa™\.AO¸±X„Ûô¬éôy¤ÁEÁëUŽ—,RfDÈ©~Îr‘ôª“Dóå Yí§M’6ÓÓKˆÊäUØôƒÞËÍ$°„ €*Th ¨ÝQJKË„}*ÂCpTétíK,Î3Ò·$€\[Ÿ»’+—º¢¸Àê+SO»m¹ÝŒVݵìgï­Z’&¨Ü¸¾èÅFLS!k*yÖ^§Ža"†È¬o8á…·H¨Ìn*)"e#m= QÈÏ9Y°HëR¬ˆHÉ\T˜S»W­ÆGAŸ¥[_,0Éc°«Ñ8XÆ1CHsÚ£/ŸO£$°è=©Ñ·N}*Úä©àsH€–è*þUlã5C 'ŒžÕrÓ–ŒM½Ñ—Šó}I6j/Ó­Y°¸Ù"¦3“[³Gö…RÜ «æ0]°§Jc’|1¯o¹-öÕ…íã#­R»}ï° šp!ÝÆjF¸1  ˪×7ÆqíW%Úöaœ ÑdNÞqH¨&¹%˜•©±<°2½+ŸÖ%X¶Æ6ò{RØ¡fW 1ë[@L6:v‘z¨8Ú5bÆs"ãŒtªZÇ–ªàXs«”ä‚LVqݤqŠ·eq$Íå!À«†ÅÕÃóf­åCÌcŠ©5ê»aÐ5³F‹Õk;í1™HàšÚT@üªÄsÀ ÅN\•Û°©5¶d†¦µœj¹Ü¤ÔöV6ê ’8ÏašØSfªSŠÌ´¶fØÀ~5ØYFÆ,t¬}fÏd¢P¼VlSyä ¿lL§‚*üRÉ š°ì“/8ÝY·án8ôª· †ÕXšHŸ“Åi,›Ô2‘ÇQRG!Ï8©ÓžF*mƒ#¥#Æ­éT¦±,IZ‰lß}]ŽÚETñ¤«À54i#0V"µ#VŽ 8£p'ªÔ«>”IÜôüê$Œõö«y*éÖ–22ª·¤®I¨ ­$ÊgŽ}©—Cò+ÏuØÊ_îàsPZ0k¥é‘]-ÍÀvåÇ#Ò³l`Iœ»É&µD9H€*e%HÞüDàм‰dê3žjó¢Gl"«ZÆ%œž1ëVg¶H¤øQövÁûµm,Ä_(Ç5Jxš.¸ÅVžùÒÜV5ÔâãkÈG¥h[êðàÕrãTT€2•9¬£+\±8àÖ¥³ùXÈ´—:_ž>f°o¬¤‰°¤ms Ê¥¸5šÓ¤Ç`Ít–·,’8 ý+Cí08Áš­yg ‘ 9"DÊTžE$1³db¦kݒ´-m­×+ÅX–{X\Õ¸Šè¡sT峘¦õ< u¥¬—1°î*ÈÓeŠÚ±6…WKm,cåÅW¿³[„+Ò¹Û) ,¥xõ¤Ó¥d[t5¦·OÌV©O¨ÇðÃó«1_Á<@’3éQ±·ë•æ™+[•ÀÛDL‹ÆF _Å"õ£Fr¬1R¤üÀ{T«*ž¤UˆÙ@þ;P6oÆG­YÚ½A_Ê¢I‘ÁÁ©ìØ<ê§'Öµn1YùÃvæ­ÀÀàñš‘ˆoLPX`EC#0Žjžs¸Uµ‘·¯Z¢ Œ Ö¡Ûbi’.ålâ¸FÊž+ >Ëß…n¬åôý‡ëO¶¼- ¨PÝýè·™V6‘ˆÏ¥^Žò7¨§ý¤Ø)Åb¬Ò%ÞÓƒ“]Ð"ÕqŒãµ[©$akY,NåV,xü…>T+Ï޵—xHœb¨q:‘Æ*”¶Ä?yŽkæ·"%9Rx­fÒ¤Ke¸#+NÊÑ!· àgÞ­Åqc®M2êéD,A뙺½Y8ÈɪĤ°•Êâ’ÊÄáˆÇµ\[fwÛW¥²O,#"³ÍÑY#8õ®bý™nɦÛÜ\/AÅMö¹ä`¹æ®¡¸eÚ¦™5µÃ ·Nù«¶0DªÆkBi#gRЕf €Çµ\ò§=굎¤Rà#‚kµ´¸WŒr:U¬ƒž™¬ëèc<°R+š¹TŽÌjŽÇ•ÎÞ¡žÊCÈ=)‘Z΋À4Œ“g4¨’Œ“Oó%FÂÔâê`¾”ÿí>éf E!€©Væ&ÉH·hï®j´š¢#d°â­[ëhWÔÑË,ŒYO¾+SNIŸõ5³,™\{UøÀÈ©âŒãâÔM¥BH!Wšdšˆ½Fª³h€ýÜU´‰cÉÅRhj¼¤gµVšÒN¸àH×oP+§ÒÌm &à¾+¢Š"ª têy©œãž3UÆþß…Y‚A·±ü*ulž‚"÷8§*ÙÉŽ&è ¬ì/9=i)g$b®¦Y@úTx+Z±¾1+‚¼°– K)Æ9©mõYáQ£*+^Î{[³œ¨'¨5-îœxÈúUàš.jx¡vqÇ'­[ƒNmûÛ I­+~>LƒƒŠÕòRH7QCr`ʾ0z™fyéúv«+q«·"²ï¢Ý '®+:æÛËù²=ê4hçD Õ‹Ë6»p2³fù-a@Gµ­•¾Å¿‚j„×ΨQp*¬M-ÖöwÍt1D%½‰=ÊÇ+dcbÈBH¦Üêöñ©+"MVKÖÙñK$-ËcqšÈ(e¸b0qZB²ÄAéZVvI‚ÕÉâýË” W8ñ³Ê@ÇZѱƒaÀéKrí Ð#)«zßi,SƯ O»\µÅ¶É²p9«vSùs)ÈÀ⺾HãùH$ŽÕYKL½hiZAfÞÀW@ Xá¨{THBäR³€r¤T¡Ç T„ÜTL6H_jVo§ª'üµ]¸9Æk2KDy‰Âæ¬ÃeÜmá§Âä‚¡—Gƒa;@5Ÿh¢àà€Jé£S°/SdSŒ`f¨°ÄL™U' V¡qÆ@æ¬3½³@“n8UiÍ,ER „ ‘Çz}¿ž3V"c‘Ód!<ŒTE¿=Êê–a$'°Z¦vŒ€¬;ôÍV’ÆKvÊ6µK©Ÿ¸îM¦ªDÞUÁG5®—)å…ʊͼ†) W5Ÿ$H‹ò°Ï¥V]:K’Ù5¯§é1ÛF Æ{š©¬œG‚{Ö=¢²³nQ–éW­eX™ƒàÅh¤Är¸"!–xÈàP=˜†äÝ©aò§¹«ŸÙ»°îE5ìb…w¤UxÃ1TõXB’}k%"a.A­›H$‘À<×IcfAe¹o€˜F)_ •X&r2)«ïqÁ?JtÊP.6òjb0£‘špÜgÖ«H¥pr? Ù¶óŠƒ%yȨÊóžX'f§·FÚXàÕkéö®ÐW&—N‰wn$jùÊŸ/•8IžÀЧ*á‰àdñKdc¬GÔtéd2J“éQ¬…ú‘Ïjhe—=鬣=±K8©T`犷''¥p£'ŠÄÕ¢YGˌ׫[I ïCƨũKL0÷5.è.†A ’ÕÔ~èóê 29® `T·EiîI Ï®kV zeF ]7ÖrTU•¸…•o˜š„;Hvð©âÛfw)5$o Œåh’tLá‡çT$i¤™]y¥XŠÒk‡ &?Ÿw§’wFpÀVw“YܸpOzܲ½IÐr)“Ú¤Ód«qk*Œ)È•ÚLǑǿzO³ªË‡8b[¨máÚ€{UFÔqô¢c3—¡õ§\X(£Š£,9È*2=¨†I£8Џ—rm#h  gaæUϵ[ÀFvä ‚çW;1YsêLêrÑ%øÞy­BF°€O±ÓFšéí4ñ ¨Í^Mª0@ϽKl€9«Èàj¼@åÅQ(?-9ÆìŒ}(`ê2%e‘²Ãó©|¤pj«ÇŽxɨ2Sv‚ qVæÉÆ;RG8ÏcR5ÃämR),ß1§ÊÞZ¯JHÎæ?wš—aëR¡Ý‘Ç9èF3SB¬Á³až3õ¬‹§Ž‡5‰©Ä²ÂXâ¹iìþmÙR.)\ÆAqNhn­Ô{UØæQ™Kø¦Km Ó€»TâŸo¤mÆUÀ÷§°U}¨™#¹¦ÊgH‹Ç‘ê*¦û™NIÀµ+\OðAÀíN¶Ô%ç&®Å|¬ríøV¬µ¨EÉŠ½¯oýåÉ©[Q€œZÍÔRÖéI ¡«;†²$†~´äñ aÎOOz¶¾%¶Úcñ§Á!ãAQI«Zɜ⩽ÄrŸ”¨õn¶Œ ²’=jÙÔ R9ZiÔà=]xªòj6£ËÍWmZÙ û¦ }]€ýj¼º«äÃZ{í syª2ê.r@â¡’åäEæ¡Øäú×¢ÙéžnÑ[ööqÂ:.EYÛyô¨ÌbG#Š’Q±F1šV„Æ8¨Ð0cž3HèÏ#ÈA8ǽV“PXÛ­5/ß*G>õ~Ü£¦>´æ$tãÚ™>ݸ㊧·# «JØ‹œp:Öôûæò×õQ|Á@ÖäQ¼q 'jj(Ï$géOnÐj%œóŠ™m@=ªai¹I8ªò/ÐTlIêF=jh#'ЏX`®ED²rN –çj&¦úÓ.xRÇ+ž¾¹X¢y22qòêÓM1m=©“M¹*}*ç2a±Á®‚H¢•Gʸ"©5¤e™F8ªŸd>wÈF}©ÒXÜ6œU¥Šé>žÕ^Ü*1åGµWkƒ!Éϧjµ ÂÒàär !‰ !'µDÖÍÔ>*Qo'—À‘Qª\Ÿº>˜¦?ÚÁçu1þا«b +tÊx>þõÚÊAb¿…3É—8Ûzx‚|ò¦43ƒŒžø§¬7{OÊGàiL7dƒUåk•Æâ˜~ÐT±4ÕûC`u©9TdñOE…äQ$míÍ5ðwÒª3bC0+JÍa*ñŽÂ¬á=z¬R m©]XŸá¨f|qÅOëŠl¤Æ)ûwx÷¶% TwRìäV-þ¢Qx¬èÝ®[q zT¶ó4wI}k¥·“åÅYóWhäZ‰ÈnI$äb«Ý\yhBMeCµÁvèkoN³ v´®Ax^Ý1YÊ£ÍíÁéVÑœ’1éJSuÅH1€IP9¦\üꔈ sŒŸzj 8Î1VSñƒŠx$œS 3ÓÚ™ â®Û§ËÆ1Tµ)!ä{W«»á”ã±´ø–Y€lÍiÜYG{ûU[8 ¸!@È­%7 »}*Í„lÌ|Ü~4\D`œÈÅ\Šæ&Œn+ôªWS«6Ô  ®#\ñ¯>Õéöó®TjÐ÷ÀŠki+px¦Ia2ÓD3(Á"¥¥Œ¡îäåÚ‘oјEâ§[ûO»…üiuh7Œ¬níÜ( jp®~AÒ¡mEKƒåŽ)$ÔÈN"QŸj¯öé™OËÆ*“JÌ~sÎiø,¾µbÖ0ã"¤¸ˆ3í_ʈm3óRý™Käâ’ìÇDµµÝÎݶ¾ÍiíW2pqšölêqL2ÀÆ=i# ægŠ–VPÀ }i¦0Fì äS¾ÕV_õŠr¾§Š£{6[‚+›ÕXœ‘ŒU;k—LtÅZ2þg³m¬DcU$du«?Ú à=M#_)e¯^jÔó”‡#+:0óœU˜Ú=Û Šè,bòà=inAg¡a²xÈïMhö Žj))È#9ýßUëQ,Ÿ?lzÔ’#7Ìô¦’±®8&¦‰”/lÓ”ïrN1Jìàb‘P¹ÈƵ[B šÅÔ›|ø$`VEå ¸„€{W2TØÝ©lu­Û˜…Í eÆqéT´¨g%û裄ßlÙ 1N–(ä]¬qÅg}„Œ…TÐéáÜp §Íl¸*Àè+1£h¤ u© · ` ÓKÌWv@©Rã®Yh¡e%‚ô¬éŒ*ñ¬ùöô¦M§v$ÄhÖªÛGÉÎ1WB¯~•DvëO{Ž;úT°¬¦U|÷­Yf>b¡ÇJбEvÀÇÛ]úœ€c­u*¢8‚Œb©ÈÀÊ1Š$Ï­Z—í“PÏlJœc5°fAÓÔÃd#bAæ‰0ƒ›!Ý(éÖ®D9ÁÅYxÂF*¹”d©ô«9#ŒÔ›‚ÇÛŠÀ¹lܱ8æˆÐ;jÀñ-Ž‘@ÀïF“p$µT=EXt0˼ƒZVror•«Bb8 zÔk4féLŠ6ŠÕ §Ì¤+*·j¤ÐËo8h¶·½S¼‚áÉrŸ1<ÔQÛ1pYô­ˆb’%;01UVÉÚTb©_Ùª¾cUdŠFàšÒFnLsÚ¨Üè@¶èÈ%¶—,jØ8ÇJŒØNCe‡ãU˜ÉdÄ‘‘ô¨îõ@Ña3ÖªÀ|Ä‚*¥Ý×”ØCøSZ"‡ïUw˜Nâ”ñŽô¦çËs·5 „Èß1&­Em‹æûÕBîØ®vôªËä*屜T[Í<»#\±=k~ËK[0%œÞ‡µSÔµpþTXÀãŠ#“`Ê×µ³óÐqH£'pëI1Ú„ñY©)3©8Å>îl)Î1M³|ÂT‘šÅÖ%U˜ Šçn/7].Ê*Hb7SãmmGcÅÛ54Â9 ¥Bä— V”V°ÅûÉ0M8Ü¢F£>µ%´m4ªçZÞ´„Dår{TÚhòFÀ5©y7—F*Šº“Ž}«EätÇÖ¥®ð~Z‘—å'Ž=iŠØŒ€PšB’F+>y“÷qQ÷ààU°2ñŠ™¤<ð*%9›œf¦åºR< =3Xm–“Š»j˜ÍA­Ú‰l›€;W#§¿‘>Î1šß¸Mö§§Jfw«µÙ{ÕbwJ:|h ¡rO:H˜1¸ã¾j$ûb¶æ!‡aÖ¡’þxçÑqôv;•uËÇjr ¶ÑÍ*4XÀ¢X¶ƒ‘ššwCÁEUŽå%;”©4öcŽ1Ïj 'åǽP¸1ɹX/ãYï¦ÄÜü¸¤[X£B23Q6Þc–ÅU“AØ”`?‚ÿKŽÒØa†ê†Ò(9#wÖ¬‹hw µ,v–Àn;iÞ]¿\¯°¬ûù-㌑ŒŠ¯ ,SM¸äq[ÐY[ØDÎwz×1ªêm$ŒˆÀ Õ]*ßϸÜH<×N,—¥wó}ìpILqU®d#B2K)¦jm$b™gp<¾H®k_¼ÍÐU#5BYTœV”2¤à)Ϫ äsÚ£‚?6MÇÖŒPªsÞ²îg–{ ‘ôéZVztŒÊHë]-Žž±Œ¶2*Ë(E~”ºzaËdT÷î<¬duªÐ©#<~B´T°PF)±Ü3?ÌG´ÀŒr:URا5›w.é0:ÕR2 H€:Ô®KcqMyn1ȤŽL¿%j`HŠ‚áȈk5Né1Æ kÚDv§jo¶e\dkÏ%¢¼ÜHûÞµÓÛ šÔ:T)´”ã=ëKrºvæ™cÎcÇ·44LÒŒ¥2ù%Xº‘ŠŠÖiváš¡½fòÏr* ¢êU±Åm[H<±Ò¤¸Æ”¨@^ØÅR½œ:ùhÀ±ëX vÖlNp óZÖ”wk¹XÑ0=*Œöë)`@ªïdáNתSYÜpßZÏ{{ðÄ+p)ð‹Ë|4ò÷ɪ×ww0¥fÝÇ%¼Û”ŽjEyLa”犄MpN9§–•>ñ¬ËÙäl³ Ø˜aóß>ÕkV½"Üíojæ<¦‘‹±Ï¥li,%zûšÖûp…w²ÈwóŠ&bÛx⣔‚È⢀Ž•‘­K‡+,jbXÉW?5ÃÏpYˆÎ{ÕŸ@ùãµV{"223éM´µÌ€ÍoO X£ŠÀÖÈê™JÓ‰F®šÆðF:U³¨s]-̘9ªêÇÍ Æ)×w`Èæ¹ëAmä?0&°/oÄÄ•¨âÎuU¯‚ã$ ЋMYв–~L´ª ­¼¶GõZaæHkVÌ‹*ú Å‘Š'lÅÚ±çVc‘ùT–%€= ïSË’ÀñjRàc84b69ÈÍVº°y0#šŽDòÓ¨¦Ä熮#ËcŸ­*‚eÏRÝOµdjC 1Ž™=j Ž=j0Iœ1WJ‡Æ3T® 0gŒÔ9+ØV”Ù qWïX-›8å÷Ò»‘‰ÉÝ]”wiËÓ5në+gÎ 4º|b;p~^y­8äØªÜU]XµÉ@¸Á©´˜’Ðb½;Ó‚4×ãîž•Rópzk ÀdFãéSØ%°w«ó³; ŸJ‚ÎD嶃WŒ€ãdSC3dqUïPVGáX6G˹qÍn¬€Œ9íÍ6I62µFÿPD@¨A>Õ™ä5ÙÝ€ ÊrTc4Æ´1»1Áöªw‘*&åÀÍT´ºòK{Õ×Ôr§h Í$¸ÅTKŸ2äãsZ .÷@Àw {‡ Ž*m20äk©³ÓQâÉyÓ'‘[säÇœšÎiÊR¾¿VÕ#8®BúáÌÇ?C´Ž­nØÛ*:t5¾á€8Å]UíÆ*f ÄŒšk‚Ѝ›šVäš10$ŒÕ·L Àš´ŠV6 öªó9D ãªd‚qŸjtL^ÜÔÌTqÍA$ŒÝê*?0£Œc­[†üH»F=óUæß$¸ m>”ÖVŒe@ÅY{ÉLÕ͇fp3Unb.€à*7b¨»±Àé@bÀ1Á¢)b`z𶲍$îÅFøhIH=Åfœƒ´`f¯Øü²ÇwTŸm‹ôàq^mq–”Ÿï5ušd{,Ðj}@mŒŠ§g$ÎÛw /µ^i$‚60jYd ˆT¨»™A#êúŽÜÛFêP¤) Fy¦ù ±¤Â…Æj¥½Ø’r¨qI|ëåÌ:ÕQm†úÕÞ˜ 84’*ÇJæ£Äz‘BGÖ·yË‚U¸²9Èn½g][ˆöA&µ-¢  ÔÌ–G{ ʘ|ø8ªÓÛ‰báFq\ýý±·Q èzÕ»H£{_0²ã•P¹•§&§vßLò-·¶7u§$m÷±Æ+íÿÒ{úÖÎ…§=k­Ò8pXg·4 9ÏëW'¾‰ªý+š¿Ô7»m V-ÅÑ(@`Iô¬ÓûÙüëJ݃+SIÝq6î6ƒ[ÌãΊ˜ÈE6IŽp0MJ¬V<9–è]‹qÏzeÂí•O±bÃhP3ºº½8íTã5vHpQ±Š‰,ÒÂPÞJˆŽÜÓ-$€IÏV³ (qšKyŒ V^™â¬%’]Je`jަ¬ÈÑÆ@@9ÅdÙ²C!D?1ïTõVs*à÷æ¯Û,’[.ïZ0Æ@äŒãšCç©ÛÁÈí\mü‚-`ŽMtVó~ïŒr=*;»¨à»¥bÉwö»•ÛÓ8ÑA#Åä)àsíY|Óã¥"ä.2µgj°y–„p;×/öÉ-ãhAá»VŽƒ!àšè/-¾Þ3Y†}¨ëÆ1\ܼÈçŒçŠÚÒao$08&µ€˜67t©|Ù½ER¸º#†"±înwÁKÍgйei¿ @ÍX¸™ö/Aí]&—[Y “Ö•¤&|ñƒV^R:b®,zqS°ôÅ2Úª÷o˜tÅjÚ1Œb´PzR\¶S Œcš¡1.˜àš¦ñ¼g8©íÜ‘‚Ö­\ ÍÜ1Žiëo…#ޫݧ”T95>­دÍÐ}kV :`c¥\‰B#dŒJç/”5Ã)íT‚0ð©¬f>yka$‘ŒS@ ¼ ¦±n"ýûpÒ©¡•'äå3Z¸&ÝW1â±ì¢t“,¿¥u6H00hÊ Ø5 Òb&~:W3u,³ÈB|Õ¯£[È#ÜëÎy­‰7ÜAÅ%«›ÙÊõÍkßJÄ–ð°ÉëƒXºŒË »(#'©¬KXæ©5¦C´Öµ¢ˆí6múô§.F3Š~î9+M-ÔµÄë(N©»ÖÌ74fÀ8ô¬™–{çr9QíWô}9ÑÌŽ¾ *+€Û9Ç+!œ †ŠŒÈqõª„¥¡+À®2úIIJÛð˲³ƒ€=ësP$…É5Öè¶ÜdŠåˆ;°1ÖºM4¤h€ö­_62ÑR™bÏÞÍH+Mf_@Èsü>µZÍ<ɹé]E¥¹Ø0¢¬Knª€àf´íb&ÜÅ*Ä<ÑÒ´áBð4ò¸r8¥‘G—œŠ£Â‚03š¯·÷¡N3šÛµ„¬YÈ©9ÁéÅ6MÅzŠta Ž•)Œ:c Ò¨J†ÞaòŒ½lRò üêe#¦j­ÑÜNvŒUTSž@«¶ÿ*’ÏÒ§´vmûˆëÒ¥šä¤}Ees4ŽX€MQ™'Á ⥷;[w©cv$, Ž:ñS+®ö*FMP¼eàzÕ-¹`x¬jåadÉ&{öåb wõ®ŽÖ"PSÝ;y b³îYͱQŒ‘Ö ÓìÄhYÔMl[¦ÐqŠeÝÄH„•kJX–Õ}³NŠ!’f#…sºœ.ó¸lÏ­,wÁ2¹×¼ŽR»@&­Ä[)œsÚ¬Jv9Î*¤“Ÿ;¨8§®p[Ž+‘ÕÜC Áô\]n‰ (•©¤K Œ”׊ݸ¥7ç¦*µÄ¤¡éÅs—·g8À'Š|Í™Ï?ZŠñ¶ÂIïXeêL8­[ [Äp&¯]Mº$lJ†öì-‘E œW>¤Së]=œEÀ«mdÄek6O1d#=*H-üÇ*‡ˆPC¢ã&ªi6ûÊä WW¤J£"9È8àÖ¤Q„c*8T™JñšÕ0˜â¢¸¾´Õ €85Q™VcÓò¨Ü"È JØ´œI1Rùr1íQ•ÏÊqïJfyZµ(ä{ÔZ…¾øƒ€2;S-YLX,ô©™Ëœ ¼{ÒÆÇãRåö˃Žj3žÕ¥dP‚ Ê­lXÁ5Bäîb21õ¨`P[ ¤»·Éc5U—äÆ@©4µò̃põ«6!IJn ‚jk…\·Lâ²M¼W3â"æm Uß[‘HÆk±€€¸ÈÇj†êA³ŠÎ¹º#b€¼u«ßh·‰Êï5rPàsU&Ž7ºUÀ#9Åh\˜ã…1ƒÚ¤¸uŠÀ ÀÖ¸ûû£,žRE ±ßw.})Y¼W‹’Öà8e$;U›¢²D¬¬µP×d Õ¿/þU‰s¥›‹Âp1š³ ) £jϺ³6åµlÙLe…IÁâ¬ìàò¬mFá£Bªqïšån$g¸Sžõ»0ªš‰ÿGÀ#¥eX b´íˆ(:sVç´a#µPº€­¿=ë:5p®ªÄ£éZ/!H[Šç%¸Vàu­¨â&@Õ­De¸N†®XÚ¬Pƒ€ ^1¶r*ŲaKfµ#­ÇLÔp&&=+AX.:U{¼•$cV9HëÚ •¼É—š%…·)'ŠØ²B8*úG¿Ð{Óš— :ÕY²¶~”ûGv8 W[ B§JÈU&d$ž•e‘zš«qéTœdô5JâA uãµ°œœÕ¡'8⢞mèT`T1 *Å!OßqŠ’bÜ V‰ÊcƒŠ¼ŽW­ÆêÊAÆ} T¹Œ@"£†=ª[#5l/‘T.à (‘zw¦©`r1ùÔзÌsŠK„Áâ±o¡.ü‘Ö´,\ Q•Æ*[£™Aã§ZŽ9ê+B$ € ©<È"²oABpáYöä‡bq[š|¦XÉÀâ¬2eóÆk&ì´1šâõ¦ÛŽ9÷®“AV6ËÓS[ʧol:ÔXâ¬ÛVä)³õÔØ»T§š[yL:pn:U}>馻ÉëNòB² \g­T¿—ÍuSžðU檈%ó²+Ú¬$Î.@8¥—†pi^b že­À{²8&¶­Ô2ÍIp6EÆ1U ~1Ç>õ¬¹iÂv§¤ Knp3R\•U$šÂ»_0ü¤tæ±&‰pr ö©±ëŒSdtQÎdjÃ Š½¢ G¹6œáX©ëX÷Ö’E$ñX¶™7£8à×kg ˜y¥eê«6Ü j¢FNx®²ôyqž™ÅaFwKŒ]lKÓ¥9‰Áät¨°Í1SDH\8ôªó“ŒV×t€c¦ž ¨ÐrqDjæq’9ïšµ2adì ÔrçO0Å1œƒŠH²Œ:=ªâÇ»=({mñqJÎ1•$qǵB²üе¼3væ³®× N6Ý™Hä~um˜»‚1ÒˆN$ä ·!aSý*D,UwbªßÆDãšÄˆ/Ò¶t‰‚/=«Q!ÞäñŠ­}f0Ì1º¼ÛÄyKå×K 9JI+¡ˆîˆ9ö¦\(1Ž*¤·B%ßÇ«É1½´ßÁ Õ…h~ȪåqU㹂+ŒF£íV¯•Ý£•*ƽ–uŸ8À©mRi˜ÃåíZël\­8ü¹éU›vü2h1–6+6±|öP²€1IpìÑàc4Èr?:çõ’RèœqëU`Õ'ŒmíÚ®£Is bÜ·jϸ/›\à{Õ+€«µŸZ{8òÁÀÍg»¥<€*„ð“6ß~µ½§ €ï]Ú£* Ò²u™Úž™®ZÜu¹y5Õ[ݼVÀ²Ž•w}¹ËÔÕ_´@k¸ÕÎØÛ®jÒBgÏWGwŒ" `¹8¤/ûœÅ:Ñ‹ç=)f„î +BÖ2¢Ÿ9 „€ªƒg‘ÍHèAB¤{Õ‡ËÁÁâ™jÊ&ŠÓÁœcµaÚ@#­Dì '#޵b7R¡Å_‡-Ó—Z•Ûj´b³g„2îPª(0ì x;OT¥WÉ ×ùÕ›fß&Ò=Ç–ùÀëÖ§Y G´‘š·àŠ–â2€µÎÏlacÀ©,åÜšß´Hå§Üdn+Ì|P˜¿ƒŠÛðò3Y©8®‘0‹ŠlŸ8aÁâ±µˆˆÅGe“fê1ŒUd—3ߥZÒÀ ÆLezf·do6#iÅSš-óǹWÖ¶˜A¢…´É í1ÅVÛ»#éQH0ê¸ö@¨È¬¾ñÎ5®dGÀP¼qLe¹Å «’ÀŒýk>öÚ+†ù€ÍR:|(ä9éVáQ78®ZMíEc¼¿"(=ù©¥oÜž9ÅPIDr|ÀsÞšÒoq€3žk¤‚0–È ‘M[Y^O•‡çT5kiR2IV>ŸÍÎ[k~êáRÜ/:Ö0E”qŒÔf5ÉÀÈ®»ZŸl'‘Xö<¼à×O,h ‘Ò¤ÍÎ:UIQ‚‘Å-“a±‘ïZ  `áMM‡iPE6g…dÕ8£>c ÍO2•Ç#Š~KGÔtëU휑ַîPr?Œ§’*¼€«0æ»FÓ‚½jÚJ`N–Wp@ÛŠ‰@<géÒªKÜ\*¤“”'âwcT#‘Œ}i- ªôª$ÇJh;=kN/ þu÷g¥djPeIÀ¬W0F[Ón1(Üøvmê0kÏü[¤û¸'5£áéWìj8Ín ŒTÑ0¶*¥ìI(` súUk+/#ŒV=Ð"û©a.»)ô­ëº2Ôë€G€:Ôó䪑Œÿ:–×e[‘Ô,‡‘Ž•BbÆaŒc4²“Ç®+6Hd7Õ~^ø­Ç”zŽG~ç”"¯'ñ¦¢g'#5‡t½½*f!bíœW ¬Ý±¸*¤`Î÷ºÖ‘ÚÑàñX×N„uÁ«Qù’¨s[“Lb íÞ¬GsµR1Üæ©j÷Û¶Xf°,Ÿgеtï)Âô¦"‡-Æj·œ»]N»ˆŽÚÉÓY‘ÉÎk£¶ pWŽõ¿¨Ž çœV}ÀÚÍœsQ[(YGO~jõÏÈ3Æ*²Îò1 Æ)¬ÔžjÄ;GR3PÝJÏ&ŒT–Àí(qš®Ìb¹Ï&¶à—÷`’3V=½½ª9" ž2¥Tš&Vb§µf^*מã8 ic‘z ÓÎ%S÷qT.-rxÚª©eb©‡Î1ŠTƒkäšDû€s[ÈFHjÜNSã5~Ü⢾·ÝZç.â1’1U`&9r1ŠÚ¶¹Ê…8ÝÚ¹ÏÆ,@ªþ•|­¹Ô)ŒŽjuN8äu¨fÁBxɪŠJFÇŠÂ/¾ø–éWŒÊP¢=ëON;bã¬Ì…¥R1޵j ®Á[ÇÚ90 çµ8¯?6*œÁL«ŒZc/Ž T:‚bÀÉ©W¨Á,€nÇSR¶"N:õÅB2ëUø2t ü»-\îÇÃKûÆ‘Î3šŽÙAbÀ–¤–å<±Ú³Ä×ÏZÞÓ-ÂOœ;U렓ΈÏJ’M)–<«qX¤ š³ “ ·ŒŽõ½c?ÎÃÑj[¥sº<þMÖÖÀæ»05uX6 Á5€°í×Ö›°yMÈÀÊ]H ¸gì X²•r0O­tVíåÆ*Õ¹R~ð {Ô³Ž6GµCç·˜9X.£Ôkv&ùGJR­¿<{†eÆÑŠQ…ÀÎ*›¸ÜO¨j$µ«ƒÅqs«)aÆjHgX£e`ÅfÌæi íÚ¤Óã?jÚ@ÀõÕÃHw€3Ušëý5XðjϪ'‘é\Ýüþtm!è:V,DµÚÎMt¾`ŠÓ8ŠÍ‹|“ö<Ö¨,®“ZÉ9År¶d%Û:ñ]E­Ï–³ÚžÓË(Îxª3|ØàÕèdù5bIT¦Þª*ù¸#¥6Y‘•˜)ãØUëX·ÉŽú &‰£¸ãmÐÌ'8¨ôé (ÇÖ$CÉc>• îqNQ¹zŒw©!°d¯Ò«\B˜8#&› D ŒÖ‚¬§ ëI $dHW1€GéT®!;IééÅ%³†\qžâ¬+rU†=jÂÜ1\2{Ó$~s…«V‹æsÅ\ivU¿¼R˜ã°œ‚Nqš¬[c©’góŒŒb¹YÃ[^nè3Åu:mÂË9¥æmãÒå×Z#Ò¨Ù1Žïf»% ò¼ IOÊsŒÓÈÏJºƒtC‘ŠªÀdåÀ?Z|$¨Œ}jÏ–¯Ç [=)¾XÁÊñëU¦H#Ó¥eù- ÇŽÚ¥vZ™Ç4¬NqÆjյɈ`cÞ–ò伊£4¹À8ªÌÞ†«HàñÇÁ. ª¾øw)¾•yäÈQˆ®–72Ž£T»Ê¦8£?èùÈsY·¨—Rã­r7PîŸ+Áή‹F²e›zè­¡%ñÆ=3Wü¡¸t£•¿zW¸§@”Š˜¢Ú²u ±A#œp;Wë%ÆóŒ–®¡' …#¥óN•ã´Š7w¨%N3Ç¥dêØ¬A…rRM¡}jŸž¬ÃåÈ© ŒÊäqìjÕ±x§ M[:Œ§t`ð*Å¥ç—ÈÆ}j=CXóËã'Ò²çºiðH°BF@=Í_²¸pfšØ†ëpÆÀ=ñVLàvgVbalÒ¹¤\ƒžIÅubl^qÍlù‰ ]qš¥+5ÕÈ>•R qRÛŽ8©|ï*à0PAõ«^OŸ&ð8ô¦…ÆU“18Ûôª®ìT–¯ K*P-­H•À-žÕrÅ—î¨Ú®ó¨¥Œ|øã¥ZRR0r9ª’·ÍœÀÔÖò–88#ëVãfü´­&X9§@¨å_¦9íH-P©%Tã¥eN¥ça´`t⫪Ç#¥áTÑH#?Zc1ßÏJ‚Rwv¦|ÅOJŠDvª_ÎÆÖ*—+ U6Ó– ÍtZ]ê•@HÍkï¤äb«‰‹ƒUaÓ!ÆÖ¦Íinò‡ã'­j[:&ØÔ–­Ápb¤*ÛÌÈÇøT ÊIb@$TqÜ*`qV’ð¸ÅbxšõÅÀ u¯7‚ûÊ<œx®¿I½óàŒÖ XñüªÒñ9ԑΕ8ÍS¼ºP3¸ǼœI Žk½ŽE‘€9©¬Ô2b+ZÞ Çò«ag°7a°ØìgëNv‚Þ-ÄŒã¥bŒÏpdÈÛž*ÍÄ,±«),ôË›Ù2>ïzèí49"PväÕß±´M´§_jx€ÿvŸu ’gÊLÅ&ä oYÝ£úÖƒ3ÉŒÕûh]ç•S¹Ìrœ‘QÛ?ï¹ÅhMra”¨ö«H6ÅA8¤HÎÁŒ&VD³nnI;8ZeÚ¤`Õ«˜Y£$⤱m¥rEm(ùOJùŽäqR;@ÈëQ:u9Þ ‚gY­h¥Ñj$F"›ç‚$S,£‘Ÿ©«18e= Fð(ù€5vLSœ¨µBxLv¤TØsÒ”üÇ#G–Ç©V×rö¨¥³#Ž*¤–%NO>õZ–^1íT.l ©ÊʲA–ÒR; Ö¶Ô„¡P‘Z±ÙEWš1àôª/Â1Ç8éWlD‘’ÏŒÕÈwË;£¸«Ü®9¨ebÞ‚£’§‚"_˜\‡‹µeÆÃ'­q ì8ÍtšÃÆ0{Œ×E¡Ê€&µ#™LD–úÕ évǹXdV5Æ ­†GQYw—yŒFOJ¨‰æ œsRýŒ «1c ¿Ôª@À¨®e‘Á#±.ƒ¹*[Šu°!GÖµí`’í•ùkµÓ4Èà„ £?JÖòpŠŠK_5òTp})ÂÄc„ËßÂѳm=k–ºví u®“K^l â·£SÇ5h•í~u•}Œdc#½UI|€=jèl*³ ùNÙ©ÕÚ(¼ÃÒ™y;\[ \Þ³$„),Ø$T1F|ÍøàVúà ¶Ü B¶ä`G¥]ŒåvœO)†ç)€Ã¥>Oºr*b·8½)²GÈhÆ÷¨'°hAuäzS«¨Õ;W54kåÅž8¦,¡Î ¦JÙ`R¼¼D62FzVEÄ&<úvª.åô>µÁ3Àæ±.ôpèd†ëXžlö²ÉU¨5¹€IǽmÁ­–AÊÓ—]Ù»IÏ­>/†c»hãÖ©]x (m˜Îkç^¸¸Sóí_j¡+Í)NâjX´™^@òcq[¶ÎöñˆÕ@¥dj72¥ÓõžuÉbp}ê»27'ð©†Pź{ÔrÞlùCj“I,Ò`sžÂ¶`¹’a [×5½Œ÷G-÷Q[VºlrV´E³ªS–ÂY>m¼Töº~Ù²@®ŠÒÑ<íéSH£?.8¨ÞS’X” ˆÑ–*x÷ª„‘‡¥V ½Xù³Æ)éo#ôâ”é3È0©ùÒcÜô+Çzš+ `pN~•kÍ™HPJ—ílˆ2ï¥fÝH&,@ºÖÆï!Âõ5~ &Y ƆÒ.ó´)Aœ äE®43üÊ uÚv„ÓFŽcjÞµÑÌ AŠÑ[Xò2«R-¢H~è¤tH“Ò³ŒŠn0Ö´Lâ0Óša¸3‘šÎžô†ÆZ™5À[†d|`Ž=êS*ç¨?s3“æ+XJøâ¢Ó‹$›=k®°U1v¥¹•Pð>ÕTÎ3Z¹s~cµòPk6ØŸ79vå7DÆiñZ?–žcr}*ر eÁÏZxÜœUÈ.ŒQ²qÈæˆM°‰üÌy†«ÈŸ» b³­åhî6œVÔ’ ¡ UŽ0­¸W"©Ãg婆ΠÕdùKŽiI`Aȩܹ8Í#eGØÐ¼ƒ8Á©ÚÔ#®*c» Ûì±95<—+@nï= Bž)ŽQÁ!Fj‹Ž1,`¹%Gµ! /§\£Ôõ¹ *1éTfU”’©‚}hŽÑ±“‚=)’Û˜Ï Õ[‹RÀôÁÎjr«¬i­ŒM˜ñǽ[±ÔV,ÑÆº.íåA´-O˜öýÐjÜ»` À -³9_-j ¬¡9;Ò¹öû=Û¨ Š›N†)®`ÖãØK5ãµ1ZoºÑŒç½OäÜNv,x÷Åni^MêóÇÞºD¶HUö¡TrW A¼ò´­2B¹sY—w…ȬÑ.ÙIR4ç»f’œ÷b4ÜØÅg½úÈç©¢”9ÎEj[8¿ZÐ ‘“Y7°yœqšæ5+WG±€i¶Ä#©àÛ·™³´t¡Ái¹«iØFj­ÎÒE6Ù3!à}*ËÆ[¡…]Ò­'¸s¸çm_“äÊ8T:í¦Éj2 0faOiFÂÙ›!à8#´mäãb­„ÈÏ©ÐqÁô ·@?¥1ò£¶=*(سðE]D߀1š²¶ç²Š%€lêVŒ—jãoN*"—#;C¹k&ù]tÏ5ca*Œ wïV#…‚g"šª½¿LòT±ÜEA,WH<Á‘Œ-HWj@ªò¾ 5´€.*[…I! šÉgeR¬23YÚ’+ÂXâ¹i¤T“ƒøÒm†î‚* á|Å'OziÔï#R7f…Õ®Ç\t¥Äf7ĉÈ5,þ*B0­`_ß‹·ÜNÓ/^ ”<`ô«;˜®`FùzUõµˆûTÕ»khÁÎw«hË€EO$ƒn8üê„÷þZ•sëšÎû[–ûãžù¦Ë8Ç.*”—äîu¢)"f+T¤Ô`ŠVbÊNz ÇÕ5?勎õ—ÌìIéŠÐ·¾–3¹‰âºM*øJW=ë¥Y¾QÍUÂÉ‚¬Mq6Æ[Ž+Ñ–yT8®’Î5 Ôg St©0b'ƒYqü“õuP³gŒZzlíi <`õ«×ÞS¿›¸JTŠ5$2š¤×©Ž*v'¨¤i&ˆªòE4qäž•jÒìJBœk$§haŽF=ê]í³¶*¼¯ž21KhªïÛ"´Ò3éV‡Q÷F:ð)®ÉŽvóYÓß©À¡Ü–ãŒS£rÄ*ô2î8ãU.È,©c@È=*Ķ2>•VI#ŒÔñ§ÎI›*S÷qQC„n)­e#J[u'Tb¤Ž)²9E#sT.&]‡~Т°ïîË¡DzW3qc<²nÎ{Sdµš‰ZÌ•îNøöº‘q‘“Vò?/œn¬éå !%W¦*Œ±ùGZ±o§4¿xøÒIoöWÉÁúVÞŸ­UW#½tÐx†6Œ ˑךԵ×c=YzzÕ혗ø”š£u­è⪛Ôa’ùÍVŸPŠ-¼gë\ýîµ4’>ÑU¢»¸‘Ko8oûAÂm/ŒÕ7.òçô«)l¥Cµ,P¬C;ASÚ¦h•ÿÕZºDN±d®9®• cš`”ƒŒVv¬âX湋"b½Èõé]}‰Î:dÕÉÔ/>n)ÃRºÜO½<ÝÝ0“M’öàts­:)$™zî'©4øìyG˜@_AWå¶X¢ ›j²Û;F8§D 'TÁX°+ÐÔ“K±B dÖ–›mòîaœ×AiÈDQÍk%‹”òª—rx¬{ìÆ¬+›I@¹s]fšÙ x5vöp¤cž'cÐt©Dß&?g™o¹qšu¼˜ÂœsZsÆÜ?+-Éu*ǵ=SËÇ f«^\6ï-¿­:ÒÚWù¥³Vä³+ð*Ô1ȰœñX:ÔŒŠÄ€ úQ£jT ädw®–ÚA°f¦÷ 5Pëž8éVíŸËNOáVLŒò*ÚÇ3­G,{XŽ9ªÒæ2@5s³œd÷©!bF2¹© dqŠŽpÃzš €­´c8­(БJ€(#Ï­G$€ëYw×$8Æ>µ_íÈ…E6 »P Vû\’0à{ÒÎíá0Ùo<֥̅P†¦Ð4£)2AëZwÒ­¶@*N;W:ÀÞ]Ôf¬µÜ£˜¨¤´XŸpQùT¦ ¨bU¨6ÜJaj|ñ˜‹*Z†(>RXƒÜÕËåj’[Iqt c­vZù0(ã V­„'r¸ÇZéV0È¥`˜ÃäñÖ³5?1 +м„ÃwÓ·¥ÜüEk´&q¸â›öp½@Å#F§å­+[Oôvàr+&SåKŽ>SWD¯<{8Å$6ob1éTn&‘ç*8ÀÅhG¤7”'8oj·ö˜ÚÜC´ž«ç[<|dt¬ï¶ËòN߯³ock¨Ü d÷¬­5&‚õc+ÎqÒ»PBF»€Í\FbãÒ[Ã9Ôáq #£ EÙzUä@Ûˆð7 f³f;Ÿ*ŒïcéW- “€iÒ¼x“&W“…ÜzVMÆ‹%£AÒ­éšÅÅ™Úý+³Òõhî0C ûÖà›pÈšáå]ˆ¨Öv'‘‘TµB àV"ÖµbrSÕ$c>qZvà"‚­Ë6ÌG"°ÒøsÚµô³ûƒO ¶b¸È4ÉŽÙ”Uî~{€Ò²ïŸl…@àV}ÝxIìk®tK«~êäç#³‹Ï~;Õ¡auö¦4+€(•+1VÀƵ2Kù~èj«,îW¯ZÕÑ_®F{u­«–PpÀ®ræw‘ÎO•£¦T5[™Ê­Pžvò™qÖª°ÂO¥r°9:’¯l×olÄGŽÃyñ·îŽ•EÀÀ¬{éœ6Ðp+&áÛn Ȭ»ÈÄ‘>OOJÇFØÁ1‘OOÞ1=1Vàþ8§<Êã5µ¢_Hà†Ž3]]­´S½AÍKw¦A1éSÆ€BóîjÙ0J {T±7Ú0)/ôÛv€¾Ð@¬›K‡µœÏç]…¾¥/™½kÿÙnip2-8.7.0/share/nip2/data/examples/1_point_mosaic/cd2.2.jpg0000644000175000017500000005653713224651032020254 00000000000000ÿØÿàJFIFÿÛC    $.' ",#(7),01444'9=82<.342ÿÀ uÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÚ?ÜDZŸìQN€ä UK)ä0>Õ^ %ˆ$‘‘ÓÞœúD§îj³¸EÆÎ 4Öܲp*+‹’ì.;Ó#½È UèuRÝúT¿o…È$VQã”ü˜¥’Õdí5RM># \Uiôx¤nQkQÑ#ÃO¥aÉ IÊïU&]FÕ°²7çWtßßé|Vü^0[¶T“åõ­»mjÞyÔ+®õ­ÛkˆdçrS.7dm¨š0Øûµ JÅlI+Çzä/®|Û‡bG\ ÔÑíÂFdleªôã Û¨\Œ¹Á®wÍù›#ëU5½U˜ˆ"o®*•£²{žÕ¦·,YÝïQ2Ü’sYwìQIr6޵Æ_È'•ÈÁôªqª–ì{ÒH„¾@5<# Vx_ÎÎ ­‹9Ybe Õ«£«=òŒ}+ÑôxˆÜp1Ž* I|pEY—÷Zfr9¥f-‘ÅiܪÉ9jKvX´æo5™f7]ƒÆÍijÌVÐ Žj¶œ™Ÿwòò~õk*‚ ñÍY¶¹X_jØ‚è ÁÒË!rßv³5<žàW;9Ï¿­u:F,Fj=QÔ°  ÚŒÃ^&t #­tIƒ§JÑ´¾ûD Œg¿4ˉQ$"¦1´`î\Uˆö²cp¨.PF1YòIµ2ªåƒ¯$R¡íO)æ!Æ* ¬ø)ÂÊN6àç֬Šªì`v¦I(V MŽéqÊ©4I8}¸U=jt³YÔ–Û­@ú,eº® áÅ##—s¡Ü€úVtº{ÂÜ f3œNŠì—ÛÆ}êü`¸Ë¨ÅfÞ,M T"¥Ó,ó9l žðùW ð3]œ¡í”œtæ »#fx®oVc!U\c5oO…R-Ä ô­›TT^Ç5i©'¡žè¬À X!ÖÞÜå†êòëë£uprzžjlƒSP4~U© e‹dâ«y‚í€$qZ;8F1ÀíXWwé ƒÅj²"¨Æp+gE1ÛÊøÁ$b»Ý4û0cŒõª·Ãußn´ë£˜ÑF0jõ²…¶¥Wy32¯íI‰‰WŠfœ¸Vn* @3^/B+X’ºpÈŠv’G”NZ}Ê/lŸÒ¹¿Ú)¶äŠâm®<‰Bk®±˜OnWŒŠ™Ô>ÖnjÖàÛÆG½Yó·dqP]üÑN•ŽP„9Ú¶t™s \ Іý¹Ç¢+ çíQY×§Zè`ÅdÚj l6‚3š’ãRiÜŒÐ>б†#¯¤‹Wž×†éïW£Õ…ÊïK3Ÿ)°2Ý7®8­­—Î*H„K&sRMå—ð¥wWXÍtE¯’¡™F}ë\º«`b¨jxò æ©XMä¡cŒV^«xfr8Æ{Sm]Šìb¬ýšFˆ4¢ÕŠšF¶e^¸>Õ¬JaB™«¸˜´„qÍB¬«ó0:ŠD•L£3Ò·c½·0,cšÂ¼ÝæîÝ•< ŽhK…dº ÙÑ¢Ûi ldÕ]I eqŠ}œ!\œÖþVWÈâ» l[ãëIrsvsŽ´‡æ»bµq¶0xÀ¬ø”½ÖF0iºŒŸ¾Š»¦?î{TY"å¥È=jÔ²}¥QFzÕÈa•ÝŠ‹SÇ Å`^âK7.k‰åç‘ÞJ–Ú-‹1ã¸ô«¶×Û$Øcë[P0¸ˆ®FzІ9ZöœWÚA"ŒQê ¶Ùp@5SL$ÈÄâ­\dKõ«rm[F3K¤îäíUç¸Úä `Vã Ž*{ÂäŒ覺ŒFŸwšlÉ·,vÖ]¢æpF:ñŠèŒ«°+)‘iA Vº$B áMD0e#"¢•pÛ€v1’0 ²Ê¢2Œ03S@ûÆî1ÐUËvÔ2ǸÅUl"Ž™«ÜÎÂ.ÜÓ *0æžÑ¤€mÁ'½*éÌ!$žÃ5Qà•¹±µ‹æò…¸#8æ²´»C$û›k§UWL‘@|ä ÆÕ®À!ok5fw]‰ƒšHìüéðÝoXXCg Mià 8ÁUÇÒ˜ðA굑«][Ú¡a·¯8Ö/MÝÁ rÄð*´¦1y²cëTš$1ÉÀäã8ªööàK—Æ;S/k`z…’ž+V=Ÿdb¸$t5nÕ‚ÛÀ'©¨ïcVm¼ŒÕ{|G9®‹Fɶa]žŒv[*?3}ѵtxVYÀr¹¬ÛÉÊwôÍfÇ#3³“Å=Ûqê+nÎØÃp8©·2®Œ}k#XÔŠ©Rk‘Ú×s`1ZV…~1WåpÀª—%¶eHÏzå¯å?j1ägԚа„$`5  ÓõvÜe€Ú*èpƒ‚½=kX»eˆ²°k€Õµ‡¸%rN:Öm´-ÂË€G¦zÖ•ö ¢ßÉ)XŒÊÊÁHªåÊ)zqQÁ¹˜EKqhRR˜‰º!µVZ@ˆaÀªßi}ìXçÐÒ«7ÙÔ¨œ×M OþŽDª=k®²E»ÆÞÕNŒÝ?#£c–·šØ’LB~ïJ̶—c“Uå}÷ 8äÖ’ñg94 aUm$ò/_§Ìkfe2í#•U»F{GW3(#9À÷¬kÕ?iIàRÜ¡‰F3JìgµàŒëXO,–÷»gšëôkÑuÃ=«×逬»sY“NX…8­½. 8Óõ¡»f²„»ˆ\ ×·Ì6ÌN9–îK’Gz~£.%Ç“-Áóyë]N"Kkµˆ­K›dR˜çµBlËÈÖ˜«`úUÔûVÜ€ž{…;㤎HÀmÈ)OÙäã`…V6ɸ£¨9éT®­Ì$ã4Øo. Üwgñ«Û%¢Û&ÓR¥Ý¼¨ •É©ž5eHÅP•'Îà+9÷³H©"vÛŠÔ¶»Äc55Ö²<¢1Ó­sóMç09ïK´|¤ã5niJ[``qQi—?95&£x!‰˜²ýk•™¥¾|ÿ¥> 9zct[Ï{†Fj¶ÜBÄž•2êÔ’ÜÖn¥ª$Q"¸›Ë¶»—'ZÑÐìä3«‘]EÅÌÑ©N8¦YM™qÇzÚkˆÚ¹VbXCy;`šeÿ†@Q@®v]"hd—*:f¨N!·ýj„‘wsÚ˜PR*[mÑ78ÐY]ù7ºK´£ÓÒ²Ÿ+)ã­všͨ8ã¥\ÔÈ;f«[`Bì0N:UÜ×ÀëZ—!GÅ6ÀmÝœf«ß²ð?Z½§KòqWä|Ž1ǯzΜž•Ïß)PÀŠ©ΡOLc­0Y…ŸvÞ).·¡·µŽ ìH楈|ÛŽ9àVö™jy dÕÛ—ÙÀFk"äï V®•i姘ÀsÞ¡¼q,ÃqÖ¬ÇnkÀé\õädÆGZÏæixÅoé¶o&b¶RV]6œ7B Ó­+D…Ø£Þ¢[eg*piïdм?Jƺ‡ÉVu`1\ô×rË(ÜAÇ¥J‰)É9¨e‰—ï.? ‰²>ëPýºâ3…n8ê2Kä~5anÓ#8éW-å9b¸§JÑ€J°¬¢òK+ }*h¢"A8©¿‹u«w «fK``q\âjKo)äJ®ò\j7vÏLWE§é©`¥½ÅI$>ЫRùD¦×QŠÍ¸±W8P1Y÷PGm31\­xeœ„< ‚ÎÔË"ŒrkÐ4»8ì­`o#Št‰$€rjÑÒvǸ`dV=üRÂpâ)ÚUË[Ì Œ×Z·PÝAØw¨OYS,ªG­sºž„Œ UÏÏ¥b²%€¤£ þT—{Uϯ­^Óò@®ËMQýx‘pä\Œm×s amü½*]TåTqPÆ»-XñÒ«@¹™O£+æБPÛ§œrj¾§ò¾xüéÚTÁ—}kq‘ ¹ªS¡Úx\ŽõƒßNzñYÅ jy½Z¶¸£Ãº‘ãŽ@sŽ*›CûÂ8Ú*Å”|ÝU®‚[-v©5´m;çÏZÜŠ5€* „’9U÷«–EgÆi/çËlR08☖  $ šàìþ{€qšîti:“Òºkˆá½fIna— Ç­N®JãŽê7¹d`»€öªR^JÃꌮÒdðI¨ãÊž1ŠÙµº…n\ÕåÕ¢S´'Ú˜ú¬bU ƒÍ[:ª<|(榴ºƒr1Ö©ê·ªœ‚µÎË+ÎÝi!„;œà­^‚ ¸ VîT V¯½ϗxç‚Aâ¦05ì¡°ô­=-x%F*òXCžU}øªWÚj‚JàVEÄ7ô¨äÅYë&örì#×5w&Ô8À'½U³‰§˜1®ÛM…"€µbÇAÎz ÝÒ¬À_5ÀçšžòýbTŒ×-|í<¹c’{Òéî‘ܨü«³³ "b²uXÒ°˜¨ŽøÀÈÁ Î¥Á“ž, »·-À&©Í¡/ÙÉdW;:ùGkp:UYJˆüµÆsœú×Gi!k¹ÎfÙ/›©`ã­v–Š02:Vy`o›‘ŒÕ@ÿ£ îjž˜ÃíƒøÔš³qŠŽÔgÛ¥s·P3Ìî{S|?9þÓ#ŽxÍw+ÎGñrˆÃ~2k?PÔQAHÊ’;ŠÁgžá‰9#µH¶§oÎG5m³p*Í5î jX­ÞvãëfÞÝb.>µ}"'ŒãŠ#wpi/.D(Uq“Yvé%Äá#<ñ[KnJŽ•Èhš_œ`dÖäÖ¿`‘#ÐióùèF@Á­³IXt9ïUntï!w. a^!/G±¬§˜¬˜jrÉ“‘ƒR  8ÉÙ@§oAH¨æ@N8«£;@ã7ž-¡ÜHÿɹ¹k‰71ØS¡À›Z}« ¬Ø´-y8Çj¥«ÞG»àÐf¹+{GžènêÇ5Ó¥¯Ùã\cÓ}d}²iñÇ–1žÔ—J²v{VUÄqF ¹^+“Õõ4f)3X/q×,2zÕGC<áTƒšètí($@²ž•¢c’œqWôù¿z<ÑÇ­tm¨Á:ƒŽ™¬i%3Ê_"¡– #$õ#ÖªiëºìÙ®ÖÚU‰+ÓÖªy‚m@tÆkRk8äNƒ5¨iþOÍÆ)úu«”ÈÛŽÕ§$mväŠåßKm ÏcXWº5ż»HÏ «°K$6¥@8ëPi$6 OWg.ÙÅgÆ ]àäóSjdˆW¥gY¾Ùwdšžù·8U”ÇÙ”Œ Ö4¨¢I•”±ìO‘x(ZºÉuH’5mËœt¬¹õ&o—€j{ .ŽXsïZ¿`KTç±Ö²îf†ägëY<®HéWm,Ná¸u­)!P«¶¤…I"¬ïù€ã5 ·ÞQœsÞ³åwºŸŒV¤ažô­rªÄ2*ž„RÙNí¹ E­_«È»È5kE» Á®²ÚàHèr9væ=ðpA®jîÏ7œb±¯m1ÆÚ©j­Ž*Ó'ùhnvÕ”(O ö¥ ¸ôõ¤–t‰:ŒÖ\÷;íb¤ŽØ¶Þ8«Ò[²0'k+ÆÎ„ƒƒZ¨$ä’½+¾ºšîçpáAàV†™+$›ÛšÖ–ø î*ÔWˆW,@#ÖŸ.¢±2੨^kG¸¼Š?ä5´ìV?»XažbqÉ4˘BŽõoO¶häG>õè6qÍfŽgYÊIyäŒ`V³XB v†ï\ÝâÉö††>´ûc4g<O¸¸y žõoN·DÌ…‡<³ÈÙÙÍiX@T¬Ï€Ï5¹g —£ }j®¹Äj2¼Ô2íƒÕÍA„VmÈéXÚl»d'Ž•%ùYpJŽ9æ³ÝeŽ@@ÁÎ+3L¶1ß9Œ×]ŒCÛU,ÀiËqÉ£[8T…í—#&¬ÌXÈ™#ŠÐCûµ~UªÆDÕ9®uo €ly†’Õ.'¸æ» "“ã¹­˜<¸3 zÇÕµ!ÈB3Xk×R'¯½iÁcä.IÕÈF¼àœÔˆ»œ³`±õ©”l^ š ‚?*l¶Þ{ ‘RÇh‘cn2)··^Bp@ã¦kç‘ܶG4ù$ò‰òÈúUE‚K™Á<ó]–¤€3c$w+DZ´«+=«a÷ulŠ¡4HäôÎ+š¼Qæ7CŽ3ŠÍ”{RG’¼jh× –ÅXßw^[¥ÇËŠÏÙ‰'‹Äòî cÒ¶£ˆrH²º¤m’½+“’é#¹‘ÍQM{3m?&zV„ZA#,kB×K*I` ,Ö±‰ 8¨.#Øz€JÃÕoÖ$*¬ zW6í-ܜ㠖Ìò…NsÞ¯ZÙ½º³2óêjG„ÈËòô­‹?ÏÛ¸¨5½o"Ú¯“¦ªÈ²Ar÷0ëTFµ"¹ó>QœsÚ –þ?7õ­i4R“WcÓ’Sœ(÷§I¦¼JLdìiи‰vºWÞö3Q…8ô«š+€ bÍWÖ®„· #Þ¨Ipa–  `ŸU½-n#&¨ÙÏå¿L’*}BrÁÀ$b– jÌqÒ«éñn™›MkNÅ`#Ú™¦),IQTµÙ3*)"°œbåÆ àÖ¥Ì[3ÇJ¹þéHÆqPê$Vùm¤â¸Ã¤É{¨y«Üôô®ÚÃKÈ 8­hÉÙ´‘Yºï“Dl“ïX«Nù?iYD±À«r0?(ÅEdÜsÒ¬¡Ú3ÆhÝ»Ó*?Ê íÄñCN#›V%Ä{1ÇݩԕÏÒµlôo8ò]‡LŠÞá@Q‘Þ¯Ésöw …”ä»YtÍO=áTX×5\LT°$coZæîäÄÌ295—æqßÔÔðÛ•|¸©¶…`[¬ë» ޽ª•¥b1Vå…VHÅ.˜€)âG·5­mÏNinÆØX£ªéRŒ¶HÅC©j¢'Ú¸&¹k—–êbIùsšÜÒ%·¶Q¿nïS[p^Ànry­»(\}*;‹ôŽ2Y–¸}sÄ€HÑÛÍÓé\ä>e×”å‰Ï5u`i¦5Æk¥Ó4Mª$˜Æ­Üܘ[ddycŒUHÿzù`2kZ9b¶€•eÜxªvðµÜìçg½lAmBà…È®{SŒؘϵP‚Ò@ÛÊå}êK´‰Ô.ЭíUœì€ŒíT¤µur1ÀïQDÎŒÄ61Њ۰×'³Ú²¾ýk§³×!»ÚC.ãÚµ7Ç7iâ¨ÞiÊc2EŒ÷¬Iæ‘DÇ#=jĉŽw [„òr«Y©–nÝjÍÁ2]”ŒÕ¥ãŠ£y!,«ÅiéüB¹ÅbkŒ É ƒUmiÐñZÚŽß²äã\°½3Éä®0§zé´»¨²62}ëVSµ@b¨Ïx"BvÅe34òdòMY†ÛÉqœdŠ´í°vÏó¨ÑA}ìjiä1UÙÊ€Š–(°¹ã&§PAÛS.ÕcžôŠÝ¸úÓXå€àf«ßN¨6£.OÒ²ŠHNxçÚº iÝ8â¶ì¥¸9u­•y\sÚ¢a™1‘D°‰”.½cÞhÛÔàŠÎ]1¢l0÷¦ädåk6îë ~`k-7Ï!ÏJÔ±…öƒÀ÷­ÀÈ&³õ{ÔŽØ®á“X°Þ‹ žõÛËpåˆúSã±u\L,IAȪ¯ÑLvÅ#êÓ[Þ>õ¬=G^¸¾sO…õª0Ûå²ß1<ó[V¶F@:WW¥iPžl›@<Ô—zŽóåÆ>QÇL[<ïœqWþȰÛç嬹å›ä>Õv’Î?™@¦Ç«"¤£pÉè*Kvº”Êø+Ö¯¿–#dÂä•r»çÚ¸À«ÑA$*Ÿ(©ŒPL¤HOBk›¾±\/ =ªŒè̾„UX®®¬¤ œŒñ].—â†g 7§5ÖC©Ç<*ԓך­¨À¸#q¬g3Û’#ãÖšošb#r­K!åÇ»‚اZFïrÒ0šÔe$qÅd;y—Ex<Öª9TظàW9©y÷:àŠ]0>ÓŠ½«Î¾AŒc-éYÚ6“ºàÌÃåÓGòð¤qÛ5åâÅ «sÝKž¹íZ––‚2 €M%ßîçjH£g›©°Š¿t~U’ dÒD¹BÇ­XŒåF1Ũ´õo—œbž‡’Ä «$,¤FЗ µ;ÈQéK$ª¬1‚ Y±½0ʎ⺋kµ’5 Žjâ Ür<Ñ€pjt¼CŸ”Œu®{T¼H†7-s7¥³‚9ª"6—%ºSÁòã8\{Öžš§Ég$~u^þñm÷1aÅsÜË)'¦xµtÝ0ÈT¹Íu1iÐ"`íàu¥{HŒ|*¥ul¨ƒhQY²CŒ²å¸®cÄ­Bž”Ňià 8¤†5ÚXR|¡@ã½BÒ(b2* ¬dÇÈAÅTO27ù† kYjÞeV`P×Oo~µƒ cš‘ï#HÉ,£úV6£âHŠFTŸjå.o%»—“Å(ƒä‡õ¢±$v mãÒ³/HU“K& -lÀÜ2{ ÀžYµ Hã•¥§ØchÍk=´ÐD§G¨ÊwÒ¦:¼j¬­S\Ž8É$g+ŸVšæ]Ùƒ҇g¾pÀv­;+ùE]xDDn>• Îï…\½§éí#ø­Õ´’ÕƒFr¥VºÕ‰…g™KŒó]F#òQT¯Ò¹½bE’ñb°l¼È£@£§5hZ$pìe^+Œ×âîÊÇŽ=)–zTÉ™ZЃQ¹´8nu¯,›réV©ôJ(ÀÅS¸FŒå~•JòèMoå2rj˜Ð|Ë]ñrO5•uhöÎCŒcÔS"½6ÛJc޵ÖèúâO<…ÏL×F.¢¸@+ ÊÔ´Ÿ8å õª‹ ¶íSÉpnáØ¬iЄVo®†Á‘ŸåUQ–ÌŒGN•Ï]ÆÓÜ“Û5ÕhöâUbâ9"§º¸1¡l\íÝËÜI“Œ½¦YfUgJÝ”¤1cÍ;O&ÑÈô«vñ× O|S¥—Êù²8ª>cNç8>•j?cŠG9cÒ®Û‚œb†P}*3ÇLSˆýÙéšiš8““UÖã;ÏG½fKtLŒsÞ» 4¹;šM6)†0¹¬ý1ÕÿvEWŠææÓ‚x´ÙµI§ÊíTBŽjý¥P M6íÿ|#©n®R6Þ•Ï^^`Tq[Í{ ã"¶môÅ`2{šÐ¶X¢9T×7 cÛòâ© Ç’5—xÐÇ– £ÊÞ±žrIzTpÙ™WCg§°Eƒ'¾+aa[X²Áw*Ï1›™0$õÅkÛh¦8þÓéVÑVR@§Í¨,`ŒŒ‘Þ²u7OjÕM4Àƒ ÷ZâòkBNsXðÝoIJÉ®ÎÊî‰X2矪_¬A¶ºŒ×1}ªè± óÍt*D¨Æ*µÊƱ}§ú×%rsvv3Æ+NÖÑJaNÖLn!˜Y<’Mž2{V¼­kÈÇ"«jw¶÷Pí†õÅbI§‘õ ûÔw›’Ú0¤:‘K¦k׳͔è^· ôCæôïV'Xçä­a^#[ÌL}*Ŷ¦‹7PùæI ‡¥Dó½ÌîçŠÚ±ÓWË áy«Ä¥¼xùp;VõïžåF1íEµ *0=«^؈”“´bªÞÝ™dòÔŒJ}­¸U qšµ$Aà V\ò™T–Ñ0;‰Ò¬ÝœR[$…²1W·c€GSÔØ$PȹÇS‚äã‚?RšÔÉ'°¨ï`X­B¦3ÜÖp±v¸æ·m&ž(n•«ú”áºÕ ÛÕ2q‚k"]ÓHN4ø¬ÂòcŠjG¹‹ŒW<Ñ 9ÊŠÃk°×lÌFÑUu ã<„Vz$ ãŒ×E§\ÇgéZ¿l†Q´à}j_³Ç·våäU;¸Ò!œ©È¬IoãHÛOJÁ¼»iXŒŽj8-ÚCÎ1Zú}ºƒ´c9ë[¯,v‘@¥ûš¥‰ïh^ ®‹KÒ–8þuRÕnæÎX€`GN†±/.ÌY Ö\“™›´ÇÕ$Š=¤ŒVc\=ÅÎ[1Æ+¤ÓöC—8ëZ>bªor¦¹Veº¸Ú˜ÇN*Ο§(Œ³¸ô©&/jÛr1Y—wˆÊA “ÐÔZmƒ\È[€µ¹2ÉolÊ5ÈOæI;7SKíÔn8©›R™¢äóQE̬ä‚O­CqÅ’˜ãšÏ–òISÎ=hMÍòŽsÚ•´¹¥ Ur?J‚Ѧ†ì õÆ+Òô;AJä Ì2kFGÆÌp==ëž¹™®®qêkjÊÙbˆp=麅Ø2¢±#I5 ²s·5½mÛG‚⣸¹‚2 =ª”{¦—yäUи qùÓ$}¹ž•VÝä9«Å¼´_Jµ ±ãZ™ÔàŠˆ’ àŽiђǵ"ª8ž@zP­›159ÓÓ=Eg.¬Pòõ¦I¬î<ã-®«<‘Š’}j2¼c5—qv/•bÒÖ"ò¸­kj#ãn}*¡µòùe·5ƒuxö’0^@¬ûŸLj¯>µ™-Ýåû|ìqè*Ͷ1 „É>Õoû*vnS¥L¶AèUi!’7áúõe,õ¦¤Èù'ŠètÝ!Ÿk²€µ£w`#\áqŠå/¢xîr1Ѝ$¸IAÉçÖ¶´íY­ðÎ9ÒZøŽ7*¨­WÕ!xò®˜ë\Þ¡ö™Š«.ÑÒ§²DBöj[Ö„ƒ÷qŽkœº>a!G¨ÎU €3N3ÍÉÈôÅ#j³H¤¦Z\2΀"ºõ(@PØéUï.á•ð®½9®r|Í9ÙÎ֕ĶhèO56¡¨ïA “SYZFb…ɧÜi±²Œ×/v6\ÀÈ÷«J©n3ÍëVŽ´–å‹‚qÏ5ÏÍn­)ÛŽµgN²ó®Gº"MªJ‚ÃEY/Äì£ò+²H’Ç V6©w¹¶!õŸgœJÃé[hʩڱïÔÜͱq·¹Í^³-£wŠK˵p1žÕ’™ç*GÖµT\Ôw·#¥C›ˆš¹aGjœI.05§6’1ÓŠ# ƒ¸ kt=3PÉ)‰3Ç5jÙÄ ÅI&ÑòäS|°§<{sQ4È ÀÖTš|J˜!sY¯h›Î¤KTPNGŸx¹s´Š‚-ñœ©$—7*8éP BìwlPu Iù˜þ4è®D —Á«1YÙÊÙp¹=kNÛJµq·µ½ ½•´{²„Þ³ïµÏ˧=ñTbMç$ šuâÅ x–=«ÍÆþ›—Ð ×Ób‰€ip1ÛÖ‰à†Ã†Q´tÍb\_Ëpû.Úªl Ä™ >ÕcûV0]4Ó¤CÓŒÕiôÃnK)“%ÌñHP;òi`–Q&â3ŠØ]M6pgÜ_¬ŒB7ËE¥Ä!ǘµkYÉm4Ø%j=n8„_º é‘\Ò[¹“×Ú¶m-"y˜©ï`·ŽÙˆ °W:æ_º;ÒD’+ç¦*I.Z!Øú ¤ÒÉ$¡AÚ´­u–‡ÀÅk.«–ìÙÇ€POpÎzžôN .Vqºu ¹ëLI !Ž0+£ÓŽßÌ dÖ‚ž@1Ö¶`ŒBƒh^Ý”‡h#q¬X•®.=nÄ»"qÅCspA®3ü¨1Ô}jk¹Ö³¸{ ×?4Ï<Øêý¥¨÷ª1Sqb3TÞRíž3W ” z|ÓíB˜ù6Ö?—sÉ­(pJ•œÀ«È0ƒM5ãÝ·88«ðF¢.¢ŸjIST'¾H×ï Ý«!îä.N_Z¤×²ûæ>á÷¹¦HÌTüÝk6TŸ˃ô¨ã"QòÖ¬l?Þ/4òöªíb¤žEéÿ1Àзњ\Àc¥]þȸ†<«þµ™8¼RUƒ¯sg'¯½N“OеÈ<Ò?؆H£ä!õ¬ÝJL´=€¬‰.îQ6–8ô¥´Ô]¥u:eõ PX¨jÙ–æÚHpãY t±ÊERÔµHÈ*¥r{Öl¬í½ŠjBJ@Ç®*­ÜeÁ#õœ‘3>Õ«¢Øª‚qùS!WØ0>´<òI€N@«V“¬ ‡@OcR5Äe ¬‹‹¹$c†Êz·a°°2‘Zâ8]I ¼Ö>£´Ëa}ñWmô¨¼Ÿº7ÍCu¢)MÀGjÁŸu¼¥U³íZšd`ØïZÿÙpífvb¹[ûXÅËíÀ¦*ªBF¹bY”÷GJê4ûp±nÀÝWùjrµ‹tÆIxšµcn#äã55ÝÇÙ£*1–éE”‡™!ªÖ?zgê É&ÐF>´¶–B563Ú­€±«9ÅcO+4„ç­Ogn]Ã0ãéZsIåFFI•ó´gµh¢ªF8§Ç(Ï;jRÙlqL#ŠŽ1NÌÉÊA—v÷,Ø< ‚+'”åÛ¥$–Ê®GUEÓsJÚnÓÁãÖ¡6/“ÏÕ³u<Œþ/w€T†Ø QË Šh„~p XŠÙ² ²“Sy“Á“ŽØ«¶ú”…í¤Õ:?:(5^[eåvþBâÁâ˨áÃ…j[«iLCcçØ«ÌŒDƒ#Þ­ÞkJM=]çÒ¹ËØM¼ÅŽyâ®iÊ* ]šÖÝ×1§…r› Aç³”!bŸJ­ºhÎHÿëÔÑê#ÒØßÇ%Ñy°9âºh/ Ù€TäsUïo‘T¨+Ò¹èãY¥v|c>´çºHXm`1Rl¿–Sp Õ2D­– SÑI©õÒéV²’+wh‹p=ET¾”¨*6æ¨ÛFfœ8«ó2Àsôª~Y¸]»V€@ ŒzS|ÁâÄ ª€ÜO¼‘·=kLÂ8ô¬íFb¿»c½Sµ·72(8­±¶‡€£Õ™,žk{gеkU5;9'©V$Ù»ŒÓ¢ÆóR°Êî8¨–2Ï“VN:(Väuªî sÆ+"iI•²GZÑòþ`@ô§0È= D©—éҤؤ’iZ4.Ÿ¥G,a¦óªÒZdöâ«ÍhwpG4‰ çZRgPA9©“w–DîÁ€éŠ|w…$XV¤SÇ0ÚØÉëP^؆DÚ P‚vQåÉŽ+R8b–1€ C6œ0 `zÔ-nñŽ0xõªM#ÄÙ SGsŸ+a©JÂóŒªR²DŒJãÜ ™'*½±èqU5 I l »ˆ¬/)§o“sVyíÇ\WcפHÊ3Ž*œ2‹›£$ý+D¼8ÀuÇnk&úæH™ŒoòÕ[K•y”ÈAï]Ï Œm¤šÖæUÆ:×/y›‚‘tö¨¾Á2òF=ýhY&„u¦-ËÌøêÙèMjǧLÑdÍQ»°x¾ñ²‰h±‚*xäg œfºmM7˜ß‘®ÂV$P6Ôó¬ ®{Ö+ÜdçÕ¥§ D.qõª²»]^Ïʽjâ \zR“ŸLç½R™šyü¥9õÅ\T AŒŽôï<@…››# ©3Ú®Û`zS.îÉAÔ0!,ÖŸ˜#Œ7ö¤ƒçŽ2MK+l\)R@£ŒdÔƒ%OJ•€[¤‚21‘U¤Ã8¬žœuª‰¨!*8ö­xn¾Ó Vs°Žb>\f4žqè)m"‘® Æk¢ò¶Ä2}*7T Ãp©ãŸj€H¬]*Â\‘Ó•¤êlòeÈæºº·ò²ÅI÷¬i MrJÁ=€¨.­%O›j ·/žÕ$×ï,AxõfÊ(ö䑸թ­9ÈÃY—8„1ŸJ‚Ý7œ¸â¦û,vAæ«Ü«ÇÐ`ZÍ—Ì/’FkcKÔZÙ@akqõˆÑ™I=«6ÚÔ$.ì09«2mã«Í[í w¬?<´¤ä~tÖýü¡5Ûhv>\*v®ô­«–Â\àq\¥õÑ™ÉÈÛéT‡''JÖ±ÄQN=ªì gmïÞ­ ãÉ6Â&FMS€$.ÄJÑD;w`V]ýÁf(¸¤³¶loo®3FÉÇZÆròMÛ$â·,-<ˆ·0>ôéIÜHü)# íÔ²°àçƒV  “3EÊ„ÿk*ùKƒŠ¥u0<øRXÛn”;c¥h\O倊FjùBF3N·}§«Ë–éz³ ÀÇ ÉfïN·F&!;òHÀ¨¸e$‘Y×ÛBÿ aÜÈÒ¹¹nzßZî×O ´§ l’)ŸÙȤò1P½ŒA"œ–mÏÊM!µ€s…¤{kR€£éKå@2¸¦LqŠ•.) a»=BŠa¸“wA“OY'cÇb;id9n•n(#‹“·5idP0qMiÑ2rµ•}¯[Ú¡Üë»Ò¹[½n[—%FjƸ–y¤#±ô­]:Øí‡5­%ªÅH=EÈ1N3W’ý¢8 {U[ÍMe8 Icl—»°5xÙaI\b 0 :ƒY·{Ÿ&*1 ÀÀ÷ÍL“Ë*+»¦qÐgj„SàäžkbßX0J ãm_¿×"žØE¯=yéTm4‘pL˜Ë›çhã½Wžê%ËÀ³ÙÑÈÒ§[PJ¨Þº­ÔEœ Ò¿¾ÖÅSˆä×5æ™dÜÀ~U¯iiòyŒ£‘À¨'Œ¬À7ұʋZÐÜV,üµ›<¥˜ ïL¶„)=3V¥ÂG’Eb•77tÍlÛ[ˆÓ€8¦ÝÊ"M£5BÌÒüÕzI’‚¦3TZG”ç95~Þ"cÃÍ2hÊãô«v×!cW¡`c,¨å'ŽJ²lŒp*)dGÀAïUf¢pEcÞ] Ü‘ïX•ê`¸5€Y˜çŽkÔ”éÏéëL6³»*shâ2N+>H[Ì# AhÄ‘¸T/m 8-Ïó¨ÚÖCÜTÑiÒ:äµ?û<¯\•lÀ<ÓÅ´@òWZìÉÔ©¤7P ÏËL“Tˆ¾•>»Gï"³gñLNÍ£ñ¬yüC{sò«uô¨#´šç/+“õ5j->g”a~Oa[–Mº¶eÚ[ÜVÄö°¤9@¢²ã†ifë‘Úµ#V °¢ãéToc„+d}«6=9ç$Œc'Ùg¶çiÇ­*ê7pz{Ôw›:•Ú š£ù²sÇ<Ö dHÀV^=ê­ÜË·,1TCùÌc>•ð¼' ¼Õ ^e9ëŸÒªù³ œöÍuzNºaEŽUükNæþ ¡rÎ3Šäns$ÍŽ¦onCOÐX[oté‹{rX Åd]Ëæ‚r3QÙZI#‡eë[ÆA ¸ásU¢ˆÊûÎ*ôhÞEGw7“íTíciI‘±Šš. tÆj­íÆÿ‘@©4ÛâlsZ°‰IÏZÆy óqÏRz.­¶"‘ôœ×RÈÅ3À«¶—  ÀÑ–ö/p+ŸJÉaöË·5©žbŒ?*Ybr£§qY7’Á·ýZƒÛŠÉMrøRþTïì©ü¸4’ÚÏ‚ËT.I EV¶ã“8ÍkØ'‡lÀdw¬©¶K&##¸¤:{Ÿ›o#¥!·hœnëŽjdº”=»ÔÑ(špÃõ«ðÀð t:u¦ÀS_Ϲö0J©ghnfÉhí[f…@¬éÏ” Æ+A#¡F=Å ¸’;Ö\În.ã¡´EÑíTfŸb`cqªñ@Ï fÅiFÂÝ‘Tîç3¶ÔaùÒÁ„o|nô¥›æ]ÌzûT–P‰UöÚE'›ž]N)­yÌ*Œúâ¨Èåß<Ö–› RXŠ·,€J§Ž”ç8ÇÖ¨H‚Lð aê»W+ŠÀ’Ü.]ˆâ±¤*Ó’1Nã·åZ;§-ÁãëJn'Oã8úÕi¯YŸÿ:j³9áñøÔ™ƒ¸½ÅSYäwêz×G¤Z-Â3J:2k6í s²‚8=j%Ü_§î Ä63M+¿qÆ¢RÕ‹fQ0W#ë[:t/iæ.3Šæhã¼ØFàÖ„Ç$»¼Õ ôjÿIaY—=…²Ž: ët²ÀUˆÖ«ê[ÕöDsëQÙ¯–?z€çÚ¦¸Š#‚i¬û°cà8?CO¶w¶`ÿÖ¶ ÖÔadQŠ}Ö£nÐ3‚»» ç$F¹—åÇ?¥]‚%ppXS·:± äT7÷»­¶`{ÕK-9n<¸Ú{·>ƒ è@öÍjVÏ„g5ž®É ÚzV¥µü¹Ãm#éR]] «íÅQޏœV…¸Ú@QËqô®—J³à8õï[²˜à‰ºtÀ¬p­+ñÉ&º +hà·ç»óUu ×a Ã&«XÃÑÎk@ðO+šÎ½¹Ú6äÒ™h£pbZ¸—jã¥c&éî1ŒŒþUªªqÅR»›j½M-‚dop*ij)~ƒ˜ÍŒãôö`Sƒó ¦ne‘°½*ݽ¬’}â9«©c€@ŸjšÛNòÝh¬5ÀÀöª®™|ž”Žà+.5FIü“–Æ+TÔŠç.ï‰ÍgaKÞ¦cœVœN.Wf5T† O|×7©Ì‹;ÀçµP[×øZ·«Ê¬HÍtö³¤V„»ÍûËî”dg­i©¸r*;¤„ÂKšÎ¶°i¤'.sÖ´¦ÓœB0 Ò±¯Õ!Œ7¥gyþ¸À§-ÃDÅÔàﱐȾ¬Iª«&6 Øô¬·˜´ ¹ã=+Qo£H×n”“k#f «YÅÔ™= hÁcjÑt]ØëPImNG‰¦è  š›Ë` ½kùÎk³°a„JÎÔn7I°`j·¦[ù™ŠÒ…‰·¬2Äù v­;hö)·’”‘Œ×?;<“ŒŒõ­k`ã§J©y3JJ 5%•¹A¸Ÿ¥Ks/”„ VAc3œàœÖšâ+lñT÷~9«&_.,/Z…#yX³ckjD€œ´ív´@ŒUèrpµLŠI=qU²e†­dßÎðI» Žõ•w¨‡ˆäb¹=Bà´‡æ³Kï#5" ÐT¸ØgëVldHPnnjÐI³’0kšÔíÀ¹m§5˜P‡Å=”{uë]Ìmj •®ŒJ>aŠÊ»¿ós¹¬Õ‘¼ÜŽæ´çÈBHšª÷RÊÄv54P6ÃŽµ~Ââ^#'w«á‚2‚Hõ®|>ù7q¸š·%«Å°¿7¥,V¬Ï=ëFÞ C#‚·ì¬%—;óZˈ¥Rç͇æ8¨AËÿ•tuìBÜn#5ªu؀˜W'¨Ê³K» Š}…Š\Ì Ú;UëÝ. ˜ €Ö–b"Oõ@È<Ì)&µ-ôä•3®jðÒ Xùǰ5$ÏÛu¨à³?x°´-^=ÅXñëEò@ A>µ™s¸ |h|à£zWU¤Øð€Õ¹pË¿P+æ[ŒðI®šÎ/.ÙzõŸ¨ÏÁŒ0ÉëM´cˆ7õ«ð0Ug VeÔ<¸ãö©cµRÍEtþJ”\qU¬£.ŘkAHPÇŒ ƼœÉ9Q‚IXPH4·“ e¿Ê =³RF<ÙqŒÖ‡–1ÅR¹ ,Ë÷<Öý¥¸H•p:U´ˆ¡ÎF*hÏLc5Ú,ò¯5^õY⳯‘dk[p˜ãÚ²\¼.p~”<¯ÁlÒGlÒž{Õ¿±Ô¦¬Gd²Ž }h–Ö(ôÈïVṈE/œUI$rH…vúÖt»Øüç&¥†Û1 ä]Yä@ÄdŠë4&3v ÇêÙÓËNHP®‡M´„@TmÈÐ` Ì8èsX÷Û'}‰ƒƒÍFš:²ïeÒ‡±òƪ“ÛÍMdJîÒà@ïZÚ|…áIõ«·É"6ÙAükŸ»2FûKuê3MµÓ¤œ‡\J™â¼¶;ïQϬN‰å±÷ªKöÉñœg½uz\f’¡º±ÅŽ1éX$›Elám´àHG¦Z‹ Øu®Ö q cªÁc°b«éÖÏ$°8õ»$ÞTœ`v¬p>Ósž3šÐÙµ¨eŸäظ÷¦ÃX?h ž:V<¿¿ºíƒÖ´­àTLajÙq¶1žÕ‘y“qšÑpyÅ2hcf,@âªË"‚еlLàsV±x¨,U¥¹/‘]4 •ê*@­×‚=>äò8¨.X?B>µ[xH°p+6ê|ÙZäõkì³ò8í\´³ù²ئGÌ©¾ÎƒšÇQ]Å̲ ¸F‘H™¸ º’k[)#ÀÙžÕDØÄ3Ÿ¥R¸´„I€DÖ÷¥]6Ôcä^*ÒYÚª}Õª7VáN‚ W[9€Î8úRGc%Ä¡ò+¢±Ð#eË…éW¤ÐmØë…Ôí@ºo)p¹íÒ¬ÙØK´4˜Ú*ý¶’f›xùwt­xã¹´q€;—í÷1pW­Oo¬K%ˆúTw#.̽3SiÒG3nÜ?è@F‹åNJϸeBGv$"c­Ma¦¬ HêµfãMÉ€k"øÏd„–ÀíXËpÒÍ—ük ±¹ˆ ¨«RªÂXí®VhÍÌÍŒ žÕf-"h"Þü*{mR{6 Ø#¸"§¹ÖVõ¼µÚ=sE½º“æ6Žj çk¹J6ŽÓèV‹ 2k^âO*3ÓéXRæiøÁÉ­Û8– nG8äÖ}åÇ›'–¿tT¶¶Ûí¼š–âB‘6@V}±2J3Òµ¶€£€+>úl ©ŒúQek”,ØÜ}êçú¸Îâ8¬‰åiæ*1¶¤‚Ø ÝSœê3U.e01š¥FI0ØÇz×…WpÎ1ІùÊ£˜­-:Ð$)2y5²T"¤R„m î=y¨íwb¨Þ\•ÀëYÓêjP Xº¦¤‹®6þ÷Ì“Cv$g5$r“è*Ì!‡Ê+DiÒt¶·‘´a ­h­¤2ÇÎÜš£w¤¼øVS,Ñf2³e†áäëR5´áF*Í®3ýæ´ÓGÊ夡¸Ó¢A´0ÍfË,|¸Êju¥Ù(£Ò§MNí2?LTw:ÝÀ€«ŽMs¿k–y¶8Aï[qÜB¶ËáïW-µa`I^+[Oº‚âc#:sÅhÍk‹ÆÊÁÔ#‚ÒOJ§e§IxüŽæµ²¥¶_ô§¥õͱÚz{Õ+ýh•ÛŒ1ª6²Ç4À–÷®’¤Ž5T`}(šóÊRìE`ÝÝ5ô¸#Ž‚¥‹N‹Ëä š­=¤1eè+2ãR›î•ªî“42H àsÞºè<§ˆ·V.³m©e µr»^9àÜGû<(ÆãV4›#$ÁÈ×ggU ¡©NrÃ#5›JûŽ0+Jös8³-#2É–éšÙO‘;˾•žB Š]=p¹8«sËåÆzcµfB óå±ÖµÑ‚¸:b³µ+¿.2ŠFMS¶è¤ãšÕoÛŠ§q(G#ŒVkKæ¿Z½ \œôõ“O,PµÄâFÆÁÒ·#@#µ3FG9”îÇZ­#Iãš«"þáºs\íÔ6f8µrú‹’OJÁ—&MänÀ8¥Eù²=k£Ñ¬ü× @À­Æò•±…8ïŠdhȘØ?*¹:•nÙ!üëY•£›|d{Õu­ó ¸uD#E>O8Éõ™Šáx¦Ù™î[yjÕ‹°ï Oz£kEzÍ…À«S·>•¬ÎˆÅcÙFf‘ÛŽ{žÕz;7ù‰z†kyXìNµ£m§Ýà ·?…=õK»FØñQÇ}%Ĺ”dQ]>“sn¼.ÐO¨Ål‰#u#*}ª•è‰a9è+˜“N7W©«  IÜ„UB—0?qŠ­u¨¹ÄLG5bÂX,@­ˆXV«êw ‘y|z×5·£ÃÉ]Õnöæ‘bPïXÚ¾™iò`7 ¬Ce*õ^=j妸‘Æ+BÍZFŒæ»->†,¶T¿»•ÈɬËtÝ)'æ®´íå`‚jÝ„= ⵈ j¾”™6ŽW·5kNå.GZ±<¾T-+&<ÜOƒŠÜ€mi±u›ÿ/1¦7Ȱ®'Üp@æ¶b$»t⡽» „ ¹¬BZg>µ­ahÌ£¥nZ[àãV‚.mH2)Ê äñô¨&.øÆ1YÆå£œ†ûµ9¸ˆ¨ sYÚ…ôikŒÕ5ÌUNOzÀiI$õÉëQ’r2sVpzŠ™@ *ì`i®Ò äWc%½± _`¬é$³€ñ·5›pßl' ƒYwȬA[Ú«®ÜàÕ˜tœI»­mÃh¶éÀäÖ5䮓²ã4–¡€evfkeP1ƒR<ë'•ó.>µr[Èc¶#pÈ«ÌõiΤäúÕ»;vòÆ=«@A:p jÚÏ5´y#Š’]eÞ=§úTÖ7ñ$©•­øµX˜íÀ˜æ,¸5ÎêW u&ÄÆ=qÖ£·Ñ ®þ™éÅN4ù¡É)²\ÜB¸.F=ê‹ßK3áŽq[mÔ(¸$}jܳ#g¦+ºEšfõ=“zúÖœ×RȱàS´õ!Ü2k®µA ¶T š£¨ÊÛ‚vªÛÆ —<œÓ®eã©´Õ '"ºŽ™©LZM„ ŸOBg4º„žT8QÖ±aùåï[Öˆ#‡8ÏzÅÖîÝäÙÀZ£¥Âä“ÛÚ¶®g6àQÀ¬+ÉÌÒ6F*kd$é ‰v¨ÀéVüµŒµ¨`ÕaOËœS ÅsÀ¦Å+9cÅL¤™xçÚ*…‰ˆ5…¨9û;Eyö§!ikLçàÔÑðëž)â^)Ê2ÀúV„ äŠÖDhìE[[8Ê‚MÿÙnip2-8.7.0/share/nip2/data/examples/1_point_mosaic/cd2.1.jpg0000644000175000017500000005357013224651032020245 00000000000000ÿØÿàJFIFÿÛC    $.' ",#(7),01444'9=82<.342ÿÀ uÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÚ?ѹlƒÈæ³Ègnœ ±ìŒð+5Éyß §chŠÔÓã)F9â­,9Î>µu"çƒÅ! ŽÔÏ/<ð* Ó(x• íÆO 1ã8¨íÍ¹ÉÆZ¹ŸËº âu«ünä`W}zfvÈ}k=N¥ZÂ1'¥W–Vg>†™Ž8ÆiPò3R1bÁ¸â­[Ý´äÕ@“i&® ¸Ød•æ’G$ã¥"nSœ })ÒHÉ8B?õ„œiçïrGµmØF| @p'8ÀäÔÅ~\ t¨ ã4gäϪs±ÚF៭6Ôîp8ëRÞ¿!Aö¥²!Fk3SÔ1¸¾ÕÂë—xÜ™=k’•'¥F:ö©î8Í5Щê ¬N1š»odó „ü*üz<ó1õ­o Jì ·máeràqW“BW„­A¢dà ÇÒ¦}8ÀpTO†Õ‰ÆÞ XcIÈñ¨¤ÓÚ/”éQ}‘Ž@QUg·òsÀªÖò”˜1Z¬7ÄNsÅbÍ”.€ŒU‹{rà õ5oÜ+©ÇË[ò¨Æ=j­ê³7C^q®dÁ#ñU-ñÅiÛ–/µO=+rÆÌ¤‹»·5ÑÇgåíÎ+F “vF*ĘH¹ÛYs<{öî“}¼›¼ÁïL¶™bloéV¤ t¸=)DÖçqéZ°L®¡NY F6â˜ñHÜž”ÁTÞ^óÔb£kb0Õ G¶EYŽi”˜þu$wœ°*2}©³\DÀ -1VYW֫ͧÃ$˜U$ÓbV8Æ*¹ÒÕåÈ#Ž)N™.NÓÅZC ÅLÅ‚®ÇÒ›(Êd…üª„ƒcãŒT«Iµ† oX€‘1À«Xì1š~>QÈúTn¼pG5ÎÒ+6ô«~jîD}HÍ*¹šRÌGÔ77ßfð@ãÊ]ê ]¤fµÊjWžs1ÎI5–ry8§*3­+M*I=]}ÃeW5{KðñÁ› 5ØÙh¶Ð ª j°Öb6áïÒ¬Ágî€>•i"R0ÄsÚ¯Û[D˃ŒÕʼnU>P¸ê­å·™†ŠŽÝ0 íéÒ®! EVq¿ÅÆe¬ÝVÐ,Írw?¹˜@­›YƒÂGJ¡v„M´c­N"¼Žj®™†éÆÜ)­Ó÷qU¯ÈXé^}¬BæÀ5—Û Î+cNeY2Ø­Øn€ul+¤‚áe„GJÜå—Þ¹û­riTÀZZyX²äûÒ½¬Å²Ý1žµXZÌÄ|½*äqJ‹’0)K¸Ï5,s²·85³c|ž`Á­ø„2¨á 6â$ p<ŒT0[÷8« «¼áWJá r¨ÏV‘’-™àµžcÝ'Ú¤òñÊ‘Li ô¨žbÇ€§B3/aZAPá5Š#b§p3Q .㊅×s ØÉ­;~FHÅ^‡ S°0jUn{~„ó÷sÒ£v § ëP”±Â‘ëŠÍ…šIqŸlVª(Ž,’2FkšÖnB;e†®*öñî%8áERò$—3Wm4+™È0zèm<-·B+vÛL†À‘WVÉ~U; šÞÔ!à-t6ѶœSobˆ®Ð{b¨+º¾6®=ÅHFàOÎj{y|µê2{Uå»àŠ<ß0öõÅJÀ£nGõâ *c©=©crI¨®ÔKtÎ+‹Õá qÇ…ê„Ùœ¥\?½!¸«IœcŒŽÜl¸#ŽzÕùŽtȬ-bô•òׯµs÷öìlËø×4IÉÀ4,ŽÁúÖõ¥À”¨lkvÖñ£_,`ÿJt¥¥$’x¥·Ó•gÆ:àV¬pù@§º+``R,JHÑ)çZh#s€*9,¶G¹q­Uù—=3ZúV¢Å„lG¥oK(‘Ua¿[ieüjÌ7°™>òäñV‹Fàãmg»åx5RYvÍ·ZBrÃTʬpŠ˜Z´‡!A°-!ÊŠ—û? »íOòQxÜ8¬¼E#¾Ñ·‘d]˜§D3(Î=kb¡OOJPÝqŠ’2sÎ)KØR4Høâ vÜGµdÜ&ùH=ÍR´ÿ¢¸èk~xWìùÍq:µ‹MpGcן‡z™1ŠÐµÑãËZ܂ԈªŽ+J=9˜sži>Á³9ý)âx"¡bPgZ±i;20jv,íЩ£Écƒ…¥[rãn=mÔ£?ZhŒ“À•vÞ=˜bY`öâ£,qFz…Ûw:ÔmÂã#Ò ÊÇÎÅr÷ÛeϹɑàŸr sWí5 .×^kZÚá%a†¥gÛx0F:Ô—·;-Éã=+Zöã,ÎkNêÎ6²dÂð+‚¸¶Û4˜ ô¨ØìÈÅ_µFϺK8Ù£P.ÜŠÚ‚Åc‹qÁ=êÔ8 “Œ x+ÔíÉéOŒÂòìȧÜCå€ëP®1ž(b¬01ŠdÀˆÙxÏ¥Q1ü¼š¨KA0qŠ²Ú“ˆ‰,)¶»îNíÀf§x§„îÈÈA¤‡Wž9 ÈkN;†˜ÅG/úàN*ý­¼o"䊿0Š Ú=©`ºS¶h[„.Ĩ§™™H]¼õ¨<¹{óX¯"GŒ‘žµ ûX’1šªïåÝ*HnF9­ëvͶF*H1ŒœsÍL£žÙéGÝnÔÆ%'Ôðœbª®v zô¬;I³}(8ë[·‹öPjɤ”p=jüV &8téZéhƒ$zÕ¤´EP£mYhÀÀâšðƒÎ QšØ/LÝj›…Æ(ƒ ÇiO!ø©Vv Æ*í¹V9ãÓéS2Æq#'“Í**íéJ)ÇÏZI%•ÊÔO:¯\b©ÉvªväôǼŒ ÁJêÿrà/jÀšRw9§ÛÚÅt*985æ“åd¦*šÛËȦ‹æ[‘æÇz›P¸ó"EsZ:t!"šžl”`¸&¸›èñ|ê{ÕuC·¶5bÏ÷²„s]¶›l 䕦!fL`b«I ±qU™&™ÉB6ŠÇºÕÅØF ×A­å’A5 `$¨íšŒ]F[­,Åvg “M* ?0\V=Àb qȪëà2G—r/Êp{TrI#8"„¸x[çÆÚÚ¶™$dlŠêc9´]»zU˜GÉÆ8ãè¿‹8æ¦ ÐÄ3Y—Üc§^*;òNnG"¸.‚^³d}êí4û,Hr=+j6ÀŽjùÆGLŠF*•=ª¯ÚÂ94yò;Œ(©^\–S¼•@Ûðx¬™¤ uÅ>)#VÜvŒsVäÕbDÀÇNÕPj{Ž{šfnL¯sV’ÎáÔäõ«1Ø€€·Z•m“n6¯Ö£{ta®*µTÁÚµ–Ñp£Ú§†Ú5Bv¯ãSU€iJæ‹´\…äozObk^ÒpÐöÁ¨ƒ”ãT×u³ÎEr°BÏ9¨9®ÂÁXY¨lg¥G ëÈ5Áø…÷^°Umù³ šÖÑÎÔãµØÛ9òtÅ[IËÚ$qDÙŽË ŒÖ£6ûCÇ W}rf(ê;Vµœa­@l3ŸÒº==…´J£#4^Þùr °9â³Ëù“ƒÆs](òp=ªìʰ8ÀÁ®ziÛÉíK£\¿ˆÛšîí¼©¢;ŠMŽÅK¬ 5ôöV,¥H¦õtº%ï>[ším$ó@ÁÅhm,›‰éUSiÉPÏ mÎß­#jQÇÐ}ªÔÝ¥ùTsÅ>Y.§L}j¤z]Ü“Éõ«‘hí³’¹ïQË¥`rGåSØé1¹°qúÖ¿Ù‘Pm §­=T·hÇN”Ü ?äT.À01éP³0î1PK#°b ØÅÆHæ¬ç :P¬Ë“‘ô¨¦Ý ãÍj‘3KÛ5Ÿ¯ »K`t©¤’F!ƒ.½YŠäH˜ÈÈàÖr.ÍL°×H‡lXã¥f_Üù6ìÀŽ:Wwܱ˜óÞ™aâaÁ"´töÚzŒ×S¦ÍæFTãŽ+Or$l8æœò(³$í%GC\ôîn *€Aì+&=Gºi å{欋Cc&8ÅNoà@¥Vb÷?•j[Y:•‡´žL V^ xÅbJOÃ#­U·Sçäbºý:]ðÍøæµà¤ Fâ®y7(ã¸é¬òçæAÁ¥±àÄ=)²ùn0è¨ÚÎÝ”²••*vÚÃJ·SÅ­À«Úò¬3\ð’NÅWŸ Œ2Ðòb 8'½Z± ®®’Þ`ÖøÀëZ‰+œt¡˃´ ²€¦díõªÚ„{áΖÅÚÙ—‚õ® QBšriöW àÃq]æ•{…Žx­§½VEd\ÝJùÚ@ÕQRIYprMmZéd®eÆqš¿ ”1H0ª}8«2„T<-6ß•'婯1œŒTsFA Kx¼µ$cš•3à‘Ç\ÓûøTœ1YîÇeíUn'Á`©,äƒÍXs€#©²Ý&¥÷D Õx˜yŒT£!Jd¼F3jÍfÞݺӉÚÀqéJÅØ óM`Upp=j¼Œ7pWð¤@†H5`D#¡Ídê*3¼cŸ»ø8È⢖bI“UÊ7ŸORÓšÜù‹ŒJµa{çCƒ”V{FnnûkacÛmåñÒ¸«Ä0]ȧx© }Ø9­­!ÿx sÞº¸ÔÉÅG{›r7 ÉŽá¡“c j亂Ž “ïY0<³Ýé[ðF@4é$!xTfB){Ô%‚È[#Ísºµá–]ŠÃëX›š{Ì zWe£Æ©äEuvRE+m8éïÅhC«æ­Ÿ› Á«Ìªzb®ÄQÓ"¨j·ky%sõ®&âw»¹bH"¥v6HVŒShQMkÁ¸ü«\¦bÞI gš‚iT¾¨ïV'$Á<“ëDÎ8­Ý6o1GNµ¸«ÆH3OO»ÛëLq¸çŽ*dRÔ®O–F@ô¬—g8Á>µÏxŽ1Ê“Œ«ŽXª¨L2ã¸5±o©e‚·ã[–·1º\f¶¬.pØàVªÊ9<š` IlséY7‡l€¸ÍKe)\ß­-ûÀäÒœ¬¥ÁÀ8©Üè @€ù¿Ãš²»¶ò¹¦N¿!é€1Xò̱7QùÓVé\®%Â1ŒŠy7)Æ8î*´H$ÉÀã€*EŒ+ƒ1SJC(Úª^À<ž1Ϩ®o>LäƬ®×‹ ´pþhëÜÖm£mù¸5¯a>ÇÉ#®k³³%…pGµfäù¡²=ëBÞ\°PÊ¿"í‡pÇLѧH 6qÅ>gýï¤. äІáüÌ(JÁÔà+ÈÆjµ¼¤)L‚ 5ËN:sVeËZ¨àdV]Ô{)t½þry5¯2å»qXº¼~e»©Ç5Íiщ ÇÇ^*ã)‰O@ÀúÖöw·€®˜\#'Uæ£r:äRgnj¡+öãš~.ríTåŸa<ŠÎº¼*‡‘œpki”òجk‰K¸ Кèô`P*+Ð4ÉQíqǤžÈÜ1š¯î¸Ç&¦,B’1U¥¹b§U'¸vÝš­ glœ{T¶Çdˆv­ˆoÖ4"þU:ê¹Î@Å@Ú–XòµçÅ|ñЏ÷ÁË‚{UÆñöŸZÓ´±>^XqŠØÒa Žq]t8ƒ‘ŒT7,{S-Ü0"¬±ƒÁª÷$ùDqŠÄ ­7*:×/âiÿÒ‘xâ°K塤ۂ{ÓŒøãÖˆÝу&Ö躨•RÞ·ñ‘Ò¬Æìƒ#©–àŸ•€Æh9dcmH®wH$V¬,0­Ç>ÕiŸ(#ò¤Ú2HÆO q´ ý*µÈb­œ}+•Ô´ØãÅ@±–qëR[ÄÐÈ9ë[<sœtÍR…YI “RÅÇJ²¨à€M?ÉdYÌGËȹü2ä}jä,%ŒçïQÊÇ*Ÿ)¡¹O1€ã­i¡@à("¦Ÿ+¸ñXÚƒl·}ØçµsVŽRðž*íÉÜñRÚj±@Ê®=+q.C¨häëR¹ÂäàÓ£óm /j¯Ð9Ç4¨HÈ6€;f©½ËÁˆÍdÝÝ0ÈË–W“ £&­iv†kŒ¸xèº(ŠÇ͆ÅI§Üd ‘‚k¨ ‘•?Iýœ®½>µwY{â°®2‹*¨%é’ãR«ÅL§iÎÖ•K“Æ4ì9R¹äó\OÙe/…"¬E§M*Œ‘Ÿs[z~‚>é5«=ºÛÀpJ¯¦0#·Zéaa€¹^÷ýYtª‘J’göÔlÜ»y¬ÅÓå“’~ÛÃÓMá’j;ÝêÑrFEEo¥M0,Äš°ÚT‘üÀô¢;GgÈ>µ¯i¦àG'œUÖÒJ¨` Y)Q ¸Èª³É,Ë´téZ.ŽÓJ®ÃºõÓTGòà`Uý) ±LŒúššp2Cc¬ëøÔEÁµNòì€ük43|Ìî;f«K!'œb¨j1•A*ýi–òy€`J[•YàÏ‚Ñ]ÀÚ95&©¥F`ܪ®Q£qt#Ï ÷®³M´XÑO±Wå‰^Ù”‘ë\=ÿî.H5M4Áí” S-g6$éé]5ž³i ¿UȬ½KTò`/§z]<†P€>•£,*ëŒzÓ­4Ñžƒ¨–ª‰»Šr:¸9ÛjjX‰ç­Q£Á%ŽÒqÖ¯AÁj6(¤Kì9? ·oq´oàzÔfá¥28ÇZ¯¨É›u€ÞÕδ›˜ôë@„¸ 1Ö®$.8ÍHJÅ-Œõ¬™îK±¥F˜fºˆ‡lŠ& Fº§xÍXb6マ+X±Ú» gÄÚÚì¸`À nA§‡ í5pÂmþ` ©ª7ðEsnH5sÑË%´¸8Îk ÑîD’ì2zsT|Ocç!‘0qé\k#+ÀqV¡T@ ÒHZê@GÝi[Zùh0M^†ÕN5Çs,œŒU.­®#q&ÓÅkxV’ Dr7ãšô;üÈÆv’k@¨+Æ2AÉÎ:T ã­V`sÎ09ªs$.¸¥ûCGÀÆ 6ÕÚC:×D 0Ï…HsÜëUŸ=©áˆñžõNæáüÜ3íU^)$lŽj†D‹ùÕŸiÚ1×ñ§L¢[b§nH¬Hå6²2c=êÌ×DHÅ>ÈeÇCZ7IæÚ‘Åq&5—;z×Yh3<})Ò¾ät®'\P·ã“QÀ7»º÷©'³f\§$ö©-´»–*zt­´ ãÄ“”Ö½²®qVÄ8ÆüjÜi³®*ÈHqT•6Ž*ý³ª²ç­9'Ý8«1ñ„äb©µ‹,ìÄ µlB|‚ª9ªåÌJÊ@{;0Ú gìpxkVÊ"cÜØZ|Ó,iŠÉ½»Þ@R9¨ ·.yÅi,xP\jш°*N3R»¿±íÒ›ógœô£ŽË¡‹r01\LKþ/Ö·á;bÇJ˜²´8`9¬»¸RPŠæïѹ;yꥭÓà ;°Â¶—QŠh& “XWÑÓ°9ªÑZ½Ë…^•oìÆÜ5¡h€²—Àö­Y.!Ž=£nî”–óB¶›{$/„Êã½aÝyP\ŒŒWi¢_-Ū|˹}륆]ÄdŒU–@ë‘¶ xÊõúzÔO´ð@#­Pž3Ð`ŽÆªH8çŠl$¬€8í] œÊÈ2EZbOqëQ“ÔÔà8â¡hÔɸ…¨®åŽøÇ¥`ÜßyŒrEUÎæ`óS33Ç5ª[ïˆH f±„ïç=ªý…ú ZÍ}DÈyë¾}·[Óšë4Ç󬔂3ŒRÜ€ð+‹Õ[Í•ñƒŽ•R<µñ[W#+¯Òž bVsÞ·põ»i€ñÅ\vo*¼Ób;A8šŠkA9=cÝé ¼°Ç­@Ö>Z íµ ²ˆâ ZÊ»»,01UâRß;àzV½¤A“'©‹qÅi"|ØÇéJwÀÞvå±OØ2çP^äã¦+’@ºvã­jãŽÔ1;8ÅQŸxätïíPµ¼w1ô\ÖæšêÄ>¢© €sÔ(Îî«jÊÙ"A…ð©šØ<¼¨ÅÆ"!p+"d’y‹ ÈúSÑ$Q’*«ï’R1‘Ò’kGukG@™íî‚ z$\ì*AÍi.EI"dvÇ¥P•>|ñ¥Gµ7œc8ª—6àžú  Û•¹Å]²™ƒÈ¶<à¨9ÆhY2™&š’r)²8 IÚï\þ£x$r•™IúÖŽ¶à €Gw–Üà ιrb+Á˜°%Á1ñš­%ƒÃ(ÇNÔKÅ ñÅaÜ<‹.Ó×<æ»¶Û556ªåbb¸®ZÚ<®XçšË»C §ØÕí.`TƒŒŸZèld–J`JÙ´ÔĶOV¼ÊãqïšmÚ¨ˆò=+Û¤Žzg¯Zµ¬ð¦èÎGò¥{™ýbsëQ‘ÔãÎ ìï[ºf v67Ö¶ReB‘V VQ€¼ö¥ˆÅx⣹*½pZæoï×sGÒ°®nZB5”x,)ìüª`VÔ%ºäÆj£Ý"¹«¡‘¶ÆÞj9KdŠ•íO`2:Š«z™„ç+“þ>\ñ×5¤­•=*Ln±Q4;‡@sÖ¢kFA”ÁNfÁÃõ¥·Ž6qCX¡9sOŽœ`œÁĘ}qT¯¤'åÛšm Ÿ2 .n¢T*ª¹5RÚhwî*¹ïõ¦ÜÞøEˆ¤³ŽCuæàrs]îšÌöë» ÖB@ÈaOk¢ £ %SÐÕ \6áùÕw=zzUg‰d¥U ÐIÚ´VRñ˜ýjÔR(c)È6ç¦MgjS˜àÈ"¹¥r÷wzܰ°ˆ‚ûGåZÑDªUBÜ“¼ã¬Ë«BSp¦zV & œôç Ëç…aŒu¢<.Q€Íd_ië<…—æ®éY„yDE]¿â Æ fCiå;AȬ^=²œ€*¾–Á'ÚqƒÐšëtæhŠèF•é¹p î*©³¹±bQ²:õ¨%Ô_hWOZ|3ÆÜårzó[¶L dT÷ñ4'…Åsígó‡½TšÒxåx=êhde]àà¯ë[Ún¨¯ÖÆúÙŽåYTäzÒO¨ÃlIf\ã¥sZ¦¼Ò’ÃGyÜ“É=êx¡áCcéW¦Q{Vs•¸ãŸ{ª$1íFú Ã{©]ËzסJrËÓæ›#dõ¥I$ ˜ºíÎ@ïYš­ôqÛ°Ü3Ò¹›f-&î95¤ÇjŸ¨äŠb9ݵ€­®Í¸Èª7P$ªqYÃ$+ùÕ»w2 ÝŒŠ±íëR.:S$Xä…5Â8áço>•ŒÖæiyøúTÍ`±Ö †Ñ$»ë[Q[¤N¤]—AŒp:V‚ɇ Ú•Él·ëLO¥NÞXPxëP¼a”‘ŒÕ9–ØàT.<ÀG¥Eb¥G<ýÚ™Ü*vçŠËÕT½¶Aµ…j§~HÒÙÝ!oÊ;bµ#dóНw‡ÂñƒPH«åòò+Ž¿„ÏÐ`ÒÚÎÑŒ60;ÕÀc•:¯=êµÄäg"¡ºÞPÛÌ2 JDBÒ0ÍsÚü%%ã¥bDLr« pk¤µ¸d*ÝvúEà’äg¥i²«çv>•“y§$¹\ Þ¢°î,å·ä ±g©Énq&8ïZÃUŽHNzT6­æ89œÖ×ÙÖDä)íȪwšR¬{“šÂk;«w.­ŸZ°ui¢ê£ÝKq–-’j¶id$ãŠÖ‚ÔEb«Úáî‰àŒÓ®®Ö6lâ°¤º&BïjX,eºmÄesšÓ]-B´~UÐË.\Œgµ$¥Bç#5F[ØãêÀŸ­R›PšEmœV<¾tîwœšž+v\`âµ¢NàœTÆ08ªÒ ¨Ä¯qŠ{λyÅGă¢Òˆ”p1I´Žr)ŒåXsƒCÜàsÞªÊûðHàSRæÇÍWº¿”‚MTµ’Nc5¬—,YšèôÙ;ŒgrF!—u§µÁÁà RF|Ä䎵7–Å2MHœGÚ –=ääŽ=ê§–Cr4¸+dž€ÛjW$8¤+æ®Ò+6{#ùP0hŠ=Œ0FsŠ×·F`œcÓ4û£Àc×5K/gÖ±ï­Ë+áXŒ»äV/GrÕräà`Ö‰#"Pxé\ÉQ·#·´†Y!er Vå°¸·¢ç«RÛZhÎ&z¶/#—W=ªAlޤœ¡ugH¬ùô÷X‹#íNÓ–ådUàŽµ¿mxáʸÆ3Vç»M‡$t¬K‹—•v©ªknÓÄžHVÚÜ}iðŵ€ãÞ¤¾¹[ãpŠË†ñ ‰#q¬Û›­ïœõ¨­Á2n+‘]-…ÄQ @õ«ßj€ò@ÍLéÉÁ¬ûË&6%†ksI&IŸÊ´"#…c½Lñ¢€7T@ª¾ÓŽ*ì%IÎELÌ1Æ28¨CžÕÆ2©Ì—+˜ÐŒÔ«8-ƒJ˜<‚)¯·-ŠO)ÁÅ4Ú«/j£&”eÝ´PǤøb?*´šr'ÀTGËí[ú9%»f´¤C¸ €3ŠqUÁ ¥…J¯8ö«x%3Æ=*±›fGIÈçŠI#çŽ:Õ9²¹ù…&wF)ê¿J–!ûÂ1íR$m¤ß4×Ó‚F må¨ùøíQɼ“Àã­=*¹ÆEV•79PL×+ªDö÷'h¨ã˜2ê«§Å01¸þ•ƒ¨Ç5¤„ÿ׫=æô(qžõÓÚ(îæ°uèÌ×AN9ô¬it¹¡‰ŽÐEDž]èºæº¥™¡˜mÁ´&µŽæ%m éUNš3û¶Î9Å=g¼¶?8%~•fKʬØê9nÂy_z›N– ÛɯM4E~PõªÈÜòj$ˆÉ<úf´aUDv¨\8ûh´²Î#h‹steA>• ÂÌÙ=êxtß9ø­‹}&5Oº½*ÊØD¨qŒÕv³mÇ‘V木 0®~êCq9È‹MXŒ…SÒ†œ(ìOZ¯æ<ò€>™­khÎÜSôÍDF ”ň³|cÒ´-­ÆC8«ë€0æ£Þ˜4 ÓÇŒûTAyä(|áÕp éOãn8U”ôõÅ@öiž1P5¨1Q›RÇ‚(ŽÄ—ê1Rɧ^HãÞ ‚À8®ŽÔXc¥\ÀlEX¶w óDèWž3Q$ŒÐcéQÊĺ絤ì©!.TtÅHòª&ôÇ4¾féQFêd`H« 2Ž7(üh’þ(×>b“õ¬»½v$ùA5Ÿ&½NSmaØü¨1Ó5ÔX¾p*'»yd ( ¤ÒÉà u«bòP£§52ê€02zfª^Ë-Á T;VäË ®ÑÀÇ4Ù¯æp£5··2H8¬¨Ù™™Ø æµ­î€+(Í *…;F F'tÈÜH5z×U’ÆE)ÕdšC’1L7A , ªr@©¸…J¨ãšƒûR'mÄóÒ¯ÁªÂ±à°ª÷¼cvƳqö™C’kRÚÆüƬµ•ºœ|µVêÞ(Ô¼n3YM«sƒÓ¥UŸÄŽäüë2K»«³–cƒJ¶²ïõbÀ•RN:*µÜîϵq“Òˆˆ!°O©«‘[¶yÆ+V8Ö8z ÒÉÅc]^bã A5£nÊRÝM=˜uâ¢*OB3ëHƒ“œzS„!”tõ¨¤‡ €qL>bpi¼sŒÔFäySb¸Œ±ÜG5d]DŒeô4Ö½ˆ—ST&¼V˜*à“é]F´Ûƒ"¦'k(}jݸĜjÓ€Tð¦¨J¬@úURwH3€ :`6Z°Ž%äUYîÐ/,¹ªÒjC\zUIµC犣ý¥+±*y=©Ëq3™È¤<ƒ®j¤–NÍ’GÐÔ†ÑòjX¬ÇÍ€´¿a–\UOôt˜ãTŒ-¾`¹&ëb¸ ¿•.ûtQ…ZO:Üã*µ$SÚ£`â¦i-Q‚¼ÒʰÉU “U£±€€À*²ÙD.€ûI‹ÎN)¢+Wà2Ó…”9á×Ú˜-a@+LšÍ]†`sJº\g“Œ­uc `cªfÉ7À$±$qã?LÖDáË“ž3RÃ<‘€1Ò•µ+”c´Ñý±p@'ö£•å²sRf;€7(ç­M“hü¹­;]ßÌL•­ÔÒ­„?Gª.à@+*Öãï/¨,¾m듎9é[6qnÁ V·–£ü´Î@¬‹ýDG W=*ž› žo5ùÇ8®‹cƨ™yö5^íÚaSE†ŒAÈ©WåëMuúTjÙpjð:b©´EóŒUY-äÏ@~•Û˸uâZËÏËR%¤‘º¹W[¦>-”qšµ - Û À'ƒO² çï<ÉÇ?ZrI‚@¥’G8Æ)¢þ@ŠXï±Ãt§}¾E¿ïR NB9|S~Ú_«~tÿ5ÈÀ`j­ËÉØƒY¬ó“‚¼zÕ‹9dÝó§õ§åÆÜ¶2j6´R ät¨Nž;êiñY>xð­(4©Û »U£mq@ç¥V7—@ã'Šê.UX• t®Vú9-g%FïUm‘ÌÛøÁ5ÕZ HTñÒ§{ŒáéX:–¢Ã “Y,—2üç"º]>ßʈ Ðe,úTRüƒ9¬NåÞ`ŠÃJÖÓ‹UÎ?¸Tž1PÈÇŒTJ1“Ç5^bűÇ›³#"\Dz*_2"jEh`•Éõ¨§’2˜ ¹¡¥‚S† IŒ)I»·õ"ÈKíb)“ÜG•ܤö¬ÂÍ$€’1Rî1òñÍT½•ž0•‡¦´Ví‰àT2]D ³¸õÀ¬éµlgËAíÅdÜêSÉÒª"ï9‘²sùS&‰;H9©bX•pÛGzãT"tWÀ9=ix0r§Ò…p_†œÛÂçx?Òš¸ÆKÿõéñ‘!b\cÖ¥c±@ µ5¿ÏÆáW q ‚jÂ<[@$ Ô¢8ðH#ó¦!èzŽ)¬‘°V¤[$ u¤“O ÇkR.–NáR %±z{Ò)xëQ5¤„søT‰lqÊg½>+mùÂt©…°ÏJŒFwuñÀUˆ ‘y°—rCŒŒÖ„wÉ*üê:Q¶×º®{ñW¦ÍÈÆ:ÖF©mæDXÈéXP³$¡Àï]$.ºàŽj†;Xät®né·OÎ3õ«º\`à3šèW 1À«áy#5—©]„ù ýk˜–S%à çžk­ÓÆ-¥^|£*³Ž¸ T`Oð¨ÉWläsU|°Y²E5©Û•üjÈ<š™¬ÚeÊ0ã½I•#³\VÅ’y ¨â´;²1Mi_1Tn.L)¼ãëTìØ\Ì\¾{ã5jr#QÒ¡7A…"¬Õ£޵FxQjÑ;bÆNÕ‰srKzsT ‡Ì˜ù¬žio<˜£mN8Íc‰öZ­+;?LôÓnÎ>ð&¢0åˆëëR pT徕CƒÔ ¬ñóœ\*ŽFG¥JŸ½Þ9õ©õaéŠ e€ËÎEF…‚äbµ­àXÕ[ïVÜ´x¥[O˜’xn+F»Ü_°6?:¶±*)Z°£(3ŒÓ°˜ã§"’³ëR"2Ÿ˜ŠWŒmÈÅ 7b¤HÓKjˆÿ*Ô>^ìãÔÐ䑊á‘HÇ5"<ê ŽÔö•ßï(©”ŒëL3œšÛ¹›d€Œb˜^7dsX:¤'ܸÁ=jk’T!#бr3Æ>•Ï^²ç¿µhé#£Vß9ê)ÎÅS¨õ®SU’G›f0Y€Æ{×O¦Î²@«N+D·AÓp9è}kGx!G­FäçzÕ;¸÷ÂÉÇ=ëÍþÍ9W8>õjæäËò® ©m­Â $}ëEùG8ªjR2Ø*K&¤m%dwbzV-îŸ$$°ªQ ÉÞ>_zq³€c`äúÖuäŒO•‘׊ǖy”à!éU^æLr{æ£7/†äSZâG=i»Ÿ#¥ç Ö¥ ò°«PÆŸ`ÛåyqŠ®°ºKòâµíš@pqRMxÉ"åF)~Õ!\œ÷«–³É.=êÂÞƒ ÈúP÷€¹»ÔÑË$ *-[† d·-V£ƒŽœu§ˆ2:j{FghÏZjÄ ãšV‹ƒÓ4й‹oïP©Tm§ñN(Ä’1ƒAn+)ŽŠ*t‰YyP(6“ËO½ íTœb™q™ OAYöÁ¡ƒëZlÂDã°ï¢;ÃŽ€ÕÝ%‰þ!ùÖÐlgô¦LäBpFk»BÓ&#<Ó¯QV``Õ­+r4g Œw­À̼p?6FN=jÐ#šå/XÇrËŽýqVífI!Û… *å¤ß>ÌŒv«®»ˆÇZŽxó8{ —N”œ/nå–00<楌“·ZÉæ»ÌÒ¨êv“Í@2=+LñIóu³ky Î+E\2ö¥¤‘`àóÒ¢û6ÆÕ™schíþ¨/­Bú ´Ë˜Ž½P—ó¬›c žÔóá‹Í›÷}1TæÐïã<¦~• Ó.ÐsMÍrÚœ%sŸŸð©íæð«qµÐǧ³ÌØ,¹ö«)%Àùyǵ^Šå›hxˆü*ÑT8;i6ÆesZ°Uû£Ö¬£eÈÇj°ÆvÐÏÉ©·)élšsE•ìMEäœfªˆA“¾ cAµ—Ý‘QÉ­LqQ6¡pGšT¸¸~A©Œw.&”A1ùMÙ³Ö»THô§:çGáQ79÷¬«”V$qXWQܾ@«p2ÜÁƒŒŠ¯4ÂñZv,|§v«~b¹=+Pg›yÆ:ÓMâÉfUqÍ?N*Î9ÉÍt*03ÇJpéÛò¨K nÀ¬MnE0•ã5ÎZÜ|à Ó´‘¼ã•æºdTqÒšò‡8ªÀw9•_m¶þ‹éKäÚ>è÷¡­­ŠðãŠ|V¶Û:ŠT·µÁû Ó%µ†A„qLK=dZ$³„7ƒP=´jêªF= =­a+€ãq¨¾À û¤ûèˆÈâ£m8zQýž6rx¨›MCŒ‘OþË„ ä~tÕÓ¡ †Å)Ó¡W”ÿ±Ç·.)Q"ŒÕ,a;i¸PNsÇJŒÎ û¢ºsÇØÎ>Zb¹ÚOõªcyÆ+÷ã¥3L[i«ÓEó)ã5fÙ>\àU‚¿>@•ÏëÇjÆE`C#‘òãšÜÓaepØÑ)%§ŽZ\Žxâ¹ rè›’€Œâ±m™„ºú×C§1’p¿¥nÊû#PÏJ­qrÁq¸j{8¤`ŒUèAY†0lÙä©'¥Lè¥p1ž”ÕO›µNàã cÅdÝ -ÀA~iYN*¾¡ ÜͽÁŽVl)ö4[CöÍÅH< –m1Ñ ªF7‹€Ø"£þк·o–CZ6~(¹ˆ`¶Ú·ñioãµkAâkY¸võ­Ë}jÖD:ôïO[ËVŸï¡ ëSÿ¢OÈMQ¹hp@E¬×†”(=i‚Õ1»h§¥”dd(ÍBtøüâŠsiHÄŒTo¥  Bº~›žÎÇæ/ö[`íj´ùTðÝi‡N”õ5 ØÊ[éQýŽp=jXí§êHDÀr)"Šá#¯ùâ‘c#L$¬§‘‘CE1ŒEDË.i»&lóíS¥´Ì “ïšx³`pzš™,ýÅL–JOÌEÍ2q·ó­÷N{gÞ†b"ÛjªK=*Œ§‘ŒÖCó·ŒóW¡ˆDP©€ ìR©#ƒS©$™¬]rÜÉ 3ëX–‘]-”%cËcÒµ Œí±ÍOµvòƒÒ¨Ü•ˆâ¸]MµJŠŽKRJÍniÖæ¼ÇšY‹8Ç­O ¡Ôö÷­øm–+B8ÈéQ¤cxéÍhBvÆÆ J’W¡©#sê}ªvË9# v—99íŒtÅf‚DŸÕ‹ØÁ³ Ojá®ÁK†>Õ©¥[yq™Î1Ú­¶éƒtÛô¬ù•a‰„‰–ìk)ÔzU„,Î6¨«FÒ`Ø Šo‘,RÛÍ;í—Q/Ë!ãÒ–-fí~s!<ÕØ@Z±Š¡ Î94ãâKw ä{Õ˜¼Em¾¾•1Ö­›ÌQßÞÀÛ¿x¸=*xn '—Zµö˜Býõ'“GÔ:óQ™¡Ã­@eŒ™”Ò=Ü }å§Á¨Ûªmb¢Ÿö»YœmaSo…GÞ^*¤÷t.µEÜ|Å Ô©=±Œ1x÷¨Ú{UäºóP›»bpjOí(òËÅA.µn'Úª·ˆ—ø@]µù3Æ*#­ÌOQ^XÝÀª²ÈGTÉ$+>õÄkŒŒöª¶éXãëS‡Èíšxû½©Ëާ©“ãÙÑdRªéádÈÀkAbÙ?:•Š‚iÌgœmªrÜÏ#—ucç˼Zt»%ÑÚ¡ë;u` ZÁ ¶]ücÒ¬Ax·cåÀ•i!Þ¦DÉÎáS²œãŠb/Lã28bÃïT®ÀÅcÎ¥œZ¨÷Ø[åúU+«HÕ‹²†Ï4±H¡V.:Vœ(žXà{Vn­*õ®y£rNÑòÕý.Ï2 q[³ÇLáx•SìÂT< V\ö‰8ÊóúUtÓćddž}Ö ¹Åe-›ä…oCCXMÉØA¥KYv°ÆGµ:;92zT7Ê„óÓšlm3‚@ÿ6pOÍ“V`¸ºL Ƭ»…ÜzÔm«\¡?1=é«®\’søÓÿá Ÿt¤Œî7 TâîvP3×¥Užæá 99ª8ïn•·Æ}êSªÜm;¤8ªm¨LîØrGÖuvÑ’åÕv¾¸[yÇÖ¡]Bv#ç$}k ·´wÓÁž³¥–O0 šjÈì~•*2zÒ6HÜ>´Áœvü«ÕEÐ1 ši‘›‘Š¥suäÉ“€ fM3M.ìŒv«P“*Å€I"œ ãüÓdõfš¯óǽµV߯j~ãÓ‚;ÔsÆsƒT°#VË”L0j•u)ÚØÆÚFµVäªÔÕy Ú¥KHÁ÷«ÝcÁë[Ö2"@1ƒNšMü>”‘.vRšy–SÅ[Ü‘Ó*Y÷až½i /)Yp§Áª’±§„Y" €GJåµ8~ÍuÓT®cRDŠ=jͬ{£%Èæ‰$“nÙ~´&ç ¡TòiJ1»k4ØÉ;€Ç­Fˆwzر•#eÎi\]/”TÍf%¸˜ª“î)ଠªã<ÖÒȲÀ9SY—(2zu¤¹¶I NjŒ1¬w Óƒ],¯qXºŸL`~™mÌ꘥uj‹2µ@ Xš½¬[0ÝžÕs[WµU·€ÊžAõ©ïb…Q¾aœcÍH¤Îœæ¶#‘vÜ3Ó%Ú lX«ë\¼ˆUŽiŸ•J’è à•¾® +³)½hTç•—yv²’IíT"˜ïõ­dŽ8Ë>7‚K²äª€4C‘ž+Ñî´•d;1ÓµaÉ ÛÊC1ZV!gùIÖÔv Åò‘Pµ‹… UÌn‡œS…Ã¥Y†éX€qéVò>R W<¿Ÿ§Z…¤`§ bš“!.=)ò0x²qš¦a!IÈâ¢ÄŠAb”ÞʧŒR‹Çö©£ºràzº³K!U*1ëZ–*áÅZ1±nÙ©TF3U¥]äôõëSÀ¿ Î1Ž´¯n„~t†"#ÀÆh‘¶ÃÚ³ŽX犷 0Nõaë¶âX‹`¼Šåã›vèÉ+[M#ÌÆF O¨¦cÞ«Åröã 2=MX†õfm­€k@ÄŒ˜eÅ3ìpùx £5•si$M•ø¡…Þjä6ò2‘œ ¥{c/![$Tv·“B67_z³ É<œŒÕù—ËES޵x–r)öº—•W"©\^ý ž^*­oûйÇN =5ÉùÖ¬p†YNIõ¬«Ë"òRÕ¡ ¾Ü/´a+*ñJq‘Ò˜d<Jˆ9Æ=êd m…XŒàcúPƒ9?VŸYÉ•IFxÏZ¿m—àҩꑉÀ WH wν0kcL1ï_˜Mhß'Ë‚z¡àRc˜ Ž*Á¦ ƒ· |ÚŒ‘œTË·$tõªW­ó`“M‰ËÜÝ:f¯$‰Y;pj»„¶0*+»Dt¨<Õ‹¢0x¦M¾{€0 \šÉdˆd â±/m#‚"¹'­š6zÜ{dkVËRô¬ t)÷‘À=1[¶¡M¸Œ0Î+.öÚK3æîšÈ»‘&‡^â³@S RÏ­a4ÑýÐXu¦Otf˜ ÷ÅIý•k& +ÏQU®t8ˆÎ :pÆ ãJKi-š‰´xØçv)É¡ÇÔœçµ\I†$ùqº«\Á´mÅEœ8¢E–æP½qÇq4iYmëíWôötqÒ»_6#Ö¹kÛO"ñÁû§¥Mg:¤{ö­n%ÆW¥hAzdžǧ4—1 u žµD]º} P½Ã±‘½2Òñ²cy¥pGÓ¥9[î⤞Ã>”¦Üç4É-À)Åg4sDÇ©,Û¾µv6“ŒŽjäWr Æ9«)u$¤``Öš9Úš ÜÙãšrFNrF)²E·8#JjdÀÕíÄ.Ò¿¥:>2IëT¯éU ŒV… ;3€xª÷Š l8¯;Ô#Ù©7f¦²8ºU t®ŽéÒ 2à ‘Å`Åj÷Sç¡ÎkU-!‰GFojµÛ€=TFG ª³[ÈÎ#'µ]ò]-À`*°C4›NŠŽk,L ãš–C#(„éSÛ@ñÆsÆiˆL3¶à1W òó‘X´¦wB¤c8­+h„*YÆÿZÐi#‰7dtëX·—&Ge]»M:ÁÛi$dÔzŸŸ2ªxê1X·Æ>cY³º,…ñÚ§ÝGöÞ}Þâ·Ð[ܲ¬`b¥}/q%$ǧ5›sewÜ+ÔŠ©,Ó³´qYÌó™s·ƒíR“:àc¯j·oĸàõ«ÿÙ× 2ÅG>žA\à‘UžXãࢂ;Ô–’ÃfTz¶5PÜ­ecU GµtZªGÆ1XÚΞeG¥rÓ£F;±ZÚlû¢м`HÀ"¢‚)6³ |‘E:ïA=ê£Y À3jŠ[$FÜ¥sÔŠ’ÈÚvâ¥kRdÆ)gÀaÓ½[YϧíÈ<ƒOò£ËœqMŠÑ è*È€)?(ééDH€6väqSÚD¯2ƒŽyâ¯ÏÌŽ8éU•†{b®BGQƒŠIÁJvÔB¥4ÎD ŒzÔ±|ü0*Ž£€@sUUFpkVÔ…ƒwª÷¸cÅpZÜx¿©ÛÍå\6x­Ë‰¼í9qKl«¡pÀ±š[gfÜÇ«É´Ùæ`‘3qœVTWû§Ú[œô­{©-ÆXt£NÆzäÕÆƒ{Œõ­K°ÝÏ=©^0 éÀªH¥qÏ™qŠ ˜ÖÓ²P5ÌЇ†­\’öâXUJí¾µbÎÁ§]Ç¥lZZ¬iÐg±©¥UNqí\ö£2@\ÖDöhð1dVm Y‰až{ÖÂ>Ö?”úUåk•@Ù©¾Ð%…•±šæ®î~Ï3)Á¢ÚîÙ“mîíñ•šž è” `ÒϬí µ^ ©î8ùjרTbàzÕ[Ke[–V-^0Úç «úeúÈûxÝé]d.J1ŒR4{Á8Ö£¦Äå¸=ëÚ’ªÆæãæòª.íÌÙô©mï¦TÁ<{ÓÛQ—péBßHÇ$Ó×Pu8* «Qê¥HT­©Fã,~•bb0ö©°=A©ÅÁySõQÁ,¸«ËEž2yªÂëvàˆxÎkCKcæ‡#ß­kÝê:dÖ~l qSÅ»9ÀéS¨p A8Í5ÁféSBáTð+>éùé‘Þ ŒqÅiÀ¤AƒŽ•ãË cÐׯü·€V ’eÏkiÕã¶ÁÔ¼ª„Ó4÷¹0Ä7êH.å`psÞ´‘[È/#éT-íãšð`Œç5Ð]CæG´cQéÈо1œš×HþñãéS"QRΠ lšÈ½m¨zUí•Z2NÖ©_N#pª z𯹔=Èbæ·]â’ÉUyö«r[C´ÀªÑßÌäùc×’_³ÆÀãu`Ì÷ Å@Ï=)‹+ƸqSÚÉ ä²žõ!ºµFÜPf´!¾ŠdÚBàö¬[˃ ö#)¬P˜MA ©eÏ,vÌÓí =ëRÖÃ{ì#Ö¦—L‚5bO4Ëwòhy®˜Œ* }*²;,Û¶ŽzÖšZ+ lšæmoš Õ‡\×saª4‘)\ÖœW„’_÷ªZ•ÂYƒ â¹g˜ÎÛTñžqZV:[J…ˆzÕ‘¡Ds¸ —û Ÿtf«?‡c ÐgÒ¢oÜZ‰´VùYMFtI@ÆZ¯.•2€1PysEF)|éÎhk™@ 1Td’BÙ'ñ«óH1‰;ô®žÆ!$k’2zàÖå¼+Ð÷«.ÃÓš§$8ç5vAœT –ùpaMpsÆ)¡NñŒb‰• ‚O¬ü™$sÍ$ óÆ:V‚±Ø1·›=2{×+â Bs =«ó$‚à–PF{×A§Ä  v§­•‰FjµÝŒ°ƒ•Qk?”£ä\в.¤}Ã#µGi¿iÞ£¿ÑDÍ"ÜõlÚQ"jÕ¬ÊÊÁºûÓ†w•i€–, V ¤ü£=«7t¶ä¨#½6â>1“ó©w¦2Â$jE“eŒY8ç¡5~Ià26¥ÐÛÆÝ>•’Óï½Â㓚ՆØÜPsÞ¨Ë^iiÝSAc W3N›G· 3mVdµ²RARk*uYæóx Y·Ë¾P8À§ÅhÆ1°íS[iÒù¹8æ· µ6Ñc‚جˉðÄ7ZlH{gÒ´Ø‘U‡$žYò€=N+J4ŒF£pé^xƒý(Jét™Ù\(·^á’À¬«™Ùá;¹Í;G´IX3w>•Ö",Vãh§F£ÓšPØ|cŒÔ…@Éô¤`3Œ ¯´‘ÖŸ´è*‰S¸·‰·ƒ§¥a½ªyÄ{â¬&ŸAúñQK¥ÀA;tª§KŠ>CšÕÒ²­·9º¥JƒŠ‚S×õW{qV"r¨­BåÔSÈŠZr¢€EQº9È U-ù‡8ëR[€§Z¹Ý‘€qR§Åg^B’+ÅßÙEæ¸ÇCYSÛ,ØO5=†£=»Fzè…Á¹„EéMû'øG4è,âóÛÀ«†$‰Wbô¦E;G1g½k¬Ì`ÆJ¡4΀•àæ£‹Q˜c85~ÖõÙ”Ôã­Kr«#©#¯5¨£j€=ê­°’]ìçéZWQ¨¸Î`\åªãÙ±ŒÙ¬Yò$#9ɧZª 7mæ·aÿQQ\ö 6LJœTp^J«€jµÍôû[çöªve®î±#q[Àˆ›@à{VQ%ÛZª±ZÖŠ4E]uURp Åsw¯tN1“Va‰"•6Š—PŒàqTG œÕ‘q f¿ÿÙnip2-8.7.0/share/nip2/data/examples/1_point_mosaic/cd4.1.jpg0000644000175000017500000005312013224651032020236 00000000000000ÿØÿàJFIFÿÛC    $.' ",#(7),01444'9=82<.342ÿÀ uÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÚ?è#èG¿50û½F+6ñ78úW?w¡b1Šç¤VûOÍŠÐÓÀF<Ž+v;ŸÝ`b«‚dž©Õ UåFf%êkXö¦E=¤UHɵ§hæC玕<]¸Æ*67SDŒ Gµ*O#ðçåËœ4Dqš¡lå%ϪȘ*?Jz)ÝŠ°8â‚0r ã°Ç$Q—lqÇeaÉèµ:ÅCQK ¶*KC‚s·51_œ‘jŽ=ÄHÆzRLŒ»v㎢¨ù®nÊp« Ï» G=MHœO×4…NÜœ{Ôäà~U]ÕÁíH"Ëî`)ÏÇÒ¡%U×nÚ»RȪw‹ä¸q‚=ª£²¾A5ÏjˆbÉ\`Ö#23a¶ñÖšÖíñ=1L]JòÜá¹Úœuér7 çÚ”ë‡aÊqëSÛøŠÙAÜØúÕ[ß[ÌŽºô®aîñ9uõ®§ÂÚ‚ù†91ÏL×jA78^jhìaSÂ.MhAn‘.@QøU¨eÚ3‘D—*ð㿟s¨~R¸WíLàå‡Zk€§–^*“K¼¹4éî!޵&±H@ šçnnåšbàðM 3ã½{ 0pFiÌ0JΙ¾}¤ŒÕ9! [ æu(’+ŽÃ4X©y1[°[$œK @HzU’ œqùTqm@À Ô6ÌBõ:üþ•Ðiâ/±”ùwŠ®ñ¸èW}ÊwdQ4£Ú 3Œà ‚âå³€*ŸlãvjÁ>æÆ*èq»6àÃŒPI_LÕi2OJ³m ´`ã5*Œ9ß4É‘ž ªQ17ݧ‚Iû¸õ©`ÎÚ´HdíYÆ5ûNFÚ²"%â‹“´pF~´ÕÀN þ5 UÁc·š­<{‡EIäYôÅd2« ªy¨³nãžjØÓËëÍX±ZH¬qŸå]n®§Ø VÌzÜLÿxVŠjÑ2}åÅ ¬Â«ÆÒk:][Í“—Õ Ý#r\c½g_kÛ¡Z°dÔî&a‡©Ræd9vÁ¤šéæãwNÕ1™nÆ­Y[U Ž9©ˆÚq…â½V% ½½(qŸO²ïЃ¸‘Uã™Ydf¹|îúŠƒG›*A#"º‹\4d dÐØŒöúSƒäòFM>䆃+>Àõ_ˆ( 69æ­ L2.©e¼+ód Ï–íî Æ>µ46nèXãRh²Ûr*CQ¸ŒúUkëoÝ—NÝê->àýÖÆknœä÷æ¬Ær: I܆ÀÆqUÙ™¾]ªÒµ,”*ŒãÔ ¶ï$1QËq·îâ¡3±¥CÜ[Q€cΩœ`Õ*L|¼qžõ\MÎ3W’EcÆ0j+޵$q€©IÀÁÆ>µYäíÇAKæå9¦»äǪ4˜Èf˜#µTº;#.ØV(I/&àqÚ¯ QJÍEqemµrx¬K‹Ü’ð¨cÐã‘N⣛ÃG—q Ì£æÕTh“n'm6M*æ2®? ŠE¾HÇÚ³Þ‡l‘ÉëVá°¼`/J˜­Ý¸ËçGö•Ú'R&­pÙȧýºlnÔ.]ÂçÓÙZT9úÕ»=9WÄ[ˆrùã[”ä€Ò¦Û…p IPõ]îräåk×`,iÅ)ûÇ¡ªwœ©èEaÈŒŽNkUÃÅócŠÏÓ$øæºë0sŽ”Ë‰9äT`xÜLó€ b«È¯È=jìÊTqŸ¥>uhûŒUYæi6¯T‘4O«ËòãǽC–l¶G=êL²È3ŽE]“i·ç:W95ÂÙÝ‚ÚOjÞ´¸ ‚0EkAÓ<{Ô¹@Y÷”c5©o Q“QR Ë9sRl'ž*½NFd¥F9¤g=jE9LôŒÓŸ7ziÒ…~@ð©!F1Ž˜¨$qÉ$`V{ξiŠq¸^EWžõUÏ*qéU¼ó1;5Ú< œô£çÊ€2€¤â¶44Gn%e:RßÜBÜŽÕ -w+3}ÑR(%±»Ò’+eFÙÆ:TÍ ``U„c#å'¥Go ’X¨5,–ˆìÅÜUi­` °¢i©¤ÚîÜ#Z‘ì£ Â/N•Îê,ˆí œúV[Ƨ‚£J³ [(Ð ð Löp±à PÚTM(#¥gåᤃŽÕlL… 1вo·ó —{²®:TѪ#Ø&£½$Œ.WKd ´s^»·€~\ÓÊàg¨Ýaª å ÏzçukfÁô¬g1\àã­u–WYSŽ)öúƒC _à'šë,®Vî4w­”Ñ!•7£4ëkV‚B £±©e„`”À5Mnݤ˜Ç­YXãe Ç5¸ùÝÆ( Û5RèdŸZ݈̚ܠsY“nˆœâ°õÐÜZ’ÆT–@r0k¢[0ñdm©RÜ$dàU˜€Ù•¨®«8®wT‰e‘œ‘éY°³EhJHŒsY©rË>Œg<±‡ù¸ ÕëXUBô÷¥Ôm–ÞPÊGÌ:Ö üXùÔŒõÍf™f•”HõÐi‘ óp3W¡Ö3ˆ¾_©­ õü¼’½3X†C5ÁqŽ{fº .2¨ ó­èˆ*z G/'Ч=ÄbQÊÖmþ¡º3ãBØeÍupÄ>Ì €8ª£[±#¥GªÅÉÚ gO6Âñ’k*Tóºbµ´è•mÔ¨ŠÓFIc)&Þ=EB¶[rW®)ÕGûT‹v:Ô?gtê:—a1qÅ>ÚÃíÀÍt:e‹Ú?8"ºx'+PEH²6ÒH5J{‚$qY—S™%=)òE@=+µLùŒxâ†,$ЧzØRF*¼«®ÓŒûÕ{Ë5‘ú×®Ù¡hcrËŒ­VûcUàóZ‰¨!µ @ ¼ƒN©wn#`7*´ÐnFéŒU[+E? Ár*ÙŽ&ŠÜÆÀW9td[Ï”gž+YOl7.«ú}¬{òëŠß‰¢†0 Ž´‡PX‰äUYõpÊvŒÖ%ÍôÏ8ÆOjÖ‚æ,FiK Ê’oÛÜ$ ⥑VHÏCXæÔ£9^•|ŒeŒçšŽX‚(䊩ý¤ÖlcoSZVÚ¬Wï.E^K’ÈÚµ ò—UêÜëmqU”Õ›»;6Ò§#Ç { f\B|’03M±¸ t«²Îq»­eÞß3©1“Þ"ÖC#>ÓZOd$p3M¸ÓSåZqÒ•¡ÁqÒ¹ûÍ;cÉÇcT¾Êª¥@÷¦CC8ÀÔY¼s"Ž9«ŒVyZ¥. I*˜¨ãI& œU“¦(PÍŠxÓãÇjèaHy°¦Î@늧qÊãŒûÖ{ÂÊû” ì¯Ë&8ª¼)<OÂ1\²qÁ®ïD“6«ÈÎ*ô¯€xj¹¸+Ó“íLšI$C–Ⳟ#÷¸§oePÄŽõv×PÞ« –â2{šÃ– œÁ¢0Ó­+{uP8«AlqQ-«Ù¿ÚJ™§ê:’M€95†d-p¬@ÍtÐ(6AÕA$USpü…zÐâ@à=ªÌ´€î<Ô¿dU^5V[V/¸cNôüH£#íPs&æj‡…†Ö­{KýÀ#9î*øÚንæ³oì–]¤ ¬‹½>xS9Üzç¯ãmÄ~už†HÜcƒZ¶šÃÂ>rõ­‹mF9ÏUçš¶íÁ(ØíÅ6ÞâXd89üjùÔÉQ¸ dwÑ>FÕÉ©FAåAªÒÆ ’¦Í$Ê ‘õªw*7ÍOLã5j×Sà“Ÿn•Þ¨&”ËUßPŒ†õ¥Žég³/Ò XÕ.7+ ÒSÉ}§"«›(L™È5v £D®ÐG%ôQÈFõÈúRF<°â‰õ¨Â•P:VsÞ¥ÇßQЧ.Ó“Z”—'o>•nØJ‹¹W¥Äó1ƒïSÃd1¸â®‰þ*´ºŽü#ŠOµçž+¥€Ç‘è)'ÈêWš«#sž)ÁCt²uJ1e±å™‚O¹‰¶‹ÖÏs]F>ÈöädV•Ä¿!n1T`&I2qZonÙ\ýjÑ xɧÃË)öza3o$^¤Õùîb ²,{µs×­‰6œa«KN±ÀÍYò×Ì1¦2* |·#Ž*O3ÏM’TsŠç¯ñÓ@SÚªK̈Q²=« Óngùf0ËŽ2*ajÿi.ʞثi…'*=iVUˆs·E8šQ+ϽX¼‡ìØ Œ…]X„Ó©äãéHÖa°Ë€*´Ë%¸ÏU‹L Û& [¸»Üé‚6õ¢y×ÈËâ¹=M•çá@¬ù"ãvFqUd‰ô© œ¬ +L^ȸUpHõ§i›i1 Îy4øµØ%o˜â¯E},M#j0äáÆj#ªÆþ°gÓ5bR7?1SWÄL¼ª“ô¨æh6‘…üª™{\Œ…ÍW-Ï |Ñ2Œ0§=‘GâLša¶˜¶3K%½ÊŒ†¨âŽsžsQýŠC.âsëVâÓäœèjq§&rqôÅ8XÄ;Š‘lâÀÈ´ä¶€¸(¤–âÚÊðk6]R4$®ÜUc«»¸b˜÷ÆemŸG Øj²7ü5ÜD0Ç¥>E ž•Fd"EÀSߊpGLU;À¤XW–Ÿ)eÛÊjvÍ¡öã5>—vV@¹­Ù&Ü€dcÞŸj@c÷}jô· BFF~µœLÿ5£1Æ£žâU…‚;¡k;™J¾9©çƒÌ*xÈïZP#¶È“Œu5bëʵ*begïTX™ cŒš˜Ñ™˜V¢†êL¨éÀ«úFŒï´¸ëŠÝ+¬ p›ÁàVuÖ¢¸ço¶UK©æS±p)D7 ¹&¤µ†x§W=}Í]Õfšd ‘»µP†ic#x*äwË‘¿Ž{ÖœS+¯cëMºˆH¤ñÓµe<[Wp b–Þ`ÒaØT¬Íq6ÀFßJ¯` ƒÇ§JÍ–×€*°“#L‹`“çþë”P7(À튪!{§`OJdú\ÊÀ…üEW0ÝÅ»†8ª×ܦ2j›\ÏÕ³SÁ}"¿ÞÁ­UÖfLÊSâ´ƒŠ¬úÙÞ8ê3QeÜòqZ6šâF0Fjßöún*Êkðàt1×"sœ€)ÑkVéÝhmnüm¤þß·U3Š‚_D Áªmâ"Ù üBëÈRm~gQµŸ`sB3È lsKØ8­[HX€x®ˆBÈ»ˆÍh¬Qm+ùWO žÒ’FÆWŠ­)ËFO¥)\©éTî>˜¬·”(øÀéYzÕ¸{=ÊÌÀ|»Œñžµ¶³†‰I#5v)ÝVBI/¶jżn¦— ãóLؤTžCá#¥k0•Tñš|—²A&ÕùsÞª‹’®ÆW'5v;ˆÚ,®û©u>NÑŒuÅIiœC2ŒœWKj›PÛXZIJÉpcŒqžÔËM0°@ VÌ6* *ªæ§·¶På\ªŽù©>Ï V{u'ÌÓÝ`…犢öJI šƒ|ÖÇJ»òʼ‘ŸJ{¢KV=Ò´ 9ú¹§Ü¡“sz’úù0  gù›°F9¡vò ®öªìqŠŽâÚC8ÅEkFàã[ñ•oö}À Õ¤#œä}i$ÐÙ‡œ¾¨}j¼ž”Ø«¶s» éR eéÖ‘´»…#rð)ɧÈÍ‚LöN€vã4Án@äÓL¹éØPÐ’ØÏ8¥ŽÍÛ‚ ©„‰ÛPÍG€@¨’ѤÉõ«I¦»åVRÜ*FS´¬Ór©éI{(GàŽ*¸Ôˆd~Uè6ç1’i$QíÒª¹×*OUãëUdQÏJȼ·Ür¸È¬{ÙÙ!d~•Ì—Ì„ô9­+UÞ€db·­-ÁÛÓµX¸â¤%@ŠI¶… 1TžéFkñL¬Y@÷¢Æ*Qž†§Ô¦Ù“Ò±Q¥º„ºôÖæhe“ç`¥ij–QÀà!SŸJ¿cm V¤³*œVdº»Atc‰â®Y‡¸}î£qæ¯Æ²£Ž8«)p°ÇȉªW·X”0ôíVtټ܎2)· Cœã“ÖšäyYÈ-Ò©3€Ü‘ʇ¡¬K˜$Šày}3[P+Ç †ÆHÍU¾„É$@®qçh&€3Ú´Ñ¼È d {ÔP¹-¶¬K÷ öª¶÷;f ‘Z¶³E&s·Š‚ä"!òÀ95Cíd?ݦœ»œ÷®¦Â”€+NÑÖdbä÷ Ù¬“€ÄcT-p¡W"™ò.GÊn¾”û½’¶àËŠÉšá‚LëQ,LÑüÝj©»{yvœb¬K:É eÛ¿Þ©Á«4’¤ V£:¼%x´émòœâ³ˆf*qì*¤ò¹ÉÀ©'Ô£Xº‚q\ûÞI$Ç j \—8䊰ˆå8¯`Œàvü)Î>BF*–17AÏJ²qœsPL~B? ÆivÜ`ã4æÃ£©Û+ÀqŽ•Ë®è&=85ÒéÓd!ã5§#)Ú=©>ÐÍ@U¥$Œ{š‘"TBp*¢ÿÇÀ f¸ÀéšÄ–)àã*»¡R4±Æd›WO¤Z¬cq#ž:Õ}fWå‚9íWth†zƵ&–8\&5©iÜÄ™@ÿxUƶòâá”sX×ágãæ‹ùQbTB2£šÀ’æRûw©ã€ÆîIæ¯SŠ¢ö&MÌÀV3ï†r„÷ÅS¼à¸:A­M>w–œŽ++ZR£<`£lÆàlžõ¨"xÐ tª’ÆÌI'“UŒ2†r7/V´“Éò“øÓž•ˆÀ«ZH˸‘QO¥ù¬Cã™s£˜òÉ‚=*®ÆH¼¼â¨¢:ÞÇp>µ°Þ_”QœU)#!²¤Y÷3²púSìæ.Ç$Óš×·”ðGçZ1ß²‘’*Êê<àÓŸS01šŒê8£ûD9v§,ÆSÁúÓÚfCË Ò%î׈⧒íJç+\ö¡~‘O» Ö íü³Èvô§+‹ÉÅ,6Œß;çRù*¸aÉ©Ö&Ú8Zõ¤Ç—ÛšB2:ŒÔ˜1Šxù–ªÉÁ=+*ædɪr"=ˆ¨'½Œ®×•Íê2Gæå1Ö¯i3¶v’+¢ŽPW•V•‡œ0F=«I"Û@€ ¹šøüM^†Ú4È*Ý­ž]Çk¡‹NAª*x€hF¡c#$⚬½8ä?9¦»nô¬û…*ùÁªO)G< uÍ5®W sTo] µÍʦ9ÿ‡®k^Éá'ŒU¸“Í8àÍ[0>âŸ9{U™$Xðr*¬·h1Ò¨ÝÝî_ïYÏtêß> ŸZ-®PÜ c5¼ìÒAØñX‰1r03Ö¶í›| d*Ķä—PsÒ¥“YOõp¸ÅaNíöÅ\æŸ,ï>Ó6Ž \‚VÛówõ¨gº’ÞPØÊt«þe±un¼Ôv—еs©Ãï¹6®u7ª“Ò­jÓyvÀ3Ò“E“ƒÈ¨<@ÌG=9¬­'q»šèXÆÑ1À$Ñgsóò8­Ô˜ˆðÇZ ’™â’6f<`æ3yq³ds—÷eâeÈÎk6Ñö¾íÜ×Eo0x`î#Þ¢–uL”œTPÌ3€p{ 2­7Ë‘Ô)QŽÔ«p© š²Ÿ_¨ªcr6ƒž¦£m:Üò#_Ê›,Vñ/aTäš¿.Ò«@rÍô©(W,»zTrI#ðÓ¡³’iy}+n Šª6_:DpG¸ÍMolˆ|ŠŽiƒ.<ö«6V¥ÎH<Öͼ ƒŒ ½çc€Ê1QÙÝRœäŽ8¦ôlñHWæíøSXwªWGõNT œŠ­% dÈÀ5“{ ˆ+»YC‚¯i·Œ«±›žœšÚ³}²ƒ‘×Öº8™ ÇJ¯pÀz`úVEåÁvÀ Xâ2E“Š‚hnÅfÝFrŒûSmìe‰ ˜ù}}+¤³K–MÕ%·ŽÛb…,J¯c&å#´gMÑ‚1ôïYïlÒ‘ÀôõŠ\‚¸Éª2šEÁ< ÖÜqî@Û@ÅSÔâ&”«ÙJB÷¬ë§qpÊœâª2M#m?•[¶´ò~w=qYÚ¬Þdꀌµ{BBC7KÄŒLª éU4°—,¸úÕﵫ3"°9§Ú·úJF;×O ˆ±©%qK%†qDS ŒËÒªM¨DêÊp+—¿›{­ùUkrÜ`ô®O¶œD95wìïŒÓd³ÀÉ#4ZŰ}*òaÀZ@ª_œb›(PãæU ’X£Só©'Þ³¦ÔbPGúÕ u‚ß(ãB{Ó #­E–AÂàS’'i6žqÞ¬­«îfQÅkØi&oœô­¸4ÅŒç­åù ÅAu2ˆKdb²%¼2€«€YÓ­šæà‚º¨íãŠ0ЄɆ qQ´‡'šÐ·B©Ú¤ä7o¥e{ nÞ:zÔn½øª³.}*¬äÛùTjÃAª— ¬H8æ³.¬#t$(Ïjå5!-¬€¯´ô]@È» Õ×Ú\e6’3ŠeÛ’"±˜—Œf¶UvÄ íéY·“B.*’2‰rqÏ­]¹¼Úi@·œg56’åâñÓš­ª¡Ú{ÒiÓæØØç¥n»‚™VÕr$f @Çn*÷amŒŠÂ·“ʸ<Œýk¦´¾†X@ʆ³Uõ øãˆ—ÛŸjåΤæà• ÅnÙ¢0í´–ç5fT‰૟aY:…à†"xÉéX-½ó#sÔ×I¢Å²×qž•â$%÷ã·‹l²Ønµ¡cg+K’+Q4éc|Ž+f;<¡–ŠS§¶ß¼)ßd¦«QŒÂÄ©ùk(Üž}jÅœjÓÆ3]T2¬h£ `zÓÍÊ+Uî/ãĹª£UDsŒÔ.«ód¡—W!ò ©&¦ò“€*œ×ò– ØÔA$a¹ºZ’;`AbrjÜV[À3šÑŽÇŸ” zT–V°ï`T­)â„BU¥°•~è Z†O”­gLØrIéY—²I2SÒ¤ÓôÉfUÈÂúšèm­¾ÌÀ8ïV^Võ˜ŠKøÉï[Z5©Ý½‡Mhj×â ® Æ+xä¸,ØÏ5`l.*Ì„°AÆkAuiçÀß–ÅE.«*ž§"™=üÓGŒžy¤ŠúUŒ©?V–ögùwp)Í4“"®0*Q $g$`ñÖ£+‘MT‘œOjÙ¶ÓâVp­´•`óõ­4 12jêX¤@ ªO¥=—x+:ï àäÖÔl¯ ݊úeÖWµ§nXÄ qVÐ ¹ãšÈÔm ½ÍAcjË>_«-âà Ï3¼ò`œÕ«kFf,@ÅjªŒtÅH±óž1üéÇj äST³6ìŒtaËž9§þ U²N;S³òŒãëQ·¡Å4¨œ|ݪ6<ÓKóŽ*)3ÈÁª7t Y[®ãÀ¬ùá$í)X:¥¦>eI§]yR.H®–'2.àÀäqRª4Ñq‘Ò¡HÜ7̸椑IéÅK ¬‚GË[À‹ªBÊAQX±Ì €Ö„s‚FÜf¤TŽ`UÀÅsúžžñL^ ™-¹Æ;qÔÞ4!€Ç¨¥‹V@¤i?·6¿È:vªsëS}Ü(=«5Þid%Û>Ô¾W1ß5zÇI2áäÀ^¸­ydŠÊÔãh¥r÷æâã;¸íS „B…ç=jQh³ž6œõ¨nt±dã ºùmò€OJ›û=œäàf¦[éÁ5Ö›r*¿Ùd#@_Zž)X…jèÒ¤—ïšÐ‡B@|zâ§6vðÊQkZ Uh•Bj'Ck'N «Ð~xÇ­I´ä“Ž;ÔáWr8ÅeÛ•ûF+WzÇÉ‘u(–c‚3ZVJÆ5Î*iwÛ)‡pÀU &Ã6Â*¹bã’95jÖ\3[ñ Tq‚(+ŒŠ{}Ì®3alF*Ec©—Î)D£Yfç§­H Ø…G(ùGÝ¡x\ñšŠ@wcŠ­#øã57CÅW3€ÅXM“l˜À©Ínsž3Pˆr@'éT¯,PH Ò¹ ›V¶¼*>íoé%ŒXlUõb¯ŒŽ+JÜ#Ç“ƒW¡´‰—$.Gµ$±€ b˜_ËãéT.6Ü1^+êGØñK²ÙÊoÀÖµ¬ëË9©¥"à*?*«5ˆ=‡”À€x¥€*\çÖn?t9h7qŽi,1Æ{Qµ‡qC£'ªÌô5\@)UrGN(’u …æ²n,ˆ—Ž•Ÿ%»¤œNÉöÀíUg¹Iã1ºŒúÖ7Ùå `zV¥Ïž»I®BålŠÖ¶¸W\äf´—,£bŸ ã¶*¦ 8UKëQä±8é\eÍ›<Œb°\¼²d)e™ŠnG¡¦¦­:.7`Ž•zÜ+_#æ¦MÓ5öôÍÁ#šaÕdqó8Õv¼çïdöÍ#¶:gµN–îûW©?­tV:PHC•äVµ”ÏlÜ·¸­95ƒör äž+0òyÉÍjØAæHhÚ+eù#€ dpÀ$ê|Œ`To³ M¸¸L0ȬËrìÁ溻v «c$Rªþ÷b©j±™™WŠÆEx¸Q‘íHÍ%ÃãhÜÞÕÔivÿg·PÊ3ÔÕ騽9è*…ÁbvŒ*³Ç…%Šâ«”‰;Y×s¹V9±ZêG›a«–ð<äq[v¶H€ Õ8wc§ Tʾ `Šõel£­v0X¨‹f"²ïìd‰A•ô¬¢%u© ‚W8 Ÿé].Ÿ DU#‘ZÄxcÚ ŠÜ;¸ÍZ’%hÀÕ‰t’@í´Œ{V[–f>µsLµc6ãÚº˜á Ä)± ˓ҦxÜ65^K9ùAÏj}¦›ÁsVdÄ)Ú¡‘÷méøÕIäØ $ sY7WŽCn*š9$dƒDª_­6ßL&ò8­»{eETߊ¹µcÏNjÀœ?*z‘€3œb¦ó@éÅ"`N=)Ht昃ä`NEB÷[(ãšš0ǪFæF$Œb· B (ô Œç§Ô?¼=9H ãŽ)g* Î8¨Ê¸ÈªêJ¿j°¸)Øf«O˜­ÀéYM°Iò°ÅKö¶SóŒÓZx\`…Ͻ5âŠHú¯µrº±¶™HØM\Ó®ƒÚ˜Üjsq‘ZšTåNÖÆ+l°ÀQŽzšhop=ªôåGÆMDÆã2ãë‘ÕäŠ-H˜q¶ªÜêÓ2c§J©g)–çsŽjžñüÐGG«:nŸDƒOÕ-bŽ0G5£ÛÃWÀ4dzýY=*ÜVÛÈãŠë´; À­Ø”gT¦Ý6ÜÏ­g&Üv®séIä,$íU¸„ÏJ²H$3Š~Ðãm4üøäTÀ®Ó5”öq‰‡Þ­ÛÆ@8­}¥¢ÈÀCz~u*ðqÆhiì>”íáTr1Ò¡º•LgîÖl÷É€6’8¬‹›¦•²xôR_¹»ŒÓ \à–­;k2ÿ3Ò´Ö5@2L` —pU  g­E´òÇôÝÊ?„{qJ«8(P89ë@|0H<Œô¡—l` Ugzc¥fjSˆŠž*¼zÚØ aS›¸PíܼWQaéO`9*²0•"òsÅqŒ‘PÉÎ: T [x¨]2IS½©nÏLTfùÎÜÕi¬yά«ˆ™XŒZ¤Ó:µñÚ³¯§ycem¤ÖeµËE0R1ƒùÖøÄ‘yƒO½Mo)IW‘Šé ;£ÎEG&<Àw ˹KráÅO+ƒnÀÓÂj‘Ȳ¶Ñß"©Cò©] Öž§3JÛ€âI€9­kü»DéøÖn¢û®ð*¤¶Ž°‰ ³l¶¸Ö•¢ȼ}kµ±A²:U¤S¼ž1Þ¬ò˜ª¯ Ž"vóÖªBÂl¶&¬Æ0§¨=r3Ž•(bW”tÆiåH‡¸¬‰£…ó‚ª3X•ÉR¦©Í§BüÔûÔ"ù¡‡Éê=*Õ­Îüǽtº}Îøöä`R_È"BàŒûW<æF}ËÖö¹Ñ6ä{U)ÌI*¹÷§›u·¶û£&´´H—É•ÈëTç€Kv:Û’ÃìöŠÙÅrW²î»sÇ3Íþˆ£Š­¾s*äc5Ñiñ“(n+®·9AÓëV°¸À«j@=ª…Ð 6¨þµ‹Ž*|æ@Ô ç85"®ä9ÛÅ"ðFqVr D gȇ~F*ˆ™ã¥#ØqŽj`¡F2¹ªwW¢•ܹ+kà\€@õ¨|ÝÀ’Ù>ôÆÍ*Dò8sÜÖŒ ˜ ¼±¡\¹Í^M¡qÆqNb0:UINIZ¯ ƒêir¹È¥EãÍ{tšBøã>˜­hœm:R¿Þí\Ѹg<~u#}Î1íŠaç®1LU8¨%Œ†ÏVÇ(XÈ4.ÇZ3ƒ´â ’0ÀäYwV;—…fOk2ž8U£—iŠÉ»´tùÇ劎ÚBÜõ®†ÂíShÈãõ«Œë(@§ZÀ cå<óEÔ1¢UzqXŠ«%Çc=ªÎ¡±‚D¤íZxØÉÐv¬Äc%æ3Îjα}2¢Bp1\ù]ÌX‘–<š–î=/#§9ªÚhÿJ®ÏK‹ï8®ŽÙCx«-fæyÄã¥Qó·±'þK0 ŽjähAÉ4òääScb û´ìnqŒ`U¤ˆú®=* öÆ5”·€LA#й.§Q`0'Ú³¦Õda… éYÍ;»ã=}j ÊrEXŽÝä b´¢° «»–­m‚|Ì {T»I#R|¡xQOá@Á¨šLr*£îgÎEv®~_Τ‡‘»ÔŒ£ãŸAYm87E¯¯D«»9üsRq‚r:Ö}ôK*•®bòShä–Åa_ë…¾U ûÖ#\4ùËTÉ”i~ÿæ`×±ØGˆ÷0ûUèÀÆCN+“ŒÔ-òÿZ‘FG$P7\b™÷_¦9VɨÇNÔ3*à*=˸žåL”€¹8¨Qƒ1Nd8ä wª’ +Á¨šÕJçhª—1ºcjóÖ°¯´Ÿ$@1ÔV@½6ﱎ ZRY§D$gÔWU)\gÚ¨ê²4q0lg¥dÙº,ƒv0}i×s¡¸ÈeÀôÅ>ßUÛ#cžO¢Æ%»,ÀrsOÖ- •Û8À¬8мª¸Í?Vm‘ã#§J‹Iœ ît¸Ñ·qÉ®‚Î-¼U— ¤±#ñ¬»Ë9ö©Ρ‚2©’FjÕºõàUÐN:Ê •È<☓ǀŒÕ¡‚@É©žâ(“,ËXš–©«ŠçÖé‹psš{3·SÅKdc­M³È~QÞ­Åb© Î =kRŠ*ÒÆ‹Ð­6N:b¤NŠk¸Ç@qÒšÒ3ÅBAl€G4˜ÂçŒÔ+!}ÊH㎵$oƒ´cŠ~ _¼2kšÔ7Cy»Ž½ªÅ¾ª…päüêè»S!…d_ëqZÆrÀµpúƯ%é;HÇjËH^CœdžÕb'Ý·Ö­¶˜ä‚ô‚C òñ^•ÙT±1'ò¬µ qéÅT½”ˆÉR8¢Òq$aŽ*+é°6ƒ×šuºâ1œ Ô­(/¨åOâ¨CdvÏ¥2GAP\À¯}«†×ô։̫È<×?o)ŠáIìk³Óu`YFåtÏzW½ûL½A­e\*¤dZo”XðÙo­h 2xí|æ\~½áûn<Ö[p#qÇ5ÏÛÓŽ˜¯(lÁ5.”AÓÒ»í21ödéÍk$j¡s}¾B‹Ò¢‚?›'óV–p£•£o ¨þ´ÈЧÓõ¬‹ÀÄ’1åYk[V$€Z¢›\fùT ûUYoäòrMVd’FŸÎŸ »îÕØ¬¤sÏJÓ†Ñ#^@§â4,D®GPÔf»“$àÕH 2¿85·i£î¶µt6:m(ükZÜ…ük3R½Ùž@¬(á“Pºó]<"ˆPm=+©¹GPsSX’ƒ5HÕòØÍ>I>\.+:wv“ïÆÓœô«ÐÞù幕 ­•íÿÖ£9=¨(Fs·Ð€ÍÐzW ªÅ"\’Ý*++‘ ÊN0­mß_¤ñŒŠ³¤®pxÕ­Jô… ÏÑ~bµ1Œk*GžéòäZÒÑ­w‡%Eeê»!Ô‚°z‘[z[Å4ŠbPÒ»8¡f¶4@«’Ø'­UŸzLS-ƒ àV³\-¼',3ZŹՙά·•æïlÓŒ"EÚ¸úÕ«[ 0µ!³ ~UÖ„qR3éŒQ‡%ˆt©LŽØÆ*XÁ#SÔᇗyCÐS%•›nÅ! ÍÎ)T §Ö† é“Ywr4RžzÕ›K…‘zóV;S^UFíU§¼‰FI\×?¨ÜÆèßt{× ©\ÈÎÞ[dJÎRã»TñZÏpéÅjÛiÏ€Mtzr,Ç-ŒŽ1[Q2Ç€1ùT³ƒ;àW+pò^ÝmQÆk¥ÒtÕ¶@ä ÖàSŽÅœsõ5©mŒΞ¼g$f¢”ÝE<9 Ž?:‰ä*¤äfŸfõ¬ù û^N1VÝÀŒp3Ò°/‰‹eF}jº ¸Þ1ÐóT®nwK…`})Í+ùCY\ºJFj{}@ym’2=j8µ ×%xæº9Œä㊸@mÈ¡=«fãCIíÄŠÁXÕƒ,kk/–XõÍmèQ–…ØôÍsž%ˆK(:V§†âtU%x®É.‚ÅË*Žj´—ñ„%HÇ­V{¸ÜrÃ" 7ì8Œ «=ÄÒ ³gÛ5瑊‚1ëSÃls’rkJ G' ­hÛÁ‡ÁÕäBêiB1'$AH©óå°O §ª€äœS‹ŒŒ=Ž1NV 䑚r«7aQJÞ\Э޵9e|t¨ÈÁçŽrœ`ξ‡zœ‘X¦âKi=êí¾³_œ€i²ê ·ÈEa_jË–;²GjÀ¹¿–f;Ž©,~cð3ZÖzG™†Z׆ÙŠ5V•­Š”;Õsg$WDÆÒjù"Ú-îF@Ís÷w2^ϵyÀ­]+IT_1ÀÉõ­Ø# ˜â”0ª~5vÒÜU¸'hqÇRddô¨eÀ\ñšb’A'÷¤™ƒ* íR#NÜVmÜÊ“g#?ZŠ[ãåðEsš¦§×«5 ˆüóL7<çw>õ~ÏP2GsZY$ˆ àÕÓ ÈOw©n, …“c(a[ÚdÑGo·p«M8c…+NxÆEW¿@b8î+œŠà$ÅéYÚÆ³*c'ž+–6…ʑȭ­ ä©d(㌊شØ×(Ig5ÒKp`0Î8®FêéZùØZ6:£ÁfØQX—·êc+c¯5©ey4pLGZ›í¹Ã¿µösOàr@üiMÀ^ƒ9ïB¬³{b´mlJãphÅ !ç«Q³°Ú ­À„?8&­mÉÉÅJŠ žzTOÃcŠŽ0LÐÔþOŽ1OEP§F;Òyd·AŠ‘ àU-MhaŽ=*„WÌŸ+ô­8æY94þΨ]ÜGႌÖ«":–@Ê\^˜X‚Ã5PëS”`šg’wÉõ5~º!Bc5zÞÉ,%;×q5µmnn0x Zkl‘¨,|té"nlW5©ßµÄÞT}*敦…Q#ºº=Ѝ6â„B À““š»jä[!8éS fÏJ7œU+»•j•æœ%%ª·3…`ÄƒŠ‚[ì”Jʹ¹g9ªºO#åN 5f-gLÈ£šË½ÐÚÜ–LmúVÝ›§lzTÛã|ÏZë,.[…‘†G­7ˆSä /­Pv‰Û%ÆG­XI‘@ A>Õ(¸`3‘íV#¾~ì3MºÔB2 aüÏ1~9>µ`Ý3¨CŒ+ ÿNi®I\ Õ_°\@ø “ZvpºïøŒÖ›È c½cÝZŸ´R>nµco—ÐAvªK™q·#éZ*­° ˜©ãIÛŒZ”[¹ãiñi·2¶HàúÖµ®·™;V­¥’¯ïVM° Úž¶jÎ:~m Ž1‘þ½/ì;vHÀ=êUàc#ž*&L“œSÑ;ñÍ,¤¨ cëU ¸ÄÞ[âµCÜTfT…ǽC"‰jÃÔ- Yq¶³F¢ö¸ù†j—þEÛŒ€}ë.óTɼ¸#­dÞj"…ŒŒ3XÒ‚ìK Ÿzuµ¡vùFI­Ûm68‚´¤dö­«hx ŸJººz:¶ð ¨µ„Ÿtm«ðÜ,ã*Vžd ¹$:Ö&§¨™IŽ3Àâ—JÓw••ÀÎs]2@¨˜Àü(…P8§ Ê)Ãn:Š4÷2[ `3WÆcŽ•—w;3¸Á¬Û‚W Æja;ÇøUIÞK…ÀZ…m'cŒu­ }3#ç"„qË»"® Ë0µ2xVX˜mÖ¹MJÌ¡eÇ¹ëˆ 2gÓ½Gö–QÀTOzÇ€sJ’M+®ÑZö±¼k“÷LÞaî*³ ¨®Vqƒ»?Z®Æ+8¨#š`ÄœdzÕ¸æbAe§y tQšˆ¬ÎÀ.ö©Åœ®¼œûS†™!ÇÈO¹©¢ÒåÏ)Ç­^‹F=ÔÚ­®—@&­&Ÿó°UØì£ Œԩc¢þ5a#UìJ—ràPnÝ'j›aŽh$žF9æ”ßJóÆ3I¿0^3Sã-ž? ;Ž”®¤õâ±uÐÎx4€}«¸gÔÖ‚*?;Å$’Ç?0'ëY7º‚²•\b¹kÝ®N­a]y‰Ò©‰ågœU¸ ’bW šØ]* ›¥À"¢6ê¯û…ù³Ö®[Fþ`ñÏzémb]‹´-Z¡H$f š$–2¸SY‰ ÙËÁ*•õù“1ÆGZm•“I ,+¬´¶T‹ б´íÈÁ5^xŽBj%`T:Ô¢N9Å3H‘šÜÓÒ´‰fSÈÏjÉ•³ŒæªL|ÉÈÀ­+{eXbµX0D¸`”ª¯@¹4ÐBžÇJnÀXžýé#C¼š”©=TÞ²õ;2ª+•º´o™@¬×Ò÷`еm ùŒ22=ëz 4€*ÊiQ«Ž«‹¥ÄWýZãéÖ˜tȆ?v¸î1QM¦@ÿòÌ¢T>Pb«6‰¹Â úâ¡“AÆÜ~T£D!ˆàÕÈtenÚ´VÂ(ל°.Ü*­=m<…úS–%WÇ’¯E Š‘"ù0@ãš‘ˆEè=*bìXãì· ‘RR¼>õKºaÀàþUjT†qH§ŒR•nØü)7€qš§xÍ«Œb­Y\¬Ü¶1D’’0MgÜ[ý¥9Åa\£Z1ÏçUƸa;r1ëšVÕÒUÉqŸ­R¸¼ÞŒZÈ–V•½ÅUq6y\Õ‹XáŸ0*ŠÙb‚0cŸZQ³œ•~ÖÉŒÕæ°FLg±ªñÜ=¬žSV­¬(Üüê@ûc,Äcµaê7¦F(„}j¥…„“H±Öº›[Ac8ÝW£ùr ŠpnÜS$^1ž•Y€PxAïXÐ{ÕÝ Ái"¶¤P©ž:z×=wp ·•F6mä¶zÔ¶¹ÉÆFN“–r8©ynOniáAÎqùÓã‹9YÈž‚§UÈÜ@.nÚl*<ÜñSíÈÅFî±uÁÍûi8Á«vÚvÃà{ÕÓ:“÷†1PͨGÂàšÄÔ%³®Zù ±ÚEeÉ4ˆ0߀j¨ ô<ÔÓäŽr 0úV¿•_”}ê),‘ùàg½@Ö7j3vŽõnÒòXl«ÇJÚµ˜J«é’:b¡š×$1Úiʦ4Æà+2úñˆ1¡…Uµ±iŸqäûÖå­°ˆc€Mi* žô€ã öÍ1¤*@ã4ªÄúfª]Ê‘ÍelñŠÐÐ[AÅt2ŒÆGŠæo!t‘›ßµ@$9=êÍ®} hDƒwAøÕµÀ?ÃRˆò g¥=T‚s€)½àR  çþãƒÓÔMõ›3“•Á4ࣦãËŒR‚83 ÇðÔý¸¨ŽãØøTRDÙã•8.1€)J‡žRAŸJŽXPè)pzTB1ÜJMƒvxÅc®) ©\)Æ"W¨¼TËÛü4×ùF84Ü8ÛïR '1P^/îÉöª–÷`®Fjü3ƒÆ*Ɇ*ݘ1à+œºcjÄñ튣ý¯"1Ë|½éNª¯Ê•#ÒªË|dq‘Ú«± ‚Øæ«Ë8$ ¬RfÀÓŠX4{˜eÝOA]-…»4`Ê£=…h%™ypV©·EŒ j•Æ™$ÀT6v~C¯€: ôIq»"±õÌ_*c&¨[Ú´Î šÞ·´XcÏ÷©ãN:ñV‘ŽE ·ðÔ,¡¤ 6F¤ñÅd\KæIÆ)T¿¥G§Ý.€ÈÁ®¾)D‘‚ ‘Œâ³®£Ëž‡5HY¨9À#éW¢…qŠTBò*p¤c$c­89*ž9Å9Fà:{ÓY=Ò™=@A×§«8§qÈ&œcÒ£ K:zԪǦE4§Œ}qQHİéNòÉãÚœ‘zãšlŠ ö㊀ 1ŠvÒHÈJHQŽÍû³ÂÒ(Ç]´3 㤠žN)ø Ž”ÿ¾¼b 0•rr*L½‡½U¸f—8üêHçFLñV#RF9ö¤¿ÃÓÍêa—+ŒO²Ô¼¹6¹bµÒò,nܪ·Z’²²¡ŠÂ¸t‘Nâ{×=}$ùx"²Ï™ dñïGÚ¤“€?·²´¨­Kkg¹##¯µlA¦¤Gî­\Ž Í¶5Z¹²®ÑŸ¥N!ÚÑíRKÊÅEŒœq¥C¬Oja(ÙƒŠ†[¥D`Íc•{™³×šÙ³¶H“f´|°S·5B¬õ⤂AÅG9bÙc½$xÝž1U/¦ÇÈ1šÍEÜÙ8Æjú¦Tøʓ Œƒ[ºN¢¤b+J@LŒ{Rˆ²8šŽEdû¸ôû¹8©r¡¦¢äôúÔû~Q€0)ñ޽9¥Á-Ôj uÖ=Å5G=µHÆ´É"NBšˆ0>\v©e†8§9 õ¦:ä‘PËp ¸Ï|R$ÅÇQŠ6ï9â•B«})ÁŽs‘Mf,qÅ:1ØÓÁì=éŒFî1ŒP¬Øè9¤|€:zT©&SÕf×LóB€+Gû#jdHö©l¤ò¡ŠÒ]óFÒ´í UÆÅZd° ðxÆisŽ`vªÌ@$qõª·WEc*1š¦‹$Òc±­XmV%­D™Æ8©«`~ìt dMž0:ÓÈ:÷¨äÀªÏ D'ʲ¦“̘ô«p[ä Š»„^8â°õkrŽH¬ËYÌSŽ{×We8˜HÏjÐee ¦4‹š’7\ÇjtR!J°‡œñøÔ£•ÇËLÉQ‘Ê–Ògæýiæ3ƒ’)>ï¡ 7Í€ãO÷µ·aT‘ʬ*‚9)$' Ul.ªØnœÕ) º9ŸœqíTî® hH²7™¥,Õ¯¼k95uhÀÇ>Õ<`r08>„àS_ŠþùéMÎ28¦HÄqíX313‘ïZ¶Q¨„¶5[X’ Er;‡#5ÿÙnip2-8.7.0/share/nip2/data/examples/1_point_mosaic/1pt_mosaic.ws0000644000175000017500000004455713224651032021353 00000000000000 nip2-8.7.0/share/nip2/data/examples/1_point_mosaic/cd1.2.jpg0000644000175000017500000005365113224651032020245 00000000000000ÿØÿàJFIFÿÛC    $.' ",#(7),01444'9=82<.342ÿÀ uÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÚ?ô.Fvôæ­³«G×éÍA àr>”($0>”2™=¹¨ÆBõ꼬 ÿZFc¯ÿZšgÚ02jyø¦˜. 9¨Ú^¤úÔf2[%¨klŽXÓc´V'§4©kñŽ{w– ÷¦*dú PH?…S¹,F1üª‚LJ?Ö³î˜oÚ½sVa€ˆ|¡¹ ‚=kâ"IÆsTR3Q$DW'ŠZPÜjÝ¥á7*[û5B.yëSÛDØ©ý)VÌnÏ~´û‹_ݨÅÑ“&iñù±dñVVæEž=êe”Τ7ZÈÖ›O9âªZ]+b=z]¬xQŠ»ÚÄñYZ´É,žX ×;{ŽAéšÐ·”lAëEä’¾ÄÖ<‘< €NÞ¹«V÷LñùeŽÚV·rÁ—8ö«6ó4p{SžS<§qɪ—pþaõª"m»¡«§jãÍ Çµ$Õ#ÛÇÌO½Uò]L$bU}«bHcFHÕäËU‡š8Ð’pG­`j:òB ÂrÝ+˜»½žéË3’lÔ ŒO'"¬CÓƒŸjÖ´U`qSL(æ QŽNxõ«öÚ‡“€jfÔ•˜kÖÍ:ŽaUn7Û‘‚vç¥FnCpŸJš7 c<Ò¼ÇiŽj«]*® $ÔC̸l( U¥²ùrÇó«Û¦8\öT,€Ê8Æ=ªGÉþµ°pyª&2+&~• |'Öš£sãŠ%ÎÌÕtb­^ôð¹<‘U.Šç·_J§pâ8ÉÏÓ™l¾eÁvç&¶™ÊàÖ%ù‚A9éÞ³á“Ì}ÃE-Õ–>µ˜A„•#ŠxÇj–(¢-ɢ䠕qZÖJ| £¿¦dØäžõi£Ä•›vÇÖ¶&s–¨Æ3Œ.~¹©…Œ©fnEgjЙ¬XœoQÅs,Nu2XŸ¡®Úùzô¦ÜܪZHÁ¹í\ÍŒÒ]^àç9ïRj±“téP#íÚI«Í0š#<Ö]Ø1BÊùö¬ø.ÀúŽ•½§]# ÜG§4\º}£)÷}*´ò§& šB3UY~l“Ó“OÆáž:T˜Œ‘ÿë¨a-Î^õ##2ãµTäJ28ô«zb²îÀ ‘ÔúŠËÔ¦)ÒNi–œ`ÖÒ'™ÌŒ×+âƒâÆ«UFâc•Aã®+yãZ\f°.á'pÅfÇ#, ŸJ¸Ð–]Ñœ}*¸Iq¼Ž†¯Ùj¬±ÇN3[FU•½iï!¤µ• ærsÇq]›^Iõ­HÓäàŽ8¨îá/ƒÉ¬‰m˜!.§žõ“ŠAxîÅZQšO³´Ñ2sÏz4ý- ›~9ªºÔa_šÃ™Âíõ§ÚË™»ÔºŒ/p›TW=wi%¹ȧÚÜ”]¥°Ã½mÙÆÓ¨=}=êK„t\2äÔKjÒÒd/ «ÐÙ3±¯õ~-8D>p)ìéP¹ÕàƒpÜ Væ´Ò©àJÉšæY98Í50Õ„Ç­D1Ûe'@pGJ¹ƒt )àUIíÊ›¨ªð¹ò:м/ÔƒÖ­ZÂ%Œ’9©þÍŽ9üëÙ!B“Hã'UKƒ‡'9Çz¡;(’pET€5Ä«»§­kDŠ«´ Ôê£ b¬©´æÎÓÓ'ŒTrôö rëPL¸8Ï·Ò£³u#iÞQ8ç â¡ºùWŠ‚8Îzõ«,ÎztÍS’ Ò†HT„9=»ÖEÑU9ü«ø‰ûS­8U?á[³QœäÖ¹f÷ TІÖ0…ÙÎkn8ȵù‡jƸ‹çjÀvÌÃ楂uP#sZê!6ü*¿öz2™#ëëVa}…cÏ­h3!¾•‘bêoY[¡8­¨eXœàqô­x&Ý çµX$‘œç) ŠÈŸå\ò3Å;N´ó÷>õ}•¶§J™#Êä çµæÆ3œú×1#‚ã>µfÔÿ¤ØâºU‘Ñ@ŒU}SLBûÝk“»Ód‹Õ­¡Ý…uøÍtl“x-Ræ©;ä {Ü[Û©èª=Ma_x‚Ã"0f®~ëZ–RBœYƒÌ™òÄãÞ•ãsÐS˜ä`p)À`r9«6ûTò2*Ĭ§åU?•Gå±nGÒ­CpÖäx©ç»Žu;qTÄl JW`ÏåV-®ž>‡J»öµ=Gé^Ú@@G¯Z®Äïàôª²ÄàVmöá|4Ô HÆ}ëH¬IéR£jT;ÇáR©9úšcÊEWPCM#¿äwÑ+N­8 sT¯ ŒÔvÄ•ÔÒ®Ž*-Ê£ê¬÷J‹É9¬+Ë¥ì~¼Va>îäúԶܹUÅ|}Ö©–#õ©#àT“:Å3“X’ ÎOáX²ÆMÙ?­6{\¸ÇÞ4’¼Ð¨NqV-õ"±m#𖽉=Í_;ŒL3Û5ƒŒ—¤œõ®šYà T±ÌÐuþu~ °É†È5^ôô=sÍfÜ’êv«–å£E=*XT¼¸&´Ò/ÝÆ>•Çx‰‰8ô9®kk3ç'“ÍXµl]ǯJèbô¤ùjÞ¡(T^kžÔÈ¥‡JÍ’Úh°ñç׊¿mâ"$É"¡»ñ|ª¥cï\õÖ¹ytN\àÕX‹ÈrÄóVžqÚ¹ûgÖ”=@Á¥~5"?;Z»l€¾[§­iÕBœqTu™ 'õ&Ÿº?Z°%$Šz]FìãŠdò*¸`x«¼ÄP^µvÚ0xzsWR ×­TÔy`þÊjPïù±I¥[+† 8+WO²At\֯߮6ñŠË»Œ¾Z",FÕÉÓtçÚÎ:]OLK¨Œ„ ×1q¡pX ¹¶û+|ã¿¥>+²œtVwg`{R*–Ë`æ§B€ÀƒëV£Uq€~j°¶Ï×ÅOD?==MiÂ#ÏÌFGZ|¬Œ¬€gÞ².âd'ŒÕNrJÐƒË o5aˆÛ…ç=Å0«‚ gà:W½cæ<}(Ü;T.ˆ_?…>6Æ1À§¼§fH¨•É#ŽÝçw8O—œ}i¯ ¥Ú3œ‚)ãfÀëQK· Ž\U)™àqMvB9ôéTfq‚¹ëMŽ4UÝžMeê—aêi‘®"Ç‘U¥bqÞ²n¯äo’0p:Ó´Ù†âóVîÑHÈç½aÝDžIB7KƒÓ5,þSôûT±Ú«¨ÃŒÕÛ[5Æ[¥:x„—)cŠžë[íOj‹N‹oÏŽMX¹J8â à·ZYWtM늯j¥Xc§zÔ6¦Q¹zâ‘lä'„â¨ÜÛ¼/¼ªsÜTFkvÔn…[$V…²ÙZ²Òã#­f_ͽ‚ŒãéXº›ÅA§’#ŠÜÓò2Üäššìò õéNhÓìÛð2j¤Œ›YvtGs[’.ûb{}*”vêç 2+™ñ&”Hó2 ®;0A=)ÎýHéD,õÀ«KA?…H‹å¸e?Zè-e‚HÔ9Š%‹æ".G­T›ÌUÈb >بHÇzº)T +>k_Þ’£Š‡æC‚ªÔëV&—xWóqÍ{úQ³Ž´„œýzS\<ÔF\°Aßñ©6å íëNX‡—ÏÓ¥@0¿:—y¯NÔÝsÅL‰É¼ÒºñœAP9 ,rj“2eFÞiÌ‘°ÏcYW¥cÉã>•X]M¾Ø¬rþmé&´¢\õ8¨êòÇ@ëÞ³,¢ ¹#“ôª3Bñ_ šÛE-o¹¹â²o }¬qéXÓªÇ(½^ÓìÅÓsÀúÔ÷6[“·$ †A£mš»fK;HÙö4Ë·3\„~+±@è?Z%RÒ’r1T¿yßæ3mˆã¿JŠÚ"psÞ·íW óÜ Ö”z TW6±Ë  ‘\>§†à(â¶ôù?ÑPú Ô¯³(=)wvô©JnäŽ{V&ª¿¼•ElBÆqšè´Ð 8祭TŒ¸²œÕB„Û¿Ò°í`^•×,`Z}+6a\{Ñun$B­‚®F÷BI§`£Ò°oô™m N+< F ÏøÕ¥•íZ|y‘³“ïZöò6ƒëZD séN¹¶VMÁ¸>õBQ倣ž8Å@²È§ŒñÖ¯CppÜN™Dùj°&3‚*ÌA'`ª ·ýœÇ+Ú­Ï'éS62¼kŒ“žÔÔQ¸ŒSÁù Ï]€äO žœíR„ÀÁÇ¥;<Œþ”…Ø©ïÚª»©'#­eÜßà Fj‘ÕÐÆBÿúë.êýþcÇZîÖDùOJ¬²í¸ ë[HZ£¨Û Täô¬»[†…™YNN*Ú º“;JÔ*AŒVeÚ©CÇ>µÊê8kµ3¨Úrz×%®Û&üt¨á”‹U ÖŸmjóMÎy­èl£E‡J©tv·Êk ü†“={TÚ¿­t:AÝnïL¿m²mµ;?úŒsI•6nZç ù/÷c½u!ËÚßÍQµ7@¹­+˜E•Î@õ®yb&é‰éIyiÑ|à+˜Ô40¨dˆ>+ ÐÀJºŸÆ§PáGQZÖ÷gê?V%¹FŒëéU̲7s·Òš§-–©D(d;EG%»+t?ZŒÏå fï3“É©mC$Á‡nµÒG4m’ÀW«B¬½jÖ2F?:k¶9Ï#µF‡%©Â\.@ëïQ°-ÔcŠb¡ 7cªpØ9ãëHۘ䔸ù©ŒX;†>µ‘yx°3w'Y~OÚ\ÈôølbäíÍU½ÓÓaÛëX—rÇó!è*›]`€ùÜ kÙ\ùŠ<Š´ìÇ=ûUdH÷’@5z” ’áÀ@£éX—äùdrk ;m÷õ&¯ÍhÐdÏ©§Á}µvËצjœ®'¸Îx;6-öÔÕÛXB@)o$@çæÓ!v–{Såäuªò¨óTÍ\ksöeaëZVq°E>Õ«zŽÔöF2ƒšÆ×a;+Æ,˜'åÒ[@# €3VfeU ŸÆ².³ç¬) ipsœSŒ`/=Emi‡c¥W½É¹ôÍ\˜ÿ¢¯¨æ›f|úW=»†L溻WgävÅW€µLÖ¥×0ÔãÖ°­ÑZvÈïKv˜ŒÕ"¬:ö¬½[JŠTF°dÓ¦¶›§r(ó2Ø|Œô©ödx«xPŸ^)›\ô¨ÖFŽS׬Mu¹+.q¾N9 WmbB0üT¬$ϽØó^è—F8Çõ©LØ<To(ÝœƒßЉeŒý)àädRÆj7eVç·¼‡p]îzÔ­p˜%HÇ¥U–ójç½R—PÊ’I¢±ãÝwrXçúÖ†Ì`tê ïRÛ‚zb šëÌHÆi­d9kšÖmB6ôÇZ£§Þµ¼¿7Cë[âðHÏ¥;Hù[Ÿ¥\†ETçï ‚[ÍŽµ{>Õ?Þ=G¦Ú¼’îeé[¦ÙeRíXŽŸäîaÒ©AlÄ‚zµ[æ : БÖ8Èôâ¨I×.2_z½B8 ¯*(ÇéP-p3[¾@k@ê)önžVÓÔU˜]ƒíÏ5e\‡äÖ~ªÛ  žk+MˆÆ Á5¹ðb žLþ•iìCð;Õ òägn$½ªÔXâCÁïJ̪ÅFp+Ñ›P’7dWaÖŒž•¥¬ ’z÷©`à`Ô£‘޹ª×WK dã>‚©‰¤¹à|«ëA†,yª3ÜOn Jÿ*Ž;ß5¹#=ª¥Üì8ÏSWì,ÇÌj;‰™8VËÕ•z#ó’ýi–׋p?xqZ±¶ôèk+VŒl ä_唃ÅhZNšÕË#*ÜÔ®ìªpxëU"¸F,Ü*5V»Ÿ88Ϻ[{akl>cß4àåG?β5 ²ÁÏ<ÓÞ$Š ¨ä UxSdeÛ<Õˆ,Úo³ì*+‚RM Û3LqëBç?–jŸÊ· Á·ŽqŠ Û­î3ÈúUÔrH òjhå̤àUI÷3N¶ öp¼f¬;…]¢¢\`æ­\0†È“ÇËÀ®%$kwn¹«èÈ­kXü™õíQÞ©Y—·j|ç÷**8Î!näŠÌœ‘( w­ë`ZÐÆ+=ûAõµ<­{ô¬HeäŽqO½ÉÍAdIíȦ_¡,3ÆiˆŽ«‘Ó½TºÃ¬¿ýjÌžÒ9NåÕil|±•_Ò³üÃ…{z·Ìh2zÕ”Õ0Ï^ /.Oz•  Ø©™ÃuéL2sÍz9Q"Õ6ëwÊ’Ekéz‰o”±Õ¨]óßF×íQ¹¦× ÿ*ŸjÆŸ{ëHxÿõUi×r:VEÄF"r9ª9’P=k¤¶@lƒÈÖyP×d“øW9â ¦óüžµŸ£\H%Ú}yÍw6åLHØäŠÏÕ‚²`kš nqïW’·¯z›Êh²Pü½©’\I*•ÇÎòs]F—§ìùØ+FRÌ0qUfù#$õVȃ­vVsœéV$NO×?u˜¯÷tϳïú9ǵiiÁVÑ™¹cO»[D¿.YúVc&ùÊàõ5,°«@Áºvªš|§Î1“ߊÛÀØF9ïXª§’çoCF‹t<•²@‘qЇÊUÉé  ^€ŸZŠFDˆòbÞHX;v¬fPK|‘”k¡±ÓÆÃ¹Aúš§}fmd'š½§²È»Û­hˆôçm©Ö±®Ítª1ÇZµ:à ½éð¨Š5 뚣©\¦Ý‹‚Õ$”³I) àt§Ûä&qÖ§Pq’+:6ÍéÎzÖòI”R°Êþ”Œ®íÍs·Ø[‡*0+3ÍÌsVm®™“ëZ6G©5ªPÊû;{æ³u2Q6©®|¿”ù'’k ÒO˜À‘ZnIõªÚÌ£¶*ýjhе³€=ëuýê÷æµí£- ôÅW~õbáJÂÃúUH÷9'ëO½|DÊ£‘ÅE¦üíƒÍKlÔÅ2;EEQÔ”ÇÔ`ŠÊIdà5^k¹–-¬iöú©„`¯5¦5Å{}¸4Á©Fñm'Ÿ¥Q‘à`J.#Ý×$zÕ–x²< úS~cÎzÖæ™!Yø=N+yP³äýkšÖØ,üv4ؼ¥ðk¡·¸òãDèMEªÝ¹¸ˆ¦NÞ*Í«y„4½é÷ÎÆÌ:cŠÃµ—uÖìc&º5'ËϯjƾÙ庿LÖ7‘ÛÝ|‡å·bÔƒãoZ”Þäûv ·Ú iZFùŽj•ëŒóɬ´ŽICÅj­§‘n¯ŽEmé×X¹çy¦ê1ù°‘LÒà+Æ+P( Œdž:U{¢©9ý1Tôøw³LÜCæk’zªž*½Ô­$»bÏ•iåSÌs’}iälU;Õy3»f1…ïÖ§”%AŠÃ„¶ŒúÖô$œ'ŠÕ–0{zÔ!²/ZÏ¿‰DNøÁ®eA’WÉÍiÙZgÏÒXéÉ´Éfá!PqÞ¹FB÷Ak"ú¬€úô­ý'~:J¿bf9ïL½É”Æ™/¥X¶æÝ€"¹ë–ÄØøºÖÕ¡?elUhû 3ŽkFâ¸àñÍP´PXœÔzŒA#$TZS¦â Ávým;¿ZŸOJ0yíÒ³õëMçŽ?¥r2[Í ¼y§M3yc<d"GmÙÎ;U¦¼ V‹õÜÆÀu÷©VHÛ9lv Â’)Ú*€Êðar}+J) F§ÔVþ–‡ÏN8®‰¦©Æ:u®KSa%ÈÈÍZTO% žüÖ´*Ä£cŒS5+Y7,©ÈïO‚ñDcwÞ&Ùo §g¸¨£ÓÌWxŒÖœ™y®oVŸ†QÀ¬K;ušs¸{ÕÍ’Y>X§½h[•œn¥eÇ8üª¤çvœZÉg’y°ÇúÖ­–â¿-nKh¯@:JÆŽIlæ#iÚ:ÕÉ/<ÔÀ_˜úÕëˆrE\ÈØwpk'Q`J Î[µHìöaA䊌¨ŽØŸân)!Œ&ÒFI椸pÊ `Õ)0^™ån`sVâŒîóŠ’íJÙ¹<{W6$ÛòO½n[I¹ÛÖ¬™ÔsøÓø'ëYú«ü…W'"³lmF\Ž}kJÍ}0{Öí»âÉëYšÙ…îy¬—7,ç°¬û™|ÙAô⺭%Béäž8Í5&]Ä9ªó]‰.‚š¹:)MXµLÀÇù×=wûPúÖՙŹ…g„e¾w5©xåa#=EcÛNbœçV.æIà j¬E‹2äT“4®˜?ÃÞ´tiT­M«Å¾2ãùV*[«° š­¨h¡Éd8ÇlÕ;M6eÈ#½[¹±ß+Ȫ°hí*ª÷:lä)ÍTX˜iíŽCàVí¼?èéÇoJê­í¾Íàf¢»›Þ¹ÉÃÉ0e­^t‘"FÁ®O+,*Þ‚´,d‡­TM.$±ŠÐ‰Þ†@§Nþ•CPœ$dœgÈ^9‘ˆ-ÔñÍK¯É'ÔÛÌ{N3ŠÏšÂki BN*¼¸^£óªì× `ÒÓ´‡'sþµÑ[Ywo` ¾ÕFæÁ%ço=jô²1WÒŠ2«Ž*bk.8þÑyžv©©'a5ÐNvŽ¢~6Â@À§Góªàu¦\ª¯=ê„Çhãéš– š»á‡JMNQä­cy;Ôâ¬Y6Ü®r\ÈIÏ#ž´ ³¹9¬ûÒ7žA¦ÄÛMX³æ¬És´aI'u#3üÄóXòÊë3*äæšð´EK÷®¦ÎAýžôÆk=d>kg¥gˆ¼Ý“ÃWB×K%ºã­\¶?èçò®~õñv2:صÛ÷\]/n{Õ«À#9ãÖ±&Cµˆæ±ä»hwŒ‘š~•â‰ÊJÔ÷®í1ÝZ–Œs׊­3«ï]­=ë´f7SU`Oõô­ ÁùÝ‘Švš9\ “P‰c¶¨$úVe¼w¶Ä ²4Vnd$Õ3c͵—z§-¾fòÔqšÚŠX•qÐVÍäâ55uu¹HïqV´ÛO6"ì25t@’DÊ@â“M¹ó˜¹È®Š9Ô I&N8¦ ¤EÉ Z«=ð$ãÒ¹ýFñœ÷Ú+&8ä¹—pÎjG–T<ÓÌr[Ì涃ÆÖÁŽ1ŒzÈ–1<¸EùMjYièŠ ·¸­H PqÛÚ¥d*G˜ÀsŽ&W ò~´í¹ñøÕyk>î@ÀÓÖ›k“hÒ>rzSl“|Í#t<ÔZ”àƒò}©ö¥–ÜTLåä9ǰ¨gP=ÀëQD2xúÕøXÆ=*ûîœ.zSbPžâ«80Iœf¥F,wœÕ›pãñ¬«ÿi`I94âåb Þ¤·ŸäÇáK$á©ëU¤C+Øu5‹w:¥Ê¨çšµÊÄ ç³e.Ý3#Ž3YÅðXÕ8~yØŸZ±öÒ’…ç­t–²´ùkìfóž¹­ë~,×FY6܃Ӛ±q.èIqëT#HO_­f^éÁíLƒ¨®~+'kŒ[–÷ع~NüVÕ¦³‘œŒVs͹p3T®×Ëõ]âxÈSŠ.þ=‚¢Z§qÐãúVh¼À$àÕÝEÚ(D`àzfªE+€# ŸÒ§[%åÛ–=jYj„•VX÷ÈY…WŸ<¯jb Lç<ÕØ°?Ò²¥Ì·mÏÒ§U àS®-„ÑŒqY"Y-¦ØÊqô«’O” ŸZÍy•KÈÍT$ÔKÊð[³wu«ðZ4ÒÝ*[Ô¶ïŽ8ô® âáŸP Ø5mKt&uàgØ2lÓÕGqYÅÇ9éUÞYb=j5˜½Ê2Ië]Åš±sŠÄ¼æñp;Öärj£§Ÿ)èzU«œ r\f¨BNT¯k&5id<âHÉ#¥Q×ZKxˆU;sØVz’§r§¸5©m¯ÆwävÍ\mD\2°lŠÚµº…£ ÀdTì7J¼šb´yªWjm¨È¬é'œ¸ÀbkF+_2 ò. ­ EØ…°x¥y_yæØo™³ß±¥é~b¸ôÍ\Ôb…±ÔŠÂµ€féÎk¡°u–ßÉaÈõª:†Ž¤žO“$3Úð¦}ªB1Ò¡û4×2 [šnˆ©µåÖÈ€ë€Jçïeš†àÜô¦KæÞ©l¿Z«§Ç²èO5ÔÀ >:U¬3Û­1wz{SÜ€3œT(T³Ú‚ >}},„m$æ³.eÛ dÕM2"di²Ey+Osœ«SZ@»7¤ñVrwc9ö¤pÇn‚³/97¿¥aÜݘP '=«)¥’_”“V¬tÇ•Ã8 uæºKKˆp=¹­DˆF¹ t®gÄwE!p:šá#‘|ðÄžO"¶`mò)Æ¥oJÄÛ(Ï—vû"'<úúVh¸%×=zÓ±‹uêœqë]äCîsW7j'5»°}øëYG>zŸzÒ¸`-úsŠÎÆÔ8ïéW6cÇCU­Sl£©æ—Q¶IdÚÈ>ÕÏj~)’ Žk•ºµ¸·Å*CN‚áà ň­k«•l9ÇÅjÁ}æ•lñëšÜ‹TòÑAlÕÕ¸¶ºÚÒ(8ã8«/khè1‘ÍS¹u}1ÅM gÈ>µ( G5ÓÙi!Ÿ¿5¨#XÆáXº¡/"©èjÕµ’­¶ì`ã5@9·¿ d Öà!ž"£žÑ$^TgéYãE‰äÎxÏAW£Óa‡šœ¢§ǵgÝߤ*òk½µžreÁÏZuÞËfˆ“ž•gL·/7˜G½m >aÁãg~4Ä$7<ûÒÌBF*ºåX‘ר¥Üqœ8¦<Ÿ#ÇsšÅ¼»„a$[{2;úU$W(ÇyÏ¡gþ¤qÏJ–8¿y“ëšuÀ ½T. ?³üÄÏó«1 ˟³ïgÝû¡Øæ§µ„$9ÇZ±s×½>FÚ¼õþUBáÔ‚?+˜Ô%Yn‚(éÞ®ÚÛÄ6’¿1õ­ËxFQšÒ‚ßäæy Š¿Å^wâ{Ì>ÞÕËÛþöby­‹}þz œVäìB*çð¬I˜DÏ5V(÷*¶ÓŸZét»}®i®¼‚-Æ+™eÍúƒ×wZè@¶/éYs(ã½iË6ÄíéY­HÆ}x©¥|B©Q[œ‡5%Þ~Ô9­[DVPAÍfjú W1¼F}k‹¼ðÓ„Ê3YRéSGò€r:U¸-¦Š#ƒ‚;U³s,p¯˜3Å]²ÔWËÛ“øÖ’_±^ Á§[ÌÏ>Xät­Ô\F;޵JGýã|Õèð¨QŠŠqž õ¬Ð~л¹÷­hú8<3Íswr†¿à÷ãšè-0Ð)=qϽNrHëÖœ§4…Èfbx•yxClCɪöö¦gÜàã=ÅiÉJÚ²FºMëÒµmmDzÒÆ1)¦b7 ‘ƒHNÖuóØœqô¨•CÈ9ÒmÚ@ÅErß»8øâ¥³Rb`xÍ[Š2¨X“Ö«ÊÛ‰$Õ ÊA?…Tüùox†>HÖ2ƒ5ñ8àó[iU¯ªpåQLû™A¬ëò#BÃéX*¼ìì 9Íi[2´€À­û>W=>µ¢E8ä À¿½¶ãí^qâ Ÿ6åÁ'ªéoÉç½nÚ¯™y•è+FšU‚³õd8EþµcL´ó)îs]4P*JŠ:t­ÉÛB}«šLšˆ>õÑL¸¶Îx°Ð‡¹Ç½oƃ;t¬­LågBI¾|{TÖß4‹ÍYYÁÏ·Z×´‘|sSÜ[#“É÷ª±G–ø#9ª’é1È #šÊ¼ÓÄhBŠ©ª:/Zƒû9#”NI'5Ó[ÃåĹëŒU”\q“ÍC,‹`qÅd\ݼϲ>„õê[kHgæ´ãX£R6ût¡±Œ‘ïŠXÊ„È_j¦ºTeI~•ÖóôúT…[9#¶i6â,öªé W`>½)³Lr2Z¡{)XÞàS A©‘'žjоX9'«cb²òdž¸ÅNÊM {TÓü±œVyS‚ݪ…À-üª8c瓞æ Ô[æ ò¦G–‚\~µ£ ï‹>”Ó‘œ~• É“5ªemÏ©¬ÛhÀSÇ^õ£§B$® ­»~;Qy)¶oʹ;ùJ†ÏaÅyýì¦[‡<žsV,®Üw®“KBÓb¯à™òjž­ïž•«i•r‚jZ“,Êqí[“)kR=+Ÿ´Œÿhž¼VÍóí²cÚ¹ÛivÏ»œ ݵœJû·t¬ÝJOô²r1Yöëæ»±É9«6ÜÜÀ§^'ß5£d™ˆg½K#‚î#ñ¥±nÌÕˆŽ]Ðòzõª×¬ŒTý*ƒéd!#œsYí×ç<Õ‰m[‚¤sVtè˜ ¿v<¸›¿jÂy>sÅz®ÀŽ”ý¸‘žÿZ«un$Lâ°ä°e|`ã5¥clA Z.@QŒzUin£ 8“,Ívÿ.@þur×O ó0¯Æ¥! M%I<RùŠ##o?ATÙ‡ž àUœ ›¿:×=?:Mÿ1éLbY0;tªè¸›qPÜ»<ƒv©:››€ £¥3R$žž•^Â0óà v®…BFƒçÞ©ï&}݇­K¿=M:R]ã5“3díÆ=)¨BsT|û­£Öµd¶gÙß™ à·ÂÆ®d½#.p¨ê–’U9ª°Ûâ0H«Q0Œu«‹0Hx “Ö«\Ü$œ:åuK¬,›Aµ<6áÐS+‚ Ó|¥oáZl¬ŒzÖe检UNON*’G-Û æ¶,ì’‡"¬•,p?ZP„°È÷ÍFÀ‡9éšBqÁQ‚i  gðª¯Þ ìjB:çLm#~u œÉ)éÚ›¦Æ>ÐÀâµ¥PÕu"ľç¥EnlžÜSærªN2k:F "ç94Û¬D€g­?K€;™áZr&¹«›C,ìîsD.ñ0WíÅi³¡U{û•¸…œíëÍSÜ1Œþµȧ$þ5j4,™ãŸ8”tÆß^]NA¬ùjÏZÜÓd"P‚»6=–dô$UëÒ[Ö‡„˪& k¯Œ~àéXðdjzÖÍÓbÑŽqYz>v'ùÔºá?fÀúUM5¶ÃƒÓµNþܸgý+œÞVàþ÷zí´ù"6xÈF=ñÞ³/8íV&&ˆŒ`õÅM¥œ)Ç^”ºš’AÉ©t÷_/ÜQ ]·&¥fbØŠX”cV&Ûƒšç.Ô<¤ç8­K%1[®MUÕ_wö®}†Xšö‘—“O‚BÀ÷Å8É´Ÿ~i­(QÉךɽ½iØñÖ¢´±iÛsÖÄP,k€£CV— ´¡z‘H¯É<}j »®O±¦r=*U\ ô<Ô.XzTR)ìy"š‰µ'­*ó`ôö¨Ë²±Î*ZN •Nqö‹ªsŽ´šŒ†+qõ>õ ¸Kp£©í9³pÌ cÖ­É!i6ã5v…ŽáÐRÂy½>`¤‘íUá·V”tª‘}ƒ¦p+JÍDpªãœdÔÒ*Egªìj­æÑpyAõ òÉÅRûXÝ÷úóRý 6~o§j|3&3ÔúU´y 8õ÷¬í]<«SÏ-Þ¸E‡šBõET#=«wFQ,„Œîß ò´ñØíÅfYü×$ŸZЊ1ö qÍo2âߦ+È{zÖÔ9´#ðªš,;Y˜Œ O°Žpféò$œTð•¸cxú×9¨X½e\òiRií±Ç^µÐØI͸±©îì÷¨(¤¥W´v´|>@&¯ÝÉÐqùÔ:tŠ7 fà^‘Ú´¸ÈY3ä [ÉHŒšÅ¼àÖÈÂÂ>•¨IêyíTR6Ø>RkÔ÷1ÈÁ¢*ò¦Opf÷¬ùnd›p=ª{k]Ä3~U­€˜éNd'üiì`;uëRx TA²=iŸ9a†ýiÌ0¼šh”ÐP®O¥F[==h‘¾\{f£ˆ€Kg¶V’RÍ´~uˈàëÉâ«Y*ƦR0sQÍû÷w?uyª[ÙÛbgž3ZÖP}ž"XrE,½OÓÖ©NÀ­EùÖ¥—,ÀgžÕ&ß&!<â±Ý<Éwç½kB¡P6;R»Œ}+:S¶R{ÐVN£v\û×:îÒËÁϵXµµ•ß§ÖØ¤f*[¶ÓŸõ©ç ŠªErÚõøÝ°6qÚ¸Û’Îþg?SQBãšé¼3nZFcšíîr,Âûw¬Ky<¹rOzÛµ9—9ç¯5µ+âßö¬­8{ÈⵯР|gÚ’Â-p8<ÖWˆ¥ùzâ³ìØ­¿¬éDÉtøü)×VÀ^zæ°u¢Ð\€Tí=éÚlê’Äûbºëyâ•F :k%LúÖTèö ®Ü­6Æéa†*i6ý¡\ƒZ (Èç½HѼjðÛ‰¬»RZä±äÕ«)3ÓŠÁ»bòÛ5¥°òSåÏßUI<ÕMîV,ަªåî¤ïйºC[ÓÒˆç-&ã¥^Ž\ tïNy›P´¬škÜsÇz‘rgJ\>x?­=ÁT õÀCƹäP89¦gzsÅ6mî>•Y¥À+ÇçP™#/ßúU+]J©ü5fíVU©â«\&Ì/ñ5K§Û¹Ú3Óš»pÛ#ààûÖc\HF Î=ê´²pœ㊵dc‘ŠQºO%aL}*“©ŠÜâô«LÒB`jR\ž¸Ígݱ—ϸ­Rñšoj›Mˆ–ÞÃ9é]œ v­Hà †Å%Û„·8ãŒrkZÏ!€ã­nʸ¶öUk0KQjLÅÑ}ù­;psÒ¹qȸÜIÅUó¶B=1ZÞu*ÌG$õ«óáï×5¦TÀÉøŸM[˜‹ózŠó™¡’ JÝ}*{Iˆ9È5Ûi·ì-Wœš»êy¤¹ÇÖ§-oq¹IR{©™-e;2V´â¾×ÐãšÏp&œ)äU¸âòˆaéT/ßÌã•™{/`ãUï!OÏ+ W}*doOzÆÔ§2ݳœV•Œ[Ó5-Ädî3\û–·» zf·ífI£VÈÏÖ ¿¹ÆØ<ã®\¯™1oz×°ˆƒ¿ ÕÆ!<úÕ+«ÀPã§zÀ¼¼Änà Årw·Í&U˜ÖY# ~&‘#LÜðzm¨&äqÆkÓtvÛÅÇ_J××÷@J̲ˆ‰#šÑ±ÌQœó[wd­¦}ª­«mŒš©y.ë„$wÍmEÿüq\ž´ûîyéT.”›xÂ’+¤Ð-öÛ†+Vœÿ§ ÐÏlU èÄñ‘׊ãµ]Š—P?õÍË`m#­mX\lLµu·È7Ò#Ë™ sÖ¯ZÞŸ;lÜ©«·0ÃË#gŠ–ÖÙœoõ«dSžp+峞¼Ôúz…»S$Ÿ÷‚1šô@»H9àñÅH¸+éŽÔÖL~”Åá3ÏÓÂFþ½:TrJëQyêS$ò}êFºHTÕß$‰“š…¯H8U&˜e¸nþX¤û,Ò6]±ß«¶öˆ©Èú¹àôÕÄ(<õªÑÆKäô4ÛÙ„6ì*¾š#2dÒ€n®Ï<-%ýÎÜDœv5^ÒíÎOZ»<ÁÖ²®$€<óéL–lŽç=*G2ä)Ò8Ž&rqÅs¶Ìnu"yâºXxÉô¢V.9¬ÛË?2,Ž¢³íïÚL€)·bvfcÇÖ³¤c`zÖ„¼bµ±¨KþŒ?Z‚Ûþ=ÏlÕ+œÓ?ZÜ_’Ïþ\n¥Ìá¿Ú¥Ž3q2 +­Óíš+uªÜ>/¾½ªÚ.8Ð7Ž9¦ÜZ‰"Ç*ãµÇ/˜€õÏë%‘ÒA´óßšÔ´º•VŠØ†8. Õ›:ù22úµ,åqŽK{×U &+eè*¥Éòã|u5‰!ÝW?ÔÚëUVßxÜ{צ«)=zñGC׎µ²`JŒK„éÖ«—9Î* ˆÁçÅQ–|ü±ƒJ°Í*ÍÅN–]Ë*ä.ÜméS¡U8ÇN;S²¹lóžqR#½?JæØN0?7K&{uëK&TœcŠÉº‘®' ÎÑVd"6ŒàŠ-äZ™3ó7JªÎeqr{ÕõQ(j•Þ_§9ªSEŒ3Sáe Ïò©ÜÝsYº¬Æ1åg­géDåŽy5ÓÛ¦P‚y&¥‘j¼ l>ÕÉë’¤Pœâ«X£N…˜ð*Äö€ÄJÇ|TöZ@–5fïÍlE§¤ p*¦·t±Û0:W–ê·&k£8ëY·X¼qU÷}iñ†bp âµtÄÆÒ:“^“¦±&,žƒsZ_•:ã°JýÙgJ`÷e}ñZÚ‘ùTb›n1o‚yªö¡ßžµ²î¶þõÃê3´m÷àVžŠža2œ×Q|¬}:U …ÿKOz³+„­Eo6éf´|£æÍV½³YâaÔâ¸MFÍíå~8ëœVp“#*ykBÚâXÐ0cV¦Mn®zÖ†ƒneœ3]L€í#Ž+Ÿ¾œå‡¨-íüÄËzæ’í‰Úƒ·b;Ý®}=)!ñ’¾0·d°§[¸9zrëÖÒõ˜©?¶­Â–óVþÐûc‡å«¶ñ"®O'¹«Ðão^j\pQŽ”èþUê)èÀ?lšR IÊñNi1‚¼ý*‘c4˜QÆqÅ_XÄqT®åÙÁç¥U‚ ™uç¥C)3ÈSo•Pi–¹c¸Ž1Wd}Ê+>i HÉ Å»ŠXáB3œTÃä;³Åc\qvG^qO‰>Ï8ãŠÛ‰ÂÆ1øR>f ýj äž1šáuIŒÚƒ`‚Zº4dÄ{ó]Y®6ñƒíW¡·DPtëQÏòsÐWŸøŸQÆàÚ¸wq»qêy¨ÊyŠ@& 3kfÊÌ%›»/ÍŽõ&˜¤Ü*ïW¤ié¶HÔõ¡«ÉÎÑØ~µR ‡éºnôÔÈÇJÛ¿9¶*H#Êz Í”¥ãÞµÛfôùk‚ÕGýìWMaÿg!B2y­ [ŽLnpzTw¹KˆÈõíVX gž*…±nqjÙ…÷6=;Ô²lÛƒô¬KÛX®X‚3žk‘Õ4™-Ø´`ãÚ’Ê•6AÇçWV-öç¥túaP¿@kBì¬p³çËÉ™'Ç©­D6Äâ³ãýíÎqZ¢L5Å·‡g#56•y 8隬ñ_ %CÔMyyPô-ýÔœ’Øì+BÛ[º¶e«VÌŠ7“Ç­hÚøÙAºWCkâ{[…pLÓƒVµqþµOãÚ­ÃVù ½Õ÷Ý«/CSjÛ¼Äâ‹8ÁMؤ²`5˜9«×ò¥©©¬d.ª„À›Ãõ­IN-³ŸáÍrBÄÞß䃌֌ŽtÙ2NÒkBDYKCc<ds¬Î©'ÞZ¾yâ«$kìýëJÚ@Ç‘Ï^•Ô¿6ÐyéUT®ì~u,–‘ISŒŸZæ/mÞÚ|§ÜSÚ ùÇvyn•Õi±yVà1ÅA«Ü•Œ&k&Ö?6BOj’ù¶BnŸ+¼Žõ<ŽVBàzT1É+ üê;¢’„|ÃŒÕIÄQÆ0£'½Tr\0%~SÞ­ÛèpÁÉ«2hdyeFìv¬»Ÿ EŒcJ¡'…_F>½*¯ö5ô-ò3qéQ½¾© nWlzT«­ê¶s3ãëWm~ \© *“Ž+vÇÆvsKÃg9®ÆÇ\±žVUëN½Ôá1â7>ô– ª¥‰ˆÏZ­ræâðF@8­¢yì+oßÝ‚GÊ*â6Ivª³ÈTgÒÉ^1š·óŽi—— Dddð+WÏœS[‘Û¬QÆj; 2ƒ¸éY6²n¶ž9­—»-Ú¹-JV¸ºòäW,¬’à Ö¤[^i¬« YÈÍf^Þ©-ƒ\‰uV9¸kŒyÝܶy=ésžäýjìR¨M½p:ÕHÝ~Þ g®–áÃ[¸Æ;UM80ºO¯Jô$fu8*]X1™MO§®m‰ÇZ­hq¨óëÒ¬j#†ÏlTúKedüñU%ô¿NkZøõ'ýšÈÓ”,Ù=hÖáDI¦^ „Dì3Žôû¸H>juïKgvYðÇŽâ®îæ®G",ÂàÕ ç$š‡8`F}¸«11®95Ÿwµ­œÏJ¥bçªóŠé7º(çb²5 L²ã<б§Ûâ"ÕJôï—ã8­KDÙj>•BWýëtëK-µÒ …8ÕTŠyå #­2x[?4g×4ø#ˆ/ úb¯ZÝD¥KÆsq—z¶I=©¢ò&nxÇ­^†[y¶~´’C0 Š‚]>69ÀÇÒ©\è‹:ÉÇ\V\Þ‡pýØÉª3øKkæ6 õªóXßXÄV7#Iu=R Ûȵ­®­Ðñ­Ŷ²J^S‚}MtsëÖ÷'\·½ åîžþµy-Ó~GCÖ«\Û`õÀ¨$ˆ¸íÅiAØ2O#šçuIÚK‚3ÂñÖ›¤Àe›Ì=­©¨÷¨:äŸNµ‡3ÿÄÃ#×5gSÔ–ÚÓ¹#ÎZLs#sÜÖÄw ¨Í!¼ÚÙÝùTRênÜn5™{xì„y⸽bmó ÀíYjœu¦º´oÔš· Êîj¤Ãdäs[vSy±„sÈrÉHº@yâ»ý?z>•>¦|žj[O’Ä’8¬û6Íñ>ù­;´2Ç‘Æ)4ÀR)Õ,o׊׺r¶M‘Æ+"Ì”d‘š»v¡‚©æ²oàû.$Eã¯û=CÏéÍ$ê`”2Ÿ”óWí§ó“Í^>^ÓÓÒ¢a‡ úÒ9D۟¢’AƒŽ1Íf^O¸„U­4 |f¶äÃÅšÁŸ›ƒõ«æ_"Ð`óŠÌRe¸­jI'—k‘éY-.I5ÒK1+œg'Ò™ˆ¬NÑÏ:}žFèÁ¥—N´|”U#­T›ABŸ'zΗGp¬}ª«i·p‚HÝøT*Ó¢ÿ«naH÷w1)aG5rÓW`ªÒ)犾5XFæÇçN0HÀ‰qëRaXä:ŸÆ©]Ú¬ï€3š¥>”›1°{Ö%΋Ì¥UG¥Q¸ðÔ°01‚¦ Hoí[øŽ*õ®¹wÀ¾xõ®NñFãµÇë[é©Û\ ùÆzõ©RDcŠ–êñ ´b­Û¥q³\=ÅÀQÉcÍtút>Tc¨§ÜKŽÙÅ5ÙVÕ™°8®U¤"w”ž3Á¬Û†–þã‘ÐU«}9Ðg¬y.‘W Ñæ¹Áä .tÄ€œû×/«]$(ävÆÜË–$‚Iõ¨bRìHÏÒžbù,*7àgµ\“OIbßÑ© ˆÆìyÀã¥ji¼ßF9¯GÒsŽ”ÍQG˜9Í;•Óˆb¨iÈEÁcÈ­bÛƒŒð2&1[±9¬Ûwi.‡ë_R , ª:d{¶’=êýÌD̃w¨õ8D¶…Î=«ŽÌ7g¡­Åqqlyä*;Y6ÁÎ>•½nQÕrx>ÔùbÛ"ã¿ZÇêíTncPåÀãÍÝN¢è®+_MS*exçšÖŸ)oÁíX—›®j[Æ`ªŸŽ)öPRøÆjΠÁ-ÕAíY@œu®ÈZ«.q×®j9l€j5µ;²N=…=á‘@*}ð)²O$H7EB·ŽHÈÎjv™dL …ÑJpŠ¥$ßyF)ÿÙI* ƒZmÈ;GF]6UàdÜUIVö¸ìG¹©­µˆÇïWž½*ÓjˆÑăïI¦M‘¤b¼úÖ”Æ)W 'Ö {h ŽÕ‹w¥Dí¹~µAô†pœzRö-ŠÑ´Õ%Œ€_ŸCV.uV¸_,=&žŽg ÜÕ×Å$1Ó5Vé•zŽý+?UºÙh#^¦¹é²l­ >Ì*†Ç&´Ò,¸Ïj°–@‘‘ï[‹‡Æø‹RX•¶°×_]5ÔÄ‘íYs)Î0sÓéRÀ„…5iãÙ?sÒ¢†6b¸''­j.U‚1ãöUŽýêm fù?½^ƒ¤`îç¥7Uâe>´òßècéŠKð w©˜íFõÍ<¦Ë2{b³ìnÁÇ=jþ« û.Üòx¤Ó—lY¥Zó7Σ#Ò¦ è~éçºÊ›KçQ‘“šµ§Ý+`Ö®©$œtíW-.[in•¯À²–9ÍMpüã=¸¬Û‰Yb'½s¸k–$t­Í"@É´ Ò¿vX+ÜfqŸÎ¤»qæúV¥¤x¶ëYú´Ÿ8ZHcýÊä⻀Š"ã§¥9aýÙãÞªËOñ¨<ÀœúUIÛΙ ½¨– P㯭Uh¤QÁÏjrÆØ³ëWíä#gj’I Q¬pÈ#5 Å¥³@ö¨JYä\g½Q¸ÑdÉxéPa· ¤ ­î¡|dŠg™p„îÏ¥ )-ó÷« "gfŸåÅ8 VUæž!“zœ±¦XÙ3]<Žõ±*}žpEoÚŸ2Ø0ôª·H6æ°uYCËÒ¡Ó­¼Ï¹·-b9Î*ìp§’D€8â©êz‡•nÇvåzþ¦ÓÌÁXx¬u>Z Ÿ˜óš¾yFGâ+BPrÉò‘ItÉ:QÈ©­-ŠDºŽõZúã˸Z¶£6ëÉæ¯èÊðgà]¾±—TO߯4²|¶ƒj{>Vh™ð0Z}Ëdr1T´ñûòqïRê€Õû¿b'½6Ä™&o\Õ‹µ`Ûã¥s#±2@nÉÇ5ÈØÜ˜\£sÅur ¢÷ÅHêÊ7)ä{ÕûI˨úóWK’9?Z¯pÛâ<×:ñ9Ûø«[F 9Á銻©JÞXËwª6§÷¼ñLŸæ¹Ç½nÚ€-Á>•‰¨ÈèÓõ~!GŽjŪKp7¨#Ò³¯´MÇ÷x±.ôù-¾fLÖvÙ÷gµìä¡bä­f°k™™ƒ|«Òµ4ë=¤3)æ“Sˆ/Î9æ®é³nµÛÆE-Ûm„–í\äÍö¹0: ѵ„$J â´!`£=¾µ*Üœ‘U.o#$ô÷®GÄzÁ1VãZá·åbO¢B àvëRE LÀçŠÑ˜ùÍ»ž+" µYOÊG½mÁ2͆@¬ æÝ>NzÖ´eŒdôÅkØŒÝmé]Æ‚G–ËK©®ö¨çy¼â®Û°*¬ç÷ÃëR]8û:¯zfž —8úS¯£%Ñ9íZ1Æ!±?N1UôÕ&V'¹«wªQFæý++Re“Nu9f¼æê ³îšÖÒï¶`“[«"¹†úR¾`pÊx«I38R÷©]HB3Ö²Þ–cÖ`ÞUÎIëWïÉ-W€±Ç"¡½ÈÖºP¶Ýpq\ôª^äóœšÚŠÝ/=ªh$ƒ ‚©ÞZ´jY>´Û ‡ ‰Ål²æs×Ò™lÁç‘Z©uÄ@¥WK‰LŒ ‘昰Ï<÷¢Y\¤`JlþgÌÉëW ùQŒ&{t©¢TaÊðyª×‘E´‚¼žØªPX«©=9¨î-YA*M òÀ€dóïOŽô,ÊXsWa¹Ù²E:{xî#äY7zL,„•¿jã5'6· GJ»¢Àd`[îõ®•qÇoj§¨ª›cŽ¿J£¦K³"¡Ö/¾Sbk6ÊeŒìy« u+cjQq>2âš.'#'’+>öé’6,N{W!rf–'ñªv¹þ4…?x=MoÚÛqŽ•“©Ü°}„p= fL¥T0èy­msï#Ž ¨ïàØK°ã=ªÕ¬áÕtbµ´üµáç€+´ÐdUŒš“Pæà Ž^L`þU§AqÛŸ7úüc½KzBªƒéNÓäv¥»%¯ç¥]‘Á´ã5¢8 ­Z½G©<šÄ¹Ìºõâ¸{•òîœÔp»,ÁvðN+vÒäFB1?hñ*àžÕR˜Ûi5¡#“Áªíù,ýj„µ(ç9â´î\€¤šu ,®ÃÅEn7^­lÎÅ-ØçV5°2ÝãÒº„ªÛÛD‘¨.-Y¡È?-e[ÄVoǵtk<#žÕ Z4a¸5¥˜¢2Æ• U}»F>”ׄ,±ÐÔ¯0Î4ØÈFãêjPUÉÎ8©0 ¤íPΠƒÀàuªÈ6 ô—,ªƒ§5Y“ 3uííQÏj‡æç>¢¡ŠÚe Ã$Öž—2(#qÀâ Ôu!¡ùϵq‰ Þ^sÈÍuVv« (JšL†æ¨j’¤qíMd%ȉ xôª3¤—…æ´,t²ß4œZÑi‘Ÿ” ?³¹\ñïPÜZ$+–n:šã5û¥ Bqõ®WÉ–åU<š |ÁÎVªB$iBäŽjä·¸ ÇóªòÝ•ØÀÜúÕ˜-CÛ°aœr*î›”ŒWéëF $X§þ³iÍ7LŒË.HëÍoKlåAŒqŒU#,ÐIÓó¡ªD{]O¾)Rö'›9§4èÙÁHÎ @8¦˜ó 9üimÊŒšºˆþo¥E;Æ„’¼ý*„ò…~˜÷-,äã¥:IÛnqš¿gH›õïVÔ ¥p9ªw¢ %”f¸½Bo´ÎB‡Š—N¶Ù(ãžõ´Ìª½EA<ß.îþ‚¹­Nì³xìGeœw¿#Ò¯GlC—#¯N+VÛ*޵~/“ éÍTÔ.ŒI‘ÔW'«ëe¡!Z¸ùÝ®eL’Tžk\E ;€ö¬92‡Ôõ¨`lç "«M#ÈÛAÈ=)’Û4DžjżòEÖ<5^™"Io¥U†¨b“!Èg¥nèOæSœž+¯Ó”YIçëQË0ûf3ÅX‰·\GµV8éYë&Û–â ¾›Ì”j³k‘lqO‰Isß'Ò£ŪeºV´çt;”œûUfcå7®+œþðŽàÖ6ªxGÎj7£VŒTƒdÖ¸Ç"²ÞãȺ È®ŸM¿[ˆÇqÓ=Å¿jpj39û8Ri–Zà·jÙ¹Œ›lvë5dòËf¦±ÏœÓµß6Ðx«ºlF8ïZ&B:U:¹´>µ4ú{Æ‹…È4‘ †V¯ÃªH>öj{êP™aÇJ_¶ZÈ݇¥"Ç1ÚÃð4¦ *ÔÕ{…r=;Tÿn‘"Úã¥Z¶½]ª7ß­h ”n‚j„Ò†¹p<Ö~¥8 ´¡ d“Þ¦ ½°À®’Ø*Z¨ïJ­suJX‘‘\¾©©™ÉPÜtâ©ÙÛ ·ãWl°faV&ÛÓ­WšTŽ"Äð+¾ïu«÷ElY)Ú Ó(šžÖ1–<šIï„|)ükWÕ8›'œt®i^òs·•ÍjéºD¯õÁ ÕmF Õ𤃜Vk[\#­E4E–SÓèdgž•¥¨ÄT£…ü*’Aæ±.qŽ”Æ£sÈ­@íÎA⥷—÷`ç5·¥9-Ïç]n“+4Ç9ª­>.Ï<æ¶4Ïß9ozÚc¶ô¬¸Ô´Çµ Ï3çÖ„@¥ªÒÛÉûÑŒóQÞßî5«në$KÔÒº®òê+œ½ƒmÃŒ`•sôÚhXBZœŽEP†_*r¤|¦ ¾´3+ÕYl¢f`sŒâ™.ŸÁZÏ%âbÍMôÊ@ÜHéWm/ܳ–P¿1YbÁ\qëY²G¶1µˆÍI<«‘ÅT[©|àwΫ\]HÓO4C;Ƶ¬~d'×­lK1Kné\¾£u#œg5—"är}ëRQm;zÔV´0Å\¹l)5Ìêײªì^ÍcÛÎË–ïZö÷’d¯Å}#? qS=Ó¶;V}ÌŽS9®7]¹7t¬½1›íArpN wÐIåZmEbª,k4Ÿ0ïÖ´†›o䳟Zæõ >11Lœ{ÖTÚz[ƒ"9ûUigy0ŒÄJäêr;ÖuÙ-&ãÔT)Ìg=EOfAbà×Me,YÇ8®‹I?è—3Ÿpõõ›µ¢š´b2 ¬[뵕óš,&”#µjÝ­¸L|½?*Á" pG™#æR㵕qlÛ‹*‘ŸJ€Á+ ¸j•4÷s’¤Õ¿±…\cœQ #1Å>då9ú’ œp4ÙãšVû¤ÜV]Ì&ÁÏãR[[««3tíVâB ‚Ï5ÔèöðíÉÆ}êü°+Ê:bµ4ï)2†¦Ä²±ìk.êe‘„kŸsNŠÁ eÙy÷¨å´Ujœö›c,: È‘$wÂç«¶ÀÂ|­^&DÈóX· FåCn&¤²²ûG^K>˜è»•ˆÇJ͸ºžåî9ª±NÓˇ¯&º}>o+¨&{o|뀸ès’ÄòLqœZÉ‹M8gïž”še±¹¸ AÆs]Œq,QYºŒåŽÁ“Ú™§Z4¿°æµä›Ê‹¯AŠÍŒù÷$ŸË¢AÛÚªÉ0ÀAÏ­I8z–G™$zVPÍÅÆzâµ!EsŠ©}0EaëYÖÈ^L‘Z*6œž•R~•FiwN•rUÓÔiÈ]üÒ:ž:×B€* ŽjU‘UI?…$RäUn$Ýœà{Uyf ?ɽ¹ sÛÖ¸­Zô’Ç<ž•‡æäç½HyN:ûS“'§ @®Çt÷ü§jX Íþ÷¹ƒnx5M–&%”Š¥rc`Tjbeõò ÆXA 1Un"’œzÕabYw”‰§™& ǽoÙépÇ€ç¥h›;AùWŠã5ˆCÌå`qE…€e Ç VœK3î8ç¥h5‰‘cn¾†–Hî¢þõF.n";²Aªók3–Àç<U« ¤wÜüzè ™8üê­Ó„ÉÅbÝÞ—ÄKÅYÓ­Cî2;Uéà‰þRMbê6æÚ2êqèb†v“, =kZÖþ8ÀL`ÕÙ¯Â_5ϰûLň<šÐ‹GýÁaÕJAqfÿ)`4¬<¬±È*í²£ØÀëš‚YZîãh9QÀÓhÖÞL@ã­j\IåÇ’pkÉžc×9À­ËXÄþøª3ù³l"­Ú[€¹Æi×2yQ±=k>ÙL’çù­lm@:â³ofÉØ§ž•=•¾ØòG8©™ü¤9éÚ±™þÕ9¸Pzsð‡?J¡s7{ÔPÄ V”l¡½¿•Aw¹Ü"ÿjÚ´·X @jñu+ÇåO ¡rG$b«‡ ¸Ö}Ë;#H½cO¨>yŠÁÕu&”p=k•žS,‡'4ÇÊÅ:2Xÿ*Õ°µ2È>µªÚhV#*ýÓ¬@šÕ†X™ lf’k[y—ŽkâÛìÒ}ãƒYò[o“ïz—ì$GŽy©m¬y<ÖšY@©ó‚U¶\ êj„ÐÈ#' äí9ÝžµhÇx®Ç-ŽÕ×pDI,sXM4ïqµóƒÉ­[{µŠsV#Ô„X<àVŽ­ ·älÓ5º.-çNsïYwÏgiçµR²°73܃ֵÛGEåàÕVŠâÜü„â³ïµ)Õv’j„7˜onÛ߯# †¤šñQK–Îk[©/%ëòö¯Ao§Ì£'Ú«ÝX¨ ËÇáX72L®T3`TÚuÒ¤£Íë]m¥ÔO 1Òªj­C2GÊI¸dŒÖŒX´1ãæ'£¥Ù1®²Ú  € ¥¨LFFzÓ4Ø|ÇÉ ½y?“ÐyíT,ã2K“Ó®ki>Eö¬ÛÉ|Ç(Ÿd…8«ŒœñYÐGæÏ¹²FkP„Õ•ª]•䚆ÕÕ?jE*ñÓŠ£{s±›Ò²Ä¾l™Ï$úÖœaQ8Þœ…‹d ·ohÆA4ƒôµÒ 1OpúÒÆàöªÒ>Y½êH‘í\åöØÕˆë\•ûåÉÏ5x'Ö—ïóRŸ6Öi1$0oo¼EXyÁcÆ ž88ÆY·¶21ÎE6`ÖŒNN+7T˜Ko½OñX©s"y8«ŸÚOµA{S¡»œóO–{†\ بíbieÌ„­lÇ¢H8ªn¨/CúUÉe”ðŒu¬Vr– +Ìî ‡5¥ŽâXÔrÚm€õ«öú,‰ìÕ{…šÙ€Bß…G· ÁŸsÖî|#`¥q[IxÉ`sL¸ž5ˆƒŽk­–æ~G$úUÓ¢¡Žµ›>$,qž+.òi£;wúT¶„¸9õ­¨&‡Qõ¨µ ¥Xö)5޶ÿh—Ïj’ïJha%PYf¶PT°oAL}Jg9“'N–9™ õ§Çn¿iÈû£¥uRµ­;,IŒás÷.ÕŒt©A sšH!dbHÆ;Õû0Y¾§Òºû„Q8éš§wó“ÔÕ|„œ*ËÊJ`Wl¢Ú7b´Á2q޵våßœU»ñâ1R\ËäÆsÜqY!¸›ž™­˜†ÅÁ°u»Ýå©Áªz]¹šRÍÛš×VØÍëT¯o0¥AÅfÄ;qÖ·¬,˜(ÏoZÔ¶ˆs­YãvÑÐT špL) ŸÒ«J¦Bry¬Ög‚b àv¥{ô yükRÕÔ)äŠãï¯ü÷#?-f9"œƒ-“Ó¶jÒ‘Rr¸#½Y‚WY'ë[Ê»?­uÿh·QóF=+:çQ¶FùGéT^W»$ã Tn€íŠŽÞ ܧ&¯&ž¬Àµ!·XáȬ½I]&ÈïUíÒMù í5¡s˜­÷)ëPýµ °S×5pj$#z× ®Î×:‘ê}*[+_—‘×µi-‰AÔæ¯[Á< ¹sŠkêªIã­:ÛPdeùrs[‰«ãŒ S›SˆÛ±Ç­cÞÞ ©v¯NÞõ5¶”$Pî1R>”T§"©ÜDð©Á#Þ³ÚY°rG¥ji÷‰ ín­_7ÊÇ‚+í„óœœTqiþcÆEG=³Â2: Ë{ùb›!Š»ù¹u2“[²†Ç‚9ŽÍm£§SŠØÓl78$dzÖÅÜ¢НAéX±wÎI&¯(HmÇf=i|ïøÖݼ{Tz)×rˆáÏzζS<ƒŒŠÔÇ’œ+îs4»AàUÝ2\|ŽçZÚ©]ÌÍ%ÆŸœ”àÖMËInp¤ƒQZÜ9p8Ï&º[gã ¸8÷ªº”ÉŠO\W=5‰v,ƒŸLQ¤±°%בVvBÇo¦jÖJù÷®¢þÏ ÁÅP¾Ÿ{ì^‚™¸™})—.@ ëÒ¬é;úcšÚöäqŠË»œË(9zÎ/-28¨oî<¸öƒÉâ³m—Ì“¹É­µÙo $ãZç5;ö¸bª~AOÒmI“ÍlÕÛë¿$…CÍd»µË䜓ZÖZpÂ’9­¸àÚœŽ5(ÚW§J„’ð8©¹Ùšˆ»p>ÕR͹¾oz\ü}i—MòàgÖ¹ífëʶ'qÏLW}6é nÉ5DáœqŠŸ ×>Ô~lžsúTðŽzÖ¥œylâ¶íí² ·OJ½å/aÅ_‚(ÇÍ!JY¯£Ô(àUy®¤¸;Fqé@ÓÃ&æëЦöïÁû¿Z‡æ‚L®jÜWmÑ–ž÷nNNMKk—•¹>µ+_ÛÅŒâ³¦ÕØ“ƒÆ°õ ò’ù'§5 ¿¾É–9­øvºmÇ$u«öúvåßœS.–h*Ü{Vt’Ï&0KsWm¥–Ýw°æ‹l’cQŽÆ›k¶GÜï9"¶’Ö'P@íùÔ76jåëX×QÌ8Bp*½½¼¥øÎ;œV²M,J82ê(ßÇ™‘{vG8'ŠÓ:(EÌ|œzÖl«-™bK)úÖD×ò™K9,kJÆî"G˜p} kI<>Qc‚;V<çg5Óé6~XSíÒ¯]æ(ËçëY1–\óÖ´.ŠØ(àÖle®gÝkz$¨Uüj©ü¨ÛžMV±…¦“q消cùl×=u7Ÿp@éœ ×Ól¨b?J–î4m-€k9´ˆAÏ8ÍM4‰iE8¬‰ LärsWìôý¸rzÖå¼XÅ[*㯵A¸/MÁóNzv©3•9¨ø=ê¥Úl]Ã9öª_h•[5 Þ¦c‰ô®'VÕäŠäàVó#Ç5"ð3J_ҥj»gndpH8­ëTHÈ=ûV²TcŠvÀyÝŠ|—p0ù^¡MŽù,1ëWbxcÉõ©>Ö‹Ÿ˜gëPÉu ]U$¹¶ªúÔ-¨Àš®cª¾ ò—5FMDô{UCy,ŒÝG¾j©!Ën9«–ÚsH7r*ô,ð6Ò:Vºêh–ûNA"¨Ë{çDU›jÅ¡E•8Î}iº´ÿ0DãÖ«ÙéÆâAךÒ}?ÈN 5gš!Ð lš¦Ñ†çµG ÂfùŽsÍOt ¼aáÛË=J þIpÞªÞ"Ë&ÈúT¶–2Ûø<Ö˜ÔŒH¹¬WRŠàlN ëTm¬ËoíïO¸ÓZ1•=«>âi¡ù9ÇLVÞ‰+æ8?Ozê­áxãÜxϽfê31}¹éïNÓbÀ.j=A‹“ƒSivL§{ ¾ÎÛ=«*æO:| c=+n k‘Š£«^qå¥Q²€É jébTé֫ܳ¦³§¼1à Îy^â^ä“Z–V89aϽkG v«J1Ž´Â½wr´Ò€0'­6@7vúÐpsƒÍEÀù{Ò8Ì8ªr*ìDà÷®.åÓÎ9¨T`çÖ•[cœU¸Â•ÈÕ‹kGšU88®šßNòáÆ9õ©ßçÆ*ê& Õœuýk–omÔân¦áô¨ÚK¤ù²Ø¨~ÓrÍÍQ¼· ØÜÄ}iœAÎêEóFF <+²rMB|ÀN3Š‚vØý*Kb¬Ý:ûÖ€Ž Ê¨¹­{$ ¼ >È&rÝU¹ˆ#c·JÍx˜ÈØéÖ¬‰šÞÀô¨c¸yeß $[Ö7Çìjáš9¶ìæŸ'’-¹Áâ± ¡šRFzô«m§¼)¸&˜Ë*!ú×9©~îmÉòúâ¯èwQ™ÇœãõÝ+C$ .Ò1ÇJÃÕ MŒT€MríjÌãƒ×µ[†åícr3š¸oQј³<³sxQ].•eTZݺaxÏ8®q¿}1$ðMiɈmÕAÇV%ófPs[°€‘ñØV6¡vR€òx8štbYÆ@çšØ»”E\W;*¼Ó’sÍoXÚ„‰IëVÞ@ äýkòô–*9¬ÉålsZº}ˆ; šÚXð0£‘V€Ú£zŒd’Æ•ÈÔE¸ã­/ ¸& -¶F°(q†z÷4åÎÓ1ô5‘ª\¥ºÀêÓïbÛ‰Ía’[>´Ÿ0SÐs“Z¶6)\çÓØÙ,x8­èíƒÂsŽ•SìàIÖ¥aíOÝŽ+^ħ>]G&¡–cÆ=ªµÅÓ8û¸¨#%Ž:P…ߎjшyYôªë15#[áph*&[µaßH¯>ÔëW­m6żõ43´Oòç£른ëVWQ)6œÕ)oGËdv¢brÜñŠ’_µtÈLñV™°`b«Io"1ÆqíLÝ$@ä¶­(¾‘ÈVÎÑ[:|±)'Ö¶’H¥aÈ tªš›Ä‘™í\Äšc]± -Y—zeÅ“î ÀŠžÇ[žÔìb³>¶.XRó­ ·t= .tõîÁž bv(I´4x›GÎk­Ó¢»‡晩Mû¼g“ÅQ±ˆµÀ=GÒ®ÜÍŽ»ilâfHâ´%Gn˜ËJÞ}Û19çŠè¬![{pÍßš§y9–M£>Ô¶q—,½+U§XTdôô¬»«Ã.@=úU ­!Ï<Ö¥ˆÀfÖ¬q*ñÞ¬F¡õ5+œŽ•L('µD̤sQòÏ:¨n9ã­U»€— :â©<òÆpGÒ¢—QòabÃÇêÚ³Nää⹉æiI’* }9Xœâ®ØÛ™ÆÅu––I9ô­«HnM^áP€j„“¸õ͇pÁ欭ºíëô¬ìØû…ì6Zæ(ƒj’Eó{V‚[ š¯%Â+˜Ç8¥K¸”®îª—Ú2â!YòßKåž¼Õ{hÕ§%kF$žCå‚#ªÙ&m§§šÜŠÉf…Hâ‰,°qŸsYp21ô&‹kIdäZ±$–ññž? ©°cµ!¾‹ 7Òá.îÕÈ4c'̧¤“M’ x•±§\EAƒÒµ$w‘Ûy®#YÓ#8€ô5T²cä?•ZKY-ˆ #Ú¬5óíòùɦ³€I9«öp’áÓDžTJÆÔ%ß6ßJ–ÍDI»8ü)]¹ òjä*QªšÑص[N³ß0sÎ+ZêO*0‚³ÇÍ àsZ+åÃ{Õ ç21ôúÔÂò8­8mU?úõ£n ˜©>a=YŒ|Ã=iÒGåQ‡Ü¹ª“ŒµbX•:à1“ØÒI޽{VuìD™|\V±¨+;F‡äÈÝ\n,yªkó7=i[#žÆ¤‚”᜚ì4<Á%y5¸°Î*ÜxA·¡©bÏ•ZÙµq¶¢Ûº`Üâ´R 7ûdàví]VŸkvüš%¶Y3òÖ}îŸ)¼`u¬É&T3ÅjZZ\৯ܖÀ2=*ÛjñO™Á‰<‘Ü˸t=0*[m/Í;×?ˆ«riNˆzŸ¥e]É%¨ ¨$îeË’sÖº]>â×bÃw½>÷ìî¬0:dq\úZo˜°à yc¿ ôâ·4‹v?¼5¥w(†.N+ŸÝæÍ“Î{æ®9TU«+4Óç°­]øƒœZÊ”™gÿÕ³O.æ©Í)šrsÆqJ(õ¦™úšzÅ»ïÍh[Ä<~5p³<|)9úP$õ&öã“ïJI+ïB«Î>ZŠéƒóUXn /±]Iƒ:T®Ë°@Åq~$ԣǖ§æµq—G-’I>õ”Ïœ“œR¡È=sëSÃÏ(Eý+¯Òô˜íãVa—5½B´óol¼*’ÝSç¾kF„Þå'šé•m †\‚r+/[¿Kuò£À°®n nî6I&º«{KuyÅV¸W[=«_1˜‚H¡¦¦2ç>µ·Ô±Ïÿíaù…A-Ø¿m á}*톗!ÛªìW fh€Gjy­ dÏC\¶¤Ìù9Pj ]êà’EtºŒØãÒ´N¥ &wÞ¹ÛÉövÚ8íR¾Î$ç­dOб<­B/籟*}ëd8ŽÄ0 ³µN!—U>µÖéÃÊ·Pzžk;V¹ÜûŸÆ©Û«pÜæ¬JÃh©â¦‚ 0ÏqOœ}ž2ëëU`]Ì8ükBi‚B#OZ©ò®O¥F·Ò¬[ÂY†_T @•YUÀè*b¤í¥àÝhP žzñK3ãQ¹p Y±5Rn\ Õ ËfvÊúÔg‹‘Ÿ^•©êÓ[@Ù?68®"âí§v’F$“ÜÖLò~¤þ5ŽjÝ­¤—2U9®¿IÒV܆a–­ÖË@zw©•x¸¢8ÉqŽêòYü¤Žµ£iÈ8â¯,;W#“UÝŸ¥H©ÀÎ3\ËÑ™ªCu4Qí~¦³Ú6‘ˆ$ÕH$1BÆ$“§MÜÓwNǒƪO3(=x¨ôÛI.®ƒqœæºigÐÃv®>éžîí‰<VlcXç\×F·©…À¨n§iÁ¬ˆîFAÉ®‡I²ˆíSŒã5zòÎ(ÐŒãÎÍlò¹TÉ,v’@¹Á¬¬òÅ Ƴ-õY–õ÷·ëWe×^H¶ò;SmdYØnÎ:ò+HÚ#Ù†©ÓKˆ¦ãÕ‰ª _- #Ú›b’) AàÖüZœev7f™s RÀX…&±#ÒÄÒ1!â>Sf§Ãæ]s‚k¢ÄØ ç”™§Ï\šÐq²5 Æ*8¾y€=|Ö¦4™wqæÊ8rÒ À`b’év¶­V{…íS$EŸqZF#ø«0ǸäÔØäž¸ö©WþÔÙ©4äÑ)‡<ÔH~ÑÏî犮£'<ñÚ´,4§»“… z×_§i)hÜšÔ@ àðp*y@Œg,P1!Z®C¥_Š<𶉱x§±$Œ â‰08Ç^¸¨üÌú çf؃·N•‡*™® φåÆk æ+Ìö5yf¾ð§=ͺÇÓ$Ö%ü«,ƒ`â¶ôX[–èM%üA‘Î{W)&Väõ­Í6ËzäÖ¿öVŽk>ãN—¸8õ¬×µxå gŽõO¿’ÚrsÀêkUîeÛØzU»9aÝÔÖÆ`•;U{«šW°®tÛ¨È0@¤DrK(È«‘Ìð€6ãÞµme,1$j’mLÀ¤œôª–Íö«€ÌrOZèÆõ‘c$EˆÎ3ž+¯¦FòãŒVþ˜»ã'¹Rèüíž¹â´4{½!íúRêÒü¾Z“Ï&«XCµwôéÜ—#'–Æ2Òä’jÕëíeŒÏb7úÖݲypŒõ"©Þ9rT~tÛhIè9­!Ìdu©£Lž{U¤M¨E=cÈÏZ Ú¸¨º·=*XÀT-P–ÅU”K/æŸe|ï•cÓŒÔþr4 î§Ïw qä¶Ãkú±Ê#µÌM>p¾½MUPÎX*ŸJÕÓ4Ÿ5ÃÍÀÕÛÛ¤1«¨¹ìsJ“Êb®rjõ½ LrsW|¯˜p*QµAõ,.|°Z²§åíùÔªáWß­R’fyˆSÀ¥ê:×>¥1$w¢ÚV*źžô<Œ~†«É³Ð“Š‘´ça•<}jì\'<¦mFñ¸e}kvÍ–+rLVmüÄ@ç=k CäI­û)Ú%Uµÿ´>eR8ïM¼¾‡b€G5M<·RÇÒ™ ¸Üàqš—û#hÜ õ¨E¤‘žœôõy„€ àu©æÔe†›ž1\Òb{É IÏJÓka "Lþ]‹äÎMtV¤Våä‘X÷ý¢àíÎ: ’v‡æ ô«Pj2G& ÊÕ«›øä‹ƒøV<6j”¿#&µ"‚KE zb²î ¼ØíŸÎº+1äYZʹs=Á¦jà_.2+>pW$æ´,…7±÷ª³JòÜ3dûSà|ŠHïZSÜá :ÕE%ä­kK`0ÄU‰9èT‚1Ò¦‘yQúT¡×;sÅG!N¼ÕS)2R¬¿'~)˜'ù¥;Ôí©â,ç“Q[í|Žõ?ËÚ¸Á¦´™lsHÖ5Á¨^Ü/¢²§cøÉâ®ÇzJŽI¨f¸y[8ª÷—#O½SÅ>ÛcÏQT56Û(ÏZ©lª÷ EuvBV\º*ÔújrTó\î£nâ}ŠO­*YÜÈ ŒUÈ Ö±Î=êuÔñ>µ`^DÉ‚ u©‹ ̓ީj òâ>ž¢ ²Ò³+0Í^Ý‌` ©g‘î}êÄÚ£lò€ééVtÙ¢s™1Òµæ¼=ˆëšÌ6%£i±¯7ÆûA Õý2ðÂq×¥mÚ4‡è+1æÜÛ5µs'•mÆ“nÛåÉ5¡;í‰Tpk?i–pp*ÕÁhã#=G]8žµr!å cߥ#³M&E^´·Üà°­hŽJxRIå8ô¥”Û³ÐT1eÜ·83K&z“T'r“x5`L6gíåUsŠUjF˜*V¥x¡ÇÒ¹kë¥lžMR[?´/qÍjYؤ@½*ó6åØ[† F©üªíº=ëV%UÀÙÁ«qDsRá»·½!ç¶iŒØ?wó¦0ïž}*ÜÌzóQíÈ¿JÏÓÃ-‘žµÜ&Ôg®*…¼I!rEsššãP`:UÝ'‚Hë[ës–OÂ’{ˆM±çš§h±–έ)|³U_˜Õh¬TÈYù§ÉiÜ5g\ÆÈ¥sRXÄèÁˆàVÁÔ\&ãµc>¦-¯‹·ö£Í[ÇÜOÞ5±g¦@cÀoZeÞŽ­‘\ó×&?îõ©˜ËxPGjl`pHÍYžÒK²£fÕõ©FŠd*¾QRI …ËÎ*™ŽâÌUãÖªÇË3¶y<Ö­µÊp£ŠÒ󌻊¡-Ò½@fXcf=úU[iÌ’žsÍt6‘ñ“øUÀäÊ¥\’J¶‡Ûñ’Ù N`ñT.f1¸ÎvÒ­ÂÎy¦rAÓ'§Z‚fV±«ùb¾c\ÔJóM¸·'½jÅlÝ?N#Ü»@§-±ÈÝÐVŒUå¶,ju„€¬*àiÎÅq’9¤,Ø<þ´©)R3S³ä®9ÍM€WŽÜSÍV™ˆãIÎkâC-äŽkgM@ðƒZÆÑ | ÇÔâh¾PMSŠi#8Ö¥½Ä¡2OçJ·ò‰S΢ÀŠ®·iùé[‚ªƒõnK8$BÝ3\N©}HF¤ mZi¬!,kVy£\ŽUíF[Pc=OoÌæAÃg5wnó°¦jÜ6*«»oåV#iúU¸¡“ˆÀÊ’=ÒÈçš¹%Œe0Pg•‘q¤E&H\f°n¬&¶Ÿ8;GqV佩BNG­S€î“œ“š‡R—•‰TúTÈ÷5ÕÅHG< T¤ «€*Ÿjz·'&¥VÜø©A uª7Êdv¬Spð1É8õ"êqàqíR-ô-’XV^©¬EL²{s\“Ê÷S—by5±ajï~qWÕ¤p[Š.­¤;˜Õ£ojÎ8ëVÄ8÷÷¤Ž-É©šµÌÐù„†+–¼pg`§½kX –FjÅÍì±&ZÅ%äÊÙ95zÎI<ÁÁü«ZKÉzséšo’G|Ó–ídnGÖµ´û¨µbîò ›•…aÊëy>1ÇJ³ý‰² ŽMY:Rí$;VíƒÂNÖ'&‹f…¼Ã‘["ä´y|“êibS;ù­û;xí£ÜüLžíÀAOŽ \†f?‰«Q†Py« óðO4ÉW 1#ä8ëP]Ú,±¶yÈ®;R·–ÒF :ö¦hö¸>krÄþU½ÀéR"ïçóÍZ Ïµ(!ù'ß>µíÏ®)#›Ër3Á« (n{Ô3’XÒ´?Z°¬ Ï4ç*w~T8i° Y9á‡Ý¦¼€J¾•u•¡O?žiA¸àñYn7íÈâ±.£Ç­V‡î('ÓŠ¥u2…=ÍRÓÁkœã½uIb%ƒÞ³®tÖRX“Ås¡[¢¾õÖéh )‘Ú¢Õ•Bãhæ²Ô) c­m.wÎ:~µ§=´dVsÀ˜*4©¦|¼M>+Ûš­¨¤‘@Cg_MŠf`à ÝR ÉÏÓ©¨RŠ¥‰u?ÞÈÏN•¯41$vƒYÒÅÂÒµôøD1 ð©%‘çŽBúT¨‚7@zÖ–J¯'‚)c€"žFÖM¤‘Á©3µZ™åñŒVF±`g·`£•®jн¼›NzúÖÂáˆã5j$îÏj›$œ)›€f  §tHa𬷯.ûÓSOïcëL—UËï‘XWÚ‹ÊØí•æîr[5¥¦#’sÈ­‚¸£Ï=Oó©¡¼ÏÝ™q{,GvxªãU‘˜ Ƭ-ÎØ‹$ž•NK²Tõ¦¬ÎáÍ4É+*Ó¢IØçšl°N²dŠH¯ç·oƒÞº{ E.#õô«ÙR¹ÇÒ¨†ÙrE_å1ÚªÜI‰“íW |¦sR"2k6Kƒæ75Nê ¸=5–]\l'&¢‹ï0Õk™NâëÅS¸·(6N=*Æ—m‡ÜA'Åt6·J‘•<Ç4Ë»„13dtõ®"S¾ñˆèMtš{ËY…gj7²<œöªQÜ>òk¡Ó.¼¨rV¥›WRJâ¡‚è;î`kD^ÆdÔÖ×q“à ¡«H%`¸ëÅii+·T,zÕ»‹h•pIö¬{Û$ä¯ k>ÒÚHßpÇz´n¥2mÉ>µnÊ'¸”è=ëYŸ¢/ASÅ ãšxU9ô"¬íÞ„Ž ð1KM·œõ©_‚8úÕ¸bVçp=MFx=EWœ¤{W©Z¼wÇBsV,äÝ€ÝG´vçÛ¥1†zT vÍ éÞ¢tܸÏáYW­¸ã¥P–Õ֨ʸ¯aTePNÐ*»¸ü«JÒa/S×4ç»Á;‰Í8N[¹þ•<^{VE´Óðáˆô«è¬ø!1õ® öà‘ŠAVêjô:$JŸw4&— Ë‚Ÿ¥XkT€¯Z†çMSŸ-JÁ»ÓIÊ`Õ(£–ÖN¤[Ú‹(à ŠeÝÊ,ÊAëS‹á±NF*µåú°Èê:Õ½?RSÖ€»ÔsÍfÉq¶F­^‘28®Yñäç4@Å‹‘Òª\’%&¢i™Ôm$ûV¶’™Bç¥Zh „í8÷ª÷– ¶ä—ãÊ¢‘vWÐ×F· ±úV34¤Œõ$ê×*»kzX"ŽUëTb²2\}kN=8"õ&˜ön ôªÂ)CŒàv^H¦yFsZ¶²5¬Xô¨®uvŒ`äÓF¤· «Î$VÌkÙåO$Va\¹|ÍZ±Äm­÷[±‹ÍlšÔª®x&ªNà8#ŽÂœ“ˆÆj͵êÚÃó«,^TÓ¡bŒTô¤š\°~TJã< …²ÎG8ÅdêQ s×¥`ÚI¶}§§ó­ÄÉ_­<¶0ò=ê2¤ÇƒR4ˆØ"™‘ÛŸzÖ<ådjW>Tä×=u+àðzÕF”/CP Ï.I«R×O¸”`) }«b×ÃÛ€.IÅjÁ¢D‡•­ôè•x@E+@"‘~LvéW‘WíçéSB däRFr3ÍK»bôç•Z1ûÓõ§±ªxö7vöªw6êÒ·ƒÒªÍ¤Ç6F9¬ë%à¨Ísú„r.zäzÖa¾–%sÅRŸT˜ç­Eo®M€IÚx«ÉâGñv¨Û_rÄ’k»Öæ@yÇ¥qâF.sžjí¶“ž T¿Àù…T€–~3ŽœÖý°k{MâŸÐ1œŸ›4Û›À!mÎ8í\§™ºì°õÍ_žV’£¥@‰%¸ÞN>µµÜ‹p\Ö¶Eó> _­Y¶»hb:v«ÿÚH½ª9u$+€y=©mç‹i,rHïRƒ:œŠ±(„¦r+&âÆ;›Œ!À§G£:}Ó“×59Y£!@ïV¬ai.C‘Åh^åTnnVþÖKeÛÜ}j¼ºü߸Í15‰$°çÚ­}¥€É=jxdy”m¥_…î"8çmhÃtÜu©Iöö¥npM`'½gÝÆZ20I5ÊÉCy’03[¶ò†ó©ö©<‘Ò¨\E¸üµT»¡À$â¡{é{Õï'‘¶óøVeÍו’OÍY«3ÎÄI&´,ô)nŽç%Tö®†ËA†2± Ä0¨>¸©×®0E[‰Pb¬n^T.I‚p=)îÁ2{SDŠGd¾Õ ’U=OëY­{ nÙÓ­:;‘)["µmUsŒÐí¾pqOt!24…©šÅÕ4…’2輚âï´æINå ÖKÛ…r œ¥s§/XÉëÚ¤I¹˜ªHÅY¸ÀÊk©×¥Ý*©'Ö4Š€)=ªVE^}ë2êåd|dš¿g ²)Á­¹KU8ïKo¦¤ÖÛùçŠÇÕlü Ãyé\é>\ƒ’MmX p RjDJDkÀ®ŸÜ¦·áÓãòFzÓ—OIÁÇ¥2êÉcBÛ±Ta²–i=E[k)"Œ’¹ÅWe•FpEE=Ä‚=ªIaïQÚÌ£q9ÍoE<¨@äÕÆo65Ü5:ɪ’qÓ¥dܽÅýÎÞvÕvËGVÞæ´dÒ-•A ÖmÆ’¹曂œ0éíZº]ÌpÀZå#“€F*9 Úù^ݪ¼—X8xv«×h©w|ûZ‡EÛ€?—Jçu˜0 ­UÓ®±æµÁܹ )o¼*@'i÷ª2$KËt¬»íBPˆÀ-ÓŠÀòf¾˜¤ƒ]•¡ˆ”<‹–úWC <¸«"#€6Ô«Ëéýi °ÏµI “ÍXÚIëI³ŸR(§wOZDx¶æ¢Ô5a‡ßÚ¸WÄ’ndˆ…¬Ôg–FÜäŸç[Z¬DÞ[]ÕÊ2жrjÓ8ÛÀæ˜ uã¥/Êàî³µ-";¤Qšâõ]X~•ϘdÛ‚1Öµìo–2ŠÚ[¨ÊƒYúÊ“péX»Š0$ô¨on  Î{ÕD‰‰©Çzé´øÂ¿/AEäíWñVmµ!®0kþå®e+œ\ìŒMÎÑÈÎtv›¢´/nµžZIîNÆq[0A 0sV‡œ=xªò\ÌŽ~ö}©›î%8j¹m+¤ç$š µ—ŸLÕ)¯ã”.ß­G+²¶A­»hbgSòŒ{Ö‹dNvñïY—wð.6‘ùÕU¸YäË·Ë[Ú|–›@%*Ú…-Ùr¥sëM¸·›¯j¨ABo­A5²Ím f³”ªÄ¨%E^Ó%™$Ãd¯¿j݈ï$°ãÓ5™{hÆRéøÔvÄ[ȵ¨»IßR_þ¸¬íR%³:W¡ã½Âç5¯m}"I¶E$ ¾·Pîùð*–©ªÁ$ ÉÈM}s(Hò¾+SMðñº`\’{šêìô-× â¯‹dŒ`qL*2)ÀüéÛFî½iJ¼ŠH"ܸaU‰¨  gŸ­C8ÝçƒïX×wÚEœäkŠÕ¼DòHTzV:Ç5ëqœš™mÚAê*æŸ7JW<œšíì eÉùZ· uvЏ?1ëHÁÈÀ&¢“xät©–LmQÜC Ð#nk•ÕtM„´K‘ô®nâÆD<1L"Œo5£©ÜaŠzÖϼ÷ªÈüã¥hCå±WAcå,]½ª õY¥TNjA§¢[î$äóô¬ Å@ίN+&Îß̺úó] ψ¼¤ëÒ¦±°ä3/˜­P sŠŠIIlS­íÛÌ“â®o³ œ+>æöÛ8D•;O‘ò‚sÚ !÷äƒÏµHVb¸S#±•ÎpqZhÔg9§Iáâ¿1SDTã­ZµÑ"1–<Ÿz”éq¨/J?²ÔŒtªWZSGó(ã­eLZ7èÃ];|¡Ž}ê s|íϽZ‚Þæ ŸqI×ÙnFÖù¿Jê¬nEÄ`«px­«uÆ#Þ¬J¥Æ¥bN¯ip”šÕ¶º3Â¥1ïKw˜£ŽÕ‹óEpLÙ¶:TŽ™FÆ:W â b$-Ï\Ö}–­4D§Žœö§\Î÷³çÚŸ§ÙD×;˜ŒÕ×[µ4zj©Ët«én‹ÂŒÕÛX€& ÍíPÍP:R@˜Œã¥½ é@@qÅ6ã ÜV\újMãæ¬y´ v51ô¸bÙ¤“He†8‹qi,D“’:Ö¾…vÊ¢2Çð®ßO Dz=kUUN7UkËA4dãŠÄå±¹*AÅlEwé€k&ò?"eÈ#šÏ¿ÒÃDÛ9®BòÖHåØêWÞ©2È$àZÓ´º’(ÆOJÐ}J) 9O˜UÍ7XEù°=+Jöâ›BCÝ«”[ÃÎAþ*è%¹K›,qÓŠ¥¥_[±“ò“ŒWY~«uc¹pxëXºlþEàã'JéîÑf³Ü:â²ìdòä é-.ÖH€<·æ={bš$/ †­!+’F H¯žH8Í:ož>Ȩ| +Çm€óv«dš·!u8éQ‰‹ªy=kBŸË’jI-Ûg-Ÿj öE¤äZúC60µÑiÚb[ Ì2ke ªduè)©&\÷´õ.Í×­9‹ÚÜâ£sqëHç)ƒVà@‘޵.àªO &[-QMÀÿ X²cmDè<Á ~pžÕ$Ã÷ ñTÀÜ€¢«HG˜}i$ÉR{TI&8ª÷«º2ë\¬ ¤ügƒ]…¦ÏÊs]dœ0ôëXÓ4·¾µ“¨DX9®id"b3ÐÕЛ†M5SƒNHw}¸¸íUe‘ ]Ì@ÅdÜj¯/îãÈÏZ†H'’-Ù5 ý¢Ýz¶R*EÔ¦Ryüj+Ù’ëUÃv"±nâÇ|àþuj×O’æ ÃŒv©L–݃QÜé²,~b–×Q¤•c 3qèzÖ|žb¶âÇæõ«Ðk&<ÇZ«ý¢æPØïšítM}n­¼—88ÅT7A/ð?½]µ¬Â[<Õx¬rÆ;–ø­A7–¨ã¡ÖŒë(ÉïÅ\EÛ1Å\ {ÓV^€v«(ÇhúT&P8¯°WòHäUä‚âî\¾BúVµ¶ŠàV”V«ÐñO]:I[8õÅJºnÆùÎknÎÙUGJ±&ÀUv}¼gŠ’IÈÅ*ÌwÖœòž§­†'5ch( Æ*~àqޏ¥ÀnÞô×?(éÅVš^#SBÁcqL‰_vMG!ÚqŸÒ–S˜° öªƒä_¼j©$Ë–¦Èù] äÑ;I#šŽsò‘ÍsW¨R\ã¿zè<0Aork³=ëÅc½³Åt\€Âµ"gò÷”c åõòÝ7¹­;H6Úc©"¢ƒ+!\V•»0S“Ò³n¾a(®M”-Áã½iÆÞ})ÛSa'½Q’óË%ätªW:ƒÄ¹=OJĸ½–åÈäçÒ¬[Yp²8?hùˆ¨W½WÀL*çÚ²î—8ùyöíY¯$±Ë°“z£ÜsšKy'¶°'óë[0ëQÿ|œÕˆõ[kˆü QO£$Ñï‹5‡¥Kmeük"KÈš®m%îŸÊos%¤»— Õë{Ö{°Äõë^“£\¤¶JíTu Åsœõ«qKæZ;U­*ã´šÞŠaæ‘SyœîœîjS>W)À_ržs^¤é!PTãÖºh41 ¾–¾R{Ô¢%`ûSÚ5‰zÀVmÌããVc¸ ù¹¦ý¤1ëÒ³î®Ø1 Ób¾uv«–÷EëÍLYˆëV¢\ò:ÕÄŒ•úÔù x§… qš¬wýz†ääðµfÖ0cçÇ3 Ž2ëÞ³åàç¯zc±ÙЊðFBbÃsÏzÔ#{R®@éÅBçïgéXº”Y‡ó«:ÃE8õõÜÛÊ%Þ⦠7¦8±\Õì,·„°ïZö¼E‚26úU ع )«€‘ÛëT3¼àW'z|«¶=³“W#|Â0:Šp ÃØÕy­7‚zȼ³™ò™$Uh¬ŒM’¼ý*Ôžp@˜©â´fMÍÀ«ñYÅŒÉÅV¹Ó£‘ÂíÁ¬›ý ̧æÇ¥c,oc`rEL2ÿ"®I¥XLaƒÄA§$k é4™VC°·ëZ·:|w1TŠÁ“IÊrœ$Ñb’<.k™¿ÑÙØ•;McìÙbº]T6ë±Ï¡­JìLÈÊÜ‘Ri—î‹'¥]´¥Èç¿5Ðd…YàU´œÎzÔ¡òÍJ+×ïL €c5=Œ0D6¨ÍHÜc• Áx÷¦y¨ƒ¨Î2k:æôBž?JË’PyäœÐó¸P #ܘãÜǽeKª«¾p*x.•ð ­Ky”–´•X¦ãVmËŽqõ­! TàÑ+œÔÑ|ç$ŒQ$g¯j­pŸ»'Š|2óÓœRË!gÀªsýáéCòœÕp?‘Ÿ ïPœ?N´Æ'š«+ØVx÷¦0y÷ª–¬`ºÏZë¬ïÄ ·^+O9PÇëVbt Ç^õ•ª(ÿXzŸO‘‘ž;ÖuÌ‹Ó`cš½†U õªò(,Øü«–Ô¢j'ךX‡<Õ¤m \ã<C-Ò«HŠîŒR4y…¨å$ Í[³Œ°©L{¥ç‹¹ˆëø×7«éò,ÛÑN*­´EH)šКée‡Za¶ŠîbùXTvŸh±œyŠJç9ÍvKÌ ê~lsQ\Ä&C…äUÁŽOš§¹±Žê>TG¥qÚ¿‡2ÒÄ8ô„¡á äjF¹}£’@­mõLÜñÛ5¯æâmÀ÷®ŠÒQ5©Byi7,‡¯¥h!à.y©†$Ó¶gž*ÌrìC“ŸÆ«Kz“‘Ÿ­eÏ|YŽO>Õ]ǰ³1Z¡&£ ?þ<)‹y 0#©ÞêÑ#`ûVEþ®óÇå¨ÀüÖ¨œÉ'÷£ëZ°œ“õ©T=ª½Ä;‡Ëy »s¸SWÚ¸kûX—÷§ÚêyP^l{ŸûaPçΧüÛr5§o­ÆãcqZÌ’ž9±SL‰´f¢¹µ°äc°u8ÂÊ³Ž š×±¸óNzŠ’÷kÄG ¬¸d+(·!¢ »ß­ ˜'š«{£Ew;>lW¨é2A1T^-F9­m*ôFJ“ÍY¹» .}kJÂìÈ€ƒ×­j$A8ô¨š7,Hn>•Àµ3»‡Ï^êby…Îöj²¶Þ`Ÿ+è\ðÅÊ9õÅU6ÛŸëMòDrã9ǽJ‘<™eÙ¤òÓ`8=+WI´>P”çžk~Ú5,ž+zÞÜBCmã®kB&߃žý*ÃF0NF)ƒiŸÂ£xÀ•†Æì*™<ÒI"¢üµY§gÅT˜°aŠxn2JÜã¯ËÝê«ÊM½êaTüª}³P\JAlñÅsM35áËg'šëtä- jÛˆâ Rª³±'§­=~éý*¼'dçš‹Vby⦱mÑ`=ªÚøwÅsúÝ»FAR}+ çrqÞ´%€Ú¥³&’UÎO<ûÕ7µ YWz)uo,â¹›­&ñIK¨œÊÞYûÊqÍtÆHÇoZÀ RånOéV׎‡ƒTïtôåäô®CQÒLlp8¬*H¥$Tßi$…sZºtþn«—@ËW¢ehÔ‘Î+†ér‡×5cËŒ¶á‚=é·i<[a‡¥d$o!FçªÄs£°À=jÔëˆ`µVŽ4$¶ìÔ±Î**ºZ™îä’k±‚ÏÈ´EÇnjþŸ#qŠèáŒIƒŒc­NG¬1:æ¤2½*Õ¸™HÅržžñJJƒX7q7ÞÏ"—Lº1L_Zí,ÝZÜœÓÄ£âå” 2«ÐÝ™­ +ÈÙŠž¾õõŠÉ!‘wTI¥®ÐÄãêiϤ<‡÷mÁëÍFÚ5Ôg‚qU'‚â …½}ªÖt±Ì¡×u»Ý>h/! ‘œp+JÒÐ$¼ã¶kP(E :tëM”g– çéUçÜN?„&Ï“Ó7çœÔ¡Aw¬ë«e•¶‘œ×5©èí,‘\´±4w8ÚG5¹c~ðÇ´ž1WÏ+ž‘Täæ–!†êqõ«iˆä ÈÍoÙ¼rÄ<ô¢úÂ\©…‰^â‹/2>jg­m¨cä†*! ¬P gÞh©Ì‘`Ò¨@o4×Ýó`½«­Òuƒp¡YðÞ¹®’&ޙݚq7}*78\f«¹Éäæ’â]Ë´5T¨b=OlSfýÚéUÁAý* €6XÖmŒ¸™Ç½?R”Î3ŒU[ Ï<Ôò31¬Ë§ÿHÅ\‰É„.zÖmúí˜{V]Á|€IÅK£17м׫X¦-côÅX‘@Îp( ¡1ÛùU ©BBÁG$Õ+QºAŽio‡ï¹=ëVÃ!Ðu«L¥Žóô¬MK~É2z~µÎÌFÅÉÅ\Œî³85˜¼;К—í*€¡à ·ŠÊ1Š™€Ù‘ŒQ gÔls>ÌqM¹ù`^/jeÛ~é«+r}ÎjK×&T-%a ÷Åk,¬c<ô“9ßséZÆ<€+2ù|¼Õ˜Ãœ“ÐTº(ñF9ÏZõKn 0>A¸óØÓá a]JÀãÞ­iÀ±Àª×¬MØ¡5³dƒÉZÒEN+Wy£Û5ÎL€E\‰GÙ cÜ‘Y·r0'³áÕ.`b䯷m5y§‰U”~u¡Ócîþ´ÃtÞOÖŸ$¦HȤìß>•ƒá÷hï0§€Ø¯Dº]únãÖ²m0³c­T8^*Uo“Ù@ܵXUG½W‡ýyŒš²ãˆíYZŒJð±nO¸®6þÕ"—*zÕ ¸ï_ÿÙnip2-8.7.0/share/nip2/data/nip-slider-16.png0000644000175000017500000000106513224651032015202 00000000000000‰PNG  IHDRóÿabKGDùC»êIDATxÚ•“=‹Q†Ÿ{˜ 3Þ4aY˜u³L‘ÊF´±Hµ•0þƒØ…ÁÞb‹-öä'X¥Œ VKH«ˆ±72aóaع3I wdÑ ¬/¼ÅáržsÎ=ø­ÇÀk ¹ƒ?O¹¥G@çüü|¼\.“,F£¤Ûí&ÍfóÝ ¤˜^µZ­oAd&Çqœ\^^&Ýn7éõz‰eYï7<©V«ûZk²4QJý‰ÏÎÎ~/RÀA¹\^…aÈ.cX.—, úý>J)*•ʳf®1æaVõ\.GE Úí6µZ y„)@‡a¸—PJ!"L§S&“ Žã°Z­öŽŽŽ<ÏÃ0ÆdÎoÛ6"B>Ÿ§T*Q(˜Ïçh­÷ÒîcÖÀÎ.Öë5"B©TÂu]¶Û-"²ÖZçRÀÏ0 ¿•]€(ŠPJQ­Vi4ø¾OEó8Ž÷SÀØ÷ýmÛ;×××(¥H’„Ñh„RŠívëctºÆ¯WWWeÁó=ÏömÇADPJ1™L ³Ùl>^\\|‡³Íf³ó#‹q£µ¦Óé|‘|€ºuLoúééiæFŽ)‹¸®ËÉÉÉà¹uó6^^½^¿ÏÈú+ïšëü‡V,Ã~SIEND®B`‚nip2-8.7.0/share/nip2/data/nip2-icon.ico0000644000175000017500000021401213224651032014472 00000000000000{ ô({ PPCÿUODÿA>6ÿ;92ÿHHAÿDA:ÿ! ÿÿ+--ÿÿÿ32-ÿJJAÿ "8ÿ,ÿ">ÿUUUUÿ::3ÿÿÿÿ%%%ÿÿ ÿÿ''%ÿ ÿÿ ÿ ÿ ÿ "ÿ1ÿ$>ÿ**ÿ972ÿ%('ÿ,-2ÿ>;AÿQQ[ÿQQ[ÿ333ÿ  ÿÿÿ<<<ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ "ÿ(?ÿ.E\ÿHDDÿ%%%ÿ78;ÿUUUÿ[[Hÿÿ ÿ/.0ÿC<<ÿ? ÿ ÿ:46ÿIFLÿ(%,ÿÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ !ÿ +ÿ"?ÿU00-ÿ,/1ÿPP]ÿ#!!ÿ ÿ^\^ÿ:::ÿ1ÿ ÿ ÿwqqÿž£Ÿÿ§¦¤ÿ¢ŸžÿЇ‡ÿqmpÿVQUÿ506ÿÿÿÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ %ÿ 6ÿOOOÿ%'$ÿ479ÿ&&$ÿÿKJHÿ222ÿ!ÿ ÿÿ–Žÿ¢£ ÿ¤¤¢ÿ£¥¡ÿ¦¦¢ÿ§¨£ÿ©¨¢ÿ¬«¦ÿ¬¦¤ÿ•’ÿzuvÿ[V[ÿ:4;ÿÿÿÿÿ ÿ ÿ  ÿ ÿ ÿ ÿÿ(ÿ#4WÿUUÿBB>ÿ ##ÿ=@Cÿ&&%ÿÿ<=;ÿ.+.ÿÿ ÿ#ÿ¨¤¡ÿ¦¦¢ÿ¥¦£ÿ¦¦£ÿ§§£ÿ¨¨¤ÿª©¥ÿ©©¥ÿ«©¦ÿ«ª¦ÿ¬«¦ÿ®«¨ÿ´®ªÿ°ª§ÿš“”ÿztwÿ\TYÿ838ÿÿÿÿÿÿÿÿ ÿÿ  ÿ.ÿ)Fÿ*;]ÿ533ÿ(-.ÿIIOÿ+)(ÿÿHILÿ303ÿ ÿ ÿE==ÿ¨§¤ÿ¦§¤ÿ§¨£ÿ©¨¥ÿª©¥ÿª©¥ÿ«ª¥ÿ¬«¥ÿ­ª§ÿ­«¦ÿ®¬§ÿ¯¬¨ÿ°­©ÿ¯®©ÿ±­ªÿ±¯«ÿ²¯«ÿ¶³®ÿ±­©ÿ™’’ÿ|sxÿ[QWÿ606ÿ ÿÿÿÿÿÿÿÿ ÿ"ÿ 'ÿ <ÿ'Nÿ,**ÿ/35ÿPPPÿ-+*ÿÿNOMÿ++.ÿ!Xÿ ÿ ÿh_`ÿ¨©¤ÿ©¨¤ÿ«©¥ÿ«©§ÿ¬ª¦ÿ¬¬¥ÿ­«§ÿ¬¬§ÿ­¬§ÿ­¬©ÿ¯«¨ÿ°®©ÿ±¯ªÿ±¯«ÿ±¯«ÿ±¯«ÿ³°¬ÿ²±«ÿ³²«ÿ³²¬ÿµ²­ÿµ³®ÿº¶¯ÿ²¬¨ÿ™‘‘ÿypsÿZQUÿ903ÿ!ÿÿÿÿÿÿÿÿ!ÿ'ÿ2ÿ!3UÿU-,*ÿ147ÿUUUÿ--,ÿÿ-34ÿ116ÿ1ÿ ÿ ÿ‡‚ÿ¨«¤ÿª©¥ÿ­ª§ÿ­ª¨ÿ®ª¨ÿ¬¬§ÿ­¬¨ÿ®­©ÿ°®©ÿ°®«ÿ±®«ÿ±¯«ÿ²°«ÿ²±«ÿ³±«ÿ³±«ÿ³±¬ÿ³±¬ÿ´³­ÿ³³­ÿ³²®ÿµ³®ÿµ³®ÿ·´®ÿ¶³®ÿ¶´­ÿµµ­ÿ¼·°ÿ°«§ÿ”‹ÿvmoÿUMNÿ5-0ÿ#ÿÿÿÿÿÿÿÿÿ&&&ÿ336ÿ 1Jÿ.,*ÿÿÿORRÿ¹¸±ÿ¹¸°ÿ·¶°ÿ¸µ°ÿ·´±ÿ·´¯ÿmjhÿ ÿMKGÿ·³­ÿµ³®ÿµ²®ÿ´±®ÿ´±®ÿ´±­ÿ³°­ÿ´±«ÿ³°«ÿ³®ªÿµ¯¬ÿ¯§§ÿ”ÿripÿNFMÿ($+ÿÿÿÿÿ ÿ ÿ ÿÿ!ÿ-ÿ*Aÿ$Hÿ=ÿ ÿ ÿŒ‚€ÿ±±«ÿ²²®ÿ´²®ÿ´´¯ÿ´´¯ÿ³µ°ÿ¶µ±ÿµ¶¯ÿ®°®ÿ¶¸µÿ·¹µÿ·¸µÿ··´ÿwŽtÿ<^ÿ7Zÿ:\ÿ=_ÿ•›ƒÿº»·ÿ»º¶ÿ¸¸µÿ¹¸³ÿ´ªšÿ¼±žÿ¿¹®ÿ·µ°ÿ³³±ÿ³´²ÿ´´±ÿµµ³ÿº¹µÿ¼ºµÿ½º´ÿ¼ºµÿ½ºµÿ¼º´ÿ½¼´ÿ¾»µÿ¾»µÿ¾ºµÿ½ºµÿ¾ºµÿ»ºµÿºº³ÿrpnÿ,01ÿ¥£žÿº·²ÿ¹·±ÿ·¶±ÿ¹´±ÿ¸µ¯ÿdc`ÿÿ^]Zÿ¸´¯ÿ·³¯ÿ¸³®ÿ¶²®ÿµ³®ÿ´²­ÿµ°¬ÿµ°­ÿ´¯­ÿ´°«ÿ²®«ÿ°­«ÿ¯­©ÿ°«©ÿ¯«©ÿ°«ªÿ¢š›ÿ‚zÿ_X^ÿ83;ÿÿÿÿ ÿ ÿ ÿ ÿ ÿ ÿ #ÿ3ÿ>>ÿ±°­ÿ²²¯ÿ±³¯ÿ²³°ÿ·¶²ÿ¸·³ÿ¸¶³ÿ·¶±ÿ·µ°ÿ·µ°ÿ·´°ÿ¶³®ÿ¸²¯ÿµ³®ÿ¶²¯ÿ³±®ÿ²°­ÿ±°«ÿ±°«ÿ¯®«ÿ°®«ÿ¯­ªÿ­«¨ÿ®ª¨ÿ¬ª¨ÿ¬¨¨ÿ©¨¦ÿ›™ÿZYWÿMJHÿÿ ÿ$ÿ ÿÿC88ÿ·¸³ÿµ·±ÿ¹¸²ÿ¸¹³ÿ¹º´ÿ¹¹¶ÿº»µÿ»»µÿ±´²ÿ¶·µÿ¹º·ÿ¸º¸ÿºº¸ÿº»¸ÿ¯µ®ÿ:`$ÿ7\ÿ9[ÿ8\ÿ‹•yÿ»»¸ÿ»½¸ÿ¼¼¹ÿ»½¶ÿ´¢Šÿ¬fÿ²hÿ²gÿ®hÿÀ·®ÿ»¼¹ÿ½¼¹ÿ¼¼¸ÿ¼¾·ÿ¾¼¹ÿ½½¹ÿ¾¼·ÿ¦u@ÿ´hÿ³hÿ´hÿ´jÿ±Jÿ¿¼·ÿ½¾ºÿ¿¾¹ÿ¿¾ºÿ¿½ºÿº½¹ÿ¶¸¯ÿh}Vÿ $ÿÿÿÿšqEÿ¹–nÿ½§ÿ¶¨ÿ¼·°ÿ´³¯ÿ²±¯ÿ±²®ÿ°±­ÿ²²°ÿ·µ°ÿ¶µ±ÿ¶³¯ÿµ³¯ÿµ³®ÿµ³®ÿ¶²­ÿµ±­ÿ³°¬ÿ²°¬ÿ²¯­ÿ±¯«ÿ°­©ÿMKNÿ[ZZÿ¨¨£ÿ­©¨ÿ‰„ƒÿ ÿÿÿÿÿ1ÿ?ÿ ÿÿl^]ÿµ¶³ÿ¸¸±ÿ¹¹³ÿ¹º´ÿºº¶ÿºº·ÿ»º·ÿ¼»µÿ°³±ÿ¸¹¶ÿº»·ÿº»¹ÿ»»¸ÿº¼¹ÿ±·¯ÿÿµiÿµkÿ¶kÿ¶lÿ¸~;ÿƽ³ÿ½¬˜ÿ¼·­ÿ½½µÿ”Ÿ…ÿXtCÿ?`(ÿ/<#ÿÿ)++ÿÿY?&ÿ«bÿ´gÿ¹lÿ¸lÿœEÿ’5ÿƒ1ÿbU'ÿNk-ÿQl0ÿSg5ÿOh2ÿIg.ÿhP3ÿšœÿ®®ªÿ´°®ÿ´³°ÿµ´°ÿ¯±®ÿ®®­ÿ«­¬ÿ«¬ªÿ²°­ÿ¯­ªÿ)'(ÿ ÿ"ÿ28<ÿV[\ÿQRTÿ"%(ÿÿÿ&&%ÿ !ÿÿ1'&ÿ¼¹³ÿº¹´ÿººµÿ¼¼µÿ»¼¶ÿ¾»¸ÿ¾½·ÿ½¾¹ÿµ¸´ÿ¹»¹ÿ½½¼ÿ½½¼ÿº¼½ÿ¹¼¿ÿº¼¼ÿ±¸±ÿAh+ÿAe$ÿAd ÿAc!ÿ|Šrÿ¾½½ÿ¿À»ÿ¿¿»ÿ¿À»ÿ¼¶¬ÿ¬iÿµkÿ·kÿ·{:ÿÿºÿÀÀ»ÿÀÁ»ÿ¿Á»ÿÀÀ¼ÿÁÀºÿÀ¸«ÿ²lÿ¶jÿµkÿ·kÿ¶mÿ³u/ÿ­’xÿ°žŽÿ·´«ÿj€UÿB`#ÿ?`"ÿ?_ÿ4C$ÿHKHÿ589ÿÿ!ÿW>'ÿ±gÿºjÿ±aÿ5ÿ’3ÿu1ÿD]!ÿAa"ÿB`!ÿCZ$ÿC_#ÿF_#ÿN7ÿ±¨¡ÿ«¯¥ÿ²·²ÿ¶¶³ÿ²³¯ÿ®°­ÿ°±­ÿ°°®ÿ«­«ÿ²¯­ÿkhgÿÿ156ÿ„ƒƒÿ¬«©ÿ­­ªÿª£ ÿ!ÿÿ ÿ"""ÿ ÿÿVJHÿ»ºµÿ»ºµÿº»¶ÿ½¼·ÿ»¼¸ÿ¿½¸ÿÀ½¸ÿÀ¿¸ÿµ¹µÿ¹»¹ÿ¼¾¼ÿ¼¾½ÿ„’¸ÿ8E¸ÿNY¹ÿiu®ÿAd,ÿCd$ÿ@c!ÿ?d"ÿiwiÿv~¯ÿ¨ªÁÿ½¿¼ÿÁÀ»ÿ½¶­ÿ®jÿ¸mÿµjÿ¸z7ÿÃÀ¼ÿÀÀ½ÿÀÀ¼ÿÁÀ»ÿÀÀ¼ÿÀÀºÿ·Ÿ‚ÿµkÿ¶jÿ³kÿ¶iÿµkÿºž€ÿ¿½¸ÿ¼º±ÿc{Nÿ@^"ÿA^!ÿ>^ÿ@^ÿ9J'ÿ ÿÿ)ÿ*ÿ#ÿC5,ÿ´iÿšKÿŽ3ÿ4ÿ[?ÿ;Zÿ9[ÿ7Xÿ8Sÿ8Yÿ[Hÿ†L4ÿr^ÿKf@ÿ¥ª¦ÿ··´ÿ¶µµÿ³³²ÿ±°®ÿ®°¬ÿªª§ÿ_\\ÿ #%ÿdghÿ¨§¥ÿ²¯¬ÿ°¯«ÿ¯®ªÿ“ˆ‡ÿ ÿÿÿ ÿUUUÿ.Mÿÿÿ{mmÿº¸¶ÿ»¹·ÿ»»·ÿ»¼¸ÿ½¾·ÿ¿½¹ÿÁ¾ºÿÀÀ¹ÿµ¸¶ÿº½¹ÿ¼½»ÿ»½ºÿ[k¸ÿ$ºÿ#¹ÿ%«ÿ;Y/ÿFh%ÿEf(ÿBe%ÿw…xÿž¡Àÿ4=³ÿsx¼ÿ¼¾¾ÿþ·ÿ°o'ÿ¹mÿ¸lÿµv2ÿÂÁ»ÿÁÁ¼ÿÀÁ½ÿÁÁ½ÿÀÁ¼ÿÁ¿ºÿ±ƒMÿ·lÿ¶jÿµlÿ¸mÿ°q&ÿ¿º¯ÿ¾¾¶ÿv†bÿ>^!ÿ@^!ÿA^ ÿB` ÿ@^ ÿ=P)ÿ$ÿ,ÿ.ÿ'4ÿ".ÿ+ÿmV%ÿaJÿdFÿr>ÿAJÿ8Wÿ8Xÿ5Tÿ5QÿAPÿ‡5ÿ€F-ÿr|eÿ¥©¢ÿ´µ³ÿµ·³ÿ¶¶µÿ²³°ÿ£¦›ÿ¤œÿRQQÿ!$%ÿz}}ÿ°±®ÿ±°®ÿ±°­ÿ±°«ÿ±®¬ÿwjjÿ ÿÿÿ ""ÿ/ÿÿÿž’ÿ¹º·ÿº»¶ÿ»¼¸ÿ¼½¹ÿ¿¾¹ÿ¿¾ºÿÀÀºÿ½¾ºÿµ¶·ÿº¼¹ÿº¼»ÿ¸»¼ÿ0B¶ÿ#»ÿ#ºÿ%¬ÿ9U0ÿDf%ÿDf'ÿEg*ÿ/Gpÿ%/²ÿ#-ºÿ,/±ÿlp­ÿ¿¼ÿ®s/ÿ¹mÿ¸lÿ±s,ÿÃÀ»ÿÂúÿÂÁ½ÿ½ÿÁÀ½ÿ½²¥ÿ¬jÿ¶kÿ·kÿ¶lÿ·mÿ·ŒYÿ¾¾·ÿ¤ª˜ÿDa'ÿD^#ÿB_$ÿB`"ÿC`"ÿB`"ÿBZ*ÿ*2ÿ,5ÿ$+ÿ$-ÿ"*ÿ!ÿ'.+ÿ5>*ÿDJ'ÿOO&ÿ8Pÿ7Xÿ7Xÿ7Qÿ6Nÿg@ÿ3ÿŽI4ÿ·²­ÿ´µ²ÿ´µ²ÿµ´±ÿ‘šˆÿyŠqÿYsQÿ\^[ÿ %&ÿnppÿ²²°ÿ²²°ÿ±±¯ÿ²°­ÿ±°­ÿ±¯¬ÿYKKÿ ÿÿÿ$%%ÿ!ÿÿ$ÿ¶±¬ÿº»¸ÿ»¼·ÿ¼½¸ÿ¼¾¹ÿ¾¾¹ÿÀ¿ºÿÁÀºÿ¹º¸ÿ¹¹¹ÿº¼¹ÿ»¼»ÿ«³¾ÿ*·ÿ#¼ÿ#ºÿ#±ÿ7R1ÿCf%ÿDe'ÿFg)ÿ,Flÿ (¼ÿ%ºÿeg¿ÿ°°Æÿ¾¼¿ÿ«x<ÿ¹lÿ¸mÿ²r*ÿÅÀºÿÁ½ÿÂÀ¾ÿ¼ÿÃÀ¼ÿ³ˆVÿ·lÿ¸lÿ¸kÿ¸nÿµlÿ¼©”ÿ¾¾·ÿk€WÿDa&ÿC^'ÿB^$ÿB_$ÿC`%ÿAa"ÿG`+ÿ@KGÿ *0ÿ!2ÿ"/ÿ ÿ#'ÿÿÿ!ÿ"&ÿ&-.ÿ/;(ÿ=L1ÿ6C%ÿ;D!ÿy8!ÿ…6 ÿˆI7ÿ±¯ªÿ®®¬ÿ«­ªÿŽ~ÿHa:ÿ_jOÿ:C9ÿÿ,..ÿ¯¯¬ÿ³´°ÿ³³¯ÿ²²¯ÿ±²®ÿ²±­ÿµ±¬ÿ7+*ÿ ÿ ÿÿ-11ÿ ÿÿ@56ÿ½»·ÿ»»¸ÿ½¼¹ÿ¾½ºÿ½¾¹ÿÀ¿¹ÿÁÀ»ÿÁÁ»ÿ¶¹¶ÿ¼¼¹ÿ¼½»ÿ»½¼ÿ‹–»ÿ$¼ÿ$¼ÿ#ºÿ#´ÿ4N8ÿDg&ÿDf'ÿDg)ÿ2Kcÿ#»ÿ#¼ÿ$¼ÿ,4¸ÿ_g¹ÿŽfQÿµkÿ¸mÿµs%ÿÇ¿¹ÿÁÁ¾ÿÃÁ¾ÿ¼ÿ¼¬šÿ°kÿ¸nÿºlÿ¹mÿ¸nÿ·~=ÿþ·ÿº»²ÿHe-ÿA`$ÿC`$ÿC_%ÿD_$ÿCa#ÿDb"ÿG`'ÿAJKÿ+ÿ&ÿÿ#ÿÿÿÿÿ ÿ%ÿ"'*ÿ‡Œÿ>ABÿÿÿÿÿÿÿÿÿÿÿÿ ÿ<<;ÿ¶´²ÿ´´±ÿ³³±ÿ´³¯ÿ³²®ÿ±±­ÿ²¨¥ÿÿ ÿ  ÿÿDDDÿ3fÿÿÿgZ[ÿ»¼·ÿ¼½¸ÿ½¾¸ÿ¾¿¹ÿÀ¿ºÿÁÀºÿÄÀºÿÂÁ»ÿ¶¸·ÿ½¿ºÿ¼¾»ÿ½¾¼ÿ_p¹ÿ$¼ÿ#»ÿ#»ÿ#¹ÿ/FBÿBa(ÿEg'ÿHh,ÿ6RVÿ#ºÿ#¼ÿ$½ÿ#¼ÿ&,¾ÿG8aÿ­iÿºoÿ´q&ÿÆ¿¹ÿÃÁ¾ÿÃýÿ¿·ÿ¨s9ÿ¹mÿ¹mÿºlÿ¹mÿ¸nÿ¿¥ŒÿÃÀ¹ÿ¢¨•ÿGb%ÿF`$ÿA^!ÿB_&ÿC`$ÿGa%ÿFb"ÿgf,ÿ/1/ÿÿ!%ÿÿÿÿÿÿ!ÿ )ÿ(3ÿ%,.ÿIKKÿ'''ÿÿÿÿ ÿÿÿÿÿÿÿÿ ÿÿ¦§£ÿµµ±ÿ³´±ÿ²´¯ÿ³²¯ÿ³±®ÿ›‹ÿ ÿ ÿÿ*/1ÿ(EÿÿÿŒ}ÿ»½¸ÿ¼½¹ÿ¾¾¹ÿÀÀ¹ÿÀÀ»ÿÂÁ»ÿÄÁ»ÿÁÁ»ÿµ¸·ÿ¿À½ÿ¿¿½ÿ¼¿½ÿ7G¹ÿ$½ÿ$½ÿ#¼ÿ$ºÿ,CPÿBa)ÿIh*ÿIh,ÿ<[Hÿ$¹ÿ$½ÿ$¾ÿ#½ÿ$»ÿ !oÿ“Zÿ¼rÿ·r*ÿ£³ÿÁÁ½ÿļÿ·’kÿ¸lÿºnÿ»mÿ¹nÿºoÿ·z6ÿÿ¹ÿÁÀ¹ÿ’›ÿHd%ÿC`&ÿC_#ÿC_%ÿD`#ÿDa$ÿMf3ÿ{iRÿ!!ÿ ÿÿÿÿÿÿ!ÿ!'ÿ -8ÿ%1>ÿ"((ÿ'..ÿ'((ÿ1,*ÿ=42ÿ@51ÿ8=3ÿ1?0ÿ-<*ÿ.?,ÿ->,ÿW_]ÿbegÿPTWÿ),.ÿÿCCBÿ¤¥¡ÿ³µ±ÿ´´±ÿµ³°ÿ³±®ÿ}nmÿ"ÿÿ$'(ÿ???ÿ$ÿÿÿ­¥ ÿ½½¹ÿ¿¼»ÿ¿ºÿÁ¿¼ÿÀÀ¼ÿÂÁ¼ÿÃÁºÿ¼¿ºÿº¼¹ÿÀÀ¾ÿÁ¿¾ÿ³¸¿ÿ,ºÿ%½ÿ$¾ÿ$¾ÿ$¼ÿ%8]ÿ=\*ÿJj,ÿJj-ÿEc:ÿ&´ÿ$½ÿ%¾ÿ%¾ÿ%¼ÿ!ƒÿY ÿ¼sÿ·p&ÿ~x¦ÿŸŸ·ÿÀª‘ÿ·mÿ»oÿ½nÿ¹mÿºnÿ»oÿ½—lÿÄÁ¼ÿÂÁ»ÿ’šÿIe'ÿFc)ÿE`$ÿD_#ÿC`%ÿF`'ÿ=E7ÿ$+,ÿ ÿÿ"&ÿ:EJÿÿÿÿ")ÿ&*ÿ8E9ÿL`3ÿMb/ÿN`+ÿ†?ÿ˜<ÿ’>ÿcN ÿE\$ÿ>\ÿ:[ÿ8Z!ÿyŒrÿ¸¹¶ÿ¶¹µÿ²´²ÿ«­«ÿoqqÿ/46ÿ%')ÿLLLÿddcÿgfdÿNLLÿ&&'ÿÿ#*ÿCCCÿ !ÿÿ2))ÿ¾»¶ÿ½¾ºÿ¿¾»ÿÂÀ»ÿÂÀ½ÿÂÁ¼ÿÂÀ½ÿÂýÿ·»¹ÿ¾¿½ÿÀÁ½ÿ¾À¾ÿ˜¢½ÿ'½ÿ&¾ÿ&¿ÿ%Àÿ%½ÿ$5pÿGe/ÿNn/ÿNl/ÿLj5ÿ0£ÿ%¿ÿ&¾ÿ%¾ÿ%½ÿ!“ÿ€Q ÿ¼sÿ¸r&ÿw¨ÿžžÿ²p'ÿ¹nÿºoÿ»oÿºoÿ»nÿ¸}@ÿÀ®—ÿýÿÂÀ½ÿ¢ÿJe*ÿGd)ÿFc&ÿFb%ÿFY)ÿ,/+ÿ#(*ÿÿÿÿ"&)ÿ6>Aÿÿÿ$,ÿ.53ÿI[7ÿRg0ÿRj,ÿTk0ÿkW(ÿ›> ÿAÿYW$ÿKb)ÿEb&ÿ?`!ÿ=^"ÿp†iÿ»º·ÿº»·ÿ·¸¶ÿ±´²ÿ¸¸µÿ¸¹´ÿ­®«ÿ‚ÿXY\ÿ:=@ÿ*.0ÿ-/1ÿ!"$ÿÿ ÿ ÿÿYJIÿ¿¿¹ÿ½¿¹ÿÀ¿»ÿÀÀ¼ÿÂÁ¼ÿÂÁ½ÿÄÁ¾ÿþÿ·»¹ÿ¿¿¼ÿÁ¾ÿÀ¾ÿy‡¼ÿ'¿ÿ'¿ÿ'Àÿ%Áÿ&Àÿ#3‡ÿMi2ÿPn2ÿQm3ÿOm3ÿ)?‰ÿ%¾ÿ&¿ÿ&¿ÿ&¾ÿ"§ÿrI#ÿ½uÿ»u$ÿS>ÿ®o6ÿ¹nÿ´kÿ¹oÿ»nÿ¼qÿ¸‚EÿÁ¡}ÿÀ°›ÿ¾ÿýÿ¨«œÿIf*ÿJf(ÿKf'ÿ>N.ÿ#&(ÿ"ÿÿÿÿÿÿÿÿ"ÿ511ÿQc1ÿRi0ÿUi3ÿSm0ÿZj1ÿF$ÿŽC ÿXY)ÿNf+ÿOd.ÿKe)ÿAb$ÿTsFÿ¶¹´ÿ»»¹ÿ»»¸ÿ¸¸·ÿ±´²ÿ»ºµÿ¹¸µÿ¸¸´ÿ··³ÿ·µ´ÿ¶µ³ÿ´³°ÿ³©§ÿÿ ÿ"ÿ*Uÿ ÿÿ|mkÿ¾¾ºÿ¿À¹ÿÁÁ¹ÿÂÁ»ÿÄ»ÿÄüÿÄÁ¿ÿÃýÿ¶»¹ÿÁÀ¾ÿÂÿÿ¾Â¿ÿTf¼ÿ'Àÿ'Áÿ'¿ÿ&Àÿ'Àÿ,¡ÿF`5ÿRo3ÿOn2ÿPn4ÿ4Nnÿ&¾ÿ&¿ÿ'¿ÿ'¿ÿ$µÿwM)ÿ¾uÿ¾u ÿ´o.ÿÀu ÿ½s ÿ»qÿ»qÿºpÿ¶v2ÿ»°¬ÿ³qÿñÿÃþÿÄþÿ¬®¡ÿJg,ÿHc,ÿ29-ÿ"&ÿ#ÿÿÿ ÿÿ!ÿ!ÿ"ÿ &ÿ(ÿ8=1ÿRi1ÿVi/ÿRj1ÿTk1ÿm^*ÿD#ÿZ`+ÿNg/ÿOh,ÿQg2ÿMg*ÿJk5ÿ¤­¢ÿ¾¼ºÿ¼¼¹ÿ¼¼ºÿ·¹¹ÿ²µ±ÿºº¶ÿ¹¸¶ÿ¹¸´ÿ¸·µÿ··´ÿµ·³ÿ·¶²ÿ›ÿÿ ÿ-ÿ5ÿÿÿ›ÿ¾¿¸ÿ¾À¹ÿÁÀ¼ÿÃÁ¼ÿýÿÄýÿÃþÿÀ½ÿ¹¼»ÿ¿ÿÃÃÀÿ¿ÂÁÿ4F»ÿ(Áÿ'Áÿ'Àÿ'Âÿ&Âÿ(·ÿ?X?ÿSq6ÿRp5ÿSo3ÿ?]Rÿ(¼ÿ'¿ÿ'¿ÿ&¿ÿ&¼ÿvN>ÿ¾t!ÿ¿u ÿ¾t"ÿ½tÿ½sÿ¾tÿ½rÿ³p/ÿŽ{žÿKP¸ÿ†\aÿ¶­ÿÃľÿÂÀ¾ÿ¡¤¤ÿFY0ÿ(-)ÿ ÿÿÿ ÿ ÿ ÿ ÿÿ ÿ(ÿ,ÿ"ÿ3;4ÿQk2ÿSi3ÿTl2ÿWl1ÿM%ÿ^`-ÿQj.ÿOi-ÿRk.ÿSg3ÿQn9ÿ©›ÿ¾¾»ÿ¿¾»ÿ½½¼ÿ¼¼ºÿ·º·ÿµ¸³ÿ»º·ÿº¹¶ÿº¹´ÿ¹¸¶ÿ¹·µÿ¶·³ÿ¶µ´ÿ}mmÿ ÿ ÿ$Hÿ ÿÿ'!ÿ¸°¬ÿ¾À¹ÿÁÁºÿÁ¼ÿüÿÿÿÅþÿÅÄ¿ÿº¿ºÿ¾À¾ÿÃÃÀÿÂÃÀÿ¸½Ãÿ"1¼ÿ(Âÿ(Âÿ(Áÿ'Áÿ(Àÿ(¿ÿ6JZÿSp7ÿSq4ÿQp4ÿKl;ÿ.­ÿ(¾ÿ(Àÿ'¿ÿ '¾ÿYAXÿ¸p ÿ¿vÿ¾vÿ¿uÿ½tÿ½sÿ´p.ÿT@‘ÿ(,¼ÿ$(½ÿŽ^cÿŒŠµÿ¿ÿ¹¸¼ÿADeÿ $$ÿÿÿÿ ÿ ÿ ÿ ÿ ÿÿ!ÿ(ÿ&ÿ$ÿ+42ÿRk0ÿRg2ÿRl1ÿXb.ÿbc,ÿTk/ÿSk/ÿQl.ÿQj/ÿUe1ÿ’˜ƒÿ½¾»ÿ¿¿¼ÿÁ¾¼ÿÀ¾¼ÿ¿¾ºÿ¶·¶ÿºº·ÿ½º·ÿ»º·ÿººµÿ¹¸¶ÿ¸·µÿ··µÿ¹¶µÿ[KKÿ ÿ ÿ ÿÿ@53ÿÁ¿»ÿÀÁ»ÿÁÁ¼ÿÁ½ÿÂýÿľÿÆÄ¿ÿÅÄ¿ÿ¹½½ÿÁÁ¿ÿÃÄÀÿÂÃÀÿ¨°Âÿ+¾ÿ)Áÿ)Áÿ)Âÿ(Áÿ(Àÿ(¿ÿ+:}ÿTq8ÿSq6ÿSp5ÿOo5ÿ,AŠÿ'¿ÿ(Àÿ(Àÿ(¿ÿ !nÿ¦g!ÿÀu ÿ¾uÿ»t$ÿµs*ÿ¯m3ÿP?•ÿ%*½ÿ")½ÿ$(½ÿœg_ÿ55±ÿžž³ÿJIPÿ!&'ÿÿÿ ÿ ÿ ÿ ÿ ÿÿ;1&ÿÿ ÿ ÿ$ÿ%ÿ'0/ÿRj.ÿQg0ÿOj/ÿPj0ÿSk.ÿQk/ÿPj+ÿPj-ÿTh0ÿvJ$ÿ®œ’ÿ¾¿ºÿÀ¿»ÿÁ¾½ÿĽ¸ÿ·¬Ÿÿ¶·¶ÿ»¼¸ÿº»·ÿ»º·ÿºº¶ÿ»º¶ÿ¹¸¶ÿ¹·´ÿ½·´ÿ6*)ÿÿÿÿÿgZVÿÀÀ»ÿÁÀ¼ÿÁ¼ÿýÿÂĽÿÃľÿÆÄ¿ÿÄÅ¿ÿº½½ÿÀ¿ÿÃÄÀÿÀÂÁÿ‹¿ÿ *Ãÿ)Ãÿ)Ãÿ(Áÿ)Áÿ(Ãÿ(Áÿ!.¤ÿLh;ÿPq3ÿQp2ÿQo3ÿ;WZÿ(½ÿ(¿ÿ)Àÿ(¿ÿ%¬ÿ[8ÿ®t3ÿsSÿWq{ÿAp”ÿ;G¦ÿ#*½ÿ%*¿ÿ%+¿ÿ'+¾ÿše]ÿ//’ÿ&(4ÿ$$ÿÿÿ ÿ ÿ ÿ ÿ ÿF4!ÿŸbÿ•`&ÿÿÿÿ ÿ#ÿ#+/ÿPk.ÿQi0ÿRh2ÿSj.ÿRk-ÿNi.ÿQg.ÿRf+ÿ|K"ÿ“;ÿ¼©žÿÁ¦‹ÿƸ§ÿÆ´¢ÿ¸Eÿ§‹jÿ··µÿ¾¼·ÿ¼»¸ÿ»¼·ÿ¹»¶ÿº¹¶ÿº¸¶ÿ¹¸µÿ¶¬©ÿÿÿÿGÿÿÿˆ{xÿÀÁ¼ÿÁ½ÿ½ÿžÿÄĽÿÅžÿÇÅÀÿÅÅ¿ÿ¹¼ºÿÁÿÿÃÃÀÿÁÂÁÿ[j¿ÿ)Åÿ(Äÿ(Ãÿ(Ãÿ)Ãÿ(Ãÿ)Áÿ )½ÿB[NÿQq5ÿQq3ÿOo3ÿJk8ÿ#2¨ÿ)Àÿ)Áÿ +Àÿ=¿ÿ'R ÿ-k•ÿ$kšÿ#l«ÿ"nÇÿ'oËÿ$TÅÿ"9¿ÿ%-Àÿ+1¸ÿ\MMÿ #%ÿ ÿÿ ÿ ÿ ÿ ÿ ÿ(++ÿ„}ÿ¯lÿ·kÿ¥i'ÿÿÿÿÿÿ&,/ÿRj1ÿTg2ÿUg3ÿRk/ÿSi,ÿPh,ÿSc-ÿ|M$ÿ›>ÿ›Fÿ¼|;ÿ¼qÿ¹x)ÿ´z4ÿ­‹iÿ´­¦ÿ··µÿÀ¼¹ÿ½¼¹ÿ»¼·ÿº¼¶ÿ»º·ÿº¹¶ÿ¹¹´ÿŽŒÿÿÿ/ÿ'ÿÿ'!ÿªŸ›ÿÁÁ¼ÿÁ½ÿÂýÿÅľÿÄžÿÆÅ¿ÿÇÅÀÿ¿Ã½ÿ¿¾½ÿÃÃÀÿÁÃÀÿÁÁÂÿ9K¾ÿ*Ãÿ)Äÿ)Ãÿ(Äÿ)Âÿ)Âÿ )Áÿ*¿ÿ6IyÿQp6ÿQq2ÿRq2ÿQo0ÿ1Luÿ"*Áÿ"*Âÿ#1ÃÿFÃÿCÀÿ @¹ÿ#8»ÿ#@Ãÿ&gÌÿ%qÌÿ(sÍÿ,pÌÿ,Z¸ÿ)/Oÿ ÿÿ ÿ ÿ ÿ ÿ ÿÿ8G.ÿž¦—ÿ¾©”ÿµmÿ¶lÿ±l$ÿ #'ÿÿÿÿÿ $'ÿTg3ÿUc2ÿVc4ÿWf3ÿUe3ÿWc.ÿM$ÿžDÿªVÿÀqÿ½oÿºpÿ³„Nÿ¼±ªÿ¾½ºÿ¼»¹ÿ»»·ÿÀ½ºÿ½½¹ÿ»½·ÿ»½·ÿº¼·ÿºº·ÿº¹µÿ}llÿÿÿ-Rÿ ÿÿ4+)ÿ¿¹´ÿÁÁ½ÿÁ¼ÿÂļÿÅÄ¿ÿÆÅ¿ÿÇÄÀÿÆÄÀÿ¼¿½ÿÁÁ¿ÿÁÃÀÿÂÃÀÿ¶½Äÿ(7Àÿ!*Åÿ )Ãÿ)Äÿ)Äÿ)Âÿ *Âÿ!*Âÿ)Àÿ(4¢ÿQm8ÿSp4ÿSp3ÿRo2ÿHfBÿ$/´ÿ#+Ãÿ%,Äÿ$,Ãÿ#+Ãÿ$+Âÿ$*Âÿ#*Âÿ#4Ãÿ#ZÈÿ&pÍÿ,fªÿ$,7ÿÿÿ ÿ ÿ ÿ ÿ ÿ,4(ÿQh5ÿhUÿÄÁ¼ÿ»›~ÿ¹oÿ·nÿ»p#ÿ)*,ÿÿÿÿÿ"'ÿQe4ÿTf2ÿRb1ÿRb1ÿ\Y-ÿp;ÿ˜Fÿ·fÿÄtÿÂuÿºoÿ±‡Yÿ¿¹³ÿ¾¼ºÿ½¼¹ÿº¹¸ÿÀ¾ºÿÀ¿¹ÿ½½ºÿ¼½¹ÿ¼¼¹ÿ»¼¸ÿºº·ÿ¼º¶ÿ[KJÿÿ ÿ ÿ!ÿTGFÿÃüÿÁ¼ÿÂýÿÃÿÿÅÄ¿ÿÈÆ¿ÿÈÅÀÿÉÆÁÿ¼¿½ÿ¿Á¿ÿÁÃÀÿÂÃÀÿ˜§Áÿ+Âÿ"*Åÿ *Äÿ *Äÿ)Åÿ*Ãÿ *Äÿ"*Äÿ*Âÿ#,½ÿ3HNÿNj4ÿSq5ÿSr5ÿRq3ÿ1I€ÿ#,Âÿ%,Ãÿ$-Ãÿ$+Åÿ&,Ãÿ$+Ãÿ%*Ãÿ$+Ãÿ#-Âÿ-CŒÿ"'ÿÿÿ ÿ ÿ ÿ ÿ $"ÿJ[:ÿXs5ÿWt8ÿ§¯ ÿþÿ¸Žcÿ¸mÿ½qÿÁt#ÿ43/ÿÿÿÿÿ$ÿTb8ÿWk4ÿVe0ÿdO%ÿw6ÿ“Iÿ¼nÿÃuÿÃtÿÁtÿ³‰\ÿÀºµÿ¿¼ºÿ¿½ºÿ¼¼ºÿ¹º¸ÿÁ¿»ÿ¿»ÿ½½»ÿ½½ºÿ½¼ºÿ»¼¹ÿ»»·ÿ½º¶ÿ7,+ÿÿ ÿUÿ$ ÿ}mlÿÁ½ÿ½ÿÃþÿÅľÿÆÅ¿ÿÆÆ¿ÿÇÆÀÿÇÆÀÿ¸»»ÿÁ¿ÿÂÃÁÿÁÂÀÿfvÁÿ!+Ãÿ *Ãÿ+Ãÿ *Åÿ *Äÿ +Ãÿ!*Âÿ"*Åÿ!+Ãÿ"+Áÿ/?ˆÿUq9ÿUr5ÿSs4ÿUs7ÿIjFÿ'4°ÿ*/Äÿ'.Åÿ(.Åÿ(-Åÿ',Äÿ&+Äÿ',Âÿ./rÿÿÿ ÿ ÿ ÿ ÿÿDO;ÿizIÿg|Fÿ[t<ÿ|kÿÄÄ¿ÿÈľÿµFÿ¹o ÿÁt!ÿÃu&ÿC9/ÿÿÿÿÿ#ÿ]]8ÿjW.ÿŒI&ÿŽ?ÿ¬aÿÂtÿÆuÿÅvÿÃsÿ±p9ÿÁ½¸ÿÀ¿¼ÿÀÀ¼ÿÁ¿½ÿ¾¿½ÿº»¸ÿÃÀ»ÿÿ¼ÿ¿¾»ÿ¾¿ºÿ¿¼ºÿ¼»¹ÿ»»·ÿ·«¨ÿ ÿÿ#ÿ5ÿÿ)$#ÿœŽŠÿÂýÿÂľÿÄľÿÄÄ¿ÿÃÅ¿ÿÈÆ¿ÿÈÇ¿ÿÂÆ¿ÿº¼»ÿÁÿÿÂÃÀÿ¸½Ãÿ3DÀÿ!+Äÿ ,Åÿ!*Ãÿ!+Ãÿ +Ãÿ *Âÿ!+Æÿ"+Åÿ"+Äÿ#,Äÿ'1¹ÿMiLÿVt9ÿXu8ÿXt6ÿXt:ÿCZhÿ-2¾ÿ+0Åÿ+/Æÿ*/Æÿ(-Äÿ).¾ÿ,-]ÿÿÿ ÿ ÿ ÿÿ:B5ÿewNÿkNÿn€MÿlNÿbtZÿ§¬·ÿÅÃÀÿÉÀ¸ÿ´s+ÿÁu ÿÆv$ÿÅw&ÿMÿ]x@ÿ_zCÿb|HÿQfeÿ6?§ÿ25°ÿ&'Aÿÿ"ÿÿ ÿ&+'ÿ_iMÿƒ‹cÿuƒ[ÿs„Sÿw†Vÿt…Uÿu…]ÿKX˜ÿrwÄÿ–—¹ÿz€²ÿ½œzÿ½s"ÿ¾s$ÿÆy)ÿ°f*ÿU8.ÿÿÿÿÿ#ÿž\"ÿ½qÿÉxÿÈyÿÈw ÿ»f ÿšBÿ–<ÿ—; ÿ«rÿÄ¿ÿÃÄ¿ÿÂÿÿÀÀ¾ÿ»»¼ÿÁ¾ÿ½ÿÂÁ½ÿÁÀ½ÿ¿½ÿ¿¾¼ÿ¿½ºÿ¾¼¹ÿ]LKÿÿ ÿÿ%" ÿm]ZÿÃľÿÿÿÄľÿÆÄÀÿÈÅÀÿÈÇÀÿÉÇÀÿÇÈÀÿ¼À½ÿÂÄ¿ÿÄÄÀÿ½ÀÀÿETÀÿ%.Åÿ#,Äÿ",Åÿ"-Äÿ#,Äÿ$,Äÿ',Åÿ%,Çÿ%-Æÿ$-Åÿ&-Æÿ&.Åÿ)/Åÿ0:°ÿUpOÿ\yAÿ`{Bÿd}Fÿc}Gÿe|Hÿ`rRÿ(*0ÿÿÿÿ$"ÿS_GÿqƒUÿv†Wÿ{…^ÿy…]ÿ{†]ÿ|†^ÿy…eÿW}¢ÿBrÊÿDVÀÿ»ºÆÿÆÃÂÿ¼‹Yÿ¾s ÿÁv&ÿÅz*ÿ V*ÿc=0ÿÿÿÿÿ#ÿ³m%ÿÇx!ÿËz"ÿÉw"ÿ°Zÿ˜>ÿ—<ÿš> ÿ›>"ÿ²•ˆÿÃÃÀÿÃÄ¿ÿÃÿÿÀÁ¾ÿ»¼¼ÿÃÿÿ¿ÿÂÁ¿ÿÃÀ¾ÿ¾½ÿ¿¿¼ÿÀ½»ÿ»¹ÿ:--ÿÿ ÿÿ$!ÿ”ƒ}ÿÁ¾ÿþÿÅÿÿÇÅ¿ÿÇÅÀÿÈÇÀÿÈÇÀÿÈÇÁÿ¼¿¼ÿÅÅÀÿÃÅÁÿ¨±Ãÿ(5Áÿ(-Äÿ$,Äÿ$,Äÿ#-Ãÿ&,Åÿ&-Åÿ&-Åÿ'/Åÿ(-Æÿ%.Åÿ'.Çÿ(.Æÿ*0Çÿ+0Åÿ?L“ÿ`yFÿd}Fÿe~FÿgHÿduJÿ-/)ÿÿ ÿÿJU=ÿnRÿr…Sÿu…Sÿx„Zÿ|†aÿˆdÿˆbÿ‰mÿ^„¬ÿJ„ÐÿO…Òÿ@eËÿ[^Áÿ¾¹Åÿ¸z<ÿ½r"ÿÅw%ÿÈy)ÿ´i)ÿ‡[1ÿÿÿÿÿ%ÿ½u(ÿÊz#ÿÄs&ÿ®T#ÿA!ÿ™=ÿ›> ÿ¤B#ÿ›?!ÿ¸¥žÿÄÃÀÿÄÄÀÿÄÄÀÿÃÃÁÿ»½»ÿÂþÿÂýÿ¿ÿÁÁ½ÿÁ¿¼ÿÀ¾¼ÿÀ¾»ÿ¶«©ÿ#ÿÿ"ÿ !ÿÿ)$"ÿ¶©Ÿÿ¾ÿÃĽÿÅÿÿÇÆ¿ÿÈÇÀÿÉÈÀÿÉÈÀÿÂľÿÀÿÿÅÆÁÿÄÅÁÿŒÁÿ)1Äÿ).Äÿ(.Åÿ'-Äÿ'.Äÿ%-Äÿ).Åÿ).Æÿ).Æÿ(.Åÿ'/Çÿ)/Èÿ'/Çÿ+/Èÿ,0Çÿ.3ÃÿJ]ÿf~IÿhIÿf|Iÿ/2*ÿÿÿCN;ÿj{Rÿo„Qÿr…Sÿu…Sÿv„Uÿ‡aÿ}‡bÿ}†bÿ{‰xÿW†ºÿP…ÑÿO…ÒÿT‡ÓÿEgËÿ57ÄÿDB³ÿµt6ÿÇ})ÿÉ|,ÿÆ{*ÿÇ{,ÿœg1ÿÿÿÿÿ !'ÿÀx*ÿ¸h.ÿzCRÿ–B5ÿŽ>-ÿ“<$ÿžA#ÿ¡B#ÿ’A%ÿù³ÿÆÄÁÿÄÄÁÿÄÄÀÿÂÂÀÿ¼¾½ÿÃÿÿÄþÿ¿ÿÁÁ¾ÿÂÁ½ÿ¿¼ÿÀ½»ÿ‹ÿÿÿ8ÿ ÿÿK96ÿÖÎÂÿÂýÿÄÿÿÅÅ¿ÿÆÆ¿ÿÉÇÀÿÊÇÁÿÌÈÁÿ¿Á½ÿÁÄÀÿÅÇÂÿÁÄÃÿdqÁÿ*/Äÿ+/Äÿ(.Äÿ'.Äÿ(/Äÿ(.Åÿ*/Æÿ(0Åÿ+/Æÿ*/Æÿ*0Çÿ+1Çÿ*0Èÿ,1Èÿ-1Èÿ/1Èÿ/5ÀÿJX‰ÿf}Sÿ=C4ÿÿEN:ÿk{Pÿn„Rÿr„Qÿs„Sÿs…Rÿv‡Uÿ~ˆ]ÿ…Œfÿ‚Šfÿr‡ƒÿR„ÃÿN…ÑÿP‡ÑÿXŒÓÿV…Òÿ;IÅÿ7:Æÿ6:¼ÿ±t>ÿÊ,ÿÉ|/ÿÆ|-ÿÆz+ÿ¬o0ÿÿÿÿÿ%$'ÿ­U,ÿ¥F'ÿD/ÿ¡E*ÿw99ÿ:0ÿ—?/ÿ–B/ÿ–L6ÿÄ¿»ÿÆÅÁÿÄÅÁÿÅÄÁÿ¾¿¾ÿÁÿÿÄÃÀÿÃÄ¿ÿÿÿÁÁ¿ÿÃÀ¾ÿÁ¿¼ÿ¿¿»ÿ€mlÿ ÿÿNÿ ÿ# ÿ€faÿÒÐÅÿÃþÿÄÿÿÅÆ¿ÿÇÆÀÿÊÇÁÿÌÈÁÿÊÉÀÿ¿Á½ÿÃÃÀÿÆÇÂÿµ»ÃÿCNÁÿ-0Äÿ+0Äÿ,0Åÿ*/Åÿ*/Åÿ*/Åÿ+/Æÿ,1Æÿ+0Æÿ+1Çÿ,1Çÿ,1Çÿ,1Çÿ-1Èÿ.2Éÿ/2Çÿ.3Çÿ03Åÿ?J¢ÿO^_ÿi~Rÿp…Pÿq‚Sÿo„Pÿq„Pÿs…Sÿx‡Uÿ|ˆYÿŠfÿ„wÿe†ŸÿM„ÌÿO…ÒÿRˆÒÿWÒÿb‘ÕÿOjËÿ@AÇÿ;>Æÿ=@·ÿmKÿÌ0ÿÉ~.ÿÉ.ÿÆ}-ÿ¸w.ÿ $ÿÿÿÿ,%(ÿ¦I,ÿ¦F'ÿ¥F'ÿ¦G&ÿ•=ÿ™?"ÿC.ÿ?+ÿtL`ÿ¾¿ÀÿÄÅÁÿÄÄÂÿÄÃÀÿ½¾ÀÿÄÅ¿ÿÄÄ¿ÿÃÄÀÿÄľÿÂþÿÂÁ¾ÿÁ¿½ÿÃÀ»ÿ[IHÿÿÿÿ*&#ÿƒ}ÿÅÅ¿ÿÃÿÿÄÄÀÿÅÆÀÿÉÇÁÿÊÈÁÿËÉÀÿÊÉÀÿ½¿½ÿÃÅÁÿÆÆÂÿ–¡Áÿ/5Âÿ23Äÿ.1Åÿ,1Äÿ-1Ãÿ+0Åÿ+1Åÿ.1Åÿ,1Çÿ,1Æÿ-0Çÿ,1Çÿ,1Èÿ.2Èÿ-2Èÿ.2Èÿ13Éÿ04Èÿ04Éÿ35Éÿ6=¼ÿKX–ÿbujÿo‚\ÿqƒTÿq„Uÿv„\ÿvƒgÿmxyÿj…›ÿ_йÿN…ÐÿOƒÑÿWŠÒÿ\Ôÿa”Ôÿf”ÕÿSfËÿFFÈÿHLÃÿª©Ãÿwj…ÿÀ|5ÿË‚2ÿÉ€2ÿÉ3ÿÃ|2ÿ&')ÿÿÿÿ6)+ÿ§J+ÿ§H(ÿ§G(ÿ¦E%ÿ–=!ÿ›?#ÿ B'ÿ=#ÿ£tiÿÆÄÁÿÆÆÂÿÅÆÂÿÅÃÂÿ½¿½ÿÆÅÀÿÅÅÀÿÅÄÀÿÄÿÿ¿ÿÂÀ¾ÿÁÀ½ÿŽºÿ8+*ÿÿ ÿ-ÿ'# ÿ¬–ÿÂýÿÃþÿÄÄ¿ÿÅÇ¿ÿÊÇÀÿÊÇÀÿËÈÃÿÈÈÁÿ½¿½ÿÄÆÂÿÅÆÂÿy…¿ÿ24Ãÿ46Ãÿ04Äÿ02Åÿ/1Äÿ-1Åÿ/1Çÿ.1Åÿ/2Æÿ/3Æÿ.1Çÿ/2Çÿ.2Çÿ.2Èÿ04Éÿ.3Çÿ/3Èÿ04Çÿ25Èÿ46Éÿ48Èÿ69Èÿ8<Áÿ@G²ÿFPªÿJOªÿIM²ÿJK¼ÿHJÄÿZw»ÿ\ŒÈÿ[ŒÓÿ]‹Ôÿ_ŽÔÿi—Öÿsš×ÿk’×ÿU_ËÿNOÈÿHKÄÿªª¿ÿÊÄÁÿœ~mÿ²p>ÿ½y=ÿ¹x?ÿ·yWÿ1+,ÿÿÿÿD/-ÿ©K.ÿ¥H(ÿ¨H)ÿ¦F'ÿ–>"ÿœB"ÿ˜@!ÿ‹Êÿ?AÉÿDEÉÿLJÈÿSRÉÿt³ÿg“Ðÿj”Õÿn—×ÿrš×ÿzœÙÿt—ØÿdrÎÿ[ZËÿSSÉÿRUÃÿÅÄÇÿÌÆÁÿ‹vsÿ]LHÿz[Mÿ™kXÿ´s`ÿ@32ÿÿÿÿ5,.ÿF.ÿ§H)ÿ§H'ÿ¦F)ÿ˜?#ÿ¢E$ÿš@%ÿŒ=%ÿº¯©ÿÇÆÂÿÈÆÂÿÆÅÃÿÄÄÁÿÀÁ¿ÿÇÆÁÿÆÅÀÿÅÄÁÿÄÿÿÿÿÂÁ¾ÿÀ¿¾ÿ›‹Šÿ& ÿÿ5ÿ ÿÿ9-,ÿÆÀºÿÃýÿÄ¿ÿÆÃÀÿÈÆÀÿÉÇÀÿÉÇÁÿËÈÁÿ¿Á¾ÿÁÃÀÿÆÅÂÿÃÄÃÿfo¿ÿ89Âÿ86Âÿ54Âÿ36Ãÿ35Ãÿ15Äÿ35Äÿ35Åÿ23Åÿ14Æÿ13Æÿ15Åÿ26Çÿ15Èÿ45Çÿ46Èÿ59Èÿ36Èÿ37Èÿ47Éÿ9:Éÿ:=Éÿ9<ÉÿA?Éÿ@AÈÿBBÉÿGIÈÿMNÉÿ\ZÈÿŸŽ™ÿp‡ÓÿjvÒÿlvÑÿowÐÿ|„ÓÿyÒÿnlÍÿfdÍÿ^ZÊÿ\^½ÿ¾½Ãÿ³¬¥ÿ[RNÿQJCÿWOHÿƒmaÿ°eMÿN:7ÿÿÿÿ.-0ÿR4*ÿ¥J-ÿ©J)ÿ¥F'ÿ—?"ÿ§F(ÿ D(ÿK2ÿÆÁ¿ÿÇÇÃÿÇÆÃÿÅÅÁÿ¾Á¿ÿÇÅÁÿÆÅÀÿÆÅÀÿÅÄÁÿÄÄ¿ÿÃÿÿÁÁ¾ÿÁÀ¾ÿ{khÿ ÿÿ3 ÿÿZJFÿÅÄ¿ÿÂÁ¾ÿľÿÆÄÀÿÇÇÀÿÉÈÀÿÉÈÁÿÊÈÂÿ½¿½ÿÁ¿ÿÄÆÁÿÀÂÃÿX[¾ÿ?;Áÿ99Áÿ98Ãÿ8:Âÿ96Äÿ66Äÿ56Äÿ56Åÿ56Æÿ57Æÿ48Çÿ48Çÿ57Èÿ56Çÿ57Çÿ68Èÿ8;Èÿ8;Èÿ8;Èÿ6;Éÿ9<Éÿ<@Éÿ>>ÊÿCCÉÿHJÉÿHIÉÿOOÉÿZXÌÿog¾ÿ€n­ÿRSÊÿRQÉÿKKÉÿUSÊÿgeÍÿqrÏÿsxÏÿlsÏÿdeÈÿ·µÇÿÇÁºÿ|qiÿ\TLÿSNGÿYSMÿPJBÿ˜T:ÿ\=4ÿÿÿÿ301ÿ3.*ÿ–G-ÿªK+ÿŸC'ÿ•?$ÿ¦G)ÿ§I+ÿžaKÿÉÆÂÿÈÇÂÿÆÆÄÿÅÄÁÿ¿Á¿ÿÇÆÁÿÆÆÀÿÅÅÁÿÅÅÀÿÄÄÀÿÄÃÀÿÁÀ¿ÿÃÁ¾ÿ^LJÿ ÿÿU ÿÿ{liÿÂþÿ¾ÿÃľÿÇÅÀÿÆÆÁÿÊÇÁÿÊÈÁÿÈÈÂÿ»¾¼ÿÃÄÀÿÄÅÁÿ²·ÃÿGC½ÿB;Àÿ@:Àÿ=:Áÿ?;Áÿ=:Âÿ=:Âÿ;9Åÿ99Äÿ:9Åÿ;:Äÿ:8Åÿ::Èÿ8=Èÿ69Æÿ79Çÿ:;Çÿ9>Æÿ=>Éÿ<@Èÿ¿ÿC=Àÿ@<Âÿ@<Áÿ@<Áÿ=;Âÿ;;Âÿ=;Äÿ?=Åÿ<>Åÿ;>Æÿ8;Çÿ:;Çÿ<=ÇÿAAÆÿ@BÇÿADÇÿCEÈÿFGÉÿJIÉÿLMÉÿURÉÿNGÆÿAAÆÿMKÅÿc^Çÿ„p­ÿoa±ÿVUÇÿTPÆÿPWºÿErÊÿ:yÇÿC‚Äÿ=}ÑÿH‚Çÿ^ŽÌÿ…—¼ÿlc^ÿb[Vÿ^UPÿb[Uÿ\UPÿUMFÿ`G<ÿyH8ÿÿÿ*#%ÿªU9ÿ¯R4ÿ®P.ÿ­L,ÿŸF'ÿ¢H)ÿ¬N.ÿ¢J.ÿ¶¤šÿÈÆÃÿÇÈÃÿÈÇÄÿÇÇÄÿ¾À¾ÿÉÆÂÿÉÅÂÿÉÇÀÿÇÅÀÿÄÄÀÿÃÄ¿ÿÿÿ³¦¤ÿ9/-ÿ"ÿ*ÿ ÿÿ(# ÿ¶¬§ÿ¾ÿÀþÿÅÃÀÿÇÅÀÿÈÆÁÿÉÇÂÿÈÇÁÿ¾À½ÿÂÿÿÅÆÂÿÁÃÂÿqp½ÿKC¿ÿJ@¿ÿHB¿ÿHAÀÿG@ÀÿE>ÁÿD=ÁÿD>ÂÿC>ÂÿA=ÃÿB>ÂÿF?ÃÿB@ÄÿBBÆÿ>?Åÿ@?Äÿ?@ÄÿDBÆÿDCÅÿCEÇÿFHÆÿJJÈÿMNÉÿQRÈÿ[VÉÿ?@ÄÿDBÆÿDCÅÿh_Èÿ–v™ÿf\¶ÿOMŸÿPNƒÿS\qÿ:zÊÿ:z¾ÿ<{¹ÿM„Ïÿ]Óÿf•Óÿt•Íÿhdeÿg`YÿdXRÿ`XQÿaXQÿULCÿgOFÿ…N>ÿÿÿM4,ÿ²X8ÿ±S5ÿ¯P1ÿ­Q2ÿ¤L-ÿ¦K,ÿ¯Q1ÿ Q7ÿÇ¿»ÿÉÆÃÿÇÇÅÿÇÇÄÿÂÃÁÿÅÅÀÿÊÈÁÿÉÆÂÿÉÆÁÿÈÄÁÿÆÃÀÿÄÿÿÿÿŒŠÿ<3/ÿÿ3ÿ ÿÿ;1.ÿÄ¿ºÿ½ÿÂþÿÄÄ¿ÿÇÆÀÿÉÇÀÿÈÆÁÿÉÇÂÿ»À½ÿÃÃÁÿÆÆÃÿ¼½ÂÿniÀÿPE¾ÿOD¾ÿPD¿ÿNE¾ÿMCÀÿJAÀÿJAÀÿIAÁÿG@¿ÿHBÀÿF?ÃÿH?ÂÿFAÄÿFCÅÿEAÅÿD@ÆÿGCÅÿIFÆÿHHÅÿHJÅÿKLÂÿOQ°ÿRR¬ÿST¿ÿZXÇÿPJÅÿIFÆÿTMÄÿh[Äÿva¡ÿRKuÿNGEÿVNLÿUUXÿEl˜ÿBr£ÿ5yÃÿYŒÍÿo˜Õÿs˜Ôÿxœ×ÿ‚Š›ÿqe_ÿk_VÿcXRÿdYRÿbNBÿ•YHÿŠTNÿÿÿtG9ÿµX9ÿ³U4ÿ¯R3ÿ­Q2ÿ©P2ÿ­P0ÿ³T5ÿ¢X>ÿÈÅÀÿÇÆÄÿÉÇÅÿÇÆÄÿ¿Â¿ÿÉÆÂÿÊÈÂÿÉÆÂÿÈÆÁÿÇÅÂÿÆÄÀÿÄÄÀÿÃÿÿonÿ80+ÿÿ ÿÿ\NLÿÃÁ¾ÿÁ¾ÿ¿ÿÅÄ¿ÿÇÆ¿ÿÉÆÁÿÉÇÀÿÈÇÂÿ¹¾½ÿÅÅÀÿÆÆÂÿª­Àÿf[½ÿYG½ÿVG½ÿVG¾ÿUG¾ÿQF¿ÿOD¿ÿPCÀÿPDÀÿOEÁÿMCÁÿKCÂÿKDÂÿKDÂÿJEÂÿHCÁÿFCÃÿFC¯ÿLGÄÿMK¿ÿMKšÿOMwÿWSUÿYWVÿYWzÿ[Z½ÿXTÆÿhWÅÿj_Æÿ|mÀÿrˆÿMFBÿRKFÿUOJÿUPLÿ\UPÿ`WSÿDs­ÿEy¾ÿOuÂÿf‹ÊÿŒ¡ÒÿÑÌÈÿ«ˆvÿpdÿ}_Sÿ“obÿ¬cMÿ¸aBÿ’WPÿÿÿ–S;ÿ´\;ÿ©Q2ÿ«T4ÿ®T4ÿ¯T4ÿ´V3ÿµU5ÿ¡X=ÿÉÆÁÿÈÈÂÿÉÈÄÿÇÇÃÿÀ¿ÿÊÇÂÿÉÈÁÿÈÇÂÿÈÆÁÿÇÅÁÿÆÅÀÿÄÃÀÿÆÃ¿ÿcROÿ3-)ÿÿ"Uÿÿÿ}omÿÁ»ÿÁÁ¾ÿÃþÿÅÅ¿ÿÇÅ¿ÿÈÇÁÿÇÇÀÿÆÆÂÿº½½ÿÅÅÂÿÃÇÁÿ°³ÂÿaS¼ÿ\J¾ÿ[I¾ÿ[I¼ÿZI½ÿXG¾ÿVG¾ÿVG¿ÿTH¿ÿTGÀÿSF¿ÿPF¿ÿQG¼ÿNF­ÿJC›ÿFB•ÿECœÿFC¤ÿMJ®ÿMFhÿNGEÿVNLÿXQKÿ\WRÿc[Zÿc_€ÿb\ÃÿkXÃÿf`Çÿ‹uªÿ¦ƒ—ÿGAFÿOLFÿUNJÿTLIÿZSMÿ\SRÿ[_nÿ;{Ïÿ:z¿ÿV…Áÿ’ÉÿÒÅÀÿ¶w`ÿΟÿºrZÿ·‹yÿ½lRÿ»bCÿ¨\@ÿ"ÿ7,-ÿ–L0ÿŸP0ÿ—J-ÿ¨T5ÿ­V4ÿ³W5ÿ¸Y8ÿ¸Z6ÿR6ÿÊ»ÿÇÆÂÿÇÆÃÿÆÆÁÿ¿Â½ÿÊÇÁÿÈÇÂÿÈÈÁÿÉÆÁÿÈÅÁÿÅÅÀÿÃľÿĽ¹ÿH;7ÿ,%!ÿ ÿ=ÿÿÿžŽŒÿ¿Á¼ÿÁ¾ÿÃÿÿÄÅ¿ÿÆÆ¿ÿÇÆÁÿÈÇÁÿÀľÿ¿Á¿ÿÅÄÁÿÄÅÁÿ¢£¼ÿbP¹ÿaNºÿaMºÿaK¼ÿaL¾ÿ^J¾ÿ]I¾ÿ[J¾ÿ[J¿ÿYJ¾ÿVI´ÿJ?†ÿ>7Oÿ739ÿ;55ÿ=76ÿD?QÿNE£ÿHDƒÿMFBÿRKFÿUOJÿUPLÿ\UPÿ`WSÿe\_ÿhb¹ÿjWÀÿj\Æÿž{”ÿye¶ÿJC|ÿMGEÿOIDÿPKFÿUNLÿTNNÿRU`ÿGnÁÿL|¿ÿe~ÁÿxuÇÿ½¬Áÿ¹uYÿË•‚ÿ½nSÿÄ•ƒÿÁnPÿ¼fDÿ²cEÿ)*-ÿqI<ÿ¯\<ÿ”I)ÿ”H+ÿ¨V4ÿµZ6ÿ¶Z5ÿ½^;ÿ»]:ÿ›L-ÿƯ¤ÿÇÆÂÿÅÆÂÿÆÅÂÿÁĽÿÉÆÂÿÉÇÁÿÈÆÂÿÉÆÂÿÇÅÁÿÄÄÀÿÆÄ¿ÿµ¦¤ÿ@64ÿ% ÿ "ÿ%ÿÿ"ÿ¶¯¨ÿÁûÿÂýÿ¾ÿÃÅÀÿÅÆÀÿÈÆÀÿÊÆÁÿ¼À½ÿÂÿÿÃÅÁÿ¦ª¥ÿa]eÿG<]ÿG;bÿB8XÿK>pÿ^I£ÿdL¾ÿbK¾ÿ_L¾ÿ_L¿ÿSFªÿ94Kÿ812ÿ932ÿ722ÿ;42ÿ=73ÿ@::ÿTJ¨ÿNF¤ÿGAFÿOLFÿUNJÿTLIÿZSMÿ\SRÿ`WWÿia§ÿl`Åÿk[Æÿu¨ÿj\¼ÿbUµÿTL“ÿFCTÿJIOÿONSÿNO[ÿRPÿgaÄÿyxËÿІÌÿ©¤Èÿzk–ÿ¼uZÿË›ˆÿ·iOÿÁ”‚ÿÂkJÿ¼gDÿ³aAÿ[LHÿ¬cIÿ½fCÿO/ÿœM.ÿ¸`:ÿ»`9ÿ¶]6ÿÀd?ÿ¾`=ÿ›K)ÿžfMÿÊÅÂÿÆÆÂÿÆÄÀÿÊÈÂÿÌÉÂÿËÉÃÿÉÆÂÿÉÆÂÿÆÄÁÿÃÄ¿ÿÄ¿ÿŒˆÿ@;7ÿ"ÿ 7ÿ  ÿÿ6ÿÿ??ÿ ÿÿ`RPÿÁÁ¼ÿÀÁ¼ÿÁÁ¾ÿÃþÿÄÅ¿ÿÅÅÁÿÆÇ¿ÿÄÇÁÿ´¸¹ÿÄÄÀÿÃÄÀÿo}{ÿ50.ÿ50+ÿ61,ÿ61-ÿ60,ÿ7/.ÿJ<]ÿ`I˜ÿfQ´ÿfO»ÿG?~ÿ4/-ÿ71/ÿ81.ÿ931ÿ:41ÿ;50ÿ>:5ÿNCuÿaR¾ÿbS¼ÿMF…ÿEBOÿJIOÿONSÿNO[ÿPPyÿb^Ãÿf`Çÿ‹uªÿ¦ƒ—ÿqaÅÿiXÄÿhYÄÿcXÅÿiYÄÿiXÄÿk\ÅÿmZÄÿiXÄÿiZÃÿ­¨ÌÿÄÃÌÿ¯¡ÿhe–ÿµŒÿ°qVÿÈvÿÃlGÿºgAÿ­]6ÿ¬]6ÿ´`=ÿ¹f@ÿ¶a=ÿ¤S.ÿ±[5ÿ°\5ÿ±^6ÿ¯Y3ÿ´]9ÿ£R,ÿ©sXÿÉÆÂÿÅÅÁÿÃÿÿÊÇÂÿÊÈÂÿÉÉÁÿÉÆÁÿÇÅÁÿÆÄÀÿÅÿÿËÈÂÿs][ÿ>61ÿÿ*ÿÿ‚urÿ¾Á»ÿ¿Á½ÿÁÁ½ÿ¿ÿÄÅ¿ÿÅÅ¿ÿÆÆ¿ÿÁÄ¿ÿ¼¿½ÿÄÅÁÿÅÅÁÿ¡§°ÿ316ÿ50,ÿ5/,ÿ6/-ÿ6/.ÿ50,ÿ4/,ÿ8/1ÿ:2AÿF:\ÿNArÿ5//ÿ61.ÿ70.ÿ:43ÿ<51ÿ:60ÿ?:5ÿUEÿdR¾ÿdTÁÿdUÃÿ[R²ÿUNžÿTPžÿ]U±ÿe\Ãÿd]ÆÿjaÉÿž{”ÿv±ÿr`ÄÿmYÄÿjWÃÿeUÅÿjZÄÿmYÄÿm\ÄÿtfÀÿm^ÂÿfmÃÿW€ÌÿS‚Íÿ]‚­ÿLr«ÿkm“ÿ°nÿÂ~aÿÂkHÿ¼f?ÿ¯^7ÿ±^8ÿÄmFÿÆnGÿ¾f@ÿ£R,ÿ¨W/ÿ¨X2ÿ¢U-ÿ®]3ÿ¦jOÿ‘R1ÿ°‰rÿÉÅÂÿÇÇÂÿÂþÿËÈÂÿÊÈÁÿÉÈÁÿÇÆÁÿÆÄÀÿÄÅ¿ÿÄÄ¿ÿÔÍÄÿ_LHÿ6/,ÿ "ÿ $ÿÿÿ •’ÿ¾À»ÿÀÀ½ÿÁÁ½ÿ¾ÿÄžÿÆÅ¿ÿÅÅÀÿ¼¿¼ÿ¿Â¿ÿÄÅÁÿÃÄÁÿ›”¼ÿ:5Qÿ3/,ÿ3-,ÿ2/*ÿ5.,ÿ5.+ÿ2/*ÿ4.-ÿ3/,ÿ4//ÿ5/.ÿ4/,ÿ5/.ÿ71-ÿ;31ÿ:40ÿ>73ÿ@96ÿWH…ÿiUÂÿhVÆÿgVÅÿiZÄÿhXÅÿfUÅÿfXÈÿfYÆÿf\Åÿl_Æÿ¬€~ÿviÂÿreÇÿq^ÅÿkYÄÿgWÄÿgZÆÿqcÇÿriÅÿos¼ÿaŠÐÿ\ŽÔÿN†ÓÿFƒÓÿO†Áÿ=z¼ÿE{±ÿy‡§ÿ£tsÿ¿jFÿ»e@ÿ´`:ÿ´a;ÿÅmGÿÀiCÿ¹b<ÿ¨Z/ÿ£_=ÿ¦W/ÿžR)ÿ°_5ÿ˺±ÿÁ¸³ÿÀ¹´ÿÈÆÂÿÄÄÂÿÅÆÀÿÊÉÂÿÉÈÁÿÉÇÂÿÈÆÁÿÇÆÀÿÄÅÀÿÆÄÁÿÔÀ¹ÿQA=ÿ'! ÿ -ÿ ÿÿ&ÿº³¯ÿ¿¿»ÿ¿Á½ÿÁÁ½ÿÂþÿÄÄ¿ÿÄÆÀÿÅÅÀÿº¾½ÿÀÂÀÿÃÄÁÿÂÂÁÿŠ}ºÿE;fÿ3.-ÿ2-,ÿ2.+ÿ2-+ÿ2-*ÿ2.+ÿ2,7ÿ0,=ÿ1-0ÿ2..ÿ82Nÿ2-:ÿ61-ÿ:30ÿ;42ÿ=64ÿ=:<ÿ]N›ÿmXÄÿlXÄÿiXÄÿiYÄÿiWÅÿiYÅÿhXÇÿhXÅÿi]Äÿoa¾ÿ²yÿodÇÿqfÇÿocÇÿk^Äÿf\Æÿf^ÈÿogÉÿioËÿ[‰ÓÿZ×ÿV‹ÔÿN…ÔÿA~ÏÿJ‡ÀÿBƒÍÿM…¼ÿHÁÿO{´ÿµiLÿ´a:ÿ¶b;ÿ¸d>ÿÆoEÿÀhAÿ´a8ÿ«b9ÿΧ˜ÿ¬u\ÿ™T0ÿ§Y6ÿ·§´ÿÈÆÃÿÈÈÃÿÈÇÂÿÀÁ¿ÿÊÊÃÿÊÉÂÿÊÈÂÿÉÇÂÿÊÇÁÿÉÇÁÿÉÇÀÿÇÃÀÿ¾¥ŸÿD:5ÿÿOÿ ÿÿ?32ÿÁ¿»ÿ¾¿¹ÿ¿Á»ÿÁÁ¾ÿÂþÿÄľÿÃÄ¿ÿÄÅ¿ÿ»¾½ÿÁÁ¿ÿÃÃÀÿÀÂÂÿyh¹ÿFjÿjW»ÿoYÃÿpZÃÿmYÄÿkXÃÿmXÅÿl[Åÿl\Åÿj[Äÿk]Äÿi©ÿ¤z†ÿocÆÿqdÇÿncÇÿmbÇÿmbÉÿodÉÿmcÉÿZ~ÐÿU×ÿR‹ÖÿQ‰ÕÿA~Óÿ:zÇÿH…Áÿ?€ÅÿI²ÿ@~ÄÿVt¤ÿ¹jHÿ¯`6ÿ³`8ÿ¾i@ÿÆnGÿ¿h@ÿ¦Z6ÿ«pWÿÈ ‘ÿÏüÿ¸¡–ÿ›zsÿw€²ÿÈÇÃÿÊÉÄÿÇÇÃÿÁÃÂÿËÉÄÿËÉÂÿËÈÃÿËÇÂÿÉÇÂÿÈÆÁÿÇÅÀÿÆÅÀÿžƒ~ÿ5/*ÿÿ ÿÿcUSÿ¾¾ºÿ¾¿ºÿÁÀ»ÿÀÁ½ÿÁ¾ÿÄÿÿÄÄ¿ÿÃÄ¿ÿº½»ÿÁ¿ÿÂÂÀÿº¼ÁÿtW¶ÿYDšÿ0,:ÿ1+)ÿ0-(ÿ1-*ÿ3-,ÿH9WÿqR¹ÿrSºÿsS¼ÿqS¼ÿrT»ÿuT½ÿpT»ÿ\H¢ÿ\K¡ÿjU·ÿqZÂÿr[Ãÿp[Äÿq\ÃÿqZÄÿm[ÄÿpZÅÿmZÄÿn\Åÿm]Ãÿn^Ãÿ™rÿo ÿqcÆÿrcÇÿobÉÿobÈÿoaÈÿoaÈÿlaÉÿU{ÐÿOˆ×ÿL‡ÖÿF…Ôÿ8}Óÿ:{¿ÿ>|¸ÿ<}¾ÿE|­ÿSn£ÿeYÿ²dIÿ­_7ÿ²_8ÿÀjDÿÆnHÿ¾h@ÿ§W1ÿŠ\Sÿƈtÿï§ÿ¶°ÀÿÇÆÄÿÈÇÄÿÉÈÄÿÊÈÅÿÈÈÅÿÁÂÀÿÊÈÂÿËÈÁÿÉÆÂÿÈÇÁÿÈÅÀÿÆÅÀÿÄÄ¿ÿËÆÂÿq[Vÿ.(&ÿ ÿ&ÿÿƒwuÿ¼¼ºÿ¼½ºÿ¿À¼ÿÁÁ½ÿÂüÿÃÿÿÅÄ¿ÿ¾Á½ÿ¾¿½ÿÂÂÀÿÁÂÀÿ©§½ÿsT¹ÿsS¹ÿ:3Zÿ-'3ÿ/*,ÿ.*2ÿ.*9ÿN:{ÿtR¹ÿrS»ÿsT¼ÿsU¼ÿuU½ÿsU½ÿtU½ÿsV¿ÿtYÂÿsYÁÿsZÄÿt[Äÿs[Äÿs[ÄÿrZÄÿo[Ãÿp[Ãÿp\Äÿo[Äÿn^Ãÿp_Áÿ®zsÿ~e´ÿraÆÿnaÆÿo`ÆÿoaÆÿoaÄÿpaÇÿnbÈÿfeÉÿQvÏÿH„Õÿ=Óÿ2~Ôÿ9z¹ÿ2s®ÿ3v³ÿBy¢ÿµxÿŽ\mÿZdÿ­^8ÿ±`6ÿ¾h@ÿÅmDÿ½f>ÿªY0ÿ¯d?ÿ¿z]ÿɾ¸ÿ‘·ÿ³µÂÿÉÈÄÿÇÈÅÿÉÈÄÿÄÄÃÿÁÂÀÿÉÈÂÿÇÇÂÿÈÆÂÿÈÅÂÿÉÅÁÿÅÄÀÿÄÿÿȾ¹ÿTB>ÿ)#!ÿ*ÿ ÿÿÿ¤š–ÿ»»¹ÿ½½»ÿÁ¿»ÿÂÁ½ÿþÿÄÄ¿ÿÄľÿ»½»ÿÀÀ¾ÿ¿ÿÁ¿ÿ•‹»ÿsS¹ÿsR¹ÿeJ¨ÿeLªÿ7/IÿcHŸÿkN¯ÿtSºÿtS»ÿtS¼ÿuU½ÿtT½ÿuU½ÿvV½ÿtV¾ÿuZÀÿuYÂÿtYÃÿtZÃÿtZÃÿt[Ãÿs[Äÿr[Ãÿs[Äÿq\Äÿq]Äÿr]ÄÿmÇÿw_¼ÿµ{lÿs`Ãÿr`ÆÿqaÅÿp_Æÿo_Æÿq`¸ÿo]Äÿn`Èÿo`ÇÿgaÇÿKpÍÿ<|Ôÿ0{Ôÿ9~Åÿ(s»ÿ2t«ÿiŠ¥ÿÂqQÿ¸dFÿ{Raÿ§];ÿ±_4ÿ¼e<ÿÄlEÿºd=ÿ¨Y/ÿ¶mHÿÅŸ‘ÿÊÅÁÿÈÆÃÿ¹ºÁÿÉÈÄÿÈÈÅÿÈÈÅÿ½½¼ÿÆÆÃÿÊÈÃÿÇÇÂÿÈÅÂÿÇÅÁÿÆÄÁÿÄÄ¿ÿÄÃÀÿ´¡ŸÿA50ÿÿ Gÿÿÿ%ÿ¼¶³ÿ¼½¹ÿ½½ºÿÀ¿»ÿÂÁ½ÿ¾ÿÿÿ¾ÿ¹¼¼ÿ¿¾¾ÿÁÂÀÿÀÁÁÿl¸ÿtS¹ÿtSºÿtS¹ÿqR¸ÿ[DÿrR¹ÿsR»ÿuS»ÿuS¼ÿwU½ÿwU½ÿuT½ÿuW»ÿvU¾ÿvY¿ÿv\Ãÿv[Ãÿu[ÂÿuZÃÿt[Ãÿt[Äÿu\Ãÿu[Äÿs[Äÿs[Åÿr]Ãÿv_Äÿ{cÄÿ‹h¡ÿ¥u€ÿq]Ãÿr]Äÿq^Åÿq^Æÿq`Çÿp`Çÿo`ÇÿqaÈÿo`Æÿo^Æÿg^ÆÿR|Êÿ1{Ðÿ8Éÿ5{Æÿ?{®ÿ‘”ÿÃmFÿ»e=ÿŸY?ÿYPÿ²_4ÿ¼f>ÿÀi@ÿ¸b;ÿ­_4ÿÆ—ˆÿ·´ÿÃÂÁÿÃÂÃÿÈÈÅÿÊÉÅÿÈÈÅÿÆÇÄÿ½Á¿ÿÈÈÂÿÉÈÂÿÈÇÂÿÈÇÁÿÆÄÁÿÅÄÀÿÅÄ¿ÿÄÄ¿ÿ•€}ÿ92.ÿÿ 3fÿ ÿÿF9;ÿ¾¾ºÿ¼¼¹ÿ¼½ºÿÂÀ»ÿÃÁ¼ÿ½ÿþÿ¿ÿ¸»»ÿÀÀ¾ÿÀÂÀÿ½½ÁÿvZ·ÿtS¹ÿuRºÿsR¹ÿtQºÿuRºÿuR»ÿwS»ÿwSºÿuT¼ÿyU½ÿwU¼ÿxV½ÿwV¼ÿvW¿ÿw[Áÿv\Ãÿu\Âÿv[Ãÿv\Åÿu\Äÿt[Äÿu\Äÿv[Äÿu\Åÿu]Åÿs]Æÿt]Äÿu_Åÿ¢v„ÿlžÿq\Äÿs_Äÿq\Åÿr\Åÿr]Æÿq_Çÿp_Æÿq_Çÿo]Æÿp]Æÿm_Äÿ®´Êÿ~•µÿT{­ÿX{§ÿxkrÿ§†ƒÿÄmFÿ¸b:ÿªY5ÿƒNAÿ°`9ÿ¿jAÿ¼f>ÿ³]5ÿ¨Y4ÿµ‡ƒÿÁ¾¾ÿÉÆÃÿ»¼ÀÿÉÇÄÿÉÈÄÿÉÉÄÿÆÆÂÿ¿ÂÀÿÈÇÃÿÉÇÂÿÇÇÁÿÆÅÁÿÆÄÀÿÄÄÀÿÅÿÿÆÃÀÿr[Yÿ1-*ÿ ÿ ÿÿn^^ÿ»½¹ÿ¼½¹ÿ¾¾¹ÿÀÀºÿÂÀ½ÿüÿÁ½ÿÀÁ½ÿ¸¹¹ÿ¿ÿÀÿÿ¸¹ÂÿsV·ÿsRºÿtR¹ÿtR¹ÿuRºÿuR¼ÿwS»ÿvT»ÿxU¼ÿvU¼ÿwT¼ÿwU¼ÿwU¼ÿwV¼ÿxYÁÿv[Ãÿy\Äÿw[Åÿw[Æÿv]Æÿw\Æÿw\Æÿv]Äÿv]Äÿv]Åÿu\Äÿt]Äÿv^Äÿx`Âÿ±{iÿ}c¸ÿt_Åÿs`Åÿs_Æÿs^Åÿs_Æÿq^Æÿr_Åÿt_Çÿp]Åÿq^ÇÿwjÃÿÁÂËÿ²Ž˜ÿµ|uÿ·€rÿ­whÿÆŠqÿÃlGÿ¶a9ÿ«X2ÿ’Q6ÿ™\WÿÄmEÿ¹dAÿ¨V1ÿV9ÿµz_ÿÉÁ½ÿÉÆÄÿÇÇÃÿÇÇÄÿÈÈÅÿÇÈÅÿÇÇÅÿ¾Á¿ÿÉÇÂÿÉÇÂÿÈÆÁÿÈÅÁÿÅÄÀÿÅÃÀÿÄÂÀÿÈÁ½ÿI:7ÿ+&#ÿ %ÿ-ÿÿÿ‹}ÿº½·ÿº½¹ÿ¾¾ºÿÁÀ»ÿ¿½ÿÁÁ¼ÿÂÁ½ÿ»½ºÿ»½¼ÿÁÿÿ¾Â¿ÿ•‰»ÿtR¹ÿtSºÿuR¸ÿuR¹ÿuSºÿvR½ÿuSºÿvT»ÿvU¼ÿxT¼ÿxT¼ÿvU¼ÿxV¼ÿwV¼ÿv[Áÿu\Âÿx[Âÿw[Âÿw\Åÿx]Æÿw\Äÿw\Æÿv]Åÿv^Äÿv]Åÿu^Æÿt\Ãÿv^Ãÿ†d®ÿ¯xpÿy^Äÿx_Åÿw_Åÿv^Æÿs_Åÿt^Çÿr`ÆÿtaÇÿt^Æÿr^Æÿr\Æÿ‹ƒÄÿ°¯Áÿ|c˜ÿ·Œ•ÿ±l[ÿµ„ÿ¾saÿ·eEÿµ`:ÿªY4ÿ£Y?ÿ€WzÿºiRÿ§]Dÿ¢R)ÿ¬eBÿ¼¢–ÿÄÁ½ÿ¹¹¾ÿÄÆÄÿÇÇÄÿÈÇÄÿÉÈÅÿÇÄÃÿÁÂÀÿÊÇÁÿÈÅÁÿÇÅÀÿÇÄÁÿÅÄÀÿÄ¿ÿľÿ¼®ªÿ4+'ÿ$ÿ'ÿ ÿÿÿ¨ ÿ»¼¸ÿ»¼¸ÿ½¾¹ÿÀ¾»ÿÁ¿»ÿÁ¿½ÿÂÀ½ÿ¸»¹ÿ¼½¼ÿÁÀ¿ÿÀÂÀÿya¶ÿtR¸ÿtS·ÿtS¹ÿtRºÿuRºÿuS»ÿvTºÿtT¼ÿtU»ÿxT¼ÿvT¼ÿxU¼ÿuT¼ÿvW¾ÿv[Áÿx\Âÿy]Âÿz]Ãÿw\Äÿw\Ãÿw\Åÿw]Äÿw^Äÿw^Æÿw^Åÿx^Åÿv^Åÿx^ÃÿpŽÿ›oŽÿu^Äÿv]Åÿv^Åÿu_Æÿs`Æÿu_Æÿt`Èÿt`Èÿu^Çÿs_Èÿr]Æÿ¤¤Æÿº½ÿ®niÿÂyiÿ±fTÿº™“ÿˆd„ÿqczÿodqÿ–[Hÿª[;ÿŒVhÿ¦_bÿ±[1ÿ R'ÿ¹˜ŠÿÆÂ½ÿÇÇÂÿÇÆÄÿÇÅÄÿÇÇÄÿÉÈÅÿÇÇÃÿ¾¿¿ÿÇÆÂÿÇÆÁÿÆÅÁÿÆÆÀÿÆÄÀÿÄÄÀÿÄÂÀÿÃÁ¿ÿ Šÿ+&#ÿÿ9ÿ ÿÿ%ÿ¾¸µÿº»·ÿ»»¹ÿ½½¸ÿ¿½»ÿÁ¿»ÿÂÀ¼ÿÂÀ¼ÿ·º¹ÿ¼½½ÿÁ¿Àÿ¸·¿ÿqSµÿrR¸ÿsR¸ÿsR¹ÿvS¹ÿtRºÿtS»ÿvS¹ÿvTºÿwU»ÿvT»ÿwU½ÿwU¼ÿvV¼ÿwXÀÿw\Âÿv\Âÿy]Äÿy_Ãÿv^Åÿx^Ãÿx_Åÿx_Åÿx_Äÿx_Åÿx_Åÿw_Åÿx^Åÿ{`Ãÿ°zlÿ†f®ÿt^Äÿu_Åÿv^Äÿv]Åÿu_Åÿv_Åÿx_Æÿw]Åÿt\Æÿs]Åÿ}pÁÿÀÂÇÿ¼£ŸÿÀpZÿºlYÿ­gWÿ‚‚¥ÿ-l¬ÿ)p­ÿ%lÿ7iÿ`aÿ¢]PÿƒSmÿ®Z4ÿŸV-ÿÍ»³ÿÇÅÂÿÇÆÃÿÈÇÃÿÈÇÄÿÆÇÄÿÈÇÅÿÅÅÃÿ»¿¾ÿÈÇÁÿÇÅÁÿÅÅÁÿÅÅÀÿÅÄ¿ÿÄÄÀÿÂľÿÄþÿ~khÿ'# ÿÿ*Uÿ ÿÿI<>ÿ¼»¸ÿ¹º·ÿº»·ÿ½¾¸ÿ¿¾¹ÿ¾»ÿÁ¿»ÿ¿¾¼ÿ´·¸ÿ¾¿½ÿ¿¿¿ÿ¦¢»ÿqQ¶ÿqQ·ÿrP·ÿsQ¸ÿuR¹ÿuS¹ÿuRºÿuSºÿvT¹ÿwT¼ÿwT»ÿxT»ÿxT»ÿxU¼ÿw[Âÿu]Âÿx]Åÿz\Ãÿx^Ãÿz`Äÿy_Æÿx`Åÿw_Åÿu`Äÿw_Çÿx`Æÿu`Åÿy_Äÿ€d·ÿ®xsÿyaÂÿw_Æÿw_Æÿw_Äÿu^Äÿu_Äÿx`Åÿx`Çÿv_Æÿv]Æÿs^Åÿ›ÆÿÂÃÈÿ¹‰ÿÀvgÿ³l]ÿxoÿ*vÈÿ&s¼ÿ'p«ÿ-q£ÿ&k“ÿ,k–ÿklŒÿ|Qpÿ›TDÿ¤W1ÿ¼­¤ÿÈÅÁÿÇÆÃÿÇÈÃÿÇÈÃÿÈÈÄÿÈÈÅÿÂÃÁÿºÀ¿ÿÉÆÀÿÆÆÁÿÆÄÀÿÄÅ¿ÿÃÃÀÿÄÿÿ¿ÿÆÄ¾ÿ[HEÿ$ÿ ÿ* ÿÿj__ÿº··ÿ¹¹¶ÿ¹»·ÿ»¼¸ÿ½¼¹ÿ¿¾ºÿÁ¾¼ÿ¼½ºÿ·¹¸ÿ½¾¼ÿ½¿¼ÿ–޹ÿnP´ÿmL³ÿfIªÿlL±ÿqO¶ÿsR¹ÿtR¸ÿuQ¹ÿuSºÿwS»ÿwTºÿwT»ÿwT»ÿvU½ÿu[Äÿt\Ãÿv\Äÿw]Åÿw^Ãÿy_Äÿx`Åÿx_Äÿy_Åÿy_Åÿy`ÅÿwaÆÿvaÆÿy_Åÿ“l˜ÿ™n•ÿy`Åÿx`Çÿw_Çÿv`Åÿv_Æÿx`Èÿw`Æÿv_ÄÿxaÅÿv]Æÿu_Âÿ·¸Éÿ£ËÿPx¶ÿstŸÿlmÿ+v¼ÿ&vÈÿ"p³ÿgœÿ!h–ÿ%f‘ÿ'n¥ÿ/sºÿjS€ÿ…NHÿ¢_>ÿÇÁ½ÿÊÅÁÿÇÅÂÿÇÆÃÿÈÆÄÿÈÇÄÿÇÇÃÿÃÅÂÿ¼À¾ÿÆÄÁÿÅÅÁÿÆÄÁÿÃÄÀÿÅÿÿÃþÿÀ¾ÿƾ¹ÿ6)'ÿ"ÿ ÿ)ÿÿÿŒ‚ÿ¹¸¶ÿº¹¶ÿ¼º·ÿº»¸ÿ½½¹ÿ¾¾¹ÿÀ¾»ÿ¸¹¸ÿº¼ºÿº¼¼ÿ»½½ÿ‚pµÿmN¶ÿqO·ÿhK®ÿqP¶ÿnN¶ÿpOµÿtR¹ÿsRºÿrQµÿvSºÿuT¹ÿvTºÿxT»ÿwT¼ÿuYÁÿw]Ãÿw^Äÿ{dÅÿ‚qÄÿzbÅÿy`Æÿy`Æÿ{cÅÿx`ÄÿyaÄÿu`Äÿw`Æÿz`Ãÿ«wwÿ…e¶ÿu`Åÿw`ÆÿxaÆÿu_ÆÿuaÇÿv`ÇÿvaÇÿv`Æÿx`ÇÿuaÄÿvdÁÿº´ÂÿB~Èÿ*xÉÿ*yÂÿ,x»ÿ'vÇÿ*xÉÿ(t»ÿ'p­ÿ(o§ÿ)p©ÿ(r²ÿ)s»ÿa]ÿ{JNÿ•^BÿÇÄÀÿ´‡xÿÇ¿ÿÆÅÃÿÅÅÂÿÇÇÃÿÆÇÃÿÀÂÀÿÃÃÀÿÅÄÀÿÅÆÀÿÄÄ¿ÿÃÃÀÿÃÁ¿ÿ¾ÿÁÁ½ÿ±¤Ÿÿ(!ÿÿ%ÿ ÿÿÿ«¢¡ÿº¹µÿ¸¹¶ÿ¹º¶ÿ»»·ÿ¾½¸ÿ¿½¹ÿ¿¾¹ÿ·¹·ÿ¹»¸ÿ»º»ÿµ·¼ÿpT²ÿoOµÿpNµÿlK²ÿpN³ÿsO·ÿpP¸ÿrO¶ÿsQ¸ÿfIªÿvR¶ÿnO³ÿuS¹ÿvTºÿuT¼ÿŠwÅÿŽÄÿyeÂÿ†qÇÿˆ|ÄÿxhÁÿ…|ÅÿŒ‚Åÿ‘‰ÆÿŒƒÄÿŠÇÿ‚vÆÿ„sÈÿ‘w²ÿ­z{ÿzbÄÿv_ÅÿvaÆÿwaÅÿw_Æÿw`Çÿw`ÈÿvaÆÿw`Æÿ|hÆÿ…vÅÿ~kÅÿµ°Êÿf‹ºÿ1zÄÿ*yÅÿ*v»ÿ"vÈÿ(xÊÿ)v»ÿ)q¬ÿ*p¨ÿ)q¯ÿ%p²ÿ'q²ÿŠ]\ÿ{KLÿ“gQÿÃÃÀÿÅ¿¼ÿÅÅÂÿÅÅÂÿÅÆÃÿÆÇÃÿÅÅÂÿ¼À¾ÿÅÆÀÿÅÄÁÿÅÄÀÿÄÄ¿ÿÂÿÿ¿ÿ¿ÿÂÀ¾ÿ’}ÿ$!ÿÿ<ÿ ÿÿ%ÿ¼¸´ÿ¸¸µÿ·¹µÿ¹¹¶ÿ»º·ÿ¼¼¸ÿ½»¹ÿ½¼¹ÿ¶·¸ÿ¸¹¸ÿ¸ººÿ ·ÿoN´ÿoMµÿpL´ÿoM´ÿlK®ÿqN¶ÿpO·ÿnN²ÿoN´ÿkM²ÿrPµÿgJ©ÿsS·ÿoN±ÿrR´ÿ‚kÀÿ}Çÿ‚lÇÿeÄÿ“‚Çÿ“‚Éÿ–†Ìÿ“†ÇÿŒ€ÅÿŒ|ÈÿÈÿŠ}Çÿ†wÅÿ©€‹ÿ˜rœÿvbÆÿuaÆÿt`Çÿu_Åÿs^Ãÿu^Åÿt`Çÿt_Æÿw`Æÿ•‰Éÿ”†Êÿ}dÅÿŸ”Ãÿ¯~xÿx}ÿUn™ÿ-u¹ÿ'wÆÿ+xÄÿ*u¹ÿ(p¨ÿ'p¤ÿ#p¯ÿ'oµÿJgŠÿ¤W5ÿŒL5ÿ‘rlÿÂÀÁÿÃÃÁÿÃÃÂÿÄÄÂÿÄÄÂÿÅÅÂÿÂÂÀÿ½À¿ÿÄÅÁÿÄÅÁÿÄÄÀÿÃÿÿ¿ÿ¿ÿÂÁ¾ÿÃÀ¾ÿo^[ÿ!ÿÿU ÿÿJ>?ÿ¸¹³ÿ··´ÿ·¹´ÿº¹µÿ¹º·ÿ¹»·ÿ»»·ÿ»½¸ÿ³¶¶ÿ¹º¹ÿ¸º¸ÿ ¢·ÿmR³ÿmQ°ÿlL°ÿjI°ÿeF¨ÿnM´ÿoM´ÿqO¶ÿpN·ÿqQ¸ÿuQ·ÿlM°ÿpN³ÿmN±ÿmM®ÿrVºÿx\Âÿv^ÅÿsZ¿ÿqY½ÿu^Äÿu]¿ÿ€lÄÿƒËÿ†yÇÿ’‡Çÿ–‹Çÿ‘~Ãÿ®zsÿ}c¾ÿvbÅÿvaÇÿuaÈÿt`Èÿs`ÇÿsaÆÿvaÅÿsaÆÿvbÆÿrÅÿwÂÿ‡ƒÂÿ¨Ÿ½ÿ¼obÿÁ{oÿ¥iaÿ}…ÿhq‘ÿVq›ÿ@r¤ÿ7n™ÿ8i’ÿ?h‘ÿyekÿ V1ÿ O'ÿ–K#ÿ€^Šÿ¿¾ÂÿÃÂÀÿÃÂÂÿÂÃÁÿÃÃÀÿÅÃÂÿÂÀÀÿ¼¿¾ÿÅÅÁÿÅÄÁÿÅÄÀÿÃþÿ¿ÿ½ÿÂÀ½ÿÆÀ¿ÿM==ÿ#ÿ ÿDÿ ÿÿlbbÿ¶·³ÿµ¶³ÿ··µÿ¹º´ÿ¹¹¶ÿº¹·ÿºº·ÿ¶¹·ÿ¶¸·ÿ¸»¹ÿ¸º¹ÿ±µºÿ~u¬ÿ¢¢¸ÿ‘Œ³ÿ€y¯ÿiY©ÿeO«ÿjM°ÿpN¶ÿoP¸ÿrQ¸ÿtQ·ÿtQ¸ÿsR¸ÿsR¹ÿrP·ÿuXÀÿuYÃÿsZÁÿnX»ÿpZ»ÿt_ÅÿmXºÿnX»ÿxbÆÿ€lÈÿ}hÆÿŽ€ËÿŠj¨ÿ sÿubÇÿxaÇÿwaÇÿs`Çÿt_ÆÿtaÈÿubÈÿubÈÿtbÆÿ|uÄÿ¦¬Çÿ¹ÁÊÿ¼ÃÊÿŒ…Ÿÿ¾pcÿÀvjÿ¨jbÿ•Žÿ¾n`ÿªdZÿ‰\`ÿhZhÿ]Zpÿobyÿ™efÿ U2ÿM%ÿ–H!ÿˆiÿ®¨¿ÿÀÀÀÿÂÁÁÿÃÃÀÿÃÃÁÿÄÂÂÿ¾À¿ÿÀÀ¿ÿÅÄÀÿÄÄ¿ÿÂÄ¿ÿ¿ÿÁÁ¿ÿÀÀ¾ÿÁÀ¼ÿÁ·³ÿ4)(ÿÿÿ+ÿÿÿ†„ÿ´·³ÿ´¶³ÿ¶·´ÿ¶·µÿº¹µÿ¹¹¶ÿ»»¶ÿ´¶´ÿ·º·ÿ·¹¹ÿ´·¶ÿ¸¹¹ÿ¸ººÿ³¶¸ÿ³¶¸ÿ¸º¼ÿ¸¹¿ÿ§«ºÿ”•µÿ…~³ÿuh°ÿoY¯ÿrQ¶ÿsQ·ÿtQ¸ÿsQ¹ÿqQ¸ÿuW¿ÿt[ÂÿuZÁÿrZÁÿiS´ÿs]ÂÿoY¾ÿsaÇÿuaÊÿtaÉÿxaÉÿxdÈÿ¤v†ÿ…h¸ÿtaÆÿuaÅÿscÄÿtdÃÿsaÃÿuaÇÿu_ÇÿvaÇÿ}sÃÿ²»Êÿ¿ÆÉÿ¾ÅÉÿÁÄÉÿ¾…~ÿÀocÿ¸k_ÿ²†‚ÿ¿qÿ»kYÿ…cmÿ*iœÿi—ÿj¢ÿ m¯ÿ,n·ÿMj“ÿ†TGÿ’L)ÿ®¡·ÿŽ{¹ÿ¾¿ÀÿÀÁÁÿÂÃÀÿÃÃÀÿÃÁÀÿ»¼½ÿÃÄÀÿÃÃÀÿÄÿÿÁ¿ÿÂÁ¿ÿÂÀ¾ÿÀÀ½ÿÁÀ¼ÿ©™–ÿ)#!ÿÿ+ÿÿÿÿ¬¥¤ÿ´´²ÿ³¶³ÿ´·´ÿµ¸µÿ¶¸µÿº¹¶ÿº»¶ÿ³¶µÿ¶º·ÿ¸»¹ÿ´º¶ÿ´´´ÿ·¶µÿº»ºÿ¶¸¶ÿº¼»ÿ»¼»ÿ»»¼ÿ¼½½ÿºº¼ÿ¸µÁÿ–†¿ÿrO¶ÿsQ·ÿrP·ÿsO¹ÿqQ¸ÿsWÁÿr[Ãÿq[Âÿu\Åÿr[Ãÿr_Æÿq]ÂÿnYÁÿu_ÇÿucÉÿueÊÿ|i½ÿ§~ƒÿxsÁÿ‚„Åÿ—žÆÿ§¯Éÿ­¶Êÿ¦­Æÿ‡‰ÂÿzvÀÿƒ€Ãÿ¥©Çÿ¾ÅÌÿ½ÅËÿ¾ÆÉÿŽÀÿ»qfÿ¾sgÿ·iZÿ½‘Šÿ»kWÿ°aQÿPgŠÿj©ÿh›ÿj©ÿm³ÿm³ÿ!n¤ÿ>l•ÿtgkÿ¿¼Àÿya³ÿ°¨Àÿ¿ÀÁÿÂÂÀÿÂÂÀÿÀÀ¿ÿ»¿½ÿÃÄÀÿÅÃÀÿÄÿÿÄÁ¿ÿÂÀ¾ÿ¿½ÿÀ¿½ÿ¿À»ÿ‡wuÿ" ÿÿ$Hÿ ÿÿ.&'ÿ¶µ²ÿ´³²ÿ³µ³ÿµ¶³ÿ··´ÿ··µÿ·¹´ÿ¸º¶ÿ±µ³ÿµ¹·ÿµº¹ÿ´¹¶ÿ¯¯®ÿ´¶´ÿ¸º¸ÿ³´´ÿ»»»ÿ¹º¹ÿ··µÿ¼½»ÿº½¼ÿކ¶ÿqQµÿoR³ÿpQ·ÿrP·ÿrQ·ÿrP¸ÿtV¼ÿp`Âÿq`Âÿr`Ãÿr]ÄÿraÇÿscÇÿrdÄÿsjÂÿ€Ãÿ“˜Æÿ¬•™ÿ½±®ÿ¹ÅÑÿ»ÆÏÿ½ÆÏÿ½ÇÍÿ½ÇÍÿ¼ÅÉÿ½ÅÌÿ»ÆÍÿ¼ÃËÿ¼ÃÊÿ°­Éÿ¾ÄÉÿ¿ÄÉÿ¤¤ÿ¸ohÿÁ€wÿ³j_ÿˆ}ÿ¼m^ÿ¤`ZÿFfŽÿh§ÿgœÿk­ÿl¹ÿl­ÿ m¢ÿ'pÿ3t ÿ–©Ãÿ—‹¸ÿ‚l¹ÿ¿¼ÃÿÁÁÁÿÁÁÀÿ¿Á¿ÿ»½½ÿÿÿÄÁ¿ÿÂÁ¿ÿÂÁ¾ÿÁÀ¾ÿ¿½ÿÀ¿½ÿÁ¾¼ÿcSRÿÿ ÿ ÿÿRGIÿµ´°ÿ²³±ÿ³µ²ÿµ´´ÿµ¶´ÿ·¸´ÿ¶·´ÿ¶¸´ÿ¯´²ÿ·¸¸ÿ·¸¸ÿ¶º·ÿ­¯­ÿ¹º·ÿ¶·µÿ´´³ÿ¹º¹ÿ³²²ÿ´³°ÿ´¶´ÿ¾½ºÿ©­¸ÿ•“¶ÿ§¨ºÿ››·ÿ}q°ÿ™–¸ÿ–‹ºÿ›œºÿ¥«Ãÿ§¯Åÿ£«Çÿ—žÄÿ€Äÿ™¡Éÿ¦²Ëÿµ¿ÎÿºÄÎÿÀÂÉÿ·’ƒÿÀÄÈÿ¼ÄÎÿ½ÆÎÿ¼ÇÏÿ¼ÇÐÿ»ÅÍÿ¼ÅÌÿ¼ÅÌÿ¾ÅÍÿ½ÃÉÿ²°ÇÿŠxÅÿ½ÁÌÿÂÂÇÿ¾„|ÿ´j\ÿ¸l]ÿ³h]ÿ»m_ÿºiZÿ”SIÿC_ÿc”ÿgœÿi¥ÿ` ÿf¤ÿ#n ÿ'p›ÿ+r¡ÿ^Áÿº¶Àÿv^´ÿ©©½ÿ¿ÂÁÿÁÂÁÿÁÁ¿ÿ»½ºÿÃÿÿÃÁ¿ÿÃÀ¾ÿ¿Á½ÿÁÀ½ÿÁ¿¼ÿÀ¾»ÿý»ÿ>/2ÿÿ ÿ:ÿ ÿÿuiiÿ²²¯ÿ±³±ÿ²´²ÿ´´³ÿ³µ´ÿµ·²ÿ··´ÿ±³²ÿ³´´ÿ²´µÿµ¶µÿ¶¹µÿ¯³±ÿ¹º¹ÿ´·µÿ³³³ÿ¸º¹ÿ°³±ÿ²²°ÿ´¶¶ÿº¸¶ÿ¸··ÿ³µµÿ¹¹ºÿ¼¼½ÿº»½ÿ¼¼½ÿ‘‹±ÿÀ¿¿ÿ½ÂÂÿ½ÃÈÿ¼ÂÇÿ¸ÂÈÿ®µÇÿ½ÅËÿ½ÅÍÿ½ÅÎÿ½ÅÏÿ½¯®ÿº¬«ÿ¾ÆÍÿ¼ÇÑÿ¼ÇÎÿ»ÆÐÿ¼ÆÐÿ»ÅËÿ¼ÅÍÿ¼ÅÎÿ¾ÅÌÿ½ÃÊÿ¯¶Çÿ{nÃÿ³´Êÿ´±¸ÿ®wtÿ¬d\ÿ¤[Rÿ°cTÿ¸gSÿ«]Hÿ•L0ÿ•[Jÿc‘ÿb”ÿb™ÿf²ÿjªÿ$o ÿ,ržÿ/v»ÿ•¯ÁÿÀ¿Àÿ«¬½ÿ¶º¿ÿÁÂÁÿÁÂÀÿ½¼¼ÿ¿À½ÿ¾ÿÂÀ¾ÿ¿½ÿÀÀ½ÿÀÀ¼ÿÀ¾¼ÿ¾½ºÿ·ªªÿ(ÿÿ$ÿ&ÿ ÿÿ•Љÿ±±¯ÿ±°°ÿ²³°ÿ³´²ÿ´´³ÿµµ´ÿ··´ÿ¯³±ÿ®±±ÿ¯±±ÿ²´´ÿµ·µÿ¶¹·ÿ·¹¸ÿ¶¹¸ÿ¶·¶ÿ¹»¹ÿ¶»¸ÿ¸º·ÿ¹º¹ÿ´·µÿ··µÿµ¸¸ÿ»¼½ÿ¼¾¼ÿµ´µÿº¹·ÿ¸¹¸ÿ¹»¸ÿ¿À¿ÿº¼Áÿª¦Æÿ·¼Êÿ»ÄËÿºÆËÿ¼ÅÌÿ¼ÅÌÿ½ÄËÿµ•‰ÿ¿ÃÉÿ»ÄÍÿºÆÐÿ»ÆÏÿ¼ÄÍÿ¼ÅËÿ¼ÄÈÿ½ÄÌÿ¼ÄÌÿ¼ÄËÿ»ÅÊÿ»ÃÊÿ’‰Äÿ§£Åÿ¾ÀÇÿ¹´¶ÿ“\Zÿ•ULÿ§]Lÿ²bPÿ¢R9ÿN(ÿ£S0ÿ4fŽÿi§ÿh¯ÿh·ÿh©ÿ4k’ÿjp{ÿ¢±¹ÿ¾ÀÀÿÀÁ¿ÿÁ¿ÿÀ¿ÿÁÂÀÿÀÀ¿ÿ¸ººÿÂÁ¿ÿÂÀ¾ÿÀÁ½ÿÁÀ½ÿ¿¿¼ÿ¿¿¼ÿ¾½»ÿ¿½¹ÿ™‰‰ÿÿÿ<ÿÿ ÿÿ®§¥ÿ¯°®ÿ°±¯ÿ±³¯ÿ²´±ÿ³´´ÿ¶µ³ÿ¶¶´ÿ¶·´ÿ·¸´ÿµ¸´ÿ±´²ÿ¯²±ÿ¯²²ÿ±²³ÿ´´µÿ¸¹·ÿ¸º·ÿ¹»¹ÿº¼ºÿ»½»ÿ½¾½ÿ¾¾½ÿ¼¾½ÿ»¼ºÿ¾¿½ÿ¶¶¶ÿ·¸·ÿµµµÿ¹»¹ÿº»ºÿ²¸½ÿšž¿ÿ²¶Ãÿ¹ÀÆÿ¸ÂËÿ»ÅÎÿ»ÅÐÿ¼µ¸ÿ¸§¤ÿ»ÆÐÿºÆÑÿ¿ÏÜÿ»ÌÛÿºÇÕÿ»ÅÏÿ¾ÃÊÿ¼ÄÌÿ¼ÅÌÿ»ÄÊÿ»ÄÊÿ»ÅËÿ—•Æÿ§¨Éÿ¼ÃÈÿ½ÁÆÿ’abÿQIÿ•RHÿJ9ÿŒ?ÿ¨S)ÿ§S*ÿfYaÿ"h¥ÿi·ÿj·ÿ4g™ÿ„R<ÿ©|hÿ½¿½ÿ¿À¿ÿ¿À¿ÿ¿Â¿ÿÀ¿ÿÀÂÀÿ¿¿¿ÿ¸ººÿÂÀ¾ÿ¿À½ÿ¿À½ÿ¿À¼ÿÀ½»ÿ¾¾»ÿ¼½ºÿ¿¼ºÿtfhÿÿ ÿ/Oÿ ÿ ÿ2)*ÿ´±¯ÿ®®¯ÿ¯±®ÿ°²°ÿ±³±ÿ²´²ÿ¶µ´ÿµ·³ÿ¸µµÿ¹·µÿ·¹´ÿ¹¹µÿ·¹µÿ¸¸¶ÿ¸¸¶ÿ¶¶µÿ²´³ÿ²µ³ÿ³´µÿ²µ¶ÿ¸º¸ÿ¹¼¼ÿ¼¼»ÿ½¾¼ÿ½¿¾ÿÀÀ¾ÿ¹º¹ÿ¾À¾ÿ½¿¾ÿ¸º¹ÿ¾¾½ÿ¯§ºÿ«ªÂÿ®·Àÿ²¹Ãÿ³¼Äÿ¼ÄÌÿ¼ÅÑÿ¸££ÿºÃÍÿ¹ÆÑÿºÇÓÿÁÓáÿºÍÝÿ»ÇÖÿ»ÄÏÿ»ÄÎÿºÅÎÿ»ÅËÿºÃÌÿ¹ÀÆÿ»ÃÉÿ­´Æÿ¬³Æÿ½ÃÉÿ¿ÃÇÿŽtxÿˆPMÿ‰LFÿŠA(ÿŠ=ÿ¢P'ÿ£N%ÿ™L'ÿxYTÿZc~ÿl\iÿr]lÿeXhÿ’†˜ÿ¹µ»ÿ¾¾¿ÿ¾À¾ÿÁÀ¾ÿÀÁ¿ÿÀÀ¿ÿ¿¿Àÿ·¹¹ÿÀÀ¼ÿ¾¿¼ÿ½¿½ÿ¾¾¼ÿ½½»ÿ¼»»ÿ½¼ºÿÀ½ºÿREEÿÿ ÿU ÿ ÿVKMÿ°¯¬ÿ¯¯®ÿ®°®ÿ¯²¯ÿ°³°ÿ±´±ÿ³µ³ÿ´¶³ÿ¸¶´ÿ¸¶µÿµ·´ÿ·¸µÿ·¸µÿ¸¹¶ÿº¹¶ÿ»¹·ÿ»¹¸ÿ»¼¸ÿ»¼¸ÿ¶º¹ÿ±¶µÿ²·´ÿ³¶¶ÿµ¶¹ÿ·¹¼ÿ¼½½ÿ½¾½ÿ½¾½ÿ¿À½ÿÀÀ¾ÿÀÀ¿ÿŽ‹°ÿµ´¾ÿ³ºÁÿ²¾ÈÿºÃÌÿ»ÄÌÿ»ÃËÿ¶¹¼ÿ¹ÆÐÿºÆÒÿ»ÈÕÿºÉØÿºÉÖÿºÈÕÿ»ÄÎÿ¹ÅÐÿºÄÎÿ»ÄÌÿ»ÄÌÿµ¾Çÿ·¿Èÿ¸ÀÈÿ¶½ÅÿºÁÆÿ¼ÀÆÿµº¾ÿ€‚ÿ„aXÿˆR9ÿ‰=ÿ®X.ÿ­T.ÿK$ÿ­U/ÿžaWÿHd•ÿ!fœÿgŸÿ jÄÿVÆÿ²·Âÿ½½¿ÿ½¿¾ÿÀÀ¾ÿ¿¿¾ÿ½¼¾ÿ¹»¹ÿ¿À¼ÿ¾¿½ÿ½¾¼ÿ¼½¼ÿ¼¼»ÿ¿¼ºÿ¼»ºÿº¶ÿ.#%ÿÿ ÿ?ÿ ÿÿukmÿ®®¬ÿ°®®ÿ°°®ÿ°±¯ÿ±²¯ÿ²³±ÿ³µ²ÿ³µ³ÿ´µ³ÿ¶·µÿµ¶µÿ·¸´ÿ¶¸¶ÿ¸¹µÿº¹¶ÿ»¸·ÿ»º·ÿ¼º¹ÿ½¼¸ÿ¾¼¹ÿ¼½ºÿ½½¹ÿ¾½ºÿ»¼»ÿ¶¸¸ÿ´·¶ÿ¶·¸ÿµ¸¹ÿºººÿ¼¾½ÿ½½¾ÿ¾½¾ÿ¿¿¾ÿ¼¿Àÿ¼ÂÉÿ¼ÂÌÿºÅÍÿ»ÅÏÿºÅÎÿ»ÅÎÿ½ÄÌÿ»ÅÎÿ»ÇÏÿºÆÐÿ»ÅÐÿºÄËÿ¹ÅÑÿ¼ÅÏÿ»ÄÏÿºÄÎÿºÂÌÿ²¼Æÿ·¾Çÿµ½Äÿ¹ÁÆÿ´ºÀÿº¼Àÿ¾¾¾ÿ¾½ºÿtcÿˆ?ÿ±Z/ÿ«S+ÿK$ÿ¬V/ÿ‰`bÿg¨ÿe•ÿešÿgÃÿfËÿW…Èÿº»Àÿ»¾½ÿ¾¾¼ÿ½¾½ÿ··¸ÿ¾¾¼ÿ¿¿»ÿ¾¾¼ÿ¾½»ÿ¼¼ºÿ¾»ºÿ½»¹ÿ»»ºÿ« žÿÿÿ)ÿ %ÿ ÿÿ’ŠŠÿ­­«ÿ®­­ÿ°®®ÿ¯¯®ÿ¯±¯ÿ°³°ÿ±³±ÿ³´²ÿ´µ³ÿ´¶´ÿ´¶µÿ¶·µÿ¶·µÿ¶¹µÿ¹¸¶ÿ¹¸¶ÿº¹·ÿ»º¸ÿ»º·ÿ¼¼¹ÿ¼½ºÿ¾½¹ÿ¾½ºÿ¿¿¹ÿ¿¾»ÿÀ¾»ÿ¾¿¼ÿ½¾»ÿºººÿµ¸·ÿ¶·ºÿµ·¹ÿ¶¸¹ÿ½½½ÿ½¿¿ÿ»ÁÈÿ»ÂËÿ»ÃÍÿ¼ÃÏÿºÅÏÿ½ÅÌÿ½ÆÎÿ»ÇÎÿ¼ÅÏÿºÄÌÿ¹ÄÊÿºÃÍÿ¹ÃÌÿ¹ÂËÿµ¼Æÿ¶¿Æÿ´½Ãÿ±¹Àÿµ¾Äÿ¼ÁÄÿ¸½Áÿ½¾¾ÿ¿¾½ÿ¿¾¼ÿžŠ€ÿ…H)ÿ´[2ÿ¨Q(ÿŸN%ÿ´^6ÿ¬^Gÿ#c”ÿd‘ÿe¥ÿeÉÿdËÿjÇÿ¤°Âÿ¼¼½ÿ½½¼ÿº¼¼ÿ¶·¹ÿ¿¾»ÿ½¾ºÿ½½ºÿ½¼ºÿ¼»¹ÿ»»¹ÿ¼º¹ÿºº¸ÿ‹||ÿÿÿ Kÿ ÿ ÿÿ¬¤£ÿ­«ªÿ®¬¬ÿ¯®®ÿ°¯®ÿ¯±®ÿ¯²®ÿ°²±ÿ²³±ÿ²´³ÿ³µ³ÿ¶µ´ÿµ·³ÿµ·µÿ¶¸¶ÿ¸¸µÿ¹¸¶ÿº¸¶ÿ»º·ÿºº·ÿºº¹ÿº»¹ÿ¼½¹ÿ»¼¹ÿ¼¼¹ÿ¾½ºÿ¾½ºÿ¾¿¼ÿ¾½¼ÿÁ¾¼ÿ¾¿¼ÿ¿¿¼ÿ¾¾½ÿº½ºÿ¶¹¸ÿµ¹¸ÿ³¸¼ÿ³»Äÿ¶ÀÉÿ¹ÁÊÿ¹ÂÊÿºÂÉÿ¼ÅÌÿºÆÌÿºÄÌÿ»ÄÊÿ½ÅÎÿ¼ÄÏÿ»ÄÍÿ¹ÃÌÿ²¼Æÿ´¼Äÿ°¹Âÿ°¹Àÿµ¾Ãÿ½ÁÃÿ¾¿¿ÿ¿À½ÿ¾¾¼ÿ¾¾¼ÿ»½¼ÿ¢“ˆÿªV3ÿ¤O)ÿ£O'ÿ¸_8ÿ€`lÿc”ÿcÿd®ÿ dÈÿ bÈÿ dËÿ}œÂÿ¹»»ÿº»»ÿ¹º»ÿ¶·¸ÿ¾¾»ÿ¼½ºÿ»»ºÿ¼»¸ÿº¹¸ÿº¹¸ÿ»¹·ÿ¼º¸ÿiYZÿÿ ÿ$Hÿ ÿ ÿÿD88ÿi[Zÿÿ®¢Ÿÿ·°­ÿ²°­ÿ²²­ÿ²±°ÿ³³°ÿ³³±ÿ²³³ÿµ´´ÿ³µ³ÿµ¶µÿ··µÿ·¸µÿº·¶ÿ¹¸¶ÿ¹¹¶ÿº¹¹ÿ»º¸ÿ¹º¸ÿº¼¸ÿº»¹ÿ»¼¹ÿ»¼ºÿ½¼ºÿ½½»ÿ¾¼¼ÿ½½»ÿ½½¼ÿ¾¾»ÿÀ¾¼ÿÀ¾»ÿÁ¾»ÿÁ¿»ÿ¿¿¼ÿ¼¾½ÿ¸¾¿ÿ´¾Ãÿ´¾Æÿ³½Åÿµ¿ÆÿºÃÊÿ¹ÂËÿ¹ÂÈÿ¹ÃËÿ»ÂÌÿ»ÃÊÿ¹ÃÊÿ¸ÁÇÿ·¿Æÿ¹ÁÇÿ¹¾Ãÿ¹¼¾ÿ¼¼¼ÿ¿¿¾ÿ¿¿¾ÿ½¿¼ÿ½¿½ÿ»¿¼ÿ½»»ÿ•]Eÿ™F!ÿ¢N(ÿ³[5ÿPb‘ÿc”ÿb‘ÿa´ÿ cÈÿ aÇÿcÈÿ†¢¾ÿ·¹»ÿ·º»ÿ¹¼»ÿ´¶µÿ»¼ºÿº»¹ÿ»»ºÿ»º¹ÿº¹¸ÿ¸º·ÿº¹·ÿ¿»¸ÿC56ÿÿ ÿ"ÿ ÿ ÿ ÿ ÿÿÿ5,+ÿ`RRÿ†vuÿ¦™–ÿ»±¯ÿ¸´°ÿ²³²ÿµ´²ÿµµ³ÿµµ´ÿ¶¸³ÿµ¶µÿ¹¶¶ÿ¹··ÿ¸¸·ÿ¸¹·ÿ»¹¸ÿ¹º¸ÿºº¸ÿ¹»¸ÿº¼ºÿ¹»ºÿ¼¼¹ÿº¼ºÿº¼»ÿ¼½»ÿ½½»ÿ¾¼¼ÿ¾½»ÿ½½»ÿ¾¾»ÿ¾½¼ÿ¾¿¼ÿ¾¿¼ÿÀ¾¼ÿ¿¿½ÿÀÀ¿ÿÀÁÂÿ¼ÁÅÿµ¾Äÿ´¼Ãÿ´½Äÿ³»Æÿµ¾Åÿ¹ÁÇÿ¹ÁÆÿ»ÁÄÿ¾ÁÂÿÀÁÀÿ¾¿¿ÿÀÀ¾ÿ¿À¾ÿ¿¿¾ÿ¾À½ÿ¾¿¾ÿ¾¿½ÿ½¿½ÿÀ½¼ÿ›ˆ~ÿzI3ÿ‰]Fÿ¥‡yÿLt¢ÿc¤ÿb¨ÿcÆÿdÇÿdÀÿ^‘»ÿ±·»ÿµ¹¸ÿ¸ººÿµ·¸ÿ·¸·ÿº»¸ÿ»»¸ÿºº¸ÿ¹¸¸ÿ¹¸·ÿ¸··ÿ·¸·ÿ·¯­ÿ!ÿÿ %ÿ ([ÿ>ÿ,ÿ !ÿ ÿ ÿÿÿÿÿÿ+"#ÿSFDÿ{klÿŸŽŒÿº®«ÿ½¶´ÿ¹·²ÿ¶·´ÿ·¶µÿ¸¶¶ÿ¹¸µÿ»¸·ÿ¹¹¸ÿ¹º¸ÿ¸ººÿ»»¸ÿ»»¹ÿº»ºÿ»»ºÿ»¼ºÿº¼ºÿ¼¼ºÿ½¼»ÿ¼¼»ÿ¼¼ºÿ»¼»ÿ»¼¼ÿ»¼½ÿ½½½ÿ½½½ÿ¾¾»ÿ½½½ÿ¾¾¾ÿÂÁ½ÿÀÁ¼ÿ¾¾¾ÿÀ¿¾ÿ¿¿¿ÿ½¾¾ÿ·½½ÿµ¹¼ÿ´¸ºÿ·¸¸ÿ·¹¹ÿ¼¼»ÿ¾¼½ÿ¿½¼ÿ½¾¼ÿ¾½½ÿ¿¾½ÿÀ¿½ÿÀ¾½ÿ¾¿¾ÿ¾¾¾ÿ½½½ÿ¼¼ºÿ½¼»ÿ»»ºÿ£¯ºÿR…¸ÿ4uºÿ2wºÿV‹ºÿ¥»ÿµ¸ºÿ·¸ºÿ¶ººÿ·º¹ÿ²´¶ÿºº¹ÿº¹·ÿ¹º·ÿºº·ÿ¹¹·ÿ¸¸¶ÿ···ÿ¸¸¶ÿœŽÿÿÿ 6ÿ?ÿAÿ0ÿ+ÿ#ÿ ÿÿÿÿÿÿ&ÿH98ÿs_^ÿ“ƒ€ÿ²¤¡ÿÀ·´ÿ¼¸µÿº¸¶ÿ¹¹¶ÿ¹¹·ÿ¹º·ÿ¹º¸ÿ¹¹¹ÿºº¹ÿ»º»ÿ»ººÿ»»ºÿ»»»ÿ»¼ºÿ¼¼»ÿº»ºÿº»ºÿ¼¼¼ÿº¼½ÿ¼¾¼ÿ»½¼ÿ¼¼¼ÿ½½¾ÿ¾½¾ÿÂÀ¾ÿÀÀ¼ÿ¾¾½ÿ¾½¼ÿ¾¾½ÿ¼½»ÿ¿¾»ÿ½¾»ÿ¿½»ÿÀ¾»ÿº¼ºÿ¶·¹ÿ¶¶¶ÿµ··ÿ¶¸¶ÿ¸·ºÿ¼»»ÿº»»ÿ»»»ÿ¼¼½ÿ½½½ÿ¾½½ÿ¾¾½ÿ¼¼¼ÿ»¼»ÿº»ºÿ´¹ºÿ²·»ÿ³¸ºÿµ¸»ÿ¶¹ºÿ·¹ºÿ¶¹ºÿ·¹ºÿ·¸·ÿ²´´ÿ¹¹¸ÿº¹¸ÿ¹¹¶ÿº¸·ÿ··¶ÿ¶·¶ÿ·¶¶ÿ¹·µÿ|mnÿÿ ÿ"UÿUOÿ 8ÿ)ÿ"ÿÿÿÿÿÿÿ"ÿ6++ÿaPOÿ…vuÿ¦—•ÿ½µ°ÿ¾»¶ÿ»º·ÿ¹¸¸ÿ»¹¹ÿº¹ºÿ»ººÿºººÿ¹º»ÿ¹º½ÿ¹º½ÿ¸»¾ÿ¸»¾ÿ¸¼¾ÿ¹¼¾ÿ¹½¾ÿ·¾¾ÿ»¼¿ÿ»¾¾ÿ¿½¾ÿÀ¿¾ÿ¾¾½ÿ¼¼½ÿ½½¼ÿ¼½»ÿ¼¼¼ÿ½½ºÿ¼¼»ÿ¼¼¼ÿ¾½ºÿ½¼¼ÿ½»»ÿ½½ºÿ»¼ºÿ½¼¹ÿ»¹¹ÿ¶·µÿ´¶¶ÿ³µ¶ÿ´¶¸ÿ··¹ÿºººÿ¹º»ÿºººÿº»ºÿ¸ººÿ¸¹ºÿ¹¹ºÿ¹¹¹ÿ¸¹»ÿ¹ººÿ¶º»ÿºº»ÿ·¹»ÿ·¸¹ÿ²³µÿ¹¸·ÿ¹¸·ÿ¹¹¶ÿ···ÿµ¶¶ÿµµ¶ÿ¶·µÿ¹·¶ÿXIJÿÿ ÿHÿAÿ5ÿ-ÿ &ÿ ÿÿÿÿÿ!ÿ.$%ÿPBDÿxggÿšˆˆÿ¶ª¦ÿ»¹ÿ½º¹ÿº¹¹ÿ¹º»ÿ·º¿ÿ¶»Àÿ³»Àÿ¶»Àÿ¶»Àÿ´¼Àÿ¶¼Áÿ¶¼Áÿµ¼Áÿ¸½Áÿ¿¿Àÿ¼¾Áÿ½¾¾ÿº¾¾ÿ»½¾ÿº¼¼ÿ¼¼¼ÿ»¼¼ÿ»»»ÿ»¼»ÿ½»ºÿ»º¼ÿ¹º»ÿ¼»»ÿ»ººÿ¾»¹ÿ½¼¹ÿ¼»ºÿ¼»ºÿºº¹ÿ¸º¹ÿ···ÿ²´¶ÿ³´¶ÿ¯´¶ÿ¶µµÿ·¸¸ÿ¸·¹ÿ··¸ÿ·¸¸ÿ·¸ºÿº¹»ÿ·¸ºÿ¸¸ºÿµ·¹ÿµµ¸ÿ²³µÿº¸¶ÿ¸¶¶ÿ·¶¶ÿ¶·¶ÿ¶·µÿ´´µÿ¶¶µÿ¼¶µÿ1&(ÿÿ ÿUÿPÿ8ÿ-ÿ%ÿ ÿÿÿÿÿ ÿ*!#ÿA56ÿiXVÿzzÿ¨™™ÿ¼´µÿ½»¾ÿ·º¿ÿ¹º¿ÿ¹»Àÿ¸¼¾ÿ·»¿ÿ¹¼¿ÿ¹¼¿ÿ¹¼Àÿ¼½½ÿ»¼¾ÿº¼½ÿ¹½½ÿ¸¼¿ÿ»¼¾ÿ¼»½ÿ»»¼ÿº»½ÿ¹º½ÿ¹º¾ÿºº¼ÿ¹º»ÿ¹¹»ÿ»ººÿ¼»ºÿºººÿ»ººÿºº¹ÿ¼»¹ÿ¼º¹ÿ½¹¹ÿ¼º¸ÿº¹¹ÿ»¹¸ÿ¹¸·ÿ³´µÿ±³´ÿ°³³ÿ±³¶ÿ´´¶ÿ¸¸¶ÿ···ÿ¶¶·ÿµ··ÿ±²´ÿ¸·¶ÿ¹·¶ÿ·¶¶ÿ¶¶¶ÿ¶¶µÿ´µ´ÿµ´´ÿ¶´´ÿ¬¡¡ÿÿÿÿ ?ÿ5ÿ,ÿ'ÿ !ÿÿÿÿ! ÿ$!!ÿ,$&ÿ6+,ÿUEEÿzihÿ›Š‹ÿ¶¨¨ÿÁ»»ÿ½¼½ÿ»»¾ÿ»¼½ÿ¹¼½ÿ¼»»ÿ»»»ÿ¼»»ÿ¼¼ºÿ¸»¼ÿºº»ÿ»º½ÿ¹º½ÿ¶º½ÿ¸º¾ÿ·¹¾ÿ¹º½ÿ¸º¼ÿ¸º»ÿ¹¹ºÿ»¹ºÿ¹¹ºÿ»¹¹ÿº¹¹ÿº»·ÿºº¸ÿºº¸ÿºº·ÿº¸¸ÿ»¹·ÿº¸·ÿ¹¸·ÿº¸·ÿ¹¹¶ÿ·¸¶ÿµµ¶ÿ²³´ÿ±²³ÿ±²²ÿ²³²ÿ®°³ÿ·¶µÿµµµÿµµµÿ´µ´ÿµµ´ÿ³´µÿ´³²ÿµµ²ÿŒÿÿ ÿ ,ÿ? <ÿ7ÿ0ÿ *ÿ"ÿÿÿ! ÿ$##ÿ/),ÿ;12ÿM<>ÿl[]ÿ‘||ÿ°ž›ÿÅ·¶ÿÆ¿¼ÿ¿¼¹ÿ»ººÿ»¼¸ÿ»º¹ÿºººÿº¹ºÿ¸¹»ÿ¸º»ÿ·¹½ÿ·¹½ÿµ¸¿ÿ¶º½ÿ¶¹½ÿ¸º¼ÿ¹¹ºÿ¹¹¹ÿ¹·¹ÿ¹¸ºÿ»¹¸ÿ¸¹¸ÿ¹¹¸ÿº¸¸ÿº¸¸ÿ¸¸·ÿ¹··ÿ¹··ÿ···ÿ¸¸¶ÿ¸·¶ÿ¹··ÿ¸¶·ÿ¸·¶ÿ¸·µÿµ¶µÿ³³µÿµµµÿ³´µÿ´³µÿ´µ³ÿµ³´ÿ³³³ÿ´²³ÿ´³²ÿjZ]ÿÿ ÿ?&fÿFÿ7ÿ 0ÿ )ÿ#ÿ ÿ&#$ÿ*&*ÿ)&(ÿ5-0ÿG77ÿgRRÿ‘xtÿ¾¨žÿßÔÅÿÒÍÁÿÁÀºÿºº¸ÿ·¸»ÿ¶¹¼ÿ¸¹½ÿµ¹¼ÿµ¸¾ÿ³¸¿ÿ´¹¾ÿ·¹½ÿ¸¹¼ÿ·¸¼ÿ¸·»ÿ·¸¸ÿ¹¸¸ÿ¹¹·ÿ¸¸·ÿ¹·¸ÿ¹··ÿ¹··ÿ¸¶¶ÿ¹¶·ÿ¶¶·ÿ¶¶·ÿ¶¶¶ÿ¶·¶ÿ··¶ÿµ¶µÿ·µµÿ¸µµÿ´µ´ÿ´´µÿ²³´ÿ´³´ÿ³´³ÿ³³²ÿ²²²ÿ²±²ÿ¶´²ÿD67ÿÿ ÿUSÿ>ÿ5ÿ -ÿ)ÿ$ÿ#!%ÿ'#'ÿ-')ÿ6,.ÿI45ÿbKIÿ~e`ÿ•~{ÿ©–•ÿ¹­­ÿÀº¹ÿº¹»ÿ·¸»ÿ¶·¾ÿ´¹½ÿ¶¹¾ÿ¸º¼ÿ¶¸¼ÿ¸¸¼ÿ·¸ºÿ·¸¹ÿ··¸ÿ¸¸¶ÿ···ÿµ·¸ÿ·¶·ÿ·¶·ÿ·¶·ÿ¶¶¶ÿµµµÿµµµÿµµµÿ¶¶µÿ²µ´ÿ´´µÿ³´µÿ³³´ÿ²³´ÿ²³³ÿ²²´ÿ²²²ÿ²²±ÿ²±±ÿ²±°ÿ´¬­ÿ!ÿÿ ÿUÿDÿ7ÿ+ÿ &ÿ$ÿÿÿ# "ÿ&"%ÿ,%'ÿ5)-ÿL:=ÿn[ZÿŽzxÿ¨—–ÿº¯¯ÿÀ¹ºÿ»¹ºÿ¸¸»ÿ¸¸»ÿ¸¸»ÿ¹·¹ÿ¸··ÿ¸·¶ÿ¶··ÿ·¶¶ÿ·¶¶ÿµ¶¶ÿ¶´¶ÿ¶´¶ÿ´´¶ÿ´³¶ÿ¶µµÿ³µ´ÿµ´´ÿ´³µÿ²²´ÿ³³²ÿ±²²ÿ±±³ÿ±²²ÿ±±¯ÿ°±°ÿ²°±ÿ±°°ÿ›’ÿÿ ÿ ÿGÿ :ÿ2ÿ*ÿ %ÿ ÿÿÿÿ% "ÿ'!"ÿ4()ÿL;<ÿn[\ÿ{zÿ«™˜ÿ»±°ÿ¾¹·ÿ¹¶¶ÿ¸·´ÿ¸¶µÿ¸¶·ÿµµ¶ÿ´¶µÿ¶´µÿ´´´ÿ³³µÿ´³µÿ²´´ÿ±³²ÿ±³²ÿ±²³ÿ°²³ÿ³²±ÿ¯±±ÿ¯°²ÿ¯±°ÿ°°¯ÿ¯®°ÿ°¯¯ÿ±°®ÿ{lpÿÿ ÿ7ÿ? Fÿ 8ÿ-ÿ *ÿ%ÿ ÿÿÿÿÿ%ÿ1&'ÿO?@ÿr_`ÿ}ÿ¯žœÿ¼³°ÿ»µ´ÿ·µ³ÿµ´³ÿ³´³ÿ³³´ÿ³³²ÿ±³²ÿ±³±ÿ°±²ÿ°±²ÿ°°±ÿ±±±ÿ¯±±ÿ¯¯±ÿ°°°ÿ±¯°ÿ°®°ÿ®¯®ÿ±¯®ÿWJLÿÿ ÿLÿCÿ6ÿ/ÿ *ÿ"ÿÿÿÿÿÿ#ÿ3%'ÿSCCÿudbÿ”„ÿ°¢ ÿ½³°ÿ¶´±ÿ²³°ÿ°±±ÿ°°±ÿ°¯°ÿ¯°¯ÿ¯°¯ÿ°¯°ÿ®¯¯ÿ­®°ÿ¯®®ÿ¯­¯ÿ°®­ÿµ®®ÿ1&(ÿÿ ÿUÿDÿ5ÿ/ÿ )ÿÿÿÿÿÿÿÿ3''ÿYIHÿ|kiÿ˜Šˆÿ°¥¢ÿ·°¯ÿ²¯®ÿ²¯­ÿ°®­ÿ¯®­ÿ­¬®ÿ¯¬¯ÿ¯¬­ÿ¯¬¬ÿ©œ ÿÿ ÿ ÿ"Rÿ?ÿ6ÿ+ÿ $ÿ ÿÿÿÿÿÿ ÿ6,,ÿZKMÿ|llÿ—‰‰ÿ­¡ ÿµ¬«ÿ±«¬ÿ¯««ÿ­¬ªÿ‰|€ÿÿ ÿ$ÿ*UÿSÿ=ÿ1ÿ&ÿ ÿ ÿÿÿÿÿÿÿ6,,ÿYJKÿxigÿ“†„ÿeUUÿÿ ÿFÿ$HÿDÿ5ÿ+ÿ"ÿÿ ÿÿÿÿÿÿÿ ÿ ÿEÿ@ÿ3ÿ-ÿ'ÿ ÿ ÿ ÿ ÿÿ .\ÿMÿ4ÿ (ÿ6ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿƒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿpÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÁÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ8ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿƒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿpÿÿÿÿÿÿÿÿÿpÿÿÿÿÿÿÿÿÿÿÿÿÿýÿÿÿÿÿÁÿÿ¿Ïÿÿÿÿ>@ÿÿÿÿÿ8ÿÿ÷ÿÿÿÿÇÿÿÿÿÿÿÿþÿÿÿðàÿÿÿÿÿàÿÿßïÿÿ>ÿÿÿÿÿÿÿó ÿÿÃÿÿÿÿÿƒÿÿ~‡ÿñxÿÿÿÿÿpÿÿÏÿ>ÿÿÿÿÿÿÿùÇáÿÿÿÿÿÁÿÿ>Ø<ÿÿÿÿÿ8ÿÿLJÿÿÿÿÿÿÿøÿÿÿÿÿàÿÿÿÿÿÿÿÿÿÃ<ÿÿÿÿƒÿÿx¿ÿÿÿpÿÿpÿÿÿÿÿá~ÿÿÁÿÿ<Àÿÿ8ÿÿøÿÿÿàÿàÿÿ ÿÿÿƒÿƒÿÿp€ÿpÿÿ 0ÿÿÿÿÁÿÿ0Àÿ8ÿÿÿÿÿ€ÿàÿÿ`ÿÿÿ ÿƒÿÿ@ÿpÿÿÿÿÿÿÁÿÿÀÿ8ÿÿÿÿÿÿàÿßàÿÿûÿƒÿ‡ÿpÿïñÿÿý>ÿÁÿ?Çÿ8ÿçøÿÿü?ÿàÿŸçÿÿóüÿƒÿ|ŸÿpÿóÿÿñþÿÁÿ>ßÿ8ÿÇûÿÿðÿàÿïÿÿÃÿÿƒÿxÿÿpÿÿÿÿÁÿÿÁÿ8ÿÿ8ÿÿÿÿàÿÿàÿ ÿÿÿÿÿƒÿ`ÿÿpÿ 0ÿÿÿÿÿÁÿ Àÿÿ8ÿÿÿÿ€ÿÿàÿàÿÿÿÿÿƒÿƒÿÿpÿpÿÿÿÿÿÁÿÃÿÿ8ÿxÿÿþÿÿàßáÿÿû|ÿÿƒÿÿpïñÿÿù>ÿÿÁ?Çÿÿ8çùÿÿü?ÿÿàçÿÿãüÿÿƒ|Ÿÿÿp÷ÿÿñþÿÿÁ<ßÿÿ8‡ûÿÿðÿÿÿàÿÿÿƒÿÿÿƒpÿÿÿpÿÿÿÁÿÿÿÁ8@ÿÿÿ8ÿÿÿÀÿÿÿà ÿÿÿ ÿÿÿƒ`ÿÿÿp0ÿÿÿÿÿÿÁ Àÿÿÿ88ÿÿÿ€ÿÿÿààÿÿÿãÿÿÿƒÿ`‡ÿÿÿpÿÏðÿÿÿÿÿÿÿÿÁÿÿ¿Ãÿÿÿ8ÿÿÿ‡øÿÿÿÿÿÿÿÿÿÿàÿÿÿÿãÿÿÿÿÿÿÿÿ|ÿÿÿƒÿÿÿÿÿ~ÿÿÿpÿÿÿÿÿÿóÿÿÿÿÿÿÿÿÿý~ÿÿÿÁÿÿÿÿÿÿÿ<Ïÿÿÿ8ÿÿÿÿÿÿÿÿùÿÿÿÿÿÿÿÿÿÿÿø?ÿÿÿàÿÿÿÿÿÿÿÿÿïÿÿÿÿÿÿÿÿÿÿÿÿûýÿÿÿƒÿÿÿÿÿÿÿÿÿÿx¿ÿÿÿpÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿnip2-8.7.0/share/nip2/data/stock-tool-move-22.png0000644000175000017500000000077613224651032016203 00000000000000‰PNG  IHDRÄ´l;bKGDùC»³IDATxÚÝ•OKBAÅÏ'RZi»¢Å£¿XA†`"µ )pY Wµ°]{ÝúüTmZµHÜD‹¤*JÔ(§ÍM ‚ gfν÷œ;óà?yÀœß$XB€ï7H—<Ï3Åbш| ˜ü)ù`òù¼I&“–Ø 8ˆ|˜^®²›.C਷À ðÑï o@¦®æ-àAó{Ö…{Ú÷-YUnÓ¡€°˜²7Àš ue<\ D0øûHæþL&PVÀ`7y7ñP+•JT*¤éÐVÙÒ·´Ãá0Ñhà Xíªð‹ÞË]Î;Ê&&lضX:¶{O€80m³vzÊÖs`_F=j½ª@Oú,v¤}7@ h§OÖ!Ý´†ÜRа)¬®L—´ÖÖ°íçï!îh±,ç[À{Ÿ}Føµt}“ÃZÎ'­f“ËåL"‘0©TÊj¡;J÷Øð<Ïd³YKz,"½½;ÊpÔŸ{"=vu‰B?y+ì{Rù/À³®vc¦ß}´]µb@F5‡匨·#I:öûf„G€ˆeCr3pÑ¡š'=o¾õžë¾[Ú uu¢õû³b«»BLùѤ໶Ëþ‘!•0—(°¯i…ò««÷^|÷ýwʦ}3[ +§»»›O=‡Éß‘$ÿ•¼ã¾X,lF‚Á!`Áò÷x­*8r䀷½ý“èêê˜2Œ°ZN¨Žö/Ôð¯=ê„Ë¥:r]ê=Oøì?Ï» KÔu©¥—•·ž:u´Ôãñ84-!$ ¢ì*Y¤¡é)Tª®xÜœº‹Ï¬´!ËßxªÚtpåöíÙO<¸ß®iÙhš¥b(µÜ¡¾&®'>^Zí»1¾þ‚)Á­ ÞÓÜ|Ü¡i9«Ô׿i:2ŒÝ~ÀÚZˆÃ/@'p˜·ÀfzP©õbIÉN)e=\¸Ð‚RÃð‚”`³!¬~ >ëL¤¥§½‡¥Ü†”[),,¥¿ÿw––~faá““àõ‚¦‘°ÀQ`%ÝÛõ£i.¤t‰„(*Ò˜›kãæMèí…d³©‰/ozßn¤ØgÒ×7LUU5÷ïwÓÑqžÑQTK >·›qàFJhñõzö`!œ Ý"//JKË«êÜ9|À p-`Ô†i ¼á@¤z<ÓÕõƒ …&ÔéÓ˜Àðpx¨ çZ6n¤xyjÊŸõê ³±‘~ ³Ò÷‹ÀjzÏ>ŒâgÊË÷…€qà$ð°pö‡Ù8k­&¸€*ë X*}@Øõ_wžnù—i–S~ý_Õ_.´ŠW1*9wIEND®B`‚nip2-8.7.0/share/nip2/data/stock-led-yellow-18.png0000644000175000017500000000101713224651032016331 00000000000000‰PNG  IHDRVÎŽWÖIDAT8­”±Nã@†?쀈!ÑÑFº‚†‘UÊ»'Q¥B¡§£å’ëÒÜ#œ¸‚"2Bâ$”Šžêj„e{m¯×\1gC®a¥ÑŽ×û;;;»ðImã£Á»;Î1²–¡1ôó’„ç4eÇÌ®®øó_ÐbÁ$ ;ÖB’@žC‹ÿòqÌôúš _úOOÜôzœnoC·Û¬´U%Pků*ŽøzÏÏ5ÐbÁ¤×ãtgG Aoo+bª ŠBÆŠ‚/ì=>ò М„!ã €ÍMØÝ…­-ñÃP¬]¹ñƒ€ñÙƒä#ç ®%¯¯P–²²sbÚÔ¯k1çtšŸCkÁYI!Æ,sS–«P>lAiJ_GËr~sì-Pa>ÔZÑvT b͉NÌs1c–~Y.M#뀛sìûÑhø>$MEüøìomn-ûÆÈiù #–¦Ò{À¹šøەŸ>ÈÏBüèÊ’Y[··ü=>f¯(8Ô¢Ë2éU”ebšü,ƒ:m‚bò7Øš˜{ËŸWä…s]g­_«4UKû• óCW>y羞Âé~×Užhmbîiêzøyl€‘!úûê”fÖ¦>ÿýŒ\[û XÁ#cIEND®B`‚nip2-8.7.0/share/nip2/data/stock-led-off-18.png0000644000175000017500000000103313224651032015566 00000000000000‰PNG  IHDRVÎŽWâIDAT8­”¿Ž1Æ¿õþ¼ !!!¥¸:$"*Êä .¢Y éhî¢K…]^´,áصgÆiÖŽ¹;)ÍY²Æ;Úùù›ñØÀè=çr¹œŠÈ‚™çD4$"h­OZë}]×ÛÝn÷û¿ <ÏŸ”R+3Ã"BUU0Æàv»¡®ëÍápøÆÅáÇz½~ɲì1MS¤iêý"nÖ“~¿ÿ¹,Ëç7 <ÏŸ²,{lµZH’QÁZë!n˜Ìü©Ûíö®×ëOP®&J©•R J)´ÛmÄqŒ8Žá|n¸ucWãñxêA"²w¬ªÊíê•„i:k­…µv XkçÌ "‚RÊC‚4ÀÌ.MŒcÏ=Hk=t^föò1þÔBXX3fzS®t"òÓ]ÊΆŠN"ò¦)¢è_kYk½"l`§´gæ"BÇw °)›÷©6þ½c¶D´J’äî¨Ã¾qꚺm}CÇ?ƒÁ ÇÌ“ðj¸k­}:u]‡‡°9ŸÏ?€Wwm6›½DQô%L-TÚº®EñÕý{w×ʲ|ît:=fž„ò_ÕZëMQßÂØwŸ‘Ñh4°‘9€a“âIDöZëíåryóŒ|Øø õvûæ:Z¼IEND®B`‚nip2-8.7.0/share/nip2/data/stock-tool-bucket-fill-22.png0000644000175000017500000000227313224651032017430 00000000000000‰PNG  IHDRÄ´l;bKGDùC»pIDATxÚ­•LÔuÇ_ßïÝqß»ƒCî@KÄØ¬p0ÝÐ1‡¶BáÂAÎÛüƒV[N·ÊZEsƒ9ŽdcÔê¯l¶5›Ê¢8büÁ•C âaüˆ»îŽƒ/‡œàÝ=ýÑgdZ³ç¯ÏgÏçóz>ÏûÙó|àŸ-øh7Öÿ‹)À9`P|d6Ã÷XSN1üsÀÓ€ 0?)xž Œgff®ìF°'ÿ\^^Þ‰DÐu}Cccc•ÿׯþ›7§[Š‹·‡=Ïd®ñlüð«ÝE}ïmÎùlã*û&£&Μ9³¿¤¤DÅçóÉää¤ÌÌ̈®ëÒÚÚ*ÒÚÚ*ÓÓÓ2>>.ÃÃÃRXX(UWÆVÏ…½½÷~ÜS8÷ɶ Ãyéöí@§Nò˵k×dllL&''% J4•X,&;vìX,&Gü~¿ HOOtwwKnn®|ýêË]#¼œéëŠwíÙ2·''ãS ×øêêê°ÙlØív4M#%%«ÕŠªª¸\.ªªª¨¯¯GDðûýD£Q{÷îeÂæÊÝýQýÇ»GûÒžãµW»Ð~š¹{Qííí%Üv»ÝX,¬V+š¦¡( ‰D‚²²2:::ÈÊÊB×uE!//¯×KCCƒ?~< ¼þùíYUÂþ¹¹¥d. ™Ãáðúêêêñ¶¶6òóóYZZBUÿ¬éÒÒ±XŒp8L(Ân·“““ÃÙ³gillŒG"‘w1 j6›¾Pæ-šI1&˜…Bûöícppazz]×Ñu`0H(Âétâv»ioo§©©)‰D7€[À-§Å¬L]õ&Í ÷Á}£££ž#GŽpýúõ‹ÅB   p8hšÆùóç9yòd" 6€¿@ ªÏ%RͪÊ2xèïëëóÔÖÖÚGGGIKKcdd›Í†¦itttÐÜÜœ˜šš: ŒŒ»÷’ˆêŠL¥¨F.ƒÀ ÿòåË;8ÀÐÐEEE¤¦¦réÒ%Nœ8‘˜˜˜x ¸ùtHÌ.Ælf5žm3Ç6*L€(u»ÝÒÒÒâknn—ËöeÀ³@Úýî2¦dÅz÷ÕîmO¿ÿœkxéQðm©©©¢iš‡V@WŽ[uã*{Ï—›2¶g9Ì/ËòËüüü`µ ¿¾äÊKIAŸE½±ÆaË$t'þ¸OÀnŒÈ,À±"ý•g_,_çšY­YÞ ÿæMêÌ Ø IEND®B`‚nip2-8.7.0/share/nip2/data/stock-led-blue-18.png0000644000175000017500000000071013224651032015744 00000000000000‰PNG  IHDRVÎŽWIDAT8­”¿KÃPÇ?¶Z(ˆàÖ5àP·BÀ©cý ü1u¬»›«‹uË⟠íàPZqrïä\’&MLux÷š‹­âàƒ/wyÉ}îÞ]ø§µ±~{äBÖ†´ ‘1Œ!€ïÁåó@¯7Pî@¤@€ùâO¿ Wç¿€ÞzPmAI®C‘LÅZ…}¸>²‘åb%Û'°T1°O©êCi.{ó=8¨ÁË=,S\sœ°ìñËÅ|K¿Ð3W²¶éÉBú1Éœ‰ì²þB”µ6åfÓE¶Hl*{º„7(tòŒ‰*?ÆLÊ-LCSGbl{bŒE‘ò%S™€‚1dõb5(…„\ŽõÑÖM@å(Q°H`‘`9µÐ3“²/ŸÖDl¨ ººÄ³ Þá°óFþÒÍÄÚ ™È6Ä]ÞÂÊ'rуr«x´Œ|jÚú}®ûDï`¿I#Ïj«Š”‚. Ouä¿‘châ 8ùtÒ<­üFþm}vÁ#O±Ð‚IEND®B`‚nip2-8.7.0/share/nip2/data/macbeth_lab_d65.mat0000644000175000017500000000110313224651032015575 000000000000003 24 1 0 37.7758 13.122 13.2705 65.0651 13.6974 16.1079 51.125 -3.3471 -20.6654 42.9236 -12.4326 19.1425 56.0801 7.2918 -23.6413 70.8371 -30.663 2.5131 61.0209 34.1118 57.0494 42.4442 9.1559 -40.9195 50.2147 41.9414 12.8438 31.1403 21.5385 -23.1365 70.9067 -20.5043 57.9149 69.6498 20.8271 64.4978 32.4864 15.9125 -48.5415 54.1624 -34.1277 32.8876 40.4646 48.7723 24.0303 80.0696 4.3066 79.2876 50.847 42.549 -16.3102 52.5361 -28.7633 -23.2291 94.8303 -0.536 0.3512 80.3002 0.0736 -0.3646 65.3137 0.2192 -0.4743 50.7737 -0.2655 -0.546 36.005 0.2655 -0.5395 22.1402 0.6357 -0.219 nip2-8.7.0/share/nip2/data/AdobeRGB1998.icc0000644000175000017500000000110413224651032014554 00000000000000Dargl mntrRGB XYZ Ö/acspMSFTnoneöÖÓ-argl descü{cprtx5wtpt°bkptÄrXYZØgXYZìbXYZrTRCgTRC$bTRC4desc!Compatible with Adobe RGB (1998)textPublic Domain. No Warranty, Use at own risk.XYZ óQÌXYZ XYZ œO¥üXYZ 4 ,•XYZ &1/¾œcurv3curv3curv3nip2-8.7.0/share/nip2/data/vips-128.png0000644000175000017500000006137413273071606014221 00000000000000‰PNG  IHDR{— { IDATxœì½i%Ùuß÷;÷æò^íÕUÕ{wu-ݳa0LÏxHƒ h‰-CtˆRHá )ìïŽðû«áO²Âß(Ó¤)J\MIlf'–™f¦»«÷¥º««kyKfÞ{?Ü›¯«{ºgÃ@A2œ3ÙïÕ{/_æ»çžsþçι)üÿÛûÝä¾Ç½&y¿ÝtÏã{=ÿÈ7ûãúâ¿á[+4ó€ç{÷î°ÿøãㇳðì”Õ¿?•É¿Xž´Ù•¾õ€ïÛ;1„(äû'ÇGºe?Î/ÿ²}P êg0ÑÔ|b'ðL-Ùé:˜ÓqÎÍ)qÆD˜tÕ8ø?æ®Ö¶{H»¤G³çoø1høu&ý5Ý&Üwì/¬ÒqœÚ‚gúÁ~f ö´Yí“ã$Ç+ j0bAÀG¡Ã;ÛƒSòÔNà™*+O7’=óJcª¼ ˜ ¯’>l±¦dfb†£ÇO°¸´Ìâ‰Eefv‘ U‡„ ªˆ¦cE“P–Bajß ó¹zã<µÚŸWrWІ{º×—ïéö×QØÊÏ~òr‚“ÛÂ3½Ì>ã¥<ýf“jÊÍ:Ñ~‰~ÖLt'8tè8'N¬pìÄq™_˜$3Šâ’ÆDû%ŠÔP HÔŒF‰À±ºzŠkëÐ ‡1 &†h&ý†û[‹È÷þîLè„ýa´Öüü<‡v*ž{zhòÓWmþ™ÆÖ›µc ™)1b(ËIæærâÄ2ÇO,süøœ¡ìXÔ7QDÁàPõhBÕšôÖ"¨AŒ "JÀ€†(|ÑhU *°º¼Ê7¿õœÍ8=Ïc/ÜâÜ+èVÈ–{þ· }8t¼Àä¦ã“;Á<³+ùéÆÏœ5ù¾z¢€¬ ³9ÖXJ[Pd]ffpli™ã‹'8~ì0‡îc|¬D}:…'„@6UBÒVƒ$å HH^4È5QË“ÁÄÙ'ÑFcÁ¨AQ–WO`ʼnáúÀ<á,wµu/X³éñAûoŒf`­ý"dáÝÜæ™ä§‡¶xæ5)Vš±q¤(1&Ãf¼ËlgŽù‡8pø(GàðÁy˜ab²Äh 걪¨©AL2φ€F¿« Q51PM„˜EÓ€hžm4ñD£€*¤ç {~Α£‡è–ã4¾¡ìi¿•ÞTî »Z?nî“tû(…ý¡´öŸŸbáümûì–ç¹Ê–§_3öt]uðS²¢Ka3e¢œ ÛÇ‘#'X>õ8âIùخڡÚÙ$Ô6xD<¢C?ÒØèq%鈠 !i¥š=¦¦Ñ€ iKÿ´.W@¢'D4#¹…ŽáȱvÞz¯æñ4Þ­¹Î¸+äöKï§SÛ“~$Úý£ûkíg!÷“¬4Æ|®2ÙsµÉŸûÊ-{È%¡,ɲ›YºÅ8Eg‚‰ñ},..²¸t’ÅåEŽZ èÞWHpì\?ƒ„(Ê»Z&#á !ÆÉI{ƒJÒâh|ƒ’F5¤gñ²ÛÏKœ –ˆÃ<âŒIïÅs´`8µzŠ·ÞþA,Ÿ…‰¯Á6Q›3ŸÎ;yö½ÿÏnÆ?Bž`¡oøôóLcŠg/ûL0eîò“ü¬XKÇv(Ê1^deõ$+KK;~„¹¹qŒ8DC`v ÎbP‰##Uƒ‘ö´ª­‚¶è9M5ѧªQD#^Ò¬A,w±‘‰îU½'ª&MÄ;ŒíŽ~¹ÄY„Ñä¿°|róe‹39]žbÀ·¸+`˽VdÛÄýÁ}íQƲ_ï»Ó=²g†jO¯‘ª³L‰11K'cnþ'Veuy•ÅÅ#=2O·Dk¢O„ D5¦tBÇ_ À•Š *(QËT5™_i­*HdÀP©‹i±Jôß™¢W£ЄÆ‹É‹x=ý½OçA²ˆÊÑ4M¢]A…ååX“alÆŽ)>Ï ~w ùAûÕŒ?LK÷>½ö û˜®àÙ]µŸšìg¾Û7Oô4ÃÙ5‘2ÆbmÁXg’Åãˬœ|”¥¥eŽ/env´õQ2š(iÁi„Q"†¨'Ñ„ZcõÉ#{C¢ *`$j{b·0T£O6­™f!(ê›ôÓ*%6ËMâ“4úbP<ˆAÕ#6ûÉ;$Óý¶ðŒ0¿0þ™ý¬ßºLÝdÏ@ý0áÞÎ>r Ö ûÝ+_„¬ÞÏ7úœÞ2òlE~ú5g–+SàL ÖD³\ä¦fæY=ù§N­rbi‰#ÇP‚¨GB „aP:kŒYIÂm¯Æ¦+HÈãxÀdQPÁD­N¨:úàˆ‡Õ¨‰ñ²!j# >ЄѪŒX¤è$Í,“.…ä«Mâ/5žG¢yÕò‚Oæ;á…`‹(]ð,¯<ÂÍ«ø8#múuï&ð½šÝŽÆ¬ÝÙ}‚6€|v‘®ÙµÏmzý©Fìç^ òôÎ0³ÎføZ¬ÉÈlÁx9ÁÑcËœ:õË«'XZZdnn ‡$S+¸4p-jéŠÑ xa¶E+T¢À@F U ’RD„!´V …O"BÐuŸH!SC‘´Ì¤]¢éV h…'wÇ_“ö-‘FkÄ%%ND£eX]]åÅ—¿Fá‹Ëã¿snøö}‚}Ðó¤e€üÚ£c‡/ÝnþÎíÊîùìÙ·o›OT’‰“ cJýÎüÔ>–VåÑ“rbe•ÅGèv,A¨ÄÐG$y®Ö *!åy[ßÖJ«õµQ阤O¢ñ÷Óúâ‘ÅŒ#aZmT‡¨ U0yAF´Hˆß7ò³D?­1Üò¡ý…Ý„7þ#æÎE0_EŸFç¥Ea&…eqbí™3jRø}ûÒÒ Œ¶àÂŽ{hÉ•ióÃöD³Í·¯ùn†bÜщB2‚•ŒÜ8t”GN=ÁÊê)–VNpèàb}$-Ä"Ò€6H˧A¾×ÿ†h¦ Ш¢‰©’‘Ðã &@ yZ %XDÈXJ…ú8LPÔL'Kô”!` ˜¨­­v*Éì'”Ž¢jùúKoóÇ_[cn~šO=~”Ç6~³ù™zŽ‹"g©ÞüKš'¿§þ^3ŒŒµ„à›°–¶±vòá(Ç—Žgœsl6< ü;nÆ„Ê?’-thì[M°Ÿ,ò§N}œå•“œ\]åÄÊSS] V3ŒÜ0ítK>8#4úPD§œÎdH€'Z A±#ýì] ’þˆz 5™:lÒB1†<ÏÕÈ7&ŠdIÀ 1§ÐxXŒç i¢) ðí×knûEz[]6_›â`™aEð¡fÞ8Êè|ï÷èÏ> > (6Ϩë†<ËîF&Mh£ –ñ‰œ#G–Y;ÿU0Çx¸Ï~¾ïñGÒîŒh…^ù¤5–ÿî¿ÿ”eôeÆh•¸ÀøA0Ñ$µ6˘ô^òs’̯ÅÄHËï·ÏÓC‘ ÄÇ   Žà d(-ä¹E$~ÁÚÄ[‡è,¬˜„²UpMµ»®@žç`3\PBŒëFaÙ+?¼ÂíjN·& Ø,çíð µÏãÄR›œh•+Õ¼I² Ïmlf¡µJ1†Ìguõk^§VáVé~é Íýn&ýG6ã1Ë˨ҸŠkW¯ŽBÒö# #Ip"‚H €5,ÒÒ Pׇ”ztnï:Œ ã)-tRXÈmÊ9ª!Uï k06OÚÇ«(:„Ððͯ—_ÿ·ßâs7Ñ hðØ6ÆW¡' lø§(¥$7‚ØišC?Ký¿†›H£Hy÷ m'¢‰±UŠƒ‡01>ƒ±Bß™gy°é¾_Û?RíÎ~Âô¯j§Ϟ;ƒ5ø:VfÜóŸH6ÁØHsSΗsÄÁ£ý\^’™T`$ù|KSWäEhš†,+;ºDÖï¬¥Ñ *:.…kë†Ù1A¬&ÆK\]QÕQ”!¦°"2Šš c ~kQÅÎÌ0|ùËoòú™šÊålöâXVÃ]B¬8Nf/ñˆ¹ÈkÃU¬<Žkv¨>þ$+O=BVæ1ìÇ&‚Ek n³k)<ŒD.|ŒïMàÄò*›ß¹SÓ}A¿Xûо{ô¥ÖøAX¿y~ÿ® 5M×6ú•hN%2E¾âª!®àë B Ë‹¸—YÙÁZ‹˜,jŠóÑ·z穆ƒ~dÓ¼wØY‹ßÝÄj†-KÊ"ÇH¤9öeüàrH)4.ÄLVŠåZ‚Ƙ=ˆe&ÎÇ ëØ^ìXßÈpRbŠ f»™1[çÿÅä+üÊôÿóÅWù¥©ßãɱ¯óZ½Èwú0cY¤[Ä„ÖlcmƒašXƒMVR••¥e¬Í¨‚á—Ÿšžåƒ™ðÄŒ0aÜK8_sùÒµQ8Õþ7â¼Dð®ÂW|Uc²¼ /Kò²Àæ1®„ƒÇ‡@ða5`XU4u…%š[ ‰ïÎ,JDÌYÖ¡ìÌP9yf 3‡07-\¹í©|† Âî a·†¡78„R‹´)IIy·Á5 ÞpgÇ1l›dãû8pp™£sûѦGãÉÉW1R3T¡aF.óýs»_Ãm_ÁÝ¡“ÍÞã§#ÆÑfF—·´rk,Á–lÜ>̓µú~_ÎÝ}Džó/§ú ίlã1±Z‚ƒµ9™ˆ#Ôu…ˆÁ‡¨±¨R kªaw "Áû€÷ Ð)s k¨¾÷&eVbM ,-rt¡ÜÖ¨¥åâ2“‡;\¼ÑD°$&Q·J.`¾ˆþÒ@0ø]ôÊ òÙ ¶¶úüÅ7z˜Î!ŠbšNÑÅæÓã]:aÈáÎ6Ö_c£ªX¯=MPÄdLewX1_Çü§ÿ ÙüAŒøÖ×aØ*gb³@PŸø³k£&Z´¥¥ãäù’Y®ä3ìƒÂ®½<ù$ð‘°¿u‰«¥ÑUΟ;…˜f­${eR¬lòœ€Ãf11ÎZV{T  R-u–gH 9w6oS¯­±óÿ~ƒæ­³tÉiÎ¾Ü¸Ž¿µ7®áάá_üáÌÂÆ ¨‡¨zŽÌY~xÕÓƒ÷$'jqÉ·õ¸ P[ÌØ4frŒéÙ):“3PtŸ§›[& ˾‰i•Êg²ÿ€¥¦“çL”nמÚªøÐpÕ9¸ð jðas9có ï]Bâ­ tMŸ›`nf?¹Í¨ù‰ûû0SÎ}Ï?ô¶7Å©úR¥á¹skgb|Ø×’YÙ$#‚ŠA%`Bª ñ®!Ë2ÔûXÕÙ)p>P9‚ýy}é•2J5èù7 YaÐ1‡'’¨âÁf.ïЈ A&±‡æØoqu£`eÞ§l™ÁG2Úü³ŒûÜæ3§ðV0x=‘qëfÆôl—ëë Ç”\¸R3;9Ãta™3=5t ÌOtÙzê1d¨é`=Cïõ³äSsû Ú2~!&fUsãm!„$Ò)pbõ$×6Öb=Ü»ç³ß͇(–í=0ÿÙs·o²}§ÏÔt')w›Ø YÔ¢–y8ŠöÄ ››Ê†œä›;ÿ”NX£Cngöq^¾S²Syœ«¸úü[,öTRá(!†^šYÔy$Ë¡Eí© 2ýϱã)‹qúÙ.;Uö4øßæáZý ÿý¡·{„ý•M6¦ôv ûΞ9yí|v"H¢€ bsB5c£‰Üؤ<»ÉðÌKÐ(âêÝ2ñ"±€ÃÆ9>t¬d<^Á虂#ñÜBžwȧÇÉÌàú}dj—e™oxÉMñqéPR%ö²µ1.Þ;`6j·ަÉß„‰Ç.¡ë<· Ô3}çÏø¤½ÉØämºSëôÜ€ªTK¶ý*`ŒÅXØè 9¹–`ìHgïfò2‚Ö±¡O#‰$e×DÝŒ…ùCô{›¸Ê®ðÞ~û##Wöšñhfx¾ùŵµ·Í‰Ù'Iæ[$(±¨ÆPÇ7 ÎkJdJabcºˆÒhLÁ5X+T¾aª[R7J‘[Š…ò}“°¹C^yì±y ÐÉ, žº®°¶€: ý]Lí8Øm87}„ÇĊ*Ac›ŽÁ`LÛå!dæÉ½Òœ»ÌØ?½C^ßæñüK½óC&‹š =¯d!àJeǪþÍ ¿sçA¯ÏÅùYN{OŽ@ö ¿„öÉÝ’Ôb•«çøÒ2ç/¼F ã‹`烓+ÊŒ·ÑJ{°–!¼€Âöî6Ö7‰IÙs*iRcbÞÖD5?¼@(î‚”<¹Íâ`d’‘ÙŒ¡k“1–— Ý¢¤c,ùDo”¦`'J|Ýcxõ U“à*¤›ãJÐP£Õë ®³ÖY +j4]›•–­³´)X¿væÎ”Byt?gòOøyó¿ó±ñ×1â1ÚPŠEȰ ^Žå‘â*t“+=ƒZ¡qiR±‡ÁØhåÚ“á2šQ¯–WVk ¶Ãµƒ<ÆÃC¯¬µqöH³»R½ Kã.¬]ˆ¥³ÄçJ[H$)§HQ`îC4²g‡5‚jÍ´ñøxg‚L ÈË»wñ&zî¦ „ôj²Ú —w‘sè[ëpöþâ&a}‡°±Ãì8ضã¤>žäAHE€"C‡Þ¼ƒ«† ³œ©3ä¡JõÝ%|vÐX§®ZcéçøFak`@2¾òü&Þ·¥ËIà&É©vt#ÎI‰Q–W É nÔùéwòƒ´š+ðV³Û-Èß7¡QΞ;—jÀR‰Q*j)T“eï£ß6†ìø<ÁÎ;\4®±dÖ¦Œ”!7¶=š¶îLD±†Ÿ…Ê¡=ÔGÏTÁ…TßÖ†}ŠQe©wµî|›û¡,3?ƒK–gL–”y‰µH¬Ã(ÿ-£ëŽ1iÀ¤÷ A÷°wÚæË*.Ö‚«Œ:3‡œ[À £×4ùm§%U±„ïZ øKWñ'>Ã÷þ%Ï›¿Ç«úó|¿ú{@F×fLwÇ™ìN`raËç|¯úIî„}¸b?;Cõ[=båJA5š¸Aƒ»N"GµYHT‚!/àøâIļؽ á½µ›ûž as¿À†çU•óÎà}œ‘±ÃÔS•:!Rû! ²…}‰mK~,Æ$±\Ht”÷Öä»Ì(WžÈ„iH¯ ~oŸZBk65–!M¸†Ênå“‘ˆ!¤’ á¦Ê B[ Þ¼~ÕÀþý–%Ï?ÃÙ‰ÿ†;UÄu3¤³¼Ôû|së4Þ”Ü)æpÚ0=5›kü1£æ>cl ÿZ·Ò–M'ìkØ+++ØÌ"&ç‹3Ƀ5ûaBÿP›Ùó¼vÈ¥yAUë××c ™°Æ(ãw‹4 PÆ;ÈThKw%ã§k“Ú’£‰M5i!šjMø @¬ ñ=¼Æ ™êÝö›¶c x–ûœï.¤ïJÕDÖOPŒ8¬õ±jÖ@¾ÑC/^æø‚ép›™É^3nx†Wv~׆¿ÈŸmÿSÞjžà`µNob/–Ú ?8{‹ÆkêÒx-K–/¶-1z½%WLˆáìòrLwjÞåòì©ûú~ù‡Òl½ŸsáUGŽók—FmUäºÒeÄ„‰‚Ô`þèQ„Ä §jR„Xà¯m¸ÙsúÆÆ¶¢ßÖ ²i2Rˆ%©™'vop1ùíÖ7FSßFeÃ!Yаv¬w›§z¯ò±¹e[» g§Ÿæ%ós¼à~Ž[až,Tì“]îŒÍ3gú _ze‡7Ï÷ijO½³ñ ¤0Ôå]‚‹¥ÖÑÎß­”iÍú‰¥£dy,Áº]›ûÓ?V4¾wÓïWœ³¾!¨raíRâ»Lš z7“X‰Sšb(?±BÈZ¤ù£-õ°GÈÒ.÷'!æÐHì‘QHAñÂFÿ@Û¨!À¼Û¦²†Ý<µ<‹‹Ј~ Ji9 ˆQôÚ-Ææfቧ9'p`¾àòú™L91jñ 79›b'×ûèdƒ­-^øaä“3¨´ôoº^ãiA“;kÍ"©Èææ&˜™^ /K‚)ž{€p,h¼½»7øï pöíFÞWA4úæ8¢ðŒÄj !F?Y™MŸIH^S: «Ðšä¶¤8 D±š[ñx xbYp Ä\qü#›¦Ÿ¬zŽ4[\íîC½VÞ‡ÄÛkš­ûˆîBz}t{ƒcåË<£ÿ†Ï4¿ÁØîKìsF@ÑŠ2î·¸˜Àùo,Y9NcÇYñÃ8X½]Ú|ŠuwŽüz[χ@jC²&°¼ôeYЄ îí{˜–ÿH¦|oèuÀ-ú¼/­Q Ã]ÿ“ZSÛ3i+¬ÖoeÙ×ö,G Äsiû*šzÀ’ÖFeð¨Äbý4ËBh}y{¡ššúâdÀ4+8¶}ƒ‹ÝýÉ•k"w4Ò³­2íjìhyþßräêr4»Ì"gùÉ™o3[®е–1zLOÒ¨Á;±EžC‘“ÏÌÒ¯„àjlÑI™ÁFM² #^…Ö—Ó¾€J`õä YÞ¡–Œþ©‰ù=|2ÿÈÍø¤Y×¼PªfÀ¥Ë×£†´Û>¦¢CM5WJ¬ý²‹û“P”ÍÁÛõ.ÿþæ®ö·ØuCZæZC»Š£bB¢}À‡È$ìuѲÄþ8X‚Bpر‚#ƒ[Ü*fÀLÛù,qbl!©Ð!â±CÊ}—c Å©Ðîà«fýÏ”®z–«3Ü̱À1·ÈÜóˆ IDAT‘™kꆯ¾q‡³×-¤ –ÛÞMJƒwì©OOEš{¬(,/-bl².nê'ïêûiJØïiã}ÿ!.µvv-"rÚ¼¶¤õË‚Élô…íU]ÎÜxÿåíç¹Ô ùW_â=ó ¾ví-‚F@5  c’ v鉱‹f¸ÕxP\XU·µANE©[ùxROb5˜€Í ˜|@gaμGskØu°Ã#øÍ7ydf‡G†o`; x)0™MîËXÃ`PñòÛ5ƒJÙ}éÛHS†RʲĻXäØêF¤#£ÀácóLMÎQŽMpiÇ?õ!¿HûÀfüþM} nZïªÊ¹sçïòáÉò›6lB16'—~˜-Ìâ­paë*ç«>ý,ÃYah-;6çŒÖÄFút¶ÐúdCPÇ¥í¬m_§ïI'«i¢ !ÆûÁ§xV18<¼É­±Y0±vÌFƒ“ú’# Zîߤ³/ 6C².ª…cÝ ÆË.ãÖòÄÆ¯sÂÿ€+cËi%$!3&6,A‚g~ø6¦J6·jº‹`fç÷D‘]lå¡’®À´7šònÇrðÐ1ò<玷O<@¸)H»§,é¾=@xäskçÎ b ø»ÆðF[K]1F’È“Ïæ¼veƒ-i1waÎönrcpˆ©²Ãõ °:}€Ã[|éúoú!Ʀ¬p²ÛåW=FÇäinù!¥K5²cF8:¸ÎÙÙNíž'Ö¾¥‰ Äɪ6Á§ÿ†ŽV˜±1²f@.K3HaÑ~óÓNSÙBn•l~‰c ó]Þ8×ã싯ñÙâ ³?ÿ+Ñ¥…xÞØ;NìŽQÓ.¿%mxôÑ'yíµo¢ÖN>@¸ï¤µ¸ë} û®šî|¡á¯†Á}îæÍkìîVLLä#D7:SêÜ„‚„Ø ¿0ËP5ñÆÚ~(ÿúÒw)ìHôó'6/r«©ÙÉ2l–cDØÃ÷œã“ƒ›I!ZZ¿ „¢'¤¯FXÞæ;å'ïVúzÁ;†&†ßÝ.ÍÖ4v|›¬TBãr’PCÇZÆL†§ÃLY‘õ™ä‘ÂmjBщZ[Nqq{ÀçË‚ÿóÎòÚÚE>Åçés)øˆȇÄêp™"àKË'Ÿf3ã—·gÿ7 à$Ö~¨t÷íM3àÒÅ«´™¥öSš ÄÄÖDÁ˜åfÝKo8‹¤Uúưimâ-ç¼c7U´F&9†(µZÖëšà]lÁ )2—Ê%¶õv‚'ך&/cˆ×h 4BpBp†ºîrc}žª.Á¨@–çˆælzý!W‹Oò—ÕM-cY‰†€÷“´5“œþÐó›_zï_¬©BŽ]üÜ>ÅÄÔ4½­âóàþ|ß‹'ÿ@ÛýKcÝ#ì7`{AÃVaúÜÙsŸE[ˆ&2:{0ÖRïî`óxéW¦2[1É_+5<59Çs“û9Ú)(|ãÎ…ÔËm-»§ú{7T€§Qá…훼è†PædyN§®9Þìð‹Sûuì¯7¸:u„ù›—ã²ÑF‰ežšb|C¶[Ap膅çþ!zä»oݤwéO©ýE®_n8q´àêí&-qC¾ÁÎl‘ã¡Èº JVtñM`}gŠÏÕõ*Q)ôºgy#š´GhÌÍÎsc½CŠAÿþ2¥ ùGFãzßóèxîΪ*çÏžACR-i3JÑÜJИÚÔ” ¹¹±Dn;oó½ªÌg~yßQV‹‚n0XõŒÙ¶¢D0âcR$µÕ5ìÏ3ðŽ¯Þ¹ÎWzåSPQ°£oKÎ ˜¼`ÿp‹ÛÓ‡"ƒÂÊœ1\¯v¸Õì²ã+„è²nASíò.îÚY.M}šfbšÞÀ01ÖÆö±ÿ;¦Ý6¾Q†ƒ]r›3>>C§;•‚‰É$ë`nnöRûT+"ÚLœûÛc¹Vh†<¼Ÿ¼S@Þáúìg3ÞŸ)ÿÀ>üA‹Þµš  9ú þ'nÞºÊÆææÇØRŒ‰kvŽÎmSý¢ŸýÜÏ¡;Âpí*¹Bß7,º|j|Ž}£å£"ɱœu9n-×¼Ò. ‡Éc°ÇŒáê`‹ƒGòœÜ‘tÉs2 6Ëh².®¢¿ÉÊ¥Wé÷zTÕsƒm¾6ئ)²h œrJ2~fvla ¹rg;T×nsaì|Ü”d’ƒ¯ÈTݬ¤¼ù[ø¿Bas¶oï A©Ç¦Q,>$rG M=d,‹µyÑ쵫'% Ú.ï¡>úqæï°Ý1¾ôò׿Kï!è½ÂýP>»tû=Xê+·†Š÷ŽËkי߷D{[…–4Ki„¸Ê÷ GçWîóøßýjdÂLŒ ÔѬ¦糂¹pŒïõwya¸Ëº«p ´È3𦿼֏¼ Ó¸â’Ík b2:yÎ>Qš~ ÈáV1ËTwšo_;Ï ™E‹.Æ9*kEÀOžg7»‚¢øîmžøüÏòu Y^ b)¬§n 3Ê•s¯2í÷ÃÜOS׌BÝ¿ƒÉ&QW{T™À¯~áQb&,®¨Ô¸¹éÚP•dUPc8zø ¾5–›Æ~üeîÕà‡í{Íù{†_Óìv »Õ·ÞèuÀÂ… k<õé•ok«"Uªd&šE›¨QŠ™)j«˜º¡M†hVJŠɸ*Ï–OwæØRÏmï¨ÕQŠ"aÈeÉgÃØ,®Üo Ì,K60V{.’5ì¯7¸püI^<óê-ÁÔ˜25yƒ;A¡;†Ù÷$zhÒ\f|ÌRfž~ Ô)®îÓÛÝ…KßÂÚ“”å8¾Æ?7D¤Àk­@a80—Ñæìƒh¬I³)ÆHYÝVઞ…ÓØ¼ƒÍK*ÓyzðÞ+ä­Ù­°GûïœãÎiQDޝ­­a5¦'¥­ ‰h-±B1飖P×H'Gw‡ Œ¾ËÅê–´tƒˆ&9`€ †À-`Á+¿š o£œÕŠs¦ƒà9áúü”líQ[ š±¸Å9Ÿ=Ô|vþ2›aŒÌÑ)fèÌÖh©ìŸíñƒïþ%Õænøý4ƒC¨N0Ó¬s¦®qç9öÐ]`ÐëE¨ÅÑh\”¯Sd™Òöq ŒªíR¢DGÃ) ÃÁGØÞ¾ÉP²¶Út¯é~9߫٭àßU»dÆÛƒF»¯ý× úO.^ZÃÁÚ$¤dÈGm¥Fˆµ˜™}0Õ‰í­íz¡¢Y>]¡4ÄÊLŸ0¹ i%¥X™²ßÆõJ ¯®ªP|,>;„þ÷¸S7)C'ìl¼‰×`M5Œ4®Á5Î;ª*ÐÔm€  Ø¨èöHCbóB »Q8zìhŒ×³‚OM±rŸ ƨÝýÂ÷±½+ƒÖî‡óúUW×4õK¯¦‹Žyj 梓 M‘¼‹a­1˜Ãsq…^…¥¾ïЀ:4¸¸~K¨1¾Á„ 5¸ ãj¬«±ÞƒzŒÆ»òïï ñHÓ€«1å4¨‡NÕ†ùú6MÞåÑNÉϘŒ/4†ãtÆËSÝa·w“ª²if©4Ã7 Á×1Ãå¬@XQ×»qzk Ú<‹4æÓëêºÁ{‡÷žAeX»² ¤…ll–šjTUÁ"q"€Ã‡÷œÇæ%ƒ2ÿ©wò^m¾¤}`a¿CøÇ¶9k}œ¹kçÖ"÷¬w­I¼^¢X“£Á§g…ìÉl@Bq5\JDx2ß`‚Ã!WÓ`]À¤„ÁGÜ1Î#®A\umzÐï£Ã>f¼‹Ì!LLbP¦{ŒoßÄ"˜N‡‰¡ —»[SäµébÛ2\Ø.Òb§®†äYFoçÕhÁ€þÎ-†áúŸ ¾FL\›Ü¹!uSáƒòÆÙÞž°&åæI«=ŠO”¯ŽŒ¯¢,ìŸ!/JÄ*ÍŸyˆP$ö0aß ÒÀeèëªpöÜÚ¨L‰‰’v豉ÄuU`| 98‹à­"¿­Æ9Œ«P_#Þ!¾ÁøCÔrêt[†â$ñiMðÆA]G­viR ‘á¦w‹bØÃÖCŒ l99èªu5âKh)ú#ÔORô«ìcü³ÿöŸ°°ÿ ªÂ°®ÖUÄc' n‡Ì×CQÕMÂö+„ú6ÁŒhÓDrI Þ>¿CkªES‘£Ú®NÑ2z1¢‘ ä9ÄúrY,ˆþ‚WWz°âl ˆ÷±¦Ü1ÞÅãG"Çw^ÇO °Ç¡X2”+–â` 8Ø EŸÐï¡UbÐ'+KŽ>ÄÉÕO› ò‰a?sSMµ»»€AK²}? †ÚÐJpÚà]ÍζgýönRÞXzmleLF\e´Ë'NÛoKÌ4OòîšýAÚÃîò6Ñó/îv†¨Lps}›ƒbn7.ÚÞºŸXÄåÜ ‡ÉL$¦¦ÒByŒÂ®v=n“êºSBÔd ÄR{ĘQB!H;tD\ †Ê [ã%ÃnšÑ ÊXt†=:ý« Ç ©XkÐîbÇèž(ÙÝØB{1*^½‚9|‚º3Kõ‹hwœmu”@=Ü ŒP;ä‡âÒ˜mô¡õ5mGÊ™ »Ü?‰‘XukŒÅÕÃZµ Ï»“"=v!CLÆm3vú/ñN?ý°Tç½_ø„ýÁnïwnÛZ;µ±±…1‡RÛOüDÛ²ãÚ §©\Ø=†ŠÇxËŒ¢) ií2›4ÚNdMJˆH*;ÖQ‡Énnyëȯ;Àöä$ÃÔ^S’3®°¯7`yÒs<ôè4›H¤ì@å!"&‡2À`ˆ†Láëÿîwy~ßðûÆéoûïzi$#yêmÚ›Á©ÆbDU0^Ém'._îÁ§S*Ó(év÷Ibd×A`~ašññ)†õ5rø×÷ ùALÚ Ðö\É]S.Á¿ÜÔ—/]¢ŸŒo´¾§½§F[Ü` mç9¼ˆšß$_œÌxÊíJhëÑ’VsßwÒ®Äp o.Lð/â+§ŽsufŠ'ˆçvf8?3ÍKùþ"?É_É Ð Ã>¡êƒw9´©±Û;ìþÿŠoÙS4ùÎÅóÔÁãšM5@¬‰éWïúÑ]MM$n!PЧc`ðÃï¢Í0*Äém•8ÑS WeOP£ 6püø Áضÿëaþúa¨àß ßÿ¨Öùo5®áõï¿„ÙȵáCÌâÚ{eº>º°²ý°‚¦ªÕhòc®.½§£×dô^,½­ŒðÍ“‡ùýO=ÂëWnóòoü!ë/¼žVZl×{œÖ ‚gÓ ßÎŽñ'ö$[j#ëUW„¦Oy¤$tp޼®Ø)çq!.ȧÞ<˜á.µsQÈ!6-¨V0QJ' ÉBÃaw‘©æ*âj2[òË4 cE6YÒ:ç~Τ-—ÖvísÇêêID, –_šcê‚~˜O _qv»—4Ïû¦áÖÍsœ}û<ñŽ;z—Ø'Þ!G‰·QPMbáÈ0i2Œ¾U£ÐµÍ‰§’t— MýÚªJc”¿|ô_=u”~fXxö1&ææxýk/ð¿ù÷Üxñud0$àbsÁÐ išçÖtœ?Îã†tcäS (Ž|`ЙbH†>Þ S£€dx'bI÷ð aeŽryŽ=˸ﱛ`×̳kJvg³çÖ{¸blFhÒª©(/…:qü‚°xâ¨â%g=Ï>½GÀï'ôz×탘q ÷=\…ó çÞ:hku“¡OÎKk ¼s©K1'ç0 9«¶÷²Lˆ;™»‹ÄÇø= |çÐ,ß>º¯ï=j…?óŸXdØòÝ?ÿ6/þ_¿Ç­ï¾ÖðQ*_ņ;“±®håm"höÐà9žÿá¤(,U¯OÕ84üí Ø½‰XcÈs‹Éâ=A‚÷ôöíãµOü"·÷d×NÓH÷ñ¾(.t¹y«·'zHÚ=ZÜg»j­™Àñã‡0©ôxÝ›v]ò÷ë·ßU»ßo襀^€¾ þ²áì[oÒ¶´´7XÙë6tTiêcü9½€.CRžWhïp—Ø6‰ðIãã€UnŽå|eu? Üh„Rxìg>ÅâáCeAÕë±öõoñßü}vߺ€ o^•Êi‚cË{þTŽð½j’áÆ½­Œüÿ3üX‡c³AQ‡ˆG6n¡ÏĸŸØ gEðÃ>!x\Y¢+G‡æPQ|pɧÃúš‘ƒSÅ'³a$Œ“lûÌÌsû ÆÐ¸ì3ð»5¼ëö^š½÷y¬Ø Í·ƒ¼ùæk¨· HjâÇ}šÉ™µ÷Ä„X´Ïêêhî¨J,9V“„ÚÜs|êßch ôøn±Ð/xrWåØú-¾øÊüÏãc<µ°1–"7lÝÞäùÿø§|ï·þ˜þ¥äE‡ý0dHÃþ¬sœW¯vÉ–>ÎÎÙ·¹óçÄÒl,Ĉ¤ŽÀÌ ¡Ùncƒ4)£PüæMšªg9vóè 6NDïX¿U%s†°5é‰Ikû^Z€«sÇW|l|üÈ@ÚñÙZJóBÓÔlÝÙàÖ­w ¹–$ˆ&m‹èÉG¢ßSiv ‚/F °¤Úëÿ¯º3±ëºïû眻¼eÞì3\†äp)JÔ.Ù”ãE-ïŽGHZ7±¤AÐNh€MR Há-Э&Ab7iÍ$¶,Ë–eɭŤ$j¡ÄeHξq†3œý-÷ÞsNÿ8ç¾yóøF¤$RNqqß¼wß½ç{~¿óÛ¯mj¥¯­€26‡$Ñ£næ—^½À¶…"ÝQÄ¿ÏÜ×½r"]ò¦a|xŒçþöÛœø»o³43K¢4¶*òŠgoÚÍ™ gàߥã}dO‡‡g”-g­Á´¶Za {?Z»-F‚E›j2¾†¤½ që^Lk# —.—í²u´ª’ÒNP5ÖÂfóÆíê6vîÜ @…€‡·³¹èÊÆÓ³L—Wq„Ñ1ÃãÖJV]µÖBºOû>I»KüûQ›¦íÒz°(«ºœ‚¢Oïè$Á ±%¡µN¸iô"Ÿ:;M!֮ꢦ)Qün x°{¹\ÎÇ‚8QôŸîã…oþG_"Z˜'Qâ¤Â’Ð<½s3ú×¾HRh¡§#G("Ò.."ãžkøqqñ•ÉsD¯¿ÃãxqâZ;ƒÊpó.̦–KVŠ×©š¦%Ò·Ñ©«.ΚEî´™Û·Ûä@<µ—:EÖЮْv­”½c†óRUˆ“˜‘Áa·âV¥ mÚfËpØ–©®¬‚â®»íÊÑ`C’LšÙKR#¹*cxµ%Ël6K¢ ‰ŽFQ(.ðñsc„J‘&mÙk¨ÿÂÄüJ÷F ù&òM6ö  \Ž8ûâk¼ô×0ûZISV1#TøÞØ)Œ0„¾aKA@TFéØyÛŠnQBÚ¹W`Ø´÷"=ç )x‰äÒ¸ÕÝ$‘Ý»…‹ùû–Ó³-w°2‹I§ß5]¥tغ½§*¤ÍEW•ÈëYúº€{Wºö˧A´dƒOê ·Á“øð!R4eúQלMi%î”"„@4ùð“gñj~Z¸‡L¿oP$Òãï:ó,´äž•Ѿ0ÆË%·¸´ "€šE¥ÙOÄÖÞN¯X3¬Rº:‘Q1=4Fix‚°)CT¹¸4ËÞÎZs†/'\˜ÃÞ«„ýߥ¸8oË´ l )ÉïÝŒh-ã5#Ô"Å9’å~kƳ϶(3,.,ró† 2•Âݶ&]±ÞÔöà¤5 Éø<÷ìq–WæñLܽXL¾…m5¼Þá$Û+4¨5ãí°ñêá‘K’ £cC”‹‰$AUSoµ£xuÅÏxzÑ…VH£ºO­ -¶$åx6`zo/„­¡£ ­+Eî™Xªº‚1¬Ú¥vr†ð ºk#K…¬ý›Öd’ˆ_<3A!¶ÜJkƒÃMLíʳؓ 6B!ÐH|*£ŠÒ™ˆ`Ls§ç3²÷‹  C¥ÒIµ¶€$N˜¦ïä›ôöôpr¹…Ääô¥3Å ”xÒ>A¡¥;»í3KH‚„X€‘1Aî:òa6 s—Ù¹«¥X°¬%/MD,Î/Ó‡ŒRÚRÕé?¡…ãP†$‘<ûìÑZcttijQf-ëN¸’•뢄53|m^¯úa~8ÂÄ–Î$IŒö1æýö²iã6G­Öqoð¬uÅ·{ÐÏ~žH‰}4Ö³¯fTq“oÇÛQ½Öî›äX’D\š™da¡„v–•¹,%¤e”´™é•Ds:ôÓœ‚ª –^¾¿­É 0vÿUÂîÙ%Wfà cF2½ã&×a÷;‘ðYYf¾vçoòæ†Û1žM—õK‹øÿ2…={ø×_ù êÝA&Ÿ£Ð”#› mÛªšzeÅ•e. œ¤\‰²ÛLÎ<ß·UHé¡ËYt¹ðð…ðŒT4od!£ÚýðE–»=Y›¸·:ÉZ» 0 »vîµ,Ýæ‹Õ–Îz+§Èºþv´ZÀuw&:®uÚXÝê IDATB—u¨*OS}ŒÑÎ)“–¯ÔAÓÝA:³©ÕÐ¥6”‘Œ·äª‰ÆH6.,Ó¥R¿•j´QL4oCø!Ò€¯qaK€,ÈqÇù…ß"Þ¿­Ë”o½Ïv/Êæøð—¾DáÞ›hjo#ŸÏМO»ºZ„î„!ÆÏ‚o{i£‘™¬u©J»ÅxyCezz%ï"Vl¿)5ß?ý4C—†ª¶~[yY!1:‰v-¶m¤Jš«hÀE\¦Ý|RAìØas‰-m˜ö Ål¥SÇb늋KKYƒ¤¢5—Lc(ÄE„°Ú»V e43døÓx?Ë_úÚî9È|l­Vx•o"iññîÛAó–Íd³šs!ùl– ,åzÙÐCè„Hi"! }%Œ$xΠ£Ú/S» UÌ!µ³¯£Y¨$|ý'ÏäÜF[cXñÆ~Ʊ¶çØß;vôZÉx1¼{¯f>}Û`_ü‘Ó,ÂÌh­èï·…iFºâìÂh‚„‹+Îué²%‹Ò®ê`‰<‘É râÖ·,¬8 SU±¨ ‘+=壸õWÿ’ Ñe’8!Ž*$Zc´`*ùÚIE¡½¥Z%ÑC¬¬)3ñ$ÑÁÍdoÝE+ˆä3ò¹<¹lHÇ,GK¥ˆrÛþªË "ƒ A# ™Â,B*VFï!ZÌc´ë9ª5s¥ß|á;Dª Î|ªMš÷•†*9³©´@+EÏÖM~c +±xÿ5ý–þv¤ñ+„´Œ4Çb!>=4؇J ¾ëbf„gãÖÀ’®FhÄ–íN]½´2†))PIA „ZÓ³°ìŒ”Ž€#PÙ„6H£ØtèV~{Ã<ÿyÔg‘Œý5hÍ›3q\â—ïÌZ A–J+ØòÑ6ù¿Ô•Å¿{7¹Ód+%–––1ÚP‰]lÚÔÅÉ7û(d ^š"s²‚Ó*…‰_Døí$“w°rñ}„úE‚¦EJk.\šâ±OðÙ{>µêO|) ´²Â™7Nrîlcc#Ì/Ì#„G{k†RET’½¬Ï¯FáÞ¯?O¨g´VÌ-Ì0==‡ ­r\ÉXÉR€Òá$*qì!7lA¥ôj jÁ¬'ˆKETb«"• íEMZìl-¶y$d›`c›;ÿòþ“ªtåìÒç=NMY„°X^±•ØŒA+ƒVš$£Hîì¡y[­mÍø¾í‚ ’˜\Æ eZkWJggYzé¹ 2ÅSªàåFQâ"ÎO¢4³ A’*Jñø›ÇøÑÉ[“©‹N)®,ñÔã?à«ÿéùÛ¿ùæ—–Ù½ï÷¼ÿƒlÙ¶Ï@'Z;yðÁ»ßÈPGÝïHÏNêÕËSŠDÆô_dÓ¦Û«••”Õ•dkw¨Ê²-d‹Ádr˜-›¡ ëǶֲ¥¦ &ÐڦƵ”K:5Ã:N(fÑÂv¼÷%4ïÝK¸«—[„ÇgöÂ?œS í–aJÁ‹£ŸÙ‚°yXÚ˜ja[‰i5B“ìlã¦=âÕÇ¿AC±TäåWÏHI%Ñxž¦%„Æ`.^¤if–é’" š¢>¤Ÿ'›-`Jr®Œ’"• =ÁcßãÒäÃ&æç.sælããÜ}Ͻü«ûeÚÚZÝV%ÐZóôS/òÝGþ7 ¥zløkþð‡¿pôèÑYîǪ̃i@¿y»`_!¤ílŠÏ¾!b0Ðwžû?p{ÕhmëŒÊôwª6eR˜€›÷cú‡œÜepÑõÑ&A –’K@€P<¼lÅÂNhíA)M"á®Ý¤%,?}°‰W†'ŠÚÜwF—oL$Üⳡ¹ÍE}zhã¥R8>sI… 3´´µ35:Lssåâ×1$ʪ’ KeòÙ„ÐϱmÛ..\àòÌ„mr¤\ª ”Æ|’DóƒSã¶r”6DqB[[_þÍß ¥¥›"¤«v‰Þí½Ì^ž£½­•……ErÙð¿¿Qtýy]VþNU/˜¯Ÿ â‘œÇΟï«„v¶•4˜05—0*5 käM·Ò¹51šb6@‡Òr“Ð\I/²Tš´·àó·}ŒŠÌ¢´¶(ÀF†|ùPèR*º¿Â#}e´†m›Èzˆñ¤+bšÐÄÑ[7wЙˆò x†L6ƒïZG‰6”"ÍbI‘ÄŠÃ|ˆ-=­'”+1Åb‚d –¶dÕ±c Cïöí´6»¢~ÆÂb'YÓ³e#ac~aŽL˜gvv~óáÇ÷Õœµ€7”Êß.e‹š×0¡§Ž—”Ù;yqŒ•b…BÞwNŽšî÷¥ð@)´gó:¼m;¨„’ ’€³'U\ñáŠÕçâdÑJüüÇÉâST -\zr¹ì£1Æ–Ù´¶ìæÕá>„2vÿÖü©PøXkXÐÜJ¦´DNhâ„B!O©\±R’çøÙ¦ QKŽ¿~æû,Ë ùƒ{aùC]`c§ÇïýÖÍH£ÐFñæÈ(Ož|‚îÜF¦ûÎ3|f€¥Åy¢¸b«M¹9K§;“³õMG†Ï€Š(Gfg§~ø}V©¸ðF¬@¼cÕ+}Ý⋵є*EF‡/:Y]¥ˆªu̶†Jª—ÑÙf̦îêÅb)0ž[˜ÂJï¾ð(fȆ,û)“Ï<‰ò|–b/M"µeШj=Ukšø…y2z¥ªÏ[Ä%ÏÚè™B‰û=-¬G#0QÌ¥ÁA©©x!Z†äAWhîl£iw/á­àà\ÞÝÁü¶,“…ˆ…A1SÊ^¦¢ò(B™ÒVìÕÌô4bï>’ûîãÇjŽDC¬mäÙV¯…-‹K´}æóèÛî@Ë€åRÌ£gË( ´¢3ïñàîÐÁ‰VFІcN°B#” ¬%½ØÖê±gó.Æç&¸´8‡¿_Z¢)[€>Q”"M°ùNæ÷üsÔbæR+^Ò†d ѺÒšÖ=#‘Ù#:‚Ítl)òÌÉg8¸í&²™¼S? Y?$f¸ùÀŠ+?üÁ÷0*¡gk/^5Рxî¹£šòÄq?ùèGúÖéÓ§k]›õQ+é^PuY¼+Õ+½XÆç¥bdîè?o-Ci¼Xµyi36«6`—ò¸yà^/)a¾sÖµ7´S®³“–»žÈs¦Nð`s¨l&§'¬¹UTV*Í nÞœ#')+)¾}¦Byy‰ _=ôK|+x”W†Î’VbT•˜ý·ÝÎÂì,ãCðð ÷þ<³7ÿ3"7lDNAK’År½Sßêñž˜Øx o.æÁ›?ŒÇ! ÙŒÞ\¨1B"Ä÷ÿä󟧩PàÑGÿžW^9Ág>ûynÚ¿!›·lt\L¹Shö8räˆa-ËnÄÎk ômëÙ©¶ðŒož×sïÜåi._𧳫Ù}Ú¥¹Z ÒGÅ "´qeZH”­Ø`ˆYaKÉä¬Îî=c4ÅŠB)e=ƒFÛ[΢“¦2xs ØÙf8=k7[ƒ ¹€ÜÒÉø\ é¾ôÁÏsÇö3üøÔsŒÏLWb^|í8›7m">Ù½‡™Ùý‹øXó¨lÊ Ú ¨ù"B·–{ 7Ìà –(‘˜ˆDN2·¼™ž°‹¤"‘žv¥,FÙ¢ú©%øÁæèÓ?æô™sÌLý)===ìØ½‡r)¦LÏ.E1žï¯4öªž°wBÙµÀ@·f’ç&—ýßITÄàÀí7ÛJÅ.rÔ]-“†”$:AêÀ½g°uK5hMœ$®%§õ/Û8mm{¡c½jã Jd,œF9‹4i—+ûá|Ù÷lœ1(-@ZÉ|ø²f¡Xfg{µ!wmÛÏÛnâÒòeþòßdüå>Æ'/ø>•©³»b´ ÉŠÐ6„Û¾hiiò$³;èÚ\!Zš[ؾ¡‡ízØÜÖƒFGÊ&hƒ2éùßsñtö¹JÅQ¥D’(&¦ç™_æìù €µÂ•Ê|?$—Íeívºž`FÍùÝYÐÒ#«Ê/zÆGiþ Ü}Ï>Œq¡ªí ±AxÖ mî6v_Â/¤“‘ZÔ<éÙä>‘ƒ N4¦Ú·Z³i›})$k -ý!ܹ-Ëÿ=µLBƒM½‰4ôOUèÚ™qiJÂuï‘t7upïïgdhˆñ7ÏS‚8¤}ô*7}Ï×ÂfŸM{šè-4±«w#{ö «¥’2:¶-Q.£=[1ɸ ›ºk\:‹™FñìÓO±¸´ÈíwÞEgG'/<ÿ‹K+îsvtuµ±#;ÿÊÉòSÝQËÊá]Rvø£Ã”6´é¾½ïü¹3 ?Fa°…kµ°.½j&¯ÕÌÈ4ˆØÚYl˜­V m$BCÆ ¬\jÕ`”0dCº‚"D(–¢XéµRÁZðº >{›Ë¼±"•s¿ 8>qߎ,Ò…«¦Mæ„ÐÜ¿ÿ†?9Bea™Ù±‹øaÀÊßåöƒ÷póÞíìl÷ÙÜš#+z1IÙƒ.ñ„Ä ²V$LCࢠõ¼ål{?=5ÍCûŸøìgDÀ¡C?Çÿú³ÿÁÄÄ8…B3JkF/Îܼþ¯Ù×pX;jÙCõÚóþ-íßQ*•øèCGziIVûñ´îàbÎpMJí§Œ1(£xâÔ ”“¨ÝtWïAz;7­ò"#ð=x²_[›#HxhO†¬·Úºp}K¬1ÑŠ×Æcte æ@À|ni÷È>Aà ÿX´ñ…`׆^~òì3,ºrÚQ¥Â.ñËÝG{&Æ7%„Nð<Ï÷ñ¤oѦJŽB…ñ@˜jƪ54Y°YMƒ½õöÛÙ·ÿ€‹ÙƒöŽVÞ÷þCds9z¶ôriz†¥¥2Ò´_^Ic­ž!¦G­¤nóôÞئÁÙ|u ÅÒ2㣓º2[Õ){Õ¶[PG.rÒf>j£‘B’s¶Z/¶¾i¢:Mø3V oÍ…´å"<¥1IŒ46LU OmØ6ûRs×ö62ž hn³Q¢Bkcc1/ÍÙd{•«„8Nˆ£„ïù¦'hïhgï¾ý´´wðòË/óÚ‰—ðÂÏÏÚ)2Í\N^«©Ì¤‚cš®¸ú®í )\¦³©vP÷̆¦¦<Ÿþ̧ù¾@K¡c ˜ˆÚÒYõûsý{éûï(x¡x˜-Ñqéò¬†ì¼›.kÙ³ ^p¿-„@%±{ÏJÈAsú>iì™ÅË.1NT hõ¸zä I9qû_¼® ¸RÙBíyÛB¢Å+±·MqÏV8°Ùãþ=­h• Ula’ðã=ÁÓÏü‘ØÜ³••冇†l¸´hŸ±[¤©>§-Ú Ÿé¢Hs¼µp‰ÿP«s• ´¤Xœ[äô‰7yì[pü¹£XÔc±"îi€Ã[ŽwCÙ¢æµL“DZù„÷]œgqa‰æ–0ž³J ×7‰'|”Rø¾¬^I iÎå0ÊJÒF ÊI™ËK ô´wb¤ÓË1td yÏ vtút7¹^®†š2.ÏÍXuNødB ûµGJPÐLOMqöÌ›|êÓ¿@[{§Òåéø~À¾ýû˜e|lœoµ±w'Œ¹Ò•HçYu… tÊaœÆ‘"£©F–JáEÇ'`èÜú‡ú™™›%Rš¤š7ÍRdö§ó¾ÎqÝÀ®½*¨mÌšããeM’D õsËí{ñ„Áhéꇃë@Š–“Ķ3PÕ&gÈx>Ê$¶^¹ô0žÇÄâez::-5hk»þØM!Ÿ:˜¥-ë!“2B—Hb ŸV¯E¤5”V%~$«å»¬ Îý_¡1¼vâraÈ-ï€j¿¥R- ]ÝÝx¾ÏÜÂÆùï-š4jÒhw}c£D-Y+g½³ê D°0¿ÈØÐƒýôŸïct|„•r™ÄÙ!Œ;{Æ—†|Fs©­)|f_oë㧦GÖHÛWýÝZÐÒ³t‡_9‘‘’Šœ¿ÐÏ-÷ؾB[E@ ÷˜•WÊ©K"±²²„IJ4yY¶tn ³¹ƒœ/‰£ÄZêéj2HJ{øÄˆa¼ª¼«œno™gjܱ˜Ø»N£_¬)7•Þ_{õ;wí¦³»ËE{Ú½4mÍ䈣ˆÙËV‚¯¶‡®ºtA -ÈN–Â#®(&&ƽ0@ÿÎ1;?G%±0Vг,ÞGQ}BORÈÃ]Íþ3™hêÙÇ/P³$'FbÖæ{] øëBÙÕ× s¹§•…²2­úúòãÖ HgU±ž)WHâCjdñøÈ‡Ù¿ó6vlÄ×`´Áàtdõ_/ƒðRÇîm6×í…Pø´1N`³Ò¯³Ýbjþ í#P\*255É=÷ÝSzÕ¤ººe¹abŒaiþ2èíìö¶S§Bà,_^°ìøÂΟ;ÇØÄ+åÆhb•6ŒŒ"#€@šåBÆ;¾{k÷ñÌËCçX0S°R “Gm¢_£?®ØÕ=С0ÇŒæcÃ#ýÄ®sN†Ð ”ÍÙ¾Õ¯}á L ¾‚­…nL”àù!"𰵜Ôn‹¯9!ÎÉÁΟ²d%”M¸CÚ…–:I´Õ¹ VN÷l°`"Ib¶líµÎÕZª©qȳ —£¸º×& &'Æad`€s}瘞¹H¬c”15ñêÏ(ZCA(FŧºòáO¥iy騨X1ÏS—Qf­e=À×Ëè|×” iµìÜ4æ8‘ùX±¸Äôä%6÷´#H-eéj©E ­JèØ |ø¶–9X–o¬ªeªfU«~ƒuŸ:ï¾1Žu"\UDé£,HiÕÛÈfÕ’gŸqäâä$Mù<]WU&‘ôƒ¾‹%ƒ¶Ö6~ðíï3pþ<ÃcƒËekÓG“(f…NÈJMÖ“d<â–Ð?¶cc÷˼tþdJµ³EóõDs±–²SÀc rçzÐë©ûù³×ÞfCÎ;6\ÄW‡Ø¸¹Ýíµ)W)ÜÊÞdpІ CÆ™X«›«¨.[tgµè*½Y‘Ç ]¯Ï4­(…ì§ÒrU9ªEñ †……y2¾G&"0x~H¹sibŠáÁ.œ;ÇÈøÒhžxêqJQ £m|™§r@x†f¡Ïw2?ÝÔÞñò‘óéü¼42s5PëÙvíëÄZŠŽkކfR®ãž½æÈ„Å7r^Ž’1 ^¸Àûï¿c½mªtíö@…ñ¤ÛJ-›K?ábM\tª´þ_ã;H©&î§Q)Õz¿Â²Y»¦\ *\©l¬z•@ ¬Ä¦¥@JŸR©D¡©‰É©eúûŽsþÍSLLŒ²\Z!NbŒ0äs–²wône ï4¨"¡P—Z²âxw[Ë‹Oœš­Nôô²Ùõ}«s#Š®»–ºkÏ(Ûp({Í¿@ikÃ%Åöþþó<0±m£­ùRÉÔ©guT»}zT{^¹psã¡¥vÒjÝáPÅÆ‘ §¥}8¬ mlÍTíÞÐÆvéÕéI„ö˜›Ÿcjb‚‘¡QúûÏ319L.ð_ÿäQ&vò“˺L"|aûw‚@% »¶ïýó'Ÿ?ú\õùÇ—×c¿€[äF¯»V [oÿ®½p}(û ãJN˜ŸÎ¶_œ§¸R"—ó\+PÄí9Û†Ý+mB»–Ê«T+×&¿eƒS»ÁVVtÎjp#Ö&ñ\wú€ùù9&FÇedhñ‰q—ˆÛµG£(4ç CAT\ ”¶Gr¦«à½fÃç^è›[:°iûŸ€Ù¸R.±´´¸ÉM.¬¥¤FÀÕ‚u5P¯vÔWKJ¼®¿þ»;kB l"ý+•¨ÌÈð{oÞ‰ÐÒéÓ–=kébË…@cƒ„5+Wë”§3˜ê²B pÕÓ(háÔ8ã2û=™¡´¼ÌØÈcC#  224ÄÜÜe؈—´=¤6¨8"DáƒÉeZpwoó~ÿÕ¡¡ô™†fס `fv B/øFzµ`À«W[õ×ltýÂÆÓ³ô¾¦èXÿŠ‡Ò‚áþaöîÛY +–à¤kЀ&Õ‘ÏíÁ¦æÒBº=½ªÙÏx•b™©ñIF‡f`péé‹Ä*¶–8Ç!”²=ÅB¡Èû¡QqSè½´{KÛ«œ6Îðà c㣔£ ‰mÒt‰“ñ †@p1#9ÖžãÅÇKcµ¿wör¿áå«»ÞkÚ››Ÿðƒ/K¥{¯¯ó€!ÍÍ­”VŠ ¬RrÊÂéÀë™5ß…^±¥ÔßÝûWŒënAK–iÞÌ4k"mxþÙg9ê$CƒƒL]š&R¥­ÃÞ)Ùxò ’PRÎ{êÅ®¦æc¦Ni\ˆõí[¿ïÕÞ;<òHùàw,•ËåÞ_ýÜçš¿ñïÌPî£bUðý€ ,ÎÏ]æJÊ®·nÕƒþVöëzQé5ƒ[?®'e¯™ô£oò|9V{Ožz)]è³xI£Ézà AÖgÚ—âåmÝolÛÖ1øÍ\Y½Öòõ¶àú×k&jcצ?îÿêÀÅÉÿöðÃñÈ‘#eÐÿÂZ_{ê)ŒÑœ<ù:…–®)®”¼ß 蘵`_7ª½–q=)»ju‡<}LWÌ^È |›B9ØŠóÍùÜ«3á̹ӧѸ<¥ÙÁÙ1¸qÀ6z½f<ùäãOÝõ¾CÏÍÌÏü\ieå©>ð¡ÿÞ³¡óiÀœ={öæ³./ÌQhi¾ÈZÊ®gÙõ@×Svú¬µÏLƒ÷¯ËWÿÈ5Ú3Þ¿«é®åeïÞŽBøúÆ™ñ#6Í42îì»#­ÞWk»À6Šê‡xøá‡3ããÚ®¯bŸIDATÿõÒØèGŒQh%È7å™™™¡EäóyÚ;:8ß×wˆÕí¥ ¯uP4bãé¸îÀ6×lí· ¶Ï•àfÝ9t ¸2§¸E_/`êŸ!=¼û8üÙÑÁþ¯VÊ%6vw27·€‘‚Ž® '»6mü£§¿ÿýášë¬v#ªVëüþ 7ì5ÔÍ*ൠ§ï§T]Ÿ²r£€môÿôÞkŸ¡ú,~îs„ ¶-Îͼ?‰£®ÖÖæGž~üñÁºg¯Õ±ß èZµë=®?ØëQw=èéûµÕjïåF[¿5ÔNxíý×ç=§ÏÓ¨@Í[Qözj×{NÕpý¥ñzX*¥Ö§‘¦«gáéwx=€m¤ê¬Q­¸èz ¹þ~Ó÷ëç{pí¸aFV' äô3é„4¢êzp®'°õÀ¥¯k)µìFßI@='ªU¿Ýw#Iû=×l¸r?L'¡öïš+“Çë¿#€­/éï§‘µTÝèùj9Uí=¼•Ý»þ7ßóq#(»^¢V5«”z k¿×Øú o´_×ÞýgÒ±Þ­»u×ëÕïù¸Q”žëuÉZªNY&¬Ý¯ë?{½­¯äú-'ý{müv}qšÚÅÙ(˜`=nòžv:RPQf# áÚ@|7À6ë±êFÔXÏÂ}~½ˆ”Ÿ)Ðpc)Û†r^)…_Q²iïß`¯e4ºžªë­}Ô|§ÑÑh¡¾çãzêÙ®]¯ÖÔ¿^o¼WÀÖÚ{«µQ©©ôóõ`×.–4@ÃeãõVKñ4xÝÌÚ×ïÅD½WªÝÛ¡1‡d׎IÙWûz6X;~ÖôN¹Òz2üìŸé=ûÿ×Qn#ªNÇzÛÍÏätü?B¡M¨F¾‹IEND®B`‚nip2-8.7.0/share/nip2/data/stock-tool-path-22.png0000644000175000017500000000146413224651032016164 00000000000000‰PNG  IHDRÄ´l;bKGDÿÿÿ ½§“éIDATxÚ­•KH”QÇ3ÓLRšT*z˜9à¤aQ=°š-,¤ $Û¸k•A»´rѦ¤í\X +(ˆZ½ ÉÐ^%i‘˜ãø' ¼â?ʇ^,<:wn}{¤ïÑžË Ð­ÕHaAÐjà0@\OLëz Ë™i xp 貯–ÞQàðCºFûýÀJ`\Ù'àžÐ ì”W‡EW\úkd[ôÉ.æD‹¸!£ ¬U&…ʧ`üµµµæÒù#Æ_Zl€3@¾è¾»¼(r±Çº$`Œ1æêåæn÷Åß² Hßé@­.*¤ôcúNñWZ^^>c°{ïÁŧŽm¨RVs€Sïcº¨Ó¥®½½/ïïëv ÿ2€z{—ÛJ/Eü‹Lµ)ç---ô?»3D§«ESÀI`°pÛÀˆ[€Ü õ¹««« €êÍ%¹C#ø|Þ¬ eÓ7¯¶eëM~ªÕëpÃ.àaSSãC<ïæãðwzou²tUMÁêåY?V Ȳ;¯Hï¬ÎJ ÉÂè–%4ÚB]ÃiÂáÉ©ÐÔL ç m£z9ØøÅ•+ßBi±1Ƙ‘×W&&FŸ‡Ç>ôLv\h˜Ø·+`€s²/¶Ó­Ó¦4ŒŒun€Ð»cëšoÿÐÜX/‹þŠöÜé÷¾|3šûàñÛ³êÀï²ÿ[ŽjÛ'@uÚdK¯ŠlÀƒASYYi¬ÙÑlÇ7P\öH!!'N’¦‚5ÁÛmmmöY˜T´ 7pØ|Ó,˜¶ÆhFÉ/È÷9lÇSA¹r•× Ry,NuP&àD<‘œÏqªÜ~jþ†Äm±À3Çâ1‡çý%!n|Ð"9€ÁúH$2+ »Š\Väyú-‘£ÏôI‡, ¤›g7|Òšøއñ ì4TIEND®B`‚nip2-8.7.0/share/nip2/data/stock-led-cyan-18.png0000644000175000017500000000101413224651032015745 00000000000000‰PNG  IHDRVÎŽWÓIDAT8­”¿Kä@Ç?&§¸°v¶ WØØ‰{Xmy÷(V[Iìílýv¯Ûæþñ ‹%"x [Ùouµ’L’Ù‰W¼Lfr+Ø8ðe3ó>ïÍ›ðImãÝÑûû!ÆŒÑz„RŠÒtI–ÍI’WW>-Â0ÂÐÒŠ’Dì—H’)××¾[ØÈ:*%Ê2épîƒf(Ñëɤòëc!~vU5{!ïîþr|¼GY¶—.Ï¥·Ny.²ÅÏs(Š)qüþk——·„á÷NF~V~Ÿ$¿‰ãvéú£=?ŸQsÙÜ•°5‘-N‰ãΣ}ÿ99cêz ÚÓÑzNšÎx|\ûF>­ýLéXÂÌ­(ˆIEND®B`‚nip2-8.7.0/share/nip2/data/sRGB.icm0000644000175000017500000001541213224651032013472 00000000000000 lcms0mntrRGB XYZ Ô acspMSFTlcmsöÖÓ-lcms dmndjdesc€hdmddèhwtptPrXYZdbXYZxgXYZŒrTRC  gTRC ¬ bTRC¸ chrmÄ$cprtè!desclcms generated descsRGBdescsRGBXYZ ó=˜XYZ o”8îXYZ $ƒ¶¾XYZ b¥·Þcurv #(-27;@EJOTY^chmrw|†‹•šŸ¤©®²·¼ÁÆËÐÕÛàåëðöû %+28>ELRY`gnu|ƒ‹’š¡©±¹ÁÉÑÙáéòú &/8AKT]gqz„Ž˜¢¬¶ÁËÕàëõ !-8COZfr~Š–¢®ºÇÓàìù -;HUcq~Œš¨¶ÄÓáðþ +:IXgw†–¦µÅÕåö'7HYj{Œ¯ÀÑãõ+=Oat†™¬¿Òåø 2FZn‚–ª¾Òçû  % : O d y ¤ º Ï å û  ' = T j ˜ ® Å Ü ó " 9 Q i € ˜ ° È á ù  * C \ u Ž § À Ù ó & @ Z t Ž © Ã Þ ø.Id›¶Òî %A^z–³Ïì &Ca~›¹×õ1OmŒªÉè&Ed„£Ãã#Ccƒ¤Åå'Ij‹­Îð4Vx›½à&Il²ÖúAe‰®Ò÷@eНÕú Ek‘·Ý*QwžÅì;cвÚ*R{£ÌõGp™Ãì@j”¾é>i”¿ê  A l ˜ Ä ð!!H!u!¡!Î!û"'"U"‚"¯"Ý# #8#f#”#Â#ð$$M$|$«$Ú% %8%h%—%Ç%÷&'&W&‡&·&è''I'z'«'Ü( (?(q(¢(Ô))8)k))Ð**5*h*›*Ï++6+i++Ñ,,9,n,¢,×- -A-v-«-á..L.‚.·.î/$/Z/‘/Ç/þ050l0¤0Û11J1‚1º1ò2*2c2›2Ô3 3F33¸3ñ4+4e4ž4Ø55M5‡5Â5ý676r6®6é7$7`7œ7×88P8Œ8È99B99¼9ù:6:t:²:ï;-;k;ª;è<' >`> >à?!?a?¢?â@#@d@¦@çA)AjA¬AîB0BrBµB÷C:C}CÀDDGDŠDÎEEUEšEÞF"FgF«FðG5G{GÀHHKH‘H×IIcI©IðJ7J}JÄK KSKšKâL*LrLºMMJM“MÜN%NnN·OOIO“OÝP'PqP»QQPQ›QæR1R|RÇSS_SªSöTBTTÛU(UuUÂVV\V©V÷WDW’WàX/X}XËYYiY¸ZZVZ¦Zõ[E[•[å\5\†\Ö]']x]É^^l^½__a_³``W`ª`üaOa¢aõbIbœbðcCc—cëd@d”dée=e’eçf=f’fèg=g“géh?h–hìiCišiñjHjŸj÷kOk§kÿlWl¯mm`m¹nnknÄooxoÑp+p†pàq:q•qðrKr¦ss]s¸ttptÌu(u…uáv>v›vøwVw³xxnxÌy*y‰yçzFz¥{{c{Â|!||á}A}¡~~b~Â#„å€G€¨ kÍ‚0‚’‚ôƒWƒº„„€„ã…G…«††r†×‡;‡ŸˆˆiˆÎ‰3‰™‰þŠdŠÊ‹0‹–‹üŒcŒÊ1˜ÿŽfŽÎ6žnÖ‘?‘¨’’z’ã“M“¶” ”Š”ô•_•É–4–Ÿ— —u—à˜L˜¸™$™™üšhšÕ›B›¯œœ‰œ÷dÒž@ž®ŸŸ‹Ÿú i Ø¡G¡¶¢&¢–££v£æ¤V¤Ç¥8¥©¦¦‹¦ý§n§à¨R¨Ä©7©©ªª««u«é¬\¬Ð­D­¸®-®¡¯¯‹°°u°ê±`±Ö²K²Â³8³®´%´œµµŠ¶¶y¶ð·h·à¸Y¸Ñ¹J¹Âº;ºµ».»§¼!¼›½½¾ ¾„¾ÿ¿z¿õÀpÀìÁgÁãÂ_ÂÛÃXÃÔÄQÄÎÅKÅÈÆFÆÃÇAÇ¿È=ȼÉ:ɹÊ8Ê·Ë6˶Ì5̵Í5͵Î6ζÏ7ϸÐ9кÑ<ѾÒ?ÒÁÓDÓÆÔIÔËÕNÕÑÖUÖØ×\×àØdØèÙlÙñÚvÚûÛ€ÜÜŠÝÝ–ÞÞ¢ß)߯à6à½áDáÌâSâÛãcãëäsäü儿 æ–çç©è2è¼éFéÐê[êåëpëûì†ííœî(î´ï@ïÌðXðåñrñÿòŒóó§ô4ôÂõPõÞömöû÷Šøø¨ù8ùÇúWúçûwüü˜ý)ýºþKþÜÿmÿÿcurv #(-27;@EJOTY^chmrw|†‹•šŸ¤©®²·¼ÁÆËÐÕÛàåëðöû %+28>ELRY`gnu|ƒ‹’š¡©±¹ÁÉÑÙáéòú &/8AKT]gqz„Ž˜¢¬¶ÁËÕàëõ !-8COZfr~Š–¢®ºÇÓàìù -;HUcq~Œš¨¶ÄÓáðþ +:IXgw†–¦µÅÕåö'7HYj{Œ¯ÀÑãõ+=Oat†™¬¿Òåø 2FZn‚–ª¾Òçû  % : O d y ¤ º Ï å û  ' = T j ˜ ® Å Ü ó " 9 Q i € ˜ ° È á ù  * C \ u Ž § À Ù ó & @ Z t Ž © Ã Þ ø.Id›¶Òî %A^z–³Ïì &Ca~›¹×õ1OmŒªÉè&Ed„£Ãã#Ccƒ¤Åå'Ij‹­Îð4Vx›½à&Il²ÖúAe‰®Ò÷@eНÕú Ek‘·Ý*QwžÅì;cвÚ*R{£ÌõGp™Ãì@j”¾é>i”¿ê  A l ˜ Ä ð!!H!u!¡!Î!û"'"U"‚"¯"Ý# #8#f#”#Â#ð$$M$|$«$Ú% %8%h%—%Ç%÷&'&W&‡&·&è''I'z'«'Ü( (?(q(¢(Ô))8)k))Ð**5*h*›*Ï++6+i++Ñ,,9,n,¢,×- -A-v-«-á..L.‚.·.î/$/Z/‘/Ç/þ050l0¤0Û11J1‚1º1ò2*2c2›2Ô3 3F33¸3ñ4+4e4ž4Ø55M5‡5Â5ý676r6®6é7$7`7œ7×88P8Œ8È99B99¼9ù:6:t:²:ï;-;k;ª;è<' >`> >à?!?a?¢?â@#@d@¦@çA)AjA¬AîB0BrBµB÷C:C}CÀDDGDŠDÎEEUEšEÞF"FgF«FðG5G{GÀHHKH‘H×IIcI©IðJ7J}JÄK KSKšKâL*LrLºMMJM“MÜN%NnN·OOIO“OÝP'PqP»QQPQ›QæR1R|RÇSS_SªSöTBTTÛU(UuUÂVV\V©V÷WDW’WàX/X}XËYYiY¸ZZVZ¦Zõ[E[•[å\5\†\Ö]']x]É^^l^½__a_³``W`ª`üaOa¢aõbIbœbðcCc—cëd@d”dée=e’eçf=f’fèg=g“géh?h–hìiCišiñjHjŸj÷kOk§kÿlWl¯mm`m¹nnknÄooxoÑp+p†pàq:q•qðrKr¦ss]s¸ttptÌu(u…uáv>v›vøwVw³xxnxÌy*y‰yçzFz¥{{c{Â|!||á}A}¡~~b~Â#„å€G€¨ kÍ‚0‚’‚ôƒWƒº„„€„ã…G…«††r†×‡;‡ŸˆˆiˆÎ‰3‰™‰þŠdŠÊ‹0‹–‹üŒcŒÊ1˜ÿŽfŽÎ6žnÖ‘?‘¨’’z’ã“M“¶” ”Š”ô•_•É–4–Ÿ— —u—à˜L˜¸™$™™üšhšÕ›B›¯œœ‰œ÷dÒž@ž®ŸŸ‹Ÿú i Ø¡G¡¶¢&¢–££v£æ¤V¤Ç¥8¥©¦¦‹¦ý§n§à¨R¨Ä©7©©ªª««u«é¬\¬Ð­D­¸®-®¡¯¯‹°°u°ê±`±Ö²K²Â³8³®´%´œµµŠ¶¶y¶ð·h·à¸Y¸Ñ¹J¹Âº;ºµ».»§¼!¼›½½¾ ¾„¾ÿ¿z¿õÀpÀìÁgÁãÂ_ÂÛÃXÃÔÄQÄÎÅKÅÈÆFÆÃÇAÇ¿È=ȼÉ:ɹÊ8Ê·Ë6˶Ì5̵Í5͵Î6ζÏ7ϸÐ9кÑ<ѾÒ?ÒÁÓDÓÆÔIÔËÕNÕÑÖUÖØ×\×àØdØèÙlÙñÚvÚûÛ€ÜÜŠÝÝ–ÞÞ¢ß)߯à6à½áDáÌâSâÛãcãëäsäü儿 æ–çç©è2è¼éFéÐê[êåëpëûì†ííœî(î´ï@ïÌðXðåñrñÿòŒóó§ô4ôÂõPõÞömöû÷Šøø¨ù8ùÇúWúçûwüü˜ý)ýºþKþÜÿmÿÿcurv #(-27;@EJOTY^chmrw|†‹•šŸ¤©®²·¼ÁÆËÐÕÛàåëðöû %+28>ELRY`gnu|ƒ‹’š¡©±¹ÁÉÑÙáéòú &/8AKT]gqz„Ž˜¢¬¶ÁËÕàëõ !-8COZfr~Š–¢®ºÇÓàìù -;HUcq~Œš¨¶ÄÓáðþ +:IXgw†–¦µÅÕåö'7HYj{Œ¯ÀÑãõ+=Oat†™¬¿Òåø 2FZn‚–ª¾Òçû  % : O d y ¤ º Ï å û  ' = T j ˜ ® Å Ü ó " 9 Q i € ˜ ° È á ù  * C \ u Ž § À Ù ó & @ Z t Ž © Ã Þ ø.Id›¶Òî %A^z–³Ïì &Ca~›¹×õ1OmŒªÉè&Ed„£Ãã#Ccƒ¤Åå'Ij‹­Îð4Vx›½à&Il²ÖúAe‰®Ò÷@eНÕú Ek‘·Ý*QwžÅì;cвÚ*R{£ÌõGp™Ãì@j”¾é>i”¿ê  A l ˜ Ä ð!!H!u!¡!Î!û"'"U"‚"¯"Ý# #8#f#”#Â#ð$$M$|$«$Ú% %8%h%—%Ç%÷&'&W&‡&·&è''I'z'«'Ü( (?(q(¢(Ô))8)k))Ð**5*h*›*Ï++6+i++Ñ,,9,n,¢,×- -A-v-«-á..L.‚.·.î/$/Z/‘/Ç/þ050l0¤0Û11J1‚1º1ò2*2c2›2Ô3 3F33¸3ñ4+4e4ž4Ø55M5‡5Â5ý676r6®6é7$7`7œ7×88P8Œ8È99B99¼9ù:6:t:²:ï;-;k;ª;è<' >`> >à?!?a?¢?â@#@d@¦@çA)AjA¬AîB0BrBµB÷C:C}CÀDDGDŠDÎEEUEšEÞF"FgF«FðG5G{GÀHHKH‘H×IIcI©IðJ7J}JÄK KSKšKâL*LrLºMMJM“MÜN%NnN·OOIO“OÝP'PqP»QQPQ›QæR1R|RÇSS_SªSöTBTTÛU(UuUÂVV\V©V÷WDW’WàX/X}XËYYiY¸ZZVZ¦Zõ[E[•[å\5\†\Ö]']x]É^^l^½__a_³``W`ª`üaOa¢aõbIbœbðcCc—cëd@d”dée=e’eçf=f’fèg=g“géh?h–hìiCišiñjHjŸj÷kOk§kÿlWl¯mm`m¹nnknÄooxoÑp+p†pàq:q•qðrKr¦ss]s¸ttptÌu(u…uáv>v›vøwVw³xxnxÌy*y‰yçzFz¥{{c{Â|!||á}A}¡~~b~Â#„å€G€¨ kÍ‚0‚’‚ôƒWƒº„„€„ã…G…«††r†×‡;‡ŸˆˆiˆÎ‰3‰™‰þŠdŠÊ‹0‹–‹üŒcŒÊ1˜ÿŽfŽÎ6žnÖ‘?‘¨’’z’ã“M“¶” ”Š”ô•_•É–4–Ÿ— —u—à˜L˜¸™$™™üšhšÕ›B›¯œœ‰œ÷dÒž@ž®ŸŸ‹Ÿú i Ø¡G¡¶¢&¢–££v£æ¤V¤Ç¥8¥©¦¦‹¦ý§n§à¨R¨Ä©7©©ªª««u«é¬\¬Ð­D­¸®-®¡¯¯‹°°u°ê±`±Ö²K²Â³8³®´%´œµµŠ¶¶y¶ð·h·à¸Y¸Ñ¹J¹Âº;ºµ».»§¼!¼›½½¾ ¾„¾ÿ¿z¿õÀpÀìÁgÁãÂ_ÂÛÃXÃÔÄQÄÎÅKÅÈÆFÆÃÇAÇ¿È=ȼÉ:ɹÊ8Ê·Ë6˶Ì5̵Í5͵Î6ζÏ7ϸÐ9кÑ<ѾÒ?ÒÁÓDÓÆÔIÔËÕNÕÑÖUÖØ×\×àØdØèÙlÙñÚvÚûÛ€ÜÜŠÝÝ–ÞÞ¢ß)߯à6à½áDáÌâSâÛãcãëäsäü儿 æ–çç©è2è¼éFéÐê[êåëpëûì†ííœî(î´ï@ïÌðXðåñrñÿòŒóó§ô4ôÂõPõÞömöû÷Šøø¨ù8ùÇúWúçûwüü˜ý)ýºþKþÜÿmÿÿchrm£×T{LÍ™š&f\textno copyright, use freely nip2-8.7.0/share/nip2/data/Makefile.am0000644000175000017500000000200413273071606014237 00000000000000nipdatadir = $(pkgdatadir)/data nipdata_DATA = \ rachel.con \ AdobeRGB1998.icc \ sRGB.icm \ macbeth_lab_d65.mat \ macbeth_lab_d50.mat \ vips-128.png \ nip2-icon.ico \ cmyk.icm \ stock-tool-ink-22.png \ stock-tool-path-22.png \ stock-tool-text-22.png \ stock-tool-smudge-22.png \ stock-tool-bucket-fill-22.png \ stock-tool-rect-select-22.png \ stock-tool-select-22.png \ stock-padlock-closed-22.png \ stock-alert-22.png \ nip-slider-16.png \ stock-tool-move-22.png \ stock-led-red-18.png \ stock-led-green-18.png \ stock-led-blue-18.png \ stock-led-cyan-18.png \ stock-led-yellow-18.png \ stock-led-off-18.png EXTRA_DIST = \ $(nipdata_DATA) \ examples install-exec-hook: rm -rf $(DESTDIR)$(nipdatadir)/examples $(mkinstalldirs) $(DESTDIR)$(nipdatadir)/examples cp -r ${top_srcdir}/share/nip2/data/examples/* $(DESTDIR)$(nipdatadir)/examples uninstall-hook: # make sure we have write permission for 'rm' chmod -R u+w ${DESTDIR}$(nipdatadir)/examples ${RM} -rf ${DESTDIR}$(nipdatadir)/examples nip2-8.7.0/share/nip2/data/macbeth_lab_d50.mat0000644000175000017500000000065213224651032015577 000000000000003 24 38.82 14.52 14.86 65.97 16.84 16.71 50.25 -4.56 -21.94 43.69 -14.21 19.17 55.13 9.02 -24.66 70.1 -31.71 -0.78 64.17 34.77 62.36 40.28 10.55 -44.65 51.82 47.11 15.64 31 22.5 -21.72 72.3 -23.44 57.12 72.4 20.15 68.15 29.15 20.65 -55.37 54.78 -38.84 31.54 42.5 55.62 27.17 82.4 3.54 79.73 51.61 48.8 -14 50.03 -27.58 -29.2 94.27 -0.25 0.35 80.3 0.05 -0.38 65.41 0.09 -0.44 50.82 -0.37 -0.59 36.1 0.09 -0.49 23.8 0.54 -0.18 nip2-8.7.0/share/nip2/Makefile.in0000644000175000017500000004632713350464104013352 00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = share/nip2 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BISON = @BISON@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DLLWRAP = @DLLWRAP@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FFTW3_CFLAGS = @FFTW3_CFLAGS@ FFTW3_LIBS = @FFTW3_LIBS@ FGREP = @FGREP@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_LIBS = @GSL_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ IP_CFLAGS = @IP_CFLAGS@ IP_LIBS = @IP_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBGOFFICE_CFLAGS = @LIBGOFFICE_CFLAGS@ LIBGOFFICE_LIBS = @LIBGOFFICE_LIBS@ LIBGSF_CFLAGS = @LIBGSF_CFLAGS@ LIBGSF_LIBS = @LIBGSF_LIBS@ LIBGVC_CFLAGS = @LIBGVC_CFLAGS@ LIBGVC_LIBS = @LIBGVC_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ 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@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ REQUIRED_PACKAGES_CFLAGS = @REQUIRED_PACKAGES_CFLAGS@ REQUIRED_PACKAGES_LIBS = @REQUIRED_PACKAGES_LIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOP_SRCDIR = @TOP_SRCDIR@ UPDATE_DESKTOP_DATABASE = @UPDATE_DESKTOP_DATABASE@ UPDATE_MIME_DATABASE = @UPDATE_MIME_DATABASE@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XDG_OPEN = @XDG_OPEN@ XGETTEXT = @XGETTEXT@ 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@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = rc data start compat all: all-recursive .SUFFIXES: $(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) --foreign share/nip2/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign share/nip2/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): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-libtool cscopelist-am ctags \ ctags-am distclean distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: nip2-8.7.0/share/nip2/start/0000755000175000017500000000000013350464160012510 500000000000000nip2-8.7.0/share/nip2/start/_stdenv.def0000644000175000017500000020431713330327245014561 00000000000000/* optional args to functions */ get_option options defaults f = error (_ "unknown parameter " ++ f), hits == [] = hits?0 { hits = [v :: [n, v] <- options ++ defaults; n == f]; } /* Various operators as functions. */ logical_and a b = a && b; logical_or a b = a || b; bitwise_and a b = a & b; bitwise_or a b = a | b; eor a b = a ^ b; left_shift a b = a << b; right_shift a b = a >> b; not a = !a; less a b = a < b; more a b = a > b; less_equal a b = a <= b; more_equal a b = a >= b; equal a b = a == b; not_equal a b = a != b; pointer_equal a b = a === b; not_pointer_equal a b = a !== b; add a b = a + b; subtract a b = a - b; multiply a b = a * b; divide a b = a / b; idivide a b = (int) ((int) a / (int) b); power a b = a ** b; square x = x * x; remainder a b = a % b; cons a b = a : b; dot a b = a . ( b ); join a b = a ++ b; // 'difference' is defined in _list subscript a b = a ? b; generate s n f = [s, n .. f]; comma r i = (r, i); compose f g = f @ g; // our only trinary operator is actually a binary operator if_then_else a x = if a then x?0 else x?1; cast_unsigned_char x = (unsigned char) x; cast_signed_char x = (signed char) x; cast_unsigned_short x = (unsigned short) x; cast_signed_short x = (signed short) x; cast_unsigned_int x = (unsigned int) x; cast_signed_int x = (signed int) x; cast_float x = (float) x; cast_double x = (double) x; cast_complex x = (complex) x; cast_double_complex x = (double complex) x; unary_minus x = -x; negate x = !x; complement x = ~x; unary_plus x = +x; // the function we call for "a -> v" expressions mksvpair s v = [s, v], is_string s = error "not str on lhs of ->"; // the vector ops ... im is an image, vec is a real_list vec op_name im vec = im_lintra_vec ones im vec, op_name == "add" || op_name == "add'" = im_lintra_vec ones (-1 * im) vec, op_name == "subtract'" = im_lintra_vec ones im inv, op_name == "subtract" = im_lintra_vec vec im zeros, op_name == "multiply" || op_name == "multiply'" = im_lintra_vec vec (1 / im) zeros, op_name == "divide'" = im_lintra_vec recip im zeros, op_name == "divide" = im_expntra_vec im vec, op_name == "power'" = im_powtra_vec im vec, op_name == "power" = im_remainderconst_vec im vec, op_name == "remainder" = im_andimage_vec im vec, op_name == "bitwise_and" || op_name == "bitwise_and'" = im_orimage_vec im vec, op_name == "bitwise_or" || op_name == "bitwise_or'" = im_eorimage_vec im vec, op_name == "eor" || op_name == "eor'" = im_equal_vec im vec, op_name == "equal" || op_name == "equal'" = im_notequal_vec im vec, op_name == "not_equal" || op_name == "not_equal'" = im_less_vec im vec, op_name == "less" = im_moreeq_vec im vec, op_name == "less'" = im_lesseq_vec im vec, op_name == "less_equal" = im_more_vec im vec, op_name == "less_equal'" = error ("unimplemented vector operation: " ++ op_name) { zeros = replicate (len vec) 0; ones = replicate (len vec) 1; recip = map (divide 1) vec; inv = map (multiply (-1)) vec; } // make a name value pair mknvpair n v = [n, v], is_string n = error "not [char] on LHS of =>"; /* Macbeth chart patch names. */ macbeth_names = [ "Dark skin", "Light skin", "Blue sky", "Foliage", "Blue flower", "Bluish green", "Orange", "Purplish blue", "Moderate red", "Purple", "Yellow green", "Orange yellow", "Blue", "Green", "Red", "Yellow", "Magenta", "Cyan", "White (density 0.05)", "Neutral 8 (density 0.23)", "Neutral 6.5 (density 0.44)", "Neutral 5 (density 0.70)", "Neutral 3.5 (density 1.05)", "Black (density 1.50)" ]; bandsplit x = oo_unary_function bandsplit_op x, is_class x = map (subscript x) [0 .. bands - 1], is_image x = error (_ "bad arguments to " ++ "bandsplit") { bands = get_header "Bands" x; bandsplit_op = Operator "bandsplit" (map Image @ bandsplit) Operator_type.COMPOUND false; } bandjoin l = wrapper joined, has_wrapper = joined, is_listof has_image l = error (_ "bad arguments to " ++ "bandjoin") { has_wrapper = has_member_list (has_member "Image") l; wrapper = get_member_list (has_member "Image") (get_member "Image") l; joined = im_gbandjoin (map get_image l); } bandand x = oo_unary_function bandand_op x, is_class x = foldr1 bitwise_and (bandsplit x), is_image x = error (_ "bad arguments to " ++ "bandand") { bandand_op = Operator "bandand" bandand Operator_type.COMPOUND_REWRAP false; } bandor x = oo_unary_function bandor_op x, is_class x = foldr1 bitwise_or (bandsplit x), is_image x = error (_ "bad arguments to " ++ "bandor") { bandor_op = Operator "bandor" bandor Operator_type.COMPOUND_REWRAP false; } sum x = oo_unary_function sum_op x, is_class x = im_avg x * (get_width x) * (get_height x) * (get_bands x), is_image x = sum_list x, is_list x = error (_ "bad arguments (" ++ print x ++ ") to " ++ "sum") { sum_op = Operator "sum" sum Operator_type.COMPOUND false; // add elements in a nested-list thing sum_list l = foldr acc 0 l { acc x total = total + sum x, is_list x = total + x; } } product x = oo_unary_function product_op x, is_class x = product_list x, is_list x // (product image) doesn't make much sense :( = error (_ "bad arguments (" ++ print x ++ ") to " ++ "product") { product_op = Operator "product" product Operator_type.COMPOUND false; product_list l = foldr prod 1 l { prod x total = total * product x, is_list x = total * x; } } mean x = oo_unary_function mean_op x, is_class x = im_avg x, is_image x = mean_list x, is_list x = error (_ "bad arguments (" ++ print x ++ ") to " ++ "mean") { mean_op = Operator "mean" mean Operator_type.COMPOUND false; mean_list l = sum l / size l; // number of elements in some sort of nested-list thing size l = foldr acc 0 l { acc x total = total + size x, is_list x = total + 1; } } meang x = (appl (power e) @ mean @ appl log) x { appl fn x = map fn x, is_list x = fn x; } skew x = oo_unary_function skew_op x, is_class x = sum ((x - m) ** 3) / ((N - 1) * s ** 3), is_image x = sum ((Group x' - m) ** 3).value / ((N - 1) * s ** 3), is_list x = error (_ "bad arguments (" ++ print x ++ ") to " ++ "skew") { skew_op = Operator "skew" skew Operator_type.COMPOUND false; // squash any large matrix down to a flat list ... much simpler x' = x, is_image x; = flatten x; m = mean x'; s = deviation x'; w = get_width x'; h = get_height x'; b = get_bands x'; N = w * h * b, is_image x' = len x'; } kurtosis x = oo_unary_function kurtosis_op x, is_class x = sum ((x - m) ** 4) / ((N - 1) * s ** 4), is_image x = sum ((Group x' - m) ** 4).value / ((N - 1) * s ** 4), is_list x = error (_ "bad arguments (" ++ print x ++ ") to " ++ "kurtosis") { kurtosis_op = Operator "kurtosis" kurtosis Operator_type.COMPOUND false; // squash any large matrix down to a flat list ... much simpler x' = x, is_image x; = flatten x; m = mean x'; s = deviation x'; w = get_width x'; h = get_height x'; b = get_bands x'; N = len x', is_list x'; = w * h * b; } // zero-excluding mean meanze x = oo_unary_function meanze_op x, is_class x = meanze_image_hist x, is_image x && (fmt == Image_format.UCHAR || fmt == Image_format.USHORT) = meanze_image x, is_image x = meanze_list x, is_list x = error (_ "bad arguments (" ++ print x ++ ") to " ++ "meanze") { fmt = get_format x; meanze_op = Operator "meanze" meanze Operator_type.COMPOUND false; meanze_list l = sum l / size l; // number of non-zero elements in some sort of nested-list thing size l = foldr acc 0 l { acc x total = total + size x, is_list x = total + 1, x != 0; = total; } // add elements in a nested-list thing sum l = foldr acc 0 l { acc x total = total + sum x, is_list x = total + x; } // image mean, for any image type meanze_image i = sum / N { w = get_width i; h = get_height i; b = get_bands i; st = stats i; sum = st.value?0?2; // find non-zero pixels (not zero in all bands) zp = im_notequal_vec i (replicate b 0); // number of non-zero pixels N = b * (mean zp * w * h) / 255; } // image mean for 8 and 16-bit unsigned images // we can use a histogram, yay, and save a pass through the image meanze_image_hist i = sum / N { // histogram, knock out zeros hist = hist_find i; black = image_new 1 1 (get_bands hist) (get_format hist) (get_coding hist) (get_type hist) 0 0 0; histze = insert 0 0 black hist; // matching identity iden = im_identity_ushort (get_bands hist) (get_width hist), (get_width hist) > 256 = im_identity (get_bands hist); // number of non-zero pixels N = mean histze * 256; // sum of pixels sum = mean (hist * iden) * 256; } } deviation x = oo_unary_function deviation_op x, is_class x = im_deviate x, is_image x = deviation_list x, is_real_list x || is_matrix x = error (_ "bad arguments to " ++ "deviation") { deviation_op = Operator "deviation" deviation Operator_type.COMPOUND false; deviation_list l = (abs (s2 - (s * s / n)) / (n - 1)) ** 0.5 { [n, s, s2] = sum_sum2_list l; } // return n, sum, sum of squares for a list of reals sum_sum2_list x = foldr accumulate [0, 0, 0] x { accumulate x sofar = [n + 1, x + s, x * x + s2], is_real x = [n + n', s + s', s2 + s2'], is_list x = error "sum_sum2_list: not real or [real]" { [n, s, s2] = sofar; [n', s', s2'] = sum_sum2_list x; } } } deviationze x = oo_unary_function deviationze_op x, is_class x = deviationze_image x, is_image x = deviationze_list x, is_real_list x || is_matrix x = error (_ "bad arguments to " ++ "deviationze") { deviationze_op = Operator "deviationze" deviationze Operator_type.COMPOUND false; deviationze_list l = (abs (s2 - (s * s / n)) / (n - 1)) ** 0.5 { [n, s, s2] = sum_sum2_list l; } // return number of non-zero elements, sum, sum of squares for a list of // reals sum_sum2_list x = foldr accumulate [0, 0, 0] x { accumulate x sofar = sofar, is_real x && x == 0 = [n + 1, x + s, x * x + s2], is_real x = [n + n', s + s', s2 + s2'], is_list x = error "sum_sum2_list: not real or [real]" { [n, s, s2] = sofar; [n', s', s2'] = sum_sum2_list x; } } deviationze_image i = ((sum2 - sum * sum / N) / (N - 1)) ** 0.5 { w = get_width i; h = get_height i; b = get_bands i; st = stats i; sum = st.value?0?2; sum2 = st.value?0?3; // find non-zero pixels (not zero in all bands) zp = im_notequal_vec i (replicate b 0); // number of non-zero pixels N = b * (mean zp * w * h) / 255; } } // find the centre of gravity of a histogram gravity x = oo_unary_function gravity_op x, is_class x = im_hist_gravity x, is_hist x = gravity_list x, is_list x = error (_ "bad arguments to " ++ "gravity") { gravity_op = Operator "gravity" gravity Operator_type.COMPOUND false; // centre of gravity of a histogram... use the histogram to weight an // identity, then sum, then find the mean element im_hist_gravity h = m { // make horizontal h' = rot270 h, get_width h == 1 = h, get_height h == 1 = error "width or height not 1"; // number of elements w = get_width h'; // matching identity i = im_identity_ushort 1 w, w <= 2 ** 16 - 1 = make_xy w 1 ? 0; // weight identity and sum s = mean (i * h') * w; // sum of original histogram s' = mean h * w; // weighted mean m = s / s'; } gravity_list l = m { w = len l; // matching identity i = [0, 1 .. w - 1]; // weight identity and sum s = sum (map2 multiply i l); // sum of original histogram s' = sum l; // weighted mean m = s / s'; } } project x = oo_unary_function project_op x, is_class x = im_project x, is_image x = error (_ "bad arguments to " ++ "project") { project_op = Operator "project" project Operator_type.COMPOUND false; } abs x = oo_unary_function abs_op x, is_class x = im_abs x, is_image x = abs_cmplx x, is_complex x = abs_num x, is_real x = abs_list x, is_real_list x = abs_list (map abs_list x), is_matrix x = error (_ "bad arguments to " ++ "abs") { abs_op = Operator "abs" abs Operator_type.COMPOUND false; abs_list l = (sum (map square l)) ** 0.5; abs_num n = n, n >= 0 = -n; abs_cmplx c = ((re c)**2 + (im c)**2) ** 0.5; } copy x = oo_unary_function copy_op x, is_class x = im_copy x, is_image x = x { copy_op = Operator "copy" copy Operator_type.COMPOUND_REWRAP false; } // like abs, but treat pixels as vectors ... ie. always get a 1-band image // back ... also treat matricies as lists of vectors // handy for dE from object difference abs_vec x = oo_unary_function abs_vec_op x, is_class x = abs_vec_image x, is_image x = abs_vec_cmplx x, is_complex x = abs_vec_num x, is_real x = abs_vec_list x, is_real_list x = mean (map abs_vec_list x), is_matrix x = error (_ "bad arguments to " ++ "abs_vec") { abs_vec_op = Operator "abs_vec" abs_vec Operator_type.COMPOUND false; abs_vec_list l = (sum (map square l)) ** 0.5; abs_vec_num n = n, n >= 0 = -n; abs_vec_cmplx c = ((re c)**2 + (im c)**2) ** 0.5; abs_vec_image im = (sum (map square (bandsplit im))) ** 0.5; } transpose x = oo_unary_function transpose_op x, is_class x = transpose_image x, is_image x = transpose_list x, is_listof is_list x = error (_ "bad arguments to " ++ "transpose") { transpose_op = Operator "transpose" transpose Operator_type.COMPOUND_REWRAP false; transpose_list l = [], l' == [] = (map hd l') : (transpose_list (map tl l')) { l' = takewhile (not_equal []) l; } transpose_image = im_flipver @ im_rot270; } rot45 x = oo_unary_function rot45_op x, is_class x = error "rot45 image: not implemented", is_image x = error (_ "bad arguments to " ++ "rot45") { rot45_op = Operator "rot45" rot45_object Operator_type.COMPOUND_REWRAP false; rot45_object x = rot45_matrix x, is_odd_square_matrix x = error "rot45 image: not implemented", is_image x = error (_ "bad arguments to " ++ "rot45"); // slow, but what the heck rot45_matrix l = (im_rotate_dmask45 (Matrix l)).value; } // apply an image function to a [[real]] ... matrix is converted to a 1 band // image for processing apply_matrix_as_image fn m = (get_value @ im_vips2mask @ fn @ im_mask2vips @ Matrix) m; // a general image/matrix operation where the mat version is most easily done // by converting mat->image->mat apply_matim_operation name fn x = oo_unary_function class_op x, is_class x = fn x, is_image x = apply_matrix_as_image fn x, is_matrix x = error (_ "bad arguments to " ++ name) { class_op = Operator name (apply_matim_operation name fn) Operator_type.COMPOUND_REWRAP false; } rot90 = apply_matim_operation "rot90" im_rot90; rot180 = apply_matim_operation "rot180" im_rot180; rot270 = apply_matim_operation "rot270" im_rot270; rotquad = apply_matim_operation "rotquad" im_rotquad; fliplr = apply_matim_operation "fliplr" im_fliphor; fliptb = apply_matim_operation "flipud" im_flipver; image_set_type type x = oo_unary_function image_set_type_op x, is_class x = im_copy_set x (to_real type) (get_header "Xres" x) (get_header "Yres" x) (get_header "Xoffset" x) (get_header "Yoffset" x), is_image x = error (_ "bad arguments to " ++ "image_set_type:" ++ print type ++ " " ++ print x) { image_set_type_op = Operator "image_set_type" (image_set_type type) Operator_type.COMPOUND_REWRAP false; } image_set_origin xoff yoff x = oo_unary_function image_set_origin_op x, is_class x = im_copy_set x (get_header "Type" x) (get_header "Xres" x) (get_header "Yres" x) (to_real xoff) (to_real yoff), is_image x = error (_ "bad arguments to " ++ "image_set_origin") { image_set_origin_op = Operator "image_set_origin" (image_set_origin xoff yoff) Operator_type.COMPOUND_REWRAP false; } cache tile_width tile_height max_tiles x = oo_unary_function cache_op x, is_class x = im_tile_cache_random x (to_real tile_width) (to_real tile_height) (to_real max_tiles), is_image x = error (_ "bad arguments to " ++ "cache") { cache_op = Operator "cache" (cache tile_width tile_height max_tiles) Operator_type.COMPOUND_REWRAP false; } tile across down x = oo_unary_function tile_op x, is_class x = im_replicate x (to_real across) (to_real down), is_image x = error (_ "bad arguments to " ++ "tile") { tile_op = Operator "tile" (tile across down) Operator_type.COMPOUND_REWRAP false; } grid tile_height across down x = oo_unary_function grid_op x, is_class x = im_grid x (to_real tile_height) (to_real across) (to_real down), is_image x = error (_ "bad arguments to " ++ "grid") { grid_op = Operator "grid" (grid tile_height across down) Operator_type.COMPOUND_REWRAP false; } max_pair a b = a, a > b = b; min_pair a b = a, a < b = b; range min value max = min_pair max (max_pair min value); max x = oo_unary_function max_op x, is_class x = im_max x, is_image x = max_list x, is_list x = x, is_number x = error (_ "bad arguments to " ++ "max") { max_op = Operator "max" max Operator_type.COMPOUND false; max_list x = error "max []", x == [] = foldr1 max_pair x, is_real_list x = foldr1 max_pair (map max_list x), is_list x = max x; } min x = oo_unary_function min_op x, is_class x = im_min x, is_image x = min_list x, is_list x = x, is_number x = error (_ "bad arguments to " ++ "min") { min_op = Operator "min" min Operator_type.COMPOUND false; min_list x = error "min []", x == [] = foldr1 min_pair x, is_real_list x = foldr1 min_pair (map min_list x), is_list x = min x; } maxpos x = oo_unary_function maxpos_op x, is_class x = im_maxpos x, is_image x = maxpos_matrix x, is_matrix x = maxpos_list x, is_list x = error (_ "bad arguments to " ++ "maxpos") { maxpos_op = Operator "maxpos" maxpos Operator_type.COMPOUND false; maxpos_matrix m = (-1, -1), m == [[]] = (indexes?row, row) { max_value = max (Matrix m); indexes = map (index (equal max_value)) m; row = index (not_equal (-1)) indexes; } maxpos_list l = -1, l == [] = index (equal (max l)) l; } minpos x = oo_unary_function minpos_op x, is_class x = im_minpos x, is_image x = minpos_matrix x, is_matrix x = minpos_list x, is_list x = error (_ "bad arguments to " ++ "minpos") { minpos_op = Operator "minpos" minpos Operator_type.COMPOUND false; minpos_matrix m = (-1, -1), m == [[]] = (indexes?row, row) { min_value = min (Matrix m); indexes = map (index (equal min_value)) m; row = index (not_equal (-1)) indexes; } minpos_list l = -1, l == [] = index (equal (min l)) l; } stats x = oo_unary_function stats_op x, is_class x = im_stats x, is_image x = im_stats (to_image x).value, is_matrix x = error (_ "bad arguments to " ++ "stats") { stats_op = Operator "stats" stats Operator_type.COMPOUND false; } e = 2.7182818284590452354; pi = 3.14159265358979323846; rad d = 2 * pi * (d / 360); deg r = 360 * r / (2 * pi); sign x = oo_unary_function sign_op x, is_class x = im_sign x, is_image x = sign_cmplx x, is_complex x = sign_num x, is_real x = error (_ "bad arguments to " ++ "sign") { sign_op = Operator "sign" sign Operator_type.COMPOUND_REWRAP false; sign_num n = 0, n == 0 = 1, n > 0 = -1; sign_cmplx c = (0, 0), mod == 0 = (re c / mod, im c / mod) { mod = abs c; } } rint x = oo_unary_function rint_op x, is_class x = im_rint x, is_image x = rint_value x, is_number x = error (_ "bad arguments to " ++ "rint") { rint_op = Operator "rint" rint Operator_type.ARITHMETIC false; rint_value x = (int) (x + 0.5), x > 0 = (int) (x - 0.5); } scale x = oo_unary_function scale_op x, is_class x = (unsigned char) x, is_number x = im_scale x, is_image x = scale_list x, is_real_list x || is_matrix x = error (_ "bad arguments to " ++ "scale") { scale_op = Operator "scale" scale Operator_type.COMPOUND_REWRAP false; scale_list l = apply_scale s o l { mn = find_limit min_pair l; mx = find_limit max_pair l; s = 255.0 / (mx - mn); o = -(mn * s); } find_limit fn l = find_limit fn (map (find_limit fn) l), is_listof is_list l = foldr1 fn l; apply_scale s o x = x * s + o, is_number x = map (apply_scale s o) x; } scaleps x = oo_unary_function scale_op x, is_class x = im_scaleps x, is_image x = error (_ "bad arguments to " ++ "scale") { scale_op = Operator "scaleps" scaleps Operator_type.COMPOUND_REWRAP false; } fwfft x = oo_unary_function fwfft_op x, is_class x = im_fwfft x, is_image x = error (_ "bad arguments to " ++ "fwfft") { fwfft_op = Operator "fwfft" fwfft Operator_type.COMPOUND_REWRAP false; } invfft x = oo_unary_function invfft_op x, is_class x = im_invfftr x, is_image x = error (_ "bad arguments to " ++ "invfft") { invfft_op = Operator "invfft" invfft Operator_type.COMPOUND_REWRAP false; } falsecolour x = oo_unary_function falsecolour_op x, is_class x = image_set_type Image_type.sRGB (im_falsecolour x), is_image x = error (_ "bad arguments to " ++ "falsecolour") { falsecolour_op = Operator "falsecolour" falsecolour Operator_type.COMPOUND_REWRAP false; } polar x = oo_unary_function polar_op x, is_class x = im_c2amph x, is_image x = polar_cmplx x, is_complex x = error (_ "bad arguments to " ++ "polar") { polar_op = Operator "polar" polar Operator_type.COMPOUND false; polar_cmplx r = (l, a) { a = 270, x == 0 && y < 0 = 90, x == 0 && y >= 0 = 360 + atan (y / x), x > 0 && y < 0 = atan (y / x), x > 0 && y >= 0 = 180 + atan (y / x); l = (x ** 2 + y ** 2) ** 0.5; x = re r; y = im r; } } rectangular x = oo_unary_function rectangular_op x, is_class x = im_c2rect x, is_image x = rectangular_cmplx x, is_complex x = error (_ "bad arguments to " ++ "rectangular") { rectangular_op = Operator "rectangular" rectangular Operator_type.COMPOUND false; rectangular_cmplx p = (x, y) { l = re p; a = im p; x = l * cos a; y = l * sin a; } } // we can't use colour_unary: that likes 3 band only recomb matrix x = oo_unary_function recomb_op x, is_class x = im_recomb x matrix, is_image x = recomb_real_list x, is_real_list x = map recomb_real_list x, is_matrix x = error (_ "bad arguments to " ++ "recomb") { // COMPOUND_REWRAP ... signal to the colour class to go to image and // back recomb_op = Operator "recomb" (recomb matrix) Operator_type.COMPOUND_REWRAP false; // process [1,2,3 ..] as an image recomb_real_list l = (to_matrix im').value?0 { im = (float) (to_image (Vector l)).value; im' = recomb matrix im; } } extract_area x y w h obj = oo_unary_function extract_area_op obj, is_class obj = im_extract_area obj x' y' w' h', is_image obj = map (extract_range x' w') (extract_range y' h' obj), is_matrix obj = error (_ "bad arguments to " ++ "extract_area") { x' = to_real x; y' = to_real y; w' = to_real w; h' = to_real h; extract_area_op = Operator "extract_area" (extract_area x y w h) Operator_type.COMPOUND_REWRAP false; extract_range from length list = (take length @ drop from) list; } extract_band b obj = subscript obj b; extract_row y obj = oo_unary_function extract_row_op obj, is_class obj = extract_area 0 y' (get_width obj) 1 obj, is_image obj = [obj?y'], is_matrix obj = error (_ "bad arguments to " ++ "extract_row") { y' = to_real y; extract_row_op = Operator "extract_row" (extract_row y) Operator_type.COMPOUND_REWRAP false; } extract_column x obj = oo_unary_function extract_column_op obj, is_class obj = extract_area x' 0 1 height obj, is_image obj = map (\row [row?x']) obj, is_matrix obj = error (_ "bad arguments to " ++ "extract_column") { x' = to_real x; height = get_header "Ysize" obj; extract_column_op = Operator "extract_column" (extract_column x) Operator_type.COMPOUND_REWRAP false; } blend cond in1 in2 = oo_binary_function blend_op cond [in1,in2], is_class cond = im_blend (get_image cond) (get_image in1) (get_image in2), has_image cond && has_image in1 && has_image in2 = error (_ "bad arguments to " ++ "blend" ++ ": " ++ join_sep ", " (map print [cond, in1, in2])) { blend_op = Operator "blend" blend_obj Operator_type.COMPOUND_REWRAP false; blend_obj cond x = blend_result_image { [then_part, else_part] = x; // get things about our output from inputs in this order objects = [then_part, else_part, cond]; // properties of our output image target_width = get_member_list has_width get_width objects; target_height = get_member_list has_height get_height objects; target_bands = get_member_list has_bands get_bands objects; target_format = get_member_list has_format get_format objects; target_type = get_member_list has_type get_type objects; to_image x = to_image_size target_width target_height target_bands target_format x; [then_image, else_image] = map to_image [then_part, else_part]; blend_result_image = image_set_type target_type (im_blend cond then_image else_image); } } // do big first: we want to keep big's class, if possible // eg. big is a Plot, small is a 1x1 Image insert x y small big = oo_binary'_function insert_op small big, is_class big = oo_binary_function insert_op small big, is_class small = im_insert big small (to_real x) (to_real y), is_image small && is_image big = error (_ "bad arguments to " ++ "insert") { insert_op = Operator "insert" (insert x y) Operator_type.COMPOUND_REWRAP false; } insert_noexpand x y small big = oo_binary_function insert_noexpand_op small big, is_class small = oo_binary'_function insert_noexpand_op small big, is_class big = im_insert_noexpand big small (to_real x) (to_real y), is_image small && is_image big = error (_ "bad arguments to " ++ "insert_noexpand") { insert_noexpand_op = Operator "insert_noexpand" (insert_noexpand x y) Operator_type.COMPOUND_REWRAP false; } decode im = oo_unary_function decode_op im, is_class im = decode_im im, is_image im = error (_ "bad arguments to " ++ "decode") { decode_op = Operator "decode" decode Operator_type.COMPOUND_REWRAP false; decode_im im = im_LabQ2Lab im, get_coding im == Image_coding.LABPACK = im_rad2float im, get_coding im == Image_coding.RAD = im; } measure_draw across down measure image = mark { patch_width = image.width / across; sample_width = patch_width * (measure / 100); left_margin = (patch_width - sample_width) / 2; patch_height = image.height / down; sample_height = patch_height * (measure / 100); top_margin = (patch_height - sample_height) / 2; cods = [[x * patch_width + left_margin, y * patch_height + top_margin] :: y <- [0 .. down - 1]; x <- [0 .. across - 1]]; x = map (extract 0) cods; y = map (extract 1) cods; outer = mkim [$pixel => 255] sample_width sample_height 1; inner = mkim [] (sample_width - 4) (sample_height - 4) 1; patch = insert 2 2 inner outer; bg = mkim [] image.width image.height 1; mask = Image (im_insertset bg.value patch.value x y); image' = colour_transform_to Image_type.sRGB image; mark = if mask then Vector [0, 255, 0] else image'; } measure_sample across down measure image = measures { patch_width = image.width / across; sample_width = patch_width * (measure / 100); left_margin = (patch_width - sample_width) / 2; patch_height = image.height / down; sample_height = patch_height * (measure / 100); top_margin = (patch_height - sample_height) / 2; cods = [[x * patch_width + left_margin, y * patch_height + top_margin] :: y <- [0 .. down - 1]; x <- [0 .. across - 1]]; image' = decode image; patches = map (\p extract_area p?0 p?1 sample_width sample_height image') cods; measures = Matrix (map (map mean) (map bandsplit patches)); } extract_bands b n obj = oo_unary_function extract_bands_op obj, is_class obj = im_extract_bands obj (to_real b) (to_real n), is_image obj = error (_ "bad arguments to " ++ "extract_bands") { extract_bands_op = Operator "extract_bands" (extract_bands b n) Operator_type.COMPOUND_REWRAP false; } invert x = oo_unary_function invert_op x, is_class x = im_invert x, is_image x = 255 - x, is_real x = error (_ "bad arguments to " ++ "invert") { invert_op = Operator "invert" invert Operator_type.COMPOUND false; } transform ipol wrap params image = oo_unary_function transform_op image, is_class image = im_transform image (to_matrix params) (to_real ipol) (to_real wrap), is_image image = error (_ "bad arguments to " ++ "transform") { transform_op = Operator "transform" (transform ipol wrap params) Operator_type.COMPOUND_REWRAP false; } transform_search max_error max_iterations order ipol wrap sample reference = oo_binary_function transform_search_op sample reference, is_class sample = oo_binary'_function transform_search_op sample reference, is_class reference = im_transform_search sample reference (to_real max_error) (to_real max_iterations) (to_real order) (to_real ipol) (to_real wrap), is_image sample && is_image reference = error (_ "bad arguments to " ++ "transform_search") { transform_search_op = Operator "transform_search" (transform_search max_error max_iterations order ipol wrap) Operator_type.COMPOUND false; } rotate interp angle image = oo_binary_function rotate_op angle image, is_class angle = oo_binary'_function rotate_op angle image, is_class image = im_affinei_all image interp.value a (-b) b a 0 0, is_real angle && is_image image = error (_ "bad arguments to " ++ "rotate") { rotate_op = Operator "rotate" (rotate interp) Operator_type.COMPOUND_REWRAP false; a = cos angle; b = sin angle; } matrix_binary fn a b = itom (fn (mtoi a) (mtoi b)) { mtoi x = im_mask2vips (Matrix x); itom x = (im_vips2mask x).value; } join_lr a b = oo_binary_function join_lr_op a b, is_class a = oo_binary'_function join_lr_op a b, is_class b = join_im a b, is_image a && is_image b = matrix_binary join_im a b, is_matrix a && is_matrix b = error (_ "bad arguments to " ++ "join_lr") { join_lr_op = Operator "join_lr" join_lr Operator_type.COMPOUND_REWRAP false; join_im a b = insert (get_width a) 0 b a; } join_tb a b = oo_binary_function join_tb_op a b, is_class a = oo_binary'_function join_tb_op a b, is_class b = join_im a b, is_image a && is_image b = matrix_binary join_im a b, is_matrix a && is_matrix b = error (_ "bad arguments to " ++ "join_tb") { join_tb_op = Operator "join_tb" join_tb Operator_type.COMPOUND_REWRAP false; join_im a b = insert 0 (get_height a) b a; } conj x = oo_unary_function conj_op x, is_class x = (re x, -im x), is_complex x || (is_image x && format == Image_format.COMPLEX) || (is_image x && format == Image_format.DPCOMPLEX) // assume it's some sort of real = x { format = get_header "BandFmt" x; conj_op = Operator "conj" conj Operator_type.COMPOUND false; } clip2fmt format image = oo_unary_function clip2fmt_op image, is_class image = im_clip2fmt image (to_real format), is_image image = error (_ "bad arguments to " ++ "clip2fmt") { clip2fmt_op = Operator "clip2fmt" (clip2fmt format) Operator_type.COMPOUND_REWRAP false; } embed type x y w h im = oo_unary_function embed_op im, is_class im = im_embed im (to_real type) (to_real x) (to_real y) (to_real w) (to_real h), is_image im = error (_ "bad arguments to " ++ "embed") { embed_op = Operator "embed" (embed type x y w h) Operator_type.COMPOUND_REWRAP false; } /* Morph a mask with a [[real]] matrix ... turn m2 into an image, morph it * with m1, turn it back to a matrix again. */ _morph_2_masks fn m1 m2 = m'' { // The [[real]] can contain 128 values ... squeeze them out! image = im_mask2vips (Matrix m2) == 255; m2_width = get_width image; m2_height = get_height image; // need to embed m2 in an image large enough for us to be able to // position m1 all around the edges, with a 1 pixel overlap image' = embed 0 (m1.width / 2) (m1.height / 2) (m2_width + (m1.width - 1)) (m2_height + (m1.height - 1)) image; // morph! image'' = fn m1 image'; // back to mask m' = im_vips2mask ((double) image''); // Turn 0 in output to 128 (don't care). m'' = map (map fn) m'.value { fn a = 128, a == 0; = a; } } dilate mask image = oo_unary_function dilate_op image, is_class image = im_dilate image (to_matrix mask), is_image image = error (_ "bad arguments to " ++ "dilate") { dilate_op = Operator "dilate" dilate_object Operator_type.COMPOUND_REWRAP false; dilate_object x = _morph_2_masks dilate mask x, is_matrix x = dilate mask x; } erode mask image = oo_unary_function erode_op image, is_class image = im_erode image (to_matrix mask), is_image image = error (_ "bad arguments to " ++ "erode") { erode_op = Operator "erode" erode_object Operator_type.COMPOUND_REWRAP false; erode_object x = _morph_2_masks erode mask x, is_matrix x = erode mask x; } conv mask image = oo_unary_function conv_op image, is_class image = im_conv image (to_matrix mask), is_image image = error (_ "bad arguments to " ++ "conv" ++ ": " ++ "conv (" ++ print mask ++ ") (" ++ print image ++ ")") { conv_op = Operator "conv" (conv mask) Operator_type.COMPOUND_REWRAP false; } convf mask image = oo_unary_function convf_op image, is_class image = im_conv_f image (to_matrix mask), is_image image = error (_ "bad arguments to " ++ "convf" ++ ": " ++ "convf (" ++ print mask ++ ") (" ++ print image ++ ")") { convf_op = Operator "convf" (convf mask) Operator_type.COMPOUND_REWRAP false; } convsep mask image = oo_unary_function convsep_op image, is_class image = im_convsep image (to_matrix mask), is_image image = error (_ "bad arguments to " ++ "convsep") { convsep_op = Operator "convsep" (convsep mask) Operator_type.COMPOUND_REWRAP false; } aconvsep layers mask image = oo_unary_function aconvsep_op image, is_class image = im_aconvsep image (to_matrix mask) (to_real layers), is_image image = error (_ "bad arguments to " ++ "aconvsep") { aconvsep_op = Operator "aconvsep" (aconvsep layers mask) Operator_type.COMPOUND_REWRAP false; } convsepf mask image = oo_unary_function convsepf_op image, is_class image = im_convsep_f image (to_matrix mask), is_image image = error (_ "bad arguments to " ++ "convsepf") { convsepf_op = Operator "convsepf" (convsepf mask) Operator_type.COMPOUND_REWRAP false; } rank w h n image = oo_unary_function rank_op image, is_class image = im_rank image (to_real w) (to_real h) (to_real n), is_image image = error (_ "bad arguments to " ++ "rank") { rank_op = Operator "rank" (rank w h n) Operator_type.COMPOUND_REWRAP false; } rank_image n x = rlist x.value, is_Group x = rlist x, is_list x = error (_ "bad arguments to " ++ "rank_image") { rlist l = wrapper ranked, has_wrapper = ranked { has_wrapper = has_member_list (has_member "Image") l; wrapper = get_member_list (has_member "Image") (get_member "Image") l; ranked = im_rank_image (map get_image l) (to_real n); } } // find the correlation surface for a small image within a big one correlate small big = oo_binary_function correlate_op small big, is_class small = oo_binary'_function correlate_op small big, is_class big = im_spcor big small, is_image small && is_image big = error (_ "bad arguments to " ++ "correlate") { correlate_op = Operator "correlate" correlate Operator_type.COMPOUND_REWRAP false; } // just sum-of-squares-of-differences correlate_fast small big = oo_binary_function correlate_fast_op small big, is_class small = oo_binary'_function correlate_fast_op small big, is_class big = im_fastcor big small, is_image small && is_image big = error (_ "bad arguments to " ++ "correlate_fast") { correlate_fast_op = Operator "correlate_fast" correlate_fast Operator_type.COMPOUND_REWRAP false; } // set Type, wrap as Plot_hist if it's a class hist_tag x = oo_unary_function hist_tag_op x, is_class x = image_set_type Image_type.HISTOGRAM x, is_image x = error (_ "bad arguments to " ++ "hist_tag") { hist_tag_op = Operator "hist_tag" (Plot_histogram @ hist_tag) Operator_type.COMPOUND false; } hist_find x = oo_unary_function hist_find_op x, is_class x = im_histgr x (-1), is_image x = error (_ "bad arguments to " ++ "hist_find") { hist_find_op = Operator "hist_find" (Plot_histogram @ hist_find) Operator_type.COMPOUND false; } hist_find_nD bins image = oo_unary_function hist_find_nD_op image, is_class image = im_histnD image (to_real bins), is_image image = error (_ "bad arguments to " ++ "hist_find_nD") { hist_find_nD_op = Operator "hist_find_nD" (hist_find_nD bins) Operator_type.COMPOUND_REWRAP false; } hist_find_indexed mode index value = oo_binary_function hist_find_indexed_op index value, is_class index = oo_binary'_function hist_find_indexed_op index value, is_class value = indexed index value, is_image index && is_image value = error (_ "bad arguments to " ++ "hist_find_indexed") { hist_find_indexed_op = Operator "hist_find_indexed" (compose (compose Plot_histogram) (hist_find_indexed mode)) Operator_type.COMPOUND false; indexed index value = out { [out] = vips_call "hist_find_indexed" [value, index] [ "combine" => mode ]; } } hist_entropy x = oo_unary_function hist_entropy_op x, is_class x = entropy x, is_image x = error (_ "bad arguments to " ++ "hist_entropy") { hist_entropy_op = Operator "hist_entropy" hist_entropy Operator_type.COMPOUND_REWRAP false; entropy x = out { [out] = vips_call "hist_entropy" [x] [ ]; } } hist_map hist image = oo_binary_function hist_map_op hist image, is_class hist = oo_binary'_function hist_map_op hist image, is_class image = im_maplut image hist, is_image hist && is_image image = error (_ "bad arguments to " ++ "hist_map") { // can't use rewrap, as we want to always wrap as image hist_map_op = Operator "hist_map" (compose (compose Image) hist_map) Operator_type.COMPOUND false; } hist_cum hist = oo_unary_function hist_cum_op hist, is_class hist = im_histcum hist, is_image hist = error (_ "bad arguments to " ++ "hist_cum") { hist_cum_op = Operator "hist_cum" hist_cum Operator_type.COMPOUND_REWRAP false; } hist_diff hist = oo_unary_function hist_diff_op hist, is_class hist = im_histdiff hist, is_image hist = error (_ "bad arguments to " ++ "hist_diff") { hist_diff_op = Operator "hist_diff" hist_diff Operator_type.COMPOUND_REWRAP false; im_histdiff h = (conv (Matrix [[-1, 1]]) @ clip2fmt (fmt (get_format h))) h { // up the format so it can represent the whole range of // possible values from this mask fmt x = Image_format.SHORT, x == Image_format.UCHAR || x == Image_format.CHAR = Image_format.INT, x == Image_format.USHORT || x == Image_format.SHORT || x == Image_format.UINT = x; } } hist_norm hist = oo_unary_function hist_norm_op hist, is_class hist = im_histnorm hist, is_image hist = error (_ "bad arguments to " ++ "hist_norm") { hist_norm_op = Operator "hist_norm" hist_norm Operator_type.COMPOUND_REWRAP false; } hist_inv hist = oo_unary_function hist_inv_op hist, is_class hist = inv hist, is_image hist = error (_ "bad arguments to " ++ "hist_inv") { hist_inv_op = Operator "hist_inv" hist_inv Operator_type.COMPOUND_REWRAP false; inv im = im_invertlut (to_matrix im''') len { // need a vertical doublemask im' = rot90 im, get_width im > 1 && get_height im == 1 = im, get_width im == 1 && get_height im > 1 = error (_ "not a hist"); len = get_height im'; // values must be scaled to 0 - 1 im'' = im' / (max im'); // add an index column on the left // again, must be in 0-1 y = ((make_xy 1 len)?1) / len; im''' = y ++ im''; } } hist_match in ref = oo_binary_function hist_match_op in ref, is_class in = oo_binary'_function hist_match_op in ref, is_class ref = im_histspec in ref, is_image in && is_image ref = error (_ "bad arguments to " ++ "hist_match") { hist_match_op = Operator "hist_match" hist_match Operator_type.COMPOUND_REWRAP false; } hist_equalize x = hist_map ((hist_norm @ hist_cum @ hist_find) x) x; hist_equalize_local w h l image = oo_unary_function hist_equalize_local_op image, is_class image = out, is_image image = error (_ "bad arguments to " ++ "hist_equalize_local") { hist_equalize_local_op = Operator "hist_equalize_local" (hist_equalize_local w h l) Operator_type.COMPOUND_REWRAP false; [out] = vips_call "hist_local" [image, to_real w, to_real h] [$max_slope => to_real l]; } // find the threshold below which are percent of the image (percent in [0,1]) // eg. hist_thresh 0.1 x == 12, then x < 12 will light up 10% of the pixels hist_thresh percent image = x { // our own normaliser ... we don't want to norm channels separately // norm to [0,1] my_hist_norm h = h / max h; // normalised cumulative hist // we sum the channels before we normalise, because we want to treat them // all the same h = (my_hist_norm @ sum @ bandsplit @ hist_cum @ hist_find) image.value; // threshold that, then use im_profile to search for the x position in the // histogram x = mean (im_profile (h > percent) 1); } /* Sometimes useful, despite plotting now being built in, for making * diagnostic images. */ hist_plot hist = oo_unary_function hist_plot_op hist, is_class hist = im_histplot hist, is_image hist = error (_ "bad arguments to " ++ "hist_plot") { hist_plot_op = Operator "hist_plot" (Image @ hist_plot) Operator_type.COMPOUND false; } zerox d x = oo_unary_function zerox_op x, is_class x = im_zerox x (to_real d), is_image x = error (_ "bad arguments to " ++ "zerox") { zerox_op = Operator "zerox" (zerox d) Operator_type.COMPOUND_REWRAP false; } reduce kernel xshr yshr image = oo_unary_function reduce_op image, is_class image = reduce_im image, is_image image = error (_ "bad arguments to " ++ "reduce") { reduce_op = Operator "reduce" reduce_im Operator_type.COMPOUND_REWRAP false; reduce_im im = out { [out] = vips_call "reduce" [im, xshr, yshr] [$kernel => kernel.value]; } } similarity interpolate scale angle image = oo_unary_function similarity_op image, is_class image = similarity_im image, is_image image = error (_ "bad arguments to " ++ "similarity") { similarity_op = Operator "similarity" similarity_im Operator_type.COMPOUND_REWRAP false; similarity_im im = out { [out] = vips_call "similarity" [im] [ $interpolate => interpolate.value, $scale => scale, $angle => angle ]; } } resize kernel xfac yfac image = oo_unary_function resize_op image, is_class image = resize_im image, is_image image = error (_ "bad arguments to " ++ "resize") { resize_op = Operator "resize" resize_im Operator_type.COMPOUND_REWRAP false; xfac' = to_real xfac; yfac' = to_real yfac; rxfac' = 1 / xfac'; ryfac' = 1 / yfac'; is_nn = kernel.type == Kernel_type.NEAREST_NEIGHBOUR; resize_im im // upscale by integer factor, nearest neighbour = im_zoom im xfac' yfac', is_int xfac' && is_int yfac' && xfac' >= 1 && yfac' >= 1 && is_nn // downscale by integer factor, nearest neighbour = im_subsample im rxfac' ryfac', is_int rxfac' && is_int ryfac' && rxfac' >= 1 && ryfac' >= 1 && is_nn // everything else ... we just pass on to vips_resize() = vips_resize kernel xfac' yfac' im { vips_resize kernel hscale vscale im = out { [out] = vips_call "resize" [im, hscale] [$vscale => vscale, $kernel => kernel.value]; } } } sharpen radius x1 y2 y3 m1 m2 in = oo_unary_function sharpen_op in, is_class in = im_sharpen in (to_real radius) (to_real x1) (to_real y2) (to_real y3) (to_real m1) (to_real m2), is_image in = error (_ "bad arguments to " ++ "sharpen") { sharpen_op = Operator "sharpen" (sharpen radius x1 y2 y3 m1 m2) Operator_type.COMPOUND_REWRAP false; } tone_analyse s m h sa ma ha in = oo_unary_function tone_analyse_op in, is_class in = im_tone_analyse in (to_real s) (to_real m) (to_real h) (to_real sa) (to_real ma) (to_real ha), is_image in = error (_ "bad arguments to " ++ "tone_analyse") { tone_analyse_op = Operator "tone_analyse" (Plot_histogram @ tone_analyse s m h sa ma ha) Operator_type.COMPOUND false; } tone_map hist image = oo_binary_function tone_map_op hist image, is_class hist = oo_binary'_function tone_map_op hist image, is_class image = im_tone_map image hist, is_image hist && is_image image = error (_ "bad arguments to " ++ "tone_map") { tone_map_op = Operator "tone_map" tone_map Operator_type.COMPOUND_REWRAP false; } tone_build fmt b w s m h sa ma ha = (Plot_histogram @ clip2fmt fmt) (im_tone_build_range mx mx (to_real b) (to_real w) (to_real s) (to_real m) (to_real h) (to_real sa) (to_real ma) (to_real ha)) { mx = Image_format.maxval fmt; } icc_export depth profile intent in = oo_unary_function icc_export_op in, is_class in = im_icc_export_depth in (to_real depth) (expand profile) (to_real intent), is_image in = error (_ "bad arguments to " ++ "icc_export") { icc_export_op = Operator "icc_export" (icc_export depth profile intent) Operator_type.COMPOUND_REWRAP false; } icc_import profile intent in = oo_unary_function icc_import_op in, is_class in = im_icc_import in (expand profile) (to_real intent), is_image in = error (_ "bad arguments to " ++ "icc_import") { icc_import_op = Operator "icc_import" (icc_import profile intent) Operator_type.COMPOUND_REWRAP false; } icc_import_embedded intent in = oo_unary_function icc_import_embedded_op in, is_class in = im_icc_import_embedded in (to_real intent), is_image in = error (_ "bad arguments to " ++ "icc_import_embedded") { icc_import_embedded_op = Operator "icc_import_embedded" (icc_import_embedded intent) Operator_type.COMPOUND_REWRAP false; } icc_transform in_profile out_profile intent in = oo_unary_function icc_transform_op in, is_class in = im_icc_transform in (expand in_profile) (expand out_profile) (to_real intent), is_image in = error (_ "bad arguments to " ++ "icc_transform") { icc_transform_op = Operator "icc_transform" (icc_transform in_profile out_profile intent) Operator_type.COMPOUND_REWRAP false; } icc_ac2rc profile in = oo_unary_function icc_ac2rc_op in, is_class in = im_icc_ac2rc in (expand profile), is_image in = error (_ "bad arguments to " ++ "icc_ac2rc") { icc_ac2rc_op = Operator "icc_ac2rc" (icc_ac2rc profile) Operator_type.COMPOUND_REWRAP false; } // Given a xywh rect, flip it around so wh are always positive rect_normalise x y w h = [x', y', w', h'] { x' = x + w, w < 0 = x; y' = y + h, h < 0 = y; w' = abs w; h' = abs h; } draw_flood_blob x y ink image = oo_unary_function draw_flood_blob_op image, is_class image = im_draw_flood_blob image (to_real x) (to_real y) ink, is_image image = error (_ "bad arguments to " ++ "draw_flood_blob") { draw_flood_blob_op = Operator "draw_flood_blob" (draw_flood_blob x y ink) Operator_type.COMPOUND_REWRAP false; } draw_flood x y ink image = oo_unary_function draw_flood_op image, is_class image = im_draw_flood image (to_real x) (to_real y) ink, is_image image = error (_ "bad arguments to " ++ "draw_flood") { draw_flood_op = Operator "draw_flood" (draw_flood x y ink) Operator_type.COMPOUND_REWRAP false; } /* This version of draw_rect uses insert_noexpand and will be fast, even for * huge images. */ draw_rect_width x y w h f t ink image = oo_unary_function draw_rect_width_op image, is_class image = my_draw_rect_width image (to_int x) (to_int y) (to_int w) (to_int h) (to_int f) (to_int t) ink, is_image image = error (_ "bad arguments to " ++ "draw_rect_width") { draw_rect_width_op = Operator "draw_rect_width" (draw_rect_width x y w h f t ink) Operator_type.COMPOUND_REWRAP false; my_draw_rect_width image x y w h f t ink = insert x' y' (block w' h') image, f == 1 = (insert x' y' (block w' t) @ insert (x' + w' - t) y' (block t h') @ insert x' (y' + h' - t) (block w' t) @ insert x' y' (block t h')) image { insert = insert_noexpand; block w h = image_new w h (get_bands image) (get_format image) (get_coding image) (get_type image) ink' 0 0; ink' = Vector ink, is_list ink = ink; [x', y', w', h'] = rect_normalise x y w h; } } /* Default to 1 pixel wide edges. */ draw_rect x y w h f ink image = draw_rect_width x y w h f 1 ink image; /* This version of draw_rect uses the paintbox rect draw operation. It is an * inplace operation and will use bucketloads of memory. */ draw_rect_paintbox x y w h f ink image = oo_unary_function draw_rect_op image, is_class image = im_draw_rect image (to_real x) (to_real y) (to_real w) (to_real h) (to_real f) ink, is_image image = error (_ "bad arguments to " ++ "draw_rect_paintbox") { draw_rect_op = Operator "draw_rect" (draw_rect x y w h f ink) Operator_type.COMPOUND_REWRAP false; } draw_circle x y r f ink image = oo_unary_function draw_circle_op image, is_class image = im_draw_circle image (to_real x) (to_real y) (to_real r) (to_real f) ink, is_image image = error (_ "bad arguments to " ++ "draw_circle") { draw_circle_op = Operator "draw_circle" (draw_circle x y r f ink) Operator_type.COMPOUND_REWRAP false; } draw_line x1 y1 x2 y2 ink image = oo_unary_function draw_line_op image, is_class image = im_draw_line image (to_real x1) (to_real y1) (to_real x2) (to_real y2) ink, is_image image = error (_ "bad arguments to " ++ "draw_line") { draw_line_op = Operator "draw_line" (draw_line x1 y1 x2 y2 ink) Operator_type.COMPOUND_REWRAP false; } print_base base in = oo_unary_function print_base_op in, is_class in = map (print_base base) in, is_list in = print_base_real, is_real in = error (_ "bad arguments to " ++ "print_base") { print_base_op = Operator "print_base" (print_base base) Operator_type.COMPOUND false; print_base_real = error "print_base: bad base", base < 2 || base > 16 = "0", in < 0 || chars == [] = reverse chars { digits = map (\x x % base) (takewhile (not_equal 0) (iterate (\x idivide x base) in)); chars = map tohd digits; tohd x = (char) ((int) '0' + x), x < 10 = (char) ((int) 'A' + (x - 10)); } } /* id x: the identity function * * id :: * -> * */ id x = x; /* const x y: junk y, return x * * (const 3) is the function that always returns 3. * const :: * -> ** -> * */ const x y = x; /* converse fn a b: swap order of args to fn * * converse fn a b == fn b a * converse :: (* -> ** -> ***) -> ** -> * -> *** */ converse fn a b = fn b a; /* fix fn x: find the fixed point of a function */ fix fn x = limit (iterate fn x); /* until pred fn n: apply fn to n until pred succeeds; return that value * * until (more 1000) (multiply 2) 1 = 1024 * until :: (* -> bool) -> (* -> *) -> * -> * */ until pred fn n = n, pred n = until pred fn (fn n); /* Infinite list of primes. */ primes = 1 : (sieve [2 ..]) { sieve l = hd l : sieve (filter (nmultiple (hd l)) (tl l)); nmultiple n x = x / n != (int) (x / n); } /* Map an n-ary function (pass the args as a list) over groups of objects. * The objects can be single objects or groups. If more than one * object is a group, we iterate for the length of the smallest group. * Don't loop over plain lists, since we want (eg.) "mean [1, 2, 3]" to work. * Treat [] as no-value --- ie. if any of the inputs are [] we put [] into the * output and don't apply the function. copy-pasted into _types, keep in sync */ map_nary fn args = fn args, groups == [] = Group (map process [0, 1 .. shortest - 1]) { // find all the group arguments groups = filter is_Group args; // what's the length of the shortest group arg? shortest = foldr1 min_pair (map (len @ get_value) groups); // process index n ... pull that member from each argument // recurse to handle application, so we work for nested groups too process n = NULL, any (map (is_noval n) args) = map_nary fn (map (extract n) args) { extract n arg = arg.value?n, is_Group arg = arg; is_noval n arg = is_Group arg && arg.value?n == NULL; } } /* Map a 1-ary function over an object. */ map_unary fn a = map_nary (list_1ary fn) [a]; /* Map a 2-ary function over a pair of objects. */ map_binary fn a b = map_nary (list_2ary fn) [a, b]; /* Map a 3-ary function over three objects. */ map_trinary fn a b c = map_nary (list_3ary fn) [a, b, c]; /* Map a 4-ary function over three objects. */ map_quaternary fn a b c d = map_nary (list_4ary fn) [a, b, c, d]; /* Same as map_nary, but for lists. Handy for (eg.) implementing arith ops on * vectors and matricies. */ map_nary_list fn args = fn args, lists == [] = map process [0, 1 .. shortest - 1] { // find all the list arguments lists = filter is_list args; // what's the length of the shortest list arg? shortest = foldr1 min_pair (map len lists); // process index n ... pull that member from each argument // recurse to handle application, so we work for nested lists too process n = map_nary_list fn (map (extract n) args) { extract n arg = arg?n, is_list arg = arg; } } map_unaryl fn a = map_nary_list (list_1ary fn) [a]; map_binaryl fn a b = map_nary_list (list_2ary fn) [a, b]; /* Remove features smaller than x pixels across from an image. This used to be * rather complex ... convsep is now good enough to use. */ smooth x image = convsep (matrix_gaussian_blur (to_real x * 2)) image; /* Chop up an image into a list of lists of smaller images. Pad edges with * black. */ imagearray_chop tile_width tile_height hoverlap voverlap i = map chop' [0, vstep .. last_y] { width = get_width i; height = get_height i; bands = get_bands i; format = get_format i; type = get_type i; tile_width' = to_real tile_width; tile_height' = to_real tile_height; hoverlap' = to_real hoverlap; voverlap' = to_real voverlap; /* Unique pixels per tile. */ hstep = tile_width' - hoverlap'; vstep = tile_height' - voverlap'; /* Number of tiles across and down. Remember the case where width == * hstep. */ across = (int) ((width - 1) / hstep) + 1; down = (int) ((height - 1) / vstep) + 1; /* top/left of final tile. */ last_x = hstep * (across - 1); last_y = vstep * (down - 1); /* How much do we need to pad by? */ sx = last_x + tile_width'; sy = last_y + tile_height'; /* Expand image with black to pad size. */ pad = embed 0 0 0 sx sy i; /* Chop up a row. */ chop' y = map chop'' [0, hstep .. last_x] { chop'' x = extract_area x y tile_width' tile_height' pad; } } /* Reassemble image. */ imagearray_assemble hoverlap voverlap il = (image_set_origin 0 0 @ foldl1 tbj @ map (foldl1 lrj)) il { lrj l r = insert (get_width l + hoverlap) 0 r l; tbj t b = insert 0 (get_height t + voverlap) b t; } /* Generate an nxn identity matrix. */ identity_matrix n = error "identity_matrix: n > 0", n < 1 = map line [0 .. n - 1] { line p = take p [0, 0 ..] ++ [1] ++ take (n - p - 1) [0, 0 ..]; } /* Incomplete gamma function Q(a, x) == 1 - P(a, x) FIXME ... this is now a builtin, until we can get a nice List class (requires overloadable ':') gammq a x = error "bad args", x < 0 || a <= 0 = 1 - gamser, x < a + 1 = gammcf { gamser = (gser a x)?0; gammcf = (gcf a x)?0; } */ /* Incomplete gamma function P(a, x) evaluated as series representation. Also * return ln(gamma(a)) ... nr in c, pp 218 */ gser a x = [gamser, gln] { gln = gammln a; gamser = error "bad args", x < 0 = 0, x == 0 = 1 // fix this { // maximum iterations maxit = 100; ap = List [a + 1, a + 2 ...]; xoap = x / ap; del = map product (prefixes xoap.value); /* del = map (multiply (1 / a)) (map product (prefixes xoap)) del = xap = iterate (multiply */ /* Generate all prefixes of a list ... [1,2,3] -> [[1], [1, 2], [1, 2, * 3], [1, 2, 3, 4] ...] */ prefixes l = map (converse take l) [1..]; } } /* ln(gamma(xx)) ... nr in c, pp 214 */ gammln xx = gln { cof = [76.18009172947146, -86.50532032941677, 24.01409824083091, -1.231739572450155, 0.1208650973866179e-2, -0.5395239384953e-5]; y = take 6 (iterate (add 1) (xx + 1)); ser = 1.000000000190015 + sum (map2 divide cof y); tmp = xx + 0.5; tmp' = tmp - ((xx + 0.5) * log tmp); gln = -tmp + log (2.5066282746310005 * ser / xx); } /* make a LUT from a scatter */ buildlut x = Plot_histogram (im_buildlut x), is_Matrix x && x.width > 1 = im_buildlut (Matrix x), is_matrix x && is_list_len_more 1 x?0 = error (_ "bad arguments to " ++ "buildlut"); /* Linear regression. Return a class with the stuff we need in. * from s15.2, p 665 NR in C * * Also calculate R2, see eg.: * https://en.wikipedia.org/wiki/Coefficient_of_determination */ linreg xes yes = obj { obj = class { // in case we ever get shown in the workspace _vislevel = 2; slope = sum [t * y :: [t, y] <- zip2 tes yes] / st2; intercept = (sy - sx * slope) / ss; chi2 = sum [(y - intercept - slope * x) ** 2 :: [x, y] <- zip2 xes yes]; siga = (chi2 / (ss - 2)) ** 0.5 * ((1 + sx ** 2 / (ss * st2)) / ss) ** 0.5; sigb = (chi2 / (ss - 2)) ** 0.5 * (1 / st2) ** 0.5; // for compat with linregw, see below q = 1.0; R2 = 1 - chi2 / sum [(y - my) ** 2 :: y <- yes]; } ss = len xes; sx = sum xes; sy = sum yes; my = sy / ss; sxoss = sx / ss; tes = [x - sxoss :: x <- xes]; st2 = sum [t ** 2 :: t <- tes]; } /* Weighted linear regression. Xes, yes and a list of deviations. */ linregw xes yes devs = obj { obj = class { // in case we ever get shown in the workspace _vislevel = 2; slope = sum [(t * y) / sd :: [t, y, sd] <- zip3 tes yes devs] / st2; intercept = (sy - sx * slope) / ss; chi2 = sum [((y - intercept - slope * x) / sd) ** 2 :: [x, y, sd] <- zip3 xes yes devs]; siga = ((1 + sx * sx / (ss * st2)) / ss) ** 0.5; sigb = (1 / st2) ** 0.5; q = gammq (0.5 * (len xes - 2)) (0.5 * chi2); R2 = 1 - chi2 / sum [(y - my) ** 2 :: y <- yes]; } wt = [sd ** -0.5 :: sd <- devs]; ss = sum wt; sx = sum [x * w :: [x, w] <- zip2 xes wt]; sy = sum [y * w :: [y, w] <- zip2 yes wt]; my = sy / len xes; sxoss = sx / ss; tes = [(x - sxoss) / sd :: [x, sd] <- zip2 xes devs]; st2 = sum [t ** 2 :: t <- tes]; } /* Clustering: pass in a list of points, repeatedly merge the * closest two points until no two points are closer than the threshold. * Return [merged-points, corresponding-weights]. A weight is a list of the * indexes we merged to make that point, ie. len weight == how significant * this point is. * * eg. * cluster 12 [152,154,155,42,159] == * [[155,42],[[1,2,0,4],[3]]] */ cluster thresh points = oo_unary_function cluster_op points, is_class points // can't use [0..len points - 1], in case len points == 0 = merge [points, map (converse cons []) (take (len points) [0 ..])], is_list points = error (_ "bad arguments to " ++ "cluster") { cluster_op = Operator "cluster" (cluster thresh) Operator_type.COMPOUND false; merge x = x, m < 2 || d > thresh = merge [points', weights'] { [points, weights] = x; m = len points; // generate indexes of all possible pairs, avoiding comparing a thing // to itself, and assuming that dist is reflexive // first index is always less than 2nd index // the +1,+2 makes sure we have an increasing generator, otherwise we // can get [3 .. 4] (for example), which will make a decreasing // sequence pairs = [[x, y] :: x <- [0 .. m - 1]; y <- [x + 1, x + 2 .. m - 1]]; // distance function // arg is eg. [3,1], meaning get distance from point 3 to point 1 dist x = abs (points?i - points?j) { [i, j] = x; } // smallest distance, then the two points we merge p = minpos (map dist pairs); d = dist pairs?p; [i, j] = pairs?p; // new point and new weight nw = weights?i ++ weights?j; np = (points?i * len weights?i + points?j * len weights?j) / len nw; // remove element i from a list remove i l = take i l ++ drop (i + 1) l; // remove two old points, add the new merged one // i < j (see "pairs", above) points' = np : remove i (remove j points); weights' = nw : remove i (remove j weights); } } /* Extract the area of an image around an arrow. * Transform the image to make the arrow horizontal, then displace by hd and * vd pxels, then cut out a bit h pixels high centered on the arrow. */ extract_arrow hd vd h arrow = extract_area (re p' + hd) (im p' - h / 2 + vd) (re pv) h im' { // the line as a polar vector pv = polar (arrow.width, arrow.height); a = im pv; // smallest rotation that will make the line horizontal a' = 360 - a, a > 270 = 180 - a, a > 90 = -a; im' = rotate Interpolate_bilinear a' arrow.image; // look at the start and end of the arrow, pick the leftmost p = (arrow.left, arrow.top), arrow.left <= arrow.right = (arrow.right, arrow.bottom); // transform that point to im' space p' = rectangular (polar p + (0, a')) + (im'.xoffset, im'.yoffset); } /* You'd think these would go in _convert, but they are not really colour ops, * so put them here. */ rad2float image = oo_unary_function rad2float_op image, is_class image = im_rad2float image, is_image image = error (_ "bad arguments to " ++ "rad2float") { rad2float_op = Operator "rad2float" rad2float Operator_type.COMPOUND_REWRAP false; } float2rad image = oo_unary_function float2rad_op image, is_class image = im_float2rad image, is_image image = error (_ "bad arguments to " ++ "float2rad") { float2rad_op = Operator "float2rad" float2rad Operator_type.COMPOUND_REWRAP false; } segment x = oo_unary_function segment_op x, is_class x = image', is_image x = error (_ "bad arguments to " ++ "segment") { segment_op = Operator "segment" segment Operator_type.COMPOUND_REWRAP false; [image, nsegs] = im_segment x; image' = im_copy_set_meta image "n-segments" nsegs; } point a b = oo_binary_function point_op a b, is_class a = oo_binary'_function point_op a b, is_class b = im_read_point b x y, is_image b = [b?x?y], is_matrix b = [b?x], is_real_list b && y == 0 = [b?y], is_real_list b && x == 0 = error (_ "bad arguments to " ++ "point") { point_op = Operator "point" (\a\b Vector (point a b)) Operator_type.COMPOUND false; (x, y) = a, is_complex a; = (a?0, a?1), is_real_list a && is_list_len 2 a = error "bad position format"; } /* One image in, one out. */ system_image command x = oo_unary_function system_image_op x, is_class x = system x, is_image x = error (_ "bad arguments to " ++ "system_image") { system_image_op = Operator "system_image" (system_image command) Operator_type.COMPOUND_REWRAP false; system im = image_out { [image_out, log] = im_system_image (get_image im) "%s.tif" "%s.tif" command; } } /* Two images in, one out. */ system_image2 command x1 x2 = oo_binary_function system_image2_op x1 x2, is_class x1 = oo_binary'_function system_image2_op x1 x2, is_class x2 = system x1 x2, is_image x1 && is_image x2 = error (_ "bad arguments to " ++ "system_image2") { system_image2_op = Operator "system_image2" (system_image2 command) Operator_type.COMPOUND_REWRAP false; system x1 x2 = image_out { [image_out] = vips_call "system" [command] [ $in => [x1, x2], $out => true, $out_format => "%s.tif", $in_format => "%s.tif" ]; } } /* Three images in, one out. */ system_image3 command x1 x2 x3 = oo_binary_function system_image2_op x2 x3, is_class x2 = oo_binary'_function system_image2_op x2 x3, is_class x3 = system x1 x2 x3, is_image x1 && is_image x2 && is_image x3 = error (_ "bad arguments to " ++ "system_image3") { system_image2_op = Operator "system_image2" (system_image3 command x1) Operator_type.COMPOUND_REWRAP false; system x1 x2 x3 = image_out { [image_out] = vips_call "system" [command] [ $in => [x1, x2, x3], $out => true, $out_format => "%s.tif", $in_format => "%s.tif" ]; } } /* Zero images in, one out. */ system_image0 command = Image image_out { [image_out] = vips_call "system" [command] [ $out => true, $out_format => "%s.tif" ]; } hough_line w h x = oo_unary_function hough_line_op x, is_class x = hline (to_real w) (to_real h) x, is_image x = error (_ "bad arguments to " ++ "hough_line") { hough_line_op = Operator "hough_line" (hough_line w h) Operator_type.COMPOUND_REWRAP false; hline w h x = pspace { [pspace] = vips_call "hough_line" [x] [ $width => w, $height => h ]; } } hough_circle s mn mx x = oo_unary_function hough_circle_op x, is_class x = hcircle (to_real s) (to_real mn) (to_real mx) x, is_image x = error (_ "bad arguments to " ++ "hough_circle") { hough_circle_op = Operator "hough_circle" (hough_circle s mn mx) Operator_type.COMPOUND_REWRAP false; hcircle s mn mx x = pspace { [pspace] = vips_call "hough_circle" [x] [ $scale => s, $min_radius => mn, $max_radius => mx ]; } } mapim interp ind in = oo_binary_function mapim_op ind in, is_class ind = oo_binary'_function mapim_op ind in, is_class in = mapim_fn ind in, is_image ind && is_image in = error (_ "bad arguments to " ++ "mapim") { mapim_op = Operator "mapim" (mapim interp) Operator_type.COMPOUND_REWRAP false; mapim_fn ind im = out { [out] = vips_call "mapim" [im, ind] [$interpolate => interp]; } } perlin cell width height = Image im { [im] = vips_call "perlin" [to_real width, to_real height] [ $cell_size => to_real cell ]; } worley cell width height = Image im { [im] = vips_call "worley" [to_real width, to_real height] [ $cell_size => to_real cell ]; } gaussnoise width height mean sigma = im { [im] = vips_call "gaussnoise" [to_real width, to_real height] [ $mean => to_real mean, $sigma => to_real sigma ]; } flattenimage bg x = oo_unary_function flatten_op x, is_class x = flt (to_vector bg) x, is_image x = error (_ "bad arguments to " ++ "flattenimage") { flatten_op = Operator "flatten" (flattenimage bg) Operator_type.COMPOUND_REWRAP false; flt bg x = out { [out] = vips_call "flatten" [x] [ $background => bg.value ]; } } premultiply x = oo_unary_function premultiply_op x, is_class x = prem x, is_image x = error (_ "bad arguments to " ++ "premultiply") { premultiply_op = Operator "premultiply" premultiply Operator_type.COMPOUND_REWRAP false; prem x = out { [out] = vips_call "premultiply" [x] [ ]; } } unpremultiply x = oo_unary_function unpremultiply_op x, is_class x = unprem x, is_image x = error (_ "bad arguments to " ++ "unpremultiply") { unpremultiply_op = Operator "unpremultiply" unpremultiply Operator_type.COMPOUND_REWRAP false; unprem x = out { [out] = vips_call "unpremultiply" [x] [ ]; } } hist_entropy x = oo_unary_function hist_entropy_op x, is_class x = entropy x, is_image x = error (_ "bad arguments to " ++ "hist_entropy") { hist_entropy_op = Operator "hist_entropy" hist_entropy Operator_type.COMPOUND_REWRAP false; entropy x = out { [out] = vips_call "hist_entropy" [x] [ ]; } } canny sigma precision x = oo_unary_function canny_op x, is_class x = canny_im (to_real sigma) (to_int precision) x, is_image x = error (_ "bad arguments to " ++ "canny") { canny_op = Operator "canny" (canny sigma precision) Operator_type.COMPOUND_REWRAP false; canny_im sigma precision x = out { [out] = vips_call "canny" [x] [ $sigma => sigma, $precision => precision ]; } } sobel x = oo_unary_function sobel_op x, is_class x = sobel_im x, is_image x = error (_ "bad arguments to " ++ "sobel") { sobel_op = Operator "sobel" sobel Operator_type.COMPOUND_REWRAP false; sobel_im x = out { [out] = vips_call "sobel" [x] [ ]; } } nip2-8.7.0/share/nip2/start/Preferences.ws0000644000175000017500000010177213330327434015254 00000000000000 nip2-8.7.0/share/nip2/start/Filter.def0000644000175000017500000011767613330327245014357 00000000000000Filter_conv_item = class Menupullright "_Convolution" "various spatial convolution filters" { /* Some useful masks. */ filter_blur = Matrix_con 9 0 [[1, 1, 1], [1, 1, 1], [1, 1, 1]]; filter_sharp = Matrix_con 8 0 [[-1, -1, -1], [-1, 16, -1], [-1, -1, -1]]; filter_emboss = Matrix_con 1 128 [[-1, 0], [0, 1]]; filter_laplacian = Matrix_con 1 128 [[-1, -1, -1], [-1, 8, -1], [-1, -1, -1]]; filter_sobel = Matrix_con 1 128 [[1, 2, 1], [0, 0, 0], [-1, -2, -1]]; filter_lindet = Matrix_con 1 0 [[1, 1, 1], [-2, -2, -2], [1, 1, 1]]; Blur_item = class Menuaction "_Blur" "3x3 blur of image" { action x = map_unary (conv filter_blur) x; } Sharpen_item = class Menuaction "_Sharpen" "3x3 sharpen of image" { action x = map_unary (conv filter_sharp) x; } Usharp_item = class Menuaction "_Unsharp Mask" "cored sharpen of L only in LAB image" { action x = class _result { _vislevel = 3; size = Option "Radius" [ "3 pixels", "5 pixels", "7 pixels", "9 pixels", "11 pixels", "51 pixels" ] 0; st = Scale "Smoothness threshold" 0 5 2; bm = Scale "Brighten by at most" 1 50 10; dm = Scale "Darken by at most" 1 50 20; fs = Scale "Sharpen flat areas by" 0 5 0.5; js = Scale "Sharpen jaggy areas by" 0 5 1; _result = map_unary process x { process in = Image in''' { in' = colour_transform_to Image_type.LABS in.value; in'' = sharpen [3, 5, 7, 9, 11, 51]?size st bm dm fs js in'; in''' = colour_transform_to (get_type in) in''; } } } } Emboss_item = class Menuaction "_Emboss" "1 pixel displace emboss" { action x = map_unary (conv filter_emboss) x; } Laplacian_item = class Menuaction "_Laplacian" "3x3 laplacian edge detect" { action x = map_unary (conv filter_laplacian) x; } Sobel_item = class Menuaction "So_bel" "3x3 Sobel edge detect" { action x = map_unary sobel x; } /* 3x3 line detect of image diagonals should be scaled down by root(2) I guess Kirk */ Linedet_item = class Menuaction "Li_ne Detect" "3x3 line detect" { action x = map_unary lindet x { lindet im = foldr1 max_pair images { masks = take 4 (iterate rot45 filter_lindet); images = map (converse conv im) masks; } } } Canny_item = class Menuaction "Canny" "Canny edge detector" { action x = class _result { _vislevel = 3; sigma = Scale "Sigma" 0.1 10 2; prec = Option "Precision" ["Int", "Float", "Approximate"] 1; _result = map_unary process x { process in = canny sigma prec.value in; } } } sep1 = Menuseparator; Custom_blur_item = class Menuaction "Custom B_lur / Sharpen" "blur or sharpen with tuneable parameters" { action x = class _result { _vislevel = 3; type = Option "Type" ["Blur", "Sharpen"] 0; r = Scale "Radius" 1 100 1; fac = Scale "Amount" 0 1 1; layers = Scale "Layers" 1 100 10; shape = Option "Mask shape" [ "Square", "Gaussian" ] 0; prec = Option "Precision" ["Int", "Float", "Approximate"] 0; _result = map_unary process x { process in = clip2fmt blur.format proc { mask = matrix_blur r.value, shape.value == 0 = matrix_gaussian_blur r.value; blur = [convsep, convsepf, aconvsep layers]?prec mask in; proc = in + fac * (in - blur), type == 1 = blur * fac + in * (1 - fac); } } } } Custom_conv_item = class Menuaction "Custom C_onvolution" "convolution filter with tuneable parameters" { action x = class _result { _vislevel = 3; matrix = Matrix_con 1 0 [[0, 0, 0], [0, 1, 0], [0, 0, 0]]; separable = Toggle "Seperable convolution" false, matrix.width == 1 || matrix.height == 1 = false; type = Option "Convolution type" ["Int", "Float"] 0; rotate = Option "Rotate" [ "Don't rotate", "4 x 45 degrees", "8 x 45 degrees", "2 x 90 degrees" ] 0; _result = map_unary process x { process in = in.Image in' { conv_fn = im_lindetect, !separable && type == 0 && rotate == 1 = im_compass, !separable && type == 0 && rotate == 2 = im_gradient, !separable && type == 0 && rotate == 3 = im_conv, !separable && type == 0 = im_convsep, separable && type == 0 = im_conv_f, !separable && type == 1 = im_convsep_f, separable && type == 1 = error "boink!"; in' = conv_fn in.value matrix; } } } } } Filter_rank_item = class Menupullright "_Rank" "various rank filters" { Median_item = class Menuaction "_Median" "3x3 median rank filter" { action x = map_unary (rank 3 3 4) x; } Image_rank_item = class Menuaction "_Image Rank" "pixelwise rank a list or group of images" { action x = class _result { _vislevel = 3; select = Expression "Rank" ((int) (guess_size / 2)) { guess_size = len x, is_list x = len x.value, is_Group x = 0; } // can't really iterate over groups ... since we allow a group // argument _result = rank_image select x; } } Custom_rank_item = class Menuaction "Custom _Rank" "rank filter with tuneable parameters" { action x = class _result { _vislevel = 3; window_width = Expression "Window width" 3; window_height = Expression "Window height" 3; select = Expression "Rank" ((int) ((to_real window_width * to_real window_height) / 2)); _result = map_unary process x { process in = rank window_width window_height select in; } } } } Filter_morphology_item = class Menupullright "_Morphology" "various morphological filters" { /* Some useful masks. */ mask8 = Matrix_mor [[255, 255, 255], [255, 255, 255], [255, 255, 255]]; mask4 = Matrix_mor [[128, 255, 128], [255, 255, 255], [128, 255, 128]]; mask1 = Matrix_mor [[0, 0, 0], [0, 255, 0], [0, 0, 0]]; thin = Matrix_mor [[0, 0, 0], [128, 255, 128], [255, 255, 255]]; Threshold_item = Select_item.Threshold_item; sep1 = Menuseparator; Dilate_item = class Menupullright "_Dilate" "morphological dilate" { Dilate8_item = class Menuaction "_8-connected" "dilate with an 8-connected mask" { action x = map_unary (dilate mask8) x; } Dilate4_item = class Menuaction "_4-connected" "dilate with a 4-connected mask" { action x = map_unary (dilate mask4) x; } } Erode_item = class Menupullright "_Erode" "morphological erode" { Erode8_item = class Menuaction "_8-connected" "erode with an 8-connected mask" { action x = map_unary (erode mask8) x; } Erode4_item = class Menuaction "_4-connected" "erode with a 4-connected mask" { action x = map_unary (erode mask4) x; } } Custom_morph_item = class Menuaction "Custom _Morphology" "convolution morphological operator" { action x = class _result { _vislevel = 3; mask = mask4; type = Option "Operation" ["Erode", "Dilate"] 1; apply = Expression "Number of times to apply mask" 1; _result = map_unary morph x { morph image = Image value' { fatmask = (iterate (dilate mask) mask)?(to_real apply - 1); value' = im_erode image.value fatmask, type.value == 0 = im_dilate image.value fatmask; } } } } sep2 = Menuseparator; Open_item = class Menuaction "_Open" "open with an 8-connected mask" { action x = map_unary (dilate mask8 @ erode mask8) x; } Close_item = class Menuaction "_Close" "close with an 8-connected mask" { action x = map_unary (erode mask8 @ dilate mask8) x; } Clean_item = class Menuaction "C_lean" "remove 8-connected isolated points" { action x = map_unary clean x { clean x = x ^ erode mask1 x; } } Thin_item = class Menuaction "_Thin" "thin once" { action x = map_unary thinall x { masks = take 8 (iterate rot45 thin); thin1 m x = x ^ erode m x; thinall x = foldr thin1 x masks; } } } Filter_fourier_item = class Menupullright "_Fourier" "various Fourier filters" { preview_size = 64; sense_option = Option "Sense" [ "Pass", "Reject" ] 0; // make a visualisation image make_vis fn = (Image @ image_set_type Image_type.FOURIER @ rotquad @ fn) (im_create_fmask preview_size preview_size); // make the process function process fn in = (Image @ fn) (im_flt_image_freq in.value); New_ideal_item = class Menupullright "_Ideal" "various ideal Fourier filters" { High_low_item = class Menuaction "_High or Low Pass" "highpass/lowpass ideal Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; // call a freq func with our parameters _params f = f sense.value fc.value 0 0 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" "ring pass/reject ideal Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; rw = Scale "Ring width" 0.01 0.99 0.5; // call a freq func with our parameters _params f = f (sense.value + 6) fc.value rw.value 0 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Band_item = class Menuaction "_Band Pass or Band Reject" "band pass/reject ideal Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fcx = Scale "Horizontal frequency cutoff" 0.01 0.99 0.5; fcy = Scale "Vertical frequency cutoff" 0.01 0.99 0.5; r = Scale "Radius" 0.01 0.99 0.5; // call a freq func with our parameters _params f = f (sense.value + 12) fcx.value fcy.value r.value 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } } New_gaussian_item = class Menupullright "_Gaussian" "various Gaussian Fourier filters" { High_low_item = class Menuaction "_High or Low Pass" "highpass/lowpass Gaussian Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; // call a freq func with our parameters _params f = f (sense.value + 4) fc.value ac.value 0 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" "ring pass/reject Gaussian Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; rw = Scale "Ring width" 0.01 0.99 0.5; // call a freq func with our parameters _params f = f (sense.value + 10) fc.value rw.value ac.value 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Band_item = class Menuaction "_Band Pass or Band Reject" "band pass/reject Gaussian Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fcx = Scale "Horizontal frequency cutoff" 0.01 0.99 0.5; fcy = Scale "Vertical frequency cutoff" 0.01 0.99 0.5; r = Scale "Radius" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; // call a freq func with our parameters _params f = f (sense.value + 16) fcx.value fcy.value r.value ac.value 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } } New_butterworth_item = class Menupullright "_Butterworth" "various Butterworth Fourier filters" { High_low_item = class Menuaction "_High or Low Pass" "highpass/lowpass Butterworth Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; o = Scale "Order" 1 10 2; // call a freq func with our parameters _params f = f (sense.value + 2) o.value fc.value ac.value 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" "ring pass/reject Butterworth Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; rw = Scale "Ring width" 0.01 0.99 0.5; o = Scale "Order" 1 10 2; // call a freq func with our parameters _params f = f (sense.value + 8) o.value fc.value rw.value ac.value 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Band_item = class Menuaction "_Band Pass or Band Reject" "band pass/reject Butterworth Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fcx = Scale "Horizontal frequency cutoff" 0.01 0.99 0.5; fcy = Scale "Vertical frequency cutoff" 0.01 0.99 0.5; r = Scale "Radius" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; o = Scale "Order" 1 10 2; // call a freq func with our parameters _params f = f (sense.value + 14) o.value fcx.value fcy.value r.value ac.value; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } } } Filter_enhance_item = class Menupullright "_Enhance" "various enhancement filters" { Falsecolour_item = class Menuaction "_False Colour" "false colour a mono image" { action x = class _result { _vislevel = 3; o = Scale "Offset" (-255) 255 0; clip = Toggle "Clip colour range" false; _result = map_unary process x { process im = falsecolour mono'' { mono = colour_transform_to Image_type.B_W im; mono' = mono + o; mono'' = (unsigned char) mono', clip = (unsigned char) (mono' & 0xff); } } } } Statistical_diff_item = class Menuaction "_Statistical Difference" "statistical difference of an image" { action x = class _result { _vislevel = 3; wsize = Expression "Window size" 11; tmean = Expression "Target mean" 128; mean_weight = Scale "Mean weight" 0 1 0.8; tdev = Expression "Target deviation" 50; dev_weight = Scale "Deviation weight" 0 1 0.8; border = Toggle "Output image matches input image in size" true; _result = map_unary process x { process in = Image in'' { in' = colour_transform_to Image_type.B_W in.value; fn = im_stdif, border = im_stdif_raw; in'' = fn in' mean_weight.value tmean.expr dev_weight.value tdev.expr wsize.expr wsize.expr; } } } } Hist_equal_item = class Menupullright "_Equalise Histogram" "equalise contrast" { Global_item = class Menuaction "_Global" "equalise contrast globally" { action x = map_unary hist_equalize x; } Local_item = class Menuaction "_Local" "equalise contrast within a roving window" { action x = class _result { _vislevel = 3; window_width = Expression "Window width" 20; window_height = Expression "Window height" 20; max_slope = Scale "Maxium slope" 0 10 0; _result = map_unary process x { process in = hist_equalize_local window_width window_height max_slope in; } } } } } Filter_correlate_item = class Menupullright "Spatial _Correlation" "calculate correlation surfaces" { Correlate_item = class Menuaction "_Correlate" "calculate correlation coefficient" { action a b = map_binary corr a b { corr a b = correlate a b, a.width <= b.width && a.height <= b.height = correlate b a; } } Correlate_fast_item = class Menuaction "_Simple Difference" "calculate sum of squares of differences" { action a b = map_binary corr a b { corr a b = correlate_fast a b, a.width <= b.width && a.height <= b.height = correlate_fast b a; } } } Filter_hough_item = class Menupullright "_Hough Transform" "transform to parameter space" { Line_item = class Menuaction "_Line" "find straight line Hough transform" { action a = class _result { _vislevel = 3; pspace_width = Expression "Parameter space width" 64; pspace_height = Expression "Parameter space height" 64; _result = map_unary line a { line a = hough_line (to_real pspace_width) (to_real pspace_height) a; } } } Circle_item = class Menuaction "_Circle" "find circle Hough transform" { action a = class _result { _vislevel = 3; scale = Expression "Scale down parameter space by" 10; min_radius = Expression "Minimum radius" 10; max_radius = Expression "Maximum radius" 30; _result = map_unary circle a { circle a = hough_circle (to_real scale) (to_real min_radius) (to_real max_radius) a; } } } } Filter_coordinate_item = class Menupullright "_Coordinate Transform" "various coordinate transforms" { // run a function which wants a complex arg on a non-complex two-band // image run_cmplx fn x = re x' ++ im x' { x' = fn (x?0, x?1); } Polar_item = class Menuaction "_Polar" "transform to polar coordinates" { action a = class _result { _vislevel = 3; interp = Interpolate_picker Interpolate_type.BILINEAR; _result = map_unary to_polar a { to_polar im = mapim interp.value map' im { // xy image, origin in the centre, scaled to fit image to // a circle xy = make_xy im.width im.height; xy' = xy - Vector [im.width / 2, im.height / 2]; scale = min [im.width, im.height] / im.width; xy'' = 2 * xy' / scale; // to polar, scale vertical axis to 360 degrees map = run_cmplx polar xy''; map' = map * Vector [1, im.height / 360]; } } } } Rectangular_item = class Menuaction "_Rectangular" "transform to rectangular coordinates" { action a = class _result { _vislevel = 3; interp = Interpolate_picker Interpolate_type.BILINEAR; _result = map_unary to_rect a { to_rect im = mapim interp.value map'' im { // xy image, vertical scaled to 360 degrees xy = make_xy im.width im.height; xy' = xy * Vector [1, 360 / im.height]; // to rect, scale to image rect map = run_cmplx rectangular xy'; scale = min [im.width, im.height] / im.width; map' = map * scale / 2; map'' = map' + Vector [im.width / 2, im.height / 2]; } } } } } #separator Filter_tilt_item = class Menupullright "Ti_lt Brightness" "tilt brightness" { Left_right_item = class Menuaction "_Left to Right" "linear left-right brighten" { action x = class _result { _vislevel = 3; tilt = Scale "Left-right tilt" (-1) 1 0; _result = map_unary tilt_lr x { tilt_lr image = image * scale { ramp = im_fgrey image.width image.height; scale = (ramp - 0.5) * tilt + 1; } } } } Top_bottom_item = class Menuaction "_Top to Bottom" "linear top-bottom brighten" { action x = class _result { _vislevel = 3; tilt = Scale "Top-bottom tilt" (-1) 1 0; _result = map_unary tilt_tb x { tilt_tb image = image * scale { ramp = rot90 (im_fgrey image.height image.width); scale = (ramp - 0.5) * tilt + 1; } } } } sep1 = Menuseparator; Left_right_cos_item = class Menuaction "Cosine Left-_right" "cosine left-right brighten" { action x = class _result { _vislevel = 3; tilt = Scale "Left-right tilt" (-1) 1 0; shift = Scale "Shift by" (-1) 1 0; _result = map_unary tilt_lr x { tilt_lr image = image * scale { ramp = im_fgrey image.width image.height - 0.5 - shift.value; scale = 0.5 * tilt.value * cos (ramp * 180) + 1; } } } } Top_bottom_cos_item = class Menuaction "Cosine Top-_bottom" "cosine top-bottom brighten" { action x = class _result { _vislevel = 3; tilt = Scale "Top-bottom tilt" (-1) 1 0; shift = Scale "Shift by" (-1) 1 0; _result = map_unary tilt_tb x { tilt_tb image = image * scale { ramp = rot90 (im_fgrey image.height image.width) - 0.5 - shift.value; scale = 0.5 * tilt.value * cos (ramp * 180) + 1; } } } } sep2 = Menuseparator; Circular_item = class Menuaction "_Circular" "circular brighten" { action x = class _result { _vislevel = 3; tilt = Scale "Tilt" (-1) 1 0; hshift = Scale "Horizontal shift by" (-1) 1 0; vshift = Scale "Vertical shift by" (-1) 1 0; _result = map_unary tilt_tb x { tilt_tb image = image * scale { hramp = im_fgrey image.width image.height - 0.5 - hshift.value; vramp = rot90 (im_fgrey image.height image.width) - 0.5 - vshift.value; ramp = (hramp ** 2 + vramp ** 2) ** 0.5; scale = 0.5 * tilt.value * cos (ramp * 180) + 1; } } } } } Filter_blend_item = class Menupullright "_Blend" "blend objects together" { Scale_blend_item = class Menuaction "_Scale" "blend two objects together with a scale" { action a b = class _result { _vislevel = 3; p = Scale "Blend position" 0 1 0.5; _result = map_binary process a b { process im1 im2 = im1 * (1 - p.value) + im2 * p.value; } } } Image_blend_item = class Menuaction "_Image" "use an image to blend two objects" { action a b c = class _result { _vislevel = 3; i = Toggle "Invert mask" false; _result = map_trinary process a b c { process a b c = blend condition in1 in2, !i = blend (invert condition) in1 in2 { compare a b // prefer image as the condition = false, !has_image a && has_image b // prefer mono images as the condition = false, has_bands a && has_bands b && get_bands a > 1 && get_bands b == 1 // prefer uchar as the condition = false, has_format a && has_format b && get_format a > Image_format.UCHAR && get_format b == Image_format.UCHAR = true; [condition, in1, in2] = sortc compare [a, b, c]; } } } } Line_blend_item = class Menuaction "_Along Line" "blend between image a and image b along a line" { action a b = class _result { _vislevel = 3; orientation = Option "Orientation" [ "Left to Right", "Top to Bottom" ] 0; blend_position = Scale "Blend position" 0 1 0.5; blend_width = Scale "Blend width" 0 1 0.05; _result = map_binary process a b { process a b = blend (Image condition) b a { output_width = max_pair a.width b.width; output_height = max_pair a.height b.height; range = output_width, orientation == 0 = output_height; blend_position' = floor (range * blend_position.value); blend_width' = 1, blend_width.value == 0 = floor (range * blend_width.value); start = blend_position' - blend_width' / 2; background = (make_xy output_width output_height) >= blend_position'; ramp = im_grey blend_width' output_height, orientation == 0 = rot90 (im_grey blend_width' output_width); condition = insert_noexpand start 0 ramp background?0, orientation == 0 = insert_noexpand 0 start ramp background?1; } } } } Blend_alpha_item = class Menuaction "Blend _Alpha" "blend images with optional alpha channels" { // usage: layerit foreground background // input images must be either 1 or 3 bands, optionally + 1 band // which is used as the alpha channel // rich lott scale_mask im opacity = (unsigned char) (to_real opacity / 255 * im); // to mono intensity = colour_transform_to Image_type.B_W; // All the blend functions // I am grateful to this page // http://www.pegtop.net/delphi/blendmodes/ // for most of the formulae. blend_normal mask opacity fg bg = blend (scale_mask mask opacity) fg bg; blend_iflighter mask opacity fg bg = blend (if fg' > bg' then mask' else 0) fg bg { fg' = intensity fg; bg' = intensity bg; mask' = scale_mask mask opacity ; } blend_ifdarker mask opacity fg bg = blend (if fg' < bg' then mask' else 0) fg bg { fg' = intensity fg ; bg' = intensity bg ; mask' = scale_mask mask opacity ; } blend_multiply mask opacity fg bg = blend (scale_mask mask opacity) fg' bg { fg' = fg / 255 * bg; } blend_add mask opacity fg bg = blend mask fg' bg { fg' = opacity / 255 * fg + bg; } blend_subtract mask opacity fg bg = blend mask fg' bg { fg' = bg - opacity / 255 * fg; } blend_screen mask opacity fg bg = blend mask fg' bg { fg' = 255 - (255 - bg) * (255 - (opacity / 255 * fg)) / 255; } blend_burn mask opacity fg bg = blend mask fg'' bg { // fades to white which has no effect. fg' = (255 - opacity) + opacity * fg / 255; fg'' = 255 - 255 * (255 - bg) / fg'; } blend_softlight mask opacity fg bg = blend mask' fg' bg { mask' = scale_mask mask opacity; fg' = (2 * bg * fg + bg * bg * (1 - 2 * fg / 255)) / 255; } blend_hardlight mask opacity fg bg = blend mask' fg' bg { mask' = scale_mask mask opacity; fg' = 2 / 255 * fg * bg, bg < 129 = 255 - 2 * (255 - bg) * (255 - fg) / 255; } blend_lighten mask opacity fg bg = blend mask' fg' bg { mask' = scale_mask mask opacity; fg' = if bg < fg then fg else bg; } blend_darken mask opacity fg bg = blend mask' fg' bg { mask' = scale_mask mask opacity; fg' = if bg > fg then fg else bg; } blend_dodge mask opacity fg bg = blend mask fg'' bg { // one added to avoid divide by zero fg' = 1 + 255 - (opacity / 255 * fg); fg'' = bg * 255 / fg'; } blend_reflect mask opacity fg bg = blend mask' fg' bg { mask' = scale_mask mask opacity; fg' = bg * bg / (255 - fg); } blend_freeze mask opacity fg bg = blend mask' fg' bg { mask' = scale_mask mask opacity; fg' = 255 - (255 - bg) * (255 - bg) / (1 + fg); } blend_or mask opacity fg bg = bg | (unsigned char) fg' { mask' = scale_mask mask opacity; fg' = fg * mask' / 255; } blend_and mask opacity fg bg = bg & (unsigned char) fg' { mask' = scale_mask mask opacity; fg' = fg * mask' / 255; } // blend types NORMAL = 0; IFLIGHTER = 1; IFDARKER = 2; MULTIPLY = 3; ADD = 4; SUBTRACT = 5; SCREEN = 6; BURN = 7; DODGE = 8; HARDLIGHT = 9; SOFTLIGHT = 10; LIGHTEN = 11; DARKEN = 12; REFLECT = 13; FREEZE = 14; OR = 15; AND = 16; // names we show the user for blend types names = Enum [ _ "Normal" => NORMAL, _ "If Lighter" => IFLIGHTER, _ "If Darker" => IFDARKER, _ "Multiply" => MULTIPLY, _ "Add" => ADD, _ "Subtract" => SUBTRACT, _ "Screen" => SCREEN, _ "Burn" => BURN, _ "Soft Light" => SOFTLIGHT, _ "Hard Light" => HARDLIGHT, _ "Lighten" => LIGHTEN, _ "Darken" => DARKEN, _ "Dodge" => DODGE, _ "Reflect" => REFLECT, _ "Freeze" => FREEZE, _ "Bitwise OR" => OR, _ "Bitwise AND" => AND ]; // functions we call for each blend type actions = Table [ [NORMAL, blend_normal], [IFLIGHTER, blend_iflighter], [IFDARKER, blend_ifdarker], [MULTIPLY, blend_multiply], [ADD, blend_add], [SUBTRACT, blend_subtract], [SCREEN, blend_screen], [BURN, blend_burn], [SOFTLIGHT, blend_softlight], [HARDLIGHT, blend_hardlight], [LIGHTEN, blend_lighten], [DARKEN, blend_darken], [DODGE, blend_dodge], [REFLECT, blend_reflect], [FREEZE, blend_freeze], [OR, blend_or], [AND, blend_and] ]; // make sure im has an alpha channel (set opaque if it hasn't) put_alpha im = im, im.bands == 4 || im.bands == 2 = im ++ 255; // make sure im has no alpha channel lose_alpha im = extract_bands 0 3 im, im.bands == 4 = im?0, im.bands == 2 = im; // does im have al alpha channel? has_alpha im = im.bands == 2 || im.bands == 4; // get the alpha (set opaque if no alpha) get_alpha img = img'?3, img.bands == 4 = img'?1 { img' = put_alpha img; } // add an alpha ... cast the alpha image to match the main image append_alpha im alpha = im ++ clip2fmt im.format alpha; // makes fg the same size as bg, displaced with u, v pixel offset moveit fg bg u v = insert_noexpand u v fg bg' { bg' = image_new bg.width bg.height fg.bands fg.format fg.coding fg.type 0 0 0; } action bg fg = class _value { _vislevel = 3; method = Option_enum "Blend mode" names "Normal"; opacity = Scale "Opacity" 0 255 255; hmove = Scale "Horizontal move by" (-bg.width) (bg.width) 0; vmove = Scale "Vertical move by" (-bg.height) (bg.height) 0; _value = append_alpha blended merged_alpha, has_alpha bg = blended { // displace and resize fg (need to displace alpha too) fg' = moveit (put_alpha fg) bg hmove vmove; // transform to sRGB fg'' = colour_transform_to Image_type.sRGB (lose_alpha fg'); bg' = colour_transform_to Image_type.sRGB (lose_alpha bg); // alphas merged merged_alpha = get_alpha bg | get_alpha fg'; // blend together blended = (actions.lookup 0 1 method.value_thing) (get_alpha fg') opacity.value fg'' bg'; } } } } Filter_overlay_header_item = class Menuaction "_Overlay" "make a colour overlay of two monochrome images" { action a b = class _result { _vislevel = 3; colour = Option "Colour overlay as" [ _ "Green over Red", _ "Blue over Red", _ "Red over Green", _ "Red over Blue", _ "Blue over Green", _ "Green over Blue" ] 0; _result = map_binary overlay a b { overlay a b = image_set_type Image_type.sRGB [(a' ++ b' ++ 0), (a' ++ 0 ++ b'), (b' ++ a' ++ 0), (b' ++ 0 ++ a'), (0 ++ a' ++ b'), (0 ++ b' ++ a')]?colour { a' = colour_transform_to Image_type.B_W a; b' = colour_transform_to Image_type.B_W b; } } } } Filter_colourize_item = class Menuaction "_Colourize" "use a colour image or patch to tint a mono image" { action a b = class _result { _vislevel = 3; tint = Scale "Tint" 0 1 0.6; _result = map_binary tintit a b { tintit a b = colour_transform_to (get_type colour) colourized' { // get the mono thing first [mono, colour] = sortc (const (is_colour_type @ get_type)) [a, b]; colour' = tint * colour_transform_to Image_type.LAB colour; mono' = colour_transform_to Image_type.B_W mono; colourized = (mono' / 2.55) ++ colour'?1 ++ colour'?2; colourized' = image_set_type Image_type.LAB colourized; } } } } Filter_browse_multiband_item = class Menupullright "Bro_wse" "browse though an image, bitwise or bandwise" { Bandwise_item = class Menuaction "B_andwise" "browse through the bands of a multiband image" { action image = class _result { _vislevel = 3; band = Scale "Band" 0 (image.bands - 1) 0; display = Option "Display as" [ _ "Grey", _ "Green over Red", _ "Blue over Red", _ "Red over Green", _ "Red over Blue", _ "Blue over Green", _ "Green over Blue" ] 0; _result = output { down = (int) band.value; up = down + 1; remainder = band.value - down; fade x a = Vector [0], x == 0 = a * x; a = fade remainder image?up; b = fade (1 - remainder) image?down; output = [ a + b, a ++ b ++ 0, a ++ 0 ++ b, b ++ a ++ 0, b ++ 0 ++ a, 0 ++ a ++ b, 0 ++ b ++ a ] ? display; } } } Bitwise_item = class Menuaction "Bi_twise" "browse through the bits of an image" { action x = class _result { _vislevel = 3; bit = Islider "Bit" 0 (nbits - 1) (nbits - 1) { nbits = x.bits, is_Image x = 8; Islider c f t v = class scope.Scale c f t ((int) v) { Scale = Islider; } } _result = map_unary process x { process im = (im & (0x1 << bit.value)) != 0; } } } } #separator Filter_negative_item = class Menuaction "Photographic _Negative" "swap black and white" { action x = map_unary invert x { invert in = clip2fmt in.format (colour_transform_to (get_type in) rgb') { rgb = colour_transform_to Image_type.sRGB in; rgb' = 255 - rgb; } } } Filter_solarize_item = class Menuaction "_Solarise" "invert colours above a threshold" { action x = class _result { _vislevel = 3; kink = Scale "Kink" 0 1 0.5; _result = map_unary process x { process image = hist_map tab'''' image { // max pixel value for this format mx = Image_format.maxval image.format; // make a LUT ... just 8 and 16 bit tab = im_identity_ushort image.bands mx, image.format == Image_format.USHORT = im_identity image.bands; tab' = Image tab; // make basic ^ shape tab'' = tab' * (1 / kink), tab' < mx * kink = (mx - tab') / (1 - kink); tab''' = clip2fmt image.format tab''; // smooth a bit mask = matrix_blur (tab'''.width / 8); tab'''' = convsep mask tab'''; } } } } Filter_diffuse_glow_item = class Menuaction "_Diffuse Glow" "add a halo to highlights" { action x = class _result { _vislevel = 3; r = Scale "Radius" 0 50 5; highlights = Scale "Highlights" 0 100 95; glow = Scale "Glow" 0 1 0.5; colour = Colour_new_item.Widget_colour_item.action; _result = map_unary process x { process image = image' { mono = (unsigned char) (colour_transform_to Image_type.B_W image); thresh = hist_thresh (highlights.value / 100) mono; mask = mono > thresh; blur = convsep (matrix_gaussian_blur r.value) mask; colour' = colour_transform_to image.type colour; image' = image + colour' * glow * (blur / 255); } } } } Filter_drop_shadow_item = class Menuaction "Drop S_hadow" "add a drop shadow to an image" { action x = class _result { _vislevel = 3; sx = Scale "Horizontal shadow" (-50) 50 5; sy = Scale "Vertical shadow" (-50) 50 5; ss = Scale "Shadow softness" 0 20 5; bg_colour = Expression "Background colour" 255; sd_colour = Expression "Shadow colour" 128; alpha = Toggle "Shadow in alpha channel" false; transparent = Toggle "Zero pixels are transparent" false; _result = map_unary shadow x { shadow image = Image final { blur_size = ss.value * 2 + 1; // matrix we blur with to soften shadows blur_matrix = matrix_gaussian_blur blur_size; matrix_size = blur_matrix.width; matrix_radius = (int) (matrix_size / 2) + 1; // position and size of shadow image in input cods // before and after fuzzing shadow_rect = Rect sx.value sy.value image.width image.height; fuzzy_shadow_rect = shadow_rect.margin_adjust matrix_radius; // size and pos of final image, in input cods final_rect = image.rect.union fuzzy_shadow_rect; // hard part of shadow in output cods shadow_rect' = Rect (shadow_rect.left - final_rect.left) (shadow_rect.top - final_rect.top) shadow_rect.width shadow_rect.height; // make the shadow mask ... true for parts which cast // a shadow mask = (foldr1 bitwise_and @ bandsplit) (image.value != 0), transparent = image_new image.width image.height 1 Image_format.UCHAR Image_coding.NOCODING Image_type.B_W 255 0 0; mask' = embed 0 shadow_rect'.left shadow_rect'.top final_rect.width final_rect.height mask; mask'' = convsep blur_matrix mask'; // use mask to fade between bg and shadow colour mk_background colour = image_new final_rect.width final_rect.height image.bands image.format image.coding image.type colour 0 0; bg_image = mk_background bg_colour.expr; shadow_image = mk_background sd_colour.expr; bg = blend mask'' shadow_image bg_image; // make a full size mask fg_mask = embed 0 (image.rect.left - final_rect.left) (image.rect.top - final_rect.top) final_rect.width final_rect.height mask; // wrap up the input image ... put the shadow colour // around it, so if we are outputting a separate // alpha the shadow colour will be set correctly fg = insert (image.rect.left - final_rect.left) (image.rect.top - final_rect.top) image.value shadow_image; final // make a separate alpha = fg ++ mask'', alpha // paste image over shadow = if fg_mask then fg else bg; } } } } Filter_paint_text_item = class Menuaction "_Paint Text" "paint text into an image" { action x = paint_position, is_Group x = paint_area { paint_area = class _result { _check_args = [ [x, "x", check_Image] ]; _vislevel = 3; text = String "Text to paint" "Hello world!"; font = Fontname "Use font" Workspaces.Preferences.PAINTBOX_FONT; align = Option "Alignment" ["Left", "Centre", "Right"] 0; dpi = Expression "DPI" 300; colour = Expression "Text colour" 255; place = Region x (x.width / 4) (x.height / 4) (x.width / 2) (x.height / 2); _result = insert_noexpand place.left place.top (blend txt' fg place) x { fg = image_new place.width place.height x.bands x.format x.coding x.type colour.expr 0 0; txt = Image (im_text text.value font.value place.width align.value (to_real dpi)); bg = im_black place.width place.height 1; txt' = insert_noexpand 0 0 txt bg; } } paint_position = class _result { _vislevel = 3; text = Pattern_images_item.Text_item.action; colour = Expression "Text colour" 255; position = Option "Position" [ _ "North-west", _ "North", _ "North-east", _ "West", _ "Centre", _ "East", _ "South-west", _ "South", _ "South-east", _ "Specify in pixels" ] 4; left = Expression "Pixels from left" 0; top = Expression "Pixels from top" 0; _result = map_unary paint x { paint image = insert_noexpand x' y' place' image { xr = image.width - text.width; yr = image.height - text.height; x = left.expr, position == 9 = [0, xr / 2, xr]?(position % 3); y = top.expr, position == 9 = [0, yr / 2, yr]?(position / 3); x' = range 0 x (image.width - 1); y' = range 0 y (image.height - 1); w' = range 1 text.width (image.width - x'); h' = range 1 text.height (image.height - y'); place = extract_area x' y' w' h' image; text' = insert_noexpand 0 0 text (im_black w' h' 1); fg = image_new w' h' image.bands image.format image.coding image.type colour.expr 0 0; place' = blend text' fg place; } } } } } Autotrace_item = class Menuaction "_Trace" "convert a bitmap to an SVG file" { action x = class _result { _vislevel = 3; despeckle = Scale "Despeckle level" 1 20 1; line = Scale "Line threshold" 1 20 1; center = Toggle "Trace centreline" false; scale = Scale "SVG scale" 0.1 10 1; command = "autotrace %s " ++ join_sep " " [ofmt, ofile, desp, lint, cent] { prog = search_for_error "autotrace"; ofmt = "-output-format svg"; ofile = "-output-file %s"; desp = "-despeckle-level " ++ print despeckle.value; lint = "-line-threshold " ++ print line.value; cent = if center then "-centerline " else ""; } _result = Image output { [output] = vips_call "system" [command] [$in => [x.value], $in_format => "%s.ppm", $out => true, $out_format => "%s.svg[scale=" ++ print scale.value ++ "]" ]; } } } nip2-8.7.0/share/nip2/start/Histogram.def0000644000175000017500000001656713273071606015067 00000000000000Hist_new_item = class Menupullright "_New" "new histogram" { Hist_item = class Menuaction "_Identity" "make an identity histogram" { action = class _result { _vislevel = 3; d = Option "Depth" ["8 bit", "16 bit"] 0; _result = Plot [] ([im_identity 1, im_identity_ushort 1 65536]?d); } } Hist_new_from_matrix = Matrix_buildlut_item; Hist_from_image_item = class Menuaction "Ta_g Image As Histogram" "set image Type to Histogram" { action x = hist_tag x; } Tone_item = class Menuaction "_Tone Curve" "make a new tone mapping curve" { action = class _result { _vislevel = 3; d = Option "Depth" ["8 bit", "16 bit"] 0; b = Scale "Black point" 0 100 0; w = Scale "White point" 0 100 100; sp = Scale "Shadow point" 0.1 0.3 0.2; mp = Scale "Mid-tone point" 0.4 0.6 0.5; hp = Scale "Highlight point" 0.7 0.9 0.8; sa = Scale "Shadow adjust" (-15) 15 0; ma = Scale "Mid-tone adjust" (-30) 30 0; ha = Scale "Highlight adjust" (-15) 15 0; _result = tone_build fmt b w sp mp hp sa ma ha { fmt = [Image_format.UCHAR, Image_format.USHORT]?d; } } } } Hist_convert_to_hist_item = class Menuaction "Con_vert to Histogram" "convert anything to a histogram" { action x = hist_tag (to_image x); } Hist_find_item = class Menupullright "_Find" "find a histogram" { Oned_item = class Menuaction "_One Dimension" "for a n-band image, make an n-band 1D histogram" { action x = map_unary hist_find x; } Nd_item = class Menuaction "_Many Dimensions" "for a n-band image, make an n-dimensional histogram" { action x = class _result { _vislevel = 3; // default to something small-ish bins = Expression "Number of bins in each dimension" 8; _result = map_unary process x { process in = hist_find_nD bins in; } } } Indexed_item = class Menuaction "_Indexed" "use a 1-band index image to pick bins for an n-band image" { action x y = class _result { _vislevel = 3; combine = Combine_picker Combine_type.SUM; _result = map_binary map x y { map a b = hist_find_indexed combine.value index im { [im, index] = sortc (const is_index) [a, b]; is_index x = has_image x && b == 1 && (f == Image_format.UCHAR || f == Image_format.USHORT) { im = get_image x; b = get_bands x; f = get_format x; } } } } } } Hist_map_item = class Menuaction "_Map" "map an image through a histogram" { action x y = map_binary map x y { map a b = hist_map hist im { [im, hist] = sortc (const is_hist) [a, b]; } } } Hist_eq_item = Filter_enhance_item.Hist_equal_item; #separator Hist_cum_item = class Menuaction "_Integrate" "form cumulative histogram" { action x = map_unary hist_cum x; } Hist_diff_item = class Menuaction "_Differentiate" "find point-to-point differences (inverse of Integrate)" { action x = map_unary hist_diff x; } Hist_norm_item = class Menuaction "N_ormalise" "normalise a histogram" { action x = map_unary hist_norm x; } Hist_inv_item = class Menuaction "In_vert" "invert a histogram" { action x = map_unary hist_inv x; } Hist_match_item = class Menuaction "Ma_tch" "find LUT which will match first histogram to second" { action in ref = map_binary hist_match in ref; } Hist_zerox_item = class Menuaction "_Zero Crossings" "find zero crossings" { action x = class _result { _vislevel = 3; edge = Option "Direction" [ "Positive-going", "Negative-going" ] 0; _result = map_unary (zerox (if edge == 0 then -1 else 1)) x; } } Hist_entropy_item = class Menuaction "Entropy" "calculate histogram entropy" { action x = hist_entropy x; } #separator Hist_profile_item = class Menuaction "Find _Profile" "search from image edges for non-zero pixels" { action x = class _result { _vislevel = 3; edge = Option "Search from" [ "Top edge down", "Left edge to right", "Bottom edge up", "Right edge to left" ] 2; _result = map_unary profile x { profile image = (Plot_histogram @ hist_tag) [ profilemb 0 image.value, profilemb 1 image.value, profilemb 0 (fliptb image.value), profilemb 1 (fliplr image.value) ]?edge; // im_profile only does 1 band images :-( profilemb d = bandjoin @ map (converse im_profile d) @ bandsplit; } } } Hist_project_item = class Menuaction "Find Pro_jections" "find horizontal and vertical projections" { action x = class { _vislevel = 2; _result = map_unary project x; // extract the result ... could be a group extr n = Plot_histogram _result?n, is_list _result = Group (map (Plot_histogram @ converse subscript n) _result.value); horizontal = extr 0; vertical = extr 1; centre = (gravity horizontal, gravity vertical); } } #separator Hist_graph_item = class Menuaction "P_lot Slice" "plot a slice along a guide or arrow" { action x = class _value { _vislevel = 3; width = Scale "Width" 1 40 1; displace = Scale "Horizontal displace" (-50) 50 0; vdisplace = Scale "Vertical displace" (-50) 50 0; _value = map_unary graph x { graph arrow = hist_tag area' { area = extract_arrow displace.value vdisplace.value width.value arrow; // squish vertically to get an average area' = resize Kernel_linear 1 (1 / width.value) area; } } } } Extract_arrow_item = class Menuaction "Extract _Arrow" "extract the area around an arrow" { action x = class _value { _vislevel = 3; width = Scale "Width" 1 40 1; displace = Scale "Horizontal displace" (-50) 50 0; vdisplace = Scale "Vertical displace" (-50) 50 0; _value = map_unary (extract_arrow displace.value vdisplace.value width.value) x; } } Hist_plot_item = class Menuaction "Plot _Object" "plot an object as a bar, point or line graph" { action x = class _result { _vislevel = 3; caption = Expression "Chart caption" "none"; format = Option_enum "Format" Plot_format.names "YYYY"; style = Option_enum "Style" Plot_style.names "Line"; auto = Toggle "Auto Range" true; xmin = Expression "X range minimum" 0; xmax = Expression "X range maximum" 1; ymin = Expression "Y range minimum" 0; ymax = Expression "Y range maximum" 1; xcaption = Expression "X axis caption" "none"; ycaption = Expression "Y axis caption" "none"; series_captions = Expression "Series captions" ["Band 0"]; _result = Plot options (image x) { options = [$style => style.value, $format => format.value] ++ range ++ captions; range = [], auto = [$xmin => xmin.expr, $xmax => xmax.expr, $ymin => ymin.expr, $ymax => ymax.expr]; captions = concat (map test caption_options) ++ [$series_captions => series_captions.expr] { caption_options = [ $caption => caption.expr, $xcaption => xcaption.expr, $ycaption => ycaption.expr ]; test x = [], value == "none" = [option_name => value] { [option_name, value] = x; } } image x = image (extract_arrow 0 0 1 x), is_Arrow x = get_image x, has_image x = x2b im, b == 1 = im { im = get_image (to_image x); w = get_width im; h = get_height im; b = get_bands im; // matrix to image makes a 1-band mxn image // we need to put columns into bands x2b im = bandjoin (map extract_col [0 .. w - 1]) { extract_col x = extract_area x 0 1 h im; } } } } } nip2-8.7.0/share/nip2/start/Object.def0000644000175000017500000000220513224651032014311 00000000000000Object_duplicate_item = class Menuaction "_Duplicate" "take a copy of an object" { action x = map_unary copy x; } #separator Object_list_to_group_item = class Menuaction "_List to Group" "turn a list of objects into a group" { action x = to_group x; } Object_group_to_list_item = class Menuaction "_Group to List" "turn a group into a list of objects" { action x = to_list x; } #separator Object_break_item = class Menuaction "_Break Up Object" "break an object into a list of components" { action x = map_unary break x { break x = bandsplit x, is_Image x = map Vector x.value, is_Matrix x = x.value, is_Vector x || is_Real x = error "Breakup: not Image/Matrix/Vector/Real"; } } Object_assemble_item = class Menuaction "_Assemble Objects" "assemble a list of objects into a single object" { action x = map_unary ass x { ass x = [], x == [] = Vector x, is_real_list x = Matrix x, is_matrix x = bandjoin x, is_listof is_Image x = Vector (map get_value x), is_listof is_Real x = Matrix (map get_value x), is_listof is_Vector x = error "Assemble: not list of Image/Vector/Real/image/real"; } } nip2-8.7.0/share/nip2/start/Makefile.in0000644000175000017500000003700013350464104014473 00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = share/nip2/start ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(startdir)" DATA = $(start_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BISON = @BISON@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DLLWRAP = @DLLWRAP@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FFTW3_CFLAGS = @FFTW3_CFLAGS@ FFTW3_LIBS = @FFTW3_LIBS@ FGREP = @FGREP@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_LIBS = @GSL_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ IP_CFLAGS = @IP_CFLAGS@ IP_LIBS = @IP_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBGOFFICE_CFLAGS = @LIBGOFFICE_CFLAGS@ LIBGOFFICE_LIBS = @LIBGOFFICE_LIBS@ LIBGSF_CFLAGS = @LIBGSF_CFLAGS@ LIBGSF_LIBS = @LIBGSF_LIBS@ LIBGVC_CFLAGS = @LIBGVC_CFLAGS@ LIBGVC_LIBS = @LIBGVC_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ 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@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ REQUIRED_PACKAGES_CFLAGS = @REQUIRED_PACKAGES_CFLAGS@ REQUIRED_PACKAGES_LIBS = @REQUIRED_PACKAGES_LIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOP_SRCDIR = @TOP_SRCDIR@ UPDATE_DESKTOP_DATABASE = @UPDATE_DESKTOP_DATABASE@ UPDATE_MIME_DATABASE = @UPDATE_MIME_DATABASE@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XDG_OPEN = @XDG_OPEN@ XGETTEXT = @XGETTEXT@ 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@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ startdir = $(pkgdatadir)/start start_DATA = \ Math.def \ Image.def \ Magick.def \ Colour.def \ Tasks.def \ Object.def \ Filter.def \ Matrix.def \ Widgets.def \ Histogram.def \ Preferences.ws \ _joe_extra.def \ _joe_utilities.def \ _convert.def \ _generate.def \ _list.def \ _predicate.def \ _stdenv.def \ _Object.def \ _magick.def \ _types.def EXTRA_DIST = $(start_DATA) all: all-am .SUFFIXES: $(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) --foreign share/nip2/start/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign share/nip2/start/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): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-startDATA: $(start_DATA) @$(NORMAL_INSTALL) @list='$(start_DATA)'; test -n "$(startdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(startdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(startdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(startdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(startdir)" || exit $$?; \ done uninstall-startDATA: @$(NORMAL_UNINSTALL) @list='$(start_DATA)'; test -n "$(startdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(startdir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: 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 check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(startdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-startDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-startDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-startDATA install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags-am uninstall uninstall-am uninstall-startDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: nip2-8.7.0/share/nip2/start/Matrix.def0000644000175000017500000002573113224651032014360 00000000000000 Matrix_build_item = class Menupullright "_New" "make a new matrix of some sort" { Plain_item = class Menuaction "_Plain" "make a new plain matrix widget" { action = Matrix (identity_matrix 3); } Convolution_item = class Menuaction "_Convolution" "make a new convolution matrix widget" { action = Matrix_con 1 0 [[0, 0, 0], [0, 1, 0], [0, 0, 0]]; } Recombination_item = class Menuaction "_Recombination" "make a new recombination matrix widget" { action = Matrix_rec (identity_matrix 3); } Morphology_item = class Menuaction "_Morphology" "make a new morphology matrix widget" { action = Matrix_mor [[0, 0, 0], [0, 255, 0], [0, 0, 0]]; } sep1 = Menuseparator; Matrix_identity_item = class Menuaction "_Identity" "make an identity matrix" { action = identity (identity_matrix 5); identity v = class _result { _vislevel = 3; s = Expression "Size" (len v); _result = Matrix (identity_matrix (to_real s)), to_real s != len v; = Matrix v; Matrix_vips value scale offset filename display = identity value; } } Matrix_series_item = class Menuaction "_Series" "make a series" { action = series (mkseries 0 1 5); mkseries s t e = transpose [[to_real s, to_real s + to_real t .. to_real e]]; series v = class _result { _vislevel = 3; _s = v?0?0; _t = v?1?0 - v?0?0; _e = (last v)?0; s = Expression "Start value" _s; t = Expression "Step by" _t; e = Expression "End value" _e; _result = Matrix (mkseries s t e), to_real s != _s || to_real t != _t || to_real e != _e = Matrix v; Matrix_vips value scale offset filename display = series value; } } Matrix_square_item = class Menuaction "_Square" "make a square matrix" { action = square (mksquare 5); mksquare s = replicate s (take s [1, 1 ..]); square v = class _result { _vislevel = 3; s = Expression "Size" (len v); _result = Matrix_con (sum v) 0 v, len v == to_real s = Matrix_con (sum m) 0 m { m = mksquare (to_real s); } Matrix_vips value scale offset filename display = square value; } } Matrix_circular_item = class Menuaction "_Circular" "make a circular matrix" { action = circle (mkcircle 3); mkcircle r = map2 (map2 pyth) xes yes { line = [-r .. r]; xes = replicate (2 * r + 1) line; yes = transpose xes; pyth a b = 1, (a**2 + b**2) ** 0.5 <= r = 0; } circle v = class _result { _vislevel = 3; r = Expression "Radius" ((len v - 1) / 2); _result = Matrix_con (sum v) 0 v, len v == r.expr * 2 + 1 = Matrix_con (sum m) 0 m { m = mkcircle (to_real r); } Matrix_vips value scale offset filename display = circle value; } } Matrix_gaussian_item = class Menuaction "_Gaussian" "make a gaussian matrix" { action = class _result { _vislevel = 3; s = Scale "Sigma" 0.001 10 1; ma = Scale "Minimum amplitude" 0 1 0.2; integer = Toggle "Integer" false; _result = fn s.value ma.value { fn = im_gauss_imask, integer = im_gauss_dmask; } } } Matrix_laplacian_item = class Menuaction "_Laplacian" "make the Laplacian of a Gaussian matrix" { action = class _result { _vislevel = 3; s = Scale "Sigma" 0.001 10 1.5; ma = Scale "Minimum amplitude" 0 1 0.1; integer = Toggle "Integer" false; _result = fn s.value ma.value { fn = im_log_imask, integer = im_log_dmask; } } } } Matrix_to_matrix_item = class Menuaction "Con_vert to Matrix" "convert anything to a matrix" { action x = to_matrix x; } #separator Matrix_extract_item = class Menupullright "_Extract" "extract rows or columns from a matrix" { Rows_item = class Menuaction "_Rows" "extract rows" { action x = class _result { _vislevel = 3; first = Expression "Extract from row" 0; number = Expression "Extract this many rows" 1; _result = map_unary process x { process x = extract_area 0 first (get_width x) number x; } } } Columns_item = class Menuaction "_Columns" "extract columns" { action x = class _result { _vislevel = 3; first = Expression "Extract from column" 0; number = Expression "Extract this many columns" 1; _result = map_unary process x { process mat = extract_area first 0 number (get_height x) x; } } } Area_item = class Menuaction "_Area" "extract area" { action x = class _result { _vislevel = 3; left = Expression "First column" 0; top = Expression "First row" 0; width = Expression "Number of columns" 1; height = Expression "Number of rows" 1; _result = map_unary process x { process mat = extract_area left top width height x; } } } Diagonal_item = class Menuaction "_Diagonal" "extract diagonal" { action x = class _result { _vislevel = 3; which = Option "Extract" [ "Leading Diagonal", "Trailing Diagonal" ] 0; _result = map_unary process x { process mat = mat.Matrix_base (map2 extr [0..] mat.value), which == 0 = mat.Matrix_base (map2 extr [mat.width - 1, mat.width - 2 .. 0] mat.value); extr n l = [l?n]; } } } } Matrix_insert_item = class Menupullright "_Insert" "insert rows or columns into a matrix" { // make a new 8-bit uchar image of wxh with pixels set to p // use to generate new cells newim w h p = image_new w h 1 Image_format.UCHAR Image_coding.NOCODING Image_type.B_W p 0 0; Rows_item = class Menuaction "_Rows" "insert rows" { action x = class _result { _vislevel = 3; first = Expression "Insert at row" 0; number = Expression "Insert this many rows" 1; item = Expression "Set new cells to" 0; _result = map_unary process x { process x = foldl1 join_tb (concat [top, new, bottom]) { top = [extract_area 0 0 w f x], f > 0 = []; new = [(if is_Matrix x then to_matrix else id) (newim w number item.expr)]; bottom = [extract_area 0 f w (h - f) x], f < h = []; f = to_real first; w = get_width x; h = get_height x; } } } } Columns_item = class Menuaction "_Columns" "insert columns" { action x = class _result { _vislevel = 3; first = Expression "Insert at column" 0; number = Expression "Insert this many columns" 1; item = Expression "Set new cells to" 0; _result = map_unary process x { process x = foldl1 join_lr (concat [left, new, right]) { left = [extract_area 0 0 f h x], f > 0 = []; new = [(if is_Matrix x then to_matrix else id) (newim number h item.expr)]; right = [extract_area f 0 (w - f) h x], f < w = []; f = to_real first; w = get_width x; h = get_height x; } } } } } Matrix_delete_item = class Menupullright "_Delete" "delete rows or columns from a matrix" { // remove number of items, starting at first delete first number l = take (to_real first) l ++ drop (to_real first + to_real number) l; Rows_item = class Menuaction "_Rows" "delete rows" { action x = class _result { _vislevel = 3; first = Expression "Delete from row" 0; number = Expression "Delete this many rows" 1; _result = map_unary process x { process x = foldl1 join_tb (concat [top, bottom]) { top = [extract_area 0 0 w f x], f > 0 = []; bottom = [extract_area 0 b w (h - b) x], b < h = []; f = to_real first; n = to_real number; b = f + n; w = get_width x; h = get_height x; } } } } Columns_item = class Menuaction "_Columns" "delete columns" { action x = class _result { _vislevel = 3; first = Expression "Delete from column" 0; number = Expression "Delete this many columns" 1; _result = map_unary process x { process x = foldl1 join_lr (concat [left, right]) { left = [extract_area 0 0 f h x], f > 0 = []; right = [extract_area r 0 (w - r) h x], r < w = []; f = to_real first; n = to_real number; r = f + n; w = get_width x; h = get_height x; } } } } } Matrix_join = class Menupullright "_Join" "join two matricies" { Left_right_item = class Menuaction "_Left to Right" "join two matricies left-right" { action a b = map_binary join_lr a b; } Top_bottom_item = class Menuaction "_Top to Bottom" "joiin two matricies top-bottom" { action a b = map_binary join_tb a b; } } Matrix_rotate_item = class Menupullright "_Rotate" "clockwise rotation by fixed angles" { rot90 = Image_transform_item.Rotate_item.Fixed_item.Rot90_item; rot180 = Image_transform_item.Rotate_item.Fixed_item.Rot180_item; rot270 = Image_transform_item.Rotate_item.Fixed_item.Rot270_item; Matrix_rot45_item = class Menuaction "_45 Degrees" "45 degree rotate (square, odd-length-sides only)" { action x = map_unary rot45 x; } } Matrix_flip_item = Image_transform_item.Flip_item; Matrix_sort_item = class Menuaction "_Sort" "sort by column or row" { action x = class _result { _vislevel = 3; o = Option (_ "Orientation") [ _ "Sort by column", _ "Sort by row" ] 0; i = Expression (_ "Sort on index") 0; d = Option (_ "Direction") [ _ "Ascending", _ "Descending" ] 0; _result = map_unary sort x { idx = to_real i; pred a b = a?idx <= b?idx, d == 0 = a?idx >= b?idx; sort x = (x.Matrix_base @ sortc pred) x.value, o == 0 = (x.Matrix_base @ transpose @ sortc pred @ transpose) x.value; } } } #separator Matrix_invert_item = class Menuaction "In_vert" "calculate inverse matrix" { action x = map_unary (converse power (-1)) x; } Matrix_transpose_item = class Menuaction "_Transpose" "swap rows and columns" { action x = map_unary transpose x; } #separator Matrix_plot_scatter_item = class Menuaction "_Plot Scatter" "plot a scatter graph of a matrix of [x,y1,y2,..] coordinates" { action x = class _result { _check_args = [ [x, "x", check_Matrix] ]; _vislevel = 3; auto = Toggle "Auto Range" true; xmin = Expression "X range minimum" 0; xmax = Expression "X range maximum" 1; ymin = Expression "Y range minimum" 0; ymax = Expression "Y range maximum" 1; _result = Plot options ((x2b @ get_image @ to_image) x) { options = [$style => Plot_style.POINT, $format => Plot_format.XYYY] ++ range; range = [], auto = [$xmin => xmin.expr, $xmax => xmax.expr, $ymin => ymin.expr, $ymax => ymax.expr]; // matrix to image makes a 1-band mxn image // we need to put columns into bands x2b im = bandjoin (map extract_col [0 .. w - 1]) { w = get_width im; h = get_height im; b = get_bands im; extract_col x = extract_area x 0 1 h im; } } } } Matrix_plot_item = Hist_plot_item; Matrix_buildlut_item = class Menuaction "_Build LUT From Scatter" "make a lookup table from a matrix of [x,y1,y2..] coordinates" { action x = class _result { _check_args = [ [x, "x", check_Matrix] ]; _result = buildlut x; } } nip2-8.7.0/share/nip2/start/_convert.def0000644000175000017500000005063113273071606014737 00000000000000 /* Try to make a Matrix ... works for Vector/Image/Real, plus image/real */ to_matrix x = to_matrix x.expr, is_Expression x = x, is_Matrix x = oo_unary_function to_matrix_op x, is_class x = tom x { to_matrix_op = Operator "to_matrix" tom Operator_type.COMPOUND false; tom x = Matrix (itom x), is_image x = Matrix [[x]], is_real x = Matrix [x], is_real_list x = Matrix x, is_matrix x = error (_ "bad arguments to " ++ "to_matrix"); itom i = (im_vips2mask ((double) i)).value, is_image i = error (_ "not image"); } /* Try to make a Vector ... works for Vector/Image/Real, plus image/real */ to_vector x = to_vector x.expr, is_Expression x = x, is_Vector x = oo_unary_function to_vector_op x, is_class x = tov x { to_vector_op = Operator "to_vector" tov Operator_type.COMPOUND false; tov x = Vector (itov x), is_image x = Vector [x], is_real x = Vector x, is_real_list x = Vector x?0, is_matrix x && len x == 1 = Vector (transpose x)?0, is_matrix x && len x?0 == 1 = error (_ "bad arguments to " ++ "to_vector"); itov i = v, is_image i = error (_ "not image") { m = im_vips2mask ((double) i); v = m.value?0, m.height == 1 = (transpose m.value)?0, m.width == 1 = error (_ "image is not 1xN or Nx1"); } } /* Try to make an Image ... works for Vector/Matrix/Real, plus image/real * Special case for Colour ... pull out the colour_space and set Type in the * image. */ to_image x = to_image x.expr, is_Expression x = Image x.value, is_Plot x = x, is_Image x = Image (image_set_type (Image_type.colour_spaces.lookup 0 1 x.colour_space) (mtoi [x.value])), is_Colour x = oo_unary_function to_image_op x, is_class x = toi x { to_image_op = Operator "to_image" toi Operator_type.COMPOUND false; toi x = Image x, is_image x = Image (mtoi [[x]]), is_real x = Image (mtoi [x]), is_real_list x = Image (mtoi x), is_matrix x = error (_ "bad arguments to " ++ "to_image"); // [[real]] -> image mtoi m = im_mask2vips (Matrix m), width != 3 = joinup (im_mask2vips (Matrix m)) { width = len m?0; height = len m; joinup i = b1 ++ b2 ++ b3 { b1 = extract_area 0 0 1 height i; b2 = extract_area 1 0 1 height i; b3 = extract_area 2 0 1 height i; } } } // like to_image, but we do 1x1 pixel + x, then embed it up // always make an unwrapped image for speed ... this gets used by ifthenelse // and stuff like that // format can be NULL, meaning set format from x to_image_size width height bands format x = x, is_image x = x.value, is_Image x = im'' { // we want x to set the target format if we don't have one, so we // can't use image_new im = im_black 1 1 bands + x; im' = clip2fmt format im, format != NULL = im; im'' = embed 1 0 0 width height im'; } /* Try to make a Colour. */ to_colour x = to_colour x.expr, is_Expression x = x, is_Colour x = to_colour (extract_area x.left x.top 1 1 x.image), is_Mark x = oo_unary_function to_colour_op x, is_class x = toc x { to_colour_op = Operator "to_colour" toc Operator_type.COMPOUND false; toc x = Colour (colour_space (get_type x)) (map mean (bandsplit (get_image x))), has_image x && has_type x = Colour "sRGB" [x, x, x], is_real x // since Colour can't do mono = Colour "sRGB" x, is_real_list x && is_list_len 3 x = map toc x, is_matrix x = error (_ "bad arguments to " ++ "to_colour"); colour_space type = table.get_name type, table.has_name type = error (_ "unable to make Colour from " ++ table.get_name type ++ _ " image") { table = Image_type.colour_spaces; } } /* Try to make a real. (not a Real!) */ to_real x = to_real x.expr, is_Expression x = oo_unary_function to_real_op x, is_class x = tor x { to_real_op = Operator "to_real" tor Operator_type.COMPOUND false; tor x = x, is_real x = abs x, is_complex x = 1, is_bool x && x = 0, is_bool x && !x = error (_ "bad arguments to " ++ "to_real"); } to_int x = (int) (to_real x); /* Try to make a list ... ungroup, basically. We remove the innermost layer of * Groups. */ to_list x = x.value, is_Group x && !contains_Group x.value = Group (map to_list x.value), is_Group x = x; /* Try to make a group. The outermost list objects become Group()'d. */ to_group x = Group x, is_list x = Group (map to_group x.value), is_Group x = x; /* Parse a positive integer. */ parse_pint l = foldl acc 0 l { acc sofar ch = sofar * 10 + parse_c ch; /* Turn a char digit to a number. */ parse_c ch = error (_ "not a digit"), !is_digit ch = (int) ch - (int) '0'; } /* Parse an integer, with an optional sign character. */ parse_int l = error (_ "badly formed number"), !is_list_len 2 parts = sign * n { parts = splitpl [member "+-", is_digit] l; n = parse_pint parts?1; sign = 1, parts?0 == [] || parts?0 == "+" = -1; } /* Parse a float. * [+-]?[0-9]*([.][0-9]*)?(e[0-9]+)? */ parse_float l = err, !is_list_len 4 parts = sign * (abs ipart + fpart) * 10 ** exp { err = error (_ "badly formed number"); parts = splitpl [ member "+-0123456789", member ".0123456789", member "eE", member "+-0123456789" ] l; ipart = parse_int parts?0; sign = 1, ipart >= 0 = -1; fpart = 0, parts?1 == []; = err, parts?1?0 != '.' = parse_pint (tl parts?1) / 10 ** (len parts?1 - 1); exp = 0, parts?2 == [] && parts?3 == [] = err, parts?2 == [] = parse_int parts?3; } /* Parse a time in "hh:mm:ss" into seconds. We could do this in one line :) = (sum @ map2 multiply (iterate (multiply 60) 1) @ reverse @ map parse_pint @ map (subscript (splitpl [is_digit, equal ':', is_digit, equal ':', is_digit] l))) [0,2,4]; but it's totally unreadable. */ parse_time l = error (_ "badly formed time"), !is_list_len 5 parts = s + 60 * m + 60 * 60 * h { parts = splitpl [is_digit, equal ':', is_digit, equal ':', is_digit] l; h = parse_int parts?0; m = parse_int parts?2; s = parse_int parts?4; } /* matrix to convert D65 XYZ to D50 XYZ ... direct conversion, found by * measuring a macbeth chart in D50 and D65 and doing a LMS to get a matrix */ D652D50_direct = Matrix [[ 1.13529, -0.0604663, -0.0606321 ], [ 0.0975399, 0.935024, -0.0256156 ], [ -0.0336428, 0.0414702, 0.994135 ]]; D502D65_direct = D652D50_direct ** -1; /* Convert normalised XYZ to bradford RGB. */ XYZ2RGBbrad = Matrix [[0.8951, 0.2664, -0.1614], [-0.7502, 1.7135, 0.0367], [0.0389, -0.0685, 1.0296]]; /* Convert bradford RGB to normalised XYZ. */ RGBbrad2XYZ = XYZ2RGBbrad ** -1; D93_whitepoint = Vector [89.7400, 100, 130.7700]; D75_whitepoint = Vector [94.9682, 100, 122.5710]; D65_whitepoint = Vector [95.0470, 100, 108.8827]; D55_whitepoint = Vector [95.6831, 100, 92.0871]; D50_whitepoint = Vector [96.4250, 100, 82.4680]; A_whitepoint = Vector [109.8503, 100, 35.5849]; // 2856K B_whitepoint = Vector [99.0720, 100, 85.2230]; // 4874K C_whitepoint = Vector [98.0700, 100, 118.2300]; // 6774K E_whitepoint = Vector [100, 100, 100]; // ill. free D3250_whitepoint = Vector [105.6590, 100, 45.8501]; Whitepoints = Enum [ $D93 => D93_whitepoint, $D75 => D75_whitepoint, $D65 => D65_whitepoint, $D55 => D55_whitepoint, $D50 => D50_whitepoint, $A => A_whitepoint, $B => B_whitepoint, $C => C_whitepoint, $E => E_whitepoint, $D3250 => D3250_whitepoint ]; /* Convert D50 XYZ to D65 using the bradford chromatic adaptation approx. */ im_D502D65 xyz = xyz''' { xyz' = xyz / D50_whitepoint; rgb = recomb XYZ2RGBbrad xyz'; // move white in bradford RGB rgb' = rgb / Vector [0.94, 1.02, 1.33]; xyz'' = recomb RGBbrad2XYZ rgb'; // back to D65 xyz''' = xyz'' * D65_whitepoint; } /* Convert D65 XYZ to D50 using the bradford approx. */ im_D652D50 xyz = xyz''' { xyz' = xyz / D65_whitepoint; rgb = recomb XYZ2RGBbrad xyz'; // move white in bradford RGB rgb' = rgb * Vector [0.94, 1.02, 1.33]; xyz'' = recomb RGBbrad2XYZ rgb'; xyz''' = xyz'' * D50_whitepoint; } /* Convert D50 XYZ to Lab. */ im_D50XYZ2Lab xyz = im_XYZ2Lab_temp xyz D50_whitepoint.value?0 D50_whitepoint.value?1 D50_whitepoint.value?2; im_D50Lab2XYZ lab = im_Lab2XYZ_temp lab D50_whitepoint.value?0 D50_whitepoint.value?1 D50_whitepoint.value?2; /* ... and mono conversions */ im_sRGB2mono in = (image_set_type Image_type.B_W @ clip2fmt (get_header "BandFmt" in) @ recomb (Matrix [[.3, .6, .1]])) in; im_mono2sRGB in = image_set_type Image_type.sRGB (in ++ in ++ in); im_sRGB2Lab = im_XYZ2Lab @ im_sRGB2XYZ; im_Lab2sRGB = im_XYZ2sRGB @ im_Lab2XYZ; // from the 16 bit RGB and GREY formats im_1628 x = im_clip (x >> 8); im_162f x = x / 256; im_8216 x = (im_clip2us x) << 8; im_f216 x = im_clip2us (x * 256); im_RGB162GREY16 in = (image_set_type Image_type.GREY16 @ clip2fmt (get_header "BandFmt" in) @ recomb (Matrix [[.3, .6, .1]])) in; im_GREY162RGB16 in = image_set_type Image_type.RGB16 (in ++ in ++ in); /* The vips8 scRGB functions. */ im_sRGB2scRGB in = out { [out] = vips_call "sRGB2scRGB" [in] []; } im_scRGB2sRGB in = out { [out] = vips_call "scRGB2sRGB" [in] []; } im_scRGB2XYZ in = out { [out] = vips_call "scRGB2XYZ" [in] []; } im_XYZ2scRGB in = out { [out] = vips_call "XYZ2scRGB" [in] []; } /* apply a func to an image ... make it 1 or 3 bands, and reapply other bands * on the way out. Except if it's LABPACK. */ colour_apply fn x = fn x, b == 1 || b == 3 || c == Image_coding.LABPACK = x'' { b = get_bands x; c = get_coding x; first = extract_bands 0 3 x, b > 3 = extract_bands 0 1 x; tail = extract_bands 3 (b - 3) x, b > 3 = extract_bands 1 (b - 1) x; x' = fn first; x'' = x' ++ clip2fmt (get_format x') tail; } /* Any 1-ary colour op, applied to Vector/Image/Matrix or image */ colour_unary fn x = oo_unary_function colour_op x, is_class x = colour_apply fn x, is_image x = colour_apply fn [x], is_real x = error (_ "bad arguments to " ++ "colour_unary") { // COMPOUND_REWRAP ... signal to the colour class to go to image and // back colour_op = Operator "colour_unary" colour_object Operator_type.COMPOUND_REWRAP false; colour_object x = colour_real_list x, is_real_list x = map colour_real_list x, is_matrix x = colour_apply fn x, is_image x = error (_ "bad arguments to " ++ "colour_unary"); colour_real_list l = (to_matrix (fn (float) (to_image (Vector l)).value)).value?0; } /* Any symmetric 2-ary colour op, applied to Vector/Image/Matrix or image ... * name is op name for error messages etc. */ colour_binary name fn x y = oo_binary_function colour_op x y, is_class x = oo_binary'_function colour_op x y, is_class y = fn x y, is_image x && is_image y = error (_ "bad arguments to " ++ name) { colour_op = Operator name colour_object Operator_type.COMPOUND_REWRAP true; colour_object x y = fn x y, is_image x && is_image y = colour_real_list fn x y, is_real_list x && is_real_list y = map (colour_real_list fn x) y, is_real_list x && is_matrix y = map (colour_real_list (converse fn) y) x, is_matrix x && is_real_list y = map2 (colour_real_list fn) x y, is_matrix x && is_matrix y = error (_ "bad arguments to " ++ name); colour_real_list fn l1 l2 = (to_matrix (fn i1 i2)).value?0 { i1 = (float) (to_image (Vector l1)).value; i2 = (float) (to_image (Vector l2)).value; } } _colour_conversion_table = [ /* Lines are [space-from, space-to, conversion function]. Could do * this as a big array, but table lookup feels safer. */ [B_W, B_W, image_set_type B_W], [B_W, XYZ, im_sRGB2XYZ @ im_mono2sRGB @ im_clip], [B_W, YXY, im_XYZ2Yxy @ im_sRGB2XYZ @ im_mono2sRGB @ im_clip], [B_W, LAB, im_sRGB2Lab @ im_mono2sRGB @ im_clip], [B_W, LCH, im_Lab2LCh @ im_sRGB2Lab @ im_mono2sRGB @ im_clip], [B_W, UCS, im_XYZ2UCS @ im_sRGB2XYZ @ im_mono2sRGB @ im_clip], [B_W, RGB, im_XYZ2disp @ im_sRGB2XYZ @ im_mono2sRGB @ im_clip], [B_W, sRGB, im_mono2sRGB @ im_clip], [B_W, scRGB, im_sRGB2scRGB @ im_mono2sRGB @ im_clip], [B_W, RGB16, image_set_type RGB16 @ im_8216 @ im_mono2sRGB], [B_W, GREY16, image_set_type GREY16 @ im_8216], [B_W, LABQ, im_Lab2LabQ @ im_sRGB2Lab @ im_mono2sRGB @ im_clip], [B_W, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_sRGB2Lab @ im_mono2sRGB @ im_clip], [XYZ, B_W, im_sRGB2mono @ im_XYZ2sRGB @ im_clip2f], [XYZ, XYZ, image_set_type XYZ], [XYZ, YXY, im_XYZ2Yxy @ im_clip2f], [XYZ, LAB, im_XYZ2Lab @ im_clip2f], [XYZ, LCH, im_Lab2LCh @ im_XYZ2Lab], [XYZ, UCS, im_XYZ2UCS @ im_clip2f], [XYZ, RGB, im_XYZ2disp @ im_clip2f], [XYZ, sRGB, im_XYZ2sRGB @ im_clip2f], [XYZ, scRGB, im_XYZ2scRGB @ im_clip2f], [XYZ, LABQ, im_Lab2LabQ @ im_XYZ2Lab @ im_clip2f], [XYZ, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_XYZ2Lab @ im_clip2f], [YXY, B_W, im_sRGB2mono @ im_XYZ2sRGB @ im_Yxy2XYZ @ im_clip2f], [YXY, XYZ, im_Yxy2XYZ @ im_clip2f], [YXY, YXY, image_set_type YXY], [YXY, LAB, im_XYZ2Lab @ im_Yxy2XYZ @ im_clip2f], [YXY, LCH, im_Lab2LCh @ im_XYZ2Lab @ im_Yxy2XYZ @ im_clip2f], [YXY, UCS, im_XYZ2UCS @ im_Yxy2XYZ @ im_clip2f], [YXY, RGB, im_XYZ2disp @ im_Yxy2XYZ @ im_clip2f], [YXY, sRGB, im_XYZ2sRGB @ im_Yxy2XYZ @ im_clip2f], [YXY, scRGB, im_XYZ2scRGB @ im_Yxy2XYZ @ im_clip2f], [YXY, LABQ, im_Lab2LabQ @ im_XYZ2Lab @ im_Yxy2XYZ @ im_clip2f], [YXY, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_XYZ2Lab @ im_Yxy2XYZ @ im_clip2f], [LAB, B_W, im_sRGB2mono @ im_Lab2sRGB @ im_Lab2XYZ @ im_clip2f], [LAB, XYZ, im_Lab2XYZ @ im_clip2f], [LAB, YXY, im_XYZ2Yxy @ im_Lab2XYZ @ im_clip2f], [LAB, LAB, image_set_type LAB @ im_clip2f], [LAB, LCH, im_Lab2LCh @ im_clip2f], [LAB, UCS, im_Lab2UCS @ im_clip2f], [LAB, RGB, im_Lab2disp @ im_clip2f], [LAB, sRGB, im_Lab2sRGB @ im_clip2f], [LAB, scRGB, im_XYZ2scRGB @ im_Lab2XYZ @ im_clip2f], [LAB, LABQ, im_Lab2LabQ @ im_clip2f], [LAB, LABS, im_Lab2LabS @ im_clip2f], [LCH, B_W, im_sRGB2mono @ im_Lab2sRGB @ im_LCh2Lab @ im_clip2f], [LCH, XYZ, im_Lab2XYZ @ im_LCh2Lab @ im_clip2f], [LCH, YXY, im_XYZ2Yxy @ im_Lab2XYZ @ im_LCh2Lab @ im_clip2f], [LCH, LAB, im_LCh2Lab @ im_clip2f], [LCH, LCH, image_set_type LCH], [LCH, UCS, im_LCh2UCS @ im_clip2f], [LCH, RGB, im_Lab2disp @ im_LCh2Lab @ im_clip2f], [LCH, sRGB, im_Lab2sRGB @ im_LCh2Lab @ im_clip2f], [LCH, scRGB, im_XYZ2scRGB @ im_Lab2XYZ @ im_LCh2Lab @ im_clip2f], [LCH, LABQ, im_Lab2LabQ @ im_LCh2Lab @ im_clip2f], [LCH, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_LCh2Lab @ im_clip2f], [UCS, B_W, im_sRGB2mono @ im_XYZ2sRGB @ im_UCS2XYZ @ im_clip2f], [UCS, XYZ, im_UCS2XYZ @ im_clip2f], [UCS, YXY, im_XYZ2Yxy @ im_Lab2XYZ @ im_UCS2Lab @ im_clip2f], [UCS, LAB, im_UCS2Lab @ im_clip2f], [UCS, LCH, im_UCS2LCh @ im_clip2f], [UCS, UCS, image_set_type UCS], [UCS, RGB, im_Lab2disp @ im_UCS2Lab @ im_clip2f], [UCS, sRGB, im_Lab2sRGB @ im_UCS2Lab @ im_clip2f], [UCS, scRGB, im_XYZ2scRGB @ im_Lab2XYZ @ im_UCS2Lab @ im_clip2f], [UCS, LABQ, im_Lab2LabQ @ im_UCS2Lab @ im_clip2f], [UCS, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_UCS2Lab @ im_clip2f], [RGB, B_W, im_sRGB2mono @ im_XYZ2sRGB @ im_disp2XYZ @ im_clip], [RGB, XYZ, im_disp2XYZ @ im_clip], [RGB, YXY, im_XYZ2Yxy @ im_disp2XYZ @ im_clip], [RGB, LAB, im_disp2Lab @ im_clip], [RGB, LCH, im_Lab2LCh @ im_disp2Lab @ im_clip], [RGB, UCS, im_Lab2UCS @ im_disp2Lab @ im_clip], [RGB, RGB, image_set_type RGB], [RGB, sRGB, im_XYZ2sRGB @ im_disp2XYZ @ im_clip], [RGB, scRGB, im_XYZ2scRGB @ im_disp2XYZ @ im_clip], [RGB, RGB16, image_set_type RGB16 @ im_8216], [RGB, GREY16, image_set_type GREY16 @ im_8216 @ im_sRGB2mono], [RGB, LABQ, im_Lab2LabQ @ im_disp2Lab @ im_clip], [RGB, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_disp2Lab @ im_clip], [sRGB, B_W, im_sRGB2mono], [sRGB, XYZ, im_sRGB2XYZ @ im_clip], [sRGB, YXY, im_XYZ2Yxy @ im_sRGB2XYZ @ im_clip], [sRGB, LAB, im_sRGB2Lab @ im_clip], [sRGB, LCH, im_Lab2LCh @ im_sRGB2Lab @ im_clip], [sRGB, UCS, im_XYZ2UCS @ im_sRGB2XYZ @ im_clip], [sRGB, RGB, im_XYZ2disp @ im_sRGB2XYZ @ im_clip], [sRGB, sRGB, image_set_type sRGB], [sRGB, scRGB, im_sRGB2scRGB @ im_clip], [sRGB, RGB16, image_set_type RGB16 @ im_8216], [sRGB, GREY16, image_set_type GREY16 @ im_8216 @ im_sRGB2mono], [sRGB, LABQ, im_Lab2LabQ @ im_sRGB2Lab @ im_clip], [sRGB, LABS, im_Lab2LabS @ im_sRGB2Lab @ im_clip], [scRGB, B_W, im_sRGB2mono @ im_scRGB2sRGB], [scRGB, XYZ, im_scRGB2XYZ], [scRGB, YXY, im_XYZ2Yxy @ im_scRGB2XYZ], [scRGB, LAB, im_XYZ2Lab @ im_scRGB2XYZ], [scRGB, LCH, im_Lab2LCh @ im_XYZ2Lab @ im_scRGB2XYZ], [scRGB, UCS, im_XYZ2UCS @ im_scRGB2XYZ], [scRGB, RGB, im_XYZ2disp @ im_scRGB2XYZ], [scRGB, sRGB, im_scRGB2sRGB], [scRGB, scRGB, image_set_type scRGB], [scRGB, RGB16, image_set_type RGB16 @ im_8216 @ im_scRGB2sRGB], [scRGB, GREY16, image_set_type GREY16 @ im_8216 @ im_sRGB2mono @ im_scRGB2sRGB], [scRGB, LABQ, im_Lab2LabQ @ im_XYZ2Lab @ im_scRGB2XYZ], [scRGB, LABS, im_Lab2LabS @ im_XYZ2Lab @ im_scRGB2XYZ], [RGB16, B_W, im_1628 @ im_sRGB2mono], [RGB16, RGB, image_set_type RGB @ im_1628], [RGB16, sRGB, image_set_type sRGB @ im_1628], [RGB16, scRGB, im_sRGB2scRGB], [RGB16, RGB16, image_set_type RGB16], [RGB16, GREY16, im_RGB162GREY16], [RGB16, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_sRGB2Lab], [GREY16, B_W, image_set_type B_W @ im_1628], [GREY16, RGB, im_mono2sRGB @ im_1628], [GREY16, sRGB, im_mono2sRGB @ im_1628], [GREY16, scRGB, im_sRGB2scRGB @ im_mono2sRGB], [GREY16, RGB16, im_GREY162RGB16], [GREY16, GREY16, image_set_type GREY16], [LABQ, B_W, im_sRGB2mono @ im_Lab2sRGB @ im_LabQ2Lab], [LABQ, XYZ, im_Lab2XYZ @ im_LabQ2Lab], [LABQ, YXY, im_XYZ2Yxy @ im_Lab2XYZ @ im_LabQ2Lab], [LABQ, LAB, im_LabQ2Lab], [LABQ, LCH, im_Lab2LCh @ im_LabQ2Lab], [LABQ, UCS, im_Lab2UCS @ im_LabQ2Lab], [LABQ, RGB, im_LabQ2disp], [LABQ, sRGB, im_Lab2sRGB @ im_LabQ2Lab], [LABQ, scRGB, im_XYZ2scRGB @ im_Lab2XYZ @ im_LabQ2Lab], [LABQ, LABQ, image_set_type LABQ], [LABQ, LABS, im_LabQ2LabS], [LABS, B_W, im_sRGB2mono @ im_Lab2sRGB @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, XYZ, im_Lab2XYZ @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, YXY, im_XYZ2Yxy @ im_Lab2XYZ @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, LAB, im_LabS2Lab], [LABS, LCH, im_Lab2LCh @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, UCS, im_Lab2UCS @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, RGB, im_LabQ2disp @ im_LabS2LabQ @ im_clip2s], [LABS, sRGB, im_XYZ2sRGB @ im_Lab2XYZ @ im_LabS2Lab @ im_clip2s], [LABS, scRGB, im_XYZ2scRGB @ im_Lab2XYZ @ im_LabS2Lab @ im_clip2s], [LABS, LABQ, im_LabS2LabQ @ im_clip2s], [LABS, LABS, image_set_type LABS] ] { /* From Image_type ... repeat here for brevity. Use same ordering as * in Colour menu for consistency. */ B_W = 1; XYZ = 12; YXY = 23; LAB = 13; LCH = 19; UCS = 18; RGB = 17; sRGB = 22; scRGB = 28; RGB16 = 25; GREY16 = 26; LABQ = 16; LABS = 21; } /* Transform between two colour spaces. */ colour_transform from to in = colour_unary _colour_conversion_table?i?2 in, i >= 0 = error (_ "unable to convert " ++ Image_type.type_names.get_name from ++ _ " to " ++ Image_type.type_names.get_name to) { match x = x?0 == from && x?1 == to; i = index match _colour_conversion_table; } /* Transform to a colour space, assuming the type field in the input is * correct */ colour_transform_to to in = colour_transform (get_type in) to in; /* String for path separator on this platform. */ path_separator = expand "$SEP"; /* Form a relative pathname. * path_relative ["home", "john"] == "home/john" * path_relative [] == "" */ path_relative l = join_sep path_separator l; /* Form an absolute pathname. * path_absolute ["home", "john"] == "/home/john" * path_absolute [] == "/" * If the first component looks like 'A:', don't add an initial separator. */ path_absolute l = path_relative l, len l?0 > 1 && is_letter l?0?0 && l?0?1 == ':' = path_separator ++ path_relative l; /* Parse a pathname. * path_parse "/home/john" == ["home", "john"] * path_parse "home/john" == ["home", "john"] */ path_parse str = split (equal path_separator?0) str; /* Return $PATH, reformatted as [["comp1", "comp2"], ["comp1", "comp2"] ..] */ system_search_path = [vipsbin] ++ map path_parse (split (equal path_sep) (expand "$PATH")) { /* On some platforms we ship vips with a few extra progs. Search * $VIPSHOME/bin first. */ vipsbin = path_parse (expand "$VIPSHOME") ++ ["bin"]; path_sep = ':', expand "$SEP" == "/" = ';'; } /* Search $PATH for the first occurence of name, or "". */ search_for name = hits?0, hits != [] = "" { exe_name = name ++ expand "$EXEEXT"; form_path p = path_absolute (p ++ [exe_name]); paths = map form_path system_search_path; hits = dropwhile (equal []) (map search paths); } /* Search $PATH for the first occurence of name, error on failure. */ search_for_error name = path, path != "" = error (exe_name ++ " not found on your search path. " ++ "Check you have installed the program and it is on your PATH.") { exe_name = name ++ expand "$EXEEXT"; path = search_for name; } nip2-8.7.0/share/nip2/start/_joe_utilities.def0000644000175000017500000005054213224651032016121 00000000000000/* ******Functions included in start/_NG_utilities.def:****** * * so_balance ref_meanmax im1 im2 mask blur gauss * * nonzero_mean im = no_out * * so_meanmax im = result * * so_calculate ref_meanmax im mask = result * * simple_frame frame im_w im_h ov cs ms bf option = result * * corner_frame frame im_w im_h ov cs ms bf = result * * build_frame r_tl r_tr r_bl r_br r_mt r_mb r_ml r_mr im_w im_h ov bf = result * * complex_frame frame im_w im_h ov cs es ms bf option= result * * complex_edge ra rb t bl d = rc * * frame_lr_min r_l r_r target bw = result * * frame_tb_min r_t r_b target bw = result * * frame_position_image im ref os colour= result * * merge_array bw arr = result * * merge_to_scale im target blend dir = result * * select_ellipse line width = mask * * select_tetragon p1 p2 p3 p4 = mask * * select_polygon pt_list = mask * * perspective_transform to from = trans'' * * sort_pts_clockwise l = l'' * */ /* Called from: * _NG_Extra.def Clone_area_item */ so_balance ref_meanmax im1 im2 mask gauss = result { //ref_meanmax = so_meanmax im1; so_values = so_calculate ref_meanmax im2 mask; im2_cor_a = clip2fmt im2.format im2'', has_member "format" im2 = im2'' {im2'' = im2 * (so_values?0) + (so_values?1);} // Option to convert replacement image to scaled gaussian noise im2_cor = im2_cor_a, gauss == false = clip2fmt im2_cor_a.format gauss_im {gauss_im = gaussnoise im2_cor_a.width im2_cor_a.height ref_meanmax?0 (deviation im2_cor_a);} result = im_blend (get_image mask) (get_image im2_cor) (get_image im1); }; //////////////////////////////////////////////////////////////////////////////// /* Calculates the mean of the non zero pixels. * * Called from: * _NG_utilities so_meanmax */ nonzero_mean im = no_out { zero_im = (im == 0); zero_mean = mean zero_im; no_mean = mean im; no_out = no_mean/(1 - (zero_mean/255)); }; //////////////////////////////////////////////////////////////////////////////// /* Calculates the max and nonzero mean of an image * * Called from: * _NG_utilities so_balance * _NG_utilities so_calculate * _NG_Extra.def Clone_area_item * _NG_Extra.def Balance_item.Balance_find_item */ so_meanmax im = result { mean_of_im = nonzero_mean im; adjusted_im = im - mean_of_im; max_of_im = max adjusted_im; result = [mean_of_im, max_of_im]; }; //////////////////////////////////////////////////////////////////////////////// /* Calculates the scale and offset required to match a reference mean and max * * Called from: * _NG_utilities so_balance * _NG_Extra.def Balance_item.Balance_find_item */ so_calculate ref_meanmax im mask = result { im' = if mask then im else 0; im_values = so_meanmax im'; mean_of_ref = ref_meanmax?0; mean_of_im = im_values?0; max_of_ref = ref_meanmax?1; max_of_im = im_values?1; scale = (max_of_ref)/(max_of_im); offset = mean_of_ref - (mean_of_im * scale); result = [ scale, offset ]; }; //////////////////////////////////////////////////////////////////////////////// /* Extends or shortens the central sections of a simple frame to fit round a given image. * * Called from: * _NG_Extra.def Frame_item.Simple_frame_item */ simple_frame frame im_w im_h ov cs ms bf option = result { cs' = (1 - cs); ms' = (0.5 - (ms/2)); ms'' = (1 - cs); //Regions r_tl = Region_relative frame 0 0 cs cs; r_tr = fliplr r_tl, option == true = Region_relative frame cs' 0 cs cs; r_bl = Region_relative frame 0 cs' cs cs; r_br = fliplr r_bl, option == true = Region_relative frame cs' cs' cs cs; r_mt = Region_relative frame ms' 0 ms cs; r_mb = Region_relative frame ms' ms'' ms cs; r_ml = Region_relative frame 0 ms' cs ms; r_mr = fliplr r_ml, option == true = Region_relative frame ms'' ms' cs ms; result = build_frame r_tl r_tr r_bl r_br r_mt r_mb r_ml r_mr im_w im_h ov bf; }; //////////////////////////////////////////////////////////////////////////////// /* Copies and extends a simple frame corner to produce a complete frame to fit round a given image. * * Called from: * _NG_Extra.def Frame_item.Frame_corner_item */ corner_frame frame im_w im_h ov cs ms bf = result { cs' = (1 - cs); ms' = (0.5 - (ms/2)); //Regions r_tl = Region_relative frame 0 0 cs cs; r_tr = fliplr r_tl; r_bl = fliptb r_tl; r_br = fliplr r_bl; r_mt = Region_relative frame ms' 0 ms cs; r_mb = fliptb r_mt; r_ml = Region_relative frame 0 ms' cs ms;; r_mr = fliplr r_ml; result = build_frame r_tl r_tr r_bl r_br r_mt r_mb r_ml r_mr im_w im_h ov bf; }; //////////////////////////////////////////////////////////////////////////////// /* Completes the frame building process for simple_frame and corner_frame. * * _NG_utilities simple_frame * _NG_utilities corner_frame */ build_frame r_tl r_tr r_bl r_br r_mt r_mb r_ml r_mr im_w im_h ov bf = result { //Find pixel thickness of frames section s_width = r_ml.width - mean (im_profile (map_unary fliplr (r_ml.value)?0) 1); s_height = r_mt.height - mean (im_profile (map_unary fliptb (r_mt.value)?0) 0); w_target = im_w + (2 * (s_width - ov)); h_target = im_h + (2 * (s_height - ov)); blend = bf * r_tl.width; cw_target = w_target - (2 * r_tl.width) + (2 * blend), w_target > (2 * r_tl.width) = w_target; ch_target = h_target - (2 * r_tl.height) + (2 * blend), h_target > (2 * r_tl.height) = h_target; //Use regions to produce sections top = merge_to_scale r_mt cw_target blend 0; bottom = merge_to_scale r_mb cw_target blend 0; left = merge_to_scale r_ml ch_target blend 1; right = merge_to_scale r_mr ch_target blend 1; middle = Image (image_new cw_target ch_target left.bands left.format left.coding left.type 0 0 0); //Build sections into full frame. row_1 = frame_lr_min r_tl r_tr w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[r_tl, top, r_tr]]; row_2 = frame_lr_min left right w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[left, middle, right]]; row_3 = frame_lr_min r_bl r_br w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[r_bl, bottom, r_br]]; result = frame_tb_min row_1 row_3 h_target blend, (h_target < (r_tl.height * 2)) = merge_array blend [[row_1], [row_2], [row_3]]; }; //////////////////////////////////////////////////////////////////////////////// /* Extends or shortens the central sections of a frame, preserving any central details on each * edge, to fit round a given image. * * Called from: * _NG_Extra.def Frame_item.Complex_frame_item */ complex_frame frame im_w im_h ov cs es ms bf option= result { cs' = (1 - cs); ms' = (0.5 - (ms/2)); es' = (0.25 - (es/2)); r_tl = Region_relative frame 0 0 cs cs; r_tr = fliplr r_tl, option == true = Region_relative frame cs' 0 cs cs; r_bl = Region_relative frame 0 cs' cs cs; r_br = fliplr r_bl, option == true = Region_relative frame cs' cs' cs cs; r_mt = Region_relative frame ms' 0 ms cs; r_mb = Region_relative frame ms' cs' ms cs; r_ml = Region_relative frame 0 ms' cs ms; r_mr = fliplr r_ml, option == true = Region_relative frame cs' ms' cs ms; r_et = Region_relative frame es' 0 es cs; r_eb = Region_relative frame es' cs' es cs; r_el = Region_relative frame 0 es' cs es; r_er = fliplr r_el, option == true = Region_relative frame cs' es' cs es; //Find pixel thickness of frames section s_width = r_el.width - mean (im_profile (map_unary fliplr (r_el.value)?0) 1); s_height = r_et.height - mean (im_profile (map_unary fliptb (r_et.value)?0) 0); w_target = im_w + (2 * (s_width - ov)); h_target = im_h + (2 * (s_height - ov)); min_size = foldr1 min_pair [r_tl.width, r_tl.height, r_mt.width, r_mt.height, r_et.width, r_et.height]; blend = bf * min_size; cw_target = w_target - (2 * r_tl.width) + (2 * blend); ch_target = h_target - (2 * r_tl.height) + (2 * blend); top = complex_edge r_mt r_et cw_target blend 0; bottom = complex_edge r_mb r_eb cw_target blend 0; left = complex_edge r_ml r_el ch_target blend 1; right = complex_edge r_mr r_er ch_target blend 1; middle = Image (image_new top.width left.height left.bands left.format left.coding left.type 0 0 0); //Build regions into full frame. row_1 = frame_lr_min r_tl r_tr w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[r_tl, top, r_tr]]; row_2 = frame_lr_min left right w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[left, middle, right]]; row_3 = frame_lr_min r_bl r_br w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[r_bl, bottom, r_br]]; result = frame_tb_min row_1 row_3 h_target blend, (h_target < (r_tl.height * 2)) = merge_array blend [[row_1], [row_2], [row_3]]; }; //////////////////////////////////////////////////////////////////////////////// /* Function called by complex frame, used to produce section * * Called from: * _NG_utilities.def complex_frame */ complex_edge ra rb t bl d = rc { e1 = ceil (ra.width - t)/2, d == 0 = 0; e2 = 0, d == 0 = ceil (ra.height - t)/2; e3 = t, d == 0 = ra.width; e4 = ra.height, d == 0 = t; check = ra.width, d == 0; = ra.height; rai = get_image ra; t2 = (t - ra.width + (2 * bl))/2, d == 0 = (t - ra.height + (2 * bl))/2; rc = ra , t <= 0 = Image (im_extract_area rai e1 e2 e3 e4), t <= check = merge_array bl [[rb',ra,rb']], d == 0 = merge_array bl [[rb'],[ra],[rb']] {rb' = merge_to_scale rb t2 bl d;} }; ////////////////////////////////////////////////////////////////////////////// /* Blends two images left/right to produce an image a specific width. * * _NG_utilities build_frame * _NG_utilities complex_frame */ frame_lr_min r_l r_r target bw = result { //Calculating the new widh required for each image. no = (target/2 + bw); n_w = no, (r_l.width > no) = r_l.width; //Removing excess from what will be the middle of the final image. n_l = im_extract_area r_l.value 0 0 n_w r_l.height; n_r = im_extract_area r_r.value (r_r.width - n_w) 0 n_w r_l.height; //Merge the two image together with a bw*2 pixel overlap. result = Image (im_lrmerge n_l n_r ((bw*2) - n_w) 0 bw); }; ////////////////////////////////////////////////////////////////////////////// /* Blends two images top/bottom to produce an image a specific width. * * _NG_utilities build_frame * _NG_utilities complex_frame */ frame_tb_min r_t r_b target bw = result { //Calculating the new height required for each image. no = (target/2 + bw); n_h = no, (r_t.height > no) = r_t.height; //Removing excess from what will be the middle of the final image. n_t = im_extract_area r_t.value 0 0 r_t.width n_h; n_b = im_extract_area r_b.value 0 (r_b.height - n_h) r_b.width n_h; //Merge the two image together with a 50 pixel overlap. result = Image (im_tbmerge n_t n_b 0 ((bw*2) -n_h) bw); }; ////////////////////////////////////////////////////////////////////////////// /* Resixe canvas of an image to accomodate a frame and possible mount * * Called from: * _NG_Extra.def Frame_item.Frame_corner_item * _NG_Extra.def Frame_item.Simple_frame_item * _NG_Extra.def Frame_item.Complex_frame_item */ frame_position_image im ref os colour= result { background = image_new ref.width ref.height im.bands im.format im.coding im.type colour 0 0; result = insert_noexpand xp yp im background { xp = (ref.width - im.width)/2; yp = (ref.height - im.height - os)/2; } }; ////////////////////////////////////////////////////////////////////////////// /* Merges an array of images together according to blend width bw * * Called from: * _NG_Utilites.def build_frame * _NG_Utilites.def complex_frame * _NG_Utilites.def complex_edge */ merge_array bw arr = result { merge_lr bw im1 im2 = im3 { bw' = get_header "Xsize" (get_image im1); bw'' = -(bw' - bw); im3 = im_lrmerge (get_image im1) (get_image im2) bw'' 0 bw; } merge_tb bw im1 im2 = im3 { bw' = get_header "Ysize" (get_image im1); bw'' = -(bw' - bw); im3 = im_tbmerge (get_image im1) (get_image im2) 0 bw'' bw; } im_out = (image_set_origin 0 0 @ foldl1 (merge_tb bw) @ map (foldl1 (merge_lr bw))) arr; result = Image im_out; }; ////////////////////////////////////////////////////////////////////////////// /* Repeatably top/bottom add clones of im, with a defined overlap, until final height > target * * Called from: * _NG_Utilites.def build_frame * _NG_Utilites.def complex_edge */ merge_to_scale im target blend dir = result { blend' = floor blend; //allow fir lr or tb process var_a = im.width, dir == 0 = im.height; var_w = im.width, dir == 1 = target, target > blend' = blend'; var_h = im.height, dir == 0 = target, target > blend' = blend'; //total numner of copies of im requires, taking overlap into account. no_loops = ceil ((log ((target - blend')/(var_a - blend')))/(log 2)); process im no = result { pr_a = get_header "Xsize" (get_image im), dir == 0 = get_header "Ysize" (get_image im); pr_b = -(pr_a - blend' + 1); im' = im_lrmerge (get_image im) (get_image im) pr_b 0 blend', dir == 0 = im_tbmerge (get_image im) (get_image im) 0 pr_b blend'; no' = no - 1; result = im', no' < 1 = process im' no'; } im_tmp = im.value, var_a > target = process im no_loops; result = Image (im_extract_area (get_image im_tmp) 0 0 var_w var_h); }; ////////////////////////////////////////////////////////////////////////////// /* Selects an elispe based on a line and a width * * Called from: * _NG_Extra.def Select_item.Elipse */ select_ellipse line width = mask { im = Image (get_image line); //Make a 2 band image whose value equals its coordinates. im_coor = Image (make_xy im.width im.height); //Adjust the values to center tham on (line.left, line.top) im_cent = im_coor - Vector [line.left,line.top]; w = line.width; h = line.height; angle = 270, w == 0 && h < 0 = 90, w == 0 && h >= 0 = 360 + atan (h/w), w > 0 && h < 0 = atan (h/w), w > 0 && h >= 0 = 180 + atan (h/w); a = ( (h ** 2) + (w ** 2) )**0.5; b = a * width; x' = ( (cos angle) * im_cent?0) + ( (sin angle) * im_cent?1); y' = ( (cos angle) * im_cent?1) - ( (sin angle) * im_cent?0); mask = ( (b**2) * (x'**2) ) + ( (a**2) * (y'**2) ) <= (a * b)**2; }; ////////////////////////////////////////////////////////////////////////////// /* Selects a tetragon based on four points. * * Called from: * _NG_Extra.def Select_item.Tetragon * _NG_Extra.def Perspective_item */ select_tetragon p1 p2 p3 p4 = mask { //Put points in clockwise order starting at the top left. pt_list = sort_pts_clockwise [p1, p2, p3, p4]; pair_list = [ [ pt_list?0, pt_list?1 ], [ pt_list?1, pt_list?2 ], [ pt_list?2, pt_list?3 ], [ pt_list?3, pt_list?0 ] ]; //Make xy image the same size as p1.image; im_xy = Image (make_xy p1.image.width p1.image.height); white = Image (image_new p1.image.width p1.image.height 1 0 Image_coding.NOCODING 1 255 0 0); mask = foldl process white pair_list; /* Treat each pair of point as a vector going from p1 to p2, * then select all to right of line. This is done for each pair, * the results are all combined to select the area defined by * the four points. */ process im_in pair = im_out { x = (pair?0).left; y = (pair?0).top; x'= (pair?1).left; y'= (pair?1).top; w = x' - x; h = y' - y; m = 0, x == x' = (y-y')/(x-x'); c = 0, x == x' = ((y*x') - (y'*x))/(x' - x); mask= im_xy?1 - (im_xy?0 * m) >= c, w > 0 = im_xy?1 - (im_xy?0 * m) <= c, w < 0 = im_xy?0 <= x, w == 0 && h > 0 = im_xy?0 >= x; im_out = im_in & mask; } }; ////////////////////////////////////////////////////////////////////////////// /* Selects a tetragon based on four points. * * Called from: * _NG_Extra.def Select_item.Polygon */ select_polygon pt_list = mask { group_check = is_Group pt_list; pt_l = pt_list.value, group_check = pt_list; im = Image (get_image (pt_l?0)); im_xy = Image (make_xy im.width im.height); black = Image (image_new im_xy.width im_xy.height 1 0 Image_coding.NOCODING 1 0 0 0); x = im_xy?0; y = im_xy?1; pt_l' = grp_trip pt_l; mask = foldl process black pt_l'; /*Takes a group adds the first two the end and then creates a lists of *lists [[a, b, c], [b, c, d] .... [x, a, b]] */ grp_trip l = l'' { px = take 2 l; l' = join l px; start = [(take 3 l')]; rest = drop 3 l'; process a b = c { x = (last a)?1; x'= (last a)?2; x'' = [[x, x', b]]; c = join a x''; } l'' = foldl process start rest; }; process im_in triplet = im_out { p1 = triplet?0; p2 = triplet?1; p3 = triplet?2; //check for change in x direction between p1-p2 and p2 -p3 dir_1 = sign (p2.left - p1.left); dir_2 = sign (p3.left - p2.left); dir = dir_1 + dir_2; //define min x limit. min_x = p1.left, p1.left < p2.left = p2.left + 1, dir != 0 = p2.left; //define max x limit. max_x = p1.left, p1.left > p2.left = p2.left - 1, dir != 0 = p2.left; //equation of line defined by p1 and p2 m = line_m p1 p2; c = line_c p1 p2; //Every thing below the line im_test = ((y >= (m * x) + c) & (x >= min_x) & (x <= max_x)); im_out = im_in ^ im_test; } line_c p1 p2 = c {m = line_m p1 p2; c = p1.top - (m * p1.left);}; line_m p1 p2 = (p2.top - p1.top)/(p2.left - p1.left), p2.left != p1.left = 0; }; ////////////////////////////////////////////////////////////////////////////// /* Selects a tetragon based on four points. * * Called from: * _NG_Extra.def Perspective_match_item * _NG_Extra.def Perspective_item */ perspective_transform to from = trans'' { /* * Tramsformation matrix is calculated on the bases of the following functions: * x' = c0x + c1y + c2xy + c3 * y' = c4x + c5y + c6xy + c7 * * The functions used in vips im_transform works based on the functions: * x = x' + b0 + b2x' + b4y' + b6x'y' * y = y' + b1 + b3x' + b5y' + b7x'y' * * and is applied in the form of the matrix: * * [[b0, b1], * [b2, b3], * [b4, b5], * [b6, b7]] * * Therefore our required calculated matrix will be * * [[ c3 , c7], * [(c0 - 1) , c4], * [ c1 , (c5 - 1)], * [ c2 , c6]] * * to = [x1, y1, x2, y2, x3, y3, x4, y4] * from = [x1', y1', x2', y2', x3', y3', x4', y4'] * trans = [[c0], [c1], [c2], [c3], [c4], [c5], [c6], [c7]] * */ to' = Matrix [[to?0, to?1, ((to?0)*(to?1)), 1, 0, 0, 0, 0], [0, 0, 0, 0, to?0, to?1, ((to?0)*(to?1)), 1], [to?2, to?3, ((to?2)*(to?3)), 1, 0, 0, 0, 0], [0, 0, 0, 0, to?2, to?3, ((to?2)*(to?3)), 1], [to?4, to?5, ((to?4)*(to?5)), 1, 0, 0, 0, 0], [0, 0, 0, 0, to?4, to?5, ((to?4)*(to?5)), 1], [to?6, to?7, ((to?6)*(to?7)), 1, 0, 0, 0, 0], [0, 0, 0, 0, to?6, to?7, ((to?6)*(to?7)), 1]]; from' = Matrix (transpose [from]); to'' = to' ** (-1); trans = to'' * from'; trans' = trans.value; trans''= Matrix [[(trans'?3)?0, (trans'?7)?0 ], [((trans'?0)?0 - 1), (trans'?4)?0 ], [(trans'?1)?0, ((trans'?5)?0 - 1)], [(trans'?2)?0, (trans'?6)?0 ]]; }; ////////////////////////////////////////////////////////////////////////////// /* Sort a list of points into clockwise order. * * Called from: * _NG_utilities.def select_tetragon * _NG_Extra.def Perspective_match_item * _NG_Extra.def Perspective_item */ sort_pts_clockwise l = l'' { // sort functions: f_top a b = a.top < b.top; f_left a b = a.left < b.left; f_right a b = a.left > b.left; l' = sortc f_top l; l'_a = take 2 l'; l'_b = drop 2 l'; l''_a = sortc f_left l'_a; l''_b = sortc f_right l'_b; l'' = join l''_a l''_b; }; Mount_options _ctype _ppcm = class { _vislevel = 3; apply = Toggle "Apply mount options" false; ls = Expression "Lower mount section bigger by (cm)" 0; mount_colour = Colour _ctype [0, 0, 0]; _los = ls.expr * _ppcm; }; Frame_variables comp = class { _vislevel = 3; scale_factor = Expression "scale the size of the frame by" 1; /* These sliders define the fraction of the frames width or height is extracted * to produce each of the particular regions. */ corner_section = Scale "Corner section" 0.1 1 0.5; edge_section = Scale "Edge section" 0.1 1 0.2, comp > 0 = "Only required for complex frames"; middle_section = Scale "Middle section" 0.1 1 0.2; blend_fraction = Scale "Blend fraction" 0.1 0.9 0.1; option = Toggle "Use mirror of left-side to make right" true; }; nip2-8.7.0/share/nip2/start/Image.def0000644000175000017500000015445613330327245014151 00000000000000Image_new_item = class Menupullright "_New" "make new things" { Image_black_item = class Menuaction "_Image" "make a new image" { format_names = [ "8-bit unsigned int - UCHAR", // 0 "8-bit signed int - CHAR", // 1 "16-bit unsigned int - USHORT", // 2 "16-bit signed int - SHORT", // 3 "32-bit unsigned int - UINT", // 4 "32-bit signed int - INT", // 5 "32-bit float - FLOAT", // 6 "64-bit complex - COMPLEX", // 7 "64-bit float - DOUBLE", // 8 "128-bit complex - DPCOMPLEX" // 9 ]; action = class Image _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; nbands = Expression "Image bands" 1; format_option = Option "Image format" format_names 0; type_option = Option_enum "Image type" Image_type.type_names "B_W"; pixel = Expression "Pixel value" 0; _result = image_new (to_real nwidth) (to_real nheight) (to_real nbands) (to_real format_option) Image_coding.NOCODING type_option.value_thing pixel.expr 0 0; } } Image_new_from_image_item = class Menuaction "_From Image" "make a new image based on image x" { action x = class Image _result { _vislevel = 3; pixel = Expression "Pixel value" 0; _result = image_new x.width x.height x.bands x.format x.coding x.type pixel.expr x.xoffset x.yoffset; } } Image_region_item = class Menupullright "_Region on Image" "make a new region on an image" { Region_item = class Menuaction "_Region" "make a region on an image" { action image = scope.Region_relative image 0.25 0.25 0.5 0.5; } Mark_item = class Menuaction "_Point" "make a point on an image" { action image = scope.Mark_relative image 0.5 0.5; } Arrow_item = class Menuaction "_Arrow" "make an arrow on an image" { action image = scope.Arrow_relative image 0.25 0.25 0.5 0.5; } HGuide_item = class Menuaction "_Horizontal Guide" "make a horizontal guide on an image" { action image = scope.HGuide image 0.5; } VGuide_item = class Menuaction "_Vertical Guide" "make a vertical guide on an image" { action image = scope.VGuide image 0.5; } sep1 = Menuseparator; Move_item = class Menuaction "From Region" "new region on image using existing region as a guide" { action a b = map_binary process a b { process a b = x.Region target x.left x.top x.width x.height, is_Region x = x.Arrow target x.left x.top x.width x.height, is_Arrow x = error "bad arguments to region-from-region" { // prefer image then region compare a b = false, !is_Image a && is_Image b = false, is_Region a && !is_Region b = true; [target, x] = sortc compare [a, b]; } } } } } Image_convert_to_image_item = class Menuaction "Con_vert to Image" "convert anything to an image" { action x = to_image x; } Image_number_format_item = class Menupullright "_Format" "convert numeric format" { U8_item = class Menuaction "_8 bit unsigned" "convert to unsigned 8 bit [0, 255]" { action x = map_unary cast_unsigned_char x; } U16_item = class Menuaction "1_6 bit unsigned" "convert to unsigned 16 bit [0, 65535]" { action x = map_unary cast_unsigned_short x; } U32_item = class Menuaction "_32 bit unsigned" "convert to unsigned 32 bit [0, 4294967295]" { action x = map_unary cast_unsigned_int x; } sep1 = Menuseparator; S8_item = class Menuaction "8 _bit signed" "convert to signed 8 bit [-128, 127]" { action x = map_unary cast_signed_char x; } S16_item = class Menuaction "16 b_it signed" "convert to signed 16 bit [-32768, 32767]" { action x = map_unary cast_signed_short x; } S32_item = class Menuaction "32 bi_t signed" "convert to signed 32 bit [-2147483648, 2147483647]" { action x = map_unary cast_signed_int x; } sep2 = Menuseparator; Float_item = class Menuaction "_Single precision float" "convert to IEEE 32 bit float" { action x = map_unary cast_float x; } Double_item = class Menuaction "_Double precision float" "convert to IEEE 64 bit float" { action x = map_unary cast_double x; } sep3 = Menuseparator; Scmplxitem = class Menuaction "Single _precision complex" "convert to 2 x IEEE 32 bit float" { action x = map_unary cast_complex x; } Dcmplx_item = class Menuaction "Double p_recision complex" "convert to 2 x IEEE 64 bit float" { action x = map_unary cast_double_complex x; } } Image_header_item = class Menupullright "_Header" "do stuff to the image header" { Image_get_item = class Menupullright "_Get" "get header fields" { // the header fields we can get fields = class { type = 0; width = 1; height = 2; format = 3; bands = 4; xres = 5; yres = 6; xoffset = 7; yoffset = 8; coding = 9; field_names = Enum [ $width => width, $height => height, $bands => bands, $format => format, $type => type, $xres => xres, $yres => yres, $xoffset => xoffset, $yoffset => yoffset, $coding => coding ]; field_option name = Option_enum (_ "Field") field_names name; field_funcs = Table [ [type, get_type], [width, get_width], [height, get_height], [format, get_format], [bands, get_bands], [xres, get_xres], [yres, get_yres], [xoffset, get_xoffset], [yoffset, get_yoffset], [coding, get_coding] ]; } get_field field_name x = class _result { _vislevel = 3; field = fields.field_option field_name; _result = map_unary (Real @ fields.field_funcs.lookup 0 1 field.value_thing) x; } Width_item = class Menuaction "_Width" "get width" { action x = get_field "width" x; } Height_item = class Menuaction "_Height" "get height" { action x = get_field "height" x; } Bands_item = class Menuaction "_Bands" "get bands" { action x = get_field "bands" x; } Format_item = class Menuaction "_Format" "get format" { action x = get_field "format" x; } Type_item = class Menuaction "_Type" "get type" { action x = get_field "type" x; } Xres_item = class Menuaction "_Xres" "get X resolution" { action x = get_field "xres" x; } Yres_item = class Menuaction "_Yres" "get Y resolution" { action x = get_field "yres" x; } Xoffset_item = class Menuaction "X_offset" "get X offset" { action x = get_field "xoffset" x; } Yoffset_item = class Menuaction "Yo_ffset" "get Y offset" { action x = get_field "yoffset" x; } Coding_item = class Menuaction "_Coding" "get coding" { action x = get_field "coding" x; } sep1 = Menuseparator; Custom_item = class Menuaction "C_ustom" "get any header field" { action x = class _result { _vislevel = 3; field = String "Field" "Xsize"; parse = Option "Parse" [ "No parsing", "Parse string as integer", "Parse string as real", "Parse string as hh:mm:ss" ] 0; _result = map_unary (wrap @ process @ get_header field.value) x { parse_str parse str = parse (split is_space str)?0; parse_field name cast parse x = cast x, is_number x = parse_str parse x, is_string x = error ("not " ++ name); get_int = parse_field "int" cast_signed_int parse_int; get_float = parse_field "float" cast_float parse_float; get_time = parse_field "hh:mm:ss" cast_signed_int parse_time; wrap x = Real x, is_real x = Vector x, is_real_list x = Image x, is_image x = Bool x, is_bool x = Matrix x, is_matrix x = String "String" x, is_string x = List x, is_list x = x; process = [ id, get_int, get_float, get_time ]?parse; } } } } sep1 = Menuseparator; Image_set_meta_item = class Menuaction "_Set" "set image metadata" { action x = class _result { _vislevel = 3; fname = String "Field" "field-name"; val = Expression "Value" 42; _result = map_unary process x { process image = set_header fname.value val.expr image; } } } Image_edit_header_item = class Menuaction "_Edit" "change advisory header fields of image" { type_names = Image_type.type_names; all_names = sort (map (extract 0) type_names.value); get_prop has get def x = get x, has x = def; action x = class _result { _vislevel = 3; nxres = Expression "Xres" (get_prop has_xres get_xres 1 x); nyres = Expression "Yres" (get_prop has_yres get_yres 1 x); nxoff = Expression "Xoffset" (get_prop has_xoffset get_xoffset 0 x); nyoff = Expression "Yoffset" (get_prop has_yoffset get_yoffset 0 x); type_option = Option_enum "Image type" Image_type.type_names (Image_type.type_names.get_name type) { type = x.type, is_Image x = Image_type.MULTIBAND; } _result = map_unary process x { process image = Image (im_copy_set image.value type_option.value_thing (to_real nxres) (to_real nyres) (to_real nxoff) (to_real nyoff)); } } } } Image_cache_item = class Menuaction "C_ache" "cache calculated image pixels" { action x = class _result { _vislevel = 3; tile_width = Number "Tile width" 128; tile_height = Number "Tile height" 128; max_tiles = Number "Maximum number of tiles to cache" (-1); _result = map_unary process x { process image = cache (to_real tile_width) (to_real tile_height) (to_real max_tiles) image; } } } #separator Image_levels_item = class Menupullright "_Levels" "change image levels" { Scale_item = class Menuaction "_Scale to 0 - 255" "linear transform to fit 0 - 255 range" { action x = map_unary scale x; } Linear_item = class Menuaction "_Linear" "linear transform of image levels" { action x = class _result { _vislevel = 3; scale = Scale "Scale" 0.001 3 1; offset = Scale "Offset" (-128) 128 0; _result = map_unary adj x { adj x // only force back to input type if this is a thing // with a type ... so we work for Colour / Matrix etc. = clip2fmt x.format x', has_member "format" x = x' { x' = x * scale + offset; } } } } Gamma_item = class Menuaction "_Power" "power transform of image levels (gamma)" { action x = class _result { _vislevel = 3; gamma = Scale "Gamma" 0.001 4 1; image_maximum_hint = "You may need to change image_maximum if " ++ "this is not an 8 bit image"; im_mx = Expression "Image maximum" mx { mx = Image_format.maxval x.format, has_format x = 255; } _result = map_unary gam x { gam x = clip2fmt (get_format x) x', has_format x = x' { x' = (im_mx.expr / im_mx.expr ** gamma) * x ** gamma; } } } } Tone_item = class Menuaction "_Tone Curve" "adjust tone curve" { action x = class _result { _vislevel = 3; b = Scale "Black point" 0 100 0; w = Scale "White point" 0 100 100; sp = Scale "Shadow point" 0.1 0.3 0.2; mp = Scale "Mid-tone point" 0.4 0.6 0.5; hp = Scale "Highlight point" 0.7 0.9 0.8; sa = Scale "Shadow adjust" (-15) 15 0; ma = Scale "Mid-tone adjust" (-30) 30 0; ha = Scale "Highlight adjust" (-15) 15 0; curve = tone_build x.format b w sp mp hp sa ma ha; _result = map_unary (hist_map curve) x; } } } Image_transform_item = class Menupullright "_Transform" "transform images" { Rotate_item = class Menupullright "Ro_tate" "rotate image" { Fixed_item = class Menupullright "_Fixed" "clockwise rotation by fixed angles" { rotate_widget default x = class _result { _vislevel = 3; angle = Option "Rotate by" [ "Don't rotate", "90 degrees clockwise", "180 degrees", "90 degrees anticlockwise" ] default; _result = map_unary process x { process = [ // we can't use id here since we want to "declass" // the members of x ... consider if x is a crop class, // for example, we don't want to inherit from crop, we // want to make a new image class rot180 @ rot180, rot90, rot180, rot270 ] ? angle; } } Rot90_item = class Menuaction "_90 Degrees" "clockwise rotation by 90 degrees" { action x = rotate_widget 1 x; } Rot180_item = class Menuaction "_180 Degrees" "clockwise rotation by 180 degrees" { action x = rotate_widget 2 x; } Rot270_item = class Menuaction "_270 Degrees" "clockwise rotation by 270 degrees" { action x = rotate_widget 3 x; } } Free_item = class Menuaction "_Free" "clockwise rotation by any angle" { action x = class _result { _vislevel = 3; angle = Scale "Angle" (-180) 180 0; interp = Interpolate_picker Interpolate_type.BILINEAR; _result = map_unary process x { process image = rotate interp angle image; } } } Straighten_item = class Menuaction "_Straighten" ("smallest rotation that makes an arrow either horizontal " ++ "or vertical") { action x = class _result { _vislevel = 3; interp = Interpolate_picker Interpolate_type.BILINEAR; _result = map_unary straighten x { straighten arrow = rotate interp angle'' arrow.image { x = arrow.width; y = arrow.height; angle = im (polar (x, y)); angle' = angle - 360, angle > 315 = angle - 180, angle > 135 = angle; angle'' = -angle', angle' >= (-45) && angle' < 45 = 90 - angle'; } } } } } Flip_item = class Menupullright "_Flip" "mirror left/right or up/down" { Left_right_item = class Menuaction "_Left Right" "mirror object left/right" { action x = map_unary fliplr x; } Top_bottom_item = class Menuaction "_Top Bottom" "mirror object top/bottom" { action x = map_unary fliptb x; } } Resize_item = class Menupullright "_Resize" "change image size" { Scale_item = class Menuaction "_Scale" "scale image size by a factor" { action x = class _result { _vislevel = 3; xfactor = Expression "Horizontal scale factor" 1; yfactor = Expression "Vertical scale factor" 1; kernel = Kernel_picker Kernel_type.LINEAR; _result = map_unary process x { process image = resize kernel xfactor yfactor image; } } } Size_item = class Menuaction "_Size To" "resize to a fixed size" { action x = class _result { _vislevel = 3; which = Option "Resize axis" [ "Shortest", "Longest", "Horizontal", "Vertical" ] 0; size = Expression "Resize to (pixels)" 128; aspect = Toggle "Break aspect ratio" false; kernel = Kernel_picker Kernel_type.LINEAR; _result = map_unary process x { process image = resize kernel h v image, aspect = resize kernel fac fac image { xfac = to_real size / image.width; yfac = to_real size / image.height; max_factor = [xfac, 1], xfac > yfac = [1, yfac]; min_factor = [xfac, 1], xfac < yfac = [1, yfac]; [h, v] = [ max_factor, min_factor, [xfac, 1], [1, yfac]]?which; fac = h, v == 1 = v; } } } } Size_within_item = class Menuaction "Size _Within" "size to fit within a rectangle" { action x = class _result { _vislevel = 3; // the rects we size to fit within _rects = [ [2048, 1536], [1920, 1200], [1600, 1200], [1400, 1050], [1280, 1024], [1024, 768], [800, 600], [640, 480] ]; within = Option "Fit within (pixels)" ( [print w ++ " x " ++ print h :: [w, h] <- _rects] ++ ["Custom"] ) 4; custom_width = Expression "Custom width" 1000; custom_height = Expression "Custom height" 1000; size = Option "Page size" [ "Full page", "Half page", "Quarter page" ] 0; kernel = Kernel_picker Kernel_type.LINEAR; _result = map_unary process x { xdiv = [1, 2, 2]?size; ydiv = [1, 1, 2]?size; allrect = _rects ++ [ [custom_width.expr, custom_height.expr] ]; [width, height] = allrect?within; process x = resize kernel fac fac x, fac < 1 = x { xfac = (width / xdiv) / x.width; yfac = (height / ydiv) / x.height; fac = min_pair xfac yfac; } } } } Resize_canvas_item = class Menuaction "_Canvas" "change size of surrounding image" { action x = class _result { _vislevel = 3; // try to guess a sensible size for the new image _guess_size = x.rect, is_Image x = Rect 0 0 100 100; nwidth = Expression "New width (pixels)" _guess_size.width; nheight = Expression "New height (pixels)" _guess_size.height; bgcolour = Expression "Background colour" 0; position = Option "Position" [ "North-west", "North", "North-east", "West", "Centre", "East", "South-west", "South", "South-east", "Specify in pixels" ] 4; left = Expression "Pixels from left" 0; top = Expression "Pixels from top" 0; _result = map_unary process x { process image = insert_noexpand xp yp image background { width = image.width; height = image.height; coding = image.coding; bands = 3, coding == Image_coding.LABPACK = image.bands; format = Image_format.FLOAT, coding == Image_coding.LABPACK = image.format; type = image.type; // placement vectors ... left, centre, right xposv = [0, to_real nwidth / 2 - width / 2, to_real nwidth - width]; yposv = [0, to_real nheight / 2 - height / 2, to_real nheight - height]; xp = left, position == 9 = xposv?((int) (position % 3)); yp = top, position == 9 = yposv?((int) (position / 3)); background = image_new nwidth nheight bands format coding type bgcolour.expr 0 0; } } } } } Image_map_item = class Menuaction "_Map" "map an image through a 2D transform image" { action a b = class _result { _vislevel = 3; interp = Interpolate_picker Interpolate_type.BILINEAR; _result = map_binary trans a b { trans a b = mapim interp.value in index { // get the index image first [index, in] = sortc (const is_twocomponent) [a, b]; // is a two-component image, ie. one band complex, or // two-band non-complex is_twocomponent x = is_nonc x || is_c x; is_nonc x = has_bands x && get_bands x == 2 && has_format x && !is_complex_format (get_format x); is_c x = has_bands x && get_bands x == 1 && has_format x && is_complex_format (get_format x); is_complex_format f = f == Image_format.COMPLEX || f == Image_format.DPCOMPLEX; } } } } Image_perspective_item = Perspective_item; Image_rubber_item = class Menupullright "Ru_bber Sheet" "automatically warp images to superposition" { rubber_interp = Option "Interpolation" ["Nearest", "Bilinear"] 1; rubber_order = Option "Order" ["0", "1", "2", "3"] 1; rubber_wrap = Toggle "Wrap image edges" false; // a transform ... a matrix, plus the size of the image the // matrix was made for Transform matrix image_width image_height = class matrix { // scale a transform ... if it worked for a m by n image, make // it work for a (m * xfac) by (y * yfac) image rescale xfac yfac = Transform (Matrix (map2 (map2 multiply) matrix.value facs)) (image_width * xfac) (image_height * yfac) { facs = [ [xfac, yfac], [1, 1], [1, 1], [1 / xfac, 1 / yfac], [1 / xfac, 1 / yfac], [1 / xfac, 1 / yfac] ]; } } // yuk!!!! fix is_instanceof to not need absolute names is_Transform = is_instanceof "Image_transform_item.Image_rubber_item.Transform"; Find_item = class Menuaction "_Find" ("find a transform which will map sample image onto " ++ "reference") { action reference sample = class _trn { _vislevel = 3; // controls order = rubber_order; interp = rubber_interp; wrap = rubber_wrap; max_err = Expression "Maximum error" 0.3; max_iter = Expression "Maximum iterations" 10; // transform [sample', trn, err] = transform_search max_err max_iter order interp wrap sample reference; transformed_image = Image sample'; _trn = Transform trn reference.width reference.height; final_error = err; } } Apply_item = class Menuaction "_Apply" "apply a transform to an image" { action a b = class _result { _vislevel = 3; // controls interp = rubber_interp; wrap = rubber_wrap; _result = map_binary trans a b { trans a b = transform interp wrap t' i { // get the transform arg first [i, t] = sortc (const is_Transform) [a, b]; t' = t.rescale (i.width / t.image_width) (i.height / t.image_height); } } } } } sep1 = Menuseparator; Match_item = class Menuaction "_Linear Match" "rotate and scale one image to match another" { action x y = class _result { _vislevel = 3; // try to find an image ... for a group, get the first item find_image x = x, is_Image x = find_image x?0, is_list x = find_image x.value, is_class x && has_value x = error "unable to find image"; _a = find_image x; _b = find_image y; ap1 = Mark_relative _a 0.5 0.25; bp1 = Mark_relative _b 0.5 0.25; ap2 = Mark_relative _a 0.5 0.75; bp2 = Mark_relative _b 0.5 0.75; refine = Toggle "Refine selected tie-points" false; lock = Toggle "No resize" false; _result = map_binary process x y { process a b = Image b''' { _prefs = Workspaces.Preferences; window = _prefs.MOSAIC_WINDOW_SIZE; object = _prefs.MOSAIC_OBJECT_SIZE; a' = a.value; b' = b.value; b'' = clip2fmt a.format b'; // return p2 ... if lock is set, return a p2 a standard // distance along the vector joining p1 and p2 norm p1 p2 = Rect left' top' 0 0, lock = p2 { v = (p2.left - p1.left, p2.top - p1.top); // 100000 to give precision since we pass points as // ints to match n = 100000 * sign v; left' = p1.left + re n; top' = p1.top + im n; } ap2'' = norm ap1 ap2; bp2'' = norm bp1 bp2; b''' = im_match_linear_search a' b'' ap1.left ap1.top bp1.left bp1.top ap2''.left ap2''.top bp2''.left bp2''.top object window, // we can't search if lock is on refine && !lock = im_match_linear a' b'' ap1.left ap1.top bp1.left bp1.top ap2''.left ap2''.top bp2''.left bp2''.top; } } } } Image_perspective_match_item = Perspective_match_item; } Image_band_item = class Menupullright "_Band" "manipulate image bands" { // like extract_bands, but return [] for zero band image // makes compose a bit simpler exb b n x = [], to_real n == 0 = extract_bands b n x; Extract_item = class Menuaction "_Extract" "extract bands from image" { action x = class _result { _vislevel = 3; first = Expression "Extract from band" 0; number = Expression "Extract this many bands" 1; _result = map_unary (exb first number) x; } } Insert_item = class Menuaction "_Insert" "insert bands into image" { action x y = class _result { _vislevel = 3; first = Expression "Insert at position" 0; _result = map_binary process x y { process im1 im2 = exb 0 f im1 ++ im2 ++ exb f (b - f) im1 { f = to_real first; b = im1.bands; } } } } Delete_item = class Menuaction "_Delete" "delete bands from image" { action x = class _result { _vislevel = 3; first = Expression "Delete from band" 0; number = Expression "Delete this many bands" 1; _result = map_unary process x { process im = exb 0 f im ++ exb (f + n) (b - (f + n)) im { f = to_real first; n = to_real number; b = im.bands; } } } } Bandwise_item = Image_join_item.Bandwise_item; sep1a = Menuseparator; Bandand_item = class Menuaction "Bitwise Band AND" "bitwise AND of image bands" { action x = bandand x; } Bandor_item = class Menuaction "Bitwise Band OR" "bitwise OR of image bands" { action x = bandor x; } sep2 = Menuseparator; To_dimension_item = class Menuaction "To D_imension" "convert bands to width or height" { action x = class _result { _vislevel = 3; orientation = Option "Orientation" [ "Horizontal", "Vertical" ] 0; _result = map_unary process x { process im = foldl1 [join_lr, join_tb]?orientation (bandsplit im); } } } To_bands_item = class Menuaction "To B_ands" "turn width or height to bands" { action x = class _result { _vislevel = 3; orientation = Option "Orientation" [ "Horizontal", "Vertical" ] 0; _result = map_unary process x { process im = bandjoin (map extract_column [0 .. im.width - 1]), orientation == 0 = bandjoin (map extract_row [0 .. im.height - 1]) { extract_column n = extract_area n 0 1 im.height im; extract_row n = extract_area 0 n im.width 1 im; } } } } } Image_alpha_item = class Menupullright "_Alpha" "manipulate image alpha" { Add_item = class Menuaction "_Add" "add alpha" { action x = class _result { _vislevel = 3; opacity = Expression "Opacity (255 == solid)" 255; _result = x ++ to_real opacity; } } Flatten_item = class Menuaction "_Flatten" "flatten alpha out of image" { action x = class _result { _vislevel = 3; bg = Expression "Background" 0; _result = map_unary (flattenimage bg) x; } } Extract_item = class Menuaction "_Extract" "extract alpha" { action x = map_unary exb x { exb x = extract_bands (x.bands - 1) 1 x; } } Drop_item = class Menuaction "_Drop" "drop alpha" { action x = map_unary exb x { exb x = extract_bands 0 (x.bands - 1) x; } } sep1 = Menuseparator; Premultiply_item = class Menuaction "_Premultiply" "premultiply alpha" { action x = premultiply x; } Unpremultiply_item = class Menuaction "_Unpremultiply" "unpremultiply alpha" { action x = unpremultiply x; } sep2 = Menuseparator; Composite2_item = class Menuaction "_Composite two" "composite a pair of images" { action x y = class _result { _vislevel = 3; blend = Option_enum (_ "Blend mode") modes "over" { modes = Blend_type.types; } compositing_space = Option_enum (_ "Compositing space") spaces "sRGB" { spaces = Image_type.image_colour_spaces; } premultiplied = Toggle (_ "Premultiplied") false; _result = Image output { [output] = vips_call "composite" [[y.value, x.value], blend.value] [$compositing_space => compositing_space.value_thing, $premultiplied => premultiplied.value ]; } } } Composite3_item = class Menuaction "_Composite three" "composite three images" { action x y z = class _result { _vislevel = 3; blend1 = Option_enum (_ "Blend mode") modes "over" { modes = Blend_type.types; } blend2 = Option_enum (_ "Blend mode") modes "over" { modes = Blend_type.types; } compositing_space = Option_enum (_ "Compositing space") spaces "sRGB" { spaces = Image_type.image_colour_spaces; } premultiplied = Toggle (_ "Premultiplied") false; _result = Image output { [output] = vips_call "composite" [[z.value, y.value, x.value], [blend1.value, blend2.value]] [$compositing_space => compositing_space.value_thing, $premultiplied => premultiplied.value ]; } } } } Image_crop_item = class Menuaction "_Crop" "extract a rectangular area from an image" { action x = crop x [l, t, w, h] { fields = [ [has_left, get_left, 0], [has_top, get_top, 0], [has_width, get_width, 100], [has_height, get_height, 100] ]; [l, t, w, h] = map get_default fields { get_default line = get x, has x = default { [has, get, default] = line; } } } crop x geo = class _result { _vislevel = 3; l = Expression "Crop left" ((int) (geo?0 + geo?2 / 4)); t = Expression "Crop top" ((int) (geo?1 + geo?3 / 4)); w = Expression "Crop width" (max_pair 1 ((int) (geo?2 / 2))); h = Expression "Crop height" (max_pair 1 ((int) (geo?3 / 2))); _result = map_nary (list_5ary extract) [x, l.expr, t.expr, w.expr, h.expr] { extract im l t w h = extract_area left' top' width' height' im { width' = min_pair (to_real w) im.width; height' = min_pair (to_real h) im.height; left' = range 0 (to_real l) (im.width - width'); top' = range 0 (to_real t) (im.height - height'); } } } } Image_insert_item = class Menuaction "_Insert" "insert a small image into a large image" { action a b = insert_position, is_Group a || is_Group b = insert_area { insert_area = class _result { _check_args = [ [a, "a", check_Image], [b, "b", check_Image] ]; _vislevel = 3; // sort to get smallest first _pred x y = x.width * x.height < y.width * y.height; [_a', _b'] = sortc _pred [a, b]; place = Area _b' left top width height { // be careful in case b is smaller than a left = max_pair 0 ((_b'.width - _a'.width) / 2); top = max_pair 0 ((_b'.height - _a'.height) / 2); width = min_pair _a'.width _b'.width; height = min_pair _a'.height _b'.height; } _result = insert_noexpand place.left place.top (clip2fmt _b'.format a'') _b' { a'' = extract_area 0 0 place.width place.height _a'; } } insert_position = class _result { _vislevel = 3; position = Option "Position" [ "North-west", "North", "North-east", "West", "Centre", "East", "South-west", "South", "South-east", "Specify in pixels" ] 4; left = Expression "Pixels from left" 0; top = Expression "Pixels from top" 0; _result = map_binary insert a b { insert a b = insert_noexpand left top (clip2fmt b.format a) b, position == 9 = insert_noexpand xp yp (clip2fmt b.format a) b { xr = b.width - a.width; yr = b.height - a.height; xp = [0, xr / 2, xr]?((int) (position % 3)); yp = [0, yr / 2, yr]?((int) (position / 3)); } } } } } Image_select_item = Select_item; Image_draw_item = class Menupullright "_Draw" "draw lines, circles, rectangles, floods" { Line_item = class Menuaction "_Line" "draw line on image" { action x = class _result { _vislevel = 3; x1 = Expression "Start x" 0; y1 = Expression "Start y" 0; x2 = Expression "End x" 100; y2 = Expression "End y" 100; i = Expression "Ink" [0]; _result = map_unary line x { line im = draw_line x1 y1 x2 y2 i.expr im; } } } Rect_item = class Menuaction "_Rectangle" "draw rectangle on image" { action x = class _result { _vislevel = 3; rx = Expression "Left" 50; ry = Expression "Top" 50; rw = Expression "Width" 100; rh = Expression "Height" 100; f = Toggle "Fill" true; t = Scale "Line thickness" 1 50 3; i = Expression "Ink" [0]; _result = map_unary rect x { rect im = draw_rect_width rx ry rw rh f t i.expr im; } } } Circle_item = class Menuaction "_Circle" "draw circle on image" { action x = class _result { _vislevel = 3; cx = Expression "Centre x" 100; cy = Expression "Centre y" 100; r = Expression "Radius" 50; f = Toggle "Fill" true; i = Expression "Ink" [0]; _result = map_unary circle x { circle im = draw_circle cx cy r f i.expr im; } } } Flood_item = class Menuaction "_Flood" "flood bounded area of image" { action x = class _result { _vislevel = 3; sx = Expression "Start x" 0; sy = Expression "Start y" 0; e = Option "Flood while" [ "Not equal to ink", "Equal to start point" ] 0; // pick a default ink that won't flood, if we can i = Expression "Ink" default_ink { default_ink = [0], ! has_image x = pixel; pixel = map mean (bandsplit (extract_area sx sy 1 1 im)); im = get_image x; } _result = map_unary flood x { flood im = draw_flood sx sy i.expr im, e == 0 = draw_flood_blob sx sy i.expr im; } } } Draw_scalebar_item = class Menuaction "_Scale" "draw scale bar" { action x = class _result { _vislevel = 3; px = Expression "Left" 50; py = Expression "Top" 50; wid = Expression "Width" 100; thick = Scale "Line thickness" 1 50 3; text = String "Dimension text" "50μm"; font = Fontname "Use font" Workspaces.Preferences.PAINTBOX_FONT; pos = Option "Position Text" ["Above", "Below"] 1; vp = Option "Dimension by" [ "Inner Vertical Edge", "Centre of Vertical", "Outer Vertical Edge" ] 1; dpi = Expression "DPI" 100; ink = Colour "Lab" [50,0,0]; _result = map_unary process x { process im = blend (Image scale) ink' im { // make an ink compatible with the image ink' = colour_transform_to (get_type im) ink; x = to_real px; y = to_real py; w = to_real wid; d = to_real dpi; t = floor thick; bg = image_new (get_width im) (get_height im) (get_bands im) (get_format im) (get_coding im) (get_type im) 0 0 0; draw_block x y w t im = draw_rect_width x y w t true 1 [255] im; label = im_text text.value font.value w 1 d; lw = get_width label; lh = get_height label; ly = [y - lh - t, y + 2 * t]?pos; vx = [ [x - t, x + w], [x - t / 2, x + w - t / 2], [x, x + w - t] ]?vp; scale = (draw_block x y w t @ draw_block vx?0 (y - 2 * t) t (t * 5) @ draw_block vx?1 (y - 2 * t) t (t * 5) @ insert_noexpand (x + w / 2 - lw / 2) ly label) bg; } } } } } Image_join_item = class Menupullright "_Join" "join two or more images together" { Bandwise_item = class Menuaction "_Bandwise Join" "join two images bandwise" { action a b = join a b; } sep1 = Menuseparator; join_lr shim bg align a b = im2 { w = a.width + b.width + shim; h = max_pair a.height b.height; back = image_new w h a.bands a.format a.coding a.type bg 0 0; ya = [0, max_pair 0 ((b.height - a.height)/2), max_pair 0 (b.height - a.height)]; yb = [0, max_pair 0 ((a.height - b.height)/2), max_pair 0 (a.height - b.height)]; im1 = insert_noexpand 0 ya?align a back; im2 = insert_noexpand (a.width + shim) yb?align b im1; } join_tb shim bg align a b = im2 { w = max_pair a.width b.width; h = a.height + b.height + shim; back = image_new w h a.bands a.format a.coding a.type bg 0 0; xa = [0, max_pair 0 ((b.width - a.width)/2), max_pair 0 (b.width - a.width)]; xb = [0, max_pair 0 ((a.width - b.width)/2), max_pair 0 (a.width - b.width)]; im1 = insert_noexpand xa?align 0 a back; im2 = insert_noexpand xb?align (a.height + shim) b im1; } halign_names = ["Top", "Centre", "Bottom"]; valign_names = ["Left", "Centre", "Right"]; Left_right_item = class Menuaction "_Left to Right" "join two images left-right" { action a b = class _result { _vislevel = 3; shim = Scale "Spacing" 0 100 0; bg_colour = Expression "Background colour" 0; align = Option "Alignment" halign_names 1; _result = map_binary (join_lr shim.value bg_colour.expr align.value) a b; } } Top_bottom_item = class Menuaction "_Top to Bottom" "join two images top-bottom" { action a b = class _result { _vislevel = 3; shim = Scale "Spacing" 0 100 0; bg_colour = Expression "Background colour" 0; align = Option "Alignment" valign_names 1; _result = map_binary (join_tb shim.value bg_colour.expr align.value) a b; } } sep2 = Menuseparator; Array_item = class Menuaction "_Array" "join a list of lists of images into a single image" { action x = class _result { _vislevel = 3; hshim = Scale "Horizontal spacing" (-100) (100) 0; vshim = Scale "Vertical spacing" (-100) (100) 0; bg_colour = Expression "Background colour" 0; halign = Option "Horizontal alignment" valign_names 1; valign = Option "Vertical alignment" halign_names 1; // we can't use map_unary since chop-into-tiles returns a group of // groups and we want to be able to reassemble that // TODO: chop-into-tiles should return an array class which // displays as group but does not have the looping behaviour? _result = (image_set_origin 0 0 @ foldl1 (join_tb vshim.value bg_colour.expr halign.value) @ map (foldl1 (join_lr hshim.value bg_colour.expr valign.value))) (to_list (to_list x)); } } ArrayFL_item = class Menuaction "_Array from List" "join a list of images into a single image" { action x = class _result { _vislevel = 3; ncol = Number "Max. Number of Columns" 1; hshim = Scale "Horizontal spacing" (-100) (100) 0; vshim = Scale "Vertical spacing" (-100) (100) 0; bg_colour = Expression "Background colour" 0; halign = Option "Horizontal alignment" valign_names 1; valign = Option "Vertical alignment" halign_names 1; snake = Toggle "Reverse the order of every other row" false; _l = split_lines ncol.value x.value, is_Group x = split_lines ncol.value x; _l' = map2 reverse_if_odd [0..] _l, snake = _l { reverse_if_odd n x = reverse x, n % 2 == 1 = x; } _result = (image_set_origin 0 0 @ foldl1 (join_tb vshim.value bg_colour.expr halign.value) @ map (foldl1 (join_lr hshim.value bg_colour.expr valign.value))) (to_list (to_list _l')); } } } Image_tile_item = class Menupullright "Til_e" "tile an image across and down" { tile_widget default_type x = class _result { _vislevel = 3; across = Expression "Tiles across" 2; down = Expression "Tiles down" 2; repeat = Option "Tile type" ["Replicate", "Four-way mirror"] default_type; _result = map_unary process x { process image = tile across down image, repeat == 0 = tile across down image'' { image' = insert image.width 0 (fliplr image) image; image'' = insert 0 image.height (fliptb image') image'; } } } Replicate_item = class Menuaction "_Replicate" "replicate image across and down" { action x = tile_widget 0 x; } Fourway_item = class Menuaction "_Four-way Mirror" "four-way mirror across and down" { action x = tile_widget 1 x; } Chop_item = class Menuaction "_Chop Into Tiles" "slice an image into tiles" { action x = class _result { _vislevel = 3; tile_width = Expression "Tile width" 100; tile_height = Expression "Tile height" 100; hoverlap = Expression "Horizontal overlap" 0; voverlap = Expression "Vertical overlap" 0; _result = map_unary (Group @ map Group @ process) x { process x = imagearray_chop tile_width tile_height hoverlap voverlap x; } } } } #separator Pattern_images_item = class Menupullright "_Patterns" "make a variety of useful patterns" { Grey_item = class Menuaction "Grey _Ramp" "make a smooth grey ramp" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; orientation = Option "Orientation" [ "Horizontal", "Vertical" ] 0; foption = Option "Format" ["8 bit", "float"] 0; _result = Image im { gen = im_grey, foption == 0 = im_fgrey; w = to_real nwidth; h = to_real nheight; im = gen w h, orientation == 0 = rot90 (gen h w); } } } Xy_item = class Menuaction "_XY Image" "make a two band image whose pixel values are their coordinates" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; _result = Image (make_xy nwidth nheight); } } Noise_item = class Menupullright "_Noise" "various noise generators" { Gaussian_item = class Menuaction "_Gaussian" "make an image of gaussian noise" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; mean = Scale "Mean" 0 255 128; deviation = Scale "Deviation" 0 128 50; _result = Image (gaussnoise nwidth nheight mean.value deviation.value); } } Fractal_item = class Menuaction "_Fractal" "make a fractal noise image" { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; dimension = Scale "Dimension" 2.001 2.999 2.001; _result = Image (im_fractsurf (to_real nsize) dimension.value); } } Perlin_item = class Menuaction "_Perlin" "Perlin noise image" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; cell_size = Expression "Cell size (pixels)" 8; eight = Toggle "Eight bit output" true; _result = 128 * im + 128, eight = im { im = perlin cell_size nwidth nheight; } } } Worley_item = class Menuaction "_Worley" "Worley noise image" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 512; nheight = Expression "Image height (pixels)" 512; cell_size = Expression "Cell size (pixels)" 256; _result = worley cell_size nwidth nheight; } } } Checkerboard_item = class Menuaction "_Checkerboard" "make a checkerboard image" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; hpsize = Expression "Horizontal patch size" 8; vpsize = Expression "Vertical patch size" 8; hpoffset = Expression "Horizontal patch offset" 0; vpoffset = Expression "Vertical patch offset" 0; _result = Image (xstripes ^ ystripes) { pixels = make_xy nwidth nheight; xpixels = pixels?0 + to_real hpoffset; ypixels = pixels?1 + to_real vpoffset; make_stripe pix swidth = pix % (swidth * 2) >= swidth; xstripes = make_stripe xpixels (to_real hpsize); ystripes = make_stripe ypixels (to_real vpsize); } } } Grid_item = class Menuaction "Gri_d" "make a grid" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; hspace = Expression "Horizontal line spacing" 8; vspace = Expression "Vertical line spacing" 8; thick = Expression "Line thickness" 1; hoff = Expression "Horizontal grid offset" 4; voff = Expression "Vertical grid offset" 4; _result = Image (xstripes | ystripes) { pixels = make_xy nwidth nheight; xpixels = pixels?0 + to_real hoff; ypixels = pixels?1 + to_real voff; make_stripe pix swidth = pix % swidth < to_real thick; xstripes = make_stripe xpixels (to_real hspace); ystripes = make_stripe ypixels (to_real vspace); } } } Text_item = class Menuaction "_Text" "make a bitmap of some text" { action = class _result { _vislevel = 3; text = String "Text to paint" "Hello world!"; font = Fontname "Use font" Workspaces.Preferences.PAINTBOX_FONT; fontfile = Pathname "Font file" ""; width = Expression "Text width" 0; height = Expression "Text height" 0; align = Option "Alignment" [ "Left", "Centre", "Right" ] 0; dpi = Expression "DPI" 300; fit = Toggle "Fit text to box" false; spacing = Expression "Line spacing" 0; _result = Image out { base_options = [ $font => font.value, $align => align.value ]; set_option name default value = [name => value], value != default = []; options = base_options ++ concat [ set_option $width 0 (to_real width), set_option $height 0 (to_real height), set_option $fontfile "" fontfile.value, if !fit then set_option $dpi 72 (to_real dpi) else [], set_option $spacing 0 (to_real spacing) ]; [out] = vips_call "text" [text.value] options; } } } New_CIELAB_slice_item = class Menuaction "CIELAB _Slice" "make a slice through CIELAB space" { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; L = Scale "L value" 0 100 50; _result = Image (lab_slice (to_real nsize) L.value); } } sense_option = Option "Sense" [ "Pass", "Reject" ] 0; build fn size = (Image @ image_set_type Image_type.FOURIER @ rotquad @ fn) (im_create_fmask size size); New_ideal_item = class Menupullright "_Ideal Fourier Mask" "make various ideal Fourier filter masks" { High_low_item = class Menuaction "_High or Low Pass" ("make a mask image for a highpass/lowpass " ++ "ideal Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f sense.value fc.value 0 0 0 0; } } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" ("make a mask image for an ring pass/reject " ++ "ideal Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; rw = Scale "Ring width" 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f (sense.value + 6) fc.value rw.value 0 0 0; } } } Band_item = class Menuaction "_Band Pass or Band Reject" ("make a mask image for a band pass/reject " ++ "ideal Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fcx = Scale "Horizontal frequency cutoff" 0.01 0.99 0.5; fcy = Scale "Vertical frequency cutoff" 0.01 0.99 0.5; r = Scale "Radius" 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f (sense.value + 12) fcx.value fcy.value r.value 0 0; } } } } New_gaussian_item = class Menupullright "_Gaussian Fourier Mask" "make various Gaussian Fourier filter masks" { High_low_item = class Menuaction "_High or Low Pass" ("make a mask image for a highpass/lowpass " ++ "Gaussian Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f (sense.value + 4) fc.value ac.value 0 0 0; } } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" ("make a mask image for an ring pass/reject " ++ "Gaussian Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; rw = Scale "Ring width" 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f (sense.value + 10) fc.value rw.value ac.value 0 0; } } } Band_item = class Menuaction "_Band Pass or Band Reject" ("make a mask image for a band pass/reject " ++ "Gaussian Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fcx = Scale "Horizontal frequency cutoff" 0.01 0.99 0.5; fcy = Scale "Vertical frequency cutoff" 0.01 0.99 0.5; r = Scale "Radius" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f (sense.value + 16) fcx.value fcy.value r.value ac.value 0; } } } } New_butterworth_item = class Menupullright "_Butterworth Fourier Mask" "make various Butterworth Fourier filter masks" { High_low_item = class Menuaction "_High or Low Pass" ("make a mask image for a highpass/lowpass " ++ "Butterworth Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; order = Scale "Order" 1 10 2; _result = build param (to_real nsize) { param f = f (sense.value + 2) order.value fc.value ac.value 0 0; } } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" ("make a mask image for an ring pass/reject " ++ "Butterworth Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; rw = Scale "Ring width" 0.01 0.99 0.5; order = Scale "Order" 1 10 2; _result = build param (to_real nsize) { param f = f (sense.value + 8) order.value fc.value rw.value ac.value 0; } } } Band_item = class Menuaction "_Band Pass or Band Reject" ("make a mask image for a band pass/reject " ++ "Butterworth Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fcx = Scale "Horizontal frequency cutoff" 0.01 0.99 0.5; fcy = Scale "Vertical frequency cutoff" 0.01 0.99 0.5; r = Scale "Radius" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; order = Scale "Order" 1 10 2; _result = build param (to_real nsize) { param f = f (sense.value + 14) order.value fcx.value fcy.value r.value ac.value; } } } } } Test_images_item = class Menupullright "Test I_mages" "make a variety of test images" { Eye_item = class Menuaction "_Spatial Response" "image for testing the eye's spatial response" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; factor = Scale "Factor" 0.001 1 0.2; _result = Image (im_eye (to_real nwidth) (to_real nheight) factor.value); } } Zone_plate = class Menuaction "_Zone Plate" "make a zone plate" { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; _result = Image (im_zone (to_real nsize)); } } Frequency_test_chart_item = class Menuaction "_Frequency Testchart" "make a black/white frequency test pattern" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; sheight = Expression "Strip height (pixels)" 10; waves = Expression "Wavelengths" [64, 32, 16, 8, 4, 2]; _result = imagearray_assemble 0 0 (transpose [strips]) { freq_slice wave = Image (sin (grey / wave) > 0); strips = map freq_slice waves.expr; grey = im_fgrey (to_real nwidth) (to_real sheight) * 360 * (to_real nwidth); } } } CRT_test_chart_item = class Menuaction "CRT _Phosphor Chart" "make an image for measuring phosphor colours" { action = class _result { _vislevel = 3; brightness = Scale "Brightness" 0 255 200; psize = Expression "Patch size (pixels)" 32; _result = Image (imagearray_assemble 0 0 [[green, red], [blue, white]]) { black = image_new (to_real psize) (to_real psize) 1 Image_format.FLOAT Image_coding.NOCODING Image_type.B_W 0 0 0; notblack = black + brightness; green = black ++ notblack ++ black; red = notblack ++ black ++ black; blue = black ++ black ++ notblack; white = notblack ++ notblack ++ notblack; } } } Greyscale_chart_item = class Menuaction "_Greyscale" "make a greyscale" { action = class _result { _vislevel = 3; pwidth = Expression "Patch width" 8; pheight = Expression "Patch height" 8; npatches = Expression "Number of patches" 16; _result = Image (image_set_type Image_type.B_W (clip2fmt Image_format.UCHAR wedge)) { wedge = 255 / (to_real npatches - 1) * (int) (strip?0 / to_real pwidth) { strip = make_xy (to_real pwidth * to_real npatches) pheight; } } } } CMYK_test_chart_item = class Menuaction "_CMYK Wedges" "make a set of CMYK wedges" { action = class _result { _vislevel = 3; pwidth = Expression "Patch width" 8; pheight = Expression "Patch height" 8; npatches = Expression "Number of patches" 16; _result = Image (image_set_type Image_type.CMYK (clip2fmt Image_format.UCHAR strips)) { wedge = 255 / (to_real npatches - 1) * (int) (strip?0 / to_real pwidth) { strip = make_xy (to_real pwidth * to_real npatches) pheight; } black = wedge * 0; C = wedge ++ black ++ black ++ black; M = black ++ wedge ++ black ++ black; Y = black ++ black ++ wedge ++ black; K = black ++ black ++ black ++ wedge; strips = imagearray_assemble 0 0 [[C],[M],[Y],[K]]; } } } Colour_atlas_item = class Menuaction "_Colour Atlas" "make a grid of patches grouped around a colour" { action = class _result { _vislevel = 3; start = Colour_picker "Lab" [50,0,0]; nstep = Expression "Number of steps" 9; ssize = Expression "Step size" 10; psize = Expression "Patch size" 32; sepsize = Expression "Separator size" 4; _result = colour_transform_to (get_type start) blocks''' { size = (to_real nstep * 2 + 1) * to_real psize - to_real sepsize; xy = make_xy size size; xy_grid = (xy % to_real psize) < (to_real psize - to_real sepsize); grid = xy_grid?0 & xy_grid?1; blocks = (int) (to_real ssize * ((int) (xy / to_real psize))); lab_start = colour_transform_to Image_type.LAB start; blocks' = blocks - to_real nstep * to_real ssize + Vector (tl lab_start.value); blocks'' = hd lab_start.value ++ Image blocks'; blocks''' = image_set_type Image_type.LAB blocks'', Image grid = 0; } } } } nip2-8.7.0/share/nip2/start/_list.def0000644000175000017500000002310313224651032014215 00000000000000/* any l: or all the elements of list l together * * any (map (equal 0) list) == true, if any element of list is zero. * any :: [bool] -> bool */ any = foldr logical_or false; /* all l: and all the elements of list l together * * all (map (==0) list) == true, if every element of list is zero. * all :: [bool] -> bool */ all = foldr logical_and true; /* concat l: join a list of lists together * * concat ["abc","def"] == "abcdef". * concat :: [[*]] -> [*] */ concat l = foldr join [] l; /* delete eq x l: delete the first x from l * * delete equal 'b' "abcdb" == "acdb" * delete :: (* -> bool) -> * -> [*] -> [*] */ delete eq a l = [], l == [] = y, eq a b = b : delete eq a y { b:y = l; } /* difference eq a b: delete b from a * * difference equal "asdf" "ad" == "sf" * difference :: (* -> bool) -> [*] -> [*] -> [*] */ difference = foldl @ converse @ delete; /* drop n l: drop the first n elements from list l * * drop 3 "abcd" == "d" * drop :: num -> [*] -> [*] */ drop n l = l, n <= 0 || l == [] = drop (n - 1) (tl l); /* dropwhile fn l: drop while fn is true * * dropwhile is_digit "1234pigs" == "pigs" * dropwhile :: (* -> bool) -> [*] -> [*] */ dropwhile fn l = [], l == [] = dropwhile fn x, fn a = l { a:x = l; } /* extract n l: extract element at index n from list l */ extract = converse subscript; /* filter fn l: return all elements of l for which predicate fn holds * * filter is_digit "1one2two3three" = "123" * filter :: (* -> bool) -> [*] -> [*] */ filter fn l = foldr addif [] l { addif x l = x : l, fn x; = l; } /* flatten x: flatten a list of lists of things into a simple list * * flatten :: [[*]] -> [*] */ flatten x = foldr flat [] x, is_list x = x { flat x sofar = foldr flat sofar x, is_list x = x : sofar; } /* foldl fn st l: fold list l from the left with function fn and start st * * Start from the left hand end of the list (unlike foldr, see below). * foldl is less useful (and much slower). * * foldl fn start [a,b .. z] = ((((st fn a) fn b) ..) fn z) * foldl :: (* -> ** -> *) -> * -> [**] -> * */ foldl fn st l = st, l == [] = foldl fn (fn st x) xs { x:xs = l; } /* foldl1 fn l: like foldl, but use the 1st element as the start value * * foldl1 fn [1,2,3] == ((1 fn 2) fn 3) * foldl1 :: (* -> * -> *) -> [*] -> * */ foldl1 fn l = [], l == [] = foldl fn x xs { x:xs = l; } /* foldr fn st l: fold list l from the right with function fn and start st * * foldr fn st [a,b..z] = (a fn (b fn (.. (z fn st)))) * foldr :: (* -> ** -> **) -> ** -> [*] -> ** */ foldr fn st l = st, l == [] = fn x (foldr fn st xs) { x:xs = l; } /* foldr1 fn l: like foldr, but use the last element as the start value * * foldr1 fn [1,2,3,4] == (1 fn (2 fn (3 fn 4))) * foldr1 :: (* -> * -> *) -> [*] -> * */ foldr1 fn l = [], l == [] = x, xs == [] = fn x (foldr1 fn xs) { x:xs = l; } /* Search a list for an element, returning its index (or -1) * * index (equal 12) [13,12,11] == 1 * index :: (* -> bool) -> [*] -> real */ index fn list = search list 0 { search l n = -1, l == [] = n, fn x = search xs (n + 1) { x:xs = l; } } /* init l: remove last element of list l * * The dual of tl. * init [1,2,3] == [1,2] * init :: [*] -> [*] */ init l = error "init of []", l == []; = [], tl l == []; = x : init xs { x:xs = l; } /* iterate f x: repeatedly apply f to x * * return the infinite list [x, f x, f (f x), ..]. * iterate (multiply 2) 1 == [1, 2, 4, 8, 16, 32, 64 ... ] * iterate :: (* -> *) -> * -> [*] */ iterate f x = x : iterate f (f x); /* join_sep sep l: join a list with a separator * * join_sep ", " (map print [1 .. 4]) == "1, 2, 3, 4" * join_sep :: [*] -> [[*]] -> [*] */ join_sep sep l = foldl1 fn l { fn a b = a ++ sep ++ b; } /* last l: return the last element of list l * * The dual of hd. last [1,2,3] == 3 * last :: [*] -> [*] */ last l = error "last of []", l == [] = x, xs == [] = last xs { x:xs = l; } /* len l: length of list l * (see also is_list_len and friends in predicate.def) * * len :: [*] -> num */ len l = 0, l == [] = 1 + len (tl l); /* limit l: return the first element of l which is equal to its predecessor * * useful for checking for convergence * limit :: [*] -> * */ limit l = error "incorrect use of limit", l == [] || tl l == [] || tl (tl l) == [] = a, a == b = limit (b : x) { a:b:x = l; } /* Turn a function of n args into a function which takes a single arg of an * n-element list. */ list_1ary fn x = fn x?0; list_2ary fn x = fn x?0 x?1; list_3ary fn x = fn x?0 x?1 x?2; list_4ary fn x = fn x?0 x?1 x?2 x?3; list_5ary fn x = fn x?0 x?1 x?2 x?3 x?4; list_6ary fn x = fn x?0 x?1 x?2 x?3 x?4 x?5; list_7ary fn x = fn x?0 x?1 x?2 x?3 x?4 x?5 x?6; /* map fn l: map function fn over list l * * map :: (* -> **) -> [*] -> [**] */ map f l = [], l == []; = f (hd l) : map f (tl l); /* map2 fn l1 l2: map two lists together with fn * * map2 :: (* -> ** -> ***) -> [*] -> [**] -> [***] */ map2 fn l1 l2 = map (list_2ary fn) (zip2 l1 l2); /* map3 fn l1 l2 l3: map three lists together with fn * * map3 :: (* -> ** -> *** -> ****) -> [*] -> [**] -> [***] -> [****] */ map3 fn l1 l2 l3 = map (list_3ary fn) (zip3 l1 l2 l3); /* member l x: true if x is a member of list l * * is_digit == member "0123456789" * member :: [*] -> * -> bool */ member l x = any (map (equal x) l); /* merge b l r: merge two lists based on a bool list * * merge :: [bool] -> [*] -> [*] -> [*] */ merge p l r = [], p == [] || l == [] || r == [] = a : merge z x y, c = b : merge z x y { a:x = l; b:y = r; c:z = p; } /* mkset eq l: remove duplicates from list l using equality function * * mkset :: (* -> bool) -> [*] -> [*] */ mkset eq l = [], l == [] = a : filter (not @ eq a) (mkset eq x) { a:x = l; } /* postfix l r: add r to the end of list l * * The dual of ':'. * postfix :: [*] -> ** -> [*,**] */ postfix l r = l ++ [r]; /* repeat x: make an infinite list of xes * * repeat :: * -> [*] */ repeat x = map (const x) [1..]; /* replicate n x: make n copies of x in a list * * replicate :: num -> * -> [*] */ replicate n x = take n (repeat x); /* reverse l: reverse list l * * reverse :: [*] -> [*] */ reverse l = foldl (converse cons) [] l; /* scanl fn st l: apply (foldl fn r) to every initial segment of a list * * scanl add 0 [1,2,3] == [1,3,6] * scanl :: (* -> ** -> *) -> * -> [**] -> [*] */ scanl fn st l = st, l == [] = st' : scanl fn st' xs { x:xs = l; st' = fn st x; } /* sort l: sort list l into ascending order * * sort :: [*] -> [*] */ sort l = sortc less_equal l; /* sortc comp l: sort list l into order using a comparision function * * Uses merge sort (n log n behaviour) * sortc :: (* -> * -> bool) -> [*] -> [*] */ sortc comp l = l, n <= 1 = merge (sortc comp (take n2 l)) (sortc comp (drop n2 l)) { n = len l; n2 = (int) (n / 2); /* merge l1 l2: merge sorted lists l1 and l2 to make a single * sorted list */ merge l1 l2 = l2, l1 == [] = l1, l2 == [] = a : merge x (b : y), comp a b = b : merge (a : x) y { a:x = l1; b:y = l2; } } /* sortpl pl l: sort by a list of predicates * * sortpl :: (* -> bool) -> [*] -> [*] */ sortpl pl l = sortc (test pl) l { /* Comparision function ... put true before false, if equal move on to * the next predicate. */ test pl a b = true, pl == [] = ta, ta != tb = test (tl pl) a b { ta = pl?0 a; tb = pl?0 b; } } /* sortr l: sort list l into descending order * * sortr :: [*] -> [*] */ sortr l = sortc more l; /* split fn l: break a list into sections separated by many fn * * split is_space " hello world " == ["hello", "world"] * split is_space " " == [] * split :: (* -> bool) -> [*] -> [[*]] */ split fn l = [], l == [] || l' == [] = head : split fn tail { nfn = not @ fn; l' = dropwhile fn l; head = takewhile nfn l'; tail = dropwhile nfn l'; } /* splits fn l: break a list into sections separated by a single fn * * split (equal ',') ",,1" == ["", "", "1"] * split :: (* -> bool) -> [*] -> [[*]] */ splits fn l = [], l == [] = head : splits fn tail { fn' = not @ fn; dropif x = [], x == [] = tl x; head = takewhile fn' l; tail = dropif (dropwhile fn' l); } /* splitpl fnl l: split a list up with a list of predicates * * splitpl [is_digit, is_letter, is_digit] "123cat" == ["123", "cat", []] * splitpl :: [* -> bool] -> [*] -> [[*]] */ splitpl fnl l = l, fnl == [] = head : splitpl (tl fnl) tail { head = takewhile (hd fnl) l; tail = dropwhile (hd fnl) l; } /* split_lines n l: split a list into equal length lines * * split_lines 4 "1234567" == ["1234", "567"] * splitl :: int -> [*] -> [[*]] */ split_lines n l = [], l == [] = take n l : split_lines n (drop n l); /* take n l: take the first n elements from list l * take :: num -> [*] -> [*] */ take n l = [], n <= 0 = [], l == [] = hd l : take (n-1) (tl l); /* takewhile fn l: take from the front of a list while predicate fn holds * * takewhile is_digit "123onetwothree" == "123" * takewhile :: (* -> bool) -> [*] -> [*] */ takewhile fn l = [], l == [] = hd l : takewhile fn (tl l), fn (hd l) = []; /* zip2 l1 l2: zip two lists together * * zip2 [1,2] ['a', 'b', 'c'] == [[1,'a'],[2,'b']] * zip2 :: [*] -> [**] -> [[*,**]] */ zip2 l1 l2 = [], l1 == [] || l2 == [] = [hd l1, hd l2] : zip2 (tl l1) (tl l2); /* zip3 l1 l2 l3: zip three lists together * * zip3 [1,2] ['a', 'b', 'c'] [true] == [[1,'a',true]] * zip3 :: [*] -> [**] ->[***] -> [[*,**,***]] */ zip3 l1 l2 l3 = [], l1 == [] || l2 == [] || l3 == [] = [hd l1, hd l2, hd l3] : zip3 (tl l1) (tl l2) (tl l3); nip2-8.7.0/share/nip2/start/_magick.def0000644000175000017500000005322113224651032014501 00000000000000/* ImageMagick operations edited by Alan Gibson (aka "snibgo"; snibgo at earthling dot net). 1-Apr-2014 Minor corrections to Geometry_widget and Alpha. Added loads of widgets and Menuactions. Not fully tested. 5-Apr-2014 Many more menu actions. Reorganised Magick menu. 10-Apr-2014 Many more menu actions. 11-Apr-2014 jcupitt Split to separate _magick.def Add 0-ary and 2-ary system Put utility funcs into a Magick class 11-Apr-2014 snibgo Added VirtualPixelBack for cases where background is only relevant when VP=Background 17-Apr-2014 snibgo Many small changes. 2-May-2014 jcupitt Added Magick.version 30-June-2014 Put single-quotes around command exe to help win 1-July-2014 Automatically fall back to gm if we can't find convert 17-July-2014 better GM support Last update: 17-July-2014. For details of ImageMagick operations, see http://www.imagemagick.org/script/command-line-options.php etc. */ /* Put these in a class to avoid filling the main namespace with IM stuff. */ Magick = class { // first gm on path, or "" gm_path = search_for "gm"; // first convert on $PATH, or "" // we check for the convert we ship first convert_path = vips_convert, vips_convert != "" = search_for "convert" { // the convert we ship with the vips binary on some platforms, or "" vips_convert = search (path_absolute convert) { vipshome = path_parse (expand "$VIPSHOME"); convert = vipshome ++ ["bin", "convert" ++ expand "$EXEEXT"]; } } use_gm_pref = Workspaces.Preferences.USE_GRAPHICSMAGICK; // Are we in GM or IM mode? use_gm = true, use_gm_pref && gm_path != "" = false, !use_gm_pref && convert_path != "" = false, convert_path != "" = true, gm_path != "" = error "neither IM nor GM executable found"; command_path = gm_path, use_gm = convert_path; // try to get the version as eg. [6, 7, 7, 10] // GM versions are smaller, typically [1, 3, 18] version = map parse_int (split (member ".-") version_string) { [output] = vips_call "system" ["'" ++ command_path ++ "' -version"] [$log=>true]; version_string = (split (equal ' ') output)?1, use_gm = (split (equal ' ') output)?2; } // make a command-line ... args is a [str] we join with spaces command args = "'" ++ command_path ++ "' " ++ join_sep " " args' { args' = ["convert"] ++ args, use_gm = args; } // capabilities ... different versions support different features, we // turn features on and off based on these // would probably be better to test for caps somehow has_intensity = false, use_gm = version?0 > 6 || version?1 > 7; has_channel = false, use_gm = version?0 > 6 || version?1 > 7; system0 cmd = system_image0 cmd; system cmd x = map_unary (system_image cmd) x; system2 cmd x y = map_binary (system_image2 cmd) x y; system3 cmd x y z = map_trinary (system_image3 cmd) x y z; radius_widget = Scale "Radius" 0 100 10; sigma_widget = Scale "Sigma" 0.1 10 1; angle_widget = Scale "Angle (degrees)" (-360) 360 0; text_widget = String "Text to draw" "AaBbCcDdEe"; gamma_widget = Scale "Gamma" 0 10 1; colors_widget = Scale "Colors" 1 10 3; resize_widget = Scale "Resize (percent)" 0 500 100; fuzz_widget = Scale "Fuzz (percent)" 0 100 0; blur_rad_widget = Scale "Radius (0=auto)" 0 100 0; // a colour with no enclosing quotes ... use this if we know there are // some quotes at an outer level print_colour_nq triple = concat ["#", concat (map fmt triple)] { fmt x = reverse (take 2 (reverse (print_base 16 (x + 256)))); } // we need the quotes because # is the comment character in *nix print_colour triple = "\"" ++ print_colour_nq triple ++ "\""; Foreground triple = class Colour "sRGB" triple { _flag = "-fill " ++ print_colour triple; Colour_edit space triple = this.Foreground triple; } foreground_widget = Foreground [0, 0, 0]; GeneralCol triple = class Colour "sRGB" triple { _flag = print_colour_nq triple; Colour_edit space triple = this.GeneralCol triple; } generalcol_widget = GeneralCol [0, 0, 0]; Background triple = class Colour "sRGB" triple { isNone = Toggle "None (transparent black)" false; _flag = "-background " ++ if isNone then "None" else print_colour triple; Colour_edit space triple = this.Background triple; } background_widget = Background [255, 255, 255]; Bordercol triple = class Colour "sRGB" triple { _flag = "-bordercolor " ++ print_colour triple; Colour_edit space triple = this.Bordercol triple; } bordercol_widget = Bordercol [0, 0, 0]; Mattecol triple = class Colour "sRGB" triple { _flag = "-mattecolor " ++ print_colour triple; Colour_edit space triple = this.Mattecol triple; } mattecol_widget = Mattecol [189, 189, 189]; // FIXME: Undercolour, like many others, can have alpha channel. // How does user input this? With a slider? Undercol triple = class Colour "sRGB" triple { isNone = Toggle "None (transparent black)" true; _flag = if isNone then "" else ("-undercolor " ++ print_colour triple); Colour_edit space triple = this.Undercol triple; } undercol_widget = Undercol [0, 0, 0]; changeCol_widget = class { _vislevel = 3; colour = GeneralCol [0, 0, 0]; fuzz = fuzz_widget; nonMatch = Toggle "change non-matching colours" false; } Alpha alpha = class Option_string "Alpha" [ "On", "Off", "Set", "Opaque", "Transparent", "Extract", "Copy", "Shape", "Remove", "Background" ] alpha { _flag = "-alpha " ++ alpha; Option_edit caption labels value = this.Alpha labels?value; } alpha_widget = Alpha "On"; Antialias value = class Toggle "Antialias" value { _flag = "-antialias", value = "+antialias"; Toggle_edit caption value = this.Antialias value; } antialias_widget = Antialias true; Builtin builtin = class Option_string "Builtin" [ // See http://www.imagemagick.org/script/formats.php "rose:", "logo:", "wizard:", "granite:", "netscape:" ] builtin { _flag = builtin; Option_edit caption labels value = this.Builtin labels?value; } builtin_widget = Builtin "rose:"; channels_widget = class { // FIXME? Can we grey-out alpha when we have no alpha channel, // show CMY(K) instead of RGB(K) etc? // Yes, perhaps we can create different widgets for RGB, RGBA, CMY, CMYK, CMYA, CMYKA. ChanR valueR = class Toggle "Red" valueR { _flag = "R", valueR = ""; Toggle_edit caption valueR = this.ChanR valueR; } channelR = ChanR true; ChanG valueG = class Toggle "Green" valueG { _flag = "G", valueG = ""; Toggle_edit caption valueG = this.ChanG valueG; } channelG = ChanG true; ChanB valueB = class Toggle "Blue" valueB { _flag = "B", valueB = ""; Toggle_edit caption valueB = this.ChanB valueB; } channelB = ChanB true; ChanK valueK = class Toggle "Black" valueK { _flag = "K", valueK = ""; Toggle_edit caption valueK = this.ChanK valueK; } channelK = ChanK true; ChanA valueA = class Toggle "Alpha" valueA { _flag = "A", valueA = ""; Toggle_edit caption valueA = this.ChanA valueA; } channelA = ChanA false; ChanSy valueSy = class Toggle "Sync" valueSy { _flag = ",sync", valueSy = ""; Toggle_edit caption valueSy = this.ChanSy valueSy; } channelSy = ChanSy true; _rgbka = concat [channelR._flag, channelG._flag, channelB._flag, channelK._flag, channelA._flag ]; _flag = "", _rgbka == "" || !has_channel = concat [ "-channel ", _rgbka, channelSy._flag ]; } ch_widget = channels_widget; Colorspace colsp = class Option_string "Colorspace" [ "CIELab", "CMY", "CMYK", "Gray", "HCL", "HCLp", "HSB", "HSI", "HSL", "HSV", "HWB", "Lab", "LCH", "LCHab", "LCHuv", "LMS", "Log", "Luv", "OHTA", "Rec601Luma", "Rec601YCbCr", "Rec709Luma", "Rec709YCbCr", "RGB", "scRGB", "sRGB", "Transparent", "XYZ", "YCbCr", "YDbDr", "YCC", "YIQ", "YPbPr", "YUV" ] colsp { _flag = colsp; Option_edit caption labels value = this.Colorspace labels?value; } colorspace_widget = Colorspace "sRGB"; Compose comp = class Option_string "Compose method" [ "Atop", "Blend", "Blur", "Bumpmap", "ChangeMask", "Clear", "ColorBurn", "ColorDodge", "Colorize", "CopyBlack", "CopyBlue", "CopyCyan", "CopyGreen", "Copy", "CopyMagenta", "CopyOpacity", "CopyRed", "CopyYellow", "Darken", "DarkenIntensity", "DivideDst", "DivideSrc", "Dst", "Difference", "Displace", "Dissolve", "Distort", "DstAtop", "DstIn", "DstOut", "DstOver", "Exclusion", "HardLight", "Hue", "In", "Lighten", "LightenIntensity", "LinearBurn", "LinearDodge", "LinearLight", "Luminize", "Mathematics", "MinusDst", "MinusSrc", "Modulate", "ModulusAdd", "ModulusSubtract", "Multiply", "None", "Out", "Overlay", "Over", "PegtopLight", "PinLight", "Plus", "Replace", "Saturate", "Screen", "SoftLight", "Src", "SrcAtop", "SrcIn", "SrcOut", "SrcOver", "VividLight", "Xor" ] comp { _flag = "-compose " ++ comp; Option_edit caption labels value = this.Compose labels?value; } compose_widget = Compose "Over"; // FIXME: Some compose mehods (Displace, Distort, Mathematics) need a string. // FIXME: we could use a class that does both -compose and -intensity, for methods LightenIntensity, DarkenIntensity, CopyOpacity, CopyBlack coordinate_widget = class { _vislevel = 3; x = Expression "X" 0; y = Expression "Y" 0; _flag = concat [print x.expr, ",", print y.expr]; }; Distort distort = class Option_string "Distort" [ "Affine", "AffineProjection", "ScaleRotateTranslate", "SRT", "Perspective", "PerspectiveProjection", "BilinearForward", "BilinearReverse", "Polynomial", "Arc", "Polar", "DePolar", "Barrel", "BarrelInverse", "Shepards", "Resize" ] distort { _flag = distort; Option_edit caption labels value = this.Distort labels?value; } distort_widget = Distort "SRT"; Dither dither = class Option_string "Dither" [ "None", "FloydSteinberg", "Riemersma" ] dither { _flag = "-dither " ++ dither; Option_edit caption labels value = this.Dither labels?value; } dither_widget = Dither "FloydSteinberg"; Evaluate eval = class Option_string "Evaluate operation" [ "Abs", "Add", "AddModulus", "And", "Cos", "Cosine", "Divide", "Exp", "Exponential", "GaussianNoise", "ImpulseNoise", "LaplacianNoise", "LeftShift", "Log", "Max", "Mean", "Median", "Min", "MultiplicativeNoise", "Multiply", "Or", "PoissonNoise", "Pow", "RightShift", "Set", "Sin", "Sine", "Subtract", "Sum", "Threshold", "ThresholdBlack", "ThresholdWhite", "UniformNoise", "Xor" ] eval { _flag = "-evaluate " ++ eval; Option_edit caption labels value = this.Evaluate labels?value; } evaluate_widget = Evaluate "Add"; Filter filt = class Option_string "Filter" [ "default", "Bartlett", "Blackman", "Bohman", "Box", "Catrom", "Cosine", "Cubic", "Gaussian", "Hamming", "Hann", "Hermite", "Jinc", "Kaiser", "Lagrange", "Lanczos", "Lanczos2", "Lanczos2Sharp", "LanczosRadius", "LanczosSharp", "Mitchell", "Parzen", "Point", "Quadratic", "Robidoux", "RobidouxSharp", "Sinc", "SincFast", "Spline", "Triangle", "Welch" ] filt { _flag = if filt == "default" then "" else "-filter " ++ filt; Option_edit caption labels value = this.Filter labels?value; } filter_widget = Filter "default"; Function func = class Option_string "Function" [ "Polynomial", "Sinusoid", "Arcsin", "Arctan" ] func { _flag = func; Option_edit caption labels value = this.Function labels?value; } function_widget = Function "Polynomial"; // "Polynomial (a[n], a[n-1], ... a[1], a[0])", // "Sinusoid (freq, phase, amp, bias)", // "Arcsin (width, centre, range, bias)", // "Arctan (slope, centre, range, bias)" Gravity gravity = class Option_string "Gravity" [ "None", "Center", "East", "Forget", "NorthEast", "North", "NorthWest", "SouthEast", "South", "SouthWest", "West", "Static" ] gravity { _flag = "-gravity " ++ gravity; Option_edit caption labels value = this.Gravity labels?value; } gravity_widget = Gravity "Center"; ImageType imagetype = class Option_string "Image type" [ "Bilevel", "ColorSeparation", "ColorSeparationAlpha", "ColorSeparationMatte", "Grayscale", "GrayscaleAlpha", "GrayscaleMatte", "Optimize", "Palette", "PaletteBilevelAlpha", "PaletteBilevelMatte", "PaletteAlpha", "PaletteMatte", "TrueColorAlpha", "TrueColorMatte", "TrueColor" ] imagetype { _flag = "-type " ++ imagetype; Option_edit caption labels value = this.ImageType labels?value; } imagetype_widget = ImageType "TrueColor"; Intensity intensity = class Option_string "Intensity (gray conversion)" [ "Average", "Brightness", "Lightness", "MS", "Rec601Luma", "Rec601Luminance", "Rec709Luma", "Rec709Luminance", "RMS" ] intensity { _flag = "-intensity " ++ intensity, has_intensity = ""; Option_edit caption labels value = this.Intensity labels?value; } intensity_widget = Intensity "Rec709Luminance"; Interpolate interp = class Option_string "Interpolate" [ "default", "Average", "Average4", "Average9", "Average16", "Background", "Bilinear", "Blend", "Integer", "Mesh", "Nearest", "NearestNeighbor", "Spline" ] interp { _flag = if interp == "default" then "" else "-interpolate " ++ interp; Option_edit caption labels value = this.Interpolate labels?value; } interpolate_widget = Interpolate "default"; Kernel kernel = class Option_string "Kernel" [ "Unity", "Gaussian", "DoG", "LoG", "Blur", "Comet", "Binomial", "Laplacian", "Sobel", "FreiChen", "Roberts", "Prewitt", "Compass", "Kirsch", "Diamond", "Square", "Rectangle", "Disk", "Octagon", "Plus", "Cross", "Ring", "Peaks", "Edges", "Corners", "Diagonals", "LineEnds", "LineJunctions", "Ridges", "ConvexHull", "ThinSe", "Skeleton", "Chebyshev", "Manhattan", "Octagonal", "Euclidean" // FIXME: custom kernel ] kernel { _flag = kernel; Option_edit caption labels value = this.Kernel labels?value; } kernel_widget = Kernel "Unity"; ModColSp msp = class Option_string "modulate colorspace" [ "HCL", "HCLp", "HSB", "HSI", "HSL", "HSV", "HWB", "LCH" ] msp { _flag = "-set option:modulate:colorspace " ++ msp; Option_edit caption labels value = this.ModColSp labels?value; } ModColSp_widget = ModColSp "HSL"; MorphMeth morph = class Option_string "Method" [ "Correlate", "Convolve", "Dilate", "Erode", "Close", "Open", "DilateIntensity", "ErodeIntensity", "CloseIntensity", "OpenIntensity", "Smooth", "EdgeOut", "EdgeIn", "Edge", "TopHat", "BottomHat", "HitAndMiss", "Thinning", "Thicken", "Distance", "IterativeDistance" ] morph { _flag = morph; Option_edit caption labels value = this.MorphMeth labels?value; } morphmeth_widget = MorphMeth "Dilate"; Noise noise = class Option_string "Noise" [ "Gaussian", "Impulse", "Laplacian", "Multiplicative", "Poisson", "Random", "Uniform" ] noise { _flag = "+noise " ++ noise; Option_edit caption labels value = this.Noise labels?value; } noise_widget = Noise "Gaussian"; Pattern pattern = class Option_string "Noise" [ // See http://www.imagemagick.org/script/formats.php "bricks", "checkerboard", "circles", "crosshatch", "crosshatch30", "crosshatch45", "gray0", "gray5", "gray10", "gray15", "gray20", "gray25", "gray30", "gray35", "gray40", "gray45", "gray50", "gray55", "gray60", "gray65", "gray70", "gray75", "gray80", "gray85", "gray90", "gray95", "gray100", "hexagons", "horizontal", "horizontal2", "horizontal3", "horizontalsaw", "hs_bdiagonal", "hs_cross", "hs_diagcross", "hs_fdiagonal", "hs_horizontal", "hs_vertical", "left30", "left45", "leftshingle", "octagons", "right30", "right45", "rightshingle", "smallfishscales", "vertical", "vertical2", "vertical3", "verticalbricks", "verticalleftshingle", "verticalrightshingle", "verticalsaw" ] pattern { _flag = "pattern:" ++ pattern; Option_edit caption labels value = this.Pattern labels?value; } pattern_widget = Pattern "bricks"; ResizeType resizet = class Option_string "Resize type" [ "resize", "scale", "sample", "adaptive-resize" ] resizet { _flag = resizet; Option_edit caption labels value = this.ResizeType labels?value; } ResizeType_widget = ResizeType "resize"; Size_widget = class { _vislevel = 3; width = Expression "Width (pixels)" 64; height = Expression "Height (pixels)" 64; _flag = "-size " ++ print width.expr ++ "x" ++ print height.expr; }; StatType statt = class Option_string "Statistic type" [ "Gradient", "Maximum", "Mean", "Median", "Minimum", "Mode", "Nonpeak", "StandardDeviation" ] statt { _flag = statt; Option_edit caption labels value = this.StatType labels?value; } StatType_widget = StatType "Mean"; VirtualPixel vp = class Option_string "Virtual pixel" [ "Background", "Black", "CheckerTile", "Dither", "Edge", "Gray", "HorizontalTile", "HorizontalTileEdge", "Mirror", "None", "Random", "Tile", "Transparent", "VerticalTile", "VerticalTileEdge", "White" ] vp { _flag = "-virtual-pixel " ++ vp; _isBackground = (vp == "Background"); Option_edit caption labels value = this.VirtualPixel labels?value; } VirtualPixel_widget = VirtualPixel "Edge"; VirtualPixelBack_widget = class { virtpix = Magick.VirtualPixel_widget; background = Magick.background_widget; _flag = (if virtpix._isBackground then (background._flag ++ " ") else "") ++ virtpix._flag; } Geometry_widget = class { _vislevel = 3; x = Expression "X" 0; y = Expression "Y" 0; hoffset = Expression "Horizontal offset" 0; voffset = Expression "Vertical offset" 0; _flag = concat [print x.expr, "x", print y.expr, format hoffset, format voffset] { // print an offset ... we want '+' in front of +ve strings format offset = concat ["+", print offset.expr], offset.expr >= 0 = print offset.expr; } }; AnnotGeometry_widget = class { _vislevel = 3; shearX = Expression "shear X (degrees)" 0; shearY = Expression "shear Y (degrees)" 0; hoffset = Expression "Horizontal offset" 0; voffset = Expression "Vertical offset" 0; _flag = concat [print shearX.expr, "x", print shearY.expr, format hoffset, format voffset] { // print an offset ... we want '+' in front of +ve strings format offset = concat ["+", print offset.expr], offset.expr >= 0 = print offset.expr; } }; OffsetGeometry_widget = class { _vislevel = 3; hoffset = Expression "Horizontal offset" 0; voffset = Expression "Vertical offset" 0; _flag = concat [format hoffset, format voffset] { // print an offset ... we want '+' in front of +ve strings format offset = concat ["+", print offset.expr], offset.expr >= 0 = print offset.expr; } }; WhxyGeometry_widget = class { _vislevel = 3; x = Expression "Width" 0; y = Expression "Height" 0; hoffset = Expression "Horizontal offset" 0; voffset = Expression "Vertical offset" 0; _flag = concat [print x.expr, "x", print y.expr, format hoffset, format voffset] { // print an offset ... we want '+' in front of +ve strings format offset = concat ["+", print offset.expr], offset.expr >= 0 = print offset.expr; } }; FrameGeometry_widget = class { _vislevel = 3; x = Expression "Width" 0; y = Expression "Height" 0; outbev = Expression "Outer bevel thickness" 0; inbev = Expression "Inner bevel thickness" 0; _flag = concat [print x.expr, "x", print y.expr, format outbev, format inbev] { // print an offset ... we want '+' in front of +ve strings format offset = concat ["+", print offset.expr], offset.expr >= 0 = print offset.expr; } }; Font_widget = class { _vislevel = 3; family = Option_string "Family" [ "Arial", "ArialBlack", "AvantGarde", "BitstreamCharter", "Bookman", "CenturySchoolbook", "ComicSansMS", "Courier", "CourierNew", "DejaVuSans", "DejaVuSansMono", "DejaVuSerif", "Dingbats", "FreeMono", "FreeSans", "FreeSerif", "Garuda", "Georgia", "Helvetica", "HelveticaNarrow", "Impact", "LiberationMono", "LiberationSans", "LiberationSerif", "NewCenturySchlbk", "Palatino", "Purisa", "Symbol", "Times", "TimesNewRoman", "Ubuntu", "Verdana", "Webdings" ] "Arial"; style = Option_string "Style" [ "Any", "Italic", "Normal", "Oblique" ] "Normal"; weight = Scale "Weight" 1 800 400; size = Scale "Point size" 1 100 12; stretch = Option_string "Stretch" [ "Any", "Condensed", "Expanded", "ExtraCondensed", "ExtraExpanded", "Normal", "SemiCondensed", "SemiExpanded", "UltraCondensed", "UltraExpanded" ] "Normal"; _flag = join_sep " " [ "-family", family.item, "-weight", print weight.value, "-pointsize", print size.value, "-style", style.item, "-stretch", stretch.item]; } } nip2-8.7.0/share/nip2/start/_Object.def0000644000175000017500000002600513224651032014454 00000000000000/* Lots of little arg checks. Global for convenience. */ check_any = [(const true), _ "any"]; check_bool = [is_bool, _ "boolean"]; check_real = [is_real, _ "real"]; check_ureal = [is_ureal, _ "unsigned real"]; check_preal = [is_preal, _ "positive real"]; check_list = [is_list, _ "list"]; check_real_list = [is_real_list, _ "list of real"]; check_string = [is_string, _ "string"]; check_string_list = [is_string_list, _ "list of string"]; check_int = [is_int, _ "integer"]; check_uint = [is_uint, _ "unsigned integer"]; check_pint = [is_pint, _ "positive integer"]; check_matrix = [is_matrix, _ "rectangular array of real"]; check_matrix_display = [Matrix_display.is_display, _ "0|1|2|3"]; check_image = [is_image, _ "image"]; check_xy_list = [is_xy_list, _ "list of form [[1, 2], [3, 4], [5, 6], ...]"]; check_instance name = [is_instanceof name, name]; check_Image = check_instance "Image"; check_Matrix = [is_Matrix, _ "Matrix"]; check_colour_space = [is_colour_space, join_sep "|" Image_type.colour_spaces.names]; check_rectangular = [is_rectangular, _ "rectangular [[*]]"]; check_Guide = [is_Guide, _ "HGuide|VGuide"]; check_Colour = check_instance (_ "Colour"); check_Mark = check_instance (_ "Mark"); /* Check a set of args to a class. Two members to look at: _check_args and * _check_all. * * - each line in _check_args is [arg, "arg name", [test_fn, "arg type"]] * same number of lines as there are args * * stuff like "arg 2 must be real" * * - each line in _check_all is [test, "description"] * any number of lines * * stuff like "to must be greater than from" * * generate an error dialog with a helpful message on failure. * * Have as a separate function to try to keep the size of _Object down. */ check_args x = error message, badargs != [] || badalls != [] = x { argcheck = x._check_args; allcheck = x._check_all; // indent string indent = " "; // test for a condition in a check line fails test_fail x = ! x?0; // set of failed argcheck indexes badargs = map (extract 1) (filter test_fail (zip2 (map testarg argcheck) [0..])) { testarg x = x?2?0 x?0; } // set of failed allcheck indexes badalls = map (extract 1) (filter test_fail (zip2 (map hd allcheck) [0..])); // the error message message = _ "bad properties for " ++ "\"" ++ x.name ++ "\"\n" ++ argmsg ++ allmsg ++ "\n" ++ _ "where" ++ "\n" ++ arg_types ++ extra; // make the failed argcheck messages ... eg. ""value" should be // real, you passed " etc. argmsg = concat (map fmt badargs) { fmt n = indent ++ "\"" ++ argcheck?n?1 ++ "\"" ++ _ " should be of type " ++ argcheck?n?2?1 ++ ", " ++ _ "you passed" ++ ":\n" ++ indent ++ indent ++ print argcheck?n?0 ++ "\n"; } // make the failed allcheck messages ... eg "condition failed: // x < y" ... don't make a message if any typechecks have // failed, as we'll probably error horribly allmsg = [], badargs != [] = concat (map fmt badalls) ++ _ "you passed" ++ "\n" ++ concat (map fmt_arg argcheck) { fmt n = _ "condition failed" ++ ": " ++ allcheck?n?1 ++ "\n"; fmt_arg l = indent ++ l?1 ++ " = " ++ print l?0 ++ "\n"; } // make arg type notes arg_types = join_sep "\n" (map fmt argcheck) { fmt l = indent ++ l?1 ++ " is of type " ++ l?2?1; } // extra bit at the bottom, if we have any conditions extra = [], allcheck == [] = "\n" ++ _ "and" ++ "\n" ++ all_desc; // make a list of all the allcheck descriptions, with a few // spaces in front all_desc_list = map (join indent @ extract 1) allcheck; // join em up to make a set of condition notes all_desc = join_sep "\n" all_desc_list; } /* Operator overloading stuff. */ Operator_type = class { ARITHMETIC = 1; // eg. add RELATIONAL = 2; // eg. less COMPOUND = 3; // eg. max/mean/etc. COMPOUND_REWRAP = 4; // eg. transpose } Operator op_name fn type symmetric = class { } /* Form the converse of an Operator. */ oo_converse op = Operator (converse_name op.op_name) (converse op.fn) op.type op.symmetric { converse_name x = init x, last x == last "'" = x ++ "'"; } /* Given an operator name, look up the definition. */ oo_binary_lookup op_name = matches?0, matches != [] = error (_ "unknown binary operator" ++ ": " ++ print op_name) { operator_table = [ Operator "add" add Operator_type.ARITHMETIC true, Operator "subtract" subtract Operator_type.ARITHMETIC false, Operator "remainder" remainder Operator_type.ARITHMETIC false, Operator "power" power Operator_type.ARITHMETIC false, Operator "subscript" subscript Operator_type.ARITHMETIC false, Operator "left_shift" left_shift Operator_type.ARITHMETIC false, Operator "right_shift" right_shift Operator_type.ARITHMETIC false, Operator "divide" divide Operator_type.ARITHMETIC false, Operator "join" join Operator_type.ARITHMETIC false, Operator "multiply" multiply Operator_type.ARITHMETIC true, Operator "logical_and" logical_and Operator_type.ARITHMETIC true, Operator "logical_or" logical_or Operator_type.ARITHMETIC true, Operator "bitwise_and" bitwise_and Operator_type.ARITHMETIC true, Operator "bitwise_or" bitwise_or Operator_type.ARITHMETIC true, Operator "eor" eor Operator_type.ARITHMETIC true, Operator "comma" comma Operator_type.ARITHMETIC false, Operator "if_then_else" if_then_else Operator_type.ARITHMETIC false, Operator "equal" equal Operator_type.RELATIONAL true, Operator "not_equal" not_equal Operator_type.RELATIONAL true, Operator "less" less Operator_type.RELATIONAL false, Operator "less_equal" less_equal Operator_type.RELATIONAL false ]; matches = filter test_name operator_table; test_name x = x.op_name == op_name; } /* Given an operator name, look up a function that implements that * operator. */ oo_unary_lookup op_name = matches?0, matches != [] = error (_ "unknown unary operator" ++ ": " ++ print op_name) { operator_table = [ /* Operators. */ Operator "cast_signed_char" cast_signed_char Operator_type.ARITHMETIC false, Operator "cast_unsigned_char" cast_unsigned_char Operator_type.ARITHMETIC false, Operator "cast_signed_short" cast_signed_short Operator_type.ARITHMETIC false, Operator "cast_unsigned_short" cast_unsigned_short Operator_type.ARITHMETIC false, Operator "cast_signed_int" cast_signed_int Operator_type.ARITHMETIC false, Operator "cast_unsigned_int" cast_unsigned_int Operator_type.ARITHMETIC false, Operator "cast_float" cast_float Operator_type.ARITHMETIC false, Operator "cast_double" cast_double Operator_type.ARITHMETIC false, Operator "cast_complex" cast_complex Operator_type.ARITHMETIC false, Operator "cast_double_complex" cast_double_complex Operator_type.ARITHMETIC false, Operator "unary_minus" unary_minus Operator_type.ARITHMETIC false, Operator "negate" negate Operator_type.RELATIONAL false, Operator "complement" complement Operator_type.ARITHMETIC false, Operator "unary_plus" unary_plus Operator_type.ARITHMETIC false, /* Built in projections. */ Operator "re" re Operator_type.ARITHMETIC false, Operator "im" im Operator_type.ARITHMETIC false, Operator "hd" hd Operator_type.ARITHMETIC false, Operator "tl" tl Operator_type.ARITHMETIC false, /* Maths builtins. */ Operator "sin" sin Operator_type.ARITHMETIC false, Operator "cos" cos Operator_type.ARITHMETIC false, Operator "tan" tan Operator_type.ARITHMETIC false, Operator "asin" asin Operator_type.ARITHMETIC false, Operator "acos" acos Operator_type.ARITHMETIC false, Operator "atan" atan Operator_type.ARITHMETIC false, Operator "log" log Operator_type.ARITHMETIC false, Operator "log10" log10 Operator_type.ARITHMETIC false, Operator "exp" exp Operator_type.ARITHMETIC false, Operator "exp10" exp10 Operator_type.ARITHMETIC false, Operator "ceil" ceil Operator_type.ARITHMETIC false, Operator "floor" floor Operator_type.ARITHMETIC false ]; matches = filter test_name operator_table; test_name x = x.op_name == op_name; } /* Find the matching methods in a method table. */ oo_method_lookup table = map (extract 0) (filter (extract 1) table); /* A binary op: a is a class, b may be a class ... eg. "add" a b two obvious ways to find a method: - a.oo_binary_search "add" (+) b - b.oo_binary_search "add'" (converse (+)) a, is_class b if these fail but op is a symmetric operator (eg. a + b == b + a), we can also try reversing the args - a.oo_binary_search "add'" (converse (+)) b - b.oo_binary_search "add" (+) a, is_class b if those fail as well, but this is ==, do pointer equals as a fallback */ oo_binary_function op a b = matches1?0, matches1 != [] = matches2?0, is_class b && matches2 != [] = matches3?0, op.symmetric && matches3 != [] = matches4?0, op.symmetric && is_class b && matches4 != [] = pointer_equal a b, op.op_name == "equal" || op.op_name == "equal'" = not_pointer_equal a b, op.op_name == "not_equal" || op.op_name == "not_equal'" = error (_ "No method found for binary operator." ++ "\n" ++ _ "left" ++ " = " ++ print a ++ "\n" ++ _ "operator" ++ " = " ++ op.op_name ++ "\n" ++ _ "right" ++ " = " ++ print b) { matches1 = oo_method_lookup (a.oo_binary_table op b); matches2 = oo_method_lookup (b.oo_binary_table (oo_converse op) a); matches3 = oo_method_lookup (a.oo_binary_table (oo_converse op) b); matches4 = oo_method_lookup (b.oo_binary_table op a); } /* A binary op: a is not a class, b is a class ... eg. "subtract" a b only one way to find a method: - b.oo_binary_search "subtract'" (converse (-)) a if this fails but op is a symmetric operator (eg. a + b == b + a), we can try reversing the args - b.oo_binary_search "add" (+) a, is_class b if that fails as well, but this is ==, do pointer equals as a fallback */ oo_binary'_function op a b = matches1?0, matches1 != [] = matches2?0, op.symmetric && matches2 != [] = pointer_equal a b, op.op_name == "equal" || op.op_name == "equal'" = not_pointer_equal a b, op.op_name == "not_equal" || op.op_name == "not_equal'" = error (_ "No method found for binary operator." ++ "\n" ++ _ "left" ++ " = " ++ print a ++ "\n" ++ _ "operator" ++ " = " ++ op.op_name ++ "\n" ++ _ "right" ++ " = " ++ print b) { matches1 = oo_method_lookup (b.oo_binary_table (oo_converse op) a); matches2 = oo_method_lookup (b.oo_binary_table op a); } oo_unary_function op x = matches?0, matches != [] = error (_ "No method found for unary operator." ++ "\n" ++ _ "operator" ++ " = " ++ op.op_name ++ "\n" ++ _ "argument" ++ " = " ++ print x) { matches = oo_method_lookup (x.oo_unary_table op); } /* Base class for nip's built-in classes ... base check function, base * operator overload functions. */ _Object = class { check = check_args this; // these should always be defined _check_args = []; _check_all = []; /* Operator overloading stuff. */ oo_binary op x = oo_binary_function (oo_binary_lookup op) this x; oo_binary' op x = oo_binary'_function (oo_binary_lookup op) x this; oo_unary op = oo_unary_function (oo_unary_lookup op) this; oo_binary_table op x = []; oo_unary_table op = []; } nip2-8.7.0/share/nip2/start/Magick.def0000644000175000017500000014112713224651032014305 00000000000000/* ImageMagick operations edited by Alan Gibson (aka "snibgo"; snibgo at earthling dot net). 1-Apr-2014 Minor corrections to Geometry_widget and Alpha. Added loads of widgets and Menuactions. Not fully tested. 5-Apr-2014 Many more menu actions. Reorganised Magick menu. 10-Apr-2014 Many more menu actions. 11-Apr-2014 jcupitt Split to separate Magick.def 13-Apr-2014 snibgo Put "new image" items into sub-menu. New class VirtualPixlBack. 17-Apr-2014 snibgo Many small changes. A few new menu options. Created sub-menu for multi-input operations. 3-May-2014 jcupitt Put quotes around ( in shadow to help unix Last update: 17-Apr-2014. For details of ImageMagick operations, see http://www.imagemagick.org/script/command-line-options.php etc. */ // We don't need Noop. /*=== Magick_noop_item = class Menuaction "_Noop" "no operation" { action x = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "\"%s\"" ]; _result = Magick.system command x; } } ===*/ Magick_testPar_item = class Menuaction "_TestPar" "no operation" { action x = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "( +clone ) +append ", "\"%s\"" ]; _result = Magick.system command x; } } /* Removed Read_item and Write_item, much better to use nip2 load/save image. * Plus they can load all libMagick formats anyway. */ // Put "new image" items into sub-menu Magick_NewImageMenu_item = class Menupullright "_New image" "make a new image" { Magick_newcanvas_item = class Menuaction "_Solid colour" "make image of solid colour" { action = class _result { _vislevel = 3; size = Magick.Size_widget; colour = Magick.generalcol_widget; command = Magick.command [ size._flag, "\"canvas:" ++ colour._flag ++ "\"", "\"%s\"" ]; _result = Magick.system0 command; } } Magick_builtin_item = class Menuaction "_Built-in image" "create a built-in image" { action = class _result { _vislevel = 3; builtin = Magick.builtin_widget; command = Magick.command [ builtin._flag, "\"%s\"" ]; _result = Magick.system0 command; } } Magick_gradient_item = class Menuaction "_Gradient" "make a linear gradient between two colours" { action = class _result { _vislevel = 3; size = Magick.Size_widget; topColour = Magick.generalcol_widget; bottomColour = Magick.generalcol_widget; command = Magick.command [ size._flag, concat ["\"gradient:", topColour._flag, "-", bottomColour._flag, "\""], "\"%s\"" ]; _result = Magick.system0 command; } } Magick_hald_item = class Menuaction "_Hald-clut image" "create an identity hald-clut image" { action = class _result { _vislevel = 3; order = Expression "order" 8; command = Magick.command [ "hald:" ++ print order.expr, "\"%s\"" ]; _result = Magick.system0 command; } } Magick_pattern_item = class Menuaction "_Pattern" "create pattern" { action = class _result { _vislevel = 3; size = Magick.Size_widget; pattern = Magick.pattern_widget; command = Magick.command [ size._flag, pattern._flag, "\"%s\"" ]; _result = Magick.system0 command; } } Magick_plasma_item = class Menuaction "_Plasma image" "create plasma image" { action = class _result { _vislevel = 3; size = Magick.Size_widget; // FIXME? ColourA-ColourB. // FIXME? Allow plasma:fractal? command = Magick.command [ size._flag, "plasma:", "\"%s\"" ]; _result = Magick.system0 command; } } Magick_radialgradient_item = class Menuaction "_Radial gradient" "make a radial gradient between two colours" { action = class _result { _vislevel = 3; size = Magick.Size_widget; innerColour = Magick.generalcol_widget; outerColour = Magick.generalcol_widget; command = Magick.command [ size._flag, concat ["\"radial-gradient:", innerColour._flag, "-", outerColour._flag, "\""], "\"%s\"" ]; _result = Magick.system0 command; } } } // end Magick_NewImageMenu_item Magick_MultiMenu_item = class Menupullright "_Multiple inputs" "make an image from multiple images" { Magick_composite_item = class Menuaction "_Composite" "composite two images (without mask)" { action x y = class _result { _vislevel = 3; method = Magick.compose_widget; offsets = Magick.OffsetGeometry_widget; gravity = Magick.gravity_widget; command = Magick.command [ "\"%s\"", "\"%s\"", "-geometry", offsets._flag, gravity._flag, method._flag, "-composite", "\"%s\"" ]; _result = Magick.system2 command x y; } } Magick_compositeMask_item = class Menuaction "_Composite masked" "composite two images (with mask)" { action x y z = class _result { _vislevel = 3; method = Magick.compose_widget; offsets = Magick.OffsetGeometry_widget; gravity = Magick.gravity_widget; command = Magick.command [ "\"%s\"", "\"%s\"", "\"%s\"", "-geometry", offsets._flag, gravity._flag, method._flag, "-composite", "\"%s\"" ]; _result = Magick.system3 command x y z; } } // FIXME: other operations like remap that take another image as arguments are: // mask (pointless?), texture, tile (pointless?) // FIXME: operations that take a filename that isn't an image: // cdl, profile Magick_clut_item = class Menuaction "_Clut" "replace values using second image as colour look-up table" { action x y = class _result { _vislevel = 3; // FIXME: uses -intensity "when mapping greyscale CLUT image to alpha channel if set by -channels" command = Magick.command [ "\"%s\"", "\"%s\"", "-clut", "\"%s\"" ]; _result = Magick.system2 command x y; } } Magick_haldclut_item = class Menuaction "_Hald clut" "replace values using second image as Hald colour look-up table" { action x y = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "\"%s\"", "-hald-clut", "\"%s\"" ]; _result = Magick.system2 command x y; } } // Encipher and decipher: key files can be text or image files. Magick_encipher_item = class Menuaction "_Encipher/Decipher" "encipher or decipher an image image" { action x = class _result { _vislevel = 3; pathname = Pathname "Read key file" ""; isDecipher = Toggle "Decipher" false; command = Magick.command [ "\"%s\"", if pathname.value == "" then "" else ( ( if isDecipher then "-decipher " else "-encipher ") ++ ( "\"" ++ pathname.value ++ "\"" ) ), "\"%s\"" ]; _result = Magick.system command x; } } Magick_profile_item = class Menuaction "_Profile" "assigns/applies an ICC profile" { action x = class _result { _vislevel = 3; pathname1 = Pathname "Read profile file" ""; pathname2 = Pathname "Read profile file" ""; command = Magick.command [ "\"%s\"", if pathname1.value == "" then "" else ( "-profile " ++ "\"" ++ pathname1.value ++ "\""), if pathname2.value == "" then "" else ( "-profile " ++ "\"" ++ pathname2.value ++ "\""), "\"%s\"" ]; _result = Magick.system command x; } } Magick_remap_item = class Menuaction "_Remap" "reduce colours to those in another image" { action x y = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "-remap", "\"%s\"", "\"%s\"" ]; _result = Magick.system2 command x y; } } } // end Magick_MultiMenu_item Magick_image_type_item = class Menuaction "_Image Type" "change image type" { action x = class _result { _vislevel = 3; imagetype = Magick.imagetype_widget; command = Magick.command [ "\"%s\"", imagetype._flag, "\"%s\"" ]; _result = Magick.system command x; } } sep2 = Menuseparator; Magick_alpha_item = class Menuaction "_Alpha" "add/remove alpha channel" { action x = class _result { _vislevel = 3; alpha = Magick.alpha_widget; command = Magick.command [ "\"%s\"", alpha._flag, "\"%s\"" ]; _result = Magick.system command x; } } Magick_annotate_item = class Menuaction "_Annotate" "add text annotation" { action x = class _result { _vislevel = 3; text = Magick.text_widget; font = Magick.Font_widget; geometry = Magick.AnnotGeometry_widget; gravity = Magick.gravity_widget; foreground = Magick.foreground_widget; undercol = Magick.undercol_widget; antialias = Magick.antialias_widget; command = Magick.command [ "\"%s\"", font._flag, antialias._flag, gravity._flag, foreground._flag, undercol._flag, "-annotate", geometry._flag, "\"" ++ text.value ++ "\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_autoGamma_item = class Menuaction "_AutoGamma" "automatic gamma" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; command = Magick.command [ "\"%s\"", channels._flag, "-auto-gamma", "\"%s\"" ]; _result = Magick.system command x; } } Magick_autoLevel_item = class Menuaction "_AutoLevel" "automatic level" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; command = Magick.command [ "\"%s\"", channels._flag, "-auto-level", "\"%s\"" ]; _result = Magick.system command x; } } Magick_blurSharpMenu_item = class Menupullright "_Blur/Sharpen" "blur and sharpen" { Magick_adaptive_blur_item = class Menuaction "_Adaptive Blur" "blur less near edges" { action x = class _result { _vislevel = 3; intensity = Magick.intensity_widget; radius = Magick.blur_rad_widget; sigma = Magick.sigma_widget; channels = Magick.channels_widget; // note: adaptive-blur doesn't regard VP. command = Magick.command [ "\"%s\"", intensity._flag, channels._flag, "-adaptive-blur", print radius.value ++ "x" ++ print sigma.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_blur_item = class Menuaction "_Blur" "blur" { action x = class _result { _vislevel = 3; radius = Magick.blur_rad_widget; sigma = Magick.sigma_widget; channels = Magick.channels_widget; virtpixback = Magick.VirtualPixelBack_widget; command = Magick.command [ "\"%s\"", virtpixback._flag, channels._flag, "-blur", print radius.value ++ "x" ++ print sigma.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_gaussianBlur_item = class Menuaction "_Gaussian Blur" "blur with a Gaussian operator" { action x = class _result { _vislevel = 3; radius = Magick.blur_rad_widget; sigma = Magick.sigma_widget; channels = Magick.channels_widget; virtpixback = Magick.VirtualPixelBack_widget; command = Magick.command [ "\"%s\"", virtpixback._flag, channels._flag, "-gaussian-blur", print radius.value ++ "x" ++ print sigma.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_motionBlur_item = class Menuaction "_Motion Blur" "simulate motion blur" { action x = class _result { _vislevel = 3; radius = Magick.blur_rad_widget; sigma = Magick.sigma_widget; angle = Scale "angle" (-360) 360 0; channels = Magick.ch_widget; virtpixback = Magick.VirtualPixelBack_widget; command = Magick.command [ "\"%s\"", virtpixback._flag, channels._flag, "-motion-blur", print radius.value ++ "x" ++ print sigma.value ++ "+" ++ print angle.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_rotationalBlur_item = class Menuaction "_RotationalBlur" "blur around the centre" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; virtpixback = Magick.VirtualPixelBack_widget; angle = Scale "angle (degrees)" (-360) 360 20; command = Magick.command [ "\"%s\"", virtpixback._flag, channels._flag, "-radial-blur", print angle.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_selectiveBlur_item = class Menuaction "_Selective Blur" "blur where contrast is less than or equal to threshold" { action x = class _result { _vislevel = 3; intensity = Magick.intensity_widget; radius = Magick.blur_rad_widget; sigma = Magick.sigma_widget; threshold = Scale "Threshold (percent)" 0 100 50; channels = Magick.channels_widget; virtpixback = Magick.VirtualPixelBack_widget; command = Magick.command [ "\"%s\"", intensity._flag, virtpixback._flag, channels._flag, "-selective-blur", print radius.value ++ "x" ++ print sigma.value ++ "+" ++ print threshold.value ++ "%%", "\"%s\"" ]; _result = Magick.system command x; } } sep1 = Menuseparator; Magick_adaptive_sharpen_item = class Menuaction "_Adaptive Sharpen" "sharpen more near edges" { action x = class _result { _vislevel = 3; intensity = Magick.intensity_widget; radius = Magick.blur_rad_widget; sigma = Magick.sigma_widget; command = Magick.command [ "\"%s\"", intensity._flag, "-adaptive-sharpen", print radius.value ++ "x" ++ print sigma.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_sharpen_item = class Menuaction "_Sharpen" "sharpen" { action x = class _result { _vislevel = 3; radius = Magick.blur_rad_widget; sigma = Magick.sigma_widget; channels = Magick.channels_widget; virtpixback = Magick.VirtualPixelBack_widget; command = Magick.command [ "\"%s\"", virtpixback._flag, channels._flag, "-sharpen", print radius.value ++ "x" ++ print sigma.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_unsharpen_item = class Menuaction "_Unsharp" "sharpen with unsharp mask" { action x = class _result { _vislevel = 3; radius = Magick.blur_rad_widget; sigma = Magick.sigma_widget; channels = Magick.channels_widget; gain = Scale "Gain" (-10) 10 1; threshold = Scale "Threshold" 0 1 0.05; virtpixback = Magick.VirtualPixelBack_widget; command = Magick.command [ "\"%s\"", virtpixback._flag, channels._flag, "-unsharp", print radius.value ++ "x" ++ print sigma.value ++ "+" ++ print gain.value ++ "+" ++ print threshold.value, "\"%s\"" ]; _result = Magick.system command x; } } } // end BlurSharpMenu_item Magick_border_item = class Menuaction "_Border" "add border of given colour" { action x = class _result { _vislevel = 3; compose = Magick.compose_widget; width = Expression "Width" 3; bordercol = Magick.bordercol_widget; command = Magick.command [ "\"%s\"", compose._flag, bordercol._flag, "-border", print width.expr, "\"%s\"" ]; _result = Magick.system command x; } } Magick_brightCont_item = class Menuaction "_Brightness-contrast" "adjust the brightness and/or contrast" { action x = class _result { _vislevel = 3; bri = Scale "brightness" (-100) 100 0; con = Scale "contrast" (-100) 100 0; channels = Magick.channels_widget; command = Magick.command [ "\"%s\"", channels._flag, "-brightness-contrast", print bri.value ++ "x" ++ print con.value, "\"%s\"" ]; _result = Magick.system command x; } } // Note: canny requires ImageMagick 6.8.9-0 or later. Magick_canny_item = class Menuaction "_Canny" "detect a wide range of edges" { action x = class _result { _vislevel = 3; radius = Magick.blur_rad_widget; sigma = Magick.sigma_widget; lowPc = Scale "lower percent" 0 100 10; highPc = Scale "lower percent" 0 100 10; command = Magick.command [ "\"%s\"", "-canny", concat ["\"", print radius.value ++ "x" ++ print sigma.value ++ "+" ++ print lowPc.value ++ "%%+" ++ print highPc.value ++ "%%" ++ "\"" ], "\"%s\"" ]; _result = Magick.system command x; } } Magick_charcoal_item = class Menuaction "_Charcoal" "simulate a charcoal drawing" { action x = class _result { _vislevel = 3; intensity = Magick.intensity_widget; factor = Scale "factor" 0 50 1; command = Magick.command [ "\"%s\"", intensity._flag, "-charcoal", print factor.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_chop_item = class Menuaction "_Chop" "remove pixels from the interior" { action x = class _result { _vislevel = 3; gravity = Magick.gravity_widget; geometry = Magick.WhxyGeometry_widget; command = Magick.command [ "\"%s\"", gravity._flag, "-chop", geometry._flag, "\"%s\"" ]; _result = Magick.system command x; } } Magick_colorize_item = class Menuaction "_Colorize" "colorize by given amount" { action x = class _result { _vislevel = 3; foreground = Magick.foreground_widget; val = Scale "value" 0 100 100; command = Magick.command [ "\"%s\"", foreground._flag, "-colorize", print val.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_colors_item = class Menuaction "_Colors" "reduce number of colors" { action x = class _result { _vislevel = 3; treedepth = Expression "Treedepth" 8; dither = Magick.dither_widget; quantize = Magick.colorspace_widget; colors = Expression "Colours" 3; command = Magick.command [ "\"%s\"", "-quantize", quantize._flag, "-treedepth", print treedepth.expr, dither._flag, "-colors", print colors.expr, "\"%s\"" ]; _result = Magick.system command x; } } // FIXME: color-matrix? Magick_colorspace_item = class Menuaction "_Colourspace" "convert to arbitrary colourspace" { action x = class _result { _vislevel = 3; colsp = Magick.colorspace_widget; command = Magick.command [ "\"%s\"", "-colorspace", colsp._flag, "\"%s\"" ]; _result = Magick.system command x; } } Magick_colorspaceGray_item = class Menuaction "_Colourspace gray" "convert to gray using given intensity method" { action x = class _result { _vislevel = 3; intensity = Magick.intensity_widget; command = Magick.command [ "\"%s\"", intensity._flag, "-colorspace gray", "\"%s\"" ]; _result = Magick.system command x; } } Magick_contrast_item = class Menuaction "_Contrast" "increase or reduce the contrast" { action x = class _result { _vislevel = 3; isReduce = Toggle "reduce contrast" false; command = Magick.command [ "\"%s\"", (if isReduce then "+" else "-") ++ "contrast", "\"%s\"" ]; _result = Magick.system command x; } } Magick_contrastStretch_item = class Menuaction "_Contrast stretch" "stretches tones, making some black/white" { action x = class _result { _vislevel = 3; intensity = Magick.intensity_widget; channels = Magick.channels_widget; blk = Scale "percent to make black" 0 100 0; wht = Scale "percent to make white" 0 100 0; command = Magick.command [ "\"%s\"", intensity._flag, channels._flag, "-contrast-stretch", "\"" ++ print blk.value ++ "x" ++ print wht.value ++ "%%\"", "\"%s\"" ]; _result = Magick.system command x; } } // FIXME: convolve (bias, kernel) Magick_crop_item = class Menuaction "_Crop" "cut out a rectangular region" { action x = class _result { _vislevel = 3; gravity = Magick.gravity_widget; geometry = Magick.WhxyGeometry_widget; command = Magick.command [ "\"%s\"", gravity._flag, "-crop", geometry._flag, "+repage", "\"%s\"" ]; _result = Magick.system command x; } } Magick_deskew_item = class Menuaction "_Deskew" "straighten the image" { action x = class _result { _vislevel = 3; threshold = Scale "Threshold (percent)" 0 100 80; // FIXME: toggle auto-crop? command = Magick.command [ "\"%s\"", "-deskew", "\"" ++ print threshold.value ++ "%%\"", "+repage", "\"%s\"" ]; _result = Magick.system command x; } } Magick_despeckle_item = class Menuaction "_Despeckle" "reduce the speckles" { action x = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "-despeckle", "\"%s\"" ]; _result = Magick.system command x; } } Magick_distort_item = class Menuaction "_Distort" "distort using a method and arguments" { action x = class _result { _vislevel = 3; virtpixback = Magick.VirtualPixelBack_widget; distort = Magick.distort_widget; args = String "Arguments" "1,0"; isPlus = Toggle "Extend to show entire image" false; command = Magick.command [ "\"%s\"", virtpixback._flag, (if isPlus then "+" else "-") ++ "distort", distort._flag, args.value, "+repage", "\"%s\"" ]; _result = Magick.system command x; } } Magick_draw_item = class Menuaction "_Draw" "annotate with one or more graphic primitives" { action x = class _result { _vislevel = 3; foreground = Magick.foreground_widget; args = String "Arguments" "line 0,0 9,9 rectangle 10,10 20,20"; command = Magick.command [ "\"%s\"", foreground._flag, "-draw", concat ["\"", args.value, "\""], "\"%s\"" ]; _result = Magick.system command x; } } Magick_edge_item = class Menuaction "_Edge" "detect edges" { action x = class _result { _vislevel = 3; rad = Expression "Radius" 3; command = Magick.command [ "\"%s\"", "-edge", print rad.expr, "\"%s\"" ]; _result = Magick.system command x; } } Magick_emboss_item = class Menuaction "_Emboss" "emboss" { action x = class _result { _vislevel = 3; rad = Expression "Radius" 3; command = Magick.command [ "\"%s\"", "-emboss", print rad.expr, "\"%s\"" ]; _result = Magick.system command x; } } Magick_enhance_item = class Menuaction "_Enhance" "enhance a noisy image" { action x = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "-enhance", "\"%s\"" ]; _result = Magick.system command x; } } Magick_equalize_item = class Menuaction "_Equalize" "equalize the histogram" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; command = Magick.command [ "\"%s\"", channels._flag, "-equalize", "\"%s\"" ]; _result = Magick.system command x; } } Magick_evaluate_item = class Menuaction "_Evaluate" "evaluate an expression on each pixel channel" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; operation = Magick.evaluate_widget; val = Expression "value" 5; isPc = Toggle "Value is percent" false; command = Magick.command [ "\"%s\"", channels._flag, operation._flag, print val.expr ++ if isPc then "%%" else "", "\"%s\"" ]; _result = Magick.system command x; } } Magick_extent_item = class Menuaction "_Extent" "set the image size and offset" { action x = class _result { _vislevel = 3; background = Magick.background_widget; compose = Magick.compose_widget; gravity = Magick.gravity_widget; geometry = Magick.WhxyGeometry_widget; command = Magick.command [ "\"%s\"", compose._flag, background._flag, gravity._flag, "-extent", geometry._flag, "\"%s\"" ]; _result = Magick.system command x; } } Magick_FlipFlopMenu_item = class Menupullright "_Flip/flop" "flip/flop/transverse/transpose" { Magick_flip_item = class Menuaction "_Flip vertically" "mirror upside-down" { action x = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "-flip", "\"%s\"" ]; _result = Magick.system command x; } } Magick_flop_item = class Menuaction "_Flop horizontally" "mirror left-right" { action x = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "-flop", "\"%s\"" ]; _result = Magick.system command x; } } Magick_transpose_item = class Menuaction "_Transpose" "mirror along the top-left to bottom-right diagonal" { action x = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "-transpose +repage", "\"%s\"" ]; _result = Magick.system command x; } } Magick_transverse_item = class Menuaction "_Transverse" "mirror along the bottom-left to top-right diagonal" { action x = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "-transverse +repage", "\"%s\"" ]; _result = Magick.system command x; } } } // end Magick_FlipFlopMenu_item Magick_floodfill_item = class Menuaction "_Floodfill" "recolour neighbours that match" { action x = class _result { _vislevel = 3; foreground = Magick.foreground_widget; fuzz = Magick.fuzz_widget; coordinate = Magick.coordinate_widget; // -draw "color x,y floodfill" command = Magick.command [ "\"%s\"", foreground._flag, "-fuzz", "\"" ++ print fuzz.value ++ "%%\"", "-draw \" color", coordinate._flag, "floodfill \"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_frame_item = class Menuaction "_Frame" "surround with border or beveled frame" { action x = class _result { _vislevel = 3; border = Magick.bordercol_widget; compose = Magick.compose_widget; matte = Magick.mattecol_widget; geometry = Magick.FrameGeometry_widget; command = Magick.command [ "\"%s\"", compose._flag, border._flag, matte._flag, "-frame", geometry._flag, "\"%s\"" ]; _result = Magick.system command x; } } Magick_function_item = class Menuaction "_Function" "evaluate a function on each pixel channel" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; function = Magick.function_widget; // FIXME: explain values; use sensible defaults. values = String "values" "0,0,0,0"; command = Magick.command [ "\"%s\"", channels._flag, "-function", function._flag, values.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_fx_item = class Menuaction "_Fx" "apply a mathematical expression" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; interpolate = Magick.interpolate_widget; virtpixback = Magick.VirtualPixelBack_widget; args = String "Expression" "u*1/2"; command = Magick.command [ "\"%s\"", channels._flag, interpolate._flag, virtpixback._flag, "-fx", concat ["\"", args.value, "\""], "\"%s\"" ]; _result = Magick.system command x; } } Magick_gamma_item = class Menuaction "_Gamma" "apply a gamma correction" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; gamma = Magick.gamma_widget; command = Magick.command [ "\"%s\"", channels._flag, "-gamma", print gamma.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_gradient_item = class Menuaction "_Gradient" "apply a linear gradient" { action x = class _result { _vislevel = 3; colourA = Magick.generalcol_widget; colourB = Magick.generalcol_widget; position = Option "colourA is at" [ "top", "bottom", "left", "right", "top-left", "top-right", "bottom-left", "bottom-right"] 0; _baryArg = concat ["0,0,", colourA._flag, " 0,%%[fx:h-1],", colourB._flag], position.value == 0 = concat ["0,0,", colourB._flag, " 0,%%[fx:h-1],", colourA._flag], position.value == 1 = concat ["0,0,", colourA._flag, " %%[fx:w-1],0,", colourB._flag], position.value == 2 = concat ["0,0,", colourB._flag, " %%[fx:w-1],0,", colourA._flag], position.value == 3 = concat ["0,0,", colourA._flag, " %%[fx:w-1],%%[fx:h-1],", colourB._flag], position.value == 4 = concat ["%%[fx:w-1],0,", colourA._flag, " 0,%%[fx:h-1],", colourB._flag], position.value == 5 = concat ["%%[fx:w-1],0,", colourB._flag, " 0,%%[fx:h-1],", colourA._flag], position.value == 6 = concat ["0,0,", colourB._flag, " %%[fx:w-1],%%[fx:h-1],", colourA._flag], position.value == 7 = "dunno"; command = Magick.command [ "\"%s\"", "-sparse-color barycentric \"" ++ _baryArg ++ "\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_gradientCorn_item = class Menuaction "_Gradient corners" "apply a bilinear gradient between the corners" { action x = class _result { _vislevel = 3; colour_top_left = Magick.generalcol_widget; colour_top_right = Magick.generalcol_widget; colour_bottom_left = Magick.generalcol_widget; colour_bottom_right = Magick.generalcol_widget; command = Magick.command [ "\"%s\"", "-sparse-color bilinear \"" ++ "0,0," ++ colour_top_left._flag ++ ",%%[fx:w-1],0" ++ colour_top_right._flag ++ ",0,%%[fx:h-1]" ++ colour_bottom_left._flag ++ ",%%[fx:w-1],%%[fx:h-1]" ++ colour_bottom_right._flag ++ "\"", "+depth", "\"%s\"" ]; _result = Magick.system command x; } } Magick_histogram_item = class Menuaction "_Histogram" "make a histogram image" { action x = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "-define histogram:unique-colors=false histogram:" ++ "\"%s\"" ]; _result = Magick.system command x; } } Magick_implode_item = class Menuaction "_Implode" "implode pixels about the center" { action x = class _result { _vislevel = 3; factor = Scale "factor" 0 20 1; interpolate = Magick.interpolate_widget; // FIXME: virtual-pixel? command = Magick.command [ "\"%s\"", interpolate._flag, "-implode", print factor.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_level_item = class Menuaction "_Level" "adjust the level of channels" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; blk = Scale "black point" (-100) 200 0; wht = Scale "white point" (-100) 200 100; gam = Scale "gamma" 0 30 1; isPc = Toggle "Levels are percent" true; isInv = Toggle "Invert effect" false; command = Magick.command [ "\"%s\"", channels._flag, (if isInv then "+" else "-") ++ "level", "\"" ++ print blk.value ++ "," ++ print wht.value ++ (if isPc then "%%" else "") ++ "," ++ print gam.value ++ "\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_levelCols_item = class Menuaction "_Level colors" "adjust levels to given colours" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; colour_black = Magick.generalcol_widget; colour_white = Magick.generalcol_widget; isInv = Toggle "Invert effect" false; command = Magick.command [ "\"%s\"", channels._flag, (if isInv then "+" else "-") ++ "level-colors", "\"" ++ colour_black._flag ++ "," ++ colour_white._flag ++ "\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_linearStretch_item = class Menuaction "_Linear stretch" "stretches tones, making some black/white" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; blk = Scale "percent to make black" 0 100 0; wht = Scale "percent to make white" 0 100 0; command = Magick.command [ "\"%s\"", channels._flag, "-linear-stretch", "\"" ++ print blk.value ++ "x" ++ print wht.value ++ "%%\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_magnify_item = class Menuaction "_Magnify" "double the size of the image with pixel art scaling" { action x = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "-magnify", "\"%s\"" ]; _result = Magick.system command x; } } Magick_modulate_item = class Menuaction "_Modulate" "modulate brightness, saturation and hue" { action x = class _result { _vislevel = 3; modcolsp = Magick.ModColSp_widget; bright = Scale "brightness" 0 200 100; sat = Scale "saturation" 0 200 100; hue = Scale "hue" 0 200 100; command = Magick.command [ "\"%s\"", modcolsp._flag, "-modulate", print bright.value ++ "," ++ print sat.value ++ "," ++ print hue.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_monochrome_item = class Menuaction "_Monochrome" "transform to black and white" { action x = class _result { _vislevel = 3; // FIXME: also intensity? intensity = Magick.intensity_widget; treedepth = Expression "Treedepth" 8; dither = Magick.dither_widget; command = Magick.command [ "\"%s\"", intensity._flag, dither._flag, "-treedepth", print treedepth.expr, "-monochrome", "\"%s\"" ]; _result = Magick.system command x; } } Magick_morphology_item = class // See http://www.imagemagick.org/Usage/morphology/ Menuaction "_Morphology" "apply a morphological method" { action x = class _result { _vislevel = 3; method = Magick.morphmeth_widget; iter = Expression "Iterations (-1=repeat until done)" 1; kernel = Magick.kernel_widget; // FIXME: custom kernel eg "3x1+2+0:1,0,0" // width x height + offsx + offsy : {w*h values} // each value is 0.0 to 1.0 or "NaN" or "-" // kernel args, mostly float radius,scale. radius=0=default. default scale = 1.0 // but // ring takes: radius1, radius2, scale // rectangle and comet take: width x height + offsx + offsy // blur takes: radius x sigma // FIXME: for now, simply allow any string input. kernel_arg = String "Kernel arguments" ""; channels = Magick.channels_widget; command = Magick.command [ "\"%s\"", channels._flag, "-morphology", method._flag ++ ":" ++ print iter.expr, kernel._flag ++ (if kernel_arg.value == "" then "" else ":") ++ kernel_arg.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_negate_item = class Menuaction "_Negate" "negate" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; command = Magick.command [ "\"%s\"", channels._flag, "-negate", "\"%s\"" ]; _result = Magick.system command x; } } Magick_addNoise_item = class Menuaction "_add Noise" "add noise" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; attenuate = Scale "attenuate" 0 1.0 1.0; noise = Magick.noise_widget; command = Magick.command [ "\"%s\"", channels._flag, "-attenuate", print attenuate.value, noise._flag, "\"%s\"" ]; _result = Magick.system command x; } } Magick_normalize_item = class Menuaction "_Normalize" "normalize" { action x = class _result { _vislevel = 3; intensity = Magick.intensity_widget; channels = Magick.channels_widget; command = Magick.command [ "\"%s\"", intensity._flag, channels._flag, "-normalize", "\"%s\"" ]; _result = Magick.system command x; } } Magick_opaque_item = class Menuaction "_Opaque" "change this colour to the fill colour" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; fill = Magick.foreground_widget; changeColour = Magick.changeCol_widget; command = Magick.command [ "\"%s\"", fill._flag, channels._flag, "-fuzz", "\"" ++ print changeColour.fuzz.value ++ "%%\"", (if changeColour.nonMatch then "+" else "-") ++ "opaque", "\"" ++ changeColour.colour._flag ++ "\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_paint_item = class Menuaction "_Paint" "simulate an oil painting" { action x = class _result { _vislevel = 3; rad = Expression "radius" 10; command = Magick.command [ "\"%s\"", "-paint", print rad.expr, "\"%s\"" ]; _result = Magick.system command x; } } /*=== FIXME Bug; remove for now. Polaroid_item = class Menuaction "_Polaroid" "simulate a polaroid picture" { action x = class _result { _vislevel = 3; angle = Scale "angle" (-90) 90 20; command = Magick.command [ "\"%s\"", "-polaroid", print angle.value, "\"%s\"" ]; _result = Magick.system command x; } } ===*/ Magick_posterize_item = class Menuaction "_Posterize" "reduce to (n) levels per channel" { action x = class _result { _vislevel = 3; levels = Expression "levels" 3; command = Magick.command [ "\"%s\"", "-posterize", print levels.expr, "\"%s\"" ]; _result = Magick.system command x; } } Magick_raise_item = class Menuaction "_Raise" "lighten or darken image edges" { action x = class _result { _vislevel = 3; thk = Expression "Thickness" 3; command = Magick.command [ "\"%s\"", "-raise", print thk.expr, "\"%s\"" ]; _result = Magick.system command x; } } Magick_resize_item = class Menuaction "_Resize" "resize to given width and height" { action x = class _result { _vislevel = 3; filter = Magick.filter_widget; type = Magick.ResizeType_widget; width = Scale "Width" 1 100 10; height = Scale "Height" 1 100 10; isPc = Toggle "Width and height are percent" false; command = Magick.command [ "\"%s\"", filter._flag, "-" ++ type._flag, "\"" ++ print width.value ++ "x" ++ print height.value ++ (if isPc then "%%" else "!") ++ "\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_roll_item = class Menuaction "_Roll" "roll an image horizontally or vertically" { action x = class _result { _vislevel = 3; rollx = Expression "X" 3; rolly = Expression "Y" 3; command = Magick.command [ "\"%s\"", "-roll", (if rollx.expr >= 0 then "+" else "") ++ print rollx.expr ++ (if rolly.expr >= 0 then "+" else "") ++ print rolly.expr, "\"%s\"" ]; _result = Magick.system command x; } } Magick_rotate_item = class Menuaction "_Rotate" "rotate" { action x = class _result { _vislevel = 3; angle = Scale "angle (degrees)" (-360) 360 20; virtpixback = Magick.VirtualPixelBack_widget; command = Magick.command [ "\"%s\"", virtpixback._flag, "+distort", "SRT", print angle.value, "+repage", "\"%s\"" ]; _result = Magick.system command x; } } // FIXME: -segment, but cluster-threshold should be percentage of image area. Magick_sepia_item = class Menuaction "_Sepia tone" "simulate a sepia-toned photo" { action x = class _result { _vislevel = 3; threshold = Scale "Threshold (percent)" 0 100 80; command = Magick.command [ "\"%s\"", "-sepia-tone", "\"" ++ print threshold.value ++ "%%\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_shade_item = class Menuaction "_Shade" "shade with a distant light source" { action x = class _result { _vislevel = 3; azimuth = Scale "Azimuth (degrees)" (-360) 360 0; elevation = Scale "Elevation (degrees)" 0 90 45; command = Magick.command [ "\"%s\"", "-shade", print azimuth.value ++ "x" ++ print elevation.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_shadow_item = class Menuaction "_Shadow" "simulate a shadow" { action x = class _result { _vislevel = 3; shadowCol = Magick.generalcol_widget; opacity = Scale "Opacity (percent)" 0 100 75; sigma = Scale "Sigma" 0 30 2; // FIXME: make offsets a single widget? offsx = Scale "X-offset" (-20) 20 4; offsy = Scale "Y-offset" (-20) 20 4; arePc = Toggle "offsets are percentages" false; // FIXME: raw operation creates page offset, which vips dislikes. // So we take this futher, compositing with source. command = Magick.command [ "\"%s\"", "\"(\" +clone", "-background", "\"" ++ shadowCol._flag ++ "\"", "-shadow", concat [ "\"", print opacity.value, "x", print sigma.value, (if offsx.value >= 0 then "+" else ""), print offsx.value, (if offsy.value >= 0 then "+" else ""), print offsy.value, (if arePc then "%%" else ""), "\"" ], "\")\" +swap -background None -layers merge", "+repage", "\"%s\"" ]; _result = Magick.system command x; } } Magick_shave_item = class Menuaction "_Shave" "shave pixels from the edges" { action x = class _result { _vislevel = 3; width = Scale "Width" 0 50 10; height = Scale "Height" 0 50 10; isPc = Toggle "Width and height are percent" false; command = Magick.command [ "\"%s\"", "-shave", "\"" ++ print width.value ++ "x" ++ print height.value ++ (if isPc then "%%" else "") ++ "\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_shear_item = class Menuaction "_Shear" "shear along the x-axis and/or y-axis" { action x = class _result { _vislevel = 3; shearX = Expression "shear X (degrees)" 0; shearY = Expression "shear Y (degrees)" 0; background = Magick.background_widget; command = Magick.command [ "\"%s\"", background._flag, "-shear", print shearX.expr ++ "x" ++ print shearY.expr, "\"%s\"" ]; _result = Magick.system command x; } } Magick_sigmoid_item = class Menuaction "_Sigmoid" "increase or decrease mid-tone contrast sigmoidally" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; contrast = Scale "contrast" 0 30 3; midpoint = Scale "mid-point (percent)" 0 100 50; isInv = Toggle "Invert effect" false; command = Magick.command [ "\"%s\"", channels._flag, (if isInv then "+" else "-") ++ "sigmoidal-contrast", "\"" ++ print contrast.value ++ "x" ++ print midpoint.value ++ "%%\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_sketch_item = class Menuaction "_Sketch" "simulate a pencil sketch" { action x = class _result { _vislevel = 3; radius = Magick.blur_rad_widget; sigma = Magick.sigma_widget; angle = Scale "angle" (-360) 360 0; command = Magick.command [ "\"%s\"", "-sketch", print radius.value ++ "x" ++ print sigma.value ++ (if angle >= 0 then ("+" ++ print angle.value) else ""), "\"%s\"" ]; _result = Magick.system command x; } } Magick_solarize_item = class Menuaction "_Solarize" "negate all pixels above a threshold level" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; threshold = Scale "Threshold (percent)" 0 100 50; command = Magick.command [ "\"%s\"", channels._flag, "-solarize", "\"" ++ print threshold.value ++ "%%\"", "\"%s\"" ]; _result = Magick.system command x; } } // FIXME: -sparse-color needs abitrary list of {x,y,colour}. Magick_splice_item = class Menuaction "_Splice" "splice a colour into the image" { action x = class _result { _vislevel = 3; background = Magick.background_widget; gravity = Magick.gravity_widget; geometry = Magick.WhxyGeometry_widget; command = Magick.command [ "\"%s\"", background._flag, gravity._flag, "-splice", geometry._flag, "\"%s\"" ]; _result = Magick.system command x; } } Magick_spread_item = class Menuaction "_Spread" "displace pixels by random amount" { action x = class _result { _vislevel = 3; virtpixback = Magick.VirtualPixelBack_widget; amount = Expression "Amount (pixels)" 5; command = Magick.command [ "\"%s\"", virtpixback._flag, "-spread", print amount.expr, "\"%s\"" ]; _result = Magick.system command x; } } Magick_statistic_item = class Menuaction "_Statistic" "replace each pixel with statistic from neighbourhood" { action x = class _result { _vislevel = 3; width = Expression "Width" 5; height = Expression "Height" 5; statisticType = Magick.StatType_widget; command = Magick.command [ "\"%s\"", "-statistic", statisticType._flag, print width.expr ++ "x" ++ print height.expr, "\"%s\"" ]; _result = Magick.system command x; } } Magick_swirl_item = class Menuaction "_Swirl" "swirl around the centre" { action x = class _result { _vislevel = 3; angle = Magick.angle_widget; command = Magick.command [ "\"%s\"", "-swirl", print angle.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_thresholdMenu_item = class Menupullright "_Threshold" "make black or white" { Magick_threshold_item = class Menuaction "_Threshold" "apply black/white threshold" { action x = class _result { _vislevel = 3; intensity = Magick.intensity_widget; channels = Magick.channels_widget; threshold = Scale "Threshold (percent)" 0 100 50; command = Magick.command [ "\"%s\"", intensity._flag, channels._flag, "-threshold", "\"" ++ print threshold.value ++ "%%\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_blackThreshold_item = class Menuaction "_Black threshold" "where below threshold set to black" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; threshold = Scale "Threshold (percent)" 0 100 50; command = Magick.command [ "\"%s\"", channels._flag, "-black-threshold", "\"" ++ print threshold.value ++ "%%\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_whiteThreshold_item = class Menuaction "_White threshold" "where above threshold set to white" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; threshold = Scale "Threshold (percent)" 0 100 50; command = Magick.command [ "\"%s\"", channels._flag, "-white-threshold", "\"" ++ print threshold.value ++ "%%\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_latThreshold_item = class Menuaction "_Local Adaptive Threshold" "where above average plus offset set to white, otherwise black" { action x = class _result { _vislevel = 3; width = Expression "Width" 10; height = Expression "Height" 10; offset = Scale "Offset (percent)" (-100) 100 0; // note: "-lat" doesn't respond to channels command = Magick.command [ "\"%s\"", "-lat", concat ["\"", print width.expr, "x", print height.expr, (if offset.value >= 0 then "+" else ""), print offset.value, "%%\"" ], "\"%s\"" ]; _result = Magick.system command x; } } Magick_randThreshold_item = class Menuaction "_Random Threshold" "between specified limits, apply random threshold" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; low = Scale "Low threshold" 0 100 10; high = Scale "High threshold" 0 100 90; isPc = Toggle "Thresholds are percent" true; command = Magick.command [ "\"%s\"", channels._flag, "-random-threshold", "\"" ++ print low.value ++ "x" ++ print high.value ++ (if isPc then "%%" else "") ++ "\"", "\"%s\"" ]; _result = Magick.system command x; } } } // end ThresholdMenu_item // Note: alternatives include: // convert in.tif -write mpr:TILE +delete -size 200x200 -background XXXX -tile-offset +30+30 tile:mpr:TILE out.tif Magick_tile_item = class Menuaction "_Tile" "fill given size with tiled image" { action x = class _result { _vislevel = 3; size = Magick.Size_widget; command = Magick.command [ size._flag, "tile:" ++ "\"%s\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_tint_item = class Menuaction "_Tint" "apply a tint" { action x = class _result { _vislevel = 3; foreground = Magick.foreground_widget; amount = Scale "amount (percent)" 0 100 50; command = Magick.command [ "\"%s\"", foreground._flag, "-tint", // snibgo note: although the amount is a percentage, it doesn't need "%" character. print amount.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_transparent_item = class Menuaction "_Transparent" "make this colour transparent" { action x = class _result { _vislevel = 3; changeColour = Magick.changeCol_widget; command = Magick.command [ "\"%s\"", "-fuzz", "\"" ++ print changeColour.fuzz.value ++ "%%\"", (if changeColour.nonMatch then "+" else "-") ++ "transparent", "\"" ++ changeColour.colour._flag ++ "\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_trim_item = class Menuaction "_Trim" "trims away border" { action x = class _result { _vislevel = 3; fuzz = Magick.fuzz_widget; command = Magick.command [ "\"%s\"", "-fuzz", "\"" ++ print fuzz.value ++ "%%\"", "-trim +repage", "\"%s\"" ]; _result = Magick.system command x; } } Magick_uniqueCols_item = class Menuaction "_Unique colours" "discard all but one of any pixel color" { action x = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "-unique-colors", "\"%s\"" ]; _result = Magick.system command x; } } Magick_vignette_item = class Menuaction "_Vignette" "soften the edges in vignette style" { action x = class _result { _vislevel = 3; radius = Magick.blur_rad_widget; sigma = Magick.sigma_widget; rx = Scale "Rolloff x (percent)" 0 100 10; ry = Scale "Rolloff y (percent)" 0 100 10; background = Magick.background_widget; command = Magick.command [ "\"%s\"", background._flag, "-vignette", print radius.value ++ "x" ++ print sigma.value ++ (if rx.value >= 0 then "+" else "") ++ print rx.value ++ (if ry.value >= 0 then "+" else "") ++ print ry.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_wave_item = class Menuaction "_Wave" "shear the columns into a sine wave" { action x = class _result { _vislevel = 3; amplitude = Scale "Amplitude (pixels)" 0 100 10; wavelength = Scale "Wavelength (pixels)" 0 100 10; command = Magick.command [ "\"%s\"", "-wave", print amplitude.value ++ "x" ++ print wavelength.value, "\"%s\"" ]; _result = Magick.system command x; } } nip2-8.7.0/share/nip2/start/_predicate.def0000644000175000017500000003263513273071606015223 00000000000000 /* is_colour_space str: is a string one of nip's colour space names */ is_colour_space str = Image_type.colour_spaces.present 0 str; /* is_colour_type n: is a number one of VIPS's colour spaces */ is_colour_type n = Image_type.colour_spaces.present 1 n; /* is_number: is a real or a complex number. */ is_number a = is_real a || is_complex a; /* is_int: is an integer */ is_int a = is_real a && a == (int) a; /* is_uint: is an unsigned integer */ is_uint a = is_int a && a >= 0; /* is_pint: is a positive integer */ is_pint a = is_int a && a > 0; /* is_preal: is a positive real */ is_preal a = is_real a && a > 0; /* is_ureal: is an unsigned real */ is_ureal a = is_real a && a >= 0; /* is_letter c: true if character c is an ASCII letter * * is_letter :: char -> bool */ is_letter c = ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z'); /* is_digit c: true if character c is an ASCII digit * * is_digit :: char->bool */ is_digit x = '0' <= x && x <= '9'; /* A whitespace character. * * is_space :: char->bool */ is_space = member " \n\t"; /* List str starts with section prefix. * * is_prefix "hell" "hello world!" == true * is_prefix :: [*] -> [*] -> bool */ is_prefix prefix str = take (len prefix) str == prefix; /* List str ends with section suffix. * * is_suffix "ld!" "hello world!" == true * is_suffix :: [*] -> [*] -> bool */ is_suffix suffix str = take (len suffix) (reverse str) == reverse suffix; /* List contains seqence. * * is_substr "llo" "hello world!" == true * is_substr :: [*] -> [*] -> bool */ is_substr seq str = any (map (is_prefix seq) (iterate tl str)); /* is_listof p s: true if finite list with p true for every element. */ is_listof p l = is_list l && all (map p l); /* is_string s: true if finite list of char. */ is_string s = is_listof is_char s; /* is_real_list l: is l a list of real numbers ... test each element, * so no infinite lists pls. */ is_real_list l = is_listof is_real l; /* is_string_list l: is l a finite list of finite strings. */ is_string_list l = is_listof is_string l; /* Test list length ... quicker than len x == n for large lists. */ is_list_len n x = true, x == [] && n == 0 = false, x == [] || n == 0 = is_list_len (n - 1) (tl x); is_list_len_more n x = true, x != [] && n == 0 = false, x == [] || n == 0 = is_list_len_more (n - 1) (tl x); is_list_len_more_equal n x = true, n == 0 = false, x == [] = is_list_len_more_equal (n - 1) (tl x); /* is_rectangular l: is l a rectangular data structure */ is_rectangular l = true, !is_list l = true, all (map is_obj l) = true, all (map is_list l) && all (map (not @ is_obj) l) && all (map is_rectangular l) && is_list_len_more 0 l && all (map (is_list_len (len (hd l))) (tl l)) = false { // treat strings as a base type, not [char] is_obj x = !is_list x || is_string x; } /* is_matrix l: is l a list of lists of real numbers, all the same length * * [[]] is the empty matrix, [] is the empty list ... disallow [] */ is_matrix l = l != [] && is_listof is_real_list l && is_rectangular l; /* is_square_matrix l: is l a matrix with width == height */ is_square_matrix l = true, l == [[]] = is_matrix l && is_list_len (len (hd l)) l; /* is_oddmatrix l: is l a matrix with odd-length sides */ is_oddmatrix l = true, l == [[]] = is_matrix l && len l % 2 == 1 && len l?0 % 2 == 1; /* is_odd_square_matrix l: is l a square_matrix with odd-length sides */ is_odd_square_matrix l = is_square_matrix l && len l % 2 == 1; /* Is an item in a column of a table? */ is_incolumn n table x = member (map (extract n) table) x; /* Is HGuide or VGuide. */ is_HGuide x = is_instanceof "HGuide" x; is_VGuide x = is_instanceof "VGuide" x; is_Guide x = is_HGuide x || is_VGuide x; is_Mark x = is_instanceof "Mark" x; is_Group x = is_instanceof "Group" x; is_NULL x = is_instanceof "NULL" x; is_List x = is_instanceof "List" x; is_Image x = is_instanceof "Image" x; is_Plot x = is_instanceof "Plot" x; is_Region x = is_instanceof "Region" x; is_Real x = is_instanceof "Real" x; is_Matrix x = is_instanceof "Matrix_base" x; is_Vector x = is_instanceof "Vector" x; is_Colour x = is_instanceof "Colour" x; is_Arrow x = is_instanceof "Arrow" x; is_Bool x = is_instanceof "Bool" x; is_Scale x = is_instanceof "Scale" x; is_Rect x = is_instanceof "Rect" x; is_Number x = is_instanceof "Number" x; is_Expression x = is_instanceof "Expression" x; is_String x = is_instanceof "String" x; /* A list of the form [[1,2],[3,4],[5,6]...] */ is_xy_list l = is_list l && all (map xy l) { xy l = is_real_list l && is_list_len 2 l; } // does a nested list structure contain a Group object? contains_Group l = true, is_list l && any (map is_Group l) = any (map contains_Group l), is_list l = false; /* Does an object have a sensible VIPS type? */ has_type x = is_image x || is_Image x || is_Arrow x || is_Colour x; /* Try to get a VIPS image type from an object. */ get_type x = get_type_im x, is_image x = get_type_im x.value, is_Image x = get_type_im x.image.value, is_Arrow x = Image_type.colour_spaces.lookup 0 1 x.colour_space, is_Colour x // slightly odd ... but our display is always 0-255, so it makes sense for // a plain number to be in the same range = Image_type.sRGB, is_real x = oo_unary_function get_type_op x, is_class x = error (_ "bad arguments to " ++ "get_type") { get_type_op = Operator "get_type" get_type Operator_type.COMPOUND false; // get the type from a VIPS image ... but only if it makes sense with // the rest of the image // we often have Type set wrong, hence the ugly guessing :-( // can have alpha, hence we let bands be one more than you might think get_type_im im = Image_type.LABQ, coding == Image_coding.LABPACK = Image_type.scRGB, coding == Image_coding.RAD = Image_type.GREY16, type == Image_type.GREY16 && is_bands 1 = Image_type.HISTOGRAM, type == Image_type.HISTOGRAM && (width == 1 || height == 1) = Image_type.B_W, is_bands 1 = Image_type.CMYK, type == Image_type.CMYK && is_bands 4 = type, is_colorimetric && is_bands 3 = Image_type.sRGB, !is_colorimetric && is_bands 3 = Image_type.MULTIBAND, !is_colorimetric && !is_bands 3 = type { type = get_header "Type" im; coding = get_header "Coding" im; bands = get_header "Bands" im; width = get_header "Xsize" im; height = get_header "Ysize" im; // 3-band colorimetric types we allow ... the things which the // Colour/Convert To menu can make, excluding mono. ok_types = [ Image_type.sRGB, Image_type.scRGB, Image_type.RGB16, Image_type.LAB, Image_type.LABQ, Image_type.LABS, Image_type.LCH, Image_type.XYZ, Image_type.YXY, Image_type.UCS ]; is_colorimetric = member ok_types type; // is bands n, with an optional alpha (ie. can be n + 1 too) is_bands n = bands == n || bands == n + 1; } } has_format x = has_member "format" x || is_Arrow x || is_image x; get_format x = x.format, has_member "format" x = x.image.format, is_Arrow x = get_header "BandFmt" x, is_image x = oo_unary_function get_format_op x, is_class x = error (_ "bad arguments to " ++ "get_format") { get_format_op = Operator "get_format" get_format Operator_type.COMPOUND false; } has_bits x = has_member "bits" x || is_Arrow x || is_image x; get_bits x = x.bits, has_member "bits" x = x.image.bits, is_Arrow x = get_header "Bbits" x, is_image x = oo_unary_function get_bits_op x, is_class x = error (_ "bad arguments to " ++ "get_bits") { get_bits_op = Operator "get_bits" get_format Operator_type.COMPOUND false; } has_bands x = is_image x || has_member "bands" x || is_Arrow x; get_bands x = x.bands, has_member "bands" x = x.image.bands, is_Arrow x = get_header "Bands" x, is_image x = 1, is_real x = len x, is_real_list x = oo_unary_function get_bands_op x, is_class x = error (_ "bad arguments to " ++ "get_bands") { get_bands_op = Operator "get_bands" get_bands Operator_type.COMPOUND false; } has_coding x = has_member "coding" x || is_Arrow x || is_image x; get_coding x = x.coding, has_member "coding" x = x.image.coding, is_Arrow x = get_header "Coding" x, is_image x = Image_coding.NOCODING, is_real x = oo_unary_function get_coding_op x, is_class x = error (_ "bad arguments to " ++ "get_coding") { get_coding_op = Operator "get_coding" get_coding Operator_type.COMPOUND false; } has_xres x = has_member "xres" x || is_Arrow x || is_image x; get_xres x = x.xres, has_member "xres" x = x.image.xres, is_Arrow x = get_header "Xres" x, is_image x = oo_unary_function get_xres_op x, is_class x = error (_ "bad arguments to " ++ "get_xres") { get_xres_op = Operator "get_xres" get_xres Operator_type.COMPOUND false; } has_yres x = has_member "yres" x || is_Arrow x || is_image x; get_yres x = x.yres, has_member "yres" x = x.image.yres, is_Arrow x = get_header "Yres" x, is_image x = oo_unary_function get_yres_op x, is_class x = error (_ "bad arguments to " ++ "get_yres") { get_yres_op = Operator "get_yres" get_yres Operator_type.COMPOUND false; } has_xoffset x = has_member "xoffset" x || is_Arrow x || is_image x; get_xoffset x = x.xoffset, has_member "xoffset" x = x.image.xoffset, is_Arrow x = get_header "Xoffset" x, is_image x = oo_unary_function get_xoffset_op x, is_class x = error (_ "bad arguments to " ++ "get_xoffset") { get_xoffset_op = Operator "get_xoffset" get_xoffset Operator_type.COMPOUND false; } has_yoffset x = has_member "yoffset" x || is_Arrow x || is_image x; get_yoffset x = x.yoffset, has_member "yoffset" x = x.image.yoffset, is_Arrow x = get_header "Yoffset" x, is_image x = oo_unary_function get_yoffset_op x, is_class x = error (_ "bad arguments to " ++ "get_yoffset") { get_yoffset_op = Operator "get_yoffset" get_yoffset Operator_type.COMPOUND false; } has_value = has_member "value"; get_value x = x.value; has_image x = is_image x || is_Image x || is_Arrow x; get_image x = x.value, is_Image x = x.image.value, is_Arrow x = x, is_image x = oo_unary_function get_image_op x, is_class x = error (_ "bad arguments to " ++ "get_image") { get_image_op = Operator "get_image" get_image Operator_type.COMPOUND false; } has_number x = is_number x || is_Real x; get_number x = x.value, is_Real x = x, is_number x = oo_unary_function get_number_op x, is_class x = error (_ "bad arguments to " ++ "get_number") { get_number_op = Operator "get_number" get_number Operator_type.COMPOUND false; } has_real x = is_real x || is_Real x; get_real x = x.value, is_Real x = x, is_real x = oo_unary_function get_real_op x, is_class x = error (_ "bad arguments to " ++ "get_real") { get_real_op = Operator "get_real" get_real Operator_type.COMPOUND false; } has_width x = has_member "width" x || is_image x; get_width x = x.width, has_member "width" x = get_header "Xsize" x, is_image x = oo_unary_function get_width_op x, is_class x = error (_ "bad arguments to " ++ "get_width") { get_width_op = Operator "get_width" get_width Operator_type.COMPOUND false; } has_height x = has_member "height" x || is_image x; get_height x = x.height, has_member "height" x = get_header "Ysize" x, is_image x = oo_unary_function get_height_op x, is_class x = error (_ "bad arguments to " ++ "get_height") { get_height_op = Operator "get_height" get_height Operator_type.COMPOUND false; } has_left x = has_member "left" x; get_left x = x.left, has_member "left" x = oo_unary_function get_left_op x, is_class x = error (_ "bad arguments to " ++ "get_left") { get_left_op = Operator "get_left" get_left Operator_type.COMPOUND false; } has_top x = has_member "top" x; get_top x = x.top, has_member "top" x = oo_unary_function get_top_op x, is_class x = error (_ "bad arguments to " ++ "get_top") { get_top_op = Operator "get_top" get_top Operator_type.COMPOUND false; } // like has/get member, but first in a lst of objects has_member_list has objects = filter has objects != []; // need one with the args swapped get_member = converse dot; // get a member from the first of a list of objects to have it get_member_list has get objects = hd members, members != [] = error "unable to get property" { members = map get (filter has objects); } is_hist x = has_image x && (h == 1 || w == 1 || t == Image_type.HISTOGRAM) { im = get_image x; w = get_width im; h = get_height im; t = get_type im; } get_header field x = oo_unary_function get_header_op x, is_class x = get_header_image x, is_image x = error (_ "bad arguments to " ++ "get_header") { get_header_op = Operator "get_header" (get_header field) Operator_type.COMPOUND false; get_header_image im = im_header_int field im, type == itype = im_header_double field im, type == dtype = im_header_string field im, type == stype1 || type == stype2 = error (_ "image has no field " ++ field), type == 0 = error (_ "unknown type for field " ++ field) { type = im_header_get_typeof field im; itype = name2gtype "gint"; dtype = name2gtype "gdouble"; stype1 = name2gtype "VipsRefString"; stype2 = name2gtype "gchararray"; } } get_header_type field x = oo_unary_function get_header_type_op x, is_class x = im_header_get_typeof field x, is_image x = error (_ "bad arguments to " ++ "get_header_type") { get_header_type_op = Operator "get_header_type" (get_header_type field) Operator_type.COMPOUND false; } set_header field value x = oo_unary_function set_header_op x, is_class x = im_copy_set_meta x field value, is_image x = error (_ "bad arguments to " ++ "set_header") { set_header_op = Operator "set_header" (set_header field value) Operator_type.COMPOUND false; } nip2-8.7.0/share/nip2/start/Widgets.def0000644000175000017500000000235313224651032014515 00000000000000Widget_slider_item = class Menuaction "_Scale" "make a new scale widget" { icon = "nip-slider-16.png"; action = Scale "untitled scale" 0 255 128; } Widget_toggle_item = class Menuaction "_Toggle" "make a new toggle widget" { action = Toggle "untitled toggle" false; } Widget_option_item = class Menuaction "_Option" "make a new option widget" { action = Option "untitled option" ["option0", "option1"] 0; } Widget_string_item = class Menuaction "St_ring" "make a new string widget" { action = String "Enter a string" "sample text"; } Widget_number_item = class Menuaction "_Number" "make a new number widget" { action = Number "Enter a number" 42; } Widget_expression_item = class Menuaction "_Expression" "make a new expression widget" { action = Expression "Enter an expression" 42; } Widget_pathname_item = class Menuaction "_File Chooser" "make a new file chooser widget" { action = Pathname "Pick a file" "$VIPSHOME/share/$PACKAGE/data/print_test_image.v"; } Widget_font_item = class Menuaction "F_ont Chooser" "make a new font chooser widget" { action = Fontname "Pick a font" Workspaces.Preferences.PAINTBOX_FONT; } Widget_clock_item = class Menuaction "_Clock" "make a new clock widget" { action = Clock 1 1; } nip2-8.7.0/share/nip2/start/Colour.def0000644000175000017500000004032613273071606014363 00000000000000 Colour_new_item = class Menupullright (_ "_New") (_ "make a patch of colour") { Widget_colour_item = class Menuaction (_ "_Colour") (_ "make a patch of colour") { action = Colour_picker "Lab" [50,0,0]; } LAB_colour = class Menuaction (_ "CIE Lab _Picker") (_ "pick colour in CIE Lab space") { action = widget "Lab" [50, 0, 0]; // ab_slice size size = 512; // range of values ... +/- 128 for ab range = 256; // map xy in slice image to ab and back xy2ab x = x / (size / range) - 128; ab2xy a = (a + 128) * (size / range); widget space default_value = class Colour space _result { _vislevel = 3; [_L, _a, _b] = default_value; L = Scale "Lightness" 0 100 _L; ab_slice = Image (lab_slice size L.value); point = Mark ab_slice (ab2xy _a) (ab2xy _b); _result = [L.value, xy2ab point.left, xy2ab point.top]; Colour_edit colour_space value = widget colour_space value; } } CCT_colour = class Menuaction (_ "Colour from CCT") (_ "pick colour by CCT") { action = widget 6500; widget x = class _result { _vislevel = 3; T = Scale "CCT" 1800 25000 x; _result = colour_from_temp (to_real T); Colour_edit space value = widget (temp_from_colour (Colour space value)); } } } Colour_to_colour_item = class Menuaction (_ "Con_vert to Colour") (_ "convert anything to a colour") { action x = to_colour x; } #separator Colour_convert_item = class Menupullright (_ "_Colourspace") (_ "convert to various colour spaces") { spaces = Image_type.image_colour_spaces; conv dest x = class _result { _vislevel = 3; to = Option_enum (_ "Convert to") spaces (spaces.get_name dest); _result = map_unary (colour_transform_to to.value_thing) x; } Mono_item = class Menuaction (_ "_Monochrome") (_ "convert to mono colourspace") { action x = conv Image_type.B_W x; } sRGB_item = class Menuaction (_ "_sRGB") (_ "convert to sRGB colourspace") { action x = conv Image_type.sRGB x; } scRGB_item = class Menuaction (_ "_scRGB") (_ "convert to scRGB colourspace") { action x = conv Image_type.scRGB x; } GREY16_item = class Menuaction (_ "_GREY16") (_ "convert to GREY16 colourspace") { action x = conv Image_type.GREY16 x; } RGB16_item = class Menuaction (_ "_RGB16") (_ "convert to RGB16 colourspace") { action x = conv Image_type.RGB16 x; } Lab_item = class Menuaction (_ "_Lab") (_ "convert to Lab colourspace (float Lab)") { action x = conv Image_type.LAB x; } LabQ_item = class Menuaction (_ "Lab_Q") (_ "convert to LabQ colourspace (32-bit Lab)") { action x = conv Image_type.LABQ x; } LabS_item = class Menuaction (_ "Lab_S") (_ "convert to LabS colourspace (48-bit Lab)") { action x = conv Image_type.LABS x; } LCh_item = class Menuaction (_ "L_Ch") (_ "convert to LCh colourspace") { action x = conv Image_type.LCH x; } XYZ_item = class Menuaction (_ "_XYZ") (_ "convert to XYZ colourspace") { action x = conv Image_type.XYZ x; } Yxy_item = class Menuaction (_ "_Yxy") (_ "convert to Yxy colourspace") { action x = conv Image_type.YXY x; } UCS_item = class Menuaction (_ "_UCS") (_ "convert to UCS colourspace") { action x = conv Image_type.UCS x; } } /* mark objects as being in various colourspaces */ Colour_tag_item = class Menupullright (_ "_Tag As") (_ "tag object as being in various colour spaces") { spaces = Image_type.image_colour_spaces; tag dest x = class _result { _vislevel = 3; to = Option_enum (_ "Tag as") spaces (spaces.get_name dest); _result = map_unary (image_set_type to.value_thing) x; } Mono_item = class Menuaction (_ "_Monochrome") (_ "tag as being in mono colourspace") { action x = tag Image_type.B_W x; } sRGB_item = class Menuaction (_ "_sRGB") (_ "tag as being in sRGB colourspace") { action x = tag Image_type.sRGB x; } scRGB_item = class Menuaction (_ "_scRGB") (_ "tag as being in scRGB colourspace") { action x = tag Image_type.scRGB x; } RGB16_item = class Menuaction (_ "_RGB16") (_ "tag as being in RGB16 colourspace") { action x = tag Image_type.RGB16 x; } GREY16_item = class Menuaction (_ "_GREY16") (_ "tag as being in GREY16 colourspace") { action x = tag Image_type.GREY16 x; } Lab_item = class Menuaction (_ "_Lab") (_ "tag as being in Lab colourspace (float Lab)") { action x = tag Image_type.LAB x; } LabQ_item = class Menuaction (_ "Lab_Q") (_ "tag as being in LabQ colourspace (32-bit Lab)") { action x = tag Image_type.LABQ x; } LabS_item = class Menuaction (_ "Lab_S") (_ "tag as being in LabS colourspace (48-bit Lab)") { action x = tag Image_type.LABS x; } LCh_item = class Menuaction (_ "L_Ch") (_ "tag as being in LCh colourspace") { action x = tag Image_type.LCH x; } XYZ_item = class Menuaction (_ "_XYZ") (_ "tag as being in XYZ colourspace") { action x = tag Image_type.XYZ x; } Yxy_item = class Menuaction (_ "_Yxy") (_ "tag as being in Yxy colourspace") { action x = tag Image_type.YXY x; } UCS_item = class Menuaction (_ "_UCS") (_ "tag as being in UCS colourspace") { action x = tag Image_type.UCS x; } } Colour_temperature_item = class Menupullright (_ "Te_mperature") (_ "colour temperature conversions") { Whitepoint_item = class Menuaction (_ "_Move Whitepoint") (_ "change whitepoint") { action x = class _result { _vislevel = 3; old_white = Option_enum (_ "Old whitepoint") Whitepoints "D65"; new_white = Option_enum (_ "New whitepoint") Whitepoints "D50"; _result = map_unary process x { process im = im''' { im' = colour_transform_to Image_type.XYZ im; im'' = im' * (new_white.value_thing / old_white.value_thing); im''' = colour_transform_to (get_type im) im''; } } } } D65_to_D50_item = class Menupullright (_ "D_65 to D50") (_ "complex conversion") { XYZ_minimal_item = class Menuaction (_ "_Minimal") (_ "D65 to D50 using the minimal 3x3 matrix in XYZ") { action x = map_unary process x { process im = im''' { im' = colour_transform_to Image_type.XYZ im; im'' = recomb D652D50_direct im'; im''' = colour_transform_to (get_type im) im''; } } } Bradford_item = class Menuaction (_ "_Bradford") (_ "D65 to D50 in Bradford cone space") { action x = map_unary process x { process im = im''' { im' = colour_transform_to Image_type.XYZ im; im'' = im_D652D50 im'; im''' = colour_transform_to (get_type im) im''; } } } } D50_to_D65_item = class Menupullright (_ "D_50 to D65") (_ "complex conversion") { XYZ_minimal_item = class Menuaction (_ "_Minimal") (_ "D50 to D65 using the minimal 3x3 matrix in XYZ") { action x = map_unary process x { process im = im''' { im' = colour_transform_to Image_type.XYZ im; im'' = recomb D502D65_direct im'; im''' = colour_transform_to (get_type im) im''; } } } Bradford_item = class Menuaction (_ "_Bradford") (_ "D60 to D65 in Bradford cone space") { action x = map_unary process x { process im = im''' { im' = colour_transform_to Image_type.XYZ im; im'' = im_D502D65 im'; im''' = colour_transform_to (get_type im) im''; } } } } Lab_to_D50XYZ_item = class Menuaction (_ "_Lab to D50 XYZ") (_ "Lab to XYZ with a D50 whitepoint") { action x = map_unary (colour_unary im_D50Lab2XYZ) x; } D50XYZ_to_Lab_item = class Menuaction (_ "D50 _XYZ to Lab") (_ "XYZ to Lab with a D50 whitepoint") { action x = map_unary (colour_unary im_D50XYZ2Lab) x; } sep1 = Menuseparator; CCT_item = class Menuaction (_ "Calculate temperature") (_ "estimate CCT using the McCamy approximation") { action z = map_unary temp_from_colour z; } Colour_item = Colour_new_item.CCT_colour; } Colour_icc_item = class Menupullright (_ "_ICC") (_ "transform with ICC profiles") { print_profile = "$VIPSHOME/share/$PACKAGE/data/cmyk.icm"; monitor_profile = "$VIPSHOME/share/$PACKAGE/data/sRGB.icm"; guess_profile image = print_profile, has_type image && get_type image == Image_type.CMYK && has_bands image && get_bands image >= 4 = monitor_profile; render_intents = Option_enum (_ "Render intent") Render_intent.names (_ "Absolute"); Export_item = class Menuaction (_ "_Export") (_ "export from PCS to device space") { action x = class _result { _vislevel = 3; profile = Pathname (_ "Output profile") print_profile; intent = render_intents; depth = Option (_ "Output depth") [_ "8 bit", _ "16 bit"] 0; _result = map_unary process x { process image = icc_export [8, 16]?depth profile.value intent.value_thing lab { lab = colour_transform_to Image_type.LABQ image; } } } } Import_item = class Menuaction (_ "_Import") (_ "import from device space to PCS") { action x = class _result { _vislevel = 3; embedded = Toggle (_ "Use embedded profile if possible") false; profile = Pathname (_ "Default input profile") (guess_profile x); intent = render_intents; _result = map_unary process x { process image = icc_import_embedded intent.value_thing image, get_header_type "icc-profile-data" image != 0 && embedded = icc_import profile.value intent.value_thing image; } } } Transform_item = class Menuaction (_ "_Transform") (_ "transform between two device spaces") { action x = class _result { _vislevel = 3; in_profile = Pathname (_ "Input profile") (guess_profile x); out_profile = Pathname (_ "Output profile") print_profile; intent = render_intents; _result = map_unary process x { process image = icc_transform in_profile.value out_profile.value intent.value_thing image; } } } AC2RC_item = class Menuaction (_ "_Absolute to Relative") (_ "absolute to relative colorimetry using device profile") { action x = class _result { _vislevel = 3; profile = Pathname (_ "Pick a profile") (guess_profile x); _result = map_unary process x { process image = icc_ac2rc profile.value lab { lab = colour_transform_to Image_type.LAB image; } } } } } Colour_rad_item = class Menupullright (_ "_Radiance") (_ "convert to and from Radiance packed format") { Unpack_item = class Menuaction (_ "Unpack") (_ "unpack Radiance format to float") { action x = map_unary rad2float x; } Pack_item = class Menuaction (_ "Pack") (_ "pack 3-band float to Radiance format") { action x = map_unary float2rad x; } } #separator Colour_dE_item = class Menupullright (_ "_Difference") (_ "calculate colour difference") { /* Apply a converter to an object ... convert image or colour (since * we can guess the colour space we're converting from), don't convert * matrix or vector (since we can't tell ... assume it's in the right * space already). */ apply_cvt cvt x = cvt x, is_Image x || is_Colour x || is_image x = x; diff cvt in1 in2 = abs_vec (apply_cvt cvt in1 - apply_cvt cvt in2); /* Converter to LAB. */ lab_cvt = colour_transform_to Image_type.LAB; /* Converter to UCS ... plain UCS is Ch form, so we go LAB again after * to make sure we get a rectangular coord system. */ ucs_cvt = colour_transform Image_type.LCH Image_type.LAB @ colour_transform_to Image_type.UCS; CIEdE76_item = class Menuaction (_ "CIE dE _76") (_ "calculate CIE dE 1976 for two objects") { action a b = map_binary (diff lab_cvt) a b; } CIEdE00_item = class Menuaction (_ "CIE dE _00") (_ "calculate CIE dE 2000 for two objects") { action a b = map_binary (colour_binary (_ "im_dE00_fromLab") im_dE00_fromLab) a b; } UCS_item = class Menuaction (_ "_CMC(l:l)") (_ "calculate CMC(l:l) for two objects") { action a b = map_binary (diff ucs_cvt) a b; } } Colour_adjust_item = class Menupullright (_ "_Adjust") (_ "alter colours in various ways") { Recombination_item = class Menuaction (_ "_Recombination") (_ "recombine colour with an editable matrix") { action x = class _result { _vislevel = 3; matrix = Matrix_rec (identity_matrix (bands x)) { // try to guess a sensible value for the size of the // matrix bands x = x.bands, is_Image x || is_Colour x = x.width, is_Matrix x = bands x.value?0, is_Group x = x.bands, has_member "bands" x = 3; } _result = map_unary (recomb matrix) x; } } Cast_item = class Menuaction (_ "_Cast") (_ "displace neutral axis in CIE Lab") { action x = class _result { _vislevel = 3; gr = Scale "Green-red" (-20) 20 0; by = Scale "Blue-yellow" (-20) 20 0; _result = map_unary adjust_cast x { adjust_cast in = colour_transform_to (get_type in) in'' { in' = colour_transform_to Image_type.LAB in; in'' = in' + Vector [0, gr.value, by.value]; } } } } HSB_item = class Menuaction (_ "_HSB") (_ "adjust hue-saturation-brightness in LCh") { action x = class _result { _vislevel = 3; h = Scale "Hue" 0 360 0; s = Scale "Saturation" 0.01 5 1; b = Scale "Brightness" 0.01 5 1; _result = map_unary adjust_hsb x { adjust_hsb in = colour_transform_to (get_type in) in'' { in' = colour_transform_to Image_type.LCH in; in'' = in' * Vector [b.value, s.value, 1] + Vector [0, 0, h.value]; } } } } } Colour_similar_item = class Menuaction (_ "_Similar Colour") (_ "find pixels with a similar colour") { action x = class _result { _vislevel = 3; target_colour = Colour_picker "Lab" [50, 0, 0]; t = Scale "dE threshold" 0 100 10; _result = map_unary match x { match in = abs_vec (in' - target) < t { target = colour_transform_to Image_type.LAB target_colour; in' = colour_transform_to Image_type.LAB in; } } } } #separator Colour_chart_to_matrix_item = class Menuaction (_ "_Measure Colour Chart") (_ "measure average pixel values for a colour chart image") { action x = class _result { _vislevel = 3; pacross = Expression (_ "Patches across chart") 6; pdown = Expression (_ "Patches down chart") 4; measure = Scale (_ "Measure area (%)") 1 100 50; // get a representative image from an arg get_image x = get_image x.value?0, is_Group x = x; _im = get_image x; sample = measure_draw (to_real pacross) (to_real pdown) (to_real measure) _im; _result = map_unary chart x { chart in = measure_sample (to_real pacross) (to_real pdown) (to_real measure) in; } } } Colour_matrix_to_chart_item = class Menuaction (_ "Make Synth_etic Colour Chart") (_ "make a colour chart image from a matrix of measurements") { action x = class _result { _vislevel = 3; pacross = Expression (_ "Patches across chart") 6; pdown = Expression (_ "Patches down chart") 4; pwidth = Expression (_ "Patch width in pixels") 50; pheight = Expression (_ "Patch height in pixels") 50; bwidth = Expression (_ "Border between patches") 0; _result = map_unary build_chart x { build_chart in = Image (imagearray_assemble (to_real bwidth) (to_real bwidth) patch_table) { // patch numbers for row starts rowstart = map (multiply (to_real pacross)) [0 .. to_real pdown - 1]; // assemble patches ... each one a pixel value patches = map (take (to_real pacross)) (map (converse drop in.value) rowstart); // make an n-band constant image from eg. [1,2,3] // we don't know the format .. use sRGB (well, why not?) patch v = image_new (to_real pwidth) (to_real pheight) (len v) Image_format.FLOAT Image_coding.NOCODING Image_type.sRGB (Vector v) 0 0; // make an image for each patch patch_table = map (map patch) patches; } } } } Colour_plot_ab_scatter_item = class Menuaction (_ "_Plot ab Scatter") (_ "plot an ab scatter histogram") { action x = class _result { _vislevel = 3; bins = Expression (_ "Number of bins on each axis") 8; _result = map_unary plot_scatter x { plot_scatter in = Image (bg * (((90 / mx) * hist) ++ blk)) { lab = colour_transform_to Image_type.LAB in.value; ab = (unsigned char) ((lab?1 ++ lab?2) + 128); hist = hist_find_nD bins.expr ab; mx = max hist; bg = lab_slice bins.expr 1; blk = 1 + im_black (to_real bins) (to_real bins) 2; } } } } nip2-8.7.0/share/nip2/start/_joe_extra.def0000644000175000017500000003225713273071606015243 00000000000000//////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// Frame_item = class Menupullright "Picture _Frame" "working with images of frames" { //////////////////////////////////////////////////////////////////////////////////// Build_frame_item = class Menupullright "_Build Frame From" "builds a new frame from image a and places it around image b" { //////////////////////////////////////////////////////////////////////////////////// Frame_corner_item = class Menuaction "_Frame Corner" "copies and extends a frame corner, a, to produce a complete frame to fit round a given image, b" { prefs = Workspaces.Preferences; action a b = class _result { _check_args = [ [a, "a", check_Image], [b, "b", check_Image] ]; _check_all = [ [a.coding == b.coding && a.bands == b.bands, "a.coding == b.coding && a.bands == b.bands"] ]; _vislevel = 3; ppcm = Expression "Number of pixels per cm" 25; /* Given the value of ppcm, distance between the inner edge of the frame * and the outer edge of the image. +ve values mean the frame overlaps * the image. */ overlap = Expression "Size of frame overlap in cm" 0; variables = Frame_variables 0; _type = Image_type.colour_spaces.get_name b.type; //If applied the count colour be seen for -ve values of overlap mount_options = Mount_options _type ppcm.expr; _cs = variables.corner_section.value; _ms = variables.middle_section.value; _ov = ppcm.expr * overlap.expr; _sf = variables.scale_factor.expr; _bf = variables.blend_fraction.value; //Scale frame image if required. _a = a, _sf == 1; = a, _sf == 0; = Image (resize Kernel_linear _sf _sf a.value); _im_w = b.width; _im_h = b.height + mount_options._los, mount_options.apply = b.height; _os = mount_options._los, mount_options.apply = 0; _cl = Vector mount_options.mount_colour.value, mount_options.apply = 0; //Produce scaled and resized frame. frame = corner_frame _a _im_w _im_h _ov _cs _ms _bf; //Resize image canvas and applied mount colour as required. _pos_im = frame_position_image b frame _os _cl; //Wrap frame round image. _result = if (frame == 0) then _pos_im else frame; } } //////////////////////////////////////////////////////////////////////////////////// Simple_frame_item = class Menuaction "_Simple Frame" "extends or shortens the central sections of a simple frame, a, to fit round a given image, b" { prefs = Workspaces.Preferences; action a b = class _result { _check_args = [ [a, "a", check_Image], [b, "b", check_Image] ]; _check_all = [ [a.coding == b.coding && a.bands == b.bands, "a.coding == b.coding && a.bands == b.bands"] ]; _vislevel = 3; ppcm = Expression "Number of pixels per cm" 25; /* Given the value of ppcm, distance between the inner edge of the frame * and the outer edge of the image. +ve values mean the frame overlaps * the image. */ overlap = Expression "Size of frame overlap in cm" 0; variables = Frame_variables 0; _type = Image_type.colour_spaces.get_name b.type; //If applied the count colour be seen for -ve values of overlap mount_options = Mount_options _type ppcm.expr; _cs = variables.corner_section.value; _ms = variables.middle_section.value; _ov = ppcm.expr * overlap.expr; _sf = variables.scale_factor.expr; _bf = variables.blend_fraction.value; //Scale frame image if required. _a = a, _sf == 1; = a, _sf == 0; = Image (resize Kernel_linear _sf _sf a.value); _im_w = b.width; _im_h = b.height + mount_options._los, mount_options.apply = b.height; _os = mount_options._los, mount_options.apply = 0; _cl = Vector mount_options.mount_colour.value, mount_options.apply = 0; //Produce scaled and resized frame. frame = simple_frame _a _im_w _im_h _ov _cs _ms _bf variables.option; //Resize image canvas and applied mount colour as required. _pos_im = frame_position_image b frame _os _cl; //Wrap frame round image. _result = if (frame == 0) then _pos_im else frame; } } //////////////////////////////////////////////////////////////////////////////////// Complex_frame_item = class Menuaction "_Complex Frame" "extends or shortens the central sections of a frame a, preserving any central edge details, to fit image b" { prefs = Workspaces.Preferences; action a b = class _result { _check_args = [ [a, "a", check_Image], [b, "b", check_Image] ]; _check_all = [ [a.coding == b.coding && a.bands == b.bands, "a.coding == b.coding && a.bands == b.bands"] ]; _vislevel = 3; ppcm = Expression "Number of pixels per cm" 25; /* Given the value of ppcm, distance between the inner edge of the frame * and the outer edge of the image. +ve values mean the frame overlaps * the image. */ overlap = Expression "Size of frame overlap in cm" 0; variables = Frame_variables 1; _type = Image_type.colour_spaces.get_name b.type; //If applied the count colour be seen for -ve values of overlap mount_options = Mount_options _type ppcm.expr; _cs = variables.corner_section.value; _es = variables.edge_section.value; _ms = variables.middle_section.value; _ov = ppcm.expr * overlap.expr; _sf = variables.scale_factor.expr; _bf = variables.blend_fraction.value; _a = a, _sf == 1; = a, _sf == 0; = Image (resize Kernel_linear _sf _sf a.value); _im_w = b.width; _im_h = b.height + mount_options._los, mount_options.apply = b.height; _os = mount_options._los, mount_options.apply = 0; _cl = Vector mount_options.colour.value, mount_options.apply = 0; //Produce scaled and resized frame. frame = complex_frame _a _im_w _im_h _ov _cs _es _ms _bf variables.option; //Resize image canvas and applied mount colour as required. _pos_im = frame_position_image b frame _os _cl; //Wrap frame round image. _result = if (frame == 0) then _pos_im else frame; } } } //////////////////////////////////////////////////////////////////////////////////// Straighten_frame_item = class Menuaction "_Straighten Frame" "uses four points to square up distorted images of frames" { action a = Perspective_item.action a; } }; //////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// Select_item = class Menupullright "_Select" "select user defined areas of an image" { prefs = Workspaces.Preferences; /* Option toggle used to define whether the user is replacing a * dark or a light area. */ _control = Option "Make" [ "Selection Brighter", "Selection Darker", "Selection Black", "Selection White", "Background Black", "Background White", "Mask" ] 4; control_selection mask im no = [ if mask then im * 1.2 else im * 1, if mask then im * 0.8 else im * 1, if mask then 0 else im, if mask then 255 else im, if mask then im else 0, if mask then im else 255, mask ]?no; Rectangle = class Menuaction "_Rectangle" "use an Arrow or Region x to define a rectangle" { action x = class _result { _vislevel = 3; control = _control; _result = control_selection mask im control { im = x.image; mask = Image m { rx = x.region_rect, is_Region x = x; b = image_new im.width im.height 1 0 0 1 0 0 0; w = image_new rx.nwidth rx.nheight 1 0 0 1 255 0 0; m = insert_noexpand rx.nleft rx.ntop w b; } } } } Elipse = class Menuaction "_Ellipse" "use a line/arrow x to define the center point radius and direction of an ellipse" { action x = class _result { _vislevel = 3; control = _control; width = Scale "Width" 0.01 1 0.5; _result = control_selection mask im control { mask = select_ellipse x width.value; im = x.image; } } } Tetragon = class Menuaction "_Tetragon" "selects the convex area defined by four points" { action a b c d = class _result { _vislevel = 3; control = _control; _result = control_selection mask im control { mask = select_tetragon a b c d; im = get_image a; } } } Polygon = class Menuaction "_Polygon" "selects a polygon from an ordered group of points" { action pt_list = class _result { _vislevel = 3; control = _control; _result = control_selection mask im control { mask = select_polygon pt_list; im = get_image ((pt_list.value)?0); } } } sep1 = Menuseparator; Threshold_item = class Menuaction "Thres_hold" "simple image threshold" { action x = class _result { _vislevel = 3; t = Scale "Threshold" 0 mx (mx / 2) { mx = Image_format.maxval x.format, is_Image x = 255; } _result = map_unary (more t.value) x; } } Threshold_percent_item = class Menuaction "Per_cent Threshold" "threshold at a percentage of pixels" { action x = class _result { _vislevel = 3; t = Scale "Percentage of pixels" 0 100 50; _result = map_unary (more (hist_thresh (t.value / 100) x)) x; } } sep2 = Menuseparator; Segment_item = class Menuaction "_Segment" "break image into disjoint regions" { action x = class _result { _vislevel = 3; segments = Expression "Number of disjoint regions" (map_unary (get_header "n-segments") _result); _result = map_unary segment x; } } Fill_item = class Menuaction "_Fill" "fill zero pixels with the nearest non-zero" { action x = class Image _result { _vislevel = 3; distance = Image _distance; [_result, _distance] = vips_call "fill_nearest" [x.value] [ "distance" => true ]; } } fill_nearest x = oo_unary_function nearest_op x, is_class x = near x, is_image x = error (_ "bad arguments to " ++ "fill_nearest") { nearest_op = Operator "fill_nearest" fill_nearest Operator_type.COMPOUND_REWRAP false; near x = [out, distance] { [out, distance] = vips_call "fill_nearest" [x] [ "distance" => true ]; } } }; //////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// Perspective_match_item = class Menuaction "_Perspective Match" "rotate, scale and skew one image to match another" { action x y = class _result { _vislevel = 3; // try to find an image ... for a group, get the first item find_image x = x, is_Image x = find_image x?0, is_list x = find_image x.value, is_class x && has_value x = error "unable to find image"; _a = find_image x; _b = find_image y; ap1 = Mark_relative _a 0.1 0.1; ap2 = Mark_relative _a 0.9 0.1; ap3 = Mark_relative _a 0.1 0.9; ap4 = Mark_relative _a 0.9 0.9; bp1 = Mark_relative _b 0.1 0.1; bp2 = Mark_relative _b 0.9 0.1; bp3 = Mark_relative _b 0.1 0.9; bp4 = Mark_relative _b 0.9 0.9; _result = map_binary process x y { f1 = _a.width / _b.width; f2 = _a.height / _b.height; rl = sort_pts_clockwise [ap1, ap2, ap3, ap4]; pl = sort_pts_clockwise [bp1, bp2, bp3, bp4]; to = [ rl?0.left, rl?0.top, rl?1.left, rl?1.top, rl?2.left, rl?2.top, rl?3.left, rl?3.top ]; from = [ pl?0.left * f1, pl?0.top * f2, pl?1.left * f1, pl?1.top * f2, pl?2.left * f1, pl?2.top * f2, pl?3.left * f1, pl?3.top * f2 ]; trans = perspective_transform to from; process a b = transform 1 0 trans b2 { b2 = resize Kernel_linear f1 f2 b, (f1 >= 1 && f2 >= 1) || (f1 >= 1 && f2 >= 1) = resize Kernel_linear f1 1 b1 {b1 = resize Kernel_linear 1 f2 b;} } } } }; //////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// Perspective_item = class Menuaction "Pe_rspective Distort" "rotate, scale and skew an image with respect to defined points" { action x = class _result { _vislevel = 3; // try to find an image ... for a group, get the first item find_image x = x, is_Image x = find_image x?0, is_list x = find_image x.value, is_class x && has_value x = error "unable to find image"; _a = find_image x; dir = Option "Select distort direction" [ "Distort to points", "Distort to corners" ] 1; ap1 = Mark_relative _a 0.1 0.1; ap2 = Mark_relative _a 0.9 0.1; ap3 = Mark_relative _a 0.9 0.9; ap4 = Mark_relative _a 0.1 0.9; _result = map_unary process x { trans = [perspective_transform to from, perspective_transform from to]?(dir.value) { rl = sort_pts_clockwise [ap1, ap2, ap3, ap4]; to = [(rl?0).left, (rl?0).top, (rl?1).left, (rl?1).top, (rl?2).left, (rl?2).top, (rl?3).left, (rl?3).top]; from=[0, 0, (_a.width - 1), 0, (_a.width - 1), (_a.height - 1), 0, (_a.height - 1)]; } process a = transform 1 0 trans a; } } }; nip2-8.7.0/share/nip2/start/_generate.def0000644000175000017500000000755513224651032015051 00000000000000 /* make an image of size x by y whose pixels are their coordinates. */ make_xy x y = im_make_xy (to_real x) (to_real y); /* make an image with the specified properties ... pixel is (eg.) * Vector [0, 0, 0], or 12. If coding == labq, we ignore bands, format and * type, generate a 3 band float image, and lab2labq it before handing it * back. */ image_new w h b fmt coding type pixel xoff yoff = embed 1 0 0 w h im'''' { b' = 3, coding == Image_coding.LABPACK = b; fmt' = Image_format.FLOAT, coding == Image_coding.LABPACK = fmt; type' = Image_type.LAB, coding == Image_coding.LABPACK = type; im = im_black 1 1 (to_real b') + pixel; im' = clip2fmt fmt' im; im'' = im_Lab2LabQ im', coding == Image_coding.LABPACK; = im'; im''' = image_set_type type' im''; im'''' = image_set_origin xoff yoff im'''; } mkim options x y b = Image (image_new x y b (opt $format) (opt $coding) (opt $type) (opt $pixel) (opt $xoffset) (opt $yoffset)) { opt = get_option options [ $format => Image_format.UCHAR, $coding => Image_coding.NOCODING, $type => Image_type.sRGB, $pixel => 0, $xoffset => 0, $yoffset => 0 ]; } /* generate a slice of LAB space size x size pixels for L* == l */ lab_slice size l = image_set_type Image_type.LAB im { L = image_new size size 1 Image_format.FLOAT Image_coding.NOCODING Image_type.B_W l 0 0; A1 = im_fgrey (to_real size) (to_real size); /* im_fgrey always makes 0-1, so these ranges can be wired in. */ A2 = A1 * 256 - 128; A4 = im_rot90 A2; im = image_set_origin (size / 2) (size / 2) (L ++ A2 ++ A4); } /* Look at Image, try to make a Colour (failing that, a Vector) which is white * for that image type. */ image_white im = colour_transform_to type white_lab, bands == 3 && coding == Image_coding.NOCODING && colour_spaces.present 1 type = white_lab, coding == Image_coding.LABPACK = Vector (replicate bands (max_value.lookup 1 0 format)) { bands = im.bands; type = im.type; format = im.format; coding = im.coding; colour_spaces = Image_type.colour_spaces; // white as LAB white_lab = Colour "Lab" [100, 0, 0]; // maximum value for this numeric type max_value = Table [ [255, Image_format.DPCOMPLEX], [255, Image_format.DOUBLE], [255, Image_format.COMPLEX], [255, Image_format.FLOAT], [2 ** 31 - 1, Image_format.INT], [2 ** 32 - 1, Image_format.UINT], [2 ** 15 - 1, Image_format.SHORT], [2 ** 16 - 1, Image_format.USHORT], [2 ** 7 - 1, Image_format.CHAR], [2 ** 8 - 1, Image_format.UCHAR] ]; } /* Make a seperable gaussian mask. */ matrix_gaussian_blur radius = im_gauss_imask_sep (radius / 3) 0.2; /* Make a seperable square mask. */ matrix_blur radius = Matrix_con (sum mask_sq_line) 0 [mask_sq_line] { mask_sq_line = replicate (2 * radius - 1) 1; } /* Make a colour from a temperature. */ colour_from_temp T = error (_ "T out of range"), T < 1667 || T > 25000 = Colour "Yxy" [50, x, y] { // Kim et all approximation // see eg. http://en.wikipedia.org/wiki/Planckian_locus#Approximation x = -0.2661239 * 10 ** 9 / T ** 3 - 0.2343580 * 10 ** 6 / T ** 2 + 0.8776956 * 10 ** 3 / T + 0.179910, T < 4000 = -3.0258469 * 10 ** 9 / T ** 3 + 2.1070379 * 10 ** 6 / T ** 2 + 0.2226347 * 10 ** 3 / T + 0.240390; y = -1.1063814 * x ** 3 - 1.34811020 * x ** 2 + 2.18555832 * x - 0.20219638, T < 2222 = -0.9549476 * x ** 3 - 1.37418593 * x ** 2 + 2.09137015 * x - 0.16748867, T < 4000 = 3.0817580 * x ** 3 - 5.87338670 * x ** 2 + 3.75112997 * x - 0.37001483; } temp_from_colour z = T { c = colour_transform_to Image_type.YXY (to_colour z); x = c.value?1; y = c.value?2; // McCamy's approximation, see eg. // http://en.wikipedia.org/wiki/Color_temperature#Approximation xe = 0.332; ye = 0.1858; n = (x - xe) / (y - ye); T = -449 * n ** 3 + 3525 * n ** 2 - 6823.3 * n + 5520.33; } nip2-8.7.0/share/nip2/start/Math.def0000644000175000017500000003162513224651032014004 00000000000000Math_arithmetic_item = class Menupullright "_Arithmetic" "basic arithmetic for objects" { Add_item = class Menuaction "_Add" "add a and b" { action a b = map_binary add a b; } Subtract_item = class Menuaction "_Subtract" "subtract b from a" { action a b = map_binary subtract a b; } Multiply_item = class Menuaction "_Multiply" "multiply a by b" { action a b = map_binary multiply a b; } Divide_item = class Menuaction "_Divide" "divide a by b" { action a b = map_binary divide a b; } Remainder_item = class Menuaction "_Remainder" "remainder after integer division of a by b" { action a b = map_binary remainder a b; } sep1 = Menuseparator; Absolute_value_item = class Menuaction "A_bsolute Value" "absolute value of x" { action x = map_unary abs x; } Absolute_value_vector_item = class Menuaction "Absolute Value _Vector" "like Absolute Value, but treat pixels as vectors" { action x = map_unary abs_vec x; } Sign_item = class Menuaction "S_ign" "unit vector" { action x = map_unary sign x; } Negate_item = class Menuaction "_Negate" "multiply by -1" { action x = map_unary unary_minus x; } } Math_trig_item = class Menupullright "_Trigonometry" "trigonometry operations (all in degrees)" { Sin_item = class Menuaction "_Sine" "calculate sine x" { action x = map_unary sin x; } Cos_item = class Menuaction "_Cosine" "calculate cosine x" { action x = map_unary cos x; } Tan_item = class Menuaction "_Tangent" "calculate tangent x" { action x = map_unary tan x; } sep1 = Menuseparator; Asin_item = class Menuaction "Arc S_ine" "calculate arc sine x" { action x = map_unary asin x; } Acos_item = class Menuaction "Arc C_osine" "calculate arc cosine x" { action x = map_unary acos x; } Atan_item = class Menuaction "Arc T_angent" "calculate arc tangent x" { action x = map_unary atan x; } sep2 = Menuseparator; Rad_item = class Menuaction "_Degrees to Radians" "convert degrees to radians" { action x = map_unary rad x; } Deg_item = class Menuaction "_Radians to Degrees" "convert radians to degrees" { action x = map_unary deg x; } sep3 = Menuseparator; Angle_range_item = class Menuaction "Angle i_n Range" "is angle within t degrees of r, mod 360" { action t r angle = clock (max - angle) < 2*r { max = clock (t + r); clock a = a + 360, a < 0; = a - 360, a >= 360; = a; } } } Math_log_item = class Menupullright "_Log" "logarithms and anti-logs" { Exponential_item = class Menuaction "_Exponential" "calculate e ** x" { action x = map_unary (power e) x; } Log_natural_item = class Menuaction "Natural _Log" "log base e of x" { action x = map_unary log x; } sep1 = Menuseparator; Exponential10_item = class Menuaction "E_xponential base 10" "calculate 10 ** x" { action x = map_unary (power 10) x; } Log10_item = class Menuaction "L_og Base 10" "log base 10 of x" { action x = map_unary log10 x; } sep2 = Menuseparator; Raise_to_power_item = class Menuaction "_Raise to Power" "calculate x ** y" { action x y = map_binary power x y; } } Math_complex_item = class Menupullright "_Complex" "operations on complex numbers and images" { Complex_extract = class Menupullright "_Extract" "extract fields from complex" { Real_item = class Menuaction "_Real" "extract real part of complex" { action in = map_unary re in; } Imaginary_item = class Menuaction "_Imaginary" "extract imaginary part of complex" { action in = map_unary im in; } } Complex_build_item = class Menuaction "_Build" "join a and b to make a complex" { action a b = map_binary comma a b; } sep1 = Menuseparator; Polar_item = class Menuaction "_Polar" "convert real and imag to amplitude and phase" { action a = map_unary polar a; } Rectangular_item = class Menuaction "_Rectagular" ("convert (amplitude, phase) image to rectangular " ++ "coordinates") { action x = map_unary rectangular x; } sep2 = Menuseparator; Conjugate_item = class Menuaction "_Conjugate" "invert imaginary part" { action x = map_unary conj x; } } Math_boolean_item = class Menupullright "_Boolean" "bitwise boolean operations for integer objects" { And_item = class Menuaction "_AND" "bitwise AND of a and b" { action a b = map_binary bitwise_and a b; } Or_item = class Menuaction "_OR" "bitwise OR of a and b" { action a b = map_binary bitwise_or a b; } Eor_item = class Menuaction "_XOR" "bitwise exclusive or of a and b" { action a b = map_binary eor a b; } Not_item = class Menuaction "_NOT" "invert a" { action a = map_unary not a; } sep1 = Menuseparator; Right_shift_item = class Menuaction "Shift _Right" "shift a right by b bits" { action a b = map_binary right_shift a b; } Left_shift_item = class Menuaction "Shift _Left" "shift a left by b bits" { action a b = map_binary left_shift a b; } sep2 = Menuseparator; If_then_else_item = class Menuaction "_If Then Else" "b where a is non-zero, c elsewhere" { action a b c = map_trinary ite a b c { // can't use if_then_else, we need a true trinary ite a b c = if a then b else c; } } Bandand_item = Image_band_item.Bandand_item; Bandor_item = Image_band_item.Bandor_item; } Math_relational_item = class Menupullright "R_elational" "comparison operations" { Equal_item = class Menuaction "_Equal to" "test a equal to b" { action a b = map_binary equal a b; } Not_equal_item = class Menuaction "_Not Equal to" "test a not equal to b" { action a b = map_binary not_equal a b; } sep1 = Menuseparator; More_item = class Menuaction "_More Than" "test a strictly greater than b" { action a b = map_binary more a b; } Less_item = class Menuaction "_Less Than" "test a strictly less than b" { action a b = map_binary less a b; } sep2 = Menuseparator; More_equal_item = class Menuaction "M_ore Than or Equal to" "test a greater than or equal to b" { action a b = map_binary more_equal a b; } Less_equal_item = class Menuaction "L_ess Than or Equal to" "test a less than or equal to b" { action a b = map_binary less_equal a b; } } Math_list_item = class Menupullright "L_ist" "operations on lists" { Head_item = class Menuaction "_Head" "first element in list" { action x = map_unary hd x; } Tail_item = class Menuaction "_Tail" "list without the first element" { action x = map_unary tl x; } Last_item = class Menuaction "_Last" "last element in list" { action x = map_unary last x; } Init_item = class Menuaction "_Init" "list without the last element" { action x = map_unary init x; } sep1 = Menuseparator; Reverse_item = class Menuaction "_Reverse" "reverse order of elements in list" { action x = map_unary reverse x; } Sort_item = class Menuaction "_Sort" "sort list into ascending order" { action x = map_unary sort x; } Make_set_item = class Menuaction "_Make Set" "remove duplicates from list" { action x = map_unary mkset equal x; } Transpose_list_item = class Menuaction "Tr_anspose" "exchange rows and columns in a list of lists" { action x = map_unary transpose x; } Concat_item = class Menuaction "_Concat" "flatten a list of lists into a single list" { action l = map_unary concat l; } sep2 = Menuseparator; Length_item = class Menuaction "L_ength" "find the length of list" { action x = map_unary len x; } Subscript_item = class Menuaction "S_ubscript" "return element n from list (index from zero)" { action n x = map_binary subscript n x; } Take_item = class Menuaction "_Take" "take the first n elements of list x" { action n x = map_binary take n x; } Drop_item = class Menuaction "_Drop" "drop the first n elements of list x" { action n x = map_binary drop n x; } sep3 = Menuseparator; Join_item = class Menuaction "_Join" "join two lists end to end" { action a b = map_binary join a b; } Difference_item = class Menuaction "_Difference" "difference of two lists" { action a b = map_binary difference a b; } Cons_item = class Menuaction "C_ons" "put element a on the front of list x" { action a x = map_binary cons a x; } Zip_item = class Menuaction "_Zip" "join two lists, pairwise" { action a b = map_binary zip2 a b; } } Math_round_item = class Menupullright "_Round" "various rounding operations" { /* smallest integral value not less than x */ Ceil_item = class Menuaction "_Ceil" "smallest integral value not less than x" { action x = map_unary ceil x; } Floor_item = class Menuaction "_Floor" "largest integral value not greater than x" { action x = map_unary floor x; } Rint_item = class Menuaction "_Round to Nearest" "round to nearest integer" { action x = map_unary rint x; } } Math_fourier_item = class Menupullright "_Fourier" "Fourier transform" { Forward_item = class Menuaction "_Forward" "fourier transform of image" { action a = map_unary (rotquad @ fwfft) a; } Reverse_item = class Menuaction "_Reverse" "inverse fourier transform of image" { action a = map_unary (invfft @ rotquad) a; } Rotate_quadrants_item = class Menuaction "Rotate _Quadrants" "rotate quadrants" { action a = map_unary rotquad a; } } Math_stats_item = class Menupullright "_Statistics" "measure various statistics of objects" { Value_item = class Menuaction "_Value" "value of point in object" { action a = class _result { _vislevel = 3; position = Expression "Coordinate" (0, 0); _result = map_binary point position.expr a; } } Mean_item = class Menuaction "_Mean" "arithmetic mean value" { action a = map_unary mean a; } Gmean_item = class Menuaction "_Geometric Mean" "geometric mean value" { action a = map_unary meang a; } Zmean_item = class Menuaction "_Zero-excluding Mean" "mean value of non-zero elements" { action a = map_unary meanze a; } Deviation_item = class Menuaction "_Standard Deviation" "standard deviation of object" { action a = map_unary deviation a; } Zdeviation_item = class Menuaction "Z_ero-excluding Standard Deviation" "standard deviation of non-zero elements" { action a = map_unary deviationze a; } Skew_item = class Menuaction "S_kew" "skew of image or list or vector" { action a = map_unary skew a; } Kurtosis_item = class Menuaction "Kurtosis" "kurtosis of image or list or vector" { action a = map_unary kurtosis a; } Stats_item = class Menuaction "Ma_ny Stats" "calculate many stats in a single pass" { action a = map_unary stats a; } sep1 = Menuseparator; Max_item = class Menuaction "M_aximum" "maximum of object" { action a = map_unary max a; } Min_item = class Menuaction "M_inimum" "minimum of object" { action a = map_unary min a; } Maxpos_item = class Menuaction "_Position of Maximum" "position of maximum in object" { action a = map_unary maxpos a; } Minpos_item = class Menuaction "P_osition of Minimum" "position of minimum in object" { action a = map_unary minpos a; } Gravity_item = class Menuaction "Centre of _Gravity" "position of centre of gravity of histogram" { action a = map_unary gravity a; } sep2 = Menuseparator; Count_set_item = class Menuaction "_Non-zeros" "number of non-zero elements in object" { action a = map_unary cset a { cset i = (mean (i != 0) * i.width * i.height) / 255; } } Count_clear_item = class Menuaction "_Zeros" "number of zero elements in object" { action a = map_unary cclear a { cclear i = (mean (i == 0) * i.width * i.height) / 255; } } Count_edges_item = class Menuaction "_Edges" "count average edges across or down image" { action x = class _result { _vislevel = 3; edge = Option "Count" [ "Horizontal lines", "Vertical lines" ] 0; _result = map_unary process x { process image = Number (edge.labels?edge) (im_cntlines image.value edge.value); } } } sep3 = Menuseparator; Linear_regression_item = class Menuaction "_Linear Regression" "fit a line to a set of points" { action xes yes = linreg xes yes; } Weighted_linear_regression_item = class Menuaction "_Weighted Linear Regression" "fit a line to a set of points and deviations" { action xes yes devs = linregw xes yes devs; } Cluster_item = class Menuaction "_Cluster" "cluster a list of numbers" { action l = class { _vislevel = 3; thresh = Expression "Threshold" 10; [_r, _w] = cluster thresh.expr l; result = _r; weights = _w; } } } Math_base_item = class Menupullright "Bas_e" "convert number bases" { Hexadecimal_item = class Menuaction "_Hexadecimal" "convert to hexadecimal (base 16)" { action a = map_unary (print_base 16) a; } Binary_item = class Menuaction "_Binary" "convert to binary (base 2)" { action a = map_unary (print_base 2) a; } Octal_item = class Menuaction "_Octal" "convert to octal (base 8)" { action a = map_unary (print_base 8) a; } } nip2-8.7.0/share/nip2/start/Tasks.def0000644000175000017500000006407313224651032014203 00000000000000Tasks_capture_item = class Menupullright "_Capture" "useful stuff for capturing and preprocessing images" { Csv_import_item = class Menuaction "_CSV Import" "read a file of comma-separated values" { action = class _result { _vislevel = 3; path = Pathname "File to load" "empty"; start_line = Expression "Start at line" 1; rows = Expression "Lines to read (-1 for whole file)" (-1); whitespace = String "Whitespace characters" " \""; separator = String "Separator characters" ",;\t"; _result = Image blank, path.value == "empty" = Image (im_csv2vips filename) { filename = search (expand path.value) ++ ":" ++ "skip:" ++ print (start_line.expr - 1) ++ "," ++ "whi:" ++ escape whitespace.value ++ "," ++ "sep:" ++ escape separator.value ++ "," ++ "line:" ++ print rows.expr; // prefix any ',' with a '\' in the separators line escape x = foldr prefix [] x { prefix x l = '\\' : x : l, x == ',' = x : l; } blank = image_new 1 1 1 Image_format.DOUBLE Image_coding.NOCODING Image_type.B_W 0 0 0; } } } Raw_import_item = class Menuaction "_Raw Import" "read a file of binary values" { action = class _result { _vislevel = 3; path = Pathname "File to load" "empty"; across = Expression "Pixels across" 100; down = Expression "Pixels down" 100; bytes = Expression "Bytes per pixel" 3; skip = Expression "Skip over initial bytes" 0; _result = Image blank, path.value == "empty" = Image (im_binfile path.value across.expr down.expr bytes.expr skip.expr) { blank = image_new 1 1 1 Image_format.DOUBLE Image_coding.NOCODING Image_type.B_W 0 0 0; } } } // interpret Analyze header for layout and calibration Analyze7_header_item = class Menuaction "_Interpret Analyze 7 Header" "examine the Analyze header and set layout and value" { action x = x''' { // read bits of header dim n = get_header ("dsr-image_dimension.dim[" ++ print n ++ "]"); dim0 = dim 0 x; dim1 = dim 1 x; dim2 = dim 2 x; dim3 = dim 3 x; dim4 = dim 4 x; dim5 = dim 5 x; dim6 = dim 6 x; dim7 = dim 7 x; glmax = get_header "dsr-image_dimension.glmax" x; cal_max = get_header "dsr-image_dimension.cal_max" x; // oops, now a nop x' = x; // lay out higher dimensions width-ways x'' = grid dim2 dim3 1 x', dim0 == 3 = grid dim2 dim3 dim4 x', dim0 == 4 = grid (dim2 * dim4) dim5 1 (grid dim2 dim3 dim4) x', dim0 == 5 = grid (dim2 * dim4) dim5 dim6 (grid dim2 dim3 dim4) x', dim0 == 6 = grid (dim2 * dim4 * dim6) dim7 1 (grid (dim2 * dim4) dim5 dim6 (grid dim2 dim3 dim4)) x', dim0 == 7 = error (_ "unsupported dimension " ++ dim0); // multiply by scale factor to get kBeq x''' = x'' * (cal_max / glmax); } } Video_item = class Menuaction "Capture _Video Frame" "capture a frame of still video" { // shortcut to prefs prefs = Workspaces.Preferences; action = class _result { _vislevel = 3; device = prefs.VIDEO_DEVICE; channel = Option "Input channel" [ "TV", "Composite 1", "Composite 2", "Composite 3" ] prefs.VIDEO_CHANNEL; b = Scale "Brightness" 0 32767 prefs.VIDEO_BRIGHTNESS; col = Scale "Colour" 0 32767 prefs.VIDEO_COLOUR; con = Scale "Contrast" 0 32767 prefs.VIDEO_CONTRAST; hue = Scale "Hue" 0 32767 prefs.VIDEO_HUE; frames = Scale "Frames to average" 0 100 prefs.VIDEO_FRAMES; mono = Toggle "Monochrome grab" prefs.VIDEO_MONO; crop = Toggle "Crop image" prefs.VIDEO_CROP; // grab, but hide it ... if we let the crop edit _raw_grab = Image (im_video_v4l1 device channel.value b.value col.value con.value hue.value frames.value); edit_crop = Region _raw_grab left top width height { left = prefs.VIDEO_CROP_LEFT; top = prefs.VIDEO_CROP_TOP; width = min_pair prefs.VIDEO_CROP_WIDTH (_raw_grab.width + left); height = min_pair prefs.VIDEO_CROP_HEIGHT (_raw_grab.height + top); } aspect_ratio = Expression "Stretch vertically by" prefs.VIDEO_ASPECT; _result = frame' { frame = edit_crop, crop = _raw_grab; frame' = colour_transform_to Image_type.B_W frame, mono = frame; } } } Smooth_image_item = class Menuaction "_Smooth" "remove small features from image" { action in = class _result { _vislevel = 3; feature = Scale "Minimum feature size" 1 50 20; _result = map_unary (smooth feature.value) in; } } Light_correct_item = class Menuaction "_Flatfield" "use white image w to flatfield image i" { action w i = map_binary wc w i { wc w i = clip2fmt i.format (w' * i) { fac = mean w / max w; w' = fac * (max w / w); } } } Image_rank_item = Filter_rank_item.Image_rank_item; Tilt_item = Filter_tilt_item; sep1 = Menuseparator; White_balance_item = class Menuaction "_White Balance" "use average of small image to set white of large image" { action a b = class _result { _vislevel = 3; white_hint = "Set image white to:"; white = Colour_picker "Lab" [100, 0, 0]; _result = map_binary wb a b { wb a b = colour_transform_to (get_type image) image_xyz' { area x = x.width * x.height; larger x y = area x > area y; [image, patch] = sortc larger [a, b]; to_xyz = colour_transform_to Image_type.XYZ; // white balance in XYZ patch_xyz = to_colour (to_xyz patch); white_xyz = to_xyz white; facs = (mean patch_xyz / mean white_xyz) * (white_xyz / patch_xyz); image_xyz = to_xyz image; image_xyz' = image_xyz * facs; } } } } Gamma_item = Image_levels_item.Gamma_item; Tone_item = Image_levels_item.Tone_item; sep2 = Menuseparator; Crop_item = Image_crop_item; Rotate_item = Image_transform_item.Rotate_item; Flip_item = Image_transform_item.Flip_item; Resize_item = Image_transform_item.Resize_item; Rubber_item = Image_transform_item.Image_rubber_item; sep3 = Menuseparator; ICC_item = Colour_icc_item; Temp_item = Colour_temperature_item; Find_calib_item = class Menuaction "Find _Colour Calibration" "find an RGB -> XYZ transform from an image of a colour chart" { action image = class _result { _check_args = [ [image, "image", check_Image] ]; _vislevel = 3; measure = Scale (_ "Measure area (%)") 1 100 50; sample = measure_draw 6 4 (to_real measure) image; // get macbeth data file to use macbeth = Pathname "Pick a Macbeth data file" "$VIPSHOME/share/$PACKAGE/data/macbeth_lab_d65.mat"; mode = Option "Input LUT" [ "Linearize from chart greyscale", "Fit intercept from chart greyscale", "Linear input, set brightness from chart", "Linear input" ] 0; // get max of input image _max_value = Image_format.maxval image.format; // measure chart image _camera = measure_sample 6 4 (to_real measure) image; // load true values _true_Lab = Matrix_file macbeth.value; _true_XYZ = colour_transform Image_type.LAB Image_type.XYZ _true_Lab; // get Ys of greyscale _true_grey_Y = map (extract 1) (drop 18 _true_XYZ.value); // camera greyscale (all bands) _camera_grey = drop 18 _camera.value; // normalise both to 0-1 and combine _camera_grey' = map (map (multiply (1 / _max_value))) _camera_grey; _true_grey_Y' = map (multiply (1 / 100)) _true_grey_Y; _comb = Matrix (map2 cons _true_grey_Y' _camera_grey'), mode == 0 = Matrix [0: intercepts, replicate (_camera.width + 1) 1], mode == 1 = Matrix [[0, 0], [1, 1]] { intercepts = [(linreg _true_grey_Y' cam).intercept :: cam <- transpose _camera_grey']; } // make a linearising lut ... zero on left _linear_lut = im_invertlut _comb (_max_value + 1); // and display it // plot from 0 explicitly so we see the effect of mode1 (intercept // from greyscale) linearising_lut = Plot [$ymin => 0] _linear_lut; // map an image though the lineariser linear x = hist_map linearising_lut.value x, mode == 0 || mode == 1 = x; // map the chart measurements though the lineariser _camera' = (to_matrix @ linear @ to_image) _camera; // solve for RGB -> XYZ // normalise: the 2nd row is what makes Y, so divide by that to // get Y in 0-1. _pinv = (transpose _camera' * _camera') ** -1; _full_M = transpose (_pinv * (transpose _camera' * _true_XYZ)); M = _full_M / scale; scale = sum _full_M.value?1; // now turn the camera to LAB and calculate dE76 _camera'' = (to_matrix @ colour_transform Image_type.XYZ Image_type.LAB @ recomb M @ multiply scale @ to_image) _camera'; _dEs = map abs_vec (_camera'' - _true_Lab).value; avg_dE76 = mean _dEs; _max_dE = foldr max_pair 0 _dEs; _worst = index (equal _max_dE) _dEs; worst_patch = name _worst ++ " (patch " ++ print (_worst + 1) ++ ", " ++ print _max_dE ++ " dE)" { name i = macbeth_names?i, i >= 0 && i < len macbeth_names = "Unknown"; } // normalise brightness ... in linear mode, we optionally don't // set the brightness from the Macbeth chart norm x = x * scale, mode != 3 = x; // convert RGB camera to Lab _result = (Image @ colour_transform Image_type.XYZ Image_type.LAB @ norm @ recomb M @ cast_float @ linear) image.value; } } Apply_calib_item = class Menuaction "_Apply Colour Calibration" "apply an RGB -> LAB transform to an image" { action a b = class (map_binary process a b) { process a b = result, is_instanceof calib_name calib && is_Image image = error (_ "bad arguments to " ++ "Calibrate_image") { // the name of the calib object we need calib_name = "Tasks_capture_item.Find_calib_item.action"; // get the Calibrate_chart arg first [image, calib] = sortc (const (is_instanceof calib_name)) [a, b]; result = (Image @ colour_transform Image_type.XYZ Image_type.LAB @ calib.norm @ recomb calib.M @ cast_float @ calib.linear) image.value; } } } sep4 = Menuseparator; Graph_hist_item = Hist_find_item; Graph_bands_item = class Menuaction "Plot _Bands" "show image bands as a graph" { action x = class _result { _vislevel = 3; style = Option_enum "Style" Plot_style.names "Line"; auto = Toggle "Auto Range" true; ymin = Expression "Y range minimum" 0; ymax = Expression "Y range maximum" 1; _result = Plot options (to_image (bands (image x))).value { options = [$style => style.value] ++ if auto then [] else [$ymin => ymin.expr, $ymax => ymax.expr]; // try to make something image-like from it image x = extract_area x.left x.top 1 1 x.image, is_Mark x = get_image x, has_image x = get_image (to_image x); // get as [[1],[2],[3]] bands x = transpose [map mean (bandsplit x)]; } } } } Tasks_mosaic_item = class Menupullright "_Mosaic" "build image mosaics" { /* Check and group a point list by image. */ mosaic_sort_test l = error "mosaic: not all points", !is_listof is_Mark l = error "mosaic: points not on two images", !is_list_len 2 images = error "mosaic: images do not match in format and coding", !all_equal (map get_format l) || !all_equal (map get_coding l) = error "mosaic: not same number of points on each image", !foldr1 equal (map len l') = l' { // test for all elements of a list equal all_equal l = all (map (equal (hd l)) (tl l)); // all the different images images = mkset pointer_equal (map get_image l); // find all points defined on image test_image image p = (get_image p) === image; find l image = filter (test_image image) l; // group point list by image l' = map (find l) images; } /* Sort a point group to get right before left, and within each group to * get above before below. */ mosaic_sort_lr l = l'' { // sort to get upper point first above a b = a.top < b.top; l' = map (sortc above) l; // sort to get right group before left group right a b = a?0.left > b?0.left; l'' = sortc right l'; } /* Sort a point group to get top before bottom, and within each group to * get left before right. */ mosaic_sort_tb l = l'' { // sort to get upper point first left a b = a.left < b.left; l' = map (sortc left) l; // sort to get right group before left group below a b = a?0.top > b?0.top; l'' = sortc below l'; } /* Put 'em together! Group by image, sort vertically (or horizontally) with * one of the above, transpose to get pairs matched up, and flatten again. */ mosaic_sort fn = concat @ transpose @ fn @ mosaic_sort_test; Mosaic_1point_item = class Menupullright "_One Point" "join two images with a single tie point" { check_ab_args a b = [ [a, "a", check_Mark], [b, "b", check_Mark] ]; // shortcut to prefs prefs = Workspaces.Preferences; search_area = prefs.MOSAIC_WINDOW_SIZE; object_size = prefs.MOSAIC_OBJECT_SIZE; blend_width_widget = Scale "Maximum blend width" 0 100 prefs.MOSAIC_MAX_BLEND_WIDTH; refine_widget = Toggle "Refine selected tie-points" prefs.MOSAIC_REFINE; lr_mos _refine a b = class Image _result { _check_args = check_ab_args a b; bw = blend_width_widget; refine = _refine; _result = im_lrmosaic a'.image.value b'.image.value 0 a'.left a'.top b'.left b'.top (object_size / 2) (search_area / 2) 0 bw.value, refine = im_lrmerge a'.image.value b'.image.value (b'.left - a'.left) (b'.top - a'.top) bw.value { [a', b'] = mosaic_sort mosaic_sort_lr [a, b]; } } tb_mos _refine a b = class Image _result { _check_args = check_ab_args a b; bw = blend_width_widget; refine = _refine; _result = im_tbmosaic a'.image.value b'.image.value 0 a'.left a'.top b'.left b'.top (object_size / 2) (search_area / 2) 0 bw.value, refine = im_tbmerge a'.image.value b'.image.value (b'.left - a'.left) (b'.top - a'.top) bw.value { [a', b'] = mosaic_sort mosaic_sort_tb [a, b]; } } Left_right_item = class Menuaction "_Left to Right" "join two images left-right with a single tie point" { action a b = lr_mos refine_widget a b; } Top_bottom_item = class Menuaction "_Top to Bottom" "join two images top-bottom with a single tie point" { action a b = tb_mos refine_widget a b; } sep1 = Menuseparator; Left_right_manual_item = class Menuaction "Manual L_eft to Right" "join left-right, no auto-adjust of tie points" { action a b = lr_mos false a b; } Top_bottom_manual_item = class Menuaction "Manual T_op to Bottom" "join top-bottom, no auto-adjust of tie points" { action a b = tb_mos false a b; } } Mosaic_2point_item = class Menupullright "_Two Point" "join two images with two tie points" { check_abcd_args a b c d = [ [a, "a", check_Mark], [b, "b", check_Mark], [c, "c", check_Mark], [d, "d", check_Mark] ]; // shortcut to prefs prefs = Workspaces.Preferences; search_area = prefs.MOSAIC_WINDOW_SIZE; object_size = prefs.MOSAIC_OBJECT_SIZE; blend_width_widget = Scale "Maximum blend width" 0 100 prefs.MOSAIC_MAX_BLEND_WIDTH; refine_widget = Toggle "Refine selected tie-points" prefs.MOSAIC_REFINE; Left_right_item = class Menuaction "_Left to Right" "join two images left-right with a pair of tie points" { action a b c d = class Image _result { _check_args = check_abcd_args a b c d; bw = blend_width_widget; refine = refine_widget; _result = im_lrmosaic1 a'.image.value b'.image.value 0 a'.left a'.top b'.left b'.top c'.left c'.top d'.left d'.top (object_size / 2) (search_area / 2) 0 bw.value, refine = im_lrmerge1 a'.image.value b'.image.value a'.left a'.top b'.left b'.top c'.left c'.top d'.left d'.top bw.value { [a', b', c', d'] = mosaic_sort mosaic_sort_lr [a, b, c, d]; } } } Top_bottom_item = class Menuaction "_Top to Bottom" "join two images top-bottom with a pair of tie points" { action a b c d = class Image _result { _check_args = check_abcd_args a b c d; bw = blend_width_widget; refine = refine_widget; _result = im_tbmosaic1 a'.image.value b'.image.value 0 a'.left a'.top b'.left b'.top c'.left c'.top d'.left d'.top (object_size / 2) (search_area / 2) 0 bw.value, refine = im_tbmerge1 a'.image.value b'.image.value a'.left a'.top b'.left b'.top c'.left c'.top d'.left d'.top bw.value { [a', b', c', d'] = mosaic_sort mosaic_sort_tb [a, b, c, d]; } } } } sep1 = Menuseparator; Balance_item = class Menuaction "Mosaic _Balance" "disassemble mosaic, scale brightness to match, reassemble" { action x = map_unary balance x { balance x = oo_unary_function balance_op x, is_class x = im_global_balancef x Workspaces.Preferences.MOSAIC_BALANCE_GAMMA, is_image x = error (_ "bad arguments to " ++ "balance") { balance_op = Operator "balance" balance Operator_type.COMPOUND_REWRAP false; } } } //////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// Manual_balance_item = class Menupullright "Manual B_alance" "balance tonality of user defined areas" { prefs = Workspaces.Preferences; //////////////////////////////////////////////////////////////////////////////////// Balance_find_item = class Menuaction "_Find Values" "calculates values required to scale and offset balance user defined areas in a given image" /* Outputs a matrix of scale and offset values. Eg. Values required to balance the secondary * structure in an X-ray image. Takes an X-ray image an 8-bit control mask and a list of * 8-bit reference masks, where the masks are white on a black background. */ { action im_in m_control m_group = class Matrix values{ _vislevel = 1; _control_im = if m_control then im_in else 0; _control_meanmax = so_meanmax _control_im; _group_check = is_Group m_group; _m_list = m_group.value, _group_check = m_group; process m_current mat_in = mat_out {so_values = so_calculate _control_meanmax im_in m_current; mat_out = join [so_values] mat_in;} values = (foldr process [] _m_list); } } //////////////////////////////////////////////////////////////////////////////////// Balance_check_item = class Menuaction "_Check Values" "allows calculated set of scale and offset values to be checked and adjusted if required" /* Outputs adjusted matrix of scale and offset values and scale and offset image maps. * Eg. Check values required to balance the secondary structure in an X-ray image. * Takes an X-ray image an 8-bit control mask and a list of 8-bit reference masks, * where the masks are white on a black background. */ { action im_in m_matrix m_group = class Image value { _vislevel = 3; blur = Scale "Blur" 1 10 1; _blur = (blur.value/2 + 0.5), blur.value > 1 = 1; _group_check = is_Group m_group; _m_list = m_group.value, _group_check = m_group; adjust = Matrix_rec mat_a { no_masks = len _m_list; mat_a = replicate no_masks [0, 0]; } // Apply the user defined adjustments to the inputted matrix of scale and offset values _adjusted = map2 fn_adjust m_matrix.value adjust.value; fn_adjust a b = [(a?0 + b?0), (a?1 + (a?1 * b?1))]; _scaled_ims = map (fn_so_apply im_in) _adjusted; fn_so_apply im so = map_unary adj im {adj im = im * (so?0) + (so?1);} _im_pairs = zip2 _m_list _scaled_ims; // Prepare black images as starting point. //////////// _blank = image_new (_m_list?0).width (_m_list?0).height 1 6 Image_coding.NOCODING 1 0 0 0; _pair_start = [(_blank + 1), _blank]; Build = Toggle "Build Scale and Offset Correction Images" false; Output = class { _vislevel = 1; scale_im = _build?0; offset_im = _build?1; so_values = Matrix _adjusted; _build = [Image so_images?0, Image so_images?1], Build = ["Scale image not built.", "Offset image not built."] { m_list' = transpose [_m_list]; m_all = map2 join m_list' _adjusted; so_images = foldr process_2 _pair_start m_all; } } value = (foldr process_1 im_in_b _im_pairs).value {im_in_b = map_unary cast_float im_in;} process_1 m_current im_start = im_out { bl_mask = convsep (matrix_blur _blur) (get_image m_current?0); blended_im = im_blend bl_mask (m_current?1).value im_start.value; im_out = Image (clip2fmt im_start.format blended_im); } // Process for building scale and offset image. process_2 current p_start = p_out { im_s = if ((current?0) > 128) then current?1 else _blank; im_o = if ((current?0) > 128) then current?2 else _blank; im_s' = convsep (matrix_blur _blur) (im_s != 0); im_o' = convsep (matrix_blur _blur) (im_o != 0); im_s'' = im_blend im_s'.value im_s.value p_start?0; im_o'' = im_blend im_o'.value im_o.value p_start?1; p_out = [im_s'', im_o'']; } } } //////////////////////////////////////////////////////////////////////////////////// Balance_apply_item = class Menuaction "_Apply Values" "apply scale and offset corrections, defined as image maps, to a given image" /* Outputs the balanced image. Eg. Balance the secondary structure in an X-ray image. Takes an * X-ray image an 32-bit float scale image and a 32-bit offset image. */ { action im_in scale_im offset_im = class Image value { _vislevel = 1; xfactor = im_in.width/scale_im.width; yfactor = im_in.height/scale_im.height; _scale_im = resize Kernel_linear xfactor yfactor scale_im; _offset_im = resize Kernel_linear xfactor yfactor offset_im; value = get_image ( clip2fmt im_in.format ( ( im_in * _scale_im ) + _offset_im ) ); } } } Tilt_item = Filter_tilt_item; sep2 = Menuseparator; Rebuild_item = class Menuaction "_Rebuild" "disassemble mosaic, substitute image files and reassemble" { action x = class _result { _vislevel = 3; old = String "In each filename, replace" "foo"; new = String "With" "bar"; _result = map_unary remosaic x { remosaic image = Image (im_remosaic image.value old.value new.value); } } } sep3 = Menuseparator; Clone_area_item = class Menuaction "_Clone Area" "replace dark or light section of im1 with pixels from im2" { action im1 im2 = class _result { _check_args = [ [im1, "im1", check_Image], [im2, "im2", check_Image] ]; _vislevel = 3; /* Region on first image placed in the top left hand corner, * positioned and size relative to the height and width of im1. */ r1 = Region_relative im1 0.05 0.05 0.05 0.05; /* Mark on second image placed in the top left hand corner, * positioned relative to the height and width of im2. Used to * define _r2, the region from which the section of image is cloned * from. */ p2 = Mark_relative im2 0.05 0.05; _r2 = Region im2 p2.left p2.top r1.width r1.height; mask = [r1 <= Options.sc, r1 >= Options.sc]?(Options.replace); Options = class { _vislevel = 3; pause = Toggle "Pause process" true; /* Option toggle used to define whether the user is * replacing a dark or a light area. */ replace = Option "Replace" [ "A Dark Area", "A Light Area" ] 1; // Used to select the area to be replaced. sc = Scale "Scale cutoff" 0.01 mx (mx / 2) {mx = Image_format.maxval im1.format;} //Allows replacement with scale&offset balanced gaussian noise. balance = Toggle "Balance cloned data to match surroundings." true; //Allows replacement with scale&offset balanced //gaussian noise. process = Toggle "Replace area with Gaussian noise." false; } _result = im1, Options.pause = Image (im_insert im1.value patch r1.left r1.top) { r2 = Region im2 p2.left p2.top r1.width r1.height; ref_meanmax = so_meanmax (if mask then 0 else r1); mask8 = Matrix_mor [[255, 255, 255], [255, 255, 255], [255, 255, 255]]; mask_a = map_unary (dilate mask8) mask; mask_b = convsep (matrix_blur 2) mask_a; patch = so_balance ref_meanmax r1 r2 mask_b Options.process, Options.balance = so_balance ref_meanmax r1 r2 mask_b Options.process, Options.process = im_blend (get_image mask_b) (get_image r2) (get_image r1); } } } } Tasks_frame_item = Frame_item; Tasks_print_item = class Menupullright "_Print" "useful stuff for image output" { Rotate_item = Image_transform_item.Rotate_item; Flip_item = Image_transform_item.Flip_item; Resize_item = Image_transform_item.Resize_item; Tone_item = Image_levels_item.Tone_item; Sharpen_item = class Menuaction "_Sharpen" "unsharp filter tuned for typical inkjet printers" { action x = class _result { _vislevel = 3; target_dpi = Option "Sharpen for print at" [ "400 dpi", "300 dpi", "150 dpi", "75 dpi" ] 1; _result = map_unary process x { process image = sharpen params?0 params?1 params?2 params?3 params?4 params?5 (colour_transform_to Image_type.LABQ image) { // sharpen params for various dpi // just change the size of the area we search param_table = [ [7, 2.5, 40, 20, 0.5, 1.5], [5, 2.5, 40, 20, 0.5, 1.5], [3, 2.5, 40, 20, 0.5, 1.5], [11, 2.5, 40, 20, 0.5, 1.5] ]; params = param_table?target_dpi; } } } } sep1 = Menuseparator; Temp_item = Colour_temperature_item; ICC_item = Colour_icc_item; } nip2-8.7.0/share/nip2/start/_types.def0000644000175000017500000007534513330330606014424 00000000000000/* A list of things. Do automatic iteration of unary and binary operators on * us. * List [1, 2] + [2, 3] -> List [3, 5] * hd (List [2, 3]) -> 2 * List [] == [] -> true */ List value = class _Object { _check_args = [ [value, "value", check_list] ]; // methods oo_binary_table op x = [ [apply2 op value x', op.op_name == "subscript" || op.op_name == "subscript'" || op.op_name == "equal" || op.op_name == "equal'"], [this.List (apply2 op value x'), op.op_name == "join" || op.op_name == "join'"], [this.List (map2 (apply2 op) value x'), is_list x'], [this.List (map (apply2 op' x) value), true] ] ++ super.oo_binary_table op x { op' = oo_converse op; // strip the List wrapper, if any x' = x.value, is_List x = x; apply2 op x1 x2 = oo_binary_function op x1 x2, is_class x1 = oo_binary'_function op x1 x2, is_class x2 = op.fn x1 x2; }; oo_unary_table op = [ [apply value, op.op_name == "hd" || op.op_name == "tl"], [this.List (map apply value), true] ] ++ super.oo_unary_table op { apply x = oo_unary_function op x, is_class x = op.fn x; } } /* A group of things. Loop the operation over the group. */ Group value = class _Object { _check_args = [ [value, "value", check_list] ]; // methods oo_binary_table op x = [ // if_then_else is really a trinary operator [map_trinary ite this x?0 x?1, op.op_name == "if_then_else"], [map_binary op.fn this x, is_Group x], [map_unary (\a op.fn a x) this, true] ] ++ super.oo_binary_table op x; oo_unary_table op = [ [map_unary op.fn this, true] ] ++ super.oo_unary_table op; // we can't call map_trinary directly, since it uses Group and we // don't support mutually recursive top-level functions :-( // copy-paste it here, keep in sync with the version in _stdenv map_nary fn args = fn args, groups == [] = Group (map process [0, 1 .. shortest - 1]) { groups = filter is_Group args; shortest = foldr1 min_pair (map (len @ get_value) groups); process n = NULL, any (map (is_noval n) args) = map_nary fn (map (extract n) args) { extract n arg = arg.value?n, is_Group arg = arg; is_noval n arg = is_Group arg && arg.value?n == NULL; } } // need ite as a true trinary ite a b c = if a then b else c; map_unary fn a = map_nary (list_1ary fn) [a]; map_binary fn a b = map_nary (list_2ary fn) [a, b]; map_trinary fn a b c = map_nary (list_3ary fn) [a, b, c]; } /* Single real number ... eg slider. */ Real value = class _Object { _check_args = [ [value, "value", check_real] ]; // methods oo_binary_table op x = [ [this.Real (op.fn this.value x.value), is_Real x && op.type == Operator_type.ARITHMETIC], [this.Real (op.fn this.value x), is_real x && op.type == Operator_type.ARITHMETIC], [op.fn this.value x.value, is_Real x && op.type == Operator_type.RELATIONAL], [op.fn this.value x, !is_class x] ] ++ super.oo_binary_table op x; oo_unary_table op = [ [this.Real (op.fn this.value), op.type == Operator_type.ARITHMETIC], [op.fn this.value, true] ] ++ super.oo_unary_table op; } /* Single bool ... eg Toggle. */ Bool value = class _Object { _check_args = [ [value, "value", check_bool] ]; // methods oo_binary_table op x = [ [op.fn this.value x, op.op_name == "if_then_else"], [this.Bool (op.fn this.value x.value), is_Bool x], [this.Bool (op.fn this.value x), is_bool x] ] ++ super.oo_binary_table op x; oo_unary_table op = [ [this.Bool (op.fn this.value), op.type == Operator_type.ARITHMETIC || op.type == Operator_type.RELATIONAL], [op.fn this.value, true] ] ++ super.oo_unary_table op; } /* An editable string. */ String caption value = class _Object { _check_args = [ [caption, "caption", check_string], [value, "value", check_string] ]; } /* An editable real number. */ Number caption value = class scope.Real value { _check_args = [ [caption, "caption", check_string] ]; Real x = this.Number caption x; } /* An editable expression. */ Expression caption expr = class (if is_class expr then expr else _Object) { _check_args = [ [caption, "caption", check_string], [expr, "expr", check_any] ]; } /* A ticking clock. */ Clock interval value = class scope.Real value { _check_args = [ [interval, "interval", check_real] ]; Real x = this.Clock interval x; } /* An editable filename. */ Pathname caption value = class _Object { _check_args = [ [caption, "caption", check_string], [value, "value", check_string] ]; } /* An editable fontname. */ Fontname caption value = class _Object { _check_args = [ [caption, "caption", check_string], [value, "value", check_string] ]; } /* Vector type ... just a finite list of real. Handy for wrapping an * argument to eg. im_lintra_vec. Make it behave like a single pixel image. */ Vector value = class _Object { _check_args = [ [value, "value", check_real_list] ]; bands = len value; // methods oo_binary_table op x = [ // Vector ++ Vector means bandwise join [this.Vector (op.fn this.value x.value), is_Vector x && (op.op_name == "join" || op.op_name == "join'")], [this.Vector (op.fn this.value [get_number x]), has_number x && (op.op_name == "join" || op.op_name == "join'")], // Vector ? number means extract element [op.fn this.value (get_real x), has_real x && (op.op_name == "subscript" || op.op_name == "subscript'")], // extra check for lengths equal [this.Vector (map_binaryl op.fn this.value x.value), is_Vector x && len value == len x.value && op.type == Operator_type.ARITHMETIC], [this.Vector (map_binaryl op.fn this.value (get_real x)), has_real x && op.type == Operator_type.ARITHMETIC], // need extra length check [this.Vector (map bool_to_real (map_binaryl op.fn this.value x.value)), is_Vector x && len value == len x.value && op.type == Operator_type.RELATIONAL], [this.Vector (map bool_to_real (map_binaryl op.fn this.value (get_real x))), has_real x && op.type == Operator_type.RELATIONAL], [this.Vector (op.fn this.value x.value), is_Vector x && len value == len x.value && op.type == Operator_type.COMPOUND_REWRAP], [x.Image (vec op'.op_name x.value value), is_Image x], [vec op'.op_name x value, is_image x], [op.fn this.value x, is_real x] ] ++ super.oo_binary_table op x { op' = oo_converse op; }; oo_unary_table op = [ [this.Vector (map_unaryl op.fn this.value), op.type == Operator_type.ARITHMETIC], [this.Vector (map bool_to_real (map_unaryl op.fn this.value)), op.type == Operator_type.RELATIONAL], [this.Vector (op.fn this.value), op.type == Operator_type.COMPOUND_REWRAP], [op.fn this.value, true] ] ++ super.oo_unary_table op; // turn an ip bool (or a number, for Vector) into VIPSs 255/0 bool_to_real x = 255, is_bool x && x = 255, is_number x && x != 0 = 0; } /* A rectangular array of real. */ Matrix_base value = class _Object { _check_args = [ [value, "value", check_matrix] ]; // calculate these from value width = len value?0; height = len value; // extract a rectanguar area extract left top width height = this.Matrix_base ((map (take width) @ map (drop left) @ take height @ drop top) value); // methods oo_binary_table op x = [ // mat multiply is special [this.Matrix_base mul.value, is_Matrix x && op.op_name == "multiply"], [this.Matrix_base mul'.value, is_Matrix x && op.op_name == "multiply'"], // mat divide is also special [this.Matrix_base div.value, is_Matrix x && op.op_name == "divide"], [this.Matrix_base div'.value, is_Matrix x && op.op_name == "divide'"], // power -1 means invert [this.Matrix_base inv.value, is_real x && x == -1 && op.op_name == "power"], [this.Matrix_base sq.value, is_real x && x == 2 && op.op_name == "power"], [error "matrix **-1 and **2 only", op.op_name == "power" || op.op_name == "power'"], // matrix op vector ... treat a vector as a 1 row matrix [this.Matrix_base (map (map_binaryl op'.fn x.value) this.value), is_Vector x && op.type == Operator_type.ARITHMETIC], [this.Matrix_base (map_binaryl op.fn this.value x.value), (is_Matrix x || is_Real x) && op.type == Operator_type.ARITHMETIC], [this.Matrix_base (map_binaryl op.fn this.value x), is_real x && op.type == Operator_type.ARITHMETIC], // compound ... don't do iteration [this.Matrix_base (op.fn this.value x.value), (is_Matrix x || is_Real x || is_Vector x) && op.type == Operator_type.COMPOUND_REWRAP], [op.fn this.value x, op.type == Operator_type.COMPOUND] ] ++ super.oo_binary_table op x { mul = im_matmul this x; mul' = im_matmul x this; div = im_matmul this (im_matinv x); div' = im_matmul x (im_matinv this); inv = im_matinv this; sq = im_matmul this this; op' = oo_converse op; } oo_unary_table op = [ [this.Matrix_base (map_unaryl op.fn this.value), op.type == Operator_type.ARITHMETIC], [this.Matrix_base (op.fn this.value), op.type == Operator_type.COMPOUND_REWRAP], [op.fn this.value, true] ] ++ super.oo_unary_table op; } /* How to display a matrix: text, sliders, toggles, or text plus scale/offset. */ Matrix_display = class { text = 0; slider = 1; toggle = 2; text_scale_offset = 3; is_display = member [text, slider, toggle, text_scale_offset]; } /* A matrix as VIPS sees them ... add scale, offset and filename. For nip, add * a display type as well to control how the widget renders. */ Matrix_vips value scale offset filename display = class scope.Matrix_base value { _check_args = [ [scale, "scale", check_real], [offset, "offset", check_real], [filename, "filename", check_string], [display, "display", check_matrix_display] ]; Matrix_base x = this.Matrix_vips x scale offset filename display; } /* A plain 'ol matrix which can be passed to VIPS. */ Matrix value = class Matrix_vips value 1 0 "" Matrix_display.text {} /* Specialised constructors ... for convolutions, recombinations and * morphologies. */ Matrix_con scale offset value = class Matrix_vips value scale offset "" Matrix_display.text_scale_offset {}; Matrix_rec value = class Matrix_vips value 1 0 "" Matrix_display.slider {}; Matrix_mor value = class Matrix_vips value 1 0 "" Matrix_display.toggle {}; Matrix_file filename = (im_read_dmask @ expand @ search) filename; /* A CIE colour ... a triple, plus a format (eg XYZ, Lab etc) */ Colour colour_space value = class scope.Vector value { _check_args = [ [colour_space, "colour_space", check_colour_space] ]; _check_all = [ [is_list_len 3 value, "len value == 3"] ]; Vector x = this.Colour colour_space x; // make a colour-ish thing from an image // back to Colour if we have another 3 band image // to a vector if bands > 1 // to a number otherwise itoc im = this.Colour nip_type (to_matrix im).value?0, bands == 3 = scope.Vector (map mean (bandsplit im)), bands > 1 = mean im { type = get_header "Type" im; bands = get_header "Bands" im; nip_type = Image_type.colour_spaces.lookup 1 0 type; } // methods oo_binary_table op x = [ [itoc (op.fn ((float) (to_image this).value) ((float) (to_image x).value)), // here REWRAP means go via image op.type == Operator_type.COMPOUND_REWRAP] ] ++ super.oo_binary_table op x; oo_unary_table op = [ [itoc (op.fn ((float) (to_image this).value)), op.type == Operator_type.COMPOUND_REWRAP] ] ++ super.oo_unary_table op; } // a subclass with widgets for picking a space and value Colour_picker default_colour default_value = class Colour space.item colour.expr { _vislevel = 3; space = Option_enum "Colour space" Image_type.colour_spaces default_colour; colour = Expression "Colour value" default_value; Colour_edit colour_space value = Colour_picker colour_space value; } /* Base scale type. */ Scale caption from to value = class scope.Real value { _check_args = [ [caption, "caption", check_string], [from, "from", check_real], [to, "to", check_real] ]; _check_all = [ [from < to, "from < to"] ]; Real x = this.Scale caption from to x; // methods oo_binary_table op x = [ [this.Scale caption (op.fn this.from x.from) (op.fn this.to x.to) (op.fn this.value x.value), is_Scale x && op.type == Operator_type.ARITHMETIC], [this.Scale caption (op.fn this.from x) (op.fn this.to x) (op.fn this.value x), is_real x && op.type == Operator_type.ARITHMETIC] ] ++ super.oo_binary_table op x; } /* Base toggle type. */ Toggle caption value = class scope.Bool value { _check_args = [ [caption, "caption", check_string], [value, "value", check_bool] ]; Bool x = this.Toggle caption x; } /* Base option type. */ Option caption labels value = class scope.Real value { _check_args = [ [caption, "caption", check_string], [labels, "labels", check_string_list], [value, "value", check_uint] ]; } /* An option whose value is a string rather than a number. */ Option_string caption labels item = class Option caption labels (index (equal item) labels) { Option_edit caption labels value = this.Option_string caption labels (labels?value); } /* Make an option from an enum. */ Option_enum caption enum item = class Option_string caption enum.names item { // corresponding thing value_thing = enum.get_thing item; Option_edit caption labels value = this.Option_enum caption enum (enum.names?value); } /* A rectangle. width and height can be -ve. */ Rect left top width height = class _Object { _check_args = [ [left, "left", check_real], [top, "top", check_real], [width, "width", check_real], [height, "height", check_real] ]; // derived right = left + width; bottom = top + height; oo_binary_table op x = [ [equal x, is_Rect x && (op.op_name == "equal" || op.op_name == "equal'")], [!equal x, is_Rect x && (op.op_name == "not_equal" || op.op_name == "not_equal'")], // binops with a complex are the same as (comp op comp) [oo_binary_function op this (Rect (re x) (im x) 0 0), is_complex x], // all others are just pairwise [this.Rect left' top' width' height', is_Rect x && op.type == Operator_type.ARITHMETIC], [this.Rect left'' top'' width'' height'', has_number x && op.type == Operator_type.ARITHMETIC] ] ++ super.oo_binary_table op x { left' = op.fn left x.left; top' = op.fn top x.top; width' = op.fn width x.width; height' = op.fn height x.height; left'' = op.fn left x'; top'' = op.fn top x'; width'' = op.fn width x'; height'' = op.fn height x'; x' = get_number x; } oo_unary_table op = [ // arithmetic uops just map [this.Rect left' top' width' height', op.type == Operator_type.ARITHMETIC], // compound uops are just like ops on complex // do (width, height) so thing like abs(Arrow) work as you'd expect [op.fn (width, height), op.type == Operator_type.COMPOUND] ] ++ super.oo_unary_table op { left' = op.fn left; top' = op.fn top; width' = op.fn width; height' = op.fn height; } // empty? ie. contains no pixels is_empty = width == 0 || height == 0; // normalised version, ie. make width/height +ve and flip the origin nleft = left + width, width < 0 = left; ntop = top + height, height < 0 = top; nwidth = abs width; nheight = abs height; nright = nleft + nwidth; nbottom = ntop + nheight; equal x = left == x.left && top == x.top && width == x.width && height == x.height; // contains a point? includes_point x y = nleft <= x && x <= nright && ntop <= y && y <= nbottom; // contains a rect? just test top left and bottom right points includes_rect r = includes_point r.nleft r.ntop && includes_point r.nright r.nbottom; // bounding box of two rects // if either is empty, can just return the other union r = r, is_empty = this, r.is_empty = Rect left' top' width' height' { left' = min_pair nleft r.nleft; top' = min_pair ntop r.ntop; width' = max_pair nright r.nright - left'; height' = max_pair nbottom r.nbottom - top'; } // intersection of two rects ... empty rect if no intersection intersect r = Rect left' top' width'' height'' { left' = max_pair nleft r.nleft; top' = max_pair ntop r.ntop; width' = min_pair nright r.nright - left'; height' = min_pair nbottom r.nbottom - top'; width'' = width', width > 0 = 0; height'' = height', height > 0 = 0; } // expand/collapse by n pixels margin_adjust n = Rect (left - n) (top - n) (width + 2 * n) (height + 2 * n); } /* Values for Compression field in image. */ Image_compression = class { NONE = 0; NO_COMPRESSION = 0; TCSF_COMPRESSION = 1; JPEG_COMPRESSION = 2; LABPACK_COMPRESSED = 3; RGB_COMPRESSED = 4; LUM_COMPRESSED = 5; } /* Values for Coding field in image. */ Image_coding = class { NONE = 0; NOCODING = 0; COLQUANT = 1; LABPACK = 2; RAD = 6; } /* Values for BandFmt field in image. */ Image_format = class { DPCOMPLEX = 9; DOUBLE = 8; COMPLEX = 7; FLOAT = 6; INT = 5; UINT = 4; SHORT = 3; USHORT = 2; CHAR = 1; UCHAR = 0; NOTSET = -1; maxval fmt = [ 255, // UCHAR 127, // CHAR 65535, // USHORT 32767, // SHORT 4294967295, // UINT 2147483647, // INT 255, // FLOAT 255, // COMPLEX 255, // DOUBLE 255 // DPCOMPLEX ] ? fmt, fmt >= 0 && fmt <= DPCOMPLEX = error (_ "bad value for BandFmt"); } /* A lookup table. */ Table value = class _Object { _check_args = [ [value, "value", check_rectangular] ]; /* Extract a column. */ column n = map (extract n) value; /* present col x: is there an x in column col */ present col x = member (column col) x; /* Look on column from, return matching item in column to. */ lookup from to x = value?n?to, n >= 0 = error (_ "item" ++ " " ++ print x ++ " " ++ _ "not in table") { n = index (equal x) (column from); } } /* A two column lookup table with the first column a string and the second a * thing. Used for representing various enums. Option_enum makes a selector * from one of these. */ Enum value = class Table value { _check_args = [ [value, "value", check_enum] ] { check_enum = [is_enum, _ "is [[char, *]]"]; is_enum x = is_rectangular x && is_listof is_string (map (extract 0) x); } // handy ... all the names and things as lists names = this.column 0; things = this.column 1; // is a legal name or thing has_name x = this.present 1 x; has_thing x = this.present 0 x; // map things to strings and back get_name x = this.lookup 1 0 x; get_thing x = this.lookup 0 1 x; } /* Type field. */ Image_type = class { MULTIBAND = 0; B_W = 1; HISTOGRAM = 10; XYZ = 12; LAB = 13; CMYK = 15; LABQ = 16; RGB = 17; UCS = 18; LCH = 19; LABS = 21; sRGB = 22; YXY = 23; FOURIER = 24; RGB16 = 25; GREY16 = 26; ARRAY = 27; scRGB = 28; /* Table to get names <-> numbers. */ type_names = Enum [ $MULTIBAND => MULTIBAND, $B_W => B_W, $HISTOGRAM => HISTOGRAM, $XYZ => XYZ, $LAB => LAB, $CMYK => CMYK, $LABQ => LABQ, $RGB => RGB, $UCS => UCS, $LCH => LCH, $LABS => LABS, $sRGB => sRGB, $YXY => YXY, $FOURIER => FOURIER, $RGB16 => RGB16, $GREY16 => GREY16, $ARRAY => ARRAY, $scRGB => scRGB ]; /* Table relating nip's colour space names and VIPS's Type numbers. * Options are generated from this, so match the order to the order in * the Colour menu. */ colour_spaces = Enum [ $sRGB => sRGB, $scRGB => scRGB, $Lab => LAB, $LCh => LCH, $XYZ => XYZ, $Yxy => YXY, $UCS => UCS ]; /* A slightly larger table ... the types of colorimetric image we can * have. Add mono, and the S and Q forms of LAB. */ image_colour_spaces = Enum [ $Mono => B_W, $sRGB => sRGB, $scRGB => scRGB, $RGB16 => RGB16, $GREY16 => GREY16, $Lab => LAB, $LabQ => LABQ, $LabS => LABS, $LCh => LCH, $XYZ => XYZ, $Yxy => YXY, $UCS => UCS ]; } /* Base image type. Simple layer over vips_image. */ Image value = class _Object { _check_args = [ [value, "value", check_image] ]; // fields from VIPS header width = get_width value; height = get_height value; bands = get_bands value; format = get_format value; bits = get_bits value; coding = get_coding value; type = get_type value; xres = get_header "Xres" value; yres = get_header "Yres" value; xoffset = get_header "Xoffset" value; yoffset = get_header "Yoffset" value; filename = get_header "filename" value; // convenience ... the area our pixels occupy, as a rect rect = Rect 0 0 width height; // operator overloading // (op Image Vector) done in Vector class oo_binary_table op x = [ // handle image ++ constant here [wrap join_result_image, (has_real x || is_Vector x) && (op.op_name == "join" || op.op_name == "join'")], [wrap ite_result_image, op.op_name == "if_then_else"], [wrap (op.fn this.value (get_image x)), has_image x], [wrap (op.fn this.value (get_number x)), has_number x], // if it's not a class on the RHS, handle here ... just apply and // rewrap [wrap (op.fn this.value x), !is_class x] // all other cases handled by other classes ] ++ super.oo_binary_table op x { // wrap the result with this // x can be a non-image, eg. compare "Image v == []" vs. // "Image v == 12" wrap x = x, op.type == Operator_type.COMPOUND || !is_image x = this.Image x; join_result_image = value ++ new_stuff, op.op_name == "join" = new_stuff ++ value { new_stuff = image_new width height new_bands format coding Image_type.B_W x xoffset yoffset; new_bands = get_bands x, has_bands x = 1; } [then_part, else_part] = x; // get things about our output from inputs in this order objects = [then_part, else_part, this]; // properties of our output image target_bands = get_member_list has_bands get_bands objects; target_type = get_member_list has_type get_type objects; // if one of then/else is an image, get the target format from that // otherwise, let the non-image objects set the target target_format = get_member_list has_format get_format x, has_member_list has_format x = NULL; to_image x = to_image_size width height target_bands target_format x; [then', else'] = map to_image x; ite_result_image = image_set_type target_type (if value then then' else else'); } // FIXME ... yuk ... don't use operator hints, just always rewrap if // we have an image result // forced on us by things like abs: // abs Vector -> real // abs Image -> Image // does not fit well with COMPOUND/whatever scheme oo_unary_table op = [ [this.Image result, is_image result], [result, true] ] ++ super.oo_unary_table op { result = op.fn this.value; } } /* Construct an image from a file. */ Image_file filename = class Image value { _check_args = [ [filename, "filename", check_string] ]; value = vips_image filename; } Region image left top width height = class Image value { _check_args = [ [image, "Image", check_Image], [left, "left", check_real], [top, "top", check_real], [width, "width", check_preal], [height, "height", check_preal] ]; // a rect for our coordinates // region.rect gets the rect for the extracted image region_rect = Rect left top width height; // we need to always succeed ... value is our enclosing image if we're // out of bounds value = extract_area left top width height image.value, image.rect.includes_rect region_rect = image.value; } Area image left top width height = class scope.Region image left top width height { Region image left top width height = this.Area image left top width height; } Arrow image left top width height = class scope.Rect left top width height { _check_args = [ [image, "Image", check_Image], [left, "left", check_real], [top, "top", check_real], [width, "width", check_real], [height, "height", check_real] ]; Rect l t w h = this.Arrow image l t w h; } HGuide image top = class scope.Arrow image image.rect.left top image.width 0 { Arrow image left top width height = this.HGuide image top; } VGuide image left = class scope.Arrow image left image.rect.top 0 image.height { Arrow image left top width height = this.VGuide image left; } Mark image left top = class scope.Arrow image left top 0 0 { Arrow image left top width height = this.Mark image left top; } // convenience functions: ... specify position as [0 .. 1) Region_relative image u v w h = Region image (image.width * u) (image.height * v) (image.width * w) (image.height * h); Area_relative image u v w h = Area image (image.width * u) (image.height * v) (image.width * w) (image.height * h); Arrow_relative image u v w h = Arrow image (image.width * u) (image.height * v) (image.width * w) (image.height * h); VGuide_relative image v = VGuide image (image.height * v); HGuide_relative image u = HGuide image (image.width * u); Mark_relative image u v = Mark image (image.width * u) (image.height * v); Kernel_type = class { NEAREST_NEIGHBOUR = 0; LINEAR = 1; CUBIC = 2; MITCHELL = 3; LANCZOS2 = 4; LANCZOS3 = 5; // Should introspect to get the list of interpolators :-( // We can "dir" on VipsInterpolate to get a list of them, but we // can't get i18n'd descriptions until we have more // introspection stuff in nip2. /* Table to map kernel numbers to descriptive strings */ descriptions = [ _ "Nearest neighbour", _ "Linear", _ "Cubic", _ "Mitchell", _ "Lanczos, two lobes", _ "Lanczos, three lobes" ]; /* And to vips enum nicknames. */ types = [ "nearest", "linear", "cubic", "mitchell", "lanczos2", "lanczos3" ]; } Kernel type = class { value = Kernel_type.types?type; } Kernel_linear = Kernel Kernel_type.LINEAR; Kernel_picker default = class Kernel kernel.value { _vislevel = 2; kernel = Option "Kernel" Kernel_type.descriptions default; } Interpolate_type = class { NEAREST_NEIGHBOUR = 0; BILINEAR = 1; BICUBIC = 2; LBB = 3; NOHALO = 4; VSQBS = 5; // Should introspect to get the list of interpolators :-( // We can "dir" on VipsInterpolate to get a list of them, but we // can't get i18n'd descriptions until we have more // introspection stuff in nip2. /* Table to map interpol numbers to descriptive strings */ descriptions = [ _ "Nearest neighbour", _ "Bilinear", _ "Bicubic", _ "Upsize: reduced halo bicubic (LBB)", _ "Upsharp: reduced halo bicubic with edge sharpening (Nohalo)", _ "Upsmooth: quadratic B-splines with jaggy reduction (VSQBS)" ]; /* And to vips type names. */ types = [ "VipsInterpolateNearest", "VipsInterpolateBilinear", "VipsInterpolateBicubic", "VipsInterpolateLbb", "VipsInterpolateNohalo", "VipsInterpolateVsqbs" ]; } Interpolate type options = class { value = vips_object_new Interpolate_type.types?type [] options; } Interpolate_bilinear = Interpolate Interpolate_type.BILINEAR []; Interpolate_picker default = class Interpolate interp.value [] { _vislevel = 2; interp = Option "Interpolation" Interpolate_type.descriptions default; } Render_intent = class { PERCEPTUAL = 0; RELATIVE = 1; SATURATION = 2; ABSOLUTE = 3; /* Table to get names <-> numbers. */ names = Enum [ _ "Perceptual" => PERCEPTUAL, _ "Relative" => RELATIVE, _ "Saturation" => SATURATION, _ "Absolute" => ABSOLUTE ]; } // abstract base class for toolkit menus Menu = class {} // a "----" line in a menu Menuseparator = class Menu {} // abstract base class for items in menus Menuitem label tooltip = class Menu {} Menupullright label tooltip = class Menuitem label tooltip {} Menuaction label tooltip = class Menuitem label tooltip {} /* Plots. */ Plot_style = class { POINT = 0; LINE = 1; SPLINE = 2; BAR = 3; names = Enum [ _ "Point" => POINT, _ "Line" => LINE, _ "Spline" => SPLINE, _ "Bar" => BAR ]; } Plot_format = class { YYYY = 0; XYYY = 1; XYXY = 2; names = Enum [ _ "YYYY" => YYYY, _ "XYYY" => XYXY, _ "XYXY" => XYXY ]; } Plot_type = class { /* Lots of Ys (ie. multiple line plots). */ YYYY = 0; /* First column of matrix is X position, others are Ys (ie. multiple XY * line plots, all with the same Xes). */ XYYY = 1; /* Many independent XY plots. */ XYXY = 2; } /* "options" is a list of ["key", value] pairs. */ Plot options value = class scope.Image value { Image value = this.Plot options value; to_image dpi = extract_bands 0 3 (graph_export_image (to_real dpi) this); } Plot_matrix options value = class Plot options (to_image value).value { } Plot_histogram value = class scope.Plot [] value { } Plot_xy value = class scope.Plot [$format => Plot_format.XYYY] value { } /* A no-value type. Call it NULL for C-alike fun. Used by Group to indicate * empty slots, for example. */ NULL = class _Object { oo_binary_table op x = [ // the only operation we allow is equality .. use pointer equality, // this lets us test a == NULL and a != NULL [this === x, op.type == Operator_type.RELATIONAL && op.op_name == "equal"], [this !== x, op.type == Operator_type.RELATIONAL && op.op_name == "not_equal"] ] ++ super.oo_binary_table op x; } Blend_type = class { CLEAR = 0; SOURCE = 1; OVER = 2; IN = 3; OUT = 4; ATOP = 5; DEST = 6; DEST_OVER = 7; DEST_IN = 8; DEST_OUT = 9; DEST_ATOP = 10; XOR = 11; ADD = 12; SATURATE = 13; MULTIPLY = 14; SCREEN = 15; OVERLAY = 16; DARKEN = 17; LIGHTEN = 18; COLOUR_DODGE = 19; COLOUR_BURN = 20; HARD_LIGHT = 21; SOFT_LIGHT = 22; DIFFERENCE = 23; EXCLUSION = 24; /* Table to map blend numbers to descriptive strings */ descriptions = [ _ "Clear", _ "Source", _ "Over", _ "In", _ "Out", _ "Atop", _ "Dest", _ "Dest over", _ "Dest in", _ "Dest out", _ "Dest atop", _ "Xor", _ "Add", _ "Saturate", _ "Multiply", _ "Screen", _ "Overlay", _ "Darken", _ "Lighten", _ "Colour dodge", _ "Colour burn", _ "Hard light", _ "Soft light", _ "Difference", _ "Exclusion" ]; /* And to vips enum nicknames. */ types = Enum [ $clear => "clear", $source => "source", $over => "over", $in => "in", $out => "out", $atop => "atop", $dest => "dest", $dest_over => "dest_over", $dest_in => "dest_in", $dest_out => "dest_out", $dest_atop => "dest_atop", $xor => "xor", $add => "add", $saturate => "saturate", $multiply => "multiply", $screen => "screen", $overlay => "overlay", $darken => "darken", $lighten => "lighten", $colour_dodge => "colour_dodge", $colour_burn => "colour_burn", $hard_light => "hard_light", $soft_light => "soft_light", $difference => "difference", $exclusion => "exclusion" ]; } Blend type = class { value = Blend_type.types?type; } Blend_over = Blend Blend_type.OVER; Blend_picker default = class Blend blend.value { _vislevel = 2; blend = Option "Blend" Blend_type.descriptions default; } Combine_type = class { MAX = 0; SUM = 1; MIN = 2; enum = Enum [ _ "Maximum" => MAX, _ "Sum" => SUM, _ "Minimum" => MIN ]; } Combine type = class { value = Combine_type.enum.names?type; } Combine_sum = Combine Combine_type.SUM; Combine_picker default = Option "Combine" Combine_type.enum.names default; nip2-8.7.0/share/nip2/start/Makefile.am0000644000175000017500000000061413224651032014461 00000000000000startdir = $(pkgdatadir)/start start_DATA = \ Math.def \ Image.def \ Magick.def \ Colour.def \ Tasks.def \ Object.def \ Filter.def \ Matrix.def \ Widgets.def \ Histogram.def \ Preferences.ws \ _joe_extra.def \ _joe_utilities.def \ _convert.def \ _generate.def \ _list.def \ _predicate.def \ _stdenv.def \ _Object.def \ _magick.def \ _types.def EXTRA_DIST = $(start_DATA) nip2-8.7.0/share/nip2/compat/0000755000175000017500000000000013350464161012637 500000000000000nip2-8.7.0/share/nip2/compat/8.4/0000755000175000017500000000000013350464161013150 500000000000000nip2-8.7.0/share/nip2/compat/8.4/_stdenv.def0000644000175000017500000017741713224651032015226 00000000000000/* optional args to functions */ get_option options defaults f = error (_ "unknown parameter " ++ f), hits == [] = hits?0 { hits = [v :: [n, v] <- options ++ defaults; n == f]; } /* Various operators as functions. */ logical_and a b = a && b; logical_or a b = a || b; bitwise_and a b = a & b; bitwise_or a b = a | b; eor a b = a ^ b; left_shift a b = a << b; right_shift a b = a >> b; not a = !a; less a b = a < b; more a b = a > b; less_equal a b = a <= b; more_equal a b = a >= b; equal a b = a == b; not_equal a b = a != b; pointer_equal a b = a === b; not_pointer_equal a b = a !== b; add a b = a + b; subtract a b = a - b; multiply a b = a * b; divide a b = a / b; idivide a b = (int) ((int) a / (int) b); power a b = a ** b; square x = x * x; remainder a b = a % b; cons a b = a : b; dot a b = a . ( b ); join a b = a ++ b; // 'difference' is defined in _list subscript a b = a ? b; generate s n f = [s, n .. f]; comma r i = (r, i); compose f g = f @ g; // our only trinary operator is actually a binary operator if_then_else a x = if a then x?0 else x?1; cast_unsigned_char x = (unsigned char) x; cast_signed_char x = (signed char) x; cast_unsigned_short x = (unsigned short) x; cast_signed_short x = (signed short) x; cast_unsigned_int x = (unsigned int) x; cast_signed_int x = (signed int) x; cast_float x = (float) x; cast_double x = (double) x; cast_complex x = (complex) x; cast_double_complex x = (double complex) x; unary_minus x = -x; negate x = !x; complement x = ~x; unary_plus x = +x; // the function we call for "a -> v" expressions mksvpair s v = [s, v], is_string s = error "not str on lhs of ->"; // the vector ops ... im is an image, vec is a real_list vec op_name im vec = im_lintra_vec ones im vec, op_name == "add" || op_name == "add'" = im_lintra_vec ones (-1 * im) vec, op_name == "subtract'" = im_lintra_vec ones im inv, op_name == "subtract" = im_lintra_vec vec im zeros, op_name == "multiply" || op_name == "multiply'" = im_lintra_vec vec (1 / im) zeros, op_name == "divide'" = im_lintra_vec recip im zeros, op_name == "divide" = im_expntra_vec im vec, op_name == "power'" = im_powtra_vec im vec, op_name == "power" = im_remainderconst_vec im vec, op_name == "remainder" = im_andimage_vec im vec, op_name == "bitwise_and" || op_name == "bitwise_and'" = im_orimage_vec im vec, op_name == "bitwise_or" || op_name == "bitwise_or'" = im_eorimage_vec im vec, op_name == "eor" || op_name == "eor'" = im_equal_vec im vec, op_name == "equal" || op_name == "equal'" = im_notequal_vec im vec, op_name == "not_equal" || op_name == "not_equal'" = im_less_vec im vec, op_name == "less" = im_moreeq_vec im vec, op_name == "less'" = im_lesseq_vec im vec, op_name == "less_equal" = im_more_vec im vec, op_name == "less_equal'" = error ("unimplemented vector operation: " ++ op_name) { zeros = replicate (len vec) 0; ones = replicate (len vec) 1; recip = map (divide 1) vec; inv = map (multiply (-1)) vec; } // make a name value pair mknvpair n v = [n, v], is_string n = error "not [char] on LHS of =>"; /* Macbeth chart patch names. */ macbeth_names = [ "Dark skin", "Light skin", "Blue sky", "Foliage", "Blue flower", "Bluish green", "Orange", "Purplish blue", "Moderate red", "Purple", "Yellow green", "Orange yellow", "Blue", "Green", "Red", "Yellow", "Magenta", "Cyan", "White (density 0.05)", "Neutral 8 (density 0.23)", "Neutral 6.5 (density 0.44)", "Neutral 5 (density 0.70)", "Neutral 3.5 (density 1.05)", "Black (density 1.50)" ]; bandsplit x = oo_unary_function bandsplit_op x, is_class x = map (subscript x) [0 .. bands - 1], is_image x = error (_ "bad arguments to " ++ "bandsplit") { bands = get_header "Bands" x; bandsplit_op = Operator "bandsplit" (map Image @ bandsplit) Operator_type.COMPOUND false; } bandjoin l = wrapper joined, has_wrapper = joined, is_listof has_image l = error (_ "bad arguments to " ++ "bandjoin") { has_wrapper = has_member_list (has_member "Image") l; wrapper = get_member_list (has_member "Image") (get_member "Image") l; joined = im_gbandjoin (map get_image l); } bandand x = oo_unary_function bandand_op x, is_class x = foldr1 bitwise_and (bandsplit x), is_image x = error (_ "bad arguments to " ++ "bandand") { bandand_op = Operator "bandand" bandand Operator_type.COMPOUND_REWRAP false; } bandor x = oo_unary_function bandor_op x, is_class x = foldr1 bitwise_or (bandsplit x), is_image x = error (_ "bad arguments to " ++ "bandor") { bandor_op = Operator "bandor" bandor Operator_type.COMPOUND_REWRAP false; } sum x = oo_unary_function sum_op x, is_class x = im_avg x * (get_width x) * (get_height x) * (get_bands x), is_image x = sum_list x, is_list x = error (_ "bad arguments (" ++ print x ++ ") to " ++ "sum") { sum_op = Operator "sum" sum Operator_type.COMPOUND false; // add elements in a nested-list thing sum_list l = foldr acc 0 l { acc x total = total + sum x, is_list x = total + x; } } product x = oo_unary_function product_op x, is_class x = product_list x, is_list x // (product image) doesn't make much sense :( = error (_ "bad arguments (" ++ print x ++ ") to " ++ "product") { product_op = Operator "product" product Operator_type.COMPOUND false; product_list l = foldr prod 1 l { prod x total = total * product x, is_list x = total * x; } } mean x = oo_unary_function mean_op x, is_class x = im_avg x, is_image x = mean_list x, is_list x = error (_ "bad arguments (" ++ print x ++ ") to " ++ "mean") { mean_op = Operator "mean" mean Operator_type.COMPOUND false; mean_list l = sum l / size l; // number of elements in some sort of nested-list thing size l = foldr acc 0 l { acc x total = total + size x, is_list x = total + 1; } } meang x = (appl (power e) @ mean @ appl log) x { appl fn x = map fn x, is_list x = fn x; } skew x = oo_unary_function skew_op x, is_class x = sum ((x - m) ** 3) / ((N - 1) * s ** 3), is_image x = sum ((Group x' - m) ** 3).value / ((N - 1) * s ** 3), is_list x = error (_ "bad arguments (" ++ print x ++ ") to " ++ "skew") { skew_op = Operator "skew" skew Operator_type.COMPOUND false; // squash any large matrix down to a flat list ... much simpler x' = x, is_image x; = flatten x; m = mean x'; s = deviation x'; w = get_width x'; h = get_height x'; b = get_bands x'; N = w * h * b, is_image x' = len x'; } kurtosis x = oo_unary_function kurtosis_op x, is_class x = sum ((x - m) ** 4) / ((N - 1) * s ** 4), is_image x = sum ((Group x' - m) ** 4).value / ((N - 1) * s ** 4), is_list x = error (_ "bad arguments (" ++ print x ++ ") to " ++ "kurtosis") { kurtosis_op = Operator "kurtosis" kurtosis Operator_type.COMPOUND false; // squash any large matrix down to a flat list ... much simpler x' = x, is_image x; = flatten x; m = mean x'; s = deviation x'; w = get_width x'; h = get_height x'; b = get_bands x'; N = len x', is_list x'; = w * h * b; } // zero-excluding mean meanze x = oo_unary_function meanze_op x, is_class x = meanze_image_hist x, is_image x && (fmt == Image_format.UCHAR || fmt == Image_format.USHORT) = meanze_image x, is_image x = meanze_list x, is_list x = error (_ "bad arguments (" ++ print x ++ ") to " ++ "meanze") { fmt = get_format x; meanze_op = Operator "meanze" meanze Operator_type.COMPOUND false; meanze_list l = sum l / size l; // number of non-zero elements in some sort of nested-list thing size l = foldr acc 0 l { acc x total = total + size x, is_list x = total + 1, x != 0; = total; } // add elements in a nested-list thing sum l = foldr acc 0 l { acc x total = total + sum x, is_list x = total + x; } // image mean, for any image type meanze_image i = sum / N { w = get_width i; h = get_height i; b = get_bands i; st = stats i; sum = st.value?0?2; // find non-zero pixels (not zero in all bands) zp = im_notequal_vec i (replicate b 0); // number of non-zero pixels N = b * (mean zp * w * h) / 255; } // image mean for 8 and 16-bit unsigned images // we can use a histogram, yay, and save a pass through the image meanze_image_hist i = sum / N { // histogram, knock out zeros hist = hist_find i; black = image_new 1 1 (get_bands hist) (get_format hist) (get_coding hist) (get_type hist) 0 0 0; histze = insert 0 0 black hist; // matching identity iden = im_identity_ushort (get_bands hist) (get_width hist), (get_width hist) > 256 = im_identity (get_bands hist); // number of non-zero pixels N = mean histze * 256; // sum of pixels sum = mean (hist * iden) * 256; } } deviation x = oo_unary_function deviation_op x, is_class x = im_deviate x, is_image x = deviation_list x, is_real_list x || is_matrix x = error (_ "bad arguments to " ++ "deviation") { deviation_op = Operator "deviation" deviation Operator_type.COMPOUND false; deviation_list l = (abs (s2 - (s * s / n)) / (n - 1)) ** 0.5 { [n, s, s2] = sum_sum2_list l; } // return n, sum, sum of squares for a list of reals sum_sum2_list x = foldr accumulate [0, 0, 0] x { accumulate x sofar = [n + 1, x + s, x * x + s2], is_real x = [n + n', s + s', s2 + s2'], is_list x = error "sum_sum2_list: not real or [real]" { [n, s, s2] = sofar; [n', s', s2'] = sum_sum2_list x; } } } deviationze x = oo_unary_function deviationze_op x, is_class x = deviationze_image x, is_image x = deviationze_list x, is_real_list x || is_matrix x = error (_ "bad arguments to " ++ "deviationze") { deviationze_op = Operator "deviationze" deviationze Operator_type.COMPOUND false; deviationze_list l = (abs (s2 - (s * s / n)) / (n - 1)) ** 0.5 { [n, s, s2] = sum_sum2_list l; } // return number of non-zero elements, sum, sum of squares for a list of // reals sum_sum2_list x = foldr accumulate [0, 0, 0] x { accumulate x sofar = sofar, is_real x && x == 0 = [n + 1, x + s, x * x + s2], is_real x = [n + n', s + s', s2 + s2'], is_list x = error "sum_sum2_list: not real or [real]" { [n, s, s2] = sofar; [n', s', s2'] = sum_sum2_list x; } } deviationze_image i = ((sum2 - sum * sum / N) / (N - 1)) ** 0.5 { w = get_width i; h = get_height i; b = get_bands i; st = stats i; sum = st.value?0?2; sum2 = st.value?0?3; // find non-zero pixels (not zero in all bands) zp = im_notequal_vec i (replicate b 0); // number of non-zero pixels N = b * (mean zp * w * h) / 255; } } // find the centre of gravity of a histogram gravity x = oo_unary_function gravity_op x, is_class x = im_hist_gravity x, is_hist x = gravity_list x, is_list x = error (_ "bad arguments to " ++ "gravity") { gravity_op = Operator "gravity" gravity Operator_type.COMPOUND false; // centre of gravity of a histogram... use the histogram to weight an // identity, then sum, then find the mean element im_hist_gravity h = m { // make horizontal h' = rot270 h, get_width h == 1 = h, get_height h == 1 = error "width or height not 1"; // number of elements w = get_width h'; // matching identity i = im_identity_ushort 1 w, w <= 2 ** 16 - 1 = make_xy w 1 ? 0; // weight identity and sum s = mean (i * h') * w; // sum of original histogram s' = mean h * w; // weighted mean m = s / s'; } gravity_list l = m { w = len l; // matching identity i = [0, 1 .. w - 1]; // weight identity and sum s = sum (map2 multiply i l); // sum of original histogram s' = sum l; // weighted mean m = s / s'; } } project x = oo_unary_function project_op x, is_class x = im_project x, is_image x = error (_ "bad arguments to " ++ "project") { project_op = Operator "project" project Operator_type.COMPOUND false; } abs x = oo_unary_function abs_op x, is_class x = im_abs x, is_image x = abs_cmplx x, is_complex x = abs_num x, is_real x = abs_list x, is_real_list x = abs_list (map abs_list x), is_matrix x = error (_ "bad arguments to " ++ "abs") { abs_op = Operator "abs" abs Operator_type.COMPOUND false; abs_list l = (sum (map square l)) ** 0.5; abs_num n = n, n >= 0 = -n; abs_cmplx c = ((re c)**2 + (im c)**2) ** 0.5; } copy x = oo_unary_function copy_op x, is_class x = im_copy x, is_image x = x { copy_op = Operator "copy" copy Operator_type.COMPOUND_REWRAP false; } // like abs, but treat pixels as vectors ... ie. always get a 1-band image // back ... also treat matricies as lists of vectors // handy for dE from object difference abs_vec x = oo_unary_function abs_vec_op x, is_class x = abs_vec_image x, is_image x = abs_vec_cmplx x, is_complex x = abs_vec_num x, is_real x = abs_vec_list x, is_real_list x = mean (map abs_vec_list x), is_matrix x = error (_ "bad arguments to " ++ "abs_vec") { abs_vec_op = Operator "abs_vec" abs_vec Operator_type.COMPOUND false; abs_vec_list l = (sum (map square l)) ** 0.5; abs_vec_num n = n, n >= 0 = -n; abs_vec_cmplx c = ((re c)**2 + (im c)**2) ** 0.5; abs_vec_image im = (sum (map square (bandsplit im))) ** 0.5; } transpose x = oo_unary_function transpose_op x, is_class x = transpose_image x, is_image x = transpose_list x, is_listof is_list x = error (_ "bad arguments to " ++ "transpose") { transpose_op = Operator "transpose" transpose Operator_type.COMPOUND_REWRAP false; transpose_list l = [], l' == [] = (map hd l') : (transpose_list (map tl l')) { l' = takewhile (not_equal []) l; } transpose_image = im_flipver @ im_rot270; } rot45 x = oo_unary_function rot45_op x, is_class x = error "rot45 image: not implemented", is_image x = error (_ "bad arguments to " ++ "rot45") { rot45_op = Operator "rot45" rot45_object Operator_type.COMPOUND_REWRAP false; rot45_object x = rot45_matrix x, is_odd_square_matrix x = error "rot45 image: not implemented", is_image x = error (_ "bad arguments to " ++ "rot45"); // slow, but what the heck rot45_matrix l = (im_rotate_dmask45 (Matrix l)).value; } // apply an image function to a [[real]] ... matrix is converted to a 1 band // image for processing apply_matrix_as_image fn m = (get_value @ im_vips2mask @ fn @ im_mask2vips @ Matrix) m; // a general image/matrix operation where the mat version is most easily done // by converting mat->image->mat apply_matim_operation name fn x = oo_unary_function class_op x, is_class x = fn x, is_image x = apply_matrix_as_image fn x, is_matrix x = error (_ "bad arguments to " ++ name) { class_op = Operator name (apply_matim_operation name fn) Operator_type.COMPOUND_REWRAP false; } rot90 = apply_matim_operation "rot90" im_rot90; rot180 = apply_matim_operation "rot180" im_rot180; rot270 = apply_matim_operation "rot270" im_rot270; rotquad = apply_matim_operation "rotquad" im_rotquad; fliplr = apply_matim_operation "fliplr" im_fliphor; fliptb = apply_matim_operation "flipud" im_flipver; image_set_type type x = oo_unary_function image_set_type_op x, is_class x = im_copy_set x (to_real type) (get_header "Xres" x) (get_header "Yres" x) (get_header "Xoffset" x) (get_header "Yoffset" x), is_image x = error (_ "bad arguments to " ++ "image_set_type:" ++ print type ++ " " ++ print x) { image_set_type_op = Operator "image_set_type" (image_set_type type) Operator_type.COMPOUND_REWRAP false; } image_set_origin xoff yoff x = oo_unary_function image_set_origin_op x, is_class x = im_copy_set x (get_header "Type" x) (get_header "Xres" x) (get_header "Yres" x) (to_real xoff) (to_real yoff), is_image x = error (_ "bad arguments to " ++ "image_set_origin") { image_set_origin_op = Operator "image_set_origin" (image_set_origin xoff yoff) Operator_type.COMPOUND_REWRAP false; } cache tile_width tile_height max_tiles x = oo_unary_function cache_op x, is_class x = im_tile_cache_random x (to_real tile_width) (to_real tile_height) (to_real max_tiles), is_image x = error (_ "bad arguments to " ++ "cache") { cache_op = Operator "cache" (cache tile_width tile_height max_tiles) Operator_type.COMPOUND_REWRAP false; } tile across down x = oo_unary_function tile_op x, is_class x = im_replicate x (to_real across) (to_real down), is_image x = error (_ "bad arguments to " ++ "tile") { tile_op = Operator "tile" (tile across down) Operator_type.COMPOUND_REWRAP false; } grid tile_height across down x = oo_unary_function grid_op x, is_class x = im_grid x (to_real tile_height) (to_real across) (to_real down), is_image x = error (_ "bad arguments to " ++ "grid") { grid_op = Operator "grid" (grid tile_height across down) Operator_type.COMPOUND_REWRAP false; } max_pair a b = a, a > b = b; min_pair a b = a, a < b = b; range min value max = min_pair max (max_pair min value); max x = oo_unary_function max_op x, is_class x = im_max x, is_image x = max_list x, is_list x = x, is_number x = error (_ "bad arguments to " ++ "max") { max_op = Operator "max" max Operator_type.COMPOUND false; max_list x = error "max []", x == [] = foldr1 max_pair x, is_real_list x = foldr1 max_pair (map max_list x), is_list x = max x; } min x = oo_unary_function min_op x, is_class x = im_min x, is_image x = min_list x, is_list x = x, is_number x = error (_ "bad arguments to " ++ "min") { min_op = Operator "min" min Operator_type.COMPOUND false; min_list x = error "min []", x == [] = foldr1 min_pair x, is_real_list x = foldr1 min_pair (map min_list x), is_list x = min x; } maxpos x = oo_unary_function maxpos_op x, is_class x = im_maxpos x, is_image x = maxpos_matrix x, is_matrix x = maxpos_list x, is_list x = error (_ "bad arguments to " ++ "maxpos") { maxpos_op = Operator "maxpos" maxpos Operator_type.COMPOUND false; maxpos_matrix m = (-1, -1), m == [[]] = (indexes?row, row) { max_value = max (Matrix m); indexes = map (index (equal max_value)) m; row = index (not_equal (-1)) indexes; } maxpos_list l = -1, l == [] = index (equal (max l)) l; } minpos x = oo_unary_function minpos_op x, is_class x = im_minpos x, is_image x = minpos_matrix x, is_matrix x = minpos_list x, is_list x = error (_ "bad arguments to " ++ "minpos") { minpos_op = Operator "minpos" minpos Operator_type.COMPOUND false; minpos_matrix m = (-1, -1), m == [[]] = (indexes?row, row) { min_value = min (Matrix m); indexes = map (index (equal min_value)) m; row = index (not_equal (-1)) indexes; } minpos_list l = -1, l == [] = index (equal (min l)) l; } stats x = oo_unary_function stats_op x, is_class x = im_stats x, is_image x = im_stats (to_image x).value, is_matrix x = error (_ "bad arguments to " ++ "stats") { stats_op = Operator "stats" stats Operator_type.COMPOUND false; } e = 2.7182818284590452354; pi = 3.14159265358979323846; rad d = 2 * pi * (d / 360); deg r = 360 * r / (2 * pi); sign x = oo_unary_function sign_op x, is_class x = im_sign x, is_image x = sign_cmplx x, is_complex x = sign_num x, is_real x = error (_ "bad arguments to " ++ "sign") { sign_op = Operator "sign" sign Operator_type.COMPOUND_REWRAP false; sign_num n = 0, n == 0 = 1, n > 0 = -1; sign_cmplx c = (0, 0), mod == 0 = (re c / mod, im c / mod) { mod = abs c; } } rint x = oo_unary_function rint_op x, is_class x = im_rint x, is_image x = rint_value x, is_number x = error (_ "bad arguments to " ++ "rint") { rint_op = Operator "rint" rint Operator_type.ARITHMETIC false; rint_value x = (int) (x + 0.5), x > 0 = (int) (x - 0.5); } scale x = oo_unary_function scale_op x, is_class x = (unsigned char) x, is_number x = im_scale x, is_image x = scale_list x, is_real_list x || is_matrix x = error (_ "bad arguments to " ++ "scale") { scale_op = Operator "scale" scale Operator_type.COMPOUND_REWRAP false; scale_list l = apply_scale s o l { mn = find_limit min_pair l; mx = find_limit max_pair l; s = 255.0 / (mx - mn); o = -(mn * s); } find_limit fn l = find_limit fn (map (find_limit fn) l), is_listof is_list l = foldr1 fn l; apply_scale s o x = x * s + o, is_number x = map (apply_scale s o) x; } scaleps x = oo_unary_function scale_op x, is_class x = im_scaleps x, is_image x = error (_ "bad arguments to " ++ "scale") { scale_op = Operator "scaleps" scaleps Operator_type.COMPOUND_REWRAP false; } fwfft x = oo_unary_function fwfft_op x, is_class x = im_fwfft x, is_image x = error (_ "bad arguments to " ++ "fwfft") { fwfft_op = Operator "fwfft" fwfft Operator_type.COMPOUND_REWRAP false; } invfft x = oo_unary_function invfft_op x, is_class x = im_invfftr x, is_image x = error (_ "bad arguments to " ++ "invfft") { invfft_op = Operator "invfft" invfft Operator_type.COMPOUND_REWRAP false; } falsecolour x = oo_unary_function falsecolour_op x, is_class x = image_set_type Image_type.sRGB (im_falsecolour x), is_image x = error (_ "bad arguments to " ++ "falsecolour") { falsecolour_op = Operator "falsecolour" falsecolour Operator_type.COMPOUND_REWRAP false; } polar x = oo_unary_function polar_op x, is_class x = im_c2amph x, is_image x = polar_cmplx x, is_complex x = error (_ "bad arguments to " ++ "polar") { polar_op = Operator "polar" polar Operator_type.COMPOUND false; polar_cmplx r = (l, a) { a = 270, x == 0 && y < 0 = 90, x == 0 && y >= 0 = 360 + atan (y / x), x > 0 && y < 0 = atan (y / x), x > 0 && y >= 0 = 180 + atan (y / x); l = (x ** 2 + y ** 2) ** 0.5; x = re r; y = im r; } } rectangular x = oo_unary_function rectangular_op x, is_class x = im_c2rect x, is_image x = rectangular_cmplx x, is_complex x = error (_ "bad arguments to " ++ "rectangular") { rectangular_op = Operator "rectangular" rectangular Operator_type.COMPOUND false; rectangular_cmplx p = (x, y) { l = re p; a = im p; x = l * cos a; y = l * sin a; } } // we can't use colour_unary: that likes 3 band only recomb matrix x = oo_unary_function recomb_op x, is_class x = im_recomb x matrix, is_image x = recomb_real_list x, is_real_list x = map recomb_real_list x, is_matrix x = error (_ "bad arguments to " ++ "recomb") { // COMPOUND_REWRAP ... signal to the colour class to go to image and // back recomb_op = Operator "recomb" (recomb matrix) Operator_type.COMPOUND_REWRAP false; // process [1,2,3 ..] as an image recomb_real_list l = (to_matrix im').value?0 { im = (float) (to_image (Vector l)).value; im' = recomb matrix im; } } extract_area x y w h obj = oo_unary_function extract_area_op obj, is_class obj = im_extract_area obj x' y' w' h', is_image obj = map (extract_range x' w') (extract_range y' h' obj), is_matrix obj = error (_ "bad arguments to " ++ "extract_area") { x' = to_real x; y' = to_real y; w' = to_real w; h' = to_real h; extract_area_op = Operator "extract_area" (extract_area x y w h) Operator_type.COMPOUND_REWRAP false; extract_range from length list = (take length @ drop from) list; } extract_band b obj = subscript obj b; extract_row y obj = oo_unary_function extract_row_op obj, is_class obj = extract_area 0 y' (get_width obj) 1 obj, is_image obj = [obj?y'], is_matrix obj = error (_ "bad arguments to " ++ "extract_row") { y' = to_real y; extract_row_op = Operator "extract_row" (extract_row y) Operator_type.COMPOUND_REWRAP false; } extract_column x obj = oo_unary_function extract_column_op obj, is_class obj = extract_area x' 0 1 height obj, is_image obj = map (\row [row?x']) obj, is_matrix obj = error (_ "bad arguments to " ++ "extract_column") { x' = to_real x; height = get_header "Ysize" obj; extract_column_op = Operator "extract_column" (extract_column x) Operator_type.COMPOUND_REWRAP false; } blend cond in1 in2 = oo_binary_function blend_op cond [in1,in2], is_class cond = im_blend (get_image cond) (get_image in1) (get_image in2), has_image cond && has_image in1 && has_image in2 = error (_ "bad arguments to " ++ "blend" ++ ": " ++ join_sep ", " (map print [cond, in1, in2])) { blend_op = Operator "blend" blend_obj Operator_type.COMPOUND_REWRAP false; blend_obj cond x = blend_result_image { [then_part, else_part] = x; // get things about our output from inputs in this order objects = [then_part, else_part, cond]; // properties of our output image target_width = get_member_list has_width get_width objects; target_height = get_member_list has_height get_height objects; target_bands = get_member_list has_bands get_bands objects; target_format = get_member_list has_format get_format objects; target_type = get_member_list has_type get_type objects; to_image x = to_image_size target_width target_height target_bands target_format x; [then_image, else_image] = map to_image [then_part, else_part]; blend_result_image = image_set_type target_type (im_blend cond then_image else_image); } } // do big first: we want to keep big's class, if possible // eg. big is a Plot, small is a 1x1 Image insert x y small big = oo_binary'_function insert_op small big, is_class big = oo_binary_function insert_op small big, is_class small = im_insert big small (to_real x) (to_real y), is_image small && is_image big = error (_ "bad arguments to " ++ "insert") { insert_op = Operator "insert" (insert x y) Operator_type.COMPOUND_REWRAP false; } insert_noexpand x y small big = oo_binary_function insert_noexpand_op small big, is_class small = oo_binary'_function insert_noexpand_op small big, is_class big = im_insert_noexpand big small (to_real x) (to_real y), is_image small && is_image big = error (_ "bad arguments to " ++ "insert_noexpand") { insert_noexpand_op = Operator "insert_noexpand" (insert_noexpand x y) Operator_type.COMPOUND_REWRAP false; } decode im = oo_unary_function decode_op im, is_class im = decode_im im, is_image im = error (_ "bad arguments to " ++ "decode") { decode_op = Operator "decode" decode Operator_type.COMPOUND_REWRAP false; decode_im im = im_LabQ2Lab im, get_coding im == Image_coding.LABPACK = im_rad2float im, get_coding im == Image_coding.RAD = im; } measure_draw across down measure image = mark { patch_width = image.width / across; sample_width = patch_width * (measure / 100); left_margin = (patch_width - sample_width) / 2; patch_height = image.height / down; sample_height = patch_height * (measure / 100); top_margin = (patch_height - sample_height) / 2; cods = [[x * patch_width + left_margin, y * patch_height + top_margin] :: y <- [0 .. down - 1]; x <- [0 .. across - 1]]; x = map (extract 0) cods; y = map (extract 1) cods; outer = mkim [$pixel => 255] sample_width sample_height 1; inner = mkim [] (sample_width - 4) (sample_height - 4) 1; patch = insert 2 2 inner outer; bg = mkim [] image.width image.height 1; mask = Image (im_insertset bg.value patch.value x y); image' = colour_transform_to Image_type.sRGB image; mark = if mask then Vector [0, 255, 0] else image'; } measure_sample across down measure image = measures { patch_width = image.width / across; sample_width = patch_width * (measure / 100); left_margin = (patch_width - sample_width) / 2; patch_height = image.height / down; sample_height = patch_height * (measure / 100); top_margin = (patch_height - sample_height) / 2; cods = [[x * patch_width + left_margin, y * patch_height + top_margin] :: y <- [0 .. down - 1]; x <- [0 .. across - 1]]; image' = decode image; patches = map (\p extract_area p?0 p?1 sample_width sample_height image') cods; measures = Matrix (map (map mean) (map bandsplit patches)); } extract_bands b n obj = oo_unary_function extract_bands_op obj, is_class obj = im_extract_bands obj (to_real b) (to_real n), is_image obj = error (_ "bad arguments to " ++ "extract_bands") { extract_bands_op = Operator "extract_bands" (extract_bands b n) Operator_type.COMPOUND_REWRAP false; } invert x = oo_unary_function invert_op x, is_class x = im_invert x, is_image x = 255 - x, is_real x = error (_ "bad arguments to " ++ "invert") { invert_op = Operator "invert" invert Operator_type.COMPOUND false; } transform ipol wrap params image = oo_unary_function transform_op image, is_class image = im_transform image (to_matrix params) (to_real ipol) (to_real wrap), is_image image = error (_ "bad arguments to " ++ "transform") { transform_op = Operator "transform" (transform ipol wrap params) Operator_type.COMPOUND_REWRAP false; } transform_search max_error max_iterations order ipol wrap sample reference = oo_binary_function transform_search_op sample reference, is_class sample = oo_binary'_function transform_search_op sample reference, is_class reference = im_transform_search sample reference (to_real max_error) (to_real max_iterations) (to_real order) (to_real ipol) (to_real wrap), is_image sample && is_image reference = error (_ "bad arguments to " ++ "transform_search") { transform_search_op = Operator "transform_search" (transform_search max_error max_iterations order ipol wrap) Operator_type.COMPOUND false; } rotate interp angle image = oo_binary_function rotate_op angle image, is_class angle = oo_binary'_function rotate_op angle image, is_class image = im_affinei_all image interp.value a (-b) b a 0 0, is_real angle && is_image image = error (_ "bad arguments to " ++ "rotate") { rotate_op = Operator "rotate" (rotate interp) Operator_type.COMPOUND_REWRAP false; a = cos angle; b = sin angle; } matrix_binary fn a b = itom (fn (mtoi a) (mtoi b)) { mtoi x = im_mask2vips (Matrix x); itom x = (im_vips2mask x).value; } join_lr a b = oo_binary_function join_lr_op a b, is_class a = oo_binary'_function join_lr_op a b, is_class b = join_im a b, is_image a && is_image b = matrix_binary join_im a b, is_matrix a && is_matrix b = error (_ "bad arguments to " ++ "join_lr") { join_lr_op = Operator "join_lr" join_lr Operator_type.COMPOUND_REWRAP false; join_im a b = insert (get_width a) 0 b a; } join_tb a b = oo_binary_function join_tb_op a b, is_class a = oo_binary'_function join_tb_op a b, is_class b = join_im a b, is_image a && is_image b = matrix_binary join_im a b, is_matrix a && is_matrix b = error (_ "bad arguments to " ++ "join_tb") { join_tb_op = Operator "join_tb" join_tb Operator_type.COMPOUND_REWRAP false; join_im a b = insert 0 (get_height a) b a; } conj x = oo_unary_function conj_op x, is_class x = (re x, -im x), is_complex x || (is_image x && format == Image_format.COMPLEX) || (is_image x && format == Image_format.DPCOMPLEX) // assume it's some sort of real = x { format = get_header "BandFmt" x; conj_op = Operator "conj" conj Operator_type.COMPOUND false; } clip2fmt format image = oo_unary_function clip2fmt_op image, is_class image = im_clip2fmt image (to_real format), is_image image = error (_ "bad arguments to " ++ "clip2fmt") { clip2fmt_op = Operator "clip2fmt" (clip2fmt format) Operator_type.COMPOUND_REWRAP false; } embed type x y w h im = oo_unary_function embed_op im, is_class im = im_embed im (to_real type) (to_real x) (to_real y) (to_real w) (to_real h), is_image im = error (_ "bad arguments to " ++ "embed") { embed_op = Operator "embed" (embed type x y w h) Operator_type.COMPOUND_REWRAP false; } /* Morph a mask with a [[real]] matrix ... turn m2 into an image, morph it * with m1, turn it back to a matrix again. */ _morph_2_masks fn m1 m2 = m'' { // The [[real]] can contain 128 values ... squeeze them out! image = im_mask2vips (Matrix m2) == 255; m2_width = get_width image; m2_height = get_height image; // need to embed m2 in an image large enough for us to be able to // position m1 all around the edges, with a 1 pixel overlap image' = embed 0 (m1.width / 2) (m1.height / 2) (m2_width + (m1.width - 1)) (m2_height + (m1.height - 1)) image; // morph! image'' = fn m1 image'; // back to mask m' = im_vips2mask ((double) image''); // Turn 0 in output to 128 (don't care). m'' = map (map fn) m'.value { fn a = 128, a == 0; = a; } } dilate mask image = oo_unary_function dilate_op image, is_class image = im_dilate image (to_matrix mask), is_image image = error (_ "bad arguments to " ++ "dilate") { dilate_op = Operator "dilate" dilate_object Operator_type.COMPOUND_REWRAP false; dilate_object x = _morph_2_masks dilate mask x, is_matrix x = dilate mask x; } erode mask image = oo_unary_function erode_op image, is_class image = im_erode image (to_matrix mask), is_image image = error (_ "bad arguments to " ++ "erode") { erode_op = Operator "erode" erode_object Operator_type.COMPOUND_REWRAP false; erode_object x = _morph_2_masks erode mask x, is_matrix x = erode mask x; } conv mask image = oo_unary_function conv_op image, is_class image = im_conv image (to_matrix mask), is_image image = error (_ "bad arguments to " ++ "conv" ++ ": " ++ "conv (" ++ print mask ++ ") (" ++ print image ++ ")") { conv_op = Operator "conv" (conv mask) Operator_type.COMPOUND_REWRAP false; } convf mask image = oo_unary_function convf_op image, is_class image = im_conv_f image (to_matrix mask), is_image image = error (_ "bad arguments to " ++ "convf" ++ ": " ++ "convf (" ++ print mask ++ ") (" ++ print image ++ ")") { convf_op = Operator "convf" (convf mask) Operator_type.COMPOUND_REWRAP false; } convsep mask image = oo_unary_function convsep_op image, is_class image = im_convsep image (to_matrix mask), is_image image = error (_ "bad arguments to " ++ "convsep") { convsep_op = Operator "convsep" (convsep mask) Operator_type.COMPOUND_REWRAP false; } aconvsep layers mask image = oo_unary_function aconvsep_op image, is_class image = im_aconvsep image (to_matrix mask) (to_real layers), is_image image = error (_ "bad arguments to " ++ "aconvsep") { aconvsep_op = Operator "aconvsep" (aconvsep layers mask) Operator_type.COMPOUND_REWRAP false; } convsepf mask image = oo_unary_function convsepf_op image, is_class image = im_convsep_f image (to_matrix mask), is_image image = error (_ "bad arguments to " ++ "convsepf") { convsepf_op = Operator "convsepf" (convsepf mask) Operator_type.COMPOUND_REWRAP false; } rank w h n image = oo_unary_function rank_op image, is_class image = im_rank image (to_real w) (to_real h) (to_real n), is_image image = error (_ "bad arguments to " ++ "rank") { rank_op = Operator "rank" (rank w h n) Operator_type.COMPOUND_REWRAP false; } rank_image n x = rlist x.value, is_Group x = rlist x, is_list x = error (_ "bad arguments to " ++ "rank_image") { rlist l = wrapper ranked, has_wrapper = ranked { has_wrapper = has_member_list (has_member "Image") l; wrapper = get_member_list (has_member "Image") (get_member "Image") l; ranked = im_rank_image (map get_image l) (to_real n); } } // find the correlation surface for a small image within a big one correlate small big = oo_binary_function correlate_op small big, is_class small = oo_binary'_function correlate_op small big, is_class big = im_spcor big small, is_image small && is_image big = error (_ "bad arguments to " ++ "correlate") { correlate_op = Operator "correlate" correlate Operator_type.COMPOUND_REWRAP false; } // just sum-of-squares-of-differences correlate_fast small big = oo_binary_function correlate_fast_op small big, is_class small = oo_binary'_function correlate_fast_op small big, is_class big = im_fastcor big small, is_image small && is_image big = error (_ "bad arguments to " ++ "correlate_fast") { correlate_fast_op = Operator "correlate_fast" correlate_fast Operator_type.COMPOUND_REWRAP false; } // set Type, wrap as Plot_hist if it's a class hist_tag x = oo_unary_function hist_tag_op x, is_class x = image_set_type Image_type.HISTOGRAM x, is_image x = error (_ "bad arguments to " ++ "hist_tag") { hist_tag_op = Operator "hist_tag" (Plot_histogram @ hist_tag) Operator_type.COMPOUND false; } hist_find x = oo_unary_function hist_find_op x, is_class x = im_histgr x (-1), is_image x = error (_ "bad arguments to " ++ "hist_find") { hist_find_op = Operator "hist_find" (Plot_histogram @ hist_find) Operator_type.COMPOUND false; } hist_find_nD bins image = oo_unary_function hist_find_nD_op image, is_class image = im_histnD image (to_real bins), is_image image = error (_ "bad arguments to " ++ "hist_find_nD") { hist_find_nD_op = Operator "hist_find_nD" (hist_find_nD bins) Operator_type.COMPOUND_REWRAP false; } hist_find_indexed index value = oo_binary_function hist_find_indexed_op index value, is_class index = oo_binary'_function hist_find_indexed_op index value, is_class value = im_hist_indexed index value, is_image index && is_image value = error (_ "bad arguments to " ++ "hist_find_indexed") { hist_find_indexed_op = Operator "hist_find_indexed" (compose (compose Plot_histogram) hist_find_indexed) Operator_type.COMPOUND false; } hist_map hist image = oo_binary_function hist_map_op hist image, is_class hist = oo_binary'_function hist_map_op hist image, is_class image = im_maplut image hist, is_image hist && is_image image = error (_ "bad arguments to " ++ "hist_map") { // can't use rewrap, as we want to always wrap as image hist_map_op = Operator "hist_map" (compose (compose Image) hist_map) Operator_type.COMPOUND false; } hist_cum hist = oo_unary_function hist_cum_op hist, is_class hist = im_histcum hist, is_image hist = error (_ "bad arguments to " ++ "hist_cum") { hist_cum_op = Operator "hist_cum" hist_cum Operator_type.COMPOUND_REWRAP false; } hist_diff hist = oo_unary_function hist_diff_op hist, is_class hist = im_histdiff hist, is_image hist = error (_ "bad arguments to " ++ "hist_diff") { hist_diff_op = Operator "hist_diff" hist_diff Operator_type.COMPOUND_REWRAP false; im_histdiff h = (conv (Matrix [[-1, 1]]) @ clip2fmt (fmt (get_format h))) h { // up the format so it can represent the whole range of // possible values from this mask fmt x = Image_format.SHORT, x == Image_format.UCHAR || x == Image_format.CHAR = Image_format.INT, x == Image_format.USHORT || x == Image_format.SHORT || x == Image_format.UINT = x; } } hist_norm hist = oo_unary_function hist_norm_op hist, is_class hist = im_histnorm hist, is_image hist = error (_ "bad arguments to " ++ "hist_norm") { hist_norm_op = Operator "hist_norm" hist_norm Operator_type.COMPOUND_REWRAP false; } hist_inv hist = oo_unary_function hist_inv_op hist, is_class hist = inv hist, is_image hist = error (_ "bad arguments to " ++ "hist_inv") { hist_inv_op = Operator "hist_inv" hist_inv Operator_type.COMPOUND_REWRAP false; inv im = im_invertlut (to_matrix im''') len { // need a vertical doublemask im' = rot90 im, get_width im > 1 && get_height im == 1 = im, get_width im == 1 && get_height im > 1 = error (_ "not a hist"); len = get_height im'; // values must be scaled to 0 - 1 im'' = im' / (max im'); // add an index column on the left // again, must be in 0-1 y = ((make_xy 1 len)?1) / len; im''' = y ++ im''; } } hist_match in ref = oo_binary_function hist_match_op in ref, is_class in = oo_binary'_function hist_match_op in ref, is_class ref = im_histspec in ref, is_image in && is_image ref = error (_ "bad arguments to " ++ "hist_match") { hist_match_op = Operator "hist_match" hist_match Operator_type.COMPOUND_REWRAP false; } hist_equalize x = hist_map ((hist_norm @ hist_cum @ hist_find) x) x; hist_equalize_local w h image = oo_unary_function hist_equalize_local_op image, is_class image = lhisteq image, is_image image = error (_ "bad arguments to " ++ "hist_equalize_local") { hist_equalize_local_op = Operator "hist_equalize_local" (hist_equalize_local w h) Operator_type.COMPOUND_REWRAP false; // loop over bands, if necessary lhisteq im = im_lhisteq im (to_real w) (to_real h), get_bands im == 1 = (foldl1 join @ map lhisteq @ bandsplit) im; } // find the threshold below which are percent of the image (percent in [0,1]) // eg. hist_thresh 0.1 x == 12, then x < 12 will light up 10% of the pixels hist_thresh percent image = x { // our own normaliser ... we don't want to norm channels separately // norm to [0,1] my_hist_norm h = h / max h; // normalised cumulative hist // we sum the channels before we normalise, because we want to treat them // all the same h = (my_hist_norm @ sum @ bandsplit @ hist_cum @ hist_find) image.value; // threshold that, then use im_profile to search for the x position in the // histogram x = mean (im_profile (h > percent) 1); } /* Sometimes useful, despite plotting now being built in, for making * diagnostic images. */ hist_plot hist = oo_unary_function hist_plot_op hist, is_class hist = im_histplot hist, is_image hist = error (_ "bad arguments to " ++ "hist_plot") { hist_plot_op = Operator "hist_plot" (Image @ hist_plot) Operator_type.COMPOUND false; } zerox d x = oo_unary_function zerox_op x, is_class x = im_zerox x (to_real d), is_image x = error (_ "bad arguments to " ++ "zerox") { zerox_op = Operator "zerox" (zerox d) Operator_type.COMPOUND_REWRAP false; } reduce kernel xshr yshr image = oo_unary_function reduce_op image, is_class image = reduce_im image, is_image image = error (_ "bad arguments to " ++ "reduce") { reduce_op = Operator "reduce" reduce_im Operator_type.COMPOUND_REWRAP false; reduce_im im = out { [out] = vips_call "reduce" [im, xshr, yshr] [$kernel => kernel.value]; } } similarity interpolate scale angle image = oo_unary_function similarity_op image, is_class image = similarity_im image, is_image image = error (_ "bad arguments to " ++ "similarity") { similarity_op = Operator "similarity" similarity_im Operator_type.COMPOUND_REWRAP false; similarity_im im = out { [out] = vips_call "similarity" [im] [ $interpolate => interpolate.value, $scale => scale, $angle => angle ]; } } resize kernel xfac yfac image = oo_unary_function resize_op image, is_class image = resize_im image, is_image image = error (_ "bad arguments to " ++ "resize") { resize_op = Operator "resize" resize_im Operator_type.COMPOUND_REWRAP false; xfac' = to_real xfac; yfac' = to_real yfac; rxfac' = 1 / xfac'; ryfac' = 1 / yfac'; is_nn = kernel.type == Kernel_type.NEAREST_NEIGHBOUR; resize_im im // upscale by integer factor, nearest neighbour = im_zoom im xfac' yfac', is_int xfac' && is_int yfac' && xfac' >= 1 && yfac' >= 1 && is_nn // downscale by integer factor, nearest neighbour = im_subsample im rxfac' ryfac', is_int rxfac' && is_int ryfac' && rxfac' >= 1 && ryfac' >= 1 && is_nn // everything else ... we just pass on to vips_resize() = vips_resize kernel xfac' yfac' im { vips_resize kernel hscale vscale im = out { [out] = vips_call "resize" [im, hscale] [$vscale => vscale, $kernel => kernel.value]; } } } sharpen radius x1 y2 y3 m1 m2 in = oo_unary_function sharpen_op in, is_class in = im_sharpen in (to_real radius) (to_real x1) (to_real y2) (to_real y3) (to_real m1) (to_real m2), is_image in = error (_ "bad arguments to " ++ "sharpen") { sharpen_op = Operator "sharpen" (sharpen radius x1 y2 y3 m1 m2) Operator_type.COMPOUND_REWRAP false; } tone_analyse s m h sa ma ha in = oo_unary_function tone_analyse_op in, is_class in = im_tone_analyse in (to_real s) (to_real m) (to_real h) (to_real sa) (to_real ma) (to_real ha), is_image in = error (_ "bad arguments to " ++ "tone_analyse") { tone_analyse_op = Operator "tone_analyse" (Plot_histogram @ tone_analyse s m h sa ma ha) Operator_type.COMPOUND false; } tone_map hist image = oo_binary_function tone_map_op hist image, is_class hist = oo_binary'_function tone_map_op hist image, is_class image = im_tone_map image hist, is_image hist && is_image image = error (_ "bad arguments to " ++ "tone_map") { tone_map_op = Operator "tone_map" tone_map Operator_type.COMPOUND_REWRAP false; } tone_build fmt b w s m h sa ma ha = (Plot_histogram @ clip2fmt fmt) (im_tone_build_range mx mx (to_real b) (to_real w) (to_real s) (to_real m) (to_real h) (to_real sa) (to_real ma) (to_real ha)) { mx = Image_format.maxval fmt; } icc_export depth profile intent in = oo_unary_function icc_export_op in, is_class in = im_icc_export_depth in (to_real depth) (expand profile) (to_real intent), is_image in = error (_ "bad arguments to " ++ "icc_export") { icc_export_op = Operator "icc_export" (icc_export depth profile intent) Operator_type.COMPOUND_REWRAP false; } icc_import profile intent in = oo_unary_function icc_import_op in, is_class in = im_icc_import in (expand profile) (to_real intent), is_image in = error (_ "bad arguments to " ++ "icc_import") { icc_import_op = Operator "icc_import" (icc_import profile intent) Operator_type.COMPOUND_REWRAP false; } icc_import_embedded intent in = oo_unary_function icc_import_embedded_op in, is_class in = im_icc_import_embedded in (to_real intent), is_image in = error (_ "bad arguments to " ++ "icc_import_embedded") { icc_import_embedded_op = Operator "icc_import_embedded" (icc_import_embedded intent) Operator_type.COMPOUND_REWRAP false; } icc_transform in_profile out_profile intent in = oo_unary_function icc_transform_op in, is_class in = im_icc_transform in (expand in_profile) (expand out_profile) (to_real intent), is_image in = error (_ "bad arguments to " ++ "icc_transform") { icc_transform_op = Operator "icc_transform" (icc_transform in_profile out_profile intent) Operator_type.COMPOUND_REWRAP false; } icc_ac2rc profile in = oo_unary_function icc_ac2rc_op in, is_class in = im_icc_ac2rc in (expand profile), is_image in = error (_ "bad arguments to " ++ "icc_ac2rc") { icc_ac2rc_op = Operator "icc_ac2rc" (icc_ac2rc profile) Operator_type.COMPOUND_REWRAP false; } // Given a xywh rect, flip it around so wh are always positive rect_normalise x y w h = [x', y', w', h'] { x' = x + w, w < 0 = x; y' = y + h, h < 0 = y; w' = abs w; h' = abs h; } draw_flood_blob x y ink image = oo_unary_function draw_flood_blob_op image, is_class image = im_draw_flood_blob image (to_real x) (to_real y) ink, is_image image = error (_ "bad arguments to " ++ "draw_flood_blob") { draw_flood_blob_op = Operator "draw_flood_blob" (draw_flood_blob x y ink) Operator_type.COMPOUND_REWRAP false; } draw_flood x y ink image = oo_unary_function draw_flood_op image, is_class image = im_draw_flood image (to_real x) (to_real y) ink, is_image image = error (_ "bad arguments to " ++ "draw_flood") { draw_flood_op = Operator "draw_flood" (draw_flood x y ink) Operator_type.COMPOUND_REWRAP false; } /* This version of draw_rect uses insert_noexpand and will be fast, even for * huge images. */ draw_rect_width x y w h f t ink image = oo_unary_function draw_rect_width_op image, is_class image = my_draw_rect_width image (to_int x) (to_int y) (to_int w) (to_int h) (to_int f) (to_int t) ink, is_image image = error (_ "bad arguments to " ++ "draw_rect_width") { draw_rect_width_op = Operator "draw_rect_width" (draw_rect_width x y w h f t ink) Operator_type.COMPOUND_REWRAP false; my_draw_rect_width image x y w h f t ink = insert x' y' (block w' h') image, f == 1 = (insert x' y' (block w' t) @ insert (x' + w' - t) y' (block t h') @ insert x' (y' + h' - t) (block w' t) @ insert x' y' (block t h')) image { insert = insert_noexpand; block w h = image_new w h (get_bands image) (get_format image) (get_coding image) (get_type image) ink' 0 0; ink' = Vector ink, is_list ink = ink; [x', y', w', h'] = rect_normalise x y w h; } } /* Default to 1 pixel wide edges. */ draw_rect x y w h f ink image = draw_rect_width x y w h f 1 ink image; /* This version of draw_rect uses the paintbox rect draw operation. It is an * inplace operation and will use bucketloads of memory. */ draw_rect_paintbox x y w h f ink image = oo_unary_function draw_rect_op image, is_class image = im_draw_rect image (to_real x) (to_real y) (to_real w) (to_real h) (to_real f) ink, is_image image = error (_ "bad arguments to " ++ "draw_rect_paintbox") { draw_rect_op = Operator "draw_rect" (draw_rect x y w h f ink) Operator_type.COMPOUND_REWRAP false; } draw_circle x y r f ink image = oo_unary_function draw_circle_op image, is_class image = im_draw_circle image (to_real x) (to_real y) (to_real r) (to_real f) ink, is_image image = error (_ "bad arguments to " ++ "draw_circle") { draw_circle_op = Operator "draw_circle" (draw_circle x y r f ink) Operator_type.COMPOUND_REWRAP false; } draw_line x1 y1 x2 y2 ink image = oo_unary_function draw_line_op image, is_class image = im_draw_line image (to_real x1) (to_real y1) (to_real x2) (to_real y2) ink, is_image image = error (_ "bad arguments to " ++ "draw_line") { draw_line_op = Operator "draw_line" (draw_line x1 y1 x2 y2 ink) Operator_type.COMPOUND_REWRAP false; } print_base base in = oo_unary_function print_base_op in, is_class in = map (print_base base) in, is_list in = print_base_real, is_real in = error (_ "bad arguments to " ++ "print_base") { print_base_op = Operator "print_base" (print_base base) Operator_type.COMPOUND false; print_base_real = error "print_base: bad base", base < 2 || base > 16 = "0", in < 0 || chars == [] = reverse chars { digits = map (\x x % base) (takewhile (not_equal 0) (iterate (\x idivide x base) in)); chars = map tohd digits; tohd x = (char) ((int) '0' + x), x < 10 = (char) ((int) 'A' + (x - 10)); } } /* id x: the identity function * * id :: * -> * */ id x = x; /* const x y: junk y, return x * * (const 3) is the function that always returns 3. * const :: * -> ** -> * */ const x y = x; /* converse fn a b: swap order of args to fn * * converse fn a b == fn b a * converse :: (* -> ** -> ***) -> ** -> * -> *** */ converse fn a b = fn b a; /* fix fn x: find the fixed point of a function */ fix fn x = limit (iterate fn x); /* until pred fn n: apply fn to n until pred succeeds; return that value * * until (more 1000) (multiply 2) 1 = 1024 * until :: (* -> bool) -> (* -> *) -> * -> * */ until pred fn n = n, pred n = until pred fn (fn n); /* Infinite list of primes. */ primes = 1 : (sieve [2 ..]) { sieve l = hd l : sieve (filter (nmultiple (hd l)) (tl l)); nmultiple n x = x / n != (int) (x / n); } /* Map an n-ary function (pass the args as a list) over groups of objects. * The objects can be single objects or groups. If more than one * object is a group, we iterate for the length of the smallest group. * Don't loop over plain lists, since we want (eg.) "mean [1, 2, 3]" to work. * Treat [] as no-value --- ie. if any of the inputs are [] we put [] into the * output and don't apply the function. copy-pasted into _types, keep in sync */ map_nary fn args = fn args, groups == [] = Group (map process [0, 1 .. shortest - 1]) { // find all the group arguments groups = filter is_Group args; // what's the length of the shortest group arg? shortest = foldr1 min_pair (map (len @ get_value) groups); // process index n ... pull that member from each argument // recurse to handle application, so we work for nested groups too process n = NULL, any (map (is_noval n) args) = map_nary fn (map (extract n) args) { extract n arg = arg.value?n, is_Group arg = arg; is_noval n arg = is_Group arg && arg.value?n == NULL; } } /* Map a 1-ary function over an object. */ map_unary fn a = map_nary (list_1ary fn) [a]; /* Map a 2-ary function over a pair of objects. */ map_binary fn a b = map_nary (list_2ary fn) [a, b]; /* Map a 3-ary function over three objects. */ map_trinary fn a b c = map_nary (list_3ary fn) [a, b, c]; /* Map a 4-ary function over three objects. */ map_quaternary fn a b c d = map_nary (list_4ary fn) [a, b, c, d]; /* Same as map_nary, but for lists. Handy for (eg.) implementing arith ops on * vectors and matricies. */ map_nary_list fn args = fn args, lists == [] = map process [0, 1 .. shortest - 1] { // find all the list arguments lists = filter is_list args; // what's the length of the shortest list arg? shortest = foldr1 min_pair (map len lists); // process index n ... pull that member from each argument // recurse to handle application, so we work for nested lists too process n = map_nary_list fn (map (extract n) args) { extract n arg = arg?n, is_list arg = arg; } } map_unaryl fn a = map_nary_list (list_1ary fn) [a]; map_binaryl fn a b = map_nary_list (list_2ary fn) [a, b]; /* Remove features smaller than x pixels across from an image. This used to be * rather complex ... convsep is now good enough to use. */ smooth x image = convsep (matrix_gaussian_blur (to_real x * 2)) image; /* Chop up an image into a list of lists of smaller images. Pad edges with * black. */ imagearray_chop tile_width tile_height hoverlap voverlap i = map chop' [0, vstep .. last_y] { width = get_width i; height = get_height i; bands = get_bands i; format = get_format i; type = get_type i; tile_width' = to_real tile_width; tile_height' = to_real tile_height; hoverlap' = to_real hoverlap; voverlap' = to_real voverlap; /* Unique pixels per tile. */ hstep = tile_width' - hoverlap'; vstep = tile_height' - voverlap'; /* Number of tiles across and down. Remember the case where width == * hstep. */ across = (int) ((width - 1) / hstep) + 1; down = (int) ((height - 1) / vstep) + 1; /* top/left of final tile. */ last_x = hstep * (across - 1); last_y = vstep * (down - 1); /* How much do we need to pad by? */ sx = last_x + tile_width'; sy = last_y + tile_height'; /* Expand image with black to pad size. */ pad = embed 0 0 0 sx sy i; /* Chop up a row. */ chop' y = map chop'' [0, hstep .. last_x] { chop'' x = extract_area x y tile_width' tile_height' pad; } } /* Reassemble image. */ imagearray_assemble hoverlap voverlap il = (image_set_origin 0 0 @ foldl1 tbj @ map (foldl1 lrj)) il { lrj l r = insert (get_width l + hoverlap) 0 r l; tbj t b = insert 0 (get_height t + voverlap) b t; } /* Generate an nxn identity matrix. */ identity_matrix n = error "identity_matrix: n > 0", n < 1 = map line [0 .. n - 1] { line p = take p [0, 0 ..] ++ [1] ++ take (n - p - 1) [0, 0 ..]; } /* Incomplete gamma function Q(a, x) == 1 - P(a, x) FIXME ... this is now a builtin, until we can get a nice List class (requires overloadable ':') gammq a x = error "bad args", x < 0 || a <= 0 = 1 - gamser, x < a + 1 = gammcf { gamser = (gser a x)?0; gammcf = (gcf a x)?0; } */ /* Incomplete gamma function P(a, x) evaluated as series representation. Also * return ln(gamma(a)) ... nr in c, pp 218 */ gser a x = [gamser, gln] { gln = gammln a; gamser = error "bad args", x < 0 = 0, x == 0 = 1 // fix this { // maximum iterations maxit = 100; ap = List [a + 1, a + 2 ...]; xoap = x / ap; del = map product (prefixes xoap.value); /* del = map (multiply (1 / a)) (map product (prefixes xoap)) del = xap = iterate (multiply */ /* Generate all prefixes of a list ... [1,2,3] -> [[1], [1, 2], [1, 2, * 3], [1, 2, 3, 4] ...] */ prefixes l = map (converse take l) [1..]; } } /* ln(gamma(xx)) ... nr in c, pp 214 */ gammln xx = gln { cof = [76.18009172947146, -86.50532032941677, 24.01409824083091, -1.231739572450155, 0.1208650973866179e-2, -0.5395239384953e-5]; y = take 6 (iterate (add 1) (xx + 1)); ser = 1.000000000190015 + sum (map2 divide cof y); tmp = xx + 0.5; tmp' = tmp - ((xx + 0.5) * log tmp); gln = -tmp + log (2.5066282746310005 * ser / xx); } /* make a LUT from a scatter */ buildlut x = Plot_histogram (im_buildlut x), is_Matrix x && x.width > 1 = im_buildlut (Matrix x), is_matrix x && is_list_len_more 1 x?0 = error (_ "bad arguments to " ++ "buildlut"); /* Linear regression. Return a class with the stuff we need in. * from s15.2, p 665 NR in C * * Also calculate R2, see eg.: * https://en.wikipedia.org/wiki/Coefficient_of_determination */ linreg xes yes = obj { obj = class { // in case we ever get shown in the workspace _vislevel = 2; slope = sum [t * y :: [t, y] <- zip2 tes yes] / st2; intercept = (sy - sx * slope) / ss; chi2 = sum [(y - intercept - slope * x) ** 2 :: [x, y] <- zip2 xes yes]; siga = (chi2 / (ss - 2)) ** 0.5 * ((1 + sx ** 2 / (ss * st2)) / ss) ** 0.5; sigb = (chi2 / (ss - 2)) ** 0.5 * (1 / st2) ** 0.5; // for compat with linregw, see below q = 1.0; R2 = 1 - chi2 / sum [(y - my) ** 2 :: y <- yes]; } ss = len xes; sx = sum xes; sy = sum yes; my = sy / ss; sxoss = sx / ss; tes = [x - sxoss :: x <- xes]; st2 = sum [t ** 2 :: t <- tes]; } /* Weighted linear regression. Xes, yes and a list of deviations. */ linregw xes yes devs = obj { obj = class { // in case we ever get shown in the workspace _vislevel = 2; slope = sum [(t * y) / sd :: [t, y, sd] <- zip3 tes yes devs] / st2; intercept = (sy - sx * slope) / ss; chi2 = sum [((y - intercept - slope * x) / sd) ** 2 :: [x, y, sd] <- zip3 xes yes devs]; siga = ((1 + sx * sx / (ss * st2)) / ss) ** 0.5; sigb = (1 / st2) ** 0.5; q = gammq (0.5 * (len xes - 2)) (0.5 * chi2); R2 = 1 - chi2 / sum [(y - my) ** 2 :: y <- yes]; } wt = [sd ** -0.5 :: sd <- devs]; ss = sum wt; sx = sum [x * w :: [x, w] <- zip2 xes wt]; sy = sum [y * w :: [y, w] <- zip2 yes wt]; my = sy / len xes; sxoss = sx / ss; tes = [(x - sxoss) / sd :: [x, sd] <- zip2 xes devs]; st2 = sum [t ** 2 :: t <- tes]; } /* Clustering: pass in a list of points, repeatedly merge the * closest two points until no two points are closer than the threshold. * Return [merged-points, corresponding-weights]. A weight is a list of the * indexes we merged to make that point, ie. len weight == how significant * this point is. * * eg. * cluster 12 [152,154,155,42,159] == * [[155,42],[[1,2,0,4],[3]]] */ cluster thresh points = oo_unary_function cluster_op points, is_class points // can't use [0..len points - 1], in case len points == 0 = merge [points, map (converse cons []) (take (len points) [0 ..])], is_list points = error (_ "bad arguments to " ++ "cluster") { cluster_op = Operator "cluster" (cluster thresh) Operator_type.COMPOUND false; merge x = x, m < 2 || d > thresh = merge [points', weights'] { [points, weights] = x; m = len points; // generate indexes of all possible pairs, avoiding comparing a thing // to itself, and assuming that dist is reflexive // first index is always less than 2nd index // the +1,+2 makes sure we have an increasing generator, otherwise we // can get [3 .. 4] (for example), which will make a decreasing // sequence pairs = [[x, y] :: x <- [0 .. m - 1]; y <- [x + 1, x + 2 .. m - 1]]; // distance function // arg is eg. [3,1], meaning get distance from point 3 to point 1 dist x = abs (points?i - points?j) { [i, j] = x; } // smallest distance, then the two points we merge p = minpos (map dist pairs); d = dist pairs?p; [i, j] = pairs?p; // new point and new weight nw = weights?i ++ weights?j; np = (points?i * len weights?i + points?j * len weights?j) / len nw; // remove element i from a list remove i l = take i l ++ drop (i + 1) l; // remove two old points, add the new merged one // i < j (see "pairs", above) points' = np : remove i (remove j points); weights' = nw : remove i (remove j weights); } } /* Extract the area of an image around an arrow. * Transform the image to make the arrow horizontal, then displace by hd and * vd pxels, then cut out a bit h pixels high centered on the arrow. */ extract_arrow hd vd h arrow = extract_area (re p' + hd) (im p' - h / 2 + vd) (re pv) h im' { // the line as a polar vector pv = polar (arrow.width, arrow.height); a = im pv; // smallest rotation that will make the line horizontal a' = 360 - a, a > 270 = 180 - a, a > 90 = -a; im' = rotate Interpolate_bilinear a' arrow.image; // look at the start and end of the arrow, pick the leftmost p = (arrow.left, arrow.top), arrow.left <= arrow.right = (arrow.right, arrow.bottom); // transform that point to im' space p' = rectangular (polar p + (0, a')) + (im'.xoffset, im'.yoffset); } /* You'd think these would go in _convert, but they are not really colour ops, * so put them here. */ rad2float image = oo_unary_function rad2float_op image, is_class image = im_rad2float image, is_image image = error (_ "bad arguments to " ++ "rad2float") { rad2float_op = Operator "rad2float" rad2float Operator_type.COMPOUND_REWRAP false; } float2rad image = oo_unary_function float2rad_op image, is_class image = im_float2rad image, is_image image = error (_ "bad arguments to " ++ "float2rad") { float2rad_op = Operator "float2rad" float2rad Operator_type.COMPOUND_REWRAP false; } segment x = oo_unary_function segment_op x, is_class x = image', is_image x = error (_ "bad arguments to " ++ "segment") { segment_op = Operator "segment" segment Operator_type.COMPOUND_REWRAP false; [image, nsegs] = im_segment x; image' = im_copy_set_meta image "n-segments" nsegs; } point a b = oo_binary_function point_op a b, is_class a = oo_binary'_function point_op a b, is_class b = im_read_point b x y, is_image b = [b?x?y], is_matrix b = [b?x], is_real_list b && y == 0 = [b?y], is_real_list b && x == 0 = error (_ "bad arguments to " ++ "point") { point_op = Operator "point" (\a\b Vector (point a b)) Operator_type.COMPOUND false; (x, y) = a, is_complex a; = (a?0, a?1), is_real_list a && is_list_len 2 a = error "bad position format"; } /* One image in, one out. */ system_image command x = oo_unary_function system_image_op x, is_class x = system x, is_image x = error (_ "bad arguments to " ++ "system_image") { system_image_op = Operator "system_image" (system_image command) Operator_type.COMPOUND_REWRAP false; system im = image_out { [image_out, log] = im_system_image (get_image im) "%s.tif" "%s.tif" command; } } /* Two images in, one out. */ system_image2 command x1 x2 = oo_binary_function system_image2_op x1 x2, is_class x1 = oo_binary'_function system_image2_op x1 x2, is_class x2 = system x1 x2, is_image x1 && is_image x2 = error (_ "bad arguments to " ++ "system_image2") { system_image2_op = Operator "system_image2" (system_image2 command) Operator_type.COMPOUND_REWRAP false; system x1 x2 = image_out { [image_out] = vips_call "system" [command] [ $in => [x1, x2], $out => true, $out_format => "%s.tif", $in_format => "%s.tif" ]; } } /* Three images in, one out. */ system_image3 command x1 x2 x3 = oo_binary_function system_image2_op x2 x3, is_class x2 = oo_binary'_function system_image2_op x2 x3, is_class x3 = system x1 x2 x3, is_image x1 && is_image x2 && is_image x3 = error (_ "bad arguments to " ++ "system_image3") { system_image2_op = Operator "system_image2" (system_image3 command x1) Operator_type.COMPOUND_REWRAP false; system x1 x2 x3 = image_out { [image_out] = vips_call "system" [command] [ $in => [x1, x2, x3], $out => true, $out_format => "%s.tif", $in_format => "%s.tif" ]; } } /* Zero images in, one out. */ system_image0 command = Image image_out { [image_out] = vips_call "system" [command] [ $out => true, $out_format => "%s.tif" ]; } hough_line w h x = oo_unary_function hough_line_op x, is_class x = hline (to_real w) (to_real h) x, is_image x = error (_ "bad arguments to " ++ "hough_line") { hough_line_op = Operator "hough_line" (hough_line w h) Operator_type.COMPOUND_REWRAP false; hline w h x = pspace { [pspace] = vips_call "hough_line" [x] [ $width => w, $height => h ]; } } hough_circle s mn mx x = oo_unary_function hough_circle_op x, is_class x = hcircle (to_real s) (to_real mn) (to_real mx) x, is_image x = error (_ "bad arguments to " ++ "hough_circle") { hough_circle_op = Operator "hough_circle" (hough_circle s mn mx) Operator_type.COMPOUND_REWRAP false; hcircle s mn mx x = pspace { [pspace] = vips_call "hough_circle" [x] [ $scale => s, $min_radius => mn, $max_radius => mx ]; } } mapim interp ind in = oo_binary_function mapim_op ind in, is_class ind = oo_binary'_function mapim_op ind in, is_class in = mapim_fn ind in, is_image ind && is_image in = error (_ "bad arguments to " ++ "mapim") { mapim_op = Operator "mapim" (mapim interp) Operator_type.COMPOUND_REWRAP false; mapim_fn ind im = out { [out] = vips_call "mapim" [im, ind] [$interpolate => interp]; } } perlin cell width height = Image im { [im] = vips_call "perlin" [to_real width, to_real height] [ $cell_size => to_real cell ]; } worley cell width height = Image im { [im] = vips_call "worley" [to_real width, to_real height] [ $cell_size => to_real cell ]; } nip2-8.7.0/share/nip2/compat/8.4/Preferences.ws0000644000175000017500000010177213224651032015707 00000000000000 nip2-8.7.0/share/nip2/compat/8.4/Filter.def0000644000175000017500000011730313224651032014775 00000000000000Filter_conv_item = class Menupullright "_Convolution" "various spatial convolution filters" { /* Some useful masks. */ filter_blur = Matrix_con 9 0 [[1, 1, 1], [1, 1, 1], [1, 1, 1]]; filter_sharp = Matrix_con 8 0 [[-1, -1, -1], [-1, 16, -1], [-1, -1, -1]]; filter_emboss = Matrix_con 1 128 [[-1, 0], [0, 1]]; filter_laplacian = Matrix_con 1 128 [[-1, -1, -1], [-1, 8, -1], [-1, -1, -1]]; filter_sobel = Matrix_con 1 128 [[1, 2, 1], [0, 0, 0], [-1, -2, -1]]; filter_lindet = Matrix_con 1 0 [[1, 1, 1], [-2, -2, -2], [1, 1, 1]]; Blur_item = class Menuaction "_Blur" "3x3 blur of image" { action x = map_unary (conv filter_blur) x; } Sharpen_item = class Menuaction "_Sharpen" "3x3 sharpen of image" { action x = map_unary (conv filter_sharp) x; } Emboss_item = class Menuaction "_Emboss" "1 pixel displace emboss" { action x = map_unary (conv filter_emboss) x; } Laplacian_item = class Menuaction "_Laplacian" "3x3 laplacian edge detect" { action x = map_unary (conv filter_laplacian) x; } Sobel_item = class Menuaction "So_bel" "3x3 Sobel edge detect" { action x = map_unary sobel x { sobel im = abs (a - 128) + abs (b - 128) { a = conv filter_sobel im; b = conv (rot270 filter_sobel) im; } } } /* 3x3 line detect of image diagonals should be scaled down by root(2) I guess Kirk */ Linedet_item = class Menuaction "Li_ne Detect" "3x3 line detect" { action x = map_unary lindet x { lindet im = foldr1 max_pair images { masks = take 4 (iterate rot45 filter_lindet); images = map (converse conv im) masks; } } } Usharp_item = class Menuaction "_Unsharp Mask" "cored sharpen of L only in LAB image" { action x = class _result { _vislevel = 3; size = Option "Radius" [ "3 pixels", "5 pixels", "7 pixels", "9 pixels", "11 pixels", "51 pixels" ] 0; st = Scale "Smoothness threshold" 0 5 2; bm = Scale "Brighten by at most" 1 50 10; dm = Scale "Darken by at most" 1 50 20; fs = Scale "Sharpen flat areas by" 0 5 0.5; js = Scale "Sharpen jaggy areas by" 0 5 1; _result = map_unary process x { process in = Image in''' { in' = colour_transform_to Image_type.LABS in.value; in'' = sharpen [3, 5, 7, 9, 11, 51]?size st bm dm fs js in'; in''' = colour_transform_to (get_type in) in''; } } } } sep1 = Menuseparator; Custom_blur_item = class Menuaction "Custom B_lur / Sharpen" "blur or sharpen with tuneable parameters" { action x = class _result { _vislevel = 3; type = Option "Type" ["Blur", "Sharpen"] 0; r = Scale "Radius" 1 100 1; fac = Scale "Amount" 0 1 1; layers = Scale "Layers" 1 100 10; shape = Option "Mask shape" [ "Square", "Gaussian" ] 0; prec = Option "Precision" ["Int", "Float", "Approximate"] 0; _result = map_unary process x { process in = clip2fmt blur.format proc { mask = matrix_blur r.value, shape.value == 0 = matrix_gaussian_blur r.value; blur = [convsep, convsepf, aconvsep layers]?prec mask in; proc = in + fac * (in - blur), type == 1 = blur * fac + in * (1 - fac); } } } } Custom_conv_item = class Menuaction "Custom C_onvolution" "convolution filter with tuneable parameters" { action x = class _result { _vislevel = 3; matrix = Matrix_con 1 0 [[0, 0, 0], [0, 1, 0], [0, 0, 0]]; separable = Toggle "Seperable convolution" false, matrix.width == 1 || matrix.height == 1 = false; type = Option "Convolution type" ["Int", "Float"] 0; rotate = Option "Rotate" [ "Don't rotate", "4 x 45 degrees", "8 x 45 degrees", "2 x 90 degrees" ] 0; _result = map_unary process x { process in = in.Image in' { conv_fn = im_lindetect, !separable && type == 0 && rotate == 1 = im_compass, !separable && type == 0 && rotate == 2 = im_gradient, !separable && type == 0 && rotate == 3 = im_conv, !separable && type == 0 = im_convsep, separable && type == 0 = im_conv_f, !separable && type == 1 = im_convsep_f, separable && type == 1 = error "boink!"; in' = conv_fn in.value matrix; } } } } } Filter_rank_item = class Menupullright "_Rank" "various rank filters" { Median_item = class Menuaction "_Median" "3x3 median rank filter" { action x = map_unary (rank 3 3 4) x; } Image_rank_item = class Menuaction "_Image Rank" "pixelwise rank a list or group of images" { action x = class _result { _vislevel = 3; select = Expression "Rank" ((int) (guess_size / 2)) { guess_size = len x, is_list x = len x.value, is_Group x = 0; } // can't really iterate over groups ... since we allow a group // argument _result = rank_image select x; } } Custom_rank_item = class Menuaction "Custom _Rank" "rank filter with tuneable parameters" { action x = class _result { _vislevel = 3; window_width = Expression "Window width" 3; window_height = Expression "Window height" 3; select = Expression "Rank" ((int) ((to_real window_width * to_real window_height) / 2)); _result = map_unary process x { process in = rank window_width window_height select in; } } } } Filter_morphology_item = class Menupullright "_Morphology" "various morphological filters" { /* Some useful masks. */ mask8 = Matrix_mor [[255, 255, 255], [255, 255, 255], [255, 255, 255]]; mask4 = Matrix_mor [[128, 255, 128], [255, 255, 255], [128, 255, 128]]; mask1 = Matrix_mor [[0, 0, 0], [0, 255, 0], [0, 0, 0]]; thin = Matrix_mor [[0, 0, 0], [128, 255, 128], [255, 255, 255]]; Threshold_item = Select_item.Threshold_item; sep1 = Menuseparator; Dilate_item = class Menupullright "_Dilate" "morphological dilate" { Dilate8_item = class Menuaction "_8-connected" "dilate with an 8-connected mask" { action x = map_unary (dilate mask8) x; } Dilate4_item = class Menuaction "_4-connected" "dilate with a 4-connected mask" { action x = map_unary (dilate mask4) x; } } Erode_item = class Menupullright "_Erode" "morphological erode" { Erode8_item = class Menuaction "_8-connected" "erode with an 8-connected mask" { action x = map_unary (erode mask8) x; } Erode4_item = class Menuaction "_4-connected" "erode with a 4-connected mask" { action x = map_unary (erode mask4) x; } } Custom_morph_item = class Menuaction "Custom _Morphology" "convolution morphological operator" { action x = class _result { _vislevel = 3; mask = mask4; type = Option "Operation" ["Erode", "Dilate"] 1; apply = Expression "Number of times to apply mask" 1; _result = map_unary morph x { morph image = Image value' { fatmask = (iterate (dilate mask) mask)?(to_real apply - 1); value' = im_erode image.value fatmask, type.value == 0 = im_dilate image.value fatmask; } } } } sep2 = Menuseparator; Open_item = class Menuaction "_Open" "open with an 8-connected mask" { action x = map_unary (dilate mask8 @ erode mask8) x; } Close_item = class Menuaction "_Close" "close with an 8-connected mask" { action x = map_unary (erode mask8 @ dilate mask8) x; } Clean_item = class Menuaction "C_lean" "remove 8-connected isolated points" { action x = map_unary clean x { clean x = x ^ erode mask1 x; } } Thin_item = class Menuaction "_Thin" "thin once" { action x = map_unary thinall x { masks = take 8 (iterate rot45 thin); thin1 m x = x ^ erode m x; thinall x = foldr thin1 x masks; } } } Filter_fourier_item = class Menupullright "_Fourier" "various Fourier filters" { preview_size = 64; sense_option = Option "Sense" [ "Pass", "Reject" ] 0; // make a visualisation image make_vis fn = (Image @ image_set_type Image_type.FOURIER @ rotquad @ fn) (im_create_fmask preview_size preview_size); // make the process function process fn in = (Image @ fn) (im_flt_image_freq in.value); New_ideal_item = class Menupullright "_Ideal" "various ideal Fourier filters" { High_low_item = class Menuaction "_High or Low Pass" "highpass/lowpass ideal Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; // call a freq func with our parameters _params f = f sense.value fc.value 0 0 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" "ring pass/reject ideal Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; rw = Scale "Ring width" 0.01 0.99 0.5; // call a freq func with our parameters _params f = f (sense.value + 6) fc.value rw.value 0 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Band_item = class Menuaction "_Band Pass or Band Reject" "band pass/reject ideal Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fcx = Scale "Horizontal frequency cutoff" 0.01 0.99 0.5; fcy = Scale "Vertical frequency cutoff" 0.01 0.99 0.5; r = Scale "Radius" 0.01 0.99 0.5; // call a freq func with our parameters _params f = f (sense.value + 12) fcx.value fcy.value r.value 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } } New_gaussian_item = class Menupullright "_Gaussian" "various Gaussian Fourier filters" { High_low_item = class Menuaction "_High or Low Pass" "highpass/lowpass Gaussian Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; // call a freq func with our parameters _params f = f (sense.value + 4) fc.value ac.value 0 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" "ring pass/reject Gaussian Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; rw = Scale "Ring width" 0.01 0.99 0.5; // call a freq func with our parameters _params f = f (sense.value + 10) fc.value rw.value ac.value 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Band_item = class Menuaction "_Band Pass or Band Reject" "band pass/reject Gaussian Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fcx = Scale "Horizontal frequency cutoff" 0.01 0.99 0.5; fcy = Scale "Vertical frequency cutoff" 0.01 0.99 0.5; r = Scale "Radius" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; // call a freq func with our parameters _params f = f (sense.value + 16) fcx.value fcy.value r.value ac.value 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } } New_butterworth_item = class Menupullright "_Butterworth" "various Butterworth Fourier filters" { High_low_item = class Menuaction "_High or Low Pass" "highpass/lowpass Butterworth Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; o = Scale "Order" 1 10 2; // call a freq func with our parameters _params f = f (sense.value + 2) o.value fc.value ac.value 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" "ring pass/reject Butterworth Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; rw = Scale "Ring width" 0.01 0.99 0.5; o = Scale "Order" 1 10 2; // call a freq func with our parameters _params f = f (sense.value + 8) o.value fc.value rw.value ac.value 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Band_item = class Menuaction "_Band Pass or Band Reject" "band pass/reject Butterworth Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fcx = Scale "Horizontal frequency cutoff" 0.01 0.99 0.5; fcy = Scale "Vertical frequency cutoff" 0.01 0.99 0.5; r = Scale "Radius" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; o = Scale "Order" 1 10 2; // call a freq func with our parameters _params f = f (sense.value + 14) o.value fcx.value fcy.value r.value ac.value; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } } } Filter_enhance_item = class Menupullright "_Enhance" "various enhancement filters" { Falsecolour_item = class Menuaction "_False Colour" "false colour a mono image" { action x = class _result { _vislevel = 3; o = Scale "Offset" (-255) 255 0; clip = Toggle "Clip colour range" false; _result = map_unary process x { process im = falsecolour mono'' { mono = colour_transform_to Image_type.B_W im; mono' = mono + o; mono'' = (unsigned char) mono', clip = (unsigned char) (mono' & 0xff); } } } } Statistical_diff_item = class Menuaction "_Statistical Difference" "statistical difference of an image" { action x = class _result { _vislevel = 3; wsize = Expression "Window size" 11; tmean = Expression "Target mean" 128; mean_weight = Scale "Mean weight" 0 1 0.8; tdev = Expression "Target deviation" 50; dev_weight = Scale "Deviation weight" 0 1 0.8; border = Toggle "Output image matches input image in size" true; _result = map_unary process x { process in = Image in'' { in' = colour_transform_to Image_type.B_W in.value; fn = im_stdif, border = im_stdif_raw; in'' = fn in' mean_weight.value tmean.expr dev_weight.value tdev.expr wsize.expr wsize.expr; } } } } Hist_equal_item = class Menupullright "_Equalise Histogram" "equalise contrast" { Global_item = class Menuaction "_Global" "equalise contrast globally" { action x = map_unary hist_equalize x; } Local_item = class Menuaction "_Local" "equalise contrast within a roving window" { action x = class _result { _vislevel = 3; window_width = Expression "Window width" 20; window_height = Expression "Window height" 20; _result = map_unary process x { process in = hist_equalize_local window_width.expr window_height.expr in; } } } } } Filter_correlate_item = class Menupullright "Spatial _Correlation" "calculate correlation surfaces" { Correlate_item = class Menuaction "_Correlate" "calculate correlation coefficient" { action a b = map_binary corr a b { corr a b = correlate a b, a.width <= b.width && a.height <= b.height = correlate b a; } } Correlate_fast_item = class Menuaction "_Simple Difference" "calculate sum of squares of differences" { action a b = map_binary corr a b { corr a b = correlate_fast a b, a.width <= b.width && a.height <= b.height = correlate_fast b a; } } } Filter_hough_item = class Menupullright "_Hough Transform" "transform to parameter space" { Line_item = class Menuaction "_Line" "find straight line Hough transform" { action a = class _result { _vislevel = 3; pspace_width = Expression "Parameter space width" 64; pspace_height = Expression "Parameter space height" 64; _result = map_unary line a { line a = hough_line (to_real pspace_width) (to_real pspace_height) a; } } } Circle_item = class Menuaction "_Circle" "find circle Hough transform" { action a = class _result { _vislevel = 3; scale = Expression "Scale down parameter space by" 10; min_radius = Expression "Minimum radius" 10; max_radius = Expression "Maximum radius" 30; _result = map_unary circle a { circle a = hough_circle (to_real scale) (to_real min_radius) (to_real max_radius) a; } } } } Filter_coordinate_item = class Menupullright "_Coordinate Transform" "various coordinate transforms" { // run a function which wants a complex arg on a non-complex two-band // image run_cmplx fn x = re x' ++ im x' { x' = fn (x?0, x?1); } Polar_item = class Menuaction "_Polar" "transform to polar coordinates" { action a = class _result { _vislevel = 3; interp = Interpolate_picker Interpolate_type.BILINEAR; _result = map_unary to_polar a { to_polar im = mapim interp.value map' im { // xy image, origin in the centre, scaled to fit image to // a circle xy = make_xy im.width im.height; xy' = xy - Vector [im.width / 2, im.height / 2]; scale = min [im.width, im.height] / im.width; xy'' = 2 * xy' / scale; // to polar, scale vertical axis to 360 degrees map = run_cmplx polar xy''; map' = map * Vector [1, im.height / 360]; } } } } Rectangular_item = class Menuaction "_Rectangular" "transform to rectangular coordinates" { action a = class _result { _vislevel = 3; interp = Interpolate_picker Interpolate_type.BILINEAR; _result = map_unary to_rect a { to_rect im = mapim interp.value map'' im { // xy image, vertical scaled to 360 degrees xy = make_xy im.width im.height; xy' = xy * Vector [1, 360 / im.height]; // to rect, scale to image rect map = run_cmplx rectangular xy'; scale = min [im.width, im.height] / im.width; map' = map * scale / 2; map'' = map' + Vector [im.width / 2, im.height / 2]; } } } } } #separator Filter_tilt_item = class Menupullright "Ti_lt Brightness" "tilt brightness" { Left_right_item = class Menuaction "_Left to Right" "linear left-right brighten" { action x = class _result { _vislevel = 3; tilt = Scale "Left-right tilt" (-1) 1 0; _result = map_unary tilt_lr x { tilt_lr image = image * scale { ramp = im_fgrey image.width image.height; scale = (ramp - 0.5) * tilt + 1; } } } } Top_bottom_item = class Menuaction "_Top to Bottom" "linear top-bottom brighten" { action x = class _result { _vislevel = 3; tilt = Scale "Top-bottom tilt" (-1) 1 0; _result = map_unary tilt_tb x { tilt_tb image = image * scale { ramp = rot90 (im_fgrey image.height image.width); scale = (ramp - 0.5) * tilt + 1; } } } } sep1 = Menuseparator; Left_right_cos_item = class Menuaction "Cosine Left-_right" "cosine left-right brighten" { action x = class _result { _vislevel = 3; tilt = Scale "Left-right tilt" (-1) 1 0; shift = Scale "Shift by" (-1) 1 0; _result = map_unary tilt_lr x { tilt_lr image = image * scale { ramp = im_fgrey image.width image.height - 0.5 - shift.value; scale = 0.5 * tilt.value * cos (ramp * 180) + 1; } } } } Top_bottom_cos_item = class Menuaction "Cosine Top-_bottom" "cosine top-bottom brighten" { action x = class _result { _vislevel = 3; tilt = Scale "Top-bottom tilt" (-1) 1 0; shift = Scale "Shift by" (-1) 1 0; _result = map_unary tilt_tb x { tilt_tb image = image * scale { ramp = rot90 (im_fgrey image.height image.width) - 0.5 - shift.value; scale = 0.5 * tilt.value * cos (ramp * 180) + 1; } } } } sep2 = Menuseparator; Circular_item = class Menuaction "_Circular" "circular brighten" { action x = class _result { _vislevel = 3; tilt = Scale "Tilt" (-1) 1 0; hshift = Scale "Horizontal shift by" (-1) 1 0; vshift = Scale "Vertical shift by" (-1) 1 0; _result = map_unary tilt_tb x { tilt_tb image = image * scale { hramp = im_fgrey image.width image.height - 0.5 - hshift.value; vramp = rot90 (im_fgrey image.height image.width) - 0.5 - vshift.value; ramp = (hramp ** 2 + vramp ** 2) ** 0.5; scale = 0.5 * tilt.value * cos (ramp * 180) + 1; } } } } } Filter_blend_item = class Menupullright "_Blend" "blend objects together" { Scale_blend_item = class Menuaction "_Scale" "blend two objects together with a scale" { action a b = class _result { _vislevel = 3; p = Scale "Blend position" 0 1 0.5; _result = map_binary process a b { process im1 im2 = im1 * (1 - p.value) + im2 * p.value; } } } Image_blend_item = class Menuaction "_Image" "use an image to blend two objects" { action a b c = class _result { _vislevel = 3; i = Toggle "Invert mask" false; _result = map_trinary process a b c { process a b c = blend condition in1 in2, !i = blend (invert condition) in1 in2 { compare a b // prefer image as the condition = false, !has_image a && has_image b // prefer mono images as the condition = false, has_bands a && has_bands b && get_bands a > 1 && get_bands b == 1 // prefer uchar as the condition = false, has_format a && has_format b && get_format a > Image_format.UCHAR && get_format b == Image_format.UCHAR = true; [condition, in1, in2] = sortc compare [a, b, c]; } } } } Line_blend_item = class Menuaction "_Along Line" "blend between image a and image b along a line" { action a b = class _result { _vislevel = 3; orientation = Option "Orientation" [ "Left to Right", "Top to Bottom" ] 0; blend_position = Scale "Blend position" 0 1 0.5; blend_width = Scale "Blend width" 0 1 0.05; _result = map_binary process a b { process a b = blend (Image condition) b a { output_width = max_pair a.width b.width; output_height = max_pair a.height b.height; range = output_width, orientation == 0 = output_height; blend_position' = floor (range * blend_position.value); blend_width' = 1, blend_width.value == 0 = floor (range * blend_width.value); start = blend_position' - blend_width' / 2; background = (make_xy output_width output_height) >= blend_position'; ramp = im_grey blend_width' output_height, orientation == 0 = rot90 (im_grey blend_width' output_width); condition = insert_noexpand start 0 ramp background?0, orientation == 0 = insert_noexpand 0 start ramp background?1; } } } } Blend_alpha_item = class Menuaction "_Alpha" "blend images with optional alpha channels" { // usage: layerit foreground background // input images must be either 1 or 3 bands, optionally + 1 band // which is used as the alpha channel // rich lott scale_mask im opacity = (unsigned char) (to_real opacity / 255 * im); // to mono intensity = colour_transform_to Image_type.B_W; // All the blend functions // I am grateful to this page // http://www.pegtop.net/delphi/blendmodes/ // for most of the formulae. blend_normal mask opacity fg bg = blend (scale_mask mask opacity) fg bg; blend_iflighter mask opacity fg bg = blend (if fg' > bg' then mask' else 0) fg bg { fg' = intensity fg; bg' = intensity bg; mask' = scale_mask mask opacity ; } blend_ifdarker mask opacity fg bg = blend (if fg' < bg' then mask' else 0) fg bg { fg' = intensity fg ; bg' = intensity bg ; mask' = scale_mask mask opacity ; } blend_multiply mask opacity fg bg = blend (scale_mask mask opacity) fg' bg { fg' = fg / 255 * bg; } blend_add mask opacity fg bg = blend mask fg' bg { fg' = opacity / 255 * fg + bg; } blend_subtract mask opacity fg bg = blend mask fg' bg { fg' = bg - opacity / 255 * fg; } blend_screen mask opacity fg bg = blend mask fg' bg { fg' = 255 - (255 - bg) * (255 - (opacity / 255 * fg)) / 255; } blend_burn mask opacity fg bg = blend mask fg'' bg { // fades to white which has no effect. fg' = (255 - opacity) + opacity * fg / 255; fg'' = 255 - 255 * (255 - bg) / fg'; } blend_softlight mask opacity fg bg = blend mask' fg' bg { mask' = scale_mask mask opacity; fg' = (2 * bg * fg + bg * bg * (1 - 2 * fg / 255)) / 255; } blend_hardlight mask opacity fg bg = blend mask' fg' bg { mask' = scale_mask mask opacity; fg' = 2 / 255 * fg * bg, bg < 129 = 255 - 2 * (255 - bg) * (255 - fg) / 255; } blend_lighten mask opacity fg bg = blend mask' fg' bg { mask' = scale_mask mask opacity; fg' = if bg < fg then fg else bg; } blend_darken mask opacity fg bg = blend mask' fg' bg { mask' = scale_mask mask opacity; fg' = if bg > fg then fg else bg; } blend_dodge mask opacity fg bg = blend mask fg'' bg { // one added to avoid divide by zero fg' = 1 + 255 - (opacity / 255 * fg); fg'' = bg * 255 / fg'; } blend_reflect mask opacity fg bg = blend mask' fg' bg { mask' = scale_mask mask opacity; fg' = bg * bg / (255 - fg); } blend_freeze mask opacity fg bg = blend mask' fg' bg { mask' = scale_mask mask opacity; fg' = 255 - (255 - bg) * (255 - bg) / (1 + fg); } blend_or mask opacity fg bg = bg | (unsigned char) fg' { mask' = scale_mask mask opacity; fg' = fg * mask' / 255; } blend_and mask opacity fg bg = bg & (unsigned char) fg' { mask' = scale_mask mask opacity; fg' = fg * mask' / 255; } // blend types NORMAL = 0; IFLIGHTER = 1; IFDARKER = 2; MULTIPLY = 3; ADD = 4; SUBTRACT = 5; SCREEN = 6; BURN = 7; DODGE = 8; HARDLIGHT = 9; SOFTLIGHT = 10; LIGHTEN = 11; DARKEN = 12; REFLECT = 13; FREEZE = 14; OR = 15; AND = 16; // names we show the user for blend types names = Enum [ _ "Normal" => NORMAL, _ "If Lighter" => IFLIGHTER, _ "If Darker" => IFDARKER, _ "Multiply" => MULTIPLY, _ "Add" => ADD, _ "Subtract" => SUBTRACT, _ "Screen" => SCREEN, _ "Burn" => BURN, _ "Soft Light" => SOFTLIGHT, _ "Hard Light" => HARDLIGHT, _ "Lighten" => LIGHTEN, _ "Darken" => DARKEN, _ "Dodge" => DODGE, _ "Reflect" => REFLECT, _ "Freeze" => FREEZE, _ "Bitwise OR" => OR, _ "Bitwise AND" => AND ]; // functions we call for each blend type actions = Table [ [NORMAL, blend_normal], [IFLIGHTER, blend_iflighter], [IFDARKER, blend_ifdarker], [MULTIPLY, blend_multiply], [ADD, blend_add], [SUBTRACT, blend_subtract], [SCREEN, blend_screen], [BURN, blend_burn], [SOFTLIGHT, blend_softlight], [HARDLIGHT, blend_hardlight], [LIGHTEN, blend_lighten], [DARKEN, blend_darken], [DODGE, blend_dodge], [REFLECT, blend_reflect], [FREEZE, blend_freeze], [OR, blend_or], [AND, blend_and] ]; // make sure im has an alpha channel (set opaque if it hasn't) put_alpha im = im, im.bands == 4 || im.bands == 2 = im ++ 255; // make sure im has no alpha channel lose_alpha im = extract_bands 0 3 im, im.bands == 4 = im?0, im.bands == 2 = im; // does im have al alpha channel? has_alpha im = im.bands == 2 || im.bands == 4; // get the alpha (set opaque if no alpha) get_alpha img = img'?3, img.bands == 4 = img'?1 { img' = put_alpha img; } // add an alpha ... cast the alpha image to match the main image append_alpha im alpha = im ++ clip2fmt im.format alpha; // makes fg the same size as bg, displaced with u, v pixel offset moveit fg bg u v = insert_noexpand u v fg bg' { bg' = image_new bg.width bg.height fg.bands fg.format fg.coding fg.type 0 0 0; } action bg fg = class _value { _vislevel = 3; method = Option_enum "Blend mode" names "Normal"; opacity = Scale "Opacity" 0 255 255; hmove = Scale "Horizontal move by" (-bg.width) (bg.width) 0; vmove = Scale "Vertical move by" (-bg.height) (bg.height) 0; _value = append_alpha blended merged_alpha, has_alpha bg = blended { // displace and resize fg (need to displace alpha too) fg' = moveit (put_alpha fg) bg hmove vmove; // transform to sRGB fg'' = colour_transform_to Image_type.sRGB (lose_alpha fg'); bg' = colour_transform_to Image_type.sRGB (lose_alpha bg); // alphas merged merged_alpha = get_alpha bg | get_alpha fg'; // blend together blended = (actions.lookup 0 1 method.value_thing) (get_alpha fg') opacity.value fg'' bg'; } } } } Filter_overlay_header_item = class Menuaction "_Overlay" "make a colour overlay of two monochrome images" { action a b = class _result { _vislevel = 3; colour = Option "Colour overlay as" [ _ "Green over Red", _ "Blue over Red", _ "Red over Green", _ "Red over Blue", _ "Blue over Green", _ "Green over Blue" ] 0; _result = map_binary overlay a b { overlay a b = image_set_type Image_type.sRGB [(a' ++ b' ++ 0), (a' ++ 0 ++ b'), (b' ++ a' ++ 0), (b' ++ 0 ++ a'), (0 ++ a' ++ b'), (0 ++ b' ++ a')]?colour { a' = colour_transform_to Image_type.B_W a; b' = colour_transform_to Image_type.B_W b; } } } } Filter_colourize_item = class Menuaction "_Colourize" "use a colour image or patch to tint a mono image" { action a b = class _result { _vislevel = 3; tint = Scale "Tint" 0 1 0.6; _result = map_binary tintit a b { tintit a b = colour_transform_to (get_type colour) colourized' { // get the mono thing first [mono, colour] = sortc (const (is_colour_type @ get_type)) [a, b]; colour' = tint * colour_transform_to Image_type.LAB colour; mono' = colour_transform_to Image_type.B_W mono; colourized = (mono' / 2.55) ++ colour'?1 ++ colour'?2; colourized' = image_set_type Image_type.LAB colourized; } } } } Filter_browse_multiband_item = class Menupullright "Bro_wse" "browse though an image, bitwise or bandwise" { Bandwise_item = class Menuaction "B_andwise" "browse through the bands of a multiband image" { action image = class _result { _vislevel = 3; band = Scale "Band" 0 (image.bands - 1) 0; display = Option "Display as" [ _ "Grey", _ "Green over Red", _ "Blue over Red", _ "Red over Green", _ "Red over Blue", _ "Blue over Green", _ "Green over Blue" ] 0; _result = output { down = (int) band.value; up = down + 1; remainder = band.value - down; fade x a = Vector [0], x == 0 = a * x; a = fade remainder image?up; b = fade (1 - remainder) image?down; output = [ a + b, a ++ b ++ 0, a ++ 0 ++ b, b ++ a ++ 0, b ++ 0 ++ a, 0 ++ a ++ b, 0 ++ b ++ a ] ? display; } } } Bitwise_item = class Menuaction "Bi_twise" "browse through the bits of an image" { action x = class _result { _vislevel = 3; bit = Islider "Bit" 0 (nbits - 1) (nbits - 1) { nbits = x.bits, is_Image x = 8; Islider c f t v = class scope.Scale c f t ((int) v) { Scale = Islider; } } _result = map_unary process x { process im = (im & (0x1 << bit.value)) != 0; } } } } #separator Filter_negative_item = class Menuaction "Photographic _Negative" "swap black and white" { action x = map_unary invert x { invert in = clip2fmt in.format (colour_transform_to (get_type in) rgb') { rgb = colour_transform_to Image_type.sRGB in; rgb' = 255 - rgb; } } } Filter_solarize_item = class Menuaction "_Solarise" "invert colours above a threshold" { action x = class _result { _vislevel = 3; kink = Scale "Kink" 0 1 0.5; _result = map_unary process x { process image = hist_map tab'''' image { // max pixel value for this format mx = Image_format.maxval image.format; // make a LUT ... just 8 and 16 bit tab = im_identity_ushort image.bands mx, image.format == Image_format.USHORT = im_identity image.bands; tab' = Image tab; // make basic ^ shape tab'' = tab' * (1 / kink), tab' < mx * kink = (mx - tab') / (1 - kink); tab''' = clip2fmt image.format tab''; // smooth a bit mask = matrix_blur (tab'''.width / 8); tab'''' = convsep mask tab'''; } } } } Filter_diffuse_glow_item = class Menuaction "_Diffuse Glow" "add a halo to highlights" { action x = class _result { _vislevel = 3; r = Scale "Radius" 0 50 5; highlights = Scale "Highlights" 0 100 95; glow = Scale "Glow" 0 1 0.5; colour = Colour_new_item.Widget_colour_item.action; _result = map_unary process x { process image = image' { mono = (unsigned char) (colour_transform_to Image_type.B_W image); thresh = hist_thresh (highlights.value / 100) mono; mask = mono > thresh; blur = convsep (matrix_gaussian_blur r.value) mask; colour' = colour_transform_to image.type colour; image' = image + colour' * glow * (blur / 255); } } } } Filter_drop_shadow_item = class Menuaction "Drop S_hadow" "add a drop shadow to an image" { action x = class _result { _vislevel = 3; sx = Scale "Horizontal shadow" (-50) 50 5; sy = Scale "Vertical shadow" (-50) 50 5; ss = Scale "Shadow softness" 0 20 5; bg_colour = Expression "Background colour" 255; sd_colour = Expression "Shadow colour" 128; alpha = Toggle "Shadow in alpha channel" false; transparent = Toggle "Zero pixels are transparent" false; _result = map_unary shadow x { shadow image = Image final { blur_size = ss.value * 2 + 1; // matrix we blur with to soften shadows blur_matrix = matrix_gaussian_blur blur_size; matrix_size = blur_matrix.width; matrix_radius = (int) (matrix_size / 2) + 1; // position and size of shadow image in input cods // before and after fuzzing shadow_rect = Rect sx.value sy.value image.width image.height; fuzzy_shadow_rect = shadow_rect.margin_adjust matrix_radius; // size and pos of final image, in input cods final_rect = image.rect.union fuzzy_shadow_rect; // hard part of shadow in output cods shadow_rect' = Rect (shadow_rect.left - final_rect.left) (shadow_rect.top - final_rect.top) shadow_rect.width shadow_rect.height; // make the shadow mask ... true for parts which cast // a shadow mask = (foldr1 bitwise_and @ bandsplit) (image.value != 0), transparent = image_new image.width image.height 1 Image_format.UCHAR Image_coding.NOCODING Image_type.B_W 255 0 0; mask' = embed 0 shadow_rect'.left shadow_rect'.top final_rect.width final_rect.height mask; mask'' = convsep blur_matrix mask'; // use mask to fade between bg and shadow colour mk_background colour = image_new final_rect.width final_rect.height image.bands image.format image.coding image.type colour 0 0; bg_image = mk_background bg_colour.expr; shadow_image = mk_background sd_colour.expr; bg = blend mask'' shadow_image bg_image; // make a full size mask fg_mask = embed 0 (image.rect.left - final_rect.left) (image.rect.top - final_rect.top) final_rect.width final_rect.height mask; // wrap up the input image ... put the shadow colour // around it, so if we are outputting a separate // alpha the shadow colour will be set correctly fg = insert (image.rect.left - final_rect.left) (image.rect.top - final_rect.top) image.value shadow_image; final // make a separate alpha = fg ++ mask'', alpha // paste image over shadow = if fg_mask then fg else bg; } } } } Filter_paint_text_item = class Menuaction "_Paint Text" "paint text into an image" { action x = paint_position, is_Group x = paint_area { paint_area = class _result { _check_args = [ [x, "x", check_Image] ]; _vislevel = 3; text = String "Text to paint" "Hello world!"; font = Fontname "Use font" Workspaces.Preferences.PAINTBOX_FONT; align = Option "Alignment" ["Left", "Centre", "Right"] 0; dpi = Expression "DPI" 300; colour = Expression "Text colour" 255; place = Region x (x.width / 4) (x.height / 4) (x.width / 2) (x.height / 2); _result = insert_noexpand place.left place.top (blend txt' fg place) x { fg = image_new place.width place.height x.bands x.format x.coding x.type colour.expr 0 0; txt = Image (im_text text.value font.value place.width align.value (to_real dpi)); bg = im_black place.width place.height 1; txt' = insert_noexpand 0 0 txt bg; } } paint_position = class _result { _vislevel = 3; text = Pattern_images_item.Text_item.action; colour = Expression "Text colour" 255; position = Option "Position" [ _ "North-west", _ "North", _ "North-east", _ "West", _ "Centre", _ "East", _ "South-west", _ "South", _ "South-east", _ "Specify in pixels" ] 4; left = Expression "Pixels from left" 0; top = Expression "Pixels from top" 0; _result = map_unary paint x { paint image = insert_noexpand x' y' place' image { xr = image.width - text.width; yr = image.height - text.height; x = left.expr, position == 9 = [0, xr / 2, xr]?(position % 3); y = top.expr, position == 9 = [0, yr / 2, yr]?(position / 3); x' = range 0 x (image.width - 1); y' = range 0 y (image.height - 1); w' = range 1 text.width (image.width - x'); h' = range 1 text.height (image.height - y'); place = extract_area x' y' w' h' image; text' = insert_noexpand 0 0 text (im_black w' h' 1); fg = image_new w' h' image.bands image.format image.coding image.type colour.expr 0 0; place' = blend text' fg place; } } } } } Autotrace_item = class Menuaction "_Trace" "convert a bitmap to an SVG file" { action x = class _result { _vislevel = 3; despeckle = Scale "Despeckle level" 1 20 1; line = Scale "Line threshold" 1 20 1; center = Toggle "Trace centreline" false; scale = Scale "SVG scale" 0.1 10 1; command = "autotrace %s " ++ join_sep " " [ofmt, ofile, desp, lint, cent] { prog = search_for_error "autotrace"; ofmt = "-output-format svg"; ofile = "-output-file %s"; desp = "-despeckle-level " ++ print despeckle.value; lint = "-line-threshold " ++ print line.value; cent = if center then "-centerline " else ""; } _result = Image output { [output] = vips_call "system" [command] [$in => [x.value], $in_format => "%s.ppm", $out => true, $out_format => "%s.svg[scale=" ++ print scale.value ++ "]" ]; } } } nip2-8.7.0/share/nip2/compat/8.4/Histogram.def0000644000175000017500000001620513224651032015504 00000000000000Hist_new_item = class Menupullright "_New" "new histogram" { Hist_item = class Menuaction "_Identity" "make an identity histogram" { action = class _result { _vislevel = 3; d = Option "Depth" ["8 bit", "16 bit"] 0; _result = Plot [] ([im_identity 1, im_identity_ushort 1 65536]?d); } } Hist_new_from_matrix = Matrix_buildlut_item; Hist_from_image_item = class Menuaction "Ta_g Image As Histogram" "set image Type to Histogram" { action x = hist_tag x; } Tone_item = class Menuaction "_Tone Curve" "make a new tone mapping curve" { action = class _result { _vislevel = 3; d = Option "Depth" ["8 bit", "16 bit"] 0; b = Scale "Black point" 0 100 0; w = Scale "White point" 0 100 100; sp = Scale "Shadow point" 0.1 0.3 0.2; mp = Scale "Mid-tone point" 0.4 0.6 0.5; hp = Scale "Highlight point" 0.7 0.9 0.8; sa = Scale "Shadow adjust" (-15) 15 0; ma = Scale "Mid-tone adjust" (-30) 30 0; ha = Scale "Highlight adjust" (-15) 15 0; _result = tone_build fmt b w sp mp hp sa ma ha { fmt = [Image_format.UCHAR, Image_format.USHORT]?d; } } } } Hist_convert_to_hist_item = class Menuaction "Con_vert to Histogram" "convert anything to a histogram" { action x = hist_tag (to_image x); } Hist_find_item = class Menupullright "_Find" "find a histogram" { Oned_item = class Menuaction "_One Dimension" "for a n-band image, make an n-band 1D histogram" { action x = map_unary hist_find x; } Nd_item = class Menuaction "_Many Dimensions" "for a n-band image, make an n-dimensional histogram" { action x = class _result { _vislevel = 3; // default to something small-ish bins = Expression "Number of bins in each dimension" 8; _result = map_unary process x { process in = hist_find_nD bins in; } } } Indexed_item = class Menuaction "_Indexed" "use a 1-band index image to pick bins for an n-band image" { action x y = map_binary map x y { map a b = hist_find_indexed index im { [im, index] = sortc (const is_index) [a, b]; is_index x = has_image x && b == 1 && (f == Image_format.UCHAR || f == Image_format.USHORT) { im = get_image x; b = get_bands x; f = get_format x; } } } } } Hist_map_item = class Menuaction "_Map" "map an image through a histogram" { action x y = map_binary map x y { map a b = hist_map hist im { [im, hist] = sortc (const is_hist) [a, b]; } } } Hist_eq_item = Filter_enhance_item.Hist_equal_item; #separator Hist_cum_item = class Menuaction "_Integrate" "form cumulative histogram" { action x = map_unary hist_cum x; } Hist_diff_item = class Menuaction "_Differentiate" "find point-to-point differences (inverse of Integrate)" { action x = map_unary hist_diff x; } Hist_norm_item = class Menuaction "N_ormalise" "normalise a histogram" { action x = map_unary hist_norm x; } Hist_inv_item = class Menuaction "In_vert" "invert a histogram" { action x = map_unary hist_inv x; } Hist_match_item = class Menuaction "Ma_tch" "find LUT which will match first histogram to second" { action in ref = map_binary hist_match in ref; } Hist_zerox_item = class Menuaction "_Zero Crossings" "find zero crossings" { action x = class _result { _vislevel = 3; edge = Option "Direction" [ "Positive-going", "Negative-going" ] 0; _result = map_unary (zerox (if edge == 0 then -1 else 1)) x; } } #separator Hist_profile_item = class Menuaction "Find _Profile" "search from image edges for non-zero pixels" { action x = class _result { _vislevel = 3; edge = Option "Search from" [ "Top edge down", "Left edge to right", "Bottom edge up", "Right edge to left" ] 2; _result = map_unary profile x { profile image = (Plot_histogram @ hist_tag) [ profilemb 0 image.value, profilemb 1 image.value, profilemb 0 (fliptb image.value), profilemb 1 (fliplr image.value) ]?edge; // im_profile only does 1 band images :-( profilemb d = bandjoin @ map (converse im_profile d) @ bandsplit; } } } Hist_project_item = class Menuaction "Find Pro_jections" "find horizontal and vertical projections" { action x = class { _vislevel = 2; _result = map_unary project x; // extract the result ... could be a group extr n = Plot_histogram _result?n, is_list _result = Group (map (Plot_histogram @ converse subscript n) _result.value); horizontal = extr 0; vertical = extr 1; centre = (gravity horizontal, gravity vertical); } } #separator Hist_graph_item = class Menuaction "P_lot Slice" "plot a slice along a guide or arrow" { action x = class _value { _vislevel = 3; width = Scale "Width" 1 40 1; displace = Scale "Horizontal displace" (-50) 50 0; vdisplace = Scale "Vertical displace" (-50) 50 0; _value = map_unary graph x { graph arrow = hist_tag area' { area = extract_arrow displace.value vdisplace.value width.value arrow; // squish vertically to get an average area' = resize Kernel_linear 1 (1 / width.value) area; } } } } Extract_arrow_item = class Menuaction "Extract _Arrow" "extract the area around an arrow" { action x = class _value { _vislevel = 3; width = Scale "Width" 1 40 1; displace = Scale "Horizontal displace" (-50) 50 0; vdisplace = Scale "Vertical displace" (-50) 50 0; _value = map_unary (extract_arrow displace.value vdisplace.value width.value) x; } } Hist_plot_item = class Menuaction "Plot _Object" "plot an object as a bar, point or line graph" { action x = class _result { _vislevel = 3; caption = Expression "Chart caption" "none"; format = Option_enum "Format" Plot_format.names "YYYY"; style = Option_enum "Style" Plot_style.names "Line"; auto = Toggle "Auto Range" true; xmin = Expression "X range minimum" 0; xmax = Expression "X range maximum" 1; ymin = Expression "Y range minimum" 0; ymax = Expression "Y range maximum" 1; xcaption = Expression "X axis caption" "none"; ycaption = Expression "Y axis caption" "none"; series_captions = Expression "Series captions" ["Band 0"]; _result = Plot options (image x) { options = [$style => style.value, $format => format.value] ++ range ++ captions; range = [], auto = [$xmin => xmin.expr, $xmax => xmax.expr, $ymin => ymin.expr, $ymax => ymax.expr]; captions = concat (map test caption_options) ++ [$series_captions => series_captions.expr] { caption_options = [ $caption => caption.expr, $xcaption => xcaption.expr, $ycaption => ycaption.expr ]; test x = [], value == "none" = [option_name => value] { [option_name, value] = x; } } image x = image (extract_arrow 0 0 1 x), is_Arrow x = get_image x, has_image x = x2b im, b == 1 = im { im = get_image (to_image x); w = get_width im; h = get_height im; b = get_bands im; // matrix to image makes a 1-band mxn image // we need to put columns into bands x2b im = bandjoin (map extract_col [0 .. w - 1]) { extract_col x = extract_area x 0 1 h im; } } } } } nip2-8.7.0/share/nip2/compat/8.4/Object.def0000644000175000017500000000220513224651032014750 00000000000000Object_duplicate_item = class Menuaction "_Duplicate" "take a copy of an object" { action x = map_unary copy x; } #separator Object_list_to_group_item = class Menuaction "_List to Group" "turn a list of objects into a group" { action x = to_group x; } Object_group_to_list_item = class Menuaction "_Group to List" "turn a group into a list of objects" { action x = to_list x; } #separator Object_break_item = class Menuaction "_Break Up Object" "break an object into a list of components" { action x = map_unary break x { break x = bandsplit x, is_Image x = map Vector x.value, is_Matrix x = x.value, is_Vector x || is_Real x = error "Breakup: not Image/Matrix/Vector/Real"; } } Object_assemble_item = class Menuaction "_Assemble Objects" "assemble a list of objects into a single object" { action x = map_unary ass x { ass x = [], x == [] = Vector x, is_real_list x = Matrix x, is_matrix x = bandjoin x, is_listof is_Image x = Vector (map get_value x), is_listof is_Real x = Matrix (map get_value x), is_listof is_Vector x = error "Assemble: not list of Image/Vector/Real/image/real"; } } nip2-8.7.0/share/nip2/compat/8.4/Makefile.in0000644000175000017500000003702413350464104015140 00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = share/nip2/compat/8.4 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(startdir)" DATA = $(start_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BISON = @BISON@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DLLWRAP = @DLLWRAP@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FFTW3_CFLAGS = @FFTW3_CFLAGS@ FFTW3_LIBS = @FFTW3_LIBS@ FGREP = @FGREP@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_LIBS = @GSL_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ IP_CFLAGS = @IP_CFLAGS@ IP_LIBS = @IP_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBGOFFICE_CFLAGS = @LIBGOFFICE_CFLAGS@ LIBGOFFICE_LIBS = @LIBGOFFICE_LIBS@ LIBGSF_CFLAGS = @LIBGSF_CFLAGS@ LIBGSF_LIBS = @LIBGSF_LIBS@ LIBGVC_CFLAGS = @LIBGVC_CFLAGS@ LIBGVC_LIBS = @LIBGVC_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ 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@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ REQUIRED_PACKAGES_CFLAGS = @REQUIRED_PACKAGES_CFLAGS@ REQUIRED_PACKAGES_LIBS = @REQUIRED_PACKAGES_LIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOP_SRCDIR = @TOP_SRCDIR@ UPDATE_DESKTOP_DATABASE = @UPDATE_DESKTOP_DATABASE@ UPDATE_MIME_DATABASE = @UPDATE_MIME_DATABASE@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XDG_OPEN = @XDG_OPEN@ XGETTEXT = @XGETTEXT@ 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@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ startdir = $(pkgdatadir)/compat/8.4 start_DATA = \ Math.def \ Image.def \ Magick.def \ Colour.def \ Tasks.def \ Object.def \ Filter.def \ Matrix.def \ Widgets.def \ Histogram.def \ Preferences.ws \ _joe_extra.def \ _joe_utilities.def \ _convert.def \ _generate.def \ _list.def \ _predicate.def \ _stdenv.def \ _Object.def \ _magick.def \ _types.def EXTRA_DIST = $(start_DATA) all: all-am .SUFFIXES: $(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) --foreign share/nip2/compat/8.4/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign share/nip2/compat/8.4/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): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-startDATA: $(start_DATA) @$(NORMAL_INSTALL) @list='$(start_DATA)'; test -n "$(startdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(startdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(startdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(startdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(startdir)" || exit $$?; \ done uninstall-startDATA: @$(NORMAL_UNINSTALL) @list='$(start_DATA)'; test -n "$(startdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(startdir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: 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 check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(startdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-startDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-startDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-startDATA install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags-am uninstall uninstall-am uninstall-startDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: nip2-8.7.0/share/nip2/compat/8.4/Matrix.def0000644000175000017500000002573113224651032015017 00000000000000 Matrix_build_item = class Menupullright "_New" "make a new matrix of some sort" { Plain_item = class Menuaction "_Plain" "make a new plain matrix widget" { action = Matrix (identity_matrix 3); } Convolution_item = class Menuaction "_Convolution" "make a new convolution matrix widget" { action = Matrix_con 1 0 [[0, 0, 0], [0, 1, 0], [0, 0, 0]]; } Recombination_item = class Menuaction "_Recombination" "make a new recombination matrix widget" { action = Matrix_rec (identity_matrix 3); } Morphology_item = class Menuaction "_Morphology" "make a new morphology matrix widget" { action = Matrix_mor [[0, 0, 0], [0, 255, 0], [0, 0, 0]]; } sep1 = Menuseparator; Matrix_identity_item = class Menuaction "_Identity" "make an identity matrix" { action = identity (identity_matrix 5); identity v = class _result { _vislevel = 3; s = Expression "Size" (len v); _result = Matrix (identity_matrix (to_real s)), to_real s != len v; = Matrix v; Matrix_vips value scale offset filename display = identity value; } } Matrix_series_item = class Menuaction "_Series" "make a series" { action = series (mkseries 0 1 5); mkseries s t e = transpose [[to_real s, to_real s + to_real t .. to_real e]]; series v = class _result { _vislevel = 3; _s = v?0?0; _t = v?1?0 - v?0?0; _e = (last v)?0; s = Expression "Start value" _s; t = Expression "Step by" _t; e = Expression "End value" _e; _result = Matrix (mkseries s t e), to_real s != _s || to_real t != _t || to_real e != _e = Matrix v; Matrix_vips value scale offset filename display = series value; } } Matrix_square_item = class Menuaction "_Square" "make a square matrix" { action = square (mksquare 5); mksquare s = replicate s (take s [1, 1 ..]); square v = class _result { _vislevel = 3; s = Expression "Size" (len v); _result = Matrix_con (sum v) 0 v, len v == to_real s = Matrix_con (sum m) 0 m { m = mksquare (to_real s); } Matrix_vips value scale offset filename display = square value; } } Matrix_circular_item = class Menuaction "_Circular" "make a circular matrix" { action = circle (mkcircle 3); mkcircle r = map2 (map2 pyth) xes yes { line = [-r .. r]; xes = replicate (2 * r + 1) line; yes = transpose xes; pyth a b = 1, (a**2 + b**2) ** 0.5 <= r = 0; } circle v = class _result { _vislevel = 3; r = Expression "Radius" ((len v - 1) / 2); _result = Matrix_con (sum v) 0 v, len v == r.expr * 2 + 1 = Matrix_con (sum m) 0 m { m = mkcircle (to_real r); } Matrix_vips value scale offset filename display = circle value; } } Matrix_gaussian_item = class Menuaction "_Gaussian" "make a gaussian matrix" { action = class _result { _vislevel = 3; s = Scale "Sigma" 0.001 10 1; ma = Scale "Minimum amplitude" 0 1 0.2; integer = Toggle "Integer" false; _result = fn s.value ma.value { fn = im_gauss_imask, integer = im_gauss_dmask; } } } Matrix_laplacian_item = class Menuaction "_Laplacian" "make the Laplacian of a Gaussian matrix" { action = class _result { _vislevel = 3; s = Scale "Sigma" 0.001 10 1.5; ma = Scale "Minimum amplitude" 0 1 0.1; integer = Toggle "Integer" false; _result = fn s.value ma.value { fn = im_log_imask, integer = im_log_dmask; } } } } Matrix_to_matrix_item = class Menuaction "Con_vert to Matrix" "convert anything to a matrix" { action x = to_matrix x; } #separator Matrix_extract_item = class Menupullright "_Extract" "extract rows or columns from a matrix" { Rows_item = class Menuaction "_Rows" "extract rows" { action x = class _result { _vislevel = 3; first = Expression "Extract from row" 0; number = Expression "Extract this many rows" 1; _result = map_unary process x { process x = extract_area 0 first (get_width x) number x; } } } Columns_item = class Menuaction "_Columns" "extract columns" { action x = class _result { _vislevel = 3; first = Expression "Extract from column" 0; number = Expression "Extract this many columns" 1; _result = map_unary process x { process mat = extract_area first 0 number (get_height x) x; } } } Area_item = class Menuaction "_Area" "extract area" { action x = class _result { _vislevel = 3; left = Expression "First column" 0; top = Expression "First row" 0; width = Expression "Number of columns" 1; height = Expression "Number of rows" 1; _result = map_unary process x { process mat = extract_area left top width height x; } } } Diagonal_item = class Menuaction "_Diagonal" "extract diagonal" { action x = class _result { _vislevel = 3; which = Option "Extract" [ "Leading Diagonal", "Trailing Diagonal" ] 0; _result = map_unary process x { process mat = mat.Matrix_base (map2 extr [0..] mat.value), which == 0 = mat.Matrix_base (map2 extr [mat.width - 1, mat.width - 2 .. 0] mat.value); extr n l = [l?n]; } } } } Matrix_insert_item = class Menupullright "_Insert" "insert rows or columns into a matrix" { // make a new 8-bit uchar image of wxh with pixels set to p // use to generate new cells newim w h p = image_new w h 1 Image_format.UCHAR Image_coding.NOCODING Image_type.B_W p 0 0; Rows_item = class Menuaction "_Rows" "insert rows" { action x = class _result { _vislevel = 3; first = Expression "Insert at row" 0; number = Expression "Insert this many rows" 1; item = Expression "Set new cells to" 0; _result = map_unary process x { process x = foldl1 join_tb (concat [top, new, bottom]) { top = [extract_area 0 0 w f x], f > 0 = []; new = [(if is_Matrix x then to_matrix else id) (newim w number item.expr)]; bottom = [extract_area 0 f w (h - f) x], f < h = []; f = to_real first; w = get_width x; h = get_height x; } } } } Columns_item = class Menuaction "_Columns" "insert columns" { action x = class _result { _vislevel = 3; first = Expression "Insert at column" 0; number = Expression "Insert this many columns" 1; item = Expression "Set new cells to" 0; _result = map_unary process x { process x = foldl1 join_lr (concat [left, new, right]) { left = [extract_area 0 0 f h x], f > 0 = []; new = [(if is_Matrix x then to_matrix else id) (newim number h item.expr)]; right = [extract_area f 0 (w - f) h x], f < w = []; f = to_real first; w = get_width x; h = get_height x; } } } } } Matrix_delete_item = class Menupullright "_Delete" "delete rows or columns from a matrix" { // remove number of items, starting at first delete first number l = take (to_real first) l ++ drop (to_real first + to_real number) l; Rows_item = class Menuaction "_Rows" "delete rows" { action x = class _result { _vislevel = 3; first = Expression "Delete from row" 0; number = Expression "Delete this many rows" 1; _result = map_unary process x { process x = foldl1 join_tb (concat [top, bottom]) { top = [extract_area 0 0 w f x], f > 0 = []; bottom = [extract_area 0 b w (h - b) x], b < h = []; f = to_real first; n = to_real number; b = f + n; w = get_width x; h = get_height x; } } } } Columns_item = class Menuaction "_Columns" "delete columns" { action x = class _result { _vislevel = 3; first = Expression "Delete from column" 0; number = Expression "Delete this many columns" 1; _result = map_unary process x { process x = foldl1 join_lr (concat [left, right]) { left = [extract_area 0 0 f h x], f > 0 = []; right = [extract_area r 0 (w - r) h x], r < w = []; f = to_real first; n = to_real number; r = f + n; w = get_width x; h = get_height x; } } } } } Matrix_join = class Menupullright "_Join" "join two matricies" { Left_right_item = class Menuaction "_Left to Right" "join two matricies left-right" { action a b = map_binary join_lr a b; } Top_bottom_item = class Menuaction "_Top to Bottom" "joiin two matricies top-bottom" { action a b = map_binary join_tb a b; } } Matrix_rotate_item = class Menupullright "_Rotate" "clockwise rotation by fixed angles" { rot90 = Image_transform_item.Rotate_item.Fixed_item.Rot90_item; rot180 = Image_transform_item.Rotate_item.Fixed_item.Rot180_item; rot270 = Image_transform_item.Rotate_item.Fixed_item.Rot270_item; Matrix_rot45_item = class Menuaction "_45 Degrees" "45 degree rotate (square, odd-length-sides only)" { action x = map_unary rot45 x; } } Matrix_flip_item = Image_transform_item.Flip_item; Matrix_sort_item = class Menuaction "_Sort" "sort by column or row" { action x = class _result { _vislevel = 3; o = Option (_ "Orientation") [ _ "Sort by column", _ "Sort by row" ] 0; i = Expression (_ "Sort on index") 0; d = Option (_ "Direction") [ _ "Ascending", _ "Descending" ] 0; _result = map_unary sort x { idx = to_real i; pred a b = a?idx <= b?idx, d == 0 = a?idx >= b?idx; sort x = (x.Matrix_base @ sortc pred) x.value, o == 0 = (x.Matrix_base @ transpose @ sortc pred @ transpose) x.value; } } } #separator Matrix_invert_item = class Menuaction "In_vert" "calculate inverse matrix" { action x = map_unary (converse power (-1)) x; } Matrix_transpose_item = class Menuaction "_Transpose" "swap rows and columns" { action x = map_unary transpose x; } #separator Matrix_plot_scatter_item = class Menuaction "_Plot Scatter" "plot a scatter graph of a matrix of [x,y1,y2,..] coordinates" { action x = class _result { _check_args = [ [x, "x", check_Matrix] ]; _vislevel = 3; auto = Toggle "Auto Range" true; xmin = Expression "X range minimum" 0; xmax = Expression "X range maximum" 1; ymin = Expression "Y range minimum" 0; ymax = Expression "Y range maximum" 1; _result = Plot options ((x2b @ get_image @ to_image) x) { options = [$style => Plot_style.POINT, $format => Plot_format.XYYY] ++ range; range = [], auto = [$xmin => xmin.expr, $xmax => xmax.expr, $ymin => ymin.expr, $ymax => ymax.expr]; // matrix to image makes a 1-band mxn image // we need to put columns into bands x2b im = bandjoin (map extract_col [0 .. w - 1]) { w = get_width im; h = get_height im; b = get_bands im; extract_col x = extract_area x 0 1 h im; } } } } Matrix_plot_item = Hist_plot_item; Matrix_buildlut_item = class Menuaction "_Build LUT From Scatter" "make a lookup table from a matrix of [x,y1,y2..] coordinates" { action x = class _result { _check_args = [ [x, "x", check_Matrix] ]; _result = buildlut x; } } nip2-8.7.0/share/nip2/compat/8.4/_convert.def0000644000175000017500000004424313224651032015371 00000000000000 /* Try to make a Matrix ... works for Vector/Image/Real, plus image/real */ to_matrix x = to_matrix x.expr, is_Expression x = x, is_Matrix x = oo_unary_function to_matrix_op x, is_class x = tom x { to_matrix_op = Operator "to_matrix" tom Operator_type.COMPOUND false; tom x = Matrix (itom x), is_image x = Matrix [[x]], is_real x = Matrix [x], is_real_list x = Matrix x, is_matrix x = error (_ "bad arguments to " ++ "to_matrix"); itom i = (im_vips2mask ((double) i)).value, is_image i = error (_ "not image"); } /* Try to make an Image ... works for Vector/Matrix/Real, plus image/real * Special case for Colour ... pull out the colour_space and set Type in the * image. */ to_image x = to_image x.expr, is_Expression x = Image x.value, is_Plot x = x, is_Image x = Image (image_set_type (Image_type.colour_spaces.lookup 0 1 x.colour_space) (mtoi [x.value])), is_Colour x = oo_unary_function to_image_op x, is_class x = toi x { to_image_op = Operator "to_image" toi Operator_type.COMPOUND false; toi x = Image x, is_image x = Image (mtoi [[x]]), is_real x = Image (mtoi [x]), is_real_list x = Image (mtoi x), is_matrix x = error (_ "bad arguments to " ++ "to_image"); // [[real]] -> image mtoi m = im_mask2vips (Matrix m), width != 3 = joinup (im_mask2vips (Matrix m)) { width = len m?0; height = len m; joinup i = b1 ++ b2 ++ b3 { b1 = extract_area 0 0 1 height i; b2 = extract_area 1 0 1 height i; b3 = extract_area 2 0 1 height i; } } } // like to_image, but we do 1x1 pixel + x, then embed it up // always make an unwrapped image for speed ... this gets used by ifthenelse // and stuff like that // format can be NULL, meaning set format from x to_image_size width height bands format x = x, is_image x = x.value, is_Image x = im'' { // we want x to set the target format if we don't have one, so we // can't use image_new im = im_black 1 1 bands + x; im' = clip2fmt format im, format != NULL = im; im'' = embed 1 0 0 width height im'; } /* Try to make a Colour. */ to_colour x = to_colour x.expr, is_Expression x = x, is_Colour x = to_colour (extract_area x.left x.top 1 1 x.image), is_Mark x = oo_unary_function to_colour_op x, is_class x = toc x { to_colour_op = Operator "to_colour" toc Operator_type.COMPOUND false; toc x = Colour (colour_space (get_type x)) (map mean (bandsplit (get_image x))), has_image x && has_type x = Colour "sRGB" [x, x, x], is_real x // since Colour can't do mono = Colour "sRGB" x, is_real_list x && is_list_len 3 x = map toc x, is_matrix x = error (_ "bad arguments to " ++ "to_colour"); colour_space type = table.get_name type, table.has_name type = error (_ "unable to make Colour from " ++ table.get_name type ++ _ " image") { table = Image_type.colour_spaces; } } /* Try to make a real. (not a Real!) */ to_real x = to_real x.expr, is_Expression x = oo_unary_function to_real_op x, is_class x = tor x { to_real_op = Operator "to_real" tor Operator_type.COMPOUND false; tor x = x, is_real x = abs x, is_complex x = 1, is_bool x && x = 0, is_bool x && !x = error (_ "bad arguments to " ++ "to_real"); } to_int x = (int) (to_real x); /* Try to make a list ... ungroup, basically. We remove the innermost layer of * Groups. */ to_list x = x.value, is_Group x && !contains_Group x.value = Group (map to_list x.value), is_Group x = x; /* Try to make a group. The outermost list objects become Group()'d. */ to_group x = Group x, is_list x = Group (map to_group x.value), is_Group x = x; /* Parse a positive integer. */ parse_pint l = foldl acc 0 l { acc sofar ch = sofar * 10 + parse_c ch; /* Turn a char digit to a number. */ parse_c ch = error (_ "not a digit"), !is_digit ch = (int) ch - (int) '0'; } /* Parse an integer, with an optional sign character. */ parse_int l = error (_ "badly formed number"), !is_list_len 2 parts = sign * n { parts = splitpl [member "+-", is_digit] l; n = parse_pint parts?1; sign = 1, parts?0 == [] || parts?0 == "+" = -1; } /* Parse a float. * [+-]?[0-9]*([.][0-9]*)?(e[0-9]+)? */ parse_float l = err, !is_list_len 4 parts = sign * (abs ipart + fpart) * 10 ** exp { err = error (_ "badly formed number"); parts = splitpl [ member "+-0123456789", member ".0123456789", member "eE", member "+-0123456789" ] l; ipart = parse_int parts?0; sign = 1, ipart > 0 = -1; fpart = 0, parts?1 == []; = err, parts?1?0 != '.' = parse_pint (tl parts?1) / 10 ** (len parts?1 - 1); exp = 0, parts?2 == [] && parts?3 == [] = err, parts?2 == [] = parse_int parts?3; } /* Parse a time in "hh:mm:ss" into seconds. We could do this in one line :) = (sum @ map2 multiply (iterate (multiply 60) 1) @ reverse @ map parse_pint @ map (subscript (splitpl [is_digit, equal ':', is_digit, equal ':', is_digit] l))) [0,2,4]; but it's totally unreadable. */ parse_time l = error (_ "badly formed time"), !is_list_len 5 parts = s + 60 * m + 60 * 60 * h { parts = splitpl [is_digit, equal ':', is_digit, equal ':', is_digit] l; h = parse_int parts?0; m = parse_int parts?2; s = parse_int parts?4; } /* matrix to convert D65 XYZ to D50 XYZ ... direct conversion, found by * measuring a macbeth chart in D50 and D65 and doing a LMS to get a matrix */ D652D50_direct = Matrix [[ 1.13529, -0.0604663, -0.0606321 ], [ 0.0975399, 0.935024, -0.0256156 ], [ -0.0336428, 0.0414702, 0.994135 ]]; D502D65_direct = D652D50_direct ** -1; /* Convert normalised XYZ to bradford RGB. */ XYZ2RGBbrad = Matrix [[0.8951, 0.2664, -0.1614], [-0.7502, 1.7135, 0.0367], [0.0389, -0.0685, 1.0296]]; /* Convert bradford RGB to normalised XYZ. */ RGBbrad2XYZ = XYZ2RGBbrad ** -1; D93_whitepoint = Vector [89.7400, 100, 130.7700]; D75_whitepoint = Vector [94.9682, 100, 122.5710]; D65_whitepoint = Vector [95.0470, 100, 108.8827]; D55_whitepoint = Vector [95.6831, 100, 92.0871]; D50_whitepoint = Vector [96.4250, 100, 82.4680]; A_whitepoint = Vector [109.8503, 100, 35.5849]; // 2856K B_whitepoint = Vector [99.0720, 100, 85.2230]; // 4874K C_whitepoint = Vector [98.0700, 100, 118.2300]; // 6774K E_whitepoint = Vector [100, 100, 100]; // ill. free D3250_whitepoint = Vector [105.6590, 100, 45.8501]; Whitepoints = Enum [ $D93 => D93_whitepoint, $D75 => D75_whitepoint, $D65 => D65_whitepoint, $D55 => D55_whitepoint, $D50 => D50_whitepoint, $A => A_whitepoint, $B => B_whitepoint, $C => C_whitepoint, $E => E_whitepoint, $D3250 => D3250_whitepoint ]; /* Convert D50 XYZ to D65 using the bradford chromatic adaptation approx. */ im_D502D65 xyz = xyz''' { xyz' = xyz / D50_whitepoint; rgb = recomb XYZ2RGBbrad xyz'; // move white in bradford RGB rgb' = rgb / Vector [0.94, 1.02, 1.33]; xyz'' = recomb RGBbrad2XYZ rgb'; // back to D65 xyz''' = xyz'' * D65_whitepoint; } /* Convert D65 XYZ to D50 using the bradford approx. */ im_D652D50 xyz = xyz''' { xyz' = xyz / D65_whitepoint; rgb = recomb XYZ2RGBbrad xyz'; // move white in bradford RGB rgb' = rgb * Vector [0.94, 1.02, 1.33]; xyz'' = recomb RGBbrad2XYZ rgb'; xyz''' = xyz'' * D50_whitepoint; } /* Convert D50 XYZ to Lab. */ im_D50XYZ2Lab xyz = im_XYZ2Lab_temp xyz D50_whitepoint.value?0 D50_whitepoint.value?1 D50_whitepoint.value?2; im_D50Lab2XYZ lab = im_Lab2XYZ_temp lab D50_whitepoint.value?0 D50_whitepoint.value?1 D50_whitepoint.value?2; /* ... and mono conversions */ im_sRGB2mono in = (image_set_type Image_type.B_W @ clip2fmt (get_header "BandFmt" in) @ recomb (Matrix [[.3, .6, .1]])) in; im_mono2sRGB in = image_set_type Image_type.sRGB (in ++ in ++ in); im_sRGB2Lab = im_XYZ2Lab @ im_sRGB2XYZ; im_Lab2sRGB = im_XYZ2sRGB @ im_Lab2XYZ; // from the 16 bit RGB and GREY formats im_1628 x = im_clip (x >> 8); im_162f x = x / 256; im_8216 x = (im_clip2us x) << 8; im_f216 x = im_clip2us (x * 256); im_RGB162GREY16 in = (image_set_type Image_type.GREY16 @ clip2fmt (get_header "BandFmt" in) @ recomb (Matrix [[.3, .6, .1]])) in; im_GREY162RGB16 in = image_set_type Image_type.RGB16 (in ++ in ++ in); /* apply a func to an image ... make it 1 or 3 bands, and reapply other bands * on the way out. Except if it's LABPACK. */ colour_apply fn x = fn x, b == 1 || b == 3 || c == Image_coding.LABPACK = x'' { b = get_bands x; c = get_coding x; first = extract_bands 0 3 x, b > 3 = extract_bands 0 1 x; tail = extract_bands 3 (b - 3) x, b > 3 = extract_bands 1 (b - 1) x; x' = fn first; x'' = x' ++ clip2fmt (get_format x') tail; } /* Any 1-ary colour op, applied to Vector/Image/Matrix or image */ colour_unary fn x = oo_unary_function colour_op x, is_class x = colour_apply fn x, is_image x = colour_apply fn [x], is_real x = error (_ "bad arguments to " ++ "colour_unary") { // COMPOUND_REWRAP ... signal to the colour class to go to image and // back colour_op = Operator "colour_unary" colour_object Operator_type.COMPOUND_REWRAP false; colour_object x = colour_real_list x, is_real_list x = map colour_real_list x, is_matrix x = colour_apply fn x, is_image x = error (_ "bad arguments to " ++ "colour_unary"); colour_real_list l = (to_matrix (fn (float) (to_image (Vector l)).value)).value?0; } /* Any symmetric 2-ary colour op, applied to Vector/Image/Matrix or image ... * name is op name for error messages etc. */ colour_binary name fn x y = oo_binary_function colour_op x y, is_class x = oo_binary'_function colour_op x y, is_class y = fn x y, is_image x && is_image y = error (_ "bad arguments to " ++ name) { colour_op = Operator name colour_object Operator_type.COMPOUND_REWRAP true; colour_object x y = fn x y, is_image x && is_image y = colour_real_list fn x y, is_real_list x && is_real_list y = map (colour_real_list fn x) y, is_real_list x && is_matrix y = map (colour_real_list (converse fn) y) x, is_matrix x && is_real_list y = map2 (colour_real_list fn) x y, is_matrix x && is_matrix y = error (_ "bad arguments to " ++ name); colour_real_list fn l1 l2 = (to_matrix (fn i1 i2)).value?0 { i1 = (float) (to_image (Vector l1)).value; i2 = (float) (to_image (Vector l2)).value; } } _colour_conversion_table = [ /* Lines are [space-from, space-to, conversion function]. Could do * this as a big array, but table lookup feels safer. */ [B_W, B_W, image_set_type B_W], [B_W, XYZ, im_sRGB2XYZ @ im_mono2sRGB @ im_clip], [B_W, YXY, im_XYZ2Yxy @ im_sRGB2XYZ @ im_mono2sRGB @ im_clip], [B_W, LAB, im_sRGB2Lab @ im_mono2sRGB @ im_clip], [B_W, LCH, im_Lab2LCh @ im_sRGB2Lab @ im_mono2sRGB @ im_clip], [B_W, UCS, im_XYZ2UCS @ im_sRGB2XYZ @ im_mono2sRGB @ im_clip], [B_W, RGB, im_XYZ2disp @ im_sRGB2XYZ @ im_mono2sRGB @ im_clip], [B_W, sRGB, im_mono2sRGB @ im_clip], [B_W, RGB16, image_set_type RGB16 @ im_8216 @ im_mono2sRGB], [B_W, GREY16, image_set_type GREY16 @ im_8216], [B_W, LABQ, im_Lab2LabQ @ im_sRGB2Lab @ im_mono2sRGB @ im_clip], [B_W, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_sRGB2Lab @ im_mono2sRGB @ im_clip], [XYZ, B_W, im_sRGB2mono @ im_XYZ2sRGB @ im_clip2f], [XYZ, XYZ, image_set_type XYZ], [XYZ, YXY, im_XYZ2Yxy @ im_clip2f], [XYZ, LAB, im_XYZ2Lab @ im_clip2f], [XYZ, LCH, im_Lab2LCh @ im_XYZ2Lab], [XYZ, UCS, im_XYZ2UCS @ im_clip2f], [XYZ, RGB, im_XYZ2disp @ im_clip2f], [XYZ, sRGB, im_XYZ2sRGB @ im_clip2f], [XYZ, LABQ, im_Lab2LabQ @ im_XYZ2Lab @ im_clip2f], [XYZ, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_XYZ2Lab @ im_clip2f], [YXY, B_W, im_sRGB2mono @ im_XYZ2sRGB @ im_Yxy2XYZ @ im_clip2f], [YXY, XYZ, im_Yxy2XYZ @ im_clip2f], [YXY, YXY, image_set_type YXY], [YXY, LAB, im_XYZ2Lab @ im_Yxy2XYZ @ im_clip2f], [YXY, LCH, im_Lab2LCh @ im_XYZ2Lab @ im_Yxy2XYZ @ im_clip2f], [YXY, UCS, im_XYZ2UCS @ im_Yxy2XYZ @ im_clip2f], [YXY, RGB, im_XYZ2disp @ im_Yxy2XYZ @ im_clip2f], [YXY, sRGB, im_XYZ2sRGB @ im_Yxy2XYZ @ im_clip2f], [YXY, LABQ, im_Lab2LabQ @ im_XYZ2Lab @ im_Yxy2XYZ @ im_clip2f], [YXY, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_XYZ2Lab @ im_Yxy2XYZ @ im_clip2f], [LAB, B_W, im_sRGB2mono @ im_Lab2sRGB @ im_Lab2XYZ @ im_clip2f], [LAB, XYZ, im_Lab2XYZ @ im_clip2f], [LAB, YXY, im_XYZ2Yxy @ im_Lab2XYZ @ im_clip2f], [LAB, LAB, image_set_type LAB @ im_clip2f], [LAB, LCH, im_Lab2LCh @ im_clip2f], [LAB, UCS, im_Lab2UCS @ im_clip2f], [LAB, RGB, im_Lab2disp @ im_clip2f], [LAB, sRGB, im_Lab2sRGB @ im_clip2f], [LAB, LABQ, im_Lab2LabQ @ im_clip2f], [LAB, LABS, im_Lab2LabS @ im_clip2f], [LCH, B_W, im_sRGB2mono @ im_Lab2sRGB @ im_LCh2Lab @ im_clip2f], [LCH, XYZ, im_Lab2XYZ @ im_LCh2Lab @ im_clip2f], [LCH, YXY, im_XYZ2Yxy @ im_Lab2XYZ @ im_LCh2Lab @ im_clip2f], [LCH, LAB, im_LCh2Lab @ im_clip2f], [LCH, LCH, image_set_type LCH], [LCH, UCS, im_LCh2UCS @ im_clip2f], [LCH, RGB, im_Lab2disp @ im_LCh2Lab @ im_clip2f], [LCH, sRGB, im_Lab2sRGB @ im_LCh2Lab @ im_clip2f], [LCH, LABQ, im_Lab2LabQ @ im_LCh2Lab @ im_clip2f], [LCH, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_LCh2Lab @ im_clip2f], [UCS, B_W, im_sRGB2mono @ im_XYZ2sRGB @ im_UCS2XYZ @ im_clip2f], [UCS, XYZ, im_UCS2XYZ @ im_clip2f], [UCS, YXY, im_XYZ2Yxy @ im_Lab2XYZ @ im_UCS2Lab @ im_clip2f], [UCS, LAB, im_UCS2Lab @ im_clip2f], [UCS, LCH, im_UCS2LCh @ im_clip2f], [UCS, UCS, image_set_type UCS], [UCS, RGB, im_Lab2disp @ im_UCS2Lab @ im_clip2f], [UCS, sRGB, im_Lab2sRGB @ im_UCS2Lab @ im_clip2f], [UCS, LABQ, im_Lab2LabQ @ im_UCS2Lab @ im_clip2f], [UCS, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_UCS2Lab @ im_clip2f], [RGB, B_W, im_sRGB2mono @ im_XYZ2sRGB @ im_disp2XYZ @ im_clip], [RGB, XYZ, im_disp2XYZ @ im_clip], [RGB, YXY, im_XYZ2Yxy @ im_disp2XYZ @ im_clip], [RGB, LAB, im_disp2Lab @ im_clip], [RGB, LCH, im_Lab2LCh @ im_disp2Lab @ im_clip], [RGB, UCS, im_Lab2UCS @ im_disp2Lab @ im_clip], [RGB, RGB, image_set_type RGB], [RGB, sRGB, im_XYZ2sRGB @ im_disp2XYZ @ im_clip], [RGB, RGB16, image_set_type RGB16 @ im_8216], [RGB, GREY16, image_set_type GREY16 @ im_8216 @ im_sRGB2mono], [RGB, LABQ, im_Lab2LabQ @ im_disp2Lab @ im_clip], [RGB, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_disp2Lab @ im_clip], [sRGB, B_W, im_sRGB2mono], [sRGB, XYZ, im_sRGB2XYZ @ im_clip], [sRGB, YXY, im_XYZ2Yxy @ im_sRGB2XYZ @ im_clip], [sRGB, LAB, im_sRGB2Lab @ im_clip], [sRGB, LCH, im_Lab2LCh @ im_sRGB2Lab @ im_clip], [sRGB, UCS, im_XYZ2UCS @ im_sRGB2XYZ @ im_clip], [sRGB, RGB, im_XYZ2disp @ im_sRGB2XYZ @ im_clip], [sRGB, sRGB, image_set_type sRGB], [sRGB, RGB16, image_set_type RGB16 @ im_8216], [sRGB, GREY16, image_set_type GREY16 @ im_8216 @ im_sRGB2mono], [sRGB, LABQ, im_Lab2LabQ @ im_sRGB2Lab @ im_clip], [sRGB, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_sRGB2Lab @ im_clip], [RGB16, B_W, im_1628 @ im_sRGB2mono], [RGB16, RGB, image_set_type RGB @ im_1628], [RGB16, sRGB, image_set_type sRGB @ im_1628], [RGB16, RGB16, image_set_type RGB16], [RGB16, GREY16, im_RGB162GREY16], [RGB16, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_sRGB2Lab], [GREY16, B_W, image_set_type B_W @ im_1628], [GREY16, RGB, im_mono2sRGB @ im_1628], [GREY16, sRGB, im_mono2sRGB @ im_1628], [GREY16, RGB16, im_GREY162RGB16], [GREY16, GREY16, image_set_type GREY16], [LABQ, B_W, im_sRGB2mono @ im_Lab2sRGB @ im_LabQ2Lab], [LABQ, XYZ, im_Lab2XYZ @ im_LabQ2Lab], [LABQ, YXY, im_XYZ2Yxy @ im_Lab2XYZ @ im_LabQ2Lab], [LABQ, LAB, im_LabQ2Lab], [LABQ, LCH, im_Lab2LCh @ im_LabQ2Lab], [LABQ, UCS, im_Lab2UCS @ im_LabQ2Lab], [LABQ, RGB, im_LabQ2disp], [LABQ, sRGB, im_Lab2sRGB @ im_LabQ2Lab], [LABQ, LABQ, image_set_type LABQ], [LABQ, LABS, im_LabQ2LabS], [LABS, B_W, im_sRGB2mono @ im_Lab2sRGB @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, XYZ, im_Lab2XYZ @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, YXY, im_XYZ2Yxy @ im_Lab2XYZ @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, LAB, im_LabS2Lab], [LABS, LCH, im_Lab2LCh @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, UCS, im_Lab2UCS @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, RGB, im_LabQ2disp @ im_LabS2LabQ @ im_clip2s], [LABS, sRGB, im_XYZ2sRGB @ im_Lab2XYZ @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, LABQ, im_LabS2LabQ @ im_clip2s], [LABS, LABS, image_set_type LABS] ] { /* From Image_type ... repeat here for brevity. Use same ordering as * in Colour menu for consistency. */ B_W = 1; XYZ = 12; YXY = 23; LAB = 13; LCH = 19; UCS = 18; RGB = 17; sRGB = 22; RGB16 = 25; GREY16 = 26; LABQ = 16; LABS = 21; } /* Transform between two colour spaces. */ colour_transform from to in = colour_unary _colour_conversion_table?i?2 in, i >= 0 = error (_ "unable to convert " ++ Image_type.type_names.get_name from ++ _ " to " ++ Image_type.type_names.get_name to) { match x = x?0 == from && x?1 == to; i = index match _colour_conversion_table; } /* Transform to a colour space, assuming the type field in the input is * correct */ colour_transform_to to in = colour_transform (get_type in) to in; /* String for path separator on this platform. */ path_separator = expand "$SEP"; /* Form a relative pathname. * path_relative ["home", "john"] == "home/john" * path_relative [] == "" */ path_relative l = join_sep path_separator l; /* Form an absolute pathname. * path_absolute ["home", "john"] == "/home/john" * path_absolute [] == "/" * If the first component looks like 'A:', don't add an initial separator. */ path_absolute l = path_relative l, len l?0 > 1 && is_letter l?0?0 && l?0?1 == ':' = path_separator ++ path_relative l; /* Parse a pathname. * path_parse "/home/john" == ["home", "john"] * path_parse "home/john" == ["home", "john"] */ path_parse str = split (equal path_separator?0) str; /* Return $PATH, reformatted as [["comp1", "comp2"], ["comp1", "comp2"] ..] */ system_search_path = [vipsbin] ++ map path_parse (split (equal path_sep) (expand "$PATH")) { /* On some platforms we ship vips with a few extra progs. Search * $VIPSHOME/bin first. */ vipsbin = path_parse (expand "$VIPSHOME") ++ ["bin"]; path_sep = ':', expand "$SEP" == "/" = ';'; } /* Search $PATH for the first occurence of name, or "". */ search_for name = hits?0, hits != [] = "" { exe_name = name ++ expand "$EXEEXT"; form_path p = path_absolute (p ++ [exe_name]); paths = map form_path system_search_path; hits = dropwhile (equal []) (map search paths); } /* Search $PATH for the first occurence of name, error on failure. */ search_for_error name = path, path != "" = error (exe_name ++ " not found on your search path. " ++ "Check you have installed the program and it is on your PATH.") { exe_name = name ++ expand "$EXEEXT"; path = search_for name; } nip2-8.7.0/share/nip2/compat/8.4/_joe_utilities.def0000644000175000017500000005054513224651032016563 00000000000000/* ******Functions included in start/_NG_utilities.def:****** * * so_balance ref_meanmax im1 im2 mask blur gauss * * nonzero_mean im = no_out * * so_meanmax im = result * * so_calculate ref_meanmax im mask = result * * simple_frame frame im_w im_h ov cs ms bf option = result * * corner_frame frame im_w im_h ov cs ms bf = result * * build_frame r_tl r_tr r_bl r_br r_mt r_mb r_ml r_mr im_w im_h ov bf = result * * complex_frame frame im_w im_h ov cs es ms bf option= result * * complex_edge ra rb t bl d = rc * * frame_lr_min r_l r_r target bw = result * * frame_tb_min r_t r_b target bw = result * * frame_position_image im ref os colour= result * * merge_array bw arr = result * * merge_to_scale im target blend dir = result * * select_ellipse line width = mask * * select_tetragon p1 p2 p3 p4 = mask * * select_polygon pt_list = mask * * perspective_transform to from = trans'' * * sort_pts_clockwise l = l'' * */ /* Called from: * _NG_Extra.def Clone_area_item */ so_balance ref_meanmax im1 im2 mask gauss = result { //ref_meanmax = so_meanmax im1; so_values = so_calculate ref_meanmax im2 mask; im2_cor_a = clip2fmt im2.format im2'', has_member "format" im2 = im2'' {im2'' = im2 * (so_values?0) + (so_values?1);} // Option to convert replacement image to scaled gaussian noise im2_cor = im2_cor_a, gauss == false = clip2fmt im2_cor_a.format gauss_im {gauss_im = im_gaussnoise im2_cor_a.width im2_cor_a.height ref_meanmax?0 (deviation im2_cor_a);} result = im_blend (get_image mask) (get_image im2_cor) (get_image im1); }; //////////////////////////////////////////////////////////////////////////////// /* Calculates the mean of the non zero pixels. * * Called from: * _NG_utilities so_meanmax */ nonzero_mean im = no_out { zero_im = (im == 0); zero_mean = mean zero_im; no_mean = mean im; no_out = no_mean/(1 - (zero_mean/255)); }; //////////////////////////////////////////////////////////////////////////////// /* Calculates the max and nonzero mean of an image * * Called from: * _NG_utilities so_balance * _NG_utilities so_calculate * _NG_Extra.def Clone_area_item * _NG_Extra.def Balance_item.Balance_find_item */ so_meanmax im = result { mean_of_im = nonzero_mean im; adjusted_im = im - mean_of_im; max_of_im = max adjusted_im; result = [mean_of_im, max_of_im]; }; //////////////////////////////////////////////////////////////////////////////// /* Calculates the scale and offset required to match a reference mean and max * * Called from: * _NG_utilities so_balance * _NG_Extra.def Balance_item.Balance_find_item */ so_calculate ref_meanmax im mask = result { im' = if mask then im else 0; im_values = so_meanmax im'; mean_of_ref = ref_meanmax?0; mean_of_im = im_values?0; max_of_ref = ref_meanmax?1; max_of_im = im_values?1; scale = (max_of_ref)/(max_of_im); offset = mean_of_ref - (mean_of_im * scale); result = [ scale, offset ]; }; //////////////////////////////////////////////////////////////////////////////// /* Extends or shortens the central sections of a simple frame to fit round a given image. * * Called from: * _NG_Extra.def Frame_item.Simple_frame_item */ simple_frame frame im_w im_h ov cs ms bf option = result { cs' = (1 - cs); ms' = (0.5 - (ms/2)); ms'' = (1 - cs); //Regions r_tl = Region_relative frame 0 0 cs cs; r_tr = fliplr r_tl, option == true = Region_relative frame cs' 0 cs cs; r_bl = Region_relative frame 0 cs' cs cs; r_br = fliplr r_bl, option == true = Region_relative frame cs' cs' cs cs; r_mt = Region_relative frame ms' 0 ms cs; r_mb = Region_relative frame ms' ms'' ms cs; r_ml = Region_relative frame 0 ms' cs ms; r_mr = fliplr r_ml, option == true = Region_relative frame ms'' ms' cs ms; result = build_frame r_tl r_tr r_bl r_br r_mt r_mb r_ml r_mr im_w im_h ov bf; }; //////////////////////////////////////////////////////////////////////////////// /* Copies and extends a simple frame corner to produce a complete frame to fit round a given image. * * Called from: * _NG_Extra.def Frame_item.Frame_corner_item */ corner_frame frame im_w im_h ov cs ms bf = result { cs' = (1 - cs); ms' = (0.5 - (ms/2)); //Regions r_tl = Region_relative frame 0 0 cs cs; r_tr = fliplr r_tl; r_bl = fliptb r_tl; r_br = fliplr r_bl; r_mt = Region_relative frame ms' 0 ms cs; r_mb = fliptb r_mt; r_ml = Region_relative frame 0 ms' cs ms;; r_mr = fliplr r_ml; result = build_frame r_tl r_tr r_bl r_br r_mt r_mb r_ml r_mr im_w im_h ov bf; }; //////////////////////////////////////////////////////////////////////////////// /* Completes the frame building process for simple_frame and corner_frame. * * _NG_utilities simple_frame * _NG_utilities corner_frame */ build_frame r_tl r_tr r_bl r_br r_mt r_mb r_ml r_mr im_w im_h ov bf = result { //Find pixel thickness of frames section s_width = r_ml.width - mean (im_profile (map_unary fliplr (r_ml.value)?0) 1); s_height = r_mt.height - mean (im_profile (map_unary fliptb (r_mt.value)?0) 0); w_target = im_w + (2 * (s_width - ov)); h_target = im_h + (2 * (s_height - ov)); blend = bf * r_tl.width; cw_target = w_target - (2 * r_tl.width) + (2 * blend), w_target > (2 * r_tl.width) = w_target; ch_target = h_target - (2 * r_tl.height) + (2 * blend), h_target > (2 * r_tl.height) = h_target; //Use regions to produce sections top = merge_to_scale r_mt cw_target blend 0; bottom = merge_to_scale r_mb cw_target blend 0; left = merge_to_scale r_ml ch_target blend 1; right = merge_to_scale r_mr ch_target blend 1; middle = Image (image_new cw_target ch_target left.bands left.format left.coding left.type 0 0 0); //Build sections into full frame. row_1 = frame_lr_min r_tl r_tr w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[r_tl, top, r_tr]]; row_2 = frame_lr_min left right w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[left, middle, right]]; row_3 = frame_lr_min r_bl r_br w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[r_bl, bottom, r_br]]; result = frame_tb_min row_1 row_3 h_target blend, (h_target < (r_tl.height * 2)) = merge_array blend [[row_1], [row_2], [row_3]]; }; //////////////////////////////////////////////////////////////////////////////// /* Extends or shortens the central sections of a frame, preserving any central details on each * edge, to fit round a given image. * * Called from: * _NG_Extra.def Frame_item.Complex_frame_item */ complex_frame frame im_w im_h ov cs es ms bf option= result { cs' = (1 - cs); ms' = (0.5 - (ms/2)); es' = (0.25 - (es/2)); r_tl = Region_relative frame 0 0 cs cs; r_tr = fliplr r_tl, option == true = Region_relative frame cs' 0 cs cs; r_bl = Region_relative frame 0 cs' cs cs; r_br = fliplr r_bl, option == true = Region_relative frame cs' cs' cs cs; r_mt = Region_relative frame ms' 0 ms cs; r_mb = Region_relative frame ms' cs' ms cs; r_ml = Region_relative frame 0 ms' cs ms; r_mr = fliplr r_ml, option == true = Region_relative frame cs' ms' cs ms; r_et = Region_relative frame es' 0 es cs; r_eb = Region_relative frame es' cs' es cs; r_el = Region_relative frame 0 es' cs es; r_er = fliplr r_el, option == true = Region_relative frame cs' es' cs es; //Find pixel thickness of frames section s_width = r_el.width - mean (im_profile (map_unary fliplr (r_el.value)?0) 1); s_height = r_et.height - mean (im_profile (map_unary fliptb (r_et.value)?0) 0); w_target = im_w + (2 * (s_width - ov)); h_target = im_h + (2 * (s_height - ov)); min_size = foldr1 min_pair [r_tl.width, r_tl.height, r_mt.width, r_mt.height, r_et.width, r_et.height]; blend = bf * min_size; cw_target = w_target - (2 * r_tl.width) + (2 * blend); ch_target = h_target - (2 * r_tl.height) + (2 * blend); top = complex_edge r_mt r_et cw_target blend 0; bottom = complex_edge r_mb r_eb cw_target blend 0; left = complex_edge r_ml r_el ch_target blend 1; right = complex_edge r_mr r_er ch_target blend 1; middle = Image (image_new top.width left.height left.bands left.format left.coding left.type 0 0 0); //Build regions into full frame. row_1 = frame_lr_min r_tl r_tr w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[r_tl, top, r_tr]]; row_2 = frame_lr_min left right w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[left, middle, right]]; row_3 = frame_lr_min r_bl r_br w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[r_bl, bottom, r_br]]; result = frame_tb_min row_1 row_3 h_target blend, (h_target < (r_tl.height * 2)) = merge_array blend [[row_1], [row_2], [row_3]]; }; //////////////////////////////////////////////////////////////////////////////// /* Function called by complex frame, used to produce section * * Called from: * _NG_utilities.def complex_frame */ complex_edge ra rb t bl d = rc { e1 = ceil (ra.width - t)/2, d == 0 = 0; e2 = 0, d == 0 = ceil (ra.height - t)/2; e3 = t, d == 0 = ra.width; e4 = ra.height, d == 0 = t; check = ra.width, d == 0; = ra.height; rai = get_image ra; t2 = (t - ra.width + (2 * bl))/2, d == 0 = (t - ra.height + (2 * bl))/2; rc = ra , t <= 0 = Image (im_extract_area rai e1 e2 e3 e4), t <= check = merge_array bl [[rb',ra,rb']], d == 0 = merge_array bl [[rb'],[ra],[rb']] {rb' = merge_to_scale rb t2 bl d;} }; ////////////////////////////////////////////////////////////////////////////// /* Blends two images left/right to produce an image a specific width. * * _NG_utilities build_frame * _NG_utilities complex_frame */ frame_lr_min r_l r_r target bw = result { //Calculating the new widh required for each image. no = (target/2 + bw); n_w = no, (r_l.width > no) = r_l.width; //Removing excess from what will be the middle of the final image. n_l = im_extract_area r_l.value 0 0 n_w r_l.height; n_r = im_extract_area r_r.value (r_r.width - n_w) 0 n_w r_l.height; //Merge the two image together with a bw*2 pixel overlap. result = Image (im_lrmerge n_l n_r ((bw*2) - n_w) 0 bw); }; ////////////////////////////////////////////////////////////////////////////// /* Blends two images top/bottom to produce an image a specific width. * * _NG_utilities build_frame * _NG_utilities complex_frame */ frame_tb_min r_t r_b target bw = result { //Calculating the new height required for each image. no = (target/2 + bw); n_h = no, (r_t.height > no) = r_t.height; //Removing excess from what will be the middle of the final image. n_t = im_extract_area r_t.value 0 0 r_t.width n_h; n_b = im_extract_area r_b.value 0 (r_b.height - n_h) r_b.width n_h; //Merge the two image together with a 50 pixel overlap. result = Image (im_tbmerge n_t n_b 0 ((bw*2) -n_h) bw); }; ////////////////////////////////////////////////////////////////////////////// /* Resixe canvas of an image to accomodate a frame and possible mount * * Called from: * _NG_Extra.def Frame_item.Frame_corner_item * _NG_Extra.def Frame_item.Simple_frame_item * _NG_Extra.def Frame_item.Complex_frame_item */ frame_position_image im ref os colour= result { background = image_new ref.width ref.height im.bands im.format im.coding im.type colour 0 0; result = insert_noexpand xp yp im background { xp = (ref.width - im.width)/2; yp = (ref.height - im.height - os)/2; } }; ////////////////////////////////////////////////////////////////////////////// /* Merges an array of images together according to blend width bw * * Called from: * _NG_Utilites.def build_frame * _NG_Utilites.def complex_frame * _NG_Utilites.def complex_edge */ merge_array bw arr = result { merge_lr bw im1 im2 = im3 { bw' = get_header "Xsize" (get_image im1); bw'' = -(bw' - bw); im3 = im_lrmerge (get_image im1) (get_image im2) bw'' 0 bw; } merge_tb bw im1 im2 = im3 { bw' = get_header "Ysize" (get_image im1); bw'' = -(bw' - bw); im3 = im_tbmerge (get_image im1) (get_image im2) 0 bw'' bw; } im_out = (image_set_origin 0 0 @ foldl1 (merge_tb bw) @ map (foldl1 (merge_lr bw))) arr; result = Image im_out; }; ////////////////////////////////////////////////////////////////////////////// /* Repeatably top/bottom add clones of im, with a defined overlap, until final height > target * * Called from: * _NG_Utilites.def build_frame * _NG_Utilites.def complex_edge */ merge_to_scale im target blend dir = result { blend' = floor blend; //allow fir lr or tb process var_a = im.width, dir == 0 = im.height; var_w = im.width, dir == 1 = target, target > blend' = blend'; var_h = im.height, dir == 0 = target, target > blend' = blend'; //total numner of copies of im requires, taking overlap into account. no_loops = ceil ((log ((target - blend')/(var_a - blend')))/(log 2)); process im no = result { pr_a = get_header "Xsize" (get_image im), dir == 0 = get_header "Ysize" (get_image im); pr_b = -(pr_a - blend' + 1); im' = im_lrmerge (get_image im) (get_image im) pr_b 0 blend', dir == 0 = im_tbmerge (get_image im) (get_image im) 0 pr_b blend'; no' = no - 1; result = im', no' < 1 = process im' no'; } im_tmp = im.value, var_a > target = process im no_loops; result = Image (im_extract_area (get_image im_tmp) 0 0 var_w var_h); }; ////////////////////////////////////////////////////////////////////////////// /* Selects an elispe based on a line and a width * * Called from: * _NG_Extra.def Select_item.Elipse */ select_ellipse line width = mask { im = Image (get_image line); //Make a 2 band image whose value equals its coordinates. im_coor = Image (make_xy im.width im.height); //Adjust the values to center tham on (line.left, line.top) im_cent = im_coor - Vector [line.left,line.top]; w = line.width; h = line.height; angle = 270, w == 0 && h < 0 = 90, w == 0 && h >= 0 = 360 + atan (h/w), w > 0 && h < 0 = atan (h/w), w > 0 && h >= 0 = 180 + atan (h/w); a = ( (h ** 2) + (w ** 2) )**0.5; b = a * width; x' = ( (cos angle) * im_cent?0) + ( (sin angle) * im_cent?1); y' = ( (cos angle) * im_cent?1) - ( (sin angle) * im_cent?0); mask = ( (b**2) * (x'**2) ) + ( (a**2) * (y'**2) ) <= (a * b)**2; }; ////////////////////////////////////////////////////////////////////////////// /* Selects a tetragon based on four points. * * Called from: * _NG_Extra.def Select_item.Tetragon * _NG_Extra.def Perspective_item */ select_tetragon p1 p2 p3 p4 = mask { //Put points in clockwise order starting at the top left. pt_list = sort_pts_clockwise [p1, p2, p3, p4]; pair_list = [ [ pt_list?0, pt_list?1 ], [ pt_list?1, pt_list?2 ], [ pt_list?2, pt_list?3 ], [ pt_list?3, pt_list?0 ] ]; //Make xy image the same size as p1.image; im_xy = Image (make_xy p1.image.width p1.image.height); white = Image (image_new p1.image.width p1.image.height 1 0 Image_coding.NOCODING 1 255 0 0); mask = foldl process white pair_list; /* Treat each pair of point as a vector going from p1 to p2, * then select all to right of line. This is done for each pair, * the results are all combined to select the area defined by * the four points. */ process im_in pair = im_out { x = (pair?0).left; y = (pair?0).top; x'= (pair?1).left; y'= (pair?1).top; w = x' - x; h = y' - y; m = 0, x == x' = (y-y')/(x-x'); c = 0, x == x' = ((y*x') - (y'*x))/(x' - x); mask= im_xy?1 - (im_xy?0 * m) >= c, w > 0 = im_xy?1 - (im_xy?0 * m) <= c, w < 0 = im_xy?0 <= x, w == 0 && h > 0 = im_xy?0 >= x; im_out = im_in & mask; } }; ////////////////////////////////////////////////////////////////////////////// /* Selects a tetragon based on four points. * * Called from: * _NG_Extra.def Select_item.Polygon */ select_polygon pt_list = mask { group_check = is_Group pt_list; pt_l = pt_list.value, group_check = pt_list; im = Image (get_image (pt_l?0)); im_xy = Image (make_xy im.width im.height); black = Image (image_new im_xy.width im_xy.height 1 0 Image_coding.NOCODING 1 0 0 0); x = im_xy?0; y = im_xy?1; pt_l' = grp_trip pt_l; mask = foldl process black pt_l'; /*Takes a group adds the first two the end and then creates a lists of *lists [[a, b, c], [b, c, d] .... [x, a, b]] */ grp_trip l = l'' { px = take 2 l; l' = join l px; start = [(take 3 l')]; rest = drop 3 l'; process a b = c { x = (last a)?1; x'= (last a)?2; x'' = [[x, x', b]]; c = join a x''; } l'' = foldl process start rest; }; process im_in triplet = im_out { p1 = triplet?0; p2 = triplet?1; p3 = triplet?2; //check for change in x direction between p1-p2 and p2 -p3 dir_1 = sign (p2.left - p1.left); dir_2 = sign (p3.left - p2.left); dir = dir_1 + dir_2; //define min x limit. min_x = p1.left, p1.left < p2.left = p2.left + 1, dir != 0 = p2.left; //define max x limit. max_x = p1.left, p1.left > p2.left = p2.left - 1, dir != 0 = p2.left; //equation of line defined by p1 and p2 m = line_m p1 p2; c = line_c p1 p2; //Every thing below the line im_test = ((y >= (m * x) + c) & (x >= min_x) & (x <= max_x)); im_out = im_in ^ im_test; } line_c p1 p2 = c {m = line_m p1 p2; c = p1.top - (m * p1.left);}; line_m p1 p2 = (p2.top - p1.top)/(p2.left - p1.left), p2.left != p1.left = 0; }; ////////////////////////////////////////////////////////////////////////////// /* Selects a tetragon based on four points. * * Called from: * _NG_Extra.def Perspective_match_item * _NG_Extra.def Perspective_item */ perspective_transform to from = trans'' { /* * Tramsformation matrix is calculated on the bases of the following functions: * x' = c0x + c1y + c2xy + c3 * y' = c4x + c5y + c6xy + c7 * * The functions used in vips im_transform works based on the functions: * x = x' + b0 + b2x' + b4y' + b6x'y' * y = y' + b1 + b3x' + b5y' + b7x'y' * * and is applied in the form of the matrix: * * [[b0, b1], * [b2, b3], * [b4, b5], * [b6, b7]] * * Therefore our required calculated matrix will be * * [[ c3 , c7], * [(c0 - 1) , c4], * [ c1 , (c5 - 1)], * [ c2 , c6]] * * to = [x1, y1, x2, y2, x3, y3, x4, y4] * from = [x1', y1', x2', y2', x3', y3', x4', y4'] * trans = [[c0], [c1], [c2], [c3], [c4], [c5], [c6], [c7]] * */ to' = Matrix [[to?0, to?1, ((to?0)*(to?1)), 1, 0, 0, 0, 0], [0, 0, 0, 0, to?0, to?1, ((to?0)*(to?1)), 1], [to?2, to?3, ((to?2)*(to?3)), 1, 0, 0, 0, 0], [0, 0, 0, 0, to?2, to?3, ((to?2)*(to?3)), 1], [to?4, to?5, ((to?4)*(to?5)), 1, 0, 0, 0, 0], [0, 0, 0, 0, to?4, to?5, ((to?4)*(to?5)), 1], [to?6, to?7, ((to?6)*(to?7)), 1, 0, 0, 0, 0], [0, 0, 0, 0, to?6, to?7, ((to?6)*(to?7)), 1]]; from' = Matrix (transpose [from]); to'' = to' ** (-1); trans = to'' * from'; trans' = trans.value; trans''= Matrix [[(trans'?3)?0, (trans'?7)?0 ], [((trans'?0)?0 - 1), (trans'?4)?0 ], [(trans'?1)?0, ((trans'?5)?0 - 1)], [(trans'?2)?0, (trans'?6)?0 ]]; }; ////////////////////////////////////////////////////////////////////////////// /* Sort a list of points into clockwise order. * * Called from: * _NG_utilities.def select_tetragon * _NG_Extra.def Perspective_match_item * _NG_Extra.def Perspective_item */ sort_pts_clockwise l = l'' { // sort functions: f_top a b = a.top < b.top; f_left a b = a.left < b.left; f_right a b = a.left > b.left; l' = sortc f_top l; l'_a = take 2 l'; l'_b = drop 2 l'; l''_a = sortc f_left l'_a; l''_b = sortc f_right l'_b; l'' = join l''_a l''_b; }; Mount_options _ctype _ppcm = class { _vislevel = 3; apply = Toggle "Apply mount options" false; ls = Expression "Lower mount section bigger by (cm)" 0; mount_colour = Colour _ctype [0, 0, 0]; _los = ls.expr * _ppcm; }; Frame_variables comp = class { _vislevel = 3; scale_factor = Expression "scale the size of the frame by" 1; /* These sliders define the fraction of the frames width or height is extracted * to produce each of the particular regions. */ corner_section = Scale "Corner section" 0.1 1 0.5; edge_section = Scale "Edge section" 0.1 1 0.2, comp > 0 = "Only required for complex frames"; middle_section = Scale "Middle section" 0.1 1 0.2; blend_fraction = Scale "Blend fraction" 0.1 0.9 0.1; option = Toggle "Use mirror of left-side to make right" true; }; nip2-8.7.0/share/nip2/compat/8.4/Image.def0000644000175000017500000014617113224651032014577 00000000000000Image_new_item = class Menupullright "_New" "make new things" { Image_black_item = class Menuaction "_Image" "make a new image" { format_names = [ "8-bit unsigned int - UCHAR", // 0 "8-bit signed int - CHAR", // 1 "16-bit unsigned int - USHORT", // 2 "16-bit signed int - SHORT", // 3 "32-bit unsigned int - UINT", // 4 "32-bit signed int - INT", // 5 "32-bit float - FLOAT", // 6 "64-bit complex - COMPLEX", // 7 "64-bit float - DOUBLE", // 8 "128-bit complex - DPCOMPLEX" // 9 ]; action = class Image _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; nbands = Expression "Image bands" 1; format_option = Option "Image format" format_names 0; type_option = Option_enum "Image type" Image_type.type_names "B_W"; pixel = Expression "Pixel value" 0; _result = image_new (to_real nwidth) (to_real nheight) (to_real nbands) (to_real format_option) Image_coding.NOCODING type_option.value_thing pixel.expr 0 0; } } Image_new_from_image_item = class Menuaction "_From Image" "make a new image based on image x" { action x = class Image _result { _vislevel = 3; pixel = Expression "Pixel value" 0; _result = image_new x.width x.height x.bands x.format x.coding x.type pixel.expr x.xoffset x.yoffset; } } Image_region_item = class Menupullright "_Region on Image" "make a new region on an image" { Region_item = class Menuaction "_Region" "make a region on an image" { action image = scope.Region_relative image 0.25 0.25 0.5 0.5; } Mark_item = class Menuaction "_Point" "make a point on an image" { action image = scope.Mark_relative image 0.5 0.5; } Arrow_item = class Menuaction "_Arrow" "make an arrow on an image" { action image = scope.Arrow_relative image 0.25 0.25 0.5 0.5; } HGuide_item = class Menuaction "_Horizontal Guide" "make a horizontal guide on an image" { action image = scope.HGuide image 0.5; } VGuide_item = class Menuaction "_Vertical Guide" "make a vertical guide on an image" { action image = scope.VGuide image 0.5; } sep1 = Menuseparator; Move_item = class Menuaction "From Region" "new region on image using existing region as a guide" { action a b = map_binary process a b { process a b = x.Region target x.left x.top x.width x.height, is_Region x = x.Arrow target x.left x.top x.width x.height, is_Arrow x = error "bad arguments to region-from-region" { // prefer image then region compare a b = false, !is_Image a && is_Image b = false, is_Region a && !is_Region b = true; [target, x] = sortc compare [a, b]; } } } } } Image_convert_to_image_item = class Menuaction "Con_vert to Image" "convert anything to an image" { action x = to_image x; } Image_number_format_item = class Menupullright "_Format" "convert numeric format" { U8_item = class Menuaction "_8 bit unsigned" "convert to unsigned 8 bit [0, 255]" { action x = map_unary cast_unsigned_char x; } U16_item = class Menuaction "1_6 bit unsigned" "convert to unsigned 16 bit [0, 65535]" { action x = map_unary cast_unsigned_short x; } U32_item = class Menuaction "_32 bit unsigned" "convert to unsigned 32 bit [0, 4294967295]" { action x = map_unary cast_unsigned_int x; } sep1 = Menuseparator; S8_item = class Menuaction "8 _bit signed" "convert to signed 8 bit [-128, 127]" { action x = map_unary cast_signed_char x; } S16_item = class Menuaction "16 b_it signed" "convert to signed 16 bit [-32768, 32767]" { action x = map_unary cast_signed_short x; } S32_item = class Menuaction "32 bi_t signed" "convert to signed 32 bit [-2147483648, 2147483647]" { action x = map_unary cast_signed_int x; } sep2 = Menuseparator; Float_item = class Menuaction "_Single precision float" "convert to IEEE 32 bit float" { action x = map_unary cast_float x; } Double_item = class Menuaction "_Double precision float" "convert to IEEE 64 bit float" { action x = map_unary cast_double x; } sep3 = Menuseparator; Scmplxitem = class Menuaction "Single _precision complex" "convert to 2 x IEEE 32 bit float" { action x = map_unary cast_complex x; } Dcmplx_item = class Menuaction "Double p_recision complex" "convert to 2 x IEEE 64 bit float" { action x = map_unary cast_double_complex x; } } Image_header_item = class Menupullright "_Header" "do stuff to the image header" { Image_get_item = class Menupullright "_Get" "get header fields" { // the header fields we can get fields = class { type = 0; width = 1; height = 2; format = 3; bands = 4; xres = 5; yres = 6; xoffset = 7; yoffset = 8; coding = 9; field_names = Enum [ $width => width, $height => height, $bands => bands, $format => format, $type => type, $xres => xres, $yres => yres, $xoffset => xoffset, $yoffset => yoffset, $coding => coding ]; field_option name = Option_enum (_ "Field") field_names name; field_funcs = Table [ [type, get_type], [width, get_width], [height, get_height], [format, get_format], [bands, get_bands], [xres, get_xres], [yres, get_yres], [xoffset, get_xoffset], [yoffset, get_yoffset], [coding, get_coding] ]; } get_field field_name x = class _result { _vislevel = 3; field = fields.field_option field_name; _result = map_unary (Real @ fields.field_funcs.lookup 0 1 field.value_thing) x; } Width_item = class Menuaction "_Width" "get width" { action x = get_field "width" x; } Height_item = class Menuaction "_Height" "get height" { action x = get_field "height" x; } Bands_item = class Menuaction "_Bands" "get bands" { action x = get_field "bands" x; } Format_item = class Menuaction "_Format" "get format" { action x = get_field "format" x; } Type_item = class Menuaction "_Type" "get type" { action x = get_field "type" x; } Xres_item = class Menuaction "_Xres" "get X resolution" { action x = get_field "xres" x; } Yres_item = class Menuaction "_Yres" "get Y resolution" { action x = get_field "yres" x; } Xoffset_item = class Menuaction "X_offset" "get X offset" { action x = get_field "xoffset" x; } Yoffset_item = class Menuaction "Yo_ffset" "get Y offset" { action x = get_field "yoffset" x; } Coding_item = class Menuaction "_Coding" "get coding" { action x = get_field "coding" x; } sep1 = Menuseparator; Custom_item = class Menuaction "C_ustom" "get any header field" { action x = class _result { _vislevel = 3; field = String "Field" "Xsize"; parse = Option "Parse" [ "No parsing", "Parse string as integer", "Parse string as real", "Parse string as hh:mm:ss" ] 0; _result = map_unary (wrap @ process @ get_header field.value) x { parse_str parse str = parse (split is_space str)?0; parse_field name cast parse x = cast x, is_number x = parse_str parse x, is_string x = error ("not " ++ name); get_int = parse_field "int" cast_signed_int parse_int; get_float = parse_field "float" cast_float parse_float; get_time = parse_field "hh:mm:ss" cast_signed_int parse_time; wrap x = Real x, is_real x = Vector x, is_real_list x = Image x, is_image x = Bool x, is_bool x = Matrix x, is_matrix x = String "String" x, is_string x = List x, is_list x = x; process = [ id, get_int, get_float, get_time ]?parse; } } } } sep1 = Menuseparator; Image_set_meta_item = class Menuaction "_Set" "set image metadata" { action x = class _result { _vislevel = 3; fname = String "Field" "field-name"; val = Expression "Value" 42; _result = map_unary process x { process image = set_header fname.value val.expr image; } } } Image_edit_header_item = class Menuaction "_Edit" "change advisory header fields of image" { type_names = Image_type.type_names; all_names = sort (map (extract 0) type_names.value); get_prop has get def x = get x, has x = def; action x = class _result { _vislevel = 3; nxres = Expression "Xres" (get_prop has_xres get_xres 1 x); nyres = Expression "Yres" (get_prop has_yres get_yres 1 x); nxoff = Expression "Xoffset" (get_prop has_xoffset get_xoffset 0 x); nyoff = Expression "Yoffset" (get_prop has_yoffset get_yoffset 0 x); type_option = Option_enum "Image type" Image_type.type_names (Image_type.type_names.get_name type) { type = x.type, is_Image x = Image_type.MULTIBAND; } _result = map_unary process x { process image = Image (im_copy_set image.value type_option.value_thing (to_real nxres) (to_real nyres) (to_real nxoff) (to_real nyoff)); } } } } Image_cache_item = class Menuaction "C_ache" "cache calculated image pixels" { action x = class _result { _vislevel = 3; tile_width = Number "Tile width" 128; tile_height = Number "Tile height" 128; max_tiles = Number "Maximum number of tiles to cache" (-1); _result = map_unary process x { process image = cache (to_real tile_width) (to_real tile_height) (to_real max_tiles) image; } } } #separator Image_levels_item = class Menupullright "_Levels" "change image levels" { Scale_item = class Menuaction "_Scale to 0 - 255" "linear transform to fit 0 - 255 range" { action x = map_unary scale x; } Linear_item = class Menuaction "_Linear" "linear transform of image levels" { action x = class _result { _vislevel = 3; scale = Scale "Scale" 0.001 3 1; offset = Scale "Offset" (-128) 128 0; _result = map_unary adj x { adj x // only force back to input type if this is a thing // with a type ... so we work for Colour / Matrix etc. = clip2fmt x.format x', has_member "format" x = x' { x' = x * scale + offset; } } } } Gamma_item = class Menuaction "_Power" "power transform of image levels (gamma)" { action x = class _result { _vislevel = 3; gamma = Scale "Gamma" 0.001 4 1; image_maximum_hint = "You may need to change image_maximum if " ++ "this is not an 8 bit image"; im_mx = Expression "Image maximum" mx { mx = Image_format.maxval x.format, has_format x = 255; } _result = map_unary gam x { gam x = clip2fmt (get_format x) x', has_format x = x' { x' = (im_mx.expr / im_mx.expr ** gamma) * x ** gamma; } } } } Tone_item = class Menuaction "_Tone Curve" "adjust tone curve" { action x = class _result { _vislevel = 3; b = Scale "Black point" 0 100 0; w = Scale "White point" 0 100 100; sp = Scale "Shadow point" 0.1 0.3 0.2; mp = Scale "Mid-tone point" 0.4 0.6 0.5; hp = Scale "Highlight point" 0.7 0.9 0.8; sa = Scale "Shadow adjust" (-15) 15 0; ma = Scale "Mid-tone adjust" (-30) 30 0; ha = Scale "Highlight adjust" (-15) 15 0; curve = tone_build x.format b w sp mp hp sa ma ha; _result = map_unary (hist_map curve) x; } } } Image_transform_item = class Menupullright "_Transform" "transform images" { Rotate_item = class Menupullright "Ro_tate" "rotate image" { Fixed_item = class Menupullright "_Fixed" "clockwise rotation by fixed angles" { rotate_widget default x = class _result { _vislevel = 3; angle = Option "Rotate by" [ "Don't rotate", "90 degrees clockwise", "180 degrees", "90 degrees anticlockwise" ] default; _result = map_unary process x { process = [ // we can't use id here since we want to "declass" // the members of x ... consider if x is a crop class, // for example, we don't want to inherit from crop, we // want to make a new image class rot180 @ rot180, rot90, rot180, rot270 ] ? angle; } } Rot90_item = class Menuaction "_90 Degrees" "clockwise rotation by 90 degrees" { action x = rotate_widget 1 x; } Rot180_item = class Menuaction "_180 Degrees" "clockwise rotation by 180 degrees" { action x = rotate_widget 2 x; } Rot270_item = class Menuaction "_270 Degrees" "clockwise rotation by 270 degrees" { action x = rotate_widget 3 x; } } Free_item = class Menuaction "_Free" "clockwise rotation by any angle" { action x = class _result { _vislevel = 3; angle = Scale "Angle" (-180) 180 0; interp = Interpolate_picker Interpolate_type.BILINEAR; _result = map_unary process x { process image = rotate interp angle image; } } } Straighten_item = class Menuaction "_Straighten" ("smallest rotation that makes an arrow either horizontal " ++ "or vertical") { action x = class _result { _vislevel = 3; interp = Interpolate_picker Interpolate_type.BILINEAR; _result = map_unary straighten x { straighten arrow = rotate interp angle'' arrow.image { x = arrow.width; y = arrow.height; angle = im (polar (x, y)); angle' = angle - 360, angle > 315 = angle - 180, angle > 135 = angle; angle'' = -angle', angle' >= (-45) && angle' < 45 = 90 - angle'; } } } } } Flip_item = class Menupullright "_Flip" "mirror left/right or up/down" { Left_right_item = class Menuaction "_Left Right" "mirror object left/right" { action x = map_unary fliplr x; } Top_bottom_item = class Menuaction "_Top Bottom" "mirror object top/bottom" { action x = map_unary fliptb x; } } Resize_item = class Menupullright "_Resize" "change image size" { Scale_item = class Menuaction "_Scale" "scale image size by a factor" { action x = class _result { _vislevel = 3; xfactor = Expression "Horizontal scale factor" 1; yfactor = Expression "Vertical scale factor" 1; kernel = Kernel_picker Kernel_type.LINEAR; _result = map_unary process x { process image = resize kernel xfactor yfactor image; } } } Size_item = class Menuaction "_Size To" "resize to a fixed size" { action x = class _result { _vislevel = 3; which = Option "Resize axis" [ "Shortest", "Longest", "Horizontal", "Vertical" ] 0; size = Expression "Resize to (pixels)" 128; aspect = Toggle "Break aspect ratio" false; kernel = Kernel_picker Kernel_type.LINEAR; _result = map_unary process x { process image = resize kernel h v image, aspect = resize kernel fac fac image { xfac = to_real size / image.width; yfac = to_real size / image.height; max_factor = [xfac, 1], xfac > yfac = [1, yfac]; min_factor = [xfac, 1], xfac < yfac = [1, yfac]; [h, v] = [ max_factor, min_factor, [xfac, 1], [1, yfac]]?which; fac = h, v == 1 = v; } } } } Size_within_item = class Menuaction "Size _Within" "size to fit within a rectangle" { action x = class _result { _vislevel = 3; // the rects we size to fit within _rects = [ [2048, 1536], [1920, 1200], [1600, 1200], [1400, 1050], [1280, 1024], [1024, 768], [800, 600], [640, 480] ]; within = Option "Fit within (pixels)" ( [print w ++ " x " ++ print h :: [w, h] <- _rects] ++ ["Custom"] ) 4; custom_width = Expression "Custom width" 1000; custom_height = Expression "Custom height" 1000; size = Option "Page size" [ "Full page", "Half page", "Quarter page" ] 0; kernel = Kernel_picker Kernel_type.LINEAR; _result = map_unary process x { xdiv = [1, 2, 2]?size; ydiv = [1, 1, 2]?size; allrect = _rects ++ [ [custom_width.expr, custom_height.expr] ]; [width, height] = allrect?within; process x = resize kernel fac fac x, fac < 1 = x { xfac = (width / xdiv) / x.width; yfac = (height / ydiv) / x.height; fac = min_pair xfac yfac; } } } } Resize_canvas_item = class Menuaction "_Canvas" "change size of surrounding image" { action x = class _result { _vislevel = 3; // try to guess a sensible size for the new image _guess_size = x.rect, is_Image x = Rect 0 0 100 100; nwidth = Expression "New width (pixels)" _guess_size.width; nheight = Expression "New height (pixels)" _guess_size.height; bgcolour = Expression "Background colour" 0; position = Option "Position" [ "North-west", "North", "North-east", "West", "Centre", "East", "South-west", "South", "South-east", "Specify in pixels" ] 4; left = Expression "Pixels from left" 0; top = Expression "Pixels from top" 0; _result = map_unary process x { process image = insert_noexpand xp yp image background { width = image.width; height = image.height; coding = image.coding; bands = 3, coding == Image_coding.LABPACK = image.bands; format = Image_format.FLOAT, coding == Image_coding.LABPACK = image.format; type = image.type; // placement vectors ... left, centre, right xposv = [0, to_real nwidth / 2 - width / 2, to_real nwidth - width]; yposv = [0, to_real nheight / 2 - height / 2, to_real nheight - height]; xp = left, position == 9 = xposv?((int) (position % 3)); yp = top, position == 9 = yposv?((int) (position / 3)); background = image_new nwidth nheight bands format coding type bgcolour.expr 0 0; } } } } } Image_map_item = class Menuaction "_Map" "map an image through a 2D transform image" { action a b = class _result { _vislevel = 3; interp = Interpolate_picker Interpolate_type.BILINEAR; _result = map_binary trans a b { trans a b = mapim interp.value in index { // get the index image first [index, in] = sortc (const is_twocomponent) [a, b]; // is a two-component image, ie. one band complex, or // two-band non-complex is_twocomponent x = is_nonc x || is_c x; is_nonc x = has_bands x && get_bands x == 2 && has_format x && !is_complex_format (get_format x); is_c x = has_bands x && get_bands x == 1 && has_format x && is_complex_format (get_format x); is_complex_format f = f == Image_format.COMPLEX || f == Image_format.DPCOMPLEX; } } } } Image_perspective_item = Perspective_item; Image_rubber_item = class Menupullright "Ru_bber Sheet" "automatically warp images to superposition" { rubber_interp = Option "Interpolation" ["Nearest", "Bilinear"] 1; rubber_order = Option "Order" ["0", "1", "2", "3"] 1; rubber_wrap = Toggle "Wrap image edges" false; // a transform ... a matrix, plus the size of the image the // matrix was made for Transform matrix image_width image_height = class matrix { // scale a transform ... if it worked for a m by n image, make // it work for a (m * xfac) by (y * yfac) image rescale xfac yfac = Transform (Matrix (map2 (map2 multiply) matrix.value facs)) (image_width * xfac) (image_height * yfac) { facs = [ [xfac, yfac], [1, 1], [1, 1], [1 / xfac, 1 / yfac], [1 / xfac, 1 / yfac], [1 / xfac, 1 / yfac] ]; } } // yuk!!!! fix is_instanceof to not need absolute names is_Transform = is_instanceof "Image_transform_item.Image_rubber_item.Transform"; Find_item = class Menuaction "_Find" ("find a transform which will map sample image onto " ++ "reference") { action reference sample = class _trn { _vislevel = 3; // controls order = rubber_order; interp = rubber_interp; wrap = rubber_wrap; max_err = Expression "Maximum error" 0.3; max_iter = Expression "Maximum iterations" 10; // transform [sample', trn, err] = transform_search max_err max_iter order interp wrap sample reference; transformed_image = Image sample'; _trn = Transform trn reference.width reference.height; final_error = err; } } Apply_item = class Menuaction "_Apply" "apply a transform to an image" { action a b = class _result { _vislevel = 3; // controls interp = rubber_interp; wrap = rubber_wrap; _result = map_binary trans a b { trans a b = transform interp wrap t' i { // get the transform arg first [i, t] = sortc (const is_Transform) [a, b]; t' = t.rescale (i.width / t.image_width) (i.height / t.image_height); } } } } } sep1 = Menuseparator; Match_item = class Menuaction "_Linear Match" "rotate and scale one image to match another" { action x y = class _result { _vislevel = 3; // try to find an image ... for a group, get the first item find_image x = x, is_Image x = find_image x?0, is_list x = find_image x.value, is_class x && has_value x = error "unable to find image"; _a = find_image x; _b = find_image y; ap1 = Mark_relative _a 0.5 0.25; bp1 = Mark_relative _b 0.5 0.25; ap2 = Mark_relative _a 0.5 0.75; bp2 = Mark_relative _b 0.5 0.75; refine = Toggle "Refine selected tie-points" false; lock = Toggle "No resize" false; _result = map_binary process x y { process a b = Image b''' { _prefs = Workspaces.Preferences; window = _prefs.MOSAIC_WINDOW_SIZE; object = _prefs.MOSAIC_OBJECT_SIZE; a' = a.value; b' = b.value; b'' = clip2fmt a.format b'; // return p2 ... if lock is set, return a p2 a standard // distance along the vector joining p1 and p2 norm p1 p2 = Rect left' top' 0 0, lock = p2 { v = (p2.left - p1.left, p2.top - p1.top); // 100000 to give precision since we pass points as // ints to match n = 100000 * sign v; left' = p1.left + re n; top' = p1.top + im n; } ap2'' = norm ap1 ap2; bp2'' = norm bp1 bp2; b''' = im_match_linear_search a' b'' ap1.left ap1.top bp1.left bp1.top ap2''.left ap2''.top bp2''.left bp2''.top object window, // we can't search if lock is on refine && !lock = im_match_linear a' b'' ap1.left ap1.top bp1.left bp1.top ap2''.left ap2''.top bp2''.left bp2''.top; } } } } Image_perspective_match_item = Perspective_match_item; } Image_band_item = class Menupullright "_Band" "manipulate image bands" { // like extract_bands, but return [] for zero band image // makes compose a bit simpler exb b n x = [], to_real n == 0 = extract_bands b n x; Extract_item = class Menuaction "_Extract" "extract bands from image" { action x = class _result { _vislevel = 3; first = Expression "Extract from band" 0; number = Expression "Extract this many bands" 1; _result = map_unary (exb first number) x; } } Insert_item = class Menuaction "_Insert" "insert bands into image" { action x y = class _result { _vislevel = 3; first = Expression "Insert at position" 0; _result = map_binary process x y { process im1 im2 = exb 0 f im1 ++ im2 ++ exb f (b - f) im1 { f = to_real first; b = im1.bands; } } } } Delete_item = class Menuaction "_Delete" "delete bands from image" { action x = class _result { _vislevel = 3; first = Expression "Delete from band" 0; number = Expression "Delete this many bands" 1; _result = map_unary process x { process im = exb 0 f im ++ exb (f + n) (b - (f + n)) im { f = to_real first; n = to_real number; b = im.bands; } } } } Bandwise_item = Image_join_item.Bandwise_item; sep1 = Menuseparator; Bandand_item = class Menuaction "Bitwise Band AND" "bitwise AND of image bands" { action x = bandand x; } Bandor_item = class Menuaction "Bitwise Band OR" "bitwise OR of image bands" { action x = bandor x; } sep2 = Menuseparator; To_dimension_item = class Menuaction "To D_imension" "convert bands to width or height" { action x = class _result { _vislevel = 3; orientation = Option "Orientation" [ "Horizontal", "Vertical" ] 0; _result = map_unary process x { process im = foldl1 [join_lr, join_tb]?orientation (bandsplit im); } } } To_bands_item = class Menuaction "To B_ands" "turn width or height to bands" { action x = class _result { _vislevel = 3; orientation = Option "Orientation" [ "Horizontal", "Vertical" ] 0; _result = map_unary process x { process im = bandjoin (map extract_column [0 .. im.width - 1]), orientation == 0 = bandjoin (map extract_row [0 .. im.height - 1]) { extract_column n = extract_area n 0 1 im.height im; extract_row n = extract_area 0 n im.width 1 im; } } } } } Image_crop_item = class Menuaction "_Crop" "extract a rectangular area from an image" { action x = crop x [l, t, w, h] { fields = [ [has_left, get_left, 0], [has_top, get_top, 0], [has_width, get_width, 100], [has_height, get_height, 100] ]; [l, t, w, h] = map get_default fields { get_default line = get x, has x = default { [has, get, default] = line; } } } crop x geo = class _result { _vislevel = 3; l = Expression "Crop left" ((int) (geo?0 + geo?2 / 4)); t = Expression "Crop top" ((int) (geo?1 + geo?3 / 4)); w = Expression "Crop width" (max_pair 1 ((int) (geo?2 / 2))); h = Expression "Crop height" (max_pair 1 ((int) (geo?3 / 2))); _result = map_nary (list_5ary extract) [x, l.expr, t.expr, w.expr, h.expr] { extract im l t w h = extract_area left' top' width' height' im { width' = min_pair (to_real w) im.width; height' = min_pair (to_real h) im.height; left' = range 0 (to_real l) (im.width - width'); top' = range 0 (to_real t) (im.height - height'); } } } } Image_insert_item = class Menuaction "_Insert" "insert a small image into a large image" { action a b = insert_position, is_Group a || is_Group b = insert_area { insert_area = class _result { _check_args = [ [a, "a", check_Image], [b, "b", check_Image] ]; _vislevel = 3; // sort to get smallest first _pred x y = x.width * x.height < y.width * y.height; [_a', _b'] = sortc _pred [a, b]; place = Area _b' left top width height { // be careful in case b is smaller than a left = max_pair 0 ((_b'.width - _a'.width) / 2); top = max_pair 0 ((_b'.height - _a'.height) / 2); width = min_pair _a'.width _b'.width; height = min_pair _a'.height _b'.height; } _result = insert_noexpand place.left place.top (clip2fmt _b'.format a'') _b' { a'' = extract_area 0 0 place.width place.height _a'; } } insert_position = class _result { _vislevel = 3; position = Option "Position" [ "North-west", "North", "North-east", "West", "Centre", "East", "South-west", "South", "South-east", "Specify in pixels" ] 4; left = Expression "Pixels from left" 0; top = Expression "Pixels from top" 0; _result = map_binary insert a b { insert a b = insert_noexpand left top (clip2fmt b.format a) b, position == 9 = insert_noexpand xp yp (clip2fmt b.format a) b { xr = b.width - a.width; yr = b.height - a.height; xp = [0, xr / 2, xr]?((int) (position % 3)); yp = [0, yr / 2, yr]?((int) (position / 3)); } } } } } Image_select_item = Select_item; Image_draw_item = class Menupullright "_Draw" "draw lines, circles, rectangles, floods" { Line_item = class Menuaction "_Line" "draw line on image" { action x = class _result { _vislevel = 3; x1 = Expression "Start x" 0; y1 = Expression "Start y" 0; x2 = Expression "End x" 100; y2 = Expression "End y" 100; i = Expression "Ink" [0]; _result = map_unary line x { line im = draw_line x1 y1 x2 y2 i.expr im; } } } Rect_item = class Menuaction "_Rectangle" "draw rectangle on image" { action x = class _result { _vislevel = 3; rx = Expression "Left" 50; ry = Expression "Top" 50; rw = Expression "Width" 100; rh = Expression "Height" 100; f = Toggle "Fill" true; t = Scale "Line thickness" 1 50 3; i = Expression "Ink" [0]; _result = map_unary rect x { rect im = draw_rect_width rx ry rw rh f t i.expr im; } } } Circle_item = class Menuaction "_Circle" "draw circle on image" { action x = class _result { _vislevel = 3; cx = Expression "Centre x" 100; cy = Expression "Centre y" 100; r = Expression "Radius" 50; f = Toggle "Fill" true; i = Expression "Ink" [0]; _result = map_unary circle x { circle im = draw_circle cx cy r f i.expr im; } } } Flood_item = class Menuaction "_Flood" "flood bounded area of image" { action x = class _result { _vislevel = 3; sx = Expression "Start x" 100; sy = Expression "Start y" 100; e = Option "Flood while" [ "Not equal to ink", "Equal to start point" ] 0; // pick a default ink that won't flood, if we can i = Expression "Ink" default_ink { default_ink = [0], ! has_image x = pixel; pixel = map mean (bandsplit (extract_area sx sy 1 1 im)); im = get_image x; } _result = map_unary flood x { flood im = draw_flood sx sy i.expr im, e == 0 = draw_flood_blob sx sy i.expr im; } } } Draw_scalebar_item = class Menuaction "_Scale" "draw scale bar" { action x = class _result { _vislevel = 3; px = Expression "Left" 50; py = Expression "Top" 50; wid = Expression "Width" 100; thick = Scale "Line thickness" 1 50 3; text = String "Dimension text" "50μm"; font = Fontname "Use font" Workspaces.Preferences.PAINTBOX_FONT; pos = Option "Position Text" ["Above", "Below"] 1; vp = Option "Dimension by" [ "Inner Vertical Edge", "Centre of Vertical", "Outer Vertical Edge" ] 1; dpi = Expression "DPI" 100; ink = Colour "Lab" [50,0,0]; _result = map_unary process x { process im = blend (Image scale) ink' im { // make an ink compatible with the image ink' = colour_transform_to (get_type im) ink; x = to_real px; y = to_real py; w = to_real wid; d = to_real dpi; t = floor thick; bg = image_new (get_width im) (get_height im) (get_bands im) (get_format im) (get_coding im) (get_type im) 0 0 0; draw_block x y w t im = draw_rect_width x y w t true 1 [255] im; label = im_text text.value font.value w 1 d; lw = get_width label; lh = get_height label; ly = [y - lh - t, y + 2 * t]?pos; vx = [ [x - t, x + w], [x - t / 2, x + w - t / 2], [x, x + w - t] ]?vp; scale = (draw_block x y w t @ draw_block vx?0 (y - 2 * t) t (t * 5) @ draw_block vx?1 (y - 2 * t) t (t * 5) @ insert_noexpand (x + w / 2 - lw / 2) ly label) bg; } } } } } Image_join_item = class Menupullright "_Join" "join two or more images together" { Bandwise_item = class Menuaction "_Bandwise Join" "join two images bandwise" { action a b = join a b; } sep1 = Menuseparator; join_lr shim bg align a b = im2 { w = a.width + b.width + shim; h = max_pair a.height b.height; back = image_new w h a.bands a.format a.coding a.type bg 0 0; ya = [0, max_pair 0 ((b.height - a.height)/2), max_pair 0 (b.height - a.height)]; yb = [0, max_pair 0 ((a.height - b.height)/2), max_pair 0 (a.height - b.height)]; im1 = insert_noexpand 0 ya?align a back; im2 = insert_noexpand (a.width + shim) yb?align b im1; } join_tb shim bg align a b = im2 { w = max_pair a.width b.width; h = a.height + b.height + shim; back = image_new w h a.bands a.format a.coding a.type bg 0 0; xa = [0, max_pair 0 ((b.width - a.width)/2), max_pair 0 (b.width - a.width)]; xb = [0, max_pair 0 ((a.width - b.width)/2), max_pair 0 (a.width - b.width)]; im1 = insert_noexpand xa?align 0 a back; im2 = insert_noexpand xb?align (a.height + shim) b im1; } halign_names = ["Top", "Centre", "Bottom"]; valign_names = ["Left", "Centre", "Right"]; Left_right_item = class Menuaction "_Left to Right" "join two images left-right" { action a b = class _result { _vislevel = 3; shim = Scale "Spacing" 0 100 0; bg_colour = Expression "Background colour" 0; align = Option "Alignment" halign_names 1; _result = map_binary (join_lr shim.value bg_colour.expr align.value) a b; } } Top_bottom_item = class Menuaction "_Top to Bottom" "join two images top-bottom" { action a b = class _result { _vislevel = 3; shim = Scale "Spacing" 0 100 0; bg_colour = Expression "Background colour" 0; align = Option "Alignment" valign_names 1; _result = map_binary (join_tb shim.value bg_colour.expr align.value) a b; } } sep2 = Menuseparator; Array_item = class Menuaction "_Array" "join a list of lists of images into a single image" { action x = class _result { _vislevel = 3; hshim = Scale "Horizontal spacing" (-100) (100) 0; vshim = Scale "Vertical spacing" (-100) (100) 0; bg_colour = Expression "Background colour" 0; halign = Option "Horizontal alignment" valign_names 1; valign = Option "Vertical alignment" halign_names 1; // we can't use map_unary since chop-into-tiles returns a group of // groups and we want to be able to reassemble that // TODO: chop-into-tiles should return an array class which // displays as group but does not have the looping behaviour? _result = (image_set_origin 0 0 @ foldl1 (join_tb vshim.value bg_colour.expr halign.value) @ map (foldl1 (join_lr hshim.value bg_colour.expr valign.value))) (to_list (to_list x)); } } ArrayFL_item = class Menuaction "_Array from List" "join a list of images into a single image" { action x = class _result { _vislevel = 3; ncol = Number "Max. Number of Columns" 1; hshim = Scale "Horizontal spacing" (-100) (100) 0; vshim = Scale "Vertical spacing" (-100) (100) 0; bg_colour = Expression "Background colour" 0; halign = Option "Horizontal alignment" valign_names 1; valign = Option "Vertical alignment" halign_names 1; _l = split_lines ncol.value x.value, is_Group x = split_lines ncol.value x; _result = (image_set_origin 0 0 @ foldl1 (join_tb vshim.value bg_colour.expr halign.value) @ map (foldl1 (join_lr hshim.value bg_colour.expr valign.value))) (to_list (to_list _l)); } } } Image_tile_item = class Menupullright "Til_e" "tile an image across and down" { tile_widget default_type x = class _result { _vislevel = 3; across = Expression "Tiles across" 2; down = Expression "Tiles down" 2; repeat = Option "Tile type" ["Replicate", "Four-way mirror"] default_type; _result = map_unary process x { process image = tile across down image, repeat == 0 = tile across down image'' { image' = insert image.width 0 (fliplr image) image; image'' = insert 0 image.height (fliptb image') image'; } } } Replicate_item = class Menuaction "_Replicate" "replicate image across and down" { action x = tile_widget 0 x; } Fourway_item = class Menuaction "_Four-way Mirror" "four-way mirror across and down" { action x = tile_widget 1 x; } Chop_item = class Menuaction "_Chop Into Tiles" "slice an image into tiles" { action x = class _result { _vislevel = 3; tile_width = Expression "Tile width" 100; tile_height = Expression "Tile height" 100; hoverlap = Expression "Horizontal overlap" 0; voverlap = Expression "Vertical overlap" 0; _result = map_unary (Group @ map Group @ process) x { process x = imagearray_chop tile_width tile_height hoverlap voverlap x; } } } } #separator Pattern_images_item = class Menupullright "_Patterns" "make a variety of useful patterns" { Grey_item = class Menuaction "Grey _Ramp" "make a smooth grey ramp" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; orientation = Option "Orientation" [ "Horizontal", "Vertical" ] 0; foption = Option "Format" ["8 bit", "float"] 0; _result = Image im { gen = im_grey, foption == 0 = im_fgrey; w = to_real nwidth; h = to_real nheight; im = gen w h, orientation == 0 = rot90 (gen h w); } } } Xy_item = class Menuaction "_XY Image" "make a two band image whose pixel values are their coordinates" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; _result = Image (make_xy nwidth nheight); } } Noise_item = class Menupullright "_Noise" "various noise generators" { Gaussian_item = class Menuaction "_Gaussian" "make an image of gaussian noise" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; mean = Scale "Mean" 0 255 128; deviation = Scale "Deviation" 0 128 50; _result = Image (im_gaussnoise (to_real nwidth) (to_real nheight) mean.value deviation.value); } } Fractal_item = class Menuaction "_Fractal" "make a fractal noise image" { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; dimension = Scale "Dimension" 2.001 2.999 2.001; _result = Image (im_fractsurf (to_real nsize) dimension.value); } } Perlin_item = class Menuaction "_Perlin" "Perlin noise image" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; cell_size = Expression "Cell size (pixels)" 8; eight = Toggle "Eight bit output" true; _result = 128 * im + 128, eight = im { im = perlin cell_size nwidth nheight; } } } Worley_item = class Menuaction "_Worley" "Worley noise image" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 512; nheight = Expression "Image height (pixels)" 512; cell_size = Expression "Cell size (pixels)" 256; _result = worley cell_size nwidth nheight; } } } Checkerboard_item = class Menuaction "_Checkerboard" "make a checkerboard image" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; hpsize = Expression "Horizontal patch size" 8; vpsize = Expression "Vertical patch size" 8; hpoffset = Expression "Horizontal patch offset" 0; vpoffset = Expression "Vertical patch offset" 0; _result = Image (xstripes ^ ystripes) { pixels = make_xy nwidth nheight; xpixels = pixels?0 + to_real hpoffset; ypixels = pixels?1 + to_real vpoffset; make_stripe pix swidth = pix % (swidth * 2) >= swidth; xstripes = make_stripe xpixels (to_real hpsize); ystripes = make_stripe ypixels (to_real vpsize); } } } Grid_item = class Menuaction "Gri_d" "make a grid" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; hspace = Expression "Horizontal line spacing" 8; vspace = Expression "Vertical line spacing" 8; thick = Expression "Line thickness" 1; hoff = Expression "Horizontal grid offset" 4; voff = Expression "Vertical grid offset" 4; _result = Image (xstripes | ystripes) { pixels = make_xy nwidth nheight; xpixels = pixels?0 + to_real hoff; ypixels = pixels?1 + to_real voff; make_stripe pix swidth = pix % swidth < to_real thick; xstripes = make_stripe xpixels (to_real hspace); ystripes = make_stripe ypixels (to_real vspace); } } } Text_item = class Menuaction "_Text" "make a bitmap of some text" { action = class _result { _vislevel = 3; text = String "Text to paint" "Hello world!"; font = Fontname "Use font" Workspaces.Preferences.PAINTBOX_FONT; wrap = Expression "Wrap text at" 500; align = Option "Alignment" [ "Left", "Centre", "Right" ] 0; dpi = Expression "DPI" 300; _result = Image (im_text text.value font.value (to_real wrap) align.value (to_real dpi)); } } New_CIELAB_slice_item = class Menuaction "CIELAB _Slice" "make a slice through CIELAB space" { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; L = Scale "L value" 0 100 50; _result = Image (lab_slice (to_real nsize) L.value); } } sense_option = Option "Sense" [ "Pass", "Reject" ] 0; build fn size = (Image @ image_set_type Image_type.FOURIER @ rotquad @ fn) (im_create_fmask size size); New_ideal_item = class Menupullright "_Ideal Fourier Mask" "make various ideal Fourier filter masks" { High_low_item = class Menuaction "_High or Low Pass" ("make a mask image for a highpass/lowpass " ++ "ideal Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f sense.value fc.value 0 0 0 0; } } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" ("make a mask image for an ring pass/reject " ++ "ideal Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; rw = Scale "Ring width" 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f (sense.value + 6) fc.value rw.value 0 0 0; } } } Band_item = class Menuaction "_Band Pass or Band Reject" ("make a mask image for a band pass/reject " ++ "ideal Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fcx = Scale "Horizontal frequency cutoff" 0.01 0.99 0.5; fcy = Scale "Vertical frequency cutoff" 0.01 0.99 0.5; r = Scale "Radius" 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f (sense.value + 12) fcx.value fcy.value r.value 0 0; } } } } New_gaussian_item = class Menupullright "_Gaussian Fourier Mask" "make various Gaussian Fourier filter masks" { High_low_item = class Menuaction "_High or Low Pass" ("make a mask image for a highpass/lowpass " ++ "Gaussian Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f (sense.value + 4) fc.value ac.value 0 0 0; } } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" ("make a mask image for an ring pass/reject " ++ "Gaussian Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; rw = Scale "Ring width" 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f (sense.value + 10) fc.value rw.value ac.value 0 0; } } } Band_item = class Menuaction "_Band Pass or Band Reject" ("make a mask image for a band pass/reject " ++ "Gaussian Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fcx = Scale "Horizontal frequency cutoff" 0.01 0.99 0.5; fcy = Scale "Vertical frequency cutoff" 0.01 0.99 0.5; r = Scale "Radius" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f (sense.value + 16) fcx.value fcy.value r.value ac.value 0; } } } } New_butterworth_item = class Menupullright "_Butterworth Fourier Mask" "make various Butterworth Fourier filter masks" { High_low_item = class Menuaction "_High or Low Pass" ("make a mask image for a highpass/lowpass " ++ "Butterworth Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; order = Scale "Order" 1 10 2; _result = build param (to_real nsize) { param f = f (sense.value + 2) order.value fc.value ac.value 0 0; } } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" ("make a mask image for an ring pass/reject " ++ "Butterworth Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; rw = Scale "Ring width" 0.01 0.99 0.5; order = Scale "Order" 1 10 2; _result = build param (to_real nsize) { param f = f (sense.value + 8) order.value fc.value rw.value ac.value 0; } } } Band_item = class Menuaction "_Band Pass or Band Reject" ("make a mask image for a band pass/reject " ++ "Butterworth Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fcx = Scale "Horizontal frequency cutoff" 0.01 0.99 0.5; fcy = Scale "Vertical frequency cutoff" 0.01 0.99 0.5; r = Scale "Radius" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; order = Scale "Order" 1 10 2; _result = build param (to_real nsize) { param f = f (sense.value + 14) order.value fcx.value fcy.value r.value ac.value; } } } } } Test_images_item = class Menupullright "Test I_mages" "make a variety of test images" { Eye_item = class Menuaction "_Spatial Response" "image for testing the eye's spatial response" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; factor = Scale "Factor" 0.001 1 0.2; _result = Image (im_eye (to_real nwidth) (to_real nheight) factor.value); } } Zone_plate = class Menuaction "_Zone Plate" "make a zone plate" { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; _result = Image (im_zone (to_real nsize)); } } Frequency_test_chart_item = class Menuaction "_Frequency Testchart" "make a black/white frequency test pattern" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; sheight = Expression "Strip height (pixels)" 10; waves = Expression "Wavelengths" [64, 32, 16, 8, 4, 2]; _result = imagearray_assemble 0 0 (transpose [strips]) { freq_slice wave = Image (sin (grey / wave) > 0); strips = map freq_slice waves.expr; grey = im_fgrey (to_real nwidth) (to_real sheight) * 360 * (to_real nwidth); } } } CRT_test_chart_item = class Menuaction "CRT _Phosphor Chart" "make an image for measuring phosphor colours" { action = class _result { _vislevel = 3; brightness = Scale "Brightness" 0 255 200; psize = Expression "Patch size (pixels)" 32; _result = Image (imagearray_assemble 0 0 [[green, red], [blue, white]]) { black = image_new (to_real psize) (to_real psize) 1 Image_format.FLOAT Image_coding.NOCODING Image_type.B_W 0 0 0; notblack = black + brightness; green = black ++ notblack ++ black; red = notblack ++ black ++ black; blue = black ++ black ++ notblack; white = notblack ++ notblack ++ notblack; } } } Greyscale_chart_item = class Menuaction "_Greyscale" "make a greyscale" { action = class _result { _vislevel = 3; pwidth = Expression "Patch width" 8; pheight = Expression "Patch height" 8; npatches = Expression "Number of patches" 16; _result = Image (image_set_type Image_type.B_W (clip2fmt Image_format.UCHAR wedge)) { wedge = 255 / (to_real npatches - 1) * (int) (strip?0 / to_real pwidth) { strip = make_xy (to_real pwidth * to_real npatches) pheight; } } } } CMYK_test_chart_item = class Menuaction "_CMYK Wedges" "make a set of CMYK wedges" { action = class _result { _vislevel = 3; pwidth = Expression "Patch width" 8; pheight = Expression "Patch height" 8; npatches = Expression "Number of patches" 16; _result = Image (image_set_type Image_type.CMYK (clip2fmt Image_format.UCHAR strips)) { wedge = 255 / (to_real npatches - 1) * (int) (strip?0 / to_real pwidth) { strip = make_xy (to_real pwidth * to_real npatches) pheight; } black = wedge * 0; C = wedge ++ black ++ black ++ black; M = black ++ wedge ++ black ++ black; Y = black ++ black ++ wedge ++ black; K = black ++ black ++ black ++ wedge; strips = imagearray_assemble 0 0 [[C],[M],[Y],[K]]; } } } Colour_atlas_item = class Menuaction "_Colour Atlas" "make a grid of patches grouped around a colour" { action = class _result { _vislevel = 3; start = Colour_picker "Lab" [50,0,0]; nstep = Expression "Number of steps" 9; ssize = Expression "Step size" 10; psize = Expression "Patch size" 32; sepsize = Expression "Separator size" 4; _result = colour_transform_to (get_type start) blocks''' { size = (to_real nstep * 2 + 1) * to_real psize - to_real sepsize; xy = make_xy size size; xy_grid = (xy % to_real psize) < (to_real psize - to_real sepsize); grid = xy_grid?0 & xy_grid?1; blocks = (int) (to_real ssize * ((int) (xy / to_real psize))); lab_start = colour_transform_to Image_type.LAB start; blocks' = blocks - to_real nstep * to_real ssize + Vector (tl lab_start.value); blocks'' = hd lab_start.value ++ Image blocks'; blocks''' = image_set_type Image_type.LAB blocks'', Image grid = 0; } } } } nip2-8.7.0/share/nip2/compat/8.4/_list.def0000644000175000017500000002310313224651032014654 00000000000000/* any l: or all the elements of list l together * * any (map (equal 0) list) == true, if any element of list is zero. * any :: [bool] -> bool */ any = foldr logical_or false; /* all l: and all the elements of list l together * * all (map (==0) list) == true, if every element of list is zero. * all :: [bool] -> bool */ all = foldr logical_and true; /* concat l: join a list of lists together * * concat ["abc","def"] == "abcdef". * concat :: [[*]] -> [*] */ concat l = foldr join [] l; /* delete eq x l: delete the first x from l * * delete equal 'b' "abcdb" == "acdb" * delete :: (* -> bool) -> * -> [*] -> [*] */ delete eq a l = [], l == [] = y, eq a b = b : delete eq a y { b:y = l; } /* difference eq a b: delete b from a * * difference equal "asdf" "ad" == "sf" * difference :: (* -> bool) -> [*] -> [*] -> [*] */ difference = foldl @ converse @ delete; /* drop n l: drop the first n elements from list l * * drop 3 "abcd" == "d" * drop :: num -> [*] -> [*] */ drop n l = l, n <= 0 || l == [] = drop (n - 1) (tl l); /* dropwhile fn l: drop while fn is true * * dropwhile is_digit "1234pigs" == "pigs" * dropwhile :: (* -> bool) -> [*] -> [*] */ dropwhile fn l = [], l == [] = dropwhile fn x, fn a = l { a:x = l; } /* extract n l: extract element at index n from list l */ extract = converse subscript; /* filter fn l: return all elements of l for which predicate fn holds * * filter is_digit "1one2two3three" = "123" * filter :: (* -> bool) -> [*] -> [*] */ filter fn l = foldr addif [] l { addif x l = x : l, fn x; = l; } /* flatten x: flatten a list of lists of things into a simple list * * flatten :: [[*]] -> [*] */ flatten x = foldr flat [] x, is_list x = x { flat x sofar = foldr flat sofar x, is_list x = x : sofar; } /* foldl fn st l: fold list l from the left with function fn and start st * * Start from the left hand end of the list (unlike foldr, see below). * foldl is less useful (and much slower). * * foldl fn start [a,b .. z] = ((((st fn a) fn b) ..) fn z) * foldl :: (* -> ** -> *) -> * -> [**] -> * */ foldl fn st l = st, l == [] = foldl fn (fn st x) xs { x:xs = l; } /* foldl1 fn l: like foldl, but use the 1st element as the start value * * foldl1 fn [1,2,3] == ((1 fn 2) fn 3) * foldl1 :: (* -> * -> *) -> [*] -> * */ foldl1 fn l = [], l == [] = foldl fn x xs { x:xs = l; } /* foldr fn st l: fold list l from the right with function fn and start st * * foldr fn st [a,b..z] = (a fn (b fn (.. (z fn st)))) * foldr :: (* -> ** -> **) -> ** -> [*] -> ** */ foldr fn st l = st, l == [] = fn x (foldr fn st xs) { x:xs = l; } /* foldr1 fn l: like foldr, but use the last element as the start value * * foldr1 fn [1,2,3,4] == (1 fn (2 fn (3 fn 4))) * foldr1 :: (* -> * -> *) -> [*] -> * */ foldr1 fn l = [], l == [] = x, xs == [] = fn x (foldr1 fn xs) { x:xs = l; } /* Search a list for an element, returning its index (or -1) * * index (equal 12) [13,12,11] == 1 * index :: (* -> bool) -> [*] -> real */ index fn list = search list 0 { search l n = -1, l == [] = n, fn x = search xs (n + 1) { x:xs = l; } } /* init l: remove last element of list l * * The dual of tl. * init [1,2,3] == [1,2] * init :: [*] -> [*] */ init l = error "init of []", l == []; = [], tl l == []; = x : init xs { x:xs = l; } /* iterate f x: repeatedly apply f to x * * return the infinite list [x, f x, f (f x), ..]. * iterate (multiply 2) 1 == [1, 2, 4, 8, 16, 32, 64 ... ] * iterate :: (* -> *) -> * -> [*] */ iterate f x = x : iterate f (f x); /* join_sep sep l: join a list with a separator * * join_sep ", " (map print [1 .. 4]) == "1, 2, 3, 4" * join_sep :: [*] -> [[*]] -> [*] */ join_sep sep l = foldl1 fn l { fn a b = a ++ sep ++ b; } /* last l: return the last element of list l * * The dual of hd. last [1,2,3] == 3 * last :: [*] -> [*] */ last l = error "last of []", l == [] = x, xs == [] = last xs { x:xs = l; } /* len l: length of list l * (see also is_list_len and friends in predicate.def) * * len :: [*] -> num */ len l = 0, l == [] = 1 + len (tl l); /* limit l: return the first element of l which is equal to its predecessor * * useful for checking for convergence * limit :: [*] -> * */ limit l = error "incorrect use of limit", l == [] || tl l == [] || tl (tl l) == [] = a, a == b = limit (b : x) { a:b:x = l; } /* Turn a function of n args into a function which takes a single arg of an * n-element list. */ list_1ary fn x = fn x?0; list_2ary fn x = fn x?0 x?1; list_3ary fn x = fn x?0 x?1 x?2; list_4ary fn x = fn x?0 x?1 x?2 x?3; list_5ary fn x = fn x?0 x?1 x?2 x?3 x?4; list_6ary fn x = fn x?0 x?1 x?2 x?3 x?4 x?5; list_7ary fn x = fn x?0 x?1 x?2 x?3 x?4 x?5 x?6; /* map fn l: map function fn over list l * * map :: (* -> **) -> [*] -> [**] */ map f l = [], l == []; = f (hd l) : map f (tl l); /* map2 fn l1 l2: map two lists together with fn * * map2 :: (* -> ** -> ***) -> [*] -> [**] -> [***] */ map2 fn l1 l2 = map (list_2ary fn) (zip2 l1 l2); /* map3 fn l1 l2 l3: map three lists together with fn * * map3 :: (* -> ** -> *** -> ****) -> [*] -> [**] -> [***] -> [****] */ map3 fn l1 l2 l3 = map (list_3ary fn) (zip3 l1 l2 l3); /* member l x: true if x is a member of list l * * is_digit == member "0123456789" * member :: [*] -> * -> bool */ member l x = any (map (equal x) l); /* merge b l r: merge two lists based on a bool list * * merge :: [bool] -> [*] -> [*] -> [*] */ merge p l r = [], p == [] || l == [] || r == [] = a : merge z x y, c = b : merge z x y { a:x = l; b:y = r; c:z = p; } /* mkset eq l: remove duplicates from list l using equality function * * mkset :: (* -> bool) -> [*] -> [*] */ mkset eq l = [], l == [] = a : filter (not @ eq a) (mkset eq x) { a:x = l; } /* postfix l r: add r to the end of list l * * The dual of ':'. * postfix :: [*] -> ** -> [*,**] */ postfix l r = l ++ [r]; /* repeat x: make an infinite list of xes * * repeat :: * -> [*] */ repeat x = map (const x) [1..]; /* replicate n x: make n copies of x in a list * * replicate :: num -> * -> [*] */ replicate n x = take n (repeat x); /* reverse l: reverse list l * * reverse :: [*] -> [*] */ reverse l = foldl (converse cons) [] l; /* scanl fn st l: apply (foldl fn r) to every initial segment of a list * * scanl add 0 [1,2,3] == [1,3,6] * scanl :: (* -> ** -> *) -> * -> [**] -> [*] */ scanl fn st l = st, l == [] = st' : scanl fn st' xs { x:xs = l; st' = fn st x; } /* sort l: sort list l into ascending order * * sort :: [*] -> [*] */ sort l = sortc less_equal l; /* sortc comp l: sort list l into order using a comparision function * * Uses merge sort (n log n behaviour) * sortc :: (* -> * -> bool) -> [*] -> [*] */ sortc comp l = l, n <= 1 = merge (sortc comp (take n2 l)) (sortc comp (drop n2 l)) { n = len l; n2 = (int) (n / 2); /* merge l1 l2: merge sorted lists l1 and l2 to make a single * sorted list */ merge l1 l2 = l2, l1 == [] = l1, l2 == [] = a : merge x (b : y), comp a b = b : merge (a : x) y { a:x = l1; b:y = l2; } } /* sortpl pl l: sort by a list of predicates * * sortpl :: (* -> bool) -> [*] -> [*] */ sortpl pl l = sortc (test pl) l { /* Comparision function ... put true before false, if equal move on to * the next predicate. */ test pl a b = true, pl == [] = ta, ta != tb = test (tl pl) a b { ta = pl?0 a; tb = pl?0 b; } } /* sortr l: sort list l into descending order * * sortr :: [*] -> [*] */ sortr l = sortc more l; /* split fn l: break a list into sections separated by many fn * * split is_space " hello world " == ["hello", "world"] * split is_space " " == [] * split :: (* -> bool) -> [*] -> [[*]] */ split fn l = [], l == [] || l' == [] = head : split fn tail { nfn = not @ fn; l' = dropwhile fn l; head = takewhile nfn l'; tail = dropwhile nfn l'; } /* splits fn l: break a list into sections separated by a single fn * * split (equal ',') ",,1" == ["", "", "1"] * split :: (* -> bool) -> [*] -> [[*]] */ splits fn l = [], l == [] = head : splits fn tail { fn' = not @ fn; dropif x = [], x == [] = tl x; head = takewhile fn' l; tail = dropif (dropwhile fn' l); } /* splitpl fnl l: split a list up with a list of predicates * * splitpl [is_digit, is_letter, is_digit] "123cat" == ["123", "cat", []] * splitpl :: [* -> bool] -> [*] -> [[*]] */ splitpl fnl l = l, fnl == [] = head : splitpl (tl fnl) tail { head = takewhile (hd fnl) l; tail = dropwhile (hd fnl) l; } /* split_lines n l: split a list into equal length lines * * split_lines 4 "1234567" == ["1234", "567"] * splitl :: int -> [*] -> [[*]] */ split_lines n l = [], l == [] = take n l : split_lines n (drop n l); /* take n l: take the first n elements from list l * take :: num -> [*] -> [*] */ take n l = [], n <= 0 = [], l == [] = hd l : take (n-1) (tl l); /* takewhile fn l: take from the front of a list while predicate fn holds * * takewhile is_digit "123onetwothree" == "123" * takewhile :: (* -> bool) -> [*] -> [*] */ takewhile fn l = [], l == [] = hd l : takewhile fn (tl l), fn (hd l) = []; /* zip2 l1 l2: zip two lists together * * zip2 [1,2] ['a', 'b', 'c'] == [[1,'a'],[2,'b']] * zip2 :: [*] -> [**] -> [[*,**]] */ zip2 l1 l2 = [], l1 == [] || l2 == [] = [hd l1, hd l2] : zip2 (tl l1) (tl l2); /* zip3 l1 l2 l3: zip three lists together * * zip3 [1,2] ['a', 'b', 'c'] [true] == [[1,'a',true]] * zip3 :: [*] -> [**] ->[***] -> [[*,**,***]] */ zip3 l1 l2 l3 = [], l1 == [] || l2 == [] || l3 == [] = [hd l1, hd l2, hd l3] : zip3 (tl l1) (tl l2) (tl l3); nip2-8.7.0/share/nip2/compat/8.4/_magick.def0000644000175000017500000005322113224651032015140 00000000000000/* ImageMagick operations edited by Alan Gibson (aka "snibgo"; snibgo at earthling dot net). 1-Apr-2014 Minor corrections to Geometry_widget and Alpha. Added loads of widgets and Menuactions. Not fully tested. 5-Apr-2014 Many more menu actions. Reorganised Magick menu. 10-Apr-2014 Many more menu actions. 11-Apr-2014 jcupitt Split to separate _magick.def Add 0-ary and 2-ary system Put utility funcs into a Magick class 11-Apr-2014 snibgo Added VirtualPixelBack for cases where background is only relevant when VP=Background 17-Apr-2014 snibgo Many small changes. 2-May-2014 jcupitt Added Magick.version 30-June-2014 Put single-quotes around command exe to help win 1-July-2014 Automatically fall back to gm if we can't find convert 17-July-2014 better GM support Last update: 17-July-2014. For details of ImageMagick operations, see http://www.imagemagick.org/script/command-line-options.php etc. */ /* Put these in a class to avoid filling the main namespace with IM stuff. */ Magick = class { // first gm on path, or "" gm_path = search_for "gm"; // first convert on $PATH, or "" // we check for the convert we ship first convert_path = vips_convert, vips_convert != "" = search_for "convert" { // the convert we ship with the vips binary on some platforms, or "" vips_convert = search (path_absolute convert) { vipshome = path_parse (expand "$VIPSHOME"); convert = vipshome ++ ["bin", "convert" ++ expand "$EXEEXT"]; } } use_gm_pref = Workspaces.Preferences.USE_GRAPHICSMAGICK; // Are we in GM or IM mode? use_gm = true, use_gm_pref && gm_path != "" = false, !use_gm_pref && convert_path != "" = false, convert_path != "" = true, gm_path != "" = error "neither IM nor GM executable found"; command_path = gm_path, use_gm = convert_path; // try to get the version as eg. [6, 7, 7, 10] // GM versions are smaller, typically [1, 3, 18] version = map parse_int (split (member ".-") version_string) { [output] = vips_call "system" ["'" ++ command_path ++ "' -version"] [$log=>true]; version_string = (split (equal ' ') output)?1, use_gm = (split (equal ' ') output)?2; } // make a command-line ... args is a [str] we join with spaces command args = "'" ++ command_path ++ "' " ++ join_sep " " args' { args' = ["convert"] ++ args, use_gm = args; } // capabilities ... different versions support different features, we // turn features on and off based on these // would probably be better to test for caps somehow has_intensity = false, use_gm = version?0 > 6 || version?1 > 7; has_channel = false, use_gm = version?0 > 6 || version?1 > 7; system0 cmd = system_image0 cmd; system cmd x = map_unary (system_image cmd) x; system2 cmd x y = map_binary (system_image2 cmd) x y; system3 cmd x y z = map_trinary (system_image3 cmd) x y z; radius_widget = Scale "Radius" 0 100 10; sigma_widget = Scale "Sigma" 0.1 10 1; angle_widget = Scale "Angle (degrees)" (-360) 360 0; text_widget = String "Text to draw" "AaBbCcDdEe"; gamma_widget = Scale "Gamma" 0 10 1; colors_widget = Scale "Colors" 1 10 3; resize_widget = Scale "Resize (percent)" 0 500 100; fuzz_widget = Scale "Fuzz (percent)" 0 100 0; blur_rad_widget = Scale "Radius (0=auto)" 0 100 0; // a colour with no enclosing quotes ... use this if we know there are // some quotes at an outer level print_colour_nq triple = concat ["#", concat (map fmt triple)] { fmt x = reverse (take 2 (reverse (print_base 16 (x + 256)))); } // we need the quotes because # is the comment character in *nix print_colour triple = "\"" ++ print_colour_nq triple ++ "\""; Foreground triple = class Colour "sRGB" triple { _flag = "-fill " ++ print_colour triple; Colour_edit space triple = this.Foreground triple; } foreground_widget = Foreground [0, 0, 0]; GeneralCol triple = class Colour "sRGB" triple { _flag = print_colour_nq triple; Colour_edit space triple = this.GeneralCol triple; } generalcol_widget = GeneralCol [0, 0, 0]; Background triple = class Colour "sRGB" triple { isNone = Toggle "None (transparent black)" false; _flag = "-background " ++ if isNone then "None" else print_colour triple; Colour_edit space triple = this.Background triple; } background_widget = Background [255, 255, 255]; Bordercol triple = class Colour "sRGB" triple { _flag = "-bordercolor " ++ print_colour triple; Colour_edit space triple = this.Bordercol triple; } bordercol_widget = Bordercol [0, 0, 0]; Mattecol triple = class Colour "sRGB" triple { _flag = "-mattecolor " ++ print_colour triple; Colour_edit space triple = this.Mattecol triple; } mattecol_widget = Mattecol [189, 189, 189]; // FIXME: Undercolour, like many others, can have alpha channel. // How does user input this? With a slider? Undercol triple = class Colour "sRGB" triple { isNone = Toggle "None (transparent black)" true; _flag = if isNone then "" else ("-undercolor " ++ print_colour triple); Colour_edit space triple = this.Undercol triple; } undercol_widget = Undercol [0, 0, 0]; changeCol_widget = class { _vislevel = 3; colour = GeneralCol [0, 0, 0]; fuzz = fuzz_widget; nonMatch = Toggle "change non-matching colours" false; } Alpha alpha = class Option_string "Alpha" [ "On", "Off", "Set", "Opaque", "Transparent", "Extract", "Copy", "Shape", "Remove", "Background" ] alpha { _flag = "-alpha " ++ alpha; Option_edit caption labels value = this.Alpha labels?value; } alpha_widget = Alpha "On"; Antialias value = class Toggle "Antialias" value { _flag = "-antialias", value = "+antialias"; Toggle_edit caption value = this.Antialias value; } antialias_widget = Antialias true; Builtin builtin = class Option_string "Builtin" [ // See http://www.imagemagick.org/script/formats.php "rose:", "logo:", "wizard:", "granite:", "netscape:" ] builtin { _flag = builtin; Option_edit caption labels value = this.Builtin labels?value; } builtin_widget = Builtin "rose:"; channels_widget = class { // FIXME? Can we grey-out alpha when we have no alpha channel, // show CMY(K) instead of RGB(K) etc? // Yes, perhaps we can create different widgets for RGB, RGBA, CMY, CMYK, CMYA, CMYKA. ChanR valueR = class Toggle "Red" valueR { _flag = "R", valueR = ""; Toggle_edit caption valueR = this.ChanR valueR; } channelR = ChanR true; ChanG valueG = class Toggle "Green" valueG { _flag = "G", valueG = ""; Toggle_edit caption valueG = this.ChanG valueG; } channelG = ChanG true; ChanB valueB = class Toggle "Blue" valueB { _flag = "B", valueB = ""; Toggle_edit caption valueB = this.ChanB valueB; } channelB = ChanB true; ChanK valueK = class Toggle "Black" valueK { _flag = "K", valueK = ""; Toggle_edit caption valueK = this.ChanK valueK; } channelK = ChanK true; ChanA valueA = class Toggle "Alpha" valueA { _flag = "A", valueA = ""; Toggle_edit caption valueA = this.ChanA valueA; } channelA = ChanA false; ChanSy valueSy = class Toggle "Sync" valueSy { _flag = ",sync", valueSy = ""; Toggle_edit caption valueSy = this.ChanSy valueSy; } channelSy = ChanSy true; _rgbka = concat [channelR._flag, channelG._flag, channelB._flag, channelK._flag, channelA._flag ]; _flag = "", _rgbka == "" || !has_channel = concat [ "-channel ", _rgbka, channelSy._flag ]; } ch_widget = channels_widget; Colorspace colsp = class Option_string "Colorspace" [ "CIELab", "CMY", "CMYK", "Gray", "HCL", "HCLp", "HSB", "HSI", "HSL", "HSV", "HWB", "Lab", "LCH", "LCHab", "LCHuv", "LMS", "Log", "Luv", "OHTA", "Rec601Luma", "Rec601YCbCr", "Rec709Luma", "Rec709YCbCr", "RGB", "scRGB", "sRGB", "Transparent", "XYZ", "YCbCr", "YDbDr", "YCC", "YIQ", "YPbPr", "YUV" ] colsp { _flag = colsp; Option_edit caption labels value = this.Colorspace labels?value; } colorspace_widget = Colorspace "sRGB"; Compose comp = class Option_string "Compose method" [ "Atop", "Blend", "Blur", "Bumpmap", "ChangeMask", "Clear", "ColorBurn", "ColorDodge", "Colorize", "CopyBlack", "CopyBlue", "CopyCyan", "CopyGreen", "Copy", "CopyMagenta", "CopyOpacity", "CopyRed", "CopyYellow", "Darken", "DarkenIntensity", "DivideDst", "DivideSrc", "Dst", "Difference", "Displace", "Dissolve", "Distort", "DstAtop", "DstIn", "DstOut", "DstOver", "Exclusion", "HardLight", "Hue", "In", "Lighten", "LightenIntensity", "LinearBurn", "LinearDodge", "LinearLight", "Luminize", "Mathematics", "MinusDst", "MinusSrc", "Modulate", "ModulusAdd", "ModulusSubtract", "Multiply", "None", "Out", "Overlay", "Over", "PegtopLight", "PinLight", "Plus", "Replace", "Saturate", "Screen", "SoftLight", "Src", "SrcAtop", "SrcIn", "SrcOut", "SrcOver", "VividLight", "Xor" ] comp { _flag = "-compose " ++ comp; Option_edit caption labels value = this.Compose labels?value; } compose_widget = Compose "Over"; // FIXME: Some compose mehods (Displace, Distort, Mathematics) need a string. // FIXME: we could use a class that does both -compose and -intensity, for methods LightenIntensity, DarkenIntensity, CopyOpacity, CopyBlack coordinate_widget = class { _vislevel = 3; x = Expression "X" 0; y = Expression "Y" 0; _flag = concat [print x.expr, ",", print y.expr]; }; Distort distort = class Option_string "Distort" [ "Affine", "AffineProjection", "ScaleRotateTranslate", "SRT", "Perspective", "PerspectiveProjection", "BilinearForward", "BilinearReverse", "Polynomial", "Arc", "Polar", "DePolar", "Barrel", "BarrelInverse", "Shepards", "Resize" ] distort { _flag = distort; Option_edit caption labels value = this.Distort labels?value; } distort_widget = Distort "SRT"; Dither dither = class Option_string "Dither" [ "None", "FloydSteinberg", "Riemersma" ] dither { _flag = "-dither " ++ dither; Option_edit caption labels value = this.Dither labels?value; } dither_widget = Dither "FloydSteinberg"; Evaluate eval = class Option_string "Evaluate operation" [ "Abs", "Add", "AddModulus", "And", "Cos", "Cosine", "Divide", "Exp", "Exponential", "GaussianNoise", "ImpulseNoise", "LaplacianNoise", "LeftShift", "Log", "Max", "Mean", "Median", "Min", "MultiplicativeNoise", "Multiply", "Or", "PoissonNoise", "Pow", "RightShift", "Set", "Sin", "Sine", "Subtract", "Sum", "Threshold", "ThresholdBlack", "ThresholdWhite", "UniformNoise", "Xor" ] eval { _flag = "-evaluate " ++ eval; Option_edit caption labels value = this.Evaluate labels?value; } evaluate_widget = Evaluate "Add"; Filter filt = class Option_string "Filter" [ "default", "Bartlett", "Blackman", "Bohman", "Box", "Catrom", "Cosine", "Cubic", "Gaussian", "Hamming", "Hann", "Hermite", "Jinc", "Kaiser", "Lagrange", "Lanczos", "Lanczos2", "Lanczos2Sharp", "LanczosRadius", "LanczosSharp", "Mitchell", "Parzen", "Point", "Quadratic", "Robidoux", "RobidouxSharp", "Sinc", "SincFast", "Spline", "Triangle", "Welch" ] filt { _flag = if filt == "default" then "" else "-filter " ++ filt; Option_edit caption labels value = this.Filter labels?value; } filter_widget = Filter "default"; Function func = class Option_string "Function" [ "Polynomial", "Sinusoid", "Arcsin", "Arctan" ] func { _flag = func; Option_edit caption labels value = this.Function labels?value; } function_widget = Function "Polynomial"; // "Polynomial (a[n], a[n-1], ... a[1], a[0])", // "Sinusoid (freq, phase, amp, bias)", // "Arcsin (width, centre, range, bias)", // "Arctan (slope, centre, range, bias)" Gravity gravity = class Option_string "Gravity" [ "None", "Center", "East", "Forget", "NorthEast", "North", "NorthWest", "SouthEast", "South", "SouthWest", "West", "Static" ] gravity { _flag = "-gravity " ++ gravity; Option_edit caption labels value = this.Gravity labels?value; } gravity_widget = Gravity "Center"; ImageType imagetype = class Option_string "Image type" [ "Bilevel", "ColorSeparation", "ColorSeparationAlpha", "ColorSeparationMatte", "Grayscale", "GrayscaleAlpha", "GrayscaleMatte", "Optimize", "Palette", "PaletteBilevelAlpha", "PaletteBilevelMatte", "PaletteAlpha", "PaletteMatte", "TrueColorAlpha", "TrueColorMatte", "TrueColor" ] imagetype { _flag = "-type " ++ imagetype; Option_edit caption labels value = this.ImageType labels?value; } imagetype_widget = ImageType "TrueColor"; Intensity intensity = class Option_string "Intensity (gray conversion)" [ "Average", "Brightness", "Lightness", "MS", "Rec601Luma", "Rec601Luminance", "Rec709Luma", "Rec709Luminance", "RMS" ] intensity { _flag = "-intensity " ++ intensity, has_intensity = ""; Option_edit caption labels value = this.Intensity labels?value; } intensity_widget = Intensity "Rec709Luminance"; Interpolate interp = class Option_string "Interpolate" [ "default", "Average", "Average4", "Average9", "Average16", "Background", "Bilinear", "Blend", "Integer", "Mesh", "Nearest", "NearestNeighbor", "Spline" ] interp { _flag = if interp == "default" then "" else "-interpolate " ++ interp; Option_edit caption labels value = this.Interpolate labels?value; } interpolate_widget = Interpolate "default"; Kernel kernel = class Option_string "Kernel" [ "Unity", "Gaussian", "DoG", "LoG", "Blur", "Comet", "Binomial", "Laplacian", "Sobel", "FreiChen", "Roberts", "Prewitt", "Compass", "Kirsch", "Diamond", "Square", "Rectangle", "Disk", "Octagon", "Plus", "Cross", "Ring", "Peaks", "Edges", "Corners", "Diagonals", "LineEnds", "LineJunctions", "Ridges", "ConvexHull", "ThinSe", "Skeleton", "Chebyshev", "Manhattan", "Octagonal", "Euclidean" // FIXME: custom kernel ] kernel { _flag = kernel; Option_edit caption labels value = this.Kernel labels?value; } kernel_widget = Kernel "Unity"; ModColSp msp = class Option_string "modulate colorspace" [ "HCL", "HCLp", "HSB", "HSI", "HSL", "HSV", "HWB", "LCH" ] msp { _flag = "-set option:modulate:colorspace " ++ msp; Option_edit caption labels value = this.ModColSp labels?value; } ModColSp_widget = ModColSp "HSL"; MorphMeth morph = class Option_string "Method" [ "Correlate", "Convolve", "Dilate", "Erode", "Close", "Open", "DilateIntensity", "ErodeIntensity", "CloseIntensity", "OpenIntensity", "Smooth", "EdgeOut", "EdgeIn", "Edge", "TopHat", "BottomHat", "HitAndMiss", "Thinning", "Thicken", "Distance", "IterativeDistance" ] morph { _flag = morph; Option_edit caption labels value = this.MorphMeth labels?value; } morphmeth_widget = MorphMeth "Dilate"; Noise noise = class Option_string "Noise" [ "Gaussian", "Impulse", "Laplacian", "Multiplicative", "Poisson", "Random", "Uniform" ] noise { _flag = "+noise " ++ noise; Option_edit caption labels value = this.Noise labels?value; } noise_widget = Noise "Gaussian"; Pattern pattern = class Option_string "Noise" [ // See http://www.imagemagick.org/script/formats.php "bricks", "checkerboard", "circles", "crosshatch", "crosshatch30", "crosshatch45", "gray0", "gray5", "gray10", "gray15", "gray20", "gray25", "gray30", "gray35", "gray40", "gray45", "gray50", "gray55", "gray60", "gray65", "gray70", "gray75", "gray80", "gray85", "gray90", "gray95", "gray100", "hexagons", "horizontal", "horizontal2", "horizontal3", "horizontalsaw", "hs_bdiagonal", "hs_cross", "hs_diagcross", "hs_fdiagonal", "hs_horizontal", "hs_vertical", "left30", "left45", "leftshingle", "octagons", "right30", "right45", "rightshingle", "smallfishscales", "vertical", "vertical2", "vertical3", "verticalbricks", "verticalleftshingle", "verticalrightshingle", "verticalsaw" ] pattern { _flag = "pattern:" ++ pattern; Option_edit caption labels value = this.Pattern labels?value; } pattern_widget = Pattern "bricks"; ResizeType resizet = class Option_string "Resize type" [ "resize", "scale", "sample", "adaptive-resize" ] resizet { _flag = resizet; Option_edit caption labels value = this.ResizeType labels?value; } ResizeType_widget = ResizeType "resize"; Size_widget = class { _vislevel = 3; width = Expression "Width (pixels)" 64; height = Expression "Height (pixels)" 64; _flag = "-size " ++ print width.expr ++ "x" ++ print height.expr; }; StatType statt = class Option_string "Statistic type" [ "Gradient", "Maximum", "Mean", "Median", "Minimum", "Mode", "Nonpeak", "StandardDeviation" ] statt { _flag = statt; Option_edit caption labels value = this.StatType labels?value; } StatType_widget = StatType "Mean"; VirtualPixel vp = class Option_string "Virtual pixel" [ "Background", "Black", "CheckerTile", "Dither", "Edge", "Gray", "HorizontalTile", "HorizontalTileEdge", "Mirror", "None", "Random", "Tile", "Transparent", "VerticalTile", "VerticalTileEdge", "White" ] vp { _flag = "-virtual-pixel " ++ vp; _isBackground = (vp == "Background"); Option_edit caption labels value = this.VirtualPixel labels?value; } VirtualPixel_widget = VirtualPixel "Edge"; VirtualPixelBack_widget = class { virtpix = Magick.VirtualPixel_widget; background = Magick.background_widget; _flag = (if virtpix._isBackground then (background._flag ++ " ") else "") ++ virtpix._flag; } Geometry_widget = class { _vislevel = 3; x = Expression "X" 0; y = Expression "Y" 0; hoffset = Expression "Horizontal offset" 0; voffset = Expression "Vertical offset" 0; _flag = concat [print x.expr, "x", print y.expr, format hoffset, format voffset] { // print an offset ... we want '+' in front of +ve strings format offset = concat ["+", print offset.expr], offset.expr >= 0 = print offset.expr; } }; AnnotGeometry_widget = class { _vislevel = 3; shearX = Expression "shear X (degrees)" 0; shearY = Expression "shear Y (degrees)" 0; hoffset = Expression "Horizontal offset" 0; voffset = Expression "Vertical offset" 0; _flag = concat [print shearX.expr, "x", print shearY.expr, format hoffset, format voffset] { // print an offset ... we want '+' in front of +ve strings format offset = concat ["+", print offset.expr], offset.expr >= 0 = print offset.expr; } }; OffsetGeometry_widget = class { _vislevel = 3; hoffset = Expression "Horizontal offset" 0; voffset = Expression "Vertical offset" 0; _flag = concat [format hoffset, format voffset] { // print an offset ... we want '+' in front of +ve strings format offset = concat ["+", print offset.expr], offset.expr >= 0 = print offset.expr; } }; WhxyGeometry_widget = class { _vislevel = 3; x = Expression "Width" 0; y = Expression "Height" 0; hoffset = Expression "Horizontal offset" 0; voffset = Expression "Vertical offset" 0; _flag = concat [print x.expr, "x", print y.expr, format hoffset, format voffset] { // print an offset ... we want '+' in front of +ve strings format offset = concat ["+", print offset.expr], offset.expr >= 0 = print offset.expr; } }; FrameGeometry_widget = class { _vislevel = 3; x = Expression "Width" 0; y = Expression "Height" 0; outbev = Expression "Outer bevel thickness" 0; inbev = Expression "Inner bevel thickness" 0; _flag = concat [print x.expr, "x", print y.expr, format outbev, format inbev] { // print an offset ... we want '+' in front of +ve strings format offset = concat ["+", print offset.expr], offset.expr >= 0 = print offset.expr; } }; Font_widget = class { _vislevel = 3; family = Option_string "Family" [ "Arial", "ArialBlack", "AvantGarde", "BitstreamCharter", "Bookman", "CenturySchoolbook", "ComicSansMS", "Courier", "CourierNew", "DejaVuSans", "DejaVuSansMono", "DejaVuSerif", "Dingbats", "FreeMono", "FreeSans", "FreeSerif", "Garuda", "Georgia", "Helvetica", "HelveticaNarrow", "Impact", "LiberationMono", "LiberationSans", "LiberationSerif", "NewCenturySchlbk", "Palatino", "Purisa", "Symbol", "Times", "TimesNewRoman", "Ubuntu", "Verdana", "Webdings" ] "Arial"; style = Option_string "Style" [ "Any", "Italic", "Normal", "Oblique" ] "Normal"; weight = Scale "Weight" 1 800 400; size = Scale "Point size" 1 100 12; stretch = Option_string "Stretch" [ "Any", "Condensed", "Expanded", "ExtraCondensed", "ExtraExpanded", "Normal", "SemiCondensed", "SemiExpanded", "UltraCondensed", "UltraExpanded" ] "Normal"; _flag = join_sep " " [ "-family", family.item, "-weight", print weight.value, "-pointsize", print size.value, "-style", style.item, "-stretch", stretch.item]; } } nip2-8.7.0/share/nip2/compat/8.4/_Object.def0000644000175000017500000002600513224651032015113 00000000000000/* Lots of little arg checks. Global for convenience. */ check_any = [(const true), _ "any"]; check_bool = [is_bool, _ "boolean"]; check_real = [is_real, _ "real"]; check_ureal = [is_ureal, _ "unsigned real"]; check_preal = [is_preal, _ "positive real"]; check_list = [is_list, _ "list"]; check_real_list = [is_real_list, _ "list of real"]; check_string = [is_string, _ "string"]; check_string_list = [is_string_list, _ "list of string"]; check_int = [is_int, _ "integer"]; check_uint = [is_uint, _ "unsigned integer"]; check_pint = [is_pint, _ "positive integer"]; check_matrix = [is_matrix, _ "rectangular array of real"]; check_matrix_display = [Matrix_display.is_display, _ "0|1|2|3"]; check_image = [is_image, _ "image"]; check_xy_list = [is_xy_list, _ "list of form [[1, 2], [3, 4], [5, 6], ...]"]; check_instance name = [is_instanceof name, name]; check_Image = check_instance "Image"; check_Matrix = [is_Matrix, _ "Matrix"]; check_colour_space = [is_colour_space, join_sep "|" Image_type.colour_spaces.names]; check_rectangular = [is_rectangular, _ "rectangular [[*]]"]; check_Guide = [is_Guide, _ "HGuide|VGuide"]; check_Colour = check_instance (_ "Colour"); check_Mark = check_instance (_ "Mark"); /* Check a set of args to a class. Two members to look at: _check_args and * _check_all. * * - each line in _check_args is [arg, "arg name", [test_fn, "arg type"]] * same number of lines as there are args * * stuff like "arg 2 must be real" * * - each line in _check_all is [test, "description"] * any number of lines * * stuff like "to must be greater than from" * * generate an error dialog with a helpful message on failure. * * Have as a separate function to try to keep the size of _Object down. */ check_args x = error message, badargs != [] || badalls != [] = x { argcheck = x._check_args; allcheck = x._check_all; // indent string indent = " "; // test for a condition in a check line fails test_fail x = ! x?0; // set of failed argcheck indexes badargs = map (extract 1) (filter test_fail (zip2 (map testarg argcheck) [0..])) { testarg x = x?2?0 x?0; } // set of failed allcheck indexes badalls = map (extract 1) (filter test_fail (zip2 (map hd allcheck) [0..])); // the error message message = _ "bad properties for " ++ "\"" ++ x.name ++ "\"\n" ++ argmsg ++ allmsg ++ "\n" ++ _ "where" ++ "\n" ++ arg_types ++ extra; // make the failed argcheck messages ... eg. ""value" should be // real, you passed " etc. argmsg = concat (map fmt badargs) { fmt n = indent ++ "\"" ++ argcheck?n?1 ++ "\"" ++ _ " should be of type " ++ argcheck?n?2?1 ++ ", " ++ _ "you passed" ++ ":\n" ++ indent ++ indent ++ print argcheck?n?0 ++ "\n"; } // make the failed allcheck messages ... eg "condition failed: // x < y" ... don't make a message if any typechecks have // failed, as we'll probably error horribly allmsg = [], badargs != [] = concat (map fmt badalls) ++ _ "you passed" ++ "\n" ++ concat (map fmt_arg argcheck) { fmt n = _ "condition failed" ++ ": " ++ allcheck?n?1 ++ "\n"; fmt_arg l = indent ++ l?1 ++ " = " ++ print l?0 ++ "\n"; } // make arg type notes arg_types = join_sep "\n" (map fmt argcheck) { fmt l = indent ++ l?1 ++ " is of type " ++ l?2?1; } // extra bit at the bottom, if we have any conditions extra = [], allcheck == [] = "\n" ++ _ "and" ++ "\n" ++ all_desc; // make a list of all the allcheck descriptions, with a few // spaces in front all_desc_list = map (join indent @ extract 1) allcheck; // join em up to make a set of condition notes all_desc = join_sep "\n" all_desc_list; } /* Operator overloading stuff. */ Operator_type = class { ARITHMETIC = 1; // eg. add RELATIONAL = 2; // eg. less COMPOUND = 3; // eg. max/mean/etc. COMPOUND_REWRAP = 4; // eg. transpose } Operator op_name fn type symmetric = class { } /* Form the converse of an Operator. */ oo_converse op = Operator (converse_name op.op_name) (converse op.fn) op.type op.symmetric { converse_name x = init x, last x == last "'" = x ++ "'"; } /* Given an operator name, look up the definition. */ oo_binary_lookup op_name = matches?0, matches != [] = error (_ "unknown binary operator" ++ ": " ++ print op_name) { operator_table = [ Operator "add" add Operator_type.ARITHMETIC true, Operator "subtract" subtract Operator_type.ARITHMETIC false, Operator "remainder" remainder Operator_type.ARITHMETIC false, Operator "power" power Operator_type.ARITHMETIC false, Operator "subscript" subscript Operator_type.ARITHMETIC false, Operator "left_shift" left_shift Operator_type.ARITHMETIC false, Operator "right_shift" right_shift Operator_type.ARITHMETIC false, Operator "divide" divide Operator_type.ARITHMETIC false, Operator "join" join Operator_type.ARITHMETIC false, Operator "multiply" multiply Operator_type.ARITHMETIC true, Operator "logical_and" logical_and Operator_type.ARITHMETIC true, Operator "logical_or" logical_or Operator_type.ARITHMETIC true, Operator "bitwise_and" bitwise_and Operator_type.ARITHMETIC true, Operator "bitwise_or" bitwise_or Operator_type.ARITHMETIC true, Operator "eor" eor Operator_type.ARITHMETIC true, Operator "comma" comma Operator_type.ARITHMETIC false, Operator "if_then_else" if_then_else Operator_type.ARITHMETIC false, Operator "equal" equal Operator_type.RELATIONAL true, Operator "not_equal" not_equal Operator_type.RELATIONAL true, Operator "less" less Operator_type.RELATIONAL false, Operator "less_equal" less_equal Operator_type.RELATIONAL false ]; matches = filter test_name operator_table; test_name x = x.op_name == op_name; } /* Given an operator name, look up a function that implements that * operator. */ oo_unary_lookup op_name = matches?0, matches != [] = error (_ "unknown unary operator" ++ ": " ++ print op_name) { operator_table = [ /* Operators. */ Operator "cast_signed_char" cast_signed_char Operator_type.ARITHMETIC false, Operator "cast_unsigned_char" cast_unsigned_char Operator_type.ARITHMETIC false, Operator "cast_signed_short" cast_signed_short Operator_type.ARITHMETIC false, Operator "cast_unsigned_short" cast_unsigned_short Operator_type.ARITHMETIC false, Operator "cast_signed_int" cast_signed_int Operator_type.ARITHMETIC false, Operator "cast_unsigned_int" cast_unsigned_int Operator_type.ARITHMETIC false, Operator "cast_float" cast_float Operator_type.ARITHMETIC false, Operator "cast_double" cast_double Operator_type.ARITHMETIC false, Operator "cast_complex" cast_complex Operator_type.ARITHMETIC false, Operator "cast_double_complex" cast_double_complex Operator_type.ARITHMETIC false, Operator "unary_minus" unary_minus Operator_type.ARITHMETIC false, Operator "negate" negate Operator_type.RELATIONAL false, Operator "complement" complement Operator_type.ARITHMETIC false, Operator "unary_plus" unary_plus Operator_type.ARITHMETIC false, /* Built in projections. */ Operator "re" re Operator_type.ARITHMETIC false, Operator "im" im Operator_type.ARITHMETIC false, Operator "hd" hd Operator_type.ARITHMETIC false, Operator "tl" tl Operator_type.ARITHMETIC false, /* Maths builtins. */ Operator "sin" sin Operator_type.ARITHMETIC false, Operator "cos" cos Operator_type.ARITHMETIC false, Operator "tan" tan Operator_type.ARITHMETIC false, Operator "asin" asin Operator_type.ARITHMETIC false, Operator "acos" acos Operator_type.ARITHMETIC false, Operator "atan" atan Operator_type.ARITHMETIC false, Operator "log" log Operator_type.ARITHMETIC false, Operator "log10" log10 Operator_type.ARITHMETIC false, Operator "exp" exp Operator_type.ARITHMETIC false, Operator "exp10" exp10 Operator_type.ARITHMETIC false, Operator "ceil" ceil Operator_type.ARITHMETIC false, Operator "floor" floor Operator_type.ARITHMETIC false ]; matches = filter test_name operator_table; test_name x = x.op_name == op_name; } /* Find the matching methods in a method table. */ oo_method_lookup table = map (extract 0) (filter (extract 1) table); /* A binary op: a is a class, b may be a class ... eg. "add" a b two obvious ways to find a method: - a.oo_binary_search "add" (+) b - b.oo_binary_search "add'" (converse (+)) a, is_class b if these fail but op is a symmetric operator (eg. a + b == b + a), we can also try reversing the args - a.oo_binary_search "add'" (converse (+)) b - b.oo_binary_search "add" (+) a, is_class b if those fail as well, but this is ==, do pointer equals as a fallback */ oo_binary_function op a b = matches1?0, matches1 != [] = matches2?0, is_class b && matches2 != [] = matches3?0, op.symmetric && matches3 != [] = matches4?0, op.symmetric && is_class b && matches4 != [] = pointer_equal a b, op.op_name == "equal" || op.op_name == "equal'" = not_pointer_equal a b, op.op_name == "not_equal" || op.op_name == "not_equal'" = error (_ "No method found for binary operator." ++ "\n" ++ _ "left" ++ " = " ++ print a ++ "\n" ++ _ "operator" ++ " = " ++ op.op_name ++ "\n" ++ _ "right" ++ " = " ++ print b) { matches1 = oo_method_lookup (a.oo_binary_table op b); matches2 = oo_method_lookup (b.oo_binary_table (oo_converse op) a); matches3 = oo_method_lookup (a.oo_binary_table (oo_converse op) b); matches4 = oo_method_lookup (b.oo_binary_table op a); } /* A binary op: a is not a class, b is a class ... eg. "subtract" a b only one way to find a method: - b.oo_binary_search "subtract'" (converse (-)) a if this fails but op is a symmetric operator (eg. a + b == b + a), we can try reversing the args - b.oo_binary_search "add" (+) a, is_class b if that fails as well, but this is ==, do pointer equals as a fallback */ oo_binary'_function op a b = matches1?0, matches1 != [] = matches2?0, op.symmetric && matches2 != [] = pointer_equal a b, op.op_name == "equal" || op.op_name == "equal'" = not_pointer_equal a b, op.op_name == "not_equal" || op.op_name == "not_equal'" = error (_ "No method found for binary operator." ++ "\n" ++ _ "left" ++ " = " ++ print a ++ "\n" ++ _ "operator" ++ " = " ++ op.op_name ++ "\n" ++ _ "right" ++ " = " ++ print b) { matches1 = oo_method_lookup (b.oo_binary_table (oo_converse op) a); matches2 = oo_method_lookup (b.oo_binary_table op a); } oo_unary_function op x = matches?0, matches != [] = error (_ "No method found for unary operator." ++ "\n" ++ _ "operator" ++ " = " ++ op.op_name ++ "\n" ++ _ "argument" ++ " = " ++ print x) { matches = oo_method_lookup (x.oo_unary_table op); } /* Base class for nip's built-in classes ... base check function, base * operator overload functions. */ _Object = class { check = check_args this; // these should always be defined _check_args = []; _check_all = []; /* Operator overloading stuff. */ oo_binary op x = oo_binary_function (oo_binary_lookup op) this x; oo_binary' op x = oo_binary'_function (oo_binary_lookup op) x this; oo_unary op = oo_unary_function (oo_unary_lookup op) this; oo_binary_table op x = []; oo_unary_table op = []; } nip2-8.7.0/share/nip2/compat/8.4/Magick.def0000644000175000017500000014112713224651032014744 00000000000000/* ImageMagick operations edited by Alan Gibson (aka "snibgo"; snibgo at earthling dot net). 1-Apr-2014 Minor corrections to Geometry_widget and Alpha. Added loads of widgets and Menuactions. Not fully tested. 5-Apr-2014 Many more menu actions. Reorganised Magick menu. 10-Apr-2014 Many more menu actions. 11-Apr-2014 jcupitt Split to separate Magick.def 13-Apr-2014 snibgo Put "new image" items into sub-menu. New class VirtualPixlBack. 17-Apr-2014 snibgo Many small changes. A few new menu options. Created sub-menu for multi-input operations. 3-May-2014 jcupitt Put quotes around ( in shadow to help unix Last update: 17-Apr-2014. For details of ImageMagick operations, see http://www.imagemagick.org/script/command-line-options.php etc. */ // We don't need Noop. /*=== Magick_noop_item = class Menuaction "_Noop" "no operation" { action x = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "\"%s\"" ]; _result = Magick.system command x; } } ===*/ Magick_testPar_item = class Menuaction "_TestPar" "no operation" { action x = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "( +clone ) +append ", "\"%s\"" ]; _result = Magick.system command x; } } /* Removed Read_item and Write_item, much better to use nip2 load/save image. * Plus they can load all libMagick formats anyway. */ // Put "new image" items into sub-menu Magick_NewImageMenu_item = class Menupullright "_New image" "make a new image" { Magick_newcanvas_item = class Menuaction "_Solid colour" "make image of solid colour" { action = class _result { _vislevel = 3; size = Magick.Size_widget; colour = Magick.generalcol_widget; command = Magick.command [ size._flag, "\"canvas:" ++ colour._flag ++ "\"", "\"%s\"" ]; _result = Magick.system0 command; } } Magick_builtin_item = class Menuaction "_Built-in image" "create a built-in image" { action = class _result { _vislevel = 3; builtin = Magick.builtin_widget; command = Magick.command [ builtin._flag, "\"%s\"" ]; _result = Magick.system0 command; } } Magick_gradient_item = class Menuaction "_Gradient" "make a linear gradient between two colours" { action = class _result { _vislevel = 3; size = Magick.Size_widget; topColour = Magick.generalcol_widget; bottomColour = Magick.generalcol_widget; command = Magick.command [ size._flag, concat ["\"gradient:", topColour._flag, "-", bottomColour._flag, "\""], "\"%s\"" ]; _result = Magick.system0 command; } } Magick_hald_item = class Menuaction "_Hald-clut image" "create an identity hald-clut image" { action = class _result { _vislevel = 3; order = Expression "order" 8; command = Magick.command [ "hald:" ++ print order.expr, "\"%s\"" ]; _result = Magick.system0 command; } } Magick_pattern_item = class Menuaction "_Pattern" "create pattern" { action = class _result { _vislevel = 3; size = Magick.Size_widget; pattern = Magick.pattern_widget; command = Magick.command [ size._flag, pattern._flag, "\"%s\"" ]; _result = Magick.system0 command; } } Magick_plasma_item = class Menuaction "_Plasma image" "create plasma image" { action = class _result { _vislevel = 3; size = Magick.Size_widget; // FIXME? ColourA-ColourB. // FIXME? Allow plasma:fractal? command = Magick.command [ size._flag, "plasma:", "\"%s\"" ]; _result = Magick.system0 command; } } Magick_radialgradient_item = class Menuaction "_Radial gradient" "make a radial gradient between two colours" { action = class _result { _vislevel = 3; size = Magick.Size_widget; innerColour = Magick.generalcol_widget; outerColour = Magick.generalcol_widget; command = Magick.command [ size._flag, concat ["\"radial-gradient:", innerColour._flag, "-", outerColour._flag, "\""], "\"%s\"" ]; _result = Magick.system0 command; } } } // end Magick_NewImageMenu_item Magick_MultiMenu_item = class Menupullright "_Multiple inputs" "make an image from multiple images" { Magick_composite_item = class Menuaction "_Composite" "composite two images (without mask)" { action x y = class _result { _vislevel = 3; method = Magick.compose_widget; offsets = Magick.OffsetGeometry_widget; gravity = Magick.gravity_widget; command = Magick.command [ "\"%s\"", "\"%s\"", "-geometry", offsets._flag, gravity._flag, method._flag, "-composite", "\"%s\"" ]; _result = Magick.system2 command x y; } } Magick_compositeMask_item = class Menuaction "_Composite masked" "composite two images (with mask)" { action x y z = class _result { _vislevel = 3; method = Magick.compose_widget; offsets = Magick.OffsetGeometry_widget; gravity = Magick.gravity_widget; command = Magick.command [ "\"%s\"", "\"%s\"", "\"%s\"", "-geometry", offsets._flag, gravity._flag, method._flag, "-composite", "\"%s\"" ]; _result = Magick.system3 command x y z; } } // FIXME: other operations like remap that take another image as arguments are: // mask (pointless?), texture, tile (pointless?) // FIXME: operations that take a filename that isn't an image: // cdl, profile Magick_clut_item = class Menuaction "_Clut" "replace values using second image as colour look-up table" { action x y = class _result { _vislevel = 3; // FIXME: uses -intensity "when mapping greyscale CLUT image to alpha channel if set by -channels" command = Magick.command [ "\"%s\"", "\"%s\"", "-clut", "\"%s\"" ]; _result = Magick.system2 command x y; } } Magick_haldclut_item = class Menuaction "_Hald clut" "replace values using second image as Hald colour look-up table" { action x y = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "\"%s\"", "-hald-clut", "\"%s\"" ]; _result = Magick.system2 command x y; } } // Encipher and decipher: key files can be text or image files. Magick_encipher_item = class Menuaction "_Encipher/Decipher" "encipher or decipher an image image" { action x = class _result { _vislevel = 3; pathname = Pathname "Read key file" ""; isDecipher = Toggle "Decipher" false; command = Magick.command [ "\"%s\"", if pathname.value == "" then "" else ( ( if isDecipher then "-decipher " else "-encipher ") ++ ( "\"" ++ pathname.value ++ "\"" ) ), "\"%s\"" ]; _result = Magick.system command x; } } Magick_profile_item = class Menuaction "_Profile" "assigns/applies an ICC profile" { action x = class _result { _vislevel = 3; pathname1 = Pathname "Read profile file" ""; pathname2 = Pathname "Read profile file" ""; command = Magick.command [ "\"%s\"", if pathname1.value == "" then "" else ( "-profile " ++ "\"" ++ pathname1.value ++ "\""), if pathname2.value == "" then "" else ( "-profile " ++ "\"" ++ pathname2.value ++ "\""), "\"%s\"" ]; _result = Magick.system command x; } } Magick_remap_item = class Menuaction "_Remap" "reduce colours to those in another image" { action x y = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "-remap", "\"%s\"", "\"%s\"" ]; _result = Magick.system2 command x y; } } } // end Magick_MultiMenu_item Magick_image_type_item = class Menuaction "_Image Type" "change image type" { action x = class _result { _vislevel = 3; imagetype = Magick.imagetype_widget; command = Magick.command [ "\"%s\"", imagetype._flag, "\"%s\"" ]; _result = Magick.system command x; } } sep2 = Menuseparator; Magick_alpha_item = class Menuaction "_Alpha" "add/remove alpha channel" { action x = class _result { _vislevel = 3; alpha = Magick.alpha_widget; command = Magick.command [ "\"%s\"", alpha._flag, "\"%s\"" ]; _result = Magick.system command x; } } Magick_annotate_item = class Menuaction "_Annotate" "add text annotation" { action x = class _result { _vislevel = 3; text = Magick.text_widget; font = Magick.Font_widget; geometry = Magick.AnnotGeometry_widget; gravity = Magick.gravity_widget; foreground = Magick.foreground_widget; undercol = Magick.undercol_widget; antialias = Magick.antialias_widget; command = Magick.command [ "\"%s\"", font._flag, antialias._flag, gravity._flag, foreground._flag, undercol._flag, "-annotate", geometry._flag, "\"" ++ text.value ++ "\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_autoGamma_item = class Menuaction "_AutoGamma" "automatic gamma" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; command = Magick.command [ "\"%s\"", channels._flag, "-auto-gamma", "\"%s\"" ]; _result = Magick.system command x; } } Magick_autoLevel_item = class Menuaction "_AutoLevel" "automatic level" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; command = Magick.command [ "\"%s\"", channels._flag, "-auto-level", "\"%s\"" ]; _result = Magick.system command x; } } Magick_blurSharpMenu_item = class Menupullright "_Blur/Sharpen" "blur and sharpen" { Magick_adaptive_blur_item = class Menuaction "_Adaptive Blur" "blur less near edges" { action x = class _result { _vislevel = 3; intensity = Magick.intensity_widget; radius = Magick.blur_rad_widget; sigma = Magick.sigma_widget; channels = Magick.channels_widget; // note: adaptive-blur doesn't regard VP. command = Magick.command [ "\"%s\"", intensity._flag, channels._flag, "-adaptive-blur", print radius.value ++ "x" ++ print sigma.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_blur_item = class Menuaction "_Blur" "blur" { action x = class _result { _vislevel = 3; radius = Magick.blur_rad_widget; sigma = Magick.sigma_widget; channels = Magick.channels_widget; virtpixback = Magick.VirtualPixelBack_widget; command = Magick.command [ "\"%s\"", virtpixback._flag, channels._flag, "-blur", print radius.value ++ "x" ++ print sigma.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_gaussianBlur_item = class Menuaction "_Gaussian Blur" "blur with a Gaussian operator" { action x = class _result { _vislevel = 3; radius = Magick.blur_rad_widget; sigma = Magick.sigma_widget; channels = Magick.channels_widget; virtpixback = Magick.VirtualPixelBack_widget; command = Magick.command [ "\"%s\"", virtpixback._flag, channels._flag, "-gaussian-blur", print radius.value ++ "x" ++ print sigma.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_motionBlur_item = class Menuaction "_Motion Blur" "simulate motion blur" { action x = class _result { _vislevel = 3; radius = Magick.blur_rad_widget; sigma = Magick.sigma_widget; angle = Scale "angle" (-360) 360 0; channels = Magick.ch_widget; virtpixback = Magick.VirtualPixelBack_widget; command = Magick.command [ "\"%s\"", virtpixback._flag, channels._flag, "-motion-blur", print radius.value ++ "x" ++ print sigma.value ++ "+" ++ print angle.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_rotationalBlur_item = class Menuaction "_RotationalBlur" "blur around the centre" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; virtpixback = Magick.VirtualPixelBack_widget; angle = Scale "angle (degrees)" (-360) 360 20; command = Magick.command [ "\"%s\"", virtpixback._flag, channels._flag, "-radial-blur", print angle.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_selectiveBlur_item = class Menuaction "_Selective Blur" "blur where contrast is less than or equal to threshold" { action x = class _result { _vislevel = 3; intensity = Magick.intensity_widget; radius = Magick.blur_rad_widget; sigma = Magick.sigma_widget; threshold = Scale "Threshold (percent)" 0 100 50; channels = Magick.channels_widget; virtpixback = Magick.VirtualPixelBack_widget; command = Magick.command [ "\"%s\"", intensity._flag, virtpixback._flag, channels._flag, "-selective-blur", print radius.value ++ "x" ++ print sigma.value ++ "+" ++ print threshold.value ++ "%%", "\"%s\"" ]; _result = Magick.system command x; } } sep1 = Menuseparator; Magick_adaptive_sharpen_item = class Menuaction "_Adaptive Sharpen" "sharpen more near edges" { action x = class _result { _vislevel = 3; intensity = Magick.intensity_widget; radius = Magick.blur_rad_widget; sigma = Magick.sigma_widget; command = Magick.command [ "\"%s\"", intensity._flag, "-adaptive-sharpen", print radius.value ++ "x" ++ print sigma.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_sharpen_item = class Menuaction "_Sharpen" "sharpen" { action x = class _result { _vislevel = 3; radius = Magick.blur_rad_widget; sigma = Magick.sigma_widget; channels = Magick.channels_widget; virtpixback = Magick.VirtualPixelBack_widget; command = Magick.command [ "\"%s\"", virtpixback._flag, channels._flag, "-sharpen", print radius.value ++ "x" ++ print sigma.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_unsharpen_item = class Menuaction "_Unsharp" "sharpen with unsharp mask" { action x = class _result { _vislevel = 3; radius = Magick.blur_rad_widget; sigma = Magick.sigma_widget; channels = Magick.channels_widget; gain = Scale "Gain" (-10) 10 1; threshold = Scale "Threshold" 0 1 0.05; virtpixback = Magick.VirtualPixelBack_widget; command = Magick.command [ "\"%s\"", virtpixback._flag, channels._flag, "-unsharp", print radius.value ++ "x" ++ print sigma.value ++ "+" ++ print gain.value ++ "+" ++ print threshold.value, "\"%s\"" ]; _result = Magick.system command x; } } } // end BlurSharpMenu_item Magick_border_item = class Menuaction "_Border" "add border of given colour" { action x = class _result { _vislevel = 3; compose = Magick.compose_widget; width = Expression "Width" 3; bordercol = Magick.bordercol_widget; command = Magick.command [ "\"%s\"", compose._flag, bordercol._flag, "-border", print width.expr, "\"%s\"" ]; _result = Magick.system command x; } } Magick_brightCont_item = class Menuaction "_Brightness-contrast" "adjust the brightness and/or contrast" { action x = class _result { _vislevel = 3; bri = Scale "brightness" (-100) 100 0; con = Scale "contrast" (-100) 100 0; channels = Magick.channels_widget; command = Magick.command [ "\"%s\"", channels._flag, "-brightness-contrast", print bri.value ++ "x" ++ print con.value, "\"%s\"" ]; _result = Magick.system command x; } } // Note: canny requires ImageMagick 6.8.9-0 or later. Magick_canny_item = class Menuaction "_Canny" "detect a wide range of edges" { action x = class _result { _vislevel = 3; radius = Magick.blur_rad_widget; sigma = Magick.sigma_widget; lowPc = Scale "lower percent" 0 100 10; highPc = Scale "lower percent" 0 100 10; command = Magick.command [ "\"%s\"", "-canny", concat ["\"", print radius.value ++ "x" ++ print sigma.value ++ "+" ++ print lowPc.value ++ "%%+" ++ print highPc.value ++ "%%" ++ "\"" ], "\"%s\"" ]; _result = Magick.system command x; } } Magick_charcoal_item = class Menuaction "_Charcoal" "simulate a charcoal drawing" { action x = class _result { _vislevel = 3; intensity = Magick.intensity_widget; factor = Scale "factor" 0 50 1; command = Magick.command [ "\"%s\"", intensity._flag, "-charcoal", print factor.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_chop_item = class Menuaction "_Chop" "remove pixels from the interior" { action x = class _result { _vislevel = 3; gravity = Magick.gravity_widget; geometry = Magick.WhxyGeometry_widget; command = Magick.command [ "\"%s\"", gravity._flag, "-chop", geometry._flag, "\"%s\"" ]; _result = Magick.system command x; } } Magick_colorize_item = class Menuaction "_Colorize" "colorize by given amount" { action x = class _result { _vislevel = 3; foreground = Magick.foreground_widget; val = Scale "value" 0 100 100; command = Magick.command [ "\"%s\"", foreground._flag, "-colorize", print val.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_colors_item = class Menuaction "_Colors" "reduce number of colors" { action x = class _result { _vislevel = 3; treedepth = Expression "Treedepth" 8; dither = Magick.dither_widget; quantize = Magick.colorspace_widget; colors = Expression "Colours" 3; command = Magick.command [ "\"%s\"", "-quantize", quantize._flag, "-treedepth", print treedepth.expr, dither._flag, "-colors", print colors.expr, "\"%s\"" ]; _result = Magick.system command x; } } // FIXME: color-matrix? Magick_colorspace_item = class Menuaction "_Colourspace" "convert to arbitrary colourspace" { action x = class _result { _vislevel = 3; colsp = Magick.colorspace_widget; command = Magick.command [ "\"%s\"", "-colorspace", colsp._flag, "\"%s\"" ]; _result = Magick.system command x; } } Magick_colorspaceGray_item = class Menuaction "_Colourspace gray" "convert to gray using given intensity method" { action x = class _result { _vislevel = 3; intensity = Magick.intensity_widget; command = Magick.command [ "\"%s\"", intensity._flag, "-colorspace gray", "\"%s\"" ]; _result = Magick.system command x; } } Magick_contrast_item = class Menuaction "_Contrast" "increase or reduce the contrast" { action x = class _result { _vislevel = 3; isReduce = Toggle "reduce contrast" false; command = Magick.command [ "\"%s\"", (if isReduce then "+" else "-") ++ "contrast", "\"%s\"" ]; _result = Magick.system command x; } } Magick_contrastStretch_item = class Menuaction "_Contrast stretch" "stretches tones, making some black/white" { action x = class _result { _vislevel = 3; intensity = Magick.intensity_widget; channels = Magick.channels_widget; blk = Scale "percent to make black" 0 100 0; wht = Scale "percent to make white" 0 100 0; command = Magick.command [ "\"%s\"", intensity._flag, channels._flag, "-contrast-stretch", "\"" ++ print blk.value ++ "x" ++ print wht.value ++ "%%\"", "\"%s\"" ]; _result = Magick.system command x; } } // FIXME: convolve (bias, kernel) Magick_crop_item = class Menuaction "_Crop" "cut out a rectangular region" { action x = class _result { _vislevel = 3; gravity = Magick.gravity_widget; geometry = Magick.WhxyGeometry_widget; command = Magick.command [ "\"%s\"", gravity._flag, "-crop", geometry._flag, "+repage", "\"%s\"" ]; _result = Magick.system command x; } } Magick_deskew_item = class Menuaction "_Deskew" "straighten the image" { action x = class _result { _vislevel = 3; threshold = Scale "Threshold (percent)" 0 100 80; // FIXME: toggle auto-crop? command = Magick.command [ "\"%s\"", "-deskew", "\"" ++ print threshold.value ++ "%%\"", "+repage", "\"%s\"" ]; _result = Magick.system command x; } } Magick_despeckle_item = class Menuaction "_Despeckle" "reduce the speckles" { action x = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "-despeckle", "\"%s\"" ]; _result = Magick.system command x; } } Magick_distort_item = class Menuaction "_Distort" "distort using a method and arguments" { action x = class _result { _vislevel = 3; virtpixback = Magick.VirtualPixelBack_widget; distort = Magick.distort_widget; args = String "Arguments" "1,0"; isPlus = Toggle "Extend to show entire image" false; command = Magick.command [ "\"%s\"", virtpixback._flag, (if isPlus then "+" else "-") ++ "distort", distort._flag, args.value, "+repage", "\"%s\"" ]; _result = Magick.system command x; } } Magick_draw_item = class Menuaction "_Draw" "annotate with one or more graphic primitives" { action x = class _result { _vislevel = 3; foreground = Magick.foreground_widget; args = String "Arguments" "line 0,0 9,9 rectangle 10,10 20,20"; command = Magick.command [ "\"%s\"", foreground._flag, "-draw", concat ["\"", args.value, "\""], "\"%s\"" ]; _result = Magick.system command x; } } Magick_edge_item = class Menuaction "_Edge" "detect edges" { action x = class _result { _vislevel = 3; rad = Expression "Radius" 3; command = Magick.command [ "\"%s\"", "-edge", print rad.expr, "\"%s\"" ]; _result = Magick.system command x; } } Magick_emboss_item = class Menuaction "_Emboss" "emboss" { action x = class _result { _vislevel = 3; rad = Expression "Radius" 3; command = Magick.command [ "\"%s\"", "-emboss", print rad.expr, "\"%s\"" ]; _result = Magick.system command x; } } Magick_enhance_item = class Menuaction "_Enhance" "enhance a noisy image" { action x = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "-enhance", "\"%s\"" ]; _result = Magick.system command x; } } Magick_equalize_item = class Menuaction "_Equalize" "equalize the histogram" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; command = Magick.command [ "\"%s\"", channels._flag, "-equalize", "\"%s\"" ]; _result = Magick.system command x; } } Magick_evaluate_item = class Menuaction "_Evaluate" "evaluate an expression on each pixel channel" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; operation = Magick.evaluate_widget; val = Expression "value" 5; isPc = Toggle "Value is percent" false; command = Magick.command [ "\"%s\"", channels._flag, operation._flag, print val.expr ++ if isPc then "%%" else "", "\"%s\"" ]; _result = Magick.system command x; } } Magick_extent_item = class Menuaction "_Extent" "set the image size and offset" { action x = class _result { _vislevel = 3; background = Magick.background_widget; compose = Magick.compose_widget; gravity = Magick.gravity_widget; geometry = Magick.WhxyGeometry_widget; command = Magick.command [ "\"%s\"", compose._flag, background._flag, gravity._flag, "-extent", geometry._flag, "\"%s\"" ]; _result = Magick.system command x; } } Magick_FlipFlopMenu_item = class Menupullright "_Flip/flop" "flip/flop/transverse/transpose" { Magick_flip_item = class Menuaction "_Flip vertically" "mirror upside-down" { action x = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "-flip", "\"%s\"" ]; _result = Magick.system command x; } } Magick_flop_item = class Menuaction "_Flop horizontally" "mirror left-right" { action x = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "-flop", "\"%s\"" ]; _result = Magick.system command x; } } Magick_transpose_item = class Menuaction "_Transpose" "mirror along the top-left to bottom-right diagonal" { action x = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "-transpose +repage", "\"%s\"" ]; _result = Magick.system command x; } } Magick_transverse_item = class Menuaction "_Transverse" "mirror along the bottom-left to top-right diagonal" { action x = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "-transverse +repage", "\"%s\"" ]; _result = Magick.system command x; } } } // end Magick_FlipFlopMenu_item Magick_floodfill_item = class Menuaction "_Floodfill" "recolour neighbours that match" { action x = class _result { _vislevel = 3; foreground = Magick.foreground_widget; fuzz = Magick.fuzz_widget; coordinate = Magick.coordinate_widget; // -draw "color x,y floodfill" command = Magick.command [ "\"%s\"", foreground._flag, "-fuzz", "\"" ++ print fuzz.value ++ "%%\"", "-draw \" color", coordinate._flag, "floodfill \"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_frame_item = class Menuaction "_Frame" "surround with border or beveled frame" { action x = class _result { _vislevel = 3; border = Magick.bordercol_widget; compose = Magick.compose_widget; matte = Magick.mattecol_widget; geometry = Magick.FrameGeometry_widget; command = Magick.command [ "\"%s\"", compose._flag, border._flag, matte._flag, "-frame", geometry._flag, "\"%s\"" ]; _result = Magick.system command x; } } Magick_function_item = class Menuaction "_Function" "evaluate a function on each pixel channel" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; function = Magick.function_widget; // FIXME: explain values; use sensible defaults. values = String "values" "0,0,0,0"; command = Magick.command [ "\"%s\"", channels._flag, "-function", function._flag, values.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_fx_item = class Menuaction "_Fx" "apply a mathematical expression" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; interpolate = Magick.interpolate_widget; virtpixback = Magick.VirtualPixelBack_widget; args = String "Expression" "u*1/2"; command = Magick.command [ "\"%s\"", channels._flag, interpolate._flag, virtpixback._flag, "-fx", concat ["\"", args.value, "\""], "\"%s\"" ]; _result = Magick.system command x; } } Magick_gamma_item = class Menuaction "_Gamma" "apply a gamma correction" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; gamma = Magick.gamma_widget; command = Magick.command [ "\"%s\"", channels._flag, "-gamma", print gamma.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_gradient_item = class Menuaction "_Gradient" "apply a linear gradient" { action x = class _result { _vislevel = 3; colourA = Magick.generalcol_widget; colourB = Magick.generalcol_widget; position = Option "colourA is at" [ "top", "bottom", "left", "right", "top-left", "top-right", "bottom-left", "bottom-right"] 0; _baryArg = concat ["0,0,", colourA._flag, " 0,%%[fx:h-1],", colourB._flag], position.value == 0 = concat ["0,0,", colourB._flag, " 0,%%[fx:h-1],", colourA._flag], position.value == 1 = concat ["0,0,", colourA._flag, " %%[fx:w-1],0,", colourB._flag], position.value == 2 = concat ["0,0,", colourB._flag, " %%[fx:w-1],0,", colourA._flag], position.value == 3 = concat ["0,0,", colourA._flag, " %%[fx:w-1],%%[fx:h-1],", colourB._flag], position.value == 4 = concat ["%%[fx:w-1],0,", colourA._flag, " 0,%%[fx:h-1],", colourB._flag], position.value == 5 = concat ["%%[fx:w-1],0,", colourB._flag, " 0,%%[fx:h-1],", colourA._flag], position.value == 6 = concat ["0,0,", colourB._flag, " %%[fx:w-1],%%[fx:h-1],", colourA._flag], position.value == 7 = "dunno"; command = Magick.command [ "\"%s\"", "-sparse-color barycentric \"" ++ _baryArg ++ "\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_gradientCorn_item = class Menuaction "_Gradient corners" "apply a bilinear gradient between the corners" { action x = class _result { _vislevel = 3; colour_top_left = Magick.generalcol_widget; colour_top_right = Magick.generalcol_widget; colour_bottom_left = Magick.generalcol_widget; colour_bottom_right = Magick.generalcol_widget; command = Magick.command [ "\"%s\"", "-sparse-color bilinear \"" ++ "0,0," ++ colour_top_left._flag ++ ",%%[fx:w-1],0" ++ colour_top_right._flag ++ ",0,%%[fx:h-1]" ++ colour_bottom_left._flag ++ ",%%[fx:w-1],%%[fx:h-1]" ++ colour_bottom_right._flag ++ "\"", "+depth", "\"%s\"" ]; _result = Magick.system command x; } } Magick_histogram_item = class Menuaction "_Histogram" "make a histogram image" { action x = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "-define histogram:unique-colors=false histogram:" ++ "\"%s\"" ]; _result = Magick.system command x; } } Magick_implode_item = class Menuaction "_Implode" "implode pixels about the center" { action x = class _result { _vislevel = 3; factor = Scale "factor" 0 20 1; interpolate = Magick.interpolate_widget; // FIXME: virtual-pixel? command = Magick.command [ "\"%s\"", interpolate._flag, "-implode", print factor.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_level_item = class Menuaction "_Level" "adjust the level of channels" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; blk = Scale "black point" (-100) 200 0; wht = Scale "white point" (-100) 200 100; gam = Scale "gamma" 0 30 1; isPc = Toggle "Levels are percent" true; isInv = Toggle "Invert effect" false; command = Magick.command [ "\"%s\"", channels._flag, (if isInv then "+" else "-") ++ "level", "\"" ++ print blk.value ++ "," ++ print wht.value ++ (if isPc then "%%" else "") ++ "," ++ print gam.value ++ "\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_levelCols_item = class Menuaction "_Level colors" "adjust levels to given colours" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; colour_black = Magick.generalcol_widget; colour_white = Magick.generalcol_widget; isInv = Toggle "Invert effect" false; command = Magick.command [ "\"%s\"", channels._flag, (if isInv then "+" else "-") ++ "level-colors", "\"" ++ colour_black._flag ++ "," ++ colour_white._flag ++ "\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_linearStretch_item = class Menuaction "_Linear stretch" "stretches tones, making some black/white" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; blk = Scale "percent to make black" 0 100 0; wht = Scale "percent to make white" 0 100 0; command = Magick.command [ "\"%s\"", channels._flag, "-linear-stretch", "\"" ++ print blk.value ++ "x" ++ print wht.value ++ "%%\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_magnify_item = class Menuaction "_Magnify" "double the size of the image with pixel art scaling" { action x = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "-magnify", "\"%s\"" ]; _result = Magick.system command x; } } Magick_modulate_item = class Menuaction "_Modulate" "modulate brightness, saturation and hue" { action x = class _result { _vislevel = 3; modcolsp = Magick.ModColSp_widget; bright = Scale "brightness" 0 200 100; sat = Scale "saturation" 0 200 100; hue = Scale "hue" 0 200 100; command = Magick.command [ "\"%s\"", modcolsp._flag, "-modulate", print bright.value ++ "," ++ print sat.value ++ "," ++ print hue.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_monochrome_item = class Menuaction "_Monochrome" "transform to black and white" { action x = class _result { _vislevel = 3; // FIXME: also intensity? intensity = Magick.intensity_widget; treedepth = Expression "Treedepth" 8; dither = Magick.dither_widget; command = Magick.command [ "\"%s\"", intensity._flag, dither._flag, "-treedepth", print treedepth.expr, "-monochrome", "\"%s\"" ]; _result = Magick.system command x; } } Magick_morphology_item = class // See http://www.imagemagick.org/Usage/morphology/ Menuaction "_Morphology" "apply a morphological method" { action x = class _result { _vislevel = 3; method = Magick.morphmeth_widget; iter = Expression "Iterations (-1=repeat until done)" 1; kernel = Magick.kernel_widget; // FIXME: custom kernel eg "3x1+2+0:1,0,0" // width x height + offsx + offsy : {w*h values} // each value is 0.0 to 1.0 or "NaN" or "-" // kernel args, mostly float radius,scale. radius=0=default. default scale = 1.0 // but // ring takes: radius1, radius2, scale // rectangle and comet take: width x height + offsx + offsy // blur takes: radius x sigma // FIXME: for now, simply allow any string input. kernel_arg = String "Kernel arguments" ""; channels = Magick.channels_widget; command = Magick.command [ "\"%s\"", channels._flag, "-morphology", method._flag ++ ":" ++ print iter.expr, kernel._flag ++ (if kernel_arg.value == "" then "" else ":") ++ kernel_arg.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_negate_item = class Menuaction "_Negate" "negate" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; command = Magick.command [ "\"%s\"", channels._flag, "-negate", "\"%s\"" ]; _result = Magick.system command x; } } Magick_addNoise_item = class Menuaction "_add Noise" "add noise" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; attenuate = Scale "attenuate" 0 1.0 1.0; noise = Magick.noise_widget; command = Magick.command [ "\"%s\"", channels._flag, "-attenuate", print attenuate.value, noise._flag, "\"%s\"" ]; _result = Magick.system command x; } } Magick_normalize_item = class Menuaction "_Normalize" "normalize" { action x = class _result { _vislevel = 3; intensity = Magick.intensity_widget; channels = Magick.channels_widget; command = Magick.command [ "\"%s\"", intensity._flag, channels._flag, "-normalize", "\"%s\"" ]; _result = Magick.system command x; } } Magick_opaque_item = class Menuaction "_Opaque" "change this colour to the fill colour" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; fill = Magick.foreground_widget; changeColour = Magick.changeCol_widget; command = Magick.command [ "\"%s\"", fill._flag, channels._flag, "-fuzz", "\"" ++ print changeColour.fuzz.value ++ "%%\"", (if changeColour.nonMatch then "+" else "-") ++ "opaque", "\"" ++ changeColour.colour._flag ++ "\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_paint_item = class Menuaction "_Paint" "simulate an oil painting" { action x = class _result { _vislevel = 3; rad = Expression "radius" 10; command = Magick.command [ "\"%s\"", "-paint", print rad.expr, "\"%s\"" ]; _result = Magick.system command x; } } /*=== FIXME Bug; remove for now. Polaroid_item = class Menuaction "_Polaroid" "simulate a polaroid picture" { action x = class _result { _vislevel = 3; angle = Scale "angle" (-90) 90 20; command = Magick.command [ "\"%s\"", "-polaroid", print angle.value, "\"%s\"" ]; _result = Magick.system command x; } } ===*/ Magick_posterize_item = class Menuaction "_Posterize" "reduce to (n) levels per channel" { action x = class _result { _vislevel = 3; levels = Expression "levels" 3; command = Magick.command [ "\"%s\"", "-posterize", print levels.expr, "\"%s\"" ]; _result = Magick.system command x; } } Magick_raise_item = class Menuaction "_Raise" "lighten or darken image edges" { action x = class _result { _vislevel = 3; thk = Expression "Thickness" 3; command = Magick.command [ "\"%s\"", "-raise", print thk.expr, "\"%s\"" ]; _result = Magick.system command x; } } Magick_resize_item = class Menuaction "_Resize" "resize to given width and height" { action x = class _result { _vislevel = 3; filter = Magick.filter_widget; type = Magick.ResizeType_widget; width = Scale "Width" 1 100 10; height = Scale "Height" 1 100 10; isPc = Toggle "Width and height are percent" false; command = Magick.command [ "\"%s\"", filter._flag, "-" ++ type._flag, "\"" ++ print width.value ++ "x" ++ print height.value ++ (if isPc then "%%" else "!") ++ "\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_roll_item = class Menuaction "_Roll" "roll an image horizontally or vertically" { action x = class _result { _vislevel = 3; rollx = Expression "X" 3; rolly = Expression "Y" 3; command = Magick.command [ "\"%s\"", "-roll", (if rollx.expr >= 0 then "+" else "") ++ print rollx.expr ++ (if rolly.expr >= 0 then "+" else "") ++ print rolly.expr, "\"%s\"" ]; _result = Magick.system command x; } } Magick_rotate_item = class Menuaction "_Rotate" "rotate" { action x = class _result { _vislevel = 3; angle = Scale "angle (degrees)" (-360) 360 20; virtpixback = Magick.VirtualPixelBack_widget; command = Magick.command [ "\"%s\"", virtpixback._flag, "+distort", "SRT", print angle.value, "+repage", "\"%s\"" ]; _result = Magick.system command x; } } // FIXME: -segment, but cluster-threshold should be percentage of image area. Magick_sepia_item = class Menuaction "_Sepia tone" "simulate a sepia-toned photo" { action x = class _result { _vislevel = 3; threshold = Scale "Threshold (percent)" 0 100 80; command = Magick.command [ "\"%s\"", "-sepia-tone", "\"" ++ print threshold.value ++ "%%\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_shade_item = class Menuaction "_Shade" "shade with a distant light source" { action x = class _result { _vislevel = 3; azimuth = Scale "Azimuth (degrees)" (-360) 360 0; elevation = Scale "Elevation (degrees)" 0 90 45; command = Magick.command [ "\"%s\"", "-shade", print azimuth.value ++ "x" ++ print elevation.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_shadow_item = class Menuaction "_Shadow" "simulate a shadow" { action x = class _result { _vislevel = 3; shadowCol = Magick.generalcol_widget; opacity = Scale "Opacity (percent)" 0 100 75; sigma = Scale "Sigma" 0 30 2; // FIXME: make offsets a single widget? offsx = Scale "X-offset" (-20) 20 4; offsy = Scale "Y-offset" (-20) 20 4; arePc = Toggle "offsets are percentages" false; // FIXME: raw operation creates page offset, which vips dislikes. // So we take this futher, compositing with source. command = Magick.command [ "\"%s\"", "\"(\" +clone", "-background", "\"" ++ shadowCol._flag ++ "\"", "-shadow", concat [ "\"", print opacity.value, "x", print sigma.value, (if offsx.value >= 0 then "+" else ""), print offsx.value, (if offsy.value >= 0 then "+" else ""), print offsy.value, (if arePc then "%%" else ""), "\"" ], "\")\" +swap -background None -layers merge", "+repage", "\"%s\"" ]; _result = Magick.system command x; } } Magick_shave_item = class Menuaction "_Shave" "shave pixels from the edges" { action x = class _result { _vislevel = 3; width = Scale "Width" 0 50 10; height = Scale "Height" 0 50 10; isPc = Toggle "Width and height are percent" false; command = Magick.command [ "\"%s\"", "-shave", "\"" ++ print width.value ++ "x" ++ print height.value ++ (if isPc then "%%" else "") ++ "\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_shear_item = class Menuaction "_Shear" "shear along the x-axis and/or y-axis" { action x = class _result { _vislevel = 3; shearX = Expression "shear X (degrees)" 0; shearY = Expression "shear Y (degrees)" 0; background = Magick.background_widget; command = Magick.command [ "\"%s\"", background._flag, "-shear", print shearX.expr ++ "x" ++ print shearY.expr, "\"%s\"" ]; _result = Magick.system command x; } } Magick_sigmoid_item = class Menuaction "_Sigmoid" "increase or decrease mid-tone contrast sigmoidally" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; contrast = Scale "contrast" 0 30 3; midpoint = Scale "mid-point (percent)" 0 100 50; isInv = Toggle "Invert effect" false; command = Magick.command [ "\"%s\"", channels._flag, (if isInv then "+" else "-") ++ "sigmoidal-contrast", "\"" ++ print contrast.value ++ "x" ++ print midpoint.value ++ "%%\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_sketch_item = class Menuaction "_Sketch" "simulate a pencil sketch" { action x = class _result { _vislevel = 3; radius = Magick.blur_rad_widget; sigma = Magick.sigma_widget; angle = Scale "angle" (-360) 360 0; command = Magick.command [ "\"%s\"", "-sketch", print radius.value ++ "x" ++ print sigma.value ++ (if angle >= 0 then ("+" ++ print angle.value) else ""), "\"%s\"" ]; _result = Magick.system command x; } } Magick_solarize_item = class Menuaction "_Solarize" "negate all pixels above a threshold level" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; threshold = Scale "Threshold (percent)" 0 100 50; command = Magick.command [ "\"%s\"", channels._flag, "-solarize", "\"" ++ print threshold.value ++ "%%\"", "\"%s\"" ]; _result = Magick.system command x; } } // FIXME: -sparse-color needs abitrary list of {x,y,colour}. Magick_splice_item = class Menuaction "_Splice" "splice a colour into the image" { action x = class _result { _vislevel = 3; background = Magick.background_widget; gravity = Magick.gravity_widget; geometry = Magick.WhxyGeometry_widget; command = Magick.command [ "\"%s\"", background._flag, gravity._flag, "-splice", geometry._flag, "\"%s\"" ]; _result = Magick.system command x; } } Magick_spread_item = class Menuaction "_Spread" "displace pixels by random amount" { action x = class _result { _vislevel = 3; virtpixback = Magick.VirtualPixelBack_widget; amount = Expression "Amount (pixels)" 5; command = Magick.command [ "\"%s\"", virtpixback._flag, "-spread", print amount.expr, "\"%s\"" ]; _result = Magick.system command x; } } Magick_statistic_item = class Menuaction "_Statistic" "replace each pixel with statistic from neighbourhood" { action x = class _result { _vislevel = 3; width = Expression "Width" 5; height = Expression "Height" 5; statisticType = Magick.StatType_widget; command = Magick.command [ "\"%s\"", "-statistic", statisticType._flag, print width.expr ++ "x" ++ print height.expr, "\"%s\"" ]; _result = Magick.system command x; } } Magick_swirl_item = class Menuaction "_Swirl" "swirl around the centre" { action x = class _result { _vislevel = 3; angle = Magick.angle_widget; command = Magick.command [ "\"%s\"", "-swirl", print angle.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_thresholdMenu_item = class Menupullright "_Threshold" "make black or white" { Magick_threshold_item = class Menuaction "_Threshold" "apply black/white threshold" { action x = class _result { _vislevel = 3; intensity = Magick.intensity_widget; channels = Magick.channels_widget; threshold = Scale "Threshold (percent)" 0 100 50; command = Magick.command [ "\"%s\"", intensity._flag, channels._flag, "-threshold", "\"" ++ print threshold.value ++ "%%\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_blackThreshold_item = class Menuaction "_Black threshold" "where below threshold set to black" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; threshold = Scale "Threshold (percent)" 0 100 50; command = Magick.command [ "\"%s\"", channels._flag, "-black-threshold", "\"" ++ print threshold.value ++ "%%\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_whiteThreshold_item = class Menuaction "_White threshold" "where above threshold set to white" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; threshold = Scale "Threshold (percent)" 0 100 50; command = Magick.command [ "\"%s\"", channels._flag, "-white-threshold", "\"" ++ print threshold.value ++ "%%\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_latThreshold_item = class Menuaction "_Local Adaptive Threshold" "where above average plus offset set to white, otherwise black" { action x = class _result { _vislevel = 3; width = Expression "Width" 10; height = Expression "Height" 10; offset = Scale "Offset (percent)" (-100) 100 0; // note: "-lat" doesn't respond to channels command = Magick.command [ "\"%s\"", "-lat", concat ["\"", print width.expr, "x", print height.expr, (if offset.value >= 0 then "+" else ""), print offset.value, "%%\"" ], "\"%s\"" ]; _result = Magick.system command x; } } Magick_randThreshold_item = class Menuaction "_Random Threshold" "between specified limits, apply random threshold" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; low = Scale "Low threshold" 0 100 10; high = Scale "High threshold" 0 100 90; isPc = Toggle "Thresholds are percent" true; command = Magick.command [ "\"%s\"", channels._flag, "-random-threshold", "\"" ++ print low.value ++ "x" ++ print high.value ++ (if isPc then "%%" else "") ++ "\"", "\"%s\"" ]; _result = Magick.system command x; } } } // end ThresholdMenu_item // Note: alternatives include: // convert in.tif -write mpr:TILE +delete -size 200x200 -background XXXX -tile-offset +30+30 tile:mpr:TILE out.tif Magick_tile_item = class Menuaction "_Tile" "fill given size with tiled image" { action x = class _result { _vislevel = 3; size = Magick.Size_widget; command = Magick.command [ size._flag, "tile:" ++ "\"%s\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_tint_item = class Menuaction "_Tint" "apply a tint" { action x = class _result { _vislevel = 3; foreground = Magick.foreground_widget; amount = Scale "amount (percent)" 0 100 50; command = Magick.command [ "\"%s\"", foreground._flag, "-tint", // snibgo note: although the amount is a percentage, it doesn't need "%" character. print amount.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_transparent_item = class Menuaction "_Transparent" "make this colour transparent" { action x = class _result { _vislevel = 3; changeColour = Magick.changeCol_widget; command = Magick.command [ "\"%s\"", "-fuzz", "\"" ++ print changeColour.fuzz.value ++ "%%\"", (if changeColour.nonMatch then "+" else "-") ++ "transparent", "\"" ++ changeColour.colour._flag ++ "\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_trim_item = class Menuaction "_Trim" "trims away border" { action x = class _result { _vislevel = 3; fuzz = Magick.fuzz_widget; command = Magick.command [ "\"%s\"", "-fuzz", "\"" ++ print fuzz.value ++ "%%\"", "-trim +repage", "\"%s\"" ]; _result = Magick.system command x; } } Magick_uniqueCols_item = class Menuaction "_Unique colours" "discard all but one of any pixel color" { action x = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "-unique-colors", "\"%s\"" ]; _result = Magick.system command x; } } Magick_vignette_item = class Menuaction "_Vignette" "soften the edges in vignette style" { action x = class _result { _vislevel = 3; radius = Magick.blur_rad_widget; sigma = Magick.sigma_widget; rx = Scale "Rolloff x (percent)" 0 100 10; ry = Scale "Rolloff y (percent)" 0 100 10; background = Magick.background_widget; command = Magick.command [ "\"%s\"", background._flag, "-vignette", print radius.value ++ "x" ++ print sigma.value ++ (if rx.value >= 0 then "+" else "") ++ print rx.value ++ (if ry.value >= 0 then "+" else "") ++ print ry.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_wave_item = class Menuaction "_Wave" "shear the columns into a sine wave" { action x = class _result { _vislevel = 3; amplitude = Scale "Amplitude (pixels)" 0 100 10; wavelength = Scale "Wavelength (pixels)" 0 100 10; command = Magick.command [ "\"%s\"", "-wave", print amplitude.value ++ "x" ++ print wavelength.value, "\"%s\"" ]; _result = Magick.system command x; } } nip2-8.7.0/share/nip2/compat/8.4/_predicate.def0000644000175000017500000003252613224651032015652 00000000000000 /* is_colour_space str: is a string one of nip's colour space names */ is_colour_space str = Image_type.colour_spaces.present 0 str; /* is_colour_type n: is a number one of VIPS's colour spaces */ is_colour_type n = Image_type.colour_spaces.present 1 n; /* is_number: is a real or a complex number. */ is_number a = is_real a || is_complex a; /* is_int: is an integer */ is_int a = is_real a && a == (int) a; /* is_uint: is an unsigned integer */ is_uint a = is_int a && a >= 0; /* is_pint: is a positive integer */ is_pint a = is_int a && a > 0; /* is_preal: is a positive real */ is_preal a = is_real a && a > 0; /* is_ureal: is an unsigned real */ is_ureal a = is_real a && a >= 0; /* is_letter c: true if character c is an ASCII letter * * is_letter :: char -> bool */ is_letter c = ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z'); /* is_digit c: true if character c is an ASCII digit * * is_digit :: char->bool */ is_digit x = '0' <= x && x <= '9'; /* A whitespace character. * * is_space :: char->bool */ is_space = member " \n\t"; /* List str starts with section prefix. * * is_prefix "hell" "hello world!" == true * is_prefix :: [*] -> [*] -> bool */ is_prefix prefix str = take (len prefix) str == prefix; /* List str ends with section suffix. * * is_suffix "ld!" "hello world!" == true * is_suffix :: [*] -> [*] -> bool */ is_suffix suffix str = take (len suffix) (reverse str) == reverse suffix; /* List contains seqence. * * is_substr "llo" "hello world!" == true * is_substr :: [*] -> [*] -> bool */ is_substr seq str = any (map (is_prefix seq) (iterate tl str)); /* is_listof p s: true if finite list with p true for every element. */ is_listof p l = is_list l && all (map p l); /* is_string s: true if finite list of char. */ is_string s = is_listof is_char s; /* is_real_list l: is l a list of real numbers ... test each element, * so no infinite lists pls. */ is_real_list l = is_listof is_real l; /* is_string_list l: is l a finite list of finite strings. */ is_string_list l = is_listof is_string l; /* Test list length ... quicker than len x == n for large lists. */ is_list_len n x = true, x == [] && n == 0 = false, x == [] || n == 0 = is_list_len (n - 1) (tl x); is_list_len_more n x = true, x != [] && n == 0 = false, x == [] || n == 0 = is_list_len_more (n - 1) (tl x); is_list_len_more_equal n x = true, n == 0 = false, x == [] = is_list_len_more_equal (n - 1) (tl x); /* is_rectangular l: is l a rectangular data structure */ is_rectangular l = true, !is_list l = true, all (map is_obj l) = true, all (map is_list l) && all (map (not @ is_obj) l) && all (map is_rectangular l) && is_list_len_more 0 l && all (map (is_list_len (len (hd l))) (tl l)) = false { // treat strings as a base type, not [char] is_obj x = !is_list x || is_string x; } /* is_matrix l: is l a list of lists of real numbers, all the same length * * [[]] is the empty matrix, [] is the empty list ... disallow [] */ is_matrix l = l != [] && is_listof is_real_list l && is_rectangular l; /* is_square_matrix l: is l a matrix with width == height */ is_square_matrix l = true, l == [[]] = is_matrix l && is_list_len (len (hd l)) l; /* is_oddmatrix l: is l a matrix with odd-length sides */ is_oddmatrix l = true, l == [[]] = is_matrix l && len l % 2 == 1 && len l?0 % 2 == 1; /* is_odd_square_matrix l: is l a square_matrix with odd-length sides */ is_odd_square_matrix l = is_square_matrix l && len l % 2 == 1; /* Is an item in a column of a table? */ is_incolumn n table x = member (map (extract n) table) x; /* Is HGuide or VGuide. */ is_HGuide x = is_instanceof "HGuide" x; is_VGuide x = is_instanceof "VGuide" x; is_Guide x = is_HGuide x || is_VGuide x; is_Mark x = is_instanceof "Mark" x; is_Group x = is_instanceof "Group" x; is_NULL x = is_instanceof "NULL" x; is_List x = is_instanceof "List" x; is_Image x = is_instanceof "Image" x; is_Plot x = is_instanceof "Plot" x; is_Region x = is_instanceof "Region" x; is_Real x = is_instanceof "Real" x; is_Matrix x = is_instanceof "Matrix_base" x; is_Vector x = is_instanceof "Vector" x; is_Colour x = is_instanceof "Colour" x; is_Arrow x = is_instanceof "Arrow" x; is_Bool x = is_instanceof "Bool" x; is_Scale x = is_instanceof "Scale" x; is_Rect x = is_instanceof "Rect" x; is_Number x = is_instanceof "Number" x; is_Expression x = is_instanceof "Expression" x; is_String x = is_instanceof "String" x; /* A list of the form [[1,2],[3,4],[5,6]...] */ is_xy_list l = is_list l && all (map xy l) { xy l = is_real_list l && is_list_len 2 l; } // does a nested list structure contain a Group object? contains_Group l = true, is_list l && any (map is_Group l) = any (map contains_Group l), is_list l = false; /* Does an object have a sensible VIPS type? */ has_type x = is_image x || is_Image x || is_Arrow x || is_Colour x; /* Try to get a VIPS image type from an object. */ get_type x = get_type_im x, is_image x = get_type_im x.value, is_Image x = get_type_im x.image.value, is_Arrow x = Image_type.colour_spaces.lookup 0 1 x.colour_space, is_Colour x // slightly odd ... but our display is always 0-255, so it makes sense for // a plain number to be in the same range = Image_type.sRGB, is_real x = oo_unary_function get_type_op x, is_class x = error (_ "bad arguments to " ++ "get_type") { get_type_op = Operator "get_type" get_type Operator_type.COMPOUND false; // get the type from a VIPS image ... but only if it makes sense with // the rest of the image // we often have Type set wrong, hence the ugly guessing :-( // can have alpha, hence we let bands be one more than you might think get_type_im im = Image_type.LABQ, coding == Image_coding.LABPACK = Image_type.GREY16, type == Image_type.GREY16 && is_bands 1 = Image_type.HISTOGRAM, type == Image_type.HISTOGRAM && (width == 1 || height == 1) = Image_type.B_W, is_bands 1 = Image_type.CMYK, type == Image_type.CMYK && is_bands 4 = type, is_colorimetric && is_bands 3 = Image_type.sRGB, !is_colorimetric && is_bands 3 = Image_type.MULTIBAND, !is_colorimetric && !is_bands 3 = type { type = get_header "Type" im; coding = get_header "Coding" im; bands = get_header "Bands" im; width = get_header "Xsize" im; height = get_header "Ysize" im; // 3-band colorimetric types we allow ... the things which the // Colour/Convert To menu can make, excluding mono. ok_types = [ Image_type.sRGB, Image_type.RGB16, Image_type.LAB, Image_type.LABQ, Image_type.LABS, Image_type.LCH, Image_type.XYZ, Image_type.YXY, Image_type.UCS ]; is_colorimetric = member ok_types type; // is bands n, with an optional alpha (ie. can be n + 1 too) is_bands n = bands == n || bands == n + 1; } } has_format x = has_member "format" x || is_Arrow x || is_image x; get_format x = x.format, has_member "format" x = x.image.format, is_Arrow x = get_header "BandFmt" x, is_image x = oo_unary_function get_format_op x, is_class x = error (_ "bad arguments to " ++ "get_format") { get_format_op = Operator "get_format" get_format Operator_type.COMPOUND false; } has_bits x = has_member "bits" x || is_Arrow x || is_image x; get_bits x = x.bits, has_member "bits" x = x.image.bits, is_Arrow x = get_header "Bbits" x, is_image x = oo_unary_function get_bits_op x, is_class x = error (_ "bad arguments to " ++ "get_bits") { get_bits_op = Operator "get_bits" get_format Operator_type.COMPOUND false; } has_bands x = is_image x || has_member "bands" x || is_Arrow x; get_bands x = x.bands, has_member "bands" x = x.image.bands, is_Arrow x = get_header "Bands" x, is_image x = 1, is_real x = len x, is_real_list x = oo_unary_function get_bands_op x, is_class x = error (_ "bad arguments to " ++ "get_bands") { get_bands_op = Operator "get_bands" get_bands Operator_type.COMPOUND false; } has_coding x = has_member "coding" x || is_Arrow x || is_image x; get_coding x = x.coding, has_member "coding" x = x.image.coding, is_Arrow x = get_header "Coding" x, is_image x = Image_coding.NOCODING, is_real x = oo_unary_function get_coding_op x, is_class x = error (_ "bad arguments to " ++ "get_coding") { get_coding_op = Operator "get_coding" get_coding Operator_type.COMPOUND false; } has_xres x = has_member "xres" x || is_Arrow x || is_image x; get_xres x = x.xres, has_member "xres" x = x.image.xres, is_Arrow x = get_header "Xres" x, is_image x = oo_unary_function get_xres_op x, is_class x = error (_ "bad arguments to " ++ "get_xres") { get_xres_op = Operator "get_xres" get_xres Operator_type.COMPOUND false; } has_yres x = has_member "yres" x || is_Arrow x || is_image x; get_yres x = x.yres, has_member "yres" x = x.image.yres, is_Arrow x = get_header "Yres" x, is_image x = oo_unary_function get_yres_op x, is_class x = error (_ "bad arguments to " ++ "get_yres") { get_yres_op = Operator "get_yres" get_yres Operator_type.COMPOUND false; } has_xoffset x = has_member "xoffset" x || is_Arrow x || is_image x; get_xoffset x = x.xoffset, has_member "xoffset" x = x.image.xoffset, is_Arrow x = get_header "Xoffset" x, is_image x = oo_unary_function get_xoffset_op x, is_class x = error (_ "bad arguments to " ++ "get_xoffset") { get_xoffset_op = Operator "get_xoffset" get_xoffset Operator_type.COMPOUND false; } has_yoffset x = has_member "yoffset" x || is_Arrow x || is_image x; get_yoffset x = x.yoffset, has_member "yoffset" x = x.image.yoffset, is_Arrow x = get_header "Yoffset" x, is_image x = oo_unary_function get_yoffset_op x, is_class x = error (_ "bad arguments to " ++ "get_yoffset") { get_yoffset_op = Operator "get_yoffset" get_yoffset Operator_type.COMPOUND false; } has_value = has_member "value"; get_value x = x.value; has_image x = is_image x || is_Image x || is_Arrow x; get_image x = x.value, is_Image x = x.image.value, is_Arrow x = x, is_image x = oo_unary_function get_image_op x, is_class x = error (_ "bad arguments to " ++ "get_image") { get_image_op = Operator "get_image" get_image Operator_type.COMPOUND false; } has_number x = is_number x || is_Real x; get_number x = x.value, is_Real x = x, is_number x = oo_unary_function get_number_op x, is_class x = error (_ "bad arguments to " ++ "get_number") { get_number_op = Operator "get_number" get_number Operator_type.COMPOUND false; } has_real x = is_real x || is_Real x; get_real x = x.value, is_Real x = x, is_real x = oo_unary_function get_real_op x, is_class x = error (_ "bad arguments to " ++ "get_real") { get_real_op = Operator "get_real" get_real Operator_type.COMPOUND false; } has_width x = has_member "width" x || is_image x; get_width x = x.width, has_member "width" x = get_header "Xsize" x, is_image x = oo_unary_function get_width_op x, is_class x = error (_ "bad arguments to " ++ "get_width") { get_width_op = Operator "get_width" get_width Operator_type.COMPOUND false; } has_height x = has_member "height" x || is_image x; get_height x = x.height, has_member "height" x = get_header "Ysize" x, is_image x = oo_unary_function get_height_op x, is_class x = error (_ "bad arguments to " ++ "get_height") { get_height_op = Operator "get_height" get_height Operator_type.COMPOUND false; } has_left x = has_member "left" x; get_left x = x.left, has_member "left" x = oo_unary_function get_left_op x, is_class x = error (_ "bad arguments to " ++ "get_left") { get_left_op = Operator "get_left" get_left Operator_type.COMPOUND false; } has_top x = has_member "top" x; get_top x = x.top, has_member "top" x = oo_unary_function get_top_op x, is_class x = error (_ "bad arguments to " ++ "get_top") { get_top_op = Operator "get_top" get_top Operator_type.COMPOUND false; } // like has/get member, but first in a lst of objects has_member_list has objects = filter has objects != []; // need one with the args swapped get_member = converse dot; // get a member from the first of a list of objects to have it get_member_list has get objects = hd members, members != [] = error "unable to get property" { members = map get (filter has objects); } is_hist x = has_image x && (h == 1 || w == 1 || t == Image_type.HISTOGRAM) { im = get_image x; w = get_width im; h = get_height im; t = get_type im; } get_header field x = oo_unary_function get_header_op x, is_class x = get_header_image x, is_image x = error (_ "bad arguments to " ++ "get_header") { get_header_op = Operator "get_header" (get_header field) Operator_type.COMPOUND false; get_header_image im = im_header_int field im, type == itype = im_header_double field im, type == dtype = im_header_string field im, type == stype1 || type == stype2 = error (_ "image has no field " ++ field), type == 0 = error (_ "unknown type for field " ++ field) { type = im_header_get_typeof field im; itype = name2gtype "gint"; dtype = name2gtype "gdouble"; stype1 = name2gtype "VipsRefString"; stype2 = name2gtype "gchararray"; } } get_header_type field x = oo_unary_function get_header_type_op x, is_class x = im_header_get_typeof field x, is_image x = error (_ "bad arguments to " ++ "get_header_type") { get_header_type_op = Operator "get_header_type" (get_header_type field) Operator_type.COMPOUND false; } set_header field value x = oo_unary_function set_header_op x, is_class x = im_copy_set_meta x field value, is_image x = error (_ "bad arguments to " ++ "set_header") { set_header_op = Operator "set_header" (set_header field value) Operator_type.COMPOUND false; } nip2-8.7.0/share/nip2/compat/8.4/Widgets.def0000644000175000017500000000235313224651032015154 00000000000000Widget_slider_item = class Menuaction "_Scale" "make a new scale widget" { icon = "nip-slider-16.png"; action = Scale "untitled scale" 0 255 128; } Widget_toggle_item = class Menuaction "_Toggle" "make a new toggle widget" { action = Toggle "untitled toggle" false; } Widget_option_item = class Menuaction "_Option" "make a new option widget" { action = Option "untitled option" ["option0", "option1"] 0; } Widget_string_item = class Menuaction "St_ring" "make a new string widget" { action = String "Enter a string" "sample text"; } Widget_number_item = class Menuaction "_Number" "make a new number widget" { action = Number "Enter a number" 42; } Widget_expression_item = class Menuaction "_Expression" "make a new expression widget" { action = Expression "Enter an expression" 42; } Widget_pathname_item = class Menuaction "_File Chooser" "make a new file chooser widget" { action = Pathname "Pick a file" "$VIPSHOME/share/$PACKAGE/data/print_test_image.v"; } Widget_font_item = class Menuaction "F_ont Chooser" "make a new font chooser widget" { action = Fontname "Pick a font" Workspaces.Preferences.PAINTBOX_FONT; } Widget_clock_item = class Menuaction "_Clock" "make a new clock widget" { action = Clock 1 1; } nip2-8.7.0/share/nip2/compat/8.4/Colour.def0000644000175000017500000003773013224651032015020 00000000000000 Colour_new_item = class Menupullright (_ "_New") (_ "make a patch of colour") { Widget_colour_item = class Menuaction (_ "_Colour") (_ "make a patch of colour") { action = Colour_picker "Lab" [50,0,0]; } LAB_colour = class Menuaction (_ "CIE Lab _Picker") (_ "pick colour in CIE Lab space") { action = widget "Lab" [50, 0, 0]; // ab_slice size size = 512; // range of values ... +/- 128 for ab range = 256; // map xy in slice image to ab and back xy2ab x = x / (size / range) - 128; ab2xy a = (a + 128) * (size / range); widget space default_value = class Colour space _result { _vislevel = 3; [_L, _a, _b] = default_value; L = Scale "Lightness" 0 100 _L; ab_slice = Image (lab_slice size L.value); point = Mark ab_slice (ab2xy _a) (ab2xy _b); _result = [L.value, xy2ab point.left, xy2ab point.top]; Colour_edit colour_space value = widget colour_space value; } } CCT_colour = class Menuaction (_ "Colour from CCT") (_ "pick colour by CCT") { action = widget 6500; widget x = class _result { _vislevel = 3; T = Scale "CCT" 1800 25000 x; _result = colour_from_temp (to_real T); Colour_edit space value = widget (temp_from_colour (Colour space value)); } } } Colour_to_colour_item = class Menuaction (_ "Con_vert to Colour") (_ "convert anything to a colour") { action x = to_colour x; } #separator Colour_convert_item = class Menupullright (_ "_Colourspace") (_ "convert to various colour spaces") { spaces = Image_type.image_colour_spaces; conv dest x = class _result { _vislevel = 3; to = Option_enum (_ "Convert to") spaces (spaces.get_name dest); _result = map_unary (colour_transform_to to.value_thing) x; } Mono_item = class Menuaction (_ "_Monochrome") (_ "convert to mono colourspace") { action x = conv Image_type.B_W x; } sRGB_item = class Menuaction (_ "_sRGB") (_ "convert to sRGB colourspace") { action x = conv Image_type.sRGB x; } GREY16_item = class Menuaction (_ "_GREY16") (_ "convert to GREY16 colourspace") { action x = conv Image_type.GREY16 x; } RGB16_item = class Menuaction (_ "_RGB16") (_ "convert to RGB16 colourspace") { action x = conv Image_type.RGB16 x; } Lab_item = class Menuaction (_ "_Lab") (_ "convert to Lab colourspace (float Lab)") { action x = conv Image_type.LAB x; } LabQ_item = class Menuaction (_ "Lab_Q") (_ "convert to LabQ colourspace (32-bit Lab)") { action x = conv Image_type.LABQ x; } LabS_item = class Menuaction (_ "Lab_S") (_ "convert to LabS colourspace (48-bit Lab)") { action x = conv Image_type.LABS x; } LCh_item = class Menuaction (_ "L_Ch") (_ "convert to LCh colourspace") { action x = conv Image_type.LCH x; } XYZ_item = class Menuaction (_ "_XYZ") (_ "convert to XYZ colourspace") { action x = conv Image_type.XYZ x; } Yxy_item = class Menuaction (_ "_Yxy") (_ "convert to Yxy colourspace") { action x = conv Image_type.YXY x; } UCS_item = class Menuaction (_ "_UCS") (_ "convert to UCS colourspace") { action x = conv Image_type.UCS x; } } /* mark objects as being in various colourspaces */ Colour_tag_item = class Menupullright (_ "_Tag As") (_ "tag object as being in various colour spaces") { spaces = Image_type.image_colour_spaces; tag dest x = class _result { _vislevel = 3; to = Option_enum (_ "Tag as") spaces (spaces.get_name dest); _result = map_unary (image_set_type to.value_thing) x; } Mono_item = class Menuaction (_ "_Monochrome") (_ "tag as being in mono colourspace") { action x = tag Image_type.B_W x; } sRGB_item = class Menuaction (_ "_sRGB") (_ "tag as being in sRGB colourspace") { action x = tag Image_type.sRGB x; } RGB16_item = class Menuaction (_ "_RGB16") (_ "tag as being in RGB16 colourspace") { action x = tag Image_type.RGB16 x; } GREY16_item = class Menuaction (_ "_GREY16") (_ "tag as being in GREY16 colourspace") { action x = tag Image_type.GREY16 x; } Lab_item = class Menuaction (_ "_Lab") (_ "tag as being in Lab colourspace (float Lab)") { action x = tag Image_type.LAB x; } LabQ_item = class Menuaction (_ "Lab_Q") (_ "tag as being in LabQ colourspace (32-bit Lab)") { action x = tag Image_type.LABQ x; } LabS_item = class Menuaction (_ "Lab_S") (_ "tag as being in LabS colourspace (48-bit Lab)") { action x = tag Image_type.LABS x; } LCh_item = class Menuaction (_ "L_Ch") (_ "tag as being in LCh colourspace") { action x = tag Image_type.LCH x; } XYZ_item = class Menuaction (_ "_XYZ") (_ "tag as being in XYZ colourspace") { action x = tag Image_type.XYZ x; } Yxy_item = class Menuaction (_ "_Yxy") (_ "tag as being in Yxy colourspace") { action x = tag Image_type.YXY x; } UCS_item = class Menuaction (_ "_UCS") (_ "tag as being in UCS colourspace") { action x = tag Image_type.UCS x; } } Colour_temperature_item = class Menupullright (_ "Te_mperature") (_ "colour temperature conversions") { Whitepoint_item = class Menuaction (_ "_Move Whitepoint") (_ "change whitepoint") { action x = class _result { _vislevel = 3; old_white = Option_enum (_ "Old whitepoint") Whitepoints "D65"; new_white = Option_enum (_ "New whitepoint") Whitepoints "D50"; _result = map_unary process x { process im = im''' { im' = colour_transform_to Image_type.XYZ im; im'' = im' * (new_white.value_thing / old_white.value_thing); im''' = colour_transform_to (get_type im) im''; } } } } D65_to_D50_item = class Menupullright (_ "D_65 to D50") (_ "complex conversion") { XYZ_minimal_item = class Menuaction (_ "_Minimal") (_ "D65 to D50 using the minimal 3x3 matrix in XYZ") { action x = map_unary process x { process im = im''' { im' = colour_transform_to Image_type.XYZ im; im'' = recomb D652D50_direct im'; im''' = colour_transform_to (get_type im) im''; } } } Bradford_item = class Menuaction (_ "_Bradford") (_ "D65 to D50 in Bradford cone space") { action x = map_unary process x { process im = im''' { im' = colour_transform_to Image_type.XYZ im; im'' = im_D652D50 im'; im''' = colour_transform_to (get_type im) im''; } } } } D50_to_D65_item = class Menupullright (_ "D_50 to D65") (_ "complex conversion") { XYZ_minimal_item = class Menuaction (_ "_Minimal") (_ "D50 to D65 using the minimal 3x3 matrix in XYZ") { action x = map_unary process x { process im = im''' { im' = colour_transform_to Image_type.XYZ im; im'' = recomb D502D65_direct im'; im''' = colour_transform_to (get_type im) im''; } } } Bradford_item = class Menuaction (_ "_Bradford") (_ "D60 to D65 in Bradford cone space") { action x = map_unary process x { process im = im''' { im' = colour_transform_to Image_type.XYZ im; im'' = im_D502D65 im'; im''' = colour_transform_to (get_type im) im''; } } } } Lab_to_D50XYZ_item = class Menuaction (_ "_Lab to D50 XYZ") (_ "Lab to XYZ with a D50 whitepoint") { action x = map_unary (colour_unary im_D50Lab2XYZ) x; } D50XYZ_to_Lab_item = class Menuaction (_ "D50 _XYZ to Lab") (_ "XYZ to Lab with a D50 whitepoint") { action x = map_unary (colour_unary im_D50XYZ2Lab) x; } sep1 = Menuseparator; CCT_item = class Menuaction (_ "Calculate temperature") (_ "estimate CCT using the McCamy approximation") { action z = map_unary temp_from_colour z; } Colour_item = Colour_new_item.CCT_colour; } Colour_icc_item = class Menupullright (_ "_ICC") (_ "transform with ICC profiles") { print_profile = "$VIPSHOME/share/$PACKAGE/data/cmyk.icm"; monitor_profile = "$VIPSHOME/share/$PACKAGE/data/sRGB.icm"; guess_profile image = print_profile, has_type image && get_type image == Image_type.CMYK && has_bands image && get_bands image >= 4 = monitor_profile; render_intents = Option_enum (_ "Render intent") Render_intent.names (_ "Absolute"); Export_item = class Menuaction (_ "_Export") (_ "export from PCS to device space") { action x = class _result { _vislevel = 3; profile = Pathname (_ "Output profile") print_profile; intent = render_intents; depth = Option (_ "Output depth") [_ "8 bit", _ "16 bit"] 0; _result = map_unary process x { process image = icc_export [8, 16]?depth profile.value intent.value_thing lab { lab = colour_transform_to Image_type.LABQ image; } } } } Import_item = class Menuaction (_ "_Import") (_ "import from device space to PCS") { action x = class _result { _vislevel = 3; embedded = Toggle (_ "Use embedded profile if possible") false; profile = Pathname (_ "Default input profile") (guess_profile x); intent = render_intents; _result = map_unary process x { process image = icc_import_embedded intent.value_thing image, get_header_type "icc-profile-data" image != 0 && embedded = icc_import profile.value intent.value_thing image; } } } Transform_item = class Menuaction (_ "_Transform") (_ "transform between two device spaces") { action x = class _result { _vislevel = 3; in_profile = Pathname (_ "Input profile") (guess_profile x); out_profile = Pathname (_ "Output profile") print_profile; intent = render_intents; _result = map_unary process x { process image = icc_transform in_profile.value out_profile.value intent.value_thing image; } } } AC2RC_item = class Menuaction (_ "_Absolute to Relative") (_ "absolute to relative colorimetry using device profile") { action x = class _result { _vislevel = 3; profile = Pathname (_ "Pick a profile") (guess_profile x); _result = map_unary process x { process image = icc_ac2rc profile.value lab { lab = colour_transform_to Image_type.LAB image; } } } } } Colour_rad_item = class Menupullright (_ "_Radiance") (_ "convert to and from Radiance packed format") { Unpack_item = class Menuaction (_ "Unpack") (_ "unpack Radiance format to float") { action x = map_unary rad2float x; } Pack_item = class Menuaction (_ "Pack") (_ "pack 3-band float to Radiance format") { action x = map_unary float2rad x; } } #separator Colour_dE_item = class Menupullright (_ "_Difference") (_ "calculate colour difference") { /* Apply a converter to an object ... convert image or colour (since * we can guess the colour space we're converting from), don't convert * matrix or vector (since we can't tell ... assume it's in the right * space already). */ apply_cvt cvt x = cvt x, is_Image x || is_Colour x || is_image x = x; diff cvt in1 in2 = abs_vec (apply_cvt cvt in1 - apply_cvt cvt in2); /* Converter to LAB. */ lab_cvt = colour_transform_to Image_type.LAB; /* Converter to UCS ... plain UCS is Ch form, so we go LAB again after * to make sure we get a rectangular coord system. */ ucs_cvt = colour_transform Image_type.LCH Image_type.LAB @ colour_transform_to Image_type.UCS; CIEdE76_item = class Menuaction (_ "CIE dE _76") (_ "calculate CIE dE 1976 for two objects") { action a b = map_binary (diff lab_cvt) a b; } CIEdE00_item = class Menuaction (_ "CIE dE _00") (_ "calculate CIE dE 2000 for two objects") { action a b = map_binary (colour_binary (_ "im_dE00_fromLab") im_dE00_fromLab) a b; } UCS_item = class Menuaction (_ "_CMC(l:l)") (_ "calculate CMC(l:l) for two objects") { action a b = map_binary (diff ucs_cvt) a b; } } Colour_adjust_item = class Menupullright (_ "_Adjust") (_ "alter colours in various ways") { Recombination_item = class Menuaction (_ "_Recombination") (_ "recombine colour with an editable matrix") { action x = class _result { _vislevel = 3; matrix = Matrix_rec (identity_matrix (bands x)) { // try to guess a sensible value for the size of the // matrix bands x = x.bands, is_Image x || is_Colour x = x.width, is_Matrix x = bands x.value?0, is_Group x = x.bands, has_member "bands" x = 3; } _result = map_unary (recomb matrix) x; } } Cast_item = class Menuaction (_ "_Cast") (_ "displace neutral axis in CIE Lab") { action x = class _result { _vislevel = 3; gr = Scale "Green-red" (-20) 20 0; by = Scale "Blue-yellow" (-20) 20 0; _result = map_unary adjust_cast x { adjust_cast in = colour_transform_to (get_type in) in'' { in' = colour_transform_to Image_type.LAB in; in'' = in' + Vector [0, gr.value, by.value]; } } } } HSB_item = class Menuaction (_ "_HSB") (_ "adjust hue-saturation-brightness in LCh") { action x = class _result { _vislevel = 3; h = Scale "Hue" 0 360 0; s = Scale "Saturation" 0.01 5 1; b = Scale "Brightness" 0.01 5 1; _result = map_unary adjust_hsb x { adjust_hsb in = colour_transform_to (get_type in) in'' { in' = colour_transform_to Image_type.LCH in; in'' = in' * Vector [b.value, s.value, 1] + Vector [0, 0, h.value]; } } } } } Colour_similar_item = class Menuaction (_ "_Similar Colour") (_ "find pixels with a similar colour") { action x = class _result { _vislevel = 3; target_colour = Colour_picker "Lab" [50, 0, 0]; t = Scale "dE threshold" 0 100 10; _result = map_unary match x { match in = abs_vec (in' - target) < t { target = colour_transform_to Image_type.LAB target_colour; in' = colour_transform_to Image_type.LAB in; } } } } #separator Colour_chart_to_matrix_item = class Menuaction (_ "_Measure Colour Chart") (_ "measure average pixel values for a colour chart image") { action x = class _result { _vislevel = 3; pacross = Expression (_ "Patches across chart") 6; pdown = Expression (_ "Patches down chart") 4; measure = Scale (_ "Measure area (%)") 1 100 50; // get a representative image from an arg get_image x = get_image x.value?0, is_Group x = x; _im = get_image x; sample = measure_draw (to_real pacross) (to_real pdown) (to_real measure) _im; _result = map_unary chart x { chart in = measure_sample (to_real pacross) (to_real pdown) (to_real measure) in; } } } Colour_matrix_to_chart_item = class Menuaction (_ "Make Synth_etic Colour Chart") (_ "make a colour chart image from a matrix of measurements") { action x = class _result { _vislevel = 3; pacross = Expression (_ "Patches across chart") 6; pdown = Expression (_ "Patches down chart") 4; pwidth = Expression (_ "Patch width in pixels") 50; pheight = Expression (_ "Patch height in pixels") 50; bwidth = Expression (_ "Border between patches") 0; _result = map_unary build_chart x { build_chart in = Image (imagearray_assemble (to_real bwidth) (to_real bwidth) patch_table) { // patch numbers for row starts rowstart = map (multiply (to_real pacross)) [0 .. to_real pdown - 1]; // assemble patches ... each one a pixel value patches = map (take (to_real pacross)) (map (converse drop in.value) rowstart); // make an n-band constant image from eg. [1,2,3] // we don't know the format .. use sRGB (well, why not?) patch v = image_new (to_real pwidth) (to_real pheight) (len v) Image_format.FLOAT Image_coding.NOCODING Image_type.sRGB (Vector v) 0 0; // make an image for each patch patch_table = map (map patch) patches; } } } } Colour_plot_ab_scatter_item = class Menuaction (_ "_Plot ab Scatter") (_ "plot an ab scatter histogram") { action x = class _result { _vislevel = 3; bins = Expression (_ "Number of bins on each axis") 8; _result = map_unary plot_scatter x { plot_scatter in = Image (bg * (((90 / mx) * hist) ++ blk)) { lab = colour_transform_to Image_type.LAB in.value; ab = (unsigned char) ((lab?1 ++ lab?2) + 128); hist = hist_find_nD bins.expr ab; mx = max hist; bg = lab_slice bins.expr 1; blk = 1 + im_black (to_real bins) (to_real bins) 2; } } } } nip2-8.7.0/share/nip2/compat/8.4/_joe_extra.def0000644000175000017500000003107513224651032015670 00000000000000//////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// Frame_item = class Menupullright "Picture _Frame" "working with images of frames" { //////////////////////////////////////////////////////////////////////////////////// Build_frame_item = class Menupullright "_Build Frame From" "builds a new frame from image a and places it around image b" { //////////////////////////////////////////////////////////////////////////////////// Frame_corner_item = class Menuaction "_Frame Corner" "copies and extends a frame corner, a, to produce a complete frame to fit round a given image, b" { prefs = Workspaces.Preferences; action a b = class _result { _check_args = [ [a, "a", check_Image], [b, "b", check_Image] ]; _check_all = [ [a.coding == b.coding && a.bands == b.bands, "a.coding == b.coding && a.bands == b.bands"] ]; _vislevel = 3; ppcm = Expression "Number of pixels per cm" 25; /* Given the value of ppcm, distance between the inner edge of the frame * and the outer edge of the image. +ve values mean the frame overlaps * the image. */ overlap = Expression "Size of frame overlap in cm" 0; variables = Frame_variables 0; _type = Image_type.colour_spaces.get_name b.type; //If applied the count colour be seen for -ve values of overlap mount_options = Mount_options _type ppcm.expr; _cs = variables.corner_section.value; _ms = variables.middle_section.value; _ov = ppcm.expr * overlap.expr; _sf = variables.scale_factor.expr; _bf = variables.blend_fraction.value; //Scale frame image if required. _a = a, _sf == 1; = a, _sf == 0; = Image (resize Kernel_linear _sf _sf a.value); _im_w = b.width; _im_h = b.height + mount_options._los, mount_options.apply = b.height; _os = mount_options._los, mount_options.apply = 0; _cl = Vector mount_options.mount_colour.value, mount_options.apply = 0; //Produce scaled and resized frame. frame = corner_frame _a _im_w _im_h _ov _cs _ms _bf; //Resize image canvas and applied mount colour as required. _pos_im = frame_position_image b frame _os _cl; //Wrap frame round image. _result = if (frame == 0) then _pos_im else frame; } } //////////////////////////////////////////////////////////////////////////////////// Simple_frame_item = class Menuaction "_Simple Frame" "extends or shortens the central sections of a simple frame, a, to fit round a given image, b" { prefs = Workspaces.Preferences; action a b = class _result { _check_args = [ [a, "a", check_Image], [b, "b", check_Image] ]; _check_all = [ [a.coding == b.coding && a.bands == b.bands, "a.coding == b.coding && a.bands == b.bands"] ]; _vislevel = 3; ppcm = Expression "Number of pixels per cm" 25; /* Given the value of ppcm, distance between the inner edge of the frame * and the outer edge of the image. +ve values mean the frame overlaps * the image. */ overlap = Expression "Size of frame overlap in cm" 0; variables = Frame_variables 0; _type = Image_type.colour_spaces.get_name b.type; //If applied the count colour be seen for -ve values of overlap mount_options = Mount_options _type ppcm.expr; _cs = variables.corner_section.value; _ms = variables.middle_section.value; _ov = ppcm.expr * overlap.expr; _sf = variables.scale_factor.expr; _bf = variables.blend_fraction.value; //Scale frame image if required. _a = a, _sf == 1; = a, _sf == 0; = Image (resize Kernel_linear _sf _sf a.value); _im_w = b.width; _im_h = b.height + mount_options._los, mount_options.apply = b.height; _os = mount_options._los, mount_options.apply = 0; _cl = Vector mount_options.mount_colour.value, mount_options.apply = 0; //Produce scaled and resized frame. frame = simple_frame _a _im_w _im_h _ov _cs _ms _bf variables.option; //Resize image canvas and applied mount colour as required. _pos_im = frame_position_image b frame _os _cl; //Wrap frame round image. _result = if (frame == 0) then _pos_im else frame; } } //////////////////////////////////////////////////////////////////////////////////// Complex_frame_item = class Menuaction "_Complex Frame" "extends or shortens the central sections of a frame a, preserving any central edge details, to fit image b" { prefs = Workspaces.Preferences; action a b = class _result { _check_args = [ [a, "a", check_Image], [b, "b", check_Image] ]; _check_all = [ [a.coding == b.coding && a.bands == b.bands, "a.coding == b.coding && a.bands == b.bands"] ]; _vislevel = 3; ppcm = Expression "Number of pixels per cm" 25; /* Given the value of ppcm, distance between the inner edge of the frame * and the outer edge of the image. +ve values mean the frame overlaps * the image. */ overlap = Expression "Size of frame overlap in cm" 0; variables = Frame_variables 1; _type = Image_type.colour_spaces.get_name b.type; //If applied the count colour be seen for -ve values of overlap mount_options = Mount_options _type ppcm.expr; _cs = variables.corner_section.value; _es = variables.edge_section.value; _ms = variables.middle_section.value; _ov = ppcm.expr * overlap.expr; _sf = variables.scale_factor.expr; _bf = variables.blend_fraction.value; _a = a, _sf == 1; = a, _sf == 0; = Image (resize Kernel_linear _sf _sf a.value); _im_w = b.width; _im_h = b.height + mount_options._los, mount_options.apply = b.height; _os = mount_options._los, mount_options.apply = 0; _cl = Vector mount_options.colour.value, mount_options.apply = 0; //Produce scaled and resized frame. frame = complex_frame _a _im_w _im_h _ov _cs _es _ms _bf variables.option; //Resize image canvas and applied mount colour as required. _pos_im = frame_position_image b frame _os _cl; //Wrap frame round image. _result = if (frame == 0) then _pos_im else frame; } } } //////////////////////////////////////////////////////////////////////////////////// Straighten_frame_item = class Menuaction "_Straighten Frame" "uses four points to square up distorted images of frames" { action a = Perspective_item.action a; } }; //////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// Select_item = class Menupullright "_Select" "select user defined areas of an image" { prefs = Workspaces.Preferences; /* Option toggle used to define whether the user is replacing a * dark or a light area. */ _control = Option "Make" [ "Selection Brighter", "Selection Darker", "Selection Black", "Selection White", "Background Black", "Background White", "Mask" ] 4; control_selection mask im no = [ if mask then im * 1.2 else im * 1, if mask then im * 0.8 else im * 1, if mask then 0 else im, if mask then 255 else im, if mask then im else 0, if mask then im else 255, mask ]?no; Rectangle = class Menuaction "_Rectangle" "use an Arrow or Region x to define a rectangle" { action x = class _result { _vislevel = 3; control = _control; _result = control_selection mask im control { im = x.image; mask = Image m { rx = x.region_rect, is_Region x = x; b = image_new im.width im.height 1 0 0 1 0 0 0; w = image_new rx.nwidth rx.nheight 1 0 0 1 255 0 0; m = insert_noexpand rx.nleft rx.ntop w b; } } } } Elipse = class Menuaction "_Ellipse" "use a line/arrow x to define the center point radius and direction of an ellipse" { action x = class _result { _vislevel = 3; control = _control; width = Scale "Width" 0.01 1 0.5; _result = control_selection mask im control { mask = select_ellipse x width.value; im = x.image; } } } Tetragon = class Menuaction "_Tetragon" "selects the convex area defined by four points" { action a b c d = class _result { _vislevel = 3; control = _control; _result = control_selection mask im control { mask = select_tetragon a b c d; im = get_image a; } } } Polygon = class Menuaction "_Polygon" "selects a polygon from an ordered group of points" { action pt_list = class _result { _vislevel = 3; control = _control; _result = control_selection mask im control { mask = select_polygon pt_list; im = get_image ((pt_list.value)?0); } } } sep1 = Menuseparator; Threshold_item = class Menuaction "Thres_hold" "simple image threshold" { action x = class _result { _vislevel = 3; t = Scale "Threshold" 0 mx (mx / 2) { mx = Image_format.maxval x.format, is_Image x = 255; } _result = map_unary (more t.value) x; } } Threshold_percent_item = class Menuaction "Per_cent Threshold" "threshold at a percentage of pixels" { action x = class _result { _vislevel = 3; t = Scale "Percentage of pixels" 0 100 50; _result = map_unary (more (hist_thresh (t.value / 100) x)) x; } } sep2 = Menuseparator; Segment_item = class Menuaction "_Segment" "break image into disjoint regions" { action x = class _result { _vislevel = 3; segments = Expression "Number of disjoint regions" (map_unary (get_header "n-segments") _result); _result = map_unary segment x; } } }; //////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// Perspective_match_item = class Menuaction "_Perspective Match" "rotate, scale and skew one image to match another" { action x y = class _result { _vislevel = 3; // try to find an image ... for a group, get the first item find_image x = x, is_Image x = find_image x?0, is_list x = find_image x.value, is_class x && has_value x = error "unable to find image"; _a = find_image x; _b = find_image y; ap1 = Mark_relative _a 0.1 0.1; ap2 = Mark_relative _a 0.9 0.1; ap3 = Mark_relative _a 0.1 0.9; ap4 = Mark_relative _a 0.9 0.9; bp1 = Mark_relative _b 0.1 0.1; bp2 = Mark_relative _b 0.9 0.1; bp3 = Mark_relative _b 0.1 0.9; bp4 = Mark_relative _b 0.9 0.9; _result = map_binary process x y { f1 = _a.width / _b.width; f2 = _a.height / _b.height; rl = sort_pts_clockwise [ap1, ap2, ap3, ap4]; pl = sort_pts_clockwise [bp1, bp2, bp3, bp4]; to = [ rl?0.left, rl?0.top, rl?1.left, rl?1.top, rl?2.left, rl?2.top, rl?3.left, rl?3.top ]; from = [ pl?0.left * f1, pl?0.top * f2, pl?1.left * f1, pl?1.top * f2, pl?2.left * f1, pl?2.top * f2, pl?3.left * f1, pl?3.top * f2 ]; trans = perspective_transform to from; process a b = transform 1 0 trans b2 { b2 = resize Kernel_linear f1 f2 b, (f1 >= 1 && f2 >= 1) || (f1 >= 1 && f2 >= 1) = resize Kernel_linear f1 1 b1 {b1 = resize Kernel_linear 1 f2 b;} } } } }; //////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// Perspective_item = class Menuaction "Pe_rspective Distort" "rotate, scale and skew an image with respect to defined points" { action x = class _result { _vislevel = 3; // try to find an image ... for a group, get the first item find_image x = x, is_Image x = find_image x?0, is_list x = find_image x.value, is_class x && has_value x = error "unable to find image"; _a = find_image x; dir = Option "Select distort direction" [ "Distort to points", "Distort to corners" ] 1; ap1 = Mark_relative _a 0.1 0.1; ap2 = Mark_relative _a 0.9 0.1; ap3 = Mark_relative _a 0.9 0.9; ap4 = Mark_relative _a 0.1 0.9; _result = map_unary process x { trans = [perspective_transform to from, perspective_transform from to]?(dir.value) { rl = sort_pts_clockwise [ap1, ap2, ap3, ap4]; to = [(rl?0).left, (rl?0).top, (rl?1).left, (rl?1).top, (rl?2).left, (rl?2).top, (rl?3).left, (rl?3).top]; from=[0, 0, (_a.width - 1), 0, (_a.width - 1), (_a.height - 1), 0, (_a.height - 1)]; } process a = transform 1 0 trans a; } } }; nip2-8.7.0/share/nip2/compat/8.4/_generate.def0000644000175000017500000000755513224651032015510 00000000000000 /* make an image of size x by y whose pixels are their coordinates. */ make_xy x y = im_make_xy (to_real x) (to_real y); /* make an image with the specified properties ... pixel is (eg.) * Vector [0, 0, 0], or 12. If coding == labq, we ignore bands, format and * type, generate a 3 band float image, and lab2labq it before handing it * back. */ image_new w h b fmt coding type pixel xoff yoff = embed 1 0 0 w h im'''' { b' = 3, coding == Image_coding.LABPACK = b; fmt' = Image_format.FLOAT, coding == Image_coding.LABPACK = fmt; type' = Image_type.LAB, coding == Image_coding.LABPACK = type; im = im_black 1 1 (to_real b') + pixel; im' = clip2fmt fmt' im; im'' = im_Lab2LabQ im', coding == Image_coding.LABPACK; = im'; im''' = image_set_type type' im''; im'''' = image_set_origin xoff yoff im'''; } mkim options x y b = Image (image_new x y b (opt $format) (opt $coding) (opt $type) (opt $pixel) (opt $xoffset) (opt $yoffset)) { opt = get_option options [ $format => Image_format.UCHAR, $coding => Image_coding.NOCODING, $type => Image_type.sRGB, $pixel => 0, $xoffset => 0, $yoffset => 0 ]; } /* generate a slice of LAB space size x size pixels for L* == l */ lab_slice size l = image_set_type Image_type.LAB im { L = image_new size size 1 Image_format.FLOAT Image_coding.NOCODING Image_type.B_W l 0 0; A1 = im_fgrey (to_real size) (to_real size); /* im_fgrey always makes 0-1, so these ranges can be wired in. */ A2 = A1 * 256 - 128; A4 = im_rot90 A2; im = image_set_origin (size / 2) (size / 2) (L ++ A2 ++ A4); } /* Look at Image, try to make a Colour (failing that, a Vector) which is white * for that image type. */ image_white im = colour_transform_to type white_lab, bands == 3 && coding == Image_coding.NOCODING && colour_spaces.present 1 type = white_lab, coding == Image_coding.LABPACK = Vector (replicate bands (max_value.lookup 1 0 format)) { bands = im.bands; type = im.type; format = im.format; coding = im.coding; colour_spaces = Image_type.colour_spaces; // white as LAB white_lab = Colour "Lab" [100, 0, 0]; // maximum value for this numeric type max_value = Table [ [255, Image_format.DPCOMPLEX], [255, Image_format.DOUBLE], [255, Image_format.COMPLEX], [255, Image_format.FLOAT], [2 ** 31 - 1, Image_format.INT], [2 ** 32 - 1, Image_format.UINT], [2 ** 15 - 1, Image_format.SHORT], [2 ** 16 - 1, Image_format.USHORT], [2 ** 7 - 1, Image_format.CHAR], [2 ** 8 - 1, Image_format.UCHAR] ]; } /* Make a seperable gaussian mask. */ matrix_gaussian_blur radius = im_gauss_imask_sep (radius / 3) 0.2; /* Make a seperable square mask. */ matrix_blur radius = Matrix_con (sum mask_sq_line) 0 [mask_sq_line] { mask_sq_line = replicate (2 * radius - 1) 1; } /* Make a colour from a temperature. */ colour_from_temp T = error (_ "T out of range"), T < 1667 || T > 25000 = Colour "Yxy" [50, x, y] { // Kim et all approximation // see eg. http://en.wikipedia.org/wiki/Planckian_locus#Approximation x = -0.2661239 * 10 ** 9 / T ** 3 - 0.2343580 * 10 ** 6 / T ** 2 + 0.8776956 * 10 ** 3 / T + 0.179910, T < 4000 = -3.0258469 * 10 ** 9 / T ** 3 + 2.1070379 * 10 ** 6 / T ** 2 + 0.2226347 * 10 ** 3 / T + 0.240390; y = -1.1063814 * x ** 3 - 1.34811020 * x ** 2 + 2.18555832 * x - 0.20219638, T < 2222 = -0.9549476 * x ** 3 - 1.37418593 * x ** 2 + 2.09137015 * x - 0.16748867, T < 4000 = 3.0817580 * x ** 3 - 5.87338670 * x ** 2 + 3.75112997 * x - 0.37001483; } temp_from_colour z = T { c = colour_transform_to Image_type.YXY (to_colour z); x = c.value?1; y = c.value?2; // McCamy's approximation, see eg. // http://en.wikipedia.org/wiki/Color_temperature#Approximation xe = 0.332; ye = 0.1858; n = (x - xe) / (y - ye); T = -449 * n ** 3 + 3525 * n ** 2 - 6823.3 * n + 5520.33; } nip2-8.7.0/share/nip2/compat/8.4/Math.def0000644000175000017500000003162513224651032014443 00000000000000Math_arithmetic_item = class Menupullright "_Arithmetic" "basic arithmetic for objects" { Add_item = class Menuaction "_Add" "add a and b" { action a b = map_binary add a b; } Subtract_item = class Menuaction "_Subtract" "subtract b from a" { action a b = map_binary subtract a b; } Multiply_item = class Menuaction "_Multiply" "multiply a by b" { action a b = map_binary multiply a b; } Divide_item = class Menuaction "_Divide" "divide a by b" { action a b = map_binary divide a b; } Remainder_item = class Menuaction "_Remainder" "remainder after integer division of a by b" { action a b = map_binary remainder a b; } sep1 = Menuseparator; Absolute_value_item = class Menuaction "A_bsolute Value" "absolute value of x" { action x = map_unary abs x; } Absolute_value_vector_item = class Menuaction "Absolute Value _Vector" "like Absolute Value, but treat pixels as vectors" { action x = map_unary abs_vec x; } Sign_item = class Menuaction "S_ign" "unit vector" { action x = map_unary sign x; } Negate_item = class Menuaction "_Negate" "multiply by -1" { action x = map_unary unary_minus x; } } Math_trig_item = class Menupullright "_Trigonometry" "trigonometry operations (all in degrees)" { Sin_item = class Menuaction "_Sine" "calculate sine x" { action x = map_unary sin x; } Cos_item = class Menuaction "_Cosine" "calculate cosine x" { action x = map_unary cos x; } Tan_item = class Menuaction "_Tangent" "calculate tangent x" { action x = map_unary tan x; } sep1 = Menuseparator; Asin_item = class Menuaction "Arc S_ine" "calculate arc sine x" { action x = map_unary asin x; } Acos_item = class Menuaction "Arc C_osine" "calculate arc cosine x" { action x = map_unary acos x; } Atan_item = class Menuaction "Arc T_angent" "calculate arc tangent x" { action x = map_unary atan x; } sep2 = Menuseparator; Rad_item = class Menuaction "_Degrees to Radians" "convert degrees to radians" { action x = map_unary rad x; } Deg_item = class Menuaction "_Radians to Degrees" "convert radians to degrees" { action x = map_unary deg x; } sep3 = Menuseparator; Angle_range_item = class Menuaction "Angle i_n Range" "is angle within t degrees of r, mod 360" { action t r angle = clock (max - angle) < 2*r { max = clock (t + r); clock a = a + 360, a < 0; = a - 360, a >= 360; = a; } } } Math_log_item = class Menupullright "_Log" "logarithms and anti-logs" { Exponential_item = class Menuaction "_Exponential" "calculate e ** x" { action x = map_unary (power e) x; } Log_natural_item = class Menuaction "Natural _Log" "log base e of x" { action x = map_unary log x; } sep1 = Menuseparator; Exponential10_item = class Menuaction "E_xponential base 10" "calculate 10 ** x" { action x = map_unary (power 10) x; } Log10_item = class Menuaction "L_og Base 10" "log base 10 of x" { action x = map_unary log10 x; } sep2 = Menuseparator; Raise_to_power_item = class Menuaction "_Raise to Power" "calculate x ** y" { action x y = map_binary power x y; } } Math_complex_item = class Menupullright "_Complex" "operations on complex numbers and images" { Complex_extract = class Menupullright "_Extract" "extract fields from complex" { Real_item = class Menuaction "_Real" "extract real part of complex" { action in = map_unary re in; } Imaginary_item = class Menuaction "_Imaginary" "extract imaginary part of complex" { action in = map_unary im in; } } Complex_build_item = class Menuaction "_Build" "join a and b to make a complex" { action a b = map_binary comma a b; } sep1 = Menuseparator; Polar_item = class Menuaction "_Polar" "convert real and imag to amplitude and phase" { action a = map_unary polar a; } Rectangular_item = class Menuaction "_Rectagular" ("convert (amplitude, phase) image to rectangular " ++ "coordinates") { action x = map_unary rectangular x; } sep2 = Menuseparator; Conjugate_item = class Menuaction "_Conjugate" "invert imaginary part" { action x = map_unary conj x; } } Math_boolean_item = class Menupullright "_Boolean" "bitwise boolean operations for integer objects" { And_item = class Menuaction "_AND" "bitwise AND of a and b" { action a b = map_binary bitwise_and a b; } Or_item = class Menuaction "_OR" "bitwise OR of a and b" { action a b = map_binary bitwise_or a b; } Eor_item = class Menuaction "_XOR" "bitwise exclusive or of a and b" { action a b = map_binary eor a b; } Not_item = class Menuaction "_NOT" "invert a" { action a = map_unary not a; } sep1 = Menuseparator; Right_shift_item = class Menuaction "Shift _Right" "shift a right by b bits" { action a b = map_binary right_shift a b; } Left_shift_item = class Menuaction "Shift _Left" "shift a left by b bits" { action a b = map_binary left_shift a b; } sep2 = Menuseparator; If_then_else_item = class Menuaction "_If Then Else" "b where a is non-zero, c elsewhere" { action a b c = map_trinary ite a b c { // can't use if_then_else, we need a true trinary ite a b c = if a then b else c; } } Bandand_item = Image_band_item.Bandand_item; Bandor_item = Image_band_item.Bandor_item; } Math_relational_item = class Menupullright "R_elational" "comparison operations" { Equal_item = class Menuaction "_Equal to" "test a equal to b" { action a b = map_binary equal a b; } Not_equal_item = class Menuaction "_Not Equal to" "test a not equal to b" { action a b = map_binary not_equal a b; } sep1 = Menuseparator; More_item = class Menuaction "_More Than" "test a strictly greater than b" { action a b = map_binary more a b; } Less_item = class Menuaction "_Less Than" "test a strictly less than b" { action a b = map_binary less a b; } sep2 = Menuseparator; More_equal_item = class Menuaction "M_ore Than or Equal to" "test a greater than or equal to b" { action a b = map_binary more_equal a b; } Less_equal_item = class Menuaction "L_ess Than or Equal to" "test a less than or equal to b" { action a b = map_binary less_equal a b; } } Math_list_item = class Menupullright "L_ist" "operations on lists" { Head_item = class Menuaction "_Head" "first element in list" { action x = map_unary hd x; } Tail_item = class Menuaction "_Tail" "list without the first element" { action x = map_unary tl x; } Last_item = class Menuaction "_Last" "last element in list" { action x = map_unary last x; } Init_item = class Menuaction "_Init" "list without the last element" { action x = map_unary init x; } sep1 = Menuseparator; Reverse_item = class Menuaction "_Reverse" "reverse order of elements in list" { action x = map_unary reverse x; } Sort_item = class Menuaction "_Sort" "sort list into ascending order" { action x = map_unary sort x; } Make_set_item = class Menuaction "_Make Set" "remove duplicates from list" { action x = map_unary mkset equal x; } Transpose_list_item = class Menuaction "Tr_anspose" "exchange rows and columns in a list of lists" { action x = map_unary transpose x; } Concat_item = class Menuaction "_Concat" "flatten a list of lists into a single list" { action l = map_unary concat l; } sep2 = Menuseparator; Length_item = class Menuaction "L_ength" "find the length of list" { action x = map_unary len x; } Subscript_item = class Menuaction "S_ubscript" "return element n from list (index from zero)" { action n x = map_binary subscript n x; } Take_item = class Menuaction "_Take" "take the first n elements of list x" { action n x = map_binary take n x; } Drop_item = class Menuaction "_Drop" "drop the first n elements of list x" { action n x = map_binary drop n x; } sep3 = Menuseparator; Join_item = class Menuaction "_Join" "join two lists end to end" { action a b = map_binary join a b; } Difference_item = class Menuaction "_Difference" "difference of two lists" { action a b = map_binary difference a b; } Cons_item = class Menuaction "C_ons" "put element a on the front of list x" { action a x = map_binary cons a x; } Zip_item = class Menuaction "_Zip" "join two lists, pairwise" { action a b = map_binary zip2 a b; } } Math_round_item = class Menupullright "_Round" "various rounding operations" { /* smallest integral value not less than x */ Ceil_item = class Menuaction "_Ceil" "smallest integral value not less than x" { action x = map_unary ceil x; } Floor_item = class Menuaction "_Floor" "largest integral value not greater than x" { action x = map_unary floor x; } Rint_item = class Menuaction "_Round to Nearest" "round to nearest integer" { action x = map_unary rint x; } } Math_fourier_item = class Menupullright "_Fourier" "Fourier transform" { Forward_item = class Menuaction "_Forward" "fourier transform of image" { action a = map_unary (rotquad @ fwfft) a; } Reverse_item = class Menuaction "_Reverse" "inverse fourier transform of image" { action a = map_unary (invfft @ rotquad) a; } Rotate_quadrants_item = class Menuaction "Rotate _Quadrants" "rotate quadrants" { action a = map_unary rotquad a; } } Math_stats_item = class Menupullright "_Statistics" "measure various statistics of objects" { Value_item = class Menuaction "_Value" "value of point in object" { action a = class _result { _vislevel = 3; position = Expression "Coordinate" (0, 0); _result = map_binary point position.expr a; } } Mean_item = class Menuaction "_Mean" "arithmetic mean value" { action a = map_unary mean a; } Gmean_item = class Menuaction "_Geometric Mean" "geometric mean value" { action a = map_unary meang a; } Zmean_item = class Menuaction "_Zero-excluding Mean" "mean value of non-zero elements" { action a = map_unary meanze a; } Deviation_item = class Menuaction "_Standard Deviation" "standard deviation of object" { action a = map_unary deviation a; } Zdeviation_item = class Menuaction "Z_ero-excluding Standard Deviation" "standard deviation of non-zero elements" { action a = map_unary deviationze a; } Skew_item = class Menuaction "S_kew" "skew of image or list or vector" { action a = map_unary skew a; } Kurtosis_item = class Menuaction "Kurtosis" "kurtosis of image or list or vector" { action a = map_unary kurtosis a; } Stats_item = class Menuaction "Ma_ny Stats" "calculate many stats in a single pass" { action a = map_unary stats a; } sep1 = Menuseparator; Max_item = class Menuaction "M_aximum" "maximum of object" { action a = map_unary max a; } Min_item = class Menuaction "M_inimum" "minimum of object" { action a = map_unary min a; } Maxpos_item = class Menuaction "_Position of Maximum" "position of maximum in object" { action a = map_unary maxpos a; } Minpos_item = class Menuaction "P_osition of Minimum" "position of minimum in object" { action a = map_unary minpos a; } Gravity_item = class Menuaction "Centre of _Gravity" "position of centre of gravity of histogram" { action a = map_unary gravity a; } sep2 = Menuseparator; Count_set_item = class Menuaction "_Non-zeros" "number of non-zero elements in object" { action a = map_unary cset a { cset i = (mean (i != 0) * i.width * i.height) / 255; } } Count_clear_item = class Menuaction "_Zeros" "number of zero elements in object" { action a = map_unary cclear a { cclear i = (mean (i == 0) * i.width * i.height) / 255; } } Count_edges_item = class Menuaction "_Edges" "count average edges across or down image" { action x = class _result { _vislevel = 3; edge = Option "Count" [ "Horizontal lines", "Vertical lines" ] 0; _result = map_unary process x { process image = Number (edge.labels?edge) (im_cntlines image.value edge.value); } } } sep3 = Menuseparator; Linear_regression_item = class Menuaction "_Linear Regression" "fit a line to a set of points" { action xes yes = linreg xes yes; } Weighted_linear_regression_item = class Menuaction "_Weighted Linear Regression" "fit a line to a set of points and deviations" { action xes yes devs = linregw xes yes devs; } Cluster_item = class Menuaction "_Cluster" "cluster a list of numbers" { action l = class { _vislevel = 3; thresh = Expression "Threshold" 10; [_r, _w] = cluster thresh.expr l; result = _r; weights = _w; } } } Math_base_item = class Menupullright "Bas_e" "convert number bases" { Hexadecimal_item = class Menuaction "_Hexadecimal" "convert to hexadecimal (base 16)" { action a = map_unary (print_base 16) a; } Binary_item = class Menuaction "_Binary" "convert to binary (base 2)" { action a = map_unary (print_base 2) a; } Octal_item = class Menuaction "_Octal" "convert to octal (base 8)" { action a = map_unary (print_base 8) a; } } nip2-8.7.0/share/nip2/compat/8.4/Tasks.def0000644000175000017500000006407313224651032014642 00000000000000Tasks_capture_item = class Menupullright "_Capture" "useful stuff for capturing and preprocessing images" { Csv_import_item = class Menuaction "_CSV Import" "read a file of comma-separated values" { action = class _result { _vislevel = 3; path = Pathname "File to load" "empty"; start_line = Expression "Start at line" 1; rows = Expression "Lines to read (-1 for whole file)" (-1); whitespace = String "Whitespace characters" " \""; separator = String "Separator characters" ",;\t"; _result = Image blank, path.value == "empty" = Image (im_csv2vips filename) { filename = search (expand path.value) ++ ":" ++ "skip:" ++ print (start_line.expr - 1) ++ "," ++ "whi:" ++ escape whitespace.value ++ "," ++ "sep:" ++ escape separator.value ++ "," ++ "line:" ++ print rows.expr; // prefix any ',' with a '\' in the separators line escape x = foldr prefix [] x { prefix x l = '\\' : x : l, x == ',' = x : l; } blank = image_new 1 1 1 Image_format.DOUBLE Image_coding.NOCODING Image_type.B_W 0 0 0; } } } Raw_import_item = class Menuaction "_Raw Import" "read a file of binary values" { action = class _result { _vislevel = 3; path = Pathname "File to load" "empty"; across = Expression "Pixels across" 100; down = Expression "Pixels down" 100; bytes = Expression "Bytes per pixel" 3; skip = Expression "Skip over initial bytes" 0; _result = Image blank, path.value == "empty" = Image (im_binfile path.value across.expr down.expr bytes.expr skip.expr) { blank = image_new 1 1 1 Image_format.DOUBLE Image_coding.NOCODING Image_type.B_W 0 0 0; } } } // interpret Analyze header for layout and calibration Analyze7_header_item = class Menuaction "_Interpret Analyze 7 Header" "examine the Analyze header and set layout and value" { action x = x''' { // read bits of header dim n = get_header ("dsr-image_dimension.dim[" ++ print n ++ "]"); dim0 = dim 0 x; dim1 = dim 1 x; dim2 = dim 2 x; dim3 = dim 3 x; dim4 = dim 4 x; dim5 = dim 5 x; dim6 = dim 6 x; dim7 = dim 7 x; glmax = get_header "dsr-image_dimension.glmax" x; cal_max = get_header "dsr-image_dimension.cal_max" x; // oops, now a nop x' = x; // lay out higher dimensions width-ways x'' = grid dim2 dim3 1 x', dim0 == 3 = grid dim2 dim3 dim4 x', dim0 == 4 = grid (dim2 * dim4) dim5 1 (grid dim2 dim3 dim4) x', dim0 == 5 = grid (dim2 * dim4) dim5 dim6 (grid dim2 dim3 dim4) x', dim0 == 6 = grid (dim2 * dim4 * dim6) dim7 1 (grid (dim2 * dim4) dim5 dim6 (grid dim2 dim3 dim4)) x', dim0 == 7 = error (_ "unsupported dimension " ++ dim0); // multiply by scale factor to get kBeq x''' = x'' * (cal_max / glmax); } } Video_item = class Menuaction "Capture _Video Frame" "capture a frame of still video" { // shortcut to prefs prefs = Workspaces.Preferences; action = class _result { _vislevel = 3; device = prefs.VIDEO_DEVICE; channel = Option "Input channel" [ "TV", "Composite 1", "Composite 2", "Composite 3" ] prefs.VIDEO_CHANNEL; b = Scale "Brightness" 0 32767 prefs.VIDEO_BRIGHTNESS; col = Scale "Colour" 0 32767 prefs.VIDEO_COLOUR; con = Scale "Contrast" 0 32767 prefs.VIDEO_CONTRAST; hue = Scale "Hue" 0 32767 prefs.VIDEO_HUE; frames = Scale "Frames to average" 0 100 prefs.VIDEO_FRAMES; mono = Toggle "Monochrome grab" prefs.VIDEO_MONO; crop = Toggle "Crop image" prefs.VIDEO_CROP; // grab, but hide it ... if we let the crop edit _raw_grab = Image (im_video_v4l1 device channel.value b.value col.value con.value hue.value frames.value); edit_crop = Region _raw_grab left top width height { left = prefs.VIDEO_CROP_LEFT; top = prefs.VIDEO_CROP_TOP; width = min_pair prefs.VIDEO_CROP_WIDTH (_raw_grab.width + left); height = min_pair prefs.VIDEO_CROP_HEIGHT (_raw_grab.height + top); } aspect_ratio = Expression "Stretch vertically by" prefs.VIDEO_ASPECT; _result = frame' { frame = edit_crop, crop = _raw_grab; frame' = colour_transform_to Image_type.B_W frame, mono = frame; } } } Smooth_image_item = class Menuaction "_Smooth" "remove small features from image" { action in = class _result { _vislevel = 3; feature = Scale "Minimum feature size" 1 50 20; _result = map_unary (smooth feature.value) in; } } Light_correct_item = class Menuaction "_Flatfield" "use white image w to flatfield image i" { action w i = map_binary wc w i { wc w i = clip2fmt i.format (w' * i) { fac = mean w / max w; w' = fac * (max w / w); } } } Image_rank_item = Filter_rank_item.Image_rank_item; Tilt_item = Filter_tilt_item; sep1 = Menuseparator; White_balance_item = class Menuaction "_White Balance" "use average of small image to set white of large image" { action a b = class _result { _vislevel = 3; white_hint = "Set image white to:"; white = Colour_picker "Lab" [100, 0, 0]; _result = map_binary wb a b { wb a b = colour_transform_to (get_type image) image_xyz' { area x = x.width * x.height; larger x y = area x > area y; [image, patch] = sortc larger [a, b]; to_xyz = colour_transform_to Image_type.XYZ; // white balance in XYZ patch_xyz = to_colour (to_xyz patch); white_xyz = to_xyz white; facs = (mean patch_xyz / mean white_xyz) * (white_xyz / patch_xyz); image_xyz = to_xyz image; image_xyz' = image_xyz * facs; } } } } Gamma_item = Image_levels_item.Gamma_item; Tone_item = Image_levels_item.Tone_item; sep2 = Menuseparator; Crop_item = Image_crop_item; Rotate_item = Image_transform_item.Rotate_item; Flip_item = Image_transform_item.Flip_item; Resize_item = Image_transform_item.Resize_item; Rubber_item = Image_transform_item.Image_rubber_item; sep3 = Menuseparator; ICC_item = Colour_icc_item; Temp_item = Colour_temperature_item; Find_calib_item = class Menuaction "Find _Colour Calibration" "find an RGB -> XYZ transform from an image of a colour chart" { action image = class _result { _check_args = [ [image, "image", check_Image] ]; _vislevel = 3; measure = Scale (_ "Measure area (%)") 1 100 50; sample = measure_draw 6 4 (to_real measure) image; // get macbeth data file to use macbeth = Pathname "Pick a Macbeth data file" "$VIPSHOME/share/$PACKAGE/data/macbeth_lab_d65.mat"; mode = Option "Input LUT" [ "Linearize from chart greyscale", "Fit intercept from chart greyscale", "Linear input, set brightness from chart", "Linear input" ] 0; // get max of input image _max_value = Image_format.maxval image.format; // measure chart image _camera = measure_sample 6 4 (to_real measure) image; // load true values _true_Lab = Matrix_file macbeth.value; _true_XYZ = colour_transform Image_type.LAB Image_type.XYZ _true_Lab; // get Ys of greyscale _true_grey_Y = map (extract 1) (drop 18 _true_XYZ.value); // camera greyscale (all bands) _camera_grey = drop 18 _camera.value; // normalise both to 0-1 and combine _camera_grey' = map (map (multiply (1 / _max_value))) _camera_grey; _true_grey_Y' = map (multiply (1 / 100)) _true_grey_Y; _comb = Matrix (map2 cons _true_grey_Y' _camera_grey'), mode == 0 = Matrix [0: intercepts, replicate (_camera.width + 1) 1], mode == 1 = Matrix [[0, 0], [1, 1]] { intercepts = [(linreg _true_grey_Y' cam).intercept :: cam <- transpose _camera_grey']; } // make a linearising lut ... zero on left _linear_lut = im_invertlut _comb (_max_value + 1); // and display it // plot from 0 explicitly so we see the effect of mode1 (intercept // from greyscale) linearising_lut = Plot [$ymin => 0] _linear_lut; // map an image though the lineariser linear x = hist_map linearising_lut.value x, mode == 0 || mode == 1 = x; // map the chart measurements though the lineariser _camera' = (to_matrix @ linear @ to_image) _camera; // solve for RGB -> XYZ // normalise: the 2nd row is what makes Y, so divide by that to // get Y in 0-1. _pinv = (transpose _camera' * _camera') ** -1; _full_M = transpose (_pinv * (transpose _camera' * _true_XYZ)); M = _full_M / scale; scale = sum _full_M.value?1; // now turn the camera to LAB and calculate dE76 _camera'' = (to_matrix @ colour_transform Image_type.XYZ Image_type.LAB @ recomb M @ multiply scale @ to_image) _camera'; _dEs = map abs_vec (_camera'' - _true_Lab).value; avg_dE76 = mean _dEs; _max_dE = foldr max_pair 0 _dEs; _worst = index (equal _max_dE) _dEs; worst_patch = name _worst ++ " (patch " ++ print (_worst + 1) ++ ", " ++ print _max_dE ++ " dE)" { name i = macbeth_names?i, i >= 0 && i < len macbeth_names = "Unknown"; } // normalise brightness ... in linear mode, we optionally don't // set the brightness from the Macbeth chart norm x = x * scale, mode != 3 = x; // convert RGB camera to Lab _result = (Image @ colour_transform Image_type.XYZ Image_type.LAB @ norm @ recomb M @ cast_float @ linear) image.value; } } Apply_calib_item = class Menuaction "_Apply Colour Calibration" "apply an RGB -> LAB transform to an image" { action a b = class (map_binary process a b) { process a b = result, is_instanceof calib_name calib && is_Image image = error (_ "bad arguments to " ++ "Calibrate_image") { // the name of the calib object we need calib_name = "Tasks_capture_item.Find_calib_item.action"; // get the Calibrate_chart arg first [image, calib] = sortc (const (is_instanceof calib_name)) [a, b]; result = (Image @ colour_transform Image_type.XYZ Image_type.LAB @ calib.norm @ recomb calib.M @ cast_float @ calib.linear) image.value; } } } sep4 = Menuseparator; Graph_hist_item = Hist_find_item; Graph_bands_item = class Menuaction "Plot _Bands" "show image bands as a graph" { action x = class _result { _vislevel = 3; style = Option_enum "Style" Plot_style.names "Line"; auto = Toggle "Auto Range" true; ymin = Expression "Y range minimum" 0; ymax = Expression "Y range maximum" 1; _result = Plot options (to_image (bands (image x))).value { options = [$style => style.value] ++ if auto then [] else [$ymin => ymin.expr, $ymax => ymax.expr]; // try to make something image-like from it image x = extract_area x.left x.top 1 1 x.image, is_Mark x = get_image x, has_image x = get_image (to_image x); // get as [[1],[2],[3]] bands x = transpose [map mean (bandsplit x)]; } } } } Tasks_mosaic_item = class Menupullright "_Mosaic" "build image mosaics" { /* Check and group a point list by image. */ mosaic_sort_test l = error "mosaic: not all points", !is_listof is_Mark l = error "mosaic: points not on two images", !is_list_len 2 images = error "mosaic: images do not match in format and coding", !all_equal (map get_format l) || !all_equal (map get_coding l) = error "mosaic: not same number of points on each image", !foldr1 equal (map len l') = l' { // test for all elements of a list equal all_equal l = all (map (equal (hd l)) (tl l)); // all the different images images = mkset pointer_equal (map get_image l); // find all points defined on image test_image image p = (get_image p) === image; find l image = filter (test_image image) l; // group point list by image l' = map (find l) images; } /* Sort a point group to get right before left, and within each group to * get above before below. */ mosaic_sort_lr l = l'' { // sort to get upper point first above a b = a.top < b.top; l' = map (sortc above) l; // sort to get right group before left group right a b = a?0.left > b?0.left; l'' = sortc right l'; } /* Sort a point group to get top before bottom, and within each group to * get left before right. */ mosaic_sort_tb l = l'' { // sort to get upper point first left a b = a.left < b.left; l' = map (sortc left) l; // sort to get right group before left group below a b = a?0.top > b?0.top; l'' = sortc below l'; } /* Put 'em together! Group by image, sort vertically (or horizontally) with * one of the above, transpose to get pairs matched up, and flatten again. */ mosaic_sort fn = concat @ transpose @ fn @ mosaic_sort_test; Mosaic_1point_item = class Menupullright "_One Point" "join two images with a single tie point" { check_ab_args a b = [ [a, "a", check_Mark], [b, "b", check_Mark] ]; // shortcut to prefs prefs = Workspaces.Preferences; search_area = prefs.MOSAIC_WINDOW_SIZE; object_size = prefs.MOSAIC_OBJECT_SIZE; blend_width_widget = Scale "Maximum blend width" 0 100 prefs.MOSAIC_MAX_BLEND_WIDTH; refine_widget = Toggle "Refine selected tie-points" prefs.MOSAIC_REFINE; lr_mos _refine a b = class Image _result { _check_args = check_ab_args a b; bw = blend_width_widget; refine = _refine; _result = im_lrmosaic a'.image.value b'.image.value 0 a'.left a'.top b'.left b'.top (object_size / 2) (search_area / 2) 0 bw.value, refine = im_lrmerge a'.image.value b'.image.value (b'.left - a'.left) (b'.top - a'.top) bw.value { [a', b'] = mosaic_sort mosaic_sort_lr [a, b]; } } tb_mos _refine a b = class Image _result { _check_args = check_ab_args a b; bw = blend_width_widget; refine = _refine; _result = im_tbmosaic a'.image.value b'.image.value 0 a'.left a'.top b'.left b'.top (object_size / 2) (search_area / 2) 0 bw.value, refine = im_tbmerge a'.image.value b'.image.value (b'.left - a'.left) (b'.top - a'.top) bw.value { [a', b'] = mosaic_sort mosaic_sort_tb [a, b]; } } Left_right_item = class Menuaction "_Left to Right" "join two images left-right with a single tie point" { action a b = lr_mos refine_widget a b; } Top_bottom_item = class Menuaction "_Top to Bottom" "join two images top-bottom with a single tie point" { action a b = tb_mos refine_widget a b; } sep1 = Menuseparator; Left_right_manual_item = class Menuaction "Manual L_eft to Right" "join left-right, no auto-adjust of tie points" { action a b = lr_mos false a b; } Top_bottom_manual_item = class Menuaction "Manual T_op to Bottom" "join top-bottom, no auto-adjust of tie points" { action a b = tb_mos false a b; } } Mosaic_2point_item = class Menupullright "_Two Point" "join two images with two tie points" { check_abcd_args a b c d = [ [a, "a", check_Mark], [b, "b", check_Mark], [c, "c", check_Mark], [d, "d", check_Mark] ]; // shortcut to prefs prefs = Workspaces.Preferences; search_area = prefs.MOSAIC_WINDOW_SIZE; object_size = prefs.MOSAIC_OBJECT_SIZE; blend_width_widget = Scale "Maximum blend width" 0 100 prefs.MOSAIC_MAX_BLEND_WIDTH; refine_widget = Toggle "Refine selected tie-points" prefs.MOSAIC_REFINE; Left_right_item = class Menuaction "_Left to Right" "join two images left-right with a pair of tie points" { action a b c d = class Image _result { _check_args = check_abcd_args a b c d; bw = blend_width_widget; refine = refine_widget; _result = im_lrmosaic1 a'.image.value b'.image.value 0 a'.left a'.top b'.left b'.top c'.left c'.top d'.left d'.top (object_size / 2) (search_area / 2) 0 bw.value, refine = im_lrmerge1 a'.image.value b'.image.value a'.left a'.top b'.left b'.top c'.left c'.top d'.left d'.top bw.value { [a', b', c', d'] = mosaic_sort mosaic_sort_lr [a, b, c, d]; } } } Top_bottom_item = class Menuaction "_Top to Bottom" "join two images top-bottom with a pair of tie points" { action a b c d = class Image _result { _check_args = check_abcd_args a b c d; bw = blend_width_widget; refine = refine_widget; _result = im_tbmosaic1 a'.image.value b'.image.value 0 a'.left a'.top b'.left b'.top c'.left c'.top d'.left d'.top (object_size / 2) (search_area / 2) 0 bw.value, refine = im_tbmerge1 a'.image.value b'.image.value a'.left a'.top b'.left b'.top c'.left c'.top d'.left d'.top bw.value { [a', b', c', d'] = mosaic_sort mosaic_sort_tb [a, b, c, d]; } } } } sep1 = Menuseparator; Balance_item = class Menuaction "Mosaic _Balance" "disassemble mosaic, scale brightness to match, reassemble" { action x = map_unary balance x { balance x = oo_unary_function balance_op x, is_class x = im_global_balancef x Workspaces.Preferences.MOSAIC_BALANCE_GAMMA, is_image x = error (_ "bad arguments to " ++ "balance") { balance_op = Operator "balance" balance Operator_type.COMPOUND_REWRAP false; } } } //////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// Manual_balance_item = class Menupullright "Manual B_alance" "balance tonality of user defined areas" { prefs = Workspaces.Preferences; //////////////////////////////////////////////////////////////////////////////////// Balance_find_item = class Menuaction "_Find Values" "calculates values required to scale and offset balance user defined areas in a given image" /* Outputs a matrix of scale and offset values. Eg. Values required to balance the secondary * structure in an X-ray image. Takes an X-ray image an 8-bit control mask and a list of * 8-bit reference masks, where the masks are white on a black background. */ { action im_in m_control m_group = class Matrix values{ _vislevel = 1; _control_im = if m_control then im_in else 0; _control_meanmax = so_meanmax _control_im; _group_check = is_Group m_group; _m_list = m_group.value, _group_check = m_group; process m_current mat_in = mat_out {so_values = so_calculate _control_meanmax im_in m_current; mat_out = join [so_values] mat_in;} values = (foldr process [] _m_list); } } //////////////////////////////////////////////////////////////////////////////////// Balance_check_item = class Menuaction "_Check Values" "allows calculated set of scale and offset values to be checked and adjusted if required" /* Outputs adjusted matrix of scale and offset values and scale and offset image maps. * Eg. Check values required to balance the secondary structure in an X-ray image. * Takes an X-ray image an 8-bit control mask and a list of 8-bit reference masks, * where the masks are white on a black background. */ { action im_in m_matrix m_group = class Image value { _vislevel = 3; blur = Scale "Blur" 1 10 1; _blur = (blur.value/2 + 0.5), blur.value > 1 = 1; _group_check = is_Group m_group; _m_list = m_group.value, _group_check = m_group; adjust = Matrix_rec mat_a { no_masks = len _m_list; mat_a = replicate no_masks [0, 0]; } // Apply the user defined adjustments to the inputted matrix of scale and offset values _adjusted = map2 fn_adjust m_matrix.value adjust.value; fn_adjust a b = [(a?0 + b?0), (a?1 + (a?1 * b?1))]; _scaled_ims = map (fn_so_apply im_in) _adjusted; fn_so_apply im so = map_unary adj im {adj im = im * (so?0) + (so?1);} _im_pairs = zip2 _m_list _scaled_ims; // Prepare black images as starting point. //////////// _blank = image_new (_m_list?0).width (_m_list?0).height 1 6 Image_coding.NOCODING 1 0 0 0; _pair_start = [(_blank + 1), _blank]; Build = Toggle "Build Scale and Offset Correction Images" false; Output = class { _vislevel = 1; scale_im = _build?0; offset_im = _build?1; so_values = Matrix _adjusted; _build = [Image so_images?0, Image so_images?1], Build = ["Scale image not built.", "Offset image not built."] { m_list' = transpose [_m_list]; m_all = map2 join m_list' _adjusted; so_images = foldr process_2 _pair_start m_all; } } value = (foldr process_1 im_in_b _im_pairs).value {im_in_b = map_unary cast_float im_in;} process_1 m_current im_start = im_out { bl_mask = convsep (matrix_blur _blur) (get_image m_current?0); blended_im = im_blend bl_mask (m_current?1).value im_start.value; im_out = Image (clip2fmt im_start.format blended_im); } // Process for building scale and offset image. process_2 current p_start = p_out { im_s = if ((current?0) > 128) then current?1 else _blank; im_o = if ((current?0) > 128) then current?2 else _blank; im_s' = convsep (matrix_blur _blur) (im_s != 0); im_o' = convsep (matrix_blur _blur) (im_o != 0); im_s'' = im_blend im_s'.value im_s.value p_start?0; im_o'' = im_blend im_o'.value im_o.value p_start?1; p_out = [im_s'', im_o'']; } } } //////////////////////////////////////////////////////////////////////////////////// Balance_apply_item = class Menuaction "_Apply Values" "apply scale and offset corrections, defined as image maps, to a given image" /* Outputs the balanced image. Eg. Balance the secondary structure in an X-ray image. Takes an * X-ray image an 32-bit float scale image and a 32-bit offset image. */ { action im_in scale_im offset_im = class Image value { _vislevel = 1; xfactor = im_in.width/scale_im.width; yfactor = im_in.height/scale_im.height; _scale_im = resize Kernel_linear xfactor yfactor scale_im; _offset_im = resize Kernel_linear xfactor yfactor offset_im; value = get_image ( clip2fmt im_in.format ( ( im_in * _scale_im ) + _offset_im ) ); } } } Tilt_item = Filter_tilt_item; sep2 = Menuseparator; Rebuild_item = class Menuaction "_Rebuild" "disassemble mosaic, substitute image files and reassemble" { action x = class _result { _vislevel = 3; old = String "In each filename, replace" "foo"; new = String "With" "bar"; _result = map_unary remosaic x { remosaic image = Image (im_remosaic image.value old.value new.value); } } } sep3 = Menuseparator; Clone_area_item = class Menuaction "_Clone Area" "replace dark or light section of im1 with pixels from im2" { action im1 im2 = class _result { _check_args = [ [im1, "im1", check_Image], [im2, "im2", check_Image] ]; _vislevel = 3; /* Region on first image placed in the top left hand corner, * positioned and size relative to the height and width of im1. */ r1 = Region_relative im1 0.05 0.05 0.05 0.05; /* Mark on second image placed in the top left hand corner, * positioned relative to the height and width of im2. Used to * define _r2, the region from which the section of image is cloned * from. */ p2 = Mark_relative im2 0.05 0.05; _r2 = Region im2 p2.left p2.top r1.width r1.height; mask = [r1 <= Options.sc, r1 >= Options.sc]?(Options.replace); Options = class { _vislevel = 3; pause = Toggle "Pause process" true; /* Option toggle used to define whether the user is * replacing a dark or a light area. */ replace = Option "Replace" [ "A Dark Area", "A Light Area" ] 1; // Used to select the area to be replaced. sc = Scale "Scale cutoff" 0.01 mx (mx / 2) {mx = Image_format.maxval im1.format;} //Allows replacement with scale&offset balanced gaussian noise. balance = Toggle "Balance cloned data to match surroundings." true; //Allows replacement with scale&offset balanced //gaussian noise. process = Toggle "Replace area with Gaussian noise." false; } _result = im1, Options.pause = Image (im_insert im1.value patch r1.left r1.top) { r2 = Region im2 p2.left p2.top r1.width r1.height; ref_meanmax = so_meanmax (if mask then 0 else r1); mask8 = Matrix_mor [[255, 255, 255], [255, 255, 255], [255, 255, 255]]; mask_a = map_unary (dilate mask8) mask; mask_b = convsep (matrix_blur 2) mask_a; patch = so_balance ref_meanmax r1 r2 mask_b Options.process, Options.balance = so_balance ref_meanmax r1 r2 mask_b Options.process, Options.process = im_blend (get_image mask_b) (get_image r2) (get_image r1); } } } } Tasks_frame_item = Frame_item; Tasks_print_item = class Menupullright "_Print" "useful stuff for image output" { Rotate_item = Image_transform_item.Rotate_item; Flip_item = Image_transform_item.Flip_item; Resize_item = Image_transform_item.Resize_item; Tone_item = Image_levels_item.Tone_item; Sharpen_item = class Menuaction "_Sharpen" "unsharp filter tuned for typical inkjet printers" { action x = class _result { _vislevel = 3; target_dpi = Option "Sharpen for print at" [ "400 dpi", "300 dpi", "150 dpi", "75 dpi" ] 1; _result = map_unary process x { process image = sharpen params?0 params?1 params?2 params?3 params?4 params?5 (colour_transform_to Image_type.LABQ image) { // sharpen params for various dpi // just change the size of the area we search param_table = [ [7, 2.5, 40, 20, 0.5, 1.5], [5, 2.5, 40, 20, 0.5, 1.5], [3, 2.5, 40, 20, 0.5, 1.5], [11, 2.5, 40, 20, 0.5, 1.5] ]; params = param_table?target_dpi; } } } } sep1 = Menuseparator; Temp_item = Colour_temperature_item; ICC_item = Colour_icc_item; } nip2-8.7.0/share/nip2/compat/8.4/_types.def0000644000175000017500000007115113224651032015053 00000000000000/* A list of things. Do automatic iteration of unary and binary operators on * us. * List [1, 2] + [2, 3] -> List [3, 5] * hd (List [2, 3]) -> 2 * List [] == [] -> true */ List value = class _Object { _check_args = [ [value, "value", check_list] ]; // methods oo_binary_table op x = [ [apply2 op value x', op.op_name == "subscript" || op.op_name == "subscript'" || op.op_name == "equal" || op.op_name == "equal'"], [this.List (apply2 op value x'), op.op_name == "join" || op.op_name == "join'"], [this.List (map2 (apply2 op) value x'), is_list x'], [this.List (map (apply2 op' x) value), true] ] ++ super.oo_binary_table op x { op' = oo_converse op; // strip the List wrapper, if any x' = x.value, is_List x = x; apply2 op x1 x2 = oo_binary_function op x1 x2, is_class x1 = oo_binary'_function op x1 x2, is_class x2 = op.fn x1 x2; }; oo_unary_table op = [ [apply value, op.op_name == "hd" || op.op_name == "tl"], [this.List (map apply value), true] ] ++ super.oo_unary_table op { apply x = oo_unary_function op x, is_class x = op.fn x; } } /* A group of things. Loop the operation over the group. */ Group value = class _Object { _check_args = [ [value, "value", check_list] ]; // methods oo_binary_table op x = [ // if_then_else is really a trinary operator [map_trinary ite this x?0 x?1, op.op_name == "if_then_else"], [map_binary op.fn this x, is_Group x], [map_unary (\a op.fn a x) this, true] ] ++ super.oo_binary_table op x; oo_unary_table op = [ [map_unary op.fn this, true] ] ++ super.oo_unary_table op; // we can't call map_trinary directly, since it uses Group and we // don't support mutually recursive top-level functions :-( // copy-paste it here, keep in sync with the version in _stdenv map_nary fn args = fn args, groups == [] = Group (map process [0, 1 .. shortest - 1]) { groups = filter is_Group args; shortest = foldr1 min_pair (map (len @ get_value) groups); process n = NULL, any (map (is_noval n) args) = map_nary fn (map (extract n) args) { extract n arg = arg.value?n, is_Group arg = arg; is_noval n arg = is_Group arg && arg.value?n == NULL; } } // need ite as a true trinary ite a b c = if a then b else c; map_unary fn a = map_nary (list_1ary fn) [a]; map_binary fn a b = map_nary (list_2ary fn) [a, b]; map_trinary fn a b c = map_nary (list_3ary fn) [a, b, c]; } /* Single real number ... eg slider. */ Real value = class _Object { _check_args = [ [value, "value", check_real] ]; // methods oo_binary_table op x = [ [this.Real (op.fn this.value x.value), is_Real x && op.type == Operator_type.ARITHMETIC], [this.Real (op.fn this.value x), is_real x && op.type == Operator_type.ARITHMETIC], [op.fn this.value x.value, is_Real x && op.type == Operator_type.RELATIONAL], [op.fn this.value x, !is_class x] ] ++ super.oo_binary_table op x; oo_unary_table op = [ [this.Real (op.fn this.value), op.type == Operator_type.ARITHMETIC], [op.fn this.value, true] ] ++ super.oo_unary_table op; } /* Single bool ... eg Toggle. */ Bool value = class _Object { _check_args = [ [value, "value", check_bool] ]; // methods oo_binary_table op x = [ [op.fn this.value x, op.op_name == "if_then_else"], [this.Bool (op.fn this.value x.value), is_Bool x], [this.Bool (op.fn this.value x), is_bool x] ] ++ super.oo_binary_table op x; oo_unary_table op = [ [this.Bool (op.fn this.value), op.type == Operator_type.ARITHMETIC || op.type == Operator_type.RELATIONAL], [op.fn this.value, true] ] ++ super.oo_unary_table op; } /* An editable string. */ String caption value = class _Object { _check_args = [ [caption, "caption", check_string], [value, "value", check_string] ]; } /* An editable real number. */ Number caption value = class scope.Real value { _check_args = [ [caption, "caption", check_string] ]; Real x = this.Number caption x; } /* An editable expression. */ Expression caption expr = class (if is_class expr then expr else _Object) { _check_args = [ [caption, "caption", check_string], [expr, "expr", check_any] ]; } /* A ticking clock. */ Clock interval value = class scope.Real value { _check_args = [ [interval, "interval", check_real] ]; Real x = this.Clock interval x; } /* An editable filename. */ Pathname caption value = class _Object { _check_args = [ [caption, "caption", check_string], [value, "value", check_string] ]; } /* An editable fontname. */ Fontname caption value = class _Object { _check_args = [ [caption, "caption", check_string], [value, "value", check_string] ]; } /* Vector type ... just a finite list of real. Handy for wrapping an * argument to eg. im_lintra_vec. Make it behave like a single pixel image. */ Vector value = class _Object { _check_args = [ [value, "value", check_real_list] ]; bands = len value; // methods oo_binary_table op x = [ // Vector ++ Vector means bandwise join [this.Vector (op.fn this.value x.value), is_Vector x && (op.op_name == "join" || op.op_name == "join'")], [this.Vector (op.fn this.value [get_number x]), has_number x && (op.op_name == "join" || op.op_name == "join'")], // Vector ? number means extract element [op.fn this.value (get_real x), has_real x && (op.op_name == "subscript" || op.op_name == "subscript'")], // extra check for lengths equal [this.Vector (map_binaryl op.fn this.value x.value), is_Vector x && len value == len x.value && op.type == Operator_type.ARITHMETIC], [this.Vector (map_binaryl op.fn this.value (get_real x)), has_real x && op.type == Operator_type.ARITHMETIC], // need extra length check [this.Vector (map bool_to_real (map_binaryl op.fn this.value x.value)), is_Vector x && len value == len x.value && op.type == Operator_type.RELATIONAL], [this.Vector (map bool_to_real (map_binaryl op.fn this.value (get_real x))), has_real x && op.type == Operator_type.RELATIONAL], [this.Vector (op.fn this.value x.value), is_Vector x && len value == len x.value && op.type == Operator_type.COMPOUND_REWRAP], [x.Image (vec op'.op_name x.value value), is_Image x], [vec op'.op_name x value, is_image x], [op.fn this.value x, is_real x] ] ++ super.oo_binary_table op x { op' = oo_converse op; }; oo_unary_table op = [ [this.Vector (map_unaryl op.fn this.value), op.type == Operator_type.ARITHMETIC], [this.Vector (map bool_to_real (map_unaryl op.fn this.value)), op.type == Operator_type.RELATIONAL], [this.Vector (op.fn this.value), op.type == Operator_type.COMPOUND_REWRAP], [op.fn this.value, true] ] ++ super.oo_unary_table op; // turn an ip bool (or a number, for Vector) into VIPSs 255/0 bool_to_real x = 255, is_bool x && x = 255, is_number x && x != 0 = 0; } /* A rectangular array of real. */ Matrix_base value = class _Object { _check_args = [ [value, "value", check_matrix] ]; // calculate these from value width = len value?0; height = len value; // extract a rectanguar area extract left top width height = this.Matrix_base ((map (take width) @ map (drop left) @ take height @ drop top) value); // methods oo_binary_table op x = [ // mat multiply is special [this.Matrix_base mul.value, is_Matrix x && op.op_name == "multiply"], [this.Matrix_base mul'.value, is_Matrix x && op.op_name == "multiply'"], // mat divide is also special [this.Matrix_base div.value, is_Matrix x && op.op_name == "divide"], [this.Matrix_base div'.value, is_Matrix x && op.op_name == "divide'"], // power -1 means invert [this.Matrix_base inv.value, is_real x && x == -1 && op.op_name == "power"], [this.Matrix_base sq.value, is_real x && x == 2 && op.op_name == "power"], [error "matrix **-1 and **2 only", op.op_name == "power" || op.op_name == "power'"], // matrix op vector ... treat a vector as a 1 row matrix [this.Matrix_base (map (map_binaryl op'.fn x.value) this.value), is_Vector x && op.type == Operator_type.ARITHMETIC], [this.Matrix_base (map_binaryl op.fn this.value x.value), (is_Matrix x || is_Real x) && op.type == Operator_type.ARITHMETIC], [this.Matrix_base (map_binaryl op.fn this.value x), is_real x && op.type == Operator_type.ARITHMETIC], // compound ... don't do iteration [this.Matrix_base (op.fn this.value x.value), (is_Matrix x || is_Real x || is_Vector x) && op.type == Operator_type.COMPOUND_REWRAP], [op.fn this.value x, op.type == Operator_type.COMPOUND] ] ++ super.oo_binary_table op x { mul = im_matmul this x; mul' = im_matmul x this; div = im_matmul this (im_matinv x); div' = im_matmul x (im_matinv this); inv = im_matinv this; sq = im_matmul this this; op' = oo_converse op; } oo_unary_table op = [ [this.Matrix_base (map_unaryl op.fn this.value), op.type == Operator_type.ARITHMETIC], [this.Matrix_base (op.fn this.value), op.type == Operator_type.COMPOUND_REWRAP], [op.fn this.value, true] ] ++ super.oo_unary_table op; } /* How to display a matrix: text, sliders, toggles, or text plus scale/offset. */ Matrix_display = class { text = 0; slider = 1; toggle = 2; text_scale_offset = 3; is_display = member [text, slider, toggle, text_scale_offset]; } /* A matrix as VIPS sees them ... add scale, offset and filename. For nip, add * a display type as well to control how the widget renders. */ Matrix_vips value scale offset filename display = class scope.Matrix_base value { _check_args = [ [scale, "scale", check_real], [offset, "offset", check_real], [filename, "filename", check_string], [display, "display", check_matrix_display] ]; Matrix_base x = this.Matrix_vips x scale offset filename display; } /* A plain 'ol matrix which can be passed to VIPS. */ Matrix value = class Matrix_vips value 1 0 "" Matrix_display.text {} /* Specialised constructors ... for convolutions, recombinations and * morphologies. */ Matrix_con scale offset value = class Matrix_vips value scale offset "" Matrix_display.text_scale_offset {}; Matrix_rec value = class Matrix_vips value 1 0 "" Matrix_display.slider {}; Matrix_mor value = class Matrix_vips value 1 0 "" Matrix_display.toggle {}; Matrix_file filename = (im_read_dmask @ expand @ search) filename; /* A CIE colour ... a triple, plus a format (eg XYZ, Lab etc) */ Colour colour_space value = class scope.Vector value { _check_args = [ [colour_space, "colour_space", check_colour_space] ]; _check_all = [ [is_list_len 3 value, "len value == 3"] ]; Vector x = this.Colour colour_space x; // make a colour-ish thing from an image // back to Colour if we have another 3 band image // to a vector if bands > 1 // to a number otherwise itoc im = this.Colour nip_type (to_matrix im).value?0, bands == 3 = scope.Vector (map mean (bandsplit im)), bands > 1 = mean im { type = get_header "Type" im; bands = get_header "Bands" im; nip_type = Image_type.colour_spaces.lookup 1 0 type; } // methods oo_binary_table op x = [ [itoc (op.fn ((float) (to_image this).value) ((float) (to_image x).value)), // here REWRAP means go via image op.type == Operator_type.COMPOUND_REWRAP] ] ++ super.oo_binary_table op x; oo_unary_table op = [ [itoc (op.fn ((float) (to_image this).value)), op.type == Operator_type.COMPOUND_REWRAP] ] ++ super.oo_unary_table op; } // a subclass with widgets for picking a space and value Colour_picker default_colour default_value = class Colour space.item colour.expr { _vislevel = 3; space = Option_enum "Colour space" Image_type.colour_spaces default_colour; colour = Expression "Colour value" default_value; Colour_edit colour_space value = Colour_picker colour_space value; } /* Base scale type. */ Scale caption from to value = class scope.Real value { _check_args = [ [caption, "caption", check_string], [from, "from", check_real], [to, "to", check_real] ]; _check_all = [ [from < to, "from < to"] ]; Real x = this.Scale caption from to x; // methods oo_binary_table op x = [ [this.Scale caption (op.fn this.from x.from) (op.fn this.to x.to) (op.fn this.value x.value), is_Scale x && op.type == Operator_type.ARITHMETIC], [this.Scale caption (op.fn this.from x) (op.fn this.to x) (op.fn this.value x), is_real x && op.type == Operator_type.ARITHMETIC] ] ++ super.oo_binary_table op x; } /* Base toggle type. */ Toggle caption value = class scope.Bool value { _check_args = [ [caption, "caption", check_string], [value, "value", check_bool] ]; Bool x = this.Toggle caption x; } /* Base option type. */ Option caption labels value = class scope.Real value { _check_args = [ [caption, "caption", check_string], [labels, "labels", check_string_list], [value, "value", check_uint] ]; } /* An option whose value is a string rather than a number. */ Option_string caption labels item = class Option caption labels (index (equal item) labels) { Option_edit caption labels value = this.Option_string caption labels (labels?value); } /* Make an option from an enum. */ Option_enum caption enum item = class Option_string caption enum.names item { // corresponding thing value_thing = enum.get_thing item; Option_edit caption labels value = this.Option_enum caption enum (enum.names?value); } /* A rectangle. width and height can be -ve. */ Rect left top width height = class _Object { _check_args = [ [left, "left", check_real], [top, "top", check_real], [width, "width", check_real], [height, "height", check_real] ]; // derived right = left + width; bottom = top + height; oo_binary_table op x = [ [equal x, is_Rect x && (op.op_name == "equal" || op.op_name == "equal'")], [!equal x, is_Rect x && (op.op_name == "not_equal" || op.op_name == "not_equal'")], // binops with a complex are the same as (comp op comp) [oo_binary_function op this (Rect (re x) (im x) 0 0), is_complex x], // all others are just pairwise [this.Rect left' top' width' height', is_Rect x && op.type == Operator_type.ARITHMETIC], [this.Rect left'' top'' width'' height'', has_number x && op.type == Operator_type.ARITHMETIC] ] ++ super.oo_binary_table op x { left' = op.fn left x.left; top' = op.fn top x.top; width' = op.fn width x.width; height' = op.fn height x.height; left'' = op.fn left x'; top'' = op.fn top x'; width'' = op.fn width x'; height'' = op.fn height x'; x' = get_number x; } oo_unary_table op = [ // arithmetic uops just map [this.Rect left' top' width' height', op.type == Operator_type.ARITHMETIC], // compound uops are just like ops on complex // do (width, height) so thing like abs(Arrow) work as you'd expect [op.fn (width, height), op.type == Operator_type.COMPOUND] ] ++ super.oo_unary_table op { left' = op.fn left; top' = op.fn top; width' = op.fn width; height' = op.fn height; } // empty? ie. contains no pixels is_empty = width == 0 || height == 0; // normalised version, ie. make width/height +ve and flip the origin nleft = left + width, width < 0 = left; ntop = top + height, height < 0 = top; nwidth = abs width; nheight = abs height; nright = nleft + nwidth; nbottom = ntop + nheight; equal x = left == x.left && top == x.top && width == x.width && height == x.height; // contains a point? includes_point x y = nleft <= x && x <= nright && ntop <= y && y <= nbottom; // contains a rect? just test top left and bottom right points includes_rect r = includes_point r.nleft r.ntop && includes_point r.nright r.nbottom; // bounding box of two rects // if either is empty, can just return the other union r = r, is_empty = this, r.is_empty = Rect left' top' width' height' { left' = min_pair nleft r.nleft; top' = min_pair ntop r.ntop; width' = max_pair nright r.nright - left'; height' = max_pair nbottom r.nbottom - top'; } // intersection of two rects ... empty rect if no intersection intersect r = Rect left' top' width'' height'' { left' = max_pair nleft r.nleft; top' = max_pair ntop r.ntop; width' = min_pair nright r.nright - left'; height' = min_pair nbottom r.nbottom - top'; width'' = width', width > 0 = 0; height'' = height', height > 0 = 0; } // expand/collapse by n pixels margin_adjust n = Rect (left - n) (top - n) (width + 2 * n) (height + 2 * n); } /* Values for Compression field in image. */ Image_compression = class { NONE = 0; NO_COMPRESSION = 0; TCSF_COMPRESSION = 1; JPEG_COMPRESSION = 2; LABPACK_COMPRESSED = 3; RGB_COMPRESSED = 4; LUM_COMPRESSED = 5; } /* Values for Coding field in image. */ Image_coding = class { NONE = 0; NOCODING = 0; COLQUANT = 1; LABPACK = 2; RAD = 6; } /* Values for BandFmt field in image. */ Image_format = class { DPCOMPLEX = 9; DOUBLE = 8; COMPLEX = 7; FLOAT = 6; INT = 5; UINT = 4; SHORT = 3; USHORT = 2; CHAR = 1; UCHAR = 0; NOTSET = -1; maxval fmt = [ 255, // UCHAR 127, // CHAR 65535, // USHORT 32767, // SHORT 4294967295, // UINT 2147483647, // INT 255, // FLOAT 255, // COMPLEX 255, // DOUBLE 255 // DPCOMPLEX ] ? fmt, fmt >= 0 && fmt <= DPCOMPLEX = error (_ "bad value for BandFmt"); } /* A lookup table. */ Table value = class _Object { _check_args = [ [value, "value", check_rectangular] ]; /* Extract a column. */ column n = map (extract n) value; /* present col x: is there an x in column col */ present col x = member (column col) x; /* Look on column from, return matching item in column to. */ lookup from to x = value?n?to, n >= 0 = error (_ "item" ++ " " ++ print x ++ " " ++ _ "not in table") { n = index (equal x) (column from); } } /* A two column lookup table with the first column a string and the second a * thing. Used for representing various enums. Option_enum makes a selector * from one of these. */ Enum value = class Table value { _check_args = [ [value, "value", check_enum] ] { check_enum = [is_enum, _ "is [[char, *]]"]; is_enum x = is_rectangular x && is_listof is_string (map (extract 0) x); } // handy ... all the names and things as lists names = this.column 0; things = this.column 1; // is a legal name or thing has_name x = this.present 1 x; has_thing x = this.present 0 x; // map things to strings and back get_name x = this.lookup 1 0 x; get_thing x = this.lookup 0 1 x; } /* Type field. */ Image_type = class { MULTIBAND = 0; B_W = 1; HISTOGRAM = 10; XYZ = 12; LAB = 13; CMYK = 15; LABQ = 16; RGB = 17; UCS = 18; LCH = 19; LABS = 21; sRGB = 22; YXY = 23; FOURIER = 24; RGB16 = 25; GREY16 = 26; ARRAY = 27; /* Table to get names <-> numbers. */ type_names = Enum [ $MULTIBAND => MULTIBAND, $B_W => B_W, $HISTOGRAM => HISTOGRAM, $XYZ => XYZ, $LAB => LAB, $CMYK => CMYK, $LABQ => LABQ, $RGB => RGB, $UCS => UCS, $LCH => LCH, $LABS => LABS, $sRGB => sRGB, $YXY => YXY, $FOURIER => FOURIER, $RGB16 => RGB16, $GREY16 => GREY16, $ARRAY => ARRAY ]; /* Table relating nip's colour space names and VIPS's Type numbers. * Options generated from this, so match the order to the order in the * Colour menu. */ colour_spaces = Enum [ $sRGB => sRGB, $Lab => LAB, $LCh => LCH, $XYZ => XYZ, $Yxy => YXY, $UCS => UCS ]; /* A slightly larger table ... the types of colorimetric image we can * have. Add mono, and the S and Q forms of LAB. */ image_colour_spaces = Enum [ $Mono => B_W, $sRGB => sRGB, $RGB16 => RGB16, $GREY16 => GREY16, $Lab => LAB, $LabQ => LABQ, $LabS => LABS, $LCh => LCH, $XYZ => XYZ, $Yxy => YXY, $UCS => UCS ]; } /* Base image type. Simple layer over vips_image. */ Image value = class _Object { _check_args = [ [value, "value", check_image] ]; // fields from VIPS header width = get_width value; height = get_height value; bands = get_bands value; format = get_format value; bits = get_bits value; coding = get_coding value; type = get_type value; xres = get_header "Xres" value; yres = get_header "Yres" value; xoffset = get_header "Xoffset" value; yoffset = get_header "Yoffset" value; filename = get_header "filename" value; // convenience ... the area our pixels occupy, as a rect rect = Rect 0 0 width height; // operator overloading // (op Image Vector) done in Vector class oo_binary_table op x = [ // handle image ++ constant here [wrap join_result_image, (has_real x || is_Vector x) && (op.op_name == "join" || op.op_name == "join'")], [wrap ite_result_image, op.op_name == "if_then_else"], [wrap (op.fn this.value (get_image x)), has_image x], [wrap (op.fn this.value (get_number x)), has_number x], // if it's not a class on the RHS, handle here ... just apply and // rewrap [wrap (op.fn this.value x), !is_class x] // all other cases handled by other classes ] ++ super.oo_binary_table op x { // wrap the result with this // x can be a non-image, eg. compare "Image v == []" vs. // "Image v == 12" wrap x = x, op.type == Operator_type.COMPOUND || !is_image x = this.Image x; join_result_image = value ++ new_stuff, op.op_name == "join" = new_stuff ++ value { new_stuff = image_new width height new_bands format coding Image_type.B_W x xoffset yoffset; new_bands = get_bands x, has_bands x = 1; } [then_part, else_part] = x; // get things about our output from inputs in this order objects = [then_part, else_part, this]; // properties of our output image target_bands = get_member_list has_bands get_bands objects; target_type = get_member_list has_type get_type objects; // if one of then/else is an image, get the target format from that // otherwise, let the non-image objects set the target target_format = get_member_list has_format get_format x, has_member_list has_format x = NULL; to_image x = to_image_size width height target_bands target_format x; [then', else'] = map to_image x; ite_result_image = image_set_type target_type (if value then then' else else'); } // FIXME ... yuk ... don't use operator hints, just always rewrap if // we have an image result // forced on us by things like abs: // abs Vector -> real // abs Image -> Image // does not fit well with COMPOUND/whatever scheme oo_unary_table op = [ [this.Image result, is_image result], [result, true] ] ++ super.oo_unary_table op { result = op.fn this.value; } } /* Construct an image from a file. */ Image_file filename = class Image value { _check_args = [ [filename, "filename", check_string] ]; value = vips_image filename; } Region image left top width height = class Image value { _check_args = [ [image, "Image", check_Image], [left, "left", check_real], [top, "top", check_real], [width, "width", check_preal], [height, "height", check_preal] ]; // a rect for our coordinates // region.rect gets the rect for the extracted image region_rect = Rect left top width height; // we need to always succeed ... value is our enclosing image if we're // out of bounds value = extract_area left top width height image.value, image.rect.includes_rect region_rect = image.value; } Area image left top width height = class scope.Region image left top width height { Region image left top width height = this.Area image left top width height; } Arrow image left top width height = class scope.Rect left top width height { _check_args = [ [image, "Image", check_Image], [left, "left", check_real], [top, "top", check_real], [width, "width", check_real], [height, "height", check_real] ]; Rect l t w h = this.Arrow image l t w h; } HGuide image top = class scope.Arrow image image.rect.left top image.width 0 { Arrow image left top width height = this.HGuide image top; } VGuide image left = class scope.Arrow image left image.rect.top 0 image.height { Arrow image left top width height = this.VGuide image left; } Mark image left top = class scope.Arrow image left top 0 0 { Arrow image left top width height = this.Mark image left top; } // convenience functions: ... specify position as [0 .. 1) Region_relative image u v w h = Region image (image.width * u) (image.height * v) (image.width * w) (image.height * h); Area_relative image u v w h = Area image (image.width * u) (image.height * v) (image.width * w) (image.height * h); Arrow_relative image u v w h = Arrow image (image.width * u) (image.height * v) (image.width * w) (image.height * h); VGuide_relative image v = VGuide image (image.height * v); HGuide_relative image u = HGuide image (image.width * u); Mark_relative image u v = Mark image (image.width * u) (image.height * v); Kernel_type = class { NEAREST_NEIGHBOUR = 0; LINEAR = 1; CUBIC = 2; LANCZOS2 = 3; LANCZOS3 = 4; // Should introspect to get the list of interpolators :-( // We can "dir" on VipsInterpolate to get a list of them, but we // can't get i18n'd descriptions until we have more // introspection stuff in nip2. /* Table to map kernel numbers to descriptive strings */ descriptions = [ _ "Nearest neighbour", _ "Linear", _ "Cubic", _ "Lanczos, two lobes", _ "Lanczos, three lobes" ]; /* And to vips enum nicknames. */ types = [ "nearest", "linear", "cubic", "lanczos2", "lanczos3" ]; } Kernel type = class { value = Kernel_type.types?type; } Kernel_linear = Kernel Kernel_type.LINEAR; Kernel_picker default = class Kernel kernel.value { _vislevel = 2; kernel = Option "Kernel" Kernel_type.descriptions default; } Interpolate_type = class { NEAREST_NEIGHBOUR = 0; BILINEAR = 1; BICUBIC = 2; LBB = 3; NOHALO = 4; VSQBS = 5; // Should introspect to get the list of interpolators :-( // We can "dir" on VipsInterpolate to get a list of them, but we // can't get i18n'd descriptions until we have more // introspection stuff in nip2. /* Table to map interpol numbers to descriptive strings */ descriptions = [ _ "Nearest neighbour", _ "Bilinear", _ "Bicubic", _ "Upsize: reduced halo bicubic (LBB)", _ "Upsharp: reduced halo bicubic with edge sharpening (Nohalo)", _ "Upsmooth: quadratic B-splines with jaggy reduction (VSQBS)" ]; /* And to vips type names. */ types = [ "VipsInterpolateNearest", "VipsInterpolateBilinear", "VipsInterpolateBicubic", "VipsInterpolateLbb", "VipsInterpolateNohalo", "VipsInterpolateVsqbs" ]; } Interpolate type options = class { value = vips_object_new Interpolate_type.types?type [] options; } Interpolate_bilinear = Interpolate Interpolate_type.BILINEAR []; Interpolate_picker default = class Interpolate interp.value [] { _vislevel = 2; interp = Option "Interpolation" Interpolate_type.descriptions default; } Render_intent = class { PERCEPTUAL = 0; RELATIVE = 1; SATURATION = 2; ABSOLUTE = 3; /* Table to get names <-> numbers. */ names = Enum [ _ "Perceptual" => PERCEPTUAL, _ "Relative" => RELATIVE, _ "Saturation" => SATURATION, _ "Absolute" => ABSOLUTE ]; } // abstract base class for toolkit menus Menu = class {} // a "----" line in a menu Menuseparator = class Menu {} // abstract base class for items in menus Menuitem label tooltip = class Menu {} Menupullright label tooltip = class Menuitem label tooltip {} Menuaction label tooltip = class Menuitem label tooltip {} /* Plots. */ Plot_style = class { POINT = 0; LINE = 1; SPLINE = 2; BAR = 3; names = Enum [ _ "Point" => POINT, _ "Line" => LINE, _ "Spline" => SPLINE, _ "Bar" => BAR ]; } Plot_format = class { YYYY = 0; XYYY = 1; XYXY = 2; names = Enum [ _ "YYYY" => YYYY, _ "XYYY" => XYXY, _ "XYXY" => XYXY ]; } Plot_type = class { /* Lots of Ys (ie. multiple line plots). */ YYYY = 0; /* First column of matrix is X position, others are Ys (ie. multiple XY * line plots, all with the same Xes). */ XYYY = 1; /* Many independent XY plots. */ XYXY = 2; } /* "options" is a list of ["key", value] pairs. */ Plot options value = class scope.Image value { Image value = this.Plot options value; to_image dpi = extract_bands 0 3 (graph_export_image (to_real dpi) this); } Plot_matrix options value = class Plot options (to_image value).value { } Plot_histogram value = class scope.Plot [] value { } Plot_xy value = class scope.Plot [$format => Plot_format.XYYY] value { } /* A no-value type. Call it NULL for C-alike fun. Used by Group to indicate * empty slots, for example. */ NULL = class _Object { oo_binary_table op x = [ // the only operation we allow is equality .. use pointer equality, // this lets us test a == NULL and a != NULL [this === x, op.type == Operator_type.RELATIONAL && op.op_name == "equal"], [this !== x, op.type == Operator_type.RELATIONAL && op.op_name == "not_equal"] ] ++ super.oo_binary_table op x; } nip2-8.7.0/share/nip2/compat/8.4/Makefile.am0000644000175000017500000000062113224651032015116 00000000000000startdir = $(pkgdatadir)/compat/8.4 start_DATA = \ Math.def \ Image.def \ Magick.def \ Colour.def \ Tasks.def \ Object.def \ Filter.def \ Matrix.def \ Widgets.def \ Histogram.def \ Preferences.ws \ _joe_extra.def \ _joe_utilities.def \ _convert.def \ _generate.def \ _list.def \ _predicate.def \ _stdenv.def \ _Object.def \ _magick.def \ _types.def EXTRA_DIST = $(start_DATA) nip2-8.7.0/share/nip2/compat/7.10/0000755000175000017500000000000013350464160013223 500000000000000nip2-8.7.0/share/nip2/compat/7.10/_stdenv.def0000644000175000017500000011337313224651032015271 00000000000000/* Various operators as functions. */ logical_and a b = a && b; logical_or a b = a || b; bitwise_and a b = a & b; bitwise_or a b = a | b; eor a b = a ^ b; left_shift a b = a << b; right_shift a b = a >> b; not a = !a; less a b = a < b; more a b = a > b; less_equal a b = a <= b; more_equal a b = a >= b; equal a b = a == b; not_equal a b = a != b; pointer_equal a b = a === b; not_pointer_equal a b = a !== b; add a b = a + b; subtract a b = a - b; multiply a b = a * b; divide a b = a / b; power a b = a ** b; square x = x * x; remainder a b = a % b; cons a b = a : b; join a b = a ++ b; subscript a b = a ? b; generate s n f = [s, n .. f]; comma r i = (r, i); compose f g = f @ g; cast_unsigned_char x = (unsigned char) x; cast_signed_char x = (signed char) x; cast_unsigned_short x = (unsigned short) x; cast_signed_short x = (signed short) x; cast_unsigned_int x = (unsigned int) x; cast_signed_int x = (signed int) x; cast_float x = (float) x; cast_double x = (double) x; cast_complex x = (complex) x; cast_double_complex x = (double complex) x; unary_minus x = -x; negate x = !x; complement x = ~x; unary_plus x = +x; if_then_else a b c = if a then b else c; // the vector ops ... im is an image, vec is a real_list vec op_name im vec = im_lintra_vec ones im vec, op_name == "add" || op_name == "add'" = im_lintra_vec ones (-1 * im) vec, op_name == "subtract'" = im_lintra_vec ones im inv, op_name == "subtract" = im_lintra_vec vec im zeros, op_name == "multiply" || op_name == "multiply'" = im_lintra_vec vec (1 / im) zeros, op_name == "divide'" = im_lintra_vec recip im zeros, op_name == "divide" = im_expntra_vec im vec, op_name == "power'" = im_powtra_vec im vec, op_name == "power" = im_remainderconst_vec im vec, op_name == "remainder" = im_andimage_vec im vec, op_name == "bitwise_and" || op_name == "bitwise_and'" = im_orimage_vec im vec, op_name == "bitwise_or" || op_name == "bitwise_or'" = im_eorimage_vec im vec, op_name == "eor" || op_name == "eor'" = im_equal_vec im vec, op_name == "equal" || op_name == "equal'" = im_notequal_vec im vec, op_name == "not_equal" || op_name == "not_equal'" = im_less_vec im vec, op_name == "less" = im_moreeq_vec im vec, op_name == "less'" = im_lesseq_vec im vec, op_name == "less_equal" = im_more_vec im vec, op_name == "less_equal'" = error "unimplemented vector operation" { zeros = replicate (len vec) 0; ones = replicate (len vec) 1; recip = map (divide 1) vec; inv = map (multiply (-1)) vec; } /* Macbeth chart patch names. */ _macbeth_names = [ "Dark skin", "Light skin", "Blue sky", "Foliage", "Blue flower", "Bluish green", "Orange", "Purplish blue", "Moderate red", "Purple", "Yellow green", "Orange yellow", "Blue", "Green", "Red", "Yellow", "Magenta", "Cyan", "White (density 0.05)", "Neutral 8 (density 0.23)", "Neutral 6.5 (density 0.44)", "Neutral 5 (density 0.70)", "Neutral 3.5 (density 1.05)", "Black (density 1.50)" ]; bandsplit x = oo_unary_function bandsplit_op x, is_class x = map (subscript x) [0 .. bands - 1], is_image x = error (_ "bad arguments to " ++ "bandsplit") { bands = im_header_int "Bands" x; bandsplit_op = Operator "bandsplit" (map Image @ bandsplit) Operator_type.COMPOUND false; } bandjoin l = wrapper joined, has_wrapper = joined, is_listof has_image l = error (_ "bad arguments to " ++ "bandjoin") { has_wrapper = has_member_list (has_member "Image") l; wrapper = get_member_list (has_member "Image") (get_member "Image") l; joined = im_gbandjoin (map get_image l); } mean x = oo_unary_function mean_op x, is_class x = im_avg x, is_image x = mean_list x, is_real_list x || is_matrix x = error (_ "bad arguments to " ++ "mean") { mean_op = Operator "mean" mean_object Operator_type.COMPOUND false; mean_object x = im_avg x, is_image x = mean_list x, is_real_list x || is_matrix x = error (_ "bad arguments to " ++ "mean"); mean_list l = s / n { totals = sum l; n = totals?0; s = totals?1; } // return [n, sum] for a list of numbers, or a list of list of num // etc. sum x = foldr accumulate [0, 0] x { accumulate x sofar = [n + 1, x + s], is_real x = [n + n', s + s'], is_list x = error "mean_list: not real or [real]" { n = sofar?0; s = sofar?1; sub_acc = sum x; n' = sub_acc?0; s' = sub_acc?1; } } } deviation x = oo_unary_function deviation_op x, is_class x = im_deviate x, is_image x = deviation_list x, is_real_list x || is_matrix x = error (_ "bad arguments to " ++ "deviation") { deviation_op = Operator "deviation" deviation_object Operator_type.COMPOUND false; deviation_object x = im_deviate x, is_image x = deviation_list x, is_real_list x || is_matrix x = error (_ "bad arguments to " ++ "deviation"); deviation_list l = (abs (s2 - (s * s / n)) / (n - 1)) ** 0.5 { totals = sum_sum2_list l; n = totals?0; s = totals?1; s2 = totals?2; } // return n, sum, sum of squares for a list of reals sum_sum2_list x = foldr accumulate [0, 0, 0] x { accumulate x sofar = [n + 1, x + s, x * x + s2], is_real x = [n + n', s + s', s2 + s2'], is_list x = error "sum_sum2_list: not real or [real]" { n = sofar?0; s = sofar?1; s2 = sofar?2; sub_acc = sum_sum2_list x; n' = sub_acc?0; s' = sub_acc?1; s2' = sub_acc?2; } } } abs x = oo_unary_function abs_op x, is_class x = im_abs x, is_image x = abs_cmplx x, is_complex x = abs_num x, is_real x = error (_ "bad arguments to " ++ "abs") { abs_op = Operator "abs" abs_object Operator_type.COMPOUND false; abs_object x = im_abs x, is_image x = abs_cmplx x, is_complex x = abs_num x, is_real x = abs_list x, is_real_list x = abs_list (map abs_list x), is_matrix x = error (_ "bad arguments to " ++ "abs"); abs_list l = (foldr1 add (map square l)) ** 0.5; abs_num n = n, n >= 0 = -n; abs_cmplx c = ((re c)**2 + (im c)**2) ** 0.5; } copy x = oo_unary_function copy_op x, is_class x = im_copy x, is_image x = x { copy_op = Operator "copy" copy Operator_type.COMPOUND_REWRAP false; } // like abs, but treat pixels as vectors ... ie. always get a 1-band image // back ... also treat matricies as lists of vectors // handy for dE from object difference abs_vec x = oo_unary_function abs_vec_op x, is_class x = abs_vec_image x, is_image x = abs_vec_cmplx x, is_complex x = abs_vec_num x, is_real x = error (_ "bad arguments to " ++ "abs_vec") { abs_vec_op = Operator "abs_vec" abs_vec_object Operator_type.COMPOUND false; abs_vec_object x = abs_vec_image x, is_image x = abs_vec_cmplx x, is_complex x = abs_vec_num x, is_real x = abs_vec_list x, is_real_list x = mean (Vector (map abs_vec_list x)), is_matrix x = error (_ "bad arguments to " ++ "abs_vec"); abs_vec_list l = (foldr1 add (map square l)) ** 0.5; abs_vec_num n = n, n >= 0 = -n; abs_vec_cmplx c = ((re c)**2 + (im c)**2) ** 0.5; abs_vec_image im = (foldr1 add (map square (bandsplit im))) ** 0.5; } transpose x = oo_unary_function transpose_op x, is_class x = transpose_image x, is_image x = transpose_matrix x, is_list x && is_list (hd x) = error (_ "bad arguments to " ++ "transpose") { transpose_op = Operator "transpose" transpose_object Operator_type.COMPOUND_REWRAP false; transpose_object x = transpose_matrix x, is_matrix x = transpose_image x, is_image x = error (_ "bad arguments to " ++ "transpose"); transpose_matrix l = [], l' == [] = (map hd l') : (transpose_matrix (map tl l')) { l' = takewhile (not_equal []) l; } transpose_image = im_flipver @ im_rot270; } rot45 x = oo_unary_function rot45_op x, is_class x = error "rot45 image: not implemented", is_image x = error (_ "bad arguments to " ++ "rot45") { rot45_op = Operator "rot45" rot45_object Operator_type.COMPOUND_REWRAP false; rot45_object x = rot45_matrix x, is_odd_square_matrix x = error "rot45 image: not implemented", is_image x = error (_ "bad arguments to " ++ "rot45"); // slow, but what the heck rot45_matrix l = (im_rotate_dmask45 (Matrix l)).value; } // apply an image function to a [[real]] ... matrix is converted to a 1 band // image for processing apply_matrix_as_image fn m = (get_value @ im_vips2mask @ fn @ im_mask2vips @ Matrix) m; rot90 x = oo_unary_function rot90_op x, is_class x = im_rot90 x, is_image x = error (_ "bad arguments to " ++ "rot90") { rot90_op = Operator "rot90" rot90_object Operator_type.COMPOUND_REWRAP false; rot90_object x = rot90_matrix x, is_matrix x = im_rot90 x, is_image x = error (_ "bad arguments to " ++ "rot90"); // slow, but what the heck // avoid im_rotate_dmask90(), it can only do square odd-sided matricies rot90_matrix l = apply_matrix_as_image im_rot90 l; } rot180 x = oo_unary_function rot180_op x, is_class x = im_rot180 x, is_image x = error (_ "bad arguments to " ++ "rot180") { rot180_op = Operator "rot180" rot180_object Operator_type.COMPOUND_REWRAP false; rot180_object x = rot180_matrix x, is_matrix x = im_rot180 x, is_image x = error (_ "bad arguments to " ++ "rot180"); // slow, but what the heck rot180_matrix l = apply_matrix_as_image im_rot180 l; } rot270 x = oo_unary_function rot270_op x, is_class x = im_rot270 x, is_image x = error (_ "bad arguments to " ++ "rot270") { rot270_op = Operator "rot270" rot270_object Operator_type.COMPOUND_REWRAP false; rot270_object x = rot270_matrix x, is_matrix x = im_rot270 x, is_image x = error (_ "bad arguments to " ++ "rot270"); // slow, but what the heck rot270_matrix l = apply_matrix_as_image im_rot270 l; } image_set_type type x = oo_unary_function image_set_type_op x, is_class x = im_copy_set x (to_real type) (im_header_double "Xres" x) (im_header_double "Yres" x) (im_header_int "Xoffset" x) (im_header_int "Yoffset" x), is_image x = error (_ "bad arguments to " ++ "image_set_type:" ++ print type ++ " " ++ print x) { image_set_type_op = Operator "image_set_type" (image_set_type type) Operator_type.COMPOUND_REWRAP false; } image_set_origin xoff yoff x = oo_unary_function image_set_origin_op x, is_class x = im_copy_set x (im_header_int "Type" x) (im_header_double "Xres" x) (im_header_double "Yres" x) (to_real xoff) (to_real yoff), is_image x = error (_ "bad arguments to " ++ "image_set_origin") { image_set_origin_op = Operator "image_set_origin" (image_set_origin xoff yoff) Operator_type.COMPOUND_REWRAP false; } rotquad x = oo_unary_function rotquad_op x, is_class x = im_rotquad x, is_image x = error (_ "bad arguments to " ++ "rotquad") { rotquad_op = Operator "rotquad" rotquad_object Operator_type.COMPOUND_REWRAP false; rotquad_object x = rotquad_matrix x, is_matrix x = im_rotquad x, is_image x = error (_ "bad arguments to " ++ "rotquad"); rotquad_matrix l = apply_matrix_as_image im_rotquad l; } cache tile_width tile_height max_tiles x = oo_unary_function cache_op x, is_class x = im_cache x (to_real tile_width) (to_real tile_height) (to_real max_tiles), is_image x = error (_ "bad arguments to " ++ "cache") { cache_op = Operator "cache" (cache tile_width tile_height max_tiles) Operator_type.COMPOUND_REWRAP false; } tile across down x = oo_unary_function tile_op x, is_class x = im_replicate x (to_real across) (to_real down), is_image x = error (_ "bad arguments to " ++ "tile") { tile_op = Operator "tile" (tile across down) Operator_type.COMPOUND_REWRAP false; } fliptb x = oo_unary_function fliptb_op x, is_class x = im_flipver x, is_image x = error (_ "bad arguments to " ++ "fliptb") { fliptb_op = Operator "fliptb" fliptb_object Operator_type.COMPOUND_REWRAP false; fliptb_object x = fliptb_matrix x, is_matrix x = im_flipver x, is_image x = error (_ "bad arguments to " ++ "fliptb"); fliptb_matrix l = reverse l; } fliplr x = oo_unary_function fliplr_op x, is_class x = im_fliphor x, is_image x = error (_ "bad arguments to " ++ "fliplr") { fliplr_op = Operator "fliplr" fliplr_object Operator_type.COMPOUND_REWRAP false; fliplr_object x = fliplr_matrix x, is_matrix x = im_fliphor x, is_image x = error (_ "bad arguments to " ++ "fliplr"); fliplr_matrix l = map reverse l; } max_pair a b = a, a > b = b; min_pair a b = a, a < b = b; range min value max = min_pair max (max_pair min value); max x = oo_unary_function max_op x, is_class x = im_max x, is_image x = max_list x, is_real_list x || is_matrix x = x, is_number x = error (_ "bad arguments to " ++ "max") { max_op = Operator "max" max Operator_type.COMPOUND false; max_list x = foldr1 max_pair x, is_real_list x = foldr1 max_pair (map max_list x), is_matrix x = max x; } min x = oo_unary_function min_op x, is_class x = im_min x, is_image x = min_list x, is_real_list x || is_matrix x = x, is_number x = error (_ "bad arguments to " ++ "min") { min_op = Operator "min" min Operator_type.COMPOUND false; min_list x = foldr1 min_pair x, is_real_list x = foldr1 min_pair (map min_list x), is_matrix x = min x; } maxpos x = oo_unary_function maxpos_op x, is_class x = im_maxpos x, is_image x = maxpos_matrix x, is_matrix x = error (_ "bad arguments to " ++ "maxpos") { maxpos_op = Operator "maxpos" maxpos Operator_type.COMPOUND false; maxpos_matrix m = (indexes?row, row) { max_value = max (Matrix m); indexes = map (index (equal max_value)) m; row = index (not_equal (-1)) indexes; } } minpos x = oo_unary_function minpos_op x, is_class x = im_minpos x, is_image x = minpos_matrix x, is_matrix x = error (_ "bad arguments to " ++ "minpos") { minpos_op = Operator "minpos" minpos Operator_type.COMPOUND false; minpos_matrix m = (indexes?row, row) { min_value = min (Matrix m); indexes = map (index (equal min_value)) m; row = index (not_equal (-1)) indexes; } } stats x = oo_unary_function stats_op x, is_class x = im_stats x, is_image x = im_stats (to_image x).value, is_matrix x = error (_ "bad arguments to " ++ "stats") { stats_op = Operator "stats" stats Operator_type.COMPOUND false; } e = 2.7182818284590452354; pi = 3.14159265358979323846; rad d = 2 * pi * (d / 360); deg r = 360 * r / (2 * pi); sign x = oo_unary_function sign_op x, is_class x = im_sign x, is_image x = sign_cmplx x, is_complex x = sign_num x, is_real x = error (_ "bad arguments to " ++ "sign") { sign_op = Operator "sign" sign Operator_type.COMPOUND_REWRAP false; sign_num n = 0, n == 0 = 1, n > 0 = -1; sign_cmplx c = (0, 0), mod == 0 = (re c / mod, im c / mod) { mod = abs c; } } rint x = oo_unary_function rint_op x, is_class x = im_rint x, is_image x = rint_value x, is_number x = error (_ "bad arguments to " ++ "rint") { rint_op = Operator "rint" rint Operator_type.ARITHMETIC false; rint_value x = (int) (x + 0.5), x > 0 = (int) (x - 0.5); } scale x = oo_unary_function scale_op x, is_class x = (unsigned char) x, is_number x = im_scale x, is_image x = scale_list x, is_real_list x || is_matrix x = error (_ "bad arguments to " ++ "scale") { scale_op = Operator "scale" scale Operator_type.COMPOUND_REWRAP false; scale_list l = apply_scale s o l { mn = find_limit min_pair l; mx = find_limit max_pair l; s = 255.0 / (mx - mn); o = -(mn * s); } find_limit fn l = find_limit fn (map (find_limit fn) l), is_listof is_list l = foldr1 fn l; apply_scale s o x = x * s + o, is_number x = map (apply_scale s o) x; } scaleps x = oo_unary_function scale_op x, is_class x = im_scaleps x, is_image x = error (_ "bad arguments to " ++ "scale") { scale_op = Operator "scaleps" scaleps Operator_type.COMPOUND_REWRAP false; } fwfft x = oo_unary_function fwfft_op x, is_class x = im_fwfft x, is_image x = error (_ "bad arguments to " ++ "fwfft") { fwfft_op = Operator "fwfft" fwfft Operator_type.COMPOUND_REWRAP false; } invfft x = oo_unary_function invfft_op x, is_class x = im_invfftr x, is_image x = error (_ "bad arguments to " ++ "invfft") { invfft_op = Operator "invfft" invfft Operator_type.COMPOUND_REWRAP false; } falsecolour x = oo_unary_function falsecolour_op x, is_class x = image_set_type Image_type.sRGB (im_falsecolour x), is_image x = error (_ "bad arguments to " ++ "falsecolour") { falsecolour_op = Operator "falsecolour" falsecolour Operator_type.COMPOUND_REWRAP false; } polar x = oo_unary_function polar_op x, is_class x = im_c2amph x, is_image x = polar_cmplx x, is_complex x = error (_ "bad arguments to " ++ "polar") { polar_op = Operator "polar" polar Operator_type.COMPOUND false; polar_cmplx r = (l, a) { a = 270, x == 0 && y < 0 = 90, x == 0 && y >= 0 = 360 + atan (y / x), x > 0 && y < 0 = atan (y / x), x > 0 && y >= 0 = 180 + atan (y / x); l = (x ** 2 + y ** 2) ** 0.5; x = re r; y = im r; } } rectangular x = oo_unary_function rectangular_op x, is_class x = im_c2rect x, is_image x = rectangular_cmplx x, is_complex x = error (_ "bad arguments to " ++ "rectangular") { rectangular_op = Operator "rectangular" rectangular Operator_type.COMPOUND false; rectangular_cmplx p = (x, y) { l = re p; a = im p; x = l * cos a; y = l * sin a; } } recomb matrix image = colour_unary recomb_op image { recomb_op x = im_recomb x (to_matrix matrix), is_image x = error (_ "bad arguments to " ++ "recomb"); } extract_area x y w h obj = oo_unary_function extract_area_op obj, is_class obj = im_extract_area obj x' y' w' h', is_image obj = map (extract_range x' w') (extract_range y' h' obj), is_matrix obj = error (_ "bad arguments to " ++ "extract_area") { x' = to_real x; y' = to_real y; w' = to_real w; h' = to_real h; extract_area_op = Operator "extract_area" (extract_area x y w h) Operator_type.COMPOUND_REWRAP false; extract_range from length list = (take length @ drop from) list; } extract_band b obj = subscript obj b; extract_row y obj = oo_unary_function extract_row_op obj, is_class obj = extract_area 0 y' (get_width obj) 1 obj, is_image obj = [obj?y'], is_matrix obj = error (_ "bad arguments to " ++ "extract_row") { y' = to_real y; extract_row_op = Operator "extract_row" (extract_row y) Operator_type.COMPOUND_REWRAP false; } extract_column x obj = oo_unary_function extract_column_op obj, is_class obj = extract_area x' 0 1 height obj, is_image obj = map (converse cons [] @ converse subscript x') obj, is_matrix obj = error (_ "bad arguments to " ++ "extract_column") { x' = to_real x; height = im_header_int "Ysize" obj; extract_column_op = Operator "extract_column" (extract_column x) Operator_type.COMPOUND_REWRAP false; } blend cond in1 in2 = oo_binary_function blend_op cond [in1,in2], is_class cond = im_blend (get_image cond) (get_image in1) (get_image in2), has_image cond && has_image in1 && has_image in2 = error (_ "bad arguments to " ++ "blend") { blend_op = Operator "blend" blend_obj Operator_type.COMPOUND_REWRAP false; blend_obj cond x = blend_result_image { then_part = x?0; else_part = x?1; // get things about our output from inputs in this order objects = [then_part, else_part, cond]; // properties of our output image target_width = get_member_list has_width get_width objects; target_height = get_member_list has_height get_height objects; target_bands = get_member_list has_bands get_bands objects; target_format = get_member_list has_format get_format objects; target_type = get_member_list has_type get_type objects; to_image x = x, is_image x = x.value, is_Image x = black + x { black = im_black target_width target_height target_bands; } then_image = to_image then_part; else_image = to_image else_part; then_image' = clip2fmt target_format then_image; else_image' = clip2fmt target_format else_image; resized = size_alike [cond, then_image', else_image']; blend_result_image = image_set_type target_type (im_blend resized?0 resized?1 resized?2); } } insert x y small big = oo_binary_function insert_op small big, is_class small = oo_binary'_function insert_op small big, is_class big = im_insert big small (to_real x) (to_real y), is_image small && is_image big = error (_ "bad arguments to " ++ "insert") { insert_op = Operator "insert" (insert x y) Operator_type.COMPOUND_REWRAP false; } insert_noexpand x y small big = oo_binary_function insert_noexpand_op small big, is_class small = oo_binary'_function insert_noexpand_op small big, is_class big = im_insert_noexpand big small (to_real x) (to_real y), is_image small && is_image big = error (_ "bad arguments to " ++ "insert_noexpand") { insert_noexpand_op = Operator "insert_noexpand" (insert_noexpand x y) Operator_type.COMPOUND_REWRAP false; } measure x y w h u v image = oo_unary_function measure_op image, is_class image = im_measure image (to_real x) (to_real y) (to_real w) (to_real h) (to_real u) (to_real v), is_image image = error (_ "bad arguments to " ++ "measure") { measure_op = Operator "measure" (measure x y w h u v) Operator_type.COMPOUND_REWRAP false; } extract_bands b n obj = oo_unary_function extract_bands_op obj, is_class obj = im_extract_bands obj (to_real b) (to_real n), is_image obj = error (_ "bad arguments to " ++ "extract_bands") { extract_bands_op = Operator "extract_bands" (extract_bands b n) Operator_type.COMPOUND_REWRAP false; } transform ipol wrap params image = oo_unary_function transform_op image, is_class image = im_transform image (to_matrix params) (to_real ipol) (to_real wrap), is_image image = error (_ "bad arguments to " ++ "transform") { transform_op = Operator "transform" (transform ipol wrap params) Operator_type.COMPOUND_REWRAP false; } transform_search max_error max_iterations order ipol wrap sample reference = oo_binary_function transform_search_op sample reference, is_class sample = oo_binary'_function transform_search_op sample reference, is_class reference = im_transform_search sample reference (to_real max_error) (to_real max_iterations) (to_real order) (to_real ipol) (to_real wrap), is_image sample && is_image reference = error (_ "bad arguments to " ++ "transform_search") { transform_search_op = Operator "transform_search" (transform_search max_error max_iterations order ipol wrap) Operator_type.COMPOUND false; } rotate angle image = oo_binary_function rotate_op angle image, is_class angle = oo_binary'_function rotate_op angle image, is_class image = im_similarity image (cos angle) (sin angle) 0 0, is_real angle && is_image image = error (_ "bad arguments to " ++ "rotate") { rotate_op = Operator "rotate" rotate Operator_type.COMPOUND_REWRAP false; } conj x = oo_unary_function conj_op x, is_class x = (re x, -im x), is_complex x || (is_image x && format == Image_format.COMPLEX) || (is_image x && format == Image_format.DPCOMPLEX) // assume it's some sort of real = x { format = im_header_int "BandFmt" x; conj_op = Operator "conj" conj Operator_type.COMPOUND false; } clip2fmt format image = oo_unary_function clip2fmt_op image, is_class image = im_clip2fmt image (to_real format), is_image image = error (_ "bad arguments to " ++ "clip2fmt") { clip2fmt_op = Operator "clip2fmt" (clip2fmt format) Operator_type.COMPOUND_REWRAP false; } embed type x y w h im = oo_unary_function embed_op im, is_class im = im_embed im (to_real type) (to_real x) (to_real y) (to_real w) (to_real h), is_image im = error (_ "bad arguments to " ++ "embed") { embed_op = Operator "embed" (embed type x y w h) Operator_type.COMPOUND_REWRAP false; } /* Morph a mask with a [[real]] matrix ... turn m2 into an image, morph it * with m1, turn it back to a matrix again. */ _morph_2_masks fn m1 m2 = m'' { image = (unsigned char) im_mask2vips (Matrix m2); m2_width = get_width image; m2_height = get_height image; // need to embed m2 in an image large enough for us to be able to // position m1 all around the edges, with a 1 pixel overlap image' = embed 0 (m1.width / 2) (m1.height / 2) (m2_width + (m1.width - 1)) (m2_height + (m1.height - 1)) image; // morph! image'' = fn m1 image'; // back to mask m' = im_vips2mask ((double) image''); // Turn 0 in output to 128 (don't care). m'' = map (map fn) m'.value { fn a = 128, a == 0; = a; } } dilate mask image = oo_unary_function dilate_op image, is_class image = im_dilate image (to_matrix mask), is_image image = error (_ "bad arguments to " ++ "dilate") { dilate_op = Operator "dilate" dilate_object Operator_type.COMPOUND_REWRAP false; dilate_object x = _morph_2_masks dilate mask x, is_matrix x = dilate mask x; } erode mask image = oo_unary_function erode_op image, is_class image = im_erode image (to_matrix mask), is_image image = error (_ "bad arguments to " ++ "erode") { erode_op = Operator "erode" erode_object Operator_type.COMPOUND_REWRAP false; erode_object x = _morph_2_masks erode mask x, is_matrix x = erode mask x; } conv mask image = oo_unary_function conv_op image, is_class image = im_conv image (to_matrix mask), is_image image = error (_ "bad arguments to " ++ "conv") { conv_op = Operator "conv" (conv mask) Operator_type.COMPOUND_REWRAP false; } convsep mask image = oo_unary_function convsep_op image, is_class image = im_convsep image (to_matrix mask), is_image image = error (_ "bad arguments to " ++ "convsep") { convsep_op = Operator "convsep" (convsep mask) Operator_type.COMPOUND_REWRAP false; } rank w h n image = oo_unary_function rank_op image, is_class image = im_rank image (to_real w) (to_real h) (to_real n), is_image image = error (_ "bad arguments to " ++ "rank") { rank_op = Operator "rank" (rank w h n) Operator_type.COMPOUND_REWRAP false; } rank_image n x // work for groups too (convenient) = rlist x.value, is_Group x = rlist x, is_list x = error (_ "bad arguments to " ++ "rank_image") { rlist l = wrapper ranked, has_wrapper = ranked { has_wrapper = has_member_list (has_member "Image") l; wrapper = get_member_list (has_member "Image") (get_member "Image") l; ranked = im_rank_image (map get_image l) (to_real n); } } hist_find image = oo_unary_function hist_find_op image, is_class image = im_histgr image (-1), is_image image = error (_ "bad arguments to " ++ "hist_find") { hist_find_op = Operator "hist_find" hist_find Operator_type.COMPOUND_REWRAP false; } hist_find_nD bins image = oo_unary_function hist_find_nD_op image, is_class image = im_histnD image (to_real bins), is_image image = error (_ "bad arguments to " ++ "hist_find_nD") { hist_find_nD_op = Operator "hist_find_nD" (hist_find_nD bins) Operator_type.COMPOUND_REWRAP false; } hist_map hist image = oo_binary_function hist_map_op hist image, is_class hist = oo_binary'_function hist_map_op hist image, is_class image = im_maplut image hist, is_image hist && is_image image = error (_ "bad arguments to " ++ "hist_map") { hist_map_op = Operator "hist_map" hist_map Operator_type.COMPOUND_REWRAP false; } hist_cum hist = oo_unary_function hist_cum_op hist, is_class hist = im_histcum hist, is_image hist = error (_ "bad arguments to " ++ "hist_cum") { hist_cum_op = Operator "hist_cum" hist_cum Operator_type.COMPOUND_REWRAP false; } hist_norm hist = oo_unary_function hist_norm_op hist, is_class hist = im_histnorm hist, is_image hist = error (_ "bad arguments to " ++ "hist_norm") { hist_norm_op = Operator "hist_norm" hist_norm Operator_type.COMPOUND_REWRAP false; } hist_match in ref = oo_binary_function hist_match_op in ref, is_class in = oo_binary'_function hist_match_op in ref, is_class ref = im_histspec in ref, is_image in && is_image ref = error (_ "bad arguments to " ++ "hist_match") { hist_match_op = Operator "hist_match" hist_match Operator_type.COMPOUND_REWRAP false; } hist_equalize x = hist_map ((hist_norm @ hist_cum @ hist_find) x) x; hist_equalize_local w h image = oo_unary_function hist_equalize_local_op image, is_class image = lhisteq image, is_image image = error (_ "bad arguments to " ++ "hist_equalize_local") { hist_equalize_local_op = Operator "hist_equalize_local" (hist_equalize_local w h) Operator_type.COMPOUND_REWRAP false; // loop over bands, if necessary lhisteq im = im_lhisteq im (to_real w) (to_real h), get_bands im == 1 = (foldl1 join @ map lhisteq @ bandsplit) im; } // find the threshold below which are percent of the image (percent in [0,1]) // eg. hist_thresh 0.1 x == 12, then x < 12 will light up 10% of the pixels hist_thresh percent image = x { // our own normaliser ... we don't want to norm channels separately // norm to [0,1] my_hist_norm h = h / max h; sum = foldr1 add; // normalised cumulative hist // we sum the channels before we normalise, because we want to treat them // all the same h = (my_hist_norm @ sum @ bandsplit @ hist_cum @ hist_find) image.value; // threshold that, then use im_profile to search for the x position in the // histogram x = mean (im_profile (h > percent) 1); } resize xfac yfac interp image = oo_unary_function resize_op image, is_class image = resize_im image, is_image image = error (_ "bad arguments to " ++ "resize") { resize_op = Operator "resize" resize_im Operator_type.COMPOUND_REWRAP false; xfac' = to_real xfac; yfac' = to_real yfac; rxfac' = 1 / xfac'; ryfac' = 1 / yfac'; resize_im im // upscale by integer factor, nearest neighbour = im_zoom im xfac' yfac', is_int xfac' && is_int yfac' && xfac' >= 1 && yfac' >= 1 && interp == Interpolate.NEAREST_NEIGHBOUR // downscale by integer factor, nearest neighbour = im_subsample im rxfac' ryfac', is_int rxfac' && is_int ryfac' && rxfac' >= 1 && ryfac' >= 1 && interp == Interpolate.NEAREST_NEIGHBOUR // upscale by any factor, nearest neighbour // can't really do this right ... upscale by integer part, then // bilinear to exact size = scale (break xfac')?1 (break yfac')?1 (im_zoom im (break xfac')?0 (break yfac')?0), xfac' >= 1 && yfac' >= 1 && interp == Interpolate.NEAREST_NEIGHBOUR // downscale by any factor, nearest neighbour // can't really do this right ... downscale by integer part, // then bilinear to exact size = scale (1 / (break rxfac')?1) (1 / (break ryfac')?1) (im_subsample im (break rxfac')?0 (break ryfac')?0), rxfac' >= 1 && ryfac' >= 1 && interp == Interpolate.NEAREST_NEIGHBOUR // upscale by any factor, bilinear = scale xfac' yfac' im, xfac' >= 1 && yfac' >= 1 && interp == Interpolate.BILINEAR // downscale by any factor, bilinear // block shrink by integer factor, then bilinear resample to // exact = scale (1 / (break rxfac')?1) (1 / (break ryfac')?1) (im_shrink im (break rxfac')?0 (break ryfac')?0), rxfac' >= 1 && ryfac' >= 1 && interp == Interpolate.BILINEAR = error ("resize: unimplemented argument combination:\n" ++ " xfac = " ++ print xfac' ++ "\n" ++ " yfac = " ++ print yfac' ++ "\n" ++ " interp = " ++ print interp ++ " (" ++ Interpolate.names.lookup 1 0 interp ++ ")") { // convert a float scale to integer plus fraction // eg. scale by 2.5 becomes [2, 1.25] (x * 2.5 == x * 2 * 1.25) break f = [floor f, f / floor f]; // binlinear resize scale xfac yfac im = im_affine im xfac 0 0 yfac 0 0 0 0 (rint (get_width im * xfac)) (rint (get_height im * yfac)); } } sharpen radius x1 y2 y3 m1 m2 in = oo_unary_function sharpen_op in, is_class in = im_sharpen in (to_real radius) (to_real x1) (to_real y2) (to_real y3) (to_real m1) (to_real m2), is_image in = error (_ "bad arguments to " ++ "sharpen") { sharpen_op = Operator "sharpen" (sharpen radius x1 y2 y3 m1 m2) Operator_type.COMPOUND_REWRAP false; } tone_analyse s m h sa ma ha in = oo_unary_function tone_analyse_op in, is_class in = im_tone_analyse in (to_real s) (to_real m) (to_real h) (to_real sa) (to_real ma) (to_real ha), is_image in = error (_ "bad arguments to " ++ "tone_analyse") { tone_analyse_op = Operator "tone_analyse" (tone_analyse s m h sa ma ha) Operator_type.COMPOUND_REWRAP false; } tone_map hist image = oo_binary_function tone_map_op hist image, is_class hist = oo_binary'_function tone_map_op hist image, is_class image = im_tone_map image hist, is_image hist && is_image image = error (_ "bad arguments to " ++ "tone_map") { tone_map_op = Operator "tone_map" tone_map Operator_type.COMPOUND_REWRAP false; } tone_build fmt b w s m h sa ma ha = (Image @ clip2fmt fmt) (im_tone_build_range mx mx (to_real b) (to_real w) (to_real s) (to_real m) (to_real h) (to_real sa) (to_real ma) (to_real ha)) { mx = Image_format.maxval fmt; } icc_export depth profile intent in = oo_unary_function icc_export_op in, is_class in = im_icc_export_depth in (to_real depth) (expand profile) (to_real intent), is_image in = error (_ "bad arguments to " ++ "icc_export") { icc_export_op = Operator "icc_export" (icc_export depth profile intent) Operator_type.COMPOUND_REWRAP false; } icc_import profile intent in = oo_unary_function icc_import_op in, is_class in = im_icc_import in (expand profile) (to_real intent), is_image in = error (_ "bad arguments to " ++ "icc_import") { icc_import_op = Operator "icc_import" (icc_import profile intent) Operator_type.COMPOUND_REWRAP false; } icc_transform in_profile out_profile intent in = oo_unary_function icc_transform_op in, is_class in = im_icc_transform in (expand in_profile) (expand out_profile) (to_real intent), is_image in = error (_ "bad arguments to " ++ "icc_transform") { icc_transform_op = Operator "icc_transform" (icc_transform in_profile out_profile intent) Operator_type.COMPOUND_REWRAP false; } icc_ac2rc profile in = oo_unary_function icc_ac2rc_op in, is_class in = im_icc_ac2rc in (expand profile), is_image in = error (_ "bad arguments to " ++ "icc_ac2rc") { icc_ac2rc_op = Operator "icc_ac2rc" (icc_ac2rc profile) Operator_type.COMPOUND_REWRAP false; } print_base base in = oo_unary_function print_base_op in, is_class in = map (print_base base) in, is_list in = print_base_real, is_real in = error (_ "bad arguments to " ++ "print_base") { print_base_op = Operator "print_base" (print_base base) Operator_type.COMPOUND false; print_base_real = error "print_base: bad base", base < 2 || base > 16 = "0", in < 0 || chars == [] = reverse chars { digits = map (converse remainder base) (takewhile (not_equal 0) (iterate (converse idiv base) in)); chars = map tohd digits; tohd x = (char) ((int) '0' + x), x < 10 = (char) ((int) 'A' + (x - 10)); idiv a b = (int) (a / b); } } /* id x: the identity function * * id :: * -> * */ id x = x; /* const x y: junk y, return x * * (const 3) is the function that always returns 3. * const :: * -> ** -> * */ const x y = x; /* converse fn a b: swap order of args to fn * * converse fn a b == fn b a * converse :: (* -> ** -> ***) -> ** -> * -> *** */ converse fn a b = fn b a; /* fix fn x: find the fixed point of a function */ fix fn x = limit (iterate fn x); /* until pred fn n: apply fn to n until pred succeeds; return that value * * until (more 1000) (multiply 2) 1 = 1024 * until :: (* -> bool) -> (* -> *) -> * -> * */ until pred fn n = n, pred n = until pred fn (fn n); /* Infinite list of primes. */ primes = 1 : (sieve [2..]) { sieve l = hd l : sieve (filter (nmultiple (hd l)) (tl l)); nmultiple n x = x / n != (int) (x / n); } /* Map a 3-ary function over three objects. */ map_trinary fn a b c = wrap (map3 (map_trinary fn) a' b' c'), is_list a' && is_list b' && is_list c' = wrap (map2 (map_trinary fn a') b' c'), is_list b' && is_list c' = wrap (map2 (map_trinary (converse31 fn) b') a' c'), is_list a' && is_list c' = wrap (map2 (map_trinary (converse32 fn) c') a' b'), is_list a' && is_list b' = wrap (map (map_trinary fn a' b') c'), is_list c' = wrap (map (map_trinary (converse32 fn) a' c') b'), is_list b' = wrap (map (map_trinary (converse34 fn) b' c') a'), is_list a' = fn a b c { converse31 fn a b c = fn b a c; converse32 fn a b c = fn c a b; converse33 fn a b c = fn a c b; converse34 fn a b c = fn b c a; a' = a.value, is_Group a = a; b' = b.value, is_Group b = b; c' = c.value, is_Group c = c; wrap = Group, is_Group a || is_Group b || is_Group c = id; } /* Map a 2-ary function over a pair of objects. */ map_binary fn a b = wrap (map2 (map_binary fn) a' b'), is_list a' && is_list b' = wrap (map (map_binary fn a') b'), is_list b' = wrap (map (map_binary (converse fn) b') a'), is_list a' = fn a b { a' = a.value, is_Group a = a; b' = b.value, is_Group b = b; wrap = Group, is_Group a || is_Group b = id; } /* Map a 1-ary function over an object. */ map_unary fn a = wrap (map (map_unary fn) a'), is_list a' = fn a { a' = a.value, is_Group a = a; wrap = Group, is_Group a = id; } /* Remove features smaller than x pixels across from an image. This used to be * rather complex ... convsep is now good enough to use. */ smooth x image = convsep (matrix_gaussian_blur (to_real x * 2)) image; /* Chop up an image into a list of lists of smaller images. Pad edges with * black. */ imagearray_chop tile_width tile_height hoverlap voverlap i = map chop' [0, vstep .. height] { width = get_width i; height = get_height i; bands = get_bands i; format = get_format i; type = get_type i; tile_width' = to_real tile_width; tile_height' = to_real tile_height; hoverlap' = to_real hoverlap; voverlap' = to_real voverlap; /* Unique pixels per tile. */ hstep = tile_width' - hoverlap'; vstep = tile_height' - voverlap'; /* Calculate padding ... pad up to tile_size pixel boundary. */ sx = tile_width' + (width - width % hstep); sy = tile_height' + (height - height % vstep); /* Expand image with black to pad size. */ pad = embed 0 0 0 sx sy i; /* Chop up a row. */ chop' y = map chop'' [0, hstep .. width] { chop'' x = extract_area x y tile_width' tile_height' pad; } } /* Reassemble image. */ imagearray_assemble hoverlap voverlap il = (image_set_origin 0 0 @ foldl1 tbj @ map (foldl1 lrj)) il { lrj l r = insert (get_width l + hoverlap) 0 r l; tbj t b = insert 0 (get_height t + voverlap) b t; } /* Generate an nxn identity matrix. */ identity_matrix n = error "identity_matrix: n > 0", n < 1 = map line [0 .. n - 1] { line p = take p [0, 0 ..] ++ [1] ++ take (n - p - 1) [0, 0 ..]; } nip2-8.7.0/share/nip2/compat/7.10/Format.def0000644000175000017500000000225413224651032015052 00000000000000Format_duplicate_item = class Menuaction "_Duplicate" "take a copy of an object" { action x = map_unary copy x; } #separator Format_list_to_group_item = class Menuaction "_List to Group" "turn a list of objects into a group" { action x = Group x; } Format_group_to_list_item = class Menuaction "_Group to List" "turn a group into a list of objects" { action x = x.value; } #separator Format_break_item = class Menuaction "_Break Up Object" "break an object into a list of components" { action x = map_unary break x { break x = bandsplit x, is_Image x = map Vector x.value, is_Matrix x = x.value, is_Vector x || is_Real x = error "Breakup: not Image/Matrix/Vector/Real"; } } Format_assemble_item = class Menuaction "_Assemble Objects" "assemble a list (or group) of objects into a single object" { action x = ass x.value, is_Group x = ass x { ass x = Vector x, is_real_list x = Matrix x, is_matrix x = bandjoin x, is_listof is_Image x = Vector (map get_value x), is_listof is_Real x = Matrix (map get_value x), is_listof is_Vector x = map_unary ass x, is_list x = error "Assemble: not list of Image/Vector/Real/image/real"; } } nip2-8.7.0/share/nip2/compat/7.10/Filter.def0000644000175000017500000007216013224651032015052 00000000000000Filter_conv_item = class Menupullright "_Convolution" "various spatial convolution filters" { /* Some useful masks. */ filter_blur = Matrix_con 9 0 [[1, 1, 1], [1, 1, 1], [1, 1, 1]]; filter_sharp = Matrix_con 8 0 [[-1, -1, -1], [-1, 16, -1], [-1, -1, -1]]; filter_emboss = Matrix_con 1 128 [[-1, 0], [0, 1]]; filter_laplacian = Matrix_con 1 128 [[-1, -1, -1], [-1, 8, -1], [-1, -1, -1]]; filter_sobel = Matrix_con 1 128 [[1, 2, 1], [0, 0, 0], [-1, -2, -1]]; filter_lindet = Matrix_con 1 0 [[1, 1, 1], [-2, -2, -2], [1, 1, 1]]; Blur_item = class Menuaction "_Blur" "3x3 blur of image" { action x = map_unary (conv filter_blur) x; } Sharpen_item = class Menuaction "_Sharpen" "3x3 sharpen of image" { action x = map_unary (conv filter_sharp) x; } Emboss_item = class Menuaction "_Emboss" "1 pixel displace emboss" { action x = map_unary (conv filter_emboss) x; } Laplacian_item = class Menuaction "_Laplacian" "3x3 laplacian edge detect" { action x = map_unary (conv filter_laplacian) x; } Sobel_item = class Menuaction "So_bel" "3x3 Sobel edge detect" { action x = map_unary sobel x { sobel im = abs (a - 128) + abs (b - 128) { a = conv filter_sobel im; b = conv (rot270 filter_sobel) im; } } } /* 3x3 line detect of image diagonals should be scaled down by root(2) I guess Kirk */ Linedet_item = class Menuaction "Li_ne Detect" "3x3 line detect" { action x = map_unary lindet x { lindet im = foldr1 max_pair images { masks = take 4 (iterate rot45 filter_lindet); images = map (converse conv im) masks; } } } Usharp_item = class Menuaction "_Unsharp Mask" "cored sharpen of L only in LAB image" { action x = class _result { _vislevel = 3; size = Option "Radius" [ "3 pixels", "5 pixels", "7 pixels", "9 pixels", "11 pixels", "51 pixels" ] 0; smooth_threshold = Slider 0 5 1.5; brighten_max = Slider 1 50 10; darken_max = Slider 1 50 50; flat_sharp = Slider (-2) 5 1; jaggy_sharp = Slider (-2) 5 2; _result = map_unary process x { process in = Image in''' { in' = colour_transform_to Image_type.LABS in.value; in'' = sharpen [3, 5, 7, 9, 11, 51]?size smooth_threshold brighten_max darken_max flat_sharp jaggy_sharp in'; in''' = colour_transform_to (get_type in) in''; } } } } sep1 = Menuseparator; Custom_blur_item = class Menuaction "Custom B_lur" "blur with tuneable parameters" { action x = class _result { _vislevel = 3; radius = Slider 1 50 1; shape = Option "Mask shape" [ "Square", "Gaussian" ] 0; _result = map_unary process x { process in = convsep mask in { mask = matrix_blur radius.value, shape.value == 0 = matrix_gaussian_blur radius.value; } } } } Custom_conv_item = class Menuaction "Custom C_onvolution" "convolution filter with tuneable parameters" { action x = class _result { _vislevel = 3; matrix = Matrix_con 1 0 [[0, 0, 0], [0, 1, 0], [0, 0, 0]]; separable = Toggle "Seperable convolution" false, matrix.width == 1 || matrix.height == 1 = false; type = Option "Convolution type" ["Int", "Float"] 0; _result = map_unary process x { process in = Image in' { conv_fn = im_conv, !separable && type == 0 = im_convsep, separable && type == 0 = im_convf, !separable && type == 1 = im_convsepf, separable && type == 1 = error "boink!"; in' = conv_fn in.value matrix; } } } } } Filter_rank_item = class Menupullright "_Rank" "various rank filters" { Median_item = class Menuaction "_Median" "3x3 median rank filter" { action x = map_unary (rank 3 3 5) x; } Image_rank_item = class Menuaction "_Image Rank" "pixelwise rank a list or group of images" { action x = class _result { _vislevel = 3; select = Expression "Rank" ((int) ((guess_size + 1) / 2)) { guess_size = len x, is_list x = len x.value, is_Group x = 0; } // can't really iterate over groups ... since we allow a group // argument _result = rank_image select x; } } Custom_rank_item = class Menuaction "Custom _Rank" "rank filter with tuneable parameters" { action x = class _result { _vislevel = 3; width = Expression "Window width" 3; height = Expression "Window height" 3; select = Expression "Rank" ((int) ((to_real width * to_real height + 1) / 2)); _result = map_unary process x { process in = rank width height select in; } } } } Filter_morphology_item = class Menupullright "_Morphology" "various morphological filters" { /* Some useful masks. */ mask8 = Matrix_mor [[255, 255, 255], [255, 255, 255], [255, 255, 255]]; mask4 = Matrix_mor [[128, 255, 128], [255, 255, 255], [128, 255, 128]]; mask1 = Matrix_mor [[0, 0, 0], [0, 255, 0], [0, 0, 0]]; thin = Matrix_mor [[0, 0, 0], [128, 255, 128], [255, 255, 255]]; Threshold_item = class Menuaction "Thres_hold" "simple image threshold" { action x = class _result { _vislevel = 3; threshold = Slider 0 mx (mx / 2) { mx = Image_format.maxval x.format, is_Image x = 255; } _result = map_unary (more threshold.value) x; } } sep1 = Menuseparator; Dilate8_item = class Menuaction "Dilate _8-connected" "dilate with an 8-connected mask" { action x = map_unary (dilate mask8) x; } Dilate4_item = class Menuaction "Dilate _4-connected" "dilate with a 4-connected mask" { action x = map_unary (dilate mask4) x; } Erode8_item = class Menuaction "_Erode 8-connected" "erode with an 8-connected mask" { action x = map_unary (erode mask8) x; } Erode4_item = class Menuaction "E_rode 4-connected" "erode with a 4-connected mask" { action x = map_unary (erode mask4) x; } Custom_morph_item = class Menuaction "Custom _Morphology" "convolution morphological operator" { action x = class _result { _vislevel = 3; mask = mask4; type = Option "Operation" ["Erode", "Dilate"] 1; apply = Expression "Number of times to apply mask" 1; _result = map_unary morph x { morph image = Image value' { fatmask = (iterate (dilate mask) mask)?(to_real apply - 1); value' = im_erode image.value fatmask, type.value == 0 = im_dilate image.value fatmask; } } } } sep2 = Menuseparator; Open_item = class Menuaction "_Open" "open with an 8-connected mask" { action x = map_unary (dilate mask8 @ erode mask8) x; } Close_item = class Menuaction "_Close" "close with an 8-connected mask" { action x = map_unary (erode mask8 @ dilate mask8) x; } Clean_item = class Menuaction "C_lean" "remove 8-connected isolated points" { action x = map_unary clean x { clean x = x ^ erode mask1 x; } } Thin_item = class Menuaction "_Thin" "thin once" { action x = map_unary thinall x { masks = take 8 (iterate rot45 thin); thin1 m x = x ^ erode m x; thinall x = foldr thin1 x masks; } } } Filter_fourier_item = class Menupullright "_Fourier" "various Fourier filters" { preview_size = 64; sense_option = Option "Sense" [ "Pass", "Reject" ] 0; // make a visualisation image make_vis fn = (Image @ image_set_type Image_type.FOURIER @ rotquad @ fn) (im_create_fmask preview_size preview_size); // make the process function process fn in = (Image @ fn) (im_flt_image_freq in.value); New_ideal_item = class Menupullright "_Ideal" "various ideal Fourier filters" { High_low_item = class Menuaction "_High or Low Pass" "highpass/lowpass ideal Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; frequency_cutoff = Slider 0.01 0.99 0.5; // call a freq func with our parameters _params f = f sense.value frequency_cutoff.value 0 0 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" "ring pass/reject ideal Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; frequency_cutoff = Slider 0.01 0.99 0.5; ring_width = Slider 0.01 0.99 0.5; // call a freq func with our parameters _params f = f (sense.value + 6) frequency_cutoff.value ring_width.value 0 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Band_item = class Menuaction "_Band Pass or Band Reject" "band pass/reject ideal Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; frequency_cutoff_x = Slider 0.01 0.99 0.5; frequency_cutoff_y = Slider 0.01 0.99 0.5; radius = Slider 0.01 0.99 0.5; // call a freq func with our parameters _params f = f (sense.value + 12) frequency_cutoff_x.value frequency_cutoff_y.value radius.value 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } } New_gaussian_item = class Menupullright "_Gaussian" "various Gaussian Fourier filters" { High_low_item = class Menuaction "_High or Low Pass" "highpass/lowpass Gaussian Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; frequency_cutoff = Slider 0.01 0.99 0.5; amplitude_cutoff = Slider 0.01 0.99 0.5; // call a freq func with our parameters _params f = f (sense.value + 4) frequency_cutoff.value amplitude_cutoff.value 0 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" "ring pass/reject Gaussian Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; frequency_cutoff = Slider 0.01 0.99 0.5; amplitude_cutoff = Slider 0.01 0.99 0.5; ring_width = Slider 0.01 0.99 0.5; // call a freq func with our parameters _params f = f (sense.value + 10) frequency_cutoff.value ring_width.value amplitude_cutoff.value 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Band_item = class Menuaction "_Band Pass or Band Reject" "band pass/reject Gaussian Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; frequency_cutoff_x = Slider 0.01 0.99 0.5; frequency_cutoff_y = Slider 0.01 0.99 0.5; radius = Slider 0.01 0.99 0.5; amplitude_cutoff = Slider 0.01 0.99 0.5; // call a freq func with our parameters _params f = f (sense.value + 16) frequency_cutoff_x.value frequency_cutoff_y.value radius.value amplitude_cutoff.value 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } } New_butterworth_item = class Menupullright "_Butterworth" "various Butterworth Fourier filters" { High_low_item = class Menuaction "_High or Low Pass" "highpass/lowpass Butterworth Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; frequency_cutoff = Slider 0.01 0.99 0.5; amplitude_cutoff = Slider 0.01 0.99 0.5; order = Slider 1 10 2; // call a freq func with our parameters _params f = f (sense.value + 2) order.value frequency_cutoff.value amplitude_cutoff.value 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" "ring pass/reject Butterworth Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; frequency_cutoff = Slider 0.01 0.99 0.5; amplitude_cutoff = Slider 0.01 0.99 0.5; ring_width = Slider 0.01 0.99 0.5; order = Slider 1 10 2; // call a freq func with our parameters _params f = f (sense.value + 8) order.value frequency_cutoff.value ring_width.value amplitude_cutoff.value 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Band_item = class Menuaction "_Band Pass or Band Reject" "band pass/reject Butterworth Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; frequency_cutoff_x = Slider 0.01 0.99 0.5; frequency_cutoff_y = Slider 0.01 0.99 0.5; radius = Slider 0.01 0.99 0.5; amplitude_cutoff = Slider 0.01 0.99 0.5; order = Slider 1 10 2; // call a freq func with our parameters _params f = f (sense.value + 14) order.value frequency_cutoff_x.value frequency_cutoff_y.value radius.value amplitude_cutoff.value; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } } } Filter_enhance_item = class Menupullright "_Enhance" "various enhancement filters" { Falsecolour_item = class Menuaction "_False Colour" "false colour a mono image" { action x = class _result { _vislevel = 3; offset = Slider (-255) 255 0; clip = Toggle "Clip colour range" false; _result = map_unary process x { process im = falsecolour mono'' { mono = colour_transform_to Image_type.B_W im; mono' = mono + offset; mono'' = (unsigned char) mono', clip = (unsigned char) (mono' & 0xff); } } } } Statistical_diff_item = class Menuaction "_Statistical Difference" "statistical difference of an image" { action x = class _result { _vislevel = 3; wsize = Expression "Window size" 11; tmean = Expression "Target mean" 128; mean_weight = Slider 0 1 0.8; tdev = Expression "Target deviation" 50; dev_weight = Slider 0 1 0.8; border = Toggle "Output image matches input image in size" true; _result = map_unary process x { process in = Image in'' { in' = colour_transform_to Image_type.B_W in.value; fn = im_stdif, border = im_stdif_raw; in'' = fn in' mean_weight.value tmean.expr dev_weight.value tdev.expr wsize.expr wsize.expr; } } } } Hist_equal_item = class Menupullright "_Equalise Histogram" "equalise contrast" { Global_item = class Menuaction "_Global" "equalise contrast globally" { action x = map_unary hist_equalize x; } Local_item = class Menuaction "_Local" "equalise contrast within a roving window" { action x = class _result { _vislevel = 3; width = Expression "Window width" 20; height = Expression "Window height" 20; _result = map_unary process x { process in = hist_equalize_local width.expr height.expr in; } } } } } #separator Filter_tilt_item = class Menupullright "Ti_lt Brightness" "tilt brightness" { Left_right_item = class Menuaction "_Left to Right" "linear left-right brighten" { action x = class _result { _vislevel = 3; tilt = Slider (-1) 1 0; _result = map_unary tilt_lr x { tilt_lr image = image * scale { ramp = im_fgrey image.width image.height; scale = (ramp - 0.5) * tilt + 1; } } } } Top_bottom_item = class Menuaction "_Top to Bottom" "linear top-bottom brighten" { action x = class _result { _vislevel = 3; tilt = Slider (-1) 1 0; _result = map_unary tilt_tb x { tilt_tb image = image * scale { ramp = rot90 (im_fgrey image.height image.width); scale = (ramp - 0.5) * tilt + 1; } } } } sep1 = Menuseparator; Left_right_cos_item = class Menuaction "Cosine Left-_right" "cosine left-right brighten" { action x = class _result { _vislevel = 3; tilt = Slider (-1) 1 0; shift = Slider (-1) 1 0; _result = map_unary tilt_lr x { tilt_lr image = image * scale { ramp = im_fgrey image.width image.height - 0.5 - shift.value; scale = 0.5 * tilt.value * cos (ramp * 180) + 1; } } } } Top_bottom_cos_item = class Menuaction "Cosine Top-_bottom" "cosine top-bottom brighten" { action x = class _result { _vislevel = 3; tilt = Slider (-1) 1 0; shift = Slider (-1) 1 0; _result = map_unary tilt_tb x { tilt_tb image = image * scale { ramp = rot90 (im_fgrey image.height image.width) - 0.5 - shift.value; scale = 0.5 * tilt.value * cos (ramp * 180) + 1; } } } } sep2 = Menuseparator; Circular_item = class Menuaction "_Circular" "circular brighten" { action x = class _result { _vislevel = 3; tilt = Slider (-1) 1 0; hshift = Slider (-1) 1 0; vshift = Slider (-1) 1 0; _result = map_unary tilt_tb x { tilt_tb image = image * scale { hramp = im_fgrey image.width image.height - 0.5 - hshift.value; vramp = rot90 (im_fgrey image.height image.width) - 0.5 - vshift.value; ramp = (hramp ** 2 + vramp ** 2) ** 0.5; scale = 0.5 * tilt.value * cos (ramp * 180) + 1; } } } } } Filter_blend_item = class Menupullright "_Blend" "blend objects together" { Slider_blend_item = class Menuaction "_Slider Blend" "blend two objects together with a slider" { action a b = class _result { _vislevel = 3; blend = Slider 0 1 0.5; _result = map_binary process a b { process im1 im2 = im1 * (1 - blend) + im2 * blend; } } } Image_blend_item = class Menuaction "_Image Blend" "use an image to blend two objects" { action a b c = map_trinary process a b c { process a b c = blend condition in1 in2 { compare a b // prefer image as the condition = false, !has_image a && has_image b // prefer mono images as the condition = false, has_bands a && has_bands b && get_bands a > 1 && get_bands b == 1 // prefer uchar as the condition = false, has_format a && has_format b && get_format a > Image_format.UCHAR && get_format b == Image_format.UCHAR = true; args' = sortc compare [a, b, c]; condition = args'?0; in1 = args'?1; in2 = args'?2; } } } Line_blend_item = class Menuaction "_Along Line" "blend between image a and image b along a line" { action a b = class _result { _vislevel = 3; orientation = Option "Orientation" [ "Left to Right", "Top to Bottom" ] 0; blend_position = Slider 0 1 0.5; blend_width = Slider 0 1 0.05; _result = map_binary process a b { process a b = blend (Image condition) b a { output_width = max_pair a.width b.width; output_height = max_pair a.height b.height; range = output_width, orientation == 0 = output_height; blend_position' = floor (range * blend_position.value); blend_width' = 1, blend_width.value == 0 = floor (range * blend_width.value); start = blend_position' - blend_width' / 2; background = (make_xy output_width output_height) >= blend_position'; ramp = im_grey blend_width' output_height, orientation == 0 = rot90 (im_grey blend_width' output_width); condition = insert_noexpand start 0 ramp background?0, orientation == 0 = insert_noexpand 0 start ramp background?1; } } } } } Filter_overlay_header_item = class Menuaction "_Overlay" "make a colour overlay of two monochrome images" { action a b = class _result { _vislevel = 3; colour = Option "Colour overlay as" [ "Green over Red", "Blue over Red", "Red over Green", "Red over Blue", "Blue over Green", "Green over Blue" ] 0; _result = map_binary overlay a b { overlay a b = image_set_type Image_type.sRGB [(a' ++ b' ++ 0), (a' ++ 0 ++ b'), (b' ++ a' ++ 0), (b' ++ 0 ++ a'), (0 ++ a' ++ b'), (0 ++ b' ++ a')]?colour { a' = colour_transform_to Image_type.B_W a; b' = colour_transform_to Image_type.B_W b; } } } } Filter_colourize_item = class Menuaction "_Colourize" "use a colour image or patch to tint a mono image" { action a b = class _result { _vislevel = 3; tint = Slider 0 1 0.6; _result = map_binary tintit a b { tintit a b = colour_transform_to (get_type colour) colourized' { // get the mono thing first args = sortc (const (is_colour_type @ get_type)) [a, b]; mono = args?0; colour = args?1; colour' = tint * colour_transform_to Image_type.LAB colour; mono' = colour_transform_to Image_type.B_W mono; colourized = (mono' / 2.55) ++ colour'?1 ++ colour'?2; colourized' = image_set_type Image_type.LAB colourized; } } } } Filter_browse_multiband_item = class Menupullright "Bro_wse" "browse though an image, bitwise or bandwise" { Bandwise_item = class Menuaction "B_andwise" "browse through the bands of a multiband image" { action image = class _result { _vislevel = 3; band = Slider 0 (image.bands - 1) 0; display = Option "Display as" [ "Grey", "Green over Red", "Blue over Red", "Red over Green", "Red over Blue", "Blue over Green", "Green over Blue" ] 0; _result = output { down = (int) band.value; up = down + 1; remainder = band.value - down; fade x a = Vector [0], x == 0 = a * x; a = fade remainder image?up; b = fade (1 - remainder) image?down; output = [ a + b, a ++ b ++ 0, a ++ 0 ++ b, b ++ a ++ 0, b ++ 0 ++ a, 0 ++ a ++ b, 0 ++ b ++ a ] ? display; } } } Bitwise_item = class Menuaction "Bi_twise" "browse through the bits of an image" { action x = class _result { _vislevel = 3; bit = Islider 0 (nbits - 1) (nbits - 1) { nbits = x.bits, is_Image x = 8; Islider f t v = class scope.Slider f t ((int) v) { Slider = Islider; } } _result = map_unary process x { process im = (im & (0x1 << bit.value)) != 0; } } } } #separator Filter_negative_item = class Menuaction "Photographic _Negative" "swap black and white" { action x = map_unary invert x { invert in = clip2fmt in.format (colour_transform_to (get_type in) rgb') { rgb = colour_transform_to Image_type.sRGB in; rgb' = 255 - rgb; } } } Filter_solarize_item = class Menuaction "_Solarise" "invert colours above a threshold" { action x = class _result { _vislevel = 3; kink = Slider 0 1 0.5; _result = map_unary process x { process image = hist_map tab'''' image { // max pixel value for this format mx = Image_format.maxval image.format; // make a LUT ... just 8 and 16 bit tab = im_identity_ushort image.bands mx, image.format == Image_format.USHORT = im_identity image.bands; tab' = Image tab; // make basic ^ shape tab'' = tab' * (1 / kink), tab' < mx * kink = (mx - tab') / (1 - kink); tab''' = clip2fmt image.format tab''; // smooth a bit mask = matrix_blur (tab'''.width / 8); tab'''' = convsep mask tab'''; } } } } Filter_diffuse_glow_item = class Menuaction "_Diffuse Glow" "add a halo to highlights" { action x = class _result { _vislevel = 3; radius = Slider 0 50 5; highlights = Slider 0 100 95; glow = Slider 0 1 0.5; colour = Colour_new_item.Widget_colour_item.action; _result = map_unary process x { process image = image' { mono = (unsigned char) (colour_transform_to Image_type.B_W image); thresh = hist_thresh (highlights.value / 100) mono; mask = mono > thresh; blur = convsep (matrix_gaussian_blur radius.value) mask; colour' = colour_transform_to image.type colour; image' = image + colour' * glow * (blur / 255); } } } } Filter_drop_shadow_item = class Menuaction "Drop S_hadow" "add a drop shadow to an image" { action x = class _result { _vislevel = 3; shadow_x = Slider (-50) 50 5; shadow_y = Slider (-50) 50 5; shadow_softness = Slider 0 20 5; bg_colour = Expression "Background colour" 255; sd_colour = Expression "Shadow colour" 128; alpha = Toggle "Shadow in alpha channel" false; transparent = Toggle "Zero pixels are transparent" false; _result = map_unary shadow x { shadow image = Image final { blur_size = shadow_softness.value * 2 + 1; // matrix we blur with to soften shadows blur_matrix = matrix_gaussian_blur blur_size; matrix_size = blur_matrix.width; matrix_radius = (int) (matrix_size / 2) + 1; // position and size of shadow image in input cods // before and after fuzzing shadow_rect = Rect shadow_x.value shadow_y.value image.width image.height; fuzzy_shadow_rect = shadow_rect.margin_adjust matrix_radius; // size and pos of final image, in input cods final_rect = image.rect.union fuzzy_shadow_rect; // hard part of shadow in output cods shadow_rect' = Rect (shadow_rect.left - final_rect.left) (shadow_rect.top - final_rect.top) shadow_rect.width shadow_rect.height; // make the shadow mask ... true for parts which cast // a shadow mask = (foldr1 bitwise_and @ bandsplit) (image.value != 0), transparent = image_new image.width image.height 1 Image_format.UCHAR Image_coding.NOCODING Image_type.B_W 255 0 0; mask' = embed 0 shadow_rect'.left shadow_rect'.top final_rect.width final_rect.height mask; mask'' = convsep blur_matrix mask'; // use mask to fade between bg and shadow colour mk_background colour = image_new final_rect.width final_rect.height image.bands image.format image.coding image.type colour 0 0; bg_image = mk_background bg_colour.expr; shadow_image = mk_background sd_colour.expr; bg = blend mask'' shadow_image bg_image; // make a full size mask fg_mask = embed 0 (image.rect.left - final_rect.left) (image.rect.top - final_rect.top) final_rect.width final_rect.height mask; // wrap up the input image ... put the shadow colour // around it, so if we are outputting a separate // alpha the shadow colour will be set correctly fg = insert (image.rect.left - final_rect.left) (image.rect.top - final_rect.top) image.value shadow_image; final // make a separate alpha = fg ++ mask'', alpha // paste image over shadow = if fg_mask then fg else bg; } } } } Filter_paint_text_item = class Menuaction "_Paint Text" "paint text into an image" { action x = paint_position, is_Group x = paint_area { paint_area = class _result { _check_args = [ [x, "x", check_Image] ]; _vislevel = 3; text = String "Text to paint" "Hello world!"; font = Fontname "Use font" Workspaces.Preferences.PAINTBOX_FONT; align = Option "Alignment" ["Left", "Centre", "Right"] 0; dpi = Expression "DPI" 300; colour = Expression "Text colour" 255; place = Region x (x.width / 4) (x.height / 4) (x.width / 2) (x.height / 2); _result = insert_noexpand place.left place.top (blend txt' fg place) x { fg = image_new place.width place.height x.bands x.format x.coding x.type colour.expr 0 0; txt = Image (im_text text.value font.value place.width align.value (to_real dpi)); bg = im_black place.width place.height 1; txt' = insert_noexpand 0 0 txt bg; } } paint_position = class _result { _vislevel = 3; text = Pattern_images_item.Text_item.action; colour = Expression "Text colour" 255; position = Option "Position" [ "North-west", "North", "North-east", "West", "Centre", "East", "South-west", "South", "South-east", "Specify in pixels" ] 4; left = Expression "Pixels from left" 0; top = Expression "Pixels from top" 0; _result = map_unary paint x { paint image = insert_noexpand x' y' place' image { xr = image.width - text.width; yr = image.height - text.height; x = left.expr, position == 9 = [0, xr / 2, xr]?(position % 3); y = top.expr, position == 9 = [0, yr / 2, yr]?(position / 3); x' = range 0 x (image.width - 1); y' = range 0 y (image.height - 1); w' = range 1 text.width (image.width - x'); h' = range 1 text.height (image.height - y'); place = extract_area x' y' w' h' image; text' = insert_noexpand 0 0 text (im_black w' h' 1); fg = image_new w' h' image.bands image.format image.coding image.type colour.expr 0 0; place' = blend text' fg place; } } } } } nip2-8.7.0/share/nip2/compat/7.10/Histogram.def0000644000175000017500000000555413224651032015565 00000000000000Hist_new_item = class Menuaction "_New Histogram" "make a new histogram" { action = class _result { _vislevel = 3; depth = Option "Depth" ["8 bit", "16 bit"] 0; black = Slider 0 100 0; white = Slider 0 100 100; shadow_point = Slider 0.1 0.3 0.2; mid_point = Slider 0.4 0.6 0.5; highlight_point = Slider 0.7 0.9 0.8; shadow_adjust = Slider (-15) 15 0; mid_adjust = Slider (-30) 30 0; highlight_adjust = Slider (-15) 15 0; _result = tone_build fmt black white shadow_point mid_point highlight_point shadow_adjust mid_adjust highlight_adjust { fmt = [Image_format.UCHAR, Image_format.USHORT]?depth; } } } Hist_find_item = class Menupullright "_Find Histogram" "find a histogram" { Oned_item = class Menuaction "_One Dimension" "for a n-band image, make an n-band 1D histogram" { action x = map_unary hist_find x; } Nd_item = class Menuaction "_Many Dimensions" "for a n-band image, make an n-dimensional histogram" { action x = class _result { _vislevel = 3; // default to something small-ish bins = Expression "Number of bins in each dimension" 8; _result = map_unary process x { process in = hist_find_nD bins in; } } } } Hist_map_item = class Menuaction "_Map Histogram" "map an image through a histogram" { action x y = map_binary map x y { map a b = hist_map hist im { args = sortc (const is_hist) [a, b]; im = args?0; hist = args?1; } } } Hist_eq_item = Filter_enhance_item.Hist_equal_item; #separator Hist_cum_item = class Menuaction "_Cumulativise Histogram" "form cumulative histogram from frequency histogram" { action x = map_unary hist_cum x; } Hist_norm_item = class Menuaction "N_ormalise Histogram" "normalise a histogram" { action x = map_unary hist_norm x; } Hist_match_item = class Menuaction "Ma_tch Histogram" "find LUT which will match first histogram to second" { action in ref = map_binary hist_match in ref; } #separator Hist_profile_item = class Menuaction "Find _Profile" "search from image edges for non-zero pixels" { action x = class _result { _vislevel = 3; edge = Option "Search from" [ "Top edge down", "Left edge to right", "Bottom edge up", "Right edge to left" ] 2; _result = map_unary profile x { profile image = (image_set_type Image_type.HISTOGRAM @ Image) [ im_profile image.value 0, im_profile image.value 1, im_profile (fliptb image.value) 0, im_profile (fliplr image.value) 1 ]?edge; } } } Hist_graph_item = class Menuaction "_Slice Image" "slice an image along a guide" { action x = map_unary process x { process guide = image_set_type Image_type.HISTOGRAM slice { slice = extract_area 0 guide.top guide.width 1 guide.image, is_HGuide guide = extract_area guide.left 0 1 guide.height guide.image; } } } nip2-8.7.0/share/nip2/compat/7.10/Makefile.in0000644000175000017500000003673113350464104015220 00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = share/nip2/compat/7.10 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(startdir)" DATA = $(start_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BISON = @BISON@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DLLWRAP = @DLLWRAP@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FFTW3_CFLAGS = @FFTW3_CFLAGS@ FFTW3_LIBS = @FFTW3_LIBS@ FGREP = @FGREP@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_LIBS = @GSL_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ IP_CFLAGS = @IP_CFLAGS@ IP_LIBS = @IP_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBGOFFICE_CFLAGS = @LIBGOFFICE_CFLAGS@ LIBGOFFICE_LIBS = @LIBGOFFICE_LIBS@ LIBGSF_CFLAGS = @LIBGSF_CFLAGS@ LIBGSF_LIBS = @LIBGSF_LIBS@ LIBGVC_CFLAGS = @LIBGVC_CFLAGS@ LIBGVC_LIBS = @LIBGVC_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ 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@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ REQUIRED_PACKAGES_CFLAGS = @REQUIRED_PACKAGES_CFLAGS@ REQUIRED_PACKAGES_LIBS = @REQUIRED_PACKAGES_LIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOP_SRCDIR = @TOP_SRCDIR@ UPDATE_DESKTOP_DATABASE = @UPDATE_DESKTOP_DATABASE@ UPDATE_MIME_DATABASE = @UPDATE_MIME_DATABASE@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XDG_OPEN = @XDG_OPEN@ XGETTEXT = @XGETTEXT@ 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@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ startdir = $(pkgdatadir)/compat/7.10 start_DATA = \ Colour.def \ _convert.def \ Filter.def \ Format.def \ _generate.def \ Histogram.def \ Image.def \ _joe_extra.def \ _joe_utilities.def \ _list.def \ Math.def \ Matrix.def \ _predicate.def \ _stdenv.def \ Tasks.def \ _types.def \ Widgets.def EXTRA_DIST = $(start_DATA) all: all-am .SUFFIXES: $(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) --foreign share/nip2/compat/7.10/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign share/nip2/compat/7.10/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): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-startDATA: $(start_DATA) @$(NORMAL_INSTALL) @list='$(start_DATA)'; test -n "$(startdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(startdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(startdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(startdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(startdir)" || exit $$?; \ done uninstall-startDATA: @$(NORMAL_UNINSTALL) @list='$(start_DATA)'; test -n "$(startdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(startdir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: 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 check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(startdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-startDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-startDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-startDATA install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags-am uninstall uninstall-am uninstall-startDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: nip2-8.7.0/share/nip2/compat/7.10/Matrix.def0000644000175000017500000002141213224651032015063 00000000000000 Matrix_build_item = class Menupullright "_New" "make a new matrix of some sort" { Plain_item = class Menuaction "_Plain" "make a new plain matrix widget" { action = Matrix (identity_matrix 3); } Convolution_item = class Menuaction "_Convolution" "make a new convolution matrix widget" { action = Matrix_con 1 0 [[0, 0, 0], [0, 1, 0], [0, 0, 0]]; } Recombination_item = class Menuaction "_Recombination" "make a new recombination matrix widget" { action = Matrix_rec (identity_matrix 3); } Morphology_item = class Menuaction "_Morphology" "make a new morphology matrix widget" { action = Matrix_mor [[0, 0, 0], [0, 255, 0], [0, 0, 0]]; } sep1 = Menuseparator; Matrix_gaussian_item = class Menuaction "_Gaussian" "make a gaussian matrix" { action = class _result { _vislevel = 3; sigma = Slider 0.001 10 1; min_amplitude = Slider 0 1 0.2; integer = Toggle "Integer" false; _result = fn sigma.value min_amplitude.value { fn = im_gauss_imask, integer = im_gauss_dmask; } } } Matrix_laplacian_item = class Menuaction "_Laplacian" "make the Laplacian of a Gaussian matrix" { action = class _result { _vislevel = 3; sigma = Slider 0.001 10 1.5; min_amplitude = Slider 0 1 0.1; integer = Toggle "Integer" false; _result = fn sigma.value min_amplitude.value { fn = im_log_imask, integer = im_log_dmask; } } } } #separator Matrix_extract_item = class Menupullright "_Extract" "extract rows or columns from a matrix" { extract n f = take (to_real n) @ drop (to_real f); Rows_item = class Menuaction "_Rows" "extract rows" { action x = class _result { _vislevel = 3; first = Expression "Extract from row" 0; number = Expression "Extract this many rows" 1; _result = map_unary process x { process mat = mat.Matrix_base (extract number first mat.value); } } } Columns_item = class Menuaction "_Columns" "extract columns" { action x = class _result { _vislevel = 3; first = Expression "Extract from column" 0; number = Expression "Extract this many columns" 1; _result = map_unary process x { process mat = mat.Matrix_base (map (extract number first) mat.value); } } } Diagonal_item = class Menuaction "_Diagonal" "extract diagonal" { action x = class _result { _vislevel = 3; which = Option "Extract" [ "Leading Diagonal", "Trailing Diagonal" ] 0; _result = map_unary process x { process mat = mat.Matrix_base (map2 (extract 1) [0..] mat.value), which == 0 = mat.Matrix_base (map2 (extract 1) [mat.width - 1, mat.width - 2 .. 0] mat.value); } } } } Matrix_insert_item = class Menupullright "_Insert" "insert rows or columns into a matrix" { // insert a thing in a list at position first insert first x l = take first l ++ x ++ drop first l; Rows_item = class Menuaction "_Rows" "insert rows" { action x = class _result { _vislevel = 3; first = Expression "Insert at row" 0; number = Expression "Insert this many rows" 1; item = Expression "Set new cells to" 0; _result = map_unary process x { process mat = mat.Matrix_base (insert (to_real first) rows mat.value) { row = replicate mat.width (to_real item); rows = replicate (to_real number) row; } } } } Columns_item = class Menuaction "_Columns" "remove columns" { action x = class _result { _vislevel = 3; first = Expression "Insert at column" 0; number = Expression "Insert this many columns" 1; item = Expression "Set new cells to" 0; _result = map_unary process x { process mat = mat.Matrix_base (map (insert (to_real first) cells) mat.value) { cells = replicate (to_real number) (to_real item); } } } } } Matrix_delete_item = class Menupullright "_Delete" "delete rows or columns from a matrix" { // remove number of items, starting at first delete first number l = take (to_real first) l ++ drop (to_real first + to_real number) l; Rows_item = class Menuaction "_Rows" "delete rows" { action x = class _result { _vislevel = 3; first = Expression "Delete from row" 0; number = Expression "Delete this many rows" 1; _result = map_unary process x { process mat = mat.Matrix_base (delete first number mat.value); } } } Columns_item = class Menuaction "_Columns" "delete columns" { action x = class _result { _vislevel = 3; first = Expression "Delete from column" 0; number = Expression "Delete this many columns" 1; _result = map_unary process x { process mat = mat.Matrix_base (map (delete first number) mat.value); } } } } Matrix_rotate_item = class Menupullright "_Rotate" "clockwise rotation by fixed angles" { rot90 = Image_transform_item.Rotate_item.Fixed_item.Rot90_item; rot180 = Image_transform_item.Rotate_item.Fixed_item.Rot180_item; rot270 = Image_transform_item.Rotate_item.Fixed_item.Rot270_item; Matrix_rot45_item = class Menuaction "_45 Degrees" "45 degree rotate (square, odd-length-sides only)" { action x = map_unary rot45 x; } } Matrix_flip_item = Image_transform_item.Flip_item; #separator Matrix_invert_item = class Menuaction "In_vert" "calculate inverse matrix" { action x = map_unary (converse power (-1)) x; } Matrix_transpose_item = class Menuaction "_Transpose" "swap rows and columns" { action x = map_unary transpose x; } #separator Matrix_convert_to_image_item = class Menuaction "Matrix to I_mage" "convert matrix to image" { action x = class _result { _vislevel = 3; conversion = Option "Convert to" [ "Monochrome image, same size as matrix", "Multiband image, each row becomes a pixel" ] 0; _result = map_unary process x { process mat = Image im, conversion == 0 = Image joinup { im = im_mask2vips mat; joinup = bandjoin (map extract_column [0 .. mat.width - 1]); extract_column n = extract_area n 0 1 mat.height im; } } } } Matrix_from_image_item = class Menuaction "Image to M_atrix" "convert image to matrix" { action x = map_unary to_matrix x; } #separator Matrix_plot_scatter_item = class Menuaction "_Plot Scatter" "plot a scatter graph of a matrix of [x,y] coordinates" { action x = class _result { _check_args = [ [x, "x", check_Matrix_width 2] ]; _vislevel = 3; gwidth = Expression "Graph size across (pixels)" 512; gheight = Expression "Graph size down (pixels)" 512; plot_colour = Colour_picker "Lab" [80, -80, 80]; xmin = Expression "X range minimum" (foldr1 min_pair (map (extract 0) x.value)); xmax = Expression "X range maximum" (foldr1 max_pair (map (extract 0) x.value)); ymin = Expression "Y range minimum" (foldr1 min_pair (map (extract 1) x.value)); ymax = Expression "Y range maximum" (foldr1 max_pair (map (extract 1) x.value)); axies = Toggle "Draw axies" true; mark = Mark this p?0 p?1 { p = _to_image x.value?0; } mark_hint = "Mark is at position:"; mark_position = _from_image [mark.left, mark.top]; // geometry _xrange = to_real xmax - to_real xmin; _yrange = to_real ymax - to_real ymin; _xscale = to_real gwidth / _xrange; _yscale = to_real gheight / _yrange; // map an [x,y] point into the image coordinates _to_image p = [(p?0 - to_real xmin) * _xscale, to_real gheight - (p?1 - to_real ymin) * _yscale]; // map an [x,y] point from image cods back to real cods _from_image p = [p?0 / _xscale + to_real xmin, (to_real gheight - p?1) / _yscale + to_real ymin]; _result = Image (foldr plot background' x.value) { // colourspace we are drawing in space = Image_type.colour_spaces.lookup 0 1 plot_colour.colour_space; plot_image_new width height pixel = image_new width height 3 Image_format.FLOAT Image_coding.NOCODING space pixel 0 0; // background background = plot_image_new (to_real gwidth) (to_real gheight) 0; // mark we plot mark_width = max_pair 1 (to_real gwidth / 100); mark_height = max_pair 1 (to_real gheight / 100); mark = plot_image_new mark_width mark_height plot_colour; // draw axies on background background' = drawxy, axies = background { // colour we draw axies in ax_col = colour_transform_to space (Colour "Lab" [100, 0, 0]); // axies xaxis = plot_image_new (to_real gwidth) 1 ax_col; yaxis = plot_image_new 1 (to_real gheight) ax_col; origin = _to_image [0, 0]; drawx = insert_noexpand 0 origin?1 xaxis background; drawxy = insert_noexpand origin?0 0 yaxis drawx; } // plot a single point on an image plot p im = insert_noexpand (x - mark_width / 2) (y - mark_height / 2) mark im { p' = _to_image p; x = p'?0; y = p'?1; } } } } nip2-8.7.0/share/nip2/compat/7.10/_convert.def0000644000175000017500000003542213224651032015444 00000000000000 /* Try to make a Matrix ... works for Vector/Image/Real, plus image/real */ to_matrix x = to_matrix x.expr, is_Expression x = x, is_Matrix x = oo_unary_function to_matrix_op x, is_class x = tom x, is_real x || is_image x = error (_ "bad arguments to " ++ "to_matrix") { to_matrix_op = Operator "to_matrix" tom Operator_type.COMPOUND false; tom x = Matrix (itom x), is_image x = Matrix [[x]], is_real x = Matrix [x], is_real_list x = Matrix x, is_matrix x = error (_ "bad arguments to " ++ "to_matrix"); itom i = (im_vips2mask ((double) i)).value, is_image i && get_bands i == 1 = (im_vips2mask ((double) i'')).value, is_image i && get_bands i == 3 && get_width i == 1 = error (_ "not 1 band image, or 3 band 1 column image") { split = bandsplit i; i' = im_insert (split?0) (split?1) 1 0; i'' = im_insert i' (split?2) 2 0; } } /* Try to make an Image ... works for Vector/Matrix/Real, plus image/real * Special case for Colour ... pull out the colour_space and set Type in the * image. */ to_image x = to_image x.expr, is_Expression x = x, is_Image x = Image (image_set_type (Image_type.colour_spaces.lookup 0 1 x.colour_space) (mtoi [x.value])), is_Colour x = oo_unary_function to_image_op x, is_class x = toi x, is_real x || is_image x = error (_ "bad arguments to " ++ "to_image") { to_image_op = Operator "to_image" toi Operator_type.COMPOUND false; toi x = Image x, is_image x = Image (mtoi [[x]]), is_real x = Image (mtoi [x]), is_real_list x = Image (mtoi x), is_matrix x = error (_ "bad arguments to " ++ "to_image"); // [[real]] -> image mtoi m = im_mask2vips (Matrix m), width != 3 = joinup (im_mask2vips (Matrix m)) { width = len m?0; height = len m; joinup i = b1 ++ b2 ++ b3 { b1 = extract_area 0 0 1 height i; b2 = extract_area 1 0 1 height i; b3 = extract_area 2 0 1 height i; } } } /* Try to make a Colour. */ to_colour x = to_colour x.expr, is_Expression x = x, is_Colour x = Colour (colour_space (get_type x)) (map mean (bandsplit (get_image x))), has_image x && has_type x = error (_ "bad arguments to " ++ "to_colour") { colour_space type = table.get_name type, table.has_name type = error (_ "unable to make Colour from " ++ table.get_name type ++ _ " image") { table = Image_type.colour_spaces; } } /* Try to make a real. */ to_real x = to_real x.expr, is_Expression x = to_real x.value, is_class x = x, is_real x = abs x, is_complex x = 1, is_bool x && x = 0, is_bool x && !x = error (_ "bad arguments to " ++ "to_real"); /* Try to make a list ... ungroup, basically. Recurse for subgroups. */ to_list x = map to_list x.value, is_Group x = x; /* Parse a positive integer. */ parse_pint l = foldl acc 0 l { acc sofar ch = sofar * 10 + parse_c ch; /* Turn a char digit to a number. */ parse_c ch = error (_ "not a digit"), !is_digit ch = (int) ch - (int) '0'; } /* Parse an integer, with an optional sign character. */ parse_int l = error (_ "badly formed number"), len parts != 2 = sign * n { parts = splitpl [member "+-", is_digit] l; n = parse_pint parts?1; sign = 1, parts?0 == [] || parts?0 == "+" = -1; } /* Parse a float. * [+-]?[0-9]*([.][0-9]*)?(e[0-9]+)? */ parse_float l = err, len parts != 4 = (ipart + fpart) * 10 ** exp { err = error (_ "badly formed number"); parts = splitpl [ member "+-0123456789", member ".0123456789", member "eE", member "+-0123456789" ] l; ipart = parse_int parts?0; fpart = 0, parts?1 == []; = err, parts?1?0 != '.' = parse_pint (tl parts?1) / 10 ** (len parts?1 - 1); exp = 0, parts?2 == [] && parts?3 == [] = err, parts?2 == [] = parse_int parts?3; } // matrix to convert D65 XYZ to D50 XYZ ... direct conversion, found by // measuring a macbeth chart in D50 and D65 and doing a LMS to get a matrix D652D50_direct = Matrix [[ 1.13529, -0.0604663, -0.0606321 ], [ 0.0975399, 0.935024, -0.0256156 ], [ -0.0336428, 0.0414702, 0.994135 ]]; D502D65_direct = D652D50_direct ** -1; /* Convert normalised XYZ to bradford RGB. */ XYZ2RGBbrad = Matrix [[0.8951, 0.2664, -0.1614], [-0.7502, 1.7135, 0.0367], [0.0389, -0.0685, 1.0296]]; /* Convert bradford RGB to normalised XYZ. */ RGBbrad2XYZ = XYZ2RGBbrad ** -1; D93_whitepoint = Vector [89.7400, 100, 130.7700]; D75_whitepoint = Vector [94.9682, 100, 122.5710]; D65_whitepoint = Vector [95.0470, 100, 108.8827]; D55_whitepoint = Vector [95.6831, 100, 92.0871]; D50_whitepoint = Vector [96.4250, 100, 82.4680]; A_whitepoint = Vector [109.8503, 100, 35.5849]; // 2856K B_whitepoint = Vector [99.0720, 100, 85.2230]; // 4874K C_whitepoint = Vector [98.0700, 100, 118.2300]; // 6774K E_whitepoint = Vector [100, 100, 100]; // ill. free D3250_whitepoint = Vector [105.6590, 100, 45.8501]; Whitepoints = Enum [ ["D93", D93_whitepoint], ["D75", D75_whitepoint], ["D65", D65_whitepoint], ["D55", D55_whitepoint], ["D50", D50_whitepoint], ["A", A_whitepoint], ["B", B_whitepoint], ["C", C_whitepoint], ["E", E_whitepoint], ["D3250", D3250_whitepoint] ]; /* Convert D50 XYZ to D65 using the bradford chromatic adaptation approx. */ im_D502D65 xyz = xyz''' { xyz' = xyz / D50_whitepoint; rgb = recomb XYZ2RGBbrad xyz'; // move white in bradford RGB rgb' = rgb / Vector [0.94, 1.02, 1.33]; xyz'' = recomb RGBbrad2XYZ rgb'; // back to D65 xyz''' = xyz'' * D65_whitepoint; } /* Convert D65 XYZ to D50 using the bradford approx. */ im_D652D50 xyz = xyz''' { xyz' = xyz / D65_whitepoint; rgb = recomb XYZ2RGBbrad xyz'; // move white in bradford RGB rgb' = rgb * Vector [0.94, 1.02, 1.33]; xyz'' = recomb RGBbrad2XYZ rgb'; xyz''' = xyz'' * D50_whitepoint; } /* Convert D50 XYZ to Lab. */ im_D50XYZ2Lab xyz = im_XYZ2Lab_temp xyz D50_whitepoint.value?0 D50_whitepoint.value?1 D50_whitepoint.value?2; /* Convert D50 Lab to XYZ. */ im_D50Lab2XYZ lab = im_Lab2XYZ_temp lab D50_whitepoint.value?0 D50_whitepoint.value?1 D50_whitepoint.value?2; /* ... and mono conversions */ im_sRGB2mono in = (image_set_type Image_type.B_W @ clip2fmt (im_header_int "BandFmt" in) @ recomb (Matrix [[.3, .6, .1]])) in; im_mono2sRGB in = image_set_type Image_type.sRGB (in ++ in ++ in); im_sRGB2Lab in = im_XYZ2Lab (im_sRGB2XYZ in); im_Lab2sRGB in = im_XYZ2sRGB (im_Lab2XYZ in); /* apply a func to an image ... make it 1 or 3 bands, and reapply other bands * on the way out. Except if it's LABPACK. */ colour_apply fn x = fn x, b == 1 || b == 3 || c == Image_coding.LABPACK = x'' { b = get_bands x; c = get_coding x; first = extract_bands 0 3 x, b > 3 = extract_bands 0 1 x; tail = extract_bands 3 (b - 3) x, b > 3 = extract_bands 1 (b - 1) x; x' = fn first; x'' = x' ++ clip2fmt (get_format x') tail; } /* Any 1-ary colour op, applied to Vector/Image/Matrix or image */ colour_unary fn x = oo_unary_function colour_op x, is_class x = colour_apply fn x, is_image x = colour_apply fn [x], is_real x = error (_ "bad arguments to " ++ "colour_unary") { // COMPOUND_REWRAP ... signal to the colour class to go to image and // back colour_op = Operator "colour_unary" colour_object Operator_type.COMPOUND_REWRAP false; colour_object x = colour_real_list x, is_real_list x = map colour_real_list x, is_matrix x = colour_apply fn x, is_image x = error (_ "bad arguments to " ++ "colour_unary"); colour_real_list l = (to_matrix (fn (float) (to_image (Vector l)).value)).value?0; } /* Any symmetric 2-ary colour op, applied to Vector/Image/Matrix or image ... * name is op name for error messages etc. */ colour_binary name fn x y = oo_binary_function colour_op x y, is_class x = oo_binary'_function colour_op x y, is_class y = fn x y, is_image x && is_image y = error (_ "bad arguments to " ++ name) { colour_op = Operator name colour_object Operator_type.COMPOUND_REWRAP true; colour_object x y = fn x y, is_image x && is_image y = colour_real_list fn x y, is_real_list x && is_real_list y = map (colour_real_list fn x) y, is_real_list x && is_matrix y = map (colour_real_list (converse fn) y) x, is_matrix x && is_real_list y = map2 (colour_real_list fn) x y, is_matrix x && is_matrix y = error (_ "bad arguments to " ++ name); colour_real_list fn l1 l2 = (to_matrix (fn i1 i2)).value?0 { i1 = (float) (to_image (Vector l1)).value; i2 = (float) (to_image (Vector l2)).value; } } _colour_conversion_table = [ /* Lines are [space-from, space-to, conversion function]. Could do * this as a big array, but table lookup feels safer. */ [B_W, B_W, image_set_type B_W], [B_W, XYZ, im_sRGB2XYZ @ im_mono2sRGB @ im_clip], [B_W, YXY, im_XYZ2Yxy @ im_sRGB2XYZ @ im_mono2sRGB @ im_clip], [B_W, LAB, im_sRGB2Lab @ im_mono2sRGB @ im_clip], [B_W, LCH, im_Lab2LCh @ im_sRGB2Lab @ im_mono2sRGB @ im_clip], [B_W, UCS, im_XYZ2UCS @ im_sRGB2XYZ @ im_mono2sRGB @ im_clip], [B_W, RGB, im_XYZ2disp @ im_sRGB2XYZ @ im_mono2sRGB @ im_clip], [B_W, sRGB, im_mono2sRGB @ im_clip], [B_W, LABQ, im_Lab2LabQ @ im_sRGB2Lab @ im_mono2sRGB @ im_clip], [B_W, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_sRGB2Lab @ im_mono2sRGB @ im_clip], [XYZ, B_W, im_sRGB2mono @ im_XYZ2sRGB @ im_clip2f], [XYZ, XYZ, image_set_type XYZ], [XYZ, YXY, im_XYZ2Yxy @ im_clip2f], [XYZ, LAB, im_XYZ2Lab @ im_clip2f], [XYZ, LCH, im_Lab2LCh @ im_XYZ2Lab], [XYZ, UCS, im_XYZ2UCS @ im_clip2f], [XYZ, RGB, im_XYZ2disp @ im_clip2f], [XYZ, sRGB, im_XYZ2sRGB @ im_clip2f], [XYZ, LABQ, im_Lab2LabQ @ im_XYZ2Lab @ im_clip2f], [XYZ, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_XYZ2Lab @ im_clip2f], [YXY, B_W, im_sRGB2mono @ im_XYZ2sRGB @ im_Yxy2XYZ @ im_clip2f], [YXY, XYZ, im_Yxy2XYZ @ im_clip2f], [YXY, YXY, image_set_type YXY], [YXY, LAB, im_XYZ2Lab @ im_Yxy2XYZ @ im_clip2f], [YXY, LCH, im_Lab2LCh @ im_XYZ2Lab @ im_Yxy2XYZ @ im_clip2f], [YXY, UCS, im_XYZ2UCS @ im_Yxy2XYZ @ im_clip2f], [YXY, RGB, im_XYZ2disp @ im_Yxy2XYZ @ im_clip2f], [YXY, sRGB, im_XYZ2sRGB @ im_Yxy2XYZ @ im_clip2f], [YXY, LABQ, im_Lab2LabQ @ im_XYZ2Lab @ im_Yxy2XYZ @ im_clip2f], [YXY, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_XYZ2Lab @ im_Yxy2XYZ @ im_clip2f], [LAB, B_W, im_sRGB2mono @ im_Lab2sRGB @ im_Lab2XYZ @ im_clip2f], [LAB, XYZ, im_Lab2XYZ @ im_clip2f], [LAB, YXY, im_XYZ2Yxy @ im_Lab2XYZ @ im_clip2f], [LAB, LAB, image_set_type LAB @ im_clip2f], [LAB, LCH, im_Lab2LCh @ im_clip2f], [LAB, UCS, im_Lab2UCS @ im_clip2f], [LAB, RGB, im_Lab2disp @ im_clip2f], [LAB, sRGB, im_Lab2sRGB @ im_clip2f], [LAB, LABQ, im_Lab2LabQ @ im_clip2f], [LAB, LABS, im_Lab2LabS @ im_clip2f], [LCH, B_W, im_sRGB2mono @ im_Lab2sRGB @ im_LCh2Lab @ im_clip2f], [LCH, XYZ, im_Lab2XYZ @ im_LCh2Lab @ im_clip2f], [LCH, YXY, im_XYZ2Yxy @ im_Lab2sRGB @ im_LCh2Lab @ im_clip2f], [LCH, LAB, im_LCh2Lab @ im_clip2f], [LCH, LCH, image_set_type LCH], [LCH, UCS, im_LCh2UCS @ im_clip2f], [LCH, RGB, im_Lab2disp @ im_LCh2Lab @ im_clip2f], [LCH, sRGB, im_Lab2sRGB @ im_LCh2Lab @ im_clip2f], [LCH, LABQ, im_Lab2LabQ @ im_LCh2Lab @ im_clip2f], [LCH, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_LCh2Lab @ im_clip2f], [UCS, B_W, im_sRGB2mono @ im_XYZ2sRGB @ im_UCS2XYZ @ im_clip2f], [UCS, XYZ, im_UCS2XYZ @ im_clip2f], [UCS, YXY, im_XYZ2Yxy @ im_Lab2XYZ @ im_UCS2Lab @ im_clip2f], [UCS, LAB, im_UCS2Lab @ im_clip2f], [UCS, LCH, im_UCS2LCh @ im_clip2f], [UCS, UCS, image_set_type UCS], [UCS, RGB, im_Lab2disp @ im_UCS2Lab @ im_clip2f], [UCS, sRGB, im_Lab2sRGB @ im_UCS2Lab @ im_clip2f], [UCS, LABQ, im_Lab2LabQ @ im_UCS2Lab @ im_clip2f], [UCS, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_UCS2Lab @ im_clip2f], [RGB, B_W, im_sRGB2mono @ im_XYZ2sRGB @ im_disp2XYZ @ im_clip], [RGB, XYZ, im_disp2XYZ @ im_clip], [RGB, YXY, im_XYZ2Yxy @ im_disp2XYZ @ im_clip], [RGB, LAB, im_disp2Lab @ im_clip], [RGB, LCH, im_Lab2LCh @ im_disp2Lab @ im_clip], [RGB, UCS, im_Lab2UCS @ im_disp2Lab @ im_clip], [RGB, RGB, image_set_type RGB], [RGB, sRGB, im_XYZ2sRGB @ im_disp2XYZ @ im_clip], [RGB, LABQ, im_Lab2LabQ @ im_disp2Lab @ im_clip], [RGB, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_disp2Lab @ im_clip], [sRGB, B_W, im_sRGB2mono], [sRGB, XYZ, im_sRGB2XYZ @ im_clip], [sRGB, YXY, im_XYZ2Yxy @ im_sRGB2XYZ @ im_clip], [sRGB, LAB, im_sRGB2Lab @ im_clip], [sRGB, LCH, im_Lab2LCh @ im_sRGB2Lab @ im_clip], [sRGB, UCS, im_XYZ2UCS @ im_sRGB2XYZ @ im_clip], [sRGB, RGB, im_XYZ2disp @ im_sRGB2XYZ @ im_clip], [sRGB, sRGB, image_set_type sRGB], [sRGB, LABQ, im_Lab2LabQ @ im_sRGB2Lab @ im_clip], [sRGB, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_sRGB2Lab @ im_clip], [LABQ, B_W, im_sRGB2mono @ im_Lab2sRGB @ im_LabQ2Lab], [LABQ, XYZ, im_Lab2XYZ @ im_LabQ2Lab], [LABQ, YXY, im_XYZ2Yxy @ im_Lab2XYZ @ im_LabQ2Lab], [LABQ, LAB, im_LabQ2Lab], [LABQ, LCH, im_Lab2LCh @ im_LabQ2Lab], [LABQ, UCS, im_Lab2UCS @ im_LabQ2Lab], [LABQ, RGB, im_LabQ2disp], [LABQ, sRGB, im_Lab2sRGB @ im_LabQ2Lab], [LABQ, LABQ, image_set_type LABQ], [LABQ, LABS, im_LabQ2LabS], [LABS, B_W, im_sRGB2mono @ im_Lab2sRGB @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, XYZ, im_Lab2XYZ @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, YXY, im_XYZ2Yxy @ im_Lab2XYZ @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, LAB, im_LabS2Lab], [LABS, LCH, im_Lab2LCh @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, UCS, im_Lab2UCS @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, RGB, im_LabQ2disp @ im_LabS2LabQ @ im_clip2s], [LABS, sRGB, im_XYZ2sRGB @ im_Lab2XYZ @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, LABQ, im_LabS2LabQ @ im_clip2s], [LABS, LABS, image_set_type LABS] ] { /* From Image_type ... repeat here for brevity. Use same ordering as * in Colour menu for consistency. */ B_W = 1; XYZ = 12; YXY = 23; LAB = 13; LCH = 19; UCS = 18; RGB = 17; sRGB = 22; LABQ = 16; LABS = 21; } /* Transform between two colour spaces. */ colour_transform from to in = colour_unary _colour_conversion_table?i?2 in, i >= 0 = error (_ "unable to convert " ++ Image_type.type_names.get_name from ++ _ " to " ++ Image_type.type_names.get_name to) { match x = x?0 == from && x?1 == to; i = index match _colour_conversion_table; } /* Transform to a colour space, assuming the type field in the input is * correct */ colour_transform_to to in = colour_transform (get_type in) to in; /* Given a list of things, try to make them all the same size. Don't change * the format. Don't touch non-image things. */ size_alike l = map enlarge l { max_width = foldr (test_prop has_width get_width) 0 l; max_height = foldr (test_prop has_height get_height) 0 l; test_prop has get x best = best, !has x = max_pair best (get x); enlarge x = embed 0 0 0 max_width max_height x, has_width x = x; } /* Given a list of things, look for 1 band objects and bump them to to n - * band objects, where n is the maximum number of bands. Don't change the * format. Don't touch non-image things. */ bands_alike l = map upband l { max_bands = foldr (test_prop has_bands get_bands) 0 l; test_prop has get x best = best, !has x = max_pair best (get x); upband x = bandjoin (replicate max_bands x), has_bands x && get_bands x == 1 = x; } nip2-8.7.0/share/nip2/compat/7.10/_joe_utilities.def0000644000175000017500000004710313224651032016633 00000000000000/* ******Functions included in start/_NG_utilities.def:****** * * so_balance ref_meanmax im1 im2 mask blur gauss * * nonzero_mean im = no_out * * so_meanmax im = result * * so_calculate ref_meanmax im mask = result * * simple_frame frame im_w im_h ov cs ms bf option = result * * corner_frame frame im_w im_h ov cs ms bf = result * * build_frame r_tl r_tr r_bl r_br r_mt r_mb r_ml r_mr im_w im_h ov bf = result * * complex_frame frame im_w im_h ov cs es ms bf option= result * * complex_edge ra rb t bl d = rc * * frame_lr_min r_l r_r target bw = result * * frame_tb_min r_t r_b target bw = result * * frame_position_image im ref os colour= result * * merge_array bw arr = result * * merge_to_scale im target blend dir = result * * select_ellipse line width = mask * * select_tetragon p1 p2 p3 p4 = mask * * select_polygon pt_list = mask * * perspective_transform to from = trans'' * * sort_pts_clockwise l = l'' * */ /* Called from: * _NG_Extra.def Clone_area_item */ so_balance ref_meanmax im1 im2 mask gauss = result { //ref_meanmax = so_meanmax im1; so_values = so_calculate ref_meanmax im2 mask; im2_cor_a = clip2fmt im2.format im2'', has_member "format" im2 = im2'' {im2'' = im2 * (so_values?0) + (so_values?1);} // Option to convert replacement image to scaled gaussian noise im2_cor = im2_cor_a, gauss == false = clip2fmt im2_cor_a.format gauss_im {gauss_im = im_gaussnoise im2_cor_a.width im2_cor_a.height ref_meanmax?0 (deviation im2_cor_a);} result = im_blend (get_image mask) (get_image im2_cor) (get_image im1); }; //////////////////////////////////////////////////////////////////////////////// /* Calculates the mean of the non zero pixels. * * Called from: * _NG_utilities so_meanmax */ nonzero_mean im = no_out { zero_im = (im == 0); zero_mean = mean zero_im; no_mean = mean im; no_out = no_mean/(1 - (zero_mean/255)); }; //////////////////////////////////////////////////////////////////////////////// /* Calculates the max and nonzero mean of an image * * Called from: * _NG_utilities so_balance * _NG_utilities so_calculate * _NG_Extra.def Clone_area_item * _NG_Extra.def Balance_item.Balance_find_item */ so_meanmax im = result { mean_of_im = nonzero_mean im; adjusted_im = im - mean_of_im; max_of_im = max adjusted_im; result = [mean_of_im, max_of_im]; }; //////////////////////////////////////////////////////////////////////////////// /* Calculates the scale and offset required to match a reference mean and max * * Called from: * _NG_utilities so_balance * _NG_Extra.def Balance_item.Balance_find_item */ so_calculate ref_meanmax im mask = result { im' = if_then_else mask im 0; im_values = so_meanmax im'; mean_of_ref = ref_meanmax?0; mean_of_im = im_values?0; max_of_ref = ref_meanmax?1; max_of_im = im_values?1; scale = (max_of_ref)/(max_of_im); offset = mean_of_ref - (mean_of_im * scale); result = [ scale, offset ]; }; //////////////////////////////////////////////////////////////////////////////// /* Extends or shortens the central sections of a simple frame to fit round a given image. * * Called from: * _NG_Extra.def Frame_item.Simple_frame_item */ simple_frame frame im_w im_h ov cs ms bf option = result { cs' = (1 - cs); ms' = (0.5 - (ms/2)); ms'' = (1 - cs); //Regions r_tl = Region_relative frame 0 0 cs cs; r_tr = fliplr r_tl, option == true = Region_relative frame cs' 0 cs cs; r_bl = Region_relative frame 0 cs' cs cs; r_br = fliplr r_bl, option == true = Region_relative frame cs' cs' cs cs; r_mt = Region_relative frame ms' 0 ms cs; r_mb = Region_relative frame ms' ms'' ms cs; r_ml = Region_relative frame 0 ms' cs ms; r_mr = fliplr r_ml, option == true = Region_relative frame ms'' ms' cs ms; result = build_frame r_tl r_tr r_bl r_br r_mt r_mb r_ml r_mr im_w im_h ov bf; }; //////////////////////////////////////////////////////////////////////////////// /* Copies and extends a simple frame corner to produce a complete frame to fit round a given image. * * Called from: * _NG_Extra.def Frame_item.Frame_corner_item */ corner_frame frame im_w im_h ov cs ms bf = result { cs' = (1 - cs); ms' = (0.5 - (ms/2)); //Regions r_tl = Region_relative frame 0 0 cs cs; r_tr = fliplr r_tl; r_bl = fliptb r_tl; r_br = fliplr r_bl; r_mt = Region_relative frame ms' 0 ms cs; r_mb = fliptb r_mt; r_ml = Region_relative frame 0 ms' cs ms;; r_mr = fliplr r_ml; result = build_frame r_tl r_tr r_bl r_br r_mt r_mb r_ml r_mr im_w im_h ov bf; }; //////////////////////////////////////////////////////////////////////////////// /* Completes the frame building process for simple_frame and corner_frame. * * _NG_utilities simple_frame * _NG_utilities corner_frame */ build_frame r_tl r_tr r_bl r_br r_mt r_mb r_ml r_mr im_w im_h ov bf = result { //Find pixel thickness of frames section s_width = r_ml.width - mean (im_profile (map_unary fliplr (r_ml.value)?0) 1); s_height = r_mt.height - mean (im_profile (map_unary fliptb (r_mt.value)?0) 0); w_target = im_w + (2 * (s_width - ov)); h_target = im_h + (2 * (s_height - ov)); blend = bf * r_tl.width; cw_target = w_target - (2 * r_tl.width) + (2 * blend), w_target > (2 * r_tl.width) = w_target; ch_target = h_target - (2 * r_tl.height) + (2 * blend), h_target > (2 * r_tl.height) = h_target; //Use regions to produce sections top = merge_to_scale r_mt cw_target blend 0; bottom = merge_to_scale r_mb cw_target blend 0; left = merge_to_scale r_ml ch_target blend 1; right = merge_to_scale r_mr ch_target blend 1; middle = Image (image_new cw_target ch_target left.bands left.format left.coding left.type 0 0 0); //Build sections into full frame. row_1 = frame_lr_min r_tl r_tr w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[r_tl, top, r_tr]]; row_2 = frame_lr_min left right w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[left, middle, right]]; row_3 = frame_lr_min r_bl r_br w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[r_bl, bottom, r_br]]; result = frame_tb_min row_1 row_3 h_target blend, (h_target < (r_tl.height * 2)) = merge_array blend [[row_1], [row_2], [row_3]]; }; //////////////////////////////////////////////////////////////////////////////// /* Extends or shortens the central sections of a frame, preserving any central details on each * edge, to fit round a given image. * * Called from: * _NG_Extra.def Frame_item.Complex_frame_item */ complex_frame frame im_w im_h ov cs es ms bf option= result { cs' = (1 - cs); ms' = (0.5 - (ms/2)); es' = (0.25 - (es/2)); r_tl = Region_relative frame 0 0 cs cs; r_tr = fliplr r_tl, option == true = Region_relative frame cs' 0 cs cs; r_bl = Region_relative frame 0 cs' cs cs; r_br = fliplr r_bl, option == true = Region_relative frame cs' cs' cs cs; r_mt = Region_relative frame ms' 0 ms cs; r_mb = Region_relative frame ms' cs' ms cs; r_ml = Region_relative frame 0 ms' cs ms; r_mr = fliplr r_ml, option == true = Region_relative frame cs' ms' cs ms; r_et = Region_relative frame es' 0 es cs; r_eb = Region_relative frame es' cs' es cs; r_el = Region_relative frame 0 es' cs es; r_er = fliplr r_el, option == true = Region_relative frame cs' es' cs es; //Find pixel thickness of frames section s_width = r_el.width - mean (im_profile (map_unary fliplr (r_el.value)?0) 1); s_height = r_et.height - mean (im_profile (map_unary fliptb (r_et.value)?0) 0); w_target = im_w + (2 * (s_width - ov)); h_target = im_h + (2 * (s_height - ov)); min_size = foldr1 min_pair [r_tl.width, r_tl.height, r_mt.width, r_mt.height, r_et.width, r_et.height]; blend = bf * min_size; cw_target = w_target - (2 * r_tl.width) + (2 * blend); ch_target = h_target - (2 * r_tl.height) + (2 * blend); top = complex_edge r_mt r_et cw_target blend 0; bottom = complex_edge r_mb r_eb cw_target blend 0; left = complex_edge r_ml r_el ch_target blend 1; right = complex_edge r_mr r_er ch_target blend 1; middle = Image (image_new top.width left.height left.bands left.format left.coding left.type 0 0 0); //Build regions into full frame. row_1 = frame_lr_min r_tl r_tr w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[r_tl, top, r_tr]]; row_2 = frame_lr_min left right w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[left, middle, right]]; row_3 = frame_lr_min r_bl r_br w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[r_bl, bottom, r_br]]; result = frame_tb_min row_1 row_3 h_target blend, (h_target < (r_tl.height * 2)) = merge_array blend [[row_1], [row_2], [row_3]]; }; //////////////////////////////////////////////////////////////////////////////// /* Function called by complex frame, used to produce section * * Called from: * _NG_utilities.def complex_frame */ complex_edge ra rb t bl d = rc { e1 = ceil (ra.width - t)/2, d == 0 = 0; e2 = 0, d == 0 = ceil (ra.height - t)/2; e3 = t, d == 0 = ra.width; e4 = ra.height, d == 0 = t; check = ra.width, d == 0; = ra.height; rai = get_image ra; t2 = (t - ra.width + (2 * bl))/2, d == 0 = (t - ra.height + (2 * bl))/2; rc = ra , t <= 0 = Image (im_extract_area rai e1 e2 e3 e4), t <= check = merge_array bl [[rb',ra,rb']], d == 0 = merge_array bl [[rb'],[ra],[rb']] {rb' = merge_to_scale rb t2 bl d;} } ////////////////////////////////////////////////////////////////////////////// /* Blends two images left/right to produce an image a specific width. * * _NG_utilities build_frame * _NG_utilities complex_frame */ frame_lr_min r_l r_r target bw = result { //Calculating the new widh required for each image. no = (target/2 + bw); n_w = no, (r_l.width > no) = r_l.width; //Removing excess from what will be the middle of the final image. n_l = im_extract_area r_l.value 0 0 n_w r_l.height; n_r = im_extract_area r_r.value (r_r.width - n_w) 0 n_w r_l.height; //Merge the two image together with a bw*2 pixel overlap. result = Image (im_lrmerge n_l n_r ((bw*2) - n_w) 0 bw); }; ////////////////////////////////////////////////////////////////////////////// /* Blends two images top/bottom to produce an image a specific width. * * _NG_utilities build_frame * _NG_utilities complex_frame */ frame_tb_min r_t r_b target bw = result { //Calculating the new height required for each image. no = (target/2 + bw); n_h = no, (r_t.height > no) = r_t.height; //Removing excess from what will be the middle of the final image. n_t = im_extract_area r_t.value 0 0 r_t.width n_h; n_b = im_extract_area r_b.value 0 (r_b.height - n_h) r_b.width n_h; //Merge the two image together with a 50 pixel overlap. result = Image (im_tbmerge n_t n_b 0 ((bw*2) -n_h) bw); }; ////////////////////////////////////////////////////////////////////////////// /* Resixe canvas of an image to accomodate a frame and possible mount * * Called from: * _NG_Extra.def Frame_item.Frame_corner_item * _NG_Extra.def Frame_item.Simple_frame_item * _NG_Extra.def Frame_item.Complex_frame_item */ frame_position_image im ref os colour= result { background = image_new ref.width ref.height im.bands im.format im.coding im.type colour 0 0; result = insert_noexpand xp yp im background { xp = (ref.width - im.width)/2; yp = (ref.height - im.height - os)/2; } }; ////////////////////////////////////////////////////////////////////////////// /* Merges an array of images together according to blend width bw * * Called from: * _NG_Utilites.def build_frame * _NG_Utilites.def complex_frame * _NG_Utilites.def complex_edge */ merge_array bw arr = result { merge_lr bw im1 im2 = im3 { bw' = im_header_int "Xsize" (get_image im1); bw'' = -(bw' - bw); im3 = im_lrmerge (get_image im1) (get_image im2) bw'' 0 bw; } merge_tb bw im1 im2 = im3 { bw' = im_header_int "Ysize" (get_image im1); bw'' = -(bw' - bw); im3 = im_tbmerge (get_image im1) (get_image im2) 0 bw'' bw; } im_out = (image_set_origin 0 0 @ foldl1 (merge_tb bw) @ map (foldl1 (merge_lr bw))) arr; result = Image im_out; } ////////////////////////////////////////////////////////////////////////////// /* Repeatably top/bottom add clones of im, with a defined overlap, until final height > target * * Called from: * _NG_Utilites.def build_frame * _NG_Utilites.def complex_edge */ merge_to_scale im target blend dir = result { blend' = floor blend; //allow fir lr or tb process var_a = im.width, dir == 0 = im.height; var_w = im.width, dir == 1 = target, target > blend' = blend'; var_h = im.height, dir == 0 = target, target > blend' = blend'; //total numner of copies of im requires, taking overlap into account. no_loops = ceil ((log ((target - blend')/(var_a - blend')))/(log 2)); process im no = result { pr_a = im_header_int "Xsize" (get_image im), dir == 0 = im_header_int "Ysize" (get_image im); pr_b = -(pr_a - blend' + 1); im' = im_lrmerge (get_image im) (get_image im) pr_b 0 blend', dir == 0 = im_tbmerge (get_image im) (get_image im) 0 pr_b blend'; no' = no - 1; result = im', no' < 1 = process im' no'; } im_tmp = im.value, var_a > target = process im no_loops; result = Image (im_extract_area (get_image im_tmp) 0 0 var_w var_h); } ////////////////////////////////////////////////////////////////////////////// /* Selects an elispe based on a line and a width * * Called from: * _NG_Extra.def Select_item.Elipse */ select_ellipse line width = mask { im = line.image; //Make a 2 band image whose value equals its coordinates. im_coor = Image (make_xy im.width im.height); //Adjust the values to center tham on (line.left, line.top) im_cent = im_coor - Vector [line.left,line.top]; w = line.width; h = line.height; angle = 270, w == 0 && h < 0 = 90, w == 0 && h >= 0 = 360 + atan (h/w), w > 0 && h < 0 = atan (h/w), w > 0 && h >= 0 = 180 + atan (h/w); a = ( (h ** 2) + (w ** 2) )**0.5; b = a * width; x' = ( (cos angle) * im_cent?0) + ( (sin angle) * im_cent?1); y' = ( (cos angle) * im_cent?1) - ( (sin angle) * im_cent?0); mask = ( (b**2) * (x'**2) ) + ( (a**2) * (y'**2) ) <= (a * b)**2; } ////////////////////////////////////////////////////////////////////////////// /* Selects a tetragon based on four points. * * Called from: * _NG_Extra.def Select_item.Tetragon * _NG_Extra.def Perspective_item */ select_tetragon p1 p2 p3 p4 = mask { //Put points in clockwise order starting at the top left. pt_list = sort_pts_clockwise [p1, p2, p3, p4]; pair_list = [ [ pt_list?0, pt_list?1 ], [ pt_list?1, pt_list?2 ], [ pt_list?2, pt_list?3 ], [ pt_list?3, pt_list?0 ] ]; //Make xy image the same size as p1.image; im_xy = Image (make_xy p1.image.width p1.image.height); white = Image (image_new p1.image.width p1.image.height 1 0 Image_coding.NOCODING 1 255 0 0); mask = foldl process white pair_list; /* Treat each pair of point as a vector going from p1 to p2, * then select all to right of line. This is done for each pair, * the results are all combined to select the area defined by * the four points. */ process im_in pair = im_out { x = (pair?0).left; y = (pair?0).top; x'= (pair?1).left; y'= (pair?1).top; w = x' - x; h = y' - y; m = 0, x == x' = (y-y')/(x-x'); c = 0, x == x' = ((y*x') - (y'*x))/(x' - x); mask= im_xy?1 - (im_xy?0 * m) >= c, w > 0 = im_xy?1 - (im_xy?0 * m) <= c, w < 0 = im_xy?0 <= x, w == 0 && h > 0 = im_xy?0 >= x; im_out = im_in & mask; } } ////////////////////////////////////////////////////////////////////////////// /* Selects a tetragon based on four points. * * Called from: * _NG_Extra.def Select_item.Polygon */ select_polygon pt_list = mask { group_check = is_instanceof "Group" pt_list; pt_l = pt_list.value, group_check = pt_list; im = (pt_l?0).image; im_xy = Image (make_xy im.width im.height); black = Image (image_new im_xy.width im_xy.height 1 0 Image_coding.NOCODING 1 0 0 0); x = im_xy?0; y = im_xy?1; pt_l' = grp_trip pt_l; mask = foldl process black pt_l'; /*Takes a group adds the first two the end and then creates a lists of *lists [[a, b, c], [b, c, d] .... [x, a, b]] */ grp_trip l = l'' { px = take 2 l; l' = join l px; start = [(take 3 l')]; rest = drop 3 l'; process a b = c { x = (last a)?1; x'= (last a)?2; x'' = [[x, x', b]]; c = join a x''; } l'' = foldl process start rest; }; process im_in triplet = im_out { p1 = triplet?0; p2 = triplet?1; p3 = triplet?2; //check for change in x direction between p1-p2 and p2 -p3 dir_1 = sign (p2.left - p1.left); dir_2 = sign (p3.left - p2.left); dir = dir_1 + dir_2; //define min x limit. min_x = p1.left, p1.left < p2.left = p2.left + 1, dir != 0 = p2.left; //define max x limit. max_x = p1.left, p1.left > p2.left = p2.left - 1, dir != 0 = p2.left; //equation of line defined by p1 and p2 m = line_m p1 p2; c = line_c p1 p2; //Every thing below the line im_test = ((y >= (m * x) + c) & (x >= min_x) & (x <= max_x)); im_out = im_in ^ im_test; } line_c p1 p2 = c {m = line_m p1 p2; c = p1.top - (m * p1.left);}; line_m p1 p2 = (p2.top - p1.top)/(p2.left - p1.left), p2.left != p1.left = 0; } ////////////////////////////////////////////////////////////////////////////// /* Selects a tetragon based on four points. * * Called from: * _NG_Extra.def Perspective_match_item * _NG_Extra.def Perspective_item */ perspective_transform to from = trans'' { /* * Tramsformation matrix is calculated on the bases of the following functions: * x' = c0x + c1y + c2xy + c3 * y' = c4x + c5y + c6xy + c7 * * The functions used in vips im_transform works based on the functions: * x = x' + b0 + b2x' + b4y' + b6x'y' * y = y' + b1 + b3x' + b5y' + b7x'y' * * and is applied in the form of the matrix: * * [[b0, b1], * [b2, b3], * [b4, b5], * [b6, b7]] * * Therefore our required calculated matrix will be * * [[ c3 , c7], * [(c0 - 1) , c4], * [ c1 , (c5 - 1)], * [ c2 , c6]] * * to = [x1, y1, x2, y2, x3, y3, x4, y4] * from = [x1', y1', x2', y2', x3', y3', x4', y4'] * trans = [[c0], [c1], [c2], [c3], [c4], [c5], [c6], [c7]] * */ to' = Matrix [[to?0, to?1, ((to?0)*(to?1)), 1, 0, 0, 0, 0], [0, 0, 0, 0, to?0, to?1, ((to?0)*(to?1)), 1], [to?2, to?3, ((to?2)*(to?3)), 1, 0, 0, 0, 0], [0, 0, 0, 0, to?2, to?3, ((to?2)*(to?3)), 1], [to?4, to?5, ((to?4)*(to?5)), 1, 0, 0, 0, 0], [0, 0, 0, 0, to?4, to?5, ((to?4)*(to?5)), 1], [to?6, to?7, ((to?6)*(to?7)), 1, 0, 0, 0, 0], [0, 0, 0, 0, to?6, to?7, ((to?6)*(to?7)), 1]]; from' = Matrix (transpose [from]); to'' = to' ** (-1); trans = to'' * from'; trans' = trans.value; trans''= Matrix [[(trans'?3)?0, (trans'?7)?0 ], [((trans'?0)?0 - 1), (trans'?4)?0 ], [(trans'?1)?0, ((trans'?5)?0 - 1)], [(trans'?2)?0, (trans'?6)?0 ]]; } ////////////////////////////////////////////////////////////////////////////// /* Sort a list of points into clockwise order. * * Called from: * _NG_utilities.def select_tetragon * _NG_Extra.def Perspective_match_item * _NG_Extra.def Perspective_item */ sort_pts_clockwise l = l'' { // sort functions: f_top a b = a.top < b.top; f_left a b = a.left < b.left; f_right a b = a.left > b.left; l' = sortc f_top l; l'_a = take 2 l'; l'_b = drop 2 l'; l''_a = sortc f_left l'_a; l''_b = sortc f_right l'_b; l'' = join l''_a l''_b; } nip2-8.7.0/share/nip2/compat/7.10/Image.def0000644000175000017500000011132113224651032014640 00000000000000Image_new_item = class Menuaction "New _Image" "make a new image" { format_names = [ "8-bit unsigned int - UCHAR", // 0 "8-bit signed int - CHAR", // 1 "16-bit unsigned int - USHORT", // 2 "16-bit signed int - SHORT", // 3 "32-bit unsigned int - UINT", // 4 "32-bit signed int - INT", // 5 "32-bit float - FLOAT", // 6 "64-bit complex - COMPLEX", // 7 "64-bit float - DOUBLE", // 8 "128-bit complex - DPCOMPLEX" // 9 ]; action = class Image _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; nbands = Expression "Image bands" 1; format_option = Option "Image format" format_names 0; type_option = Option_enum Image_type.type_names "Image type" "B_W"; pixel = Expression "Pixel value" 0; _result = image_new (to_real nwidth) (to_real nheight) (to_real nbands) (to_real format_option) Image_coding.NOCODING type_option.value_thing pixel.expr 0 0; } } Image_new_from_image_item = class Menuaction "New _From Image" "make a new image based on image x" { action x = class Image _result { _vislevel = 3; pixel = Expression "Pixel value" 0; _result = image_new x.width x.height x.bands x.format x.coding x.type pixel.expr x.xoffset x.yoffset; } } Image_region_item = class Menupullright "New _Region on Image" "make a new region on an image" { Region_item = class Menuaction "_Region" "make a region on an image" { action image = scope.Region_relative image 0.25 0.25 0.5 0.5; } Mark_item = class Menuaction "_Point" "make a point on an image" { action image = scope.Mark_relative image 0.5 0.5; } Arrow_item = class Menuaction "_Arrow" "make an arrow on an image" { action image = scope.Arrow_relative image 0.25 0.25 0.5 0.5; } HGuide_item = class Menuaction "_Horizontal Guide" "make a horizontal guide on an image" { action image = scope.HGuide image 0.5; } VGuide_item = class Menuaction "_Vertical Guide" "make a vertical guide on an image" { action image = scope.VGuide image 0.5; } } #separator Image_number_format_item = class Menupullright "_Number Format" "convert numeric format" { U8_item = class Menuaction "_8 bit unsigned" "convert to unsigned 8 bit [0, 255]" { action x = map_unary cast_unsigned_char x; } U16_item = class Menuaction "1_6 bit unsigned" "convert to unsigned 16 bit [0, 65535]" { action x = map_unary cast_unsigned_short x; } U32_item = class Menuaction "_32 bit unsigned" "convert to unsigned 32 bit [0, 4294967295]" { action x = map_unary cast_unsigned_int x; } sep1 = Menuseparator; S8_item = class Menuaction "8 _bit signed" "convert to signed 8 bit [-128, 127]" { action x = map_unary cast_signed_char x; } S16_item = class Menuaction "16 b_it signed" "convert to signed 16 bit [-32768, 32767]" { action x = map_unary cast_signed_short x; } S32_item = class Menuaction "32 bi_t signed" "convert to signed 32 bit [-2147483648, 2147483647]" { action x = map_unary cast_signed_int x; } sep2 = Menuseparator; Float_item = class Menuaction "_Single precision float" "convert to IEEE 32 bit float" { action x = map_unary cast_float x; } Double_item = class Menuaction "_Double precision float" "convert to IEEE 64 bit float" { action x = map_unary cast_double x; } sep3 = Menuseparator; Scmplxitem = class Menuaction "Single _precision complex" "convert to 2 x IEEE 32 bit float" { action x = map_unary cast_complex x; } Dcmplx_item = class Menuaction "Double p_recision complex" "convert to 2 x IEEE 64 bit float" { action x = map_unary cast_double_complex x; } } Image_band_item = class Menupullright "_Band" "manipulate image bands" { // like extract_bands, but return [] for zero band image // makes compose a bit simpler exb b n x = [], to_real n == 0 = extract_bands b n x; Extract_item = class Menuaction "_Extract" "extract bands from image" { action x = class _result { _vislevel = 3; first = Expression "Extract from band" 0; number = Expression "Extract this many bands" 1; _result = map_unary (exb first number) x; } } Insert_item = class Menuaction "_Insert" "insert bands into image" { action x y = class _result { _vislevel = 3; first = Expression "Insert at position" 0; _result = map_binary process x y { process im1 im2 = exb 0 f im1 ++ im2 ++ exb f (b - f) im1 { f = to_real first; b = im1.bands; } } } } Delete_item = class Menuaction "_Delete" "delete bands from image" { action x = class _result { _vislevel = 3; first = Expression "Delete from band" 0; number = Expression "Delete this many bands" 1; _result = map_unary process x { process im = exb 0 f im ++ exb (f + n) (b - (f + n)) im { f = to_real first; n = to_real number; b = im.bands; } } } } } Image_crop_item = class Menuaction "_Crop" "extract a rectangular area from an image" { action x = class _result { _vislevel = 3; // try to find the image geometry ... don't bother trying to look // inside groups though _geo = x.rect, is_Image x = Rect 0 0 100 100; l = Expression "Crop left" ((int) (_geo.left + _geo.width / 4)); t = Expression "Crop top" ((int) (_geo.top + _geo.height / 4)); w = Expression "Crop width" (max_pair 1 ((int) (_geo.width / 2))); h = Expression "Crop height" (max_pair 1 ((int) (_geo.height / 2))); _result = map_unary extract x { extract im = extract_area left' top' width' height' im { width' = min_pair (to_real w) im.width; height' = min_pair (to_real h) im.height; left' = range 0 (to_real l) (im.width - width'); top' = range 0 (to_real t) (im.height - height'); } } } } Image_insert_item = class Menuaction "_Insert" "insert a small image into a large image" { action a b = insert_position, is_Group a || is_Group b = insert_area { insert_area = class _result { _check_args = [ [a, "a", check_Image], [b, "b", check_Image] ]; _check_all = [ [a.coding == b.coding && a.bands == b.bands, "a.coding == b.coding && a.bands == b.bands"] ]; _vislevel = 3; // sort to get smallest first _pred x y = x.width * x.height < y.width * y.height; _sorted = sortc _pred [a, b]; _a' = _sorted?0; _b' = _sorted?1; place = Area _b' left top width height { // be careful in case b is smaller than a left = max_pair 0 ((_b'.width - _a'.width) / 2); top = max_pair 0 ((_b'.height - _a'.height) / 2); width = min_pair _a'.width _b'.width; height = min_pair _a'.height _b'.height; } _result = insert_noexpand place.left place.top (clip2fmt _b'.format a'') _b' { a'' = extract_area 0 0 place.width place.height _a'; } } insert_position = class _result { _vislevel = 3; position = Option "Position" [ "North-west", "North", "North-east", "West", "Centre", "East", "South-west", "South", "South-east", "Specify in pixels" ] 4; left = Expression "Pixels from left" 0; top = Expression "Pixels from top" 0; _result = map_binary insert a b { insert a b = insert_noexpand left top (clip2fmt b.format a) b, position == 9 = insert_noexpand xp yp (clip2fmt b.format a) b { xr = b.width - a.width; yr = b.height - a.height; xp = [0, xr / 2, xr]?((int) (position % 3)); yp = [0, yr / 2, yr]?((int) (position / 3)); } } } } } Image_select_item = Select_item; Image_join_item = class Menupullright "_Join" "join images together left/right or up/down" { join_lr shim bg align a b = im2 { w = a.width + b.width + shim; h = max_pair a.height b.height; back = image_new w h a.bands a.format a.coding a.type bg 0 0; ya = [0, max_pair 0 ((b.height - a.height)/2), max_pair 0 (b.height - a.height)]; yb = [0, max_pair 0 ((a.height - b.height)/2), max_pair 0 (a.height - b.height)]; im1 = insert_noexpand 0 ya?align a back; im2 = insert_noexpand (a.width + shim) yb?align b im1; } join_tb shim bg align a b = im2 { w = max_pair a.width b.width; h = a.height + b.height + shim; back = image_new w h a.bands a.format a.coding a.type bg 0 0; xa = [0, max_pair 0 ((b.width - a.width)/2), max_pair 0 (b.width - a.width)]; xb = [0, max_pair 0 ((a.width - b.width)/2), max_pair 0 (a.width - b.width)]; im1 = insert_noexpand xa?align 0 a back; im2 = insert_noexpand xb?align (a.height + shim) b im1; } halign_names = ["Top", "Centre", "Bottom"]; valign_names = ["Left", "Centre", "Right"]; Left_right_item = class Menuaction "_Left to Right" "join two images left-right" { action a b = class _result { _vislevel = 3; shim = Slider 0 100 0; bg_colour = Expression "Background colour" 0; align = Option "Alignment" halign_names 1; _result = map_binary (join_lr shim.value bg_colour.expr align.value) a b; } } Top_bottom_item = class Menuaction "_Top to Bottom" "join two images top-bottom" { action a b = class _result { _vislevel = 3; shim = Slider 0 100 0; bg_colour = Expression "Background colour" 0; align = Option "Alignment" valign_names 1; _result = map_binary (join_tb shim.value bg_colour.expr align.value) a b; } } Array_item = class Menuaction "_Array" "join a list of lists of images into a single image" { action x = class _result { _vislevel = 3; hshim = Slider (-100) (100) 0; vshim = Slider (-100) (100) 0; bg_colour = Expression "Background colour" 0; halign = Option "Horizontal alignment" valign_names 1; valign = Option "Vertical alignment" halign_names 1; _result = (image_set_origin 0 0 @ foldl1 (join_tb vshim.value bg_colour.expr halign.value) @ map (foldl1 (join_lr hshim.value bg_colour.expr valign.value))) (to_list x); } } } Image_tile_item = class Menupullright "Til_e" "tile an image across and down" { tile_widget default_type x = class _result { _vislevel = 3; across = Expression "Tiles across" 2; down = Expression "Tiles down" 2; repeat = Option "Tile type" ["Replicate", "Four-way mirror"] default_type; _result = map_unary process x { process image = tile across down image, repeat == 0 = tile across down image'' { image' = insert image.width 0 (fliplr image) image; image'' = insert 0 image.height (fliptb image') image'; } } } Replicate_item = class Menuaction "_Replicate" "replicate image across and down" { action x = tile_widget 0 x; } Fourway_item = class Menuaction "_Four-way Mirror" "four-way mirror across and down" { action x = tile_widget 1 x; } Chop_item = class Menuaction "_Chop Into Tiles" "slice an image into tiles" { action x = class _result { _vislevel = 3; tile_width = Expression "Tile width" 100; tile_height = Expression "Tile height" 100; hoverlap = Expression "Horizontal overlap" 10; voverlap = Expression "Vertical overlap" 10; _result = map_unary (Group @ process) x { process x = imagearray_chop tile_width tile_height hoverlap voverlap x; } } } } Image_levels_item = class Menupullright "_Levels" "change image levels" { Scale_item = class Menuaction "_Scale to 0 - 255" "linear transform to fit 0 - 255 range" { action x = map_unary scale x; } Linear_item = class Menuaction "_Linear" "linear transform of image levels" { action x = class _result { _vislevel = 3; scale = Slider 0.001 3 1; offset = Slider (-128) 128 0; _result = map_unary adj x { adj x // only force back to input type if this is a thing // with a type ... so we work for Colour / Matrix etc. = clip2fmt x.format x', has_member "format" x = x' { x' = x * scale + offset; } } } } Gamma_item = class Menuaction "_Power" "power transform of image levels (gamma)" { action x = class _result { _vislevel = 3; gamma = Slider 0.001 4 1; image_maximum_hint = "You may need to change image_maximum if " ++ "this is not an 8 bit image"; im_mx = Expression "Image maximum" mx { mx = Image_format.maxval x.format, has_format x = 255; } _result = map_unary gam x { gam x = clip2fmt (get_format x) x', has_format x = x' { x' = (im_mx.expr / im_mx.expr ** gamma) * x ** gamma; } } } } Tone_item = class Menuaction "_Tone Curve" "adjust tone curve" { action x = class _result { _vislevel = 3; shadow_adjust = Slider (-15) 15 0; mid_adjust = Slider (-30) 30 0; highlight_adjust = Slider (-15) 15 0; shadow_point = Slider 0.1 0.3 0.2; mid_point = Slider 0.4 0.6 0.5; highlight_point = Slider 0.7 0.9 0.8; black = Slider 0 100 0; white = Slider 0 100 100; curve = tone_build x.format black white shadow_point mid_point highlight_point shadow_adjust mid_adjust highlight_adjust; _result = map_unary (hist_map curve) x; } } } Image_transform_item = class Menupullright "_Transform" "transform images" { Rotate_item = class Menupullright "Ro_tate" "rotate image" { Fixed_item = class Menupullright "_Fixed" "clockwise rotation by fixed angles" { rotate_widget default x = class _result { _vislevel = 3; angle = Option "Rotate by" [ "Don't rotate", "90 degrees clockwise", "180 degrees", "90 degrees anticlockwise" ] default; _result = map_unary process x { process in = [ in, rot90 in, rot180 in, rot270 in ] ? angle; } } Rot90_item = class Menuaction "_90 Degrees" "clockwise rotation by 90 degrees" { action x = rotate_widget 1 x; } Rot180_item = class Menuaction "_180 Degrees" "clockwise rotation by 180 degrees" { action x = rotate_widget 2 x; } Rot270_item = class Menuaction "_270 Degrees" "clockwise rotation by 270 degrees" { action x = rotate_widget 3 x; } } Free_item = class Menuaction "_Free" "clockwise rotation by any angle" { action x = class _result { _vislevel = 3; angle = Slider (-180) 180 0; _result = map_unary process x { process image = rotate angle image; } } } Straighten_item = class Menuaction "_Straighten" ("smallest rotation that makes an arrow either horizontal " ++ "or vertical") { action x = map_unary straighten x { straighten arrow = rotate angle'' arrow.image { x = arrow.width; y = arrow.height; angle = im (polar (x, y)); angle' = angle - 360, angle > 315 = angle - 180, angle > 135 = angle; angle'' = -angle', angle' >= (-45) && angle' < 45 = 90 - angle'; } } } } Flip_item = class Menupullright "_Flip" "mirror left/right or up/down" { Left_right_item = class Menuaction "_Left Right" "mirror object left/right" { action x = map_unary fliplr x; } Top_bottom_item = class Menuaction "_Top Bottom" "mirror object top/bottom" { action x = map_unary fliptb x; } } Resize_item = class Menupullright "_Resize" "change image size" { _interp = Option_enum Interpolate.names "Interpolation" "Bilinear"; Scale_item = class Menuaction "_Scale" "scale image size by a factor" { action x = class _result { _vislevel = 3; xfactor = Expression "Horizontal scale factor" 1; yfactor = Expression "Vertical scale factor" 1; interp = _interp; _result = map_unary process x { process image = resize xfactor yfactor interp.value_thing image; } } } Size_item = class Menuaction "_Size To" "resize to a fixed size" { action x = class _result { _vislevel = 3; which = Option "Resize axis" [ "Shortest", "Longest", "Horizontal", "Vertical" ] 0; size = Expression "Resize to (pixels)" 128; interp = _interp; _result = map_unary process x { process image = resize fac fac interp.value_thing image { xfac = to_real size / image.width; yfac = to_real size / image.height; max_factor = max_pair xfac yfac; min_factor = min_pair xfac yfac; fac = [max_factor, min_factor, xfac, yfac]?which; } } } } } Image_perspective_item = Perspective_item; Image_rubber_item = class Menupullright "Ru_bber Sheet" "automatically warp images to superposition" { rubber_interp = Option "Interpolation" (map (extract 0) Interpolate.names.value) Interpolate.BILINEAR; rubber_order = Option "order" ["0", "1", "2", "3"] 1; rubber_wrap = Toggle "Wrap image edges" false; // a transform ... a matrix, plus the size of the image the // matrix was made for Transform matrix image_width image_height = class matrix { // scale a transform ... if it worked for a m by n image, make // it work for a (m * xfac) by (y * yfac) image scale xfac yfac = Transform (Matrix (map2 (map2 multiply) matrix.value facs)) (image_width * xfac) (image_height * yfac) { facs = [ [xfac, yfac], [1, 1], [1, 1], [1 / xfac, 1 / yfac], [1 / xfac, 1 / yfac], [1 / xfac, 1 / yfac] ]; } } // yuk!!!! fix is_instanceof to not need absolute names is_Transform = is_instanceof "Image_transform_item.Image_rubber_item.Transform"; Find_item = class Menuaction "_Find" ("find a transform which will map sample image onto " ++ "reference") { action reference sample = class _transform { _vislevel = 3; // controls order = rubber_order; interp = rubber_interp; wrap = rubber_wrap; max_err = Expression "Maximum error" 0.3; max_iter = Expression "Maximum iterations" 10; // transform _result = transform_search max_err max_iter order interp wrap sample reference; transformed_image = Image _result?0; _transform = Transform _result?1 reference.width reference.height; final_error = _result?2; } } Apply_item = class Menuaction "_Apply" "apply a transform to an image" { action a b = class _result { _vislevel = 3; // controls interp = rubber_interp; wrap = rubber_wrap; _result = map_binary trans a b { trans a b = transform interp wrap t' i { // get the transform arg first args = sortc (const is_Transform) [a, b]; i = args?0; t = args?1; t' = t.scale (i.width / t.image_width) (i.height / t.image_height); } } } } } sep1 = Menuseparator; Match_item = class Menuaction "_Linear Match" "rotate and scale one image to match another" { action x y = class _result { _vislevel = 3; // try to find an image ... for a group, get the first item find_image x = x, is_Image x = find_image x?0, is_list x = find_image x.value, is_class x && has_value x = error "unable to find image"; _a = find_image x; _b = find_image y; ap1 = Mark_relative _a 0.5 0.25; bp1 = Mark_relative _b 0.5 0.25; ap2 = Mark_relative _a 0.5 0.75; bp2 = Mark_relative _b 0.5 0.75; refine = Toggle "Refine selected tie-points" false; lock = Toggle "No resize" false; _result = map_binary process x y { process a b = Image b''' { _prefs = Workspaces.Preferences; window = _prefs.MOSAIC_WINDOW_SIZE; object = _prefs.MOSAIC_OBJECT_SIZE; a' = a.value; b' = b.value; b'' = clip2fmt a.format b'; // return p2 ... if lock is set, return a p2 a standard // distance along the vector joining p1 and p2 norm p1 p2 = Rect left' top' 0 0, lock = p2 { v = (p2.left - p1.left, p2.top - p1.top); // 100000 to give precision since we pass points as // ints to match n = 100000 * sign v; left' = p1.left + re n; top' = p1.top + im n; } ap2'' = norm ap1 ap2; bp2'' = norm bp1 bp2; b''' = im_match_linear_search a' b'' ap1.left ap1.top bp1.left bp1.top ap2''.left ap2''.top bp2''.left bp2''.top object window, // we can't search if lock is on refine && !lock = im_match_linear a' b'' ap1.left ap1.top bp1.left bp1.top ap2''.left ap2''.top bp2''.left bp2''.top; } } } } Image_perspective_match_item = Perspective_match_item; sep2 = Menuseparator; Resize_canvas_item = class Menuaction "Resize _Canvas" "change size of surrounding image" { action x = class _result { _vislevel = 3; // try to guess a sensible size for the new image _guess_size = x.rect, is_Image x = Rect 0 0 100 100; nwidth = Expression "New width (pixels)" _guess_size.width; nheight = Expression "New height (pixels)" _guess_size.height; bgcolour = Expression "Background colour" 0; position = Option "Position" [ "North-west", "North", "North-east", "West", "Centre", "East", "South-west", "South", "South-east", "Specify in pixels" ] 4; left = Expression "Pixels from left" 0; top = Expression "Pixels from top" 0; _result = map_unary process x { process image = insert_noexpand xp yp image background { width = image.width; height = image.height; coding = image.coding; bands = 3, coding == Image_coding.LABPACK = image.bands; format = Image_format.FLOAT, coding == Image_coding.LABPACK = image.format; type = image.type; // placement vectors ... left, centre, right xposv = [0, to_real nwidth / 2 - width / 2, to_real nwidth - width]; yposv = [0, to_real nheight / 2 - height / 2, to_real nheight - height]; xp = left, position == 9 = xposv?((int) (position % 3)); yp = top, position == 9 = yposv?((int) (position / 3)); background = image_new nwidth nheight bands format coding type bgcolour.expr 0 0; } } } } } Image_edit_header_item = class Menuaction "Change _Header" "change advisory header fields of image" { type_names = Image_type.type_names; all_names = sort (map (extract 0) type_names.value); get_prop has get def x = get x, has x = def; action x = class _result { _vislevel = 3; nxres = Expression "Xres" (get_prop has_xres get_xres 1 x); nyres = Expression "Yres" (get_prop has_yres get_yres 1 x); nxoff = Expression "Xoffset" (get_prop has_xoffset get_xoffset 0 x); nyoff = Expression "Yoffset" (get_prop has_yoffset get_yoffset 0 x); type_option = Option_enum Image_type.type_names "Image type" (Image_type.type_names.get_name type) { type = x.type, is_Image x = Image_type.MULTIBAND; } _result = map_unary process x { process image = Image (im_copy_set image.value type_option.value_thing (to_real nxres) (to_real nyres) (to_real nxoff) (to_real nyoff)); } } } #separator Pattern_images_item = class Menupullright "_Patterns" "make a variety of useful patterns" { Grey_item = class Menuaction "Grey _Ramp" "make a smooth grey ramp" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; orientation = Option "Orientation" [ "Horizontal", "Vertical" ] 0; foption = Option "Format" ["8 bit", "float"] 0; _result = ramp, orientation == 0 = rot90 ramp { fn = im_grey, foption == 0 = im_fgrey; ramp = Image (fn (to_real nwidth) (to_real nheight)); } } } Xy_item = class Menuaction "_XY Image" "make a two band image whose pixel values are their coordinates" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; _result = Image (make_xy nwidth nheight); } } Gaussian_item = class Menuaction "Gaussian _Noise" "make an image of gaussian noise" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; mean = Slider 0 255 128; deviation = Slider 0 128 50; _result = Image (im_gaussnoise (to_real nwidth) (to_real nheight) mean.value deviation.value); } } Fractal_item = class Menuaction "_Fractal" "make a fractal image" { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; dimension = Slider 2.001 2.999 2.001; _result = Image (im_fractsurf (to_real nsize) dimension.value); } } Checkerboard_item = class Menuaction "_Checkerboard" "make a checkerboard image" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; hpsize = Expression "Horizontal patch size" 8; vpsize = Expression "Vertical patch size" 8; hpoffset = Expression "Horizontal patch offset" 0; vpoffset = Expression "Vertical patch offset" 0; _result = Image (xstripes ^ ystripes) { pixels = make_xy nwidth nheight; xpixels = pixels?0 + to_real hpoffset; ypixels = pixels?1 + to_real vpoffset; make_stripe pix swidth = pix % (swidth * 2) >= swidth; xstripes = make_stripe xpixels (to_real hpsize); ystripes = make_stripe ypixels (to_real vpsize); } } } Grid_item = class Menuaction "Gri_d" "make a grid" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; hspace = Expression "Horizontal line spacing" 8; vspace = Expression "Vertical line spacing" 8; thick = Expression "Line thickness" 1; hoff = Expression "Horizontal grid offset" 4; voff = Expression "Vertical grid offset" 4; _result = Image (xstripes | ystripes) { pixels = make_xy nwidth nheight; xpixels = pixels?0 + to_real hoff; ypixels = pixels?1 + to_real voff; make_stripe pix swidth = pix % swidth < to_real thick; xstripes = make_stripe xpixels (to_real hspace); ystripes = make_stripe ypixels (to_real vspace); } } } Text_item = class Menuaction "_Text" "make a bitmap of some text" { action = class _result { _vislevel = 3; text = String "Text to paint" "Hello world!"; font = Fontname "Use font" Workspaces.Preferences.PAINTBOX_FONT; wrap = Expression "Wrap text at" 500; align = Option "Alignment" [ "Left", "Centre", "Right" ] 0; dpi = Expression "DPI" 300; _result = Image (im_text text.value font.value (to_real wrap) align.value (to_real dpi)); } } New_CIELAB_slice_item = class Menuaction "CIELAB _Slice" "make a slice through CIELAB space" { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; L = Slider 0 100 50; _result = Image (lab_slice (to_real nsize) L.value); } } sense_option = Option "Sense" [ "Pass", "Reject" ] 0; build fn size = (Image @ image_set_type Image_type.FOURIER @ rotquad @ fn) (im_create_fmask size size); New_ideal_item = class Menupullright "_Ideal Fourier Mask" "make various ideal Fourier filter masks" { High_low_item = class Menuaction "_High or Low Pass" ("make a mask image for a highpass/lowpass " ++ "ideal Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; frequency_cutoff = Slider 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f sense.value frequency_cutoff.value 0 0 0 0; } } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" ("make a mask image for an ring pass/reject " ++ "ideal Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; frequency_cutoff = Slider 0.01 0.99 0.5; ring_width = Slider 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f (sense.value + 6) frequency_cutoff.value ring_width.value 0 0 0; } } } Band_item = class Menuaction "_Band Pass or Band Reject" ("make a mask image for a band pass/reject " ++ "ideal Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; frequency_cutoff_x = Slider 0.01 0.99 0.5; frequency_cutoff_y = Slider 0.01 0.99 0.5; radius = Slider 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f (sense.value + 12) frequency_cutoff_x.value frequency_cutoff_y.value radius.value 0 0; } } } } New_gaussian_item = class Menupullright "_Gaussian Fourier Mask" "make various Gaussian Fourier filter masks" { High_low_item = class Menuaction "_High or Low Pass" ("make a mask image for a highpass/lowpass " ++ "Gaussian Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; frequency_cutoff = Slider 0.01 0.99 0.5; amplitude_cutoff = Slider 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f (sense.value + 4) frequency_cutoff.value amplitude_cutoff.value 0 0 0; } } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" ("make a mask image for an ring pass/reject " ++ "Gaussian Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; frequency_cutoff = Slider 0.01 0.99 0.5; amplitude_cutoff = Slider 0.01 0.99 0.5; ring_width = Slider 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f (sense.value + 10) frequency_cutoff.value ring_width.value amplitude_cutoff.value 0 0; } } } Band_item = class Menuaction "_Band Pass or Band Reject" ("make a mask image for a band pass/reject " ++ "Gaussian Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; frequency_cutoff_x = Slider 0.01 0.99 0.5; frequency_cutoff_y = Slider 0.01 0.99 0.5; radius = Slider 0.01 0.99 0.5; amplitude_cutoff = Slider 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f (sense.value + 16) frequency_cutoff_x.value frequency_cutoff_y.value radius.value amplitude_cutoff.value 0; } } } } New_butterworth_item = class Menupullright "_Butterworth Fourier Mask" "make various Butterworth Fourier filter masks" { High_low_item = class Menuaction "_High or Low Pass" ("make a mask image for a highpass/lowpass " ++ "Butterworth Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; frequency_cutoff = Slider 0.01 0.99 0.5; amplitude_cutoff = Slider 0.01 0.99 0.5; order = Slider 1 10 2; _result = build param (to_real nsize) { param f = f (sense.value + 2) order.value frequency_cutoff.value amplitude_cutoff.value 0 0; } } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" ("make a mask image for an ring pass/reject " ++ "Butterworth Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; frequency_cutoff = Slider 0.01 0.99 0.5; amplitude_cutoff = Slider 0.01 0.99 0.5; ring_width = Slider 0.01 0.99 0.5; order = Slider 1 10 2; _result = build param (to_real nsize) { param f = f (sense.value + 8) order.value frequency_cutoff.value ring_width.value amplitude_cutoff.value 0; } } } Band_item = class Menuaction "_Band Pass or Band Reject" ("make a mask image for a band pass/reject " ++ "Butterworth Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; frequency_cutoff_x = Slider 0.01 0.99 0.5; frequency_cutoff_y = Slider 0.01 0.99 0.5; radius = Slider 0.01 0.99 0.5; amplitude_cutoff = Slider 0.01 0.99 0.5; order = Slider 1 10 2; _result = build param (to_real nsize) { param f = f (sense.value + 14) order.value frequency_cutoff_x.value frequency_cutoff_y.value radius.value amplitude_cutoff.value; } } } } } Test_images_item = class Menupullright "Test I_mages" "make a variety of test images" { Eye_item = class Menuaction "_Spatial Response" "image for testing the eye's spatial response" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; factor = Slider 0.001 1 0.2; _result = Image (im_eye (to_real nwidth) (to_real nheight) factor.value); } } Zone_plate = class Menuaction "_Zone Plate" "make a zone plate" { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; _result = Image (im_zone (to_real nsize)); } } Frequency_test_chart_item = class Menuaction "_Frequency Testchart" "make a black/white frequency test pattern" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; sheight = Expression "Strip height (pixels)" 10; waves = Expression "Wavelengths" [64, 32, 16, 8, 4, 2]; _result = imagearray_assemble 0 0 (transpose [strips]) { freq_slice wave = Image (sin (grey / wave) > 0); strips = map freq_slice waves.expr; grey = im_fgrey (to_real nwidth) (to_real sheight) * 360 * (to_real nwidth); } } } CRT_test_chart_item = class Menuaction "CRT _Phosphor Chart" "make an image for measuring phosphor colours" { action = class _result { _vislevel = 3; brightness = Slider 0 255 200; psize = Expression "Patch size (pixels)" 32; _result = Image (imagearray_assemble 0 0 [[green, red], [blue, white]]) { black = image_new (to_real psize) (to_real psize) 1 Image_format.FLOAT Image_coding.NOCODING Image_type.B_W 0 0 0; notblack = black + brightness; green = black ++ notblack ++ black; red = notblack ++ black ++ black; blue = black ++ black ++ notblack; white = notblack ++ notblack ++ notblack; } } } Greyscale_chart_item = class Menuaction "_Greyscale" "make a greyscale" { action = class _result { _vislevel = 3; pwidth = Expression "Patch width" 8; pheight = Expression "Patch height" 8; npatches = Expression "Number of patches" 16; _result = Image (image_set_type Image_type.B_W (clip2fmt Image_format.UCHAR wedge)) { wedge = 255 / (to_real npatches - 1) * (int) (strip?0 / to_real pwidth) { strip = make_xy (to_real pwidth * to_real npatches) pheight; } } } } CMYK_test_chart_item = class Menuaction "_CMYK Wedges" "make a set of CMYK wedges" { action = class _result { _vislevel = 3; pwidth = Expression "Patch width" 8; pheight = Expression "Patch height" 8; npatches = Expression "Number of patches" 16; _result = Image (image_set_type Image_type.CMYK (clip2fmt Image_format.UCHAR strips)) { wedge = 255 / (to_real npatches - 1) * (int) (strip?0 / to_real pwidth) { strip = make_xy (to_real pwidth * to_real npatches) pheight; } black = wedge * 0; C = wedge ++ black ++ black ++ black; M = black ++ wedge ++ black ++ black; Y = black ++ black ++ wedge ++ black; K = black ++ black ++ black ++ wedge; strips = imagearray_assemble 0 0 [[C],[M],[Y],[K]]; } } } Colour_atlas_item = class Menuaction "_Colour Atlas" "make a grid of patches grouped around a colour" { action = class _result { _vislevel = 3; start = Colour_picker "Lab" [50,0,0]; nstep = Expression "Number of steps" 2; ssize = Expression "Step size" 2; _result = Image (colour_transform_to (get_type start) im) { base = colour_transform_to Image_type.LAB start; step = to_real ssize; offset = to_real nstep * step; range c = [c - offset, c - offset + step ... c + offset]; mk_patch b a = image_new 150 150 3 Image_format.FLOAT Image_coding.NOCODING Image_type.LAB (Vector [base?0, a, b]) 0 0; mk_strip b = map (mk_patch b) (range base?1); mk_grid = map mk_strip (range base?2); im = imagearray_assemble 15 15 mk_grid; } } } } nip2-8.7.0/share/nip2/compat/7.10/_list.def0000644000175000017500000001743713224651032014745 00000000000000/* concat l: join a list of lists together * * concat ["abc","def"] == "abcdef". * concat :: [[*]] -> [*] */ concat l = foldr join [] l; /* drop n l: drop the first n elements from list l * * drop 3 "abcd" == "d" * drop :: num -> [*] -> [*] */ drop n l = l, n <= 0 || l == [] = drop (n - 1) (tl l); /* dropwhile fn l: drop while fn is true * * dropwhile is_digit "1234pigs" == "pigs" * dropwhile :: (* -> bool) -> [*] -> [*] */ dropwhile fn l = [], l == [] = dropwhile fn (tl l), fn (hd l) = l; /* extract n l: extract element at index n from list l */ extract = converse subscript; /* filter fn l: return all elements of l for which predicate fn holds * * filter is_digit "1one2two3three" = "123" * filter :: (* -> bool) -> [*] -> [*] */ filter fn l = foldr addif [] l { addif x l = x : l, fn x; = l; } /* foldl fn st l: fold list l up from the left using function fn and start value st * * Start from the left hand end of the list (unlike foldr, see below). * foldl is less useful (and much slower). * * foldl fn start [a,b .. z] = ((((st fn a) fn b) ..) fn z) * foldl :: (* -> ** -> *) -> * -> [**] -> * */ foldl fn st l = st, l == [] = foldl fn (fn st (hd l)) (tl l); /* foldl1 fn l: like foldl, but use the 1st element as the start value * * foldl1 fn [1,2,3] == ((1 fn 2) fn 3) * foldl1 :: (* -> * -> *) -> [*] -> * */ foldl1 fn l = [], l == [] = foldl fn (hd l) (tl l); /* foldr fn st l: fold up list l, right to left, with function fn and start * * foldr fn st [a,b..z] = (a fn (b fn (.. (z fn st)))) * foldr :: (* -> ** -> **) -> ** -> [*] -> ** */ foldr fn st l = st, l == [] = fn (hd l) (foldr fn st (tl l)); /* foldrl fn l: like foldr, but use the 1st element as the start value * * foldr1 fn [1,2,3,4] == (2 fn (3 fn (4 fn 1))) * foldr1 :: (* -> * -> *) -> [*] -> * */ foldr1 fn l = [], l == [] = foldr fn (hd l) (tl l); /* Search a list for an element, returning it's index (or -1) * * index (equal 12) [13,12,11] == 1 * index :: (* -> bool) -> [*] -> real */ index fn list = search list 0 { search l n = -1, l == [] = n, fn (hd l) = search (tl l) (n + 1); } /* init l: remove last element of list l * * The dual of tl. * init [1,2,3] == [1,2] * init :: [*] -> [*] */ init l = error "init of []", l == []; = [], tl l == []; = hd l : init (tl l); /* iterate f x: repeatedly apply f to x * * return the infinite list [x, f x, f (f x), ..]. * iterate (multiply 2) 1 == [1, 2, 4, 8, 16, 32, 64 ... ] * iterate :: (* -> *) -> * -> [*] */ iterate f x = x : iterate f (f x); /* land l: and all the elements of list l together * * land (map (==0) list) == true, if every element of list is zero. * land :: [bool] -> bool */ land = foldr logical_and true; /* last l: return the last element of list l * * The dual of hd. last [1,2,3] == 3 * last :: [*] -> [*] */ last l = error "last of []", l == [] = hd l, tl l == [] = last (tl l); /* len l: length of list l * * len :: [*] -> num */ len l = 0, l == [] = 1 + len (tl l); /* limit l: return the first element of l which is equal to its predecessor * * useful for checking for convergence * limit :: [*] -> * */ limit l = error "incorrect use of limit", l == [] || tl l == [] || tl (tl l) == [] = a, a == b = limit (b : x) { a = l?0; b = l?1; x = tl (tl l); } /* lor l: or all the elements of list l together * * lor (map (equal 0) list) == true, if any element of list is zero. * lor :: [bool] -> bool */ lor = foldr logical_or false; /* map fn l: map function fn over list l * * map :: (* -> **) -> [*] -> [**] */ map f l = [], l == []; = f (hd l) : map f (tl l); /* map2 fn l1 l2: map two lists together with fn * * map2 :: (* -> ** -> ***) -> [*] -> [**] -> [***] */ map2 fn l1 l2 = map fn' (zip2 l1 l2) { fn' p = fn p?0 p?1; } /* map3 fn l1 l2 l3: map three lists together with fn * * map3 :: (* -> ** -> *** -> ****) -> [*] -> [**] -> [***] -> [****] */ map3 fn l1 l2 l3 = map fn' (zip3 l1 l2 l3) { fn' p = fn p?0 p?1 p?2; } /* member l x: true if x is a member of list l * * is_digit == member "0123456789" * member :: [*] -> * -> bool */ member l x = lor (map (equal x) l); /* mkset eq l: remove duplicates from list l using equality function * * mkset :: (* -> bool) -> [*] -> [*] */ mkset eq l = [], l == [] = a : filter (not @ eq a) (mkset eq x) { a = hd l; x = tl l; } /* postfix l r: add r to the end of list l * * The dual of ':'. * postfix :: [*] -> ** -> [*,**] */ postfix l r = l ++ [r]; /* repeat x: make an infinite list of xes * * repeat :: * -> [*] */ repeat x = map (const x) [1..]; /* replicate n x: make n copies of x in a list * * replicate :: num -> * -> [*] */ replicate n x = take n (repeat x); /* reverse l: reverse list l * * reverse :: [*] -> [*] */ reverse l = foldl (converse cons) [] l; /* scan fn st l: apply (fold fn r) to every initial segment of a list * * scan add 0 [1,2,3] == [1,3,6] * scan :: (* -> ** -> *) -> * -> [**] -> [*] */ scan fn = g { g st l = [st], l == [] = st : g (fn st (hd l)) (tl l); } /* sort l: sort list l into ascending order * * sort :: [*] -> [*] */ sort l = sortc less_equal l; /* sortc comp l: sort list l into order using a comparision function * * Uses merge sort (n log n behaviour) * sortc :: (* -> * -> bool) -> [*] -> [*] */ sortc comp l = l, n <= 1 = merge (sortc comp (take n2 l)) (sortc comp (drop n2 l)) { n = len l; n2 = (int) (n / 2); /* merge l1 l2: merge sorted lists l1 and l2 to make a single * sorted list */ merge l1 l2 = l2, l1 == [] = l1, l2 == [] = a : merge x (b : y), comp a b = b : merge (a : x) y { a = hd l1; x = tl l1; b = hd l2; y = tl l2; } } /* sortpl pl l: sort by a list of predicates * * sortpl :: (* -> bool) -> [*] -> [*] */ sortpl pl l = sortc (test pl) l { /* Comparision function ... put true before false, if equal move on to * the next predicate. */ test pl a b = true, pl == [] = ta, ta != tb = test (tl pl) a b { ta = pl?0 a; tb = pl?0 b; } } /* sortr l: sort list l into descending order * * sortr :: [*] -> [*] */ sortr l = sortc more l; /* split fn l: break a list into sections separated by fn * * split is_space "hello world" == ["hello", "world"] * split :: (* -> bool) -> [*] -> [[*]] */ split fn l = [], l == [] = head : split fn tail { nfn = not @ fn; l' = dropwhile fn l; head = takewhile nfn l'; tail = dropwhile nfn l'; } /* splitpl fnl l: split a list up with a list of predicates * * splitpl [is_digit, is_letter, is_digit] "123cat" == ["123", "cat", []] * splitpl :: [* -> bool] -> [*] -> [[*]] */ splitpl fnl l = l, fnl == [] = head : splitpl (tl fnl) tail { head = takewhile (hd fnl) l; tail = dropwhile (hd fnl) l; } /* split_lines n l: split a list into equal length lines * * split_lines 4 "1234567" == ["1234", "567"] * splitl :: int -> [*] -> [[*]] */ split_lines n l = [], l == [] = take n l : split_lines n (drop n l); /* take n l: take the first n elements from list l * take :: num -> [*] -> [*] */ take n l = [], n <= 0 = [], l == [] = hd l : take (n-1) (tl l); /* takewhile fn l: take from the front of a list while predicate fn holds * * takewhile is_digit "123onetwothree" == "123" * takewhile :: (* -> bool) -> [*] -> [*] */ takewhile fn l = [], l == [] = hd l : takewhile fn (tl l), fn (hd l) = []; /* zip2 l1 l2: zip two lists together * * zip2 [1,2] ['a', 'b', 'c'] == [[1,'a'],[2,'b']] * zip2 :: [*] -> [**] -> [[*,**]] */ zip2 l1 l2 = [], l1 == [] || l2 == [] = [hd l1, hd l2] : zip2 (tl l1) (tl l2); /* zip3 l1 l2 l3: zip three lists together * * zip3 [1,2] ['a', 'b', 'c'] [true] == [[1,'a',true]] * zip3 :: [*] -> [**] ->[***] -> [[*,**,***]] */ zip3 l1 l2 l3 = [], l1 == [] || l2 == [] || l3 == [] = [hd l1, hd l2, hd l3] : zip3 (tl l1) (tl l2) (tl l3); nip2-8.7.0/share/nip2/compat/7.10/_predicate.def0000644000175000017500000002077713224651032015733 00000000000000 /* is_colour_space str: is a string one of nip's colour space names */ is_colour_space str = Image_type.colour_spaces.present 0 str; /* is_colour_type n: is a number one of VIPS's colour spaces */ is_colour_type n = Image_type.colour_spaces.present 1 n; /* is_number: is a real or a complex number. */ is_number a = is_real a || is_complex a; /* is_int: is an integer */ is_int a = is_real a && a == (int) a; /* is_uint: is an unsigned integer */ is_uint a = is_int a && a >= 0; /* is_pint: is a positive integer */ is_pint a = is_int a && a > 0; /* is_preal: is a positive real */ is_preal a = is_real a && a > 0; /* is_ureal: is an unsigned real */ is_ureal a = is_real a && a >= 0; /* is_letter c: true of character c is an ASCII letter * * is_letter :: char -> bool */ is_letter c = ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z'); /* is_digit c: true if character c is an ASCII digit * * is_digit :: char->bool */ is_digit x = '0' <= x && x <= '9'; /* A whitespace character. * * is_space :: char->bool */ is_space = member " \n\t"; /* is_listof p s: true if finite list with p true for every element. */ is_listof p l = is_list l && land (map p l); /* is_string s: true if finite list of char. */ is_string s = is_listof is_char s; /* is_real_list l: is l a list of real numbers ... test each element, * so no infinite lists pls. */ is_real_list l = is_listof is_real l; /* is_string_list l: is l a finite list of finite strings. */ is_string_list l = is_listof is_string l; /* is_rectangular l: is l a rectangular data structure */ is_rectangular l = true, !is_list l = true, land (map is_obj l) = true, land (map is_list l) && land (map (not @ is_obj) l) && land (map is_rectangular l) && len l > 0 && land (map (equal (hd lengths)) (tl lengths)) = false { // treat strings as a base type, not [char] is_obj x = !is_list x || is_string x; lengths = map len l; } /* is_matrix l: is l a list of lists of real numbers, all the same length */ is_matrix l = is_listof is_real_list l && is_rectangular l; /* is_square_matrix l: is l a matrix with width == height */ is_square_matrix l = true, l == [] = is_matrix l && len l == len (hd l); /* is_oddmatrix l: is l a matrix with odd-length sides */ is_oddmatrix l = true, l == [] = is_matrix l && (len l) % 2 == 1 && (len (l?0)) % 2 == 1; /* is_odd_square_matrix l: is l a square_matrix with odd-length sides */ is_odd_square_matrix l = is_square_matrix l && (len l) % 2 == 1; /* Is an item in a column of a table? */ is_incolumn n table x = member (map (extract n) table) x; /* Is HGuide or VGuide. */ is_HGuide x = is_instanceof "HGuide" x; is_VGuide x = is_instanceof "VGuide" x; is_Guide x = is_HGuide x || is_VGuide x; is_Mark x = is_instanceof "Mark" x; is_Group x = is_instanceof "Group" x; is_Image x = is_instanceof "Image" x; is_Region x = is_instanceof "Region" x; is_Real x = is_instanceof "Real" x; is_Matrix x = is_instanceof "Matrix_base" x; is_Vector x = is_instanceof "Vector" x; is_Colour x = is_instanceof "Colour" x; is_Arrow x = is_instanceof "Arrow" x; is_Bool x = is_instanceof "Bool" x; is_Slider x = is_instanceof "Scale" x; is_Rect x = is_instanceof "Rect" x; is_Number x = is_instanceof "Number" x; is_Expression x = is_instanceof "Expression" x; is_String x = is_instanceof "String" x; /* A list of the form [[1,2],[3,4],[5,6]...] */ is_xy_list l = is_list l && land (map xy l) { xy l = is_real_list l && len l == 2; } /* Does an object have a sensible VIPS type? */ has_type x = is_image x || is_Image x || is_Arrow x || is_Colour x; /* Try to get a VIPS image type from an object. */ get_type x = get_type_im x, is_image x = get_type_im x.value, is_Image x = get_type_im x.image.value, is_Arrow x = Image_type.colour_spaces.lookup 0 1 x.colour_space, is_Colour x // slightly odd ... but our display is always 0-255, so it makes sense for // a plain number to be in the same range = Image_type.sRGB, is_real x = error ("get_type: unable to get type from " ++ print x) { // get the type from a VIPS image ... but only if it makes sense with // the rest of the image // we often have Type set wrong, hence the ugly guessing :-( get_type_im im = Image_type.LABQ, coding == Image_coding.LABPACK = Image_type.B_W, bands == 1 = type, bands == 3 && is_colorimetric = Image_type.sRGB, bands == 3 && !is_colorimetric = Image_type.MULTIBAND, bands != 3 && !is_colorimetric = type { type = im_header_int "Type" im; coding = im_header_int "Coding" im; bands = im_header_int "Bands" im; // 3-band colorimetric types we allow ... the things which the // Colour/Convert To menu can make, excluding mono. ok_types = [ Image_type.sRGB, Image_type.LAB, Image_type.LABQ, Image_type.LABS, Image_type.LCH, Image_type.XYZ, Image_type.YXY, Image_type.UCS ]; is_colorimetric = member ok_types type; } } has_format x = has_member "format" x || is_Arrow x || is_image x; get_format x = x.format, has_member "format" x = x.image.format, is_Arrow x = im_header_int "BandFmt" x, is_image x = error ("get_format: unable to get format from " ++ print x); has_bits x = has_member "bits" x || is_Arrow x || is_image x; get_bits x = x.bits, has_member "bits" x = x.image.bits, is_Arrow x = im_header_int "Bbits" x, is_image x = error ("get_bits: unable to get bits from " ++ print x); has_bands x = is_image x || has_member "bands" x || is_Arrow x; get_bands x = x.bands, has_member "bands" x = x.image.bands, is_Arrow x = im_header_int "Bands" x, is_image x = 1, is_real x = len x, is_real_list x = error ("get_bands: unable to get bands from " ++ print x); has_coding x = has_member "coding" x || is_Arrow x || is_image x; get_coding x = x.coding, has_member "coding" x = x.image.coding, is_Arrow x = im_header_int "Coding" x, is_image x = Image_coding.NOCODING, is_real x = error ("get_coding: unable to get coding from " ++ print x); has_xres x = has_member "xres" x || is_Arrow x || is_image x; get_xres x = x.xres, has_member "xres" x = x.image.xres, is_Arrow x = im_header_int "Xres" x, is_image x = error ("get_xres: unable to get xres from " ++ print x); has_yres x = has_member "yres" x || is_Arrow x || is_image x; get_yres x = x.yres, has_member "yres" x = x.image.yres, is_Arrow x = im_header_int "Yres" x, is_image x = error ("get_yres: unable to get yres from " ++ print x); has_xoffset x = has_member "xoffset" x || is_Arrow x || is_image x; get_xoffset x = x.xoffset, has_member "xoffset" x = x.image.xoffset, is_Arrow x = im_header_int "Xoffset" x, is_image x = error ("get_xoffset: unable to get xoffset from " ++ print x); has_yoffset x = has_member "yoffset" x || is_Arrow x || is_image x; get_yoffset x = x.yoffset, has_member "yoffset" x = x.image.yoffset, is_Arrow x = im_header_int "Yoffset" x, is_image x = error ("get_yoffset: unable to get yoffset from " ++ print x); has_value = has_member "value"; get_value x = x.value; has_image x = is_image x || is_Image x || is_Arrow x; get_image x = x.value, is_Image x = x.image.value, is_Arrow x = x, is_image x = error ("get_image: unable to get image from " ++ print x); has_number x = is_number x || is_Real x; get_number x = x.value, is_Real x = x, is_number x = error ("get_number: unable to get number from " ++ print x); has_real x = is_real x || is_Real x; get_real x = x.value, is_Real x = x, is_real x = error ("get_real: unable to get real from " ++ print x); has_width x = has_member "width" x || is_image x; get_width x = x.width, has_member "width" x = im_header_int "Xsize" x, is_image x = error ("get_width: unable to get width from " ++ print x); has_height x = has_member "height" x || is_image x; get_height x = x.height, has_member "height" x = im_header_int "Ysize" x, is_image x = error ("get_height: unable to get height from " ++ print x); has_left x = has_member "left" x; get_left x = x.left, has_member "left" x = error ("get_left: unable to get left from " ++ print x); has_top x = has_member "top" x; get_top x = x.top, has_member "top" x = error ("get_top: unable to get top from " ++ print x); // like has/get member,but first in a lst of objects has_member_list has objects = filter has objects != []; // get a member from the first of a list of objects to have it get_member_list has get objects = hd members, members != [] = error "unable to get property" { members = map get (filter has objects); } is_hist x = has_image x && (h == 1 || w == 1 || t == Image_type.HISTOGRAM) { im = get_image x; w = get_width im; h = get_height im; t = get_type im; } nip2-8.7.0/share/nip2/compat/7.10/Widgets.def0000644000175000017500000000215313224651032015226 00000000000000Widget_slider_item = class Menuaction "_Slider" "make a new slider widget" { icon = "nip-slider-16.png"; action = Slider 0 255 128; } Widget_toggle_item = class Menuaction "_Toggle" "make a new toggle widget" { action = Toggle "untitled" false; } Widget_option_item = class Menuaction "_Option" "make a new option widget" { action = Option "untitled" ["option0", "option1"] 0; } Widget_string_item = class Menuaction "St_ring" "make a new string widget" { action = String "Enter a string" "sample text"; } Widget_number_item = class Menuaction "_Number" "make a new number widget" { action = Number "Enter a number" 42; } Widget_expression_item = class Menuaction "_Expression" "make a new expression widget" { action = Expression "Enter an expression" 42; } Widget_pathname_item = class Menuaction "_File Chooser" "make a new file chooser widget" { action = Pathname "Pick a file" "$VIPSHOME/share/$PACKAGE/data/print_test_image.v"; } Widget_font_item = class Menuaction "F_ont Chooser" "make a new font chooser widget" { action = Fontname "Pick a font" Workspaces.Preferences.PAINTBOX_FONT; } nip2-8.7.0/share/nip2/compat/7.10/Colour.def0000644000175000017500000003545013224651032015071 00000000000000 Colour_new_item = class Menupullright (_ "_New") (_ "make a patch of colour") { Widget_colour_item = class Menuaction (_ "_Colour") (_ "make a patch of colour") { action = Colour_picker "Lab" [50,0,0]; } LAB_colour = class Menuaction (_ "CIE Lab _Picker") (_ "pick colour in CIE Lab space") { action = widget "Lab" [50, 0, 0]; // ab_slice size size = 512; // range of values ... +/- 128 for ab range = 256; // map xy in slice image to ab and back xy2ab x = x / (size / range) - 128; ab2xy a = (a + 128) * (size / range); widget space default_value = class Colour space _result { _vislevel = 3; _L = default_value?0; _a = default_value?1; _b = default_value?2; lightness = Slider 0 100 _L; ab_slice = Image (lab_slice size lightness.value); point = Mark ab_slice (ab2xy _a) (ab2xy _b); _result = [lightness.value, xy2ab point.left, xy2ab point.top]; Colour_edit colour_space value = widget colour_space value; } } } #separator Colour_convert_item = class Menupullright (_ "_Convert To") (_ "convert to various colour spaces") { spaces = Image_type.image_colour_spaces; conv dest x = class _result { _vislevel = 3; to = Option_enum spaces (_ "Convert to") (spaces.get_name dest); _result = map_unary (colour_transform_to to.value_thing) x; } Mono_item = class Menuaction (_ "_Monochrome") (_ "convert to mono colourspace") { action x = conv Image_type.B_W x; } sRGB_item = class Menuaction (_ "_sRGB") (_ "convert to sRGB colourspace") { action x = conv Image_type.sRGB x; } Lab_item = class Menuaction (_ "_Lab") (_ "convert to Lab colourspace (float Lab)") { action x = conv Image_type.LAB x; } LabQ_item = class Menuaction (_ "Lab_Q") (_ "convert to LabQ colourspace (32-bit Lab)") { action x = conv Image_type.LABQ x; } LabS_item = class Menuaction (_ "Lab_S") (_ "convert to LabS colourspace (48-bit Lab)") { action x = conv Image_type.LABS x; } LCh_item = class Menuaction (_ "L_Ch") (_ "convert to LCh colourspace") { action x = conv Image_type.LCH x; } XYZ_item = class Menuaction (_ "_XYZ") (_ "convert to XYZ colourspace") { action x = conv Image_type.XYZ x; } Yxy_item = class Menuaction (_ "_Yxy") (_ "convert to Yxy colourspace") { action x = conv Image_type.YXY x; } UCS_item = class Menuaction (_ "_UCS") (_ "convert to UCS colourspace") { action x = conv Image_type.UCS x; } } /* mark objects as being in various colourspaces */ Colour_tag_item = class Menupullright (_ "_Tag As") (_ "tag object as being in various colour spaces") { spaces = Image_type.image_colour_spaces; tag dest x = class _result { _vislevel = 3; to = Option_enum spaces (_ "Tag as") (spaces.get_name dest); _result = map_unary (image_set_type to.value_thing) x; } Mono_item = class Menuaction (_ "_Monochrome") (_ "tag as being in mono colourspace") { action x = tag Image_type.B_W x; } sRGB_item = class Menuaction (_ "_sRGB") (_ "tag as being in sRGB colourspace") { action x = tag Image_type.sRGB x; } Lab_item = class Menuaction (_ "_Lab") (_ "tag as being in Lab colourspace (float Lab)") { action x = tag Image_type.LAB x; } LabQ_item = class Menuaction (_ "Lab_Q") (_ "tag as being in LabQ colourspace (32-bit Lab)") { action x = tag Image_type.LABQ x; } LabS_item = class Menuaction (_ "Lab_S") (_ "tag as being in LabS colourspace (48-bit Lab)") { action x = tag Image_type.LABS x; } LCh_item = class Menuaction (_ "L_Ch") (_ "tag as being in LCh colourspace") { action x = tag Image_type.LCH x; } XYZ_item = class Menuaction (_ "_XYZ") (_ "tag as being in XYZ colourspace") { action x = tag Image_type.XYZ x; } Yxy_item = class Menuaction (_ "_Yxy") (_ "tag as being in Yxy colourspace") { action x = tag Image_type.YXY x; } UCS_item = class Menuaction (_ "_UCS") (_ "tag as being in UCS colourspace") { action x = tag Image_type.UCS x; } } Colour_temperature_item = class Menupullright (_ "Colour Te_mperature") (_ "colour temperature conversions") { Whitepoint_item = class Menuaction (_ "_Move Whitepoint") (_ "change whitepoint") { action x = class _result { _vislevel = 3; old_white = Option_enum Whitepoints (_ "Old whitepoint") "D65"; new_white = Option_enum Whitepoints (_ "New whitepoint") "D50"; _result = map_unary process x { process im = im''' { im' = colour_transform_to Image_type.XYZ im; im'' = im' * (new_white.value_thing / old_white.value_thing); im''' = colour_transform_to (get_type im) im''; } } } } D65_to_D50_item = class Menupullright (_ "D_65 to D50") (_ "complex conversion") { XYZ_minimal_item = class Menuaction (_ "_Minimal") (_ "D65 to D50 using the minimal 3x3 matrix in XYZ") { action x = map_unary process x { process im = im''' { im' = colour_transform_to Image_type.XYZ im; im'' = recomb D652D50_direct im'; im''' = colour_transform_to (get_type im) im''; } } } Bradford_item = class Menuaction (_ "_Bradford") (_ "D65 to D50 in Bradford cone space") { action x = map_unary process x { process im = im''' { im' = colour_transform_to Image_type.XYZ im; im'' = im_D652D50 im'; im''' = colour_transform_to (get_type im) im''; } } } } D50_to_D65_item = class Menupullright (_ "D_50 to D65") (_ "complex conversion") { XYZ_minimal_item = class Menuaction (_ "_Minimal") (_ "D50 to D65 using the minimal 3x3 matrix in XYZ") { action x = map_unary process x { process im = im''' { im' = colour_transform_to Image_type.XYZ im; im'' = recomb D502D65_direct im'; im''' = colour_transform_to (get_type im) im''; } } } Bradford_item = class Menuaction (_ "_Bradford") (_ "D60 to D65 in Bradford cone space") { action x = map_unary process x { process im = im''' { im' = colour_transform_to Image_type.XYZ im; im'' = im_D502D65 im'; im''' = colour_transform_to (get_type im) im''; } } } } Lab_to_D50XYZ_item = class Menuaction (_ "_Lab to D50 XYZ") (_ "Lab to XYZ with a D50 whitepoint") { action x = map_unary (colour_unary im_D50Lab2XYZ) x; } D50XYZ_to_Lab_item = class Menuaction (_ "D50 _XYZ to Lab") (_ "XYZ to Lab with a D50 whitepoint") { action x = map_unary (colour_unary im_D50XYZ2Lab) x; } } Colour_icc_item = class Menupullright (_ "_ICC") (_ "transform with ICC profiles") { print_profile = "$VIPSHOME/share/$PACKAGE/data/cmyk.icm"; monitor_profile = "$VIPSHOME/share/$PACKAGE/data/sRGB.icm"; guess_profile image = monitor_profile, has_bands image && get_bands image == 3 = print_profile; render_intents = Option_enum Render_intent.names (_ "Render intent") (_ "Absolute"); Export_item = class Menuaction (_ "_Export") (_ "export from PCS to device space") { action x = class _result { _vislevel = 3; profile = Pathname (_ "Output profile") print_profile; intent = render_intents; depth = Option (_ "Output depth") [_ "8 bit", _ "16 bit"] 0; _result = map_unary process x { process image = icc_export [8, 16]?depth profile.value intent.value_thing lab { lab = colour_transform_to Image_type.LABQ image; } } } } Import_item = class Menuaction (_ "_Import") (_ "import from device space to PCS") { action x = class _result { _vislevel = 3; profile = Pathname (_ "Input profile") (guess_profile x); intent = render_intents; _result = map_unary process x { process image = icc_import profile.value intent.value_thing image; } } } Transform_item = class Menuaction (_ "_Transform") (_ "transform between two device spaces") { action x = class _result { _vislevel = 3; in_profile = Pathname (_ "Input profile") (guess_profile x); out_profile = Pathname (_ "Output profile") print_profile; intent = render_intents; _result = map_unary process x { process image = icc_transform in_profile.value out_profile.value intent.value_thing image; } } } AC2RC_item = class Menuaction (_ "_Absolute to Relative") (_ "absolute to relative colorimetry using device profile") { action x = class _result { _vislevel = 3; profile = Pathname (_ "Pick a profile") (guess_profile x); _result = map_unary process x { process image = icc_ac2rc profile.value lab { lab = colour_transform_to Image_type.LAB image; } } } } } #separator Colour_dE_item = class Menupullright (_ "_Difference") (_ "calculate colour difference") { /* Apply a converter to an object ... convert image or colour (since * we can guess the colour space we're converting from), don't convert * matrix or vector (since we can't tell ... assume it's in the right * space already). */ apply_cvt cvt x = cvt x, is_Image x || is_Colour x || is_image x = x; diff cvt in1 in2 = abs_vec (apply_cvt cvt in1 - apply_cvt cvt in2); /* Converter to LAB. */ lab_cvt = colour_transform_to Image_type.LAB; /* Converter to UCS ... plain UCS is Ch form, so we go LAB again after * to make sure we get a rectangular coord system. */ ucs_cvt = colour_transform Image_type.LCH Image_type.LAB @ colour_transform_to Image_type.UCS; CIEdE76_item = class Menuaction (_ "CIE dE _76") (_ "calculate CIE dE 1976 for two objects") { action a b = map_binary (diff lab_cvt) a b; } CIEdE00_item = class Menuaction (_ "CIE dE _00") (_ "calculate CIE dE 2000 for two objects") { action a b = map_binary (colour_binary (_ "im_dE00_fromLab") im_dE00_fromLab) a b; } UCS_item = class Menuaction (_ "_CMC(l:l)") (_ "calculate CMC(l:l) for two objects") { action a b = map_binary (diff ucs_cvt) a b; } } Colour_adjust_item = class Menupullright (_ "_Adjust") (_ "alter colours in various ways") { Recombination_item = class Menuaction (_ "_Recombination") (_ "recombine colour with an editable matrix") { action x = class _result { _vislevel = 3; matrix = Matrix_rec (identity_matrix (bands x)) { // try to guess a sensible value for the size of the // matrix bands x = x.bands, is_Image x || is_Colour x = x.width, is_Matrix x = bands x.value?0, is_Group x = x.bands, has_member "bands" x = 3; } _result = map_unary (recomb matrix) x; } } Cast_item = class Menuaction (_ "_Cast") (_ "displace neutral axis in CIE Lab") { action x = class _result { _vislevel = 3; green_red = Slider (-20) 20 0; blue_yellow = Slider (-20) 20 0; _result = map_unary adjust_cast x { adjust_cast in = colour_transform_to (get_type in) in'' { in' = colour_transform_to Image_type.LAB in; in'' = in' + Vector [0, green_red.value, blue_yellow.value]; } } } } HSB_item = class Menuaction (_ "_HSB") (_ "adjust hue-saturation-brightness in LCh") { action x = class _result { _vislevel = 3; hue = Slider 0 360 0; saturation = Slider 0.01 5 1; brightness = Slider 0.01 5 1; _result = map_unary adjust_hsb x { adjust_hsb in = colour_transform_to (get_type in) in'' { in' = colour_transform_to Image_type.LCH in; in'' = in' * Vector [bv, sv, 1] + Vector [0, 0, hv]; bv = brightness.value; sv = saturation.value; hv = hue.value; } } } } } Colour_similar_item = class Menuaction (_ "_Similar Colour") (_ "find pixels with a similar colour") { action x = class _result { _vislevel = 3; target_colour = Colour_picker "Lab" [50, 0, 0]; dE_threshold = Slider 0 100 10; _result = map_unary match x { match in = abs_vec (in' - target) < dE_threshold { target = colour_transform_to Image_type.LAB target_colour; in' = colour_transform_to Image_type.LAB in; } } } } #separator Colour_image_to_colour_item = class Menuaction (_ "Im_age to Colour") (_ "convert image to colour") { action x = map_unary test x { test x = to_colour x, is_Image x = to_colour (Image pixel), is_Mark x = error (_ "Colour_from_image: arg not Image or Mark: " ++ print x) { pixel = extract_area x.left x.top 1 1 x; } } } Colour_colour_to_image_item = class Menuaction (_ "C_olour to _Image") (_ "convert colour to image") { action x = class _result { _vislevel = 3; width = Expression (_ "Width of image to make") 64; height = Expression (_ "Height of image to make") 64; _result = map_unary (Image @ build) x { build in = image_new (to_real width) (to_real height) 3 Image_format.FLOAT Image_coding.NOCODING (get_type in) in 0 0; } } } #separator Colour_chart_to_matrix_item = class Menuaction (_ "_Measure Colour Chart") (_ "measure average pixel values for a colour chart image") { action x = class _result { _vislevel = 3; pacross = Expression (_ "Patches across chart") 6; pdown = Expression (_ "Patches down chart") 4; _result = map_unary chart x { chart in = measure 0 0 in.width in.height (to_real pacross) (to_real pdown) in; } } } Colour_matrix_to_chart_item = class Menuaction (_ "Make S_ynthetic Colour Chart") (_ "make a colour chart image from a matrix of measurements") { action x = class _result { _vislevel = 3; pacross = Expression (_ "Patches across chart") 6; pdown = Expression (_ "Patches down chart") 4; pwidth = Expression (_ "Patch width in pixels") 50; pheight = Expression (_ "Patch height in pixels") 50; bwidth = Expression (_ "Border between patches") 0; _result = map_unary build_chart x { build_chart in = Image (imagearray_assemble (to_real bwidth) (to_real bwidth) patch_table) { // patch numbers for row starts rowstart = map (multiply (to_real pacross)) [0 .. to_real pdown - 1]; // assemble patches ... each one a pixel value patches = map (take (to_real pacross)) (map (converse drop in.value) rowstart); // make an n-band constant image from eg. [1,2,3] // we don't know the format .. use sRGB (well, why not?) patch v = image_new (to_real pwidth) (to_real pheight) (len v) Image_format.FLOAT Image_coding.NOCODING Image_type.sRGB (Vector v) 0 0; // make an image for each patch patch_table = map (map patch) patches; } } } } Colour_plot_ab_scatter_item = class Menuaction (_ "_Plot ab Scatter") (_ "plot an ab scatter histogram") { action x = class _result { _vislevel = 3; bins = Expression (_ "Number of bins on each axis") 8; _result = map_unary plot_scatter x { plot_scatter in = Image (bg * (((90 / mx) * hist) ++ blk)) { lab = colour_transform_to Image_type.LAB in.value; ab = (unsigned char) ((lab?1 ++ lab?2) + 128); hist = hist_find_nD bins.expr ab; mx = max hist; bg = lab_slice bins.expr 1; blk = 1 + im_black (to_real bins) (to_real bins) 2; } } } } nip2-8.7.0/share/nip2/compat/7.10/_joe_extra.def0000644000175000017500000003120113224651032015733 00000000000000//////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// Frame_item = class Menupullright "Picture _Frame" "working with images of frames" { //////////////////////////////////////////////////////////////////////////////////// Build_frame_item = class Menupullright "_Build Frame From" "builds a new frame from image a and places it around image b" { //////////////////////////////////////////////////////////////////////////////////// Frame_corner_item = class Menuaction "_Frame Corner" "copies and extends a frame corner, a, to produce a complete frame to fit round a given image, b" { prefs = Workspaces.Preferences; action a b = class _result { _check_args = [ [a, "a", check_Image], [b, "b", check_Image] ]; _check_all = [ [a.coding == b.coding && a.bands == b.bands, "a.coding == b.coding && a.bands == b.bands"] ]; _vislevel = 3; ppcm = Expression "Number of pixels per cm" 25; /* Given the value of ppcm, distance between the inner edge of the frame * and the outer edge of the image. +ve values mean the frame overlaps * the image. */ overlap = Expression "Size of frame overlap in cm" 0; variables = class { scale_factor = Expression "scale the size of the frame by" 1; /* These sliders define the fraction of the frames width or height is extracted * to produce each of the particular regions. */ corner_section = Slider 0.1 1 0.5; middle_section = Slider 0.1 1 0.2; blend_fraction = Slider 0.1 0.9 0.1; } _type = Image_type.colour_spaces.get_name b.type; //If applied the count colour be seen for -ve values of overlap mount_options = class { apply = Toggle "Apply mount options" false; ls = Expression "Lower mount section bigger by (cm)" 0; mount_colour = Colour _type [0, 0, 0]; _los = ls.expr * ppcm.expr; } _cs = variables.corner_section.value; _ms = variables.middle_section.value; _ov = ppcm.expr * overlap.expr; _sf = variables.scale_factor.expr; _bf = variables.blend_fraction.value; //Scale frame image if required. _a = a, _sf == 1; = a, _sf == 0; = Image (resize _sf _sf Interpolate.BILINEAR a.value); _im_w = b.width; _im_h = b.height + mount_options._los, mount_options.apply = b.height; _os = mount_options._los, mount_options.apply = 0; _cl = Vector mount_options.mount_colour.value, mount_options.apply = 0; //Produce scaled and resized frame. frame = corner_frame _a _im_w _im_h _ov _cs _ms _bf; //Resize image canvas and applied mount colour as required. _pos_im = frame_position_image b frame _os _cl; //Wrap frame round image. _result = if (frame == 0) then _pos_im else frame; } } //////////////////////////////////////////////////////////////////////////////////// Simple_frame_item = class Menuaction "_Simple Frame" "extends or shortens the central sections of a simple frame, a, to fit round a given image, b" { prefs = Workspaces.Preferences; action a b = class _result { _check_args = [ [a, "a", check_Image], [b, "b", check_Image] ]; _check_all = [ [a.coding == b.coding && a.bands == b.bands, "a.coding == b.coding && a.bands == b.bands"] ]; _vislevel = 3; ppcm = Expression "Number of pixels per cm" 25; /* Given the value of ppcm, distance between the inner edge of the frame * and the outer edge of the image. +ve values mean the frame overlaps * the image. */ overlap = Expression "Size of frame overlap in cm" 0; variables = class { scale_factor = Expression "scale the size of the frame by" 1; /* These sliders define the fraction of the frames width or height that * is extracted to produce each of the particular regions. */ corner_section = Slider 0.1 1 0.5; middle_section = Slider 0.1 1 0.3; blend_fraction = Slider 0.1 0.9 0.1; option = Toggle "Use mirror of left-side to make right" true; } _type = Image_type.colour_spaces.get_name b.type; //If applied the count colour be seen for -ve values of overlap mount_options = class { apply = Toggle "Apply mount options" false; ls = Expression "Lower mount section bigger by (cm)" 0; mount_colour = Colour _type [0, 0, 0]; _los = ls.expr * ppcm.expr; } _cs = variables.corner_section.value; _ms = variables.middle_section.value; _ov = ppcm.expr * overlap.expr; _sf = variables.scale_factor.expr; _bf = variables.blend_fraction.value; //Scale frame image if required. _a = a, _sf == 1; = a, _sf == 0; = Image (resize _sf _sf Interpolate.BILINEAR a.value); _im_w = b.width; _im_h = b.height + mount_options._los, mount_options.apply = b.height; _os = mount_options._los, mount_options.apply = 0; _cl = Vector mount_options.mount_colour.value, mount_options.apply = 0; //Produce scaled and resized frame. frame = simple_frame _a _im_w _im_h _ov _cs _ms _bf variables.option; //Resize image canvas and applied mount colour as required. _pos_im = frame_position_image b frame _os _cl; //Wrap frame round image. _result = if (frame == 0) then _pos_im else frame; } } //////////////////////////////////////////////////////////////////////////////////// Complex_frame_item = class Menuaction "_Complex Frame" "extends or shortens the central sections of a frame a, preserving any central edge details, to fit image b" { prefs = Workspaces.Preferences; action a b = class _result { _check_args = [ [a, "a", check_Image], [b, "b", check_Image] ]; _check_all = [ [a.coding == b.coding && a.bands == b.bands, "a.coding == b.coding && a.bands == b.bands"] ]; _vislevel = 3; ppcm = Expression "Number of pixels per cm" 25; /* Given the value of ppcm, distance between the inner edge of the frame * and the outer edge of the image. +ve values mean the frame overlaps * the image. */ overlap = Expression "Size of frame overlap in cm" 0; variables = class { scale_factor = Expression "scale the size of the frame by" 1; /* These sliders define the fraction of the frames width or height is extracted * to produce each of the particular regions. */ corner_section = Slider 0.1 1 0.4; edge_section = Slider 0.1 1 0.1; middle_section = Slider 0.1 0.5 0.3; blend_fraction = Slider 0.1 0.9 0.1; option = Toggle "Use mirror of left-side to make right" true; } _type = Image_type.colour_spaces.get_name b.type; //If applied the count colour be seen for -ve values of overlap mount_options = class { apply = Toggle "Apply mount color" false; ls = Expression "Lower mount section bigger by (cm)" 0; colour = Colour _type [0, 0, 0]; _los = ls.expr * ppcm.expr; } _cs = variables.corner_section.value; _es = variables.edge_section.value; _ms = variables.middle_section.value; _ov = ppcm.expr * overlap.expr; _sf = variables.scale_factor.expr; _bf = variables.blend_fraction.value; _a = a, _sf == 1; = a, _sf == 0; = Image (resize _sf _sf Interpolate.BILINEAR a.value); _im_w = b.width; _im_h = b.height + mount_options._los, mount_options.apply = b.height; _os = mount_options._los, mount_options.apply = 0; _cl = Vector mount_options.colour.value, mount_options.apply = 0; //Produce scaled and resized frame. frame = complex_frame _a _im_w _im_h _ov _cs _es _ms _bf variables.option; //Resize image canvas and applied mount colour as required. _pos_im = frame_position_image b frame _os _cl; //Wrap frame round image. _result = if (frame == 0) then _pos_im else frame; } } } //////////////////////////////////////////////////////////////////////////////////// Straighten_frame_item = class Menuaction "_Straighten Frame" "uses four points to square up distorted images of frames" { action a = Perspective_item.action a; } }; //////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// Select_item = class Menupullright "_Select" "select user defined areas of an image" { prefs = Workspaces.Preferences; /* Option toggle used to define whether the user is replacing a * dark or a light area. */ _control = Option "Make" [ "Selection Brighter", "Selection Darker", "Selection Black", "Selection White", "Background Black", "Background White", "Mask" ] 6; control_selection mask im no = (if mask then im * 1.2 else im * 1), no == 0 = (if mask then im * 0.8 else im * 1), no == 1 = (if mask then 0 else im), no == 2 = (if mask then 255 else im), no == 3 = (if mask then im else 0), no == 4 = (if mask then im else 255), no == 5 = mask; Elipse = class Menuaction "_Ellipse" "use a line/arrow x to define the center point radius and direction of an ellipse" { action x = class _result { _vislevel = 3; control = _control; width = Slider 0.01 1 0.5; _result = control_selection mask im control { mask = select_ellipse x width.value; im = x.image; } } } Tetragon = class Menuaction "_Tetragon" "selects the convex area defined by four points" { action a b c d = class _result { _vislevel = 3; control = _control; _result = control_selection mask im control { mask = select_tetragon a b c d; im = a.image; } } } Polygon = class Menuaction "_Polygon" "selects a polygon from an ordered group of points" { action pt_list = class _result { _vislevel = 3; control = _control; _result = control_selection mask im control { mask = select_polygon pt_list; im = ((pt_list.value)?0).image; } } } }; //////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// Perspective_match_item = class Menuaction "_Perspective Match" "rotate, scale and skew one image to match another" { action x y = class _result { _vislevel = 3; // try to find an image ... for a group, get the first item find_image x = x, is_Image x = find_image x?0, is_list x = find_image x.value, is_class x && has_value x = error "unable to find image"; _a = find_image x; _b = find_image y; ap1 = Mark_relative _a 0.1 0.1; ap2 = Mark_relative _a 0.9 0.1; ap3 = Mark_relative _a 0.1 0.9; ap4 = Mark_relative _a 0.9 0.9; bp1 = Mark_relative _b 0.1 0.1; bp2 = Mark_relative _b 0.9 0.1; bp3 = Mark_relative _b 0.1 0.9; bp4 = Mark_relative _b 0.9 0.9; _result = map_binary process x y { f1 = _a.width / _b.width; f2 = _a.height / _b.height; rl = sort_pts_clockwise [ap1, ap2, ap3, ap4]; pl = sort_pts_clockwise [bp1, bp2, bp3, bp4]; to = [ rl?0.left, rl?0.top, rl?1.left, rl?1.top, rl?2.left, rl?2.top, rl?3.left, rl?3.top ]; from = [ pl?0.left * f1, pl?0.top * f2, pl?1.left * f1, pl?1.top * f2, pl?2.left * f1, pl?2.top * f2, pl?3.left * f1, pl?3.top * f2 ]; trans = perspective_transform to from; process a b = transform 1 0 trans b2 { b2 = resize f1 f2 1 b, (f1 >= 1 && f2 >= 1) || (f1 >= 1 && f2 >= 1) = resize f1 1 1 b1 {b1 = resize 1 f2 1 b;} } } } } //////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// Perspective_item = class Menuaction "Pe_rspective Distort" "rotate, scale and skew an image with respect to defined points" { action x = class _result { _vislevel = 3; // try to find an image ... for a group, get the first item find_image x = x, is_Image x = find_image x?0, is_list x = find_image x.value, is_class x && has_value x = error "unable to find image"; _a = find_image x; dir = Option "Select distort direction" [ "Distort to points", "Distort to corners" ] 1; ap1 = Mark_relative _a 0.1 0.1; ap2 = Mark_relative _a 0.9 0.1; ap3 = Mark_relative _a 0.9 0.9; ap4 = Mark_relative _a 0.1 0.9; _result = map_unary process x { trans = [perspective_transform to from, perspective_transform from to]?(dir.value) { rl = sort_pts_clockwise [ap1, ap2, ap3, ap4]; to = [(rl?0).left, (rl?0).top, (rl?1).left, (rl?1).top, (rl?2).left, (rl?2).top, (rl?3).left, (rl?3).top]; from=[0, 0, (_a.width - 1), 0, (_a.width - 1), (_a.height - 1), 0, (_a.height - 1)]; } process a = transform 1 0 trans a; } } }; nip2-8.7.0/share/nip2/compat/7.10/_generate.def0000644000175000017500000000515613224651032015557 00000000000000 /* make an image of size x by y whose pixels are their coordinates. */ make_xy x y = im_make_xy (to_real x) (to_real y); /* make an image with the specified properties ... pixel is (eg.) * Vector [0, 0, 0], or 12. If coding == labq, we ignore bands, format and * type, generate a 3 band float image, and lab2labq it before handing it * back. */ image_new w h b fmt coding type pixel xoff yoff = im'''' { b' = 3, coding == Image_coding.LABPACK = b; fmt' = Image_format.FLOAT, coding == Image_coding.LABPACK = fmt; type' = Image_type.LAB, coding == Image_coding.LABPACK = type; im = im_black (to_real w) (to_real h) (to_real b') + pixel; im' = clip2fmt fmt' im; im'' = im_Lab2LabQ im', coding == Image_coding.LABPACK; = im'; im''' = image_set_type type' im''; im'''' = image_set_origin xoff yoff im'''; } /* generate a slice of LAB space size x size pixels for L* == l */ lab_slice size l = image_set_type Image_type.LAB im { L = image_new size size 1 Image_format.FLOAT Image_coding.NOCODING Image_type.B_W l 0 0; A1 = im_fgrey (to_real size) (to_real size); /* im_fgrey always makes 0-1, so these ranges can be wired in. */ A2 = A1 * 256 - 128; A4 = im_rot90 A2; im = image_set_origin (size / 2) (size / 2) (L ++ A2 ++ A4); } /* Look at Image, try to make a Colour (failing that, a Vector) which is white * for that image type. */ image_white im = colour_transform_to type white_lab, bands == 3 && coding == Image_coding.NOCODING && colour_spaces.present 1 type = white_lab, coding == Image_coding.LABPACK = Vector (replicate bands (max_value.lookup 1 0 format)) { bands = im.bands; type = im.type; format = im.format; coding = im.coding; colour_spaces = Image_type.colour_spaces; // white as LAB white_lab = Colour "Lab" [100, 0, 0]; // maximum value for this numeric type max_value = Table [ [255, Image_format.DPCOMPLEX], [255, Image_format.DOUBLE], [255, Image_format.COMPLEX], [255, Image_format.FLOAT], [2 ** 31 - 1, Image_format.INT], [2 ** 32 - 1, Image_format.UINT], [2 ** 15 - 1, Image_format.SHORT], [2 ** 16 - 1, Image_format.USHORT], [2 ** 7 - 1, Image_format.CHAR], [2 ** 8 - 1, Image_format.UCHAR] ]; } /* Make a seperable gaussian mask. */ matrix_gaussian_blur radius = Matrix_con mask_g_sum 0 [mask_g_line] { mask_g = im_gauss_imask (radius / 3) 0.2; mask_g_line = mask_g.value?(mask_g.height / 2); mask_g_sum = foldr1 add mask_g_line; } /* Make a seperable square mask. */ matrix_blur radius = Matrix_con (foldr1 add mask_sq_line) 0 [mask_sq_line] { mask_sq_line = replicate (2 * radius - 1) 1; } nip2-8.7.0/share/nip2/compat/7.10/Math.def0000644000175000017500000002622013224651032014512 00000000000000Math_arithmetic_item = class Menupullright "_Arithmetic" "basic arithmetic for objects" { Add_item = class Menuaction "_Add" "add a and b" { action a b = map_binary add a b; } Subtract_item = class Menuaction "_Subtract" "subtract b from a" { action a b = map_binary subtract a b; } Multiply_item = class Menuaction "_Multiply" "multiply a by b" { action a b = map_binary multiply a b; } Divide_item = class Menuaction "_Divide" "divide a by b" { action a b = map_binary divide a b; } Remainder_item = class Menuaction "_Remainder" "remainder after integer division of a by b" { action a b = map_binary remainder a b; } sep1 = Menuseparator; Absolute_value_item = class Menuaction "A_bsolute Value" "absolute value of x" { action x = map_unary abs x; } Absolute_value_vector_item = class Menuaction "Absolute Value _Vector" "like Absolute Value, but treat pixels as vectors" { action x = map_unary abs_vec x; } Sign_item = class Menuaction "S_ign" "unit vector" { action x = map_unary sign x; } Negate_item = class Menuaction "_Negate" "multiply by -1" { action x = map_unary unary_minus x; } } Math_trig_item = class Menupullright "_Trigonometry" "trigonometry operations (all in degrees)" { Sin_item = class Menuaction "_Sine" "calculate sine x" { action x = map_unary sin x; } Cos_item = class Menuaction "_Cosine" "calculate cosine x" { action x = map_unary cos x; } Tan_item = class Menuaction "_Tangent" "calculate tangent x" { action x = map_unary tan x; } sep1 = Menuseparator; Asin_item = class Menuaction "Arc S_ine" "calculate arc sine x" { action x = map_unary asin x; } Acos_item = class Menuaction "Arc C_osine" "calculate arc cosine x" { action x = map_unary acos x; } Atan_item = class Menuaction "Arc T_angent" "calculate arc tangent x" { action x = map_unary atan x; } sep2 = Menuseparator; Rad_item = class Menuaction "_Degrees to Radians" "convert degrees to radians" { action x = map_unary rad x; } Deg_item = class Menuaction "_Radians to Degrees" "convert radians to degrees" { action x = map_unary deg x; } sep3 = Menuseparator; Angle_range_item = class Menuaction "Angle i_n Range" "is angle within t degrees of r, mod 360" { action t r angle = clock (max - angle) < 2*r { max = clock (t + r); clock a = a + 360, a < 0; = a - 360, a >= 360; = a; } } } Math_log_item = class Menupullright "_Log" "logarithms and anti-logs" { Exponential_item = class Menuaction "_Exponential" "calculate e ** x" { action x = map_unary (power e) x; } Log_natural_item = class Menuaction "Natural _Log" "log base e of x" { action x = map_unary log x; } sep1 = Menuseparator; Exponential10_item = class Menuaction "E_xponential base 10" "calculate 10 ** x" { action x = map_unary (power 10) x; } Log10_item = class Menuaction "L_og Base 10" "log base 10 of x" { action x = map_unary log10 x; } sep2 = Menuseparator; Raise_to_power_item = class Menuaction "_Raise to Power" "calculate x ** y" { action x y = map_binary power x y; } } Math_complex_item = class Menupullright "_Complex" "operations on complex numbers and images" { Complex_extract = class Menupullright "_Extract" "extract fields from complex" { Real_item = class Menuaction "_Real" "extract real part of complex" { action in = map_unary re in; } Imaginary_item = class Menuaction "_Imaginary" "extract imaginary part of complex" { action in = map_unary im in; } } Complex_build_item = class Menuaction "_Build" "join a and b to make a complex" { action a b = map_binary comma a b; } sep1 = Menuseparator; Polar_item = class Menuaction "_Polar" "convert real and imag to amplitude and phase" { action a = map_unary polar a; } Rectangular_item = class Menuaction "_Rectagular" ("convert (amplitude, phase) image to rectangular " ++ "coordinates") { action x = map_unary rectangular x; } sep2 = Menuseparator; Conjugate_item = class Menuaction "_Conjugate" "invert imaginary part" { action x = map_unary conj x; } } Math_boolean_item = class Menupullright "_Boolean" "bitwise boolean operations for integer objects" { And_item = class Menuaction "_And" "bitwise and of a and b" { action a b = map_binary bitwise_and a b; } Or_item = class Menuaction "_Or" "bitwise or of a and b" { action a b = map_binary bitwise_or a b; } Eor_item = class Menuaction "E_xclusive Or" "bitwise exclusive or of a and b" { action a b = map_binary eor a b; } Not_item = class Menuaction "_Not" "invert a" { action a = map_unary not a; } sep1 = Menuseparator; Right_shift_item = class Menuaction "Shift _Right" "shift a right by b bits" { action a b = map_binary right_shift a b; } Left_shift_item = class Menuaction "Shift _Left" "shift a left by b bits" { action a b = map_binary left_shift a b; } sep2 = Menuseparator; If_then_else_item = class Menuaction "_If Then Else" "b where a is non-zero, c elsewhere" { action a b c = map_trinary if_then_else a b c; } Band_or_item = class Menuaction "Band O_r" "or the bands of an image together" { action im = map_unary (foldr1 bitwise_or @ bandsplit) im; } Band_and_item = class Menuaction "Band A_nd" "and the bands of an image together" { action im = map_unary (foldr1 bitwise_and @ bandsplit) im; } } Math_relational_item = class Menupullright "R_elational" "comparison operations" { Equal_item = class Menuaction "_Equal to" "test a equal to b" { action a b = map_binary equal a b; } Not_equal_item = class Menuaction "_Not Equal to" "test a not equal to b" { action a b = map_binary not_equal a b; } sep1 = Menuseparator; More_item = class Menuaction "_More Than" "test a strictly greater than b" { action a b = map_binary more a b; } Less_item = class Menuaction "_Less Than" "test a strictly less than b" { action a b = map_binary less a b; } sep2 = Menuseparator; More_equal_item = class Menuaction "M_ore Than or Equal to" "test a greater than or equal to b" { action a b = map_binary more_equal a b; } Less_equal_item = class Menuaction "L_ess Than or Equal to" "test a less than or equal to b" { action a b = map_binary less_equal a b; } } Math_list_item = class Menupullright "L_ist" "operations on lists" { Head_item = class Menuaction "_Head" "first element in list" { action x = hd x; } Tail_item = class Menuaction "_Tail" "list without the first element" { action x = tl x; } Last_item = class Menuaction "_Last" "last element in list" { action x = last x; } Init_item = class Menuaction "_Init" "list without the last element" { action x = init x; } sep1 = Menuseparator; Reverse_item = class Menuaction "_Reverse" "reverse order of elements in list" { action x = reverse x; } Sort_item = class Menuaction "_Sort" "sort list into ascending order" { action x = sort x; } Make_set_item = class Menuaction "_Make Set" "remove duplicates from list" { action x = mkset equal x; } Transpose_list_item = class Menuaction "Tr_anspose" "exchange rows and columns in a list of lists" { action x = transpose x; } Concat_item = class Menuaction "_Concat" "flatten a list of lists into a single list" { action l = concat l; } sep2 = Menuseparator; Length_item = class Menuaction "L_ength" "find the length of list" { action x = len x; } Subscript_item = class Menuaction "S_ubscript" "return element n from list (index from zero)" { action n x = n ? x; } Take_item = class Menuaction "_Take" "take the first n elements of list x" { action n x = take n x; } Drop_item = class Menuaction "_Drop" "drop the first n elements of list x" { action n x = drop n x; } sep3 = Menuseparator; Join_item = class Menuaction "_Join" "join two lists end to end" { action a b = a ++ b; } Cons_item = class Menuaction "C_ons" "put element a on the front of list x" { action a x = a : x; } Zip_item = class Menuaction "_Zip" "join two lists, pairwise" { action a b = zip2 a b; } } Math_round_item = class Menupullright "_Round" "various rounding operations" { /* smallest integral value not less than x */ Ceil_item = class Menuaction "_Ceil" "smallest integral value not less than x" { action x = map_unary ceil x; } Floor_item = class Menuaction "_Floor" "largest integral value not greater than x" { action x = map_unary floor x; } Rint_item = class Menuaction "_Round to Nearest" "round to nearest integer" { action x = map_unary rint x; } } Math_fourier_item = class Menupullright "_Fourier" "Fourier transform" { Forward_item = class Menuaction "_Forward" "fourier transform of image" { action a = map_unary (rotquad @ fwfft) a; } Reverse_item = class Menuaction "_Reverse" "inverse fourier transform of image" { action a = map_unary (invfft @ rotquad) a; } Rotate_quadrants_item = class Menuaction "Rotate _Quadrants" "rotate quadrants" { action a = map_unary rotquad a; } } Math_stats_item = class Menupullright "_Statistics" "measure various statistics of objects" { Mean_item = class Menuaction "_Mean" "mean value" { action a = map_unary mean a; } Deviation_item = class Menuaction "_Standard Deviation" "standard deviation of object" { action a = map_unary deviation a; } Stats_item = class Menuaction "_Many Stats" "calculate many stats in a single pass" { action a = map_unary stats a; } sep1 = Menuseparator; Max_item = class Menuaction "M_aximum" "maximum of object" { action a = map_unary max a; } Min_item = class Menuaction "M_inimum" "minimum of object" { action a = map_unary min a; } Maxpos_item = class Menuaction "Position of M_aximum" "position of maximum in object" { action a = map_unary maxpos a; } Minpos_item = class Menuaction "Position of M_inimum" "position of minimum in object" { action a = map_unary minpos a; } sep2 = Menuseparator; Count_set_item = class Menuaction "_Non-zeros" "number of non-zero elements in object" { action a = map_unary cset a { cset i = (mean (i != 0) * i.width * i.height) / 255; } } Count_clear_item = class Menuaction "_Zeros" "number of zero elements in object" { action a = map_unary cclear a { cclear i = (mean (i == 0) * i.width * i.height) / 255; } } Count_edges_item = class Menuaction "_Edges" "count average edges across or down image" { action x = class _result { _vislevel = 3; edge = Option "Count" [ "Horizontal lines", "Vertical lines" ] 0; _result = map_unary process x { process image = Number (edge.labels?edge) (im_cntlines image.value edge.value); } } } } Math_base_item = class Menupullright "Bas_e" "convert number bases" { Hexadecimal_item = class Menuaction "_Hexadecimal" "convert to hexadecimal (base 16)" { action a = map_unary (print_base 16) a; } Binary_item = class Menuaction "_Binary" "convert to binary (base 2)" { action a = map_unary (print_base 2) a; } Octal_item = class Menuaction "_Octal" "convert to octal (base 8)" { action a = map_unary (print_base 8) a; } } nip2-8.7.0/share/nip2/compat/7.10/Tasks.def0000644000175000017500000005566313224651032014723 00000000000000Tasks_capture_item = class Menupullright "_Capture" "useful stuff for capturing and preprocessing images" { Video_item = class Menuaction "Capture _Video Frame" "capture a frame of still video" { // shortcut to prefs prefs = Workspaces.Preferences; action = class _result { _vislevel = 3; device = prefs.VIDEO_DEVICE; channel = Option "Input channel" [ "TV", "Composite 1", "Composite 2", "Composite 3" ] prefs.VIDEO_CHANNEL; brightness = Slider 0 32767 prefs.VIDEO_BRIGHTNESS; colour = Slider 0 32767 prefs.VIDEO_COLOUR; contrast = Slider 0 32767 prefs.VIDEO_CONTRAST; hue = Slider 0 32767 prefs.VIDEO_HUE; frames_hint = "Average this many frames:"; frames = Slider 0 100 prefs.VIDEO_FRAMES; mono = Toggle "Monochrome grab" prefs.VIDEO_MONO; crop = Toggle "Crop image" prefs.VIDEO_CROP; // grab, but hide it ... if we let the crop edit _raw_grab = Image (im_video_v4l1 device channel.value brightness.value colour.value contrast.value hue.value frames.value); edit_crop = Region _raw_grab left top width height { left = prefs.VIDEO_CROP_LEFT; top = prefs.VIDEO_CROP_TOP; width = min_pair prefs.VIDEO_CROP_WIDTH (_raw_grab.width + left); height = min_pair prefs.VIDEO_CROP_HEIGHT (_raw_grab.height + top); } aspect_ratio = Expression "Stretch vertically by" prefs.VIDEO_ASPECT; _result = frame' { frame = edit_crop, crop = _raw_grab; frame' = colour_transform_to Image_type.B_W frame, mono = frame; } } } Smooth_image_item = class Menuaction "_Smooth" "remove small features from image" { action in = class _result { _vislevel = 3; feature = Slider 1 50 20; _result = map_unary (smooth feature.value) in; } } Light_correct_item = class Menuaction "_Flatfield" "use white image w to flatfield image i" { action w i = map_binary wc w i { wc w i = clip2fmt i.format (w' * i) { fac = mean w / max w; w' = fac * (max w / w); } } } Image_rank_item = Filter_rank_item.Image_rank_item; Tilt_item = Filter_tilt_item; sep1 = Menuseparator; White_balance_item = class Menuaction "_White Balance" "use average of small image to set white of large image" { action a b = class _result { _vislevel = 3; white_hint = "Set image white to:"; white = Colour_picker "Lab" [100, 0, 0]; _result = map_binary wb a b { wb a b = colour_transform_to (get_type image) image_xyz' { area x = x.width * x.height; larger x y = area x > area y; args = sortc larger [a, b]; image = args?0; patch = args?1; to_xyz = colour_transform_to Image_type.XYZ; // white balance in XYZ patch_xyz = to_colour (to_xyz patch); white_xyz = to_xyz white; facs = (mean patch_xyz / mean white_xyz) * (white_xyz / patch_xyz); image_xyz = to_xyz image; image_xyz' = image_xyz * facs; } } } } Gamma_item = Image_levels_item.Gamma_item; Tone_item = Image_levels_item.Tone_item; sep2 = Menuseparator; Crop_item = Image_crop_item; Rotate_item = Image_transform_item.Rotate_item; Flip_item = Image_transform_item.Flip_item; Resize_item = Image_transform_item.Resize_item; Rubber_item = Image_transform_item.Image_rubber_item; sep3 = Menuseparator; ICC_item = Colour_icc_item; Temp_item = Colour_temperature_item; Find_calib_item = class Menuaction "Find _Colour Calibration" "find an RGB -> XYZ transform from an image of a colour chart" { action image = class _result { _check_args = [ [image, "image", check_Image] ]; _vislevel = 3; // get macbeth data file to use macbeth = Pathname "Pick a Macbeth data file" "$VIPSHOME/share/$PACKAGE/data/macbeth_lab_d65.mat"; // get max of input image _max_value = Image_format.maxval image.format; // measure chart image _camera = im_measure image.value 0 0 image.width image.height 6 4; // load true values _true_Lab = Matrix_file macbeth.value; _true_XYZ = colour_transform Image_type.LAB Image_type.XYZ _true_Lab; // get Ys of greyscale _true_grey_Y = map (extract 1) (drop 18 _true_XYZ.value); // camera greyscale (all bands) _camera_grey = drop 18 _camera.value; // normalise both to 0-1 and combine _camera_grey' = map (map (multiply (1 / _max_value))) _camera_grey; _true_grey_Y' = map (multiply (1 / 100)) _true_grey_Y; _comb = Matrix (map2 cons _true_grey_Y' _camera_grey'); // make a linearising lut ... zero on left _linear_lut = im_invertlut _comb (_max_value + 1); // and display it linearising_lut = Image _linear_lut; // map the original image through the lineariser to // get linear 0-1 RGB image _image' = hist_map linearising_lut.value image.value; // remeasure and solve for RGB -> XYZ _camera' = im_measure _image' 0 0 image.width image.height 6 4; _pinv = (transpose _camera' * _camera') ** -1; M = transpose (_pinv * transpose _camera' * _true_XYZ); // convert linear RGB camera to Lab _result = (Image @ colour_transform Image_type.XYZ Image_type.LAB @ cast_float @ recomb M) _image'; // measure again and compute dE76 _camera'' = im_measure _result.value 0 0 image.width image.height 6 4; _dEs = map abs_vec (map Vector (_camera'' - _true_Lab).value); final_dE76 = mean (Vector _dEs); _max_dE = foldr max_pair 0 _dEs; _worst = index (equal _max_dE) _dEs; worst_patch = _macbeth_names ? _worst ++ " (patch " ++ print (_worst + 1) ++ ", " ++ print _max_dE ++ " dE)"; } } Apply_calib_item = class Menuaction "_Apply Colour Calibration" "apply an RGB -> LAB transform to an image" { action a b = result, is_instanceof calib_name calib && is_Image image = error (_ "bad arguments to " ++ "Calibrate_image") { // the name of the calib object we need calib_name = "Tasks_capture_item.Find_calib_item.action"; // get the Calibrate_chart arg first args = sortc (const (is_instanceof calib_name)) [a, b]; calib = args?1; image = args?0; // map the original image through the lineariser to get // linear 0-1 RGB image image' = hist_map calib.linearising_lut image; // convert linear RGB camera to Lab result = colour_transform Image_type.XYZ Image_type.LAB ((float) (recomb calib.M image')); } } } Tasks_mosaic_item = class Menupullright "_Mosaic" "building image mosaics" { /* Check and group a point list by image. */ mosaic_sort_test l = error "mosaic: not all points", !is_listof is_Mark l = error "mosaic: points not on two images", len images != 2 = error "mosaic: images do not match in format and coding", !all_equal (map get_format l) || !all_equal (map get_coding l) = error "mosaic: not same number of points on each image", !foldr1 equal (map len l') = l' { // test for all elements of a list equal all_equal l = land (map (equal (hd l)) (tl l)); // all the different images images = mkset pointer_equal (map get_image l); // find all points defined on image test_image image p = (get_image p) === image; find l image = filter (test_image image) l; // group point list by image l' = map (find l) images; } /* Sort a point group to get right before left, and within each group to * get above before below. */ mosaic_sort_lr l = l'' { // sort to get upper point first above a b = a.top < b.top; l' = map (sortc above) l; // sort to get right group before left group right a b = a?0.left > b?0.left; l'' = sortc right l'; } /* Sort a point group to get top before bottom, and within each group to * get left before right. */ mosaic_sort_tb l = l'' { // sort to get upper point first left a b = a.left < b.left; l' = map (sortc left) l; // sort to get right group before left group below a b = a?0.top > b?0.top; l'' = sortc below l'; } /* Put 'em together! Group by image, sort vertically (or horizontally) with * one of the above, transpose to get pairs matched up, and flatten again. */ mosaic_sort fn = concat @ transpose @ fn @ mosaic_sort_test; Mosaic_1point_item = class Menupullright "_One Point" "join two images with a single tie point" { check_ab_args a b = [ [a, "a", check_Mark], [b, "b", check_Mark] ]; // shortcut to prefs prefs = Workspaces.Preferences; search_area = prefs.MOSAIC_WINDOW_SIZE; object_size = prefs.MOSAIC_OBJECT_SIZE; blend_width_widget = Slider 0 100 prefs.MOSAIC_MAX_BLEND_WIDTH; refine_widget = Toggle "Refine selected tie-points" prefs.MOSAIC_REFINE; lr_mos _refine a b = class Image _result { _check_args = check_ab_args a b; blend_width = blend_width_widget; refine = _refine; _result = im_lrmosaic a'.image.value b'.image.value 0 a'.left a'.top b'.left b'.top (object_size / 2) (search_area / 2) 0 blend_width.value, refine = im_lrmerge a'.image.value b'.image.value (b'.left - a'.left) (b'.top - a'.top) blend_width.value { sorted = mosaic_sort mosaic_sort_lr [a, b]; a' = sorted?0; b' = sorted?1; } } tb_mos _refine a b = class Image _result { _check_args = check_ab_args a b; blend_width = blend_width_widget; refine = _refine; _result = im_tbmosaic a'.image.value b'.image.value 0 a'.left a'.top b'.left b'.top (object_size / 2) (search_area / 2) 0 blend_width.value, refine = im_tbmerge a'.image.value b'.image.value (b'.left - a'.left) (b'.top - a'.top) blend_width.value { sorted = mosaic_sort mosaic_sort_tb [a, b]; a' = sorted?0; b' = sorted?1; } } Left_right_item = class Menuaction "_Left to Right" "join two images left-right with a single tie point" { action a b = lr_mos refine_widget a b; } Top_bottom_item = class Menuaction "_Top to Bottom" "join two images top-bottom with a single tie point" { action a b = tb_mos refine_widget a b; } sep1 = Menuseparator; Left_right_manual_item = class Menuaction "Manual L_eft to Right" "join left-right, no auto-adjust of tie points" { action a b = lr_mos false a b; } Top_bottom_manual_item = class Menuaction "Manual T_op to Bottom" "join top-bottom, no auto-adjust of tie points" { action a b = tb_mos false a b; } } Mosaic_2point_item = class Menupullright "_Two Point" "join two images with two tie points" { check_abcd_args a b c d = [ [a, "a", check_Mark], [b, "b", check_Mark], [c, "c", check_Mark], [d, "d", check_Mark] ]; // shortcut to prefs prefs = Workspaces.Preferences; search_area = prefs.MOSAIC_WINDOW_SIZE; object_size = prefs.MOSAIC_OBJECT_SIZE; blend_width_widget = Slider 0 100 prefs.MOSAIC_MAX_BLEND_WIDTH; refine_widget = Toggle "Refine selected tie-points" prefs.MOSAIC_REFINE; Left_right_item = class Menuaction "_Left to Right" "join two images left-right with a pair of tie points" { action a b c d = class Image _result { _check_args = check_abcd_args a b c d; blend_width = blend_width_widget; refine = refine_widget; _result = im_lrmosaic1 a'.image.value b'.image.value 0 a'.left a'.top b'.left b'.top c'.left c'.top d'.left d'.top (object_size / 2) (search_area / 2) 0 blend_width.value, refine = im_lrmerge1 a'.image.value b'.image.value a'.left a'.top b'.left b'.top c'.left c'.top d'.left d'.top blend_width.value { sorted = mosaic_sort mosaic_sort_lr [a, b, c, d]; a' = sorted?0; b' = sorted?1; c' = sorted?2; d' = sorted?3; } } } Top_bottom_item = class Menuaction "_Top to Bottom" "join two images top-bottom with a pair of tie points" { action a b c d = class Image _result { _check_args = check_abcd_args a b c d; blend_width = blend_width_widget; refine = refine_widget; _result = im_tbmosaic1 a'.image.value b'.image.value 0 a'.left a'.top b'.left b'.top c'.left c'.top d'.left d'.top (object_size / 2) (search_area / 2) 0 blend_width.value, refine = im_tbmerge1 a'.image.value b'.image.value a'.left a'.top b'.left b'.top c'.left c'.top d'.left d'.top blend_width.value { sorted = mosaic_sort mosaic_sort_tb [a, b, c, d]; a' = sorted?0; b' = sorted?1; c' = sorted?2; d' = sorted?3; } } } } sep1 = Menuseparator; Balance_item = class Menuaction "Mosaic _Balance" "disassemble mosaic, scale brightness to match, reassemble" { action x = map_unary balance x { balance x = oo_unary_function balance_op x, is_class x = im_global_balancef x Workspaces.Preferences.MOSAIC_BALANCE_GAMMA, is_image x = error (_ "bad arguments to " ++ "balance") { balance_op = Operator "balance" balance Operator_type.COMPOUND_REWRAP false; } } } //////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// Manual_balance_item = class Menupullright "Manual B_alance" "balance tonality of user defined areas" { prefs = Workspaces.Preferences; //////////////////////////////////////////////////////////////////////////////////// Balance_find_item = class Menuaction "_Find Values" "calculates values required to scale and offset balance user defined areas in a given image" /* Outputs a matrix of scale and offset values. Eg. Values required to balance the secondary * structure in an X-ray image. Takes an X-ray image an 8-bit control mask and a list of * 8-bit reference masks, where the masks are white on a black background. */ { action im_in m_control m_group = class Matrix values{ _vislevel = 1; _control_im = if_then_else m_control im_in 0; _control_meanmax = so_meanmax _control_im; _group_check = is_instanceof "Group" m_group; _m_list = m_group.value, _group_check = m_group; process m_current mat_in = mat_out {so_values = so_calculate _control_meanmax im_in m_current; mat_out = join [so_values] mat_in;} values = (foldr process [] _m_list); } } //////////////////////////////////////////////////////////////////////////////////// Balance_check_item = class Menuaction "_Check Values" "allows calculated set of scale and offset values to be checked and adjusted if required" /* Outputs adjusted matrix of scale and offset values and scale and offset image maps. * Eg. Check values required to balance the secondary structure in an X-ray image. * Takes an X-ray image an 8-bit control mask and a list of 8-bit reference masks, * where the masks are white on a black background. */ { action im_in m_matrix m_group = class Image value { _vislevel = 3; blur = Slider 1 10 1; _blur = (blur.value/2 + 0.5), blur.value > 1 = 1; _group_check = is_instanceof "Group" m_group; _m_list = m_group.value, _group_check = m_group; adjust = Matrix_rec mat_a { no_masks = len _m_list; mat_a = replicate no_masks [0, 0]; } // Apply the user defined adjustments to the inputted matrix of scale and offset values _adjusted = map2 fn_adjust m_matrix.value adjust.value; fn_adjust a b = [(a?0 + b?0), (a?1 + (a?1 * b?1))]; _scaled_ims = map (fn_so_apply im_in) _adjusted; fn_so_apply im so = map_unary adj im {adj im = im * (so?0) + (so?1);} _im_pairs = zip2 _m_list _scaled_ims; // Prepare black images as starting point. //////////// _blank = image_new (_m_list?0).width (_m_list?0).height 1 6 Image_coding.NOCODING 1 0 0 0; _pair_start = [(_blank + 1), _blank]; Build = Toggle "Build Scale and Offset Correction Images" false; Output = class { _vislevel = 1; scale_im = _build?0; offset_im = _build?1; so_values = Matrix _adjusted; _build = [Image so_images?0, Image so_images?1], Build = ["Scale image not built.", "Offset image not built."] { m_list' = transpose [_m_list]; m_all = map2 join m_list' _adjusted; so_images = foldr process_2 _pair_start m_all; } } value = (foldr process_1 im_in_b _im_pairs).value {im_in_b = map_unary cast_float im_in;} process_1 m_current im_start = im_out { bl_mask = convsep (matrix_blur _blur) (get_image m_current?0); blended_im = im_blend bl_mask (m_current?1).value im_start.value; im_out = Image (clip2fmt im_start.format blended_im); } // Process for building scale and offset image. process_2 current p_start = p_out { im_s = if ((current?0) > 128) then current?1 else _blank; im_o = if ((current?0) > 128) then current?2 else _blank; im_s' = convsep (matrix_blur _blur) (im_s != 0); im_o' = convsep (matrix_blur _blur) (im_o != 0); im_s'' = im_blend im_s'.value im_s.value p_start?0; im_o'' = im_blend im_o'.value im_o.value p_start?1; p_out = [im_s'', im_o'']; } } } //////////////////////////////////////////////////////////////////////////////////// Balance_apply_item = class Menuaction "_Apply Values" "apply scale and offset corrections, defined as image maps, to a given image" /* Outputs the balanced image. Eg. Balance the secondary structure in an X-ray image. Takes an * X-ray image an 32-bit float scale image and a 32-bit offset image. */ { action im_in scale_im offset_im = class Image value { _vislevel = 1; xfactor = im_in.width/scale_im.width; yfactor = im_in.height/scale_im.height; _scale_im = resize xfactor yfactor 1 scale_im; _offset_im = resize xfactor yfactor 1 offset_im; value = get_image ( clip2fmt im_in.format ( ( im_in * _scale_im ) + _offset_im ) ); } } } Tilt_item = Filter_tilt_item; sep2 = Menuseparator; Rebuild_item = class Menuaction "_Rebuild" "disassemble mosaic, substitute image files and reassemble" { action x = class _result { _vislevel = 3; old = String "In each filename, replace" "foo"; new = String "With" "bar"; _result = map_unary remosaic x { remosaic image = Image (im_remosaic image.value old.value new.value); } } } sep3 = Menuseparator; Clone_area_item = class Menuaction "_Clone Area" "replace dark or light section of im1 with pixels from im2" { action im1 im2 = class _result { _check_args = [ [im1, "im1", check_Image], [im2, "im2", check_Image] ]; _vislevel = 3; /* Region on first image placed in the top left hand corner, * positioned and size relative to the height and width of im1. */ r1 = Region_relative im1 0.05 0.05 0.05 0.05; /* Mark on second image placed in the top left hand corner, * positioned relative to the height and width of im2. Used to * define _r2, the region from which the section of image is cloned * from. */ p2 = Mark_relative im2 0.05 0.05; _r2 = Region im2 p2.left p2.top r1.width r1.height; mask = [r1 <= Options.scale_cutoff, r1 >= Options.scale_cutoff]?(Options.replace); Options = class { _vislevel = 3; pause = Toggle "Pause process" true; /* Option toggle used to define whether the user is * replacing a dark or a light area. */ replace = Option "Replace" [ "A Dark Area", "A Light Area" ] 1; // Used to select the area to be replaced. scale_cutoff = Slider 0.01 mx (mx / 2) {mx = Image_format.maxval im1.format;} //Allows replacement with scale&offset balanced gaussian noise. balance = Toggle "Balance cloned data to match surroundings." true; //Allows replacement with scale&offset balanced //gaussian noise. process = Toggle "Replace area with Gaussian noise." false; } _result = im1, Options.pause = Image (im_insert im1.value patch r1.left r1.top) { r2 = Region im2 p2.left p2.top r1.width r1.height; ref_meanmax = so_meanmax (if mask then 0 else r1); mask8 = Matrix_mor [[255, 255, 255], [255, 255, 255], [255, 255, 255]]; mask_a = map_unary (dilate mask8) mask; mask_b = convsep (matrix_blur 2) mask_a; patch = so_balance ref_meanmax r1 r2 mask_b Options.process, Options.balance = so_balance ref_meanmax r1 r2 mask_b Options.process, Options.process = im_blend (get_image mask_b) (get_image r2) (get_image r1); } } } } Tasks_frame_item = Frame_item; Tasks_print_item = class Menupullright "_Print" "useful stuff for image output" { Rotate_item = Image_transform_item.Rotate_item; Flip_item = Image_transform_item.Flip_item; Resize_item = Image_transform_item.Resize_item; Tone_item = class Menuaction "_Adjust Tone Curve" "adjust tone curve on L*" { action x = class _result { _vislevel = 3; auto = Option "Set black and white point" [ "Manually", "Automatically from image histogram" ] 0; black = Slider 0 100 0; white = Slider 0 100 100; shadow_point = Slider 0.1 0.3 0.2; mid_point = Slider 0.4 0.6 0.5; highlight_point = Slider 0.7 0.9 0.8; shadow_adjust = Slider (-15) 15 0; mid_adjust = Slider (-30) 30 0; highlight_adjust = Slider (-15) 15 0; preview_curve = Image (im_tone_build black.value white.value shadow_point.value mid_point.value highlight_point.value shadow_adjust.value mid_adjust.value highlight_adjust.value); _result = map_unary process x { process image = tone_map curve lab { lab = colour_transform_to Image_type.LABQ image; curve = preview_curve, auto == 0 = tone_analyse shadow_point mid_point highlight_point shadow_adjust mid_adjust highlight_adjust lab; } } } } Sharpen_item = class Menuaction "_Sharpen" "unsharp filter tuned for typical inkjet printers" { action x = class _result { _vislevel = 3; // strange order forced on us by need to keep numbering backwards // compatible though 7.10 target_dpi = Option "Sharpen for print at" [ "300 dpi", "150 dpi", "75 dpi", "400 dpi" ] 0; _result = map_unary process x { process image = sharpen params?0 params?1 params?2 params?3 params?4 params?5 (colour_transform_to Image_type.LABQ image) { // sharpen params for various dpi // just change the size of the area we search param_table = [ [7, 2.5, 40, 20, 0.5, 1.5], [5, 2.5, 40, 20, 0.5, 1.5], [3, 2.5, 40, 20, 0.5, 1.5], [11, 2.5, 40, 20, 0.5, 1.5] ]; params = param_table?target_dpi; } } } } sep1 = Menuseparator; Temp_item = Colour_temperature_item; ICC_item = Colour_icc_item; } nip2-8.7.0/share/nip2/compat/7.10/_types.def0000644000175000017500000010575213224651032015134 00000000000000 /* Lots of little arg checks. Global for convenience. */ check_any = [(const true), _ "any"]; check_bool = [is_bool, _ "boolean"]; check_real = [is_real, _ "real"]; check_ureal = [is_ureal, _ "unsigned real"]; check_preal = [is_preal, _ "positive real"]; check_list = [is_list, _ "list"]; check_real_list = [is_real_list, _ "list of real"]; check_string = [is_string, _ "string"]; check_string_list = [is_string_list, _ "list of string"]; check_int = [is_int, _ "integer"]; check_uint = [is_uint, _ "unsigned integer"]; check_pint = [is_pint, _ "positive integer"]; check_matrix = [is_matrix, _ "rectangular array of real"]; check_matrix_display = [Matrix_display.is_display, _ "0, 1, 2 or 3"]; check_image = [is_image, _ "image"]; check_xy_list = [is_xy_list, _ "list of form [[1, 2], [3, 4], [5, 6], ...]"]; check_instance name = [is_instanceof name, name]; check_Image = check_instance "Image"; check_Matrix = [is_Matrix, _ "Matrix"]; check_Matrix_width w = [is_Matrix_width, _ "Matrix, " ++ print w ++ _ " columns"] { is_Matrix_width x = is_Matrix x && x.width == w; } check_colour_space = [is_colour_space, "colour_space"]; check_rectangular = [is_rectangular, _ "rectangular [[*]]"]; check_Guide = [is_Guide, _ "HGuide or VGuide"]; check_Colour = check_instance (_ "Colour"); check_Mark = check_instance (_ "Mark"); /* Check a set of args to a class. Two members to look at: _check_args and * _check_all. * * - each line in _check_args is [arg, "arg name", [test_fn, "arg type"]] * same number of lines as there are args * * stuff like "arg 2 must be real" * * - each line in _check_all is [test, "description"] * any number of lines * * stuff like "to must be greater than from" * * generate an error dialog with a helpful message on failure. * * Have as a separate function to try to keep the size of _Object down a bit. */ check_args x = error message, badargs != [] || badalls != [] = check_args x.super, x.super != [] = x { argcheck = x._check_args; allcheck = x._check_all; // join two strings up with a separator string join_sep j a b = a ++ j ++ b; // indent string indent = " "; // test for a condition in a check line fails test_fail x = ! x?0; // set of failed argcheck indexes badargs = map (extract 1) (filter test_fail (zip2 (map testarg argcheck) [0..])) { testarg x = x?2?0 x?0; } // set of failed allcheck indexes badalls = map (extract 1) (filter test_fail (zip2 (map hd allcheck) [0..])); // the error message message = _ "bad arguments to " ++ "\"" ++ x.name ++ "\"\n" ++ argmsg ++ allmsg ++ "\n" ++ _ "usage" ++ "\n" ++ indent ++ usage ++ "\n" ++ _ "where" ++ "\n" ++ arg_types ++ extra; // make the failed argcheck messages ... eg. ""value" should be // real, you passed " etc. argmsg = concat (map fmt badargs) { fmt n = indent ++ "\"" ++ argcheck?n?1 ++ "\"" ++ _ " should be of type " ++ argcheck?n?2?1 ++ ", " ++ _ "you passed" ++ ":\n" ++ indent ++ indent ++ print argcheck?n?0 ++ "\n"; } // make the failed allcheck messages ... eg "condition failed: // x < y" ... don't make a message if any typechecks have // failed, as we'll probably error horribly allmsg = [], badargs != [] = concat (map fmt badalls) ++ _ "you passed" ++ "\n" ++ concat (map fmt_arg argcheck) { fmt n = _ "condition failed" ++ ": " ++ allcheck?n?1 ++ "\n"; fmt_arg l = indent ++ l?1 ++ " = " ++ print l?0 ++ "\n"; } // make usage note usage = x.name ++ " " ++ foldr (join_sep " ") [] (map (extract 1) argcheck); // make arg type notes arg_types = foldr (join_sep "\n") [] (map fmt argcheck) { fmt l = indent ++ l?1 ++ " is of type " ++ l?2?1; } // extra bit at the bottom, if we have any conditions extra = [], allcheck == [] = _ "and" ++ "\n" ++ all_desc; // make a list of all the allcheck descriptions, with a few // spaces in front all_desc_list = map (join indent @ extract 1) allcheck; // join em up to make a set of condition notes all_desc = foldr (join_sep "\n") [] all_desc_list; } /* Operator overloading stuff. */ Operator_type = class { ARITHMETIC = 1; // eg. add RELATIONAL = 2; // eg. less COMPOUND = 3; // eg. max/mean/etc. COMPOUND_REWRAP = 4; // eg. transpose } Operator op_name fn type symmetric = class { } /* Form the converse of an Operator. */ oo_converse op = Operator (converse_name op.op_name) (converse op.fn) op.type op.symmetric { converse_name x = init x, last x == last "'" = x ++ "'"; } /* Given an operator name, look up the definition. */ oo_binary_lookup op_name = matches?0, matches != [] = error (_ "unknown binary operator" ++ ": " ++ print op_name) { operator_table = [ Operator "add" add Operator_type.ARITHMETIC true, Operator "subtract" subtract Operator_type.ARITHMETIC false, Operator "remainder" remainder Operator_type.ARITHMETIC false, Operator "power" power Operator_type.ARITHMETIC false, Operator "subscript" subscript Operator_type.ARITHMETIC false, Operator "left_shift" left_shift Operator_type.ARITHMETIC false, Operator "right_shift" right_shift Operator_type.ARITHMETIC false, Operator "divide" divide Operator_type.ARITHMETIC false, Operator "join" join Operator_type.ARITHMETIC false, Operator "multiply" multiply Operator_type.ARITHMETIC true, Operator "logical_and" logical_and Operator_type.ARITHMETIC true, Operator "logical_or" logical_or Operator_type.ARITHMETIC true, Operator "bitwise_and" bitwise_and Operator_type.ARITHMETIC true, Operator "bitwise_or" bitwise_or Operator_type.ARITHMETIC true, Operator "eor" eor Operator_type.ARITHMETIC true, Operator "comma" comma Operator_type.ARITHMETIC false, Operator "if_then_else" if_then_else Operator_type.ARITHMETIC false, Operator "equal" equal Operator_type.RELATIONAL true, Operator "not_equal" not_equal Operator_type.RELATIONAL true, Operator "less" less Operator_type.RELATIONAL false, Operator "less_equal" less_equal Operator_type.RELATIONAL false ]; matches = filter test_name operator_table; test_name x = x.op_name == op_name; } /* Given an operator name, look up a function that implements that * operator. */ oo_unary_lookup op_name = matches?0, matches != [] = error (_ "unknown unary operator" ++ ": " ++ print op_name) { operator_table = [ /* Operators. */ Operator "cast_signed_char" cast_signed_char Operator_type.ARITHMETIC false, Operator "cast_unsigned_char" cast_unsigned_char Operator_type.ARITHMETIC false, Operator "cast_signed_short" cast_signed_short Operator_type.ARITHMETIC false, Operator "cast_unsigned_short" cast_unsigned_short Operator_type.ARITHMETIC false, Operator "cast_signed_int" cast_signed_int Operator_type.ARITHMETIC false, Operator "cast_unsigned_int" cast_unsigned_int Operator_type.ARITHMETIC false, Operator "cast_float" cast_float Operator_type.ARITHMETIC false, Operator "cast_double" cast_double Operator_type.ARITHMETIC false, Operator "cast_complex" cast_complex Operator_type.ARITHMETIC false, Operator "cast_double_complex" cast_double_complex Operator_type.ARITHMETIC false, Operator "unary_minus" unary_minus Operator_type.ARITHMETIC false, Operator "negate" negate Operator_type.RELATIONAL false, Operator "complement" complement Operator_type.ARITHMETIC false, Operator "unary_plus" unary_plus Operator_type.ARITHMETIC false, /* Built in projections. */ Operator "re" re Operator_type.ARITHMETIC false, Operator "im" im Operator_type.ARITHMETIC false, Operator "hd" hd Operator_type.ARITHMETIC false, Operator "tl" tl Operator_type.ARITHMETIC false, /* Maths builtins. */ Operator "sin" sin Operator_type.ARITHMETIC false, Operator "cos" cos Operator_type.ARITHMETIC false, Operator "tan" tan Operator_type.ARITHMETIC false, Operator "asin" asin Operator_type.ARITHMETIC false, Operator "acos" acos Operator_type.ARITHMETIC false, Operator "atan" atan Operator_type.ARITHMETIC false, Operator "log" log Operator_type.ARITHMETIC false, Operator "log10" log10 Operator_type.ARITHMETIC false, Operator "exp" exp Operator_type.ARITHMETIC false, Operator "exp10" exp10 Operator_type.ARITHMETIC false, Operator "ceil" ceil Operator_type.ARITHMETIC false, Operator "floor" floor Operator_type.ARITHMETIC false ]; matches = filter test_name operator_table; test_name x = x.op_name == op_name; } /* Find the matching methods in a method table. */ oo_method_lookup table = map (extract 0) (filter (extract 1) table); /* A binary op: a is a class, b may be a class ... eg. "add" a b two obvious ways to find a method: - a.oo_binary_search "add" (+) b - b.oo_binary_search "add'" (converse (+)) a, is_class b if these fail but op is a symmetric operator (eg. a + b == b + a), we can also try reversing the args - a.oo_binary_search "add'" (converse (+)) b - b.oo_binary_search "add" (+) a, is_class b */ oo_binary_function op a b = matches1?0, matches1 != [] = matches2?0, is_class b && matches2 != [] = matches3?0, op.symmetric && matches3 != [] = matches4?0, op.symmetric && is_class b && matches4 != [] = error (_ "No method found for binary operator." ++ "\n" ++ _ "left" ++ " = " ++ print a ++ "\n" ++ _ "operator" ++ " = " ++ op.op_name ++ "\n" ++ _ "right" ++ " = " ++ print b) { matches1 = oo_method_lookup (a.oo_binary_table op b); matches2 = oo_method_lookup (b.oo_binary_table (oo_converse op) a); matches3 = oo_method_lookup (a.oo_binary_table (oo_converse op) b); matches4 = oo_method_lookup (b.oo_binary_table op a); } /* A binary op: a is not a class, b is a class ... eg. "subtract" a b only one way to find a method: - b.oo_binary_search "subtract'" (converse (-)) a if this fails but op is a symmetric operator (eg. a + b == b + a), we can try reversing the args - b.oo_binary_search "add" (+) a, is_class b */ oo_binary'_function op a b = matches1?0, matches1 != [] = matches2?0, op.symmetric && matches2 != [] = error (_ "No method found for binary operator." ++ "\n" ++ _ "left" ++ " = " ++ print a ++ "\n" ++ _ "operator" ++ " = " ++ op.op_name ++ "\n" ++ _ "right" ++ " = " ++ print b) { matches1 = oo_method_lookup (b.oo_binary_table (oo_converse op) a); matches2 = oo_method_lookup (b.oo_binary_table op a); } oo_unary_function op x = matches?0, matches != [] = error (_ "No method found for unary operator." ++ "\n" ++ _ "operator" ++ " = " ++ op.op_name ++ "\n" ++ _ "argument" ++ " = " ++ print x) { matches = oo_method_lookup (x.oo_unary_table op); } /* Base class for nip's built-in classes ... base check function, base * operator overload functions. */ _Object = class { check = check_args this; _check_args = []; _check_all = []; /* Operator overloading stuff. */ oo_binary op x = oo_binary_function (oo_binary_lookup op) this x; oo_binary' op x = oo_binary'_function (oo_binary_lookup op) x this; oo_unary op = oo_unary_function (oo_unary_lookup op) this; /* Provide a fallback for class == thing ... just use pointer * equality. */ oo_binary_table op x = [ [pointer_equal this x, op.op_name == "equal" || op.op_name == "equal'"], [not_pointer_equal this x, op.op_name == "not_equal" || op.op_name == "not_equal'"] ]; oo_unary_table op = []; } /* A list of things. Do automatic iteration of unary and binary operators on us. */ Group value = class _Object { _check_args = [ [value, "value", check_list] ]; // methods oo_binary_table op x = [ [this.Group (map2 (apply2 op) value x.value), is_Group x], [this.Group (map (apply2 op' x) value), true] ] ++ super.oo_binary_table op x { op' = oo_converse op; apply2 op x1 x2 = oo_binary_function op x1 x2, is_class x1 = oo_binary'_function op x1 x2, is_class x2 = op.fn x1 x2; }; oo_unary_table op = [ [this.Group (map apply value), true] ] ++ super.oo_unary_table op { apply x = oo_unary_function op x, is_class x = op.fn x; } } /* Single real number ... eg slider. */ Real value = class _Object { _check_args = [ [value, "value", check_real] ]; // methods oo_binary_table op x = [ [this.Real (op.fn this.value x.value), is_Real x && op.type == Operator_type.ARITHMETIC], [this.Real (op.fn this.value x), is_real x && op.type == Operator_type.ARITHMETIC], [op.fn this.value x.value, is_Real x && op.type == Operator_type.RELATIONAL], [op.fn this.value x, !is_class x] ] ++ super.oo_binary_table op x; oo_unary_table op = [ [this.Real (op.fn this.value), op.type == Operator_type.ARITHMETIC], [op.fn this.value, true] ] ++ super.oo_unary_table op; } /* Single bool ... eg Toggle. */ Bool value = class _Object { _check_args = [ [value, "value", check_bool] ]; // methods oo_binary_table op x = [ [if value then x?0 else x?1, op.op_name == "if_then_else"], [this.Bool (op.fn this.value x.value), is_Bool x], [this.Bool (op.fn this.value x), is_bool x] ] ++ super.oo_binary_table op x; oo_unary_table op = [ [this.Bool (op.fn this.value), op.type == Operator_type.ARITHMETIC || op.type == Operator_type.RELATIONAL] ] ++ super.oo_unary_table op; } /* An editable string. */ String caption value = class _Object { _check_args = [ [caption, "caption", check_string], [value, "value", check_string] ]; } /* An editable real number. */ Number caption value = class scope.Real value { _check_args = [ [caption, "caption", check_string] ]; Real x = this.Number caption x; } /* An editable expression. */ Expression caption expr = class (if is_class expr then expr else _Object) { _check_args = [ [caption, "caption", check_string], [expr, "expr", check_any] ]; } /* An editable filename. */ Pathname caption value = class _Object { _check_args = [ [caption, "caption", check_string], [value, "value", check_string] ]; } /* An editable fontname. */ Fontname caption value = class _Object { _check_args = [ [caption, "caption", check_string], [value, "value", check_string] ]; } /* Vector type ... just a finite list of real ... handy for wrapping an * argument to eg. im_lintra_vec. Make it behave like a single pixel image. */ Vector value = class _Object { _check_args = [ [value, "value", check_real_list] ]; bands = len value; // methods oo_binary_table op x = [ // Vector ++ Vector means bandwise join [this.Vector (op.fn this.value x.value), is_Vector x && (op.op_name == "join" || op.op_name == "join'")], [this.Vector (op.fn this.value [get_number x]), has_number x && (op.op_name == "join" || op.op_name == "join'")], // Vector ? number means extract element [op.fn this.value (get_real x), has_real x && (op.op_name == "subscript" || op.op_name == "subscript'")], // extra check for lengths equal [this.Vector (map_binary op.fn this.value x.value), is_Vector x && len value == len x.value && op.type == Operator_type.ARITHMETIC], [this.Vector (map_binary op.fn this.value (get_real x)), has_real x && op.type == Operator_type.ARITHMETIC], // need extra length check [this.Vector (map bool_to_real (map_binary op.fn this.value x.value)), is_Vector x && len value == len x.value && op.type == Operator_type.RELATIONAL], [this.Vector (map bool_to_real (map_binary op.fn this.value (get_real x))), has_real x && op.type == Operator_type.RELATIONAL], [this.Vector (op.fn this.value x.value), is_Vector x && len value == len x.value && op.type == Operator_type.COMPOUND_REWRAP], [x.Image (vec op'.op_name x.value value), is_Image x], [vec op'.op_name x value, is_image x], [op.fn this.value x, is_real x] ] ++ super.oo_binary_table op x { op' = oo_converse op; }; oo_unary_table op = [ [this.Vector (map_unary op.fn this.value), op.type == Operator_type.ARITHMETIC], [this.Vector (map bool_to_real (map_unary op.fn this.value)), op.type == Operator_type.RELATIONAL], [this.Vector (op.fn this.value), op.type == Operator_type.COMPOUND_REWRAP], [op.fn this.value, true] ] ++ super.oo_unary_table op; // turn an ip bool (or a number, for Vector) into VIPSs 255/0 bool_to_real x = 255, is_bool x && x = 255, is_number x && x != 0 = 0; } /* A rectangular array of real. */ Matrix_base value = class _Object { _check_args = [ [value, "value", check_matrix] ]; // calculate these from value width = len value?0; height = len value; // methods oo_binary_table op x = [ // mat multiply is special [this.Matrix_base mul.value, is_Matrix x && op.op_name == "multiply"], [this.Matrix_base mul'.value, is_Matrix x && op.op_name == "multiply'"], // mat divide is also special [this.Matrix_base div.value, is_Matrix x && op.op_name == "divide"], [this.Matrix_base div'.value, is_Matrix x && op.op_name == "divide'"], // power -1 means invert [this.Matrix_base inv.value, is_real x && x == -1 && op.op_name == "power"], [this.Matrix_base sq.value, is_real x && x == 2 && op.op_name == "power"], [error "matrix **-1 and **2 only", op.op_name == "power" || op.op_name == "power'"], // matrix op vector ... treat a vector as a 1 row matrix [this.Matrix_base (map (map_binary op'.fn x.value) this.value), is_Vector x && op.type == Operator_type.ARITHMETIC], [this.Matrix_base (map_binary op.fn this.value x.value), (is_Matrix x || is_Real x) && op.type == Operator_type.ARITHMETIC], [this.Matrix_base (map_binary op.fn this.value x), is_real x && op.type == Operator_type.ARITHMETIC], // compound ... don't do iteration [this.Matrix_base (op.fn this.value x.value), (is_Matrix x || is_Real x || is_Vector x) && op.type == Operator_type.COMPOUND_REWRAP] ] ++ super.oo_binary_table op x { mul = im_matmul this x; mul' = im_matmul x this; div = im_matmul this (im_matinv x); div' = im_matmul x (im_matinv this); inv = im_matinv this; sq = im_matmul this this; op' = oo_converse op; } oo_unary_table op = [ [this.Matrix_base (map_unary op.fn this.value), op.type == Operator_type.ARITHMETIC], [this.Matrix_base (op.fn this.value), op.type == Operator_type.COMPOUND_REWRAP], [op.fn this.value, true] ] ++ super.oo_unary_table op; } /* How to display a matrix: text, sliders, toggles, or text plus scale/offset. */ Matrix_display = class { text = 0; slider = 1; toggle = 2; text_scale_offset = 3; is_display = member [text, slider, toggle, text_scale_offset]; } /* A matrix as VIPS sees them ... add scale, offset and filename. For nip, add * a display type as well to control how the widget renders. */ Matrix_vips value scale offset filename display = class scope.Matrix_base value { _check_args = [ [scale, "scale", check_real], [offset, "offset", check_real], [filename, "filename", check_string], [display, "display", check_matrix_display] ]; Matrix_base x = this.Matrix_vips x scale offset filename display; } /* A plain 'ol matrix which can be passed to VIPS. */ Matrix value = class Matrix_vips value 1 0 "" Matrix_display.text {} /* Specialised constructors ... for convolutions, recombinations and * morphologies. */ Matrix_con scale offset value = class Matrix_vips value scale offset "" Matrix_display.text_scale_offset {}; Matrix_rec value = class Matrix_vips value 1 0 "" Matrix_display.slider {}; Matrix_mor value = class Matrix_vips value 1 0 "" Matrix_display.toggle {}; Matrix_file filename = (im_read_dmask @ expand @ search) filename; /* A CIE colour ... a triple, plus a format (eg XYZ, Lab etc) */ Colour colour_space value = class scope.Vector value { _check_args = [ [colour_space, "colour_space", check_colour_space] ]; _check_all = [ [len value == 3, "len value == 3"] ]; Vector x = this.Colour colour_space x; // make a colour-ish thing from an image // back to Colour if we have another 3 band image // to a vector if bands > 1 // to a number otherwise itoc im = this.Colour nip_type (to_matrix im).value?0, bands == 3 = scope.Vector (map mean (bandsplit im)), bands > 1 = mean im { type = im_header_int "Type" im; bands = im_header_int "Bands" im; nip_type = Image_type.colour_spaces.lookup 1 0 type; } // methods oo_binary_table op x = [ [itoc (op.fn ((float) (to_image this).value) ((float) (to_image x).value)), // here REWRAP means go via image op.type == Operator_type.COMPOUND_REWRAP] ] ++ super.oo_binary_table op x; oo_unary_table op = [ [itoc (op.fn ((float) (to_image this).value)), op.type == Operator_type.COMPOUND_REWRAP] ] ++ super.oo_unary_table op; } // a subclass with widgets for picking a space and value Colour_picker default_colour default_value = class Colour space.value_name colour.expr { _vislevel = 3; space = Option_enum Image_type.colour_spaces "Colour space" default_colour; colour = Expression "Colour value" default_value; Colour_edit colour_space value = Colour_picker colour_space value; } /* Base scale type. */ Scale caption from to value = class scope.Real value { _check_args = [ [caption, "caption", check_string], [from, "from", check_real], [to, "to", check_real] ]; _check_all = [ [from < to, "from < to"] ]; Real x = this.Scale caption from to x; // methods oo_binary_table op x = [ [this.Scale caption (op.fn this.from x.from) (op.fn this.to x.to) (op.fn this.value x.value), is_Scale x && op.type == Operator_type.ARITHMETIC], [this.Scale caption (op.fn this.from x) (op.fn this.to x) (op.fn this.value x), is_real x && op.type == Operator_type.ARITHMETIC] ] ++ super.oo_binary_table op x; } /* Compat. slider type. */ Slider = Scale ""; /* Base toggle type. */ Toggle caption value = class scope.Bool value { _check_args = [ [caption, "caption", check_string], [value, "value", check_bool] ]; Bool x = this.Toggle caption x; } /* Base option type. */ Option caption labels value = class scope.Real value { _check_args = [ [caption, "caption", check_string], [labels, "labels", check_string_list], [value, "value", check_uint] ]; } Option_enum enum caption value_name = class Option caption enum.names (index (equal value_name) enum.names) { // corresponding thing value_thing = enum.get_thing value_name; Option_edit caption labels value = this.Option_enum enum caption (enum.names ? value); } /* A rectangle. width and height can be -ve. */ Rect left top width height = class _Object { _check_args = [ [left, "left", check_real], [top, "top", check_real], [width, "width", check_real], [height, "height", check_real] ]; // derived right = left + width; bottom = top + height; oo_binary_table op x = [ [equal x, is_Rect x && (op.op_name == "equal" || op.op_name == "equal'")], [!equal x, is_Rect x && (op.op_name == "not_equal" || op.op_name == "not_equal'")], // binops with a complex are the same as (comp op comp) [oo_binary_function op this (Rect (re x) (im x) 0 0), is_complex x], // all others are just pairwise [this.Rect left' top' width' height', is_Rect x && op.type == Operator_type.ARITHMETIC], [this.Rect left'' top'' width'' height'', has_number x && op.type == Operator_type.ARITHMETIC] ] ++ super.oo_binary_table op x { left' = op.fn left x.left; top' = op.fn top x.top; width' = op.fn width x.width; height' = op.fn height x.height; left'' = op.fn left x'; top'' = op.fn top x'; width'' = op.fn width x'; height'' = op.fn height x'; x' = get_number x; } oo_unary_table op = [ // arithmetic uops just map [this.Rect left' top' width' height', op.type == Operator_type.ARITHMETIC], // compound uops are just like ops on complex // do (width, height) so thing like abs(Arrow) work as you'd expect [op.fn (width, height), op.type == Operator_type.COMPOUND] ] ++ super.oo_unary_table op { left' = op.fn left; top' = op.fn top; width' = op.fn width; height' = op.fn height; } // empty? ie. contains no pixels is_empty = width == 0 || height == 0; // normalised version, ie. make width/height +ve and flip the origin nleft = left + width, width < 0 = left; ntop = top + height, height < 0 = top; nwidth = abs width; nheight = abs height; nright = nleft + nwidth; nbottom = ntop + nheight; equal x = left == x.left && top == x.top && width == x.width && height == x.height; // contains a point? includes_point x y = nleft <= x && x <= nright && ntop <= y && y <= nbottom; // contains a rect? just test top left and bottom right points includes_rect r = includes_point r.nleft r.ntop && includes_point r.nright r.nbottom; // bounding box of two rects // if either is empty, can just return the other union r = r, is_empty = this, r.is_empty = Rect left' top' width' height' { left' = min_pair nleft r.nleft; top' = min_pair ntop r.ntop; width' = max_pair nright r.nright - left'; height' = max_pair nbottom r.nbottom - top'; } // intersection of two rects ... empty rect if no intersection intersect r = Rect left' top' width'' height'' { left' = max_pair nleft r.nleft; top' = max_pair ntop r.ntop; width' = min_pair nright r.nright - left'; height' = min_pair nbottom r.nbottom - top'; width'' = width', width > 0 = 0; height'' = height', height > 0 = 0; } // expand/collapse by n pixels margin_adjust n = Rect (left - n) (top - n) (width + 2 * n) (height + 2 * n); } /* Values for Compression field in image. */ Image_compression = class { NO_COMPRESSION = 0; TCSF_COMPRESSION = 1; JPEG_COMPRESSION = 2; LABPACK_COMPRESSED = 3; RGB_COMPRESSED = 4; LUM_COMPRESSED = 5; } /* Values for Coding field in image. */ Image_coding = class { NOCODING = 0; COLQUANT = 1; LABPACK = 2; } /* Values for BandFmt field in image. */ Image_format = class { DPCOMPLEX = 9; DOUBLE = 8; COMPLEX = 7; FLOAT = 6; INT = 5; UINT = 4; SHORT = 3; USHORT = 2; CHAR = 1; UCHAR = 0; NOTSET = -1; maxval fmt = [ 255, // UCHAR 127, // CHAR 65535, // USHORT 32767, // SHORT 4294967295, // UINT 2147483647, // INT 255, // FLOAT 255, // COMPLEX 255, // DOUBLE 255 // DPCOMPLEX ] ? fmt, fmt >= 0 && fmt <= DPCOMPLEX = error (_ "bad value for BandFmt"); } /* A lookup table. */ Table value = class _Object { _check_args = [ [value, "value", check_rectangular] ]; /* present col x: is there an x in column col */ present col x = member (map (extract col) value) x; /* Look on column from, return matching item in column to. */ lookup from to x = value?n?to, n >= 0 = error (_ "item" ++ " " ++ print x ++ " " ++ _ "not in table") { n = index (equal x) (map (extract from) value); } } /* A two column lookup table with the first column a string and the second a * thing. Used for representing various enums. Option_enum makes a selector * from one of these. */ Enum value = class Table value { _check_args = [ [value, "value", check_enum] ] { check_enum = [is_enum, _ "is [[char, *]]"]; is_enum x = is_rectangular x && is_listof is_string (map (extract 0) x); } // handy ... all the names and things as lists names = map (extract 0) value; things = map (extract 1) value; // is a legal name or thing has_name x = this.present 1 x; has_thing x = this.present 0 x; // map things to strings and back get_name x = this.lookup 1 0 x; get_thing x = this.lookup 0 1 x; } /* Type field. */ Image_type = class { FOURIER = 24; YXY = 23; sRGB = 22; LABS = 21; LCH = 19; UCS = 18; RGB = 17; LABQ = 16; CMYK = 15; CMC = 14; LAB = 13; XYZ = 12; LUT = 11; HISTOGRAM = 10; POWER_SPECTRUM = 9; BLUE_ONLY = 8; GREEN_ONLY = 7; RED_ONLY = 6; YUV = 5; IR = 4; XRAY = 3; LUMINACE = 2; B_W = 1; MULTIBAND = 0; /* Table to get names <-> numbers. */ type_names = Enum [ ["FOURIER", FOURIER], ["YXY", YXY], ["sRGB", sRGB], ["LABS", LABS], ["LCH", LCH], ["UCS", UCS], ["RGB", RGB], ["LABQ", LABQ], ["CMYK", CMYK], ["CMC", CMC], ["LAB", LAB], ["XYZ", XYZ], ["LUT", LUT], ["HISTOGRAM", HISTOGRAM], ["POWER_SPECTRUM", POWER_SPECTRUM], ["BLUE_ONLY", BLUE_ONLY], ["GREEN_ONLY", GREEN_ONLY], ["RED_ONLY", RED_ONLY], ["YUV", YUV], ["IR", IR], ["XRAY", XRAY], ["LUMINACE", LUMINACE], ["B_W", B_W], ["MULTIBAND", MULTIBAND] ]; /* Table relating nip's colour space names and VIPS's Type numbers. * Options generated from this, so match the order to the order in the * Colour menu. */ colour_spaces = Enum [ ["sRGB", sRGB], ["Lab", LAB], ["LCh", LCH], ["XYZ", XYZ], ["Yxy", YXY], ["UCS", UCS] ]; /* A slightly larger table ... the types of colorimetric image we can * have. Add mono, and the S and Q forms of LAB. */ image_colour_spaces = Enum [ ["Mono", B_W], ["sRGB", sRGB], ["Lab", LAB], ["LabQ", LABQ], ["LabS", LABS], ["LCh", LCH], ["XYZ", XYZ], ["Yxy", YXY], ["UCS", UCS] ]; } /* Base image type. Simple layer over vips_image. */ Image value = class _Object { _check_args = [ [value, "value", check_image] ]; // fields from VIPS header width = get_width value; height = get_height value; bands = get_bands value; format = get_format value; bits = get_bits value; coding = get_coding value; type = get_type value; xres = im_header_double "Xres" value; yres = im_header_double "Yres" value; xoffset = im_header_int "Xoffset" value; yoffset = im_header_int "Yoffset" value; filename = im_header_string "filename" value; // convenience ... the area our pixels occupy, as a rect rect = Rect 0 0 width height; // operator overloading // (op Image Vector) done in Vector class oo_binary_table op x = [ // handle image ++ constant here [wrap join_result_image, (has_real x || is_Vector x) && (op.op_name == "join" || op.op_name == "join'")], // image ++ image is slightly different ... we want to // sizealike, but we must not bandalike [wrap (op.fn (get_image resized?0) (get_image resized?1)), has_image x && (op.op_name == "join" || op.op_name == "join'")], [wrap ite_result_image, op.op_name == "if_then_else"], // arithmetic and reational binops between image resize // and band_alike images to match [wrap (op.fn (get_image rebanded?0) (get_image rebanded?1)), has_image x && (op.type == Operator_type.ARITHMETIC || op.type == Operator_type.RELATIONAL)], // other op types don't resize [wrap (op.fn this.value (get_image x)), has_image x], [wrap (op.fn this.value (get_number x)), has_number x], [wrap (op.fn this.value x), true] ] ++ super.oo_binary_table op x { // wrap the result with this ... only skip rewrap for COMPOUND wrap = id, op.type == Operator_type.COMPOUND = this.Image; join_result_image = value ++ new_stuff, op.op_name == "join" = new_stuff ++ value { new_stuff = image_new width height new_bands format coding Image_type.B_W x xoffset yoffset; new_bands = get_bands x, has_bands x = 1; } then_part = x?0; else_part = x?1; // get things about our output from inputs in this order objects = [then_part, else_part, this]; // properties of our output image target_bands = get_member_list has_bands get_bands objects; target_format = get_member_list has_format get_format objects; target_type = get_member_list has_type get_type objects; to_image x = x, is_image x = x.value, is_Image x = black + x { black = im_black width height target_bands; } then_image = to_image then_part; else_image = to_image else_part; then_image' = clip2fmt target_format then_image; else_image' = clip2fmt target_format else_image; ite_resized = size_alike [value, then_image', else_image']; ite_result_image = image_set_type target_type (if ite_resized?0 then ite_resized?1 else ite_resized?2); resized = size_alike [this, x]; rebanded = bands_alike resized; } // FIXME ... yuk ... don't use operator hints, just always rewrap if // we have an image result // forced on us by things like abs: // abs Vector -> real // abs Image -> Image // does not fit well with COMPOUND/whatever scheme oo_unary_table op = [ [this.Image result, is_image result], [result, true] ] ++ super.oo_unary_table op { result = op.fn this.value; } } /* Construct an image from a file. */ Image_file filename = class Image value { _check_args = [ [filename, "filename", check_string] ]; value = vips_image filename; } Region image left top width height = class Image value { _check_args = [ [image, "Image", check_Image], [left, "left", check_real], [top, "top", check_real], [width, "width", check_preal], [height, "height", check_preal] ]; // a rect for our coordinates // region.rect gets the rect for the extracted image region_rect = Rect left top width height; // we need to always succeed ... value is our enclosing image if we're // out of bounds value = extract_area left top width height image.value, image.rect.includes_rect region_rect = image.value; } Area image left top width height = class scope.Region image left top width height { Region image left top width height = this.Area image left top width height; } Arrow image left top width height = class scope.Rect left top width height { _check_args = [ [image, "Image", check_Image], [left, "left", check_real], [top, "top", check_real], [width, "width", check_real], [height, "height", check_real] ]; Rect l t w h = this.Arrow image l t w h; } HGuide image top = class scope.Arrow image image.rect.left top image.width 0 { Arrow image left top width height = this.HGuide image top; } VGuide image left = class scope.Arrow image left image.rect.top 0 image.height { Arrow image left top width height = this.VGuide image left; } Mark image left top = class scope.Arrow image left top 0 0 { Arrow image left top width height = this.Mark image left top; } // convenience functions: ... specify position as [0 .. 1) Region_relative image u v w h = Region image (image.width * u) (image.height * v) (image.width * w) (image.height * h); Area_relative image u v w h = Area image (image.width * u) (image.height * v) (image.width * w) (image.height * h); Arrow_relative image u v w h = Arrow image (image.width * u) (image.height * v) (image.width * w) (image.height * h); VGuide_relative image v = VGuide image (image.height * v); HGuide_relative image u = HGuide image (image.width * u); Mark_relative image u v = Mark image (image.width * u) (image.height * v); Interpolate = class { NEAREST_NEIGHBOUR = 0; BILINEAR = 1; BICUBIC = 2; /* Table to map interpol numbers to descriptive strings */ names = Enum [ [_ "Nearest neighbour", NEAREST_NEIGHBOUR], [_ "Bilinear", BILINEAR], [_ "Bicubic", BICUBIC] ]; } Render_intent = class { PERCEPTUAL = 0; RELATIVE = 1; SATURATION = 2; ABSOLUTE = 3; /* Table to get names <-> numbers. */ names = Enum [ [_ "Perceptual", PERCEPTUAL], [_ "Relative", RELATIVE], [_ "Saturation", SATURATION], [_ "Absolute", ABSOLUTE] ]; } // abstract base class for toolkit menus Menu = class {} // a "----" line in a menu Menuseparator = class Menu {} // abstract base class for items in menus Menuitem label tooltip = class Menu {} Menupullright label tooltip = class Menuitem label tooltip {} Menuaction label tooltip = class Menuitem label tooltip {} nip2-8.7.0/share/nip2/compat/7.10/Makefile.am0000644000175000017500000000052313224651032015173 00000000000000startdir = $(pkgdatadir)/compat/7.10 start_DATA = \ Colour.def \ _convert.def \ Filter.def \ Format.def \ _generate.def \ Histogram.def \ Image.def \ _joe_extra.def \ _joe_utilities.def \ _list.def \ Math.def \ Matrix.def \ _predicate.def \ _stdenv.def \ Tasks.def \ _types.def \ Widgets.def EXTRA_DIST = $(start_DATA) nip2-8.7.0/share/nip2/compat/7.14/0000755000175000017500000000000013350464160013227 500000000000000nip2-8.7.0/share/nip2/compat/7.14/_stdenv.def0000644000175000017500000014344513224651032015300 00000000000000/* Various operators as functions. */ logical_and a b = a && b; logical_or a b = a || b; bitwise_and a b = a & b; bitwise_or a b = a | b; eor a b = a ^ b; left_shift a b = a << b; right_shift a b = a >> b; not a = !a; less a b = a < b; more a b = a > b; less_equal a b = a <= b; more_equal a b = a >= b; equal a b = a == b; not_equal a b = a != b; pointer_equal a b = a === b; not_pointer_equal a b = a !== b; add a b = a + b; subtract a b = a - b; multiply a b = a * b; divide a b = a / b; idivide a b = (int) ((int) a / (int) b); power a b = a ** b; square x = x * x; remainder a b = a % b; cons a b = a : b; dot a b = a . ( b ); join a b = a ++ b; subscript a b = a ? b; generate s n f = [s, n .. f]; comma r i = (r, i); compose f g = f @ g; // our only trinary operator is actually a binary operator if_then_else a x = if a then x?0 else x?1; cast_unsigned_char x = (unsigned char) x; cast_signed_char x = (signed char) x; cast_unsigned_short x = (unsigned short) x; cast_signed_short x = (signed short) x; cast_unsigned_int x = (unsigned int) x; cast_signed_int x = (signed int) x; cast_float x = (float) x; cast_double x = (double) x; cast_complex x = (complex) x; cast_double_complex x = (double complex) x; unary_minus x = -x; negate x = !x; complement x = ~x; unary_plus x = +x; // the function we call for "a -> v" expressions mksvpair s v = [s, v], is_string s = error "not str on lhs of ->"; // the vector ops ... im is an image, vec is a real_list vec op_name im vec = im_lintra_vec ones im vec, op_name == "add" || op_name == "add'" = im_lintra_vec ones (-1 * im) vec, op_name == "subtract'" = im_lintra_vec ones im inv, op_name == "subtract" = im_lintra_vec vec im zeros, op_name == "multiply" || op_name == "multiply'" = im_lintra_vec vec (1 / im) zeros, op_name == "divide'" = im_lintra_vec recip im zeros, op_name == "divide" = im_expntra_vec im vec, op_name == "power'" = im_powtra_vec im vec, op_name == "power" = im_remainderconst_vec im vec, op_name == "remainder" = im_andimage_vec im vec, op_name == "bitwise_and" || op_name == "bitwise_and'" = im_orimage_vec im vec, op_name == "bitwise_or" || op_name == "bitwise_or'" = im_eorimage_vec im vec, op_name == "eor" || op_name == "eor'" = im_equal_vec im vec, op_name == "equal" || op_name == "equal'" = im_notequal_vec im vec, op_name == "not_equal" || op_name == "not_equal'" = im_less_vec im vec, op_name == "less" = im_moreeq_vec im vec, op_name == "less'" = im_lesseq_vec im vec, op_name == "less_equal" = im_more_vec im vec, op_name == "less_equal'" = error "unimplemented vector operation" { zeros = replicate (len vec) 0; ones = replicate (len vec) 1; recip = map (divide 1) vec; inv = map (multiply (-1)) vec; } // make a name value pair mknvpair n v = [n, v], is_string n = error "not [char] on LHS of =>"; /* Macbeth chart patch names. */ macbeth_names = [ "Dark skin", "Light skin", "Blue sky", "Foliage", "Blue flower", "Bluish green", "Orange", "Purplish blue", "Moderate red", "Purple", "Yellow green", "Orange yellow", "Blue", "Green", "Red", "Yellow", "Magenta", "Cyan", "White (density 0.05)", "Neutral 8 (density 0.23)", "Neutral 6.5 (density 0.44)", "Neutral 5 (density 0.70)", "Neutral 3.5 (density 1.05)", "Black (density 1.50)" ]; bandsplit x = oo_unary_function bandsplit_op x, is_class x = map (subscript x) [0 .. bands - 1], is_image x = error (_ "bad arguments to " ++ "bandsplit") { bands = get_header "Bands" x; bandsplit_op = Operator "bandsplit" (map Image @ bandsplit) Operator_type.COMPOUND false; } bandjoin l = wrapper joined, has_wrapper = joined, is_listof has_image l = error (_ "bad arguments to " ++ "bandjoin") { has_wrapper = has_member_list (has_member "Image") l; wrapper = get_member_list (has_member "Image") (get_member "Image") l; joined = im_gbandjoin (map get_image l); } mean x = oo_unary_function mean_op x, is_class x = im_avg x, is_image x = mean_list x, is_list x = error (_ "bad arguments (" ++ print x ++ ") to " ++ "mean") { mean_op = Operator "mean" mean Operator_type.COMPOUND false; mean_list l = sum l / size l; // number of elements in some sort of nested-list thing size l = foldr acc 0 l { acc x total = total + size x, is_list x = total + 1; } // add elements in a nested-list thing sum l = foldr acc 0 l { acc x total = total + sum x, is_list x = total + x; } } meang x = (appl (power e) @ mean @ appl log) x { appl fn x = map fn x, is_list x = fn x; } // zero-excluding mean meanze x = oo_unary_function meanze_op x, is_class x = meanze_image x, is_image x = meanze_list x, is_list x = error (_ "bad arguments (" ++ print x ++ ") to " ++ "meanze") { meanze_op = Operator "meanze" meanze Operator_type.COMPOUND false; meanze_list l = sum l / size l; // number of non-zero elements in some sort of nested-list thing size l = foldr acc 0 l { acc x total = total + size x, is_list x = total + 1, x != 0; = total; } // add elements in a nested-list thing sum l = foldr acc 0 l { acc x total = total + sum x, is_list x = total + x; } // image mean meanze_image i = sum / N { w = get_width i; h = get_height i; b = get_bands i; st = stats i; sum = st.value?0?2; // find non-zero pixels (not zero in all bands) zp = im_notequal_vec i (replicate b 0); // number of non-zero pixels N = b * (mean zp * w * h) / 255; } } deviation x = oo_unary_function deviation_op x, is_class x = im_deviate x, is_image x = deviation_list x, is_real_list x || is_matrix x = error (_ "bad arguments to " ++ "deviation") { deviation_op = Operator "deviation" deviation Operator_type.COMPOUND false; deviation_list l = (abs (s2 - (s * s / n)) / (n - 1)) ** 0.5 { [n, s, s2] = sum_sum2_list l; } // return n, sum, sum of squares for a list of reals sum_sum2_list x = foldr accumulate [0, 0, 0] x { accumulate x sofar = [n + 1, x + s, x * x + s2], is_real x = [n + n', s + s', s2 + s2'], is_list x = error "sum_sum2_list: not real or [real]" { [n, s, s2] = sofar; [n', s', s2'] = sum_sum2_list x; } } } deviationze x = oo_unary_function deviationze_op x, is_class x = deviationze_image x, is_image x = deviationze_list x, is_real_list x || is_matrix x = error (_ "bad arguments to " ++ "deviationze") { deviationze_op = Operator "deviationze" deviationze Operator_type.COMPOUND false; deviationze_list l = (abs (s2 - (s * s / n)) / (n - 1)) ** 0.5 { [n, s, s2] = sum_sum2_list l; } // return number of non-zero elements, sum, sum of squares for a list of // reals sum_sum2_list x = foldr accumulate [0, 0, 0] x { accumulate x sofar = sofar, is_real x && x == 0 = [n + 1, x + s, x * x + s2], is_real x = [n + n', s + s', s2 + s2'], is_list x = error "sum_sum2_list: not real or [real]" { [n, s, s2] = sofar; [n', s', s2'] = sum_sum2_list x; } } deviationze_image i = ((sum2 - sum * sum / N) / (N - 1)) ** 0.5 { w = get_width i; h = get_height i; b = get_bands i; st = stats i; sum = st.value?0?2; sum2 = st.value?0?3; // find non-zero pixels (not zero in all bands) zp = im_notequal_vec i (replicate b 0); // number of non-zero pixels N = b * (mean zp * w * h) / 255; } } // find the centre of gravity of a histogram gravity x = oo_unary_function gravity_op x, is_class x = im_hist_gravity x, is_hist x = gravity_list x, is_list x = error (_ "bad arguments to " ++ "gravity") { gravity_op = Operator "gravity" gravity Operator_type.COMPOUND false; // centre of gravity of a histogram... use the histogram to weight an // identity, then sum, then find the mean element im_hist_gravity h = m { // make horizontal h' = rot270 h, get_width h == 1 = h, get_height h == 1 = error "width or height not 1"; // number of elements w = get_width h'; // matching identity i = im_identity_ushort 1 w, w <= 2 ** 16 - 1 = make_xy w 1 ? 0; // weight identity and sum s = mean (i * h') * w; // sum of original histogram s' = mean h * w; // weighted mean m = s / s'; } gravity_list l = m { w = len l; // matching identity i = [0, 1 .. w - 1]; // weight identity and sum s = sum (map2 multiply i l); // sum of original histogram s' = sum l; // weighted mean m = s / s'; } } project x = oo_unary_function project_op x, is_class x = im_project x, is_image x = error (_ "bad arguments to " ++ "project") { project_op = Operator "project" project Operator_type.COMPOUND false; } abs x = oo_unary_function abs_op x, is_class x = im_abs x, is_image x = abs_cmplx x, is_complex x = abs_num x, is_real x = abs_list x, is_real_list x = abs_list (map abs_list x), is_matrix x = error (_ "bad arguments to " ++ "abs") { abs_op = Operator "abs" abs Operator_type.COMPOUND false; abs_list l = (sum (map square l)) ** 0.5; abs_num n = n, n >= 0 = -n; abs_cmplx c = ((re c)**2 + (im c)**2) ** 0.5; } copy x = oo_unary_function copy_op x, is_class x = im_copy x, is_image x = x { copy_op = Operator "copy" copy Operator_type.COMPOUND_REWRAP false; } // like abs, but treat pixels as vectors ... ie. always get a 1-band image // back ... also treat matricies as lists of vectors // handy for dE from object difference abs_vec x = oo_unary_function abs_vec_op x, is_class x = abs_vec_image x, is_image x = abs_vec_cmplx x, is_complex x = abs_vec_num x, is_real x = abs_vec_list x, is_real_list x = mean (map abs_vec_list x), is_matrix x = error (_ "bad arguments to " ++ "abs_vec") { abs_vec_op = Operator "abs_vec" abs_vec Operator_type.COMPOUND false; abs_vec_list l = (sum (map square l)) ** 0.5; abs_vec_num n = n, n >= 0 = -n; abs_vec_cmplx c = ((re c)**2 + (im c)**2) ** 0.5; abs_vec_image im = (sum (map square (bandsplit im))) ** 0.5; } transpose x = oo_unary_function transpose_op x, is_class x = transpose_image x, is_image x = transpose_list x, is_listof is_list x = error (_ "bad arguments to " ++ "transpose") { transpose_op = Operator "transpose" transpose Operator_type.COMPOUND_REWRAP false; transpose_list l = [], l' == [] = (map hd l') : (transpose_list (map tl l')) { l' = takewhile (not_equal []) l; } transpose_image = im_flipver @ im_rot270; } rot45 x = oo_unary_function rot45_op x, is_class x = error "rot45 image: not implemented", is_image x = error (_ "bad arguments to " ++ "rot45") { rot45_op = Operator "rot45" rot45_object Operator_type.COMPOUND_REWRAP false; rot45_object x = rot45_matrix x, is_odd_square_matrix x = error "rot45 image: not implemented", is_image x = error (_ "bad arguments to " ++ "rot45"); // slow, but what the heck rot45_matrix l = (im_rotate_dmask45 (Matrix l)).value; } // apply an image function to a [[real]] ... matrix is converted to a 1 band // image for processing apply_matrix_as_image fn m = (get_value @ im_vips2mask @ fn @ im_mask2vips @ Matrix) m; // a general image/matrix operation where the mat version is most easily done // by converting mat->image->mat apply_matim_operation name fn x = oo_unary_function class_op x, is_class x = fn x, is_image x = apply_matrix_as_image fn x, is_matrix x = error (_ "bad arguments to " ++ name) { class_op = Operator name (apply_matim_operation name fn) Operator_type.COMPOUND_REWRAP false; } rot90 = apply_matim_operation "rot90" im_rot90; rot180 = apply_matim_operation "rot180" im_rot180; rot270 = apply_matim_operation "rot270" im_rot270; rotquad = apply_matim_operation "rotquad" im_rotquad; fliplr = apply_matim_operation "fliplr" im_fliphor; fliptb = apply_matim_operation "flipud" im_flipver; image_set_type type x = oo_unary_function image_set_type_op x, is_class x = im_copy_set x (to_real type) (get_header "Xres" x) (get_header "Yres" x) (get_header "Xoffset" x) (get_header "Yoffset" x), is_image x = error (_ "bad arguments to " ++ "image_set_type:" ++ print type ++ " " ++ print x) { image_set_type_op = Operator "image_set_type" (image_set_type type) Operator_type.COMPOUND_REWRAP false; } image_set_origin xoff yoff x = oo_unary_function image_set_origin_op x, is_class x = im_copy_set x (get_header "Type" x) (get_header "Xres" x) (get_header "Yres" x) (to_real xoff) (to_real yoff), is_image x = error (_ "bad arguments to " ++ "image_set_origin") { image_set_origin_op = Operator "image_set_origin" (image_set_origin xoff yoff) Operator_type.COMPOUND_REWRAP false; } cache tile_width tile_height max_tiles x = oo_unary_function cache_op x, is_class x = im_cache x (to_real tile_width) (to_real tile_height) (to_real max_tiles), is_image x = error (_ "bad arguments to " ++ "cache") { cache_op = Operator "cache" (cache tile_width tile_height max_tiles) Operator_type.COMPOUND_REWRAP false; } tile across down x = oo_unary_function tile_op x, is_class x = im_replicate x (to_real across) (to_real down), is_image x = error (_ "bad arguments to " ++ "tile") { tile_op = Operator "tile" (tile across down) Operator_type.COMPOUND_REWRAP false; } grid tile_height across down x = oo_unary_function grid_op x, is_class x = im_grid x (to_real tile_height) (to_real across) (to_real down), is_image x = error (_ "bad arguments to " ++ "grid") { grid_op = Operator "grid" (grid tile_height across down) Operator_type.COMPOUND_REWRAP false; } max_pair a b = a, a > b = b; min_pair a b = a, a < b = b; range min value max = min_pair max (max_pair min value); max x = oo_unary_function max_op x, is_class x = im_max x, is_image x = max_list x, is_list x = x, is_number x = error (_ "bad arguments to " ++ "max") { max_op = Operator "max" max Operator_type.COMPOUND false; max_list x = error "max []", x == [] = foldr1 max_pair x, is_real_list x = foldr1 max_pair (map max_list x), is_list x = max x; } min x = oo_unary_function min_op x, is_class x = im_min x, is_image x = min_list x, is_list x = x, is_number x = error (_ "bad arguments to " ++ "min") { min_op = Operator "min" min Operator_type.COMPOUND false; min_list x = error "min []", x == [] = foldr1 min_pair x, is_real_list x = foldr1 min_pair (map min_list x), is_list x = min x; } maxpos x = oo_unary_function maxpos_op x, is_class x = im_maxpos x, is_image x = maxpos_matrix x, is_matrix x = maxpos_list x, is_list x = error (_ "bad arguments to " ++ "maxpos") { maxpos_op = Operator "maxpos" maxpos Operator_type.COMPOUND false; maxpos_matrix m = (-1, -1), m == [[]] = (indexes?row, row) { max_value = max (Matrix m); indexes = map (index (equal max_value)) m; row = index (not_equal (-1)) indexes; } maxpos_list l = -1, l == [] = index (equal (max l)) l; } minpos x = oo_unary_function minpos_op x, is_class x = im_minpos x, is_image x = minpos_matrix x, is_matrix x = minpos_list x, is_list x = error (_ "bad arguments to " ++ "minpos") { minpos_op = Operator "minpos" minpos Operator_type.COMPOUND false; minpos_matrix m = (-1, -1), m == [[]] = (indexes?row, row) { min_value = min (Matrix m); indexes = map (index (equal min_value)) m; row = index (not_equal (-1)) indexes; } minpos_list l = -1, l == [] = index (equal (min l)) l; } stats x = oo_unary_function stats_op x, is_class x = im_stats x, is_image x = im_stats (to_image x).value, is_matrix x = error (_ "bad arguments to " ++ "stats") { stats_op = Operator "stats" stats Operator_type.COMPOUND false; } e = 2.7182818284590452354; pi = 3.14159265358979323846; rad d = 2 * pi * (d / 360); deg r = 360 * r / (2 * pi); sign x = oo_unary_function sign_op x, is_class x = im_sign x, is_image x = sign_cmplx x, is_complex x = sign_num x, is_real x = error (_ "bad arguments to " ++ "sign") { sign_op = Operator "sign" sign Operator_type.COMPOUND_REWRAP false; sign_num n = 0, n == 0 = 1, n > 0 = -1; sign_cmplx c = (0, 0), mod == 0 = (re c / mod, im c / mod) { mod = abs c; } } rint x = oo_unary_function rint_op x, is_class x = im_rint x, is_image x = rint_value x, is_number x = error (_ "bad arguments to " ++ "rint") { rint_op = Operator "rint" rint Operator_type.ARITHMETIC false; rint_value x = (int) (x + 0.5), x > 0 = (int) (x - 0.5); } scale x = oo_unary_function scale_op x, is_class x = (unsigned char) x, is_number x = im_scale x, is_image x = scale_list x, is_real_list x || is_matrix x = error (_ "bad arguments to " ++ "scale") { scale_op = Operator "scale" scale Operator_type.COMPOUND_REWRAP false; scale_list l = apply_scale s o l { mn = find_limit min_pair l; mx = find_limit max_pair l; s = 255.0 / (mx - mn); o = -(mn * s); } find_limit fn l = find_limit fn (map (find_limit fn) l), is_listof is_list l = foldr1 fn l; apply_scale s o x = x * s + o, is_number x = map (apply_scale s o) x; } scaleps x = oo_unary_function scale_op x, is_class x = im_scaleps x, is_image x = error (_ "bad arguments to " ++ "scale") { scale_op = Operator "scaleps" scaleps Operator_type.COMPOUND_REWRAP false; } fwfft x = oo_unary_function fwfft_op x, is_class x = im_fwfft x, is_image x = error (_ "bad arguments to " ++ "fwfft") { fwfft_op = Operator "fwfft" fwfft Operator_type.COMPOUND_REWRAP false; } invfft x = oo_unary_function invfft_op x, is_class x = im_invfftr x, is_image x = error (_ "bad arguments to " ++ "invfft") { invfft_op = Operator "invfft" invfft Operator_type.COMPOUND_REWRAP false; } falsecolour x = oo_unary_function falsecolour_op x, is_class x = image_set_type Image_type.sRGB (im_falsecolour x), is_image x = error (_ "bad arguments to " ++ "falsecolour") { falsecolour_op = Operator "falsecolour" falsecolour Operator_type.COMPOUND_REWRAP false; } polar x = oo_unary_function polar_op x, is_class x = im_c2amph x, is_image x = polar_cmplx x, is_complex x = error (_ "bad arguments to " ++ "polar") { polar_op = Operator "polar" polar Operator_type.COMPOUND false; polar_cmplx r = (l, a) { a = 270, x == 0 && y < 0 = 90, x == 0 && y >= 0 = 360 + atan (y / x), x > 0 && y < 0 = atan (y / x), x > 0 && y >= 0 = 180 + atan (y / x); l = (x ** 2 + y ** 2) ** 0.5; x = re r; y = im r; } } rectangular x = oo_unary_function rectangular_op x, is_class x = im_c2rect x, is_image x = rectangular_cmplx x, is_complex x = error (_ "bad arguments to " ++ "rectangular") { rectangular_op = Operator "rectangular" rectangular Operator_type.COMPOUND false; rectangular_cmplx p = (x, y) { l = re p; a = im p; x = l * cos a; y = l * sin a; } } // we can't use colour_unary: that likes 3 band only recomb matrix x = oo_unary_function recomb_op x, is_class x = im_recomb x matrix, is_image x = recomb_real_list x, is_real_list x = map recomb_real_list x, is_matrix x = error (_ "bad arguments to " ++ "recomb") { // COMPOUND_REWRAP ... signal to the colour class to go to image and // back recomb_op = Operator "recomb" (recomb matrix) Operator_type.COMPOUND_REWRAP false; // process [1,2,3 ..] as an image recomb_real_list l = (to_matrix im').value?0 { im = (float) (to_image (Vector l)).value; im' = recomb matrix im; } } extract_area x y w h obj = oo_unary_function extract_area_op obj, is_class obj = im_extract_area obj x' y' w' h', is_image obj = map (extract_range x' w') (extract_range y' h' obj), is_matrix obj = error (_ "bad arguments to " ++ "extract_area") { x' = to_real x; y' = to_real y; w' = to_real w; h' = to_real h; extract_area_op = Operator "extract_area" (extract_area x y w h) Operator_type.COMPOUND_REWRAP false; extract_range from length list = (take length @ drop from) list; } extract_band b obj = subscript obj b; extract_row y obj = oo_unary_function extract_row_op obj, is_class obj = extract_area 0 y' (get_width obj) 1 obj, is_image obj = [obj?y'], is_matrix obj = error (_ "bad arguments to " ++ "extract_row") { y' = to_real y; extract_row_op = Operator "extract_row" (extract_row y) Operator_type.COMPOUND_REWRAP false; } extract_column x obj = oo_unary_function extract_column_op obj, is_class obj = extract_area x' 0 1 height obj, is_image obj = map (\row [row?x']) obj, is_matrix obj = error (_ "bad arguments to " ++ "extract_column") { x' = to_real x; height = get_header "Ysize" obj; extract_column_op = Operator "extract_column" (extract_column x) Operator_type.COMPOUND_REWRAP false; } blend cond in1 in2 = oo_binary_function blend_op cond [in1,in2], is_class cond = im_blend (get_image cond) (get_image in1) (get_image in2), has_image cond && has_image in1 && has_image in2 = error (_ "bad arguments to " ++ "blend") { blend_op = Operator "blend" blend_obj Operator_type.COMPOUND_REWRAP false; blend_obj cond x = blend_result_image { [then_part, else_part] = x; // get things about our output from inputs in this order objects = [then_part, else_part, cond]; // properties of our output image target_width = get_member_list has_width get_width objects; target_height = get_member_list has_height get_height objects; target_bands = get_member_list has_bands get_bands objects; target_format = get_member_list has_format get_format objects; target_type = get_member_list has_type get_type objects; to_image x = x, is_image x = x.value, is_Image x = black + x { black = im_black target_width target_height target_bands; } [then_image, else_image] = map (clip2fmt target_format @ to_image) [then_part, else_part]; [c, t, e] = size_alike [cond, then_image, else_image]; blend_result_image = image_set_type target_type (im_blend c t e); } } insert x y small big = oo_binary_function insert_op small big, is_class small = oo_binary'_function insert_op small big, is_class big = im_insert big' small' (to_real x) (to_real y), is_image small && is_image big = error (_ "bad arguments to " ++ "insert") { insert_op = Operator "insert" (insert x y) Operator_type.COMPOUND_REWRAP false; [small', big'] = bands_alike [small, big]; } insert_noexpand x y small big = oo_binary_function insert_noexpand_op small big, is_class small = oo_binary'_function insert_noexpand_op small big, is_class big = im_insert_noexpand big' small' (to_real x) (to_real y), is_image small && is_image big = error (_ "bad arguments to " ++ "insert_noexpand") { insert_noexpand_op = Operator "insert_noexpand" (insert_noexpand x y) Operator_type.COMPOUND_REWRAP false; [small', big'] = bands_alike [small, big]; } measure x y w h u v image = oo_unary_function measure_op image, is_class image = im_measure image (to_real x) (to_real y) (to_real w) (to_real h) (to_real u) (to_real v), is_image image = error (_ "bad arguments to " ++ "measure") { measure_op = Operator "measure" (measure x y w h u v) Operator_type.COMPOUND_REWRAP false; } extract_bands b n obj = oo_unary_function extract_bands_op obj, is_class obj = im_extract_bands obj (to_real b) (to_real n), is_image obj = error (_ "bad arguments to " ++ "extract_bands") { extract_bands_op = Operator "extract_bands" (extract_bands b n) Operator_type.COMPOUND_REWRAP false; } invert x = oo_unary_function invert_op x, is_class x = im_invert x, is_image x = 255 - x, is_real x = error (_ "bad arguments to " ++ "invert") { invert_op = Operator "invert" invert Operator_type.COMPOUND false; } transform ipol wrap params image = oo_unary_function transform_op image, is_class image = im_transform image (to_matrix params) (to_real ipol) (to_real wrap), is_image image = error (_ "bad arguments to " ++ "transform") { transform_op = Operator "transform" (transform ipol wrap params) Operator_type.COMPOUND_REWRAP false; } transform_search max_error max_iterations order ipol wrap sample reference = oo_binary_function transform_search_op sample reference, is_class sample = oo_binary'_function transform_search_op sample reference, is_class reference = im_transform_search sample reference (to_real max_error) (to_real max_iterations) (to_real order) (to_real ipol) (to_real wrap), is_image sample && is_image reference = error (_ "bad arguments to " ++ "transform_search") { transform_search_op = Operator "transform_search" (transform_search max_error max_iterations order ipol wrap) Operator_type.COMPOUND false; } rotate angle image = oo_binary_function rotate_op angle image, is_class angle = oo_binary'_function rotate_op angle image, is_class image = im_similarity image (cos angle) (sin angle) 0 0, is_real angle && is_image image = error (_ "bad arguments to " ++ "rotate") { rotate_op = Operator "rotate" rotate Operator_type.COMPOUND_REWRAP false; } matrix_binary fn a b = itom (fn (mtoi a) (mtoi b)) { mtoi x = im_mask2vips (Matrix x); itom x = (im_vips2mask x).value; } join_lr a b = oo_binary_function join_lr_op a b, is_class a = oo_binary'_function join_lr_op a b, is_class b = join a b { join_lr_op = Operator "join_lr" join Operator_type.COMPOUND_REWRAP false; join a b = join_im a b, is_image a && is_image b = matrix_binary join_im a b, is_matrix a && is_matrix b = error (_ "bad arguments to " ++ "join_lr"); join_im a b = insert (get_width b) 0 a b; } join_tb a b = oo_binary_function join_tb_op a b, is_class a = oo_binary'_function join_tb_op a b, is_class b = join a b { join_tb_op = Operator "join_tb" join Operator_type.COMPOUND_REWRAP false; join a b = join_im a b, is_image a && is_image b = matrix_binary join_im a b, is_matrix a && is_matrix b = error (_ "bad arguments to " ++ "join_tb"); join_im a b = insert 0 (get_height b) a b; } conj x = oo_unary_function conj_op x, is_class x = (re x, -im x), is_complex x || (is_image x && format == Image_format.COMPLEX) || (is_image x && format == Image_format.DPCOMPLEX) // assume it's some sort of real = x { format = get_header "BandFmt" x; conj_op = Operator "conj" conj Operator_type.COMPOUND false; } clip2fmt format image = oo_unary_function clip2fmt_op image, is_class image = im_clip2fmt image (to_real format), is_image image = error (_ "bad arguments to " ++ "clip2fmt") { clip2fmt_op = Operator "clip2fmt" (clip2fmt format) Operator_type.COMPOUND_REWRAP false; } embed type x y w h im = oo_unary_function embed_op im, is_class im = im_embed im (to_real type) (to_real x) (to_real y) (to_real w) (to_real h), is_image im = error (_ "bad arguments to " ++ "embed") { embed_op = Operator "embed" (embed type x y w h) Operator_type.COMPOUND_REWRAP false; } /* Morph a mask with a [[real]] matrix ... turn m2 into an image, morph it * with m1, turn it back to a matrix again. */ _morph_2_masks fn m1 m2 = m'' { image = (unsigned char) im_mask2vips (Matrix m2); m2_width = get_width image; m2_height = get_height image; // need to embed m2 in an image large enough for us to be able to // position m1 all around the edges, with a 1 pixel overlap image' = embed 0 (m1.width / 2) (m1.height / 2) (m2_width + (m1.width - 1)) (m2_height + (m1.height - 1)) image; // morph! image'' = fn m1 image'; // back to mask m' = im_vips2mask ((double) image''); // Turn 0 in output to 128 (don't care). m'' = map (map fn) m'.value { fn a = 128, a == 0; = a; } } dilate mask image = oo_unary_function dilate_op image, is_class image = im_dilate image (to_matrix mask), is_image image = error (_ "bad arguments to " ++ "dilate") { dilate_op = Operator "dilate" dilate_object Operator_type.COMPOUND_REWRAP false; dilate_object x = _morph_2_masks dilate mask x, is_matrix x = dilate mask x; } erode mask image = oo_unary_function erode_op image, is_class image = im_erode image (to_matrix mask), is_image image = error (_ "bad arguments to " ++ "erode") { erode_op = Operator "erode" erode_object Operator_type.COMPOUND_REWRAP false; erode_object x = _morph_2_masks erode mask x, is_matrix x = erode mask x; } conv mask image = oo_unary_function conv_op image, is_class image = im_conv image (to_matrix mask), is_image image = error (_ "bad arguments to " ++ "conv") { conv_op = Operator "conv" (conv mask) Operator_type.COMPOUND_REWRAP false; } convsep mask image = oo_unary_function convsep_op image, is_class image = im_convsep image (to_matrix mask), is_image image = error (_ "bad arguments to " ++ "convsep") { convsep_op = Operator "convsep" (convsep mask) Operator_type.COMPOUND_REWRAP false; } convsepf mask image = oo_unary_function convsepf_op image, is_class image = im_convsepf image (to_matrix mask), is_image image = error (_ "bad arguments to " ++ "convsepf") { convsepf_op = Operator "convsepf" (convsepf mask) Operator_type.COMPOUND_REWRAP false; } rank w h n image = oo_unary_function rank_op image, is_class image = im_rank image (to_real w) (to_real h) (to_real n), is_image image = error (_ "bad arguments to " ++ "rank") { rank_op = Operator "rank" (rank w h n) Operator_type.COMPOUND_REWRAP false; } rank_image n x = rlist x.value, is_Group x = rlist x, is_list x = error (_ "bad arguments to " ++ "rank_image") { rlist l = wrapper ranked, has_wrapper = ranked { has_wrapper = has_member_list (has_member "Image") l; wrapper = get_member_list (has_member "Image") (get_member "Image") l; ranked = im_rank_image (map get_image l) (to_real n); } } greyc iterations amplitude sharpness anisotropy alpha sigma dl da gauss_prec interpolation fast_approx x = oo_unary_function greyc_op x, is_class x = greyc_im x, is_image x = error (_ "bad argument" ++ " (" ++ print x ++ ") to " ++ "greyc") { greyc_op = Operator "greyc" (greyc iterations amplitude sharpness anisotropy alpha sigma dl da gauss_prec interpolation fast_approx) Operator_type.COMPOUND_REWRAP false; greyc_im x = im_greyc x iterations amplitude sharpness anisotropy alpha sigma dl da gauss_prec interpolation fast_approx; } greyc_mask iterations amplitude sharpness anisotropy alpha sigma dl da gauss_prec interpolation fast_approx mask x = oo_binary_function greyc_mask_op mask x, is_class mask = oo_binary'_function greyc_mask_op mask x, is_class x = greyc_im mask x, is_image mask && is_image x = error (_ "bad arguments" ++ " (" ++ print mask ++ ", " ++ print x ++ ") " ++ "to " ++ "greyc") { greyc_mask_op = Operator "greyc_mask" (greyc_mask iterations amplitude sharpness anisotropy alpha sigma dl da gauss_prec interpolation fast_approx) Operator_type.COMPOUND_REWRAP false; greyc_im mask x = im_greyc_mask x mask iterations amplitude sharpness anisotropy alpha sigma dl da gauss_prec interpolation fast_approx; } // find the correlation surface for a small image within a big one correlate small big = oo_binary_function correlate_op small big, is_class small = oo_binary'_function correlate_op small big, is_class big = im_spcor big small, is_image small && is_image big = error (_ "bad arguments to " ++ "correlate") { correlate_op = Operator "correlate" correlate Operator_type.COMPOUND_REWRAP false; } // just sum-of-squares-of-differences correlate_fast small big = oo_binary_function correlate_fast_op small big, is_class small = oo_binary'_function correlate_fast_op small big, is_class big = im_fastcor big small, is_image small && is_image big = error (_ "bad arguments to " ++ "correlate_fast") { correlate_fast_op = Operator "correlate_fast" correlate_fast Operator_type.COMPOUND_REWRAP false; } // set Type, wrap as Plot_hist if it's a class hist_tag x = oo_unary_function hist_tag_op x, is_class x = image_set_type Image_type.HISTOGRAM x, is_image x = error (_ "bad arguments to " ++ "hist_tag") { hist_tag_op = Operator "hist_tag" (Plot_histogram @ hist_tag) Operator_type.COMPOUND false; } hist_find x = oo_unary_function hist_find_op x, is_class x = im_histgr x (-1), is_image x = error (_ "bad arguments to " ++ "hist_find") { hist_find_op = Operator "hist_find" (Plot_histogram @ hist_find) Operator_type.COMPOUND false; } hist_find_nD bins image = oo_unary_function hist_find_nD_op image, is_class image = im_histnD image (to_real bins), is_image image = error (_ "bad arguments to " ++ "hist_find_nD") { hist_find_nD_op = Operator "hist_find_nD" (hist_find_nD bins) Operator_type.COMPOUND_REWRAP false; } hist_map hist image = oo_binary_function hist_map_op hist image, is_class hist = oo_binary'_function hist_map_op hist image, is_class image = im_maplut image hist, is_image hist && is_image image = error (_ "bad arguments to " ++ "hist_map") { // can't use rewrap, as we want to always wrap as image hist_map_op = Operator "hist_map" (compose (compose Image) hist_map) Operator_type.COMPOUND false; } hist_cum hist = oo_unary_function hist_cum_op hist, is_class hist = im_histcum hist, is_image hist = error (_ "bad arguments to " ++ "hist_cum") { hist_cum_op = Operator "hist_cum" hist_cum Operator_type.COMPOUND_REWRAP false; } hist_diff hist = oo_unary_function hist_diff_op hist, is_class hist = im_histdiff hist, is_image hist = error (_ "bad arguments to " ++ "hist_diff") { hist_diff_op = Operator "hist_diff" hist_diff Operator_type.COMPOUND_REWRAP false; im_histdiff h = (conv (Matrix [[-1, 1]]) @ clip2fmt (fmt (get_format h))) h { // up the format so it can represent the whole range of // possible values from this mask fmt x = Image_format.SHORT, x == Image_format.UCHAR || x == Image_format.CHAR = Image_format.INT, x == Image_format.USHORT || x == Image_format.SHORT || x == Image_format.UINT = x; } } hist_norm hist = oo_unary_function hist_norm_op hist, is_class hist = im_histnorm hist, is_image hist = error (_ "bad arguments to " ++ "hist_norm") { hist_norm_op = Operator "hist_norm" hist_norm Operator_type.COMPOUND_REWRAP false; } hist_match in ref = oo_binary_function hist_match_op in ref, is_class in = oo_binary'_function hist_match_op in ref, is_class ref = im_histspec in ref, is_image in && is_image ref = error (_ "bad arguments to " ++ "hist_match") { hist_match_op = Operator "hist_match" hist_match Operator_type.COMPOUND_REWRAP false; } hist_equalize x = hist_map ((hist_norm @ hist_cum @ hist_find) x) x; hist_equalize_local w h image = oo_unary_function hist_equalize_local_op image, is_class image = lhisteq image, is_image image = error (_ "bad arguments to " ++ "hist_equalize_local") { hist_equalize_local_op = Operator "hist_equalize_local" (hist_equalize_local w h) Operator_type.COMPOUND_REWRAP false; // loop over bands, if necessary lhisteq im = im_lhisteq im (to_real w) (to_real h), get_bands im == 1 = (foldl1 join @ map lhisteq @ bandsplit) im; } // find the threshold below which are percent of the image (percent in [0,1]) // eg. hist_thresh 0.1 x == 12, then x < 12 will light up 10% of the pixels hist_thresh percent image = x { // our own normaliser ... we don't want to norm channels separately // norm to [0,1] my_hist_norm h = h / max h; // normalised cumulative hist // we sum the channels before we normalise, because we want to treat them // all the same h = (my_hist_norm @ sum @ bandsplit @ hist_cum @ hist_find) image.value; // threshold that, then use im_profile to search for the x position in the // histogram x = mean (im_profile (h > percent) 1); } /* Sometimes useful, despite plotting now being built in, for making * diagnostic images. */ hist_plot hist = oo_unary_function hist_plot_op hist, is_class hist = im_histplot hist, is_image hist = error (_ "bad arguments to " ++ "hist_plot") { hist_plot_op = Operator "hist_plot" (Image @ hist_plot) Operator_type.COMPOUND false; } zerox d x = oo_unary_function zerox_op x, is_class x = im_zerox x (to_real d), is_image x = error (_ "bad arguments to " ++ "zerox") { zerox_op = Operator "zerox" (zerox d) Operator_type.COMPOUND_REWRAP false; } resize xfac yfac interp image = oo_unary_function resize_op image, is_class image = resize_im image, is_image image = error (_ "bad arguments to " ++ "resize") { resize_op = Operator "resize" resize_im Operator_type.COMPOUND_REWRAP false; xfac' = to_real xfac; yfac' = to_real yfac; rxfac' = 1 / xfac'; ryfac' = 1 / yfac'; resize_im im // upscale by integer factor, nearest neighbour = im_zoom im xfac' yfac', is_int xfac' && is_int yfac' && xfac' >= 1 && yfac' >= 1 && interp == Interpolate.NEAREST_NEIGHBOUR // downscale by integer factor, nearest neighbour = im_subsample im rxfac' ryfac', is_int rxfac' && is_int ryfac' && rxfac' >= 1 && ryfac' >= 1 && interp == Interpolate.NEAREST_NEIGHBOUR // upscale by any factor, nearest neighbour // can't really do this right ... upscale by integer part, then // bilinear to exact size = scale xg?1 yg?1 (im_zoom im xg?0 yg?0), xfac' >= 1 && yfac' >= 1 && interp == Interpolate.NEAREST_NEIGHBOUR // downscale by any factor, nearest neighbour // can't really do this right ... downscale by integer part, // then bilinear to exact size = scale xs?1 ys?1 (im_subsample im xs?0 ys?0), rxfac' >= 1 && ryfac' >= 1 && interp == Interpolate.NEAREST_NEIGHBOUR // upscale by any factor, bilinear = scale xfac' yfac' im, xfac' >= 1 && yfac' >= 1 && interp == Interpolate.BILINEAR // downscale by any factor, bilinear // block shrink by integer factor, then bilinear resample to // exact = scale xs?1 ys?1 (im_shrink im xs?0 ys?0), rxfac' >= 1 && ryfac' >= 1 && interp == Interpolate.BILINEAR = error ("resize: unimplemented argument combination:\n" ++ " xfac = " ++ print xfac' ++ "\n" ++ " yfac = " ++ print yfac' ++ "\n" ++ " interp = " ++ print interp ++ " (" ++ Interpolate.names.lookup 1 0 interp ++ ")") { // convert a float scale to integer plus fraction // eg. scale by 2.5 becomes [2, 1.25] (x * 2.5 == x * 2 * 1.25) break f = [floor f, f / floor f]; // same, but for downsizing ... turn a float scale which is less than // 1 into an int shrink and a float scale // complicated: the int shrink may round the size down (eg. imagine // subsampling a 11 pixel wide image by 3, we'd get a 3 pixel wide // image, not a 3.666 pixel wide image), so pass in the size of image // we are operating on and adjust for any rounding // so ... x is (eg.) 467, f is (eg. 128/467, about 0.274) rbreak x f = [int_shrink, float_resample] { // the size of image we are aiming for after the combined int and // float resample x' = x * f; // int part int_shrink = floor (1 / f); // size after int shrink x'' = floor (x / int_shrink); // therefore what we need for the float part float_resample = x' / x''; } width = get_width im; height = get_height im; // grow and shrink factors xg = break xfac'; yg = break yfac'; xs = rbreak width xfac'; ys = rbreak height yfac'; // binlinear resize scale xfac yfac im = im_affine im xfac 0 0 yfac 0 0 0 0 (rint (get_width im * xfac)) (rint (get_height im * yfac)); } } sharpen radius x1 y2 y3 m1 m2 in = oo_unary_function sharpen_op in, is_class in = im_sharpen in (to_real radius) (to_real x1) (to_real y2) (to_real y3) (to_real m1) (to_real m2), is_image in = error (_ "bad arguments to " ++ "sharpen") { sharpen_op = Operator "sharpen" (sharpen radius x1 y2 y3 m1 m2) Operator_type.COMPOUND_REWRAP false; } tone_analyse s m h sa ma ha in = oo_unary_function tone_analyse_op in, is_class in = im_tone_analyse in (to_real s) (to_real m) (to_real h) (to_real sa) (to_real ma) (to_real ha), is_image in = error (_ "bad arguments to " ++ "tone_analyse") { tone_analyse_op = Operator "tone_analyse" (Plot_histogram @ tone_analyse s m h sa ma ha) Operator_type.COMPOUND false; } tone_map hist image = oo_binary_function tone_map_op hist image, is_class hist = oo_binary'_function tone_map_op hist image, is_class image = im_tone_map image hist, is_image hist && is_image image = error (_ "bad arguments to " ++ "tone_map") { tone_map_op = Operator "tone_map" tone_map Operator_type.COMPOUND_REWRAP false; } tone_build fmt b w s m h sa ma ha = (Plot_histogram @ clip2fmt fmt) (im_tone_build_range mx mx (to_real b) (to_real w) (to_real s) (to_real m) (to_real h) (to_real sa) (to_real ma) (to_real ha)) { mx = Image_format.maxval fmt; } icc_export depth profile intent in = oo_unary_function icc_export_op in, is_class in = im_icc_export_depth in (to_real depth) (expand profile) (to_real intent), is_image in = error (_ "bad arguments to " ++ "icc_export") { icc_export_op = Operator "icc_export" (icc_export depth profile intent) Operator_type.COMPOUND_REWRAP false; } icc_import profile intent in = oo_unary_function icc_import_op in, is_class in = im_icc_import in (expand profile) (to_real intent), is_image in = error (_ "bad arguments to " ++ "icc_import") { icc_import_op = Operator "icc_import" (icc_import profile intent) Operator_type.COMPOUND_REWRAP false; } icc_import_embedded intent in = oo_unary_function icc_import_embedded_op in, is_class in = im_icc_import_embedded in (to_real intent), is_image in = error (_ "bad arguments to " ++ "icc_import_embedded") { icc_import_embedded_op = Operator "icc_import_embedded" (icc_import_embedded intent) Operator_type.COMPOUND_REWRAP false; } icc_transform in_profile out_profile intent in = oo_unary_function icc_transform_op in, is_class in = im_icc_transform in (expand in_profile) (expand out_profile) (to_real intent), is_image in = error (_ "bad arguments to " ++ "icc_transform") { icc_transform_op = Operator "icc_transform" (icc_transform in_profile out_profile intent) Operator_type.COMPOUND_REWRAP false; } icc_ac2rc profile in = oo_unary_function icc_ac2rc_op in, is_class in = im_icc_ac2rc in (expand profile), is_image in = error (_ "bad arguments to " ++ "icc_ac2rc") { icc_ac2rc_op = Operator "icc_ac2rc" (icc_ac2rc profile) Operator_type.COMPOUND_REWRAP false; } flood_blob x y v image = oo_unary_function flood_blob_op image, is_class image = im_flood_blob_copy image (to_real x) (to_real y) v, is_image image = error (_ "bad arguments to " ++ "flood_blob") { flood_blob_op = Operator "flood_blob" (flood_blob x y v) Operator_type.COMPOUND_REWRAP false; } print_base base in = oo_unary_function print_base_op in, is_class in = map (print_base base) in, is_list in = print_base_real, is_real in = error (_ "bad arguments to " ++ "print_base") { print_base_op = Operator "print_base" (print_base base) Operator_type.COMPOUND false; print_base_real = error "print_base: bad base", base < 2 || base > 16 = "0", in < 0 || chars == [] = reverse chars { digits = map (\x x % base) (takewhile (not_equal 0) (iterate (\x idivide x base) in)); chars = map tohd digits; tohd x = (char) ((int) '0' + x), x < 10 = (char) ((int) 'A' + (x - 10)); } } /* id x: the identity function * * id :: * -> * */ id x = x; /* const x y: junk y, return x * * (const 3) is the function that always returns 3. * const :: * -> ** -> * */ const x y = x; /* converse fn a b: swap order of args to fn * * converse fn a b == fn b a * converse :: (* -> ** -> ***) -> ** -> * -> *** */ converse fn a b = fn b a; /* fix fn x: find the fixed point of a function */ fix fn x = limit (iterate fn x); /* until pred fn n: apply fn to n until pred succeeds; return that value * * until (more 1000) (multiply 2) 1 = 1024 * until :: (* -> bool) -> (* -> *) -> * -> * */ until pred fn n = n, pred n = until pred fn (fn n); /* Infinite list of primes. */ primes = 1 : (sieve [2 ..]) { sieve l = hd l : sieve (filter (nmultiple (hd l)) (tl l)); nmultiple n x = x / n != (int) (x / n); } /* Map an n-ary function (pass the args as a list) over groups of objects. * The objects can be single objects or groups. If more than one * object is a group, we iterate for the length of the smallest group. * Don't loop over plain lists, since we want (eg.) "mean [1, 2, 3]" to work. * Treat [] as no-value --- ie. if any of the inputs are [] we put [] into the * output and don't apply the function. copy-pasted into _types, keep in sync */ map_nary fn args = fn args, groups == [] = Group (map process [0, 1 .. shortest - 1]) { // find all the group arguments groups = filter is_Group args; // what's the length of the shortest group arg? shortest = foldr1 min_pair (map (len @ get_value) groups); // process index n ... pull that member from each argument // recurse to handle application, so we work for nested groups too process n = [], any (map (is_noval n) args) = map_nary fn (map (extract n) args) { extract n arg = arg.value?n, is_Group arg = arg; is_noval n arg = is_Group arg && arg.value?n == []; } } /* Map a 1-ary function over an object. */ map_unary fn a = map_nary (list_1ary fn) [a]; /* Map a 2-ary function over a pair of objects. */ map_binary fn a b = map_nary (list_2ary fn) [a, b]; /* Map a 3-ary function over three objects. */ map_trinary fn a b c = map_nary (list_3ary fn) [a, b, c]; /* Map a 4-ary function over three objects. */ map_quaternary fn a b c d = map_nary (list_4ary fn) [a, b, c, d]; /* Same as map_nary, but for lists. Handy for (eg.) implementing arith ops on * vectors and matricies. */ map_nary_list fn args = fn args, lists == [] = map process [0, 1 .. shortest - 1] { // find all the list arguments lists = filter is_list args; // what's the length of the shortest list arg? shortest = foldr1 min_pair (map len lists); // process index n ... pull that member from each argument // recurse to handle application, so we work for nested lists too process n = map_nary_list fn (map (extract n) args) { extract n arg = arg?n, is_list arg = arg; } } map_unaryl fn a = map_nary_list (list_1ary fn) [a]; map_binaryl fn a b = map_nary_list (list_2ary fn) [a, b]; /* Remove features smaller than x pixels across from an image. This used to be * rather complex ... convsep is now good enough to use. */ smooth x image = convsep (matrix_gaussian_blur (to_real x * 2)) image; /* Chop up an image into a list of lists of smaller images. Pad edges with * black. */ imagearray_chop tile_width tile_height hoverlap voverlap i = map chop' [0, vstep .. last_y] { width = get_width i; height = get_height i; bands = get_bands i; format = get_format i; type = get_type i; tile_width' = to_real tile_width; tile_height' = to_real tile_height; hoverlap' = to_real hoverlap; voverlap' = to_real voverlap; /* Unique pixels per tile. */ hstep = tile_width' - hoverlap'; vstep = tile_height' - voverlap'; /* Number of tiles across and down. Remember the case where width == * hstep. */ across = (int) ((width - 1) / hstep) + 1; down = (int) ((height - 1) / vstep) + 1; /* top/left of final tile. */ last_x = hstep * (across - 1); last_y = vstep * (down - 1); /* How much do we need to pad by? */ sx = last_x + tile_width'; sy = last_y + tile_height'; /* Expand image with black to pad size. */ pad = embed 0 0 0 sx sy i; /* Chop up a row. */ chop' y = map chop'' [0, hstep .. last_x] { chop'' x = extract_area x y tile_width' tile_height' pad; } } /* Reassemble image. */ imagearray_assemble hoverlap voverlap il = (image_set_origin 0 0 @ foldl1 tbj @ map (foldl1 lrj)) il { lrj l r = insert (get_width l + hoverlap) 0 r l; tbj t b = insert 0 (get_height t + voverlap) b t; } /* Generate an nxn identity matrix. */ identity_matrix n = error "identity_matrix: n > 0", n < 1 = map line [0 .. n - 1] { line p = take p [0, 0 ..] ++ [1] ++ take (n - p - 1) [0, 0 ..]; } /* Incomplete gamma function Q(a, x) == 1 - P(a, x) FIXME ... this is now a builtin, until we can get a nice List class (requires overloadable ':') gammq a x = error "bad args", x < 0 || a <= 0 = 1 - gamser, x < a + 1 = gammcf { gamser = (gser a x)?0; gammcf = (gcf a x)?0; } */ /* Incomplete gamma function P(a, x) evaluated as series representation. Also * return ln(gamma(a)) ... nr in c, pp 218 */ gser a x = [gamser, gln] { gln = gammln a; gamser = error "bad args", x < 0 = 0, x == 0 = 1 // fix this { // maximum iterations maxit = 100; ap = List [a + 1, a + 2 ...]; xoap = x / ap; del = map product (prefixes xoap.value); /* del = map (multiply (1 / a)) (map product (prefixes xoap)) del = xap = iterate (multiply */ /* Generate all prefixes of a list ... [1,2,3] -> [[1], [1, 2], [1, 2, * 3], [1, 2, 3, 4] ...] */ prefixes l = map (converse take l) [1..]; } } /* ln(gamma(xx)) ... nr in c, pp 214 */ gammln xx = gln { cof = [76.18009172947146, -86.50532032941677, 24.01409824083091, -1.231739572450155, 0.1208650973866179e-2, -0.5395239384953e-5]; y = take 6 (iterate (add 1) (xx + 1)); ser = 1.000000000190015 + sum (map2 divide cof y); tmp = xx + 0.5; tmp' = tmp - ((xx + 0.5) * log tmp); gln = -tmp + log (2.5066282746310005 * ser / xx); } /* make a LUT from a scatter */ buildlut x = Image (im_buildlut x), is_Matrix x && x.width > 1 = im_buildlut (Matrix x), is_matrix x && is_list_len_more 1 x?0 = error (_ "bad arguments to " ++ "buildlut"); /* Linear regression. Return a class with the stuff we need in. * from s15.2, p 665 NR in C */ linreg xes yes = obj { obj = class { // in case we ever get shown in the workspace _vislevel = 2; slope = sum [t * y :: [t, y] <- zip2 tes yes] / st2; intercept = (sy - sx * slope) / ss; chi2 = sum [(y - intercept - slope * x) ** 2 :: [x, y] <- zip2 xes yes]; siga = (chi2 / (ss - 2)) ** 0.5 * ((1 + sx ** 2 / (ss * st2)) / ss) ** 0.5; sigb = (chi2 / (ss - 2)) ** 0.5 * (1 / st2) ** 0.5; // for compat with linregw, see below q = 1.0; } ss = len xes; sx = sum xes; sy = sum yes; sxoss = sx / ss; tes = [x - sxoss :: x <- xes]; st2 = sum [t ** 2 :: t <- tes]; } /* Weighted linear regression. Xes, yes and a list of deviations. */ linregw xes yes devs = obj { obj = class { // in case we ever get shown in the workspace _vislevel = 2; slope = sum [(t * y) / sd :: [t, y, sd] <- zip3 tes yes devs] / st2; intercept = (sy - sx * slope) / ss; chi2 = sum [((y - intercept - slope * x) / sd) ** 2 :: [x, y, sd] <- zip3 xes yes devs]; siga = ((1 + sx * sx / (ss * st2)) / ss) ** 0.5; sigb = (1 / st2) ** 0.5; q = gammq (0.5 * (len xes - 2)) (0.5 * chi2); } wt = [sd ** -0.5 :: sd <- devs]; ss = sum wt; sx = sum [x * w :: [x, w] <- zip2 xes wt]; sy = sum [y * w :: [y, w] <- zip2 yes wt]; sxoss = sx / ss; tes = [(x - sxoss) / sd :: [x, sd] <- zip2 xes devs]; st2 = sum [t ** 2 :: t <- tes]; } nip2-8.7.0/share/nip2/compat/7.14/Preferences.ws0000644000175000017500000007763413224651032016000 00000000000000 nip2-8.7.0/share/nip2/compat/7.14/Filter.def0000644000175000017500000011416213224651032015055 00000000000000Filter_conv_item = class Menupullright "_Convolution" "various spatial convolution filters" { /* Some useful masks. */ filter_blur = Matrix_con 9 0 [[1, 1, 1], [1, 1, 1], [1, 1, 1]]; filter_sharp = Matrix_con 8 0 [[-1, -1, -1], [-1, 16, -1], [-1, -1, -1]]; filter_emboss = Matrix_con 1 128 [[-1, 0], [0, 1]]; filter_laplacian = Matrix_con 1 128 [[-1, -1, -1], [-1, 8, -1], [-1, -1, -1]]; filter_sobel = Matrix_con 1 128 [[1, 2, 1], [0, 0, 0], [-1, -2, -1]]; filter_lindet = Matrix_con 1 0 [[1, 1, 1], [-2, -2, -2], [1, 1, 1]]; Blur_item = class Menuaction "_Blur" "3x3 blur of image" { action x = map_unary (conv filter_blur) x; } Sharpen_item = class Menuaction "_Sharpen" "3x3 sharpen of image" { action x = map_unary (conv filter_sharp) x; } Emboss_item = class Menuaction "_Emboss" "1 pixel displace emboss" { action x = map_unary (conv filter_emboss) x; } Laplacian_item = class Menuaction "_Laplacian" "3x3 laplacian edge detect" { action x = map_unary (conv filter_laplacian) x; } Sobel_item = class Menuaction "So_bel" "3x3 Sobel edge detect" { action x = map_unary sobel x { sobel im = abs (a - 128) + abs (b - 128) { a = conv filter_sobel im; b = conv (rot270 filter_sobel) im; } } } /* 3x3 line detect of image diagonals should be scaled down by root(2) I guess Kirk */ Linedet_item = class Menuaction "Li_ne Detect" "3x3 line detect" { action x = map_unary lindet x { lindet im = foldr1 max_pair images { masks = take 4 (iterate rot45 filter_lindet); images = map (converse conv im) masks; } } } Usharp_item = class Menuaction "_Unsharp Mask" "cored sharpen of L only in LAB image" { action x = class _result { _vislevel = 3; size = Option "Radius" [ "3 pixels", "5 pixels", "7 pixels", "9 pixels", "11 pixels", "51 pixels" ] 0; st = Scale "Smoothness threshold" 0 5 1.5; bm = Scale "Brighten by at most" 1 50 10; dm = Scale "Darken by at most" 1 50 50; fs = Scale "Sharpen flat areas by" (-2) 5 1; js = Scale "Sharpen jaggy areas by" (-2) 5 2; _result = map_unary process x { process in = Image in''' { in' = colour_transform_to Image_type.LABS in.value; in'' = sharpen [3, 5, 7, 9, 11, 51]?size st bm dm fs js in'; in''' = colour_transform_to (get_type in) in''; } } } } sep1 = Menuseparator; Custom_blur_item = class Menuaction "Custom B_lur / Sharpen" "blur or sharpen with tuneable parameters" { action x = class _result { _vislevel = 3; type = Option "Type" ["Blur", "Sharpen"] 0; r = Scale "Radius" 1 100 1; fac = Scale "Amount" 0 1 1; shape = Option "Mask shape" [ "Square", "Gaussian" ] 0; prec = Option "Precision" ["Int", "Float"] 0; _result = map_unary process x { process in = clip2fmt blur.format proc { mask = matrix_blur r.value, shape.value == 0 = matrix_gaussian_blur r.value; blur = [convsep, convsepf]?prec mask in; proc = in + fac * (in - blur), type == 1 = blur * fac + in * (1 - fac); } } } } Custom_conv_item = class Menuaction "Custom C_onvolution" "convolution filter with tuneable parameters" { action x = class _result { _vislevel = 3; matrix = Matrix_con 1 0 [[0, 0, 0], [0, 1, 0], [0, 0, 0]]; separable = Toggle "Seperable convolution" false, matrix.width == 1 || matrix.height == 1 = false; type = Option "Convolution type" ["Int", "Float"] 0; _result = map_unary process x { process in = in.Image in' { conv_fn = im_conv, !separable && type == 0 = im_convsep, separable && type == 0 = im_convf, !separable && type == 1 = im_convsepf, separable && type == 1 = error "boink!"; in' = conv_fn in.value matrix; } } } } } Filter_rank_item = class Menupullright "_Rank" "various rank filters" { Median_item = class Menuaction "_Median" "3x3 median rank filter" { action x = map_unary (rank 3 3 5) x; } Image_rank_item = class Menuaction "_Image Rank" "pixelwise rank a list or group of images" { action x = class _result { _vislevel = 3; select = Expression "Rank" ((int) (guess_size / 2)) { guess_size = len x, is_list x = len x.value, is_Group x = 0; } // can't really iterate over groups ... since we allow a group // argument _result = rank_image select x; } } Custom_rank_item = class Menuaction "Custom _Rank" "rank filter with tuneable parameters" { action x = class _result { _vislevel = 3; window_width = Expression "Window width" 3; window_height = Expression "Window height" 3; select = Expression "Rank" ((int) ((to_real window_width * to_real window_height + 1) / 2)); _result = map_unary process x { process in = rank window_width window_height select in; } } } } Filter_morphology_item = class Menupullright "_Morphology" "various morphological filters" { /* Some useful masks. */ mask8 = Matrix_mor [[255, 255, 255], [255, 255, 255], [255, 255, 255]]; mask4 = Matrix_mor [[128, 255, 128], [255, 255, 255], [128, 255, 128]]; mask1 = Matrix_mor [[0, 0, 0], [0, 255, 0], [0, 0, 0]]; thin = Matrix_mor [[0, 0, 0], [128, 255, 128], [255, 255, 255]]; Threshold_item = Select_item.Threshold_item; sep1 = Menuseparator; Dilate_item = class Menupullright "_Dilate" "morphological dilate" { Dilate8_item = class Menuaction "_8-connected" "dilate with an 8-connected mask" { action x = map_unary (dilate mask8) x; } Dilate4_item = class Menuaction "_4-connected" "dilate with a 4-connected mask" { action x = map_unary (dilate mask4) x; } } Erode_item = class Menupullright "_Erode" "morphological erode" { Erode8_item = class Menuaction "_8-connected" "erode with an 8-connected mask" { action x = map_unary (erode mask8) x; } Erode4_item = class Menuaction "_4-connected" "erode with a 4-connected mask" { action x = map_unary (erode mask4) x; } } Custom_morph_item = class Menuaction "Custom _Morphology" "convolution morphological operator" { action x = class _result { _vislevel = 3; mask = mask4; type = Option "Operation" ["Erode", "Dilate"] 1; apply = Expression "Number of times to apply mask" 1; _result = map_unary morph x { morph image = Image value' { fatmask = (iterate (dilate mask) mask)?(to_real apply - 1); value' = im_erode image.value fatmask, type.value == 0 = im_dilate image.value fatmask; } } } } sep2 = Menuseparator; Open_item = class Menuaction "_Open" "open with an 8-connected mask" { action x = map_unary (dilate mask8 @ erode mask8) x; } Close_item = class Menuaction "_Close" "close with an 8-connected mask" { action x = map_unary (erode mask8 @ dilate mask8) x; } Clean_item = class Menuaction "C_lean" "remove 8-connected isolated points" { action x = map_unary clean x { clean x = x ^ erode mask1 x; } } Thin_item = class Menuaction "_Thin" "thin once" { action x = map_unary thinall x { masks = take 8 (iterate rot45 thin); thin1 m x = x ^ erode m x; thinall x = foldr thin1 x masks; } } } Filter_fourier_item = class Menupullright "_Fourier" "various Fourier filters" { preview_size = 64; sense_option = Option "Sense" [ "Pass", "Reject" ] 0; // make a visualisation image make_vis fn = (Image @ image_set_type Image_type.FOURIER @ rotquad @ fn) (im_create_fmask preview_size preview_size); // make the process function process fn in = (Image @ fn) (im_flt_image_freq in.value); New_ideal_item = class Menupullright "_Ideal" "various ideal Fourier filters" { High_low_item = class Menuaction "_High or Low Pass" "highpass/lowpass ideal Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; // call a freq func with our parameters _params f = f sense.value fc.value 0 0 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" "ring pass/reject ideal Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; rw = Scale "Ring width" 0.01 0.99 0.5; // call a freq func with our parameters _params f = f (sense.value + 6) fc.value rw.value 0 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Band_item = class Menuaction "_Band Pass or Band Reject" "band pass/reject ideal Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fcx = Scale "Horizontal frequency cutoff" 0.01 0.99 0.5; fcy = Scale "Vertical frequency cutoff" 0.01 0.99 0.5; r = Scale "Radius" 0.01 0.99 0.5; // call a freq func with our parameters _params f = f (sense.value + 12) fcx.value fcy.value r.value 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } } New_gaussian_item = class Menupullright "_Gaussian" "various Gaussian Fourier filters" { High_low_item = class Menuaction "_High or Low Pass" "highpass/lowpass Gaussian Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; // call a freq func with our parameters _params f = f (sense.value + 4) fc.value ac.value 0 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" "ring pass/reject Gaussian Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; rw = Scale "Ring width" 0.01 0.99 0.5; // call a freq func with our parameters _params f = f (sense.value + 10) fc.value rw.value ac.value 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Band_item = class Menuaction "_Band Pass or Band Reject" "band pass/reject Gaussian Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fcx = Scale "Horizontal frequency cutoff" 0.01 0.99 0.5; fcy = Scale "Vertical frequency cutoff" 0.01 0.99 0.5; r = Scale "Radius" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; // call a freq func with our parameters _params f = f (sense.value + 16) fcx.value fcy.value r.value ac.value 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } } New_butterworth_item = class Menupullright "_Butterworth" "various Butterworth Fourier filters" { High_low_item = class Menuaction "_High or Low Pass" "highpass/lowpass Butterworth Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; o = Scale "Order" 1 10 2; // call a freq func with our parameters _params f = f (sense.value + 2) o.value fc.value ac.value 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" "ring pass/reject Butterworth Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; rw = Scale "Ring width" 0.01 0.99 0.5; o = Scale "Order" 1 10 2; // call a freq func with our parameters _params f = f (sense.value + 8) o.value fc.value rw.value ac.value 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Band_item = class Menuaction "_Band Pass or Band Reject" "band pass/reject Butterworth Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fcx = Scale "Horizontal frequency cutoff" 0.01 0.99 0.5; fcy = Scale "Vertical frequency cutoff" 0.01 0.99 0.5; r = Scale "Radius" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; o = Scale "Order" 1 10 2; // call a freq func with our parameters _params f = f (sense.value + 14) o.value fcx.value fcy.value r.value ac.value; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } } } Filter_enhance_item = class Menupullright "_Enhance" "various enhancement filters" { Falsecolour_item = class Menuaction "_False Colour" "false colour a mono image" { action x = class _result { _vislevel = 3; o = Scale "Offset" (-255) 255 0; clip = Toggle "Clip colour range" false; _result = map_unary process x { process im = falsecolour mono'' { mono = colour_transform_to Image_type.B_W im; mono' = mono + o; mono'' = (unsigned char) mono', clip = (unsigned char) (mono' & 0xff); } } } } Statistical_diff_item = class Menuaction "_Statistical Difference" "statistical difference of an image" { action x = class _result { _vislevel = 3; wsize = Expression "Window size" 11; tmean = Expression "Target mean" 128; mean_weight = Scale "Mean weight" 0 1 0.8; tdev = Expression "Target deviation" 50; dev_weight = Scale "Deviation weight" 0 1 0.8; border = Toggle "Output image matches input image in size" true; _result = map_unary process x { process in = Image in'' { in' = colour_transform_to Image_type.B_W in.value; fn = im_stdif, border = im_stdif_raw; in'' = fn in' mean_weight.value tmean.expr dev_weight.value tdev.expr wsize.expr wsize.expr; } } } } Hist_equal_item = class Menupullright "_Equalise Histogram" "equalise contrast" { Global_item = class Menuaction "_Global" "equalise contrast globally" { action x = map_unary hist_equalize x; } Local_item = class Menuaction "_Local" "equalise contrast within a roving window" { action x = class _result { _vislevel = 3; window_width = Expression "Window width" 20; window_height = Expression "Window height" 20; _result = map_unary process x { process in = hist_equalize_local window_width.expr window_height.expr in; } } } } } Filter_correlate_item = class Menupullright "Spatial _Correlation" "calculate correlation surfaces" { Correlate_item = class Menuaction "_Correlate" "calculate correlation coefficient" { action a b = map_binary corr a b { corr a b = correlate a b, a.width <= b.width && a.height <= b.height = correlate b a; } } Correlate_fast_item = class Menuaction "_Simple Difference" "calculate sum of squares of differences" { action a b = map_binary corr a b { corr a b = correlate_fast a b, a.width <= b.width && a.height <= b.height = correlate_fast b a; } } } Filter_greyc_item = class Menupullright "_GREYCstoration" "noise-removing filter" { Denoise_item = class Menuaction "Denoise" "Noise-removing filter" { action x = class _result { _vislevel = 3; iterations = Scale "Iterations" 1 5 1; amplitude = Scale "Amplitude" 1 100 40; sharpness = Scale "Sharpness" 0 3 0.9; anisotropy = Scale "Anisotropy" 0 1 0.15; alpha = Scale "Noise scale" 0 5 0.6; sigma = Scale "Geometry regularity" 0 2 1.1; dl = Scale "Spatial integration step" 0 1 0.8; da = Scale "Angular integration step" 0 90 30; gauss_prec = Scale "Precision" 1 10 2; interpolation = Option "Interpolation" ["Nearest-neighbour", "Bilinear", "Runge-Kutta"] 0; fast_approx = Toggle "Fast approximation" true; _result = greyc (to_real iterations) (to_real amplitude) (to_real sharpness) (to_real anisotropy) (to_real alpha) (to_real sigma) (to_real dl) (to_real da) (to_real gauss_prec) (to_real interpolation) (to_real fast_approx) x; } } Enlarge_item = class Menuaction "Enlarge" "Enlarge image" { action x = class _result { _vislevel = 3; scale = Scale "Enlarge" 1 10 3; iterations = Scale "Iterations" 1 5 3; amplitude = Scale "Amplitude" 1 100 20; sharpness = Scale "Sharpness" 0 3 0.2; anisotropy = Scale "Anisotropy" 0 1 0.9; alpha = Scale "Noise scale" 0 5 0.1; sigma = Scale "Geometry regularity" 0 2 1.5; dl = Scale "Spatial integration step" 0 1 0.8; da = Scale "Angular integration step" 0 90 30; gauss_prec = Scale "Precision" 1 10 2; interpolation = Option "Interpolation" ["Nearest-neighbour", "Bilinear", "Runge-Kutta"] 0; fast_approx = Toggle "Fast approximation" true; _result = greyc (to_real iterations) (to_real amplitude) (to_real sharpness) (to_real anisotropy) (to_real alpha) (to_real sigma) (to_real dl) (to_real da) (to_real gauss_prec) (to_real interpolation) (to_real fast_approx) (resize (to_real scale) (to_real scale) Interpolate.BILINEAR x); } } } #separator Filter_tilt_item = class Menupullright "Ti_lt Brightness" "tilt brightness" { Left_right_item = class Menuaction "_Left to Right" "linear left-right brighten" { action x = class _result { _vislevel = 3; tilt = Scale "Left-right tilt" (-1) 1 0; _result = map_unary tilt_lr x { tilt_lr image = image * scale { ramp = im_fgrey image.width image.height; scale = (ramp - 0.5) * tilt + 1; } } } } Top_bottom_item = class Menuaction "_Top to Bottom" "linear top-bottom brighten" { action x = class _result { _vislevel = 3; tilt = Scale "Top-bottom tilt" (-1) 1 0; _result = map_unary tilt_tb x { tilt_tb image = image * scale { ramp = rot90 (im_fgrey image.height image.width); scale = (ramp - 0.5) * tilt + 1; } } } } sep1 = Menuseparator; Left_right_cos_item = class Menuaction "Cosine Left-_right" "cosine left-right brighten" { action x = class _result { _vislevel = 3; tilt = Scale "Left-right tilt" (-1) 1 0; shift = Scale "Shift by" (-1) 1 0; _result = map_unary tilt_lr x { tilt_lr image = image * scale { ramp = im_fgrey image.width image.height - 0.5 - shift.value; scale = 0.5 * tilt.value * cos (ramp * 180) + 1; } } } } Top_bottom_cos_item = class Menuaction "Cosine Top-_bottom" "cosine top-bottom brighten" { action x = class _result { _vislevel = 3; tilt = Scale "Top-bottom tilt" (-1) 1 0; shift = Scale "Shift by" (-1) 1 0; _result = map_unary tilt_tb x { tilt_tb image = image * scale { ramp = rot90 (im_fgrey image.height image.width) - 0.5 - shift.value; scale = 0.5 * tilt.value * cos (ramp * 180) + 1; } } } } sep2 = Menuseparator; Circular_item = class Menuaction "_Circular" "circular brighten" { action x = class _result { _vislevel = 3; tilt = Scale "Tilt" (-1) 1 0; hshift = Scale "Horizontal shift by" (-1) 1 0; vshift = Scale "Vertical shift by" (-1) 1 0; _result = map_unary tilt_tb x { tilt_tb image = image * scale { hramp = im_fgrey image.width image.height - 0.5 - hshift.value; vramp = rot90 (im_fgrey image.height image.width) - 0.5 - vshift.value; ramp = (hramp ** 2 + vramp ** 2) ** 0.5; scale = 0.5 * tilt.value * cos (ramp * 180) + 1; } } } } } Filter_blend_item = class Menupullright "_Blend" "blend objects together" { Scale_blend_item = class Menuaction "_Scale" "blend two objects together with a scale" { action a b = class _result { _vislevel = 3; p = Scale "Blend position" 0 1 0.5; _result = map_binary process a b { process im1 im2 = im1 * (1 - p.value) + im2 * p.value; } } } Image_blend_item = class Menuaction "_Image" "use an image to blend two objects" { action a b c = class _result { _vislevel = 3; i = Toggle "Invert mask" false; _result = map_trinary process a b c { process a b c = blend condition in1 in2, !i = blend (invert condition) in1 in2 { compare a b // prefer image as the condition = false, !has_image a && has_image b // prefer mono images as the condition = false, has_bands a && has_bands b && get_bands a > 1 && get_bands b == 1 // prefer uchar as the condition = false, has_format a && has_format b && get_format a > Image_format.UCHAR && get_format b == Image_format.UCHAR = true; [condition, in1, in2] = sortc compare [a, b, c]; } } } } Line_blend_item = class Menuaction "_Along Line" "blend between image a and image b along a line" { action a b = class _result { _vislevel = 3; orientation = Option "Orientation" [ "Left to Right", "Top to Bottom" ] 0; blend_position = Scale "Blend position" 0 1 0.5; blend_width = Scale "Blend width" 0 1 0.05; _result = map_binary process a b { process a b = blend (Image condition) b a { output_width = max_pair a.width b.width; output_height = max_pair a.height b.height; range = output_width, orientation == 0 = output_height; blend_position' = floor (range * blend_position.value); blend_width' = 1, blend_width.value == 0 = floor (range * blend_width.value); start = blend_position' - blend_width' / 2; background = (make_xy output_width output_height) >= blend_position'; ramp = im_grey blend_width' output_height, orientation == 0 = rot90 (im_grey blend_width' output_width); condition = insert_noexpand start 0 ramp background?0, orientation == 0 = insert_noexpand 0 start ramp background?1; } } } } Blend_alpha_item = class Menuaction "_Alpha" "blend images with optional alpha channels" { // usage: layerit foreground background // input images must be either 1 or 3 bands, optionally + 1 band // which is used as the alpha channel // rich lott scale_mask im opacity = (unsigned char) (to_real opacity / 255 * im); // to mono intensity = colour_transform_to Image_type.B_W; // All the blend functions // I am grateful to this page // http://www.pegtop.net/delphi/blendmodes/ // for most of the formulae. blend_normal mask opacity fg bg = blend (scale_mask mask opacity) fg bg; blend_iflighter mask opacity fg bg = blend (if fg' > bg' then mask' else 0) fg bg { fg' = intensity fg; bg' = intensity bg; mask' = scale_mask mask opacity ; } blend_ifdarker mask opacity fg bg = blend (if fg' < bg' then mask' else 0) fg bg { fg' = intensity fg ; bg' = intensity bg ; mask' = scale_mask mask opacity ; } blend_multiply mask opacity fg bg = blend (scale_mask mask opacity) fg' bg { fg' = fg / 255 * bg; } blend_add mask opacity fg bg = blend mask fg' bg { fg' = opacity / 255 * fg + bg; } blend_subtract mask opacity fg bg = blend mask fg' bg { fg' = bg - opacity / 255 * fg; } blend_screen mask opacity fg bg = blend mask fg' bg { fg' = 255 - (255 - bg) * (255 - (opacity / 255 * fg)) / 255; } blend_burn mask opacity fg bg = blend mask fg'' bg { // fades to white which has no effect. fg' = (255 - opacity) + opacity * fg / 255; fg'' = 255 - 255 * (255 - bg) / fg'; } blend_softlight mask opacity fg bg = blend mask' fg' bg { mask' = scale_mask mask opacity; fg' = (2 * bg * fg + bg * bg * (1 - 2 * fg / 255)) / 255; } blend_hardlight mask opacity fg bg = blend mask' fg' bg { mask' = scale_mask mask opacity; fg' = 2 / 255 * fg * bg, bg < 129 = 255 - 2 * (255 - bg) * (255 - fg) / 255; } blend_lighten mask opacity fg bg = blend mask' fg' bg { mask' = scale_mask mask opacity; fg' = if bg < fg then fg else bg; } blend_darken mask opacity fg bg = blend mask' fg' bg { mask' = scale_mask mask opacity; fg' = if bg > fg then fg else bg; } blend_dodge mask opacity fg bg = blend mask fg'' bg { // one added to avoid divide by zero fg' = 1 + 255 - (opacity / 255 * fg); fg'' = bg * 255 / fg'; } blend_reflect mask opacity fg bg = blend mask' fg' bg { mask' = scale_mask mask opacity; fg' = bg * bg / (255 - fg); } blend_freeze mask opacity fg bg = blend mask' fg' bg { mask' = scale_mask mask opacity; fg' = 255 - (255 - bg) * (255 - bg) / (1 + fg); } blend_or mask opacity fg bg = bg | (unsigned char) fg' { mask' = scale_mask mask opacity; fg' = fg * mask' / 255; } blend_and mask opacity fg bg = bg & (unsigned char) fg' { mask' = scale_mask mask opacity; fg' = fg * mask' / 255; } // blend types NORMAL = 0; IFLIGHTER = 1; IFDARKER = 2; MULTIPLY = 3; ADD = 4; SUBTRACT = 5; SCREEN = 6; BURN = 7; DODGE = 8; HARDLIGHT = 9; SOFTLIGHT = 10; LIGHTEN = 11; DARKEN = 12; REFLECT = 13; FREEZE = 14; OR = 15; AND = 16; // names we show the user for blend types names = Enum [ [_ "Normal", NORMAL], [_ "If Lighter", IFLIGHTER], [_ "If Darker", IFDARKER], [_ "Multiply", MULTIPLY], [_ "Add", ADD], [_ "Subtract", SUBTRACT], [_ "Screen", SCREEN], [_ "Burn", BURN], [_ "Soft Light", SOFTLIGHT], [_ "Hard Light", HARDLIGHT], [_ "Lighten", LIGHTEN], [_ "Darken", DARKEN], [_ "Dodge", DODGE], [_ "Reflect", REFLECT], [_ "Freeze", FREEZE], [_ "Bitwise OR", OR], [_ "Bitwise AND", AND] ]; // functions we call for each blend type actions = Table [ [NORMAL, blend_normal], [IFLIGHTER, blend_iflighter], [IFDARKER, blend_ifdarker], [MULTIPLY, blend_multiply], [ADD, blend_add], [SUBTRACT, blend_subtract], [SCREEN, blend_screen], [BURN, blend_burn], [SOFTLIGHT, blend_softlight], [HARDLIGHT, blend_hardlight], [LIGHTEN, blend_lighten], [DARKEN, blend_darken], [DODGE, blend_dodge], [REFLECT, blend_reflect], [FREEZE, blend_freeze], [OR, blend_or], [AND, blend_and] ]; // make sure im has an alpha channel (set opaque if it hasn't) put_alpha im = im, im.bands == 4 || im.bands == 2 = im ++ 255; // make sure im has no alpha channel lose_alpha im = extract_bands 0 3 im, im.bands == 4 = im?0, im.bands == 2 = im; // does im have al alpha channel? has_alpha im = im.bands == 2 || im.bands == 4; // get the alpha (set opaque if no alpha) get_alpha img = img'?3, img.bands == 4 = img'?1 { img' = put_alpha img; } // add an alpha ... cast the alpha image to match the main image append_alpha im alpha = im ++ clip2fmt im.format alpha; // makes fg the same size as bg, displaced with u, v pixel offset moveit fg bg u v = insert_noexpand u v fg bg' { bg' = image_new bg.width bg.height fg.bands fg.format fg.coding fg.type 0 0 0; } action bg fg = class _value { _vislevel = 3; method = Option_enum names "Blend mode" "Normal"; opacity = Scale "Opacity" 0 255 255; hmove = Scale "Horizontal move by" (-bg.width) (bg.width) 0; vmove = Scale "Vertical move by" (-bg.height) (bg.height) 0; _value = append_alpha blended merged_alpha, has_alpha bg = blended { // displace and resize fg (need to displace alpha too) fg' = moveit (put_alpha fg) bg hmove vmove; // transform to sRGB fg'' = colour_transform_to Image_type.sRGB (lose_alpha fg'); bg' = colour_transform_to Image_type.sRGB (lose_alpha bg); // alphas merged merged_alpha = get_alpha bg | get_alpha fg'; // blend together blended = (actions.lookup 0 1 method.value_thing) (get_alpha fg') opacity.value fg'' bg'; } } } } Filter_overlay_header_item = class Menuaction "_Overlay" "make a colour overlay of two monochrome images" { action a b = class _result { _vislevel = 3; colour = Option "Colour overlay as" [ _ "Green over Red", _ "Blue over Red", _ "Red over Green", _ "Red over Blue", _ "Blue over Green", _ "Green over Blue" ] 0; _result = map_binary overlay a b { overlay a b = image_set_type Image_type.sRGB [(a' ++ b' ++ 0), (a' ++ 0 ++ b'), (b' ++ a' ++ 0), (b' ++ 0 ++ a'), (0 ++ a' ++ b'), (0 ++ b' ++ a')]?colour { a' = colour_transform_to Image_type.B_W a; b' = colour_transform_to Image_type.B_W b; } } } } Filter_colourize_item = class Menuaction "_Colourize" "use a colour image or patch to tint a mono image" { action a b = class _result { _vislevel = 3; tint = Scale "Tint" 0 1 0.6; _result = map_binary tintit a b { tintit a b = colour_transform_to (get_type colour) colourized' { // get the mono thing first [mono, colour] = sortc (const (is_colour_type @ get_type)) [a, b]; colour' = tint * colour_transform_to Image_type.LAB colour; mono' = colour_transform_to Image_type.B_W mono; colourized = (mono' / 2.55) ++ colour'?1 ++ colour'?2; colourized' = image_set_type Image_type.LAB colourized; } } } } Filter_browse_multiband_item = class Menupullright "Bro_wse" "browse though an image, bitwise or bandwise" { Bandwise_item = class Menuaction "B_andwise" "browse through the bands of a multiband image" { action image = class _result { _vislevel = 3; band = Scale "Band" 0 (image.bands - 1) 0; display = Option "Display as" [ _ "Grey", _ "Green over Red", _ "Blue over Red", _ "Red over Green", _ "Red over Blue", _ "Blue over Green", _ "Green over Blue" ] 0; _result = output { down = (int) band.value; up = down + 1; remainder = band.value - down; fade x a = Vector [0], x == 0 = a * x; a = fade remainder image?up; b = fade (1 - remainder) image?down; output = [ a + b, a ++ b ++ 0, a ++ 0 ++ b, b ++ a ++ 0, b ++ 0 ++ a, 0 ++ a ++ b, 0 ++ b ++ a ] ? display; } } } Bitwise_item = class Menuaction "Bi_twise" "browse through the bits of an image" { action x = class _result { _vislevel = 3; bit = Islider "Bit" 0 (nbits - 1) (nbits - 1) { nbits = x.bits, is_Image x = 8; Islider c f t v = class scope.Scale c f t ((int) v) { Scale = Islider; } } _result = map_unary process x { process im = (im & (0x1 << bit.value)) != 0; } } } } #separator Filter_negative_item = class Menuaction "Photographic _Negative" "swap black and white" { action x = map_unary invert x { invert in = clip2fmt in.format (colour_transform_to (get_type in) rgb') { rgb = colour_transform_to Image_type.sRGB in; rgb' = 255 - rgb; } } } Filter_solarize_item = class Menuaction "_Solarise" "invert colours above a threshold" { action x = class _result { _vislevel = 3; kink = Scale "Kink" 0 1 0.5; _result = map_unary process x { process image = hist_map tab'''' image { // max pixel value for this format mx = Image_format.maxval image.format; // make a LUT ... just 8 and 16 bit tab = im_identity_ushort image.bands mx, image.format == Image_format.USHORT = im_identity image.bands; tab' = Image tab; // make basic ^ shape tab'' = tab' * (1 / kink), tab' < mx * kink = (mx - tab') / (1 - kink); tab''' = clip2fmt image.format tab''; // smooth a bit mask = matrix_blur (tab'''.width / 8); tab'''' = convsep mask tab'''; } } } } Filter_diffuse_glow_item = class Menuaction "_Diffuse Glow" "add a halo to highlights" { action x = class _result { _vislevel = 3; r = Scale "Radius" 0 50 5; highlights = Scale "Highlights" 0 100 95; glow = Scale "Glow" 0 1 0.5; colour = Colour_new_item.Widget_colour_item.action; _result = map_unary process x { process image = image' { mono = (unsigned char) (colour_transform_to Image_type.B_W image); thresh = hist_thresh (highlights.value / 100) mono; mask = mono > thresh; blur = convsep (matrix_gaussian_blur r.value) mask; colour' = colour_transform_to image.type colour; image' = image + colour' * glow * (blur / 255); } } } } Filter_drop_shadow_item = class Menuaction "Drop S_hadow" "add a drop shadow to an image" { action x = class _result { _vislevel = 3; sx = Scale "Horizontal shadow" (-50) 50 5; sy = Scale "Vertical shadow" (-50) 50 5; ss = Scale "Shadow softness" 0 20 5; bg_colour = Expression "Background colour" 255; sd_colour = Expression "Shadow colour" 128; alpha = Toggle "Shadow in alpha channel" false; transparent = Toggle "Zero pixels are transparent" false; _result = map_unary shadow x { shadow image = Image final { blur_size = ss.value * 2 + 1; // matrix we blur with to soften shadows blur_matrix = matrix_gaussian_blur blur_size; matrix_size = blur_matrix.width; matrix_radius = (int) (matrix_size / 2) + 1; // position and size of shadow image in input cods // before and after fuzzing shadow_rect = Rect sx.value sy.value image.width image.height; fuzzy_shadow_rect = shadow_rect.margin_adjust matrix_radius; // size and pos of final image, in input cods final_rect = image.rect.union fuzzy_shadow_rect; // hard part of shadow in output cods shadow_rect' = Rect (shadow_rect.left - final_rect.left) (shadow_rect.top - final_rect.top) shadow_rect.width shadow_rect.height; // make the shadow mask ... true for parts which cast // a shadow mask = (foldr1 bitwise_and @ bandsplit) (image.value != 0), transparent = image_new image.width image.height 1 Image_format.UCHAR Image_coding.NOCODING Image_type.B_W 255 0 0; mask' = embed 0 shadow_rect'.left shadow_rect'.top final_rect.width final_rect.height mask; mask'' = convsep blur_matrix mask'; // use mask to fade between bg and shadow colour mk_background colour = image_new final_rect.width final_rect.height image.bands image.format image.coding image.type colour 0 0; bg_image = mk_background bg_colour.expr; shadow_image = mk_background sd_colour.expr; bg = blend mask'' shadow_image bg_image; // make a full size mask fg_mask = embed 0 (image.rect.left - final_rect.left) (image.rect.top - final_rect.top) final_rect.width final_rect.height mask; // wrap up the input image ... put the shadow colour // around it, so if we are outputting a separate // alpha the shadow colour will be set correctly fg = insert (image.rect.left - final_rect.left) (image.rect.top - final_rect.top) image.value shadow_image; final // make a separate alpha = fg ++ mask'', alpha // paste image over shadow = if fg_mask then fg else bg; } } } } Filter_paint_text_item = class Menuaction "_Paint Text" "paint text into an image" { action x = paint_position, is_Group x = paint_area { paint_area = class _result { _check_args = [ [x, "x", check_Image] ]; _vislevel = 3; text = String "Text to paint" "Hello world!"; font = Fontname "Use font" Workspaces.Preferences.PAINTBOX_FONT; align = Option "Alignment" ["Left", "Centre", "Right"] 0; dpi = Expression "DPI" 300; colour = Expression "Text colour" 255; place = Region x (x.width / 4) (x.height / 4) (x.width / 2) (x.height / 2); _result = insert_noexpand place.left place.top (blend txt' fg place) x { fg = image_new place.width place.height x.bands x.format x.coding x.type colour.expr 0 0; txt = Image (im_text text.value font.value place.width align.value (to_real dpi)); bg = im_black place.width place.height 1; txt' = insert_noexpand 0 0 txt bg; } } paint_position = class _result { _vislevel = 3; text = Pattern_images_item.Text_item.action; colour = Expression "Text colour" 255; position = Option "Position" [ _ "North-west", _ "North", _ "North-east", _ "West", _ "Centre", _ "East", _ "South-west", _ "South", _ "South-east", _ "Specify in pixels" ] 4; left = Expression "Pixels from left" 0; top = Expression "Pixels from top" 0; _result = map_unary paint x { paint image = insert_noexpand x' y' place' image { xr = image.width - text.width; yr = image.height - text.height; x = left.expr, position == 9 = [0, xr / 2, xr]?(position % 3); y = top.expr, position == 9 = [0, yr / 2, yr]?(position / 3); x' = range 0 x (image.width - 1); y' = range 0 y (image.height - 1); w' = range 1 text.width (image.width - x'); h' = range 1 text.height (image.height - y'); place = extract_area x' y' w' h' image; text' = insert_noexpand 0 0 text (im_black w' h' 1); fg = image_new w' h' image.bands image.format image.coding image.type colour.expr 0 0; place' = blend text' fg place; } } } } } Filter_draw_line_item = class Menuaction "Draw _Line" "draw a line using an arrow as a guide" { } nip2-8.7.0/share/nip2/compat/7.14/Histogram.def0000644000175000017500000001752213224651032015567 00000000000000Hist_new_item = class Menupullright "_New" "new histogram" { Hist_item = class Menuaction "Histogram" "make an identity histogram" { action = class _result { _vislevel = 3; d = Option "Depth" ["8 bit", "16 bit"] 0; _result = Plot [] ([im_identity 1, im_identity_ushort 1 65536]?d); } } Hist_new_from_matrix = Matrix_buildlut_item; Hist_from_image_item = class Menuaction "Ta_g Image As Histogram" "set image Type field to Histogram" { action x = hist_tag x; } Tone_item = class Menuaction "_Tone Curve" "make a new tone mapping curve" { action = class _result { _vislevel = 3; d = Option "Depth" ["8 bit", "16 bit"] 0; b = Scale "Black point" 0 100 0; w = Scale "White point" 0 100 100; sp = Scale "Shadow point" 0.1 0.3 0.2; mp = Scale "Mid-tone point" 0.4 0.6 0.5; hp = Scale "Highlight point" 0.7 0.9 0.8; sa = Scale "Shadow adjust" (-15) 15 0; ma = Scale "Mid-tone adjust" (-30) 30 0; ha = Scale "Highlight adjust" (-15) 15 0; _result = tone_build fmt b w sp mp hp sa ma ha { fmt = [Image_format.UCHAR, Image_format.USHORT]?d; } } } } Hist_find_item = class Menupullright "_Find" "find a histogram" { Oned_item = class Menuaction "_One Dimension" "for a n-band image, make an n-band 1D histogram" { action x = map_unary hist_find x; } Nd_item = class Menuaction "_Many Dimensions" "for a n-band image, make an n-dimensional histogram" { action x = class _result { _vislevel = 3; // default to something small-ish bins = Expression "Number of bins in each dimension" 8; _result = map_unary process x { process in = hist_find_nD bins in; } } } } Hist_map_item = class Menuaction "_Map Histogram" "map an image through a histogram" { action x y = map_binary map x y { map a b = hist_map hist im { [im, hist] = sortc (const is_hist) [a, b]; } } } Hist_eq_item = Filter_enhance_item.Hist_equal_item; #separator Hist_cum_item = class Menuaction "_Cumulativise Histogram" "form cumulative histogram" { action x = map_unary hist_cum x; } Hist_diff_item = class Menuaction "_Differentiate Histogram" "find point-to-point differences (inverse of Cumulativise)" { action x = map_unary hist_diff x; } Hist_norm_item = class Menuaction "N_ormalise Histogram" "normalise a histogram" { action x = map_unary hist_norm x; } Hist_match_item = class Menuaction "Ma_tch Histogram" "find LUT which will match first histogram to second" { action in ref = map_binary hist_match in ref; } Hist_zerox_item = class Menuaction "_Zero Crossings" "find zero crossings" { action x = class _result { _vislevel = 3; edge = Option "Direction" [ "Positive-going", "Negative-going" ] 0; _result = map_unary (zerox (if edge == 0 then -1 else 1)) x; } } #separator Hist_profile_item = class Menuaction "Find _Profile" "search from image edges for non-zero pixels" { action x = class _result { _vislevel = 3; edge = Option "Search from" [ "Top edge down", "Left edge to right", "Bottom edge up", "Right edge to left" ] 2; _result = map_unary profile x { profile image = (Plot_histogram @ hist_tag) [ profilemb 0 image.value, profilemb 1 image.value, profilemb 0 (fliptb image.value), profilemb 1 (fliplr image.value) ]?edge; // im_profile only does 1 band images :-( profilemb d = bandjoin @ map (converse im_profile d) @ bandsplit; } } } Hist_project_item = class Menuaction "Find Pro_jections" "find horizontal and vertical projections" { action x = class { _vislevel = 2; _result = map_unary project x; // extract the result ... could be a group extr n = Plot_histogram _result?n, is_list _result = Group (map (Plot_histogram @ converse subscript n) _result.value); horizontal = extr 0; vertical = extr 1; centre = (gravity horizontal, gravity vertical); } } #separator Hist_graph_item = class Menuaction "P_lot Slice" "plot a slice along a guide or arrow" { action x = class _value { _vislevel = 3; width = Scale "Width" 1 40 1; displace = Scale "Horizontal displace" (-50) 50 0; vdisplace = Scale "Vertical displace" (-50) 50 0; _value = map_unary graph x { graph arrow = hist_tag area' { // the line as a polar vector pv = polar (arrow.width, arrow.height); a = im pv; // smallest rotation that will make the line horizontal a' = 360 - a, a > 270 = 180 - a, a > 90 = -a; im' = rotate a' arrow.image; // look at the start and end of the arrow, pick the leftmost p = (arrow.left, arrow.top), arrow.left <= arrow.right = (arrow.right, arrow.bottom); // transform that point to im' space p' = rectangular (polar p + (0, a')) + (im'.xoffset, im'.yoffset); // extract that area area = extract_area (re p' + displace.value) (im p' - width.value / 2 + vdisplace.value) (re pv) width.value im'; // squish vertically to get an average area' = resize 1 (1 / width.value) Interpolate.BILINEAR area; } } } } Extract_arrow_item = class Menuaction "Extract _Arrow" "extract the area around an arrow" { action x = class _value { _vislevel = 3; width = Scale "Width" 1 40 1; displace = Scale "Horizontal displace" (-50) 50 0; vdisplace = Scale "Vertical displace" (-50) 50 0; _value = map_unary graph x { graph arrow = area { // the line as a polar vector pv = polar (arrow.width, arrow.height); a = im pv; // smallest rotation that will make the line horizontal a' = 360 - a, a > 270 = 180 - a, a > 90 = -a; im' = rotate a' arrow.image; // look at the start and end of the arrow, pick the leftmost p = (arrow.left, arrow.top), arrow.left <= arrow.right = (arrow.right, arrow.bottom); // transform that point to im' space p' = rectangular (polar p + (0, a')) + (im'.xoffset, im'.yoffset); // extract that area area = extract_area (re p' + displace.value) (im p' - width.value / 2 + vdisplace.value) (re pv) width.value im'; } } } } Hist_plot_item = class Menuaction "Plot _Object" "plot an object as a bar, point or line graph" { action x = class _result { _vislevel = 3; format = Option_enum Plot_format.names "Format" "YYYY"; style = Option_enum Plot_style.names "Style" "Line"; auto = Toggle "Auto Range" true; xmin = Expression "X range minimum" 0; xmax = Expression "X range maximum" 1; ymin = Expression "Y range minimum" 0; ymax = Expression "Y range maximum" 1; _result = Plot options (image x) { options = [$style => style.value, $format => format.value] ++ range; range = [], auto = [$xmin => xmin.expr, $xmax => xmax.expr, $ymin => ymin.expr, $ymax => ymax.expr]; image x = image (extract_arrow x), is_Arrow x = get_image x, has_image x = x2b im, b == 1 = im { im = get_image (to_image x); w = get_width im; h = get_height im; b = get_bands im; // matrix to image makes a 1-band mxn image // we need to put columns into bands x2b im = bandjoin (map extract_col [0 .. w - 1]) { extract_col x = extract_area x 0 1 h im; } } extract_arrow arrow = extract_area (re p') (im p') (re pv) 1 im' { // the line as a polar vector pv = polar (arrow.width, arrow.height); a = im pv; // smallest rotation that will make the line horizontal a' = 360 - a, a > 270 = 180 - a, a > 90 = -a; im' = rotate a' arrow.image; // look at the start and end of the arrow, pick the leftmost p = (arrow.left, arrow.top), arrow.left <= arrow.right = (arrow.right, arrow.bottom); // transform that point to im' space p' = rectangular (polar p + (0, a')) + (im'.xoffset, im'.yoffset); } } } } nip2-8.7.0/share/nip2/compat/7.14/Object.def0000644000175000017500000000222013224651032015025 00000000000000Object_duplicate_item = class Menuaction "_Duplicate" "take a copy of an object" { action x = map_unary copy x; } #separator Object_list_to_group_item = class Menuaction "_List to Group" "turn a list of objects into a group" { action x = to_group x; } Object_group_to_list_item = class Menuaction "_Group to List" "turn a group into a list of objects" { action x = to_list x; } #separator Object_break_item = class Menuaction "_Break Up Object" "break an object into a list of components" { action x = map_unary break x { break x = bandsplit x, is_Image x = map Vector x.value, is_Matrix x = x.value, is_Vector x || is_Real x = error "Breakup: not Image/Matrix/Vector/Real"; } } Object_assemble_item = class Menuaction "_Assemble Objects" "assemble a list (or group) of objects into a single object" { action x = map_unary ass x { ass x = [], x == [] = Vector x, is_real_list x = Matrix x, is_matrix x = bandjoin x, is_listof is_Image x = Vector (map get_value x), is_listof is_Real x = Matrix (map get_value x), is_listof is_Vector x = error "Assemble: not list of Image/Vector/Real/image/real"; } } nip2-8.7.0/share/nip2/compat/7.14/Makefile.in0000644000175000017500000003677313350464104015232 00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = share/nip2/compat/7.14 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(startdir)" DATA = $(start_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BISON = @BISON@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DLLWRAP = @DLLWRAP@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FFTW3_CFLAGS = @FFTW3_CFLAGS@ FFTW3_LIBS = @FFTW3_LIBS@ FGREP = @FGREP@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_LIBS = @GSL_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ IP_CFLAGS = @IP_CFLAGS@ IP_LIBS = @IP_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBGOFFICE_CFLAGS = @LIBGOFFICE_CFLAGS@ LIBGOFFICE_LIBS = @LIBGOFFICE_LIBS@ LIBGSF_CFLAGS = @LIBGSF_CFLAGS@ LIBGSF_LIBS = @LIBGSF_LIBS@ LIBGVC_CFLAGS = @LIBGVC_CFLAGS@ LIBGVC_LIBS = @LIBGVC_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ 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@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ REQUIRED_PACKAGES_CFLAGS = @REQUIRED_PACKAGES_CFLAGS@ REQUIRED_PACKAGES_LIBS = @REQUIRED_PACKAGES_LIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOP_SRCDIR = @TOP_SRCDIR@ UPDATE_DESKTOP_DATABASE = @UPDATE_DESKTOP_DATABASE@ UPDATE_MIME_DATABASE = @UPDATE_MIME_DATABASE@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XDG_OPEN = @XDG_OPEN@ XGETTEXT = @XGETTEXT@ 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@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ startdir = $(pkgdatadir)/compat/7.14 start_DATA = \ Math.def \ Image.def \ Colour.def \ Tasks.def \ Object.def \ Filter.def \ Matrix.def \ Widgets.def \ Histogram.def \ Preferences.ws \ _joe_extra.def \ _joe_utilities.def \ _convert.def \ _generate.def \ _list.def \ _predicate.def \ _stdenv.def \ _Object.def \ _types.def EXTRA_DIST = $(start_DATA) all: all-am .SUFFIXES: $(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) --foreign share/nip2/compat/7.14/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign share/nip2/compat/7.14/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): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-startDATA: $(start_DATA) @$(NORMAL_INSTALL) @list='$(start_DATA)'; test -n "$(startdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(startdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(startdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(startdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(startdir)" || exit $$?; \ done uninstall-startDATA: @$(NORMAL_UNINSTALL) @list='$(start_DATA)'; test -n "$(startdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(startdir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: 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 check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(startdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-startDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-startDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-startDATA install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags-am uninstall uninstall-am uninstall-startDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: nip2-8.7.0/share/nip2/compat/7.14/Matrix.def0000644000175000017500000002066313224651032015076 00000000000000 Matrix_build_item = class Menupullright "_New" "make a new matrix of some sort" { Plain_item = class Menuaction "_Plain" "make a new plain matrix widget" { action = Matrix (identity_matrix 3); } Convolution_item = class Menuaction "_Convolution" "make a new convolution matrix widget" { action = Matrix_con 1 0 [[0, 0, 0], [0, 1, 0], [0, 0, 0]]; } Recombination_item = class Menuaction "_Recombination" "make a new recombination matrix widget" { action = Matrix_rec (identity_matrix 3); } Morphology_item = class Menuaction "_Morphology" "make a new morphology matrix widget" { action = Matrix_mor [[0, 0, 0], [0, 255, 0], [0, 0, 0]]; } sep1 = Menuseparator; Matrix_gaussian_item = class Menuaction "_Gaussian" "make a gaussian matrix" { action = class _result { _vislevel = 3; s = Scale "Sigma" 0.001 10 1; ma = Scale "Minimum amplitude" 0 1 0.2; integer = Toggle "Integer" false; _result = fn s.value ma.value { fn = im_gauss_imask, integer = im_gauss_dmask; } } } Matrix_laplacian_item = class Menuaction "_Laplacian" "make the Laplacian of a Gaussian matrix" { action = class _result { _vislevel = 3; s = Scale "Sigma" 0.001 10 1.5; ma = Scale "Minimum amplitude" 0 1 0.1; integer = Toggle "Integer" false; _result = fn s.value ma.value { fn = im_log_imask, integer = im_log_dmask; } } } } Matrix_to_matrix_item = class Menuaction "Con_vert to Matrix" "convert anything to a matrix" { action x = to_matrix x; } #separator Matrix_extract_item = class Menupullright "_Extract" "extract rows or columns from a matrix" { Rows_item = class Menuaction "_Rows" "extract rows" { action x = class _result { _vislevel = 3; first = Expression "Extract from row" 0; number = Expression "Extract this many rows" 1; _result = map_unary process x { process x = extract_area 0 first (get_width x) number x; } } } Columns_item = class Menuaction "_Columns" "extract columns" { action x = class _result { _vislevel = 3; first = Expression "Extract from column" 0; number = Expression "Extract this many columns" 1; _result = map_unary process x { process mat = extract_area first 0 number (get_height x) x; } } } Area_item = class Menuaction "_Area" "extract area" { action x = class _result { _vislevel = 3; left = Expression "First column" 0; top = Expression "First row" 0; width = Expression "Number of columns" 1; height = Expression "Number of rows" 1; _result = map_unary process x { process mat = extract_area left top width height x; } } } Diagonal_item = class Menuaction "_Diagonal" "extract diagonal" { action x = class _result { _vislevel = 3; which = Option "Extract" [ "Leading Diagonal", "Trailing Diagonal" ] 0; _result = map_unary process x { process mat = mat.Matrix_base (map2 extr [0..] mat.value), which == 0 = mat.Matrix_base (map2 extr [mat.width - 1, mat.width - 2 .. 0] mat.value); extr n l = [l?n]; } } } } Matrix_insert_item = class Menupullright "_Insert" "insert rows or columns into a matrix" { // make a new 8-bit uchar image of wxh with pixels set to p // use to generate new cells newim w h p = image_new w h 1 Image_format.UCHAR Image_coding.NOCODING Image_type.B_W p 0 0; Rows_item = class Menuaction "_Rows" "insert rows" { action x = class _result { _vislevel = 3; first = Expression "Insert at row" 0; number = Expression "Insert this many rows" 1; item = Expression "Set new cells to" 0; _result = map_unary process x { process x = foldl1 (converse join_tb) (concat [top, new, bottom]) { top = [extract_area 0 0 w f x], f > 0 = []; new = [(if is_Matrix x then to_matrix else id) (newim w number item.expr)]; bottom = [extract_area 0 f w (h - f) x], f < h = []; f = to_real first; w = get_width x; h = get_height x; } } } } Columns_item = class Menuaction "_Columns" "insert columns" { action x = class _result { _vislevel = 3; first = Expression "Insert at column" 0; number = Expression "Insert this many columns" 1; item = Expression "Set new cells to" 0; _result = map_unary process x { process x = foldl1 (converse join_lr) (concat [left, new, right]) { left = [extract_area 0 0 f h x], f > 0 = []; new = [(if is_Matrix x then to_matrix else id) (newim number h item.expr)]; right = [extract_area f 0 (w - f) h x], f < w = []; f = to_real first; w = get_width x; h = get_height x; } } } } } Matrix_delete_item = class Menupullright "_Delete" "delete rows or columns from a matrix" { // remove number of items, starting at first delete first number l = take (to_real first) l ++ drop (to_real first + to_real number) l; Rows_item = class Menuaction "_Rows" "delete rows" { action x = class _result { _vislevel = 3; first = Expression "Delete from row" 0; number = Expression "Delete this many rows" 1; _result = map_unary process x { process x = foldl1 (converse join_tb) (concat [top, bottom]) { top = [extract_area 0 0 w f x], f > 0 = []; bottom = [extract_area 0 b w (h - b) x], b < h = []; f = to_real first; n = to_real number; b = f + n; w = get_width x; h = get_height x; } } } } Columns_item = class Menuaction "_Columns" "delete columns" { action x = class _result { _vislevel = 3; first = Expression "Delete from column" 0; number = Expression "Delete this many columns" 1; _result = map_unary process x { process x = foldl1 (converse join_lr) (concat [left, right]) { left = [extract_area 0 0 f h x], f > 0 = []; right = [extract_area r 0 (w - r) h x], r < w = []; f = to_real first; n = to_real number; r = f + n; w = get_width x; h = get_height x; } } } } } Matrix_join = class Menupullright "_Join" "join two matricies" { Left_right_item = class Menuaction "_Left to Right" "join two matricies left-right" { action a b = map_binary join_lr a b; } Top_bottom_item = class Menuaction "_Top to Bottom" "joiin two matricies top-bottom" { action a b = map_binary join_tb a b; } } Matrix_rotate_item = class Menupullright "_Rotate" "clockwise rotation by fixed angles" { rot90 = Image_transform_item.Rotate_item.Fixed_item.Rot90_item; rot180 = Image_transform_item.Rotate_item.Fixed_item.Rot180_item; rot270 = Image_transform_item.Rotate_item.Fixed_item.Rot270_item; Matrix_rot45_item = class Menuaction "_45 Degrees" "45 degree rotate (square, odd-length-sides only)" { action x = map_unary rot45 x; } } Matrix_flip_item = Image_transform_item.Flip_item; #separator Matrix_invert_item = class Menuaction "In_vert" "calculate inverse matrix" { action x = map_unary (converse power (-1)) x; } Matrix_transpose_item = class Menuaction "_Transpose" "swap rows and columns" { action x = map_unary transpose x; } #separator Matrix_plot_scatter_item = class Menuaction "_Plot Scatter" "plot a scatter graph of a matrix of [x,y1,y2,..] coordinates" { action x = class _result { _check_args = [ [x, "x", check_Matrix] ]; _vislevel = 3; auto = Toggle "Auto Range" true; xmin = Expression "X range minimum" 0; xmax = Expression "X range maximum" 1; ymin = Expression "Y range minimum" 0; ymax = Expression "Y range maximum" 1; _result = Plot options ((x2b @ get_image @ to_image) x) { options = [$style => Plot_style.POINT, $format => Plot_format.XYYY] ++ range; range = [], auto = [$xmin => xmin.expr, $xmax => xmax.expr, $ymin => ymin.expr, $ymax => ymax.expr]; // matrix to image makes a 1-band mxn image // we need to put columns into bands x2b im = bandjoin (map extract_col [0 .. w - 1]) { w = get_width im; h = get_height im; b = get_bands im; extract_col x = extract_area x 0 1 h im; } } } } Matrix_plot_item = Hist_plot_item; Matrix_buildlut_item = class Menuaction "_Build LUT From Scatter" "make a lookup table from a matrix of [x,y1,y2..] coordinates" { action x = class _result { _check_args = [ [x, "x", check_Matrix] ]; _result = buildlut x; } } nip2-8.7.0/share/nip2/compat/7.14/_convert.def0000644000175000017500000004320213224651032015443 00000000000000 /* Try to make a Matrix ... works for Vector/Image/Real, plus image/real */ to_matrix x = to_matrix x.expr, is_Expression x = x, is_Matrix x = oo_unary_function to_matrix_op x, is_class x = tom x { to_matrix_op = Operator "to_matrix" tom Operator_type.COMPOUND false; tom x = Matrix (itom x), is_image x = Matrix [[x]], is_real x = Matrix [x], is_real_list x = Matrix x, is_matrix x = error (_ "bad arguments to " ++ "to_matrix"); itom i = (im_vips2mask ((double) i)).value, is_image i = error (_ "not image"); } /* Try to make an Image ... works for Vector/Matrix/Real, plus image/real * Special case for Colour ... pull out the colour_space and set Type in the * image. */ to_image x = to_image x.expr, is_Expression x = x, is_Image x = Image (image_set_type (Image_type.colour_spaces.lookup 0 1 x.colour_space) (mtoi [x.value])), is_Colour x = oo_unary_function to_image_op x, is_class x = toi x { to_image_op = Operator "to_image" toi Operator_type.COMPOUND false; toi x = Image x, is_image x = Image (mtoi [[x]]), is_real x = Image (mtoi [x]), is_real_list x = Image (mtoi x), is_matrix x = error (_ "bad arguments to " ++ "to_image"); // [[real]] -> image mtoi m = im_mask2vips (Matrix m), width != 3 = joinup (im_mask2vips (Matrix m)) { width = len m?0; height = len m; joinup i = b1 ++ b2 ++ b3 { b1 = extract_area 0 0 1 height i; b2 = extract_area 1 0 1 height i; b3 = extract_area 2 0 1 height i; } } } /* Try to make a Colour. */ to_colour x = to_colour x.expr, is_Expression x = x, is_Colour x = to_colour (extract_area x.left x.top 1 1 x.image), is_Mark x = oo_unary_function to_colour_op x, is_class x = toc x { to_colour_op = Operator "to_colour" toc Operator_type.COMPOUND false; toc x = Colour (colour_space (get_type x)) (map mean (bandsplit (get_image x))), has_image x && has_type x = Colour "sRGB" [x, x, x], is_real x // since Colour can't do mono = Colour "sRGB" x, is_real_list x && is_list_len 3 x = map toc x, is_matrix x = error (_ "bad arguments to " ++ "to_colour"); colour_space type = table.get_name type, table.has_name type = error (_ "unable to make Colour from " ++ table.get_name type ++ _ " image") { table = Image_type.colour_spaces; } } /* Try to make a real. (not a Real!) */ to_real x = to_real x.expr, is_Expression x = oo_unary_function to_real_op x, is_class x = tor x { to_real_op = Operator "to_real" tor Operator_type.COMPOUND false; tor x = x, is_real x = abs x, is_complex x = 1, is_bool x && x = 0, is_bool x && !x = error (_ "bad arguments to " ++ "to_real"); } /* Try to make a list ... ungroup, basically. We remove the innermost layer of * Groups. */ to_list x = x.value, is_Group x && !contains_Group x.value = Group (map to_list x.value), is_Group x = x; /* Try to make a group. The innermost list objects become Group()'d. */ to_group x = Group x, is_list x && !contains_Group x = Group (map to_group x.value), is_Group x = x; /* Parse a positive integer. */ parse_pint l = foldl acc 0 l { acc sofar ch = sofar * 10 + parse_c ch; /* Turn a char digit to a number. */ parse_c ch = error (_ "not a digit"), !is_digit ch = (int) ch - (int) '0'; } /* Parse an integer, with an optional sign character. */ parse_int l = error (_ "badly formed number"), !is_list_len 2 parts = sign * n { parts = splitpl [member "+-", is_digit] l; n = parse_pint parts?1; sign = 1, parts?0 == [] || parts?0 == "+" = -1; } /* Parse a float. * [+-]?[0-9]*([.][0-9]*)?(e[0-9]+)? */ parse_float l = err, !is_list_len 4 parts = (ipart + fpart) * 10 ** exp { err = error (_ "badly formed number"); parts = splitpl [ member "+-0123456789", member ".0123456789", member "eE", member "+-0123456789" ] l; ipart = parse_int parts?0; fpart = 0, parts?1 == []; = err, parts?1?0 != '.' = parse_pint (tl parts?1) / 10 ** (len parts?1 - 1); exp = 0, parts?2 == [] && parts?3 == [] = err, parts?2 == [] = parse_int parts?3; } /* Parse a time in "hh:mm:ss" into seconds. We could do this in one line :) = (sum @ map2 multiply (iterate (multiply 60) 1) @ reverse @ map parse_pint @ map (subscript (splitpl [is_digit, equal ':', is_digit, equal ':', is_digit] l))) [0,2,4]; but it's totally unreadable. */ parse_time l = error (_ "badly formed time"), !is_list_len 5 parts = s + 60 * m + 60 * 60 * h { parts = splitpl [is_digit, equal ':', is_digit, equal ':', is_digit] l; h = parse_int parts?0; m = parse_int parts?2; s = parse_int parts?4; } /* matrix to convert D65 XYZ to D50 XYZ ... direct conversion, found by * measuring a macbeth chart in D50 and D65 and doing a LMS to get a matrix */ D652D50_direct = Matrix [[ 1.13529, -0.0604663, -0.0606321 ], [ 0.0975399, 0.935024, -0.0256156 ], [ -0.0336428, 0.0414702, 0.994135 ]]; D502D65_direct = D652D50_direct ** -1; /* Convert normalised XYZ to bradford RGB. */ XYZ2RGBbrad = Matrix [[0.8951, 0.2664, -0.1614], [-0.7502, 1.7135, 0.0367], [0.0389, -0.0685, 1.0296]]; /* Convert bradford RGB to normalised XYZ. */ RGBbrad2XYZ = XYZ2RGBbrad ** -1; D93_whitepoint = Vector [89.7400, 100, 130.7700]; D75_whitepoint = Vector [94.9682, 100, 122.5710]; D65_whitepoint = Vector [95.0470, 100, 108.8827]; D55_whitepoint = Vector [95.6831, 100, 92.0871]; D50_whitepoint = Vector [96.4250, 100, 82.4680]; A_whitepoint = Vector [109.8503, 100, 35.5849]; // 2856K B_whitepoint = Vector [99.0720, 100, 85.2230]; // 4874K C_whitepoint = Vector [98.0700, 100, 118.2300]; // 6774K E_whitepoint = Vector [100, 100, 100]; // ill. free D3250_whitepoint = Vector [105.6590, 100, 45.8501]; Whitepoints = Enum [ $D93 => D93_whitepoint, $D75 => D75_whitepoint, $D65 => D65_whitepoint, $D55 => D55_whitepoint, $D50 => D50_whitepoint, $A => A_whitepoint, $B => B_whitepoint, $C => C_whitepoint, $E => E_whitepoint, $D3250 => D3250_whitepoint ]; /* Convert D50 XYZ to D65 using the bradford chromatic adaptation approx. */ im_D502D65 xyz = xyz''' { xyz' = xyz / D50_whitepoint; rgb = recomb XYZ2RGBbrad xyz'; // move white in bradford RGB rgb' = rgb / Vector [0.94, 1.02, 1.33]; xyz'' = recomb RGBbrad2XYZ rgb'; // back to D65 xyz''' = xyz'' * D65_whitepoint; } /* Convert D65 XYZ to D50 using the bradford approx. */ im_D652D50 xyz = xyz''' { xyz' = xyz / D65_whitepoint; rgb = recomb XYZ2RGBbrad xyz'; // move white in bradford RGB rgb' = rgb * Vector [0.94, 1.02, 1.33]; xyz'' = recomb RGBbrad2XYZ rgb'; xyz''' = xyz'' * D50_whitepoint; } /* Convert D50 XYZ to Lab. */ im_D50XYZ2Lab xyz = im_XYZ2Lab_temp xyz D50_whitepoint.value?0 D50_whitepoint.value?1 D50_whitepoint.value?2; im_D50Lab2XYZ lab = im_Lab2XYZ_temp lab D50_whitepoint.value?0 D50_whitepoint.value?1 D50_whitepoint.value?2; /* ... and mono conversions */ im_sRGB2mono in = (image_set_type Image_type.B_W @ clip2fmt (get_header "BandFmt" in) @ recomb (Matrix [[.3, .6, .1]])) in; im_mono2sRGB in = image_set_type Image_type.sRGB (in ++ in ++ in); im_sRGB2Lab = im_XYZ2Lab @ im_sRGB2XYZ; im_Lab2sRGB = im_XYZ2sRGB @ im_Lab2XYZ; // from the 16 bit RGB and GREY formats im_1628 x = im_clip (x >> 8); im_162f x = x / 256; im_8216 x = (im_clip2us x) << 8; im_f216 x = im_clip2us (x * 256); im_RGB162GREY16 in = (image_set_type Image_type.GREY16 @ clip2fmt (get_header "BandFmt" in) @ recomb (Matrix [[.3, .6, .1]])) in; im_GREY162RGB16 in = image_set_type Image_type.RGB16 (in ++ in ++ in); /* apply a func to an image ... make it 1 or 3 bands, and reapply other bands * on the way out. Except if it's LABPACK. */ colour_apply fn x = fn x, b == 1 || b == 3 || c == Image_coding.LABPACK = x'' { b = get_bands x; c = get_coding x; first = extract_bands 0 3 x, b > 3 = extract_bands 0 1 x; tail = extract_bands 3 (b - 3) x, b > 3 = extract_bands 1 (b - 1) x; x' = fn first; x'' = x' ++ clip2fmt (get_format x') tail; } /* Any 1-ary colour op, applied to Vector/Image/Matrix or image */ colour_unary fn x = oo_unary_function colour_op x, is_class x = colour_apply fn x, is_image x = colour_apply fn [x], is_real x = error (_ "bad arguments to " ++ "colour_unary") { // COMPOUND_REWRAP ... signal to the colour class to go to image and // back colour_op = Operator "colour_unary" colour_object Operator_type.COMPOUND_REWRAP false; colour_object x = colour_real_list x, is_real_list x = map colour_real_list x, is_matrix x = colour_apply fn x, is_image x = error (_ "bad arguments to " ++ "colour_unary"); colour_real_list l = (to_matrix (fn (float) (to_image (Vector l)).value)).value?0; } /* Any symmetric 2-ary colour op, applied to Vector/Image/Matrix or image ... * name is op name for error messages etc. */ colour_binary name fn x y = oo_binary_function colour_op x y, is_class x = oo_binary'_function colour_op x y, is_class y = fn x y, is_image x && is_image y = error (_ "bad arguments to " ++ name) { colour_op = Operator name colour_object Operator_type.COMPOUND_REWRAP true; colour_object x y = fn x y, is_image x && is_image y = colour_real_list fn x y, is_real_list x && is_real_list y = map (colour_real_list fn x) y, is_real_list x && is_matrix y = map (colour_real_list (converse fn) y) x, is_matrix x && is_real_list y = map2 (colour_real_list fn) x y, is_matrix x && is_matrix y = error (_ "bad arguments to " ++ name); colour_real_list fn l1 l2 = (to_matrix (fn i1 i2)).value?0 { i1 = (float) (to_image (Vector l1)).value; i2 = (float) (to_image (Vector l2)).value; } } _colour_conversion_table = [ /* Lines are [space-from, space-to, conversion function]. Could do * this as a big array, but table lookup feels safer. */ [B_W, B_W, image_set_type B_W], [B_W, XYZ, im_sRGB2XYZ @ im_mono2sRGB @ im_clip], [B_W, YXY, im_XYZ2Yxy @ im_sRGB2XYZ @ im_mono2sRGB @ im_clip], [B_W, LAB, im_sRGB2Lab @ im_mono2sRGB @ im_clip], [B_W, LCH, im_Lab2LCh @ im_sRGB2Lab @ im_mono2sRGB @ im_clip], [B_W, UCS, im_XYZ2UCS @ im_sRGB2XYZ @ im_mono2sRGB @ im_clip], [B_W, RGB, im_XYZ2disp @ im_sRGB2XYZ @ im_mono2sRGB @ im_clip], [B_W, sRGB, im_mono2sRGB @ im_clip], [B_W, RGB16, im_8216 @ im_mono2sRGB], [B_W, GREY16, im_8216], [B_W, LABQ, im_Lab2LabQ @ im_sRGB2Lab @ im_mono2sRGB @ im_clip], [B_W, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_sRGB2Lab @ im_mono2sRGB @ im_clip], [XYZ, B_W, im_sRGB2mono @ im_XYZ2sRGB @ im_clip2f], [XYZ, XYZ, image_set_type XYZ], [XYZ, YXY, im_XYZ2Yxy @ im_clip2f], [XYZ, LAB, im_XYZ2Lab @ im_clip2f], [XYZ, LCH, im_Lab2LCh @ im_XYZ2Lab], [XYZ, UCS, im_XYZ2UCS @ im_clip2f], [XYZ, RGB, im_XYZ2disp @ im_clip2f], [XYZ, sRGB, im_XYZ2sRGB @ im_clip2f], [XYZ, LABQ, im_Lab2LabQ @ im_XYZ2Lab @ im_clip2f], [XYZ, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_XYZ2Lab @ im_clip2f], [YXY, B_W, im_sRGB2mono @ im_XYZ2sRGB @ im_Yxy2XYZ @ im_clip2f], [YXY, XYZ, im_Yxy2XYZ @ im_clip2f], [YXY, YXY, image_set_type YXY], [YXY, LAB, im_XYZ2Lab @ im_Yxy2XYZ @ im_clip2f], [YXY, LCH, im_Lab2LCh @ im_XYZ2Lab @ im_Yxy2XYZ @ im_clip2f], [YXY, UCS, im_XYZ2UCS @ im_Yxy2XYZ @ im_clip2f], [YXY, RGB, im_XYZ2disp @ im_Yxy2XYZ @ im_clip2f], [YXY, sRGB, im_XYZ2sRGB @ im_Yxy2XYZ @ im_clip2f], [YXY, LABQ, im_Lab2LabQ @ im_XYZ2Lab @ im_Yxy2XYZ @ im_clip2f], [YXY, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_XYZ2Lab @ im_Yxy2XYZ @ im_clip2f], [LAB, B_W, im_sRGB2mono @ im_Lab2sRGB @ im_Lab2XYZ @ im_clip2f], [LAB, XYZ, im_Lab2XYZ @ im_clip2f], [LAB, YXY, im_XYZ2Yxy @ im_Lab2XYZ @ im_clip2f], [LAB, LAB, image_set_type LAB @ im_clip2f], [LAB, LCH, im_Lab2LCh @ im_clip2f], [LAB, UCS, im_Lab2UCS @ im_clip2f], [LAB, RGB, im_Lab2disp @ im_clip2f], [LAB, sRGB, im_Lab2sRGB @ im_clip2f], [LAB, LABQ, im_Lab2LabQ @ im_clip2f], [LAB, LABS, im_Lab2LabS @ im_clip2f], [LCH, B_W, im_sRGB2mono @ im_Lab2sRGB @ im_LCh2Lab @ im_clip2f], [LCH, XYZ, im_Lab2XYZ @ im_LCh2Lab @ im_clip2f], [LCH, YXY, im_XYZ2Yxy @ im_Lab2sRGB @ im_LCh2Lab @ im_clip2f], [LCH, LAB, im_LCh2Lab @ im_clip2f], [LCH, LCH, image_set_type LCH], [LCH, UCS, im_LCh2UCS @ im_clip2f], [LCH, RGB, im_Lab2disp @ im_LCh2Lab @ im_clip2f], [LCH, sRGB, im_Lab2sRGB @ im_LCh2Lab @ im_clip2f], [LCH, LABQ, im_Lab2LabQ @ im_LCh2Lab @ im_clip2f], [LCH, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_LCh2Lab @ im_clip2f], [UCS, B_W, im_sRGB2mono @ im_XYZ2sRGB @ im_UCS2XYZ @ im_clip2f], [UCS, XYZ, im_UCS2XYZ @ im_clip2f], [UCS, YXY, im_XYZ2Yxy @ im_Lab2XYZ @ im_UCS2Lab @ im_clip2f], [UCS, LAB, im_UCS2Lab @ im_clip2f], [UCS, LCH, im_UCS2LCh @ im_clip2f], [UCS, UCS, image_set_type UCS], [UCS, RGB, im_Lab2disp @ im_UCS2Lab @ im_clip2f], [UCS, sRGB, im_Lab2sRGB @ im_UCS2Lab @ im_clip2f], [UCS, LABQ, im_Lab2LabQ @ im_UCS2Lab @ im_clip2f], [UCS, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_UCS2Lab @ im_clip2f], [RGB, B_W, im_sRGB2mono @ im_XYZ2sRGB @ im_disp2XYZ @ im_clip], [RGB, XYZ, im_disp2XYZ @ im_clip], [RGB, YXY, im_XYZ2Yxy @ im_disp2XYZ @ im_clip], [RGB, LAB, im_disp2Lab @ im_clip], [RGB, LCH, im_Lab2LCh @ im_disp2Lab @ im_clip], [RGB, UCS, im_Lab2UCS @ im_disp2Lab @ im_clip], [RGB, RGB, image_set_type RGB], [RGB, sRGB, im_XYZ2sRGB @ im_disp2XYZ @ im_clip], [RGB, RGB16, im_8216], [RGB, GREY16, im_8216 @ im_sRGB2mono], [RGB, LABQ, im_Lab2LabQ @ im_disp2Lab @ im_clip], [RGB, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_disp2Lab @ im_clip], [sRGB, B_W, im_sRGB2mono], [sRGB, XYZ, im_sRGB2XYZ @ im_clip], [sRGB, YXY, im_XYZ2Yxy @ im_sRGB2XYZ @ im_clip], [sRGB, LAB, im_sRGB2Lab @ im_clip], [sRGB, LCH, im_Lab2LCh @ im_sRGB2Lab @ im_clip], [sRGB, UCS, im_XYZ2UCS @ im_sRGB2XYZ @ im_clip], [sRGB, RGB, im_XYZ2disp @ im_sRGB2XYZ @ im_clip], [sRGB, sRGB, image_set_type sRGB], [sRGB, RGB16, im_8216], [sRGB, GREY16, im_8216 @ im_sRGB2mono], [sRGB, LABQ, im_Lab2LabQ @ im_sRGB2Lab @ im_clip], [sRGB, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_sRGB2Lab @ im_clip], [RGB16, B_W, im_1628 @ im_sRGB2mono], [RGB16, RGB, image_set_type RGB @ im_1628], [RGB16, sRGB, image_set_type sRGB @ im_1628], [RGB16, RGB16, image_set_type RGB16], [RGB16, GREY16, im_RGB162GREY16], [GREY16, B_W, image_set_type B_W @ im_1628], [GREY16, RGB, im_mono2sRGB @ im_1628], [GREY16, sRGB, im_mono2sRGB @ im_1628], [GREY16, RGB16, im_GREY162RGB16], [GREY16, GREY16, image_set_type GREY16], [LABQ, B_W, im_sRGB2mono @ im_Lab2sRGB @ im_LabQ2Lab], [LABQ, XYZ, im_Lab2XYZ @ im_LabQ2Lab], [LABQ, YXY, im_XYZ2Yxy @ im_Lab2XYZ @ im_LabQ2Lab], [LABQ, LAB, im_LabQ2Lab], [LABQ, LCH, im_Lab2LCh @ im_LabQ2Lab], [LABQ, UCS, im_Lab2UCS @ im_LabQ2Lab], [LABQ, RGB, im_LabQ2disp], [LABQ, sRGB, im_Lab2sRGB @ im_LabQ2Lab], [LABQ, LABQ, image_set_type LABQ], [LABQ, LABS, im_LabQ2LabS], [LABS, B_W, im_sRGB2mono @ im_Lab2sRGB @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, XYZ, im_Lab2XYZ @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, YXY, im_XYZ2Yxy @ im_Lab2XYZ @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, LAB, im_LabS2Lab], [LABS, LCH, im_Lab2LCh @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, UCS, im_Lab2UCS @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, RGB, im_LabQ2disp @ im_LabS2LabQ @ im_clip2s], [LABS, sRGB, im_XYZ2sRGB @ im_Lab2XYZ @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, LABQ, im_LabS2LabQ @ im_clip2s], [LABS, LABS, image_set_type LABS] ] { /* From Image_type ... repeat here for brevity. Use same ordering as * in Colour menu for consistency. */ B_W = 1; XYZ = 12; YXY = 23; LAB = 13; LCH = 19; UCS = 18; RGB = 17; sRGB = 22; RGB16 = 25; GREY16 = 26; LABQ = 16; LABS = 21; } /* Transform between two colour spaces. */ colour_transform from to in = colour_unary _colour_conversion_table?i?2 in, i >= 0 = error (_ "unable to convert " ++ Image_type.type_names.get_name from ++ _ " to " ++ Image_type.type_names.get_name to) { match x = x?0 == from && x?1 == to; i = index match _colour_conversion_table; } /* Transform to a colour space, assuming the type field in the input is * correct */ colour_transform_to to in = colour_transform (get_type in) to in; /* Given a list of things, try to make them all the same size. Don't change * the format. Don't touch non-image things. */ size_alike l = map enlarge l { max_width = foldr (test_prop has_width get_width) 0 l; max_height = foldr (test_prop has_height get_height) 0 l; test_prop has get x best = best, !has x = max_pair best (get x); enlarge x = embed 0 0 0 max_width max_height x, has_width x = x; } /* Given a list of things, look for 1 band objects and bump them to to n - * band objects, where n is the maximum number of bands. Don't change the * format. Don't touch non-image things. */ bands_alike l = map upband l { max_bands = foldr (test_prop has_bands get_bands) 0 l; test_prop has get x best = best, !has x = max_pair best (get x); upband x = bandjoin (replicate max_bands x), has_bands x && get_bands x == 1 = x; } /* Given a list of things, try to match the formats. Don't touch non-image * objects. */ formats_alike l = map upformat l { max_format = foldr (test_prop has_format get_format) Image_format.UCHAR l; test_prop has get x best = best, !has x = max_pair best (get x); upformat x = clip2fmt max_format x, has_format x = x; } /* String for path separator on this platform. */ path_separator = expand "$SEP"; /* Form a relative pathname. * path_relative ["home", "john"] == "home/john" * path_relative [] == "" */ path_relative l = foldl1 fn l { fn a b = a ++ path_separator ++ b; } /* Form an absolute pathname. * path_absolute ["home", "john"] == "/home/john" * path_absolute [] == "/" * If the first component looks like 'A:', don't add an initial separator. */ path_absolute l = path_relative l, len l?0 == 2 && is_letter l?0?0 && l?0?1 == ':' = path_separator ++ path_relative l; /* Parse a pathname. * path_parse "/home/john" == ["home", "john"] * path_parse "home/john" == ["home", "john"] */ path_parse str = split (equal path_separator?0) str; nip2-8.7.0/share/nip2/compat/7.14/_joe_utilities.def0000644000175000017500000004705113224651032016641 00000000000000/* ******Functions included in start/_NG_utilities.def:****** * * so_balance ref_meanmax im1 im2 mask blur gauss * * nonzero_mean im = no_out * * so_meanmax im = result * * so_calculate ref_meanmax im mask = result * * simple_frame frame im_w im_h ov cs ms bf option = result * * corner_frame frame im_w im_h ov cs ms bf = result * * build_frame r_tl r_tr r_bl r_br r_mt r_mb r_ml r_mr im_w im_h ov bf = result * * complex_frame frame im_w im_h ov cs es ms bf option= result * * complex_edge ra rb t bl d = rc * * frame_lr_min r_l r_r target bw = result * * frame_tb_min r_t r_b target bw = result * * frame_position_image im ref os colour= result * * merge_array bw arr = result * * merge_to_scale im target blend dir = result * * select_ellipse line width = mask * * select_tetragon p1 p2 p3 p4 = mask * * select_polygon pt_list = mask * * perspective_transform to from = trans'' * * sort_pts_clockwise l = l'' * */ /* Called from: * _NG_Extra.def Clone_area_item */ so_balance ref_meanmax im1 im2 mask gauss = result { //ref_meanmax = so_meanmax im1; so_values = so_calculate ref_meanmax im2 mask; im2_cor_a = clip2fmt im2.format im2'', has_member "format" im2 = im2'' {im2'' = im2 * (so_values?0) + (so_values?1);} // Option to convert replacement image to scaled gaussian noise im2_cor = im2_cor_a, gauss == false = clip2fmt im2_cor_a.format gauss_im {gauss_im = im_gaussnoise im2_cor_a.width im2_cor_a.height ref_meanmax?0 (deviation im2_cor_a);} result = im_blend (get_image mask) (get_image im2_cor) (get_image im1); }; //////////////////////////////////////////////////////////////////////////////// /* Calculates the mean of the non zero pixels. * * Called from: * _NG_utilities so_meanmax */ nonzero_mean im = no_out { zero_im = (im == 0); zero_mean = mean zero_im; no_mean = mean im; no_out = no_mean/(1 - (zero_mean/255)); }; //////////////////////////////////////////////////////////////////////////////// /* Calculates the max and nonzero mean of an image * * Called from: * _NG_utilities so_balance * _NG_utilities so_calculate * _NG_Extra.def Clone_area_item * _NG_Extra.def Balance_item.Balance_find_item */ so_meanmax im = result { mean_of_im = nonzero_mean im; adjusted_im = im - mean_of_im; max_of_im = max adjusted_im; result = [mean_of_im, max_of_im]; }; //////////////////////////////////////////////////////////////////////////////// /* Calculates the scale and offset required to match a reference mean and max * * Called from: * _NG_utilities so_balance * _NG_Extra.def Balance_item.Balance_find_item */ so_calculate ref_meanmax im mask = result { im' = if mask then im else 0; im_values = so_meanmax im'; mean_of_ref = ref_meanmax?0; mean_of_im = im_values?0; max_of_ref = ref_meanmax?1; max_of_im = im_values?1; scale = (max_of_ref)/(max_of_im); offset = mean_of_ref - (mean_of_im * scale); result = [ scale, offset ]; }; //////////////////////////////////////////////////////////////////////////////// /* Extends or shortens the central sections of a simple frame to fit round a given image. * * Called from: * _NG_Extra.def Frame_item.Simple_frame_item */ simple_frame frame im_w im_h ov cs ms bf option = result { cs' = (1 - cs); ms' = (0.5 - (ms/2)); ms'' = (1 - cs); //Regions r_tl = Region_relative frame 0 0 cs cs; r_tr = fliplr r_tl, option == true = Region_relative frame cs' 0 cs cs; r_bl = Region_relative frame 0 cs' cs cs; r_br = fliplr r_bl, option == true = Region_relative frame cs' cs' cs cs; r_mt = Region_relative frame ms' 0 ms cs; r_mb = Region_relative frame ms' ms'' ms cs; r_ml = Region_relative frame 0 ms' cs ms; r_mr = fliplr r_ml, option == true = Region_relative frame ms'' ms' cs ms; result = build_frame r_tl r_tr r_bl r_br r_mt r_mb r_ml r_mr im_w im_h ov bf; }; //////////////////////////////////////////////////////////////////////////////// /* Copies and extends a simple frame corner to produce a complete frame to fit round a given image. * * Called from: * _NG_Extra.def Frame_item.Frame_corner_item */ corner_frame frame im_w im_h ov cs ms bf = result { cs' = (1 - cs); ms' = (0.5 - (ms/2)); //Regions r_tl = Region_relative frame 0 0 cs cs; r_tr = fliplr r_tl; r_bl = fliptb r_tl; r_br = fliplr r_bl; r_mt = Region_relative frame ms' 0 ms cs; r_mb = fliptb r_mt; r_ml = Region_relative frame 0 ms' cs ms;; r_mr = fliplr r_ml; result = build_frame r_tl r_tr r_bl r_br r_mt r_mb r_ml r_mr im_w im_h ov bf; }; //////////////////////////////////////////////////////////////////////////////// /* Completes the frame building process for simple_frame and corner_frame. * * _NG_utilities simple_frame * _NG_utilities corner_frame */ build_frame r_tl r_tr r_bl r_br r_mt r_mb r_ml r_mr im_w im_h ov bf = result { //Find pixel thickness of frames section s_width = r_ml.width - mean (im_profile (map_unary fliplr (r_ml.value)?0) 1); s_height = r_mt.height - mean (im_profile (map_unary fliptb (r_mt.value)?0) 0); w_target = im_w + (2 * (s_width - ov)); h_target = im_h + (2 * (s_height - ov)); blend = bf * r_tl.width; cw_target = w_target - (2 * r_tl.width) + (2 * blend), w_target > (2 * r_tl.width) = w_target; ch_target = h_target - (2 * r_tl.height) + (2 * blend), h_target > (2 * r_tl.height) = h_target; //Use regions to produce sections top = merge_to_scale r_mt cw_target blend 0; bottom = merge_to_scale r_mb cw_target blend 0; left = merge_to_scale r_ml ch_target blend 1; right = merge_to_scale r_mr ch_target blend 1; middle = Image (image_new cw_target ch_target left.bands left.format left.coding left.type 0 0 0); //Build sections into full frame. row_1 = frame_lr_min r_tl r_tr w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[r_tl, top, r_tr]]; row_2 = frame_lr_min left right w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[left, middle, right]]; row_3 = frame_lr_min r_bl r_br w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[r_bl, bottom, r_br]]; result = frame_tb_min row_1 row_3 h_target blend, (h_target < (r_tl.height * 2)) = merge_array blend [[row_1], [row_2], [row_3]]; }; //////////////////////////////////////////////////////////////////////////////// /* Extends or shortens the central sections of a frame, preserving any central details on each * edge, to fit round a given image. * * Called from: * _NG_Extra.def Frame_item.Complex_frame_item */ complex_frame frame im_w im_h ov cs es ms bf option= result { cs' = (1 - cs); ms' = (0.5 - (ms/2)); es' = (0.25 - (es/2)); r_tl = Region_relative frame 0 0 cs cs; r_tr = fliplr r_tl, option == true = Region_relative frame cs' 0 cs cs; r_bl = Region_relative frame 0 cs' cs cs; r_br = fliplr r_bl, option == true = Region_relative frame cs' cs' cs cs; r_mt = Region_relative frame ms' 0 ms cs; r_mb = Region_relative frame ms' cs' ms cs; r_ml = Region_relative frame 0 ms' cs ms; r_mr = fliplr r_ml, option == true = Region_relative frame cs' ms' cs ms; r_et = Region_relative frame es' 0 es cs; r_eb = Region_relative frame es' cs' es cs; r_el = Region_relative frame 0 es' cs es; r_er = fliplr r_el, option == true = Region_relative frame cs' es' cs es; //Find pixel thickness of frames section s_width = r_el.width - mean (im_profile (map_unary fliplr (r_el.value)?0) 1); s_height = r_et.height - mean (im_profile (map_unary fliptb (r_et.value)?0) 0); w_target = im_w + (2 * (s_width - ov)); h_target = im_h + (2 * (s_height - ov)); min_size = foldr1 min_pair [r_tl.width, r_tl.height, r_mt.width, r_mt.height, r_et.width, r_et.height]; blend = bf * min_size; cw_target = w_target - (2 * r_tl.width) + (2 * blend); ch_target = h_target - (2 * r_tl.height) + (2 * blend); top = complex_edge r_mt r_et cw_target blend 0; bottom = complex_edge r_mb r_eb cw_target blend 0; left = complex_edge r_ml r_el ch_target blend 1; right = complex_edge r_mr r_er ch_target blend 1; middle = Image (image_new top.width left.height left.bands left.format left.coding left.type 0 0 0); //Build regions into full frame. row_1 = frame_lr_min r_tl r_tr w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[r_tl, top, r_tr]]; row_2 = frame_lr_min left right w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[left, middle, right]]; row_3 = frame_lr_min r_bl r_br w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[r_bl, bottom, r_br]]; result = frame_tb_min row_1 row_3 h_target blend, (h_target < (r_tl.height * 2)) = merge_array blend [[row_1], [row_2], [row_3]]; }; //////////////////////////////////////////////////////////////////////////////// /* Function called by complex frame, used to produce section * * Called from: * _NG_utilities.def complex_frame */ complex_edge ra rb t bl d = rc { e1 = ceil (ra.width - t)/2, d == 0 = 0; e2 = 0, d == 0 = ceil (ra.height - t)/2; e3 = t, d == 0 = ra.width; e4 = ra.height, d == 0 = t; check = ra.width, d == 0; = ra.height; rai = get_image ra; t2 = (t - ra.width + (2 * bl))/2, d == 0 = (t - ra.height + (2 * bl))/2; rc = ra , t <= 0 = Image (im_extract_area rai e1 e2 e3 e4), t <= check = merge_array bl [[rb',ra,rb']], d == 0 = merge_array bl [[rb'],[ra],[rb']] {rb' = merge_to_scale rb t2 bl d;} } ////////////////////////////////////////////////////////////////////////////// /* Blends two images left/right to produce an image a specific width. * * _NG_utilities build_frame * _NG_utilities complex_frame */ frame_lr_min r_l r_r target bw = result { //Calculating the new widh required for each image. no = (target/2 + bw); n_w = no, (r_l.width > no) = r_l.width; //Removing excess from what will be the middle of the final image. n_l = im_extract_area r_l.value 0 0 n_w r_l.height; n_r = im_extract_area r_r.value (r_r.width - n_w) 0 n_w r_l.height; //Merge the two image together with a bw*2 pixel overlap. result = Image (im_lrmerge n_l n_r ((bw*2) - n_w) 0 bw); }; ////////////////////////////////////////////////////////////////////////////// /* Blends two images top/bottom to produce an image a specific width. * * _NG_utilities build_frame * _NG_utilities complex_frame */ frame_tb_min r_t r_b target bw = result { //Calculating the new height required for each image. no = (target/2 + bw); n_h = no, (r_t.height > no) = r_t.height; //Removing excess from what will be the middle of the final image. n_t = im_extract_area r_t.value 0 0 r_t.width n_h; n_b = im_extract_area r_b.value 0 (r_b.height - n_h) r_b.width n_h; //Merge the two image together with a 50 pixel overlap. result = Image (im_tbmerge n_t n_b 0 ((bw*2) -n_h) bw); }; ////////////////////////////////////////////////////////////////////////////// /* Resixe canvas of an image to accomodate a frame and possible mount * * Called from: * _NG_Extra.def Frame_item.Frame_corner_item * _NG_Extra.def Frame_item.Simple_frame_item * _NG_Extra.def Frame_item.Complex_frame_item */ frame_position_image im ref os colour= result { background = image_new ref.width ref.height im.bands im.format im.coding im.type colour 0 0; result = insert_noexpand xp yp im background { xp = (ref.width - im.width)/2; yp = (ref.height - im.height - os)/2; } }; ////////////////////////////////////////////////////////////////////////////// /* Merges an array of images together according to blend width bw * * Called from: * _NG_Utilites.def build_frame * _NG_Utilites.def complex_frame * _NG_Utilites.def complex_edge */ merge_array bw arr = result { merge_lr bw im1 im2 = im3 { bw' = get_header "Xsize" (get_image im1); bw'' = -(bw' - bw); im3 = im_lrmerge (get_image im1) (get_image im2) bw'' 0 bw; } merge_tb bw im1 im2 = im3 { bw' = get_header "Ysize" (get_image im1); bw'' = -(bw' - bw); im3 = im_tbmerge (get_image im1) (get_image im2) 0 bw'' bw; } im_out = (image_set_origin 0 0 @ foldl1 (merge_tb bw) @ map (foldl1 (merge_lr bw))) arr; result = Image im_out; } ////////////////////////////////////////////////////////////////////////////// /* Repeatably top/bottom add clones of im, with a defined overlap, until final height > target * * Called from: * _NG_Utilites.def build_frame * _NG_Utilites.def complex_edge */ merge_to_scale im target blend dir = result { blend' = floor blend; //allow fir lr or tb process var_a = im.width, dir == 0 = im.height; var_w = im.width, dir == 1 = target, target > blend' = blend'; var_h = im.height, dir == 0 = target, target > blend' = blend'; //total numner of copies of im requires, taking overlap into account. no_loops = ceil ((log ((target - blend')/(var_a - blend')))/(log 2)); process im no = result { pr_a = get_header "Xsize" (get_image im), dir == 0 = get_header "Ysize" (get_image im); pr_b = -(pr_a - blend' + 1); im' = im_lrmerge (get_image im) (get_image im) pr_b 0 blend', dir == 0 = im_tbmerge (get_image im) (get_image im) 0 pr_b blend'; no' = no - 1; result = im', no' < 1 = process im' no'; } im_tmp = im.value, var_a > target = process im no_loops; result = Image (im_extract_area (get_image im_tmp) 0 0 var_w var_h); } ////////////////////////////////////////////////////////////////////////////// /* Selects an elispe based on a line and a width * * Called from: * _NG_Extra.def Select_item.Elipse */ select_ellipse line width = mask { im = line.image; //Make a 2 band image whose value equals its coordinates. im_coor = Image (make_xy im.width im.height); //Adjust the values to center tham on (line.left, line.top) im_cent = im_coor - Vector [line.left,line.top]; w = line.width; h = line.height; angle = 270, w == 0 && h < 0 = 90, w == 0 && h >= 0 = 360 + atan (h/w), w > 0 && h < 0 = atan (h/w), w > 0 && h >= 0 = 180 + atan (h/w); a = ( (h ** 2) + (w ** 2) )**0.5; b = a * width; x' = ( (cos angle) * im_cent?0) + ( (sin angle) * im_cent?1); y' = ( (cos angle) * im_cent?1) - ( (sin angle) * im_cent?0); mask = ( (b**2) * (x'**2) ) + ( (a**2) * (y'**2) ) <= (a * b)**2; } ////////////////////////////////////////////////////////////////////////////// /* Selects a tetragon based on four points. * * Called from: * _NG_Extra.def Select_item.Tetragon * _NG_Extra.def Perspective_item */ select_tetragon p1 p2 p3 p4 = mask { //Put points in clockwise order starting at the top left. pt_list = sort_pts_clockwise [p1, p2, p3, p4]; pair_list = [ [ pt_list?0, pt_list?1 ], [ pt_list?1, pt_list?2 ], [ pt_list?2, pt_list?3 ], [ pt_list?3, pt_list?0 ] ]; //Make xy image the same size as p1.image; im_xy = Image (make_xy p1.image.width p1.image.height); white = Image (image_new p1.image.width p1.image.height 1 0 Image_coding.NOCODING 1 255 0 0); mask = foldl process white pair_list; /* Treat each pair of point as a vector going from p1 to p2, * then select all to right of line. This is done for each pair, * the results are all combined to select the area defined by * the four points. */ process im_in pair = im_out { x = (pair?0).left; y = (pair?0).top; x'= (pair?1).left; y'= (pair?1).top; w = x' - x; h = y' - y; m = 0, x == x' = (y-y')/(x-x'); c = 0, x == x' = ((y*x') - (y'*x))/(x' - x); mask= im_xy?1 - (im_xy?0 * m) >= c, w > 0 = im_xy?1 - (im_xy?0 * m) <= c, w < 0 = im_xy?0 <= x, w == 0 && h > 0 = im_xy?0 >= x; im_out = im_in & mask; } } ////////////////////////////////////////////////////////////////////////////// /* Selects a tetragon based on four points. * * Called from: * _NG_Extra.def Select_item.Polygon */ select_polygon pt_list = mask { group_check = is_Group pt_list; pt_l = pt_list.value, group_check = pt_list; im = (pt_l?0).image; im_xy = Image (make_xy im.width im.height); black = Image (image_new im_xy.width im_xy.height 1 0 Image_coding.NOCODING 1 0 0 0); x = im_xy?0; y = im_xy?1; pt_l' = grp_trip pt_l; mask = foldl process black pt_l'; /*Takes a group adds the first two the end and then creates a lists of *lists [[a, b, c], [b, c, d] .... [x, a, b]] */ grp_trip l = l'' { px = take 2 l; l' = join l px; start = [(take 3 l')]; rest = drop 3 l'; process a b = c { x = (last a)?1; x'= (last a)?2; x'' = [[x, x', b]]; c = join a x''; } l'' = foldl process start rest; }; process im_in triplet = im_out { p1 = triplet?0; p2 = triplet?1; p3 = triplet?2; //check for change in x direction between p1-p2 and p2 -p3 dir_1 = sign (p2.left - p1.left); dir_2 = sign (p3.left - p2.left); dir = dir_1 + dir_2; //define min x limit. min_x = p1.left, p1.left < p2.left = p2.left + 1, dir != 0 = p2.left; //define max x limit. max_x = p1.left, p1.left > p2.left = p2.left - 1, dir != 0 = p2.left; //equation of line defined by p1 and p2 m = line_m p1 p2; c = line_c p1 p2; //Every thing below the line im_test = ((y >= (m * x) + c) & (x >= min_x) & (x <= max_x)); im_out = im_in ^ im_test; } line_c p1 p2 = c {m = line_m p1 p2; c = p1.top - (m * p1.left);}; line_m p1 p2 = (p2.top - p1.top)/(p2.left - p1.left), p2.left != p1.left = 0; } ////////////////////////////////////////////////////////////////////////////// /* Selects a tetragon based on four points. * * Called from: * _NG_Extra.def Perspective_match_item * _NG_Extra.def Perspective_item */ perspective_transform to from = trans'' { /* * Tramsformation matrix is calculated on the bases of the following functions: * x' = c0x + c1y + c2xy + c3 * y' = c4x + c5y + c6xy + c7 * * The functions used in vips im_transform works based on the functions: * x = x' + b0 + b2x' + b4y' + b6x'y' * y = y' + b1 + b3x' + b5y' + b7x'y' * * and is applied in the form of the matrix: * * [[b0, b1], * [b2, b3], * [b4, b5], * [b6, b7]] * * Therefore our required calculated matrix will be * * [[ c3 , c7], * [(c0 - 1) , c4], * [ c1 , (c5 - 1)], * [ c2 , c6]] * * to = [x1, y1, x2, y2, x3, y3, x4, y4] * from = [x1', y1', x2', y2', x3', y3', x4', y4'] * trans = [[c0], [c1], [c2], [c3], [c4], [c5], [c6], [c7]] * */ to' = Matrix [[to?0, to?1, ((to?0)*(to?1)), 1, 0, 0, 0, 0], [0, 0, 0, 0, to?0, to?1, ((to?0)*(to?1)), 1], [to?2, to?3, ((to?2)*(to?3)), 1, 0, 0, 0, 0], [0, 0, 0, 0, to?2, to?3, ((to?2)*(to?3)), 1], [to?4, to?5, ((to?4)*(to?5)), 1, 0, 0, 0, 0], [0, 0, 0, 0, to?4, to?5, ((to?4)*(to?5)), 1], [to?6, to?7, ((to?6)*(to?7)), 1, 0, 0, 0, 0], [0, 0, 0, 0, to?6, to?7, ((to?6)*(to?7)), 1]]; from' = Matrix (transpose [from]); to'' = to' ** (-1); trans = to'' * from'; trans' = trans.value; trans''= Matrix [[(trans'?3)?0, (trans'?7)?0 ], [((trans'?0)?0 - 1), (trans'?4)?0 ], [(trans'?1)?0, ((trans'?5)?0 - 1)], [(trans'?2)?0, (trans'?6)?0 ]]; } ////////////////////////////////////////////////////////////////////////////// /* Sort a list of points into clockwise order. * * Called from: * _NG_utilities.def select_tetragon * _NG_Extra.def Perspective_match_item * _NG_Extra.def Perspective_item */ sort_pts_clockwise l = l'' { // sort functions: f_top a b = a.top < b.top; f_left a b = a.left < b.left; f_right a b = a.left > b.left; l' = sortc f_top l; l'_a = take 2 l'; l'_b = drop 2 l'; l''_a = sortc f_left l'_a; l''_b = sortc f_right l'_b; l'' = join l''_a l''_b; } nip2-8.7.0/share/nip2/compat/7.14/Image.def0000644000175000017500000012223213224651032014647 00000000000000Image_new_item = class Menupullright "_New" "make new things" { Image_black_item = class Menuaction "_Image" "make a new image" { format_names = [ "8-bit unsigned int - UCHAR", // 0 "8-bit signed int - CHAR", // 1 "16-bit unsigned int - USHORT", // 2 "16-bit signed int - SHORT", // 3 "32-bit unsigned int - UINT", // 4 "32-bit signed int - INT", // 5 "32-bit float - FLOAT", // 6 "64-bit complex - COMPLEX", // 7 "64-bit float - DOUBLE", // 8 "128-bit complex - DPCOMPLEX" // 9 ]; action = class Image _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; nbands = Expression "Image bands" 1; format_option = Option "Image format" format_names 0; type_option = Option_enum Image_type.type_names "Image type" "B_W"; pixel = Expression "Pixel value" 0; _result = image_new (to_real nwidth) (to_real nheight) (to_real nbands) (to_real format_option) Image_coding.NOCODING type_option.value_thing pixel.expr 0 0; } } Image_new_from_image_item = class Menuaction "_From Image" "make a new image based on image x" { action x = class Image _result { _vislevel = 3; pixel = Expression "Pixel value" 0; _result = image_new x.width x.height x.bands x.format x.coding x.type pixel.expr x.xoffset x.yoffset; } } Image_region_item = class Menupullright "_Region on Image" "make a new region on an image" { Region_item = class Menuaction "_Region" "make a region on an image" { action image = scope.Region_relative image 0.25 0.25 0.5 0.5; } Mark_item = class Menuaction "_Point" "make a point on an image" { action image = scope.Mark_relative image 0.5 0.5; } Arrow_item = class Menuaction "_Arrow" "make an arrow on an image" { action image = scope.Arrow_relative image 0.25 0.25 0.5 0.5; } HGuide_item = class Menuaction "_Horizontal Guide" "make a horizontal guide on an image" { action image = scope.HGuide image 0.5; } VGuide_item = class Menuaction "_Vertical Guide" "make a vertical guide on an image" { action image = scope.VGuide image 0.5; } sep1 = Menuseparator; Move_item = class Menuaction "From Region" "new region on image using existing region as a guide" { action a b = map_binary process a b { process a b = x.Region target x.left x.top x.width x.height, is_Region x = x.Arrow target x.left x.top x.width x.height, is_Arrow x = error "bad arguments to region-from-region" { // prefer image then region compare a b = false, !is_Image a && is_Image b = false, is_Region a && !is_Region b = true; [target, x] = sortc compare [a, b]; } } } } } Image_convert_to_image_item = class Menuaction "Con_vert to Image" "convert anything to an image" { action x = to_image x; } Image_number_format_item = class Menupullright "_Format" "convert numeric format" { U8_item = class Menuaction "_8 bit unsigned" "convert to unsigned 8 bit [0, 255]" { action x = map_unary cast_unsigned_char x; } U16_item = class Menuaction "1_6 bit unsigned" "convert to unsigned 16 bit [0, 65535]" { action x = map_unary cast_unsigned_short x; } U32_item = class Menuaction "_32 bit unsigned" "convert to unsigned 32 bit [0, 4294967295]" { action x = map_unary cast_unsigned_int x; } sep1 = Menuseparator; S8_item = class Menuaction "8 _bit signed" "convert to signed 8 bit [-128, 127]" { action x = map_unary cast_signed_char x; } S16_item = class Menuaction "16 b_it signed" "convert to signed 16 bit [-32768, 32767]" { action x = map_unary cast_signed_short x; } S32_item = class Menuaction "32 bi_t signed" "convert to signed 32 bit [-2147483648, 2147483647]" { action x = map_unary cast_signed_int x; } sep2 = Menuseparator; Float_item = class Menuaction "_Single precision float" "convert to IEEE 32 bit float" { action x = map_unary cast_float x; } Double_item = class Menuaction "_Double precision float" "convert to IEEE 64 bit float" { action x = map_unary cast_double x; } sep3 = Menuseparator; Scmplxitem = class Menuaction "Single _precision complex" "convert to 2 x IEEE 32 bit float" { action x = map_unary cast_complex x; } Dcmplx_item = class Menuaction "Double p_recision complex" "convert to 2 x IEEE 64 bit float" { action x = map_unary cast_double_complex x; } } Image_header_item = class Menupullright "_Header" "do stuff to the image header" { Image_get_item = class Menupullright "_Get" "get header fields" { // the header fields we can get fields = class { type = 0; width = 1; height = 2; format = 3; bands = 4; xres = 5; yres = 6; xoffset = 7; yoffset = 8; coding = 9; field_names = Enum [ $width => width, $height => height, $bands => bands, $format => format, $type => type, $xres => xres, $yres => yres, $xoffset => xoffset, $yoffset => yoffset, $coding => coding ]; field_option name = Option_enum field_names (_ "Field") name; field_funcs = Table [ [type, get_type], [width, get_width], [height, get_height], [format, get_format], [bands, get_bands], [xres, get_xres], [yres, get_yres], [xoffset, get_xoffset], [yoffset, get_yoffset], [coding, get_coding] ]; } get_field field_name x = class _result { _vislevel = 3; field = fields.field_option field_name; _result = map_unary (Real @ fields.field_funcs.lookup 0 1 field.value_thing) x; } Width_item = class Menuaction "_Width" "get width" { action x = get_field "width" x; } Height_item = class Menuaction "_Height" "get height" { action x = get_field "height" x; } Bands_item = class Menuaction "_Bands" "get bands" { action x = get_field "bands" x; } Format_item = class Menuaction "_Format" "get format" { action x = get_field "format" x; } Type_item = class Menuaction "_Type" "get type" { action x = get_field "type" x; } Xres_item = class Menuaction "_Xres" "get X resolution" { action x = get_field "xres" x; } Yres_item = class Menuaction "_Yres" "get Y resolution" { action x = get_field "yres" x; } Xoffset_item = class Menuaction "X_offset" "get X offset" { action x = get_field "xoffset" x; } Yoffset_item = class Menuaction "Yo_ffset" "get Y offset" { action x = get_field "yoffset" x; } Coding_item = class Menuaction "_Coding" "get coding" { action x = get_field "coding" x; } } sep1 = Menuseparator; Image_set_meta_item = class Menuaction "_Set" "set image metadata" { action x = class _result { _vislevel = 3; fname = String "Field" "field-name"; val = Expression "Value" 42; _result = map_unary process x { process image = set_header fname.value val.expr image; } } } Image_edit_header_item = class Menuaction "_Edit" "change advisory header fields of image" { type_names = Image_type.type_names; all_names = sort (map (extract 0) type_names.value); get_prop has get def x = get x, has x = def; action x = class _result { _vislevel = 3; nxres = Expression "Xres" (get_prop has_xres get_xres 1 x); nyres = Expression "Yres" (get_prop has_yres get_yres 1 x); nxoff = Expression "Xoffset" (get_prop has_xoffset get_xoffset 0 x); nyoff = Expression "Yoffset" (get_prop has_yoffset get_yoffset 0 x); type_option = Option_enum Image_type.type_names "Image type" (Image_type.type_names.get_name type) { type = x.type, is_Image x = Image_type.MULTIBAND; } _result = map_unary process x { process image = Image (im_copy_set image.value type_option.value_thing (to_real nxres) (to_real nyres) (to_real nxoff) (to_real nyoff)); } } } } #separator Image_levels_item = class Menupullright "_Levels" "change image levels" { Scale_item = class Menuaction "_Scale to 0 - 255" "linear transform to fit 0 - 255 range" { action x = map_unary scale x; } Linear_item = class Menuaction "_Linear" "linear transform of image levels" { action x = class _result { _vislevel = 3; scale = Scale "Scale" 0.001 3 1; offset = Scale "Offset" (-128) 128 0; _result = map_unary adj x { adj x // only force back to input type if this is a thing // with a type ... so we work for Colour / Matrix etc. = clip2fmt x.format x', has_member "format" x = x' { x' = x * scale + offset; } } } } Gamma_item = class Menuaction "_Power" "power transform of image levels (gamma)" { action x = class _result { _vislevel = 3; gamma = Scale "Gamma" 0.001 4 1; image_maximum_hint = "You may need to change image_maximum if " ++ "this is not an 8 bit image"; im_mx = Expression "Image maximum" mx { mx = Image_format.maxval x.format, has_format x = 255; } _result = map_unary gam x { gam x = clip2fmt (get_format x) x', has_format x = x' { x' = (im_mx.expr / im_mx.expr ** gamma) * x ** gamma; } } } } Tone_item = class Menuaction "_Tone Curve" "adjust tone curve" { action x = class _result { _vislevel = 3; b = Scale "Black point" 0 100 0; w = Scale "White point" 0 100 100; sp = Scale "Shadow point" 0.1 0.3 0.2; mp = Scale "Mid-tone point" 0.4 0.6 0.5; hp = Scale "Highlight point" 0.7 0.9 0.8; sa = Scale "Shadow adjust" (-15) 15 0; ma = Scale "Mid-tone adjust" (-30) 30 0; ha = Scale "Highlight adjust" (-15) 15 0; curve = tone_build x.format b w sp mp hp sa ma ha; _result = map_unary (hist_map curve) x; } } } Image_transform_item = class Menupullright "_Transform" "transform images" { Rotate_item = class Menupullright "Ro_tate" "rotate image" { Fixed_item = class Menupullright "_Fixed" "clockwise rotation by fixed angles" { rotate_widget default x = class _result { _vislevel = 3; angle = Option "Rotate by" [ "Don't rotate", "90 degrees clockwise", "180 degrees", "90 degrees anticlockwise" ] default; _result = map_unary process x { process in = [ in, rot90 in, rot180 in, rot270 in ] ? angle; } } Rot90_item = class Menuaction "_90 Degrees" "clockwise rotation by 90 degrees" { action x = rotate_widget 1 x; } Rot180_item = class Menuaction "_180 Degrees" "clockwise rotation by 180 degrees" { action x = rotate_widget 2 x; } Rot270_item = class Menuaction "_270 Degrees" "clockwise rotation by 270 degrees" { action x = rotate_widget 3 x; } } Free_item = class Menuaction "_Free" "clockwise rotation by any angle" { action x = class _result { _vislevel = 3; angle = Scale "Angle" (-180) 180 0; _result = map_unary process x { process image = rotate angle image; } } } Straighten_item = class Menuaction "_Straighten" ("smallest rotation that makes an arrow either horizontal " ++ "or vertical") { action x = map_unary straighten x { straighten arrow = rotate angle'' arrow.image { x = arrow.width; y = arrow.height; angle = im (polar (x, y)); angle' = angle - 360, angle > 315 = angle - 180, angle > 135 = angle; angle'' = -angle', angle' >= (-45) && angle' < 45 = 90 - angle'; } } } } Flip_item = class Menupullright "_Flip" "mirror left/right or up/down" { Left_right_item = class Menuaction "_Left Right" "mirror object left/right" { action x = map_unary fliplr x; } Top_bottom_item = class Menuaction "_Top Bottom" "mirror object top/bottom" { action x = map_unary fliptb x; } } Resize_item = class Menupullright "_Resize" "change image size" { _interp = Option_enum Interpolate.names "Interpolation" "Bilinear"; Scale_item = class Menuaction "_Scale" "scale image size by a factor" { action x = class _result { _vislevel = 3; xfactor = Expression "Horizontal scale factor" 1; yfactor = Expression "Vertical scale factor" 1; interp = _interp; _result = map_unary process x { process image = resize xfactor yfactor interp.value_thing image; } } } Size_item = class Menuaction "_Size To" "resize to a fixed size" { action x = class _result { _vislevel = 3; which = Option "Resize axis" [ "Shortest", "Longest", "Horizontal", "Vertical" ] 0; size = Expression "Resize to (pixels)" 128; interp = _interp; _result = map_unary process x { process image = resize fac fac interp.value_thing image { xfac = to_real size / image.width; yfac = to_real size / image.height; max_factor = max_pair xfac yfac; min_factor = min_pair xfac yfac; fac = [max_factor, min_factor, xfac, yfac]?which; } } } } Resize_canvas_item = class Menuaction "_Canvas" "change size of surrounding image" { action x = class _result { _vislevel = 3; // try to guess a sensible size for the new image _guess_size = x.rect, is_Image x = Rect 0 0 100 100; nwidth = Expression "New width (pixels)" _guess_size.width; nheight = Expression "New height (pixels)" _guess_size.height; bgcolour = Expression "Background colour" 0; position = Option "Position" [ "North-west", "North", "North-east", "West", "Centre", "East", "South-west", "South", "South-east", "Specify in pixels" ] 4; left = Expression "Pixels from left" 0; top = Expression "Pixels from top" 0; _result = map_unary process x { process image = insert_noexpand xp yp image background { width = image.width; height = image.height; coding = image.coding; bands = 3, coding == Image_coding.LABPACK = image.bands; format = Image_format.FLOAT, coding == Image_coding.LABPACK = image.format; type = image.type; // placement vectors ... left, centre, right xposv = [0, to_real nwidth / 2 - width / 2, to_real nwidth - width]; yposv = [0, to_real nheight / 2 - height / 2, to_real nheight - height]; xp = left, position == 9 = xposv?((int) (position % 3)); yp = top, position == 9 = yposv?((int) (position / 3)); background = image_new nwidth nheight bands format coding type bgcolour.expr 0 0; } } } } } Image_perspective_item = Perspective_item; Image_rubber_item = class Menupullright "Ru_bber Sheet" "automatically warp images to superposition" { rubber_interp = Option "Interpolation" (map (extract 0) Interpolate.names.value) Interpolate.BILINEAR; rubber_order = Option "Order" ["0", "1", "2", "3"] 1; rubber_wrap = Toggle "Wrap image edges" false; // a transform ... a matrix, plus the size of the image the // matrix was made for Transform matrix image_width image_height = class matrix { // scale a transform ... if it worked for a m by n image, make // it work for a (m * xfac) by (y * yfac) image rescale xfac yfac = Transform (Matrix (map2 (map2 multiply) matrix.value facs)) (image_width * xfac) (image_height * yfac) { facs = [ [xfac, yfac], [1, 1], [1, 1], [1 / xfac, 1 / yfac], [1 / xfac, 1 / yfac], [1 / xfac, 1 / yfac] ]; } } // yuk!!!! fix is_instanceof to not need absolute names is_Transform = is_instanceof "Image_transform_item.Image_rubber_item.Transform"; Find_item = class Menuaction "_Find" ("find a transform which will map sample image onto " ++ "reference") { action reference sample = class _trn { _vislevel = 3; // controls order = rubber_order; interp = rubber_interp; wrap = rubber_wrap; max_err = Expression "Maximum error" 0.3; max_iter = Expression "Maximum iterations" 10; // transform [sample', trn, err] = transform_search max_err max_iter order interp wrap sample reference; transformed_image = Image sample'; _trn = Transform trn reference.width reference.height; final_error = err; } } Apply_item = class Menuaction "_Apply" "apply a transform to an image" { action a b = class _result { _vislevel = 3; // controls interp = rubber_interp; wrap = rubber_wrap; _result = map_binary trans a b { trans a b = transform interp wrap t' i { // get the transform arg first [i, t] = sortc (const is_Transform) [a, b]; t' = t.rescale (i.width / t.image_width) (i.height / t.image_height); } } } } } sep1 = Menuseparator; Match_item = class Menuaction "_Linear Match" "rotate and scale one image to match another" { action x y = class _result { _vislevel = 3; // try to find an image ... for a group, get the first item find_image x = x, is_Image x = find_image x?0, is_list x = find_image x.value, is_class x && has_value x = error "unable to find image"; _a = find_image x; _b = find_image y; ap1 = Mark_relative _a 0.5 0.25; bp1 = Mark_relative _b 0.5 0.25; ap2 = Mark_relative _a 0.5 0.75; bp2 = Mark_relative _b 0.5 0.75; refine = Toggle "Refine selected tie-points" false; lock = Toggle "No resize" false; _result = map_binary process x y { process a b = Image b''' { _prefs = Workspaces.Preferences; window = _prefs.MOSAIC_WINDOW_SIZE; object = _prefs.MOSAIC_OBJECT_SIZE; a' = a.value; b' = b.value; b'' = clip2fmt a.format b'; // return p2 ... if lock is set, return a p2 a standard // distance along the vector joining p1 and p2 norm p1 p2 = Rect left' top' 0 0, lock = p2 { v = (p2.left - p1.left, p2.top - p1.top); // 100000 to give precision since we pass points as // ints to match n = 100000 * sign v; left' = p1.left + re n; top' = p1.top + im n; } ap2'' = norm ap1 ap2; bp2'' = norm bp1 bp2; b''' = im_match_linear_search a' b'' ap1.left ap1.top bp1.left bp1.top ap2''.left ap2''.top bp2''.left bp2''.top object window, // we can't search if lock is on refine && !lock = im_match_linear a' b'' ap1.left ap1.top bp1.left bp1.top ap2''.left ap2''.top bp2''.left bp2''.top; } } } } Image_perspective_match_item = Perspective_match_item; } Image_band_item = class Menupullright "_Band" "manipulate image bands" { // like extract_bands, but return [] for zero band image // makes compose a bit simpler exb b n x = [], to_real n == 0 = extract_bands b n x; Extract_item = class Menuaction "_Extract" "extract bands from image" { action x = class _result { _vislevel = 3; first = Expression "Extract from band" 0; number = Expression "Extract this many bands" 1; _result = map_unary (exb first number) x; } } Insert_item = class Menuaction "_Insert" "insert bands into image" { action x y = class _result { _vislevel = 3; first = Expression "Insert at position" 0; _result = map_binary process x y { process im1 im2 = exb 0 f im1 ++ im2 ++ exb f (b - f) im1 { f = to_real first; b = im1.bands; } } } } Delete_item = class Menuaction "_Delete" "delete bands from image" { action x = class _result { _vislevel = 3; first = Expression "Delete from band" 0; number = Expression "Delete this many bands" 1; _result = map_unary process x { process im = exb 0 f im ++ exb (f + n) (b - (f + n)) im { f = to_real first; n = to_real number; b = im.bands; } } } } Bandwise_item = Image_join_item.Bandwise_item; sep1 = Menuseparator; To_dimension_item = class Menuaction "To D_imension" "convert bands to width or height" { action x = class _result { _vislevel = 3; orientation = Option "Orientation" [ "Horizontal", "Vertical" ] 0; _result = map_unary process x { process im = foldr1 [join_lr, join_tb]?orientation (bandsplit im); } } } To_bands_item = class Menuaction "To B_ands" "turn width or height to bands" { action x = class _result { _vislevel = 3; orientation = Option "Orientation" [ "Horizontal", "Vertical" ] 0; _result = map_unary process x { process im = bandjoin (map extract_column [0 .. im.width - 1]), orientation == 0 = bandjoin (map extract_row [0 .. im.height - 1]) { extract_column n = extract_area n 0 1 im.height im; extract_row n = extract_area 0 n im.width 1 im; } } } } } Image_crop_item = class Menuaction "_Crop" "extract a rectangular area from an image" { action x = class _result { _vislevel = 3; // try to find the image geometry ... don't bother trying to look // inside groups though _geo = x.rect, is_Image x = Rect 0 0 100 100; l = Expression "Crop left" ((int) (_geo.left + _geo.width / 4)); t = Expression "Crop top" ((int) (_geo.top + _geo.height / 4)); w = Expression "Crop width" (max_pair 1 ((int) (_geo.width / 2))); h = Expression "Crop height" (max_pair 1 ((int) (_geo.height / 2))); _result = map_nary (list_5ary extract) [x, l.expr, t.expr, w.expr, h.expr] { extract im l t w h = extract_area left' top' width' height' im { width' = min_pair (to_real w) im.width; height' = min_pair (to_real h) im.height; left' = range 0 (to_real l) (im.width - width'); top' = range 0 (to_real t) (im.height - height'); } } } } Image_insert_item = class Menuaction "_Insert" "insert a small image into a large image" { action a b = insert_position, is_Group a || is_Group b = insert_area { insert_area = class _result { _check_args = [ [a, "a", check_Image], [b, "b", check_Image] ]; _check_all = [ [a.coding == b.coding && a.bands == b.bands, "a.coding == b.coding && a.bands == b.bands"] ]; _vislevel = 3; // sort to get smallest first _pred x y = x.width * x.height < y.width * y.height; [_a', _b'] = sortc _pred [a, b]; place = Area _b' left top width height { // be careful in case b is smaller than a left = max_pair 0 ((_b'.width - _a'.width) / 2); top = max_pair 0 ((_b'.height - _a'.height) / 2); width = min_pair _a'.width _b'.width; height = min_pair _a'.height _b'.height; } _result = insert_noexpand place.left place.top (clip2fmt _b'.format a'') _b' { a'' = extract_area 0 0 place.width place.height _a'; } } insert_position = class _result { _vislevel = 3; position = Option "Position" [ "North-west", "North", "North-east", "West", "Centre", "East", "South-west", "South", "South-east", "Specify in pixels" ] 4; left = Expression "Pixels from left" 0; top = Expression "Pixels from top" 0; _result = map_binary insert a b { insert a b = insert_noexpand left top (clip2fmt b.format a) b, position == 9 = insert_noexpand xp yp (clip2fmt b.format a) b { xr = b.width - a.width; yr = b.height - a.height; xp = [0, xr / 2, xr]?((int) (position % 3)); yp = [0, yr / 2, yr]?((int) (position / 3)); } } } } } Image_select_item = Select_item; Image_join_item = class Menupullright "_Join" "join two or more images together" { Bandwise_item = class Menuaction "_Bandwise" "join two images bandwise" { action a b = join a b; } sep1 = Menuseparator; join_lr shim bg align a b = im2 { w = a.width + b.width + shim; h = max_pair a.height b.height; back = image_new w h a.bands a.format a.coding a.type bg 0 0; ya = [0, max_pair 0 ((b.height - a.height)/2), max_pair 0 (b.height - a.height)]; yb = [0, max_pair 0 ((a.height - b.height)/2), max_pair 0 (a.height - b.height)]; im1 = insert_noexpand 0 ya?align a back; im2 = insert_noexpand (a.width + shim) yb?align b im1; } join_tb shim bg align a b = im2 { w = max_pair a.width b.width; h = a.height + b.height + shim; back = image_new w h a.bands a.format a.coding a.type bg 0 0; xa = [0, max_pair 0 ((b.width - a.width)/2), max_pair 0 (b.width - a.width)]; xb = [0, max_pair 0 ((a.width - b.width)/2), max_pair 0 (a.width - b.width)]; im1 = insert_noexpand xa?align 0 a back; im2 = insert_noexpand xb?align (a.height + shim) b im1; } halign_names = ["Top", "Centre", "Bottom"]; valign_names = ["Left", "Centre", "Right"]; Left_right_item = class Menuaction "_Left to Right" "join two images left-right" { action a b = class _result { _vislevel = 3; shim = Scale "Spacing" 0 100 0; bg_colour = Expression "Background colour" 0; align = Option "Alignment" halign_names 1; _result = map_binary (join_lr shim.value bg_colour.expr align.value) a b; } } Top_bottom_item = class Menuaction "_Top to Bottom" "join two images top-bottom" { action a b = class _result { _vislevel = 3; shim = Scale "Spacing" 0 100 0; bg_colour = Expression "Background colour" 0; align = Option "Alignment" valign_names 1; _result = map_binary (join_tb shim.value bg_colour.expr align.value) a b; } } sep2 = Menuseparator; Array_item = class Menuaction "_Array" "join a list of lists of images into a single image" { action x = class _result { _vislevel = 3; hshim = Scale "Horizontal spacing" (-100) (100) 0; vshim = Scale "Vertical spacing" (-100) (100) 0; bg_colour = Expression "Background colour" 0; halign = Option "Horizontal alignment" valign_names 1; valign = Option "Vertical alignment" halign_names 1; _result = (image_set_origin 0 0 @ foldl1 (join_tb vshim.value bg_colour.expr halign.value) @ map (foldl1 (join_lr hshim.value bg_colour.expr valign.value))) (to_list (to_list x)); } } } Image_tile_item = class Menupullright "Til_e" "tile an image across and down" { tile_widget default_type x = class _result { _vislevel = 3; across = Expression "Tiles across" 2; down = Expression "Tiles down" 2; repeat = Option "Tile type" ["Replicate", "Four-way mirror"] default_type; _result = map_unary process x { process image = tile across down image, repeat == 0 = tile across down image'' { image' = insert image.width 0 (fliplr image) image; image'' = insert 0 image.height (fliptb image') image'; } } } Replicate_item = class Menuaction "_Replicate" "replicate image across and down" { action x = tile_widget 0 x; } Fourway_item = class Menuaction "_Four-way Mirror" "four-way mirror across and down" { action x = tile_widget 1 x; } Chop_item = class Menuaction "_Chop Into Tiles" "slice an image into tiles" { action x = class _result { _vislevel = 3; tile_width = Expression "Tile width" 100; tile_height = Expression "Tile height" 100; hoverlap = Expression "Horizontal overlap" 0; voverlap = Expression "Vertical overlap" 0; _result = map_unary (Group @ map Group @ process) x { process x = imagearray_chop tile_width tile_height hoverlap voverlap x; } } } } #separator Pattern_images_item = class Menupullright "_Patterns" "make a variety of useful patterns" { Grey_item = class Menuaction "Grey _Ramp" "make a smooth grey ramp" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; orientation = Option "Orientation" [ "Horizontal", "Vertical" ] 0; foption = Option "Format" ["8 bit", "float"] 0; _result = Image im { gen = im_grey, foption == 0 = im_fgrey; w = to_real nwidth; h = to_real nheight; im = gen w h, orientation == 0 = rot90 (gen h w); } } } Xy_item = class Menuaction "_XY Image" "make a two band image whose pixel values are their coordinates" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; _result = Image (make_xy nwidth nheight); } } Gaussian_item = class Menuaction "Gaussian _Noise" "make an image of gaussian noise" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; mean = Scale "Mean" 0 255 128; deviation = Scale "Deviation" 0 128 50; _result = Image (im_gaussnoise (to_real nwidth) (to_real nheight) mean.value deviation.value); } } Fractal_item = class Menuaction "_Fractal" "make a fractal image" { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; dimension = Scale "Dimension" 2.001 2.999 2.001; _result = Image (im_fractsurf (to_real nsize) dimension.value); } } Checkerboard_item = class Menuaction "_Checkerboard" "make a checkerboard image" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; hpsize = Expression "Horizontal patch size" 8; vpsize = Expression "Vertical patch size" 8; hpoffset = Expression "Horizontal patch offset" 0; vpoffset = Expression "Vertical patch offset" 0; _result = Image (xstripes ^ ystripes) { pixels = make_xy nwidth nheight; xpixels = pixels?0 + to_real hpoffset; ypixels = pixels?1 + to_real vpoffset; make_stripe pix swidth = pix % (swidth * 2) >= swidth; xstripes = make_stripe xpixels (to_real hpsize); ystripes = make_stripe ypixels (to_real vpsize); } } } Grid_item = class Menuaction "Gri_d" "make a grid" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; hspace = Expression "Horizontal line spacing" 8; vspace = Expression "Vertical line spacing" 8; thick = Expression "Line thickness" 1; hoff = Expression "Horizontal grid offset" 4; voff = Expression "Vertical grid offset" 4; _result = Image (xstripes | ystripes) { pixels = make_xy nwidth nheight; xpixels = pixels?0 + to_real hoff; ypixels = pixels?1 + to_real voff; make_stripe pix swidth = pix % swidth < to_real thick; xstripes = make_stripe xpixels (to_real hspace); ystripes = make_stripe ypixels (to_real vspace); } } } Text_item = class Menuaction "_Text" "make a bitmap of some text" { action = class _result { _vislevel = 3; text = String "Text to paint" "Hello world!"; font = Fontname "Use font" Workspaces.Preferences.PAINTBOX_FONT; wrap = Expression "Wrap text at" 500; align = Option "Alignment" [ "Left", "Centre", "Right" ] 0; dpi = Expression "DPI" 300; _result = Image (im_text text.value font.value (to_real wrap) align.value (to_real dpi)); } } New_CIELAB_slice_item = class Menuaction "CIELAB _Slice" "make a slice through CIELAB space" { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; L = Scale "L value" 0 100 50; _result = Image (lab_slice (to_real nsize) L.value); } } sense_option = Option "Sense" [ "Pass", "Reject" ] 0; build fn size = (Image @ image_set_type Image_type.FOURIER @ rotquad @ fn) (im_create_fmask size size); New_ideal_item = class Menupullright "_Ideal Fourier Mask" "make various ideal Fourier filter masks" { High_low_item = class Menuaction "_High or Low Pass" ("make a mask image for a highpass/lowpass " ++ "ideal Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f sense.value fc.value 0 0 0 0; } } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" ("make a mask image for an ring pass/reject " ++ "ideal Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; rw = Scale "Ring width" 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f (sense.value + 6) fc.value rw.value 0 0 0; } } } Band_item = class Menuaction "_Band Pass or Band Reject" ("make a mask image for a band pass/reject " ++ "ideal Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fcx = Scale "Horizontal frequency cutoff" 0.01 0.99 0.5; fcy = Scale "Vertical frequency cutoff" 0.01 0.99 0.5; r = Scale "Radius" 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f (sense.value + 12) fcx.value fcy.value r.value 0 0; } } } } New_gaussian_item = class Menupullright "_Gaussian Fourier Mask" "make various Gaussian Fourier filter masks" { High_low_item = class Menuaction "_High or Low Pass" ("make a mask image for a highpass/lowpass " ++ "Gaussian Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f (sense.value + 4) fc.value ac.value 0 0 0; } } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" ("make a mask image for an ring pass/reject " ++ "Gaussian Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; rw = Scale "Ring width" 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f (sense.value + 10) fc.value rw.value ac.value 0 0; } } } Band_item = class Menuaction "_Band Pass or Band Reject" ("make a mask image for a band pass/reject " ++ "Gaussian Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fcx = Scale "Horizontal frequency cutoff" 0.01 0.99 0.5; fcy = Scale "Vertical frequency cutoff" 0.01 0.99 0.5; r = Scale "Radius" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f (sense.value + 16) fcx.value fcy.value r.value ac.value 0; } } } } New_butterworth_item = class Menupullright "_Butterworth Fourier Mask" "make various Butterworth Fourier filter masks" { High_low_item = class Menuaction "_High or Low Pass" ("make a mask image for a highpass/lowpass " ++ "Butterworth Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; order = Scale "Order" 1 10 2; _result = build param (to_real nsize) { param f = f (sense.value + 2) order.value fc.value ac.value 0 0; } } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" ("make a mask image for an ring pass/reject " ++ "Butterworth Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; rw = Scale "Ring width" 0.01 0.99 0.5; order = Scale "Order" 1 10 2; _result = build param (to_real nsize) { param f = f (sense.value + 8) order.value fc.value rw.value ac.value 0; } } } Band_item = class Menuaction "_Band Pass or Band Reject" ("make a mask image for a band pass/reject " ++ "Butterworth Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fcx = Scale "Horizontal frequency cutoff" 0.01 0.99 0.5; fcy = Scale "Vertical frequency cutoff" 0.01 0.99 0.5; r = Scale "Radius" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; order = Scale "Order" 1 10 2; _result = build param (to_real nsize) { param f = f (sense.value + 14) order.value fcx.value fcy.value r.value ac.value; } } } } } Test_images_item = class Menupullright "Test I_mages" "make a variety of test images" { Eye_item = class Menuaction "_Spatial Response" "image for testing the eye's spatial response" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; factor = Scale "Factor" 0.001 1 0.2; _result = Image (im_eye (to_real nwidth) (to_real nheight) factor.value); } } Zone_plate = class Menuaction "_Zone Plate" "make a zone plate" { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; _result = Image (im_zone (to_real nsize)); } } Frequency_test_chart_item = class Menuaction "_Frequency Testchart" "make a black/white frequency test pattern" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; sheight = Expression "Strip height (pixels)" 10; waves = Expression "Wavelengths" [64, 32, 16, 8, 4, 2]; _result = imagearray_assemble 0 0 (transpose [strips]) { freq_slice wave = Image (sin (grey / wave) > 0); strips = map freq_slice waves.expr; grey = im_fgrey (to_real nwidth) (to_real sheight) * 360 * (to_real nwidth); } } } CRT_test_chart_item = class Menuaction "CRT _Phosphor Chart" "make an image for measuring phosphor colours" { action = class _result { _vislevel = 3; brightness = Scale "Brightness" 0 255 200; psize = Expression "Patch size (pixels)" 32; _result = Image (imagearray_assemble 0 0 [[green, red], [blue, white]]) { black = image_new (to_real psize) (to_real psize) 1 Image_format.FLOAT Image_coding.NOCODING Image_type.B_W 0 0 0; notblack = black + brightness; green = black ++ notblack ++ black; red = notblack ++ black ++ black; blue = black ++ black ++ notblack; white = notblack ++ notblack ++ notblack; } } } Greyscale_chart_item = class Menuaction "_Greyscale" "make a greyscale" { action = class _result { _vislevel = 3; pwidth = Expression "Patch width" 8; pheight = Expression "Patch height" 8; npatches = Expression "Number of patches" 16; _result = Image (image_set_type Image_type.B_W (clip2fmt Image_format.UCHAR wedge)) { wedge = 255 / (to_real npatches - 1) * (int) (strip?0 / to_real pwidth) { strip = make_xy (to_real pwidth * to_real npatches) pheight; } } } } CMYK_test_chart_item = class Menuaction "_CMYK Wedges" "make a set of CMYK wedges" { action = class _result { _vislevel = 3; pwidth = Expression "Patch width" 8; pheight = Expression "Patch height" 8; npatches = Expression "Number of patches" 16; _result = Image (image_set_type Image_type.CMYK (clip2fmt Image_format.UCHAR strips)) { wedge = 255 / (to_real npatches - 1) * (int) (strip?0 / to_real pwidth) { strip = make_xy (to_real pwidth * to_real npatches) pheight; } black = wedge * 0; C = wedge ++ black ++ black ++ black; M = black ++ wedge ++ black ++ black; Y = black ++ black ++ wedge ++ black; K = black ++ black ++ black ++ wedge; strips = imagearray_assemble 0 0 [[C],[M],[Y],[K]]; } } } Colour_atlas_item = class Menuaction "_Colour Atlas" "make a grid of patches grouped around a colour" { action = class _result { _vislevel = 3; start = Colour_picker "Lab" [50,0,0]; nstep = Expression "Number of steps" 2; ssize = Expression "Step size" 2; _result = Image (colour_transform_to (get_type start) im) { base = colour_transform_to Image_type.LAB start; step = to_real ssize; offset = to_real nstep * step; range c = [c - offset, c - offset + step ... c + offset]; mk_patch b a = image_new 150 150 3 Image_format.FLOAT Image_coding.NOCODING Image_type.LAB (Vector [base?0, a, b]) 0 0; mk_strip b = map (mk_patch b) (range base?1); mk_grid = map mk_strip (range base?2); im = imagearray_assemble 15 15 mk_grid; } } } } nip2-8.7.0/share/nip2/compat/7.14/_list.def0000644000175000017500000002140613224651032014740 00000000000000/* any l: or all the elements of list l together * * any (map (equal 0) list) == true, if any element of list is zero. * any :: [bool] -> bool */ any = foldr logical_or false; /* all l: and all the elements of list l together * * all (map (==0) list) == true, if every element of list is zero. * all :: [bool] -> bool */ all = foldr logical_and true; /* concat l: join a list of lists together * * concat ["abc","def"] == "abcdef". * concat :: [[*]] -> [*] */ concat l = foldr join [] l; /* drop n l: drop the first n elements from list l * * drop 3 "abcd" == "d" * drop :: num -> [*] -> [*] */ drop n l = l, n <= 0 || l == [] = drop (n - 1) (tl l); /* dropwhile fn l: drop while fn is true * * dropwhile is_digit "1234pigs" == "pigs" * dropwhile :: (* -> bool) -> [*] -> [*] */ dropwhile fn l = [], l == [] = dropwhile fn (tl l), fn (hd l) = l; /* extract n l: extract element at index n from list l */ extract = converse subscript; /* filter fn l: return all elements of l for which predicate fn holds * * filter is_digit "1one2two3three" = "123" * filter :: (* -> bool) -> [*] -> [*] */ filter fn l = foldr addif [] l { addif x l = x : l, fn x; = l; } /* foldl fn st l: fold list l from the left with function fn and start st * * Start from the left hand end of the list (unlike foldr, see below). * foldl is less useful (and much slower). * * foldl fn start [a,b .. z] = ((((st fn a) fn b) ..) fn z) * foldl :: (* -> ** -> *) -> * -> [**] -> * */ foldl fn st l = st, l == [] = foldl fn (fn st (hd l)) (tl l); /* foldl1 fn l: like foldl, but use the 1st element as the start value * * foldl1 fn [1,2,3] == ((1 fn 2) fn 3) * foldl1 :: (* -> * -> *) -> [*] -> * */ foldl1 fn l = [], l == [] = foldl fn (hd l) (tl l); /* foldr fn st l: fold list l from the right with function fn and start st * * foldr fn st [a,b..z] = (a fn (b fn (.. (z fn st)))) * foldr :: (* -> ** -> **) -> ** -> [*] -> ** */ foldr fn st l = st, l == [] = fn (hd l) (foldr fn st (tl l)); /* foldrl fn l: like foldr, but use the 1st element as the start value * * foldr1 fn [1,2,3,4] == (2 fn (3 fn (4 fn 1))) * foldr1 :: (* -> * -> *) -> [*] -> * */ foldr1 fn l = [], l == [] = foldr fn (hd l) (tl l); sum = foldr1 add; product = foldr1 multiply; /* Search a list for an element, returning it's index (or -1) * * index (equal 12) [13,12,11] == 1 * index :: (* -> bool) -> [*] -> real */ index fn list = search list 0 { search l n = -1, l == [] = n, fn (hd l) = search (tl l) (n + 1); } /* init l: remove last element of list l * * The dual of tl. * init [1,2,3] == [1,2] * init :: [*] -> [*] */ init l = error "init of []", l == []; = [], tl l == []; = hd l : init (tl l); /* iterate f x: repeatedly apply f to x * * return the infinite list [x, f x, f (f x), ..]. * iterate (multiply 2) 1 == [1, 2, 4, 8, 16, 32, 64 ... ] * iterate :: (* -> *) -> * -> [*] */ iterate f x = x : iterate f (f x); /* last l: return the last element of list l * * The dual of hd. last [1,2,3] == 3 * last :: [*] -> [*] */ last l = error "last of []", l == [] = hd l, tl l == [] = last (tl l); /* len l: length of list l * (see also is_list_len and friends in predicate.def) * * len :: [*] -> num */ len l = 0, l == [] = 1 + len (tl l); /* limit l: return the first element of l which is equal to its predecessor * * useful for checking for convergence * limit :: [*] -> * */ limit l = error "incorrect use of limit", l == [] || tl l == [] || tl (tl l) == [] = a, a == b = limit (b : x) { a:b:x = l; } /* Turn a function of n args into a function which takes a single arg of an * n-element list. */ list_1ary fn x = fn x?0; list_2ary fn x = fn x?0 x?1; list_3ary fn x = fn x?0 x?1 x?2; list_4ary fn x = fn x?0 x?1 x?2 x?3; list_5ary fn x = fn x?0 x?1 x?2 x?3 x?4; list_6ary fn x = fn x?0 x?1 x?2 x?3 x?4 x?5; list_7ary fn x = fn x?0 x?1 x?2 x?3 x?4 x?5 x?6; /* map fn l: map function fn over list l * * map :: (* -> **) -> [*] -> [**] */ map f l = [], l == []; = f (hd l) : map f (tl l); /* map2 fn l1 l2: map two lists together with fn * * map2 :: (* -> ** -> ***) -> [*] -> [**] -> [***] */ map2 fn l1 l2 = map (list_2ary fn) (zip2 l1 l2); /* map3 fn l1 l2 l3: map three lists together with fn * * map3 :: (* -> ** -> *** -> ****) -> [*] -> [**] -> [***] -> [****] */ map3 fn l1 l2 l3 = map (list_3ary fn) (zip3 l1 l2 l3); /* member l x: true if x is a member of list l * * is_digit == member "0123456789" * member :: [*] -> * -> bool */ member l x = any (map (equal x) l); /* merge b l r: merge two lists based on a bool list * * merge :: [bool] -> [*] -> [*] -> [*] */ merge p l r = [], p == [] || l == [] || r == [] = a : merge z x y, c = b : merge z x y { a:x = l; b:y = r; c:z = p; } /* mkset eq l: remove duplicates from list l using equality function * * mkset :: (* -> bool) -> [*] -> [*] */ mkset eq l = [], l == [] = a : filter (not @ eq a) (mkset eq x) { a:x = l; } /* postfix l r: add r to the end of list l * * The dual of ':'. * postfix :: [*] -> ** -> [*,**] */ postfix l r = l ++ [r]; /* repeat x: make an infinite list of xes * * repeat :: * -> [*] */ repeat x = map (const x) [1..]; /* replicate n x: make n copies of x in a list * * replicate :: num -> * -> [*] */ replicate n x = take n (repeat x); /* reverse l: reverse list l * * reverse :: [*] -> [*] */ reverse l = foldl (converse cons) [] l; /* scan fn st l: apply (fold fn r) to every initial segment of a list * * scan add 0 [1,2,3] == [1,3,6] * scan :: (* -> ** -> *) -> * -> [**] -> [*] */ scan fn = g { g st l = [st], l == [] = st : g (fn st a) x { a:x = l; } } /* sort l: sort list l into ascending order * * sort :: [*] -> [*] */ sort l = sortc less_equal l; /* sortc comp l: sort list l into order using a comparision function * * Uses merge sort (n log n behaviour) * sortc :: (* -> * -> bool) -> [*] -> [*] */ sortc comp l = l, n <= 1 = merge (sortc comp (take n2 l)) (sortc comp (drop n2 l)) { n = len l; n2 = (int) (n / 2); /* merge l1 l2: merge sorted lists l1 and l2 to make a single * sorted list */ merge l1 l2 = l2, l1 == [] = l1, l2 == [] = a : merge x (b : y), comp a b = b : merge (a : x) y { a:x = l1; b:y = l2; } } /* sortpl pl l: sort by a list of predicates * * sortpl :: (* -> bool) -> [*] -> [*] */ sortpl pl l = sortc (test pl) l { /* Comparision function ... put true before false, if equal move on to * the next predicate. */ test pl a b = true, pl == [] = ta, ta != tb = test (tl pl) a b { ta = pl?0 a; tb = pl?0 b; } } /* sortr l: sort list l into descending order * * sortr :: [*] -> [*] */ sortr l = sortc more l; /* split fn l: break a list into sections separated by many fn * * split is_space " hello world " == ["hello", "world"] * split is_space " " == [] * split :: (* -> bool) -> [*] -> [[*]] */ split fn l = [], l == [] || l' == [] = head : split fn tail { nfn = not @ fn; l' = dropwhile fn l; head = takewhile nfn l'; tail = dropwhile nfn l'; } /* splits fn l: break a list into sections separated by a single fn * * split (equal ',') ",,1" == ["", "", "1"] * split :: (* -> bool) -> [*] -> [[*]] */ splits fn l = [], l == [] = head : splits fn tail { fn' = not @ fn; dropif x = [], x == [] = tl x; head = takewhile fn' l; tail = dropif (dropwhile fn' l); } /* splitpl fnl l: split a list up with a list of predicates * * splitpl [is_digit, is_letter, is_digit] "123cat" == ["123", "cat", []] * splitpl :: [* -> bool] -> [*] -> [[*]] */ splitpl fnl l = l, fnl == [] = head : splitpl (tl fnl) tail { head = takewhile (hd fnl) l; tail = dropwhile (hd fnl) l; } /* split_lines n l: split a list into equal length lines * * split_lines 4 "1234567" == ["1234", "567"] * splitl :: int -> [*] -> [[*]] */ split_lines n l = [], l == [] = take n l : split_lines n (drop n l); /* take n l: take the first n elements from list l * take :: num -> [*] -> [*] */ take n l = [], n <= 0 = [], l == [] = hd l : take (n-1) (tl l); /* takewhile fn l: take from the front of a list while predicate fn holds * * takewhile is_digit "123onetwothree" == "123" * takewhile :: (* -> bool) -> [*] -> [*] */ takewhile fn l = [], l == [] = hd l : takewhile fn (tl l), fn (hd l) = []; /* zip2 l1 l2: zip two lists together * * zip2 [1,2] ['a', 'b', 'c'] == [[1,'a'],[2,'b']] * zip2 :: [*] -> [**] -> [[*,**]] */ zip2 l1 l2 = [], l1 == [] || l2 == [] = [hd l1, hd l2] : zip2 (tl l1) (tl l2); /* zip3 l1 l2 l3: zip three lists together * * zip3 [1,2] ['a', 'b', 'c'] [true] == [[1,'a',true]] * zip3 :: [*] -> [**] ->[***] -> [[*,**,***]] */ zip3 l1 l2 l3 = [], l1 == [] || l2 == [] || l3 == [] = [hd l1, hd l2, hd l3] : zip3 (tl l1) (tl l2) (tl l3); nip2-8.7.0/share/nip2/compat/7.14/_Object.def0000644000175000017500000002635413224651032015202 00000000000000/* Lots of little arg checks. Global for convenience. */ check_any = [(const true), _ "any"]; check_bool = [is_bool, _ "boolean"]; check_real = [is_real, _ "real"]; check_ureal = [is_ureal, _ "unsigned real"]; check_preal = [is_preal, _ "positive real"]; check_list = [is_list, _ "list"]; check_real_list = [is_real_list, _ "list of real"]; check_string = [is_string, _ "string"]; check_string_list = [is_string_list, _ "list of string"]; check_int = [is_int, _ "integer"]; check_uint = [is_uint, _ "unsigned integer"]; check_pint = [is_pint, _ "positive integer"]; check_matrix = [is_matrix, _ "rectangular array of real"]; check_matrix_display = [Matrix_display.is_display, _ "0, 1, 2 or 3"]; check_image = [is_image, _ "image"]; check_xy_list = [is_xy_list, _ "list of form [[1, 2], [3, 4], [5, 6], ...]"]; check_instance name = [is_instanceof name, name]; check_Image = check_instance "Image"; check_Matrix = [is_Matrix, _ "Matrix"]; check_colour_space = [is_colour_space, "colour_space"]; check_rectangular = [is_rectangular, _ "rectangular [[*]]"]; check_Guide = [is_Guide, _ "HGuide or VGuide"]; check_Colour = check_instance (_ "Colour"); check_Mark = check_instance (_ "Mark"); /* Check a set of args to a class. Two members to look at: _check_args and * _check_all. * * - each line in _check_args is [arg, "arg name", [test_fn, "arg type"]] * same number of lines as there are args * * stuff like "arg 2 must be real" * * - each line in _check_all is [test, "description"] * any number of lines * * stuff like "to must be greater than from" * * generate an error dialog with a helpful message on failure. * * Have as a separate function to try to keep the size of _Object down a bit. */ check_args x = error message, badargs != [] || badalls != [] = check_args x.super, x.super != [] = x { argcheck = x._check_args; allcheck = x._check_all; // join two strings up with a separator string join_sep j a b = a ++ j ++ b; // indent string indent = " "; // test for a condition in a check line fails test_fail x = ! x?0; // set of failed argcheck indexes badargs = map (extract 1) (filter test_fail (zip2 (map testarg argcheck) [0..])) { testarg x = x?2?0 x?0; } // set of failed allcheck indexes badalls = map (extract 1) (filter test_fail (zip2 (map hd allcheck) [0..])); // the error message message = _ "bad arguments to " ++ "\"" ++ x.name ++ "\"\n" ++ argmsg ++ allmsg ++ "\n" ++ _ "usage" ++ "\n" ++ indent ++ usage ++ "\n" ++ _ "where" ++ "\n" ++ arg_types ++ extra; // make the failed argcheck messages ... eg. ""value" should be // real, you passed " etc. argmsg = concat (map fmt badargs) { fmt n = indent ++ "\"" ++ argcheck?n?1 ++ "\"" ++ _ " should be of type " ++ argcheck?n?2?1 ++ ", " ++ _ "you passed" ++ ":\n" ++ indent ++ indent ++ print argcheck?n?0 ++ "\n"; } // make the failed allcheck messages ... eg "condition failed: // x < y" ... don't make a message if any typechecks have // failed, as we'll probably error horribly allmsg = [], badargs != [] = concat (map fmt badalls) ++ _ "you passed" ++ "\n" ++ concat (map fmt_arg argcheck) { fmt n = _ "condition failed" ++ ": " ++ allcheck?n?1 ++ "\n"; fmt_arg l = indent ++ l?1 ++ " = " ++ print l?0 ++ "\n"; } // make usage note usage = x.name ++ " " ++ foldr (join_sep " ") [] (map (extract 1) argcheck); // make arg type notes arg_types = foldr (join_sep "\n") [] (map fmt argcheck) { fmt l = indent ++ l?1 ++ " is of type " ++ l?2?1; } // extra bit at the bottom, if we have any conditions extra = [], allcheck == [] = _ "and" ++ "\n" ++ all_desc; // make a list of all the allcheck descriptions, with a few // spaces in front all_desc_list = map (join indent @ extract 1) allcheck; // join em up to make a set of condition notes all_desc = foldr (join_sep "\n") [] all_desc_list; } /* Operator overloading stuff. */ Operator_type = class { ARITHMETIC = 1; // eg. add RELATIONAL = 2; // eg. less COMPOUND = 3; // eg. max/mean/etc. COMPOUND_REWRAP = 4; // eg. transpose } Operator op_name fn type symmetric = class { } /* Form the converse of an Operator. */ oo_converse op = Operator (converse_name op.op_name) (converse op.fn) op.type op.symmetric { converse_name x = init x, last x == last "'" = x ++ "'"; } /* Given an operator name, look up the definition. */ oo_binary_lookup op_name = matches?0, matches != [] = error (_ "unknown binary operator" ++ ": " ++ print op_name) { operator_table = [ Operator "add" add Operator_type.ARITHMETIC true, Operator "subtract" subtract Operator_type.ARITHMETIC false, Operator "remainder" remainder Operator_type.ARITHMETIC false, Operator "power" power Operator_type.ARITHMETIC false, Operator "subscript" subscript Operator_type.ARITHMETIC false, Operator "left_shift" left_shift Operator_type.ARITHMETIC false, Operator "right_shift" right_shift Operator_type.ARITHMETIC false, Operator "divide" divide Operator_type.ARITHMETIC false, Operator "join" join Operator_type.ARITHMETIC false, Operator "multiply" multiply Operator_type.ARITHMETIC true, Operator "logical_and" logical_and Operator_type.ARITHMETIC true, Operator "logical_or" logical_or Operator_type.ARITHMETIC true, Operator "bitwise_and" bitwise_and Operator_type.ARITHMETIC true, Operator "bitwise_or" bitwise_or Operator_type.ARITHMETIC true, Operator "eor" eor Operator_type.ARITHMETIC true, Operator "comma" comma Operator_type.ARITHMETIC false, Operator "if_then_else" if_then_else Operator_type.ARITHMETIC false, Operator "equal" equal Operator_type.RELATIONAL true, Operator "not_equal" not_equal Operator_type.RELATIONAL true, Operator "less" less Operator_type.RELATIONAL false, Operator "less_equal" less_equal Operator_type.RELATIONAL false ]; matches = filter test_name operator_table; test_name x = x.op_name == op_name; } /* Given an operator name, look up a function that implements that * operator. */ oo_unary_lookup op_name = matches?0, matches != [] = error (_ "unknown unary operator" ++ ": " ++ print op_name) { operator_table = [ /* Operators. */ Operator "cast_signed_char" cast_signed_char Operator_type.ARITHMETIC false, Operator "cast_unsigned_char" cast_unsigned_char Operator_type.ARITHMETIC false, Operator "cast_signed_short" cast_signed_short Operator_type.ARITHMETIC false, Operator "cast_unsigned_short" cast_unsigned_short Operator_type.ARITHMETIC false, Operator "cast_signed_int" cast_signed_int Operator_type.ARITHMETIC false, Operator "cast_unsigned_int" cast_unsigned_int Operator_type.ARITHMETIC false, Operator "cast_float" cast_float Operator_type.ARITHMETIC false, Operator "cast_double" cast_double Operator_type.ARITHMETIC false, Operator "cast_complex" cast_complex Operator_type.ARITHMETIC false, Operator "cast_double_complex" cast_double_complex Operator_type.ARITHMETIC false, Operator "unary_minus" unary_minus Operator_type.ARITHMETIC false, Operator "negate" negate Operator_type.RELATIONAL false, Operator "complement" complement Operator_type.ARITHMETIC false, Operator "unary_plus" unary_plus Operator_type.ARITHMETIC false, /* Built in projections. */ Operator "re" re Operator_type.ARITHMETIC false, Operator "im" im Operator_type.ARITHMETIC false, Operator "hd" hd Operator_type.ARITHMETIC false, Operator "tl" tl Operator_type.ARITHMETIC false, /* Maths builtins. */ Operator "sin" sin Operator_type.ARITHMETIC false, Operator "cos" cos Operator_type.ARITHMETIC false, Operator "tan" tan Operator_type.ARITHMETIC false, Operator "asin" asin Operator_type.ARITHMETIC false, Operator "acos" acos Operator_type.ARITHMETIC false, Operator "atan" atan Operator_type.ARITHMETIC false, Operator "log" log Operator_type.ARITHMETIC false, Operator "log10" log10 Operator_type.ARITHMETIC false, Operator "exp" exp Operator_type.ARITHMETIC false, Operator "exp10" exp10 Operator_type.ARITHMETIC false, Operator "ceil" ceil Operator_type.ARITHMETIC false, Operator "floor" floor Operator_type.ARITHMETIC false ]; matches = filter test_name operator_table; test_name x = x.op_name == op_name; } /* Find the matching methods in a method table. */ oo_method_lookup table = map (extract 0) (filter (extract 1) table); /* A binary op: a is a class, b may be a class ... eg. "add" a b two obvious ways to find a method: - a.oo_binary_search "add" (+) b - b.oo_binary_search "add'" (converse (+)) a, is_class b if these fail but op is a symmetric operator (eg. a + b == b + a), we can also try reversing the args - a.oo_binary_search "add'" (converse (+)) b - b.oo_binary_search "add" (+) a, is_class b if those fail as well, but this is ==, do pointer equals as a fallback */ oo_binary_function op a b = matches1?0, matches1 != [] = matches2?0, is_class b && matches2 != [] = matches3?0, op.symmetric && matches3 != [] = matches4?0, op.symmetric && is_class b && matches4 != [] = pointer_equal a b, op.op_name == "equal" || op.op_name == "equal'" = not_pointer_equal a b, op.op_name == "not_equal" || op.op_name == "not_equal'" = error (_ "No method found for binary operator." ++ "\n" ++ _ "left" ++ " = " ++ print a ++ "\n" ++ _ "operator" ++ " = " ++ op.op_name ++ "\n" ++ _ "right" ++ " = " ++ print b) { matches1 = oo_method_lookup (a.oo_binary_table op b); matches2 = oo_method_lookup (b.oo_binary_table (oo_converse op) a); matches3 = oo_method_lookup (a.oo_binary_table (oo_converse op) b); matches4 = oo_method_lookup (b.oo_binary_table op a); } /* A binary op: a is not a class, b is a class ... eg. "subtract" a b only one way to find a method: - b.oo_binary_search "subtract'" (converse (-)) a if this fails but op is a symmetric operator (eg. a + b == b + a), we can try reversing the args - b.oo_binary_search "add" (+) a, is_class b if that fails as well, but this is ==, do pointer equals as a fallback */ oo_binary'_function op a b = matches1?0, matches1 != [] = matches2?0, op.symmetric && matches2 != [] = pointer_equal a b, op.op_name == "equal" || op.op_name == "equal'" = not_pointer_equal a b, op.op_name == "not_equal" || op.op_name == "not_equal'" = error (_ "No method found for binary operator." ++ "\n" ++ _ "left" ++ " = " ++ print a ++ "\n" ++ _ "operator" ++ " = " ++ op.op_name ++ "\n" ++ _ "right" ++ " = " ++ print b) { matches1 = oo_method_lookup (b.oo_binary_table (oo_converse op) a); matches2 = oo_method_lookup (b.oo_binary_table op a); } oo_unary_function op x = matches?0, matches != [] = error (_ "No method found for unary operator." ++ "\n" ++ _ "operator" ++ " = " ++ op.op_name ++ "\n" ++ _ "argument" ++ " = " ++ print x) { matches = oo_method_lookup (x.oo_unary_table op); } /* Base class for nip's built-in classes ... base check function, base * operator overload functions. */ _Object = class { check = check_args this; _check_args = []; _check_all = []; /* Operator overloading stuff. */ oo_binary op x = oo_binary_function (oo_binary_lookup op) this x; oo_binary' op x = oo_binary'_function (oo_binary_lookup op) x this; oo_unary op = oo_unary_function (oo_unary_lookup op) this; oo_binary_table op x = []; oo_unary_table op = []; } nip2-8.7.0/share/nip2/compat/7.14/_predicate.def0000644000175000017500000002665413224651032015737 00000000000000 /* is_colour_space str: is a string one of nip's colour space names */ is_colour_space str = Image_type.colour_spaces.present 0 str; /* is_colour_type n: is a number one of VIPS's colour spaces */ is_colour_type n = Image_type.colour_spaces.present 1 n; /* is_number: is a real or a complex number. */ is_number a = is_real a || is_complex a; /* is_int: is an integer */ is_int a = is_real a && a == (int) a; /* is_uint: is an unsigned integer */ is_uint a = is_int a && a >= 0; /* is_pint: is a positive integer */ is_pint a = is_int a && a > 0; /* is_preal: is a positive real */ is_preal a = is_real a && a > 0; /* is_ureal: is an unsigned real */ is_ureal a = is_real a && a >= 0; /* is_letter c: true if character c is an ASCII letter * * is_letter :: char -> bool */ is_letter c = ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z'); /* is_digit c: true if character c is an ASCII digit * * is_digit :: char->bool */ is_digit x = '0' <= x && x <= '9'; /* A whitespace character. * * is_space :: char->bool */ is_space = member " \n\t"; /* List str starts with section prefix. * * is_prefix "hell" "hello world!" == true * is_prefix :: [*] -> [*] -> bool */ is_prefix prefix str = take (len prefix) str == prefix; /* List str ends with section suffix. * * is_suffix "ld!" "hello world!" == true * is_suffix :: [*] -> [*] -> bool */ is_suffix suffix str = take (len suffix) (reverse str) == reverse suffix; /* List contains seqence. * * is_substr "llo" "hello world!" == true * is_substr :: [*] -> [*] -> bool */ is_substr seq str = any (map (is_prefix seq) (iterate tl str)); /* is_listof p s: true if finite list with p true for every element. */ is_listof p l = is_list l && all (map p l); /* is_string s: true if finite list of char. */ is_string s = is_listof is_char s; /* is_real_list l: is l a list of real numbers ... test each element, * so no infinite lists pls. */ is_real_list l = is_listof is_real l; /* is_string_list l: is l a finite list of finite strings. */ is_string_list l = is_listof is_string l; /* Test list length ... quicker than len x == n for large lists. */ is_list_len n x = true, x == [] && n == 0 = false, x == [] || n == 0 = is_list_len (n - 1) (tl x); is_list_len_more n x = true, x != [] && n == 0 = false, x == [] || n == 0 = is_list_len_more (n - 1) (tl x); is_list_len_more_equal n x = true, n == 0 = false, x == [] = is_list_len_more_equal (n - 1) (tl x); /* is_rectangular l: is l a rectangular data structure */ is_rectangular l = true, !is_list l = true, all (map is_obj l) = true, all (map is_list l) && all (map (not @ is_obj) l) && all (map is_rectangular l) && is_list_len_more 0 l && all (map (is_list_len (len (hd l))) (tl l)) = false { // treat strings as a base type, not [char] is_obj x = !is_list x || is_string x; } /* is_matrix l: is l a list of lists of real numbers, all the same length * * [[]] is the empty matrix, [] is the empty list ... disallow [] */ is_matrix l = l != [] && is_listof is_real_list l && is_rectangular l; /* is_square_matrix l: is l a matrix with width == height */ is_square_matrix l = true, l == [[]] = is_matrix l && is_list_len (len (hd l)) l; /* is_oddmatrix l: is l a matrix with odd-length sides */ is_oddmatrix l = true, l == [[]] = is_matrix l && len l % 2 == 1 && len l?0 % 2 == 1; /* is_odd_square_matrix l: is l a square_matrix with odd-length sides */ is_odd_square_matrix l = is_square_matrix l && len l % 2 == 1; /* Is an item in a column of a table? */ is_incolumn n table x = member (map (extract n) table) x; /* Is HGuide or VGuide. */ is_HGuide x = is_instanceof "HGuide" x; is_VGuide x = is_instanceof "VGuide" x; is_Guide x = is_HGuide x || is_VGuide x; is_Mark x = is_instanceof "Mark" x; is_Group x = is_instanceof "Group" x; is_List x = is_instanceof "List" x; is_Image x = is_instanceof "Image" x; is_Region x = is_instanceof "Region" x; is_Real x = is_instanceof "Real" x; is_Matrix x = is_instanceof "Matrix_base" x; is_Vector x = is_instanceof "Vector" x; is_Colour x = is_instanceof "Colour" x; is_Arrow x = is_instanceof "Arrow" x; is_Bool x = is_instanceof "Bool" x; is_Scale x = is_instanceof "Scale" x; is_Rect x = is_instanceof "Rect" x; is_Number x = is_instanceof "Number" x; is_Expression x = is_instanceof "Expression" x; is_String x = is_instanceof "String" x; /* A list of the form [[1,2],[3,4],[5,6]...] */ is_xy_list l = is_list l && all (map xy l) { xy l = is_real_list l && is_list_len 2 l; } // does a nested list structure contain a Group object? contains_Group l = true, is_list l && any (map is_Group l) = any (map contains_Group l), is_list l = false; /* Does an object have a sensible VIPS type? */ has_type x = is_image x || is_Image x || is_Arrow x || is_Colour x; /* Try to get a VIPS image type from an object. */ get_type x = get_type_im x, is_image x = get_type_im x.value, is_Image x = get_type_im x.image.value, is_Arrow x = Image_type.colour_spaces.lookup 0 1 x.colour_space, is_Colour x // slightly odd ... but our display is always 0-255, so it makes sense for // a plain number to be in the same range = Image_type.sRGB, is_real x = error ("get_type: unable to get type from " ++ print x) { // get the type from a VIPS image ... but only if it makes sense with // the rest of the image // we often have Type set wrong, hence the ugly guessing :-( // can have alpha, hence we let bands be one more than you might think get_type_im im = Image_type.LABQ, coding == Image_coding.LABPACK = Image_type.GREY16, type == Image_type.GREY16 && is_bands 1 = Image_type.HISTOGRAM, type == Image_type.HISTOGRAM && (width == 1 || height == 1) = Image_type.B_W, is_bands 1 = Image_type.CMYK, type == Image_type.CMYK && is_bands 4 = type, is_colorimetric && is_bands 3 = Image_type.sRGB, !is_colorimetric && is_bands 3 = Image_type.MULTIBAND, !is_colorimetric && !is_bands 3 = type { type = get_header "Type" im; coding = get_header "Coding" im; bands = get_header "Bands" im; width = get_header "Xsize" im; height = get_header "Ysize" im; // 3-band colorimetric types we allow ... the things which the // Colour/Convert To menu can make, excluding mono. ok_types = [ Image_type.sRGB, Image_type.RGB16, Image_type.LAB, Image_type.LABQ, Image_type.LABS, Image_type.LCH, Image_type.XYZ, Image_type.YXY, Image_type.UCS ]; is_colorimetric = member ok_types type; // is bands n, with an optional alpha (ie. can be n + 1 too) is_bands n = bands == n || bands == n + 1; } } has_format x = has_member "format" x || is_Arrow x || is_image x; get_format x = x.format, has_member "format" x = x.image.format, is_Arrow x = get_header "BandFmt" x, is_image x = error ("get_format: unable to get format from " ++ print x); has_bits x = has_member "bits" x || is_Arrow x || is_image x; get_bits x = x.bits, has_member "bits" x = x.image.bits, is_Arrow x = get_header "Bbits" x, is_image x = error ("get_bits: unable to get bits from " ++ print x); has_bands x = is_image x || has_member "bands" x || is_Arrow x; get_bands x = x.bands, has_member "bands" x = x.image.bands, is_Arrow x = get_header "Bands" x, is_image x = 1, is_real x = len x, is_real_list x = error ("get_bands: unable to get bands from " ++ print x); has_coding x = has_member "coding" x || is_Arrow x || is_image x; get_coding x = x.coding, has_member "coding" x = x.image.coding, is_Arrow x = get_header "Coding" x, is_image x = Image_coding.NOCODING, is_real x = error ("get_coding: unable to get coding from " ++ print x); has_xres x = has_member "xres" x || is_Arrow x || is_image x; get_xres x = x.xres, has_member "xres" x = x.image.xres, is_Arrow x = get_header "Xres" x, is_image x = error ("get_xres: unable to get xres from " ++ print x); has_yres x = has_member "yres" x || is_Arrow x || is_image x; get_yres x = x.yres, has_member "yres" x = x.image.yres, is_Arrow x = get_header "Yres" x, is_image x = error ("get_yres: unable to get yres from " ++ print x); has_xoffset x = has_member "xoffset" x || is_Arrow x || is_image x; get_xoffset x = x.xoffset, has_member "xoffset" x = x.image.xoffset, is_Arrow x = get_header "Xoffset" x, is_image x = error ("get_xoffset: unable to get xoffset from " ++ print x); has_yoffset x = has_member "yoffset" x || is_Arrow x || is_image x; get_yoffset x = x.yoffset, has_member "yoffset" x = x.image.yoffset, is_Arrow x = get_header "Yoffset" x, is_image x = error ("get_yoffset: unable to get yoffset from " ++ print x); has_value = has_member "value"; get_value x = x.value; has_image x = is_image x || is_Image x || is_Arrow x; get_image x = x.value, is_Image x = x.image.value, is_Arrow x = x, is_image x = error ("get_image: unable to get image from " ++ print x); has_number x = is_number x || is_Real x; get_number x = x.value, is_Real x = x, is_number x = error ("get_number: unable to get number from " ++ print x); has_real x = is_real x || is_Real x; get_real x = x.value, is_Real x = x, is_real x = error ("get_real: unable to get real from " ++ print x); has_width x = has_member "width" x || is_image x; get_width x = x.width, has_member "width" x = get_header "Xsize" x, is_image x = error ("get_width: unable to get width from " ++ print x); has_height x = has_member "height" x || is_image x; get_height x = x.height, has_member "height" x = get_header "Ysize" x, is_image x = error ("get_height: unable to get height from " ++ print x); has_left x = has_member "left" x; get_left x = x.left, has_member "left" x = error ("get_left: unable to get left from " ++ print x); has_top x = has_member "top" x; get_top x = x.top, has_member "top" x = error ("get_top: unable to get top from " ++ print x); // like has/get member, but first in a lst of objects has_member_list has objects = filter has objects != []; // need one with the args swapped get_member = converse dot; // get a member from the first of a list of objects to have it get_member_list has get objects = hd members, members != [] = error "unable to get property" { members = map get (filter has objects); } is_hist x = has_image x && (h == 1 || w == 1 || t == Image_type.HISTOGRAM) { im = get_image x; w = get_width im; h = get_height im; t = get_type im; } get_header field x = oo_unary_function get_header_op x, is_class x = get_header_image x, is_image x = error (_ "bad arguments to " ++ "get_header") { get_header_op = Operator "get_header" (get_header field) Operator_type.COMPOUND false; get_header_image im = im_header_int field im, type == itype = im_header_double field im, type == dtype = im_header_string field im, type == stype1 || type == stype2 = error (_ "image has no field " ++ field), type == 0 = error (_ "unknown type for field " ++ field) { type = im_header_get_typeof field im; itype = name2gtype "gint"; dtype = name2gtype "gdouble"; stype1 = name2gtype "VipsRefString"; stype2 = name2gtype "gchararray"; } } get_header_type field x = oo_unary_function get_header_type_op x, is_class x = im_header_get_typeof field x, is_image x = error (_ "bad arguments to " ++ "get_header_type") { get_header_type_op = Operator "get_header_type" (get_header_type field) Operator_type.COMPOUND false; } set_header field value x = oo_unary_function set_header_op x, is_class x = im_copy_set_meta x field value, is_image x = error (_ "bad arguments to " ++ "set_header") { set_header_op = Operator "set_header" (set_header field value) Operator_type.COMPOUND false; } nip2-8.7.0/share/nip2/compat/7.14/Widgets.def0000644000175000017500000000235313224651032015234 00000000000000Widget_slider_item = class Menuaction "_Scale" "make a new scale widget" { icon = "nip-slider-16.png"; action = Scale "untitled scale" 0 255 128; } Widget_toggle_item = class Menuaction "_Toggle" "make a new toggle widget" { action = Toggle "untitled toggle" false; } Widget_option_item = class Menuaction "_Option" "make a new option widget" { action = Option "untitled option" ["option0", "option1"] 0; } Widget_string_item = class Menuaction "St_ring" "make a new string widget" { action = String "Enter a string" "sample text"; } Widget_number_item = class Menuaction "_Number" "make a new number widget" { action = Number "Enter a number" 42; } Widget_expression_item = class Menuaction "_Expression" "make a new expression widget" { action = Expression "Enter an expression" 42; } Widget_pathname_item = class Menuaction "_File Chooser" "make a new file chooser widget" { action = Pathname "Pick a file" "$VIPSHOME/share/$PACKAGE/data/print_test_image.v"; } Widget_font_item = class Menuaction "F_ont Chooser" "make a new font chooser widget" { action = Fontname "Pick a font" Workspaces.Preferences.PAINTBOX_FONT; } Widget_clock_item = class Menuaction "_Clock" "make a new clock widget" { action = Clock 1 1; } nip2-8.7.0/share/nip2/compat/7.14/Colour.def0000644000175000017500000003531513224651032015075 00000000000000 Colour_new_item = class Menupullright (_ "_New") (_ "make a patch of colour") { Widget_colour_item = class Menuaction (_ "_Colour") (_ "make a patch of colour") { action = Colour_picker "Lab" [50,0,0]; } LAB_colour = class Menuaction (_ "CIE Lab _Picker") (_ "pick colour in CIE Lab space") { action = widget "Lab" [50, 0, 0]; // ab_slice size size = 512; // range of values ... +/- 128 for ab range = 256; // map xy in slice image to ab and back xy2ab x = x / (size / range) - 128; ab2xy a = (a + 128) * (size / range); widget space default_value = class Colour space _result { _vislevel = 3; [_L, _a, _b] = default_value; L = Scale "Lightness" 0 100 _L; ab_slice = Image (lab_slice size L.value); point = Mark ab_slice (ab2xy _a) (ab2xy _b); _result = [L.value, xy2ab point.left, xy2ab point.top]; Colour_edit colour_space value = widget colour_space value; } } } Colour_to_colour_item = class Menuaction (_ "Con_vert to Colour") (_ "convert anything to a colour") { action x = to_colour x; } #separator Colour_convert_item = class Menupullright (_ "_Colourspace") (_ "convert to various colour spaces") { spaces = Image_type.image_colour_spaces; conv dest x = class _result { _vislevel = 3; to = Option_enum spaces (_ "Convert to") (spaces.get_name dest); _result = map_unary (colour_transform_to to.value_thing) x; } Mono_item = class Menuaction (_ "_Monochrome") (_ "convert to mono colourspace") { action x = conv Image_type.B_W x; } GREY16_item = class Menuaction (_ "_GREY16") (_ "convert to GREY16 colourspace") { action x = conv Image_type.GREY16 x; } sRGB_item = class Menuaction (_ "_sRGB") (_ "convert to sRGB colourspace") { action x = conv Image_type.sRGB x; } RGB16_item = class Menuaction (_ "_RGB16") (_ "convert to RGB16 colourspace") { action x = conv Image_type.RGB16 x; } Lab_item = class Menuaction (_ "_Lab") (_ "convert to Lab colourspace (float Lab)") { action x = conv Image_type.LAB x; } LabQ_item = class Menuaction (_ "Lab_Q") (_ "convert to LabQ colourspace (32-bit Lab)") { action x = conv Image_type.LABQ x; } LabS_item = class Menuaction (_ "Lab_S") (_ "convert to LabS colourspace (48-bit Lab)") { action x = conv Image_type.LABS x; } LCh_item = class Menuaction (_ "L_Ch") (_ "convert to LCh colourspace") { action x = conv Image_type.LCH x; } XYZ_item = class Menuaction (_ "_XYZ") (_ "convert to XYZ colourspace") { action x = conv Image_type.XYZ x; } Yxy_item = class Menuaction (_ "_Yxy") (_ "convert to Yxy colourspace") { action x = conv Image_type.YXY x; } UCS_item = class Menuaction (_ "_UCS") (_ "convert to UCS colourspace") { action x = conv Image_type.UCS x; } } /* mark objects as being in various colourspaces */ Colour_tag_item = class Menupullright (_ "_Tag As") (_ "tag object as being in various colour spaces") { spaces = Image_type.image_colour_spaces; tag dest x = class _result { _vislevel = 3; to = Option_enum spaces (_ "Tag as") (spaces.get_name dest); _result = map_unary (image_set_type to.value_thing) x; } Mono_item = class Menuaction (_ "_Monochrome") (_ "tag as being in mono colourspace") { action x = tag Image_type.B_W x; } sRGB_item = class Menuaction (_ "_sRGB") (_ "tag as being in sRGB colourspace") { action x = tag Image_type.sRGB x; } RGB16_item = class Menuaction (_ "_RGB16") (_ "tag as being in RGB16 colourspace") { action x = tag Image_type.RGB16 x; } GREY16_item = class Menuaction (_ "_GREY16") (_ "tag as being in GREY16 colourspace") { action x = tag Image_type.GREY16 x; } Lab_item = class Menuaction (_ "_Lab") (_ "tag as being in Lab colourspace (float Lab)") { action x = tag Image_type.LAB x; } LabQ_item = class Menuaction (_ "Lab_Q") (_ "tag as being in LabQ colourspace (32-bit Lab)") { action x = tag Image_type.LABQ x; } LabS_item = class Menuaction (_ "Lab_S") (_ "tag as being in LabS colourspace (48-bit Lab)") { action x = tag Image_type.LABS x; } LCh_item = class Menuaction (_ "L_Ch") (_ "tag as being in LCh colourspace") { action x = tag Image_type.LCH x; } XYZ_item = class Menuaction (_ "_XYZ") (_ "tag as being in XYZ colourspace") { action x = tag Image_type.XYZ x; } Yxy_item = class Menuaction (_ "_Yxy") (_ "tag as being in Yxy colourspace") { action x = tag Image_type.YXY x; } UCS_item = class Menuaction (_ "_UCS") (_ "tag as being in UCS colourspace") { action x = tag Image_type.UCS x; } } Colour_temperature_item = class Menupullright (_ "Colour Te_mperature") (_ "colour temperature conversions") { Whitepoint_item = class Menuaction (_ "_Move Whitepoint") (_ "change whitepoint") { action x = class _result { _vislevel = 3; old_white = Option_enum Whitepoints (_ "Old whitepoint") "D65"; new_white = Option_enum Whitepoints (_ "New whitepoint") "D50"; _result = map_unary process x { process im = im''' { im' = colour_transform_to Image_type.XYZ im; im'' = im' * (new_white.value_thing / old_white.value_thing); im''' = colour_transform_to (get_type im) im''; } } } } D65_to_D50_item = class Menupullright (_ "D_65 to D50") (_ "complex conversion") { XYZ_minimal_item = class Menuaction (_ "_Minimal") (_ "D65 to D50 using the minimal 3x3 matrix in XYZ") { action x = map_unary process x { process im = im''' { im' = colour_transform_to Image_type.XYZ im; im'' = recomb D652D50_direct im'; im''' = colour_transform_to (get_type im) im''; } } } Bradford_item = class Menuaction (_ "_Bradford") (_ "D65 to D50 in Bradford cone space") { action x = map_unary process x { process im = im''' { im' = colour_transform_to Image_type.XYZ im; im'' = im_D652D50 im'; im''' = colour_transform_to (get_type im) im''; } } } } D50_to_D65_item = class Menupullright (_ "D_50 to D65") (_ "complex conversion") { XYZ_minimal_item = class Menuaction (_ "_Minimal") (_ "D50 to D65 using the minimal 3x3 matrix in XYZ") { action x = map_unary process x { process im = im''' { im' = colour_transform_to Image_type.XYZ im; im'' = recomb D502D65_direct im'; im''' = colour_transform_to (get_type im) im''; } } } Bradford_item = class Menuaction (_ "_Bradford") (_ "D60 to D65 in Bradford cone space") { action x = map_unary process x { process im = im''' { im' = colour_transform_to Image_type.XYZ im; im'' = im_D502D65 im'; im''' = colour_transform_to (get_type im) im''; } } } } Lab_to_D50XYZ_item = class Menuaction (_ "_Lab to D50 XYZ") (_ "Lab to XYZ with a D50 whitepoint") { action x = map_unary (colour_unary im_D50Lab2XYZ) x; } D50XYZ_to_Lab_item = class Menuaction (_ "D50 _XYZ to Lab") (_ "XYZ to Lab with a D50 whitepoint") { action x = map_unary (colour_unary im_D50XYZ2Lab) x; } } Colour_icc_item = class Menupullright (_ "_ICC") (_ "transform with ICC profiles") { print_profile = "$VIPSHOME/share/$PACKAGE/data/cmyk.icm"; monitor_profile = "$VIPSHOME/share/$PACKAGE/data/sRGB.icm"; guess_profile image = monitor_profile, has_bands image && get_bands image == 3 = print_profile; render_intents = Option_enum Render_intent.names (_ "Render intent") (_ "Absolute"); Export_item = class Menuaction (_ "_Export") (_ "export from PCS to device space") { action x = class _result { _vislevel = 3; profile = Pathname (_ "Output profile") print_profile; intent = render_intents; depth = Option (_ "Output depth") [_ "8 bit", _ "16 bit"] 0; _result = map_unary process x { process image = icc_export [8, 16]?depth profile.value intent.value_thing lab { lab = colour_transform_to Image_type.LABQ image; } } } } Import_item = class Menuaction (_ "_Import") (_ "import from device space to PCS") { action x = class _result { _vislevel = 3; embedded = Toggle (_ "Use embedded profile if possible") false; profile = Pathname (_ "Default input profile") (guess_profile x); intent = render_intents; _result = map_unary process x { process image = icc_import_embedded intent.value_thing image, get_header_type "icc-profile-data" image != 0 && embedded = icc_import profile.value intent.value_thing image; } } } Transform_item = class Menuaction (_ "_Transform") (_ "transform between two device spaces") { action x = class _result { _vislevel = 3; in_profile = Pathname (_ "Input profile") (guess_profile x); out_profile = Pathname (_ "Output profile") print_profile; intent = render_intents; _result = map_unary process x { process image = icc_transform in_profile.value out_profile.value intent.value_thing image; } } } AC2RC_item = class Menuaction (_ "_Absolute to Relative") (_ "absolute to relative colorimetry using device profile") { action x = class _result { _vislevel = 3; profile = Pathname (_ "Pick a profile") (guess_profile x); _result = map_unary process x { process image = icc_ac2rc profile.value lab { lab = colour_transform_to Image_type.LAB image; } } } } } #separator Colour_dE_item = class Menupullright (_ "_Difference") (_ "calculate colour difference") { /* Apply a converter to an object ... convert image or colour (since * we can guess the colour space we're converting from), don't convert * matrix or vector (since we can't tell ... assume it's in the right * space already). */ apply_cvt cvt x = cvt x, is_Image x || is_Colour x || is_image x = x; diff cvt in1 in2 = abs_vec (apply_cvt cvt in1 - apply_cvt cvt in2); /* Converter to LAB. */ lab_cvt = colour_transform_to Image_type.LAB; /* Converter to UCS ... plain UCS is Ch form, so we go LAB again after * to make sure we get a rectangular coord system. */ ucs_cvt = colour_transform Image_type.LCH Image_type.LAB @ colour_transform_to Image_type.UCS; CIEdE76_item = class Menuaction (_ "CIE dE _76") (_ "calculate CIE dE 1976 for two objects") { action a b = map_binary (diff lab_cvt) a b; } CIEdE00_item = class Menuaction (_ "CIE dE _00") (_ "calculate CIE dE 2000 for two objects") { action a b = map_binary (colour_binary (_ "im_dE00_fromLab") im_dE00_fromLab) a b; } UCS_item = class Menuaction (_ "_CMC(l:l)") (_ "calculate CMC(l:l) for two objects") { action a b = map_binary (diff ucs_cvt) a b; } } Colour_adjust_item = class Menupullright (_ "_Adjust") (_ "alter colours in various ways") { Recombination_item = class Menuaction (_ "_Recombination") (_ "recombine colour with an editable matrix") { action x = class _result { _vislevel = 3; matrix = Matrix_rec (identity_matrix (bands x)) { // try to guess a sensible value for the size of the // matrix bands x = x.bands, is_Image x || is_Colour x = x.width, is_Matrix x = bands x.value?0, is_Group x = x.bands, has_member "bands" x = 3; } _result = map_unary (recomb matrix) x; } } Cast_item = class Menuaction (_ "_Cast") (_ "displace neutral axis in CIE Lab") { action x = class _result { _vislevel = 3; gr = Scale "Green-red" (-20) 20 0; by = Scale "Blue-yellow" (-20) 20 0; _result = map_unary adjust_cast x { adjust_cast in = colour_transform_to (get_type in) in'' { in' = colour_transform_to Image_type.LAB in; in'' = in' + Vector [0, gr.value, by.value]; } } } } HSB_item = class Menuaction (_ "_HSB") (_ "adjust hue-saturation-brightness in LCh") { action x = class _result { _vislevel = 3; h = Scale "Hue" 0 360 0; s = Scale "Saturation" 0.01 5 1; b = Scale "Brightness" 0.01 5 1; _result = map_unary adjust_hsb x { adjust_hsb in = colour_transform_to (get_type in) in'' { in' = colour_transform_to Image_type.LCH in; in'' = in' * Vector [b.value, s.value, 1] + Vector [0, 0, h.value]; } } } } } Colour_similar_item = class Menuaction (_ "_Similar Colour") (_ "find pixels with a similar colour") { action x = class _result { _vislevel = 3; target_colour = Colour_picker "Lab" [50, 0, 0]; t = Scale "dE threshold" 0 100 10; _result = map_unary match x { match in = abs_vec (in' - target) < t { target = colour_transform_to Image_type.LAB target_colour; in' = colour_transform_to Image_type.LAB in; } } } } #separator Colour_chart_to_matrix_item = class Menuaction (_ "_Measure Colour Chart") (_ "measure average pixel values for a colour chart image") { action x = class _result { _vislevel = 3; pacross = Expression (_ "Patches across chart") 6; pdown = Expression (_ "Patches down chart") 4; _result = map_unary chart x { chart in = measure 0 0 in.width in.height (to_real pacross) (to_real pdown) in; } } } Colour_matrix_to_chart_item = class Menuaction (_ "Make Synth_etic Colour Chart") (_ "make a colour chart image from a matrix of measurements") { action x = class _result { _vislevel = 3; pacross = Expression (_ "Patches across chart") 6; pdown = Expression (_ "Patches down chart") 4; pwidth = Expression (_ "Patch width in pixels") 50; pheight = Expression (_ "Patch height in pixels") 50; bwidth = Expression (_ "Border between patches") 0; _result = map_unary build_chart x { build_chart in = Image (imagearray_assemble (to_real bwidth) (to_real bwidth) patch_table) { // patch numbers for row starts rowstart = map (multiply (to_real pacross)) [0 .. to_real pdown - 1]; // assemble patches ... each one a pixel value patches = map (take (to_real pacross)) (map (converse drop in.value) rowstart); // make an n-band constant image from eg. [1,2,3] // we don't know the format .. use sRGB (well, why not?) patch v = image_new (to_real pwidth) (to_real pheight) (len v) Image_format.FLOAT Image_coding.NOCODING Image_type.sRGB (Vector v) 0 0; // make an image for each patch patch_table = map (map patch) patches; } } } } Colour_plot_ab_scatter_item = class Menuaction (_ "_Plot ab Scatter") (_ "plot an ab scatter histogram") { action x = class _result { _vislevel = 3; bins = Expression (_ "Number of bins on each axis") 8; _result = map_unary plot_scatter x { plot_scatter in = Image (bg * (((90 / mx) * hist) ++ blk)) { lab = colour_transform_to Image_type.LAB in.value; ab = (unsigned char) ((lab?1 ++ lab?2) + 128); hist = hist_find_nD bins.expr ab; mx = max hist; bg = lab_slice bins.expr 1; blk = 1 + im_black (to_real bins) (to_real bins) 2; } } } } nip2-8.7.0/share/nip2/compat/7.14/_joe_extra.def0000644000175000017500000003260713224651032015752 00000000000000//////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// Frame_item = class Menupullright "Picture _Frame" "working with images of frames" { //////////////////////////////////////////////////////////////////////////////////// Build_frame_item = class Menupullright "_Build Frame From" "builds a new frame from image a and places it around image b" { //////////////////////////////////////////////////////////////////////////////////// Frame_corner_item = class Menuaction "_Frame Corner" "copies and extends a frame corner, a, to produce a complete frame to fit round a given image, b" { prefs = Workspaces.Preferences; action a b = class _result { _check_args = [ [a, "a", check_Image], [b, "b", check_Image] ]; _check_all = [ [a.coding == b.coding && a.bands == b.bands, "a.coding == b.coding && a.bands == b.bands"] ]; _vislevel = 3; ppcm = Expression "Number of pixels per cm" 25; /* Given the value of ppcm, distance between the inner edge of the frame * and the outer edge of the image. +ve values mean the frame overlaps * the image. */ overlap = Expression "Size of frame overlap in cm" 0; variables = class { scale_factor = Expression "scale the size of the frame by" 1; /* These sliders define the fraction of the frames width or height is extracted * to produce each of the particular regions. */ corner_section = Scale "Corner section" 0.1 1 0.5; middle_section = Scale "Middle section" 0.1 1 0.2; blend_fraction = Scale "Blend fraction" 0.1 0.9 0.1; } _type = Image_type.colour_spaces.get_name b.type; //If applied the count colour be seen for -ve values of overlap mount_options = class { apply = Toggle "Apply mount options" false; ls = Expression "Lower mount section bigger by (cm)" 0; mount_colour = Colour _type [0, 0, 0]; _los = ls.expr * ppcm.expr; } _cs = variables.corner_section.value; _ms = variables.middle_section.value; _ov = ppcm.expr * overlap.expr; _sf = variables.scale_factor.expr; _bf = variables.blend_fraction.value; //Scale frame image if required. _a = a, _sf == 1; = a, _sf == 0; = Image (resize _sf _sf Interpolate.BILINEAR a.value); _im_w = b.width; _im_h = b.height + mount_options._los, mount_options.apply = b.height; _os = mount_options._los, mount_options.apply = 0; _cl = Vector mount_options.mount_colour.value, mount_options.apply = 0; //Produce scaled and resized frame. frame = corner_frame _a _im_w _im_h _ov _cs _ms _bf; //Resize image canvas and applied mount colour as required. _pos_im = frame_position_image b frame _os _cl; //Wrap frame round image. _result = if (frame == 0) then _pos_im else frame; } } //////////////////////////////////////////////////////////////////////////////////// Simple_frame_item = class Menuaction "_Simple Frame" "extends or shortens the central sections of a simple frame, a, to fit round a given image, b" { prefs = Workspaces.Preferences; action a b = class _result { _check_args = [ [a, "a", check_Image], [b, "b", check_Image] ]; _check_all = [ [a.coding == b.coding && a.bands == b.bands, "a.coding == b.coding && a.bands == b.bands"] ]; _vislevel = 3; ppcm = Expression "Number of pixels per cm" 25; /* Given the value of ppcm, distance between the inner edge of the frame * and the outer edge of the image. +ve values mean the frame overlaps * the image. */ overlap = Expression "Size of frame overlap in cm" 0; variables = class { scale_factor = Expression "scale the size of the frame by" 1; /* These sliders define the fraction of the frames width or height that * is extracted to produce each of the particular regions. */ corner_section = Scale "Corner section" 0.1 1 0.5; middle_section = Scale "Middle section" 0.1 1 0.2; blend_fraction = Scale "Blend fraction" 0.1 0.9 0.1; option = Toggle "Use mirror of left-side to make right" true; } _type = Image_type.colour_spaces.get_name b.type; //If applied the count colour be seen for -ve values of overlap mount_options = class { apply = Toggle "Apply mount options" false; ls = Expression "Lower mount section bigger by (cm)" 0; mount_colour = Colour _type [0, 0, 0]; _los = ls.expr * ppcm.expr; } _cs = variables.corner_section.value; _ms = variables.middle_section.value; _ov = ppcm.expr * overlap.expr; _sf = variables.scale_factor.expr; _bf = variables.blend_fraction.value; //Scale frame image if required. _a = a, _sf == 1; = a, _sf == 0; = Image (resize _sf _sf Interpolate.BILINEAR a.value); _im_w = b.width; _im_h = b.height + mount_options._los, mount_options.apply = b.height; _os = mount_options._los, mount_options.apply = 0; _cl = Vector mount_options.mount_colour.value, mount_options.apply = 0; //Produce scaled and resized frame. frame = simple_frame _a _im_w _im_h _ov _cs _ms _bf variables.option; //Resize image canvas and applied mount colour as required. _pos_im = frame_position_image b frame _os _cl; //Wrap frame round image. _result = if (frame == 0) then _pos_im else frame; } } //////////////////////////////////////////////////////////////////////////////////// Complex_frame_item = class Menuaction "_Complex Frame" "extends or shortens the central sections of a frame a, preserving any central edge details, to fit image b" { prefs = Workspaces.Preferences; action a b = class _result { _check_args = [ [a, "a", check_Image], [b, "b", check_Image] ]; _check_all = [ [a.coding == b.coding && a.bands == b.bands, "a.coding == b.coding && a.bands == b.bands"] ]; _vislevel = 3; ppcm = Expression "Number of pixels per cm" 25; /* Given the value of ppcm, distance between the inner edge of the frame * and the outer edge of the image. +ve values mean the frame overlaps * the image. */ overlap = Expression "Size of frame overlap in cm" 0; variables = class { scale_factor = Expression "scale the size of the frame by" 1; /* These sliders define the fraction of the frames width or height is extracted * to produce each of the particular regions. */ corner_section = Scale "Corner section" 0.1 1 0.5; edge_section = Scale "Edge section" 0.1 1 0.2; middle_section = Scale "Middle section" 0.1 1 0.2; blend_fraction = Scale "Blend fraction" 0.1 0.9 0.1; option = Toggle "Use mirror of left-side to make right" true; } _type = Image_type.colour_spaces.get_name b.type; //If applied the count colour be seen for -ve values of overlap mount_options = class { apply = Toggle "Apply mount color" false; ls = Expression "Lower mount section bigger by (cm)" 0; colour = Colour _type [0, 0, 0]; _los = ls.expr * ppcm.expr; } _cs = variables.corner_section.value; _es = variables.edge_section.value; _ms = variables.middle_section.value; _ov = ppcm.expr * overlap.expr; _sf = variables.scale_factor.expr; _bf = variables.blend_fraction.value; _a = a, _sf == 1; = a, _sf == 0; = Image (resize _sf _sf Interpolate.BILINEAR a.value); _im_w = b.width; _im_h = b.height + mount_options._los, mount_options.apply = b.height; _os = mount_options._los, mount_options.apply = 0; _cl = Vector mount_options.colour.value, mount_options.apply = 0; //Produce scaled and resized frame. frame = complex_frame _a _im_w _im_h _ov _cs _es _ms _bf variables.option; //Resize image canvas and applied mount colour as required. _pos_im = frame_position_image b frame _os _cl; //Wrap frame round image. _result = if (frame == 0) then _pos_im else frame; } } } //////////////////////////////////////////////////////////////////////////////////// Straighten_frame_item = class Menuaction "_Straighten Frame" "uses four points to square up distorted images of frames" { action a = Perspective_item.action a; } }; //////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// Select_item = class Menupullright "_Select" "select user defined areas of an image" { prefs = Workspaces.Preferences; /* Option toggle used to define whether the user is replacing a * dark or a light area. */ _control = Option "Make" [ "Selection Brighter", "Selection Darker", "Selection Black", "Selection White", "Background Black", "Background White", "Mask" ] 6; control_selection mask im no = (if mask then im * 1.2 else im * 1), no == 0 = (if mask then im * 0.8 else im * 1), no == 1 = (if mask then 0 else im), no == 2 = (if mask then 255 else im), no == 3 = (if mask then im else 0), no == 4 = (if mask then im else 255), no == 5 = mask; Elipse = class Menuaction "_Ellipse" "use a line/arrow x to define the center point radius and direction of an ellipse" { action x = class _result { _vislevel = 3; control = _control; width = Scale "Width" 0.01 1 0.5; _result = control_selection mask im control { mask = select_ellipse x width.value; im = x.image; } } } Tetragon = class Menuaction "_Tetragon" "selects the convex area defined by four points" { action a b c d = class _result { _vislevel = 3; control = _control; _result = control_selection mask im control { mask = select_tetragon a b c d; im = a.image; } } } Polygon = class Menuaction "_Polygon" "selects a polygon from an ordered group of points" { action pt_list = class _result { _vislevel = 3; control = _control; _result = control_selection mask im control { mask = select_polygon pt_list; im = ((pt_list.value)?0).image; } } } sep1 = Menuseparator; Threshold_item = class Menuaction "Thres_hold" "simple image threshold" { action x = class _result { _vislevel = 3; t = Scale "Threshold" 0 mx (mx / 2) { mx = Image_format.maxval x.format, is_Image x = 255; } _result = map_unary (more t.value) x; } } Threshold_percent_item = class Menuaction "Per_cent Threshold" "threshold at a percentage of pixels" { action x = class _result { _vislevel = 3; t = Scale "Percentage of pixels" 0 100 50; _result = map_unary (more (hist_thresh (t.value / 100) x)) x; } } }; //////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// Perspective_match_item = class Menuaction "_Perspective Match" "rotate, scale and skew one image to match another" { action x y = class _result { _vislevel = 3; // try to find an image ... for a group, get the first item find_image x = x, is_Image x = find_image x?0, is_list x = find_image x.value, is_class x && has_value x = error "unable to find image"; _a = find_image x; _b = find_image y; ap1 = Mark_relative _a 0.1 0.1; ap2 = Mark_relative _a 0.9 0.1; ap3 = Mark_relative _a 0.1 0.9; ap4 = Mark_relative _a 0.9 0.9; bp1 = Mark_relative _b 0.1 0.1; bp2 = Mark_relative _b 0.9 0.1; bp3 = Mark_relative _b 0.1 0.9; bp4 = Mark_relative _b 0.9 0.9; _result = map_binary process x y { f1 = _a.width / _b.width; f2 = _a.height / _b.height; rl = sort_pts_clockwise [ap1, ap2, ap3, ap4]; pl = sort_pts_clockwise [bp1, bp2, bp3, bp4]; to = [ rl?0.left, rl?0.top, rl?1.left, rl?1.top, rl?2.left, rl?2.top, rl?3.left, rl?3.top ]; from = [ pl?0.left * f1, pl?0.top * f2, pl?1.left * f1, pl?1.top * f2, pl?2.left * f1, pl?2.top * f2, pl?3.left * f1, pl?3.top * f2 ]; trans = perspective_transform to from; process a b = transform 1 0 trans b2 { b2 = resize f1 f2 1 b, (f1 >= 1 && f2 >= 1) || (f1 >= 1 && f2 >= 1) = resize f1 1 1 b1 {b1 = resize 1 f2 1 b;} } } } } //////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// Perspective_item = class Menuaction "Pe_rspective Distort" "rotate, scale and skew an image with respect to defined points" { action x = class _result { _vislevel = 3; // try to find an image ... for a group, get the first item find_image x = x, is_Image x = find_image x?0, is_list x = find_image x.value, is_class x && has_value x = error "unable to find image"; _a = find_image x; dir = Option "Select distort direction" [ "Distort to points", "Distort to corners" ] 1; ap1 = Mark_relative _a 0.1 0.1; ap2 = Mark_relative _a 0.9 0.1; ap3 = Mark_relative _a 0.9 0.9; ap4 = Mark_relative _a 0.1 0.9; _result = map_unary process x { trans = [perspective_transform to from, perspective_transform from to]?(dir.value) { rl = sort_pts_clockwise [ap1, ap2, ap3, ap4]; to = [(rl?0).left, (rl?0).top, (rl?1).left, (rl?1).top, (rl?2).left, (rl?2).top, (rl?3).left, (rl?3).top]; from=[0, 0, (_a.width - 1), 0, (_a.width - 1), (_a.height - 1), 0, (_a.height - 1)]; } process a = transform 1 0 trans a; } } }; nip2-8.7.0/share/nip2/compat/7.14/_generate.def0000644000175000017500000000514013224651032015554 00000000000000 /* make an image of size x by y whose pixels are their coordinates. */ make_xy x y = im_make_xy (to_real x) (to_real y); /* make an image with the specified properties ... pixel is (eg.) * Vector [0, 0, 0], or 12. If coding == labq, we ignore bands, format and * type, generate a 3 band float image, and lab2labq it before handing it * back. */ image_new w h b fmt coding type pixel xoff yoff = im'''' { b' = 3, coding == Image_coding.LABPACK = b; fmt' = Image_format.FLOAT, coding == Image_coding.LABPACK = fmt; type' = Image_type.LAB, coding == Image_coding.LABPACK = type; im = im_black (to_real w) (to_real h) (to_real b') + pixel; im' = clip2fmt fmt' im; im'' = im_Lab2LabQ im', coding == Image_coding.LABPACK; = im'; im''' = image_set_type type' im''; im'''' = image_set_origin xoff yoff im'''; } /* generate a slice of LAB space size x size pixels for L* == l */ lab_slice size l = image_set_type Image_type.LAB im { L = image_new size size 1 Image_format.FLOAT Image_coding.NOCODING Image_type.B_W l 0 0; A1 = im_fgrey (to_real size) (to_real size); /* im_fgrey always makes 0-1, so these ranges can be wired in. */ A2 = A1 * 256 - 128; A4 = im_rot90 A2; im = image_set_origin (size / 2) (size / 2) (L ++ A2 ++ A4); } /* Look at Image, try to make a Colour (failing that, a Vector) which is white * for that image type. */ image_white im = colour_transform_to type white_lab, bands == 3 && coding == Image_coding.NOCODING && colour_spaces.present 1 type = white_lab, coding == Image_coding.LABPACK = Vector (replicate bands (max_value.lookup 1 0 format)) { bands = im.bands; type = im.type; format = im.format; coding = im.coding; colour_spaces = Image_type.colour_spaces; // white as LAB white_lab = Colour "Lab" [100, 0, 0]; // maximum value for this numeric type max_value = Table [ [255, Image_format.DPCOMPLEX], [255, Image_format.DOUBLE], [255, Image_format.COMPLEX], [255, Image_format.FLOAT], [2 ** 31 - 1, Image_format.INT], [2 ** 32 - 1, Image_format.UINT], [2 ** 15 - 1, Image_format.SHORT], [2 ** 16 - 1, Image_format.USHORT], [2 ** 7 - 1, Image_format.CHAR], [2 ** 8 - 1, Image_format.UCHAR] ]; } /* Make a seperable gaussian mask. */ matrix_gaussian_blur radius = Matrix_con mask_g_sum 0 [mask_g_line] { mask_g = im_gauss_imask (radius / 3) 0.2; mask_g_line = mask_g.value?(mask_g.height / 2); mask_g_sum = sum mask_g_line; } /* Make a seperable square mask. */ matrix_blur radius = Matrix_con (sum mask_sq_line) 0 [mask_sq_line] { mask_sq_line = replicate (2 * radius - 1) 1; } nip2-8.7.0/share/nip2/compat/7.14/Math.def0000644000175000017500000003044013224651032014515 00000000000000Math_arithmetic_item = class Menupullright "_Arithmetic" "basic arithmetic for objects" { Add_item = class Menuaction "_Add" "add a and b" { action a b = map_binary add a b; } Subtract_item = class Menuaction "_Subtract" "subtract b from a" { action a b = map_binary subtract a b; } Multiply_item = class Menuaction "_Multiply" "multiply a by b" { action a b = map_binary multiply a b; } Divide_item = class Menuaction "_Divide" "divide a by b" { action a b = map_binary divide a b; } Remainder_item = class Menuaction "_Remainder" "remainder after integer division of a by b" { action a b = map_binary remainder a b; } sep1 = Menuseparator; Absolute_value_item = class Menuaction "A_bsolute Value" "absolute value of x" { action x = map_unary abs x; } Absolute_value_vector_item = class Menuaction "Absolute Value _Vector" "like Absolute Value, but treat pixels as vectors" { action x = map_unary abs_vec x; } Sign_item = class Menuaction "S_ign" "unit vector" { action x = map_unary sign x; } Negate_item = class Menuaction "_Negate" "multiply by -1" { action x = map_unary unary_minus x; } } Math_trig_item = class Menupullright "_Trigonometry" "trigonometry operations (all in degrees)" { Sin_item = class Menuaction "_Sine" "calculate sine x" { action x = map_unary sin x; } Cos_item = class Menuaction "_Cosine" "calculate cosine x" { action x = map_unary cos x; } Tan_item = class Menuaction "_Tangent" "calculate tangent x" { action x = map_unary tan x; } sep1 = Menuseparator; Asin_item = class Menuaction "Arc S_ine" "calculate arc sine x" { action x = map_unary asin x; } Acos_item = class Menuaction "Arc C_osine" "calculate arc cosine x" { action x = map_unary acos x; } Atan_item = class Menuaction "Arc T_angent" "calculate arc tangent x" { action x = map_unary atan x; } sep2 = Menuseparator; Rad_item = class Menuaction "_Degrees to Radians" "convert degrees to radians" { action x = map_unary rad x; } Deg_item = class Menuaction "_Radians to Degrees" "convert radians to degrees" { action x = map_unary deg x; } sep3 = Menuseparator; Angle_range_item = class Menuaction "Angle i_n Range" "is angle within t degrees of r, mod 360" { action t r angle = clock (max - angle) < 2*r { max = clock (t + r); clock a = a + 360, a < 0; = a - 360, a >= 360; = a; } } } Math_log_item = class Menupullright "_Log" "logarithms and anti-logs" { Exponential_item = class Menuaction "_Exponential" "calculate e ** x" { action x = map_unary (power e) x; } Log_natural_item = class Menuaction "Natural _Log" "log base e of x" { action x = map_unary log x; } sep1 = Menuseparator; Exponential10_item = class Menuaction "E_xponential base 10" "calculate 10 ** x" { action x = map_unary (power 10) x; } Log10_item = class Menuaction "L_og Base 10" "log base 10 of x" { action x = map_unary log10 x; } sep2 = Menuseparator; Raise_to_power_item = class Menuaction "_Raise to Power" "calculate x ** y" { action x y = map_binary power x y; } } Math_complex_item = class Menupullright "_Complex" "operations on complex numbers and images" { Complex_extract = class Menupullright "_Extract" "extract fields from complex" { Real_item = class Menuaction "_Real" "extract real part of complex" { action in = map_unary re in; } Imaginary_item = class Menuaction "_Imaginary" "extract imaginary part of complex" { action in = map_unary im in; } } Complex_build_item = class Menuaction "_Build" "join a and b to make a complex" { action a b = map_binary comma a b; } sep1 = Menuseparator; Polar_item = class Menuaction "_Polar" "convert real and imag to amplitude and phase" { action a = map_unary polar a; } Rectangular_item = class Menuaction "_Rectagular" ("convert (amplitude, phase) image to rectangular " ++ "coordinates") { action x = map_unary rectangular x; } sep2 = Menuseparator; Conjugate_item = class Menuaction "_Conjugate" "invert imaginary part" { action x = map_unary conj x; } } Math_boolean_item = class Menupullright "_Boolean" "bitwise boolean operations for integer objects" { And_item = class Menuaction "_And" "bitwise and of a and b" { action a b = map_binary bitwise_and a b; } Or_item = class Menuaction "_Or" "bitwise or of a and b" { action a b = map_binary bitwise_or a b; } Eor_item = class Menuaction "E_xclusive Or" "bitwise exclusive or of a and b" { action a b = map_binary eor a b; } Not_item = class Menuaction "_Not" "invert a" { action a = map_unary not a; } sep1 = Menuseparator; Right_shift_item = class Menuaction "Shift _Right" "shift a right by b bits" { action a b = map_binary right_shift a b; } Left_shift_item = class Menuaction "Shift _Left" "shift a left by b bits" { action a b = map_binary left_shift a b; } sep2 = Menuseparator; If_then_else_item = class Menuaction "_If Then Else" "b where a is non-zero, c elsewhere" { action a b c = map_trinary ite a b c { // can't use if_then_else, we need a true trinary ite a b c = if a then b else c; } } Band_or_item = class Menuaction "Band O_r" "or the bands of an image together" { action im = map_unary (foldr1 bitwise_or @ bandsplit) im; } Band_and_item = class Menuaction "Band A_nd" "and the bands of an image together" { action im = map_unary (foldr1 bitwise_and @ bandsplit) im; } } Math_relational_item = class Menupullright "R_elational" "comparison operations" { Equal_item = class Menuaction "_Equal to" "test a equal to b" { action a b = map_binary equal a b; } Not_equal_item = class Menuaction "_Not Equal to" "test a not equal to b" { action a b = map_binary not_equal a b; } sep1 = Menuseparator; More_item = class Menuaction "_More Than" "test a strictly greater than b" { action a b = map_binary more a b; } Less_item = class Menuaction "_Less Than" "test a strictly less than b" { action a b = map_binary less a b; } sep2 = Menuseparator; More_equal_item = class Menuaction "M_ore Than or Equal to" "test a greater than or equal to b" { action a b = map_binary more_equal a b; } Less_equal_item = class Menuaction "L_ess Than or Equal to" "test a less than or equal to b" { action a b = map_binary less_equal a b; } } Math_list_item = class Menupullright "L_ist" "operations on lists" { Head_item = class Menuaction "_Head" "first element in list" { action x = map_unary hd x; } Tail_item = class Menuaction "_Tail" "list without the first element" { action x = map_unary tl x; } Last_item = class Menuaction "_Last" "last element in list" { action x = map_unary last x; } Init_item = class Menuaction "_Init" "list without the last element" { action x = map_unary init x; } sep1 = Menuseparator; Reverse_item = class Menuaction "_Reverse" "reverse order of elements in list" { action x = map_unary reverse x; } Sort_item = class Menuaction "_Sort" "sort list into ascending order" { action x = map_unary sort x; } Make_set_item = class Menuaction "_Make Set" "remove duplicates from list" { action x = map_unary mkset equal x; } Transpose_list_item = class Menuaction "Tr_anspose" "exchange rows and columns in a list of lists" { action x = map_unary transpose x; } Concat_item = class Menuaction "_Concat" "flatten a list of lists into a single list" { action l = map_unary concat l; } sep2 = Menuseparator; Length_item = class Menuaction "L_ength" "find the length of list" { action x = map_unary len x; } Subscript_item = class Menuaction "S_ubscript" "return element n from list (index from zero)" { action n x = map_binary subscript n x; } Take_item = class Menuaction "_Take" "take the first n elements of list x" { action n x = map_binary take n x; } Drop_item = class Menuaction "_Drop" "drop the first n elements of list x" { action n x = map_binary drop n x; } sep3 = Menuseparator; Join_item = class Menuaction "_Join" "join two lists end to end" { action a b = map_binary join a b; } Cons_item = class Menuaction "C_ons" "put element a on the front of list x" { action a x = map_binary cons a x; } Zip_item = class Menuaction "_Zip" "join two lists, pairwise" { action a b = map_binary zip2 a b; } } Math_round_item = class Menupullright "_Round" "various rounding operations" { /* smallest integral value not less than x */ Ceil_item = class Menuaction "_Ceil" "smallest integral value not less than x" { action x = map_unary ceil x; } Floor_item = class Menuaction "_Floor" "largest integral value not greater than x" { action x = map_unary floor x; } Rint_item = class Menuaction "_Round to Nearest" "round to nearest integer" { action x = map_unary rint x; } } Math_fourier_item = class Menupullright "_Fourier" "Fourier transform" { Forward_item = class Menuaction "_Forward" "fourier transform of image" { action a = map_unary (rotquad @ fwfft) a; } Reverse_item = class Menuaction "_Reverse" "inverse fourier transform of image" { action a = map_unary (invfft @ rotquad) a; } Rotate_quadrants_item = class Menuaction "Rotate _Quadrants" "rotate quadrants" { action a = map_unary rotquad a; } } Math_stats_item = class Menupullright "_Statistics" "measure various statistics of objects" { Mean_item = class Menuaction "_Mean" "arithmetic mean value" { action a = map_unary mean a; } Gmean_item = class Menuaction "_Geometric Mean" "geometric mean value" { action a = map_unary meang a; } Zmean_item = class Menuaction "_Zero-excluding Mean" "mean value of non-zero elements" { action a = map_unary meanze a; } Deviation_item = class Menuaction "_Standard Deviation" "standard deviation of object" { action a = map_unary deviation a; } Zdeviation_item = class Menuaction "Z_ero-excluding Standard Deviation" "standard deviation of non-zero elements" { action a = map_unary deviationze a; } Stats_item = class Menuaction "Ma_ny Stats" "calculate many stats in a single pass" { action a = map_unary stats a; } sep1 = Menuseparator; Max_item = class Menuaction "M_aximum" "maximum of object" { action a = map_unary max a; } Min_item = class Menuaction "M_inimum" "minimum of object" { action a = map_unary min a; } Maxpos_item = class Menuaction "_Position of Maximum" "position of maximum in object" { action a = map_unary maxpos a; } Minpos_item = class Menuaction "P_osition of Minimum" "position of minimum in object" { action a = map_unary minpos a; } Gravity_item = class Menuaction "Centre of _Gravity" "position of centre of gravity" { action a = map_unary gravity a; } sep2 = Menuseparator; Count_set_item = class Menuaction "_Non-zeros" "number of non-zero elements in object" { action a = map_unary cset a { cset i = (mean (i != 0) * i.width * i.height) / 255; } } Count_clear_item = class Menuaction "_Zeros" "number of zero elements in object" { action a = map_unary cclear a { cclear i = (mean (i == 0) * i.width * i.height) / 255; } } Count_edges_item = class Menuaction "_Edges" "count average edges across or down image" { action x = class _result { _vislevel = 3; edge = Option "Count" [ "Horizontal lines", "Vertical lines" ] 0; _result = map_unary process x { process image = Number (edge.labels?edge) (im_cntlines image.value edge.value); } } } sep3 = Menuseparator; Linear_regression_item = class Menuaction "_Linear Regression" "fit a line to a set of points" { action xes yes = linreg xes yes; } Weighted_linear_regression_item = class Menuaction "_Weighted Linear Regression" "fit a line to a set of points and deviations" { action xes yes devs = linregw xes yes devs; } } Math_base_item = class Menupullright "Bas_e" "convert number bases" { Hexadecimal_item = class Menuaction "_Hexadecimal" "convert to hexadecimal (base 16)" { action a = map_unary (print_base 16) a; } Binary_item = class Menuaction "_Binary" "convert to binary (base 2)" { action a = map_unary (print_base 2) a; } Octal_item = class Menuaction "_Octal" "convert to octal (base 8)" { action a = map_unary (print_base 8) a; } } nip2-8.7.0/share/nip2/compat/7.14/Tasks.def0000644000175000017500000006177613224651032014731 00000000000000Tasks_capture_item = class Menupullright "_Capture" "useful stuff for capturing and preprocessing images" { Csv_import_item = class Menuaction "_CSV Import" "read a file of comma-separated values" { action = class _result { _vislevel = 3; path = Pathname "File to load" "empty"; start_line = Expression "Start at line" 1; rows = Expression "Lines to read (-1 for whole file)" (-1); whitespace = String "Whitespace characters" " \""; separator = String "Separator characters" ",;\t"; _result = Image blank, path.value == "empty" = Image (im_csv2vips filename) { filename = search (expand path.value) ++ ":" ++ "skip:" ++ print (start_line.expr - 1) ++ "," ++ "whi:" ++ escape whitespace.value ++ "," ++ "sep:" ++ escape separator.value ++ "," ++ "line:" ++ print rows.expr; // prefix any ',' with a '\' in the separators line escape x = foldr prefix [] x { prefix x l = '\\' : x : l, x == ',' = x : l; } blank = image_new 1 1 1 Image_format.DOUBLE Image_coding.NOCODING Image_type.B_W 0 0 0; } } } // interpret Analyze header for layout and calibration Analyze7_header_item = class Menuaction "_Interpret Analyze 7 Header" "examine the Analyze header and set layout and value" { action x = x''' { // read bits of header dim n = get_header ("dsr-image_dimension.dim[" ++ print n ++ "]"); dim0 = dim 0 x; dim1 = dim 1 x; dim2 = dim 2 x; dim3 = dim 3 x; dim4 = dim 4 x; dim5 = dim 5 x; dim6 = dim 6 x; dim7 = dim 7 x; glmax = get_header "dsr-image_dimension.glmax" x; cal_max = get_header "dsr-image_dimension.cal_max" x; // oops, now a nop x' = x; // lay out higher dimensions width-ways x'' = grid dim2 dim3 1 x', dim0 == 3 = grid dim2 dim3 dim4 x', dim0 == 4 = grid (dim2 * dim4) dim5 1 (grid dim2 dim3 dim4) x', dim0 == 5 = grid (dim2 * dim4) dim5 dim6 (grid dim2 dim3 dim4) x', dim0 == 6 = grid (dim2 * dim4 * dim6) dim7 1 (grid (dim2 * dim4) dim5 dim6 (grid dim2 dim3 dim4)) x', dim0 == 7 = error (_ "unsupported dimension " ++ dim0); // multiply by scale factor to get kBeq x''' = x'' * (cal_max / glmax); } } Video_item = class Menuaction "Capture _Video Frame" "capture a frame of still video" { // shortcut to prefs prefs = Workspaces.Preferences; action = class _result { _vislevel = 3; device = prefs.VIDEO_DEVICE; channel = Option "Input channel" [ "TV", "Composite 1", "Composite 2", "Composite 3" ] prefs.VIDEO_CHANNEL; b = Scale "Brightness" 0 32767 prefs.VIDEO_BRIGHTNESS; col = Scale "Colour" 0 32767 prefs.VIDEO_COLOUR; con = Scale "Contrast" 0 32767 prefs.VIDEO_CONTRAST; hue = Scale "Hue" 0 32767 prefs.VIDEO_HUE; frames = Scale "Frames to average" 0 100 prefs.VIDEO_FRAMES; mono = Toggle "Monochrome grab" prefs.VIDEO_MONO; crop = Toggle "Crop image" prefs.VIDEO_CROP; // grab, but hide it ... if we let the crop edit _raw_grab = Image (im_video_v4l1 device channel.value b.value col.value con.value hue.value frames.value); edit_crop = Region _raw_grab left top width height { left = prefs.VIDEO_CROP_LEFT; top = prefs.VIDEO_CROP_TOP; width = min_pair prefs.VIDEO_CROP_WIDTH (_raw_grab.width + left); height = min_pair prefs.VIDEO_CROP_HEIGHT (_raw_grab.height + top); } aspect_ratio = Expression "Stretch vertically by" prefs.VIDEO_ASPECT; _result = frame' { frame = edit_crop, crop = _raw_grab; frame' = colour_transform_to Image_type.B_W frame, mono = frame; } } } Smooth_image_item = class Menuaction "_Smooth" "remove small features from image" { action in = class _result { _vislevel = 3; feature = Scale "Minimum feature size" 1 50 20; _result = map_unary (smooth feature.value) in; } } Light_correct_item = class Menuaction "_Flatfield" "use white image w to flatfield image i" { action w i = map_binary wc w i { wc w i = clip2fmt i.format (w' * i) { fac = mean w / max w; w' = fac * (max w / w); } } } Image_rank_item = Filter_rank_item.Image_rank_item; Tilt_item = Filter_tilt_item; sep1 = Menuseparator; White_balance_item = class Menuaction "_White Balance" "use average of small image to set white of large image" { action a b = class _result { _vislevel = 3; white_hint = "Set image white to:"; white = Colour_picker "Lab" [100, 0, 0]; _result = map_binary wb a b { wb a b = colour_transform_to (get_type image) image_xyz' { area x = x.width * x.height; larger x y = area x > area y; [image, patch] = sortc larger [a, b]; to_xyz = colour_transform_to Image_type.XYZ; // white balance in XYZ patch_xyz = to_colour (to_xyz patch); white_xyz = to_xyz white; facs = (mean patch_xyz / mean white_xyz) * (white_xyz / patch_xyz); image_xyz = to_xyz image; image_xyz' = image_xyz * facs; } } } } Gamma_item = Image_levels_item.Gamma_item; Tone_item = Image_levels_item.Tone_item; sep2 = Menuseparator; Crop_item = Image_crop_item; Rotate_item = Image_transform_item.Rotate_item; Flip_item = Image_transform_item.Flip_item; Resize_item = Image_transform_item.Resize_item; Rubber_item = Image_transform_item.Image_rubber_item; sep3 = Menuseparator; ICC_item = Colour_icc_item; Temp_item = Colour_temperature_item; Find_calib_item = class Menuaction "Find _Colour Calibration" "find an RGB -> XYZ transform from an image of a colour chart" { action image = class _result { _check_args = [ [image, "image", check_Image] ]; _vislevel = 3; // get macbeth data file to use macbeth = Pathname "Pick a Macbeth data file" "$VIPSHOME/share/$PACKAGE/data/macbeth_lab_d65.mat"; mode = Option "Input LUT" [ "Linear input", "Fit intercept from chart greyscale", "Linearize input from chart greyscale" ] 2; // get max of input image _max_value = Image_format.maxval image.format; // measure chart image _camera = measure 0 0 image.width image.height 6 4 image.value; // load true values _true_Lab = Matrix_file macbeth.value; _true_XYZ = colour_transform Image_type.LAB Image_type.XYZ _true_Lab; // get Ys of greyscale _true_grey_Y = map (extract 1) (drop 18 _true_XYZ.value); // camera greyscale (all bands) _camera_grey = drop 18 _camera.value; // normalise both to 0-1 and combine _camera_grey' = map (map (multiply (1 / _max_value))) _camera_grey; _true_grey_Y' = map (multiply (1 / 100)) _true_grey_Y; _comb = Matrix [[0, 0], [1, 1]], mode == 0 = Matrix [0: intercepts, replicate (_camera.width + 1) 1], mode == 1 = Matrix (map2 cons _true_grey_Y' _camera_grey') { intercepts = [(linreg _true_grey_Y' cam).intercept :: cam <- transpose _camera_grey']; } // make a linearising lut ... zero on left _linear_lut = im_invertlut _comb (_max_value + 1); // and display it // plot from 0 explicitly so we see the effect of mode1 (intercept // from greyscale) linearising_lut = Plot [$ymin => 0] _linear_lut; // map the original image through the lineariser to // get linear 0-1 RGB image _image' = hist_map linearising_lut.value image.value; // remeasure and solve for RGB -> XYZ _camera' = im_measure _image' 0 0 image.width image.height 6 4; _pinv = (transpose _camera' * _camera') ** -1; M = transpose (_pinv * transpose _camera' * _true_XYZ); // convert linear RGB camera to Lab _result = (Image @ colour_transform Image_type.XYZ Image_type.LAB @ cast_float @ recomb M) _image'; // measure again and compute dE76 _camera'' = im_measure _result.value 0 0 image.width image.height 6 4; _dEs = map abs_vec (_camera'' - _true_Lab).value; final_dE76 = mean _dEs; _max_dE = foldr max_pair 0 _dEs; _worst = index (equal _max_dE) _dEs; worst_patch = name _worst ++ " (patch " ++ print (_worst + 1) ++ ", " ++ print _max_dE ++ " dE)" { name i = macbeth_names?i, i >= 0 && i < len macbeth_names = "Unknown"; } } } Apply_calib_item = class Menuaction "_Apply Colour Calibration" "apply an RGB -> LAB transform to an image" { action a b = class (map_binary process a b) { process a b = result, is_instanceof calib_name calib && is_Image image = error (_ "bad arguments to " ++ "Calibrate_image") { // the name of the calib object we need calib_name = "Tasks_capture_item.Find_calib_item.action"; // get the Calibrate_chart arg first [image, calib] = sortc (const (is_instanceof calib_name)) [a, b]; // map the original image through the lineariser to get // linear 0-1 RGB image image' = hist_map calib.linearising_lut image; // convert linear RGB camera to Lab result = colour_transform Image_type.XYZ Image_type.LAB ((float) (recomb calib.M image')); } } } sep4 = Menuseparator; Graph_hist_item = Hist_find_item; Graph_bands_item = class Menuaction "Plot _Bands" "show image bands as a graph" { action x = class _result { _vislevel = 3; style = Option_enum Plot_style.names "Style" "Line"; auto = Toggle "Auto Range" true; ymin = Expression "Y range minimum" 0; ymax = Expression "Y range maximum" 1; _result = Plot options (to_image (bands (image x))).value { options = [$style => style.value] ++ if auto then [] else [$ymin => ymin.expr, $ymax => ymax.expr]; // try to make something image-like from it image x = extract_area x.left x.top 1 1 x.image, is_Mark x = get_image x, has_image x = get_image (to_image x); // get as [[1],[2],[3]] bands x = transpose [map mean (bandsplit x)]; } } } } Tasks_mosaic_item = class Menupullright "_Mosaic" "build image mosaics" { /* Check and group a point list by image. */ mosaic_sort_test l = error "mosaic: not all points", !is_listof is_Mark l = error "mosaic: points not on two images", !is_list_len 2 images = error "mosaic: images do not match in format and coding", !all_equal (map get_format l) || !all_equal (map get_coding l) = error "mosaic: not same number of points on each image", !foldr1 equal (map len l') = l' { // test for all elements of a list equal all_equal l = all (map (equal (hd l)) (tl l)); // all the different images images = mkset pointer_equal (map get_image l); // find all points defined on image test_image image p = (get_image p) === image; find l image = filter (test_image image) l; // group point list by image l' = map (find l) images; } /* Sort a point group to get right before left, and within each group to * get above before below. */ mosaic_sort_lr l = l'' { // sort to get upper point first above a b = a.top < b.top; l' = map (sortc above) l; // sort to get right group before left group right a b = a?0.left > b?0.left; l'' = sortc right l'; } /* Sort a point group to get top before bottom, and within each group to * get left before right. */ mosaic_sort_tb l = l'' { // sort to get upper point first left a b = a.left < b.left; l' = map (sortc left) l; // sort to get right group before left group below a b = a?0.top > b?0.top; l'' = sortc below l'; } /* Put 'em together! Group by image, sort vertically (or horizontally) with * one of the above, transpose to get pairs matched up, and flatten again. */ mosaic_sort fn = concat @ transpose @ fn @ mosaic_sort_test; Mosaic_1point_item = class Menupullright "_One Point" "join two images with a single tie point" { check_ab_args a b = [ [a, "a", check_Mark], [b, "b", check_Mark] ]; // shortcut to prefs prefs = Workspaces.Preferences; search_area = prefs.MOSAIC_WINDOW_SIZE; object_size = prefs.MOSAIC_OBJECT_SIZE; blend_width_widget = Scale "Maximum blend width" 0 100 prefs.MOSAIC_MAX_BLEND_WIDTH; refine_widget = Toggle "Refine selected tie-points" prefs.MOSAIC_REFINE; lr_mos _refine a b = class Image _result { _check_args = check_ab_args a b; bw = blend_width_widget; refine = _refine; _result = im_lrmosaic a'.image.value b'.image.value 0 a'.left a'.top b'.left b'.top (object_size / 2) (search_area / 2) 0 bw.value, refine = im_lrmerge a'.image.value b'.image.value (b'.left - a'.left) (b'.top - a'.top) bw.value { [a', b'] = mosaic_sort mosaic_sort_lr [a, b]; } } tb_mos _refine a b = class Image _result { _check_args = check_ab_args a b; bw = blend_width_widget; refine = _refine; _result = im_tbmosaic a'.image.value b'.image.value 0 a'.left a'.top b'.left b'.top (object_size / 2) (search_area / 2) 0 bw.value, refine = im_tbmerge a'.image.value b'.image.value (b'.left - a'.left) (b'.top - a'.top) bw.value { [a', b'] = mosaic_sort mosaic_sort_tb [a, b]; } } Left_right_item = class Menuaction "_Left to Right" "join two images left-right with a single tie point" { action a b = lr_mos refine_widget a b; } Top_bottom_item = class Menuaction "_Top to Bottom" "join two images top-bottom with a single tie point" { action a b = tb_mos refine_widget a b; } sep1 = Menuseparator; Left_right_manual_item = class Menuaction "Manual L_eft to Right" "join left-right, no auto-adjust of tie points" { action a b = lr_mos false a b; } Top_bottom_manual_item = class Menuaction "Manual T_op to Bottom" "join top-bottom, no auto-adjust of tie points" { action a b = tb_mos false a b; } } Mosaic_2point_item = class Menupullright "_Two Point" "join two images with two tie points" { check_abcd_args a b c d = [ [a, "a", check_Mark], [b, "b", check_Mark], [c, "c", check_Mark], [d, "d", check_Mark] ]; // shortcut to prefs prefs = Workspaces.Preferences; search_area = prefs.MOSAIC_WINDOW_SIZE; object_size = prefs.MOSAIC_OBJECT_SIZE; blend_width_widget = Scale "Maximum blend width" 0 100 prefs.MOSAIC_MAX_BLEND_WIDTH; refine_widget = Toggle "Refine selected tie-points" prefs.MOSAIC_REFINE; Left_right_item = class Menuaction "_Left to Right" "join two images left-right with a pair of tie points" { action a b c d = class Image _result { _check_args = check_abcd_args a b c d; bw = blend_width_widget; refine = refine_widget; _result = im_lrmosaic1 a'.image.value b'.image.value 0 a'.left a'.top b'.left b'.top c'.left c'.top d'.left d'.top (object_size / 2) (search_area / 2) 0 bw.value, refine = im_lrmerge1 a'.image.value b'.image.value a'.left a'.top b'.left b'.top c'.left c'.top d'.left d'.top bw.value { [a', b', c', d'] = mosaic_sort mosaic_sort_lr [a, b, c, d]; } } } Top_bottom_item = class Menuaction "_Top to Bottom" "join two images top-bottom with a pair of tie points" { action a b c d = class Image _result { _check_args = check_abcd_args a b c d; bw = blend_width_widget; refine = refine_widget; _result = im_tbmosaic1 a'.image.value b'.image.value 0 a'.left a'.top b'.left b'.top c'.left c'.top d'.left d'.top (object_size / 2) (search_area / 2) 0 bw.value, refine = im_tbmerge1 a'.image.value b'.image.value a'.left a'.top b'.left b'.top c'.left c'.top d'.left d'.top bw.value { [a', b', c', d'] = mosaic_sort mosaic_sort_tb [a, b, c, d]; } } } } sep1 = Menuseparator; Balance_item = class Menuaction "Mosaic _Balance" "disassemble mosaic, scale brightness to match, reassemble" { action x = map_unary balance x { balance x = oo_unary_function balance_op x, is_class x = im_global_balancef x Workspaces.Preferences.MOSAIC_BALANCE_GAMMA, is_image x = error (_ "bad arguments to " ++ "balance") { balance_op = Operator "balance" balance Operator_type.COMPOUND_REWRAP false; } } } //////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// Manual_balance_item = class Menupullright "Manual B_alance" "balance tonality of user defined areas" { prefs = Workspaces.Preferences; //////////////////////////////////////////////////////////////////////////////////// Balance_find_item = class Menuaction "_Find Values" "calculates values required to scale and offset balance user defined areas in a given image" /* Outputs a matrix of scale and offset values. Eg. Values required to balance the secondary * structure in an X-ray image. Takes an X-ray image an 8-bit control mask and a list of * 8-bit reference masks, where the masks are white on a black background. */ { action im_in m_control m_group = class Matrix values{ _vislevel = 1; _control_im = if m_control then im_in else 0; _control_meanmax = so_meanmax _control_im; _group_check = is_Group m_group; _m_list = m_group.value, _group_check = m_group; process m_current mat_in = mat_out {so_values = so_calculate _control_meanmax im_in m_current; mat_out = join [so_values] mat_in;} values = (foldr process [] _m_list); } } //////////////////////////////////////////////////////////////////////////////////// Balance_check_item = class Menuaction "_Check Values" "allows calculated set of scale and offset values to be checked and adjusted if required" /* Outputs adjusted matrix of scale and offset values and scale and offset image maps. * Eg. Check values required to balance the secondary structure in an X-ray image. * Takes an X-ray image an 8-bit control mask and a list of 8-bit reference masks, * where the masks are white on a black background. */ { action im_in m_matrix m_group = class Image value { _vislevel = 3; blur = Scale "Blur" 1 10 1; _blur = (blur.value/2 + 0.5), blur.value > 1 = 1; _group_check = is_Group m_group; _m_list = m_group.value, _group_check = m_group; adjust = Matrix_rec mat_a { no_masks = len _m_list; mat_a = replicate no_masks [0, 0]; } // Apply the user defined adjustments to the inputted matrix of scale and offset values _adjusted = map2 fn_adjust m_matrix.value adjust.value; fn_adjust a b = [(a?0 + b?0), (a?1 + (a?1 * b?1))]; _scaled_ims = map (fn_so_apply im_in) _adjusted; fn_so_apply im so = map_unary adj im {adj im = im * (so?0) + (so?1);} _im_pairs = zip2 _m_list _scaled_ims; // Prepare black images as starting point. //////////// _blank = image_new (_m_list?0).width (_m_list?0).height 1 6 Image_coding.NOCODING 1 0 0 0; _pair_start = [(_blank + 1), _blank]; Build = Toggle "Build Scale and Offset Correction Images" false; Output = class { _vislevel = 1; scale_im = _build?0; offset_im = _build?1; so_values = Matrix _adjusted; _build = [Image so_images?0, Image so_images?1], Build = ["Scale image not built.", "Offset image not built."] { m_list' = transpose [_m_list]; m_all = map2 join m_list' _adjusted; so_images = foldr process_2 _pair_start m_all; } } value = (foldr process_1 im_in_b _im_pairs).value {im_in_b = map_unary cast_float im_in;} process_1 m_current im_start = im_out { bl_mask = convsep (matrix_blur _blur) (get_image m_current?0); blended_im = im_blend bl_mask (m_current?1).value im_start.value; im_out = Image (clip2fmt im_start.format blended_im); } // Process for building scale and offset image. process_2 current p_start = p_out { im_s = if ((current?0) > 128) then current?1 else _blank; im_o = if ((current?0) > 128) then current?2 else _blank; im_s' = convsep (matrix_blur _blur) (im_s != 0); im_o' = convsep (matrix_blur _blur) (im_o != 0); im_s'' = im_blend im_s'.value im_s.value p_start?0; im_o'' = im_blend im_o'.value im_o.value p_start?1; p_out = [im_s'', im_o'']; } } } //////////////////////////////////////////////////////////////////////////////////// Balance_apply_item = class Menuaction "_Apply Values" "apply scale and offset corrections, defined as image maps, to a given image" /* Outputs the balanced image. Eg. Balance the secondary structure in an X-ray image. Takes an * X-ray image an 32-bit float scale image and a 32-bit offset image. */ { action im_in scale_im offset_im = class Image value { _vislevel = 1; xfactor = im_in.width/scale_im.width; yfactor = im_in.height/scale_im.height; _scale_im = resize xfactor yfactor 1 scale_im; _offset_im = resize xfactor yfactor 1 offset_im; value = get_image ( clip2fmt im_in.format ( ( im_in * _scale_im ) + _offset_im ) ); } } } Tilt_item = Filter_tilt_item; sep2 = Menuseparator; Rebuild_item = class Menuaction "_Rebuild" "disassemble mosaic, substitute image files and reassemble" { action x = class _result { _vislevel = 3; old = String "In each filename, replace" "foo"; new = String "With" "bar"; _result = map_unary remosaic x { remosaic image = Image (im_remosaic image.value old.value new.value); } } } sep3 = Menuseparator; Clone_area_item = class Menuaction "_Clone Area" "replace dark or light section of im1 with pixels from im2" { action im1 im2 = class _result { _check_args = [ [im1, "im1", check_Image], [im2, "im2", check_Image] ]; _vislevel = 3; /* Region on first image placed in the top left hand corner, * positioned and size relative to the height and width of im1. */ r1 = Region_relative im1 0.05 0.05 0.05 0.05; /* Mark on second image placed in the top left hand corner, * positioned relative to the height and width of im2. Used to * define _r2, the region from which the section of image is cloned * from. */ p2 = Mark_relative im2 0.05 0.05; _r2 = Region im2 p2.left p2.top r1.width r1.height; mask = [r1 <= Options.sc, r1 >= Options.sc]?(Options.replace); Options = class { _vislevel = 3; pause = Toggle "Pause process" true; /* Option toggle used to define whether the user is * replacing a dark or a light area. */ replace = Option "Replace" [ "A Dark Area", "A Light Area" ] 1; // Used to select the area to be replaced. sc = Scale "Scale cutoff" 0.01 mx (mx / 2) {mx = Image_format.maxval im1.format;} //Allows replacement with scale&offset balanced gaussian noise. balance = Toggle "Balance cloned data to match surroundings." true; //Allows replacement with scale&offset balanced //gaussian noise. process = Toggle "Replace area with Gaussian noise." false; } _result = im1, Options.pause = Image (im_insert im1.value patch r1.left r1.top) { r2 = Region im2 p2.left p2.top r1.width r1.height; ref_meanmax = so_meanmax (if mask then 0 else r1); mask8 = Matrix_mor [[255, 255, 255], [255, 255, 255], [255, 255, 255]]; mask_a = map_unary (dilate mask8) mask; mask_b = convsep (matrix_blur 2) mask_a; patch = so_balance ref_meanmax r1 r2 mask_b Options.process, Options.balance = so_balance ref_meanmax r1 r2 mask_b Options.process, Options.process = im_blend (get_image mask_b) (get_image r2) (get_image r1); } } } } Tasks_frame_item = Frame_item; Tasks_print_item = class Menupullright "_Print" "useful stuff for image output" { Rotate_item = Image_transform_item.Rotate_item; Flip_item = Image_transform_item.Flip_item; Resize_item = Image_transform_item.Resize_item; Tone_item = Image_levels_item.Tone_item; Sharpen_item = class Menuaction "_Sharpen" "unsharp filter tuned for typical inkjet printers" { action x = class _result { _vislevel = 3; target_dpi = Option "Sharpen for print at" [ "400 dpi", "300 dpi", "150 dpi", "75 dpi" ] 1; _result = map_unary process x { process image = sharpen params?0 params?1 params?2 params?3 params?4 params?5 (colour_transform_to Image_type.LABQ image) { // sharpen params for various dpi // just change the size of the area we search param_table = [ [7, 2.5, 40, 20, 0.5, 1.5], [5, 2.5, 40, 20, 0.5, 1.5], [3, 2.5, 40, 20, 0.5, 1.5], [11, 2.5, 40, 20, 0.5, 1.5] ]; params = param_table?target_dpi; } } } } sep1 = Menuseparator; Temp_item = Colour_temperature_item; ICC_item = Colour_icc_item; } nip2-8.7.0/share/nip2/compat/7.14/_types.def0000644000175000017500000006675713224651032015153 00000000000000/* A list of things. Do automatic iteration of unary and binary operators on * us. * List [1, 2] + [2, 3] -> List [3, 5] * hd (List [2, 3]) -> 2 * List [] == [] -> true */ List value = class _Object { _check_args = [ [value, "value", check_list] ]; // methods oo_binary_table op x = [ [apply2 op value x', op.op_name == "subscript" || op.op_name == "subscript'" || op.op_name == "equal" || op.op_name == "equal'"], [this.List (apply2 op value x'), op.op_name == "join" || op.op_name == "join'"], [this.List (map2 (apply2 op) value x'), is_list x'], [this.List (map (apply2 op' x) value), true] ] { op' = oo_converse op; // strip the List wrapper, if any x' = x.value, is_List x = x; apply2 op x1 x2 = oo_binary_function op x1 x2, is_class x1 = oo_binary'_function op x1 x2, is_class x2 = op.fn x1 x2; }; oo_unary_table op = [ [apply value, op.op_name == "hd" || op.op_name == "tl"], [this.List (map apply value), true] ] { apply x = oo_unary_function op x, is_class x = op.fn x; } } /* A group of things. Loop the operation over the group. */ Group value = class _Object { _check_args = [ [value, "value", check_list] ]; // methods oo_binary_table op x = [ // if_then_else is really a trinary operator [map_trinary ite this x?0 x?1, op.op_name == "if_then_else"], [map_binary op.fn this x, is_Group x], [map_unary (\a op.fn a x) this, true] ] { // need ite as a true trinary ite a b c = if a then b else c; // we can't call map_trinary directly, since it uses Group and we // don't support mutually recursive top-level functions :-( // copy-paste it here, keep in sync with the version in _stdenv map_nary fn args = fn args, groups == [] = Group (map process [0, 1 .. shortest - 1]) { groups = filter is_Group args; shortest = foldr1 min_pair (map (len @ get_value) groups); process n = [], any (map (is_noval n) args) = map_nary fn (map (extract n) args) { extract n arg = arg.value?n, is_Group arg = arg; is_noval n arg = is_Group arg && arg.value?n == []; } } map_unary fn a = map_nary (list_1ary fn) [a]; map_binary fn a b = map_nary (list_2ary fn) [a, b]; map_trinary fn a b c = map_nary (list_3ary fn) [a, b, c]; } oo_unary_table op = [ [map_unary op.fn this, true] ] { // we can't call map_trinary directly, since it uses Group and we // don't support mutually recursive top-level functions :-( // copy-paste it here, keep in sync with the version in _stdenv map_nary fn args = fn args, groups == [] = Group (map process [0, 1 .. shortest - 1]) { groups = filter is_Group args; shortest = foldr1 min_pair (map (len @ get_value) groups); process n = [], any (map (is_noval n) args) = map_nary fn (map (extract n) args) { extract n arg = arg.value?n, is_Group arg = arg; is_noval n arg = is_Group arg && arg.value?n == []; } } map_unary fn a = map_nary (list_1ary fn) [a]; } } /* Single real number ... eg slider. */ Real value = class _Object { _check_args = [ [value, "value", check_real] ]; // methods oo_binary_table op x = [ [this.Real (op.fn this.value x.value), is_Real x && op.type == Operator_type.ARITHMETIC], [this.Real (op.fn this.value x), is_real x && op.type == Operator_type.ARITHMETIC], [op.fn this.value x.value, is_Real x && op.type == Operator_type.RELATIONAL], [op.fn this.value x, !is_class x] ] ++ super.oo_binary_table op x; oo_unary_table op = [ [this.Real (op.fn this.value), op.type == Operator_type.ARITHMETIC], [op.fn this.value, true] ]; } /* Single bool ... eg Toggle. */ Bool value = class _Object { _check_args = [ [value, "value", check_bool] ]; // methods oo_binary_table op x = [ [op.fn this.value x, op.op_name == "if_then_else"], [this.Bool (op.fn this.value x.value), is_Bool x], [this.Bool (op.fn this.value x), is_bool x] ] ++ super.oo_binary_table op x; oo_unary_table op = [ [this.Bool (op.fn this.value), op.type == Operator_type.ARITHMETIC || op.type == Operator_type.RELATIONAL], [op.fn this.value, true] ]; } /* An editable string. */ String caption value = class _Object { _check_args = [ [caption, "caption", check_string], [value, "value", check_string] ]; } /* An editable real number. */ Number caption value = class scope.Real value { _check_args = [ [caption, "caption", check_string] ]; Real x = this.Number caption x; } /* An editable expression. */ Expression caption expr = class (if is_class expr then expr else _Object) { _check_args = [ [caption, "caption", check_string], [expr, "expr", check_any] ]; } /* A ticking clock. */ Clock interval value = class scope.Real value { _check_args = [ [interval, "interval", check_real] ]; Real x = this.Clock interval x; } /* An editable filename. */ Pathname caption value = class _Object { _check_args = [ [caption, "caption", check_string], [value, "value", check_string] ]; } /* An editable fontname. */ Fontname caption value = class _Object { _check_args = [ [caption, "caption", check_string], [value, "value", check_string] ]; } /* Vector type ... just a finite list of real. Handy for wrapping an * argument to eg. im_lintra_vec. Make it behave like a single pixel image. */ Vector value = class _Object { _check_args = [ [value, "value", check_real_list] ]; bands = len value; // methods oo_binary_table op x = [ // Vector ++ Vector means bandwise join [this.Vector (op.fn this.value x.value), is_Vector x && (op.op_name == "join" || op.op_name == "join'")], [this.Vector (op.fn this.value [get_number x]), has_number x && (op.op_name == "join" || op.op_name == "join'")], // Vector ? number means extract element [op.fn this.value (get_real x), has_real x && (op.op_name == "subscript" || op.op_name == "subscript'")], // extra check for lengths equal [this.Vector (map_binaryl op.fn this.value x.value), is_Vector x && len value == len x.value && op.type == Operator_type.ARITHMETIC], [this.Vector (map_binaryl op.fn this.value (get_real x)), has_real x && op.type == Operator_type.ARITHMETIC], // need extra length check [this.Vector (map bool_to_real (map_binaryl op.fn this.value x.value)), is_Vector x && len value == len x.value && op.type == Operator_type.RELATIONAL], [this.Vector (map bool_to_real (map_binaryl op.fn this.value (get_real x))), has_real x && op.type == Operator_type.RELATIONAL], [this.Vector (op.fn this.value x.value), is_Vector x && len value == len x.value && op.type == Operator_type.COMPOUND_REWRAP], [x.Image (vec op'.op_name x.value value), is_Image x], [vec op'.op_name x value, is_image x], [op.fn this.value x, is_real x] ] ++ super.oo_binary_table op x { op' = oo_converse op; }; oo_unary_table op = [ [this.Vector (map_unaryl op.fn this.value), op.type == Operator_type.ARITHMETIC], [this.Vector (map bool_to_real (map_unaryl op.fn this.value)), op.type == Operator_type.RELATIONAL], [this.Vector (op.fn this.value), op.type == Operator_type.COMPOUND_REWRAP], [op.fn this.value, true] ]; // turn an ip bool (or a number, for Vector) into VIPSs 255/0 bool_to_real x = 255, is_bool x && x = 255, is_number x && x != 0 = 0; } /* A rectangular array of real. */ Matrix_base value = class _Object { _check_args = [ [value, "value", check_matrix] ]; // calculate these from value width = len value?0; height = len value; // extract a rectanguar area extract left top width height = this.Matrix_base ((map (take width) @ map (drop left) @ take height @ drop top) value); // methods oo_binary_table op x = [ // mat multiply is special [this.Matrix_base mul.value, is_Matrix x && op.op_name == "multiply"], [this.Matrix_base mul'.value, is_Matrix x && op.op_name == "multiply'"], // mat divide is also special [this.Matrix_base div.value, is_Matrix x && op.op_name == "divide"], [this.Matrix_base div'.value, is_Matrix x && op.op_name == "divide'"], // power -1 means invert [this.Matrix_base inv.value, is_real x && x == -1 && op.op_name == "power"], [this.Matrix_base sq.value, is_real x && x == 2 && op.op_name == "power"], [error "matrix **-1 and **2 only", op.op_name == "power" || op.op_name == "power'"], // matrix op vector ... treat a vector as a 1 row matrix [this.Matrix_base (map (map_binaryl op'.fn x.value) this.value), is_Vector x && op.type == Operator_type.ARITHMETIC], [this.Matrix_base (map_binaryl op.fn this.value x.value), (is_Matrix x || is_Real x) && op.type == Operator_type.ARITHMETIC], [this.Matrix_base (map_binaryl op.fn this.value x), is_real x && op.type == Operator_type.ARITHMETIC], // compound ... don't do iteration [this.Matrix_base (op.fn this.value x.value), (is_Matrix x || is_Real x || is_Vector x) && op.type == Operator_type.COMPOUND_REWRAP] ] ++ super.oo_binary_table op x { mul = im_matmul this x; mul' = im_matmul x this; div = im_matmul this (im_matinv x); div' = im_matmul x (im_matinv this); inv = im_matinv this; sq = im_matmul this this; op' = oo_converse op; } oo_unary_table op = [ [this.Matrix_base (map_unaryl op.fn this.value), op.type == Operator_type.ARITHMETIC], [this.Matrix_base (op.fn this.value), op.type == Operator_type.COMPOUND_REWRAP], [op.fn this.value, true] ]; } /* How to display a matrix: text, sliders, toggles, or text plus scale/offset. */ Matrix_display = class { text = 0; slider = 1; toggle = 2; text_scale_offset = 3; is_display = member [text, slider, toggle, text_scale_offset]; } /* A matrix as VIPS sees them ... add scale, offset and filename. For nip, add * a display type as well to control how the widget renders. */ Matrix_vips value scale offset filename display = class scope.Matrix_base value { _check_args = [ [scale, "scale", check_real], [offset, "offset", check_real], [filename, "filename", check_string], [display, "display", check_matrix_display] ]; Matrix_base x = this.Matrix_vips x scale offset filename display; } /* A plain 'ol matrix which can be passed to VIPS. */ Matrix value = class Matrix_vips value 1 0 "" Matrix_display.text {} /* Specialised constructors ... for convolutions, recombinations and * morphologies. */ Matrix_con scale offset value = class Matrix_vips value scale offset "" Matrix_display.text_scale_offset {}; Matrix_rec value = class Matrix_vips value 1 0 "" Matrix_display.slider {}; Matrix_mor value = class Matrix_vips value 1 0 "" Matrix_display.toggle {}; Matrix_file filename = (im_read_dmask @ expand @ search) filename; /* A CIE colour ... a triple, plus a format (eg XYZ, Lab etc) */ Colour colour_space value = class scope.Vector value { _check_args = [ [colour_space, "colour_space", check_colour_space] ]; _check_all = [ [is_list_len 3 value, "len value == 3"] ]; Vector x = this.Colour colour_space x; // make a colour-ish thing from an image // back to Colour if we have another 3 band image // to a vector if bands > 1 // to a number otherwise itoc im = this.Colour nip_type (to_matrix im).value?0, bands == 3 = scope.Vector (map mean (bandsplit im)), bands > 1 = mean im { type = get_header "Type" im; bands = get_header "Bands" im; nip_type = Image_type.colour_spaces.lookup 1 0 type; } // methods oo_binary_table op x = [ [itoc (op.fn ((float) (to_image this).value) ((float) (to_image x).value)), // here REWRAP means go via image op.type == Operator_type.COMPOUND_REWRAP] ] ++ super.oo_binary_table op x; oo_unary_table op = [ [itoc (op.fn ((float) (to_image this).value)), op.type == Operator_type.COMPOUND_REWRAP] ] ++ super.oo_unary_table op; } // a subclass with widgets for picking a space and value Colour_picker default_colour default_value = class Colour space.value_name colour.expr { _vislevel = 3; space = Option_enum Image_type.colour_spaces "Colour space" default_colour; colour = Expression "Colour value" default_value; Colour_edit colour_space value = Colour_picker colour_space value; } /* Base scale type. */ Scale caption from to value = class scope.Real value { _check_args = [ [caption, "caption", check_string], [from, "from", check_real], [to, "to", check_real] ]; _check_all = [ [from < to, "from < to"] ]; Real x = this.Scale caption from to x; // methods oo_binary_table op x = [ [this.Scale caption (op.fn this.from x.from) (op.fn this.to x.to) (op.fn this.value x.value), is_Scale x && op.type == Operator_type.ARITHMETIC], [this.Scale caption (op.fn this.from x) (op.fn this.to x) (op.fn this.value x), is_real x && op.type == Operator_type.ARITHMETIC] ] ++ super.oo_binary_table op x; } /* Base toggle type. */ Toggle caption value = class scope.Bool value { _check_args = [ [caption, "caption", check_string], [value, "value", check_bool] ]; Bool x = this.Toggle caption x; } /* Base option type. */ Option caption labels value = class scope.Real value { _check_args = [ [caption, "caption", check_string], [labels, "labels", check_string_list], [value, "value", check_uint] ]; } Option_enum enum caption value_name = class Option caption enum.names (index (equal value_name) enum.names) { // corresponding thing value_thing = enum.get_thing value_name; Option_edit caption labels value = this.Option_enum enum caption (enum.names ? value); } /* A rectangle. width and height can be -ve. */ Rect left top width height = class _Object { _check_args = [ [left, "left", check_real], [top, "top", check_real], [width, "width", check_real], [height, "height", check_real] ]; // derived right = left + width; bottom = top + height; oo_binary_table op x = [ [equal x, is_Rect x && (op.op_name == "equal" || op.op_name == "equal'")], [!equal x, is_Rect x && (op.op_name == "not_equal" || op.op_name == "not_equal'")], // binops with a complex are the same as (comp op comp) [oo_binary_function op this (Rect (re x) (im x) 0 0), is_complex x], // all others are just pairwise [this.Rect left' top' width' height', is_Rect x && op.type == Operator_type.ARITHMETIC], [this.Rect left'' top'' width'' height'', has_number x && op.type == Operator_type.ARITHMETIC] ] ++ super.oo_binary_table op x { left' = op.fn left x.left; top' = op.fn top x.top; width' = op.fn width x.width; height' = op.fn height x.height; left'' = op.fn left x'; top'' = op.fn top x'; width'' = op.fn width x'; height'' = op.fn height x'; x' = get_number x; } oo_unary_table op = [ // arithmetic uops just map [this.Rect left' top' width' height', op.type == Operator_type.ARITHMETIC], // compound uops are just like ops on complex // do (width, height) so thing like abs(Arrow) work as you'd expect [op.fn (width, height), op.type == Operator_type.COMPOUND] ] ++ super.oo_unary_table op { left' = op.fn left; top' = op.fn top; width' = op.fn width; height' = op.fn height; } // empty? ie. contains no pixels is_empty = width == 0 || height == 0; // normalised version, ie. make width/height +ve and flip the origin nleft = left + width, width < 0 = left; ntop = top + height, height < 0 = top; nwidth = abs width; nheight = abs height; nright = nleft + nwidth; nbottom = ntop + nheight; equal x = left == x.left && top == x.top && width == x.width && height == x.height; // contains a point? includes_point x y = nleft <= x && x <= nright && ntop <= y && y <= nbottom; // contains a rect? just test top left and bottom right points includes_rect r = includes_point r.nleft r.ntop && includes_point r.nright r.nbottom; // bounding box of two rects // if either is empty, can just return the other union r = r, is_empty = this, r.is_empty = Rect left' top' width' height' { left' = min_pair nleft r.nleft; top' = min_pair ntop r.ntop; width' = max_pair nright r.nright - left'; height' = max_pair nbottom r.nbottom - top'; } // intersection of two rects ... empty rect if no intersection intersect r = Rect left' top' width'' height'' { left' = max_pair nleft r.nleft; top' = max_pair ntop r.ntop; width' = min_pair nright r.nright - left'; height' = min_pair nbottom r.nbottom - top'; width'' = width', width > 0 = 0; height'' = height', height > 0 = 0; } // expand/collapse by n pixels margin_adjust n = Rect (left - n) (top - n) (width + 2 * n) (height + 2 * n); } /* Values for Compression field in image. */ Image_compression = class { NONE = 0; NO_COMPRESSION = 0; TCSF_COMPRESSION = 1; JPEG_COMPRESSION = 2; LABPACK_COMPRESSED = 3; RGB_COMPRESSED = 4; LUM_COMPRESSED = 5; } /* Values for Coding field in image. */ Image_coding = class { NONE = 0; NOCODING = 0; COLQUANT = 1; LABPACK = 2; } /* Values for BandFmt field in image. */ Image_format = class { DPCOMPLEX = 9; DOUBLE = 8; COMPLEX = 7; FLOAT = 6; INT = 5; UINT = 4; SHORT = 3; USHORT = 2; CHAR = 1; UCHAR = 0; NOTSET = -1; maxval fmt = [ 255, // UCHAR 127, // CHAR 65535, // USHORT 32767, // SHORT 4294967295, // UINT 2147483647, // INT 255, // FLOAT 255, // COMPLEX 255, // DOUBLE 255 // DPCOMPLEX ] ? fmt, fmt >= 0 && fmt <= DPCOMPLEX = error (_ "bad value for BandFmt"); } /* A lookup table. */ Table value = class _Object { _check_args = [ [value, "value", check_rectangular] ]; /* present col x: is there an x in column col */ present col x = member (map (extract col) value) x; /* Look on column from, return matching item in column to. */ lookup from to x = value?n?to, n >= 0 = error (_ "item" ++ " " ++ print x ++ " " ++ _ "not in table") { n = index (equal x) (map (extract from) value); } } /* A two column lookup table with the first column a string and the second a * thing. Used for representing various enums. Option_enum makes a selector * from one of these. */ Enum value = class Table value { _check_args = [ [value, "value", check_enum] ] { check_enum = [is_enum, _ "is [[char, *]]"]; is_enum x = is_rectangular x && is_listof is_string (map (extract 0) x); } // handy ... all the names and things as lists names = map (extract 0) value; things = map (extract 1) value; // is a legal name or thing has_name x = this.present 1 x; has_thing x = this.present 0 x; // map things to strings and back get_name x = this.lookup 1 0 x; get_thing x = this.lookup 0 1 x; } /* Type field. */ Image_type = class { MULTIBAND = 0; B_W = 1; LUMINANCE = 2; XRAY = 3; IR = 4; YUV = 5; RED_ONLY = 6; GREEN_ONLY = 7; BLUE_ONLY = 8; POWER_SPECTRUM = 9; HISTOGRAM = 10; LUT = 11; XYZ = 12; LAB = 13; CMC = 14; CMYK = 15; LABQ = 16; RGB = 17; UCS = 18; LCH = 19; LABS = 21; sRGB = 22; YXY = 23; FOURIER = 24; RGB16 = 25; GREY16 = 26; /* Table to get names <-> numbers. */ type_names = Enum [ $MULTIBAND => MULTIBAND, $B_W => B_W, $LUMINANCE => LUMINANCE, $XRAY => XRAY, $IR => IR, $YUV => YUV, $RED_ONLY => RED_ONLY, $GREEN_ONLY => GREEN_ONLY, $BLUE_ONLY => BLUE_ONLY, $POWER_SPECTRUM => POWER_SPECTRUM, $HISTOGRAM => HISTOGRAM, $LUT => LUT, $XYZ => XYZ, $LAB => LAB, $CMC => CMC, $CMYK => CMYK, $LABQ => LABQ, $RGB => RGB, $UCS => UCS, $LCH => LCH, $LABS => LABS, $sRGB => sRGB, $YXY => YXY, $FOURIER => FOURIER, $RGB16 => RGB16, $GREY16 => GREY16 ]; /* Table relating nip's colour space names and VIPS's Type numbers. * Options generated from this, so match the order to the order in the * Colour menu. */ colour_spaces = Enum [ $sRGB => sRGB, $Lab => LAB, $LCh => LCH, $XYZ => XYZ, $Yxy => YXY, $UCS => UCS ]; /* A slightly larger table ... the types of colorimetric image we can * have. Add mono, and the S and Q forms of LAB. */ image_colour_spaces = Enum [ $Mono => B_W, $sRGB => sRGB, $RGB16 => RGB16, $GREY16 => GREY16, $Lab => LAB, $LabQ => LABQ, $LabS => LABS, $LCh => LCH, $XYZ => XYZ, $Yxy => YXY, $UCS => UCS ]; } /* Base image type. Simple layer over vips_image. */ Image value = class _Object { _check_args = [ [value, "value", check_image] ]; // fields from VIPS header width = get_width value; height = get_height value; bands = get_bands value; format = get_format value; bits = get_bits value; coding = get_coding value; type = get_type value; xres = get_header "Xres" value; yres = get_header "Yres" value; xoffset = get_header "Xoffset" value; yoffset = get_header "Yoffset" value; filename = get_header "filename" value; // convenience ... the area our pixels occupy, as a rect rect = Rect 0 0 width height; // operator overloading // (op Image Vector) done in Vector class oo_binary_table op x = [ // handle image ++ constant here [wrap join_result_image, (has_real x || is_Vector x) && (op.op_name == "join" || op.op_name == "join'")], // image ++ image is slightly different ... we want to // sizealike, but we must not bandalike [wrap (op.fn (get_image resized?0) (get_image resized?1)), has_image x && (op.op_name == "join" || op.op_name == "join'")], [wrap ite_result_image, op.op_name == "if_then_else"], // arithmetic and reational binops between image resize // and band_alike images to match [wrap (op.fn (get_image rebanded?0) (get_image rebanded?1)), has_image x && (op.type == Operator_type.ARITHMETIC || op.type == Operator_type.RELATIONAL)], // other op types don't resize [wrap (op.fn this.value (get_image x)), has_image x], [wrap (op.fn this.value (get_number x)), has_number x], // if it's not a class on the RHS, handle here ... just apply and // rewrap [wrap (op.fn this.value x), !is_class x] // all other cases handled by other classes ] ++ super.oo_binary_table op x { // wrap the result with this // x can be a non-image, eg. compare "Image v == []" vs. "Image v == // 12" wrap x = x, op.type == Operator_type.COMPOUND || !is_image x = this.Image x; join_result_image = value ++ new_stuff, op.op_name == "join" = new_stuff ++ value { new_stuff = image_new width height new_bands format coding Image_type.B_W x xoffset yoffset; new_bands = get_bands x, has_bands x = 1; } [then_part, else_part] = x; // get things about our output from inputs in this order objects = [then_part, else_part, this]; // properties of our output image target_bands = get_member_list has_bands get_bands objects; target_type = get_member_list has_type get_type objects; // if one of then/else is an image, get the target format from that // otherwise, let the non-image objects set the target target_format = get_member_list has_format get_format x, has_member_list has_format x = []; to_image x = x, is_image x = x.value, is_Image x = clip2fmt target_format im, target_format != [] = im { im = im_black width height target_bands + x; } [if_size, then_size, else_size] = size_alike (value : formats_alike (map to_image x)); ite_result_image = image_set_type target_type (if if_size then then_size else else_size); resized = size_alike [this, x]; rebanded = bands_alike resized; } // FIXME ... yuk ... don't use operator hints, just always rewrap if // we have an image result // forced on us by things like abs: // abs Vector -> real // abs Image -> Image // does not fit well with COMPOUND/whatever scheme oo_unary_table op = [ [this.Image result, is_image result], [result, true] ] { result = op.fn this.value; } } /* Construct an image from a file. */ Image_file filename = class Image value { _check_args = [ [filename, "filename", check_string] ]; value = vips_image filename; } Region image left top width height = class Image value { _check_args = [ [image, "Image", check_Image], [left, "left", check_real], [top, "top", check_real], [width, "width", check_preal], [height, "height", check_preal] ]; // a rect for our coordinates // region.rect gets the rect for the extracted image region_rect = Rect left top width height; // we need to always succeed ... value is our enclosing image if we're // out of bounds value = extract_area left top width height image.value, image.rect.includes_rect region_rect = image.value; } Area image left top width height = class scope.Region image left top width height { Region image left top width height = this.Area image left top width height; } Arrow image left top width height = class scope.Rect left top width height { _check_args = [ [image, "Image", check_Image], [left, "left", check_real], [top, "top", check_real], [width, "width", check_real], [height, "height", check_real] ]; Rect l t w h = this.Arrow image l t w h; } HGuide image top = class scope.Arrow image image.rect.left top image.width 0 { Arrow image left top width height = this.HGuide image top; } VGuide image left = class scope.Arrow image left image.rect.top 0 image.height { Arrow image left top width height = this.VGuide image left; } Mark image left top = class scope.Arrow image left top 0 0 { Arrow image left top width height = this.Mark image left top; } // convenience functions: ... specify position as [0 .. 1) Region_relative image u v w h = Region image (image.width * u) (image.height * v) (image.width * w) (image.height * h); Area_relative image u v w h = Area image (image.width * u) (image.height * v) (image.width * w) (image.height * h); Arrow_relative image u v w h = Arrow image (image.width * u) (image.height * v) (image.width * w) (image.height * h); VGuide_relative image v = VGuide image (image.height * v); HGuide_relative image u = HGuide image (image.width * u); Mark_relative image u v = Mark image (image.width * u) (image.height * v); Interpolate = class { NEAREST_NEIGHBOUR = 0; BILINEAR = 1; BICUBIC = 2; /* Table to map interpol numbers to descriptive strings */ names = Enum [ [_ "Nearest neighbour", NEAREST_NEIGHBOUR], [_ "Bilinear", BILINEAR], [_ "Bicubic", BICUBIC] ]; } Render_intent = class { PERCEPTUAL = 0; RELATIVE = 1; SATURATION = 2; ABSOLUTE = 3; /* Table to get names <-> numbers. */ names = Enum [ [_ "Perceptual", PERCEPTUAL], [_ "Relative", RELATIVE], [_ "Saturation", SATURATION], [_ "Absolute", ABSOLUTE] ]; } // abstract base class for toolkit menus Menu = class {} // a "----" line in a menu Menuseparator = class Menu {} // abstract base class for items in menus Menuitem label tooltip = class Menu {} Menupullright label tooltip = class Menuitem label tooltip {} Menuaction label tooltip = class Menuitem label tooltip {} /* Plots. */ Plot_style = class { POINT = 0; LINE = 1; SPLINE = 2; BAR = 3; names = Enum [ [_ "Point", POINT], [_ "Line", LINE], [_ "Spline", SPLINE], [_ "Bar", BAR] ]; } Plot_format = class { YYYY = 0; XYYY = 1; XYXY = 2; names = Enum [ [_ "YYYY", YYYY], [_ "XYYY", XYXY], [_ "XYXY", XYXY] ]; } Plot_type = class { /* Lots of Ys (ie. multiple line plots). */ YYYY = 0; /* First column of matrix is X position, others are Ys (ie. multiple XY * line plots, all with the same Xes). */ XYYY = 1; /* Many independent XY plots. */ XYXY = 2; } /* "options" is a list of ["key", value] pairs. */ Plot options value = class scope.Image value { Image value = this.Plot options value; } Plot_matrix options value = class Plot options (to_image value).value { } Plot_histogram value = class scope.Plot [] value { } Plot_xy value = class scope.Plot [$format => Plot_format.XYYY] value { } nip2-8.7.0/share/nip2/compat/7.14/Makefile.am0000644000175000017500000000056513224651032015205 00000000000000startdir = $(pkgdatadir)/compat/7.14 start_DATA = \ Math.def \ Image.def \ Colour.def \ Tasks.def \ Object.def \ Filter.def \ Matrix.def \ Widgets.def \ Histogram.def \ Preferences.ws \ _joe_extra.def \ _joe_utilities.def \ _convert.def \ _generate.def \ _list.def \ _predicate.def \ _stdenv.def \ _Object.def \ _types.def EXTRA_DIST = $(start_DATA) nip2-8.7.0/share/nip2/compat/7.40/0000755000175000017500000000000013350464161013227 500000000000000nip2-8.7.0/share/nip2/compat/7.40/_stdenv.def0000644000175000017500000020254213224651032015271 00000000000000/* optional args to functions */ get_option options defaults f = error (_ "unknown parameter " ++ f), hits == [] = hits?0 { hits = [v :: [n, v] <- options ++ defaults; n == f]; } /* Various operators as functions. */ logical_and a b = a && b; logical_or a b = a || b; bitwise_and a b = a & b; bitwise_or a b = a | b; eor a b = a ^ b; left_shift a b = a << b; right_shift a b = a >> b; not a = !a; less a b = a < b; more a b = a > b; less_equal a b = a <= b; more_equal a b = a >= b; equal a b = a == b; not_equal a b = a != b; pointer_equal a b = a === b; not_pointer_equal a b = a !== b; add a b = a + b; subtract a b = a - b; multiply a b = a * b; divide a b = a / b; idivide a b = (int) ((int) a / (int) b); power a b = a ** b; square x = x * x; remainder a b = a % b; cons a b = a : b; dot a b = a . ( b ); join a b = a ++ b; // 'difference' is defined in _list subscript a b = a ? b; generate s n f = [s, n .. f]; comma r i = (r, i); compose f g = f @ g; // our only trinary operator is actually a binary operator if_then_else a x = if a then x?0 else x?1; cast_unsigned_char x = (unsigned char) x; cast_signed_char x = (signed char) x; cast_unsigned_short x = (unsigned short) x; cast_signed_short x = (signed short) x; cast_unsigned_int x = (unsigned int) x; cast_signed_int x = (signed int) x; cast_float x = (float) x; cast_double x = (double) x; cast_complex x = (complex) x; cast_double_complex x = (double complex) x; unary_minus x = -x; negate x = !x; complement x = ~x; unary_plus x = +x; // the function we call for "a -> v" expressions mksvpair s v = [s, v], is_string s = error "not str on lhs of ->"; // the vector ops ... im is an image, vec is a real_list vec op_name im vec = im_lintra_vec ones im vec, op_name == "add" || op_name == "add'" = im_lintra_vec ones (-1 * im) vec, op_name == "subtract'" = im_lintra_vec ones im inv, op_name == "subtract" = im_lintra_vec vec im zeros, op_name == "multiply" || op_name == "multiply'" = im_lintra_vec vec (1 / im) zeros, op_name == "divide'" = im_lintra_vec recip im zeros, op_name == "divide" = im_expntra_vec im vec, op_name == "power'" = im_powtra_vec im vec, op_name == "power" = im_remainderconst_vec im vec, op_name == "remainder" = im_andimage_vec im vec, op_name == "bitwise_and" || op_name == "bitwise_and'" = im_orimage_vec im vec, op_name == "bitwise_or" || op_name == "bitwise_or'" = im_eorimage_vec im vec, op_name == "eor" || op_name == "eor'" = im_equal_vec im vec, op_name == "equal" || op_name == "equal'" = im_notequal_vec im vec, op_name == "not_equal" || op_name == "not_equal'" = im_less_vec im vec, op_name == "less" = im_moreeq_vec im vec, op_name == "less'" = im_lesseq_vec im vec, op_name == "less_equal" = im_more_vec im vec, op_name == "less_equal'" = error ("unimplemented vector operation: " ++ op_name) { zeros = replicate (len vec) 0; ones = replicate (len vec) 1; recip = map (divide 1) vec; inv = map (multiply (-1)) vec; } // make a name value pair mknvpair n v = [n, v], is_string n = error "not [char] on LHS of =>"; /* Macbeth chart patch names. */ macbeth_names = [ "Dark skin", "Light skin", "Blue sky", "Foliage", "Blue flower", "Bluish green", "Orange", "Purplish blue", "Moderate red", "Purple", "Yellow green", "Orange yellow", "Blue", "Green", "Red", "Yellow", "Magenta", "Cyan", "White (density 0.05)", "Neutral 8 (density 0.23)", "Neutral 6.5 (density 0.44)", "Neutral 5 (density 0.70)", "Neutral 3.5 (density 1.05)", "Black (density 1.50)" ]; bandsplit x = oo_unary_function bandsplit_op x, is_class x = map (subscript x) [0 .. bands - 1], is_image x = error (_ "bad arguments to " ++ "bandsplit") { bands = get_header "Bands" x; bandsplit_op = Operator "bandsplit" (map Image @ bandsplit) Operator_type.COMPOUND false; } bandjoin l = wrapper joined, has_wrapper = joined, is_listof has_image l = error (_ "bad arguments to " ++ "bandjoin") { has_wrapper = has_member_list (has_member "Image") l; wrapper = get_member_list (has_member "Image") (get_member "Image") l; joined = im_gbandjoin (map get_image l); } bandand x = oo_unary_function bandand_op x, is_class x = foldr1 bitwise_and (bandsplit x), is_image x = error (_ "bad arguments to " ++ "bandand") { bandand_op = Operator "bandand" bandand Operator_type.COMPOUND_REWRAP false; } bandor x = oo_unary_function bandor_op x, is_class x = foldr1 bitwise_or (bandsplit x), is_image x = error (_ "bad arguments to " ++ "bandor") { bandor_op = Operator "bandor" bandor Operator_type.COMPOUND_REWRAP false; } sum x = oo_unary_function sum_op x, is_class x = im_avg x * (get_width x) * (get_height x) * (get_bands x), is_image x = sum_list x, is_list x = error (_ "bad arguments (" ++ print x ++ ") to " ++ "sum") { sum_op = Operator "sum" sum Operator_type.COMPOUND false; // add elements in a nested-list thing sum_list l = foldr acc 0 l { acc x total = total + sum x, is_list x = total + x; } } product x = oo_unary_function product_op x, is_class x = product_list x, is_list x // (product image) doesn't make much sense :( = error (_ "bad arguments (" ++ print x ++ ") to " ++ "product") { product_op = Operator "product" product Operator_type.COMPOUND false; product_list l = foldr prod 1 l { prod x total = total * product x, is_list x = total * x; } } mean x = oo_unary_function mean_op x, is_class x = im_avg x, is_image x = mean_list x, is_list x = error (_ "bad arguments (" ++ print x ++ ") to " ++ "mean") { mean_op = Operator "mean" mean Operator_type.COMPOUND false; mean_list l = sum l / size l; // number of elements in some sort of nested-list thing size l = foldr acc 0 l { acc x total = total + size x, is_list x = total + 1; } } meang x = (appl (power e) @ mean @ appl log) x { appl fn x = map fn x, is_list x = fn x; } skew x = oo_unary_function skew_op x, is_class x = sum ((x - m) ** 3) / ((N - 1) * s ** 3), is_image x = sum ((Group x' - m) ** 3).value / ((N - 1) * s ** 3), is_list x = error (_ "bad arguments (" ++ print x ++ ") to " ++ "skew") { skew_op = Operator "skew" skew Operator_type.COMPOUND false; // squash any large matrix down to a flat list ... much simpler x' = x, is_image x; = flatten x; m = mean x'; s = deviation x'; w = get_width x'; h = get_height x'; b = get_bands x'; N = w * h * b, is_image x' = len x'; } kurtosis x = oo_unary_function kurtosis_op x, is_class x = sum ((x - m) ** 4) / ((N - 1) * s ** 4), is_image x = sum ((Group x' - m) ** 4).value / ((N - 1) * s ** 4), is_list x = error (_ "bad arguments (" ++ print x ++ ") to " ++ "kurtosis") { kurtosis_op = Operator "kurtosis" kurtosis Operator_type.COMPOUND false; // squash any large matrix down to a flat list ... much simpler x' = x, is_image x; = flatten x; m = mean x'; s = deviation x'; w = get_width x'; h = get_height x'; b = get_bands x'; N = len x', is_list x'; = w * h * b; } // zero-excluding mean meanze x = oo_unary_function meanze_op x, is_class x = meanze_image_hist x, is_image x && (fmt == Image_format.UCHAR || fmt == Image_format.USHORT) = meanze_image x, is_image x = meanze_list x, is_list x = error (_ "bad arguments (" ++ print x ++ ") to " ++ "meanze") { fmt = get_format x; meanze_op = Operator "meanze" meanze Operator_type.COMPOUND false; meanze_list l = sum l / size l; // number of non-zero elements in some sort of nested-list thing size l = foldr acc 0 l { acc x total = total + size x, is_list x = total + 1, x != 0; = total; } // add elements in a nested-list thing sum l = foldr acc 0 l { acc x total = total + sum x, is_list x = total + x; } // image mean, for any image type meanze_image i = sum / N { w = get_width i; h = get_height i; b = get_bands i; st = stats i; sum = st.value?0?2; // find non-zero pixels (not zero in all bands) zp = im_notequal_vec i (replicate b 0); // number of non-zero pixels N = b * (mean zp * w * h) / 255; } // image mean for 8 and 16-bit unsigned images // we can use a histogram, yay, and save a pass through the image meanze_image_hist i = sum / N { // histogram, knock out zeros hist = hist_find i; black = image_new 1 1 (get_bands hist) (get_format hist) (get_coding hist) (get_type hist) 0 0 0; histze = insert 0 0 black hist; // matching identity iden = im_identity_ushort (get_bands hist) (get_width hist), (get_width hist) > 256 = im_identity (get_bands hist); // number of non-zero pixels N = mean histze * 256; // sum of pixels sum = mean (hist * iden) * 256; } } deviation x = oo_unary_function deviation_op x, is_class x = im_deviate x, is_image x = deviation_list x, is_real_list x || is_matrix x = error (_ "bad arguments to " ++ "deviation") { deviation_op = Operator "deviation" deviation Operator_type.COMPOUND false; deviation_list l = (abs (s2 - (s * s / n)) / (n - 1)) ** 0.5 { [n, s, s2] = sum_sum2_list l; } // return n, sum, sum of squares for a list of reals sum_sum2_list x = foldr accumulate [0, 0, 0] x { accumulate x sofar = [n + 1, x + s, x * x + s2], is_real x = [n + n', s + s', s2 + s2'], is_list x = error "sum_sum2_list: not real or [real]" { [n, s, s2] = sofar; [n', s', s2'] = sum_sum2_list x; } } } deviationze x = oo_unary_function deviationze_op x, is_class x = deviationze_image x, is_image x = deviationze_list x, is_real_list x || is_matrix x = error (_ "bad arguments to " ++ "deviationze") { deviationze_op = Operator "deviationze" deviationze Operator_type.COMPOUND false; deviationze_list l = (abs (s2 - (s * s / n)) / (n - 1)) ** 0.5 { [n, s, s2] = sum_sum2_list l; } // return number of non-zero elements, sum, sum of squares for a list of // reals sum_sum2_list x = foldr accumulate [0, 0, 0] x { accumulate x sofar = sofar, is_real x && x == 0 = [n + 1, x + s, x * x + s2], is_real x = [n + n', s + s', s2 + s2'], is_list x = error "sum_sum2_list: not real or [real]" { [n, s, s2] = sofar; [n', s', s2'] = sum_sum2_list x; } } deviationze_image i = ((sum2 - sum * sum / N) / (N - 1)) ** 0.5 { w = get_width i; h = get_height i; b = get_bands i; st = stats i; sum = st.value?0?2; sum2 = st.value?0?3; // find non-zero pixels (not zero in all bands) zp = im_notequal_vec i (replicate b 0); // number of non-zero pixels N = b * (mean zp * w * h) / 255; } } // find the centre of gravity of a histogram gravity x = oo_unary_function gravity_op x, is_class x = im_hist_gravity x, is_hist x = gravity_list x, is_list x = error (_ "bad arguments to " ++ "gravity") { gravity_op = Operator "gravity" gravity Operator_type.COMPOUND false; // centre of gravity of a histogram... use the histogram to weight an // identity, then sum, then find the mean element im_hist_gravity h = m { // make horizontal h' = rot270 h, get_width h == 1 = h, get_height h == 1 = error "width or height not 1"; // number of elements w = get_width h'; // matching identity i = im_identity_ushort 1 w, w <= 2 ** 16 - 1 = make_xy w 1 ? 0; // weight identity and sum s = mean (i * h') * w; // sum of original histogram s' = mean h * w; // weighted mean m = s / s'; } gravity_list l = m { w = len l; // matching identity i = [0, 1 .. w - 1]; // weight identity and sum s = sum (map2 multiply i l); // sum of original histogram s' = sum l; // weighted mean m = s / s'; } } project x = oo_unary_function project_op x, is_class x = im_project x, is_image x = error (_ "bad arguments to " ++ "project") { project_op = Operator "project" project Operator_type.COMPOUND false; } abs x = oo_unary_function abs_op x, is_class x = im_abs x, is_image x = abs_cmplx x, is_complex x = abs_num x, is_real x = abs_list x, is_real_list x = abs_list (map abs_list x), is_matrix x = error (_ "bad arguments to " ++ "abs") { abs_op = Operator "abs" abs Operator_type.COMPOUND false; abs_list l = (sum (map square l)) ** 0.5; abs_num n = n, n >= 0 = -n; abs_cmplx c = ((re c)**2 + (im c)**2) ** 0.5; } copy x = oo_unary_function copy_op x, is_class x = im_copy x, is_image x = x { copy_op = Operator "copy" copy Operator_type.COMPOUND_REWRAP false; } // like abs, but treat pixels as vectors ... ie. always get a 1-band image // back ... also treat matricies as lists of vectors // handy for dE from object difference abs_vec x = oo_unary_function abs_vec_op x, is_class x = abs_vec_image x, is_image x = abs_vec_cmplx x, is_complex x = abs_vec_num x, is_real x = abs_vec_list x, is_real_list x = mean (map abs_vec_list x), is_matrix x = error (_ "bad arguments to " ++ "abs_vec") { abs_vec_op = Operator "abs_vec" abs_vec Operator_type.COMPOUND false; abs_vec_list l = (sum (map square l)) ** 0.5; abs_vec_num n = n, n >= 0 = -n; abs_vec_cmplx c = ((re c)**2 + (im c)**2) ** 0.5; abs_vec_image im = (sum (map square (bandsplit im))) ** 0.5; } transpose x = oo_unary_function transpose_op x, is_class x = transpose_image x, is_image x = transpose_list x, is_listof is_list x = error (_ "bad arguments to " ++ "transpose") { transpose_op = Operator "transpose" transpose Operator_type.COMPOUND_REWRAP false; transpose_list l = [], l' == [] = (map hd l') : (transpose_list (map tl l')) { l' = takewhile (not_equal []) l; } transpose_image = im_flipver @ im_rot270; } rot45 x = oo_unary_function rot45_op x, is_class x = error "rot45 image: not implemented", is_image x = error (_ "bad arguments to " ++ "rot45") { rot45_op = Operator "rot45" rot45_object Operator_type.COMPOUND_REWRAP false; rot45_object x = rot45_matrix x, is_odd_square_matrix x = error "rot45 image: not implemented", is_image x = error (_ "bad arguments to " ++ "rot45"); // slow, but what the heck rot45_matrix l = (im_rotate_dmask45 (Matrix l)).value; } // apply an image function to a [[real]] ... matrix is converted to a 1 band // image for processing apply_matrix_as_image fn m = (get_value @ im_vips2mask @ fn @ im_mask2vips @ Matrix) m; // a general image/matrix operation where the mat version is most easily done // by converting mat->image->mat apply_matim_operation name fn x = oo_unary_function class_op x, is_class x = fn x, is_image x = apply_matrix_as_image fn x, is_matrix x = error (_ "bad arguments to " ++ name) { class_op = Operator name (apply_matim_operation name fn) Operator_type.COMPOUND_REWRAP false; } rot90 = apply_matim_operation "rot90" im_rot90; rot180 = apply_matim_operation "rot180" im_rot180; rot270 = apply_matim_operation "rot270" im_rot270; rotquad = apply_matim_operation "rotquad" im_rotquad; fliplr = apply_matim_operation "fliplr" im_fliphor; fliptb = apply_matim_operation "flipud" im_flipver; image_set_type type x = oo_unary_function image_set_type_op x, is_class x = im_copy_set x (to_real type) (get_header "Xres" x) (get_header "Yres" x) (get_header "Xoffset" x) (get_header "Yoffset" x), is_image x = error (_ "bad arguments to " ++ "image_set_type:" ++ print type ++ " " ++ print x) { image_set_type_op = Operator "image_set_type" (image_set_type type) Operator_type.COMPOUND_REWRAP false; } image_set_origin xoff yoff x = oo_unary_function image_set_origin_op x, is_class x = im_copy_set x (get_header "Type" x) (get_header "Xres" x) (get_header "Yres" x) (to_real xoff) (to_real yoff), is_image x = error (_ "bad arguments to " ++ "image_set_origin") { image_set_origin_op = Operator "image_set_origin" (image_set_origin xoff yoff) Operator_type.COMPOUND_REWRAP false; } cache tile_width tile_height max_tiles x = oo_unary_function cache_op x, is_class x = im_tile_cache_random x (to_real tile_width) (to_real tile_height) (to_real max_tiles), is_image x = error (_ "bad arguments to " ++ "cache") { cache_op = Operator "cache" (cache tile_width tile_height max_tiles) Operator_type.COMPOUND_REWRAP false; } tile across down x = oo_unary_function tile_op x, is_class x = im_replicate x (to_real across) (to_real down), is_image x = error (_ "bad arguments to " ++ "tile") { tile_op = Operator "tile" (tile across down) Operator_type.COMPOUND_REWRAP false; } grid tile_height across down x = oo_unary_function grid_op x, is_class x = im_grid x (to_real tile_height) (to_real across) (to_real down), is_image x = error (_ "bad arguments to " ++ "grid") { grid_op = Operator "grid" (grid tile_height across down) Operator_type.COMPOUND_REWRAP false; } max_pair a b = a, a > b = b; min_pair a b = a, a < b = b; range min value max = min_pair max (max_pair min value); max x = oo_unary_function max_op x, is_class x = im_max x, is_image x = max_list x, is_list x = x, is_number x = error (_ "bad arguments to " ++ "max") { max_op = Operator "max" max Operator_type.COMPOUND false; max_list x = error "max []", x == [] = foldr1 max_pair x, is_real_list x = foldr1 max_pair (map max_list x), is_list x = max x; } min x = oo_unary_function min_op x, is_class x = im_min x, is_image x = min_list x, is_list x = x, is_number x = error (_ "bad arguments to " ++ "min") { min_op = Operator "min" min Operator_type.COMPOUND false; min_list x = error "min []", x == [] = foldr1 min_pair x, is_real_list x = foldr1 min_pair (map min_list x), is_list x = min x; } maxpos x = oo_unary_function maxpos_op x, is_class x = im_maxpos x, is_image x = maxpos_matrix x, is_matrix x = maxpos_list x, is_list x = error (_ "bad arguments to " ++ "maxpos") { maxpos_op = Operator "maxpos" maxpos Operator_type.COMPOUND false; maxpos_matrix m = (-1, -1), m == [[]] = (indexes?row, row) { max_value = max (Matrix m); indexes = map (index (equal max_value)) m; row = index (not_equal (-1)) indexes; } maxpos_list l = -1, l == [] = index (equal (max l)) l; } minpos x = oo_unary_function minpos_op x, is_class x = im_minpos x, is_image x = minpos_matrix x, is_matrix x = minpos_list x, is_list x = error (_ "bad arguments to " ++ "minpos") { minpos_op = Operator "minpos" minpos Operator_type.COMPOUND false; minpos_matrix m = (-1, -1), m == [[]] = (indexes?row, row) { min_value = min (Matrix m); indexes = map (index (equal min_value)) m; row = index (not_equal (-1)) indexes; } minpos_list l = -1, l == [] = index (equal (min l)) l; } stats x = oo_unary_function stats_op x, is_class x = im_stats x, is_image x = im_stats (to_image x).value, is_matrix x = error (_ "bad arguments to " ++ "stats") { stats_op = Operator "stats" stats Operator_type.COMPOUND false; } e = 2.7182818284590452354; pi = 3.14159265358979323846; rad d = 2 * pi * (d / 360); deg r = 360 * r / (2 * pi); sign x = oo_unary_function sign_op x, is_class x = im_sign x, is_image x = sign_cmplx x, is_complex x = sign_num x, is_real x = error (_ "bad arguments to " ++ "sign") { sign_op = Operator "sign" sign Operator_type.COMPOUND_REWRAP false; sign_num n = 0, n == 0 = 1, n > 0 = -1; sign_cmplx c = (0, 0), mod == 0 = (re c / mod, im c / mod) { mod = abs c; } } rint x = oo_unary_function rint_op x, is_class x = im_rint x, is_image x = rint_value x, is_number x = error (_ "bad arguments to " ++ "rint") { rint_op = Operator "rint" rint Operator_type.ARITHMETIC false; rint_value x = (int) (x + 0.5), x > 0 = (int) (x - 0.5); } scale x = oo_unary_function scale_op x, is_class x = (unsigned char) x, is_number x = im_scale x, is_image x = scale_list x, is_real_list x || is_matrix x = error (_ "bad arguments to " ++ "scale") { scale_op = Operator "scale" scale Operator_type.COMPOUND_REWRAP false; scale_list l = apply_scale s o l { mn = find_limit min_pair l; mx = find_limit max_pair l; s = 255.0 / (mx - mn); o = -(mn * s); } find_limit fn l = find_limit fn (map (find_limit fn) l), is_listof is_list l = foldr1 fn l; apply_scale s o x = x * s + o, is_number x = map (apply_scale s o) x; } scaleps x = oo_unary_function scale_op x, is_class x = im_scaleps x, is_image x = error (_ "bad arguments to " ++ "scale") { scale_op = Operator "scaleps" scaleps Operator_type.COMPOUND_REWRAP false; } fwfft x = oo_unary_function fwfft_op x, is_class x = im_fwfft x, is_image x = error (_ "bad arguments to " ++ "fwfft") { fwfft_op = Operator "fwfft" fwfft Operator_type.COMPOUND_REWRAP false; } invfft x = oo_unary_function invfft_op x, is_class x = im_invfftr x, is_image x = error (_ "bad arguments to " ++ "invfft") { invfft_op = Operator "invfft" invfft Operator_type.COMPOUND_REWRAP false; } falsecolour x = oo_unary_function falsecolour_op x, is_class x = image_set_type Image_type.sRGB (im_falsecolour x), is_image x = error (_ "bad arguments to " ++ "falsecolour") { falsecolour_op = Operator "falsecolour" falsecolour Operator_type.COMPOUND_REWRAP false; } polar x = oo_unary_function polar_op x, is_class x = im_c2amph x, is_image x = polar_cmplx x, is_complex x = error (_ "bad arguments to " ++ "polar") { polar_op = Operator "polar" polar Operator_type.COMPOUND false; polar_cmplx r = (l, a) { a = 270, x == 0 && y < 0 = 90, x == 0 && y >= 0 = 360 + atan (y / x), x > 0 && y < 0 = atan (y / x), x > 0 && y >= 0 = 180 + atan (y / x); l = (x ** 2 + y ** 2) ** 0.5; x = re r; y = im r; } } rectangular x = oo_unary_function rectangular_op x, is_class x = im_c2rect x, is_image x = rectangular_cmplx x, is_complex x = error (_ "bad arguments to " ++ "rectangular") { rectangular_op = Operator "rectangular" rectangular Operator_type.COMPOUND false; rectangular_cmplx p = (x, y) { l = re p; a = im p; x = l * cos a; y = l * sin a; } } // we can't use colour_unary: that likes 3 band only recomb matrix x = oo_unary_function recomb_op x, is_class x = im_recomb x matrix, is_image x = recomb_real_list x, is_real_list x = map recomb_real_list x, is_matrix x = error (_ "bad arguments to " ++ "recomb") { // COMPOUND_REWRAP ... signal to the colour class to go to image and // back recomb_op = Operator "recomb" (recomb matrix) Operator_type.COMPOUND_REWRAP false; // process [1,2,3 ..] as an image recomb_real_list l = (to_matrix im').value?0 { im = (float) (to_image (Vector l)).value; im' = recomb matrix im; } } extract_area x y w h obj = oo_unary_function extract_area_op obj, is_class obj = im_extract_area obj x' y' w' h', is_image obj = map (extract_range x' w') (extract_range y' h' obj), is_matrix obj = error (_ "bad arguments to " ++ "extract_area") { x' = to_real x; y' = to_real y; w' = to_real w; h' = to_real h; extract_area_op = Operator "extract_area" (extract_area x y w h) Operator_type.COMPOUND_REWRAP false; extract_range from length list = (take length @ drop from) list; } extract_band b obj = subscript obj b; extract_row y obj = oo_unary_function extract_row_op obj, is_class obj = extract_area 0 y' (get_width obj) 1 obj, is_image obj = [obj?y'], is_matrix obj = error (_ "bad arguments to " ++ "extract_row") { y' = to_real y; extract_row_op = Operator "extract_row" (extract_row y) Operator_type.COMPOUND_REWRAP false; } extract_column x obj = oo_unary_function extract_column_op obj, is_class obj = extract_area x' 0 1 height obj, is_image obj = map (\row [row?x']) obj, is_matrix obj = error (_ "bad arguments to " ++ "extract_column") { x' = to_real x; height = get_header "Ysize" obj; extract_column_op = Operator "extract_column" (extract_column x) Operator_type.COMPOUND_REWRAP false; } blend cond in1 in2 = oo_binary_function blend_op cond [in1,in2], is_class cond = im_blend (get_image cond) (get_image in1) (get_image in2), has_image cond && has_image in1 && has_image in2 = error (_ "bad arguments to " ++ "blend" ++ ": " ++ join_sep ", " (map print [cond, in1, in2])) { blend_op = Operator "blend" blend_obj Operator_type.COMPOUND_REWRAP false; blend_obj cond x = blend_result_image { [then_part, else_part] = x; // get things about our output from inputs in this order objects = [then_part, else_part, cond]; // properties of our output image target_width = get_member_list has_width get_width objects; target_height = get_member_list has_height get_height objects; target_bands = get_member_list has_bands get_bands objects; target_format = get_member_list has_format get_format objects; target_type = get_member_list has_type get_type objects; to_image x = to_image_size target_width target_height target_bands target_format x; [then_image, else_image] = map to_image [then_part, else_part]; blend_result_image = image_set_type target_type (im_blend cond then_image else_image); } } // do big first: we want to keep big's class, if possible // eg. big is a Plot, small is a 1x1 Image insert x y small big = oo_binary'_function insert_op small big, is_class big = oo_binary_function insert_op small big, is_class small = im_insert big small (to_real x) (to_real y), is_image small && is_image big = error (_ "bad arguments to " ++ "insert") { insert_op = Operator "insert" (insert x y) Operator_type.COMPOUND_REWRAP false; } insert_noexpand x y small big = oo_binary_function insert_noexpand_op small big, is_class small = oo_binary'_function insert_noexpand_op small big, is_class big = im_insert_noexpand big small (to_real x) (to_real y), is_image small && is_image big = error (_ "bad arguments to " ++ "insert_noexpand") { insert_noexpand_op = Operator "insert_noexpand" (insert_noexpand x y) Operator_type.COMPOUND_REWRAP false; } decode im = oo_unary_function decode_op im, is_class im = decode_im im, is_image im = error (_ "bad arguments to " ++ "decode") { decode_op = Operator "decode" decode Operator_type.COMPOUND_REWRAP false; decode_im im = im_LabQ2Lab im, get_coding im == Image_coding.LABPACK = im_rad2float im, get_coding im == Image_coding.RAD = im; } measure_draw across down measure image = mark { patch_width = image.width / across; sample_width = patch_width * (measure / 100); left_margin = (patch_width - sample_width) / 2; patch_height = image.height / down; sample_height = patch_height * (measure / 100); top_margin = (patch_height - sample_height) / 2; cods = [[x * patch_width + left_margin, y * patch_height + top_margin] :: y <- [0 .. down - 1]; x <- [0 .. across - 1]]; x = map (extract 0) cods; y = map (extract 1) cods; outer = mkim [$pixel => 255] sample_width sample_height 1; inner = mkim [] (sample_width - 4) (sample_height - 4) 1; patch = insert 2 2 inner outer; bg = mkim [] image.width image.height 1; mask = Image (im_insertset bg.value patch.value x y); image' = colour_transform_to Image_type.sRGB image; mark = if mask then Vector [0, 255, 0] else image'; } measure_sample across down measure image = measures { patch_width = image.width / across; sample_width = patch_width * (measure / 100); left_margin = (patch_width - sample_width) / 2; patch_height = image.height / down; sample_height = patch_height * (measure / 100); top_margin = (patch_height - sample_height) / 2; cods = [[x * patch_width + left_margin, y * patch_height + top_margin] :: y <- [0 .. down - 1]; x <- [0 .. across - 1]]; image' = decode image; patches = map (\p extract_area p?0 p?1 sample_width sample_height image') cods; measures = Matrix (map (map mean) (map bandsplit patches)); } extract_bands b n obj = oo_unary_function extract_bands_op obj, is_class obj = im_extract_bands obj (to_real b) (to_real n), is_image obj = error (_ "bad arguments to " ++ "extract_bands") { extract_bands_op = Operator "extract_bands" (extract_bands b n) Operator_type.COMPOUND_REWRAP false; } invert x = oo_unary_function invert_op x, is_class x = im_invert x, is_image x = 255 - x, is_real x = error (_ "bad arguments to " ++ "invert") { invert_op = Operator "invert" invert Operator_type.COMPOUND false; } transform ipol wrap params image = oo_unary_function transform_op image, is_class image = im_transform image (to_matrix params) (to_real ipol) (to_real wrap), is_image image = error (_ "bad arguments to " ++ "transform") { transform_op = Operator "transform" (transform ipol wrap params) Operator_type.COMPOUND_REWRAP false; } transform_search max_error max_iterations order ipol wrap sample reference = oo_binary_function transform_search_op sample reference, is_class sample = oo_binary'_function transform_search_op sample reference, is_class reference = im_transform_search sample reference (to_real max_error) (to_real max_iterations) (to_real order) (to_real ipol) (to_real wrap), is_image sample && is_image reference = error (_ "bad arguments to " ++ "transform_search") { transform_search_op = Operator "transform_search" (transform_search max_error max_iterations order ipol wrap) Operator_type.COMPOUND false; } rotate interp angle image = oo_binary_function rotate_op angle image, is_class angle = oo_binary'_function rotate_op angle image, is_class image = im_affinei_all image interp.value a (-b) b a 0 0, is_real angle && is_image image = error (_ "bad arguments to " ++ "rotate") { rotate_op = Operator "rotate" (rotate interp) Operator_type.COMPOUND_REWRAP false; a = cos angle; b = sin angle; } matrix_binary fn a b = itom (fn (mtoi a) (mtoi b)) { mtoi x = im_mask2vips (Matrix x); itom x = (im_vips2mask x).value; } join_lr a b = oo_binary_function join_lr_op a b, is_class a = oo_binary'_function join_lr_op a b, is_class b = join_im a b, is_image a && is_image b = matrix_binary join_im a b, is_matrix a && is_matrix b = error (_ "bad arguments to " ++ "join_lr") { join_lr_op = Operator "join_lr" join_lr Operator_type.COMPOUND_REWRAP false; join_im a b = insert (get_width a) 0 b a; } join_tb a b = oo_binary_function join_tb_op a b, is_class a = oo_binary'_function join_tb_op a b, is_class b = join_im a b, is_image a && is_image b = matrix_binary join_im a b, is_matrix a && is_matrix b = error (_ "bad arguments to " ++ "join_tb") { join_tb_op = Operator "join_tb" join_tb Operator_type.COMPOUND_REWRAP false; join_im a b = insert 0 (get_height a) b a; } conj x = oo_unary_function conj_op x, is_class x = (re x, -im x), is_complex x || (is_image x && format == Image_format.COMPLEX) || (is_image x && format == Image_format.DPCOMPLEX) // assume it's some sort of real = x { format = get_header "BandFmt" x; conj_op = Operator "conj" conj Operator_type.COMPOUND false; } clip2fmt format image = oo_unary_function clip2fmt_op image, is_class image = im_clip2fmt image (to_real format), is_image image = error (_ "bad arguments to " ++ "clip2fmt") { clip2fmt_op = Operator "clip2fmt" (clip2fmt format) Operator_type.COMPOUND_REWRAP false; } embed type x y w h im = oo_unary_function embed_op im, is_class im = im_embed im (to_real type) (to_real x) (to_real y) (to_real w) (to_real h), is_image im = error (_ "bad arguments to " ++ "embed") { embed_op = Operator "embed" (embed type x y w h) Operator_type.COMPOUND_REWRAP false; } /* Morph a mask with a [[real]] matrix ... turn m2 into an image, morph it * with m1, turn it back to a matrix again. */ _morph_2_masks fn m1 m2 = m'' { // The [[real]] can contain 128 values ... squeeze them out! image = im_mask2vips (Matrix m2) == 255; m2_width = get_width image; m2_height = get_height image; // need to embed m2 in an image large enough for us to be able to // position m1 all around the edges, with a 1 pixel overlap image' = embed 0 (m1.width / 2) (m1.height / 2) (m2_width + (m1.width - 1)) (m2_height + (m1.height - 1)) image; // morph! image'' = fn m1 image'; // back to mask m' = im_vips2mask ((double) image''); // Turn 0 in output to 128 (don't care). m'' = map (map fn) m'.value { fn a = 128, a == 0; = a; } } dilate mask image = oo_unary_function dilate_op image, is_class image = im_dilate image (to_matrix mask), is_image image = error (_ "bad arguments to " ++ "dilate") { dilate_op = Operator "dilate" dilate_object Operator_type.COMPOUND_REWRAP false; dilate_object x = _morph_2_masks dilate mask x, is_matrix x = dilate mask x; } erode mask image = oo_unary_function erode_op image, is_class image = im_erode image (to_matrix mask), is_image image = error (_ "bad arguments to " ++ "erode") { erode_op = Operator "erode" erode_object Operator_type.COMPOUND_REWRAP false; erode_object x = _morph_2_masks erode mask x, is_matrix x = erode mask x; } conv mask image = oo_unary_function conv_op image, is_class image = im_conv image (to_matrix mask), is_image image = error (_ "bad arguments to " ++ "conv" ++ ": " ++ "conv (" ++ print mask ++ ") (" ++ print image ++ ")") { conv_op = Operator "conv" (conv mask) Operator_type.COMPOUND_REWRAP false; } convf mask image = oo_unary_function convf_op image, is_class image = im_conv_f image (to_matrix mask), is_image image = error (_ "bad arguments to " ++ "convf" ++ ": " ++ "convf (" ++ print mask ++ ") (" ++ print image ++ ")") { convf_op = Operator "convf" (convf mask) Operator_type.COMPOUND_REWRAP false; } convsep mask image = oo_unary_function convsep_op image, is_class image = im_convsep image (to_matrix mask), is_image image = error (_ "bad arguments to " ++ "convsep") { convsep_op = Operator "convsep" (convsep mask) Operator_type.COMPOUND_REWRAP false; } aconvsep layers mask image = oo_unary_function aconvsep_op image, is_class image = im_aconvsep image (to_matrix mask) (to_real layers), is_image image = error (_ "bad arguments to " ++ "aconvsep") { aconvsep_op = Operator "aconvsep" (aconvsep layers mask) Operator_type.COMPOUND_REWRAP false; } convsepf mask image = oo_unary_function convsepf_op image, is_class image = im_convsep_f image (to_matrix mask), is_image image = error (_ "bad arguments to " ++ "convsepf") { convsepf_op = Operator "convsepf" (convsepf mask) Operator_type.COMPOUND_REWRAP false; } rank w h n image = oo_unary_function rank_op image, is_class image = im_rank image (to_real w) (to_real h) (to_real n), is_image image = error (_ "bad arguments to " ++ "rank") { rank_op = Operator "rank" (rank w h n) Operator_type.COMPOUND_REWRAP false; } rank_image n x = rlist x.value, is_Group x = rlist x, is_list x = error (_ "bad arguments to " ++ "rank_image") { rlist l = wrapper ranked, has_wrapper = ranked { has_wrapper = has_member_list (has_member "Image") l; wrapper = get_member_list (has_member "Image") (get_member "Image") l; ranked = im_rank_image (map get_image l) (to_real n); } } greyc iterations amplitude sharpness anisotropy alpha sigma dl da gauss_prec interpolation fast_approx x = oo_unary_function greyc_op x, is_class x = greyc_im x, is_image x = error (_ "bad argument" ++ " (" ++ print x ++ ") to " ++ "greyc") { greyc_op = Operator "greyc" (greyc iterations amplitude sharpness anisotropy alpha sigma dl da gauss_prec interpolation fast_approx) Operator_type.COMPOUND_REWRAP false; greyc_im x = im_greyc x iterations amplitude sharpness anisotropy alpha sigma dl da gauss_prec interpolation fast_approx; } greyc_mask iterations amplitude sharpness anisotropy alpha sigma dl da gauss_prec interpolation fast_approx mask x = oo_binary_function greyc_mask_op mask x, is_class mask = oo_binary'_function greyc_mask_op mask x, is_class x = greyc_im mask x, is_image mask && is_image x = error (_ "bad arguments" ++ " (" ++ print mask ++ ", " ++ print x ++ ") " ++ "to " ++ "greyc") { greyc_mask_op = Operator "greyc_mask" (greyc_mask iterations amplitude sharpness anisotropy alpha sigma dl da gauss_prec interpolation fast_approx) Operator_type.COMPOUND_REWRAP false; greyc_im mask x = im_greyc_mask x mask iterations amplitude sharpness anisotropy alpha sigma dl da gauss_prec interpolation fast_approx; } // find the correlation surface for a small image within a big one correlate small big = oo_binary_function correlate_op small big, is_class small = oo_binary'_function correlate_op small big, is_class big = im_spcor big small, is_image small && is_image big = error (_ "bad arguments to " ++ "correlate") { correlate_op = Operator "correlate" correlate Operator_type.COMPOUND_REWRAP false; } // just sum-of-squares-of-differences correlate_fast small big = oo_binary_function correlate_fast_op small big, is_class small = oo_binary'_function correlate_fast_op small big, is_class big = im_fastcor big small, is_image small && is_image big = error (_ "bad arguments to " ++ "correlate_fast") { correlate_fast_op = Operator "correlate_fast" correlate_fast Operator_type.COMPOUND_REWRAP false; } // set Type, wrap as Plot_hist if it's a class hist_tag x = oo_unary_function hist_tag_op x, is_class x = image_set_type Image_type.HISTOGRAM x, is_image x = error (_ "bad arguments to " ++ "hist_tag") { hist_tag_op = Operator "hist_tag" (Plot_histogram @ hist_tag) Operator_type.COMPOUND false; } hist_find x = oo_unary_function hist_find_op x, is_class x = im_histgr x (-1), is_image x = error (_ "bad arguments to " ++ "hist_find") { hist_find_op = Operator "hist_find" (Plot_histogram @ hist_find) Operator_type.COMPOUND false; } hist_find_nD bins image = oo_unary_function hist_find_nD_op image, is_class image = im_histnD image (to_real bins), is_image image = error (_ "bad arguments to " ++ "hist_find_nD") { hist_find_nD_op = Operator "hist_find_nD" (hist_find_nD bins) Operator_type.COMPOUND_REWRAP false; } hist_find_indexed index value = oo_binary_function hist_find_indexed_op index value, is_class index = oo_binary'_function hist_find_indexed_op index value, is_class value = im_hist_indexed index value, is_image index && is_image value = error (_ "bad arguments to " ++ "hist_find_indexed") { hist_find_indexed_op = Operator "hist_find_indexed" (compose (compose Plot_histogram) hist_find_indexed) Operator_type.COMPOUND false; } hist_map hist image = oo_binary_function hist_map_op hist image, is_class hist = oo_binary'_function hist_map_op hist image, is_class image = im_maplut image hist, is_image hist && is_image image = error (_ "bad arguments to " ++ "hist_map") { // can't use rewrap, as we want to always wrap as image hist_map_op = Operator "hist_map" (compose (compose Image) hist_map) Operator_type.COMPOUND false; } hist_cum hist = oo_unary_function hist_cum_op hist, is_class hist = im_histcum hist, is_image hist = error (_ "bad arguments to " ++ "hist_cum") { hist_cum_op = Operator "hist_cum" hist_cum Operator_type.COMPOUND_REWRAP false; } hist_diff hist = oo_unary_function hist_diff_op hist, is_class hist = im_histdiff hist, is_image hist = error (_ "bad arguments to " ++ "hist_diff") { hist_diff_op = Operator "hist_diff" hist_diff Operator_type.COMPOUND_REWRAP false; im_histdiff h = (conv (Matrix [[-1, 1]]) @ clip2fmt (fmt (get_format h))) h { // up the format so it can represent the whole range of // possible values from this mask fmt x = Image_format.SHORT, x == Image_format.UCHAR || x == Image_format.CHAR = Image_format.INT, x == Image_format.USHORT || x == Image_format.SHORT || x == Image_format.UINT = x; } } hist_norm hist = oo_unary_function hist_norm_op hist, is_class hist = im_histnorm hist, is_image hist = error (_ "bad arguments to " ++ "hist_norm") { hist_norm_op = Operator "hist_norm" hist_norm Operator_type.COMPOUND_REWRAP false; } hist_inv hist = oo_unary_function hist_inv_op hist, is_class hist = inv hist, is_image hist = error (_ "bad arguments to " ++ "hist_inv") { hist_inv_op = Operator "hist_inv" hist_inv Operator_type.COMPOUND_REWRAP false; inv im = im_invertlut (to_matrix im''') len { // need a vertical doublemask im' = rot90 im, get_width im > 1 && get_height im == 1 = im, get_width im == 1 && get_height im > 1 = error (_ "not a hist"); len = get_height im'; // values must be scaled to 0 - 1 im'' = im' / (max im'); // add an index column on the left // again, must be in 0-1 y = ((make_xy 1 len)?1) / len; im''' = y ++ im''; } } hist_match in ref = oo_binary_function hist_match_op in ref, is_class in = oo_binary'_function hist_match_op in ref, is_class ref = im_histspec in ref, is_image in && is_image ref = error (_ "bad arguments to " ++ "hist_match") { hist_match_op = Operator "hist_match" hist_match Operator_type.COMPOUND_REWRAP false; } hist_equalize x = hist_map ((hist_norm @ hist_cum @ hist_find) x) x; hist_equalize_local w h image = oo_unary_function hist_equalize_local_op image, is_class image = lhisteq image, is_image image = error (_ "bad arguments to " ++ "hist_equalize_local") { hist_equalize_local_op = Operator "hist_equalize_local" (hist_equalize_local w h) Operator_type.COMPOUND_REWRAP false; // loop over bands, if necessary lhisteq im = im_lhisteq im (to_real w) (to_real h), get_bands im == 1 = (foldl1 join @ map lhisteq @ bandsplit) im; } // find the threshold below which are percent of the image (percent in [0,1]) // eg. hist_thresh 0.1 x == 12, then x < 12 will light up 10% of the pixels hist_thresh percent image = x { // our own normaliser ... we don't want to norm channels separately // norm to [0,1] my_hist_norm h = h / max h; // normalised cumulative hist // we sum the channels before we normalise, because we want to treat them // all the same h = (my_hist_norm @ sum @ bandsplit @ hist_cum @ hist_find) image.value; // threshold that, then use im_profile to search for the x position in the // histogram x = mean (im_profile (h > percent) 1); } /* Sometimes useful, despite plotting now being built in, for making * diagnostic images. */ hist_plot hist = oo_unary_function hist_plot_op hist, is_class hist = im_histplot hist, is_image hist = error (_ "bad arguments to " ++ "hist_plot") { hist_plot_op = Operator "hist_plot" (Image @ hist_plot) Operator_type.COMPOUND false; } zerox d x = oo_unary_function zerox_op x, is_class x = im_zerox x (to_real d), is_image x = error (_ "bad arguments to " ++ "zerox") { zerox_op = Operator "zerox" (zerox d) Operator_type.COMPOUND_REWRAP false; } resize interp xfac yfac image = oo_unary_function resize_op image, is_class image = resize_im image, is_image image = error (_ "bad arguments to " ++ "resize") { resize_op = Operator "resize" resize_im Operator_type.COMPOUND_REWRAP false; xfac' = to_real xfac; yfac' = to_real yfac; rxfac' = 1 / xfac'; ryfac' = 1 / yfac'; // is this interpolation nearest-neighbour? is_nn x = x.type == Interpolate_type.NEAREST_NEIGHBOUR; resize_im im // upscale by integer factor, nearest neighbour = im_zoom im xfac' yfac', is_int xfac' && is_int yfac' && xfac' >= 1 && yfac' >= 1 && is_nn interp // downscale by integer factor, nearest neighbour = im_subsample im rxfac' ryfac', is_int rxfac' && is_int ryfac' && rxfac' >= 1 && ryfac' >= 1 && is_nn interp // upscale by any factor, nearest neighbour // upscale by integer part, then affine to exact size = scale xg?1 yg?1 (im_zoom im xg?0 yg?0), xfac' >= 1 && yfac' >= 1 && is_nn interp // downscale by any factor, nearest neighbour // downscale by integer part, then affine to exact size = scale xs?1 ys?1 (im_subsample im xs?0 ys?0), rxfac' >= 1 && ryfac' >= 1 && is_nn interp // upscale by any factor with affine = scale xfac' yfac' im, xfac' >= 1 && yfac' >= 1 // downscale by any factor, bilinear // block shrink by integer factor, then resample to // exact with affine = scale xs?1 ys?1 (im_shrink im xs?0 ys?0), rxfac' >= 1 && ryfac' >= 1 = error ("resize: unimplemented argument combination:\n" ++ " xfac = " ++ print xfac' ++ "\n" ++ " yfac = " ++ print yfac' ++ "\n" ++ " interp = " ++ print interp ++ " (" ++ Interpolate_type.descriptions?interp.type ++ ")") { // convert a float scale to integer plus fraction // eg. scale by 2.5 becomes [2, 1.25] (x * 2.5 == x * 2 * 1.25) break f = [floor f, f / floor f]; // same, but for downsizing ... turn a float scale which is less than // 1 into an int shrink and a float scale // complicated: the int shrink may round the size down (eg. imagine // subsampling a 11 pixel wide image by 3, we'd get a 3 pixel wide // image, not a 3.666 pixel wide image), so pass in the size of image // we are operating on and adjust for any rounding // so ... x is (eg.) 467, f is (eg. 128/467, about 0.274) rbreak x f = [int_shrink, float_resample] { // the size of image we are aiming for after the combined int and // float resample x' = x * f; // int part int_shrink = floor (1 / f); // size after int shrink x'' = floor (x / int_shrink); // therefore what we need for the float part float_resample = x' / x''; } width = get_width im; height = get_height im; // grow and shrink factors xg = break xfac'; yg = break yfac'; xs = rbreak width xfac'; ys = rbreak height yfac'; // resize scale xfac yfac im = im_affinei_all im interp.value xfac 0 0 yfac 0 0; } } sharpen radius x1 y2 y3 m1 m2 in = oo_unary_function sharpen_op in, is_class in = im_sharpen in (to_real radius) (to_real x1) (to_real y2) (to_real y3) (to_real m1) (to_real m2), is_image in = error (_ "bad arguments to " ++ "sharpen") { sharpen_op = Operator "sharpen" (sharpen radius x1 y2 y3 m1 m2) Operator_type.COMPOUND_REWRAP false; } tone_analyse s m h sa ma ha in = oo_unary_function tone_analyse_op in, is_class in = im_tone_analyse in (to_real s) (to_real m) (to_real h) (to_real sa) (to_real ma) (to_real ha), is_image in = error (_ "bad arguments to " ++ "tone_analyse") { tone_analyse_op = Operator "tone_analyse" (Plot_histogram @ tone_analyse s m h sa ma ha) Operator_type.COMPOUND false; } tone_map hist image = oo_binary_function tone_map_op hist image, is_class hist = oo_binary'_function tone_map_op hist image, is_class image = im_tone_map image hist, is_image hist && is_image image = error (_ "bad arguments to " ++ "tone_map") { tone_map_op = Operator "tone_map" tone_map Operator_type.COMPOUND_REWRAP false; } tone_build fmt b w s m h sa ma ha = (Plot_histogram @ clip2fmt fmt) (im_tone_build_range mx mx (to_real b) (to_real w) (to_real s) (to_real m) (to_real h) (to_real sa) (to_real ma) (to_real ha)) { mx = Image_format.maxval fmt; } icc_export depth profile intent in = oo_unary_function icc_export_op in, is_class in = im_icc_export_depth in (to_real depth) (expand profile) (to_real intent), is_image in = error (_ "bad arguments to " ++ "icc_export") { icc_export_op = Operator "icc_export" (icc_export depth profile intent) Operator_type.COMPOUND_REWRAP false; } icc_import profile intent in = oo_unary_function icc_import_op in, is_class in = im_icc_import in (expand profile) (to_real intent), is_image in = error (_ "bad arguments to " ++ "icc_import") { icc_import_op = Operator "icc_import" (icc_import profile intent) Operator_type.COMPOUND_REWRAP false; } icc_import_embedded intent in = oo_unary_function icc_import_embedded_op in, is_class in = im_icc_import_embedded in (to_real intent), is_image in = error (_ "bad arguments to " ++ "icc_import_embedded") { icc_import_embedded_op = Operator "icc_import_embedded" (icc_import_embedded intent) Operator_type.COMPOUND_REWRAP false; } icc_transform in_profile out_profile intent in = oo_unary_function icc_transform_op in, is_class in = im_icc_transform in (expand in_profile) (expand out_profile) (to_real intent), is_image in = error (_ "bad arguments to " ++ "icc_transform") { icc_transform_op = Operator "icc_transform" (icc_transform in_profile out_profile intent) Operator_type.COMPOUND_REWRAP false; } icc_ac2rc profile in = oo_unary_function icc_ac2rc_op in, is_class in = im_icc_ac2rc in (expand profile), is_image in = error (_ "bad arguments to " ++ "icc_ac2rc") { icc_ac2rc_op = Operator "icc_ac2rc" (icc_ac2rc profile) Operator_type.COMPOUND_REWRAP false; } // Given a xywh rect, flip it around so wh are always positive rect_normalise x y w h = [x', y', w', h'] { x' = x + w, w < 0 = x; y' = y + h, h < 0 = y; w' = abs w; h' = abs h; } draw_flood_blob x y ink image = oo_unary_function draw_flood_blob_op image, is_class image = im_draw_flood_blob image (to_real x) (to_real y) ink, is_image image = error (_ "bad arguments to " ++ "draw_flood_blob") { draw_flood_blob_op = Operator "draw_flood_blob" (draw_flood_blob x y ink) Operator_type.COMPOUND_REWRAP false; } draw_flood x y ink image = oo_unary_function draw_flood_op image, is_class image = im_draw_flood image (to_real x) (to_real y) ink, is_image image = error (_ "bad arguments to " ++ "draw_flood") { draw_flood_op = Operator "draw_flood" (draw_flood x y ink) Operator_type.COMPOUND_REWRAP false; } /* This version of draw_rect uses insert_noexpand and will be fast, even for * huge images. */ draw_rect_width x y w h f t ink image = oo_unary_function draw_rect_width_op image, is_class image = my_draw_rect_width image (to_int x) (to_int y) (to_int w) (to_int h) (to_int f) (to_int t) ink, is_image image = error (_ "bad arguments to " ++ "draw_rect_width") { draw_rect_width_op = Operator "draw_rect_width" (draw_rect_width x y w h f t ink) Operator_type.COMPOUND_REWRAP false; my_draw_rect_width image x y w h f t ink = insert x' y' (block w' h') image, f == 1 = (insert x' y' (block w' t) @ insert (x' + w' - t) y' (block t h') @ insert x' (y' + h' - t) (block w' t) @ insert x' y' (block t h')) image { insert = insert_noexpand; block w h = image_new w h (get_bands image) (get_format image) (get_coding image) (get_type image) ink' 0 0; ink' = Vector ink, is_list ink = ink; [x', y', w', h'] = rect_normalise x y w h; } } /* Default to 1 pixel wide edges. */ draw_rect x y w h f ink image = draw_rect_width x y w h f 1 ink image; /* This version of draw_rect uses the paintbox rect draw operation. It is an * inplace operation and will use bucketloads of memory. */ draw_rect_paintbox x y w h f ink image = oo_unary_function draw_rect_op image, is_class image = im_draw_rect image (to_real x) (to_real y) (to_real w) (to_real h) (to_real f) ink, is_image image = error (_ "bad arguments to " ++ "draw_rect_paintbox") { draw_rect_op = Operator "draw_rect" (draw_rect x y w h f ink) Operator_type.COMPOUND_REWRAP false; } draw_circle x y r f ink image = oo_unary_function draw_circle_op image, is_class image = im_draw_circle image (to_real x) (to_real y) (to_real r) (to_real f) ink, is_image image = error (_ "bad arguments to " ++ "draw_circle") { draw_circle_op = Operator "draw_circle" (draw_circle x y r f ink) Operator_type.COMPOUND_REWRAP false; } draw_line x1 y1 x2 y2 ink image = oo_unary_function draw_line_op image, is_class image = im_draw_line image (to_real x1) (to_real y1) (to_real x2) (to_real y2) ink, is_image image = error (_ "bad arguments to " ++ "draw_line") { draw_line_op = Operator "draw_line" (draw_line x1 y1 x2 y2 ink) Operator_type.COMPOUND_REWRAP false; } print_base base in = oo_unary_function print_base_op in, is_class in = map (print_base base) in, is_list in = print_base_real, is_real in = error (_ "bad arguments to " ++ "print_base") { print_base_op = Operator "print_base" (print_base base) Operator_type.COMPOUND false; print_base_real = error "print_base: bad base", base < 2 || base > 16 = "0", in < 0 || chars == [] = reverse chars { digits = map (\x x % base) (takewhile (not_equal 0) (iterate (\x idivide x base) in)); chars = map tohd digits; tohd x = (char) ((int) '0' + x), x < 10 = (char) ((int) 'A' + (x - 10)); } } /* id x: the identity function * * id :: * -> * */ id x = x; /* const x y: junk y, return x * * (const 3) is the function that always returns 3. * const :: * -> ** -> * */ const x y = x; /* converse fn a b: swap order of args to fn * * converse fn a b == fn b a * converse :: (* -> ** -> ***) -> ** -> * -> *** */ converse fn a b = fn b a; /* fix fn x: find the fixed point of a function */ fix fn x = limit (iterate fn x); /* until pred fn n: apply fn to n until pred succeeds; return that value * * until (more 1000) (multiply 2) 1 = 1024 * until :: (* -> bool) -> (* -> *) -> * -> * */ until pred fn n = n, pred n = until pred fn (fn n); /* Infinite list of primes. */ primes = 1 : (sieve [2 ..]) { sieve l = hd l : sieve (filter (nmultiple (hd l)) (tl l)); nmultiple n x = x / n != (int) (x / n); } /* Map an n-ary function (pass the args as a list) over groups of objects. * The objects can be single objects or groups. If more than one * object is a group, we iterate for the length of the smallest group. * Don't loop over plain lists, since we want (eg.) "mean [1, 2, 3]" to work. * Treat [] as no-value --- ie. if any of the inputs are [] we put [] into the * output and don't apply the function. copy-pasted into _types, keep in sync */ map_nary fn args = fn args, groups == [] = Group (map process [0, 1 .. shortest - 1]) { // find all the group arguments groups = filter is_Group args; // what's the length of the shortest group arg? shortest = foldr1 min_pair (map (len @ get_value) groups); // process index n ... pull that member from each argument // recurse to handle application, so we work for nested groups too process n = NULL, any (map (is_noval n) args) = map_nary fn (map (extract n) args) { extract n arg = arg.value?n, is_Group arg = arg; is_noval n arg = is_Group arg && arg.value?n == NULL; } } /* Map a 1-ary function over an object. */ map_unary fn a = map_nary (list_1ary fn) [a]; /* Map a 2-ary function over a pair of objects. */ map_binary fn a b = map_nary (list_2ary fn) [a, b]; /* Map a 3-ary function over three objects. */ map_trinary fn a b c = map_nary (list_3ary fn) [a, b, c]; /* Map a 4-ary function over three objects. */ map_quaternary fn a b c d = map_nary (list_4ary fn) [a, b, c, d]; /* Same as map_nary, but for lists. Handy for (eg.) implementing arith ops on * vectors and matricies. */ map_nary_list fn args = fn args, lists == [] = map process [0, 1 .. shortest - 1] { // find all the list arguments lists = filter is_list args; // what's the length of the shortest list arg? shortest = foldr1 min_pair (map len lists); // process index n ... pull that member from each argument // recurse to handle application, so we work for nested lists too process n = map_nary_list fn (map (extract n) args) { extract n arg = arg?n, is_list arg = arg; } } map_unaryl fn a = map_nary_list (list_1ary fn) [a]; map_binaryl fn a b = map_nary_list (list_2ary fn) [a, b]; /* Remove features smaller than x pixels across from an image. This used to be * rather complex ... convsep is now good enough to use. */ smooth x image = convsep (matrix_gaussian_blur (to_real x * 2)) image; /* Chop up an image into a list of lists of smaller images. Pad edges with * black. */ imagearray_chop tile_width tile_height hoverlap voverlap i = map chop' [0, vstep .. last_y] { width = get_width i; height = get_height i; bands = get_bands i; format = get_format i; type = get_type i; tile_width' = to_real tile_width; tile_height' = to_real tile_height; hoverlap' = to_real hoverlap; voverlap' = to_real voverlap; /* Unique pixels per tile. */ hstep = tile_width' - hoverlap'; vstep = tile_height' - voverlap'; /* Number of tiles across and down. Remember the case where width == * hstep. */ across = (int) ((width - 1) / hstep) + 1; down = (int) ((height - 1) / vstep) + 1; /* top/left of final tile. */ last_x = hstep * (across - 1); last_y = vstep * (down - 1); /* How much do we need to pad by? */ sx = last_x + tile_width'; sy = last_y + tile_height'; /* Expand image with black to pad size. */ pad = embed 0 0 0 sx sy i; /* Chop up a row. */ chop' y = map chop'' [0, hstep .. last_x] { chop'' x = extract_area x y tile_width' tile_height' pad; } } /* Reassemble image. */ imagearray_assemble hoverlap voverlap il = (image_set_origin 0 0 @ foldl1 tbj @ map (foldl1 lrj)) il { lrj l r = insert (get_width l + hoverlap) 0 r l; tbj t b = insert 0 (get_height t + voverlap) b t; } /* Generate an nxn identity matrix. */ identity_matrix n = error "identity_matrix: n > 0", n < 1 = map line [0 .. n - 1] { line p = take p [0, 0 ..] ++ [1] ++ take (n - p - 1) [0, 0 ..]; } /* Incomplete gamma function Q(a, x) == 1 - P(a, x) FIXME ... this is now a builtin, until we can get a nice List class (requires overloadable ':') gammq a x = error "bad args", x < 0 || a <= 0 = 1 - gamser, x < a + 1 = gammcf { gamser = (gser a x)?0; gammcf = (gcf a x)?0; } */ /* Incomplete gamma function P(a, x) evaluated as series representation. Also * return ln(gamma(a)) ... nr in c, pp 218 */ gser a x = [gamser, gln] { gln = gammln a; gamser = error "bad args", x < 0 = 0, x == 0 = 1 // fix this { // maximum iterations maxit = 100; ap = List [a + 1, a + 2 ...]; xoap = x / ap; del = map product (prefixes xoap.value); /* del = map (multiply (1 / a)) (map product (prefixes xoap)) del = xap = iterate (multiply */ /* Generate all prefixes of a list ... [1,2,3] -> [[1], [1, 2], [1, 2, * 3], [1, 2, 3, 4] ...] */ prefixes l = map (converse take l) [1..]; } } /* ln(gamma(xx)) ... nr in c, pp 214 */ gammln xx = gln { cof = [76.18009172947146, -86.50532032941677, 24.01409824083091, -1.231739572450155, 0.1208650973866179e-2, -0.5395239384953e-5]; y = take 6 (iterate (add 1) (xx + 1)); ser = 1.000000000190015 + sum (map2 divide cof y); tmp = xx + 0.5; tmp' = tmp - ((xx + 0.5) * log tmp); gln = -tmp + log (2.5066282746310005 * ser / xx); } /* make a LUT from a scatter */ buildlut x = Plot_histogram (im_buildlut x), is_Matrix x && x.width > 1 = im_buildlut (Matrix x), is_matrix x && is_list_len_more 1 x?0 = error (_ "bad arguments to " ++ "buildlut"); /* Linear regression. Return a class with the stuff we need in. * from s15.2, p 665 NR in C */ linreg xes yes = obj { obj = class { // in case we ever get shown in the workspace _vislevel = 2; slope = sum [t * y :: [t, y] <- zip2 tes yes] / st2; intercept = (sy - sx * slope) / ss; chi2 = sum [(y - intercept - slope * x) ** 2 :: [x, y] <- zip2 xes yes]; siga = (chi2 / (ss - 2)) ** 0.5 * ((1 + sx ** 2 / (ss * st2)) / ss) ** 0.5; sigb = (chi2 / (ss - 2)) ** 0.5 * (1 / st2) ** 0.5; // for compat with linregw, see below q = 1.0; } ss = len xes; sx = sum xes; sy = sum yes; sxoss = sx / ss; tes = [x - sxoss :: x <- xes]; st2 = sum [t ** 2 :: t <- tes]; } /* Weighted linear regression. Xes, yes and a list of deviations. */ linregw xes yes devs = obj { obj = class { // in case we ever get shown in the workspace _vislevel = 2; slope = sum [(t * y) / sd :: [t, y, sd] <- zip3 tes yes devs] / st2; intercept = (sy - sx * slope) / ss; chi2 = sum [((y - intercept - slope * x) / sd) ** 2 :: [x, y, sd] <- zip3 xes yes devs]; siga = ((1 + sx * sx / (ss * st2)) / ss) ** 0.5; sigb = (1 / st2) ** 0.5; q = gammq (0.5 * (len xes - 2)) (0.5 * chi2); } wt = [sd ** -0.5 :: sd <- devs]; ss = sum wt; sx = sum [x * w :: [x, w] <- zip2 xes wt]; sy = sum [y * w :: [y, w] <- zip2 yes wt]; sxoss = sx / ss; tes = [(x - sxoss) / sd :: [x, sd] <- zip2 xes devs]; st2 = sum [t ** 2 :: t <- tes]; } /* Clustering: pass in a list of points, repeatedly merge the * closest two points until no two points are closer than the threshold. * Return [merged-points, corresponding-weights]. A weight is a list of the * indexes we merged to make that point, ie. len weight == how significant * this point is. * * eg. * cluster 12 [152,154,155,42,159] == * [[155,42],[[1,2,0,4],[3]]] */ cluster thresh points = oo_unary_function cluster_op points, is_class points // can't use [0..len points - 1], in case len points == 0 = merge [points, map (converse cons []) (take (len points) [0 ..])], is_list points = error (_ "bad arguments to " ++ "cluster") { cluster_op = Operator "cluster" (cluster thresh) Operator_type.COMPOUND false; merge x = x, m < 2 || d > thresh = merge [points', weights'] { [points, weights] = x; m = len points; // generate indexes of all possible pairs, avoiding comparing a thing // to itself, and assuming that dist is reflexive // first index is always less than 2nd index // the +1,+2 makes sure we have an increasing generator, otherwise we // can get [3 .. 4] (for example), which will make a decreasing // sequence pairs = [[x, y] :: x <- [0 .. m - 1]; y <- [x + 1, x + 2 .. m - 1]]; // distance function // arg is eg. [3,1], meaning get distance from point 3 to point 1 dist x = abs (points?i - points?j) { [i, j] = x; } // smallest distance, then the two points we merge p = minpos (map dist pairs); d = dist pairs?p; [i, j] = pairs?p; // new point and new weight nw = weights?i ++ weights?j; np = (points?i * len weights?i + points?j * len weights?j) / len nw; // remove element i from a list remove i l = take i l ++ drop (i + 1) l; // remove two old points, add the new merged one // i < j (see "pairs", above) points' = np : remove i (remove j points); weights' = nw : remove i (remove j weights); } } /* Extract the area of an image around an arrow. * Transform the image to make the arrow horizontal, then displace by hd and * vd pxels, then cut out a bit h pixels high centered on the arrow. */ extract_arrow hd vd h arrow = extract_area (re p' + hd) (im p' - h / 2 + vd) (re pv) h im' { // the line as a polar vector pv = polar (arrow.width, arrow.height); a = im pv; // smallest rotation that will make the line horizontal a' = 360 - a, a > 270 = 180 - a, a > 90 = -a; im' = rotate Interpolate_bilinear a' arrow.image; // look at the start and end of the arrow, pick the leftmost p = (arrow.left, arrow.top), arrow.left <= arrow.right = (arrow.right, arrow.bottom); // transform that point to im' space p' = rectangular (polar p + (0, a')) + (im'.xoffset, im'.yoffset); } /* You'd think these would go in _convert, but they are not really colour ops, * so put them here. */ rad2float image = oo_unary_function rad2float_op image, is_class image = im_rad2float image, is_image image = error (_ "bad arguments to " ++ "rad2float") { rad2float_op = Operator "rad2float" rad2float Operator_type.COMPOUND_REWRAP false; } float2rad image = oo_unary_function float2rad_op image, is_class image = im_float2rad image, is_image image = error (_ "bad arguments to " ++ "float2rad") { float2rad_op = Operator "float2rad" float2rad Operator_type.COMPOUND_REWRAP false; } segment x = oo_unary_function segment_op x, is_class x = image', is_image x = error (_ "bad arguments to " ++ "segment") { segment_op = Operator "segment" segment Operator_type.COMPOUND_REWRAP false; [image, nsegs] = im_segment x; image' = im_copy_set_meta image "n-segments" nsegs; } point a b = oo_binary_function point_op a b, is_class a = oo_binary'_function point_op a b, is_class b = im_read_point b x y, is_image b = [b?x?y], is_matrix b = [b?x], is_real_list b && y == 0 = [b?y], is_real_list b && x == 0 = error (_ "bad arguments to " ++ "point") { point_op = Operator "point" (\a\b Vector (point a b)) Operator_type.COMPOUND false; (x, y) = a, is_complex a; = (a?0, a?1), is_real_list a && is_list_len 2 a = error "bad position format"; } /* One image in, one out. */ system_image command x = oo_unary_function system_image_op x, is_class x = system x, is_image x = error (_ "bad arguments to " ++ "system_image") { system_image_op = Operator "system_image" (system_image command) Operator_type.COMPOUND_REWRAP false; system im = image_out { [image_out, log] = im_system_image (get_image im) "%s.tif" "%s.tif" command; } } /* Two images in, one out. */ system_image2 command x1 x2 = oo_binary_function system_image2_op x1 x2, is_class x1 = oo_binary'_function system_image2_op x1 x2, is_class x2 = system x1 x2, is_image x1 && is_image x2 = error (_ "bad arguments to " ++ "system_image2") { system_image2_op = Operator "system_image2" (system_image2 command) Operator_type.COMPOUND_REWRAP false; system x1 x2 = image_out { [image_out] = vips_call "system" [command] [ $in => [x1, x2], $out => true, $out_format => "%s.tif", $in_format => "%s.tif" ]; } } /* Three images in, one out. */ system_image3 command x1 x2 x3 = oo_binary_function system_image2_op x2 x3, is_class x2 = oo_binary'_function system_image2_op x2 x3, is_class x3 = system x1 x2 x3, is_image x1 && is_image x2 && is_image x3 = error (_ "bad arguments to " ++ "system_image3") { system_image2_op = Operator "system_image2" (system_image3 command x1) Operator_type.COMPOUND_REWRAP false; system x1 x2 x3 = image_out { [image_out] = vips_call "system" [command] [ $in => [x1, x2, x3], $out => true, $out_format => "%s.tif", $in_format => "%s.tif" ]; } } /* Zero images in, one out. */ system_image0 command = Image image_out { [image_out] = vips_call "system" [command] [ $out => true, $out_format => "%s.tif" ]; } hough_line w h x = oo_unary_function hough_line_op x, is_class x = hline (to_real w) (to_real h) x, is_image x = error (_ "bad arguments to " ++ "hough_line") { hough_line_op = Operator "hough_line" (hough_line w h) Operator_type.COMPOUND_REWRAP false; hline w h x = pspace { [pspace] = vips_call "hough_line" [x] [ $width => w, $height => h ]; } } hough_circle s mn mx x = oo_unary_function hough_circle_op x, is_class x = hcircle (to_real s) (to_real mn) (to_real mx) x, is_image x = error (_ "bad arguments to " ++ "hough_circle") { hough_circle_op = Operator "hough_circle" (hough_circle s mn mx) Operator_type.COMPOUND_REWRAP false; hcircle s mn mx x = pspace { [pspace] = vips_call "hough_circle" [x] [ $scale => s, $min_radius => mn, $max_radius => mx ]; } } nip2-8.7.0/share/nip2/compat/7.40/Preferences.ws0000644000175000017500000010177313224651032015767 00000000000000 nip2-8.7.0/share/nip2/compat/7.40/Filter.def0000644000175000017500000011642013224651032015053 00000000000000Filter_conv_item = class Menupullright "_Convolution" "various spatial convolution filters" { /* Some useful masks. */ filter_blur = Matrix_con 9 0 [[1, 1, 1], [1, 1, 1], [1, 1, 1]]; filter_sharp = Matrix_con 8 0 [[-1, -1, -1], [-1, 16, -1], [-1, -1, -1]]; filter_emboss = Matrix_con 1 128 [[-1, 0], [0, 1]]; filter_laplacian = Matrix_con 1 128 [[-1, -1, -1], [-1, 8, -1], [-1, -1, -1]]; filter_sobel = Matrix_con 1 128 [[1, 2, 1], [0, 0, 0], [-1, -2, -1]]; filter_lindet = Matrix_con 1 0 [[1, 1, 1], [-2, -2, -2], [1, 1, 1]]; Blur_item = class Menuaction "_Blur" "3x3 blur of image" { action x = map_unary (conv filter_blur) x; } Sharpen_item = class Menuaction "_Sharpen" "3x3 sharpen of image" { action x = map_unary (conv filter_sharp) x; } Emboss_item = class Menuaction "_Emboss" "1 pixel displace emboss" { action x = map_unary (conv filter_emboss) x; } Laplacian_item = class Menuaction "_Laplacian" "3x3 laplacian edge detect" { action x = map_unary (conv filter_laplacian) x; } Sobel_item = class Menuaction "So_bel" "3x3 Sobel edge detect" { action x = map_unary sobel x { sobel im = abs (a - 128) + abs (b - 128) { a = conv filter_sobel im; b = conv (rot270 filter_sobel) im; } } } /* 3x3 line detect of image diagonals should be scaled down by root(2) I guess Kirk */ Linedet_item = class Menuaction "Li_ne Detect" "3x3 line detect" { action x = map_unary lindet x { lindet im = foldr1 max_pair images { masks = take 4 (iterate rot45 filter_lindet); images = map (converse conv im) masks; } } } Usharp_item = class Menuaction "_Unsharp Mask" "cored sharpen of L only in LAB image" { action x = class _result { _vislevel = 3; size = Option "Radius" [ "3 pixels", "5 pixels", "7 pixels", "9 pixels", "11 pixels", "51 pixels" ] 0; st = Scale "Smoothness threshold" 0 5 1.5; bm = Scale "Brighten by at most" 1 50 10; dm = Scale "Darken by at most" 1 50 50; fs = Scale "Sharpen flat areas by" (-2) 5 1; js = Scale "Sharpen jaggy areas by" (-2) 5 2; _result = map_unary process x { process in = Image in''' { in' = colour_transform_to Image_type.LABS in.value; in'' = sharpen [3, 5, 7, 9, 11, 51]?size st bm dm fs js in'; in''' = colour_transform_to (get_type in) in''; } } } } sep1 = Menuseparator; Custom_blur_item = class Menuaction "Custom B_lur / Sharpen" "blur or sharpen with tuneable parameters" { action x = class _result { _vislevel = 3; type = Option "Type" ["Blur", "Sharpen"] 0; r = Scale "Radius" 1 100 1; fac = Scale "Amount" 0 1 1; layers = Scale "Layers" 1 100 10; shape = Option "Mask shape" [ "Square", "Gaussian" ] 0; prec = Option "Precision" ["Int", "Float", "Approximate"] 0; _result = map_unary process x { process in = clip2fmt blur.format proc { mask = matrix_blur r.value, shape.value == 0 = matrix_gaussian_blur r.value; blur = [convsep, convsepf, aconvsep layers]?prec mask in; proc = in + fac * (in - blur), type == 1 = blur * fac + in * (1 - fac); } } } } Custom_conv_item = class Menuaction "Custom C_onvolution" "convolution filter with tuneable parameters" { action x = class _result { _vislevel = 3; matrix = Matrix_con 1 0 [[0, 0, 0], [0, 1, 0], [0, 0, 0]]; separable = Toggle "Seperable convolution" false, matrix.width == 1 || matrix.height == 1 = false; type = Option "Convolution type" ["Int", "Float"] 0; rotate = Option "Rotate" [ "Don't rotate", "4 x 45 degrees", "8 x 45 degrees", "2 x 90 degrees" ] 0; _result = map_unary process x { process in = in.Image in' { conv_fn = im_lindetect, !separable && type == 0 && rotate == 1 = im_compass, !separable && type == 0 && rotate == 2 = im_gradient, !separable && type == 0 && rotate == 3 = im_conv, !separable && type == 0 = im_convsep, separable && type == 0 = im_conv_f, !separable && type == 1 = im_convsep_f, separable && type == 1 = error "boink!"; in' = conv_fn in.value matrix; } } } } } Filter_rank_item = class Menupullright "_Rank" "various rank filters" { Median_item = class Menuaction "_Median" "3x3 median rank filter" { action x = map_unary (rank 3 3 4) x; } Image_rank_item = class Menuaction "_Image Rank" "pixelwise rank a list or group of images" { action x = class _result { _vislevel = 3; select = Expression "Rank" ((int) (guess_size / 2)) { guess_size = len x, is_list x = len x.value, is_Group x = 0; } // can't really iterate over groups ... since we allow a group // argument _result = rank_image select x; } } Custom_rank_item = class Menuaction "Custom _Rank" "rank filter with tuneable parameters" { action x = class _result { _vislevel = 3; window_width = Expression "Window width" 3; window_height = Expression "Window height" 3; select = Expression "Rank" ((int) ((to_real window_width * to_real window_height) / 2)); _result = map_unary process x { process in = rank window_width window_height select in; } } } } Filter_morphology_item = class Menupullright "_Morphology" "various morphological filters" { /* Some useful masks. */ mask8 = Matrix_mor [[255, 255, 255], [255, 255, 255], [255, 255, 255]]; mask4 = Matrix_mor [[128, 255, 128], [255, 255, 255], [128, 255, 128]]; mask1 = Matrix_mor [[0, 0, 0], [0, 255, 0], [0, 0, 0]]; thin = Matrix_mor [[0, 0, 0], [128, 255, 128], [255, 255, 255]]; Threshold_item = Select_item.Threshold_item; sep1 = Menuseparator; Dilate_item = class Menupullright "_Dilate" "morphological dilate" { Dilate8_item = class Menuaction "_8-connected" "dilate with an 8-connected mask" { action x = map_unary (dilate mask8) x; } Dilate4_item = class Menuaction "_4-connected" "dilate with a 4-connected mask" { action x = map_unary (dilate mask4) x; } } Erode_item = class Menupullright "_Erode" "morphological erode" { Erode8_item = class Menuaction "_8-connected" "erode with an 8-connected mask" { action x = map_unary (erode mask8) x; } Erode4_item = class Menuaction "_4-connected" "erode with a 4-connected mask" { action x = map_unary (erode mask4) x; } } Custom_morph_item = class Menuaction "Custom _Morphology" "convolution morphological operator" { action x = class _result { _vislevel = 3; mask = mask4; type = Option "Operation" ["Erode", "Dilate"] 1; apply = Expression "Number of times to apply mask" 1; _result = map_unary morph x { morph image = Image value' { fatmask = (iterate (dilate mask) mask)?(to_real apply - 1); value' = im_erode image.value fatmask, type.value == 0 = im_dilate image.value fatmask; } } } } sep2 = Menuseparator; Open_item = class Menuaction "_Open" "open with an 8-connected mask" { action x = map_unary (dilate mask8 @ erode mask8) x; } Close_item = class Menuaction "_Close" "close with an 8-connected mask" { action x = map_unary (erode mask8 @ dilate mask8) x; } Clean_item = class Menuaction "C_lean" "remove 8-connected isolated points" { action x = map_unary clean x { clean x = x ^ erode mask1 x; } } Thin_item = class Menuaction "_Thin" "thin once" { action x = map_unary thinall x { masks = take 8 (iterate rot45 thin); thin1 m x = x ^ erode m x; thinall x = foldr thin1 x masks; } } } Filter_fourier_item = class Menupullright "_Fourier" "various Fourier filters" { preview_size = 64; sense_option = Option "Sense" [ "Pass", "Reject" ] 0; // make a visualisation image make_vis fn = (Image @ image_set_type Image_type.FOURIER @ rotquad @ fn) (im_create_fmask preview_size preview_size); // make the process function process fn in = (Image @ fn) (im_flt_image_freq in.value); New_ideal_item = class Menupullright "_Ideal" "various ideal Fourier filters" { High_low_item = class Menuaction "_High or Low Pass" "highpass/lowpass ideal Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; // call a freq func with our parameters _params f = f sense.value fc.value 0 0 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" "ring pass/reject ideal Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; rw = Scale "Ring width" 0.01 0.99 0.5; // call a freq func with our parameters _params f = f (sense.value + 6) fc.value rw.value 0 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Band_item = class Menuaction "_Band Pass or Band Reject" "band pass/reject ideal Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fcx = Scale "Horizontal frequency cutoff" 0.01 0.99 0.5; fcy = Scale "Vertical frequency cutoff" 0.01 0.99 0.5; r = Scale "Radius" 0.01 0.99 0.5; // call a freq func with our parameters _params f = f (sense.value + 12) fcx.value fcy.value r.value 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } } New_gaussian_item = class Menupullright "_Gaussian" "various Gaussian Fourier filters" { High_low_item = class Menuaction "_High or Low Pass" "highpass/lowpass Gaussian Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; // call a freq func with our parameters _params f = f (sense.value + 4) fc.value ac.value 0 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" "ring pass/reject Gaussian Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; rw = Scale "Ring width" 0.01 0.99 0.5; // call a freq func with our parameters _params f = f (sense.value + 10) fc.value rw.value ac.value 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Band_item = class Menuaction "_Band Pass or Band Reject" "band pass/reject Gaussian Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fcx = Scale "Horizontal frequency cutoff" 0.01 0.99 0.5; fcy = Scale "Vertical frequency cutoff" 0.01 0.99 0.5; r = Scale "Radius" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; // call a freq func with our parameters _params f = f (sense.value + 16) fcx.value fcy.value r.value ac.value 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } } New_butterworth_item = class Menupullright "_Butterworth" "various Butterworth Fourier filters" { High_low_item = class Menuaction "_High or Low Pass" "highpass/lowpass Butterworth Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; o = Scale "Order" 1 10 2; // call a freq func with our parameters _params f = f (sense.value + 2) o.value fc.value ac.value 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" "ring pass/reject Butterworth Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; rw = Scale "Ring width" 0.01 0.99 0.5; o = Scale "Order" 1 10 2; // call a freq func with our parameters _params f = f (sense.value + 8) o.value fc.value rw.value ac.value 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Band_item = class Menuaction "_Band Pass or Band Reject" "band pass/reject Butterworth Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fcx = Scale "Horizontal frequency cutoff" 0.01 0.99 0.5; fcy = Scale "Vertical frequency cutoff" 0.01 0.99 0.5; r = Scale "Radius" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; o = Scale "Order" 1 10 2; // call a freq func with our parameters _params f = f (sense.value + 14) o.value fcx.value fcy.value r.value ac.value; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } } } Filter_enhance_item = class Menupullright "_Enhance" "various enhancement filters" { Falsecolour_item = class Menuaction "_False Colour" "false colour a mono image" { action x = class _result { _vislevel = 3; o = Scale "Offset" (-255) 255 0; clip = Toggle "Clip colour range" false; _result = map_unary process x { process im = falsecolour mono'' { mono = colour_transform_to Image_type.B_W im; mono' = mono + o; mono'' = (unsigned char) mono', clip = (unsigned char) (mono' & 0xff); } } } } Statistical_diff_item = class Menuaction "_Statistical Difference" "statistical difference of an image" { action x = class _result { _vislevel = 3; wsize = Expression "Window size" 11; tmean = Expression "Target mean" 128; mean_weight = Scale "Mean weight" 0 1 0.8; tdev = Expression "Target deviation" 50; dev_weight = Scale "Deviation weight" 0 1 0.8; border = Toggle "Output image matches input image in size" true; _result = map_unary process x { process in = Image in'' { in' = colour_transform_to Image_type.B_W in.value; fn = im_stdif, border = im_stdif_raw; in'' = fn in' mean_weight.value tmean.expr dev_weight.value tdev.expr wsize.expr wsize.expr; } } } } Hist_equal_item = class Menupullright "_Equalise Histogram" "equalise contrast" { Global_item = class Menuaction "_Global" "equalise contrast globally" { action x = map_unary hist_equalize x; } Local_item = class Menuaction "_Local" "equalise contrast within a roving window" { action x = class _result { _vislevel = 3; window_width = Expression "Window width" 20; window_height = Expression "Window height" 20; _result = map_unary process x { process in = hist_equalize_local window_width.expr window_height.expr in; } } } } } Filter_correlate_item = class Menupullright "Spatial _Correlation" "calculate correlation surfaces" { Correlate_item = class Menuaction "_Correlate" "calculate correlation coefficient" { action a b = map_binary corr a b { corr a b = correlate a b, a.width <= b.width && a.height <= b.height = correlate b a; } } Correlate_fast_item = class Menuaction "_Simple Difference" "calculate sum of squares of differences" { action a b = map_binary corr a b { corr a b = correlate_fast a b, a.width <= b.width && a.height <= b.height = correlate_fast b a; } } } Filter_hough_item = class Menupullright "_Hough Transform" "transform to parameter space" { Line_item = class Menuaction "_Line" "find straight line Hough transform" { action a = class _result { _vislevel = 3; pspace_width = Expression "Parameter space width" 64; pspace_height = Expression "Parameter space height" 64; _result = map_unary line a { line a = hough_line (to_real pspace_width) (to_real pspace_height) a; } } } Circle_item = class Menuaction "_Circle" "find circle Hough transform" { action a = class _result { _vislevel = 3; scale = Expression "Scale down parameter space by" 10; min_radius = Expression "Minimum radius" 10; max_radius = Expression "Maximum radius" 30; _result = map_unary circle a { circle a = hough_circle (to_real scale) (to_real min_radius) (to_real max_radius) a; } } } } Filter_greyc_item = class Menupullright "_GREYCstoration" "noise-removing filter" { Denoise_item = class Menuaction "Denoise" "Noise-removing filter" { action x = class _result { _vislevel = 3; iterations = Scale "Iterations" 1 5 1; amplitude = Scale "Amplitude" 1 100 40; sharpness = Scale "Sharpness" 0 3 0.9; anisotropy = Scale "Anisotropy" 0 1 0.15; alpha = Scale "Noise scale" 0 5 0.6; sigma = Scale "Geometry regularity" 0 2 1.1; dl = Scale "Spatial integration step" 0 1 0.8; da = Scale "Angular integration step" 0 90 30; gauss_prec = Scale "Precision" 1 10 2; interpolation = Option "Interpolation" ["Nearest-neighbour", "Bilinear", "Runge-Kutta"] 0; fast_approx = Toggle "Fast approximation" true; _result = greyc (to_real iterations) (to_real amplitude) (to_real sharpness) (to_real anisotropy) (to_real alpha) (to_real sigma) (to_real dl) (to_real da) (to_real gauss_prec) (to_real interpolation) (to_real fast_approx) x; } } Enlarge_item = class Menuaction "Enlarge" "Enlarge image" { action x = class _result { _vislevel = 3; scale = Scale "Enlarge" 1 10 3; iterations = Scale "Iterations" 1 5 3; amplitude = Scale "Amplitude" 1 100 20; sharpness = Scale "Sharpness" 0 3 0.2; anisotropy = Scale "Anisotropy" 0 1 0.9; alpha = Scale "Noise scale" 0 5 0.1; sigma = Scale "Geometry regularity" 0 2 1.5; dl = Scale "Spatial integration step" 0 1 0.8; da = Scale "Angular integration step" 0 90 30; gauss_prec = Scale "Precision" 1 10 2; interpolation = Option "Interpolation" ["Nearest-neighbour", "Bilinear", "Runge-Kutta"] 0; fast_approx = Toggle "Fast approximation" true; _result = greyc (to_real iterations) (to_real amplitude) (to_real sharpness) (to_real anisotropy) (to_real alpha) (to_real sigma) (to_real dl) (to_real da) (to_real gauss_prec) (to_real interpolation) (to_real fast_approx) (resize Interpolate_bilinear (to_real scale) (to_real scale) x); } } } #separator Filter_tilt_item = class Menupullright "Ti_lt Brightness" "tilt brightness" { Left_right_item = class Menuaction "_Left to Right" "linear left-right brighten" { action x = class _result { _vislevel = 3; tilt = Scale "Left-right tilt" (-1) 1 0; _result = map_unary tilt_lr x { tilt_lr image = image * scale { ramp = im_fgrey image.width image.height; scale = (ramp - 0.5) * tilt + 1; } } } } Top_bottom_item = class Menuaction "_Top to Bottom" "linear top-bottom brighten" { action x = class _result { _vislevel = 3; tilt = Scale "Top-bottom tilt" (-1) 1 0; _result = map_unary tilt_tb x { tilt_tb image = image * scale { ramp = rot90 (im_fgrey image.height image.width); scale = (ramp - 0.5) * tilt + 1; } } } } sep1 = Menuseparator; Left_right_cos_item = class Menuaction "Cosine Left-_right" "cosine left-right brighten" { action x = class _result { _vislevel = 3; tilt = Scale "Left-right tilt" (-1) 1 0; shift = Scale "Shift by" (-1) 1 0; _result = map_unary tilt_lr x { tilt_lr image = image * scale { ramp = im_fgrey image.width image.height - 0.5 - shift.value; scale = 0.5 * tilt.value * cos (ramp * 180) + 1; } } } } Top_bottom_cos_item = class Menuaction "Cosine Top-_bottom" "cosine top-bottom brighten" { action x = class _result { _vislevel = 3; tilt = Scale "Top-bottom tilt" (-1) 1 0; shift = Scale "Shift by" (-1) 1 0; _result = map_unary tilt_tb x { tilt_tb image = image * scale { ramp = rot90 (im_fgrey image.height image.width) - 0.5 - shift.value; scale = 0.5 * tilt.value * cos (ramp * 180) + 1; } } } } sep2 = Menuseparator; Circular_item = class Menuaction "_Circular" "circular brighten" { action x = class _result { _vislevel = 3; tilt = Scale "Tilt" (-1) 1 0; hshift = Scale "Horizontal shift by" (-1) 1 0; vshift = Scale "Vertical shift by" (-1) 1 0; _result = map_unary tilt_tb x { tilt_tb image = image * scale { hramp = im_fgrey image.width image.height - 0.5 - hshift.value; vramp = rot90 (im_fgrey image.height image.width) - 0.5 - vshift.value; ramp = (hramp ** 2 + vramp ** 2) ** 0.5; scale = 0.5 * tilt.value * cos (ramp * 180) + 1; } } } } } Filter_blend_item = class Menupullright "_Blend" "blend objects together" { Scale_blend_item = class Menuaction "_Scale" "blend two objects together with a scale" { action a b = class _result { _vislevel = 3; p = Scale "Blend position" 0 1 0.5; _result = map_binary process a b { process im1 im2 = im1 * (1 - p.value) + im2 * p.value; } } } Image_blend_item = class Menuaction "_Image" "use an image to blend two objects" { action a b c = class _result { _vislevel = 3; i = Toggle "Invert mask" false; _result = map_trinary process a b c { process a b c = blend condition in1 in2, !i = blend (invert condition) in1 in2 { compare a b // prefer image as the condition = false, !has_image a && has_image b // prefer mono images as the condition = false, has_bands a && has_bands b && get_bands a > 1 && get_bands b == 1 // prefer uchar as the condition = false, has_format a && has_format b && get_format a > Image_format.UCHAR && get_format b == Image_format.UCHAR = true; [condition, in1, in2] = sortc compare [a, b, c]; } } } } Line_blend_item = class Menuaction "_Along Line" "blend between image a and image b along a line" { action a b = class _result { _vislevel = 3; orientation = Option "Orientation" [ "Left to Right", "Top to Bottom" ] 0; blend_position = Scale "Blend position" 0 1 0.5; blend_width = Scale "Blend width" 0 1 0.05; _result = map_binary process a b { process a b = blend (Image condition) b a { output_width = max_pair a.width b.width; output_height = max_pair a.height b.height; range = output_width, orientation == 0 = output_height; blend_position' = floor (range * blend_position.value); blend_width' = 1, blend_width.value == 0 = floor (range * blend_width.value); start = blend_position' - blend_width' / 2; background = (make_xy output_width output_height) >= blend_position'; ramp = im_grey blend_width' output_height, orientation == 0 = rot90 (im_grey blend_width' output_width); condition = insert_noexpand start 0 ramp background?0, orientation == 0 = insert_noexpand 0 start ramp background?1; } } } } Blend_alpha_item = class Menuaction "_Alpha" "blend images with optional alpha channels" { // usage: layerit foreground background // input images must be either 1 or 3 bands, optionally + 1 band // which is used as the alpha channel // rich lott scale_mask im opacity = (unsigned char) (to_real opacity / 255 * im); // to mono intensity = colour_transform_to Image_type.B_W; // All the blend functions // I am grateful to this page // http://www.pegtop.net/delphi/blendmodes/ // for most of the formulae. blend_normal mask opacity fg bg = blend (scale_mask mask opacity) fg bg; blend_iflighter mask opacity fg bg = blend (if fg' > bg' then mask' else 0) fg bg { fg' = intensity fg; bg' = intensity bg; mask' = scale_mask mask opacity ; } blend_ifdarker mask opacity fg bg = blend (if fg' < bg' then mask' else 0) fg bg { fg' = intensity fg ; bg' = intensity bg ; mask' = scale_mask mask opacity ; } blend_multiply mask opacity fg bg = blend (scale_mask mask opacity) fg' bg { fg' = fg / 255 * bg; } blend_add mask opacity fg bg = blend mask fg' bg { fg' = opacity / 255 * fg + bg; } blend_subtract mask opacity fg bg = blend mask fg' bg { fg' = bg - opacity / 255 * fg; } blend_screen mask opacity fg bg = blend mask fg' bg { fg' = 255 - (255 - bg) * (255 - (opacity / 255 * fg)) / 255; } blend_burn mask opacity fg bg = blend mask fg'' bg { // fades to white which has no effect. fg' = (255 - opacity) + opacity * fg / 255; fg'' = 255 - 255 * (255 - bg) / fg'; } blend_softlight mask opacity fg bg = blend mask' fg' bg { mask' = scale_mask mask opacity; fg' = (2 * bg * fg + bg * bg * (1 - 2 * fg / 255)) / 255; } blend_hardlight mask opacity fg bg = blend mask' fg' bg { mask' = scale_mask mask opacity; fg' = 2 / 255 * fg * bg, bg < 129 = 255 - 2 * (255 - bg) * (255 - fg) / 255; } blend_lighten mask opacity fg bg = blend mask' fg' bg { mask' = scale_mask mask opacity; fg' = if bg < fg then fg else bg; } blend_darken mask opacity fg bg = blend mask' fg' bg { mask' = scale_mask mask opacity; fg' = if bg > fg then fg else bg; } blend_dodge mask opacity fg bg = blend mask fg'' bg { // one added to avoid divide by zero fg' = 1 + 255 - (opacity / 255 * fg); fg'' = bg * 255 / fg'; } blend_reflect mask opacity fg bg = blend mask' fg' bg { mask' = scale_mask mask opacity; fg' = bg * bg / (255 - fg); } blend_freeze mask opacity fg bg = blend mask' fg' bg { mask' = scale_mask mask opacity; fg' = 255 - (255 - bg) * (255 - bg) / (1 + fg); } blend_or mask opacity fg bg = bg | (unsigned char) fg' { mask' = scale_mask mask opacity; fg' = fg * mask' / 255; } blend_and mask opacity fg bg = bg & (unsigned char) fg' { mask' = scale_mask mask opacity; fg' = fg * mask' / 255; } // blend types NORMAL = 0; IFLIGHTER = 1; IFDARKER = 2; MULTIPLY = 3; ADD = 4; SUBTRACT = 5; SCREEN = 6; BURN = 7; DODGE = 8; HARDLIGHT = 9; SOFTLIGHT = 10; LIGHTEN = 11; DARKEN = 12; REFLECT = 13; FREEZE = 14; OR = 15; AND = 16; // names we show the user for blend types names = Enum [ _ "Normal" => NORMAL, _ "If Lighter" => IFLIGHTER, _ "If Darker" => IFDARKER, _ "Multiply" => MULTIPLY, _ "Add" => ADD, _ "Subtract" => SUBTRACT, _ "Screen" => SCREEN, _ "Burn" => BURN, _ "Soft Light" => SOFTLIGHT, _ "Hard Light" => HARDLIGHT, _ "Lighten" => LIGHTEN, _ "Darken" => DARKEN, _ "Dodge" => DODGE, _ "Reflect" => REFLECT, _ "Freeze" => FREEZE, _ "Bitwise OR" => OR, _ "Bitwise AND" => AND ]; // functions we call for each blend type actions = Table [ [NORMAL, blend_normal], [IFLIGHTER, blend_iflighter], [IFDARKER, blend_ifdarker], [MULTIPLY, blend_multiply], [ADD, blend_add], [SUBTRACT, blend_subtract], [SCREEN, blend_screen], [BURN, blend_burn], [SOFTLIGHT, blend_softlight], [HARDLIGHT, blend_hardlight], [LIGHTEN, blend_lighten], [DARKEN, blend_darken], [DODGE, blend_dodge], [REFLECT, blend_reflect], [FREEZE, blend_freeze], [OR, blend_or], [AND, blend_and] ]; // make sure im has an alpha channel (set opaque if it hasn't) put_alpha im = im, im.bands == 4 || im.bands == 2 = im ++ 255; // make sure im has no alpha channel lose_alpha im = extract_bands 0 3 im, im.bands == 4 = im?0, im.bands == 2 = im; // does im have al alpha channel? has_alpha im = im.bands == 2 || im.bands == 4; // get the alpha (set opaque if no alpha) get_alpha img = img'?3, img.bands == 4 = img'?1 { img' = put_alpha img; } // add an alpha ... cast the alpha image to match the main image append_alpha im alpha = im ++ clip2fmt im.format alpha; // makes fg the same size as bg, displaced with u, v pixel offset moveit fg bg u v = insert_noexpand u v fg bg' { bg' = image_new bg.width bg.height fg.bands fg.format fg.coding fg.type 0 0 0; } action bg fg = class _value { _vislevel = 3; method = Option_enum "Blend mode" names "Normal"; opacity = Scale "Opacity" 0 255 255; hmove = Scale "Horizontal move by" (-bg.width) (bg.width) 0; vmove = Scale "Vertical move by" (-bg.height) (bg.height) 0; _value = append_alpha blended merged_alpha, has_alpha bg = blended { // displace and resize fg (need to displace alpha too) fg' = moveit (put_alpha fg) bg hmove vmove; // transform to sRGB fg'' = colour_transform_to Image_type.sRGB (lose_alpha fg'); bg' = colour_transform_to Image_type.sRGB (lose_alpha bg); // alphas merged merged_alpha = get_alpha bg | get_alpha fg'; // blend together blended = (actions.lookup 0 1 method.value_thing) (get_alpha fg') opacity.value fg'' bg'; } } } } Filter_overlay_header_item = class Menuaction "_Overlay" "make a colour overlay of two monochrome images" { action a b = class _result { _vislevel = 3; colour = Option "Colour overlay as" [ _ "Green over Red", _ "Blue over Red", _ "Red over Green", _ "Red over Blue", _ "Blue over Green", _ "Green over Blue" ] 0; _result = map_binary overlay a b { overlay a b = image_set_type Image_type.sRGB [(a' ++ b' ++ 0), (a' ++ 0 ++ b'), (b' ++ a' ++ 0), (b' ++ 0 ++ a'), (0 ++ a' ++ b'), (0 ++ b' ++ a')]?colour { a' = colour_transform_to Image_type.B_W a; b' = colour_transform_to Image_type.B_W b; } } } } Filter_colourize_item = class Menuaction "_Colourize" "use a colour image or patch to tint a mono image" { action a b = class _result { _vislevel = 3; tint = Scale "Tint" 0 1 0.6; _result = map_binary tintit a b { tintit a b = colour_transform_to (get_type colour) colourized' { // get the mono thing first [mono, colour] = sortc (const (is_colour_type @ get_type)) [a, b]; colour' = tint * colour_transform_to Image_type.LAB colour; mono' = colour_transform_to Image_type.B_W mono; colourized = (mono' / 2.55) ++ colour'?1 ++ colour'?2; colourized' = image_set_type Image_type.LAB colourized; } } } } Filter_browse_multiband_item = class Menupullright "Bro_wse" "browse though an image, bitwise or bandwise" { Bandwise_item = class Menuaction "B_andwise" "browse through the bands of a multiband image" { action image = class _result { _vislevel = 3; band = Scale "Band" 0 (image.bands - 1) 0; display = Option "Display as" [ _ "Grey", _ "Green over Red", _ "Blue over Red", _ "Red over Green", _ "Red over Blue", _ "Blue over Green", _ "Green over Blue" ] 0; _result = output { down = (int) band.value; up = down + 1; remainder = band.value - down; fade x a = Vector [0], x == 0 = a * x; a = fade remainder image?up; b = fade (1 - remainder) image?down; output = [ a + b, a ++ b ++ 0, a ++ 0 ++ b, b ++ a ++ 0, b ++ 0 ++ a, 0 ++ a ++ b, 0 ++ b ++ a ] ? display; } } } Bitwise_item = class Menuaction "Bi_twise" "browse through the bits of an image" { action x = class _result { _vislevel = 3; bit = Islider "Bit" 0 (nbits - 1) (nbits - 1) { nbits = x.bits, is_Image x = 8; Islider c f t v = class scope.Scale c f t ((int) v) { Scale = Islider; } } _result = map_unary process x { process im = (im & (0x1 << bit.value)) != 0; } } } } #separator Filter_negative_item = class Menuaction "Photographic _Negative" "swap black and white" { action x = map_unary invert x { invert in = clip2fmt in.format (colour_transform_to (get_type in) rgb') { rgb = colour_transform_to Image_type.sRGB in; rgb' = 255 - rgb; } } } Filter_solarize_item = class Menuaction "_Solarise" "invert colours above a threshold" { action x = class _result { _vislevel = 3; kink = Scale "Kink" 0 1 0.5; _result = map_unary process x { process image = hist_map tab'''' image { // max pixel value for this format mx = Image_format.maxval image.format; // make a LUT ... just 8 and 16 bit tab = im_identity_ushort image.bands mx, image.format == Image_format.USHORT = im_identity image.bands; tab' = Image tab; // make basic ^ shape tab'' = tab' * (1 / kink), tab' < mx * kink = (mx - tab') / (1 - kink); tab''' = clip2fmt image.format tab''; // smooth a bit mask = matrix_blur (tab'''.width / 8); tab'''' = convsep mask tab'''; } } } } Filter_diffuse_glow_item = class Menuaction "_Diffuse Glow" "add a halo to highlights" { action x = class _result { _vislevel = 3; r = Scale "Radius" 0 50 5; highlights = Scale "Highlights" 0 100 95; glow = Scale "Glow" 0 1 0.5; colour = Colour_new_item.Widget_colour_item.action; _result = map_unary process x { process image = image' { mono = (unsigned char) (colour_transform_to Image_type.B_W image); thresh = hist_thresh (highlights.value / 100) mono; mask = mono > thresh; blur = convsep (matrix_gaussian_blur r.value) mask; colour' = colour_transform_to image.type colour; image' = image + colour' * glow * (blur / 255); } } } } Filter_drop_shadow_item = class Menuaction "Drop S_hadow" "add a drop shadow to an image" { action x = class _result { _vislevel = 3; sx = Scale "Horizontal shadow" (-50) 50 5; sy = Scale "Vertical shadow" (-50) 50 5; ss = Scale "Shadow softness" 0 20 5; bg_colour = Expression "Background colour" 255; sd_colour = Expression "Shadow colour" 128; alpha = Toggle "Shadow in alpha channel" false; transparent = Toggle "Zero pixels are transparent" false; _result = map_unary shadow x { shadow image = Image final { blur_size = ss.value * 2 + 1; // matrix we blur with to soften shadows blur_matrix = matrix_gaussian_blur blur_size; matrix_size = blur_matrix.width; matrix_radius = (int) (matrix_size / 2) + 1; // position and size of shadow image in input cods // before and after fuzzing shadow_rect = Rect sx.value sy.value image.width image.height; fuzzy_shadow_rect = shadow_rect.margin_adjust matrix_radius; // size and pos of final image, in input cods final_rect = image.rect.union fuzzy_shadow_rect; // hard part of shadow in output cods shadow_rect' = Rect (shadow_rect.left - final_rect.left) (shadow_rect.top - final_rect.top) shadow_rect.width shadow_rect.height; // make the shadow mask ... true for parts which cast // a shadow mask = (foldr1 bitwise_and @ bandsplit) (image.value != 0), transparent = image_new image.width image.height 1 Image_format.UCHAR Image_coding.NOCODING Image_type.B_W 255 0 0; mask' = embed 0 shadow_rect'.left shadow_rect'.top final_rect.width final_rect.height mask; mask'' = convsep blur_matrix mask'; // use mask to fade between bg and shadow colour mk_background colour = image_new final_rect.width final_rect.height image.bands image.format image.coding image.type colour 0 0; bg_image = mk_background bg_colour.expr; shadow_image = mk_background sd_colour.expr; bg = blend mask'' shadow_image bg_image; // make a full size mask fg_mask = embed 0 (image.rect.left - final_rect.left) (image.rect.top - final_rect.top) final_rect.width final_rect.height mask; // wrap up the input image ... put the shadow colour // around it, so if we are outputting a separate // alpha the shadow colour will be set correctly fg = insert (image.rect.left - final_rect.left) (image.rect.top - final_rect.top) image.value shadow_image; final // make a separate alpha = fg ++ mask'', alpha // paste image over shadow = if fg_mask then fg else bg; } } } } Filter_paint_text_item = class Menuaction "_Paint Text" "paint text into an image" { action x = paint_position, is_Group x = paint_area { paint_area = class _result { _check_args = [ [x, "x", check_Image] ]; _vislevel = 3; text = String "Text to paint" "Hello world!"; font = Fontname "Use font" Workspaces.Preferences.PAINTBOX_FONT; align = Option "Alignment" ["Left", "Centre", "Right"] 0; dpi = Expression "DPI" 300; colour = Expression "Text colour" 255; place = Region x (x.width / 4) (x.height / 4) (x.width / 2) (x.height / 2); _result = insert_noexpand place.left place.top (blend txt' fg place) x { fg = image_new place.width place.height x.bands x.format x.coding x.type colour.expr 0 0; txt = Image (im_text text.value font.value place.width align.value (to_real dpi)); bg = im_black place.width place.height 1; txt' = insert_noexpand 0 0 txt bg; } } paint_position = class _result { _vislevel = 3; text = Pattern_images_item.Text_item.action; colour = Expression "Text colour" 255; position = Option "Position" [ _ "North-west", _ "North", _ "North-east", _ "West", _ "Centre", _ "East", _ "South-west", _ "South", _ "South-east", _ "Specify in pixels" ] 4; left = Expression "Pixels from left" 0; top = Expression "Pixels from top" 0; _result = map_unary paint x { paint image = insert_noexpand x' y' place' image { xr = image.width - text.width; yr = image.height - text.height; x = left.expr, position == 9 = [0, xr / 2, xr]?(position % 3); y = top.expr, position == 9 = [0, yr / 2, yr]?(position / 3); x' = range 0 x (image.width - 1); y' = range 0 y (image.height - 1); w' = range 1 text.width (image.width - x'); h' = range 1 text.height (image.height - y'); place = extract_area x' y' w' h' image; text' = insert_noexpand 0 0 text (im_black w' h' 1); fg = image_new w' h' image.bands image.format image.coding image.type colour.expr 0 0; place' = blend text' fg place; } } } } } nip2-8.7.0/share/nip2/compat/7.40/Histogram.def0000644000175000017500000001621413224651032015563 00000000000000Hist_new_item = class Menupullright "_New" "new histogram" { Hist_item = class Menuaction "_Identity" "make an identity histogram" { action = class _result { _vislevel = 3; d = Option "Depth" ["8 bit", "16 bit"] 0; _result = Plot [] ([im_identity 1, im_identity_ushort 1 65536]?d); } } Hist_new_from_matrix = Matrix_buildlut_item; Hist_from_image_item = class Menuaction "Ta_g Image As Histogram" "set image Type to Histogram" { action x = hist_tag x; } Tone_item = class Menuaction "_Tone Curve" "make a new tone mapping curve" { action = class _result { _vislevel = 3; d = Option "Depth" ["8 bit", "16 bit"] 0; b = Scale "Black point" 0 100 0; w = Scale "White point" 0 100 100; sp = Scale "Shadow point" 0.1 0.3 0.2; mp = Scale "Mid-tone point" 0.4 0.6 0.5; hp = Scale "Highlight point" 0.7 0.9 0.8; sa = Scale "Shadow adjust" (-15) 15 0; ma = Scale "Mid-tone adjust" (-30) 30 0; ha = Scale "Highlight adjust" (-15) 15 0; _result = tone_build fmt b w sp mp hp sa ma ha { fmt = [Image_format.UCHAR, Image_format.USHORT]?d; } } } } Hist_convert_to_hist_item = class Menuaction "Con_vert to Histogram" "convert anything to a histogram" { action x = hist_tag (to_image x); } Hist_find_item = class Menupullright "_Find" "find a histogram" { Oned_item = class Menuaction "_One Dimension" "for a n-band image, make an n-band 1D histogram" { action x = map_unary hist_find x; } Nd_item = class Menuaction "_Many Dimensions" "for a n-band image, make an n-dimensional histogram" { action x = class _result { _vislevel = 3; // default to something small-ish bins = Expression "Number of bins in each dimension" 8; _result = map_unary process x { process in = hist_find_nD bins in; } } } Indexed_item = class Menuaction "_Indexed" "use a 1-band index image to pick bins for an n-band image" { action x y = map_binary map x y { map a b = hist_find_indexed index im { [im, index] = sortc (const is_index) [a, b]; is_index x = has_image x && b == 1 && (f == Image_format.UCHAR || f == Image_format.USHORT) { im = get_image x; b = get_bands x; f = get_format x; } } } } } Hist_map_item = class Menuaction "_Map" "map an image through a histogram" { action x y = map_binary map x y { map a b = hist_map hist im { [im, hist] = sortc (const is_hist) [a, b]; } } } Hist_eq_item = Filter_enhance_item.Hist_equal_item; #separator Hist_cum_item = class Menuaction "_Integrate" "form cumulative histogram" { action x = map_unary hist_cum x; } Hist_diff_item = class Menuaction "_Differentiate" "find point-to-point differences (inverse of Integrate)" { action x = map_unary hist_diff x; } Hist_norm_item = class Menuaction "N_ormalise" "normalise a histogram" { action x = map_unary hist_norm x; } Hist_inv_item = class Menuaction "In_vert" "invert a histogram" { action x = map_unary hist_inv x; } Hist_match_item = class Menuaction "Ma_tch" "find LUT which will match first histogram to second" { action in ref = map_binary hist_match in ref; } Hist_zerox_item = class Menuaction "_Zero Crossings" "find zero crossings" { action x = class _result { _vislevel = 3; edge = Option "Direction" [ "Positive-going", "Negative-going" ] 0; _result = map_unary (zerox (if edge == 0 then -1 else 1)) x; } } #separator Hist_profile_item = class Menuaction "Find _Profile" "search from image edges for non-zero pixels" { action x = class _result { _vislevel = 3; edge = Option "Search from" [ "Top edge down", "Left edge to right", "Bottom edge up", "Right edge to left" ] 2; _result = map_unary profile x { profile image = (Plot_histogram @ hist_tag) [ profilemb 0 image.value, profilemb 1 image.value, profilemb 0 (fliptb image.value), profilemb 1 (fliplr image.value) ]?edge; // im_profile only does 1 band images :-( profilemb d = bandjoin @ map (converse im_profile d) @ bandsplit; } } } Hist_project_item = class Menuaction "Find Pro_jections" "find horizontal and vertical projections" { action x = class { _vislevel = 2; _result = map_unary project x; // extract the result ... could be a group extr n = Plot_histogram _result?n, is_list _result = Group (map (Plot_histogram @ converse subscript n) _result.value); horizontal = extr 0; vertical = extr 1; centre = (gravity horizontal, gravity vertical); } } #separator Hist_graph_item = class Menuaction "P_lot Slice" "plot a slice along a guide or arrow" { action x = class _value { _vislevel = 3; width = Scale "Width" 1 40 1; displace = Scale "Horizontal displace" (-50) 50 0; vdisplace = Scale "Vertical displace" (-50) 50 0; _value = map_unary graph x { graph arrow = hist_tag area' { area = extract_arrow displace.value vdisplace.value width.value arrow; // squish vertically to get an average area' = resize Interpolate_bilinear 1 (1 / width.value) area; } } } } Extract_arrow_item = class Menuaction "Extract _Arrow" "extract the area around an arrow" { action x = class _value { _vislevel = 3; width = Scale "Width" 1 40 1; displace = Scale "Horizontal displace" (-50) 50 0; vdisplace = Scale "Vertical displace" (-50) 50 0; _value = map_unary (extract_arrow displace.value vdisplace.value width.value) x; } } Hist_plot_item = class Menuaction "Plot _Object" "plot an object as a bar, point or line graph" { action x = class _result { _vislevel = 3; caption = Expression "Chart caption" "none"; format = Option_enum "Format" Plot_format.names "YYYY"; style = Option_enum "Style" Plot_style.names "Line"; auto = Toggle "Auto Range" true; xmin = Expression "X range minimum" 0; xmax = Expression "X range maximum" 1; ymin = Expression "Y range minimum" 0; ymax = Expression "Y range maximum" 1; xcaption = Expression "X axis caption" "none"; ycaption = Expression "Y axis caption" "none"; series_captions = Expression "Series captions" ["Band 0"]; _result = Plot options (image x) { options = [$style => style.value, $format => format.value] ++ range ++ captions; range = [], auto = [$xmin => xmin.expr, $xmax => xmax.expr, $ymin => ymin.expr, $ymax => ymax.expr]; captions = concat (map test caption_options) ++ [$series_captions => series_captions.expr] { caption_options = [ $caption => caption.expr, $xcaption => xcaption.expr, $ycaption => ycaption.expr ]; test x = [], value == "none" = [option_name => value] { [option_name, value] = x; } } image x = image (extract_arrow 0 0 1 x), is_Arrow x = get_image x, has_image x = x2b im, b == 1 = im { im = get_image (to_image x); w = get_width im; h = get_height im; b = get_bands im; // matrix to image makes a 1-band mxn image // we need to put columns into bands x2b im = bandjoin (map extract_col [0 .. w - 1]) { extract_col x = extract_area x 0 1 h im; } } } } } nip2-8.7.0/share/nip2/compat/7.40/Object.def0000644000175000017500000000220513224651032015027 00000000000000Object_duplicate_item = class Menuaction "_Duplicate" "take a copy of an object" { action x = map_unary copy x; } #separator Object_list_to_group_item = class Menuaction "_List to Group" "turn a list of objects into a group" { action x = to_group x; } Object_group_to_list_item = class Menuaction "_Group to List" "turn a group into a list of objects" { action x = to_list x; } #separator Object_break_item = class Menuaction "_Break Up Object" "break an object into a list of components" { action x = map_unary break x { break x = bandsplit x, is_Image x = map Vector x.value, is_Matrix x = x.value, is_Vector x || is_Real x = error "Breakup: not Image/Matrix/Vector/Real"; } } Object_assemble_item = class Menuaction "_Assemble Objects" "assemble a list of objects into a single object" { action x = map_unary ass x { ass x = [], x == [] = Vector x, is_real_list x = Matrix x, is_matrix x = bandjoin x, is_listof is_Image x = Vector (map get_value x), is_listof is_Real x = Matrix (map get_value x), is_listof is_Vector x = error "Assemble: not list of Image/Vector/Real/image/real"; } } nip2-8.7.0/share/nip2/compat/7.40/Makefile.in0000644000175000017500000003703013350464104015214 00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = share/nip2/compat/7.40 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(startdir)" DATA = $(start_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BISON = @BISON@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DLLWRAP = @DLLWRAP@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FFTW3_CFLAGS = @FFTW3_CFLAGS@ FFTW3_LIBS = @FFTW3_LIBS@ FGREP = @FGREP@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_LIBS = @GSL_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ IP_CFLAGS = @IP_CFLAGS@ IP_LIBS = @IP_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBGOFFICE_CFLAGS = @LIBGOFFICE_CFLAGS@ LIBGOFFICE_LIBS = @LIBGOFFICE_LIBS@ LIBGSF_CFLAGS = @LIBGSF_CFLAGS@ LIBGSF_LIBS = @LIBGSF_LIBS@ LIBGVC_CFLAGS = @LIBGVC_CFLAGS@ LIBGVC_LIBS = @LIBGVC_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ 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@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ REQUIRED_PACKAGES_CFLAGS = @REQUIRED_PACKAGES_CFLAGS@ REQUIRED_PACKAGES_LIBS = @REQUIRED_PACKAGES_LIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOP_SRCDIR = @TOP_SRCDIR@ UPDATE_DESKTOP_DATABASE = @UPDATE_DESKTOP_DATABASE@ UPDATE_MIME_DATABASE = @UPDATE_MIME_DATABASE@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XDG_OPEN = @XDG_OPEN@ XGETTEXT = @XGETTEXT@ 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@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ startdir = $(pkgdatadir)/compat/7.40 start_DATA = \ Math.def \ Image.def \ Magick.def \ Colour.def \ Tasks.def \ Object.def \ Filter.def \ Matrix.def \ Widgets.def \ Histogram.def \ Preferences.ws \ _joe_extra.def \ _joe_utilities.def \ _convert.def \ _generate.def \ _list.def \ _predicate.def \ _stdenv.def \ _Object.def \ _magick.def \ _types.def EXTRA_DIST = $(start_DATA) all: all-am .SUFFIXES: $(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) --foreign share/nip2/compat/7.40/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign share/nip2/compat/7.40/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): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-startDATA: $(start_DATA) @$(NORMAL_INSTALL) @list='$(start_DATA)'; test -n "$(startdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(startdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(startdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(startdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(startdir)" || exit $$?; \ done uninstall-startDATA: @$(NORMAL_UNINSTALL) @list='$(start_DATA)'; test -n "$(startdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(startdir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: 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 check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(startdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-startDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-startDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-startDATA install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags-am uninstall uninstall-am uninstall-startDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: nip2-8.7.0/share/nip2/compat/7.40/Matrix.def0000644000175000017500000002573113224651032015076 00000000000000 Matrix_build_item = class Menupullright "_New" "make a new matrix of some sort" { Plain_item = class Menuaction "_Plain" "make a new plain matrix widget" { action = Matrix (identity_matrix 3); } Convolution_item = class Menuaction "_Convolution" "make a new convolution matrix widget" { action = Matrix_con 1 0 [[0, 0, 0], [0, 1, 0], [0, 0, 0]]; } Recombination_item = class Menuaction "_Recombination" "make a new recombination matrix widget" { action = Matrix_rec (identity_matrix 3); } Morphology_item = class Menuaction "_Morphology" "make a new morphology matrix widget" { action = Matrix_mor [[0, 0, 0], [0, 255, 0], [0, 0, 0]]; } sep1 = Menuseparator; Matrix_identity_item = class Menuaction "_Identity" "make an identity matrix" { action = identity (identity_matrix 5); identity v = class _result { _vislevel = 3; s = Expression "Size" (len v); _result = Matrix (identity_matrix (to_real s)), to_real s != len v; = Matrix v; Matrix_vips value scale offset filename display = identity value; } } Matrix_series_item = class Menuaction "_Series" "make a series" { action = series (mkseries 0 1 5); mkseries s t e = transpose [[to_real s, to_real s + to_real t .. to_real e]]; series v = class _result { _vislevel = 3; _s = v?0?0; _t = v?1?0 - v?0?0; _e = (last v)?0; s = Expression "Start value" _s; t = Expression "Step by" _t; e = Expression "End value" _e; _result = Matrix (mkseries s t e), to_real s != _s || to_real t != _t || to_real e != _e = Matrix v; Matrix_vips value scale offset filename display = series value; } } Matrix_square_item = class Menuaction "_Square" "make a square matrix" { action = square (mksquare 5); mksquare s = replicate s (take s [1, 1 ..]); square v = class _result { _vislevel = 3; s = Expression "Size" (len v); _result = Matrix_con (sum v) 0 v, len v == to_real s = Matrix_con (sum m) 0 m { m = mksquare (to_real s); } Matrix_vips value scale offset filename display = square value; } } Matrix_circular_item = class Menuaction "_Circular" "make a circular matrix" { action = circle (mkcircle 3); mkcircle r = map2 (map2 pyth) xes yes { line = [-r .. r]; xes = replicate (2 * r + 1) line; yes = transpose xes; pyth a b = 1, (a**2 + b**2) ** 0.5 <= r = 0; } circle v = class _result { _vislevel = 3; r = Expression "Radius" ((len v - 1) / 2); _result = Matrix_con (sum v) 0 v, len v == r.expr * 2 + 1 = Matrix_con (sum m) 0 m { m = mkcircle (to_real r); } Matrix_vips value scale offset filename display = circle value; } } Matrix_gaussian_item = class Menuaction "_Gaussian" "make a gaussian matrix" { action = class _result { _vislevel = 3; s = Scale "Sigma" 0.001 10 1; ma = Scale "Minimum amplitude" 0 1 0.2; integer = Toggle "Integer" false; _result = fn s.value ma.value { fn = im_gauss_imask, integer = im_gauss_dmask; } } } Matrix_laplacian_item = class Menuaction "_Laplacian" "make the Laplacian of a Gaussian matrix" { action = class _result { _vislevel = 3; s = Scale "Sigma" 0.001 10 1.5; ma = Scale "Minimum amplitude" 0 1 0.1; integer = Toggle "Integer" false; _result = fn s.value ma.value { fn = im_log_imask, integer = im_log_dmask; } } } } Matrix_to_matrix_item = class Menuaction "Con_vert to Matrix" "convert anything to a matrix" { action x = to_matrix x; } #separator Matrix_extract_item = class Menupullright "_Extract" "extract rows or columns from a matrix" { Rows_item = class Menuaction "_Rows" "extract rows" { action x = class _result { _vislevel = 3; first = Expression "Extract from row" 0; number = Expression "Extract this many rows" 1; _result = map_unary process x { process x = extract_area 0 first (get_width x) number x; } } } Columns_item = class Menuaction "_Columns" "extract columns" { action x = class _result { _vislevel = 3; first = Expression "Extract from column" 0; number = Expression "Extract this many columns" 1; _result = map_unary process x { process mat = extract_area first 0 number (get_height x) x; } } } Area_item = class Menuaction "_Area" "extract area" { action x = class _result { _vislevel = 3; left = Expression "First column" 0; top = Expression "First row" 0; width = Expression "Number of columns" 1; height = Expression "Number of rows" 1; _result = map_unary process x { process mat = extract_area left top width height x; } } } Diagonal_item = class Menuaction "_Diagonal" "extract diagonal" { action x = class _result { _vislevel = 3; which = Option "Extract" [ "Leading Diagonal", "Trailing Diagonal" ] 0; _result = map_unary process x { process mat = mat.Matrix_base (map2 extr [0..] mat.value), which == 0 = mat.Matrix_base (map2 extr [mat.width - 1, mat.width - 2 .. 0] mat.value); extr n l = [l?n]; } } } } Matrix_insert_item = class Menupullright "_Insert" "insert rows or columns into a matrix" { // make a new 8-bit uchar image of wxh with pixels set to p // use to generate new cells newim w h p = image_new w h 1 Image_format.UCHAR Image_coding.NOCODING Image_type.B_W p 0 0; Rows_item = class Menuaction "_Rows" "insert rows" { action x = class _result { _vislevel = 3; first = Expression "Insert at row" 0; number = Expression "Insert this many rows" 1; item = Expression "Set new cells to" 0; _result = map_unary process x { process x = foldl1 join_tb (concat [top, new, bottom]) { top = [extract_area 0 0 w f x], f > 0 = []; new = [(if is_Matrix x then to_matrix else id) (newim w number item.expr)]; bottom = [extract_area 0 f w (h - f) x], f < h = []; f = to_real first; w = get_width x; h = get_height x; } } } } Columns_item = class Menuaction "_Columns" "insert columns" { action x = class _result { _vislevel = 3; first = Expression "Insert at column" 0; number = Expression "Insert this many columns" 1; item = Expression "Set new cells to" 0; _result = map_unary process x { process x = foldl1 join_lr (concat [left, new, right]) { left = [extract_area 0 0 f h x], f > 0 = []; new = [(if is_Matrix x then to_matrix else id) (newim number h item.expr)]; right = [extract_area f 0 (w - f) h x], f < w = []; f = to_real first; w = get_width x; h = get_height x; } } } } } Matrix_delete_item = class Menupullright "_Delete" "delete rows or columns from a matrix" { // remove number of items, starting at first delete first number l = take (to_real first) l ++ drop (to_real first + to_real number) l; Rows_item = class Menuaction "_Rows" "delete rows" { action x = class _result { _vislevel = 3; first = Expression "Delete from row" 0; number = Expression "Delete this many rows" 1; _result = map_unary process x { process x = foldl1 join_tb (concat [top, bottom]) { top = [extract_area 0 0 w f x], f > 0 = []; bottom = [extract_area 0 b w (h - b) x], b < h = []; f = to_real first; n = to_real number; b = f + n; w = get_width x; h = get_height x; } } } } Columns_item = class Menuaction "_Columns" "delete columns" { action x = class _result { _vislevel = 3; first = Expression "Delete from column" 0; number = Expression "Delete this many columns" 1; _result = map_unary process x { process x = foldl1 join_lr (concat [left, right]) { left = [extract_area 0 0 f h x], f > 0 = []; right = [extract_area r 0 (w - r) h x], r < w = []; f = to_real first; n = to_real number; r = f + n; w = get_width x; h = get_height x; } } } } } Matrix_join = class Menupullright "_Join" "join two matricies" { Left_right_item = class Menuaction "_Left to Right" "join two matricies left-right" { action a b = map_binary join_lr a b; } Top_bottom_item = class Menuaction "_Top to Bottom" "joiin two matricies top-bottom" { action a b = map_binary join_tb a b; } } Matrix_rotate_item = class Menupullright "_Rotate" "clockwise rotation by fixed angles" { rot90 = Image_transform_item.Rotate_item.Fixed_item.Rot90_item; rot180 = Image_transform_item.Rotate_item.Fixed_item.Rot180_item; rot270 = Image_transform_item.Rotate_item.Fixed_item.Rot270_item; Matrix_rot45_item = class Menuaction "_45 Degrees" "45 degree rotate (square, odd-length-sides only)" { action x = map_unary rot45 x; } } Matrix_flip_item = Image_transform_item.Flip_item; Matrix_sort_item = class Menuaction "_Sort" "sort by column or row" { action x = class _result { _vislevel = 3; o = Option (_ "Orientation") [ _ "Sort by column", _ "Sort by row" ] 0; i = Expression (_ "Sort on index") 0; d = Option (_ "Direction") [ _ "Ascending", _ "Descending" ] 0; _result = map_unary sort x { idx = to_real i; pred a b = a?idx <= b?idx, d == 0 = a?idx >= b?idx; sort x = (x.Matrix_base @ sortc pred) x.value, o == 0 = (x.Matrix_base @ transpose @ sortc pred @ transpose) x.value; } } } #separator Matrix_invert_item = class Menuaction "In_vert" "calculate inverse matrix" { action x = map_unary (converse power (-1)) x; } Matrix_transpose_item = class Menuaction "_Transpose" "swap rows and columns" { action x = map_unary transpose x; } #separator Matrix_plot_scatter_item = class Menuaction "_Plot Scatter" "plot a scatter graph of a matrix of [x,y1,y2,..] coordinates" { action x = class _result { _check_args = [ [x, "x", check_Matrix] ]; _vislevel = 3; auto = Toggle "Auto Range" true; xmin = Expression "X range minimum" 0; xmax = Expression "X range maximum" 1; ymin = Expression "Y range minimum" 0; ymax = Expression "Y range maximum" 1; _result = Plot options ((x2b @ get_image @ to_image) x) { options = [$style => Plot_style.POINT, $format => Plot_format.XYYY] ++ range; range = [], auto = [$xmin => xmin.expr, $xmax => xmax.expr, $ymin => ymin.expr, $ymax => ymax.expr]; // matrix to image makes a 1-band mxn image // we need to put columns into bands x2b im = bandjoin (map extract_col [0 .. w - 1]) { w = get_width im; h = get_height im; b = get_bands im; extract_col x = extract_area x 0 1 h im; } } } } Matrix_plot_item = Hist_plot_item; Matrix_buildlut_item = class Menuaction "_Build LUT From Scatter" "make a lookup table from a matrix of [x,y1,y2..] coordinates" { action x = class _result { _check_args = [ [x, "x", check_Matrix] ]; _result = buildlut x; } } nip2-8.7.0/share/nip2/compat/7.40/_convert.def0000644000175000017500000004223013224651032015442 00000000000000 /* Try to make a Matrix ... works for Vector/Image/Real, plus image/real */ to_matrix x = to_matrix x.expr, is_Expression x = x, is_Matrix x = oo_unary_function to_matrix_op x, is_class x = tom x { to_matrix_op = Operator "to_matrix" tom Operator_type.COMPOUND false; tom x = Matrix (itom x), is_image x = Matrix [[x]], is_real x = Matrix [x], is_real_list x = Matrix x, is_matrix x = error (_ "bad arguments to " ++ "to_matrix"); itom i = (im_vips2mask ((double) i)).value, is_image i = error (_ "not image"); } /* Try to make an Image ... works for Vector/Matrix/Real, plus image/real * Special case for Colour ... pull out the colour_space and set Type in the * image. */ to_image x = to_image x.expr, is_Expression x = Image x.value, is_Plot x = x, is_Image x = Image (image_set_type (Image_type.colour_spaces.lookup 0 1 x.colour_space) (mtoi [x.value])), is_Colour x = oo_unary_function to_image_op x, is_class x = toi x { to_image_op = Operator "to_image" toi Operator_type.COMPOUND false; toi x = Image x, is_image x = Image (mtoi [[x]]), is_real x = Image (mtoi [x]), is_real_list x = Image (mtoi x), is_matrix x = error (_ "bad arguments to " ++ "to_image"); // [[real]] -> image mtoi m = im_mask2vips (Matrix m), width != 3 = joinup (im_mask2vips (Matrix m)) { width = len m?0; height = len m; joinup i = b1 ++ b2 ++ b3 { b1 = extract_area 0 0 1 height i; b2 = extract_area 1 0 1 height i; b3 = extract_area 2 0 1 height i; } } } // like to_image, but we do 1x1 pixel + x, then embed it up // always make an unwrapped image for speed ... this gets used by ifthenelse // and stuff like that // format can be NULL, meaning set format from x to_image_size width height bands format x = x, is_image x = x.value, is_Image x = im'' { // we want x to set the target format if we don't have one, so we // can't use image_new im = im_black 1 1 bands + x; im' = clip2fmt format im, format != NULL = im; im'' = embed 1 0 0 width height im'; } /* Try to make a Colour. */ to_colour x = to_colour x.expr, is_Expression x = x, is_Colour x = to_colour (extract_area x.left x.top 1 1 x.image), is_Mark x = oo_unary_function to_colour_op x, is_class x = toc x { to_colour_op = Operator "to_colour" toc Operator_type.COMPOUND false; toc x = Colour (colour_space (get_type x)) (map mean (bandsplit (get_image x))), has_image x && has_type x = Colour "sRGB" [x, x, x], is_real x // since Colour can't do mono = Colour "sRGB" x, is_real_list x && is_list_len 3 x = map toc x, is_matrix x = error (_ "bad arguments to " ++ "to_colour"); colour_space type = table.get_name type, table.has_name type = error (_ "unable to make Colour from " ++ table.get_name type ++ _ " image") { table = Image_type.colour_spaces; } } /* Try to make a real. (not a Real!) */ to_real x = to_real x.expr, is_Expression x = oo_unary_function to_real_op x, is_class x = tor x { to_real_op = Operator "to_real" tor Operator_type.COMPOUND false; tor x = x, is_real x = abs x, is_complex x = 1, is_bool x && x = 0, is_bool x && !x = error (_ "bad arguments to " ++ "to_real"); } to_int x = (int) (to_real x); /* Try to make a list ... ungroup, basically. We remove the innermost layer of * Groups. */ to_list x = x.value, is_Group x && !contains_Group x.value = Group (map to_list x.value), is_Group x = x; /* Try to make a group. The outermost list objects become Group()'d. */ to_group x = Group x, is_list x = Group (map to_group x.value), is_Group x = x; /* Parse a positive integer. */ parse_pint l = foldl acc 0 l { acc sofar ch = sofar * 10 + parse_c ch; /* Turn a char digit to a number. */ parse_c ch = error (_ "not a digit"), !is_digit ch = (int) ch - (int) '0'; } /* Parse an integer, with an optional sign character. */ parse_int l = error (_ "badly formed number"), !is_list_len 2 parts = sign * n { parts = splitpl [member "+-", is_digit] l; n = parse_pint parts?1; sign = 1, parts?0 == [] || parts?0 == "+" = -1; } /* Parse a float. * [+-]?[0-9]*([.][0-9]*)?(e[0-9]+)? */ parse_float l = err, !is_list_len 4 parts = sign * (abs ipart + fpart) * 10 ** exp { err = error (_ "badly formed number"); parts = splitpl [ member "+-0123456789", member ".0123456789", member "eE", member "+-0123456789" ] l; ipart = parse_int parts?0; sign = 1, ipart > 0 = -1; fpart = 0, parts?1 == []; = err, parts?1?0 != '.' = parse_pint (tl parts?1) / 10 ** (len parts?1 - 1); exp = 0, parts?2 == [] && parts?3 == [] = err, parts?2 == [] = parse_int parts?3; } /* Parse a time in "hh:mm:ss" into seconds. We could do this in one line :) = (sum @ map2 multiply (iterate (multiply 60) 1) @ reverse @ map parse_pint @ map (subscript (splitpl [is_digit, equal ':', is_digit, equal ':', is_digit] l))) [0,2,4]; but it's totally unreadable. */ parse_time l = error (_ "badly formed time"), !is_list_len 5 parts = s + 60 * m + 60 * 60 * h { parts = splitpl [is_digit, equal ':', is_digit, equal ':', is_digit] l; h = parse_int parts?0; m = parse_int parts?2; s = parse_int parts?4; } /* matrix to convert D65 XYZ to D50 XYZ ... direct conversion, found by * measuring a macbeth chart in D50 and D65 and doing a LMS to get a matrix */ D652D50_direct = Matrix [[ 1.13529, -0.0604663, -0.0606321 ], [ 0.0975399, 0.935024, -0.0256156 ], [ -0.0336428, 0.0414702, 0.994135 ]]; D502D65_direct = D652D50_direct ** -1; /* Convert normalised XYZ to bradford RGB. */ XYZ2RGBbrad = Matrix [[0.8951, 0.2664, -0.1614], [-0.7502, 1.7135, 0.0367], [0.0389, -0.0685, 1.0296]]; /* Convert bradford RGB to normalised XYZ. */ RGBbrad2XYZ = XYZ2RGBbrad ** -1; D93_whitepoint = Vector [89.7400, 100, 130.7700]; D75_whitepoint = Vector [94.9682, 100, 122.5710]; D65_whitepoint = Vector [95.0470, 100, 108.8827]; D55_whitepoint = Vector [95.6831, 100, 92.0871]; D50_whitepoint = Vector [96.4250, 100, 82.4680]; A_whitepoint = Vector [109.8503, 100, 35.5849]; // 2856K B_whitepoint = Vector [99.0720, 100, 85.2230]; // 4874K C_whitepoint = Vector [98.0700, 100, 118.2300]; // 6774K E_whitepoint = Vector [100, 100, 100]; // ill. free D3250_whitepoint = Vector [105.6590, 100, 45.8501]; Whitepoints = Enum [ $D93 => D93_whitepoint, $D75 => D75_whitepoint, $D65 => D65_whitepoint, $D55 => D55_whitepoint, $D50 => D50_whitepoint, $A => A_whitepoint, $B => B_whitepoint, $C => C_whitepoint, $E => E_whitepoint, $D3250 => D3250_whitepoint ]; /* Convert D50 XYZ to D65 using the bradford chromatic adaptation approx. */ im_D502D65 xyz = xyz''' { xyz' = xyz / D50_whitepoint; rgb = recomb XYZ2RGBbrad xyz'; // move white in bradford RGB rgb' = rgb / Vector [0.94, 1.02, 1.33]; xyz'' = recomb RGBbrad2XYZ rgb'; // back to D65 xyz''' = xyz'' * D65_whitepoint; } /* Convert D65 XYZ to D50 using the bradford approx. */ im_D652D50 xyz = xyz''' { xyz' = xyz / D65_whitepoint; rgb = recomb XYZ2RGBbrad xyz'; // move white in bradford RGB rgb' = rgb * Vector [0.94, 1.02, 1.33]; xyz'' = recomb RGBbrad2XYZ rgb'; xyz''' = xyz'' * D50_whitepoint; } /* Convert D50 XYZ to Lab. */ im_D50XYZ2Lab xyz = im_XYZ2Lab_temp xyz D50_whitepoint.value?0 D50_whitepoint.value?1 D50_whitepoint.value?2; im_D50Lab2XYZ lab = im_Lab2XYZ_temp lab D50_whitepoint.value?0 D50_whitepoint.value?1 D50_whitepoint.value?2; /* ... and mono conversions */ im_sRGB2mono in = (image_set_type Image_type.B_W @ clip2fmt (get_header "BandFmt" in) @ recomb (Matrix [[.3, .6, .1]])) in; im_mono2sRGB in = image_set_type Image_type.sRGB (in ++ in ++ in); im_sRGB2Lab = im_XYZ2Lab @ im_sRGB2XYZ; im_Lab2sRGB = im_XYZ2sRGB @ im_Lab2XYZ; // from the 16 bit RGB and GREY formats im_1628 x = im_clip (x >> 8); im_162f x = x / 256; im_8216 x = (im_clip2us x) << 8; im_f216 x = im_clip2us (x * 256); im_RGB162GREY16 in = (image_set_type Image_type.GREY16 @ clip2fmt (get_header "BandFmt" in) @ recomb (Matrix [[.3, .6, .1]])) in; im_GREY162RGB16 in = image_set_type Image_type.RGB16 (in ++ in ++ in); /* apply a func to an image ... make it 1 or 3 bands, and reapply other bands * on the way out. Except if it's LABPACK. */ colour_apply fn x = fn x, b == 1 || b == 3 || c == Image_coding.LABPACK = x'' { b = get_bands x; c = get_coding x; first = extract_bands 0 3 x, b > 3 = extract_bands 0 1 x; tail = extract_bands 3 (b - 3) x, b > 3 = extract_bands 1 (b - 1) x; x' = fn first; x'' = x' ++ clip2fmt (get_format x') tail; } /* Any 1-ary colour op, applied to Vector/Image/Matrix or image */ colour_unary fn x = oo_unary_function colour_op x, is_class x = colour_apply fn x, is_image x = colour_apply fn [x], is_real x = error (_ "bad arguments to " ++ "colour_unary") { // COMPOUND_REWRAP ... signal to the colour class to go to image and // back colour_op = Operator "colour_unary" colour_object Operator_type.COMPOUND_REWRAP false; colour_object x = colour_real_list x, is_real_list x = map colour_real_list x, is_matrix x = colour_apply fn x, is_image x = error (_ "bad arguments to " ++ "colour_unary"); colour_real_list l = (to_matrix (fn (float) (to_image (Vector l)).value)).value?0; } /* Any symmetric 2-ary colour op, applied to Vector/Image/Matrix or image ... * name is op name for error messages etc. */ colour_binary name fn x y = oo_binary_function colour_op x y, is_class x = oo_binary'_function colour_op x y, is_class y = fn x y, is_image x && is_image y = error (_ "bad arguments to " ++ name) { colour_op = Operator name colour_object Operator_type.COMPOUND_REWRAP true; colour_object x y = fn x y, is_image x && is_image y = colour_real_list fn x y, is_real_list x && is_real_list y = map (colour_real_list fn x) y, is_real_list x && is_matrix y = map (colour_real_list (converse fn) y) x, is_matrix x && is_real_list y = map2 (colour_real_list fn) x y, is_matrix x && is_matrix y = error (_ "bad arguments to " ++ name); colour_real_list fn l1 l2 = (to_matrix (fn i1 i2)).value?0 { i1 = (float) (to_image (Vector l1)).value; i2 = (float) (to_image (Vector l2)).value; } } _colour_conversion_table = [ /* Lines are [space-from, space-to, conversion function]. Could do * this as a big array, but table lookup feels safer. */ [B_W, B_W, image_set_type B_W], [B_W, XYZ, im_sRGB2XYZ @ im_mono2sRGB @ im_clip], [B_W, YXY, im_XYZ2Yxy @ im_sRGB2XYZ @ im_mono2sRGB @ im_clip], [B_W, LAB, im_sRGB2Lab @ im_mono2sRGB @ im_clip], [B_W, LCH, im_Lab2LCh @ im_sRGB2Lab @ im_mono2sRGB @ im_clip], [B_W, UCS, im_XYZ2UCS @ im_sRGB2XYZ @ im_mono2sRGB @ im_clip], [B_W, RGB, im_XYZ2disp @ im_sRGB2XYZ @ im_mono2sRGB @ im_clip], [B_W, sRGB, im_mono2sRGB @ im_clip], [B_W, RGB16, image_set_type RGB16 @ im_8216 @ im_mono2sRGB], [B_W, GREY16, image_set_type GREY16 @ im_8216], [B_W, LABQ, im_Lab2LabQ @ im_sRGB2Lab @ im_mono2sRGB @ im_clip], [B_W, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_sRGB2Lab @ im_mono2sRGB @ im_clip], [XYZ, B_W, im_sRGB2mono @ im_XYZ2sRGB @ im_clip2f], [XYZ, XYZ, image_set_type XYZ], [XYZ, YXY, im_XYZ2Yxy @ im_clip2f], [XYZ, LAB, im_XYZ2Lab @ im_clip2f], [XYZ, LCH, im_Lab2LCh @ im_XYZ2Lab], [XYZ, UCS, im_XYZ2UCS @ im_clip2f], [XYZ, RGB, im_XYZ2disp @ im_clip2f], [XYZ, sRGB, im_XYZ2sRGB @ im_clip2f], [XYZ, LABQ, im_Lab2LabQ @ im_XYZ2Lab @ im_clip2f], [XYZ, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_XYZ2Lab @ im_clip2f], [YXY, B_W, im_sRGB2mono @ im_XYZ2sRGB @ im_Yxy2XYZ @ im_clip2f], [YXY, XYZ, im_Yxy2XYZ @ im_clip2f], [YXY, YXY, image_set_type YXY], [YXY, LAB, im_XYZ2Lab @ im_Yxy2XYZ @ im_clip2f], [YXY, LCH, im_Lab2LCh @ im_XYZ2Lab @ im_Yxy2XYZ @ im_clip2f], [YXY, UCS, im_XYZ2UCS @ im_Yxy2XYZ @ im_clip2f], [YXY, RGB, im_XYZ2disp @ im_Yxy2XYZ @ im_clip2f], [YXY, sRGB, im_XYZ2sRGB @ im_Yxy2XYZ @ im_clip2f], [YXY, LABQ, im_Lab2LabQ @ im_XYZ2Lab @ im_Yxy2XYZ @ im_clip2f], [YXY, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_XYZ2Lab @ im_Yxy2XYZ @ im_clip2f], [LAB, B_W, im_sRGB2mono @ im_Lab2sRGB @ im_Lab2XYZ @ im_clip2f], [LAB, XYZ, im_Lab2XYZ @ im_clip2f], [LAB, YXY, im_XYZ2Yxy @ im_Lab2XYZ @ im_clip2f], [LAB, LAB, image_set_type LAB @ im_clip2f], [LAB, LCH, im_Lab2LCh @ im_clip2f], [LAB, UCS, im_Lab2UCS @ im_clip2f], [LAB, RGB, im_Lab2disp @ im_clip2f], [LAB, sRGB, im_Lab2sRGB @ im_clip2f], [LAB, LABQ, im_Lab2LabQ @ im_clip2f], [LAB, LABS, im_Lab2LabS @ im_clip2f], [LCH, B_W, im_sRGB2mono @ im_Lab2sRGB @ im_LCh2Lab @ im_clip2f], [LCH, XYZ, im_Lab2XYZ @ im_LCh2Lab @ im_clip2f], [LCH, YXY, im_XYZ2Yxy @ im_Lab2XYZ @ im_LCh2Lab @ im_clip2f], [LCH, LAB, im_LCh2Lab @ im_clip2f], [LCH, LCH, image_set_type LCH], [LCH, UCS, im_LCh2UCS @ im_clip2f], [LCH, RGB, im_Lab2disp @ im_LCh2Lab @ im_clip2f], [LCH, sRGB, im_Lab2sRGB @ im_LCh2Lab @ im_clip2f], [LCH, LABQ, im_Lab2LabQ @ im_LCh2Lab @ im_clip2f], [LCH, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_LCh2Lab @ im_clip2f], [UCS, B_W, im_sRGB2mono @ im_XYZ2sRGB @ im_UCS2XYZ @ im_clip2f], [UCS, XYZ, im_UCS2XYZ @ im_clip2f], [UCS, YXY, im_XYZ2Yxy @ im_Lab2XYZ @ im_UCS2Lab @ im_clip2f], [UCS, LAB, im_UCS2Lab @ im_clip2f], [UCS, LCH, im_UCS2LCh @ im_clip2f], [UCS, UCS, image_set_type UCS], [UCS, RGB, im_Lab2disp @ im_UCS2Lab @ im_clip2f], [UCS, sRGB, im_Lab2sRGB @ im_UCS2Lab @ im_clip2f], [UCS, LABQ, im_Lab2LabQ @ im_UCS2Lab @ im_clip2f], [UCS, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_UCS2Lab @ im_clip2f], [RGB, B_W, im_sRGB2mono @ im_XYZ2sRGB @ im_disp2XYZ @ im_clip], [RGB, XYZ, im_disp2XYZ @ im_clip], [RGB, YXY, im_XYZ2Yxy @ im_disp2XYZ @ im_clip], [RGB, LAB, im_disp2Lab @ im_clip], [RGB, LCH, im_Lab2LCh @ im_disp2Lab @ im_clip], [RGB, UCS, im_Lab2UCS @ im_disp2Lab @ im_clip], [RGB, RGB, image_set_type RGB], [RGB, sRGB, im_XYZ2sRGB @ im_disp2XYZ @ im_clip], [RGB, RGB16, image_set_type RGB16 @ im_8216], [RGB, GREY16, image_set_type GREY16 @ im_8216 @ im_sRGB2mono], [RGB, LABQ, im_Lab2LabQ @ im_disp2Lab @ im_clip], [RGB, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_disp2Lab @ im_clip], [sRGB, B_W, im_sRGB2mono], [sRGB, XYZ, im_sRGB2XYZ @ im_clip], [sRGB, YXY, im_XYZ2Yxy @ im_sRGB2XYZ @ im_clip], [sRGB, LAB, im_sRGB2Lab @ im_clip], [sRGB, LCH, im_Lab2LCh @ im_sRGB2Lab @ im_clip], [sRGB, UCS, im_XYZ2UCS @ im_sRGB2XYZ @ im_clip], [sRGB, RGB, im_XYZ2disp @ im_sRGB2XYZ @ im_clip], [sRGB, sRGB, image_set_type sRGB], [sRGB, RGB16, image_set_type RGB16 @ im_8216], [sRGB, GREY16, image_set_type GREY16 @ im_8216 @ im_sRGB2mono], [sRGB, LABQ, im_Lab2LabQ @ im_sRGB2Lab @ im_clip], [sRGB, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_sRGB2Lab @ im_clip], [RGB16, B_W, im_1628 @ im_sRGB2mono], [RGB16, RGB, image_set_type RGB @ im_1628], [RGB16, sRGB, image_set_type sRGB @ im_1628], [RGB16, RGB16, image_set_type RGB16], [RGB16, GREY16, im_RGB162GREY16], [GREY16, B_W, image_set_type B_W @ im_1628], [GREY16, RGB, im_mono2sRGB @ im_1628], [GREY16, sRGB, im_mono2sRGB @ im_1628], [GREY16, RGB16, im_GREY162RGB16], [GREY16, GREY16, image_set_type GREY16], [LABQ, B_W, im_sRGB2mono @ im_Lab2sRGB @ im_LabQ2Lab], [LABQ, XYZ, im_Lab2XYZ @ im_LabQ2Lab], [LABQ, YXY, im_XYZ2Yxy @ im_Lab2XYZ @ im_LabQ2Lab], [LABQ, LAB, im_LabQ2Lab], [LABQ, LCH, im_Lab2LCh @ im_LabQ2Lab], [LABQ, UCS, im_Lab2UCS @ im_LabQ2Lab], [LABQ, RGB, im_LabQ2disp], [LABQ, sRGB, im_Lab2sRGB @ im_LabQ2Lab], [LABQ, LABQ, image_set_type LABQ], [LABQ, LABS, im_LabQ2LabS], [LABS, B_W, im_sRGB2mono @ im_Lab2sRGB @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, XYZ, im_Lab2XYZ @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, YXY, im_XYZ2Yxy @ im_Lab2XYZ @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, LAB, im_LabS2Lab], [LABS, LCH, im_Lab2LCh @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, UCS, im_Lab2UCS @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, RGB, im_LabQ2disp @ im_LabS2LabQ @ im_clip2s], [LABS, sRGB, im_XYZ2sRGB @ im_Lab2XYZ @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, LABQ, im_LabS2LabQ @ im_clip2s], [LABS, LABS, image_set_type LABS] ] { /* From Image_type ... repeat here for brevity. Use same ordering as * in Colour menu for consistency. */ B_W = 1; XYZ = 12; YXY = 23; LAB = 13; LCH = 19; UCS = 18; RGB = 17; sRGB = 22; RGB16 = 25; GREY16 = 26; LABQ = 16; LABS = 21; } /* Transform between two colour spaces. */ colour_transform from to in = colour_unary _colour_conversion_table?i?2 in, i >= 0 = error (_ "unable to convert " ++ Image_type.type_names.get_name from ++ _ " to " ++ Image_type.type_names.get_name to) { match x = x?0 == from && x?1 == to; i = index match _colour_conversion_table; } /* Transform to a colour space, assuming the type field in the input is * correct */ colour_transform_to to in = colour_transform (get_type in) to in; /* String for path separator on this platform. */ path_separator = expand "$SEP"; /* Form a relative pathname. * path_relative ["home", "john"] == "home/john" * path_relative [] == "" */ path_relative l = join_sep path_separator l; /* Form an absolute pathname. * path_absolute ["home", "john"] == "/home/john" * path_absolute [] == "/" * If the first component looks like 'A:', don't add an initial separator. */ path_absolute l = path_relative l, len l?0 > 1 && is_letter l?0?0 && l?0?1 == ':' = path_separator ++ path_relative l; /* Parse a pathname. * path_parse "/home/john" == ["home", "john"] * path_parse "home/john" == ["home", "john"] */ path_parse str = split (equal path_separator?0) str; nip2-8.7.0/share/nip2/compat/7.40/_joe_utilities.def0000644000175000017500000005054513224651032016642 00000000000000/* ******Functions included in start/_NG_utilities.def:****** * * so_balance ref_meanmax im1 im2 mask blur gauss * * nonzero_mean im = no_out * * so_meanmax im = result * * so_calculate ref_meanmax im mask = result * * simple_frame frame im_w im_h ov cs ms bf option = result * * corner_frame frame im_w im_h ov cs ms bf = result * * build_frame r_tl r_tr r_bl r_br r_mt r_mb r_ml r_mr im_w im_h ov bf = result * * complex_frame frame im_w im_h ov cs es ms bf option= result * * complex_edge ra rb t bl d = rc * * frame_lr_min r_l r_r target bw = result * * frame_tb_min r_t r_b target bw = result * * frame_position_image im ref os colour= result * * merge_array bw arr = result * * merge_to_scale im target blend dir = result * * select_ellipse line width = mask * * select_tetragon p1 p2 p3 p4 = mask * * select_polygon pt_list = mask * * perspective_transform to from = trans'' * * sort_pts_clockwise l = l'' * */ /* Called from: * _NG_Extra.def Clone_area_item */ so_balance ref_meanmax im1 im2 mask gauss = result { //ref_meanmax = so_meanmax im1; so_values = so_calculate ref_meanmax im2 mask; im2_cor_a = clip2fmt im2.format im2'', has_member "format" im2 = im2'' {im2'' = im2 * (so_values?0) + (so_values?1);} // Option to convert replacement image to scaled gaussian noise im2_cor = im2_cor_a, gauss == false = clip2fmt im2_cor_a.format gauss_im {gauss_im = im_gaussnoise im2_cor_a.width im2_cor_a.height ref_meanmax?0 (deviation im2_cor_a);} result = im_blend (get_image mask) (get_image im2_cor) (get_image im1); }; //////////////////////////////////////////////////////////////////////////////// /* Calculates the mean of the non zero pixels. * * Called from: * _NG_utilities so_meanmax */ nonzero_mean im = no_out { zero_im = (im == 0); zero_mean = mean zero_im; no_mean = mean im; no_out = no_mean/(1 - (zero_mean/255)); }; //////////////////////////////////////////////////////////////////////////////// /* Calculates the max and nonzero mean of an image * * Called from: * _NG_utilities so_balance * _NG_utilities so_calculate * _NG_Extra.def Clone_area_item * _NG_Extra.def Balance_item.Balance_find_item */ so_meanmax im = result { mean_of_im = nonzero_mean im; adjusted_im = im - mean_of_im; max_of_im = max adjusted_im; result = [mean_of_im, max_of_im]; }; //////////////////////////////////////////////////////////////////////////////// /* Calculates the scale and offset required to match a reference mean and max * * Called from: * _NG_utilities so_balance * _NG_Extra.def Balance_item.Balance_find_item */ so_calculate ref_meanmax im mask = result { im' = if mask then im else 0; im_values = so_meanmax im'; mean_of_ref = ref_meanmax?0; mean_of_im = im_values?0; max_of_ref = ref_meanmax?1; max_of_im = im_values?1; scale = (max_of_ref)/(max_of_im); offset = mean_of_ref - (mean_of_im * scale); result = [ scale, offset ]; }; //////////////////////////////////////////////////////////////////////////////// /* Extends or shortens the central sections of a simple frame to fit round a given image. * * Called from: * _NG_Extra.def Frame_item.Simple_frame_item */ simple_frame frame im_w im_h ov cs ms bf option = result { cs' = (1 - cs); ms' = (0.5 - (ms/2)); ms'' = (1 - cs); //Regions r_tl = Region_relative frame 0 0 cs cs; r_tr = fliplr r_tl, option == true = Region_relative frame cs' 0 cs cs; r_bl = Region_relative frame 0 cs' cs cs; r_br = fliplr r_bl, option == true = Region_relative frame cs' cs' cs cs; r_mt = Region_relative frame ms' 0 ms cs; r_mb = Region_relative frame ms' ms'' ms cs; r_ml = Region_relative frame 0 ms' cs ms; r_mr = fliplr r_ml, option == true = Region_relative frame ms'' ms' cs ms; result = build_frame r_tl r_tr r_bl r_br r_mt r_mb r_ml r_mr im_w im_h ov bf; }; //////////////////////////////////////////////////////////////////////////////// /* Copies and extends a simple frame corner to produce a complete frame to fit round a given image. * * Called from: * _NG_Extra.def Frame_item.Frame_corner_item */ corner_frame frame im_w im_h ov cs ms bf = result { cs' = (1 - cs); ms' = (0.5 - (ms/2)); //Regions r_tl = Region_relative frame 0 0 cs cs; r_tr = fliplr r_tl; r_bl = fliptb r_tl; r_br = fliplr r_bl; r_mt = Region_relative frame ms' 0 ms cs; r_mb = fliptb r_mt; r_ml = Region_relative frame 0 ms' cs ms;; r_mr = fliplr r_ml; result = build_frame r_tl r_tr r_bl r_br r_mt r_mb r_ml r_mr im_w im_h ov bf; }; //////////////////////////////////////////////////////////////////////////////// /* Completes the frame building process for simple_frame and corner_frame. * * _NG_utilities simple_frame * _NG_utilities corner_frame */ build_frame r_tl r_tr r_bl r_br r_mt r_mb r_ml r_mr im_w im_h ov bf = result { //Find pixel thickness of frames section s_width = r_ml.width - mean (im_profile (map_unary fliplr (r_ml.value)?0) 1); s_height = r_mt.height - mean (im_profile (map_unary fliptb (r_mt.value)?0) 0); w_target = im_w + (2 * (s_width - ov)); h_target = im_h + (2 * (s_height - ov)); blend = bf * r_tl.width; cw_target = w_target - (2 * r_tl.width) + (2 * blend), w_target > (2 * r_tl.width) = w_target; ch_target = h_target - (2 * r_tl.height) + (2 * blend), h_target > (2 * r_tl.height) = h_target; //Use regions to produce sections top = merge_to_scale r_mt cw_target blend 0; bottom = merge_to_scale r_mb cw_target blend 0; left = merge_to_scale r_ml ch_target blend 1; right = merge_to_scale r_mr ch_target blend 1; middle = Image (image_new cw_target ch_target left.bands left.format left.coding left.type 0 0 0); //Build sections into full frame. row_1 = frame_lr_min r_tl r_tr w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[r_tl, top, r_tr]]; row_2 = frame_lr_min left right w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[left, middle, right]]; row_3 = frame_lr_min r_bl r_br w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[r_bl, bottom, r_br]]; result = frame_tb_min row_1 row_3 h_target blend, (h_target < (r_tl.height * 2)) = merge_array blend [[row_1], [row_2], [row_3]]; }; //////////////////////////////////////////////////////////////////////////////// /* Extends or shortens the central sections of a frame, preserving any central details on each * edge, to fit round a given image. * * Called from: * _NG_Extra.def Frame_item.Complex_frame_item */ complex_frame frame im_w im_h ov cs es ms bf option= result { cs' = (1 - cs); ms' = (0.5 - (ms/2)); es' = (0.25 - (es/2)); r_tl = Region_relative frame 0 0 cs cs; r_tr = fliplr r_tl, option == true = Region_relative frame cs' 0 cs cs; r_bl = Region_relative frame 0 cs' cs cs; r_br = fliplr r_bl, option == true = Region_relative frame cs' cs' cs cs; r_mt = Region_relative frame ms' 0 ms cs; r_mb = Region_relative frame ms' cs' ms cs; r_ml = Region_relative frame 0 ms' cs ms; r_mr = fliplr r_ml, option == true = Region_relative frame cs' ms' cs ms; r_et = Region_relative frame es' 0 es cs; r_eb = Region_relative frame es' cs' es cs; r_el = Region_relative frame 0 es' cs es; r_er = fliplr r_el, option == true = Region_relative frame cs' es' cs es; //Find pixel thickness of frames section s_width = r_el.width - mean (im_profile (map_unary fliplr (r_el.value)?0) 1); s_height = r_et.height - mean (im_profile (map_unary fliptb (r_et.value)?0) 0); w_target = im_w + (2 * (s_width - ov)); h_target = im_h + (2 * (s_height - ov)); min_size = foldr1 min_pair [r_tl.width, r_tl.height, r_mt.width, r_mt.height, r_et.width, r_et.height]; blend = bf * min_size; cw_target = w_target - (2 * r_tl.width) + (2 * blend); ch_target = h_target - (2 * r_tl.height) + (2 * blend); top = complex_edge r_mt r_et cw_target blend 0; bottom = complex_edge r_mb r_eb cw_target blend 0; left = complex_edge r_ml r_el ch_target blend 1; right = complex_edge r_mr r_er ch_target blend 1; middle = Image (image_new top.width left.height left.bands left.format left.coding left.type 0 0 0); //Build regions into full frame. row_1 = frame_lr_min r_tl r_tr w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[r_tl, top, r_tr]]; row_2 = frame_lr_min left right w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[left, middle, right]]; row_3 = frame_lr_min r_bl r_br w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[r_bl, bottom, r_br]]; result = frame_tb_min row_1 row_3 h_target blend, (h_target < (r_tl.height * 2)) = merge_array blend [[row_1], [row_2], [row_3]]; }; //////////////////////////////////////////////////////////////////////////////// /* Function called by complex frame, used to produce section * * Called from: * _NG_utilities.def complex_frame */ complex_edge ra rb t bl d = rc { e1 = ceil (ra.width - t)/2, d == 0 = 0; e2 = 0, d == 0 = ceil (ra.height - t)/2; e3 = t, d == 0 = ra.width; e4 = ra.height, d == 0 = t; check = ra.width, d == 0; = ra.height; rai = get_image ra; t2 = (t - ra.width + (2 * bl))/2, d == 0 = (t - ra.height + (2 * bl))/2; rc = ra , t <= 0 = Image (im_extract_area rai e1 e2 e3 e4), t <= check = merge_array bl [[rb',ra,rb']], d == 0 = merge_array bl [[rb'],[ra],[rb']] {rb' = merge_to_scale rb t2 bl d;} }; ////////////////////////////////////////////////////////////////////////////// /* Blends two images left/right to produce an image a specific width. * * _NG_utilities build_frame * _NG_utilities complex_frame */ frame_lr_min r_l r_r target bw = result { //Calculating the new widh required for each image. no = (target/2 + bw); n_w = no, (r_l.width > no) = r_l.width; //Removing excess from what will be the middle of the final image. n_l = im_extract_area r_l.value 0 0 n_w r_l.height; n_r = im_extract_area r_r.value (r_r.width - n_w) 0 n_w r_l.height; //Merge the two image together with a bw*2 pixel overlap. result = Image (im_lrmerge n_l n_r ((bw*2) - n_w) 0 bw); }; ////////////////////////////////////////////////////////////////////////////// /* Blends two images top/bottom to produce an image a specific width. * * _NG_utilities build_frame * _NG_utilities complex_frame */ frame_tb_min r_t r_b target bw = result { //Calculating the new height required for each image. no = (target/2 + bw); n_h = no, (r_t.height > no) = r_t.height; //Removing excess from what will be the middle of the final image. n_t = im_extract_area r_t.value 0 0 r_t.width n_h; n_b = im_extract_area r_b.value 0 (r_b.height - n_h) r_b.width n_h; //Merge the two image together with a 50 pixel overlap. result = Image (im_tbmerge n_t n_b 0 ((bw*2) -n_h) bw); }; ////////////////////////////////////////////////////////////////////////////// /* Resixe canvas of an image to accomodate a frame and possible mount * * Called from: * _NG_Extra.def Frame_item.Frame_corner_item * _NG_Extra.def Frame_item.Simple_frame_item * _NG_Extra.def Frame_item.Complex_frame_item */ frame_position_image im ref os colour= result { background = image_new ref.width ref.height im.bands im.format im.coding im.type colour 0 0; result = insert_noexpand xp yp im background { xp = (ref.width - im.width)/2; yp = (ref.height - im.height - os)/2; } }; ////////////////////////////////////////////////////////////////////////////// /* Merges an array of images together according to blend width bw * * Called from: * _NG_Utilites.def build_frame * _NG_Utilites.def complex_frame * _NG_Utilites.def complex_edge */ merge_array bw arr = result { merge_lr bw im1 im2 = im3 { bw' = get_header "Xsize" (get_image im1); bw'' = -(bw' - bw); im3 = im_lrmerge (get_image im1) (get_image im2) bw'' 0 bw; } merge_tb bw im1 im2 = im3 { bw' = get_header "Ysize" (get_image im1); bw'' = -(bw' - bw); im3 = im_tbmerge (get_image im1) (get_image im2) 0 bw'' bw; } im_out = (image_set_origin 0 0 @ foldl1 (merge_tb bw) @ map (foldl1 (merge_lr bw))) arr; result = Image im_out; }; ////////////////////////////////////////////////////////////////////////////// /* Repeatably top/bottom add clones of im, with a defined overlap, until final height > target * * Called from: * _NG_Utilites.def build_frame * _NG_Utilites.def complex_edge */ merge_to_scale im target blend dir = result { blend' = floor blend; //allow fir lr or tb process var_a = im.width, dir == 0 = im.height; var_w = im.width, dir == 1 = target, target > blend' = blend'; var_h = im.height, dir == 0 = target, target > blend' = blend'; //total numner of copies of im requires, taking overlap into account. no_loops = ceil ((log ((target - blend')/(var_a - blend')))/(log 2)); process im no = result { pr_a = get_header "Xsize" (get_image im), dir == 0 = get_header "Ysize" (get_image im); pr_b = -(pr_a - blend' + 1); im' = im_lrmerge (get_image im) (get_image im) pr_b 0 blend', dir == 0 = im_tbmerge (get_image im) (get_image im) 0 pr_b blend'; no' = no - 1; result = im', no' < 1 = process im' no'; } im_tmp = im.value, var_a > target = process im no_loops; result = Image (im_extract_area (get_image im_tmp) 0 0 var_w var_h); }; ////////////////////////////////////////////////////////////////////////////// /* Selects an elispe based on a line and a width * * Called from: * _NG_Extra.def Select_item.Elipse */ select_ellipse line width = mask { im = Image (get_image line); //Make a 2 band image whose value equals its coordinates. im_coor = Image (make_xy im.width im.height); //Adjust the values to center tham on (line.left, line.top) im_cent = im_coor - Vector [line.left,line.top]; w = line.width; h = line.height; angle = 270, w == 0 && h < 0 = 90, w == 0 && h >= 0 = 360 + atan (h/w), w > 0 && h < 0 = atan (h/w), w > 0 && h >= 0 = 180 + atan (h/w); a = ( (h ** 2) + (w ** 2) )**0.5; b = a * width; x' = ( (cos angle) * im_cent?0) + ( (sin angle) * im_cent?1); y' = ( (cos angle) * im_cent?1) - ( (sin angle) * im_cent?0); mask = ( (b**2) * (x'**2) ) + ( (a**2) * (y'**2) ) <= (a * b)**2; }; ////////////////////////////////////////////////////////////////////////////// /* Selects a tetragon based on four points. * * Called from: * _NG_Extra.def Select_item.Tetragon * _NG_Extra.def Perspective_item */ select_tetragon p1 p2 p3 p4 = mask { //Put points in clockwise order starting at the top left. pt_list = sort_pts_clockwise [p1, p2, p3, p4]; pair_list = [ [ pt_list?0, pt_list?1 ], [ pt_list?1, pt_list?2 ], [ pt_list?2, pt_list?3 ], [ pt_list?3, pt_list?0 ] ]; //Make xy image the same size as p1.image; im_xy = Image (make_xy p1.image.width p1.image.height); white = Image (image_new p1.image.width p1.image.height 1 0 Image_coding.NOCODING 1 255 0 0); mask = foldl process white pair_list; /* Treat each pair of point as a vector going from p1 to p2, * then select all to right of line. This is done for each pair, * the results are all combined to select the area defined by * the four points. */ process im_in pair = im_out { x = (pair?0).left; y = (pair?0).top; x'= (pair?1).left; y'= (pair?1).top; w = x' - x; h = y' - y; m = 0, x == x' = (y-y')/(x-x'); c = 0, x == x' = ((y*x') - (y'*x))/(x' - x); mask= im_xy?1 - (im_xy?0 * m) >= c, w > 0 = im_xy?1 - (im_xy?0 * m) <= c, w < 0 = im_xy?0 <= x, w == 0 && h > 0 = im_xy?0 >= x; im_out = im_in & mask; } }; ////////////////////////////////////////////////////////////////////////////// /* Selects a tetragon based on four points. * * Called from: * _NG_Extra.def Select_item.Polygon */ select_polygon pt_list = mask { group_check = is_Group pt_list; pt_l = pt_list.value, group_check = pt_list; im = Image (get_image (pt_l?0)); im_xy = Image (make_xy im.width im.height); black = Image (image_new im_xy.width im_xy.height 1 0 Image_coding.NOCODING 1 0 0 0); x = im_xy?0; y = im_xy?1; pt_l' = grp_trip pt_l; mask = foldl process black pt_l'; /*Takes a group adds the first two the end and then creates a lists of *lists [[a, b, c], [b, c, d] .... [x, a, b]] */ grp_trip l = l'' { px = take 2 l; l' = join l px; start = [(take 3 l')]; rest = drop 3 l'; process a b = c { x = (last a)?1; x'= (last a)?2; x'' = [[x, x', b]]; c = join a x''; } l'' = foldl process start rest; }; process im_in triplet = im_out { p1 = triplet?0; p2 = triplet?1; p3 = triplet?2; //check for change in x direction between p1-p2 and p2 -p3 dir_1 = sign (p2.left - p1.left); dir_2 = sign (p3.left - p2.left); dir = dir_1 + dir_2; //define min x limit. min_x = p1.left, p1.left < p2.left = p2.left + 1, dir != 0 = p2.left; //define max x limit. max_x = p1.left, p1.left > p2.left = p2.left - 1, dir != 0 = p2.left; //equation of line defined by p1 and p2 m = line_m p1 p2; c = line_c p1 p2; //Every thing below the line im_test = ((y >= (m * x) + c) & (x >= min_x) & (x <= max_x)); im_out = im_in ^ im_test; } line_c p1 p2 = c {m = line_m p1 p2; c = p1.top - (m * p1.left);}; line_m p1 p2 = (p2.top - p1.top)/(p2.left - p1.left), p2.left != p1.left = 0; }; ////////////////////////////////////////////////////////////////////////////// /* Selects a tetragon based on four points. * * Called from: * _NG_Extra.def Perspective_match_item * _NG_Extra.def Perspective_item */ perspective_transform to from = trans'' { /* * Tramsformation matrix is calculated on the bases of the following functions: * x' = c0x + c1y + c2xy + c3 * y' = c4x + c5y + c6xy + c7 * * The functions used in vips im_transform works based on the functions: * x = x' + b0 + b2x' + b4y' + b6x'y' * y = y' + b1 + b3x' + b5y' + b7x'y' * * and is applied in the form of the matrix: * * [[b0, b1], * [b2, b3], * [b4, b5], * [b6, b7]] * * Therefore our required calculated matrix will be * * [[ c3 , c7], * [(c0 - 1) , c4], * [ c1 , (c5 - 1)], * [ c2 , c6]] * * to = [x1, y1, x2, y2, x3, y3, x4, y4] * from = [x1', y1', x2', y2', x3', y3', x4', y4'] * trans = [[c0], [c1], [c2], [c3], [c4], [c5], [c6], [c7]] * */ to' = Matrix [[to?0, to?1, ((to?0)*(to?1)), 1, 0, 0, 0, 0], [0, 0, 0, 0, to?0, to?1, ((to?0)*(to?1)), 1], [to?2, to?3, ((to?2)*(to?3)), 1, 0, 0, 0, 0], [0, 0, 0, 0, to?2, to?3, ((to?2)*(to?3)), 1], [to?4, to?5, ((to?4)*(to?5)), 1, 0, 0, 0, 0], [0, 0, 0, 0, to?4, to?5, ((to?4)*(to?5)), 1], [to?6, to?7, ((to?6)*(to?7)), 1, 0, 0, 0, 0], [0, 0, 0, 0, to?6, to?7, ((to?6)*(to?7)), 1]]; from' = Matrix (transpose [from]); to'' = to' ** (-1); trans = to'' * from'; trans' = trans.value; trans''= Matrix [[(trans'?3)?0, (trans'?7)?0 ], [((trans'?0)?0 - 1), (trans'?4)?0 ], [(trans'?1)?0, ((trans'?5)?0 - 1)], [(trans'?2)?0, (trans'?6)?0 ]]; }; ////////////////////////////////////////////////////////////////////////////// /* Sort a list of points into clockwise order. * * Called from: * _NG_utilities.def select_tetragon * _NG_Extra.def Perspective_match_item * _NG_Extra.def Perspective_item */ sort_pts_clockwise l = l'' { // sort functions: f_top a b = a.top < b.top; f_left a b = a.left < b.left; f_right a b = a.left > b.left; l' = sortc f_top l; l'_a = take 2 l'; l'_b = drop 2 l'; l''_a = sortc f_left l'_a; l''_b = sortc f_right l'_b; l'' = join l''_a l''_b; }; Mount_options _ctype _ppcm = class { _vislevel = 3; apply = Toggle "Apply mount options" false; ls = Expression "Lower mount section bigger by (cm)" 0; mount_colour = Colour _ctype [0, 0, 0]; _los = ls.expr * _ppcm; }; Frame_variables comp = class { _vislevel = 3; scale_factor = Expression "scale the size of the frame by" 1; /* These sliders define the fraction of the frames width or height is extracted * to produce each of the particular regions. */ corner_section = Scale "Corner section" 0.1 1 0.5; edge_section = Scale "Edge section" 0.1 1 0.2, comp > 0 = "Only required for complex frames"; middle_section = Scale "Middle section" 0.1 1 0.2; blend_fraction = Scale "Blend fraction" 0.1 0.9 0.1; option = Toggle "Use mirror of left-side to make right" true; }; nip2-8.7.0/share/nip2/compat/7.40/Image.def0000644000175000017500000014266213224651032014657 00000000000000Image_new_item = class Menupullright "_New" "make new things" { Image_black_item = class Menuaction "_Image" "make a new image" { format_names = [ "8-bit unsigned int - UCHAR", // 0 "8-bit signed int - CHAR", // 1 "16-bit unsigned int - USHORT", // 2 "16-bit signed int - SHORT", // 3 "32-bit unsigned int - UINT", // 4 "32-bit signed int - INT", // 5 "32-bit float - FLOAT", // 6 "64-bit complex - COMPLEX", // 7 "64-bit float - DOUBLE", // 8 "128-bit complex - DPCOMPLEX" // 9 ]; action = class Image _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; nbands = Expression "Image bands" 1; format_option = Option "Image format" format_names 0; type_option = Option_enum "Image type" Image_type.type_names "B_W"; pixel = Expression "Pixel value" 0; _result = image_new (to_real nwidth) (to_real nheight) (to_real nbands) (to_real format_option) Image_coding.NOCODING type_option.value_thing pixel.expr 0 0; } } Image_new_from_image_item = class Menuaction "_From Image" "make a new image based on image x" { action x = class Image _result { _vislevel = 3; pixel = Expression "Pixel value" 0; _result = image_new x.width x.height x.bands x.format x.coding x.type pixel.expr x.xoffset x.yoffset; } } Image_region_item = class Menupullright "_Region on Image" "make a new region on an image" { Region_item = class Menuaction "_Region" "make a region on an image" { action image = scope.Region_relative image 0.25 0.25 0.5 0.5; } Mark_item = class Menuaction "_Point" "make a point on an image" { action image = scope.Mark_relative image 0.5 0.5; } Arrow_item = class Menuaction "_Arrow" "make an arrow on an image" { action image = scope.Arrow_relative image 0.25 0.25 0.5 0.5; } HGuide_item = class Menuaction "_Horizontal Guide" "make a horizontal guide on an image" { action image = scope.HGuide image 0.5; } VGuide_item = class Menuaction "_Vertical Guide" "make a vertical guide on an image" { action image = scope.VGuide image 0.5; } sep1 = Menuseparator; Move_item = class Menuaction "From Region" "new region on image using existing region as a guide" { action a b = map_binary process a b { process a b = x.Region target x.left x.top x.width x.height, is_Region x = x.Arrow target x.left x.top x.width x.height, is_Arrow x = error "bad arguments to region-from-region" { // prefer image then region compare a b = false, !is_Image a && is_Image b = false, is_Region a && !is_Region b = true; [target, x] = sortc compare [a, b]; } } } } } Image_convert_to_image_item = class Menuaction "Con_vert to Image" "convert anything to an image" { action x = to_image x; } Image_number_format_item = class Menupullright "_Format" "convert numeric format" { U8_item = class Menuaction "_8 bit unsigned" "convert to unsigned 8 bit [0, 255]" { action x = map_unary cast_unsigned_char x; } U16_item = class Menuaction "1_6 bit unsigned" "convert to unsigned 16 bit [0, 65535]" { action x = map_unary cast_unsigned_short x; } U32_item = class Menuaction "_32 bit unsigned" "convert to unsigned 32 bit [0, 4294967295]" { action x = map_unary cast_unsigned_int x; } sep1 = Menuseparator; S8_item = class Menuaction "8 _bit signed" "convert to signed 8 bit [-128, 127]" { action x = map_unary cast_signed_char x; } S16_item = class Menuaction "16 b_it signed" "convert to signed 16 bit [-32768, 32767]" { action x = map_unary cast_signed_short x; } S32_item = class Menuaction "32 bi_t signed" "convert to signed 32 bit [-2147483648, 2147483647]" { action x = map_unary cast_signed_int x; } sep2 = Menuseparator; Float_item = class Menuaction "_Single precision float" "convert to IEEE 32 bit float" { action x = map_unary cast_float x; } Double_item = class Menuaction "_Double precision float" "convert to IEEE 64 bit float" { action x = map_unary cast_double x; } sep3 = Menuseparator; Scmplxitem = class Menuaction "Single _precision complex" "convert to 2 x IEEE 32 bit float" { action x = map_unary cast_complex x; } Dcmplx_item = class Menuaction "Double p_recision complex" "convert to 2 x IEEE 64 bit float" { action x = map_unary cast_double_complex x; } } Image_header_item = class Menupullright "_Header" "do stuff to the image header" { Image_get_item = class Menupullright "_Get" "get header fields" { // the header fields we can get fields = class { type = 0; width = 1; height = 2; format = 3; bands = 4; xres = 5; yres = 6; xoffset = 7; yoffset = 8; coding = 9; field_names = Enum [ $width => width, $height => height, $bands => bands, $format => format, $type => type, $xres => xres, $yres => yres, $xoffset => xoffset, $yoffset => yoffset, $coding => coding ]; field_option name = Option_enum (_ "Field") field_names name; field_funcs = Table [ [type, get_type], [width, get_width], [height, get_height], [format, get_format], [bands, get_bands], [xres, get_xres], [yres, get_yres], [xoffset, get_xoffset], [yoffset, get_yoffset], [coding, get_coding] ]; } get_field field_name x = class _result { _vislevel = 3; field = fields.field_option field_name; _result = map_unary (Real @ fields.field_funcs.lookup 0 1 field.value_thing) x; } Width_item = class Menuaction "_Width" "get width" { action x = get_field "width" x; } Height_item = class Menuaction "_Height" "get height" { action x = get_field "height" x; } Bands_item = class Menuaction "_Bands" "get bands" { action x = get_field "bands" x; } Format_item = class Menuaction "_Format" "get format" { action x = get_field "format" x; } Type_item = class Menuaction "_Type" "get type" { action x = get_field "type" x; } Xres_item = class Menuaction "_Xres" "get X resolution" { action x = get_field "xres" x; } Yres_item = class Menuaction "_Yres" "get Y resolution" { action x = get_field "yres" x; } Xoffset_item = class Menuaction "X_offset" "get X offset" { action x = get_field "xoffset" x; } Yoffset_item = class Menuaction "Yo_ffset" "get Y offset" { action x = get_field "yoffset" x; } Coding_item = class Menuaction "_Coding" "get coding" { action x = get_field "coding" x; } sep1 = Menuseparator; Custom_item = class Menuaction "C_ustom" "get any header field" { action x = class _result { _vislevel = 3; field = String "Field" "Xsize"; parse = Option "Parse" [ "No parsing", "Parse string as integer", "Parse string as real", "Parse string as hh:mm:ss" ] 0; _result = map_unary (wrap @ process @ get_header field.value) x { parse_str parse str = parse (split is_space str)?0; parse_field name cast parse x = cast x, is_number x = parse_str parse x, is_string x = error ("not " ++ name); get_int = parse_field "int" cast_signed_int parse_int; get_float = parse_field "float" cast_float parse_float; get_time = parse_field "hh:mm:ss" cast_signed_int parse_time; wrap x = Real x, is_real x = Vector x, is_real_list x = Image x, is_image x = Bool x, is_bool x = Matrix x, is_matrix x = String "String" x, is_string x = List x, is_list x = x; process = [ id, get_int, get_float, get_time ]?parse; } } } } sep1 = Menuseparator; Image_set_meta_item = class Menuaction "_Set" "set image metadata" { action x = class _result { _vislevel = 3; fname = String "Field" "field-name"; val = Expression "Value" 42; _result = map_unary process x { process image = set_header fname.value val.expr image; } } } Image_edit_header_item = class Menuaction "_Edit" "change advisory header fields of image" { type_names = Image_type.type_names; all_names = sort (map (extract 0) type_names.value); get_prop has get def x = get x, has x = def; action x = class _result { _vislevel = 3; nxres = Expression "Xres" (get_prop has_xres get_xres 1 x); nyres = Expression "Yres" (get_prop has_yres get_yres 1 x); nxoff = Expression "Xoffset" (get_prop has_xoffset get_xoffset 0 x); nyoff = Expression "Yoffset" (get_prop has_yoffset get_yoffset 0 x); type_option = Option_enum "Image type" Image_type.type_names (Image_type.type_names.get_name type) { type = x.type, is_Image x = Image_type.MULTIBAND; } _result = map_unary process x { process image = Image (im_copy_set image.value type_option.value_thing (to_real nxres) (to_real nyres) (to_real nxoff) (to_real nyoff)); } } } } Image_cache_item = class Menuaction "C_ache" "cache calculated image pixels" { action x = class _result { _vislevel = 3; tile_width = Number "Tile width" 128; tile_height = Number "Tile height" 128; max_tiles = Number "Maximum number of tiles to cache" (-1); _result = map_unary process x { process image = cache (to_real tile_width) (to_real tile_height) (to_real max_tiles) image; } } } #separator Image_levels_item = class Menupullright "_Levels" "change image levels" { Scale_item = class Menuaction "_Scale to 0 - 255" "linear transform to fit 0 - 255 range" { action x = map_unary scale x; } Linear_item = class Menuaction "_Linear" "linear transform of image levels" { action x = class _result { _vislevel = 3; scale = Scale "Scale" 0.001 3 1; offset = Scale "Offset" (-128) 128 0; _result = map_unary adj x { adj x // only force back to input type if this is a thing // with a type ... so we work for Colour / Matrix etc. = clip2fmt x.format x', has_member "format" x = x' { x' = x * scale + offset; } } } } Gamma_item = class Menuaction "_Power" "power transform of image levels (gamma)" { action x = class _result { _vislevel = 3; gamma = Scale "Gamma" 0.001 4 1; image_maximum_hint = "You may need to change image_maximum if " ++ "this is not an 8 bit image"; im_mx = Expression "Image maximum" mx { mx = Image_format.maxval x.format, has_format x = 255; } _result = map_unary gam x { gam x = clip2fmt (get_format x) x', has_format x = x' { x' = (im_mx.expr / im_mx.expr ** gamma) * x ** gamma; } } } } Tone_item = class Menuaction "_Tone Curve" "adjust tone curve" { action x = class _result { _vislevel = 3; b = Scale "Black point" 0 100 0; w = Scale "White point" 0 100 100; sp = Scale "Shadow point" 0.1 0.3 0.2; mp = Scale "Mid-tone point" 0.4 0.6 0.5; hp = Scale "Highlight point" 0.7 0.9 0.8; sa = Scale "Shadow adjust" (-15) 15 0; ma = Scale "Mid-tone adjust" (-30) 30 0; ha = Scale "Highlight adjust" (-15) 15 0; curve = tone_build x.format b w sp mp hp sa ma ha; _result = map_unary (hist_map curve) x; } } } Image_transform_item = class Menupullright "_Transform" "transform images" { Rotate_item = class Menupullright "Ro_tate" "rotate image" { Fixed_item = class Menupullright "_Fixed" "clockwise rotation by fixed angles" { rotate_widget default x = class _result { _vislevel = 3; angle = Option "Rotate by" [ "Don't rotate", "90 degrees clockwise", "180 degrees", "90 degrees anticlockwise" ] default; _result = map_unary process x { process = [ // we can't use id here since we want to "declass" // the members of x ... consider if x is a crop class, // for example, we don't want to inherit from crop, we // want to make a new image class rot180 @ rot180, rot90, rot180, rot270 ] ? angle; } } Rot90_item = class Menuaction "_90 Degrees" "clockwise rotation by 90 degrees" { action x = rotate_widget 1 x; } Rot180_item = class Menuaction "_180 Degrees" "clockwise rotation by 180 degrees" { action x = rotate_widget 2 x; } Rot270_item = class Menuaction "_270 Degrees" "clockwise rotation by 270 degrees" { action x = rotate_widget 3 x; } } Free_item = class Menuaction "_Free" "clockwise rotation by any angle" { action x = class _result { _vislevel = 3; angle = Scale "Angle" (-180) 180 0; interp = Interpolate_picker Interpolate_type.BILINEAR; _result = map_unary process x { process image = rotate interp angle image; } } } Straighten_item = class Menuaction "_Straighten" ("smallest rotation that makes an arrow either horizontal " ++ "or vertical") { action x = class _result { _vislevel = 3; interp = Interpolate_picker Interpolate_type.BILINEAR; _result = map_unary straighten x { straighten arrow = rotate interp angle'' arrow.image { x = arrow.width; y = arrow.height; angle = im (polar (x, y)); angle' = angle - 360, angle > 315 = angle - 180, angle > 135 = angle; angle'' = -angle', angle' >= (-45) && angle' < 45 = 90 - angle'; } } } } } Flip_item = class Menupullright "_Flip" "mirror left/right or up/down" { Left_right_item = class Menuaction "_Left Right" "mirror object left/right" { action x = map_unary fliplr x; } Top_bottom_item = class Menuaction "_Top Bottom" "mirror object top/bottom" { action x = map_unary fliptb x; } } Resize_item = class Menupullright "_Resize" "change image size" { Scale_item = class Menuaction "_Scale" "scale image size by a factor" { action x = class _result { _vislevel = 3; xfactor = Expression "Horizontal scale factor" 1; yfactor = Expression "Vertical scale factor" 1; interp = Interpolate_picker Interpolate_type.BILINEAR; _result = map_unary process x { process image = resize interp xfactor yfactor image; } } } Size_item = class Menuaction "_Size To" "resize to a fixed size" { action x = class _result { _vislevel = 3; which = Option "Resize axis" [ "Shortest", "Longest", "Horizontal", "Vertical" ] 0; size = Expression "Resize to (pixels)" 128; aspect = Toggle "Break aspect ratio" false; interp = Interpolate_picker Interpolate_type.BILINEAR; _result = map_unary process x { process image = resize interp h v image, aspect = resize interp fac fac image { xfac = to_real size / image.width; yfac = to_real size / image.height; max_factor = [xfac, 1], xfac > yfac = [1, yfac]; min_factor = [xfac, 1], xfac < yfac = [1, yfac]; [h, v] = [ max_factor, min_factor, [xfac, 1], [1, yfac]]?which; fac = h, v == 1 = v; } } } } Size_within_item = class Menuaction "Size _Within" "size to fit within a rectangle" { action x = class _result { _vislevel = 3; // the rects we size to fit within _rects = [ [2048, 1536], [1920, 1200], [1600, 1200], [1400, 1050], [1280, 1024], [1024, 768], [800, 600], [640, 480] ]; within = Option "Fit within (pixels)" ( [print w ++ " x " ++ print h :: [w, h] <- _rects] ++ ["Custom"] ) 4; custom_width = Expression "Custom width" 1000; custom_height = Expression "Custom height" 1000; size = Option "Page size" [ "Full page", "Half page", "Quarter page" ] 0; interp = Interpolate_picker Interpolate_type.BILINEAR; _result = map_unary process x { xdiv = [1, 2, 2]?size; ydiv = [1, 1, 2]?size; allrect = _rects ++ [ [custom_width.expr, custom_height.expr] ]; [width, height] = allrect?within; process x = resize interp fac fac x, fac < 1 = x { xfac = (width / xdiv) / x.width; yfac = (height / ydiv) / x.height; fac = min_pair xfac yfac; } } } } Resize_canvas_item = class Menuaction "_Canvas" "change size of surrounding image" { action x = class _result { _vislevel = 3; // try to guess a sensible size for the new image _guess_size = x.rect, is_Image x = Rect 0 0 100 100; nwidth = Expression "New width (pixels)" _guess_size.width; nheight = Expression "New height (pixels)" _guess_size.height; bgcolour = Expression "Background colour" 0; position = Option "Position" [ "North-west", "North", "North-east", "West", "Centre", "East", "South-west", "South", "South-east", "Specify in pixels" ] 4; left = Expression "Pixels from left" 0; top = Expression "Pixels from top" 0; _result = map_unary process x { process image = insert_noexpand xp yp image background { width = image.width; height = image.height; coding = image.coding; bands = 3, coding == Image_coding.LABPACK = image.bands; format = Image_format.FLOAT, coding == Image_coding.LABPACK = image.format; type = image.type; // placement vectors ... left, centre, right xposv = [0, to_real nwidth / 2 - width / 2, to_real nwidth - width]; yposv = [0, to_real nheight / 2 - height / 2, to_real nheight - height]; xp = left, position == 9 = xposv?((int) (position % 3)); yp = top, position == 9 = yposv?((int) (position / 3)); background = image_new nwidth nheight bands format coding type bgcolour.expr 0 0; } } } } } Image_perspective_item = Perspective_item; Image_rubber_item = class Menupullright "Ru_bber Sheet" "automatically warp images to superposition" { rubber_interp = Option "Interpolation" ["Nearest", "Bilinear"] 1; rubber_order = Option "Order" ["0", "1", "2", "3"] 1; rubber_wrap = Toggle "Wrap image edges" false; // a transform ... a matrix, plus the size of the image the // matrix was made for Transform matrix image_width image_height = class matrix { // scale a transform ... if it worked for a m by n image, make // it work for a (m * xfac) by (y * yfac) image rescale xfac yfac = Transform (Matrix (map2 (map2 multiply) matrix.value facs)) (image_width * xfac) (image_height * yfac) { facs = [ [xfac, yfac], [1, 1], [1, 1], [1 / xfac, 1 / yfac], [1 / xfac, 1 / yfac], [1 / xfac, 1 / yfac] ]; } } // yuk!!!! fix is_instanceof to not need absolute names is_Transform = is_instanceof "Image_transform_item.Image_rubber_item.Transform"; Find_item = class Menuaction "_Find" ("find a transform which will map sample image onto " ++ "reference") { action reference sample = class _trn { _vislevel = 3; // controls order = rubber_order; interp = rubber_interp; wrap = rubber_wrap; max_err = Expression "Maximum error" 0.3; max_iter = Expression "Maximum iterations" 10; // transform [sample', trn, err] = transform_search max_err max_iter order interp wrap sample reference; transformed_image = Image sample'; _trn = Transform trn reference.width reference.height; final_error = err; } } Apply_item = class Menuaction "_Apply" "apply a transform to an image" { action a b = class _result { _vislevel = 3; // controls interp = rubber_interp; wrap = rubber_wrap; _result = map_binary trans a b { trans a b = transform interp wrap t' i { // get the transform arg first [i, t] = sortc (const is_Transform) [a, b]; t' = t.rescale (i.width / t.image_width) (i.height / t.image_height); } } } } } sep1 = Menuseparator; Match_item = class Menuaction "_Linear Match" "rotate and scale one image to match another" { action x y = class _result { _vislevel = 3; // try to find an image ... for a group, get the first item find_image x = x, is_Image x = find_image x?0, is_list x = find_image x.value, is_class x && has_value x = error "unable to find image"; _a = find_image x; _b = find_image y; ap1 = Mark_relative _a 0.5 0.25; bp1 = Mark_relative _b 0.5 0.25; ap2 = Mark_relative _a 0.5 0.75; bp2 = Mark_relative _b 0.5 0.75; refine = Toggle "Refine selected tie-points" false; lock = Toggle "No resize" false; _result = map_binary process x y { process a b = Image b''' { _prefs = Workspaces.Preferences; window = _prefs.MOSAIC_WINDOW_SIZE; object = _prefs.MOSAIC_OBJECT_SIZE; a' = a.value; b' = b.value; b'' = clip2fmt a.format b'; // return p2 ... if lock is set, return a p2 a standard // distance along the vector joining p1 and p2 norm p1 p2 = Rect left' top' 0 0, lock = p2 { v = (p2.left - p1.left, p2.top - p1.top); // 100000 to give precision since we pass points as // ints to match n = 100000 * sign v; left' = p1.left + re n; top' = p1.top + im n; } ap2'' = norm ap1 ap2; bp2'' = norm bp1 bp2; b''' = im_match_linear_search a' b'' ap1.left ap1.top bp1.left bp1.top ap2''.left ap2''.top bp2''.left bp2''.top object window, // we can't search if lock is on refine && !lock = im_match_linear a' b'' ap1.left ap1.top bp1.left bp1.top ap2''.left ap2''.top bp2''.left bp2''.top; } } } } Image_perspective_match_item = Perspective_match_item; } Image_band_item = class Menupullright "_Band" "manipulate image bands" { // like extract_bands, but return [] for zero band image // makes compose a bit simpler exb b n x = [], to_real n == 0 = extract_bands b n x; Extract_item = class Menuaction "_Extract" "extract bands from image" { action x = class _result { _vislevel = 3; first = Expression "Extract from band" 0; number = Expression "Extract this many bands" 1; _result = map_unary (exb first number) x; } } Insert_item = class Menuaction "_Insert" "insert bands into image" { action x y = class _result { _vislevel = 3; first = Expression "Insert at position" 0; _result = map_binary process x y { process im1 im2 = exb 0 f im1 ++ im2 ++ exb f (b - f) im1 { f = to_real first; b = im1.bands; } } } } Delete_item = class Menuaction "_Delete" "delete bands from image" { action x = class _result { _vislevel = 3; first = Expression "Delete from band" 0; number = Expression "Delete this many bands" 1; _result = map_unary process x { process im = exb 0 f im ++ exb (f + n) (b - (f + n)) im { f = to_real first; n = to_real number; b = im.bands; } } } } Bandwise_item = Image_join_item.Bandwise_item; sep1 = Menuseparator; Bandand_item = class Menuaction "Bitwise Band AND" "bitwise AND of image bands" { action x = bandand x; } Bandor_item = class Menuaction "Bitwise Band OR" "bitwise OR of image bands" { action x = bandor x; } sep2 = Menuseparator; To_dimension_item = class Menuaction "To D_imension" "convert bands to width or height" { action x = class _result { _vislevel = 3; orientation = Option "Orientation" [ "Horizontal", "Vertical" ] 0; _result = map_unary process x { process im = foldl1 [join_lr, join_tb]?orientation (bandsplit im); } } } To_bands_item = class Menuaction "To B_ands" "turn width or height to bands" { action x = class _result { _vislevel = 3; orientation = Option "Orientation" [ "Horizontal", "Vertical" ] 0; _result = map_unary process x { process im = bandjoin (map extract_column [0 .. im.width - 1]), orientation == 0 = bandjoin (map extract_row [0 .. im.height - 1]) { extract_column n = extract_area n 0 1 im.height im; extract_row n = extract_area 0 n im.width 1 im; } } } } } Image_crop_item = class Menuaction "_Crop" "extract a rectangular area from an image" { action x = crop x [l, t, w, h] { fields = [ [has_left, get_left, 0], [has_top, get_top, 0], [has_width, get_width, 100], [has_height, get_height, 100] ]; [l, t, w, h] = map get_default fields { get_default line = get x, has x = default { [has, get, default] = line; } } } crop x geo = class _result { _vislevel = 3; l = Expression "Crop left" ((int) (geo?0 + geo?2 / 4)); t = Expression "Crop top" ((int) (geo?1 + geo?3 / 4)); w = Expression "Crop width" (max_pair 1 ((int) (geo?2 / 2))); h = Expression "Crop height" (max_pair 1 ((int) (geo?3 / 2))); _result = map_nary (list_5ary extract) [x, l.expr, t.expr, w.expr, h.expr] { extract im l t w h = extract_area left' top' width' height' im { width' = min_pair (to_real w) im.width; height' = min_pair (to_real h) im.height; left' = range 0 (to_real l) (im.width - width'); top' = range 0 (to_real t) (im.height - height'); } } } } Image_insert_item = class Menuaction "_Insert" "insert a small image into a large image" { action a b = insert_position, is_Group a || is_Group b = insert_area { insert_area = class _result { _check_args = [ [a, "a", check_Image], [b, "b", check_Image] ]; _vislevel = 3; // sort to get smallest first _pred x y = x.width * x.height < y.width * y.height; [_a', _b'] = sortc _pred [a, b]; place = Area _b' left top width height { // be careful in case b is smaller than a left = max_pair 0 ((_b'.width - _a'.width) / 2); top = max_pair 0 ((_b'.height - _a'.height) / 2); width = min_pair _a'.width _b'.width; height = min_pair _a'.height _b'.height; } _result = insert_noexpand place.left place.top (clip2fmt _b'.format a'') _b' { a'' = extract_area 0 0 place.width place.height _a'; } } insert_position = class _result { _vislevel = 3; position = Option "Position" [ "North-west", "North", "North-east", "West", "Centre", "East", "South-west", "South", "South-east", "Specify in pixels" ] 4; left = Expression "Pixels from left" 0; top = Expression "Pixels from top" 0; _result = map_binary insert a b { insert a b = insert_noexpand left top (clip2fmt b.format a) b, position == 9 = insert_noexpand xp yp (clip2fmt b.format a) b { xr = b.width - a.width; yr = b.height - a.height; xp = [0, xr / 2, xr]?((int) (position % 3)); yp = [0, yr / 2, yr]?((int) (position / 3)); } } } } } Image_select_item = Select_item; Image_draw_item = class Menupullright "_Draw" "draw lines, circles, rectangles, floods" { Line_item = class Menuaction "_Line" "draw line on image" { action x = class _result { _vislevel = 3; x1 = Expression "Start x" 0; y1 = Expression "Start y" 0; x2 = Expression "End x" 100; y2 = Expression "End y" 100; i = Expression "Ink" [0]; _result = map_unary line x { line im = draw_line x1 y1 x2 y2 i.expr im; } } } Rect_item = class Menuaction "_Rectangle" "draw rectangle on image" { action x = class _result { _vislevel = 3; rx = Expression "Left" 50; ry = Expression "Top" 50; rw = Expression "Width" 100; rh = Expression "Height" 100; f = Toggle "Fill" true; t = Scale "Line thickness" 1 50 3; i = Expression "Ink" [0]; _result = map_unary rect x { rect im = draw_rect_width rx ry rw rh f t i.expr im; } } } Circle_item = class Menuaction "_Circle" "draw circle on image" { action x = class _result { _vislevel = 3; cx = Expression "Centre x" 100; cy = Expression "Centre y" 100; r = Expression "Radius" 50; f = Toggle "Fill" true; i = Expression "Ink" [0]; _result = map_unary circle x { circle im = draw_circle cx cy r f i.expr im; } } } Flood_item = class Menuaction "_Flood" "flood bounded area of image" { action x = class _result { _vislevel = 3; sx = Expression "Start x" 100; sy = Expression "Start y" 100; e = Option "Flood while" [ "Not equal to ink", "Equal to start point" ] 0; // pick a default ink that won't flood, if we can i = Expression "Ink" default_ink { default_ink = [0], ! has_image x = pixel; pixel = map mean (bandsplit (extract_area sx sy 1 1 im)); im = get_image x; } _result = map_unary flood x { flood im = draw_flood sx sy i.expr im, e == 0 = draw_flood_blob sx sy i.expr im; } } } Draw_scalebar_item = class Menuaction "_Scale" "draw scale bar" { action x = class _result { _vislevel = 3; px = Expression "Left" 50; py = Expression "Top" 50; wid = Expression "Width" 100; thick = Scale "Line thickness" 1 50 3; text = String "Dimension text" "50μm"; font = Fontname "Use font" Workspaces.Preferences.PAINTBOX_FONT; pos = Option "Position Text" ["Above", "Below"] 1; vp = Option "Dimension by" [ "Inner Vertical Edge", "Centre of Vertical", "Outer Vertical Edge" ] 1; dpi = Expression "DPI" 100; ink = Colour "Lab" [50,0,0]; _result = map_unary process x { process im = blend (Image scale) ink' im { // make an ink compatible with the image ink' = colour_transform_to (get_type im) ink; x = to_real px; y = to_real py; w = to_real wid; d = to_real dpi; t = floor thick; bg = image_new (get_width im) (get_height im) (get_bands im) (get_format im) (get_coding im) (get_type im) 0 0 0; draw_block x y w t im = draw_rect_width x y w t true 1 [255] im; label = im_text text.value font.value w 1 d; lw = get_width label; lh = get_height label; ly = [y - lh - t, y + 2 * t]?pos; vx = [ [x - t, x + w], [x - t / 2, x + w - t / 2], [x, x + w - t] ]?vp; scale = (draw_block x y w t @ draw_block vx?0 (y - 2 * t) t (t * 5) @ draw_block vx?1 (y - 2 * t) t (t * 5) @ insert_noexpand (x + w / 2 - lw / 2) ly label) bg; } } } } } Image_join_item = class Menupullright "_Join" "join two or more images together" { Bandwise_item = class Menuaction "_Bandwise Join" "join two images bandwise" { action a b = join a b; } sep1 = Menuseparator; join_lr shim bg align a b = im2 { w = a.width + b.width + shim; h = max_pair a.height b.height; back = image_new w h a.bands a.format a.coding a.type bg 0 0; ya = [0, max_pair 0 ((b.height - a.height)/2), max_pair 0 (b.height - a.height)]; yb = [0, max_pair 0 ((a.height - b.height)/2), max_pair 0 (a.height - b.height)]; im1 = insert_noexpand 0 ya?align a back; im2 = insert_noexpand (a.width + shim) yb?align b im1; } join_tb shim bg align a b = im2 { w = max_pair a.width b.width; h = a.height + b.height + shim; back = image_new w h a.bands a.format a.coding a.type bg 0 0; xa = [0, max_pair 0 ((b.width - a.width)/2), max_pair 0 (b.width - a.width)]; xb = [0, max_pair 0 ((a.width - b.width)/2), max_pair 0 (a.width - b.width)]; im1 = insert_noexpand xa?align 0 a back; im2 = insert_noexpand xb?align (a.height + shim) b im1; } halign_names = ["Top", "Centre", "Bottom"]; valign_names = ["Left", "Centre", "Right"]; Left_right_item = class Menuaction "_Left to Right" "join two images left-right" { action a b = class _result { _vislevel = 3; shim = Scale "Spacing" 0 100 0; bg_colour = Expression "Background colour" 0; align = Option "Alignment" halign_names 1; _result = map_binary (join_lr shim.value bg_colour.expr align.value) a b; } } Top_bottom_item = class Menuaction "_Top to Bottom" "join two images top-bottom" { action a b = class _result { _vislevel = 3; shim = Scale "Spacing" 0 100 0; bg_colour = Expression "Background colour" 0; align = Option "Alignment" valign_names 1; _result = map_binary (join_tb shim.value bg_colour.expr align.value) a b; } } sep2 = Menuseparator; Array_item = class Menuaction "_Array" "join a list of lists of images into a single image" { action x = class _result { _vislevel = 3; hshim = Scale "Horizontal spacing" (-100) (100) 0; vshim = Scale "Vertical spacing" (-100) (100) 0; bg_colour = Expression "Background colour" 0; halign = Option "Horizontal alignment" valign_names 1; valign = Option "Vertical alignment" halign_names 1; // we can't use map_unary since chop-into-tiles returns a group of // groups and we want to be able to reassemble that // TODO: chop-into-tiles should return an array class which // displays as group but does not have the looping behaviour? _result = (image_set_origin 0 0 @ foldl1 (join_tb vshim.value bg_colour.expr halign.value) @ map (foldl1 (join_lr hshim.value bg_colour.expr valign.value))) (to_list (to_list x)); } } ArrayFL_item = class Menuaction "_Array from List" "join a list of images into a single image" { action x = class _result { _vislevel = 3; ncol = Number "Max. Number of Columns" 1; hshim = Scale "Horizontal spacing" (-100) (100) 0; vshim = Scale "Vertical spacing" (-100) (100) 0; bg_colour = Expression "Background colour" 0; halign = Option "Horizontal alignment" valign_names 1; valign = Option "Vertical alignment" halign_names 1; _l = split_lines ncol.value x.value, is_Group x = split_lines ncol.value x; _result = (image_set_origin 0 0 @ foldl1 (join_tb vshim.value bg_colour.expr halign.value) @ map (foldl1 (join_lr hshim.value bg_colour.expr valign.value))) (to_list (to_list _l)); } } } Image_tile_item = class Menupullright "Til_e" "tile an image across and down" { tile_widget default_type x = class _result { _vislevel = 3; across = Expression "Tiles across" 2; down = Expression "Tiles down" 2; repeat = Option "Tile type" ["Replicate", "Four-way mirror"] default_type; _result = map_unary process x { process image = tile across down image, repeat == 0 = tile across down image'' { image' = insert image.width 0 (fliplr image) image; image'' = insert 0 image.height (fliptb image') image'; } } } Replicate_item = class Menuaction "_Replicate" "replicate image across and down" { action x = tile_widget 0 x; } Fourway_item = class Menuaction "_Four-way Mirror" "four-way mirror across and down" { action x = tile_widget 1 x; } Chop_item = class Menuaction "_Chop Into Tiles" "slice an image into tiles" { action x = class _result { _vislevel = 3; tile_width = Expression "Tile width" 100; tile_height = Expression "Tile height" 100; hoverlap = Expression "Horizontal overlap" 0; voverlap = Expression "Vertical overlap" 0; _result = map_unary (Group @ map Group @ process) x { process x = imagearray_chop tile_width tile_height hoverlap voverlap x; } } } } #separator Pattern_images_item = class Menupullright "_Patterns" "make a variety of useful patterns" { Grey_item = class Menuaction "Grey _Ramp" "make a smooth grey ramp" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; orientation = Option "Orientation" [ "Horizontal", "Vertical" ] 0; foption = Option "Format" ["8 bit", "float"] 0; _result = Image im { gen = im_grey, foption == 0 = im_fgrey; w = to_real nwidth; h = to_real nheight; im = gen w h, orientation == 0 = rot90 (gen h w); } } } Xy_item = class Menuaction "_XY Image" "make a two band image whose pixel values are their coordinates" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; _result = Image (make_xy nwidth nheight); } } Gaussian_item = class Menuaction "Gaussian _Noise" "make an image of gaussian noise" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; mean = Scale "Mean" 0 255 128; deviation = Scale "Deviation" 0 128 50; _result = Image (im_gaussnoise (to_real nwidth) (to_real nheight) mean.value deviation.value); } } Fractal_item = class Menuaction "_Fractal" "make a fractal image" { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; dimension = Scale "Dimension" 2.001 2.999 2.001; _result = Image (im_fractsurf (to_real nsize) dimension.value); } } Checkerboard_item = class Menuaction "_Checkerboard" "make a checkerboard image" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; hpsize = Expression "Horizontal patch size" 8; vpsize = Expression "Vertical patch size" 8; hpoffset = Expression "Horizontal patch offset" 0; vpoffset = Expression "Vertical patch offset" 0; _result = Image (xstripes ^ ystripes) { pixels = make_xy nwidth nheight; xpixels = pixels?0 + to_real hpoffset; ypixels = pixels?1 + to_real vpoffset; make_stripe pix swidth = pix % (swidth * 2) >= swidth; xstripes = make_stripe xpixels (to_real hpsize); ystripes = make_stripe ypixels (to_real vpsize); } } } Grid_item = class Menuaction "Gri_d" "make a grid" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; hspace = Expression "Horizontal line spacing" 8; vspace = Expression "Vertical line spacing" 8; thick = Expression "Line thickness" 1; hoff = Expression "Horizontal grid offset" 4; voff = Expression "Vertical grid offset" 4; _result = Image (xstripes | ystripes) { pixels = make_xy nwidth nheight; xpixels = pixels?0 + to_real hoff; ypixels = pixels?1 + to_real voff; make_stripe pix swidth = pix % swidth < to_real thick; xstripes = make_stripe xpixels (to_real hspace); ystripes = make_stripe ypixels (to_real vspace); } } } Text_item = class Menuaction "_Text" "make a bitmap of some text" { action = class _result { _vislevel = 3; text = String "Text to paint" "Hello world!"; font = Fontname "Use font" Workspaces.Preferences.PAINTBOX_FONT; wrap = Expression "Wrap text at" 500; align = Option "Alignment" [ "Left", "Centre", "Right" ] 0; dpi = Expression "DPI" 300; _result = Image (im_text text.value font.value (to_real wrap) align.value (to_real dpi)); } } New_CIELAB_slice_item = class Menuaction "CIELAB _Slice" "make a slice through CIELAB space" { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; L = Scale "L value" 0 100 50; _result = Image (lab_slice (to_real nsize) L.value); } } sense_option = Option "Sense" [ "Pass", "Reject" ] 0; build fn size = (Image @ image_set_type Image_type.FOURIER @ rotquad @ fn) (im_create_fmask size size); New_ideal_item = class Menupullright "_Ideal Fourier Mask" "make various ideal Fourier filter masks" { High_low_item = class Menuaction "_High or Low Pass" ("make a mask image for a highpass/lowpass " ++ "ideal Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f sense.value fc.value 0 0 0 0; } } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" ("make a mask image for an ring pass/reject " ++ "ideal Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; rw = Scale "Ring width" 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f (sense.value + 6) fc.value rw.value 0 0 0; } } } Band_item = class Menuaction "_Band Pass or Band Reject" ("make a mask image for a band pass/reject " ++ "ideal Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fcx = Scale "Horizontal frequency cutoff" 0.01 0.99 0.5; fcy = Scale "Vertical frequency cutoff" 0.01 0.99 0.5; r = Scale "Radius" 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f (sense.value + 12) fcx.value fcy.value r.value 0 0; } } } } New_gaussian_item = class Menupullright "_Gaussian Fourier Mask" "make various Gaussian Fourier filter masks" { High_low_item = class Menuaction "_High or Low Pass" ("make a mask image for a highpass/lowpass " ++ "Gaussian Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f (sense.value + 4) fc.value ac.value 0 0 0; } } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" ("make a mask image for an ring pass/reject " ++ "Gaussian Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; rw = Scale "Ring width" 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f (sense.value + 10) fc.value rw.value ac.value 0 0; } } } Band_item = class Menuaction "_Band Pass or Band Reject" ("make a mask image for a band pass/reject " ++ "Gaussian Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fcx = Scale "Horizontal frequency cutoff" 0.01 0.99 0.5; fcy = Scale "Vertical frequency cutoff" 0.01 0.99 0.5; r = Scale "Radius" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f (sense.value + 16) fcx.value fcy.value r.value ac.value 0; } } } } New_butterworth_item = class Menupullright "_Butterworth Fourier Mask" "make various Butterworth Fourier filter masks" { High_low_item = class Menuaction "_High or Low Pass" ("make a mask image for a highpass/lowpass " ++ "Butterworth Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; order = Scale "Order" 1 10 2; _result = build param (to_real nsize) { param f = f (sense.value + 2) order.value fc.value ac.value 0 0; } } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" ("make a mask image for an ring pass/reject " ++ "Butterworth Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; rw = Scale "Ring width" 0.01 0.99 0.5; order = Scale "Order" 1 10 2; _result = build param (to_real nsize) { param f = f (sense.value + 8) order.value fc.value rw.value ac.value 0; } } } Band_item = class Menuaction "_Band Pass or Band Reject" ("make a mask image for a band pass/reject " ++ "Butterworth Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fcx = Scale "Horizontal frequency cutoff" 0.01 0.99 0.5; fcy = Scale "Vertical frequency cutoff" 0.01 0.99 0.5; r = Scale "Radius" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; order = Scale "Order" 1 10 2; _result = build param (to_real nsize) { param f = f (sense.value + 14) order.value fcx.value fcy.value r.value ac.value; } } } } } Test_images_item = class Menupullright "Test I_mages" "make a variety of test images" { Eye_item = class Menuaction "_Spatial Response" "image for testing the eye's spatial response" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; factor = Scale "Factor" 0.001 1 0.2; _result = Image (im_eye (to_real nwidth) (to_real nheight) factor.value); } } Zone_plate = class Menuaction "_Zone Plate" "make a zone plate" { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; _result = Image (im_zone (to_real nsize)); } } Frequency_test_chart_item = class Menuaction "_Frequency Testchart" "make a black/white frequency test pattern" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; sheight = Expression "Strip height (pixels)" 10; waves = Expression "Wavelengths" [64, 32, 16, 8, 4, 2]; _result = imagearray_assemble 0 0 (transpose [strips]) { freq_slice wave = Image (sin (grey / wave) > 0); strips = map freq_slice waves.expr; grey = im_fgrey (to_real nwidth) (to_real sheight) * 360 * (to_real nwidth); } } } CRT_test_chart_item = class Menuaction "CRT _Phosphor Chart" "make an image for measuring phosphor colours" { action = class _result { _vislevel = 3; brightness = Scale "Brightness" 0 255 200; psize = Expression "Patch size (pixels)" 32; _result = Image (imagearray_assemble 0 0 [[green, red], [blue, white]]) { black = image_new (to_real psize) (to_real psize) 1 Image_format.FLOAT Image_coding.NOCODING Image_type.B_W 0 0 0; notblack = black + brightness; green = black ++ notblack ++ black; red = notblack ++ black ++ black; blue = black ++ black ++ notblack; white = notblack ++ notblack ++ notblack; } } } Greyscale_chart_item = class Menuaction "_Greyscale" "make a greyscale" { action = class _result { _vislevel = 3; pwidth = Expression "Patch width" 8; pheight = Expression "Patch height" 8; npatches = Expression "Number of patches" 16; _result = Image (image_set_type Image_type.B_W (clip2fmt Image_format.UCHAR wedge)) { wedge = 255 / (to_real npatches - 1) * (int) (strip?0 / to_real pwidth) { strip = make_xy (to_real pwidth * to_real npatches) pheight; } } } } CMYK_test_chart_item = class Menuaction "_CMYK Wedges" "make a set of CMYK wedges" { action = class _result { _vislevel = 3; pwidth = Expression "Patch width" 8; pheight = Expression "Patch height" 8; npatches = Expression "Number of patches" 16; _result = Image (image_set_type Image_type.CMYK (clip2fmt Image_format.UCHAR strips)) { wedge = 255 / (to_real npatches - 1) * (int) (strip?0 / to_real pwidth) { strip = make_xy (to_real pwidth * to_real npatches) pheight; } black = wedge * 0; C = wedge ++ black ++ black ++ black; M = black ++ wedge ++ black ++ black; Y = black ++ black ++ wedge ++ black; K = black ++ black ++ black ++ wedge; strips = imagearray_assemble 0 0 [[C],[M],[Y],[K]]; } } } Colour_atlas_item = class Menuaction "_Colour Atlas" "make a grid of patches grouped around a colour" { action = class _result { _vislevel = 3; start = Colour_picker "Lab" [50,0,0]; nstep = Expression "Number of steps" 9; ssize = Expression "Step size" 10; psize = Expression "Patch size" 32; sepsize = Expression "Separator size" 4; _result = colour_transform_to (get_type start) blocks''' { size = (to_real nstep * 2 + 1) * to_real psize - to_real sepsize; xy = make_xy size size; xy_grid = (xy % to_real psize) < (to_real psize - to_real sepsize); grid = xy_grid?0 & xy_grid?1; blocks = (int) (to_real ssize * ((int) (xy / to_real psize))); lab_start = colour_transform_to Image_type.LAB start; blocks' = blocks - to_real nstep * to_real ssize + Vector (tl lab_start.value); blocks'' = hd lab_start.value ++ Image blocks'; blocks''' = image_set_type Image_type.LAB blocks'', Image grid = 0; } } } } nip2-8.7.0/share/nip2/compat/7.40/_list.def0000644000175000017500000002310313224651032014733 00000000000000/* any l: or all the elements of list l together * * any (map (equal 0) list) == true, if any element of list is zero. * any :: [bool] -> bool */ any = foldr logical_or false; /* all l: and all the elements of list l together * * all (map (==0) list) == true, if every element of list is zero. * all :: [bool] -> bool */ all = foldr logical_and true; /* concat l: join a list of lists together * * concat ["abc","def"] == "abcdef". * concat :: [[*]] -> [*] */ concat l = foldr join [] l; /* delete eq x l: delete the first x from l * * delete equal 'b' "abcdb" == "acdb" * delete :: (* -> bool) -> * -> [*] -> [*] */ delete eq a l = [], l == [] = y, eq a b = b : delete eq a y { b:y = l; } /* difference eq a b: delete b from a * * difference equal "asdf" "ad" == "sf" * difference :: (* -> bool) -> [*] -> [*] -> [*] */ difference = foldl @ converse @ delete; /* drop n l: drop the first n elements from list l * * drop 3 "abcd" == "d" * drop :: num -> [*] -> [*] */ drop n l = l, n <= 0 || l == [] = drop (n - 1) (tl l); /* dropwhile fn l: drop while fn is true * * dropwhile is_digit "1234pigs" == "pigs" * dropwhile :: (* -> bool) -> [*] -> [*] */ dropwhile fn l = [], l == [] = dropwhile fn x, fn a = l { a:x = l; } /* extract n l: extract element at index n from list l */ extract = converse subscript; /* filter fn l: return all elements of l for which predicate fn holds * * filter is_digit "1one2two3three" = "123" * filter :: (* -> bool) -> [*] -> [*] */ filter fn l = foldr addif [] l { addif x l = x : l, fn x; = l; } /* flatten x: flatten a list of lists of things into a simple list * * flatten :: [[*]] -> [*] */ flatten x = foldr flat [] x, is_list x = x { flat x sofar = foldr flat sofar x, is_list x = x : sofar; } /* foldl fn st l: fold list l from the left with function fn and start st * * Start from the left hand end of the list (unlike foldr, see below). * foldl is less useful (and much slower). * * foldl fn start [a,b .. z] = ((((st fn a) fn b) ..) fn z) * foldl :: (* -> ** -> *) -> * -> [**] -> * */ foldl fn st l = st, l == [] = foldl fn (fn st x) xs { x:xs = l; } /* foldl1 fn l: like foldl, but use the 1st element as the start value * * foldl1 fn [1,2,3] == ((1 fn 2) fn 3) * foldl1 :: (* -> * -> *) -> [*] -> * */ foldl1 fn l = [], l == [] = foldl fn x xs { x:xs = l; } /* foldr fn st l: fold list l from the right with function fn and start st * * foldr fn st [a,b..z] = (a fn (b fn (.. (z fn st)))) * foldr :: (* -> ** -> **) -> ** -> [*] -> ** */ foldr fn st l = st, l == [] = fn x (foldr fn st xs) { x:xs = l; } /* foldr1 fn l: like foldr, but use the last element as the start value * * foldr1 fn [1,2,3,4] == (1 fn (2 fn (3 fn 4))) * foldr1 :: (* -> * -> *) -> [*] -> * */ foldr1 fn l = [], l == [] = x, xs == [] = fn x (foldr1 fn xs) { x:xs = l; } /* Search a list for an element, returning its index (or -1) * * index (equal 12) [13,12,11] == 1 * index :: (* -> bool) -> [*] -> real */ index fn list = search list 0 { search l n = -1, l == [] = n, fn x = search xs (n + 1) { x:xs = l; } } /* init l: remove last element of list l * * The dual of tl. * init [1,2,3] == [1,2] * init :: [*] -> [*] */ init l = error "init of []", l == []; = [], tl l == []; = x : init xs { x:xs = l; } /* iterate f x: repeatedly apply f to x * * return the infinite list [x, f x, f (f x), ..]. * iterate (multiply 2) 1 == [1, 2, 4, 8, 16, 32, 64 ... ] * iterate :: (* -> *) -> * -> [*] */ iterate f x = x : iterate f (f x); /* join_sep sep l: join a list with a separator * * join_sep ", " (map print [1 .. 4]) == "1, 2, 3, 4" * join_sep :: [*] -> [[*]] -> [*] */ join_sep sep l = foldl1 fn l { fn a b = a ++ sep ++ b; } /* last l: return the last element of list l * * The dual of hd. last [1,2,3] == 3 * last :: [*] -> [*] */ last l = error "last of []", l == [] = x, xs == [] = last xs { x:xs = l; } /* len l: length of list l * (see also is_list_len and friends in predicate.def) * * len :: [*] -> num */ len l = 0, l == [] = 1 + len (tl l); /* limit l: return the first element of l which is equal to its predecessor * * useful for checking for convergence * limit :: [*] -> * */ limit l = error "incorrect use of limit", l == [] || tl l == [] || tl (tl l) == [] = a, a == b = limit (b : x) { a:b:x = l; } /* Turn a function of n args into a function which takes a single arg of an * n-element list. */ list_1ary fn x = fn x?0; list_2ary fn x = fn x?0 x?1; list_3ary fn x = fn x?0 x?1 x?2; list_4ary fn x = fn x?0 x?1 x?2 x?3; list_5ary fn x = fn x?0 x?1 x?2 x?3 x?4; list_6ary fn x = fn x?0 x?1 x?2 x?3 x?4 x?5; list_7ary fn x = fn x?0 x?1 x?2 x?3 x?4 x?5 x?6; /* map fn l: map function fn over list l * * map :: (* -> **) -> [*] -> [**] */ map f l = [], l == []; = f (hd l) : map f (tl l); /* map2 fn l1 l2: map two lists together with fn * * map2 :: (* -> ** -> ***) -> [*] -> [**] -> [***] */ map2 fn l1 l2 = map (list_2ary fn) (zip2 l1 l2); /* map3 fn l1 l2 l3: map three lists together with fn * * map3 :: (* -> ** -> *** -> ****) -> [*] -> [**] -> [***] -> [****] */ map3 fn l1 l2 l3 = map (list_3ary fn) (zip3 l1 l2 l3); /* member l x: true if x is a member of list l * * is_digit == member "0123456789" * member :: [*] -> * -> bool */ member l x = any (map (equal x) l); /* merge b l r: merge two lists based on a bool list * * merge :: [bool] -> [*] -> [*] -> [*] */ merge p l r = [], p == [] || l == [] || r == [] = a : merge z x y, c = b : merge z x y { a:x = l; b:y = r; c:z = p; } /* mkset eq l: remove duplicates from list l using equality function * * mkset :: (* -> bool) -> [*] -> [*] */ mkset eq l = [], l == [] = a : filter (not @ eq a) (mkset eq x) { a:x = l; } /* postfix l r: add r to the end of list l * * The dual of ':'. * postfix :: [*] -> ** -> [*,**] */ postfix l r = l ++ [r]; /* repeat x: make an infinite list of xes * * repeat :: * -> [*] */ repeat x = map (const x) [1..]; /* replicate n x: make n copies of x in a list * * replicate :: num -> * -> [*] */ replicate n x = take n (repeat x); /* reverse l: reverse list l * * reverse :: [*] -> [*] */ reverse l = foldl (converse cons) [] l; /* scanl fn st l: apply (foldl fn r) to every initial segment of a list * * scanl add 0 [1,2,3] == [1,3,6] * scanl :: (* -> ** -> *) -> * -> [**] -> [*] */ scanl fn st l = st, l == [] = st' : scanl fn st' xs { x:xs = l; st' = fn st x; } /* sort l: sort list l into ascending order * * sort :: [*] -> [*] */ sort l = sortc less_equal l; /* sortc comp l: sort list l into order using a comparision function * * Uses merge sort (n log n behaviour) * sortc :: (* -> * -> bool) -> [*] -> [*] */ sortc comp l = l, n <= 1 = merge (sortc comp (take n2 l)) (sortc comp (drop n2 l)) { n = len l; n2 = (int) (n / 2); /* merge l1 l2: merge sorted lists l1 and l2 to make a single * sorted list */ merge l1 l2 = l2, l1 == [] = l1, l2 == [] = a : merge x (b : y), comp a b = b : merge (a : x) y { a:x = l1; b:y = l2; } } /* sortpl pl l: sort by a list of predicates * * sortpl :: (* -> bool) -> [*] -> [*] */ sortpl pl l = sortc (test pl) l { /* Comparision function ... put true before false, if equal move on to * the next predicate. */ test pl a b = true, pl == [] = ta, ta != tb = test (tl pl) a b { ta = pl?0 a; tb = pl?0 b; } } /* sortr l: sort list l into descending order * * sortr :: [*] -> [*] */ sortr l = sortc more l; /* split fn l: break a list into sections separated by many fn * * split is_space " hello world " == ["hello", "world"] * split is_space " " == [] * split :: (* -> bool) -> [*] -> [[*]] */ split fn l = [], l == [] || l' == [] = head : split fn tail { nfn = not @ fn; l' = dropwhile fn l; head = takewhile nfn l'; tail = dropwhile nfn l'; } /* splits fn l: break a list into sections separated by a single fn * * split (equal ',') ",,1" == ["", "", "1"] * split :: (* -> bool) -> [*] -> [[*]] */ splits fn l = [], l == [] = head : splits fn tail { fn' = not @ fn; dropif x = [], x == [] = tl x; head = takewhile fn' l; tail = dropif (dropwhile fn' l); } /* splitpl fnl l: split a list up with a list of predicates * * splitpl [is_digit, is_letter, is_digit] "123cat" == ["123", "cat", []] * splitpl :: [* -> bool] -> [*] -> [[*]] */ splitpl fnl l = l, fnl == [] = head : splitpl (tl fnl) tail { head = takewhile (hd fnl) l; tail = dropwhile (hd fnl) l; } /* split_lines n l: split a list into equal length lines * * split_lines 4 "1234567" == ["1234", "567"] * splitl :: int -> [*] -> [[*]] */ split_lines n l = [], l == [] = take n l : split_lines n (drop n l); /* take n l: take the first n elements from list l * take :: num -> [*] -> [*] */ take n l = [], n <= 0 = [], l == [] = hd l : take (n-1) (tl l); /* takewhile fn l: take from the front of a list while predicate fn holds * * takewhile is_digit "123onetwothree" == "123" * takewhile :: (* -> bool) -> [*] -> [*] */ takewhile fn l = [], l == [] = hd l : takewhile fn (tl l), fn (hd l) = []; /* zip2 l1 l2: zip two lists together * * zip2 [1,2] ['a', 'b', 'c'] == [[1,'a'],[2,'b']] * zip2 :: [*] -> [**] -> [[*,**]] */ zip2 l1 l2 = [], l1 == [] || l2 == [] = [hd l1, hd l2] : zip2 (tl l1) (tl l2); /* zip3 l1 l2 l3: zip three lists together * * zip3 [1,2] ['a', 'b', 'c'] [true] == [[1,'a',true]] * zip3 :: [*] -> [**] ->[***] -> [[*,**,***]] */ zip3 l1 l2 l3 = [], l1 == [] || l2 == [] || l3 == [] = [hd l1, hd l2, hd l3] : zip3 (tl l1) (tl l2) (tl l3); nip2-8.7.0/share/nip2/compat/7.40/_magick.def0000644000175000017500000005416213224651032015224 00000000000000/* ImageMagick operations edited by Alan Gibson (aka "snibgo"; snibgo at earthling dot net). 1-Apr-2014 Minor corrections to Geometry_widget and Alpha. Added loads of widgets and Menuactions. Not fully tested. 5-Apr-2014 Many more menu actions. Reorganised Magick menu. 10-Apr-2014 Many more menu actions. 11-Apr-2014 jcupitt Split to separate _magick.def Add 0-ary and 2-ary system Put utility funcs into a Magick class 11-Apr-2014 snibgo Added VirtualPixelBack for cases where background is only relevant when VP=Background 17-Apr-2014 snibgo Many small changes. 2-May-2014 jcupitt Added Magick.version 30-June-2014 Put single-quotes around command exe to help win 1-July-2014 Automatically fall back to gm if we can't find convert 17-July-2014 better GM support Last update: 17-July-2014. For details of ImageMagick operations, see http://www.imagemagick.org/script/command-line-options.php etc. */ /* Put these in a class to avoid filling the main namespace with IM stuff. */ Magick = class { // turn $PATH into [["comp1", "comp2"], ["comp1", "comp2"] ..] system_search_path = map path_parse (split (equal path_sep) (expand "$PATH")) { path_sep = ':', expand "$SEP" == "/" = ';'; } // the first name[.exe] on $PATH, or "" search_for name = hits?0, hits != [] = "" { exe_name = name ++ expand "$EXEEXT"; form_path p = path_absolute (p ++ [exe_name]); paths = map form_path system_search_path; hits = dropwhile (equal []) (map search paths); } // first gm on path, or "" gm_path = search_for "gm"; // first convert on $PATH, or "" // we check for the convert we ship first convert_path = vips_convert, vips_convert != "" = search_for "convert" { // the convert we ship with the vips binary on some platforms, or "" vips_convert = search (path_absolute convert) { vipshome = path_parse (expand "$VIPSHOME"); convert = vipshome ++ ["bin", "convert" ++ expand "$EXEEXT"]; } } use_gm_pref = Workspaces.Preferences.USE_GRAPHICSMAGICK; // Are we in GM or IM mode? use_gm = true, use_gm_pref && gm_path != "" = false, !use_gm_pref && convert_path != "" = false, convert_path != "" = true, gm_path != "" = error "neither IM nor GM executable found"; command_path = gm_path, use_gm = convert_path; // try to get the version as eg. [6, 7, 7, 10] // GM versions are smaller, typically [1, 3, 18] version = map parse_int (split (member ".-") version_string) { [output] = vips_call "system" ["'" ++ command_path ++ "' -version"] [$log=>true]; version_string = (split (equal ' ') output)?1, use_gm = (split (equal ' ') output)?2; } // make a command-line ... args is a [str] we join with spaces command args = "'" ++ command_path ++ "' " ++ join_sep " " args' { args' = ["convert"] ++ args, use_gm = args; } // capabilities ... different versions support different features, we // turn features on and off based on these // would probably be better to test for caps somehow has_intensity = false, use_gm = version?0 > 6 || version?1 > 7; has_channel = false, use_gm = version?0 > 6 || version?1 > 7; system0 cmd = system_image0 cmd; system cmd x = map_unary (system_image cmd) x; system2 cmd x y = map_binary (system_image2 cmd) x y; system3 cmd x y z = map_trinary (system_image3 cmd) x y z; radius_widget = Scale "Radius" 0 100 10; sigma_widget = Scale "Sigma" 0.1 10 1; angle_widget = Scale "Angle (degrees)" (-360) 360 0; text_widget = String "Text to draw" "AaBbCcDdEe"; gamma_widget = Scale "Gamma" 0 10 1; colors_widget = Scale "Colors" 1 10 3; resize_widget = Scale "Resize (percent)" 0 500 100; fuzz_widget = Scale "Fuzz (percent)" 0 100 0; blur_rad_widget = Scale "Radius (0=auto)" 0 100 0; // a colour with no enclosing quotes ... use this if we know there are // some quotes at an outer level print_colour_nq triple = concat ["#", concat (map fmt triple)] { fmt x = reverse (take 2 (reverse (print_base 16 (x + 256)))); } // we need the quotes because # is the comment character in *nix print_colour triple = "\"" ++ print_colour_nq triple ++ "\""; Foreground triple = class Colour "sRGB" triple { _flag = "-fill " ++ print_colour triple; Colour_edit space triple = this.Foreground triple; } foreground_widget = Foreground [0, 0, 0]; GeneralCol triple = class Colour "sRGB" triple { _flag = print_colour_nq triple; Colour_edit space triple = this.GeneralCol triple; } generalcol_widget = GeneralCol [0, 0, 0]; Background triple = class Colour "sRGB" triple { isNone = Toggle "None (transparent black)" false; _flag = "-background " ++ if isNone then "None" else print_colour triple; Colour_edit space triple = this.Background triple; } background_widget = Background [255, 255, 255]; Bordercol triple = class Colour "sRGB" triple { _flag = "-bordercolor " ++ print_colour triple; Colour_edit space triple = this.Bordercol triple; } bordercol_widget = Bordercol [0, 0, 0]; Mattecol triple = class Colour "sRGB" triple { _flag = "-mattecolor " ++ print_colour triple; Colour_edit space triple = this.Mattecol triple; } mattecol_widget = Mattecol [189, 189, 189]; // FIXME: Undercolour, like many others, can have alpha channel. // How does user input this? With a slider? Undercol triple = class Colour "sRGB" triple { isNone = Toggle "None (transparent black)" true; _flag = if isNone then "" else ("-undercolor " ++ print_colour triple); Colour_edit space triple = this.Undercol triple; } undercol_widget = Undercol [0, 0, 0]; changeCol_widget = class { _vislevel = 3; colour = GeneralCol [0, 0, 0]; fuzz = fuzz_widget; nonMatch = Toggle "change non-matching colours" false; } Alpha alpha = class Option_string "Alpha" [ "On", "Off", "Set", "Opaque", "Transparent", "Extract", "Copy", "Shape", "Remove", "Background" ] alpha { _flag = "-alpha " ++ alpha; Option_edit caption labels value = this.Alpha labels?value; } alpha_widget = Alpha "On"; Antialias value = class Toggle "Antialias" value { _flag = "-antialias", value = "+antialias"; Toggle_edit caption value = this.Antialias value; } antialias_widget = Antialias true; Builtin builtin = class Option_string "Builtin" [ // See http://www.imagemagick.org/script/formats.php "rose:", "logo:", "wizard:", "granite:", "netscape:" ] builtin { _flag = builtin; Option_edit caption labels value = this.Builtin labels?value; } builtin_widget = Builtin "rose:"; channels_widget = class { // FIXME? Can we grey-out alpha when we have no alpha channel, // show CMY(K) instead of RGB(K) etc? // Yes, perhaps we can create different widgets for RGB, RGBA, CMY, CMYK, CMYA, CMYKA. ChanR valueR = class Toggle "Red" valueR { _flag = "R", valueR = ""; Toggle_edit caption valueR = this.ChanR valueR; } channelR = ChanR true; ChanG valueG = class Toggle "Green" valueG { _flag = "G", valueG = ""; Toggle_edit caption valueG = this.ChanG valueG; } channelG = ChanG true; ChanB valueB = class Toggle "Blue" valueB { _flag = "B", valueB = ""; Toggle_edit caption valueB = this.ChanB valueB; } channelB = ChanB true; ChanK valueK = class Toggle "Black" valueK { _flag = "K", valueK = ""; Toggle_edit caption valueK = this.ChanK valueK; } channelK = ChanK true; ChanA valueA = class Toggle "Alpha" valueA { _flag = "A", valueA = ""; Toggle_edit caption valueA = this.ChanA valueA; } channelA = ChanA false; ChanSy valueSy = class Toggle "Sync" valueSy { _flag = ",sync", valueSy = ""; Toggle_edit caption valueSy = this.ChanSy valueSy; } channelSy = ChanSy true; _rgbka = concat [channelR._flag, channelG._flag, channelB._flag, channelK._flag, channelA._flag ]; _flag = "", _rgbka == "" || !has_channel = concat [ "-channel ", _rgbka, channelSy._flag ]; } ch_widget = channels_widget; Colorspace colsp = class Option_string "Colorspace" [ "CIELab", "CMY", "CMYK", "Gray", "HCL", "HCLp", "HSB", "HSI", "HSL", "HSV", "HWB", "Lab", "LCH", "LCHab", "LCHuv", "LMS", "Log", "Luv", "OHTA", "Rec601Luma", "Rec601YCbCr", "Rec709Luma", "Rec709YCbCr", "RGB", "scRGB", "sRGB", "Transparent", "XYZ", "YCbCr", "YDbDr", "YCC", "YIQ", "YPbPr", "YUV" ] colsp { _flag = colsp; Option_edit caption labels value = this.Colorspace labels?value; } colorspace_widget = Colorspace "sRGB"; Compose comp = class Option_string "Compose method" [ "Atop", "Blend", "Blur", "Bumpmap", "ChangeMask", "Clear", "ColorBurn", "ColorDodge", "Colorize", "CopyBlack", "CopyBlue", "CopyCyan", "CopyGreen", "Copy", "CopyMagenta", "CopyOpacity", "CopyRed", "CopyYellow", "Darken", "DarkenIntensity", "DivideDst", "DivideSrc", "Dst", "Difference", "Displace", "Dissolve", "Distort", "DstAtop", "DstIn", "DstOut", "DstOver", "Exclusion", "HardLight", "Hue", "In", "Lighten", "LightenIntensity", "LinearBurn", "LinearDodge", "LinearLight", "Luminize", "Mathematics", "MinusDst", "MinusSrc", "Modulate", "ModulusAdd", "ModulusSubtract", "Multiply", "None", "Out", "Overlay", "Over", "PegtopLight", "PinLight", "Plus", "Replace", "Saturate", "Screen", "SoftLight", "Src", "SrcAtop", "SrcIn", "SrcOut", "SrcOver", "VividLight", "Xor" ] comp { _flag = "-compose " ++ comp; Option_edit caption labels value = this.Compose labels?value; } compose_widget = Compose "Over"; // FIXME: Some compose mehods (Displace, Distort, Mathematics) need a string. // FIXME: we could use a class that does both -compose and -intensity, for methods LightenIntensity, DarkenIntensity, CopyOpacity, CopyBlack coordinate_widget = class { _vislevel = 3; x = Expression "X" 0; y = Expression "Y" 0; _flag = concat [print x.expr, ",", print y.expr]; }; Distort distort = class Option_string "Distort" [ "Affine", "AffineProjection", "ScaleRotateTranslate", "SRT", "Perspective", "PerspectiveProjection", "BilinearForward", "BilinearReverse", "Polynomial", "Arc", "Polar", "DePolar", "Barrel", "BarrelInverse", "Shepards", "Resize" ] distort { _flag = distort; Option_edit caption labels value = this.Distort labels?value; } distort_widget = Distort "SRT"; Dither dither = class Option_string "Dither" [ "None", "FloydSteinberg", "Riemersma" ] dither { _flag = "-dither " ++ dither; Option_edit caption labels value = this.Dither labels?value; } dither_widget = Dither "FloydSteinberg"; Evaluate eval = class Option_string "Evaluate operation" [ "Abs", "Add", "AddModulus", "And", "Cos", "Cosine", "Divide", "Exp", "Exponential", "GaussianNoise", "ImpulseNoise", "LaplacianNoise", "LeftShift", "Log", "Max", "Mean", "Median", "Min", "MultiplicativeNoise", "Multiply", "Or", "PoissonNoise", "Pow", "RightShift", "Set", "Sin", "Sine", "Subtract", "Sum", "Threshold", "ThresholdBlack", "ThresholdWhite", "UniformNoise", "Xor" ] eval { _flag = "-evaluate " ++ eval; Option_edit caption labels value = this.Evaluate labels?value; } evaluate_widget = Evaluate "Add"; Filter filt = class Option_string "Filter" [ "default", "Bartlett", "Blackman", "Bohman", "Box", "Catrom", "Cosine", "Cubic", "Gaussian", "Hamming", "Hann", "Hermite", "Jinc", "Kaiser", "Lagrange", "Lanczos", "Lanczos2", "Lanczos2Sharp", "LanczosRadius", "LanczosSharp", "Mitchell", "Parzen", "Point", "Quadratic", "Robidoux", "RobidouxSharp", "Sinc", "SincFast", "Spline", "Triangle", "Welch" ] filt { _flag = if filt == "default" then "" else "-filter " ++ filt; Option_edit caption labels value = this.Filter labels?value; } filter_widget = Filter "default"; Function func = class Option_string "Function" [ "Polynomial", "Sinusoid", "Arcsin", "Arctan" ] func { _flag = func; Option_edit caption labels value = this.Function labels?value; } function_widget = Function "Polynomial"; // "Polynomial (a[n], a[n-1], ... a[1], a[0])", // "Sinusoid (freq, phase, amp, bias)", // "Arcsin (width, centre, range, bias)", // "Arctan (slope, centre, range, bias)" Gravity gravity = class Option_string "Gravity" [ "None", "Center", "East", "Forget", "NorthEast", "North", "NorthWest", "SouthEast", "South", "SouthWest", "West", "Static" ] gravity { _flag = "-gravity " ++ gravity; Option_edit caption labels value = this.Gravity labels?value; } gravity_widget = Gravity "Center"; ImageType imagetype = class Option_string "Image type" [ "Bilevel", "ColorSeparation", "ColorSeparationAlpha", "ColorSeparationMatte", "Grayscale", "GrayscaleAlpha", "GrayscaleMatte", "Optimize", "Palette", "PaletteBilevelAlpha", "PaletteBilevelMatte", "PaletteAlpha", "PaletteMatte", "TrueColorAlpha", "TrueColorMatte", "TrueColor" ] imagetype { _flag = "-type " ++ imagetype; Option_edit caption labels value = this.ImageType labels?value; } imagetype_widget = ImageType "TrueColor"; Intensity intensity = class Option_string "Intensity (gray conversion)" [ "Average", "Brightness", "Lightness", "MS", "Rec601Luma", "Rec601Luminance", "Rec709Luma", "Rec709Luminance", "RMS" ] intensity { _flag = "-intensity " ++ intensity, has_intensity = ""; Option_edit caption labels value = this.Intensity labels?value; } intensity_widget = Intensity "Rec709Luminance"; Interpolate interp = class Option_string "Interpolate" [ "default", "Average", "Average4", "Average9", "Average16", "Background", "Bilinear", "Blend", "Integer", "Mesh", "Nearest", "NearestNeighbor", "Spline" ] interp { _flag = if interp == "default" then "" else "-interpolate " ++ interp; Option_edit caption labels value = this.Interpolate labels?value; } interpolate_widget = Interpolate "default"; Kernel kernel = class Option_string "Kernel" [ "Unity", "Gaussian", "DoG", "LoG", "Blur", "Comet", "Binomial", "Laplacian", "Sobel", "FreiChen", "Roberts", "Prewitt", "Compass", "Kirsch", "Diamond", "Square", "Rectangle", "Disk", "Octagon", "Plus", "Cross", "Ring", "Peaks", "Edges", "Corners", "Diagonals", "LineEnds", "LineJunctions", "Ridges", "ConvexHull", "ThinSe", "Skeleton", "Chebyshev", "Manhattan", "Octagonal", "Euclidean" // FIXME: custom kernel ] kernel { _flag = kernel; Option_edit caption labels value = this.Kernel labels?value; } kernel_widget = Kernel "Unity"; ModColSp msp = class Option_string "modulate colorspace" [ "HCL", "HCLp", "HSB", "HSI", "HSL", "HSV", "HWB", "LCH" ] msp { _flag = "-set option:modulate:colorspace " ++ msp; Option_edit caption labels value = this.ModColSp labels?value; } ModColSp_widget = ModColSp "HSL"; MorphMeth morph = class Option_string "Method" [ "Correlate", "Convolve", "Dilate", "Erode", "Close", "Open", "DilateIntensity", "ErodeIntensity", "CloseIntensity", "OpenIntensity", "Smooth", "EdgeOut", "EdgeIn", "Edge", "TopHat", "BottomHat", "HitAndMiss", "Thinning", "Thicken", "Distance", "IterativeDistance" ] morph { _flag = morph; Option_edit caption labels value = this.MorphMeth labels?value; } morphmeth_widget = MorphMeth "Dilate"; Noise noise = class Option_string "Noise" [ "Gaussian", "Impulse", "Laplacian", "Multiplicative", "Poisson", "Random", "Uniform" ] noise { _flag = "+noise " ++ noise; Option_edit caption labels value = this.Noise labels?value; } noise_widget = Noise "Gaussian"; Pattern pattern = class Option_string "Noise" [ // See http://www.imagemagick.org/script/formats.php "bricks", "checkerboard", "circles", "crosshatch", "crosshatch30", "crosshatch45", "gray0", "gray5", "gray10", "gray15", "gray20", "gray25", "gray30", "gray35", "gray40", "gray45", "gray50", "gray55", "gray60", "gray65", "gray70", "gray75", "gray80", "gray85", "gray90", "gray95", "gray100", "hexagons", "horizontal", "horizontal2", "horizontal3", "horizontalsaw", "hs_bdiagonal", "hs_cross", "hs_diagcross", "hs_fdiagonal", "hs_horizontal", "hs_vertical", "left30", "left45", "leftshingle", "octagons", "right30", "right45", "rightshingle", "smallfishscales", "vertical", "vertical2", "vertical3", "verticalbricks", "verticalleftshingle", "verticalrightshingle", "verticalsaw" ] pattern { _flag = "pattern:" ++ pattern; Option_edit caption labels value = this.Pattern labels?value; } pattern_widget = Pattern "bricks"; ResizeType resizet = class Option_string "Resize type" [ "resize", "scale", "sample", "adaptive-resize" ] resizet { _flag = resizet; Option_edit caption labels value = this.ResizeType labels?value; } ResizeType_widget = ResizeType "resize"; Size_widget = class { _vislevel = 3; width = Expression "Width (pixels)" 64; height = Expression "Height (pixels)" 64; _flag = "-size " ++ print width.expr ++ "x" ++ print height.expr; }; StatType statt = class Option_string "Statistic type" [ "Gradient", "Maximum", "Mean", "Median", "Minimum", "Mode", "Nonpeak", "StandardDeviation" ] statt { _flag = statt; Option_edit caption labels value = this.StatType labels?value; } StatType_widget = StatType "Mean"; VirtualPixel vp = class Option_string "Virtual pixel" [ "Background", "Black", "CheckerTile", "Dither", "Edge", "Gray", "HorizontalTile", "HorizontalTileEdge", "Mirror", "None", "Random", "Tile", "Transparent", "VerticalTile", "VerticalTileEdge", "White" ] vp { _flag = "-virtual-pixel " ++ vp; _isBackground = (vp == "Background"); Option_edit caption labels value = this.VirtualPixel labels?value; } VirtualPixel_widget = VirtualPixel "Edge"; VirtualPixelBack_widget = class { virtpix = Magick.VirtualPixel_widget; background = Magick.background_widget; _flag = (if virtpix._isBackground then (background._flag ++ " ") else "") ++ virtpix._flag; } Geometry_widget = class { _vislevel = 3; x = Expression "X" 0; y = Expression "Y" 0; hoffset = Expression "Horizontal offset" 0; voffset = Expression "Vertical offset" 0; _flag = concat [print x.expr, "x", print y.expr, format hoffset, format voffset] { // print an offset ... we want '+' in front of +ve strings format offset = concat ["+", print offset.expr], offset.expr >= 0 = print offset.expr; } }; AnnotGeometry_widget = class { _vislevel = 3; shearX = Expression "shear X (degrees)" 0; shearY = Expression "shear Y (degrees)" 0; hoffset = Expression "Horizontal offset" 0; voffset = Expression "Vertical offset" 0; _flag = concat [print shearX.expr, "x", print shearY.expr, format hoffset, format voffset] { // print an offset ... we want '+' in front of +ve strings format offset = concat ["+", print offset.expr], offset.expr >= 0 = print offset.expr; } }; OffsetGeometry_widget = class { _vislevel = 3; hoffset = Expression "Horizontal offset" 0; voffset = Expression "Vertical offset" 0; _flag = concat [format hoffset, format voffset] { // print an offset ... we want '+' in front of +ve strings format offset = concat ["+", print offset.expr], offset.expr >= 0 = print offset.expr; } }; WhxyGeometry_widget = class { _vislevel = 3; x = Expression "Width" 0; y = Expression "Height" 0; hoffset = Expression "Horizontal offset" 0; voffset = Expression "Vertical offset" 0; _flag = concat [print x.expr, "x", print y.expr, format hoffset, format voffset] { // print an offset ... we want '+' in front of +ve strings format offset = concat ["+", print offset.expr], offset.expr >= 0 = print offset.expr; } }; FrameGeometry_widget = class { _vislevel = 3; x = Expression "Width" 0; y = Expression "Height" 0; outbev = Expression "Outer bevel thickness" 0; inbev = Expression "Inner bevel thickness" 0; _flag = concat [print x.expr, "x", print y.expr, format outbev, format inbev] { // print an offset ... we want '+' in front of +ve strings format offset = concat ["+", print offset.expr], offset.expr >= 0 = print offset.expr; } }; Font_widget = class { _vislevel = 3; family = Option_string "Family" [ "Arial", "ArialBlack", "AvantGarde", "BitstreamCharter", "Bookman", "CenturySchoolbook", "ComicSansMS", "Courier", "CourierNew", "DejaVuSans", "DejaVuSansMono", "DejaVuSerif", "Dingbats", "FreeMono", "FreeSans", "FreeSerif", "Garuda", "Georgia", "Helvetica", "HelveticaNarrow", "Impact", "LiberationMono", "LiberationSans", "LiberationSerif", "NewCenturySchlbk", "Palatino", "Purisa", "Symbol", "Times", "TimesNewRoman", "Ubuntu", "Verdana", "Webdings" ] "Arial"; style = Option_string "Style" [ "Any", "Italic", "Normal", "Oblique" ] "Normal"; weight = Scale "Weight" 1 800 400; size = Scale "Point size" 1 100 12; stretch = Option_string "Stretch" [ "Any", "Condensed", "Expanded", "ExtraCondensed", "ExtraExpanded", "Normal", "SemiCondensed", "SemiExpanded", "UltraCondensed", "UltraExpanded" ] "Normal"; _flag = join_sep " " [ "-family", family.item, "-weight", print weight.value, "-pointsize", print size.value, "-style", style.item, "-stretch", stretch.item]; } } nip2-8.7.0/share/nip2/compat/7.40/_Object.def0000644000175000017500000002600513224651032015172 00000000000000/* Lots of little arg checks. Global for convenience. */ check_any = [(const true), _ "any"]; check_bool = [is_bool, _ "boolean"]; check_real = [is_real, _ "real"]; check_ureal = [is_ureal, _ "unsigned real"]; check_preal = [is_preal, _ "positive real"]; check_list = [is_list, _ "list"]; check_real_list = [is_real_list, _ "list of real"]; check_string = [is_string, _ "string"]; check_string_list = [is_string_list, _ "list of string"]; check_int = [is_int, _ "integer"]; check_uint = [is_uint, _ "unsigned integer"]; check_pint = [is_pint, _ "positive integer"]; check_matrix = [is_matrix, _ "rectangular array of real"]; check_matrix_display = [Matrix_display.is_display, _ "0|1|2|3"]; check_image = [is_image, _ "image"]; check_xy_list = [is_xy_list, _ "list of form [[1, 2], [3, 4], [5, 6], ...]"]; check_instance name = [is_instanceof name, name]; check_Image = check_instance "Image"; check_Matrix = [is_Matrix, _ "Matrix"]; check_colour_space = [is_colour_space, join_sep "|" Image_type.colour_spaces.names]; check_rectangular = [is_rectangular, _ "rectangular [[*]]"]; check_Guide = [is_Guide, _ "HGuide|VGuide"]; check_Colour = check_instance (_ "Colour"); check_Mark = check_instance (_ "Mark"); /* Check a set of args to a class. Two members to look at: _check_args and * _check_all. * * - each line in _check_args is [arg, "arg name", [test_fn, "arg type"]] * same number of lines as there are args * * stuff like "arg 2 must be real" * * - each line in _check_all is [test, "description"] * any number of lines * * stuff like "to must be greater than from" * * generate an error dialog with a helpful message on failure. * * Have as a separate function to try to keep the size of _Object down. */ check_args x = error message, badargs != [] || badalls != [] = x { argcheck = x._check_args; allcheck = x._check_all; // indent string indent = " "; // test for a condition in a check line fails test_fail x = ! x?0; // set of failed argcheck indexes badargs = map (extract 1) (filter test_fail (zip2 (map testarg argcheck) [0..])) { testarg x = x?2?0 x?0; } // set of failed allcheck indexes badalls = map (extract 1) (filter test_fail (zip2 (map hd allcheck) [0..])); // the error message message = _ "bad properties for " ++ "\"" ++ x.name ++ "\"\n" ++ argmsg ++ allmsg ++ "\n" ++ _ "where" ++ "\n" ++ arg_types ++ extra; // make the failed argcheck messages ... eg. ""value" should be // real, you passed " etc. argmsg = concat (map fmt badargs) { fmt n = indent ++ "\"" ++ argcheck?n?1 ++ "\"" ++ _ " should be of type " ++ argcheck?n?2?1 ++ ", " ++ _ "you passed" ++ ":\n" ++ indent ++ indent ++ print argcheck?n?0 ++ "\n"; } // make the failed allcheck messages ... eg "condition failed: // x < y" ... don't make a message if any typechecks have // failed, as we'll probably error horribly allmsg = [], badargs != [] = concat (map fmt badalls) ++ _ "you passed" ++ "\n" ++ concat (map fmt_arg argcheck) { fmt n = _ "condition failed" ++ ": " ++ allcheck?n?1 ++ "\n"; fmt_arg l = indent ++ l?1 ++ " = " ++ print l?0 ++ "\n"; } // make arg type notes arg_types = join_sep "\n" (map fmt argcheck) { fmt l = indent ++ l?1 ++ " is of type " ++ l?2?1; } // extra bit at the bottom, if we have any conditions extra = [], allcheck == [] = "\n" ++ _ "and" ++ "\n" ++ all_desc; // make a list of all the allcheck descriptions, with a few // spaces in front all_desc_list = map (join indent @ extract 1) allcheck; // join em up to make a set of condition notes all_desc = join_sep "\n" all_desc_list; } /* Operator overloading stuff. */ Operator_type = class { ARITHMETIC = 1; // eg. add RELATIONAL = 2; // eg. less COMPOUND = 3; // eg. max/mean/etc. COMPOUND_REWRAP = 4; // eg. transpose } Operator op_name fn type symmetric = class { } /* Form the converse of an Operator. */ oo_converse op = Operator (converse_name op.op_name) (converse op.fn) op.type op.symmetric { converse_name x = init x, last x == last "'" = x ++ "'"; } /* Given an operator name, look up the definition. */ oo_binary_lookup op_name = matches?0, matches != [] = error (_ "unknown binary operator" ++ ": " ++ print op_name) { operator_table = [ Operator "add" add Operator_type.ARITHMETIC true, Operator "subtract" subtract Operator_type.ARITHMETIC false, Operator "remainder" remainder Operator_type.ARITHMETIC false, Operator "power" power Operator_type.ARITHMETIC false, Operator "subscript" subscript Operator_type.ARITHMETIC false, Operator "left_shift" left_shift Operator_type.ARITHMETIC false, Operator "right_shift" right_shift Operator_type.ARITHMETIC false, Operator "divide" divide Operator_type.ARITHMETIC false, Operator "join" join Operator_type.ARITHMETIC false, Operator "multiply" multiply Operator_type.ARITHMETIC true, Operator "logical_and" logical_and Operator_type.ARITHMETIC true, Operator "logical_or" logical_or Operator_type.ARITHMETIC true, Operator "bitwise_and" bitwise_and Operator_type.ARITHMETIC true, Operator "bitwise_or" bitwise_or Operator_type.ARITHMETIC true, Operator "eor" eor Operator_type.ARITHMETIC true, Operator "comma" comma Operator_type.ARITHMETIC false, Operator "if_then_else" if_then_else Operator_type.ARITHMETIC false, Operator "equal" equal Operator_type.RELATIONAL true, Operator "not_equal" not_equal Operator_type.RELATIONAL true, Operator "less" less Operator_type.RELATIONAL false, Operator "less_equal" less_equal Operator_type.RELATIONAL false ]; matches = filter test_name operator_table; test_name x = x.op_name == op_name; } /* Given an operator name, look up a function that implements that * operator. */ oo_unary_lookup op_name = matches?0, matches != [] = error (_ "unknown unary operator" ++ ": " ++ print op_name) { operator_table = [ /* Operators. */ Operator "cast_signed_char" cast_signed_char Operator_type.ARITHMETIC false, Operator "cast_unsigned_char" cast_unsigned_char Operator_type.ARITHMETIC false, Operator "cast_signed_short" cast_signed_short Operator_type.ARITHMETIC false, Operator "cast_unsigned_short" cast_unsigned_short Operator_type.ARITHMETIC false, Operator "cast_signed_int" cast_signed_int Operator_type.ARITHMETIC false, Operator "cast_unsigned_int" cast_unsigned_int Operator_type.ARITHMETIC false, Operator "cast_float" cast_float Operator_type.ARITHMETIC false, Operator "cast_double" cast_double Operator_type.ARITHMETIC false, Operator "cast_complex" cast_complex Operator_type.ARITHMETIC false, Operator "cast_double_complex" cast_double_complex Operator_type.ARITHMETIC false, Operator "unary_minus" unary_minus Operator_type.ARITHMETIC false, Operator "negate" negate Operator_type.RELATIONAL false, Operator "complement" complement Operator_type.ARITHMETIC false, Operator "unary_plus" unary_plus Operator_type.ARITHMETIC false, /* Built in projections. */ Operator "re" re Operator_type.ARITHMETIC false, Operator "im" im Operator_type.ARITHMETIC false, Operator "hd" hd Operator_type.ARITHMETIC false, Operator "tl" tl Operator_type.ARITHMETIC false, /* Maths builtins. */ Operator "sin" sin Operator_type.ARITHMETIC false, Operator "cos" cos Operator_type.ARITHMETIC false, Operator "tan" tan Operator_type.ARITHMETIC false, Operator "asin" asin Operator_type.ARITHMETIC false, Operator "acos" acos Operator_type.ARITHMETIC false, Operator "atan" atan Operator_type.ARITHMETIC false, Operator "log" log Operator_type.ARITHMETIC false, Operator "log10" log10 Operator_type.ARITHMETIC false, Operator "exp" exp Operator_type.ARITHMETIC false, Operator "exp10" exp10 Operator_type.ARITHMETIC false, Operator "ceil" ceil Operator_type.ARITHMETIC false, Operator "floor" floor Operator_type.ARITHMETIC false ]; matches = filter test_name operator_table; test_name x = x.op_name == op_name; } /* Find the matching methods in a method table. */ oo_method_lookup table = map (extract 0) (filter (extract 1) table); /* A binary op: a is a class, b may be a class ... eg. "add" a b two obvious ways to find a method: - a.oo_binary_search "add" (+) b - b.oo_binary_search "add'" (converse (+)) a, is_class b if these fail but op is a symmetric operator (eg. a + b == b + a), we can also try reversing the args - a.oo_binary_search "add'" (converse (+)) b - b.oo_binary_search "add" (+) a, is_class b if those fail as well, but this is ==, do pointer equals as a fallback */ oo_binary_function op a b = matches1?0, matches1 != [] = matches2?0, is_class b && matches2 != [] = matches3?0, op.symmetric && matches3 != [] = matches4?0, op.symmetric && is_class b && matches4 != [] = pointer_equal a b, op.op_name == "equal" || op.op_name == "equal'" = not_pointer_equal a b, op.op_name == "not_equal" || op.op_name == "not_equal'" = error (_ "No method found for binary operator." ++ "\n" ++ _ "left" ++ " = " ++ print a ++ "\n" ++ _ "operator" ++ " = " ++ op.op_name ++ "\n" ++ _ "right" ++ " = " ++ print b) { matches1 = oo_method_lookup (a.oo_binary_table op b); matches2 = oo_method_lookup (b.oo_binary_table (oo_converse op) a); matches3 = oo_method_lookup (a.oo_binary_table (oo_converse op) b); matches4 = oo_method_lookup (b.oo_binary_table op a); } /* A binary op: a is not a class, b is a class ... eg. "subtract" a b only one way to find a method: - b.oo_binary_search "subtract'" (converse (-)) a if this fails but op is a symmetric operator (eg. a + b == b + a), we can try reversing the args - b.oo_binary_search "add" (+) a, is_class b if that fails as well, but this is ==, do pointer equals as a fallback */ oo_binary'_function op a b = matches1?0, matches1 != [] = matches2?0, op.symmetric && matches2 != [] = pointer_equal a b, op.op_name == "equal" || op.op_name == "equal'" = not_pointer_equal a b, op.op_name == "not_equal" || op.op_name == "not_equal'" = error (_ "No method found for binary operator." ++ "\n" ++ _ "left" ++ " = " ++ print a ++ "\n" ++ _ "operator" ++ " = " ++ op.op_name ++ "\n" ++ _ "right" ++ " = " ++ print b) { matches1 = oo_method_lookup (b.oo_binary_table (oo_converse op) a); matches2 = oo_method_lookup (b.oo_binary_table op a); } oo_unary_function op x = matches?0, matches != [] = error (_ "No method found for unary operator." ++ "\n" ++ _ "operator" ++ " = " ++ op.op_name ++ "\n" ++ _ "argument" ++ " = " ++ print x) { matches = oo_method_lookup (x.oo_unary_table op); } /* Base class for nip's built-in classes ... base check function, base * operator overload functions. */ _Object = class { check = check_args this; // these should always be defined _check_args = []; _check_all = []; /* Operator overloading stuff. */ oo_binary op x = oo_binary_function (oo_binary_lookup op) this x; oo_binary' op x = oo_binary'_function (oo_binary_lookup op) x this; oo_unary op = oo_unary_function (oo_unary_lookup op) this; oo_binary_table op x = []; oo_unary_table op = []; } nip2-8.7.0/share/nip2/compat/7.40/Magick.def0000644000175000017500000014112713224651032015023 00000000000000/* ImageMagick operations edited by Alan Gibson (aka "snibgo"; snibgo at earthling dot net). 1-Apr-2014 Minor corrections to Geometry_widget and Alpha. Added loads of widgets and Menuactions. Not fully tested. 5-Apr-2014 Many more menu actions. Reorganised Magick menu. 10-Apr-2014 Many more menu actions. 11-Apr-2014 jcupitt Split to separate Magick.def 13-Apr-2014 snibgo Put "new image" items into sub-menu. New class VirtualPixlBack. 17-Apr-2014 snibgo Many small changes. A few new menu options. Created sub-menu for multi-input operations. 3-May-2014 jcupitt Put quotes around ( in shadow to help unix Last update: 17-Apr-2014. For details of ImageMagick operations, see http://www.imagemagick.org/script/command-line-options.php etc. */ // We don't need Noop. /*=== Magick_noop_item = class Menuaction "_Noop" "no operation" { action x = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "\"%s\"" ]; _result = Magick.system command x; } } ===*/ Magick_testPar_item = class Menuaction "_TestPar" "no operation" { action x = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "( +clone ) +append ", "\"%s\"" ]; _result = Magick.system command x; } } /* Removed Read_item and Write_item, much better to use nip2 load/save image. * Plus they can load all libMagick formats anyway. */ // Put "new image" items into sub-menu Magick_NewImageMenu_item = class Menupullright "_New image" "make a new image" { Magick_newcanvas_item = class Menuaction "_Solid colour" "make image of solid colour" { action = class _result { _vislevel = 3; size = Magick.Size_widget; colour = Magick.generalcol_widget; command = Magick.command [ size._flag, "\"canvas:" ++ colour._flag ++ "\"", "\"%s\"" ]; _result = Magick.system0 command; } } Magick_builtin_item = class Menuaction "_Built-in image" "create a built-in image" { action = class _result { _vislevel = 3; builtin = Magick.builtin_widget; command = Magick.command [ builtin._flag, "\"%s\"" ]; _result = Magick.system0 command; } } Magick_gradient_item = class Menuaction "_Gradient" "make a linear gradient between two colours" { action = class _result { _vislevel = 3; size = Magick.Size_widget; topColour = Magick.generalcol_widget; bottomColour = Magick.generalcol_widget; command = Magick.command [ size._flag, concat ["\"gradient:", topColour._flag, "-", bottomColour._flag, "\""], "\"%s\"" ]; _result = Magick.system0 command; } } Magick_hald_item = class Menuaction "_Hald-clut image" "create an identity hald-clut image" { action = class _result { _vislevel = 3; order = Expression "order" 8; command = Magick.command [ "hald:" ++ print order.expr, "\"%s\"" ]; _result = Magick.system0 command; } } Magick_pattern_item = class Menuaction "_Pattern" "create pattern" { action = class _result { _vislevel = 3; size = Magick.Size_widget; pattern = Magick.pattern_widget; command = Magick.command [ size._flag, pattern._flag, "\"%s\"" ]; _result = Magick.system0 command; } } Magick_plasma_item = class Menuaction "_Plasma image" "create plasma image" { action = class _result { _vislevel = 3; size = Magick.Size_widget; // FIXME? ColourA-ColourB. // FIXME? Allow plasma:fractal? command = Magick.command [ size._flag, "plasma:", "\"%s\"" ]; _result = Magick.system0 command; } } Magick_radialgradient_item = class Menuaction "_Radial gradient" "make a radial gradient between two colours" { action = class _result { _vislevel = 3; size = Magick.Size_widget; innerColour = Magick.generalcol_widget; outerColour = Magick.generalcol_widget; command = Magick.command [ size._flag, concat ["\"radial-gradient:", innerColour._flag, "-", outerColour._flag, "\""], "\"%s\"" ]; _result = Magick.system0 command; } } } // end Magick_NewImageMenu_item Magick_MultiMenu_item = class Menupullright "_Multiple inputs" "make an image from multiple images" { Magick_composite_item = class Menuaction "_Composite" "composite two images (without mask)" { action x y = class _result { _vislevel = 3; method = Magick.compose_widget; offsets = Magick.OffsetGeometry_widget; gravity = Magick.gravity_widget; command = Magick.command [ "\"%s\"", "\"%s\"", "-geometry", offsets._flag, gravity._flag, method._flag, "-composite", "\"%s\"" ]; _result = Magick.system2 command x y; } } Magick_compositeMask_item = class Menuaction "_Composite masked" "composite two images (with mask)" { action x y z = class _result { _vislevel = 3; method = Magick.compose_widget; offsets = Magick.OffsetGeometry_widget; gravity = Magick.gravity_widget; command = Magick.command [ "\"%s\"", "\"%s\"", "\"%s\"", "-geometry", offsets._flag, gravity._flag, method._flag, "-composite", "\"%s\"" ]; _result = Magick.system3 command x y z; } } // FIXME: other operations like remap that take another image as arguments are: // mask (pointless?), texture, tile (pointless?) // FIXME: operations that take a filename that isn't an image: // cdl, profile Magick_clut_item = class Menuaction "_Clut" "replace values using second image as colour look-up table" { action x y = class _result { _vislevel = 3; // FIXME: uses -intensity "when mapping greyscale CLUT image to alpha channel if set by -channels" command = Magick.command [ "\"%s\"", "\"%s\"", "-clut", "\"%s\"" ]; _result = Magick.system2 command x y; } } Magick_haldclut_item = class Menuaction "_Hald clut" "replace values using second image as Hald colour look-up table" { action x y = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "\"%s\"", "-hald-clut", "\"%s\"" ]; _result = Magick.system2 command x y; } } // Encipher and decipher: key files can be text or image files. Magick_encipher_item = class Menuaction "_Encipher/Decipher" "encipher or decipher an image image" { action x = class _result { _vislevel = 3; pathname = Pathname "Read key file" ""; isDecipher = Toggle "Decipher" false; command = Magick.command [ "\"%s\"", if pathname.value == "" then "" else ( ( if isDecipher then "-decipher " else "-encipher ") ++ ( "\"" ++ pathname.value ++ "\"" ) ), "\"%s\"" ]; _result = Magick.system command x; } } Magick_profile_item = class Menuaction "_Profile" "assigns/applies an ICC profile" { action x = class _result { _vislevel = 3; pathname1 = Pathname "Read profile file" ""; pathname2 = Pathname "Read profile file" ""; command = Magick.command [ "\"%s\"", if pathname1.value == "" then "" else ( "-profile " ++ "\"" ++ pathname1.value ++ "\""), if pathname2.value == "" then "" else ( "-profile " ++ "\"" ++ pathname2.value ++ "\""), "\"%s\"" ]; _result = Magick.system command x; } } Magick_remap_item = class Menuaction "_Remap" "reduce colours to those in another image" { action x y = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "-remap", "\"%s\"", "\"%s\"" ]; _result = Magick.system2 command x y; } } } // end Magick_MultiMenu_item Magick_image_type_item = class Menuaction "_Image Type" "change image type" { action x = class _result { _vislevel = 3; imagetype = Magick.imagetype_widget; command = Magick.command [ "\"%s\"", imagetype._flag, "\"%s\"" ]; _result = Magick.system command x; } } sep2 = Menuseparator; Magick_alpha_item = class Menuaction "_Alpha" "add/remove alpha channel" { action x = class _result { _vislevel = 3; alpha = Magick.alpha_widget; command = Magick.command [ "\"%s\"", alpha._flag, "\"%s\"" ]; _result = Magick.system command x; } } Magick_annotate_item = class Menuaction "_Annotate" "add text annotation" { action x = class _result { _vislevel = 3; text = Magick.text_widget; font = Magick.Font_widget; geometry = Magick.AnnotGeometry_widget; gravity = Magick.gravity_widget; foreground = Magick.foreground_widget; undercol = Magick.undercol_widget; antialias = Magick.antialias_widget; command = Magick.command [ "\"%s\"", font._flag, antialias._flag, gravity._flag, foreground._flag, undercol._flag, "-annotate", geometry._flag, "\"" ++ text.value ++ "\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_autoGamma_item = class Menuaction "_AutoGamma" "automatic gamma" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; command = Magick.command [ "\"%s\"", channels._flag, "-auto-gamma", "\"%s\"" ]; _result = Magick.system command x; } } Magick_autoLevel_item = class Menuaction "_AutoLevel" "automatic level" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; command = Magick.command [ "\"%s\"", channels._flag, "-auto-level", "\"%s\"" ]; _result = Magick.system command x; } } Magick_blurSharpMenu_item = class Menupullright "_Blur/Sharpen" "blur and sharpen" { Magick_adaptive_blur_item = class Menuaction "_Adaptive Blur" "blur less near edges" { action x = class _result { _vislevel = 3; intensity = Magick.intensity_widget; radius = Magick.blur_rad_widget; sigma = Magick.sigma_widget; channels = Magick.channels_widget; // note: adaptive-blur doesn't regard VP. command = Magick.command [ "\"%s\"", intensity._flag, channels._flag, "-adaptive-blur", print radius.value ++ "x" ++ print sigma.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_blur_item = class Menuaction "_Blur" "blur" { action x = class _result { _vislevel = 3; radius = Magick.blur_rad_widget; sigma = Magick.sigma_widget; channels = Magick.channels_widget; virtpixback = Magick.VirtualPixelBack_widget; command = Magick.command [ "\"%s\"", virtpixback._flag, channels._flag, "-blur", print radius.value ++ "x" ++ print sigma.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_gaussianBlur_item = class Menuaction "_Gaussian Blur" "blur with a Gaussian operator" { action x = class _result { _vislevel = 3; radius = Magick.blur_rad_widget; sigma = Magick.sigma_widget; channels = Magick.channels_widget; virtpixback = Magick.VirtualPixelBack_widget; command = Magick.command [ "\"%s\"", virtpixback._flag, channels._flag, "-gaussian-blur", print radius.value ++ "x" ++ print sigma.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_motionBlur_item = class Menuaction "_Motion Blur" "simulate motion blur" { action x = class _result { _vislevel = 3; radius = Magick.blur_rad_widget; sigma = Magick.sigma_widget; angle = Scale "angle" (-360) 360 0; channels = Magick.ch_widget; virtpixback = Magick.VirtualPixelBack_widget; command = Magick.command [ "\"%s\"", virtpixback._flag, channels._flag, "-motion-blur", print radius.value ++ "x" ++ print sigma.value ++ "+" ++ print angle.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_rotationalBlur_item = class Menuaction "_RotationalBlur" "blur around the centre" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; virtpixback = Magick.VirtualPixelBack_widget; angle = Scale "angle (degrees)" (-360) 360 20; command = Magick.command [ "\"%s\"", virtpixback._flag, channels._flag, "-radial-blur", print angle.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_selectiveBlur_item = class Menuaction "_Selective Blur" "blur where contrast is less than or equal to threshold" { action x = class _result { _vislevel = 3; intensity = Magick.intensity_widget; radius = Magick.blur_rad_widget; sigma = Magick.sigma_widget; threshold = Scale "Threshold (percent)" 0 100 50; channels = Magick.channels_widget; virtpixback = Magick.VirtualPixelBack_widget; command = Magick.command [ "\"%s\"", intensity._flag, virtpixback._flag, channels._flag, "-selective-blur", print radius.value ++ "x" ++ print sigma.value ++ "+" ++ print threshold.value ++ "%%", "\"%s\"" ]; _result = Magick.system command x; } } sep1 = Menuseparator; Magick_adaptive_sharpen_item = class Menuaction "_Adaptive Sharpen" "sharpen more near edges" { action x = class _result { _vislevel = 3; intensity = Magick.intensity_widget; radius = Magick.blur_rad_widget; sigma = Magick.sigma_widget; command = Magick.command [ "\"%s\"", intensity._flag, "-adaptive-sharpen", print radius.value ++ "x" ++ print sigma.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_sharpen_item = class Menuaction "_Sharpen" "sharpen" { action x = class _result { _vislevel = 3; radius = Magick.blur_rad_widget; sigma = Magick.sigma_widget; channels = Magick.channels_widget; virtpixback = Magick.VirtualPixelBack_widget; command = Magick.command [ "\"%s\"", virtpixback._flag, channels._flag, "-sharpen", print radius.value ++ "x" ++ print sigma.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_unsharpen_item = class Menuaction "_Unsharp" "sharpen with unsharp mask" { action x = class _result { _vislevel = 3; radius = Magick.blur_rad_widget; sigma = Magick.sigma_widget; channels = Magick.channels_widget; gain = Scale "Gain" (-10) 10 1; threshold = Scale "Threshold" 0 1 0.05; virtpixback = Magick.VirtualPixelBack_widget; command = Magick.command [ "\"%s\"", virtpixback._flag, channels._flag, "-unsharp", print radius.value ++ "x" ++ print sigma.value ++ "+" ++ print gain.value ++ "+" ++ print threshold.value, "\"%s\"" ]; _result = Magick.system command x; } } } // end BlurSharpMenu_item Magick_border_item = class Menuaction "_Border" "add border of given colour" { action x = class _result { _vislevel = 3; compose = Magick.compose_widget; width = Expression "Width" 3; bordercol = Magick.bordercol_widget; command = Magick.command [ "\"%s\"", compose._flag, bordercol._flag, "-border", print width.expr, "\"%s\"" ]; _result = Magick.system command x; } } Magick_brightCont_item = class Menuaction "_Brightness-contrast" "adjust the brightness and/or contrast" { action x = class _result { _vislevel = 3; bri = Scale "brightness" (-100) 100 0; con = Scale "contrast" (-100) 100 0; channels = Magick.channels_widget; command = Magick.command [ "\"%s\"", channels._flag, "-brightness-contrast", print bri.value ++ "x" ++ print con.value, "\"%s\"" ]; _result = Magick.system command x; } } // Note: canny requires ImageMagick 6.8.9-0 or later. Magick_canny_item = class Menuaction "_Canny" "detect a wide range of edges" { action x = class _result { _vislevel = 3; radius = Magick.blur_rad_widget; sigma = Magick.sigma_widget; lowPc = Scale "lower percent" 0 100 10; highPc = Scale "lower percent" 0 100 10; command = Magick.command [ "\"%s\"", "-canny", concat ["\"", print radius.value ++ "x" ++ print sigma.value ++ "+" ++ print lowPc.value ++ "%%+" ++ print highPc.value ++ "%%" ++ "\"" ], "\"%s\"" ]; _result = Magick.system command x; } } Magick_charcoal_item = class Menuaction "_Charcoal" "simulate a charcoal drawing" { action x = class _result { _vislevel = 3; intensity = Magick.intensity_widget; factor = Scale "factor" 0 50 1; command = Magick.command [ "\"%s\"", intensity._flag, "-charcoal", print factor.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_chop_item = class Menuaction "_Chop" "remove pixels from the interior" { action x = class _result { _vislevel = 3; gravity = Magick.gravity_widget; geometry = Magick.WhxyGeometry_widget; command = Magick.command [ "\"%s\"", gravity._flag, "-chop", geometry._flag, "\"%s\"" ]; _result = Magick.system command x; } } Magick_colorize_item = class Menuaction "_Colorize" "colorize by given amount" { action x = class _result { _vislevel = 3; foreground = Magick.foreground_widget; val = Scale "value" 0 100 100; command = Magick.command [ "\"%s\"", foreground._flag, "-colorize", print val.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_colors_item = class Menuaction "_Colors" "reduce number of colors" { action x = class _result { _vislevel = 3; treedepth = Expression "Treedepth" 8; dither = Magick.dither_widget; quantize = Magick.colorspace_widget; colors = Expression "Colours" 3; command = Magick.command [ "\"%s\"", "-quantize", quantize._flag, "-treedepth", print treedepth.expr, dither._flag, "-colors", print colors.expr, "\"%s\"" ]; _result = Magick.system command x; } } // FIXME: color-matrix? Magick_colorspace_item = class Menuaction "_Colourspace" "convert to arbitrary colourspace" { action x = class _result { _vislevel = 3; colsp = Magick.colorspace_widget; command = Magick.command [ "\"%s\"", "-colorspace", colsp._flag, "\"%s\"" ]; _result = Magick.system command x; } } Magick_colorspaceGray_item = class Menuaction "_Colourspace gray" "convert to gray using given intensity method" { action x = class _result { _vislevel = 3; intensity = Magick.intensity_widget; command = Magick.command [ "\"%s\"", intensity._flag, "-colorspace gray", "\"%s\"" ]; _result = Magick.system command x; } } Magick_contrast_item = class Menuaction "_Contrast" "increase or reduce the contrast" { action x = class _result { _vislevel = 3; isReduce = Toggle "reduce contrast" false; command = Magick.command [ "\"%s\"", (if isReduce then "+" else "-") ++ "contrast", "\"%s\"" ]; _result = Magick.system command x; } } Magick_contrastStretch_item = class Menuaction "_Contrast stretch" "stretches tones, making some black/white" { action x = class _result { _vislevel = 3; intensity = Magick.intensity_widget; channels = Magick.channels_widget; blk = Scale "percent to make black" 0 100 0; wht = Scale "percent to make white" 0 100 0; command = Magick.command [ "\"%s\"", intensity._flag, channels._flag, "-contrast-stretch", "\"" ++ print blk.value ++ "x" ++ print wht.value ++ "%%\"", "\"%s\"" ]; _result = Magick.system command x; } } // FIXME: convolve (bias, kernel) Magick_crop_item = class Menuaction "_Crop" "cut out a rectangular region" { action x = class _result { _vislevel = 3; gravity = Magick.gravity_widget; geometry = Magick.WhxyGeometry_widget; command = Magick.command [ "\"%s\"", gravity._flag, "-crop", geometry._flag, "+repage", "\"%s\"" ]; _result = Magick.system command x; } } Magick_deskew_item = class Menuaction "_Deskew" "straighten the image" { action x = class _result { _vislevel = 3; threshold = Scale "Threshold (percent)" 0 100 80; // FIXME: toggle auto-crop? command = Magick.command [ "\"%s\"", "-deskew", "\"" ++ print threshold.value ++ "%%\"", "+repage", "\"%s\"" ]; _result = Magick.system command x; } } Magick_despeckle_item = class Menuaction "_Despeckle" "reduce the speckles" { action x = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "-despeckle", "\"%s\"" ]; _result = Magick.system command x; } } Magick_distort_item = class Menuaction "_Distort" "distort using a method and arguments" { action x = class _result { _vislevel = 3; virtpixback = Magick.VirtualPixelBack_widget; distort = Magick.distort_widget; args = String "Arguments" "1,0"; isPlus = Toggle "Extend to show entire image" false; command = Magick.command [ "\"%s\"", virtpixback._flag, (if isPlus then "+" else "-") ++ "distort", distort._flag, args.value, "+repage", "\"%s\"" ]; _result = Magick.system command x; } } Magick_draw_item = class Menuaction "_Draw" "annotate with one or more graphic primitives" { action x = class _result { _vislevel = 3; foreground = Magick.foreground_widget; args = String "Arguments" "line 0,0 9,9 rectangle 10,10 20,20"; command = Magick.command [ "\"%s\"", foreground._flag, "-draw", concat ["\"", args.value, "\""], "\"%s\"" ]; _result = Magick.system command x; } } Magick_edge_item = class Menuaction "_Edge" "detect edges" { action x = class _result { _vislevel = 3; rad = Expression "Radius" 3; command = Magick.command [ "\"%s\"", "-edge", print rad.expr, "\"%s\"" ]; _result = Magick.system command x; } } Magick_emboss_item = class Menuaction "_Emboss" "emboss" { action x = class _result { _vislevel = 3; rad = Expression "Radius" 3; command = Magick.command [ "\"%s\"", "-emboss", print rad.expr, "\"%s\"" ]; _result = Magick.system command x; } } Magick_enhance_item = class Menuaction "_Enhance" "enhance a noisy image" { action x = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "-enhance", "\"%s\"" ]; _result = Magick.system command x; } } Magick_equalize_item = class Menuaction "_Equalize" "equalize the histogram" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; command = Magick.command [ "\"%s\"", channels._flag, "-equalize", "\"%s\"" ]; _result = Magick.system command x; } } Magick_evaluate_item = class Menuaction "_Evaluate" "evaluate an expression on each pixel channel" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; operation = Magick.evaluate_widget; val = Expression "value" 5; isPc = Toggle "Value is percent" false; command = Magick.command [ "\"%s\"", channels._flag, operation._flag, print val.expr ++ if isPc then "%%" else "", "\"%s\"" ]; _result = Magick.system command x; } } Magick_extent_item = class Menuaction "_Extent" "set the image size and offset" { action x = class _result { _vislevel = 3; background = Magick.background_widget; compose = Magick.compose_widget; gravity = Magick.gravity_widget; geometry = Magick.WhxyGeometry_widget; command = Magick.command [ "\"%s\"", compose._flag, background._flag, gravity._flag, "-extent", geometry._flag, "\"%s\"" ]; _result = Magick.system command x; } } Magick_FlipFlopMenu_item = class Menupullright "_Flip/flop" "flip/flop/transverse/transpose" { Magick_flip_item = class Menuaction "_Flip vertically" "mirror upside-down" { action x = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "-flip", "\"%s\"" ]; _result = Magick.system command x; } } Magick_flop_item = class Menuaction "_Flop horizontally" "mirror left-right" { action x = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "-flop", "\"%s\"" ]; _result = Magick.system command x; } } Magick_transpose_item = class Menuaction "_Transpose" "mirror along the top-left to bottom-right diagonal" { action x = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "-transpose +repage", "\"%s\"" ]; _result = Magick.system command x; } } Magick_transverse_item = class Menuaction "_Transverse" "mirror along the bottom-left to top-right diagonal" { action x = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "-transverse +repage", "\"%s\"" ]; _result = Magick.system command x; } } } // end Magick_FlipFlopMenu_item Magick_floodfill_item = class Menuaction "_Floodfill" "recolour neighbours that match" { action x = class _result { _vislevel = 3; foreground = Magick.foreground_widget; fuzz = Magick.fuzz_widget; coordinate = Magick.coordinate_widget; // -draw "color x,y floodfill" command = Magick.command [ "\"%s\"", foreground._flag, "-fuzz", "\"" ++ print fuzz.value ++ "%%\"", "-draw \" color", coordinate._flag, "floodfill \"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_frame_item = class Menuaction "_Frame" "surround with border or beveled frame" { action x = class _result { _vislevel = 3; border = Magick.bordercol_widget; compose = Magick.compose_widget; matte = Magick.mattecol_widget; geometry = Magick.FrameGeometry_widget; command = Magick.command [ "\"%s\"", compose._flag, border._flag, matte._flag, "-frame", geometry._flag, "\"%s\"" ]; _result = Magick.system command x; } } Magick_function_item = class Menuaction "_Function" "evaluate a function on each pixel channel" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; function = Magick.function_widget; // FIXME: explain values; use sensible defaults. values = String "values" "0,0,0,0"; command = Magick.command [ "\"%s\"", channels._flag, "-function", function._flag, values.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_fx_item = class Menuaction "_Fx" "apply a mathematical expression" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; interpolate = Magick.interpolate_widget; virtpixback = Magick.VirtualPixelBack_widget; args = String "Expression" "u*1/2"; command = Magick.command [ "\"%s\"", channels._flag, interpolate._flag, virtpixback._flag, "-fx", concat ["\"", args.value, "\""], "\"%s\"" ]; _result = Magick.system command x; } } Magick_gamma_item = class Menuaction "_Gamma" "apply a gamma correction" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; gamma = Magick.gamma_widget; command = Magick.command [ "\"%s\"", channels._flag, "-gamma", print gamma.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_gradient_item = class Menuaction "_Gradient" "apply a linear gradient" { action x = class _result { _vislevel = 3; colourA = Magick.generalcol_widget; colourB = Magick.generalcol_widget; position = Option "colourA is at" [ "top", "bottom", "left", "right", "top-left", "top-right", "bottom-left", "bottom-right"] 0; _baryArg = concat ["0,0,", colourA._flag, " 0,%%[fx:h-1],", colourB._flag], position.value == 0 = concat ["0,0,", colourB._flag, " 0,%%[fx:h-1],", colourA._flag], position.value == 1 = concat ["0,0,", colourA._flag, " %%[fx:w-1],0,", colourB._flag], position.value == 2 = concat ["0,0,", colourB._flag, " %%[fx:w-1],0,", colourA._flag], position.value == 3 = concat ["0,0,", colourA._flag, " %%[fx:w-1],%%[fx:h-1],", colourB._flag], position.value == 4 = concat ["%%[fx:w-1],0,", colourA._flag, " 0,%%[fx:h-1],", colourB._flag], position.value == 5 = concat ["%%[fx:w-1],0,", colourB._flag, " 0,%%[fx:h-1],", colourA._flag], position.value == 6 = concat ["0,0,", colourB._flag, " %%[fx:w-1],%%[fx:h-1],", colourA._flag], position.value == 7 = "dunno"; command = Magick.command [ "\"%s\"", "-sparse-color barycentric \"" ++ _baryArg ++ "\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_gradientCorn_item = class Menuaction "_Gradient corners" "apply a bilinear gradient between the corners" { action x = class _result { _vislevel = 3; colour_top_left = Magick.generalcol_widget; colour_top_right = Magick.generalcol_widget; colour_bottom_left = Magick.generalcol_widget; colour_bottom_right = Magick.generalcol_widget; command = Magick.command [ "\"%s\"", "-sparse-color bilinear \"" ++ "0,0," ++ colour_top_left._flag ++ ",%%[fx:w-1],0" ++ colour_top_right._flag ++ ",0,%%[fx:h-1]" ++ colour_bottom_left._flag ++ ",%%[fx:w-1],%%[fx:h-1]" ++ colour_bottom_right._flag ++ "\"", "+depth", "\"%s\"" ]; _result = Magick.system command x; } } Magick_histogram_item = class Menuaction "_Histogram" "make a histogram image" { action x = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "-define histogram:unique-colors=false histogram:" ++ "\"%s\"" ]; _result = Magick.system command x; } } Magick_implode_item = class Menuaction "_Implode" "implode pixels about the center" { action x = class _result { _vislevel = 3; factor = Scale "factor" 0 20 1; interpolate = Magick.interpolate_widget; // FIXME: virtual-pixel? command = Magick.command [ "\"%s\"", interpolate._flag, "-implode", print factor.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_level_item = class Menuaction "_Level" "adjust the level of channels" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; blk = Scale "black point" (-100) 200 0; wht = Scale "white point" (-100) 200 100; gam = Scale "gamma" 0 30 1; isPc = Toggle "Levels are percent" true; isInv = Toggle "Invert effect" false; command = Magick.command [ "\"%s\"", channels._flag, (if isInv then "+" else "-") ++ "level", "\"" ++ print blk.value ++ "," ++ print wht.value ++ (if isPc then "%%" else "") ++ "," ++ print gam.value ++ "\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_levelCols_item = class Menuaction "_Level colors" "adjust levels to given colours" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; colour_black = Magick.generalcol_widget; colour_white = Magick.generalcol_widget; isInv = Toggle "Invert effect" false; command = Magick.command [ "\"%s\"", channels._flag, (if isInv then "+" else "-") ++ "level-colors", "\"" ++ colour_black._flag ++ "," ++ colour_white._flag ++ "\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_linearStretch_item = class Menuaction "_Linear stretch" "stretches tones, making some black/white" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; blk = Scale "percent to make black" 0 100 0; wht = Scale "percent to make white" 0 100 0; command = Magick.command [ "\"%s\"", channels._flag, "-linear-stretch", "\"" ++ print blk.value ++ "x" ++ print wht.value ++ "%%\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_magnify_item = class Menuaction "_Magnify" "double the size of the image with pixel art scaling" { action x = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "-magnify", "\"%s\"" ]; _result = Magick.system command x; } } Magick_modulate_item = class Menuaction "_Modulate" "modulate brightness, saturation and hue" { action x = class _result { _vislevel = 3; modcolsp = Magick.ModColSp_widget; bright = Scale "brightness" 0 200 100; sat = Scale "saturation" 0 200 100; hue = Scale "hue" 0 200 100; command = Magick.command [ "\"%s\"", modcolsp._flag, "-modulate", print bright.value ++ "," ++ print sat.value ++ "," ++ print hue.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_monochrome_item = class Menuaction "_Monochrome" "transform to black and white" { action x = class _result { _vislevel = 3; // FIXME: also intensity? intensity = Magick.intensity_widget; treedepth = Expression "Treedepth" 8; dither = Magick.dither_widget; command = Magick.command [ "\"%s\"", intensity._flag, dither._flag, "-treedepth", print treedepth.expr, "-monochrome", "\"%s\"" ]; _result = Magick.system command x; } } Magick_morphology_item = class // See http://www.imagemagick.org/Usage/morphology/ Menuaction "_Morphology" "apply a morphological method" { action x = class _result { _vislevel = 3; method = Magick.morphmeth_widget; iter = Expression "Iterations (-1=repeat until done)" 1; kernel = Magick.kernel_widget; // FIXME: custom kernel eg "3x1+2+0:1,0,0" // width x height + offsx + offsy : {w*h values} // each value is 0.0 to 1.0 or "NaN" or "-" // kernel args, mostly float radius,scale. radius=0=default. default scale = 1.0 // but // ring takes: radius1, radius2, scale // rectangle and comet take: width x height + offsx + offsy // blur takes: radius x sigma // FIXME: for now, simply allow any string input. kernel_arg = String "Kernel arguments" ""; channels = Magick.channels_widget; command = Magick.command [ "\"%s\"", channels._flag, "-morphology", method._flag ++ ":" ++ print iter.expr, kernel._flag ++ (if kernel_arg.value == "" then "" else ":") ++ kernel_arg.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_negate_item = class Menuaction "_Negate" "negate" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; command = Magick.command [ "\"%s\"", channels._flag, "-negate", "\"%s\"" ]; _result = Magick.system command x; } } Magick_addNoise_item = class Menuaction "_add Noise" "add noise" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; attenuate = Scale "attenuate" 0 1.0 1.0; noise = Magick.noise_widget; command = Magick.command [ "\"%s\"", channels._flag, "-attenuate", print attenuate.value, noise._flag, "\"%s\"" ]; _result = Magick.system command x; } } Magick_normalize_item = class Menuaction "_Normalize" "normalize" { action x = class _result { _vislevel = 3; intensity = Magick.intensity_widget; channels = Magick.channels_widget; command = Magick.command [ "\"%s\"", intensity._flag, channels._flag, "-normalize", "\"%s\"" ]; _result = Magick.system command x; } } Magick_opaque_item = class Menuaction "_Opaque" "change this colour to the fill colour" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; fill = Magick.foreground_widget; changeColour = Magick.changeCol_widget; command = Magick.command [ "\"%s\"", fill._flag, channels._flag, "-fuzz", "\"" ++ print changeColour.fuzz.value ++ "%%\"", (if changeColour.nonMatch then "+" else "-") ++ "opaque", "\"" ++ changeColour.colour._flag ++ "\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_paint_item = class Menuaction "_Paint" "simulate an oil painting" { action x = class _result { _vislevel = 3; rad = Expression "radius" 10; command = Magick.command [ "\"%s\"", "-paint", print rad.expr, "\"%s\"" ]; _result = Magick.system command x; } } /*=== FIXME Bug; remove for now. Polaroid_item = class Menuaction "_Polaroid" "simulate a polaroid picture" { action x = class _result { _vislevel = 3; angle = Scale "angle" (-90) 90 20; command = Magick.command [ "\"%s\"", "-polaroid", print angle.value, "\"%s\"" ]; _result = Magick.system command x; } } ===*/ Magick_posterize_item = class Menuaction "_Posterize" "reduce to (n) levels per channel" { action x = class _result { _vislevel = 3; levels = Expression "levels" 3; command = Magick.command [ "\"%s\"", "-posterize", print levels.expr, "\"%s\"" ]; _result = Magick.system command x; } } Magick_raise_item = class Menuaction "_Raise" "lighten or darken image edges" { action x = class _result { _vislevel = 3; thk = Expression "Thickness" 3; command = Magick.command [ "\"%s\"", "-raise", print thk.expr, "\"%s\"" ]; _result = Magick.system command x; } } Magick_resize_item = class Menuaction "_Resize" "resize to given width and height" { action x = class _result { _vislevel = 3; filter = Magick.filter_widget; type = Magick.ResizeType_widget; width = Scale "Width" 1 100 10; height = Scale "Height" 1 100 10; isPc = Toggle "Width and height are percent" false; command = Magick.command [ "\"%s\"", filter._flag, "-" ++ type._flag, "\"" ++ print width.value ++ "x" ++ print height.value ++ (if isPc then "%%" else "!") ++ "\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_roll_item = class Menuaction "_Roll" "roll an image horizontally or vertically" { action x = class _result { _vislevel = 3; rollx = Expression "X" 3; rolly = Expression "Y" 3; command = Magick.command [ "\"%s\"", "-roll", (if rollx.expr >= 0 then "+" else "") ++ print rollx.expr ++ (if rolly.expr >= 0 then "+" else "") ++ print rolly.expr, "\"%s\"" ]; _result = Magick.system command x; } } Magick_rotate_item = class Menuaction "_Rotate" "rotate" { action x = class _result { _vislevel = 3; angle = Scale "angle (degrees)" (-360) 360 20; virtpixback = Magick.VirtualPixelBack_widget; command = Magick.command [ "\"%s\"", virtpixback._flag, "+distort", "SRT", print angle.value, "+repage", "\"%s\"" ]; _result = Magick.system command x; } } // FIXME: -segment, but cluster-threshold should be percentage of image area. Magick_sepia_item = class Menuaction "_Sepia tone" "simulate a sepia-toned photo" { action x = class _result { _vislevel = 3; threshold = Scale "Threshold (percent)" 0 100 80; command = Magick.command [ "\"%s\"", "-sepia-tone", "\"" ++ print threshold.value ++ "%%\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_shade_item = class Menuaction "_Shade" "shade with a distant light source" { action x = class _result { _vislevel = 3; azimuth = Scale "Azimuth (degrees)" (-360) 360 0; elevation = Scale "Elevation (degrees)" 0 90 45; command = Magick.command [ "\"%s\"", "-shade", print azimuth.value ++ "x" ++ print elevation.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_shadow_item = class Menuaction "_Shadow" "simulate a shadow" { action x = class _result { _vislevel = 3; shadowCol = Magick.generalcol_widget; opacity = Scale "Opacity (percent)" 0 100 75; sigma = Scale "Sigma" 0 30 2; // FIXME: make offsets a single widget? offsx = Scale "X-offset" (-20) 20 4; offsy = Scale "Y-offset" (-20) 20 4; arePc = Toggle "offsets are percentages" false; // FIXME: raw operation creates page offset, which vips dislikes. // So we take this futher, compositing with source. command = Magick.command [ "\"%s\"", "\"(\" +clone", "-background", "\"" ++ shadowCol._flag ++ "\"", "-shadow", concat [ "\"", print opacity.value, "x", print sigma.value, (if offsx.value >= 0 then "+" else ""), print offsx.value, (if offsy.value >= 0 then "+" else ""), print offsy.value, (if arePc then "%%" else ""), "\"" ], "\")\" +swap -background None -layers merge", "+repage", "\"%s\"" ]; _result = Magick.system command x; } } Magick_shave_item = class Menuaction "_Shave" "shave pixels from the edges" { action x = class _result { _vislevel = 3; width = Scale "Width" 0 50 10; height = Scale "Height" 0 50 10; isPc = Toggle "Width and height are percent" false; command = Magick.command [ "\"%s\"", "-shave", "\"" ++ print width.value ++ "x" ++ print height.value ++ (if isPc then "%%" else "") ++ "\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_shear_item = class Menuaction "_Shear" "shear along the x-axis and/or y-axis" { action x = class _result { _vislevel = 3; shearX = Expression "shear X (degrees)" 0; shearY = Expression "shear Y (degrees)" 0; background = Magick.background_widget; command = Magick.command [ "\"%s\"", background._flag, "-shear", print shearX.expr ++ "x" ++ print shearY.expr, "\"%s\"" ]; _result = Magick.system command x; } } Magick_sigmoid_item = class Menuaction "_Sigmoid" "increase or decrease mid-tone contrast sigmoidally" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; contrast = Scale "contrast" 0 30 3; midpoint = Scale "mid-point (percent)" 0 100 50; isInv = Toggle "Invert effect" false; command = Magick.command [ "\"%s\"", channels._flag, (if isInv then "+" else "-") ++ "sigmoidal-contrast", "\"" ++ print contrast.value ++ "x" ++ print midpoint.value ++ "%%\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_sketch_item = class Menuaction "_Sketch" "simulate a pencil sketch" { action x = class _result { _vislevel = 3; radius = Magick.blur_rad_widget; sigma = Magick.sigma_widget; angle = Scale "angle" (-360) 360 0; command = Magick.command [ "\"%s\"", "-sketch", print radius.value ++ "x" ++ print sigma.value ++ (if angle >= 0 then ("+" ++ print angle.value) else ""), "\"%s\"" ]; _result = Magick.system command x; } } Magick_solarize_item = class Menuaction "_Solarize" "negate all pixels above a threshold level" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; threshold = Scale "Threshold (percent)" 0 100 50; command = Magick.command [ "\"%s\"", channels._flag, "-solarize", "\"" ++ print threshold.value ++ "%%\"", "\"%s\"" ]; _result = Magick.system command x; } } // FIXME: -sparse-color needs abitrary list of {x,y,colour}. Magick_splice_item = class Menuaction "_Splice" "splice a colour into the image" { action x = class _result { _vislevel = 3; background = Magick.background_widget; gravity = Magick.gravity_widget; geometry = Magick.WhxyGeometry_widget; command = Magick.command [ "\"%s\"", background._flag, gravity._flag, "-splice", geometry._flag, "\"%s\"" ]; _result = Magick.system command x; } } Magick_spread_item = class Menuaction "_Spread" "displace pixels by random amount" { action x = class _result { _vislevel = 3; virtpixback = Magick.VirtualPixelBack_widget; amount = Expression "Amount (pixels)" 5; command = Magick.command [ "\"%s\"", virtpixback._flag, "-spread", print amount.expr, "\"%s\"" ]; _result = Magick.system command x; } } Magick_statistic_item = class Menuaction "_Statistic" "replace each pixel with statistic from neighbourhood" { action x = class _result { _vislevel = 3; width = Expression "Width" 5; height = Expression "Height" 5; statisticType = Magick.StatType_widget; command = Magick.command [ "\"%s\"", "-statistic", statisticType._flag, print width.expr ++ "x" ++ print height.expr, "\"%s\"" ]; _result = Magick.system command x; } } Magick_swirl_item = class Menuaction "_Swirl" "swirl around the centre" { action x = class _result { _vislevel = 3; angle = Magick.angle_widget; command = Magick.command [ "\"%s\"", "-swirl", print angle.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_thresholdMenu_item = class Menupullright "_Threshold" "make black or white" { Magick_threshold_item = class Menuaction "_Threshold" "apply black/white threshold" { action x = class _result { _vislevel = 3; intensity = Magick.intensity_widget; channels = Magick.channels_widget; threshold = Scale "Threshold (percent)" 0 100 50; command = Magick.command [ "\"%s\"", intensity._flag, channels._flag, "-threshold", "\"" ++ print threshold.value ++ "%%\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_blackThreshold_item = class Menuaction "_Black threshold" "where below threshold set to black" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; threshold = Scale "Threshold (percent)" 0 100 50; command = Magick.command [ "\"%s\"", channels._flag, "-black-threshold", "\"" ++ print threshold.value ++ "%%\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_whiteThreshold_item = class Menuaction "_White threshold" "where above threshold set to white" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; threshold = Scale "Threshold (percent)" 0 100 50; command = Magick.command [ "\"%s\"", channels._flag, "-white-threshold", "\"" ++ print threshold.value ++ "%%\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_latThreshold_item = class Menuaction "_Local Adaptive Threshold" "where above average plus offset set to white, otherwise black" { action x = class _result { _vislevel = 3; width = Expression "Width" 10; height = Expression "Height" 10; offset = Scale "Offset (percent)" (-100) 100 0; // note: "-lat" doesn't respond to channels command = Magick.command [ "\"%s\"", "-lat", concat ["\"", print width.expr, "x", print height.expr, (if offset.value >= 0 then "+" else ""), print offset.value, "%%\"" ], "\"%s\"" ]; _result = Magick.system command x; } } Magick_randThreshold_item = class Menuaction "_Random Threshold" "between specified limits, apply random threshold" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; low = Scale "Low threshold" 0 100 10; high = Scale "High threshold" 0 100 90; isPc = Toggle "Thresholds are percent" true; command = Magick.command [ "\"%s\"", channels._flag, "-random-threshold", "\"" ++ print low.value ++ "x" ++ print high.value ++ (if isPc then "%%" else "") ++ "\"", "\"%s\"" ]; _result = Magick.system command x; } } } // end ThresholdMenu_item // Note: alternatives include: // convert in.tif -write mpr:TILE +delete -size 200x200 -background XXXX -tile-offset +30+30 tile:mpr:TILE out.tif Magick_tile_item = class Menuaction "_Tile" "fill given size with tiled image" { action x = class _result { _vislevel = 3; size = Magick.Size_widget; command = Magick.command [ size._flag, "tile:" ++ "\"%s\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_tint_item = class Menuaction "_Tint" "apply a tint" { action x = class _result { _vislevel = 3; foreground = Magick.foreground_widget; amount = Scale "amount (percent)" 0 100 50; command = Magick.command [ "\"%s\"", foreground._flag, "-tint", // snibgo note: although the amount is a percentage, it doesn't need "%" character. print amount.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_transparent_item = class Menuaction "_Transparent" "make this colour transparent" { action x = class _result { _vislevel = 3; changeColour = Magick.changeCol_widget; command = Magick.command [ "\"%s\"", "-fuzz", "\"" ++ print changeColour.fuzz.value ++ "%%\"", (if changeColour.nonMatch then "+" else "-") ++ "transparent", "\"" ++ changeColour.colour._flag ++ "\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_trim_item = class Menuaction "_Trim" "trims away border" { action x = class _result { _vislevel = 3; fuzz = Magick.fuzz_widget; command = Magick.command [ "\"%s\"", "-fuzz", "\"" ++ print fuzz.value ++ "%%\"", "-trim +repage", "\"%s\"" ]; _result = Magick.system command x; } } Magick_uniqueCols_item = class Menuaction "_Unique colours" "discard all but one of any pixel color" { action x = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "-unique-colors", "\"%s\"" ]; _result = Magick.system command x; } } Magick_vignette_item = class Menuaction "_Vignette" "soften the edges in vignette style" { action x = class _result { _vislevel = 3; radius = Magick.blur_rad_widget; sigma = Magick.sigma_widget; rx = Scale "Rolloff x (percent)" 0 100 10; ry = Scale "Rolloff y (percent)" 0 100 10; background = Magick.background_widget; command = Magick.command [ "\"%s\"", background._flag, "-vignette", print radius.value ++ "x" ++ print sigma.value ++ (if rx.value >= 0 then "+" else "") ++ print rx.value ++ (if ry.value >= 0 then "+" else "") ++ print ry.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_wave_item = class Menuaction "_Wave" "shear the columns into a sine wave" { action x = class _result { _vislevel = 3; amplitude = Scale "Amplitude (pixels)" 0 100 10; wavelength = Scale "Wavelength (pixels)" 0 100 10; command = Magick.command [ "\"%s\"", "-wave", print amplitude.value ++ "x" ++ print wavelength.value, "\"%s\"" ]; _result = Magick.system command x; } } nip2-8.7.0/share/nip2/compat/7.40/_predicate.def0000644000175000017500000003252613224651032015731 00000000000000 /* is_colour_space str: is a string one of nip's colour space names */ is_colour_space str = Image_type.colour_spaces.present 0 str; /* is_colour_type n: is a number one of VIPS's colour spaces */ is_colour_type n = Image_type.colour_spaces.present 1 n; /* is_number: is a real or a complex number. */ is_number a = is_real a || is_complex a; /* is_int: is an integer */ is_int a = is_real a && a == (int) a; /* is_uint: is an unsigned integer */ is_uint a = is_int a && a >= 0; /* is_pint: is a positive integer */ is_pint a = is_int a && a > 0; /* is_preal: is a positive real */ is_preal a = is_real a && a > 0; /* is_ureal: is an unsigned real */ is_ureal a = is_real a && a >= 0; /* is_letter c: true if character c is an ASCII letter * * is_letter :: char -> bool */ is_letter c = ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z'); /* is_digit c: true if character c is an ASCII digit * * is_digit :: char->bool */ is_digit x = '0' <= x && x <= '9'; /* A whitespace character. * * is_space :: char->bool */ is_space = member " \n\t"; /* List str starts with section prefix. * * is_prefix "hell" "hello world!" == true * is_prefix :: [*] -> [*] -> bool */ is_prefix prefix str = take (len prefix) str == prefix; /* List str ends with section suffix. * * is_suffix "ld!" "hello world!" == true * is_suffix :: [*] -> [*] -> bool */ is_suffix suffix str = take (len suffix) (reverse str) == reverse suffix; /* List contains seqence. * * is_substr "llo" "hello world!" == true * is_substr :: [*] -> [*] -> bool */ is_substr seq str = any (map (is_prefix seq) (iterate tl str)); /* is_listof p s: true if finite list with p true for every element. */ is_listof p l = is_list l && all (map p l); /* is_string s: true if finite list of char. */ is_string s = is_listof is_char s; /* is_real_list l: is l a list of real numbers ... test each element, * so no infinite lists pls. */ is_real_list l = is_listof is_real l; /* is_string_list l: is l a finite list of finite strings. */ is_string_list l = is_listof is_string l; /* Test list length ... quicker than len x == n for large lists. */ is_list_len n x = true, x == [] && n == 0 = false, x == [] || n == 0 = is_list_len (n - 1) (tl x); is_list_len_more n x = true, x != [] && n == 0 = false, x == [] || n == 0 = is_list_len_more (n - 1) (tl x); is_list_len_more_equal n x = true, n == 0 = false, x == [] = is_list_len_more_equal (n - 1) (tl x); /* is_rectangular l: is l a rectangular data structure */ is_rectangular l = true, !is_list l = true, all (map is_obj l) = true, all (map is_list l) && all (map (not @ is_obj) l) && all (map is_rectangular l) && is_list_len_more 0 l && all (map (is_list_len (len (hd l))) (tl l)) = false { // treat strings as a base type, not [char] is_obj x = !is_list x || is_string x; } /* is_matrix l: is l a list of lists of real numbers, all the same length * * [[]] is the empty matrix, [] is the empty list ... disallow [] */ is_matrix l = l != [] && is_listof is_real_list l && is_rectangular l; /* is_square_matrix l: is l a matrix with width == height */ is_square_matrix l = true, l == [[]] = is_matrix l && is_list_len (len (hd l)) l; /* is_oddmatrix l: is l a matrix with odd-length sides */ is_oddmatrix l = true, l == [[]] = is_matrix l && len l % 2 == 1 && len l?0 % 2 == 1; /* is_odd_square_matrix l: is l a square_matrix with odd-length sides */ is_odd_square_matrix l = is_square_matrix l && len l % 2 == 1; /* Is an item in a column of a table? */ is_incolumn n table x = member (map (extract n) table) x; /* Is HGuide or VGuide. */ is_HGuide x = is_instanceof "HGuide" x; is_VGuide x = is_instanceof "VGuide" x; is_Guide x = is_HGuide x || is_VGuide x; is_Mark x = is_instanceof "Mark" x; is_Group x = is_instanceof "Group" x; is_NULL x = is_instanceof "NULL" x; is_List x = is_instanceof "List" x; is_Image x = is_instanceof "Image" x; is_Plot x = is_instanceof "Plot" x; is_Region x = is_instanceof "Region" x; is_Real x = is_instanceof "Real" x; is_Matrix x = is_instanceof "Matrix_base" x; is_Vector x = is_instanceof "Vector" x; is_Colour x = is_instanceof "Colour" x; is_Arrow x = is_instanceof "Arrow" x; is_Bool x = is_instanceof "Bool" x; is_Scale x = is_instanceof "Scale" x; is_Rect x = is_instanceof "Rect" x; is_Number x = is_instanceof "Number" x; is_Expression x = is_instanceof "Expression" x; is_String x = is_instanceof "String" x; /* A list of the form [[1,2],[3,4],[5,6]...] */ is_xy_list l = is_list l && all (map xy l) { xy l = is_real_list l && is_list_len 2 l; } // does a nested list structure contain a Group object? contains_Group l = true, is_list l && any (map is_Group l) = any (map contains_Group l), is_list l = false; /* Does an object have a sensible VIPS type? */ has_type x = is_image x || is_Image x || is_Arrow x || is_Colour x; /* Try to get a VIPS image type from an object. */ get_type x = get_type_im x, is_image x = get_type_im x.value, is_Image x = get_type_im x.image.value, is_Arrow x = Image_type.colour_spaces.lookup 0 1 x.colour_space, is_Colour x // slightly odd ... but our display is always 0-255, so it makes sense for // a plain number to be in the same range = Image_type.sRGB, is_real x = oo_unary_function get_type_op x, is_class x = error (_ "bad arguments to " ++ "get_type") { get_type_op = Operator "get_type" get_type Operator_type.COMPOUND false; // get the type from a VIPS image ... but only if it makes sense with // the rest of the image // we often have Type set wrong, hence the ugly guessing :-( // can have alpha, hence we let bands be one more than you might think get_type_im im = Image_type.LABQ, coding == Image_coding.LABPACK = Image_type.GREY16, type == Image_type.GREY16 && is_bands 1 = Image_type.HISTOGRAM, type == Image_type.HISTOGRAM && (width == 1 || height == 1) = Image_type.B_W, is_bands 1 = Image_type.CMYK, type == Image_type.CMYK && is_bands 4 = type, is_colorimetric && is_bands 3 = Image_type.sRGB, !is_colorimetric && is_bands 3 = Image_type.MULTIBAND, !is_colorimetric && !is_bands 3 = type { type = get_header "Type" im; coding = get_header "Coding" im; bands = get_header "Bands" im; width = get_header "Xsize" im; height = get_header "Ysize" im; // 3-band colorimetric types we allow ... the things which the // Colour/Convert To menu can make, excluding mono. ok_types = [ Image_type.sRGB, Image_type.RGB16, Image_type.LAB, Image_type.LABQ, Image_type.LABS, Image_type.LCH, Image_type.XYZ, Image_type.YXY, Image_type.UCS ]; is_colorimetric = member ok_types type; // is bands n, with an optional alpha (ie. can be n + 1 too) is_bands n = bands == n || bands == n + 1; } } has_format x = has_member "format" x || is_Arrow x || is_image x; get_format x = x.format, has_member "format" x = x.image.format, is_Arrow x = get_header "BandFmt" x, is_image x = oo_unary_function get_format_op x, is_class x = error (_ "bad arguments to " ++ "get_format") { get_format_op = Operator "get_format" get_format Operator_type.COMPOUND false; } has_bits x = has_member "bits" x || is_Arrow x || is_image x; get_bits x = x.bits, has_member "bits" x = x.image.bits, is_Arrow x = get_header "Bbits" x, is_image x = oo_unary_function get_bits_op x, is_class x = error (_ "bad arguments to " ++ "get_bits") { get_bits_op = Operator "get_bits" get_format Operator_type.COMPOUND false; } has_bands x = is_image x || has_member "bands" x || is_Arrow x; get_bands x = x.bands, has_member "bands" x = x.image.bands, is_Arrow x = get_header "Bands" x, is_image x = 1, is_real x = len x, is_real_list x = oo_unary_function get_bands_op x, is_class x = error (_ "bad arguments to " ++ "get_bands") { get_bands_op = Operator "get_bands" get_bands Operator_type.COMPOUND false; } has_coding x = has_member "coding" x || is_Arrow x || is_image x; get_coding x = x.coding, has_member "coding" x = x.image.coding, is_Arrow x = get_header "Coding" x, is_image x = Image_coding.NOCODING, is_real x = oo_unary_function get_coding_op x, is_class x = error (_ "bad arguments to " ++ "get_coding") { get_coding_op = Operator "get_coding" get_coding Operator_type.COMPOUND false; } has_xres x = has_member "xres" x || is_Arrow x || is_image x; get_xres x = x.xres, has_member "xres" x = x.image.xres, is_Arrow x = get_header "Xres" x, is_image x = oo_unary_function get_xres_op x, is_class x = error (_ "bad arguments to " ++ "get_xres") { get_xres_op = Operator "get_xres" get_xres Operator_type.COMPOUND false; } has_yres x = has_member "yres" x || is_Arrow x || is_image x; get_yres x = x.yres, has_member "yres" x = x.image.yres, is_Arrow x = get_header "Yres" x, is_image x = oo_unary_function get_yres_op x, is_class x = error (_ "bad arguments to " ++ "get_yres") { get_yres_op = Operator "get_yres" get_yres Operator_type.COMPOUND false; } has_xoffset x = has_member "xoffset" x || is_Arrow x || is_image x; get_xoffset x = x.xoffset, has_member "xoffset" x = x.image.xoffset, is_Arrow x = get_header "Xoffset" x, is_image x = oo_unary_function get_xoffset_op x, is_class x = error (_ "bad arguments to " ++ "get_xoffset") { get_xoffset_op = Operator "get_xoffset" get_xoffset Operator_type.COMPOUND false; } has_yoffset x = has_member "yoffset" x || is_Arrow x || is_image x; get_yoffset x = x.yoffset, has_member "yoffset" x = x.image.yoffset, is_Arrow x = get_header "Yoffset" x, is_image x = oo_unary_function get_yoffset_op x, is_class x = error (_ "bad arguments to " ++ "get_yoffset") { get_yoffset_op = Operator "get_yoffset" get_yoffset Operator_type.COMPOUND false; } has_value = has_member "value"; get_value x = x.value; has_image x = is_image x || is_Image x || is_Arrow x; get_image x = x.value, is_Image x = x.image.value, is_Arrow x = x, is_image x = oo_unary_function get_image_op x, is_class x = error (_ "bad arguments to " ++ "get_image") { get_image_op = Operator "get_image" get_image Operator_type.COMPOUND false; } has_number x = is_number x || is_Real x; get_number x = x.value, is_Real x = x, is_number x = oo_unary_function get_number_op x, is_class x = error (_ "bad arguments to " ++ "get_number") { get_number_op = Operator "get_number" get_number Operator_type.COMPOUND false; } has_real x = is_real x || is_Real x; get_real x = x.value, is_Real x = x, is_real x = oo_unary_function get_real_op x, is_class x = error (_ "bad arguments to " ++ "get_real") { get_real_op = Operator "get_real" get_real Operator_type.COMPOUND false; } has_width x = has_member "width" x || is_image x; get_width x = x.width, has_member "width" x = get_header "Xsize" x, is_image x = oo_unary_function get_width_op x, is_class x = error (_ "bad arguments to " ++ "get_width") { get_width_op = Operator "get_width" get_width Operator_type.COMPOUND false; } has_height x = has_member "height" x || is_image x; get_height x = x.height, has_member "height" x = get_header "Ysize" x, is_image x = oo_unary_function get_height_op x, is_class x = error (_ "bad arguments to " ++ "get_height") { get_height_op = Operator "get_height" get_height Operator_type.COMPOUND false; } has_left x = has_member "left" x; get_left x = x.left, has_member "left" x = oo_unary_function get_left_op x, is_class x = error (_ "bad arguments to " ++ "get_left") { get_left_op = Operator "get_left" get_left Operator_type.COMPOUND false; } has_top x = has_member "top" x; get_top x = x.top, has_member "top" x = oo_unary_function get_top_op x, is_class x = error (_ "bad arguments to " ++ "get_top") { get_top_op = Operator "get_top" get_top Operator_type.COMPOUND false; } // like has/get member, but first in a lst of objects has_member_list has objects = filter has objects != []; // need one with the args swapped get_member = converse dot; // get a member from the first of a list of objects to have it get_member_list has get objects = hd members, members != [] = error "unable to get property" { members = map get (filter has objects); } is_hist x = has_image x && (h == 1 || w == 1 || t == Image_type.HISTOGRAM) { im = get_image x; w = get_width im; h = get_height im; t = get_type im; } get_header field x = oo_unary_function get_header_op x, is_class x = get_header_image x, is_image x = error (_ "bad arguments to " ++ "get_header") { get_header_op = Operator "get_header" (get_header field) Operator_type.COMPOUND false; get_header_image im = im_header_int field im, type == itype = im_header_double field im, type == dtype = im_header_string field im, type == stype1 || type == stype2 = error (_ "image has no field " ++ field), type == 0 = error (_ "unknown type for field " ++ field) { type = im_header_get_typeof field im; itype = name2gtype "gint"; dtype = name2gtype "gdouble"; stype1 = name2gtype "VipsRefString"; stype2 = name2gtype "gchararray"; } } get_header_type field x = oo_unary_function get_header_type_op x, is_class x = im_header_get_typeof field x, is_image x = error (_ "bad arguments to " ++ "get_header_type") { get_header_type_op = Operator "get_header_type" (get_header_type field) Operator_type.COMPOUND false; } set_header field value x = oo_unary_function set_header_op x, is_class x = im_copy_set_meta x field value, is_image x = error (_ "bad arguments to " ++ "set_header") { set_header_op = Operator "set_header" (set_header field value) Operator_type.COMPOUND false; } nip2-8.7.0/share/nip2/compat/7.40/Widgets.def0000644000175000017500000000235313224651032015233 00000000000000Widget_slider_item = class Menuaction "_Scale" "make a new scale widget" { icon = "nip-slider-16.png"; action = Scale "untitled scale" 0 255 128; } Widget_toggle_item = class Menuaction "_Toggle" "make a new toggle widget" { action = Toggle "untitled toggle" false; } Widget_option_item = class Menuaction "_Option" "make a new option widget" { action = Option "untitled option" ["option0", "option1"] 0; } Widget_string_item = class Menuaction "St_ring" "make a new string widget" { action = String "Enter a string" "sample text"; } Widget_number_item = class Menuaction "_Number" "make a new number widget" { action = Number "Enter a number" 42; } Widget_expression_item = class Menuaction "_Expression" "make a new expression widget" { action = Expression "Enter an expression" 42; } Widget_pathname_item = class Menuaction "_File Chooser" "make a new file chooser widget" { action = Pathname "Pick a file" "$VIPSHOME/share/$PACKAGE/data/print_test_image.v"; } Widget_font_item = class Menuaction "F_ont Chooser" "make a new font chooser widget" { action = Fontname "Pick a font" Workspaces.Preferences.PAINTBOX_FONT; } Widget_clock_item = class Menuaction "_Clock" "make a new clock widget" { action = Clock 1 1; } nip2-8.7.0/share/nip2/compat/7.40/Colour.def0000644000175000017500000003762213224651032015077 00000000000000 Colour_new_item = class Menupullright (_ "_New") (_ "make a patch of colour") { Widget_colour_item = class Menuaction (_ "_Colour") (_ "make a patch of colour") { action = Colour_picker "Lab" [50,0,0]; } LAB_colour = class Menuaction (_ "CIE Lab _Picker") (_ "pick colour in CIE Lab space") { action = widget "Lab" [50, 0, 0]; // ab_slice size size = 512; // range of values ... +/- 128 for ab range = 256; // map xy in slice image to ab and back xy2ab x = x / (size / range) - 128; ab2xy a = (a + 128) * (size / range); widget space default_value = class Colour space _result { _vislevel = 3; [_L, _a, _b] = default_value; L = Scale "Lightness" 0 100 _L; ab_slice = Image (lab_slice size L.value); point = Mark ab_slice (ab2xy _a) (ab2xy _b); _result = [L.value, xy2ab point.left, xy2ab point.top]; Colour_edit colour_space value = widget colour_space value; } } CCT_colour = class Menuaction (_ "Colour from CCT") (_ "pick colour by CCT") { action = widget 6500; widget x = class _result { _vislevel = 3; T = Scale "CCT" 1800 25000 x; _result = colour_from_temp (to_real T); Colour_edit space value = widget (temp_from_colour (Colour space value)); } } } Colour_to_colour_item = class Menuaction (_ "Con_vert to Colour") (_ "convert anything to a colour") { action x = to_colour x; } #separator Colour_convert_item = class Menupullright (_ "_Colourspace") (_ "convert to various colour spaces") { spaces = Image_type.image_colour_spaces; conv dest x = class _result { _vislevel = 3; to = Option_enum (_ "Convert to") spaces (spaces.get_name dest); _result = map_unary (colour_transform_to to.value_thing) x; } Mono_item = class Menuaction (_ "_Monochrome") (_ "convert to mono colourspace") { action x = conv Image_type.B_W x; } sRGB_item = class Menuaction (_ "_sRGB") (_ "convert to sRGB colourspace") { action x = conv Image_type.sRGB x; } GREY16_item = class Menuaction (_ "_GREY16") (_ "convert to GREY16 colourspace") { action x = conv Image_type.GREY16 x; } RGB16_item = class Menuaction (_ "_RGB16") (_ "convert to RGB16 colourspace") { action x = conv Image_type.RGB16 x; } Lab_item = class Menuaction (_ "_Lab") (_ "convert to Lab colourspace (float Lab)") { action x = conv Image_type.LAB x; } LabQ_item = class Menuaction (_ "Lab_Q") (_ "convert to LabQ colourspace (32-bit Lab)") { action x = conv Image_type.LABQ x; } LabS_item = class Menuaction (_ "Lab_S") (_ "convert to LabS colourspace (48-bit Lab)") { action x = conv Image_type.LABS x; } LCh_item = class Menuaction (_ "L_Ch") (_ "convert to LCh colourspace") { action x = conv Image_type.LCH x; } XYZ_item = class Menuaction (_ "_XYZ") (_ "convert to XYZ colourspace") { action x = conv Image_type.XYZ x; } Yxy_item = class Menuaction (_ "_Yxy") (_ "convert to Yxy colourspace") { action x = conv Image_type.YXY x; } UCS_item = class Menuaction (_ "_UCS") (_ "convert to UCS colourspace") { action x = conv Image_type.UCS x; } } /* mark objects as being in various colourspaces */ Colour_tag_item = class Menupullright (_ "_Tag As") (_ "tag object as being in various colour spaces") { spaces = Image_type.image_colour_spaces; tag dest x = class _result { _vislevel = 3; to = Option_enum (_ "Tag as") spaces (spaces.get_name dest); _result = map_unary (image_set_type to.value_thing) x; } Mono_item = class Menuaction (_ "_Monochrome") (_ "tag as being in mono colourspace") { action x = tag Image_type.B_W x; } sRGB_item = class Menuaction (_ "_sRGB") (_ "tag as being in sRGB colourspace") { action x = tag Image_type.sRGB x; } RGB16_item = class Menuaction (_ "_RGB16") (_ "tag as being in RGB16 colourspace") { action x = tag Image_type.RGB16 x; } GREY16_item = class Menuaction (_ "_GREY16") (_ "tag as being in GREY16 colourspace") { action x = tag Image_type.GREY16 x; } Lab_item = class Menuaction (_ "_Lab") (_ "tag as being in Lab colourspace (float Lab)") { action x = tag Image_type.LAB x; } LabQ_item = class Menuaction (_ "Lab_Q") (_ "tag as being in LabQ colourspace (32-bit Lab)") { action x = tag Image_type.LABQ x; } LabS_item = class Menuaction (_ "Lab_S") (_ "tag as being in LabS colourspace (48-bit Lab)") { action x = tag Image_type.LABS x; } LCh_item = class Menuaction (_ "L_Ch") (_ "tag as being in LCh colourspace") { action x = tag Image_type.LCH x; } XYZ_item = class Menuaction (_ "_XYZ") (_ "tag as being in XYZ colourspace") { action x = tag Image_type.XYZ x; } Yxy_item = class Menuaction (_ "_Yxy") (_ "tag as being in Yxy colourspace") { action x = tag Image_type.YXY x; } UCS_item = class Menuaction (_ "_UCS") (_ "tag as being in UCS colourspace") { action x = tag Image_type.UCS x; } } Colour_temperature_item = class Menupullright (_ "Te_mperature") (_ "colour temperature conversions") { Whitepoint_item = class Menuaction (_ "_Move Whitepoint") (_ "change whitepoint") { action x = class _result { _vislevel = 3; old_white = Option_enum (_ "Old whitepoint") Whitepoints "D65"; new_white = Option_enum (_ "New whitepoint") Whitepoints "D50"; _result = map_unary process x { process im = im''' { im' = colour_transform_to Image_type.XYZ im; im'' = im' * (new_white.value_thing / old_white.value_thing); im''' = colour_transform_to (get_type im) im''; } } } } D65_to_D50_item = class Menupullright (_ "D_65 to D50") (_ "complex conversion") { XYZ_minimal_item = class Menuaction (_ "_Minimal") (_ "D65 to D50 using the minimal 3x3 matrix in XYZ") { action x = map_unary process x { process im = im''' { im' = colour_transform_to Image_type.XYZ im; im'' = recomb D652D50_direct im'; im''' = colour_transform_to (get_type im) im''; } } } Bradford_item = class Menuaction (_ "_Bradford") (_ "D65 to D50 in Bradford cone space") { action x = map_unary process x { process im = im''' { im' = colour_transform_to Image_type.XYZ im; im'' = im_D652D50 im'; im''' = colour_transform_to (get_type im) im''; } } } } D50_to_D65_item = class Menupullright (_ "D_50 to D65") (_ "complex conversion") { XYZ_minimal_item = class Menuaction (_ "_Minimal") (_ "D50 to D65 using the minimal 3x3 matrix in XYZ") { action x = map_unary process x { process im = im''' { im' = colour_transform_to Image_type.XYZ im; im'' = recomb D502D65_direct im'; im''' = colour_transform_to (get_type im) im''; } } } Bradford_item = class Menuaction (_ "_Bradford") (_ "D60 to D65 in Bradford cone space") { action x = map_unary process x { process im = im''' { im' = colour_transform_to Image_type.XYZ im; im'' = im_D502D65 im'; im''' = colour_transform_to (get_type im) im''; } } } } Lab_to_D50XYZ_item = class Menuaction (_ "_Lab to D50 XYZ") (_ "Lab to XYZ with a D50 whitepoint") { action x = map_unary (colour_unary im_D50Lab2XYZ) x; } D50XYZ_to_Lab_item = class Menuaction (_ "D50 _XYZ to Lab") (_ "XYZ to Lab with a D50 whitepoint") { action x = map_unary (colour_unary im_D50XYZ2Lab) x; } sep1 = Menuseparator; CCT_item = class Menuaction (_ "Calculate temperature") (_ "estimate CCT using the McCamy approximation") { action z = map_unary temp_from_colour z; } Colour_item = Colour_new_item.CCT_colour; } Colour_icc_item = class Menupullright (_ "_ICC") (_ "transform with ICC profiles") { print_profile = "$VIPSHOME/share/$PACKAGE/data/cmyk.icm"; monitor_profile = "$VIPSHOME/share/$PACKAGE/data/sRGB.icm"; guess_profile image = monitor_profile, has_bands image && get_bands image == 3 = print_profile; render_intents = Option_enum (_ "Render intent") Render_intent.names (_ "Absolute"); Export_item = class Menuaction (_ "_Export") (_ "export from PCS to device space") { action x = class _result { _vislevel = 3; profile = Pathname (_ "Output profile") print_profile; intent = render_intents; depth = Option (_ "Output depth") [_ "8 bit", _ "16 bit"] 0; _result = map_unary process x { process image = icc_export [8, 16]?depth profile.value intent.value_thing lab { lab = colour_transform_to Image_type.LABQ image; } } } } Import_item = class Menuaction (_ "_Import") (_ "import from device space to PCS") { action x = class _result { _vislevel = 3; embedded = Toggle (_ "Use embedded profile if possible") false; profile = Pathname (_ "Default input profile") (guess_profile x); intent = render_intents; _result = map_unary process x { process image = icc_import_embedded intent.value_thing image, get_header_type "icc-profile-data" image != 0 && embedded = icc_import profile.value intent.value_thing image; } } } Transform_item = class Menuaction (_ "_Transform") (_ "transform between two device spaces") { action x = class _result { _vislevel = 3; in_profile = Pathname (_ "Input profile") (guess_profile x); out_profile = Pathname (_ "Output profile") print_profile; intent = render_intents; _result = map_unary process x { process image = icc_transform in_profile.value out_profile.value intent.value_thing image; } } } AC2RC_item = class Menuaction (_ "_Absolute to Relative") (_ "absolute to relative colorimetry using device profile") { action x = class _result { _vislevel = 3; profile = Pathname (_ "Pick a profile") (guess_profile x); _result = map_unary process x { process image = icc_ac2rc profile.value lab { lab = colour_transform_to Image_type.LAB image; } } } } } Colour_rad_item = class Menupullright (_ "_Radiance") (_ "convert to and from Radiance packed format") { Unpack_item = class Menuaction (_ "Unpack") (_ "unpack Radiance format to float") { action x = map_unary rad2float x; } Pack_item = class Menuaction (_ "Pack") (_ "pack 3-band float to Radiance format") { action x = map_unary float2rad x; } } #separator Colour_dE_item = class Menupullright (_ "_Difference") (_ "calculate colour difference") { /* Apply a converter to an object ... convert image or colour (since * we can guess the colour space we're converting from), don't convert * matrix or vector (since we can't tell ... assume it's in the right * space already). */ apply_cvt cvt x = cvt x, is_Image x || is_Colour x || is_image x = x; diff cvt in1 in2 = abs_vec (apply_cvt cvt in1 - apply_cvt cvt in2); /* Converter to LAB. */ lab_cvt = colour_transform_to Image_type.LAB; /* Converter to UCS ... plain UCS is Ch form, so we go LAB again after * to make sure we get a rectangular coord system. */ ucs_cvt = colour_transform Image_type.LCH Image_type.LAB @ colour_transform_to Image_type.UCS; CIEdE76_item = class Menuaction (_ "CIE dE _76") (_ "calculate CIE dE 1976 for two objects") { action a b = map_binary (diff lab_cvt) a b; } CIEdE00_item = class Menuaction (_ "CIE dE _00") (_ "calculate CIE dE 2000 for two objects") { action a b = map_binary (colour_binary (_ "im_dE00_fromLab") im_dE00_fromLab) a b; } UCS_item = class Menuaction (_ "_CMC(l:l)") (_ "calculate CMC(l:l) for two objects") { action a b = map_binary (diff ucs_cvt) a b; } } Colour_adjust_item = class Menupullright (_ "_Adjust") (_ "alter colours in various ways") { Recombination_item = class Menuaction (_ "_Recombination") (_ "recombine colour with an editable matrix") { action x = class _result { _vislevel = 3; matrix = Matrix_rec (identity_matrix (bands x)) { // try to guess a sensible value for the size of the // matrix bands x = x.bands, is_Image x || is_Colour x = x.width, is_Matrix x = bands x.value?0, is_Group x = x.bands, has_member "bands" x = 3; } _result = map_unary (recomb matrix) x; } } Cast_item = class Menuaction (_ "_Cast") (_ "displace neutral axis in CIE Lab") { action x = class _result { _vislevel = 3; gr = Scale "Green-red" (-20) 20 0; by = Scale "Blue-yellow" (-20) 20 0; _result = map_unary adjust_cast x { adjust_cast in = colour_transform_to (get_type in) in'' { in' = colour_transform_to Image_type.LAB in; in'' = in' + Vector [0, gr.value, by.value]; } } } } HSB_item = class Menuaction (_ "_HSB") (_ "adjust hue-saturation-brightness in LCh") { action x = class _result { _vislevel = 3; h = Scale "Hue" 0 360 0; s = Scale "Saturation" 0.01 5 1; b = Scale "Brightness" 0.01 5 1; _result = map_unary adjust_hsb x { adjust_hsb in = colour_transform_to (get_type in) in'' { in' = colour_transform_to Image_type.LCH in; in'' = in' * Vector [b.value, s.value, 1] + Vector [0, 0, h.value]; } } } } } Colour_similar_item = class Menuaction (_ "_Similar Colour") (_ "find pixels with a similar colour") { action x = class _result { _vislevel = 3; target_colour = Colour_picker "Lab" [50, 0, 0]; t = Scale "dE threshold" 0 100 10; _result = map_unary match x { match in = abs_vec (in' - target) < t { target = colour_transform_to Image_type.LAB target_colour; in' = colour_transform_to Image_type.LAB in; } } } } #separator Colour_chart_to_matrix_item = class Menuaction (_ "_Measure Colour Chart") (_ "measure average pixel values for a colour chart image") { action x = class _result { _vislevel = 3; pacross = Expression (_ "Patches across chart") 6; pdown = Expression (_ "Patches down chart") 4; measure = Scale (_ "Measure area (%)") 1 100 50; // get a representative image from an arg get_image x = get_image x.value?0, is_Group x = x; _im = get_image x; sample = measure_draw (to_real pacross) (to_real pdown) (to_real measure) _im; _result = map_unary chart x { chart in = measure_sample (to_real pacross) (to_real pdown) (to_real measure) in; } } } Colour_matrix_to_chart_item = class Menuaction (_ "Make Synth_etic Colour Chart") (_ "make a colour chart image from a matrix of measurements") { action x = class _result { _vislevel = 3; pacross = Expression (_ "Patches across chart") 6; pdown = Expression (_ "Patches down chart") 4; pwidth = Expression (_ "Patch width in pixels") 50; pheight = Expression (_ "Patch height in pixels") 50; bwidth = Expression (_ "Border between patches") 0; _result = map_unary build_chart x { build_chart in = Image (imagearray_assemble (to_real bwidth) (to_real bwidth) patch_table) { // patch numbers for row starts rowstart = map (multiply (to_real pacross)) [0 .. to_real pdown - 1]; // assemble patches ... each one a pixel value patches = map (take (to_real pacross)) (map (converse drop in.value) rowstart); // make an n-band constant image from eg. [1,2,3] // we don't know the format .. use sRGB (well, why not?) patch v = image_new (to_real pwidth) (to_real pheight) (len v) Image_format.FLOAT Image_coding.NOCODING Image_type.sRGB (Vector v) 0 0; // make an image for each patch patch_table = map (map patch) patches; } } } } Colour_plot_ab_scatter_item = class Menuaction (_ "_Plot ab Scatter") (_ "plot an ab scatter histogram") { action x = class _result { _vislevel = 3; bins = Expression (_ "Number of bins on each axis") 8; _result = map_unary plot_scatter x { plot_scatter in = Image (bg * (((90 / mx) * hist) ++ blk)) { lab = colour_transform_to Image_type.LAB in.value; ab = (unsigned char) ((lab?1 ++ lab?2) + 128); hist = hist_find_nD bins.expr ab; mx = max hist; bg = lab_slice bins.expr 1; blk = 1 + im_black (to_real bins) (to_real bins) 2; } } } } nip2-8.7.0/share/nip2/compat/7.40/_joe_extra.def0000644000175000017500000003114713224651032015747 00000000000000//////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// Frame_item = class Menupullright "Picture _Frame" "working with images of frames" { //////////////////////////////////////////////////////////////////////////////////// Build_frame_item = class Menupullright "_Build Frame From" "builds a new frame from image a and places it around image b" { //////////////////////////////////////////////////////////////////////////////////// Frame_corner_item = class Menuaction "_Frame Corner" "copies and extends a frame corner, a, to produce a complete frame to fit round a given image, b" { prefs = Workspaces.Preferences; action a b = class _result { _check_args = [ [a, "a", check_Image], [b, "b", check_Image] ]; _check_all = [ [a.coding == b.coding && a.bands == b.bands, "a.coding == b.coding && a.bands == b.bands"] ]; _vislevel = 3; ppcm = Expression "Number of pixels per cm" 25; /* Given the value of ppcm, distance between the inner edge of the frame * and the outer edge of the image. +ve values mean the frame overlaps * the image. */ overlap = Expression "Size of frame overlap in cm" 0; variables = Frame_variables 0; _type = Image_type.colour_spaces.get_name b.type; //If applied the count colour be seen for -ve values of overlap mount_options = Mount_options _type ppcm.expr; _cs = variables.corner_section.value; _ms = variables.middle_section.value; _ov = ppcm.expr * overlap.expr; _sf = variables.scale_factor.expr; _bf = variables.blend_fraction.value; //Scale frame image if required. _a = a, _sf == 1; = a, _sf == 0; = Image (resize Interpolate_bilinear _sf _sf a.value); _im_w = b.width; _im_h = b.height + mount_options._los, mount_options.apply = b.height; _os = mount_options._los, mount_options.apply = 0; _cl = Vector mount_options.mount_colour.value, mount_options.apply = 0; //Produce scaled and resized frame. frame = corner_frame _a _im_w _im_h _ov _cs _ms _bf; //Resize image canvas and applied mount colour as required. _pos_im = frame_position_image b frame _os _cl; //Wrap frame round image. _result = if (frame == 0) then _pos_im else frame; } } //////////////////////////////////////////////////////////////////////////////////// Simple_frame_item = class Menuaction "_Simple Frame" "extends or shortens the central sections of a simple frame, a, to fit round a given image, b" { prefs = Workspaces.Preferences; action a b = class _result { _check_args = [ [a, "a", check_Image], [b, "b", check_Image] ]; _check_all = [ [a.coding == b.coding && a.bands == b.bands, "a.coding == b.coding && a.bands == b.bands"] ]; _vislevel = 3; ppcm = Expression "Number of pixels per cm" 25; /* Given the value of ppcm, distance between the inner edge of the frame * and the outer edge of the image. +ve values mean the frame overlaps * the image. */ overlap = Expression "Size of frame overlap in cm" 0; variables = Frame_variables 0; _type = Image_type.colour_spaces.get_name b.type; //If applied the count colour be seen for -ve values of overlap mount_options = Mount_options _type ppcm.expr; _cs = variables.corner_section.value; _ms = variables.middle_section.value; _ov = ppcm.expr * overlap.expr; _sf = variables.scale_factor.expr; _bf = variables.blend_fraction.value; //Scale frame image if required. _a = a, _sf == 1; = a, _sf == 0; = Image (resize Interpolate_bilinear _sf _sf a.value); _im_w = b.width; _im_h = b.height + mount_options._los, mount_options.apply = b.height; _os = mount_options._los, mount_options.apply = 0; _cl = Vector mount_options.mount_colour.value, mount_options.apply = 0; //Produce scaled and resized frame. frame = simple_frame _a _im_w _im_h _ov _cs _ms _bf variables.option; //Resize image canvas and applied mount colour as required. _pos_im = frame_position_image b frame _os _cl; //Wrap frame round image. _result = if (frame == 0) then _pos_im else frame; } } //////////////////////////////////////////////////////////////////////////////////// Complex_frame_item = class Menuaction "_Complex Frame" "extends or shortens the central sections of a frame a, preserving any central edge details, to fit image b" { prefs = Workspaces.Preferences; action a b = class _result { _check_args = [ [a, "a", check_Image], [b, "b", check_Image] ]; _check_all = [ [a.coding == b.coding && a.bands == b.bands, "a.coding == b.coding && a.bands == b.bands"] ]; _vislevel = 3; ppcm = Expression "Number of pixels per cm" 25; /* Given the value of ppcm, distance between the inner edge of the frame * and the outer edge of the image. +ve values mean the frame overlaps * the image. */ overlap = Expression "Size of frame overlap in cm" 0; variables = Frame_variables 1; _type = Image_type.colour_spaces.get_name b.type; //If applied the count colour be seen for -ve values of overlap mount_options = Mount_options _type ppcm.expr; _cs = variables.corner_section.value; _es = variables.edge_section.value; _ms = variables.middle_section.value; _ov = ppcm.expr * overlap.expr; _sf = variables.scale_factor.expr; _bf = variables.blend_fraction.value; _a = a, _sf == 1; = a, _sf == 0; = Image (resize Interpolate_bilinear _sf _sf a.value); _im_w = b.width; _im_h = b.height + mount_options._los, mount_options.apply = b.height; _os = mount_options._los, mount_options.apply = 0; _cl = Vector mount_options.colour.value, mount_options.apply = 0; //Produce scaled and resized frame. frame = complex_frame _a _im_w _im_h _ov _cs _es _ms _bf variables.option; //Resize image canvas and applied mount colour as required. _pos_im = frame_position_image b frame _os _cl; //Wrap frame round image. _result = if (frame == 0) then _pos_im else frame; } } } //////////////////////////////////////////////////////////////////////////////////// Straighten_frame_item = class Menuaction "_Straighten Frame" "uses four points to square up distorted images of frames" { action a = Perspective_item.action a; } }; //////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// Select_item = class Menupullright "_Select" "select user defined areas of an image" { prefs = Workspaces.Preferences; /* Option toggle used to define whether the user is replacing a * dark or a light area. */ _control = Option "Make" [ "Selection Brighter", "Selection Darker", "Selection Black", "Selection White", "Background Black", "Background White", "Mask" ] 4; control_selection mask im no = [ if mask then im * 1.2 else im * 1, if mask then im * 0.8 else im * 1, if mask then 0 else im, if mask then 255 else im, if mask then im else 0, if mask then im else 255, mask ]?no; Rectangle = class Menuaction "_Rectangle" "use an Arrow or Region x to define a rectangle" { action x = class _result { _vislevel = 3; control = _control; _result = control_selection mask im control { im = x.image; mask = Image m { rx = x.region_rect, is_Region x = x; b = image_new im.width im.height 1 0 0 1 0 0 0; w = image_new rx.nwidth rx.nheight 1 0 0 1 255 0 0; m = insert_noexpand rx.nleft rx.ntop w b; } } } } Elipse = class Menuaction "_Ellipse" "use a line/arrow x to define the center point radius and direction of an ellipse" { action x = class _result { _vislevel = 3; control = _control; width = Scale "Width" 0.01 1 0.5; _result = control_selection mask im control { mask = select_ellipse x width.value; im = x.image; } } } Tetragon = class Menuaction "_Tetragon" "selects the convex area defined by four points" { action a b c d = class _result { _vislevel = 3; control = _control; _result = control_selection mask im control { mask = select_tetragon a b c d; im = get_image a; } } } Polygon = class Menuaction "_Polygon" "selects a polygon from an ordered group of points" { action pt_list = class _result { _vislevel = 3; control = _control; _result = control_selection mask im control { mask = select_polygon pt_list; im = get_image ((pt_list.value)?0); } } } sep1 = Menuseparator; Threshold_item = class Menuaction "Thres_hold" "simple image threshold" { action x = class _result { _vislevel = 3; t = Scale "Threshold" 0 mx (mx / 2) { mx = Image_format.maxval x.format, is_Image x = 255; } _result = map_unary (more t.value) x; } } Threshold_percent_item = class Menuaction "Per_cent Threshold" "threshold at a percentage of pixels" { action x = class _result { _vislevel = 3; t = Scale "Percentage of pixels" 0 100 50; _result = map_unary (more (hist_thresh (t.value / 100) x)) x; } } sep2 = Menuseparator; Segment_item = class Menuaction "_Segment" "break image into disjoint regions" { action x = class _result { _vislevel = 3; segments = Expression "Number of disjoint regions" (map_unary (get_header "n-segments") _result); _result = map_unary segment x; } } }; //////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// Perspective_match_item = class Menuaction "_Perspective Match" "rotate, scale and skew one image to match another" { action x y = class _result { _vislevel = 3; // try to find an image ... for a group, get the first item find_image x = x, is_Image x = find_image x?0, is_list x = find_image x.value, is_class x && has_value x = error "unable to find image"; _a = find_image x; _b = find_image y; ap1 = Mark_relative _a 0.1 0.1; ap2 = Mark_relative _a 0.9 0.1; ap3 = Mark_relative _a 0.1 0.9; ap4 = Mark_relative _a 0.9 0.9; bp1 = Mark_relative _b 0.1 0.1; bp2 = Mark_relative _b 0.9 0.1; bp3 = Mark_relative _b 0.1 0.9; bp4 = Mark_relative _b 0.9 0.9; _result = map_binary process x y { f1 = _a.width / _b.width; f2 = _a.height / _b.height; rl = sort_pts_clockwise [ap1, ap2, ap3, ap4]; pl = sort_pts_clockwise [bp1, bp2, bp3, bp4]; to = [ rl?0.left, rl?0.top, rl?1.left, rl?1.top, rl?2.left, rl?2.top, rl?3.left, rl?3.top ]; from = [ pl?0.left * f1, pl?0.top * f2, pl?1.left * f1, pl?1.top * f2, pl?2.left * f1, pl?2.top * f2, pl?3.left * f1, pl?3.top * f2 ]; trans = perspective_transform to from; process a b = transform 1 0 trans b2 { b2 = resize Interpolate_bilinear f1 f2 b, (f1 >= 1 && f2 >= 1) || (f1 >= 1 && f2 >= 1) = resize Interpolate_bilinear f1 1 b1 {b1 = resize Interpolate_bilinear 1 f2 b;} } } } }; //////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// Perspective_item = class Menuaction "Pe_rspective Distort" "rotate, scale and skew an image with respect to defined points" { action x = class _result { _vislevel = 3; // try to find an image ... for a group, get the first item find_image x = x, is_Image x = find_image x?0, is_list x = find_image x.value, is_class x && has_value x = error "unable to find image"; _a = find_image x; dir = Option "Select distort direction" [ "Distort to points", "Distort to corners" ] 1; ap1 = Mark_relative _a 0.1 0.1; ap2 = Mark_relative _a 0.9 0.1; ap3 = Mark_relative _a 0.9 0.9; ap4 = Mark_relative _a 0.1 0.9; _result = map_unary process x { trans = [perspective_transform to from, perspective_transform from to]?(dir.value) { rl = sort_pts_clockwise [ap1, ap2, ap3, ap4]; to = [(rl?0).left, (rl?0).top, (rl?1).left, (rl?1).top, (rl?2).left, (rl?2).top, (rl?3).left, (rl?3).top]; from=[0, 0, (_a.width - 1), 0, (_a.width - 1), (_a.height - 1), 0, (_a.height - 1)]; } process a = transform 1 0 trans a; } } }; nip2-8.7.0/share/nip2/compat/7.40/_generate.def0000644000175000017500000000755513224651032015567 00000000000000 /* make an image of size x by y whose pixels are their coordinates. */ make_xy x y = im_make_xy (to_real x) (to_real y); /* make an image with the specified properties ... pixel is (eg.) * Vector [0, 0, 0], or 12. If coding == labq, we ignore bands, format and * type, generate a 3 band float image, and lab2labq it before handing it * back. */ image_new w h b fmt coding type pixel xoff yoff = embed 1 0 0 w h im'''' { b' = 3, coding == Image_coding.LABPACK = b; fmt' = Image_format.FLOAT, coding == Image_coding.LABPACK = fmt; type' = Image_type.LAB, coding == Image_coding.LABPACK = type; im = im_black 1 1 (to_real b') + pixel; im' = clip2fmt fmt' im; im'' = im_Lab2LabQ im', coding == Image_coding.LABPACK; = im'; im''' = image_set_type type' im''; im'''' = image_set_origin xoff yoff im'''; } mkim options x y b = Image (image_new x y b (opt $format) (opt $coding) (opt $type) (opt $pixel) (opt $xoffset) (opt $yoffset)) { opt = get_option options [ $format => Image_format.UCHAR, $coding => Image_coding.NOCODING, $type => Image_type.sRGB, $pixel => 0, $xoffset => 0, $yoffset => 0 ]; } /* generate a slice of LAB space size x size pixels for L* == l */ lab_slice size l = image_set_type Image_type.LAB im { L = image_new size size 1 Image_format.FLOAT Image_coding.NOCODING Image_type.B_W l 0 0; A1 = im_fgrey (to_real size) (to_real size); /* im_fgrey always makes 0-1, so these ranges can be wired in. */ A2 = A1 * 256 - 128; A4 = im_rot90 A2; im = image_set_origin (size / 2) (size / 2) (L ++ A2 ++ A4); } /* Look at Image, try to make a Colour (failing that, a Vector) which is white * for that image type. */ image_white im = colour_transform_to type white_lab, bands == 3 && coding == Image_coding.NOCODING && colour_spaces.present 1 type = white_lab, coding == Image_coding.LABPACK = Vector (replicate bands (max_value.lookup 1 0 format)) { bands = im.bands; type = im.type; format = im.format; coding = im.coding; colour_spaces = Image_type.colour_spaces; // white as LAB white_lab = Colour "Lab" [100, 0, 0]; // maximum value for this numeric type max_value = Table [ [255, Image_format.DPCOMPLEX], [255, Image_format.DOUBLE], [255, Image_format.COMPLEX], [255, Image_format.FLOAT], [2 ** 31 - 1, Image_format.INT], [2 ** 32 - 1, Image_format.UINT], [2 ** 15 - 1, Image_format.SHORT], [2 ** 16 - 1, Image_format.USHORT], [2 ** 7 - 1, Image_format.CHAR], [2 ** 8 - 1, Image_format.UCHAR] ]; } /* Make a seperable gaussian mask. */ matrix_gaussian_blur radius = im_gauss_imask_sep (radius / 3) 0.2; /* Make a seperable square mask. */ matrix_blur radius = Matrix_con (sum mask_sq_line) 0 [mask_sq_line] { mask_sq_line = replicate (2 * radius - 1) 1; } /* Make a colour from a temperature. */ colour_from_temp T = error (_ "T out of range"), T < 1667 || T > 25000 = Colour "Yxy" [50, x, y] { // Kim et all approximation // see eg. http://en.wikipedia.org/wiki/Planckian_locus#Approximation x = -0.2661239 * 10 ** 9 / T ** 3 - 0.2343580 * 10 ** 6 / T ** 2 + 0.8776956 * 10 ** 3 / T + 0.179910, T < 4000 = -3.0258469 * 10 ** 9 / T ** 3 + 2.1070379 * 10 ** 6 / T ** 2 + 0.2226347 * 10 ** 3 / T + 0.240390; y = -1.1063814 * x ** 3 - 1.34811020 * x ** 2 + 2.18555832 * x - 0.20219638, T < 2222 = -0.9549476 * x ** 3 - 1.37418593 * x ** 2 + 2.09137015 * x - 0.16748867, T < 4000 = 3.0817580 * x ** 3 - 5.87338670 * x ** 2 + 3.75112997 * x - 0.37001483; } temp_from_colour z = T { c = colour_transform_to Image_type.YXY (to_colour z); x = c.value?1; y = c.value?2; // McCamy's approximation, see eg. // http://en.wikipedia.org/wiki/Color_temperature#Approximation xe = 0.332; ye = 0.1858; n = (x - xe) / (y - ye); T = -449 * n ** 3 + 3525 * n ** 2 - 6823.3 * n + 5520.33; } nip2-8.7.0/share/nip2/compat/7.40/Math.def0000644000175000017500000003162513224651032014522 00000000000000Math_arithmetic_item = class Menupullright "_Arithmetic" "basic arithmetic for objects" { Add_item = class Menuaction "_Add" "add a and b" { action a b = map_binary add a b; } Subtract_item = class Menuaction "_Subtract" "subtract b from a" { action a b = map_binary subtract a b; } Multiply_item = class Menuaction "_Multiply" "multiply a by b" { action a b = map_binary multiply a b; } Divide_item = class Menuaction "_Divide" "divide a by b" { action a b = map_binary divide a b; } Remainder_item = class Menuaction "_Remainder" "remainder after integer division of a by b" { action a b = map_binary remainder a b; } sep1 = Menuseparator; Absolute_value_item = class Menuaction "A_bsolute Value" "absolute value of x" { action x = map_unary abs x; } Absolute_value_vector_item = class Menuaction "Absolute Value _Vector" "like Absolute Value, but treat pixels as vectors" { action x = map_unary abs_vec x; } Sign_item = class Menuaction "S_ign" "unit vector" { action x = map_unary sign x; } Negate_item = class Menuaction "_Negate" "multiply by -1" { action x = map_unary unary_minus x; } } Math_trig_item = class Menupullright "_Trigonometry" "trigonometry operations (all in degrees)" { Sin_item = class Menuaction "_Sine" "calculate sine x" { action x = map_unary sin x; } Cos_item = class Menuaction "_Cosine" "calculate cosine x" { action x = map_unary cos x; } Tan_item = class Menuaction "_Tangent" "calculate tangent x" { action x = map_unary tan x; } sep1 = Menuseparator; Asin_item = class Menuaction "Arc S_ine" "calculate arc sine x" { action x = map_unary asin x; } Acos_item = class Menuaction "Arc C_osine" "calculate arc cosine x" { action x = map_unary acos x; } Atan_item = class Menuaction "Arc T_angent" "calculate arc tangent x" { action x = map_unary atan x; } sep2 = Menuseparator; Rad_item = class Menuaction "_Degrees to Radians" "convert degrees to radians" { action x = map_unary rad x; } Deg_item = class Menuaction "_Radians to Degrees" "convert radians to degrees" { action x = map_unary deg x; } sep3 = Menuseparator; Angle_range_item = class Menuaction "Angle i_n Range" "is angle within t degrees of r, mod 360" { action t r angle = clock (max - angle) < 2*r { max = clock (t + r); clock a = a + 360, a < 0; = a - 360, a >= 360; = a; } } } Math_log_item = class Menupullright "_Log" "logarithms and anti-logs" { Exponential_item = class Menuaction "_Exponential" "calculate e ** x" { action x = map_unary (power e) x; } Log_natural_item = class Menuaction "Natural _Log" "log base e of x" { action x = map_unary log x; } sep1 = Menuseparator; Exponential10_item = class Menuaction "E_xponential base 10" "calculate 10 ** x" { action x = map_unary (power 10) x; } Log10_item = class Menuaction "L_og Base 10" "log base 10 of x" { action x = map_unary log10 x; } sep2 = Menuseparator; Raise_to_power_item = class Menuaction "_Raise to Power" "calculate x ** y" { action x y = map_binary power x y; } } Math_complex_item = class Menupullright "_Complex" "operations on complex numbers and images" { Complex_extract = class Menupullright "_Extract" "extract fields from complex" { Real_item = class Menuaction "_Real" "extract real part of complex" { action in = map_unary re in; } Imaginary_item = class Menuaction "_Imaginary" "extract imaginary part of complex" { action in = map_unary im in; } } Complex_build_item = class Menuaction "_Build" "join a and b to make a complex" { action a b = map_binary comma a b; } sep1 = Menuseparator; Polar_item = class Menuaction "_Polar" "convert real and imag to amplitude and phase" { action a = map_unary polar a; } Rectangular_item = class Menuaction "_Rectagular" ("convert (amplitude, phase) image to rectangular " ++ "coordinates") { action x = map_unary rectangular x; } sep2 = Menuseparator; Conjugate_item = class Menuaction "_Conjugate" "invert imaginary part" { action x = map_unary conj x; } } Math_boolean_item = class Menupullright "_Boolean" "bitwise boolean operations for integer objects" { And_item = class Menuaction "_AND" "bitwise AND of a and b" { action a b = map_binary bitwise_and a b; } Or_item = class Menuaction "_OR" "bitwise OR of a and b" { action a b = map_binary bitwise_or a b; } Eor_item = class Menuaction "_XOR" "bitwise exclusive or of a and b" { action a b = map_binary eor a b; } Not_item = class Menuaction "_NOT" "invert a" { action a = map_unary not a; } sep1 = Menuseparator; Right_shift_item = class Menuaction "Shift _Right" "shift a right by b bits" { action a b = map_binary right_shift a b; } Left_shift_item = class Menuaction "Shift _Left" "shift a left by b bits" { action a b = map_binary left_shift a b; } sep2 = Menuseparator; If_then_else_item = class Menuaction "_If Then Else" "b where a is non-zero, c elsewhere" { action a b c = map_trinary ite a b c { // can't use if_then_else, we need a true trinary ite a b c = if a then b else c; } } Bandand_item = Image_band_item.Bandand_item; Bandor_item = Image_band_item.Bandor_item; } Math_relational_item = class Menupullright "R_elational" "comparison operations" { Equal_item = class Menuaction "_Equal to" "test a equal to b" { action a b = map_binary equal a b; } Not_equal_item = class Menuaction "_Not Equal to" "test a not equal to b" { action a b = map_binary not_equal a b; } sep1 = Menuseparator; More_item = class Menuaction "_More Than" "test a strictly greater than b" { action a b = map_binary more a b; } Less_item = class Menuaction "_Less Than" "test a strictly less than b" { action a b = map_binary less a b; } sep2 = Menuseparator; More_equal_item = class Menuaction "M_ore Than or Equal to" "test a greater than or equal to b" { action a b = map_binary more_equal a b; } Less_equal_item = class Menuaction "L_ess Than or Equal to" "test a less than or equal to b" { action a b = map_binary less_equal a b; } } Math_list_item = class Menupullright "L_ist" "operations on lists" { Head_item = class Menuaction "_Head" "first element in list" { action x = map_unary hd x; } Tail_item = class Menuaction "_Tail" "list without the first element" { action x = map_unary tl x; } Last_item = class Menuaction "_Last" "last element in list" { action x = map_unary last x; } Init_item = class Menuaction "_Init" "list without the last element" { action x = map_unary init x; } sep1 = Menuseparator; Reverse_item = class Menuaction "_Reverse" "reverse order of elements in list" { action x = map_unary reverse x; } Sort_item = class Menuaction "_Sort" "sort list into ascending order" { action x = map_unary sort x; } Make_set_item = class Menuaction "_Make Set" "remove duplicates from list" { action x = map_unary mkset equal x; } Transpose_list_item = class Menuaction "Tr_anspose" "exchange rows and columns in a list of lists" { action x = map_unary transpose x; } Concat_item = class Menuaction "_Concat" "flatten a list of lists into a single list" { action l = map_unary concat l; } sep2 = Menuseparator; Length_item = class Menuaction "L_ength" "find the length of list" { action x = map_unary len x; } Subscript_item = class Menuaction "S_ubscript" "return element n from list (index from zero)" { action n x = map_binary subscript n x; } Take_item = class Menuaction "_Take" "take the first n elements of list x" { action n x = map_binary take n x; } Drop_item = class Menuaction "_Drop" "drop the first n elements of list x" { action n x = map_binary drop n x; } sep3 = Menuseparator; Join_item = class Menuaction "_Join" "join two lists end to end" { action a b = map_binary join a b; } Difference_item = class Menuaction "_Difference" "difference of two lists" { action a b = map_binary difference a b; } Cons_item = class Menuaction "C_ons" "put element a on the front of list x" { action a x = map_binary cons a x; } Zip_item = class Menuaction "_Zip" "join two lists, pairwise" { action a b = map_binary zip2 a b; } } Math_round_item = class Menupullright "_Round" "various rounding operations" { /* smallest integral value not less than x */ Ceil_item = class Menuaction "_Ceil" "smallest integral value not less than x" { action x = map_unary ceil x; } Floor_item = class Menuaction "_Floor" "largest integral value not greater than x" { action x = map_unary floor x; } Rint_item = class Menuaction "_Round to Nearest" "round to nearest integer" { action x = map_unary rint x; } } Math_fourier_item = class Menupullright "_Fourier" "Fourier transform" { Forward_item = class Menuaction "_Forward" "fourier transform of image" { action a = map_unary (rotquad @ fwfft) a; } Reverse_item = class Menuaction "_Reverse" "inverse fourier transform of image" { action a = map_unary (invfft @ rotquad) a; } Rotate_quadrants_item = class Menuaction "Rotate _Quadrants" "rotate quadrants" { action a = map_unary rotquad a; } } Math_stats_item = class Menupullright "_Statistics" "measure various statistics of objects" { Value_item = class Menuaction "_Value" "value of point in object" { action a = class _result { _vislevel = 3; position = Expression "Coordinate" (0, 0); _result = map_binary point position.expr a; } } Mean_item = class Menuaction "_Mean" "arithmetic mean value" { action a = map_unary mean a; } Gmean_item = class Menuaction "_Geometric Mean" "geometric mean value" { action a = map_unary meang a; } Zmean_item = class Menuaction "_Zero-excluding Mean" "mean value of non-zero elements" { action a = map_unary meanze a; } Deviation_item = class Menuaction "_Standard Deviation" "standard deviation of object" { action a = map_unary deviation a; } Zdeviation_item = class Menuaction "Z_ero-excluding Standard Deviation" "standard deviation of non-zero elements" { action a = map_unary deviationze a; } Skew_item = class Menuaction "S_kew" "skew of image or list or vector" { action a = map_unary skew a; } Kurtosis_item = class Menuaction "Kurtosis" "kurtosis of image or list or vector" { action a = map_unary kurtosis a; } Stats_item = class Menuaction "Ma_ny Stats" "calculate many stats in a single pass" { action a = map_unary stats a; } sep1 = Menuseparator; Max_item = class Menuaction "M_aximum" "maximum of object" { action a = map_unary max a; } Min_item = class Menuaction "M_inimum" "minimum of object" { action a = map_unary min a; } Maxpos_item = class Menuaction "_Position of Maximum" "position of maximum in object" { action a = map_unary maxpos a; } Minpos_item = class Menuaction "P_osition of Minimum" "position of minimum in object" { action a = map_unary minpos a; } Gravity_item = class Menuaction "Centre of _Gravity" "position of centre of gravity of histogram" { action a = map_unary gravity a; } sep2 = Menuseparator; Count_set_item = class Menuaction "_Non-zeros" "number of non-zero elements in object" { action a = map_unary cset a { cset i = (mean (i != 0) * i.width * i.height) / 255; } } Count_clear_item = class Menuaction "_Zeros" "number of zero elements in object" { action a = map_unary cclear a { cclear i = (mean (i == 0) * i.width * i.height) / 255; } } Count_edges_item = class Menuaction "_Edges" "count average edges across or down image" { action x = class _result { _vislevel = 3; edge = Option "Count" [ "Horizontal lines", "Vertical lines" ] 0; _result = map_unary process x { process image = Number (edge.labels?edge) (im_cntlines image.value edge.value); } } } sep3 = Menuseparator; Linear_regression_item = class Menuaction "_Linear Regression" "fit a line to a set of points" { action xes yes = linreg xes yes; } Weighted_linear_regression_item = class Menuaction "_Weighted Linear Regression" "fit a line to a set of points and deviations" { action xes yes devs = linregw xes yes devs; } Cluster_item = class Menuaction "_Cluster" "cluster a list of numbers" { action l = class { _vislevel = 3; thresh = Expression "Threshold" 10; [_r, _w] = cluster thresh.expr l; result = _r; weights = _w; } } } Math_base_item = class Menupullright "Bas_e" "convert number bases" { Hexadecimal_item = class Menuaction "_Hexadecimal" "convert to hexadecimal (base 16)" { action a = map_unary (print_base 16) a; } Binary_item = class Menuaction "_Binary" "convert to binary (base 2)" { action a = map_unary (print_base 2) a; } Octal_item = class Menuaction "_Octal" "convert to octal (base 8)" { action a = map_unary (print_base 8) a; } } nip2-8.7.0/share/nip2/compat/7.40/Tasks.def0000644000175000017500000006411113224651032014712 00000000000000Tasks_capture_item = class Menupullright "_Capture" "useful stuff for capturing and preprocessing images" { Csv_import_item = class Menuaction "_CSV Import" "read a file of comma-separated values" { action = class _result { _vislevel = 3; path = Pathname "File to load" "empty"; start_line = Expression "Start at line" 1; rows = Expression "Lines to read (-1 for whole file)" (-1); whitespace = String "Whitespace characters" " \""; separator = String "Separator characters" ",;\t"; _result = Image blank, path.value == "empty" = Image (im_csv2vips filename) { filename = search (expand path.value) ++ ":" ++ "skip:" ++ print (start_line.expr - 1) ++ "," ++ "whi:" ++ escape whitespace.value ++ "," ++ "sep:" ++ escape separator.value ++ "," ++ "line:" ++ print rows.expr; // prefix any ',' with a '\' in the separators line escape x = foldr prefix [] x { prefix x l = '\\' : x : l, x == ',' = x : l; } blank = image_new 1 1 1 Image_format.DOUBLE Image_coding.NOCODING Image_type.B_W 0 0 0; } } } Raw_import_item = class Menuaction "_Raw Import" "read a file of binary values" { action = class _result { _vislevel = 3; path = Pathname "File to load" "empty"; across = Expression "Pixels across" 100; down = Expression "Pixels down" 100; bytes = Expression "Bytes per pixel" 3; skip = Expression "Skip over initial bytes" 0; _result = Image blank, path.value == "empty" = Image (im_binfile path.value across.expr down.expr bytes.expr skip.expr) { blank = image_new 1 1 1 Image_format.DOUBLE Image_coding.NOCODING Image_type.B_W 0 0 0; } } } // interpret Analyze header for layout and calibration Analyze7_header_item = class Menuaction "_Interpret Analyze 7 Header" "examine the Analyze header and set layout and value" { action x = x''' { // read bits of header dim n = get_header ("dsr-image_dimension.dim[" ++ print n ++ "]"); dim0 = dim 0 x; dim1 = dim 1 x; dim2 = dim 2 x; dim3 = dim 3 x; dim4 = dim 4 x; dim5 = dim 5 x; dim6 = dim 6 x; dim7 = dim 7 x; glmax = get_header "dsr-image_dimension.glmax" x; cal_max = get_header "dsr-image_dimension.cal_max" x; // oops, now a nop x' = x; // lay out higher dimensions width-ways x'' = grid dim2 dim3 1 x', dim0 == 3 = grid dim2 dim3 dim4 x', dim0 == 4 = grid (dim2 * dim4) dim5 1 (grid dim2 dim3 dim4) x', dim0 == 5 = grid (dim2 * dim4) dim5 dim6 (grid dim2 dim3 dim4) x', dim0 == 6 = grid (dim2 * dim4 * dim6) dim7 1 (grid (dim2 * dim4) dim5 dim6 (grid dim2 dim3 dim4)) x', dim0 == 7 = error (_ "unsupported dimension " ++ dim0); // multiply by scale factor to get kBeq x''' = x'' * (cal_max / glmax); } } Video_item = class Menuaction "Capture _Video Frame" "capture a frame of still video" { // shortcut to prefs prefs = Workspaces.Preferences; action = class _result { _vislevel = 3; device = prefs.VIDEO_DEVICE; channel = Option "Input channel" [ "TV", "Composite 1", "Composite 2", "Composite 3" ] prefs.VIDEO_CHANNEL; b = Scale "Brightness" 0 32767 prefs.VIDEO_BRIGHTNESS; col = Scale "Colour" 0 32767 prefs.VIDEO_COLOUR; con = Scale "Contrast" 0 32767 prefs.VIDEO_CONTRAST; hue = Scale "Hue" 0 32767 prefs.VIDEO_HUE; frames = Scale "Frames to average" 0 100 prefs.VIDEO_FRAMES; mono = Toggle "Monochrome grab" prefs.VIDEO_MONO; crop = Toggle "Crop image" prefs.VIDEO_CROP; // grab, but hide it ... if we let the crop edit _raw_grab = Image (im_video_v4l1 device channel.value b.value col.value con.value hue.value frames.value); edit_crop = Region _raw_grab left top width height { left = prefs.VIDEO_CROP_LEFT; top = prefs.VIDEO_CROP_TOP; width = min_pair prefs.VIDEO_CROP_WIDTH (_raw_grab.width + left); height = min_pair prefs.VIDEO_CROP_HEIGHT (_raw_grab.height + top); } aspect_ratio = Expression "Stretch vertically by" prefs.VIDEO_ASPECT; _result = frame' { frame = edit_crop, crop = _raw_grab; frame' = colour_transform_to Image_type.B_W frame, mono = frame; } } } Smooth_image_item = class Menuaction "_Smooth" "remove small features from image" { action in = class _result { _vislevel = 3; feature = Scale "Minimum feature size" 1 50 20; _result = map_unary (smooth feature.value) in; } } Light_correct_item = class Menuaction "_Flatfield" "use white image w to flatfield image i" { action w i = map_binary wc w i { wc w i = clip2fmt i.format (w' * i) { fac = mean w / max w; w' = fac * (max w / w); } } } Image_rank_item = Filter_rank_item.Image_rank_item; Tilt_item = Filter_tilt_item; sep1 = Menuseparator; White_balance_item = class Menuaction "_White Balance" "use average of small image to set white of large image" { action a b = class _result { _vislevel = 3; white_hint = "Set image white to:"; white = Colour_picker "Lab" [100, 0, 0]; _result = map_binary wb a b { wb a b = colour_transform_to (get_type image) image_xyz' { area x = x.width * x.height; larger x y = area x > area y; [image, patch] = sortc larger [a, b]; to_xyz = colour_transform_to Image_type.XYZ; // white balance in XYZ patch_xyz = to_colour (to_xyz patch); white_xyz = to_xyz white; facs = (mean patch_xyz / mean white_xyz) * (white_xyz / patch_xyz); image_xyz = to_xyz image; image_xyz' = image_xyz * facs; } } } } Gamma_item = Image_levels_item.Gamma_item; Tone_item = Image_levels_item.Tone_item; sep2 = Menuseparator; Crop_item = Image_crop_item; Rotate_item = Image_transform_item.Rotate_item; Flip_item = Image_transform_item.Flip_item; Resize_item = Image_transform_item.Resize_item; Rubber_item = Image_transform_item.Image_rubber_item; sep3 = Menuseparator; ICC_item = Colour_icc_item; Temp_item = Colour_temperature_item; Find_calib_item = class Menuaction "Find _Colour Calibration" "find an RGB -> XYZ transform from an image of a colour chart" { action image = class _result { _check_args = [ [image, "image", check_Image] ]; _vislevel = 3; measure = Scale (_ "Measure area (%)") 1 100 50; sample = measure_draw 6 4 (to_real measure) image; // get macbeth data file to use macbeth = Pathname "Pick a Macbeth data file" "$VIPSHOME/share/$PACKAGE/data/macbeth_lab_d65.mat"; mode = Option "Input LUT" [ "Linearize from chart greyscale", "Fit intercept from chart greyscale", "Linear input, set brightness from chart", "Linear input" ] 0; // get max of input image _max_value = Image_format.maxval image.format; // measure chart image _camera = measure_sample 6 4 (to_real measure) image; // load true values _true_Lab = Matrix_file macbeth.value; _true_XYZ = colour_transform Image_type.LAB Image_type.XYZ _true_Lab; // get Ys of greyscale _true_grey_Y = map (extract 1) (drop 18 _true_XYZ.value); // camera greyscale (all bands) _camera_grey = drop 18 _camera.value; // normalise both to 0-1 and combine _camera_grey' = map (map (multiply (1 / _max_value))) _camera_grey; _true_grey_Y' = map (multiply (1 / 100)) _true_grey_Y; _comb = Matrix (map2 cons _true_grey_Y' _camera_grey'), mode == 0 = Matrix [0: intercepts, replicate (_camera.width + 1) 1], mode == 1 = Matrix [[0, 0], [1, 1]] { intercepts = [(linreg _true_grey_Y' cam).intercept :: cam <- transpose _camera_grey']; } // make a linearising lut ... zero on left _linear_lut = im_invertlut _comb (_max_value + 1); // and display it // plot from 0 explicitly so we see the effect of mode1 (intercept // from greyscale) linearising_lut = Plot [$ymin => 0] _linear_lut; // map an image though the lineariser linear x = hist_map linearising_lut.value x, mode == 0 || mode == 1 = x; // map the chart measurements though the lineariser _camera' = (to_matrix @ linear @ to_image) _camera; // solve for RGB -> XYZ // normalise: the 2nd row is what makes Y, so divide by that to // get Y in 0-1. _pinv = (transpose _camera' * _camera') ** -1; _full_M = transpose (_pinv * (transpose _camera' * _true_XYZ)); M = _full_M / scale; scale = sum _full_M.value?1; // now turn the camera to LAB and calculate dE76 _camera'' = (to_matrix @ colour_transform Image_type.XYZ Image_type.LAB @ recomb M @ multiply scale @ to_image) _camera'; _dEs = map abs_vec (_camera'' - _true_Lab).value; avg_dE76 = mean _dEs; _max_dE = foldr max_pair 0 _dEs; _worst = index (equal _max_dE) _dEs; worst_patch = name _worst ++ " (patch " ++ print (_worst + 1) ++ ", " ++ print _max_dE ++ " dE)" { name i = macbeth_names?i, i >= 0 && i < len macbeth_names = "Unknown"; } // normalise brightness ... in linear mode, we optionally don't // set the brightness from the Macbeth chart norm x = x * scale, mode != 3 = x; // convert RGB camera to Lab _result = (Image @ colour_transform Image_type.XYZ Image_type.LAB @ norm @ recomb M @ cast_float @ linear) image.value; } } Apply_calib_item = class Menuaction "_Apply Colour Calibration" "apply an RGB -> LAB transform to an image" { action a b = class (map_binary process a b) { process a b = result, is_instanceof calib_name calib && is_Image image = error (_ "bad arguments to " ++ "Calibrate_image") { // the name of the calib object we need calib_name = "Tasks_capture_item.Find_calib_item.action"; // get the Calibrate_chart arg first [image, calib] = sortc (const (is_instanceof calib_name)) [a, b]; result = (Image @ colour_transform Image_type.XYZ Image_type.LAB @ calib.norm @ recomb calib.M @ cast_float @ calib.linear) image.value; } } } sep4 = Menuseparator; Graph_hist_item = Hist_find_item; Graph_bands_item = class Menuaction "Plot _Bands" "show image bands as a graph" { action x = class _result { _vislevel = 3; style = Option_enum "Style" Plot_style.names "Line"; auto = Toggle "Auto Range" true; ymin = Expression "Y range minimum" 0; ymax = Expression "Y range maximum" 1; _result = Plot options (to_image (bands (image x))).value { options = [$style => style.value] ++ if auto then [] else [$ymin => ymin.expr, $ymax => ymax.expr]; // try to make something image-like from it image x = extract_area x.left x.top 1 1 x.image, is_Mark x = get_image x, has_image x = get_image (to_image x); // get as [[1],[2],[3]] bands x = transpose [map mean (bandsplit x)]; } } } } Tasks_mosaic_item = class Menupullright "_Mosaic" "build image mosaics" { /* Check and group a point list by image. */ mosaic_sort_test l = error "mosaic: not all points", !is_listof is_Mark l = error "mosaic: points not on two images", !is_list_len 2 images = error "mosaic: images do not match in format and coding", !all_equal (map get_format l) || !all_equal (map get_coding l) = error "mosaic: not same number of points on each image", !foldr1 equal (map len l') = l' { // test for all elements of a list equal all_equal l = all (map (equal (hd l)) (tl l)); // all the different images images = mkset pointer_equal (map get_image l); // find all points defined on image test_image image p = (get_image p) === image; find l image = filter (test_image image) l; // group point list by image l' = map (find l) images; } /* Sort a point group to get right before left, and within each group to * get above before below. */ mosaic_sort_lr l = l'' { // sort to get upper point first above a b = a.top < b.top; l' = map (sortc above) l; // sort to get right group before left group right a b = a?0.left > b?0.left; l'' = sortc right l'; } /* Sort a point group to get top before bottom, and within each group to * get left before right. */ mosaic_sort_tb l = l'' { // sort to get upper point first left a b = a.left < b.left; l' = map (sortc left) l; // sort to get right group before left group below a b = a?0.top > b?0.top; l'' = sortc below l'; } /* Put 'em together! Group by image, sort vertically (or horizontally) with * one of the above, transpose to get pairs matched up, and flatten again. */ mosaic_sort fn = concat @ transpose @ fn @ mosaic_sort_test; Mosaic_1point_item = class Menupullright "_One Point" "join two images with a single tie point" { check_ab_args a b = [ [a, "a", check_Mark], [b, "b", check_Mark] ]; // shortcut to prefs prefs = Workspaces.Preferences; search_area = prefs.MOSAIC_WINDOW_SIZE; object_size = prefs.MOSAIC_OBJECT_SIZE; blend_width_widget = Scale "Maximum blend width" 0 100 prefs.MOSAIC_MAX_BLEND_WIDTH; refine_widget = Toggle "Refine selected tie-points" prefs.MOSAIC_REFINE; lr_mos _refine a b = class Image _result { _check_args = check_ab_args a b; bw = blend_width_widget; refine = _refine; _result = im_lrmosaic a'.image.value b'.image.value 0 a'.left a'.top b'.left b'.top (object_size / 2) (search_area / 2) 0 bw.value, refine = im_lrmerge a'.image.value b'.image.value (b'.left - a'.left) (b'.top - a'.top) bw.value { [a', b'] = mosaic_sort mosaic_sort_lr [a, b]; } } tb_mos _refine a b = class Image _result { _check_args = check_ab_args a b; bw = blend_width_widget; refine = _refine; _result = im_tbmosaic a'.image.value b'.image.value 0 a'.left a'.top b'.left b'.top (object_size / 2) (search_area / 2) 0 bw.value, refine = im_tbmerge a'.image.value b'.image.value (b'.left - a'.left) (b'.top - a'.top) bw.value { [a', b'] = mosaic_sort mosaic_sort_tb [a, b]; } } Left_right_item = class Menuaction "_Left to Right" "join two images left-right with a single tie point" { action a b = lr_mos refine_widget a b; } Top_bottom_item = class Menuaction "_Top to Bottom" "join two images top-bottom with a single tie point" { action a b = tb_mos refine_widget a b; } sep1 = Menuseparator; Left_right_manual_item = class Menuaction "Manual L_eft to Right" "join left-right, no auto-adjust of tie points" { action a b = lr_mos false a b; } Top_bottom_manual_item = class Menuaction "Manual T_op to Bottom" "join top-bottom, no auto-adjust of tie points" { action a b = tb_mos false a b; } } Mosaic_2point_item = class Menupullright "_Two Point" "join two images with two tie points" { check_abcd_args a b c d = [ [a, "a", check_Mark], [b, "b", check_Mark], [c, "c", check_Mark], [d, "d", check_Mark] ]; // shortcut to prefs prefs = Workspaces.Preferences; search_area = prefs.MOSAIC_WINDOW_SIZE; object_size = prefs.MOSAIC_OBJECT_SIZE; blend_width_widget = Scale "Maximum blend width" 0 100 prefs.MOSAIC_MAX_BLEND_WIDTH; refine_widget = Toggle "Refine selected tie-points" prefs.MOSAIC_REFINE; Left_right_item = class Menuaction "_Left to Right" "join two images left-right with a pair of tie points" { action a b c d = class Image _result { _check_args = check_abcd_args a b c d; bw = blend_width_widget; refine = refine_widget; _result = im_lrmosaic1 a'.image.value b'.image.value 0 a'.left a'.top b'.left b'.top c'.left c'.top d'.left d'.top (object_size / 2) (search_area / 2) 0 bw.value, refine = im_lrmerge1 a'.image.value b'.image.value a'.left a'.top b'.left b'.top c'.left c'.top d'.left d'.top bw.value { [a', b', c', d'] = mosaic_sort mosaic_sort_lr [a, b, c, d]; } } } Top_bottom_item = class Menuaction "_Top to Bottom" "join two images top-bottom with a pair of tie points" { action a b c d = class Image _result { _check_args = check_abcd_args a b c d; bw = blend_width_widget; refine = refine_widget; _result = im_tbmosaic1 a'.image.value b'.image.value 0 a'.left a'.top b'.left b'.top c'.left c'.top d'.left d'.top (object_size / 2) (search_area / 2) 0 bw.value, refine = im_tbmerge1 a'.image.value b'.image.value a'.left a'.top b'.left b'.top c'.left c'.top d'.left d'.top bw.value { [a', b', c', d'] = mosaic_sort mosaic_sort_tb [a, b, c, d]; } } } } sep1 = Menuseparator; Balance_item = class Menuaction "Mosaic _Balance" "disassemble mosaic, scale brightness to match, reassemble" { action x = map_unary balance x { balance x = oo_unary_function balance_op x, is_class x = im_global_balancef x Workspaces.Preferences.MOSAIC_BALANCE_GAMMA, is_image x = error (_ "bad arguments to " ++ "balance") { balance_op = Operator "balance" balance Operator_type.COMPOUND_REWRAP false; } } } //////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// Manual_balance_item = class Menupullright "Manual B_alance" "balance tonality of user defined areas" { prefs = Workspaces.Preferences; //////////////////////////////////////////////////////////////////////////////////// Balance_find_item = class Menuaction "_Find Values" "calculates values required to scale and offset balance user defined areas in a given image" /* Outputs a matrix of scale and offset values. Eg. Values required to balance the secondary * structure in an X-ray image. Takes an X-ray image an 8-bit control mask and a list of * 8-bit reference masks, where the masks are white on a black background. */ { action im_in m_control m_group = class Matrix values{ _vislevel = 1; _control_im = if m_control then im_in else 0; _control_meanmax = so_meanmax _control_im; _group_check = is_Group m_group; _m_list = m_group.value, _group_check = m_group; process m_current mat_in = mat_out {so_values = so_calculate _control_meanmax im_in m_current; mat_out = join [so_values] mat_in;} values = (foldr process [] _m_list); } } //////////////////////////////////////////////////////////////////////////////////// Balance_check_item = class Menuaction "_Check Values" "allows calculated set of scale and offset values to be checked and adjusted if required" /* Outputs adjusted matrix of scale and offset values and scale and offset image maps. * Eg. Check values required to balance the secondary structure in an X-ray image. * Takes an X-ray image an 8-bit control mask and a list of 8-bit reference masks, * where the masks are white on a black background. */ { action im_in m_matrix m_group = class Image value { _vislevel = 3; blur = Scale "Blur" 1 10 1; _blur = (blur.value/2 + 0.5), blur.value > 1 = 1; _group_check = is_Group m_group; _m_list = m_group.value, _group_check = m_group; adjust = Matrix_rec mat_a { no_masks = len _m_list; mat_a = replicate no_masks [0, 0]; } // Apply the user defined adjustments to the inputted matrix of scale and offset values _adjusted = map2 fn_adjust m_matrix.value adjust.value; fn_adjust a b = [(a?0 + b?0), (a?1 + (a?1 * b?1))]; _scaled_ims = map (fn_so_apply im_in) _adjusted; fn_so_apply im so = map_unary adj im {adj im = im * (so?0) + (so?1);} _im_pairs = zip2 _m_list _scaled_ims; // Prepare black images as starting point. //////////// _blank = image_new (_m_list?0).width (_m_list?0).height 1 6 Image_coding.NOCODING 1 0 0 0; _pair_start = [(_blank + 1), _blank]; Build = Toggle "Build Scale and Offset Correction Images" false; Output = class { _vislevel = 1; scale_im = _build?0; offset_im = _build?1; so_values = Matrix _adjusted; _build = [Image so_images?0, Image so_images?1], Build = ["Scale image not built.", "Offset image not built."] { m_list' = transpose [_m_list]; m_all = map2 join m_list' _adjusted; so_images = foldr process_2 _pair_start m_all; } } value = (foldr process_1 im_in_b _im_pairs).value {im_in_b = map_unary cast_float im_in;} process_1 m_current im_start = im_out { bl_mask = convsep (matrix_blur _blur) (get_image m_current?0); blended_im = im_blend bl_mask (m_current?1).value im_start.value; im_out = Image (clip2fmt im_start.format blended_im); } // Process for building scale and offset image. process_2 current p_start = p_out { im_s = if ((current?0) > 128) then current?1 else _blank; im_o = if ((current?0) > 128) then current?2 else _blank; im_s' = convsep (matrix_blur _blur) (im_s != 0); im_o' = convsep (matrix_blur _blur) (im_o != 0); im_s'' = im_blend im_s'.value im_s.value p_start?0; im_o'' = im_blend im_o'.value im_o.value p_start?1; p_out = [im_s'', im_o'']; } } } //////////////////////////////////////////////////////////////////////////////////// Balance_apply_item = class Menuaction "_Apply Values" "apply scale and offset corrections, defined as image maps, to a given image" /* Outputs the balanced image. Eg. Balance the secondary structure in an X-ray image. Takes an * X-ray image an 32-bit float scale image and a 32-bit offset image. */ { action im_in scale_im offset_im = class Image value { _vislevel = 1; xfactor = im_in.width/scale_im.width; yfactor = im_in.height/scale_im.height; _scale_im = resize Interpolate_bilinear xfactor yfactor scale_im; _offset_im = resize Interpolate_bilinear xfactor yfactor offset_im; value = get_image ( clip2fmt im_in.format ( ( im_in * _scale_im ) + _offset_im ) ); } } } Tilt_item = Filter_tilt_item; sep2 = Menuseparator; Rebuild_item = class Menuaction "_Rebuild" "disassemble mosaic, substitute image files and reassemble" { action x = class _result { _vislevel = 3; old = String "In each filename, replace" "foo"; new = String "With" "bar"; _result = map_unary remosaic x { remosaic image = Image (im_remosaic image.value old.value new.value); } } } sep3 = Menuseparator; Clone_area_item = class Menuaction "_Clone Area" "replace dark or light section of im1 with pixels from im2" { action im1 im2 = class _result { _check_args = [ [im1, "im1", check_Image], [im2, "im2", check_Image] ]; _vislevel = 3; /* Region on first image placed in the top left hand corner, * positioned and size relative to the height and width of im1. */ r1 = Region_relative im1 0.05 0.05 0.05 0.05; /* Mark on second image placed in the top left hand corner, * positioned relative to the height and width of im2. Used to * define _r2, the region from which the section of image is cloned * from. */ p2 = Mark_relative im2 0.05 0.05; _r2 = Region im2 p2.left p2.top r1.width r1.height; mask = [r1 <= Options.sc, r1 >= Options.sc]?(Options.replace); Options = class { _vislevel = 3; pause = Toggle "Pause process" true; /* Option toggle used to define whether the user is * replacing a dark or a light area. */ replace = Option "Replace" [ "A Dark Area", "A Light Area" ] 1; // Used to select the area to be replaced. sc = Scale "Scale cutoff" 0.01 mx (mx / 2) {mx = Image_format.maxval im1.format;} //Allows replacement with scale&offset balanced gaussian noise. balance = Toggle "Balance cloned data to match surroundings." true; //Allows replacement with scale&offset balanced //gaussian noise. process = Toggle "Replace area with Gaussian noise." false; } _result = im1, Options.pause = Image (im_insert im1.value patch r1.left r1.top) { r2 = Region im2 p2.left p2.top r1.width r1.height; ref_meanmax = so_meanmax (if mask then 0 else r1); mask8 = Matrix_mor [[255, 255, 255], [255, 255, 255], [255, 255, 255]]; mask_a = map_unary (dilate mask8) mask; mask_b = convsep (matrix_blur 2) mask_a; patch = so_balance ref_meanmax r1 r2 mask_b Options.process, Options.balance = so_balance ref_meanmax r1 r2 mask_b Options.process, Options.process = im_blend (get_image mask_b) (get_image r2) (get_image r1); } } } } Tasks_frame_item = Frame_item; Tasks_print_item = class Menupullright "_Print" "useful stuff for image output" { Rotate_item = Image_transform_item.Rotate_item; Flip_item = Image_transform_item.Flip_item; Resize_item = Image_transform_item.Resize_item; Tone_item = Image_levels_item.Tone_item; Sharpen_item = class Menuaction "_Sharpen" "unsharp filter tuned for typical inkjet printers" { action x = class _result { _vislevel = 3; target_dpi = Option "Sharpen for print at" [ "400 dpi", "300 dpi", "150 dpi", "75 dpi" ] 1; _result = map_unary process x { process image = sharpen params?0 params?1 params?2 params?3 params?4 params?5 (colour_transform_to Image_type.LABQ image) { // sharpen params for various dpi // just change the size of the area we search param_table = [ [7, 2.5, 40, 20, 0.5, 1.5], [5, 2.5, 40, 20, 0.5, 1.5], [3, 2.5, 40, 20, 0.5, 1.5], [11, 2.5, 40, 20, 0.5, 1.5] ]; params = param_table?target_dpi; } } } } sep1 = Menuseparator; Temp_item = Colour_temperature_item; ICC_item = Colour_icc_item; } nip2-8.7.0/share/nip2/compat/7.40/_types.def0000644000175000017500000006744113224651032015141 00000000000000/* A list of things. Do automatic iteration of unary and binary operators on * us. * List [1, 2] + [2, 3] -> List [3, 5] * hd (List [2, 3]) -> 2 * List [] == [] -> true */ List value = class _Object { _check_args = [ [value, "value", check_list] ]; // methods oo_binary_table op x = [ [apply2 op value x', op.op_name == "subscript" || op.op_name == "subscript'" || op.op_name == "equal" || op.op_name == "equal'"], [this.List (apply2 op value x'), op.op_name == "join" || op.op_name == "join'"], [this.List (map2 (apply2 op) value x'), is_list x'], [this.List (map (apply2 op' x) value), true] ] ++ super.oo_binary_table op x { op' = oo_converse op; // strip the List wrapper, if any x' = x.value, is_List x = x; apply2 op x1 x2 = oo_binary_function op x1 x2, is_class x1 = oo_binary'_function op x1 x2, is_class x2 = op.fn x1 x2; }; oo_unary_table op = [ [apply value, op.op_name == "hd" || op.op_name == "tl"], [this.List (map apply value), true] ] ++ super.oo_unary_table op { apply x = oo_unary_function op x, is_class x = op.fn x; } } /* A group of things. Loop the operation over the group. */ Group value = class _Object { _check_args = [ [value, "value", check_list] ]; // methods oo_binary_table op x = [ // if_then_else is really a trinary operator [map_trinary ite this x?0 x?1, op.op_name == "if_then_else"], [map_binary op.fn this x, is_Group x], [map_unary (\a op.fn a x) this, true] ] ++ super.oo_binary_table op x; oo_unary_table op = [ [map_unary op.fn this, true] ] ++ super.oo_unary_table op; // we can't call map_trinary directly, since it uses Group and we // don't support mutually recursive top-level functions :-( // copy-paste it here, keep in sync with the version in _stdenv map_nary fn args = fn args, groups == [] = Group (map process [0, 1 .. shortest - 1]) { groups = filter is_Group args; shortest = foldr1 min_pair (map (len @ get_value) groups); process n = NULL, any (map (is_noval n) args) = map_nary fn (map (extract n) args) { extract n arg = arg.value?n, is_Group arg = arg; is_noval n arg = is_Group arg && arg.value?n == NULL; } } // need ite as a true trinary ite a b c = if a then b else c; map_unary fn a = map_nary (list_1ary fn) [a]; map_binary fn a b = map_nary (list_2ary fn) [a, b]; map_trinary fn a b c = map_nary (list_3ary fn) [a, b, c]; } /* Single real number ... eg slider. */ Real value = class _Object { _check_args = [ [value, "value", check_real] ]; // methods oo_binary_table op x = [ [this.Real (op.fn this.value x.value), is_Real x && op.type == Operator_type.ARITHMETIC], [this.Real (op.fn this.value x), is_real x && op.type == Operator_type.ARITHMETIC], [op.fn this.value x.value, is_Real x && op.type == Operator_type.RELATIONAL], [op.fn this.value x, !is_class x] ] ++ super.oo_binary_table op x; oo_unary_table op = [ [this.Real (op.fn this.value), op.type == Operator_type.ARITHMETIC], [op.fn this.value, true] ] ++ super.oo_unary_table op; } /* Single bool ... eg Toggle. */ Bool value = class _Object { _check_args = [ [value, "value", check_bool] ]; // methods oo_binary_table op x = [ [op.fn this.value x, op.op_name == "if_then_else"], [this.Bool (op.fn this.value x.value), is_Bool x], [this.Bool (op.fn this.value x), is_bool x] ] ++ super.oo_binary_table op x; oo_unary_table op = [ [this.Bool (op.fn this.value), op.type == Operator_type.ARITHMETIC || op.type == Operator_type.RELATIONAL], [op.fn this.value, true] ] ++ super.oo_unary_table op; } /* An editable string. */ String caption value = class _Object { _check_args = [ [caption, "caption", check_string], [value, "value", check_string] ]; } /* An editable real number. */ Number caption value = class scope.Real value { _check_args = [ [caption, "caption", check_string] ]; Real x = this.Number caption x; } /* An editable expression. */ Expression caption expr = class (if is_class expr then expr else _Object) { _check_args = [ [caption, "caption", check_string], [expr, "expr", check_any] ]; } /* A ticking clock. */ Clock interval value = class scope.Real value { _check_args = [ [interval, "interval", check_real] ]; Real x = this.Clock interval x; } /* An editable filename. */ Pathname caption value = class _Object { _check_args = [ [caption, "caption", check_string], [value, "value", check_string] ]; } /* An editable fontname. */ Fontname caption value = class _Object { _check_args = [ [caption, "caption", check_string], [value, "value", check_string] ]; } /* Vector type ... just a finite list of real. Handy for wrapping an * argument to eg. im_lintra_vec. Make it behave like a single pixel image. */ Vector value = class _Object { _check_args = [ [value, "value", check_real_list] ]; bands = len value; // methods oo_binary_table op x = [ // Vector ++ Vector means bandwise join [this.Vector (op.fn this.value x.value), is_Vector x && (op.op_name == "join" || op.op_name == "join'")], [this.Vector (op.fn this.value [get_number x]), has_number x && (op.op_name == "join" || op.op_name == "join'")], // Vector ? number means extract element [op.fn this.value (get_real x), has_real x && (op.op_name == "subscript" || op.op_name == "subscript'")], // extra check for lengths equal [this.Vector (map_binaryl op.fn this.value x.value), is_Vector x && len value == len x.value && op.type == Operator_type.ARITHMETIC], [this.Vector (map_binaryl op.fn this.value (get_real x)), has_real x && op.type == Operator_type.ARITHMETIC], // need extra length check [this.Vector (map bool_to_real (map_binaryl op.fn this.value x.value)), is_Vector x && len value == len x.value && op.type == Operator_type.RELATIONAL], [this.Vector (map bool_to_real (map_binaryl op.fn this.value (get_real x))), has_real x && op.type == Operator_type.RELATIONAL], [this.Vector (op.fn this.value x.value), is_Vector x && len value == len x.value && op.type == Operator_type.COMPOUND_REWRAP], [x.Image (vec op'.op_name x.value value), is_Image x], [vec op'.op_name x value, is_image x], [op.fn this.value x, is_real x] ] ++ super.oo_binary_table op x { op' = oo_converse op; }; oo_unary_table op = [ [this.Vector (map_unaryl op.fn this.value), op.type == Operator_type.ARITHMETIC], [this.Vector (map bool_to_real (map_unaryl op.fn this.value)), op.type == Operator_type.RELATIONAL], [this.Vector (op.fn this.value), op.type == Operator_type.COMPOUND_REWRAP], [op.fn this.value, true] ] ++ super.oo_unary_table op; // turn an ip bool (or a number, for Vector) into VIPSs 255/0 bool_to_real x = 255, is_bool x && x = 255, is_number x && x != 0 = 0; } /* A rectangular array of real. */ Matrix_base value = class _Object { _check_args = [ [value, "value", check_matrix] ]; // calculate these from value width = len value?0; height = len value; // extract a rectanguar area extract left top width height = this.Matrix_base ((map (take width) @ map (drop left) @ take height @ drop top) value); // methods oo_binary_table op x = [ // mat multiply is special [this.Matrix_base mul.value, is_Matrix x && op.op_name == "multiply"], [this.Matrix_base mul'.value, is_Matrix x && op.op_name == "multiply'"], // mat divide is also special [this.Matrix_base div.value, is_Matrix x && op.op_name == "divide"], [this.Matrix_base div'.value, is_Matrix x && op.op_name == "divide'"], // power -1 means invert [this.Matrix_base inv.value, is_real x && x == -1 && op.op_name == "power"], [this.Matrix_base sq.value, is_real x && x == 2 && op.op_name == "power"], [error "matrix **-1 and **2 only", op.op_name == "power" || op.op_name == "power'"], // matrix op vector ... treat a vector as a 1 row matrix [this.Matrix_base (map (map_binaryl op'.fn x.value) this.value), is_Vector x && op.type == Operator_type.ARITHMETIC], [this.Matrix_base (map_binaryl op.fn this.value x.value), (is_Matrix x || is_Real x) && op.type == Operator_type.ARITHMETIC], [this.Matrix_base (map_binaryl op.fn this.value x), is_real x && op.type == Operator_type.ARITHMETIC], // compound ... don't do iteration [this.Matrix_base (op.fn this.value x.value), (is_Matrix x || is_Real x || is_Vector x) && op.type == Operator_type.COMPOUND_REWRAP], [op.fn this.value x, op.type == Operator_type.COMPOUND] ] ++ super.oo_binary_table op x { mul = im_matmul this x; mul' = im_matmul x this; div = im_matmul this (im_matinv x); div' = im_matmul x (im_matinv this); inv = im_matinv this; sq = im_matmul this this; op' = oo_converse op; } oo_unary_table op = [ [this.Matrix_base (map_unaryl op.fn this.value), op.type == Operator_type.ARITHMETIC], [this.Matrix_base (op.fn this.value), op.type == Operator_type.COMPOUND_REWRAP], [op.fn this.value, true] ] ++ super.oo_unary_table op; } /* How to display a matrix: text, sliders, toggles, or text plus scale/offset. */ Matrix_display = class { text = 0; slider = 1; toggle = 2; text_scale_offset = 3; is_display = member [text, slider, toggle, text_scale_offset]; } /* A matrix as VIPS sees them ... add scale, offset and filename. For nip, add * a display type as well to control how the widget renders. */ Matrix_vips value scale offset filename display = class scope.Matrix_base value { _check_args = [ [scale, "scale", check_real], [offset, "offset", check_real], [filename, "filename", check_string], [display, "display", check_matrix_display] ]; Matrix_base x = this.Matrix_vips x scale offset filename display; } /* A plain 'ol matrix which can be passed to VIPS. */ Matrix value = class Matrix_vips value 1 0 "" Matrix_display.text {} /* Specialised constructors ... for convolutions, recombinations and * morphologies. */ Matrix_con scale offset value = class Matrix_vips value scale offset "" Matrix_display.text_scale_offset {}; Matrix_rec value = class Matrix_vips value 1 0 "" Matrix_display.slider {}; Matrix_mor value = class Matrix_vips value 1 0 "" Matrix_display.toggle {}; Matrix_file filename = (im_read_dmask @ expand @ search) filename; /* A CIE colour ... a triple, plus a format (eg XYZ, Lab etc) */ Colour colour_space value = class scope.Vector value { _check_args = [ [colour_space, "colour_space", check_colour_space] ]; _check_all = [ [is_list_len 3 value, "len value == 3"] ]; Vector x = this.Colour colour_space x; // make a colour-ish thing from an image // back to Colour if we have another 3 band image // to a vector if bands > 1 // to a number otherwise itoc im = this.Colour nip_type (to_matrix im).value?0, bands == 3 = scope.Vector (map mean (bandsplit im)), bands > 1 = mean im { type = get_header "Type" im; bands = get_header "Bands" im; nip_type = Image_type.colour_spaces.lookup 1 0 type; } // methods oo_binary_table op x = [ [itoc (op.fn ((float) (to_image this).value) ((float) (to_image x).value)), // here REWRAP means go via image op.type == Operator_type.COMPOUND_REWRAP] ] ++ super.oo_binary_table op x; oo_unary_table op = [ [itoc (op.fn ((float) (to_image this).value)), op.type == Operator_type.COMPOUND_REWRAP] ] ++ super.oo_unary_table op; } // a subclass with widgets for picking a space and value Colour_picker default_colour default_value = class Colour space.item colour.expr { _vislevel = 3; space = Option_enum "Colour space" Image_type.colour_spaces default_colour; colour = Expression "Colour value" default_value; Colour_edit colour_space value = Colour_picker colour_space value; } /* Base scale type. */ Scale caption from to value = class scope.Real value { _check_args = [ [caption, "caption", check_string], [from, "from", check_real], [to, "to", check_real] ]; _check_all = [ [from < to, "from < to"] ]; Real x = this.Scale caption from to x; // methods oo_binary_table op x = [ [this.Scale caption (op.fn this.from x.from) (op.fn this.to x.to) (op.fn this.value x.value), is_Scale x && op.type == Operator_type.ARITHMETIC], [this.Scale caption (op.fn this.from x) (op.fn this.to x) (op.fn this.value x), is_real x && op.type == Operator_type.ARITHMETIC] ] ++ super.oo_binary_table op x; } /* Base toggle type. */ Toggle caption value = class scope.Bool value { _check_args = [ [caption, "caption", check_string], [value, "value", check_bool] ]; Bool x = this.Toggle caption x; } /* Base option type. */ Option caption labels value = class scope.Real value { _check_args = [ [caption, "caption", check_string], [labels, "labels", check_string_list], [value, "value", check_uint] ]; } /* An option whose value is a string rather than a number. */ Option_string caption labels item = class Option caption labels (index (equal item) labels) { Option_edit caption labels value = this.Option_string caption labels (labels?value); } /* Make an option from an enum. */ Option_enum caption enum item = class Option_string caption enum.names item { // corresponding thing value_thing = enum.get_thing item; Option_edit caption labels value = this.Option_enum caption enum (enum.names?value); } /* A rectangle. width and height can be -ve. */ Rect left top width height = class _Object { _check_args = [ [left, "left", check_real], [top, "top", check_real], [width, "width", check_real], [height, "height", check_real] ]; // derived right = left + width; bottom = top + height; oo_binary_table op x = [ [equal x, is_Rect x && (op.op_name == "equal" || op.op_name == "equal'")], [!equal x, is_Rect x && (op.op_name == "not_equal" || op.op_name == "not_equal'")], // binops with a complex are the same as (comp op comp) [oo_binary_function op this (Rect (re x) (im x) 0 0), is_complex x], // all others are just pairwise [this.Rect left' top' width' height', is_Rect x && op.type == Operator_type.ARITHMETIC], [this.Rect left'' top'' width'' height'', has_number x && op.type == Operator_type.ARITHMETIC] ] ++ super.oo_binary_table op x { left' = op.fn left x.left; top' = op.fn top x.top; width' = op.fn width x.width; height' = op.fn height x.height; left'' = op.fn left x'; top'' = op.fn top x'; width'' = op.fn width x'; height'' = op.fn height x'; x' = get_number x; } oo_unary_table op = [ // arithmetic uops just map [this.Rect left' top' width' height', op.type == Operator_type.ARITHMETIC], // compound uops are just like ops on complex // do (width, height) so thing like abs(Arrow) work as you'd expect [op.fn (width, height), op.type == Operator_type.COMPOUND] ] ++ super.oo_unary_table op { left' = op.fn left; top' = op.fn top; width' = op.fn width; height' = op.fn height; } // empty? ie. contains no pixels is_empty = width == 0 || height == 0; // normalised version, ie. make width/height +ve and flip the origin nleft = left + width, width < 0 = left; ntop = top + height, height < 0 = top; nwidth = abs width; nheight = abs height; nright = nleft + nwidth; nbottom = ntop + nheight; equal x = left == x.left && top == x.top && width == x.width && height == x.height; // contains a point? includes_point x y = nleft <= x && x <= nright && ntop <= y && y <= nbottom; // contains a rect? just test top left and bottom right points includes_rect r = includes_point r.nleft r.ntop && includes_point r.nright r.nbottom; // bounding box of two rects // if either is empty, can just return the other union r = r, is_empty = this, r.is_empty = Rect left' top' width' height' { left' = min_pair nleft r.nleft; top' = min_pair ntop r.ntop; width' = max_pair nright r.nright - left'; height' = max_pair nbottom r.nbottom - top'; } // intersection of two rects ... empty rect if no intersection intersect r = Rect left' top' width'' height'' { left' = max_pair nleft r.nleft; top' = max_pair ntop r.ntop; width' = min_pair nright r.nright - left'; height' = min_pair nbottom r.nbottom - top'; width'' = width', width > 0 = 0; height'' = height', height > 0 = 0; } // expand/collapse by n pixels margin_adjust n = Rect (left - n) (top - n) (width + 2 * n) (height + 2 * n); } /* Values for Compression field in image. */ Image_compression = class { NONE = 0; NO_COMPRESSION = 0; TCSF_COMPRESSION = 1; JPEG_COMPRESSION = 2; LABPACK_COMPRESSED = 3; RGB_COMPRESSED = 4; LUM_COMPRESSED = 5; } /* Values for Coding field in image. */ Image_coding = class { NONE = 0; NOCODING = 0; COLQUANT = 1; LABPACK = 2; RAD = 6; } /* Values for BandFmt field in image. */ Image_format = class { DPCOMPLEX = 9; DOUBLE = 8; COMPLEX = 7; FLOAT = 6; INT = 5; UINT = 4; SHORT = 3; USHORT = 2; CHAR = 1; UCHAR = 0; NOTSET = -1; maxval fmt = [ 255, // UCHAR 127, // CHAR 65535, // USHORT 32767, // SHORT 4294967295, // UINT 2147483647, // INT 255, // FLOAT 255, // COMPLEX 255, // DOUBLE 255 // DPCOMPLEX ] ? fmt, fmt >= 0 && fmt <= DPCOMPLEX = error (_ "bad value for BandFmt"); } /* A lookup table. */ Table value = class _Object { _check_args = [ [value, "value", check_rectangular] ]; /* Extract a column. */ column n = map (extract n) value; /* present col x: is there an x in column col */ present col x = member (column col) x; /* Look on column from, return matching item in column to. */ lookup from to x = value?n?to, n >= 0 = error (_ "item" ++ " " ++ print x ++ " " ++ _ "not in table") { n = index (equal x) (column from); } } /* A two column lookup table with the first column a string and the second a * thing. Used for representing various enums. Option_enum makes a selector * from one of these. */ Enum value = class Table value { _check_args = [ [value, "value", check_enum] ] { check_enum = [is_enum, _ "is [[char, *]]"]; is_enum x = is_rectangular x && is_listof is_string (map (extract 0) x); } // handy ... all the names and things as lists names = this.column 0; things = this.column 1; // is a legal name or thing has_name x = this.present 1 x; has_thing x = this.present 0 x; // map things to strings and back get_name x = this.lookup 1 0 x; get_thing x = this.lookup 0 1 x; } /* Type field. */ Image_type = class { MULTIBAND = 0; B_W = 1; HISTOGRAM = 10; XYZ = 12; LAB = 13; CMYK = 15; LABQ = 16; RGB = 17; UCS = 18; LCH = 19; LABS = 21; sRGB = 22; YXY = 23; FOURIER = 24; RGB16 = 25; GREY16 = 26; ARRAY = 27; /* Table to get names <-> numbers. */ type_names = Enum [ $MULTIBAND => MULTIBAND, $B_W => B_W, $HISTOGRAM => HISTOGRAM, $XYZ => XYZ, $LAB => LAB, $CMYK => CMYK, $LABQ => LABQ, $RGB => RGB, $UCS => UCS, $LCH => LCH, $LABS => LABS, $sRGB => sRGB, $YXY => YXY, $FOURIER => FOURIER, $RGB16 => RGB16, $GREY16 => GREY16, $ARRAY => ARRAY ]; /* Table relating nip's colour space names and VIPS's Type numbers. * Options generated from this, so match the order to the order in the * Colour menu. */ colour_spaces = Enum [ $sRGB => sRGB, $Lab => LAB, $LCh => LCH, $XYZ => XYZ, $Yxy => YXY, $UCS => UCS ]; /* A slightly larger table ... the types of colorimetric image we can * have. Add mono, and the S and Q forms of LAB. */ image_colour_spaces = Enum [ $Mono => B_W, $sRGB => sRGB, $RGB16 => RGB16, $GREY16 => GREY16, $Lab => LAB, $LabQ => LABQ, $LabS => LABS, $LCh => LCH, $XYZ => XYZ, $Yxy => YXY, $UCS => UCS ]; } /* Base image type. Simple layer over vips_image. */ Image value = class _Object { _check_args = [ [value, "value", check_image] ]; // fields from VIPS header width = get_width value; height = get_height value; bands = get_bands value; format = get_format value; bits = get_bits value; coding = get_coding value; type = get_type value; xres = get_header "Xres" value; yres = get_header "Yres" value; xoffset = get_header "Xoffset" value; yoffset = get_header "Yoffset" value; filename = get_header "filename" value; // convenience ... the area our pixels occupy, as a rect rect = Rect 0 0 width height; // operator overloading // (op Image Vector) done in Vector class oo_binary_table op x = [ // handle image ++ constant here [wrap join_result_image, (has_real x || is_Vector x) && (op.op_name == "join" || op.op_name == "join'")], [wrap ite_result_image, op.op_name == "if_then_else"], [wrap (op.fn this.value (get_image x)), has_image x], [wrap (op.fn this.value (get_number x)), has_number x], // if it's not a class on the RHS, handle here ... just apply and // rewrap [wrap (op.fn this.value x), !is_class x] // all other cases handled by other classes ] ++ super.oo_binary_table op x { // wrap the result with this // x can be a non-image, eg. compare "Image v == []" vs. // "Image v == 12" wrap x = x, op.type == Operator_type.COMPOUND || !is_image x = this.Image x; join_result_image = value ++ new_stuff, op.op_name == "join" = new_stuff ++ value { new_stuff = image_new width height new_bands format coding Image_type.B_W x xoffset yoffset; new_bands = get_bands x, has_bands x = 1; } [then_part, else_part] = x; // get things about our output from inputs in this order objects = [then_part, else_part, this]; // properties of our output image target_bands = get_member_list has_bands get_bands objects; target_type = get_member_list has_type get_type objects; // if one of then/else is an image, get the target format from that // otherwise, let the non-image objects set the target target_format = get_member_list has_format get_format x, has_member_list has_format x = NULL; to_image x = to_image_size width height target_bands target_format x; [then', else'] = map to_image x; ite_result_image = image_set_type target_type (if value then then' else else'); } // FIXME ... yuk ... don't use operator hints, just always rewrap if // we have an image result // forced on us by things like abs: // abs Vector -> real // abs Image -> Image // does not fit well with COMPOUND/whatever scheme oo_unary_table op = [ [this.Image result, is_image result], [result, true] ] ++ super.oo_unary_table op { result = op.fn this.value; } } /* Construct an image from a file. */ Image_file filename = class Image value { _check_args = [ [filename, "filename", check_string] ]; value = vips_image filename; } Region image left top width height = class Image value { _check_args = [ [image, "Image", check_Image], [left, "left", check_real], [top, "top", check_real], [width, "width", check_preal], [height, "height", check_preal] ]; // a rect for our coordinates // region.rect gets the rect for the extracted image region_rect = Rect left top width height; // we need to always succeed ... value is our enclosing image if we're // out of bounds value = extract_area left top width height image.value, image.rect.includes_rect region_rect = image.value; } Area image left top width height = class scope.Region image left top width height { Region image left top width height = this.Area image left top width height; } Arrow image left top width height = class scope.Rect left top width height { _check_args = [ [image, "Image", check_Image], [left, "left", check_real], [top, "top", check_real], [width, "width", check_real], [height, "height", check_real] ]; Rect l t w h = this.Arrow image l t w h; } HGuide image top = class scope.Arrow image image.rect.left top image.width 0 { Arrow image left top width height = this.HGuide image top; } VGuide image left = class scope.Arrow image left image.rect.top 0 image.height { Arrow image left top width height = this.VGuide image left; } Mark image left top = class scope.Arrow image left top 0 0 { Arrow image left top width height = this.Mark image left top; } // convenience functions: ... specify position as [0 .. 1) Region_relative image u v w h = Region image (image.width * u) (image.height * v) (image.width * w) (image.height * h); Area_relative image u v w h = Area image (image.width * u) (image.height * v) (image.width * w) (image.height * h); Arrow_relative image u v w h = Arrow image (image.width * u) (image.height * v) (image.width * w) (image.height * h); VGuide_relative image v = VGuide image (image.height * v); HGuide_relative image u = HGuide image (image.width * u); Mark_relative image u v = Mark image (image.width * u) (image.height * v); Interpolate_type = class { NEAREST_NEIGHBOUR = 0; BILINEAR = 1; BICUBIC = 2; LBB = 3; NOHALO = 4; VSQBS = 5; // Should introspect to get the list of interpolators :-( // We can "dir" on VipsInterpolate to get a list of them, but we // can't get i18n'd descriptions until we have more // introspection stuff in nip2. /* Table to map interpol numbers to descriptive strings */ descriptions = [ _ "Nearest neighbour", _ "Bilinear", _ "Bicubic", _ "Upsize: reduced halo bicubic (LBB)", _ "Upsharp: reduced halo bicubic with edge sharpening (Nohalo)", _ "Upsmooth: quadratic B-splines with jaggy reduction (VSQBS)" ]; /* And to vips type names. */ types = [ "VipsInterpolateNearest", "VipsInterpolateBilinear", "VipsInterpolateBicubic", "VipsInterpolateLbb", "VipsInterpolateNohalo", "VipsInterpolateVsqbs" ]; } Interpolate type options = class { value = vips_object_new Interpolate_type.types?type [] options; } Interpolate_bilinear = Interpolate Interpolate_type.BILINEAR []; Interpolate_picker default = class Interpolate interp.value [] { _vislevel = 2; interp = Option "Interpolation" Interpolate_type.descriptions default; } Render_intent = class { PERCEPTUAL = 0; RELATIVE = 1; SATURATION = 2; ABSOLUTE = 3; /* Table to get names <-> numbers. */ names = Enum [ _ "Perceptual" => PERCEPTUAL, _ "Relative" => RELATIVE, _ "Saturation" => SATURATION, _ "Absolute" => ABSOLUTE ]; } // abstract base class for toolkit menus Menu = class {} // a "----" line in a menu Menuseparator = class Menu {} // abstract base class for items in menus Menuitem label tooltip = class Menu {} Menupullright label tooltip = class Menuitem label tooltip {} Menuaction label tooltip = class Menuitem label tooltip {} /* Plots. */ Plot_style = class { POINT = 0; LINE = 1; SPLINE = 2; BAR = 3; names = Enum [ _ "Point" => POINT, _ "Line" => LINE, _ "Spline" => SPLINE, _ "Bar" => BAR ]; } Plot_format = class { YYYY = 0; XYYY = 1; XYXY = 2; names = Enum [ _ "YYYY" => YYYY, _ "XYYY" => XYXY, _ "XYXY" => XYXY ]; } Plot_type = class { /* Lots of Ys (ie. multiple line plots). */ YYYY = 0; /* First column of matrix is X position, others are Ys (ie. multiple XY * line plots, all with the same Xes). */ XYYY = 1; /* Many independent XY plots. */ XYXY = 2; } /* "options" is a list of ["key", value] pairs. */ Plot options value = class scope.Image value { Image value = this.Plot options value; to_image dpi = extract_bands 0 3 (graph_export_image (to_real dpi) this); } Plot_matrix options value = class Plot options (to_image value).value { } Plot_histogram value = class scope.Plot [] value { } Plot_xy value = class scope.Plot [$format => Plot_format.XYYY] value { } /* A no-value type. Call it NULL for C-alike fun. Used by Group to indicate * empty slots, for example. */ NULL = class _Object { oo_binary_table op x = [ // the only operation we allow is equality .. use pointer equality, // this lets us test a == NULL and a != NULL [this === x, op.type == Operator_type.RELATIONAL && op.op_name == "equal"], [this !== x, op.type == Operator_type.RELATIONAL && op.op_name == "not_equal"] ] ++ super.oo_binary_table op x; } nip2-8.7.0/share/nip2/compat/7.40/Makefile.am0000644000175000017500000000062213224651032015176 00000000000000startdir = $(pkgdatadir)/compat/7.40 start_DATA = \ Math.def \ Image.def \ Magick.def \ Colour.def \ Tasks.def \ Object.def \ Filter.def \ Matrix.def \ Widgets.def \ Histogram.def \ Preferences.ws \ _joe_extra.def \ _joe_utilities.def \ _convert.def \ _generate.def \ _list.def \ _predicate.def \ _stdenv.def \ _Object.def \ _magick.def \ _types.def EXTRA_DIST = $(start_DATA) nip2-8.7.0/share/nip2/compat/7.8/0000755000175000017500000000000013350464160013152 500000000000000nip2-8.7.0/share/nip2/compat/7.8/_stdenv.def0000644000175000017500000007141013224651032015213 00000000000000/* Various operators as functions. */ logical_and a b = a && b; logical_or a b = a || b; bitwise_and a b = a & b; bitwise_or a b = a | b; eor a b = a ^ b; left_shift a b = a << b; right_shift a b = a >> b; not a = !a; less a b = a < b; more a b = a > b; less_equal a b = a <= b; more_equal a b = a >= b; equal a b = a == b; not_equal a b = a != b; pointer_equal a b = a === b; not_pointer_equal a b = a !== b; add a b = a + b; subtract a b = a - b; multiply a b = a * b; divide a b = a / b; power a b = a ** b; square x = x * x; remainder a b = a % b; cons a b = a : b; join a b = a ++ b; subscript a b = a ? b; generate s n f = [s, n .. f]; comma r i = (r, i); compose f g = f @ g; cast_unsigned_char x = (unsigned char) x; cast_signed_char x = (signed char) x; cast_unsigned_short x = (unsigned short) x; cast_signed_short x = (signed short) x; cast_unsigned_int x = (unsigned int) x; cast_signed_int x = (signed int) x; cast_float x = (float) x; cast_double x = (double) x; cast_complex x = (complex) x; cast_double_complex x = (double complex) x; unary_minus x = -x; negate x = !x; complement x = ~x; unary_plus x = +x; if_then_else a b c = if a then b else c; // the vector ops ... im is an image, vec is a real_list vec op_name im vec = im_lintra_vec ones im vec, op_name == "add" || op_name == "add'" = im_lintra_vec ones (-1 * im) vec, op_name == "subtract'" = im_lintra_vec ones im inv, op_name == "subtract" = im_lintra_vec vec im zeros, op_name == "multiply" || op_name == "multiply'" = im_lintra_vec vec (1 / im) zeros, op_name == "divide'" = im_lintra_vec recip im zeros, op_name == "divide" = im_expntra_vec im vec, op_name == "power'" = im_powtra_vec im vec, op_name == "power" = im_remainderconst_vec im vec, op_name == "remainder" = im_andimage_vec im vec, op_name == "bitwise_and" || op_name == "bitwise_and'" = im_orimage_vec im vec, op_name == "bitwise_or" || op_name == "bitwise_or'" = im_eorimage_vec im vec, op_name == "eor" || op_name == "eor'" = im_equal_vec im vec, op_name == "equal" || op_name == "equal'" = im_notequal_vec im vec, op_name == "not_equal" || op_name == "not_equal'" = im_less_vec im vec, op_name == "less" = im_moreeq_vec im vec, op_name == "less'" = im_lesseq_vec im vec, op_name == "less_equal" = im_more_vec im vec, op_name == "less_equal'" = error "unimplemented vector operation" { zeros = map (const 0) [1 .. len vec]; ones = map (const 1) [1 .. len vec]; recip = map (divide 1) vec; inv = map (multiply (-1)) vec; } /* Macbeth chart patch names. */ _macbeth_names = [ "Dark skin", "Light skin", "Blue sky", "Foliage", "Blue flower", "Bluish green", "Orange", "Purplish blue", "Moderate red", "Purple", "Yellow green", "Orange yellow", "Blue", "Green", "Red", "Yellow", "Magenta", "Cyan", "White (density 0.05)", "Neutral 8 (density 0.23)", "Neutral 6.5 (density 0.44)", "Neutral 5 (density 0.70)", "Neutral 3.5 (density 1.05)", "Black (density 1.50)" ]; bandsplit x = oo_unary_function bandsplit_op x, is_class x = map (subscript x) [0 .. bands - 1], is_image x = error (errors.badargs ++ "bandsplit") { bands = im_header_int "Bands" x; bandsplit_op = Operator "bandsplit" (map Image @ bandsplit) Operator_type.COMPOUND false; } bandjoin l = Image (concat (map get_value l)), is_listof (is_instanceof "Image") l = concat l, is_listof is_image l = error (errors.badargs ++ "bandjoin") { get_value x = x.value; } mean x = oo_unary_function mean_op x, is_class x = im_avg x, is_image x = error (errors.badargs ++ "mean") { mean_op = Operator "mean" mean_object Operator_type.COMPOUND false; mean_object x = im_avg x, is_image x = mean_list x, is_real_list x || is_matrix x = error (errors.badargs ++ "mean"); mean_list l = s / n { totals = sum l; n = totals?0; s = totals?1; } // return [n, sum] for a list of numbers, or a list of list of num // etc. sum x = foldr accumulate [0, 0] x { accumulate x sofar = [n + 1, x + s], is_real x = [n + n', s + s'], is_list x = error "mean_list: not real or [real]" { n = sofar?0; s = sofar?1; sub_acc = sum x; n' = sub_acc?0; s' = sub_acc?1; } } } deviation x = oo_unary_function deviation_op x, is_class x = im_deviate x, is_image x = error (errors.badargs ++ "deviation") { deviation_op = Operator "deviation" deviation_object Operator_type.COMPOUND false; deviation_object x = im_deviate x, is_image x = deviation_list x, is_real_list x || is_matrix x = error (errors.badargs ++ "deviation"); deviation_list l = (abs (s2 - (s * s / n)) / (n - 1)) ** 0.5 { totals = sum_sum2_list l; n = totals?0; s = totals?1; s2 = totals?2; } // return n, sum, sum of squares for a list of reals sum_sum2_list x = foldr accumulate [0, 0, 0] x { accumulate x sofar = [n + 1, x + s, x * x + s2], is_real x = [n + n', s + s', s2 + s2'], is_list x = error "sum_sum2_list: not real or [real]" { n = sofar?0; s = sofar?1; s2 = sofar?2; sub_acc = sum_sum2_list x; n' = sub_acc?0; s' = sub_acc?1; s2' = sub_acc?2; } } } abs x = oo_unary_function abs_op x, is_class x = im_abs x, is_image x = abs_cmplx x, is_complex x = abs_num x, is_real x = error (errors.badargs ++ "abs") { abs_op = Operator "abs" abs_object Operator_type.COMPOUND false; abs_object x = im_abs x, is_image x = abs_cmplx x, is_complex x = abs_num x, is_real x = abs_list x, is_real_list x = abs_list (map abs_list x), is_matrix x = error (errors.badargs ++ "abs"); abs_list l = (foldr1 add (map square l)) ** 0.5; abs_num n = n, n >= 0 = -n; abs_cmplx c = ((re c)**2 + (im c)**2) ** 0.5; } copy x = oo_unary_function copy_op x, is_class x = im_copy x, is_image x = x { copy_op = Operator "copy" copy Operator_type.COMPOUND_REWRAP false; } // like abs, but treat pixels as vectors ... ie. always get a 1-band image // back ... also treat matricies as lists of vectors // handy for dE from object difference abs_vec x = oo_unary_function abs_vec_op x, is_class x = abs_vec_image x, is_image x = abs_vec_cmplx x, is_complex x = abs_vec_num x, is_real x = error (errors.badargs ++ "abs_vec") { abs_vec_op = Operator "abs_vec" abs_vec_object Operator_type.COMPOUND false; abs_vec_object x = abs_vec_image x, is_image x = abs_vec_cmplx x, is_complex x = abs_vec_num x, is_real x = abs_vec_list x, is_real_list x = mean (Vector (map abs_vec_list x)), is_matrix x = error (errors.badargs ++ "abs_vec"); abs_vec_list l = (foldr1 add (map square l)) ** 0.5; abs_vec_num n = n, n >= 0 = -n; abs_vec_cmplx c = ((re c)**2 + (im c)**2) ** 0.5; abs_vec_image im = (foldr1 add (map square (bandsplit im))) ** 0.5; } transpose x = oo_unary_function transpose_op x, is_class x = transpose_image x, is_image x = transpose_matrix x, is_list x && is_list (hd x) = error (errors.badargs ++ "transpose") { transpose_op = Operator "transpose" transpose_object Operator_type.COMPOUND_REWRAP false; transpose_object x = transpose_matrix x, is_matrix x = transpose_image x, is_image x = error (errors.badargs ++ "transpose"); transpose_matrix l = [], l' == [] = (map hd l') : (transpose_matrix (map tl l')) { l' = takewhile (not_equal []) l; } transpose_image = im_flipver @ im_rot270; } rot45 x = oo_unary_function rot45_op x, is_class x = error "rot45 image: not implemented", is_image x = error (errors.badargs ++ "rot45") { rot45_op = Operator "rot45" rot45_object Operator_type.COMPOUND_REWRAP false; rot45_object x = rot45_matrix x, is_odd_square_matrix x = error "rot45 image: not implemented", is_image x = error (errors.badargs ++ "rot45"); // slow, but what the heck rot45_matrix l = (im_rotate_dmask45 (Matrix l)).value; } rot90 x = oo_unary_function rot90_op x, is_class x = im_rot90 x, is_image x = error (errors.badargs ++ "rot90") { rot90_op = Operator "rot90" rot90_object Operator_type.COMPOUND_REWRAP false; rot90_object x = rot90_matrix x, is_matrix x = im_rot90 x, is_image x = error (errors.badargs ++ "rot90"); // slow, but what the heck rot90_matrix l = (im_rotate_dmask90 (Matrix l)).value; } rot180 x = oo_unary_function rot180_op x, is_class x = im_rot180 x, is_image x = error (errors.badargs ++ "rot180") { rot180_op = Operator "rot180" rot180_object Operator_type.COMPOUND_REWRAP false; rot180_object x = rot180_matrix x, is_matrix x = im_rot180 x, is_image x = error (errors.badargs ++ "rot180"); // slow, but what the heck rot180_matrix l = (im_rotate_dmask90 (im_rotate_dmask90 (Matrix l))).value; } rot270 x = oo_unary_function rot270_op x, is_class x = im_rot270 x, is_image x = error (errors.badargs ++ "rot270") { rot270_op = Operator "rot270" rot270_object Operator_type.COMPOUND_REWRAP false; rot270_object x = rot270_matrix x, is_matrix x = im_rot270 x, is_image x = error (errors.badargs ++ "rot270"); // slow, but what the heck rot270_matrix l = (im_rotate_dmask90 (im_rotate_dmask90 (im_rotate_dmask90 (Matrix l)))).value; } rotquad x = oo_unary_function rotquad_op x, is_class x = im_rotquad x, is_image x = error (errors.badargs ++ "rotquad") { rotquad_op = Operator "rotquad" rotquad_object Operator_type.COMPOUND_REWRAP false; rotquad_object x = rotquad_matrix x, is_matrix x = im_rotquad x, is_image x = error (errors.badargs ++ "rotquad"); rotquad_matrix l = error "rotquad matrix: not implemented"; } flipud x = oo_unary_function flipud_op x, is_class x = im_flipver x, is_image x = error (errors.badargs ++ "flipud") { flipud_op = Operator "flipud" flipud_object Operator_type.COMPOUND_REWRAP false; flipud_object x = flipud_matrix x, is_matrix x = im_flipver x, is_image x = error (errors.badargs ++ "flipud"); flipud_matrix l = reverse l; } fliplr x = oo_unary_function fliplr_op x, is_class x = im_fliphor x, is_image x = error (errors.badargs ++ "fliplr") { fliplr_op = Operator "fliplr" fliplr_object Operator_type.COMPOUND_REWRAP false; fliplr_object x = fliplr_matrix x, is_matrix x = im_fliphor x, is_image x = error (errors.badargs ++ "fliplr"); fliplr_matrix l = map reverse l; } max_pair a b = a, a > b = b; min_pair a b = a, a < b = b; max x = oo_unary_function max_op x, is_class x = im_max x, is_image x = x, is_number x = error (errors.badargs ++ "max") { max_op = Operator "max" max_list Operator_type.COMPOUND false; max_list x = foldr1 max_pair x, is_real_list x = foldr1 max_pair (map max_list x), is_matrix x = max x; } min x = oo_unary_function min_op x, is_class x = im_min x, is_image x = x, is_number x = error (errors.badargs ++ "min") { min_op = Operator "min" min_list Operator_type.COMPOUND false; min_list x = foldr1 min_pair x, is_real_list x = foldr1 min_pair (map min_list x), is_matrix x = min x; } maxpos x = oo_unary_function maxpos_op x, is_class x = im_maxpos x, is_image x = error (errors.badargs ++ "maxpos") { maxpos_op = Operator "maxpos" maxpos_object Operator_type.COMPOUND false; maxpos_object x = maxpos_matrix x, is_matrix x = im_maxpos x, is_image x = error (errors.badargs ++ "maxpos"); maxpos_matrix m = (indexes?row, row) { max_value = max (Matrix m); indexes = map (index (equal max_value)) m; row = index (not_equal (-1)) indexes; } } minpos x = oo_unary_function minpos_op x, is_class x = im_minpos x, is_image x = error (errors.badargs ++ "minpos") { minpos_op = Operator "minpos" minpos_object Operator_type.COMPOUND false; minpos_object x = minpos_matrix x, is_matrix x = im_minpos x, is_image x = error (errors.badargs ++ "minpos"); minpos_matrix m = (indexes?row, row) { min_value = min (Matrix m); indexes = map (index (equal min_value)) m; row = index (not_equal (-1)) indexes; } } stats x = oo_unary_function stats_op x, is_class x = im_stats x, is_image x = error (errors.badargs ++ "stats") { stats_op = Operator "stats" stats_object Operator_type.COMPOUND false; stats_object x = im_stats (to_image x).value, is_matrix x = im_stats x, is_image x = error (errors.badargs ++ "stats"); } e = 2.7182818284590452354; pi = 3.14159265358979323846; rad d = 2 * pi * (d / 360); deg r = 360 * r / (2 * pi); sign x = oo_unary_function sign_op x, is_class x = im_sign x, is_image x = sign_cmplx x, is_complex x = sign_num x, is_real x = error (errors.badargs ++ "sign") { sign_op = Operator "sign" sign Operator_type.COMPOUND_REWRAP false; sign_num n = 0, n == 0 = 1, n > 0 = -1; sign_cmplx c = (0, 0), mod == 0 = (re c / mod, im c / mod) { mod = abs c; } } rint x = oo_unary_function rint_op x, is_class x = rint_value x, is_image x || is_number x = error (errors.badargs ++ "rint") { rint_op = Operator "rint" rint_value Operator_type.ARITHMETIC false; rint_value x = (int) (x + 0.5), x > 0 = (int) (x - 0.5); } scale x = oo_unary_function scale_op x, is_class x = scale_prim x { scale_op = Operator "scale" scale_prim Operator_type.COMPOUND_REWRAP false; scale_prim x = (unsigned char) x, is_number x = im_scale x, is_image x = scale_list x, is_real_list x || is_matrix x = error (errors.badargs ++ "scale"); scale_list l = apply_scale s o l { mn = find_limit min_pair l; mx = find_limit max_pair l; s = 255.0 / (mx - mn); o = -(mn * s); } find_limit fn l = find_limit fn (map (find_limit fn) l), is_listof is_list l = foldr1 fn l; apply_scale s o x = x * s + o, is_number x = map (apply_scale s o) x; } scaleps x = oo_unary_function scale_op x, is_class x = im_scaleps x, is_image x = error (errors.badargs ++ "scale") { scale_op = Operator "scaleps" scaleps Operator_type.COMPOUND_REWRAP false; } fwfft x = oo_unary_function fwfft_op x, is_class x = im_fwfft x, is_image x = error (errors.badargs ++ "fwfft") { fwfft_op = Operator "fwfft" fwfft Operator_type.COMPOUND_REWRAP false; } invfft x = oo_unary_function invfft_op x, is_class x = im_invfftr x, is_image x = error (errors.badargs ++ "invfft") { invfft_op = Operator "invfft" invfft Operator_type.COMPOUND_REWRAP false; } falsecolour x = oo_unary_function falsecolour_op x, is_class x = im_falsecolour x, is_image x = error (errors.badargs ++ "falsecolour") { falsecolour_op = Operator "falsecolour" falsecolour Operator_type.COMPOUND_REWRAP false; } polar x = oo_unary_function polar_op x, is_class x = im_c2amph x, is_image x = polar_cmplx x, is_complex x = error (errors.badargs ++ "polar") { polar_op = Operator "polar" polar Operator_type.COMPOUND false; polar_cmplx r = (l, a) { a = 270, x == 0 && y < 0 = 90, x == 0 && y >= 0 = 360 + atan (y / x), x > 0 && y < 0 = atan (y / x), x > 0 && y >= 0 = 180 + atan (y / x); l = (x ** 2 + y ** 2) ** 0.5; x = re r; y = im r; } } rectangular x = oo_unary_function rectangular_op x, is_class x = im_c2rect x, is_image x = rectangular_cmplx x, is_complex x = error (errors.badargs ++ "rectangular") { rectangular_op = Operator "rectangular" rectangular Operator_type.COMPOUND false; rectangular_cmplx p = (x, y) { l = re p; a = im p; x = l * cos a; y = l * sin a; } } recomb matrix image = colour_unary recomb_op image { recomb_op x = im_recomb x matrix, is_image x = error (errors.badargs ++ "recomb"); } extract_area x y w h obj = oo_unary_function extract_area_op obj, is_class obj = extract_area_prim obj { x' = to_real x; y' = to_real y; w' = to_real w; h' = to_real h; extract_area_op = Operator "extract_area" extract_area_prim Operator_type.COMPOUND_REWRAP false; extract_area_prim obj = im_extract_area obj x' y' w' h', is_image obj = map (extract_range x' w') (extract_range y' h' obj), is_matrix obj = error (errors.badargs ++ "extract_area"); extract_range from length list = (take length @ drop from) list; } extract_band b obj = subscript obj b; extract_row y obj = oo_unary_function extract_row_op obj, is_class obj = extract_row_prim obj { y' = to_real y; extract_row_op = Operator "extract_row" extract_row_prim Operator_type.COMPOUND_REWRAP false; extract_row_prim obj = im_extract_area obj 0 y' width 1, is_image obj = [obj?y'], is_matrix obj = error (errors.badargs ++ "extract_row") { width = im_header_int "Xsize" obj; } } extract_column x obj = oo_unary_function extract_column_op obj, is_class obj = extract_column_prim obj { x' = to_real x; extract_column_op = Operator "extract_column" extract_column_prim Operator_type.COMPOUND_REWRAP false; extract_column_prim obj = im_extract_area obj x' 0 1 height, is_image obj = map (converse cons [] @ converse subscript x') obj, is_matrix obj = error (errors.badargs ++ "extract_column") { height = im_header_int "Ysize" obj; } } join_lr a b = oo_binary_function join_lr_op a b, is_class a = oo_binary'_function join_lr_op a b, is_class b = join_lr_prim a b { join_lr_op = Operator "join_lr" join_lr_prim Operator_type.COMPOUND_REWRAP false; join_lr_prim a b = im_extract_area (im_insert a b a_width 0) 0 0 (a_width + b_width) out_height, is_image a && is_image b = map2 join a b, is_matrix a && is_matrix b = error (errors.badargs ++ "join_lr") { a_height = im_header_int "Ysize" a; b_height = im_header_int "Ysize" b; a_width = im_header_int "Xsize" a; b_width = im_header_int "Xsize" b; out_height = min_pair a_height b_height; } } join_tb a b = oo_binary_function join_tb_op a b, is_class a = oo_binary'_function join_tb_op a b, is_class b = join_tb_prim a b { join_tb_op = Operator "join_tb" join_tb_prim Operator_type.COMPOUND_REWRAP false; join_tb_prim a b = im_extract_area (im_insert a b 0 a_height) 0 0 out_width (a_height + b_height), is_image a && is_image b = map (take out_matrix_width) a ++ map (take out_matrix_width) b, is_matrix a && is_matrix b = error (errors.badargs ++ "join_tb") { a_height = im_header_int "Ysize" a; b_height = im_header_int "Ysize" b; a_width = im_header_int "Xsize" a; b_width = im_header_int "Xsize" b; out_width = min_pair a_width b_width; out_matrix_width = min_pair a_matrix_width b_matrix_width { a_matrix_width = len a?0; b_matrix_width = len b?0; } } } insert x y small big = oo_binary_function insert_op small big, is_class small = oo_binary'_function insert_op small big, is_class big = im_insert big small (to_real x) (to_real y), is_image small && is_image big = error (errors.badargs ++ "insert") { insert_op = Operator "insert" (insert x y) Operator_type.COMPOUND_REWRAP false; } measure x y w h u v image = oo_unary_function measure_op image, is_class image = im_measure image (to_real x) (to_real y) (to_real w) (to_real h) (to_real u) (to_real v), is_image image = error (errors.badargs ++ "measure") { measure_op = Operator "measure" (measure x y w h u v) Operator_type.COMPOUND_REWRAP false; } rotate angle image = oo_binary_function rotate_op angle image, is_class angle = oo_binary'_function rotate_op angle image, is_class image = im_similarity image (cos angle) (sin angle) 0 0, is_real angle && is_image image = error (errors.badargs ++ "rotate") { rotate_op = Operator "rotate" rotate Operator_type.COMPOUND_REWRAP false; } conj x = oo_unary_function conj_op x, is_class x = (re x, -im x), is_complex x || (is_image x && format == Image_format.COMPLEX) || (is_image x && format == Image_format.DPCOMPLEX) // assume it's some sort of real = x { format = im_header_int "BandFmt" x; conj_op = Operator "conj" conj Operator_type.COMPOUND false; } clip2fmt format image = oo_unary_function (clip2fmt_op format) image, is_class image = im_clip2fmt image format, is_image image = error (errors.badargs ++ "clip2fmt") { clip2fmt_op format = Operator "clip2fmt" (clip2fmt format) Operator_type.COMPOUND_REWRAP false; } /* Morph a mask with a [[real]] matrix ... turn m2 into an image, morph it * with m1, turn it back to a matrix again. */ _morph_2_masks fn m1 m2 = m'' { image = (unsigned char) im_mask2vips (Matrix m2); m2_width = im_header_int "Xsize" image; m2_height = im_header_int "Ysize" image; // need to embed m2 in an image large enough for us to be able to // position m1 all around the edges, with a 1 pixel overlap image' = im_embed image 0 (m1.width - 1) (m1.height - 1) (m2_width + 2 * (m1.width - 1)) (m2_height + 2 * (m1.height - 1)); // morph! image'' = fn m1 image'; // back to mask m' = im_vips2mask ((double) image''); // Turn 0 in output to 128 (don't care). m'' = map (map fn) m'.value { fn a = 128, a == 0; = a; } } dilate mask image = oo_unary_function dilate_op image, is_class image = im_dilate image mask, is_image image = error (errors.badargs ++ "dilate") { dilate_op = Operator "dilate" dilate_object Operator_type.COMPOUND_REWRAP false; dilate_object x = _morph_2_masks dilate mask x, is_matrix x = dilate mask x; } erode mask image = oo_unary_function erode_op image, is_class image = im_erode image mask, is_image image = error (errors.badargs ++ "erode") { erode_op = Operator "erode" erode_object Operator_type.COMPOUND_REWRAP false; erode_object x = _morph_2_masks erode mask x, is_matrix x = erode mask x; } conv mask image = oo_unary_function conv_op image, is_class image = im_conv image mask, is_image image = error (errors.badargs ++ "conv") { conv_op = Operator "conv" (conv mask) Operator_type.COMPOUND_REWRAP false; } rank w h n image = oo_unary_function rank_op image, is_class image = im_rank image w h n, is_image image = error (errors.badargs ++ "rank") { rank_op = Operator "rank" (rank w h n) Operator_type.COMPOUND_REWRAP false; } hist_find image = oo_unary_function hist_find_op image, is_class image = im_histgr image (-1), is_image image = error (errors.badargs ++ "hist_find") { hist_find_op = Operator "hist_find" hist_find Operator_type.COMPOUND_REWRAP false; } hist_find_nD bins image = oo_unary_function hist_find_nD_op image, is_class image = im_histnD image bins, is_image image = error (errors.badargs ++ "hist_find_nD") { hist_find_nD_op = Operator "hist_find_nD" hist_find_nD Operator_type.COMPOUND_REWRAP false; } hist_map hist image = oo_binary_function hist_map_op hist image, is_class hist = oo_binary'_function hist_map_op hist image, is_class image = im_maplut image hist, is_image hist && is_image image = error (errors.badargs ++ "hist_map") { hist_map_op = Operator "hist_map" hist_map Operator_type.COMPOUND_REWRAP false; } hist_cum hist = oo_unary_function hist_cum_op hist, is_class hist = im_histcum hist, is_image hist = error (errors.badargs ++ "hist_cum") { hist_cum_op = Operator "hist_cum" hist_cum Operator_type.COMPOUND_REWRAP false; } hist_norm hist = oo_unary_function hist_norm_op hist, is_class hist = im_histnorm hist, is_image hist = error (errors.badargs ++ "hist_norm") { hist_norm_op = Operator "hist_norm" hist_norm Operator_type.COMPOUND_REWRAP false; } hist_match in ref = oo_binary_function hist_match_op in ref, is_class in = oo_binary'_function hist_match_op in ref, is_class ref = im_histspec in ref, is_image in && is_image ref = error (errors.badargs ++ "hist_match") { hist_match_op = Operator "hist_match" hist_match Operator_type.COMPOUND_REWRAP false; } hist_equalize x = hist_map ((hist_norm @ hist_cum @ hist_find) x) x; hist_equalize_local w h image = oo_unary_function hist_equalize_local_op image, is_class image = im_lhisteq image w h, is_image image = error (errors.badargs ++ "hist_equalize_local") { hist_equalize_local_op = Operator "hist_equalize_local" (hist_equalize_local w h) Operator_type.COMPOUND_REWRAP false; } resize xfac yfac interp image = oo_unary_function resize_op image, is_class image = resize_im image, is_image image = error (errors.badargs ++ "resize") { resize_op = Operator "resize" resize_im Operator_type.COMPOUND_REWRAP false; resize_im im // upscale by integer factor, nearest neighbour = im_zoom im xfac yfac, is_int xfac && is_int yfac && xfac >= 1 && yfac >= 1 && interp == Interpolate.nearest_neighbour // downscale by integer factor, nearest neighbour = im_subsample im xfac' yfac', is_int xfac' && is_int yfac' && xfac' >= 1 && yfac' >= 1 && interp == Interpolate.nearest_neighbour // upscale by any factor, nearest neighbour // can't really do this right ... upscale by integer part, then // bilinear to exact size = scale (break xfac)?1 (break yfac)?1 (im_zoom im (break xfac)?0 (break yfac)?0), xfac >= 1 && yfac >= 1 && interp == Interpolate.nearest_neighbour // downscale by any factor, nearest neighbour // can't really do this right ... downscale by integer part, // then bilinear to exact size = scale (1 / (break xfac')?1) (1 / (break yfac')?1) (im_subsample im (break xfac')?0 (break yfac')?0), xfac' >= 1 && yfac' >= 1 && interp == Interpolate.nearest_neighbour // upscale by any factor, bilinear = scale xfac yfac im, xfac >= 1 && yfac >= 1 && interp == Interpolate.bilinear // downscale by any factor, bilinear // block shrink by integer factor, then bilinear resample to // exact = scale (1 / (break xfac')?1) (1 / (break yfac')?1) (im_shrink im (break xfac')?0 (break yfac')?0), xfac' >= 1 && yfac' >= 1 && interp == Interpolate.bilinear = error ("resize: unimplemented argument combination:\n" ++ " xfac = " ++ print xfac ++ "\n" ++ " yfac = " ++ print yfac ++ "\n" ++ " interp = " ++ print interp ++ " (" ++ Interpolate.names.lookup 1 0 interp ++ ")") { xfac' = 1 / xfac; yfac' = 1 / yfac; // convert a float scale to integer plus fraction // eg. scale by 2.5 becomes [2, 1.25] (x * 2.5 == x * 2 * 1.25) break f = [floor f, f / floor f]; // binlinear resize scale xfac yfac im = im_affine im xfac 0 0 yfac 0 0 0 0 (width * xfac) (height * yfac) { width = im_header_int "Xsize" im; height = im_header_int "Ysize" im; } } } /* id x: the identity function * * id :: * -> * */ id x = x; /* const x y: junk y, return x * * (const 3) is the function that always returns 3. * const :: * -> ** -> * */ const x y = x; /* converse fn a b: swap order of args to fn * * converse fn a b == fn b a * converse :: (* -> ** -> ***) -> ** -> * -> *** */ converse fn a b = fn b a; /* fix fn x: find the fixed point of a function */ fix fn x = limit (iterate fn x); /* until pred fn n: apply fn to n until pred succeeds; return that value * * until (more 1000) (multiply 2) 1 = 1024 * until :: (* -> bool) -> (* -> *) -> * -> * */ until pred fn n = n, pred n = until pred fn (fn n); /* Infinite list of primes. */ primes = 1 : (sieve [2..]) { sieve l = hd l : sieve (filter (nmultiple (hd l)) (tl l)); nmultiple n x = x / n != (int) (x / n); } /* Map a 3-ary function over three objects. */ map_trinary fn a b c = map3 (map_trinary fn) a b c, is_list a && is_list b && is_list c = map2 (map_trinary fn a) b c, is_list b && is_list c = map2 (map_trinary (converse31 fn) b) a c, is_list a && is_list c = map2 (map_trinary (converse32 fn) c) a b, is_list a && is_list b = map (map_trinary fn a b) c, is_list c = map (map_trinary (converse32 fn) a c) b, is_list b = map (map_trinary (converse34 fn) b c) a, is_list a = fn a b c { converse31 fn a b c = fn b a c; converse32 fn a b c = fn c a b; converse33 fn a b c = fn a c b; converse34 fn a b c = fn b c a; } /* Map a 2-ary function over a pair of objects. */ map_binary fn a b = map2 (map_binary fn) a b, is_list a && is_list b = map (map_binary fn a) b, is_list b = map (map_binary (converse fn) b) a, is_list a = fn a b; /* Map a 1-ary function over an object. */ map_unary fn a = map (map_unary fn) a, is_list a = fn a; /* Chop up an image into a list of lists of smaller images. Pad edges with * black. */ imagearray_chop block_size overlap i = map chop' [0, step .. height] { width = im_header_int "Xsize" i; height = im_header_int "Ysize" i; bands = im_header_int "Bands" i; format = im_header_int "BandFmt" i; type = im_header_int "Type" i; /* Unique pixels per tile. */ step = block_size - overlap; /* Calculate padding ... pad up to block_size pixel boundary. */ sx = block_size + (width - width % step); sy = block_size + (height - height % step); /* Expand image with black to pad size. */ background = image_new sx sy bands format Image_coding.NOCODING type 0 0 0; pad = im_insert background i 0 0; /* Chop up a row. */ chop' y = map chop'' [0, step .. width] { chop'' x = im_extract_area pad x y block_size block_size; } } /* Reassemble image. */ imagearray_assemble hoverlap voverlap il = vjoin (map hjoin il) { /* Join a list of tiles horizontally. */ hjoin l = foldl1 lrj l { lrj l r = im_lrmerge l r (hoverlap - im_header_int "Xsize" l) 0 10; } /* Join a list of tiles vertically. */ vjoin l = foldl1 tbj l { tbj t b = im_tbmerge t b 0 (voverlap - im_header_int "Ysize" t) 10; } } /* Generate an nxn identity matrix. */ identity_matrix n = error "identity_matrix: n > 0", n < 1 = map line [0 .. n - 1] { line p = take p [0, 0 ..] ++ [1] ++ take (n - p - 1) [0, 0 ..]; } nip2-8.7.0/share/nip2/compat/7.8/Mosaic.def0000644000175000017500000002121713224651032014764 00000000000000 /* Check and group a point list by image. */ _mosaic_sort_test l = error "mosaic: not all points", !is_listof (is_instanceof "Point") l = error "mosaic: points not on two images", len images != 2 = error "mosaic: images do not match in format and coding", !all_equal (map get_format l) || !all_equal (map get_coding l) = error "mosaic: not same number of points on each image", !foldr1 equal (map len l') = l' { // test for all elements of a list equal all_equal l = land (map (equal (hd l)) (tl l)); get_format x = x.image.format; get_coding x = x.image.coding; // all the different images get_image x = x.image; images = mkset pointer_equal (map get_image l); // find all points defined on image test_image image p = p.image === image; find l image = filter (test_image image) l; // group point list by image l' = map (find l) images; } /* Sort a point group to get right before left, and within each group to get * above before below. */ _mosaic_sort_lr l = l'' { // sort to get upper point first above a b = a.top < b.top; l' = map (sortc above) l; // sort to get right group before left group right a b = (a?0).left > (b?0).left; l'' = sortc right l'; } /* Sort a point group to get top before bottom, and within each group to get * left before right. */ _mosaic_sort_tb l = l'' { // sort to get upper point first left a b = a.left < b.left; l' = map (sortc left) l; // sort to get right group before left group below a b = (a?0).top > (b?0).top; l'' = sortc below l'; } /* Put 'em together! Group by image, sort vertically (or horizontally) with * one of the above, transpose to get pairs matched up, and flatten again. */ _mosaic_sort fn = concat @ transpose @ fn @ _mosaic_sort_test; /* translate and blend two images together left/right or up/down */ Mosaic_translate = class { _check_ab_args a b = [ [a, "a", check_Point], [b, "b", check_Point] ]; // shortcut to prefs _prefs = Workspaces.Preferences; _search_area = _prefs.MOSAIC_WINDOW_SIZE; _object_size = _prefs.MOSAIC_OBJECT_SIZE; _blend_width = Slider 0 100 _prefs.MOSAIC_MAX_BLEND_WIDTH; _refine = Toggle "Refine selected tie-points" _prefs.MOSAIC_REFINE; /* translate and blend two images left/right */ Left_right a b = class Image value { _check_args = _check_ab_args a b ++ super._check_args; blend_width = _blend_width; refine = _refine; value = im_lrmosaic a'.image.value b'.image.value 0 ra'.left ra'.top rb'.left rb'.top (_object_size / 2) (_search_area / 2) 0 blend_width.value, refine = im_lrmerge a'.image.value b'.image.value (rb'.left - ra'.left) (rb'.top - ra'.top) blend_width.value { sorted = _mosaic_sort _mosaic_sort_lr [a, b]; a' = sorted?0; b' = sorted?1; ra' = a'.image_rect; rb' = b'.image_rect; } } /* translate and blend two images top/bottom */ Top_bottom a b = class Image value { _check_args = _check_ab_args a b ++ super._check_args; blend_width = _blend_width; refine = _refine; value = im_tbmosaic a'.image.value b'.image.value 0 ra'.left ra'.top rb'.left rb'.top (_object_size / 2) (_search_area / 2) 0 blend_width.value, refine = im_tbmerge a'.image.value b'.image.value (rb'.left - ra'.left) (rb'.top - ra'.top) blend_width.value { sorted = _mosaic_sort _mosaic_sort_tb [a, b]; a' = sorted?0; b' = sorted?1; ra' = a'.image_rect; rb' = b'.image_rect; } } } /* forcibly translate and blend two images together left/right or up/down */ Mosaic_force = class { _check_ab_args a b = [ [a, "a", check_Point], [b, "b", check_Point] ]; // shortcut to prefs _prefs = Workspaces.Preferences; _blend_width = Slider 0 100 _prefs.MOSAIC_MAX_BLEND_WIDTH; /* forcibly translate and blend two images left/right */ Left_right a b = class Image value { _check_args = _check_ab_args a b ++ super._check_args; blend_width = _blend_width; value = im_lrmerge a'.image.value b'.image.value (rb'.left - ra'.left) (rb'.top - ra'.top) blend_width.value { sorted = _mosaic_sort _mosaic_sort_lr [a, b]; a' = sorted?0; b' = sorted?1; ra' = a'.image_rect; rb' = b'.image_rect; } } /* forcibly translate and blend two images top/bottom */ Top_bottom a b = class Image value { _check_args = _check_ab_args a b ++ super._check_args; blend_width = _blend_width; value = im_tbmerge a'.image.value b'.image.value (rb'.left - ra'.left) (rb'.top - ra'.top) blend_width.value { sorted = _mosaic_sort _mosaic_sort_tb [a, b]; a' = sorted?0; b' = sorted?1; ra' = a'.image_rect; rb' = b'.image_rect; } } } /* translate, rotate, scale and blend two images together left/right or up/down */ Mosaic_affine = class { _check_abcd_args a b c d = [ [a, "a", check_Point], [b, "b", check_Point], [c, "c", check_Point], [d, "d", check_Point] ]; // shortcut to prefs _prefs = Workspaces.Preferences; _search_area = _prefs.MOSAIC_WINDOW_SIZE; _object_size = _prefs.MOSAIC_OBJECT_SIZE; _blend_width = Slider 0 100 _prefs.MOSAIC_MAX_BLEND_WIDTH; _refine = Toggle "Refine selected tie-points" _prefs.MOSAIC_REFINE; /* translate, rotate, scale and blend two images left/right */ Left_right a b c d = class Image value { _check_args = _check_abcd_args a b c d ++ super._check_args; blend_width = _blend_width; refine = _refine; value = im_lrmosaic1 a'.image.value b'.image.value 0 ra'.left ra'.top rb'.left rb'.top rc'.left rc'.top rd'.left rd'.top (_object_size / 2) (_search_area / 2) 0 blend_width.value, refine = im_lrmerge1 a'.image.value b'.image.value ra'.left ra'.top rb'.left rb'.top rc'.left rc'.top rd'.left rd'.top blend_width.value { sorted = _mosaic_sort _mosaic_sort_lr [a, b, c, d]; a' = sorted?0; b' = sorted?1; c' = sorted?2; d' = sorted?3; ra' = a'.image_rect; rb' = b'.image_rect; rc' = c'.image_rect; rd' = d'.image_rect; } } /* translate, rotate, scale and blend two images top/bottom */ Top_bottom a b c d = class Image value { _check_args = _check_abcd_args a b c d ++ super._check_args; blend_width = _blend_width; refine = _refine; value = im_tbmosaic1 a'.image.value b'.image.value 0 ra'.left ra'.top rb'.left rb'.top rc'.left rc'.top rd'.left rd'.top (_object_size / 2) (_search_area / 2) 0 blend_width.value, refine = im_tbmerge1 a'.image.value b'.image.value ra'.left ra'.top rb'.left rb'.top rc'.left rc'.top rd'.left rd'.top blend_width.value { sorted = _mosaic_sort _mosaic_sort_tb [a, b, c, d]; a' = sorted?0; b' = sorted?1; c' = sorted?2; d' = sorted?3; ra' = a'.image_rect; rb' = b'.image_rect; rc' = c'.image_rect; rd' = d'.image_rect; } } } #separator /* disassemble mosaic, adjust brightnesses to match, and reassemble */ Mosaic_balance x = map_unary balance x { balance x = oo_unary_function balance_op x, is_class x = im_global_balancef x Workspaces.Preferences.MOSAIC_BALANCE_GAMMA, is_image x = error (errors.badargs ++ "balance") { balance_op = Operator "balance" balance Operator_type.COMPOUND_REWRAP false; } } /* brighten along a left/right or up/down axis */ Tilt_brightness = class { /* brighten along a left/right axis */ Left_right x = map_unary tilt_lr x { tilt_lr image = class Image value { _check_args = [ [image, "image", check_Image] ] ++ super._check_args; _vislevel = 3; tilt = Slider (-1) 1 0; value = final { ramp = im_fgrey image.width image.height; ramp' = bandjoin (map (const ramp) [1..image.bands]); scale = (ramp' - 0.5) * tilt + 1; final = image.value * scale; } } } /* brighten along a top/bottom axis */ Top_bottom x = map_unary tilt_tb x { tilt_tb image = class Image value { _check_args = [ [image, "image", check_Image] ] ++ super._check_args; _vislevel = 3; tilt = Slider (-1) 1 0; value = final { ramp = rot90 (im_fgrey image.height image.width); ramp' = bandjoin (map (const ramp) [1..image.bands]); scale = (ramp' - 0.5) * tilt + 1; final = image.value * scale; } } } } #separator /* disassemble mosaic, substitute different image files, and reassemble */ Mosaic_rebuild x = map_unary remosaic x { remosaic image = class Image value { _check_args = [ [image, "image", check_Image] ] ++ super._check_args; _vislevel = 3; old_hint = "For the name of each file making up the mosaic, " ++ "exchange this string:"; old = "foo"; new_hint = "for this string:"; new = "bar"; value = im_remosaic image.value old new; } } nip2-8.7.0/share/nip2/compat/7.8/Print.def0000644000175000017500000001541613224651032014651 00000000000000/* cored sharpen of L only in LAB image ... tuned for typical printers */ Sharpen_for_print in = map_unary widget in { widget in = class Image value { _check_args = [ [in, "in", check_Image] ] ++ super._check_args; _vislevel = 3; target_dpi = Option "Sharpen for print at" [ "300 dpi", "150 dpi", "75 dpi" ] 0; // sharpen params for 300, 150 and 75 dpi // just change the size of the area we search _param_table = [ [7, 2.5, 40, 20, 0.5, 1.5], [5, 2.5, 40, 20, 0.5, 1.5], [3, 2.5, 40, 20, 0.5, 1.5] ]; _params = _param_table?target_dpi; value = im_sharpen (colour_transform_to Image_type.LABQ in.value) _params?0 _params?1 _params?2 _params?3 _params?4 _params?5; } } /* adjust tone curve on L* */ Tone_for_print in = map_unary widget in { widget in = class Image value { _check_args = [ [in, "in", check_Image] ] ++ super._check_args; _vislevel = 3; black = Slider 0 100 0; white = Slider 0 100 100; shadow_point = Slider 0.1 0.3 0.2; mid_point = Slider 0.4 0.6 0.5; highlight_point = Slider 0.7 0.9 0.8; shadow_adjust = Slider (-15) 15 0; mid_adjust = Slider (-30) 30 0; highlight_adjust = Slider (-15) 15 0; preview_curve = Image (im_tone_build black.value white.value shadow_point.value mid_point.value highlight_point.value shadow_adjust.value mid_adjust.value highlight_adjust.value); value = im_tone_map (colour_transform_to Image_type.LABQ in.value) preview_curve.value; } } /* morph image colours in LAB space ... useful for tweaking colour for print */ Morph_for_print in = map_unary widget in { widget in = class Image value { _check_args = [ [in, "in", check_Image] ] ++ super._check_args; _vislevel = 3; L_scale = 1.15; L_offset = -4.2; ab_scale = Slider 1 1.5 1.15; a_offset = Slider (-10) 10 0; b_offset = Slider (-10) 10 5; grey_correction = Matrix_con 1 0 [ [5, 5, -1 ], [10, 4, -1 ], [15, 2, -1 ], [20, 1, 1 ], [25, 1, 2 ], [30, 0, 1 ], [35, 0, 1 ], [40, 0, 1 ], [45, 0, 1 ], [50, 0, 1 ], [55, 0, 0 ], [99, 0, 0 ] ]; value = im_lab_morph in.value (Vector [0, a_offset.value, b_offset.value] + grey_correction) L_offset L_scale ab_scale.value ab_scale.value; } } #separator _sample_print_profile = "$VIPSHOME/share/$PACKAGE/data/cmyk.icm"; _sample_monitor_profile = "$VIPSHOME/share/$PACKAGE/data/sRGB.icm"; _render_intents = Option "Render intent" [ "Perceptual", "Relative", "Saturation", "Absolute" ] 3; /* transform from PCS to device space */ ICC_export in = map_unary widget in { widget in = class Image value { _check_args = [ [in, "in", check_Image] ] ++ super._check_args; _vislevel = 3; profile = Filename _sample_print_profile; intent = _render_intents; depth = Option "Output depth" ["8 bit", "16 bit"] 0; value = im_icc_export_depth in.value [8, 16]?depth (expand profile.value) intent.value; } } /* transform from device space to PCS */ ICC_import in = map_unary widget in { widget in = class Image value { _check_args = [ [in, "in", check_Image] ] ++ super._check_args; _check_all = [ [in.bands == 3 || in.bands == 4, "in.bands == 3 || in.bands == 4" ] ] ++ super._check_all; _vislevel = 3; profile = Filename _sample_monitor_profile, in.bands == 3 = Filename _sample_print_profile; intent = _render_intents; value = im_icc_import in.value (expand profile.value) intent.value; } } /* transform between two device spaces */ ICC_transform in = map_unary widget in { widget in = class Image value { _check_args = [ [in, "in", check_Image] ] ++ super._check_args; _vislevel = 3; in_profile = Filename _sample_monitor_profile; out_profile = Filename _sample_print_profile; intent = _render_intents; value = im_icc_transform in.value (expand in_profile.value) (expand out_profile.value) intent.value; } } /* transform from absolute to relative colorimetry */ ICC_ac2rc in = map_unary widget in { widget in = class Image value { _check_args = [ [in, "in", check_Image] ] ++ super._check_args; _vislevel = 3; profile = Filename _sample_print_profile; value = im_icc_ac2rc in.value (expand profile.value); } } #separator /* convert between XYZ and Lab for D50 */ D50XYZ_to_D50Lab in = map_unary (colour_unary im_D50XYZ2Lab) in; /* convert between XYZ and Lab for D50 */ D50Lab_to_D50XYZ in = map_unary (colour_unary im_D50Lab2XYZ) in; #separator /* add an editable drop shadow to an image */ Drop_shadow x = map_unary shadow x { shadow image = class Image value { _check_args = [ [image, "image", check_Image] ] ++ super._check_args; _vislevel = 3; shadow_width = Slider 0 50 5; shadow_height = Slider 0 50 5; shadow_softness = Slider 0 20 5; use_mask = Toggle "Use mask to make shadow" false; mask_image = foldr1 bitwise_and (bandsplit (image > 128)); background_colour = 255; shadow_colour = 128; value = final { blur_size = shadow_softness.value * 2 + 1; // matrix we blur with to soften shadows mask_g = im_gauss_imask (blur_size / 3) 0.2; mask_g_line = mask_g.value ? (mask_g.height / 2); mask_g_sum = foldr1 add mask_g_line; blur_matrix = Matrix_con mask_g_sum 0 [mask_g_line]; mask_size = mask_g.width; // size of final image we build final_width = image.width + 2 * mask_size + shadow_width.value; final_height = image.height + 2 * mask_size + shadow_height.value; // make a plain image mk_background colour = image_new final_width final_height image.bands image.format Image_coding.NOCODING image.type colour 0 0; // make a mask image ... place at (x,y) in the final // image mk_mask x y = im_insert black mask_image.value x y, use_mask = im_insert black white x y { black = image_new final_width final_height 1 Image_format.UCHAR Image_coding.NOCODING Image_type.B_W 0 0 0; white = image_new image.width image.height 1 Image_format.UCHAR Image_coding.NOCODING Image_type.B_W 255 0 0; } // make the shadow mask image ... offset mask and // soften shadow_mask = mk_mask (mask_size + shadow_width.value) (mask_size + shadow_height.value); shadow_mask' = im_convsep shadow_mask blur_matrix; // make underlay ... use shadow mask to blend between // background colour and shadow colour background = mk_background background_colour; shadow = mk_background shadow_colour; underlay = im_blend shadow_mask' shadow background; // overlay ... place image at final position overlay = mk_background 0; overlay' = im_insert overlay image.value mask_size mask_size; // overlay mask overlay_mask = mk_mask mask_size mask_size; final = if overlay_mask then overlay' else underlay; } } } nip2-8.7.0/share/nip2/compat/7.8/Format.def0000644000175000017500000001125013224651032014775 00000000000000/* various operations to convert numeric precision */ Convert_format_to = class { /* convert to unsigned 8 bit [0, 255] */ unsigned_8bit x = map_unary cast_unsigned_char x; /* convert to signed 8 bit [-128, 127] */ signed_8bit x = map_unary cast_signed_char x; /* convert to unsigned 16 bit [0, 65535] */ unsigned_16bit x = map_unary cast_unsigned_short x; /* convert to signed 16 bit [-32768, 32767] */ signed_16bit x = map_unary cast_signed_short x; /* convert to unsigned 32 bit [0, 4294967295] */ unsigned_32bit x = map_unary cast_unsigned_int x; /* convert to signed 32 bit [-2147483648, 2147483647] */ signed_32bit x = map_unary cast_signed_int x; /* convert to IEEE 32 bit floating point */ float_32bit x = map_unary cast_float x; /* convert to IEEE 64 bit floating point */ float_64bit x = map_unary cast_double x; /* convert to 64 bit complex (2 x IEEE 32 bit floating point) */ complex_64bit x = map_unary cast_complex x; /* convert to 128 bit complex (2 x IEEE 64 bit floating point) */ complex_128bit x = map_unary cast_double_complex x; } /* linear scale of pixel values to fit range 0-255 */ Scale_to_byte x = map_unary scale x; #separator /* try to make a matrix out of an object */ Convert_to_matrix in = map_unary to_matrix in; /* try to make an image out of an object */ Convert_to_image in = map_unary to_image in; #separator /* measure average value of a set of patches */ Matrix_from_colour_chart x = map_unary chart x { chart image = class Matrix value { _check_args = [ [image, "image", check_Image] ] ++ super._check_args; pacross = 6; pdown = 4; value = (im_measure image.value 0 0 image.width image.height pacross pdown).value; /* Hmm, not very helpful, we throw edits away. */ Matrix_vips_edit value scale offset filename display = chart image; } } /* make a synthetic colour chart image from a matrix */ Colour_chart_from_matrix matrix = map_unary build_chart matrix { build_chart matrix = class Image value { _check_args = [ [matrix, "matrix", check_Matrix] ] ++ super._check_args; patches_across = 6; patches_down = 4; patch_width = 50; patch_height = 50; border_width = 0; value = imagearray_assemble overlap overlap patch_table { overlap = -border_width; // patch numbers for row starts rowstart = map (multiply patches_across) [0 .. patches_down - 1]; // assemble patches ... each one a pixel value patches = map (take patches_across) (map (converse drop matrix.value) rowstart); // make an n-band constant image from eg. [1,2,3] patch v = image_new patch_width patch_height (len v) Image_format.FLOAT Image_coding.NOCODING Image_type.sRGB (Vector v) 0 0; // make an image for each patch patch_table = map (map patch) patches; } } } #separator /* make a colour from the average values in an image */ Colour_from_image image = map_unary test image { test x = build_chart x, is_instanceof "Image" x = build_chart (Image pixel), is_instanceof "Point" x = error ("Colour_from_image: arg not Image or Point: " ++ print x) { pixel = x.image.extract_area x.left x.top 1 1; } build_chart image = class Colour colour_space value { _check_args = [ [image, "image", check_Image] ] ++ super._check_args; colour_space = table.lookup 1 0 type, table.present 1 type = error ("Colour_from_image: unable to make Colour " ++ "from " ++ Image_type.type_names.lookup 1 0 type ++ " image") { table = Image_type.colour_spaces; type = im_header_int "Type" image.value; } value = map mean (bandsplit image.value); } } /* make a constant image from a colour patch */ Image_from_colour x = map_unary build x { build c = class Image value { _check_args = [ [c, "c", check_Colour] ] ++ super._check_args; width = 64; height = 64; value = image_new width height 3 Image_format.FLOAT Image_coding.NOCODING (get_type c) c 0 0; } } #separator /* try to break object in into a list of components */ Decompose in = map_unary dec in { dec x = bandsplit x, is_instanceof "Image" x = map Vector x.value, is_instanceof "Matrix_base" x = x.value, is_instanceof "Vector" x || is_instanceof "Real" x = error "Decompose: not Image/Matrix/Vector/Real"; } /* try to put a list of objects together into a large single object */ Compose x = Vector x, is_real_list x = Matrix x, is_matrix x = bandjoin x, is_listof (is_instanceof "Image") x = Vector (map get_value x), is_listof (is_instanceof "Real") x = Matrix (map get_value x), is_listof (is_instanceof "Vector") x = map_unary Compose x, is_list x = error "Compose: not list of Image/Vector/Real/image/real" { get_value x = x.value; } nip2-8.7.0/share/nip2/compat/7.8/Morphology.def0000644000175000017500000000626313224651032015714 00000000000000/* Some useful masks. */ _morph_mask8 = Matrix_mor [[255, 255, 255], [255, 255, 255], [255, 255, 255]]; _morph_mask4 = Matrix_mor [[128, 255, 128], [255, 255, 255], [128, 255, 128]]; _morph_mask1 = Matrix_mor [[0, 0, 0], [0, 255, 0], [0, 0, 0]]; _morph_thin = Matrix_mor [[0, 0, 0], [128, 255, 128], [255, 255, 255]]; /* dilate x with 8-connected mask */ Dilate8 x = map_unary (dilate _morph_mask8) x; /* dilate x with 4-connected mask */ Dilate4 x = map_unary (dilate _morph_mask4) x; /* erode x with 8-connected mask */ Erode8 x = map_unary (erode _morph_mask8) x; /* erode x with 4-connected mask */ Erode4 x = map_unary (erode _morph_mask4) x; #separator /* open with 8-connected mask */ Open x = map_unary (dilate _morph_mask8 @ erode _morph_mask8) x; /* close with 8-connected mask */ Close x = map_unary (erode _morph_mask8 @ dilate _morph_mask8) x; /* remove single points */ Clean x = map_unary clean x { clean x = x ^ erode _morph_mask1 x; } /* thin once */ Thin x = map_unary thinall x { masks = take 8 (iterate rot45 _morph_thin); thin1 m x = x ^ erode m x; thinall x = foldr thin1 x masks; } #separator /* dilate object x with mask m */ Dilate m x = map_unary (dilate m) x; /* erode object x with mask m */ Erode m x = map_unary (erode m) x; /* dilate mask m with itself n times */ Dilate_multiple m n = (iterate (dilate m) m)?n; /* erode mask m with itself n times */ Erode_multiple m n = (iterate (erode m) m)?n; #separator /* morph with a mask you can edit */ Custom_morphology in = map_unary morph in { morph image = class Image value { _check_args = [ [image, "Image", check_Image] ] ++ super._check_args; _vislevel = 3; mask = _morph_mask8; type = Option "Operation" ["Erode", "Dilate"] 1; hint_apply_n_times = "Number of times to apply mask:"; apply_n_times = 1; border = Toggle "Output image matches input image in size" true; value = im_embed image' 0 xoff yoff image.width image.height, border = image' { fatmask = (iterate (dilate mask) mask) ? (apply_n_times - 1); image' = im_erode_raw image.value fatmask, type.value == 0 = im_dilate_raw image.value fatmask; xoff = (fatmask.width + 1) / 2; yoff = (fatmask.height + 1) / 2; } } } /* search in from the edges of an image for the first non-zero pixel */ Find_profile in = map_unary widget in { widget image = class Image value { _check_args = [ [image, "Image", check_Image] ] ++ super._check_args; _vislevel = 3; edge = Option "Search from" [ "Top edge down", "Left edge to right", "Bottom edge up", "Right edge to left" ] 2; value = image_set_type Image_type.HISTOGRAM [ im_profile image.value 0, rot270 (im_profile image.value 1), im_profile (flipud image.value) 0, rot270 (im_profile (fliplr image.value) 1) ]?edge; } } /* count the average number of black-to-white transitions across an image */ Count_lines in = map_unary widget in { widget image = class Real value { _check_args = [ [image, "Image", check_Image] ] ++ super._check_args; _vislevel = 3; edge = Option "Count" [ "Horizontal lines", "Vertical lines" ] 0; value = im_cntlines image.value edge.value; } } nip2-8.7.0/share/nip2/compat/7.8/Filter.def0000644000175000017500000003042313224651032014775 00000000000000/* Some useful masks. */ _filter_blur = Matrix_con 9 0 [[1, 1, 1], [1, 1, 1], [1, 1, 1]]; _filter_sharp = Matrix_con 8 0 [[-1, -1, -1], [-1, 16, -1], [-1, -1, -1]]; _filter_laplacian = Matrix_con 1 128 [[-1, -1, -1], [-1, 8, -1], [-1, -1, -1]]; _filter_sobel = Matrix_con 1 128 [[1, 2, 1], [0, 0, 0], [-1, -2, -1]]; _filter_lindet = Matrix_con 1 0 [[1, 1, 1], [-2, -2, -2], [1, 1, 1]]; _filter_emboss = Matrix_con 1 128 [[-1, 0], [0, 1]]; /* 3x3 blur of image */ Blur x = map_unary (conv _filter_blur) x; /* 3x3 sharpen of image */ Sharpen x = map_unary (conv _filter_sharp) x; /* 1-pixel displacement emboss */ Emboss x = map_unary (conv _filter_emboss) x; /* 3x3 median filter of image */ Median x = map_unary (rank 3 3 5) x; /* 3x3 laplacian of image */ Laplacian x = map_unary (conv _filter_laplacian) x; /* 3x3 Sobel edge detect of image */ Sobel x = map_unary sobel x { sobel im = abs (a - 128) + abs (b - 128) { a = conv _filter_sobel im; b = conv (rot270 _filter_sobel) im; } } /* 3x3 line detect of image diagonals should be scaled down by root(2) I guess Kirk */ Linedet x = map_unary lindet x { lindet im = foldr1 max_pair images { masks = take 4 (iterate rot45 _filter_lindet); images = map (converse conv im) masks; } } #separator /* custom convolution of an image */ Custom_convolution in = map_unary widget in { widget image = class Image value { _check_args = [ [image, "Image", check_Image] ] ++ super._check_args; _vislevel = 3; matrix = Matrix_con 1 0 [[0, 0, 0], [0, 1, 0], [0, 0, 0]]; separable = Toggle "Seperable convolution" false, matrix.width == 1 || matrix.height == 1 = false; type = Option "Convolution type" ["Int", "Float"] 0; border = Toggle "Output image matches input image in size" true; value = im_embed image' 0 off off image.width image.height, border = image' { conv_op = im_conv_raw, !separable && type == 0 = im_convsep_raw, separable && type == 0 = im_convf_raw, !separable && type == 1 = im_convsepf_raw, separable && type == 1 = error "boink!"; image' = conv_op image.value matrix; off = (matrix.width + 1) / 2; } } } /* blur with a radius and shape */ Custom_blur in = map_unary widget in { widget in = class Image value { _check_args = [ [in, "in", check_Image] ] ++ super._check_args; _vislevel = 3; radius = Slider 1 50 1; shape = Option "Mask shape" [ "Square", "Gaussian" ] 0; value = im_convsep in.value mask { /* Make a square mask. */ mask_sq_line = map (const 1) [1 .. 2 * radius.value - 1]; mask_sq_sum = foldr1 add mask_sq_line; mask_sq_sep = Matrix_con mask_sq_sum 0 [mask_sq_line]; /* Make a gaussian mask. sigma is not really related * to radius very well, sort-of bodge it. */ mask_g = im_gauss_imask (radius.value / 2) 0.2; mask_g_line = mask_g.value ? (mask_g.height / 2); mask_g_sum = foldr1 add mask_g_line; mask_g_sep = Matrix_con mask_g_sum 0 [mask_g_line]; mask = mask_sq_sep, shape.value == 0 = mask_g_sep; } } } /* cored sharpen of L only in LAB image */ Custom_sharpen in = map_unary widget in { widget in = class Image value { _check_args = [ [in, "in", check_Image] ] ++ super._check_args; _vislevel = 3; size = Option "Mask size" [ "3 x 3", "5 x 5", "7 x 7", "9 x 9", "11 x 11" ] 0; smooth_threshold = Slider 0 5 1.5; brighten_max = Slider 1 50 10; darken_max = Slider 1 50 50; flat_sharp = Slider (-2) 5 1; jaggy_sharp = Slider (-2) 5 2; value = im_sharpen in.value [3, 5, 7, 9, 11]?size smooth_threshold.value brighten_max.value darken_max.value flat_sharp.value jaggy_sharp.value; } } /* custom rank filter of an image */ Custom_rank in = map_unary widget in { widget image = class Image value { _check_args = [ [image, "Image", check_Image] ] ++ super._check_args; _vislevel = 3; window_size_hint = "Length of side of window to pass " ++ "over image:"; window_size = 3; rank = (int) ((window_size * window_size + 1) / 2); border = Toggle "Output image matches input image in size" true; value = im_embed image' 0 off off image.width image.height, border = image' { image' = im_rank_raw image.value window_size window_size rank; off = (window_size + 1) / 2; } } } /* statistical difference of an image */ Statistical_difference in = map_unary widget in { widget image = class Image value { _check_args = [ [image, "Image", check_Image] ] ++ super._check_args; _vislevel = 3; window_size_hint = "Length of side of window to pass " ++ "over image:"; window_size = 11; target_mean = 128; target_mean_weight = Slider 0 1 0.8; target_deviation = 50; target_deviation_weight = Slider 0 1 0.8; border = Toggle "Output image matches input image in size" true; value = im_embed image' 0 off off image.width image.height, border = image' { image' = im_stdif_raw image.value target_mean_weight.value target_mean target_deviation_weight.value target_deviation window_size window_size; off = (window_size + 1) / 2; } } } #separator /* various ideal fourier filters */ Ideal_filter = class { _preview_size = 64; _high_low image = class Image value { _check_args = [ [image, "Image", check_Image] ] ++ super._check_args; _vislevel = 3; frequency_cutoff = Slider 0.01 0.99 0.5; type = Option "High or low" ["High pass", "Low pass"] 0; _type = type.value; visualize_mask = Image vis { vis = image_set_type Image_type.FOURIER (rotquad mask); mask = im_create_fmask _preview_size _preview_size _type frequency_cutoff.value 0 0 0 0; } value = im_flt_image_freq image.value _type frequency_cutoff.value 0 0 0 0; } _ring image = class Image value { _check_args = [ [image, "Image", check_Image] ] ++ super._check_args; _vislevel = 3; frequency_cutoff = Slider 0.01 0.99 0.5; ring_width = Slider 0.01 0.99 0.5; type = Option "Pass or reject" ["Ring pass", "Ring reject"] 0; _type = type.value + 6; visualize_mask = Image vis { vis = image_set_type Image_type.FOURIER (rotquad mask); mask = im_create_fmask _preview_size _preview_size _type frequency_cutoff.value ring_width.value 0 0 0; } value = im_flt_image_freq image.value _type frequency_cutoff.value ring_width.value 0 0 0; } _band image = class Image value { _check_args = [ [image, "Image", check_Image] ] ++ super._check_args; _vislevel = 3; frequency_cutoff_x = Slider 0.01 0.99 0.5; frequency_cutoff_y = Slider 0.01 0.99 0.5; radius = Slider 0.01 0.99 0.5; type = Option "Pass or reject" ["Band pass", "Band reject"] 0; _type = type.value + 12; visualize_mask = Image vis { vis = image_set_type Image_type.FOURIER (rotquad mask); mask = im_create_fmask _preview_size _preview_size _type frequency_cutoff_x.value frequency_cutoff_y.value radius.value 0 0; } value = im_flt_image_freq image.value _type frequency_cutoff_x.value frequency_cutoff_y.value radius.value 0 0; } /* high or low pass ideal filter */ High_low x = map_unary _high_low x; /* ring pass or reject ideal filter */ Ring x = map_unary _ring x; /* band pass or reject ideal filter */ Band x = map_unary _band x; } /* Gaussian fourier filters */ Gaussian_filter = class { _preview_size = 64; _high_low image = class Image value { _check_args = [ [image, "Image", check_Image] ] ++ super._check_args; _vislevel = 3; frequency_cutoff = Slider 0.01 0.99 0.5; amplitude_cutoff = Slider 0.01 0.99 0.5; type = Option "High or low" ["High pass", "Low pass"] 0; _type = type.value + 4; visualize_mask = Image vis { vis = image_set_type Image_type.FOURIER (rotquad mask); mask = im_create_fmask _preview_size _preview_size _type frequency_cutoff.value amplitude_cutoff.value 0 0 0; } value = im_flt_image_freq image.value _type frequency_cutoff.value amplitude_cutoff.value 0 0 0; } _ring image = class Image value { _check_args = [ [image, "Image", check_Image] ] ++ super._check_args; _vislevel = 3; frequency_cutoff = Slider 0.01 0.99 0.5; ring_width = Slider 0.01 0.99 0.5; amplitude_cutoff = Slider 0.01 0.99 0.5; type = Option "Pass or reject" ["Ring pass", "Ring reject"] 0; _type = type.value + 10; visualize_mask = Image vis { vis = image_set_type Image_type.FOURIER (rotquad mask); mask = im_create_fmask _preview_size _preview_size _type frequency_cutoff.value ring_width.value amplitude_cutoff.value 0 0; } value = im_flt_image_freq image.value _type frequency_cutoff.value ring_width.value amplitude_cutoff.value 0 0; } _band image = class Image value { _check_args = [ [image, "Image", check_Image] ] ++ super._check_args; _vislevel = 3; frequency_cutoff_x = Slider 0.01 0.99 0.5; frequency_cutoff_y = Slider 0.01 0.99 0.5; radius = Slider 0.01 0.99 0.5; amplitude_cutoff = Slider 0.01 0.99 0.5; type = Option "Pass or reject" ["Band pass", "Band reject"] 0; _type = type.value + 16; visualize_mask = Image vis { vis = image_set_type Image_type.FOURIER (rotquad mask); mask = im_create_fmask _preview_size _preview_size _type frequency_cutoff_x.value frequency_cutoff_y.value radius.value amplitude_cutoff.value 0; } value = im_flt_image_freq image.value _type frequency_cutoff_x.value frequency_cutoff_y.value radius.value amplitude_cutoff.value 0; } /* high or low pass Gaussian filter */ High_low x = map_unary _high_low x; /* ring pass or reject Gaussian filter */ Ring x = map_unary _ring x; /* band pass or reject Gaussian filter */ Band x = map_unary _band x; } /* various Butterworth fourier filters */ Butterworth_filter = class { _preview_size = 64; _high_low image = class Image value { _check_args = [ [image, "Image", check_Image] ] ++ super._check_args; _vislevel = 3; order = Slider 1 10 2; frequency_cutoff = Slider 0.01 0.99 0.5; amplitude_cutoff = Slider 0.01 0.99 0.5; type = Option "High or low" ["High pass", "Low pass"] 0; _type = type.value + 2; visualize_mask = Image vis { vis = image_set_type Image_type.FOURIER (rotquad mask); mask = im_create_fmask _preview_size _preview_size _type order.value frequency_cutoff.value amplitude_cutoff.value 0 0; } value = im_flt_image_freq image.value _type order.value frequency_cutoff.value amplitude_cutoff.value 0 0; } _ring image = class Image value { _check_args = [ [image, "Image", check_Image] ] ++ super._check_args; _vislevel = 3; order = Slider 1 10 2; frequency_cutoff = Slider 0.01 0.99 0.5; ring_width = Slider 0.01 0.99 0.5; amplitude_cutoff = Slider 0.01 0.99 0.5; type = Option "Pass or reject" ["Ring pass", "Ring reject"] 0; _type = type.value + 8; visualize_mask = Image vis { vis = image_set_type Image_type.FOURIER (rotquad mask); mask = im_create_fmask _preview_size _preview_size _type order.value frequency_cutoff.value ring_width.value amplitude_cutoff.value 0; } value = im_flt_image_freq image.value _type order.value frequency_cutoff.value ring_width.value amplitude_cutoff.value 0; } _band image = class Image value { _check_args = [ [image, "Image", check_Image] ] ++ super._check_args; _vislevel = 3; order = Slider 1 10 2; frequency_cutoff_x = Slider 0.01 0.99 0.5; frequency_cutoff_y = Slider 0.01 0.99 0.5; radius = Slider 0.01 0.99 0.5; amplitude_cutoff = Slider 0.01 0.99 0.5; type = Option "Pass or reject" ["Band pass", "Band reject"] 0; _type = type.value + 14; visualize_mask = Image vis { vis = image_set_type Image_type.FOURIER (rotquad mask); mask = im_create_fmask _preview_size _preview_size _type order.value frequency_cutoff_x.value frequency_cutoff_y.value radius.value amplitude_cutoff.value; } value = im_flt_image_freq image.value _type order.value frequency_cutoff_x.value frequency_cutoff_y.value radius.value amplitude_cutoff.value; } /* high or low pass Butterworth filter */ High_low x = map_unary _high_low x; /* ring pass or reject Butterworth filter */ Ring x = map_unary _ring x; /* band pass or reject Butterworth filter */ Band x = map_unary _band x; } nip2-8.7.0/share/nip2/compat/7.8/Histogram.def0000644000175000017500000000302113224651032015477 00000000000000/* find histogram of x */ Hist_find x = map_unary hist_find x; /* find n-dimensional histogram from n-band image */ Hist_find_nD in = map_unary widget in { widget image = class Image value { _check_args = [ [image, "Image", check_Image] ] ++ super._check_args; _vislevel = 3; // default to something small-ish bins = 8; value = hist_find_nD bins image.value; } } /* map image x through histogram hist */ Hist_map hist x = map_binary hist_map hist x; /* find cumulative histogram of hist */ Hist_cumulative x = map_unary hist_cum x; /* find normalised histogram of hist */ Hist_normalise x = map_unary hist_norm x; /* find LUT which matches hist in to hist ref */ Hist_match in ref = map_binary hist_match in ref; #separator /* histogram equalisation */ Hist_equalise = class { /* histogram equalise x globally */ Global x = map_unary hist_equalize x; /* local histogram equalisation using region r as window */ Local r = map_unary (hist_equalize_local r.width r.height) r.image; } /* slice a line of pixels along a guide line and display as a histogram */ Guide_slice in = map_unary widget in { widget guide = class Image value { _check_args = [ [guide, "Guide", check_Guide] ] ++ super._check_args; value = image_set_type Image_type.HISTOGRAM slice { slice = guide.image.extract_area guide.image.rect.left guide.top guide.width 1, is_instanceof "HGuide" guide = guide.image.extract_area guide.left guide.image.rect.top 1 guide.height; } } } nip2-8.7.0/share/nip2/compat/7.8/Statistics.def0000644000175000017500000000610513224651032015702 00000000000000/* mean value of object */ Mean a = map_unary mean a; /* standard deviation of object */ Deviation a = map_unary deviation a; /* calculate a large set of stats on an object */ Stats a = map_unary stats a; #separator /* maximum of an object */ Max a = map_unary max a; /* minimum of an object */ Min a = map_unary min a; /* return complex number (max, min) */ Maxmin a = map_unary maxmin a { maxmin x = (Max x, Min x); } /* position of maximum in an image */ Maximum_position a = map_unary maxpos a; /* position of minimum in an image */ Minimum_position a = map_unary minpos a; #separator /* count the number of non-zeros in an image */ Count_set a = map_unary cset a { cset i = (mean (i != 0) * i.width * i.height) / 255; } /* count the number of zeros in an image */ Count_clear a = map_unary cclear a { cclear i = (mean (i == 0) * i.width * i.height) / 255; } #separator /* plot a scatter graph of a list of [x,y] coordinates */ Plot_scatter x //= map_unary widget x = widget x { widget data = class Image value { _check_args = [ [data, "data", check_xy_list] ] ++ super._check_args; width = 512; height = 512; plot_colour = Colour "Lab" [80, -80, 80]; xmin = foldr1 min_pair (map (extract 0) data); xmax = foldr1 max_pair (map (extract 0) data); ymin = foldr1 min_pair (map (extract 1) data); ymax = foldr1 max_pair (map (extract 1) data); axies = Toggle "Draw axies" true; mark = Point this x y { p = _to_image data?0; x = p?0; y = p?1; } mark_position_hint = "mark is at position:"; mark_position = _from_image [mark.left, mark.top]; // geometry _xrange = xmax - xmin; _yrange = ymax - ymin; _xscale = width / _xrange; _yscale = height / _yrange; // map an [x,y] point into the image coordinates _to_image p = [(p?0 - xmin) * _xscale, height - (p?1 - ymin) * _yscale]; // map an [x,y] point from image cods back to real cods _from_image p = [p?0 / _xscale + xmin, (height - p?1) / _yscale + ymin]; value = foldr plot background' data { plot_image_new width height pixel = image_new width height 3 Image_format.FLOAT Image_coding.NOCODING (Image_type.colour_spaces.lookup 0 1 plot_colour.colour_space) pixel 0 0; // background background = plot_image_new width height 0; // mark we plot mark_width = max_pair 1 (width / 100); mark_height = max_pair 1 (height / 100); mark = plot_image_new mark_width mark_height plot_colour; // draw axies on background background' = drawxy, axies = background { // axies xaxis = plot_image_new width 1 (Colour "Lab" [100, 0, 0]); yaxis = plot_image_new 1 height (Colour "Lab" [100, 0, 0]); origin = _to_image [0, 0]; drawx = im_insert_noexpand background xaxis 0 origin?1; drawxy = im_insert_noexpand drawx yaxis origin?0 0; } // plot a single point on an image plot p im = im_insert_noexpand im mark (x - mark_width / 2) (y - mark_height / 2) { p' = _to_image p; x = p'?0; y = p'?1; } } } } nip2-8.7.0/share/nip2/compat/7.8/Makefile.in0000644000175000017500000003702513350464104015144 00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = share/nip2/compat/7.8 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(startdir)" DATA = $(start_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BISON = @BISON@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DLLWRAP = @DLLWRAP@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FFTW3_CFLAGS = @FFTW3_CFLAGS@ FFTW3_LIBS = @FFTW3_LIBS@ FGREP = @FGREP@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_LIBS = @GSL_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ IP_CFLAGS = @IP_CFLAGS@ IP_LIBS = @IP_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBGOFFICE_CFLAGS = @LIBGOFFICE_CFLAGS@ LIBGOFFICE_LIBS = @LIBGOFFICE_LIBS@ LIBGSF_CFLAGS = @LIBGSF_CFLAGS@ LIBGSF_LIBS = @LIBGSF_LIBS@ LIBGVC_CFLAGS = @LIBGVC_CFLAGS@ LIBGVC_LIBS = @LIBGVC_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ 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@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ REQUIRED_PACKAGES_CFLAGS = @REQUIRED_PACKAGES_CFLAGS@ REQUIRED_PACKAGES_LIBS = @REQUIRED_PACKAGES_LIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOP_SRCDIR = @TOP_SRCDIR@ UPDATE_DESKTOP_DATABASE = @UPDATE_DESKTOP_DATABASE@ UPDATE_MIME_DATABASE = @UPDATE_MIME_DATABASE@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XDG_OPEN = @XDG_OPEN@ XGETTEXT = @XGETTEXT@ 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@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ startdir = $(pkgdatadir)/compat/7.8 start_DATA = \ Math.def \ Image.def \ Mosaic.def \ Colour.def \ Resize.def \ Capture.def \ Format.def \ Filter.def \ Morphology.def \ New.def \ Histogram.def \ Print.def \ Rotate.def \ Statistics.def \ X_ray.def \ _convert.def \ _errors.def \ _generate.def \ _list.def \ _predicate.def \ _stdenv.def \ _types.def EXTRA_DIST = $(start_DATA) all: all-am .SUFFIXES: $(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) --foreign share/nip2/compat/7.8/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign share/nip2/compat/7.8/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): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-startDATA: $(start_DATA) @$(NORMAL_INSTALL) @list='$(start_DATA)'; test -n "$(startdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(startdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(startdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(startdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(startdir)" || exit $$?; \ done uninstall-startDATA: @$(NORMAL_UNINSTALL) @list='$(start_DATA)'; test -n "$(startdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(startdir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: 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 check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(startdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-startDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-startDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-startDATA install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags-am uninstall uninstall-am uninstall-startDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: nip2-8.7.0/share/nip2/compat/7.8/_convert.def0000644000175000017500000003242113224651032015367 00000000000000 /* Convert an image ... just set the Type field. */ image_set_type type in = im_copy_set in type (im_header_double "Xres" in) (im_header_double "Yres" in) (im_header_int "Xoffset" in) (im_header_int "Yoffset" in); /* Convert an image ... just set origin */ image_set_origin xoff yoff in = im_copy_set in (im_header_int "Type" in) (im_header_double "Xres" in) (im_header_double "Yres" in) xoff yoff; /* Try to make a Matrix ... works for Vector/Image/Real, plus image/real */ to_matrix x = oo_unary_function to_matrix_op x, is_class x = tom x, is_real x || is_image x = error (errors.badargs ++ "to_matrix") { to_matrix_op = Operator "to_matrix" tom Operator_type.COMPOUND false; tom x = Matrix (itom x), is_image x = Matrix [[x]], is_real x = Matrix [x], is_real_list x = Matrix x, is_matrix x = error (errors.badargs ++ "to_matrix"); itom i = (im_vips2mask ((double) i)).value, is_image i && bands == 1 = (im_vips2mask ((double) i'')).value, is_image i && bands == 3 && width == 1 = error errors.not1band3band { width = im_header_int "Xsize" i; bands = im_header_int "Bands" i; split = bandsplit i; i' = im_insert (split?0) (split?1) 1 0; i'' = im_insert i' (split?2) 2 0; } } /* Try to make an Image ... works for Vector/Matrix/Real, plus image/real * Special case for Colour ... pull out the colour_space and set Type in the * image. */ to_image x = Image (image_set_type (Image_type.colour_spaces.lookup 0 1 x.colour_space) (mtoi [x.value])), is_instanceof "Colour" x = oo_unary_function to_image_op x, is_class x = toi x, is_real x || is_image x = error (errors.badargs ++ "to_image") { to_image_op = Operator "to_image" toi Operator_type.COMPOUND false; toi x = Image x, is_image x = Image (mtoi [[x]]), is_real x = Image (mtoi [x]), is_real_list x = Image (mtoi x), is_matrix x = error (errors.badargs ++ "to_image"); // [[real]] -> image mtoi m = im_mask2vips (Matrix m), width != 3 = joinup (im_mask2vips (Matrix m)) { width = len m?0; height = len m; joinup i = b1 ++ b2 ++ b3 { b1 = extract_area 0 0 1 height i; b2 = extract_area 1 0 1 height i; b3 = extract_area 2 0 1 height i; } } } /* Try to make a real. */ to_real x = to_real x.value, is_class x = x, is_real x = abs x, is_complex x = error (errors.badargs ++ "to_real"); /* Parse a positive integer. */ parse_pint l = foldl acc 0 l { acc sofar ch = sofar * 10 + parse_c ch; /* Turn a char digit to a number. */ parse_c ch = error "parse_c: not a digit", ! is_digit ch = (int) ch - (int) '0'; } /* Parse an integer, with an optional sign character. */ parse_int l = error "parse_number: badly formed number", len parts != 2 = sign * n { parts = splitpl [ member "+-", is_digit ] l; n = parse_pint parts?1; sign = 1, parts?0 == [] || parts?0 == "+" = -1; } /* Parse a float. * [+-]?[0-9]*([.][0-9]*)?(e[0-9]+)? */ parse_float l = err, len parts != 4 = (ipart + fpart) * 10 ** exp { err = error "parse_float: badly formed number"; parts = splitpl [ member "+-0123456789", member ".0123456789", member "eE", member "+-0123456789" ] l; ipart = parse_int parts?0; fpart = 0, parts?1 == []; = err, parts?1?0 != '.' = parse_pint (tl parts?1) / 10**(len parts?1 - 1); exp = 0, parts?2 == [] && parts?3 == [] = err, parts?2 == [] = parse_int parts?3; } /* Print integer as hex. */ print_hex i = "0", chars == [] = "0x" ++ reverse chars { digits = takewhile (not_equal 0) (map (bitwise_and 0xf) (iterate (converse right_shift 4) i)); chars = map tohd digits; tohd x = (char) ((int) '0' + x), x < 10 = (char) ((int) 'a' + (x - 10)); } /* Convert normalised XYZ to bradford RGB. */ XYZ2RGBbrad = Matrix [[ 0.8951, 0.2664, -0.1614], [-0.7502, 1.7135, 0.0367], [ 0.0389, -0.0685, 1.0296]]; /* Convert bradford RGB to normalised XYZ. */ RGBbrad2XYZ = XYZ2RGBbrad ** -1; /* Convert D50 XYZ to D65 using the bradford chromatic adaptation approx. */ im_D502D65 xyz = xyz''' { // divide by D50 white point xyz' = xyz / Vector [96.4250, 100.0, 82.4680]; rgb = recomb XYZ2RGBbrad xyz'; // move white in bradford RGB rgb' = rgb / Vector [0.94, 1.02, 1.33]; xyz'' = recomb RGBbrad2XYZ rgb'; // back to D65 xyz''' = xyz'' * Vector [95.0470, 100.0, 108.8827]; } /* Convert D65 XYZ to D50 using the bradford approx. */ im_D652D50 xyz = xyz''' { // divide by D65 white point xyz' = xyz / Vector [95.0470, 100.0, 108.8827]; rgb = recomb XYZ2RGBbrad xyz'; // move white in bradford RGB rgb' = rgb * Vector [0.94, 1.02, 1.33]; xyz'' = recomb RGBbrad2XYZ rgb'; // back to D50 xyz''' = xyz'' * Vector [96.4250, 100.0, 82.4680]; } /* Convert D50 XYZ to Lab. */ im_D50XYZ2Lab xyz = im_XYZ2Lab_temp xyz 96.4250 100 82.4680; /* Convert D50 Lab to XYZ. */ im_D50Lab2XYZ lab = im_Lab2XYZ_temp lab 96.4250 100 82.4680; /* ... and mono conversions */ im_sRGB2mono in = clip2fmt (im_header_int "BandFmt" in) (im_recomb in (Matrix [[.3, .6, .1]])); im_mono2sRGB in = (unsigned char) (in ++ in ++ in); /* Any 1-ary colour op, applied to Vector/Image/Matrix or image */ colour_unary fn x = oo_unary_function colour_op x, is_class x = fn x, is_image x = error (errors.badargs ++ "colour_unary") { // COMPOUND_REWRAP ... signal to the colour class to go to image and // back colour_op = Operator "colour_unary" colour_object Operator_type.COMPOUND_REWRAP false; colour_object x = colour_real_list x, is_real_list x = map colour_real_list x, is_matrix x = fn x, is_image x = error (errors.badargs ++ "colour_unary"); colour_real_list l = (to_matrix (fn (float) (to_image (Vector l)).value)).value?0; } /* Any symmetric 2-ary colour op, applied to Vector/Image/Matrix or image ... * name is op name for error messages etc. */ colour_binary name fn x y = oo_binary_function colour_op x y, is_class x = oo_binary'_function colour_op x y, is_class y = fn x y, is_image x && is_image y = error (errors.badargs ++ name) { colour_op = Operator name colour_object Operator_type.COMPOUND_REWRAP true; colour_object x y = fn x y, is_image x && is_image y = colour_real_list fn x y, is_real_list x && is_real_list y = map (colour_real_list fn x) y, is_real_list x && is_matrix y = map (colour_real_list (converse fn) y) x, is_matrix x && is_real_list y = map2 (colour_real_list fn) x y, is_matrix x && is_matrix y = error (errors.badargs ++ name); colour_real_list fn l1 l2 = (to_matrix (fn i1 i2)).value?0 { i1 = (float) (to_image (Vector l1)).value; i2 = (float) (to_image (Vector l2)).value; } } _colour_conversion_table = [ /* Lines are [space-from, space-to, conversion function]. Could do * this as a big array, but table lookup feels safer. */ [B_W, B_W, image_set_type B_W], [B_W, XYZ, im_sRGB2XYZ @ im_mono2sRGB], [B_W, YXY, im_XYZ2Yxy @ im_sRGB2XYZ @ im_mono2sRGB], [B_W, LAB, im_XYZ2Lab @ im_sRGB2XYZ @ im_mono2sRGB], [B_W, LCH, im_Lab2LCh @ im_XYZ2Lab @ im_sRGB2XYZ @ im_mono2sRGB], [B_W, UCS, im_XYZ2UCS @ im_sRGB2XYZ @ im_mono2sRGB], [B_W, RGB, im_XYZ2disp @ im_sRGB2XYZ @ im_mono2sRGB], [B_W, sRGB, im_mono2sRGB], [B_W, LABQ, im_Lab2LabQ @ im_XYZ2Lab @ im_sRGB2XYZ @ im_mono2sRGB], [B_W, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_XYZ2Lab @ im_sRGB2XYZ @ im_mono2sRGB], [XYZ, B_W, im_sRGB2mono @ im_XYZ2sRGB], [XYZ, XYZ, image_set_type XYZ], [XYZ, YXY, im_XYZ2Yxy], [XYZ, LAB, im_XYZ2Lab], [XYZ, LCH, im_Lab2LCh @ im_XYZ2Lab], [XYZ, UCS, im_XYZ2UCS], [XYZ, RGB, im_XYZ2disp], [XYZ, sRGB, im_XYZ2sRGB], [XYZ, LABQ, im_Lab2LabQ @ im_XYZ2Lab], [XYZ, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_XYZ2Lab], [YXY, B_W, im_sRGB2mono @ im_XYZ2sRGB @ im_Yxy2XYZ], [YXY, XYZ, im_Yxy2XYZ], [YXY, YXY, image_set_type YXY], [YXY, LAB, im_XYZ2Lab @ im_Yxy2XYZ], [YXY, LCH, im_Lab2LCh @ im_XYZ2Lab @ im_Yxy2XYZ], [YXY, UCS, im_XYZ2UCS @ im_Yxy2XYZ], [YXY, RGB, im_XYZ2disp @ im_Yxy2XYZ], [YXY, sRGB, im_XYZ2sRGB @ im_Yxy2XYZ], [YXY, LABQ, im_Lab2LabQ @ im_XYZ2Lab @ im_Yxy2XYZ], [YXY, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_XYZ2Lab @ im_Yxy2XYZ], [LAB, B_W, im_sRGB2mono @ im_XYZ2sRGB @ im_Lab2XYZ], [LAB, XYZ, im_Lab2XYZ], [LAB, YXY, im_XYZ2Yxy @ im_Lab2XYZ], [LAB, LAB, image_set_type LAB], [LAB, LCH, im_Lab2LCh], [LAB, UCS, im_Lab2UCS], [LAB, RGB, im_Lab2disp], [LAB, sRGB, im_XYZ2sRGB @ im_Lab2XYZ], [LAB, LABQ, im_Lab2LabQ], [LAB, LABS, im_Lab2LabS], [LCH, B_W, im_sRGB2mono @ im_XYZ2sRGB @ im_Lab2XYZ @ im_LCh2Lab], [LCH, XYZ, im_Lab2XYZ @ im_LCh2Lab], [LCH, YXY, im_XYZ2Yxy @ im_XYZ2sRGB @ im_Lab2XYZ @ im_LCh2Lab], [LCH, LAB, im_LCh2Lab], [LCH, LCH, image_set_type LCH], [LCH, UCS, im_LCh2UCS], [LCH, RGB, im_Lab2disp @ im_LCh2Lab], [LCH, sRGB, im_XYZ2sRGB @ im_Lab2XYZ @ im_LCh2Lab], [LCH, LABQ, im_Lab2LabQ @ im_LCh2Lab], [LCH, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_LCh2Lab], [UCS, B_W, im_sRGB2mono @ im_XYZ2sRGB @ im_UCS2XYZ], [UCS, XYZ, im_UCS2XYZ], [UCS, YXY, im_XYZ2Yxy @ im_Lab2XYZ @ im_UCS2Lab], [UCS, LAB, im_UCS2Lab], [UCS, LCH, im_UCS2LCh], [UCS, UCS, image_set_type UCS], [UCS, RGB, im_Lab2disp @ im_UCS2Lab], [UCS, sRGB, im_XYZ2sRGB @ im_Lab2XYZ @ im_UCS2Lab], [UCS, LABQ, im_Lab2LabQ @ im_UCS2Lab], [UCS, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_UCS2Lab], [RGB, B_W, im_sRGB2mono @ im_XYZ2sRGB @ im_disp2XYZ @ im_clip], [RGB, XYZ, im_disp2XYZ @ im_clip], [RGB, YXY, im_XYZ2Yxy @ im_disp2XYZ @ im_clip], [RGB, LAB, im_disp2Lab @ im_clip], [RGB, LCH, im_Lab2LCh @ im_disp2Lab @ im_clip], [RGB, UCS, im_Lab2UCS @ im_disp2Lab @ im_clip], [RGB, RGB, image_set_type RGB], [RGB, sRGB, im_XYZ2sRGB @ im_disp2XYZ @ im_clip], [RGB, LABQ, im_Lab2LabQ @ im_disp2Lab @ im_clip], [RGB, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_disp2Lab @ im_clip], [sRGB, B_W, im_sRGB2mono], [sRGB, XYZ, im_sRGB2XYZ @ im_clip], [sRGB, YXY, im_XYZ2Yxy @ im_sRGB2XYZ @ im_clip], [sRGB, LAB, im_XYZ2Lab @ im_sRGB2XYZ @ im_clip], [sRGB, LCH, im_Lab2LCh @ im_XYZ2Lab @ im_sRGB2XYZ @ im_clip], [sRGB, UCS, im_XYZ2UCS @ im_sRGB2XYZ @ im_clip], [sRGB, RGB, im_XYZ2disp @ im_sRGB2XYZ @ im_clip], [sRGB, sRGB, image_set_type sRGB], [sRGB, LABQ, im_Lab2LabQ @ im_XYZ2Lab @ im_sRGB2XYZ @ im_clip], [sRGB, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_XYZ2Lab @ im_sRGB2XYZ @ im_clip], [LABQ, B_W, im_sRGB2mono @ im_XYZ2sRGB @ im_Lab2XYZ @ im_LabQ2Lab], [LABQ, XYZ, im_Lab2XYZ @ im_LabQ2Lab], [LABQ, YXY, im_XYZ2Yxy @ im_Lab2XYZ @ im_LabQ2Lab], [LABQ, LAB, im_LabQ2Lab], [LABQ, LCH, im_Lab2LCh @ im_LabQ2Lab], [LABQ, UCS, im_Lab2UCS @ im_LabQ2Lab], [LABQ, RGB, im_LabQ2disp], [LABQ, sRGB, im_XYZ2sRGB @ im_Lab2XYZ @ im_LabQ2Lab], [LABQ, LABQ, image_set_type LABQ], [LABQ, LABS, im_LabQ2LabS], [LABS, B_W, im_sRGB2mono @ im_XYZ2sRGB @ im_Lab2XYZ @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, XYZ, im_Lab2XYZ @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, YXY, im_XYZ2Yxy @ im_Lab2XYZ @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, LAB, im_LabS2Lab], [LABS, LCH, im_Lab2LCh @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, UCS, im_Lab2UCS @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, RGB, im_LabQ2disp @ im_LabS2LabQ @ im_clip2s], [LABS, sRGB, im_XYZ2sRGB @ im_Lab2XYZ @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, LABQ, im_LabS2LabQ @ im_clip2s], [LABS, LABS, image_set_type LABS] ] { /* From Image_type ... repeat here for brevity. Use same ordering as * in Colour menu for consistency. */ B_W = 1; XYZ = 12; YXY = 23; LAB = 13; LCH = 19; UCS = 18; RGB = 17; sRGB = 22; LABQ = 16; LABS = 21; } /* Transform between two colour spaces. */ colour_transform from to in = colour_unary _colour_conversion_table?i?2 in, i >= 0 = error ("unable to convert " ++ from_name ++ " to " ++ to_name) { match x = x?0 == from && x?1 == to; i = index match _colour_conversion_table; from_name = Image_type.type_names.lookup 1 0 from; to_name = Image_type.type_names.lookup 1 0 to; } /* Does an object have a sensible VIPS type? */ has_type x = is_image x || is_instanceof "Image" x || is_instanceof "Arrow" x || is_instanceof "Colour" x; /* Try to get a VIPS image type from an object. */ get_type x = get_type_im x, is_image x = get_type_im x.value, is_instanceof "Image" x = get_type_im x.image.value, is_instanceof "Arrow" x = Image_type.colour_spaces.lookup 0 1 x.colour_space, is_instanceof "Colour" x = error ("get_type: unable to get type from " ++ print x) { // get the type from a VIPS image ... but only if it makes sense with // the rest of the image get_type_im im = Image_type.LABQ, coding == Image_coding.LABPACK = Image_type.B_W, bands == 1 = type, bands == 3 && is_colorimetric = Image_type.MULTIBAND, bands != 3 && !is_colorimetric = type { is_colorimetric = Image_type.colour_spaces.present 1 type; type = im_header_int "Type" im; coding = im_header_int "Coding" im; bands = im_header_int "Bands" im; } } /* Transform to a colour space, assuming the type field in the input is * correct */ colour_transform_to to in = colour_transform (get_type in) to in; nip2-8.7.0/share/nip2/compat/7.8/Resize.def0000644000175000017500000000463613224651032015020 00000000000000_resize_interp = Option "Interpolation" (map (extract 0) Interpolate.names.value) Interpolate.bilinear; /* resize image x by any scale factor */ Resize_image x = map_unary widget x { widget image = class Image value { _vislevel = 3; factor = 1; interp = _resize_interp; value = resize factor factor interp.value image.value; } } /* resize image with separate x/y factors */ Resize_xy_image x = map_unary widget x { widget image = class Image value { _vislevel = 3; xfactor = 1; yfactor = 1; interp = _resize_interp; value = resize xfactor yfactor interp.value image.value; } } /* place image x in a larger piece of image */ Resize_canvas x = map_unary widget x { widget image = class Image value { _vislevel = 3; new_image_width = image.width; new_image_height = image.height; position = Option "Position" [ "North-west", "North", "North-east", "West", "Centre", "East", "South-west", "South", "South-east" ] 4; fill = Option "Fill background with" [ "White", "Black" ] 0; value = im_insert_noexpand background image.value xp yp { width = image.width; height = image.height; coding = image.coding; bands = 3, coding == Image_coding.LABPACK = image.bands; format = Image_format.FLOAT, coding == Image_coding.LABPACK = image.format; type = image.type; background_colour = image_white image, fill == 0 = Vector (map (const 0) [1 .. bands]); // placement vectors ... left, centre, right xposv = [0, new_image_width / 2 - width / 2, new_image_width - width]; yposv = [0, new_image_height / 2 - height / 2, new_image_height - height]; xp = xposv?((int) (position % 3)); yp = yposv?((int) (position / 3)); background = image_new new_image_width new_image_height bands format coding type background_colour 0 0; } } } #separator /* resize image x so that the shortest axis is a certain size */ Shrink_to = class { _shrink_width default_size image = class Image value { size = default_size; interp = _resize_interp; value = resize factor factor interp.value image.value { xfac = size / image.width; yfac = size / image.height; factor = max_pair xfac yfac; } } /* shrink minimum dimension to 400 pixels */ Quicklook x = map_unary (_shrink_width 400) x; /* shrink minimum dimension to 64 pixels */ Icon x = map_unary (_shrink_width 64) x; } nip2-8.7.0/share/nip2/compat/7.8/Image.def0000644000175000017500000002517713224651032014604 00000000000000/* take a copy of x */ Duplicate x = map_unary copy x; /* crop image x */ Crop x = map_unary build_widget x { build_widget image = widget image (image.width * 0.25 - image.xoffset) (image.height * 0.25 - image.yoffset) (image.width * 0.5) (image.height * 0.5); widget image left top width height = class Region image left top width height { _check_args = [ [image, "Image", check_Image] ] ++ super._check_args; _vislevel = 4; Region_edit image left top width height = widget image left top width height; } } /* insert image b into image a */ Insert a b = class Image value { _check_args = [ [a, "a", check_Image], [b, "b", check_Image] ] ++ super._check_args; _check_all = [ [a.format == b.format && a.coding == b.coding && a.bands == b.bands, "a.format == b.format && a.coding == b.coding && " ++ "a.bands == b.bands"], [a.width >= b.width && a.height >= b.height, "First image should be able to enclose second"] ]; _vislevel = 3; place = Area a ((a.width - b.width) / 2) ((a.height - b.height) / 2) b.width b.height; value = im_insert_noexpand a' b'' place.left place.top { a' = a.value; b' = b.value; b'' = clip2fmt a.format b'; } } /* join two images left/right or up/down */ Join = class { _check_ab_args a b = [ [a, "a", check_Image], [b, "b", check_Image] ]; _check_ab_all a b = [ [a.format == b.format && a.coding == b.coding && a.bands == b.bands, "a.format == b.format && a.coding == b.coding && " ++ "a.bands == b.bands"] ]; /* join two images left-right */ Left_right a b = class Image value { _check_args = _check_ab_args a b ++ super._check_args; _check_all = _check_ab_all a b ++ super._check_all; shim = Slider 0 100 0; background_colour = 0; align = Option "Alignment" ["Top", "Centre", "Bottom"] 1; value = im2 { w = a.width + b.width + shim.value; h = max_pair a.height b.height; bg = image_new w h a.bands a.format a.coding a.type background_colour 0 0; ya = [0, max_pair 0 ((b.height - a.height)/2), max_pair 0 (b.height - a.height)]; yb = [0, max_pair 0 ((a.height - b.height)/2), max_pair 0 (a.height - b.height)]; im1 = im_insert_noexpand bg a.value 0 (ya?align); im2 = im_insert_noexpand im1 b.value (a.width + shim.value) (yb?align); } } /* join two images top-bottom */ Top_bottom a b = class Image value { _check_args = _check_ab_args a b ++ super._check_args; _check_all = _check_ab_all a b ++ super._check_all; shim = Slider 0 100 0; background_colour = 0; align = Option "Alignment" ["Left", "Centre", "Right"] 1; value = im2 { w = max_pair a.width b.width; h = a.height + b.height + shim.value; bg = image_new w h a.bands a.format a.coding a.type background_colour 0 0; xa = [0, max_pair 0 ((b.width - a.width)/2), max_pair 0 (b.width - a.width)]; xb = [0, max_pair 0 ((a.width - b.width)/2), max_pair 0 (a.width - b.width)]; im1 = im_insert_noexpand bg a.value (xa?align) 0; im2 = im_insert_noexpand im1 b.value (xb?align) (a.height + shim.value); } } /* join a 2-D array of images */ Array x = class Image value { hspacing = Slider (-100) (100) 0; vspacing = Slider (-100) (100) 0; value = imagearray_assemble (-hspacing.value) (-vspacing.value) x' { x' = map (map getval) x; getval x = x.value, is_class x = x; } } } /* morph images to match (needs the rubbersheet plugin) */ Rubber = class { _rubber_interp = Option "Interpolation" (map (extract 0) Interpolate.names.value) Interpolate.bilinear; _rubber_order = Option "order" ["0", "1", "2", "3"] 1; _rubber_edges = Toggle "Wrap image edges" false; /* find a transform which will turn sample image into reference image */ Rubber_find reference sample = class Matrix transformation { _vislevel = 3; // controls order = _rubber_order; interp = _rubber_interp; edges = _rubber_edges; max_error = 0.3; max_iterations = 10; // transform _result = resample sample.value reference.value max_error max_iterations order.value interp.value edges.value; // results transformed_image = Image (_result?0); transformation = (_result?1).value; final_error = _result?2; } /* apply a transform to an image */ Rubber_apply transform image = class Image value { // controls interp = _rubber_interp; edges = _rubber_edges; value = im_transform image.value transform interp.value edges.value; } /* change a transformation's scale factor */ Rubber_scale transform = class Matrix scaled_transform { factor_hint = "scale transform by this factor"; factor_x = 1; factor_y = 1; // pairwise multiply scaled_transform = map2 (map2 multiply) transform.value facs { facs = [[ factor_x, factor_y ], [ 1, 1 ], [ 1, 1 ], [ 1 / factor_x, 1 / factor_y ], [ 1 / factor_x, 1 / factor_y ], [ 1 / factor_x, 1 / factor_y ]]; } } } #separator /* set pixels to 255 - x */ Photographic_negative x = map_unary invert x { invert x = oo_unary_function neg_op x, is_class x = im_invert x, is_image x = 255 - x, is_number x = error (errors.badargs ++ "invert"); neg_op = Operator "photographic_negative" invert Operator_type.ARITHMETIC false; } /* falsecolour a mono image */ Falsecolour x = map_unary falsecolour x; #separator /* adjust brightness and contrast of image x */ Adjust_scale_offset x = map_unary widget x { widget image = class Image value { _check_args = [ [image, "image", check_Image] ] ++ super._check_args; _vislevel = 3; scale = Slider 0.001 255 1; offset = Slider (-128) 128 0; value = clip2fmt image.format (image * scale + offset).value; } } /* adjust gamma of image x */ Adjust_gamma x = map_unary widget x { widget image = class Image value { _check_args = [ [image, "image", check_Image] ] ++ super._check_args; _vislevel = 3; gamma = Slider 0.001 4 1; image_maximum_hint = "Change image_maximum if this is " ++ "not an 8 bit image"; image_maximum = 255; value = clip2fmt image.format gammaed.value { gammaed = (image_maximum / image_maximum ** gamma) * image ** gamma; } } } /* change advisory header fields of image x */ Edit_header x = map_unary widget x { type_names = Image_type.type_names; names = sort (map (extract 0) type_names.value); widget image = class Image value { _check_args = [ [image, "image", check_Image] ] ++ super._check_args; _vislevel = 3; xres = image.xres; yres = image.yres; xoffset = image.xoffset; yoffset = image.yoffset; type_option = Option "Image type" names pos { name = type_names.lookup 1 0 image.type; pos = index (equal name) names; } value = im_copy_set image.value type xres yres xoffset yoffset { type = type_names.lookup 0 1 names?type_option; } } } #separator /* rotate and scale one image to match another */ Match a b = class Image value { _check_args = [ [a, "a", check_Image], [b, "b", check_Image] ] ++ super._check_args; _vislevel = 3; ap1 = Point_relative a 0.5 0.25; bp1 = Point_relative b 0.5 0.25; ap2 = Point_relative a 0.5 0.75; bp2 = Point_relative b 0.5 0.75; refine = Toggle "Refine selected tie-points" false; value = b''' { _prefs = Workspaces.Preferences; window = _prefs.MOSAIC_WINDOW_SIZE; object = _prefs.MOSAIC_OBJECT_SIZE; a' = a.value; b' = b.value; b'' = clip2fmt a.format b'; ap1' = ap1.image_rect; ap2' = ap2.image_rect; bp1' = bp1.image_rect; bp2' = bp2.image_rect; b''' = im_match_linear_search a' b'' ap1'.left ap1'.top bp1'.left bp1'.top ap2'.left ap2'.top bp2'.left bp2'.top object window, refine = im_match_linear a' b'' ap1'.left ap1'.top bp1'.left bp1'.top ap2'.left ap2'.top bp2'.left bp2'.top; } } /* make a colour overlay of two mono images */ Overlay a b = class Image value { _check_args = [ [a, "a", check_Image], [b, "b", check_Image] ] ++ super._check_args; _check_all = [ [a.bands == 1 && b.bands == 1, "a.bands == 1 && b.bands == 1"] ] ++ super._check_all; _vislevel = 3; ap1 = Point_relative a 0.5 0.25; bp1 = Point_relative b 0.5 0.25; ap2 = Point_relative a 0.5 0.75; bp2 = Point_relative b 0.5 0.75; refine = Toggle "Refine selected tie-points" false; lock = Toggle "No resize" false; colour = Option "Colour overlay as" [ "Green over Red", "Blue over Red", "Red over Green", "Red over Blue", "Blue over Green", "Green over Blue" ] 0; value = [(a' ++ b''' ++ black), (a' ++ black ++ b'''), (b''' ++ a' ++ black), (b''' ++ black ++ a'), (black ++ a' ++ b'''), (black ++ b''' ++ a')]?colour { _prefs = Workspaces.Preferences; window = _prefs.MOSAIC_WINDOW_SIZE; object = _prefs.MOSAIC_OBJECT_SIZE; a' = a.value; b' = b.value; b'' = clip2fmt a.format b'; ap1' = ap1.image_rect; ap2' = ap2.image_rect; bp1' = bp1.image_rect; bp2' = bp2.image_rect; // return p2 ... if lock is set, return a p2 a standard // distance along the vector joining p1 and p2 norm p1 p2 = Rect left' top' 0 0, lock = p2 { v = (p2.left - p1.left, p2.top - p1.top); // 100000 to give precision since we pass points as // ints to match n = 100000 * sign v; left' = p1.left + re n; top' = p1.top + im n; } ap2'' = norm ap1' ap2'; bp2'' = norm bp1' bp2'; b''' = im_match_linear_search a' b'' ap1'.left ap1'.top bp1'.left bp1'.top ap2''.left ap2''.top bp2''.left bp2''.top object window, // we can't search if lock is on refine && !lock = im_match_linear a' b'' ap1'.left ap1'.top bp1'.left bp1'.top ap2''.left ap2''.top bp2''.left bp2''.top; black = image_new a.width a.height a.bands a.format a.coding a.type 0 0 0; } } /* browse through the bands of a multiband image with a slider */ Browse_multiband image = class Image value { _vislevel = 3; band = Slider 0 (image.bands - 1) 0; display = Option "Display as" [ "Grey", "Green over Red", "Blue over Red", "Red over Green", "Red over Blue", "Blue over Green", "Green over Blue" ] 0; value = output { down = (int) band.value; up = (int) (band.value + 1); remainder = band.value - down; a = (image.value ? up) * remainder; b = (image.value ? down) * (1 - remainder); c = image_new image.width image.height 1 Image_format.FLOAT Image_coding.NOCODING Image_type.B_W 0 0 0; output = [ a + b, a ++ b ++ c, a ++ c ++ b, b ++ a ++ c, b ++ c ++ a, c ++ a ++ b, c ++ b ++ a ] ? display; } } nip2-8.7.0/share/nip2/compat/7.8/Rotate.def0000644000175000017500000000460713224651032015013 00000000000000/* rotate images and matricies by fixed angles */ Rotate_fixed = class { /* rotate image clockwise in 90 degree increments */ _rotate_widget default a = map_unary widget a { widget image = class Image value { _check_args = [ [image, "image", check_Image] ] ++ super._check_args; _vislevel = 3; angle = Option "Rotate by" [ "Don't rotate", "90 degrees clockwise", "180 degrees", "90 degrees anticlockwise" ] default; value = [ image.value, rot90 image.value, rot180 image.value, rot270 image.value ] ? angle; } } /* clockwise rotate by 90 degrees */ R90 x = _rotate_widget 1 x; /* rotate by 180 degrees */ R180 x = _rotate_widget 2 x; /* clockwise rotate by 270 degrees */ R270 x = _rotate_widget 3 x; /* rotate by 45 degrees ... square, odd-length-sides, matrices only */ R45 x = map_unary rot45 x; } /* rotate image anticlockwise by any angle */ Rotate_free a = map_unary widget a { widget image = class Image value { _check_args = [ [image, "image", check_Image] ] ++ super._check_args; _vislevel = 3; angle = Slider 0 360 0; value = rotate angle image.value; } } #separator /* mirror left/right or up/down */ Flip = class { /* mirror object up/down */ Up_down x = map_unary flipud x; /* mirror object left/right */ Left_right x = map_unary fliplr x; } /* swap rows and columns */ Transpose x = map_unary transpose x; #separator /* smallest rotate that gets arrow vertical or horizontal */ Straighten_arrow x = map_unary straighten x { straighten arrow = rotate angle'' arrow.image { x = arrow.width; y = arrow.height; angle = im (polar (x, y)); angle' = angle - 360, angle > 315 = angle - 180, angle > 135 = angle; angle'' = -angle', angle' >= (-45) && angle' < 45 = 90 - angle'; } } nip2-8.7.0/share/nip2/compat/7.8/Capture.def0000644000175000017500000001117413224651032015155 00000000000000/* make a new capture image */ Capture_video = class Image value { // shortcut to prefs _prefs = Workspaces.Preferences; device = _prefs.VIDEO_DEVICE; channel = Option "Input channel" [ "TV", "Composite 1", "Composite 2", "Composite 3" ] _prefs.VIDEO_CHANNEL; brightness = Slider 0 32767 _prefs.VIDEO_BRIGHTNESS; colour = Slider 0 32767 _prefs.VIDEO_COLOUR; contrast = Slider 0 32767 _prefs.VIDEO_CONTRAST; hue = Slider 0 32767 _prefs.VIDEO_HUE; frames_hint = "Average this many frames:"; frames = Slider 0 100 _prefs.VIDEO_FRAMES; mono = Toggle "Monochrome grab" _prefs.VIDEO_MONO; crop = Toggle "Crop image" _prefs.VIDEO_CROP; // grab, but hide it ... if we let the crop edit _raw_grab = Image (im_video_v4l1 device channel.value brightness.value colour.value contrast.value hue.value frames.value); edit_crop = Region _raw_grab left top width height { left = _prefs.VIDEO_CROP_LEFT; top = _prefs.VIDEO_CROP_TOP; width = min_pair _prefs.VIDEO_CROP_WIDTH (_raw_grab.width + left); height = min_pair _prefs.VIDEO_CROP_HEIGHT (_raw_grab.height + top); } aspect_hint = "Stretch vertically by this factor:"; aspect_ratio = _prefs.VIDEO_ASPECT; value = frame' { frame = edit_crop.value, crop = _raw_grab.value; frame' = colour_transform Image_type.sRGB Image_type.B_W frame, mono = frame; } } #separator /* use white image w to correct image i */ Light_correct w i = map_binary wc w i { wc w i = clip2fmt i.format (w' * i) { fac = mean w / max w; w' = fac * (max w / w); } } /* equalize bands in region r */ White_balance r = map_unary wb r { wb region = clip2fmt region.format (region.image * Vector facs) { target = mean region; facs = map (divide target) (map mean (bandsplit region)); } } /* remove features larger than a certain size from image x */ Smooth_image x = map_unary smooth x { smooth image = class Image value { _check_args = [ [image, "image", check_Image] ] ++ super._check_args; _vislevel = 3; feature = Slider 1 50 20; value = im_resize_linear (im_shrink image.value feature.value feature.value) image.width image.height; } } #separator /* calculate RGB -> LAB transform from an image of a Macbeth colour chart */ Calibrate_chart image = class Image value { _check_args = [ [image, "image", check_Image] ] ++ super._check_args; _vislevel = 3; // get macbeth data file to use macbeth = Filename "$VIPSHOME/share/$PACKAGE/data/macbeth_lab_d65.mat"; // get max of input image _max_value = Image_format.maxval image.format; // measure chart image _camera = im_measure image.value 0 0 image.width image.height 6 4; // load true values _true_Lab = Matrix_file macbeth.value; _true_XYZ = colour_transform Image_type.LAB Image_type.XYZ _true_Lab; // get Ys of greyscale _true_grey_Y = map (extract 1) (drop 18 _true_XYZ.value); // camera greyscale (all bands) _camera_grey = drop 18 _camera.value; // normalise both to 0-1 and combine _camera_grey' = map (map (multiply (1 / _max_value))) _camera_grey; _true_grey_Y' = map (multiply (1 / 100)) _true_grey_Y; _comb = Matrix (map2 cons _true_grey_Y' _camera_grey'); // make a linearising lut ... zero on left _linear_lut = im_invertlut _comb (_max_value + 1); // and display it linearising_lut = Image _linear_lut; // map the original image through the lineariser to get linear 0-1 // RGB image _image' = im_maplut image.value linearising_lut.value; // remeasure and solve for RGB -> XYZ _camera' = im_measure _image' 0 0 image.width image.height 6 4; _pinv = (transpose _camera' * _camera') ** -1; M = transpose (_pinv * transpose _camera' * _true_XYZ); // convert linear RGB camera to Lab value = colour_transform Image_type.XYZ Image_type.LAB ((float) (recomb M _image')); // measure again and compute dE76 _camera'' = im_measure value 0 0 image.width image.height 6 4; _dEs = map abs_vec (map Vector (_camera'' - _true_Lab).value); final_dE76 = mean (Vector _dEs); _max_dE = foldr max_pair 0 _dEs; _worst = index (equal _max_dE) _dEs; worst_patch = _macbeth_names ? _worst ++ " (patch " ++ print (_worst + 1) ++ ")"; } /* apply RGB -> LAB transform to an image */ Calibrate_image calib image = class Image value { _check_args = [ [calib, "calib", check_instance "Calibrate_chart"], [image, "image", check_Image] ] ++ super._check_args; // map the original image through the lineariser to get linear 0-1 // RGB image _image' = im_maplut image.value calib.linearising_lut.value; // convert linear RGB camera to Lab value = colour_transform Image_type.XYZ Image_type.LAB ((float) (recomb calib.M _image')); } nip2-8.7.0/share/nip2/compat/7.8/New.def0000644000175000017500000003034613224651032014305 00000000000000 /* make a new blank image */ New_image = widget { type_names = Image_type.type_names; names = sort (map (extract 0) type_names.value); default_type_name = type_names.lookup 1 0 Image_type.MULTIBAND; default_type_pos = index (equal default_type_name) names; widget = class Image value { width = 64; height = 64; bands = 1; format_option = Option "Image format" [ "8-bit unsigned int - UCHAR", // 0 "8-bit signed int - CHAR", // 1 "16-bit unsigned int - USHORT", // 2 "16-bit signed int - SHORT", // 3 "32-bit unsigned int - UINT", // 4 "32-bit signed int - INT", // 5 "32-bit float - FLOAT", // 6 "64-bit complex - COMPLEX", // 7 "64-bit float - DOUBLE", // 8 "128-bit complex - DPCOMPLEX" // 9 ] 0; type_option = Option "Image type" names default_type_pos; value = image_new width height bands format Image_coding.NOCODING type 0 0 0 { format = format_option.value; type = type_names.lookup 0 1 names?type_option; } } } /* pick a colour ... any colour space */ New_colour = widget "Lab" [50,0,0] { widget default_colour value = class Colour colour_space value { _colourspaces = [ "XYZ", "Yxy", "Lab", "LCh", "UCS", "RGB", "sRGB" ]; colour_space_option = Option "Colour space" _colourspaces (index (equal default_colour) _colourspaces); colour_space = colour_space_option.labels? colour_space_option.value; Colour_edit colour_space value = widget colour_space value; } } /* make a slider */ New_slider = Slider 0 255 128; /* make a toggle widget */ New_toggle = Toggle "untitled" false; /* make an option widget */ New_option = Option "untitled" ["option0", "option1"] 0; /* make a string entry widget */ New_string = String "Enter a string" "sample text"; /* make a number entry widget */ New_number = Number "Enter a number" 42; /* make a file chooser */ New_filename = Filename "$VIPSHOME/share/$PACKAGE/data/print_test_image.v"; /* make a matrix */ New_matrix = class { /* make a plain matrix */ Plain = Matrix (identity_matrix 3); /* make a convolution matrix */ Convolution = Matrix_con 1 0 [[0, 0, 0], [0, 1, 0], [0, 0, 0]]; /* make a recombination matrix */ Recombination = Matrix_rec (identity_matrix 3); /* make a morphology matrix */ Morphology = Matrix_mor [[0, 0, 0], [0, 255, 0], [0, 0, 0]]; } /* make a mark on an image */ New_mark = class { /* mark a region on an image */ Region image = scope.Region_relative image 0.25 0.25 0.5 0.5; /* mark a point on an image */ Point image = scope.Point_relative image 0.5 0.5; /* mark an arrow on an image */ Arrow image = scope.Arrow_relative image 0.25 0.25 0.5 0.5; /* mark a horizontal guide on an image */ HGuide image = scope.HGuide_relative image 0.5; /* mark a vertical guide on an image */ VGuide image = scope.VGuide_relative image 0.5; } #separator /* make a spatial response pattern image */ New_eye = class Image value { width = 64; height = 64; factor = Slider 0.001 1 0.2; value = im_eye width height factor.value; } /* make a zone plate image */ New_zone_plate = class Image value { size = 64; value = im_zone size; } /* make a grey ramp image */ New_grey = class Image value { width = 64; height = 64; orientation = Option "" ["Horizontal", "Vertical"] 0; value = [im_grey width height, im_rot90 (im_grey height width)]?orientation; } /* make a two band image whose pixel values are their coordinates */ New_xy = class Image value { width = 64; height = 64; value = make_xy width height; } /* make a new image of gaussian noise */ New_gauss_noise = class Image value { size = 64; mean = Slider 0 255 128; deviation = Slider 0 128 50; value = im_gaussnoise size size mean.value deviation.value; } /* make a 2d fractal image */ New_fractal = class Image value { size = 64; dimension = Slider 2.001 2.999 2.001; value = im_fractsurf size dimension.value; } /* make a CRT calibration chart */ New_CRT_test_chart = class Image value { brightness = Slider 0 255 200; patch_size = 32; value = imagearray_assemble 0 0 [[green, red], [blue, white]] { black = image_new patch_size patch_size 1 Image_format.FLOAT Image_coding.NOCODING Image_type.B_W 0 0 0; notblack = black + brightness; green = black ++ notblack ++ black; red = notblack ++ black ++ black; blue = black ++ black ++ notblack; white = notblack ++ notblack ++ notblack; } } /* make a frequency test chart */ New_frequency_test_chart = class Image value { width = 64; strip_height = 10; wavelengths = [64, 32, 16, 8, 4, 2]; value = join.value { freq_slice wave = Image (sin ((im_fgrey width strip_height) * 360 * width / wave) > 0); strips = map freq_slice wavelengths; join = foldl1 Join.Top_bottom strips; } } /* make a checkerboard pattern */ New_checkerboard = class Image value { width = 64; height = 64; horizontal_patch_size = 8; vertical_patch_size = 8; horizontal_patch_offset = 0; vertical_patch_offset = 0; value = xstripes ^ ystripes { pixels = make_xy width height; xpixels = pixels?0 + horizontal_patch_offset; ypixels = pixels?1 + vertical_patch_offset; make_stripe pix swidth = pix % (swidth * 2) >= swidth; xstripes = make_stripe xpixels horizontal_patch_size; ystripes = make_stripe ypixels vertical_patch_size; } } /* make a grid pattern */ New_grid = class Image value { width = 64; height = 64; horizontal_line_spacing = 8; vertical_line_spacing = 8; line_thickness = 1; horizontal_grid_offset = 0; vertical_grid_offset = 0; value = xstripes | ystripes { pixels = make_xy width height; xpixels = pixels?0 + horizontal_grid_offset; ypixels = pixels?1 + vertical_grid_offset; make_stripe pix swidth = pix % swidth < line_thickness; xstripes = make_stripe xpixels horizontal_line_spacing; ystripes = make_stripe ypixels vertical_line_spacing; } } #separator /* make a gaussian matrix */ New_gauss_matrix = class Matrix_vips _mask.value _mask.scale _mask.offset _mask.filename _mask.display { sigma = Slider 0.001 10 1; min_amplitude = Slider 0 1 0.2; integer = Toggle "Integer" false; _mask = fn sigma.value min_amplitude.value { fn = im_gauss_imask, integer = im_gauss_dmask; } } /* make a laplacian of a gaussian mask */ New_log_matrix = class Matrix_vips _mask.value _mask.scale _mask.offset _mask.filename _mask.display { sigma = Slider 0.001 10 1.5; min_amplitude = Slider 0 1 0.1; integer = Toggle "Integer" false; _mask = fn sigma.value min_amplitude.value { fn = im_log_imask, integer = im_log_dmask; } } #separator /* make the mask images for various ideal fourier filters */ New_ideal = class { /* make a mask image for an ideal highpass/lowpass fourier filter */ High_low = class Image value { size = 64; frequency_cutoff = Slider 0.01 0.99 0.5; type = Option "High or low" ["High pass", "Low pass"] 0; _type = type.value; value = image_set_type Image_type.FOURIER (rotquad mask) { mask = im_create_fmask size size _type frequency_cutoff.value 0 0 0 0; } } /* make a mask image for an ideal ring pass/reject fourier filter */ Ring = class Image value { size = 64; frequency_cutoff = Slider 0.01 0.99 0.5; ring_width = Slider 0.01 0.99 0.5; type = Option "Pass or reject" ["Ring pass", "Ring reject"] 0; _type = type.value + 6; value = image_set_type Image_type.FOURIER (rotquad mask) { mask = im_create_fmask size size _type frequency_cutoff.value ring_width.value 0 0 0; } } /* make a mask image for an ideal band pass/reject fourier filter */ Band = class Image value { size = 64; frequency_cutoff_x = Slider 0.01 0.99 0.5; frequency_cutoff_y = Slider 0.01 0.99 0.5; radius = Slider 0.01 0.99 0.5; type = Option "Pass or reject" ["Band pass", "Band reject"] 0; _type = type.value + 12; value = image_set_type Image_type.FOURIER (rotquad mask) { mask = im_create_fmask size size _type frequency_cutoff_x.value frequency_cutoff_y.value radius.value 0 0; } } } /* various Gaussian fourier filters */ New_gaussian = class { /* make a mask image for a gaussian highpass/lowpass fourier filter */ High_low = class Image value { size = 64; frequency_cutoff = Slider 0.01 0.99 0.5; amplitude_cutoff = Slider 0.01 0.99 0.5; type = Option "High or low" ["High pass", "Low pass"] 0; _type = type.value + 4; value = image_set_type Image_type.FOURIER (rotquad mask) { mask = im_create_fmask size size _type frequency_cutoff.value amplitude_cutoff.value 0 0 0; } } /* make a mask image for a gaussian ring pass/reject fourier filter */ Ring = class Image value { size = 64; frequency_cutoff = Slider 0.01 0.99 0.5; ring_width = Slider 0.01 0.99 0.5; amplitude_cutoff = Slider 0.01 0.99 0.5; type = Option "Pass or reject" ["Ring pass", "Ring reject"] 0; _type = type.value + 10; value = image_set_type Image_type.FOURIER (rotquad mask) { mask = im_create_fmask size size _type frequency_cutoff.value ring_width.value amplitude_cutoff.value 0 0; } } /* make a mask image for a gaussian band pass/reject fourier filter */ Band = class Image value { size = 64; frequency_cutoff_x = Slider 0.01 0.99 0.5; frequency_cutoff_y = Slider 0.01 0.99 0.5; radius = Slider 0.01 0.99 0.5; amplitude_cutoff = Slider 0.01 0.99 0.5; type = Option "Pass or reject" ["Band pass", "Band reject"] 0; _type = type.value + 16; value = image_set_type Image_type.FOURIER (rotquad mask) { mask = im_create_fmask size size _type frequency_cutoff_x.value frequency_cutoff_y.value radius.value amplitude_cutoff.value 0; } } } /* various Butterworth fourier filters */ New_butterworth = class { /* make a mask image for a Butterworth highpass/lowpass fourier filter */ High_low = class Image value { size = 64; order = Slider 1 10 2; frequency_cutoff = Slider 0.01 0.99 0.5; amplitude_cutoff = Slider 0.01 0.99 0.5; type = Option "High or low" ["High pass", "Low pass"] 0; _type = type.value + 2; value = image_set_type Image_type.FOURIER (rotquad mask) { mask = im_create_fmask size size _type order.value frequency_cutoff.value amplitude_cutoff.value 0 0; } } /* make a mask image for a Butterworth ring pass/reject fourier filter */ Ring = class Image value { size = 64; order = Slider 1 10 2; frequency_cutoff = Slider 0.01 0.99 0.5; ring_width = Slider 0.01 0.99 0.5; amplitude_cutoff = Slider 0.01 0.99 0.5; type = Option "Pass or reject" ["Ring pass", "Ring reject"] 0; _type = type.value + 8; value = image_set_type Image_type.FOURIER (rotquad mask) { mask = im_create_fmask size size _type order.value frequency_cutoff.value ring_width.value amplitude_cutoff.value 0; } } /* make a mask image for a Butterworth band pass/reject fourier filter */ Band = class Image value { size = 64; order = Slider 1 10 2; frequency_cutoff_x = Slider 0.01 0.99 0.5; frequency_cutoff_y = Slider 0.01 0.99 0.5; radius = Slider 0.01 0.99 0.5; amplitude_cutoff = Slider 0.01 0.99 0.5; type = Option "Pass or reject" ["Band pass", "Band reject"] 0; _type = type.value + 14; value = image_set_type Image_type.FOURIER (rotquad mask) { mask = im_create_fmask size size _type order.value frequency_cutoff_x.value frequency_cutoff_y.value radius.value amplitude_cutoff.value; } } } #separator /* make a slice through CIELAB space */ New_CIELAB_slice = class Image value { size = 64; L = Slider 0 100 50; value = lab_slice size L.value; } /* pick a colour in LAB space */ New_LAB_colour = widget "Lab" [50, 0, 0] { // ab_slice size size = 512; // range of values ... +/- 128 for ab range = 256; // map xy in slice image to ab and back xy2ab x = x / (size / range); ab2xy a = (a * (size / range)); widget space default_value = class Colour space value { L = default_value?0; a = default_value?1; b = default_value?2; lightness = Slider 0 100 L; ab_slice = Image (lab_slice size lightness.value); point = Point ab_slice (ab2xy a) (ab2xy b); value = [lightness.value, xy2ab point.left, xy2ab point.top]; Colour_edit colour_space value = widget colour_space value; } } nip2-8.7.0/share/nip2/compat/7.8/_list.def0000644000175000017500000001743713224651032014674 00000000000000/* concat l: join a list of lists together * * concat ["abc","def"] == "abcdef". * concat :: [[*]] -> [*] */ concat l = foldr join [] l; /* drop n l: drop the first n elements from list l * * drop 3 "abcd" == "d" * drop :: num -> [*] -> [*] */ drop n l = l, n <= 0 || l == [] = drop (n - 1) (tl l); /* dropwhile fn l: drop while fn is true * * dropwhile is_digit "1234pigs" == "pigs" * dropwhile :: (* -> bool) -> [*] -> [*] */ dropwhile fn l = [], l == [] = dropwhile fn (tl l), fn (hd l) = l; /* extract n l: extract element at index n from list l */ extract = converse subscript; /* filter fn l: return all elements of l for which predicate fn holds * * filter is_digit "1one2two3three" = "123" * filter :: (* -> bool) -> [*] -> [*] */ filter fn l = foldr addif [] l { addif x l = x : l, fn x; = l; } /* foldl fn st l: fold list l up from the left using function fn and start value st * * Start from the left hand end of the list (unlike foldr, see below). * foldl is less useful (and much slower). * * foldl fn start [a,b .. z] = ((((st fn a) fn b) ..) fn z) * foldl :: (* -> ** -> *) -> * -> [**] -> * */ foldl fn st l = st, l == [] = foldl fn (fn st (hd l)) (tl l); /* foldl1 fn l: like foldl, but use the 1st element as the start value * * foldl1 fn [1,2,3] == ((1 fn 2) fn 3) * foldl1 :: (* -> * -> *) -> [*] -> * */ foldl1 fn l = [], l == [] = foldl fn (hd l) (tl l); /* foldr fn st l: fold up list l, right to left, with function fn and start * * foldr fn st [a,b..z] = (a fn (b fn (.. (z fn st)))) * foldr :: (* -> ** -> **) -> ** -> [*] -> ** */ foldr fn st l = st, l == [] = fn (hd l) (foldr fn st (tl l)); /* foldrl fn l: like foldr, but use the 1st element as the start value * * foldr1 fn [1,2,3,4] == (2 fn (3 fn (4 fn 1))) * foldr1 :: (* -> * -> *) -> [*] -> * */ foldr1 fn l = [], l == [] = foldr fn (hd l) (tl l); /* Search a list for an element, returning it's index (or -1) * * index (equal 12) [13,12,11] == 1 * index :: (* -> bool) -> [*] -> real */ index fn list = search list 0 { search l n = -1, l == [] = n, fn (hd l) = search (tl l) (n + 1); } /* init l: remove last element of list l * * The dual of tl. * init [1,2,3] == [1,2] * init :: [*] -> [*] */ init l = error "init of []", l == []; = [], tl l == []; = hd l : init (tl l); /* iterate f x: repeatedly apply f to x * * return the infinite list [x, f x, f (f x), ..]. * iterate (multiply 2) 1 == [1, 2, 4, 8, 16, 32, 64 ... ] * iterate :: (* -> *) -> * -> [*] */ iterate f x = x : iterate f (f x); /* land l: and all the elements of list l together * * land (map (==0) list) == true, if every element of list is zero. * land :: [bool] -> bool */ land = foldr logical_and true; /* last l: return the last element of list l * * The dual of hd. last [1,2,3] == 3 * last :: [*] -> [*] */ last l = error "last of []", l == [] = hd l, tl l == [] = last (tl l); /* len l: length of list l * * len :: [*] -> num */ len l = 0, l == [] = 1 + len (tl l); /* limit l: return the first element of l which is equal to its predecessor * * useful for checking for convergence * limit :: [*] -> * */ limit l = error "incorrect use of limit", l == [] || tl l == [] || tl (tl l) == [] = a, a == b = limit (b : x) { a = l?0; b = l?1; x = tl (tl l); } /* lor l: or all the elements of list l together * * lor (map (equal 0) list) == true, if any element of list is zero. * lor :: [bool] -> bool */ lor = foldr logical_or false; /* map fn l: map function fn over list l * * map :: (* -> **) -> [*] -> [**] */ map f l = [], l == []; = f (hd l) : map f (tl l); /* map2 fn l1 l2: map two lists together with fn * * map2 :: (* -> ** -> ***) -> [*] -> [**] -> [***] */ map2 fn l1 l2 = map fn' (zip2 l1 l2) { fn' p = fn p?0 p?1; } /* map3 fn l1 l2 l3: map three lists together with fn * * map3 :: (* -> ** -> *** -> ****) -> [*] -> [**] -> [***] -> [****] */ map3 fn l1 l2 l3 = map fn' (zip3 l1 l2 l3) { fn' p = fn p?0 p?1 p?2; } /* member l x: true if x is a member of list l * * is_digit == member "0123456789" * member :: [*] -> * -> bool */ member l x = lor (map (equal x) l); /* mkset eq l: remove duplicates from list l using equality function * * mkset :: (* -> bool) -> [*] -> [*] */ mkset eq l = [], l == [] = a : filter (not @ eq a) (mkset eq x) { a = hd l; x = tl l; } /* postfix l r: add r to the end of list l * * The dual of ':'. * postfix :: [*] -> ** -> [*,**] */ postfix l r = l ++ [r]; /* repeat x: make an infinite list of xes * * repeat :: * -> [*] */ repeat x = map (const x) [1..]; /* replicate n x: make n copies of x in a list * * replicate :: num -> * -> [*] */ replicate n x = take n (repeat x); /* reverse l: reverse list l * * reverse :: [*] -> [*] */ reverse l = foldl (converse cons) [] l; /* scan fn st l: apply (fold fn r) to every initial segment of a list * * scan add 0 [1,2,3] == [1,3,6] * scan :: (* -> ** -> *) -> * -> [**] -> [*] */ scan fn = g { g st l = [st], l == [] = st : g (fn st (hd l)) (tl l); } /* sort l: sort list l into ascending order * * sort :: [*] -> [*] */ sort l = sortc less_equal l; /* sortc comp l: sort list l into order using a comparision function * * Uses merge sort (n log n behaviour) * sortc :: (* -> * -> bool) -> [*] -> [*] */ sortc comp l = l, n <= 1 = merge (sortc comp (take n2 l)) (sortc comp (drop n2 l)) { n = len l; n2 = (int) (n / 2); /* merge l1 l2: merge sorted lists l1 and l2 to make a single * sorted list */ merge l1 l2 = l2, l1 == [] = l1, l2 == [] = a : merge x (b : y), comp a b = b : merge (a : x) y { a = hd l1; x = tl l1; b = hd l2; y = tl l2; } } /* sortpl pl l: sort by a list of predicates * * sortpl :: (* -> bool) -> [*] -> [*] */ sortpl pl l = sortc (test pl) l { /* Comparision function ... put true before false, if equal move on to * the next predicate. */ test pl a b = true, pl == [] = ta, ta != tb = test (tl pl) a b { ta = pl?0 a; tb = pl?0 b; } } /* sortr l: sort list l into descending order * * sortr :: [*] -> [*] */ sortr l = sortc more l; /* split fn l: break a list into sections separated by fn * * split is_space "hello world" == ["hello", "world"] * split :: (* -> bool) -> [*] -> [[*]] */ split fn l = [], l == [] = head : split fn tail { nfn = not @ fn; l' = dropwhile fn l; head = takewhile nfn l'; tail = dropwhile nfn l'; } /* splitpl fnl l: split a list up with a list of predicates * * splitpl [is_digit, is_letter, is_digit] "123cat" == ["123", "cat", []] * splitpl :: [* -> bool] -> [*] -> [[*]] */ splitpl fnl l = l, fnl == [] = head : splitpl (tl fnl) tail { head = takewhile (hd fnl) l; tail = dropwhile (hd fnl) l; } /* split_lines n l: split a list into equal length lines * * split_lines 4 "1234567" == ["1234", "567"] * splitl :: int -> [*] -> [[*]] */ split_lines n l = [], l == [] = take n l : split_lines n (drop n l); /* take n l: take the first n elements from list l * take :: num -> [*] -> [*] */ take n l = [], n <= 0 = [], l == [] = hd l : take (n-1) (tl l); /* takewhile fn l: take from the front of a list while predicate fn holds * * takewhile is_digit "123onetwothree" == "123" * takewhile :: (* -> bool) -> [*] -> [*] */ takewhile fn l = [], l == [] = hd l : takewhile fn (tl l), fn (hd l) = []; /* zip2 l1 l2: zip two lists together * * zip2 [1,2] ['a', 'b', 'c'] == [[1,'a'],[2,'b']] * zip2 :: [*] -> [**] -> [[*,**]] */ zip2 l1 l2 = [], l1 == [] || l2 == [] = [hd l1, hd l2] : zip2 (tl l1) (tl l2); /* zip3 l1 l2 l3: zip three lists together * * zip3 [1,2] ['a', 'b', 'c'] [true] == [[1,'a',true]] * zip3 :: [*] -> [**] ->[***] -> [[*,**,***]] */ zip3 l1 l2 l3 = [], l1 == [] || l2 == [] || l3 == [] = [hd l1, hd l2, hd l3] : zip3 (tl l1) (tl l2) (tl l3); nip2-8.7.0/share/nip2/compat/7.8/_errors.def0000644000175000017500000000273313224651032015226 00000000000000 /* Lots of error messages. */ errors = class { not1band = "not 1 band image"; not1band8bit = "not 1 band 8-bit image"; not1band3band = "not 1 band image, or 3 band 1 column image"; notodd = "not odd width|height"; notmask = "not mask"; notmaskim = "not image|mask, mask"; badcoding = "not NOCODING or LABPACK"; badlab = "unable to convert to LAB"; allreal = "not all real numbers"; allreg = "not all regions"; badargs = "bad arguments to "; badbands = "images have differing numbers of bands"; badcolour = "bad arg to colourspace function"; badmatrixmatch = "matrix arguments do not match"; badnum = "wrong number of real number arguments"; bandFmt = "bad BandFmt"; internal = "menu macro sanity failure!"; lengthdiff = "list arguments differ in length"; noimage = "no image argument"; noregion = "no region argument"; notim = "not image"; notimcmplx = "not image|complex"; notimnotreal = "non image arguments not all real numbers"; notimreg = "not image|region"; notregimreg = "not region, image|region"; notimregnum = "not image|region|number"; notimregstr = "not image|region|string"; notmatnum = "not real|matrix|mask"; notmatrix = "not matrix|mask"; notodd_square_matrix = "not odd-sided square matrix|mask"; notreal = "not real number"; notreglist = "not region|[region]"; notsquare_matrix = "not square matrix|mask"; regwrong = "regions not on two images"; sfacgt1 = "shrink factors should be >= 1"; unknownType = "unknown type"; usage = "usage: "; }; nip2-8.7.0/share/nip2/compat/7.8/X_ray.def0000644000175000017500000002501513224651032014633 00000000000000/* replace dark or light section of im1 with section from im2 */ Replace_area im1 im2 = class Image value { _check_args = [ [im1, "im1", check_Image], [im2, "im2", check_Image] ] ++ super._check_args; _vislevel = 3; /* Region on first image placed in the top left hand corner, * positioned and size relative to the height and width of im1. */ r1 = Region_relative im1 0.1 0.1 0.1 0.1; /* Point on second image placed in the top left hand corner, * positioned relative to the height and width of im2. Used to * define _r2, the region from which the section of image is cloned * from. */ p2 = Point im2 (im2.width * 0.1 - im2.xoffset) (im2.height * 0.1 - im2.yoffset); _r2 = Region im2 p2.left p2.top r1.width r1.height; _mask = [r1 <= Options.scale_cutoff, r1 >= Options.scale_cutoff] ? Options.control; mask = _mask?0; Options = option_1, format < 4 = option_2 { format = im1.format; option_1 = class { _vislevel = 3; /* Option toggle used to define whether the user is replacing a * dark or a light area. */ control = Option "Removing a" [ "Dark Area", "Light Area" ] 1; /* Used to select the area to be replaced. */ scale_cutoff = Slider 0.01 mx (mx / 2) { mx = Image_format.maxval im1.format; } /* Option toggle how the levels in the replacment area are calculated. * Replacement with gaussian noise uses the scale&offset balancing. */ process = Option "Use" [ "Scale&Offset Balancing", "Gaussian noise replacement", "Histogram Balancing" ] 0; /* This allows the function to be paused. */ pause = Toggle "Pause function to allow easy adjustment of region r1." true; } option_2 = class { _vislevel = 3; /* Option toggle used to define whether the user is replacing a * dark or a light area. */ control = Option "Removing a" [ "Dark Area", "Light Area" ] 1; /* Used to select the area to be replaced. */ scale_cutoff = Slider 0.01 mx (mx / 2) { /* the below function can not cope with floats * and don't need massive range for 32-bit ints so * will just define the max as for a 16 bit unsigned. */ mx = Image_format.maxval 2; //im1.format; } /* Option toggle how the levels in the replacment area are calculated. * Replacement with gaussian noise uses the scale&offset balancing. */ process = Option "Use" [ "Scale&Offset Balancing", "Gaussian noise replacement" ] 0; /* This allows the function to be paused. */ pause = Toggle "Pause function to allow easy adjustment of region r1." true; } } value = im1.value, Options.pause = im_insert im1.value patch r1.left r1.top { patch = _so_balance mask r1.value _r2.value false, Options.process == 0; = _so_balance mask r1.value _r2.value true, Options.process == 1; = _hist_balance_2 mask r1.value _r2.value; } }; #separator /* Balance the effect of secondary structure on an X-ray image * Takes an X-ray image an 8-bit control mask and a list of 8-bit reference * masks, where the masks are white on a black background. Then simplifys * the original X-ray to reduce interference from stretchers cradles etc. */ Balance_areas im_in m_control m_list = class Image value { _vislevel = 3; _format = im_in.format; Options = option_1, format < 4 = option_2 { format = im_in.format; option_1 = class { _vislevel = 3; pause = Toggle "Pause Process." true; blur = Slider 0 5 0; _blur = rint blur.value; option = Toggle "Use Scale&Offset Balancing rather than Histogram." true; _option = option; } option_2 = class { _vislevel = 3; pause = Toggle "Pause Process." true; blur = Slider 0 5 0; _blur = rint blur.value; _option = true; } } _control_im = _section_select2 im_in m_control; _control_values = _so_values _control_im; /* blur mask over a set number of pixels then histogram match an area * of the original image defined by m_current to the _control_im * then blend the matched area back into im_in. */ process m_current im_start = im_out { alternative = false; bl_mask = _mask_blur_2 m_current Options._blur; scaled_im = _so_convert _control_values im_start m_current, Options._option == true = _hist_convert_2 _control_im im_start m_current; fmt_im = clip2fmt im_start.format scaled_im; blended_im = im_blend bl_mask scaled_im.value im_start.value; im_out = Image (clip2fmt im_start.format blended_im); } value = im_in.value, Options.pause == true = (foldr process im_in m_list).value; }; _so_balance mask im1 im2 gauss = result { /* Extract the undamaged areas. */ im1' = if !mask then Image im1 else 0; im2' = if !mask then Image im2 else 0; /* Find the non_zero means of the undamaged areas. */ m1 = _mean_fn im1'; m2 = _mean_fn im2'; im1_mn = im1' - m1; im2_mn = im2' - m2; scale = (max im1_mn)/(max im2_mn); im2_corrected_a = ((im2 - m2) * scale) + m1; im2_corrected_b = clip2fmt im1'.format im2_corrected_a; /* Option to convert replacement image to scaled gaussian noise */ im2_corrected = im2_corrected_b, gauss == false = _gauss_noise im2_corrected_b; /* Blur mask. */ mask' = _mask_blur_2 mask 5; //mask' = _feather_mask_2 5 mask.value; /* Blend im2 into im1. */ result = im_blend mask' im2_corrected im1; }; /* make a new image of gaussian noise */ _gauss_noise im2 = value { i = Image (im2); width = i.width; height = i.height; mean = Mean i; deviation = Deviation i; noise = im_gaussnoise width height mean deviation; value = clip2fmt i.format noise; }; /* Dilate and blur a mask by a number of pixels. * *_feather_mask_2 pixels mask * = im_convsep (dilate dilate_matrix mask) blur_matrix *{ * dilate_matrix = (iterate (dilate _morph_mask8) _morph_mask8) ? pixels; * blur_matrix = Matrix_con pixels 0 [(map (const 1) [1 .. pixels])]; *}; */ /* Mask is 255 to indicate parts of im1 which are damaged: replace these bits * with the corresponding parts of im2. * * Match the histograms of the two images to hide grey-level differences, be * careful to only consider undamaged sections. * * Feather the edges of the blend to hide the join. * * mask is an Image class. im1, im2 and result are vips images. */ _hist_balance_2 mask im1 im2 = result { format = im_header_int "BandFmt" im1; bands = im_header_int "Bands" im1; /* checks for 8 or 16 bit signed and converts to unsigned */ force_unsigned i = clip2fmt Image_format.UCHAR (i + 128), format == Image_format.CHAR = clip2fmt Image_format.USHORT (i + 32768), format == Image_format.SHORT = i; /* undo any force_unsigned */ format_restore i = clip2fmt Image_format.CHAR (i - 128), format == Image_format.CHAR = clip2fmt Image_format.SHORT (i - 32768), format == Image_format.SHORT = i; /* Find histogram and then zap the zero column (0 == background). For * 16-bit images, the histogram can be smaller than 65535 .... expand * up to full size. */ build_hist i = im_insert big_black h' 0 0 { max_value = Image_format.maxval i.format; h = hist_find i.value; black_1 = image_new 1 1 i.bands Image_format.UINT Image_coding.NOCODING i.type 0 0 0; big_black = image_new max_value 1 i.bands Image_format.UINT Image_coding.NOCODING i.type 0 0 0; h' = im_insert h black_1 0 0; } /* We can't get hists of signed images :-( go unsigned if we have to. */ im1' = force_unsigned im1; im2' = force_unsigned im2; /* Extract the undamaged areas. */ reference = if !mask then Image im1' else 0; secondary = if !mask then Image im2' else 0; /* Find the hists of the undamaged areas. */ h1 = build_hist reference; h2 = build_hist secondary; /* Match greylevels of im2 to match im1. */ im2'' = hist_map (hist_match h1 h2) im2'; /* Feather mask. */ mask' = _mask_blur_2 mask 5; //mask' = _feather_mask_2 5 mask.value; /* Blend im2 into im1. */ im1'' = im_blend mask' im2'' im1'; /* Undo any signed/unsigned nonsense. */ result = format_restore im1''; }; // Blurs the edges of an 8 bit mask, over a given number of pixels. _mask_blur_2 mask pixel = value { pixels = 1, pixel == 0 = pixel; black = im_black (mask.width + (2*pixels)) (mask.height + (2*pixels)) 1; new_mask = Image (im_insert black mask.value pixels pixels); blur_matrix = Matrix_con pixels 0 [(map (const 1) [1 .. pixels])]; im_blur = im_convsep new_mask.value blur_matrix; left = pixels; top = pixels; width = mask.width; height = mask.height; value = im_extract_area im_blur left top width height; }; _so_values im = result { mean_of_im = _mean_fn im; adjusted_im = im - mean_of_im; max_of_im = max adjusted_im; result = [mean_of_im, max_of_im]; }; _so_convert con_values im mask = result { im' = _section_select2 im mask; im_values = _so_values im'; mean_of_con = con_values?0; mean_of_im = im_values?0; max_of_con = con_values?1; max_of_im = im_values?1; scale = (max_of_con)/(max_of_im); im_convert = ((im - mean_of_im) * scale) + mean_of_con; result = clip2fmt im.format im_convert; }; /* Convert the histogram of part of image im_a, depending on the mask im_m, * to match the histogram of im_c. */ _hist_convert_2 control_im im adjust_mask = im_final { max_value = Image_format.maxval im.format; adjust_im = _section_select2 im adjust_mask; hist_c = hist_fn control_im; hist_a = hist_fn adjust_im; /* Find histogram and then edit out any information related to parts * of the image with value 0. Ensure that the histogram represents * the full scale for the appropriate format. Output corrected * histograms for the correct parts of the image. */ hist_fn im_in = output { hist_1 = hist_find im_in; black_1 = clip2fmt hist_1.format (im_black 1 1 1); hist_2 = im_insert hist_1.value black_1 0 0; black_2 = clip2fmt hist_1.format (im_black max_value 1 1); output = im_insert black_2 hist_2 0 0; } im_final = hist_map (hist_match hist_a hist_c) im; }; //------------------------------------------------------------------------------- /*Returns a section of im, defined by a mask, on a black background*/ _section_select2 im_in mask = output { output = clip2fmt im_in.format (im_black im_in.width im_in.height 1), mask == 0 = im_in; }; _mean_fn im = no_out { zero_im = (im == 0); zero_mean = mean zero_im; no_mean = mean im; no_out = no_mean/(1 - (zero_mean/255)); } nip2-8.7.0/share/nip2/compat/7.8/_predicate.def0000644000175000017500000000551013224651032015646 00000000000000 /* is_colour_space str: is a string one of nip's colour space names */ is_colour_space str = Image_type.colour_spaces.present 0 str; /* is_colour_type n: is a number one of VIPS's colour spaces */ is_colour_type n = Image_type.colour_spaces.present 1 n; /* is_number: is a real or a complex number. */ is_number a = is_real a || is_complex a; /* is_int: is an integer */ is_int a = is_real a && a == (int) a; /* is_uint: is an unsigned integer */ is_uint a = is_int a && a >= 0; /* is_pint: is a positive integer */ is_pint a = is_int a && a > 0; /* is_preal: is a positive real */ is_preal a = is_real a && a > 0; /* is_ureal: is an unsigned real */ is_ureal a = is_real a && a >= 0; /* is_letter c: true of character c is an ASCII letter * * is_letter :: char -> bool */ is_letter c = ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z'); /* is_digit c: true if character c is an ASCII digit * * is_digit :: char->bool */ is_digit x = '0' <= x && x <= '9'; /* A whitespace character. * * is_space :: char->bool */ is_space = member " \n\t"; /* is_listof p s: true if finite list with p true for every element. */ is_listof p l = is_list l && land (map p l); /* is_string s: true if finite list of char. */ is_string s = is_listof is_char s; /* is_real_list l: is l a list of real numbers ... test each element, * so no infinite lists pls. */ is_real_list l = is_listof is_real l; /* is_string_list l: is l a finite list of finite strings. */ is_string_list l = is_listof is_string l; /* is_rectangular l: is l a rectangular data structure */ is_rectangular l = true, !is_list l = true, land (map is_obj l) = true, land (map is_list l) && land (map (not @ is_obj) l) && land (map is_rectangular l) && len l > 0 && land (map (equal (hd lengths)) (tl lengths)) = false { // treat strings as a base type, not [char] is_obj x = !is_list x || is_string x; lengths = map len l; } /* is_matrix l: is l a list of lists of real numbers, all the same length */ is_matrix l = is_listof is_real_list l && is_rectangular l; /* is_square_matrix l: is l a matrix with width == height */ is_square_matrix l = true, l == [] = is_matrix l && len l == len (hd l); /* is_oddmatrix l: is l a matrix with odd-length sides */ is_oddmatrix l = true, l == [] = is_matrix l && (len l) % 2 == 1 && (len (l?0)) % 2 == 1; /* is_odd_square_matrix l: is l a square_matrix with odd-length sides */ is_odd_square_matrix l = is_square_matrix l && (len l) % 2 == 1; /* Is an item in a column of a table? */ is_incolumn n table x = member (map (extract n) table) x; /* Is HGuide or VGuide. */ is_Guide x = is_instanceof "HGuide" x || is_instanceof "VGuide" x; is_Point x = is_instanceof "Point" x; /* A list of the form [[1,2],[3,4],[5,6]...] */ is_xy_list l = is_list l && land (map xy l) { xy l = is_real_list l && len l == 2; } nip2-8.7.0/share/nip2/compat/7.8/Colour.def0000644000175000017500000004036613224651032015022 00000000000000/* Save a bit of typing. */ _colour_conv from to x = map_unary (colour_transform from to) x; /* convert Mono to various formats */ Mono_to = class { /* convert mono colourspace to mono colourspace */ Mono x = _colour_conv Image_type.B_W Image_type.B_W x; /* convert mono colourspace to XYZ colourspace */ XYZ x = _colour_conv Image_type.B_W Image_type.XYZ x; /* convert mono colourspace to Yxy colourspace */ Yxy x = _colour_conv Image_type.B_W Image_type.YXY x; /* convert mono colourspace to Lab colourspace */ Lab x = _colour_conv Image_type.B_W Image_type.LAB x; /* convert mono colourspace to LCh colourspace */ LCh x = _colour_conv Image_type.B_W Image_type.LCH x; /* convert mono colourspace to UCS colourspace */ UCS x = _colour_conv Image_type.B_W Image_type.UCS x; /* convert mono colourspace to RGB colourspace */ RGB x = _colour_conv Image_type.B_W Image_type.RGB x; /* convert mono colourspace to sRGB colourspace */ sRGB x = _colour_conv Image_type.B_W Image_type.sRGB x; /* convert mono colourspace to LabQ colourspace */ LabQ x = _colour_conv Image_type.B_W Image_type.LABQ x; /* convert mono colourspace to LabS colourspace */ LabS x = _colour_conv Image_type.B_W Image_type.LABS x; } /* convert XYZ to various formats */ XYZ_to = class { /* convert XYZ colourspace to mono colourspace */ Mono x = _colour_conv Image_type.XYZ Image_type.B_W x; /* convert XYZ colourspace to XYZ colourspace */ XYZ x = _colour_conv Image_type.XYZ Image_type.XYZ x; /* convert XYZ colourspace to Yxy colourspace */ Yxy x = _colour_conv Image_type.XYZ Image_type.YXY x; /* convert XYZ colourspace to Lab colourspace */ Lab x = _colour_conv Image_type.XYZ Image_type.LAB x; /* convert XYZ colourspace to LCh colourspace */ LCh x = _colour_conv Image_type.XYZ Image_type.LCH x; /* convert XYZ colourspace to UCS colourspace */ UCS x = _colour_conv Image_type.XYZ Image_type.UCS x; /* convert XYZ colourspace to RGB colourspace */ RGB x = _colour_conv Image_type.XYZ Image_type.RGB x; /* convert XYZ colourspace to sRGB colourspace */ sRGB x = _colour_conv Image_type.XYZ Image_type.sRGB x; /* convert XYZ colourspace to LabQ colourspace */ LabQ x = _colour_conv Image_type.XYZ Image_type.LABQ x; /* convert XYZ colourspace to LabS colourspace */ LabS x = _colour_conv Image_type.XYZ Image_type.LABS x; } /* convert Yxy to various formats */ Yxy_to = class { /* convert Yxy colourspace to mono colourspace */ Mono x = _colour_conv Image_type.YXY Image_type.B_W x; /* convert Yxy colourspace to XYZ colourspace */ XYZ x = _colour_conv Image_type.YXY Image_type.XYZ x; /* convert Yxy colourspace to Yxy colourspace */ Yxy x = _colour_conv Image_type.YXY Image_type.YXY x; /* convert Yxy colourspace to Lab colourspace */ Lab x = _colour_conv Image_type.YXY Image_type.LAB x; /* convert Yxy colourspace to LCh colourspace */ LCh x = _colour_conv Image_type.YXY Image_type.LCH x; /* convert Yxy colourspace to UCS colourspace */ UCS x = _colour_conv Image_type.YXY Image_type.UCS x; /* convert Yxy colourspace to RGB colourspace */ RGB x = _colour_conv Image_type.YXY Image_type.RGB x; /* convert Yxy colourspace to sRGB colourspace */ sRGB x = _colour_conv Image_type.YXY Image_type.sRGB x; /* convert Yxy colourspace to LabQ colourspace */ LabQ x = _colour_conv Image_type.YXY Image_type.LABQ x; /* convert Yxy colourspace to LabS colourspace */ LabS x = _colour_conv Image_type.YXY Image_type.LABS x; } /* convert Lab to various formats */ Lab_to = class { /* convert Lab colourspace to mono colourspace */ Mono x = _colour_conv Image_type.LAB Image_type.B_W x; /* convert Lab colourspace to XYZ colourspace */ XYZ x = _colour_conv Image_type.LAB Image_type.XYZ x; /* convert Lab colourspace to Yxy colourspace */ Yxy x = _colour_conv Image_type.LAB Image_type.YXY x; /* convert Lab colourspace to Lab colourspace */ Lab x = _colour_conv Image_type.LAB Image_type.LAB x; /* convert Lab colourspace to LCh colourspace */ LCh x = _colour_conv Image_type.LAB Image_type.LCH x; /* convert Lab colourspace to UCS colourspace */ UCS x = _colour_conv Image_type.LAB Image_type.UCS x; /* convert Lab colourspace to RGB colourspace */ RGB x = _colour_conv Image_type.LAB Image_type.RGB x; /* convert Lab colourspace to sRGB colourspace */ sRGB x = _colour_conv Image_type.LAB Image_type.sRGB x; /* convert Lab colourspace to LabQ colourspace */ LabQ x = _colour_conv Image_type.LAB Image_type.LABQ x; /* convert Lab colourspace to LabS colourspace */ LabS x = _colour_conv Image_type.LAB Image_type.LABS x; } /* convert LCh to various formats */ LCh_to = class { /* convert LCh colourspace to mono colourspace */ Mono x = _colour_conv Image_type.LCH Image_type.B_W x; /* convert LCh colourspace to XYZ colourspace */ XYZ x = _colour_conv Image_type.LCH Image_type.XYZ x; /* convert LCh colourspace to Yxy colourspace */ Yxy x = _colour_conv Image_type.LCH Image_type.YXY x; /* convert LCh colourspace to Lab colourspace */ Lab x = _colour_conv Image_type.LCH Image_type.LAB x; /* convert LCh colourspace to LCh colourspace */ LCh x = _colour_conv Image_type.LCH Image_type.LCH x; /* convert LCh colourspace to UCS colourspace */ UCS x = _colour_conv Image_type.LCH Image_type.UCS x; /* convert LCh colourspace to RGB colourspace */ RGB x = _colour_conv Image_type.LCH Image_type.RGB x; /* convert LCh colourspace to sRGB colourspace */ sRGB x = _colour_conv Image_type.LCH Image_type.sRGB x; /* convert LCh colourspace to LabQ colourspace */ LabQ x = _colour_conv Image_type.LCH Image_type.LABQ x; /* convert LCh colourspace to LabS colourspace */ LabS x = _colour_conv Image_type.LCH Image_type.LABS x; } /* convert UCS to various formats */ UCS_to = class { /* convert UCS colourspace to mono colourspace */ Mono x = _colour_conv Image_type.UCS Image_type.B_W x; /* convert UCS colourspace to XYZ colourspace */ XYZ x = _colour_conv Image_type.UCS Image_type.XYZ x; /* convert UCS colourspace to Yxy colourspace */ Yxy x = _colour_conv Image_type.UCS Image_type.YXY x; /* convert UCS colourspace to Lab colourspace */ Lab x = _colour_conv Image_type.UCS Image_type.LAB x; /* convert UCS colourspace to LCh colourspace */ LCh x = _colour_conv Image_type.UCS Image_type.LCH x; /* convert UCS colourspace to UCS colourspace */ UCS x = _colour_conv Image_type.UCS Image_type.UCS x; /* convert UCS colourspace to RGB colourspace */ RGB x = _colour_conv Image_type.UCS Image_type.RGB x; /* convert UCS colourspace to sRGB colourspace */ sRGB x = _colour_conv Image_type.UCS Image_type.sRGB x; /* convert UCS colourspace to LabQ colourspace */ LabQ x = _colour_conv Image_type.UCS Image_type.LABQ x; /* convert UCS colourspace to LabS colourspace */ LabS x = _colour_conv Image_type.UCS Image_type.LABS x; } /* convert RGB to various formats */ RGB_to = class { /* convert RGB colourspace to mono colourspace */ Mono x = _colour_conv Image_type.RGB Image_type.B_W x; /* convert RGB colourspace to XYZ colourspace */ XYZ x = _colour_conv Image_type.RGB Image_type.XYZ x; /* convert RGB colourspace to Yxy colourspace */ Yxy x = _colour_conv Image_type.RGB Image_type.YXY x; /* convert RGB colourspace to Lab colourspace */ Lab x = _colour_conv Image_type.RGB Image_type.LAB x; /* convert RGB colourspace to LCh colourspace */ LCh x = _colour_conv Image_type.RGB Image_type.LCH x; /* convert RGB colourspace to UCS colourspace */ UCS x = _colour_conv Image_type.RGB Image_type.UCS x; /* convert RGB colourspace to RGB colourspace */ RGB x = _colour_conv Image_type.RGB Image_type.RGB x; /* convert RGB colourspace to sRGB colourspace */ sRGB x = _colour_conv Image_type.RGB Image_type.sRGB x; /* convert RGB colourspace to LabQ colourspace */ LabQ x = _colour_conv Image_type.RGB Image_type.LABQ x; /* convert RGB colourspace to LabS colourspace */ LabS x = _colour_conv Image_type.RGB Image_type.LABS x; } /* convert sRGB to various formats */ sRGB_to = class { /* convert sRGB colourspace to mono colourspace */ Mono x = _colour_conv Image_type.sRGB Image_type.B_W x; /* convert sRGB colourspace to XYZ colourspace */ XYZ x = _colour_conv Image_type.sRGB Image_type.XYZ x; /* convert sRGB colourspace to Yxy colourspace */ Yxy x = _colour_conv Image_type.sRGB Image_type.YXY x; /* convert sRGB colourspace to Lab colourspace */ Lab x = _colour_conv Image_type.sRGB Image_type.LAB x; /* convert sRGB colourspace to LCh colourspace */ LCh x = _colour_conv Image_type.sRGB Image_type.LCH x; /* convert sRGB colourspace to UCS colourspace */ UCS x = _colour_conv Image_type.sRGB Image_type.UCS x; /* convert sRGB colourspace to RGB colourspace */ RGB x = _colour_conv Image_type.sRGB Image_type.RGB x; /* convert sRGB colourspace to sRGB colourspace */ sRGB x = _colour_conv Image_type.sRGB Image_type.sRGB x; /* convert sRGB colourspace to LabQ colourspace */ LabQ x = _colour_conv Image_type.sRGB Image_type.LABQ x; /* convert sRGB colourspace to LabS colourspace */ LabS x = _colour_conv Image_type.sRGB Image_type.LABS x; } /* convert LabQ to various formats */ LabQ_to = class { /* convert LabQ colourspace to mono colourspace */ Mono x = _colour_conv Image_type.LABQ Image_type.B_W x; /* convert LabQ colourspace to XYZ colourspace */ XYZ x = _colour_conv Image_type.LABQ Image_type.XYZ x; /* convert LabQ colourspace to Yxy colourspace */ Yxy x = _colour_conv Image_type.LABQ Image_type.YXY x; /* convert LabQ colourspace to Lab colourspace */ Lab x = _colour_conv Image_type.LABQ Image_type.LAB x; /* convert LabQ colourspace to LCh colourspace */ LCh x = _colour_conv Image_type.LABQ Image_type.LCH x; /* convert LabQ colourspace to UCS colourspace */ UCS x = _colour_conv Image_type.LABQ Image_type.UCS x; /* convert LabQ colourspace to RGB colourspace */ RGB x = _colour_conv Image_type.LABQ Image_type.RGB x; /* convert LabQ colourspace to sRGB colourspace */ sRGB x = _colour_conv Image_type.LABQ Image_type.sRGB x; /* convert LabQ colourspace to LabQ colourspace */ LabQ x = _colour_conv Image_type.LABQ Image_type.LABQ x; /* convert LabQ colourspace to LabS colourspace */ LabS x = _colour_conv Image_type.LABQ Image_type.LABS x; } /* convert LabS to various formats */ LabS_to = class { /* convert LabS colourspace to mono colourspace */ Mono x = _colour_conv Image_type.LABS Image_type.B_W x; /* convert LabS colourspace to XYZ colourspace */ XYZ x = _colour_conv Image_type.LABS Image_type.XYZ x; /* convert LabS colourspace to Yxy colourspace */ Yxy x = _colour_conv Image_type.LABS Image_type.YXY x; /* convert LabS colourspace to Lab colourspace */ Lab x = _colour_conv Image_type.LABS Image_type.LAB x; /* convert LabS colourspace to LCh colourspace */ LCh x = _colour_conv Image_type.LABS Image_type.LCH x; /* convert LabS colourspace to UCS colourspace */ UCS x = _colour_conv Image_type.LABS Image_type.UCS x; /* convert LabS colourspace to RGB colourspace */ RGB x = _colour_conv Image_type.LABS Image_type.RGB x; /* convert LabS colourspace to sRGB colourspace */ sRGB x = _colour_conv Image_type.LABS Image_type.sRGB x; /* convert LabS colourspace to LabQ colourspace */ LabQ x = _colour_conv Image_type.LABS Image_type.LABQ x; /* convert LabS colourspace to LabS colourspace */ LabS x = _colour_conv Image_type.LABS Image_type.LABS x; } #separator /* recombine image bands with an editable matrix */ Colour_recombination in = map_unary widget in { widget image = class Image value { _check_args = [ [image, "image", check_Image] ] ++ super._check_args; _vislevel = 3; matrix = Matrix_rec (identity_matrix image.bands); value = recomb matrix image.value; } } /* colour temperature conversions */ Colour_temperature = class { /* convert XYZ from D65 to D50 ... use the Bradford approximation */ D65XYZ_to_D50XYZ in = map_unary (colour_unary im_D652D50) in; /* convert XYZ from D50 to D65 ... use the Bradford approximation */ D50XYZ_to_D65XYZ in = map_unary (colour_unary im_D502D65) in; } /* various colour difference metrics */ dE_ = class { /* Apply a converter to an object ... convert image or colour (since * we can guess the colour space we're converting from), don't convert * matrix or vector (since we can't tell ... assume it's in the right * space already). */ _apply_cvt cvt x = cvt x, is_instanceof "Image" x || is_instanceof "Colour" x || is_image x = x; _diff cvt in1 in2 = abs_vec (_apply_cvt cvt in1 - _apply_cvt cvt in2); /* Converter to LAB. */ _lab_cvt = colour_transform_to Image_type.LAB; /* Converter to UCS ... plain UCS is Ch form, so we go LAB again after * to make sure we get a rectangular coord system. */ _ucs_cvt = colour_transform Image_type.LCH Image_type.LAB @ colour_transform_to Image_type.UCS; /* calculate delta-E CIE76 for two objects */ CIE76 in1 in2 = map_binary (_diff _lab_cvt) in1 in2; /* calculate delta-E00 (CIEDE2000) for two objects */ CIE00 in1 in2 = map_binary (colour_binary "im_dE00_fromLab" im_dE00_fromLab) in1 in2; /* calculate delta-E CMC(1:1) for two objects */ UCS in1 in2 = map_binary (_diff _ucs_cvt) in1 in2; } #separator /* apply a coloured tint to a monochrome image */ Tint_mono_image in = map_unary apply_tint in { apply_tint in = class Image value { _check_args = [ [in, "in", check_Image] ] ++ super._check_args; _vislevel = 3; tint = Colour "Lab" [50, 0, 0]; value = image_set_type Image_type.LAB (fancytint inp l_tint a_tint b_tint) { // input image ... to L only inp_lab = colour_transform_to Image_type.LAB in.value; inp = inp_lab?0; // make sure tint is LAB (might be edited) lab_tint = colour_transform_to Image_type.LAB tint; // selected lab l_tint = lab_tint.value?0; a_tint = lab_tint.value?1; b_tint = lab_tint.value?2; // fancy tint function ... don't tint black and white fancytint im l a b = im ++ ima ++ imb { mod = (100 - im) / (100 - l), im > l = im / l; backgr = image_new in.width in.height 1 Image_format.FLOAT Image_coding.NOCODING Image_type.B_W 0 0 0; ima = mod * (backgr + a); imb = mod * (backgr + b); } } } } /* displace neutral axis in LAB colourspace */ Adjust_cast image = map_unary widget image { widget image = class Image value { _check_args = [ [image, "Image", check_Image] ] ++ super._check_args; _vislevel = 3; green_red = Slider (-20) 20 0; blue_yellow = Slider (-20) 20 0; value = (colour_transform_to (get_type image) image'').value { image' = colour_transform_to Image_type.LAB image; image'' = image' + Vector [0, green_red.value, blue_yellow.value]; } } } /* displace h, scale LC in LCh colourspace */ Adjust_hue_saturation_brightness image = map_unary widget image { widget image = class Image value { _check_args = [ [image, "Image", check_Image] ] ++ super._check_args; _vislevel = 3; hue = Slider 0 360 0; saturation = Slider 0.01 5 1; brightness = Slider 0.01 5 1; value = (colour_transform_to (get_type image) image'').value { image' = colour_transform_to Image_type.LCH image; image'' = image' * Vector [bv, sv, 1] + Vector [0, 0, hv]; bv = brightness.value; sv = saturation.value; hv = hue.value; } } } /* find pixels with a similar colour */ Similar_colour image = map_unary match image { match image = class Image value { _check_args = [ [image, "Image", check_Image] ] ++ super._check_args; _vislevel = 3; target_patch = Region image (20 - image.xoffset) (20 - image.yoffset) 10 10; target_colour = Colour_from_image target_patch; dE_threshold = Slider 0 100 10; value = (dE_.CIE76 image target_colour < dE_threshold).value; } } /* plot an ab scatter histogram */ Plot_ab_scatter image = map_unary widget image { widget image = class Image value { _check_args = [ [image, "Image", check_Image] ] ++ super._check_args; _vislevel = 3; bins = 8; value = bg * (((90 / mx) * hist) ++ blk) { lab = colour_transform_to Image_type.LAB image.value; ab = (unsigned char) ((lab?1 ++ lab?2) + 128); hist = hist_find_nD bins ab; mx = max hist; bg = lab_slice bins 1; blk = 1 + im_black bins bins 2; } } } nip2-8.7.0/share/nip2/compat/7.8/_generate.def0000644000175000017500000000360113224651032015477 00000000000000 /* make an image of size x by y whose pixels are their coordinates. */ make_xy x y = (unsigned int) (h ++ v) { h = (x - 1) * im_fgrey x y; v = (y - 1) * im_rot90 (im_fgrey y x); } /* make an image with the specified properties ... pixel is (eg.) * Vector [0, 0, 0], or 12 */ image_new w h b fmt coding type pixel xoff yoff = im'''' { im = im_black w h b + pixel; im' = clip2fmt fmt im; im'' = im_Lab2LabQ im', coding == Image_coding.LABPACK; = im'; im''' = image_set_type type im''; im'''' = image_set_origin xoff yoff im'''; } /* generate a slice of LAB space size x size pixels for L* == l */ lab_slice size l = image_set_origin (size / 2) (size / 2) (image_set_type Image_type.LAB im) { L = image_new size size 1 Image_format.FLOAT Image_coding.NOCODING Image_type.B_W l 0 0; A1 = im_fgrey size size; /* im_fgrey always makes 0-1, so these ranges can be wired in. */ A2 = A1 * 256 - 128; A4 = im_rot90 A2; im = L ++ A2 ++ A4; } /* Look at Image, try to make a Colour (failing that, a Vector) which is white * for that image type. */ image_white im = colour_transform_to type white_lab, bands == 3 && coding == Image_coding.NOCODING && colour_spaces.present 1 type = white_lab, coding == Image_coding.LABPACK = Vector (map (const (max_value.lookup 1 0 format)) [1 .. bands]) { bands = im.bands; type = im.type; format = im.format; coding = im.coding; colour_spaces = Image_type.colour_spaces; // white as LAB white_lab = Colour "Lab" [100, 0, 0]; // maximum value for this numeric type max_value = Table [ [255, Image_format.DPCOMPLEX], [255, Image_format.DOUBLE], [255, Image_format.COMPLEX], [255, Image_format.FLOAT], [2 ** 31 - 1, Image_format.INT], [2 ** 32 - 1, Image_format.UINT], [2 ** 15 - 1, Image_format.SHORT], [2 ** 16 - 1, Image_format.USHORT], [2 ** 7 - 1, Image_format.CHAR], [2 ** 8 - 1, Image_format.UCHAR] ]; } nip2-8.7.0/share/nip2/compat/7.8/Math.def0000644000175000017500000001325113224651032014441 00000000000000/* basic arithmetic for objects */ Arithmetic = class { /* add a and b */ Add a b = map_binary add a b; /* subtract b from a */ Subtract a b = map_binary subtract a b; /* multiply a by b */ Multiply a b = map_binary multiply a b; /* divide a by b */ Divide a b = map_binary divide a b; /* remainder after dividing a by b */ Remainder a b = map_binary remainder a b; sep1 = Separator; /* absolute value of x */ Absolute_value x = map_unary abs x; /* like Absolute_value, but treat pixels as vectors */ Absolute_value_vector x = map_unary abs_vec x; /* calculate unit vector for band elements */ Sign x = map_unary sign x; /* multiply by -1 */ Negate x = map_unary unary_minus x; } /* trigonometry operations (all in degrees) */ Trig = class { /* calculate sine x */ Sin x = map_unary sin x; /* calculate cosine x */ Cos x = map_unary cos x; /* calculate tangent x */ Tan x = map_unary tan x; sep1 = Separator; /* calculate arc sine x */ Asin x = map_unary asin x; /* calculate arc cosine x */ Acos x = map_unary acos x; /* calculate arc tangent x */ Atan x = map_unary atan x; sep2 = Separator; /* convert degrees to radians */ Rad x = map_unary rad x; /* convert radians to degrees */ Deg x = map_unary deg x; sep3 = Separator; /* is angle within t degrees of r, mod 360 */ Angle_range t r angle = clock (max - angle) < 2*r { max = clock (t + r); clock a = a + 360, a < 0; = a - 360, a >= 360; = a; } } /* logarithms and anti-logs */ Log = class { /* calculate e ** x */ Exponential x = map_unary (power e) x; /* log base e of x */ Log_natural x = map_unary log x; sep1 = Separator; /* log base 10 of x */ Log10 x = map_unary log10 x; /* calculate 10 ** x */ Exponential10 x = map_unary (power 10) x; sep2 = Separator; /* calculate x ** y */ Raise_to_power x y = map_binary power x y; } /* operations on complex numbers and images */ Complex = class { /* extract fields from complex */ Complex_extract = class { /* extract real part of complex */ Real in = map_unary re in; /* extract imaginary part of complex */ Imaginary in = map_unary im in; } /* join a and b to make a complex */ Complex_build a b = map_binary comma a b; sep1 = Separator; /* convert real and imag to amplitude and phase */ Polar a = map_unary polar a; /* convert (amplitude, phase) image to rectangular coordinates */ Rectangular x = map_unary rectangular x; sep2 = Separator; /* invert imaginary part */ Conjugate x = map_unary conj x; } /* bitwise boolean operations for integer objects */ Boolean = class { /* bitwise and of a and b */ And a b = map_binary bitwise_and a b; /* bitwise or of a and b */ Or a b = map_binary bitwise_or a b; /* bitwise exclusive or of a and b */ Eor a b = map_binary eor a b; /* invert a */ Not a = map_unary not a; sep1 = Separator; /* shift a right by b bits */ Right_shift a b = map_binary right_shift a b; /* shift a left by b bits */ Left_shift a b = map_binary left_shift a b; sep2 = Separator; /* b where a is non-zero, c elsewhere */ If_then_else a b c = map_trinary if_then_else a b c; /* or the bands of an image together */ Band_or im = foldr1 bitwise_or (bandsplit im); /* and the bands of an image together */ Band_and im = foldr1 bitwise_and (bandsplit im); } /* all comparison operations */ Relational = class { /* find points at which a is equal to b */ Equal a b = map_binary equal a b; /* find points at which a is not equal to b */ Not_equal a b = map_binary not_equal a b; /* find points at which a is greater than b */ More a b = map_binary more a b; /* find points at which a is less than b */ Less a b = map_binary less a b; /* find points at which a is greater than or equal to b */ More_equal a b = map_binary more_equal a b; /* find points at which a is less than or equal to b */ Less_equal a b = map_binary less_equal a b; } /* operations on lists */ List = class { /* take first element of list */ Head x = hd x; /* drop the first element of list */ Tail x = tl x; /* drop the last element of list */ Init x = init x; /* take the last element of list */ Last x = last x; sep1 = Separator; /* reverse order of elements in list */ Reverse x = reverse x; /* sort elements of list into ascending order */ Sort x = sort x; /* remove duplicates from list */ Make_set x = mkset equal x; /* exchange rows and columns in a list of lists */ Transpose_list x = transpose x; /* flatten a list of lists into a single list */ Concat l = concat l; sep2 = Separator; /* find the length of list */ Length x = len x; /* return element n from list (index from zero) */ Subscript n x = n ? x; /* take the first n elements of list x */ Take n x = take n x; /* drop the first n elements of list x */ Drop n x = drop n x; sep3 = Separator; /* join two lists end to end */ Join a b = a ++ b; /* put element a on the front of list x */ Cons a x = a : x; /* join two lists, pairwise */ Zip a b = zip2 a b; } /* various rounding operations */ Round = class { /* smallest integral value not less than x */ Ceil x = map_unary ceil x; /* largest integral value not greater than x */ Floor x = map_unary floor x; /* round to nearest integer */ Rint x = map_unary rint x; } /* forward and reverse fourier transforms */ Fourier = class { /* find fourier transform of image */ Forward a = map_unary (rotquad @ fwfft) a; /* find inverse fourier transform of image */ Reverse a = map_unary (invfft @ rotquad) a; /* rotate quadrants */ Rotate_quadrants a = map_unary rotquad a; } nip2-8.7.0/share/nip2/compat/7.8/_types.def0000644000175000017500000010045713224651032015060 00000000000000 /* Lots of little arg checks. Global for convenience. */ check_any = [(const true), "any"]; check_bool = [is_bool, "boolean"]; check_real = [is_real, "real"]; check_ureal = [is_ureal, "unsigned real"]; check_preal = [is_preal, "positive real"]; check_real_list = [is_real_list, "list of real"]; check_string = [is_string, "string"]; check_string_list = [is_string_list, "list of string"]; check_int = [is_int, "integer"]; check_uint = [is_uint, "unsigned integer"]; check_pint = [is_pint, "positive integer"]; check_matrix = [is_matrix, "rectangular array of real"]; check_matrix_display = [Matrix_display.is_display, "0, 1, 2 or 3"]; check_image = [is_image, "image"]; check_xy_list = [is_xy_list, "list of form [[1, 2], [3, 4], [5, 6], ...]"]; check_instance name = [is_instanceof name, name]; check_Image = check_instance "Image"; check_Matrix = [is_instanceof "Matrix_base", "Matrix"]; check_colour_space = [is_colour_space, "colour_space"]; check_rectangular = [is_rectangular, "rectangular [[*]]"]; check_Guide = [is_Guide, "HGuide or VGuide"]; check_Point = check_instance "Point"; check_Colour = check_instance "Colour"; /* Check a set of args. Grab _check_table. It's a list of two check * lists: the first checks each arg, and the second checks all args * together. * * - each line in argcheck is [arg, "arg name", [test_fn, "arg type"]] * same number of lines as there are args * * stuff like "arg 2 must be real" * * - each line in allcheck is [test, "description"] * any number of lines * * stuff like "to must be greater than from" * * generate an error dialog with a helpful message on failure. * * Have as a separate function to try to keep the size of _Object down a bit. */ check_args x = x, badargs == [] && badalls == [] = error message { argcheck = x._check_args; allcheck = x._check_all; // join two strings up with a separator string join_sep j a b = a ++ j ++ b; // indent string indent = " "; // test for a condition in a check line fails test_fail x = ! x?0; // set of failed argcheck indexes badargs = map (extract 1) (filter test_fail (zip2 (map testarg argcheck) [0..])) { testarg x = x?2?0 x?0; } // set of failed allcheck indexes badalls = map (extract 1) (filter test_fail (zip2 (map hd allcheck) [0..])); // the error message message = errors.badargs ++ "\"" ++ x.name ++ "\"\n" ++ argmsg ++ allmsg ++ "\nusage\n" ++ indent ++ usage ++ "\nwhere\n" ++ arg_types ++ extra; // make the failed argcheck messages ... eg. ""value" should be // real, you passed " etc. argmsg = concat (map fmt badargs) { fmt n = indent ++ "\"" ++ argcheck?n?1 ++ "\"" ++ " should be of type " ++ argcheck?n?2?1 ++ ", " ++ "you passed " ++ print argcheck?n?0 ++ "\n"; } // make the failed allcheck messages ... eg "condition failed: // x < y" ... don't make a message if any typechecks have // failed, as we'll probably error horribly allmsg = [], badargs != [] = concat (map fmt badalls) ++ "you passed\n" ++ concat (map fmt_arg argcheck) { fmt n = "condition failed: " ++ allcheck?n?1 ++ "\n"; fmt_arg l = indent ++ l?1 ++ " = " ++ print l?0 ++ "\n"; } // make usage note usage = x.name ++ " " ++ foldr (join_sep " ") [] (map (extract 1) argcheck); // make arg type notes arg_types = foldr (join_sep "\n") [] (map fmt argcheck) { fmt l = indent ++ l?1 ++ " is of type " ++ l?2?1; } // extra bit at the bottom, if we have any conditions extra = [], allcheck == [] = "and\n" ++ all_desc; // make a list of all the allcheck descriptions, with a few // spaces in front all_desc_list = map (join indent @ extract 1) allcheck; // join em up to make a set of condition notes all_desc = foldr (join_sep "\n") [] all_desc_list; } /* Operator overloading stuff. */ Operator_type = class { ARITHMETIC = 1; // eg. add RELATIONAL = 2; // eg. less COMPOUND = 3; // eg. max/mean/etc. COMPOUND_REWRAP = 4; // eg. transpose } Operator op_name fn type symmetric = class { } /* Form the converse of an Operator. */ oo_converse op = Operator (converse_name op.op_name) (converse op.fn) op.type op.symmetric { converse_name x = init x, last x == last "'" = x ++ "'"; } /* Given an operator name, look up the definition. */ oo_binary_lookup op_name = matches?0, matches != [] = error ("unknown binary operator: " ++ print op_name) { operator_table = [ Operator "add" add Operator_type.ARITHMETIC true, Operator "subtract" subtract Operator_type.ARITHMETIC false, Operator "remainder" remainder Operator_type.ARITHMETIC false, Operator "power" power Operator_type.ARITHMETIC false, Operator "subscript" subscript Operator_type.ARITHMETIC false, Operator "left_shift" left_shift Operator_type.ARITHMETIC false, Operator "right_shift" right_shift Operator_type.ARITHMETIC false, Operator "divide" divide Operator_type.ARITHMETIC false, Operator "join" join Operator_type.ARITHMETIC false, Operator "multiply" multiply Operator_type.ARITHMETIC true, Operator "logical_and" logical_and Operator_type.ARITHMETIC true, Operator "logical_or" logical_or Operator_type.ARITHMETIC true, Operator "bitwise_and" bitwise_and Operator_type.ARITHMETIC true, Operator "bitwise_or" bitwise_or Operator_type.ARITHMETIC true, Operator "eor" eor Operator_type.ARITHMETIC true, Operator "comma" comma Operator_type.ARITHMETIC false, Operator "if_then_else" if_then_else Operator_type.ARITHMETIC false, Operator "equal" equal Operator_type.RELATIONAL true, Operator "not_equal" not_equal Operator_type.RELATIONAL true, Operator "less" less Operator_type.RELATIONAL false, Operator "less_equal" less_equal Operator_type.RELATIONAL false ]; matches = filter test_name operator_table; test_name x = x.op_name == op_name; } /* Given an operator name, look up a function that implements that * operator. */ oo_unary_lookup op_name = matches?0, matches != [] = error ("unknown unary operator: " ++ print op_name) { operator_table = [ /* Operators. */ Operator "cast_signed_char" cast_signed_char Operator_type.ARITHMETIC false, Operator "cast_unsigned_char" cast_unsigned_char Operator_type.ARITHMETIC false, Operator "cast_signed_short" cast_signed_short Operator_type.ARITHMETIC false, Operator "cast_unsigned_short" cast_unsigned_short Operator_type.ARITHMETIC false, Operator "cast_signed_int" cast_signed_int Operator_type.ARITHMETIC false, Operator "cast_unsigned_int" cast_unsigned_int Operator_type.ARITHMETIC false, Operator "cast_float" cast_float Operator_type.ARITHMETIC false, Operator "cast_double" cast_double Operator_type.ARITHMETIC false, Operator "cast_complex" cast_complex Operator_type.ARITHMETIC false, Operator "cast_double_complex" cast_double_complex Operator_type.ARITHMETIC false, Operator "unary_minus" unary_minus Operator_type.ARITHMETIC false, Operator "negate" negate Operator_type.RELATIONAL false, Operator "complement" complement Operator_type.ARITHMETIC false, Operator "unary_plus" unary_plus Operator_type.ARITHMETIC false, /* Built in projections. */ Operator "re" re Operator_type.ARITHMETIC false, Operator "im" im Operator_type.ARITHMETIC false, Operator "hd" hd Operator_type.ARITHMETIC false, Operator "tl" tl Operator_type.ARITHMETIC false, /* Maths builtins. */ Operator "sin" sin Operator_type.ARITHMETIC false, Operator "cos" cos Operator_type.ARITHMETIC false, Operator "tan" tan Operator_type.ARITHMETIC false, Operator "asin" asin Operator_type.ARITHMETIC false, Operator "acos" acos Operator_type.ARITHMETIC false, Operator "atan" atan Operator_type.ARITHMETIC false, Operator "log" log Operator_type.ARITHMETIC false, Operator "log10" log10 Operator_type.ARITHMETIC false, Operator "exp" exp Operator_type.ARITHMETIC false, Operator "exp10" exp10 Operator_type.ARITHMETIC false, Operator "ceil" ceil Operator_type.ARITHMETIC false, Operator "floor" floor Operator_type.ARITHMETIC false ]; matches = filter test_name operator_table; test_name x = x.op_name == op_name; } /* Find the matching methods in a method table. */ oo_method_lookup table = map (extract 0) (filter (extract 1) table); /* A binary op: a is a class, b may be a class ... eg. "add" a b two obvious ways to find a method: - a.oo_binary_search "add" (+) b - b.oo_binary_search "add'" (converse (+)) a, is_class b if these fail but op is a symmetric operator (eg. a + b == b + a), we can also try reversing the args - a.oo_binary_search "add'" (converse (+)) b - b.oo_binary_search "add" (+) a, is_class b */ oo_binary_function op a b = matches1?0, matches1 != [] = matches2?0, is_class b && matches2 != [] = matches3?0, op.symmetric && matches3 != [] = matches4?0, op.symmetric && is_class b && matches4 != [] = error ("No method found for binary operator.\n" ++ "left = " ++ print a ++ "\n" ++ "operator = " ++ op.op_name ++ "\n" ++ "right = " ++ print b) { matches1 = oo_method_lookup (a.oo_binary_table op b); matches2 = oo_method_lookup (b.oo_binary_table (oo_converse op) a); matches3 = oo_method_lookup (a.oo_binary_table (oo_converse op) b); matches4 = oo_method_lookup (b.oo_binary_table op a); } /* A binary op: a is not a class, b is a class ... eg. "subtract" a b only one way to find a method: - b.oo_binary_search "subtract'" (converse (-)) a if this fails but op is a symmetric operator (eg. a + b == b + a), we can try reversing the args - b.oo_binary_search "add" (+) a, is_class b */ oo_binary'_function op a b = matches1?0, matches1 != [] = matches2?0, op.symmetric && matches2 != [] = error ("No method found for binary operator.\n" ++ "left = " ++ print a ++ "\n" ++ "operator = " ++ op.op_name ++ "\n" ++ "right = " ++ print b) { matches1 = oo_method_lookup (b.oo_binary_table (oo_converse op) a); matches2 = oo_method_lookup (b.oo_binary_table op a); } oo_unary_function op x = matches?0, matches != [] = error ("No method found for unary operator.\n" ++ "operator = " ++ op.op_name ++ "\n" ++ "argument = " ++ print x) { matches = oo_method_lookup (x.oo_unary_table op); } /* Base class for nip's built-in classes ... base check function, base * operator overload functions. */ _Object = class { check = check_args this; /* Default: no checks ... override in subclasses. */ _check_args = []; _check_all = []; /* Operator overloading stuff. */ oo_binary op x = oo_binary_function (oo_binary_lookup op) this x; oo_binary' op x = oo_binary'_function (oo_binary_lookup op) x this; oo_unary op = oo_unary_function (oo_unary_lookup op) this; /* Provide a fallback for class == thing ... just use pointer * equality. */ oo_binary_table op x = [ [ pointer_equal this x, op.op_name == "equal" || op.op_name == "equal'" ], [ not_pointer_equal this x, op.op_name == "not_equal" || op.op_name == "not_equal'" ] ]; oo_unary_table op = []; } /* Single real number ... eg slider. */ Real value = class _Object { _check_args = [ [value, "value", check_real] ] ++ super._check_args; // methods oo_binary_table op x = [ [ this.Real (op.fn this.value x.value), is_instanceof "Real" x && op.type == Operator_type.ARITHMETIC ], [ this.Real (op.fn this.value x), is_real x && op.type == Operator_type.ARITHMETIC ], [ op.fn this.value x.value, is_instanceof "Real" x && op.type == Operator_type.RELATIONAL ], [ op.fn this.value x, !is_class x ] ] ++ super.oo_binary_table op x; oo_unary_table op = [ [ this.Real (op.fn this.value), op.type == Operator_type.ARITHMETIC ], [ op.fn this.value, true ] ] ++ super.oo_unary_table op; } /* Single bool ... eg Toggle. */ Bool value = class _Object { _check_args = [ [value, "value", check_bool] ] ++ super._check_args; // methods oo_binary_table op x = [ [ if value then x?0 else x?1, op.op_name == "if_then_else" ], [ this.Bool (op.fn this.value x.value), is_instanceof "Bool" x ], [ this.Bool (op.fn this.value x), is_bool x ] ] ++ super.oo_binary_table op x; oo_unary_table op = [ [ this.Bool (op.fn this.value), op.type == Operator_type.ARITHMETIC || op.type == Operator_type.RELATIONAL ] ] ++ super.oo_unary_table op; } /* An editable string. */ String caption value = class _Object { _check_args = [ [caption, "caption", check_string], [value, "value", check_string] ] ++ super._check_args; } /* An editable real number. */ Number caption value = class scope.Real value { _check_args = [ [caption, "caption", check_string] ] ++ super._check_args; Real value = Number caption value; } /* An editable filename. */ Pathname caption value = class _Object { _check_args = [ [caption, "caption", check_string], [value, "value", check_string] ] ++ super._check_args; } // the old name Filename = Pathname "Pick a file"; /* Vector type ... just a finite list of real ... handy for wrapping an * argument to eg. im_lintra_vec. Make it behave like a single pixel image. */ Vector value = class _Object { _check_args = [ [value, "value", check_real_list] ] ++ super._check_args; bands = len value; // methods oo_binary_table op x = [ // Vector ++ Vector means bandwise join [ this.Vector (op.fn this.value x.value), is_instanceof "Vector" x && (op.op_name == "join" || op.op_name == "join'") ], // extra check for lengths equal [ this.Vector (map_binary op.fn this.value x.value), is_instanceof "Vector" x && len value == len x.value && op.type == Operator_type.ARITHMETIC ], [ this.Vector (map_binary op.fn this.value x.value), is_instanceof "Real" x && op.type == Operator_type.ARITHMETIC ], [ this.Vector (map_binary op.fn this.value x), is_real x && op.type == Operator_type.ARITHMETIC ], // need extra length check [ this.Vector (map bool_to_real (map_binary op.fn this.value x.value)), is_instanceof "Vector" x && len value == len x.value && op.type == Operator_type.RELATIONAL ], [ this.Vector (map bool_to_real (map_binary op.fn this.value x.value)), is_instanceof "Real" x && op.type == Operator_type.RELATIONAL ], [ this.Vector (map bool_to_real (map_binary op.fn this.value x)), is_real x && op.type == Operator_type.RELATIONAL ], [ this.Vector (op.fn this.value x.value), is_instanceof "Vector" x && len value == len x.value && op.type == Operator_type.COMPOUND_REWRAP ], [ x.Image (vec op'.op_name x.value value), is_instanceof "Image" x ], [ vec op'.op_name x value, is_image x ], [ op.fn this.value x, is_real x ] ] ++ super.oo_binary_table op x { op' = oo_converse op; }; oo_unary_table op = [ [ this.Vector (map_unary op.fn this.value), op.type == Operator_type.ARITHMETIC ], [ this.Vector (map bool_to_real (map_unary op.fn this.value)), op.type == Operator_type.RELATIONAL ], [ this.Vector (op.fn this.value), op.type == Operator_type.COMPOUND_REWRAP ], [ op.fn this.value, true ] ] ++ super.oo_unary_table op; // turn an ip bool (or a number, for Vector) into VIPSs 255/0 bool_to_real x = 255, is_bool x && x = 255, is_number x && x != 0 = 0; } /* A rectangular array of real. */ Matrix_base value = class _Object { _check_args = [ [value, "value", check_matrix] ] ++ super._check_args; // calculate these from value width = len value?0; height = len value; // methods oo_binary_table op x = [ // mat multiply is special [ this.Matrix_base mul.value, is_instanceof "Matrix_base" x && op.op_name == "multiply" ], [ this.Matrix_base mul'.value, is_instanceof "Matrix_base" x && op.op_name == "multiply'" ], // mat divide is also special [ this.Matrix_base div.value, is_instanceof "Matrix_base" x && op.op_name == "divide" ], [ this.Matrix_base div'.value, is_instanceof "Matrix_base" x && op.op_name == "divide'" ], // power -1 means invert [ this.Matrix_base inv.value, is_real x && x == -1 && op.op_name == "power" ], [ this.Matrix_base sq.value, is_real x && x == 2 && op.op_name == "power" ], [ error "matrix **-1 and **2 only", op.op_name == "power" || op.op_name == "power'" ], // matrix op vector ... treat a vector as a 1 row matrix [ this.Matrix_base (map (map_binary op'.fn x.value) this.value), is_instanceof "Vector" x && op.type == Operator_type.ARITHMETIC ], [ this.Matrix_base (map_binary op.fn this.value x.value), (is_instanceof "Matrix_base" x || is_instanceof "Real" x) && op.type == Operator_type.ARITHMETIC ], [ this.Matrix_base (map_binary op.fn this.value x), is_real x && op.type == Operator_type.ARITHMETIC ], // compound ... don't do iteration [ this.Matrix_base (op.fn this.value x.value), (is_instanceof "Matrix_base" x || is_instanceof "Real" x || is_instanceof "Vector" x) && op.type == Operator_type.COMPOUND_REWRAP ] ] ++ super.oo_binary_table op x { mul = im_matmul this x; mul' = im_matmul x this; div = im_matmul this (im_matinv x); div' = im_matmul x (im_matinv this); inv = im_matinv this; sq = im_matmul this this; op' = oo_converse op; } oo_unary_table op = [ [ this.Matrix_base (map_unary op.fn this.value), op.type == Operator_type.ARITHMETIC ], [ this.Matrix_base (op.fn this.value), op.type == Operator_type.COMPOUND_REWRAP ], [ op.fn this.value, true ] ] ++ super.oo_unary_table op; } /* How to display a matrix: text, sliders, toggles, or text plus scale/offset. */ Matrix_display = class { text = 0; slider = 1; toggle = 2; text_scale_offset = 3; is_display = member [text, slider, toggle, text_scale_offset]; } /* A matrix as VIPS sees them ... add scale, offset and filename. For nip, add * a display type as well to control how the widget renders. */ Matrix_vips value scale offset filename display = class scope.Matrix_base value { _check_args = [ [scale, "scale", check_real], [offset, "offset", check_real], [filename, "filename", check_string], [display, "display", check_matrix_display] ] ++ super._check_args; Matrix_base value = Matrix_vips value scale offset filename display; } /* A plain 'ol matrix which can be passed to VIPS. */ Matrix value = class Matrix_vips value 1 0 "" Matrix_display.text {}; /* Specialised constructors ... for convolutions, recombinations and * morphologies. */ Matrix_con scale offset value = class Matrix_vips value scale offset "" Matrix_display.text_scale_offset {}; Matrix_rec value = class Matrix_vips value 1 0 "" Matrix_display.slider {}; Matrix_mor value = class Matrix_vips value 1 0 "" Matrix_display.toggle {}; Matrix_file filename = im_read_dmask (expand filename); /* A CIE colour ... a triple, plus a format (eg XYZ, Lab etc) */ Colour colour_space value = class scope.Vector value { _check_args = [ [colour_space, "colour_space", check_colour_space] ] ++ super._check_args; _check_all = [ [len value == 3, "len value == 3"] ] ++ super._check_all; // make a colour-ish thing from an image // back to Colour if we have another 3 band image // to a vector if bands > 1 // to a number otherwise itoc im = this.Colour nip_type (to_matrix im).value?0, bands == 3 = scope.Vector (map mean (bandsplit im)), bands > 1 = mean im { type = im_header_int "Type" im; bands = im_header_int "Bands" im; nip_type = Image_type.colour_spaces.lookup 1 0 type; } // methods oo_binary_table op x = [ [ itoc (op.fn ((float) (to_image this).value) ((float) (to_image x).value)), // here REWRAP means go via image op.type == Operator_type.COMPOUND_REWRAP ] ] ++ super.oo_binary_table op x; oo_unary_table op = [ [ itoc (op.fn ((float) (to_image this).value)), op.type == Operator_type.COMPOUND_REWRAP ] ] ++ super.oo_unary_table op; Vector value = Colour colour_space value; } /* Base slider type. */ Scale caption from to value = class scope.Real value { _check_args = [ [from, "from", check_real], [to, "to", check_real] ] ++ super._check_args; _check_all = [ [from < to, "from < to"] ] ++ super._check_all; // methods oo_binary_table op x = [ [ this.Scale caption (op.fn this.from x.from) (op.fn this.to x.to) (op.fn this.value x.value), is_instanceof "Scale" x && op.type == Operator_type.ARITHMETIC ], [ this.Scale caption (op.fn this.from x) (op.fn this.to x) (op.fn this.value x), is_real x && op.type == Operator_type.ARITHMETIC ] ] ++ super.oo_binary_table op x; Real value = Scale caption from to value; } Slider = Scale ""; /* Base toggle type. */ Toggle caption value = class scope.Bool value { _check_args = [ [caption, "caption", check_string], [value, "value", check_bool] ] ++ super._check_args; Bool value = Toggle caption value; } /* Base option type. */ Option caption labels value = class Real value { _check_args = [ [caption, "caption", check_string], [labels, "labels", check_string_list], [value, "value", check_uint] ] ++ super._check_args; } /* A lookup table. */ Table value = class _Object { _check_args = [ [value, "value", check_rectangular] ] ++ super._check_args; /* present col x: is there an x in column col */ present col x = member (map (extract col) value) x; /* Look on column from, return matching item in column to. */ lookup from to x = value?n?to, n >= 0 = error ("item " ++ print x ++ " not in table") { n = index (equal x) (map (extract from) value); } } /* A rectangle. width and height can be -ve. */ Rect left top width height = class _Object { _check_args = [ [left, "left", check_real], [top, "top", check_real], [width, "width", check_real], [height, "height", check_real] ] ++ super._check_args; // derived right = left + width; bottom = top + height; // empty? ie. contains no pixels is_empty = width == 0 || height == 0; // normalised version, ie. make width/height +ve and flip the origin nleft = left + width, width < 0 = left; ntop = top + height, height < 0 = top; nwidth = abs width; nheight = abs height; nright = nleft + nwidth; nbottom = ntop + nheight; // contains a point? includes_point x y = nleft <= x && x <= nright && ntop <= y && y <= nbottom; // contains a rect? just test top left and bottom right points includes_rect r = includes_point r.nleft r.ntop && includes_point r.nright r.nbottom; // bounding box of two rects // if either is empty, can just return the other union r = r, is_empty = this, r.is_empty = Rect left' top' width' height' { left' = min_pair nleft r.nleft; top' = min_pair ntop r.ntop; width' = max_pair nright r.nright - left'; height' = max_pair nbottom r.nbottom - top'; } // intersection of two rects ... empty rect if no intersection intersect r = Rect left' top' width'' height'' { left' = max_pair nleft r.nleft; top' = max_pair ntop r.ntop; width' = min_pair nright r.nright - left'; height' = min_pair nbottom r.nbottom - top'; width'' = width', width > 0 = 0; height'' = height', height > 0 = 0; } // equal to another rect equal r = left == r.left && top == r.top && width == r.width && height == r.height; // expand/collapse by n pixels margin_adjust n = Rect (left - n) (top - n) (width + 2 * n) (height + 2 * n); // operator overloading // just define equal and not equal oo_binary_table op x = [ [ equal x, is_instanceof "Rect" x && (op.op_name == "equal" || op.op_name == "equal'") ], [ !equal x, is_instanceof "Rect" x && (op.op_name == "not_equal" || op.op_name == "not_equal'") ] ] ++ super.oo_binary_table op x; } /* Values for Compression field in image. */ Image_compression = class { NO_COMPRESSION = 0; TCSF_COMPRESSION = 1; JPEG_COMPRESSION = 2; LABPACK_COMPRESSED = 3; RGB_COMPRESSED = 4; LUM_COMPRESSED = 5; } /* Values for Coding field in image. */ Image_coding = class { NOCODING = 0; COLQUANT = 1; LABPACK = 2; } /* Values for BandFmt field in image. */ Image_format = class { DPCOMPLEX = 9; DOUBLE = 8; COMPLEX = 7; FLOAT = 6; INT = 5; UINT = 4; SHORT = 3; USHORT = 2; CHAR = 1; UCHAR = 0; NOTSET = -1; maxval fmt = [ 255, // UCHAR 127, // CHAR 65535, // USHORT 32767, // SHORT 4294967295, // UINT 2147483647 // INT ] ? fmt, fmt >= 0 && fmt <= INT = error errors.bandFmt; } /* Type field. */ Image_type = class { FOURIER = 24; YXY = 23; sRGB = 22; LABS = 21; LCH = 19; UCS = 18; RGB = 17; LABQ = 16; CMYK = 15; CMC = 14; LAB = 13; XYZ = 12; LUT = 11; HISTOGRAM = 10; POWER_SPECTRUM = 9; BLUE_ONLY = 8; GREEN_ONLY = 7; RED_ONLY = 6; YUV = 5; IR = 4; XRAY = 3; LUMINACE = 2; B_W = 1; MULTIBAND = 0; /* Table to get names <-> numbers. */ type_names = Table [ [ "FOURIER", FOURIER ], [ "YXY", YXY ], [ "sRGB", sRGB ], [ "LABS", LABS ], [ "LCH", LCH ], [ "UCS", UCS ], [ "RGB", RGB ], [ "LABQ", LABQ ], [ "CMYK", CMYK ], [ "CMC", CMC ], [ "LAB", LAB ], [ "XYZ", XYZ ], [ "LUT", LUT ], [ "HISTOGRAM", HISTOGRAM ], [ "POWER_SPECTRUM", POWER_SPECTRUM ], [ "BLUE_ONLY", BLUE_ONLY ], [ "GREEN_ONLY", GREEN_ONLY ], [ "RED_ONLY", RED_ONLY ], [ "YUV", YUV ], [ "IR", IR ], [ "XRAY", XRAY ], [ "LUMINACE", LUMINACE ], [ "B_W", B_W ], [ "MULTIBAND", MULTIBAND ] ]; /* Table relating nip's colour space names and VIPS's Type numbers. */ colour_spaces = Table [ [ "XYZ", Image_type.XYZ ], [ "Yxy", Image_type.YXY ], [ "Lab", Image_type.LAB ], [ "LCh", Image_type.LCH ], [ "UCS", Image_type.UCS ], [ "RGB", Image_type.RGB ], [ "sRGB", Image_type.sRGB ] ]; } /* Base image type. Simple layer over vips_image. */ Image value = class _Object { _check_args = [ [value, "value", check_image] ] ++ super._check_args; // fields from VIPS header width = im_header_int "Xsize" value; height = im_header_int "Ysize" value; bands = im_header_int "Bands" value; format = im_header_int "BandFmt" value; coding = im_header_int "Coding" value; type = im_header_int "Type" value; xres = im_header_double "Xres" value; yres = im_header_double "Yres" value; xoffset = im_header_int "Xoffset" value; yoffset = im_header_int "Yoffset" value; filename = im_header_string "filename" value; // convenience ... the area our pixels occupy as a rect rect = Rect (-xoffset) (-yoffset) width height; // extract an area, addressed in nip cordinates extract_area left top width height = im_extract_area value (left + xoffset) (top + yoffset) width height; // operator overloading // (op Image Vector) done in Vector class oo_binary_table op x = [ [ this.Image (op.fn this.value x.value), is_instanceof "Image" x || is_instanceof "Real" x ], [ this.Image result_image, op.op_name == "if_then_else" ], [ this.Image (vec op.op_name value x.value), is_instanceof "Vector" x ], [ this.Image (op.fn this.value x), is_number x || is_image x ] ] ++ super.oo_binary_table op x { to_image x = x, is_image x = x.value, is_instanceof "Image" x = black + x { black = im_black width height target_bands; } // get a member from the first of a list of objects to have it get_property has get objects = hd members, members != [] = error "unable to get property" { members = map get (filter has objects); } // get things about our output from inputs in this order objects = [then_part, else_part, this]; then_part = x?0; else_part = x?1; // properties of our output image target_bands = get_property (has_member "bands") (get_member "bands") objects; target_format = get_property (has_member "format") (get_member "format") objects; target_type = get_property has_type get_type objects; then_image = to_image then_part; else_image = to_image else_part; then_image' = clip2fmt target_format then_image; else_image' = clip2fmt target_format else_image; result_image = image_set_type target_type (if value then then_image' else else_image'); } // FIXME ... yuk ... don't use operator hints, just always rewrap if // we have an image result // forced on us by things like abs: // abs Vector -> real // abs Image -> Image // does not fit well with COMPOUND/whatever scheme oo_unary_table op = [ [ this.Image result, is_image result ], [ result, true ] ] ++ super.oo_unary_table op { result = op.fn this.value; } } /* Construct an image from a file. */ Image_file str = class Image value { _check_args = [ [str, "str", check_string] ] ++ super._check_args; file = Filename str; value = vips_image file.value; } Region image left top width height = class Image value { _check_args = [ [image, "Image", check_Image], [left, "left", check_real], [top, "top", check_real], [width, "width", check_preal], [height, "height", check_preal] ] ++ super._check_args; // a rect for our coordinates // region.rect gets the rect for the extracted image region_rect = Rect left top width height; // we need to always succeed ... value is our enclosing image if we're // out of bounds value = image.extract_area left top width height, image.rect.includes_rect region_rect = image.value; } Area image left top width height = class scope.Region image left top width height { Region image left top width height = Area image left top width height; } Arrow image left top width height = class Rect left top width height { _check_args = [ [image, "Image", check_Image], [left, "left", check_real], [top, "top", check_real], [width, "width", check_real], [height, "height", check_real] ] ++ super._check_args; _check_all = [ [image.rect.includes_rect this, "image.rect.includes_rect this"] ] ++ super._check_all; // our rect, translated to image cods (ie. offset by origin) image_rect = Rect (left + image.xoffset) (top + image.yoffset) width height; // methods oo_binary_table op x = [ [ this.Arrow this.image left' top' width' height', is_instanceof "Arrow" x && op.type == Operator_type.ARITHMETIC ] ] ++ super.oo_binary_table op x { left' = op.fn this.left x.left; top' = op.fn this.top x.top; width' = op.fn this.width x.width; height' = op.fn this.height x.height; } oo_unary_search op = [ [ this.Arrow this.image left' top' width' height', op.type == Operator_type.ARITHMETIC ] ] ++ super.oo_unary_table op { left' = op.fn this.left; top' = op.fn this.top; width' = op.fn this.width; height' = op.fn this.height; } } HGuide image top = class scope.Arrow image image.rect.left top image.width 0 { Arrow image left top width height = HGuide image top; } VGuide image left = class scope.Arrow image left image.rect.top 0 image.height { Arrow image left top width height = VGuide image left; } Point image left top = class scope.Arrow image left top 0 0 { Arrow image left top width height = Point image left top; } // Mark is the name nip2 expects for Point Mark = Point; // convenience functions: make relative on an image ... subtract origin // offset, ie. make in pixel coordinates Region_relative image u v w h = Region image (image.width * u - image.xoffset) (image.height * v - image.yoffset) (image.width * w) (image.height * h); Area_relative image u v w h = Area image (image.width * u - image.xoffset) (image.height * v - image.yoffset) (image.width * w) (image.height * h); Arrow_relative image u v w h = Arrow image (image.width * u - image.xoffset) (image.height * v - image.yoffset) (image.width * w) (image.height * h); VGuide_relative image v = VGuide image (image.height * v - image.yoffset); HGuide_relative image u = HGuide image (image.width * u - image.xoffset); Point_relative image u v = Point image (image.width * u - image.xoffset) (image.height * v - image.yoffset); Interpolate = class { nearest_neighbour = 0; bilinear = 1; bicubic = 2; /* Table to map interpol numbers to descriptive strings */ names = Table [ [ "Nearest neighbour", nearest_neighbour ], [ "Bilinear", bilinear ], [ "Bicubic", bicubic ] ]; } Separator = class {} // renamed in 7.9 estpar = im_estpar; resample = im_transform_search; nip2-8.7.0/share/nip2/compat/7.8/Makefile.am0000644000175000017500000000062213224651032015122 00000000000000startdir = $(pkgdatadir)/compat/7.8 start_DATA = \ Math.def \ Image.def \ Mosaic.def \ Colour.def \ Resize.def \ Capture.def \ Format.def \ Filter.def \ Morphology.def \ New.def \ Histogram.def \ Print.def \ Rotate.def \ Statistics.def \ X_ray.def \ _convert.def \ _errors.def \ _generate.def \ _list.def \ _predicate.def \ _stdenv.def \ _types.def EXTRA_DIST = $(start_DATA) nip2-8.7.0/share/nip2/compat/7.28/0000755000175000017500000000000013350464160013234 500000000000000nip2-8.7.0/share/nip2/compat/7.28/_stdenv.def0000644000175000017500000016766513224651032015317 00000000000000/* Various operators as functions. */ logical_and a b = a && b; logical_or a b = a || b; bitwise_and a b = a & b; bitwise_or a b = a | b; eor a b = a ^ b; left_shift a b = a << b; right_shift a b = a >> b; not a = !a; less a b = a < b; more a b = a > b; less_equal a b = a <= b; more_equal a b = a >= b; equal a b = a == b; not_equal a b = a != b; pointer_equal a b = a === b; not_pointer_equal a b = a !== b; add a b = a + b; subtract a b = a - b; multiply a b = a * b; divide a b = a / b; idivide a b = (int) ((int) a / (int) b); power a b = a ** b; square x = x * x; remainder a b = a % b; cons a b = a : b; dot a b = a . ( b ); join a b = a ++ b; // 'difference' is defined in _list subscript a b = a ? b; generate s n f = [s, n .. f]; comma r i = (r, i); compose f g = f @ g; // our only trinary operator is actually a binary operator if_then_else a x = if a then x?0 else x?1; cast_unsigned_char x = (unsigned char) x; cast_signed_char x = (signed char) x; cast_unsigned_short x = (unsigned short) x; cast_signed_short x = (signed short) x; cast_unsigned_int x = (unsigned int) x; cast_signed_int x = (signed int) x; cast_float x = (float) x; cast_double x = (double) x; cast_complex x = (complex) x; cast_double_complex x = (double complex) x; unary_minus x = -x; negate x = !x; complement x = ~x; unary_plus x = +x; // the function we call for "a -> v" expressions mksvpair s v = [s, v], is_string s = error "not str on lhs of ->"; // the vector ops ... im is an image, vec is a real_list vec op_name im vec = im_lintra_vec ones im vec, op_name == "add" || op_name == "add'" = im_lintra_vec ones (-1 * im) vec, op_name == "subtract'" = im_lintra_vec ones im inv, op_name == "subtract" = im_lintra_vec vec im zeros, op_name == "multiply" || op_name == "multiply'" = im_lintra_vec vec (1 / im) zeros, op_name == "divide'" = im_lintra_vec recip im zeros, op_name == "divide" = im_expntra_vec im vec, op_name == "power'" = im_powtra_vec im vec, op_name == "power" = im_remainderconst_vec im vec, op_name == "remainder" = im_andimage_vec im vec, op_name == "bitwise_and" || op_name == "bitwise_and'" = im_orimage_vec im vec, op_name == "bitwise_or" || op_name == "bitwise_or'" = im_eorimage_vec im vec, op_name == "eor" || op_name == "eor'" = im_equal_vec im vec, op_name == "equal" || op_name == "equal'" = im_notequal_vec im vec, op_name == "not_equal" || op_name == "not_equal'" = im_less_vec im vec, op_name == "less" = im_moreeq_vec im vec, op_name == "less'" = im_lesseq_vec im vec, op_name == "less_equal" = im_more_vec im vec, op_name == "less_equal'" = error ("unimplemented vector operation: " ++ op_name) { zeros = replicate (len vec) 0; ones = replicate (len vec) 1; recip = map (divide 1) vec; inv = map (multiply (-1)) vec; } // make a name value pair mknvpair n v = [n, v], is_string n = error "not [char] on LHS of =>"; /* Macbeth chart patch names. */ macbeth_names = [ "Dark skin", "Light skin", "Blue sky", "Foliage", "Blue flower", "Bluish green", "Orange", "Purplish blue", "Moderate red", "Purple", "Yellow green", "Orange yellow", "Blue", "Green", "Red", "Yellow", "Magenta", "Cyan", "White (density 0.05)", "Neutral 8 (density 0.23)", "Neutral 6.5 (density 0.44)", "Neutral 5 (density 0.70)", "Neutral 3.5 (density 1.05)", "Black (density 1.50)" ]; bandsplit x = oo_unary_function bandsplit_op x, is_class x = map (subscript x) [0 .. bands - 1], is_image x = error (_ "bad arguments to " ++ "bandsplit") { bands = get_header "Bands" x; bandsplit_op = Operator "bandsplit" (map Image @ bandsplit) Operator_type.COMPOUND false; } bandjoin l = wrapper joined, has_wrapper = joined, is_listof has_image l = error (_ "bad arguments to " ++ "bandjoin") { has_wrapper = has_member_list (has_member "Image") l; wrapper = get_member_list (has_member "Image") (get_member "Image") l; joined = im_gbandjoin (map get_image l); } sum x = oo_unary_function sum_op x, is_class x = im_avg x * (get_width x) * (get_height x) * (get_bands x), is_image x = sum_list x, is_list x = error (_ "bad arguments (" ++ print x ++ ") to " ++ "sum") { sum_op = Operator "sum" sum Operator_type.COMPOUND false; // add elements in a nested-list thing sum_list l = foldr acc 0 l { acc x total = total + sum x, is_list x = total + x; } } product x = oo_unary_function product_op x, is_class x = product_list x, is_list x // (product image) doesn't make much sense :( = error (_ "bad arguments (" ++ print x ++ ") to " ++ "product") { product_op = Operator "product" product Operator_type.COMPOUND false; product_list l = foldr prod 1 l { prod x total = total * product x, is_list x = total * x; } } mean x = oo_unary_function mean_op x, is_class x = im_avg x, is_image x = mean_list x, is_list x = error (_ "bad arguments (" ++ print x ++ ") to " ++ "mean") { mean_op = Operator "mean" mean Operator_type.COMPOUND false; mean_list l = sum l / size l; // number of elements in some sort of nested-list thing size l = foldr acc 0 l { acc x total = total + size x, is_list x = total + 1; } } meang x = (appl (power e) @ mean @ appl log) x { appl fn x = map fn x, is_list x = fn x; } // zero-excluding mean meanze x = oo_unary_function meanze_op x, is_class x = meanze_image_hist x, is_image x && (fmt == Image_format.UCHAR || fmt == Image_format.USHORT) = meanze_image x, is_image x = meanze_list x, is_list x = error (_ "bad arguments (" ++ print x ++ ") to " ++ "meanze") { fmt = get_format x; meanze_op = Operator "meanze" meanze Operator_type.COMPOUND false; meanze_list l = sum l / size l; // number of non-zero elements in some sort of nested-list thing size l = foldr acc 0 l { acc x total = total + size x, is_list x = total + 1, x != 0; = total; } // add elements in a nested-list thing sum l = foldr acc 0 l { acc x total = total + sum x, is_list x = total + x; } // image mean, for any image type meanze_image i = sum / N { w = get_width i; h = get_height i; b = get_bands i; st = stats i; sum = st.value?0?2; // find non-zero pixels (not zero in all bands) zp = im_notequal_vec i (replicate b 0); // number of non-zero pixels N = b * (mean zp * w * h) / 255; } // image mean for 8 and 16-bit unsigned images // we can use a histogram, yay, and save a pass through the image meanze_image_hist i = sum / N { // histogram, knock out zeros hist = hist_find i; black = image_new 1 1 (get_bands hist) (get_format hist) (get_coding hist) (get_type hist) 0 0 0; histze = insert 0 0 black hist; // matching identity iden = im_identity_ushort (get_bands hist) (get_width hist), (get_width hist) > 256 = im_identity (get_bands hist); // number of non-zero pixels N = mean histze * 256; // sum of pixels sum = mean (hist * iden) * 256; } } deviation x = oo_unary_function deviation_op x, is_class x = im_deviate x, is_image x = deviation_list x, is_real_list x || is_matrix x = error (_ "bad arguments to " ++ "deviation") { deviation_op = Operator "deviation" deviation Operator_type.COMPOUND false; deviation_list l = (abs (s2 - (s * s / n)) / (n - 1)) ** 0.5 { [n, s, s2] = sum_sum2_list l; } // return n, sum, sum of squares for a list of reals sum_sum2_list x = foldr accumulate [0, 0, 0] x { accumulate x sofar = [n + 1, x + s, x * x + s2], is_real x = [n + n', s + s', s2 + s2'], is_list x = error "sum_sum2_list: not real or [real]" { [n, s, s2] = sofar; [n', s', s2'] = sum_sum2_list x; } } } deviationze x = oo_unary_function deviationze_op x, is_class x = deviationze_image x, is_image x = deviationze_list x, is_real_list x || is_matrix x = error (_ "bad arguments to " ++ "deviationze") { deviationze_op = Operator "deviationze" deviationze Operator_type.COMPOUND false; deviationze_list l = (abs (s2 - (s * s / n)) / (n - 1)) ** 0.5 { [n, s, s2] = sum_sum2_list l; } // return number of non-zero elements, sum, sum of squares for a list of // reals sum_sum2_list x = foldr accumulate [0, 0, 0] x { accumulate x sofar = sofar, is_real x && x == 0 = [n + 1, x + s, x * x + s2], is_real x = [n + n', s + s', s2 + s2'], is_list x = error "sum_sum2_list: not real or [real]" { [n, s, s2] = sofar; [n', s', s2'] = sum_sum2_list x; } } deviationze_image i = ((sum2 - sum * sum / N) / (N - 1)) ** 0.5 { w = get_width i; h = get_height i; b = get_bands i; st = stats i; sum = st.value?0?2; sum2 = st.value?0?3; // find non-zero pixels (not zero in all bands) zp = im_notequal_vec i (replicate b 0); // number of non-zero pixels N = b * (mean zp * w * h) / 255; } } // find the centre of gravity of a histogram gravity x = oo_unary_function gravity_op x, is_class x = im_hist_gravity x, is_hist x = gravity_list x, is_list x = error (_ "bad arguments to " ++ "gravity") { gravity_op = Operator "gravity" gravity Operator_type.COMPOUND false; // centre of gravity of a histogram... use the histogram to weight an // identity, then sum, then find the mean element im_hist_gravity h = m { // make horizontal h' = rot270 h, get_width h == 1 = h, get_height h == 1 = error "width or height not 1"; // number of elements w = get_width h'; // matching identity i = im_identity_ushort 1 w, w <= 2 ** 16 - 1 = make_xy w 1 ? 0; // weight identity and sum s = mean (i * h') * w; // sum of original histogram s' = mean h * w; // weighted mean m = s / s'; } gravity_list l = m { w = len l; // matching identity i = [0, 1 .. w - 1]; // weight identity and sum s = sum (map2 multiply i l); // sum of original histogram s' = sum l; // weighted mean m = s / s'; } } project x = oo_unary_function project_op x, is_class x = im_project x, is_image x = error (_ "bad arguments to " ++ "project") { project_op = Operator "project" project Operator_type.COMPOUND false; } abs x = oo_unary_function abs_op x, is_class x = im_abs x, is_image x = abs_cmplx x, is_complex x = abs_num x, is_real x = abs_list x, is_real_list x = abs_list (map abs_list x), is_matrix x = error (_ "bad arguments to " ++ "abs") { abs_op = Operator "abs" abs Operator_type.COMPOUND false; abs_list l = (sum (map square l)) ** 0.5; abs_num n = n, n >= 0 = -n; abs_cmplx c = ((re c)**2 + (im c)**2) ** 0.5; } copy x = oo_unary_function copy_op x, is_class x = im_copy x, is_image x = x { copy_op = Operator "copy" copy Operator_type.COMPOUND_REWRAP false; } // like abs, but treat pixels as vectors ... ie. always get a 1-band image // back ... also treat matricies as lists of vectors // handy for dE from object difference abs_vec x = oo_unary_function abs_vec_op x, is_class x = abs_vec_image x, is_image x = abs_vec_cmplx x, is_complex x = abs_vec_num x, is_real x = abs_vec_list x, is_real_list x = mean (map abs_vec_list x), is_matrix x = error (_ "bad arguments to " ++ "abs_vec") { abs_vec_op = Operator "abs_vec" abs_vec Operator_type.COMPOUND false; abs_vec_list l = (sum (map square l)) ** 0.5; abs_vec_num n = n, n >= 0 = -n; abs_vec_cmplx c = ((re c)**2 + (im c)**2) ** 0.5; abs_vec_image im = (sum (map square (bandsplit im))) ** 0.5; } transpose x = oo_unary_function transpose_op x, is_class x = transpose_image x, is_image x = transpose_list x, is_listof is_list x = error (_ "bad arguments to " ++ "transpose") { transpose_op = Operator "transpose" transpose Operator_type.COMPOUND_REWRAP false; transpose_list l = [], l' == [] = (map hd l') : (transpose_list (map tl l')) { l' = takewhile (not_equal []) l; } transpose_image = im_flipver @ im_rot270; } rot45 x = oo_unary_function rot45_op x, is_class x = error "rot45 image: not implemented", is_image x = error (_ "bad arguments to " ++ "rot45") { rot45_op = Operator "rot45" rot45_object Operator_type.COMPOUND_REWRAP false; rot45_object x = rot45_matrix x, is_odd_square_matrix x = error "rot45 image: not implemented", is_image x = error (_ "bad arguments to " ++ "rot45"); // slow, but what the heck rot45_matrix l = (im_rotate_dmask45 (Matrix l)).value; } // apply an image function to a [[real]] ... matrix is converted to a 1 band // image for processing apply_matrix_as_image fn m = (get_value @ im_vips2mask @ fn @ im_mask2vips @ Matrix) m; // a general image/matrix operation where the mat version is most easily done // by converting mat->image->mat apply_matim_operation name fn x = oo_unary_function class_op x, is_class x = fn x, is_image x = apply_matrix_as_image fn x, is_matrix x = error (_ "bad arguments to " ++ name) { class_op = Operator name (apply_matim_operation name fn) Operator_type.COMPOUND_REWRAP false; } rot90 = apply_matim_operation "rot90" im_rot90; rot180 = apply_matim_operation "rot180" im_rot180; rot270 = apply_matim_operation "rot270" im_rot270; rotquad = apply_matim_operation "rotquad" im_rotquad; fliplr = apply_matim_operation "fliplr" im_fliphor; fliptb = apply_matim_operation "flipud" im_flipver; image_set_type type x = oo_unary_function image_set_type_op x, is_class x = im_copy_set x (to_real type) (get_header "Xres" x) (get_header "Yres" x) (get_header "Xoffset" x) (get_header "Yoffset" x), is_image x = error (_ "bad arguments to " ++ "image_set_type:" ++ print type ++ " " ++ print x) { image_set_type_op = Operator "image_set_type" (image_set_type type) Operator_type.COMPOUND_REWRAP false; } image_set_origin xoff yoff x = oo_unary_function image_set_origin_op x, is_class x = im_copy_set x (get_header "Type" x) (get_header "Xres" x) (get_header "Yres" x) (to_real xoff) (to_real yoff), is_image x = error (_ "bad arguments to " ++ "image_set_origin") { image_set_origin_op = Operator "image_set_origin" (image_set_origin xoff yoff) Operator_type.COMPOUND_REWRAP false; } cache tile_width tile_height max_tiles x = oo_unary_function cache_op x, is_class x = im_cache x (to_real tile_width) (to_real tile_height) (to_real max_tiles), is_image x = error (_ "bad arguments to " ++ "cache") { cache_op = Operator "cache" (cache tile_width tile_height max_tiles) Operator_type.COMPOUND_REWRAP false; } tile across down x = oo_unary_function tile_op x, is_class x = im_replicate x (to_real across) (to_real down), is_image x = error (_ "bad arguments to " ++ "tile") { tile_op = Operator "tile" (tile across down) Operator_type.COMPOUND_REWRAP false; } grid tile_height across down x = oo_unary_function grid_op x, is_class x = im_grid x (to_real tile_height) (to_real across) (to_real down), is_image x = error (_ "bad arguments to " ++ "grid") { grid_op = Operator "grid" (grid tile_height across down) Operator_type.COMPOUND_REWRAP false; } max_pair a b = a, a > b = b; min_pair a b = a, a < b = b; range min value max = min_pair max (max_pair min value); max x = oo_unary_function max_op x, is_class x = im_max x, is_image x = max_list x, is_list x = x, is_number x = error (_ "bad arguments to " ++ "max") { max_op = Operator "max" max Operator_type.COMPOUND false; max_list x = error "max []", x == [] = foldr1 max_pair x, is_real_list x = foldr1 max_pair (map max_list x), is_list x = max x; } min x = oo_unary_function min_op x, is_class x = im_min x, is_image x = min_list x, is_list x = x, is_number x = error (_ "bad arguments to " ++ "min") { min_op = Operator "min" min Operator_type.COMPOUND false; min_list x = error "min []", x == [] = foldr1 min_pair x, is_real_list x = foldr1 min_pair (map min_list x), is_list x = min x; } maxpos x = oo_unary_function maxpos_op x, is_class x = im_maxpos x, is_image x = maxpos_matrix x, is_matrix x = maxpos_list x, is_list x = error (_ "bad arguments to " ++ "maxpos") { maxpos_op = Operator "maxpos" maxpos Operator_type.COMPOUND false; maxpos_matrix m = (-1, -1), m == [[]] = (indexes?row, row) { max_value = max (Matrix m); indexes = map (index (equal max_value)) m; row = index (not_equal (-1)) indexes; } maxpos_list l = -1, l == [] = index (equal (max l)) l; } minpos x = oo_unary_function minpos_op x, is_class x = im_minpos x, is_image x = minpos_matrix x, is_matrix x = minpos_list x, is_list x = error (_ "bad arguments to " ++ "minpos") { minpos_op = Operator "minpos" minpos Operator_type.COMPOUND false; minpos_matrix m = (-1, -1), m == [[]] = (indexes?row, row) { min_value = min (Matrix m); indexes = map (index (equal min_value)) m; row = index (not_equal (-1)) indexes; } minpos_list l = -1, l == [] = index (equal (min l)) l; } stats x = oo_unary_function stats_op x, is_class x = im_stats x, is_image x = im_stats (to_image x).value, is_matrix x = error (_ "bad arguments to " ++ "stats") { stats_op = Operator "stats" stats Operator_type.COMPOUND false; } e = 2.7182818284590452354; pi = 3.14159265358979323846; rad d = 2 * pi * (d / 360); deg r = 360 * r / (2 * pi); sign x = oo_unary_function sign_op x, is_class x = im_sign x, is_image x = sign_cmplx x, is_complex x = sign_num x, is_real x = error (_ "bad arguments to " ++ "sign") { sign_op = Operator "sign" sign Operator_type.COMPOUND_REWRAP false; sign_num n = 0, n == 0 = 1, n > 0 = -1; sign_cmplx c = (0, 0), mod == 0 = (re c / mod, im c / mod) { mod = abs c; } } rint x = oo_unary_function rint_op x, is_class x = im_rint x, is_image x = rint_value x, is_number x = error (_ "bad arguments to " ++ "rint") { rint_op = Operator "rint" rint Operator_type.ARITHMETIC false; rint_value x = (int) (x + 0.5), x > 0 = (int) (x - 0.5); } scale x = oo_unary_function scale_op x, is_class x = (unsigned char) x, is_number x = im_scale x, is_image x = scale_list x, is_real_list x || is_matrix x = error (_ "bad arguments to " ++ "scale") { scale_op = Operator "scale" scale Operator_type.COMPOUND_REWRAP false; scale_list l = apply_scale s o l { mn = find_limit min_pair l; mx = find_limit max_pair l; s = 255.0 / (mx - mn); o = -(mn * s); } find_limit fn l = find_limit fn (map (find_limit fn) l), is_listof is_list l = foldr1 fn l; apply_scale s o x = x * s + o, is_number x = map (apply_scale s o) x; } scaleps x = oo_unary_function scale_op x, is_class x = im_scaleps x, is_image x = error (_ "bad arguments to " ++ "scale") { scale_op = Operator "scaleps" scaleps Operator_type.COMPOUND_REWRAP false; } fwfft x = oo_unary_function fwfft_op x, is_class x = im_fwfft x, is_image x = error (_ "bad arguments to " ++ "fwfft") { fwfft_op = Operator "fwfft" fwfft Operator_type.COMPOUND_REWRAP false; } invfft x = oo_unary_function invfft_op x, is_class x = im_invfftr x, is_image x = error (_ "bad arguments to " ++ "invfft") { invfft_op = Operator "invfft" invfft Operator_type.COMPOUND_REWRAP false; } falsecolour x = oo_unary_function falsecolour_op x, is_class x = image_set_type Image_type.sRGB (im_falsecolour x), is_image x = error (_ "bad arguments to " ++ "falsecolour") { falsecolour_op = Operator "falsecolour" falsecolour Operator_type.COMPOUND_REWRAP false; } polar x = oo_unary_function polar_op x, is_class x = im_c2amph x, is_image x = polar_cmplx x, is_complex x = error (_ "bad arguments to " ++ "polar") { polar_op = Operator "polar" polar Operator_type.COMPOUND false; polar_cmplx r = (l, a) { a = 270, x == 0 && y < 0 = 90, x == 0 && y >= 0 = 360 + atan (y / x), x > 0 && y < 0 = atan (y / x), x > 0 && y >= 0 = 180 + atan (y / x); l = (x ** 2 + y ** 2) ** 0.5; x = re r; y = im r; } } rectangular x = oo_unary_function rectangular_op x, is_class x = im_c2rect x, is_image x = rectangular_cmplx x, is_complex x = error (_ "bad arguments to " ++ "rectangular") { rectangular_op = Operator "rectangular" rectangular Operator_type.COMPOUND false; rectangular_cmplx p = (x, y) { l = re p; a = im p; x = l * cos a; y = l * sin a; } } // we can't use colour_unary: that likes 3 band only recomb matrix x = oo_unary_function recomb_op x, is_class x = im_recomb x matrix, is_image x = recomb_real_list x, is_real_list x = map recomb_real_list x, is_matrix x = error (_ "bad arguments to " ++ "recomb") { // COMPOUND_REWRAP ... signal to the colour class to go to image and // back recomb_op = Operator "recomb" (recomb matrix) Operator_type.COMPOUND_REWRAP false; // process [1,2,3 ..] as an image recomb_real_list l = (to_matrix im').value?0 { im = (float) (to_image (Vector l)).value; im' = recomb matrix im; } } extract_area x y w h obj = oo_unary_function extract_area_op obj, is_class obj = im_extract_area obj x' y' w' h', is_image obj = map (extract_range x' w') (extract_range y' h' obj), is_matrix obj = error (_ "bad arguments to " ++ "extract_area") { x' = to_real x; y' = to_real y; w' = to_real w; h' = to_real h; extract_area_op = Operator "extract_area" (extract_area x y w h) Operator_type.COMPOUND_REWRAP false; extract_range from length list = (take length @ drop from) list; } extract_band b obj = subscript obj b; extract_row y obj = oo_unary_function extract_row_op obj, is_class obj = extract_area 0 y' (get_width obj) 1 obj, is_image obj = [obj?y'], is_matrix obj = error (_ "bad arguments to " ++ "extract_row") { y' = to_real y; extract_row_op = Operator "extract_row" (extract_row y) Operator_type.COMPOUND_REWRAP false; } extract_column x obj = oo_unary_function extract_column_op obj, is_class obj = extract_area x' 0 1 height obj, is_image obj = map (\row [row?x']) obj, is_matrix obj = error (_ "bad arguments to " ++ "extract_column") { x' = to_real x; height = get_header "Ysize" obj; extract_column_op = Operator "extract_column" (extract_column x) Operator_type.COMPOUND_REWRAP false; } blend cond in1 in2 = oo_binary_function blend_op cond [in1,in2], is_class cond = im_blend (get_image cond) (get_image in1) (get_image in2), has_image cond && has_image in1 && has_image in2 = error (_ "bad arguments to " ++ "blend" ++ ": " ++ join_sep ", " (map print [cond, in1, in2])) { blend_op = Operator "blend" blend_obj Operator_type.COMPOUND_REWRAP false; blend_obj cond x = blend_result_image { [then_part, else_part] = x; // get things about our output from inputs in this order objects = [then_part, else_part, cond]; // properties of our output image target_width = get_member_list has_width get_width objects; target_height = get_member_list has_height get_height objects; target_bands = get_member_list has_bands get_bands objects; target_format = get_member_list has_format get_format objects; target_type = get_member_list has_type get_type objects; to_image x = to_image_size target_width target_height target_bands target_format x; [then_image, else_image] = map to_image [then_part, else_part]; blend_result_image = image_set_type target_type (im_blend cond then_image else_image); } } // do big first: we want to keep big's class, if possible // eg. big is a Plot, small is a 1x1 Image insert x y small big = oo_binary'_function insert_op small big, is_class big = oo_binary_function insert_op small big, is_class small = im_insert big small (to_real x) (to_real y), is_image small && is_image big = error (_ "bad arguments to " ++ "insert") { insert_op = Operator "insert" (insert x y) Operator_type.COMPOUND_REWRAP false; } insert_noexpand x y small big = oo_binary_function insert_noexpand_op small big, is_class small = oo_binary'_function insert_noexpand_op small big, is_class big = im_insert_noexpand big small (to_real x) (to_real y), is_image small && is_image big = error (_ "bad arguments to " ++ "insert_noexpand") { insert_noexpand_op = Operator "insert_noexpand" (insert_noexpand x y) Operator_type.COMPOUND_REWRAP false; } measure x y w h u v image = oo_unary_function measure_op image, is_class image = im_measure image (to_real x) (to_real y) (to_real w) (to_real h) (to_real u) (to_real v), is_image image = error (_ "bad arguments to " ++ "measure") { measure_op = Operator "measure" (measure x y w h u v) Operator_type.COMPOUND_REWRAP false; } extract_bands b n obj = oo_unary_function extract_bands_op obj, is_class obj = im_extract_bands obj (to_real b) (to_real n), is_image obj = error (_ "bad arguments to " ++ "extract_bands") { extract_bands_op = Operator "extract_bands" (extract_bands b n) Operator_type.COMPOUND_REWRAP false; } invert x = oo_unary_function invert_op x, is_class x = im_invert x, is_image x = 255 - x, is_real x = error (_ "bad arguments to " ++ "invert") { invert_op = Operator "invert" invert Operator_type.COMPOUND false; } transform ipol wrap params image = oo_unary_function transform_op image, is_class image = im_transform image (to_matrix params) (to_real ipol) (to_real wrap), is_image image = error (_ "bad arguments to " ++ "transform") { transform_op = Operator "transform" (transform ipol wrap params) Operator_type.COMPOUND_REWRAP false; } transform_search max_error max_iterations order ipol wrap sample reference = oo_binary_function transform_search_op sample reference, is_class sample = oo_binary'_function transform_search_op sample reference, is_class reference = im_transform_search sample reference (to_real max_error) (to_real max_iterations) (to_real order) (to_real ipol) (to_real wrap), is_image sample && is_image reference = error (_ "bad arguments to " ++ "transform_search") { transform_search_op = Operator "transform_search" (transform_search max_error max_iterations order ipol wrap) Operator_type.COMPOUND false; } rotate interp angle image = oo_binary_function rotate_op angle image, is_class angle = oo_binary'_function rotate_op angle image, is_class image = im_affinei_all image interp.value a (-b) b a 0 0, is_real angle && is_image image = error (_ "bad arguments to " ++ "rotate") { rotate_op = Operator "rotate" (rotate interp) Operator_type.COMPOUND_REWRAP false; a = cos angle; b = sin angle; } matrix_binary fn a b = itom (fn (mtoi a) (mtoi b)) { mtoi x = im_mask2vips (Matrix x); itom x = (im_vips2mask x).value; } join_lr a b = oo_binary_function join_lr_op a b, is_class a = oo_binary'_function join_lr_op a b, is_class b = join_im a b, is_image a && is_image b = matrix_binary join_im a b, is_matrix a && is_matrix b = error (_ "bad arguments to " ++ "join_lr") { join_lr_op = Operator "join_lr" join_lr Operator_type.COMPOUND_REWRAP false; join_im a b = insert (get_width a) 0 b a; } join_tb a b = oo_binary_function join_tb_op a b, is_class a = oo_binary'_function join_tb_op a b, is_class b = join_im a b, is_image a && is_image b = matrix_binary join_im a b, is_matrix a && is_matrix b = error (_ "bad arguments to " ++ "join_tb") { join_tb_op = Operator "join_tb" join_tb Operator_type.COMPOUND_REWRAP false; join_im a b = insert 0 (get_height a) b a; } conj x = oo_unary_function conj_op x, is_class x = (re x, -im x), is_complex x || (is_image x && format == Image_format.COMPLEX) || (is_image x && format == Image_format.DPCOMPLEX) // assume it's some sort of real = x { format = get_header "BandFmt" x; conj_op = Operator "conj" conj Operator_type.COMPOUND false; } clip2fmt format image = oo_unary_function clip2fmt_op image, is_class image = im_clip2fmt image (to_real format), is_image image = error (_ "bad arguments to " ++ "clip2fmt") { clip2fmt_op = Operator "clip2fmt" (clip2fmt format) Operator_type.COMPOUND_REWRAP false; } embed type x y w h im = oo_unary_function embed_op im, is_class im = im_embed im (to_real type) (to_real x) (to_real y) (to_real w) (to_real h), is_image im = error (_ "bad arguments to " ++ "embed") { embed_op = Operator "embed" (embed type x y w h) Operator_type.COMPOUND_REWRAP false; } /* Morph a mask with a [[real]] matrix ... turn m2 into an image, morph it * with m1, turn it back to a matrix again. */ _morph_2_masks fn m1 m2 = m'' { // The [[real]] can contain 128 values ... squeeze them out! image = im_mask2vips (Matrix m2) == 255; m2_width = get_width image; m2_height = get_height image; // need to embed m2 in an image large enough for us to be able to // position m1 all around the edges, with a 1 pixel overlap image' = embed 0 (m1.width / 2) (m1.height / 2) (m2_width + (m1.width - 1)) (m2_height + (m1.height - 1)) image; // morph! image'' = fn m1 image'; // back to mask m' = im_vips2mask ((double) image''); // Turn 0 in output to 128 (don't care). m'' = map (map fn) m'.value { fn a = 128, a == 0; = a; } } dilate mask image = oo_unary_function dilate_op image, is_class image = im_dilate image (to_matrix mask), is_image image = error (_ "bad arguments to " ++ "dilate") { dilate_op = Operator "dilate" dilate_object Operator_type.COMPOUND_REWRAP false; dilate_object x = _morph_2_masks dilate mask x, is_matrix x = dilate mask x; } erode mask image = oo_unary_function erode_op image, is_class image = im_erode image (to_matrix mask), is_image image = error (_ "bad arguments to " ++ "erode") { erode_op = Operator "erode" erode_object Operator_type.COMPOUND_REWRAP false; erode_object x = _morph_2_masks erode mask x, is_matrix x = erode mask x; } conv mask image = oo_unary_function conv_op image, is_class image = im_conv image (to_matrix mask), is_image image = error (_ "bad arguments to " ++ "conv" ++ ": " ++ "conv (" ++ print mask ++ ") (" ++ print image ++ ")") { conv_op = Operator "conv" (conv mask) Operator_type.COMPOUND_REWRAP false; } convf mask image = oo_unary_function convf_op image, is_class image = im_conv_f image (to_matrix mask), is_image image = error (_ "bad arguments to " ++ "convf" ++ ": " ++ "convf (" ++ print mask ++ ") (" ++ print image ++ ")") { convf_op = Operator "convf" (convf mask) Operator_type.COMPOUND_REWRAP false; } convsep mask image = oo_unary_function convsep_op image, is_class image = im_convsep image (to_matrix mask), is_image image = error (_ "bad arguments to " ++ "convsep") { convsep_op = Operator "convsep" (convsep mask) Operator_type.COMPOUND_REWRAP false; } aconvsep layers mask image = oo_unary_function aconvsep_op image, is_class image = im_aconvsep image (to_matrix mask) (to_real layers), is_image image = error (_ "bad arguments to " ++ "aconvsep") { aconvsep_op = Operator "aconvsep" (aconvsep layers mask) Operator_type.COMPOUND_REWRAP false; } convsepf mask image = oo_unary_function convsepf_op image, is_class image = im_convsep_f image (to_matrix mask), is_image image = error (_ "bad arguments to " ++ "convsepf") { convsepf_op = Operator "convsepf" (convsepf mask) Operator_type.COMPOUND_REWRAP false; } rank w h n image = oo_unary_function rank_op image, is_class image = im_rank image (to_real w) (to_real h) (to_real n), is_image image = error (_ "bad arguments to " ++ "rank") { rank_op = Operator "rank" (rank w h n) Operator_type.COMPOUND_REWRAP false; } rank_image n x = rlist x.value, is_Group x = rlist x, is_list x = error (_ "bad arguments to " ++ "rank_image") { rlist l = wrapper ranked, has_wrapper = ranked { has_wrapper = has_member_list (has_member "Image") l; wrapper = get_member_list (has_member "Image") (get_member "Image") l; ranked = im_rank_image (map get_image l) (to_real n); } } greyc iterations amplitude sharpness anisotropy alpha sigma dl da gauss_prec interpolation fast_approx x = oo_unary_function greyc_op x, is_class x = greyc_im x, is_image x = error (_ "bad argument" ++ " (" ++ print x ++ ") to " ++ "greyc") { greyc_op = Operator "greyc" (greyc iterations amplitude sharpness anisotropy alpha sigma dl da gauss_prec interpolation fast_approx) Operator_type.COMPOUND_REWRAP false; greyc_im x = im_greyc x iterations amplitude sharpness anisotropy alpha sigma dl da gauss_prec interpolation fast_approx; } greyc_mask iterations amplitude sharpness anisotropy alpha sigma dl da gauss_prec interpolation fast_approx mask x = oo_binary_function greyc_mask_op mask x, is_class mask = oo_binary'_function greyc_mask_op mask x, is_class x = greyc_im mask x, is_image mask && is_image x = error (_ "bad arguments" ++ " (" ++ print mask ++ ", " ++ print x ++ ") " ++ "to " ++ "greyc") { greyc_mask_op = Operator "greyc_mask" (greyc_mask iterations amplitude sharpness anisotropy alpha sigma dl da gauss_prec interpolation fast_approx) Operator_type.COMPOUND_REWRAP false; greyc_im mask x = im_greyc_mask x mask iterations amplitude sharpness anisotropy alpha sigma dl da gauss_prec interpolation fast_approx; } // find the correlation surface for a small image within a big one correlate small big = oo_binary_function correlate_op small big, is_class small = oo_binary'_function correlate_op small big, is_class big = im_spcor big small, is_image small && is_image big = error (_ "bad arguments to " ++ "correlate") { correlate_op = Operator "correlate" correlate Operator_type.COMPOUND_REWRAP false; } // just sum-of-squares-of-differences correlate_fast small big = oo_binary_function correlate_fast_op small big, is_class small = oo_binary'_function correlate_fast_op small big, is_class big = im_fastcor big small, is_image small && is_image big = error (_ "bad arguments to " ++ "correlate_fast") { correlate_fast_op = Operator "correlate_fast" correlate_fast Operator_type.COMPOUND_REWRAP false; } // set Type, wrap as Plot_hist if it's a class hist_tag x = oo_unary_function hist_tag_op x, is_class x = image_set_type Image_type.HISTOGRAM x, is_image x = error (_ "bad arguments to " ++ "hist_tag") { hist_tag_op = Operator "hist_tag" (Plot_histogram @ hist_tag) Operator_type.COMPOUND false; } hist_find x = oo_unary_function hist_find_op x, is_class x = im_histgr x (-1), is_image x = error (_ "bad arguments to " ++ "hist_find") { hist_find_op = Operator "hist_find" (Plot_histogram @ hist_find) Operator_type.COMPOUND false; } hist_find_nD bins image = oo_unary_function hist_find_nD_op image, is_class image = im_histnD image (to_real bins), is_image image = error (_ "bad arguments to " ++ "hist_find_nD") { hist_find_nD_op = Operator "hist_find_nD" (hist_find_nD bins) Operator_type.COMPOUND_REWRAP false; } hist_find_indexed index value = oo_binary_function hist_find_indexed_op index value, is_class index = oo_binary'_function hist_find_indexed_op index value, is_class value = im_hist_indexed index value, is_image index && is_image value = error (_ "bad arguments to " ++ "hist_find_indexed") { hist_find_indexed_op = Operator "hist_find_indexed" (compose (compose Plot_histogram) hist_find_indexed) Operator_type.COMPOUND false; } hist_map hist image = oo_binary_function hist_map_op hist image, is_class hist = oo_binary'_function hist_map_op hist image, is_class image = im_maplut image hist, is_image hist && is_image image = error (_ "bad arguments to " ++ "hist_map") { // can't use rewrap, as we want to always wrap as image hist_map_op = Operator "hist_map" (compose (compose Image) hist_map) Operator_type.COMPOUND false; } hist_cum hist = oo_unary_function hist_cum_op hist, is_class hist = im_histcum hist, is_image hist = error (_ "bad arguments to " ++ "hist_cum") { hist_cum_op = Operator "hist_cum" hist_cum Operator_type.COMPOUND_REWRAP false; } hist_diff hist = oo_unary_function hist_diff_op hist, is_class hist = im_histdiff hist, is_image hist = error (_ "bad arguments to " ++ "hist_diff") { hist_diff_op = Operator "hist_diff" hist_diff Operator_type.COMPOUND_REWRAP false; im_histdiff h = (conv (Matrix [[-1, 1]]) @ clip2fmt (fmt (get_format h))) h { // up the format so it can represent the whole range of // possible values from this mask fmt x = Image_format.SHORT, x == Image_format.UCHAR || x == Image_format.CHAR = Image_format.INT, x == Image_format.USHORT || x == Image_format.SHORT || x == Image_format.UINT = x; } } hist_norm hist = oo_unary_function hist_norm_op hist, is_class hist = im_histnorm hist, is_image hist = error (_ "bad arguments to " ++ "hist_norm") { hist_norm_op = Operator "hist_norm" hist_norm Operator_type.COMPOUND_REWRAP false; } hist_match in ref = oo_binary_function hist_match_op in ref, is_class in = oo_binary'_function hist_match_op in ref, is_class ref = im_histspec in ref, is_image in && is_image ref = error (_ "bad arguments to " ++ "hist_match") { hist_match_op = Operator "hist_match" hist_match Operator_type.COMPOUND_REWRAP false; } hist_equalize x = hist_map ((hist_norm @ hist_cum @ hist_find) x) x; hist_equalize_local w h image = oo_unary_function hist_equalize_local_op image, is_class image = lhisteq image, is_image image = error (_ "bad arguments to " ++ "hist_equalize_local") { hist_equalize_local_op = Operator "hist_equalize_local" (hist_equalize_local w h) Operator_type.COMPOUND_REWRAP false; // loop over bands, if necessary lhisteq im = im_lhisteq im (to_real w) (to_real h), get_bands im == 1 = (foldl1 join @ map lhisteq @ bandsplit) im; } // find the threshold below which are percent of the image (percent in [0,1]) // eg. hist_thresh 0.1 x == 12, then x < 12 will light up 10% of the pixels hist_thresh percent image = x { // our own normaliser ... we don't want to norm channels separately // norm to [0,1] my_hist_norm h = h / max h; // normalised cumulative hist // we sum the channels before we normalise, because we want to treat them // all the same h = (my_hist_norm @ sum @ bandsplit @ hist_cum @ hist_find) image.value; // threshold that, then use im_profile to search for the x position in the // histogram x = mean (im_profile (h > percent) 1); } /* Sometimes useful, despite plotting now being built in, for making * diagnostic images. */ hist_plot hist = oo_unary_function hist_plot_op hist, is_class hist = im_histplot hist, is_image hist = error (_ "bad arguments to " ++ "hist_plot") { hist_plot_op = Operator "hist_plot" (Image @ hist_plot) Operator_type.COMPOUND false; } zerox d x = oo_unary_function zerox_op x, is_class x = im_zerox x (to_real d), is_image x = error (_ "bad arguments to " ++ "zerox") { zerox_op = Operator "zerox" (zerox d) Operator_type.COMPOUND_REWRAP false; } resize interp xfac yfac image = oo_unary_function resize_op image, is_class image = resize_im image, is_image image = error (_ "bad arguments to " ++ "resize") { resize_op = Operator "resize" resize_im Operator_type.COMPOUND_REWRAP false; xfac' = to_real xfac; yfac' = to_real yfac; rxfac' = 1 / xfac'; ryfac' = 1 / yfac'; // is this interpolation nearest-neighbour? is_nn x = x.type == Interpolate_type.NEAREST_NEIGHBOUR; resize_im im // upscale by integer factor, nearest neighbour = im_zoom im xfac' yfac', is_int xfac' && is_int yfac' && xfac' >= 1 && yfac' >= 1 && is_nn interp // downscale by integer factor, nearest neighbour = im_subsample im rxfac' ryfac', is_int rxfac' && is_int ryfac' && rxfac' >= 1 && ryfac' >= 1 && is_nn interp // upscale by any factor, nearest neighbour // upscale by integer part, then affine to exact size = scale xg?1 yg?1 (im_zoom im xg?0 yg?0), xfac' >= 1 && yfac' >= 1 && is_nn interp // downscale by any factor, nearest neighbour // downscale by integer part, then affine to exact size = scale xs?1 ys?1 (im_subsample im xs?0 ys?0), rxfac' >= 1 && ryfac' >= 1 && is_nn interp // upscale by any factor with affine = scale xfac' yfac' im, xfac' >= 1 && yfac' >= 1 // downscale by any factor, bilinear // block shrink by integer factor, then resample to // exact with affine = scale xs?1 ys?1 (im_shrink im xs?0 ys?0), rxfac' >= 1 && ryfac' >= 1 = error ("resize: unimplemented argument combination:\n" ++ " xfac = " ++ print xfac' ++ "\n" ++ " yfac = " ++ print yfac' ++ "\n" ++ " interp = " ++ print interp ++ " (" ++ Interpolate_type.descriptions?interp.type ++ ")") { // convert a float scale to integer plus fraction // eg. scale by 2.5 becomes [2, 1.25] (x * 2.5 == x * 2 * 1.25) break f = [floor f, f / floor f]; // same, but for downsizing ... turn a float scale which is less than // 1 into an int shrink and a float scale // complicated: the int shrink may round the size down (eg. imagine // subsampling a 11 pixel wide image by 3, we'd get a 3 pixel wide // image, not a 3.666 pixel wide image), so pass in the size of image // we are operating on and adjust for any rounding // so ... x is (eg.) 467, f is (eg. 128/467, about 0.274) rbreak x f = [int_shrink, float_resample] { // the size of image we are aiming for after the combined int and // float resample x' = x * f; // int part int_shrink = floor (1 / f); // size after int shrink x'' = floor (x / int_shrink); // therefore what we need for the float part float_resample = x' / x''; } width = get_width im; height = get_height im; // grow and shrink factors xg = break xfac'; yg = break yfac'; xs = rbreak width xfac'; ys = rbreak height yfac'; // resize scale xfac yfac im = im_affinei_all im interp.value xfac 0 0 yfac 0 0; } } sharpen radius x1 y2 y3 m1 m2 in = oo_unary_function sharpen_op in, is_class in = im_sharpen in (to_real radius) (to_real x1) (to_real y2) (to_real y3) (to_real m1) (to_real m2), is_image in = error (_ "bad arguments to " ++ "sharpen") { sharpen_op = Operator "sharpen" (sharpen radius x1 y2 y3 m1 m2) Operator_type.COMPOUND_REWRAP false; } tone_analyse s m h sa ma ha in = oo_unary_function tone_analyse_op in, is_class in = im_tone_analyse in (to_real s) (to_real m) (to_real h) (to_real sa) (to_real ma) (to_real ha), is_image in = error (_ "bad arguments to " ++ "tone_analyse") { tone_analyse_op = Operator "tone_analyse" (Plot_histogram @ tone_analyse s m h sa ma ha) Operator_type.COMPOUND false; } tone_map hist image = oo_binary_function tone_map_op hist image, is_class hist = oo_binary'_function tone_map_op hist image, is_class image = im_tone_map image hist, is_image hist && is_image image = error (_ "bad arguments to " ++ "tone_map") { tone_map_op = Operator "tone_map" tone_map Operator_type.COMPOUND_REWRAP false; } tone_build fmt b w s m h sa ma ha = (Plot_histogram @ clip2fmt fmt) (im_tone_build_range mx mx (to_real b) (to_real w) (to_real s) (to_real m) (to_real h) (to_real sa) (to_real ma) (to_real ha)) { mx = Image_format.maxval fmt; } icc_export depth profile intent in = oo_unary_function icc_export_op in, is_class in = im_icc_export_depth in (to_real depth) (expand profile) (to_real intent), is_image in = error (_ "bad arguments to " ++ "icc_export") { icc_export_op = Operator "icc_export" (icc_export depth profile intent) Operator_type.COMPOUND_REWRAP false; } icc_import profile intent in = oo_unary_function icc_import_op in, is_class in = im_icc_import in (expand profile) (to_real intent), is_image in = error (_ "bad arguments to " ++ "icc_import") { icc_import_op = Operator "icc_import" (icc_import profile intent) Operator_type.COMPOUND_REWRAP false; } icc_import_embedded intent in = oo_unary_function icc_import_embedded_op in, is_class in = im_icc_import_embedded in (to_real intent), is_image in = error (_ "bad arguments to " ++ "icc_import_embedded") { icc_import_embedded_op = Operator "icc_import_embedded" (icc_import_embedded intent) Operator_type.COMPOUND_REWRAP false; } icc_transform in_profile out_profile intent in = oo_unary_function icc_transform_op in, is_class in = im_icc_transform in (expand in_profile) (expand out_profile) (to_real intent), is_image in = error (_ "bad arguments to " ++ "icc_transform") { icc_transform_op = Operator "icc_transform" (icc_transform in_profile out_profile intent) Operator_type.COMPOUND_REWRAP false; } icc_ac2rc profile in = oo_unary_function icc_ac2rc_op in, is_class in = im_icc_ac2rc in (expand profile), is_image in = error (_ "bad arguments to " ++ "icc_ac2rc") { icc_ac2rc_op = Operator "icc_ac2rc" (icc_ac2rc profile) Operator_type.COMPOUND_REWRAP false; } // Given a xywh rect, flip it around so wh are always positive rect_normalise x y w h = [x', y', w', h'] { x' = x + w, w < 0 = x; y' = y + h, h < 0 = y; w' = abs w; h' = abs h; } draw_flood_blob x y ink image = oo_unary_function draw_flood_blob_op image, is_class image = im_draw_flood_blob image (to_real x) (to_real y) ink, is_image image = error (_ "bad arguments to " ++ "draw_flood_blob") { draw_flood_blob_op = Operator "draw_flood_blob" (draw_flood_blob x y ink) Operator_type.COMPOUND_REWRAP false; } draw_flood x y ink image = oo_unary_function draw_flood_op image, is_class image = im_draw_flood image (to_real x) (to_real y) ink, is_image image = error (_ "bad arguments to " ++ "draw_flood") { draw_flood_op = Operator "draw_flood" (draw_flood x y ink) Operator_type.COMPOUND_REWRAP false; } /* This version of draw_rect uses insert_noexpand and will be fast, even for * huge images. */ draw_rect_width x y w h f t ink image = oo_unary_function draw_rect_width_op image, is_class image = my_draw_rect_width image (to_int x) (to_int y) (to_int w) (to_int h) (to_int f) (to_int t) ink, is_image image = error (_ "bad arguments to " ++ "draw_rect_width") { draw_rect_width_op = Operator "draw_rect_width" (draw_rect_width x y w h f t ink) Operator_type.COMPOUND_REWRAP false; my_draw_rect_width image x y w h f t ink = insert x' y' (block w' h') image, f == 1 = (insert x' y' (block w' t) @ insert (x' + w' - t) y' (block t h') @ insert x' (y' + h' - t) (block w' t) @ insert x' y' (block t h')) image { insert = insert_noexpand; block w h = image_new w h (get_bands image) (get_format image) (get_coding image) (get_type image) ink' 0 0; ink' = Vector ink, is_list ink = ink; [x', y', w', h'] = rect_normalise x y w h; } } /* Default to 1 pixel wide edges. */ draw_rect x y w h f ink image = draw_rect_width x y w h f 1 ink image; /* This version of draw_rect uses the paintbox rect draw operation. It is an * inplace operation and will use bucketloads of memory. */ draw_rect_paintbox x y w h f ink image = oo_unary_function draw_rect_op image, is_class image = im_draw_rect image (to_real x) (to_real y) (to_real w) (to_real h) (to_real f) ink, is_image image = error (_ "bad arguments to " ++ "draw_rect_paintbox") { draw_rect_op = Operator "draw_rect" (draw_rect x y w h f ink) Operator_type.COMPOUND_REWRAP false; } draw_circle x y r f ink image = oo_unary_function draw_circle_op image, is_class image = im_draw_circle image (to_real x) (to_real y) (to_real r) (to_real f) ink, is_image image = error (_ "bad arguments to " ++ "draw_circle") { draw_circle_op = Operator "draw_circle" (draw_circle x y r f ink) Operator_type.COMPOUND_REWRAP false; } draw_line x1 y1 x2 y2 ink image = oo_unary_function draw_line_op image, is_class image = im_draw_line image (to_real x1) (to_real y1) (to_real x2) (to_real y2) ink, is_image image = error (_ "bad arguments to " ++ "draw_line") { draw_line_op = Operator "draw_line" (draw_line x1 y1 x2 y2 ink) Operator_type.COMPOUND_REWRAP false; } print_base base in = oo_unary_function print_base_op in, is_class in = map (print_base base) in, is_list in = print_base_real, is_real in = error (_ "bad arguments to " ++ "print_base") { print_base_op = Operator "print_base" (print_base base) Operator_type.COMPOUND false; print_base_real = error "print_base: bad base", base < 2 || base > 16 = "0", in < 0 || chars == [] = reverse chars { digits = map (\x x % base) (takewhile (not_equal 0) (iterate (\x idivide x base) in)); chars = map tohd digits; tohd x = (char) ((int) '0' + x), x < 10 = (char) ((int) 'A' + (x - 10)); } } /* id x: the identity function * * id :: * -> * */ id x = x; /* const x y: junk y, return x * * (const 3) is the function that always returns 3. * const :: * -> ** -> * */ const x y = x; /* converse fn a b: swap order of args to fn * * converse fn a b == fn b a * converse :: (* -> ** -> ***) -> ** -> * -> *** */ converse fn a b = fn b a; /* fix fn x: find the fixed point of a function */ fix fn x = limit (iterate fn x); /* until pred fn n: apply fn to n until pred succeeds; return that value * * until (more 1000) (multiply 2) 1 = 1024 * until :: (* -> bool) -> (* -> *) -> * -> * */ until pred fn n = n, pred n = until pred fn (fn n); /* Infinite list of primes. */ primes = 1 : (sieve [2 ..]) { sieve l = hd l : sieve (filter (nmultiple (hd l)) (tl l)); nmultiple n x = x / n != (int) (x / n); } /* Map an n-ary function (pass the args as a list) over groups of objects. * The objects can be single objects or groups. If more than one * object is a group, we iterate for the length of the smallest group. * Don't loop over plain lists, since we want (eg.) "mean [1, 2, 3]" to work. * Treat [] as no-value --- ie. if any of the inputs are [] we put [] into the * output and don't apply the function. copy-pasted into _types, keep in sync */ map_nary fn args = fn args, groups == [] = Group (map process [0, 1 .. shortest - 1]) { // find all the group arguments groups = filter is_Group args; // what's the length of the shortest group arg? shortest = foldr1 min_pair (map (len @ get_value) groups); // process index n ... pull that member from each argument // recurse to handle application, so we work for nested groups too process n = NULL, any (map (is_noval n) args) = map_nary fn (map (extract n) args) { extract n arg = arg.value?n, is_Group arg = arg; is_noval n arg = is_Group arg && arg.value?n == NULL; } } /* Map a 1-ary function over an object. */ map_unary fn a = map_nary (list_1ary fn) [a]; /* Map a 2-ary function over a pair of objects. */ map_binary fn a b = map_nary (list_2ary fn) [a, b]; /* Map a 3-ary function over three objects. */ map_trinary fn a b c = map_nary (list_3ary fn) [a, b, c]; /* Map a 4-ary function over three objects. */ map_quaternary fn a b c d = map_nary (list_4ary fn) [a, b, c, d]; /* Same as map_nary, but for lists. Handy for (eg.) implementing arith ops on * vectors and matricies. */ map_nary_list fn args = fn args, lists == [] = map process [0, 1 .. shortest - 1] { // find all the list arguments lists = filter is_list args; // what's the length of the shortest list arg? shortest = foldr1 min_pair (map len lists); // process index n ... pull that member from each argument // recurse to handle application, so we work for nested lists too process n = map_nary_list fn (map (extract n) args) { extract n arg = arg?n, is_list arg = arg; } } map_unaryl fn a = map_nary_list (list_1ary fn) [a]; map_binaryl fn a b = map_nary_list (list_2ary fn) [a, b]; /* Remove features smaller than x pixels across from an image. This used to be * rather complex ... convsep is now good enough to use. */ smooth x image = convsep (matrix_gaussian_blur (to_real x * 2)) image; /* Chop up an image into a list of lists of smaller images. Pad edges with * black. */ imagearray_chop tile_width tile_height hoverlap voverlap i = map chop' [0, vstep .. last_y] { width = get_width i; height = get_height i; bands = get_bands i; format = get_format i; type = get_type i; tile_width' = to_real tile_width; tile_height' = to_real tile_height; hoverlap' = to_real hoverlap; voverlap' = to_real voverlap; /* Unique pixels per tile. */ hstep = tile_width' - hoverlap'; vstep = tile_height' - voverlap'; /* Number of tiles across and down. Remember the case where width == * hstep. */ across = (int) ((width - 1) / hstep) + 1; down = (int) ((height - 1) / vstep) + 1; /* top/left of final tile. */ last_x = hstep * (across - 1); last_y = vstep * (down - 1); /* How much do we need to pad by? */ sx = last_x + tile_width'; sy = last_y + tile_height'; /* Expand image with black to pad size. */ pad = embed 0 0 0 sx sy i; /* Chop up a row. */ chop' y = map chop'' [0, hstep .. last_x] { chop'' x = extract_area x y tile_width' tile_height' pad; } } /* Reassemble image. */ imagearray_assemble hoverlap voverlap il = (image_set_origin 0 0 @ foldl1 tbj @ map (foldl1 lrj)) il { lrj l r = insert (get_width l + hoverlap) 0 r l; tbj t b = insert 0 (get_height t + voverlap) b t; } /* Generate an nxn identity matrix. */ identity_matrix n = error "identity_matrix: n > 0", n < 1 = map line [0 .. n - 1] { line p = take p [0, 0 ..] ++ [1] ++ take (n - p - 1) [0, 0 ..]; } /* Incomplete gamma function Q(a, x) == 1 - P(a, x) FIXME ... this is now a builtin, until we can get a nice List class (requires overloadable ':') gammq a x = error "bad args", x < 0 || a <= 0 = 1 - gamser, x < a + 1 = gammcf { gamser = (gser a x)?0; gammcf = (gcf a x)?0; } */ /* Incomplete gamma function P(a, x) evaluated as series representation. Also * return ln(gamma(a)) ... nr in c, pp 218 */ gser a x = [gamser, gln] { gln = gammln a; gamser = error "bad args", x < 0 = 0, x == 0 = 1 // fix this { // maximum iterations maxit = 100; ap = List [a + 1, a + 2 ...]; xoap = x / ap; del = map product (prefixes xoap.value); /* del = map (multiply (1 / a)) (map product (prefixes xoap)) del = xap = iterate (multiply */ /* Generate all prefixes of a list ... [1,2,3] -> [[1], [1, 2], [1, 2, * 3], [1, 2, 3, 4] ...] */ prefixes l = map (converse take l) [1..]; } } /* ln(gamma(xx)) ... nr in c, pp 214 */ gammln xx = gln { cof = [76.18009172947146, -86.50532032941677, 24.01409824083091, -1.231739572450155, 0.1208650973866179e-2, -0.5395239384953e-5]; y = take 6 (iterate (add 1) (xx + 1)); ser = 1.000000000190015 + sum (map2 divide cof y); tmp = xx + 0.5; tmp' = tmp - ((xx + 0.5) * log tmp); gln = -tmp + log (2.5066282746310005 * ser / xx); } /* make a LUT from a scatter */ buildlut x = Plot_histogram (im_buildlut x), is_Matrix x && x.width > 1 = im_buildlut (Matrix x), is_matrix x && is_list_len_more 1 x?0 = error (_ "bad arguments to " ++ "buildlut"); /* Linear regression. Return a class with the stuff we need in. * from s15.2, p 665 NR in C */ linreg xes yes = obj { obj = class { // in case we ever get shown in the workspace _vislevel = 2; slope = sum [t * y :: [t, y] <- zip2 tes yes] / st2; intercept = (sy - sx * slope) / ss; chi2 = sum [(y - intercept - slope * x) ** 2 :: [x, y] <- zip2 xes yes]; siga = (chi2 / (ss - 2)) ** 0.5 * ((1 + sx ** 2 / (ss * st2)) / ss) ** 0.5; sigb = (chi2 / (ss - 2)) ** 0.5 * (1 / st2) ** 0.5; // for compat with linregw, see below q = 1.0; } ss = len xes; sx = sum xes; sy = sum yes; sxoss = sx / ss; tes = [x - sxoss :: x <- xes]; st2 = sum [t ** 2 :: t <- tes]; } /* Weighted linear regression. Xes, yes and a list of deviations. */ linregw xes yes devs = obj { obj = class { // in case we ever get shown in the workspace _vislevel = 2; slope = sum [(t * y) / sd :: [t, y, sd] <- zip3 tes yes devs] / st2; intercept = (sy - sx * slope) / ss; chi2 = sum [((y - intercept - slope * x) / sd) ** 2 :: [x, y, sd] <- zip3 xes yes devs]; siga = ((1 + sx * sx / (ss * st2)) / ss) ** 0.5; sigb = (1 / st2) ** 0.5; q = gammq (0.5 * (len xes - 2)) (0.5 * chi2); } wt = [sd ** -0.5 :: sd <- devs]; ss = sum wt; sx = sum [x * w :: [x, w] <- zip2 xes wt]; sy = sum [y * w :: [y, w] <- zip2 yes wt]; sxoss = sx / ss; tes = [(x - sxoss) / sd :: [x, sd] <- zip2 xes devs]; st2 = sum [t ** 2 :: t <- tes]; } /* Clustering: pass in a list of points, repeatedly merge the * closest two points until no two points are closer than the threshold. * Return [merged-points, corresponding-weights]. A weight is a list of the * indexes we merged to make that point, ie. len weight == how significant * this point is. * * eg. * cluster 12 [152,154,155,42,159] == * [[155,42],[[1,2,0,4],[3]]] */ cluster thresh points = oo_unary_function cluster_op points, is_class points // can't use [0..len points - 1], in case len points == 0 = merge [points, map (converse cons []) (take (len points) [0 ..])], is_list points = error (_ "bad arguments to " ++ "cluster") { cluster_op = Operator "cluster" (cluster thresh) Operator_type.COMPOUND false; merge x = x, m < 2 || d > thresh = merge [points', weights'] { [points, weights] = x; m = len points; // generate indexes of all possible pairs, avoiding comparing a thing // to itself, and assuming that dist is reflexive // first index is always less than 2nd index // the +1,+2 makes sure we have an increasing generator, otherwise we // can get [3 .. 4] (for example), which will make a decreasing // sequence pairs = [[x, y] :: x <- [0 .. m - 1]; y <- [x + 1, x + 2 .. m - 1]]; // distance function // arg is eg. [3,1], meaning get distance from point 3 to point 1 dist x = abs (points?i - points?j) { [i, j] = x; } // smallest distance, then the two points we merge p = minpos (map dist pairs); d = dist pairs?p; [i, j] = pairs?p; // new point and new weight nw = weights?i ++ weights?j; np = (points?i * len weights?i + points?j * len weights?j) / len nw; // remove element i from a list remove i l = take i l ++ drop (i + 1) l; // remove two old points, add the new merged one // i < j (see "pairs", above) points' = np : remove i (remove j points); weights' = nw : remove i (remove j weights); } } /* Extract the area of an image around an arrow. * Transform the image to make the arrow horizontal, then displace by hd and * vd pxels, then cut out a bit h pixels high centered on the arrow. */ extract_arrow hd vd h arrow = extract_area (re p' + hd) (im p' - h / 2 + vd) (re pv) h im' { // the line as a polar vector pv = polar (arrow.width, arrow.height); a = im pv; // smallest rotation that will make the line horizontal a' = 360 - a, a > 270 = 180 - a, a > 90 = -a; im' = rotate Interpolate_bilinear a' arrow.image; // look at the start and end of the arrow, pick the leftmost p = (arrow.left, arrow.top), arrow.left <= arrow.right = (arrow.right, arrow.bottom); // transform that point to im' space p' = rectangular (polar p + (0, a')) + (im'.xoffset, im'.yoffset); } /* You'd think these would go in _convert, but they are not really colour ops, * so put them here. */ rad2float image = oo_unary_function rad2float_op image, is_class image = im_rad2float image, is_image image = error (_ "bad arguments to " ++ "rad2float") { rad2float_op = Operator "rad2float" rad2float Operator_type.COMPOUND_REWRAP false; } float2rad image = oo_unary_function float2rad_op image, is_class image = im_float2rad image, is_image image = error (_ "bad arguments to " ++ "float2rad") { float2rad_op = Operator "float2rad" float2rad Operator_type.COMPOUND_REWRAP false; } segment x = oo_unary_function segment_op x, is_class x = image', is_image x = error (_ "bad arguments to " ++ "segment") { segment_op = Operator "segment" segment Operator_type.COMPOUND_REWRAP false; [image, nsegs] = im_segment x; image' = im_copy_set_meta image "n-segments" nsegs; } point a b = oo_binary_function point_op a b, is_class a = oo_binary'_function point_op a b, is_class b = im_read_point b x y, is_image b = [b?x?y], is_matrix b = [b?x], is_real_list b && y == 0 = [b?y], is_real_list b && x == 0 = error (_ "bad arguments to " ++ "point") { point_op = Operator "point" (\a\b Vector (point a b)) Operator_type.COMPOUND false; (x, y) = a, is_complex a; = (a?0, a?1), is_real_list a && is_list_len 2 a = error "bad position format"; } /* Generate an ImageMagick (or GraphicsMagick) command suitable for * im_system_image. Use convert.exe in $VIPSHOME/bin, if it exists, otherwise * assume it's on the path somewhere. */ magick_command switch = join_sep " " [convert, "\"%s\"", switch, "\"%s\""] { prefs = Workspaces.Preferences; use_gm = prefs.USE_GRAPHICSMAGICK; name = if use_gm then "gm" else "convert"; exe = concat [name, expand "$EXEEXT"]; vipsexe = path_absolute [expand "$VIPSHOME", "bin", exe]; final_exe = vipsexe, search vipsexe != [] = exe; convert = join_sep " " [final_exe, "convert"], use_gm = final_exe; } /* Run a command on an image. See magick_command, for example. */ system_image command x = oo_unary_function system_image_op x, is_class x = system x, is_image x = error (_ "bad arguments to " ++ "system_image") { system_image_op = Operator "system_image" (system_image command) Operator_type.COMPOUND_REWRAP false; system im = image_out { [image_out, log] = im_system_image (get_image im) "%s.tif" "%s.tif" command; } } nip2-8.7.0/share/nip2/compat/7.28/Filter.def0000644000175000017500000012653013224651032015064 00000000000000Filter_conv_item = class Menupullright "_Convolution" "various spatial convolution filters" { /* Some useful masks. */ filter_blur = Matrix_con 9 0 [[1, 1, 1], [1, 1, 1], [1, 1, 1]]; filter_sharp = Matrix_con 8 0 [[-1, -1, -1], [-1, 16, -1], [-1, -1, -1]]; filter_emboss = Matrix_con 1 128 [[-1, 0], [0, 1]]; filter_laplacian = Matrix_con 1 128 [[-1, -1, -1], [-1, 8, -1], [-1, -1, -1]]; filter_sobel = Matrix_con 1 128 [[1, 2, 1], [0, 0, 0], [-1, -2, -1]]; filter_lindet = Matrix_con 1 0 [[1, 1, 1], [-2, -2, -2], [1, 1, 1]]; Blur_item = class Menuaction "_Blur" "3x3 blur of image" { action x = map_unary (conv filter_blur) x; } Sharpen_item = class Menuaction "_Sharpen" "3x3 sharpen of image" { action x = map_unary (conv filter_sharp) x; } Emboss_item = class Menuaction "_Emboss" "1 pixel displace emboss" { action x = map_unary (conv filter_emboss) x; } Laplacian_item = class Menuaction "_Laplacian" "3x3 laplacian edge detect" { action x = map_unary (conv filter_laplacian) x; } Sobel_item = class Menuaction "So_bel" "3x3 Sobel edge detect" { action x = map_unary sobel x { sobel im = abs (a - 128) + abs (b - 128) { a = conv filter_sobel im; b = conv (rot270 filter_sobel) im; } } } /* 3x3 line detect of image diagonals should be scaled down by root(2) I guess Kirk */ Linedet_item = class Menuaction "Li_ne Detect" "3x3 line detect" { action x = map_unary lindet x { lindet im = foldr1 max_pair images { masks = take 4 (iterate rot45 filter_lindet); images = map (converse conv im) masks; } } } Usharp_item = class Menuaction "_Unsharp Mask" "cored sharpen of L only in LAB image" { action x = class _result { _vislevel = 3; size = Option "Radius" [ "3 pixels", "5 pixels", "7 pixels", "9 pixels", "11 pixels", "51 pixels" ] 0; st = Scale "Smoothness threshold" 0 5 1.5; bm = Scale "Brighten by at most" 1 50 10; dm = Scale "Darken by at most" 1 50 50; fs = Scale "Sharpen flat areas by" (-2) 5 1; js = Scale "Sharpen jaggy areas by" (-2) 5 2; _result = map_unary process x { process in = Image in''' { in' = colour_transform_to Image_type.LABS in.value; in'' = sharpen [3, 5, 7, 9, 11, 51]?size st bm dm fs js in'; in''' = colour_transform_to (get_type in) in''; } } } } sep1 = Menuseparator; Custom_blur_item = class Menuaction "Custom B_lur / Sharpen" "blur or sharpen with tuneable parameters" { action x = class _result { _vislevel = 3; type = Option "Type" ["Blur", "Sharpen"] 0; r = Scale "Radius" 1 100 1; fac = Scale "Amount" 0 1 1; layers = Scale "Layers" 1 100 10; shape = Option "Mask shape" [ "Square", "Gaussian" ] 0; prec = Option "Precision" ["Int", "Float", "Approximate"] 0; _result = map_unary process x { process in = clip2fmt blur.format proc { mask = matrix_blur r.value, shape.value == 0 = matrix_gaussian_blur r.value; blur = [convsep, convsepf, aconvsep layers]?prec mask in; proc = in + fac * (in - blur), type == 1 = blur * fac + in * (1 - fac); } } } } Custom_conv_item = class Menuaction "Custom C_onvolution" "convolution filter with tuneable parameters" { action x = class _result { _vislevel = 3; matrix = Matrix_con 1 0 [[0, 0, 0], [0, 1, 0], [0, 0, 0]]; separable = Toggle "Seperable convolution" false, matrix.width == 1 || matrix.height == 1 = false; type = Option "Convolution type" ["Int", "Float"] 0; rotate = Option "Rotate" [ "Don't rotate", "4 x 45 degrees", "8 x 45 degrees", "2 x 90 degrees" ] 0; _result = map_unary process x { process in = in.Image in' { conv_fn = im_lindetect, !separable && type == 0 && rotate == 1 = im_compass, !separable && type == 0 && rotate == 2 = im_gradient, !separable && type == 0 && rotate == 3 = im_conv, !separable && type == 0 = im_convsep, separable && type == 0 = im_conv_f, !separable && type == 1 = im_convsep_f, separable && type == 1 = error "boink!"; in' = conv_fn in.value matrix; } } } } } Filter_rank_item = class Menupullright "_Rank" "various rank filters" { Median_item = class Menuaction "_Median" "3x3 median rank filter" { action x = map_unary (rank 3 3 4) x; } Image_rank_item = class Menuaction "_Image Rank" "pixelwise rank a list or group of images" { action x = class _result { _vislevel = 3; select = Expression "Rank" ((int) (guess_size / 2)) { guess_size = len x, is_list x = len x.value, is_Group x = 0; } // can't really iterate over groups ... since we allow a group // argument _result = rank_image select x; } } Custom_rank_item = class Menuaction "Custom _Rank" "rank filter with tuneable parameters" { action x = class _result { _vislevel = 3; window_width = Expression "Window width" 3; window_height = Expression "Window height" 3; select = Expression "Rank" ((int) ((to_real window_width * to_real window_height) / 2)); _result = map_unary process x { process in = rank window_width window_height select in; } } } } Filter_morphology_item = class Menupullright "_Morphology" "various morphological filters" { /* Some useful masks. */ mask8 = Matrix_mor [[255, 255, 255], [255, 255, 255], [255, 255, 255]]; mask4 = Matrix_mor [[128, 255, 128], [255, 255, 255], [128, 255, 128]]; mask1 = Matrix_mor [[0, 0, 0], [0, 255, 0], [0, 0, 0]]; thin = Matrix_mor [[0, 0, 0], [128, 255, 128], [255, 255, 255]]; Threshold_item = Select_item.Threshold_item; sep1 = Menuseparator; Dilate_item = class Menupullright "_Dilate" "morphological dilate" { Dilate8_item = class Menuaction "_8-connected" "dilate with an 8-connected mask" { action x = map_unary (dilate mask8) x; } Dilate4_item = class Menuaction "_4-connected" "dilate with a 4-connected mask" { action x = map_unary (dilate mask4) x; } } Erode_item = class Menupullright "_Erode" "morphological erode" { Erode8_item = class Menuaction "_8-connected" "erode with an 8-connected mask" { action x = map_unary (erode mask8) x; } Erode4_item = class Menuaction "_4-connected" "erode with a 4-connected mask" { action x = map_unary (erode mask4) x; } } Custom_morph_item = class Menuaction "Custom _Morphology" "convolution morphological operator" { action x = class _result { _vislevel = 3; mask = mask4; type = Option "Operation" ["Erode", "Dilate"] 1; apply = Expression "Number of times to apply mask" 1; _result = map_unary morph x { morph image = Image value' { fatmask = (iterate (dilate mask) mask)?(to_real apply - 1); value' = im_erode image.value fatmask, type.value == 0 = im_dilate image.value fatmask; } } } } sep2 = Menuseparator; Open_item = class Menuaction "_Open" "open with an 8-connected mask" { action x = map_unary (dilate mask8 @ erode mask8) x; } Close_item = class Menuaction "_Close" "close with an 8-connected mask" { action x = map_unary (erode mask8 @ dilate mask8) x; } Clean_item = class Menuaction "C_lean" "remove 8-connected isolated points" { action x = map_unary clean x { clean x = x ^ erode mask1 x; } } Thin_item = class Menuaction "_Thin" "thin once" { action x = map_unary thinall x { masks = take 8 (iterate rot45 thin); thin1 m x = x ^ erode m x; thinall x = foldr thin1 x masks; } } } Filter_fourier_item = class Menupullright "_Fourier" "various Fourier filters" { preview_size = 64; sense_option = Option "Sense" [ "Pass", "Reject" ] 0; // make a visualisation image make_vis fn = (Image @ image_set_type Image_type.FOURIER @ rotquad @ fn) (im_create_fmask preview_size preview_size); // make the process function process fn in = (Image @ fn) (im_flt_image_freq in.value); New_ideal_item = class Menupullright "_Ideal" "various ideal Fourier filters" { High_low_item = class Menuaction "_High or Low Pass" "highpass/lowpass ideal Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; // call a freq func with our parameters _params f = f sense.value fc.value 0 0 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" "ring pass/reject ideal Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; rw = Scale "Ring width" 0.01 0.99 0.5; // call a freq func with our parameters _params f = f (sense.value + 6) fc.value rw.value 0 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Band_item = class Menuaction "_Band Pass or Band Reject" "band pass/reject ideal Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fcx = Scale "Horizontal frequency cutoff" 0.01 0.99 0.5; fcy = Scale "Vertical frequency cutoff" 0.01 0.99 0.5; r = Scale "Radius" 0.01 0.99 0.5; // call a freq func with our parameters _params f = f (sense.value + 12) fcx.value fcy.value r.value 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } } New_gaussian_item = class Menupullright "_Gaussian" "various Gaussian Fourier filters" { High_low_item = class Menuaction "_High or Low Pass" "highpass/lowpass Gaussian Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; // call a freq func with our parameters _params f = f (sense.value + 4) fc.value ac.value 0 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" "ring pass/reject Gaussian Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; rw = Scale "Ring width" 0.01 0.99 0.5; // call a freq func with our parameters _params f = f (sense.value + 10) fc.value rw.value ac.value 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Band_item = class Menuaction "_Band Pass or Band Reject" "band pass/reject Gaussian Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fcx = Scale "Horizontal frequency cutoff" 0.01 0.99 0.5; fcy = Scale "Vertical frequency cutoff" 0.01 0.99 0.5; r = Scale "Radius" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; // call a freq func with our parameters _params f = f (sense.value + 16) fcx.value fcy.value r.value ac.value 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } } New_butterworth_item = class Menupullright "_Butterworth" "various Butterworth Fourier filters" { High_low_item = class Menuaction "_High or Low Pass" "highpass/lowpass Butterworth Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; o = Scale "Order" 1 10 2; // call a freq func with our parameters _params f = f (sense.value + 2) o.value fc.value ac.value 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" "ring pass/reject Butterworth Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; rw = Scale "Ring width" 0.01 0.99 0.5; o = Scale "Order" 1 10 2; // call a freq func with our parameters _params f = f (sense.value + 8) o.value fc.value rw.value ac.value 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Band_item = class Menuaction "_Band Pass or Band Reject" "band pass/reject Butterworth Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fcx = Scale "Horizontal frequency cutoff" 0.01 0.99 0.5; fcy = Scale "Vertical frequency cutoff" 0.01 0.99 0.5; r = Scale "Radius" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; o = Scale "Order" 1 10 2; // call a freq func with our parameters _params f = f (sense.value + 14) o.value fcx.value fcy.value r.value ac.value; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } } } Filter_enhance_item = class Menupullright "_Enhance" "various enhancement filters" { Falsecolour_item = class Menuaction "_False Colour" "false colour a mono image" { action x = class _result { _vislevel = 3; o = Scale "Offset" (-255) 255 0; clip = Toggle "Clip colour range" false; _result = map_unary process x { process im = falsecolour mono'' { mono = colour_transform_to Image_type.B_W im; mono' = mono + o; mono'' = (unsigned char) mono', clip = (unsigned char) (mono' & 0xff); } } } } Statistical_diff_item = class Menuaction "_Statistical Difference" "statistical difference of an image" { action x = class _result { _vislevel = 3; wsize = Expression "Window size" 11; tmean = Expression "Target mean" 128; mean_weight = Scale "Mean weight" 0 1 0.8; tdev = Expression "Target deviation" 50; dev_weight = Scale "Deviation weight" 0 1 0.8; border = Toggle "Output image matches input image in size" true; _result = map_unary process x { process in = Image in'' { in' = colour_transform_to Image_type.B_W in.value; fn = im_stdif, border = im_stdif_raw; in'' = fn in' mean_weight.value tmean.expr dev_weight.value tdev.expr wsize.expr wsize.expr; } } } } Hist_equal_item = class Menupullright "_Equalise Histogram" "equalise contrast" { Global_item = class Menuaction "_Global" "equalise contrast globally" { action x = map_unary hist_equalize x; } Local_item = class Menuaction "_Local" "equalise contrast within a roving window" { action x = class _result { _vislevel = 3; window_width = Expression "Window width" 20; window_height = Expression "Window height" 20; _result = map_unary process x { process in = hist_equalize_local window_width.expr window_height.expr in; } } } } } Filter_correlate_item = class Menupullright "Spatial _Correlation" "calculate correlation surfaces" { Correlate_item = class Menuaction "_Correlate" "calculate correlation coefficient" { action a b = map_binary corr a b { corr a b = correlate a b, a.width <= b.width && a.height <= b.height = correlate b a; } } Correlate_fast_item = class Menuaction "_Simple Difference" "calculate sum of squares of differences" { action a b = map_binary corr a b { corr a b = correlate_fast a b, a.width <= b.width && a.height <= b.height = correlate_fast b a; } } } Filter_greyc_item = class Menupullright "_GREYCstoration" "noise-removing filter" { Denoise_item = class Menuaction "Denoise" "Noise-removing filter" { action x = class _result { _vislevel = 3; iterations = Scale "Iterations" 1 5 1; amplitude = Scale "Amplitude" 1 100 40; sharpness = Scale "Sharpness" 0 3 0.9; anisotropy = Scale "Anisotropy" 0 1 0.15; alpha = Scale "Noise scale" 0 5 0.6; sigma = Scale "Geometry regularity" 0 2 1.1; dl = Scale "Spatial integration step" 0 1 0.8; da = Scale "Angular integration step" 0 90 30; gauss_prec = Scale "Precision" 1 10 2; interpolation = Option "Interpolation" ["Nearest-neighbour", "Bilinear", "Runge-Kutta"] 0; fast_approx = Toggle "Fast approximation" true; _result = greyc (to_real iterations) (to_real amplitude) (to_real sharpness) (to_real anisotropy) (to_real alpha) (to_real sigma) (to_real dl) (to_real da) (to_real gauss_prec) (to_real interpolation) (to_real fast_approx) x; } } Enlarge_item = class Menuaction "Enlarge" "Enlarge image" { action x = class _result { _vislevel = 3; scale = Scale "Enlarge" 1 10 3; iterations = Scale "Iterations" 1 5 3; amplitude = Scale "Amplitude" 1 100 20; sharpness = Scale "Sharpness" 0 3 0.2; anisotropy = Scale "Anisotropy" 0 1 0.9; alpha = Scale "Noise scale" 0 5 0.1; sigma = Scale "Geometry regularity" 0 2 1.5; dl = Scale "Spatial integration step" 0 1 0.8; da = Scale "Angular integration step" 0 90 30; gauss_prec = Scale "Precision" 1 10 2; interpolation = Option "Interpolation" ["Nearest-neighbour", "Bilinear", "Runge-Kutta"] 0; fast_approx = Toggle "Fast approximation" true; _result = greyc (to_real iterations) (to_real amplitude) (to_real sharpness) (to_real anisotropy) (to_real alpha) (to_real sigma) (to_real dl) (to_real da) (to_real gauss_prec) (to_real interpolation) (to_real fast_approx) (resize Interpolate_bilinear (to_real scale) (to_real scale) x); } } } Filter_magick_item = class Menupullright "Magic_k" "various Image/Graphics Magick filters" { system command x = map_unary (system_image command) x; radius_widget = Scale "Radius" 1 100 10; sigma_widget = Scale "Sigma" 0.1 10 1; angle_widget = Scale "Angle" (-360) 360 0; text_widget = String "Text to draw" "AaBbCcDdEe"; print_colour triple = concat ["\"#", concat (map fmt triple), "\""] { fmt x = reverse (take 2 (reverse (print_base 16 (x + 256)))); } Foreground triple = class Colour "sRGB" triple { _flag = "-fill " ++ print_colour triple; Colour_edit space triple = this.Foreground triple; } foreground_widget = Foreground [0, 0, 0]; Background triple = class Colour "sRGB" triple { _flag = "-background " ++ print_colour triple; Colour_edit space triple = this.Background triple; } background_widget = Background [255, 255, 255]; Antialias value = class Toggle "Antialias" value { _flag = "-antialias", value = "+antialias"; Toggle_edit caption value = this.Antialias value; } antialias_widget = Antialias true; Gravity gravity = class Option_string "Gravity" [ "None", "Center", "East", "Forget", "NorthEast", "North", "NorthWest", "SouthEast", "South", "SouthWest", "West", "Static" ] gravity { _flag = "-gravity " ++ gravity; Option_edit caption labels value = this.Gravity labels?value; } gravity_widget = Gravity "Center"; Alpha alpha = class Option_string "Alpha" [ "On", "Off", "Set", "Opaque", "Transparent", "Extract", "Copy", "Shape", "Background" ] alpha { _flag = "-alpha " ++ alpha; Option_edit caption labels value = this.Alpha labels?value; } alpha_widget = Alpha "On"; Geometry_widget = class { _vislevel = 3; x = Expression "Y" 0; y = Expression "X" 0; hoffset = Expression "Horizontal offset" 10; voffset = Expression "Vertical offset" 10; _flag = concat [print x.expr, "x", print y.expr, format hoffset, format voffset] { // print an offset ... we want '+' in front of +ve strings format offset = concat ["+", print offset.expr], offset.expr >= 0 = print offset.expr; } }; Font_widget = class { _vislevel = 3; family = Option_string "Family" [ "Arial", "ArialBlack", "AvantGarde", "BitstreamCharter", "Bookman", "CenturySchoolbook", "ComicSansMS", "Courier", "CourierNew", "DejaVuSans", "DejaVuSansMono", "DejaVuSerif", "Dingbats", "FreeMono", "FreeSans", "FreeSerif", "Garuda", "Georgia", "Helvetica", "HelveticaNarrow", "Impact", "LiberationMono", "LiberationSans", "LiberationSerif", "NewCenturySchlbk", "Palatino", "Purisa", "Symbol", "Times", "TimesNewRoman", "Ubuntu", "Verdana", "Webdings" ] "Arial"; style = Option_string "Style" [ "Any", "Italic", "Normal", "Oblique" ] "Normal"; weight = Scale "Weight" 1 800 400; size = Scale "Point size" 1 100 12; stretch = Option_string "Stretch" [ "Any", "Condensed", "Expanded", "ExtraCondensed", "ExtraExpanded", "Normal", "SemiCondensed", "SemiExpanded", "UltraCondensed", "UltraExpanded" ] "Normal"; _flag = join_sep " " [ "-family", family.item, "-weight", print weight.value, "-pointsize", print size.value, "-style", style.item, "-stretch", stretch.item]; } Adaptive_blur_item = class Menuaction "_Adaptive Blur" "blur less near edges" { action x = class _result { _vislevel = 3; radius = radius_widget; sigma = sigma_widget; command = magick_command (concat ["-adaptive-blur ", print radius.value, "x", print sigma.value]); _result = system command x; } } Adaptive_sharpen_item = class Menuaction "_Adaptive Sharpen" "sharpen more near edges" { action x = class _result { _vislevel = 3; radius = radius_widget; sigma = sigma_widget; command = magick_command (concat ["-adaptive-sharpen ", print radius.value, "x", print sigma.value]); _result = system command x; } } Alpha_item = class Menuaction "_Alpha" "add/remove alpha channel" { action x = class _result { _vislevel = 3; alpha = alpha_widget; command = magick_command alpha._flag; _result = system command x; } } Annotate_item = class Menuaction "_Annotate" "add text annotation" { action x = class _result { _vislevel = 3; text = text_widget; font = Font_widget; geometry = Geometry_widget; gravity = gravity_widget; foreground = foreground_widget; antialias = antialias_widget; command = magick_command (join_sep " " [ font._flag, antialias._flag, gravity._flag, foreground._flag, "-annotate", geometry._flag, "\"" ++ text.value ++ "\""]); _result = system command x; } } Swirl_item = class Menuaction "_Swirl" "swirl around the centre" { action x = class _result { _vislevel = 3; angle = angle_widget; command = magick_command ("-swirl " ++ print angle.value); _result = system command x; } } } #separator Filter_tilt_item = class Menupullright "Ti_lt Brightness" "tilt brightness" { Left_right_item = class Menuaction "_Left to Right" "linear left-right brighten" { action x = class _result { _vislevel = 3; tilt = Scale "Left-right tilt" (-1) 1 0; _result = map_unary tilt_lr x { tilt_lr image = image * scale { ramp = im_fgrey image.width image.height; scale = (ramp - 0.5) * tilt + 1; } } } } Top_bottom_item = class Menuaction "_Top to Bottom" "linear top-bottom brighten" { action x = class _result { _vislevel = 3; tilt = Scale "Top-bottom tilt" (-1) 1 0; _result = map_unary tilt_tb x { tilt_tb image = image * scale { ramp = rot90 (im_fgrey image.height image.width); scale = (ramp - 0.5) * tilt + 1; } } } } sep1 = Menuseparator; Left_right_cos_item = class Menuaction "Cosine Left-_right" "cosine left-right brighten" { action x = class _result { _vislevel = 3; tilt = Scale "Left-right tilt" (-1) 1 0; shift = Scale "Shift by" (-1) 1 0; _result = map_unary tilt_lr x { tilt_lr image = image * scale { ramp = im_fgrey image.width image.height - 0.5 - shift.value; scale = 0.5 * tilt.value * cos (ramp * 180) + 1; } } } } Top_bottom_cos_item = class Menuaction "Cosine Top-_bottom" "cosine top-bottom brighten" { action x = class _result { _vislevel = 3; tilt = Scale "Top-bottom tilt" (-1) 1 0; shift = Scale "Shift by" (-1) 1 0; _result = map_unary tilt_tb x { tilt_tb image = image * scale { ramp = rot90 (im_fgrey image.height image.width) - 0.5 - shift.value; scale = 0.5 * tilt.value * cos (ramp * 180) + 1; } } } } sep2 = Menuseparator; Circular_item = class Menuaction "_Circular" "circular brighten" { action x = class _result { _vislevel = 3; tilt = Scale "Tilt" (-1) 1 0; hshift = Scale "Horizontal shift by" (-1) 1 0; vshift = Scale "Vertical shift by" (-1) 1 0; _result = map_unary tilt_tb x { tilt_tb image = image * scale { hramp = im_fgrey image.width image.height - 0.5 - hshift.value; vramp = rot90 (im_fgrey image.height image.width) - 0.5 - vshift.value; ramp = (hramp ** 2 + vramp ** 2) ** 0.5; scale = 0.5 * tilt.value * cos (ramp * 180) + 1; } } } } } Filter_blend_item = class Menupullright "_Blend" "blend objects together" { Scale_blend_item = class Menuaction "_Scale" "blend two objects together with a scale" { action a b = class _result { _vislevel = 3; p = Scale "Blend position" 0 1 0.5; _result = map_binary process a b { process im1 im2 = im1 * (1 - p.value) + im2 * p.value; } } } Image_blend_item = class Menuaction "_Image" "use an image to blend two objects" { action a b c = class _result { _vislevel = 3; i = Toggle "Invert mask" false; _result = map_trinary process a b c { process a b c = blend condition in1 in2, !i = blend (invert condition) in1 in2 { compare a b // prefer image as the condition = false, !has_image a && has_image b // prefer mono images as the condition = false, has_bands a && has_bands b && get_bands a > 1 && get_bands b == 1 // prefer uchar as the condition = false, has_format a && has_format b && get_format a > Image_format.UCHAR && get_format b == Image_format.UCHAR = true; [condition, in1, in2] = sortc compare [a, b, c]; } } } } Line_blend_item = class Menuaction "_Along Line" "blend between image a and image b along a line" { action a b = class _result { _vislevel = 3; orientation = Option "Orientation" [ "Left to Right", "Top to Bottom" ] 0; blend_position = Scale "Blend position" 0 1 0.5; blend_width = Scale "Blend width" 0 1 0.05; _result = map_binary process a b { process a b = blend (Image condition) b a { output_width = max_pair a.width b.width; output_height = max_pair a.height b.height; range = output_width, orientation == 0 = output_height; blend_position' = floor (range * blend_position.value); blend_width' = 1, blend_width.value == 0 = floor (range * blend_width.value); start = blend_position' - blend_width' / 2; background = (make_xy output_width output_height) >= blend_position'; ramp = im_grey blend_width' output_height, orientation == 0 = rot90 (im_grey blend_width' output_width); condition = insert_noexpand start 0 ramp background?0, orientation == 0 = insert_noexpand 0 start ramp background?1; } } } } Blend_alpha_item = class Menuaction "_Alpha" "blend images with optional alpha channels" { // usage: layerit foreground background // input images must be either 1 or 3 bands, optionally + 1 band // which is used as the alpha channel // rich lott scale_mask im opacity = (unsigned char) (to_real opacity / 255 * im); // to mono intensity = colour_transform_to Image_type.B_W; // All the blend functions // I am grateful to this page // http://www.pegtop.net/delphi/blendmodes/ // for most of the formulae. blend_normal mask opacity fg bg = blend (scale_mask mask opacity) fg bg; blend_iflighter mask opacity fg bg = blend (if fg' > bg' then mask' else 0) fg bg { fg' = intensity fg; bg' = intensity bg; mask' = scale_mask mask opacity ; } blend_ifdarker mask opacity fg bg = blend (if fg' < bg' then mask' else 0) fg bg { fg' = intensity fg ; bg' = intensity bg ; mask' = scale_mask mask opacity ; } blend_multiply mask opacity fg bg = blend (scale_mask mask opacity) fg' bg { fg' = fg / 255 * bg; } blend_add mask opacity fg bg = blend mask fg' bg { fg' = opacity / 255 * fg + bg; } blend_subtract mask opacity fg bg = blend mask fg' bg { fg' = bg - opacity / 255 * fg; } blend_screen mask opacity fg bg = blend mask fg' bg { fg' = 255 - (255 - bg) * (255 - (opacity / 255 * fg)) / 255; } blend_burn mask opacity fg bg = blend mask fg'' bg { // fades to white which has no effect. fg' = (255 - opacity) + opacity * fg / 255; fg'' = 255 - 255 * (255 - bg) / fg'; } blend_softlight mask opacity fg bg = blend mask' fg' bg { mask' = scale_mask mask opacity; fg' = (2 * bg * fg + bg * bg * (1 - 2 * fg / 255)) / 255; } blend_hardlight mask opacity fg bg = blend mask' fg' bg { mask' = scale_mask mask opacity; fg' = 2 / 255 * fg * bg, bg < 129 = 255 - 2 * (255 - bg) * (255 - fg) / 255; } blend_lighten mask opacity fg bg = blend mask' fg' bg { mask' = scale_mask mask opacity; fg' = if bg < fg then fg else bg; } blend_darken mask opacity fg bg = blend mask' fg' bg { mask' = scale_mask mask opacity; fg' = if bg > fg then fg else bg; } blend_dodge mask opacity fg bg = blend mask fg'' bg { // one added to avoid divide by zero fg' = 1 + 255 - (opacity / 255 * fg); fg'' = bg * 255 / fg'; } blend_reflect mask opacity fg bg = blend mask' fg' bg { mask' = scale_mask mask opacity; fg' = bg * bg / (255 - fg); } blend_freeze mask opacity fg bg = blend mask' fg' bg { mask' = scale_mask mask opacity; fg' = 255 - (255 - bg) * (255 - bg) / (1 + fg); } blend_or mask opacity fg bg = bg | (unsigned char) fg' { mask' = scale_mask mask opacity; fg' = fg * mask' / 255; } blend_and mask opacity fg bg = bg & (unsigned char) fg' { mask' = scale_mask mask opacity; fg' = fg * mask' / 255; } // blend types NORMAL = 0; IFLIGHTER = 1; IFDARKER = 2; MULTIPLY = 3; ADD = 4; SUBTRACT = 5; SCREEN = 6; BURN = 7; DODGE = 8; HARDLIGHT = 9; SOFTLIGHT = 10; LIGHTEN = 11; DARKEN = 12; REFLECT = 13; FREEZE = 14; OR = 15; AND = 16; // names we show the user for blend types names = Enum [ _ "Normal" => NORMAL, _ "If Lighter" => IFLIGHTER, _ "If Darker" => IFDARKER, _ "Multiply" => MULTIPLY, _ "Add" => ADD, _ "Subtract" => SUBTRACT, _ "Screen" => SCREEN, _ "Burn" => BURN, _ "Soft Light" => SOFTLIGHT, _ "Hard Light" => HARDLIGHT, _ "Lighten" => LIGHTEN, _ "Darken" => DARKEN, _ "Dodge" => DODGE, _ "Reflect" => REFLECT, _ "Freeze" => FREEZE, _ "Bitwise OR" => OR, _ "Bitwise AND" => AND ]; // functions we call for each blend type actions = Table [ [NORMAL, blend_normal], [IFLIGHTER, blend_iflighter], [IFDARKER, blend_ifdarker], [MULTIPLY, blend_multiply], [ADD, blend_add], [SUBTRACT, blend_subtract], [SCREEN, blend_screen], [BURN, blend_burn], [SOFTLIGHT, blend_softlight], [HARDLIGHT, blend_hardlight], [LIGHTEN, blend_lighten], [DARKEN, blend_darken], [DODGE, blend_dodge], [REFLECT, blend_reflect], [FREEZE, blend_freeze], [OR, blend_or], [AND, blend_and] ]; // make sure im has an alpha channel (set opaque if it hasn't) put_alpha im = im, im.bands == 4 || im.bands == 2 = im ++ 255; // make sure im has no alpha channel lose_alpha im = extract_bands 0 3 im, im.bands == 4 = im?0, im.bands == 2 = im; // does im have al alpha channel? has_alpha im = im.bands == 2 || im.bands == 4; // get the alpha (set opaque if no alpha) get_alpha img = img'?3, img.bands == 4 = img'?1 { img' = put_alpha img; } // add an alpha ... cast the alpha image to match the main image append_alpha im alpha = im ++ clip2fmt im.format alpha; // makes fg the same size as bg, displaced with u, v pixel offset moveit fg bg u v = insert_noexpand u v fg bg' { bg' = image_new bg.width bg.height fg.bands fg.format fg.coding fg.type 0 0 0; } action bg fg = class _value { _vislevel = 3; method = Option_enum "Blend mode" names "Normal"; opacity = Scale "Opacity" 0 255 255; hmove = Scale "Horizontal move by" (-bg.width) (bg.width) 0; vmove = Scale "Vertical move by" (-bg.height) (bg.height) 0; _value = append_alpha blended merged_alpha, has_alpha bg = blended { // displace and resize fg (need to displace alpha too) fg' = moveit (put_alpha fg) bg hmove vmove; // transform to sRGB fg'' = colour_transform_to Image_type.sRGB (lose_alpha fg'); bg' = colour_transform_to Image_type.sRGB (lose_alpha bg); // alphas merged merged_alpha = get_alpha bg | get_alpha fg'; // blend together blended = (actions.lookup 0 1 method.value_thing) (get_alpha fg') opacity.value fg'' bg'; } } } } Filter_overlay_header_item = class Menuaction "_Overlay" "make a colour overlay of two monochrome images" { action a b = class _result { _vislevel = 3; colour = Option "Colour overlay as" [ _ "Green over Red", _ "Blue over Red", _ "Red over Green", _ "Red over Blue", _ "Blue over Green", _ "Green over Blue" ] 0; _result = map_binary overlay a b { overlay a b = image_set_type Image_type.sRGB [(a' ++ b' ++ 0), (a' ++ 0 ++ b'), (b' ++ a' ++ 0), (b' ++ 0 ++ a'), (0 ++ a' ++ b'), (0 ++ b' ++ a')]?colour { a' = colour_transform_to Image_type.B_W a; b' = colour_transform_to Image_type.B_W b; } } } } Filter_colourize_item = class Menuaction "_Colourize" "use a colour image or patch to tint a mono image" { action a b = class _result { _vislevel = 3; tint = Scale "Tint" 0 1 0.6; _result = map_binary tintit a b { tintit a b = colour_transform_to (get_type colour) colourized' { // get the mono thing first [mono, colour] = sortc (const (is_colour_type @ get_type)) [a, b]; colour' = tint * colour_transform_to Image_type.LAB colour; mono' = colour_transform_to Image_type.B_W mono; colourized = (mono' / 2.55) ++ colour'?1 ++ colour'?2; colourized' = image_set_type Image_type.LAB colourized; } } } } Filter_browse_multiband_item = class Menupullright "Bro_wse" "browse though an image, bitwise or bandwise" { Bandwise_item = class Menuaction "B_andwise" "browse through the bands of a multiband image" { action image = class _result { _vislevel = 3; band = Scale "Band" 0 (image.bands - 1) 0; display = Option "Display as" [ _ "Grey", _ "Green over Red", _ "Blue over Red", _ "Red over Green", _ "Red over Blue", _ "Blue over Green", _ "Green over Blue" ] 0; _result = output { down = (int) band.value; up = down + 1; remainder = band.value - down; fade x a = Vector [0], x == 0 = a * x; a = fade remainder image?up; b = fade (1 - remainder) image?down; output = [ a + b, a ++ b ++ 0, a ++ 0 ++ b, b ++ a ++ 0, b ++ 0 ++ a, 0 ++ a ++ b, 0 ++ b ++ a ] ? display; } } } Bitwise_item = class Menuaction "Bi_twise" "browse through the bits of an image" { action x = class _result { _vislevel = 3; bit = Islider "Bit" 0 (nbits - 1) (nbits - 1) { nbits = x.bits, is_Image x = 8; Islider c f t v = class scope.Scale c f t ((int) v) { Scale = Islider; } } _result = map_unary process x { process im = (im & (0x1 << bit.value)) != 0; } } } } #separator Filter_negative_item = class Menuaction "Photographic _Negative" "swap black and white" { action x = map_unary invert x { invert in = clip2fmt in.format (colour_transform_to (get_type in) rgb') { rgb = colour_transform_to Image_type.sRGB in; rgb' = 255 - rgb; } } } Filter_solarize_item = class Menuaction "_Solarise" "invert colours above a threshold" { action x = class _result { _vislevel = 3; kink = Scale "Kink" 0 1 0.5; _result = map_unary process x { process image = hist_map tab'''' image { // max pixel value for this format mx = Image_format.maxval image.format; // make a LUT ... just 8 and 16 bit tab = im_identity_ushort image.bands mx, image.format == Image_format.USHORT = im_identity image.bands; tab' = Image tab; // make basic ^ shape tab'' = tab' * (1 / kink), tab' < mx * kink = (mx - tab') / (1 - kink); tab''' = clip2fmt image.format tab''; // smooth a bit mask = matrix_blur (tab'''.width / 8); tab'''' = convsep mask tab'''; } } } } Filter_diffuse_glow_item = class Menuaction "_Diffuse Glow" "add a halo to highlights" { action x = class _result { _vislevel = 3; r = Scale "Radius" 0 50 5; highlights = Scale "Highlights" 0 100 95; glow = Scale "Glow" 0 1 0.5; colour = Colour_new_item.Widget_colour_item.action; _result = map_unary process x { process image = image' { mono = (unsigned char) (colour_transform_to Image_type.B_W image); thresh = hist_thresh (highlights.value / 100) mono; mask = mono > thresh; blur = convsep (matrix_gaussian_blur r.value) mask; colour' = colour_transform_to image.type colour; image' = image + colour' * glow * (blur / 255); } } } } Filter_drop_shadow_item = class Menuaction "Drop S_hadow" "add a drop shadow to an image" { action x = class _result { _vislevel = 3; sx = Scale "Horizontal shadow" (-50) 50 5; sy = Scale "Vertical shadow" (-50) 50 5; ss = Scale "Shadow softness" 0 20 5; bg_colour = Expression "Background colour" 255; sd_colour = Expression "Shadow colour" 128; alpha = Toggle "Shadow in alpha channel" false; transparent = Toggle "Zero pixels are transparent" false; _result = map_unary shadow x { shadow image = Image final { blur_size = ss.value * 2 + 1; // matrix we blur with to soften shadows blur_matrix = matrix_gaussian_blur blur_size; matrix_size = blur_matrix.width; matrix_radius = (int) (matrix_size / 2) + 1; // position and size of shadow image in input cods // before and after fuzzing shadow_rect = Rect sx.value sy.value image.width image.height; fuzzy_shadow_rect = shadow_rect.margin_adjust matrix_radius; // size and pos of final image, in input cods final_rect = image.rect.union fuzzy_shadow_rect; // hard part of shadow in output cods shadow_rect' = Rect (shadow_rect.left - final_rect.left) (shadow_rect.top - final_rect.top) shadow_rect.width shadow_rect.height; // make the shadow mask ... true for parts which cast // a shadow mask = (foldr1 bitwise_and @ bandsplit) (image.value != 0), transparent = image_new image.width image.height 1 Image_format.UCHAR Image_coding.NOCODING Image_type.B_W 255 0 0; mask' = embed 0 shadow_rect'.left shadow_rect'.top final_rect.width final_rect.height mask; mask'' = convsep blur_matrix mask'; // use mask to fade between bg and shadow colour mk_background colour = image_new final_rect.width final_rect.height image.bands image.format image.coding image.type colour 0 0; bg_image = mk_background bg_colour.expr; shadow_image = mk_background sd_colour.expr; bg = blend mask'' shadow_image bg_image; // make a full size mask fg_mask = embed 0 (image.rect.left - final_rect.left) (image.rect.top - final_rect.top) final_rect.width final_rect.height mask; // wrap up the input image ... put the shadow colour // around it, so if we are outputting a separate // alpha the shadow colour will be set correctly fg = insert (image.rect.left - final_rect.left) (image.rect.top - final_rect.top) image.value shadow_image; final // make a separate alpha = fg ++ mask'', alpha // paste image over shadow = if fg_mask then fg else bg; } } } } Filter_paint_text_item = class Menuaction "_Paint Text" "paint text into an image" { action x = paint_position, is_Group x = paint_area { paint_area = class _result { _check_args = [ [x, "x", check_Image] ]; _vislevel = 3; text = String "Text to paint" "Hello world!"; font = Fontname "Use font" Workspaces.Preferences.PAINTBOX_FONT; align = Option "Alignment" ["Left", "Centre", "Right"] 0; dpi = Expression "DPI" 300; colour = Expression "Text colour" 255; place = Region x (x.width / 4) (x.height / 4) (x.width / 2) (x.height / 2); _result = insert_noexpand place.left place.top (blend txt' fg place) x { fg = image_new place.width place.height x.bands x.format x.coding x.type colour.expr 0 0; txt = Image (im_text text.value font.value place.width align.value (to_real dpi)); bg = im_black place.width place.height 1; txt' = insert_noexpand 0 0 txt bg; } } paint_position = class _result { _vislevel = 3; text = Pattern_images_item.Text_item.action; colour = Expression "Text colour" 255; position = Option "Position" [ _ "North-west", _ "North", _ "North-east", _ "West", _ "Centre", _ "East", _ "South-west", _ "South", _ "South-east", _ "Specify in pixels" ] 4; left = Expression "Pixels from left" 0; top = Expression "Pixels from top" 0; _result = map_unary paint x { paint image = insert_noexpand x' y' place' image { xr = image.width - text.width; yr = image.height - text.height; x = left.expr, position == 9 = [0, xr / 2, xr]?(position % 3); y = top.expr, position == 9 = [0, yr / 2, yr]?(position / 3); x' = range 0 x (image.width - 1); y' = range 0 y (image.height - 1); w' = range 1 text.width (image.width - x'); h' = range 1 text.height (image.height - y'); place = extract_area x' y' w' h' image; text' = insert_noexpand 0 0 text (im_black w' h' 1); fg = image_new w' h' image.bands image.format image.coding image.type colour.expr 0 0; place' = blend text' fg place; } } } } } nip2-8.7.0/share/nip2/compat/7.28/Histogram.def0000644000175000017500000001474013224651032015573 00000000000000Hist_new_item = class Menupullright "_New" "new histogram" { Hist_item = class Menuaction "Histogram" "make an identity histogram" { action = class _result { _vislevel = 3; d = Option "Depth" ["8 bit", "16 bit"] 0; _result = Plot [] ([im_identity 1, im_identity_ushort 1 65536]?d); } } Hist_new_from_matrix = Matrix_buildlut_item; Hist_from_image_item = class Menuaction "Ta_g Image As Histogram" "set image Type to Histogram" { action x = hist_tag x; } Tone_item = class Menuaction "_Tone Curve" "make a new tone mapping curve" { action = class _result { _vislevel = 3; d = Option "Depth" ["8 bit", "16 bit"] 0; b = Scale "Black point" 0 100 0; w = Scale "White point" 0 100 100; sp = Scale "Shadow point" 0.1 0.3 0.2; mp = Scale "Mid-tone point" 0.4 0.6 0.5; hp = Scale "Highlight point" 0.7 0.9 0.8; sa = Scale "Shadow adjust" (-15) 15 0; ma = Scale "Mid-tone adjust" (-30) 30 0; ha = Scale "Highlight adjust" (-15) 15 0; _result = tone_build fmt b w sp mp hp sa ma ha { fmt = [Image_format.UCHAR, Image_format.USHORT]?d; } } } } Hist_convert_to_hist_item = class Menuaction "Con_vert to Histogram" "convert anything to a histogram" { action x = hist_tag (to_image x); } Hist_find_item = class Menupullright "_Find" "find a histogram" { Oned_item = class Menuaction "_One Dimension" "for a n-band image, make an n-band 1D histogram" { action x = map_unary hist_find x; } Nd_item = class Menuaction "_Many Dimensions" "for a n-band image, make an n-dimensional histogram" { action x = class _result { _vislevel = 3; // default to something small-ish bins = Expression "Number of bins in each dimension" 8; _result = map_unary process x { process in = hist_find_nD bins in; } } } Indexed_item = class Menuaction "_Indexed" "use a 1-band index image to pick bins for an n-band image" { action x y = map_binary map x y { map a b = hist_find_indexed index im { [im, index] = sortc (const is_index) [a, b]; is_index x = has_image x && b == 1 && (f == Image_format.UCHAR || f == Image_format.USHORT) { im = get_image x; b = get_bands x; f = get_format x; } } } } } Hist_map_item = class Menuaction "_Map" "map an image through a histogram" { action x y = map_binary map x y { map a b = hist_map hist im { [im, hist] = sortc (const is_hist) [a, b]; } } } Hist_eq_item = Filter_enhance_item.Hist_equal_item; #separator Hist_cum_item = class Menuaction "_Integrate" "form cumulative histogram" { action x = map_unary hist_cum x; } Hist_diff_item = class Menuaction "_Differentiate" "find point-to-point differences (inverse of Integrate)" { action x = map_unary hist_diff x; } Hist_norm_item = class Menuaction "N_ormalise" "normalise a histogram" { action x = map_unary hist_norm x; } Hist_match_item = class Menuaction "Ma_tch" "find LUT which will match first histogram to second" { action in ref = map_binary hist_match in ref; } Hist_zerox_item = class Menuaction "_Zero Crossings" "find zero crossings" { action x = class _result { _vislevel = 3; edge = Option "Direction" [ "Positive-going", "Negative-going" ] 0; _result = map_unary (zerox (if edge == 0 then -1 else 1)) x; } } #separator Hist_profile_item = class Menuaction "Find _Profile" "search from image edges for non-zero pixels" { action x = class _result { _vislevel = 3; edge = Option "Search from" [ "Top edge down", "Left edge to right", "Bottom edge up", "Right edge to left" ] 2; _result = map_unary profile x { profile image = (Plot_histogram @ hist_tag) [ profilemb 0 image.value, profilemb 1 image.value, profilemb 0 (fliptb image.value), profilemb 1 (fliplr image.value) ]?edge; // im_profile only does 1 band images :-( profilemb d = bandjoin @ map (converse im_profile d) @ bandsplit; } } } Hist_project_item = class Menuaction "Find Pro_jections" "find horizontal and vertical projections" { action x = class { _vislevel = 2; _result = map_unary project x; // extract the result ... could be a group extr n = Plot_histogram _result?n, is_list _result = Group (map (Plot_histogram @ converse subscript n) _result.value); horizontal = extr 0; vertical = extr 1; centre = (gravity horizontal, gravity vertical); } } #separator Hist_graph_item = class Menuaction "P_lot Slice" "plot a slice along a guide or arrow" { action x = class _value { _vislevel = 3; width = Scale "Width" 1 40 1; displace = Scale "Horizontal displace" (-50) 50 0; vdisplace = Scale "Vertical displace" (-50) 50 0; _value = map_unary graph x { graph arrow = hist_tag area' { area = extract_arrow displace.value vdisplace.value width.value arrow; // squish vertically to get an average area' = resize Interpolate_bilinear 1 (1 / width.value) area; } } } } Extract_arrow_item = class Menuaction "Extract _Arrow" "extract the area around an arrow" { action x = class _value { _vislevel = 3; width = Scale "Width" 1 40 1; displace = Scale "Horizontal displace" (-50) 50 0; vdisplace = Scale "Vertical displace" (-50) 50 0; _value = map_unary (extract_arrow displace.value vdisplace.value width.value) x; } } Hist_plot_item = class Menuaction "Plot _Object" "plot an object as a bar, point or line graph" { action x = class _result { _vislevel = 3; format = Option_enum "Format" Plot_format.names "YYYY"; style = Option_enum "Style" Plot_style.names "Line"; auto = Toggle "Auto Range" true; xmin = Expression "X range minimum" 0; xmax = Expression "X range maximum" 1; ymin = Expression "Y range minimum" 0; ymax = Expression "Y range maximum" 1; _result = Plot options (image x) { options = [$style => style.value, $format => format.value] ++ range; range = [], auto = [$xmin => xmin.expr, $xmax => xmax.expr, $ymin => ymin.expr, $ymax => ymax.expr]; image x = image (extract_arrow 0 0 1 x), is_Arrow x = get_image x, has_image x = x2b im, b == 1 = im { im = get_image (to_image x); w = get_width im; h = get_height im; b = get_bands im; // matrix to image makes a 1-band mxn image // we need to put columns into bands x2b im = bandjoin (map extract_col [0 .. w - 1]) { extract_col x = extract_area x 0 1 h im; } } } } } nip2-8.7.0/share/nip2/compat/7.28/Object.def0000644000175000017500000000222013224651032015032 00000000000000Object_duplicate_item = class Menuaction "_Duplicate" "take a copy of an object" { action x = map_unary copy x; } #separator Object_list_to_group_item = class Menuaction "_List to Group" "turn a list of objects into a group" { action x = to_group x; } Object_group_to_list_item = class Menuaction "_Group to List" "turn a group into a list of objects" { action x = to_list x; } #separator Object_break_item = class Menuaction "_Break Up Object" "break an object into a list of components" { action x = map_unary break x { break x = bandsplit x, is_Image x = map Vector x.value, is_Matrix x = x.value, is_Vector x || is_Real x = error "Breakup: not Image/Matrix/Vector/Real"; } } Object_assemble_item = class Menuaction "_Assemble Objects" "assemble a list (or group) of objects into a single object" { action x = map_unary ass x { ass x = [], x == [] = Vector x, is_real_list x = Matrix x, is_matrix x = bandjoin x, is_listof is_Image x = Vector (map get_value x), is_listof is_Real x = Matrix (map get_value x), is_listof is_Vector x = error "Assemble: not list of Image/Vector/Real/image/real"; } } nip2-8.7.0/share/nip2/compat/7.28/Makefile.in0000644000175000017500000003675113350464104015233 00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = share/nip2/compat/7.28 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(startdir)" DATA = $(start_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BISON = @BISON@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DLLWRAP = @DLLWRAP@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FFTW3_CFLAGS = @FFTW3_CFLAGS@ FFTW3_LIBS = @FFTW3_LIBS@ FGREP = @FGREP@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_LIBS = @GSL_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ IP_CFLAGS = @IP_CFLAGS@ IP_LIBS = @IP_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBGOFFICE_CFLAGS = @LIBGOFFICE_CFLAGS@ LIBGOFFICE_LIBS = @LIBGOFFICE_LIBS@ LIBGSF_CFLAGS = @LIBGSF_CFLAGS@ LIBGSF_LIBS = @LIBGSF_LIBS@ LIBGVC_CFLAGS = @LIBGVC_CFLAGS@ LIBGVC_LIBS = @LIBGVC_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ 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@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ REQUIRED_PACKAGES_CFLAGS = @REQUIRED_PACKAGES_CFLAGS@ REQUIRED_PACKAGES_LIBS = @REQUIRED_PACKAGES_LIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOP_SRCDIR = @TOP_SRCDIR@ UPDATE_DESKTOP_DATABASE = @UPDATE_DESKTOP_DATABASE@ UPDATE_MIME_DATABASE = @UPDATE_MIME_DATABASE@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XDG_OPEN = @XDG_OPEN@ XGETTEXT = @XGETTEXT@ 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@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ startdir = $(pkgdatadir)/compat/7.28 start_DATA = \ Math.def \ Image.def \ Colour.def \ Tasks.def \ Object.def \ Filter.def \ Matrix.def \ Widgets.def \ Histogram.def \ _joe_extra.def \ _joe_utilities.def \ _convert.def \ _generate.def \ _list.def \ _predicate.def \ _stdenv.def \ _Object.def \ _types.def EXTRA_DIST = $(start_DATA) all: all-am .SUFFIXES: $(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) --foreign share/nip2/compat/7.28/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign share/nip2/compat/7.28/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): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-startDATA: $(start_DATA) @$(NORMAL_INSTALL) @list='$(start_DATA)'; test -n "$(startdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(startdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(startdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(startdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(startdir)" || exit $$?; \ done uninstall-startDATA: @$(NORMAL_UNINSTALL) @list='$(start_DATA)'; test -n "$(startdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(startdir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: 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 check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(startdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-startDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-startDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-startDATA install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags-am uninstall uninstall-am uninstall-startDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: nip2-8.7.0/share/nip2/compat/7.28/Matrix.def0000644000175000017500000002433413224651032015102 00000000000000 Matrix_build_item = class Menupullright "_New" "make a new matrix of some sort" { Plain_item = class Menuaction "_Plain" "make a new plain matrix widget" { action = Matrix (identity_matrix 3); } Convolution_item = class Menuaction "_Convolution" "make a new convolution matrix widget" { action = Matrix_con 1 0 [[0, 0, 0], [0, 1, 0], [0, 0, 0]]; } Recombination_item = class Menuaction "_Recombination" "make a new recombination matrix widget" { action = Matrix_rec (identity_matrix 3); } Morphology_item = class Menuaction "_Morphology" "make a new morphology matrix widget" { action = Matrix_mor [[0, 0, 0], [0, 255, 0], [0, 0, 0]]; } sep1 = Menuseparator; Matrix_identity_item = class Menuaction "_Identity" "make an identity matrix" { action = class _result { _vislevel = 3; s = Expression "Size" 5; _result = Matrix (identity_matrix s.expr); } } Matrix_series_item = class Menuaction "_Series" "make a series" { action = class _result { _vislevel = 3; s = Expression "Start value" 0; t = Expression "Step by" 1; e = Expression "End value" 5; _result = Matrix (transpose [series]) { series = [to_real s, to_real t.. to_real e]; } } } Matrix_square_item = class Menuaction "_Square" "make a square matrix" { action = class _result { _vislevel = 3; s = Expression "Size" 5; _result = Matrix_con (s.expr ** 2) 0 square { line = take s.expr [1, 1 ..]; square = replicate s.expr line; } } } Matrix_circular_item = class Menuaction "_Circular" "make a circular matrix" { action = class _result { _vislevel = 3; r = Expression "Radius" 5; _result = Matrix_con (sum circle) 0 circle { line = [-r.expr .. r.expr]; xes = replicate (2 * r.expr + 1) line; yes = transpose xes; circle = map2 (map2 pyth) xes yes { pyth a b = 1, (a**2 + b**2) ** 0.5 <= r.expr = 0; } } } } Matrix_gaussian_item = class Menuaction "_Gaussian" "make a gaussian matrix" { action = class _result { _vislevel = 3; s = Scale "Sigma" 0.001 10 1; ma = Scale "Minimum amplitude" 0 1 0.2; integer = Toggle "Integer" false; _result = fn s.value ma.value { fn = im_gauss_imask, integer = im_gauss_dmask; } } } Matrix_laplacian_item = class Menuaction "_Laplacian" "make the Laplacian of a Gaussian matrix" { action = class _result { _vislevel = 3; s = Scale "Sigma" 0.001 10 1.5; ma = Scale "Minimum amplitude" 0 1 0.1; integer = Toggle "Integer" false; _result = fn s.value ma.value { fn = im_log_imask, integer = im_log_dmask; } } } } Matrix_to_matrix_item = class Menuaction "Con_vert to Matrix" "convert anything to a matrix" { action x = to_matrix x; } #separator Matrix_extract_item = class Menupullright "_Extract" "extract rows or columns from a matrix" { Rows_item = class Menuaction "_Rows" "extract rows" { action x = class _result { _vislevel = 3; first = Expression "Extract from row" 0; number = Expression "Extract this many rows" 1; _result = map_unary process x { process x = extract_area 0 first (get_width x) number x; } } } Columns_item = class Menuaction "_Columns" "extract columns" { action x = class _result { _vislevel = 3; first = Expression "Extract from column" 0; number = Expression "Extract this many columns" 1; _result = map_unary process x { process mat = extract_area first 0 number (get_height x) x; } } } Area_item = class Menuaction "_Area" "extract area" { action x = class _result { _vislevel = 3; left = Expression "First column" 0; top = Expression "First row" 0; width = Expression "Number of columns" 1; height = Expression "Number of rows" 1; _result = map_unary process x { process mat = extract_area left top width height x; } } } Diagonal_item = class Menuaction "_Diagonal" "extract diagonal" { action x = class _result { _vislevel = 3; which = Option "Extract" [ "Leading Diagonal", "Trailing Diagonal" ] 0; _result = map_unary process x { process mat = mat.Matrix_base (map2 extr [0..] mat.value), which == 0 = mat.Matrix_base (map2 extr [mat.width - 1, mat.width - 2 .. 0] mat.value); extr n l = [l?n]; } } } } Matrix_insert_item = class Menupullright "_Insert" "insert rows or columns into a matrix" { // make a new 8-bit uchar image of wxh with pixels set to p // use to generate new cells newim w h p = image_new w h 1 Image_format.UCHAR Image_coding.NOCODING Image_type.B_W p 0 0; Rows_item = class Menuaction "_Rows" "insert rows" { action x = class _result { _vislevel = 3; first = Expression "Insert at row" 0; number = Expression "Insert this many rows" 1; item = Expression "Set new cells to" 0; _result = map_unary process x { process x = foldl1 join_tb (concat [top, new, bottom]) { top = [extract_area 0 0 w f x], f > 0 = []; new = [(if is_Matrix x then to_matrix else id) (newim w number item.expr)]; bottom = [extract_area 0 f w (h - f) x], f < h = []; f = to_real first; w = get_width x; h = get_height x; } } } } Columns_item = class Menuaction "_Columns" "insert columns" { action x = class _result { _vislevel = 3; first = Expression "Insert at column" 0; number = Expression "Insert this many columns" 1; item = Expression "Set new cells to" 0; _result = map_unary process x { process x = foldl1 join_lr (concat [left, new, right]) { left = [extract_area 0 0 f h x], f > 0 = []; new = [(if is_Matrix x then to_matrix else id) (newim number h item.expr)]; right = [extract_area f 0 (w - f) h x], f < w = []; f = to_real first; w = get_width x; h = get_height x; } } } } } Matrix_delete_item = class Menupullright "_Delete" "delete rows or columns from a matrix" { // remove number of items, starting at first delete first number l = take (to_real first) l ++ drop (to_real first + to_real number) l; Rows_item = class Menuaction "_Rows" "delete rows" { action x = class _result { _vislevel = 3; first = Expression "Delete from row" 0; number = Expression "Delete this many rows" 1; _result = map_unary process x { process x = foldl1 join_tb (concat [top, bottom]) { top = [extract_area 0 0 w f x], f > 0 = []; bottom = [extract_area 0 b w (h - b) x], b < h = []; f = to_real first; n = to_real number; b = f + n; w = get_width x; h = get_height x; } } } } Columns_item = class Menuaction "_Columns" "delete columns" { action x = class _result { _vislevel = 3; first = Expression "Delete from column" 0; number = Expression "Delete this many columns" 1; _result = map_unary process x { process x = foldl1 join_lr (concat [left, right]) { left = [extract_area 0 0 f h x], f > 0 = []; right = [extract_area r 0 (w - r) h x], r < w = []; f = to_real first; n = to_real number; r = f + n; w = get_width x; h = get_height x; } } } } } Matrix_join = class Menupullright "_Join" "join two matricies" { Left_right_item = class Menuaction "_Left to Right" "join two matricies left-right" { action a b = map_binary join_lr a b; } Top_bottom_item = class Menuaction "_Top to Bottom" "joiin two matricies top-bottom" { action a b = map_binary join_tb a b; } } Matrix_rotate_item = class Menupullright "_Rotate" "clockwise rotation by fixed angles" { rot90 = Image_transform_item.Rotate_item.Fixed_item.Rot90_item; rot180 = Image_transform_item.Rotate_item.Fixed_item.Rot180_item; rot270 = Image_transform_item.Rotate_item.Fixed_item.Rot270_item; Matrix_rot45_item = class Menuaction "_45 Degrees" "45 degree rotate (square, odd-length-sides only)" { action x = map_unary rot45 x; } } Matrix_flip_item = Image_transform_item.Flip_item; Matrix_sort_item = class Menuaction "_Sort" "sort by column or row" { action x = class _result { _vislevel = 3; o = Option (_ "Orientation") [ _ "Sort by column", _ "Sort by row" ] 0; i = Expression (_ "Sort on index") 0; d = Option (_ "Direction") [ _ "Ascending", _ "Descending" ] 0; _result = map_unary sort x { idx = to_real i; pred a b = a?idx <= b?idx, d == 0 = a?idx >= b?idx; sort x = (x.Matrix_base @ sortc pred) x.value, o == 0 = (x.Matrix_base @ transpose @ sortc pred @ transpose) x.value; } } } #separator Matrix_invert_item = class Menuaction "In_vert" "calculate inverse matrix" { action x = map_unary (converse power (-1)) x; } Matrix_transpose_item = class Menuaction "_Transpose" "swap rows and columns" { action x = map_unary transpose x; } #separator Matrix_plot_scatter_item = class Menuaction "_Plot Scatter" "plot a scatter graph of a matrix of [x,y1,y2,..] coordinates" { action x = class _result { _check_args = [ [x, "x", check_Matrix] ]; _vislevel = 3; auto = Toggle "Auto Range" true; xmin = Expression "X range minimum" 0; xmax = Expression "X range maximum" 1; ymin = Expression "Y range minimum" 0; ymax = Expression "Y range maximum" 1; _result = Plot options ((x2b @ get_image @ to_image) x) { options = [$style => Plot_style.POINT, $format => Plot_format.XYYY] ++ range; range = [], auto = [$xmin => xmin.expr, $xmax => xmax.expr, $ymin => ymin.expr, $ymax => ymax.expr]; // matrix to image makes a 1-band mxn image // we need to put columns into bands x2b im = bandjoin (map extract_col [0 .. w - 1]) { w = get_width im; h = get_height im; b = get_bands im; extract_col x = extract_area x 0 1 h im; } } } } Matrix_plot_item = Hist_plot_item; Matrix_buildlut_item = class Menuaction "_Build LUT From Scatter" "make a lookup table from a matrix of [x,y1,y2..] coordinates" { action x = class _result { _check_args = [ [x, "x", check_Matrix] ]; _result = buildlut x; } } nip2-8.7.0/share/nip2/compat/7.28/_convert.def0000644000175000017500000004214013224651032015450 00000000000000 /* Try to make a Matrix ... works for Vector/Image/Real, plus image/real */ to_matrix x = to_matrix x.expr, is_Expression x = x, is_Matrix x = oo_unary_function to_matrix_op x, is_class x = tom x { to_matrix_op = Operator "to_matrix" tom Operator_type.COMPOUND false; tom x = Matrix (itom x), is_image x = Matrix [[x]], is_real x = Matrix [x], is_real_list x = Matrix x, is_matrix x = error (_ "bad arguments to " ++ "to_matrix"); itom i = (im_vips2mask ((double) i)).value, is_image i = error (_ "not image"); } /* Try to make an Image ... works for Vector/Matrix/Real, plus image/real * Special case for Colour ... pull out the colour_space and set Type in the * image. */ to_image x = to_image x.expr, is_Expression x = x, is_Image x = Image (image_set_type (Image_type.colour_spaces.lookup 0 1 x.colour_space) (mtoi [x.value])), is_Colour x = oo_unary_function to_image_op x, is_class x = toi x { to_image_op = Operator "to_image" toi Operator_type.COMPOUND false; toi x = Image x, is_image x = Image (mtoi [[x]]), is_real x = Image (mtoi [x]), is_real_list x = Image (mtoi x), is_matrix x = error (_ "bad arguments to " ++ "to_image"); // [[real]] -> image mtoi m = im_mask2vips (Matrix m), width != 3 = joinup (im_mask2vips (Matrix m)) { width = len m?0; height = len m; joinup i = b1 ++ b2 ++ b3 { b1 = extract_area 0 0 1 height i; b2 = extract_area 1 0 1 height i; b3 = extract_area 2 0 1 height i; } } } // like to_image, but we do 1x1 pixel + x, then embed it up // always make an unwrapped image for speed ... this gets used by ifthenelse // and stuff like that // format can be NULL, meaning set format from x to_image_size width height bands format x = x, is_image x = x.value, is_Image x = im'' { // we want x to set the target format if we don't have one, so we // can't use image_new im = im_black 1 1 bands + x; im' = clip2fmt format im, format != NULL = im; im'' = embed 1 0 0 width height im'; } /* Try to make a Colour. */ to_colour x = to_colour x.expr, is_Expression x = x, is_Colour x = to_colour (extract_area x.left x.top 1 1 x.image), is_Mark x = oo_unary_function to_colour_op x, is_class x = toc x { to_colour_op = Operator "to_colour" toc Operator_type.COMPOUND false; toc x = Colour (colour_space (get_type x)) (map mean (bandsplit (get_image x))), has_image x && has_type x = Colour "sRGB" [x, x, x], is_real x // since Colour can't do mono = Colour "sRGB" x, is_real_list x && is_list_len 3 x = map toc x, is_matrix x = error (_ "bad arguments to " ++ "to_colour"); colour_space type = table.get_name type, table.has_name type = error (_ "unable to make Colour from " ++ table.get_name type ++ _ " image") { table = Image_type.colour_spaces; } } /* Try to make a real. (not a Real!) */ to_real x = to_real x.expr, is_Expression x = oo_unary_function to_real_op x, is_class x = tor x { to_real_op = Operator "to_real" tor Operator_type.COMPOUND false; tor x = x, is_real x = abs x, is_complex x = 1, is_bool x && x = 0, is_bool x && !x = error (_ "bad arguments to " ++ "to_real"); } to_int x = (int) (to_real x); /* Try to make a list ... ungroup, basically. We remove the innermost layer of * Groups. */ to_list x = x.value, is_Group x && !contains_Group x.value = Group (map to_list x.value), is_Group x = x; /* Try to make a group. The innermost list objects become Group()'d. */ to_group x = Group x, is_list x && !contains_Group x = Group (map to_group x.value), is_Group x = x; /* Parse a positive integer. */ parse_pint l = foldl acc 0 l { acc sofar ch = sofar * 10 + parse_c ch; /* Turn a char digit to a number. */ parse_c ch = error (_ "not a digit"), !is_digit ch = (int) ch - (int) '0'; } /* Parse an integer, with an optional sign character. */ parse_int l = error (_ "badly formed number"), !is_list_len 2 parts = sign * n { parts = splitpl [member "+-", is_digit] l; n = parse_pint parts?1; sign = 1, parts?0 == [] || parts?0 == "+" = -1; } /* Parse a float. * [+-]?[0-9]*([.][0-9]*)?(e[0-9]+)? */ parse_float l = err, !is_list_len 4 parts = (ipart + fpart) * 10 ** exp { err = error (_ "badly formed number"); parts = splitpl [ member "+-0123456789", member ".0123456789", member "eE", member "+-0123456789" ] l; ipart = parse_int parts?0; fpart = 0, parts?1 == []; = err, parts?1?0 != '.' = parse_pint (tl parts?1) / 10 ** (len parts?1 - 1); exp = 0, parts?2 == [] && parts?3 == [] = err, parts?2 == [] = parse_int parts?3; } /* Parse a time in "hh:mm:ss" into seconds. We could do this in one line :) = (sum @ map2 multiply (iterate (multiply 60) 1) @ reverse @ map parse_pint @ map (subscript (splitpl [is_digit, equal ':', is_digit, equal ':', is_digit] l))) [0,2,4]; but it's totally unreadable. */ parse_time l = error (_ "badly formed time"), !is_list_len 5 parts = s + 60 * m + 60 * 60 * h { parts = splitpl [is_digit, equal ':', is_digit, equal ':', is_digit] l; h = parse_int parts?0; m = parse_int parts?2; s = parse_int parts?4; } /* matrix to convert D65 XYZ to D50 XYZ ... direct conversion, found by * measuring a macbeth chart in D50 and D65 and doing a LMS to get a matrix */ D652D50_direct = Matrix [[ 1.13529, -0.0604663, -0.0606321 ], [ 0.0975399, 0.935024, -0.0256156 ], [ -0.0336428, 0.0414702, 0.994135 ]]; D502D65_direct = D652D50_direct ** -1; /* Convert normalised XYZ to bradford RGB. */ XYZ2RGBbrad = Matrix [[0.8951, 0.2664, -0.1614], [-0.7502, 1.7135, 0.0367], [0.0389, -0.0685, 1.0296]]; /* Convert bradford RGB to normalised XYZ. */ RGBbrad2XYZ = XYZ2RGBbrad ** -1; D93_whitepoint = Vector [89.7400, 100, 130.7700]; D75_whitepoint = Vector [94.9682, 100, 122.5710]; D65_whitepoint = Vector [95.0470, 100, 108.8827]; D55_whitepoint = Vector [95.6831, 100, 92.0871]; D50_whitepoint = Vector [96.4250, 100, 82.4680]; A_whitepoint = Vector [109.8503, 100, 35.5849]; // 2856K B_whitepoint = Vector [99.0720, 100, 85.2230]; // 4874K C_whitepoint = Vector [98.0700, 100, 118.2300]; // 6774K E_whitepoint = Vector [100, 100, 100]; // ill. free D3250_whitepoint = Vector [105.6590, 100, 45.8501]; Whitepoints = Enum [ $D93 => D93_whitepoint, $D75 => D75_whitepoint, $D65 => D65_whitepoint, $D55 => D55_whitepoint, $D50 => D50_whitepoint, $A => A_whitepoint, $B => B_whitepoint, $C => C_whitepoint, $E => E_whitepoint, $D3250 => D3250_whitepoint ]; /* Convert D50 XYZ to D65 using the bradford chromatic adaptation approx. */ im_D502D65 xyz = xyz''' { xyz' = xyz / D50_whitepoint; rgb = recomb XYZ2RGBbrad xyz'; // move white in bradford RGB rgb' = rgb / Vector [0.94, 1.02, 1.33]; xyz'' = recomb RGBbrad2XYZ rgb'; // back to D65 xyz''' = xyz'' * D65_whitepoint; } /* Convert D65 XYZ to D50 using the bradford approx. */ im_D652D50 xyz = xyz''' { xyz' = xyz / D65_whitepoint; rgb = recomb XYZ2RGBbrad xyz'; // move white in bradford RGB rgb' = rgb * Vector [0.94, 1.02, 1.33]; xyz'' = recomb RGBbrad2XYZ rgb'; xyz''' = xyz'' * D50_whitepoint; } /* Convert D50 XYZ to Lab. */ im_D50XYZ2Lab xyz = im_XYZ2Lab_temp xyz D50_whitepoint.value?0 D50_whitepoint.value?1 D50_whitepoint.value?2; im_D50Lab2XYZ lab = im_Lab2XYZ_temp lab D50_whitepoint.value?0 D50_whitepoint.value?1 D50_whitepoint.value?2; /* ... and mono conversions */ im_sRGB2mono in = (image_set_type Image_type.B_W @ clip2fmt (get_header "BandFmt" in) @ recomb (Matrix [[.3, .6, .1]])) in; im_mono2sRGB in = image_set_type Image_type.sRGB (in ++ in ++ in); im_sRGB2Lab = im_XYZ2Lab @ im_sRGB2XYZ; im_Lab2sRGB = im_XYZ2sRGB @ im_Lab2XYZ; // from the 16 bit RGB and GREY formats im_1628 x = im_clip (x >> 8); im_162f x = x / 256; im_8216 x = (im_clip2us x) << 8; im_f216 x = im_clip2us (x * 256); im_RGB162GREY16 in = (image_set_type Image_type.GREY16 @ clip2fmt (get_header "BandFmt" in) @ recomb (Matrix [[.3, .6, .1]])) in; im_GREY162RGB16 in = image_set_type Image_type.RGB16 (in ++ in ++ in); /* apply a func to an image ... make it 1 or 3 bands, and reapply other bands * on the way out. Except if it's LABPACK. */ colour_apply fn x = fn x, b == 1 || b == 3 || c == Image_coding.LABPACK = x'' { b = get_bands x; c = get_coding x; first = extract_bands 0 3 x, b > 3 = extract_bands 0 1 x; tail = extract_bands 3 (b - 3) x, b > 3 = extract_bands 1 (b - 1) x; x' = fn first; x'' = x' ++ clip2fmt (get_format x') tail; } /* Any 1-ary colour op, applied to Vector/Image/Matrix or image */ colour_unary fn x = oo_unary_function colour_op x, is_class x = colour_apply fn x, is_image x = colour_apply fn [x], is_real x = error (_ "bad arguments to " ++ "colour_unary") { // COMPOUND_REWRAP ... signal to the colour class to go to image and // back colour_op = Operator "colour_unary" colour_object Operator_type.COMPOUND_REWRAP false; colour_object x = colour_real_list x, is_real_list x = map colour_real_list x, is_matrix x = colour_apply fn x, is_image x = error (_ "bad arguments to " ++ "colour_unary"); colour_real_list l = (to_matrix (fn (float) (to_image (Vector l)).value)).value?0; } /* Any symmetric 2-ary colour op, applied to Vector/Image/Matrix or image ... * name is op name for error messages etc. */ colour_binary name fn x y = oo_binary_function colour_op x y, is_class x = oo_binary'_function colour_op x y, is_class y = fn x y, is_image x && is_image y = error (_ "bad arguments to " ++ name) { colour_op = Operator name colour_object Operator_type.COMPOUND_REWRAP true; colour_object x y = fn x y, is_image x && is_image y = colour_real_list fn x y, is_real_list x && is_real_list y = map (colour_real_list fn x) y, is_real_list x && is_matrix y = map (colour_real_list (converse fn) y) x, is_matrix x && is_real_list y = map2 (colour_real_list fn) x y, is_matrix x && is_matrix y = error (_ "bad arguments to " ++ name); colour_real_list fn l1 l2 = (to_matrix (fn i1 i2)).value?0 { i1 = (float) (to_image (Vector l1)).value; i2 = (float) (to_image (Vector l2)).value; } } _colour_conversion_table = [ /* Lines are [space-from, space-to, conversion function]. Could do * this as a big array, but table lookup feels safer. */ [B_W, B_W, image_set_type B_W], [B_W, XYZ, im_sRGB2XYZ @ im_mono2sRGB @ im_clip], [B_W, YXY, im_XYZ2Yxy @ im_sRGB2XYZ @ im_mono2sRGB @ im_clip], [B_W, LAB, im_sRGB2Lab @ im_mono2sRGB @ im_clip], [B_W, LCH, im_Lab2LCh @ im_sRGB2Lab @ im_mono2sRGB @ im_clip], [B_W, UCS, im_XYZ2UCS @ im_sRGB2XYZ @ im_mono2sRGB @ im_clip], [B_W, RGB, im_XYZ2disp @ im_sRGB2XYZ @ im_mono2sRGB @ im_clip], [B_W, sRGB, im_mono2sRGB @ im_clip], [B_W, RGB16, image_set_type RGB16 @ im_8216 @ im_mono2sRGB], [B_W, GREY16, image_set_type GREY16 @ im_8216], [B_W, LABQ, im_Lab2LabQ @ im_sRGB2Lab @ im_mono2sRGB @ im_clip], [B_W, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_sRGB2Lab @ im_mono2sRGB @ im_clip], [XYZ, B_W, im_sRGB2mono @ im_XYZ2sRGB @ im_clip2f], [XYZ, XYZ, image_set_type XYZ], [XYZ, YXY, im_XYZ2Yxy @ im_clip2f], [XYZ, LAB, im_XYZ2Lab @ im_clip2f], [XYZ, LCH, im_Lab2LCh @ im_XYZ2Lab], [XYZ, UCS, im_XYZ2UCS @ im_clip2f], [XYZ, RGB, im_XYZ2disp @ im_clip2f], [XYZ, sRGB, im_XYZ2sRGB @ im_clip2f], [XYZ, LABQ, im_Lab2LabQ @ im_XYZ2Lab @ im_clip2f], [XYZ, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_XYZ2Lab @ im_clip2f], [YXY, B_W, im_sRGB2mono @ im_XYZ2sRGB @ im_Yxy2XYZ @ im_clip2f], [YXY, XYZ, im_Yxy2XYZ @ im_clip2f], [YXY, YXY, image_set_type YXY], [YXY, LAB, im_XYZ2Lab @ im_Yxy2XYZ @ im_clip2f], [YXY, LCH, im_Lab2LCh @ im_XYZ2Lab @ im_Yxy2XYZ @ im_clip2f], [YXY, UCS, im_XYZ2UCS @ im_Yxy2XYZ @ im_clip2f], [YXY, RGB, im_XYZ2disp @ im_Yxy2XYZ @ im_clip2f], [YXY, sRGB, im_XYZ2sRGB @ im_Yxy2XYZ @ im_clip2f], [YXY, LABQ, im_Lab2LabQ @ im_XYZ2Lab @ im_Yxy2XYZ @ im_clip2f], [YXY, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_XYZ2Lab @ im_Yxy2XYZ @ im_clip2f], [LAB, B_W, im_sRGB2mono @ im_Lab2sRGB @ im_Lab2XYZ @ im_clip2f], [LAB, XYZ, im_Lab2XYZ @ im_clip2f], [LAB, YXY, im_XYZ2Yxy @ im_Lab2XYZ @ im_clip2f], [LAB, LAB, image_set_type LAB @ im_clip2f], [LAB, LCH, im_Lab2LCh @ im_clip2f], [LAB, UCS, im_Lab2UCS @ im_clip2f], [LAB, RGB, im_Lab2disp @ im_clip2f], [LAB, sRGB, im_Lab2sRGB @ im_clip2f], [LAB, LABQ, im_Lab2LabQ @ im_clip2f], [LAB, LABS, im_Lab2LabS @ im_clip2f], [LCH, B_W, im_sRGB2mono @ im_Lab2sRGB @ im_LCh2Lab @ im_clip2f], [LCH, XYZ, im_Lab2XYZ @ im_LCh2Lab @ im_clip2f], [LCH, YXY, im_XYZ2Yxy @ im_Lab2sRGB @ im_LCh2Lab @ im_clip2f], [LCH, LAB, im_LCh2Lab @ im_clip2f], [LCH, LCH, image_set_type LCH], [LCH, UCS, im_LCh2UCS @ im_clip2f], [LCH, RGB, im_Lab2disp @ im_LCh2Lab @ im_clip2f], [LCH, sRGB, im_Lab2sRGB @ im_LCh2Lab @ im_clip2f], [LCH, LABQ, im_Lab2LabQ @ im_LCh2Lab @ im_clip2f], [LCH, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_LCh2Lab @ im_clip2f], [UCS, B_W, im_sRGB2mono @ im_XYZ2sRGB @ im_UCS2XYZ @ im_clip2f], [UCS, XYZ, im_UCS2XYZ @ im_clip2f], [UCS, YXY, im_XYZ2Yxy @ im_Lab2XYZ @ im_UCS2Lab @ im_clip2f], [UCS, LAB, im_UCS2Lab @ im_clip2f], [UCS, LCH, im_UCS2LCh @ im_clip2f], [UCS, UCS, image_set_type UCS], [UCS, RGB, im_Lab2disp @ im_UCS2Lab @ im_clip2f], [UCS, sRGB, im_Lab2sRGB @ im_UCS2Lab @ im_clip2f], [UCS, LABQ, im_Lab2LabQ @ im_UCS2Lab @ im_clip2f], [UCS, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_UCS2Lab @ im_clip2f], [RGB, B_W, im_sRGB2mono @ im_XYZ2sRGB @ im_disp2XYZ @ im_clip], [RGB, XYZ, im_disp2XYZ @ im_clip], [RGB, YXY, im_XYZ2Yxy @ im_disp2XYZ @ im_clip], [RGB, LAB, im_disp2Lab @ im_clip], [RGB, LCH, im_Lab2LCh @ im_disp2Lab @ im_clip], [RGB, UCS, im_Lab2UCS @ im_disp2Lab @ im_clip], [RGB, RGB, image_set_type RGB], [RGB, sRGB, im_XYZ2sRGB @ im_disp2XYZ @ im_clip], [RGB, RGB16, image_set_type RGB16 @ im_8216], [RGB, GREY16, image_set_type GREY16 @ im_8216 @ im_sRGB2mono], [RGB, LABQ, im_Lab2LabQ @ im_disp2Lab @ im_clip], [RGB, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_disp2Lab @ im_clip], [sRGB, B_W, im_sRGB2mono], [sRGB, XYZ, im_sRGB2XYZ @ im_clip], [sRGB, YXY, im_XYZ2Yxy @ im_sRGB2XYZ @ im_clip], [sRGB, LAB, im_sRGB2Lab @ im_clip], [sRGB, LCH, im_Lab2LCh @ im_sRGB2Lab @ im_clip], [sRGB, UCS, im_XYZ2UCS @ im_sRGB2XYZ @ im_clip], [sRGB, RGB, im_XYZ2disp @ im_sRGB2XYZ @ im_clip], [sRGB, sRGB, image_set_type sRGB], [sRGB, RGB16, image_set_type RGB16 @ im_8216], [sRGB, GREY16, image_set_type GREY16 @ im_8216 @ im_sRGB2mono], [sRGB, LABQ, im_Lab2LabQ @ im_sRGB2Lab @ im_clip], [sRGB, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_sRGB2Lab @ im_clip], [RGB16, B_W, im_1628 @ im_sRGB2mono], [RGB16, RGB, image_set_type RGB @ im_1628], [RGB16, sRGB, image_set_type sRGB @ im_1628], [RGB16, RGB16, image_set_type RGB16], [RGB16, GREY16, im_RGB162GREY16], [GREY16, B_W, image_set_type B_W @ im_1628], [GREY16, RGB, im_mono2sRGB @ im_1628], [GREY16, sRGB, im_mono2sRGB @ im_1628], [GREY16, RGB16, im_GREY162RGB16], [GREY16, GREY16, image_set_type GREY16], [LABQ, B_W, im_sRGB2mono @ im_Lab2sRGB @ im_LabQ2Lab], [LABQ, XYZ, im_Lab2XYZ @ im_LabQ2Lab], [LABQ, YXY, im_XYZ2Yxy @ im_Lab2XYZ @ im_LabQ2Lab], [LABQ, LAB, im_LabQ2Lab], [LABQ, LCH, im_Lab2LCh @ im_LabQ2Lab], [LABQ, UCS, im_Lab2UCS @ im_LabQ2Lab], [LABQ, RGB, im_LabQ2disp], [LABQ, sRGB, im_Lab2sRGB @ im_LabQ2Lab], [LABQ, LABQ, image_set_type LABQ], [LABQ, LABS, im_LabQ2LabS], [LABS, B_W, im_sRGB2mono @ im_Lab2sRGB @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, XYZ, im_Lab2XYZ @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, YXY, im_XYZ2Yxy @ im_Lab2XYZ @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, LAB, im_LabS2Lab], [LABS, LCH, im_Lab2LCh @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, UCS, im_Lab2UCS @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, RGB, im_LabQ2disp @ im_LabS2LabQ @ im_clip2s], [LABS, sRGB, im_XYZ2sRGB @ im_Lab2XYZ @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, LABQ, im_LabS2LabQ @ im_clip2s], [LABS, LABS, image_set_type LABS] ] { /* From Image_type ... repeat here for brevity. Use same ordering as * in Colour menu for consistency. */ B_W = 1; XYZ = 12; YXY = 23; LAB = 13; LCH = 19; UCS = 18; RGB = 17; sRGB = 22; RGB16 = 25; GREY16 = 26; LABQ = 16; LABS = 21; } /* Transform between two colour spaces. */ colour_transform from to in = colour_unary _colour_conversion_table?i?2 in, i >= 0 = error (_ "unable to convert " ++ Image_type.type_names.get_name from ++ _ " to " ++ Image_type.type_names.get_name to) { match x = x?0 == from && x?1 == to; i = index match _colour_conversion_table; } /* Transform to a colour space, assuming the type field in the input is * correct */ colour_transform_to to in = colour_transform (get_type in) to in; /* String for path separator on this platform. */ path_separator = expand "$SEP"; /* Form a relative pathname. * path_relative ["home", "john"] == "home/john" * path_relative [] == "" */ path_relative l = join_sep path_separator l; /* Form an absolute pathname. * path_absolute ["home", "john"] == "/home/john" * path_absolute [] == "/" * If the first component looks like 'A:', don't add an initial separator. */ path_absolute l = path_relative l, len l?0 > 1 && is_letter l?0?0 && l?0?1 == ':' = path_separator ++ path_relative l; /* Parse a pathname. * path_parse "/home/john" == ["home", "john"] * path_parse "home/john" == ["home", "john"] */ path_parse str = split (equal path_separator?0) str; nip2-8.7.0/share/nip2/compat/7.28/_joe_utilities.def0000644000175000017500000005054513224651032016650 00000000000000/* ******Functions included in start/_NG_utilities.def:****** * * so_balance ref_meanmax im1 im2 mask blur gauss * * nonzero_mean im = no_out * * so_meanmax im = result * * so_calculate ref_meanmax im mask = result * * simple_frame frame im_w im_h ov cs ms bf option = result * * corner_frame frame im_w im_h ov cs ms bf = result * * build_frame r_tl r_tr r_bl r_br r_mt r_mb r_ml r_mr im_w im_h ov bf = result * * complex_frame frame im_w im_h ov cs es ms bf option= result * * complex_edge ra rb t bl d = rc * * frame_lr_min r_l r_r target bw = result * * frame_tb_min r_t r_b target bw = result * * frame_position_image im ref os colour= result * * merge_array bw arr = result * * merge_to_scale im target blend dir = result * * select_ellipse line width = mask * * select_tetragon p1 p2 p3 p4 = mask * * select_polygon pt_list = mask * * perspective_transform to from = trans'' * * sort_pts_clockwise l = l'' * */ /* Called from: * _NG_Extra.def Clone_area_item */ so_balance ref_meanmax im1 im2 mask gauss = result { //ref_meanmax = so_meanmax im1; so_values = so_calculate ref_meanmax im2 mask; im2_cor_a = clip2fmt im2.format im2'', has_member "format" im2 = im2'' {im2'' = im2 * (so_values?0) + (so_values?1);} // Option to convert replacement image to scaled gaussian noise im2_cor = im2_cor_a, gauss == false = clip2fmt im2_cor_a.format gauss_im {gauss_im = im_gaussnoise im2_cor_a.width im2_cor_a.height ref_meanmax?0 (deviation im2_cor_a);} result = im_blend (get_image mask) (get_image im2_cor) (get_image im1); }; //////////////////////////////////////////////////////////////////////////////// /* Calculates the mean of the non zero pixels. * * Called from: * _NG_utilities so_meanmax */ nonzero_mean im = no_out { zero_im = (im == 0); zero_mean = mean zero_im; no_mean = mean im; no_out = no_mean/(1 - (zero_mean/255)); }; //////////////////////////////////////////////////////////////////////////////// /* Calculates the max and nonzero mean of an image * * Called from: * _NG_utilities so_balance * _NG_utilities so_calculate * _NG_Extra.def Clone_area_item * _NG_Extra.def Balance_item.Balance_find_item */ so_meanmax im = result { mean_of_im = nonzero_mean im; adjusted_im = im - mean_of_im; max_of_im = max adjusted_im; result = [mean_of_im, max_of_im]; }; //////////////////////////////////////////////////////////////////////////////// /* Calculates the scale and offset required to match a reference mean and max * * Called from: * _NG_utilities so_balance * _NG_Extra.def Balance_item.Balance_find_item */ so_calculate ref_meanmax im mask = result { im' = if mask then im else 0; im_values = so_meanmax im'; mean_of_ref = ref_meanmax?0; mean_of_im = im_values?0; max_of_ref = ref_meanmax?1; max_of_im = im_values?1; scale = (max_of_ref)/(max_of_im); offset = mean_of_ref - (mean_of_im * scale); result = [ scale, offset ]; }; //////////////////////////////////////////////////////////////////////////////// /* Extends or shortens the central sections of a simple frame to fit round a given image. * * Called from: * _NG_Extra.def Frame_item.Simple_frame_item */ simple_frame frame im_w im_h ov cs ms bf option = result { cs' = (1 - cs); ms' = (0.5 - (ms/2)); ms'' = (1 - cs); //Regions r_tl = Region_relative frame 0 0 cs cs; r_tr = fliplr r_tl, option == true = Region_relative frame cs' 0 cs cs; r_bl = Region_relative frame 0 cs' cs cs; r_br = fliplr r_bl, option == true = Region_relative frame cs' cs' cs cs; r_mt = Region_relative frame ms' 0 ms cs; r_mb = Region_relative frame ms' ms'' ms cs; r_ml = Region_relative frame 0 ms' cs ms; r_mr = fliplr r_ml, option == true = Region_relative frame ms'' ms' cs ms; result = build_frame r_tl r_tr r_bl r_br r_mt r_mb r_ml r_mr im_w im_h ov bf; }; //////////////////////////////////////////////////////////////////////////////// /* Copies and extends a simple frame corner to produce a complete frame to fit round a given image. * * Called from: * _NG_Extra.def Frame_item.Frame_corner_item */ corner_frame frame im_w im_h ov cs ms bf = result { cs' = (1 - cs); ms' = (0.5 - (ms/2)); //Regions r_tl = Region_relative frame 0 0 cs cs; r_tr = fliplr r_tl; r_bl = fliptb r_tl; r_br = fliplr r_bl; r_mt = Region_relative frame ms' 0 ms cs; r_mb = fliptb r_mt; r_ml = Region_relative frame 0 ms' cs ms;; r_mr = fliplr r_ml; result = build_frame r_tl r_tr r_bl r_br r_mt r_mb r_ml r_mr im_w im_h ov bf; }; //////////////////////////////////////////////////////////////////////////////// /* Completes the frame building process for simple_frame and corner_frame. * * _NG_utilities simple_frame * _NG_utilities corner_frame */ build_frame r_tl r_tr r_bl r_br r_mt r_mb r_ml r_mr im_w im_h ov bf = result { //Find pixel thickness of frames section s_width = r_ml.width - mean (im_profile (map_unary fliplr (r_ml.value)?0) 1); s_height = r_mt.height - mean (im_profile (map_unary fliptb (r_mt.value)?0) 0); w_target = im_w + (2 * (s_width - ov)); h_target = im_h + (2 * (s_height - ov)); blend = bf * r_tl.width; cw_target = w_target - (2 * r_tl.width) + (2 * blend), w_target > (2 * r_tl.width) = w_target; ch_target = h_target - (2 * r_tl.height) + (2 * blend), h_target > (2 * r_tl.height) = h_target; //Use regions to produce sections top = merge_to_scale r_mt cw_target blend 0; bottom = merge_to_scale r_mb cw_target blend 0; left = merge_to_scale r_ml ch_target blend 1; right = merge_to_scale r_mr ch_target blend 1; middle = Image (image_new cw_target ch_target left.bands left.format left.coding left.type 0 0 0); //Build sections into full frame. row_1 = frame_lr_min r_tl r_tr w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[r_tl, top, r_tr]]; row_2 = frame_lr_min left right w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[left, middle, right]]; row_3 = frame_lr_min r_bl r_br w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[r_bl, bottom, r_br]]; result = frame_tb_min row_1 row_3 h_target blend, (h_target < (r_tl.height * 2)) = merge_array blend [[row_1], [row_2], [row_3]]; }; //////////////////////////////////////////////////////////////////////////////// /* Extends or shortens the central sections of a frame, preserving any central details on each * edge, to fit round a given image. * * Called from: * _NG_Extra.def Frame_item.Complex_frame_item */ complex_frame frame im_w im_h ov cs es ms bf option= result { cs' = (1 - cs); ms' = (0.5 - (ms/2)); es' = (0.25 - (es/2)); r_tl = Region_relative frame 0 0 cs cs; r_tr = fliplr r_tl, option == true = Region_relative frame cs' 0 cs cs; r_bl = Region_relative frame 0 cs' cs cs; r_br = fliplr r_bl, option == true = Region_relative frame cs' cs' cs cs; r_mt = Region_relative frame ms' 0 ms cs; r_mb = Region_relative frame ms' cs' ms cs; r_ml = Region_relative frame 0 ms' cs ms; r_mr = fliplr r_ml, option == true = Region_relative frame cs' ms' cs ms; r_et = Region_relative frame es' 0 es cs; r_eb = Region_relative frame es' cs' es cs; r_el = Region_relative frame 0 es' cs es; r_er = fliplr r_el, option == true = Region_relative frame cs' es' cs es; //Find pixel thickness of frames section s_width = r_el.width - mean (im_profile (map_unary fliplr (r_el.value)?0) 1); s_height = r_et.height - mean (im_profile (map_unary fliptb (r_et.value)?0) 0); w_target = im_w + (2 * (s_width - ov)); h_target = im_h + (2 * (s_height - ov)); min_size = foldr1 min_pair [r_tl.width, r_tl.height, r_mt.width, r_mt.height, r_et.width, r_et.height]; blend = bf * min_size; cw_target = w_target - (2 * r_tl.width) + (2 * blend); ch_target = h_target - (2 * r_tl.height) + (2 * blend); top = complex_edge r_mt r_et cw_target blend 0; bottom = complex_edge r_mb r_eb cw_target blend 0; left = complex_edge r_ml r_el ch_target blend 1; right = complex_edge r_mr r_er ch_target blend 1; middle = Image (image_new top.width left.height left.bands left.format left.coding left.type 0 0 0); //Build regions into full frame. row_1 = frame_lr_min r_tl r_tr w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[r_tl, top, r_tr]]; row_2 = frame_lr_min left right w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[left, middle, right]]; row_3 = frame_lr_min r_bl r_br w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[r_bl, bottom, r_br]]; result = frame_tb_min row_1 row_3 h_target blend, (h_target < (r_tl.height * 2)) = merge_array blend [[row_1], [row_2], [row_3]]; }; //////////////////////////////////////////////////////////////////////////////// /* Function called by complex frame, used to produce section * * Called from: * _NG_utilities.def complex_frame */ complex_edge ra rb t bl d = rc { e1 = ceil (ra.width - t)/2, d == 0 = 0; e2 = 0, d == 0 = ceil (ra.height - t)/2; e3 = t, d == 0 = ra.width; e4 = ra.height, d == 0 = t; check = ra.width, d == 0; = ra.height; rai = get_image ra; t2 = (t - ra.width + (2 * bl))/2, d == 0 = (t - ra.height + (2 * bl))/2; rc = ra , t <= 0 = Image (im_extract_area rai e1 e2 e3 e4), t <= check = merge_array bl [[rb',ra,rb']], d == 0 = merge_array bl [[rb'],[ra],[rb']] {rb' = merge_to_scale rb t2 bl d;} }; ////////////////////////////////////////////////////////////////////////////// /* Blends two images left/right to produce an image a specific width. * * _NG_utilities build_frame * _NG_utilities complex_frame */ frame_lr_min r_l r_r target bw = result { //Calculating the new widh required for each image. no = (target/2 + bw); n_w = no, (r_l.width > no) = r_l.width; //Removing excess from what will be the middle of the final image. n_l = im_extract_area r_l.value 0 0 n_w r_l.height; n_r = im_extract_area r_r.value (r_r.width - n_w) 0 n_w r_l.height; //Merge the two image together with a bw*2 pixel overlap. result = Image (im_lrmerge n_l n_r ((bw*2) - n_w) 0 bw); }; ////////////////////////////////////////////////////////////////////////////// /* Blends two images top/bottom to produce an image a specific width. * * _NG_utilities build_frame * _NG_utilities complex_frame */ frame_tb_min r_t r_b target bw = result { //Calculating the new height required for each image. no = (target/2 + bw); n_h = no, (r_t.height > no) = r_t.height; //Removing excess from what will be the middle of the final image. n_t = im_extract_area r_t.value 0 0 r_t.width n_h; n_b = im_extract_area r_b.value 0 (r_b.height - n_h) r_b.width n_h; //Merge the two image together with a 50 pixel overlap. result = Image (im_tbmerge n_t n_b 0 ((bw*2) -n_h) bw); }; ////////////////////////////////////////////////////////////////////////////// /* Resixe canvas of an image to accomodate a frame and possible mount * * Called from: * _NG_Extra.def Frame_item.Frame_corner_item * _NG_Extra.def Frame_item.Simple_frame_item * _NG_Extra.def Frame_item.Complex_frame_item */ frame_position_image im ref os colour= result { background = image_new ref.width ref.height im.bands im.format im.coding im.type colour 0 0; result = insert_noexpand xp yp im background { xp = (ref.width - im.width)/2; yp = (ref.height - im.height - os)/2; } }; ////////////////////////////////////////////////////////////////////////////// /* Merges an array of images together according to blend width bw * * Called from: * _NG_Utilites.def build_frame * _NG_Utilites.def complex_frame * _NG_Utilites.def complex_edge */ merge_array bw arr = result { merge_lr bw im1 im2 = im3 { bw' = get_header "Xsize" (get_image im1); bw'' = -(bw' - bw); im3 = im_lrmerge (get_image im1) (get_image im2) bw'' 0 bw; } merge_tb bw im1 im2 = im3 { bw' = get_header "Ysize" (get_image im1); bw'' = -(bw' - bw); im3 = im_tbmerge (get_image im1) (get_image im2) 0 bw'' bw; } im_out = (image_set_origin 0 0 @ foldl1 (merge_tb bw) @ map (foldl1 (merge_lr bw))) arr; result = Image im_out; }; ////////////////////////////////////////////////////////////////////////////// /* Repeatably top/bottom add clones of im, with a defined overlap, until final height > target * * Called from: * _NG_Utilites.def build_frame * _NG_Utilites.def complex_edge */ merge_to_scale im target blend dir = result { blend' = floor blend; //allow fir lr or tb process var_a = im.width, dir == 0 = im.height; var_w = im.width, dir == 1 = target, target > blend' = blend'; var_h = im.height, dir == 0 = target, target > blend' = blend'; //total numner of copies of im requires, taking overlap into account. no_loops = ceil ((log ((target - blend')/(var_a - blend')))/(log 2)); process im no = result { pr_a = get_header "Xsize" (get_image im), dir == 0 = get_header "Ysize" (get_image im); pr_b = -(pr_a - blend' + 1); im' = im_lrmerge (get_image im) (get_image im) pr_b 0 blend', dir == 0 = im_tbmerge (get_image im) (get_image im) 0 pr_b blend'; no' = no - 1; result = im', no' < 1 = process im' no'; } im_tmp = im.value, var_a > target = process im no_loops; result = Image (im_extract_area (get_image im_tmp) 0 0 var_w var_h); }; ////////////////////////////////////////////////////////////////////////////// /* Selects an elispe based on a line and a width * * Called from: * _NG_Extra.def Select_item.Elipse */ select_ellipse line width = mask { im = Image (get_image line); //Make a 2 band image whose value equals its coordinates. im_coor = Image (make_xy im.width im.height); //Adjust the values to center tham on (line.left, line.top) im_cent = im_coor - Vector [line.left,line.top]; w = line.width; h = line.height; angle = 270, w == 0 && h < 0 = 90, w == 0 && h >= 0 = 360 + atan (h/w), w > 0 && h < 0 = atan (h/w), w > 0 && h >= 0 = 180 + atan (h/w); a = ( (h ** 2) + (w ** 2) )**0.5; b = a * width; x' = ( (cos angle) * im_cent?0) + ( (sin angle) * im_cent?1); y' = ( (cos angle) * im_cent?1) - ( (sin angle) * im_cent?0); mask = ( (b**2) * (x'**2) ) + ( (a**2) * (y'**2) ) <= (a * b)**2; }; ////////////////////////////////////////////////////////////////////////////// /* Selects a tetragon based on four points. * * Called from: * _NG_Extra.def Select_item.Tetragon * _NG_Extra.def Perspective_item */ select_tetragon p1 p2 p3 p4 = mask { //Put points in clockwise order starting at the top left. pt_list = sort_pts_clockwise [p1, p2, p3, p4]; pair_list = [ [ pt_list?0, pt_list?1 ], [ pt_list?1, pt_list?2 ], [ pt_list?2, pt_list?3 ], [ pt_list?3, pt_list?0 ] ]; //Make xy image the same size as p1.image; im_xy = Image (make_xy p1.image.width p1.image.height); white = Image (image_new p1.image.width p1.image.height 1 0 Image_coding.NOCODING 1 255 0 0); mask = foldl process white pair_list; /* Treat each pair of point as a vector going from p1 to p2, * then select all to right of line. This is done for each pair, * the results are all combined to select the area defined by * the four points. */ process im_in pair = im_out { x = (pair?0).left; y = (pair?0).top; x'= (pair?1).left; y'= (pair?1).top; w = x' - x; h = y' - y; m = 0, x == x' = (y-y')/(x-x'); c = 0, x == x' = ((y*x') - (y'*x))/(x' - x); mask= im_xy?1 - (im_xy?0 * m) >= c, w > 0 = im_xy?1 - (im_xy?0 * m) <= c, w < 0 = im_xy?0 <= x, w == 0 && h > 0 = im_xy?0 >= x; im_out = im_in & mask; } }; ////////////////////////////////////////////////////////////////////////////// /* Selects a tetragon based on four points. * * Called from: * _NG_Extra.def Select_item.Polygon */ select_polygon pt_list = mask { group_check = is_Group pt_list; pt_l = pt_list.value, group_check = pt_list; im = Image (get_image (pt_l?0)); im_xy = Image (make_xy im.width im.height); black = Image (image_new im_xy.width im_xy.height 1 0 Image_coding.NOCODING 1 0 0 0); x = im_xy?0; y = im_xy?1; pt_l' = grp_trip pt_l; mask = foldl process black pt_l'; /*Takes a group adds the first two the end and then creates a lists of *lists [[a, b, c], [b, c, d] .... [x, a, b]] */ grp_trip l = l'' { px = take 2 l; l' = join l px; start = [(take 3 l')]; rest = drop 3 l'; process a b = c { x = (last a)?1; x'= (last a)?2; x'' = [[x, x', b]]; c = join a x''; } l'' = foldl process start rest; }; process im_in triplet = im_out { p1 = triplet?0; p2 = triplet?1; p3 = triplet?2; //check for change in x direction between p1-p2 and p2 -p3 dir_1 = sign (p2.left - p1.left); dir_2 = sign (p3.left - p2.left); dir = dir_1 + dir_2; //define min x limit. min_x = p1.left, p1.left < p2.left = p2.left + 1, dir != 0 = p2.left; //define max x limit. max_x = p1.left, p1.left > p2.left = p2.left - 1, dir != 0 = p2.left; //equation of line defined by p1 and p2 m = line_m p1 p2; c = line_c p1 p2; //Every thing below the line im_test = ((y >= (m * x) + c) & (x >= min_x) & (x <= max_x)); im_out = im_in ^ im_test; } line_c p1 p2 = c {m = line_m p1 p2; c = p1.top - (m * p1.left);}; line_m p1 p2 = (p2.top - p1.top)/(p2.left - p1.left), p2.left != p1.left = 0; }; ////////////////////////////////////////////////////////////////////////////// /* Selects a tetragon based on four points. * * Called from: * _NG_Extra.def Perspective_match_item * _NG_Extra.def Perspective_item */ perspective_transform to from = trans'' { /* * Tramsformation matrix is calculated on the bases of the following functions: * x' = c0x + c1y + c2xy + c3 * y' = c4x + c5y + c6xy + c7 * * The functions used in vips im_transform works based on the functions: * x = x' + b0 + b2x' + b4y' + b6x'y' * y = y' + b1 + b3x' + b5y' + b7x'y' * * and is applied in the form of the matrix: * * [[b0, b1], * [b2, b3], * [b4, b5], * [b6, b7]] * * Therefore our required calculated matrix will be * * [[ c3 , c7], * [(c0 - 1) , c4], * [ c1 , (c5 - 1)], * [ c2 , c6]] * * to = [x1, y1, x2, y2, x3, y3, x4, y4] * from = [x1', y1', x2', y2', x3', y3', x4', y4'] * trans = [[c0], [c1], [c2], [c3], [c4], [c5], [c6], [c7]] * */ to' = Matrix [[to?0, to?1, ((to?0)*(to?1)), 1, 0, 0, 0, 0], [0, 0, 0, 0, to?0, to?1, ((to?0)*(to?1)), 1], [to?2, to?3, ((to?2)*(to?3)), 1, 0, 0, 0, 0], [0, 0, 0, 0, to?2, to?3, ((to?2)*(to?3)), 1], [to?4, to?5, ((to?4)*(to?5)), 1, 0, 0, 0, 0], [0, 0, 0, 0, to?4, to?5, ((to?4)*(to?5)), 1], [to?6, to?7, ((to?6)*(to?7)), 1, 0, 0, 0, 0], [0, 0, 0, 0, to?6, to?7, ((to?6)*(to?7)), 1]]; from' = Matrix (transpose [from]); to'' = to' ** (-1); trans = to'' * from'; trans' = trans.value; trans''= Matrix [[(trans'?3)?0, (trans'?7)?0 ], [((trans'?0)?0 - 1), (trans'?4)?0 ], [(trans'?1)?0, ((trans'?5)?0 - 1)], [(trans'?2)?0, (trans'?6)?0 ]]; }; ////////////////////////////////////////////////////////////////////////////// /* Sort a list of points into clockwise order. * * Called from: * _NG_utilities.def select_tetragon * _NG_Extra.def Perspective_match_item * _NG_Extra.def Perspective_item */ sort_pts_clockwise l = l'' { // sort functions: f_top a b = a.top < b.top; f_left a b = a.left < b.left; f_right a b = a.left > b.left; l' = sortc f_top l; l'_a = take 2 l'; l'_b = drop 2 l'; l''_a = sortc f_left l'_a; l''_b = sortc f_right l'_b; l'' = join l''_a l''_b; }; Mount_options _ctype _ppcm = class { _vislevel = 3; apply = Toggle "Apply mount options" false; ls = Expression "Lower mount section bigger by (cm)" 0; mount_colour = Colour _ctype [0, 0, 0]; _los = ls.expr * _ppcm; }; Frame_variables comp = class { _vislevel = 3; scale_factor = Expression "scale the size of the frame by" 1; /* These sliders define the fraction of the frames width or height is extracted * to produce each of the particular regions. */ corner_section = Scale "Corner section" 0.1 1 0.5; edge_section = Scale "Edge section" 0.1 1 0.2, comp > 0 = "Only required for complex frames"; middle_section = Scale "Middle section" 0.1 1 0.2; blend_fraction = Scale "Blend fraction" 0.1 0.9 0.1; option = Toggle "Use mirror of left-side to make right" true; }; nip2-8.7.0/share/nip2/compat/7.28/Image.def0000644000175000017500000014150213224651032014655 00000000000000Image_new_item = class Menupullright "_New" "make new things" { Image_black_item = class Menuaction "_Image" "make a new image" { format_names = [ "8-bit unsigned int - UCHAR", // 0 "8-bit signed int - CHAR", // 1 "16-bit unsigned int - USHORT", // 2 "16-bit signed int - SHORT", // 3 "32-bit unsigned int - UINT", // 4 "32-bit signed int - INT", // 5 "32-bit float - FLOAT", // 6 "64-bit complex - COMPLEX", // 7 "64-bit float - DOUBLE", // 8 "128-bit complex - DPCOMPLEX" // 9 ]; action = class Image _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; nbands = Expression "Image bands" 1; format_option = Option "Image format" format_names 0; type_option = Option_enum "Image type" Image_type.type_names "B_W"; pixel = Expression "Pixel value" 0; _result = image_new (to_real nwidth) (to_real nheight) (to_real nbands) (to_real format_option) Image_coding.NOCODING type_option.value_thing pixel.expr 0 0; } } Image_new_from_image_item = class Menuaction "_From Image" "make a new image based on image x" { action x = class Image _result { _vislevel = 3; pixel = Expression "Pixel value" 0; _result = image_new x.width x.height x.bands x.format x.coding x.type pixel.expr x.xoffset x.yoffset; } } Image_region_item = class Menupullright "_Region on Image" "make a new region on an image" { Region_item = class Menuaction "_Region" "make a region on an image" { action image = scope.Region_relative image 0.25 0.25 0.5 0.5; } Mark_item = class Menuaction "_Point" "make a point on an image" { action image = scope.Mark_relative image 0.5 0.5; } Arrow_item = class Menuaction "_Arrow" "make an arrow on an image" { action image = scope.Arrow_relative image 0.25 0.25 0.5 0.5; } HGuide_item = class Menuaction "_Horizontal Guide" "make a horizontal guide on an image" { action image = scope.HGuide image 0.5; } VGuide_item = class Menuaction "_Vertical Guide" "make a vertical guide on an image" { action image = scope.VGuide image 0.5; } sep1 = Menuseparator; Move_item = class Menuaction "From Region" "new region on image using existing region as a guide" { action a b = map_binary process a b { process a b = x.Region target x.left x.top x.width x.height, is_Region x = x.Arrow target x.left x.top x.width x.height, is_Arrow x = error "bad arguments to region-from-region" { // prefer image then region compare a b = false, !is_Image a && is_Image b = false, is_Region a && !is_Region b = true; [target, x] = sortc compare [a, b]; } } } } } Image_convert_to_image_item = class Menuaction "Con_vert to Image" "convert anything to an image" { action x = to_image x; } Image_number_format_item = class Menupullright "_Format" "convert numeric format" { U8_item = class Menuaction "_8 bit unsigned" "convert to unsigned 8 bit [0, 255]" { action x = map_unary cast_unsigned_char x; } U16_item = class Menuaction "1_6 bit unsigned" "convert to unsigned 16 bit [0, 65535]" { action x = map_unary cast_unsigned_short x; } U32_item = class Menuaction "_32 bit unsigned" "convert to unsigned 32 bit [0, 4294967295]" { action x = map_unary cast_unsigned_int x; } sep1 = Menuseparator; S8_item = class Menuaction "8 _bit signed" "convert to signed 8 bit [-128, 127]" { action x = map_unary cast_signed_char x; } S16_item = class Menuaction "16 b_it signed" "convert to signed 16 bit [-32768, 32767]" { action x = map_unary cast_signed_short x; } S32_item = class Menuaction "32 bi_t signed" "convert to signed 32 bit [-2147483648, 2147483647]" { action x = map_unary cast_signed_int x; } sep2 = Menuseparator; Float_item = class Menuaction "_Single precision float" "convert to IEEE 32 bit float" { action x = map_unary cast_float x; } Double_item = class Menuaction "_Double precision float" "convert to IEEE 64 bit float" { action x = map_unary cast_double x; } sep3 = Menuseparator; Scmplxitem = class Menuaction "Single _precision complex" "convert to 2 x IEEE 32 bit float" { action x = map_unary cast_complex x; } Dcmplx_item = class Menuaction "Double p_recision complex" "convert to 2 x IEEE 64 bit float" { action x = map_unary cast_double_complex x; } } Image_header_item = class Menupullright "_Header" "do stuff to the image header" { Image_get_item = class Menupullright "_Get" "get header fields" { // the header fields we can get fields = class { type = 0; width = 1; height = 2; format = 3; bands = 4; xres = 5; yres = 6; xoffset = 7; yoffset = 8; coding = 9; field_names = Enum [ $width => width, $height => height, $bands => bands, $format => format, $type => type, $xres => xres, $yres => yres, $xoffset => xoffset, $yoffset => yoffset, $coding => coding ]; field_option name = Option_enum (_ "Field") field_names name; field_funcs = Table [ [type, get_type], [width, get_width], [height, get_height], [format, get_format], [bands, get_bands], [xres, get_xres], [yres, get_yres], [xoffset, get_xoffset], [yoffset, get_yoffset], [coding, get_coding] ]; } get_field field_name x = class _result { _vislevel = 3; field = fields.field_option field_name; _result = map_unary (Real @ fields.field_funcs.lookup 0 1 field.value_thing) x; } Width_item = class Menuaction "_Width" "get width" { action x = get_field "width" x; } Height_item = class Menuaction "_Height" "get height" { action x = get_field "height" x; } Bands_item = class Menuaction "_Bands" "get bands" { action x = get_field "bands" x; } Format_item = class Menuaction "_Format" "get format" { action x = get_field "format" x; } Type_item = class Menuaction "_Type" "get type" { action x = get_field "type" x; } Xres_item = class Menuaction "_Xres" "get X resolution" { action x = get_field "xres" x; } Yres_item = class Menuaction "_Yres" "get Y resolution" { action x = get_field "yres" x; } Xoffset_item = class Menuaction "X_offset" "get X offset" { action x = get_field "xoffset" x; } Yoffset_item = class Menuaction "Yo_ffset" "get Y offset" { action x = get_field "yoffset" x; } Coding_item = class Menuaction "_Coding" "get coding" { action x = get_field "coding" x; } sep1 = Menuseparator; Custom_item = class Menuaction "C_ustom" "get any header field" { action x = class _result { _vislevel = 3; field = String "Field" "Xsize"; parse = Option "Parse" [ "No parsing", "Parse string as integer", "Parse string as real", "Parse string as hh:mm:ss" ] 0; _result = map_unary (wrap @ process @ get_header field.value) x { parse_str parse str = parse (split is_space str)?0; parse_field name cast parse x = cast x, is_number x = parse_str parse x, is_string x = error ("not " ++ name); get_int = parse_field "int" cast_signed_int parse_int; get_float = parse_field "float" cast_float parse_float; get_time = parse_field "hh:mm:ss" cast_signed_int parse_time; wrap x = Real x, is_real x = Vector x, is_real_list x = Image x, is_image x = Bool x, is_bool x = Matrix x, is_matrix x = String "String" x, is_string x = List x, is_list x = x; process = [ id, get_int, get_float, get_time ]?parse; } } } } sep1 = Menuseparator; Image_set_meta_item = class Menuaction "_Set" "set image metadata" { action x = class _result { _vislevel = 3; fname = String "Field" "field-name"; val = Expression "Value" 42; _result = map_unary process x { process image = set_header fname.value val.expr image; } } } Image_edit_header_item = class Menuaction "_Edit" "change advisory header fields of image" { type_names = Image_type.type_names; all_names = sort (map (extract 0) type_names.value); get_prop has get def x = get x, has x = def; action x = class _result { _vislevel = 3; nxres = Expression "Xres" (get_prop has_xres get_xres 1 x); nyres = Expression "Yres" (get_prop has_yres get_yres 1 x); nxoff = Expression "Xoffset" (get_prop has_xoffset get_xoffset 0 x); nyoff = Expression "Yoffset" (get_prop has_yoffset get_yoffset 0 x); type_option = Option_enum "Image type" Image_type.type_names (Image_type.type_names.get_name type) { type = x.type, is_Image x = Image_type.MULTIBAND; } _result = map_unary process x { process image = Image (im_copy_set image.value type_option.value_thing (to_real nxres) (to_real nyres) (to_real nxoff) (to_real nyoff)); } } } } Image_cache_item = class Menuaction "C_ache" "cache calculated image pixels" { action x = class _result { _vislevel = 3; tile_width = Number "Tile width" 128; tile_height = Number "Tile height" 128; max_tiles = Number "Maximum number of tiles to cache" (-1); _result = map_unary process x { process image = cache (to_real tile_width) (to_real tile_height) (to_real max_tiles) image; } } } #separator Image_levels_item = class Menupullright "_Levels" "change image levels" { Scale_item = class Menuaction "_Scale to 0 - 255" "linear transform to fit 0 - 255 range" { action x = map_unary scale x; } Linear_item = class Menuaction "_Linear" "linear transform of image levels" { action x = class _result { _vislevel = 3; scale = Scale "Scale" 0.001 3 1; offset = Scale "Offset" (-128) 128 0; _result = map_unary adj x { adj x // only force back to input type if this is a thing // with a type ... so we work for Colour / Matrix etc. = clip2fmt x.format x', has_member "format" x = x' { x' = x * scale + offset; } } } } Gamma_item = class Menuaction "_Power" "power transform of image levels (gamma)" { action x = class _result { _vislevel = 3; gamma = Scale "Gamma" 0.001 4 1; image_maximum_hint = "You may need to change image_maximum if " ++ "this is not an 8 bit image"; im_mx = Expression "Image maximum" mx { mx = Image_format.maxval x.format, has_format x = 255; } _result = map_unary gam x { gam x = clip2fmt (get_format x) x', has_format x = x' { x' = (im_mx.expr / im_mx.expr ** gamma) * x ** gamma; } } } } Tone_item = class Menuaction "_Tone Curve" "adjust tone curve" { action x = class _result { _vislevel = 3; b = Scale "Black point" 0 100 0; w = Scale "White point" 0 100 100; sp = Scale "Shadow point" 0.1 0.3 0.2; mp = Scale "Mid-tone point" 0.4 0.6 0.5; hp = Scale "Highlight point" 0.7 0.9 0.8; sa = Scale "Shadow adjust" (-15) 15 0; ma = Scale "Mid-tone adjust" (-30) 30 0; ha = Scale "Highlight adjust" (-15) 15 0; curve = tone_build x.format b w sp mp hp sa ma ha; _result = map_unary (hist_map curve) x; } } } Image_transform_item = class Menupullright "_Transform" "transform images" { Rotate_item = class Menupullright "Ro_tate" "rotate image" { Fixed_item = class Menupullright "_Fixed" "clockwise rotation by fixed angles" { rotate_widget default x = class _result { _vislevel = 3; angle = Option "Rotate by" [ "Don't rotate", "90 degrees clockwise", "180 degrees", "90 degrees anticlockwise" ] default; _result = map_unary process x { process in = [ in, rot90 in, rot180 in, rot270 in ] ? angle; } } Rot90_item = class Menuaction "_90 Degrees" "clockwise rotation by 90 degrees" { action x = rotate_widget 1 x; } Rot180_item = class Menuaction "_180 Degrees" "clockwise rotation by 180 degrees" { action x = rotate_widget 2 x; } Rot270_item = class Menuaction "_270 Degrees" "clockwise rotation by 270 degrees" { action x = rotate_widget 3 x; } } Free_item = class Menuaction "_Free" "clockwise rotation by any angle" { action x = class _result { _vislevel = 3; angle = Scale "Angle" (-180) 180 0; interp = Interpolate_picker Interpolate_type.BILINEAR; _result = map_unary process x { process image = rotate interp angle image; } } } Straighten_item = class Menuaction "_Straighten" ("smallest rotation that makes an arrow either horizontal " ++ "or vertical") { action x = class _result { _vislevel = 3; interp = Interpolate_picker Interpolate_type.BILINEAR; _result = map_unary straighten x { straighten arrow = rotate interp angle'' arrow.image { x = arrow.width; y = arrow.height; angle = im (polar (x, y)); angle' = angle - 360, angle > 315 = angle - 180, angle > 135 = angle; angle'' = -angle', angle' >= (-45) && angle' < 45 = 90 - angle'; } } } } } Flip_item = class Menupullright "_Flip" "mirror left/right or up/down" { Left_right_item = class Menuaction "_Left Right" "mirror object left/right" { action x = map_unary fliplr x; } Top_bottom_item = class Menuaction "_Top Bottom" "mirror object top/bottom" { action x = map_unary fliptb x; } } Resize_item = class Menupullright "_Resize" "change image size" { Scale_item = class Menuaction "_Scale" "scale image size by a factor" { action x = class _result { _vislevel = 3; xfactor = Expression "Horizontal scale factor" 1; yfactor = Expression "Vertical scale factor" 1; interp = Interpolate_picker Interpolate_type.BILINEAR; _result = map_unary process x { process image = resize interp xfactor yfactor image; } } } Size_item = class Menuaction "_Size To" "resize to a fixed size" { action x = class _result { _vislevel = 3; which = Option "Resize axis" [ "Shortest", "Longest", "Horizontal", "Vertical" ] 0; size = Expression "Resize to (pixels)" 128; aspect = Toggle "Break aspect ratio" false; interp = Interpolate_picker Interpolate_type.BILINEAR; _result = map_unary process x { process image = resize interp h v image, aspect = resize interp fac fac image { xfac = to_real size / image.width; yfac = to_real size / image.height; max_factor = [xfac, 1], xfac > yfac = [1, yfac]; min_factor = [xfac, 1], xfac < yfac = [1, yfac]; [h, v] = [ max_factor, min_factor, [xfac, 1], [1, yfac]]?which; fac = h, v == 1 = v; } } } } Size_within_item = class Menuaction "Size _Within" "size to fit within a rectangle" { action x = class _result { _vislevel = 3; // the rects we size to fit within _rects = [ [2048, 1536], [1920, 1200], [1600, 1200], [1400, 1050], [1280, 1024], [1024, 768], [800, 600], [640, 480] ]; within = Option "Fit within (pixels)" ( [print w ++ " x " ++ print h :: [w, h] <- _rects] ++ ["Custom"] ) 4; custom_width = Expression "Custom width" 1000; custom_height = Expression "Custom height" 1000; size = Option "Page size" [ "Full page", "Half page", "Quarter page" ] 0; interp = Interpolate_picker Interpolate_type.BILINEAR; _result = map_unary process x { xdiv = [1, 2, 2]?size; ydiv = [1, 1, 2]?size; allrect = _rects ++ [ [custom_width.expr, custom_height.expr] ]; [width, height] = allrect?within; process x = resize interp fac fac x, fac < 1 = x { xfac = (width / xdiv) / x.width; yfac = (height / ydiv) / x.height; fac = min_pair xfac yfac; } } } } Resize_canvas_item = class Menuaction "_Canvas" "change size of surrounding image" { action x = class _result { _vislevel = 3; // try to guess a sensible size for the new image _guess_size = x.rect, is_Image x = Rect 0 0 100 100; nwidth = Expression "New width (pixels)" _guess_size.width; nheight = Expression "New height (pixels)" _guess_size.height; bgcolour = Expression "Background colour" 0; position = Option "Position" [ "North-west", "North", "North-east", "West", "Centre", "East", "South-west", "South", "South-east", "Specify in pixels" ] 4; left = Expression "Pixels from left" 0; top = Expression "Pixels from top" 0; _result = map_unary process x { process image = insert_noexpand xp yp image background { width = image.width; height = image.height; coding = image.coding; bands = 3, coding == Image_coding.LABPACK = image.bands; format = Image_format.FLOAT, coding == Image_coding.LABPACK = image.format; type = image.type; // placement vectors ... left, centre, right xposv = [0, to_real nwidth / 2 - width / 2, to_real nwidth - width]; yposv = [0, to_real nheight / 2 - height / 2, to_real nheight - height]; xp = left, position == 9 = xposv?((int) (position % 3)); yp = top, position == 9 = yposv?((int) (position / 3)); background = image_new nwidth nheight bands format coding type bgcolour.expr 0 0; } } } } } Image_perspective_item = Perspective_item; Image_rubber_item = class Menupullright "Ru_bber Sheet" "automatically warp images to superposition" { rubber_interp = Option "Interpolation" ["Nearest", "Bilinear"] 1; rubber_order = Option "Order" ["0", "1", "2", "3"] 1; rubber_wrap = Toggle "Wrap image edges" false; // a transform ... a matrix, plus the size of the image the // matrix was made for Transform matrix image_width image_height = class matrix { // scale a transform ... if it worked for a m by n image, make // it work for a (m * xfac) by (y * yfac) image rescale xfac yfac = Transform (Matrix (map2 (map2 multiply) matrix.value facs)) (image_width * xfac) (image_height * yfac) { facs = [ [xfac, yfac], [1, 1], [1, 1], [1 / xfac, 1 / yfac], [1 / xfac, 1 / yfac], [1 / xfac, 1 / yfac] ]; } } // yuk!!!! fix is_instanceof to not need absolute names is_Transform = is_instanceof "Image_transform_item.Image_rubber_item.Transform"; Find_item = class Menuaction "_Find" ("find a transform which will map sample image onto " ++ "reference") { action reference sample = class _trn { _vislevel = 3; // controls order = rubber_order; interp = rubber_interp; wrap = rubber_wrap; max_err = Expression "Maximum error" 0.3; max_iter = Expression "Maximum iterations" 10; // transform [sample', trn, err] = transform_search max_err max_iter order interp wrap sample reference; transformed_image = Image sample'; _trn = Transform trn reference.width reference.height; final_error = err; } } Apply_item = class Menuaction "_Apply" "apply a transform to an image" { action a b = class _result { _vislevel = 3; // controls interp = rubber_interp; wrap = rubber_wrap; _result = map_binary trans a b { trans a b = transform interp wrap t' i { // get the transform arg first [i, t] = sortc (const is_Transform) [a, b]; t' = t.rescale (i.width / t.image_width) (i.height / t.image_height); } } } } } sep1 = Menuseparator; Match_item = class Menuaction "_Linear Match" "rotate and scale one image to match another" { action x y = class _result { _vislevel = 3; // try to find an image ... for a group, get the first item find_image x = x, is_Image x = find_image x?0, is_list x = find_image x.value, is_class x && has_value x = error "unable to find image"; _a = find_image x; _b = find_image y; ap1 = Mark_relative _a 0.5 0.25; bp1 = Mark_relative _b 0.5 0.25; ap2 = Mark_relative _a 0.5 0.75; bp2 = Mark_relative _b 0.5 0.75; refine = Toggle "Refine selected tie-points" false; lock = Toggle "No resize" false; _result = map_binary process x y { process a b = Image b''' { _prefs = Workspaces.Preferences; window = _prefs.MOSAIC_WINDOW_SIZE; object = _prefs.MOSAIC_OBJECT_SIZE; a' = a.value; b' = b.value; b'' = clip2fmt a.format b'; // return p2 ... if lock is set, return a p2 a standard // distance along the vector joining p1 and p2 norm p1 p2 = Rect left' top' 0 0, lock = p2 { v = (p2.left - p1.left, p2.top - p1.top); // 100000 to give precision since we pass points as // ints to match n = 100000 * sign v; left' = p1.left + re n; top' = p1.top + im n; } ap2'' = norm ap1 ap2; bp2'' = norm bp1 bp2; b''' = im_match_linear_search a' b'' ap1.left ap1.top bp1.left bp1.top ap2''.left ap2''.top bp2''.left bp2''.top object window, // we can't search if lock is on refine && !lock = im_match_linear a' b'' ap1.left ap1.top bp1.left bp1.top ap2''.left ap2''.top bp2''.left bp2''.top; } } } } Image_perspective_match_item = Perspective_match_item; } Image_band_item = class Menupullright "_Band" "manipulate image bands" { // like extract_bands, but return [] for zero band image // makes compose a bit simpler exb b n x = [], to_real n == 0 = extract_bands b n x; Extract_item = class Menuaction "_Extract" "extract bands from image" { action x = class _result { _vislevel = 3; first = Expression "Extract from band" 0; number = Expression "Extract this many bands" 1; _result = map_unary (exb first number) x; } } Insert_item = class Menuaction "_Insert" "insert bands into image" { action x y = class _result { _vislevel = 3; first = Expression "Insert at position" 0; _result = map_binary process x y { process im1 im2 = exb 0 f im1 ++ im2 ++ exb f (b - f) im1 { f = to_real first; b = im1.bands; } } } } Delete_item = class Menuaction "_Delete" "delete bands from image" { action x = class _result { _vislevel = 3; first = Expression "Delete from band" 0; number = Expression "Delete this many bands" 1; _result = map_unary process x { process im = exb 0 f im ++ exb (f + n) (b - (f + n)) im { f = to_real first; n = to_real number; b = im.bands; } } } } Bandwise_item = Image_join_item.Bandwise_item; sep1 = Menuseparator; To_dimension_item = class Menuaction "To D_imension" "convert bands to width or height" { action x = class _result { _vislevel = 3; orientation = Option "Orientation" [ "Horizontal", "Vertical" ] 0; _result = map_unary process x { process im = foldl1 [join_lr, join_tb]?orientation (bandsplit im); } } } To_bands_item = class Menuaction "To B_ands" "turn width or height to bands" { action x = class _result { _vislevel = 3; orientation = Option "Orientation" [ "Horizontal", "Vertical" ] 0; _result = map_unary process x { process im = bandjoin (map extract_column [0 .. im.width - 1]), orientation == 0 = bandjoin (map extract_row [0 .. im.height - 1]) { extract_column n = extract_area n 0 1 im.height im; extract_row n = extract_area 0 n im.width 1 im; } } } } } Image_crop_item = class Menuaction "_Crop" "extract a rectangular area from an image" { action x = class _result { _vislevel = 3; // try to find the image geometry ... don't bother trying to look // inside groups though _geo = x.rect, is_Image x = Rect 0 0 100 100; l = Expression "Crop left" ((int) (_geo.left + _geo.width / 4)); t = Expression "Crop top" ((int) (_geo.top + _geo.height / 4)); w = Expression "Crop width" (max_pair 1 ((int) (_geo.width / 2))); h = Expression "Crop height" (max_pair 1 ((int) (_geo.height / 2))); _result = map_nary (list_5ary extract) [x, l.expr, t.expr, w.expr, h.expr] { extract im l t w h = extract_area left' top' width' height' im { width' = min_pair (to_real w) im.width; height' = min_pair (to_real h) im.height; left' = range 0 (to_real l) (im.width - width'); top' = range 0 (to_real t) (im.height - height'); } } } } Image_insert_item = class Menuaction "_Insert" "insert a small image into a large image" { action a b = insert_position, is_Group a || is_Group b = insert_area { insert_area = class _result { _check_args = [ [a, "a", check_Image], [b, "b", check_Image] ]; _vislevel = 3; // sort to get smallest first _pred x y = x.width * x.height < y.width * y.height; [_a', _b'] = sortc _pred [a, b]; place = Area _b' left top width height { // be careful in case b is smaller than a left = max_pair 0 ((_b'.width - _a'.width) / 2); top = max_pair 0 ((_b'.height - _a'.height) / 2); width = min_pair _a'.width _b'.width; height = min_pair _a'.height _b'.height; } _result = insert_noexpand place.left place.top (clip2fmt _b'.format a'') _b' { a'' = extract_area 0 0 place.width place.height _a'; } } insert_position = class _result { _vislevel = 3; position = Option "Position" [ "North-west", "North", "North-east", "West", "Centre", "East", "South-west", "South", "South-east", "Specify in pixels" ] 4; left = Expression "Pixels from left" 0; top = Expression "Pixels from top" 0; _result = map_binary insert a b { insert a b = insert_noexpand left top (clip2fmt b.format a) b, position == 9 = insert_noexpand xp yp (clip2fmt b.format a) b { xr = b.width - a.width; yr = b.height - a.height; xp = [0, xr / 2, xr]?((int) (position % 3)); yp = [0, yr / 2, yr]?((int) (position / 3)); } } } } } Image_select_item = Select_item; Image_draw_item = class Menupullright "_Draw" "draw lines, circles, rectangles, floods" { Line_item = class Menuaction "_Line" "draw line on image" { action x = class _result { _vislevel = 3; x1 = Expression "Start x" 0; y1 = Expression "Start y" 0; x2 = Expression "End x" 100; y2 = Expression "End y" 100; i = Expression "Ink" [0]; _result = map_unary line x { line im = draw_line x1 y1 x2 y2 i.expr im; } } } Rect_item = class Menuaction "_Rectangle" "draw rectangle on image" { action x = class _result { _vislevel = 3; rx = Expression "Left" 50; ry = Expression "Top" 50; rw = Expression "Width" 100; rh = Expression "Height" 100; f = Toggle "Fill" true; t = Scale "Line thickness" 1 50 3; i = Expression "Ink" [0]; _result = map_unary rect x { rect im = draw_rect_width rx ry rw rh f t i.expr im; } } } Circle_item = class Menuaction "_Circle" "draw circle on image" { action x = class _result { _vislevel = 3; cx = Expression "Centre x" 100; cy = Expression "Centre y" 100; r = Expression "Radius" 50; f = Toggle "Fill" true; i = Expression "Ink" [0]; _result = map_unary circle x { circle im = draw_circle cx cy r f i.expr im; } } } Flood_item = class Menuaction "_Flood" "flood bounded area of image" { action x = class _result { _vislevel = 3; sx = Expression "Start x" 100; sy = Expression "Start y" 100; e = Option "Flood while" [ "Not equal to ink", "Equal to start point" ] 0; // pick a default ink that won't flood, if we can i = Expression "Ink" default_ink { default_ink = [0], ! has_image x = pixel; pixel = map mean (bandsplit (extract_area sx sy 1 1 im)); im = get_image x; } _result = map_unary flood x { flood im = draw_flood sx sy i.expr im, e == 0 = draw_flood_blob sx sy i.expr im; } } } Draw_scalebar_item = class Menuaction "_Scale" "draw scale bar" { action x = class _result { _vislevel = 3; px = Expression "Left" 50; py = Expression "Top" 50; wid = Expression "Width" 100; thick = Scale "Line thickness" 1 50 3; text = String "Dimension text" "50μm"; font = Fontname "Use font" Workspaces.Preferences.PAINTBOX_FONT; pos = Option "Position Text" ["Above", "Below"] 1; vp = Option "Dimension by" [ "Inner Vertical Edge", "Centre of Vertical", "Outer Vertical Edge" ] 1; dpi = Expression "DPI" 100; ink = Colour "Lab" [50,0,0]; _result = map_unary process x { process im = blend (Image scale) ink' im { // make an ink compatible with the image ink' = colour_transform_to (get_type im) ink; x = to_real px; y = to_real py; w = to_real wid; d = to_real dpi; t = floor thick; bg = image_new (get_width im) (get_height im) (get_bands im) (get_format im) (get_coding im) (get_type im) 0 0 0; draw_block x y w t im = draw_rect_width x y w t true 1 [255] im; label = im_text text.value font.value w 1 d; lw = get_width label; lh = get_height label; ly = [y - lh - t, y + 2 * t]?pos; vx = [ [x - t, x + w], [x - t / 2, x + w - t / 2], [x, x + w - t] ]?vp; scale = (draw_block x y w t @ draw_block vx?0 (y - 2 * t) t (t * 5) @ draw_block vx?1 (y - 2 * t) t (t * 5) @ insert_noexpand (x + w / 2 - lw / 2) ly label) bg; } } } } } Image_join_item = class Menupullright "_Join" "join two or more images together" { Bandwise_item = class Menuaction "_Bandwise" "join two images bandwise" { action a b = join a b; } sep1 = Menuseparator; join_lr shim bg align a b = im2 { w = a.width + b.width + shim; h = max_pair a.height b.height; back = image_new w h a.bands a.format a.coding a.type bg 0 0; ya = [0, max_pair 0 ((b.height - a.height)/2), max_pair 0 (b.height - a.height)]; yb = [0, max_pair 0 ((a.height - b.height)/2), max_pair 0 (a.height - b.height)]; im1 = insert_noexpand 0 ya?align a back; im2 = insert_noexpand (a.width + shim) yb?align b im1; } join_tb shim bg align a b = im2 { w = max_pair a.width b.width; h = a.height + b.height + shim; back = image_new w h a.bands a.format a.coding a.type bg 0 0; xa = [0, max_pair 0 ((b.width - a.width)/2), max_pair 0 (b.width - a.width)]; xb = [0, max_pair 0 ((a.width - b.width)/2), max_pair 0 (a.width - b.width)]; im1 = insert_noexpand xa?align 0 a back; im2 = insert_noexpand xb?align (a.height + shim) b im1; } halign_names = ["Top", "Centre", "Bottom"]; valign_names = ["Left", "Centre", "Right"]; Left_right_item = class Menuaction "_Left to Right" "join two images left-right" { action a b = class _result { _vislevel = 3; shim = Scale "Spacing" 0 100 0; bg_colour = Expression "Background colour" 0; align = Option "Alignment" halign_names 1; _result = map_binary (join_lr shim.value bg_colour.expr align.value) a b; } } Top_bottom_item = class Menuaction "_Top to Bottom" "join two images top-bottom" { action a b = class _result { _vislevel = 3; shim = Scale "Spacing" 0 100 0; bg_colour = Expression "Background colour" 0; align = Option "Alignment" valign_names 1; _result = map_binary (join_tb shim.value bg_colour.expr align.value) a b; } } sep2 = Menuseparator; Array_item = class Menuaction "_Array" "join a list of lists of images into a single image" { action x = class _result { _vislevel = 3; hshim = Scale "Horizontal spacing" (-100) (100) 0; vshim = Scale "Vertical spacing" (-100) (100) 0; bg_colour = Expression "Background colour" 0; halign = Option "Horizontal alignment" valign_names 1; valign = Option "Vertical alignment" halign_names 1; // we can't use map_unary since chop-into-tiles returns a group of // groups and we want to be able to reassemble that // TODO: chop-into-tiles should return an array class which // displays as group but does not have the looping behaviour? _result = (image_set_origin 0 0 @ foldl1 (join_tb vshim.value bg_colour.expr halign.value) @ map (foldl1 (join_lr hshim.value bg_colour.expr valign.value))) (to_list (to_list x)); } } ArrayFL_item = class Menuaction "_Array from List" "join a list of images into a single image" { action x = class _result { _vislevel = 3; ncol = Number "Max. Number of Columns" 1; hshim = Scale "Horizontal spacing" (-100) (100) 0; vshim = Scale "Vertical spacing" (-100) (100) 0; bg_colour = Expression "Background colour" 0; halign = Option "Horizontal alignment" valign_names 1; valign = Option "Vertical alignment" halign_names 1; _l = split_lines ncol.value x.value, is_Group x = split_lines ncol.value x; _result = (image_set_origin 0 0 @ foldl1 (join_tb vshim.value bg_colour.expr halign.value) @ map (foldl1 (join_lr hshim.value bg_colour.expr valign.value))) (to_list (to_list _l)); } } } Image_tile_item = class Menupullright "Til_e" "tile an image across and down" { tile_widget default_type x = class _result { _vislevel = 3; across = Expression "Tiles across" 2; down = Expression "Tiles down" 2; repeat = Option "Tile type" ["Replicate", "Four-way mirror"] default_type; _result = map_unary process x { process image = tile across down image, repeat == 0 = tile across down image'' { image' = insert image.width 0 (fliplr image) image; image'' = insert 0 image.height (fliptb image') image'; } } } Replicate_item = class Menuaction "_Replicate" "replicate image across and down" { action x = tile_widget 0 x; } Fourway_item = class Menuaction "_Four-way Mirror" "four-way mirror across and down" { action x = tile_widget 1 x; } Chop_item = class Menuaction "_Chop Into Tiles" "slice an image into tiles" { action x = class _result { _vislevel = 3; tile_width = Expression "Tile width" 100; tile_height = Expression "Tile height" 100; hoverlap = Expression "Horizontal overlap" 0; voverlap = Expression "Vertical overlap" 0; _result = map_unary (Group @ map Group @ process) x { process x = imagearray_chop tile_width tile_height hoverlap voverlap x; } } } } #separator Pattern_images_item = class Menupullright "_Patterns" "make a variety of useful patterns" { Grey_item = class Menuaction "Grey _Ramp" "make a smooth grey ramp" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; orientation = Option "Orientation" [ "Horizontal", "Vertical" ] 0; foption = Option "Format" ["8 bit", "float"] 0; _result = Image im { gen = im_grey, foption == 0 = im_fgrey; w = to_real nwidth; h = to_real nheight; im = gen w h, orientation == 0 = rot90 (gen h w); } } } Xy_item = class Menuaction "_XY Image" "make a two band image whose pixel values are their coordinates" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; _result = Image (make_xy nwidth nheight); } } Gaussian_item = class Menuaction "Gaussian _Noise" "make an image of gaussian noise" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; mean = Scale "Mean" 0 255 128; deviation = Scale "Deviation" 0 128 50; _result = Image (im_gaussnoise (to_real nwidth) (to_real nheight) mean.value deviation.value); } } Fractal_item = class Menuaction "_Fractal" "make a fractal image" { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; dimension = Scale "Dimension" 2.001 2.999 2.001; _result = Image (im_fractsurf (to_real nsize) dimension.value); } } Checkerboard_item = class Menuaction "_Checkerboard" "make a checkerboard image" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; hpsize = Expression "Horizontal patch size" 8; vpsize = Expression "Vertical patch size" 8; hpoffset = Expression "Horizontal patch offset" 0; vpoffset = Expression "Vertical patch offset" 0; _result = Image (xstripes ^ ystripes) { pixels = make_xy nwidth nheight; xpixels = pixels?0 + to_real hpoffset; ypixels = pixels?1 + to_real vpoffset; make_stripe pix swidth = pix % (swidth * 2) >= swidth; xstripes = make_stripe xpixels (to_real hpsize); ystripes = make_stripe ypixels (to_real vpsize); } } } Grid_item = class Menuaction "Gri_d" "make a grid" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; hspace = Expression "Horizontal line spacing" 8; vspace = Expression "Vertical line spacing" 8; thick = Expression "Line thickness" 1; hoff = Expression "Horizontal grid offset" 4; voff = Expression "Vertical grid offset" 4; _result = Image (xstripes | ystripes) { pixels = make_xy nwidth nheight; xpixels = pixels?0 + to_real hoff; ypixels = pixels?1 + to_real voff; make_stripe pix swidth = pix % swidth < to_real thick; xstripes = make_stripe xpixels (to_real hspace); ystripes = make_stripe ypixels (to_real vspace); } } } Text_item = class Menuaction "_Text" "make a bitmap of some text" { action = class _result { _vislevel = 3; text = String "Text to paint" "Hello world!"; font = Fontname "Use font" Workspaces.Preferences.PAINTBOX_FONT; wrap = Expression "Wrap text at" 500; align = Option "Alignment" [ "Left", "Centre", "Right" ] 0; dpi = Expression "DPI" 300; _result = Image (im_text text.value font.value (to_real wrap) align.value (to_real dpi)); } } New_CIELAB_slice_item = class Menuaction "CIELAB _Slice" "make a slice through CIELAB space" { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; L = Scale "L value" 0 100 50; _result = Image (lab_slice (to_real nsize) L.value); } } sense_option = Option "Sense" [ "Pass", "Reject" ] 0; build fn size = (Image @ image_set_type Image_type.FOURIER @ rotquad @ fn) (im_create_fmask size size); New_ideal_item = class Menupullright "_Ideal Fourier Mask" "make various ideal Fourier filter masks" { High_low_item = class Menuaction "_High or Low Pass" ("make a mask image for a highpass/lowpass " ++ "ideal Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f sense.value fc.value 0 0 0 0; } } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" ("make a mask image for an ring pass/reject " ++ "ideal Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; rw = Scale "Ring width" 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f (sense.value + 6) fc.value rw.value 0 0 0; } } } Band_item = class Menuaction "_Band Pass or Band Reject" ("make a mask image for a band pass/reject " ++ "ideal Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fcx = Scale "Horizontal frequency cutoff" 0.01 0.99 0.5; fcy = Scale "Vertical frequency cutoff" 0.01 0.99 0.5; r = Scale "Radius" 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f (sense.value + 12) fcx.value fcy.value r.value 0 0; } } } } New_gaussian_item = class Menupullright "_Gaussian Fourier Mask" "make various Gaussian Fourier filter masks" { High_low_item = class Menuaction "_High or Low Pass" ("make a mask image for a highpass/lowpass " ++ "Gaussian Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f (sense.value + 4) fc.value ac.value 0 0 0; } } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" ("make a mask image for an ring pass/reject " ++ "Gaussian Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; rw = Scale "Ring width" 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f (sense.value + 10) fc.value rw.value ac.value 0 0; } } } Band_item = class Menuaction "_Band Pass or Band Reject" ("make a mask image for a band pass/reject " ++ "Gaussian Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fcx = Scale "Horizontal frequency cutoff" 0.01 0.99 0.5; fcy = Scale "Vertical frequency cutoff" 0.01 0.99 0.5; r = Scale "Radius" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f (sense.value + 16) fcx.value fcy.value r.value ac.value 0; } } } } New_butterworth_item = class Menupullright "_Butterworth Fourier Mask" "make various Butterworth Fourier filter masks" { High_low_item = class Menuaction "_High or Low Pass" ("make a mask image for a highpass/lowpass " ++ "Butterworth Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; order = Scale "Order" 1 10 2; _result = build param (to_real nsize) { param f = f (sense.value + 2) order.value fc.value ac.value 0 0; } } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" ("make a mask image for an ring pass/reject " ++ "Butterworth Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; rw = Scale "Ring width" 0.01 0.99 0.5; order = Scale "Order" 1 10 2; _result = build param (to_real nsize) { param f = f (sense.value + 8) order.value fc.value rw.value ac.value 0; } } } Band_item = class Menuaction "_Band Pass or Band Reject" ("make a mask image for a band pass/reject " ++ "Butterworth Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fcx = Scale "Horizontal frequency cutoff" 0.01 0.99 0.5; fcy = Scale "Vertical frequency cutoff" 0.01 0.99 0.5; r = Scale "Radius" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; order = Scale "Order" 1 10 2; _result = build param (to_real nsize) { param f = f (sense.value + 14) order.value fcx.value fcy.value r.value ac.value; } } } } } Test_images_item = class Menupullright "Test I_mages" "make a variety of test images" { Eye_item = class Menuaction "_Spatial Response" "image for testing the eye's spatial response" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; factor = Scale "Factor" 0.001 1 0.2; _result = Image (im_eye (to_real nwidth) (to_real nheight) factor.value); } } Zone_plate = class Menuaction "_Zone Plate" "make a zone plate" { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; _result = Image (im_zone (to_real nsize)); } } Frequency_test_chart_item = class Menuaction "_Frequency Testchart" "make a black/white frequency test pattern" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; sheight = Expression "Strip height (pixels)" 10; waves = Expression "Wavelengths" [64, 32, 16, 8, 4, 2]; _result = imagearray_assemble 0 0 (transpose [strips]) { freq_slice wave = Image (sin (grey / wave) > 0); strips = map freq_slice waves.expr; grey = im_fgrey (to_real nwidth) (to_real sheight) * 360 * (to_real nwidth); } } } CRT_test_chart_item = class Menuaction "CRT _Phosphor Chart" "make an image for measuring phosphor colours" { action = class _result { _vislevel = 3; brightness = Scale "Brightness" 0 255 200; psize = Expression "Patch size (pixels)" 32; _result = Image (imagearray_assemble 0 0 [[green, red], [blue, white]]) { black = image_new (to_real psize) (to_real psize) 1 Image_format.FLOAT Image_coding.NOCODING Image_type.B_W 0 0 0; notblack = black + brightness; green = black ++ notblack ++ black; red = notblack ++ black ++ black; blue = black ++ black ++ notblack; white = notblack ++ notblack ++ notblack; } } } Greyscale_chart_item = class Menuaction "_Greyscale" "make a greyscale" { action = class _result { _vislevel = 3; pwidth = Expression "Patch width" 8; pheight = Expression "Patch height" 8; npatches = Expression "Number of patches" 16; _result = Image (image_set_type Image_type.B_W (clip2fmt Image_format.UCHAR wedge)) { wedge = 255 / (to_real npatches - 1) * (int) (strip?0 / to_real pwidth) { strip = make_xy (to_real pwidth * to_real npatches) pheight; } } } } CMYK_test_chart_item = class Menuaction "_CMYK Wedges" "make a set of CMYK wedges" { action = class _result { _vislevel = 3; pwidth = Expression "Patch width" 8; pheight = Expression "Patch height" 8; npatches = Expression "Number of patches" 16; _result = Image (image_set_type Image_type.CMYK (clip2fmt Image_format.UCHAR strips)) { wedge = 255 / (to_real npatches - 1) * (int) (strip?0 / to_real pwidth) { strip = make_xy (to_real pwidth * to_real npatches) pheight; } black = wedge * 0; C = wedge ++ black ++ black ++ black; M = black ++ wedge ++ black ++ black; Y = black ++ black ++ wedge ++ black; K = black ++ black ++ black ++ wedge; strips = imagearray_assemble 0 0 [[C],[M],[Y],[K]]; } } } Colour_atlas_item = class Menuaction "_Colour Atlas" "make a grid of patches grouped around a colour" { action = class _result { _vislevel = 3; start = Colour_picker "Lab" [50,0,0]; nstep = Expression "Number of steps" 9; ssize = Expression "Step size" 10; psize = Expression "Patch size" 32; sepsize = Expression "Separator size" 4; _result = colour_transform_to (get_type start) blocks''' { size = (to_real nstep * 2 + 1) * to_real psize - to_real sepsize; xy = make_xy size size; xy_grid = (xy % to_real psize) < (to_real psize - to_real sepsize); grid = xy_grid?0 & xy_grid?1; blocks = (int) (to_real ssize * ((int) (xy / to_real psize))); lab_start = colour_transform_to Image_type.LAB start; blocks' = blocks - to_real nstep * to_real ssize + Vector (tl lab_start.value); blocks'' = hd lab_start.value ++ Image blocks'; blocks''' = image_set_type Image_type.LAB blocks'', Image grid = 0; } } } } nip2-8.7.0/share/nip2/compat/7.28/_list.def0000644000175000017500000002245013224651032014745 00000000000000/* any l: or all the elements of list l together * * any (map (equal 0) list) == true, if any element of list is zero. * any :: [bool] -> bool */ any = foldr logical_or false; /* all l: and all the elements of list l together * * all (map (==0) list) == true, if every element of list is zero. * all :: [bool] -> bool */ all = foldr logical_and true; /* concat l: join a list of lists together * * concat ["abc","def"] == "abcdef". * concat :: [[*]] -> [*] */ concat l = foldr join [] l; /* delete eq x l: delete the first x from l * * delete equal 'b' "abcdb" == "acdb" * delete :: (* -> bool) -> * -> [*] -> [*] */ delete eq a l = [], l == [] = y, eq a b = b : delete eq a y { b:y = l; } /* difference eq a b: delete b from a * * difference equal "asdf" "ad" == "sf" * difference :: (* -> bool) -> [*] -> [*] -> [*] */ difference = foldl @ converse @ delete; /* drop n l: drop the first n elements from list l * * drop 3 "abcd" == "d" * drop :: num -> [*] -> [*] */ drop n l = l, n <= 0 || l == [] = drop (n - 1) (tl l); /* dropwhile fn l: drop while fn is true * * dropwhile is_digit "1234pigs" == "pigs" * dropwhile :: (* -> bool) -> [*] -> [*] */ dropwhile fn l = [], l == [] = dropwhile fn x, fn a = l { a:x = l; } /* extract n l: extract element at index n from list l */ extract = converse subscript; /* filter fn l: return all elements of l for which predicate fn holds * * filter is_digit "1one2two3three" = "123" * filter :: (* -> bool) -> [*] -> [*] */ filter fn l = foldr addif [] l { addif x l = x : l, fn x; = l; } /* foldl fn st l: fold list l from the left with function fn and start st * * Start from the left hand end of the list (unlike foldr, see below). * foldl is less useful (and much slower). * * foldl fn start [a,b .. z] = ((((st fn a) fn b) ..) fn z) * foldl :: (* -> ** -> *) -> * -> [**] -> * */ foldl fn st l = st, l == [] = foldl fn (fn st (hd l)) (tl l); /* foldl1 fn l: like foldl, but use the 1st element as the start value * * foldl1 fn [1,2,3] == ((1 fn 2) fn 3) * foldl1 :: (* -> * -> *) -> [*] -> * */ foldl1 fn l = [], l == [] = foldl fn (hd l) (tl l); /* foldr fn st l: fold list l from the right with function fn and start st * * foldr fn st [a,b..z] = (a fn (b fn (.. (z fn st)))) * foldr :: (* -> ** -> **) -> ** -> [*] -> ** */ foldr fn st l = st, l == [] = fn (hd l) (foldr fn st (tl l)); /* foldrl fn l: like foldr, but use the 1st element as the start value * * foldr1 fn [1,2,3,4] == (2 fn (3 fn (4 fn 1))) * foldr1 :: (* -> * -> *) -> [*] -> * */ foldr1 fn l = [], l == [] = foldr fn (hd l) (tl l); /* Search a list for an element, returning its index (or -1) * * index (equal 12) [13,12,11] == 1 * index :: (* -> bool) -> [*] -> real */ index fn list = search list 0 { search l n = -1, l == [] = n, fn (hd l) = search (tl l) (n + 1); } /* init l: remove last element of list l * * The dual of tl. * init [1,2,3] == [1,2] * init :: [*] -> [*] */ init l = error "init of []", l == []; = [], tl l == []; = hd l : init (tl l); /* iterate f x: repeatedly apply f to x * * return the infinite list [x, f x, f (f x), ..]. * iterate (multiply 2) 1 == [1, 2, 4, 8, 16, 32, 64 ... ] * iterate :: (* -> *) -> * -> [*] */ iterate f x = x : iterate f (f x); /* join_sep sep l: join a list with a separator * * join_sep ", " (map print [1 .. 4]) == "1, 2, 3, 4" * join_sep :: [*] -> [[*]] -> [*] */ join_sep sep l = foldl1 fn l { fn a b = a ++ sep ++ b; } /* last l: return the last element of list l * * The dual of hd. last [1,2,3] == 3 * last :: [*] -> [*] */ last l = error "last of []", l == [] = hd l, tl l == [] = last (tl l); /* len l: length of list l * (see also is_list_len and friends in predicate.def) * * len :: [*] -> num */ len l = 0, l == [] = 1 + len (tl l); /* limit l: return the first element of l which is equal to its predecessor * * useful for checking for convergence * limit :: [*] -> * */ limit l = error "incorrect use of limit", l == [] || tl l == [] || tl (tl l) == [] = a, a == b = limit (b : x) { a:b:x = l; } /* Turn a function of n args into a function which takes a single arg of an * n-element list. */ list_1ary fn x = fn x?0; list_2ary fn x = fn x?0 x?1; list_3ary fn x = fn x?0 x?1 x?2; list_4ary fn x = fn x?0 x?1 x?2 x?3; list_5ary fn x = fn x?0 x?1 x?2 x?3 x?4; list_6ary fn x = fn x?0 x?1 x?2 x?3 x?4 x?5; list_7ary fn x = fn x?0 x?1 x?2 x?3 x?4 x?5 x?6; /* map fn l: map function fn over list l * * map :: (* -> **) -> [*] -> [**] */ map f l = [], l == []; = f (hd l) : map f (tl l); /* map2 fn l1 l2: map two lists together with fn * * map2 :: (* -> ** -> ***) -> [*] -> [**] -> [***] */ map2 fn l1 l2 = map (list_2ary fn) (zip2 l1 l2); /* map3 fn l1 l2 l3: map three lists together with fn * * map3 :: (* -> ** -> *** -> ****) -> [*] -> [**] -> [***] -> [****] */ map3 fn l1 l2 l3 = map (list_3ary fn) (zip3 l1 l2 l3); /* member l x: true if x is a member of list l * * is_digit == member "0123456789" * member :: [*] -> * -> bool */ member l x = any (map (equal x) l); /* merge b l r: merge two lists based on a bool list * * merge :: [bool] -> [*] -> [*] -> [*] */ merge p l r = [], p == [] || l == [] || r == [] = a : merge z x y, c = b : merge z x y { a:x = l; b:y = r; c:z = p; } /* mkset eq l: remove duplicates from list l using equality function * * mkset :: (* -> bool) -> [*] -> [*] */ mkset eq l = [], l == [] = a : filter (not @ eq a) (mkset eq x) { a:x = l; } /* postfix l r: add r to the end of list l * * The dual of ':'. * postfix :: [*] -> ** -> [*,**] */ postfix l r = l ++ [r]; /* repeat x: make an infinite list of xes * * repeat :: * -> [*] */ repeat x = map (const x) [1..]; /* replicate n x: make n copies of x in a list * * replicate :: num -> * -> [*] */ replicate n x = take n (repeat x); /* reverse l: reverse list l * * reverse :: [*] -> [*] */ reverse l = foldl (converse cons) [] l; /* scan fn st l: apply (fold fn r) to every initial segment of a list * * scan add 0 [1,2,3] == [1,3,6] * scan :: (* -> ** -> *) -> * -> [**] -> [*] */ scan fn = g { g st l = [st], l == [] = st : g (fn st a) x { a:x = l; } } /* sort l: sort list l into ascending order * * sort :: [*] -> [*] */ sort l = sortc less_equal l; /* sortc comp l: sort list l into order using a comparision function * * Uses merge sort (n log n behaviour) * sortc :: (* -> * -> bool) -> [*] -> [*] */ sortc comp l = l, n <= 1 = merge (sortc comp (take n2 l)) (sortc comp (drop n2 l)) { n = len l; n2 = (int) (n / 2); /* merge l1 l2: merge sorted lists l1 and l2 to make a single * sorted list */ merge l1 l2 = l2, l1 == [] = l1, l2 == [] = a : merge x (b : y), comp a b = b : merge (a : x) y { a:x = l1; b:y = l2; } } /* sortpl pl l: sort by a list of predicates * * sortpl :: (* -> bool) -> [*] -> [*] */ sortpl pl l = sortc (test pl) l { /* Comparision function ... put true before false, if equal move on to * the next predicate. */ test pl a b = true, pl == [] = ta, ta != tb = test (tl pl) a b { ta = pl?0 a; tb = pl?0 b; } } /* sortr l: sort list l into descending order * * sortr :: [*] -> [*] */ sortr l = sortc more l; /* split fn l: break a list into sections separated by many fn * * split is_space " hello world " == ["hello", "world"] * split is_space " " == [] * split :: (* -> bool) -> [*] -> [[*]] */ split fn l = [], l == [] || l' == [] = head : split fn tail { nfn = not @ fn; l' = dropwhile fn l; head = takewhile nfn l'; tail = dropwhile nfn l'; } /* splits fn l: break a list into sections separated by a single fn * * split (equal ',') ",,1" == ["", "", "1"] * split :: (* -> bool) -> [*] -> [[*]] */ splits fn l = [], l == [] = head : splits fn tail { fn' = not @ fn; dropif x = [], x == [] = tl x; head = takewhile fn' l; tail = dropif (dropwhile fn' l); } /* splitpl fnl l: split a list up with a list of predicates * * splitpl [is_digit, is_letter, is_digit] "123cat" == ["123", "cat", []] * splitpl :: [* -> bool] -> [*] -> [[*]] */ splitpl fnl l = l, fnl == [] = head : splitpl (tl fnl) tail { head = takewhile (hd fnl) l; tail = dropwhile (hd fnl) l; } /* split_lines n l: split a list into equal length lines * * split_lines 4 "1234567" == ["1234", "567"] * splitl :: int -> [*] -> [[*]] */ split_lines n l = [], l == [] = take n l : split_lines n (drop n l); /* take n l: take the first n elements from list l * take :: num -> [*] -> [*] */ take n l = [], n <= 0 = [], l == [] = hd l : take (n-1) (tl l); /* takewhile fn l: take from the front of a list while predicate fn holds * * takewhile is_digit "123onetwothree" == "123" * takewhile :: (* -> bool) -> [*] -> [*] */ takewhile fn l = [], l == [] = hd l : takewhile fn (tl l), fn (hd l) = []; /* zip2 l1 l2: zip two lists together * * zip2 [1,2] ['a', 'b', 'c'] == [[1,'a'],[2,'b']] * zip2 :: [*] -> [**] -> [[*,**]] */ zip2 l1 l2 = [], l1 == [] || l2 == [] = [hd l1, hd l2] : zip2 (tl l1) (tl l2); /* zip3 l1 l2 l3: zip three lists together * * zip3 [1,2] ['a', 'b', 'c'] [true] == [[1,'a',true]] * zip3 :: [*] -> [**] ->[***] -> [[*,**,***]] */ zip3 l1 l2 l3 = [], l1 == [] || l2 == [] || l3 == [] = [hd l1, hd l2, hd l3] : zip3 (tl l1) (tl l2) (tl l3); nip2-8.7.0/share/nip2/compat/7.28/_Object.def0000644000175000017500000002600513224651032015200 00000000000000/* Lots of little arg checks. Global for convenience. */ check_any = [(const true), _ "any"]; check_bool = [is_bool, _ "boolean"]; check_real = [is_real, _ "real"]; check_ureal = [is_ureal, _ "unsigned real"]; check_preal = [is_preal, _ "positive real"]; check_list = [is_list, _ "list"]; check_real_list = [is_real_list, _ "list of real"]; check_string = [is_string, _ "string"]; check_string_list = [is_string_list, _ "list of string"]; check_int = [is_int, _ "integer"]; check_uint = [is_uint, _ "unsigned integer"]; check_pint = [is_pint, _ "positive integer"]; check_matrix = [is_matrix, _ "rectangular array of real"]; check_matrix_display = [Matrix_display.is_display, _ "0|1|2|3"]; check_image = [is_image, _ "image"]; check_xy_list = [is_xy_list, _ "list of form [[1, 2], [3, 4], [5, 6], ...]"]; check_instance name = [is_instanceof name, name]; check_Image = check_instance "Image"; check_Matrix = [is_Matrix, _ "Matrix"]; check_colour_space = [is_colour_space, join_sep "|" Image_type.colour_spaces.names]; check_rectangular = [is_rectangular, _ "rectangular [[*]]"]; check_Guide = [is_Guide, _ "HGuide|VGuide"]; check_Colour = check_instance (_ "Colour"); check_Mark = check_instance (_ "Mark"); /* Check a set of args to a class. Two members to look at: _check_args and * _check_all. * * - each line in _check_args is [arg, "arg name", [test_fn, "arg type"]] * same number of lines as there are args * * stuff like "arg 2 must be real" * * - each line in _check_all is [test, "description"] * any number of lines * * stuff like "to must be greater than from" * * generate an error dialog with a helpful message on failure. * * Have as a separate function to try to keep the size of _Object down. */ check_args x = error message, badargs != [] || badalls != [] = x { argcheck = x._check_args; allcheck = x._check_all; // indent string indent = " "; // test for a condition in a check line fails test_fail x = ! x?0; // set of failed argcheck indexes badargs = map (extract 1) (filter test_fail (zip2 (map testarg argcheck) [0..])) { testarg x = x?2?0 x?0; } // set of failed allcheck indexes badalls = map (extract 1) (filter test_fail (zip2 (map hd allcheck) [0..])); // the error message message = _ "bad properties for " ++ "\"" ++ x.name ++ "\"\n" ++ argmsg ++ allmsg ++ "\n" ++ _ "where" ++ "\n" ++ arg_types ++ extra; // make the failed argcheck messages ... eg. ""value" should be // real, you passed " etc. argmsg = concat (map fmt badargs) { fmt n = indent ++ "\"" ++ argcheck?n?1 ++ "\"" ++ _ " should be of type " ++ argcheck?n?2?1 ++ ", " ++ _ "you passed" ++ ":\n" ++ indent ++ indent ++ print argcheck?n?0 ++ "\n"; } // make the failed allcheck messages ... eg "condition failed: // x < y" ... don't make a message if any typechecks have // failed, as we'll probably error horribly allmsg = [], badargs != [] = concat (map fmt badalls) ++ _ "you passed" ++ "\n" ++ concat (map fmt_arg argcheck) { fmt n = _ "condition failed" ++ ": " ++ allcheck?n?1 ++ "\n"; fmt_arg l = indent ++ l?1 ++ " = " ++ print l?0 ++ "\n"; } // make arg type notes arg_types = join_sep "\n" (map fmt argcheck) { fmt l = indent ++ l?1 ++ " is of type " ++ l?2?1; } // extra bit at the bottom, if we have any conditions extra = [], allcheck == [] = "\n" ++ _ "and" ++ "\n" ++ all_desc; // make a list of all the allcheck descriptions, with a few // spaces in front all_desc_list = map (join indent @ extract 1) allcheck; // join em up to make a set of condition notes all_desc = join_sep "\n" all_desc_list; } /* Operator overloading stuff. */ Operator_type = class { ARITHMETIC = 1; // eg. add RELATIONAL = 2; // eg. less COMPOUND = 3; // eg. max/mean/etc. COMPOUND_REWRAP = 4; // eg. transpose } Operator op_name fn type symmetric = class { } /* Form the converse of an Operator. */ oo_converse op = Operator (converse_name op.op_name) (converse op.fn) op.type op.symmetric { converse_name x = init x, last x == last "'" = x ++ "'"; } /* Given an operator name, look up the definition. */ oo_binary_lookup op_name = matches?0, matches != [] = error (_ "unknown binary operator" ++ ": " ++ print op_name) { operator_table = [ Operator "add" add Operator_type.ARITHMETIC true, Operator "subtract" subtract Operator_type.ARITHMETIC false, Operator "remainder" remainder Operator_type.ARITHMETIC false, Operator "power" power Operator_type.ARITHMETIC false, Operator "subscript" subscript Operator_type.ARITHMETIC false, Operator "left_shift" left_shift Operator_type.ARITHMETIC false, Operator "right_shift" right_shift Operator_type.ARITHMETIC false, Operator "divide" divide Operator_type.ARITHMETIC false, Operator "join" join Operator_type.ARITHMETIC false, Operator "multiply" multiply Operator_type.ARITHMETIC true, Operator "logical_and" logical_and Operator_type.ARITHMETIC true, Operator "logical_or" logical_or Operator_type.ARITHMETIC true, Operator "bitwise_and" bitwise_and Operator_type.ARITHMETIC true, Operator "bitwise_or" bitwise_or Operator_type.ARITHMETIC true, Operator "eor" eor Operator_type.ARITHMETIC true, Operator "comma" comma Operator_type.ARITHMETIC false, Operator "if_then_else" if_then_else Operator_type.ARITHMETIC false, Operator "equal" equal Operator_type.RELATIONAL true, Operator "not_equal" not_equal Operator_type.RELATIONAL true, Operator "less" less Operator_type.RELATIONAL false, Operator "less_equal" less_equal Operator_type.RELATIONAL false ]; matches = filter test_name operator_table; test_name x = x.op_name == op_name; } /* Given an operator name, look up a function that implements that * operator. */ oo_unary_lookup op_name = matches?0, matches != [] = error (_ "unknown unary operator" ++ ": " ++ print op_name) { operator_table = [ /* Operators. */ Operator "cast_signed_char" cast_signed_char Operator_type.ARITHMETIC false, Operator "cast_unsigned_char" cast_unsigned_char Operator_type.ARITHMETIC false, Operator "cast_signed_short" cast_signed_short Operator_type.ARITHMETIC false, Operator "cast_unsigned_short" cast_unsigned_short Operator_type.ARITHMETIC false, Operator "cast_signed_int" cast_signed_int Operator_type.ARITHMETIC false, Operator "cast_unsigned_int" cast_unsigned_int Operator_type.ARITHMETIC false, Operator "cast_float" cast_float Operator_type.ARITHMETIC false, Operator "cast_double" cast_double Operator_type.ARITHMETIC false, Operator "cast_complex" cast_complex Operator_type.ARITHMETIC false, Operator "cast_double_complex" cast_double_complex Operator_type.ARITHMETIC false, Operator "unary_minus" unary_minus Operator_type.ARITHMETIC false, Operator "negate" negate Operator_type.RELATIONAL false, Operator "complement" complement Operator_type.ARITHMETIC false, Operator "unary_plus" unary_plus Operator_type.ARITHMETIC false, /* Built in projections. */ Operator "re" re Operator_type.ARITHMETIC false, Operator "im" im Operator_type.ARITHMETIC false, Operator "hd" hd Operator_type.ARITHMETIC false, Operator "tl" tl Operator_type.ARITHMETIC false, /* Maths builtins. */ Operator "sin" sin Operator_type.ARITHMETIC false, Operator "cos" cos Operator_type.ARITHMETIC false, Operator "tan" tan Operator_type.ARITHMETIC false, Operator "asin" asin Operator_type.ARITHMETIC false, Operator "acos" acos Operator_type.ARITHMETIC false, Operator "atan" atan Operator_type.ARITHMETIC false, Operator "log" log Operator_type.ARITHMETIC false, Operator "log10" log10 Operator_type.ARITHMETIC false, Operator "exp" exp Operator_type.ARITHMETIC false, Operator "exp10" exp10 Operator_type.ARITHMETIC false, Operator "ceil" ceil Operator_type.ARITHMETIC false, Operator "floor" floor Operator_type.ARITHMETIC false ]; matches = filter test_name operator_table; test_name x = x.op_name == op_name; } /* Find the matching methods in a method table. */ oo_method_lookup table = map (extract 0) (filter (extract 1) table); /* A binary op: a is a class, b may be a class ... eg. "add" a b two obvious ways to find a method: - a.oo_binary_search "add" (+) b - b.oo_binary_search "add'" (converse (+)) a, is_class b if these fail but op is a symmetric operator (eg. a + b == b + a), we can also try reversing the args - a.oo_binary_search "add'" (converse (+)) b - b.oo_binary_search "add" (+) a, is_class b if those fail as well, but this is ==, do pointer equals as a fallback */ oo_binary_function op a b = matches1?0, matches1 != [] = matches2?0, is_class b && matches2 != [] = matches3?0, op.symmetric && matches3 != [] = matches4?0, op.symmetric && is_class b && matches4 != [] = pointer_equal a b, op.op_name == "equal" || op.op_name == "equal'" = not_pointer_equal a b, op.op_name == "not_equal" || op.op_name == "not_equal'" = error (_ "No method found for binary operator." ++ "\n" ++ _ "left" ++ " = " ++ print a ++ "\n" ++ _ "operator" ++ " = " ++ op.op_name ++ "\n" ++ _ "right" ++ " = " ++ print b) { matches1 = oo_method_lookup (a.oo_binary_table op b); matches2 = oo_method_lookup (b.oo_binary_table (oo_converse op) a); matches3 = oo_method_lookup (a.oo_binary_table (oo_converse op) b); matches4 = oo_method_lookup (b.oo_binary_table op a); } /* A binary op: a is not a class, b is a class ... eg. "subtract" a b only one way to find a method: - b.oo_binary_search "subtract'" (converse (-)) a if this fails but op is a symmetric operator (eg. a + b == b + a), we can try reversing the args - b.oo_binary_search "add" (+) a, is_class b if that fails as well, but this is ==, do pointer equals as a fallback */ oo_binary'_function op a b = matches1?0, matches1 != [] = matches2?0, op.symmetric && matches2 != [] = pointer_equal a b, op.op_name == "equal" || op.op_name == "equal'" = not_pointer_equal a b, op.op_name == "not_equal" || op.op_name == "not_equal'" = error (_ "No method found for binary operator." ++ "\n" ++ _ "left" ++ " = " ++ print a ++ "\n" ++ _ "operator" ++ " = " ++ op.op_name ++ "\n" ++ _ "right" ++ " = " ++ print b) { matches1 = oo_method_lookup (b.oo_binary_table (oo_converse op) a); matches2 = oo_method_lookup (b.oo_binary_table op a); } oo_unary_function op x = matches?0, matches != [] = error (_ "No method found for unary operator." ++ "\n" ++ _ "operator" ++ " = " ++ op.op_name ++ "\n" ++ _ "argument" ++ " = " ++ print x) { matches = oo_method_lookup (x.oo_unary_table op); } /* Base class for nip's built-in classes ... base check function, base * operator overload functions. */ _Object = class { check = check_args this; // these should always be defined _check_args = []; _check_all = []; /* Operator overloading stuff. */ oo_binary op x = oo_binary_function (oo_binary_lookup op) this x; oo_binary' op x = oo_binary'_function (oo_binary_lookup op) x this; oo_unary op = oo_unary_function (oo_unary_lookup op) this; oo_binary_table op x = []; oo_unary_table op = []; } nip2-8.7.0/share/nip2/compat/7.28/_predicate.def0000644000175000017500000002672113224651032015737 00000000000000 /* is_colour_space str: is a string one of nip's colour space names */ is_colour_space str = Image_type.colour_spaces.present 0 str; /* is_colour_type n: is a number one of VIPS's colour spaces */ is_colour_type n = Image_type.colour_spaces.present 1 n; /* is_number: is a real or a complex number. */ is_number a = is_real a || is_complex a; /* is_int: is an integer */ is_int a = is_real a && a == (int) a; /* is_uint: is an unsigned integer */ is_uint a = is_int a && a >= 0; /* is_pint: is a positive integer */ is_pint a = is_int a && a > 0; /* is_preal: is a positive real */ is_preal a = is_real a && a > 0; /* is_ureal: is an unsigned real */ is_ureal a = is_real a && a >= 0; /* is_letter c: true if character c is an ASCII letter * * is_letter :: char -> bool */ is_letter c = ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z'); /* is_digit c: true if character c is an ASCII digit * * is_digit :: char->bool */ is_digit x = '0' <= x && x <= '9'; /* A whitespace character. * * is_space :: char->bool */ is_space = member " \n\t"; /* List str starts with section prefix. * * is_prefix "hell" "hello world!" == true * is_prefix :: [*] -> [*] -> bool */ is_prefix prefix str = take (len prefix) str == prefix; /* List str ends with section suffix. * * is_suffix "ld!" "hello world!" == true * is_suffix :: [*] -> [*] -> bool */ is_suffix suffix str = take (len suffix) (reverse str) == reverse suffix; /* List contains seqence. * * is_substr "llo" "hello world!" == true * is_substr :: [*] -> [*] -> bool */ is_substr seq str = any (map (is_prefix seq) (iterate tl str)); /* is_listof p s: true if finite list with p true for every element. */ is_listof p l = is_list l && all (map p l); /* is_string s: true if finite list of char. */ is_string s = is_listof is_char s; /* is_real_list l: is l a list of real numbers ... test each element, * so no infinite lists pls. */ is_real_list l = is_listof is_real l; /* is_string_list l: is l a finite list of finite strings. */ is_string_list l = is_listof is_string l; /* Test list length ... quicker than len x == n for large lists. */ is_list_len n x = true, x == [] && n == 0 = false, x == [] || n == 0 = is_list_len (n - 1) (tl x); is_list_len_more n x = true, x != [] && n == 0 = false, x == [] || n == 0 = is_list_len_more (n - 1) (tl x); is_list_len_more_equal n x = true, n == 0 = false, x == [] = is_list_len_more_equal (n - 1) (tl x); /* is_rectangular l: is l a rectangular data structure */ is_rectangular l = true, !is_list l = true, all (map is_obj l) = true, all (map is_list l) && all (map (not @ is_obj) l) && all (map is_rectangular l) && is_list_len_more 0 l && all (map (is_list_len (len (hd l))) (tl l)) = false { // treat strings as a base type, not [char] is_obj x = !is_list x || is_string x; } /* is_matrix l: is l a list of lists of real numbers, all the same length * * [[]] is the empty matrix, [] is the empty list ... disallow [] */ is_matrix l = l != [] && is_listof is_real_list l && is_rectangular l; /* is_square_matrix l: is l a matrix with width == height */ is_square_matrix l = true, l == [[]] = is_matrix l && is_list_len (len (hd l)) l; /* is_oddmatrix l: is l a matrix with odd-length sides */ is_oddmatrix l = true, l == [[]] = is_matrix l && len l % 2 == 1 && len l?0 % 2 == 1; /* is_odd_square_matrix l: is l a square_matrix with odd-length sides */ is_odd_square_matrix l = is_square_matrix l && len l % 2 == 1; /* Is an item in a column of a table? */ is_incolumn n table x = member (map (extract n) table) x; /* Is HGuide or VGuide. */ is_HGuide x = is_instanceof "HGuide" x; is_VGuide x = is_instanceof "VGuide" x; is_Guide x = is_HGuide x || is_VGuide x; is_Mark x = is_instanceof "Mark" x; is_Group x = is_instanceof "Group" x; is_NULL x = is_instanceof "NULL" x; is_List x = is_instanceof "List" x; is_Image x = is_instanceof "Image" x; is_Region x = is_instanceof "Region" x; is_Real x = is_instanceof "Real" x; is_Matrix x = is_instanceof "Matrix_base" x; is_Vector x = is_instanceof "Vector" x; is_Colour x = is_instanceof "Colour" x; is_Arrow x = is_instanceof "Arrow" x; is_Bool x = is_instanceof "Bool" x; is_Scale x = is_instanceof "Scale" x; is_Rect x = is_instanceof "Rect" x; is_Number x = is_instanceof "Number" x; is_Expression x = is_instanceof "Expression" x; is_String x = is_instanceof "String" x; /* A list of the form [[1,2],[3,4],[5,6]...] */ is_xy_list l = is_list l && all (map xy l) { xy l = is_real_list l && is_list_len 2 l; } // does a nested list structure contain a Group object? contains_Group l = true, is_list l && any (map is_Group l) = any (map contains_Group l), is_list l = false; /* Does an object have a sensible VIPS type? */ has_type x = is_image x || is_Image x || is_Arrow x || is_Colour x; /* Try to get a VIPS image type from an object. */ get_type x = get_type_im x, is_image x = get_type_im x.value, is_Image x = get_type_im x.image.value, is_Arrow x = Image_type.colour_spaces.lookup 0 1 x.colour_space, is_Colour x // slightly odd ... but our display is always 0-255, so it makes sense for // a plain number to be in the same range = Image_type.sRGB, is_real x = error ("get_type: unable to get type from " ++ print x) { // get the type from a VIPS image ... but only if it makes sense with // the rest of the image // we often have Type set wrong, hence the ugly guessing :-( // can have alpha, hence we let bands be one more than you might think get_type_im im = Image_type.LABQ, coding == Image_coding.LABPACK = Image_type.GREY16, type == Image_type.GREY16 && is_bands 1 = Image_type.HISTOGRAM, type == Image_type.HISTOGRAM && (width == 1 || height == 1) = Image_type.B_W, is_bands 1 = Image_type.CMYK, type == Image_type.CMYK && is_bands 4 = type, is_colorimetric && is_bands 3 = Image_type.sRGB, !is_colorimetric && is_bands 3 = Image_type.MULTIBAND, !is_colorimetric && !is_bands 3 = type { type = get_header "Type" im; coding = get_header "Coding" im; bands = get_header "Bands" im; width = get_header "Xsize" im; height = get_header "Ysize" im; // 3-band colorimetric types we allow ... the things which the // Colour/Convert To menu can make, excluding mono. ok_types = [ Image_type.sRGB, Image_type.RGB16, Image_type.LAB, Image_type.LABQ, Image_type.LABS, Image_type.LCH, Image_type.XYZ, Image_type.YXY, Image_type.UCS ]; is_colorimetric = member ok_types type; // is bands n, with an optional alpha (ie. can be n + 1 too) is_bands n = bands == n || bands == n + 1; } } has_format x = has_member "format" x || is_Arrow x || is_image x; get_format x = x.format, has_member "format" x = x.image.format, is_Arrow x = get_header "BandFmt" x, is_image x = error ("get_format: unable to get format from " ++ print x); has_bits x = has_member "bits" x || is_Arrow x || is_image x; get_bits x = x.bits, has_member "bits" x = x.image.bits, is_Arrow x = get_header "Bbits" x, is_image x = error ("get_bits: unable to get bits from " ++ print x); has_bands x = is_image x || has_member "bands" x || is_Arrow x; get_bands x = x.bands, has_member "bands" x = x.image.bands, is_Arrow x = get_header "Bands" x, is_image x = 1, is_real x = len x, is_real_list x = error ("get_bands: unable to get bands from " ++ print x); has_coding x = has_member "coding" x || is_Arrow x || is_image x; get_coding x = x.coding, has_member "coding" x = x.image.coding, is_Arrow x = get_header "Coding" x, is_image x = Image_coding.NOCODING, is_real x = error ("get_coding: unable to get coding from " ++ print x); has_xres x = has_member "xres" x || is_Arrow x || is_image x; get_xres x = x.xres, has_member "xres" x = x.image.xres, is_Arrow x = get_header "Xres" x, is_image x = error ("get_xres: unable to get xres from " ++ print x); has_yres x = has_member "yres" x || is_Arrow x || is_image x; get_yres x = x.yres, has_member "yres" x = x.image.yres, is_Arrow x = get_header "Yres" x, is_image x = error ("get_yres: unable to get yres from " ++ print x); has_xoffset x = has_member "xoffset" x || is_Arrow x || is_image x; get_xoffset x = x.xoffset, has_member "xoffset" x = x.image.xoffset, is_Arrow x = get_header "Xoffset" x, is_image x = error ("get_xoffset: unable to get xoffset from " ++ print x); has_yoffset x = has_member "yoffset" x || is_Arrow x || is_image x; get_yoffset x = x.yoffset, has_member "yoffset" x = x.image.yoffset, is_Arrow x = get_header "Yoffset" x, is_image x = error ("get_yoffset: unable to get yoffset from " ++ print x); has_value = has_member "value"; get_value x = x.value; has_image x = is_image x || is_Image x || is_Arrow x; get_image x = x.value, is_Image x = x.image.value, is_Arrow x = x, is_image x = error ("get_image: unable to get image from " ++ print x); has_number x = is_number x || is_Real x; get_number x = x.value, is_Real x = x, is_number x = error ("get_number: unable to get number from " ++ print x); has_real x = is_real x || is_Real x; get_real x = x.value, is_Real x = x, is_real x = error ("get_real: unable to get real from " ++ print x); has_width x = has_member "width" x || is_image x; get_width x = x.width, has_member "width" x = get_header "Xsize" x, is_image x = error ("get_width: unable to get width from " ++ print x); has_height x = has_member "height" x || is_image x; get_height x = x.height, has_member "height" x = get_header "Ysize" x, is_image x = error ("get_height: unable to get height from " ++ print x); has_left x = has_member "left" x; get_left x = x.left, has_member "left" x = error ("get_left: unable to get left from " ++ print x); has_top x = has_member "top" x; get_top x = x.top, has_member "top" x = error ("get_top: unable to get top from " ++ print x); // like has/get member, but first in a lst of objects has_member_list has objects = filter has objects != []; // need one with the args swapped get_member = converse dot; // get a member from the first of a list of objects to have it get_member_list has get objects = hd members, members != [] = error "unable to get property" { members = map get (filter has objects); } is_hist x = has_image x && (h == 1 || w == 1 || t == Image_type.HISTOGRAM) { im = get_image x; w = get_width im; h = get_height im; t = get_type im; } get_header field x = oo_unary_function get_header_op x, is_class x = get_header_image x, is_image x = error (_ "bad arguments to " ++ "get_header") { get_header_op = Operator "get_header" (get_header field) Operator_type.COMPOUND false; get_header_image im = im_header_int field im, type == itype = im_header_double field im, type == dtype = im_header_string field im, type == stype1 || type == stype2 = error (_ "image has no field " ++ field), type == 0 = error (_ "unknown type for field " ++ field) { type = im_header_get_typeof field im; itype = name2gtype "gint"; dtype = name2gtype "gdouble"; stype1 = name2gtype "VipsRefString"; stype2 = name2gtype "gchararray"; } } get_header_type field x = oo_unary_function get_header_type_op x, is_class x = im_header_get_typeof field x, is_image x = error (_ "bad arguments to " ++ "get_header_type") { get_header_type_op = Operator "get_header_type" (get_header_type field) Operator_type.COMPOUND false; } set_header field value x = oo_unary_function set_header_op x, is_class x = im_copy_set_meta x field value, is_image x = error (_ "bad arguments to " ++ "set_header") { set_header_op = Operator "set_header" (set_header field value) Operator_type.COMPOUND false; } nip2-8.7.0/share/nip2/compat/7.28/Widgets.def0000644000175000017500000000235313224651032015241 00000000000000Widget_slider_item = class Menuaction "_Scale" "make a new scale widget" { icon = "nip-slider-16.png"; action = Scale "untitled scale" 0 255 128; } Widget_toggle_item = class Menuaction "_Toggle" "make a new toggle widget" { action = Toggle "untitled toggle" false; } Widget_option_item = class Menuaction "_Option" "make a new option widget" { action = Option "untitled option" ["option0", "option1"] 0; } Widget_string_item = class Menuaction "St_ring" "make a new string widget" { action = String "Enter a string" "sample text"; } Widget_number_item = class Menuaction "_Number" "make a new number widget" { action = Number "Enter a number" 42; } Widget_expression_item = class Menuaction "_Expression" "make a new expression widget" { action = Expression "Enter an expression" 42; } Widget_pathname_item = class Menuaction "_File Chooser" "make a new file chooser widget" { action = Pathname "Pick a file" "$VIPSHOME/share/$PACKAGE/data/print_test_image.v"; } Widget_font_item = class Menuaction "F_ont Chooser" "make a new font chooser widget" { action = Fontname "Pick a font" Workspaces.Preferences.PAINTBOX_FONT; } Widget_clock_item = class Menuaction "_Clock" "make a new clock widget" { action = Clock 1 1; } nip2-8.7.0/share/nip2/compat/7.28/Colour.def0000644000175000017500000003607713224651032015110 00000000000000 Colour_new_item = class Menupullright (_ "_New") (_ "make a patch of colour") { Widget_colour_item = class Menuaction (_ "_Colour") (_ "make a patch of colour") { action = Colour_picker "Lab" [50,0,0]; } LAB_colour = class Menuaction (_ "CIE Lab _Picker") (_ "pick colour in CIE Lab space") { action = widget "Lab" [50, 0, 0]; // ab_slice size size = 512; // range of values ... +/- 128 for ab range = 256; // map xy in slice image to ab and back xy2ab x = x / (size / range) - 128; ab2xy a = (a + 128) * (size / range); widget space default_value = class Colour space _result { _vislevel = 3; [_L, _a, _b] = default_value; L = Scale "Lightness" 0 100 _L; ab_slice = Image (lab_slice size L.value); point = Mark ab_slice (ab2xy _a) (ab2xy _b); _result = [L.value, xy2ab point.left, xy2ab point.top]; Colour_edit colour_space value = widget colour_space value; } } } Colour_to_colour_item = class Menuaction (_ "Con_vert to Colour") (_ "convert anything to a colour") { action x = to_colour x; } #separator Colour_convert_item = class Menupullright (_ "_Colourspace") (_ "convert to various colour spaces") { spaces = Image_type.image_colour_spaces; conv dest x = class _result { _vislevel = 3; to = Option_enum (_ "Convert to") spaces (spaces.get_name dest); _result = map_unary (colour_transform_to to.value_thing) x; } Mono_item = class Menuaction (_ "_Monochrome") (_ "convert to mono colourspace") { action x = conv Image_type.B_W x; } sRGB_item = class Menuaction (_ "_sRGB") (_ "convert to sRGB colourspace") { action x = conv Image_type.sRGB x; } GREY16_item = class Menuaction (_ "_GREY16") (_ "convert to GREY16 colourspace") { action x = conv Image_type.GREY16 x; } RGB16_item = class Menuaction (_ "_RGB16") (_ "convert to RGB16 colourspace") { action x = conv Image_type.RGB16 x; } Lab_item = class Menuaction (_ "_Lab") (_ "convert to Lab colourspace (float Lab)") { action x = conv Image_type.LAB x; } LabQ_item = class Menuaction (_ "Lab_Q") (_ "convert to LabQ colourspace (32-bit Lab)") { action x = conv Image_type.LABQ x; } LabS_item = class Menuaction (_ "Lab_S") (_ "convert to LabS colourspace (48-bit Lab)") { action x = conv Image_type.LABS x; } LCh_item = class Menuaction (_ "L_Ch") (_ "convert to LCh colourspace") { action x = conv Image_type.LCH x; } XYZ_item = class Menuaction (_ "_XYZ") (_ "convert to XYZ colourspace") { action x = conv Image_type.XYZ x; } Yxy_item = class Menuaction (_ "_Yxy") (_ "convert to Yxy colourspace") { action x = conv Image_type.YXY x; } UCS_item = class Menuaction (_ "_UCS") (_ "convert to UCS colourspace") { action x = conv Image_type.UCS x; } } /* mark objects as being in various colourspaces */ Colour_tag_item = class Menupullright (_ "_Tag As") (_ "tag object as being in various colour spaces") { spaces = Image_type.image_colour_spaces; tag dest x = class _result { _vislevel = 3; to = Option_enum (_ "Tag as") spaces (spaces.get_name dest); _result = map_unary (image_set_type to.value_thing) x; } Mono_item = class Menuaction (_ "_Monochrome") (_ "tag as being in mono colourspace") { action x = tag Image_type.B_W x; } sRGB_item = class Menuaction (_ "_sRGB") (_ "tag as being in sRGB colourspace") { action x = tag Image_type.sRGB x; } RGB16_item = class Menuaction (_ "_RGB16") (_ "tag as being in RGB16 colourspace") { action x = tag Image_type.RGB16 x; } GREY16_item = class Menuaction (_ "_GREY16") (_ "tag as being in GREY16 colourspace") { action x = tag Image_type.GREY16 x; } Lab_item = class Menuaction (_ "_Lab") (_ "tag as being in Lab colourspace (float Lab)") { action x = tag Image_type.LAB x; } LabQ_item = class Menuaction (_ "Lab_Q") (_ "tag as being in LabQ colourspace (32-bit Lab)") { action x = tag Image_type.LABQ x; } LabS_item = class Menuaction (_ "Lab_S") (_ "tag as being in LabS colourspace (48-bit Lab)") { action x = tag Image_type.LABS x; } LCh_item = class Menuaction (_ "L_Ch") (_ "tag as being in LCh colourspace") { action x = tag Image_type.LCH x; } XYZ_item = class Menuaction (_ "_XYZ") (_ "tag as being in XYZ colourspace") { action x = tag Image_type.XYZ x; } Yxy_item = class Menuaction (_ "_Yxy") (_ "tag as being in Yxy colourspace") { action x = tag Image_type.YXY x; } UCS_item = class Menuaction (_ "_UCS") (_ "tag as being in UCS colourspace") { action x = tag Image_type.UCS x; } } Colour_temperature_item = class Menupullright (_ "Colour Te_mperature") (_ "colour temperature conversions") { Whitepoint_item = class Menuaction (_ "_Move Whitepoint") (_ "change whitepoint") { action x = class _result { _vislevel = 3; old_white = Option_enum (_ "Old whitepoint") Whitepoints "D65"; new_white = Option_enum (_ "New whitepoint") Whitepoints "D50"; _result = map_unary process x { process im = im''' { im' = colour_transform_to Image_type.XYZ im; im'' = im' * (new_white.value_thing / old_white.value_thing); im''' = colour_transform_to (get_type im) im''; } } } } D65_to_D50_item = class Menupullright (_ "D_65 to D50") (_ "complex conversion") { XYZ_minimal_item = class Menuaction (_ "_Minimal") (_ "D65 to D50 using the minimal 3x3 matrix in XYZ") { action x = map_unary process x { process im = im''' { im' = colour_transform_to Image_type.XYZ im; im'' = recomb D652D50_direct im'; im''' = colour_transform_to (get_type im) im''; } } } Bradford_item = class Menuaction (_ "_Bradford") (_ "D65 to D50 in Bradford cone space") { action x = map_unary process x { process im = im''' { im' = colour_transform_to Image_type.XYZ im; im'' = im_D652D50 im'; im''' = colour_transform_to (get_type im) im''; } } } } D50_to_D65_item = class Menupullright (_ "D_50 to D65") (_ "complex conversion") { XYZ_minimal_item = class Menuaction (_ "_Minimal") (_ "D50 to D65 using the minimal 3x3 matrix in XYZ") { action x = map_unary process x { process im = im''' { im' = colour_transform_to Image_type.XYZ im; im'' = recomb D502D65_direct im'; im''' = colour_transform_to (get_type im) im''; } } } Bradford_item = class Menuaction (_ "_Bradford") (_ "D60 to D65 in Bradford cone space") { action x = map_unary process x { process im = im''' { im' = colour_transform_to Image_type.XYZ im; im'' = im_D502D65 im'; im''' = colour_transform_to (get_type im) im''; } } } } Lab_to_D50XYZ_item = class Menuaction (_ "_Lab to D50 XYZ") (_ "Lab to XYZ with a D50 whitepoint") { action x = map_unary (colour_unary im_D50Lab2XYZ) x; } D50XYZ_to_Lab_item = class Menuaction (_ "D50 _XYZ to Lab") (_ "XYZ to Lab with a D50 whitepoint") { action x = map_unary (colour_unary im_D50XYZ2Lab) x; } } Colour_icc_item = class Menupullright (_ "_ICC") (_ "transform with ICC profiles") { print_profile = "$VIPSHOME/share/$PACKAGE/data/cmyk.icm"; monitor_profile = "$VIPSHOME/share/$PACKAGE/data/sRGB.icm"; guess_profile image = monitor_profile, has_bands image && get_bands image == 3 = print_profile; render_intents = Option_enum (_ "Render intent") Render_intent.names (_ "Absolute"); Export_item = class Menuaction (_ "_Export") (_ "export from PCS to device space") { action x = class _result { _vislevel = 3; profile = Pathname (_ "Output profile") print_profile; intent = render_intents; depth = Option (_ "Output depth") [_ "8 bit", _ "16 bit"] 0; _result = map_unary process x { process image = icc_export [8, 16]?depth profile.value intent.value_thing lab { lab = colour_transform_to Image_type.LABQ image; } } } } Import_item = class Menuaction (_ "_Import") (_ "import from device space to PCS") { action x = class _result { _vislevel = 3; embedded = Toggle (_ "Use embedded profile if possible") false; profile = Pathname (_ "Default input profile") (guess_profile x); intent = render_intents; _result = map_unary process x { process image = icc_import_embedded intent.value_thing image, get_header_type "icc-profile-data" image != 0 && embedded = icc_import profile.value intent.value_thing image; } } } Transform_item = class Menuaction (_ "_Transform") (_ "transform between two device spaces") { action x = class _result { _vislevel = 3; in_profile = Pathname (_ "Input profile") (guess_profile x); out_profile = Pathname (_ "Output profile") print_profile; intent = render_intents; _result = map_unary process x { process image = icc_transform in_profile.value out_profile.value intent.value_thing image; } } } AC2RC_item = class Menuaction (_ "_Absolute to Relative") (_ "absolute to relative colorimetry using device profile") { action x = class _result { _vislevel = 3; profile = Pathname (_ "Pick a profile") (guess_profile x); _result = map_unary process x { process image = icc_ac2rc profile.value lab { lab = colour_transform_to Image_type.LAB image; } } } } } Colour_rad_item = class Menupullright (_ "_Radiance") (_ "convert to and from Radiance packed format") { Unpack_item = class Menuaction (_ "Unpack") (_ "unpack Radiance format to float") { action x = map_unary rad2float x; } Pack_item = class Menuaction (_ "Pack") (_ "pack 3-band float to Radiance format") { action x = map_unary float2rad x; } } #separator Colour_dE_item = class Menupullright (_ "_Difference") (_ "calculate colour difference") { /* Apply a converter to an object ... convert image or colour (since * we can guess the colour space we're converting from), don't convert * matrix or vector (since we can't tell ... assume it's in the right * space already). */ apply_cvt cvt x = cvt x, is_Image x || is_Colour x || is_image x = x; diff cvt in1 in2 = abs_vec (apply_cvt cvt in1 - apply_cvt cvt in2); /* Converter to LAB. */ lab_cvt = colour_transform_to Image_type.LAB; /* Converter to UCS ... plain UCS is Ch form, so we go LAB again after * to make sure we get a rectangular coord system. */ ucs_cvt = colour_transform Image_type.LCH Image_type.LAB @ colour_transform_to Image_type.UCS; CIEdE76_item = class Menuaction (_ "CIE dE _76") (_ "calculate CIE dE 1976 for two objects") { action a b = map_binary (diff lab_cvt) a b; } CIEdE00_item = class Menuaction (_ "CIE dE _00") (_ "calculate CIE dE 2000 for two objects") { action a b = map_binary (colour_binary (_ "im_dE00_fromLab") im_dE00_fromLab) a b; } UCS_item = class Menuaction (_ "_CMC(l:l)") (_ "calculate CMC(l:l) for two objects") { action a b = map_binary (diff ucs_cvt) a b; } } Colour_adjust_item = class Menupullright (_ "_Adjust") (_ "alter colours in various ways") { Recombination_item = class Menuaction (_ "_Recombination") (_ "recombine colour with an editable matrix") { action x = class _result { _vislevel = 3; matrix = Matrix_rec (identity_matrix (bands x)) { // try to guess a sensible value for the size of the // matrix bands x = x.bands, is_Image x || is_Colour x = x.width, is_Matrix x = bands x.value?0, is_Group x = x.bands, has_member "bands" x = 3; } _result = map_unary (recomb matrix) x; } } Cast_item = class Menuaction (_ "_Cast") (_ "displace neutral axis in CIE Lab") { action x = class _result { _vislevel = 3; gr = Scale "Green-red" (-20) 20 0; by = Scale "Blue-yellow" (-20) 20 0; _result = map_unary adjust_cast x { adjust_cast in = colour_transform_to (get_type in) in'' { in' = colour_transform_to Image_type.LAB in; in'' = in' + Vector [0, gr.value, by.value]; } } } } HSB_item = class Menuaction (_ "_HSB") (_ "adjust hue-saturation-brightness in LCh") { action x = class _result { _vislevel = 3; h = Scale "Hue" 0 360 0; s = Scale "Saturation" 0.01 5 1; b = Scale "Brightness" 0.01 5 1; _result = map_unary adjust_hsb x { adjust_hsb in = colour_transform_to (get_type in) in'' { in' = colour_transform_to Image_type.LCH in; in'' = in' * Vector [b.value, s.value, 1] + Vector [0, 0, h.value]; } } } } } Colour_similar_item = class Menuaction (_ "_Similar Colour") (_ "find pixels with a similar colour") { action x = class _result { _vislevel = 3; target_colour = Colour_picker "Lab" [50, 0, 0]; t = Scale "dE threshold" 0 100 10; _result = map_unary match x { match in = abs_vec (in' - target) < t { target = colour_transform_to Image_type.LAB target_colour; in' = colour_transform_to Image_type.LAB in; } } } } #separator Colour_chart_to_matrix_item = class Menuaction (_ "_Measure Colour Chart") (_ "measure average pixel values for a colour chart image") { action x = class _result { _vislevel = 3; pacross = Expression (_ "Patches across chart") 6; pdown = Expression (_ "Patches down chart") 4; _result = map_unary chart x { chart in = measure 0 0 in.width in.height (to_real pacross) (to_real pdown) in; } } } Colour_matrix_to_chart_item = class Menuaction (_ "Make Synth_etic Colour Chart") (_ "make a colour chart image from a matrix of measurements") { action x = class _result { _vislevel = 3; pacross = Expression (_ "Patches across chart") 6; pdown = Expression (_ "Patches down chart") 4; pwidth = Expression (_ "Patch width in pixels") 50; pheight = Expression (_ "Patch height in pixels") 50; bwidth = Expression (_ "Border between patches") 0; _result = map_unary build_chart x { build_chart in = Image (imagearray_assemble (to_real bwidth) (to_real bwidth) patch_table) { // patch numbers for row starts rowstart = map (multiply (to_real pacross)) [0 .. to_real pdown - 1]; // assemble patches ... each one a pixel value patches = map (take (to_real pacross)) (map (converse drop in.value) rowstart); // make an n-band constant image from eg. [1,2,3] // we don't know the format .. use sRGB (well, why not?) patch v = image_new (to_real pwidth) (to_real pheight) (len v) Image_format.FLOAT Image_coding.NOCODING Image_type.sRGB (Vector v) 0 0; // make an image for each patch patch_table = map (map patch) patches; } } } } Colour_plot_ab_scatter_item = class Menuaction (_ "_Plot ab Scatter") (_ "plot an ab scatter histogram") { action x = class _result { _vislevel = 3; bins = Expression (_ "Number of bins on each axis") 8; _result = map_unary plot_scatter x { plot_scatter in = Image (bg * (((90 / mx) * hist) ++ blk)) { lab = colour_transform_to Image_type.LAB in.value; ab = (unsigned char) ((lab?1 ++ lab?2) + 128); hist = hist_find_nD bins.expr ab; mx = max hist; bg = lab_slice bins.expr 1; blk = 1 + im_black (to_real bins) (to_real bins) 2; } } } } nip2-8.7.0/share/nip2/compat/7.28/_joe_extra.def0000644000175000017500000003066713224651032015763 00000000000000//////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// Frame_item = class Menupullright "Picture _Frame" "working with images of frames" { //////////////////////////////////////////////////////////////////////////////////// Build_frame_item = class Menupullright "_Build Frame From" "builds a new frame from image a and places it around image b" { //////////////////////////////////////////////////////////////////////////////////// Frame_corner_item = class Menuaction "_Frame Corner" "copies and extends a frame corner, a, to produce a complete frame to fit round a given image, b" { prefs = Workspaces.Preferences; action a b = class _result { _check_args = [ [a, "a", check_Image], [b, "b", check_Image] ]; _check_all = [ [a.coding == b.coding && a.bands == b.bands, "a.coding == b.coding && a.bands == b.bands"] ]; _vislevel = 3; ppcm = Expression "Number of pixels per cm" 25; /* Given the value of ppcm, distance between the inner edge of the frame * and the outer edge of the image. +ve values mean the frame overlaps * the image. */ overlap = Expression "Size of frame overlap in cm" 0; variables = Frame_variables 0; _type = Image_type.colour_spaces.get_name b.type; //If applied the count colour be seen for -ve values of overlap mount_options = Mount_options _type ppcm.expr; _cs = variables.corner_section.value; _ms = variables.middle_section.value; _ov = ppcm.expr * overlap.expr; _sf = variables.scale_factor.expr; _bf = variables.blend_fraction.value; //Scale frame image if required. _a = a, _sf == 1; = a, _sf == 0; = Image (resize Interpolate_bilinear _sf _sf a.value); _im_w = b.width; _im_h = b.height + mount_options._los, mount_options.apply = b.height; _os = mount_options._los, mount_options.apply = 0; _cl = Vector mount_options.mount_colour.value, mount_options.apply = 0; //Produce scaled and resized frame. frame = corner_frame _a _im_w _im_h _ov _cs _ms _bf; //Resize image canvas and applied mount colour as required. _pos_im = frame_position_image b frame _os _cl; //Wrap frame round image. _result = if (frame == 0) then _pos_im else frame; } } //////////////////////////////////////////////////////////////////////////////////// Simple_frame_item = class Menuaction "_Simple Frame" "extends or shortens the central sections of a simple frame, a, to fit round a given image, b" { prefs = Workspaces.Preferences; action a b = class _result { _check_args = [ [a, "a", check_Image], [b, "b", check_Image] ]; _check_all = [ [a.coding == b.coding && a.bands == b.bands, "a.coding == b.coding && a.bands == b.bands"] ]; _vislevel = 3; ppcm = Expression "Number of pixels per cm" 25; /* Given the value of ppcm, distance between the inner edge of the frame * and the outer edge of the image. +ve values mean the frame overlaps * the image. */ overlap = Expression "Size of frame overlap in cm" 0; variables = Frame_variables 0; _type = Image_type.colour_spaces.get_name b.type; //If applied the count colour be seen for -ve values of overlap mount_options = Mount_options _type ppcm.expr; _cs = variables.corner_section.value; _ms = variables.middle_section.value; _ov = ppcm.expr * overlap.expr; _sf = variables.scale_factor.expr; _bf = variables.blend_fraction.value; //Scale frame image if required. _a = a, _sf == 1; = a, _sf == 0; = Image (resize Interpolate_bilinear _sf _sf a.value); _im_w = b.width; _im_h = b.height + mount_options._los, mount_options.apply = b.height; _os = mount_options._los, mount_options.apply = 0; _cl = Vector mount_options.mount_colour.value, mount_options.apply = 0; //Produce scaled and resized frame. frame = simple_frame _a _im_w _im_h _ov _cs _ms _bf variables.option; //Resize image canvas and applied mount colour as required. _pos_im = frame_position_image b frame _os _cl; //Wrap frame round image. _result = if (frame == 0) then _pos_im else frame; } } //////////////////////////////////////////////////////////////////////////////////// Complex_frame_item = class Menuaction "_Complex Frame" "extends or shortens the central sections of a frame a, preserving any central edge details, to fit image b" { prefs = Workspaces.Preferences; action a b = class _result { _check_args = [ [a, "a", check_Image], [b, "b", check_Image] ]; _check_all = [ [a.coding == b.coding && a.bands == b.bands, "a.coding == b.coding && a.bands == b.bands"] ]; _vislevel = 3; ppcm = Expression "Number of pixels per cm" 25; /* Given the value of ppcm, distance between the inner edge of the frame * and the outer edge of the image. +ve values mean the frame overlaps * the image. */ overlap = Expression "Size of frame overlap in cm" 0; variables = Frame_variables 1; _type = Image_type.colour_spaces.get_name b.type; //If applied the count colour be seen for -ve values of overlap mount_options = Mount_options _type ppcm.expr; _cs = variables.corner_section.value; _es = variables.edge_section.value; _ms = variables.middle_section.value; _ov = ppcm.expr * overlap.expr; _sf = variables.scale_factor.expr; _bf = variables.blend_fraction.value; _a = a, _sf == 1; = a, _sf == 0; = Image (resize Interpolate_bilinear _sf _sf a.value); _im_w = b.width; _im_h = b.height + mount_options._los, mount_options.apply = b.height; _os = mount_options._los, mount_options.apply = 0; _cl = Vector mount_options.colour.value, mount_options.apply = 0; //Produce scaled and resized frame. frame = complex_frame _a _im_w _im_h _ov _cs _es _ms _bf variables.option; //Resize image canvas and applied mount colour as required. _pos_im = frame_position_image b frame _os _cl; //Wrap frame round image. _result = if (frame == 0) then _pos_im else frame; } } } //////////////////////////////////////////////////////////////////////////////////// Straighten_frame_item = class Menuaction "_Straighten Frame" "uses four points to square up distorted images of frames" { action a = Perspective_item.action a; } }; //////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// Select_item = class Menupullright "_Select" "select user defined areas of an image" { prefs = Workspaces.Preferences; /* Option toggle used to define whether the user is replacing a * dark or a light area. */ _control = Option "Make" [ "Selection Brighter", "Selection Darker", "Selection Black", "Selection White", "Background Black", "Background White", "Mask" ] 4; control_selection mask im no = [ if mask then im * 1.2 else im * 1, if mask then im * 0.8 else im * 1, if mask then 0 else im, if mask then 255 else im, if mask then im else 0, if mask then im else 255, mask ]?no; Rectangle = class Menuaction "_Rectangle" "use line/arrow/rect x to define a rectangle" { action x = class _result { _vislevel = 3; control = _control; _result = control_selection mask im control { mask = select_rect x; im = get_image x; select_rect x = Image mask { im = Image (get_image x); imc = make_xy im.width im.height; mask = imc?0 >= x.nleft & imc?0 < x.nright & imc?1 >= x.ntop & imc?1 < x.nbottom; } } } } Elipse = class Menuaction "_Ellipse" "use a line/arrow x to define the center point radius and direction of an ellipse" { action x = class _result { _vislevel = 3; control = _control; width = Scale "Width" 0.01 1 0.5; _result = control_selection mask im control { mask = select_ellipse x width.value; im = x.image; } } } Tetragon = class Menuaction "_Tetragon" "selects the convex area defined by four points" { action a b c d = class _result { _vislevel = 3; control = _control; _result = control_selection mask im control { mask = select_tetragon a b c d; im = get_image a; } } } Polygon = class Menuaction "_Polygon" "selects a polygon from an ordered group of points" { action pt_list = class _result { _vislevel = 3; control = _control; _result = control_selection mask im control { mask = select_polygon pt_list; im = get_image ((pt_list.value)?0); } } } sep1 = Menuseparator; Threshold_item = class Menuaction "Thres_hold" "simple image threshold" { action x = class _result { _vislevel = 3; t = Scale "Threshold" 0 mx (mx / 2) { mx = Image_format.maxval x.format, is_Image x = 255; } _result = map_unary (more t.value) x; } } Threshold_percent_item = class Menuaction "Per_cent Threshold" "threshold at a percentage of pixels" { action x = class _result { _vislevel = 3; t = Scale "Percentage of pixels" 0 100 50; _result = map_unary (more (hist_thresh (t.value / 100) x)) x; } } sep2 = Menuseparator; Segment_item = class Menuaction "_Segment" "break image into disjoint regions" { action x = class _result { _vislevel = 3; segments = Expression "Number of disjoint regions" (map_unary (get_header "n-segments") _result); _result = map_unary segment x; } } }; //////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// Perspective_match_item = class Menuaction "_Perspective Match" "rotate, scale and skew one image to match another" { action x y = class _result { _vislevel = 3; // try to find an image ... for a group, get the first item find_image x = x, is_Image x = find_image x?0, is_list x = find_image x.value, is_class x && has_value x = error "unable to find image"; _a = find_image x; _b = find_image y; ap1 = Mark_relative _a 0.1 0.1; ap2 = Mark_relative _a 0.9 0.1; ap3 = Mark_relative _a 0.1 0.9; ap4 = Mark_relative _a 0.9 0.9; bp1 = Mark_relative _b 0.1 0.1; bp2 = Mark_relative _b 0.9 0.1; bp3 = Mark_relative _b 0.1 0.9; bp4 = Mark_relative _b 0.9 0.9; _result = map_binary process x y { f1 = _a.width / _b.width; f2 = _a.height / _b.height; rl = sort_pts_clockwise [ap1, ap2, ap3, ap4]; pl = sort_pts_clockwise [bp1, bp2, bp3, bp4]; to = [ rl?0.left, rl?0.top, rl?1.left, rl?1.top, rl?2.left, rl?2.top, rl?3.left, rl?3.top ]; from = [ pl?0.left * f1, pl?0.top * f2, pl?1.left * f1, pl?1.top * f2, pl?2.left * f1, pl?2.top * f2, pl?3.left * f1, pl?3.top * f2 ]; trans = perspective_transform to from; process a b = transform 1 0 trans b2 { b2 = resize Interpolate_bilinear f1 f2 b, (f1 >= 1 && f2 >= 1) || (f1 >= 1 && f2 >= 1) = resize Interpolate_bilinear f1 1 b1 {b1 = resize Interpolate_bilinear 1 f2 b;} } } } }; //////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// Perspective_item = class Menuaction "Pe_rspective Distort" "rotate, scale and skew an image with respect to defined points" { action x = class _result { _vislevel = 3; // try to find an image ... for a group, get the first item find_image x = x, is_Image x = find_image x?0, is_list x = find_image x.value, is_class x && has_value x = error "unable to find image"; _a = find_image x; dir = Option "Select distort direction" [ "Distort to points", "Distort to corners" ] 1; ap1 = Mark_relative _a 0.1 0.1; ap2 = Mark_relative _a 0.9 0.1; ap3 = Mark_relative _a 0.9 0.9; ap4 = Mark_relative _a 0.1 0.9; _result = map_unary process x { trans = [perspective_transform to from, perspective_transform from to]?(dir.value) { rl = sort_pts_clockwise [ap1, ap2, ap3, ap4]; to = [(rl?0).left, (rl?0).top, (rl?1).left, (rl?1).top, (rl?2).left, (rl?2).top, (rl?3).left, (rl?3).top]; from=[0, 0, (_a.width - 1), 0, (_a.width - 1), (_a.height - 1), 0, (_a.height - 1)]; } process a = transform 1 0 trans a; } } }; nip2-8.7.0/share/nip2/compat/7.28/_generate.def0000644000175000017500000000470713224651032015571 00000000000000 /* make an image of size x by y whose pixels are their coordinates. */ make_xy x y = im_make_xy (to_real x) (to_real y); /* make an image with the specified properties ... pixel is (eg.) * Vector [0, 0, 0], or 12. If coding == labq, we ignore bands, format and * type, generate a 3 band float image, and lab2labq it before handing it * back. */ image_new w h b fmt coding type pixel xoff yoff = embed 1 0 0 w h im'''' { b' = 3, coding == Image_coding.LABPACK = b; fmt' = Image_format.FLOAT, coding == Image_coding.LABPACK = fmt; type' = Image_type.LAB, coding == Image_coding.LABPACK = type; im = im_black 1 1 (to_real b') + pixel; im' = clip2fmt fmt' im; im'' = im_Lab2LabQ im', coding == Image_coding.LABPACK; = im'; im''' = image_set_type type' im''; im'''' = image_set_origin xoff yoff im'''; } /* generate a slice of LAB space size x size pixels for L* == l */ lab_slice size l = image_set_type Image_type.LAB im { L = image_new size size 1 Image_format.FLOAT Image_coding.NOCODING Image_type.B_W l 0 0; A1 = im_fgrey (to_real size) (to_real size); /* im_fgrey always makes 0-1, so these ranges can be wired in. */ A2 = A1 * 256 - 128; A4 = im_rot90 A2; im = image_set_origin (size / 2) (size / 2) (L ++ A2 ++ A4); } /* Look at Image, try to make a Colour (failing that, a Vector) which is white * for that image type. */ image_white im = colour_transform_to type white_lab, bands == 3 && coding == Image_coding.NOCODING && colour_spaces.present 1 type = white_lab, coding == Image_coding.LABPACK = Vector (replicate bands (max_value.lookup 1 0 format)) { bands = im.bands; type = im.type; format = im.format; coding = im.coding; colour_spaces = Image_type.colour_spaces; // white as LAB white_lab = Colour "Lab" [100, 0, 0]; // maximum value for this numeric type max_value = Table [ [255, Image_format.DPCOMPLEX], [255, Image_format.DOUBLE], [255, Image_format.COMPLEX], [255, Image_format.FLOAT], [2 ** 31 - 1, Image_format.INT], [2 ** 32 - 1, Image_format.UINT], [2 ** 15 - 1, Image_format.SHORT], [2 ** 16 - 1, Image_format.USHORT], [2 ** 7 - 1, Image_format.CHAR], [2 ** 8 - 1, Image_format.UCHAR] ]; } /* Make a seperable gaussian mask. */ matrix_gaussian_blur radius = im_gauss_imask_sep (radius / 3) 0.2; /* Make a seperable square mask. */ matrix_blur radius = Matrix_con (sum mask_sq_line) 0 [mask_sq_line] { mask_sq_line = replicate (2 * radius - 1) 1; } nip2-8.7.0/share/nip2/compat/7.28/Math.def0000644000175000017500000003157713224651032014536 00000000000000Math_arithmetic_item = class Menupullright "_Arithmetic" "basic arithmetic for objects" { Add_item = class Menuaction "_Add" "add a and b" { action a b = map_binary add a b; } Subtract_item = class Menuaction "_Subtract" "subtract b from a" { action a b = map_binary subtract a b; } Multiply_item = class Menuaction "_Multiply" "multiply a by b" { action a b = map_binary multiply a b; } Divide_item = class Menuaction "_Divide" "divide a by b" { action a b = map_binary divide a b; } Remainder_item = class Menuaction "_Remainder" "remainder after integer division of a by b" { action a b = map_binary remainder a b; } sep1 = Menuseparator; Absolute_value_item = class Menuaction "A_bsolute Value" "absolute value of x" { action x = map_unary abs x; } Absolute_value_vector_item = class Menuaction "Absolute Value _Vector" "like Absolute Value, but treat pixels as vectors" { action x = map_unary abs_vec x; } Sign_item = class Menuaction "S_ign" "unit vector" { action x = map_unary sign x; } Negate_item = class Menuaction "_Negate" "multiply by -1" { action x = map_unary unary_minus x; } } Math_trig_item = class Menupullright "_Trigonometry" "trigonometry operations (all in degrees)" { Sin_item = class Menuaction "_Sine" "calculate sine x" { action x = map_unary sin x; } Cos_item = class Menuaction "_Cosine" "calculate cosine x" { action x = map_unary cos x; } Tan_item = class Menuaction "_Tangent" "calculate tangent x" { action x = map_unary tan x; } sep1 = Menuseparator; Asin_item = class Menuaction "Arc S_ine" "calculate arc sine x" { action x = map_unary asin x; } Acos_item = class Menuaction "Arc C_osine" "calculate arc cosine x" { action x = map_unary acos x; } Atan_item = class Menuaction "Arc T_angent" "calculate arc tangent x" { action x = map_unary atan x; } sep2 = Menuseparator; Rad_item = class Menuaction "_Degrees to Radians" "convert degrees to radians" { action x = map_unary rad x; } Deg_item = class Menuaction "_Radians to Degrees" "convert radians to degrees" { action x = map_unary deg x; } sep3 = Menuseparator; Angle_range_item = class Menuaction "Angle i_n Range" "is angle within t degrees of r, mod 360" { action t r angle = clock (max - angle) < 2*r { max = clock (t + r); clock a = a + 360, a < 0; = a - 360, a >= 360; = a; } } } Math_log_item = class Menupullright "_Log" "logarithms and anti-logs" { Exponential_item = class Menuaction "_Exponential" "calculate e ** x" { action x = map_unary (power e) x; } Log_natural_item = class Menuaction "Natural _Log" "log base e of x" { action x = map_unary log x; } sep1 = Menuseparator; Exponential10_item = class Menuaction "E_xponential base 10" "calculate 10 ** x" { action x = map_unary (power 10) x; } Log10_item = class Menuaction "L_og Base 10" "log base 10 of x" { action x = map_unary log10 x; } sep2 = Menuseparator; Raise_to_power_item = class Menuaction "_Raise to Power" "calculate x ** y" { action x y = map_binary power x y; } } Math_complex_item = class Menupullright "_Complex" "operations on complex numbers and images" { Complex_extract = class Menupullright "_Extract" "extract fields from complex" { Real_item = class Menuaction "_Real" "extract real part of complex" { action in = map_unary re in; } Imaginary_item = class Menuaction "_Imaginary" "extract imaginary part of complex" { action in = map_unary im in; } } Complex_build_item = class Menuaction "_Build" "join a and b to make a complex" { action a b = map_binary comma a b; } sep1 = Menuseparator; Polar_item = class Menuaction "_Polar" "convert real and imag to amplitude and phase" { action a = map_unary polar a; } Rectangular_item = class Menuaction "_Rectagular" ("convert (amplitude, phase) image to rectangular " ++ "coordinates") { action x = map_unary rectangular x; } sep2 = Menuseparator; Conjugate_item = class Menuaction "_Conjugate" "invert imaginary part" { action x = map_unary conj x; } } Math_boolean_item = class Menupullright "_Boolean" "bitwise boolean operations for integer objects" { And_item = class Menuaction "_And" "bitwise and of a and b" { action a b = map_binary bitwise_and a b; } Or_item = class Menuaction "_Or" "bitwise or of a and b" { action a b = map_binary bitwise_or a b; } Eor_item = class Menuaction "E_xclusive Or" "bitwise exclusive or of a and b" { action a b = map_binary eor a b; } Not_item = class Menuaction "_Not" "invert a" { action a = map_unary not a; } sep1 = Menuseparator; Right_shift_item = class Menuaction "Shift _Right" "shift a right by b bits" { action a b = map_binary right_shift a b; } Left_shift_item = class Menuaction "Shift _Left" "shift a left by b bits" { action a b = map_binary left_shift a b; } sep2 = Menuseparator; If_then_else_item = class Menuaction "_If Then Else" "b where a is non-zero, c elsewhere" { action a b c = map_trinary ite a b c { // can't use if_then_else, we need a true trinary ite a b c = if a then b else c; } } Band_or_item = class Menuaction "Band O_r" "or the bands of an image together" { action im = map_unary (foldr1 bitwise_or @ bandsplit) im; } Band_and_item = class Menuaction "Band A_nd" "and the bands of an image together" { action im = map_unary (foldr1 bitwise_and @ bandsplit) im; } } Math_relational_item = class Menupullright "R_elational" "comparison operations" { Equal_item = class Menuaction "_Equal to" "test a equal to b" { action a b = map_binary equal a b; } Not_equal_item = class Menuaction "_Not Equal to" "test a not equal to b" { action a b = map_binary not_equal a b; } sep1 = Menuseparator; More_item = class Menuaction "_More Than" "test a strictly greater than b" { action a b = map_binary more a b; } Less_item = class Menuaction "_Less Than" "test a strictly less than b" { action a b = map_binary less a b; } sep2 = Menuseparator; More_equal_item = class Menuaction "M_ore Than or Equal to" "test a greater than or equal to b" { action a b = map_binary more_equal a b; } Less_equal_item = class Menuaction "L_ess Than or Equal to" "test a less than or equal to b" { action a b = map_binary less_equal a b; } } Math_list_item = class Menupullright "L_ist" "operations on lists" { Head_item = class Menuaction "_Head" "first element in list" { action x = map_unary hd x; } Tail_item = class Menuaction "_Tail" "list without the first element" { action x = map_unary tl x; } Last_item = class Menuaction "_Last" "last element in list" { action x = map_unary last x; } Init_item = class Menuaction "_Init" "list without the last element" { action x = map_unary init x; } sep1 = Menuseparator; Reverse_item = class Menuaction "_Reverse" "reverse order of elements in list" { action x = map_unary reverse x; } Sort_item = class Menuaction "_Sort" "sort list into ascending order" { action x = map_unary sort x; } Make_set_item = class Menuaction "_Make Set" "remove duplicates from list" { action x = map_unary mkset equal x; } Transpose_list_item = class Menuaction "Tr_anspose" "exchange rows and columns in a list of lists" { action x = map_unary transpose x; } Concat_item = class Menuaction "_Concat" "flatten a list of lists into a single list" { action l = map_unary concat l; } sep2 = Menuseparator; Length_item = class Menuaction "L_ength" "find the length of list" { action x = map_unary len x; } Subscript_item = class Menuaction "S_ubscript" "return element n from list (index from zero)" { action n x = map_binary subscript n x; } Take_item = class Menuaction "_Take" "take the first n elements of list x" { action n x = map_binary take n x; } Drop_item = class Menuaction "_Drop" "drop the first n elements of list x" { action n x = map_binary drop n x; } sep3 = Menuseparator; Join_item = class Menuaction "_Join" "join two lists end to end" { action a b = map_binary join a b; } Difference_item = class Menuaction "_Difference" "difference of two lists" { action a b = map_binary difference a b; } Cons_item = class Menuaction "C_ons" "put element a on the front of list x" { action a x = map_binary cons a x; } Zip_item = class Menuaction "_Zip" "join two lists, pairwise" { action a b = map_binary zip2 a b; } } Math_round_item = class Menupullright "_Round" "various rounding operations" { /* smallest integral value not less than x */ Ceil_item = class Menuaction "_Ceil" "smallest integral value not less than x" { action x = map_unary ceil x; } Floor_item = class Menuaction "_Floor" "largest integral value not greater than x" { action x = map_unary floor x; } Rint_item = class Menuaction "_Round to Nearest" "round to nearest integer" { action x = map_unary rint x; } } Math_fourier_item = class Menupullright "_Fourier" "Fourier transform" { Forward_item = class Menuaction "_Forward" "fourier transform of image" { action a = map_unary (rotquad @ fwfft) a; } Reverse_item = class Menuaction "_Reverse" "inverse fourier transform of image" { action a = map_unary (invfft @ rotquad) a; } Rotate_quadrants_item = class Menuaction "Rotate _Quadrants" "rotate quadrants" { action a = map_unary rotquad a; } } Math_stats_item = class Menupullright "_Statistics" "measure various statistics of objects" { Value_item = class Menuaction "_Value" "value of point in object" { action a = class _result { _vislevel = 3; position = Expression "Coordinate" (0, 0); _result = map_binary point position.expr a; } } Mean_item = class Menuaction "_Mean" "arithmetic mean value" { action a = map_unary mean a; } Gmean_item = class Menuaction "_Geometric Mean" "geometric mean value" { action a = map_unary meang a; } Zmean_item = class Menuaction "_Zero-excluding Mean" "mean value of non-zero elements" { action a = map_unary meanze a; } Deviation_item = class Menuaction "_Standard Deviation" "standard deviation of object" { action a = map_unary deviation a; } Zdeviation_item = class Menuaction "Z_ero-excluding Standard Deviation" "standard deviation of non-zero elements" { action a = map_unary deviationze a; } Stats_item = class Menuaction "Ma_ny Stats" "calculate many stats in a single pass" { action a = map_unary stats a; } sep1 = Menuseparator; Max_item = class Menuaction "M_aximum" "maximum of object" { action a = map_unary max a; } Min_item = class Menuaction "M_inimum" "minimum of object" { action a = map_unary min a; } Maxpos_item = class Menuaction "_Position of Maximum" "position of maximum in object" { action a = map_unary maxpos a; } Minpos_item = class Menuaction "P_osition of Minimum" "position of minimum in object" { action a = map_unary minpos a; } Gravity_item = class Menuaction "Centre of _Gravity" "position of centre of gravity of histogram" { action a = map_unary gravity a; } sep2 = Menuseparator; Count_set_item = class Menuaction "_Non-zeros" "number of non-zero elements in object" { action a = map_unary cset a { cset i = (mean (i != 0) * i.width * i.height) / 255; } } Count_clear_item = class Menuaction "_Zeros" "number of zero elements in object" { action a = map_unary cclear a { cclear i = (mean (i == 0) * i.width * i.height) / 255; } } Count_edges_item = class Menuaction "_Edges" "count average edges across or down image" { action x = class _result { _vislevel = 3; edge = Option "Count" [ "Horizontal lines", "Vertical lines" ] 0; _result = map_unary process x { process image = Number (edge.labels?edge) (im_cntlines image.value edge.value); } } } sep3 = Menuseparator; Linear_regression_item = class Menuaction "_Linear Regression" "fit a line to a set of points" { action xes yes = linreg xes yes; } Weighted_linear_regression_item = class Menuaction "_Weighted Linear Regression" "fit a line to a set of points and deviations" { action xes yes devs = linregw xes yes devs; } Cluster_item = class Menuaction "_Cluster" "cluster a list of numbers" { action l = class { _vislevel = 3; thresh = Expression "Threshold" 10; [_r, _w] = cluster thresh.expr l; result = _r; weights = _w; } } } Math_base_item = class Menupullright "Bas_e" "convert number bases" { Hexadecimal_item = class Menuaction "_Hexadecimal" "convert to hexadecimal (base 16)" { action a = map_unary (print_base 16) a; } Binary_item = class Menuaction "_Binary" "convert to binary (base 2)" { action a = map_unary (print_base 2) a; } Octal_item = class Menuaction "_Octal" "convert to octal (base 8)" { action a = map_unary (print_base 8) a; } } nip2-8.7.0/share/nip2/compat/7.28/Tasks.def0000644000175000017500000006321313224651032014722 00000000000000Tasks_capture_item = class Menupullright "_Capture" "useful stuff for capturing and preprocessing images" { Csv_import_item = class Menuaction "_CSV Import" "read a file of comma-separated values" { action = class _result { _vislevel = 3; path = Pathname "File to load" "empty"; start_line = Expression "Start at line" 1; rows = Expression "Lines to read (-1 for whole file)" (-1); whitespace = String "Whitespace characters" " \""; separator = String "Separator characters" ",;\t"; _result = Image blank, path.value == "empty" = Image (im_csv2vips filename) { filename = search (expand path.value) ++ ":" ++ "skip:" ++ print (start_line.expr - 1) ++ "," ++ "whi:" ++ escape whitespace.value ++ "," ++ "sep:" ++ escape separator.value ++ "," ++ "line:" ++ print rows.expr; // prefix any ',' with a '\' in the separators line escape x = foldr prefix [] x { prefix x l = '\\' : x : l, x == ',' = x : l; } blank = image_new 1 1 1 Image_format.DOUBLE Image_coding.NOCODING Image_type.B_W 0 0 0; } } } Raw_import_item = class Menuaction "_Raw Import" "read a file of binary values" { action = class _result { _vislevel = 3; path = Pathname "File to load" "empty"; across = Expression "Pixels across" 100; down = Expression "Pixels down" 100; bytes = Expression "Bytes per pixel" 3; skip = Expression "Skip over initial bytes" 0; _result = Image blank, path.value == "empty" = Image (im_binfile path.value across.expr down.expr bytes.expr skip.expr) { blank = image_new 1 1 1 Image_format.DOUBLE Image_coding.NOCODING Image_type.B_W 0 0 0; } } } // interpret Analyze header for layout and calibration Analyze7_header_item = class Menuaction "_Interpret Analyze 7 Header" "examine the Analyze header and set layout and value" { action x = x''' { // read bits of header dim n = get_header ("dsr-image_dimension.dim[" ++ print n ++ "]"); dim0 = dim 0 x; dim1 = dim 1 x; dim2 = dim 2 x; dim3 = dim 3 x; dim4 = dim 4 x; dim5 = dim 5 x; dim6 = dim 6 x; dim7 = dim 7 x; glmax = get_header "dsr-image_dimension.glmax" x; cal_max = get_header "dsr-image_dimension.cal_max" x; // oops, now a nop x' = x; // lay out higher dimensions width-ways x'' = grid dim2 dim3 1 x', dim0 == 3 = grid dim2 dim3 dim4 x', dim0 == 4 = grid (dim2 * dim4) dim5 1 (grid dim2 dim3 dim4) x', dim0 == 5 = grid (dim2 * dim4) dim5 dim6 (grid dim2 dim3 dim4) x', dim0 == 6 = grid (dim2 * dim4 * dim6) dim7 1 (grid (dim2 * dim4) dim5 dim6 (grid dim2 dim3 dim4)) x', dim0 == 7 = error (_ "unsupported dimension " ++ dim0); // multiply by scale factor to get kBeq x''' = x'' * (cal_max / glmax); } } Video_item = class Menuaction "Capture _Video Frame" "capture a frame of still video" { // shortcut to prefs prefs = Workspaces.Preferences; action = class _result { _vislevel = 3; device = prefs.VIDEO_DEVICE; channel = Option "Input channel" [ "TV", "Composite 1", "Composite 2", "Composite 3" ] prefs.VIDEO_CHANNEL; b = Scale "Brightness" 0 32767 prefs.VIDEO_BRIGHTNESS; col = Scale "Colour" 0 32767 prefs.VIDEO_COLOUR; con = Scale "Contrast" 0 32767 prefs.VIDEO_CONTRAST; hue = Scale "Hue" 0 32767 prefs.VIDEO_HUE; frames = Scale "Frames to average" 0 100 prefs.VIDEO_FRAMES; mono = Toggle "Monochrome grab" prefs.VIDEO_MONO; crop = Toggle "Crop image" prefs.VIDEO_CROP; // grab, but hide it ... if we let the crop edit _raw_grab = Image (im_video_v4l1 device channel.value b.value col.value con.value hue.value frames.value); edit_crop = Region _raw_grab left top width height { left = prefs.VIDEO_CROP_LEFT; top = prefs.VIDEO_CROP_TOP; width = min_pair prefs.VIDEO_CROP_WIDTH (_raw_grab.width + left); height = min_pair prefs.VIDEO_CROP_HEIGHT (_raw_grab.height + top); } aspect_ratio = Expression "Stretch vertically by" prefs.VIDEO_ASPECT; _result = frame' { frame = edit_crop, crop = _raw_grab; frame' = colour_transform_to Image_type.B_W frame, mono = frame; } } } Smooth_image_item = class Menuaction "_Smooth" "remove small features from image" { action in = class _result { _vislevel = 3; feature = Scale "Minimum feature size" 1 50 20; _result = map_unary (smooth feature.value) in; } } Light_correct_item = class Menuaction "_Flatfield" "use white image w to flatfield image i" { action w i = map_binary wc w i { wc w i = clip2fmt i.format (w' * i) { fac = mean w / max w; w' = fac * (max w / w); } } } Image_rank_item = Filter_rank_item.Image_rank_item; Tilt_item = Filter_tilt_item; sep1 = Menuseparator; White_balance_item = class Menuaction "_White Balance" "use average of small image to set white of large image" { action a b = class _result { _vislevel = 3; white_hint = "Set image white to:"; white = Colour_picker "Lab" [100, 0, 0]; _result = map_binary wb a b { wb a b = colour_transform_to (get_type image) image_xyz' { area x = x.width * x.height; larger x y = area x > area y; [image, patch] = sortc larger [a, b]; to_xyz = colour_transform_to Image_type.XYZ; // white balance in XYZ patch_xyz = to_colour (to_xyz patch); white_xyz = to_xyz white; facs = (mean patch_xyz / mean white_xyz) * (white_xyz / patch_xyz); image_xyz = to_xyz image; image_xyz' = image_xyz * facs; } } } } Gamma_item = Image_levels_item.Gamma_item; Tone_item = Image_levels_item.Tone_item; sep2 = Menuseparator; Crop_item = Image_crop_item; Rotate_item = Image_transform_item.Rotate_item; Flip_item = Image_transform_item.Flip_item; Resize_item = Image_transform_item.Resize_item; Rubber_item = Image_transform_item.Image_rubber_item; sep3 = Menuseparator; ICC_item = Colour_icc_item; Temp_item = Colour_temperature_item; Find_calib_item = class Menuaction "Find _Colour Calibration" "find an RGB -> XYZ transform from an image of a colour chart" { action image = class _result { _check_args = [ [image, "image", check_Image] ]; _vislevel = 3; // get macbeth data file to use macbeth = Pathname "Pick a Macbeth data file" "$VIPSHOME/share/$PACKAGE/data/macbeth_lab_d65.mat"; mode = Option "Input LUT" [ "Linear input", "Fit intercept from chart greyscale", "Linearize input from chart greyscale" ] 2; // get max of input image _max_value = Image_format.maxval image.format; // measure chart image _camera = measure 0 0 image.width image.height 6 4 image.value; // load true values _true_Lab = Matrix_file macbeth.value; _true_XYZ = colour_transform Image_type.LAB Image_type.XYZ _true_Lab; // get Ys of greyscale _true_grey_Y = map (extract 1) (drop 18 _true_XYZ.value); // camera greyscale (all bands) _camera_grey = drop 18 _camera.value; // normalise both to 0-1 and combine _camera_grey' = map (map (multiply (1 / _max_value))) _camera_grey; _true_grey_Y' = map (multiply (1 / 100)) _true_grey_Y; _comb = Matrix [[0, 0], [1, 1]], mode == 0 = Matrix [0: intercepts, replicate (_camera.width + 1) 1], mode == 1 = Matrix (map2 cons _true_grey_Y' _camera_grey') { intercepts = [(linreg _true_grey_Y' cam).intercept :: cam <- transpose _camera_grey']; } // make a linearising lut ... zero on left _linear_lut = im_invertlut _comb (_max_value + 1); // and display it // plot from 0 explicitly so we see the effect of mode1 (intercept // from greyscale) linearising_lut = Plot [$ymin => 0] _linear_lut; // map the original image through the lineariser to // get linear 0-1 RGB image _image' = hist_map linearising_lut.value image.value; // remeasure and solve for RGB -> XYZ _camera' = im_measure _image' 0 0 image.width image.height 6 4; _pinv = (transpose _camera' * _camera') ** -1; M = transpose (_pinv * transpose _camera' * _true_XYZ); // convert linear RGB camera to Lab _result = (Image @ colour_transform Image_type.XYZ Image_type.LAB @ cast_float @ recomb M) _image'; // measure again and compute dE76 _camera'' = im_measure _result.value 0 0 image.width image.height 6 4; _dEs = map abs_vec (_camera'' - _true_Lab).value; final_dE76 = mean _dEs; _max_dE = foldr max_pair 0 _dEs; _worst = index (equal _max_dE) _dEs; worst_patch = name _worst ++ " (patch " ++ print (_worst + 1) ++ ", " ++ print _max_dE ++ " dE)" { name i = macbeth_names?i, i >= 0 && i < len macbeth_names = "Unknown"; } } } Apply_calib_item = class Menuaction "_Apply Colour Calibration" "apply an RGB -> LAB transform to an image" { action a b = class (map_binary process a b) { process a b = result, is_instanceof calib_name calib && is_Image image = error (_ "bad arguments to " ++ "Calibrate_image") { // the name of the calib object we need calib_name = "Tasks_capture_item.Find_calib_item.action"; // get the Calibrate_chart arg first [image, calib] = sortc (const (is_instanceof calib_name)) [a, b]; // map the original image through the lineariser to get // linear 0-1 RGB image image' = hist_map calib.linearising_lut image; // convert linear RGB camera to Lab result = colour_transform Image_type.XYZ Image_type.LAB ((float) (recomb calib.M image')); } } } sep4 = Menuseparator; Graph_hist_item = Hist_find_item; Graph_bands_item = class Menuaction "Plot _Bands" "show image bands as a graph" { action x = class _result { _vislevel = 3; style = Option_enum "Style" Plot_style.names "Line"; auto = Toggle "Auto Range" true; ymin = Expression "Y range minimum" 0; ymax = Expression "Y range maximum" 1; _result = Plot options (to_image (bands (image x))).value { options = [$style => style.value] ++ if auto then [] else [$ymin => ymin.expr, $ymax => ymax.expr]; // try to make something image-like from it image x = extract_area x.left x.top 1 1 x.image, is_Mark x = get_image x, has_image x = get_image (to_image x); // get as [[1],[2],[3]] bands x = transpose [map mean (bandsplit x)]; } } } } Tasks_mosaic_item = class Menupullright "_Mosaic" "build image mosaics" { /* Check and group a point list by image. */ mosaic_sort_test l = error "mosaic: not all points", !is_listof is_Mark l = error "mosaic: points not on two images", !is_list_len 2 images = error "mosaic: images do not match in format and coding", !all_equal (map get_format l) || !all_equal (map get_coding l) = error "mosaic: not same number of points on each image", !foldr1 equal (map len l') = l' { // test for all elements of a list equal all_equal l = all (map (equal (hd l)) (tl l)); // all the different images images = mkset pointer_equal (map get_image l); // find all points defined on image test_image image p = (get_image p) === image; find l image = filter (test_image image) l; // group point list by image l' = map (find l) images; } /* Sort a point group to get right before left, and within each group to * get above before below. */ mosaic_sort_lr l = l'' { // sort to get upper point first above a b = a.top < b.top; l' = map (sortc above) l; // sort to get right group before left group right a b = a?0.left > b?0.left; l'' = sortc right l'; } /* Sort a point group to get top before bottom, and within each group to * get left before right. */ mosaic_sort_tb l = l'' { // sort to get upper point first left a b = a.left < b.left; l' = map (sortc left) l; // sort to get right group before left group below a b = a?0.top > b?0.top; l'' = sortc below l'; } /* Put 'em together! Group by image, sort vertically (or horizontally) with * one of the above, transpose to get pairs matched up, and flatten again. */ mosaic_sort fn = concat @ transpose @ fn @ mosaic_sort_test; Mosaic_1point_item = class Menupullright "_One Point" "join two images with a single tie point" { check_ab_args a b = [ [a, "a", check_Mark], [b, "b", check_Mark] ]; // shortcut to prefs prefs = Workspaces.Preferences; search_area = prefs.MOSAIC_WINDOW_SIZE; object_size = prefs.MOSAIC_OBJECT_SIZE; blend_width_widget = Scale "Maximum blend width" 0 100 prefs.MOSAIC_MAX_BLEND_WIDTH; refine_widget = Toggle "Refine selected tie-points" prefs.MOSAIC_REFINE; lr_mos _refine a b = class Image _result { _check_args = check_ab_args a b; bw = blend_width_widget; refine = _refine; _result = im_lrmosaic a'.image.value b'.image.value 0 a'.left a'.top b'.left b'.top (object_size / 2) (search_area / 2) 0 bw.value, refine = im_lrmerge a'.image.value b'.image.value (b'.left - a'.left) (b'.top - a'.top) bw.value { [a', b'] = mosaic_sort mosaic_sort_lr [a, b]; } } tb_mos _refine a b = class Image _result { _check_args = check_ab_args a b; bw = blend_width_widget; refine = _refine; _result = im_tbmosaic a'.image.value b'.image.value 0 a'.left a'.top b'.left b'.top (object_size / 2) (search_area / 2) 0 bw.value, refine = im_tbmerge a'.image.value b'.image.value (b'.left - a'.left) (b'.top - a'.top) bw.value { [a', b'] = mosaic_sort mosaic_sort_tb [a, b]; } } Left_right_item = class Menuaction "_Left to Right" "join two images left-right with a single tie point" { action a b = lr_mos refine_widget a b; } Top_bottom_item = class Menuaction "_Top to Bottom" "join two images top-bottom with a single tie point" { action a b = tb_mos refine_widget a b; } sep1 = Menuseparator; Left_right_manual_item = class Menuaction "Manual L_eft to Right" "join left-right, no auto-adjust of tie points" { action a b = lr_mos false a b; } Top_bottom_manual_item = class Menuaction "Manual T_op to Bottom" "join top-bottom, no auto-adjust of tie points" { action a b = tb_mos false a b; } } Mosaic_2point_item = class Menupullright "_Two Point" "join two images with two tie points" { check_abcd_args a b c d = [ [a, "a", check_Mark], [b, "b", check_Mark], [c, "c", check_Mark], [d, "d", check_Mark] ]; // shortcut to prefs prefs = Workspaces.Preferences; search_area = prefs.MOSAIC_WINDOW_SIZE; object_size = prefs.MOSAIC_OBJECT_SIZE; blend_width_widget = Scale "Maximum blend width" 0 100 prefs.MOSAIC_MAX_BLEND_WIDTH; refine_widget = Toggle "Refine selected tie-points" prefs.MOSAIC_REFINE; Left_right_item = class Menuaction "_Left to Right" "join two images left-right with a pair of tie points" { action a b c d = class Image _result { _check_args = check_abcd_args a b c d; bw = blend_width_widget; refine = refine_widget; _result = im_lrmosaic1 a'.image.value b'.image.value 0 a'.left a'.top b'.left b'.top c'.left c'.top d'.left d'.top (object_size / 2) (search_area / 2) 0 bw.value, refine = im_lrmerge1 a'.image.value b'.image.value a'.left a'.top b'.left b'.top c'.left c'.top d'.left d'.top bw.value { [a', b', c', d'] = mosaic_sort mosaic_sort_lr [a, b, c, d]; } } } Top_bottom_item = class Menuaction "_Top to Bottom" "join two images top-bottom with a pair of tie points" { action a b c d = class Image _result { _check_args = check_abcd_args a b c d; bw = blend_width_widget; refine = refine_widget; _result = im_tbmosaic1 a'.image.value b'.image.value 0 a'.left a'.top b'.left b'.top c'.left c'.top d'.left d'.top (object_size / 2) (search_area / 2) 0 bw.value, refine = im_tbmerge1 a'.image.value b'.image.value a'.left a'.top b'.left b'.top c'.left c'.top d'.left d'.top bw.value { [a', b', c', d'] = mosaic_sort mosaic_sort_tb [a, b, c, d]; } } } } sep1 = Menuseparator; Balance_item = class Menuaction "Mosaic _Balance" "disassemble mosaic, scale brightness to match, reassemble" { action x = map_unary balance x { balance x = oo_unary_function balance_op x, is_class x = im_global_balancef x Workspaces.Preferences.MOSAIC_BALANCE_GAMMA, is_image x = error (_ "bad arguments to " ++ "balance") { balance_op = Operator "balance" balance Operator_type.COMPOUND_REWRAP false; } } } //////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// Manual_balance_item = class Menupullright "Manual B_alance" "balance tonality of user defined areas" { prefs = Workspaces.Preferences; //////////////////////////////////////////////////////////////////////////////////// Balance_find_item = class Menuaction "_Find Values" "calculates values required to scale and offset balance user defined areas in a given image" /* Outputs a matrix of scale and offset values. Eg. Values required to balance the secondary * structure in an X-ray image. Takes an X-ray image an 8-bit control mask and a list of * 8-bit reference masks, where the masks are white on a black background. */ { action im_in m_control m_group = class Matrix values{ _vislevel = 1; _control_im = if m_control then im_in else 0; _control_meanmax = so_meanmax _control_im; _group_check = is_Group m_group; _m_list = m_group.value, _group_check = m_group; process m_current mat_in = mat_out {so_values = so_calculate _control_meanmax im_in m_current; mat_out = join [so_values] mat_in;} values = (foldr process [] _m_list); } } //////////////////////////////////////////////////////////////////////////////////// Balance_check_item = class Menuaction "_Check Values" "allows calculated set of scale and offset values to be checked and adjusted if required" /* Outputs adjusted matrix of scale and offset values and scale and offset image maps. * Eg. Check values required to balance the secondary structure in an X-ray image. * Takes an X-ray image an 8-bit control mask and a list of 8-bit reference masks, * where the masks are white on a black background. */ { action im_in m_matrix m_group = class Image value { _vislevel = 3; blur = Scale "Blur" 1 10 1; _blur = (blur.value/2 + 0.5), blur.value > 1 = 1; _group_check = is_Group m_group; _m_list = m_group.value, _group_check = m_group; adjust = Matrix_rec mat_a { no_masks = len _m_list; mat_a = replicate no_masks [0, 0]; } // Apply the user defined adjustments to the inputted matrix of scale and offset values _adjusted = map2 fn_adjust m_matrix.value adjust.value; fn_adjust a b = [(a?0 + b?0), (a?1 + (a?1 * b?1))]; _scaled_ims = map (fn_so_apply im_in) _adjusted; fn_so_apply im so = map_unary adj im {adj im = im * (so?0) + (so?1);} _im_pairs = zip2 _m_list _scaled_ims; // Prepare black images as starting point. //////////// _blank = image_new (_m_list?0).width (_m_list?0).height 1 6 Image_coding.NOCODING 1 0 0 0; _pair_start = [(_blank + 1), _blank]; Build = Toggle "Build Scale and Offset Correction Images" false; Output = class { _vislevel = 1; scale_im = _build?0; offset_im = _build?1; so_values = Matrix _adjusted; _build = [Image so_images?0, Image so_images?1], Build = ["Scale image not built.", "Offset image not built."] { m_list' = transpose [_m_list]; m_all = map2 join m_list' _adjusted; so_images = foldr process_2 _pair_start m_all; } } value = (foldr process_1 im_in_b _im_pairs).value {im_in_b = map_unary cast_float im_in;} process_1 m_current im_start = im_out { bl_mask = convsep (matrix_blur _blur) (get_image m_current?0); blended_im = im_blend bl_mask (m_current?1).value im_start.value; im_out = Image (clip2fmt im_start.format blended_im); } // Process for building scale and offset image. process_2 current p_start = p_out { im_s = if ((current?0) > 128) then current?1 else _blank; im_o = if ((current?0) > 128) then current?2 else _blank; im_s' = convsep (matrix_blur _blur) (im_s != 0); im_o' = convsep (matrix_blur _blur) (im_o != 0); im_s'' = im_blend im_s'.value im_s.value p_start?0; im_o'' = im_blend im_o'.value im_o.value p_start?1; p_out = [im_s'', im_o'']; } } } //////////////////////////////////////////////////////////////////////////////////// Balance_apply_item = class Menuaction "_Apply Values" "apply scale and offset corrections, defined as image maps, to a given image" /* Outputs the balanced image. Eg. Balance the secondary structure in an X-ray image. Takes an * X-ray image an 32-bit float scale image and a 32-bit offset image. */ { action im_in scale_im offset_im = class Image value { _vislevel = 1; xfactor = im_in.width/scale_im.width; yfactor = im_in.height/scale_im.height; _scale_im = resize Interpolate_bilinear xfactor yfactor scale_im; _offset_im = resize Interpolate_bilinear xfactor yfactor offset_im; value = get_image ( clip2fmt im_in.format ( ( im_in * _scale_im ) + _offset_im ) ); } } } Tilt_item = Filter_tilt_item; sep2 = Menuseparator; Rebuild_item = class Menuaction "_Rebuild" "disassemble mosaic, substitute image files and reassemble" { action x = class _result { _vislevel = 3; old = String "In each filename, replace" "foo"; new = String "With" "bar"; _result = map_unary remosaic x { remosaic image = Image (im_remosaic image.value old.value new.value); } } } sep3 = Menuseparator; Clone_area_item = class Menuaction "_Clone Area" "replace dark or light section of im1 with pixels from im2" { action im1 im2 = class _result { _check_args = [ [im1, "im1", check_Image], [im2, "im2", check_Image] ]; _vislevel = 3; /* Region on first image placed in the top left hand corner, * positioned and size relative to the height and width of im1. */ r1 = Region_relative im1 0.05 0.05 0.05 0.05; /* Mark on second image placed in the top left hand corner, * positioned relative to the height and width of im2. Used to * define _r2, the region from which the section of image is cloned * from. */ p2 = Mark_relative im2 0.05 0.05; _r2 = Region im2 p2.left p2.top r1.width r1.height; mask = [r1 <= Options.sc, r1 >= Options.sc]?(Options.replace); Options = class { _vislevel = 3; pause = Toggle "Pause process" true; /* Option toggle used to define whether the user is * replacing a dark or a light area. */ replace = Option "Replace" [ "A Dark Area", "A Light Area" ] 1; // Used to select the area to be replaced. sc = Scale "Scale cutoff" 0.01 mx (mx / 2) {mx = Image_format.maxval im1.format;} //Allows replacement with scale&offset balanced gaussian noise. balance = Toggle "Balance cloned data to match surroundings." true; //Allows replacement with scale&offset balanced //gaussian noise. process = Toggle "Replace area with Gaussian noise." false; } _result = im1, Options.pause = Image (im_insert im1.value patch r1.left r1.top) { r2 = Region im2 p2.left p2.top r1.width r1.height; ref_meanmax = so_meanmax (if mask then 0 else r1); mask8 = Matrix_mor [[255, 255, 255], [255, 255, 255], [255, 255, 255]]; mask_a = map_unary (dilate mask8) mask; mask_b = convsep (matrix_blur 2) mask_a; patch = so_balance ref_meanmax r1 r2 mask_b Options.process, Options.balance = so_balance ref_meanmax r1 r2 mask_b Options.process, Options.process = im_blend (get_image mask_b) (get_image r2) (get_image r1); } } } } Tasks_frame_item = Frame_item; Tasks_print_item = class Menupullright "_Print" "useful stuff for image output" { Rotate_item = Image_transform_item.Rotate_item; Flip_item = Image_transform_item.Flip_item; Resize_item = Image_transform_item.Resize_item; Tone_item = Image_levels_item.Tone_item; Sharpen_item = class Menuaction "_Sharpen" "unsharp filter tuned for typical inkjet printers" { action x = class _result { _vislevel = 3; target_dpi = Option "Sharpen for print at" [ "400 dpi", "300 dpi", "150 dpi", "75 dpi" ] 1; _result = map_unary process x { process image = sharpen params?0 params?1 params?2 params?3 params?4 params?5 (colour_transform_to Image_type.LABQ image) { // sharpen params for various dpi // just change the size of the area we search param_table = [ [7, 2.5, 40, 20, 0.5, 1.5], [5, 2.5, 40, 20, 0.5, 1.5], [3, 2.5, 40, 20, 0.5, 1.5], [11, 2.5, 40, 20, 0.5, 1.5] ]; params = param_table?target_dpi; } } } } sep1 = Menuseparator; Temp_item = Colour_temperature_item; ICC_item = Colour_icc_item; } nip2-8.7.0/share/nip2/compat/7.28/_types.def0000644000175000017500000006732313224651032015146 00000000000000/* A list of things. Do automatic iteration of unary and binary operators on * us. * List [1, 2] + [2, 3] -> List [3, 5] * hd (List [2, 3]) -> 2 * List [] == [] -> true */ List value = class _Object { _check_args = [ [value, "value", check_list] ]; // methods oo_binary_table op x = [ [apply2 op value x', op.op_name == "subscript" || op.op_name == "subscript'" || op.op_name == "equal" || op.op_name == "equal'"], [this.List (apply2 op value x'), op.op_name == "join" || op.op_name == "join'"], [this.List (map2 (apply2 op) value x'), is_list x'], [this.List (map (apply2 op' x) value), true] ] ++ super.oo_binary_table op x { op' = oo_converse op; // strip the List wrapper, if any x' = x.value, is_List x = x; apply2 op x1 x2 = oo_binary_function op x1 x2, is_class x1 = oo_binary'_function op x1 x2, is_class x2 = op.fn x1 x2; }; oo_unary_table op = [ [apply value, op.op_name == "hd" || op.op_name == "tl"], [this.List (map apply value), true] ] ++ super.oo_unary_table op { apply x = oo_unary_function op x, is_class x = op.fn x; } } /* A group of things. Loop the operation over the group. */ Group value = class _Object { _check_args = [ [value, "value", check_list] ]; // methods oo_binary_table op x = [ // if_then_else is really a trinary operator [map_trinary ite this x?0 x?1, op.op_name == "if_then_else"], [map_binary op.fn this x, is_Group x], [map_unary (\a op.fn a x) this, true] ] ++ super.oo_binary_table op x; oo_unary_table op = [ [map_unary op.fn this, true] ] ++ super.oo_unary_table op; // we can't call map_trinary directly, since it uses Group and we // don't support mutually recursive top-level functions :-( // copy-paste it here, keep in sync with the version in _stdenv map_nary fn args = fn args, groups == [] = Group (map process [0, 1 .. shortest - 1]) { groups = filter is_Group args; shortest = foldr1 min_pair (map (len @ get_value) groups); process n = NULL, any (map (is_noval n) args) = map_nary fn (map (extract n) args) { extract n arg = arg.value?n, is_Group arg = arg; is_noval n arg = is_Group arg && arg.value?n == NULL; } } // need ite as a true trinary ite a b c = if a then b else c; map_unary fn a = map_nary (list_1ary fn) [a]; map_binary fn a b = map_nary (list_2ary fn) [a, b]; map_trinary fn a b c = map_nary (list_3ary fn) [a, b, c]; } /* Single real number ... eg slider. */ Real value = class _Object { _check_args = [ [value, "value", check_real] ]; // methods oo_binary_table op x = [ [this.Real (op.fn this.value x.value), is_Real x && op.type == Operator_type.ARITHMETIC], [this.Real (op.fn this.value x), is_real x && op.type == Operator_type.ARITHMETIC], [op.fn this.value x.value, is_Real x && op.type == Operator_type.RELATIONAL], [op.fn this.value x, !is_class x] ] ++ super.oo_binary_table op x; oo_unary_table op = [ [this.Real (op.fn this.value), op.type == Operator_type.ARITHMETIC], [op.fn this.value, true] ] ++ super.oo_unary_table op; } /* Single bool ... eg Toggle. */ Bool value = class _Object { _check_args = [ [value, "value", check_bool] ]; // methods oo_binary_table op x = [ [op.fn this.value x, op.op_name == "if_then_else"], [this.Bool (op.fn this.value x.value), is_Bool x], [this.Bool (op.fn this.value x), is_bool x] ] ++ super.oo_binary_table op x; oo_unary_table op = [ [this.Bool (op.fn this.value), op.type == Operator_type.ARITHMETIC || op.type == Operator_type.RELATIONAL], [op.fn this.value, true] ] ++ super.oo_unary_table op; } /* An editable string. */ String caption value = class _Object { _check_args = [ [caption, "caption", check_string], [value, "value", check_string] ]; } /* An editable real number. */ Number caption value = class scope.Real value { _check_args = [ [caption, "caption", check_string] ]; Real x = this.Number caption x; } /* An editable expression. */ Expression caption expr = class (if is_class expr then expr else _Object) { _check_args = [ [caption, "caption", check_string], [expr, "expr", check_any] ]; } /* A ticking clock. */ Clock interval value = class scope.Real value { _check_args = [ [interval, "interval", check_real] ]; Real x = this.Clock interval x; } /* An editable filename. */ Pathname caption value = class _Object { _check_args = [ [caption, "caption", check_string], [value, "value", check_string] ]; } /* An editable fontname. */ Fontname caption value = class _Object { _check_args = [ [caption, "caption", check_string], [value, "value", check_string] ]; } /* Vector type ... just a finite list of real. Handy for wrapping an * argument to eg. im_lintra_vec. Make it behave like a single pixel image. */ Vector value = class _Object { _check_args = [ [value, "value", check_real_list] ]; bands = len value; // methods oo_binary_table op x = [ // Vector ++ Vector means bandwise join [this.Vector (op.fn this.value x.value), is_Vector x && (op.op_name == "join" || op.op_name == "join'")], [this.Vector (op.fn this.value [get_number x]), has_number x && (op.op_name == "join" || op.op_name == "join'")], // Vector ? number means extract element [op.fn this.value (get_real x), has_real x && (op.op_name == "subscript" || op.op_name == "subscript'")], // extra check for lengths equal [this.Vector (map_binaryl op.fn this.value x.value), is_Vector x && len value == len x.value && op.type == Operator_type.ARITHMETIC], [this.Vector (map_binaryl op.fn this.value (get_real x)), has_real x && op.type == Operator_type.ARITHMETIC], // need extra length check [this.Vector (map bool_to_real (map_binaryl op.fn this.value x.value)), is_Vector x && len value == len x.value && op.type == Operator_type.RELATIONAL], [this.Vector (map bool_to_real (map_binaryl op.fn this.value (get_real x))), has_real x && op.type == Operator_type.RELATIONAL], [this.Vector (op.fn this.value x.value), is_Vector x && len value == len x.value && op.type == Operator_type.COMPOUND_REWRAP], [x.Image (vec op'.op_name x.value value), is_Image x], [vec op'.op_name x value, is_image x], [op.fn this.value x, is_real x] ] ++ super.oo_binary_table op x { op' = oo_converse op; }; oo_unary_table op = [ [this.Vector (map_unaryl op.fn this.value), op.type == Operator_type.ARITHMETIC], [this.Vector (map bool_to_real (map_unaryl op.fn this.value)), op.type == Operator_type.RELATIONAL], [this.Vector (op.fn this.value), op.type == Operator_type.COMPOUND_REWRAP], [op.fn this.value, true] ] ++ super.oo_unary_table op; // turn an ip bool (or a number, for Vector) into VIPSs 255/0 bool_to_real x = 255, is_bool x && x = 255, is_number x && x != 0 = 0; } /* A rectangular array of real. */ Matrix_base value = class _Object { _check_args = [ [value, "value", check_matrix] ]; // calculate these from value width = len value?0; height = len value; // extract a rectanguar area extract left top width height = this.Matrix_base ((map (take width) @ map (drop left) @ take height @ drop top) value); // methods oo_binary_table op x = [ // mat multiply is special [this.Matrix_base mul.value, is_Matrix x && op.op_name == "multiply"], [this.Matrix_base mul'.value, is_Matrix x && op.op_name == "multiply'"], // mat divide is also special [this.Matrix_base div.value, is_Matrix x && op.op_name == "divide"], [this.Matrix_base div'.value, is_Matrix x && op.op_name == "divide'"], // power -1 means invert [this.Matrix_base inv.value, is_real x && x == -1 && op.op_name == "power"], [this.Matrix_base sq.value, is_real x && x == 2 && op.op_name == "power"], [error "matrix **-1 and **2 only", op.op_name == "power" || op.op_name == "power'"], // matrix op vector ... treat a vector as a 1 row matrix [this.Matrix_base (map (map_binaryl op'.fn x.value) this.value), is_Vector x && op.type == Operator_type.ARITHMETIC], [this.Matrix_base (map_binaryl op.fn this.value x.value), (is_Matrix x || is_Real x) && op.type == Operator_type.ARITHMETIC], [this.Matrix_base (map_binaryl op.fn this.value x), is_real x && op.type == Operator_type.ARITHMETIC], // compound ... don't do iteration [this.Matrix_base (op.fn this.value x.value), (is_Matrix x || is_Real x || is_Vector x) && op.type == Operator_type.COMPOUND_REWRAP], [op.fn this.value x, op.type == Operator_type.COMPOUND] ] ++ super.oo_binary_table op x { mul = im_matmul this x; mul' = im_matmul x this; div = im_matmul this (im_matinv x); div' = im_matmul x (im_matinv this); inv = im_matinv this; sq = im_matmul this this; op' = oo_converse op; } oo_unary_table op = [ [this.Matrix_base (map_unaryl op.fn this.value), op.type == Operator_type.ARITHMETIC], [this.Matrix_base (op.fn this.value), op.type == Operator_type.COMPOUND_REWRAP], [op.fn this.value, true] ] ++ super.oo_unary_table op; } /* How to display a matrix: text, sliders, toggles, or text plus scale/offset. */ Matrix_display = class { text = 0; slider = 1; toggle = 2; text_scale_offset = 3; is_display = member [text, slider, toggle, text_scale_offset]; } /* A matrix as VIPS sees them ... add scale, offset and filename. For nip, add * a display type as well to control how the widget renders. */ Matrix_vips value scale offset filename display = class scope.Matrix_base value { _check_args = [ [scale, "scale", check_real], [offset, "offset", check_real], [filename, "filename", check_string], [display, "display", check_matrix_display] ]; Matrix_base x = this.Matrix_vips x scale offset filename display; } /* A plain 'ol matrix which can be passed to VIPS. */ Matrix value = class Matrix_vips value 1 0 "" Matrix_display.text {} /* Specialised constructors ... for convolutions, recombinations and * morphologies. */ Matrix_con scale offset value = class Matrix_vips value scale offset "" Matrix_display.text_scale_offset {}; Matrix_rec value = class Matrix_vips value 1 0 "" Matrix_display.slider {}; Matrix_mor value = class Matrix_vips value 1 0 "" Matrix_display.toggle {}; Matrix_file filename = (im_read_dmask @ expand @ search) filename; /* A CIE colour ... a triple, plus a format (eg XYZ, Lab etc) */ Colour colour_space value = class scope.Vector value { _check_args = [ [colour_space, "colour_space", check_colour_space] ]; _check_all = [ [is_list_len 3 value, "len value == 3"] ]; Vector x = this.Colour colour_space x; // make a colour-ish thing from an image // back to Colour if we have another 3 band image // to a vector if bands > 1 // to a number otherwise itoc im = this.Colour nip_type (to_matrix im).value?0, bands == 3 = scope.Vector (map mean (bandsplit im)), bands > 1 = mean im { type = get_header "Type" im; bands = get_header "Bands" im; nip_type = Image_type.colour_spaces.lookup 1 0 type; } // methods oo_binary_table op x = [ [itoc (op.fn ((float) (to_image this).value) ((float) (to_image x).value)), // here REWRAP means go via image op.type == Operator_type.COMPOUND_REWRAP] ] ++ super.oo_binary_table op x; oo_unary_table op = [ [itoc (op.fn ((float) (to_image this).value)), op.type == Operator_type.COMPOUND_REWRAP] ] ++ super.oo_unary_table op; } // a subclass with widgets for picking a space and value Colour_picker default_colour default_value = class Colour space.item colour.expr { _vislevel = 3; space = Option_enum "Colour space" Image_type.colour_spaces default_colour; colour = Expression "Colour value" default_value; Colour_edit colour_space value = Colour_picker colour_space value; } /* Base scale type. */ Scale caption from to value = class scope.Real value { _check_args = [ [caption, "caption", check_string], [from, "from", check_real], [to, "to", check_real] ]; _check_all = [ [from < to, "from < to"] ]; Real x = this.Scale caption from to x; // methods oo_binary_table op x = [ [this.Scale caption (op.fn this.from x.from) (op.fn this.to x.to) (op.fn this.value x.value), is_Scale x && op.type == Operator_type.ARITHMETIC], [this.Scale caption (op.fn this.from x) (op.fn this.to x) (op.fn this.value x), is_real x && op.type == Operator_type.ARITHMETIC] ] ++ super.oo_binary_table op x; } /* Base toggle type. */ Toggle caption value = class scope.Bool value { _check_args = [ [caption, "caption", check_string], [value, "value", check_bool] ]; Bool x = this.Toggle caption x; } /* Base option type. */ Option caption labels value = class scope.Real value { _check_args = [ [caption, "caption", check_string], [labels, "labels", check_string_list], [value, "value", check_uint] ]; } /* An option whose value is a string rather than a number. */ Option_string caption labels item = class Option caption labels (index (equal item) labels) { Option_edit caption labels value = this.Option_string caption labels (labels?value); } /* Make an option from an enum. */ Option_enum caption enum item = class Option_string caption enum.names item { // corresponding thing value_thing = enum.get_thing item; Option_edit caption labels value = this.Option_enum caption enum (enum.names?value); } /* A rectangle. width and height can be -ve. */ Rect left top width height = class _Object { _check_args = [ [left, "left", check_real], [top, "top", check_real], [width, "width", check_real], [height, "height", check_real] ]; // derived right = left + width; bottom = top + height; oo_binary_table op x = [ [equal x, is_Rect x && (op.op_name == "equal" || op.op_name == "equal'")], [!equal x, is_Rect x && (op.op_name == "not_equal" || op.op_name == "not_equal'")], // binops with a complex are the same as (comp op comp) [oo_binary_function op this (Rect (re x) (im x) 0 0), is_complex x], // all others are just pairwise [this.Rect left' top' width' height', is_Rect x && op.type == Operator_type.ARITHMETIC], [this.Rect left'' top'' width'' height'', has_number x && op.type == Operator_type.ARITHMETIC] ] ++ super.oo_binary_table op x { left' = op.fn left x.left; top' = op.fn top x.top; width' = op.fn width x.width; height' = op.fn height x.height; left'' = op.fn left x'; top'' = op.fn top x'; width'' = op.fn width x'; height'' = op.fn height x'; x' = get_number x; } oo_unary_table op = [ // arithmetic uops just map [this.Rect left' top' width' height', op.type == Operator_type.ARITHMETIC], // compound uops are just like ops on complex // do (width, height) so thing like abs(Arrow) work as you'd expect [op.fn (width, height), op.type == Operator_type.COMPOUND] ] ++ super.oo_unary_table op { left' = op.fn left; top' = op.fn top; width' = op.fn width; height' = op.fn height; } // empty? ie. contains no pixels is_empty = width == 0 || height == 0; // normalised version, ie. make width/height +ve and flip the origin nleft = left + width, width < 0 = left; ntop = top + height, height < 0 = top; nwidth = abs width; nheight = abs height; nright = nleft + nwidth; nbottom = ntop + nheight; equal x = left == x.left && top == x.top && width == x.width && height == x.height; // contains a point? includes_point x y = nleft <= x && x <= nright && ntop <= y && y <= nbottom; // contains a rect? just test top left and bottom right points includes_rect r = includes_point r.nleft r.ntop && includes_point r.nright r.nbottom; // bounding box of two rects // if either is empty, can just return the other union r = r, is_empty = this, r.is_empty = Rect left' top' width' height' { left' = min_pair nleft r.nleft; top' = min_pair ntop r.ntop; width' = max_pair nright r.nright - left'; height' = max_pair nbottom r.nbottom - top'; } // intersection of two rects ... empty rect if no intersection intersect r = Rect left' top' width'' height'' { left' = max_pair nleft r.nleft; top' = max_pair ntop r.ntop; width' = min_pair nright r.nright - left'; height' = min_pair nbottom r.nbottom - top'; width'' = width', width > 0 = 0; height'' = height', height > 0 = 0; } // expand/collapse by n pixels margin_adjust n = Rect (left - n) (top - n) (width + 2 * n) (height + 2 * n); } /* Values for Compression field in image. */ Image_compression = class { NONE = 0; NO_COMPRESSION = 0; TCSF_COMPRESSION = 1; JPEG_COMPRESSION = 2; LABPACK_COMPRESSED = 3; RGB_COMPRESSED = 4; LUM_COMPRESSED = 5; } /* Values for Coding field in image. */ Image_coding = class { NONE = 0; NOCODING = 0; COLQUANT = 1; LABPACK = 2; RAD = 6; } /* Values for BandFmt field in image. */ Image_format = class { DPCOMPLEX = 9; DOUBLE = 8; COMPLEX = 7; FLOAT = 6; INT = 5; UINT = 4; SHORT = 3; USHORT = 2; CHAR = 1; UCHAR = 0; NOTSET = -1; maxval fmt = [ 255, // UCHAR 127, // CHAR 65535, // USHORT 32767, // SHORT 4294967295, // UINT 2147483647, // INT 255, // FLOAT 255, // COMPLEX 255, // DOUBLE 255 // DPCOMPLEX ] ? fmt, fmt >= 0 && fmt <= DPCOMPLEX = error (_ "bad value for BandFmt"); } /* A lookup table. */ Table value = class _Object { _check_args = [ [value, "value", check_rectangular] ]; /* Extract a column. */ column n = map (extract n) value; /* present col x: is there an x in column col */ present col x = member (column col) x; /* Look on column from, return matching item in column to. */ lookup from to x = value?n?to, n >= 0 = error (_ "item" ++ " " ++ print x ++ " " ++ _ "not in table") { n = index (equal x) (column from); } } /* A two column lookup table with the first column a string and the second a * thing. Used for representing various enums. Option_enum makes a selector * from one of these. */ Enum value = class Table value { _check_args = [ [value, "value", check_enum] ] { check_enum = [is_enum, _ "is [[char, *]]"]; is_enum x = is_rectangular x && is_listof is_string (map (extract 0) x); } // handy ... all the names and things as lists names = this.column 0; things = this.column 1; // is a legal name or thing has_name x = this.present 1 x; has_thing x = this.present 0 x; // map things to strings and back get_name x = this.lookup 1 0 x; get_thing x = this.lookup 0 1 x; } /* Type field. */ Image_type = class { MULTIBAND = 0; B_W = 1; HISTOGRAM = 10; XYZ = 12; LAB = 13; CMYK = 15; LABQ = 16; RGB = 17; UCS = 18; LCH = 19; LABS = 21; sRGB = 22; YXY = 23; FOURIER = 24; RGB16 = 25; GREY16 = 26; ARRAY = 27; /* Table to get names <-> numbers. */ type_names = Enum [ $MULTIBAND => MULTIBAND, $B_W => B_W, $HISTOGRAM => HISTOGRAM, $XYZ => XYZ, $LAB => LAB, $CMYK => CMYK, $LABQ => LABQ, $RGB => RGB, $UCS => UCS, $LCH => LCH, $LABS => LABS, $sRGB => sRGB, $YXY => YXY, $FOURIER => FOURIER, $RGB16 => RGB16, $GREY16 => GREY16, $ARRAY => ARRAY ]; /* Table relating nip's colour space names and VIPS's Type numbers. * Options generated from this, so match the order to the order in the * Colour menu. */ colour_spaces = Enum [ $sRGB => sRGB, $Lab => LAB, $LCh => LCH, $XYZ => XYZ, $Yxy => YXY, $UCS => UCS ]; /* A slightly larger table ... the types of colorimetric image we can * have. Add mono, and the S and Q forms of LAB. */ image_colour_spaces = Enum [ $Mono => B_W, $sRGB => sRGB, $RGB16 => RGB16, $GREY16 => GREY16, $Lab => LAB, $LabQ => LABQ, $LabS => LABS, $LCh => LCH, $XYZ => XYZ, $Yxy => YXY, $UCS => UCS ]; } /* Base image type. Simple layer over vips_image. */ Image value = class _Object { _check_args = [ [value, "value", check_image] ]; // fields from VIPS header width = get_width value; height = get_height value; bands = get_bands value; format = get_format value; bits = get_bits value; coding = get_coding value; type = get_type value; xres = get_header "Xres" value; yres = get_header "Yres" value; xoffset = get_header "Xoffset" value; yoffset = get_header "Yoffset" value; filename = get_header "filename" value; // convenience ... the area our pixels occupy, as a rect rect = Rect 0 0 width height; // operator overloading // (op Image Vector) done in Vector class oo_binary_table op x = [ // handle image ++ constant here [wrap join_result_image, (has_real x || is_Vector x) && (op.op_name == "join" || op.op_name == "join'")], [wrap ite_result_image, op.op_name == "if_then_else"], [wrap (op.fn this.value (get_image x)), has_image x], [wrap (op.fn this.value (get_number x)), has_number x], // if it's not a class on the RHS, handle here ... just apply and // rewrap [wrap (op.fn this.value x), !is_class x] // all other cases handled by other classes ] ++ super.oo_binary_table op x { // wrap the result with this // x can be a non-image, eg. compare "Image v == []" vs. // "Image v == 12" wrap x = x, op.type == Operator_type.COMPOUND || !is_image x = this.Image x; join_result_image = value ++ new_stuff, op.op_name == "join" = new_stuff ++ value { new_stuff = image_new width height new_bands format coding Image_type.B_W x xoffset yoffset; new_bands = get_bands x, has_bands x = 1; } [then_part, else_part] = x; // get things about our output from inputs in this order objects = [then_part, else_part, this]; // properties of our output image target_bands = get_member_list has_bands get_bands objects; target_type = get_member_list has_type get_type objects; // if one of then/else is an image, get the target format from that // otherwise, let the non-image objects set the target target_format = get_member_list has_format get_format x, has_member_list has_format x = NULL; to_image x = to_image_size width height target_bands target_format x; [then', else'] = map to_image x; ite_result_image = image_set_type target_type (if value then then' else else'); } // FIXME ... yuk ... don't use operator hints, just always rewrap if // we have an image result // forced on us by things like abs: // abs Vector -> real // abs Image -> Image // does not fit well with COMPOUND/whatever scheme oo_unary_table op = [ [this.Image result, is_image result], [result, true] ] ++ super.oo_unary_table op { result = op.fn this.value; } } /* Construct an image from a file. */ Image_file filename = class Image value { _check_args = [ [filename, "filename", check_string] ]; value = vips_image filename; } Region image left top width height = class Image value { _check_args = [ [image, "Image", check_Image], [left, "left", check_real], [top, "top", check_real], [width, "width", check_preal], [height, "height", check_preal] ]; // a rect for our coordinates // region.rect gets the rect for the extracted image region_rect = Rect left top width height; // we need to always succeed ... value is our enclosing image if we're // out of bounds value = extract_area left top width height image.value, image.rect.includes_rect region_rect = image.value; } Area image left top width height = class scope.Region image left top width height { Region image left top width height = this.Area image left top width height; } Arrow image left top width height = class scope.Rect left top width height { _check_args = [ [image, "Image", check_Image], [left, "left", check_real], [top, "top", check_real], [width, "width", check_real], [height, "height", check_real] ]; Rect l t w h = this.Arrow image l t w h; } HGuide image top = class scope.Arrow image image.rect.left top image.width 0 { Arrow image left top width height = this.HGuide image top; } VGuide image left = class scope.Arrow image left image.rect.top 0 image.height { Arrow image left top width height = this.VGuide image left; } Mark image left top = class scope.Arrow image left top 0 0 { Arrow image left top width height = this.Mark image left top; } // convenience functions: ... specify position as [0 .. 1) Region_relative image u v w h = Region image (image.width * u) (image.height * v) (image.width * w) (image.height * h); Area_relative image u v w h = Area image (image.width * u) (image.height * v) (image.width * w) (image.height * h); Arrow_relative image u v w h = Arrow image (image.width * u) (image.height * v) (image.width * w) (image.height * h); VGuide_relative image v = VGuide image (image.height * v); HGuide_relative image u = HGuide image (image.width * u); Mark_relative image u v = Mark image (image.width * u) (image.height * v); Interpolate_type = class { NEAREST_NEIGHBOUR = 0; BILINEAR = 1; BICUBIC = 2; LBB = 3; NOHALO = 4; VSQBS = 5; // Should introspect to get the list of interpolators :-( // We can "dir" on VipsInterpolate to get a list of them, but we // can't get i18n'd descriptions until we have more // introspection stuff in nip2. /* Table to map interpol numbers to descriptive strings */ descriptions = [ _ "Nearest neighbour", _ "Bilinear", _ "Bicubic", _ "Upsize: reduced halo bicubic (LBB)", _ "Upsharp: reduced halo bicubic with edge sharpening (Nohalo)", _ "Upsmooth: quadratic B-splines with jaggy reduction (VSQBS)" ]; /* And to vips type names. */ types = [ "VipsInterpolateNearest", "VipsInterpolateBilinear", "VipsInterpolateBicubic", "VipsInterpolateLbb", "VipsInterpolateNohalo", "VipsInterpolateVsqbs" ]; } Interpolate type options = class { value = vips_object_new Interpolate_type.types?type [] options; } Interpolate_bilinear = Interpolate Interpolate_type.BILINEAR []; Interpolate_picker default = class Interpolate interp.value [] { _vislevel = 2; interp = Option "Interpolation" Interpolate_type.descriptions default; } Render_intent = class { PERCEPTUAL = 0; RELATIVE = 1; SATURATION = 2; ABSOLUTE = 3; /* Table to get names <-> numbers. */ names = Enum [ _ "Perceptual" => PERCEPTUAL, _ "Relative" => RELATIVE, _ "Saturation" => SATURATION, _ "Absolute" => ABSOLUTE ]; } // abstract base class for toolkit menus Menu = class {} // a "----" line in a menu Menuseparator = class Menu {} // abstract base class for items in menus Menuitem label tooltip = class Menu {} Menupullright label tooltip = class Menuitem label tooltip {} Menuaction label tooltip = class Menuitem label tooltip {} /* Plots. */ Plot_style = class { POINT = 0; LINE = 1; SPLINE = 2; BAR = 3; names = Enum [ _ "Point" => POINT, _ "Line" => LINE, _ "Spline" => SPLINE, _ "Bar" => BAR ]; } Plot_format = class { YYYY = 0; XYYY = 1; XYXY = 2; names = Enum [ _ "YYYY" => YYYY, _ "XYYY" => XYXY, _ "XYXY" => XYXY ]; } Plot_type = class { /* Lots of Ys (ie. multiple line plots). */ YYYY = 0; /* First column of matrix is X position, others are Ys (ie. multiple XY * line plots, all with the same Xes). */ XYYY = 1; /* Many independent XY plots. */ XYXY = 2; } /* "options" is a list of ["key", value] pairs. */ Plot options value = class scope.Image value { Image value = this.Plot options value; } Plot_matrix options value = class Plot options (to_image value).value { } Plot_histogram value = class scope.Plot [] value { } Plot_xy value = class scope.Plot [$format => Plot_format.XYYY] value { } /* A no-value type. Call it NULL for C-alike fun. Used by Group to indicate * empty slots, for example. */ NULL = class _Object { oo_binary_table op x = [ // the only operation we allow is equality .. use pointer equality, // this lets us test a == NULL and a != NULL [this === x, op.type == Operator_type.RELATIONAL && op.op_name == "equal"], [this !== x, op.type == Operator_type.RELATIONAL && op.op_name == "not_equal"] ] ++ super.oo_binary_table op x; } nip2-8.7.0/share/nip2/compat/7.28/Makefile.am0000644000175000017500000000054313224651032015206 00000000000000startdir = $(pkgdatadir)/compat/7.28 start_DATA = \ Math.def \ Image.def \ Colour.def \ Tasks.def \ Object.def \ Filter.def \ Matrix.def \ Widgets.def \ Histogram.def \ _joe_extra.def \ _joe_utilities.def \ _convert.def \ _generate.def \ _list.def \ _predicate.def \ _stdenv.def \ _Object.def \ _types.def EXTRA_DIST = $(start_DATA) nip2-8.7.0/share/nip2/compat/Makefile.in0000644000175000017500000004644613350464104014637 00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = share/nip2/compat ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BISON = @BISON@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DLLWRAP = @DLLWRAP@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FFTW3_CFLAGS = @FFTW3_CFLAGS@ FFTW3_LIBS = @FFTW3_LIBS@ FGREP = @FGREP@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_LIBS = @GSL_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ IP_CFLAGS = @IP_CFLAGS@ IP_LIBS = @IP_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBGOFFICE_CFLAGS = @LIBGOFFICE_CFLAGS@ LIBGOFFICE_LIBS = @LIBGOFFICE_LIBS@ LIBGSF_CFLAGS = @LIBGSF_CFLAGS@ LIBGSF_LIBS = @LIBGSF_LIBS@ LIBGVC_CFLAGS = @LIBGVC_CFLAGS@ LIBGVC_LIBS = @LIBGVC_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ 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@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ REQUIRED_PACKAGES_CFLAGS = @REQUIRED_PACKAGES_CFLAGS@ REQUIRED_PACKAGES_LIBS = @REQUIRED_PACKAGES_LIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOP_SRCDIR = @TOP_SRCDIR@ UPDATE_DESKTOP_DATABASE = @UPDATE_DESKTOP_DATABASE@ UPDATE_MIME_DATABASE = @UPDATE_MIME_DATABASE@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XDG_OPEN = @XDG_OPEN@ XGETTEXT = @XGETTEXT@ 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@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = 7.8 7.9 7.10 7.12 7.14 7.16 7.24 7.26 7.28 7.38 7.40 8.2 8.3 \ 8.4 8.5 8.6 all: all-recursive .SUFFIXES: $(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) --foreign share/nip2/compat/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign share/nip2/compat/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): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-libtool cscopelist-am ctags \ ctags-am distclean distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: nip2-8.7.0/share/nip2/compat/8.3/0000755000175000017500000000000013350464161013147 500000000000000nip2-8.7.0/share/nip2/compat/8.3/_stdenv.def0000644000175000017500000017677513224651032015233 00000000000000/* optional args to functions */ get_option options defaults f = error (_ "unknown parameter " ++ f), hits == [] = hits?0 { hits = [v :: [n, v] <- options ++ defaults; n == f]; } /* Various operators as functions. */ logical_and a b = a && b; logical_or a b = a || b; bitwise_and a b = a & b; bitwise_or a b = a | b; eor a b = a ^ b; left_shift a b = a << b; right_shift a b = a >> b; not a = !a; less a b = a < b; more a b = a > b; less_equal a b = a <= b; more_equal a b = a >= b; equal a b = a == b; not_equal a b = a != b; pointer_equal a b = a === b; not_pointer_equal a b = a !== b; add a b = a + b; subtract a b = a - b; multiply a b = a * b; divide a b = a / b; idivide a b = (int) ((int) a / (int) b); power a b = a ** b; square x = x * x; remainder a b = a % b; cons a b = a : b; dot a b = a . ( b ); join a b = a ++ b; // 'difference' is defined in _list subscript a b = a ? b; generate s n f = [s, n .. f]; comma r i = (r, i); compose f g = f @ g; // our only trinary operator is actually a binary operator if_then_else a x = if a then x?0 else x?1; cast_unsigned_char x = (unsigned char) x; cast_signed_char x = (signed char) x; cast_unsigned_short x = (unsigned short) x; cast_signed_short x = (signed short) x; cast_unsigned_int x = (unsigned int) x; cast_signed_int x = (signed int) x; cast_float x = (float) x; cast_double x = (double) x; cast_complex x = (complex) x; cast_double_complex x = (double complex) x; unary_minus x = -x; negate x = !x; complement x = ~x; unary_plus x = +x; // the function we call for "a -> v" expressions mksvpair s v = [s, v], is_string s = error "not str on lhs of ->"; // the vector ops ... im is an image, vec is a real_list vec op_name im vec = im_lintra_vec ones im vec, op_name == "add" || op_name == "add'" = im_lintra_vec ones (-1 * im) vec, op_name == "subtract'" = im_lintra_vec ones im inv, op_name == "subtract" = im_lintra_vec vec im zeros, op_name == "multiply" || op_name == "multiply'" = im_lintra_vec vec (1 / im) zeros, op_name == "divide'" = im_lintra_vec recip im zeros, op_name == "divide" = im_expntra_vec im vec, op_name == "power'" = im_powtra_vec im vec, op_name == "power" = im_remainderconst_vec im vec, op_name == "remainder" = im_andimage_vec im vec, op_name == "bitwise_and" || op_name == "bitwise_and'" = im_orimage_vec im vec, op_name == "bitwise_or" || op_name == "bitwise_or'" = im_eorimage_vec im vec, op_name == "eor" || op_name == "eor'" = im_equal_vec im vec, op_name == "equal" || op_name == "equal'" = im_notequal_vec im vec, op_name == "not_equal" || op_name == "not_equal'" = im_less_vec im vec, op_name == "less" = im_moreeq_vec im vec, op_name == "less'" = im_lesseq_vec im vec, op_name == "less_equal" = im_more_vec im vec, op_name == "less_equal'" = error ("unimplemented vector operation: " ++ op_name) { zeros = replicate (len vec) 0; ones = replicate (len vec) 1; recip = map (divide 1) vec; inv = map (multiply (-1)) vec; } // make a name value pair mknvpair n v = [n, v], is_string n = error "not [char] on LHS of =>"; /* Macbeth chart patch names. */ macbeth_names = [ "Dark skin", "Light skin", "Blue sky", "Foliage", "Blue flower", "Bluish green", "Orange", "Purplish blue", "Moderate red", "Purple", "Yellow green", "Orange yellow", "Blue", "Green", "Red", "Yellow", "Magenta", "Cyan", "White (density 0.05)", "Neutral 8 (density 0.23)", "Neutral 6.5 (density 0.44)", "Neutral 5 (density 0.70)", "Neutral 3.5 (density 1.05)", "Black (density 1.50)" ]; bandsplit x = oo_unary_function bandsplit_op x, is_class x = map (subscript x) [0 .. bands - 1], is_image x = error (_ "bad arguments to " ++ "bandsplit") { bands = get_header "Bands" x; bandsplit_op = Operator "bandsplit" (map Image @ bandsplit) Operator_type.COMPOUND false; } bandjoin l = wrapper joined, has_wrapper = joined, is_listof has_image l = error (_ "bad arguments to " ++ "bandjoin") { has_wrapper = has_member_list (has_member "Image") l; wrapper = get_member_list (has_member "Image") (get_member "Image") l; joined = im_gbandjoin (map get_image l); } bandand x = oo_unary_function bandand_op x, is_class x = foldr1 bitwise_and (bandsplit x), is_image x = error (_ "bad arguments to " ++ "bandand") { bandand_op = Operator "bandand" bandand Operator_type.COMPOUND_REWRAP false; } bandor x = oo_unary_function bandor_op x, is_class x = foldr1 bitwise_or (bandsplit x), is_image x = error (_ "bad arguments to " ++ "bandor") { bandor_op = Operator "bandor" bandor Operator_type.COMPOUND_REWRAP false; } sum x = oo_unary_function sum_op x, is_class x = im_avg x * (get_width x) * (get_height x) * (get_bands x), is_image x = sum_list x, is_list x = error (_ "bad arguments (" ++ print x ++ ") to " ++ "sum") { sum_op = Operator "sum" sum Operator_type.COMPOUND false; // add elements in a nested-list thing sum_list l = foldr acc 0 l { acc x total = total + sum x, is_list x = total + x; } } product x = oo_unary_function product_op x, is_class x = product_list x, is_list x // (product image) doesn't make much sense :( = error (_ "bad arguments (" ++ print x ++ ") to " ++ "product") { product_op = Operator "product" product Operator_type.COMPOUND false; product_list l = foldr prod 1 l { prod x total = total * product x, is_list x = total * x; } } mean x = oo_unary_function mean_op x, is_class x = im_avg x, is_image x = mean_list x, is_list x = error (_ "bad arguments (" ++ print x ++ ") to " ++ "mean") { mean_op = Operator "mean" mean Operator_type.COMPOUND false; mean_list l = sum l / size l; // number of elements in some sort of nested-list thing size l = foldr acc 0 l { acc x total = total + size x, is_list x = total + 1; } } meang x = (appl (power e) @ mean @ appl log) x { appl fn x = map fn x, is_list x = fn x; } skew x = oo_unary_function skew_op x, is_class x = sum ((x - m) ** 3) / ((N - 1) * s ** 3), is_image x = sum ((Group x' - m) ** 3).value / ((N - 1) * s ** 3), is_list x = error (_ "bad arguments (" ++ print x ++ ") to " ++ "skew") { skew_op = Operator "skew" skew Operator_type.COMPOUND false; // squash any large matrix down to a flat list ... much simpler x' = x, is_image x; = flatten x; m = mean x'; s = deviation x'; w = get_width x'; h = get_height x'; b = get_bands x'; N = w * h * b, is_image x' = len x'; } kurtosis x = oo_unary_function kurtosis_op x, is_class x = sum ((x - m) ** 4) / ((N - 1) * s ** 4), is_image x = sum ((Group x' - m) ** 4).value / ((N - 1) * s ** 4), is_list x = error (_ "bad arguments (" ++ print x ++ ") to " ++ "kurtosis") { kurtosis_op = Operator "kurtosis" kurtosis Operator_type.COMPOUND false; // squash any large matrix down to a flat list ... much simpler x' = x, is_image x; = flatten x; m = mean x'; s = deviation x'; w = get_width x'; h = get_height x'; b = get_bands x'; N = len x', is_list x'; = w * h * b; } // zero-excluding mean meanze x = oo_unary_function meanze_op x, is_class x = meanze_image_hist x, is_image x && (fmt == Image_format.UCHAR || fmt == Image_format.USHORT) = meanze_image x, is_image x = meanze_list x, is_list x = error (_ "bad arguments (" ++ print x ++ ") to " ++ "meanze") { fmt = get_format x; meanze_op = Operator "meanze" meanze Operator_type.COMPOUND false; meanze_list l = sum l / size l; // number of non-zero elements in some sort of nested-list thing size l = foldr acc 0 l { acc x total = total + size x, is_list x = total + 1, x != 0; = total; } // add elements in a nested-list thing sum l = foldr acc 0 l { acc x total = total + sum x, is_list x = total + x; } // image mean, for any image type meanze_image i = sum / N { w = get_width i; h = get_height i; b = get_bands i; st = stats i; sum = st.value?0?2; // find non-zero pixels (not zero in all bands) zp = im_notequal_vec i (replicate b 0); // number of non-zero pixels N = b * (mean zp * w * h) / 255; } // image mean for 8 and 16-bit unsigned images // we can use a histogram, yay, and save a pass through the image meanze_image_hist i = sum / N { // histogram, knock out zeros hist = hist_find i; black = image_new 1 1 (get_bands hist) (get_format hist) (get_coding hist) (get_type hist) 0 0 0; histze = insert 0 0 black hist; // matching identity iden = im_identity_ushort (get_bands hist) (get_width hist), (get_width hist) > 256 = im_identity (get_bands hist); // number of non-zero pixels N = mean histze * 256; // sum of pixels sum = mean (hist * iden) * 256; } } deviation x = oo_unary_function deviation_op x, is_class x = im_deviate x, is_image x = deviation_list x, is_real_list x || is_matrix x = error (_ "bad arguments to " ++ "deviation") { deviation_op = Operator "deviation" deviation Operator_type.COMPOUND false; deviation_list l = (abs (s2 - (s * s / n)) / (n - 1)) ** 0.5 { [n, s, s2] = sum_sum2_list l; } // return n, sum, sum of squares for a list of reals sum_sum2_list x = foldr accumulate [0, 0, 0] x { accumulate x sofar = [n + 1, x + s, x * x + s2], is_real x = [n + n', s + s', s2 + s2'], is_list x = error "sum_sum2_list: not real or [real]" { [n, s, s2] = sofar; [n', s', s2'] = sum_sum2_list x; } } } deviationze x = oo_unary_function deviationze_op x, is_class x = deviationze_image x, is_image x = deviationze_list x, is_real_list x || is_matrix x = error (_ "bad arguments to " ++ "deviationze") { deviationze_op = Operator "deviationze" deviationze Operator_type.COMPOUND false; deviationze_list l = (abs (s2 - (s * s / n)) / (n - 1)) ** 0.5 { [n, s, s2] = sum_sum2_list l; } // return number of non-zero elements, sum, sum of squares for a list of // reals sum_sum2_list x = foldr accumulate [0, 0, 0] x { accumulate x sofar = sofar, is_real x && x == 0 = [n + 1, x + s, x * x + s2], is_real x = [n + n', s + s', s2 + s2'], is_list x = error "sum_sum2_list: not real or [real]" { [n, s, s2] = sofar; [n', s', s2'] = sum_sum2_list x; } } deviationze_image i = ((sum2 - sum * sum / N) / (N - 1)) ** 0.5 { w = get_width i; h = get_height i; b = get_bands i; st = stats i; sum = st.value?0?2; sum2 = st.value?0?3; // find non-zero pixels (not zero in all bands) zp = im_notequal_vec i (replicate b 0); // number of non-zero pixels N = b * (mean zp * w * h) / 255; } } // find the centre of gravity of a histogram gravity x = oo_unary_function gravity_op x, is_class x = im_hist_gravity x, is_hist x = gravity_list x, is_list x = error (_ "bad arguments to " ++ "gravity") { gravity_op = Operator "gravity" gravity Operator_type.COMPOUND false; // centre of gravity of a histogram... use the histogram to weight an // identity, then sum, then find the mean element im_hist_gravity h = m { // make horizontal h' = rot270 h, get_width h == 1 = h, get_height h == 1 = error "width or height not 1"; // number of elements w = get_width h'; // matching identity i = im_identity_ushort 1 w, w <= 2 ** 16 - 1 = make_xy w 1 ? 0; // weight identity and sum s = mean (i * h') * w; // sum of original histogram s' = mean h * w; // weighted mean m = s / s'; } gravity_list l = m { w = len l; // matching identity i = [0, 1 .. w - 1]; // weight identity and sum s = sum (map2 multiply i l); // sum of original histogram s' = sum l; // weighted mean m = s / s'; } } project x = oo_unary_function project_op x, is_class x = im_project x, is_image x = error (_ "bad arguments to " ++ "project") { project_op = Operator "project" project Operator_type.COMPOUND false; } abs x = oo_unary_function abs_op x, is_class x = im_abs x, is_image x = abs_cmplx x, is_complex x = abs_num x, is_real x = abs_list x, is_real_list x = abs_list (map abs_list x), is_matrix x = error (_ "bad arguments to " ++ "abs") { abs_op = Operator "abs" abs Operator_type.COMPOUND false; abs_list l = (sum (map square l)) ** 0.5; abs_num n = n, n >= 0 = -n; abs_cmplx c = ((re c)**2 + (im c)**2) ** 0.5; } copy x = oo_unary_function copy_op x, is_class x = im_copy x, is_image x = x { copy_op = Operator "copy" copy Operator_type.COMPOUND_REWRAP false; } // like abs, but treat pixels as vectors ... ie. always get a 1-band image // back ... also treat matricies as lists of vectors // handy for dE from object difference abs_vec x = oo_unary_function abs_vec_op x, is_class x = abs_vec_image x, is_image x = abs_vec_cmplx x, is_complex x = abs_vec_num x, is_real x = abs_vec_list x, is_real_list x = mean (map abs_vec_list x), is_matrix x = error (_ "bad arguments to " ++ "abs_vec") { abs_vec_op = Operator "abs_vec" abs_vec Operator_type.COMPOUND false; abs_vec_list l = (sum (map square l)) ** 0.5; abs_vec_num n = n, n >= 0 = -n; abs_vec_cmplx c = ((re c)**2 + (im c)**2) ** 0.5; abs_vec_image im = (sum (map square (bandsplit im))) ** 0.5; } transpose x = oo_unary_function transpose_op x, is_class x = transpose_image x, is_image x = transpose_list x, is_listof is_list x = error (_ "bad arguments to " ++ "transpose") { transpose_op = Operator "transpose" transpose Operator_type.COMPOUND_REWRAP false; transpose_list l = [], l' == [] = (map hd l') : (transpose_list (map tl l')) { l' = takewhile (not_equal []) l; } transpose_image = im_flipver @ im_rot270; } rot45 x = oo_unary_function rot45_op x, is_class x = error "rot45 image: not implemented", is_image x = error (_ "bad arguments to " ++ "rot45") { rot45_op = Operator "rot45" rot45_object Operator_type.COMPOUND_REWRAP false; rot45_object x = rot45_matrix x, is_odd_square_matrix x = error "rot45 image: not implemented", is_image x = error (_ "bad arguments to " ++ "rot45"); // slow, but what the heck rot45_matrix l = (im_rotate_dmask45 (Matrix l)).value; } // apply an image function to a [[real]] ... matrix is converted to a 1 band // image for processing apply_matrix_as_image fn m = (get_value @ im_vips2mask @ fn @ im_mask2vips @ Matrix) m; // a general image/matrix operation where the mat version is most easily done // by converting mat->image->mat apply_matim_operation name fn x = oo_unary_function class_op x, is_class x = fn x, is_image x = apply_matrix_as_image fn x, is_matrix x = error (_ "bad arguments to " ++ name) { class_op = Operator name (apply_matim_operation name fn) Operator_type.COMPOUND_REWRAP false; } rot90 = apply_matim_operation "rot90" im_rot90; rot180 = apply_matim_operation "rot180" im_rot180; rot270 = apply_matim_operation "rot270" im_rot270; rotquad = apply_matim_operation "rotquad" im_rotquad; fliplr = apply_matim_operation "fliplr" im_fliphor; fliptb = apply_matim_operation "flipud" im_flipver; image_set_type type x = oo_unary_function image_set_type_op x, is_class x = im_copy_set x (to_real type) (get_header "Xres" x) (get_header "Yres" x) (get_header "Xoffset" x) (get_header "Yoffset" x), is_image x = error (_ "bad arguments to " ++ "image_set_type:" ++ print type ++ " " ++ print x) { image_set_type_op = Operator "image_set_type" (image_set_type type) Operator_type.COMPOUND_REWRAP false; } image_set_origin xoff yoff x = oo_unary_function image_set_origin_op x, is_class x = im_copy_set x (get_header "Type" x) (get_header "Xres" x) (get_header "Yres" x) (to_real xoff) (to_real yoff), is_image x = error (_ "bad arguments to " ++ "image_set_origin") { image_set_origin_op = Operator "image_set_origin" (image_set_origin xoff yoff) Operator_type.COMPOUND_REWRAP false; } cache tile_width tile_height max_tiles x = oo_unary_function cache_op x, is_class x = im_tile_cache_random x (to_real tile_width) (to_real tile_height) (to_real max_tiles), is_image x = error (_ "bad arguments to " ++ "cache") { cache_op = Operator "cache" (cache tile_width tile_height max_tiles) Operator_type.COMPOUND_REWRAP false; } tile across down x = oo_unary_function tile_op x, is_class x = im_replicate x (to_real across) (to_real down), is_image x = error (_ "bad arguments to " ++ "tile") { tile_op = Operator "tile" (tile across down) Operator_type.COMPOUND_REWRAP false; } grid tile_height across down x = oo_unary_function grid_op x, is_class x = im_grid x (to_real tile_height) (to_real across) (to_real down), is_image x = error (_ "bad arguments to " ++ "grid") { grid_op = Operator "grid" (grid tile_height across down) Operator_type.COMPOUND_REWRAP false; } max_pair a b = a, a > b = b; min_pair a b = a, a < b = b; range min value max = min_pair max (max_pair min value); max x = oo_unary_function max_op x, is_class x = im_max x, is_image x = max_list x, is_list x = x, is_number x = error (_ "bad arguments to " ++ "max") { max_op = Operator "max" max Operator_type.COMPOUND false; max_list x = error "max []", x == [] = foldr1 max_pair x, is_real_list x = foldr1 max_pair (map max_list x), is_list x = max x; } min x = oo_unary_function min_op x, is_class x = im_min x, is_image x = min_list x, is_list x = x, is_number x = error (_ "bad arguments to " ++ "min") { min_op = Operator "min" min Operator_type.COMPOUND false; min_list x = error "min []", x == [] = foldr1 min_pair x, is_real_list x = foldr1 min_pair (map min_list x), is_list x = min x; } maxpos x = oo_unary_function maxpos_op x, is_class x = im_maxpos x, is_image x = maxpos_matrix x, is_matrix x = maxpos_list x, is_list x = error (_ "bad arguments to " ++ "maxpos") { maxpos_op = Operator "maxpos" maxpos Operator_type.COMPOUND false; maxpos_matrix m = (-1, -1), m == [[]] = (indexes?row, row) { max_value = max (Matrix m); indexes = map (index (equal max_value)) m; row = index (not_equal (-1)) indexes; } maxpos_list l = -1, l == [] = index (equal (max l)) l; } minpos x = oo_unary_function minpos_op x, is_class x = im_minpos x, is_image x = minpos_matrix x, is_matrix x = minpos_list x, is_list x = error (_ "bad arguments to " ++ "minpos") { minpos_op = Operator "minpos" minpos Operator_type.COMPOUND false; minpos_matrix m = (-1, -1), m == [[]] = (indexes?row, row) { min_value = min (Matrix m); indexes = map (index (equal min_value)) m; row = index (not_equal (-1)) indexes; } minpos_list l = -1, l == [] = index (equal (min l)) l; } stats x = oo_unary_function stats_op x, is_class x = im_stats x, is_image x = im_stats (to_image x).value, is_matrix x = error (_ "bad arguments to " ++ "stats") { stats_op = Operator "stats" stats Operator_type.COMPOUND false; } e = 2.7182818284590452354; pi = 3.14159265358979323846; rad d = 2 * pi * (d / 360); deg r = 360 * r / (2 * pi); sign x = oo_unary_function sign_op x, is_class x = im_sign x, is_image x = sign_cmplx x, is_complex x = sign_num x, is_real x = error (_ "bad arguments to " ++ "sign") { sign_op = Operator "sign" sign Operator_type.COMPOUND_REWRAP false; sign_num n = 0, n == 0 = 1, n > 0 = -1; sign_cmplx c = (0, 0), mod == 0 = (re c / mod, im c / mod) { mod = abs c; } } rint x = oo_unary_function rint_op x, is_class x = im_rint x, is_image x = rint_value x, is_number x = error (_ "bad arguments to " ++ "rint") { rint_op = Operator "rint" rint Operator_type.ARITHMETIC false; rint_value x = (int) (x + 0.5), x > 0 = (int) (x - 0.5); } scale x = oo_unary_function scale_op x, is_class x = (unsigned char) x, is_number x = im_scale x, is_image x = scale_list x, is_real_list x || is_matrix x = error (_ "bad arguments to " ++ "scale") { scale_op = Operator "scale" scale Operator_type.COMPOUND_REWRAP false; scale_list l = apply_scale s o l { mn = find_limit min_pair l; mx = find_limit max_pair l; s = 255.0 / (mx - mn); o = -(mn * s); } find_limit fn l = find_limit fn (map (find_limit fn) l), is_listof is_list l = foldr1 fn l; apply_scale s o x = x * s + o, is_number x = map (apply_scale s o) x; } scaleps x = oo_unary_function scale_op x, is_class x = im_scaleps x, is_image x = error (_ "bad arguments to " ++ "scale") { scale_op = Operator "scaleps" scaleps Operator_type.COMPOUND_REWRAP false; } fwfft x = oo_unary_function fwfft_op x, is_class x = im_fwfft x, is_image x = error (_ "bad arguments to " ++ "fwfft") { fwfft_op = Operator "fwfft" fwfft Operator_type.COMPOUND_REWRAP false; } invfft x = oo_unary_function invfft_op x, is_class x = im_invfftr x, is_image x = error (_ "bad arguments to " ++ "invfft") { invfft_op = Operator "invfft" invfft Operator_type.COMPOUND_REWRAP false; } falsecolour x = oo_unary_function falsecolour_op x, is_class x = image_set_type Image_type.sRGB (im_falsecolour x), is_image x = error (_ "bad arguments to " ++ "falsecolour") { falsecolour_op = Operator "falsecolour" falsecolour Operator_type.COMPOUND_REWRAP false; } polar x = oo_unary_function polar_op x, is_class x = im_c2amph x, is_image x = polar_cmplx x, is_complex x = error (_ "bad arguments to " ++ "polar") { polar_op = Operator "polar" polar Operator_type.COMPOUND false; polar_cmplx r = (l, a) { a = 270, x == 0 && y < 0 = 90, x == 0 && y >= 0 = 360 + atan (y / x), x > 0 && y < 0 = atan (y / x), x > 0 && y >= 0 = 180 + atan (y / x); l = (x ** 2 + y ** 2) ** 0.5; x = re r; y = im r; } } rectangular x = oo_unary_function rectangular_op x, is_class x = im_c2rect x, is_image x = rectangular_cmplx x, is_complex x = error (_ "bad arguments to " ++ "rectangular") { rectangular_op = Operator "rectangular" rectangular Operator_type.COMPOUND false; rectangular_cmplx p = (x, y) { l = re p; a = im p; x = l * cos a; y = l * sin a; } } // we can't use colour_unary: that likes 3 band only recomb matrix x = oo_unary_function recomb_op x, is_class x = im_recomb x matrix, is_image x = recomb_real_list x, is_real_list x = map recomb_real_list x, is_matrix x = error (_ "bad arguments to " ++ "recomb") { // COMPOUND_REWRAP ... signal to the colour class to go to image and // back recomb_op = Operator "recomb" (recomb matrix) Operator_type.COMPOUND_REWRAP false; // process [1,2,3 ..] as an image recomb_real_list l = (to_matrix im').value?0 { im = (float) (to_image (Vector l)).value; im' = recomb matrix im; } } extract_area x y w h obj = oo_unary_function extract_area_op obj, is_class obj = im_extract_area obj x' y' w' h', is_image obj = map (extract_range x' w') (extract_range y' h' obj), is_matrix obj = error (_ "bad arguments to " ++ "extract_area") { x' = to_real x; y' = to_real y; w' = to_real w; h' = to_real h; extract_area_op = Operator "extract_area" (extract_area x y w h) Operator_type.COMPOUND_REWRAP false; extract_range from length list = (take length @ drop from) list; } extract_band b obj = subscript obj b; extract_row y obj = oo_unary_function extract_row_op obj, is_class obj = extract_area 0 y' (get_width obj) 1 obj, is_image obj = [obj?y'], is_matrix obj = error (_ "bad arguments to " ++ "extract_row") { y' = to_real y; extract_row_op = Operator "extract_row" (extract_row y) Operator_type.COMPOUND_REWRAP false; } extract_column x obj = oo_unary_function extract_column_op obj, is_class obj = extract_area x' 0 1 height obj, is_image obj = map (\row [row?x']) obj, is_matrix obj = error (_ "bad arguments to " ++ "extract_column") { x' = to_real x; height = get_header "Ysize" obj; extract_column_op = Operator "extract_column" (extract_column x) Operator_type.COMPOUND_REWRAP false; } blend cond in1 in2 = oo_binary_function blend_op cond [in1,in2], is_class cond = im_blend (get_image cond) (get_image in1) (get_image in2), has_image cond && has_image in1 && has_image in2 = error (_ "bad arguments to " ++ "blend" ++ ": " ++ join_sep ", " (map print [cond, in1, in2])) { blend_op = Operator "blend" blend_obj Operator_type.COMPOUND_REWRAP false; blend_obj cond x = blend_result_image { [then_part, else_part] = x; // get things about our output from inputs in this order objects = [then_part, else_part, cond]; // properties of our output image target_width = get_member_list has_width get_width objects; target_height = get_member_list has_height get_height objects; target_bands = get_member_list has_bands get_bands objects; target_format = get_member_list has_format get_format objects; target_type = get_member_list has_type get_type objects; to_image x = to_image_size target_width target_height target_bands target_format x; [then_image, else_image] = map to_image [then_part, else_part]; blend_result_image = image_set_type target_type (im_blend cond then_image else_image); } } // do big first: we want to keep big's class, if possible // eg. big is a Plot, small is a 1x1 Image insert x y small big = oo_binary'_function insert_op small big, is_class big = oo_binary_function insert_op small big, is_class small = im_insert big small (to_real x) (to_real y), is_image small && is_image big = error (_ "bad arguments to " ++ "insert") { insert_op = Operator "insert" (insert x y) Operator_type.COMPOUND_REWRAP false; } insert_noexpand x y small big = oo_binary_function insert_noexpand_op small big, is_class small = oo_binary'_function insert_noexpand_op small big, is_class big = im_insert_noexpand big small (to_real x) (to_real y), is_image small && is_image big = error (_ "bad arguments to " ++ "insert_noexpand") { insert_noexpand_op = Operator "insert_noexpand" (insert_noexpand x y) Operator_type.COMPOUND_REWRAP false; } decode im = oo_unary_function decode_op im, is_class im = decode_im im, is_image im = error (_ "bad arguments to " ++ "decode") { decode_op = Operator "decode" decode Operator_type.COMPOUND_REWRAP false; decode_im im = im_LabQ2Lab im, get_coding im == Image_coding.LABPACK = im_rad2float im, get_coding im == Image_coding.RAD = im; } measure_draw across down measure image = mark { patch_width = image.width / across; sample_width = patch_width * (measure / 100); left_margin = (patch_width - sample_width) / 2; patch_height = image.height / down; sample_height = patch_height * (measure / 100); top_margin = (patch_height - sample_height) / 2; cods = [[x * patch_width + left_margin, y * patch_height + top_margin] :: y <- [0 .. down - 1]; x <- [0 .. across - 1]]; x = map (extract 0) cods; y = map (extract 1) cods; outer = mkim [$pixel => 255] sample_width sample_height 1; inner = mkim [] (sample_width - 4) (sample_height - 4) 1; patch = insert 2 2 inner outer; bg = mkim [] image.width image.height 1; mask = Image (im_insertset bg.value patch.value x y); image' = colour_transform_to Image_type.sRGB image; mark = if mask then Vector [0, 255, 0] else image'; } measure_sample across down measure image = measures { patch_width = image.width / across; sample_width = patch_width * (measure / 100); left_margin = (patch_width - sample_width) / 2; patch_height = image.height / down; sample_height = patch_height * (measure / 100); top_margin = (patch_height - sample_height) / 2; cods = [[x * patch_width + left_margin, y * patch_height + top_margin] :: y <- [0 .. down - 1]; x <- [0 .. across - 1]]; image' = decode image; patches = map (\p extract_area p?0 p?1 sample_width sample_height image') cods; measures = Matrix (map (map mean) (map bandsplit patches)); } extract_bands b n obj = oo_unary_function extract_bands_op obj, is_class obj = im_extract_bands obj (to_real b) (to_real n), is_image obj = error (_ "bad arguments to " ++ "extract_bands") { extract_bands_op = Operator "extract_bands" (extract_bands b n) Operator_type.COMPOUND_REWRAP false; } invert x = oo_unary_function invert_op x, is_class x = im_invert x, is_image x = 255 - x, is_real x = error (_ "bad arguments to " ++ "invert") { invert_op = Operator "invert" invert Operator_type.COMPOUND false; } transform ipol wrap params image = oo_unary_function transform_op image, is_class image = im_transform image (to_matrix params) (to_real ipol) (to_real wrap), is_image image = error (_ "bad arguments to " ++ "transform") { transform_op = Operator "transform" (transform ipol wrap params) Operator_type.COMPOUND_REWRAP false; } transform_search max_error max_iterations order ipol wrap sample reference = oo_binary_function transform_search_op sample reference, is_class sample = oo_binary'_function transform_search_op sample reference, is_class reference = im_transform_search sample reference (to_real max_error) (to_real max_iterations) (to_real order) (to_real ipol) (to_real wrap), is_image sample && is_image reference = error (_ "bad arguments to " ++ "transform_search") { transform_search_op = Operator "transform_search" (transform_search max_error max_iterations order ipol wrap) Operator_type.COMPOUND false; } rotate interp angle image = oo_binary_function rotate_op angle image, is_class angle = oo_binary'_function rotate_op angle image, is_class image = im_affinei_all image interp.value a (-b) b a 0 0, is_real angle && is_image image = error (_ "bad arguments to " ++ "rotate") { rotate_op = Operator "rotate" (rotate interp) Operator_type.COMPOUND_REWRAP false; a = cos angle; b = sin angle; } matrix_binary fn a b = itom (fn (mtoi a) (mtoi b)) { mtoi x = im_mask2vips (Matrix x); itom x = (im_vips2mask x).value; } join_lr a b = oo_binary_function join_lr_op a b, is_class a = oo_binary'_function join_lr_op a b, is_class b = join_im a b, is_image a && is_image b = matrix_binary join_im a b, is_matrix a && is_matrix b = error (_ "bad arguments to " ++ "join_lr") { join_lr_op = Operator "join_lr" join_lr Operator_type.COMPOUND_REWRAP false; join_im a b = insert (get_width a) 0 b a; } join_tb a b = oo_binary_function join_tb_op a b, is_class a = oo_binary'_function join_tb_op a b, is_class b = join_im a b, is_image a && is_image b = matrix_binary join_im a b, is_matrix a && is_matrix b = error (_ "bad arguments to " ++ "join_tb") { join_tb_op = Operator "join_tb" join_tb Operator_type.COMPOUND_REWRAP false; join_im a b = insert 0 (get_height a) b a; } conj x = oo_unary_function conj_op x, is_class x = (re x, -im x), is_complex x || (is_image x && format == Image_format.COMPLEX) || (is_image x && format == Image_format.DPCOMPLEX) // assume it's some sort of real = x { format = get_header "BandFmt" x; conj_op = Operator "conj" conj Operator_type.COMPOUND false; } clip2fmt format image = oo_unary_function clip2fmt_op image, is_class image = im_clip2fmt image (to_real format), is_image image = error (_ "bad arguments to " ++ "clip2fmt") { clip2fmt_op = Operator "clip2fmt" (clip2fmt format) Operator_type.COMPOUND_REWRAP false; } embed type x y w h im = oo_unary_function embed_op im, is_class im = im_embed im (to_real type) (to_real x) (to_real y) (to_real w) (to_real h), is_image im = error (_ "bad arguments to " ++ "embed") { embed_op = Operator "embed" (embed type x y w h) Operator_type.COMPOUND_REWRAP false; } /* Morph a mask with a [[real]] matrix ... turn m2 into an image, morph it * with m1, turn it back to a matrix again. */ _morph_2_masks fn m1 m2 = m'' { // The [[real]] can contain 128 values ... squeeze them out! image = im_mask2vips (Matrix m2) == 255; m2_width = get_width image; m2_height = get_height image; // need to embed m2 in an image large enough for us to be able to // position m1 all around the edges, with a 1 pixel overlap image' = embed 0 (m1.width / 2) (m1.height / 2) (m2_width + (m1.width - 1)) (m2_height + (m1.height - 1)) image; // morph! image'' = fn m1 image'; // back to mask m' = im_vips2mask ((double) image''); // Turn 0 in output to 128 (don't care). m'' = map (map fn) m'.value { fn a = 128, a == 0; = a; } } dilate mask image = oo_unary_function dilate_op image, is_class image = im_dilate image (to_matrix mask), is_image image = error (_ "bad arguments to " ++ "dilate") { dilate_op = Operator "dilate" dilate_object Operator_type.COMPOUND_REWRAP false; dilate_object x = _morph_2_masks dilate mask x, is_matrix x = dilate mask x; } erode mask image = oo_unary_function erode_op image, is_class image = im_erode image (to_matrix mask), is_image image = error (_ "bad arguments to " ++ "erode") { erode_op = Operator "erode" erode_object Operator_type.COMPOUND_REWRAP false; erode_object x = _morph_2_masks erode mask x, is_matrix x = erode mask x; } conv mask image = oo_unary_function conv_op image, is_class image = im_conv image (to_matrix mask), is_image image = error (_ "bad arguments to " ++ "conv" ++ ": " ++ "conv (" ++ print mask ++ ") (" ++ print image ++ ")") { conv_op = Operator "conv" (conv mask) Operator_type.COMPOUND_REWRAP false; } convf mask image = oo_unary_function convf_op image, is_class image = im_conv_f image (to_matrix mask), is_image image = error (_ "bad arguments to " ++ "convf" ++ ": " ++ "convf (" ++ print mask ++ ") (" ++ print image ++ ")") { convf_op = Operator "convf" (convf mask) Operator_type.COMPOUND_REWRAP false; } convsep mask image = oo_unary_function convsep_op image, is_class image = im_convsep image (to_matrix mask), is_image image = error (_ "bad arguments to " ++ "convsep") { convsep_op = Operator "convsep" (convsep mask) Operator_type.COMPOUND_REWRAP false; } aconvsep layers mask image = oo_unary_function aconvsep_op image, is_class image = im_aconvsep image (to_matrix mask) (to_real layers), is_image image = error (_ "bad arguments to " ++ "aconvsep") { aconvsep_op = Operator "aconvsep" (aconvsep layers mask) Operator_type.COMPOUND_REWRAP false; } convsepf mask image = oo_unary_function convsepf_op image, is_class image = im_convsep_f image (to_matrix mask), is_image image = error (_ "bad arguments to " ++ "convsepf") { convsepf_op = Operator "convsepf" (convsepf mask) Operator_type.COMPOUND_REWRAP false; } rank w h n image = oo_unary_function rank_op image, is_class image = im_rank image (to_real w) (to_real h) (to_real n), is_image image = error (_ "bad arguments to " ++ "rank") { rank_op = Operator "rank" (rank w h n) Operator_type.COMPOUND_REWRAP false; } rank_image n x = rlist x.value, is_Group x = rlist x, is_list x = error (_ "bad arguments to " ++ "rank_image") { rlist l = wrapper ranked, has_wrapper = ranked { has_wrapper = has_member_list (has_member "Image") l; wrapper = get_member_list (has_member "Image") (get_member "Image") l; ranked = im_rank_image (map get_image l) (to_real n); } } // find the correlation surface for a small image within a big one correlate small big = oo_binary_function correlate_op small big, is_class small = oo_binary'_function correlate_op small big, is_class big = im_spcor big small, is_image small && is_image big = error (_ "bad arguments to " ++ "correlate") { correlate_op = Operator "correlate" correlate Operator_type.COMPOUND_REWRAP false; } // just sum-of-squares-of-differences correlate_fast small big = oo_binary_function correlate_fast_op small big, is_class small = oo_binary'_function correlate_fast_op small big, is_class big = im_fastcor big small, is_image small && is_image big = error (_ "bad arguments to " ++ "correlate_fast") { correlate_fast_op = Operator "correlate_fast" correlate_fast Operator_type.COMPOUND_REWRAP false; } // set Type, wrap as Plot_hist if it's a class hist_tag x = oo_unary_function hist_tag_op x, is_class x = image_set_type Image_type.HISTOGRAM x, is_image x = error (_ "bad arguments to " ++ "hist_tag") { hist_tag_op = Operator "hist_tag" (Plot_histogram @ hist_tag) Operator_type.COMPOUND false; } hist_find x = oo_unary_function hist_find_op x, is_class x = im_histgr x (-1), is_image x = error (_ "bad arguments to " ++ "hist_find") { hist_find_op = Operator "hist_find" (Plot_histogram @ hist_find) Operator_type.COMPOUND false; } hist_find_nD bins image = oo_unary_function hist_find_nD_op image, is_class image = im_histnD image (to_real bins), is_image image = error (_ "bad arguments to " ++ "hist_find_nD") { hist_find_nD_op = Operator "hist_find_nD" (hist_find_nD bins) Operator_type.COMPOUND_REWRAP false; } hist_find_indexed index value = oo_binary_function hist_find_indexed_op index value, is_class index = oo_binary'_function hist_find_indexed_op index value, is_class value = im_hist_indexed index value, is_image index && is_image value = error (_ "bad arguments to " ++ "hist_find_indexed") { hist_find_indexed_op = Operator "hist_find_indexed" (compose (compose Plot_histogram) hist_find_indexed) Operator_type.COMPOUND false; } hist_map hist image = oo_binary_function hist_map_op hist image, is_class hist = oo_binary'_function hist_map_op hist image, is_class image = im_maplut image hist, is_image hist && is_image image = error (_ "bad arguments to " ++ "hist_map") { // can't use rewrap, as we want to always wrap as image hist_map_op = Operator "hist_map" (compose (compose Image) hist_map) Operator_type.COMPOUND false; } hist_cum hist = oo_unary_function hist_cum_op hist, is_class hist = im_histcum hist, is_image hist = error (_ "bad arguments to " ++ "hist_cum") { hist_cum_op = Operator "hist_cum" hist_cum Operator_type.COMPOUND_REWRAP false; } hist_diff hist = oo_unary_function hist_diff_op hist, is_class hist = im_histdiff hist, is_image hist = error (_ "bad arguments to " ++ "hist_diff") { hist_diff_op = Operator "hist_diff" hist_diff Operator_type.COMPOUND_REWRAP false; im_histdiff h = (conv (Matrix [[-1, 1]]) @ clip2fmt (fmt (get_format h))) h { // up the format so it can represent the whole range of // possible values from this mask fmt x = Image_format.SHORT, x == Image_format.UCHAR || x == Image_format.CHAR = Image_format.INT, x == Image_format.USHORT || x == Image_format.SHORT || x == Image_format.UINT = x; } } hist_norm hist = oo_unary_function hist_norm_op hist, is_class hist = im_histnorm hist, is_image hist = error (_ "bad arguments to " ++ "hist_norm") { hist_norm_op = Operator "hist_norm" hist_norm Operator_type.COMPOUND_REWRAP false; } hist_inv hist = oo_unary_function hist_inv_op hist, is_class hist = inv hist, is_image hist = error (_ "bad arguments to " ++ "hist_inv") { hist_inv_op = Operator "hist_inv" hist_inv Operator_type.COMPOUND_REWRAP false; inv im = im_invertlut (to_matrix im''') len { // need a vertical doublemask im' = rot90 im, get_width im > 1 && get_height im == 1 = im, get_width im == 1 && get_height im > 1 = error (_ "not a hist"); len = get_height im'; // values must be scaled to 0 - 1 im'' = im' / (max im'); // add an index column on the left // again, must be in 0-1 y = ((make_xy 1 len)?1) / len; im''' = y ++ im''; } } hist_match in ref = oo_binary_function hist_match_op in ref, is_class in = oo_binary'_function hist_match_op in ref, is_class ref = im_histspec in ref, is_image in && is_image ref = error (_ "bad arguments to " ++ "hist_match") { hist_match_op = Operator "hist_match" hist_match Operator_type.COMPOUND_REWRAP false; } hist_equalize x = hist_map ((hist_norm @ hist_cum @ hist_find) x) x; hist_equalize_local w h image = oo_unary_function hist_equalize_local_op image, is_class image = lhisteq image, is_image image = error (_ "bad arguments to " ++ "hist_equalize_local") { hist_equalize_local_op = Operator "hist_equalize_local" (hist_equalize_local w h) Operator_type.COMPOUND_REWRAP false; // loop over bands, if necessary lhisteq im = im_lhisteq im (to_real w) (to_real h), get_bands im == 1 = (foldl1 join @ map lhisteq @ bandsplit) im; } // find the threshold below which are percent of the image (percent in [0,1]) // eg. hist_thresh 0.1 x == 12, then x < 12 will light up 10% of the pixels hist_thresh percent image = x { // our own normaliser ... we don't want to norm channels separately // norm to [0,1] my_hist_norm h = h / max h; // normalised cumulative hist // we sum the channels before we normalise, because we want to treat them // all the same h = (my_hist_norm @ sum @ bandsplit @ hist_cum @ hist_find) image.value; // threshold that, then use im_profile to search for the x position in the // histogram x = mean (im_profile (h > percent) 1); } /* Sometimes useful, despite plotting now being built in, for making * diagnostic images. */ hist_plot hist = oo_unary_function hist_plot_op hist, is_class hist = im_histplot hist, is_image hist = error (_ "bad arguments to " ++ "hist_plot") { hist_plot_op = Operator "hist_plot" (Image @ hist_plot) Operator_type.COMPOUND false; } zerox d x = oo_unary_function zerox_op x, is_class x = im_zerox x (to_real d), is_image x = error (_ "bad arguments to " ++ "zerox") { zerox_op = Operator "zerox" (zerox d) Operator_type.COMPOUND_REWRAP false; } reduce kernel xshr yshr image = oo_unary_function reduce_op image, is_class image = reduce_im image, is_image image = error (_ "bad arguments to " ++ "reduce") { reduce_op = Operator "reduce" reduce_im Operator_type.COMPOUND_REWRAP false; reduce_im im = out { [out] = vips_call "reduce" [im, xshr, yshr] [$kernel => kernel.value]; } } similarity interpolate scale angle image = oo_unary_function similarity_op image, is_class image = similarity_im image, is_image image = error (_ "bad arguments to " ++ "similarity") { similarity_op = Operator "similarity" similarity_im Operator_type.COMPOUND_REWRAP false; similarity_im im = out { [out] = vips_call "similarity" [im] [ $interpolate => interpolate.value, $scale => scale, $angle => angle ]; } } resize kernel xfac yfac image = oo_unary_function resize_op image, is_class image = resize_im image, is_image image = error (_ "bad arguments to " ++ "resize") { resize_op = Operator "resize" resize_im Operator_type.COMPOUND_REWRAP false; xfac' = to_real xfac; yfac' = to_real yfac; rxfac' = 1 / xfac'; ryfac' = 1 / yfac'; is_nn = kernel.type == Kernel_type.NEAREST_NEIGHBOUR; resize_im im // upscale by integer factor, nearest neighbour = im_zoom im xfac' yfac', is_int xfac' && is_int yfac' && xfac' >= 1 && yfac' >= 1 && is_nn // downscale by integer factor, nearest neighbour = im_subsample im rxfac' ryfac', is_int rxfac' && is_int ryfac' && rxfac' >= 1 && ryfac' >= 1 && is_nn // everything else ... we just pass on to vips_resize() = vips_resize kernel xfac' yfac' im { vips_resize kernel hscale vscale im = out { [out] = vips_call "resize" [im, hscale] [$vscale => vscale, $kernel => kernel.value]; } } } sharpen radius x1 y2 y3 m1 m2 in = oo_unary_function sharpen_op in, is_class in = im_sharpen in (to_real radius) (to_real x1) (to_real y2) (to_real y3) (to_real m1) (to_real m2), is_image in = error (_ "bad arguments to " ++ "sharpen") { sharpen_op = Operator "sharpen" (sharpen radius x1 y2 y3 m1 m2) Operator_type.COMPOUND_REWRAP false; } tone_analyse s m h sa ma ha in = oo_unary_function tone_analyse_op in, is_class in = im_tone_analyse in (to_real s) (to_real m) (to_real h) (to_real sa) (to_real ma) (to_real ha), is_image in = error (_ "bad arguments to " ++ "tone_analyse") { tone_analyse_op = Operator "tone_analyse" (Plot_histogram @ tone_analyse s m h sa ma ha) Operator_type.COMPOUND false; } tone_map hist image = oo_binary_function tone_map_op hist image, is_class hist = oo_binary'_function tone_map_op hist image, is_class image = im_tone_map image hist, is_image hist && is_image image = error (_ "bad arguments to " ++ "tone_map") { tone_map_op = Operator "tone_map" tone_map Operator_type.COMPOUND_REWRAP false; } tone_build fmt b w s m h sa ma ha = (Plot_histogram @ clip2fmt fmt) (im_tone_build_range mx mx (to_real b) (to_real w) (to_real s) (to_real m) (to_real h) (to_real sa) (to_real ma) (to_real ha)) { mx = Image_format.maxval fmt; } icc_export depth profile intent in = oo_unary_function icc_export_op in, is_class in = im_icc_export_depth in (to_real depth) (expand profile) (to_real intent), is_image in = error (_ "bad arguments to " ++ "icc_export") { icc_export_op = Operator "icc_export" (icc_export depth profile intent) Operator_type.COMPOUND_REWRAP false; } icc_import profile intent in = oo_unary_function icc_import_op in, is_class in = im_icc_import in (expand profile) (to_real intent), is_image in = error (_ "bad arguments to " ++ "icc_import") { icc_import_op = Operator "icc_import" (icc_import profile intent) Operator_type.COMPOUND_REWRAP false; } icc_import_embedded intent in = oo_unary_function icc_import_embedded_op in, is_class in = im_icc_import_embedded in (to_real intent), is_image in = error (_ "bad arguments to " ++ "icc_import_embedded") { icc_import_embedded_op = Operator "icc_import_embedded" (icc_import_embedded intent) Operator_type.COMPOUND_REWRAP false; } icc_transform in_profile out_profile intent in = oo_unary_function icc_transform_op in, is_class in = im_icc_transform in (expand in_profile) (expand out_profile) (to_real intent), is_image in = error (_ "bad arguments to " ++ "icc_transform") { icc_transform_op = Operator "icc_transform" (icc_transform in_profile out_profile intent) Operator_type.COMPOUND_REWRAP false; } icc_ac2rc profile in = oo_unary_function icc_ac2rc_op in, is_class in = im_icc_ac2rc in (expand profile), is_image in = error (_ "bad arguments to " ++ "icc_ac2rc") { icc_ac2rc_op = Operator "icc_ac2rc" (icc_ac2rc profile) Operator_type.COMPOUND_REWRAP false; } // Given a xywh rect, flip it around so wh are always positive rect_normalise x y w h = [x', y', w', h'] { x' = x + w, w < 0 = x; y' = y + h, h < 0 = y; w' = abs w; h' = abs h; } draw_flood_blob x y ink image = oo_unary_function draw_flood_blob_op image, is_class image = im_draw_flood_blob image (to_real x) (to_real y) ink, is_image image = error (_ "bad arguments to " ++ "draw_flood_blob") { draw_flood_blob_op = Operator "draw_flood_blob" (draw_flood_blob x y ink) Operator_type.COMPOUND_REWRAP false; } draw_flood x y ink image = oo_unary_function draw_flood_op image, is_class image = im_draw_flood image (to_real x) (to_real y) ink, is_image image = error (_ "bad arguments to " ++ "draw_flood") { draw_flood_op = Operator "draw_flood" (draw_flood x y ink) Operator_type.COMPOUND_REWRAP false; } /* This version of draw_rect uses insert_noexpand and will be fast, even for * huge images. */ draw_rect_width x y w h f t ink image = oo_unary_function draw_rect_width_op image, is_class image = my_draw_rect_width image (to_int x) (to_int y) (to_int w) (to_int h) (to_int f) (to_int t) ink, is_image image = error (_ "bad arguments to " ++ "draw_rect_width") { draw_rect_width_op = Operator "draw_rect_width" (draw_rect_width x y w h f t ink) Operator_type.COMPOUND_REWRAP false; my_draw_rect_width image x y w h f t ink = insert x' y' (block w' h') image, f == 1 = (insert x' y' (block w' t) @ insert (x' + w' - t) y' (block t h') @ insert x' (y' + h' - t) (block w' t) @ insert x' y' (block t h')) image { insert = insert_noexpand; block w h = image_new w h (get_bands image) (get_format image) (get_coding image) (get_type image) ink' 0 0; ink' = Vector ink, is_list ink = ink; [x', y', w', h'] = rect_normalise x y w h; } } /* Default to 1 pixel wide edges. */ draw_rect x y w h f ink image = draw_rect_width x y w h f 1 ink image; /* This version of draw_rect uses the paintbox rect draw operation. It is an * inplace operation and will use bucketloads of memory. */ draw_rect_paintbox x y w h f ink image = oo_unary_function draw_rect_op image, is_class image = im_draw_rect image (to_real x) (to_real y) (to_real w) (to_real h) (to_real f) ink, is_image image = error (_ "bad arguments to " ++ "draw_rect_paintbox") { draw_rect_op = Operator "draw_rect" (draw_rect x y w h f ink) Operator_type.COMPOUND_REWRAP false; } draw_circle x y r f ink image = oo_unary_function draw_circle_op image, is_class image = im_draw_circle image (to_real x) (to_real y) (to_real r) (to_real f) ink, is_image image = error (_ "bad arguments to " ++ "draw_circle") { draw_circle_op = Operator "draw_circle" (draw_circle x y r f ink) Operator_type.COMPOUND_REWRAP false; } draw_line x1 y1 x2 y2 ink image = oo_unary_function draw_line_op image, is_class image = im_draw_line image (to_real x1) (to_real y1) (to_real x2) (to_real y2) ink, is_image image = error (_ "bad arguments to " ++ "draw_line") { draw_line_op = Operator "draw_line" (draw_line x1 y1 x2 y2 ink) Operator_type.COMPOUND_REWRAP false; } print_base base in = oo_unary_function print_base_op in, is_class in = map (print_base base) in, is_list in = print_base_real, is_real in = error (_ "bad arguments to " ++ "print_base") { print_base_op = Operator "print_base" (print_base base) Operator_type.COMPOUND false; print_base_real = error "print_base: bad base", base < 2 || base > 16 = "0", in < 0 || chars == [] = reverse chars { digits = map (\x x % base) (takewhile (not_equal 0) (iterate (\x idivide x base) in)); chars = map tohd digits; tohd x = (char) ((int) '0' + x), x < 10 = (char) ((int) 'A' + (x - 10)); } } /* id x: the identity function * * id :: * -> * */ id x = x; /* const x y: junk y, return x * * (const 3) is the function that always returns 3. * const :: * -> ** -> * */ const x y = x; /* converse fn a b: swap order of args to fn * * converse fn a b == fn b a * converse :: (* -> ** -> ***) -> ** -> * -> *** */ converse fn a b = fn b a; /* fix fn x: find the fixed point of a function */ fix fn x = limit (iterate fn x); /* until pred fn n: apply fn to n until pred succeeds; return that value * * until (more 1000) (multiply 2) 1 = 1024 * until :: (* -> bool) -> (* -> *) -> * -> * */ until pred fn n = n, pred n = until pred fn (fn n); /* Infinite list of primes. */ primes = 1 : (sieve [2 ..]) { sieve l = hd l : sieve (filter (nmultiple (hd l)) (tl l)); nmultiple n x = x / n != (int) (x / n); } /* Map an n-ary function (pass the args as a list) over groups of objects. * The objects can be single objects or groups. If more than one * object is a group, we iterate for the length of the smallest group. * Don't loop over plain lists, since we want (eg.) "mean [1, 2, 3]" to work. * Treat [] as no-value --- ie. if any of the inputs are [] we put [] into the * output and don't apply the function. copy-pasted into _types, keep in sync */ map_nary fn args = fn args, groups == [] = Group (map process [0, 1 .. shortest - 1]) { // find all the group arguments groups = filter is_Group args; // what's the length of the shortest group arg? shortest = foldr1 min_pair (map (len @ get_value) groups); // process index n ... pull that member from each argument // recurse to handle application, so we work for nested groups too process n = NULL, any (map (is_noval n) args) = map_nary fn (map (extract n) args) { extract n arg = arg.value?n, is_Group arg = arg; is_noval n arg = is_Group arg && arg.value?n == NULL; } } /* Map a 1-ary function over an object. */ map_unary fn a = map_nary (list_1ary fn) [a]; /* Map a 2-ary function over a pair of objects. */ map_binary fn a b = map_nary (list_2ary fn) [a, b]; /* Map a 3-ary function over three objects. */ map_trinary fn a b c = map_nary (list_3ary fn) [a, b, c]; /* Map a 4-ary function over three objects. */ map_quaternary fn a b c d = map_nary (list_4ary fn) [a, b, c, d]; /* Same as map_nary, but for lists. Handy for (eg.) implementing arith ops on * vectors and matricies. */ map_nary_list fn args = fn args, lists == [] = map process [0, 1 .. shortest - 1] { // find all the list arguments lists = filter is_list args; // what's the length of the shortest list arg? shortest = foldr1 min_pair (map len lists); // process index n ... pull that member from each argument // recurse to handle application, so we work for nested lists too process n = map_nary_list fn (map (extract n) args) { extract n arg = arg?n, is_list arg = arg; } } map_unaryl fn a = map_nary_list (list_1ary fn) [a]; map_binaryl fn a b = map_nary_list (list_2ary fn) [a, b]; /* Remove features smaller than x pixels across from an image. This used to be * rather complex ... convsep is now good enough to use. */ smooth x image = convsep (matrix_gaussian_blur (to_real x * 2)) image; /* Chop up an image into a list of lists of smaller images. Pad edges with * black. */ imagearray_chop tile_width tile_height hoverlap voverlap i = map chop' [0, vstep .. last_y] { width = get_width i; height = get_height i; bands = get_bands i; format = get_format i; type = get_type i; tile_width' = to_real tile_width; tile_height' = to_real tile_height; hoverlap' = to_real hoverlap; voverlap' = to_real voverlap; /* Unique pixels per tile. */ hstep = tile_width' - hoverlap'; vstep = tile_height' - voverlap'; /* Number of tiles across and down. Remember the case where width == * hstep. */ across = (int) ((width - 1) / hstep) + 1; down = (int) ((height - 1) / vstep) + 1; /* top/left of final tile. */ last_x = hstep * (across - 1); last_y = vstep * (down - 1); /* How much do we need to pad by? */ sx = last_x + tile_width'; sy = last_y + tile_height'; /* Expand image with black to pad size. */ pad = embed 0 0 0 sx sy i; /* Chop up a row. */ chop' y = map chop'' [0, hstep .. last_x] { chop'' x = extract_area x y tile_width' tile_height' pad; } } /* Reassemble image. */ imagearray_assemble hoverlap voverlap il = (image_set_origin 0 0 @ foldl1 tbj @ map (foldl1 lrj)) il { lrj l r = insert (get_width l + hoverlap) 0 r l; tbj t b = insert 0 (get_height t + voverlap) b t; } /* Generate an nxn identity matrix. */ identity_matrix n = error "identity_matrix: n > 0", n < 1 = map line [0 .. n - 1] { line p = take p [0, 0 ..] ++ [1] ++ take (n - p - 1) [0, 0 ..]; } /* Incomplete gamma function Q(a, x) == 1 - P(a, x) FIXME ... this is now a builtin, until we can get a nice List class (requires overloadable ':') gammq a x = error "bad args", x < 0 || a <= 0 = 1 - gamser, x < a + 1 = gammcf { gamser = (gser a x)?0; gammcf = (gcf a x)?0; } */ /* Incomplete gamma function P(a, x) evaluated as series representation. Also * return ln(gamma(a)) ... nr in c, pp 218 */ gser a x = [gamser, gln] { gln = gammln a; gamser = error "bad args", x < 0 = 0, x == 0 = 1 // fix this { // maximum iterations maxit = 100; ap = List [a + 1, a + 2 ...]; xoap = x / ap; del = map product (prefixes xoap.value); /* del = map (multiply (1 / a)) (map product (prefixes xoap)) del = xap = iterate (multiply */ /* Generate all prefixes of a list ... [1,2,3] -> [[1], [1, 2], [1, 2, * 3], [1, 2, 3, 4] ...] */ prefixes l = map (converse take l) [1..]; } } /* ln(gamma(xx)) ... nr in c, pp 214 */ gammln xx = gln { cof = [76.18009172947146, -86.50532032941677, 24.01409824083091, -1.231739572450155, 0.1208650973866179e-2, -0.5395239384953e-5]; y = take 6 (iterate (add 1) (xx + 1)); ser = 1.000000000190015 + sum (map2 divide cof y); tmp = xx + 0.5; tmp' = tmp - ((xx + 0.5) * log tmp); gln = -tmp + log (2.5066282746310005 * ser / xx); } /* make a LUT from a scatter */ buildlut x = Plot_histogram (im_buildlut x), is_Matrix x && x.width > 1 = im_buildlut (Matrix x), is_matrix x && is_list_len_more 1 x?0 = error (_ "bad arguments to " ++ "buildlut"); /* Linear regression. Return a class with the stuff we need in. * from s15.2, p 665 NR in C * * Also calculate R2, see eg.: * https://en.wikipedia.org/wiki/Coefficient_of_determination */ linreg xes yes = obj { obj = class { // in case we ever get shown in the workspace _vislevel = 2; slope = sum [t * y :: [t, y] <- zip2 tes yes] / st2; intercept = (sy - sx * slope) / ss; chi2 = sum [(y - intercept - slope * x) ** 2 :: [x, y] <- zip2 xes yes]; siga = (chi2 / (ss - 2)) ** 0.5 * ((1 + sx ** 2 / (ss * st2)) / ss) ** 0.5; sigb = (chi2 / (ss - 2)) ** 0.5 * (1 / st2) ** 0.5; // for compat with linregw, see below q = 1.0; R2 = 1 - chi2 / sum [(y - my) ** 2 :: y <- yes]; } ss = len xes; sx = sum xes; sy = sum yes; my = sy / ss; sxoss = sx / ss; tes = [x - sxoss :: x <- xes]; st2 = sum [t ** 2 :: t <- tes]; } /* Weighted linear regression. Xes, yes and a list of deviations. */ linregw xes yes devs = obj { obj = class { // in case we ever get shown in the workspace _vislevel = 2; slope = sum [(t * y) / sd :: [t, y, sd] <- zip3 tes yes devs] / st2; intercept = (sy - sx * slope) / ss; chi2 = sum [((y - intercept - slope * x) / sd) ** 2 :: [x, y, sd] <- zip3 xes yes devs]; siga = ((1 + sx * sx / (ss * st2)) / ss) ** 0.5; sigb = (1 / st2) ** 0.5; q = gammq (0.5 * (len xes - 2)) (0.5 * chi2); R2 = 1 - chi2 / sum [(y - my) ** 2 :: y <- yes]; } wt = [sd ** -0.5 :: sd <- devs]; ss = sum wt; sx = sum [x * w :: [x, w] <- zip2 xes wt]; sy = sum [y * w :: [y, w] <- zip2 yes wt]; my = sy / len xes; sxoss = sx / ss; tes = [(x - sxoss) / sd :: [x, sd] <- zip2 xes devs]; st2 = sum [t ** 2 :: t <- tes]; } /* Clustering: pass in a list of points, repeatedly merge the * closest two points until no two points are closer than the threshold. * Return [merged-points, corresponding-weights]. A weight is a list of the * indexes we merged to make that point, ie. len weight == how significant * this point is. * * eg. * cluster 12 [152,154,155,42,159] == * [[155,42],[[1,2,0,4],[3]]] */ cluster thresh points = oo_unary_function cluster_op points, is_class points // can't use [0..len points - 1], in case len points == 0 = merge [points, map (converse cons []) (take (len points) [0 ..])], is_list points = error (_ "bad arguments to " ++ "cluster") { cluster_op = Operator "cluster" (cluster thresh) Operator_type.COMPOUND false; merge x = x, m < 2 || d > thresh = merge [points', weights'] { [points, weights] = x; m = len points; // generate indexes of all possible pairs, avoiding comparing a thing // to itself, and assuming that dist is reflexive // first index is always less than 2nd index // the +1,+2 makes sure we have an increasing generator, otherwise we // can get [3 .. 4] (for example), which will make a decreasing // sequence pairs = [[x, y] :: x <- [0 .. m - 1]; y <- [x + 1, x + 2 .. m - 1]]; // distance function // arg is eg. [3,1], meaning get distance from point 3 to point 1 dist x = abs (points?i - points?j) { [i, j] = x; } // smallest distance, then the two points we merge p = minpos (map dist pairs); d = dist pairs?p; [i, j] = pairs?p; // new point and new weight nw = weights?i ++ weights?j; np = (points?i * len weights?i + points?j * len weights?j) / len nw; // remove element i from a list remove i l = take i l ++ drop (i + 1) l; // remove two old points, add the new merged one // i < j (see "pairs", above) points' = np : remove i (remove j points); weights' = nw : remove i (remove j weights); } } /* Extract the area of an image around an arrow. * Transform the image to make the arrow horizontal, then displace by hd and * vd pxels, then cut out a bit h pixels high centered on the arrow. */ extract_arrow hd vd h arrow = extract_area (re p' + hd) (im p' - h / 2 + vd) (re pv) h im' { // the line as a polar vector pv = polar (arrow.width, arrow.height); a = im pv; // smallest rotation that will make the line horizontal a' = 360 - a, a > 270 = 180 - a, a > 90 = -a; im' = rotate Interpolate_bilinear a' arrow.image; // look at the start and end of the arrow, pick the leftmost p = (arrow.left, arrow.top), arrow.left <= arrow.right = (arrow.right, arrow.bottom); // transform that point to im' space p' = rectangular (polar p + (0, a')) + (im'.xoffset, im'.yoffset); } /* You'd think these would go in _convert, but they are not really colour ops, * so put them here. */ rad2float image = oo_unary_function rad2float_op image, is_class image = im_rad2float image, is_image image = error (_ "bad arguments to " ++ "rad2float") { rad2float_op = Operator "rad2float" rad2float Operator_type.COMPOUND_REWRAP false; } float2rad image = oo_unary_function float2rad_op image, is_class image = im_float2rad image, is_image image = error (_ "bad arguments to " ++ "float2rad") { float2rad_op = Operator "float2rad" float2rad Operator_type.COMPOUND_REWRAP false; } segment x = oo_unary_function segment_op x, is_class x = image', is_image x = error (_ "bad arguments to " ++ "segment") { segment_op = Operator "segment" segment Operator_type.COMPOUND_REWRAP false; [image, nsegs] = im_segment x; image' = im_copy_set_meta image "n-segments" nsegs; } point a b = oo_binary_function point_op a b, is_class a = oo_binary'_function point_op a b, is_class b = im_read_point b x y, is_image b = [b?x?y], is_matrix b = [b?x], is_real_list b && y == 0 = [b?y], is_real_list b && x == 0 = error (_ "bad arguments to " ++ "point") { point_op = Operator "point" (\a\b Vector (point a b)) Operator_type.COMPOUND false; (x, y) = a, is_complex a; = (a?0, a?1), is_real_list a && is_list_len 2 a = error "bad position format"; } /* One image in, one out. */ system_image command x = oo_unary_function system_image_op x, is_class x = system x, is_image x = error (_ "bad arguments to " ++ "system_image") { system_image_op = Operator "system_image" (system_image command) Operator_type.COMPOUND_REWRAP false; system im = image_out { [image_out, log] = im_system_image (get_image im) "%s.tif" "%s.tif" command; } } /* Two images in, one out. */ system_image2 command x1 x2 = oo_binary_function system_image2_op x1 x2, is_class x1 = oo_binary'_function system_image2_op x1 x2, is_class x2 = system x1 x2, is_image x1 && is_image x2 = error (_ "bad arguments to " ++ "system_image2") { system_image2_op = Operator "system_image2" (system_image2 command) Operator_type.COMPOUND_REWRAP false; system x1 x2 = image_out { [image_out] = vips_call "system" [command] [ $in => [x1, x2], $out => true, $out_format => "%s.tif", $in_format => "%s.tif" ]; } } /* Three images in, one out. */ system_image3 command x1 x2 x3 = oo_binary_function system_image2_op x2 x3, is_class x2 = oo_binary'_function system_image2_op x2 x3, is_class x3 = system x1 x2 x3, is_image x1 && is_image x2 && is_image x3 = error (_ "bad arguments to " ++ "system_image3") { system_image2_op = Operator "system_image2" (system_image3 command x1) Operator_type.COMPOUND_REWRAP false; system x1 x2 x3 = image_out { [image_out] = vips_call "system" [command] [ $in => [x1, x2, x3], $out => true, $out_format => "%s.tif", $in_format => "%s.tif" ]; } } /* Zero images in, one out. */ system_image0 command = Image image_out { [image_out] = vips_call "system" [command] [ $out => true, $out_format => "%s.tif" ]; } hough_line w h x = oo_unary_function hough_line_op x, is_class x = hline (to_real w) (to_real h) x, is_image x = error (_ "bad arguments to " ++ "hough_line") { hough_line_op = Operator "hough_line" (hough_line w h) Operator_type.COMPOUND_REWRAP false; hline w h x = pspace { [pspace] = vips_call "hough_line" [x] [ $width => w, $height => h ]; } } hough_circle s mn mx x = oo_unary_function hough_circle_op x, is_class x = hcircle (to_real s) (to_real mn) (to_real mx) x, is_image x = error (_ "bad arguments to " ++ "hough_circle") { hough_circle_op = Operator "hough_circle" (hough_circle s mn mx) Operator_type.COMPOUND_REWRAP false; hcircle s mn mx x = pspace { [pspace] = vips_call "hough_circle" [x] [ $scale => s, $min_radius => mn, $max_radius => mx ]; } } mapim interp ind in = oo_binary_function mapim_op ind in, is_class ind = oo_binary'_function mapim_op ind in, is_class in = mapim_fn ind in, is_image ind && is_image in = error (_ "bad arguments to " ++ "mapim") { mapim_op = Operator "mapim" (mapim interp) Operator_type.COMPOUND_REWRAP false; mapim_fn ind im = out { [out] = vips_call "mapim" [im, ind] [$interpolate => interp]; } } nip2-8.7.0/share/nip2/compat/8.3/Preferences.ws0000644000175000017500000010177313224651032015707 00000000000000 nip2-8.7.0/share/nip2/compat/8.3/Filter.def0000644000175000017500000011730313224651032014774 00000000000000Filter_conv_item = class Menupullright "_Convolution" "various spatial convolution filters" { /* Some useful masks. */ filter_blur = Matrix_con 9 0 [[1, 1, 1], [1, 1, 1], [1, 1, 1]]; filter_sharp = Matrix_con 8 0 [[-1, -1, -1], [-1, 16, -1], [-1, -1, -1]]; filter_emboss = Matrix_con 1 128 [[-1, 0], [0, 1]]; filter_laplacian = Matrix_con 1 128 [[-1, -1, -1], [-1, 8, -1], [-1, -1, -1]]; filter_sobel = Matrix_con 1 128 [[1, 2, 1], [0, 0, 0], [-1, -2, -1]]; filter_lindet = Matrix_con 1 0 [[1, 1, 1], [-2, -2, -2], [1, 1, 1]]; Blur_item = class Menuaction "_Blur" "3x3 blur of image" { action x = map_unary (conv filter_blur) x; } Sharpen_item = class Menuaction "_Sharpen" "3x3 sharpen of image" { action x = map_unary (conv filter_sharp) x; } Emboss_item = class Menuaction "_Emboss" "1 pixel displace emboss" { action x = map_unary (conv filter_emboss) x; } Laplacian_item = class Menuaction "_Laplacian" "3x3 laplacian edge detect" { action x = map_unary (conv filter_laplacian) x; } Sobel_item = class Menuaction "So_bel" "3x3 Sobel edge detect" { action x = map_unary sobel x { sobel im = abs (a - 128) + abs (b - 128) { a = conv filter_sobel im; b = conv (rot270 filter_sobel) im; } } } /* 3x3 line detect of image diagonals should be scaled down by root(2) I guess Kirk */ Linedet_item = class Menuaction "Li_ne Detect" "3x3 line detect" { action x = map_unary lindet x { lindet im = foldr1 max_pair images { masks = take 4 (iterate rot45 filter_lindet); images = map (converse conv im) masks; } } } Usharp_item = class Menuaction "_Unsharp Mask" "cored sharpen of L only in LAB image" { action x = class _result { _vislevel = 3; size = Option "Radius" [ "3 pixels", "5 pixels", "7 pixels", "9 pixels", "11 pixels", "51 pixels" ] 0; st = Scale "Smoothness threshold" 0 5 2; bm = Scale "Brighten by at most" 1 50 10; dm = Scale "Darken by at most" 1 50 20; fs = Scale "Sharpen flat areas by" 0 5 0.5; js = Scale "Sharpen jaggy areas by" 0 5 1; _result = map_unary process x { process in = Image in''' { in' = colour_transform_to Image_type.LABS in.value; in'' = sharpen [3, 5, 7, 9, 11, 51]?size st bm dm fs js in'; in''' = colour_transform_to (get_type in) in''; } } } } sep1 = Menuseparator; Custom_blur_item = class Menuaction "Custom B_lur / Sharpen" "blur or sharpen with tuneable parameters" { action x = class _result { _vislevel = 3; type = Option "Type" ["Blur", "Sharpen"] 0; r = Scale "Radius" 1 100 1; fac = Scale "Amount" 0 1 1; layers = Scale "Layers" 1 100 10; shape = Option "Mask shape" [ "Square", "Gaussian" ] 0; prec = Option "Precision" ["Int", "Float", "Approximate"] 0; _result = map_unary process x { process in = clip2fmt blur.format proc { mask = matrix_blur r.value, shape.value == 0 = matrix_gaussian_blur r.value; blur = [convsep, convsepf, aconvsep layers]?prec mask in; proc = in + fac * (in - blur), type == 1 = blur * fac + in * (1 - fac); } } } } Custom_conv_item = class Menuaction "Custom C_onvolution" "convolution filter with tuneable parameters" { action x = class _result { _vislevel = 3; matrix = Matrix_con 1 0 [[0, 0, 0], [0, 1, 0], [0, 0, 0]]; separable = Toggle "Seperable convolution" false, matrix.width == 1 || matrix.height == 1 = false; type = Option "Convolution type" ["Int", "Float"] 0; rotate = Option "Rotate" [ "Don't rotate", "4 x 45 degrees", "8 x 45 degrees", "2 x 90 degrees" ] 0; _result = map_unary process x { process in = in.Image in' { conv_fn = im_lindetect, !separable && type == 0 && rotate == 1 = im_compass, !separable && type == 0 && rotate == 2 = im_gradient, !separable && type == 0 && rotate == 3 = im_conv, !separable && type == 0 = im_convsep, separable && type == 0 = im_conv_f, !separable && type == 1 = im_convsep_f, separable && type == 1 = error "boink!"; in' = conv_fn in.value matrix; } } } } } Filter_rank_item = class Menupullright "_Rank" "various rank filters" { Median_item = class Menuaction "_Median" "3x3 median rank filter" { action x = map_unary (rank 3 3 4) x; } Image_rank_item = class Menuaction "_Image Rank" "pixelwise rank a list or group of images" { action x = class _result { _vislevel = 3; select = Expression "Rank" ((int) (guess_size / 2)) { guess_size = len x, is_list x = len x.value, is_Group x = 0; } // can't really iterate over groups ... since we allow a group // argument _result = rank_image select x; } } Custom_rank_item = class Menuaction "Custom _Rank" "rank filter with tuneable parameters" { action x = class _result { _vislevel = 3; window_width = Expression "Window width" 3; window_height = Expression "Window height" 3; select = Expression "Rank" ((int) ((to_real window_width * to_real window_height) / 2)); _result = map_unary process x { process in = rank window_width window_height select in; } } } } Filter_morphology_item = class Menupullright "_Morphology" "various morphological filters" { /* Some useful masks. */ mask8 = Matrix_mor [[255, 255, 255], [255, 255, 255], [255, 255, 255]]; mask4 = Matrix_mor [[128, 255, 128], [255, 255, 255], [128, 255, 128]]; mask1 = Matrix_mor [[0, 0, 0], [0, 255, 0], [0, 0, 0]]; thin = Matrix_mor [[0, 0, 0], [128, 255, 128], [255, 255, 255]]; Threshold_item = Select_item.Threshold_item; sep1 = Menuseparator; Dilate_item = class Menupullright "_Dilate" "morphological dilate" { Dilate8_item = class Menuaction "_8-connected" "dilate with an 8-connected mask" { action x = map_unary (dilate mask8) x; } Dilate4_item = class Menuaction "_4-connected" "dilate with a 4-connected mask" { action x = map_unary (dilate mask4) x; } } Erode_item = class Menupullright "_Erode" "morphological erode" { Erode8_item = class Menuaction "_8-connected" "erode with an 8-connected mask" { action x = map_unary (erode mask8) x; } Erode4_item = class Menuaction "_4-connected" "erode with a 4-connected mask" { action x = map_unary (erode mask4) x; } } Custom_morph_item = class Menuaction "Custom _Morphology" "convolution morphological operator" { action x = class _result { _vislevel = 3; mask = mask4; type = Option "Operation" ["Erode", "Dilate"] 1; apply = Expression "Number of times to apply mask" 1; _result = map_unary morph x { morph image = Image value' { fatmask = (iterate (dilate mask) mask)?(to_real apply - 1); value' = im_erode image.value fatmask, type.value == 0 = im_dilate image.value fatmask; } } } } sep2 = Menuseparator; Open_item = class Menuaction "_Open" "open with an 8-connected mask" { action x = map_unary (dilate mask8 @ erode mask8) x; } Close_item = class Menuaction "_Close" "close with an 8-connected mask" { action x = map_unary (erode mask8 @ dilate mask8) x; } Clean_item = class Menuaction "C_lean" "remove 8-connected isolated points" { action x = map_unary clean x { clean x = x ^ erode mask1 x; } } Thin_item = class Menuaction "_Thin" "thin once" { action x = map_unary thinall x { masks = take 8 (iterate rot45 thin); thin1 m x = x ^ erode m x; thinall x = foldr thin1 x masks; } } } Filter_fourier_item = class Menupullright "_Fourier" "various Fourier filters" { preview_size = 64; sense_option = Option "Sense" [ "Pass", "Reject" ] 0; // make a visualisation image make_vis fn = (Image @ image_set_type Image_type.FOURIER @ rotquad @ fn) (im_create_fmask preview_size preview_size); // make the process function process fn in = (Image @ fn) (im_flt_image_freq in.value); New_ideal_item = class Menupullright "_Ideal" "various ideal Fourier filters" { High_low_item = class Menuaction "_High or Low Pass" "highpass/lowpass ideal Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; // call a freq func with our parameters _params f = f sense.value fc.value 0 0 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" "ring pass/reject ideal Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; rw = Scale "Ring width" 0.01 0.99 0.5; // call a freq func with our parameters _params f = f (sense.value + 6) fc.value rw.value 0 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Band_item = class Menuaction "_Band Pass or Band Reject" "band pass/reject ideal Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fcx = Scale "Horizontal frequency cutoff" 0.01 0.99 0.5; fcy = Scale "Vertical frequency cutoff" 0.01 0.99 0.5; r = Scale "Radius" 0.01 0.99 0.5; // call a freq func with our parameters _params f = f (sense.value + 12) fcx.value fcy.value r.value 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } } New_gaussian_item = class Menupullright "_Gaussian" "various Gaussian Fourier filters" { High_low_item = class Menuaction "_High or Low Pass" "highpass/lowpass Gaussian Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; // call a freq func with our parameters _params f = f (sense.value + 4) fc.value ac.value 0 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" "ring pass/reject Gaussian Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; rw = Scale "Ring width" 0.01 0.99 0.5; // call a freq func with our parameters _params f = f (sense.value + 10) fc.value rw.value ac.value 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Band_item = class Menuaction "_Band Pass or Band Reject" "band pass/reject Gaussian Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fcx = Scale "Horizontal frequency cutoff" 0.01 0.99 0.5; fcy = Scale "Vertical frequency cutoff" 0.01 0.99 0.5; r = Scale "Radius" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; // call a freq func with our parameters _params f = f (sense.value + 16) fcx.value fcy.value r.value ac.value 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } } New_butterworth_item = class Menupullright "_Butterworth" "various Butterworth Fourier filters" { High_low_item = class Menuaction "_High or Low Pass" "highpass/lowpass Butterworth Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; o = Scale "Order" 1 10 2; // call a freq func with our parameters _params f = f (sense.value + 2) o.value fc.value ac.value 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" "ring pass/reject Butterworth Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; rw = Scale "Ring width" 0.01 0.99 0.5; o = Scale "Order" 1 10 2; // call a freq func with our parameters _params f = f (sense.value + 8) o.value fc.value rw.value ac.value 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Band_item = class Menuaction "_Band Pass or Band Reject" "band pass/reject Butterworth Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fcx = Scale "Horizontal frequency cutoff" 0.01 0.99 0.5; fcy = Scale "Vertical frequency cutoff" 0.01 0.99 0.5; r = Scale "Radius" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; o = Scale "Order" 1 10 2; // call a freq func with our parameters _params f = f (sense.value + 14) o.value fcx.value fcy.value r.value ac.value; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } } } Filter_enhance_item = class Menupullright "_Enhance" "various enhancement filters" { Falsecolour_item = class Menuaction "_False Colour" "false colour a mono image" { action x = class _result { _vislevel = 3; o = Scale "Offset" (-255) 255 0; clip = Toggle "Clip colour range" false; _result = map_unary process x { process im = falsecolour mono'' { mono = colour_transform_to Image_type.B_W im; mono' = mono + o; mono'' = (unsigned char) mono', clip = (unsigned char) (mono' & 0xff); } } } } Statistical_diff_item = class Menuaction "_Statistical Difference" "statistical difference of an image" { action x = class _result { _vislevel = 3; wsize = Expression "Window size" 11; tmean = Expression "Target mean" 128; mean_weight = Scale "Mean weight" 0 1 0.8; tdev = Expression "Target deviation" 50; dev_weight = Scale "Deviation weight" 0 1 0.8; border = Toggle "Output image matches input image in size" true; _result = map_unary process x { process in = Image in'' { in' = colour_transform_to Image_type.B_W in.value; fn = im_stdif, border = im_stdif_raw; in'' = fn in' mean_weight.value tmean.expr dev_weight.value tdev.expr wsize.expr wsize.expr; } } } } Hist_equal_item = class Menupullright "_Equalise Histogram" "equalise contrast" { Global_item = class Menuaction "_Global" "equalise contrast globally" { action x = map_unary hist_equalize x; } Local_item = class Menuaction "_Local" "equalise contrast within a roving window" { action x = class _result { _vislevel = 3; window_width = Expression "Window width" 20; window_height = Expression "Window height" 20; _result = map_unary process x { process in = hist_equalize_local window_width.expr window_height.expr in; } } } } } Filter_correlate_item = class Menupullright "Spatial _Correlation" "calculate correlation surfaces" { Correlate_item = class Menuaction "_Correlate" "calculate correlation coefficient" { action a b = map_binary corr a b { corr a b = correlate a b, a.width <= b.width && a.height <= b.height = correlate b a; } } Correlate_fast_item = class Menuaction "_Simple Difference" "calculate sum of squares of differences" { action a b = map_binary corr a b { corr a b = correlate_fast a b, a.width <= b.width && a.height <= b.height = correlate_fast b a; } } } Filter_hough_item = class Menupullright "_Hough Transform" "transform to parameter space" { Line_item = class Menuaction "_Line" "find straight line Hough transform" { action a = class _result { _vislevel = 3; pspace_width = Expression "Parameter space width" 64; pspace_height = Expression "Parameter space height" 64; _result = map_unary line a { line a = hough_line (to_real pspace_width) (to_real pspace_height) a; } } } Circle_item = class Menuaction "_Circle" "find circle Hough transform" { action a = class _result { _vislevel = 3; scale = Expression "Scale down parameter space by" 10; min_radius = Expression "Minimum radius" 10; max_radius = Expression "Maximum radius" 30; _result = map_unary circle a { circle a = hough_circle (to_real scale) (to_real min_radius) (to_real max_radius) a; } } } } Filter_coordinate_item = class Menupullright "_Coordinate Transform" "various coordinate transforms" { // run a function which wants a complex arg on a non-complex two-band // image run_cmplx fn x = re x' ++ im x' { x' = fn (x?0, x?1); } Polar_item = class Menuaction "_Polar" "transform to polar coordinates" { action a = class _result { _vislevel = 3; interp = Interpolate_picker Interpolate_type.BILINEAR; _result = map_unary to_polar a { to_polar im = mapim interp.value map' im { // xy image, origin in the centre, scaled to fit image to // a circle xy = make_xy im.width im.height; xy' = xy - Vector [im.width / 2, im.height / 2]; scale = min [im.width, im.height] / im.width; xy'' = 2 * xy' / scale; // to polar, scale vertical axis to 360 degrees map = run_cmplx polar xy''; map' = map * Vector [1, im.height / 360]; } } } } Rectangular_item = class Menuaction "_Rectangular" "transform to rectangular coordinates" { action a = class _result { _vislevel = 3; interp = Interpolate_picker Interpolate_type.BILINEAR; _result = map_unary to_rect a { to_rect im = mapim interp.value map'' im { // xy image, vertical scaled to 360 degrees xy = make_xy im.width im.height; xy' = xy * Vector [1, 360 / im.height]; // to rect, scale to image rect map = run_cmplx rectangular xy'; scale = min [im.width, im.height] / im.width; map' = map * scale / 2; map'' = map' + Vector [im.width / 2, im.height / 2]; } } } } } #separator Filter_tilt_item = class Menupullright "Ti_lt Brightness" "tilt brightness" { Left_right_item = class Menuaction "_Left to Right" "linear left-right brighten" { action x = class _result { _vislevel = 3; tilt = Scale "Left-right tilt" (-1) 1 0; _result = map_unary tilt_lr x { tilt_lr image = image * scale { ramp = im_fgrey image.width image.height; scale = (ramp - 0.5) * tilt + 1; } } } } Top_bottom_item = class Menuaction "_Top to Bottom" "linear top-bottom brighten" { action x = class _result { _vislevel = 3; tilt = Scale "Top-bottom tilt" (-1) 1 0; _result = map_unary tilt_tb x { tilt_tb image = image * scale { ramp = rot90 (im_fgrey image.height image.width); scale = (ramp - 0.5) * tilt + 1; } } } } sep1 = Menuseparator; Left_right_cos_item = class Menuaction "Cosine Left-_right" "cosine left-right brighten" { action x = class _result { _vislevel = 3; tilt = Scale "Left-right tilt" (-1) 1 0; shift = Scale "Shift by" (-1) 1 0; _result = map_unary tilt_lr x { tilt_lr image = image * scale { ramp = im_fgrey image.width image.height - 0.5 - shift.value; scale = 0.5 * tilt.value * cos (ramp * 180) + 1; } } } } Top_bottom_cos_item = class Menuaction "Cosine Top-_bottom" "cosine top-bottom brighten" { action x = class _result { _vislevel = 3; tilt = Scale "Top-bottom tilt" (-1) 1 0; shift = Scale "Shift by" (-1) 1 0; _result = map_unary tilt_tb x { tilt_tb image = image * scale { ramp = rot90 (im_fgrey image.height image.width) - 0.5 - shift.value; scale = 0.5 * tilt.value * cos (ramp * 180) + 1; } } } } sep2 = Menuseparator; Circular_item = class Menuaction "_Circular" "circular brighten" { action x = class _result { _vislevel = 3; tilt = Scale "Tilt" (-1) 1 0; hshift = Scale "Horizontal shift by" (-1) 1 0; vshift = Scale "Vertical shift by" (-1) 1 0; _result = map_unary tilt_tb x { tilt_tb image = image * scale { hramp = im_fgrey image.width image.height - 0.5 - hshift.value; vramp = rot90 (im_fgrey image.height image.width) - 0.5 - vshift.value; ramp = (hramp ** 2 + vramp ** 2) ** 0.5; scale = 0.5 * tilt.value * cos (ramp * 180) + 1; } } } } } Filter_blend_item = class Menupullright "_Blend" "blend objects together" { Scale_blend_item = class Menuaction "_Scale" "blend two objects together with a scale" { action a b = class _result { _vislevel = 3; p = Scale "Blend position" 0 1 0.5; _result = map_binary process a b { process im1 im2 = im1 * (1 - p.value) + im2 * p.value; } } } Image_blend_item = class Menuaction "_Image" "use an image to blend two objects" { action a b c = class _result { _vislevel = 3; i = Toggle "Invert mask" false; _result = map_trinary process a b c { process a b c = blend condition in1 in2, !i = blend (invert condition) in1 in2 { compare a b // prefer image as the condition = false, !has_image a && has_image b // prefer mono images as the condition = false, has_bands a && has_bands b && get_bands a > 1 && get_bands b == 1 // prefer uchar as the condition = false, has_format a && has_format b && get_format a > Image_format.UCHAR && get_format b == Image_format.UCHAR = true; [condition, in1, in2] = sortc compare [a, b, c]; } } } } Line_blend_item = class Menuaction "_Along Line" "blend between image a and image b along a line" { action a b = class _result { _vislevel = 3; orientation = Option "Orientation" [ "Left to Right", "Top to Bottom" ] 0; blend_position = Scale "Blend position" 0 1 0.5; blend_width = Scale "Blend width" 0 1 0.05; _result = map_binary process a b { process a b = blend (Image condition) b a { output_width = max_pair a.width b.width; output_height = max_pair a.height b.height; range = output_width, orientation == 0 = output_height; blend_position' = floor (range * blend_position.value); blend_width' = 1, blend_width.value == 0 = floor (range * blend_width.value); start = blend_position' - blend_width' / 2; background = (make_xy output_width output_height) >= blend_position'; ramp = im_grey blend_width' output_height, orientation == 0 = rot90 (im_grey blend_width' output_width); condition = insert_noexpand start 0 ramp background?0, orientation == 0 = insert_noexpand 0 start ramp background?1; } } } } Blend_alpha_item = class Menuaction "_Alpha" "blend images with optional alpha channels" { // usage: layerit foreground background // input images must be either 1 or 3 bands, optionally + 1 band // which is used as the alpha channel // rich lott scale_mask im opacity = (unsigned char) (to_real opacity / 255 * im); // to mono intensity = colour_transform_to Image_type.B_W; // All the blend functions // I am grateful to this page // http://www.pegtop.net/delphi/blendmodes/ // for most of the formulae. blend_normal mask opacity fg bg = blend (scale_mask mask opacity) fg bg; blend_iflighter mask opacity fg bg = blend (if fg' > bg' then mask' else 0) fg bg { fg' = intensity fg; bg' = intensity bg; mask' = scale_mask mask opacity ; } blend_ifdarker mask opacity fg bg = blend (if fg' < bg' then mask' else 0) fg bg { fg' = intensity fg ; bg' = intensity bg ; mask' = scale_mask mask opacity ; } blend_multiply mask opacity fg bg = blend (scale_mask mask opacity) fg' bg { fg' = fg / 255 * bg; } blend_add mask opacity fg bg = blend mask fg' bg { fg' = opacity / 255 * fg + bg; } blend_subtract mask opacity fg bg = blend mask fg' bg { fg' = bg - opacity / 255 * fg; } blend_screen mask opacity fg bg = blend mask fg' bg { fg' = 255 - (255 - bg) * (255 - (opacity / 255 * fg)) / 255; } blend_burn mask opacity fg bg = blend mask fg'' bg { // fades to white which has no effect. fg' = (255 - opacity) + opacity * fg / 255; fg'' = 255 - 255 * (255 - bg) / fg'; } blend_softlight mask opacity fg bg = blend mask' fg' bg { mask' = scale_mask mask opacity; fg' = (2 * bg * fg + bg * bg * (1 - 2 * fg / 255)) / 255; } blend_hardlight mask opacity fg bg = blend mask' fg' bg { mask' = scale_mask mask opacity; fg' = 2 / 255 * fg * bg, bg < 129 = 255 - 2 * (255 - bg) * (255 - fg) / 255; } blend_lighten mask opacity fg bg = blend mask' fg' bg { mask' = scale_mask mask opacity; fg' = if bg < fg then fg else bg; } blend_darken mask opacity fg bg = blend mask' fg' bg { mask' = scale_mask mask opacity; fg' = if bg > fg then fg else bg; } blend_dodge mask opacity fg bg = blend mask fg'' bg { // one added to avoid divide by zero fg' = 1 + 255 - (opacity / 255 * fg); fg'' = bg * 255 / fg'; } blend_reflect mask opacity fg bg = blend mask' fg' bg { mask' = scale_mask mask opacity; fg' = bg * bg / (255 - fg); } blend_freeze mask opacity fg bg = blend mask' fg' bg { mask' = scale_mask mask opacity; fg' = 255 - (255 - bg) * (255 - bg) / (1 + fg); } blend_or mask opacity fg bg = bg | (unsigned char) fg' { mask' = scale_mask mask opacity; fg' = fg * mask' / 255; } blend_and mask opacity fg bg = bg & (unsigned char) fg' { mask' = scale_mask mask opacity; fg' = fg * mask' / 255; } // blend types NORMAL = 0; IFLIGHTER = 1; IFDARKER = 2; MULTIPLY = 3; ADD = 4; SUBTRACT = 5; SCREEN = 6; BURN = 7; DODGE = 8; HARDLIGHT = 9; SOFTLIGHT = 10; LIGHTEN = 11; DARKEN = 12; REFLECT = 13; FREEZE = 14; OR = 15; AND = 16; // names we show the user for blend types names = Enum [ _ "Normal" => NORMAL, _ "If Lighter" => IFLIGHTER, _ "If Darker" => IFDARKER, _ "Multiply" => MULTIPLY, _ "Add" => ADD, _ "Subtract" => SUBTRACT, _ "Screen" => SCREEN, _ "Burn" => BURN, _ "Soft Light" => SOFTLIGHT, _ "Hard Light" => HARDLIGHT, _ "Lighten" => LIGHTEN, _ "Darken" => DARKEN, _ "Dodge" => DODGE, _ "Reflect" => REFLECT, _ "Freeze" => FREEZE, _ "Bitwise OR" => OR, _ "Bitwise AND" => AND ]; // functions we call for each blend type actions = Table [ [NORMAL, blend_normal], [IFLIGHTER, blend_iflighter], [IFDARKER, blend_ifdarker], [MULTIPLY, blend_multiply], [ADD, blend_add], [SUBTRACT, blend_subtract], [SCREEN, blend_screen], [BURN, blend_burn], [SOFTLIGHT, blend_softlight], [HARDLIGHT, blend_hardlight], [LIGHTEN, blend_lighten], [DARKEN, blend_darken], [DODGE, blend_dodge], [REFLECT, blend_reflect], [FREEZE, blend_freeze], [OR, blend_or], [AND, blend_and] ]; // make sure im has an alpha channel (set opaque if it hasn't) put_alpha im = im, im.bands == 4 || im.bands == 2 = im ++ 255; // make sure im has no alpha channel lose_alpha im = extract_bands 0 3 im, im.bands == 4 = im?0, im.bands == 2 = im; // does im have al alpha channel? has_alpha im = im.bands == 2 || im.bands == 4; // get the alpha (set opaque if no alpha) get_alpha img = img'?3, img.bands == 4 = img'?1 { img' = put_alpha img; } // add an alpha ... cast the alpha image to match the main image append_alpha im alpha = im ++ clip2fmt im.format alpha; // makes fg the same size as bg, displaced with u, v pixel offset moveit fg bg u v = insert_noexpand u v fg bg' { bg' = image_new bg.width bg.height fg.bands fg.format fg.coding fg.type 0 0 0; } action bg fg = class _value { _vislevel = 3; method = Option_enum "Blend mode" names "Normal"; opacity = Scale "Opacity" 0 255 255; hmove = Scale "Horizontal move by" (-bg.width) (bg.width) 0; vmove = Scale "Vertical move by" (-bg.height) (bg.height) 0; _value = append_alpha blended merged_alpha, has_alpha bg = blended { // displace and resize fg (need to displace alpha too) fg' = moveit (put_alpha fg) bg hmove vmove; // transform to sRGB fg'' = colour_transform_to Image_type.sRGB (lose_alpha fg'); bg' = colour_transform_to Image_type.sRGB (lose_alpha bg); // alphas merged merged_alpha = get_alpha bg | get_alpha fg'; // blend together blended = (actions.lookup 0 1 method.value_thing) (get_alpha fg') opacity.value fg'' bg'; } } } } Filter_overlay_header_item = class Menuaction "_Overlay" "make a colour overlay of two monochrome images" { action a b = class _result { _vislevel = 3; colour = Option "Colour overlay as" [ _ "Green over Red", _ "Blue over Red", _ "Red over Green", _ "Red over Blue", _ "Blue over Green", _ "Green over Blue" ] 0; _result = map_binary overlay a b { overlay a b = image_set_type Image_type.sRGB [(a' ++ b' ++ 0), (a' ++ 0 ++ b'), (b' ++ a' ++ 0), (b' ++ 0 ++ a'), (0 ++ a' ++ b'), (0 ++ b' ++ a')]?colour { a' = colour_transform_to Image_type.B_W a; b' = colour_transform_to Image_type.B_W b; } } } } Filter_colourize_item = class Menuaction "_Colourize" "use a colour image or patch to tint a mono image" { action a b = class _result { _vislevel = 3; tint = Scale "Tint" 0 1 0.6; _result = map_binary tintit a b { tintit a b = colour_transform_to (get_type colour) colourized' { // get the mono thing first [mono, colour] = sortc (const (is_colour_type @ get_type)) [a, b]; colour' = tint * colour_transform_to Image_type.LAB colour; mono' = colour_transform_to Image_type.B_W mono; colourized = (mono' / 2.55) ++ colour'?1 ++ colour'?2; colourized' = image_set_type Image_type.LAB colourized; } } } } Filter_browse_multiband_item = class Menupullright "Bro_wse" "browse though an image, bitwise or bandwise" { Bandwise_item = class Menuaction "B_andwise" "browse through the bands of a multiband image" { action image = class _result { _vislevel = 3; band = Scale "Band" 0 (image.bands - 1) 0; display = Option "Display as" [ _ "Grey", _ "Green over Red", _ "Blue over Red", _ "Red over Green", _ "Red over Blue", _ "Blue over Green", _ "Green over Blue" ] 0; _result = output { down = (int) band.value; up = down + 1; remainder = band.value - down; fade x a = Vector [0], x == 0 = a * x; a = fade remainder image?up; b = fade (1 - remainder) image?down; output = [ a + b, a ++ b ++ 0, a ++ 0 ++ b, b ++ a ++ 0, b ++ 0 ++ a, 0 ++ a ++ b, 0 ++ b ++ a ] ? display; } } } Bitwise_item = class Menuaction "Bi_twise" "browse through the bits of an image" { action x = class _result { _vislevel = 3; bit = Islider "Bit" 0 (nbits - 1) (nbits - 1) { nbits = x.bits, is_Image x = 8; Islider c f t v = class scope.Scale c f t ((int) v) { Scale = Islider; } } _result = map_unary process x { process im = (im & (0x1 << bit.value)) != 0; } } } } #separator Filter_negative_item = class Menuaction "Photographic _Negative" "swap black and white" { action x = map_unary invert x { invert in = clip2fmt in.format (colour_transform_to (get_type in) rgb') { rgb = colour_transform_to Image_type.sRGB in; rgb' = 255 - rgb; } } } Filter_solarize_item = class Menuaction "_Solarise" "invert colours above a threshold" { action x = class _result { _vislevel = 3; kink = Scale "Kink" 0 1 0.5; _result = map_unary process x { process image = hist_map tab'''' image { // max pixel value for this format mx = Image_format.maxval image.format; // make a LUT ... just 8 and 16 bit tab = im_identity_ushort image.bands mx, image.format == Image_format.USHORT = im_identity image.bands; tab' = Image tab; // make basic ^ shape tab'' = tab' * (1 / kink), tab' < mx * kink = (mx - tab') / (1 - kink); tab''' = clip2fmt image.format tab''; // smooth a bit mask = matrix_blur (tab'''.width / 8); tab'''' = convsep mask tab'''; } } } } Filter_diffuse_glow_item = class Menuaction "_Diffuse Glow" "add a halo to highlights" { action x = class _result { _vislevel = 3; r = Scale "Radius" 0 50 5; highlights = Scale "Highlights" 0 100 95; glow = Scale "Glow" 0 1 0.5; colour = Colour_new_item.Widget_colour_item.action; _result = map_unary process x { process image = image' { mono = (unsigned char) (colour_transform_to Image_type.B_W image); thresh = hist_thresh (highlights.value / 100) mono; mask = mono > thresh; blur = convsep (matrix_gaussian_blur r.value) mask; colour' = colour_transform_to image.type colour; image' = image + colour' * glow * (blur / 255); } } } } Filter_drop_shadow_item = class Menuaction "Drop S_hadow" "add a drop shadow to an image" { action x = class _result { _vislevel = 3; sx = Scale "Horizontal shadow" (-50) 50 5; sy = Scale "Vertical shadow" (-50) 50 5; ss = Scale "Shadow softness" 0 20 5; bg_colour = Expression "Background colour" 255; sd_colour = Expression "Shadow colour" 128; alpha = Toggle "Shadow in alpha channel" false; transparent = Toggle "Zero pixels are transparent" false; _result = map_unary shadow x { shadow image = Image final { blur_size = ss.value * 2 + 1; // matrix we blur with to soften shadows blur_matrix = matrix_gaussian_blur blur_size; matrix_size = blur_matrix.width; matrix_radius = (int) (matrix_size / 2) + 1; // position and size of shadow image in input cods // before and after fuzzing shadow_rect = Rect sx.value sy.value image.width image.height; fuzzy_shadow_rect = shadow_rect.margin_adjust matrix_radius; // size and pos of final image, in input cods final_rect = image.rect.union fuzzy_shadow_rect; // hard part of shadow in output cods shadow_rect' = Rect (shadow_rect.left - final_rect.left) (shadow_rect.top - final_rect.top) shadow_rect.width shadow_rect.height; // make the shadow mask ... true for parts which cast // a shadow mask = (foldr1 bitwise_and @ bandsplit) (image.value != 0), transparent = image_new image.width image.height 1 Image_format.UCHAR Image_coding.NOCODING Image_type.B_W 255 0 0; mask' = embed 0 shadow_rect'.left shadow_rect'.top final_rect.width final_rect.height mask; mask'' = convsep blur_matrix mask'; // use mask to fade between bg and shadow colour mk_background colour = image_new final_rect.width final_rect.height image.bands image.format image.coding image.type colour 0 0; bg_image = mk_background bg_colour.expr; shadow_image = mk_background sd_colour.expr; bg = blend mask'' shadow_image bg_image; // make a full size mask fg_mask = embed 0 (image.rect.left - final_rect.left) (image.rect.top - final_rect.top) final_rect.width final_rect.height mask; // wrap up the input image ... put the shadow colour // around it, so if we are outputting a separate // alpha the shadow colour will be set correctly fg = insert (image.rect.left - final_rect.left) (image.rect.top - final_rect.top) image.value shadow_image; final // make a separate alpha = fg ++ mask'', alpha // paste image over shadow = if fg_mask then fg else bg; } } } } Filter_paint_text_item = class Menuaction "_Paint Text" "paint text into an image" { action x = paint_position, is_Group x = paint_area { paint_area = class _result { _check_args = [ [x, "x", check_Image] ]; _vislevel = 3; text = String "Text to paint" "Hello world!"; font = Fontname "Use font" Workspaces.Preferences.PAINTBOX_FONT; align = Option "Alignment" ["Left", "Centre", "Right"] 0; dpi = Expression "DPI" 300; colour = Expression "Text colour" 255; place = Region x (x.width / 4) (x.height / 4) (x.width / 2) (x.height / 2); _result = insert_noexpand place.left place.top (blend txt' fg place) x { fg = image_new place.width place.height x.bands x.format x.coding x.type colour.expr 0 0; txt = Image (im_text text.value font.value place.width align.value (to_real dpi)); bg = im_black place.width place.height 1; txt' = insert_noexpand 0 0 txt bg; } } paint_position = class _result { _vislevel = 3; text = Pattern_images_item.Text_item.action; colour = Expression "Text colour" 255; position = Option "Position" [ _ "North-west", _ "North", _ "North-east", _ "West", _ "Centre", _ "East", _ "South-west", _ "South", _ "South-east", _ "Specify in pixels" ] 4; left = Expression "Pixels from left" 0; top = Expression "Pixels from top" 0; _result = map_unary paint x { paint image = insert_noexpand x' y' place' image { xr = image.width - text.width; yr = image.height - text.height; x = left.expr, position == 9 = [0, xr / 2, xr]?(position % 3); y = top.expr, position == 9 = [0, yr / 2, yr]?(position / 3); x' = range 0 x (image.width - 1); y' = range 0 y (image.height - 1); w' = range 1 text.width (image.width - x'); h' = range 1 text.height (image.height - y'); place = extract_area x' y' w' h' image; text' = insert_noexpand 0 0 text (im_black w' h' 1); fg = image_new w' h' image.bands image.format image.coding image.type colour.expr 0 0; place' = blend text' fg place; } } } } } Autotrace_item = class Menuaction "_Trace" "convert a bitmap to an SVG file" { action x = class _result { _vislevel = 3; despeckle = Scale "Despeckle level" 1 20 1; line = Scale "Line threshold" 1 20 1; center = Toggle "Trace centreline" false; scale = Scale "SVG scale" 0.1 10 1; command = "autotrace %s " ++ join_sep " " [ofmt, ofile, desp, lint, cent] { prog = search_for_error "autotrace"; ofmt = "-output-format svg"; ofile = "-output-file %s"; desp = "-despeckle-level " ++ print despeckle.value; lint = "-line-threshold " ++ print line.value; cent = if center then "-centerline " else ""; } _result = Image output { [output] = vips_call "system" [command] [$in => [x.value], $in_format => "%s.ppm", $out => true, $out_format => "%s.svg[scale=" ++ print scale.value ++ "]" ]; } } } nip2-8.7.0/share/nip2/compat/8.3/Histogram.def0000644000175000017500000001620513224651032015503 00000000000000Hist_new_item = class Menupullright "_New" "new histogram" { Hist_item = class Menuaction "_Identity" "make an identity histogram" { action = class _result { _vislevel = 3; d = Option "Depth" ["8 bit", "16 bit"] 0; _result = Plot [] ([im_identity 1, im_identity_ushort 1 65536]?d); } } Hist_new_from_matrix = Matrix_buildlut_item; Hist_from_image_item = class Menuaction "Ta_g Image As Histogram" "set image Type to Histogram" { action x = hist_tag x; } Tone_item = class Menuaction "_Tone Curve" "make a new tone mapping curve" { action = class _result { _vislevel = 3; d = Option "Depth" ["8 bit", "16 bit"] 0; b = Scale "Black point" 0 100 0; w = Scale "White point" 0 100 100; sp = Scale "Shadow point" 0.1 0.3 0.2; mp = Scale "Mid-tone point" 0.4 0.6 0.5; hp = Scale "Highlight point" 0.7 0.9 0.8; sa = Scale "Shadow adjust" (-15) 15 0; ma = Scale "Mid-tone adjust" (-30) 30 0; ha = Scale "Highlight adjust" (-15) 15 0; _result = tone_build fmt b w sp mp hp sa ma ha { fmt = [Image_format.UCHAR, Image_format.USHORT]?d; } } } } Hist_convert_to_hist_item = class Menuaction "Con_vert to Histogram" "convert anything to a histogram" { action x = hist_tag (to_image x); } Hist_find_item = class Menupullright "_Find" "find a histogram" { Oned_item = class Menuaction "_One Dimension" "for a n-band image, make an n-band 1D histogram" { action x = map_unary hist_find x; } Nd_item = class Menuaction "_Many Dimensions" "for a n-band image, make an n-dimensional histogram" { action x = class _result { _vislevel = 3; // default to something small-ish bins = Expression "Number of bins in each dimension" 8; _result = map_unary process x { process in = hist_find_nD bins in; } } } Indexed_item = class Menuaction "_Indexed" "use a 1-band index image to pick bins for an n-band image" { action x y = map_binary map x y { map a b = hist_find_indexed index im { [im, index] = sortc (const is_index) [a, b]; is_index x = has_image x && b == 1 && (f == Image_format.UCHAR || f == Image_format.USHORT) { im = get_image x; b = get_bands x; f = get_format x; } } } } } Hist_map_item = class Menuaction "_Map" "map an image through a histogram" { action x y = map_binary map x y { map a b = hist_map hist im { [im, hist] = sortc (const is_hist) [a, b]; } } } Hist_eq_item = Filter_enhance_item.Hist_equal_item; #separator Hist_cum_item = class Menuaction "_Integrate" "form cumulative histogram" { action x = map_unary hist_cum x; } Hist_diff_item = class Menuaction "_Differentiate" "find point-to-point differences (inverse of Integrate)" { action x = map_unary hist_diff x; } Hist_norm_item = class Menuaction "N_ormalise" "normalise a histogram" { action x = map_unary hist_norm x; } Hist_inv_item = class Menuaction "In_vert" "invert a histogram" { action x = map_unary hist_inv x; } Hist_match_item = class Menuaction "Ma_tch" "find LUT which will match first histogram to second" { action in ref = map_binary hist_match in ref; } Hist_zerox_item = class Menuaction "_Zero Crossings" "find zero crossings" { action x = class _result { _vislevel = 3; edge = Option "Direction" [ "Positive-going", "Negative-going" ] 0; _result = map_unary (zerox (if edge == 0 then -1 else 1)) x; } } #separator Hist_profile_item = class Menuaction "Find _Profile" "search from image edges for non-zero pixels" { action x = class _result { _vislevel = 3; edge = Option "Search from" [ "Top edge down", "Left edge to right", "Bottom edge up", "Right edge to left" ] 2; _result = map_unary profile x { profile image = (Plot_histogram @ hist_tag) [ profilemb 0 image.value, profilemb 1 image.value, profilemb 0 (fliptb image.value), profilemb 1 (fliplr image.value) ]?edge; // im_profile only does 1 band images :-( profilemb d = bandjoin @ map (converse im_profile d) @ bandsplit; } } } Hist_project_item = class Menuaction "Find Pro_jections" "find horizontal and vertical projections" { action x = class { _vislevel = 2; _result = map_unary project x; // extract the result ... could be a group extr n = Plot_histogram _result?n, is_list _result = Group (map (Plot_histogram @ converse subscript n) _result.value); horizontal = extr 0; vertical = extr 1; centre = (gravity horizontal, gravity vertical); } } #separator Hist_graph_item = class Menuaction "P_lot Slice" "plot a slice along a guide or arrow" { action x = class _value { _vislevel = 3; width = Scale "Width" 1 40 1; displace = Scale "Horizontal displace" (-50) 50 0; vdisplace = Scale "Vertical displace" (-50) 50 0; _value = map_unary graph x { graph arrow = hist_tag area' { area = extract_arrow displace.value vdisplace.value width.value arrow; // squish vertically to get an average area' = resize Kernel_linear 1 (1 / width.value) area; } } } } Extract_arrow_item = class Menuaction "Extract _Arrow" "extract the area around an arrow" { action x = class _value { _vislevel = 3; width = Scale "Width" 1 40 1; displace = Scale "Horizontal displace" (-50) 50 0; vdisplace = Scale "Vertical displace" (-50) 50 0; _value = map_unary (extract_arrow displace.value vdisplace.value width.value) x; } } Hist_plot_item = class Menuaction "Plot _Object" "plot an object as a bar, point or line graph" { action x = class _result { _vislevel = 3; caption = Expression "Chart caption" "none"; format = Option_enum "Format" Plot_format.names "YYYY"; style = Option_enum "Style" Plot_style.names "Line"; auto = Toggle "Auto Range" true; xmin = Expression "X range minimum" 0; xmax = Expression "X range maximum" 1; ymin = Expression "Y range minimum" 0; ymax = Expression "Y range maximum" 1; xcaption = Expression "X axis caption" "none"; ycaption = Expression "Y axis caption" "none"; series_captions = Expression "Series captions" ["Band 0"]; _result = Plot options (image x) { options = [$style => style.value, $format => format.value] ++ range ++ captions; range = [], auto = [$xmin => xmin.expr, $xmax => xmax.expr, $ymin => ymin.expr, $ymax => ymax.expr]; captions = concat (map test caption_options) ++ [$series_captions => series_captions.expr] { caption_options = [ $caption => caption.expr, $xcaption => xcaption.expr, $ycaption => ycaption.expr ]; test x = [], value == "none" = [option_name => value] { [option_name, value] = x; } } image x = image (extract_arrow 0 0 1 x), is_Arrow x = get_image x, has_image x = x2b im, b == 1 = im { im = get_image (to_image x); w = get_width im; h = get_height im; b = get_bands im; // matrix to image makes a 1-band mxn image // we need to put columns into bands x2b im = bandjoin (map extract_col [0 .. w - 1]) { extract_col x = extract_area x 0 1 h im; } } } } } nip2-8.7.0/share/nip2/compat/8.3/Object.def0000644000175000017500000000220513224651032014747 00000000000000Object_duplicate_item = class Menuaction "_Duplicate" "take a copy of an object" { action x = map_unary copy x; } #separator Object_list_to_group_item = class Menuaction "_List to Group" "turn a list of objects into a group" { action x = to_group x; } Object_group_to_list_item = class Menuaction "_Group to List" "turn a group into a list of objects" { action x = to_list x; } #separator Object_break_item = class Menuaction "_Break Up Object" "break an object into a list of components" { action x = map_unary break x { break x = bandsplit x, is_Image x = map Vector x.value, is_Matrix x = x.value, is_Vector x || is_Real x = error "Breakup: not Image/Matrix/Vector/Real"; } } Object_assemble_item = class Menuaction "_Assemble Objects" "assemble a list of objects into a single object" { action x = map_unary ass x { ass x = [], x == [] = Vector x, is_real_list x = Matrix x, is_matrix x = bandjoin x, is_listof is_Image x = Vector (map get_value x), is_listof is_Real x = Matrix (map get_value x), is_listof is_Vector x = error "Assemble: not list of Image/Vector/Real/image/real"; } } nip2-8.7.0/share/nip2/compat/8.3/Makefile.in0000644000175000017500000003702413350464104015137 00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = share/nip2/compat/8.3 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(startdir)" DATA = $(start_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BISON = @BISON@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DLLWRAP = @DLLWRAP@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FFTW3_CFLAGS = @FFTW3_CFLAGS@ FFTW3_LIBS = @FFTW3_LIBS@ FGREP = @FGREP@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_LIBS = @GSL_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ IP_CFLAGS = @IP_CFLAGS@ IP_LIBS = @IP_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBGOFFICE_CFLAGS = @LIBGOFFICE_CFLAGS@ LIBGOFFICE_LIBS = @LIBGOFFICE_LIBS@ LIBGSF_CFLAGS = @LIBGSF_CFLAGS@ LIBGSF_LIBS = @LIBGSF_LIBS@ LIBGVC_CFLAGS = @LIBGVC_CFLAGS@ LIBGVC_LIBS = @LIBGVC_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ 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@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ REQUIRED_PACKAGES_CFLAGS = @REQUIRED_PACKAGES_CFLAGS@ REQUIRED_PACKAGES_LIBS = @REQUIRED_PACKAGES_LIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOP_SRCDIR = @TOP_SRCDIR@ UPDATE_DESKTOP_DATABASE = @UPDATE_DESKTOP_DATABASE@ UPDATE_MIME_DATABASE = @UPDATE_MIME_DATABASE@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XDG_OPEN = @XDG_OPEN@ XGETTEXT = @XGETTEXT@ 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@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ startdir = $(pkgdatadir)/compat/8.3 start_DATA = \ Colour.def \ _convert.def \ Filter.def \ _generate.def \ Histogram.def \ Image.def \ _joe_extra.def \ _joe_utilities.def \ _list.def \ _magick.def \ Magick.def \ Math.def \ Matrix.def \ _Object.def \ Object.def \ _predicate.def \ Preferences.ws \ _stdenv.def \ Tasks.def \ _types.def \ Widgets.def EXTRA_DIST = $(start_DATA) all: all-am .SUFFIXES: $(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) --foreign share/nip2/compat/8.3/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign share/nip2/compat/8.3/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): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-startDATA: $(start_DATA) @$(NORMAL_INSTALL) @list='$(start_DATA)'; test -n "$(startdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(startdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(startdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(startdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(startdir)" || exit $$?; \ done uninstall-startDATA: @$(NORMAL_UNINSTALL) @list='$(start_DATA)'; test -n "$(startdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(startdir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: 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 check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(startdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-startDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-startDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-startDATA install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags-am uninstall uninstall-am uninstall-startDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: nip2-8.7.0/share/nip2/compat/8.3/Matrix.def0000644000175000017500000002573113224651032015016 00000000000000 Matrix_build_item = class Menupullright "_New" "make a new matrix of some sort" { Plain_item = class Menuaction "_Plain" "make a new plain matrix widget" { action = Matrix (identity_matrix 3); } Convolution_item = class Menuaction "_Convolution" "make a new convolution matrix widget" { action = Matrix_con 1 0 [[0, 0, 0], [0, 1, 0], [0, 0, 0]]; } Recombination_item = class Menuaction "_Recombination" "make a new recombination matrix widget" { action = Matrix_rec (identity_matrix 3); } Morphology_item = class Menuaction "_Morphology" "make a new morphology matrix widget" { action = Matrix_mor [[0, 0, 0], [0, 255, 0], [0, 0, 0]]; } sep1 = Menuseparator; Matrix_identity_item = class Menuaction "_Identity" "make an identity matrix" { action = identity (identity_matrix 5); identity v = class _result { _vislevel = 3; s = Expression "Size" (len v); _result = Matrix (identity_matrix (to_real s)), to_real s != len v; = Matrix v; Matrix_vips value scale offset filename display = identity value; } } Matrix_series_item = class Menuaction "_Series" "make a series" { action = series (mkseries 0 1 5); mkseries s t e = transpose [[to_real s, to_real s + to_real t .. to_real e]]; series v = class _result { _vislevel = 3; _s = v?0?0; _t = v?1?0 - v?0?0; _e = (last v)?0; s = Expression "Start value" _s; t = Expression "Step by" _t; e = Expression "End value" _e; _result = Matrix (mkseries s t e), to_real s != _s || to_real t != _t || to_real e != _e = Matrix v; Matrix_vips value scale offset filename display = series value; } } Matrix_square_item = class Menuaction "_Square" "make a square matrix" { action = square (mksquare 5); mksquare s = replicate s (take s [1, 1 ..]); square v = class _result { _vislevel = 3; s = Expression "Size" (len v); _result = Matrix_con (sum v) 0 v, len v == to_real s = Matrix_con (sum m) 0 m { m = mksquare (to_real s); } Matrix_vips value scale offset filename display = square value; } } Matrix_circular_item = class Menuaction "_Circular" "make a circular matrix" { action = circle (mkcircle 3); mkcircle r = map2 (map2 pyth) xes yes { line = [-r .. r]; xes = replicate (2 * r + 1) line; yes = transpose xes; pyth a b = 1, (a**2 + b**2) ** 0.5 <= r = 0; } circle v = class _result { _vislevel = 3; r = Expression "Radius" ((len v - 1) / 2); _result = Matrix_con (sum v) 0 v, len v == r.expr * 2 + 1 = Matrix_con (sum m) 0 m { m = mkcircle (to_real r); } Matrix_vips value scale offset filename display = circle value; } } Matrix_gaussian_item = class Menuaction "_Gaussian" "make a gaussian matrix" { action = class _result { _vislevel = 3; s = Scale "Sigma" 0.001 10 1; ma = Scale "Minimum amplitude" 0 1 0.2; integer = Toggle "Integer" false; _result = fn s.value ma.value { fn = im_gauss_imask, integer = im_gauss_dmask; } } } Matrix_laplacian_item = class Menuaction "_Laplacian" "make the Laplacian of a Gaussian matrix" { action = class _result { _vislevel = 3; s = Scale "Sigma" 0.001 10 1.5; ma = Scale "Minimum amplitude" 0 1 0.1; integer = Toggle "Integer" false; _result = fn s.value ma.value { fn = im_log_imask, integer = im_log_dmask; } } } } Matrix_to_matrix_item = class Menuaction "Con_vert to Matrix" "convert anything to a matrix" { action x = to_matrix x; } #separator Matrix_extract_item = class Menupullright "_Extract" "extract rows or columns from a matrix" { Rows_item = class Menuaction "_Rows" "extract rows" { action x = class _result { _vislevel = 3; first = Expression "Extract from row" 0; number = Expression "Extract this many rows" 1; _result = map_unary process x { process x = extract_area 0 first (get_width x) number x; } } } Columns_item = class Menuaction "_Columns" "extract columns" { action x = class _result { _vislevel = 3; first = Expression "Extract from column" 0; number = Expression "Extract this many columns" 1; _result = map_unary process x { process mat = extract_area first 0 number (get_height x) x; } } } Area_item = class Menuaction "_Area" "extract area" { action x = class _result { _vislevel = 3; left = Expression "First column" 0; top = Expression "First row" 0; width = Expression "Number of columns" 1; height = Expression "Number of rows" 1; _result = map_unary process x { process mat = extract_area left top width height x; } } } Diagonal_item = class Menuaction "_Diagonal" "extract diagonal" { action x = class _result { _vislevel = 3; which = Option "Extract" [ "Leading Diagonal", "Trailing Diagonal" ] 0; _result = map_unary process x { process mat = mat.Matrix_base (map2 extr [0..] mat.value), which == 0 = mat.Matrix_base (map2 extr [mat.width - 1, mat.width - 2 .. 0] mat.value); extr n l = [l?n]; } } } } Matrix_insert_item = class Menupullright "_Insert" "insert rows or columns into a matrix" { // make a new 8-bit uchar image of wxh with pixels set to p // use to generate new cells newim w h p = image_new w h 1 Image_format.UCHAR Image_coding.NOCODING Image_type.B_W p 0 0; Rows_item = class Menuaction "_Rows" "insert rows" { action x = class _result { _vislevel = 3; first = Expression "Insert at row" 0; number = Expression "Insert this many rows" 1; item = Expression "Set new cells to" 0; _result = map_unary process x { process x = foldl1 join_tb (concat [top, new, bottom]) { top = [extract_area 0 0 w f x], f > 0 = []; new = [(if is_Matrix x then to_matrix else id) (newim w number item.expr)]; bottom = [extract_area 0 f w (h - f) x], f < h = []; f = to_real first; w = get_width x; h = get_height x; } } } } Columns_item = class Menuaction "_Columns" "insert columns" { action x = class _result { _vislevel = 3; first = Expression "Insert at column" 0; number = Expression "Insert this many columns" 1; item = Expression "Set new cells to" 0; _result = map_unary process x { process x = foldl1 join_lr (concat [left, new, right]) { left = [extract_area 0 0 f h x], f > 0 = []; new = [(if is_Matrix x then to_matrix else id) (newim number h item.expr)]; right = [extract_area f 0 (w - f) h x], f < w = []; f = to_real first; w = get_width x; h = get_height x; } } } } } Matrix_delete_item = class Menupullright "_Delete" "delete rows or columns from a matrix" { // remove number of items, starting at first delete first number l = take (to_real first) l ++ drop (to_real first + to_real number) l; Rows_item = class Menuaction "_Rows" "delete rows" { action x = class _result { _vislevel = 3; first = Expression "Delete from row" 0; number = Expression "Delete this many rows" 1; _result = map_unary process x { process x = foldl1 join_tb (concat [top, bottom]) { top = [extract_area 0 0 w f x], f > 0 = []; bottom = [extract_area 0 b w (h - b) x], b < h = []; f = to_real first; n = to_real number; b = f + n; w = get_width x; h = get_height x; } } } } Columns_item = class Menuaction "_Columns" "delete columns" { action x = class _result { _vislevel = 3; first = Expression "Delete from column" 0; number = Expression "Delete this many columns" 1; _result = map_unary process x { process x = foldl1 join_lr (concat [left, right]) { left = [extract_area 0 0 f h x], f > 0 = []; right = [extract_area r 0 (w - r) h x], r < w = []; f = to_real first; n = to_real number; r = f + n; w = get_width x; h = get_height x; } } } } } Matrix_join = class Menupullright "_Join" "join two matricies" { Left_right_item = class Menuaction "_Left to Right" "join two matricies left-right" { action a b = map_binary join_lr a b; } Top_bottom_item = class Menuaction "_Top to Bottom" "joiin two matricies top-bottom" { action a b = map_binary join_tb a b; } } Matrix_rotate_item = class Menupullright "_Rotate" "clockwise rotation by fixed angles" { rot90 = Image_transform_item.Rotate_item.Fixed_item.Rot90_item; rot180 = Image_transform_item.Rotate_item.Fixed_item.Rot180_item; rot270 = Image_transform_item.Rotate_item.Fixed_item.Rot270_item; Matrix_rot45_item = class Menuaction "_45 Degrees" "45 degree rotate (square, odd-length-sides only)" { action x = map_unary rot45 x; } } Matrix_flip_item = Image_transform_item.Flip_item; Matrix_sort_item = class Menuaction "_Sort" "sort by column or row" { action x = class _result { _vislevel = 3; o = Option (_ "Orientation") [ _ "Sort by column", _ "Sort by row" ] 0; i = Expression (_ "Sort on index") 0; d = Option (_ "Direction") [ _ "Ascending", _ "Descending" ] 0; _result = map_unary sort x { idx = to_real i; pred a b = a?idx <= b?idx, d == 0 = a?idx >= b?idx; sort x = (x.Matrix_base @ sortc pred) x.value, o == 0 = (x.Matrix_base @ transpose @ sortc pred @ transpose) x.value; } } } #separator Matrix_invert_item = class Menuaction "In_vert" "calculate inverse matrix" { action x = map_unary (converse power (-1)) x; } Matrix_transpose_item = class Menuaction "_Transpose" "swap rows and columns" { action x = map_unary transpose x; } #separator Matrix_plot_scatter_item = class Menuaction "_Plot Scatter" "plot a scatter graph of a matrix of [x,y1,y2,..] coordinates" { action x = class _result { _check_args = [ [x, "x", check_Matrix] ]; _vislevel = 3; auto = Toggle "Auto Range" true; xmin = Expression "X range minimum" 0; xmax = Expression "X range maximum" 1; ymin = Expression "Y range minimum" 0; ymax = Expression "Y range maximum" 1; _result = Plot options ((x2b @ get_image @ to_image) x) { options = [$style => Plot_style.POINT, $format => Plot_format.XYYY] ++ range; range = [], auto = [$xmin => xmin.expr, $xmax => xmax.expr, $ymin => ymin.expr, $ymax => ymax.expr]; // matrix to image makes a 1-band mxn image // we need to put columns into bands x2b im = bandjoin (map extract_col [0 .. w - 1]) { w = get_width im; h = get_height im; b = get_bands im; extract_col x = extract_area x 0 1 h im; } } } } Matrix_plot_item = Hist_plot_item; Matrix_buildlut_item = class Menuaction "_Build LUT From Scatter" "make a lookup table from a matrix of [x,y1,y2..] coordinates" { action x = class _result { _check_args = [ [x, "x", check_Matrix] ]; _result = buildlut x; } } nip2-8.7.0/share/nip2/compat/8.3/_convert.def0000644000175000017500000004424313224651032015370 00000000000000 /* Try to make a Matrix ... works for Vector/Image/Real, plus image/real */ to_matrix x = to_matrix x.expr, is_Expression x = x, is_Matrix x = oo_unary_function to_matrix_op x, is_class x = tom x { to_matrix_op = Operator "to_matrix" tom Operator_type.COMPOUND false; tom x = Matrix (itom x), is_image x = Matrix [[x]], is_real x = Matrix [x], is_real_list x = Matrix x, is_matrix x = error (_ "bad arguments to " ++ "to_matrix"); itom i = (im_vips2mask ((double) i)).value, is_image i = error (_ "not image"); } /* Try to make an Image ... works for Vector/Matrix/Real, plus image/real * Special case for Colour ... pull out the colour_space and set Type in the * image. */ to_image x = to_image x.expr, is_Expression x = Image x.value, is_Plot x = x, is_Image x = Image (image_set_type (Image_type.colour_spaces.lookup 0 1 x.colour_space) (mtoi [x.value])), is_Colour x = oo_unary_function to_image_op x, is_class x = toi x { to_image_op = Operator "to_image" toi Operator_type.COMPOUND false; toi x = Image x, is_image x = Image (mtoi [[x]]), is_real x = Image (mtoi [x]), is_real_list x = Image (mtoi x), is_matrix x = error (_ "bad arguments to " ++ "to_image"); // [[real]] -> image mtoi m = im_mask2vips (Matrix m), width != 3 = joinup (im_mask2vips (Matrix m)) { width = len m?0; height = len m; joinup i = b1 ++ b2 ++ b3 { b1 = extract_area 0 0 1 height i; b2 = extract_area 1 0 1 height i; b3 = extract_area 2 0 1 height i; } } } // like to_image, but we do 1x1 pixel + x, then embed it up // always make an unwrapped image for speed ... this gets used by ifthenelse // and stuff like that // format can be NULL, meaning set format from x to_image_size width height bands format x = x, is_image x = x.value, is_Image x = im'' { // we want x to set the target format if we don't have one, so we // can't use image_new im = im_black 1 1 bands + x; im' = clip2fmt format im, format != NULL = im; im'' = embed 1 0 0 width height im'; } /* Try to make a Colour. */ to_colour x = to_colour x.expr, is_Expression x = x, is_Colour x = to_colour (extract_area x.left x.top 1 1 x.image), is_Mark x = oo_unary_function to_colour_op x, is_class x = toc x { to_colour_op = Operator "to_colour" toc Operator_type.COMPOUND false; toc x = Colour (colour_space (get_type x)) (map mean (bandsplit (get_image x))), has_image x && has_type x = Colour "sRGB" [x, x, x], is_real x // since Colour can't do mono = Colour "sRGB" x, is_real_list x && is_list_len 3 x = map toc x, is_matrix x = error (_ "bad arguments to " ++ "to_colour"); colour_space type = table.get_name type, table.has_name type = error (_ "unable to make Colour from " ++ table.get_name type ++ _ " image") { table = Image_type.colour_spaces; } } /* Try to make a real. (not a Real!) */ to_real x = to_real x.expr, is_Expression x = oo_unary_function to_real_op x, is_class x = tor x { to_real_op = Operator "to_real" tor Operator_type.COMPOUND false; tor x = x, is_real x = abs x, is_complex x = 1, is_bool x && x = 0, is_bool x && !x = error (_ "bad arguments to " ++ "to_real"); } to_int x = (int) (to_real x); /* Try to make a list ... ungroup, basically. We remove the innermost layer of * Groups. */ to_list x = x.value, is_Group x && !contains_Group x.value = Group (map to_list x.value), is_Group x = x; /* Try to make a group. The outermost list objects become Group()'d. */ to_group x = Group x, is_list x = Group (map to_group x.value), is_Group x = x; /* Parse a positive integer. */ parse_pint l = foldl acc 0 l { acc sofar ch = sofar * 10 + parse_c ch; /* Turn a char digit to a number. */ parse_c ch = error (_ "not a digit"), !is_digit ch = (int) ch - (int) '0'; } /* Parse an integer, with an optional sign character. */ parse_int l = error (_ "badly formed number"), !is_list_len 2 parts = sign * n { parts = splitpl [member "+-", is_digit] l; n = parse_pint parts?1; sign = 1, parts?0 == [] || parts?0 == "+" = -1; } /* Parse a float. * [+-]?[0-9]*([.][0-9]*)?(e[0-9]+)? */ parse_float l = err, !is_list_len 4 parts = sign * (abs ipart + fpart) * 10 ** exp { err = error (_ "badly formed number"); parts = splitpl [ member "+-0123456789", member ".0123456789", member "eE", member "+-0123456789" ] l; ipart = parse_int parts?0; sign = 1, ipart > 0 = -1; fpart = 0, parts?1 == []; = err, parts?1?0 != '.' = parse_pint (tl parts?1) / 10 ** (len parts?1 - 1); exp = 0, parts?2 == [] && parts?3 == [] = err, parts?2 == [] = parse_int parts?3; } /* Parse a time in "hh:mm:ss" into seconds. We could do this in one line :) = (sum @ map2 multiply (iterate (multiply 60) 1) @ reverse @ map parse_pint @ map (subscript (splitpl [is_digit, equal ':', is_digit, equal ':', is_digit] l))) [0,2,4]; but it's totally unreadable. */ parse_time l = error (_ "badly formed time"), !is_list_len 5 parts = s + 60 * m + 60 * 60 * h { parts = splitpl [is_digit, equal ':', is_digit, equal ':', is_digit] l; h = parse_int parts?0; m = parse_int parts?2; s = parse_int parts?4; } /* matrix to convert D65 XYZ to D50 XYZ ... direct conversion, found by * measuring a macbeth chart in D50 and D65 and doing a LMS to get a matrix */ D652D50_direct = Matrix [[ 1.13529, -0.0604663, -0.0606321 ], [ 0.0975399, 0.935024, -0.0256156 ], [ -0.0336428, 0.0414702, 0.994135 ]]; D502D65_direct = D652D50_direct ** -1; /* Convert normalised XYZ to bradford RGB. */ XYZ2RGBbrad = Matrix [[0.8951, 0.2664, -0.1614], [-0.7502, 1.7135, 0.0367], [0.0389, -0.0685, 1.0296]]; /* Convert bradford RGB to normalised XYZ. */ RGBbrad2XYZ = XYZ2RGBbrad ** -1; D93_whitepoint = Vector [89.7400, 100, 130.7700]; D75_whitepoint = Vector [94.9682, 100, 122.5710]; D65_whitepoint = Vector [95.0470, 100, 108.8827]; D55_whitepoint = Vector [95.6831, 100, 92.0871]; D50_whitepoint = Vector [96.4250, 100, 82.4680]; A_whitepoint = Vector [109.8503, 100, 35.5849]; // 2856K B_whitepoint = Vector [99.0720, 100, 85.2230]; // 4874K C_whitepoint = Vector [98.0700, 100, 118.2300]; // 6774K E_whitepoint = Vector [100, 100, 100]; // ill. free D3250_whitepoint = Vector [105.6590, 100, 45.8501]; Whitepoints = Enum [ $D93 => D93_whitepoint, $D75 => D75_whitepoint, $D65 => D65_whitepoint, $D55 => D55_whitepoint, $D50 => D50_whitepoint, $A => A_whitepoint, $B => B_whitepoint, $C => C_whitepoint, $E => E_whitepoint, $D3250 => D3250_whitepoint ]; /* Convert D50 XYZ to D65 using the bradford chromatic adaptation approx. */ im_D502D65 xyz = xyz''' { xyz' = xyz / D50_whitepoint; rgb = recomb XYZ2RGBbrad xyz'; // move white in bradford RGB rgb' = rgb / Vector [0.94, 1.02, 1.33]; xyz'' = recomb RGBbrad2XYZ rgb'; // back to D65 xyz''' = xyz'' * D65_whitepoint; } /* Convert D65 XYZ to D50 using the bradford approx. */ im_D652D50 xyz = xyz''' { xyz' = xyz / D65_whitepoint; rgb = recomb XYZ2RGBbrad xyz'; // move white in bradford RGB rgb' = rgb * Vector [0.94, 1.02, 1.33]; xyz'' = recomb RGBbrad2XYZ rgb'; xyz''' = xyz'' * D50_whitepoint; } /* Convert D50 XYZ to Lab. */ im_D50XYZ2Lab xyz = im_XYZ2Lab_temp xyz D50_whitepoint.value?0 D50_whitepoint.value?1 D50_whitepoint.value?2; im_D50Lab2XYZ lab = im_Lab2XYZ_temp lab D50_whitepoint.value?0 D50_whitepoint.value?1 D50_whitepoint.value?2; /* ... and mono conversions */ im_sRGB2mono in = (image_set_type Image_type.B_W @ clip2fmt (get_header "BandFmt" in) @ recomb (Matrix [[.3, .6, .1]])) in; im_mono2sRGB in = image_set_type Image_type.sRGB (in ++ in ++ in); im_sRGB2Lab = im_XYZ2Lab @ im_sRGB2XYZ; im_Lab2sRGB = im_XYZ2sRGB @ im_Lab2XYZ; // from the 16 bit RGB and GREY formats im_1628 x = im_clip (x >> 8); im_162f x = x / 256; im_8216 x = (im_clip2us x) << 8; im_f216 x = im_clip2us (x * 256); im_RGB162GREY16 in = (image_set_type Image_type.GREY16 @ clip2fmt (get_header "BandFmt" in) @ recomb (Matrix [[.3, .6, .1]])) in; im_GREY162RGB16 in = image_set_type Image_type.RGB16 (in ++ in ++ in); /* apply a func to an image ... make it 1 or 3 bands, and reapply other bands * on the way out. Except if it's LABPACK. */ colour_apply fn x = fn x, b == 1 || b == 3 || c == Image_coding.LABPACK = x'' { b = get_bands x; c = get_coding x; first = extract_bands 0 3 x, b > 3 = extract_bands 0 1 x; tail = extract_bands 3 (b - 3) x, b > 3 = extract_bands 1 (b - 1) x; x' = fn first; x'' = x' ++ clip2fmt (get_format x') tail; } /* Any 1-ary colour op, applied to Vector/Image/Matrix or image */ colour_unary fn x = oo_unary_function colour_op x, is_class x = colour_apply fn x, is_image x = colour_apply fn [x], is_real x = error (_ "bad arguments to " ++ "colour_unary") { // COMPOUND_REWRAP ... signal to the colour class to go to image and // back colour_op = Operator "colour_unary" colour_object Operator_type.COMPOUND_REWRAP false; colour_object x = colour_real_list x, is_real_list x = map colour_real_list x, is_matrix x = colour_apply fn x, is_image x = error (_ "bad arguments to " ++ "colour_unary"); colour_real_list l = (to_matrix (fn (float) (to_image (Vector l)).value)).value?0; } /* Any symmetric 2-ary colour op, applied to Vector/Image/Matrix or image ... * name is op name for error messages etc. */ colour_binary name fn x y = oo_binary_function colour_op x y, is_class x = oo_binary'_function colour_op x y, is_class y = fn x y, is_image x && is_image y = error (_ "bad arguments to " ++ name) { colour_op = Operator name colour_object Operator_type.COMPOUND_REWRAP true; colour_object x y = fn x y, is_image x && is_image y = colour_real_list fn x y, is_real_list x && is_real_list y = map (colour_real_list fn x) y, is_real_list x && is_matrix y = map (colour_real_list (converse fn) y) x, is_matrix x && is_real_list y = map2 (colour_real_list fn) x y, is_matrix x && is_matrix y = error (_ "bad arguments to " ++ name); colour_real_list fn l1 l2 = (to_matrix (fn i1 i2)).value?0 { i1 = (float) (to_image (Vector l1)).value; i2 = (float) (to_image (Vector l2)).value; } } _colour_conversion_table = [ /* Lines are [space-from, space-to, conversion function]. Could do * this as a big array, but table lookup feels safer. */ [B_W, B_W, image_set_type B_W], [B_W, XYZ, im_sRGB2XYZ @ im_mono2sRGB @ im_clip], [B_W, YXY, im_XYZ2Yxy @ im_sRGB2XYZ @ im_mono2sRGB @ im_clip], [B_W, LAB, im_sRGB2Lab @ im_mono2sRGB @ im_clip], [B_W, LCH, im_Lab2LCh @ im_sRGB2Lab @ im_mono2sRGB @ im_clip], [B_W, UCS, im_XYZ2UCS @ im_sRGB2XYZ @ im_mono2sRGB @ im_clip], [B_W, RGB, im_XYZ2disp @ im_sRGB2XYZ @ im_mono2sRGB @ im_clip], [B_W, sRGB, im_mono2sRGB @ im_clip], [B_W, RGB16, image_set_type RGB16 @ im_8216 @ im_mono2sRGB], [B_W, GREY16, image_set_type GREY16 @ im_8216], [B_W, LABQ, im_Lab2LabQ @ im_sRGB2Lab @ im_mono2sRGB @ im_clip], [B_W, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_sRGB2Lab @ im_mono2sRGB @ im_clip], [XYZ, B_W, im_sRGB2mono @ im_XYZ2sRGB @ im_clip2f], [XYZ, XYZ, image_set_type XYZ], [XYZ, YXY, im_XYZ2Yxy @ im_clip2f], [XYZ, LAB, im_XYZ2Lab @ im_clip2f], [XYZ, LCH, im_Lab2LCh @ im_XYZ2Lab], [XYZ, UCS, im_XYZ2UCS @ im_clip2f], [XYZ, RGB, im_XYZ2disp @ im_clip2f], [XYZ, sRGB, im_XYZ2sRGB @ im_clip2f], [XYZ, LABQ, im_Lab2LabQ @ im_XYZ2Lab @ im_clip2f], [XYZ, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_XYZ2Lab @ im_clip2f], [YXY, B_W, im_sRGB2mono @ im_XYZ2sRGB @ im_Yxy2XYZ @ im_clip2f], [YXY, XYZ, im_Yxy2XYZ @ im_clip2f], [YXY, YXY, image_set_type YXY], [YXY, LAB, im_XYZ2Lab @ im_Yxy2XYZ @ im_clip2f], [YXY, LCH, im_Lab2LCh @ im_XYZ2Lab @ im_Yxy2XYZ @ im_clip2f], [YXY, UCS, im_XYZ2UCS @ im_Yxy2XYZ @ im_clip2f], [YXY, RGB, im_XYZ2disp @ im_Yxy2XYZ @ im_clip2f], [YXY, sRGB, im_XYZ2sRGB @ im_Yxy2XYZ @ im_clip2f], [YXY, LABQ, im_Lab2LabQ @ im_XYZ2Lab @ im_Yxy2XYZ @ im_clip2f], [YXY, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_XYZ2Lab @ im_Yxy2XYZ @ im_clip2f], [LAB, B_W, im_sRGB2mono @ im_Lab2sRGB @ im_Lab2XYZ @ im_clip2f], [LAB, XYZ, im_Lab2XYZ @ im_clip2f], [LAB, YXY, im_XYZ2Yxy @ im_Lab2XYZ @ im_clip2f], [LAB, LAB, image_set_type LAB @ im_clip2f], [LAB, LCH, im_Lab2LCh @ im_clip2f], [LAB, UCS, im_Lab2UCS @ im_clip2f], [LAB, RGB, im_Lab2disp @ im_clip2f], [LAB, sRGB, im_Lab2sRGB @ im_clip2f], [LAB, LABQ, im_Lab2LabQ @ im_clip2f], [LAB, LABS, im_Lab2LabS @ im_clip2f], [LCH, B_W, im_sRGB2mono @ im_Lab2sRGB @ im_LCh2Lab @ im_clip2f], [LCH, XYZ, im_Lab2XYZ @ im_LCh2Lab @ im_clip2f], [LCH, YXY, im_XYZ2Yxy @ im_Lab2XYZ @ im_LCh2Lab @ im_clip2f], [LCH, LAB, im_LCh2Lab @ im_clip2f], [LCH, LCH, image_set_type LCH], [LCH, UCS, im_LCh2UCS @ im_clip2f], [LCH, RGB, im_Lab2disp @ im_LCh2Lab @ im_clip2f], [LCH, sRGB, im_Lab2sRGB @ im_LCh2Lab @ im_clip2f], [LCH, LABQ, im_Lab2LabQ @ im_LCh2Lab @ im_clip2f], [LCH, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_LCh2Lab @ im_clip2f], [UCS, B_W, im_sRGB2mono @ im_XYZ2sRGB @ im_UCS2XYZ @ im_clip2f], [UCS, XYZ, im_UCS2XYZ @ im_clip2f], [UCS, YXY, im_XYZ2Yxy @ im_Lab2XYZ @ im_UCS2Lab @ im_clip2f], [UCS, LAB, im_UCS2Lab @ im_clip2f], [UCS, LCH, im_UCS2LCh @ im_clip2f], [UCS, UCS, image_set_type UCS], [UCS, RGB, im_Lab2disp @ im_UCS2Lab @ im_clip2f], [UCS, sRGB, im_Lab2sRGB @ im_UCS2Lab @ im_clip2f], [UCS, LABQ, im_Lab2LabQ @ im_UCS2Lab @ im_clip2f], [UCS, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_UCS2Lab @ im_clip2f], [RGB, B_W, im_sRGB2mono @ im_XYZ2sRGB @ im_disp2XYZ @ im_clip], [RGB, XYZ, im_disp2XYZ @ im_clip], [RGB, YXY, im_XYZ2Yxy @ im_disp2XYZ @ im_clip], [RGB, LAB, im_disp2Lab @ im_clip], [RGB, LCH, im_Lab2LCh @ im_disp2Lab @ im_clip], [RGB, UCS, im_Lab2UCS @ im_disp2Lab @ im_clip], [RGB, RGB, image_set_type RGB], [RGB, sRGB, im_XYZ2sRGB @ im_disp2XYZ @ im_clip], [RGB, RGB16, image_set_type RGB16 @ im_8216], [RGB, GREY16, image_set_type GREY16 @ im_8216 @ im_sRGB2mono], [RGB, LABQ, im_Lab2LabQ @ im_disp2Lab @ im_clip], [RGB, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_disp2Lab @ im_clip], [sRGB, B_W, im_sRGB2mono], [sRGB, XYZ, im_sRGB2XYZ @ im_clip], [sRGB, YXY, im_XYZ2Yxy @ im_sRGB2XYZ @ im_clip], [sRGB, LAB, im_sRGB2Lab @ im_clip], [sRGB, LCH, im_Lab2LCh @ im_sRGB2Lab @ im_clip], [sRGB, UCS, im_XYZ2UCS @ im_sRGB2XYZ @ im_clip], [sRGB, RGB, im_XYZ2disp @ im_sRGB2XYZ @ im_clip], [sRGB, sRGB, image_set_type sRGB], [sRGB, RGB16, image_set_type RGB16 @ im_8216], [sRGB, GREY16, image_set_type GREY16 @ im_8216 @ im_sRGB2mono], [sRGB, LABQ, im_Lab2LabQ @ im_sRGB2Lab @ im_clip], [sRGB, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_sRGB2Lab @ im_clip], [RGB16, B_W, im_1628 @ im_sRGB2mono], [RGB16, RGB, image_set_type RGB @ im_1628], [RGB16, sRGB, image_set_type sRGB @ im_1628], [RGB16, RGB16, image_set_type RGB16], [RGB16, GREY16, im_RGB162GREY16], [RGB16, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_sRGB2Lab], [GREY16, B_W, image_set_type B_W @ im_1628], [GREY16, RGB, im_mono2sRGB @ im_1628], [GREY16, sRGB, im_mono2sRGB @ im_1628], [GREY16, RGB16, im_GREY162RGB16], [GREY16, GREY16, image_set_type GREY16], [LABQ, B_W, im_sRGB2mono @ im_Lab2sRGB @ im_LabQ2Lab], [LABQ, XYZ, im_Lab2XYZ @ im_LabQ2Lab], [LABQ, YXY, im_XYZ2Yxy @ im_Lab2XYZ @ im_LabQ2Lab], [LABQ, LAB, im_LabQ2Lab], [LABQ, LCH, im_Lab2LCh @ im_LabQ2Lab], [LABQ, UCS, im_Lab2UCS @ im_LabQ2Lab], [LABQ, RGB, im_LabQ2disp], [LABQ, sRGB, im_Lab2sRGB @ im_LabQ2Lab], [LABQ, LABQ, image_set_type LABQ], [LABQ, LABS, im_LabQ2LabS], [LABS, B_W, im_sRGB2mono @ im_Lab2sRGB @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, XYZ, im_Lab2XYZ @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, YXY, im_XYZ2Yxy @ im_Lab2XYZ @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, LAB, im_LabS2Lab], [LABS, LCH, im_Lab2LCh @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, UCS, im_Lab2UCS @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, RGB, im_LabQ2disp @ im_LabS2LabQ @ im_clip2s], [LABS, sRGB, im_XYZ2sRGB @ im_Lab2XYZ @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, LABQ, im_LabS2LabQ @ im_clip2s], [LABS, LABS, image_set_type LABS] ] { /* From Image_type ... repeat here for brevity. Use same ordering as * in Colour menu for consistency. */ B_W = 1; XYZ = 12; YXY = 23; LAB = 13; LCH = 19; UCS = 18; RGB = 17; sRGB = 22; RGB16 = 25; GREY16 = 26; LABQ = 16; LABS = 21; } /* Transform between two colour spaces. */ colour_transform from to in = colour_unary _colour_conversion_table?i?2 in, i >= 0 = error (_ "unable to convert " ++ Image_type.type_names.get_name from ++ _ " to " ++ Image_type.type_names.get_name to) { match x = x?0 == from && x?1 == to; i = index match _colour_conversion_table; } /* Transform to a colour space, assuming the type field in the input is * correct */ colour_transform_to to in = colour_transform (get_type in) to in; /* String for path separator on this platform. */ path_separator = expand "$SEP"; /* Form a relative pathname. * path_relative ["home", "john"] == "home/john" * path_relative [] == "" */ path_relative l = join_sep path_separator l; /* Form an absolute pathname. * path_absolute ["home", "john"] == "/home/john" * path_absolute [] == "/" * If the first component looks like 'A:', don't add an initial separator. */ path_absolute l = path_relative l, len l?0 > 1 && is_letter l?0?0 && l?0?1 == ':' = path_separator ++ path_relative l; /* Parse a pathname. * path_parse "/home/john" == ["home", "john"] * path_parse "home/john" == ["home", "john"] */ path_parse str = split (equal path_separator?0) str; /* Return $PATH, reformatted as [["comp1", "comp2"], ["comp1", "comp2"] ..] */ system_search_path = [vipsbin] ++ map path_parse (split (equal path_sep) (expand "$PATH")) { /* On some platforms we ship vips with a few extra progs. Search * $VIPSHOME/bin first. */ vipsbin = path_parse (expand "$VIPSHOME") ++ ["bin"]; path_sep = ':', expand "$SEP" == "/" = ';'; } /* Search $PATH for the first occurence of name, or "". */ search_for name = hits?0, hits != [] = "" { exe_name = name ++ expand "$EXEEXT"; form_path p = path_absolute (p ++ [exe_name]); paths = map form_path system_search_path; hits = dropwhile (equal []) (map search paths); } /* Search $PATH for the first occurence of name, error on failure. */ search_for_error name = path, path != "" = error (exe_name ++ " not found on your search path. " ++ "Check you have installed the program and it is on your PATH.") { exe_name = name ++ expand "$EXEEXT"; path = search_for name; } nip2-8.7.0/share/nip2/compat/8.3/_joe_utilities.def0000644000175000017500000005054513224651032016562 00000000000000/* ******Functions included in start/_NG_utilities.def:****** * * so_balance ref_meanmax im1 im2 mask blur gauss * * nonzero_mean im = no_out * * so_meanmax im = result * * so_calculate ref_meanmax im mask = result * * simple_frame frame im_w im_h ov cs ms bf option = result * * corner_frame frame im_w im_h ov cs ms bf = result * * build_frame r_tl r_tr r_bl r_br r_mt r_mb r_ml r_mr im_w im_h ov bf = result * * complex_frame frame im_w im_h ov cs es ms bf option= result * * complex_edge ra rb t bl d = rc * * frame_lr_min r_l r_r target bw = result * * frame_tb_min r_t r_b target bw = result * * frame_position_image im ref os colour= result * * merge_array bw arr = result * * merge_to_scale im target blend dir = result * * select_ellipse line width = mask * * select_tetragon p1 p2 p3 p4 = mask * * select_polygon pt_list = mask * * perspective_transform to from = trans'' * * sort_pts_clockwise l = l'' * */ /* Called from: * _NG_Extra.def Clone_area_item */ so_balance ref_meanmax im1 im2 mask gauss = result { //ref_meanmax = so_meanmax im1; so_values = so_calculate ref_meanmax im2 mask; im2_cor_a = clip2fmt im2.format im2'', has_member "format" im2 = im2'' {im2'' = im2 * (so_values?0) + (so_values?1);} // Option to convert replacement image to scaled gaussian noise im2_cor = im2_cor_a, gauss == false = clip2fmt im2_cor_a.format gauss_im {gauss_im = im_gaussnoise im2_cor_a.width im2_cor_a.height ref_meanmax?0 (deviation im2_cor_a);} result = im_blend (get_image mask) (get_image im2_cor) (get_image im1); }; //////////////////////////////////////////////////////////////////////////////// /* Calculates the mean of the non zero pixels. * * Called from: * _NG_utilities so_meanmax */ nonzero_mean im = no_out { zero_im = (im == 0); zero_mean = mean zero_im; no_mean = mean im; no_out = no_mean/(1 - (zero_mean/255)); }; //////////////////////////////////////////////////////////////////////////////// /* Calculates the max and nonzero mean of an image * * Called from: * _NG_utilities so_balance * _NG_utilities so_calculate * _NG_Extra.def Clone_area_item * _NG_Extra.def Balance_item.Balance_find_item */ so_meanmax im = result { mean_of_im = nonzero_mean im; adjusted_im = im - mean_of_im; max_of_im = max adjusted_im; result = [mean_of_im, max_of_im]; }; //////////////////////////////////////////////////////////////////////////////// /* Calculates the scale and offset required to match a reference mean and max * * Called from: * _NG_utilities so_balance * _NG_Extra.def Balance_item.Balance_find_item */ so_calculate ref_meanmax im mask = result { im' = if mask then im else 0; im_values = so_meanmax im'; mean_of_ref = ref_meanmax?0; mean_of_im = im_values?0; max_of_ref = ref_meanmax?1; max_of_im = im_values?1; scale = (max_of_ref)/(max_of_im); offset = mean_of_ref - (mean_of_im * scale); result = [ scale, offset ]; }; //////////////////////////////////////////////////////////////////////////////// /* Extends or shortens the central sections of a simple frame to fit round a given image. * * Called from: * _NG_Extra.def Frame_item.Simple_frame_item */ simple_frame frame im_w im_h ov cs ms bf option = result { cs' = (1 - cs); ms' = (0.5 - (ms/2)); ms'' = (1 - cs); //Regions r_tl = Region_relative frame 0 0 cs cs; r_tr = fliplr r_tl, option == true = Region_relative frame cs' 0 cs cs; r_bl = Region_relative frame 0 cs' cs cs; r_br = fliplr r_bl, option == true = Region_relative frame cs' cs' cs cs; r_mt = Region_relative frame ms' 0 ms cs; r_mb = Region_relative frame ms' ms'' ms cs; r_ml = Region_relative frame 0 ms' cs ms; r_mr = fliplr r_ml, option == true = Region_relative frame ms'' ms' cs ms; result = build_frame r_tl r_tr r_bl r_br r_mt r_mb r_ml r_mr im_w im_h ov bf; }; //////////////////////////////////////////////////////////////////////////////// /* Copies and extends a simple frame corner to produce a complete frame to fit round a given image. * * Called from: * _NG_Extra.def Frame_item.Frame_corner_item */ corner_frame frame im_w im_h ov cs ms bf = result { cs' = (1 - cs); ms' = (0.5 - (ms/2)); //Regions r_tl = Region_relative frame 0 0 cs cs; r_tr = fliplr r_tl; r_bl = fliptb r_tl; r_br = fliplr r_bl; r_mt = Region_relative frame ms' 0 ms cs; r_mb = fliptb r_mt; r_ml = Region_relative frame 0 ms' cs ms;; r_mr = fliplr r_ml; result = build_frame r_tl r_tr r_bl r_br r_mt r_mb r_ml r_mr im_w im_h ov bf; }; //////////////////////////////////////////////////////////////////////////////// /* Completes the frame building process for simple_frame and corner_frame. * * _NG_utilities simple_frame * _NG_utilities corner_frame */ build_frame r_tl r_tr r_bl r_br r_mt r_mb r_ml r_mr im_w im_h ov bf = result { //Find pixel thickness of frames section s_width = r_ml.width - mean (im_profile (map_unary fliplr (r_ml.value)?0) 1); s_height = r_mt.height - mean (im_profile (map_unary fliptb (r_mt.value)?0) 0); w_target = im_w + (2 * (s_width - ov)); h_target = im_h + (2 * (s_height - ov)); blend = bf * r_tl.width; cw_target = w_target - (2 * r_tl.width) + (2 * blend), w_target > (2 * r_tl.width) = w_target; ch_target = h_target - (2 * r_tl.height) + (2 * blend), h_target > (2 * r_tl.height) = h_target; //Use regions to produce sections top = merge_to_scale r_mt cw_target blend 0; bottom = merge_to_scale r_mb cw_target blend 0; left = merge_to_scale r_ml ch_target blend 1; right = merge_to_scale r_mr ch_target blend 1; middle = Image (image_new cw_target ch_target left.bands left.format left.coding left.type 0 0 0); //Build sections into full frame. row_1 = frame_lr_min r_tl r_tr w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[r_tl, top, r_tr]]; row_2 = frame_lr_min left right w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[left, middle, right]]; row_3 = frame_lr_min r_bl r_br w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[r_bl, bottom, r_br]]; result = frame_tb_min row_1 row_3 h_target blend, (h_target < (r_tl.height * 2)) = merge_array blend [[row_1], [row_2], [row_3]]; }; //////////////////////////////////////////////////////////////////////////////// /* Extends or shortens the central sections of a frame, preserving any central details on each * edge, to fit round a given image. * * Called from: * _NG_Extra.def Frame_item.Complex_frame_item */ complex_frame frame im_w im_h ov cs es ms bf option= result { cs' = (1 - cs); ms' = (0.5 - (ms/2)); es' = (0.25 - (es/2)); r_tl = Region_relative frame 0 0 cs cs; r_tr = fliplr r_tl, option == true = Region_relative frame cs' 0 cs cs; r_bl = Region_relative frame 0 cs' cs cs; r_br = fliplr r_bl, option == true = Region_relative frame cs' cs' cs cs; r_mt = Region_relative frame ms' 0 ms cs; r_mb = Region_relative frame ms' cs' ms cs; r_ml = Region_relative frame 0 ms' cs ms; r_mr = fliplr r_ml, option == true = Region_relative frame cs' ms' cs ms; r_et = Region_relative frame es' 0 es cs; r_eb = Region_relative frame es' cs' es cs; r_el = Region_relative frame 0 es' cs es; r_er = fliplr r_el, option == true = Region_relative frame cs' es' cs es; //Find pixel thickness of frames section s_width = r_el.width - mean (im_profile (map_unary fliplr (r_el.value)?0) 1); s_height = r_et.height - mean (im_profile (map_unary fliptb (r_et.value)?0) 0); w_target = im_w + (2 * (s_width - ov)); h_target = im_h + (2 * (s_height - ov)); min_size = foldr1 min_pair [r_tl.width, r_tl.height, r_mt.width, r_mt.height, r_et.width, r_et.height]; blend = bf * min_size; cw_target = w_target - (2 * r_tl.width) + (2 * blend); ch_target = h_target - (2 * r_tl.height) + (2 * blend); top = complex_edge r_mt r_et cw_target blend 0; bottom = complex_edge r_mb r_eb cw_target blend 0; left = complex_edge r_ml r_el ch_target blend 1; right = complex_edge r_mr r_er ch_target blend 1; middle = Image (image_new top.width left.height left.bands left.format left.coding left.type 0 0 0); //Build regions into full frame. row_1 = frame_lr_min r_tl r_tr w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[r_tl, top, r_tr]]; row_2 = frame_lr_min left right w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[left, middle, right]]; row_3 = frame_lr_min r_bl r_br w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[r_bl, bottom, r_br]]; result = frame_tb_min row_1 row_3 h_target blend, (h_target < (r_tl.height * 2)) = merge_array blend [[row_1], [row_2], [row_3]]; }; //////////////////////////////////////////////////////////////////////////////// /* Function called by complex frame, used to produce section * * Called from: * _NG_utilities.def complex_frame */ complex_edge ra rb t bl d = rc { e1 = ceil (ra.width - t)/2, d == 0 = 0; e2 = 0, d == 0 = ceil (ra.height - t)/2; e3 = t, d == 0 = ra.width; e4 = ra.height, d == 0 = t; check = ra.width, d == 0; = ra.height; rai = get_image ra; t2 = (t - ra.width + (2 * bl))/2, d == 0 = (t - ra.height + (2 * bl))/2; rc = ra , t <= 0 = Image (im_extract_area rai e1 e2 e3 e4), t <= check = merge_array bl [[rb',ra,rb']], d == 0 = merge_array bl [[rb'],[ra],[rb']] {rb' = merge_to_scale rb t2 bl d;} }; ////////////////////////////////////////////////////////////////////////////// /* Blends two images left/right to produce an image a specific width. * * _NG_utilities build_frame * _NG_utilities complex_frame */ frame_lr_min r_l r_r target bw = result { //Calculating the new widh required for each image. no = (target/2 + bw); n_w = no, (r_l.width > no) = r_l.width; //Removing excess from what will be the middle of the final image. n_l = im_extract_area r_l.value 0 0 n_w r_l.height; n_r = im_extract_area r_r.value (r_r.width - n_w) 0 n_w r_l.height; //Merge the two image together with a bw*2 pixel overlap. result = Image (im_lrmerge n_l n_r ((bw*2) - n_w) 0 bw); }; ////////////////////////////////////////////////////////////////////////////// /* Blends two images top/bottom to produce an image a specific width. * * _NG_utilities build_frame * _NG_utilities complex_frame */ frame_tb_min r_t r_b target bw = result { //Calculating the new height required for each image. no = (target/2 + bw); n_h = no, (r_t.height > no) = r_t.height; //Removing excess from what will be the middle of the final image. n_t = im_extract_area r_t.value 0 0 r_t.width n_h; n_b = im_extract_area r_b.value 0 (r_b.height - n_h) r_b.width n_h; //Merge the two image together with a 50 pixel overlap. result = Image (im_tbmerge n_t n_b 0 ((bw*2) -n_h) bw); }; ////////////////////////////////////////////////////////////////////////////// /* Resixe canvas of an image to accomodate a frame and possible mount * * Called from: * _NG_Extra.def Frame_item.Frame_corner_item * _NG_Extra.def Frame_item.Simple_frame_item * _NG_Extra.def Frame_item.Complex_frame_item */ frame_position_image im ref os colour= result { background = image_new ref.width ref.height im.bands im.format im.coding im.type colour 0 0; result = insert_noexpand xp yp im background { xp = (ref.width - im.width)/2; yp = (ref.height - im.height - os)/2; } }; ////////////////////////////////////////////////////////////////////////////// /* Merges an array of images together according to blend width bw * * Called from: * _NG_Utilites.def build_frame * _NG_Utilites.def complex_frame * _NG_Utilites.def complex_edge */ merge_array bw arr = result { merge_lr bw im1 im2 = im3 { bw' = get_header "Xsize" (get_image im1); bw'' = -(bw' - bw); im3 = im_lrmerge (get_image im1) (get_image im2) bw'' 0 bw; } merge_tb bw im1 im2 = im3 { bw' = get_header "Ysize" (get_image im1); bw'' = -(bw' - bw); im3 = im_tbmerge (get_image im1) (get_image im2) 0 bw'' bw; } im_out = (image_set_origin 0 0 @ foldl1 (merge_tb bw) @ map (foldl1 (merge_lr bw))) arr; result = Image im_out; }; ////////////////////////////////////////////////////////////////////////////// /* Repeatably top/bottom add clones of im, with a defined overlap, until final height > target * * Called from: * _NG_Utilites.def build_frame * _NG_Utilites.def complex_edge */ merge_to_scale im target blend dir = result { blend' = floor blend; //allow fir lr or tb process var_a = im.width, dir == 0 = im.height; var_w = im.width, dir == 1 = target, target > blend' = blend'; var_h = im.height, dir == 0 = target, target > blend' = blend'; //total numner of copies of im requires, taking overlap into account. no_loops = ceil ((log ((target - blend')/(var_a - blend')))/(log 2)); process im no = result { pr_a = get_header "Xsize" (get_image im), dir == 0 = get_header "Ysize" (get_image im); pr_b = -(pr_a - blend' + 1); im' = im_lrmerge (get_image im) (get_image im) pr_b 0 blend', dir == 0 = im_tbmerge (get_image im) (get_image im) 0 pr_b blend'; no' = no - 1; result = im', no' < 1 = process im' no'; } im_tmp = im.value, var_a > target = process im no_loops; result = Image (im_extract_area (get_image im_tmp) 0 0 var_w var_h); }; ////////////////////////////////////////////////////////////////////////////// /* Selects an elispe based on a line and a width * * Called from: * _NG_Extra.def Select_item.Elipse */ select_ellipse line width = mask { im = Image (get_image line); //Make a 2 band image whose value equals its coordinates. im_coor = Image (make_xy im.width im.height); //Adjust the values to center tham on (line.left, line.top) im_cent = im_coor - Vector [line.left,line.top]; w = line.width; h = line.height; angle = 270, w == 0 && h < 0 = 90, w == 0 && h >= 0 = 360 + atan (h/w), w > 0 && h < 0 = atan (h/w), w > 0 && h >= 0 = 180 + atan (h/w); a = ( (h ** 2) + (w ** 2) )**0.5; b = a * width; x' = ( (cos angle) * im_cent?0) + ( (sin angle) * im_cent?1); y' = ( (cos angle) * im_cent?1) - ( (sin angle) * im_cent?0); mask = ( (b**2) * (x'**2) ) + ( (a**2) * (y'**2) ) <= (a * b)**2; }; ////////////////////////////////////////////////////////////////////////////// /* Selects a tetragon based on four points. * * Called from: * _NG_Extra.def Select_item.Tetragon * _NG_Extra.def Perspective_item */ select_tetragon p1 p2 p3 p4 = mask { //Put points in clockwise order starting at the top left. pt_list = sort_pts_clockwise [p1, p2, p3, p4]; pair_list = [ [ pt_list?0, pt_list?1 ], [ pt_list?1, pt_list?2 ], [ pt_list?2, pt_list?3 ], [ pt_list?3, pt_list?0 ] ]; //Make xy image the same size as p1.image; im_xy = Image (make_xy p1.image.width p1.image.height); white = Image (image_new p1.image.width p1.image.height 1 0 Image_coding.NOCODING 1 255 0 0); mask = foldl process white pair_list; /* Treat each pair of point as a vector going from p1 to p2, * then select all to right of line. This is done for each pair, * the results are all combined to select the area defined by * the four points. */ process im_in pair = im_out { x = (pair?0).left; y = (pair?0).top; x'= (pair?1).left; y'= (pair?1).top; w = x' - x; h = y' - y; m = 0, x == x' = (y-y')/(x-x'); c = 0, x == x' = ((y*x') - (y'*x))/(x' - x); mask= im_xy?1 - (im_xy?0 * m) >= c, w > 0 = im_xy?1 - (im_xy?0 * m) <= c, w < 0 = im_xy?0 <= x, w == 0 && h > 0 = im_xy?0 >= x; im_out = im_in & mask; } }; ////////////////////////////////////////////////////////////////////////////// /* Selects a tetragon based on four points. * * Called from: * _NG_Extra.def Select_item.Polygon */ select_polygon pt_list = mask { group_check = is_Group pt_list; pt_l = pt_list.value, group_check = pt_list; im = Image (get_image (pt_l?0)); im_xy = Image (make_xy im.width im.height); black = Image (image_new im_xy.width im_xy.height 1 0 Image_coding.NOCODING 1 0 0 0); x = im_xy?0; y = im_xy?1; pt_l' = grp_trip pt_l; mask = foldl process black pt_l'; /*Takes a group adds the first two the end and then creates a lists of *lists [[a, b, c], [b, c, d] .... [x, a, b]] */ grp_trip l = l'' { px = take 2 l; l' = join l px; start = [(take 3 l')]; rest = drop 3 l'; process a b = c { x = (last a)?1; x'= (last a)?2; x'' = [[x, x', b]]; c = join a x''; } l'' = foldl process start rest; }; process im_in triplet = im_out { p1 = triplet?0; p2 = triplet?1; p3 = triplet?2; //check for change in x direction between p1-p2 and p2 -p3 dir_1 = sign (p2.left - p1.left); dir_2 = sign (p3.left - p2.left); dir = dir_1 + dir_2; //define min x limit. min_x = p1.left, p1.left < p2.left = p2.left + 1, dir != 0 = p2.left; //define max x limit. max_x = p1.left, p1.left > p2.left = p2.left - 1, dir != 0 = p2.left; //equation of line defined by p1 and p2 m = line_m p1 p2; c = line_c p1 p2; //Every thing below the line im_test = ((y >= (m * x) + c) & (x >= min_x) & (x <= max_x)); im_out = im_in ^ im_test; } line_c p1 p2 = c {m = line_m p1 p2; c = p1.top - (m * p1.left);}; line_m p1 p2 = (p2.top - p1.top)/(p2.left - p1.left), p2.left != p1.left = 0; }; ////////////////////////////////////////////////////////////////////////////// /* Selects a tetragon based on four points. * * Called from: * _NG_Extra.def Perspective_match_item * _NG_Extra.def Perspective_item */ perspective_transform to from = trans'' { /* * Tramsformation matrix is calculated on the bases of the following functions: * x' = c0x + c1y + c2xy + c3 * y' = c4x + c5y + c6xy + c7 * * The functions used in vips im_transform works based on the functions: * x = x' + b0 + b2x' + b4y' + b6x'y' * y = y' + b1 + b3x' + b5y' + b7x'y' * * and is applied in the form of the matrix: * * [[b0, b1], * [b2, b3], * [b4, b5], * [b6, b7]] * * Therefore our required calculated matrix will be * * [[ c3 , c7], * [(c0 - 1) , c4], * [ c1 , (c5 - 1)], * [ c2 , c6]] * * to = [x1, y1, x2, y2, x3, y3, x4, y4] * from = [x1', y1', x2', y2', x3', y3', x4', y4'] * trans = [[c0], [c1], [c2], [c3], [c4], [c5], [c6], [c7]] * */ to' = Matrix [[to?0, to?1, ((to?0)*(to?1)), 1, 0, 0, 0, 0], [0, 0, 0, 0, to?0, to?1, ((to?0)*(to?1)), 1], [to?2, to?3, ((to?2)*(to?3)), 1, 0, 0, 0, 0], [0, 0, 0, 0, to?2, to?3, ((to?2)*(to?3)), 1], [to?4, to?5, ((to?4)*(to?5)), 1, 0, 0, 0, 0], [0, 0, 0, 0, to?4, to?5, ((to?4)*(to?5)), 1], [to?6, to?7, ((to?6)*(to?7)), 1, 0, 0, 0, 0], [0, 0, 0, 0, to?6, to?7, ((to?6)*(to?7)), 1]]; from' = Matrix (transpose [from]); to'' = to' ** (-1); trans = to'' * from'; trans' = trans.value; trans''= Matrix [[(trans'?3)?0, (trans'?7)?0 ], [((trans'?0)?0 - 1), (trans'?4)?0 ], [(trans'?1)?0, ((trans'?5)?0 - 1)], [(trans'?2)?0, (trans'?6)?0 ]]; }; ////////////////////////////////////////////////////////////////////////////// /* Sort a list of points into clockwise order. * * Called from: * _NG_utilities.def select_tetragon * _NG_Extra.def Perspective_match_item * _NG_Extra.def Perspective_item */ sort_pts_clockwise l = l'' { // sort functions: f_top a b = a.top < b.top; f_left a b = a.left < b.left; f_right a b = a.left > b.left; l' = sortc f_top l; l'_a = take 2 l'; l'_b = drop 2 l'; l''_a = sortc f_left l'_a; l''_b = sortc f_right l'_b; l'' = join l''_a l''_b; }; Mount_options _ctype _ppcm = class { _vislevel = 3; apply = Toggle "Apply mount options" false; ls = Expression "Lower mount section bigger by (cm)" 0; mount_colour = Colour _ctype [0, 0, 0]; _los = ls.expr * _ppcm; }; Frame_variables comp = class { _vislevel = 3; scale_factor = Expression "scale the size of the frame by" 1; /* These sliders define the fraction of the frames width or height is extracted * to produce each of the particular regions. */ corner_section = Scale "Corner section" 0.1 1 0.5; edge_section = Scale "Edge section" 0.1 1 0.2, comp > 0 = "Only required for complex frames"; middle_section = Scale "Middle section" 0.1 1 0.2; blend_fraction = Scale "Blend fraction" 0.1 0.9 0.1; option = Toggle "Use mirror of left-side to make right" true; }; nip2-8.7.0/share/nip2/compat/8.3/Image.def0000644000175000017500000014437613224651032014603 00000000000000Image_new_item = class Menupullright "_New" "make new things" { Image_black_item = class Menuaction "_Image" "make a new image" { format_names = [ "8-bit unsigned int - UCHAR", // 0 "8-bit signed int - CHAR", // 1 "16-bit unsigned int - USHORT", // 2 "16-bit signed int - SHORT", // 3 "32-bit unsigned int - UINT", // 4 "32-bit signed int - INT", // 5 "32-bit float - FLOAT", // 6 "64-bit complex - COMPLEX", // 7 "64-bit float - DOUBLE", // 8 "128-bit complex - DPCOMPLEX" // 9 ]; action = class Image _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; nbands = Expression "Image bands" 1; format_option = Option "Image format" format_names 0; type_option = Option_enum "Image type" Image_type.type_names "B_W"; pixel = Expression "Pixel value" 0; _result = image_new (to_real nwidth) (to_real nheight) (to_real nbands) (to_real format_option) Image_coding.NOCODING type_option.value_thing pixel.expr 0 0; } } Image_new_from_image_item = class Menuaction "_From Image" "make a new image based on image x" { action x = class Image _result { _vislevel = 3; pixel = Expression "Pixel value" 0; _result = image_new x.width x.height x.bands x.format x.coding x.type pixel.expr x.xoffset x.yoffset; } } Image_region_item = class Menupullright "_Region on Image" "make a new region on an image" { Region_item = class Menuaction "_Region" "make a region on an image" { action image = scope.Region_relative image 0.25 0.25 0.5 0.5; } Mark_item = class Menuaction "_Point" "make a point on an image" { action image = scope.Mark_relative image 0.5 0.5; } Arrow_item = class Menuaction "_Arrow" "make an arrow on an image" { action image = scope.Arrow_relative image 0.25 0.25 0.5 0.5; } HGuide_item = class Menuaction "_Horizontal Guide" "make a horizontal guide on an image" { action image = scope.HGuide image 0.5; } VGuide_item = class Menuaction "_Vertical Guide" "make a vertical guide on an image" { action image = scope.VGuide image 0.5; } sep1 = Menuseparator; Move_item = class Menuaction "From Region" "new region on image using existing region as a guide" { action a b = map_binary process a b { process a b = x.Region target x.left x.top x.width x.height, is_Region x = x.Arrow target x.left x.top x.width x.height, is_Arrow x = error "bad arguments to region-from-region" { // prefer image then region compare a b = false, !is_Image a && is_Image b = false, is_Region a && !is_Region b = true; [target, x] = sortc compare [a, b]; } } } } } Image_convert_to_image_item = class Menuaction "Con_vert to Image" "convert anything to an image" { action x = to_image x; } Image_number_format_item = class Menupullright "_Format" "convert numeric format" { U8_item = class Menuaction "_8 bit unsigned" "convert to unsigned 8 bit [0, 255]" { action x = map_unary cast_unsigned_char x; } U16_item = class Menuaction "1_6 bit unsigned" "convert to unsigned 16 bit [0, 65535]" { action x = map_unary cast_unsigned_short x; } U32_item = class Menuaction "_32 bit unsigned" "convert to unsigned 32 bit [0, 4294967295]" { action x = map_unary cast_unsigned_int x; } sep1 = Menuseparator; S8_item = class Menuaction "8 _bit signed" "convert to signed 8 bit [-128, 127]" { action x = map_unary cast_signed_char x; } S16_item = class Menuaction "16 b_it signed" "convert to signed 16 bit [-32768, 32767]" { action x = map_unary cast_signed_short x; } S32_item = class Menuaction "32 bi_t signed" "convert to signed 32 bit [-2147483648, 2147483647]" { action x = map_unary cast_signed_int x; } sep2 = Menuseparator; Float_item = class Menuaction "_Single precision float" "convert to IEEE 32 bit float" { action x = map_unary cast_float x; } Double_item = class Menuaction "_Double precision float" "convert to IEEE 64 bit float" { action x = map_unary cast_double x; } sep3 = Menuseparator; Scmplxitem = class Menuaction "Single _precision complex" "convert to 2 x IEEE 32 bit float" { action x = map_unary cast_complex x; } Dcmplx_item = class Menuaction "Double p_recision complex" "convert to 2 x IEEE 64 bit float" { action x = map_unary cast_double_complex x; } } Image_header_item = class Menupullright "_Header" "do stuff to the image header" { Image_get_item = class Menupullright "_Get" "get header fields" { // the header fields we can get fields = class { type = 0; width = 1; height = 2; format = 3; bands = 4; xres = 5; yres = 6; xoffset = 7; yoffset = 8; coding = 9; field_names = Enum [ $width => width, $height => height, $bands => bands, $format => format, $type => type, $xres => xres, $yres => yres, $xoffset => xoffset, $yoffset => yoffset, $coding => coding ]; field_option name = Option_enum (_ "Field") field_names name; field_funcs = Table [ [type, get_type], [width, get_width], [height, get_height], [format, get_format], [bands, get_bands], [xres, get_xres], [yres, get_yres], [xoffset, get_xoffset], [yoffset, get_yoffset], [coding, get_coding] ]; } get_field field_name x = class _result { _vislevel = 3; field = fields.field_option field_name; _result = map_unary (Real @ fields.field_funcs.lookup 0 1 field.value_thing) x; } Width_item = class Menuaction "_Width" "get width" { action x = get_field "width" x; } Height_item = class Menuaction "_Height" "get height" { action x = get_field "height" x; } Bands_item = class Menuaction "_Bands" "get bands" { action x = get_field "bands" x; } Format_item = class Menuaction "_Format" "get format" { action x = get_field "format" x; } Type_item = class Menuaction "_Type" "get type" { action x = get_field "type" x; } Xres_item = class Menuaction "_Xres" "get X resolution" { action x = get_field "xres" x; } Yres_item = class Menuaction "_Yres" "get Y resolution" { action x = get_field "yres" x; } Xoffset_item = class Menuaction "X_offset" "get X offset" { action x = get_field "xoffset" x; } Yoffset_item = class Menuaction "Yo_ffset" "get Y offset" { action x = get_field "yoffset" x; } Coding_item = class Menuaction "_Coding" "get coding" { action x = get_field "coding" x; } sep1 = Menuseparator; Custom_item = class Menuaction "C_ustom" "get any header field" { action x = class _result { _vislevel = 3; field = String "Field" "Xsize"; parse = Option "Parse" [ "No parsing", "Parse string as integer", "Parse string as real", "Parse string as hh:mm:ss" ] 0; _result = map_unary (wrap @ process @ get_header field.value) x { parse_str parse str = parse (split is_space str)?0; parse_field name cast parse x = cast x, is_number x = parse_str parse x, is_string x = error ("not " ++ name); get_int = parse_field "int" cast_signed_int parse_int; get_float = parse_field "float" cast_float parse_float; get_time = parse_field "hh:mm:ss" cast_signed_int parse_time; wrap x = Real x, is_real x = Vector x, is_real_list x = Image x, is_image x = Bool x, is_bool x = Matrix x, is_matrix x = String "String" x, is_string x = List x, is_list x = x; process = [ id, get_int, get_float, get_time ]?parse; } } } } sep1 = Menuseparator; Image_set_meta_item = class Menuaction "_Set" "set image metadata" { action x = class _result { _vislevel = 3; fname = String "Field" "field-name"; val = Expression "Value" 42; _result = map_unary process x { process image = set_header fname.value val.expr image; } } } Image_edit_header_item = class Menuaction "_Edit" "change advisory header fields of image" { type_names = Image_type.type_names; all_names = sort (map (extract 0) type_names.value); get_prop has get def x = get x, has x = def; action x = class _result { _vislevel = 3; nxres = Expression "Xres" (get_prop has_xres get_xres 1 x); nyres = Expression "Yres" (get_prop has_yres get_yres 1 x); nxoff = Expression "Xoffset" (get_prop has_xoffset get_xoffset 0 x); nyoff = Expression "Yoffset" (get_prop has_yoffset get_yoffset 0 x); type_option = Option_enum "Image type" Image_type.type_names (Image_type.type_names.get_name type) { type = x.type, is_Image x = Image_type.MULTIBAND; } _result = map_unary process x { process image = Image (im_copy_set image.value type_option.value_thing (to_real nxres) (to_real nyres) (to_real nxoff) (to_real nyoff)); } } } } Image_cache_item = class Menuaction "C_ache" "cache calculated image pixels" { action x = class _result { _vislevel = 3; tile_width = Number "Tile width" 128; tile_height = Number "Tile height" 128; max_tiles = Number "Maximum number of tiles to cache" (-1); _result = map_unary process x { process image = cache (to_real tile_width) (to_real tile_height) (to_real max_tiles) image; } } } #separator Image_levels_item = class Menupullright "_Levels" "change image levels" { Scale_item = class Menuaction "_Scale to 0 - 255" "linear transform to fit 0 - 255 range" { action x = map_unary scale x; } Linear_item = class Menuaction "_Linear" "linear transform of image levels" { action x = class _result { _vislevel = 3; scale = Scale "Scale" 0.001 3 1; offset = Scale "Offset" (-128) 128 0; _result = map_unary adj x { adj x // only force back to input type if this is a thing // with a type ... so we work for Colour / Matrix etc. = clip2fmt x.format x', has_member "format" x = x' { x' = x * scale + offset; } } } } Gamma_item = class Menuaction "_Power" "power transform of image levels (gamma)" { action x = class _result { _vislevel = 3; gamma = Scale "Gamma" 0.001 4 1; image_maximum_hint = "You may need to change image_maximum if " ++ "this is not an 8 bit image"; im_mx = Expression "Image maximum" mx { mx = Image_format.maxval x.format, has_format x = 255; } _result = map_unary gam x { gam x = clip2fmt (get_format x) x', has_format x = x' { x' = (im_mx.expr / im_mx.expr ** gamma) * x ** gamma; } } } } Tone_item = class Menuaction "_Tone Curve" "adjust tone curve" { action x = class _result { _vislevel = 3; b = Scale "Black point" 0 100 0; w = Scale "White point" 0 100 100; sp = Scale "Shadow point" 0.1 0.3 0.2; mp = Scale "Mid-tone point" 0.4 0.6 0.5; hp = Scale "Highlight point" 0.7 0.9 0.8; sa = Scale "Shadow adjust" (-15) 15 0; ma = Scale "Mid-tone adjust" (-30) 30 0; ha = Scale "Highlight adjust" (-15) 15 0; curve = tone_build x.format b w sp mp hp sa ma ha; _result = map_unary (hist_map curve) x; } } } Image_transform_item = class Menupullright "_Transform" "transform images" { Rotate_item = class Menupullright "Ro_tate" "rotate image" { Fixed_item = class Menupullright "_Fixed" "clockwise rotation by fixed angles" { rotate_widget default x = class _result { _vislevel = 3; angle = Option "Rotate by" [ "Don't rotate", "90 degrees clockwise", "180 degrees", "90 degrees anticlockwise" ] default; _result = map_unary process x { process = [ // we can't use id here since we want to "declass" // the members of x ... consider if x is a crop class, // for example, we don't want to inherit from crop, we // want to make a new image class rot180 @ rot180, rot90, rot180, rot270 ] ? angle; } } Rot90_item = class Menuaction "_90 Degrees" "clockwise rotation by 90 degrees" { action x = rotate_widget 1 x; } Rot180_item = class Menuaction "_180 Degrees" "clockwise rotation by 180 degrees" { action x = rotate_widget 2 x; } Rot270_item = class Menuaction "_270 Degrees" "clockwise rotation by 270 degrees" { action x = rotate_widget 3 x; } } Free_item = class Menuaction "_Free" "clockwise rotation by any angle" { action x = class _result { _vislevel = 3; angle = Scale "Angle" (-180) 180 0; interp = Interpolate_picker Interpolate_type.BILINEAR; _result = map_unary process x { process image = rotate interp angle image; } } } Straighten_item = class Menuaction "_Straighten" ("smallest rotation that makes an arrow either horizontal " ++ "or vertical") { action x = class _result { _vislevel = 3; interp = Interpolate_picker Interpolate_type.BILINEAR; _result = map_unary straighten x { straighten arrow = rotate interp angle'' arrow.image { x = arrow.width; y = arrow.height; angle = im (polar (x, y)); angle' = angle - 360, angle > 315 = angle - 180, angle > 135 = angle; angle'' = -angle', angle' >= (-45) && angle' < 45 = 90 - angle'; } } } } } Flip_item = class Menupullright "_Flip" "mirror left/right or up/down" { Left_right_item = class Menuaction "_Left Right" "mirror object left/right" { action x = map_unary fliplr x; } Top_bottom_item = class Menuaction "_Top Bottom" "mirror object top/bottom" { action x = map_unary fliptb x; } } Resize_item = class Menupullright "_Resize" "change image size" { Scale_item = class Menuaction "_Scale" "scale image size by a factor" { action x = class _result { _vislevel = 3; xfactor = Expression "Horizontal scale factor" 1; yfactor = Expression "Vertical scale factor" 1; kernel = Kernel_picker Kernel_type.LINEAR; _result = map_unary process x { process image = resize kernel xfactor yfactor image; } } } Size_item = class Menuaction "_Size To" "resize to a fixed size" { action x = class _result { _vislevel = 3; which = Option "Resize axis" [ "Shortest", "Longest", "Horizontal", "Vertical" ] 0; size = Expression "Resize to (pixels)" 128; aspect = Toggle "Break aspect ratio" false; kernel = Kernel_picker Kernel_type.LINEAR; _result = map_unary process x { process image = resize kernel h v image, aspect = resize kernel fac fac image { xfac = to_real size / image.width; yfac = to_real size / image.height; max_factor = [xfac, 1], xfac > yfac = [1, yfac]; min_factor = [xfac, 1], xfac < yfac = [1, yfac]; [h, v] = [ max_factor, min_factor, [xfac, 1], [1, yfac]]?which; fac = h, v == 1 = v; } } } } Size_within_item = class Menuaction "Size _Within" "size to fit within a rectangle" { action x = class _result { _vislevel = 3; // the rects we size to fit within _rects = [ [2048, 1536], [1920, 1200], [1600, 1200], [1400, 1050], [1280, 1024], [1024, 768], [800, 600], [640, 480] ]; within = Option "Fit within (pixels)" ( [print w ++ " x " ++ print h :: [w, h] <- _rects] ++ ["Custom"] ) 4; custom_width = Expression "Custom width" 1000; custom_height = Expression "Custom height" 1000; size = Option "Page size" [ "Full page", "Half page", "Quarter page" ] 0; kernel = Kernel_picker Kernel_type.LINEAR; _result = map_unary process x { xdiv = [1, 2, 2]?size; ydiv = [1, 1, 2]?size; allrect = _rects ++ [ [custom_width.expr, custom_height.expr] ]; [width, height] = allrect?within; process x = resize kernel fac fac x, fac < 1 = x { xfac = (width / xdiv) / x.width; yfac = (height / ydiv) / x.height; fac = min_pair xfac yfac; } } } } Resize_canvas_item = class Menuaction "_Canvas" "change size of surrounding image" { action x = class _result { _vislevel = 3; // try to guess a sensible size for the new image _guess_size = x.rect, is_Image x = Rect 0 0 100 100; nwidth = Expression "New width (pixels)" _guess_size.width; nheight = Expression "New height (pixels)" _guess_size.height; bgcolour = Expression "Background colour" 0; position = Option "Position" [ "North-west", "North", "North-east", "West", "Centre", "East", "South-west", "South", "South-east", "Specify in pixels" ] 4; left = Expression "Pixels from left" 0; top = Expression "Pixels from top" 0; _result = map_unary process x { process image = insert_noexpand xp yp image background { width = image.width; height = image.height; coding = image.coding; bands = 3, coding == Image_coding.LABPACK = image.bands; format = Image_format.FLOAT, coding == Image_coding.LABPACK = image.format; type = image.type; // placement vectors ... left, centre, right xposv = [0, to_real nwidth / 2 - width / 2, to_real nwidth - width]; yposv = [0, to_real nheight / 2 - height / 2, to_real nheight - height]; xp = left, position == 9 = xposv?((int) (position % 3)); yp = top, position == 9 = yposv?((int) (position / 3)); background = image_new nwidth nheight bands format coding type bgcolour.expr 0 0; } } } } } Image_map_item = class Menuaction "_Map" "map an image through a 2D transform image" { action a b = class _result { _vislevel = 3; interp = Interpolate_picker Interpolate_type.BILINEAR; _result = map_binary trans a b { trans a b = mapim interp.value in index { // get the index image first [index, in] = sortc (const is_twocomponent) [a, b]; // is a two-component image, ie. one band complex, or // two-band non-complex is_twocomponent x = is_nonc x || is_c x; is_nonc x = has_bands x && get_bands x == 2 && has_format x && !is_complex_format (get_format x); is_c x = has_bands x && get_bands x == 1 && has_format x && is_complex_format (get_format x); is_complex_format f = f == Image_format.COMPLEX || f == Image_format.DPCOMPLEX; } } } } Image_perspective_item = Perspective_item; Image_rubber_item = class Menupullright "Ru_bber Sheet" "automatically warp images to superposition" { rubber_interp = Option "Interpolation" ["Nearest", "Bilinear"] 1; rubber_order = Option "Order" ["0", "1", "2", "3"] 1; rubber_wrap = Toggle "Wrap image edges" false; // a transform ... a matrix, plus the size of the image the // matrix was made for Transform matrix image_width image_height = class matrix { // scale a transform ... if it worked for a m by n image, make // it work for a (m * xfac) by (y * yfac) image rescale xfac yfac = Transform (Matrix (map2 (map2 multiply) matrix.value facs)) (image_width * xfac) (image_height * yfac) { facs = [ [xfac, yfac], [1, 1], [1, 1], [1 / xfac, 1 / yfac], [1 / xfac, 1 / yfac], [1 / xfac, 1 / yfac] ]; } } // yuk!!!! fix is_instanceof to not need absolute names is_Transform = is_instanceof "Image_transform_item.Image_rubber_item.Transform"; Find_item = class Menuaction "_Find" ("find a transform which will map sample image onto " ++ "reference") { action reference sample = class _trn { _vislevel = 3; // controls order = rubber_order; interp = rubber_interp; wrap = rubber_wrap; max_err = Expression "Maximum error" 0.3; max_iter = Expression "Maximum iterations" 10; // transform [sample', trn, err] = transform_search max_err max_iter order interp wrap sample reference; transformed_image = Image sample'; _trn = Transform trn reference.width reference.height; final_error = err; } } Apply_item = class Menuaction "_Apply" "apply a transform to an image" { action a b = class _result { _vislevel = 3; // controls interp = rubber_interp; wrap = rubber_wrap; _result = map_binary trans a b { trans a b = transform interp wrap t' i { // get the transform arg first [i, t] = sortc (const is_Transform) [a, b]; t' = t.rescale (i.width / t.image_width) (i.height / t.image_height); } } } } } sep1 = Menuseparator; Match_item = class Menuaction "_Linear Match" "rotate and scale one image to match another" { action x y = class _result { _vislevel = 3; // try to find an image ... for a group, get the first item find_image x = x, is_Image x = find_image x?0, is_list x = find_image x.value, is_class x && has_value x = error "unable to find image"; _a = find_image x; _b = find_image y; ap1 = Mark_relative _a 0.5 0.25; bp1 = Mark_relative _b 0.5 0.25; ap2 = Mark_relative _a 0.5 0.75; bp2 = Mark_relative _b 0.5 0.75; refine = Toggle "Refine selected tie-points" false; lock = Toggle "No resize" false; _result = map_binary process x y { process a b = Image b''' { _prefs = Workspaces.Preferences; window = _prefs.MOSAIC_WINDOW_SIZE; object = _prefs.MOSAIC_OBJECT_SIZE; a' = a.value; b' = b.value; b'' = clip2fmt a.format b'; // return p2 ... if lock is set, return a p2 a standard // distance along the vector joining p1 and p2 norm p1 p2 = Rect left' top' 0 0, lock = p2 { v = (p2.left - p1.left, p2.top - p1.top); // 100000 to give precision since we pass points as // ints to match n = 100000 * sign v; left' = p1.left + re n; top' = p1.top + im n; } ap2'' = norm ap1 ap2; bp2'' = norm bp1 bp2; b''' = im_match_linear_search a' b'' ap1.left ap1.top bp1.left bp1.top ap2''.left ap2''.top bp2''.left bp2''.top object window, // we can't search if lock is on refine && !lock = im_match_linear a' b'' ap1.left ap1.top bp1.left bp1.top ap2''.left ap2''.top bp2''.left bp2''.top; } } } } Image_perspective_match_item = Perspective_match_item; } Image_band_item = class Menupullright "_Band" "manipulate image bands" { // like extract_bands, but return [] for zero band image // makes compose a bit simpler exb b n x = [], to_real n == 0 = extract_bands b n x; Extract_item = class Menuaction "_Extract" "extract bands from image" { action x = class _result { _vislevel = 3; first = Expression "Extract from band" 0; number = Expression "Extract this many bands" 1; _result = map_unary (exb first number) x; } } Insert_item = class Menuaction "_Insert" "insert bands into image" { action x y = class _result { _vislevel = 3; first = Expression "Insert at position" 0; _result = map_binary process x y { process im1 im2 = exb 0 f im1 ++ im2 ++ exb f (b - f) im1 { f = to_real first; b = im1.bands; } } } } Delete_item = class Menuaction "_Delete" "delete bands from image" { action x = class _result { _vislevel = 3; first = Expression "Delete from band" 0; number = Expression "Delete this many bands" 1; _result = map_unary process x { process im = exb 0 f im ++ exb (f + n) (b - (f + n)) im { f = to_real first; n = to_real number; b = im.bands; } } } } Bandwise_item = Image_join_item.Bandwise_item; sep1 = Menuseparator; Bandand_item = class Menuaction "Bitwise Band AND" "bitwise AND of image bands" { action x = bandand x; } Bandor_item = class Menuaction "Bitwise Band OR" "bitwise OR of image bands" { action x = bandor x; } sep2 = Menuseparator; To_dimension_item = class Menuaction "To D_imension" "convert bands to width or height" { action x = class _result { _vislevel = 3; orientation = Option "Orientation" [ "Horizontal", "Vertical" ] 0; _result = map_unary process x { process im = foldl1 [join_lr, join_tb]?orientation (bandsplit im); } } } To_bands_item = class Menuaction "To B_ands" "turn width or height to bands" { action x = class _result { _vislevel = 3; orientation = Option "Orientation" [ "Horizontal", "Vertical" ] 0; _result = map_unary process x { process im = bandjoin (map extract_column [0 .. im.width - 1]), orientation == 0 = bandjoin (map extract_row [0 .. im.height - 1]) { extract_column n = extract_area n 0 1 im.height im; extract_row n = extract_area 0 n im.width 1 im; } } } } } Image_crop_item = class Menuaction "_Crop" "extract a rectangular area from an image" { action x = crop x [l, t, w, h] { fields = [ [has_left, get_left, 0], [has_top, get_top, 0], [has_width, get_width, 100], [has_height, get_height, 100] ]; [l, t, w, h] = map get_default fields { get_default line = get x, has x = default { [has, get, default] = line; } } } crop x geo = class _result { _vislevel = 3; l = Expression "Crop left" ((int) (geo?0 + geo?2 / 4)); t = Expression "Crop top" ((int) (geo?1 + geo?3 / 4)); w = Expression "Crop width" (max_pair 1 ((int) (geo?2 / 2))); h = Expression "Crop height" (max_pair 1 ((int) (geo?3 / 2))); _result = map_nary (list_5ary extract) [x, l.expr, t.expr, w.expr, h.expr] { extract im l t w h = extract_area left' top' width' height' im { width' = min_pair (to_real w) im.width; height' = min_pair (to_real h) im.height; left' = range 0 (to_real l) (im.width - width'); top' = range 0 (to_real t) (im.height - height'); } } } } Image_insert_item = class Menuaction "_Insert" "insert a small image into a large image" { action a b = insert_position, is_Group a || is_Group b = insert_area { insert_area = class _result { _check_args = [ [a, "a", check_Image], [b, "b", check_Image] ]; _vislevel = 3; // sort to get smallest first _pred x y = x.width * x.height < y.width * y.height; [_a', _b'] = sortc _pred [a, b]; place = Area _b' left top width height { // be careful in case b is smaller than a left = max_pair 0 ((_b'.width - _a'.width) / 2); top = max_pair 0 ((_b'.height - _a'.height) / 2); width = min_pair _a'.width _b'.width; height = min_pair _a'.height _b'.height; } _result = insert_noexpand place.left place.top (clip2fmt _b'.format a'') _b' { a'' = extract_area 0 0 place.width place.height _a'; } } insert_position = class _result { _vislevel = 3; position = Option "Position" [ "North-west", "North", "North-east", "West", "Centre", "East", "South-west", "South", "South-east", "Specify in pixels" ] 4; left = Expression "Pixels from left" 0; top = Expression "Pixels from top" 0; _result = map_binary insert a b { insert a b = insert_noexpand left top (clip2fmt b.format a) b, position == 9 = insert_noexpand xp yp (clip2fmt b.format a) b { xr = b.width - a.width; yr = b.height - a.height; xp = [0, xr / 2, xr]?((int) (position % 3)); yp = [0, yr / 2, yr]?((int) (position / 3)); } } } } } Image_select_item = Select_item; Image_draw_item = class Menupullright "_Draw" "draw lines, circles, rectangles, floods" { Line_item = class Menuaction "_Line" "draw line on image" { action x = class _result { _vislevel = 3; x1 = Expression "Start x" 0; y1 = Expression "Start y" 0; x2 = Expression "End x" 100; y2 = Expression "End y" 100; i = Expression "Ink" [0]; _result = map_unary line x { line im = draw_line x1 y1 x2 y2 i.expr im; } } } Rect_item = class Menuaction "_Rectangle" "draw rectangle on image" { action x = class _result { _vislevel = 3; rx = Expression "Left" 50; ry = Expression "Top" 50; rw = Expression "Width" 100; rh = Expression "Height" 100; f = Toggle "Fill" true; t = Scale "Line thickness" 1 50 3; i = Expression "Ink" [0]; _result = map_unary rect x { rect im = draw_rect_width rx ry rw rh f t i.expr im; } } } Circle_item = class Menuaction "_Circle" "draw circle on image" { action x = class _result { _vislevel = 3; cx = Expression "Centre x" 100; cy = Expression "Centre y" 100; r = Expression "Radius" 50; f = Toggle "Fill" true; i = Expression "Ink" [0]; _result = map_unary circle x { circle im = draw_circle cx cy r f i.expr im; } } } Flood_item = class Menuaction "_Flood" "flood bounded area of image" { action x = class _result { _vislevel = 3; sx = Expression "Start x" 100; sy = Expression "Start y" 100; e = Option "Flood while" [ "Not equal to ink", "Equal to start point" ] 0; // pick a default ink that won't flood, if we can i = Expression "Ink" default_ink { default_ink = [0], ! has_image x = pixel; pixel = map mean (bandsplit (extract_area sx sy 1 1 im)); im = get_image x; } _result = map_unary flood x { flood im = draw_flood sx sy i.expr im, e == 0 = draw_flood_blob sx sy i.expr im; } } } Draw_scalebar_item = class Menuaction "_Scale" "draw scale bar" { action x = class _result { _vislevel = 3; px = Expression "Left" 50; py = Expression "Top" 50; wid = Expression "Width" 100; thick = Scale "Line thickness" 1 50 3; text = String "Dimension text" "50μm"; font = Fontname "Use font" Workspaces.Preferences.PAINTBOX_FONT; pos = Option "Position Text" ["Above", "Below"] 1; vp = Option "Dimension by" [ "Inner Vertical Edge", "Centre of Vertical", "Outer Vertical Edge" ] 1; dpi = Expression "DPI" 100; ink = Colour "Lab" [50,0,0]; _result = map_unary process x { process im = blend (Image scale) ink' im { // make an ink compatible with the image ink' = colour_transform_to (get_type im) ink; x = to_real px; y = to_real py; w = to_real wid; d = to_real dpi; t = floor thick; bg = image_new (get_width im) (get_height im) (get_bands im) (get_format im) (get_coding im) (get_type im) 0 0 0; draw_block x y w t im = draw_rect_width x y w t true 1 [255] im; label = im_text text.value font.value w 1 d; lw = get_width label; lh = get_height label; ly = [y - lh - t, y + 2 * t]?pos; vx = [ [x - t, x + w], [x - t / 2, x + w - t / 2], [x, x + w - t] ]?vp; scale = (draw_block x y w t @ draw_block vx?0 (y - 2 * t) t (t * 5) @ draw_block vx?1 (y - 2 * t) t (t * 5) @ insert_noexpand (x + w / 2 - lw / 2) ly label) bg; } } } } } Image_join_item = class Menupullright "_Join" "join two or more images together" { Bandwise_item = class Menuaction "_Bandwise Join" "join two images bandwise" { action a b = join a b; } sep1 = Menuseparator; join_lr shim bg align a b = im2 { w = a.width + b.width + shim; h = max_pair a.height b.height; back = image_new w h a.bands a.format a.coding a.type bg 0 0; ya = [0, max_pair 0 ((b.height - a.height)/2), max_pair 0 (b.height - a.height)]; yb = [0, max_pair 0 ((a.height - b.height)/2), max_pair 0 (a.height - b.height)]; im1 = insert_noexpand 0 ya?align a back; im2 = insert_noexpand (a.width + shim) yb?align b im1; } join_tb shim bg align a b = im2 { w = max_pair a.width b.width; h = a.height + b.height + shim; back = image_new w h a.bands a.format a.coding a.type bg 0 0; xa = [0, max_pair 0 ((b.width - a.width)/2), max_pair 0 (b.width - a.width)]; xb = [0, max_pair 0 ((a.width - b.width)/2), max_pair 0 (a.width - b.width)]; im1 = insert_noexpand xa?align 0 a back; im2 = insert_noexpand xb?align (a.height + shim) b im1; } halign_names = ["Top", "Centre", "Bottom"]; valign_names = ["Left", "Centre", "Right"]; Left_right_item = class Menuaction "_Left to Right" "join two images left-right" { action a b = class _result { _vislevel = 3; shim = Scale "Spacing" 0 100 0; bg_colour = Expression "Background colour" 0; align = Option "Alignment" halign_names 1; _result = map_binary (join_lr shim.value bg_colour.expr align.value) a b; } } Top_bottom_item = class Menuaction "_Top to Bottom" "join two images top-bottom" { action a b = class _result { _vislevel = 3; shim = Scale "Spacing" 0 100 0; bg_colour = Expression "Background colour" 0; align = Option "Alignment" valign_names 1; _result = map_binary (join_tb shim.value bg_colour.expr align.value) a b; } } sep2 = Menuseparator; Array_item = class Menuaction "_Array" "join a list of lists of images into a single image" { action x = class _result { _vislevel = 3; hshim = Scale "Horizontal spacing" (-100) (100) 0; vshim = Scale "Vertical spacing" (-100) (100) 0; bg_colour = Expression "Background colour" 0; halign = Option "Horizontal alignment" valign_names 1; valign = Option "Vertical alignment" halign_names 1; // we can't use map_unary since chop-into-tiles returns a group of // groups and we want to be able to reassemble that // TODO: chop-into-tiles should return an array class which // displays as group but does not have the looping behaviour? _result = (image_set_origin 0 0 @ foldl1 (join_tb vshim.value bg_colour.expr halign.value) @ map (foldl1 (join_lr hshim.value bg_colour.expr valign.value))) (to_list (to_list x)); } } ArrayFL_item = class Menuaction "_Array from List" "join a list of images into a single image" { action x = class _result { _vislevel = 3; ncol = Number "Max. Number of Columns" 1; hshim = Scale "Horizontal spacing" (-100) (100) 0; vshim = Scale "Vertical spacing" (-100) (100) 0; bg_colour = Expression "Background colour" 0; halign = Option "Horizontal alignment" valign_names 1; valign = Option "Vertical alignment" halign_names 1; _l = split_lines ncol.value x.value, is_Group x = split_lines ncol.value x; _result = (image_set_origin 0 0 @ foldl1 (join_tb vshim.value bg_colour.expr halign.value) @ map (foldl1 (join_lr hshim.value bg_colour.expr valign.value))) (to_list (to_list _l)); } } } Image_tile_item = class Menupullright "Til_e" "tile an image across and down" { tile_widget default_type x = class _result { _vislevel = 3; across = Expression "Tiles across" 2; down = Expression "Tiles down" 2; repeat = Option "Tile type" ["Replicate", "Four-way mirror"] default_type; _result = map_unary process x { process image = tile across down image, repeat == 0 = tile across down image'' { image' = insert image.width 0 (fliplr image) image; image'' = insert 0 image.height (fliptb image') image'; } } } Replicate_item = class Menuaction "_Replicate" "replicate image across and down" { action x = tile_widget 0 x; } Fourway_item = class Menuaction "_Four-way Mirror" "four-way mirror across and down" { action x = tile_widget 1 x; } Chop_item = class Menuaction "_Chop Into Tiles" "slice an image into tiles" { action x = class _result { _vislevel = 3; tile_width = Expression "Tile width" 100; tile_height = Expression "Tile height" 100; hoverlap = Expression "Horizontal overlap" 0; voverlap = Expression "Vertical overlap" 0; _result = map_unary (Group @ map Group @ process) x { process x = imagearray_chop tile_width tile_height hoverlap voverlap x; } } } } #separator Pattern_images_item = class Menupullright "_Patterns" "make a variety of useful patterns" { Grey_item = class Menuaction "Grey _Ramp" "make a smooth grey ramp" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; orientation = Option "Orientation" [ "Horizontal", "Vertical" ] 0; foption = Option "Format" ["8 bit", "float"] 0; _result = Image im { gen = im_grey, foption == 0 = im_fgrey; w = to_real nwidth; h = to_real nheight; im = gen w h, orientation == 0 = rot90 (gen h w); } } } Xy_item = class Menuaction "_XY Image" "make a two band image whose pixel values are their coordinates" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; _result = Image (make_xy nwidth nheight); } } Gaussian_item = class Menuaction "Gaussian _Noise" "make an image of gaussian noise" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; mean = Scale "Mean" 0 255 128; deviation = Scale "Deviation" 0 128 50; _result = Image (im_gaussnoise (to_real nwidth) (to_real nheight) mean.value deviation.value); } } Fractal_item = class Menuaction "_Fractal" "make a fractal image" { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; dimension = Scale "Dimension" 2.001 2.999 2.001; _result = Image (im_fractsurf (to_real nsize) dimension.value); } } Checkerboard_item = class Menuaction "_Checkerboard" "make a checkerboard image" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; hpsize = Expression "Horizontal patch size" 8; vpsize = Expression "Vertical patch size" 8; hpoffset = Expression "Horizontal patch offset" 0; vpoffset = Expression "Vertical patch offset" 0; _result = Image (xstripes ^ ystripes) { pixels = make_xy nwidth nheight; xpixels = pixels?0 + to_real hpoffset; ypixels = pixels?1 + to_real vpoffset; make_stripe pix swidth = pix % (swidth * 2) >= swidth; xstripes = make_stripe xpixels (to_real hpsize); ystripes = make_stripe ypixels (to_real vpsize); } } } Grid_item = class Menuaction "Gri_d" "make a grid" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; hspace = Expression "Horizontal line spacing" 8; vspace = Expression "Vertical line spacing" 8; thick = Expression "Line thickness" 1; hoff = Expression "Horizontal grid offset" 4; voff = Expression "Vertical grid offset" 4; _result = Image (xstripes | ystripes) { pixels = make_xy nwidth nheight; xpixels = pixels?0 + to_real hoff; ypixels = pixels?1 + to_real voff; make_stripe pix swidth = pix % swidth < to_real thick; xstripes = make_stripe xpixels (to_real hspace); ystripes = make_stripe ypixels (to_real vspace); } } } Text_item = class Menuaction "_Text" "make a bitmap of some text" { action = class _result { _vislevel = 3; text = String "Text to paint" "Hello world!"; font = Fontname "Use font" Workspaces.Preferences.PAINTBOX_FONT; wrap = Expression "Wrap text at" 500; align = Option "Alignment" [ "Left", "Centre", "Right" ] 0; dpi = Expression "DPI" 300; _result = Image (im_text text.value font.value (to_real wrap) align.value (to_real dpi)); } } New_CIELAB_slice_item = class Menuaction "CIELAB _Slice" "make a slice through CIELAB space" { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; L = Scale "L value" 0 100 50; _result = Image (lab_slice (to_real nsize) L.value); } } sense_option = Option "Sense" [ "Pass", "Reject" ] 0; build fn size = (Image @ image_set_type Image_type.FOURIER @ rotquad @ fn) (im_create_fmask size size); New_ideal_item = class Menupullright "_Ideal Fourier Mask" "make various ideal Fourier filter masks" { High_low_item = class Menuaction "_High or Low Pass" ("make a mask image for a highpass/lowpass " ++ "ideal Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f sense.value fc.value 0 0 0 0; } } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" ("make a mask image for an ring pass/reject " ++ "ideal Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; rw = Scale "Ring width" 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f (sense.value + 6) fc.value rw.value 0 0 0; } } } Band_item = class Menuaction "_Band Pass or Band Reject" ("make a mask image for a band pass/reject " ++ "ideal Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fcx = Scale "Horizontal frequency cutoff" 0.01 0.99 0.5; fcy = Scale "Vertical frequency cutoff" 0.01 0.99 0.5; r = Scale "Radius" 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f (sense.value + 12) fcx.value fcy.value r.value 0 0; } } } } New_gaussian_item = class Menupullright "_Gaussian Fourier Mask" "make various Gaussian Fourier filter masks" { High_low_item = class Menuaction "_High or Low Pass" ("make a mask image for a highpass/lowpass " ++ "Gaussian Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f (sense.value + 4) fc.value ac.value 0 0 0; } } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" ("make a mask image for an ring pass/reject " ++ "Gaussian Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; rw = Scale "Ring width" 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f (sense.value + 10) fc.value rw.value ac.value 0 0; } } } Band_item = class Menuaction "_Band Pass or Band Reject" ("make a mask image for a band pass/reject " ++ "Gaussian Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fcx = Scale "Horizontal frequency cutoff" 0.01 0.99 0.5; fcy = Scale "Vertical frequency cutoff" 0.01 0.99 0.5; r = Scale "Radius" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f (sense.value + 16) fcx.value fcy.value r.value ac.value 0; } } } } New_butterworth_item = class Menupullright "_Butterworth Fourier Mask" "make various Butterworth Fourier filter masks" { High_low_item = class Menuaction "_High or Low Pass" ("make a mask image for a highpass/lowpass " ++ "Butterworth Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; order = Scale "Order" 1 10 2; _result = build param (to_real nsize) { param f = f (sense.value + 2) order.value fc.value ac.value 0 0; } } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" ("make a mask image for an ring pass/reject " ++ "Butterworth Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; rw = Scale "Ring width" 0.01 0.99 0.5; order = Scale "Order" 1 10 2; _result = build param (to_real nsize) { param f = f (sense.value + 8) order.value fc.value rw.value ac.value 0; } } } Band_item = class Menuaction "_Band Pass or Band Reject" ("make a mask image for a band pass/reject " ++ "Butterworth Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fcx = Scale "Horizontal frequency cutoff" 0.01 0.99 0.5; fcy = Scale "Vertical frequency cutoff" 0.01 0.99 0.5; r = Scale "Radius" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; order = Scale "Order" 1 10 2; _result = build param (to_real nsize) { param f = f (sense.value + 14) order.value fcx.value fcy.value r.value ac.value; } } } } } Test_images_item = class Menupullright "Test I_mages" "make a variety of test images" { Eye_item = class Menuaction "_Spatial Response" "image for testing the eye's spatial response" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; factor = Scale "Factor" 0.001 1 0.2; _result = Image (im_eye (to_real nwidth) (to_real nheight) factor.value); } } Zone_plate = class Menuaction "_Zone Plate" "make a zone plate" { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; _result = Image (im_zone (to_real nsize)); } } Frequency_test_chart_item = class Menuaction "_Frequency Testchart" "make a black/white frequency test pattern" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; sheight = Expression "Strip height (pixels)" 10; waves = Expression "Wavelengths" [64, 32, 16, 8, 4, 2]; _result = imagearray_assemble 0 0 (transpose [strips]) { freq_slice wave = Image (sin (grey / wave) > 0); strips = map freq_slice waves.expr; grey = im_fgrey (to_real nwidth) (to_real sheight) * 360 * (to_real nwidth); } } } CRT_test_chart_item = class Menuaction "CRT _Phosphor Chart" "make an image for measuring phosphor colours" { action = class _result { _vislevel = 3; brightness = Scale "Brightness" 0 255 200; psize = Expression "Patch size (pixels)" 32; _result = Image (imagearray_assemble 0 0 [[green, red], [blue, white]]) { black = image_new (to_real psize) (to_real psize) 1 Image_format.FLOAT Image_coding.NOCODING Image_type.B_W 0 0 0; notblack = black + brightness; green = black ++ notblack ++ black; red = notblack ++ black ++ black; blue = black ++ black ++ notblack; white = notblack ++ notblack ++ notblack; } } } Greyscale_chart_item = class Menuaction "_Greyscale" "make a greyscale" { action = class _result { _vislevel = 3; pwidth = Expression "Patch width" 8; pheight = Expression "Patch height" 8; npatches = Expression "Number of patches" 16; _result = Image (image_set_type Image_type.B_W (clip2fmt Image_format.UCHAR wedge)) { wedge = 255 / (to_real npatches - 1) * (int) (strip?0 / to_real pwidth) { strip = make_xy (to_real pwidth * to_real npatches) pheight; } } } } CMYK_test_chart_item = class Menuaction "_CMYK Wedges" "make a set of CMYK wedges" { action = class _result { _vislevel = 3; pwidth = Expression "Patch width" 8; pheight = Expression "Patch height" 8; npatches = Expression "Number of patches" 16; _result = Image (image_set_type Image_type.CMYK (clip2fmt Image_format.UCHAR strips)) { wedge = 255 / (to_real npatches - 1) * (int) (strip?0 / to_real pwidth) { strip = make_xy (to_real pwidth * to_real npatches) pheight; } black = wedge * 0; C = wedge ++ black ++ black ++ black; M = black ++ wedge ++ black ++ black; Y = black ++ black ++ wedge ++ black; K = black ++ black ++ black ++ wedge; strips = imagearray_assemble 0 0 [[C],[M],[Y],[K]]; } } } Colour_atlas_item = class Menuaction "_Colour Atlas" "make a grid of patches grouped around a colour" { action = class _result { _vislevel = 3; start = Colour_picker "Lab" [50,0,0]; nstep = Expression "Number of steps" 9; ssize = Expression "Step size" 10; psize = Expression "Patch size" 32; sepsize = Expression "Separator size" 4; _result = colour_transform_to (get_type start) blocks''' { size = (to_real nstep * 2 + 1) * to_real psize - to_real sepsize; xy = make_xy size size; xy_grid = (xy % to_real psize) < (to_real psize - to_real sepsize); grid = xy_grid?0 & xy_grid?1; blocks = (int) (to_real ssize * ((int) (xy / to_real psize))); lab_start = colour_transform_to Image_type.LAB start; blocks' = blocks - to_real nstep * to_real ssize + Vector (tl lab_start.value); blocks'' = hd lab_start.value ++ Image blocks'; blocks''' = image_set_type Image_type.LAB blocks'', Image grid = 0; } } } } nip2-8.7.0/share/nip2/compat/8.3/_list.def0000644000175000017500000002310313224651032014653 00000000000000/* any l: or all the elements of list l together * * any (map (equal 0) list) == true, if any element of list is zero. * any :: [bool] -> bool */ any = foldr logical_or false; /* all l: and all the elements of list l together * * all (map (==0) list) == true, if every element of list is zero. * all :: [bool] -> bool */ all = foldr logical_and true; /* concat l: join a list of lists together * * concat ["abc","def"] == "abcdef". * concat :: [[*]] -> [*] */ concat l = foldr join [] l; /* delete eq x l: delete the first x from l * * delete equal 'b' "abcdb" == "acdb" * delete :: (* -> bool) -> * -> [*] -> [*] */ delete eq a l = [], l == [] = y, eq a b = b : delete eq a y { b:y = l; } /* difference eq a b: delete b from a * * difference equal "asdf" "ad" == "sf" * difference :: (* -> bool) -> [*] -> [*] -> [*] */ difference = foldl @ converse @ delete; /* drop n l: drop the first n elements from list l * * drop 3 "abcd" == "d" * drop :: num -> [*] -> [*] */ drop n l = l, n <= 0 || l == [] = drop (n - 1) (tl l); /* dropwhile fn l: drop while fn is true * * dropwhile is_digit "1234pigs" == "pigs" * dropwhile :: (* -> bool) -> [*] -> [*] */ dropwhile fn l = [], l == [] = dropwhile fn x, fn a = l { a:x = l; } /* extract n l: extract element at index n from list l */ extract = converse subscript; /* filter fn l: return all elements of l for which predicate fn holds * * filter is_digit "1one2two3three" = "123" * filter :: (* -> bool) -> [*] -> [*] */ filter fn l = foldr addif [] l { addif x l = x : l, fn x; = l; } /* flatten x: flatten a list of lists of things into a simple list * * flatten :: [[*]] -> [*] */ flatten x = foldr flat [] x, is_list x = x { flat x sofar = foldr flat sofar x, is_list x = x : sofar; } /* foldl fn st l: fold list l from the left with function fn and start st * * Start from the left hand end of the list (unlike foldr, see below). * foldl is less useful (and much slower). * * foldl fn start [a,b .. z] = ((((st fn a) fn b) ..) fn z) * foldl :: (* -> ** -> *) -> * -> [**] -> * */ foldl fn st l = st, l == [] = foldl fn (fn st x) xs { x:xs = l; } /* foldl1 fn l: like foldl, but use the 1st element as the start value * * foldl1 fn [1,2,3] == ((1 fn 2) fn 3) * foldl1 :: (* -> * -> *) -> [*] -> * */ foldl1 fn l = [], l == [] = foldl fn x xs { x:xs = l; } /* foldr fn st l: fold list l from the right with function fn and start st * * foldr fn st [a,b..z] = (a fn (b fn (.. (z fn st)))) * foldr :: (* -> ** -> **) -> ** -> [*] -> ** */ foldr fn st l = st, l == [] = fn x (foldr fn st xs) { x:xs = l; } /* foldr1 fn l: like foldr, but use the last element as the start value * * foldr1 fn [1,2,3,4] == (1 fn (2 fn (3 fn 4))) * foldr1 :: (* -> * -> *) -> [*] -> * */ foldr1 fn l = [], l == [] = x, xs == [] = fn x (foldr1 fn xs) { x:xs = l; } /* Search a list for an element, returning its index (or -1) * * index (equal 12) [13,12,11] == 1 * index :: (* -> bool) -> [*] -> real */ index fn list = search list 0 { search l n = -1, l == [] = n, fn x = search xs (n + 1) { x:xs = l; } } /* init l: remove last element of list l * * The dual of tl. * init [1,2,3] == [1,2] * init :: [*] -> [*] */ init l = error "init of []", l == []; = [], tl l == []; = x : init xs { x:xs = l; } /* iterate f x: repeatedly apply f to x * * return the infinite list [x, f x, f (f x), ..]. * iterate (multiply 2) 1 == [1, 2, 4, 8, 16, 32, 64 ... ] * iterate :: (* -> *) -> * -> [*] */ iterate f x = x : iterate f (f x); /* join_sep sep l: join a list with a separator * * join_sep ", " (map print [1 .. 4]) == "1, 2, 3, 4" * join_sep :: [*] -> [[*]] -> [*] */ join_sep sep l = foldl1 fn l { fn a b = a ++ sep ++ b; } /* last l: return the last element of list l * * The dual of hd. last [1,2,3] == 3 * last :: [*] -> [*] */ last l = error "last of []", l == [] = x, xs == [] = last xs { x:xs = l; } /* len l: length of list l * (see also is_list_len and friends in predicate.def) * * len :: [*] -> num */ len l = 0, l == [] = 1 + len (tl l); /* limit l: return the first element of l which is equal to its predecessor * * useful for checking for convergence * limit :: [*] -> * */ limit l = error "incorrect use of limit", l == [] || tl l == [] || tl (tl l) == [] = a, a == b = limit (b : x) { a:b:x = l; } /* Turn a function of n args into a function which takes a single arg of an * n-element list. */ list_1ary fn x = fn x?0; list_2ary fn x = fn x?0 x?1; list_3ary fn x = fn x?0 x?1 x?2; list_4ary fn x = fn x?0 x?1 x?2 x?3; list_5ary fn x = fn x?0 x?1 x?2 x?3 x?4; list_6ary fn x = fn x?0 x?1 x?2 x?3 x?4 x?5; list_7ary fn x = fn x?0 x?1 x?2 x?3 x?4 x?5 x?6; /* map fn l: map function fn over list l * * map :: (* -> **) -> [*] -> [**] */ map f l = [], l == []; = f (hd l) : map f (tl l); /* map2 fn l1 l2: map two lists together with fn * * map2 :: (* -> ** -> ***) -> [*] -> [**] -> [***] */ map2 fn l1 l2 = map (list_2ary fn) (zip2 l1 l2); /* map3 fn l1 l2 l3: map three lists together with fn * * map3 :: (* -> ** -> *** -> ****) -> [*] -> [**] -> [***] -> [****] */ map3 fn l1 l2 l3 = map (list_3ary fn) (zip3 l1 l2 l3); /* member l x: true if x is a member of list l * * is_digit == member "0123456789" * member :: [*] -> * -> bool */ member l x = any (map (equal x) l); /* merge b l r: merge two lists based on a bool list * * merge :: [bool] -> [*] -> [*] -> [*] */ merge p l r = [], p == [] || l == [] || r == [] = a : merge z x y, c = b : merge z x y { a:x = l; b:y = r; c:z = p; } /* mkset eq l: remove duplicates from list l using equality function * * mkset :: (* -> bool) -> [*] -> [*] */ mkset eq l = [], l == [] = a : filter (not @ eq a) (mkset eq x) { a:x = l; } /* postfix l r: add r to the end of list l * * The dual of ':'. * postfix :: [*] -> ** -> [*,**] */ postfix l r = l ++ [r]; /* repeat x: make an infinite list of xes * * repeat :: * -> [*] */ repeat x = map (const x) [1..]; /* replicate n x: make n copies of x in a list * * replicate :: num -> * -> [*] */ replicate n x = take n (repeat x); /* reverse l: reverse list l * * reverse :: [*] -> [*] */ reverse l = foldl (converse cons) [] l; /* scanl fn st l: apply (foldl fn r) to every initial segment of a list * * scanl add 0 [1,2,3] == [1,3,6] * scanl :: (* -> ** -> *) -> * -> [**] -> [*] */ scanl fn st l = st, l == [] = st' : scanl fn st' xs { x:xs = l; st' = fn st x; } /* sort l: sort list l into ascending order * * sort :: [*] -> [*] */ sort l = sortc less_equal l; /* sortc comp l: sort list l into order using a comparision function * * Uses merge sort (n log n behaviour) * sortc :: (* -> * -> bool) -> [*] -> [*] */ sortc comp l = l, n <= 1 = merge (sortc comp (take n2 l)) (sortc comp (drop n2 l)) { n = len l; n2 = (int) (n / 2); /* merge l1 l2: merge sorted lists l1 and l2 to make a single * sorted list */ merge l1 l2 = l2, l1 == [] = l1, l2 == [] = a : merge x (b : y), comp a b = b : merge (a : x) y { a:x = l1; b:y = l2; } } /* sortpl pl l: sort by a list of predicates * * sortpl :: (* -> bool) -> [*] -> [*] */ sortpl pl l = sortc (test pl) l { /* Comparision function ... put true before false, if equal move on to * the next predicate. */ test pl a b = true, pl == [] = ta, ta != tb = test (tl pl) a b { ta = pl?0 a; tb = pl?0 b; } } /* sortr l: sort list l into descending order * * sortr :: [*] -> [*] */ sortr l = sortc more l; /* split fn l: break a list into sections separated by many fn * * split is_space " hello world " == ["hello", "world"] * split is_space " " == [] * split :: (* -> bool) -> [*] -> [[*]] */ split fn l = [], l == [] || l' == [] = head : split fn tail { nfn = not @ fn; l' = dropwhile fn l; head = takewhile nfn l'; tail = dropwhile nfn l'; } /* splits fn l: break a list into sections separated by a single fn * * split (equal ',') ",,1" == ["", "", "1"] * split :: (* -> bool) -> [*] -> [[*]] */ splits fn l = [], l == [] = head : splits fn tail { fn' = not @ fn; dropif x = [], x == [] = tl x; head = takewhile fn' l; tail = dropif (dropwhile fn' l); } /* splitpl fnl l: split a list up with a list of predicates * * splitpl [is_digit, is_letter, is_digit] "123cat" == ["123", "cat", []] * splitpl :: [* -> bool] -> [*] -> [[*]] */ splitpl fnl l = l, fnl == [] = head : splitpl (tl fnl) tail { head = takewhile (hd fnl) l; tail = dropwhile (hd fnl) l; } /* split_lines n l: split a list into equal length lines * * split_lines 4 "1234567" == ["1234", "567"] * splitl :: int -> [*] -> [[*]] */ split_lines n l = [], l == [] = take n l : split_lines n (drop n l); /* take n l: take the first n elements from list l * take :: num -> [*] -> [*] */ take n l = [], n <= 0 = [], l == [] = hd l : take (n-1) (tl l); /* takewhile fn l: take from the front of a list while predicate fn holds * * takewhile is_digit "123onetwothree" == "123" * takewhile :: (* -> bool) -> [*] -> [*] */ takewhile fn l = [], l == [] = hd l : takewhile fn (tl l), fn (hd l) = []; /* zip2 l1 l2: zip two lists together * * zip2 [1,2] ['a', 'b', 'c'] == [[1,'a'],[2,'b']] * zip2 :: [*] -> [**] -> [[*,**]] */ zip2 l1 l2 = [], l1 == [] || l2 == [] = [hd l1, hd l2] : zip2 (tl l1) (tl l2); /* zip3 l1 l2 l3: zip three lists together * * zip3 [1,2] ['a', 'b', 'c'] [true] == [[1,'a',true]] * zip3 :: [*] -> [**] ->[***] -> [[*,**,***]] */ zip3 l1 l2 l3 = [], l1 == [] || l2 == [] || l3 == [] = [hd l1, hd l2, hd l3] : zip3 (tl l1) (tl l2) (tl l3); nip2-8.7.0/share/nip2/compat/8.3/_magick.def0000644000175000017500000005322113224651032015137 00000000000000/* ImageMagick operations edited by Alan Gibson (aka "snibgo"; snibgo at earthling dot net). 1-Apr-2014 Minor corrections to Geometry_widget and Alpha. Added loads of widgets and Menuactions. Not fully tested. 5-Apr-2014 Many more menu actions. Reorganised Magick menu. 10-Apr-2014 Many more menu actions. 11-Apr-2014 jcupitt Split to separate _magick.def Add 0-ary and 2-ary system Put utility funcs into a Magick class 11-Apr-2014 snibgo Added VirtualPixelBack for cases where background is only relevant when VP=Background 17-Apr-2014 snibgo Many small changes. 2-May-2014 jcupitt Added Magick.version 30-June-2014 Put single-quotes around command exe to help win 1-July-2014 Automatically fall back to gm if we can't find convert 17-July-2014 better GM support Last update: 17-July-2014. For details of ImageMagick operations, see http://www.imagemagick.org/script/command-line-options.php etc. */ /* Put these in a class to avoid filling the main namespace with IM stuff. */ Magick = class { // first gm on path, or "" gm_path = search_for "gm"; // first convert on $PATH, or "" // we check for the convert we ship first convert_path = vips_convert, vips_convert != "" = search_for "convert" { // the convert we ship with the vips binary on some platforms, or "" vips_convert = search (path_absolute convert) { vipshome = path_parse (expand "$VIPSHOME"); convert = vipshome ++ ["bin", "convert" ++ expand "$EXEEXT"]; } } use_gm_pref = Workspaces.Preferences.USE_GRAPHICSMAGICK; // Are we in GM or IM mode? use_gm = true, use_gm_pref && gm_path != "" = false, !use_gm_pref && convert_path != "" = false, convert_path != "" = true, gm_path != "" = error "neither IM nor GM executable found"; command_path = gm_path, use_gm = convert_path; // try to get the version as eg. [6, 7, 7, 10] // GM versions are smaller, typically [1, 3, 18] version = map parse_int (split (member ".-") version_string) { [output] = vips_call "system" ["'" ++ command_path ++ "' -version"] [$log=>true]; version_string = (split (equal ' ') output)?1, use_gm = (split (equal ' ') output)?2; } // make a command-line ... args is a [str] we join with spaces command args = "'" ++ command_path ++ "' " ++ join_sep " " args' { args' = ["convert"] ++ args, use_gm = args; } // capabilities ... different versions support different features, we // turn features on and off based on these // would probably be better to test for caps somehow has_intensity = false, use_gm = version?0 > 6 || version?1 > 7; has_channel = false, use_gm = version?0 > 6 || version?1 > 7; system0 cmd = system_image0 cmd; system cmd x = map_unary (system_image cmd) x; system2 cmd x y = map_binary (system_image2 cmd) x y; system3 cmd x y z = map_trinary (system_image3 cmd) x y z; radius_widget = Scale "Radius" 0 100 10; sigma_widget = Scale "Sigma" 0.1 10 1; angle_widget = Scale "Angle (degrees)" (-360) 360 0; text_widget = String "Text to draw" "AaBbCcDdEe"; gamma_widget = Scale "Gamma" 0 10 1; colors_widget = Scale "Colors" 1 10 3; resize_widget = Scale "Resize (percent)" 0 500 100; fuzz_widget = Scale "Fuzz (percent)" 0 100 0; blur_rad_widget = Scale "Radius (0=auto)" 0 100 0; // a colour with no enclosing quotes ... use this if we know there are // some quotes at an outer level print_colour_nq triple = concat ["#", concat (map fmt triple)] { fmt x = reverse (take 2 (reverse (print_base 16 (x + 256)))); } // we need the quotes because # is the comment character in *nix print_colour triple = "\"" ++ print_colour_nq triple ++ "\""; Foreground triple = class Colour "sRGB" triple { _flag = "-fill " ++ print_colour triple; Colour_edit space triple = this.Foreground triple; } foreground_widget = Foreground [0, 0, 0]; GeneralCol triple = class Colour "sRGB" triple { _flag = print_colour_nq triple; Colour_edit space triple = this.GeneralCol triple; } generalcol_widget = GeneralCol [0, 0, 0]; Background triple = class Colour "sRGB" triple { isNone = Toggle "None (transparent black)" false; _flag = "-background " ++ if isNone then "None" else print_colour triple; Colour_edit space triple = this.Background triple; } background_widget = Background [255, 255, 255]; Bordercol triple = class Colour "sRGB" triple { _flag = "-bordercolor " ++ print_colour triple; Colour_edit space triple = this.Bordercol triple; } bordercol_widget = Bordercol [0, 0, 0]; Mattecol triple = class Colour "sRGB" triple { _flag = "-mattecolor " ++ print_colour triple; Colour_edit space triple = this.Mattecol triple; } mattecol_widget = Mattecol [189, 189, 189]; // FIXME: Undercolour, like many others, can have alpha channel. // How does user input this? With a slider? Undercol triple = class Colour "sRGB" triple { isNone = Toggle "None (transparent black)" true; _flag = if isNone then "" else ("-undercolor " ++ print_colour triple); Colour_edit space triple = this.Undercol triple; } undercol_widget = Undercol [0, 0, 0]; changeCol_widget = class { _vislevel = 3; colour = GeneralCol [0, 0, 0]; fuzz = fuzz_widget; nonMatch = Toggle "change non-matching colours" false; } Alpha alpha = class Option_string "Alpha" [ "On", "Off", "Set", "Opaque", "Transparent", "Extract", "Copy", "Shape", "Remove", "Background" ] alpha { _flag = "-alpha " ++ alpha; Option_edit caption labels value = this.Alpha labels?value; } alpha_widget = Alpha "On"; Antialias value = class Toggle "Antialias" value { _flag = "-antialias", value = "+antialias"; Toggle_edit caption value = this.Antialias value; } antialias_widget = Antialias true; Builtin builtin = class Option_string "Builtin" [ // See http://www.imagemagick.org/script/formats.php "rose:", "logo:", "wizard:", "granite:", "netscape:" ] builtin { _flag = builtin; Option_edit caption labels value = this.Builtin labels?value; } builtin_widget = Builtin "rose:"; channels_widget = class { // FIXME? Can we grey-out alpha when we have no alpha channel, // show CMY(K) instead of RGB(K) etc? // Yes, perhaps we can create different widgets for RGB, RGBA, CMY, CMYK, CMYA, CMYKA. ChanR valueR = class Toggle "Red" valueR { _flag = "R", valueR = ""; Toggle_edit caption valueR = this.ChanR valueR; } channelR = ChanR true; ChanG valueG = class Toggle "Green" valueG { _flag = "G", valueG = ""; Toggle_edit caption valueG = this.ChanG valueG; } channelG = ChanG true; ChanB valueB = class Toggle "Blue" valueB { _flag = "B", valueB = ""; Toggle_edit caption valueB = this.ChanB valueB; } channelB = ChanB true; ChanK valueK = class Toggle "Black" valueK { _flag = "K", valueK = ""; Toggle_edit caption valueK = this.ChanK valueK; } channelK = ChanK true; ChanA valueA = class Toggle "Alpha" valueA { _flag = "A", valueA = ""; Toggle_edit caption valueA = this.ChanA valueA; } channelA = ChanA false; ChanSy valueSy = class Toggle "Sync" valueSy { _flag = ",sync", valueSy = ""; Toggle_edit caption valueSy = this.ChanSy valueSy; } channelSy = ChanSy true; _rgbka = concat [channelR._flag, channelG._flag, channelB._flag, channelK._flag, channelA._flag ]; _flag = "", _rgbka == "" || !has_channel = concat [ "-channel ", _rgbka, channelSy._flag ]; } ch_widget = channels_widget; Colorspace colsp = class Option_string "Colorspace" [ "CIELab", "CMY", "CMYK", "Gray", "HCL", "HCLp", "HSB", "HSI", "HSL", "HSV", "HWB", "Lab", "LCH", "LCHab", "LCHuv", "LMS", "Log", "Luv", "OHTA", "Rec601Luma", "Rec601YCbCr", "Rec709Luma", "Rec709YCbCr", "RGB", "scRGB", "sRGB", "Transparent", "XYZ", "YCbCr", "YDbDr", "YCC", "YIQ", "YPbPr", "YUV" ] colsp { _flag = colsp; Option_edit caption labels value = this.Colorspace labels?value; } colorspace_widget = Colorspace "sRGB"; Compose comp = class Option_string "Compose method" [ "Atop", "Blend", "Blur", "Bumpmap", "ChangeMask", "Clear", "ColorBurn", "ColorDodge", "Colorize", "CopyBlack", "CopyBlue", "CopyCyan", "CopyGreen", "Copy", "CopyMagenta", "CopyOpacity", "CopyRed", "CopyYellow", "Darken", "DarkenIntensity", "DivideDst", "DivideSrc", "Dst", "Difference", "Displace", "Dissolve", "Distort", "DstAtop", "DstIn", "DstOut", "DstOver", "Exclusion", "HardLight", "Hue", "In", "Lighten", "LightenIntensity", "LinearBurn", "LinearDodge", "LinearLight", "Luminize", "Mathematics", "MinusDst", "MinusSrc", "Modulate", "ModulusAdd", "ModulusSubtract", "Multiply", "None", "Out", "Overlay", "Over", "PegtopLight", "PinLight", "Plus", "Replace", "Saturate", "Screen", "SoftLight", "Src", "SrcAtop", "SrcIn", "SrcOut", "SrcOver", "VividLight", "Xor" ] comp { _flag = "-compose " ++ comp; Option_edit caption labels value = this.Compose labels?value; } compose_widget = Compose "Over"; // FIXME: Some compose mehods (Displace, Distort, Mathematics) need a string. // FIXME: we could use a class that does both -compose and -intensity, for methods LightenIntensity, DarkenIntensity, CopyOpacity, CopyBlack coordinate_widget = class { _vislevel = 3; x = Expression "X" 0; y = Expression "Y" 0; _flag = concat [print x.expr, ",", print y.expr]; }; Distort distort = class Option_string "Distort" [ "Affine", "AffineProjection", "ScaleRotateTranslate", "SRT", "Perspective", "PerspectiveProjection", "BilinearForward", "BilinearReverse", "Polynomial", "Arc", "Polar", "DePolar", "Barrel", "BarrelInverse", "Shepards", "Resize" ] distort { _flag = distort; Option_edit caption labels value = this.Distort labels?value; } distort_widget = Distort "SRT"; Dither dither = class Option_string "Dither" [ "None", "FloydSteinberg", "Riemersma" ] dither { _flag = "-dither " ++ dither; Option_edit caption labels value = this.Dither labels?value; } dither_widget = Dither "FloydSteinberg"; Evaluate eval = class Option_string "Evaluate operation" [ "Abs", "Add", "AddModulus", "And", "Cos", "Cosine", "Divide", "Exp", "Exponential", "GaussianNoise", "ImpulseNoise", "LaplacianNoise", "LeftShift", "Log", "Max", "Mean", "Median", "Min", "MultiplicativeNoise", "Multiply", "Or", "PoissonNoise", "Pow", "RightShift", "Set", "Sin", "Sine", "Subtract", "Sum", "Threshold", "ThresholdBlack", "ThresholdWhite", "UniformNoise", "Xor" ] eval { _flag = "-evaluate " ++ eval; Option_edit caption labels value = this.Evaluate labels?value; } evaluate_widget = Evaluate "Add"; Filter filt = class Option_string "Filter" [ "default", "Bartlett", "Blackman", "Bohman", "Box", "Catrom", "Cosine", "Cubic", "Gaussian", "Hamming", "Hann", "Hermite", "Jinc", "Kaiser", "Lagrange", "Lanczos", "Lanczos2", "Lanczos2Sharp", "LanczosRadius", "LanczosSharp", "Mitchell", "Parzen", "Point", "Quadratic", "Robidoux", "RobidouxSharp", "Sinc", "SincFast", "Spline", "Triangle", "Welch" ] filt { _flag = if filt == "default" then "" else "-filter " ++ filt; Option_edit caption labels value = this.Filter labels?value; } filter_widget = Filter "default"; Function func = class Option_string "Function" [ "Polynomial", "Sinusoid", "Arcsin", "Arctan" ] func { _flag = func; Option_edit caption labels value = this.Function labels?value; } function_widget = Function "Polynomial"; // "Polynomial (a[n], a[n-1], ... a[1], a[0])", // "Sinusoid (freq, phase, amp, bias)", // "Arcsin (width, centre, range, bias)", // "Arctan (slope, centre, range, bias)" Gravity gravity = class Option_string "Gravity" [ "None", "Center", "East", "Forget", "NorthEast", "North", "NorthWest", "SouthEast", "South", "SouthWest", "West", "Static" ] gravity { _flag = "-gravity " ++ gravity; Option_edit caption labels value = this.Gravity labels?value; } gravity_widget = Gravity "Center"; ImageType imagetype = class Option_string "Image type" [ "Bilevel", "ColorSeparation", "ColorSeparationAlpha", "ColorSeparationMatte", "Grayscale", "GrayscaleAlpha", "GrayscaleMatte", "Optimize", "Palette", "PaletteBilevelAlpha", "PaletteBilevelMatte", "PaletteAlpha", "PaletteMatte", "TrueColorAlpha", "TrueColorMatte", "TrueColor" ] imagetype { _flag = "-type " ++ imagetype; Option_edit caption labels value = this.ImageType labels?value; } imagetype_widget = ImageType "TrueColor"; Intensity intensity = class Option_string "Intensity (gray conversion)" [ "Average", "Brightness", "Lightness", "MS", "Rec601Luma", "Rec601Luminance", "Rec709Luma", "Rec709Luminance", "RMS" ] intensity { _flag = "-intensity " ++ intensity, has_intensity = ""; Option_edit caption labels value = this.Intensity labels?value; } intensity_widget = Intensity "Rec709Luminance"; Interpolate interp = class Option_string "Interpolate" [ "default", "Average", "Average4", "Average9", "Average16", "Background", "Bilinear", "Blend", "Integer", "Mesh", "Nearest", "NearestNeighbor", "Spline" ] interp { _flag = if interp == "default" then "" else "-interpolate " ++ interp; Option_edit caption labels value = this.Interpolate labels?value; } interpolate_widget = Interpolate "default"; Kernel kernel = class Option_string "Kernel" [ "Unity", "Gaussian", "DoG", "LoG", "Blur", "Comet", "Binomial", "Laplacian", "Sobel", "FreiChen", "Roberts", "Prewitt", "Compass", "Kirsch", "Diamond", "Square", "Rectangle", "Disk", "Octagon", "Plus", "Cross", "Ring", "Peaks", "Edges", "Corners", "Diagonals", "LineEnds", "LineJunctions", "Ridges", "ConvexHull", "ThinSe", "Skeleton", "Chebyshev", "Manhattan", "Octagonal", "Euclidean" // FIXME: custom kernel ] kernel { _flag = kernel; Option_edit caption labels value = this.Kernel labels?value; } kernel_widget = Kernel "Unity"; ModColSp msp = class Option_string "modulate colorspace" [ "HCL", "HCLp", "HSB", "HSI", "HSL", "HSV", "HWB", "LCH" ] msp { _flag = "-set option:modulate:colorspace " ++ msp; Option_edit caption labels value = this.ModColSp labels?value; } ModColSp_widget = ModColSp "HSL"; MorphMeth morph = class Option_string "Method" [ "Correlate", "Convolve", "Dilate", "Erode", "Close", "Open", "DilateIntensity", "ErodeIntensity", "CloseIntensity", "OpenIntensity", "Smooth", "EdgeOut", "EdgeIn", "Edge", "TopHat", "BottomHat", "HitAndMiss", "Thinning", "Thicken", "Distance", "IterativeDistance" ] morph { _flag = morph; Option_edit caption labels value = this.MorphMeth labels?value; } morphmeth_widget = MorphMeth "Dilate"; Noise noise = class Option_string "Noise" [ "Gaussian", "Impulse", "Laplacian", "Multiplicative", "Poisson", "Random", "Uniform" ] noise { _flag = "+noise " ++ noise; Option_edit caption labels value = this.Noise labels?value; } noise_widget = Noise "Gaussian"; Pattern pattern = class Option_string "Noise" [ // See http://www.imagemagick.org/script/formats.php "bricks", "checkerboard", "circles", "crosshatch", "crosshatch30", "crosshatch45", "gray0", "gray5", "gray10", "gray15", "gray20", "gray25", "gray30", "gray35", "gray40", "gray45", "gray50", "gray55", "gray60", "gray65", "gray70", "gray75", "gray80", "gray85", "gray90", "gray95", "gray100", "hexagons", "horizontal", "horizontal2", "horizontal3", "horizontalsaw", "hs_bdiagonal", "hs_cross", "hs_diagcross", "hs_fdiagonal", "hs_horizontal", "hs_vertical", "left30", "left45", "leftshingle", "octagons", "right30", "right45", "rightshingle", "smallfishscales", "vertical", "vertical2", "vertical3", "verticalbricks", "verticalleftshingle", "verticalrightshingle", "verticalsaw" ] pattern { _flag = "pattern:" ++ pattern; Option_edit caption labels value = this.Pattern labels?value; } pattern_widget = Pattern "bricks"; ResizeType resizet = class Option_string "Resize type" [ "resize", "scale", "sample", "adaptive-resize" ] resizet { _flag = resizet; Option_edit caption labels value = this.ResizeType labels?value; } ResizeType_widget = ResizeType "resize"; Size_widget = class { _vislevel = 3; width = Expression "Width (pixels)" 64; height = Expression "Height (pixels)" 64; _flag = "-size " ++ print width.expr ++ "x" ++ print height.expr; }; StatType statt = class Option_string "Statistic type" [ "Gradient", "Maximum", "Mean", "Median", "Minimum", "Mode", "Nonpeak", "StandardDeviation" ] statt { _flag = statt; Option_edit caption labels value = this.StatType labels?value; } StatType_widget = StatType "Mean"; VirtualPixel vp = class Option_string "Virtual pixel" [ "Background", "Black", "CheckerTile", "Dither", "Edge", "Gray", "HorizontalTile", "HorizontalTileEdge", "Mirror", "None", "Random", "Tile", "Transparent", "VerticalTile", "VerticalTileEdge", "White" ] vp { _flag = "-virtual-pixel " ++ vp; _isBackground = (vp == "Background"); Option_edit caption labels value = this.VirtualPixel labels?value; } VirtualPixel_widget = VirtualPixel "Edge"; VirtualPixelBack_widget = class { virtpix = Magick.VirtualPixel_widget; background = Magick.background_widget; _flag = (if virtpix._isBackground then (background._flag ++ " ") else "") ++ virtpix._flag; } Geometry_widget = class { _vislevel = 3; x = Expression "X" 0; y = Expression "Y" 0; hoffset = Expression "Horizontal offset" 0; voffset = Expression "Vertical offset" 0; _flag = concat [print x.expr, "x", print y.expr, format hoffset, format voffset] { // print an offset ... we want '+' in front of +ve strings format offset = concat ["+", print offset.expr], offset.expr >= 0 = print offset.expr; } }; AnnotGeometry_widget = class { _vislevel = 3; shearX = Expression "shear X (degrees)" 0; shearY = Expression "shear Y (degrees)" 0; hoffset = Expression "Horizontal offset" 0; voffset = Expression "Vertical offset" 0; _flag = concat [print shearX.expr, "x", print shearY.expr, format hoffset, format voffset] { // print an offset ... we want '+' in front of +ve strings format offset = concat ["+", print offset.expr], offset.expr >= 0 = print offset.expr; } }; OffsetGeometry_widget = class { _vislevel = 3; hoffset = Expression "Horizontal offset" 0; voffset = Expression "Vertical offset" 0; _flag = concat [format hoffset, format voffset] { // print an offset ... we want '+' in front of +ve strings format offset = concat ["+", print offset.expr], offset.expr >= 0 = print offset.expr; } }; WhxyGeometry_widget = class { _vislevel = 3; x = Expression "Width" 0; y = Expression "Height" 0; hoffset = Expression "Horizontal offset" 0; voffset = Expression "Vertical offset" 0; _flag = concat [print x.expr, "x", print y.expr, format hoffset, format voffset] { // print an offset ... we want '+' in front of +ve strings format offset = concat ["+", print offset.expr], offset.expr >= 0 = print offset.expr; } }; FrameGeometry_widget = class { _vislevel = 3; x = Expression "Width" 0; y = Expression "Height" 0; outbev = Expression "Outer bevel thickness" 0; inbev = Expression "Inner bevel thickness" 0; _flag = concat [print x.expr, "x", print y.expr, format outbev, format inbev] { // print an offset ... we want '+' in front of +ve strings format offset = concat ["+", print offset.expr], offset.expr >= 0 = print offset.expr; } }; Font_widget = class { _vislevel = 3; family = Option_string "Family" [ "Arial", "ArialBlack", "AvantGarde", "BitstreamCharter", "Bookman", "CenturySchoolbook", "ComicSansMS", "Courier", "CourierNew", "DejaVuSans", "DejaVuSansMono", "DejaVuSerif", "Dingbats", "FreeMono", "FreeSans", "FreeSerif", "Garuda", "Georgia", "Helvetica", "HelveticaNarrow", "Impact", "LiberationMono", "LiberationSans", "LiberationSerif", "NewCenturySchlbk", "Palatino", "Purisa", "Symbol", "Times", "TimesNewRoman", "Ubuntu", "Verdana", "Webdings" ] "Arial"; style = Option_string "Style" [ "Any", "Italic", "Normal", "Oblique" ] "Normal"; weight = Scale "Weight" 1 800 400; size = Scale "Point size" 1 100 12; stretch = Option_string "Stretch" [ "Any", "Condensed", "Expanded", "ExtraCondensed", "ExtraExpanded", "Normal", "SemiCondensed", "SemiExpanded", "UltraCondensed", "UltraExpanded" ] "Normal"; _flag = join_sep " " [ "-family", family.item, "-weight", print weight.value, "-pointsize", print size.value, "-style", style.item, "-stretch", stretch.item]; } } nip2-8.7.0/share/nip2/compat/8.3/_Object.def0000644000175000017500000002600513224651032015112 00000000000000/* Lots of little arg checks. Global for convenience. */ check_any = [(const true), _ "any"]; check_bool = [is_bool, _ "boolean"]; check_real = [is_real, _ "real"]; check_ureal = [is_ureal, _ "unsigned real"]; check_preal = [is_preal, _ "positive real"]; check_list = [is_list, _ "list"]; check_real_list = [is_real_list, _ "list of real"]; check_string = [is_string, _ "string"]; check_string_list = [is_string_list, _ "list of string"]; check_int = [is_int, _ "integer"]; check_uint = [is_uint, _ "unsigned integer"]; check_pint = [is_pint, _ "positive integer"]; check_matrix = [is_matrix, _ "rectangular array of real"]; check_matrix_display = [Matrix_display.is_display, _ "0|1|2|3"]; check_image = [is_image, _ "image"]; check_xy_list = [is_xy_list, _ "list of form [[1, 2], [3, 4], [5, 6], ...]"]; check_instance name = [is_instanceof name, name]; check_Image = check_instance "Image"; check_Matrix = [is_Matrix, _ "Matrix"]; check_colour_space = [is_colour_space, join_sep "|" Image_type.colour_spaces.names]; check_rectangular = [is_rectangular, _ "rectangular [[*]]"]; check_Guide = [is_Guide, _ "HGuide|VGuide"]; check_Colour = check_instance (_ "Colour"); check_Mark = check_instance (_ "Mark"); /* Check a set of args to a class. Two members to look at: _check_args and * _check_all. * * - each line in _check_args is [arg, "arg name", [test_fn, "arg type"]] * same number of lines as there are args * * stuff like "arg 2 must be real" * * - each line in _check_all is [test, "description"] * any number of lines * * stuff like "to must be greater than from" * * generate an error dialog with a helpful message on failure. * * Have as a separate function to try to keep the size of _Object down. */ check_args x = error message, badargs != [] || badalls != [] = x { argcheck = x._check_args; allcheck = x._check_all; // indent string indent = " "; // test for a condition in a check line fails test_fail x = ! x?0; // set of failed argcheck indexes badargs = map (extract 1) (filter test_fail (zip2 (map testarg argcheck) [0..])) { testarg x = x?2?0 x?0; } // set of failed allcheck indexes badalls = map (extract 1) (filter test_fail (zip2 (map hd allcheck) [0..])); // the error message message = _ "bad properties for " ++ "\"" ++ x.name ++ "\"\n" ++ argmsg ++ allmsg ++ "\n" ++ _ "where" ++ "\n" ++ arg_types ++ extra; // make the failed argcheck messages ... eg. ""value" should be // real, you passed " etc. argmsg = concat (map fmt badargs) { fmt n = indent ++ "\"" ++ argcheck?n?1 ++ "\"" ++ _ " should be of type " ++ argcheck?n?2?1 ++ ", " ++ _ "you passed" ++ ":\n" ++ indent ++ indent ++ print argcheck?n?0 ++ "\n"; } // make the failed allcheck messages ... eg "condition failed: // x < y" ... don't make a message if any typechecks have // failed, as we'll probably error horribly allmsg = [], badargs != [] = concat (map fmt badalls) ++ _ "you passed" ++ "\n" ++ concat (map fmt_arg argcheck) { fmt n = _ "condition failed" ++ ": " ++ allcheck?n?1 ++ "\n"; fmt_arg l = indent ++ l?1 ++ " = " ++ print l?0 ++ "\n"; } // make arg type notes arg_types = join_sep "\n" (map fmt argcheck) { fmt l = indent ++ l?1 ++ " is of type " ++ l?2?1; } // extra bit at the bottom, if we have any conditions extra = [], allcheck == [] = "\n" ++ _ "and" ++ "\n" ++ all_desc; // make a list of all the allcheck descriptions, with a few // spaces in front all_desc_list = map (join indent @ extract 1) allcheck; // join em up to make a set of condition notes all_desc = join_sep "\n" all_desc_list; } /* Operator overloading stuff. */ Operator_type = class { ARITHMETIC = 1; // eg. add RELATIONAL = 2; // eg. less COMPOUND = 3; // eg. max/mean/etc. COMPOUND_REWRAP = 4; // eg. transpose } Operator op_name fn type symmetric = class { } /* Form the converse of an Operator. */ oo_converse op = Operator (converse_name op.op_name) (converse op.fn) op.type op.symmetric { converse_name x = init x, last x == last "'" = x ++ "'"; } /* Given an operator name, look up the definition. */ oo_binary_lookup op_name = matches?0, matches != [] = error (_ "unknown binary operator" ++ ": " ++ print op_name) { operator_table = [ Operator "add" add Operator_type.ARITHMETIC true, Operator "subtract" subtract Operator_type.ARITHMETIC false, Operator "remainder" remainder Operator_type.ARITHMETIC false, Operator "power" power Operator_type.ARITHMETIC false, Operator "subscript" subscript Operator_type.ARITHMETIC false, Operator "left_shift" left_shift Operator_type.ARITHMETIC false, Operator "right_shift" right_shift Operator_type.ARITHMETIC false, Operator "divide" divide Operator_type.ARITHMETIC false, Operator "join" join Operator_type.ARITHMETIC false, Operator "multiply" multiply Operator_type.ARITHMETIC true, Operator "logical_and" logical_and Operator_type.ARITHMETIC true, Operator "logical_or" logical_or Operator_type.ARITHMETIC true, Operator "bitwise_and" bitwise_and Operator_type.ARITHMETIC true, Operator "bitwise_or" bitwise_or Operator_type.ARITHMETIC true, Operator "eor" eor Operator_type.ARITHMETIC true, Operator "comma" comma Operator_type.ARITHMETIC false, Operator "if_then_else" if_then_else Operator_type.ARITHMETIC false, Operator "equal" equal Operator_type.RELATIONAL true, Operator "not_equal" not_equal Operator_type.RELATIONAL true, Operator "less" less Operator_type.RELATIONAL false, Operator "less_equal" less_equal Operator_type.RELATIONAL false ]; matches = filter test_name operator_table; test_name x = x.op_name == op_name; } /* Given an operator name, look up a function that implements that * operator. */ oo_unary_lookup op_name = matches?0, matches != [] = error (_ "unknown unary operator" ++ ": " ++ print op_name) { operator_table = [ /* Operators. */ Operator "cast_signed_char" cast_signed_char Operator_type.ARITHMETIC false, Operator "cast_unsigned_char" cast_unsigned_char Operator_type.ARITHMETIC false, Operator "cast_signed_short" cast_signed_short Operator_type.ARITHMETIC false, Operator "cast_unsigned_short" cast_unsigned_short Operator_type.ARITHMETIC false, Operator "cast_signed_int" cast_signed_int Operator_type.ARITHMETIC false, Operator "cast_unsigned_int" cast_unsigned_int Operator_type.ARITHMETIC false, Operator "cast_float" cast_float Operator_type.ARITHMETIC false, Operator "cast_double" cast_double Operator_type.ARITHMETIC false, Operator "cast_complex" cast_complex Operator_type.ARITHMETIC false, Operator "cast_double_complex" cast_double_complex Operator_type.ARITHMETIC false, Operator "unary_minus" unary_minus Operator_type.ARITHMETIC false, Operator "negate" negate Operator_type.RELATIONAL false, Operator "complement" complement Operator_type.ARITHMETIC false, Operator "unary_plus" unary_plus Operator_type.ARITHMETIC false, /* Built in projections. */ Operator "re" re Operator_type.ARITHMETIC false, Operator "im" im Operator_type.ARITHMETIC false, Operator "hd" hd Operator_type.ARITHMETIC false, Operator "tl" tl Operator_type.ARITHMETIC false, /* Maths builtins. */ Operator "sin" sin Operator_type.ARITHMETIC false, Operator "cos" cos Operator_type.ARITHMETIC false, Operator "tan" tan Operator_type.ARITHMETIC false, Operator "asin" asin Operator_type.ARITHMETIC false, Operator "acos" acos Operator_type.ARITHMETIC false, Operator "atan" atan Operator_type.ARITHMETIC false, Operator "log" log Operator_type.ARITHMETIC false, Operator "log10" log10 Operator_type.ARITHMETIC false, Operator "exp" exp Operator_type.ARITHMETIC false, Operator "exp10" exp10 Operator_type.ARITHMETIC false, Operator "ceil" ceil Operator_type.ARITHMETIC false, Operator "floor" floor Operator_type.ARITHMETIC false ]; matches = filter test_name operator_table; test_name x = x.op_name == op_name; } /* Find the matching methods in a method table. */ oo_method_lookup table = map (extract 0) (filter (extract 1) table); /* A binary op: a is a class, b may be a class ... eg. "add" a b two obvious ways to find a method: - a.oo_binary_search "add" (+) b - b.oo_binary_search "add'" (converse (+)) a, is_class b if these fail but op is a symmetric operator (eg. a + b == b + a), we can also try reversing the args - a.oo_binary_search "add'" (converse (+)) b - b.oo_binary_search "add" (+) a, is_class b if those fail as well, but this is ==, do pointer equals as a fallback */ oo_binary_function op a b = matches1?0, matches1 != [] = matches2?0, is_class b && matches2 != [] = matches3?0, op.symmetric && matches3 != [] = matches4?0, op.symmetric && is_class b && matches4 != [] = pointer_equal a b, op.op_name == "equal" || op.op_name == "equal'" = not_pointer_equal a b, op.op_name == "not_equal" || op.op_name == "not_equal'" = error (_ "No method found for binary operator." ++ "\n" ++ _ "left" ++ " = " ++ print a ++ "\n" ++ _ "operator" ++ " = " ++ op.op_name ++ "\n" ++ _ "right" ++ " = " ++ print b) { matches1 = oo_method_lookup (a.oo_binary_table op b); matches2 = oo_method_lookup (b.oo_binary_table (oo_converse op) a); matches3 = oo_method_lookup (a.oo_binary_table (oo_converse op) b); matches4 = oo_method_lookup (b.oo_binary_table op a); } /* A binary op: a is not a class, b is a class ... eg. "subtract" a b only one way to find a method: - b.oo_binary_search "subtract'" (converse (-)) a if this fails but op is a symmetric operator (eg. a + b == b + a), we can try reversing the args - b.oo_binary_search "add" (+) a, is_class b if that fails as well, but this is ==, do pointer equals as a fallback */ oo_binary'_function op a b = matches1?0, matches1 != [] = matches2?0, op.symmetric && matches2 != [] = pointer_equal a b, op.op_name == "equal" || op.op_name == "equal'" = not_pointer_equal a b, op.op_name == "not_equal" || op.op_name == "not_equal'" = error (_ "No method found for binary operator." ++ "\n" ++ _ "left" ++ " = " ++ print a ++ "\n" ++ _ "operator" ++ " = " ++ op.op_name ++ "\n" ++ _ "right" ++ " = " ++ print b) { matches1 = oo_method_lookup (b.oo_binary_table (oo_converse op) a); matches2 = oo_method_lookup (b.oo_binary_table op a); } oo_unary_function op x = matches?0, matches != [] = error (_ "No method found for unary operator." ++ "\n" ++ _ "operator" ++ " = " ++ op.op_name ++ "\n" ++ _ "argument" ++ " = " ++ print x) { matches = oo_method_lookup (x.oo_unary_table op); } /* Base class for nip's built-in classes ... base check function, base * operator overload functions. */ _Object = class { check = check_args this; // these should always be defined _check_args = []; _check_all = []; /* Operator overloading stuff. */ oo_binary op x = oo_binary_function (oo_binary_lookup op) this x; oo_binary' op x = oo_binary'_function (oo_binary_lookup op) x this; oo_unary op = oo_unary_function (oo_unary_lookup op) this; oo_binary_table op x = []; oo_unary_table op = []; } nip2-8.7.0/share/nip2/compat/8.3/Magick.def0000644000175000017500000014112713224651032014743 00000000000000/* ImageMagick operations edited by Alan Gibson (aka "snibgo"; snibgo at earthling dot net). 1-Apr-2014 Minor corrections to Geometry_widget and Alpha. Added loads of widgets and Menuactions. Not fully tested. 5-Apr-2014 Many more menu actions. Reorganised Magick menu. 10-Apr-2014 Many more menu actions. 11-Apr-2014 jcupitt Split to separate Magick.def 13-Apr-2014 snibgo Put "new image" items into sub-menu. New class VirtualPixlBack. 17-Apr-2014 snibgo Many small changes. A few new menu options. Created sub-menu for multi-input operations. 3-May-2014 jcupitt Put quotes around ( in shadow to help unix Last update: 17-Apr-2014. For details of ImageMagick operations, see http://www.imagemagick.org/script/command-line-options.php etc. */ // We don't need Noop. /*=== Magick_noop_item = class Menuaction "_Noop" "no operation" { action x = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "\"%s\"" ]; _result = Magick.system command x; } } ===*/ Magick_testPar_item = class Menuaction "_TestPar" "no operation" { action x = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "( +clone ) +append ", "\"%s\"" ]; _result = Magick.system command x; } } /* Removed Read_item and Write_item, much better to use nip2 load/save image. * Plus they can load all libMagick formats anyway. */ // Put "new image" items into sub-menu Magick_NewImageMenu_item = class Menupullright "_New image" "make a new image" { Magick_newcanvas_item = class Menuaction "_Solid colour" "make image of solid colour" { action = class _result { _vislevel = 3; size = Magick.Size_widget; colour = Magick.generalcol_widget; command = Magick.command [ size._flag, "\"canvas:" ++ colour._flag ++ "\"", "\"%s\"" ]; _result = Magick.system0 command; } } Magick_builtin_item = class Menuaction "_Built-in image" "create a built-in image" { action = class _result { _vislevel = 3; builtin = Magick.builtin_widget; command = Magick.command [ builtin._flag, "\"%s\"" ]; _result = Magick.system0 command; } } Magick_gradient_item = class Menuaction "_Gradient" "make a linear gradient between two colours" { action = class _result { _vislevel = 3; size = Magick.Size_widget; topColour = Magick.generalcol_widget; bottomColour = Magick.generalcol_widget; command = Magick.command [ size._flag, concat ["\"gradient:", topColour._flag, "-", bottomColour._flag, "\""], "\"%s\"" ]; _result = Magick.system0 command; } } Magick_hald_item = class Menuaction "_Hald-clut image" "create an identity hald-clut image" { action = class _result { _vislevel = 3; order = Expression "order" 8; command = Magick.command [ "hald:" ++ print order.expr, "\"%s\"" ]; _result = Magick.system0 command; } } Magick_pattern_item = class Menuaction "_Pattern" "create pattern" { action = class _result { _vislevel = 3; size = Magick.Size_widget; pattern = Magick.pattern_widget; command = Magick.command [ size._flag, pattern._flag, "\"%s\"" ]; _result = Magick.system0 command; } } Magick_plasma_item = class Menuaction "_Plasma image" "create plasma image" { action = class _result { _vislevel = 3; size = Magick.Size_widget; // FIXME? ColourA-ColourB. // FIXME? Allow plasma:fractal? command = Magick.command [ size._flag, "plasma:", "\"%s\"" ]; _result = Magick.system0 command; } } Magick_radialgradient_item = class Menuaction "_Radial gradient" "make a radial gradient between two colours" { action = class _result { _vislevel = 3; size = Magick.Size_widget; innerColour = Magick.generalcol_widget; outerColour = Magick.generalcol_widget; command = Magick.command [ size._flag, concat ["\"radial-gradient:", innerColour._flag, "-", outerColour._flag, "\""], "\"%s\"" ]; _result = Magick.system0 command; } } } // end Magick_NewImageMenu_item Magick_MultiMenu_item = class Menupullright "_Multiple inputs" "make an image from multiple images" { Magick_composite_item = class Menuaction "_Composite" "composite two images (without mask)" { action x y = class _result { _vislevel = 3; method = Magick.compose_widget; offsets = Magick.OffsetGeometry_widget; gravity = Magick.gravity_widget; command = Magick.command [ "\"%s\"", "\"%s\"", "-geometry", offsets._flag, gravity._flag, method._flag, "-composite", "\"%s\"" ]; _result = Magick.system2 command x y; } } Magick_compositeMask_item = class Menuaction "_Composite masked" "composite two images (with mask)" { action x y z = class _result { _vislevel = 3; method = Magick.compose_widget; offsets = Magick.OffsetGeometry_widget; gravity = Magick.gravity_widget; command = Magick.command [ "\"%s\"", "\"%s\"", "\"%s\"", "-geometry", offsets._flag, gravity._flag, method._flag, "-composite", "\"%s\"" ]; _result = Magick.system3 command x y z; } } // FIXME: other operations like remap that take another image as arguments are: // mask (pointless?), texture, tile (pointless?) // FIXME: operations that take a filename that isn't an image: // cdl, profile Magick_clut_item = class Menuaction "_Clut" "replace values using second image as colour look-up table" { action x y = class _result { _vislevel = 3; // FIXME: uses -intensity "when mapping greyscale CLUT image to alpha channel if set by -channels" command = Magick.command [ "\"%s\"", "\"%s\"", "-clut", "\"%s\"" ]; _result = Magick.system2 command x y; } } Magick_haldclut_item = class Menuaction "_Hald clut" "replace values using second image as Hald colour look-up table" { action x y = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "\"%s\"", "-hald-clut", "\"%s\"" ]; _result = Magick.system2 command x y; } } // Encipher and decipher: key files can be text or image files. Magick_encipher_item = class Menuaction "_Encipher/Decipher" "encipher or decipher an image image" { action x = class _result { _vislevel = 3; pathname = Pathname "Read key file" ""; isDecipher = Toggle "Decipher" false; command = Magick.command [ "\"%s\"", if pathname.value == "" then "" else ( ( if isDecipher then "-decipher " else "-encipher ") ++ ( "\"" ++ pathname.value ++ "\"" ) ), "\"%s\"" ]; _result = Magick.system command x; } } Magick_profile_item = class Menuaction "_Profile" "assigns/applies an ICC profile" { action x = class _result { _vislevel = 3; pathname1 = Pathname "Read profile file" ""; pathname2 = Pathname "Read profile file" ""; command = Magick.command [ "\"%s\"", if pathname1.value == "" then "" else ( "-profile " ++ "\"" ++ pathname1.value ++ "\""), if pathname2.value == "" then "" else ( "-profile " ++ "\"" ++ pathname2.value ++ "\""), "\"%s\"" ]; _result = Magick.system command x; } } Magick_remap_item = class Menuaction "_Remap" "reduce colours to those in another image" { action x y = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "-remap", "\"%s\"", "\"%s\"" ]; _result = Magick.system2 command x y; } } } // end Magick_MultiMenu_item Magick_image_type_item = class Menuaction "_Image Type" "change image type" { action x = class _result { _vislevel = 3; imagetype = Magick.imagetype_widget; command = Magick.command [ "\"%s\"", imagetype._flag, "\"%s\"" ]; _result = Magick.system command x; } } sep2 = Menuseparator; Magick_alpha_item = class Menuaction "_Alpha" "add/remove alpha channel" { action x = class _result { _vislevel = 3; alpha = Magick.alpha_widget; command = Magick.command [ "\"%s\"", alpha._flag, "\"%s\"" ]; _result = Magick.system command x; } } Magick_annotate_item = class Menuaction "_Annotate" "add text annotation" { action x = class _result { _vislevel = 3; text = Magick.text_widget; font = Magick.Font_widget; geometry = Magick.AnnotGeometry_widget; gravity = Magick.gravity_widget; foreground = Magick.foreground_widget; undercol = Magick.undercol_widget; antialias = Magick.antialias_widget; command = Magick.command [ "\"%s\"", font._flag, antialias._flag, gravity._flag, foreground._flag, undercol._flag, "-annotate", geometry._flag, "\"" ++ text.value ++ "\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_autoGamma_item = class Menuaction "_AutoGamma" "automatic gamma" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; command = Magick.command [ "\"%s\"", channels._flag, "-auto-gamma", "\"%s\"" ]; _result = Magick.system command x; } } Magick_autoLevel_item = class Menuaction "_AutoLevel" "automatic level" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; command = Magick.command [ "\"%s\"", channels._flag, "-auto-level", "\"%s\"" ]; _result = Magick.system command x; } } Magick_blurSharpMenu_item = class Menupullright "_Blur/Sharpen" "blur and sharpen" { Magick_adaptive_blur_item = class Menuaction "_Adaptive Blur" "blur less near edges" { action x = class _result { _vislevel = 3; intensity = Magick.intensity_widget; radius = Magick.blur_rad_widget; sigma = Magick.sigma_widget; channels = Magick.channels_widget; // note: adaptive-blur doesn't regard VP. command = Magick.command [ "\"%s\"", intensity._flag, channels._flag, "-adaptive-blur", print radius.value ++ "x" ++ print sigma.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_blur_item = class Menuaction "_Blur" "blur" { action x = class _result { _vislevel = 3; radius = Magick.blur_rad_widget; sigma = Magick.sigma_widget; channels = Magick.channels_widget; virtpixback = Magick.VirtualPixelBack_widget; command = Magick.command [ "\"%s\"", virtpixback._flag, channels._flag, "-blur", print radius.value ++ "x" ++ print sigma.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_gaussianBlur_item = class Menuaction "_Gaussian Blur" "blur with a Gaussian operator" { action x = class _result { _vislevel = 3; radius = Magick.blur_rad_widget; sigma = Magick.sigma_widget; channels = Magick.channels_widget; virtpixback = Magick.VirtualPixelBack_widget; command = Magick.command [ "\"%s\"", virtpixback._flag, channels._flag, "-gaussian-blur", print radius.value ++ "x" ++ print sigma.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_motionBlur_item = class Menuaction "_Motion Blur" "simulate motion blur" { action x = class _result { _vislevel = 3; radius = Magick.blur_rad_widget; sigma = Magick.sigma_widget; angle = Scale "angle" (-360) 360 0; channels = Magick.ch_widget; virtpixback = Magick.VirtualPixelBack_widget; command = Magick.command [ "\"%s\"", virtpixback._flag, channels._flag, "-motion-blur", print radius.value ++ "x" ++ print sigma.value ++ "+" ++ print angle.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_rotationalBlur_item = class Menuaction "_RotationalBlur" "blur around the centre" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; virtpixback = Magick.VirtualPixelBack_widget; angle = Scale "angle (degrees)" (-360) 360 20; command = Magick.command [ "\"%s\"", virtpixback._flag, channels._flag, "-radial-blur", print angle.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_selectiveBlur_item = class Menuaction "_Selective Blur" "blur where contrast is less than or equal to threshold" { action x = class _result { _vislevel = 3; intensity = Magick.intensity_widget; radius = Magick.blur_rad_widget; sigma = Magick.sigma_widget; threshold = Scale "Threshold (percent)" 0 100 50; channels = Magick.channels_widget; virtpixback = Magick.VirtualPixelBack_widget; command = Magick.command [ "\"%s\"", intensity._flag, virtpixback._flag, channels._flag, "-selective-blur", print radius.value ++ "x" ++ print sigma.value ++ "+" ++ print threshold.value ++ "%%", "\"%s\"" ]; _result = Magick.system command x; } } sep1 = Menuseparator; Magick_adaptive_sharpen_item = class Menuaction "_Adaptive Sharpen" "sharpen more near edges" { action x = class _result { _vislevel = 3; intensity = Magick.intensity_widget; radius = Magick.blur_rad_widget; sigma = Magick.sigma_widget; command = Magick.command [ "\"%s\"", intensity._flag, "-adaptive-sharpen", print radius.value ++ "x" ++ print sigma.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_sharpen_item = class Menuaction "_Sharpen" "sharpen" { action x = class _result { _vislevel = 3; radius = Magick.blur_rad_widget; sigma = Magick.sigma_widget; channels = Magick.channels_widget; virtpixback = Magick.VirtualPixelBack_widget; command = Magick.command [ "\"%s\"", virtpixback._flag, channels._flag, "-sharpen", print radius.value ++ "x" ++ print sigma.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_unsharpen_item = class Menuaction "_Unsharp" "sharpen with unsharp mask" { action x = class _result { _vislevel = 3; radius = Magick.blur_rad_widget; sigma = Magick.sigma_widget; channels = Magick.channels_widget; gain = Scale "Gain" (-10) 10 1; threshold = Scale "Threshold" 0 1 0.05; virtpixback = Magick.VirtualPixelBack_widget; command = Magick.command [ "\"%s\"", virtpixback._flag, channels._flag, "-unsharp", print radius.value ++ "x" ++ print sigma.value ++ "+" ++ print gain.value ++ "+" ++ print threshold.value, "\"%s\"" ]; _result = Magick.system command x; } } } // end BlurSharpMenu_item Magick_border_item = class Menuaction "_Border" "add border of given colour" { action x = class _result { _vislevel = 3; compose = Magick.compose_widget; width = Expression "Width" 3; bordercol = Magick.bordercol_widget; command = Magick.command [ "\"%s\"", compose._flag, bordercol._flag, "-border", print width.expr, "\"%s\"" ]; _result = Magick.system command x; } } Magick_brightCont_item = class Menuaction "_Brightness-contrast" "adjust the brightness and/or contrast" { action x = class _result { _vislevel = 3; bri = Scale "brightness" (-100) 100 0; con = Scale "contrast" (-100) 100 0; channels = Magick.channels_widget; command = Magick.command [ "\"%s\"", channels._flag, "-brightness-contrast", print bri.value ++ "x" ++ print con.value, "\"%s\"" ]; _result = Magick.system command x; } } // Note: canny requires ImageMagick 6.8.9-0 or later. Magick_canny_item = class Menuaction "_Canny" "detect a wide range of edges" { action x = class _result { _vislevel = 3; radius = Magick.blur_rad_widget; sigma = Magick.sigma_widget; lowPc = Scale "lower percent" 0 100 10; highPc = Scale "lower percent" 0 100 10; command = Magick.command [ "\"%s\"", "-canny", concat ["\"", print radius.value ++ "x" ++ print sigma.value ++ "+" ++ print lowPc.value ++ "%%+" ++ print highPc.value ++ "%%" ++ "\"" ], "\"%s\"" ]; _result = Magick.system command x; } } Magick_charcoal_item = class Menuaction "_Charcoal" "simulate a charcoal drawing" { action x = class _result { _vislevel = 3; intensity = Magick.intensity_widget; factor = Scale "factor" 0 50 1; command = Magick.command [ "\"%s\"", intensity._flag, "-charcoal", print factor.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_chop_item = class Menuaction "_Chop" "remove pixels from the interior" { action x = class _result { _vislevel = 3; gravity = Magick.gravity_widget; geometry = Magick.WhxyGeometry_widget; command = Magick.command [ "\"%s\"", gravity._flag, "-chop", geometry._flag, "\"%s\"" ]; _result = Magick.system command x; } } Magick_colorize_item = class Menuaction "_Colorize" "colorize by given amount" { action x = class _result { _vislevel = 3; foreground = Magick.foreground_widget; val = Scale "value" 0 100 100; command = Magick.command [ "\"%s\"", foreground._flag, "-colorize", print val.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_colors_item = class Menuaction "_Colors" "reduce number of colors" { action x = class _result { _vislevel = 3; treedepth = Expression "Treedepth" 8; dither = Magick.dither_widget; quantize = Magick.colorspace_widget; colors = Expression "Colours" 3; command = Magick.command [ "\"%s\"", "-quantize", quantize._flag, "-treedepth", print treedepth.expr, dither._flag, "-colors", print colors.expr, "\"%s\"" ]; _result = Magick.system command x; } } // FIXME: color-matrix? Magick_colorspace_item = class Menuaction "_Colourspace" "convert to arbitrary colourspace" { action x = class _result { _vislevel = 3; colsp = Magick.colorspace_widget; command = Magick.command [ "\"%s\"", "-colorspace", colsp._flag, "\"%s\"" ]; _result = Magick.system command x; } } Magick_colorspaceGray_item = class Menuaction "_Colourspace gray" "convert to gray using given intensity method" { action x = class _result { _vislevel = 3; intensity = Magick.intensity_widget; command = Magick.command [ "\"%s\"", intensity._flag, "-colorspace gray", "\"%s\"" ]; _result = Magick.system command x; } } Magick_contrast_item = class Menuaction "_Contrast" "increase or reduce the contrast" { action x = class _result { _vislevel = 3; isReduce = Toggle "reduce contrast" false; command = Magick.command [ "\"%s\"", (if isReduce then "+" else "-") ++ "contrast", "\"%s\"" ]; _result = Magick.system command x; } } Magick_contrastStretch_item = class Menuaction "_Contrast stretch" "stretches tones, making some black/white" { action x = class _result { _vislevel = 3; intensity = Magick.intensity_widget; channels = Magick.channels_widget; blk = Scale "percent to make black" 0 100 0; wht = Scale "percent to make white" 0 100 0; command = Magick.command [ "\"%s\"", intensity._flag, channels._flag, "-contrast-stretch", "\"" ++ print blk.value ++ "x" ++ print wht.value ++ "%%\"", "\"%s\"" ]; _result = Magick.system command x; } } // FIXME: convolve (bias, kernel) Magick_crop_item = class Menuaction "_Crop" "cut out a rectangular region" { action x = class _result { _vislevel = 3; gravity = Magick.gravity_widget; geometry = Magick.WhxyGeometry_widget; command = Magick.command [ "\"%s\"", gravity._flag, "-crop", geometry._flag, "+repage", "\"%s\"" ]; _result = Magick.system command x; } } Magick_deskew_item = class Menuaction "_Deskew" "straighten the image" { action x = class _result { _vislevel = 3; threshold = Scale "Threshold (percent)" 0 100 80; // FIXME: toggle auto-crop? command = Magick.command [ "\"%s\"", "-deskew", "\"" ++ print threshold.value ++ "%%\"", "+repage", "\"%s\"" ]; _result = Magick.system command x; } } Magick_despeckle_item = class Menuaction "_Despeckle" "reduce the speckles" { action x = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "-despeckle", "\"%s\"" ]; _result = Magick.system command x; } } Magick_distort_item = class Menuaction "_Distort" "distort using a method and arguments" { action x = class _result { _vislevel = 3; virtpixback = Magick.VirtualPixelBack_widget; distort = Magick.distort_widget; args = String "Arguments" "1,0"; isPlus = Toggle "Extend to show entire image" false; command = Magick.command [ "\"%s\"", virtpixback._flag, (if isPlus then "+" else "-") ++ "distort", distort._flag, args.value, "+repage", "\"%s\"" ]; _result = Magick.system command x; } } Magick_draw_item = class Menuaction "_Draw" "annotate with one or more graphic primitives" { action x = class _result { _vislevel = 3; foreground = Magick.foreground_widget; args = String "Arguments" "line 0,0 9,9 rectangle 10,10 20,20"; command = Magick.command [ "\"%s\"", foreground._flag, "-draw", concat ["\"", args.value, "\""], "\"%s\"" ]; _result = Magick.system command x; } } Magick_edge_item = class Menuaction "_Edge" "detect edges" { action x = class _result { _vislevel = 3; rad = Expression "Radius" 3; command = Magick.command [ "\"%s\"", "-edge", print rad.expr, "\"%s\"" ]; _result = Magick.system command x; } } Magick_emboss_item = class Menuaction "_Emboss" "emboss" { action x = class _result { _vislevel = 3; rad = Expression "Radius" 3; command = Magick.command [ "\"%s\"", "-emboss", print rad.expr, "\"%s\"" ]; _result = Magick.system command x; } } Magick_enhance_item = class Menuaction "_Enhance" "enhance a noisy image" { action x = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "-enhance", "\"%s\"" ]; _result = Magick.system command x; } } Magick_equalize_item = class Menuaction "_Equalize" "equalize the histogram" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; command = Magick.command [ "\"%s\"", channels._flag, "-equalize", "\"%s\"" ]; _result = Magick.system command x; } } Magick_evaluate_item = class Menuaction "_Evaluate" "evaluate an expression on each pixel channel" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; operation = Magick.evaluate_widget; val = Expression "value" 5; isPc = Toggle "Value is percent" false; command = Magick.command [ "\"%s\"", channels._flag, operation._flag, print val.expr ++ if isPc then "%%" else "", "\"%s\"" ]; _result = Magick.system command x; } } Magick_extent_item = class Menuaction "_Extent" "set the image size and offset" { action x = class _result { _vislevel = 3; background = Magick.background_widget; compose = Magick.compose_widget; gravity = Magick.gravity_widget; geometry = Magick.WhxyGeometry_widget; command = Magick.command [ "\"%s\"", compose._flag, background._flag, gravity._flag, "-extent", geometry._flag, "\"%s\"" ]; _result = Magick.system command x; } } Magick_FlipFlopMenu_item = class Menupullright "_Flip/flop" "flip/flop/transverse/transpose" { Magick_flip_item = class Menuaction "_Flip vertically" "mirror upside-down" { action x = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "-flip", "\"%s\"" ]; _result = Magick.system command x; } } Magick_flop_item = class Menuaction "_Flop horizontally" "mirror left-right" { action x = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "-flop", "\"%s\"" ]; _result = Magick.system command x; } } Magick_transpose_item = class Menuaction "_Transpose" "mirror along the top-left to bottom-right diagonal" { action x = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "-transpose +repage", "\"%s\"" ]; _result = Magick.system command x; } } Magick_transverse_item = class Menuaction "_Transverse" "mirror along the bottom-left to top-right diagonal" { action x = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "-transverse +repage", "\"%s\"" ]; _result = Magick.system command x; } } } // end Magick_FlipFlopMenu_item Magick_floodfill_item = class Menuaction "_Floodfill" "recolour neighbours that match" { action x = class _result { _vislevel = 3; foreground = Magick.foreground_widget; fuzz = Magick.fuzz_widget; coordinate = Magick.coordinate_widget; // -draw "color x,y floodfill" command = Magick.command [ "\"%s\"", foreground._flag, "-fuzz", "\"" ++ print fuzz.value ++ "%%\"", "-draw \" color", coordinate._flag, "floodfill \"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_frame_item = class Menuaction "_Frame" "surround with border or beveled frame" { action x = class _result { _vislevel = 3; border = Magick.bordercol_widget; compose = Magick.compose_widget; matte = Magick.mattecol_widget; geometry = Magick.FrameGeometry_widget; command = Magick.command [ "\"%s\"", compose._flag, border._flag, matte._flag, "-frame", geometry._flag, "\"%s\"" ]; _result = Magick.system command x; } } Magick_function_item = class Menuaction "_Function" "evaluate a function on each pixel channel" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; function = Magick.function_widget; // FIXME: explain values; use sensible defaults. values = String "values" "0,0,0,0"; command = Magick.command [ "\"%s\"", channels._flag, "-function", function._flag, values.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_fx_item = class Menuaction "_Fx" "apply a mathematical expression" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; interpolate = Magick.interpolate_widget; virtpixback = Magick.VirtualPixelBack_widget; args = String "Expression" "u*1/2"; command = Magick.command [ "\"%s\"", channels._flag, interpolate._flag, virtpixback._flag, "-fx", concat ["\"", args.value, "\""], "\"%s\"" ]; _result = Magick.system command x; } } Magick_gamma_item = class Menuaction "_Gamma" "apply a gamma correction" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; gamma = Magick.gamma_widget; command = Magick.command [ "\"%s\"", channels._flag, "-gamma", print gamma.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_gradient_item = class Menuaction "_Gradient" "apply a linear gradient" { action x = class _result { _vislevel = 3; colourA = Magick.generalcol_widget; colourB = Magick.generalcol_widget; position = Option "colourA is at" [ "top", "bottom", "left", "right", "top-left", "top-right", "bottom-left", "bottom-right"] 0; _baryArg = concat ["0,0,", colourA._flag, " 0,%%[fx:h-1],", colourB._flag], position.value == 0 = concat ["0,0,", colourB._flag, " 0,%%[fx:h-1],", colourA._flag], position.value == 1 = concat ["0,0,", colourA._flag, " %%[fx:w-1],0,", colourB._flag], position.value == 2 = concat ["0,0,", colourB._flag, " %%[fx:w-1],0,", colourA._flag], position.value == 3 = concat ["0,0,", colourA._flag, " %%[fx:w-1],%%[fx:h-1],", colourB._flag], position.value == 4 = concat ["%%[fx:w-1],0,", colourA._flag, " 0,%%[fx:h-1],", colourB._flag], position.value == 5 = concat ["%%[fx:w-1],0,", colourB._flag, " 0,%%[fx:h-1],", colourA._flag], position.value == 6 = concat ["0,0,", colourB._flag, " %%[fx:w-1],%%[fx:h-1],", colourA._flag], position.value == 7 = "dunno"; command = Magick.command [ "\"%s\"", "-sparse-color barycentric \"" ++ _baryArg ++ "\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_gradientCorn_item = class Menuaction "_Gradient corners" "apply a bilinear gradient between the corners" { action x = class _result { _vislevel = 3; colour_top_left = Magick.generalcol_widget; colour_top_right = Magick.generalcol_widget; colour_bottom_left = Magick.generalcol_widget; colour_bottom_right = Magick.generalcol_widget; command = Magick.command [ "\"%s\"", "-sparse-color bilinear \"" ++ "0,0," ++ colour_top_left._flag ++ ",%%[fx:w-1],0" ++ colour_top_right._flag ++ ",0,%%[fx:h-1]" ++ colour_bottom_left._flag ++ ",%%[fx:w-1],%%[fx:h-1]" ++ colour_bottom_right._flag ++ "\"", "+depth", "\"%s\"" ]; _result = Magick.system command x; } } Magick_histogram_item = class Menuaction "_Histogram" "make a histogram image" { action x = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "-define histogram:unique-colors=false histogram:" ++ "\"%s\"" ]; _result = Magick.system command x; } } Magick_implode_item = class Menuaction "_Implode" "implode pixels about the center" { action x = class _result { _vislevel = 3; factor = Scale "factor" 0 20 1; interpolate = Magick.interpolate_widget; // FIXME: virtual-pixel? command = Magick.command [ "\"%s\"", interpolate._flag, "-implode", print factor.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_level_item = class Menuaction "_Level" "adjust the level of channels" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; blk = Scale "black point" (-100) 200 0; wht = Scale "white point" (-100) 200 100; gam = Scale "gamma" 0 30 1; isPc = Toggle "Levels are percent" true; isInv = Toggle "Invert effect" false; command = Magick.command [ "\"%s\"", channels._flag, (if isInv then "+" else "-") ++ "level", "\"" ++ print blk.value ++ "," ++ print wht.value ++ (if isPc then "%%" else "") ++ "," ++ print gam.value ++ "\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_levelCols_item = class Menuaction "_Level colors" "adjust levels to given colours" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; colour_black = Magick.generalcol_widget; colour_white = Magick.generalcol_widget; isInv = Toggle "Invert effect" false; command = Magick.command [ "\"%s\"", channels._flag, (if isInv then "+" else "-") ++ "level-colors", "\"" ++ colour_black._flag ++ "," ++ colour_white._flag ++ "\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_linearStretch_item = class Menuaction "_Linear stretch" "stretches tones, making some black/white" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; blk = Scale "percent to make black" 0 100 0; wht = Scale "percent to make white" 0 100 0; command = Magick.command [ "\"%s\"", channels._flag, "-linear-stretch", "\"" ++ print blk.value ++ "x" ++ print wht.value ++ "%%\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_magnify_item = class Menuaction "_Magnify" "double the size of the image with pixel art scaling" { action x = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "-magnify", "\"%s\"" ]; _result = Magick.system command x; } } Magick_modulate_item = class Menuaction "_Modulate" "modulate brightness, saturation and hue" { action x = class _result { _vislevel = 3; modcolsp = Magick.ModColSp_widget; bright = Scale "brightness" 0 200 100; sat = Scale "saturation" 0 200 100; hue = Scale "hue" 0 200 100; command = Magick.command [ "\"%s\"", modcolsp._flag, "-modulate", print bright.value ++ "," ++ print sat.value ++ "," ++ print hue.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_monochrome_item = class Menuaction "_Monochrome" "transform to black and white" { action x = class _result { _vislevel = 3; // FIXME: also intensity? intensity = Magick.intensity_widget; treedepth = Expression "Treedepth" 8; dither = Magick.dither_widget; command = Magick.command [ "\"%s\"", intensity._flag, dither._flag, "-treedepth", print treedepth.expr, "-monochrome", "\"%s\"" ]; _result = Magick.system command x; } } Magick_morphology_item = class // See http://www.imagemagick.org/Usage/morphology/ Menuaction "_Morphology" "apply a morphological method" { action x = class _result { _vislevel = 3; method = Magick.morphmeth_widget; iter = Expression "Iterations (-1=repeat until done)" 1; kernel = Magick.kernel_widget; // FIXME: custom kernel eg "3x1+2+0:1,0,0" // width x height + offsx + offsy : {w*h values} // each value is 0.0 to 1.0 or "NaN" or "-" // kernel args, mostly float radius,scale. radius=0=default. default scale = 1.0 // but // ring takes: radius1, radius2, scale // rectangle and comet take: width x height + offsx + offsy // blur takes: radius x sigma // FIXME: for now, simply allow any string input. kernel_arg = String "Kernel arguments" ""; channels = Magick.channels_widget; command = Magick.command [ "\"%s\"", channels._flag, "-morphology", method._flag ++ ":" ++ print iter.expr, kernel._flag ++ (if kernel_arg.value == "" then "" else ":") ++ kernel_arg.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_negate_item = class Menuaction "_Negate" "negate" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; command = Magick.command [ "\"%s\"", channels._flag, "-negate", "\"%s\"" ]; _result = Magick.system command x; } } Magick_addNoise_item = class Menuaction "_add Noise" "add noise" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; attenuate = Scale "attenuate" 0 1.0 1.0; noise = Magick.noise_widget; command = Magick.command [ "\"%s\"", channels._flag, "-attenuate", print attenuate.value, noise._flag, "\"%s\"" ]; _result = Magick.system command x; } } Magick_normalize_item = class Menuaction "_Normalize" "normalize" { action x = class _result { _vislevel = 3; intensity = Magick.intensity_widget; channels = Magick.channels_widget; command = Magick.command [ "\"%s\"", intensity._flag, channels._flag, "-normalize", "\"%s\"" ]; _result = Magick.system command x; } } Magick_opaque_item = class Menuaction "_Opaque" "change this colour to the fill colour" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; fill = Magick.foreground_widget; changeColour = Magick.changeCol_widget; command = Magick.command [ "\"%s\"", fill._flag, channels._flag, "-fuzz", "\"" ++ print changeColour.fuzz.value ++ "%%\"", (if changeColour.nonMatch then "+" else "-") ++ "opaque", "\"" ++ changeColour.colour._flag ++ "\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_paint_item = class Menuaction "_Paint" "simulate an oil painting" { action x = class _result { _vislevel = 3; rad = Expression "radius" 10; command = Magick.command [ "\"%s\"", "-paint", print rad.expr, "\"%s\"" ]; _result = Magick.system command x; } } /*=== FIXME Bug; remove for now. Polaroid_item = class Menuaction "_Polaroid" "simulate a polaroid picture" { action x = class _result { _vislevel = 3; angle = Scale "angle" (-90) 90 20; command = Magick.command [ "\"%s\"", "-polaroid", print angle.value, "\"%s\"" ]; _result = Magick.system command x; } } ===*/ Magick_posterize_item = class Menuaction "_Posterize" "reduce to (n) levels per channel" { action x = class _result { _vislevel = 3; levels = Expression "levels" 3; command = Magick.command [ "\"%s\"", "-posterize", print levels.expr, "\"%s\"" ]; _result = Magick.system command x; } } Magick_raise_item = class Menuaction "_Raise" "lighten or darken image edges" { action x = class _result { _vislevel = 3; thk = Expression "Thickness" 3; command = Magick.command [ "\"%s\"", "-raise", print thk.expr, "\"%s\"" ]; _result = Magick.system command x; } } Magick_resize_item = class Menuaction "_Resize" "resize to given width and height" { action x = class _result { _vislevel = 3; filter = Magick.filter_widget; type = Magick.ResizeType_widget; width = Scale "Width" 1 100 10; height = Scale "Height" 1 100 10; isPc = Toggle "Width and height are percent" false; command = Magick.command [ "\"%s\"", filter._flag, "-" ++ type._flag, "\"" ++ print width.value ++ "x" ++ print height.value ++ (if isPc then "%%" else "!") ++ "\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_roll_item = class Menuaction "_Roll" "roll an image horizontally or vertically" { action x = class _result { _vislevel = 3; rollx = Expression "X" 3; rolly = Expression "Y" 3; command = Magick.command [ "\"%s\"", "-roll", (if rollx.expr >= 0 then "+" else "") ++ print rollx.expr ++ (if rolly.expr >= 0 then "+" else "") ++ print rolly.expr, "\"%s\"" ]; _result = Magick.system command x; } } Magick_rotate_item = class Menuaction "_Rotate" "rotate" { action x = class _result { _vislevel = 3; angle = Scale "angle (degrees)" (-360) 360 20; virtpixback = Magick.VirtualPixelBack_widget; command = Magick.command [ "\"%s\"", virtpixback._flag, "+distort", "SRT", print angle.value, "+repage", "\"%s\"" ]; _result = Magick.system command x; } } // FIXME: -segment, but cluster-threshold should be percentage of image area. Magick_sepia_item = class Menuaction "_Sepia tone" "simulate a sepia-toned photo" { action x = class _result { _vislevel = 3; threshold = Scale "Threshold (percent)" 0 100 80; command = Magick.command [ "\"%s\"", "-sepia-tone", "\"" ++ print threshold.value ++ "%%\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_shade_item = class Menuaction "_Shade" "shade with a distant light source" { action x = class _result { _vislevel = 3; azimuth = Scale "Azimuth (degrees)" (-360) 360 0; elevation = Scale "Elevation (degrees)" 0 90 45; command = Magick.command [ "\"%s\"", "-shade", print azimuth.value ++ "x" ++ print elevation.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_shadow_item = class Menuaction "_Shadow" "simulate a shadow" { action x = class _result { _vislevel = 3; shadowCol = Magick.generalcol_widget; opacity = Scale "Opacity (percent)" 0 100 75; sigma = Scale "Sigma" 0 30 2; // FIXME: make offsets a single widget? offsx = Scale "X-offset" (-20) 20 4; offsy = Scale "Y-offset" (-20) 20 4; arePc = Toggle "offsets are percentages" false; // FIXME: raw operation creates page offset, which vips dislikes. // So we take this futher, compositing with source. command = Magick.command [ "\"%s\"", "\"(\" +clone", "-background", "\"" ++ shadowCol._flag ++ "\"", "-shadow", concat [ "\"", print opacity.value, "x", print sigma.value, (if offsx.value >= 0 then "+" else ""), print offsx.value, (if offsy.value >= 0 then "+" else ""), print offsy.value, (if arePc then "%%" else ""), "\"" ], "\")\" +swap -background None -layers merge", "+repage", "\"%s\"" ]; _result = Magick.system command x; } } Magick_shave_item = class Menuaction "_Shave" "shave pixels from the edges" { action x = class _result { _vislevel = 3; width = Scale "Width" 0 50 10; height = Scale "Height" 0 50 10; isPc = Toggle "Width and height are percent" false; command = Magick.command [ "\"%s\"", "-shave", "\"" ++ print width.value ++ "x" ++ print height.value ++ (if isPc then "%%" else "") ++ "\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_shear_item = class Menuaction "_Shear" "shear along the x-axis and/or y-axis" { action x = class _result { _vislevel = 3; shearX = Expression "shear X (degrees)" 0; shearY = Expression "shear Y (degrees)" 0; background = Magick.background_widget; command = Magick.command [ "\"%s\"", background._flag, "-shear", print shearX.expr ++ "x" ++ print shearY.expr, "\"%s\"" ]; _result = Magick.system command x; } } Magick_sigmoid_item = class Menuaction "_Sigmoid" "increase or decrease mid-tone contrast sigmoidally" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; contrast = Scale "contrast" 0 30 3; midpoint = Scale "mid-point (percent)" 0 100 50; isInv = Toggle "Invert effect" false; command = Magick.command [ "\"%s\"", channels._flag, (if isInv then "+" else "-") ++ "sigmoidal-contrast", "\"" ++ print contrast.value ++ "x" ++ print midpoint.value ++ "%%\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_sketch_item = class Menuaction "_Sketch" "simulate a pencil sketch" { action x = class _result { _vislevel = 3; radius = Magick.blur_rad_widget; sigma = Magick.sigma_widget; angle = Scale "angle" (-360) 360 0; command = Magick.command [ "\"%s\"", "-sketch", print radius.value ++ "x" ++ print sigma.value ++ (if angle >= 0 then ("+" ++ print angle.value) else ""), "\"%s\"" ]; _result = Magick.system command x; } } Magick_solarize_item = class Menuaction "_Solarize" "negate all pixels above a threshold level" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; threshold = Scale "Threshold (percent)" 0 100 50; command = Magick.command [ "\"%s\"", channels._flag, "-solarize", "\"" ++ print threshold.value ++ "%%\"", "\"%s\"" ]; _result = Magick.system command x; } } // FIXME: -sparse-color needs abitrary list of {x,y,colour}. Magick_splice_item = class Menuaction "_Splice" "splice a colour into the image" { action x = class _result { _vislevel = 3; background = Magick.background_widget; gravity = Magick.gravity_widget; geometry = Magick.WhxyGeometry_widget; command = Magick.command [ "\"%s\"", background._flag, gravity._flag, "-splice", geometry._flag, "\"%s\"" ]; _result = Magick.system command x; } } Magick_spread_item = class Menuaction "_Spread" "displace pixels by random amount" { action x = class _result { _vislevel = 3; virtpixback = Magick.VirtualPixelBack_widget; amount = Expression "Amount (pixels)" 5; command = Magick.command [ "\"%s\"", virtpixback._flag, "-spread", print amount.expr, "\"%s\"" ]; _result = Magick.system command x; } } Magick_statistic_item = class Menuaction "_Statistic" "replace each pixel with statistic from neighbourhood" { action x = class _result { _vislevel = 3; width = Expression "Width" 5; height = Expression "Height" 5; statisticType = Magick.StatType_widget; command = Magick.command [ "\"%s\"", "-statistic", statisticType._flag, print width.expr ++ "x" ++ print height.expr, "\"%s\"" ]; _result = Magick.system command x; } } Magick_swirl_item = class Menuaction "_Swirl" "swirl around the centre" { action x = class _result { _vislevel = 3; angle = Magick.angle_widget; command = Magick.command [ "\"%s\"", "-swirl", print angle.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_thresholdMenu_item = class Menupullright "_Threshold" "make black or white" { Magick_threshold_item = class Menuaction "_Threshold" "apply black/white threshold" { action x = class _result { _vislevel = 3; intensity = Magick.intensity_widget; channels = Magick.channels_widget; threshold = Scale "Threshold (percent)" 0 100 50; command = Magick.command [ "\"%s\"", intensity._flag, channels._flag, "-threshold", "\"" ++ print threshold.value ++ "%%\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_blackThreshold_item = class Menuaction "_Black threshold" "where below threshold set to black" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; threshold = Scale "Threshold (percent)" 0 100 50; command = Magick.command [ "\"%s\"", channels._flag, "-black-threshold", "\"" ++ print threshold.value ++ "%%\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_whiteThreshold_item = class Menuaction "_White threshold" "where above threshold set to white" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; threshold = Scale "Threshold (percent)" 0 100 50; command = Magick.command [ "\"%s\"", channels._flag, "-white-threshold", "\"" ++ print threshold.value ++ "%%\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_latThreshold_item = class Menuaction "_Local Adaptive Threshold" "where above average plus offset set to white, otherwise black" { action x = class _result { _vislevel = 3; width = Expression "Width" 10; height = Expression "Height" 10; offset = Scale "Offset (percent)" (-100) 100 0; // note: "-lat" doesn't respond to channels command = Magick.command [ "\"%s\"", "-lat", concat ["\"", print width.expr, "x", print height.expr, (if offset.value >= 0 then "+" else ""), print offset.value, "%%\"" ], "\"%s\"" ]; _result = Magick.system command x; } } Magick_randThreshold_item = class Menuaction "_Random Threshold" "between specified limits, apply random threshold" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; low = Scale "Low threshold" 0 100 10; high = Scale "High threshold" 0 100 90; isPc = Toggle "Thresholds are percent" true; command = Magick.command [ "\"%s\"", channels._flag, "-random-threshold", "\"" ++ print low.value ++ "x" ++ print high.value ++ (if isPc then "%%" else "") ++ "\"", "\"%s\"" ]; _result = Magick.system command x; } } } // end ThresholdMenu_item // Note: alternatives include: // convert in.tif -write mpr:TILE +delete -size 200x200 -background XXXX -tile-offset +30+30 tile:mpr:TILE out.tif Magick_tile_item = class Menuaction "_Tile" "fill given size with tiled image" { action x = class _result { _vislevel = 3; size = Magick.Size_widget; command = Magick.command [ size._flag, "tile:" ++ "\"%s\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_tint_item = class Menuaction "_Tint" "apply a tint" { action x = class _result { _vislevel = 3; foreground = Magick.foreground_widget; amount = Scale "amount (percent)" 0 100 50; command = Magick.command [ "\"%s\"", foreground._flag, "-tint", // snibgo note: although the amount is a percentage, it doesn't need "%" character. print amount.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_transparent_item = class Menuaction "_Transparent" "make this colour transparent" { action x = class _result { _vislevel = 3; changeColour = Magick.changeCol_widget; command = Magick.command [ "\"%s\"", "-fuzz", "\"" ++ print changeColour.fuzz.value ++ "%%\"", (if changeColour.nonMatch then "+" else "-") ++ "transparent", "\"" ++ changeColour.colour._flag ++ "\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_trim_item = class Menuaction "_Trim" "trims away border" { action x = class _result { _vislevel = 3; fuzz = Magick.fuzz_widget; command = Magick.command [ "\"%s\"", "-fuzz", "\"" ++ print fuzz.value ++ "%%\"", "-trim +repage", "\"%s\"" ]; _result = Magick.system command x; } } Magick_uniqueCols_item = class Menuaction "_Unique colours" "discard all but one of any pixel color" { action x = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "-unique-colors", "\"%s\"" ]; _result = Magick.system command x; } } Magick_vignette_item = class Menuaction "_Vignette" "soften the edges in vignette style" { action x = class _result { _vislevel = 3; radius = Magick.blur_rad_widget; sigma = Magick.sigma_widget; rx = Scale "Rolloff x (percent)" 0 100 10; ry = Scale "Rolloff y (percent)" 0 100 10; background = Magick.background_widget; command = Magick.command [ "\"%s\"", background._flag, "-vignette", print radius.value ++ "x" ++ print sigma.value ++ (if rx.value >= 0 then "+" else "") ++ print rx.value ++ (if ry.value >= 0 then "+" else "") ++ print ry.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_wave_item = class Menuaction "_Wave" "shear the columns into a sine wave" { action x = class _result { _vislevel = 3; amplitude = Scale "Amplitude (pixels)" 0 100 10; wavelength = Scale "Wavelength (pixels)" 0 100 10; command = Magick.command [ "\"%s\"", "-wave", print amplitude.value ++ "x" ++ print wavelength.value, "\"%s\"" ]; _result = Magick.system command x; } } nip2-8.7.0/share/nip2/compat/8.3/_predicate.def0000644000175000017500000003252613224651032015651 00000000000000 /* is_colour_space str: is a string one of nip's colour space names */ is_colour_space str = Image_type.colour_spaces.present 0 str; /* is_colour_type n: is a number one of VIPS's colour spaces */ is_colour_type n = Image_type.colour_spaces.present 1 n; /* is_number: is a real or a complex number. */ is_number a = is_real a || is_complex a; /* is_int: is an integer */ is_int a = is_real a && a == (int) a; /* is_uint: is an unsigned integer */ is_uint a = is_int a && a >= 0; /* is_pint: is a positive integer */ is_pint a = is_int a && a > 0; /* is_preal: is a positive real */ is_preal a = is_real a && a > 0; /* is_ureal: is an unsigned real */ is_ureal a = is_real a && a >= 0; /* is_letter c: true if character c is an ASCII letter * * is_letter :: char -> bool */ is_letter c = ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z'); /* is_digit c: true if character c is an ASCII digit * * is_digit :: char->bool */ is_digit x = '0' <= x && x <= '9'; /* A whitespace character. * * is_space :: char->bool */ is_space = member " \n\t"; /* List str starts with section prefix. * * is_prefix "hell" "hello world!" == true * is_prefix :: [*] -> [*] -> bool */ is_prefix prefix str = take (len prefix) str == prefix; /* List str ends with section suffix. * * is_suffix "ld!" "hello world!" == true * is_suffix :: [*] -> [*] -> bool */ is_suffix suffix str = take (len suffix) (reverse str) == reverse suffix; /* List contains seqence. * * is_substr "llo" "hello world!" == true * is_substr :: [*] -> [*] -> bool */ is_substr seq str = any (map (is_prefix seq) (iterate tl str)); /* is_listof p s: true if finite list with p true for every element. */ is_listof p l = is_list l && all (map p l); /* is_string s: true if finite list of char. */ is_string s = is_listof is_char s; /* is_real_list l: is l a list of real numbers ... test each element, * so no infinite lists pls. */ is_real_list l = is_listof is_real l; /* is_string_list l: is l a finite list of finite strings. */ is_string_list l = is_listof is_string l; /* Test list length ... quicker than len x == n for large lists. */ is_list_len n x = true, x == [] && n == 0 = false, x == [] || n == 0 = is_list_len (n - 1) (tl x); is_list_len_more n x = true, x != [] && n == 0 = false, x == [] || n == 0 = is_list_len_more (n - 1) (tl x); is_list_len_more_equal n x = true, n == 0 = false, x == [] = is_list_len_more_equal (n - 1) (tl x); /* is_rectangular l: is l a rectangular data structure */ is_rectangular l = true, !is_list l = true, all (map is_obj l) = true, all (map is_list l) && all (map (not @ is_obj) l) && all (map is_rectangular l) && is_list_len_more 0 l && all (map (is_list_len (len (hd l))) (tl l)) = false { // treat strings as a base type, not [char] is_obj x = !is_list x || is_string x; } /* is_matrix l: is l a list of lists of real numbers, all the same length * * [[]] is the empty matrix, [] is the empty list ... disallow [] */ is_matrix l = l != [] && is_listof is_real_list l && is_rectangular l; /* is_square_matrix l: is l a matrix with width == height */ is_square_matrix l = true, l == [[]] = is_matrix l && is_list_len (len (hd l)) l; /* is_oddmatrix l: is l a matrix with odd-length sides */ is_oddmatrix l = true, l == [[]] = is_matrix l && len l % 2 == 1 && len l?0 % 2 == 1; /* is_odd_square_matrix l: is l a square_matrix with odd-length sides */ is_odd_square_matrix l = is_square_matrix l && len l % 2 == 1; /* Is an item in a column of a table? */ is_incolumn n table x = member (map (extract n) table) x; /* Is HGuide or VGuide. */ is_HGuide x = is_instanceof "HGuide" x; is_VGuide x = is_instanceof "VGuide" x; is_Guide x = is_HGuide x || is_VGuide x; is_Mark x = is_instanceof "Mark" x; is_Group x = is_instanceof "Group" x; is_NULL x = is_instanceof "NULL" x; is_List x = is_instanceof "List" x; is_Image x = is_instanceof "Image" x; is_Plot x = is_instanceof "Plot" x; is_Region x = is_instanceof "Region" x; is_Real x = is_instanceof "Real" x; is_Matrix x = is_instanceof "Matrix_base" x; is_Vector x = is_instanceof "Vector" x; is_Colour x = is_instanceof "Colour" x; is_Arrow x = is_instanceof "Arrow" x; is_Bool x = is_instanceof "Bool" x; is_Scale x = is_instanceof "Scale" x; is_Rect x = is_instanceof "Rect" x; is_Number x = is_instanceof "Number" x; is_Expression x = is_instanceof "Expression" x; is_String x = is_instanceof "String" x; /* A list of the form [[1,2],[3,4],[5,6]...] */ is_xy_list l = is_list l && all (map xy l) { xy l = is_real_list l && is_list_len 2 l; } // does a nested list structure contain a Group object? contains_Group l = true, is_list l && any (map is_Group l) = any (map contains_Group l), is_list l = false; /* Does an object have a sensible VIPS type? */ has_type x = is_image x || is_Image x || is_Arrow x || is_Colour x; /* Try to get a VIPS image type from an object. */ get_type x = get_type_im x, is_image x = get_type_im x.value, is_Image x = get_type_im x.image.value, is_Arrow x = Image_type.colour_spaces.lookup 0 1 x.colour_space, is_Colour x // slightly odd ... but our display is always 0-255, so it makes sense for // a plain number to be in the same range = Image_type.sRGB, is_real x = oo_unary_function get_type_op x, is_class x = error (_ "bad arguments to " ++ "get_type") { get_type_op = Operator "get_type" get_type Operator_type.COMPOUND false; // get the type from a VIPS image ... but only if it makes sense with // the rest of the image // we often have Type set wrong, hence the ugly guessing :-( // can have alpha, hence we let bands be one more than you might think get_type_im im = Image_type.LABQ, coding == Image_coding.LABPACK = Image_type.GREY16, type == Image_type.GREY16 && is_bands 1 = Image_type.HISTOGRAM, type == Image_type.HISTOGRAM && (width == 1 || height == 1) = Image_type.B_W, is_bands 1 = Image_type.CMYK, type == Image_type.CMYK && is_bands 4 = type, is_colorimetric && is_bands 3 = Image_type.sRGB, !is_colorimetric && is_bands 3 = Image_type.MULTIBAND, !is_colorimetric && !is_bands 3 = type { type = get_header "Type" im; coding = get_header "Coding" im; bands = get_header "Bands" im; width = get_header "Xsize" im; height = get_header "Ysize" im; // 3-band colorimetric types we allow ... the things which the // Colour/Convert To menu can make, excluding mono. ok_types = [ Image_type.sRGB, Image_type.RGB16, Image_type.LAB, Image_type.LABQ, Image_type.LABS, Image_type.LCH, Image_type.XYZ, Image_type.YXY, Image_type.UCS ]; is_colorimetric = member ok_types type; // is bands n, with an optional alpha (ie. can be n + 1 too) is_bands n = bands == n || bands == n + 1; } } has_format x = has_member "format" x || is_Arrow x || is_image x; get_format x = x.format, has_member "format" x = x.image.format, is_Arrow x = get_header "BandFmt" x, is_image x = oo_unary_function get_format_op x, is_class x = error (_ "bad arguments to " ++ "get_format") { get_format_op = Operator "get_format" get_format Operator_type.COMPOUND false; } has_bits x = has_member "bits" x || is_Arrow x || is_image x; get_bits x = x.bits, has_member "bits" x = x.image.bits, is_Arrow x = get_header "Bbits" x, is_image x = oo_unary_function get_bits_op x, is_class x = error (_ "bad arguments to " ++ "get_bits") { get_bits_op = Operator "get_bits" get_format Operator_type.COMPOUND false; } has_bands x = is_image x || has_member "bands" x || is_Arrow x; get_bands x = x.bands, has_member "bands" x = x.image.bands, is_Arrow x = get_header "Bands" x, is_image x = 1, is_real x = len x, is_real_list x = oo_unary_function get_bands_op x, is_class x = error (_ "bad arguments to " ++ "get_bands") { get_bands_op = Operator "get_bands" get_bands Operator_type.COMPOUND false; } has_coding x = has_member "coding" x || is_Arrow x || is_image x; get_coding x = x.coding, has_member "coding" x = x.image.coding, is_Arrow x = get_header "Coding" x, is_image x = Image_coding.NOCODING, is_real x = oo_unary_function get_coding_op x, is_class x = error (_ "bad arguments to " ++ "get_coding") { get_coding_op = Operator "get_coding" get_coding Operator_type.COMPOUND false; } has_xres x = has_member "xres" x || is_Arrow x || is_image x; get_xres x = x.xres, has_member "xres" x = x.image.xres, is_Arrow x = get_header "Xres" x, is_image x = oo_unary_function get_xres_op x, is_class x = error (_ "bad arguments to " ++ "get_xres") { get_xres_op = Operator "get_xres" get_xres Operator_type.COMPOUND false; } has_yres x = has_member "yres" x || is_Arrow x || is_image x; get_yres x = x.yres, has_member "yres" x = x.image.yres, is_Arrow x = get_header "Yres" x, is_image x = oo_unary_function get_yres_op x, is_class x = error (_ "bad arguments to " ++ "get_yres") { get_yres_op = Operator "get_yres" get_yres Operator_type.COMPOUND false; } has_xoffset x = has_member "xoffset" x || is_Arrow x || is_image x; get_xoffset x = x.xoffset, has_member "xoffset" x = x.image.xoffset, is_Arrow x = get_header "Xoffset" x, is_image x = oo_unary_function get_xoffset_op x, is_class x = error (_ "bad arguments to " ++ "get_xoffset") { get_xoffset_op = Operator "get_xoffset" get_xoffset Operator_type.COMPOUND false; } has_yoffset x = has_member "yoffset" x || is_Arrow x || is_image x; get_yoffset x = x.yoffset, has_member "yoffset" x = x.image.yoffset, is_Arrow x = get_header "Yoffset" x, is_image x = oo_unary_function get_yoffset_op x, is_class x = error (_ "bad arguments to " ++ "get_yoffset") { get_yoffset_op = Operator "get_yoffset" get_yoffset Operator_type.COMPOUND false; } has_value = has_member "value"; get_value x = x.value; has_image x = is_image x || is_Image x || is_Arrow x; get_image x = x.value, is_Image x = x.image.value, is_Arrow x = x, is_image x = oo_unary_function get_image_op x, is_class x = error (_ "bad arguments to " ++ "get_image") { get_image_op = Operator "get_image" get_image Operator_type.COMPOUND false; } has_number x = is_number x || is_Real x; get_number x = x.value, is_Real x = x, is_number x = oo_unary_function get_number_op x, is_class x = error (_ "bad arguments to " ++ "get_number") { get_number_op = Operator "get_number" get_number Operator_type.COMPOUND false; } has_real x = is_real x || is_Real x; get_real x = x.value, is_Real x = x, is_real x = oo_unary_function get_real_op x, is_class x = error (_ "bad arguments to " ++ "get_real") { get_real_op = Operator "get_real" get_real Operator_type.COMPOUND false; } has_width x = has_member "width" x || is_image x; get_width x = x.width, has_member "width" x = get_header "Xsize" x, is_image x = oo_unary_function get_width_op x, is_class x = error (_ "bad arguments to " ++ "get_width") { get_width_op = Operator "get_width" get_width Operator_type.COMPOUND false; } has_height x = has_member "height" x || is_image x; get_height x = x.height, has_member "height" x = get_header "Ysize" x, is_image x = oo_unary_function get_height_op x, is_class x = error (_ "bad arguments to " ++ "get_height") { get_height_op = Operator "get_height" get_height Operator_type.COMPOUND false; } has_left x = has_member "left" x; get_left x = x.left, has_member "left" x = oo_unary_function get_left_op x, is_class x = error (_ "bad arguments to " ++ "get_left") { get_left_op = Operator "get_left" get_left Operator_type.COMPOUND false; } has_top x = has_member "top" x; get_top x = x.top, has_member "top" x = oo_unary_function get_top_op x, is_class x = error (_ "bad arguments to " ++ "get_top") { get_top_op = Operator "get_top" get_top Operator_type.COMPOUND false; } // like has/get member, but first in a lst of objects has_member_list has objects = filter has objects != []; // need one with the args swapped get_member = converse dot; // get a member from the first of a list of objects to have it get_member_list has get objects = hd members, members != [] = error "unable to get property" { members = map get (filter has objects); } is_hist x = has_image x && (h == 1 || w == 1 || t == Image_type.HISTOGRAM) { im = get_image x; w = get_width im; h = get_height im; t = get_type im; } get_header field x = oo_unary_function get_header_op x, is_class x = get_header_image x, is_image x = error (_ "bad arguments to " ++ "get_header") { get_header_op = Operator "get_header" (get_header field) Operator_type.COMPOUND false; get_header_image im = im_header_int field im, type == itype = im_header_double field im, type == dtype = im_header_string field im, type == stype1 || type == stype2 = error (_ "image has no field " ++ field), type == 0 = error (_ "unknown type for field " ++ field) { type = im_header_get_typeof field im; itype = name2gtype "gint"; dtype = name2gtype "gdouble"; stype1 = name2gtype "VipsRefString"; stype2 = name2gtype "gchararray"; } } get_header_type field x = oo_unary_function get_header_type_op x, is_class x = im_header_get_typeof field x, is_image x = error (_ "bad arguments to " ++ "get_header_type") { get_header_type_op = Operator "get_header_type" (get_header_type field) Operator_type.COMPOUND false; } set_header field value x = oo_unary_function set_header_op x, is_class x = im_copy_set_meta x field value, is_image x = error (_ "bad arguments to " ++ "set_header") { set_header_op = Operator "set_header" (set_header field value) Operator_type.COMPOUND false; } nip2-8.7.0/share/nip2/compat/8.3/Widgets.def0000644000175000017500000000235313224651032015153 00000000000000Widget_slider_item = class Menuaction "_Scale" "make a new scale widget" { icon = "nip-slider-16.png"; action = Scale "untitled scale" 0 255 128; } Widget_toggle_item = class Menuaction "_Toggle" "make a new toggle widget" { action = Toggle "untitled toggle" false; } Widget_option_item = class Menuaction "_Option" "make a new option widget" { action = Option "untitled option" ["option0", "option1"] 0; } Widget_string_item = class Menuaction "St_ring" "make a new string widget" { action = String "Enter a string" "sample text"; } Widget_number_item = class Menuaction "_Number" "make a new number widget" { action = Number "Enter a number" 42; } Widget_expression_item = class Menuaction "_Expression" "make a new expression widget" { action = Expression "Enter an expression" 42; } Widget_pathname_item = class Menuaction "_File Chooser" "make a new file chooser widget" { action = Pathname "Pick a file" "$VIPSHOME/share/$PACKAGE/data/print_test_image.v"; } Widget_font_item = class Menuaction "F_ont Chooser" "make a new font chooser widget" { action = Fontname "Pick a font" Workspaces.Preferences.PAINTBOX_FONT; } Widget_clock_item = class Menuaction "_Clock" "make a new clock widget" { action = Clock 1 1; } nip2-8.7.0/share/nip2/compat/8.3/Colour.def0000644000175000017500000003773013224651032015017 00000000000000 Colour_new_item = class Menupullright (_ "_New") (_ "make a patch of colour") { Widget_colour_item = class Menuaction (_ "_Colour") (_ "make a patch of colour") { action = Colour_picker "Lab" [50,0,0]; } LAB_colour = class Menuaction (_ "CIE Lab _Picker") (_ "pick colour in CIE Lab space") { action = widget "Lab" [50, 0, 0]; // ab_slice size size = 512; // range of values ... +/- 128 for ab range = 256; // map xy in slice image to ab and back xy2ab x = x / (size / range) - 128; ab2xy a = (a + 128) * (size / range); widget space default_value = class Colour space _result { _vislevel = 3; [_L, _a, _b] = default_value; L = Scale "Lightness" 0 100 _L; ab_slice = Image (lab_slice size L.value); point = Mark ab_slice (ab2xy _a) (ab2xy _b); _result = [L.value, xy2ab point.left, xy2ab point.top]; Colour_edit colour_space value = widget colour_space value; } } CCT_colour = class Menuaction (_ "Colour from CCT") (_ "pick colour by CCT") { action = widget 6500; widget x = class _result { _vislevel = 3; T = Scale "CCT" 1800 25000 x; _result = colour_from_temp (to_real T); Colour_edit space value = widget (temp_from_colour (Colour space value)); } } } Colour_to_colour_item = class Menuaction (_ "Con_vert to Colour") (_ "convert anything to a colour") { action x = to_colour x; } #separator Colour_convert_item = class Menupullright (_ "_Colourspace") (_ "convert to various colour spaces") { spaces = Image_type.image_colour_spaces; conv dest x = class _result { _vislevel = 3; to = Option_enum (_ "Convert to") spaces (spaces.get_name dest); _result = map_unary (colour_transform_to to.value_thing) x; } Mono_item = class Menuaction (_ "_Monochrome") (_ "convert to mono colourspace") { action x = conv Image_type.B_W x; } sRGB_item = class Menuaction (_ "_sRGB") (_ "convert to sRGB colourspace") { action x = conv Image_type.sRGB x; } GREY16_item = class Menuaction (_ "_GREY16") (_ "convert to GREY16 colourspace") { action x = conv Image_type.GREY16 x; } RGB16_item = class Menuaction (_ "_RGB16") (_ "convert to RGB16 colourspace") { action x = conv Image_type.RGB16 x; } Lab_item = class Menuaction (_ "_Lab") (_ "convert to Lab colourspace (float Lab)") { action x = conv Image_type.LAB x; } LabQ_item = class Menuaction (_ "Lab_Q") (_ "convert to LabQ colourspace (32-bit Lab)") { action x = conv Image_type.LABQ x; } LabS_item = class Menuaction (_ "Lab_S") (_ "convert to LabS colourspace (48-bit Lab)") { action x = conv Image_type.LABS x; } LCh_item = class Menuaction (_ "L_Ch") (_ "convert to LCh colourspace") { action x = conv Image_type.LCH x; } XYZ_item = class Menuaction (_ "_XYZ") (_ "convert to XYZ colourspace") { action x = conv Image_type.XYZ x; } Yxy_item = class Menuaction (_ "_Yxy") (_ "convert to Yxy colourspace") { action x = conv Image_type.YXY x; } UCS_item = class Menuaction (_ "_UCS") (_ "convert to UCS colourspace") { action x = conv Image_type.UCS x; } } /* mark objects as being in various colourspaces */ Colour_tag_item = class Menupullright (_ "_Tag As") (_ "tag object as being in various colour spaces") { spaces = Image_type.image_colour_spaces; tag dest x = class _result { _vislevel = 3; to = Option_enum (_ "Tag as") spaces (spaces.get_name dest); _result = map_unary (image_set_type to.value_thing) x; } Mono_item = class Menuaction (_ "_Monochrome") (_ "tag as being in mono colourspace") { action x = tag Image_type.B_W x; } sRGB_item = class Menuaction (_ "_sRGB") (_ "tag as being in sRGB colourspace") { action x = tag Image_type.sRGB x; } RGB16_item = class Menuaction (_ "_RGB16") (_ "tag as being in RGB16 colourspace") { action x = tag Image_type.RGB16 x; } GREY16_item = class Menuaction (_ "_GREY16") (_ "tag as being in GREY16 colourspace") { action x = tag Image_type.GREY16 x; } Lab_item = class Menuaction (_ "_Lab") (_ "tag as being in Lab colourspace (float Lab)") { action x = tag Image_type.LAB x; } LabQ_item = class Menuaction (_ "Lab_Q") (_ "tag as being in LabQ colourspace (32-bit Lab)") { action x = tag Image_type.LABQ x; } LabS_item = class Menuaction (_ "Lab_S") (_ "tag as being in LabS colourspace (48-bit Lab)") { action x = tag Image_type.LABS x; } LCh_item = class Menuaction (_ "L_Ch") (_ "tag as being in LCh colourspace") { action x = tag Image_type.LCH x; } XYZ_item = class Menuaction (_ "_XYZ") (_ "tag as being in XYZ colourspace") { action x = tag Image_type.XYZ x; } Yxy_item = class Menuaction (_ "_Yxy") (_ "tag as being in Yxy colourspace") { action x = tag Image_type.YXY x; } UCS_item = class Menuaction (_ "_UCS") (_ "tag as being in UCS colourspace") { action x = tag Image_type.UCS x; } } Colour_temperature_item = class Menupullright (_ "Te_mperature") (_ "colour temperature conversions") { Whitepoint_item = class Menuaction (_ "_Move Whitepoint") (_ "change whitepoint") { action x = class _result { _vislevel = 3; old_white = Option_enum (_ "Old whitepoint") Whitepoints "D65"; new_white = Option_enum (_ "New whitepoint") Whitepoints "D50"; _result = map_unary process x { process im = im''' { im' = colour_transform_to Image_type.XYZ im; im'' = im' * (new_white.value_thing / old_white.value_thing); im''' = colour_transform_to (get_type im) im''; } } } } D65_to_D50_item = class Menupullright (_ "D_65 to D50") (_ "complex conversion") { XYZ_minimal_item = class Menuaction (_ "_Minimal") (_ "D65 to D50 using the minimal 3x3 matrix in XYZ") { action x = map_unary process x { process im = im''' { im' = colour_transform_to Image_type.XYZ im; im'' = recomb D652D50_direct im'; im''' = colour_transform_to (get_type im) im''; } } } Bradford_item = class Menuaction (_ "_Bradford") (_ "D65 to D50 in Bradford cone space") { action x = map_unary process x { process im = im''' { im' = colour_transform_to Image_type.XYZ im; im'' = im_D652D50 im'; im''' = colour_transform_to (get_type im) im''; } } } } D50_to_D65_item = class Menupullright (_ "D_50 to D65") (_ "complex conversion") { XYZ_minimal_item = class Menuaction (_ "_Minimal") (_ "D50 to D65 using the minimal 3x3 matrix in XYZ") { action x = map_unary process x { process im = im''' { im' = colour_transform_to Image_type.XYZ im; im'' = recomb D502D65_direct im'; im''' = colour_transform_to (get_type im) im''; } } } Bradford_item = class Menuaction (_ "_Bradford") (_ "D60 to D65 in Bradford cone space") { action x = map_unary process x { process im = im''' { im' = colour_transform_to Image_type.XYZ im; im'' = im_D502D65 im'; im''' = colour_transform_to (get_type im) im''; } } } } Lab_to_D50XYZ_item = class Menuaction (_ "_Lab to D50 XYZ") (_ "Lab to XYZ with a D50 whitepoint") { action x = map_unary (colour_unary im_D50Lab2XYZ) x; } D50XYZ_to_Lab_item = class Menuaction (_ "D50 _XYZ to Lab") (_ "XYZ to Lab with a D50 whitepoint") { action x = map_unary (colour_unary im_D50XYZ2Lab) x; } sep1 = Menuseparator; CCT_item = class Menuaction (_ "Calculate temperature") (_ "estimate CCT using the McCamy approximation") { action z = map_unary temp_from_colour z; } Colour_item = Colour_new_item.CCT_colour; } Colour_icc_item = class Menupullright (_ "_ICC") (_ "transform with ICC profiles") { print_profile = "$VIPSHOME/share/$PACKAGE/data/cmyk.icm"; monitor_profile = "$VIPSHOME/share/$PACKAGE/data/sRGB.icm"; guess_profile image = print_profile, has_type image && get_type image == Image_type.CMYK && has_bands image && get_bands image >= 4 = monitor_profile; render_intents = Option_enum (_ "Render intent") Render_intent.names (_ "Absolute"); Export_item = class Menuaction (_ "_Export") (_ "export from PCS to device space") { action x = class _result { _vislevel = 3; profile = Pathname (_ "Output profile") print_profile; intent = render_intents; depth = Option (_ "Output depth") [_ "8 bit", _ "16 bit"] 0; _result = map_unary process x { process image = icc_export [8, 16]?depth profile.value intent.value_thing lab { lab = colour_transform_to Image_type.LABQ image; } } } } Import_item = class Menuaction (_ "_Import") (_ "import from device space to PCS") { action x = class _result { _vislevel = 3; embedded = Toggle (_ "Use embedded profile if possible") false; profile = Pathname (_ "Default input profile") (guess_profile x); intent = render_intents; _result = map_unary process x { process image = icc_import_embedded intent.value_thing image, get_header_type "icc-profile-data" image != 0 && embedded = icc_import profile.value intent.value_thing image; } } } Transform_item = class Menuaction (_ "_Transform") (_ "transform between two device spaces") { action x = class _result { _vislevel = 3; in_profile = Pathname (_ "Input profile") (guess_profile x); out_profile = Pathname (_ "Output profile") print_profile; intent = render_intents; _result = map_unary process x { process image = icc_transform in_profile.value out_profile.value intent.value_thing image; } } } AC2RC_item = class Menuaction (_ "_Absolute to Relative") (_ "absolute to relative colorimetry using device profile") { action x = class _result { _vislevel = 3; profile = Pathname (_ "Pick a profile") (guess_profile x); _result = map_unary process x { process image = icc_ac2rc profile.value lab { lab = colour_transform_to Image_type.LAB image; } } } } } Colour_rad_item = class Menupullright (_ "_Radiance") (_ "convert to and from Radiance packed format") { Unpack_item = class Menuaction (_ "Unpack") (_ "unpack Radiance format to float") { action x = map_unary rad2float x; } Pack_item = class Menuaction (_ "Pack") (_ "pack 3-band float to Radiance format") { action x = map_unary float2rad x; } } #separator Colour_dE_item = class Menupullright (_ "_Difference") (_ "calculate colour difference") { /* Apply a converter to an object ... convert image or colour (since * we can guess the colour space we're converting from), don't convert * matrix or vector (since we can't tell ... assume it's in the right * space already). */ apply_cvt cvt x = cvt x, is_Image x || is_Colour x || is_image x = x; diff cvt in1 in2 = abs_vec (apply_cvt cvt in1 - apply_cvt cvt in2); /* Converter to LAB. */ lab_cvt = colour_transform_to Image_type.LAB; /* Converter to UCS ... plain UCS is Ch form, so we go LAB again after * to make sure we get a rectangular coord system. */ ucs_cvt = colour_transform Image_type.LCH Image_type.LAB @ colour_transform_to Image_type.UCS; CIEdE76_item = class Menuaction (_ "CIE dE _76") (_ "calculate CIE dE 1976 for two objects") { action a b = map_binary (diff lab_cvt) a b; } CIEdE00_item = class Menuaction (_ "CIE dE _00") (_ "calculate CIE dE 2000 for two objects") { action a b = map_binary (colour_binary (_ "im_dE00_fromLab") im_dE00_fromLab) a b; } UCS_item = class Menuaction (_ "_CMC(l:l)") (_ "calculate CMC(l:l) for two objects") { action a b = map_binary (diff ucs_cvt) a b; } } Colour_adjust_item = class Menupullright (_ "_Adjust") (_ "alter colours in various ways") { Recombination_item = class Menuaction (_ "_Recombination") (_ "recombine colour with an editable matrix") { action x = class _result { _vislevel = 3; matrix = Matrix_rec (identity_matrix (bands x)) { // try to guess a sensible value for the size of the // matrix bands x = x.bands, is_Image x || is_Colour x = x.width, is_Matrix x = bands x.value?0, is_Group x = x.bands, has_member "bands" x = 3; } _result = map_unary (recomb matrix) x; } } Cast_item = class Menuaction (_ "_Cast") (_ "displace neutral axis in CIE Lab") { action x = class _result { _vislevel = 3; gr = Scale "Green-red" (-20) 20 0; by = Scale "Blue-yellow" (-20) 20 0; _result = map_unary adjust_cast x { adjust_cast in = colour_transform_to (get_type in) in'' { in' = colour_transform_to Image_type.LAB in; in'' = in' + Vector [0, gr.value, by.value]; } } } } HSB_item = class Menuaction (_ "_HSB") (_ "adjust hue-saturation-brightness in LCh") { action x = class _result { _vislevel = 3; h = Scale "Hue" 0 360 0; s = Scale "Saturation" 0.01 5 1; b = Scale "Brightness" 0.01 5 1; _result = map_unary adjust_hsb x { adjust_hsb in = colour_transform_to (get_type in) in'' { in' = colour_transform_to Image_type.LCH in; in'' = in' * Vector [b.value, s.value, 1] + Vector [0, 0, h.value]; } } } } } Colour_similar_item = class Menuaction (_ "_Similar Colour") (_ "find pixels with a similar colour") { action x = class _result { _vislevel = 3; target_colour = Colour_picker "Lab" [50, 0, 0]; t = Scale "dE threshold" 0 100 10; _result = map_unary match x { match in = abs_vec (in' - target) < t { target = colour_transform_to Image_type.LAB target_colour; in' = colour_transform_to Image_type.LAB in; } } } } #separator Colour_chart_to_matrix_item = class Menuaction (_ "_Measure Colour Chart") (_ "measure average pixel values for a colour chart image") { action x = class _result { _vislevel = 3; pacross = Expression (_ "Patches across chart") 6; pdown = Expression (_ "Patches down chart") 4; measure = Scale (_ "Measure area (%)") 1 100 50; // get a representative image from an arg get_image x = get_image x.value?0, is_Group x = x; _im = get_image x; sample = measure_draw (to_real pacross) (to_real pdown) (to_real measure) _im; _result = map_unary chart x { chart in = measure_sample (to_real pacross) (to_real pdown) (to_real measure) in; } } } Colour_matrix_to_chart_item = class Menuaction (_ "Make Synth_etic Colour Chart") (_ "make a colour chart image from a matrix of measurements") { action x = class _result { _vislevel = 3; pacross = Expression (_ "Patches across chart") 6; pdown = Expression (_ "Patches down chart") 4; pwidth = Expression (_ "Patch width in pixels") 50; pheight = Expression (_ "Patch height in pixels") 50; bwidth = Expression (_ "Border between patches") 0; _result = map_unary build_chart x { build_chart in = Image (imagearray_assemble (to_real bwidth) (to_real bwidth) patch_table) { // patch numbers for row starts rowstart = map (multiply (to_real pacross)) [0 .. to_real pdown - 1]; // assemble patches ... each one a pixel value patches = map (take (to_real pacross)) (map (converse drop in.value) rowstart); // make an n-band constant image from eg. [1,2,3] // we don't know the format .. use sRGB (well, why not?) patch v = image_new (to_real pwidth) (to_real pheight) (len v) Image_format.FLOAT Image_coding.NOCODING Image_type.sRGB (Vector v) 0 0; // make an image for each patch patch_table = map (map patch) patches; } } } } Colour_plot_ab_scatter_item = class Menuaction (_ "_Plot ab Scatter") (_ "plot an ab scatter histogram") { action x = class _result { _vislevel = 3; bins = Expression (_ "Number of bins on each axis") 8; _result = map_unary plot_scatter x { plot_scatter in = Image (bg * (((90 / mx) * hist) ++ blk)) { lab = colour_transform_to Image_type.LAB in.value; ab = (unsigned char) ((lab?1 ++ lab?2) + 128); hist = hist_find_nD bins.expr ab; mx = max hist; bg = lab_slice bins.expr 1; blk = 1 + im_black (to_real bins) (to_real bins) 2; } } } } nip2-8.7.0/share/nip2/compat/8.3/_joe_extra.def0000644000175000017500000003107513224651032015667 00000000000000//////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// Frame_item = class Menupullright "Picture _Frame" "working with images of frames" { //////////////////////////////////////////////////////////////////////////////////// Build_frame_item = class Menupullright "_Build Frame From" "builds a new frame from image a and places it around image b" { //////////////////////////////////////////////////////////////////////////////////// Frame_corner_item = class Menuaction "_Frame Corner" "copies and extends a frame corner, a, to produce a complete frame to fit round a given image, b" { prefs = Workspaces.Preferences; action a b = class _result { _check_args = [ [a, "a", check_Image], [b, "b", check_Image] ]; _check_all = [ [a.coding == b.coding && a.bands == b.bands, "a.coding == b.coding && a.bands == b.bands"] ]; _vislevel = 3; ppcm = Expression "Number of pixels per cm" 25; /* Given the value of ppcm, distance between the inner edge of the frame * and the outer edge of the image. +ve values mean the frame overlaps * the image. */ overlap = Expression "Size of frame overlap in cm" 0; variables = Frame_variables 0; _type = Image_type.colour_spaces.get_name b.type; //If applied the count colour be seen for -ve values of overlap mount_options = Mount_options _type ppcm.expr; _cs = variables.corner_section.value; _ms = variables.middle_section.value; _ov = ppcm.expr * overlap.expr; _sf = variables.scale_factor.expr; _bf = variables.blend_fraction.value; //Scale frame image if required. _a = a, _sf == 1; = a, _sf == 0; = Image (resize Kernel_linear _sf _sf a.value); _im_w = b.width; _im_h = b.height + mount_options._los, mount_options.apply = b.height; _os = mount_options._los, mount_options.apply = 0; _cl = Vector mount_options.mount_colour.value, mount_options.apply = 0; //Produce scaled and resized frame. frame = corner_frame _a _im_w _im_h _ov _cs _ms _bf; //Resize image canvas and applied mount colour as required. _pos_im = frame_position_image b frame _os _cl; //Wrap frame round image. _result = if (frame == 0) then _pos_im else frame; } } //////////////////////////////////////////////////////////////////////////////////// Simple_frame_item = class Menuaction "_Simple Frame" "extends or shortens the central sections of a simple frame, a, to fit round a given image, b" { prefs = Workspaces.Preferences; action a b = class _result { _check_args = [ [a, "a", check_Image], [b, "b", check_Image] ]; _check_all = [ [a.coding == b.coding && a.bands == b.bands, "a.coding == b.coding && a.bands == b.bands"] ]; _vislevel = 3; ppcm = Expression "Number of pixels per cm" 25; /* Given the value of ppcm, distance between the inner edge of the frame * and the outer edge of the image. +ve values mean the frame overlaps * the image. */ overlap = Expression "Size of frame overlap in cm" 0; variables = Frame_variables 0; _type = Image_type.colour_spaces.get_name b.type; //If applied the count colour be seen for -ve values of overlap mount_options = Mount_options _type ppcm.expr; _cs = variables.corner_section.value; _ms = variables.middle_section.value; _ov = ppcm.expr * overlap.expr; _sf = variables.scale_factor.expr; _bf = variables.blend_fraction.value; //Scale frame image if required. _a = a, _sf == 1; = a, _sf == 0; = Image (resize Kernel_linear _sf _sf a.value); _im_w = b.width; _im_h = b.height + mount_options._los, mount_options.apply = b.height; _os = mount_options._los, mount_options.apply = 0; _cl = Vector mount_options.mount_colour.value, mount_options.apply = 0; //Produce scaled and resized frame. frame = simple_frame _a _im_w _im_h _ov _cs _ms _bf variables.option; //Resize image canvas and applied mount colour as required. _pos_im = frame_position_image b frame _os _cl; //Wrap frame round image. _result = if (frame == 0) then _pos_im else frame; } } //////////////////////////////////////////////////////////////////////////////////// Complex_frame_item = class Menuaction "_Complex Frame" "extends or shortens the central sections of a frame a, preserving any central edge details, to fit image b" { prefs = Workspaces.Preferences; action a b = class _result { _check_args = [ [a, "a", check_Image], [b, "b", check_Image] ]; _check_all = [ [a.coding == b.coding && a.bands == b.bands, "a.coding == b.coding && a.bands == b.bands"] ]; _vislevel = 3; ppcm = Expression "Number of pixels per cm" 25; /* Given the value of ppcm, distance between the inner edge of the frame * and the outer edge of the image. +ve values mean the frame overlaps * the image. */ overlap = Expression "Size of frame overlap in cm" 0; variables = Frame_variables 1; _type = Image_type.colour_spaces.get_name b.type; //If applied the count colour be seen for -ve values of overlap mount_options = Mount_options _type ppcm.expr; _cs = variables.corner_section.value; _es = variables.edge_section.value; _ms = variables.middle_section.value; _ov = ppcm.expr * overlap.expr; _sf = variables.scale_factor.expr; _bf = variables.blend_fraction.value; _a = a, _sf == 1; = a, _sf == 0; = Image (resize Kernel_linear _sf _sf a.value); _im_w = b.width; _im_h = b.height + mount_options._los, mount_options.apply = b.height; _os = mount_options._los, mount_options.apply = 0; _cl = Vector mount_options.colour.value, mount_options.apply = 0; //Produce scaled and resized frame. frame = complex_frame _a _im_w _im_h _ov _cs _es _ms _bf variables.option; //Resize image canvas and applied mount colour as required. _pos_im = frame_position_image b frame _os _cl; //Wrap frame round image. _result = if (frame == 0) then _pos_im else frame; } } } //////////////////////////////////////////////////////////////////////////////////// Straighten_frame_item = class Menuaction "_Straighten Frame" "uses four points to square up distorted images of frames" { action a = Perspective_item.action a; } }; //////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// Select_item = class Menupullright "_Select" "select user defined areas of an image" { prefs = Workspaces.Preferences; /* Option toggle used to define whether the user is replacing a * dark or a light area. */ _control = Option "Make" [ "Selection Brighter", "Selection Darker", "Selection Black", "Selection White", "Background Black", "Background White", "Mask" ] 4; control_selection mask im no = [ if mask then im * 1.2 else im * 1, if mask then im * 0.8 else im * 1, if mask then 0 else im, if mask then 255 else im, if mask then im else 0, if mask then im else 255, mask ]?no; Rectangle = class Menuaction "_Rectangle" "use an Arrow or Region x to define a rectangle" { action x = class _result { _vislevel = 3; control = _control; _result = control_selection mask im control { im = x.image; mask = Image m { rx = x.region_rect, is_Region x = x; b = image_new im.width im.height 1 0 0 1 0 0 0; w = image_new rx.nwidth rx.nheight 1 0 0 1 255 0 0; m = insert_noexpand rx.nleft rx.ntop w b; } } } } Elipse = class Menuaction "_Ellipse" "use a line/arrow x to define the center point radius and direction of an ellipse" { action x = class _result { _vislevel = 3; control = _control; width = Scale "Width" 0.01 1 0.5; _result = control_selection mask im control { mask = select_ellipse x width.value; im = x.image; } } } Tetragon = class Menuaction "_Tetragon" "selects the convex area defined by four points" { action a b c d = class _result { _vislevel = 3; control = _control; _result = control_selection mask im control { mask = select_tetragon a b c d; im = get_image a; } } } Polygon = class Menuaction "_Polygon" "selects a polygon from an ordered group of points" { action pt_list = class _result { _vislevel = 3; control = _control; _result = control_selection mask im control { mask = select_polygon pt_list; im = get_image ((pt_list.value)?0); } } } sep1 = Menuseparator; Threshold_item = class Menuaction "Thres_hold" "simple image threshold" { action x = class _result { _vislevel = 3; t = Scale "Threshold" 0 mx (mx / 2) { mx = Image_format.maxval x.format, is_Image x = 255; } _result = map_unary (more t.value) x; } } Threshold_percent_item = class Menuaction "Per_cent Threshold" "threshold at a percentage of pixels" { action x = class _result { _vislevel = 3; t = Scale "Percentage of pixels" 0 100 50; _result = map_unary (more (hist_thresh (t.value / 100) x)) x; } } sep2 = Menuseparator; Segment_item = class Menuaction "_Segment" "break image into disjoint regions" { action x = class _result { _vislevel = 3; segments = Expression "Number of disjoint regions" (map_unary (get_header "n-segments") _result); _result = map_unary segment x; } } }; //////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// Perspective_match_item = class Menuaction "_Perspective Match" "rotate, scale and skew one image to match another" { action x y = class _result { _vislevel = 3; // try to find an image ... for a group, get the first item find_image x = x, is_Image x = find_image x?0, is_list x = find_image x.value, is_class x && has_value x = error "unable to find image"; _a = find_image x; _b = find_image y; ap1 = Mark_relative _a 0.1 0.1; ap2 = Mark_relative _a 0.9 0.1; ap3 = Mark_relative _a 0.1 0.9; ap4 = Mark_relative _a 0.9 0.9; bp1 = Mark_relative _b 0.1 0.1; bp2 = Mark_relative _b 0.9 0.1; bp3 = Mark_relative _b 0.1 0.9; bp4 = Mark_relative _b 0.9 0.9; _result = map_binary process x y { f1 = _a.width / _b.width; f2 = _a.height / _b.height; rl = sort_pts_clockwise [ap1, ap2, ap3, ap4]; pl = sort_pts_clockwise [bp1, bp2, bp3, bp4]; to = [ rl?0.left, rl?0.top, rl?1.left, rl?1.top, rl?2.left, rl?2.top, rl?3.left, rl?3.top ]; from = [ pl?0.left * f1, pl?0.top * f2, pl?1.left * f1, pl?1.top * f2, pl?2.left * f1, pl?2.top * f2, pl?3.left * f1, pl?3.top * f2 ]; trans = perspective_transform to from; process a b = transform 1 0 trans b2 { b2 = resize Kernel_linear f1 f2 b, (f1 >= 1 && f2 >= 1) || (f1 >= 1 && f2 >= 1) = resize Kernel_linear f1 1 b1 {b1 = resize Kernel_linear 1 f2 b;} } } } }; //////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// Perspective_item = class Menuaction "Pe_rspective Distort" "rotate, scale and skew an image with respect to defined points" { action x = class _result { _vislevel = 3; // try to find an image ... for a group, get the first item find_image x = x, is_Image x = find_image x?0, is_list x = find_image x.value, is_class x && has_value x = error "unable to find image"; _a = find_image x; dir = Option "Select distort direction" [ "Distort to points", "Distort to corners" ] 1; ap1 = Mark_relative _a 0.1 0.1; ap2 = Mark_relative _a 0.9 0.1; ap3 = Mark_relative _a 0.9 0.9; ap4 = Mark_relative _a 0.1 0.9; _result = map_unary process x { trans = [perspective_transform to from, perspective_transform from to]?(dir.value) { rl = sort_pts_clockwise [ap1, ap2, ap3, ap4]; to = [(rl?0).left, (rl?0).top, (rl?1).left, (rl?1).top, (rl?2).left, (rl?2).top, (rl?3).left, (rl?3).top]; from=[0, 0, (_a.width - 1), 0, (_a.width - 1), (_a.height - 1), 0, (_a.height - 1)]; } process a = transform 1 0 trans a; } } }; nip2-8.7.0/share/nip2/compat/8.3/_generate.def0000644000175000017500000000755513224651032015507 00000000000000 /* make an image of size x by y whose pixels are their coordinates. */ make_xy x y = im_make_xy (to_real x) (to_real y); /* make an image with the specified properties ... pixel is (eg.) * Vector [0, 0, 0], or 12. If coding == labq, we ignore bands, format and * type, generate a 3 band float image, and lab2labq it before handing it * back. */ image_new w h b fmt coding type pixel xoff yoff = embed 1 0 0 w h im'''' { b' = 3, coding == Image_coding.LABPACK = b; fmt' = Image_format.FLOAT, coding == Image_coding.LABPACK = fmt; type' = Image_type.LAB, coding == Image_coding.LABPACK = type; im = im_black 1 1 (to_real b') + pixel; im' = clip2fmt fmt' im; im'' = im_Lab2LabQ im', coding == Image_coding.LABPACK; = im'; im''' = image_set_type type' im''; im'''' = image_set_origin xoff yoff im'''; } mkim options x y b = Image (image_new x y b (opt $format) (opt $coding) (opt $type) (opt $pixel) (opt $xoffset) (opt $yoffset)) { opt = get_option options [ $format => Image_format.UCHAR, $coding => Image_coding.NOCODING, $type => Image_type.sRGB, $pixel => 0, $xoffset => 0, $yoffset => 0 ]; } /* generate a slice of LAB space size x size pixels for L* == l */ lab_slice size l = image_set_type Image_type.LAB im { L = image_new size size 1 Image_format.FLOAT Image_coding.NOCODING Image_type.B_W l 0 0; A1 = im_fgrey (to_real size) (to_real size); /* im_fgrey always makes 0-1, so these ranges can be wired in. */ A2 = A1 * 256 - 128; A4 = im_rot90 A2; im = image_set_origin (size / 2) (size / 2) (L ++ A2 ++ A4); } /* Look at Image, try to make a Colour (failing that, a Vector) which is white * for that image type. */ image_white im = colour_transform_to type white_lab, bands == 3 && coding == Image_coding.NOCODING && colour_spaces.present 1 type = white_lab, coding == Image_coding.LABPACK = Vector (replicate bands (max_value.lookup 1 0 format)) { bands = im.bands; type = im.type; format = im.format; coding = im.coding; colour_spaces = Image_type.colour_spaces; // white as LAB white_lab = Colour "Lab" [100, 0, 0]; // maximum value for this numeric type max_value = Table [ [255, Image_format.DPCOMPLEX], [255, Image_format.DOUBLE], [255, Image_format.COMPLEX], [255, Image_format.FLOAT], [2 ** 31 - 1, Image_format.INT], [2 ** 32 - 1, Image_format.UINT], [2 ** 15 - 1, Image_format.SHORT], [2 ** 16 - 1, Image_format.USHORT], [2 ** 7 - 1, Image_format.CHAR], [2 ** 8 - 1, Image_format.UCHAR] ]; } /* Make a seperable gaussian mask. */ matrix_gaussian_blur radius = im_gauss_imask_sep (radius / 3) 0.2; /* Make a seperable square mask. */ matrix_blur radius = Matrix_con (sum mask_sq_line) 0 [mask_sq_line] { mask_sq_line = replicate (2 * radius - 1) 1; } /* Make a colour from a temperature. */ colour_from_temp T = error (_ "T out of range"), T < 1667 || T > 25000 = Colour "Yxy" [50, x, y] { // Kim et all approximation // see eg. http://en.wikipedia.org/wiki/Planckian_locus#Approximation x = -0.2661239 * 10 ** 9 / T ** 3 - 0.2343580 * 10 ** 6 / T ** 2 + 0.8776956 * 10 ** 3 / T + 0.179910, T < 4000 = -3.0258469 * 10 ** 9 / T ** 3 + 2.1070379 * 10 ** 6 / T ** 2 + 0.2226347 * 10 ** 3 / T + 0.240390; y = -1.1063814 * x ** 3 - 1.34811020 * x ** 2 + 2.18555832 * x - 0.20219638, T < 2222 = -0.9549476 * x ** 3 - 1.37418593 * x ** 2 + 2.09137015 * x - 0.16748867, T < 4000 = 3.0817580 * x ** 3 - 5.87338670 * x ** 2 + 3.75112997 * x - 0.37001483; } temp_from_colour z = T { c = colour_transform_to Image_type.YXY (to_colour z); x = c.value?1; y = c.value?2; // McCamy's approximation, see eg. // http://en.wikipedia.org/wiki/Color_temperature#Approximation xe = 0.332; ye = 0.1858; n = (x - xe) / (y - ye); T = -449 * n ** 3 + 3525 * n ** 2 - 6823.3 * n + 5520.33; } nip2-8.7.0/share/nip2/compat/8.3/Math.def0000644000175000017500000003162513224651032014442 00000000000000Math_arithmetic_item = class Menupullright "_Arithmetic" "basic arithmetic for objects" { Add_item = class Menuaction "_Add" "add a and b" { action a b = map_binary add a b; } Subtract_item = class Menuaction "_Subtract" "subtract b from a" { action a b = map_binary subtract a b; } Multiply_item = class Menuaction "_Multiply" "multiply a by b" { action a b = map_binary multiply a b; } Divide_item = class Menuaction "_Divide" "divide a by b" { action a b = map_binary divide a b; } Remainder_item = class Menuaction "_Remainder" "remainder after integer division of a by b" { action a b = map_binary remainder a b; } sep1 = Menuseparator; Absolute_value_item = class Menuaction "A_bsolute Value" "absolute value of x" { action x = map_unary abs x; } Absolute_value_vector_item = class Menuaction "Absolute Value _Vector" "like Absolute Value, but treat pixels as vectors" { action x = map_unary abs_vec x; } Sign_item = class Menuaction "S_ign" "unit vector" { action x = map_unary sign x; } Negate_item = class Menuaction "_Negate" "multiply by -1" { action x = map_unary unary_minus x; } } Math_trig_item = class Menupullright "_Trigonometry" "trigonometry operations (all in degrees)" { Sin_item = class Menuaction "_Sine" "calculate sine x" { action x = map_unary sin x; } Cos_item = class Menuaction "_Cosine" "calculate cosine x" { action x = map_unary cos x; } Tan_item = class Menuaction "_Tangent" "calculate tangent x" { action x = map_unary tan x; } sep1 = Menuseparator; Asin_item = class Menuaction "Arc S_ine" "calculate arc sine x" { action x = map_unary asin x; } Acos_item = class Menuaction "Arc C_osine" "calculate arc cosine x" { action x = map_unary acos x; } Atan_item = class Menuaction "Arc T_angent" "calculate arc tangent x" { action x = map_unary atan x; } sep2 = Menuseparator; Rad_item = class Menuaction "_Degrees to Radians" "convert degrees to radians" { action x = map_unary rad x; } Deg_item = class Menuaction "_Radians to Degrees" "convert radians to degrees" { action x = map_unary deg x; } sep3 = Menuseparator; Angle_range_item = class Menuaction "Angle i_n Range" "is angle within t degrees of r, mod 360" { action t r angle = clock (max - angle) < 2*r { max = clock (t + r); clock a = a + 360, a < 0; = a - 360, a >= 360; = a; } } } Math_log_item = class Menupullright "_Log" "logarithms and anti-logs" { Exponential_item = class Menuaction "_Exponential" "calculate e ** x" { action x = map_unary (power e) x; } Log_natural_item = class Menuaction "Natural _Log" "log base e of x" { action x = map_unary log x; } sep1 = Menuseparator; Exponential10_item = class Menuaction "E_xponential base 10" "calculate 10 ** x" { action x = map_unary (power 10) x; } Log10_item = class Menuaction "L_og Base 10" "log base 10 of x" { action x = map_unary log10 x; } sep2 = Menuseparator; Raise_to_power_item = class Menuaction "_Raise to Power" "calculate x ** y" { action x y = map_binary power x y; } } Math_complex_item = class Menupullright "_Complex" "operations on complex numbers and images" { Complex_extract = class Menupullright "_Extract" "extract fields from complex" { Real_item = class Menuaction "_Real" "extract real part of complex" { action in = map_unary re in; } Imaginary_item = class Menuaction "_Imaginary" "extract imaginary part of complex" { action in = map_unary im in; } } Complex_build_item = class Menuaction "_Build" "join a and b to make a complex" { action a b = map_binary comma a b; } sep1 = Menuseparator; Polar_item = class Menuaction "_Polar" "convert real and imag to amplitude and phase" { action a = map_unary polar a; } Rectangular_item = class Menuaction "_Rectagular" ("convert (amplitude, phase) image to rectangular " ++ "coordinates") { action x = map_unary rectangular x; } sep2 = Menuseparator; Conjugate_item = class Menuaction "_Conjugate" "invert imaginary part" { action x = map_unary conj x; } } Math_boolean_item = class Menupullright "_Boolean" "bitwise boolean operations for integer objects" { And_item = class Menuaction "_AND" "bitwise AND of a and b" { action a b = map_binary bitwise_and a b; } Or_item = class Menuaction "_OR" "bitwise OR of a and b" { action a b = map_binary bitwise_or a b; } Eor_item = class Menuaction "_XOR" "bitwise exclusive or of a and b" { action a b = map_binary eor a b; } Not_item = class Menuaction "_NOT" "invert a" { action a = map_unary not a; } sep1 = Menuseparator; Right_shift_item = class Menuaction "Shift _Right" "shift a right by b bits" { action a b = map_binary right_shift a b; } Left_shift_item = class Menuaction "Shift _Left" "shift a left by b bits" { action a b = map_binary left_shift a b; } sep2 = Menuseparator; If_then_else_item = class Menuaction "_If Then Else" "b where a is non-zero, c elsewhere" { action a b c = map_trinary ite a b c { // can't use if_then_else, we need a true trinary ite a b c = if a then b else c; } } Bandand_item = Image_band_item.Bandand_item; Bandor_item = Image_band_item.Bandor_item; } Math_relational_item = class Menupullright "R_elational" "comparison operations" { Equal_item = class Menuaction "_Equal to" "test a equal to b" { action a b = map_binary equal a b; } Not_equal_item = class Menuaction "_Not Equal to" "test a not equal to b" { action a b = map_binary not_equal a b; } sep1 = Menuseparator; More_item = class Menuaction "_More Than" "test a strictly greater than b" { action a b = map_binary more a b; } Less_item = class Menuaction "_Less Than" "test a strictly less than b" { action a b = map_binary less a b; } sep2 = Menuseparator; More_equal_item = class Menuaction "M_ore Than or Equal to" "test a greater than or equal to b" { action a b = map_binary more_equal a b; } Less_equal_item = class Menuaction "L_ess Than or Equal to" "test a less than or equal to b" { action a b = map_binary less_equal a b; } } Math_list_item = class Menupullright "L_ist" "operations on lists" { Head_item = class Menuaction "_Head" "first element in list" { action x = map_unary hd x; } Tail_item = class Menuaction "_Tail" "list without the first element" { action x = map_unary tl x; } Last_item = class Menuaction "_Last" "last element in list" { action x = map_unary last x; } Init_item = class Menuaction "_Init" "list without the last element" { action x = map_unary init x; } sep1 = Menuseparator; Reverse_item = class Menuaction "_Reverse" "reverse order of elements in list" { action x = map_unary reverse x; } Sort_item = class Menuaction "_Sort" "sort list into ascending order" { action x = map_unary sort x; } Make_set_item = class Menuaction "_Make Set" "remove duplicates from list" { action x = map_unary mkset equal x; } Transpose_list_item = class Menuaction "Tr_anspose" "exchange rows and columns in a list of lists" { action x = map_unary transpose x; } Concat_item = class Menuaction "_Concat" "flatten a list of lists into a single list" { action l = map_unary concat l; } sep2 = Menuseparator; Length_item = class Menuaction "L_ength" "find the length of list" { action x = map_unary len x; } Subscript_item = class Menuaction "S_ubscript" "return element n from list (index from zero)" { action n x = map_binary subscript n x; } Take_item = class Menuaction "_Take" "take the first n elements of list x" { action n x = map_binary take n x; } Drop_item = class Menuaction "_Drop" "drop the first n elements of list x" { action n x = map_binary drop n x; } sep3 = Menuseparator; Join_item = class Menuaction "_Join" "join two lists end to end" { action a b = map_binary join a b; } Difference_item = class Menuaction "_Difference" "difference of two lists" { action a b = map_binary difference a b; } Cons_item = class Menuaction "C_ons" "put element a on the front of list x" { action a x = map_binary cons a x; } Zip_item = class Menuaction "_Zip" "join two lists, pairwise" { action a b = map_binary zip2 a b; } } Math_round_item = class Menupullright "_Round" "various rounding operations" { /* smallest integral value not less than x */ Ceil_item = class Menuaction "_Ceil" "smallest integral value not less than x" { action x = map_unary ceil x; } Floor_item = class Menuaction "_Floor" "largest integral value not greater than x" { action x = map_unary floor x; } Rint_item = class Menuaction "_Round to Nearest" "round to nearest integer" { action x = map_unary rint x; } } Math_fourier_item = class Menupullright "_Fourier" "Fourier transform" { Forward_item = class Menuaction "_Forward" "fourier transform of image" { action a = map_unary (rotquad @ fwfft) a; } Reverse_item = class Menuaction "_Reverse" "inverse fourier transform of image" { action a = map_unary (invfft @ rotquad) a; } Rotate_quadrants_item = class Menuaction "Rotate _Quadrants" "rotate quadrants" { action a = map_unary rotquad a; } } Math_stats_item = class Menupullright "_Statistics" "measure various statistics of objects" { Value_item = class Menuaction "_Value" "value of point in object" { action a = class _result { _vislevel = 3; position = Expression "Coordinate" (0, 0); _result = map_binary point position.expr a; } } Mean_item = class Menuaction "_Mean" "arithmetic mean value" { action a = map_unary mean a; } Gmean_item = class Menuaction "_Geometric Mean" "geometric mean value" { action a = map_unary meang a; } Zmean_item = class Menuaction "_Zero-excluding Mean" "mean value of non-zero elements" { action a = map_unary meanze a; } Deviation_item = class Menuaction "_Standard Deviation" "standard deviation of object" { action a = map_unary deviation a; } Zdeviation_item = class Menuaction "Z_ero-excluding Standard Deviation" "standard deviation of non-zero elements" { action a = map_unary deviationze a; } Skew_item = class Menuaction "S_kew" "skew of image or list or vector" { action a = map_unary skew a; } Kurtosis_item = class Menuaction "Kurtosis" "kurtosis of image or list or vector" { action a = map_unary kurtosis a; } Stats_item = class Menuaction "Ma_ny Stats" "calculate many stats in a single pass" { action a = map_unary stats a; } sep1 = Menuseparator; Max_item = class Menuaction "M_aximum" "maximum of object" { action a = map_unary max a; } Min_item = class Menuaction "M_inimum" "minimum of object" { action a = map_unary min a; } Maxpos_item = class Menuaction "_Position of Maximum" "position of maximum in object" { action a = map_unary maxpos a; } Minpos_item = class Menuaction "P_osition of Minimum" "position of minimum in object" { action a = map_unary minpos a; } Gravity_item = class Menuaction "Centre of _Gravity" "position of centre of gravity of histogram" { action a = map_unary gravity a; } sep2 = Menuseparator; Count_set_item = class Menuaction "_Non-zeros" "number of non-zero elements in object" { action a = map_unary cset a { cset i = (mean (i != 0) * i.width * i.height) / 255; } } Count_clear_item = class Menuaction "_Zeros" "number of zero elements in object" { action a = map_unary cclear a { cclear i = (mean (i == 0) * i.width * i.height) / 255; } } Count_edges_item = class Menuaction "_Edges" "count average edges across or down image" { action x = class _result { _vislevel = 3; edge = Option "Count" [ "Horizontal lines", "Vertical lines" ] 0; _result = map_unary process x { process image = Number (edge.labels?edge) (im_cntlines image.value edge.value); } } } sep3 = Menuseparator; Linear_regression_item = class Menuaction "_Linear Regression" "fit a line to a set of points" { action xes yes = linreg xes yes; } Weighted_linear_regression_item = class Menuaction "_Weighted Linear Regression" "fit a line to a set of points and deviations" { action xes yes devs = linregw xes yes devs; } Cluster_item = class Menuaction "_Cluster" "cluster a list of numbers" { action l = class { _vislevel = 3; thresh = Expression "Threshold" 10; [_r, _w] = cluster thresh.expr l; result = _r; weights = _w; } } } Math_base_item = class Menupullright "Bas_e" "convert number bases" { Hexadecimal_item = class Menuaction "_Hexadecimal" "convert to hexadecimal (base 16)" { action a = map_unary (print_base 16) a; } Binary_item = class Menuaction "_Binary" "convert to binary (base 2)" { action a = map_unary (print_base 2) a; } Octal_item = class Menuaction "_Octal" "convert to octal (base 8)" { action a = map_unary (print_base 8) a; } } nip2-8.7.0/share/nip2/compat/8.3/Tasks.def0000644000175000017500000006407313224651032014641 00000000000000Tasks_capture_item = class Menupullright "_Capture" "useful stuff for capturing and preprocessing images" { Csv_import_item = class Menuaction "_CSV Import" "read a file of comma-separated values" { action = class _result { _vislevel = 3; path = Pathname "File to load" "empty"; start_line = Expression "Start at line" 1; rows = Expression "Lines to read (-1 for whole file)" (-1); whitespace = String "Whitespace characters" " \""; separator = String "Separator characters" ",;\t"; _result = Image blank, path.value == "empty" = Image (im_csv2vips filename) { filename = search (expand path.value) ++ ":" ++ "skip:" ++ print (start_line.expr - 1) ++ "," ++ "whi:" ++ escape whitespace.value ++ "," ++ "sep:" ++ escape separator.value ++ "," ++ "line:" ++ print rows.expr; // prefix any ',' with a '\' in the separators line escape x = foldr prefix [] x { prefix x l = '\\' : x : l, x == ',' = x : l; } blank = image_new 1 1 1 Image_format.DOUBLE Image_coding.NOCODING Image_type.B_W 0 0 0; } } } Raw_import_item = class Menuaction "_Raw Import" "read a file of binary values" { action = class _result { _vislevel = 3; path = Pathname "File to load" "empty"; across = Expression "Pixels across" 100; down = Expression "Pixels down" 100; bytes = Expression "Bytes per pixel" 3; skip = Expression "Skip over initial bytes" 0; _result = Image blank, path.value == "empty" = Image (im_binfile path.value across.expr down.expr bytes.expr skip.expr) { blank = image_new 1 1 1 Image_format.DOUBLE Image_coding.NOCODING Image_type.B_W 0 0 0; } } } // interpret Analyze header for layout and calibration Analyze7_header_item = class Menuaction "_Interpret Analyze 7 Header" "examine the Analyze header and set layout and value" { action x = x''' { // read bits of header dim n = get_header ("dsr-image_dimension.dim[" ++ print n ++ "]"); dim0 = dim 0 x; dim1 = dim 1 x; dim2 = dim 2 x; dim3 = dim 3 x; dim4 = dim 4 x; dim5 = dim 5 x; dim6 = dim 6 x; dim7 = dim 7 x; glmax = get_header "dsr-image_dimension.glmax" x; cal_max = get_header "dsr-image_dimension.cal_max" x; // oops, now a nop x' = x; // lay out higher dimensions width-ways x'' = grid dim2 dim3 1 x', dim0 == 3 = grid dim2 dim3 dim4 x', dim0 == 4 = grid (dim2 * dim4) dim5 1 (grid dim2 dim3 dim4) x', dim0 == 5 = grid (dim2 * dim4) dim5 dim6 (grid dim2 dim3 dim4) x', dim0 == 6 = grid (dim2 * dim4 * dim6) dim7 1 (grid (dim2 * dim4) dim5 dim6 (grid dim2 dim3 dim4)) x', dim0 == 7 = error (_ "unsupported dimension " ++ dim0); // multiply by scale factor to get kBeq x''' = x'' * (cal_max / glmax); } } Video_item = class Menuaction "Capture _Video Frame" "capture a frame of still video" { // shortcut to prefs prefs = Workspaces.Preferences; action = class _result { _vislevel = 3; device = prefs.VIDEO_DEVICE; channel = Option "Input channel" [ "TV", "Composite 1", "Composite 2", "Composite 3" ] prefs.VIDEO_CHANNEL; b = Scale "Brightness" 0 32767 prefs.VIDEO_BRIGHTNESS; col = Scale "Colour" 0 32767 prefs.VIDEO_COLOUR; con = Scale "Contrast" 0 32767 prefs.VIDEO_CONTRAST; hue = Scale "Hue" 0 32767 prefs.VIDEO_HUE; frames = Scale "Frames to average" 0 100 prefs.VIDEO_FRAMES; mono = Toggle "Monochrome grab" prefs.VIDEO_MONO; crop = Toggle "Crop image" prefs.VIDEO_CROP; // grab, but hide it ... if we let the crop edit _raw_grab = Image (im_video_v4l1 device channel.value b.value col.value con.value hue.value frames.value); edit_crop = Region _raw_grab left top width height { left = prefs.VIDEO_CROP_LEFT; top = prefs.VIDEO_CROP_TOP; width = min_pair prefs.VIDEO_CROP_WIDTH (_raw_grab.width + left); height = min_pair prefs.VIDEO_CROP_HEIGHT (_raw_grab.height + top); } aspect_ratio = Expression "Stretch vertically by" prefs.VIDEO_ASPECT; _result = frame' { frame = edit_crop, crop = _raw_grab; frame' = colour_transform_to Image_type.B_W frame, mono = frame; } } } Smooth_image_item = class Menuaction "_Smooth" "remove small features from image" { action in = class _result { _vislevel = 3; feature = Scale "Minimum feature size" 1 50 20; _result = map_unary (smooth feature.value) in; } } Light_correct_item = class Menuaction "_Flatfield" "use white image w to flatfield image i" { action w i = map_binary wc w i { wc w i = clip2fmt i.format (w' * i) { fac = mean w / max w; w' = fac * (max w / w); } } } Image_rank_item = Filter_rank_item.Image_rank_item; Tilt_item = Filter_tilt_item; sep1 = Menuseparator; White_balance_item = class Menuaction "_White Balance" "use average of small image to set white of large image" { action a b = class _result { _vislevel = 3; white_hint = "Set image white to:"; white = Colour_picker "Lab" [100, 0, 0]; _result = map_binary wb a b { wb a b = colour_transform_to (get_type image) image_xyz' { area x = x.width * x.height; larger x y = area x > area y; [image, patch] = sortc larger [a, b]; to_xyz = colour_transform_to Image_type.XYZ; // white balance in XYZ patch_xyz = to_colour (to_xyz patch); white_xyz = to_xyz white; facs = (mean patch_xyz / mean white_xyz) * (white_xyz / patch_xyz); image_xyz = to_xyz image; image_xyz' = image_xyz * facs; } } } } Gamma_item = Image_levels_item.Gamma_item; Tone_item = Image_levels_item.Tone_item; sep2 = Menuseparator; Crop_item = Image_crop_item; Rotate_item = Image_transform_item.Rotate_item; Flip_item = Image_transform_item.Flip_item; Resize_item = Image_transform_item.Resize_item; Rubber_item = Image_transform_item.Image_rubber_item; sep3 = Menuseparator; ICC_item = Colour_icc_item; Temp_item = Colour_temperature_item; Find_calib_item = class Menuaction "Find _Colour Calibration" "find an RGB -> XYZ transform from an image of a colour chart" { action image = class _result { _check_args = [ [image, "image", check_Image] ]; _vislevel = 3; measure = Scale (_ "Measure area (%)") 1 100 50; sample = measure_draw 6 4 (to_real measure) image; // get macbeth data file to use macbeth = Pathname "Pick a Macbeth data file" "$VIPSHOME/share/$PACKAGE/data/macbeth_lab_d65.mat"; mode = Option "Input LUT" [ "Linearize from chart greyscale", "Fit intercept from chart greyscale", "Linear input, set brightness from chart", "Linear input" ] 0; // get max of input image _max_value = Image_format.maxval image.format; // measure chart image _camera = measure_sample 6 4 (to_real measure) image; // load true values _true_Lab = Matrix_file macbeth.value; _true_XYZ = colour_transform Image_type.LAB Image_type.XYZ _true_Lab; // get Ys of greyscale _true_grey_Y = map (extract 1) (drop 18 _true_XYZ.value); // camera greyscale (all bands) _camera_grey = drop 18 _camera.value; // normalise both to 0-1 and combine _camera_grey' = map (map (multiply (1 / _max_value))) _camera_grey; _true_grey_Y' = map (multiply (1 / 100)) _true_grey_Y; _comb = Matrix (map2 cons _true_grey_Y' _camera_grey'), mode == 0 = Matrix [0: intercepts, replicate (_camera.width + 1) 1], mode == 1 = Matrix [[0, 0], [1, 1]] { intercepts = [(linreg _true_grey_Y' cam).intercept :: cam <- transpose _camera_grey']; } // make a linearising lut ... zero on left _linear_lut = im_invertlut _comb (_max_value + 1); // and display it // plot from 0 explicitly so we see the effect of mode1 (intercept // from greyscale) linearising_lut = Plot [$ymin => 0] _linear_lut; // map an image though the lineariser linear x = hist_map linearising_lut.value x, mode == 0 || mode == 1 = x; // map the chart measurements though the lineariser _camera' = (to_matrix @ linear @ to_image) _camera; // solve for RGB -> XYZ // normalise: the 2nd row is what makes Y, so divide by that to // get Y in 0-1. _pinv = (transpose _camera' * _camera') ** -1; _full_M = transpose (_pinv * (transpose _camera' * _true_XYZ)); M = _full_M / scale; scale = sum _full_M.value?1; // now turn the camera to LAB and calculate dE76 _camera'' = (to_matrix @ colour_transform Image_type.XYZ Image_type.LAB @ recomb M @ multiply scale @ to_image) _camera'; _dEs = map abs_vec (_camera'' - _true_Lab).value; avg_dE76 = mean _dEs; _max_dE = foldr max_pair 0 _dEs; _worst = index (equal _max_dE) _dEs; worst_patch = name _worst ++ " (patch " ++ print (_worst + 1) ++ ", " ++ print _max_dE ++ " dE)" { name i = macbeth_names?i, i >= 0 && i < len macbeth_names = "Unknown"; } // normalise brightness ... in linear mode, we optionally don't // set the brightness from the Macbeth chart norm x = x * scale, mode != 3 = x; // convert RGB camera to Lab _result = (Image @ colour_transform Image_type.XYZ Image_type.LAB @ norm @ recomb M @ cast_float @ linear) image.value; } } Apply_calib_item = class Menuaction "_Apply Colour Calibration" "apply an RGB -> LAB transform to an image" { action a b = class (map_binary process a b) { process a b = result, is_instanceof calib_name calib && is_Image image = error (_ "bad arguments to " ++ "Calibrate_image") { // the name of the calib object we need calib_name = "Tasks_capture_item.Find_calib_item.action"; // get the Calibrate_chart arg first [image, calib] = sortc (const (is_instanceof calib_name)) [a, b]; result = (Image @ colour_transform Image_type.XYZ Image_type.LAB @ calib.norm @ recomb calib.M @ cast_float @ calib.linear) image.value; } } } sep4 = Menuseparator; Graph_hist_item = Hist_find_item; Graph_bands_item = class Menuaction "Plot _Bands" "show image bands as a graph" { action x = class _result { _vislevel = 3; style = Option_enum "Style" Plot_style.names "Line"; auto = Toggle "Auto Range" true; ymin = Expression "Y range minimum" 0; ymax = Expression "Y range maximum" 1; _result = Plot options (to_image (bands (image x))).value { options = [$style => style.value] ++ if auto then [] else [$ymin => ymin.expr, $ymax => ymax.expr]; // try to make something image-like from it image x = extract_area x.left x.top 1 1 x.image, is_Mark x = get_image x, has_image x = get_image (to_image x); // get as [[1],[2],[3]] bands x = transpose [map mean (bandsplit x)]; } } } } Tasks_mosaic_item = class Menupullright "_Mosaic" "build image mosaics" { /* Check and group a point list by image. */ mosaic_sort_test l = error "mosaic: not all points", !is_listof is_Mark l = error "mosaic: points not on two images", !is_list_len 2 images = error "mosaic: images do not match in format and coding", !all_equal (map get_format l) || !all_equal (map get_coding l) = error "mosaic: not same number of points on each image", !foldr1 equal (map len l') = l' { // test for all elements of a list equal all_equal l = all (map (equal (hd l)) (tl l)); // all the different images images = mkset pointer_equal (map get_image l); // find all points defined on image test_image image p = (get_image p) === image; find l image = filter (test_image image) l; // group point list by image l' = map (find l) images; } /* Sort a point group to get right before left, and within each group to * get above before below. */ mosaic_sort_lr l = l'' { // sort to get upper point first above a b = a.top < b.top; l' = map (sortc above) l; // sort to get right group before left group right a b = a?0.left > b?0.left; l'' = sortc right l'; } /* Sort a point group to get top before bottom, and within each group to * get left before right. */ mosaic_sort_tb l = l'' { // sort to get upper point first left a b = a.left < b.left; l' = map (sortc left) l; // sort to get right group before left group below a b = a?0.top > b?0.top; l'' = sortc below l'; } /* Put 'em together! Group by image, sort vertically (or horizontally) with * one of the above, transpose to get pairs matched up, and flatten again. */ mosaic_sort fn = concat @ transpose @ fn @ mosaic_sort_test; Mosaic_1point_item = class Menupullright "_One Point" "join two images with a single tie point" { check_ab_args a b = [ [a, "a", check_Mark], [b, "b", check_Mark] ]; // shortcut to prefs prefs = Workspaces.Preferences; search_area = prefs.MOSAIC_WINDOW_SIZE; object_size = prefs.MOSAIC_OBJECT_SIZE; blend_width_widget = Scale "Maximum blend width" 0 100 prefs.MOSAIC_MAX_BLEND_WIDTH; refine_widget = Toggle "Refine selected tie-points" prefs.MOSAIC_REFINE; lr_mos _refine a b = class Image _result { _check_args = check_ab_args a b; bw = blend_width_widget; refine = _refine; _result = im_lrmosaic a'.image.value b'.image.value 0 a'.left a'.top b'.left b'.top (object_size / 2) (search_area / 2) 0 bw.value, refine = im_lrmerge a'.image.value b'.image.value (b'.left - a'.left) (b'.top - a'.top) bw.value { [a', b'] = mosaic_sort mosaic_sort_lr [a, b]; } } tb_mos _refine a b = class Image _result { _check_args = check_ab_args a b; bw = blend_width_widget; refine = _refine; _result = im_tbmosaic a'.image.value b'.image.value 0 a'.left a'.top b'.left b'.top (object_size / 2) (search_area / 2) 0 bw.value, refine = im_tbmerge a'.image.value b'.image.value (b'.left - a'.left) (b'.top - a'.top) bw.value { [a', b'] = mosaic_sort mosaic_sort_tb [a, b]; } } Left_right_item = class Menuaction "_Left to Right" "join two images left-right with a single tie point" { action a b = lr_mos refine_widget a b; } Top_bottom_item = class Menuaction "_Top to Bottom" "join two images top-bottom with a single tie point" { action a b = tb_mos refine_widget a b; } sep1 = Menuseparator; Left_right_manual_item = class Menuaction "Manual L_eft to Right" "join left-right, no auto-adjust of tie points" { action a b = lr_mos false a b; } Top_bottom_manual_item = class Menuaction "Manual T_op to Bottom" "join top-bottom, no auto-adjust of tie points" { action a b = tb_mos false a b; } } Mosaic_2point_item = class Menupullright "_Two Point" "join two images with two tie points" { check_abcd_args a b c d = [ [a, "a", check_Mark], [b, "b", check_Mark], [c, "c", check_Mark], [d, "d", check_Mark] ]; // shortcut to prefs prefs = Workspaces.Preferences; search_area = prefs.MOSAIC_WINDOW_SIZE; object_size = prefs.MOSAIC_OBJECT_SIZE; blend_width_widget = Scale "Maximum blend width" 0 100 prefs.MOSAIC_MAX_BLEND_WIDTH; refine_widget = Toggle "Refine selected tie-points" prefs.MOSAIC_REFINE; Left_right_item = class Menuaction "_Left to Right" "join two images left-right with a pair of tie points" { action a b c d = class Image _result { _check_args = check_abcd_args a b c d; bw = blend_width_widget; refine = refine_widget; _result = im_lrmosaic1 a'.image.value b'.image.value 0 a'.left a'.top b'.left b'.top c'.left c'.top d'.left d'.top (object_size / 2) (search_area / 2) 0 bw.value, refine = im_lrmerge1 a'.image.value b'.image.value a'.left a'.top b'.left b'.top c'.left c'.top d'.left d'.top bw.value { [a', b', c', d'] = mosaic_sort mosaic_sort_lr [a, b, c, d]; } } } Top_bottom_item = class Menuaction "_Top to Bottom" "join two images top-bottom with a pair of tie points" { action a b c d = class Image _result { _check_args = check_abcd_args a b c d; bw = blend_width_widget; refine = refine_widget; _result = im_tbmosaic1 a'.image.value b'.image.value 0 a'.left a'.top b'.left b'.top c'.left c'.top d'.left d'.top (object_size / 2) (search_area / 2) 0 bw.value, refine = im_tbmerge1 a'.image.value b'.image.value a'.left a'.top b'.left b'.top c'.left c'.top d'.left d'.top bw.value { [a', b', c', d'] = mosaic_sort mosaic_sort_tb [a, b, c, d]; } } } } sep1 = Menuseparator; Balance_item = class Menuaction "Mosaic _Balance" "disassemble mosaic, scale brightness to match, reassemble" { action x = map_unary balance x { balance x = oo_unary_function balance_op x, is_class x = im_global_balancef x Workspaces.Preferences.MOSAIC_BALANCE_GAMMA, is_image x = error (_ "bad arguments to " ++ "balance") { balance_op = Operator "balance" balance Operator_type.COMPOUND_REWRAP false; } } } //////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// Manual_balance_item = class Menupullright "Manual B_alance" "balance tonality of user defined areas" { prefs = Workspaces.Preferences; //////////////////////////////////////////////////////////////////////////////////// Balance_find_item = class Menuaction "_Find Values" "calculates values required to scale and offset balance user defined areas in a given image" /* Outputs a matrix of scale and offset values. Eg. Values required to balance the secondary * structure in an X-ray image. Takes an X-ray image an 8-bit control mask and a list of * 8-bit reference masks, where the masks are white on a black background. */ { action im_in m_control m_group = class Matrix values{ _vislevel = 1; _control_im = if m_control then im_in else 0; _control_meanmax = so_meanmax _control_im; _group_check = is_Group m_group; _m_list = m_group.value, _group_check = m_group; process m_current mat_in = mat_out {so_values = so_calculate _control_meanmax im_in m_current; mat_out = join [so_values] mat_in;} values = (foldr process [] _m_list); } } //////////////////////////////////////////////////////////////////////////////////// Balance_check_item = class Menuaction "_Check Values" "allows calculated set of scale and offset values to be checked and adjusted if required" /* Outputs adjusted matrix of scale and offset values and scale and offset image maps. * Eg. Check values required to balance the secondary structure in an X-ray image. * Takes an X-ray image an 8-bit control mask and a list of 8-bit reference masks, * where the masks are white on a black background. */ { action im_in m_matrix m_group = class Image value { _vislevel = 3; blur = Scale "Blur" 1 10 1; _blur = (blur.value/2 + 0.5), blur.value > 1 = 1; _group_check = is_Group m_group; _m_list = m_group.value, _group_check = m_group; adjust = Matrix_rec mat_a { no_masks = len _m_list; mat_a = replicate no_masks [0, 0]; } // Apply the user defined adjustments to the inputted matrix of scale and offset values _adjusted = map2 fn_adjust m_matrix.value adjust.value; fn_adjust a b = [(a?0 + b?0), (a?1 + (a?1 * b?1))]; _scaled_ims = map (fn_so_apply im_in) _adjusted; fn_so_apply im so = map_unary adj im {adj im = im * (so?0) + (so?1);} _im_pairs = zip2 _m_list _scaled_ims; // Prepare black images as starting point. //////////// _blank = image_new (_m_list?0).width (_m_list?0).height 1 6 Image_coding.NOCODING 1 0 0 0; _pair_start = [(_blank + 1), _blank]; Build = Toggle "Build Scale and Offset Correction Images" false; Output = class { _vislevel = 1; scale_im = _build?0; offset_im = _build?1; so_values = Matrix _adjusted; _build = [Image so_images?0, Image so_images?1], Build = ["Scale image not built.", "Offset image not built."] { m_list' = transpose [_m_list]; m_all = map2 join m_list' _adjusted; so_images = foldr process_2 _pair_start m_all; } } value = (foldr process_1 im_in_b _im_pairs).value {im_in_b = map_unary cast_float im_in;} process_1 m_current im_start = im_out { bl_mask = convsep (matrix_blur _blur) (get_image m_current?0); blended_im = im_blend bl_mask (m_current?1).value im_start.value; im_out = Image (clip2fmt im_start.format blended_im); } // Process for building scale and offset image. process_2 current p_start = p_out { im_s = if ((current?0) > 128) then current?1 else _blank; im_o = if ((current?0) > 128) then current?2 else _blank; im_s' = convsep (matrix_blur _blur) (im_s != 0); im_o' = convsep (matrix_blur _blur) (im_o != 0); im_s'' = im_blend im_s'.value im_s.value p_start?0; im_o'' = im_blend im_o'.value im_o.value p_start?1; p_out = [im_s'', im_o'']; } } } //////////////////////////////////////////////////////////////////////////////////// Balance_apply_item = class Menuaction "_Apply Values" "apply scale and offset corrections, defined as image maps, to a given image" /* Outputs the balanced image. Eg. Balance the secondary structure in an X-ray image. Takes an * X-ray image an 32-bit float scale image and a 32-bit offset image. */ { action im_in scale_im offset_im = class Image value { _vislevel = 1; xfactor = im_in.width/scale_im.width; yfactor = im_in.height/scale_im.height; _scale_im = resize Kernel_linear xfactor yfactor scale_im; _offset_im = resize Kernel_linear xfactor yfactor offset_im; value = get_image ( clip2fmt im_in.format ( ( im_in * _scale_im ) + _offset_im ) ); } } } Tilt_item = Filter_tilt_item; sep2 = Menuseparator; Rebuild_item = class Menuaction "_Rebuild" "disassemble mosaic, substitute image files and reassemble" { action x = class _result { _vislevel = 3; old = String "In each filename, replace" "foo"; new = String "With" "bar"; _result = map_unary remosaic x { remosaic image = Image (im_remosaic image.value old.value new.value); } } } sep3 = Menuseparator; Clone_area_item = class Menuaction "_Clone Area" "replace dark or light section of im1 with pixels from im2" { action im1 im2 = class _result { _check_args = [ [im1, "im1", check_Image], [im2, "im2", check_Image] ]; _vislevel = 3; /* Region on first image placed in the top left hand corner, * positioned and size relative to the height and width of im1. */ r1 = Region_relative im1 0.05 0.05 0.05 0.05; /* Mark on second image placed in the top left hand corner, * positioned relative to the height and width of im2. Used to * define _r2, the region from which the section of image is cloned * from. */ p2 = Mark_relative im2 0.05 0.05; _r2 = Region im2 p2.left p2.top r1.width r1.height; mask = [r1 <= Options.sc, r1 >= Options.sc]?(Options.replace); Options = class { _vislevel = 3; pause = Toggle "Pause process" true; /* Option toggle used to define whether the user is * replacing a dark or a light area. */ replace = Option "Replace" [ "A Dark Area", "A Light Area" ] 1; // Used to select the area to be replaced. sc = Scale "Scale cutoff" 0.01 mx (mx / 2) {mx = Image_format.maxval im1.format;} //Allows replacement with scale&offset balanced gaussian noise. balance = Toggle "Balance cloned data to match surroundings." true; //Allows replacement with scale&offset balanced //gaussian noise. process = Toggle "Replace area with Gaussian noise." false; } _result = im1, Options.pause = Image (im_insert im1.value patch r1.left r1.top) { r2 = Region im2 p2.left p2.top r1.width r1.height; ref_meanmax = so_meanmax (if mask then 0 else r1); mask8 = Matrix_mor [[255, 255, 255], [255, 255, 255], [255, 255, 255]]; mask_a = map_unary (dilate mask8) mask; mask_b = convsep (matrix_blur 2) mask_a; patch = so_balance ref_meanmax r1 r2 mask_b Options.process, Options.balance = so_balance ref_meanmax r1 r2 mask_b Options.process, Options.process = im_blend (get_image mask_b) (get_image r2) (get_image r1); } } } } Tasks_frame_item = Frame_item; Tasks_print_item = class Menupullright "_Print" "useful stuff for image output" { Rotate_item = Image_transform_item.Rotate_item; Flip_item = Image_transform_item.Flip_item; Resize_item = Image_transform_item.Resize_item; Tone_item = Image_levels_item.Tone_item; Sharpen_item = class Menuaction "_Sharpen" "unsharp filter tuned for typical inkjet printers" { action x = class _result { _vislevel = 3; target_dpi = Option "Sharpen for print at" [ "400 dpi", "300 dpi", "150 dpi", "75 dpi" ] 1; _result = map_unary process x { process image = sharpen params?0 params?1 params?2 params?3 params?4 params?5 (colour_transform_to Image_type.LABQ image) { // sharpen params for various dpi // just change the size of the area we search param_table = [ [7, 2.5, 40, 20, 0.5, 1.5], [5, 2.5, 40, 20, 0.5, 1.5], [3, 2.5, 40, 20, 0.5, 1.5], [11, 2.5, 40, 20, 0.5, 1.5] ]; params = param_table?target_dpi; } } } } sep1 = Menuseparator; Temp_item = Colour_temperature_item; ICC_item = Colour_icc_item; } nip2-8.7.0/share/nip2/compat/8.3/_types.def0000644000175000017500000007115113224651032015052 00000000000000/* A list of things. Do automatic iteration of unary and binary operators on * us. * List [1, 2] + [2, 3] -> List [3, 5] * hd (List [2, 3]) -> 2 * List [] == [] -> true */ List value = class _Object { _check_args = [ [value, "value", check_list] ]; // methods oo_binary_table op x = [ [apply2 op value x', op.op_name == "subscript" || op.op_name == "subscript'" || op.op_name == "equal" || op.op_name == "equal'"], [this.List (apply2 op value x'), op.op_name == "join" || op.op_name == "join'"], [this.List (map2 (apply2 op) value x'), is_list x'], [this.List (map (apply2 op' x) value), true] ] ++ super.oo_binary_table op x { op' = oo_converse op; // strip the List wrapper, if any x' = x.value, is_List x = x; apply2 op x1 x2 = oo_binary_function op x1 x2, is_class x1 = oo_binary'_function op x1 x2, is_class x2 = op.fn x1 x2; }; oo_unary_table op = [ [apply value, op.op_name == "hd" || op.op_name == "tl"], [this.List (map apply value), true] ] ++ super.oo_unary_table op { apply x = oo_unary_function op x, is_class x = op.fn x; } } /* A group of things. Loop the operation over the group. */ Group value = class _Object { _check_args = [ [value, "value", check_list] ]; // methods oo_binary_table op x = [ // if_then_else is really a trinary operator [map_trinary ite this x?0 x?1, op.op_name == "if_then_else"], [map_binary op.fn this x, is_Group x], [map_unary (\a op.fn a x) this, true] ] ++ super.oo_binary_table op x; oo_unary_table op = [ [map_unary op.fn this, true] ] ++ super.oo_unary_table op; // we can't call map_trinary directly, since it uses Group and we // don't support mutually recursive top-level functions :-( // copy-paste it here, keep in sync with the version in _stdenv map_nary fn args = fn args, groups == [] = Group (map process [0, 1 .. shortest - 1]) { groups = filter is_Group args; shortest = foldr1 min_pair (map (len @ get_value) groups); process n = NULL, any (map (is_noval n) args) = map_nary fn (map (extract n) args) { extract n arg = arg.value?n, is_Group arg = arg; is_noval n arg = is_Group arg && arg.value?n == NULL; } } // need ite as a true trinary ite a b c = if a then b else c; map_unary fn a = map_nary (list_1ary fn) [a]; map_binary fn a b = map_nary (list_2ary fn) [a, b]; map_trinary fn a b c = map_nary (list_3ary fn) [a, b, c]; } /* Single real number ... eg slider. */ Real value = class _Object { _check_args = [ [value, "value", check_real] ]; // methods oo_binary_table op x = [ [this.Real (op.fn this.value x.value), is_Real x && op.type == Operator_type.ARITHMETIC], [this.Real (op.fn this.value x), is_real x && op.type == Operator_type.ARITHMETIC], [op.fn this.value x.value, is_Real x && op.type == Operator_type.RELATIONAL], [op.fn this.value x, !is_class x] ] ++ super.oo_binary_table op x; oo_unary_table op = [ [this.Real (op.fn this.value), op.type == Operator_type.ARITHMETIC], [op.fn this.value, true] ] ++ super.oo_unary_table op; } /* Single bool ... eg Toggle. */ Bool value = class _Object { _check_args = [ [value, "value", check_bool] ]; // methods oo_binary_table op x = [ [op.fn this.value x, op.op_name == "if_then_else"], [this.Bool (op.fn this.value x.value), is_Bool x], [this.Bool (op.fn this.value x), is_bool x] ] ++ super.oo_binary_table op x; oo_unary_table op = [ [this.Bool (op.fn this.value), op.type == Operator_type.ARITHMETIC || op.type == Operator_type.RELATIONAL], [op.fn this.value, true] ] ++ super.oo_unary_table op; } /* An editable string. */ String caption value = class _Object { _check_args = [ [caption, "caption", check_string], [value, "value", check_string] ]; } /* An editable real number. */ Number caption value = class scope.Real value { _check_args = [ [caption, "caption", check_string] ]; Real x = this.Number caption x; } /* An editable expression. */ Expression caption expr = class (if is_class expr then expr else _Object) { _check_args = [ [caption, "caption", check_string], [expr, "expr", check_any] ]; } /* A ticking clock. */ Clock interval value = class scope.Real value { _check_args = [ [interval, "interval", check_real] ]; Real x = this.Clock interval x; } /* An editable filename. */ Pathname caption value = class _Object { _check_args = [ [caption, "caption", check_string], [value, "value", check_string] ]; } /* An editable fontname. */ Fontname caption value = class _Object { _check_args = [ [caption, "caption", check_string], [value, "value", check_string] ]; } /* Vector type ... just a finite list of real. Handy for wrapping an * argument to eg. im_lintra_vec. Make it behave like a single pixel image. */ Vector value = class _Object { _check_args = [ [value, "value", check_real_list] ]; bands = len value; // methods oo_binary_table op x = [ // Vector ++ Vector means bandwise join [this.Vector (op.fn this.value x.value), is_Vector x && (op.op_name == "join" || op.op_name == "join'")], [this.Vector (op.fn this.value [get_number x]), has_number x && (op.op_name == "join" || op.op_name == "join'")], // Vector ? number means extract element [op.fn this.value (get_real x), has_real x && (op.op_name == "subscript" || op.op_name == "subscript'")], // extra check for lengths equal [this.Vector (map_binaryl op.fn this.value x.value), is_Vector x && len value == len x.value && op.type == Operator_type.ARITHMETIC], [this.Vector (map_binaryl op.fn this.value (get_real x)), has_real x && op.type == Operator_type.ARITHMETIC], // need extra length check [this.Vector (map bool_to_real (map_binaryl op.fn this.value x.value)), is_Vector x && len value == len x.value && op.type == Operator_type.RELATIONAL], [this.Vector (map bool_to_real (map_binaryl op.fn this.value (get_real x))), has_real x && op.type == Operator_type.RELATIONAL], [this.Vector (op.fn this.value x.value), is_Vector x && len value == len x.value && op.type == Operator_type.COMPOUND_REWRAP], [x.Image (vec op'.op_name x.value value), is_Image x], [vec op'.op_name x value, is_image x], [op.fn this.value x, is_real x] ] ++ super.oo_binary_table op x { op' = oo_converse op; }; oo_unary_table op = [ [this.Vector (map_unaryl op.fn this.value), op.type == Operator_type.ARITHMETIC], [this.Vector (map bool_to_real (map_unaryl op.fn this.value)), op.type == Operator_type.RELATIONAL], [this.Vector (op.fn this.value), op.type == Operator_type.COMPOUND_REWRAP], [op.fn this.value, true] ] ++ super.oo_unary_table op; // turn an ip bool (or a number, for Vector) into VIPSs 255/0 bool_to_real x = 255, is_bool x && x = 255, is_number x && x != 0 = 0; } /* A rectangular array of real. */ Matrix_base value = class _Object { _check_args = [ [value, "value", check_matrix] ]; // calculate these from value width = len value?0; height = len value; // extract a rectanguar area extract left top width height = this.Matrix_base ((map (take width) @ map (drop left) @ take height @ drop top) value); // methods oo_binary_table op x = [ // mat multiply is special [this.Matrix_base mul.value, is_Matrix x && op.op_name == "multiply"], [this.Matrix_base mul'.value, is_Matrix x && op.op_name == "multiply'"], // mat divide is also special [this.Matrix_base div.value, is_Matrix x && op.op_name == "divide"], [this.Matrix_base div'.value, is_Matrix x && op.op_name == "divide'"], // power -1 means invert [this.Matrix_base inv.value, is_real x && x == -1 && op.op_name == "power"], [this.Matrix_base sq.value, is_real x && x == 2 && op.op_name == "power"], [error "matrix **-1 and **2 only", op.op_name == "power" || op.op_name == "power'"], // matrix op vector ... treat a vector as a 1 row matrix [this.Matrix_base (map (map_binaryl op'.fn x.value) this.value), is_Vector x && op.type == Operator_type.ARITHMETIC], [this.Matrix_base (map_binaryl op.fn this.value x.value), (is_Matrix x || is_Real x) && op.type == Operator_type.ARITHMETIC], [this.Matrix_base (map_binaryl op.fn this.value x), is_real x && op.type == Operator_type.ARITHMETIC], // compound ... don't do iteration [this.Matrix_base (op.fn this.value x.value), (is_Matrix x || is_Real x || is_Vector x) && op.type == Operator_type.COMPOUND_REWRAP], [op.fn this.value x, op.type == Operator_type.COMPOUND] ] ++ super.oo_binary_table op x { mul = im_matmul this x; mul' = im_matmul x this; div = im_matmul this (im_matinv x); div' = im_matmul x (im_matinv this); inv = im_matinv this; sq = im_matmul this this; op' = oo_converse op; } oo_unary_table op = [ [this.Matrix_base (map_unaryl op.fn this.value), op.type == Operator_type.ARITHMETIC], [this.Matrix_base (op.fn this.value), op.type == Operator_type.COMPOUND_REWRAP], [op.fn this.value, true] ] ++ super.oo_unary_table op; } /* How to display a matrix: text, sliders, toggles, or text plus scale/offset. */ Matrix_display = class { text = 0; slider = 1; toggle = 2; text_scale_offset = 3; is_display = member [text, slider, toggle, text_scale_offset]; } /* A matrix as VIPS sees them ... add scale, offset and filename. For nip, add * a display type as well to control how the widget renders. */ Matrix_vips value scale offset filename display = class scope.Matrix_base value { _check_args = [ [scale, "scale", check_real], [offset, "offset", check_real], [filename, "filename", check_string], [display, "display", check_matrix_display] ]; Matrix_base x = this.Matrix_vips x scale offset filename display; } /* A plain 'ol matrix which can be passed to VIPS. */ Matrix value = class Matrix_vips value 1 0 "" Matrix_display.text {} /* Specialised constructors ... for convolutions, recombinations and * morphologies. */ Matrix_con scale offset value = class Matrix_vips value scale offset "" Matrix_display.text_scale_offset {}; Matrix_rec value = class Matrix_vips value 1 0 "" Matrix_display.slider {}; Matrix_mor value = class Matrix_vips value 1 0 "" Matrix_display.toggle {}; Matrix_file filename = (im_read_dmask @ expand @ search) filename; /* A CIE colour ... a triple, plus a format (eg XYZ, Lab etc) */ Colour colour_space value = class scope.Vector value { _check_args = [ [colour_space, "colour_space", check_colour_space] ]; _check_all = [ [is_list_len 3 value, "len value == 3"] ]; Vector x = this.Colour colour_space x; // make a colour-ish thing from an image // back to Colour if we have another 3 band image // to a vector if bands > 1 // to a number otherwise itoc im = this.Colour nip_type (to_matrix im).value?0, bands == 3 = scope.Vector (map mean (bandsplit im)), bands > 1 = mean im { type = get_header "Type" im; bands = get_header "Bands" im; nip_type = Image_type.colour_spaces.lookup 1 0 type; } // methods oo_binary_table op x = [ [itoc (op.fn ((float) (to_image this).value) ((float) (to_image x).value)), // here REWRAP means go via image op.type == Operator_type.COMPOUND_REWRAP] ] ++ super.oo_binary_table op x; oo_unary_table op = [ [itoc (op.fn ((float) (to_image this).value)), op.type == Operator_type.COMPOUND_REWRAP] ] ++ super.oo_unary_table op; } // a subclass with widgets for picking a space and value Colour_picker default_colour default_value = class Colour space.item colour.expr { _vislevel = 3; space = Option_enum "Colour space" Image_type.colour_spaces default_colour; colour = Expression "Colour value" default_value; Colour_edit colour_space value = Colour_picker colour_space value; } /* Base scale type. */ Scale caption from to value = class scope.Real value { _check_args = [ [caption, "caption", check_string], [from, "from", check_real], [to, "to", check_real] ]; _check_all = [ [from < to, "from < to"] ]; Real x = this.Scale caption from to x; // methods oo_binary_table op x = [ [this.Scale caption (op.fn this.from x.from) (op.fn this.to x.to) (op.fn this.value x.value), is_Scale x && op.type == Operator_type.ARITHMETIC], [this.Scale caption (op.fn this.from x) (op.fn this.to x) (op.fn this.value x), is_real x && op.type == Operator_type.ARITHMETIC] ] ++ super.oo_binary_table op x; } /* Base toggle type. */ Toggle caption value = class scope.Bool value { _check_args = [ [caption, "caption", check_string], [value, "value", check_bool] ]; Bool x = this.Toggle caption x; } /* Base option type. */ Option caption labels value = class scope.Real value { _check_args = [ [caption, "caption", check_string], [labels, "labels", check_string_list], [value, "value", check_uint] ]; } /* An option whose value is a string rather than a number. */ Option_string caption labels item = class Option caption labels (index (equal item) labels) { Option_edit caption labels value = this.Option_string caption labels (labels?value); } /* Make an option from an enum. */ Option_enum caption enum item = class Option_string caption enum.names item { // corresponding thing value_thing = enum.get_thing item; Option_edit caption labels value = this.Option_enum caption enum (enum.names?value); } /* A rectangle. width and height can be -ve. */ Rect left top width height = class _Object { _check_args = [ [left, "left", check_real], [top, "top", check_real], [width, "width", check_real], [height, "height", check_real] ]; // derived right = left + width; bottom = top + height; oo_binary_table op x = [ [equal x, is_Rect x && (op.op_name == "equal" || op.op_name == "equal'")], [!equal x, is_Rect x && (op.op_name == "not_equal" || op.op_name == "not_equal'")], // binops with a complex are the same as (comp op comp) [oo_binary_function op this (Rect (re x) (im x) 0 0), is_complex x], // all others are just pairwise [this.Rect left' top' width' height', is_Rect x && op.type == Operator_type.ARITHMETIC], [this.Rect left'' top'' width'' height'', has_number x && op.type == Operator_type.ARITHMETIC] ] ++ super.oo_binary_table op x { left' = op.fn left x.left; top' = op.fn top x.top; width' = op.fn width x.width; height' = op.fn height x.height; left'' = op.fn left x'; top'' = op.fn top x'; width'' = op.fn width x'; height'' = op.fn height x'; x' = get_number x; } oo_unary_table op = [ // arithmetic uops just map [this.Rect left' top' width' height', op.type == Operator_type.ARITHMETIC], // compound uops are just like ops on complex // do (width, height) so thing like abs(Arrow) work as you'd expect [op.fn (width, height), op.type == Operator_type.COMPOUND] ] ++ super.oo_unary_table op { left' = op.fn left; top' = op.fn top; width' = op.fn width; height' = op.fn height; } // empty? ie. contains no pixels is_empty = width == 0 || height == 0; // normalised version, ie. make width/height +ve and flip the origin nleft = left + width, width < 0 = left; ntop = top + height, height < 0 = top; nwidth = abs width; nheight = abs height; nright = nleft + nwidth; nbottom = ntop + nheight; equal x = left == x.left && top == x.top && width == x.width && height == x.height; // contains a point? includes_point x y = nleft <= x && x <= nright && ntop <= y && y <= nbottom; // contains a rect? just test top left and bottom right points includes_rect r = includes_point r.nleft r.ntop && includes_point r.nright r.nbottom; // bounding box of two rects // if either is empty, can just return the other union r = r, is_empty = this, r.is_empty = Rect left' top' width' height' { left' = min_pair nleft r.nleft; top' = min_pair ntop r.ntop; width' = max_pair nright r.nright - left'; height' = max_pair nbottom r.nbottom - top'; } // intersection of two rects ... empty rect if no intersection intersect r = Rect left' top' width'' height'' { left' = max_pair nleft r.nleft; top' = max_pair ntop r.ntop; width' = min_pair nright r.nright - left'; height' = min_pair nbottom r.nbottom - top'; width'' = width', width > 0 = 0; height'' = height', height > 0 = 0; } // expand/collapse by n pixels margin_adjust n = Rect (left - n) (top - n) (width + 2 * n) (height + 2 * n); } /* Values for Compression field in image. */ Image_compression = class { NONE = 0; NO_COMPRESSION = 0; TCSF_COMPRESSION = 1; JPEG_COMPRESSION = 2; LABPACK_COMPRESSED = 3; RGB_COMPRESSED = 4; LUM_COMPRESSED = 5; } /* Values for Coding field in image. */ Image_coding = class { NONE = 0; NOCODING = 0; COLQUANT = 1; LABPACK = 2; RAD = 6; } /* Values for BandFmt field in image. */ Image_format = class { DPCOMPLEX = 9; DOUBLE = 8; COMPLEX = 7; FLOAT = 6; INT = 5; UINT = 4; SHORT = 3; USHORT = 2; CHAR = 1; UCHAR = 0; NOTSET = -1; maxval fmt = [ 255, // UCHAR 127, // CHAR 65535, // USHORT 32767, // SHORT 4294967295, // UINT 2147483647, // INT 255, // FLOAT 255, // COMPLEX 255, // DOUBLE 255 // DPCOMPLEX ] ? fmt, fmt >= 0 && fmt <= DPCOMPLEX = error (_ "bad value for BandFmt"); } /* A lookup table. */ Table value = class _Object { _check_args = [ [value, "value", check_rectangular] ]; /* Extract a column. */ column n = map (extract n) value; /* present col x: is there an x in column col */ present col x = member (column col) x; /* Look on column from, return matching item in column to. */ lookup from to x = value?n?to, n >= 0 = error (_ "item" ++ " " ++ print x ++ " " ++ _ "not in table") { n = index (equal x) (column from); } } /* A two column lookup table with the first column a string and the second a * thing. Used for representing various enums. Option_enum makes a selector * from one of these. */ Enum value = class Table value { _check_args = [ [value, "value", check_enum] ] { check_enum = [is_enum, _ "is [[char, *]]"]; is_enum x = is_rectangular x && is_listof is_string (map (extract 0) x); } // handy ... all the names and things as lists names = this.column 0; things = this.column 1; // is a legal name or thing has_name x = this.present 1 x; has_thing x = this.present 0 x; // map things to strings and back get_name x = this.lookup 1 0 x; get_thing x = this.lookup 0 1 x; } /* Type field. */ Image_type = class { MULTIBAND = 0; B_W = 1; HISTOGRAM = 10; XYZ = 12; LAB = 13; CMYK = 15; LABQ = 16; RGB = 17; UCS = 18; LCH = 19; LABS = 21; sRGB = 22; YXY = 23; FOURIER = 24; RGB16 = 25; GREY16 = 26; ARRAY = 27; /* Table to get names <-> numbers. */ type_names = Enum [ $MULTIBAND => MULTIBAND, $B_W => B_W, $HISTOGRAM => HISTOGRAM, $XYZ => XYZ, $LAB => LAB, $CMYK => CMYK, $LABQ => LABQ, $RGB => RGB, $UCS => UCS, $LCH => LCH, $LABS => LABS, $sRGB => sRGB, $YXY => YXY, $FOURIER => FOURIER, $RGB16 => RGB16, $GREY16 => GREY16, $ARRAY => ARRAY ]; /* Table relating nip's colour space names and VIPS's Type numbers. * Options generated from this, so match the order to the order in the * Colour menu. */ colour_spaces = Enum [ $sRGB => sRGB, $Lab => LAB, $LCh => LCH, $XYZ => XYZ, $Yxy => YXY, $UCS => UCS ]; /* A slightly larger table ... the types of colorimetric image we can * have. Add mono, and the S and Q forms of LAB. */ image_colour_spaces = Enum [ $Mono => B_W, $sRGB => sRGB, $RGB16 => RGB16, $GREY16 => GREY16, $Lab => LAB, $LabQ => LABQ, $LabS => LABS, $LCh => LCH, $XYZ => XYZ, $Yxy => YXY, $UCS => UCS ]; } /* Base image type. Simple layer over vips_image. */ Image value = class _Object { _check_args = [ [value, "value", check_image] ]; // fields from VIPS header width = get_width value; height = get_height value; bands = get_bands value; format = get_format value; bits = get_bits value; coding = get_coding value; type = get_type value; xres = get_header "Xres" value; yres = get_header "Yres" value; xoffset = get_header "Xoffset" value; yoffset = get_header "Yoffset" value; filename = get_header "filename" value; // convenience ... the area our pixels occupy, as a rect rect = Rect 0 0 width height; // operator overloading // (op Image Vector) done in Vector class oo_binary_table op x = [ // handle image ++ constant here [wrap join_result_image, (has_real x || is_Vector x) && (op.op_name == "join" || op.op_name == "join'")], [wrap ite_result_image, op.op_name == "if_then_else"], [wrap (op.fn this.value (get_image x)), has_image x], [wrap (op.fn this.value (get_number x)), has_number x], // if it's not a class on the RHS, handle here ... just apply and // rewrap [wrap (op.fn this.value x), !is_class x] // all other cases handled by other classes ] ++ super.oo_binary_table op x { // wrap the result with this // x can be a non-image, eg. compare "Image v == []" vs. // "Image v == 12" wrap x = x, op.type == Operator_type.COMPOUND || !is_image x = this.Image x; join_result_image = value ++ new_stuff, op.op_name == "join" = new_stuff ++ value { new_stuff = image_new width height new_bands format coding Image_type.B_W x xoffset yoffset; new_bands = get_bands x, has_bands x = 1; } [then_part, else_part] = x; // get things about our output from inputs in this order objects = [then_part, else_part, this]; // properties of our output image target_bands = get_member_list has_bands get_bands objects; target_type = get_member_list has_type get_type objects; // if one of then/else is an image, get the target format from that // otherwise, let the non-image objects set the target target_format = get_member_list has_format get_format x, has_member_list has_format x = NULL; to_image x = to_image_size width height target_bands target_format x; [then', else'] = map to_image x; ite_result_image = image_set_type target_type (if value then then' else else'); } // FIXME ... yuk ... don't use operator hints, just always rewrap if // we have an image result // forced on us by things like abs: // abs Vector -> real // abs Image -> Image // does not fit well with COMPOUND/whatever scheme oo_unary_table op = [ [this.Image result, is_image result], [result, true] ] ++ super.oo_unary_table op { result = op.fn this.value; } } /* Construct an image from a file. */ Image_file filename = class Image value { _check_args = [ [filename, "filename", check_string] ]; value = vips_image filename; } Region image left top width height = class Image value { _check_args = [ [image, "Image", check_Image], [left, "left", check_real], [top, "top", check_real], [width, "width", check_preal], [height, "height", check_preal] ]; // a rect for our coordinates // region.rect gets the rect for the extracted image region_rect = Rect left top width height; // we need to always succeed ... value is our enclosing image if we're // out of bounds value = extract_area left top width height image.value, image.rect.includes_rect region_rect = image.value; } Area image left top width height = class scope.Region image left top width height { Region image left top width height = this.Area image left top width height; } Arrow image left top width height = class scope.Rect left top width height { _check_args = [ [image, "Image", check_Image], [left, "left", check_real], [top, "top", check_real], [width, "width", check_real], [height, "height", check_real] ]; Rect l t w h = this.Arrow image l t w h; } HGuide image top = class scope.Arrow image image.rect.left top image.width 0 { Arrow image left top width height = this.HGuide image top; } VGuide image left = class scope.Arrow image left image.rect.top 0 image.height { Arrow image left top width height = this.VGuide image left; } Mark image left top = class scope.Arrow image left top 0 0 { Arrow image left top width height = this.Mark image left top; } // convenience functions: ... specify position as [0 .. 1) Region_relative image u v w h = Region image (image.width * u) (image.height * v) (image.width * w) (image.height * h); Area_relative image u v w h = Area image (image.width * u) (image.height * v) (image.width * w) (image.height * h); Arrow_relative image u v w h = Arrow image (image.width * u) (image.height * v) (image.width * w) (image.height * h); VGuide_relative image v = VGuide image (image.height * v); HGuide_relative image u = HGuide image (image.width * u); Mark_relative image u v = Mark image (image.width * u) (image.height * v); Kernel_type = class { NEAREST_NEIGHBOUR = 0; LINEAR = 1; CUBIC = 2; LANCZOS2 = 3; LANCZOS3 = 4; // Should introspect to get the list of interpolators :-( // We can "dir" on VipsInterpolate to get a list of them, but we // can't get i18n'd descriptions until we have more // introspection stuff in nip2. /* Table to map kernel numbers to descriptive strings */ descriptions = [ _ "Nearest neighbour", _ "Linear", _ "Cubic", _ "Lanczos, two lobes", _ "Lanczos, three lobes" ]; /* And to vips enum nicknames. */ types = [ "nearest", "linear", "cubic", "lanczos2", "lanczos3" ]; } Kernel type = class { value = Kernel_type.types?type; } Kernel_linear = Kernel Kernel_type.LINEAR; Kernel_picker default = class Kernel kernel.value { _vislevel = 2; kernel = Option "Kernel" Kernel_type.descriptions default; } Interpolate_type = class { NEAREST_NEIGHBOUR = 0; BILINEAR = 1; BICUBIC = 2; LBB = 3; NOHALO = 4; VSQBS = 5; // Should introspect to get the list of interpolators :-( // We can "dir" on VipsInterpolate to get a list of them, but we // can't get i18n'd descriptions until we have more // introspection stuff in nip2. /* Table to map interpol numbers to descriptive strings */ descriptions = [ _ "Nearest neighbour", _ "Bilinear", _ "Bicubic", _ "Upsize: reduced halo bicubic (LBB)", _ "Upsharp: reduced halo bicubic with edge sharpening (Nohalo)", _ "Upsmooth: quadratic B-splines with jaggy reduction (VSQBS)" ]; /* And to vips type names. */ types = [ "VipsInterpolateNearest", "VipsInterpolateBilinear", "VipsInterpolateBicubic", "VipsInterpolateLbb", "VipsInterpolateNohalo", "VipsInterpolateVsqbs" ]; } Interpolate type options = class { value = vips_object_new Interpolate_type.types?type [] options; } Interpolate_bilinear = Interpolate Interpolate_type.BILINEAR []; Interpolate_picker default = class Interpolate interp.value [] { _vislevel = 2; interp = Option "Interpolation" Interpolate_type.descriptions default; } Render_intent = class { PERCEPTUAL = 0; RELATIVE = 1; SATURATION = 2; ABSOLUTE = 3; /* Table to get names <-> numbers. */ names = Enum [ _ "Perceptual" => PERCEPTUAL, _ "Relative" => RELATIVE, _ "Saturation" => SATURATION, _ "Absolute" => ABSOLUTE ]; } // abstract base class for toolkit menus Menu = class {} // a "----" line in a menu Menuseparator = class Menu {} // abstract base class for items in menus Menuitem label tooltip = class Menu {} Menupullright label tooltip = class Menuitem label tooltip {} Menuaction label tooltip = class Menuitem label tooltip {} /* Plots. */ Plot_style = class { POINT = 0; LINE = 1; SPLINE = 2; BAR = 3; names = Enum [ _ "Point" => POINT, _ "Line" => LINE, _ "Spline" => SPLINE, _ "Bar" => BAR ]; } Plot_format = class { YYYY = 0; XYYY = 1; XYXY = 2; names = Enum [ _ "YYYY" => YYYY, _ "XYYY" => XYXY, _ "XYXY" => XYXY ]; } Plot_type = class { /* Lots of Ys (ie. multiple line plots). */ YYYY = 0; /* First column of matrix is X position, others are Ys (ie. multiple XY * line plots, all with the same Xes). */ XYYY = 1; /* Many independent XY plots. */ XYXY = 2; } /* "options" is a list of ["key", value] pairs. */ Plot options value = class scope.Image value { Image value = this.Plot options value; to_image dpi = extract_bands 0 3 (graph_export_image (to_real dpi) this); } Plot_matrix options value = class Plot options (to_image value).value { } Plot_histogram value = class scope.Plot [] value { } Plot_xy value = class scope.Plot [$format => Plot_format.XYYY] value { } /* A no-value type. Call it NULL for C-alike fun. Used by Group to indicate * empty slots, for example. */ NULL = class _Object { oo_binary_table op x = [ // the only operation we allow is equality .. use pointer equality, // this lets us test a == NULL and a != NULL [this === x, op.type == Operator_type.RELATIONAL && op.op_name == "equal"], [this !== x, op.type == Operator_type.RELATIONAL && op.op_name == "not_equal"] ] ++ super.oo_binary_table op x; } nip2-8.7.0/share/nip2/compat/8.3/Makefile.am0000644000175000017500000000062113224651032015115 00000000000000startdir = $(pkgdatadir)/compat/8.3 start_DATA = \ Colour.def \ _convert.def \ Filter.def \ _generate.def \ Histogram.def \ Image.def \ _joe_extra.def \ _joe_utilities.def \ _list.def \ _magick.def \ Magick.def \ Math.def \ Matrix.def \ _Object.def \ Object.def \ _predicate.def \ Preferences.ws \ _stdenv.def \ Tasks.def \ _types.def \ Widgets.def EXTRA_DIST = $(start_DATA) nip2-8.7.0/share/nip2/compat/7.12/0000755000175000017500000000000013350464160013225 500000000000000nip2-8.7.0/share/nip2/compat/7.12/_stdenv.def0000644000175000017500000013523113224651032015270 00000000000000/* Various operators as functions. */ logical_and a b = a && b; logical_or a b = a || b; bitwise_and a b = a & b; bitwise_or a b = a | b; eor a b = a ^ b; left_shift a b = a << b; right_shift a b = a >> b; not a = !a; less a b = a < b; more a b = a > b; less_equal a b = a <= b; more_equal a b = a >= b; equal a b = a == b; not_equal a b = a != b; pointer_equal a b = a === b; not_pointer_equal a b = a !== b; add a b = a + b; subtract a b = a - b; multiply a b = a * b; divide a b = a / b; power a b = a ** b; square x = x * x; remainder a b = a % b; cons a b = a : b; dot a b = a . ( b ); join a b = a ++ b; subscript a b = a ? b; generate s n f = [s, n .. f]; comma r i = (r, i); compose f g = f @ g; // our only trinary operator is actually a binary operator if_then_else a x = if a then x?0 else x?1; cast_unsigned_char x = (unsigned char) x; cast_signed_char x = (signed char) x; cast_unsigned_short x = (unsigned short) x; cast_signed_short x = (signed short) x; cast_unsigned_int x = (unsigned int) x; cast_signed_int x = (signed int) x; cast_float x = (float) x; cast_double x = (double) x; cast_complex x = (complex) x; cast_double_complex x = (double complex) x; unary_minus x = -x; negate x = !x; complement x = ~x; unary_plus x = +x; // the vector ops ... im is an image, vec is a real_list vec op_name im vec = im_lintra_vec ones im vec, op_name == "add" || op_name == "add'" = im_lintra_vec ones (-1 * im) vec, op_name == "subtract'" = im_lintra_vec ones im inv, op_name == "subtract" = im_lintra_vec vec im zeros, op_name == "multiply" || op_name == "multiply'" = im_lintra_vec vec (1 / im) zeros, op_name == "divide'" = im_lintra_vec recip im zeros, op_name == "divide" = im_expntra_vec im vec, op_name == "power'" = im_powtra_vec im vec, op_name == "power" = im_remainderconst_vec im vec, op_name == "remainder" = im_andimage_vec im vec, op_name == "bitwise_and" || op_name == "bitwise_and'" = im_orimage_vec im vec, op_name == "bitwise_or" || op_name == "bitwise_or'" = im_eorimage_vec im vec, op_name == "eor" || op_name == "eor'" = im_equal_vec im vec, op_name == "equal" || op_name == "equal'" = im_notequal_vec im vec, op_name == "not_equal" || op_name == "not_equal'" = im_less_vec im vec, op_name == "less" = im_moreeq_vec im vec, op_name == "less'" = im_lesseq_vec im vec, op_name == "less_equal" = im_more_vec im vec, op_name == "less_equal'" = error "unimplemented vector operation" { zeros = replicate (len vec) 0; ones = replicate (len vec) 1; recip = map (divide 1) vec; inv = map (multiply (-1)) vec; } /* Macbeth chart patch names. */ macbeth_names = [ "Dark skin", "Light skin", "Blue sky", "Foliage", "Blue flower", "Bluish green", "Orange", "Purplish blue", "Moderate red", "Purple", "Yellow green", "Orange yellow", "Blue", "Green", "Red", "Yellow", "Magenta", "Cyan", "White (density 0.05)", "Neutral 8 (density 0.23)", "Neutral 6.5 (density 0.44)", "Neutral 5 (density 0.70)", "Neutral 3.5 (density 1.05)", "Black (density 1.50)" ]; bandsplit x = oo_unary_function bandsplit_op x, is_class x = map (subscript x) [0 .. bands - 1], is_image x = error (_ "bad arguments to " ++ "bandsplit") { bands = get_header "Bands" x; bandsplit_op = Operator "bandsplit" (map Image @ bandsplit) Operator_type.COMPOUND false; } bandjoin l = wrapper joined, has_wrapper = joined, is_listof has_image l = error (_ "bad arguments to " ++ "bandjoin") { has_wrapper = has_member_list (has_member "Image") l; wrapper = get_member_list (has_member "Image") (get_member "Image") l; joined = im_gbandjoin (map get_image l); } mean x = oo_unary_function mean_op x, is_class x = im_avg x, is_image x = mean_list x, is_list x = error (_ "bad arguments (" ++ print x ++ ") to " ++ "mean") { mean_op = Operator "mean" mean Operator_type.COMPOUND false; mean_list l = sum l / size l; // number of elements in some sort of nested-list thing size l = foldr acc 0 l { acc x total = total + size x, is_list x = total + 1; } // add elements in a nested-list thing sum l = foldr acc 0 l { acc x total = total + sum x, is_list x = total + x; } } meang x = (appl (power e) @ mean @ appl log) x { appl fn x = map fn x, is_list x = fn x; } // zero-excluding mean meanze x = oo_unary_function meanze_op x, is_class x = meanze_image x, is_image x = meanze_list x, is_list x = error (_ "bad arguments (" ++ print x ++ ") to " ++ "meanze") { meanze_op = Operator "meanze" meanze Operator_type.COMPOUND false; meanze_list l = sum l / size l; // number of non-zero elements in some sort of nested-list thing size l = foldr acc 0 l { acc x total = total + size x, is_list x = total + 1, x != 0; = total; } // add elements in a nested-list thing sum l = foldr acc 0 l { acc x total = total + sum x, is_list x = total + x; } // image mean meanze_image i = sum / N { w = get_width i; h = get_height i; b = get_bands i; st = stats i; sum = st.value?0?2; // find non-zero pixels (not zero in all bands) zp = im_notequal_vec i (replicate b 0); // number of non-zero pixels N = b * (mean zp * w * h) / 255; } } deviation x = oo_unary_function deviation_op x, is_class x = im_deviate x, is_image x = deviation_list x, is_real_list x || is_matrix x = error (_ "bad arguments to " ++ "deviation") { deviation_op = Operator "deviation" deviation Operator_type.COMPOUND false; deviation_list l = (abs (s2 - (s * s / n)) / (n - 1)) ** 0.5 { totals = sum_sum2_list l; n = totals?0; s = totals?1; s2 = totals?2; } // return n, sum, sum of squares for a list of reals sum_sum2_list x = foldr accumulate [0, 0, 0] x { accumulate x sofar = [n + 1, x + s, x * x + s2], is_real x = [n + n', s + s', s2 + s2'], is_list x = error "sum_sum2_list: not real or [real]" { n = sofar?0; s = sofar?1; s2 = sofar?2; sub_acc = sum_sum2_list x; n' = sub_acc?0; s' = sub_acc?1; s2' = sub_acc?2; } } } deviationze x = oo_unary_function deviationze_op x, is_class x = deviationze_image x, is_image x = deviationze_list x, is_real_list x || is_matrix x = error (_ "bad arguments to " ++ "deviationze") { deviationze_op = Operator "deviationze" deviationze Operator_type.COMPOUND false; deviationze_list l = (abs (s2 - (s * s / n)) / (n - 1)) ** 0.5 { totals = sum_sum2_list l; n = totals?0; s = totals?1; s2 = totals?2; } // return number of non-zero elements, sum, sum of squares for a list of // reals sum_sum2_list x = foldr accumulate [0, 0, 0] x { accumulate x sofar = sofar, is_real x && x == 0 = [n + 1, x + s, x * x + s2], is_real x = [n + n', s + s', s2 + s2'], is_list x = error "sum_sum2_list: not real or [real]" { n = sofar?0; s = sofar?1; s2 = sofar?2; sub_acc = sum_sum2_list x; n' = sub_acc?0; s' = sub_acc?1; s2' = sub_acc?2; } } deviationze_image i = ((sum2 - sum * sum / N) / (N - 1)) ** 0.5 { w = get_width i; h = get_height i; b = get_bands i; st = stats i; sum = st.value?0?2; sum2 = st.value?0?3; // find non-zero pixels (not zero in all bands) zp = im_notequal_vec i (replicate b 0); // number of non-zero pixels N = b * (mean zp * w * h) / 255; } } // find the centre of gravity of a histogram gravity x = oo_unary_function gravity_op x, is_class x = im_hist_gravity x, is_hist x = gravity_list x, is_list x = error (_ "bad arguments to " ++ "gravity") { gravity_op = Operator "gravity" gravity Operator_type.COMPOUND false; // centre of gravity of a histogram... use the histogram to weight an // identity, then sum, then find the mean element im_hist_gravity h = m { // make horizontal h' = rot270 h, get_width h == 1 = h, get_height h == 1 = error "width or height not 1"; // number of elements w = get_width h'; // matching identity i = im_identity_ushort 1 w, w <= 2 ** 16 - 1 = make_xy w 1 ? 0; // weight identity and sum s = mean (i * h') * w; // sum of original histogram s' = mean h * w; // weighted mean m = s / s'; } gravity_list l = m { w = len l; // matching identity i = [0, 1 .. w - 1]; // weight identity and sum s = sum (map2 multiply i l); // sum of original histogram s' = sum l; // weighted mean m = s / s'; } } project x = oo_unary_function project_op x, is_class x = im_project x, is_image x = error (_ "bad arguments to " ++ "project") { project_op = Operator "project" project Operator_type.COMPOUND false; } abs x = oo_unary_function abs_op x, is_class x = im_abs x, is_image x = abs_cmplx x, is_complex x = abs_num x, is_real x = abs_list x, is_real_list x = abs_list (map abs_list x), is_matrix x = error (_ "bad arguments to " ++ "abs") { abs_op = Operator "abs" abs Operator_type.COMPOUND false; abs_list l = (sum (map square l)) ** 0.5; abs_num n = n, n >= 0 = -n; abs_cmplx c = ((re c)**2 + (im c)**2) ** 0.5; } copy x = oo_unary_function copy_op x, is_class x = im_copy x, is_image x = x { copy_op = Operator "copy" copy Operator_type.COMPOUND_REWRAP false; } // like abs, but treat pixels as vectors ... ie. always get a 1-band image // back ... also treat matricies as lists of vectors // handy for dE from object difference abs_vec x = oo_unary_function abs_vec_op x, is_class x = abs_vec_image x, is_image x = abs_vec_cmplx x, is_complex x = abs_vec_num x, is_real x = abs_vec_list x, is_real_list x = mean (map abs_vec_list x), is_matrix x = error (_ "bad arguments to " ++ "abs_vec") { abs_vec_op = Operator "abs_vec" abs_vec Operator_type.COMPOUND false; abs_vec_list l = (sum (map square l)) ** 0.5; abs_vec_num n = n, n >= 0 = -n; abs_vec_cmplx c = ((re c)**2 + (im c)**2) ** 0.5; abs_vec_image im = (sum (map square (bandsplit im))) ** 0.5; } transpose x = oo_unary_function transpose_op x, is_class x = transpose_image x, is_image x = transpose_list x, is_listof is_list x = error (_ "bad arguments to " ++ "transpose") { transpose_op = Operator "transpose" transpose Operator_type.COMPOUND_REWRAP false; transpose_list l = [], l' == [] = (map hd l') : (transpose_list (map tl l')) { l' = takewhile (not_equal []) l; } transpose_image = im_flipver @ im_rot270; } rot45 x = oo_unary_function rot45_op x, is_class x = error "rot45 image: not implemented", is_image x = error (_ "bad arguments to " ++ "rot45") { rot45_op = Operator "rot45" rot45_object Operator_type.COMPOUND_REWRAP false; rot45_object x = rot45_matrix x, is_odd_square_matrix x = error "rot45 image: not implemented", is_image x = error (_ "bad arguments to " ++ "rot45"); // slow, but what the heck rot45_matrix l = (im_rotate_dmask45 (Matrix l)).value; } // apply an image function to a [[real]] ... matrix is converted to a 1 band // image for processing apply_matrix_as_image fn m = (get_value @ im_vips2mask @ fn @ im_mask2vips @ Matrix) m; // a general image/matrix operation where the mat version is most easily done // by converting mat->image->mat apply_matim_operation name fn x = oo_unary_function class_op x, is_class x = fn x, is_image x = apply_matrix_as_image fn x, is_matrix x = error (_ "bad arguments to " ++ name) { class_op = Operator name (apply_matim_operation name fn) Operator_type.COMPOUND_REWRAP false; } rot90 = apply_matim_operation "rot90" im_rot90; rot180 = apply_matim_operation "rot180" im_rot180; rot270 = apply_matim_operation "rot270" im_rot270; rotquad = apply_matim_operation "rotquad" im_rotquad; fliplr = apply_matim_operation "fliplr" im_fliphor; fliptb = apply_matim_operation "flipud" im_flipver; image_set_type type x = oo_unary_function image_set_type_op x, is_class x = im_copy_set x (to_real type) (get_header "Xres" x) (get_header "Yres" x) (get_header "Xoffset" x) (get_header "Yoffset" x), is_image x = error (_ "bad arguments to " ++ "image_set_type:" ++ print type ++ " " ++ print x) { image_set_type_op = Operator "image_set_type" (image_set_type type) Operator_type.COMPOUND_REWRAP false; } image_set_origin xoff yoff x = oo_unary_function image_set_origin_op x, is_class x = im_copy_set x (get_header "Type" x) (get_header "Xres" x) (get_header "Yres" x) (to_real xoff) (to_real yoff), is_image x = error (_ "bad arguments to " ++ "image_set_origin") { image_set_origin_op = Operator "image_set_origin" (image_set_origin xoff yoff) Operator_type.COMPOUND_REWRAP false; } cache tile_width tile_height max_tiles x = oo_unary_function cache_op x, is_class x = im_cache x (to_real tile_width) (to_real tile_height) (to_real max_tiles), is_image x = error (_ "bad arguments to " ++ "cache") { cache_op = Operator "cache" (cache tile_width tile_height max_tiles) Operator_type.COMPOUND_REWRAP false; } tile across down x = oo_unary_function tile_op x, is_class x = im_replicate x (to_real across) (to_real down), is_image x = error (_ "bad arguments to " ++ "tile") { tile_op = Operator "tile" (tile across down) Operator_type.COMPOUND_REWRAP false; } grid tile_height across down x = oo_unary_function grid_op x, is_class x = im_grid x (to_real tile_height) (to_real across) (to_real down), is_image x = error (_ "bad arguments to " ++ "grid") { grid_op = Operator "grid" (grid tile_height across down) Operator_type.COMPOUND_REWRAP false; } max_pair a b = a, a > b = b; min_pair a b = a, a < b = b; range min value max = min_pair max (max_pair min value); max x = oo_unary_function max_op x, is_class x = im_max x, is_image x = max_list x, is_list x = x, is_number x = error (_ "bad arguments to " ++ "max") { max_op = Operator "max" max Operator_type.COMPOUND false; max_list x = error "max []", x == [] = foldr1 max_pair x, is_real_list x = foldr1 max_pair (map max_list x), is_list x = max x; } min x = oo_unary_function min_op x, is_class x = im_min x, is_image x = min_list x, is_list x = x, is_number x = error (_ "bad arguments to " ++ "min") { min_op = Operator "min" min Operator_type.COMPOUND false; min_list x = error "min []", x == [] = foldr1 min_pair x, is_real_list x = foldr1 min_pair (map min_list x), is_list x = min x; } maxpos x = oo_unary_function maxpos_op x, is_class x = im_maxpos x, is_image x = maxpos_matrix x, is_matrix x = maxpos_list x, is_list x = error (_ "bad arguments to " ++ "maxpos") { maxpos_op = Operator "maxpos" maxpos Operator_type.COMPOUND false; maxpos_matrix m = (-1, -1), m == [[]] = (indexes?row, row) { max_value = max (Matrix m); indexes = map (index (equal max_value)) m; row = index (not_equal (-1)) indexes; } maxpos_list l = -1, l == [] = index (equal (max l)) l; } minpos x = oo_unary_function minpos_op x, is_class x = im_minpos x, is_image x = minpos_matrix x, is_matrix x = minpos_list x, is_list x = error (_ "bad arguments to " ++ "minpos") { minpos_op = Operator "minpos" minpos Operator_type.COMPOUND false; minpos_matrix m = (-1, -1), m == [[]] = (indexes?row, row) { min_value = min (Matrix m); indexes = map (index (equal min_value)) m; row = index (not_equal (-1)) indexes; } minpos_list l = -1, l == [] = index (equal (min l)) l; } stats x = oo_unary_function stats_op x, is_class x = im_stats x, is_image x = im_stats (to_image x).value, is_matrix x = error (_ "bad arguments to " ++ "stats") { stats_op = Operator "stats" stats Operator_type.COMPOUND false; } e = 2.7182818284590452354; pi = 3.14159265358979323846; rad d = 2 * pi * (d / 360); deg r = 360 * r / (2 * pi); sign x = oo_unary_function sign_op x, is_class x = im_sign x, is_image x = sign_cmplx x, is_complex x = sign_num x, is_real x = error (_ "bad arguments to " ++ "sign") { sign_op = Operator "sign" sign Operator_type.COMPOUND_REWRAP false; sign_num n = 0, n == 0 = 1, n > 0 = -1; sign_cmplx c = (0, 0), mod == 0 = (re c / mod, im c / mod) { mod = abs c; } } rint x = oo_unary_function rint_op x, is_class x = im_rint x, is_image x = rint_value x, is_number x = error (_ "bad arguments to " ++ "rint") { rint_op = Operator "rint" rint Operator_type.ARITHMETIC false; rint_value x = (int) (x + 0.5), x > 0 = (int) (x - 0.5); } scale x = oo_unary_function scale_op x, is_class x = (unsigned char) x, is_number x = im_scale x, is_image x = scale_list x, is_real_list x || is_matrix x = error (_ "bad arguments to " ++ "scale") { scale_op = Operator "scale" scale Operator_type.COMPOUND_REWRAP false; scale_list l = apply_scale s o l { mn = find_limit min_pair l; mx = find_limit max_pair l; s = 255.0 / (mx - mn); o = -(mn * s); } find_limit fn l = find_limit fn (map (find_limit fn) l), is_listof is_list l = foldr1 fn l; apply_scale s o x = x * s + o, is_number x = map (apply_scale s o) x; } scaleps x = oo_unary_function scale_op x, is_class x = im_scaleps x, is_image x = error (_ "bad arguments to " ++ "scale") { scale_op = Operator "scaleps" scaleps Operator_type.COMPOUND_REWRAP false; } fwfft x = oo_unary_function fwfft_op x, is_class x = im_fwfft x, is_image x = error (_ "bad arguments to " ++ "fwfft") { fwfft_op = Operator "fwfft" fwfft Operator_type.COMPOUND_REWRAP false; } invfft x = oo_unary_function invfft_op x, is_class x = im_invfftr x, is_image x = error (_ "bad arguments to " ++ "invfft") { invfft_op = Operator "invfft" invfft Operator_type.COMPOUND_REWRAP false; } falsecolour x = oo_unary_function falsecolour_op x, is_class x = image_set_type Image_type.sRGB (im_falsecolour x), is_image x = error (_ "bad arguments to " ++ "falsecolour") { falsecolour_op = Operator "falsecolour" falsecolour Operator_type.COMPOUND_REWRAP false; } polar x = oo_unary_function polar_op x, is_class x = im_c2amph x, is_image x = polar_cmplx x, is_complex x = error (_ "bad arguments to " ++ "polar") { polar_op = Operator "polar" polar Operator_type.COMPOUND false; polar_cmplx r = (l, a) { a = 270, x == 0 && y < 0 = 90, x == 0 && y >= 0 = 360 + atan (y / x), x > 0 && y < 0 = atan (y / x), x > 0 && y >= 0 = 180 + atan (y / x); l = (x ** 2 + y ** 2) ** 0.5; x = re r; y = im r; } } rectangular x = oo_unary_function rectangular_op x, is_class x = im_c2rect x, is_image x = rectangular_cmplx x, is_complex x = error (_ "bad arguments to " ++ "rectangular") { rectangular_op = Operator "rectangular" rectangular Operator_type.COMPOUND false; rectangular_cmplx p = (x, y) { l = re p; a = im p; x = l * cos a; y = l * sin a; } } // we can't use colour_unary: that likes 3 band only recomb matrix x = oo_unary_function recomb_op x, is_class x = im_recomb x matrix, is_image x = recomb_real_list x, is_real_list x = map recomb_real_list x, is_matrix x = error (_ "bad arguments to " ++ "recomb") { // COMPOUND_REWRAP ... signal to the colour class to go to image and // back recomb_op = Operator "recomb" (recomb matrix) Operator_type.COMPOUND_REWRAP false; // process [1,2,3 ..] as an image recomb_real_list l = (to_matrix im').value?0 { im = (float) (to_image (Vector l)).value; im' = recomb matrix im; } } extract_area x y w h obj = oo_unary_function extract_area_op obj, is_class obj = im_extract_area obj x' y' w' h', is_image obj = map (extract_range x' w') (extract_range y' h' obj), is_matrix obj = error (_ "bad arguments to " ++ "extract_area") { x' = to_real x; y' = to_real y; w' = to_real w; h' = to_real h; extract_area_op = Operator "extract_area" (extract_area x y w h) Operator_type.COMPOUND_REWRAP false; extract_range from length list = (take length @ drop from) list; } extract_band b obj = subscript obj b; extract_row y obj = oo_unary_function extract_row_op obj, is_class obj = extract_area 0 y' (get_width obj) 1 obj, is_image obj = [obj?y'], is_matrix obj = error (_ "bad arguments to " ++ "extract_row") { y' = to_real y; extract_row_op = Operator "extract_row" (extract_row y) Operator_type.COMPOUND_REWRAP false; } extract_column x obj = oo_unary_function extract_column_op obj, is_class obj = extract_area x' 0 1 height obj, is_image obj = map (converse cons [] @ converse subscript x') obj, is_matrix obj = error (_ "bad arguments to " ++ "extract_column") { x' = to_real x; height = get_header "Ysize" obj; extract_column_op = Operator "extract_column" (extract_column x) Operator_type.COMPOUND_REWRAP false; } blend cond in1 in2 = oo_binary_function blend_op cond [in1,in2], is_class cond = im_blend (get_image cond) (get_image in1) (get_image in2), has_image cond && has_image in1 && has_image in2 = error (_ "bad arguments to " ++ "blend") { blend_op = Operator "blend" blend_obj Operator_type.COMPOUND_REWRAP false; blend_obj cond x = blend_result_image { then_part = x?0; else_part = x?1; // get things about our output from inputs in this order objects = [then_part, else_part, cond]; // properties of our output image target_width = get_member_list has_width get_width objects; target_height = get_member_list has_height get_height objects; target_bands = get_member_list has_bands get_bands objects; target_format = get_member_list has_format get_format objects; target_type = get_member_list has_type get_type objects; to_image x = x, is_image x = x.value, is_Image x = black + x { black = im_black target_width target_height target_bands; } then_image = to_image then_part; else_image = to_image else_part; then_image' = clip2fmt target_format then_image; else_image' = clip2fmt target_format else_image; resized = size_alike [cond, then_image', else_image']; blend_result_image = image_set_type target_type (im_blend resized?0 resized?1 resized?2); } } insert x y small big = oo_binary_function insert_op small big, is_class small = oo_binary'_function insert_op small big, is_class big = im_insert rebanded?1 rebanded?0 (to_real x) (to_real y), is_image small && is_image big = error (_ "bad arguments to " ++ "insert") { insert_op = Operator "insert" (insert x y) Operator_type.COMPOUND_REWRAP false; rebanded = bands_alike [small, big]; } insert_noexpand x y small big = oo_binary_function insert_noexpand_op small big, is_class small = oo_binary'_function insert_noexpand_op small big, is_class big = im_insert_noexpand rebanded?1 rebanded?0 (to_real x) (to_real y), is_image small && is_image big = error (_ "bad arguments to " ++ "insert_noexpand") { insert_noexpand_op = Operator "insert_noexpand" (insert_noexpand x y) Operator_type.COMPOUND_REWRAP false; rebanded = bands_alike [small, big]; } measure x y w h u v image = oo_unary_function measure_op image, is_class image = im_measure image (to_real x) (to_real y) (to_real w) (to_real h) (to_real u) (to_real v), is_image image = error (_ "bad arguments to " ++ "measure") { measure_op = Operator "measure" (measure x y w h u v) Operator_type.COMPOUND_REWRAP false; } extract_bands b n obj = oo_unary_function extract_bands_op obj, is_class obj = im_extract_bands obj (to_real b) (to_real n), is_image obj = error (_ "bad arguments to " ++ "extract_bands") { extract_bands_op = Operator "extract_bands" (extract_bands b n) Operator_type.COMPOUND_REWRAP false; } transform ipol wrap params image = oo_unary_function transform_op image, is_class image = im_transform image (to_matrix params) (to_real ipol) (to_real wrap), is_image image = error (_ "bad arguments to " ++ "transform") { transform_op = Operator "transform" (transform ipol wrap params) Operator_type.COMPOUND_REWRAP false; } transform_search max_error max_iterations order ipol wrap sample reference = oo_binary_function transform_search_op sample reference, is_class sample = oo_binary'_function transform_search_op sample reference, is_class reference = im_transform_search sample reference (to_real max_error) (to_real max_iterations) (to_real order) (to_real ipol) (to_real wrap), is_image sample && is_image reference = error (_ "bad arguments to " ++ "transform_search") { transform_search_op = Operator "transform_search" (transform_search max_error max_iterations order ipol wrap) Operator_type.COMPOUND false; } rotate angle image = oo_binary_function rotate_op angle image, is_class angle = oo_binary'_function rotate_op angle image, is_class image = im_similarity image (cos angle) (sin angle) 0 0, is_real angle && is_image image = error (_ "bad arguments to " ++ "rotate") { rotate_op = Operator "rotate" rotate Operator_type.COMPOUND_REWRAP false; } matrix_binary fn a b = itom (fn (mtoi a) (mtoi b)) { mtoi x = im_mask2vips (Matrix x); itom x = (im_vips2mask x).value; } join_lr a b = oo_binary_function join_lr_op a b, is_class a = oo_binary'_function join_lr_op a b, is_class b = join a b { join_lr_op = Operator "join_lr" join Operator_type.COMPOUND_REWRAP false; join a b = join_im a b, is_image a && is_image b = matrix_binary join_im a b, is_matrix a && is_matrix b = error (_ "bad arguments to " ++ "join_lr"); join_im a b = insert (get_width b) 0 a b; } join_tb a b = oo_binary_function join_tb_op a b, is_class a = oo_binary'_function join_tb_op a b, is_class b = join a b { join_tb_op = Operator "join_tb" join Operator_type.COMPOUND_REWRAP false; join a b = join_im a b, is_image a && is_image b = matrix_binary join_im a b, is_matrix a && is_matrix b = error (_ "bad arguments to " ++ "join_tb"); join_im a b = insert 0 (get_height b) a b; } conj x = oo_unary_function conj_op x, is_class x = (re x, -im x), is_complex x || (is_image x && format == Image_format.COMPLEX) || (is_image x && format == Image_format.DPCOMPLEX) // assume it's some sort of real = x { format = get_header "BandFmt" x; conj_op = Operator "conj" conj Operator_type.COMPOUND false; } clip2fmt format image = oo_unary_function clip2fmt_op image, is_class image = im_clip2fmt image (to_real format), is_image image = error (_ "bad arguments to " ++ "clip2fmt") { clip2fmt_op = Operator "clip2fmt" (clip2fmt format) Operator_type.COMPOUND_REWRAP false; } embed type x y w h im = oo_unary_function embed_op im, is_class im = im_embed im (to_real type) (to_real x) (to_real y) (to_real w) (to_real h), is_image im = error (_ "bad arguments to " ++ "embed") { embed_op = Operator "embed" (embed type x y w h) Operator_type.COMPOUND_REWRAP false; } /* Morph a mask with a [[real]] matrix ... turn m2 into an image, morph it * with m1, turn it back to a matrix again. */ _morph_2_masks fn m1 m2 = m'' { image = (unsigned char) im_mask2vips (Matrix m2); m2_width = get_width image; m2_height = get_height image; // need to embed m2 in an image large enough for us to be able to // position m1 all around the edges, with a 1 pixel overlap image' = embed 0 (m1.width / 2) (m1.height / 2) (m2_width + (m1.width - 1)) (m2_height + (m1.height - 1)) image; // morph! image'' = fn m1 image'; // back to mask m' = im_vips2mask ((double) image''); // Turn 0 in output to 128 (don't care). m'' = map (map fn) m'.value { fn a = 128, a == 0; = a; } } dilate mask image = oo_unary_function dilate_op image, is_class image = im_dilate image (to_matrix mask), is_image image = error (_ "bad arguments to " ++ "dilate") { dilate_op = Operator "dilate" dilate_object Operator_type.COMPOUND_REWRAP false; dilate_object x = _morph_2_masks dilate mask x, is_matrix x = dilate mask x; } erode mask image = oo_unary_function erode_op image, is_class image = im_erode image (to_matrix mask), is_image image = error (_ "bad arguments to " ++ "erode") { erode_op = Operator "erode" erode_object Operator_type.COMPOUND_REWRAP false; erode_object x = _morph_2_masks erode mask x, is_matrix x = erode mask x; } conv mask image = oo_unary_function conv_op image, is_class image = im_conv image (to_matrix mask), is_image image = error (_ "bad arguments to " ++ "conv") { conv_op = Operator "conv" (conv mask) Operator_type.COMPOUND_REWRAP false; } convsep mask image = oo_unary_function convsep_op image, is_class image = im_convsep image (to_matrix mask), is_image image = error (_ "bad arguments to " ++ "convsep") { convsep_op = Operator "convsep" (convsep mask) Operator_type.COMPOUND_REWRAP false; } convsepf mask image = oo_unary_function convsepf_op image, is_class image = im_convsepf image (to_matrix mask), is_image image = error (_ "bad arguments to " ++ "convsepf") { convsepf_op = Operator "convsepf" (convsepf mask) Operator_type.COMPOUND_REWRAP false; } rank w h n image = oo_unary_function rank_op image, is_class image = im_rank image (to_real w) (to_real h) (to_real n), is_image image = error (_ "bad arguments to " ++ "rank") { rank_op = Operator "rank" (rank w h n) Operator_type.COMPOUND_REWRAP false; } rank_image n x = rlist x.value, is_Group x = rlist x, is_list x = error (_ "bad arguments to " ++ "rank_image") { rlist l = wrapper ranked, has_wrapper = ranked { has_wrapper = has_member_list (has_member "Image") l; wrapper = get_member_list (has_member "Image") (get_member "Image") l; ranked = im_rank_image (map get_image l) (to_real n); } } // find the correlation surface for a small image within a big one correlate small big = oo_binary_function correlate_op small big, is_class small = oo_binary'_function correlate_op small big, is_class big = im_spcor big small, is_image small && is_image big = error (_ "bad arguments to " ++ "correlate") { correlate_op = Operator "correlate" correlate Operator_type.COMPOUND_REWRAP false; } // just sum-of-squares-of-differences correlate_fast small big = oo_binary_function correlate_fast_op small big, is_class small = oo_binary'_function correlate_fast_op small big, is_class big = im_fastcor big small, is_image small && is_image big = error (_ "bad arguments to " ++ "correlate_fast") { correlate_fast_op = Operator "correlate_fast" correlate_fast Operator_type.COMPOUND_REWRAP false; } // set Type, wrap as Plot_hist if it's a class hist_tag x = oo_unary_function hist_tag_op x, is_class x = image_set_type Image_type.HISTOGRAM x, is_image x = error (_ "bad arguments to " ++ "hist_tag") { hist_tag_op = Operator "hist_tag" (Plot_histogram @ hist_tag) Operator_type.COMPOUND false; } hist_find x = oo_unary_function hist_find_op x, is_class x = im_histgr x (-1), is_image x = error (_ "bad arguments to " ++ "hist_find") { hist_find_op = Operator "hist_find" (Plot_histogram @ hist_find) Operator_type.COMPOUND false; } hist_find_nD bins image = oo_unary_function hist_find_nD_op image, is_class image = im_histnD image (to_real bins), is_image image = error (_ "bad arguments to " ++ "hist_find_nD") { hist_find_nD_op = Operator "hist_find_nD" (hist_find_nD bins) Operator_type.COMPOUND_REWRAP false; } hist_map hist image = oo_binary_function hist_map_op hist image, is_class hist = oo_binary'_function hist_map_op hist image, is_class image = im_maplut image hist, is_image hist && is_image image = error (_ "bad arguments to " ++ "hist_map") { // can't use rewrap, as we want to always wrap as image hist_map_op = Operator "hist_map" (compose (compose Image) hist_map) Operator_type.COMPOUND false; } hist_cum hist = oo_unary_function hist_cum_op hist, is_class hist = im_histcum hist, is_image hist = error (_ "bad arguments to " ++ "hist_cum") { hist_cum_op = Operator "hist_cum" hist_cum Operator_type.COMPOUND_REWRAP false; } hist_diff hist = oo_unary_function hist_diff_op hist, is_class hist = im_histdiff hist, is_image hist = error (_ "bad arguments to " ++ "hist_diff") { hist_diff_op = Operator "hist_diff" hist_diff Operator_type.COMPOUND_REWRAP false; im_histdiff h = conv (Matrix [[-1, 1]]) h; } hist_norm hist = oo_unary_function hist_norm_op hist, is_class hist = im_histnorm hist, is_image hist = error (_ "bad arguments to " ++ "hist_norm") { hist_norm_op = Operator "hist_norm" hist_norm Operator_type.COMPOUND_REWRAP false; } hist_match in ref = oo_binary_function hist_match_op in ref, is_class in = oo_binary'_function hist_match_op in ref, is_class ref = im_histspec in ref, is_image in && is_image ref = error (_ "bad arguments to " ++ "hist_match") { hist_match_op = Operator "hist_match" hist_match Operator_type.COMPOUND_REWRAP false; } hist_equalize x = hist_map ((hist_norm @ hist_cum @ hist_find) x) x; hist_equalize_local w h image = oo_unary_function hist_equalize_local_op image, is_class image = lhisteq image, is_image image = error (_ "bad arguments to " ++ "hist_equalize_local") { hist_equalize_local_op = Operator "hist_equalize_local" (hist_equalize_local w h) Operator_type.COMPOUND_REWRAP false; // loop over bands, if necessary lhisteq im = im_lhisteq im (to_real w) (to_real h), get_bands im == 1 = (foldl1 join @ map lhisteq @ bandsplit) im; } // find the threshold below which are percent of the image (percent in [0,1]) // eg. hist_thresh 0.1 x == 12, then x < 12 will light up 10% of the pixels hist_thresh percent image = x { // our own normaliser ... we don't want to norm channels separately // norm to [0,1] my_hist_norm h = h / max h; // normalised cumulative hist // we sum the channels before we normalise, because we want to treat them // all the same h = (my_hist_norm @ sum @ bandsplit @ hist_cum @ hist_find) image.value; // threshold that, then use im_profile to search for the x position in the // histogram x = mean (im_profile (h > percent) 1); } /* Sometimes useful, despite plotting now being built in, for making * diagnostic images. */ hist_plot hist = oo_unary_function hist_plot_op hist, is_class hist = im_histplot hist, is_image hist = error (_ "bad arguments to " ++ "hist_plot") { hist_plot_op = Operator "hist_plot" (Image @ hist_plot) Operator_type.COMPOUND false; } zerox d x = oo_unary_function zerox_op x, is_class x = im_zerox x (to_real d), is_image x = error (_ "bad arguments to " ++ "zerox") { zerox_op = Operator "zerox" (zerox d) Operator_type.COMPOUND_REWRAP false; } resize xfac yfac interp image = oo_unary_function resize_op image, is_class image = resize_im image, is_image image = error (_ "bad arguments to " ++ "resize") { resize_op = Operator "resize" resize_im Operator_type.COMPOUND_REWRAP false; xfac' = to_real xfac; yfac' = to_real yfac; rxfac' = 1 / xfac'; ryfac' = 1 / yfac'; resize_im im // upscale by integer factor, nearest neighbour = im_zoom im xfac' yfac', is_int xfac' && is_int yfac' && xfac' >= 1 && yfac' >= 1 && interp == Interpolate.NEAREST_NEIGHBOUR // downscale by integer factor, nearest neighbour = im_subsample im rxfac' ryfac', is_int rxfac' && is_int ryfac' && rxfac' >= 1 && ryfac' >= 1 && interp == Interpolate.NEAREST_NEIGHBOUR // upscale by any factor, nearest neighbour // can't really do this right ... upscale by integer part, then // bilinear to exact size = scale xg?1 yg?1 (im_zoom im xg?0 yg?0), xfac' >= 1 && yfac' >= 1 && interp == Interpolate.NEAREST_NEIGHBOUR // downscale by any factor, nearest neighbour // can't really do this right ... downscale by integer part, // then bilinear to exact size = scale xs?1 ys?1 (im_subsample im xs?0 ys?0), rxfac' >= 1 && ryfac' >= 1 && interp == Interpolate.NEAREST_NEIGHBOUR // upscale by any factor, bilinear = scale xfac' yfac' im, xfac' >= 1 && yfac' >= 1 && interp == Interpolate.BILINEAR // downscale by any factor, bilinear // block shrink by integer factor, then bilinear resample to // exact = scale xs?1 ys?1 (im_shrink im xs?0 ys?0), rxfac' >= 1 && ryfac' >= 1 && interp == Interpolate.BILINEAR = error ("resize: unimplemented argument combination:\n" ++ " xfac = " ++ print xfac' ++ "\n" ++ " yfac = " ++ print yfac' ++ "\n" ++ " interp = " ++ print interp ++ " (" ++ Interpolate.names.lookup 1 0 interp ++ ")") { // convert a float scale to integer plus fraction // eg. scale by 2.5 becomes [2, 1.25] (x * 2.5 == x * 2 * 1.25) break f = [floor f, f / floor f]; // same, but for downsizing ... turn a float scale which is less than // 1 into an int shrink and a float scale // complicated: the int shrink may round the size down (eg. imagine // subsampling a 11 pixel wide image by 3, we'd get a 3 pixel wide // image, not a 3.666 pixel wide image), so pass in the size of image // we are operating on and adjust for any rounding // so ... x is (eg.) 467, f is (eg. 128/467, about 0.274) rbreak x f = [int_shrink, float_resample] { // the size of image we are aiming for after the combined int and // float resample x' = x * f; // int part int_shrink = floor (1 / f); // size after int shrink x'' = floor (x / int_shrink); // therefore what we need for the float part float_resample = x' / x''; } width = get_width im; height = get_height im; // grow and shrink factors xg = break xfac'; yg = break yfac'; xs = rbreak width xfac'; ys = rbreak height yfac'; // binlinear resize scale xfac yfac im = im_affine im xfac 0 0 yfac 0 0 0 0 (rint (get_width im * xfac)) (rint (get_height im * yfac)); } } sharpen radius x1 y2 y3 m1 m2 in = oo_unary_function sharpen_op in, is_class in = im_sharpen in (to_real radius) (to_real x1) (to_real y2) (to_real y3) (to_real m1) (to_real m2), is_image in = error (_ "bad arguments to " ++ "sharpen") { sharpen_op = Operator "sharpen" (sharpen radius x1 y2 y3 m1 m2) Operator_type.COMPOUND_REWRAP false; } tone_analyse s m h sa ma ha in = oo_unary_function tone_analyse_op in, is_class in = im_tone_analyse in (to_real s) (to_real m) (to_real h) (to_real sa) (to_real ma) (to_real ha), is_image in = error (_ "bad arguments to " ++ "tone_analyse") { tone_analyse_op = Operator "tone_analyse" (Plot_histogram @ tone_analyse s m h sa ma ha) Operator_type.COMPOUND false; } tone_map hist image = oo_binary_function tone_map_op hist image, is_class hist = oo_binary'_function tone_map_op hist image, is_class image = im_tone_map image hist, is_image hist && is_image image = error (_ "bad arguments to " ++ "tone_map") { tone_map_op = Operator "tone_map" tone_map Operator_type.COMPOUND_REWRAP false; } tone_build fmt b w s m h sa ma ha = (Plot_histogram @ clip2fmt fmt) (im_tone_build_range mx mx (to_real b) (to_real w) (to_real s) (to_real m) (to_real h) (to_real sa) (to_real ma) (to_real ha)) { mx = Image_format.maxval fmt; } icc_export depth profile intent in = oo_unary_function icc_export_op in, is_class in = im_icc_export_depth in (to_real depth) (expand profile) (to_real intent), is_image in = error (_ "bad arguments to " ++ "icc_export") { icc_export_op = Operator "icc_export" (icc_export depth profile intent) Operator_type.COMPOUND_REWRAP false; } icc_import profile intent in = oo_unary_function icc_import_op in, is_class in = im_icc_import in (expand profile) (to_real intent), is_image in = error (_ "bad arguments to " ++ "icc_import") { icc_import_op = Operator "icc_import" (icc_import profile intent) Operator_type.COMPOUND_REWRAP false; } icc_import_embedded intent in = oo_unary_function icc_import_embedded_op in, is_class in = im_icc_import_embedded in (to_real intent), is_image in = error (_ "bad arguments to " ++ "icc_import_embedded") { icc_import_embedded_op = Operator "icc_import_embedded" (icc_import_embedded intent) Operator_type.COMPOUND_REWRAP false; } icc_transform in_profile out_profile intent in = oo_unary_function icc_transform_op in, is_class in = im_icc_transform in (expand in_profile) (expand out_profile) (to_real intent), is_image in = error (_ "bad arguments to " ++ "icc_transform") { icc_transform_op = Operator "icc_transform" (icc_transform in_profile out_profile intent) Operator_type.COMPOUND_REWRAP false; } icc_ac2rc profile in = oo_unary_function icc_ac2rc_op in, is_class in = im_icc_ac2rc in (expand profile), is_image in = error (_ "bad arguments to " ++ "icc_ac2rc") { icc_ac2rc_op = Operator "icc_ac2rc" (icc_ac2rc profile) Operator_type.COMPOUND_REWRAP false; } flood_blob x y v image = oo_unary_function flood_blob_op image, is_class image = im_flood_blob_copy image (to_real x) (to_real y) v, is_image image = error (_ "bad arguments to " ++ "flood_blob") { flood_blob_op = Operator "flood_blob" (flood_blob x y v) Operator_type.COMPOUND_REWRAP false; } print_base base in = oo_unary_function print_base_op in, is_class in = map (print_base base) in, is_list in = print_base_real, is_real in = error (_ "bad arguments to " ++ "print_base") { print_base_op = Operator "print_base" (print_base base) Operator_type.COMPOUND false; print_base_real = error "print_base: bad base", base < 2 || base > 16 = "0", in < 0 || chars == [] = reverse chars { digits = map (converse remainder base) (takewhile (not_equal 0) (iterate (converse idiv base) in)); chars = map tohd digits; tohd x = (char) ((int) '0' + x), x < 10 = (char) ((int) 'A' + (x - 10)); idiv a b = (int) (a / b); } } /* id x: the identity function * * id :: * -> * */ id x = x; /* const x y: junk y, return x * * (const 3) is the function that always returns 3. * const :: * -> ** -> * */ const x y = x; /* converse fn a b: swap order of args to fn * * converse fn a b == fn b a * converse :: (* -> ** -> ***) -> ** -> * -> *** */ converse fn a b = fn b a; /* fix fn x: find the fixed point of a function */ fix fn x = limit (iterate fn x); /* until pred fn n: apply fn to n until pred succeeds; return that value * * until (more 1000) (multiply 2) 1 = 1024 * until :: (* -> bool) -> (* -> *) -> * -> * */ until pred fn n = n, pred n = until pred fn (fn n); /* Infinite list of primes. */ primes = 1 : (sieve [2 ..]) { sieve l = hd l : sieve (filter (nmultiple (hd l)) (tl l)); nmultiple n x = x / n != (int) (x / n); } /* Map an n-ary function (pass the args as a list) over groups of objects. * The objects can be single objects or groups. If more than one * object is a group, we iterate for the length of the smallest group. * Don't loop over plain lists, since we want (eg.) "mean [1, 2, 3]" to work. * Treat [] as no-value --- ie. if any of the inputs are [] we put [] into the * output and don't apply the function. copy-pasted into _types, keep in sync */ map_nary fn args = fn args, groups == [] = Group (map process [0, 1 .. shortest - 1]) { // find all the group arguments groups = filter is_Group args; // what's the length of the shortest group arg? shortest = foldr1 min_pair (map (len @ get_value) groups); // process index n ... pull that member from each argument // recurse to handle application, so we work for nested groups too process n = [], lor (map (is_noval n) args) = map_nary fn (map (extract n) args) { extract n arg = arg.value?n, is_Group arg = arg; is_noval n arg = is_Group arg && arg.value?n == []; } } /* Map a 1-ary function over an object. */ map_unary fn a = map_nary (list_1ary fn) [a]; /* Map a 2-ary function over a pair of objects. */ map_binary fn a b = map_nary (list_2ary fn) [a, b]; /* Map a 3-ary function over three objects. */ map_trinary fn a b c = map_nary (list_3ary fn) [a, b, c]; /* Map a 4-ary function over three objects. */ map_quaternary fn a b c d = map_nary (list_4ary fn) [a, b, c, d]; /* Same as map_nary, but for lists. Handy for (eg.) implementing arith ops on * vectors and matricies. */ map_nary_list fn args = fn args, lists == [] = map process [0, 1 .. shortest - 1] { // find all the list arguments lists = filter is_list args; // what's the length of the shortest list arg? shortest = foldr1 min_pair (map len lists); // process index n ... pull that member from each argument // recurse to handle application, so we work for nested lists too process n = map_nary_list fn (map (extract n) args) { extract n arg = arg?n, is_list arg = arg; } } map_unaryl fn a = map_nary_list (list_1ary fn) [a]; map_binaryl fn a b = map_nary_list (list_2ary fn) [a, b]; /* Remove features smaller than x pixels across from an image. This used to be * rather complex ... convsep is now good enough to use. */ smooth x image = convsep (matrix_gaussian_blur (to_real x * 2)) image; /* Chop up an image into a list of lists of smaller images. Pad edges with * black. */ imagearray_chop tile_width tile_height hoverlap voverlap i = map chop' [0, vstep .. last_y] { width = get_width i; height = get_height i; bands = get_bands i; format = get_format i; type = get_type i; tile_width' = to_real tile_width; tile_height' = to_real tile_height; hoverlap' = to_real hoverlap; voverlap' = to_real voverlap; /* Unique pixels per tile. */ hstep = tile_width' - hoverlap'; vstep = tile_height' - voverlap'; /* Number of tiles across and down. Remember the case where width == * hstep. */ across = (int) ((width - 1) / hstep) + 1; down = (int) ((height - 1) / vstep) + 1; /* top/left of final tile. */ last_x = hstep * (across - 1); last_y = vstep * (down - 1); /* How much do we need to pad by? */ sx = last_x + tile_width'; sy = last_y + tile_height'; /* Expand image with black to pad size. */ pad = embed 0 0 0 sx sy i; /* Chop up a row. */ chop' y = map chop'' [0, hstep .. last_x] { chop'' x = extract_area x y tile_width' tile_height' pad; } } /* Reassemble image. */ imagearray_assemble hoverlap voverlap il = (image_set_origin 0 0 @ foldl1 tbj @ map (foldl1 lrj)) il { lrj l r = insert (get_width l + hoverlap) 0 r l; tbj t b = insert 0 (get_height t + voverlap) b t; } /* Generate an nxn identity matrix. */ identity_matrix n = error "identity_matrix: n > 0", n < 1 = map line [0 .. n - 1] { line p = take p [0, 0 ..] ++ [1] ++ take (n - p - 1) [0, 0 ..]; } /* Incomplete gamma function Q(a, x) == 1 - P(a, x) FIXME ... this is now a builtin, until we can get a nice List class (requires overloadable ':') gammq a x = error "bad args", x < 0 || a <= 0 = 1 - gamser, x < a + 1 = gammcf { gamser = (gser a x)?0; gammcf = (gcf a x)?0; } */ /* Incomplete gamma function P(a, x) evaluated as series representation. Also * return ln(gamma(a)) ... nr in c, pp 218 */ gser a x = [gamser, gln] { gln = gammln a; gamser = error "bad args", x < 0 = 0, x == 0 = 1 // fix this { // maximum iterations maxit = 100; ap = List [a + 1, a + 2 ...]; xoap = x / ap; del = map product (prefixes xoap.value); /* del = map (multiply (1 / a)) (map product (prefixes xoap)) del = xap = iterate (multiply */ /* Generate all prefixes of a list ... [1,2,3] -> [[1], [1, 2], [1, 2, * 3], [1, 2, 3, 4] ...] */ prefixes l = map (converse take l) [1..]; } } /* ln(gamma(xx)) ... nr in c, pp 214 */ gammln xx = gln { cof = [76.18009172947146, -86.50532032941677, 24.01409824083091, -1.231739572450155, 0.1208650973866179e-2, -0.5395239384953e-5]; y = take 6 (iterate (add 1) (xx + 1)); ser = 1.000000000190015 + sum (map2 divide cof y); tmp = xx + 0.5; tmp' = tmp - ((xx + 0.5) * log tmp); gln = -tmp + log (2.5066282746310005 * ser / xx); } /* make a LUT from a scatter */ buildlut x = Image (im_buildlut x), is_Matrix x && x.width > 1 = im_buildlut (Matrix x), is_matrix x && len x?0 > 1 = error (_ "bad arguments to " ++ "buildlut"); nip2-8.7.0/share/nip2/compat/7.12/Preferences.ws0000644000175000017500000007760213224651032015771 00000000000000 nip2-8.7.0/share/nip2/compat/7.12/Format.def0000644000175000017500000000630713224651032015057 00000000000000Format_duplicate_item = class Menuaction "_Duplicate" "take a copy of an object" { action x = map_unary copy x; } #separator Format_list_to_group_item = class Menuaction "_List to Group" "turn a list of objects into a group" { action x = to_group x; } Format_group_to_list_item = class Menuaction "_Group to List" "turn a group into a list of objects" { action x = to_list x; } #separator Format_break_item = class Menuaction "_Break Up Object" "break an object into a list of components" { action x = map_unary break x { break x = bandsplit x, is_Image x = map Vector x.value, is_Matrix x = x.value, is_Vector x || is_Real x = error "Breakup: not Image/Matrix/Vector/Real"; } } Format_assemble_item = class Menuaction "_Assemble Objects" "assemble a list (or group) of objects into a single object" { action x = map_unary ass x { ass x = [], x == [] = Vector x, is_real_list x = Matrix x, is_matrix x = bandjoin x, is_listof is_Image x = Vector (map get_value x), is_listof is_Real x = Matrix (map get_value x), is_listof is_Vector x = error "Assemble: not list of Image/Vector/Real/image/real"; } } #separator Format_csv_import_item = class Menuaction "_CSV Import" "read a file of comma-separated values" { action = class _result { _vislevel = 3; path = Pathname "File to load" "empty"; start_line = Expression "Start at line" 1; rows = Expression "Lines to read (-1 for whole file)" (-1); whitespace = String "Whitespace characters" " \""; separator = String "Separator characters" ",;\t"; _result = Image blank, path.value == "empty" = Image (im_csv2vips filename) { filename = search (expand path.value) ++ ":" ++ "skip:" ++ print (start_line.expr - 1) ++ "," ++ "whi:" ++ escape whitespace.value ++ "," ++ "sep:" ++ escape separator.value ++ "," ++ "line:" ++ print rows.expr; // prefix any ',' with a '\' in the separators line escape x = foldr prefix [] x { prefix x l = '\\' : x : l, x == ',' = x : l; } blank = image_new 1 1 1 Image_format.DOUBLE Image_coding.NOCODING Image_type.B_W 0 0 0; } } } // interpret Analyze header for layout and calibration Interpret_header_item = class Menuaction "_Interpret Analyze 7 Header" "examine the Analyze header and set layout and value" { action x = x''' { // read bits of header dim n = get_header ("dsr-image_dimension.dim[" ++ print n ++ "]"); dim0 = dim 0 x; dim1 = dim 1 x; dim2 = dim 2 x; dim3 = dim 3 x; dim4 = dim 4 x; dim5 = dim 5 x; dim6 = dim 6 x; dim7 = dim 7 x; glmax = get_header "dsr-image_dimension.glmax" x; cal_max = get_header "dsr-image_dimension.cal_max" x; // oops, now a nop x' = x; // lay out higher dimensions width-ways x'' = grid dim2 dim3 1 x', dim0 == 3 = grid dim2 dim3 dim4 x', dim0 == 4 = grid (dim2 * dim4) dim5 1 (grid dim2 dim3 dim4) x', dim0 == 5 = grid (dim2 * dim4) dim5 dim6 (grid dim2 dim3 dim4) x', dim0 == 6 = grid (dim2 * dim4 * dim6) dim7 1 (grid (dim2 * dim4) dim5 dim6 (grid dim2 dim3 dim4)) x', dim0 == 7 = error (_ "unsupported dimension " ++ dim0); // multiply by scale factor to get kBeq x''' = x'' * (cal_max / glmax); } } nip2-8.7.0/share/nip2/compat/7.12/Filter.def0000644000175000017500000010771613224651032015062 00000000000000Filter_conv_item = class Menupullright "_Convolution" "various spatial convolution filters" { /* Some useful masks. */ filter_blur = Matrix_con 9 0 [[1, 1, 1], [1, 1, 1], [1, 1, 1]]; filter_sharp = Matrix_con 8 0 [[-1, -1, -1], [-1, 16, -1], [-1, -1, -1]]; filter_emboss = Matrix_con 1 128 [[-1, 0], [0, 1]]; filter_laplacian = Matrix_con 1 128 [[-1, -1, -1], [-1, 8, -1], [-1, -1, -1]]; filter_sobel = Matrix_con 1 128 [[1, 2, 1], [0, 0, 0], [-1, -2, -1]]; filter_lindet = Matrix_con 1 0 [[1, 1, 1], [-2, -2, -2], [1, 1, 1]]; Blur_item = class Menuaction "_Blur" "3x3 blur of image" { action x = map_unary (conv filter_blur) x; } Sharpen_item = class Menuaction "_Sharpen" "3x3 sharpen of image" { action x = map_unary (conv filter_sharp) x; } Emboss_item = class Menuaction "_Emboss" "1 pixel displace emboss" { action x = map_unary (conv filter_emboss) x; } Laplacian_item = class Menuaction "_Laplacian" "3x3 laplacian edge detect" { action x = map_unary (conv filter_laplacian) x; } Sobel_item = class Menuaction "So_bel" "3x3 Sobel edge detect" { action x = map_unary sobel x { sobel im = abs (a - 128) + abs (b - 128) { a = conv filter_sobel im; b = conv (rot270 filter_sobel) im; } } } /* 3x3 line detect of image diagonals should be scaled down by root(2) I guess Kirk */ Linedet_item = class Menuaction "Li_ne Detect" "3x3 line detect" { action x = map_unary lindet x { lindet im = foldr1 max_pair images { masks = take 4 (iterate rot45 filter_lindet); images = map (converse conv im) masks; } } } Usharp_item = class Menuaction "_Unsharp Mask" "cored sharpen of L only in LAB image" { action x = class _result { _vislevel = 3; size = Option "Radius" [ "3 pixels", "5 pixels", "7 pixels", "9 pixels", "11 pixels", "51 pixels" ] 0; st = Scale "Smoothness threshold" 0 5 1.5; bm = Scale "Brighten by at most" 1 50 10; dm = Scale "Darken by at most" 1 50 50; fs = Scale "Sharpen flat areas by" (-2) 5 1; js = Scale "Sharpen jaggy areas by" (-2) 5 2; _result = map_unary process x { process in = Image in''' { in' = colour_transform_to Image_type.LABS in.value; in'' = sharpen [3, 5, 7, 9, 11, 51]?size st bm dm fs js in'; in''' = colour_transform_to (get_type in) in''; } } } } sep1 = Menuseparator; Custom_blur_item = class Menuaction "Custom B_lur / Sharpen" "blur or sharpen with tuneable parameters" { action x = class _result { _vislevel = 3; type = Option "Type" ["Blur", "Sharpen"] 0; r = Scale "Radius" 1 100 1; fac = Scale "Amount" 0 1 1; shape = Option "Mask shape" [ "Square", "Gaussian" ] 0; prec = Option "Precision" ["Int", "Float"] 0; _result = map_unary process x { process in = clip2fmt blur.format proc { mask = matrix_blur r.value, shape.value == 0 = matrix_gaussian_blur r.value; blur = [convsep, convsepf]?prec mask in; proc = in + fac * (in - blur), type == 1 = blur * fac + in * (1 - fac); } } } } Custom_conv_item = class Menuaction "Custom C_onvolution" "convolution filter with tuneable parameters" { action x = class _result { _vislevel = 3; matrix = Matrix_con 1 0 [[0, 0, 0], [0, 1, 0], [0, 0, 0]]; separable = Toggle "Seperable convolution" false, matrix.width == 1 || matrix.height == 1 = false; type = Option "Convolution type" ["Int", "Float"] 0; _result = map_unary process x { process in = in.Image in' { conv_fn = im_conv, !separable && type == 0 = im_convsep, separable && type == 0 = im_convf, !separable && type == 1 = im_convsepf, separable && type == 1 = error "boink!"; in' = conv_fn in.value matrix; } } } } } Filter_rank_item = class Menupullright "_Rank" "various rank filters" { Median_item = class Menuaction "_Median" "3x3 median rank filter" { action x = map_unary (rank 3 3 5) x; } Image_rank_item = class Menuaction "_Image Rank" "pixelwise rank a list or group of images" { action x = class _result { _vislevel = 3; select = Expression "Rank" ((int) (guess_size / 2)) { guess_size = len x, is_list x = len x.value, is_Group x = 0; } // can't really iterate over groups ... since we allow a group // argument _result = rank_image select x; } } Custom_rank_item = class Menuaction "Custom _Rank" "rank filter with tuneable parameters" { action x = class _result { _vislevel = 3; window_width = Expression "Window width" 3; window_height = Expression "Window height" 3; select = Expression "Rank" ((int) ((to_real window_width * to_real window_height + 1) / 2)); _result = map_unary process x { process in = rank window_width window_height select in; } } } } Filter_morphology_item = class Menupullright "_Morphology" "various morphological filters" { /* Some useful masks. */ mask8 = Matrix_mor [[255, 255, 255], [255, 255, 255], [255, 255, 255]]; mask4 = Matrix_mor [[128, 255, 128], [255, 255, 255], [128, 255, 128]]; mask1 = Matrix_mor [[0, 0, 0], [0, 255, 0], [0, 0, 0]]; thin = Matrix_mor [[0, 0, 0], [128, 255, 128], [255, 255, 255]]; Threshold_item = Select_item.Threshold_item; sep1 = Menuseparator; Dilate_item = class Menupullright "_Dilate" "morphological dilate" { Dilate8_item = class Menuaction "_8-connected" "dilate with an 8-connected mask" { action x = map_unary (dilate mask8) x; } Dilate4_item = class Menuaction "_4-connected" "dilate with a 4-connected mask" { action x = map_unary (dilate mask4) x; } } Erode_item = class Menupullright "_Erode" "morphological erode" { Erode8_item = class Menuaction "_8-connected" "erode with an 8-connected mask" { action x = map_unary (erode mask8) x; } Erode4_item = class Menuaction "_4-connected" "erode with a 4-connected mask" { action x = map_unary (erode mask4) x; } } Custom_morph_item = class Menuaction "Custom _Morphology" "convolution morphological operator" { action x = class _result { _vislevel = 3; mask = mask4; type = Option "Operation" ["Erode", "Dilate"] 1; apply = Expression "Number of times to apply mask" 1; _result = map_unary morph x { morph image = Image value' { fatmask = (iterate (dilate mask) mask)?(to_real apply - 1); value' = im_erode image.value fatmask, type.value == 0 = im_dilate image.value fatmask; } } } } sep2 = Menuseparator; Open_item = class Menuaction "_Open" "open with an 8-connected mask" { action x = map_unary (dilate mask8 @ erode mask8) x; } Close_item = class Menuaction "_Close" "close with an 8-connected mask" { action x = map_unary (erode mask8 @ dilate mask8) x; } Clean_item = class Menuaction "C_lean" "remove 8-connected isolated points" { action x = map_unary clean x { clean x = x ^ erode mask1 x; } } Thin_item = class Menuaction "_Thin" "thin once" { action x = map_unary thinall x { masks = take 8 (iterate rot45 thin); thin1 m x = x ^ erode m x; thinall x = foldr thin1 x masks; } } } Filter_fourier_item = class Menupullright "_Fourier" "various Fourier filters" { preview_size = 64; sense_option = Option "Sense" [ "Pass", "Reject" ] 0; // make a visualisation image make_vis fn = (Image @ image_set_type Image_type.FOURIER @ rotquad @ fn) (im_create_fmask preview_size preview_size); // make the process function process fn in = (Image @ fn) (im_flt_image_freq in.value); New_ideal_item = class Menupullright "_Ideal" "various ideal Fourier filters" { High_low_item = class Menuaction "_High or Low Pass" "highpass/lowpass ideal Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; // call a freq func with our parameters _params f = f sense.value fc.value 0 0 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" "ring pass/reject ideal Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; rw = Scale "Ring width" 0.01 0.99 0.5; // call a freq func with our parameters _params f = f (sense.value + 6) fc.value rw.value 0 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Band_item = class Menuaction "_Band Pass or Band Reject" "band pass/reject ideal Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fcx = Scale "Horizontal frequency cutoff" 0.01 0.99 0.5; fcy = Scale "Vertical frequency cutoff" 0.01 0.99 0.5; r = Scale "Radius" 0.01 0.99 0.5; // call a freq func with our parameters _params f = f (sense.value + 12) fcx.value fcy.value r.value 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } } New_gaussian_item = class Menupullright "_Gaussian" "various Gaussian Fourier filters" { High_low_item = class Menuaction "_High or Low Pass" "highpass/lowpass Gaussian Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; // call a freq func with our parameters _params f = f (sense.value + 4) fc.value ac.value 0 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" "ring pass/reject Gaussian Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; rw = Scale "Ring width" 0.01 0.99 0.5; // call a freq func with our parameters _params f = f (sense.value + 10) fc.value rw.value ac.value 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Band_item = class Menuaction "_Band Pass or Band Reject" "band pass/reject Gaussian Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fcx = Scale "Horizontal frequency cutoff" 0.01 0.99 0.5; fcy = Scale "Vertical frequency cutoff" 0.01 0.99 0.5; r = Scale "Radius" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; // call a freq func with our parameters _params f = f (sense.value + 16) fcx.value fcy.value r.value ac.value 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } } New_butterworth_item = class Menupullright "_Butterworth" "various Butterworth Fourier filters" { High_low_item = class Menuaction "_High or Low Pass" "highpass/lowpass Butterworth Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; o = Scale "Order" 1 10 2; // call a freq func with our parameters _params f = f (sense.value + 2) o.value fc.value ac.value 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" "ring pass/reject Butterworth Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; rw = Scale "Ring width" 0.01 0.99 0.5; o = Scale "Order" 1 10 2; // call a freq func with our parameters _params f = f (sense.value + 8) o.value fc.value rw.value ac.value 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Band_item = class Menuaction "_Band Pass or Band Reject" "band pass/reject Butterworth Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fcx = Scale "Horizontal frequency cutoff" 0.01 0.99 0.5; fcy = Scale "Vertical frequency cutoff" 0.01 0.99 0.5; r = Scale "Radius" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; o = Scale "Order" 1 10 2; // call a freq func with our parameters _params f = f (sense.value + 14) o.value fcx.value fcy.value r.value ac.value; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } } } Filter_enhance_item = class Menupullright "_Enhance" "various enhancement filters" { Falsecolour_item = class Menuaction "_False Colour" "false colour a mono image" { action x = class _result { _vislevel = 3; o = Scale "Offset" (-255) 255 0; clip = Toggle "Clip colour range" false; _result = map_unary process x { process im = falsecolour mono'' { mono = colour_transform_to Image_type.B_W im; mono' = mono + o; mono'' = (unsigned char) mono', clip = (unsigned char) (mono' & 0xff); } } } } Statistical_diff_item = class Menuaction "_Statistical Difference" "statistical difference of an image" { action x = class _result { _vislevel = 3; wsize = Expression "Window size" 11; tmean = Expression "Target mean" 128; mean_weight = Scale "Mean weight" 0 1 0.8; tdev = Expression "Target deviation" 50; dev_weight = Scale "Deviation weight" 0 1 0.8; border = Toggle "Output image matches input image in size" true; _result = map_unary process x { process in = Image in'' { in' = colour_transform_to Image_type.B_W in.value; fn = im_stdif, border = im_stdif_raw; in'' = fn in' mean_weight.value tmean.expr dev_weight.value tdev.expr wsize.expr wsize.expr; } } } } Hist_equal_item = class Menupullright "_Equalise Histogram" "equalise contrast" { Global_item = class Menuaction "_Global" "equalise contrast globally" { action x = map_unary hist_equalize x; } Local_item = class Menuaction "_Local" "equalise contrast within a roving window" { action x = class _result { _vislevel = 3; window_width = Expression "Window width" 20; window_height = Expression "Window height" 20; _result = map_unary process x { process in = hist_equalize_local window_width.expr window_height.expr in; } } } } } Filter_correlate_item = class Menupullright "Spatial _Correlation" "calculate correlation surfaces" { Correlate_item = class Menuaction "_Correlate" "calculate correlation coefficient" { action a b = map_binary corr a b { corr a b = correlate a b, a.width <= b.width && a.height <= b.height = correlate b a; } } Correlate_fast_item = class Menuaction "_Simple Difference" "calculate sum of squares of differences" { action a b = map_binary corr a b { corr a b = correlate_fast a b, a.width <= b.width && a.height <= b.height = correlate_fast b a; } } } #separator Filter_tilt_item = class Menupullright "Ti_lt Brightness" "tilt brightness" { Left_right_item = class Menuaction "_Left to Right" "linear left-right brighten" { action x = class _result { _vislevel = 3; tilt = Scale "Left-right tilt" (-1) 1 0; _result = map_unary tilt_lr x { tilt_lr image = image * scale { ramp = im_fgrey image.width image.height; scale = (ramp - 0.5) * tilt + 1; } } } } Top_bottom_item = class Menuaction "_Top to Bottom" "linear top-bottom brighten" { action x = class _result { _vislevel = 3; tilt = Scale "Top-bottom tilt" (-1) 1 0; _result = map_unary tilt_tb x { tilt_tb image = image * scale { ramp = rot90 (im_fgrey image.height image.width); scale = (ramp - 0.5) * tilt + 1; } } } } sep1 = Menuseparator; Left_right_cos_item = class Menuaction "Cosine Left-_right" "cosine left-right brighten" { action x = class _result { _vislevel = 3; tilt = Scale "Left-right tilt" (-1) 1 0; shift = Scale "Shift by" (-1) 1 0; _result = map_unary tilt_lr x { tilt_lr image = image * scale { ramp = im_fgrey image.width image.height - 0.5 - shift.value; scale = 0.5 * tilt.value * cos (ramp * 180) + 1; } } } } Top_bottom_cos_item = class Menuaction "Cosine Top-_bottom" "cosine top-bottom brighten" { action x = class _result { _vislevel = 3; tilt = Scale "Top-bottom tilt" (-1) 1 0; shift = Scale "Shift by" (-1) 1 0; _result = map_unary tilt_tb x { tilt_tb image = image * scale { ramp = rot90 (im_fgrey image.height image.width) - 0.5 - shift.value; scale = 0.5 * tilt.value * cos (ramp * 180) + 1; } } } } sep2 = Menuseparator; Circular_item = class Menuaction "_Circular" "circular brighten" { action x = class _result { _vislevel = 3; tilt = Scale "Tilt" (-1) 1 0; hshift = Scale "Horizontal shift by" (-1) 1 0; vshift = Scale "Vertical shift by" (-1) 1 0; _result = map_unary tilt_tb x { tilt_tb image = image * scale { hramp = im_fgrey image.width image.height - 0.5 - hshift.value; vramp = rot90 (im_fgrey image.height image.width) - 0.5 - vshift.value; ramp = (hramp ** 2 + vramp ** 2) ** 0.5; scale = 0.5 * tilt.value * cos (ramp * 180) + 1; } } } } } Filter_blend_item = class Menupullright "_Blend" "blend objects together" { Scale_blend_item = class Menuaction "_Scale Blend" "blend two objects together with a scale" { action a b = class _result { _vislevel = 3; p = Scale "Blend position" 0 1 0.5; _result = map_binary process a b { process im1 im2 = im1 * (1 - p.value) + im2 * p.value; } } } Image_blend_item = class Menuaction "_Image Blend" "use an image to blend two objects" { action a b c = map_trinary process a b c { process a b c = blend condition in1 in2 { compare a b // prefer image as the condition = false, !has_image a && has_image b // prefer mono images as the condition = false, has_bands a && has_bands b && get_bands a > 1 && get_bands b == 1 // prefer uchar as the condition = false, has_format a && has_format b && get_format a > Image_format.UCHAR && get_format b == Image_format.UCHAR = true; args' = sortc compare [a, b, c]; condition = args'?0; in1 = args'?1; in2 = args'?2; } } } Line_blend_item = class Menuaction "_Along Line" "blend between image a and image b along a line" { action a b = class _result { _vislevel = 3; orientation = Option "Orientation" [ "Left to Right", "Top to Bottom" ] 0; blend_position = Scale "Blend position" 0 1 0.5; blend_width = Scale "Blend width" 0 1 0.05; _result = map_binary process a b { process a b = blend (Image condition) b a { output_width = max_pair a.width b.width; output_height = max_pair a.height b.height; range = output_width, orientation == 0 = output_height; blend_position' = floor (range * blend_position.value); blend_width' = 1, blend_width.value == 0 = floor (range * blend_width.value); start = blend_position' - blend_width' / 2; background = (make_xy output_width output_height) >= blend_position'; ramp = im_grey blend_width' output_height, orientation == 0 = rot90 (im_grey blend_width' output_width); condition = insert_noexpand start 0 ramp background?0, orientation == 0 = insert_noexpand 0 start ramp background?1; } } } } Blend_alpha_item = class Menuaction "_Alpha Blend" "blend images with optional alpha channels" { // usage: layerit foreground background // input images must be either 1 or 3 bands, optionally + 1 band // which is used as the alpha channel // rich lott scale_mask im opacity = (unsigned char) (to_real opacity / 255 * im); // to mono intensity = colour_transform_to Image_type.B_W; // All the blend functions // I am grateful to this page // http://www.pegtop.net/delphi/blendmodes/ // for most of the formulae. blend_normal mask opacity fg bg = blend (scale_mask mask opacity) fg bg; blend_iflighter mask opacity fg bg = blend (if fg' > bg' then mask' else 0) fg bg { fg' = intensity fg; bg' = intensity bg; mask' = scale_mask mask opacity ; } blend_ifdarker mask opacity fg bg = blend (if fg' < bg' then mask' else 0) fg bg { fg' = intensity fg ; bg' = intensity bg ; mask' = scale_mask mask opacity ; } blend_multiply mask opacity fg bg = blend (scale_mask mask opacity) fg' bg { fg' = fg / 255 * bg; } blend_add mask opacity fg bg = blend mask fg' bg { fg' = opacity / 255 * fg + bg; } blend_subtract mask opacity fg bg = blend mask fg' bg { fg' = bg - opacity / 255 * fg; } blend_screen mask opacity fg bg = blend mask fg' bg { fg' = 255 - (255 - bg) * (255 - (opacity / 255 * fg)) / 255; } blend_burn mask opacity fg bg = blend mask fg'' bg { // fades to white which has no effect. fg' = (255 - opacity) + opacity * fg / 255; fg'' = 255 - 255 * (255 - bg) / fg'; } blend_softlight mask opacity fg bg = blend mask' fg' bg { mask' = scale_mask mask opacity; fg' = (2 * bg * fg + bg * bg * (1 - 2 * fg / 255)) / 255; } blend_hardlight mask opacity fg bg = blend mask' fg' bg { mask' = scale_mask mask opacity; fg' = 2 / 255 * fg * bg, bg < 129 = 255 - 2 * (255 - bg) * (255 - fg) / 255; } blend_lighten mask opacity fg bg = blend mask' fg' bg { mask' = scale_mask mask opacity; fg' = if bg < fg then fg else bg; } blend_darken mask opacity fg bg = blend mask' fg' bg { mask' = scale_mask mask opacity; fg' = if bg > fg then fg else bg; } blend_dodge mask opacity fg bg = blend mask fg'' bg { // one added to avoid divide by zero fg' = 1 + 255 - (opacity / 255 * fg); fg'' = bg * 255 / fg'; } blend_reflect mask opacity fg bg = blend mask' fg' bg { mask' = scale_mask mask opacity; fg' = bg * bg / (255 - fg); } blend_freeze mask opacity fg bg = blend mask' fg' bg { mask' = scale_mask mask opacity; fg' = 255 - (255 - bg) * (255 - bg) / (1 + fg); } blend_or mask opacity fg bg = bg | (unsigned char) fg' { mask' = scale_mask mask opacity; fg' = fg * mask' / 255; } blend_and mask opacity fg bg = bg & (unsigned char) fg' { mask' = scale_mask mask opacity; fg' = fg * mask' / 255; } // blend types NORMAL = 0; IFLIGHTER = 1; IFDARKER = 2; MULTIPLY = 3; ADD = 4; SUBTRACT = 5; SCREEN = 6; BURN = 7; DODGE = 8; HARDLIGHT = 9; SOFTLIGHT = 10; LIGHTEN = 11; DARKEN = 12; REFLECT = 13; FREEZE = 14; OR = 15; AND = 16; // names we show the user for blend types names = Enum [ ["Normal", NORMAL], ["If Lighter", IFLIGHTER], ["If Darker", IFDARKER], ["Multiply", MULTIPLY], ["Add", ADD], ["Subtract", SUBTRACT], ["Screen", SCREEN], ["Burn", BURN], ["Soft Light", SOFTLIGHT], ["Hard Light", HARDLIGHT], ["Lighten", LIGHTEN], ["Darken", DARKEN], ["Dodge", DODGE], ["Reflect", REFLECT], ["Freeze", FREEZE], ["Bitwise OR", OR], ["Bitwise AND", AND] ]; // functions we call for each blend type actions = Table [ [NORMAL, blend_normal], [IFLIGHTER, blend_iflighter], [IFDARKER, blend_ifdarker], [MULTIPLY, blend_multiply], [ADD, blend_add], [SUBTRACT, blend_subtract], [SCREEN, blend_screen], [BURN, blend_burn], [SOFTLIGHT, blend_softlight], [HARDLIGHT, blend_hardlight], [LIGHTEN, blend_lighten], [DARKEN, blend_darken], [DODGE, blend_dodge], [REFLECT, blend_reflect], [FREEZE, blend_freeze], [OR, blend_or], [AND, blend_and] ]; // make sure im has an alpha channel (set opaque if it hasn't) put_alpha im = im, im.bands == 4 || im.bands == 2 = im ++ 255; // make sure im has no alpha channel lose_alpha im = extract_bands 0 3 im, im.bands == 4 = im?0, im.bands == 2 = im; // does im have al alpha channel? has_alpha im = im.bands == 2 || im.bands == 4; // get the alpha (set opaque if no alpha) get_alpha img = img'?3, img.bands == 4 = img'?1 { img' = put_alpha img; } // add an alpha ... cast the alpha image to match the main image append_alpha im alpha = im ++ clip2fmt im.format alpha; // makes fg the same size as bg, displaced with u, v pixel offset moveit fg bg u v = insert_noexpand u v fg bg' { bg' = image_new bg.width bg.height fg.bands fg.format fg.coding fg.type 0 0 0; } action bg fg = class _value { _vislevel = 3; method = Option_enum names "Blend mode" "Normal"; opacity = Scale "Opacity" 0 255 255; hmove = Scale "Horizontal move by" (-bg.width) (bg.width) 0; vmove = Scale "Vertical move by" (-bg.height) (bg.height) 0; _value = append_alpha blended merged_alpha, has_alpha bg = blended { // displace and resize fg (need to displace alpha too) fg' = moveit (put_alpha fg) bg hmove vmove; // transform to sRGB fg'' = colour_transform_to Image_type.sRGB (lose_alpha fg'); bg' = colour_transform_to Image_type.sRGB (lose_alpha bg); // alphas merged merged_alpha = get_alpha bg | get_alpha fg'; // blend together blended = (actions.lookup 0 1 method.value_thing) (get_alpha fg') opacity.value fg'' bg'; } } } } Filter_overlay_header_item = class Menuaction "_Overlay" "make a colour overlay of two monochrome images" { action a b = class _result { _vislevel = 3; colour = Option "Colour overlay as" [ "Green over Red", "Blue over Red", "Red over Green", "Red over Blue", "Blue over Green", "Green over Blue" ] 0; _result = map_binary overlay a b { overlay a b = image_set_type Image_type.sRGB [(a' ++ b' ++ 0), (a' ++ 0 ++ b'), (b' ++ a' ++ 0), (b' ++ 0 ++ a'), (0 ++ a' ++ b'), (0 ++ b' ++ a')]?colour { a' = colour_transform_to Image_type.B_W a; b' = colour_transform_to Image_type.B_W b; } } } } Filter_colourize_item = class Menuaction "_Colourize" "use a colour image or patch to tint a mono image" { action a b = class _result { _vislevel = 3; tint = Scale "Tint" 0 1 0.6; _result = map_binary tintit a b { tintit a b = colour_transform_to (get_type colour) colourized' { // get the mono thing first args = sortc (const (is_colour_type @ get_type)) [a, b]; mono = args?0; colour = args?1; colour' = tint * colour_transform_to Image_type.LAB colour; mono' = colour_transform_to Image_type.B_W mono; colourized = (mono' / 2.55) ++ colour'?1 ++ colour'?2; colourized' = image_set_type Image_type.LAB colourized; } } } } Filter_browse_multiband_item = class Menupullright "Bro_wse" "browse though an image, bitwise or bandwise" { Bandwise_item = class Menuaction "B_andwise" "browse through the bands of a multiband image" { action image = class _result { _vislevel = 3; band = Scale "Band" 0 (image.bands - 1) 0; display = Option "Display as" [ "Grey", "Green over Red", "Blue over Red", "Red over Green", "Red over Blue", "Blue over Green", "Green over Blue" ] 0; _result = output { down = (int) band.value; up = down + 1; remainder = band.value - down; fade x a = Vector [0], x == 0 = a * x; a = fade remainder image?up; b = fade (1 - remainder) image?down; output = [ a + b, a ++ b ++ 0, a ++ 0 ++ b, b ++ a ++ 0, b ++ 0 ++ a, 0 ++ a ++ b, 0 ++ b ++ a ] ? display; } } } Bitwise_item = class Menuaction "Bi_twise" "browse through the bits of an image" { action x = class _result { _vislevel = 3; bit = Islider "Bit" 0 (nbits - 1) (nbits - 1) { nbits = x.bits, is_Image x = 8; Islider c f t v = class scope.Scale c f t ((int) v) { Scale = Islider; } } _result = map_unary process x { process im = (im & (0x1 << bit.value)) != 0; } } } } #separator Filter_negative_item = class Menuaction "Photographic _Negative" "swap black and white" { action x = map_unary invert x { invert in = clip2fmt in.format (colour_transform_to (get_type in) rgb') { rgb = colour_transform_to Image_type.sRGB in; rgb' = 255 - rgb; } } } Filter_solarize_item = class Menuaction "_Solarise" "invert colours above a threshold" { action x = class _result { _vislevel = 3; kink = Scale "Kink" 0 1 0.5; _result = map_unary process x { process image = hist_map tab'''' image { // max pixel value for this format mx = Image_format.maxval image.format; // make a LUT ... just 8 and 16 bit tab = im_identity_ushort image.bands mx, image.format == Image_format.USHORT = im_identity image.bands; tab' = Image tab; // make basic ^ shape tab'' = tab' * (1 / kink), tab' < mx * kink = (mx - tab') / (1 - kink); tab''' = clip2fmt image.format tab''; // smooth a bit mask = matrix_blur (tab'''.width / 8); tab'''' = convsep mask tab'''; } } } } Filter_diffuse_glow_item = class Menuaction "_Diffuse Glow" "add a halo to highlights" { action x = class _result { _vislevel = 3; r = Scale "Radius" 0 50 5; highlights = Scale "Highlights" 0 100 95; glow = Scale "Glow" 0 1 0.5; colour = Colour_new_item.Widget_colour_item.action; _result = map_unary process x { process image = image' { mono = (unsigned char) (colour_transform_to Image_type.B_W image); thresh = hist_thresh (highlights.value / 100) mono; mask = mono > thresh; blur = convsep (matrix_gaussian_blur r.value) mask; colour' = colour_transform_to image.type colour; image' = image + colour' * glow * (blur / 255); } } } } Filter_drop_shadow_item = class Menuaction "Drop S_hadow" "add a drop shadow to an image" { action x = class _result { _vislevel = 3; sx = Scale "Horizontal shadow" (-50) 50 5; sy = Scale "Vertical shadow" (-50) 50 5; ss = Scale "Shadow softness" 0 20 5; bg_colour = Expression "Background colour" 255; sd_colour = Expression "Shadow colour" 128; alpha = Toggle "Shadow in alpha channel" false; transparent = Toggle "Zero pixels are transparent" false; _result = map_unary shadow x { shadow image = Image final { blur_size = ss.value * 2 + 1; // matrix we blur with to soften shadows blur_matrix = matrix_gaussian_blur blur_size; matrix_size = blur_matrix.width; matrix_radius = (int) (matrix_size / 2) + 1; // position and size of shadow image in input cods // before and after fuzzing shadow_rect = Rect sx.value sy.value image.width image.height; fuzzy_shadow_rect = shadow_rect.margin_adjust matrix_radius; // size and pos of final image, in input cods final_rect = image.rect.union fuzzy_shadow_rect; // hard part of shadow in output cods shadow_rect' = Rect (shadow_rect.left - final_rect.left) (shadow_rect.top - final_rect.top) shadow_rect.width shadow_rect.height; // make the shadow mask ... true for parts which cast // a shadow mask = (foldr1 bitwise_and @ bandsplit) (image.value != 0), transparent = image_new image.width image.height 1 Image_format.UCHAR Image_coding.NOCODING Image_type.B_W 255 0 0; mask' = embed 0 shadow_rect'.left shadow_rect'.top final_rect.width final_rect.height mask; mask'' = convsep blur_matrix mask'; // use mask to fade between bg and shadow colour mk_background colour = image_new final_rect.width final_rect.height image.bands image.format image.coding image.type colour 0 0; bg_image = mk_background bg_colour.expr; shadow_image = mk_background sd_colour.expr; bg = blend mask'' shadow_image bg_image; // make a full size mask fg_mask = embed 0 (image.rect.left - final_rect.left) (image.rect.top - final_rect.top) final_rect.width final_rect.height mask; // wrap up the input image ... put the shadow colour // around it, so if we are outputting a separate // alpha the shadow colour will be set correctly fg = insert (image.rect.left - final_rect.left) (image.rect.top - final_rect.top) image.value shadow_image; final // make a separate alpha = fg ++ mask'', alpha // paste image over shadow = if fg_mask then fg else bg; } } } } Filter_paint_text_item = class Menuaction "_Paint Text" "paint text into an image" { action x = paint_position, is_Group x = paint_area { paint_area = class _result { _check_args = [ [x, "x", check_Image] ]; _vislevel = 3; text = String "Text to paint" "Hello world!"; font = Fontname "Use font" Workspaces.Preferences.PAINTBOX_FONT; align = Option "Alignment" ["Left", "Centre", "Right"] 0; dpi = Expression "DPI" 300; colour = Expression "Text colour" 255; place = Region x (x.width / 4) (x.height / 4) (x.width / 2) (x.height / 2); _result = insert_noexpand place.left place.top (blend txt' fg place) x { fg = image_new place.width place.height x.bands x.format x.coding x.type colour.expr 0 0; txt = Image (im_text text.value font.value place.width align.value (to_real dpi)); bg = im_black place.width place.height 1; txt' = insert_noexpand 0 0 txt bg; } } paint_position = class _result { _vislevel = 3; text = Pattern_images_item.Text_item.action; colour = Expression "Text colour" 255; position = Option "Position" [ "North-west", "North", "North-east", "West", "Centre", "East", "South-west", "South", "South-east", "Specify in pixels" ] 4; left = Expression "Pixels from left" 0; top = Expression "Pixels from top" 0; _result = map_unary paint x { paint image = insert_noexpand x' y' place' image { xr = image.width - text.width; yr = image.height - text.height; x = left.expr, position == 9 = [0, xr / 2, xr]?(position % 3); y = top.expr, position == 9 = [0, yr / 2, yr]?(position / 3); x' = range 0 x (image.width - 1); y' = range 0 y (image.height - 1); w' = range 1 text.width (image.width - x'); h' = range 1 text.height (image.height - y'); place = extract_area x' y' w' h' image; text' = insert_noexpand 0 0 text (im_black w' h' 1); fg = image_new w' h' image.bands image.format image.coding image.type colour.expr 0 0; place' = blend text' fg place; } } } } } Filter_draw_line_item = class Menuaction "Draw _Line" "draw a line using an arrow as a guide" { } nip2-8.7.0/share/nip2/compat/7.12/Histogram.def0000644000175000017500000001706513224651032015567 00000000000000Hist_new_item = class Menuaction "_New Histogram" "make a new histogram" { action = class _result { _vislevel = 3; d = Option "Depth" ["8 bit", "16 bit"] 0; b = Scale "Black point" 0 100 0; w = Scale "White point" 0 100 100; sp = Scale "Shadow point" 0.1 0.3 0.2; mp = Scale "Mid-tone point" 0.4 0.6 0.5; hp = Scale "Highlight point" 0.7 0.9 0.8; sa = Scale "Shadow adjust" (-15) 15 0; ma = Scale "Mid-tone adjust" (-30) 30 0; ha = Scale "Highlight adjust" (-15) 15 0; _result = tone_build fmt b w sp mp hp sa ma ha { fmt = [Image_format.UCHAR, Image_format.USHORT]?d; } } } Hist_new_from_matrix = Matrix_buildlut_item; Hist_from_image_item = class Menuaction "Ta_g Image As Histogram" "set image Type field to Histogram" { action x = hist_tag x; } #separator Hist_find_item = class Menupullright "_Find Histogram" "find a histogram" { Oned_item = class Menuaction "_One Dimension" "for a n-band image, make an n-band 1D histogram" { action x = map_unary hist_find x; } Nd_item = class Menuaction "_Many Dimensions" "for a n-band image, make an n-dimensional histogram" { action x = class _result { _vislevel = 3; // default to something small-ish bins = Expression "Number of bins in each dimension" 8; _result = map_unary process x { process in = hist_find_nD bins in; } } } } Hist_map_item = class Menuaction "_Map Histogram" "map an image through a histogram" { action x y = map_binary map x y { map a b = hist_map hist im { args = sortc (const is_hist) [a, b]; im = args?0; hist = args?1; } } } Hist_eq_item = Filter_enhance_item.Hist_equal_item; #separator Hist_cum_item = class Menuaction "_Cumulativise Histogram" "form cumulative histogram" { action x = map_unary hist_cum x; } Hist_diff_item = class Menuaction "_Differentiate Histogram" "find point-to-point differences (inverse of Cumulativise)" { action x = map_unary hist_diff x; } Hist_norm_item = class Menuaction "N_ormalise Histogram" "normalise a histogram" { action x = map_unary hist_norm x; } Hist_match_item = class Menuaction "Ma_tch Histogram" "find LUT which will match first histogram to second" { action in ref = map_binary hist_match in ref; } Hist_zerox_item = class Menuaction "_Zero Crossings" "find zero crossings" { action x = class _result { _vislevel = 3; edge = Option "Direction" [ "Positive-going", "Negative-going" ] 0; _result = map_unary (zerox (if edge == 0 then -1 else 1)) x; } } #separator Hist_profile_item = class Menuaction "Find _Profile" "search from image edges for non-zero pixels" { action x = class _result { _vislevel = 3; edge = Option "Search from" [ "Top edge down", "Left edge to right", "Bottom edge up", "Right edge to left" ] 2; _result = map_unary profile x { profile image = (Plot_histogram @ hist_tag) [ profilemb 0 image.value, profilemb 1 image.value, profilemb 0 (fliptb image.value), profilemb 1 (fliplr image.value) ]?edge; // im_profile only does 1 band images :-( profilemb d = bandjoin @ map (converse im_profile d) @ bandsplit; } } } Hist_project_item = class Menuaction "Find Pro_jections" "find horizontal and vertical projections" { action x = class { _vislevel = 2; _result = map_unary project x; // extract the result ... could be a group extr n = Plot_histogram _result?n, is_list _result = Group (map (Plot_histogram @ converse subscript n) _result.value); horizontal = extr 0; vertical = extr 1; centre = (gravity horizontal, gravity vertical); } } #separator Hist_graph_item = class Menuaction "P_lot Slice" "plot a slice along a guide or arrow" { action x = class _value { _vislevel = 3; width = Scale "Width" 1 40 1; displace = Scale "Horizontal displace" (-50) 50 0; vdisplace = Scale "Vertical displace" (-50) 50 0; _value = map_unary graph x { graph arrow = hist_tag area' { // the line as a polar vector pv = polar (arrow.width, arrow.height); a = im pv; // smallest rotation that will make the line horizontal a' = 360 - a, a > 270 = 180 - a, a > 90 = -a; im' = rotate a' arrow.image; // look at the start and end of the arrow, pick the leftmost p = (arrow.left, arrow.top), arrow.left <= arrow.right = (arrow.right, arrow.bottom); // transform that point to im' space p' = rectangular (polar p + (0, a')) + (im'.xoffset, im'.yoffset); // extract that area area = extract_area (re p' + displace.value) (im p' - width.value / 2 + vdisplace.value) (re pv) width.value im'; // squish vertically to get an average area' = resize 1 (1 / width.value) Interpolate.BILINEAR area; } } } } Extract_arrow_item = class Menuaction "Extract _Arrow" "extract the area around an arrow" { action x = class _value { _vislevel = 3; width = Scale "Width" 1 40 1; displace = Scale "Horizontal displace" (-50) 50 0; vdisplace = Scale "Vertical displace" (-50) 50 0; _value = map_unary graph x { graph arrow = area { // the line as a polar vector pv = polar (arrow.width, arrow.height); a = im pv; // smallest rotation that will make the line horizontal a' = 360 - a, a > 270 = 180 - a, a > 90 = -a; im' = rotate a' arrow.image; // look at the start and end of the arrow, pick the leftmost p = (arrow.left, arrow.top), arrow.left <= arrow.right = (arrow.right, arrow.bottom); // transform that point to im' space p' = rectangular (polar p + (0, a')) + (im'.xoffset, im'.yoffset); // extract that area area = extract_area (re p' + displace.value) (im p' - width.value / 2 + vdisplace.value) (re pv) width.value im'; } } } } Hist_plot_item = class Menuaction "Plot _Object" "plot an object as a bar, point or line graph" { action x = class _result { _vislevel = 3; format = Option_enum Plot_format.names "Format" "YYYY"; style = Option_enum Plot_style.names "Style" "Line"; auto = Toggle "Auto Range" true; xmin = Expression "X range minimum" 0; xmax = Expression "X range maximum" 1; ymin = Expression "Y range minimum" 0; ymax = Expression "Y range maximum" 1; _result = Plot options (image x) { options = [["style", style.value], ["format", format.value]] ++ range; range = [], auto = [["xmin", xmin.expr], ["xmax", xmax.expr], ["ymin", ymin.expr], ["ymax", ymax.expr]]; image x = image (extract_arrow x), is_Arrow x = get_image x, has_image x = x2b im, b == 1 = im { im = get_image (to_image x); w = get_width im; h = get_height im; b = get_bands im; // matrix to image makes a 1-band mxn image // we need to put columns into bands x2b im = bandjoin (map extract_col [0 .. w - 1]) { extract_col x = extract_area x 0 1 h im; } } extract_arrow arrow = extract_area (re p') (im p') (re pv) 1 im' { // the line as a polar vector pv = polar (arrow.width, arrow.height); a = im pv; // smallest rotation that will make the line horizontal a' = 360 - a, a > 270 = 180 - a, a > 90 = -a; im' = rotate a' arrow.image; // look at the start and end of the arrow, pick the leftmost p = (arrow.left, arrow.top), arrow.left <= arrow.right = (arrow.right, arrow.bottom); // transform that point to im' space p' = rectangular (polar p + (0, a')) + (im'.xoffset, im'.yoffset); } } } } nip2-8.7.0/share/nip2/compat/7.12/Makefile.in0000644000175000017500000003675413350464104015227 00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = share/nip2/compat/7.12 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(startdir)" DATA = $(start_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BISON = @BISON@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DLLWRAP = @DLLWRAP@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FFTW3_CFLAGS = @FFTW3_CFLAGS@ FFTW3_LIBS = @FFTW3_LIBS@ FGREP = @FGREP@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_LIBS = @GSL_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ IP_CFLAGS = @IP_CFLAGS@ IP_LIBS = @IP_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBGOFFICE_CFLAGS = @LIBGOFFICE_CFLAGS@ LIBGOFFICE_LIBS = @LIBGOFFICE_LIBS@ LIBGSF_CFLAGS = @LIBGSF_CFLAGS@ LIBGSF_LIBS = @LIBGSF_LIBS@ LIBGVC_CFLAGS = @LIBGVC_CFLAGS@ LIBGVC_LIBS = @LIBGVC_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ 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@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ REQUIRED_PACKAGES_CFLAGS = @REQUIRED_PACKAGES_CFLAGS@ REQUIRED_PACKAGES_LIBS = @REQUIRED_PACKAGES_LIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOP_SRCDIR = @TOP_SRCDIR@ UPDATE_DESKTOP_DATABASE = @UPDATE_DESKTOP_DATABASE@ UPDATE_MIME_DATABASE = @UPDATE_MIME_DATABASE@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XDG_OPEN = @XDG_OPEN@ XGETTEXT = @XGETTEXT@ 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@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ startdir = $(pkgdatadir)/compat/7.12 start_DATA = \ Math.def \ Image.def \ Colour.def \ Tasks.def \ Format.def \ Filter.def \ Matrix.def \ Widgets.def \ Histogram.def \ Preferences.ws \ _joe_extra.def \ _joe_utilities.def \ _convert.def \ _generate.def \ _list.def \ _predicate.def \ _stdenv.def \ _types.def EXTRA_DIST = $(start_DATA) all: all-am .SUFFIXES: $(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) --foreign share/nip2/compat/7.12/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign share/nip2/compat/7.12/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): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-startDATA: $(start_DATA) @$(NORMAL_INSTALL) @list='$(start_DATA)'; test -n "$(startdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(startdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(startdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(startdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(startdir)" || exit $$?; \ done uninstall-startDATA: @$(NORMAL_UNINSTALL) @list='$(start_DATA)'; test -n "$(startdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(startdir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: 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 check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(startdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-startDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-startDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-startDATA install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags-am uninstall uninstall-am uninstall-startDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: nip2-8.7.0/share/nip2/compat/7.12/Matrix.def0000644000175000017500000002067113224651032015073 00000000000000 Matrix_build_item = class Menupullright "_New" "make a new matrix of some sort" { Plain_item = class Menuaction "_Plain" "make a new plain matrix widget" { action = Matrix (identity_matrix 3); } Convolution_item = class Menuaction "_Convolution" "make a new convolution matrix widget" { action = Matrix_con 1 0 [[0, 0, 0], [0, 1, 0], [0, 0, 0]]; } Recombination_item = class Menuaction "_Recombination" "make a new recombination matrix widget" { action = Matrix_rec (identity_matrix 3); } Morphology_item = class Menuaction "_Morphology" "make a new morphology matrix widget" { action = Matrix_mor [[0, 0, 0], [0, 255, 0], [0, 0, 0]]; } sep1 = Menuseparator; Matrix_gaussian_item = class Menuaction "_Gaussian" "make a gaussian matrix" { action = class _result { _vislevel = 3; s = Scale "Sigma" 0.001 10 1; ma = Scale "Minimum amplitude" 0 1 0.2; integer = Toggle "Integer" false; _result = fn s.value ma.value { fn = im_gauss_imask, integer = im_gauss_dmask; } } } Matrix_laplacian_item = class Menuaction "_Laplacian" "make the Laplacian of a Gaussian matrix" { action = class _result { _vislevel = 3; s = Scale "Sigma" 0.001 10 1.5; ma = Scale "Minimum amplitude" 0 1 0.1; integer = Toggle "Integer" false; _result = fn s.value ma.value { fn = im_log_imask, integer = im_log_dmask; } } } } Matrix_to_matrix_item = class Menuaction "Con_vert to Matrix" "convert anything to a matrix" { action x = to_matrix x; } #separator Matrix_extract_item = class Menupullright "_Extract" "extract rows or columns from a matrix" { Rows_item = class Menuaction "_Rows" "extract rows" { action x = class _result { _vislevel = 3; first = Expression "Extract from row" 0; number = Expression "Extract this many rows" 1; _result = map_unary process x { process x = extract_area 0 first (get_width x) number x; } } } Columns_item = class Menuaction "_Columns" "extract columns" { action x = class _result { _vislevel = 3; first = Expression "Extract from column" 0; number = Expression "Extract this many columns" 1; _result = map_unary process x { process mat = extract_area first 0 number (get_height x) x; } } } Area_item = class Menuaction "_Area" "extract area" { action x = class _result { _vislevel = 3; left = Expression "First column" 0; top = Expression "First row" 0; width = Expression "Number of columns" 1; height = Expression "Number of rows" 1; _result = map_unary process x { process mat = extract_area left top width height x; } } } Diagonal_item = class Menuaction "_Diagonal" "extract diagonal" { action x = class _result { _vislevel = 3; which = Option "Extract" [ "Leading Diagonal", "Trailing Diagonal" ] 0; _result = map_unary process x { process mat = mat.Matrix_base (map2 extr [0..] mat.value), which == 0 = mat.Matrix_base (map2 extr [mat.width - 1, mat.width - 2 .. 0] mat.value); extr n l = [l?n]; } } } } Matrix_insert_item = class Menupullright "_Insert" "insert rows or columns into a matrix" { // make a new 8-bit uchar image of wxh with pixels set to p // use to generate new cells newim w h p = image_new w h 1 Image_format.UCHAR Image_coding.NOCODING Image_type.B_W p 0 0; Rows_item = class Menuaction "_Rows" "insert rows" { action x = class _result { _vislevel = 3; first = Expression "Insert at row" 0; number = Expression "Insert this many rows" 1; item = Expression "Set new cells to" 0; _result = map_unary process x { process x = foldl1 (converse join_tb) (concat [top, new, bottom]) { top = [extract_area 0 0 w f x], f > 0 = []; new = [(if is_Matrix x then to_matrix else id) (newim w number item.expr)]; bottom = [extract_area 0 f w (h - f) x], f < h = []; f = to_real first; w = get_width x; h = get_height x; } } } } Columns_item = class Menuaction "_Columns" "insert columns" { action x = class _result { _vislevel = 3; first = Expression "Insert at column" 0; number = Expression "Insert this many columns" 1; item = Expression "Set new cells to" 0; _result = map_unary process x { process x = foldl1 (converse join_lr) (concat [left, new, right]) { left = [extract_area 0 0 f h x], f > 0 = []; new = [(if is_Matrix x then to_matrix else id) (newim number h item.expr)]; right = [extract_area f 0 (w - f) h x], f < w = []; f = to_real first; w = get_width x; h = get_height x; } } } } } Matrix_delete_item = class Menupullright "_Delete" "delete rows or columns from a matrix" { // remove number of items, starting at first delete first number l = take (to_real first) l ++ drop (to_real first + to_real number) l; Rows_item = class Menuaction "_Rows" "delete rows" { action x = class _result { _vislevel = 3; first = Expression "Delete from row" 0; number = Expression "Delete this many rows" 1; _result = map_unary process x { process x = foldl1 (converse join_tb) (concat [top, bottom]) { top = [extract_area 0 0 w f x], f > 0 = []; bottom = [extract_area 0 b w (h - b) x], b < h = []; f = to_real first; n = to_real number; b = f + n; w = get_width x; h = get_height x; } } } } Columns_item = class Menuaction "_Columns" "delete columns" { action x = class _result { _vislevel = 3; first = Expression "Delete from column" 0; number = Expression "Delete this many columns" 1; _result = map_unary process x { process x = foldl1 (converse join_lr) (concat [left, right]) { left = [extract_area 0 0 f h x], f > 0 = []; right = [extract_area r 0 (w - r) h x], r < w = []; f = to_real first; n = to_real number; r = f + n; w = get_width x; h = get_height x; } } } } } Matrix_join = class Menupullright "_Join" "join two matricies" { Left_right_item = class Menuaction "_Left to Right" "join two matricies left-right" { action a b = map_binary join_lr a b; } Top_bottom_item = class Menuaction "_Top to Bottom" "joiin two matricies top-bottom" { action a b = map_binary join_tb a b; } } Matrix_rotate_item = class Menupullright "_Rotate" "clockwise rotation by fixed angles" { rot90 = Image_transform_item.Rotate_item.Fixed_item.Rot90_item; rot180 = Image_transform_item.Rotate_item.Fixed_item.Rot180_item; rot270 = Image_transform_item.Rotate_item.Fixed_item.Rot270_item; Matrix_rot45_item = class Menuaction "_45 Degrees" "45 degree rotate (square, odd-length-sides only)" { action x = map_unary rot45 x; } } Matrix_flip_item = Image_transform_item.Flip_item; #separator Matrix_invert_item = class Menuaction "In_vert" "calculate inverse matrix" { action x = map_unary (converse power (-1)) x; } Matrix_transpose_item = class Menuaction "_Transpose" "swap rows and columns" { action x = map_unary transpose x; } #separator Matrix_plot_scatter_item = class Menuaction "_Plot Scatter" "plot a scatter graph of a matrix of [x,y1,y2,..] coordinates" { action x = class _result { _check_args = [ [x, "x", check_Matrix] ]; _vislevel = 3; auto = Toggle "Auto Range" true; xmin = Expression "X range minimum" 0; xmax = Expression "X range maximum" 1; ymin = Expression "Y range minimum" 0; ymax = Expression "Y range maximum" 1; _result = Plot options ((x2b @ get_image @ to_image) x) { options = [["style", Plot_style.POINT], ["format", Plot_format.XYYY]] ++ range; range = [], auto = [["xmin", xmin.expr], ["xmax", xmax.expr], ["ymin", ymin.expr], ["ymax", ymax.expr]]; // matrix to image makes a 1-band mxn image // we need to put columns into bands x2b im = bandjoin (map extract_col [0 .. w - 1]) { w = get_width im; h = get_height im; b = get_bands im; extract_col x = extract_area x 0 1 h im; } } } } Matrix_plot_item = Hist_plot_item; Matrix_buildlut_item = class Menuaction "_Build LUT From Scatter" "make a lookup table from a matrix of [x,y1,y2..] coordinates" { action x = class _result { _check_args = [ [x, "x", check_Matrix] ]; _result = buildlut x; } } nip2-8.7.0/share/nip2/compat/7.12/_convert.def0000644000175000017500000004243513224651032015450 00000000000000 /* Try to make a Matrix ... works for Vector/Image/Real, plus image/real */ to_matrix x = to_matrix x.expr, is_Expression x = x, is_Matrix x = oo_unary_function to_matrix_op x, is_class x = tom x { to_matrix_op = Operator "to_matrix" tom Operator_type.COMPOUND false; tom x = Matrix (itom x), is_image x = Matrix [[x]], is_real x = Matrix [x], is_real_list x = Matrix x, is_matrix x = error (_ "bad arguments to " ++ "to_matrix"); itom i = (im_vips2mask ((double) i)).value, is_image i = error (_ "not image"); } /* Try to make an Image ... works for Vector/Matrix/Real, plus image/real * Special case for Colour ... pull out the colour_space and set Type in the * image. */ to_image x = to_image x.expr, is_Expression x = x, is_Image x = Image (image_set_type (Image_type.colour_spaces.lookup 0 1 x.colour_space) (mtoi [x.value])), is_Colour x = oo_unary_function to_image_op x, is_class x = toi x { to_image_op = Operator "to_image" toi Operator_type.COMPOUND false; toi x = Image x, is_image x = Image (mtoi [[x]]), is_real x = Image (mtoi [x]), is_real_list x = Image (mtoi x), is_matrix x = error (_ "bad arguments to " ++ "to_image"); // [[real]] -> image mtoi m = im_mask2vips (Matrix m), width != 3 = joinup (im_mask2vips (Matrix m)) { width = len m?0; height = len m; joinup i = b1 ++ b2 ++ b3 { b1 = extract_area 0 0 1 height i; b2 = extract_area 1 0 1 height i; b3 = extract_area 2 0 1 height i; } } } /* Try to make a Colour. */ to_colour x = to_colour x.expr, is_Expression x = x, is_Colour x = to_colour (extract_area x.left x.top 1 1 x.image), is_Mark x = oo_unary_function to_colour_op x, is_class x = toc x { to_colour_op = Operator "to_colour" toc Operator_type.COMPOUND false; toc x = Colour (colour_space (get_type x)) (map mean (bandsplit (get_image x))), has_image x && has_type x = Colour "sRGB" [x, x, x], is_real x // since Colour can't do mono = Colour "sRGB" x, is_real_list x && len x == 3 = map toc x, is_matrix x = error (_ "bad arguments to " ++ "to_colour"); colour_space type = table.get_name type, table.has_name type = error (_ "unable to make Colour from " ++ table.get_name type ++ _ " image") { table = Image_type.colour_spaces; } } /* Try to make a real. (not a Real!) */ to_real x = to_real x.expr, is_Expression x = oo_unary_function to_real_op x, is_class x = tor x { to_real_op = Operator "to_real" tor Operator_type.COMPOUND false; tor x = x, is_real x = abs x, is_complex x = 1, is_bool x && x = 0, is_bool x && !x = error (_ "bad arguments to " ++ "to_real"); } /* Try to make a list ... ungroup, basically. We remove the innermost layer of * Groups. */ to_list x = x.value, is_Group x && !contains_Group x.value = Group (map to_list x.value), is_Group x = x; /* Try to make a group. The innermost list objects become Group()'d. */ to_group x = Group x, is_list x && !contains_Group x = Group (map to_group x.value), is_Group x = x; /* Parse a positive integer. */ parse_pint l = foldl acc 0 l { acc sofar ch = sofar * 10 + parse_c ch; /* Turn a char digit to a number. */ parse_c ch = error (_ "not a digit"), !is_digit ch = (int) ch - (int) '0'; } /* Parse an integer, with an optional sign character. */ parse_int l = error (_ "badly formed number"), len parts != 2 = sign * n { parts = splitpl [member "+-", is_digit] l; n = parse_pint parts?1; sign = 1, parts?0 == [] || parts?0 == "+" = -1; } /* Parse a float. * [+-]?[0-9]*([.][0-9]*)?(e[0-9]+)? */ parse_float l = err, len parts != 4 = (ipart + fpart) * 10 ** exp { err = error (_ "badly formed number"); parts = splitpl [ member "+-0123456789", member ".0123456789", member "eE", member "+-0123456789" ] l; ipart = parse_int parts?0; fpart = 0, parts?1 == []; = err, parts?1?0 != '.' = parse_pint (tl parts?1) / 10 ** (len parts?1 - 1); exp = 0, parts?2 == [] && parts?3 == [] = err, parts?2 == [] = parse_int parts?3; } /* Parse a time in "hh:mm:ss" into seconds. We could do this in one line :) = (sum @ map2 multiply (iterate (multiply 60) 1) @ reverse @ map parse_pint @ map (subscript (splitpl [is_digit, equal ':', is_digit, equal ':', is_digit] l))) [0,2,4]; but it's totally unreadable. */ parse_time l = error (_ "badly formed time"), len parts != 5 = s + 60 * m + 60 * 60 * h { parts = splitpl [is_digit, equal ':', is_digit, equal ':', is_digit] l; h = parse_int parts?0; m = parse_int parts?2; s = parse_int parts?4; } /* matrix to convert D65 XYZ to D50 XYZ ... direct conversion, found by * measuring a macbeth chart in D50 and D65 and doing a LMS to get a matrix */ D652D50_direct = Matrix [[ 1.13529, -0.0604663, -0.0606321 ], [ 0.0975399, 0.935024, -0.0256156 ], [ -0.0336428, 0.0414702, 0.994135 ]]; D502D65_direct = D652D50_direct ** -1; /* Convert normalised XYZ to bradford RGB. */ XYZ2RGBbrad = Matrix [[0.8951, 0.2664, -0.1614], [-0.7502, 1.7135, 0.0367], [0.0389, -0.0685, 1.0296]]; /* Convert bradford RGB to normalised XYZ. */ RGBbrad2XYZ = XYZ2RGBbrad ** -1; D93_whitepoint = Vector [89.7400, 100, 130.7700]; D75_whitepoint = Vector [94.9682, 100, 122.5710]; D65_whitepoint = Vector [95.0470, 100, 108.8827]; D55_whitepoint = Vector [95.6831, 100, 92.0871]; D50_whitepoint = Vector [96.4250, 100, 82.4680]; A_whitepoint = Vector [109.8503, 100, 35.5849]; // 2856K B_whitepoint = Vector [99.0720, 100, 85.2230]; // 4874K C_whitepoint = Vector [98.0700, 100, 118.2300]; // 6774K E_whitepoint = Vector [100, 100, 100]; // ill. free D3250_whitepoint = Vector [105.6590, 100, 45.8501]; Whitepoints = Enum [ ["D93", D93_whitepoint], ["D75", D75_whitepoint], ["D65", D65_whitepoint], ["D55", D55_whitepoint], ["D50", D50_whitepoint], ["A", A_whitepoint], ["B", B_whitepoint], ["C", C_whitepoint], ["E", E_whitepoint], ["D3250", D3250_whitepoint] ]; /* Convert D50 XYZ to D65 using the bradford chromatic adaptation approx. */ im_D502D65 xyz = xyz''' { xyz' = xyz / D50_whitepoint; rgb = recomb XYZ2RGBbrad xyz'; // move white in bradford RGB rgb' = rgb / Vector [0.94, 1.02, 1.33]; xyz'' = recomb RGBbrad2XYZ rgb'; // back to D65 xyz''' = xyz'' * D65_whitepoint; } /* Convert D65 XYZ to D50 using the bradford approx. */ im_D652D50 xyz = xyz''' { xyz' = xyz / D65_whitepoint; rgb = recomb XYZ2RGBbrad xyz'; // move white in bradford RGB rgb' = rgb * Vector [0.94, 1.02, 1.33]; xyz'' = recomb RGBbrad2XYZ rgb'; xyz''' = xyz'' * D50_whitepoint; } /* Convert D50 XYZ to Lab. */ im_D50XYZ2Lab xyz = im_XYZ2Lab_temp xyz D50_whitepoint.value?0 D50_whitepoint.value?1 D50_whitepoint.value?2; im_D50Lab2XYZ lab = im_Lab2XYZ_temp lab D50_whitepoint.value?0 D50_whitepoint.value?1 D50_whitepoint.value?2; /* ... and mono conversions */ im_sRGB2mono in = (image_set_type Image_type.B_W @ clip2fmt (get_header "BandFmt" in) @ recomb (Matrix [[.3, .6, .1]])) in; im_mono2sRGB in = image_set_type Image_type.sRGB (in ++ in ++ in); im_sRGB2Lab = im_XYZ2Lab @ im_sRGB2XYZ; im_Lab2sRGB = im_XYZ2sRGB @ im_Lab2XYZ; // from the 16 bit RGB and GREY formats im_1628 x = im_clip (x >> 8); im_162f x = x / 256; im_8216 x = (im_clip2us x) << 8; im_f216 x = im_clip2us (x * 256); im_RGB162GREY16 in = (image_set_type Image_type.GREY16 @ clip2fmt (get_header "BandFmt" in) @ recomb (Matrix [[.3, .6, .1]])) in; im_GREY162RGB16 in = image_set_type Image_type.RGB16 (in ++ in ++ in); /* apply a func to an image ... make it 1 or 3 bands, and reapply other bands * on the way out. Except if it's LABPACK. */ colour_apply fn x = fn x, b == 1 || b == 3 || c == Image_coding.LABPACK = x'' { b = get_bands x; c = get_coding x; first = extract_bands 0 3 x, b > 3 = extract_bands 0 1 x; tail = extract_bands 3 (b - 3) x, b > 3 = extract_bands 1 (b - 1) x; x' = fn first; x'' = x' ++ clip2fmt (get_format x') tail; } /* Any 1-ary colour op, applied to Vector/Image/Matrix or image */ colour_unary fn x = oo_unary_function colour_op x, is_class x = colour_apply fn x, is_image x = colour_apply fn [x], is_real x = error (_ "bad arguments to " ++ "colour_unary") { // COMPOUND_REWRAP ... signal to the colour class to go to image and // back colour_op = Operator "colour_unary" colour_object Operator_type.COMPOUND_REWRAP false; colour_object x = colour_real_list x, is_real_list x = map colour_real_list x, is_matrix x = colour_apply fn x, is_image x = error (_ "bad arguments to " ++ "colour_unary"); colour_real_list l = (to_matrix (fn (float) (to_image (Vector l)).value)).value?0; } /* Any symmetric 2-ary colour op, applied to Vector/Image/Matrix or image ... * name is op name for error messages etc. */ colour_binary name fn x y = oo_binary_function colour_op x y, is_class x = oo_binary'_function colour_op x y, is_class y = fn x y, is_image x && is_image y = error (_ "bad arguments to " ++ name) { colour_op = Operator name colour_object Operator_type.COMPOUND_REWRAP true; colour_object x y = fn x y, is_image x && is_image y = colour_real_list fn x y, is_real_list x && is_real_list y = map (colour_real_list fn x) y, is_real_list x && is_matrix y = map (colour_real_list (converse fn) y) x, is_matrix x && is_real_list y = map2 (colour_real_list fn) x y, is_matrix x && is_matrix y = error (_ "bad arguments to " ++ name); colour_real_list fn l1 l2 = (to_matrix (fn i1 i2)).value?0 { i1 = (float) (to_image (Vector l1)).value; i2 = (float) (to_image (Vector l2)).value; } } _colour_conversion_table = [ /* Lines are [space-from, space-to, conversion function]. Could do * this as a big array, but table lookup feels safer. */ [B_W, B_W, image_set_type B_W], [B_W, XYZ, im_sRGB2XYZ @ im_mono2sRGB @ im_clip], [B_W, YXY, im_XYZ2Yxy @ im_sRGB2XYZ @ im_mono2sRGB @ im_clip], [B_W, LAB, im_sRGB2Lab @ im_mono2sRGB @ im_clip], [B_W, LCH, im_Lab2LCh @ im_sRGB2Lab @ im_mono2sRGB @ im_clip], [B_W, UCS, im_XYZ2UCS @ im_sRGB2XYZ @ im_mono2sRGB @ im_clip], [B_W, RGB, im_XYZ2disp @ im_sRGB2XYZ @ im_mono2sRGB @ im_clip], [B_W, sRGB, im_mono2sRGB @ im_clip], [B_W, RGB16, im_8216 @ im_mono2sRGB], [B_W, GREY16, im_8216], [B_W, LABQ, im_Lab2LabQ @ im_sRGB2Lab @ im_mono2sRGB @ im_clip], [B_W, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_sRGB2Lab @ im_mono2sRGB @ im_clip], [XYZ, B_W, im_sRGB2mono @ im_XYZ2sRGB @ im_clip2f], [XYZ, XYZ, image_set_type XYZ], [XYZ, YXY, im_XYZ2Yxy @ im_clip2f], [XYZ, LAB, im_XYZ2Lab @ im_clip2f], [XYZ, LCH, im_Lab2LCh @ im_XYZ2Lab], [XYZ, UCS, im_XYZ2UCS @ im_clip2f], [XYZ, RGB, im_XYZ2disp @ im_clip2f], [XYZ, sRGB, im_XYZ2sRGB @ im_clip2f], [XYZ, LABQ, im_Lab2LabQ @ im_XYZ2Lab @ im_clip2f], [XYZ, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_XYZ2Lab @ im_clip2f], [YXY, B_W, im_sRGB2mono @ im_XYZ2sRGB @ im_Yxy2XYZ @ im_clip2f], [YXY, XYZ, im_Yxy2XYZ @ im_clip2f], [YXY, YXY, image_set_type YXY], [YXY, LAB, im_XYZ2Lab @ im_Yxy2XYZ @ im_clip2f], [YXY, LCH, im_Lab2LCh @ im_XYZ2Lab @ im_Yxy2XYZ @ im_clip2f], [YXY, UCS, im_XYZ2UCS @ im_Yxy2XYZ @ im_clip2f], [YXY, RGB, im_XYZ2disp @ im_Yxy2XYZ @ im_clip2f], [YXY, sRGB, im_XYZ2sRGB @ im_Yxy2XYZ @ im_clip2f], [YXY, LABQ, im_Lab2LabQ @ im_XYZ2Lab @ im_Yxy2XYZ @ im_clip2f], [YXY, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_XYZ2Lab @ im_Yxy2XYZ @ im_clip2f], [LAB, B_W, im_sRGB2mono @ im_Lab2sRGB @ im_Lab2XYZ @ im_clip2f], [LAB, XYZ, im_Lab2XYZ @ im_clip2f], [LAB, YXY, im_XYZ2Yxy @ im_Lab2XYZ @ im_clip2f], [LAB, LAB, image_set_type LAB @ im_clip2f], [LAB, LCH, im_Lab2LCh @ im_clip2f], [LAB, UCS, im_Lab2UCS @ im_clip2f], [LAB, RGB, im_Lab2disp @ im_clip2f], [LAB, sRGB, im_Lab2sRGB @ im_clip2f], [LAB, LABQ, im_Lab2LabQ @ im_clip2f], [LAB, LABS, im_Lab2LabS @ im_clip2f], [LCH, B_W, im_sRGB2mono @ im_Lab2sRGB @ im_LCh2Lab @ im_clip2f], [LCH, XYZ, im_Lab2XYZ @ im_LCh2Lab @ im_clip2f], [LCH, YXY, im_XYZ2Yxy @ im_Lab2sRGB @ im_LCh2Lab @ im_clip2f], [LCH, LAB, im_LCh2Lab @ im_clip2f], [LCH, LCH, image_set_type LCH], [LCH, UCS, im_LCh2UCS @ im_clip2f], [LCH, RGB, im_Lab2disp @ im_LCh2Lab @ im_clip2f], [LCH, sRGB, im_Lab2sRGB @ im_LCh2Lab @ im_clip2f], [LCH, LABQ, im_Lab2LabQ @ im_LCh2Lab @ im_clip2f], [LCH, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_LCh2Lab @ im_clip2f], [UCS, B_W, im_sRGB2mono @ im_XYZ2sRGB @ im_UCS2XYZ @ im_clip2f], [UCS, XYZ, im_UCS2XYZ @ im_clip2f], [UCS, YXY, im_XYZ2Yxy @ im_Lab2XYZ @ im_UCS2Lab @ im_clip2f], [UCS, LAB, im_UCS2Lab @ im_clip2f], [UCS, LCH, im_UCS2LCh @ im_clip2f], [UCS, UCS, image_set_type UCS], [UCS, RGB, im_Lab2disp @ im_UCS2Lab @ im_clip2f], [UCS, sRGB, im_Lab2sRGB @ im_UCS2Lab @ im_clip2f], [UCS, LABQ, im_Lab2LabQ @ im_UCS2Lab @ im_clip2f], [UCS, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_UCS2Lab @ im_clip2f], [RGB, B_W, im_sRGB2mono @ im_XYZ2sRGB @ im_disp2XYZ @ im_clip], [RGB, XYZ, im_disp2XYZ @ im_clip], [RGB, YXY, im_XYZ2Yxy @ im_disp2XYZ @ im_clip], [RGB, LAB, im_disp2Lab @ im_clip], [RGB, LCH, im_Lab2LCh @ im_disp2Lab @ im_clip], [RGB, UCS, im_Lab2UCS @ im_disp2Lab @ im_clip], [RGB, RGB, image_set_type RGB], [RGB, sRGB, im_XYZ2sRGB @ im_disp2XYZ @ im_clip], [RGB, RGB16, im_8216], [RGB, GREY16, im_8216 @ im_sRGB2mono], [RGB, LABQ, im_Lab2LabQ @ im_disp2Lab @ im_clip], [RGB, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_disp2Lab @ im_clip], [sRGB, B_W, im_sRGB2mono], [sRGB, XYZ, im_sRGB2XYZ @ im_clip], [sRGB, YXY, im_XYZ2Yxy @ im_sRGB2XYZ @ im_clip], [sRGB, LAB, im_sRGB2Lab @ im_clip], [sRGB, LCH, im_Lab2LCh @ im_sRGB2Lab @ im_clip], [sRGB, UCS, im_XYZ2UCS @ im_sRGB2XYZ @ im_clip], [sRGB, RGB, im_XYZ2disp @ im_sRGB2XYZ @ im_clip], [sRGB, sRGB, image_set_type sRGB], [sRGB, RGB16, im_8216], [sRGB, GREY16, im_8216 @ im_sRGB2mono], [sRGB, LABQ, im_Lab2LabQ @ im_sRGB2Lab @ im_clip], [sRGB, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_sRGB2Lab @ im_clip], [RGB16, B_W, im_1628 @ im_sRGB2mono], [RGB16, RGB, image_set_type RGB @ im_1628], [RGB16, sRGB, image_set_type sRGB @ im_1628], [RGB16, RGB16, image_set_type RGB16], [RGB16, GREY16, im_RGB162GREY16], [GREY16, B_W, image_set_type B_W @ im_1628], [GREY16, RGB, im_mono2sRGB @ im_1628], [GREY16, sRGB, im_mono2sRGB @ im_1628], [GREY16, RGB16, im_GREY162RGB16], [GREY16, GREY16, image_set_type GREY16], [LABQ, B_W, im_sRGB2mono @ im_Lab2sRGB @ im_LabQ2Lab], [LABQ, XYZ, im_Lab2XYZ @ im_LabQ2Lab], [LABQ, YXY, im_XYZ2Yxy @ im_Lab2XYZ @ im_LabQ2Lab], [LABQ, LAB, im_LabQ2Lab], [LABQ, LCH, im_Lab2LCh @ im_LabQ2Lab], [LABQ, UCS, im_Lab2UCS @ im_LabQ2Lab], [LABQ, RGB, im_LabQ2disp], [LABQ, sRGB, im_Lab2sRGB @ im_LabQ2Lab], [LABQ, LABQ, image_set_type LABQ], [LABQ, LABS, im_LabQ2LabS], [LABS, B_W, im_sRGB2mono @ im_Lab2sRGB @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, XYZ, im_Lab2XYZ @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, YXY, im_XYZ2Yxy @ im_Lab2XYZ @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, LAB, im_LabS2Lab], [LABS, LCH, im_Lab2LCh @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, UCS, im_Lab2UCS @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, RGB, im_LabQ2disp @ im_LabS2LabQ @ im_clip2s], [LABS, sRGB, im_XYZ2sRGB @ im_Lab2XYZ @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, LABQ, im_LabS2LabQ @ im_clip2s], [LABS, LABS, image_set_type LABS] ] { /* From Image_type ... repeat here for brevity. Use same ordering as * in Colour menu for consistency. */ B_W = 1; XYZ = 12; YXY = 23; LAB = 13; LCH = 19; UCS = 18; RGB = 17; sRGB = 22; RGB16 = 25; GREY16 = 26; LABQ = 16; LABS = 21; } /* Transform between two colour spaces. */ colour_transform from to in = colour_unary _colour_conversion_table?i?2 in, i >= 0 = error (_ "unable to convert " ++ Image_type.type_names.get_name from ++ _ " to " ++ Image_type.type_names.get_name to) { match x = x?0 == from && x?1 == to; i = index match _colour_conversion_table; } /* Transform to a colour space, assuming the type field in the input is * correct */ colour_transform_to to in = colour_transform (get_type in) to in; /* Given a list of things, try to make them all the same size. Don't change * the format. Don't touch non-image things. */ size_alike l = map enlarge l { max_width = foldr (test_prop has_width get_width) 0 l; max_height = foldr (test_prop has_height get_height) 0 l; test_prop has get x best = best, !has x = max_pair best (get x); enlarge x = embed 0 0 0 max_width max_height x, has_width x = x; } /* Given a list of things, look for 1 band objects and bump them to to n - * band objects, where n is the maximum number of bands. Don't change the * format. Don't touch non-image things. */ bands_alike l = map upband l { max_bands = foldr (test_prop has_bands get_bands) 0 l; test_prop has get x best = best, !has x = max_pair best (get x); upband x = bandjoin (replicate max_bands x), has_bands x && get_bands x == 1 = x; } /* String for path separator on this platform. */ path_separator = expand "$SEP"; /* Form a relative pathname. * path_relative ["home", "john"] == "home/john" * path_relative [] == "" */ path_relative l = foldl1 fn l { fn a b = a ++ path_separator ++ b; } /* Form an absolute pathname. * path_absolute ["home", "john"] == "/home/john" * path_absolute [] == "/" * If the first component looks like 'A:', don't add an initial separator. */ path_absolute l = path_relative l, len l?0 == 2 && is_letter l?0?0 && l?0?1 == ':' = path_separator ++ path_relative l; /* Parse a pathname. * path_parse "/home/john" == ["home", "john"] * path_parse "home/john" == ["home", "john"] */ path_parse str = split (equal path_separator?0) str; nip2-8.7.0/share/nip2/compat/7.12/_joe_utilities.def0000644000175000017500000004705113224651032016637 00000000000000/* ******Functions included in start/_NG_utilities.def:****** * * so_balance ref_meanmax im1 im2 mask blur gauss * * nonzero_mean im = no_out * * so_meanmax im = result * * so_calculate ref_meanmax im mask = result * * simple_frame frame im_w im_h ov cs ms bf option = result * * corner_frame frame im_w im_h ov cs ms bf = result * * build_frame r_tl r_tr r_bl r_br r_mt r_mb r_ml r_mr im_w im_h ov bf = result * * complex_frame frame im_w im_h ov cs es ms bf option= result * * complex_edge ra rb t bl d = rc * * frame_lr_min r_l r_r target bw = result * * frame_tb_min r_t r_b target bw = result * * frame_position_image im ref os colour= result * * merge_array bw arr = result * * merge_to_scale im target blend dir = result * * select_ellipse line width = mask * * select_tetragon p1 p2 p3 p4 = mask * * select_polygon pt_list = mask * * perspective_transform to from = trans'' * * sort_pts_clockwise l = l'' * */ /* Called from: * _NG_Extra.def Clone_area_item */ so_balance ref_meanmax im1 im2 mask gauss = result { //ref_meanmax = so_meanmax im1; so_values = so_calculate ref_meanmax im2 mask; im2_cor_a = clip2fmt im2.format im2'', has_member "format" im2 = im2'' {im2'' = im2 * (so_values?0) + (so_values?1);} // Option to convert replacement image to scaled gaussian noise im2_cor = im2_cor_a, gauss == false = clip2fmt im2_cor_a.format gauss_im {gauss_im = im_gaussnoise im2_cor_a.width im2_cor_a.height ref_meanmax?0 (deviation im2_cor_a);} result = im_blend (get_image mask) (get_image im2_cor) (get_image im1); }; //////////////////////////////////////////////////////////////////////////////// /* Calculates the mean of the non zero pixels. * * Called from: * _NG_utilities so_meanmax */ nonzero_mean im = no_out { zero_im = (im == 0); zero_mean = mean zero_im; no_mean = mean im; no_out = no_mean/(1 - (zero_mean/255)); }; //////////////////////////////////////////////////////////////////////////////// /* Calculates the max and nonzero mean of an image * * Called from: * _NG_utilities so_balance * _NG_utilities so_calculate * _NG_Extra.def Clone_area_item * _NG_Extra.def Balance_item.Balance_find_item */ so_meanmax im = result { mean_of_im = nonzero_mean im; adjusted_im = im - mean_of_im; max_of_im = max adjusted_im; result = [mean_of_im, max_of_im]; }; //////////////////////////////////////////////////////////////////////////////// /* Calculates the scale and offset required to match a reference mean and max * * Called from: * _NG_utilities so_balance * _NG_Extra.def Balance_item.Balance_find_item */ so_calculate ref_meanmax im mask = result { im' = if mask then im else 0; im_values = so_meanmax im'; mean_of_ref = ref_meanmax?0; mean_of_im = im_values?0; max_of_ref = ref_meanmax?1; max_of_im = im_values?1; scale = (max_of_ref)/(max_of_im); offset = mean_of_ref - (mean_of_im * scale); result = [ scale, offset ]; }; //////////////////////////////////////////////////////////////////////////////// /* Extends or shortens the central sections of a simple frame to fit round a given image. * * Called from: * _NG_Extra.def Frame_item.Simple_frame_item */ simple_frame frame im_w im_h ov cs ms bf option = result { cs' = (1 - cs); ms' = (0.5 - (ms/2)); ms'' = (1 - cs); //Regions r_tl = Region_relative frame 0 0 cs cs; r_tr = fliplr r_tl, option == true = Region_relative frame cs' 0 cs cs; r_bl = Region_relative frame 0 cs' cs cs; r_br = fliplr r_bl, option == true = Region_relative frame cs' cs' cs cs; r_mt = Region_relative frame ms' 0 ms cs; r_mb = Region_relative frame ms' ms'' ms cs; r_ml = Region_relative frame 0 ms' cs ms; r_mr = fliplr r_ml, option == true = Region_relative frame ms'' ms' cs ms; result = build_frame r_tl r_tr r_bl r_br r_mt r_mb r_ml r_mr im_w im_h ov bf; }; //////////////////////////////////////////////////////////////////////////////// /* Copies and extends a simple frame corner to produce a complete frame to fit round a given image. * * Called from: * _NG_Extra.def Frame_item.Frame_corner_item */ corner_frame frame im_w im_h ov cs ms bf = result { cs' = (1 - cs); ms' = (0.5 - (ms/2)); //Regions r_tl = Region_relative frame 0 0 cs cs; r_tr = fliplr r_tl; r_bl = fliptb r_tl; r_br = fliplr r_bl; r_mt = Region_relative frame ms' 0 ms cs; r_mb = fliptb r_mt; r_ml = Region_relative frame 0 ms' cs ms;; r_mr = fliplr r_ml; result = build_frame r_tl r_tr r_bl r_br r_mt r_mb r_ml r_mr im_w im_h ov bf; }; //////////////////////////////////////////////////////////////////////////////// /* Completes the frame building process for simple_frame and corner_frame. * * _NG_utilities simple_frame * _NG_utilities corner_frame */ build_frame r_tl r_tr r_bl r_br r_mt r_mb r_ml r_mr im_w im_h ov bf = result { //Find pixel thickness of frames section s_width = r_ml.width - mean (im_profile (map_unary fliplr (r_ml.value)?0) 1); s_height = r_mt.height - mean (im_profile (map_unary fliptb (r_mt.value)?0) 0); w_target = im_w + (2 * (s_width - ov)); h_target = im_h + (2 * (s_height - ov)); blend = bf * r_tl.width; cw_target = w_target - (2 * r_tl.width) + (2 * blend), w_target > (2 * r_tl.width) = w_target; ch_target = h_target - (2 * r_tl.height) + (2 * blend), h_target > (2 * r_tl.height) = h_target; //Use regions to produce sections top = merge_to_scale r_mt cw_target blend 0; bottom = merge_to_scale r_mb cw_target blend 0; left = merge_to_scale r_ml ch_target blend 1; right = merge_to_scale r_mr ch_target blend 1; middle = Image (image_new cw_target ch_target left.bands left.format left.coding left.type 0 0 0); //Build sections into full frame. row_1 = frame_lr_min r_tl r_tr w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[r_tl, top, r_tr]]; row_2 = frame_lr_min left right w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[left, middle, right]]; row_3 = frame_lr_min r_bl r_br w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[r_bl, bottom, r_br]]; result = frame_tb_min row_1 row_3 h_target blend, (h_target < (r_tl.height * 2)) = merge_array blend [[row_1], [row_2], [row_3]]; }; //////////////////////////////////////////////////////////////////////////////// /* Extends or shortens the central sections of a frame, preserving any central details on each * edge, to fit round a given image. * * Called from: * _NG_Extra.def Frame_item.Complex_frame_item */ complex_frame frame im_w im_h ov cs es ms bf option= result { cs' = (1 - cs); ms' = (0.5 - (ms/2)); es' = (0.25 - (es/2)); r_tl = Region_relative frame 0 0 cs cs; r_tr = fliplr r_tl, option == true = Region_relative frame cs' 0 cs cs; r_bl = Region_relative frame 0 cs' cs cs; r_br = fliplr r_bl, option == true = Region_relative frame cs' cs' cs cs; r_mt = Region_relative frame ms' 0 ms cs; r_mb = Region_relative frame ms' cs' ms cs; r_ml = Region_relative frame 0 ms' cs ms; r_mr = fliplr r_ml, option == true = Region_relative frame cs' ms' cs ms; r_et = Region_relative frame es' 0 es cs; r_eb = Region_relative frame es' cs' es cs; r_el = Region_relative frame 0 es' cs es; r_er = fliplr r_el, option == true = Region_relative frame cs' es' cs es; //Find pixel thickness of frames section s_width = r_el.width - mean (im_profile (map_unary fliplr (r_el.value)?0) 1); s_height = r_et.height - mean (im_profile (map_unary fliptb (r_et.value)?0) 0); w_target = im_w + (2 * (s_width - ov)); h_target = im_h + (2 * (s_height - ov)); min_size = foldr1 min_pair [r_tl.width, r_tl.height, r_mt.width, r_mt.height, r_et.width, r_et.height]; blend = bf * min_size; cw_target = w_target - (2 * r_tl.width) + (2 * blend); ch_target = h_target - (2 * r_tl.height) + (2 * blend); top = complex_edge r_mt r_et cw_target blend 0; bottom = complex_edge r_mb r_eb cw_target blend 0; left = complex_edge r_ml r_el ch_target blend 1; right = complex_edge r_mr r_er ch_target blend 1; middle = Image (image_new top.width left.height left.bands left.format left.coding left.type 0 0 0); //Build regions into full frame. row_1 = frame_lr_min r_tl r_tr w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[r_tl, top, r_tr]]; row_2 = frame_lr_min left right w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[left, middle, right]]; row_3 = frame_lr_min r_bl r_br w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[r_bl, bottom, r_br]]; result = frame_tb_min row_1 row_3 h_target blend, (h_target < (r_tl.height * 2)) = merge_array blend [[row_1], [row_2], [row_3]]; }; //////////////////////////////////////////////////////////////////////////////// /* Function called by complex frame, used to produce section * * Called from: * _NG_utilities.def complex_frame */ complex_edge ra rb t bl d = rc { e1 = ceil (ra.width - t)/2, d == 0 = 0; e2 = 0, d == 0 = ceil (ra.height - t)/2; e3 = t, d == 0 = ra.width; e4 = ra.height, d == 0 = t; check = ra.width, d == 0; = ra.height; rai = get_image ra; t2 = (t - ra.width + (2 * bl))/2, d == 0 = (t - ra.height + (2 * bl))/2; rc = ra , t <= 0 = Image (im_extract_area rai e1 e2 e3 e4), t <= check = merge_array bl [[rb',ra,rb']], d == 0 = merge_array bl [[rb'],[ra],[rb']] {rb' = merge_to_scale rb t2 bl d;} } ////////////////////////////////////////////////////////////////////////////// /* Blends two images left/right to produce an image a specific width. * * _NG_utilities build_frame * _NG_utilities complex_frame */ frame_lr_min r_l r_r target bw = result { //Calculating the new widh required for each image. no = (target/2 + bw); n_w = no, (r_l.width > no) = r_l.width; //Removing excess from what will be the middle of the final image. n_l = im_extract_area r_l.value 0 0 n_w r_l.height; n_r = im_extract_area r_r.value (r_r.width - n_w) 0 n_w r_l.height; //Merge the two image together with a bw*2 pixel overlap. result = Image (im_lrmerge n_l n_r ((bw*2) - n_w) 0 bw); }; ////////////////////////////////////////////////////////////////////////////// /* Blends two images top/bottom to produce an image a specific width. * * _NG_utilities build_frame * _NG_utilities complex_frame */ frame_tb_min r_t r_b target bw = result { //Calculating the new height required for each image. no = (target/2 + bw); n_h = no, (r_t.height > no) = r_t.height; //Removing excess from what will be the middle of the final image. n_t = im_extract_area r_t.value 0 0 r_t.width n_h; n_b = im_extract_area r_b.value 0 (r_b.height - n_h) r_b.width n_h; //Merge the two image together with a 50 pixel overlap. result = Image (im_tbmerge n_t n_b 0 ((bw*2) -n_h) bw); }; ////////////////////////////////////////////////////////////////////////////// /* Resixe canvas of an image to accomodate a frame and possible mount * * Called from: * _NG_Extra.def Frame_item.Frame_corner_item * _NG_Extra.def Frame_item.Simple_frame_item * _NG_Extra.def Frame_item.Complex_frame_item */ frame_position_image im ref os colour= result { background = image_new ref.width ref.height im.bands im.format im.coding im.type colour 0 0; result = insert_noexpand xp yp im background { xp = (ref.width - im.width)/2; yp = (ref.height - im.height - os)/2; } }; ////////////////////////////////////////////////////////////////////////////// /* Merges an array of images together according to blend width bw * * Called from: * _NG_Utilites.def build_frame * _NG_Utilites.def complex_frame * _NG_Utilites.def complex_edge */ merge_array bw arr = result { merge_lr bw im1 im2 = im3 { bw' = get_header "Xsize" (get_image im1); bw'' = -(bw' - bw); im3 = im_lrmerge (get_image im1) (get_image im2) bw'' 0 bw; } merge_tb bw im1 im2 = im3 { bw' = get_header "Ysize" (get_image im1); bw'' = -(bw' - bw); im3 = im_tbmerge (get_image im1) (get_image im2) 0 bw'' bw; } im_out = (image_set_origin 0 0 @ foldl1 (merge_tb bw) @ map (foldl1 (merge_lr bw))) arr; result = Image im_out; } ////////////////////////////////////////////////////////////////////////////// /* Repeatably top/bottom add clones of im, with a defined overlap, until final height > target * * Called from: * _NG_Utilites.def build_frame * _NG_Utilites.def complex_edge */ merge_to_scale im target blend dir = result { blend' = floor blend; //allow fir lr or tb process var_a = im.width, dir == 0 = im.height; var_w = im.width, dir == 1 = target, target > blend' = blend'; var_h = im.height, dir == 0 = target, target > blend' = blend'; //total numner of copies of im requires, taking overlap into account. no_loops = ceil ((log ((target - blend')/(var_a - blend')))/(log 2)); process im no = result { pr_a = get_header "Xsize" (get_image im), dir == 0 = get_header "Ysize" (get_image im); pr_b = -(pr_a - blend' + 1); im' = im_lrmerge (get_image im) (get_image im) pr_b 0 blend', dir == 0 = im_tbmerge (get_image im) (get_image im) 0 pr_b blend'; no' = no - 1; result = im', no' < 1 = process im' no'; } im_tmp = im.value, var_a > target = process im no_loops; result = Image (im_extract_area (get_image im_tmp) 0 0 var_w var_h); } ////////////////////////////////////////////////////////////////////////////// /* Selects an elispe based on a line and a width * * Called from: * _NG_Extra.def Select_item.Elipse */ select_ellipse line width = mask { im = line.image; //Make a 2 band image whose value equals its coordinates. im_coor = Image (make_xy im.width im.height); //Adjust the values to center tham on (line.left, line.top) im_cent = im_coor - Vector [line.left,line.top]; w = line.width; h = line.height; angle = 270, w == 0 && h < 0 = 90, w == 0 && h >= 0 = 360 + atan (h/w), w > 0 && h < 0 = atan (h/w), w > 0 && h >= 0 = 180 + atan (h/w); a = ( (h ** 2) + (w ** 2) )**0.5; b = a * width; x' = ( (cos angle) * im_cent?0) + ( (sin angle) * im_cent?1); y' = ( (cos angle) * im_cent?1) - ( (sin angle) * im_cent?0); mask = ( (b**2) * (x'**2) ) + ( (a**2) * (y'**2) ) <= (a * b)**2; } ////////////////////////////////////////////////////////////////////////////// /* Selects a tetragon based on four points. * * Called from: * _NG_Extra.def Select_item.Tetragon * _NG_Extra.def Perspective_item */ select_tetragon p1 p2 p3 p4 = mask { //Put points in clockwise order starting at the top left. pt_list = sort_pts_clockwise [p1, p2, p3, p4]; pair_list = [ [ pt_list?0, pt_list?1 ], [ pt_list?1, pt_list?2 ], [ pt_list?2, pt_list?3 ], [ pt_list?3, pt_list?0 ] ]; //Make xy image the same size as p1.image; im_xy = Image (make_xy p1.image.width p1.image.height); white = Image (image_new p1.image.width p1.image.height 1 0 Image_coding.NOCODING 1 255 0 0); mask = foldl process white pair_list; /* Treat each pair of point as a vector going from p1 to p2, * then select all to right of line. This is done for each pair, * the results are all combined to select the area defined by * the four points. */ process im_in pair = im_out { x = (pair?0).left; y = (pair?0).top; x'= (pair?1).left; y'= (pair?1).top; w = x' - x; h = y' - y; m = 0, x == x' = (y-y')/(x-x'); c = 0, x == x' = ((y*x') - (y'*x))/(x' - x); mask= im_xy?1 - (im_xy?0 * m) >= c, w > 0 = im_xy?1 - (im_xy?0 * m) <= c, w < 0 = im_xy?0 <= x, w == 0 && h > 0 = im_xy?0 >= x; im_out = im_in & mask; } } ////////////////////////////////////////////////////////////////////////////// /* Selects a tetragon based on four points. * * Called from: * _NG_Extra.def Select_item.Polygon */ select_polygon pt_list = mask { group_check = is_Group pt_list; pt_l = pt_list.value, group_check = pt_list; im = (pt_l?0).image; im_xy = Image (make_xy im.width im.height); black = Image (image_new im_xy.width im_xy.height 1 0 Image_coding.NOCODING 1 0 0 0); x = im_xy?0; y = im_xy?1; pt_l' = grp_trip pt_l; mask = foldl process black pt_l'; /*Takes a group adds the first two the end and then creates a lists of *lists [[a, b, c], [b, c, d] .... [x, a, b]] */ grp_trip l = l'' { px = take 2 l; l' = join l px; start = [(take 3 l')]; rest = drop 3 l'; process a b = c { x = (last a)?1; x'= (last a)?2; x'' = [[x, x', b]]; c = join a x''; } l'' = foldl process start rest; }; process im_in triplet = im_out { p1 = triplet?0; p2 = triplet?1; p3 = triplet?2; //check for change in x direction between p1-p2 and p2 -p3 dir_1 = sign (p2.left - p1.left); dir_2 = sign (p3.left - p2.left); dir = dir_1 + dir_2; //define min x limit. min_x = p1.left, p1.left < p2.left = p2.left + 1, dir != 0 = p2.left; //define max x limit. max_x = p1.left, p1.left > p2.left = p2.left - 1, dir != 0 = p2.left; //equation of line defined by p1 and p2 m = line_m p1 p2; c = line_c p1 p2; //Every thing below the line im_test = ((y >= (m * x) + c) & (x >= min_x) & (x <= max_x)); im_out = im_in ^ im_test; } line_c p1 p2 = c {m = line_m p1 p2; c = p1.top - (m * p1.left);}; line_m p1 p2 = (p2.top - p1.top)/(p2.left - p1.left), p2.left != p1.left = 0; } ////////////////////////////////////////////////////////////////////////////// /* Selects a tetragon based on four points. * * Called from: * _NG_Extra.def Perspective_match_item * _NG_Extra.def Perspective_item */ perspective_transform to from = trans'' { /* * Tramsformation matrix is calculated on the bases of the following functions: * x' = c0x + c1y + c2xy + c3 * y' = c4x + c5y + c6xy + c7 * * The functions used in vips im_transform works based on the functions: * x = x' + b0 + b2x' + b4y' + b6x'y' * y = y' + b1 + b3x' + b5y' + b7x'y' * * and is applied in the form of the matrix: * * [[b0, b1], * [b2, b3], * [b4, b5], * [b6, b7]] * * Therefore our required calculated matrix will be * * [[ c3 , c7], * [(c0 - 1) , c4], * [ c1 , (c5 - 1)], * [ c2 , c6]] * * to = [x1, y1, x2, y2, x3, y3, x4, y4] * from = [x1', y1', x2', y2', x3', y3', x4', y4'] * trans = [[c0], [c1], [c2], [c3], [c4], [c5], [c6], [c7]] * */ to' = Matrix [[to?0, to?1, ((to?0)*(to?1)), 1, 0, 0, 0, 0], [0, 0, 0, 0, to?0, to?1, ((to?0)*(to?1)), 1], [to?2, to?3, ((to?2)*(to?3)), 1, 0, 0, 0, 0], [0, 0, 0, 0, to?2, to?3, ((to?2)*(to?3)), 1], [to?4, to?5, ((to?4)*(to?5)), 1, 0, 0, 0, 0], [0, 0, 0, 0, to?4, to?5, ((to?4)*(to?5)), 1], [to?6, to?7, ((to?6)*(to?7)), 1, 0, 0, 0, 0], [0, 0, 0, 0, to?6, to?7, ((to?6)*(to?7)), 1]]; from' = Matrix (transpose [from]); to'' = to' ** (-1); trans = to'' * from'; trans' = trans.value; trans''= Matrix [[(trans'?3)?0, (trans'?7)?0 ], [((trans'?0)?0 - 1), (trans'?4)?0 ], [(trans'?1)?0, ((trans'?5)?0 - 1)], [(trans'?2)?0, (trans'?6)?0 ]]; } ////////////////////////////////////////////////////////////////////////////// /* Sort a list of points into clockwise order. * * Called from: * _NG_utilities.def select_tetragon * _NG_Extra.def Perspective_match_item * _NG_Extra.def Perspective_item */ sort_pts_clockwise l = l'' { // sort functions: f_top a b = a.top < b.top; f_left a b = a.left < b.left; f_right a b = a.left > b.left; l' = sortc f_top l; l'_a = take 2 l'; l'_b = drop 2 l'; l''_a = sortc f_left l'_a; l''_b = sortc f_right l'_b; l'' = join l''_a l''_b; } nip2-8.7.0/share/nip2/compat/7.12/Image.def0000644000175000017500000012232313224651032014646 00000000000000Image_new_item = class Menupullright "_New" "make new things" { Image_black_item = class Menuaction "_Image" "make a new image" { format_names = [ "8-bit unsigned int - UCHAR", // 0 "8-bit signed int - CHAR", // 1 "16-bit unsigned int - USHORT", // 2 "16-bit signed int - SHORT", // 3 "32-bit unsigned int - UINT", // 4 "32-bit signed int - INT", // 5 "32-bit float - FLOAT", // 6 "64-bit complex - COMPLEX", // 7 "64-bit float - DOUBLE", // 8 "128-bit complex - DPCOMPLEX" // 9 ]; action = class Image _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; nbands = Expression "Image bands" 1; format_option = Option "Image format" format_names 0; type_option = Option_enum Image_type.type_names "Image type" "B_W"; pixel = Expression "Pixel value" 0; _result = image_new (to_real nwidth) (to_real nheight) (to_real nbands) (to_real format_option) Image_coding.NOCODING type_option.value_thing pixel.expr 0 0; } } Image_new_from_image_item = class Menuaction "_From Image" "make a new image based on image x" { action x = class Image _result { _vislevel = 3; pixel = Expression "Pixel value" 0; _result = image_new x.width x.height x.bands x.format x.coding x.type pixel.expr x.xoffset x.yoffset; } } Image_region_item = class Menupullright "_Region on Image" "make a new region on an image" { Region_item = class Menuaction "_Region" "make a region on an image" { action image = scope.Region_relative image 0.25 0.25 0.5 0.5; } Mark_item = class Menuaction "_Point" "make a point on an image" { action image = scope.Mark_relative image 0.5 0.5; } Arrow_item = class Menuaction "_Arrow" "make an arrow on an image" { action image = scope.Arrow_relative image 0.25 0.25 0.5 0.5; } HGuide_item = class Menuaction "_Horizontal Guide" "make a horizontal guide on an image" { action image = scope.HGuide image 0.5; } VGuide_item = class Menuaction "_Vertical Guide" "make a vertical guide on an image" { action image = scope.VGuide image 0.5; } sep1 = Menuseparator; Move_item = class Menuaction "From Region" "new region using existing region as a guide" { action a b = map_binary process a b { process a b = x.Region target x.left x.top x.width x.height, is_Region x = x.Arrow target x.left x.top x.width x.height, is_Arrow x = error "bad arguments to region-from-region" { // prefer image then region compare a b = false, !is_Image a && is_Image b = false, is_Region a && !is_Region b = true; args' = sortc compare [a, b]; target = args'?0; x = args'?1; } } } } } Image_convert_to_image_item = class Menuaction "Con_vert to Image" "convert anything to an image" { action x = to_image x; } #separator Image_header_item = class Menupullright "_Header" "do stuff to the image header" { Image_get_item = class Menupullright "_Get" "get header fields" { // the header fields we can get fields = class { type = 0; width = 1; height = 2; format = 3; bands = 4; xres = 5; yres = 6; xoffset = 7; yoffset = 8; coding = 9; field_names = Enum [ ["width", width], ["height", height], ["bands", bands], ["format", format], ["type", type], ["xres", xres], ["yres", yres], ["xoffset", xoffset], ["yoffset", yoffset], ["coding", coding] ]; field_option name = Option_enum field_names (_ "Field") name; field_funcs = Table [ [type, get_type], [width, get_width], [height, get_height], [format, get_format], [bands, get_bands], [xres, get_xres], [yres, get_yres], [xoffset, get_xoffset], [yoffset, get_yoffset], [coding, get_coding] ]; } get_field field_name x = class _result { _vislevel = 3; field = fields.field_option field_name; _result = map_unary (Real @ fields.field_funcs.lookup 0 1 field.value_thing) x; } Width_item = class Menuaction "_Width" "get width" { action x = get_field "width" x; } Height_item = class Menuaction "_Height" "get height" { action x = get_field "height" x; } Bands_item = class Menuaction "_Bands" "get bands" { action x = get_field "bands" x; } Format_item = class Menuaction "_Format" "get format" { action x = get_field "format" x; } Type_item = class Menuaction "_Type" "get type" { action x = get_field "type" x; } Xres_item = class Menuaction "_Xres" "get X resolution" { action x = get_field "xres" x; } Yres_item = class Menuaction "_Yres" "get Y resolution" { action x = get_field "yres" x; } Xoffset_item = class Menuaction "X_offset" "get X offset" { action x = get_field "xoffset" x; } Yoffset_item = class Menuaction "Yo_ffset" "get Y offset" { action x = get_field "yoffset" x; } Coding_item = class Menuaction "_Coding" "get coding" { action x = get_field "coding" x; } } sep1 = Menuseparator; Image_set_meta_item = class Menuaction "_Set" "set image metadata" { action x = class _result { _vislevel = 3; fname = String "Field" "field-name"; val = Expression "Value" 42; _result = map_unary process x { process image = set_header fname.value val.expr image; } } } Image_edit_header_item = class Menuaction "_Edit" "change advisory header fields of image" { type_names = Image_type.type_names; all_names = sort (map (extract 0) type_names.value); get_prop has get def x = get x, has x = def; action x = class _result { _vislevel = 3; nxres = Expression "Xres" (get_prop has_xres get_xres 1 x); nyres = Expression "Yres" (get_prop has_yres get_yres 1 x); nxoff = Expression "Xoffset" (get_prop has_xoffset get_xoffset 0 x); nyoff = Expression "Yoffset" (get_prop has_yoffset get_yoffset 0 x); type_option = Option_enum Image_type.type_names "Image type" (Image_type.type_names.get_name type) { type = x.type, is_Image x = Image_type.MULTIBAND; } _result = map_unary process x { process image = Image (im_copy_set image.value type_option.value_thing (to_real nxres) (to_real nyres) (to_real nxoff) (to_real nyoff)); } } } } Image_number_format_item = class Menupullright "Set _Format" "convert numeric format" { U8_item = class Menuaction "_8 bit unsigned" "convert to unsigned 8 bit [0, 255]" { action x = map_unary cast_unsigned_char x; } U16_item = class Menuaction "1_6 bit unsigned" "convert to unsigned 16 bit [0, 65535]" { action x = map_unary cast_unsigned_short x; } U32_item = class Menuaction "_32 bit unsigned" "convert to unsigned 32 bit [0, 4294967295]" { action x = map_unary cast_unsigned_int x; } sep1 = Menuseparator; S8_item = class Menuaction "8 _bit signed" "convert to signed 8 bit [-128, 127]" { action x = map_unary cast_signed_char x; } S16_item = class Menuaction "16 b_it signed" "convert to signed 16 bit [-32768, 32767]" { action x = map_unary cast_signed_short x; } S32_item = class Menuaction "32 bi_t signed" "convert to signed 32 bit [-2147483648, 2147483647]" { action x = map_unary cast_signed_int x; } sep2 = Menuseparator; Float_item = class Menuaction "_Single precision float" "convert to IEEE 32 bit float" { action x = map_unary cast_float x; } Double_item = class Menuaction "_Double precision float" "convert to IEEE 64 bit float" { action x = map_unary cast_double x; } sep3 = Menuseparator; Scmplxitem = class Menuaction "Single _precision complex" "convert to 2 x IEEE 32 bit float" { action x = map_unary cast_complex x; } Dcmplx_item = class Menuaction "Double p_recision complex" "convert to 2 x IEEE 64 bit float" { action x = map_unary cast_double_complex x; } } Image_levels_item = class Menupullright "_Levels" "change image levels" { Scale_item = class Menuaction "_Scale to 0 - 255" "linear transform to fit 0 - 255 range" { action x = map_unary scale x; } Linear_item = class Menuaction "_Linear" "linear transform of image levels" { action x = class _result { _vislevel = 3; scale = Scale "Scale" 0.001 3 1; offset = Scale "Offset" (-128) 128 0; _result = map_unary adj x { adj x // only force back to input type if this is a thing // with a type ... so we work for Colour / Matrix etc. = clip2fmt x.format x', has_member "format" x = x' { x' = x * scale + offset; } } } } Gamma_item = class Menuaction "_Power" "power transform of image levels (gamma)" { action x = class _result { _vislevel = 3; gamma = Scale "Gamma" 0.001 4 1; image_maximum_hint = "You may need to change image_maximum if " ++ "this is not an 8 bit image"; im_mx = Expression "Image maximum" mx { mx = Image_format.maxval x.format, has_format x = 255; } _result = map_unary gam x { gam x = clip2fmt (get_format x) x', has_format x = x' { x' = (im_mx.expr / im_mx.expr ** gamma) * x ** gamma; } } } } Tone_item = class Menuaction "_Tone Curve" "adjust tone curve" { action x = class _result { _vislevel = 3; b = Scale "Black point" 0 100 0; w = Scale "White point" 0 100 100; sp = Scale "Shadow point" 0.1 0.3 0.2; mp = Scale "Mid-tone point" 0.4 0.6 0.5; hp = Scale "Highlight point" 0.7 0.9 0.8; sa = Scale "Shadow adjust" (-15) 15 0; ma = Scale "Mid-tone adjust" (-30) 30 0; ha = Scale "Highlight adjust" (-15) 15 0; curve = tone_build x.format b w sp mp hp sa ma ha; _result = map_unary (hist_map curve) x; } } } Image_transform_item = class Menupullright "_Transform" "transform images" { Rotate_item = class Menupullright "Ro_tate" "rotate image" { Fixed_item = class Menupullright "_Fixed" "clockwise rotation by fixed angles" { rotate_widget default x = class _result { _vislevel = 3; angle = Option "Rotate by" [ "Don't rotate", "90 degrees clockwise", "180 degrees", "90 degrees anticlockwise" ] default; _result = map_unary process x { process in = [ in, rot90 in, rot180 in, rot270 in ] ? angle; } } Rot90_item = class Menuaction "_90 Degrees" "clockwise rotation by 90 degrees" { action x = rotate_widget 1 x; } Rot180_item = class Menuaction "_180 Degrees" "clockwise rotation by 180 degrees" { action x = rotate_widget 2 x; } Rot270_item = class Menuaction "_270 Degrees" "clockwise rotation by 270 degrees" { action x = rotate_widget 3 x; } } Free_item = class Menuaction "_Free" "clockwise rotation by any angle" { action x = class _result { _vislevel = 3; angle = Scale "Angle" (-180) 180 0; _result = map_unary process x { process image = rotate angle image; } } } Straighten_item = class Menuaction "_Straighten" ("smallest rotation that makes an arrow either horizontal " ++ "or vertical") { action x = map_unary straighten x { straighten arrow = rotate angle'' arrow.image { x = arrow.width; y = arrow.height; angle = im (polar (x, y)); angle' = angle - 360, angle > 315 = angle - 180, angle > 135 = angle; angle'' = -angle', angle' >= (-45) && angle' < 45 = 90 - angle'; } } } } Flip_item = class Menupullright "_Flip" "mirror left/right or up/down" { Left_right_item = class Menuaction "_Left Right" "mirror object left/right" { action x = map_unary fliplr x; } Top_bottom_item = class Menuaction "_Top Bottom" "mirror object top/bottom" { action x = map_unary fliptb x; } } Resize_item = class Menupullright "_Resize" "change image size" { _interp = Option_enum Interpolate.names "Interpolation" "Bilinear"; Scale_item = class Menuaction "_Scale" "scale image size by a factor" { action x = class _result { _vislevel = 3; xfactor = Expression "Horizontal scale factor" 1; yfactor = Expression "Vertical scale factor" 1; interp = _interp; _result = map_unary process x { process image = resize xfactor yfactor interp.value_thing image; } } } Size_item = class Menuaction "_Size To" "resize to a fixed size" { action x = class _result { _vislevel = 3; which = Option "Resize axis" [ "Shortest", "Longest", "Horizontal", "Vertical" ] 0; size = Expression "Resize to (pixels)" 128; interp = _interp; _result = map_unary process x { process image = resize fac fac interp.value_thing image { xfac = to_real size / image.width; yfac = to_real size / image.height; max_factor = max_pair xfac yfac; min_factor = min_pair xfac yfac; fac = [max_factor, min_factor, xfac, yfac]?which; } } } } Resize_canvas_item = class Menuaction "_Canvas" "change size of surrounding image" { action x = class _result { _vislevel = 3; // try to guess a sensible size for the new image _guess_size = x.rect, is_Image x = Rect 0 0 100 100; nwidth = Expression "New width (pixels)" _guess_size.width; nheight = Expression "New height (pixels)" _guess_size.height; bgcolour = Expression "Background colour" 0; position = Option "Position" [ "North-west", "North", "North-east", "West", "Centre", "East", "South-west", "South", "South-east", "Specify in pixels" ] 4; left = Expression "Pixels from left" 0; top = Expression "Pixels from top" 0; _result = map_unary process x { process image = insert_noexpand xp yp image background { width = image.width; height = image.height; coding = image.coding; bands = 3, coding == Image_coding.LABPACK = image.bands; format = Image_format.FLOAT, coding == Image_coding.LABPACK = image.format; type = image.type; // placement vectors ... left, centre, right xposv = [0, to_real nwidth / 2 - width / 2, to_real nwidth - width]; yposv = [0, to_real nheight / 2 - height / 2, to_real nheight - height]; xp = left, position == 9 = xposv?((int) (position % 3)); yp = top, position == 9 = yposv?((int) (position / 3)); background = image_new nwidth nheight bands format coding type bgcolour.expr 0 0; } } } } } Image_perspective_item = Perspective_item; Image_rubber_item = class Menupullright "Ru_bber Sheet" "automatically warp images to superposition" { rubber_interp = Option "Interpolation" (map (extract 0) Interpolate.names.value) Interpolate.BILINEAR; rubber_order = Option "Order" ["0", "1", "2", "3"] 1; rubber_wrap = Toggle "Wrap image edges" false; // a transform ... a matrix, plus the size of the image the // matrix was made for Transform matrix image_width image_height = class matrix { // scale a transform ... if it worked for a m by n image, make // it work for a (m * xfac) by (y * yfac) image rescale xfac yfac = Transform (Matrix (map2 (map2 multiply) matrix.value facs)) (image_width * xfac) (image_height * yfac) { facs = [ [xfac, yfac], [1, 1], [1, 1], [1 / xfac, 1 / yfac], [1 / xfac, 1 / yfac], [1 / xfac, 1 / yfac] ]; } } // yuk!!!! fix is_instanceof to not need absolute names is_Transform = is_instanceof "Image_transform_item.Image_rubber_item.Transform"; Find_item = class Menuaction "_Find" ("find a transform which will map sample image onto " ++ "reference") { action reference sample = class _transform { _vislevel = 3; // controls order = rubber_order; interp = rubber_interp; wrap = rubber_wrap; max_err = Expression "Maximum error" 0.3; max_iter = Expression "Maximum iterations" 10; // transform _result = transform_search max_err max_iter order interp wrap sample reference; transformed_image = Image _result?0; _transform = Transform _result?1 reference.width reference.height; final_error = _result?2; } } Apply_item = class Menuaction "_Apply" "apply a transform to an image" { action a b = class _result { _vislevel = 3; // controls interp = rubber_interp; wrap = rubber_wrap; _result = map_binary trans a b { trans a b = transform interp wrap t' i { // get the transform arg first args = sortc (const is_Transform) [a, b]; i = args?0; t = args?1; t' = t.rescale (i.width / t.image_width) (i.height / t.image_height); } } } } } sep1 = Menuseparator; Match_item = class Menuaction "_Linear Match" "rotate and scale one image to match another" { action x y = class _result { _vislevel = 3; // try to find an image ... for a group, get the first item find_image x = x, is_Image x = find_image x?0, is_list x = find_image x.value, is_class x && has_value x = error "unable to find image"; _a = find_image x; _b = find_image y; ap1 = Mark_relative _a 0.5 0.25; bp1 = Mark_relative _b 0.5 0.25; ap2 = Mark_relative _a 0.5 0.75; bp2 = Mark_relative _b 0.5 0.75; refine = Toggle "Refine selected tie-points" false; lock = Toggle "No resize" false; _result = map_binary process x y { process a b = Image b''' { _prefs = Workspaces.Preferences; window = _prefs.MOSAIC_WINDOW_SIZE; object = _prefs.MOSAIC_OBJECT_SIZE; a' = a.value; b' = b.value; b'' = clip2fmt a.format b'; // return p2 ... if lock is set, return a p2 a standard // distance along the vector joining p1 and p2 norm p1 p2 = Rect left' top' 0 0, lock = p2 { v = (p2.left - p1.left, p2.top - p1.top); // 100000 to give precision since we pass points as // ints to match n = 100000 * sign v; left' = p1.left + re n; top' = p1.top + im n; } ap2'' = norm ap1 ap2; bp2'' = norm bp1 bp2; b''' = im_match_linear_search a' b'' ap1.left ap1.top bp1.left bp1.top ap2''.left ap2''.top bp2''.left bp2''.top object window, // we can't search if lock is on refine && !lock = im_match_linear a' b'' ap1.left ap1.top bp1.left bp1.top ap2''.left ap2''.top bp2''.left bp2''.top; } } } } Image_perspective_match_item = Perspective_match_item; } Image_band_item = class Menupullright "_Band" "manipulate image bands" { // like extract_bands, but return [] for zero band image // makes compose a bit simpler exb b n x = [], to_real n == 0 = extract_bands b n x; Extract_item = class Menuaction "_Extract" "extract bands from image" { action x = class _result { _vislevel = 3; first = Expression "Extract from band" 0; number = Expression "Extract this many bands" 1; _result = map_unary (exb first number) x; } } Insert_item = class Menuaction "_Insert" "insert bands into image" { action x y = class _result { _vislevel = 3; first = Expression "Insert at position" 0; _result = map_binary process x y { process im1 im2 = exb 0 f im1 ++ im2 ++ exb f (b - f) im1 { f = to_real first; b = im1.bands; } } } } Delete_item = class Menuaction "_Delete" "delete bands from image" { action x = class _result { _vislevel = 3; first = Expression "Delete from band" 0; number = Expression "Delete this many bands" 1; _result = map_unary process x { process im = exb 0 f im ++ exb (f + n) (b - (f + n)) im { f = to_real first; n = to_real number; b = im.bands; } } } } sep1 = Menuseparator; To_dimension_item = class Menuaction "To D_imension" "convert bands to width or height" { action x = class _result { _vislevel = 3; orientation = Option "Orientation" [ "Horizontal", "Vertical" ] 0; _result = map_unary process x { process im = foldr1 [join_lr, join_tb]?orientation (bandsplit im); } } } To_bands_item = class Menuaction "To B_ands" "turn width or height to bands" { action x = class _result { _vislevel = 3; orientation = Option "Orientation" [ "Horizontal", "Vertical" ] 0; _result = map_unary process x { process im = bandjoin (map extract_column [0 .. im.width - 1]), orientation == 0 = bandjoin (map extract_row [0 .. im.height - 1]) { extract_column n = extract_area n 0 1 im.height im; extract_row n = extract_area 0 n im.width 1 im; } } } } } Image_crop_item = class Menuaction "_Crop" "extract a rectangular area from an image" { action x = class _result { _vislevel = 3; // try to find the image geometry ... don't bother trying to look // inside groups though _geo = x.rect, is_Image x = Rect 0 0 100 100; l = Expression "Crop left" ((int) (_geo.left + _geo.width / 4)); t = Expression "Crop top" ((int) (_geo.top + _geo.height / 4)); w = Expression "Crop width" (max_pair 1 ((int) (_geo.width / 2))); h = Expression "Crop height" (max_pair 1 ((int) (_geo.height / 2))); _result = map_nary (list_5ary extract) [x, l.expr, t.expr, w.expr, h.expr] { extract im l t w h = extract_area left' top' width' height' im { width' = min_pair (to_real w) im.width; height' = min_pair (to_real h) im.height; left' = range 0 (to_real l) (im.width - width'); top' = range 0 (to_real t) (im.height - height'); } } } } Image_insert_item = class Menuaction "_Insert" "insert a small image into a large image" { action a b = insert_position, is_Group a || is_Group b = insert_area { insert_area = class _result { _check_args = [ [a, "a", check_Image], [b, "b", check_Image] ]; _check_all = [ [a.coding == b.coding && a.bands == b.bands, "a.coding == b.coding && a.bands == b.bands"] ]; _vislevel = 3; // sort to get smallest first _pred x y = x.width * x.height < y.width * y.height; _sorted = sortc _pred [a, b]; _a' = _sorted?0; _b' = _sorted?1; place = Area _b' left top width height { // be careful in case b is smaller than a left = max_pair 0 ((_b'.width - _a'.width) / 2); top = max_pair 0 ((_b'.height - _a'.height) / 2); width = min_pair _a'.width _b'.width; height = min_pair _a'.height _b'.height; } _result = insert_noexpand place.left place.top (clip2fmt _b'.format a'') _b' { a'' = extract_area 0 0 place.width place.height _a'; } } insert_position = class _result { _vislevel = 3; position = Option "Position" [ "North-west", "North", "North-east", "West", "Centre", "East", "South-west", "South", "South-east", "Specify in pixels" ] 4; left = Expression "Pixels from left" 0; top = Expression "Pixels from top" 0; _result = map_binary insert a b { insert a b = insert_noexpand left top (clip2fmt b.format a) b, position == 9 = insert_noexpand xp yp (clip2fmt b.format a) b { xr = b.width - a.width; yr = b.height - a.height; xp = [0, xr / 2, xr]?((int) (position % 3)); yp = [0, yr / 2, yr]?((int) (position / 3)); } } } } } Image_select_item = Select_item; Image_join_item = class Menupullright "_Join" "join two or more images together" { Bandwise_item = class Menuaction "_Bandwise" "join two images bandwise" { action a b = join a b; } sep1 = Menuseparator; join_lr shim bg align a b = im2 { w = a.width + b.width + shim; h = max_pair a.height b.height; back = image_new w h a.bands a.format a.coding a.type bg 0 0; ya = [0, max_pair 0 ((b.height - a.height)/2), max_pair 0 (b.height - a.height)]; yb = [0, max_pair 0 ((a.height - b.height)/2), max_pair 0 (a.height - b.height)]; im1 = insert_noexpand 0 ya?align a back; im2 = insert_noexpand (a.width + shim) yb?align b im1; } join_tb shim bg align a b = im2 { w = max_pair a.width b.width; h = a.height + b.height + shim; back = image_new w h a.bands a.format a.coding a.type bg 0 0; xa = [0, max_pair 0 ((b.width - a.width)/2), max_pair 0 (b.width - a.width)]; xb = [0, max_pair 0 ((a.width - b.width)/2), max_pair 0 (a.width - b.width)]; im1 = insert_noexpand xa?align 0 a back; im2 = insert_noexpand xb?align (a.height + shim) b im1; } halign_names = ["Top", "Centre", "Bottom"]; valign_names = ["Left", "Centre", "Right"]; Left_right_item = class Menuaction "_Left to Right" "join two images left-right" { action a b = class _result { _vislevel = 3; shim = Scale "Spacing" 0 100 0; bg_colour = Expression "Background colour" 0; align = Option "Alignment" halign_names 1; _result = map_binary (join_lr shim.value bg_colour.expr align.value) a b; } } Top_bottom_item = class Menuaction "_Top to Bottom" "join two images top-bottom" { action a b = class _result { _vislevel = 3; shim = Scale "Spacing" 0 100 0; bg_colour = Expression "Background colour" 0; align = Option "Alignment" valign_names 1; _result = map_binary (join_tb shim.value bg_colour.expr align.value) a b; } } sep2 = Menuseparator; Array_item = class Menuaction "_Array" "join a list of lists of images into a single image" { action x = class _result { _vislevel = 3; hshim = Scale "Horizontal spacing" (-100) (100) 0; vshim = Scale "Vertical spacing" (-100) (100) 0; bg_colour = Expression "Background colour" 0; halign = Option "Horizontal alignment" valign_names 1; valign = Option "Vertical alignment" halign_names 1; _result = (image_set_origin 0 0 @ foldl1 (join_tb vshim.value bg_colour.expr halign.value) @ map (foldl1 (join_lr hshim.value bg_colour.expr valign.value))) (to_list (to_list x)); } } } Image_tile_item = class Menupullright "Til_e" "tile an image across and down" { tile_widget default_type x = class _result { _vislevel = 3; across = Expression "Tiles across" 2; down = Expression "Tiles down" 2; repeat = Option "Tile type" ["Replicate", "Four-way mirror"] default_type; _result = map_unary process x { process image = tile across down image, repeat == 0 = tile across down image'' { image' = insert image.width 0 (fliplr image) image; image'' = insert 0 image.height (fliptb image') image'; } } } Replicate_item = class Menuaction "_Replicate" "replicate image across and down" { action x = tile_widget 0 x; } Fourway_item = class Menuaction "_Four-way Mirror" "four-way mirror across and down" { action x = tile_widget 1 x; } Chop_item = class Menuaction "_Chop Into Tiles" "slice an image into tiles" { action x = class _result { _vislevel = 3; tile_width = Expression "Tile width" 100; tile_height = Expression "Tile height" 100; hoverlap = Expression "Horizontal overlap" 0; voverlap = Expression "Vertical overlap" 0; _result = map_unary (Group @ map Group @ process) x { process x = imagearray_chop tile_width tile_height hoverlap voverlap x; } } } } #separator Pattern_images_item = class Menupullright "_Patterns" "make a variety of useful patterns" { Grey_item = class Menuaction "Grey _Ramp" "make a smooth grey ramp" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; orientation = Option "Orientation" [ "Horizontal", "Vertical" ] 0; foption = Option "Format" ["8 bit", "float"] 0; _result = Image im { gen = im_grey, foption == 0 = im_fgrey; w = to_real nwidth; h = to_real nheight; im = gen w h, orientation == 0 = rot90 (gen h w); } } } Xy_item = class Menuaction "_XY Image" "make a two band image whose pixel values are their coordinates" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; _result = Image (make_xy nwidth nheight); } } Gaussian_item = class Menuaction "Gaussian _Noise" "make an image of gaussian noise" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; mean = Scale "Mean" 0 255 128; deviation = Scale "Deviation" 0 128 50; _result = Image (im_gaussnoise (to_real nwidth) (to_real nheight) mean.value deviation.value); } } Fractal_item = class Menuaction "_Fractal" "make a fractal image" { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; dimension = Scale "Dimension" 2.001 2.999 2.001; _result = Image (im_fractsurf (to_real nsize) dimension.value); } } Checkerboard_item = class Menuaction "_Checkerboard" "make a checkerboard image" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; hpsize = Expression "Horizontal patch size" 8; vpsize = Expression "Vertical patch size" 8; hpoffset = Expression "Horizontal patch offset" 0; vpoffset = Expression "Vertical patch offset" 0; _result = Image (xstripes ^ ystripes) { pixels = make_xy nwidth nheight; xpixels = pixels?0 + to_real hpoffset; ypixels = pixels?1 + to_real vpoffset; make_stripe pix swidth = pix % (swidth * 2) >= swidth; xstripes = make_stripe xpixels (to_real hpsize); ystripes = make_stripe ypixels (to_real vpsize); } } } Grid_item = class Menuaction "Gri_d" "make a grid" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; hspace = Expression "Horizontal line spacing" 8; vspace = Expression "Vertical line spacing" 8; thick = Expression "Line thickness" 1; hoff = Expression "Horizontal grid offset" 4; voff = Expression "Vertical grid offset" 4; _result = Image (xstripes | ystripes) { pixels = make_xy nwidth nheight; xpixels = pixels?0 + to_real hoff; ypixels = pixels?1 + to_real voff; make_stripe pix swidth = pix % swidth < to_real thick; xstripes = make_stripe xpixels (to_real hspace); ystripes = make_stripe ypixels (to_real vspace); } } } Text_item = class Menuaction "_Text" "make a bitmap of some text" { action = class _result { _vislevel = 3; text = String "Text to paint" "Hello world!"; font = Fontname "Use font" Workspaces.Preferences.PAINTBOX_FONT; wrap = Expression "Wrap text at" 500; align = Option "Alignment" [ "Left", "Centre", "Right" ] 0; dpi = Expression "DPI" 300; _result = Image (im_text text.value font.value (to_real wrap) align.value (to_real dpi)); } } New_CIELAB_slice_item = class Menuaction "CIELAB _Slice" "make a slice through CIELAB space" { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; L = Scale "L value" 0 100 50; _result = Image (lab_slice (to_real nsize) L.value); } } sense_option = Option "Sense" [ "Pass", "Reject" ] 0; build fn size = (Image @ image_set_type Image_type.FOURIER @ rotquad @ fn) (im_create_fmask size size); New_ideal_item = class Menupullright "_Ideal Fourier Mask" "make various ideal Fourier filter masks" { High_low_item = class Menuaction "_High or Low Pass" ("make a mask image for a highpass/lowpass " ++ "ideal Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f sense.value fc.value 0 0 0 0; } } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" ("make a mask image for an ring pass/reject " ++ "ideal Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; rw = Scale "Ring width" 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f (sense.value + 6) fc.value rw.value 0 0 0; } } } Band_item = class Menuaction "_Band Pass or Band Reject" ("make a mask image for a band pass/reject " ++ "ideal Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fcx = Scale "Horizontal frequency cutoff" 0.01 0.99 0.5; fcy = Scale "Vertical frequency cutoff" 0.01 0.99 0.5; r = Scale "Radius" 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f (sense.value + 12) fcx.value fcy.value r.value 0 0; } } } } New_gaussian_item = class Menupullright "_Gaussian Fourier Mask" "make various Gaussian Fourier filter masks" { High_low_item = class Menuaction "_High or Low Pass" ("make a mask image for a highpass/lowpass " ++ "Gaussian Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f (sense.value + 4) fc.value ac.value 0 0 0; } } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" ("make a mask image for an ring pass/reject " ++ "Gaussian Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; rw = Scale "Ring width" 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f (sense.value + 10) fc.value rw.value ac.value 0 0; } } } Band_item = class Menuaction "_Band Pass or Band Reject" ("make a mask image for a band pass/reject " ++ "Gaussian Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fcx = Scale "Horizontal frequency cutoff" 0.01 0.99 0.5; fcy = Scale "Vertical frequency cutoff" 0.01 0.99 0.5; r = Scale "Radius" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f (sense.value + 16) fcx.value fcy.value r.value ac.value 0; } } } } New_butterworth_item = class Menupullright "_Butterworth Fourier Mask" "make various Butterworth Fourier filter masks" { High_low_item = class Menuaction "_High or Low Pass" ("make a mask image for a highpass/lowpass " ++ "Butterworth Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; order = Scale "Order" 1 10 2; _result = build param (to_real nsize) { param f = f (sense.value + 2) order.value fc.value ac.value 0 0; } } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" ("make a mask image for an ring pass/reject " ++ "Butterworth Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; rw = Scale "Ring width" 0.01 0.99 0.5; order = Scale "Order" 1 10 2; _result = build param (to_real nsize) { param f = f (sense.value + 8) order.value fc.value rw.value ac.value 0; } } } Band_item = class Menuaction "_Band Pass or Band Reject" ("make a mask image for a band pass/reject " ++ "Butterworth Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fcx = Scale "Horizontal frequency cutoff" 0.01 0.99 0.5; fcy = Scale "Vertical frequency cutoff" 0.01 0.99 0.5; r = Scale "Radius" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; order = Scale "Order" 1 10 2; _result = build param (to_real nsize) { param f = f (sense.value + 14) order.value fcx.value fcy.value r.value ac.value; } } } } } Test_images_item = class Menupullright "Test I_mages" "make a variety of test images" { Eye_item = class Menuaction "_Spatial Response" "image for testing the eye's spatial response" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; factor = Scale "Factor" 0.001 1 0.2; _result = Image (im_eye (to_real nwidth) (to_real nheight) factor.value); } } Zone_plate = class Menuaction "_Zone Plate" "make a zone plate" { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; _result = Image (im_zone (to_real nsize)); } } Frequency_test_chart_item = class Menuaction "_Frequency Testchart" "make a black/white frequency test pattern" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; sheight = Expression "Strip height (pixels)" 10; waves = Expression "Wavelengths" [64, 32, 16, 8, 4, 2]; _result = imagearray_assemble 0 0 (transpose [strips]) { freq_slice wave = Image (sin (grey / wave) > 0); strips = map freq_slice waves.expr; grey = im_fgrey (to_real nwidth) (to_real sheight) * 360 * (to_real nwidth); } } } CRT_test_chart_item = class Menuaction "CRT _Phosphor Chart" "make an image for measuring phosphor colours" { action = class _result { _vislevel = 3; brightness = Scale "Brightness" 0 255 200; psize = Expression "Patch size (pixels)" 32; _result = Image (imagearray_assemble 0 0 [[green, red], [blue, white]]) { black = image_new (to_real psize) (to_real psize) 1 Image_format.FLOAT Image_coding.NOCODING Image_type.B_W 0 0 0; notblack = black + brightness; green = black ++ notblack ++ black; red = notblack ++ black ++ black; blue = black ++ black ++ notblack; white = notblack ++ notblack ++ notblack; } } } Greyscale_chart_item = class Menuaction "_Greyscale" "make a greyscale" { action = class _result { _vislevel = 3; pwidth = Expression "Patch width" 8; pheight = Expression "Patch height" 8; npatches = Expression "Number of patches" 16; _result = Image (image_set_type Image_type.B_W (clip2fmt Image_format.UCHAR wedge)) { wedge = 255 / (to_real npatches - 1) * (int) (strip?0 / to_real pwidth) { strip = make_xy (to_real pwidth * to_real npatches) pheight; } } } } CMYK_test_chart_item = class Menuaction "_CMYK Wedges" "make a set of CMYK wedges" { action = class _result { _vislevel = 3; pwidth = Expression "Patch width" 8; pheight = Expression "Patch height" 8; npatches = Expression "Number of patches" 16; _result = Image (image_set_type Image_type.CMYK (clip2fmt Image_format.UCHAR strips)) { wedge = 255 / (to_real npatches - 1) * (int) (strip?0 / to_real pwidth) { strip = make_xy (to_real pwidth * to_real npatches) pheight; } black = wedge * 0; C = wedge ++ black ++ black ++ black; M = black ++ wedge ++ black ++ black; Y = black ++ black ++ wedge ++ black; K = black ++ black ++ black ++ wedge; strips = imagearray_assemble 0 0 [[C],[M],[Y],[K]]; } } } Colour_atlas_item = class Menuaction "_Colour Atlas" "make a grid of patches grouped around a colour" { action = class _result { _vislevel = 3; start = Colour_picker "Lab" [50,0,0]; nstep = Expression "Number of steps" 2; ssize = Expression "Step size" 2; _result = Image (colour_transform_to (get_type start) im) { base = colour_transform_to Image_type.LAB start; step = to_real ssize; offset = to_real nstep * step; range c = [c - offset, c - offset + step ... c + offset]; mk_patch b a = image_new 150 150 3 Image_format.FLOAT Image_coding.NOCODING Image_type.LAB (Vector [base?0, a, b]) 0 0; mk_strip b = map (mk_patch b) (range base?1); mk_grid = map mk_strip (range base?2); im = imagearray_assemble 15 15 mk_grid; } } } } nip2-8.7.0/share/nip2/compat/7.12/_list.def0000644000175000017500000002142313224651032014735 00000000000000/* concat l: join a list of lists together * * concat ["abc","def"] == "abcdef". * concat :: [[*]] -> [*] */ concat l = foldr join [] l; /* drop n l: drop the first n elements from list l * * drop 3 "abcd" == "d" * drop :: num -> [*] -> [*] */ drop n l = l, n <= 0 || l == [] = drop (n - 1) (tl l); /* dropwhile fn l: drop while fn is true * * dropwhile is_digit "1234pigs" == "pigs" * dropwhile :: (* -> bool) -> [*] -> [*] */ dropwhile fn l = [], l == [] = dropwhile fn (tl l), fn (hd l) = l; /* extract n l: extract element at index n from list l */ extract = converse subscript; /* filter fn l: return all elements of l for which predicate fn holds * * filter is_digit "1one2two3three" = "123" * filter :: (* -> bool) -> [*] -> [*] */ filter fn l = foldr addif [] l { addif x l = x : l, fn x; = l; } /* foldl fn st l: fold list l from the left with function fn and start st * * Start from the left hand end of the list (unlike foldr, see below). * foldl is less useful (and much slower). * * foldl fn start [a,b .. z] = ((((st fn a) fn b) ..) fn z) * foldl :: (* -> ** -> *) -> * -> [**] -> * */ foldl fn st l = st, l == [] = foldl fn (fn st (hd l)) (tl l); /* foldl1 fn l: like foldl, but use the 1st element as the start value * * foldl1 fn [1,2,3] == ((1 fn 2) fn 3) * foldl1 :: (* -> * -> *) -> [*] -> * */ foldl1 fn l = [], l == [] = foldl fn (hd l) (tl l); /* foldr fn st l: fold list l from the right with function fn and start st * * foldr fn st [a,b..z] = (a fn (b fn (.. (z fn st)))) * foldr :: (* -> ** -> **) -> ** -> [*] -> ** */ foldr fn st l = st, l == [] = fn (hd l) (foldr fn st (tl l)); /* foldrl fn l: like foldr, but use the 1st element as the start value * * foldr1 fn [1,2,3,4] == (2 fn (3 fn (4 fn 1))) * foldr1 :: (* -> * -> *) -> [*] -> * */ foldr1 fn l = [], l == [] = foldr fn (hd l) (tl l); sum = foldr1 add; product = foldr1 multiply; /* Search a list for an element, returning it's index (or -1) * * index (equal 12) [13,12,11] == 1 * index :: (* -> bool) -> [*] -> real */ index fn list = search list 0 { search l n = -1, l == [] = n, fn (hd l) = search (tl l) (n + 1); } /* init l: remove last element of list l * * The dual of tl. * init [1,2,3] == [1,2] * init :: [*] -> [*] */ init l = error "init of []", l == []; = [], tl l == []; = hd l : init (tl l); /* iterate f x: repeatedly apply f to x * * return the infinite list [x, f x, f (f x), ..]. * iterate (multiply 2) 1 == [1, 2, 4, 8, 16, 32, 64 ... ] * iterate :: (* -> *) -> * -> [*] */ iterate f x = x : iterate f (f x); /* land l: and all the elements of list l together * * land (map (==0) list) == true, if every element of list is zero. * land :: [bool] -> bool */ land = foldr logical_and true; /* last l: return the last element of list l * * The dual of hd. last [1,2,3] == 3 * last :: [*] -> [*] */ last l = error "last of []", l == [] = hd l, tl l == [] = last (tl l); /* len l: length of list l * * len :: [*] -> num */ len l = 0, l == [] = 1 + len (tl l); /* limit l: return the first element of l which is equal to its predecessor * * useful for checking for convergence * limit :: [*] -> * */ limit l = error "incorrect use of limit", l == [] || tl l == [] || tl (tl l) == [] = a, a == b = limit (b : x) { a = l?0; b = l?1; x = tl (tl l); } /* Turn a function of n args into a function which takes a single arg of an * n-element list. */ list_1ary fn x = fn x?0; list_2ary fn x = fn x?0 x?1; list_3ary fn x = fn x?0 x?1 x?2; list_4ary fn x = fn x?0 x?1 x?2 x?3; list_5ary fn x = fn x?0 x?1 x?2 x?3 x?4; list_6ary fn x = fn x?0 x?1 x?2 x?3 x?4 x?5; list_7ary fn x = fn x?0 x?1 x?2 x?3 x?4 x?5 x?6; /* lor l: or all the elements of list l together * * lor (map (equal 0) list) == true, if any element of list is zero. * lor :: [bool] -> bool */ lor = foldr logical_or false; /* map fn l: map function fn over list l * * map :: (* -> **) -> [*] -> [**] */ map f l = [], l == []; = f (hd l) : map f (tl l); /* map2 fn l1 l2: map two lists together with fn * * map2 :: (* -> ** -> ***) -> [*] -> [**] -> [***] */ map2 fn l1 l2 = map (list_2ary fn) (zip2 l1 l2); /* map3 fn l1 l2 l3: map three lists together with fn * * map3 :: (* -> ** -> *** -> ****) -> [*] -> [**] -> [***] -> [****] */ map3 fn l1 l2 l3 = map (list_3ary fn) (zip3 l1 l2 l3); /* member l x: true if x is a member of list l * * is_digit == member "0123456789" * member :: [*] -> * -> bool */ member l x = lor (map (equal x) l); /* merge b l r: merge two lists based on a bool list * * merge :: [bool] -> [*] -> [*] -> [*] */ merge b l r = [], b == [] || l == [] || r == [] = hd l : merge (tl b) (tl l) (tl r), hd b = hd r : merge (tl b) (tl l) (tl r); /* mkset eq l: remove duplicates from list l using equality function * * mkset :: (* -> bool) -> [*] -> [*] */ mkset eq l = [], l == [] = a : filter (not @ eq a) (mkset eq x) { a = hd l; x = tl l; } /* postfix l r: add r to the end of list l * * The dual of ':'. * postfix :: [*] -> ** -> [*,**] */ postfix l r = l ++ [r]; /* repeat x: make an infinite list of xes * * repeat :: * -> [*] */ repeat x = map (const x) [1..]; /* replicate n x: make n copies of x in a list * * replicate :: num -> * -> [*] */ replicate n x = take n (repeat x); /* reverse l: reverse list l * * reverse :: [*] -> [*] */ reverse l = foldl (converse cons) [] l; /* scan fn st l: apply (fold fn r) to every initial segment of a list * * scan add 0 [1,2,3] == [1,3,6] * scan :: (* -> ** -> *) -> * -> [**] -> [*] */ scan fn = g { g st l = [st], l == [] = st : g (fn st (hd l)) (tl l); } /* sort l: sort list l into ascending order * * sort :: [*] -> [*] */ sort l = sortc less_equal l; /* sortc comp l: sort list l into order using a comparision function * * Uses merge sort (n log n behaviour) * sortc :: (* -> * -> bool) -> [*] -> [*] */ sortc comp l = l, n <= 1 = merge (sortc comp (take n2 l)) (sortc comp (drop n2 l)) { n = len l; n2 = (int) (n / 2); /* merge l1 l2: merge sorted lists l1 and l2 to make a single * sorted list */ merge l1 l2 = l2, l1 == [] = l1, l2 == [] = a : merge x (b : y), comp a b = b : merge (a : x) y { a = hd l1; x = tl l1; b = hd l2; y = tl l2; } } /* sortpl pl l: sort by a list of predicates * * sortpl :: (* -> bool) -> [*] -> [*] */ sortpl pl l = sortc (test pl) l { /* Comparision function ... put true before false, if equal move on to * the next predicate. */ test pl a b = true, pl == [] = ta, ta != tb = test (tl pl) a b { ta = pl?0 a; tb = pl?0 b; } } /* sortr l: sort list l into descending order * * sortr :: [*] -> [*] */ sortr l = sortc more l; /* split fn l: break a list into sections separated by many fn * * split is_space " hello world " == ["hello", "world"] * split is_space " " == [] * split :: (* -> bool) -> [*] -> [[*]] */ split fn l = [], l == [] || l' == [] = head : split fn tail { nfn = not @ fn; l' = dropwhile fn l; head = takewhile nfn l'; tail = dropwhile nfn l'; } /* splits fn l: break a list into sections separated by a single fn * * split (equal ',') ",,1" == ["", "", "1"] * split :: (* -> bool) -> [*] -> [[*]] */ splits fn l = [], l == [] = head : splits fn tail { fn' = not @ fn; dropif x = [], x == [] = tl x; head = takewhile fn' l; tail = dropif (dropwhile fn' l); } /* splitpl fnl l: split a list up with a list of predicates * * splitpl [is_digit, is_letter, is_digit] "123cat" == ["123", "cat", []] * splitpl :: [* -> bool] -> [*] -> [[*]] */ splitpl fnl l = l, fnl == [] = head : splitpl (tl fnl) tail { head = takewhile (hd fnl) l; tail = dropwhile (hd fnl) l; } /* split_lines n l: split a list into equal length lines * * split_lines 4 "1234567" == ["1234", "567"] * splitl :: int -> [*] -> [[*]] */ split_lines n l = [], l == [] = take n l : split_lines n (drop n l); /* take n l: take the first n elements from list l * take :: num -> [*] -> [*] */ take n l = [], n <= 0 = [], l == [] = hd l : take (n-1) (tl l); /* takewhile fn l: take from the front of a list while predicate fn holds * * takewhile is_digit "123onetwothree" == "123" * takewhile :: (* -> bool) -> [*] -> [*] */ takewhile fn l = [], l == [] = hd l : takewhile fn (tl l), fn (hd l) = []; /* zip2 l1 l2: zip two lists together * * zip2 [1,2] ['a', 'b', 'c'] == [[1,'a'],[2,'b']] * zip2 :: [*] -> [**] -> [[*,**]] */ zip2 l1 l2 = [], l1 == [] || l2 == [] = [hd l1, hd l2] : zip2 (tl l1) (tl l2); /* zip3 l1 l2 l3: zip three lists together * * zip3 [1,2] ['a', 'b', 'c'] [true] == [[1,'a',true]] * zip3 :: [*] -> [**] ->[***] -> [[*,**,***]] */ zip3 l1 l2 l3 = [], l1 == [] || l2 == [] || l3 == [] = [hd l1, hd l2, hd l3] : zip3 (tl l1) (tl l2) (tl l3); nip2-8.7.0/share/nip2/compat/7.12/_predicate.def0000644000175000017500000002542713224651032015732 00000000000000 /* is_colour_space str: is a string one of nip's colour space names */ is_colour_space str = Image_type.colour_spaces.present 0 str; /* is_colour_type n: is a number one of VIPS's colour spaces */ is_colour_type n = Image_type.colour_spaces.present 1 n; /* is_number: is a real or a complex number. */ is_number a = is_real a || is_complex a; /* is_int: is an integer */ is_int a = is_real a && a == (int) a; /* is_uint: is an unsigned integer */ is_uint a = is_int a && a >= 0; /* is_pint: is a positive integer */ is_pint a = is_int a && a > 0; /* is_preal: is a positive real */ is_preal a = is_real a && a > 0; /* is_ureal: is an unsigned real */ is_ureal a = is_real a && a >= 0; /* is_letter c: true if character c is an ASCII letter * * is_letter :: char -> bool */ is_letter c = ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z'); /* is_digit c: true if character c is an ASCII digit * * is_digit :: char->bool */ is_digit x = '0' <= x && x <= '9'; /* A whitespace character. * * is_space :: char->bool */ is_space = member " \n\t"; /* List str starts with section prefix. * * is_prefix "hell" "hello world!" == true * is_prefix :: [*] -> [*] -> bool */ is_prefix prefix str = take (len prefix) str == prefix; /* List str ends with section suffix. * * is_suffix "ld!" "hello world!" == true * is_suffix :: [*] -> [*] -> bool */ is_suffix suffix str = take (len suffix) (reverse str) == reverse suffix; /* List contains seqence. * * is_substr "llo" "hello world!" == true * is_substr :: [*] -> [*] -> bool */ is_substr seq str = lor (map (is_prefix seq) (iterate tl str)); /* is_listof p s: true if finite list with p true for every element. */ is_listof p l = is_list l && land (map p l); /* is_string s: true if finite list of char. */ is_string s = is_listof is_char s; /* is_real_list l: is l a list of real numbers ... test each element, * so no infinite lists pls. */ is_real_list l = is_listof is_real l; /* is_string_list l: is l a finite list of finite strings. */ is_string_list l = is_listof is_string l; /* is_rectangular l: is l a rectangular data structure */ is_rectangular l = true, !is_list l = true, land (map is_obj l) = true, land (map is_list l) && land (map (not @ is_obj) l) && land (map is_rectangular l) && len l > 0 && land (map (equal (hd lengths)) (tl lengths)) = false { // treat strings as a base type, not [char] is_obj x = !is_list x || is_string x; lengths = map len l; } /* is_matrix l: is l a list of lists of real numbers, all the same length * * [[]] is the empty matrix, [] is the empty list ... disallow [] */ is_matrix l = l != [] && is_listof is_real_list l && is_rectangular l; /* is_square_matrix l: is l a matrix with width == height */ is_square_matrix l = true, l == [[]] = is_matrix l && len l == len (hd l); /* is_oddmatrix l: is l a matrix with odd-length sides */ is_oddmatrix l = true, l == [[]] = is_matrix l && len l % 2 == 1 && len l?0 % 2 == 1; /* is_odd_square_matrix l: is l a square_matrix with odd-length sides */ is_odd_square_matrix l = is_square_matrix l && len l % 2 == 1; /* Is an item in a column of a table? */ is_incolumn n table x = member (map (extract n) table) x; /* Is HGuide or VGuide. */ is_HGuide x = is_instanceof "HGuide" x; is_VGuide x = is_instanceof "VGuide" x; is_Guide x = is_HGuide x || is_VGuide x; is_Mark x = is_instanceof "Mark" x; is_Group x = is_instanceof "Group" x; is_List x = is_instanceof "List" x; is_Image x = is_instanceof "Image" x; is_Region x = is_instanceof "Region" x; is_Real x = is_instanceof "Real" x; is_Matrix x = is_instanceof "Matrix_base" x; is_Vector x = is_instanceof "Vector" x; is_Colour x = is_instanceof "Colour" x; is_Arrow x = is_instanceof "Arrow" x; is_Bool x = is_instanceof "Bool" x; is_Scale x = is_instanceof "Scale" x; is_Rect x = is_instanceof "Rect" x; is_Number x = is_instanceof "Number" x; is_Expression x = is_instanceof "Expression" x; is_String x = is_instanceof "String" x; /* A list of the form [[1,2],[3,4],[5,6]...] */ is_xy_list l = is_list l && land (map xy l) { xy l = is_real_list l && len l == 2; } // does a nested list structure contain a Group object? contains_Group l = true, is_list l && lor (map is_Group l) = lor (map contains_Group l), is_list l = false; /* Does an object have a sensible VIPS type? */ has_type x = is_image x || is_Image x || is_Arrow x || is_Colour x; /* Try to get a VIPS image type from an object. */ get_type x = get_type_im x, is_image x = get_type_im x.value, is_Image x = get_type_im x.image.value, is_Arrow x = Image_type.colour_spaces.lookup 0 1 x.colour_space, is_Colour x // slightly odd ... but our display is always 0-255, so it makes sense for // a plain number to be in the same range = Image_type.sRGB, is_real x = error ("get_type: unable to get type from " ++ print x) { // get the type from a VIPS image ... but only if it makes sense with // the rest of the image // we often have Type set wrong, hence the ugly guessing :-( get_type_im im = Image_type.LABQ, coding == Image_coding.LABPACK = type, bands == 1 && type == Image_type.GREY16 = type, type == Image_type.HISTOGRAM && (width == 1 || height == 1) = Image_type.B_W, bands == 1 = type, bands == 3 && is_colorimetric = Image_type.sRGB, bands == 3 && !is_colorimetric = Image_type.MULTIBAND, bands != 3 && !is_colorimetric = type { type = get_header "Type" im; coding = get_header "Coding" im; bands = get_header "Bands" im; width = get_header "Xsize" im; height = get_header "Ysize" im; // 3-band colorimetric types we allow ... the things which the // Colour/Convert To menu can make, excluding mono. ok_types = [ Image_type.sRGB, Image_type.RGB16, Image_type.LAB, Image_type.LABQ, Image_type.LABS, Image_type.LCH, Image_type.XYZ, Image_type.YXY, Image_type.UCS ]; is_colorimetric = member ok_types type; } } has_format x = has_member "format" x || is_Arrow x || is_image x; get_format x = x.format, has_member "format" x = x.image.format, is_Arrow x = get_header "BandFmt" x, is_image x = error ("get_format: unable to get format from " ++ print x); has_bits x = has_member "bits" x || is_Arrow x || is_image x; get_bits x = x.bits, has_member "bits" x = x.image.bits, is_Arrow x = get_header "Bbits" x, is_image x = error ("get_bits: unable to get bits from " ++ print x); has_bands x = is_image x || has_member "bands" x || is_Arrow x; get_bands x = x.bands, has_member "bands" x = x.image.bands, is_Arrow x = get_header "Bands" x, is_image x = 1, is_real x = len x, is_real_list x = error ("get_bands: unable to get bands from " ++ print x); has_coding x = has_member "coding" x || is_Arrow x || is_image x; get_coding x = x.coding, has_member "coding" x = x.image.coding, is_Arrow x = get_header "Coding" x, is_image x = Image_coding.NOCODING, is_real x = error ("get_coding: unable to get coding from " ++ print x); has_xres x = has_member "xres" x || is_Arrow x || is_image x; get_xres x = x.xres, has_member "xres" x = x.image.xres, is_Arrow x = get_header "Xres" x, is_image x = error ("get_xres: unable to get xres from " ++ print x); has_yres x = has_member "yres" x || is_Arrow x || is_image x; get_yres x = x.yres, has_member "yres" x = x.image.yres, is_Arrow x = get_header "Yres" x, is_image x = error ("get_yres: unable to get yres from " ++ print x); has_xoffset x = has_member "xoffset" x || is_Arrow x || is_image x; get_xoffset x = x.xoffset, has_member "xoffset" x = x.image.xoffset, is_Arrow x = get_header "Xoffset" x, is_image x = error ("get_xoffset: unable to get xoffset from " ++ print x); has_yoffset x = has_member "yoffset" x || is_Arrow x || is_image x; get_yoffset x = x.yoffset, has_member "yoffset" x = x.image.yoffset, is_Arrow x = get_header "Yoffset" x, is_image x = error ("get_yoffset: unable to get yoffset from " ++ print x); has_value = has_member "value"; get_value x = x.value; has_image x = is_image x || is_Image x || is_Arrow x; get_image x = x.value, is_Image x = x.image.value, is_Arrow x = x, is_image x = error ("get_image: unable to get image from " ++ print x); has_number x = is_number x || is_Real x; get_number x = x.value, is_Real x = x, is_number x = error ("get_number: unable to get number from " ++ print x); has_real x = is_real x || is_Real x; get_real x = x.value, is_Real x = x, is_real x = error ("get_real: unable to get real from " ++ print x); has_width x = has_member "width" x || is_image x; get_width x = x.width, has_member "width" x = get_header "Xsize" x, is_image x = error ("get_width: unable to get width from " ++ print x); has_height x = has_member "height" x || is_image x; get_height x = x.height, has_member "height" x = get_header "Ysize" x, is_image x = error ("get_height: unable to get height from " ++ print x); has_left x = has_member "left" x; get_left x = x.left, has_member "left" x = error ("get_left: unable to get left from " ++ print x); has_top x = has_member "top" x; get_top x = x.top, has_member "top" x = error ("get_top: unable to get top from " ++ print x); // like has/get member,but first in a lst of objects has_member_list has objects = filter has objects != []; // need one with the args swapped get_member = converse dot; // get a member from the first of a list of objects to have it get_member_list has get objects = hd members, members != [] = error "unable to get property" { members = map get (filter has objects); } is_hist x = has_image x && (h == 1 || w == 1 || t == Image_type.HISTOGRAM) { im = get_image x; w = get_width im; h = get_height im; t = get_type im; } get_header field x = oo_unary_function get_header_op x, is_class x = get_header_image x, is_image x = error (_ "bad arguments to " ++ "get_header") { get_header_op = Operator "get_header" (get_header field) Operator_type.COMPOUND false; get_header_image im = im_header_int field im, type == itype = im_header_double field im, type == dtype = im_header_string field im, type == stype1 || type == stype2 = error (_ "image has no field " ++ field), type == 0 = error (_ "unknown type for field " ++ field) { type = im_header_get_typeof field im; itype = name2gtype "gint"; dtype = name2gtype "gdouble"; stype1 = name2gtype "VipsRefString"; stype2 = name2gtype "gchararray"; } } get_header_type field x = oo_unary_function get_header_type_op x, is_class x = im_header_get_typeof field x, is_image x = error (_ "bad arguments to " ++ "get_header_type") { get_header_type_op = Operator "get_header_type" (get_header_type field) Operator_type.COMPOUND false; } set_header field value x = oo_unary_function set_header_op x, is_class x = im_copy_set_meta x field value, is_image x = error (_ "bad arguments to " ++ "set_header") { set_header_op = Operator "set_header" (set_header field value) Operator_type.COMPOUND false; } nip2-8.7.0/share/nip2/compat/7.12/Widgets.def0000644000175000017500000000235313224651032015232 00000000000000Widget_slider_item = class Menuaction "_Scale" "make a new scale widget" { icon = "nip-slider-16.png"; action = Scale "untitled scale" 0 255 128; } Widget_toggle_item = class Menuaction "_Toggle" "make a new toggle widget" { action = Toggle "untitled toggle" false; } Widget_option_item = class Menuaction "_Option" "make a new option widget" { action = Option "untitled option" ["option0", "option1"] 0; } Widget_string_item = class Menuaction "St_ring" "make a new string widget" { action = String "Enter a string" "sample text"; } Widget_number_item = class Menuaction "_Number" "make a new number widget" { action = Number "Enter a number" 42; } Widget_expression_item = class Menuaction "_Expression" "make a new expression widget" { action = Expression "Enter an expression" 42; } Widget_pathname_item = class Menuaction "_File Chooser" "make a new file chooser widget" { action = Pathname "Pick a file" "$VIPSHOME/share/$PACKAGE/data/print_test_image.v"; } Widget_font_item = class Menuaction "F_ont Chooser" "make a new font chooser widget" { action = Fontname "Pick a font" Workspaces.Preferences.PAINTBOX_FONT; } Widget_clock_item = class Menuaction "_Clock" "make a new clock widget" { action = Clock 1 1; } nip2-8.7.0/share/nip2/compat/7.12/Colour.def0000644000175000017500000003537013224651032015074 00000000000000 Colour_new_item = class Menupullright (_ "_New") (_ "make a patch of colour") { Widget_colour_item = class Menuaction (_ "_Colour") (_ "make a patch of colour") { action = Colour_picker "Lab" [50,0,0]; } LAB_colour = class Menuaction (_ "CIE Lab _Picker") (_ "pick colour in CIE Lab space") { action = widget "Lab" [50, 0, 0]; // ab_slice size size = 512; // range of values ... +/- 128 for ab range = 256; // map xy in slice image to ab and back xy2ab x = x / (size / range) - 128; ab2xy a = (a + 128) * (size / range); widget space default_value = class Colour space _result { _vislevel = 3; _L = default_value?0; _a = default_value?1; _b = default_value?2; L = Scale "Lightness" 0 100 _L; ab_slice = Image (lab_slice size L.value); point = Mark ab_slice (ab2xy _a) (ab2xy _b); _result = [L.value, xy2ab point.left, xy2ab point.top]; Colour_edit colour_space value = widget colour_space value; } } } Colour_to_colour_item = class Menuaction (_ "Con_vert to Colour") (_ "convert anything to a colour") { action x = to_colour x; } #separator Colour_convert_item = class Menupullright (_ "_Colourspace") (_ "convert to various colour spaces") { spaces = Image_type.image_colour_spaces; conv dest x = class _result { _vislevel = 3; to = Option_enum spaces (_ "Convert to") (spaces.get_name dest); _result = map_unary (colour_transform_to to.value_thing) x; } Mono_item = class Menuaction (_ "_Monochrome") (_ "convert to mono colourspace") { action x = conv Image_type.B_W x; } GREY16_item = class Menuaction (_ "_GREY16") (_ "convert to GREY16 colourspace") { action x = conv Image_type.GREY16 x; } sRGB_item = class Menuaction (_ "_sRGB") (_ "convert to sRGB colourspace") { action x = conv Image_type.sRGB x; } RGB16_item = class Menuaction (_ "_RGB16") (_ "convert to RGB16 colourspace") { action x = conv Image_type.RGB16 x; } Lab_item = class Menuaction (_ "_Lab") (_ "convert to Lab colourspace (float Lab)") { action x = conv Image_type.LAB x; } LabQ_item = class Menuaction (_ "Lab_Q") (_ "convert to LabQ colourspace (32-bit Lab)") { action x = conv Image_type.LABQ x; } LabS_item = class Menuaction (_ "Lab_S") (_ "convert to LabS colourspace (48-bit Lab)") { action x = conv Image_type.LABS x; } LCh_item = class Menuaction (_ "L_Ch") (_ "convert to LCh colourspace") { action x = conv Image_type.LCH x; } XYZ_item = class Menuaction (_ "_XYZ") (_ "convert to XYZ colourspace") { action x = conv Image_type.XYZ x; } Yxy_item = class Menuaction (_ "_Yxy") (_ "convert to Yxy colourspace") { action x = conv Image_type.YXY x; } UCS_item = class Menuaction (_ "_UCS") (_ "convert to UCS colourspace") { action x = conv Image_type.UCS x; } } /* mark objects as being in various colourspaces */ Colour_tag_item = class Menupullright (_ "_Tag As") (_ "tag object as being in various colour spaces") { spaces = Image_type.image_colour_spaces; tag dest x = class _result { _vislevel = 3; to = Option_enum spaces (_ "Tag as") (spaces.get_name dest); _result = map_unary (image_set_type to.value_thing) x; } Mono_item = class Menuaction (_ "_Monochrome") (_ "tag as being in mono colourspace") { action x = tag Image_type.B_W x; } sRGB_item = class Menuaction (_ "_sRGB") (_ "tag as being in sRGB colourspace") { action x = tag Image_type.sRGB x; } RGB16_item = class Menuaction (_ "_RGB16") (_ "tag as being in RGB16 colourspace") { action x = tag Image_type.RGB16 x; } GREY16_item = class Menuaction (_ "_GREY16") (_ "tag as being in GREY16 colourspace") { action x = tag Image_type.GREY16 x; } Lab_item = class Menuaction (_ "_Lab") (_ "tag as being in Lab colourspace (float Lab)") { action x = tag Image_type.LAB x; } LabQ_item = class Menuaction (_ "Lab_Q") (_ "tag as being in LabQ colourspace (32-bit Lab)") { action x = tag Image_type.LABQ x; } LabS_item = class Menuaction (_ "Lab_S") (_ "tag as being in LabS colourspace (48-bit Lab)") { action x = tag Image_type.LABS x; } LCh_item = class Menuaction (_ "L_Ch") (_ "tag as being in LCh colourspace") { action x = tag Image_type.LCH x; } XYZ_item = class Menuaction (_ "_XYZ") (_ "tag as being in XYZ colourspace") { action x = tag Image_type.XYZ x; } Yxy_item = class Menuaction (_ "_Yxy") (_ "tag as being in Yxy colourspace") { action x = tag Image_type.YXY x; } UCS_item = class Menuaction (_ "_UCS") (_ "tag as being in UCS colourspace") { action x = tag Image_type.UCS x; } } Colour_temperature_item = class Menupullright (_ "Colour Te_mperature") (_ "colour temperature conversions") { Whitepoint_item = class Menuaction (_ "_Move Whitepoint") (_ "change whitepoint") { action x = class _result { _vislevel = 3; old_white = Option_enum Whitepoints (_ "Old whitepoint") "D65"; new_white = Option_enum Whitepoints (_ "New whitepoint") "D50"; _result = map_unary process x { process im = im''' { im' = colour_transform_to Image_type.XYZ im; im'' = im' * (new_white.value_thing / old_white.value_thing); im''' = colour_transform_to (get_type im) im''; } } } } D65_to_D50_item = class Menupullright (_ "D_65 to D50") (_ "complex conversion") { XYZ_minimal_item = class Menuaction (_ "_Minimal") (_ "D65 to D50 using the minimal 3x3 matrix in XYZ") { action x = map_unary process x { process im = im''' { im' = colour_transform_to Image_type.XYZ im; im'' = recomb D652D50_direct im'; im''' = colour_transform_to (get_type im) im''; } } } Bradford_item = class Menuaction (_ "_Bradford") (_ "D65 to D50 in Bradford cone space") { action x = map_unary process x { process im = im''' { im' = colour_transform_to Image_type.XYZ im; im'' = im_D652D50 im'; im''' = colour_transform_to (get_type im) im''; } } } } D50_to_D65_item = class Menupullright (_ "D_50 to D65") (_ "complex conversion") { XYZ_minimal_item = class Menuaction (_ "_Minimal") (_ "D50 to D65 using the minimal 3x3 matrix in XYZ") { action x = map_unary process x { process im = im''' { im' = colour_transform_to Image_type.XYZ im; im'' = recomb D502D65_direct im'; im''' = colour_transform_to (get_type im) im''; } } } Bradford_item = class Menuaction (_ "_Bradford") (_ "D60 to D65 in Bradford cone space") { action x = map_unary process x { process im = im''' { im' = colour_transform_to Image_type.XYZ im; im'' = im_D502D65 im'; im''' = colour_transform_to (get_type im) im''; } } } } Lab_to_D50XYZ_item = class Menuaction (_ "_Lab to D50 XYZ") (_ "Lab to XYZ with a D50 whitepoint") { action x = map_unary (colour_unary im_D50Lab2XYZ) x; } D50XYZ_to_Lab_item = class Menuaction (_ "D50 _XYZ to Lab") (_ "XYZ to Lab with a D50 whitepoint") { action x = map_unary (colour_unary im_D50XYZ2Lab) x; } } Colour_icc_item = class Menupullright (_ "_ICC") (_ "transform with ICC profiles") { print_profile = "$VIPSHOME/share/$PACKAGE/data/cmyk.icm"; monitor_profile = "$VIPSHOME/share/$PACKAGE/data/sRGB.icm"; guess_profile image = monitor_profile, has_bands image && get_bands image == 3 = print_profile; render_intents = Option_enum Render_intent.names (_ "Render intent") (_ "Absolute"); Export_item = class Menuaction (_ "_Export") (_ "export from PCS to device space") { action x = class _result { _vislevel = 3; profile = Pathname (_ "Output profile") print_profile; intent = render_intents; depth = Option (_ "Output depth") [_ "8 bit", _ "16 bit"] 0; _result = map_unary process x { process image = icc_export [8, 16]?depth profile.value intent.value_thing lab { lab = colour_transform_to Image_type.LABQ image; } } } } Import_item = class Menuaction (_ "_Import") (_ "import from device space to PCS") { action x = class _result { _vislevel = 3; embedded = Toggle (_ "Use embedded profile if possible") false; profile = Pathname (_ "Default input profile") (guess_profile x); intent = render_intents; _result = map_unary process x { process image = icc_import_embedded intent.value_thing image, get_header_type "icc-profile-data" image != 0 && embedded = icc_import profile.value intent.value_thing image; } } } Transform_item = class Menuaction (_ "_Transform") (_ "transform between two device spaces") { action x = class _result { _vislevel = 3; in_profile = Pathname (_ "Input profile") (guess_profile x); out_profile = Pathname (_ "Output profile") print_profile; intent = render_intents; _result = map_unary process x { process image = icc_transform in_profile.value out_profile.value intent.value_thing image; } } } AC2RC_item = class Menuaction (_ "_Absolute to Relative") (_ "absolute to relative colorimetry using device profile") { action x = class _result { _vislevel = 3; profile = Pathname (_ "Pick a profile") (guess_profile x); _result = map_unary process x { process image = icc_ac2rc profile.value lab { lab = colour_transform_to Image_type.LAB image; } } } } } #separator Colour_dE_item = class Menupullright (_ "_Difference") (_ "calculate colour difference") { /* Apply a converter to an object ... convert image or colour (since * we can guess the colour space we're converting from), don't convert * matrix or vector (since we can't tell ... assume it's in the right * space already). */ apply_cvt cvt x = cvt x, is_Image x || is_Colour x || is_image x = x; diff cvt in1 in2 = abs_vec (apply_cvt cvt in1 - apply_cvt cvt in2); /* Converter to LAB. */ lab_cvt = colour_transform_to Image_type.LAB; /* Converter to UCS ... plain UCS is Ch form, so we go LAB again after * to make sure we get a rectangular coord system. */ ucs_cvt = colour_transform Image_type.LCH Image_type.LAB @ colour_transform_to Image_type.UCS; CIEdE76_item = class Menuaction (_ "CIE dE _76") (_ "calculate CIE dE 1976 for two objects") { action a b = map_binary (diff lab_cvt) a b; } CIEdE00_item = class Menuaction (_ "CIE dE _00") (_ "calculate CIE dE 2000 for two objects") { action a b = map_binary (colour_binary (_ "im_dE00_fromLab") im_dE00_fromLab) a b; } UCS_item = class Menuaction (_ "_CMC(l:l)") (_ "calculate CMC(l:l) for two objects") { action a b = map_binary (diff ucs_cvt) a b; } } Colour_adjust_item = class Menupullright (_ "_Adjust") (_ "alter colours in various ways") { Recombination_item = class Menuaction (_ "_Recombination") (_ "recombine colour with an editable matrix") { action x = class _result { _vislevel = 3; matrix = Matrix_rec (identity_matrix (bands x)) { // try to guess a sensible value for the size of the // matrix bands x = x.bands, is_Image x || is_Colour x = x.width, is_Matrix x = bands x.value?0, is_Group x = x.bands, has_member "bands" x = 3; } _result = map_unary (recomb matrix) x; } } Cast_item = class Menuaction (_ "_Cast") (_ "displace neutral axis in CIE Lab") { action x = class _result { _vislevel = 3; gr = Scale "Green-red" (-20) 20 0; by = Scale "Blue-yellow" (-20) 20 0; _result = map_unary adjust_cast x { adjust_cast in = colour_transform_to (get_type in) in'' { in' = colour_transform_to Image_type.LAB in; in'' = in' + Vector [0, gr.value, by.value]; } } } } HSB_item = class Menuaction (_ "_HSB") (_ "adjust hue-saturation-brightness in LCh") { action x = class _result { _vislevel = 3; h = Scale "Hue" 0 360 0; s = Scale "Saturation" 0.01 5 1; b = Scale "Brightness" 0.01 5 1; _result = map_unary adjust_hsb x { adjust_hsb in = colour_transform_to (get_type in) in'' { in' = colour_transform_to Image_type.LCH in; in'' = in' * Vector [b.value, s.value, 1] + Vector [0, 0, h.value]; } } } } } Colour_similar_item = class Menuaction (_ "_Similar Colour") (_ "find pixels with a similar colour") { action x = class _result { _vislevel = 3; target_colour = Colour_picker "Lab" [50, 0, 0]; t = Scale "dE threshold" 0 100 10; _result = map_unary match x { match in = abs_vec (in' - target) < t { target = colour_transform_to Image_type.LAB target_colour; in' = colour_transform_to Image_type.LAB in; } } } } #separator Colour_chart_to_matrix_item = class Menuaction (_ "_Measure Colour Chart") (_ "measure average pixel values for a colour chart image") { action x = class _result { _vislevel = 3; pacross = Expression (_ "Patches across chart") 6; pdown = Expression (_ "Patches down chart") 4; _result = map_unary chart x { chart in = measure 0 0 in.width in.height (to_real pacross) (to_real pdown) in; } } } Colour_matrix_to_chart_item = class Menuaction (_ "Make Synth_etic Colour Chart") (_ "make a colour chart image from a matrix of measurements") { action x = class _result { _vislevel = 3; pacross = Expression (_ "Patches across chart") 6; pdown = Expression (_ "Patches down chart") 4; pwidth = Expression (_ "Patch width in pixels") 50; pheight = Expression (_ "Patch height in pixels") 50; bwidth = Expression (_ "Border between patches") 0; _result = map_unary build_chart x { build_chart in = Image (imagearray_assemble (to_real bwidth) (to_real bwidth) patch_table) { // patch numbers for row starts rowstart = map (multiply (to_real pacross)) [0 .. to_real pdown - 1]; // assemble patches ... each one a pixel value patches = map (take (to_real pacross)) (map (converse drop in.value) rowstart); // make an n-band constant image from eg. [1,2,3] // we don't know the format .. use sRGB (well, why not?) patch v = image_new (to_real pwidth) (to_real pheight) (len v) Image_format.FLOAT Image_coding.NOCODING Image_type.sRGB (Vector v) 0 0; // make an image for each patch patch_table = map (map patch) patches; } } } } Colour_plot_ab_scatter_item = class Menuaction (_ "_Plot ab Scatter") (_ "plot an ab scatter histogram") { action x = class _result { _vislevel = 3; bins = Expression (_ "Number of bins on each axis") 8; _result = map_unary plot_scatter x { plot_scatter in = Image (bg * (((90 / mx) * hist) ++ blk)) { lab = colour_transform_to Image_type.LAB in.value; ab = (unsigned char) ((lab?1 ++ lab?2) + 128); hist = hist_find_nD bins.expr ab; mx = max hist; bg = lab_slice bins.expr 1; blk = 1 + im_black (to_real bins) (to_real bins) 2; } } } } nip2-8.7.0/share/nip2/compat/7.12/_joe_extra.def0000644000175000017500000003260713224651032015750 00000000000000//////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// Frame_item = class Menupullright "Picture _Frame" "working with images of frames" { //////////////////////////////////////////////////////////////////////////////////// Build_frame_item = class Menupullright "_Build Frame From" "builds a new frame from image a and places it around image b" { //////////////////////////////////////////////////////////////////////////////////// Frame_corner_item = class Menuaction "_Frame Corner" "copies and extends a frame corner, a, to produce a complete frame to fit round a given image, b" { prefs = Workspaces.Preferences; action a b = class _result { _check_args = [ [a, "a", check_Image], [b, "b", check_Image] ]; _check_all = [ [a.coding == b.coding && a.bands == b.bands, "a.coding == b.coding && a.bands == b.bands"] ]; _vislevel = 3; ppcm = Expression "Number of pixels per cm" 25; /* Given the value of ppcm, distance between the inner edge of the frame * and the outer edge of the image. +ve values mean the frame overlaps * the image. */ overlap = Expression "Size of frame overlap in cm" 0; variables = class { scale_factor = Expression "scale the size of the frame by" 1; /* These sliders define the fraction of the frames width or height is extracted * to produce each of the particular regions. */ corner_section = Scale "Corner section" 0.1 1 0.5; middle_section = Scale "Middle section" 0.1 1 0.2; blend_fraction = Scale "Blend fraction" 0.1 0.9 0.1; } _type = Image_type.colour_spaces.get_name b.type; //If applied the count colour be seen for -ve values of overlap mount_options = class { apply = Toggle "Apply mount options" false; ls = Expression "Lower mount section bigger by (cm)" 0; mount_colour = Colour _type [0, 0, 0]; _los = ls.expr * ppcm.expr; } _cs = variables.corner_section.value; _ms = variables.middle_section.value; _ov = ppcm.expr * overlap.expr; _sf = variables.scale_factor.expr; _bf = variables.blend_fraction.value; //Scale frame image if required. _a = a, _sf == 1; = a, _sf == 0; = Image (resize _sf _sf Interpolate.BILINEAR a.value); _im_w = b.width; _im_h = b.height + mount_options._los, mount_options.apply = b.height; _os = mount_options._los, mount_options.apply = 0; _cl = Vector mount_options.mount_colour.value, mount_options.apply = 0; //Produce scaled and resized frame. frame = corner_frame _a _im_w _im_h _ov _cs _ms _bf; //Resize image canvas and applied mount colour as required. _pos_im = frame_position_image b frame _os _cl; //Wrap frame round image. _result = if (frame == 0) then _pos_im else frame; } } //////////////////////////////////////////////////////////////////////////////////// Simple_frame_item = class Menuaction "_Simple Frame" "extends or shortens the central sections of a simple frame, a, to fit round a given image, b" { prefs = Workspaces.Preferences; action a b = class _result { _check_args = [ [a, "a", check_Image], [b, "b", check_Image] ]; _check_all = [ [a.coding == b.coding && a.bands == b.bands, "a.coding == b.coding && a.bands == b.bands"] ]; _vislevel = 3; ppcm = Expression "Number of pixels per cm" 25; /* Given the value of ppcm, distance between the inner edge of the frame * and the outer edge of the image. +ve values mean the frame overlaps * the image. */ overlap = Expression "Size of frame overlap in cm" 0; variables = class { scale_factor = Expression "scale the size of the frame by" 1; /* These sliders define the fraction of the frames width or height that * is extracted to produce each of the particular regions. */ corner_section = Scale "Corner section" 0.1 1 0.5; middle_section = Scale "Middle section" 0.1 1 0.2; blend_fraction = Scale "Blend fraction" 0.1 0.9 0.1; option = Toggle "Use mirror of left-side to make right" true; } _type = Image_type.colour_spaces.get_name b.type; //If applied the count colour be seen for -ve values of overlap mount_options = class { apply = Toggle "Apply mount options" false; ls = Expression "Lower mount section bigger by (cm)" 0; mount_colour = Colour _type [0, 0, 0]; _los = ls.expr * ppcm.expr; } _cs = variables.corner_section.value; _ms = variables.middle_section.value; _ov = ppcm.expr * overlap.expr; _sf = variables.scale_factor.expr; _bf = variables.blend_fraction.value; //Scale frame image if required. _a = a, _sf == 1; = a, _sf == 0; = Image (resize _sf _sf Interpolate.BILINEAR a.value); _im_w = b.width; _im_h = b.height + mount_options._los, mount_options.apply = b.height; _os = mount_options._los, mount_options.apply = 0; _cl = Vector mount_options.mount_colour.value, mount_options.apply = 0; //Produce scaled and resized frame. frame = simple_frame _a _im_w _im_h _ov _cs _ms _bf variables.option; //Resize image canvas and applied mount colour as required. _pos_im = frame_position_image b frame _os _cl; //Wrap frame round image. _result = if (frame == 0) then _pos_im else frame; } } //////////////////////////////////////////////////////////////////////////////////// Complex_frame_item = class Menuaction "_Complex Frame" "extends or shortens the central sections of a frame a, preserving any central edge details, to fit image b" { prefs = Workspaces.Preferences; action a b = class _result { _check_args = [ [a, "a", check_Image], [b, "b", check_Image] ]; _check_all = [ [a.coding == b.coding && a.bands == b.bands, "a.coding == b.coding && a.bands == b.bands"] ]; _vislevel = 3; ppcm = Expression "Number of pixels per cm" 25; /* Given the value of ppcm, distance between the inner edge of the frame * and the outer edge of the image. +ve values mean the frame overlaps * the image. */ overlap = Expression "Size of frame overlap in cm" 0; variables = class { scale_factor = Expression "scale the size of the frame by" 1; /* These sliders define the fraction of the frames width or height is extracted * to produce each of the particular regions. */ corner_section = Scale "Corner section" 0.1 1 0.5; edge_section = Scale "Edge section" 0.1 1 0.2; middle_section = Scale "Middle section" 0.1 1 0.2; blend_fraction = Scale "Blend fraction" 0.1 0.9 0.1; option = Toggle "Use mirror of left-side to make right" true; } _type = Image_type.colour_spaces.get_name b.type; //If applied the count colour be seen for -ve values of overlap mount_options = class { apply = Toggle "Apply mount color" false; ls = Expression "Lower mount section bigger by (cm)" 0; colour = Colour _type [0, 0, 0]; _los = ls.expr * ppcm.expr; } _cs = variables.corner_section.value; _es = variables.edge_section.value; _ms = variables.middle_section.value; _ov = ppcm.expr * overlap.expr; _sf = variables.scale_factor.expr; _bf = variables.blend_fraction.value; _a = a, _sf == 1; = a, _sf == 0; = Image (resize _sf _sf Interpolate.BILINEAR a.value); _im_w = b.width; _im_h = b.height + mount_options._los, mount_options.apply = b.height; _os = mount_options._los, mount_options.apply = 0; _cl = Vector mount_options.colour.value, mount_options.apply = 0; //Produce scaled and resized frame. frame = complex_frame _a _im_w _im_h _ov _cs _es _ms _bf variables.option; //Resize image canvas and applied mount colour as required. _pos_im = frame_position_image b frame _os _cl; //Wrap frame round image. _result = if (frame == 0) then _pos_im else frame; } } } //////////////////////////////////////////////////////////////////////////////////// Straighten_frame_item = class Menuaction "_Straighten Frame" "uses four points to square up distorted images of frames" { action a = Perspective_item.action a; } }; //////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// Select_item = class Menupullright "_Select" "select user defined areas of an image" { prefs = Workspaces.Preferences; /* Option toggle used to define whether the user is replacing a * dark or a light area. */ _control = Option "Make" [ "Selection Brighter", "Selection Darker", "Selection Black", "Selection White", "Background Black", "Background White", "Mask" ] 6; control_selection mask im no = (if mask then im * 1.2 else im * 1), no == 0 = (if mask then im * 0.8 else im * 1), no == 1 = (if mask then 0 else im), no == 2 = (if mask then 255 else im), no == 3 = (if mask then im else 0), no == 4 = (if mask then im else 255), no == 5 = mask; Elipse = class Menuaction "_Ellipse" "use a line/arrow x to define the center point radius and direction of an ellipse" { action x = class _result { _vislevel = 3; control = _control; width = Scale "Width" 0.01 1 0.5; _result = control_selection mask im control { mask = select_ellipse x width.value; im = x.image; } } } Tetragon = class Menuaction "_Tetragon" "selects the convex area defined by four points" { action a b c d = class _result { _vislevel = 3; control = _control; _result = control_selection mask im control { mask = select_tetragon a b c d; im = a.image; } } } Polygon = class Menuaction "_Polygon" "selects a polygon from an ordered group of points" { action pt_list = class _result { _vislevel = 3; control = _control; _result = control_selection mask im control { mask = select_polygon pt_list; im = ((pt_list.value)?0).image; } } } sep1 = Menuseparator; Threshold_item = class Menuaction "Thres_hold" "simple image threshold" { action x = class _result { _vislevel = 3; t = Scale "Threshold" 0 mx (mx / 2) { mx = Image_format.maxval x.format, is_Image x = 255; } _result = map_unary (more t.value) x; } } Threshold_percent_item = class Menuaction "Per_cent Threshold" "threshold at a percentage of pixels" { action x = class _result { _vislevel = 3; t = Scale "Percentage of pixels" 0 100 50; _result = map_unary (more (hist_thresh (t.value / 100) x)) x; } } }; //////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// Perspective_match_item = class Menuaction "_Perspective Match" "rotate, scale and skew one image to match another" { action x y = class _result { _vislevel = 3; // try to find an image ... for a group, get the first item find_image x = x, is_Image x = find_image x?0, is_list x = find_image x.value, is_class x && has_value x = error "unable to find image"; _a = find_image x; _b = find_image y; ap1 = Mark_relative _a 0.1 0.1; ap2 = Mark_relative _a 0.9 0.1; ap3 = Mark_relative _a 0.1 0.9; ap4 = Mark_relative _a 0.9 0.9; bp1 = Mark_relative _b 0.1 0.1; bp2 = Mark_relative _b 0.9 0.1; bp3 = Mark_relative _b 0.1 0.9; bp4 = Mark_relative _b 0.9 0.9; _result = map_binary process x y { f1 = _a.width / _b.width; f2 = _a.height / _b.height; rl = sort_pts_clockwise [ap1, ap2, ap3, ap4]; pl = sort_pts_clockwise [bp1, bp2, bp3, bp4]; to = [ rl?0.left, rl?0.top, rl?1.left, rl?1.top, rl?2.left, rl?2.top, rl?3.left, rl?3.top ]; from = [ pl?0.left * f1, pl?0.top * f2, pl?1.left * f1, pl?1.top * f2, pl?2.left * f1, pl?2.top * f2, pl?3.left * f1, pl?3.top * f2 ]; trans = perspective_transform to from; process a b = transform 1 0 trans b2 { b2 = resize f1 f2 1 b, (f1 >= 1 && f2 >= 1) || (f1 >= 1 && f2 >= 1) = resize f1 1 1 b1 {b1 = resize 1 f2 1 b;} } } } } //////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// Perspective_item = class Menuaction "Pe_rspective Distort" "rotate, scale and skew an image with respect to defined points" { action x = class _result { _vislevel = 3; // try to find an image ... for a group, get the first item find_image x = x, is_Image x = find_image x?0, is_list x = find_image x.value, is_class x && has_value x = error "unable to find image"; _a = find_image x; dir = Option "Select distort direction" [ "Distort to points", "Distort to corners" ] 1; ap1 = Mark_relative _a 0.1 0.1; ap2 = Mark_relative _a 0.9 0.1; ap3 = Mark_relative _a 0.9 0.9; ap4 = Mark_relative _a 0.1 0.9; _result = map_unary process x { trans = [perspective_transform to from, perspective_transform from to]?(dir.value) { rl = sort_pts_clockwise [ap1, ap2, ap3, ap4]; to = [(rl?0).left, (rl?0).top, (rl?1).left, (rl?1).top, (rl?2).left, (rl?2).top, (rl?3).left, (rl?3).top]; from=[0, 0, (_a.width - 1), 0, (_a.width - 1), (_a.height - 1), 0, (_a.height - 1)]; } process a = transform 1 0 trans a; } } }; nip2-8.7.0/share/nip2/compat/7.12/_generate.def0000644000175000017500000000514013224651032015552 00000000000000 /* make an image of size x by y whose pixels are their coordinates. */ make_xy x y = im_make_xy (to_real x) (to_real y); /* make an image with the specified properties ... pixel is (eg.) * Vector [0, 0, 0], or 12. If coding == labq, we ignore bands, format and * type, generate a 3 band float image, and lab2labq it before handing it * back. */ image_new w h b fmt coding type pixel xoff yoff = im'''' { b' = 3, coding == Image_coding.LABPACK = b; fmt' = Image_format.FLOAT, coding == Image_coding.LABPACK = fmt; type' = Image_type.LAB, coding == Image_coding.LABPACK = type; im = im_black (to_real w) (to_real h) (to_real b') + pixel; im' = clip2fmt fmt' im; im'' = im_Lab2LabQ im', coding == Image_coding.LABPACK; = im'; im''' = image_set_type type' im''; im'''' = image_set_origin xoff yoff im'''; } /* generate a slice of LAB space size x size pixels for L* == l */ lab_slice size l = image_set_type Image_type.LAB im { L = image_new size size 1 Image_format.FLOAT Image_coding.NOCODING Image_type.B_W l 0 0; A1 = im_fgrey (to_real size) (to_real size); /* im_fgrey always makes 0-1, so these ranges can be wired in. */ A2 = A1 * 256 - 128; A4 = im_rot90 A2; im = image_set_origin (size / 2) (size / 2) (L ++ A2 ++ A4); } /* Look at Image, try to make a Colour (failing that, a Vector) which is white * for that image type. */ image_white im = colour_transform_to type white_lab, bands == 3 && coding == Image_coding.NOCODING && colour_spaces.present 1 type = white_lab, coding == Image_coding.LABPACK = Vector (replicate bands (max_value.lookup 1 0 format)) { bands = im.bands; type = im.type; format = im.format; coding = im.coding; colour_spaces = Image_type.colour_spaces; // white as LAB white_lab = Colour "Lab" [100, 0, 0]; // maximum value for this numeric type max_value = Table [ [255, Image_format.DPCOMPLEX], [255, Image_format.DOUBLE], [255, Image_format.COMPLEX], [255, Image_format.FLOAT], [2 ** 31 - 1, Image_format.INT], [2 ** 32 - 1, Image_format.UINT], [2 ** 15 - 1, Image_format.SHORT], [2 ** 16 - 1, Image_format.USHORT], [2 ** 7 - 1, Image_format.CHAR], [2 ** 8 - 1, Image_format.UCHAR] ]; } /* Make a seperable gaussian mask. */ matrix_gaussian_blur radius = Matrix_con mask_g_sum 0 [mask_g_line] { mask_g = im_gauss_imask (radius / 3) 0.2; mask_g_line = mask_g.value?(mask_g.height / 2); mask_g_sum = sum mask_g_line; } /* Make a seperable square mask. */ matrix_blur radius = Matrix_con (sum mask_sq_line) 0 [mask_sq_line] { mask_sq_line = replicate (2 * radius - 1) 1; } nip2-8.7.0/share/nip2/compat/7.12/Math.def0000644000175000017500000003355513224651032014525 00000000000000Math_arithmetic_item = class Menupullright "_Arithmetic" "basic arithmetic for objects" { Add_item = class Menuaction "_Add" "add a and b" { action a b = map_binary add a b; } Subtract_item = class Menuaction "_Subtract" "subtract b from a" { action a b = map_binary subtract a b; } Multiply_item = class Menuaction "_Multiply" "multiply a by b" { action a b = map_binary multiply a b; } Divide_item = class Menuaction "_Divide" "divide a by b" { action a b = map_binary divide a b; } Remainder_item = class Menuaction "_Remainder" "remainder after integer division of a by b" { action a b = map_binary remainder a b; } sep1 = Menuseparator; Absolute_value_item = class Menuaction "A_bsolute Value" "absolute value of x" { action x = map_unary abs x; } Absolute_value_vector_item = class Menuaction "Absolute Value _Vector" "like Absolute Value, but treat pixels as vectors" { action x = map_unary abs_vec x; } Sign_item = class Menuaction "S_ign" "unit vector" { action x = map_unary sign x; } Negate_item = class Menuaction "_Negate" "multiply by -1" { action x = map_unary unary_minus x; } } Math_trig_item = class Menupullright "_Trigonometry" "trigonometry operations (all in degrees)" { Sin_item = class Menuaction "_Sine" "calculate sine x" { action x = map_unary sin x; } Cos_item = class Menuaction "_Cosine" "calculate cosine x" { action x = map_unary cos x; } Tan_item = class Menuaction "_Tangent" "calculate tangent x" { action x = map_unary tan x; } sep1 = Menuseparator; Asin_item = class Menuaction "Arc S_ine" "calculate arc sine x" { action x = map_unary asin x; } Acos_item = class Menuaction "Arc C_osine" "calculate arc cosine x" { action x = map_unary acos x; } Atan_item = class Menuaction "Arc T_angent" "calculate arc tangent x" { action x = map_unary atan x; } sep2 = Menuseparator; Rad_item = class Menuaction "_Degrees to Radians" "convert degrees to radians" { action x = map_unary rad x; } Deg_item = class Menuaction "_Radians to Degrees" "convert radians to degrees" { action x = map_unary deg x; } sep3 = Menuseparator; Angle_range_item = class Menuaction "Angle i_n Range" "is angle within t degrees of r, mod 360" { action t r angle = clock (max - angle) < 2*r { max = clock (t + r); clock a = a + 360, a < 0; = a - 360, a >= 360; = a; } } } Math_log_item = class Menupullright "_Log" "logarithms and anti-logs" { Exponential_item = class Menuaction "_Exponential" "calculate e ** x" { action x = map_unary (power e) x; } Log_natural_item = class Menuaction "Natural _Log" "log base e of x" { action x = map_unary log x; } sep1 = Menuseparator; Exponential10_item = class Menuaction "E_xponential base 10" "calculate 10 ** x" { action x = map_unary (power 10) x; } Log10_item = class Menuaction "L_og Base 10" "log base 10 of x" { action x = map_unary log10 x; } sep2 = Menuseparator; Raise_to_power_item = class Menuaction "_Raise to Power" "calculate x ** y" { action x y = map_binary power x y; } } Math_complex_item = class Menupullright "_Complex" "operations on complex numbers and images" { Complex_extract = class Menupullright "_Extract" "extract fields from complex" { Real_item = class Menuaction "_Real" "extract real part of complex" { action in = map_unary re in; } Imaginary_item = class Menuaction "_Imaginary" "extract imaginary part of complex" { action in = map_unary im in; } } Complex_build_item = class Menuaction "_Build" "join a and b to make a complex" { action a b = map_binary comma a b; } sep1 = Menuseparator; Polar_item = class Menuaction "_Polar" "convert real and imag to amplitude and phase" { action a = map_unary polar a; } Rectangular_item = class Menuaction "_Rectagular" ("convert (amplitude, phase) image to rectangular " ++ "coordinates") { action x = map_unary rectangular x; } sep2 = Menuseparator; Conjugate_item = class Menuaction "_Conjugate" "invert imaginary part" { action x = map_unary conj x; } } Math_boolean_item = class Menupullright "_Boolean" "bitwise boolean operations for integer objects" { And_item = class Menuaction "_And" "bitwise and of a and b" { action a b = map_binary bitwise_and a b; } Or_item = class Menuaction "_Or" "bitwise or of a and b" { action a b = map_binary bitwise_or a b; } Eor_item = class Menuaction "E_xclusive Or" "bitwise exclusive or of a and b" { action a b = map_binary eor a b; } Not_item = class Menuaction "_Not" "invert a" { action a = map_unary not a; } sep1 = Menuseparator; Right_shift_item = class Menuaction "Shift _Right" "shift a right by b bits" { action a b = map_binary right_shift a b; } Left_shift_item = class Menuaction "Shift _Left" "shift a left by b bits" { action a b = map_binary left_shift a b; } sep2 = Menuseparator; If_then_else_item = class Menuaction "_If Then Else" "b where a is non-zero, c elsewhere" { action a b c = map_trinary ite a b c { // can't use if_then_else, we need a true trinary ite a b c = if a then b else c; } } Band_or_item = class Menuaction "Band O_r" "or the bands of an image together" { action im = map_unary (foldr1 bitwise_or @ bandsplit) im; } Band_and_item = class Menuaction "Band A_nd" "and the bands of an image together" { action im = map_unary (foldr1 bitwise_and @ bandsplit) im; } } Math_relational_item = class Menupullright "R_elational" "comparison operations" { Equal_item = class Menuaction "_Equal to" "test a equal to b" { action a b = map_binary equal a b; } Not_equal_item = class Menuaction "_Not Equal to" "test a not equal to b" { action a b = map_binary not_equal a b; } sep1 = Menuseparator; More_item = class Menuaction "_More Than" "test a strictly greater than b" { action a b = map_binary more a b; } Less_item = class Menuaction "_Less Than" "test a strictly less than b" { action a b = map_binary less a b; } sep2 = Menuseparator; More_equal_item = class Menuaction "M_ore Than or Equal to" "test a greater than or equal to b" { action a b = map_binary more_equal a b; } Less_equal_item = class Menuaction "L_ess Than or Equal to" "test a less than or equal to b" { action a b = map_binary less_equal a b; } } Math_list_item = class Menupullright "L_ist" "operations on lists" { Head_item = class Menuaction "_Head" "first element in list" { action x = map_unary hd x; } Tail_item = class Menuaction "_Tail" "list without the first element" { action x = map_unary tl x; } Last_item = class Menuaction "_Last" "last element in list" { action x = map_unary last x; } Init_item = class Menuaction "_Init" "list without the last element" { action x = map_unary init x; } sep1 = Menuseparator; Reverse_item = class Menuaction "_Reverse" "reverse order of elements in list" { action x = map_unary reverse x; } Sort_item = class Menuaction "_Sort" "sort list into ascending order" { action x = map_unary sort x; } Make_set_item = class Menuaction "_Make Set" "remove duplicates from list" { action x = map_unary mkset equal x; } Transpose_list_item = class Menuaction "Tr_anspose" "exchange rows and columns in a list of lists" { action x = map_unary transpose x; } Concat_item = class Menuaction "_Concat" "flatten a list of lists into a single list" { action l = map_unary concat l; } sep2 = Menuseparator; Length_item = class Menuaction "L_ength" "find the length of list" { action x = map_unary len x; } Subscript_item = class Menuaction "S_ubscript" "return element n from list (index from zero)" { action n x = map_binary subscript n x; } Take_item = class Menuaction "_Take" "take the first n elements of list x" { action n x = map_binary take n x; } Drop_item = class Menuaction "_Drop" "drop the first n elements of list x" { action n x = map_binary drop n x; } sep3 = Menuseparator; Join_item = class Menuaction "_Join" "join two lists end to end" { action a b = map_binary join a b; } Cons_item = class Menuaction "C_ons" "put element a on the front of list x" { action a x = map_binary cons a x; } Zip_item = class Menuaction "_Zip" "join two lists, pairwise" { action a b = map_binary zip2 a b; } } Math_round_item = class Menupullright "_Round" "various rounding operations" { /* smallest integral value not less than x */ Ceil_item = class Menuaction "_Ceil" "smallest integral value not less than x" { action x = map_unary ceil x; } Floor_item = class Menuaction "_Floor" "largest integral value not greater than x" { action x = map_unary floor x; } Rint_item = class Menuaction "_Round to Nearest" "round to nearest integer" { action x = map_unary rint x; } } Math_fourier_item = class Menupullright "_Fourier" "Fourier transform" { Forward_item = class Menuaction "_Forward" "fourier transform of image" { action a = map_unary (rotquad @ fwfft) a; } Reverse_item = class Menuaction "_Reverse" "inverse fourier transform of image" { action a = map_unary (invfft @ rotquad) a; } Rotate_quadrants_item = class Menuaction "Rotate _Quadrants" "rotate quadrants" { action a = map_unary rotquad a; } } Math_stats_item = class Menupullright "_Statistics" "measure various statistics of objects" { Mean_item = class Menuaction "_Mean" "arithmetic mean value" { action a = map_unary mean a; } Gmean_item = class Menuaction "_Geometric Mean" "geometric mean value" { action a = map_unary meang a; } Zmean_item = class Menuaction "_Zero-excluding Mean" "mean value of non-zero elements" { action a = map_unary meanze a; } Deviation_item = class Menuaction "_Standard Deviation" "standard deviation of object" { action a = map_unary deviation a; } Zdeviation_item = class Menuaction "Z_ero-excluding Standard Deviation" "standard deviation of non-zero elements" { action a = map_unary deviationze a; } Stats_item = class Menuaction "Ma_ny Stats" "calculate many stats in a single pass" { action a = map_unary stats a; } sep1 = Menuseparator; Max_item = class Menuaction "M_aximum" "maximum of object" { action a = map_unary max a; } Min_item = class Menuaction "M_inimum" "minimum of object" { action a = map_unary min a; } Maxpos_item = class Menuaction "_Position of Maximum" "position of maximum in object" { action a = map_unary maxpos a; } Minpos_item = class Menuaction "P_osition of Minimum" "position of minimum in object" { action a = map_unary minpos a; } Gravity_item = class Menuaction "Centre of _Gravity" "position of centre of gravity" { action a = map_unary gravity a; } sep2 = Menuseparator; Count_set_item = class Menuaction "_Non-zeros" "number of non-zero elements in object" { action a = map_unary cset a { cset i = (mean (i != 0) * i.width * i.height) / 255; } } Count_clear_item = class Menuaction "_Zeros" "number of zero elements in object" { action a = map_unary cclear a { cclear i = (mean (i == 0) * i.width * i.height) / 255; } } Count_edges_item = class Menuaction "_Edges" "count average edges across or down image" { action x = class _result { _vislevel = 3; edge = Option "Count" [ "Horizontal lines", "Vertical lines" ] 0; _result = map_unary process x { process image = Number (edge.labels?edge) (im_cntlines image.value edge.value); } } } sep3 = Menuseparator; // from s15.2, p 665 NR in C Linear_regression_item = class Menuaction "_Linear Regression" "fit a line to a set of points" { action xes yes = class { _vislevel = 3; /* Hide these by default. */ details = class { ss = len xes; sx = sum xes; sy = sum yes; sxoss = sx / ss; t = map (converse subtract sxoss) xes; st2 = sum (map (converse power 2) t); } slope = sum (map2 multiply details.t yes) / details.st2; intercept = (details.sy - details.sx * slope) / details.ss; chi2 = sum (map (converse power 2) (map2 subtract (map (converse subtract intercept) yes) (map (multiply slope) xes))); siga = (chi2 / (details.ss - 2)) ** 0.5 * ((1 + details.sx ** 2 / (details.ss * details.st2)) / details.ss) ** 0.5; sigb = (chi2 / (details.ss - 2)) ** 0.5 * (1 / details.st2) ** 0.5; q = 1.0; } } Weighted_linear_regression_item = class Menuaction "_Weighted Linear Regression" "fit a line to a set of points and deviations" { action xes yes devs = class { _vislevel = 3; /* Hide these by default. */ details = class { wt = map (converse power (-0.5)) devs; ss = sum wt; sx = sum (map2 multiply xes wt); sy = sum (map2 multiply yes wt); sxoss = sx / ss; t = map2 divide (map (converse subtract sxoss) xes) devs; st2 = sum (map (converse power 2) t); } slope = sum (map2 divide (map2 multiply details.t yes) devs) / details.st2; intercept = (details.sy - details.sx * slope) / details.ss; siga = ((1 + details.sx * details.sx / (details.ss * details.st2)) / details.ss) ** 0.5; sigb = (1 / details.st2) ** 0.5; chi2 = sum (map (converse power 2) (map2 divide (map2 subtract (map (converse subtract intercept) yes) (map (multiply slope) xes)) devs)); q = gammq (0.5 * (len xes - 2)) (0.5 * chi2); } } } Math_base_item = class Menupullright "Bas_e" "convert number bases" { Hexadecimal_item = class Menuaction "_Hexadecimal" "convert to hexadecimal (base 16)" { action a = map_unary (print_base 16) a; } Binary_item = class Menuaction "_Binary" "convert to binary (base 2)" { action a = map_unary (print_base 2) a; } Octal_item = class Menuaction "_Octal" "convert to octal (base 8)" { action a = map_unary (print_base 8) a; } } nip2-8.7.0/share/nip2/compat/7.12/Tasks.def0000644000175000017500000005514013224651032014713 00000000000000Tasks_capture_item = class Menupullright "_Capture" "useful stuff for capturing and preprocessing images" { Video_item = class Menuaction "Capture _Video Frame" "capture a frame of still video" { // shortcut to prefs prefs = Workspaces.Preferences; action = class _result { _vislevel = 3; device = prefs.VIDEO_DEVICE; channel = Option "Input channel" [ "TV", "Composite 1", "Composite 2", "Composite 3" ] prefs.VIDEO_CHANNEL; b = Scale "Brightness" 0 32767 prefs.VIDEO_BRIGHTNESS; col = Scale "Colour" 0 32767 prefs.VIDEO_COLOUR; con = Scale "Contrast" 0 32767 prefs.VIDEO_CONTRAST; hue = Scale "Hue" 0 32767 prefs.VIDEO_HUE; frames = Scale "Frames to average" 0 100 prefs.VIDEO_FRAMES; mono = Toggle "Monochrome grab" prefs.VIDEO_MONO; crop = Toggle "Crop image" prefs.VIDEO_CROP; // grab, but hide it ... if we let the crop edit _raw_grab = Image (im_video_v4l1 device channel.value b.value col.value con.value hue.value frames.value); edit_crop = Region _raw_grab left top width height { left = prefs.VIDEO_CROP_LEFT; top = prefs.VIDEO_CROP_TOP; width = min_pair prefs.VIDEO_CROP_WIDTH (_raw_grab.width + left); height = min_pair prefs.VIDEO_CROP_HEIGHT (_raw_grab.height + top); } aspect_ratio = Expression "Stretch vertically by" prefs.VIDEO_ASPECT; _result = frame' { frame = edit_crop, crop = _raw_grab; frame' = colour_transform_to Image_type.B_W frame, mono = frame; } } } Smooth_image_item = class Menuaction "_Smooth" "remove small features from image" { action in = class _result { _vislevel = 3; feature = Scale "Minimum feature size" 1 50 20; _result = map_unary (smooth feature.value) in; } } Light_correct_item = class Menuaction "_Flatfield" "use white image w to flatfield image i" { action w i = map_binary wc w i { wc w i = clip2fmt i.format (w' * i) { fac = mean w / max w; w' = fac * (max w / w); } } } Image_rank_item = Filter_rank_item.Image_rank_item; Tilt_item = Filter_tilt_item; sep1 = Menuseparator; White_balance_item = class Menuaction "_White Balance" "use average of small image to set white of large image" { action a b = class _result { _vislevel = 3; white_hint = "Set image white to:"; white = Colour_picker "Lab" [100, 0, 0]; _result = map_binary wb a b { wb a b = colour_transform_to (get_type image) image_xyz' { area x = x.width * x.height; larger x y = area x > area y; args = sortc larger [a, b]; image = args?0; patch = args?1; to_xyz = colour_transform_to Image_type.XYZ; // white balance in XYZ patch_xyz = to_colour (to_xyz patch); white_xyz = to_xyz white; facs = (mean patch_xyz / mean white_xyz) * (white_xyz / patch_xyz); image_xyz = to_xyz image; image_xyz' = image_xyz * facs; } } } } Gamma_item = Image_levels_item.Gamma_item; Tone_item = Image_levels_item.Tone_item; sep2 = Menuseparator; Crop_item = Image_crop_item; Rotate_item = Image_transform_item.Rotate_item; Flip_item = Image_transform_item.Flip_item; Resize_item = Image_transform_item.Resize_item; Rubber_item = Image_transform_item.Image_rubber_item; sep3 = Menuseparator; ICC_item = Colour_icc_item; Temp_item = Colour_temperature_item; Find_calib_item = class Menuaction "Find _Colour Calibration" "find an RGB -> XYZ transform from an image of a colour chart" { action image = class _result { _check_args = [ [image, "image", check_Image] ]; _vislevel = 3; // get macbeth data file to use macbeth = Pathname "Pick a Macbeth data file" "$VIPSHOME/share/$PACKAGE/data/macbeth_lab_d65.mat"; // get max of input image _max_value = Image_format.maxval image.format; // measure chart image _camera = im_measure image.value 0 0 image.width image.height 6 4; // load true values _true_Lab = Matrix_file macbeth.value; _true_XYZ = colour_transform Image_type.LAB Image_type.XYZ _true_Lab; // get Ys of greyscale _true_grey_Y = map (extract 1) (drop 18 _true_XYZ.value); // camera greyscale (all bands) _camera_grey = drop 18 _camera.value; // normalise both to 0-1 and combine _camera_grey' = map (map (multiply (1 / _max_value))) _camera_grey; _true_grey_Y' = map (multiply (1 / 100)) _true_grey_Y; _comb = Matrix (map2 cons _true_grey_Y' _camera_grey'); // make a linearising lut ... zero on left _linear_lut = im_invertlut _comb (_max_value + 1); // and display it linearising_lut = Image _linear_lut; // map the original image through the lineariser to // get linear 0-1 RGB image _image' = hist_map linearising_lut.value image.value; // remeasure and solve for RGB -> XYZ _camera' = im_measure _image' 0 0 image.width image.height 6 4; _pinv = (transpose _camera' * _camera') ** -1; M = transpose (_pinv * transpose _camera' * _true_XYZ); // convert linear RGB camera to Lab _result = (Image @ colour_transform Image_type.XYZ Image_type.LAB @ cast_float @ recomb M) _image'; // measure again and compute dE76 _camera'' = im_measure _result.value 0 0 image.width image.height 6 4; _dEs = map abs_vec (_camera'' - _true_Lab).value; final_dE76 = mean _dEs; _max_dE = foldr max_pair 0 _dEs; _worst = index (equal _max_dE) _dEs; worst_patch = name _worst ++ " (patch " ++ print (_worst + 1) ++ ", " ++ print _max_dE ++ " dE)" { name i = macbeth_names?i, i >= 0 = "Unknown"; } } } Apply_calib_item = class Menuaction "_Apply Colour Calibration" "apply an RGB -> LAB transform to an image" { action a b = result, is_instanceof calib_name calib && is_Image image = error (_ "bad arguments to " ++ "Calibrate_image") { // the name of the calib object we need calib_name = "Tasks_capture_item.Find_calib_item.action"; // get the Calibrate_chart arg first args = sortc (const (is_instanceof calib_name)) [a, b]; calib = args?1; image = args?0; // map the original image through the lineariser to get // linear 0-1 RGB image image' = hist_map calib.linearising_lut image; // convert linear RGB camera to Lab result = colour_transform Image_type.XYZ Image_type.LAB ((float) (recomb calib.M image')); } } sep4 = Menuseparator; Graph_hist_item = Hist_find_item; Graph_bands_item = class Menuaction "Plot _Bands" "show image bands as a graph" { action x = class _result { _vislevel = 3; style = Option_enum Plot_style.names "Style" "Line"; auto = Toggle "Auto Range" true; ymin = Expression "Y range minimum" 0; ymax = Expression "Y range maximum" 1; _result = Plot options (to_image (bands (image x))).value { options = [["style", style.value]] ++ if auto then [] else [["ymin", ymin.expr], ["ymax", ymax.expr]]; // try to make something image-like from it image x = extract_area x.left x.top 1 1 x.image, is_Mark x = get_image x, has_image x = get_image (to_image x); // get as [[1],[2],[3]] bands x = transpose [map mean (bandsplit x)]; } } } } Tasks_mosaic_item = class Menupullright "_Mosaic" "build image mosaics" { /* Check and group a point list by image. */ mosaic_sort_test l = error "mosaic: not all points", !is_listof is_Mark l = error "mosaic: points not on two images", len images != 2 = error "mosaic: images do not match in format and coding", !all_equal (map get_format l) || !all_equal (map get_coding l) = error "mosaic: not same number of points on each image", !foldr1 equal (map len l') = l' { // test for all elements of a list equal all_equal l = land (map (equal (hd l)) (tl l)); // all the different images images = mkset pointer_equal (map get_image l); // find all points defined on image test_image image p = (get_image p) === image; find l image = filter (test_image image) l; // group point list by image l' = map (find l) images; } /* Sort a point group to get right before left, and within each group to * get above before below. */ mosaic_sort_lr l = l'' { // sort to get upper point first above a b = a.top < b.top; l' = map (sortc above) l; // sort to get right group before left group right a b = a?0.left > b?0.left; l'' = sortc right l'; } /* Sort a point group to get top before bottom, and within each group to * get left before right. */ mosaic_sort_tb l = l'' { // sort to get upper point first left a b = a.left < b.left; l' = map (sortc left) l; // sort to get right group before left group below a b = a?0.top > b?0.top; l'' = sortc below l'; } /* Put 'em together! Group by image, sort vertically (or horizontally) with * one of the above, transpose to get pairs matched up, and flatten again. */ mosaic_sort fn = concat @ transpose @ fn @ mosaic_sort_test; Mosaic_1point_item = class Menupullright "_One Point" "join two images with a single tie point" { check_ab_args a b = [ [a, "a", check_Mark], [b, "b", check_Mark] ]; // shortcut to prefs prefs = Workspaces.Preferences; search_area = prefs.MOSAIC_WINDOW_SIZE; object_size = prefs.MOSAIC_OBJECT_SIZE; blend_width_widget = Scale "Maximum blend width" 0 100 prefs.MOSAIC_MAX_BLEND_WIDTH; refine_widget = Toggle "Refine selected tie-points" prefs.MOSAIC_REFINE; lr_mos _refine a b = class Image _result { _check_args = check_ab_args a b; bw = blend_width_widget; refine = _refine; _result = im_lrmosaic a'.image.value b'.image.value 0 a'.left a'.top b'.left b'.top (object_size / 2) (search_area / 2) 0 bw.value, refine = im_lrmerge a'.image.value b'.image.value (b'.left - a'.left) (b'.top - a'.top) bw.value { sorted = mosaic_sort mosaic_sort_lr [a, b]; a' = sorted?0; b' = sorted?1; } } tb_mos _refine a b = class Image _result { _check_args = check_ab_args a b; bw = blend_width_widget; refine = _refine; _result = im_tbmosaic a'.image.value b'.image.value 0 a'.left a'.top b'.left b'.top (object_size / 2) (search_area / 2) 0 bw.value, refine = im_tbmerge a'.image.value b'.image.value (b'.left - a'.left) (b'.top - a'.top) bw.value { sorted = mosaic_sort mosaic_sort_tb [a, b]; a' = sorted?0; b' = sorted?1; } } Left_right_item = class Menuaction "_Left to Right" "join two images left-right with a single tie point" { action a b = lr_mos refine_widget a b; } Top_bottom_item = class Menuaction "_Top to Bottom" "join two images top-bottom with a single tie point" { action a b = tb_mos refine_widget a b; } sep1 = Menuseparator; Left_right_manual_item = class Menuaction "Manual L_eft to Right" "join left-right, no auto-adjust of tie points" { action a b = lr_mos false a b; } Top_bottom_manual_item = class Menuaction "Manual T_op to Bottom" "join top-bottom, no auto-adjust of tie points" { action a b = tb_mos false a b; } } Mosaic_2point_item = class Menupullright "_Two Point" "join two images with two tie points" { check_abcd_args a b c d = [ [a, "a", check_Mark], [b, "b", check_Mark], [c, "c", check_Mark], [d, "d", check_Mark] ]; // shortcut to prefs prefs = Workspaces.Preferences; search_area = prefs.MOSAIC_WINDOW_SIZE; object_size = prefs.MOSAIC_OBJECT_SIZE; blend_width_widget = Scale "Maximum blend width" 0 100 prefs.MOSAIC_MAX_BLEND_WIDTH; refine_widget = Toggle "Refine selected tie-points" prefs.MOSAIC_REFINE; Left_right_item = class Menuaction "_Left to Right" "join two images left-right with a pair of tie points" { action a b c d = class Image _result { _check_args = check_abcd_args a b c d; bw = blend_width_widget; refine = refine_widget; _result = im_lrmosaic1 a'.image.value b'.image.value 0 a'.left a'.top b'.left b'.top c'.left c'.top d'.left d'.top (object_size / 2) (search_area / 2) 0 bw.value, refine = im_lrmerge1 a'.image.value b'.image.value a'.left a'.top b'.left b'.top c'.left c'.top d'.left d'.top bw.value { sorted = mosaic_sort mosaic_sort_lr [a, b, c, d]; a' = sorted?0; b' = sorted?1; c' = sorted?2; d' = sorted?3; } } } Top_bottom_item = class Menuaction "_Top to Bottom" "join two images top-bottom with a pair of tie points" { action a b c d = class Image _result { _check_args = check_abcd_args a b c d; bw = blend_width_widget; refine = refine_widget; _result = im_tbmosaic1 a'.image.value b'.image.value 0 a'.left a'.top b'.left b'.top c'.left c'.top d'.left d'.top (object_size / 2) (search_area / 2) 0 bw.value, refine = im_tbmerge1 a'.image.value b'.image.value a'.left a'.top b'.left b'.top c'.left c'.top d'.left d'.top bw.value { sorted = mosaic_sort mosaic_sort_tb [a, b, c, d]; a' = sorted?0; b' = sorted?1; c' = sorted?2; d' = sorted?3; } } } } sep1 = Menuseparator; Balance_item = class Menuaction "Mosaic _Balance" "disassemble mosaic, scale brightness to match, reassemble" { action x = map_unary balance x { balance x = oo_unary_function balance_op x, is_class x = im_global_balancef x Workspaces.Preferences.MOSAIC_BALANCE_GAMMA, is_image x = error (_ "bad arguments to " ++ "balance") { balance_op = Operator "balance" balance Operator_type.COMPOUND_REWRAP false; } } } //////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// Manual_balance_item = class Menupullright "Manual B_alance" "balance tonality of user defined areas" { prefs = Workspaces.Preferences; //////////////////////////////////////////////////////////////////////////////////// Balance_find_item = class Menuaction "_Find Values" "calculates values required to scale and offset balance user defined areas in a given image" /* Outputs a matrix of scale and offset values. Eg. Values required to balance the secondary * structure in an X-ray image. Takes an X-ray image an 8-bit control mask and a list of * 8-bit reference masks, where the masks are white on a black background. */ { action im_in m_control m_group = class Matrix values{ _vislevel = 1; _control_im = if m_control then im_in else 0; _control_meanmax = so_meanmax _control_im; _group_check = is_Group m_group; _m_list = m_group.value, _group_check = m_group; process m_current mat_in = mat_out {so_values = so_calculate _control_meanmax im_in m_current; mat_out = join [so_values] mat_in;} values = (foldr process [] _m_list); } } //////////////////////////////////////////////////////////////////////////////////// Balance_check_item = class Menuaction "_Check Values" "allows calculated set of scale and offset values to be checked and adjusted if required" /* Outputs adjusted matrix of scale and offset values and scale and offset image maps. * Eg. Check values required to balance the secondary structure in an X-ray image. * Takes an X-ray image an 8-bit control mask and a list of 8-bit reference masks, * where the masks are white on a black background. */ { action im_in m_matrix m_group = class Image value { _vislevel = 3; blur = Scale "Blur" 1 10 1; _blur = (blur.value/2 + 0.5), blur.value > 1 = 1; _group_check = is_Group m_group; _m_list = m_group.value, _group_check = m_group; adjust = Matrix_rec mat_a { no_masks = len _m_list; mat_a = replicate no_masks [0, 0]; } // Apply the user defined adjustments to the inputted matrix of scale and offset values _adjusted = map2 fn_adjust m_matrix.value adjust.value; fn_adjust a b = [(a?0 + b?0), (a?1 + (a?1 * b?1))]; _scaled_ims = map (fn_so_apply im_in) _adjusted; fn_so_apply im so = map_unary adj im {adj im = im * (so?0) + (so?1);} _im_pairs = zip2 _m_list _scaled_ims; // Prepare black images as starting point. //////////// _blank = image_new (_m_list?0).width (_m_list?0).height 1 6 Image_coding.NOCODING 1 0 0 0; _pair_start = [(_blank + 1), _blank]; Build = Toggle "Build Scale and Offset Correction Images" false; Output = class { _vislevel = 1; scale_im = _build?0; offset_im = _build?1; so_values = Matrix _adjusted; _build = [Image so_images?0, Image so_images?1], Build = ["Scale image not built.", "Offset image not built."] { m_list' = transpose [_m_list]; m_all = map2 join m_list' _adjusted; so_images = foldr process_2 _pair_start m_all; } } value = (foldr process_1 im_in_b _im_pairs).value {im_in_b = map_unary cast_float im_in;} process_1 m_current im_start = im_out { bl_mask = convsep (matrix_blur _blur) (get_image m_current?0); blended_im = im_blend bl_mask (m_current?1).value im_start.value; im_out = Image (clip2fmt im_start.format blended_im); } // Process for building scale and offset image. process_2 current p_start = p_out { im_s = if ((current?0) > 128) then current?1 else _blank; im_o = if ((current?0) > 128) then current?2 else _blank; im_s' = convsep (matrix_blur _blur) (im_s != 0); im_o' = convsep (matrix_blur _blur) (im_o != 0); im_s'' = im_blend im_s'.value im_s.value p_start?0; im_o'' = im_blend im_o'.value im_o.value p_start?1; p_out = [im_s'', im_o'']; } } } //////////////////////////////////////////////////////////////////////////////////// Balance_apply_item = class Menuaction "_Apply Values" "apply scale and offset corrections, defined as image maps, to a given image" /* Outputs the balanced image. Eg. Balance the secondary structure in an X-ray image. Takes an * X-ray image an 32-bit float scale image and a 32-bit offset image. */ { action im_in scale_im offset_im = class Image value { _vislevel = 1; xfactor = im_in.width/scale_im.width; yfactor = im_in.height/scale_im.height; _scale_im = resize xfactor yfactor 1 scale_im; _offset_im = resize xfactor yfactor 1 offset_im; value = get_image ( clip2fmt im_in.format ( ( im_in * _scale_im ) + _offset_im ) ); } } } Tilt_item = Filter_tilt_item; sep2 = Menuseparator; Rebuild_item = class Menuaction "_Rebuild" "disassemble mosaic, substitute image files and reassemble" { action x = class _result { _vislevel = 3; old = String "In each filename, replace" "foo"; new = String "With" "bar"; _result = map_unary remosaic x { remosaic image = Image (im_remosaic image.value old.value new.value); } } } sep3 = Menuseparator; Clone_area_item = class Menuaction "_Clone Area" "replace dark or light section of im1 with pixels from im2" { action im1 im2 = class _result { _check_args = [ [im1, "im1", check_Image], [im2, "im2", check_Image] ]; _vislevel = 3; /* Region on first image placed in the top left hand corner, * positioned and size relative to the height and width of im1. */ r1 = Region_relative im1 0.05 0.05 0.05 0.05; /* Mark on second image placed in the top left hand corner, * positioned relative to the height and width of im2. Used to * define _r2, the region from which the section of image is cloned * from. */ p2 = Mark_relative im2 0.05 0.05; _r2 = Region im2 p2.left p2.top r1.width r1.height; mask = [r1 <= Options.sc, r1 >= Options.sc]?(Options.replace); Options = class { _vislevel = 3; pause = Toggle "Pause process" true; /* Option toggle used to define whether the user is * replacing a dark or a light area. */ replace = Option "Replace" [ "A Dark Area", "A Light Area" ] 1; // Used to select the area to be replaced. sc = Scale "Scale cutoff" 0.01 mx (mx / 2) {mx = Image_format.maxval im1.format;} //Allows replacement with scale&offset balanced gaussian noise. balance = Toggle "Balance cloned data to match surroundings." true; //Allows replacement with scale&offset balanced //gaussian noise. process = Toggle "Replace area with Gaussian noise." false; } _result = im1, Options.pause = Image (im_insert im1.value patch r1.left r1.top) { r2 = Region im2 p2.left p2.top r1.width r1.height; ref_meanmax = so_meanmax (if mask then 0 else r1); mask8 = Matrix_mor [[255, 255, 255], [255, 255, 255], [255, 255, 255]]; mask_a = map_unary (dilate mask8) mask; mask_b = convsep (matrix_blur 2) mask_a; patch = so_balance ref_meanmax r1 r2 mask_b Options.process, Options.balance = so_balance ref_meanmax r1 r2 mask_b Options.process, Options.process = im_blend (get_image mask_b) (get_image r2) (get_image r1); } } } } Tasks_frame_item = Frame_item; Tasks_print_item = class Menupullright "_Print" "useful stuff for image output" { Rotate_item = Image_transform_item.Rotate_item; Flip_item = Image_transform_item.Flip_item; Resize_item = Image_transform_item.Resize_item; Tone_item = Image_levels_item.Tone_item; Sharpen_item = class Menuaction "_Sharpen" "unsharp filter tuned for typical inkjet printers" { action x = class _result { _vislevel = 3; target_dpi = Option "Sharpen for print at" [ "400 dpi", "300 dpi", "150 dpi", "75 dpi" ] 1; _result = map_unary process x { process image = sharpen params?0 params?1 params?2 params?3 params?4 params?5 (colour_transform_to Image_type.LABQ image) { // sharpen params for various dpi // just change the size of the area we search param_table = [ [7, 2.5, 40, 20, 0.5, 1.5], [5, 2.5, 40, 20, 0.5, 1.5], [3, 2.5, 40, 20, 0.5, 1.5], [11, 2.5, 40, 20, 0.5, 1.5] ]; params = param_table?target_dpi; } } } } sep1 = Menuseparator; Temp_item = Colour_temperature_item; ICC_item = Colour_icc_item; } nip2-8.7.0/share/nip2/compat/7.12/_types.def0000644000175000017500000011500513224651032015126 00000000000000 /* Lots of little arg checks. Global for convenience. */ check_any = [(const true), _ "any"]; check_bool = [is_bool, _ "boolean"]; check_real = [is_real, _ "real"]; check_ureal = [is_ureal, _ "unsigned real"]; check_preal = [is_preal, _ "positive real"]; check_list = [is_list, _ "list"]; check_real_list = [is_real_list, _ "list of real"]; check_string = [is_string, _ "string"]; check_string_list = [is_string_list, _ "list of string"]; check_int = [is_int, _ "integer"]; check_uint = [is_uint, _ "unsigned integer"]; check_pint = [is_pint, _ "positive integer"]; check_matrix = [is_matrix, _ "rectangular array of real"]; check_matrix_display = [Matrix_display.is_display, _ "0, 1, 2 or 3"]; check_image = [is_image, _ "image"]; check_xy_list = [is_xy_list, _ "list of form [[1, 2], [3, 4], [5, 6], ...]"]; check_instance name = [is_instanceof name, name]; check_Image = check_instance "Image"; check_Matrix = [is_Matrix, _ "Matrix"]; check_colour_space = [is_colour_space, "colour_space"]; check_rectangular = [is_rectangular, _ "rectangular [[*]]"]; check_Guide = [is_Guide, _ "HGuide or VGuide"]; check_Colour = check_instance (_ "Colour"); check_Mark = check_instance (_ "Mark"); /* Check a set of args to a class. Two members to look at: _check_args and * _check_all. * * - each line in _check_args is [arg, "arg name", [test_fn, "arg type"]] * same number of lines as there are args * * stuff like "arg 2 must be real" * * - each line in _check_all is [test, "description"] * any number of lines * * stuff like "to must be greater than from" * * generate an error dialog with a helpful message on failure. * * Have as a separate function to try to keep the size of _Object down a bit. */ check_args x = error message, badargs != [] || badalls != [] = check_args x.super, x.super != [] = x { argcheck = x._check_args; allcheck = x._check_all; // join two strings up with a separator string join_sep j a b = a ++ j ++ b; // indent string indent = " "; // test for a condition in a check line fails test_fail x = ! x?0; // set of failed argcheck indexes badargs = map (extract 1) (filter test_fail (zip2 (map testarg argcheck) [0..])) { testarg x = x?2?0 x?0; } // set of failed allcheck indexes badalls = map (extract 1) (filter test_fail (zip2 (map hd allcheck) [0..])); // the error message message = _ "bad arguments to " ++ "\"" ++ x.name ++ "\"\n" ++ argmsg ++ allmsg ++ "\n" ++ _ "usage" ++ "\n" ++ indent ++ usage ++ "\n" ++ _ "where" ++ "\n" ++ arg_types ++ extra; // make the failed argcheck messages ... eg. ""value" should be // real, you passed " etc. argmsg = concat (map fmt badargs) { fmt n = indent ++ "\"" ++ argcheck?n?1 ++ "\"" ++ _ " should be of type " ++ argcheck?n?2?1 ++ ", " ++ _ "you passed" ++ ":\n" ++ indent ++ indent ++ print argcheck?n?0 ++ "\n"; } // make the failed allcheck messages ... eg "condition failed: // x < y" ... don't make a message if any typechecks have // failed, as we'll probably error horribly allmsg = [], badargs != [] = concat (map fmt badalls) ++ _ "you passed" ++ "\n" ++ concat (map fmt_arg argcheck) { fmt n = _ "condition failed" ++ ": " ++ allcheck?n?1 ++ "\n"; fmt_arg l = indent ++ l?1 ++ " = " ++ print l?0 ++ "\n"; } // make usage note usage = x.name ++ " " ++ foldr (join_sep " ") [] (map (extract 1) argcheck); // make arg type notes arg_types = foldr (join_sep "\n") [] (map fmt argcheck) { fmt l = indent ++ l?1 ++ " is of type " ++ l?2?1; } // extra bit at the bottom, if we have any conditions extra = [], allcheck == [] = _ "and" ++ "\n" ++ all_desc; // make a list of all the allcheck descriptions, with a few // spaces in front all_desc_list = map (join indent @ extract 1) allcheck; // join em up to make a set of condition notes all_desc = foldr (join_sep "\n") [] all_desc_list; } /* Operator overloading stuff. */ Operator_type = class { ARITHMETIC = 1; // eg. add RELATIONAL = 2; // eg. less COMPOUND = 3; // eg. max/mean/etc. COMPOUND_REWRAP = 4; // eg. transpose } Operator op_name fn type symmetric = class { } /* Form the converse of an Operator. */ oo_converse op = Operator (converse_name op.op_name) (converse op.fn) op.type op.symmetric { converse_name x = init x, last x == last "'" = x ++ "'"; } /* Given an operator name, look up the definition. */ oo_binary_lookup op_name = matches?0, matches != [] = error (_ "unknown binary operator" ++ ": " ++ print op_name) { operator_table = [ Operator "add" add Operator_type.ARITHMETIC true, Operator "subtract" subtract Operator_type.ARITHMETIC false, Operator "remainder" remainder Operator_type.ARITHMETIC false, Operator "power" power Operator_type.ARITHMETIC false, Operator "subscript" subscript Operator_type.ARITHMETIC false, Operator "left_shift" left_shift Operator_type.ARITHMETIC false, Operator "right_shift" right_shift Operator_type.ARITHMETIC false, Operator "divide" divide Operator_type.ARITHMETIC false, Operator "join" join Operator_type.ARITHMETIC false, Operator "multiply" multiply Operator_type.ARITHMETIC true, Operator "logical_and" logical_and Operator_type.ARITHMETIC true, Operator "logical_or" logical_or Operator_type.ARITHMETIC true, Operator "bitwise_and" bitwise_and Operator_type.ARITHMETIC true, Operator "bitwise_or" bitwise_or Operator_type.ARITHMETIC true, Operator "eor" eor Operator_type.ARITHMETIC true, Operator "comma" comma Operator_type.ARITHMETIC false, Operator "if_then_else" if_then_else Operator_type.ARITHMETIC false, Operator "equal" equal Operator_type.RELATIONAL true, Operator "not_equal" not_equal Operator_type.RELATIONAL true, Operator "less" less Operator_type.RELATIONAL false, Operator "less_equal" less_equal Operator_type.RELATIONAL false ]; matches = filter test_name operator_table; test_name x = x.op_name == op_name; } /* Given an operator name, look up a function that implements that * operator. */ oo_unary_lookup op_name = matches?0, matches != [] = error (_ "unknown unary operator" ++ ": " ++ print op_name) { operator_table = [ /* Operators. */ Operator "cast_signed_char" cast_signed_char Operator_type.ARITHMETIC false, Operator "cast_unsigned_char" cast_unsigned_char Operator_type.ARITHMETIC false, Operator "cast_signed_short" cast_signed_short Operator_type.ARITHMETIC false, Operator "cast_unsigned_short" cast_unsigned_short Operator_type.ARITHMETIC false, Operator "cast_signed_int" cast_signed_int Operator_type.ARITHMETIC false, Operator "cast_unsigned_int" cast_unsigned_int Operator_type.ARITHMETIC false, Operator "cast_float" cast_float Operator_type.ARITHMETIC false, Operator "cast_double" cast_double Operator_type.ARITHMETIC false, Operator "cast_complex" cast_complex Operator_type.ARITHMETIC false, Operator "cast_double_complex" cast_double_complex Operator_type.ARITHMETIC false, Operator "unary_minus" unary_minus Operator_type.ARITHMETIC false, Operator "negate" negate Operator_type.RELATIONAL false, Operator "complement" complement Operator_type.ARITHMETIC false, Operator "unary_plus" unary_plus Operator_type.ARITHMETIC false, /* Built in projections. */ Operator "re" re Operator_type.ARITHMETIC false, Operator "im" im Operator_type.ARITHMETIC false, Operator "hd" hd Operator_type.ARITHMETIC false, Operator "tl" tl Operator_type.ARITHMETIC false, /* Maths builtins. */ Operator "sin" sin Operator_type.ARITHMETIC false, Operator "cos" cos Operator_type.ARITHMETIC false, Operator "tan" tan Operator_type.ARITHMETIC false, Operator "asin" asin Operator_type.ARITHMETIC false, Operator "acos" acos Operator_type.ARITHMETIC false, Operator "atan" atan Operator_type.ARITHMETIC false, Operator "log" log Operator_type.ARITHMETIC false, Operator "log10" log10 Operator_type.ARITHMETIC false, Operator "exp" exp Operator_type.ARITHMETIC false, Operator "exp10" exp10 Operator_type.ARITHMETIC false, Operator "ceil" ceil Operator_type.ARITHMETIC false, Operator "floor" floor Operator_type.ARITHMETIC false ]; matches = filter test_name operator_table; test_name x = x.op_name == op_name; } /* Find the matching methods in a method table. */ oo_method_lookup table = map (extract 0) (filter (extract 1) table); /* A binary op: a is a class, b may be a class ... eg. "add" a b two obvious ways to find a method: - a.oo_binary_search "add" (+) b - b.oo_binary_search "add'" (converse (+)) a, is_class b if these fail but op is a symmetric operator (eg. a + b == b + a), we can also try reversing the args - a.oo_binary_search "add'" (converse (+)) b - b.oo_binary_search "add" (+) a, is_class b */ oo_binary_function op a b = matches1?0, matches1 != [] = matches2?0, is_class b && matches2 != [] = matches3?0, op.symmetric && matches3 != [] = matches4?0, op.symmetric && is_class b && matches4 != [] = error (_ "No method found for binary operator." ++ "\n" ++ _ "left" ++ " = " ++ print a ++ "\n" ++ _ "operator" ++ " = " ++ op.op_name ++ "\n" ++ _ "right" ++ " = " ++ print b) { matches1 = oo_method_lookup (a.oo_binary_table op b); matches2 = oo_method_lookup (b.oo_binary_table (oo_converse op) a); matches3 = oo_method_lookup (a.oo_binary_table (oo_converse op) b); matches4 = oo_method_lookup (b.oo_binary_table op a); } /* A binary op: a is not a class, b is a class ... eg. "subtract" a b only one way to find a method: - b.oo_binary_search "subtract'" (converse (-)) a if this fails but op is a symmetric operator (eg. a + b == b + a), we can try reversing the args - b.oo_binary_search "add" (+) a, is_class b */ oo_binary'_function op a b = matches1?0, matches1 != [] = matches2?0, op.symmetric && matches2 != [] = error (_ "No method found for binary operator." ++ "\n" ++ _ "left" ++ " = " ++ print a ++ "\n" ++ _ "operator" ++ " = " ++ op.op_name ++ "\n" ++ _ "right" ++ " = " ++ print b) { matches1 = oo_method_lookup (b.oo_binary_table (oo_converse op) a); matches2 = oo_method_lookup (b.oo_binary_table op a); } oo_unary_function op x = matches?0, matches != [] = error (_ "No method found for unary operator." ++ "\n" ++ _ "operator" ++ " = " ++ op.op_name ++ "\n" ++ _ "argument" ++ " = " ++ print x) { matches = oo_method_lookup (x.oo_unary_table op); } /* Base class for nip's built-in classes ... base check function, base * operator overload functions. */ _Object = class { check = check_args this; _check_args = []; _check_all = []; /* Operator overloading stuff. */ oo_binary op x = oo_binary_function (oo_binary_lookup op) this x; oo_binary' op x = oo_binary'_function (oo_binary_lookup op) x this; oo_unary op = oo_unary_function (oo_unary_lookup op) this; /* Provide a fallback for class == thing ... just use pointer * equality. */ oo_binary_table op x = [ [pointer_equal this x, op.op_name == "equal" || op.op_name == "equal'"], [not_pointer_equal this x, op.op_name == "not_equal" || op.op_name == "not_equal'"] ]; oo_unary_table op = []; } /* A list of things. Do automatic iteration of unary and binary operators on * us. * List [1, 2] + [2, 3] -> List [3, 5] * hd (List [2, 3]) -> 2 * List [] == [] -> true */ List value = class _Object { _check_args = [ [value, "value", check_list] ]; // methods oo_binary_table op x = [ [apply2 op value x', op.op_name == "subscript" || op.op_name == "subscript'" || op.op_name == "equal" || op.op_name == "equal'"], [this.List (apply2 op value x'), op.op_name == "join" || op.op_name == "join'"], [this.List (map2 (apply2 op) value x'), is_list x'], [this.List (map (apply2 op' x) value), true] ] { op' = oo_converse op; // strip the List wrapper, if any x' = x.value, is_List x = x; apply2 op x1 x2 = oo_binary_function op x1 x2, is_class x1 = oo_binary'_function op x1 x2, is_class x2 = op.fn x1 x2; }; oo_unary_table op = [ [apply value, op.op_name == "hd" || op.op_name == "tl"], [this.List (map apply value), true] ] { apply x = oo_unary_function op x, is_class x = op.fn x; } } /* A group of things. Loop the operation over the group. */ Group value = class _Object { _check_args = [ [value, "value", check_list] ]; // methods oo_binary_table op x = [ // if_then_else is really a trinary operator [map_trinary ite this x?0 x?1, op.op_name == "if_then_else"], [map_binary op.fn this x, is_Group x], [map_unary ((converse op.fn) x) this, true] ] { // need ite as a true trinary ite a b c = if a then b else c; // we can't call map_trinary directly, since it uses Group and we // don't support mutually recursive top-level functions :-( // copy-paste it here, keep in sync with the version in _stdenv map_nary fn args = fn args, groups == [] = Group (map process [0, 1 .. shortest - 1]) { groups = filter is_Group args; shortest = foldr1 min_pair (map (len @ get_value) groups); process n = [], lor (map (is_noval n) args) = map_nary fn (map (extract n) args) { extract n arg = arg.value?n, is_Group arg = arg; is_noval n arg = is_Group arg && arg.value?n == []; } } map_unary fn a = map_nary (list_1ary fn) [a]; map_binary fn a b = map_nary (list_2ary fn) [a, b]; map_trinary fn a b c = map_nary (list_3ary fn) [a, b, c]; } oo_unary_table op = [ [map_unary op.fn this, true] ] { // we can't call map_trinary directly, since it uses Group and we // don't support mutually recursive top-level functions :-( // copy-paste it here, keep in sync with the version in _stdenv map_nary fn args = fn args, groups == [] = Group (map process [0, 1 .. shortest - 1]) { groups = filter is_Group args; shortest = foldr1 min_pair (map (len @ get_value) groups); process n = [], lor (map (is_noval n) args) = map_nary fn (map (extract n) args) { extract n arg = arg.value?n, is_Group arg = arg; is_noval n arg = is_Group arg && arg.value?n == []; } } map_unary fn a = map_nary (list_1ary fn) [a]; } } /* Single real number ... eg slider. */ Real value = class _Object { _check_args = [ [value, "value", check_real] ]; // methods oo_binary_table op x = [ [this.Real (op.fn this.value x.value), is_Real x && op.type == Operator_type.ARITHMETIC], [this.Real (op.fn this.value x), is_real x && op.type == Operator_type.ARITHMETIC], [op.fn this.value x.value, is_Real x && op.type == Operator_type.RELATIONAL], [op.fn this.value x, !is_class x] ] ++ super.oo_binary_table op x; oo_unary_table op = [ [this.Real (op.fn this.value), op.type == Operator_type.ARITHMETIC], [op.fn this.value, true] ]; } /* Single bool ... eg Toggle. */ Bool value = class _Object { _check_args = [ [value, "value", check_bool] ]; // methods oo_binary_table op x = [ [op.fn this.value x, op.op_name == "if_then_else"], [this.Bool (op.fn this.value x.value), is_Bool x], [this.Bool (op.fn this.value x), is_bool x] ] ++ super.oo_binary_table op x; oo_unary_table op = [ [this.Bool (op.fn this.value), op.type == Operator_type.ARITHMETIC || op.type == Operator_type.RELATIONAL], [op.fn this.value, true] ]; } /* An editable string. */ String caption value = class _Object { _check_args = [ [caption, "caption", check_string], [value, "value", check_string] ]; } /* An editable real number. */ Number caption value = class scope.Real value { _check_args = [ [caption, "caption", check_string] ]; Real x = this.Number caption x; } /* An editable expression. */ Expression caption expr = class (if is_class expr then expr else _Object) { _check_args = [ [caption, "caption", check_string], [expr, "expr", check_any] ]; } /* A ticking clock. */ Clock interval value = class scope.Real value { _check_args = [ [interval, "interval", check_real] ]; Real x = this.Clock interval x; } /* An editable filename. */ Pathname caption value = class _Object { _check_args = [ [caption, "caption", check_string], [value, "value", check_string] ]; } /* An editable fontname. */ Fontname caption value = class _Object { _check_args = [ [caption, "caption", check_string], [value, "value", check_string] ]; } /* Vector type ... just a finite list of real. Handy for wrapping an * argument to eg. im_lintra_vec. Make it behave like a single pixel image. */ Vector value = class _Object { _check_args = [ [value, "value", check_real_list] ]; bands = len value; // methods oo_binary_table op x = [ // Vector ++ Vector means bandwise join [this.Vector (op.fn this.value x.value), is_Vector x && (op.op_name == "join" || op.op_name == "join'")], [this.Vector (op.fn this.value [get_number x]), has_number x && (op.op_name == "join" || op.op_name == "join'")], // Vector ? number means extract element [op.fn this.value (get_real x), has_real x && (op.op_name == "subscript" || op.op_name == "subscript'")], // extra check for lengths equal [this.Vector (map_binaryl op.fn this.value x.value), is_Vector x && len value == len x.value && op.type == Operator_type.ARITHMETIC], [this.Vector (map_binaryl op.fn this.value (get_real x)), has_real x && op.type == Operator_type.ARITHMETIC], // need extra length check [this.Vector (map bool_to_real (map_binaryl op.fn this.value x.value)), is_Vector x && len value == len x.value && op.type == Operator_type.RELATIONAL], [this.Vector (map bool_to_real (map_binaryl op.fn this.value (get_real x))), has_real x && op.type == Operator_type.RELATIONAL], [this.Vector (op.fn this.value x.value), is_Vector x && len value == len x.value && op.type == Operator_type.COMPOUND_REWRAP], [x.Image (vec op'.op_name x.value value), is_Image x], [vec op'.op_name x value, is_image x], [op.fn this.value x, is_real x] ] ++ super.oo_binary_table op x { op' = oo_converse op; }; oo_unary_table op = [ [this.Vector (map_unaryl op.fn this.value), op.type == Operator_type.ARITHMETIC], [this.Vector (map bool_to_real (map_unaryl op.fn this.value)), op.type == Operator_type.RELATIONAL], [this.Vector (op.fn this.value), op.type == Operator_type.COMPOUND_REWRAP], [op.fn this.value, true] ]; // turn an ip bool (or a number, for Vector) into VIPSs 255/0 bool_to_real x = 255, is_bool x && x = 255, is_number x && x != 0 = 0; } /* A rectangular array of real. */ Matrix_base value = class _Object { _check_args = [ [value, "value", check_matrix] ]; // calculate these from value width = len value?0; height = len value; // extract a rectanguar area extract left top width height = this.Matrix_base ((map (take width) @ map (drop left) @ take height @ drop top) value); // methods oo_binary_table op x = [ // mat multiply is special [this.Matrix_base mul.value, is_Matrix x && op.op_name == "multiply"], [this.Matrix_base mul'.value, is_Matrix x && op.op_name == "multiply'"], // mat divide is also special [this.Matrix_base div.value, is_Matrix x && op.op_name == "divide"], [this.Matrix_base div'.value, is_Matrix x && op.op_name == "divide'"], // power -1 means invert [this.Matrix_base inv.value, is_real x && x == -1 && op.op_name == "power"], [this.Matrix_base sq.value, is_real x && x == 2 && op.op_name == "power"], [error "matrix **-1 and **2 only", op.op_name == "power" || op.op_name == "power'"], // matrix op vector ... treat a vector as a 1 row matrix [this.Matrix_base (map (map_binaryl op'.fn x.value) this.value), is_Vector x && op.type == Operator_type.ARITHMETIC], [this.Matrix_base (map_binaryl op.fn this.value x.value), (is_Matrix x || is_Real x) && op.type == Operator_type.ARITHMETIC], [this.Matrix_base (map_binaryl op.fn this.value x), is_real x && op.type == Operator_type.ARITHMETIC], // compound ... don't do iteration [this.Matrix_base (op.fn this.value x.value), (is_Matrix x || is_Real x || is_Vector x) && op.type == Operator_type.COMPOUND_REWRAP] ] ++ super.oo_binary_table op x { mul = im_matmul this x; mul' = im_matmul x this; div = im_matmul this (im_matinv x); div' = im_matmul x (im_matinv this); inv = im_matinv this; sq = im_matmul this this; op' = oo_converse op; } oo_unary_table op = [ [this.Matrix_base (map_unaryl op.fn this.value), op.type == Operator_type.ARITHMETIC], [this.Matrix_base (op.fn this.value), op.type == Operator_type.COMPOUND_REWRAP], [op.fn this.value, true] ]; } /* How to display a matrix: text, sliders, toggles, or text plus scale/offset. */ Matrix_display = class { text = 0; slider = 1; toggle = 2; text_scale_offset = 3; is_display = member [text, slider, toggle, text_scale_offset]; } /* A matrix as VIPS sees them ... add scale, offset and filename. For nip, add * a display type as well to control how the widget renders. */ Matrix_vips value scale offset filename display = class scope.Matrix_base value { _check_args = [ [scale, "scale", check_real], [offset, "offset", check_real], [filename, "filename", check_string], [display, "display", check_matrix_display] ]; Matrix_base x = this.Matrix_vips x scale offset filename display; } /* A plain 'ol matrix which can be passed to VIPS. */ Matrix value = class Matrix_vips value 1 0 "" Matrix_display.text {} /* Specialised constructors ... for convolutions, recombinations and * morphologies. */ Matrix_con scale offset value = class Matrix_vips value scale offset "" Matrix_display.text_scale_offset {}; Matrix_rec value = class Matrix_vips value 1 0 "" Matrix_display.slider {}; Matrix_mor value = class Matrix_vips value 1 0 "" Matrix_display.toggle {}; Matrix_file filename = (im_read_dmask @ expand @ search) filename; /* A CIE colour ... a triple, plus a format (eg XYZ, Lab etc) */ Colour colour_space value = class scope.Vector value { _check_args = [ [colour_space, "colour_space", check_colour_space] ]; _check_all = [ [len value == 3, "len value == 3"] ]; Vector x = this.Colour colour_space x; // make a colour-ish thing from an image // back to Colour if we have another 3 band image // to a vector if bands > 1 // to a number otherwise itoc im = this.Colour nip_type (to_matrix im).value?0, bands == 3 = scope.Vector (map mean (bandsplit im)), bands > 1 = mean im { type = get_header "Type" im; bands = get_header "Bands" im; nip_type = Image_type.colour_spaces.lookup 1 0 type; } // methods oo_binary_table op x = [ [itoc (op.fn ((float) (to_image this).value) ((float) (to_image x).value)), // here REWRAP means go via image op.type == Operator_type.COMPOUND_REWRAP] ] ++ super.oo_binary_table op x; oo_unary_table op = [ [itoc (op.fn ((float) (to_image this).value)), op.type == Operator_type.COMPOUND_REWRAP] ] ++ super.oo_unary_table op; } // a subclass with widgets for picking a space and value Colour_picker default_colour default_value = class Colour space.value_name colour.expr { _vislevel = 3; space = Option_enum Image_type.colour_spaces "Colour space" default_colour; colour = Expression "Colour value" default_value; Colour_edit colour_space value = Colour_picker colour_space value; } /* Base scale type. */ Scale caption from to value = class scope.Real value { _check_args = [ [caption, "caption", check_string], [from, "from", check_real], [to, "to", check_real] ]; _check_all = [ [from < to, "from < to"] ]; Real x = this.Scale caption from to x; // methods oo_binary_table op x = [ [this.Scale caption (op.fn this.from x.from) (op.fn this.to x.to) (op.fn this.value x.value), is_Scale x && op.type == Operator_type.ARITHMETIC], [this.Scale caption (op.fn this.from x) (op.fn this.to x) (op.fn this.value x), is_real x && op.type == Operator_type.ARITHMETIC] ] ++ super.oo_binary_table op x; } /* Base toggle type. */ Toggle caption value = class scope.Bool value { _check_args = [ [caption, "caption", check_string], [value, "value", check_bool] ]; Bool x = this.Toggle caption x; } /* Base option type. */ Option caption labels value = class scope.Real value { _check_args = [ [caption, "caption", check_string], [labels, "labels", check_string_list], [value, "value", check_uint] ]; } Option_enum enum caption value_name = class Option caption enum.names (index (equal value_name) enum.names) { // corresponding thing value_thing = enum.get_thing value_name; Option_edit caption labels value = this.Option_enum enum caption (enum.names ? value); } /* A rectangle. width and height can be -ve. */ Rect left top width height = class _Object { _check_args = [ [left, "left", check_real], [top, "top", check_real], [width, "width", check_real], [height, "height", check_real] ]; // derived right = left + width; bottom = top + height; oo_binary_table op x = [ [equal x, is_Rect x && (op.op_name == "equal" || op.op_name == "equal'")], [!equal x, is_Rect x && (op.op_name == "not_equal" || op.op_name == "not_equal'")], // binops with a complex are the same as (comp op comp) [oo_binary_function op this (Rect (re x) (im x) 0 0), is_complex x], // all others are just pairwise [this.Rect left' top' width' height', is_Rect x && op.type == Operator_type.ARITHMETIC], [this.Rect left'' top'' width'' height'', has_number x && op.type == Operator_type.ARITHMETIC] ] ++ super.oo_binary_table op x { left' = op.fn left x.left; top' = op.fn top x.top; width' = op.fn width x.width; height' = op.fn height x.height; left'' = op.fn left x'; top'' = op.fn top x'; width'' = op.fn width x'; height'' = op.fn height x'; x' = get_number x; } oo_unary_table op = [ // arithmetic uops just map [this.Rect left' top' width' height', op.type == Operator_type.ARITHMETIC], // compound uops are just like ops on complex // do (width, height) so thing like abs(Arrow) work as you'd expect [op.fn (width, height), op.type == Operator_type.COMPOUND] ] ++ super.oo_unary_table op { left' = op.fn left; top' = op.fn top; width' = op.fn width; height' = op.fn height; } // empty? ie. contains no pixels is_empty = width == 0 || height == 0; // normalised version, ie. make width/height +ve and flip the origin nleft = left + width, width < 0 = left; ntop = top + height, height < 0 = top; nwidth = abs width; nheight = abs height; nright = nleft + nwidth; nbottom = ntop + nheight; equal x = left == x.left && top == x.top && width == x.width && height == x.height; // contains a point? includes_point x y = nleft <= x && x <= nright && ntop <= y && y <= nbottom; // contains a rect? just test top left and bottom right points includes_rect r = includes_point r.nleft r.ntop && includes_point r.nright r.nbottom; // bounding box of two rects // if either is empty, can just return the other union r = r, is_empty = this, r.is_empty = Rect left' top' width' height' { left' = min_pair nleft r.nleft; top' = min_pair ntop r.ntop; width' = max_pair nright r.nright - left'; height' = max_pair nbottom r.nbottom - top'; } // intersection of two rects ... empty rect if no intersection intersect r = Rect left' top' width'' height'' { left' = max_pair nleft r.nleft; top' = max_pair ntop r.ntop; width' = min_pair nright r.nright - left'; height' = min_pair nbottom r.nbottom - top'; width'' = width', width > 0 = 0; height'' = height', height > 0 = 0; } // expand/collapse by n pixels margin_adjust n = Rect (left - n) (top - n) (width + 2 * n) (height + 2 * n); } /* Values for Compression field in image. */ Image_compression = class { NO_COMPRESSION = 0; TCSF_COMPRESSION = 1; JPEG_COMPRESSION = 2; LABPACK_COMPRESSED = 3; RGB_COMPRESSED = 4; LUM_COMPRESSED = 5; } /* Values for Coding field in image. */ Image_coding = class { NOCODING = 0; COLQUANT = 1; LABPACK = 2; } /* Values for BandFmt field in image. */ Image_format = class { DPCOMPLEX = 9; DOUBLE = 8; COMPLEX = 7; FLOAT = 6; INT = 5; UINT = 4; SHORT = 3; USHORT = 2; CHAR = 1; UCHAR = 0; NOTSET = -1; maxval fmt = [ 255, // UCHAR 127, // CHAR 65535, // USHORT 32767, // SHORT 4294967295, // UINT 2147483647, // INT 255, // FLOAT 255, // COMPLEX 255, // DOUBLE 255 // DPCOMPLEX ] ? fmt, fmt >= 0 && fmt <= DPCOMPLEX = error (_ "bad value for BandFmt"); } /* A lookup table. */ Table value = class _Object { _check_args = [ [value, "value", check_rectangular] ]; /* present col x: is there an x in column col */ present col x = member (map (extract col) value) x; /* Look on column from, return matching item in column to. */ lookup from to x = value?n?to, n >= 0 = error (_ "item" ++ " " ++ print x ++ " " ++ _ "not in table") { n = index (equal x) (map (extract from) value); } } /* A two column lookup table with the first column a string and the second a * thing. Used for representing various enums. Option_enum makes a selector * from one of these. */ Enum value = class Table value { _check_args = [ [value, "value", check_enum] ] { check_enum = [is_enum, _ "is [[char, *]]"]; is_enum x = is_rectangular x && is_listof is_string (map (extract 0) x); } // handy ... all the names and things as lists names = map (extract 0) value; things = map (extract 1) value; // is a legal name or thing has_name x = this.present 1 x; has_thing x = this.present 0 x; // map things to strings and back get_name x = this.lookup 1 0 x; get_thing x = this.lookup 0 1 x; } /* Type field. */ Image_type = class { MULTIBAND = 0; B_W = 1; LUMINANCE = 2; XRAY = 3; IR = 4; YUV = 5; RED_ONLY = 6; GREEN_ONLY = 7; BLUE_ONLY = 8; POWER_SPECTRUM = 9; HISTOGRAM = 10; LUT = 11; XYZ = 12; LAB = 13; CMC = 14; CMYK = 15; LABQ = 16; RGB = 17; UCS = 18; LCH = 19; LABS = 21; sRGB = 22; YXY = 23; FOURIER = 24; RGB16 = 25; GREY16 = 26; /* Table to get names <-> numbers. */ type_names = Enum [ ["MULTIBAND", MULTIBAND], ["B_W", B_W], ["LUMINANCE", LUMINANCE], ["XRAY", XRAY], ["IR", IR], ["YUV", YUV], ["RED_ONLY", RED_ONLY], ["GREEN_ONLY", GREEN_ONLY], ["BLUE_ONLY", BLUE_ONLY], ["POWER_SPECTRUM", POWER_SPECTRUM], ["HISTOGRAM", HISTOGRAM], ["LUT", LUT], ["XYZ", XYZ], ["LAB", LAB], ["CMC", CMC], ["CMYK", CMYK], ["LABQ", LABQ], ["RGB", RGB], ["UCS", UCS], ["LCH", LCH], ["LABS", LABS], ["sRGB", sRGB], ["YXY", YXY], ["FOURIER", FOURIER], ["RGB16", RGB16], ["GREY16", GREY16] ]; /* Table relating nip's colour space names and VIPS's Type numbers. * Options generated from this, so match the order to the order in the * Colour menu. */ colour_spaces = Enum [ ["sRGB", sRGB], ["Lab", LAB], ["LCh", LCH], ["XYZ", XYZ], ["Yxy", YXY], ["UCS", UCS] ]; /* A slightly larger table ... the types of colorimetric image we can * have. Add mono, and the S and Q forms of LAB. */ image_colour_spaces = Enum [ ["Mono", B_W], ["sRGB", sRGB], ["RGB16", RGB16], ["GREY16", GREY16], ["Lab", LAB], ["LabQ", LABQ], ["LabS", LABS], ["LCh", LCH], ["XYZ", XYZ], ["Yxy", YXY], ["UCS", UCS] ]; } /* Base image type. Simple layer over vips_image. */ Image value = class _Object { _check_args = [ [value, "value", check_image] ]; // fields from VIPS header width = get_width value; height = get_height value; bands = get_bands value; format = get_format value; bits = get_bits value; coding = get_coding value; type = get_type value; xres = get_header "Xres" value; yres = get_header "Yres" value; xoffset = get_header "Xoffset" value; yoffset = get_header "Yoffset" value; filename = get_header "filename" value; // convenience ... the area our pixels occupy, as a rect rect = Rect 0 0 width height; // operator overloading // (op Image Vector) done in Vector class oo_binary_table op x = [ // handle image ++ constant here [wrap join_result_image, (has_real x || is_Vector x) && (op.op_name == "join" || op.op_name == "join'")], // image ++ image is slightly different ... we want to // sizealike, but we must not bandalike [wrap (op.fn (get_image resized?0) (get_image resized?1)), has_image x && (op.op_name == "join" || op.op_name == "join'")], [wrap ite_result_image, op.op_name == "if_then_else"], // arithmetic and reational binops between image resize // and band_alike images to match [wrap (op.fn (get_image rebanded?0) (get_image rebanded?1)), has_image x && (op.type == Operator_type.ARITHMETIC || op.type == Operator_type.RELATIONAL)], // other op types don't resize [wrap (op.fn this.value (get_image x)), has_image x], [wrap (op.fn this.value (get_number x)), has_number x], // if it's not a class on the RHS, handle here ... just apply and // rewrap [wrap (op.fn this.value x), !is_class x] // all other cases handled by other classes ] ++ super.oo_binary_table op x { // wrap the result with this // x can be a non-image, eg. compare "Image v == []" vs. "Image v == // 12" wrap x = x, op.type == Operator_type.COMPOUND || !is_image x = this.Image x; join_result_image = value ++ new_stuff, op.op_name == "join" = new_stuff ++ value { new_stuff = image_new width height new_bands format coding Image_type.B_W x xoffset yoffset; new_bands = get_bands x, has_bands x = 1; } then_part = x?0; else_part = x?1; // get things about our output from inputs in this order objects = [then_part, else_part, this]; // properties of our output image target_bands = get_member_list has_bands get_bands objects; target_format = get_member_list has_format get_format objects; target_type = get_member_list has_type get_type objects; to_image x = x, is_image x = x.value, is_Image x = black + x { black = im_black width height target_bands; } then_image = to_image then_part; else_image = to_image else_part; then_image' = clip2fmt target_format then_image; else_image' = clip2fmt target_format else_image; ite_resized = size_alike [value, then_image', else_image']; ite_result_image = image_set_type target_type (if ite_resized?0 then ite_resized?1 else ite_resized?2); resized = size_alike [this, x]; rebanded = bands_alike resized; } // FIXME ... yuk ... don't use operator hints, just always rewrap if // we have an image result // forced on us by things like abs: // abs Vector -> real // abs Image -> Image // does not fit well with COMPOUND/whatever scheme oo_unary_table op = [ [this.Image result, is_image result], [result, true] ] { result = op.fn this.value; } } /* Construct an image from a file. */ Image_file filename = class Image value { _check_args = [ [filename, "filename", check_string] ]; value = vips_image filename; } Region image left top width height = class Image value { _check_args = [ [image, "Image", check_Image], [left, "left", check_real], [top, "top", check_real], [width, "width", check_preal], [height, "height", check_preal] ]; // a rect for our coordinates // region.rect gets the rect for the extracted image region_rect = Rect left top width height; // we need to always succeed ... value is our enclosing image if we're // out of bounds value = extract_area left top width height image.value, image.rect.includes_rect region_rect = image.value; } Area image left top width height = class scope.Region image left top width height { Region image left top width height = this.Area image left top width height; } Arrow image left top width height = class scope.Rect left top width height { _check_args = [ [image, "Image", check_Image], [left, "left", check_real], [top, "top", check_real], [width, "width", check_real], [height, "height", check_real] ]; Rect l t w h = this.Arrow image l t w h; } HGuide image top = class scope.Arrow image image.rect.left top image.width 0 { Arrow image left top width height = this.HGuide image top; } VGuide image left = class scope.Arrow image left image.rect.top 0 image.height { Arrow image left top width height = this.VGuide image left; } Mark image left top = class scope.Arrow image left top 0 0 { Arrow image left top width height = this.Mark image left top; } // convenience functions: ... specify position as [0 .. 1) Region_relative image u v w h = Region image (image.width * u) (image.height * v) (image.width * w) (image.height * h); Area_relative image u v w h = Area image (image.width * u) (image.height * v) (image.width * w) (image.height * h); Arrow_relative image u v w h = Arrow image (image.width * u) (image.height * v) (image.width * w) (image.height * h); VGuide_relative image v = VGuide image (image.height * v); HGuide_relative image u = HGuide image (image.width * u); Mark_relative image u v = Mark image (image.width * u) (image.height * v); Interpolate = class { NEAREST_NEIGHBOUR = 0; BILINEAR = 1; BICUBIC = 2; /* Table to map interpol numbers to descriptive strings */ names = Enum [ [_ "Nearest neighbour", NEAREST_NEIGHBOUR], [_ "Bilinear", BILINEAR], [_ "Bicubic", BICUBIC] ]; } Render_intent = class { PERCEPTUAL = 0; RELATIVE = 1; SATURATION = 2; ABSOLUTE = 3; /* Table to get names <-> numbers. */ names = Enum [ [_ "Perceptual", PERCEPTUAL], [_ "Relative", RELATIVE], [_ "Saturation", SATURATION], [_ "Absolute", ABSOLUTE] ]; } // abstract base class for toolkit menus Menu = class {} // a "----" line in a menu Menuseparator = class Menu {} // abstract base class for items in menus Menuitem label tooltip = class Menu {} Menupullright label tooltip = class Menuitem label tooltip {} Menuaction label tooltip = class Menuitem label tooltip {} /* Plots. */ Plot_style = class { POINT = 0; LINE = 1; SPLINE = 2; BAR = 3; names = Enum [ [_ "Point", POINT], [_ "Line", LINE], [_ "Spline", SPLINE], [_ "Bar", BAR] ]; } Plot_format = class { YYYY = 0; XYYY = 1; XYXY = 2; names = Enum [ [_ "YYYY", YYYY], [_ "XYYY", XYXY], [_ "XYXY", XYXY] ]; } Plot_type = class { /* Lots of Ys (ie. multiple line plots). */ YYYY = 0; /* First column of matrix is X position, others are Ys (ie. multiple XY * line plots, all with the same Xes). */ XYYY = 1; /* Many independent XY plots. */ XYXY = 2; } /* "options" is a list of ["key", value] pairs. */ Plot options value = class scope.Image value { Image value = this.Plot options value; } Plot_matrix options value = class Plot options (to_image value).value { } Plot_histogram value = class scope.Plot [] value { } Plot_xy value = class scope.Plot [["format", Plot_format.XYYY]] value { } nip2-8.7.0/share/nip2/compat/7.12/Makefile.am0000644000175000017500000000054613224651032015202 00000000000000startdir = $(pkgdatadir)/compat/7.12 start_DATA = \ Math.def \ Image.def \ Colour.def \ Tasks.def \ Format.def \ Filter.def \ Matrix.def \ Widgets.def \ Histogram.def \ Preferences.ws \ _joe_extra.def \ _joe_utilities.def \ _convert.def \ _generate.def \ _list.def \ _predicate.def \ _stdenv.def \ _types.def EXTRA_DIST = $(start_DATA) nip2-8.7.0/share/nip2/compat/8.5/0000755000175000017500000000000013350464161013151 500000000000000nip2-8.7.0/share/nip2/compat/8.5/_stdenv.def0000644000175000017500000020217013273071606015217 00000000000000/* optional args to functions */ get_option options defaults f = error (_ "unknown parameter " ++ f), hits == [] = hits?0 { hits = [v :: [n, v] <- options ++ defaults; n == f]; } /* Various operators as functions. */ logical_and a b = a && b; logical_or a b = a || b; bitwise_and a b = a & b; bitwise_or a b = a | b; eor a b = a ^ b; left_shift a b = a << b; right_shift a b = a >> b; not a = !a; less a b = a < b; more a b = a > b; less_equal a b = a <= b; more_equal a b = a >= b; equal a b = a == b; not_equal a b = a != b; pointer_equal a b = a === b; not_pointer_equal a b = a !== b; add a b = a + b; subtract a b = a - b; multiply a b = a * b; divide a b = a / b; idivide a b = (int) ((int) a / (int) b); power a b = a ** b; square x = x * x; remainder a b = a % b; cons a b = a : b; dot a b = a . ( b ); join a b = a ++ b; // 'difference' is defined in _list subscript a b = a ? b; generate s n f = [s, n .. f]; comma r i = (r, i); compose f g = f @ g; // our only trinary operator is actually a binary operator if_then_else a x = if a then x?0 else x?1; cast_unsigned_char x = (unsigned char) x; cast_signed_char x = (signed char) x; cast_unsigned_short x = (unsigned short) x; cast_signed_short x = (signed short) x; cast_unsigned_int x = (unsigned int) x; cast_signed_int x = (signed int) x; cast_float x = (float) x; cast_double x = (double) x; cast_complex x = (complex) x; cast_double_complex x = (double complex) x; unary_minus x = -x; negate x = !x; complement x = ~x; unary_plus x = +x; // the function we call for "a -> v" expressions mksvpair s v = [s, v], is_string s = error "not str on lhs of ->"; // the vector ops ... im is an image, vec is a real_list vec op_name im vec = im_lintra_vec ones im vec, op_name == "add" || op_name == "add'" = im_lintra_vec ones (-1 * im) vec, op_name == "subtract'" = im_lintra_vec ones im inv, op_name == "subtract" = im_lintra_vec vec im zeros, op_name == "multiply" || op_name == "multiply'" = im_lintra_vec vec (1 / im) zeros, op_name == "divide'" = im_lintra_vec recip im zeros, op_name == "divide" = im_expntra_vec im vec, op_name == "power'" = im_powtra_vec im vec, op_name == "power" = im_remainderconst_vec im vec, op_name == "remainder" = im_andimage_vec im vec, op_name == "bitwise_and" || op_name == "bitwise_and'" = im_orimage_vec im vec, op_name == "bitwise_or" || op_name == "bitwise_or'" = im_eorimage_vec im vec, op_name == "eor" || op_name == "eor'" = im_equal_vec im vec, op_name == "equal" || op_name == "equal'" = im_notequal_vec im vec, op_name == "not_equal" || op_name == "not_equal'" = im_less_vec im vec, op_name == "less" = im_moreeq_vec im vec, op_name == "less'" = im_lesseq_vec im vec, op_name == "less_equal" = im_more_vec im vec, op_name == "less_equal'" = error ("unimplemented vector operation: " ++ op_name) { zeros = replicate (len vec) 0; ones = replicate (len vec) 1; recip = map (divide 1) vec; inv = map (multiply (-1)) vec; } // make a name value pair mknvpair n v = [n, v], is_string n = error "not [char] on LHS of =>"; /* Macbeth chart patch names. */ macbeth_names = [ "Dark skin", "Light skin", "Blue sky", "Foliage", "Blue flower", "Bluish green", "Orange", "Purplish blue", "Moderate red", "Purple", "Yellow green", "Orange yellow", "Blue", "Green", "Red", "Yellow", "Magenta", "Cyan", "White (density 0.05)", "Neutral 8 (density 0.23)", "Neutral 6.5 (density 0.44)", "Neutral 5 (density 0.70)", "Neutral 3.5 (density 1.05)", "Black (density 1.50)" ]; bandsplit x = oo_unary_function bandsplit_op x, is_class x = map (subscript x) [0 .. bands - 1], is_image x = error (_ "bad arguments to " ++ "bandsplit") { bands = get_header "Bands" x; bandsplit_op = Operator "bandsplit" (map Image @ bandsplit) Operator_type.COMPOUND false; } bandjoin l = wrapper joined, has_wrapper = joined, is_listof has_image l = error (_ "bad arguments to " ++ "bandjoin") { has_wrapper = has_member_list (has_member "Image") l; wrapper = get_member_list (has_member "Image") (get_member "Image") l; joined = im_gbandjoin (map get_image l); } bandand x = oo_unary_function bandand_op x, is_class x = foldr1 bitwise_and (bandsplit x), is_image x = error (_ "bad arguments to " ++ "bandand") { bandand_op = Operator "bandand" bandand Operator_type.COMPOUND_REWRAP false; } bandor x = oo_unary_function bandor_op x, is_class x = foldr1 bitwise_or (bandsplit x), is_image x = error (_ "bad arguments to " ++ "bandor") { bandor_op = Operator "bandor" bandor Operator_type.COMPOUND_REWRAP false; } sum x = oo_unary_function sum_op x, is_class x = im_avg x * (get_width x) * (get_height x) * (get_bands x), is_image x = sum_list x, is_list x = error (_ "bad arguments (" ++ print x ++ ") to " ++ "sum") { sum_op = Operator "sum" sum Operator_type.COMPOUND false; // add elements in a nested-list thing sum_list l = foldr acc 0 l { acc x total = total + sum x, is_list x = total + x; } } product x = oo_unary_function product_op x, is_class x = product_list x, is_list x // (product image) doesn't make much sense :( = error (_ "bad arguments (" ++ print x ++ ") to " ++ "product") { product_op = Operator "product" product Operator_type.COMPOUND false; product_list l = foldr prod 1 l { prod x total = total * product x, is_list x = total * x; } } mean x = oo_unary_function mean_op x, is_class x = im_avg x, is_image x = mean_list x, is_list x = error (_ "bad arguments (" ++ print x ++ ") to " ++ "mean") { mean_op = Operator "mean" mean Operator_type.COMPOUND false; mean_list l = sum l / size l; // number of elements in some sort of nested-list thing size l = foldr acc 0 l { acc x total = total + size x, is_list x = total + 1; } } meang x = (appl (power e) @ mean @ appl log) x { appl fn x = map fn x, is_list x = fn x; } skew x = oo_unary_function skew_op x, is_class x = sum ((x - m) ** 3) / ((N - 1) * s ** 3), is_image x = sum ((Group x' - m) ** 3).value / ((N - 1) * s ** 3), is_list x = error (_ "bad arguments (" ++ print x ++ ") to " ++ "skew") { skew_op = Operator "skew" skew Operator_type.COMPOUND false; // squash any large matrix down to a flat list ... much simpler x' = x, is_image x; = flatten x; m = mean x'; s = deviation x'; w = get_width x'; h = get_height x'; b = get_bands x'; N = w * h * b, is_image x' = len x'; } kurtosis x = oo_unary_function kurtosis_op x, is_class x = sum ((x - m) ** 4) / ((N - 1) * s ** 4), is_image x = sum ((Group x' - m) ** 4).value / ((N - 1) * s ** 4), is_list x = error (_ "bad arguments (" ++ print x ++ ") to " ++ "kurtosis") { kurtosis_op = Operator "kurtosis" kurtosis Operator_type.COMPOUND false; // squash any large matrix down to a flat list ... much simpler x' = x, is_image x; = flatten x; m = mean x'; s = deviation x'; w = get_width x'; h = get_height x'; b = get_bands x'; N = len x', is_list x'; = w * h * b; } // zero-excluding mean meanze x = oo_unary_function meanze_op x, is_class x = meanze_image_hist x, is_image x && (fmt == Image_format.UCHAR || fmt == Image_format.USHORT) = meanze_image x, is_image x = meanze_list x, is_list x = error (_ "bad arguments (" ++ print x ++ ") to " ++ "meanze") { fmt = get_format x; meanze_op = Operator "meanze" meanze Operator_type.COMPOUND false; meanze_list l = sum l / size l; // number of non-zero elements in some sort of nested-list thing size l = foldr acc 0 l { acc x total = total + size x, is_list x = total + 1, x != 0; = total; } // add elements in a nested-list thing sum l = foldr acc 0 l { acc x total = total + sum x, is_list x = total + x; } // image mean, for any image type meanze_image i = sum / N { w = get_width i; h = get_height i; b = get_bands i; st = stats i; sum = st.value?0?2; // find non-zero pixels (not zero in all bands) zp = im_notequal_vec i (replicate b 0); // number of non-zero pixels N = b * (mean zp * w * h) / 255; } // image mean for 8 and 16-bit unsigned images // we can use a histogram, yay, and save a pass through the image meanze_image_hist i = sum / N { // histogram, knock out zeros hist = hist_find i; black = image_new 1 1 (get_bands hist) (get_format hist) (get_coding hist) (get_type hist) 0 0 0; histze = insert 0 0 black hist; // matching identity iden = im_identity_ushort (get_bands hist) (get_width hist), (get_width hist) > 256 = im_identity (get_bands hist); // number of non-zero pixels N = mean histze * 256; // sum of pixels sum = mean (hist * iden) * 256; } } deviation x = oo_unary_function deviation_op x, is_class x = im_deviate x, is_image x = deviation_list x, is_real_list x || is_matrix x = error (_ "bad arguments to " ++ "deviation") { deviation_op = Operator "deviation" deviation Operator_type.COMPOUND false; deviation_list l = (abs (s2 - (s * s / n)) / (n - 1)) ** 0.5 { [n, s, s2] = sum_sum2_list l; } // return n, sum, sum of squares for a list of reals sum_sum2_list x = foldr accumulate [0, 0, 0] x { accumulate x sofar = [n + 1, x + s, x * x + s2], is_real x = [n + n', s + s', s2 + s2'], is_list x = error "sum_sum2_list: not real or [real]" { [n, s, s2] = sofar; [n', s', s2'] = sum_sum2_list x; } } } deviationze x = oo_unary_function deviationze_op x, is_class x = deviationze_image x, is_image x = deviationze_list x, is_real_list x || is_matrix x = error (_ "bad arguments to " ++ "deviationze") { deviationze_op = Operator "deviationze" deviationze Operator_type.COMPOUND false; deviationze_list l = (abs (s2 - (s * s / n)) / (n - 1)) ** 0.5 { [n, s, s2] = sum_sum2_list l; } // return number of non-zero elements, sum, sum of squares for a list of // reals sum_sum2_list x = foldr accumulate [0, 0, 0] x { accumulate x sofar = sofar, is_real x && x == 0 = [n + 1, x + s, x * x + s2], is_real x = [n + n', s + s', s2 + s2'], is_list x = error "sum_sum2_list: not real or [real]" { [n, s, s2] = sofar; [n', s', s2'] = sum_sum2_list x; } } deviationze_image i = ((sum2 - sum * sum / N) / (N - 1)) ** 0.5 { w = get_width i; h = get_height i; b = get_bands i; st = stats i; sum = st.value?0?2; sum2 = st.value?0?3; // find non-zero pixels (not zero in all bands) zp = im_notequal_vec i (replicate b 0); // number of non-zero pixels N = b * (mean zp * w * h) / 255; } } // find the centre of gravity of a histogram gravity x = oo_unary_function gravity_op x, is_class x = im_hist_gravity x, is_hist x = gravity_list x, is_list x = error (_ "bad arguments to " ++ "gravity") { gravity_op = Operator "gravity" gravity Operator_type.COMPOUND false; // centre of gravity of a histogram... use the histogram to weight an // identity, then sum, then find the mean element im_hist_gravity h = m { // make horizontal h' = rot270 h, get_width h == 1 = h, get_height h == 1 = error "width or height not 1"; // number of elements w = get_width h'; // matching identity i = im_identity_ushort 1 w, w <= 2 ** 16 - 1 = make_xy w 1 ? 0; // weight identity and sum s = mean (i * h') * w; // sum of original histogram s' = mean h * w; // weighted mean m = s / s'; } gravity_list l = m { w = len l; // matching identity i = [0, 1 .. w - 1]; // weight identity and sum s = sum (map2 multiply i l); // sum of original histogram s' = sum l; // weighted mean m = s / s'; } } project x = oo_unary_function project_op x, is_class x = im_project x, is_image x = error (_ "bad arguments to " ++ "project") { project_op = Operator "project" project Operator_type.COMPOUND false; } abs x = oo_unary_function abs_op x, is_class x = im_abs x, is_image x = abs_cmplx x, is_complex x = abs_num x, is_real x = abs_list x, is_real_list x = abs_list (map abs_list x), is_matrix x = error (_ "bad arguments to " ++ "abs") { abs_op = Operator "abs" abs Operator_type.COMPOUND false; abs_list l = (sum (map square l)) ** 0.5; abs_num n = n, n >= 0 = -n; abs_cmplx c = ((re c)**2 + (im c)**2) ** 0.5; } copy x = oo_unary_function copy_op x, is_class x = im_copy x, is_image x = x { copy_op = Operator "copy" copy Operator_type.COMPOUND_REWRAP false; } // like abs, but treat pixels as vectors ... ie. always get a 1-band image // back ... also treat matricies as lists of vectors // handy for dE from object difference abs_vec x = oo_unary_function abs_vec_op x, is_class x = abs_vec_image x, is_image x = abs_vec_cmplx x, is_complex x = abs_vec_num x, is_real x = abs_vec_list x, is_real_list x = mean (map abs_vec_list x), is_matrix x = error (_ "bad arguments to " ++ "abs_vec") { abs_vec_op = Operator "abs_vec" abs_vec Operator_type.COMPOUND false; abs_vec_list l = (sum (map square l)) ** 0.5; abs_vec_num n = n, n >= 0 = -n; abs_vec_cmplx c = ((re c)**2 + (im c)**2) ** 0.5; abs_vec_image im = (sum (map square (bandsplit im))) ** 0.5; } transpose x = oo_unary_function transpose_op x, is_class x = transpose_image x, is_image x = transpose_list x, is_listof is_list x = error (_ "bad arguments to " ++ "transpose") { transpose_op = Operator "transpose" transpose Operator_type.COMPOUND_REWRAP false; transpose_list l = [], l' == [] = (map hd l') : (transpose_list (map tl l')) { l' = takewhile (not_equal []) l; } transpose_image = im_flipver @ im_rot270; } rot45 x = oo_unary_function rot45_op x, is_class x = error "rot45 image: not implemented", is_image x = error (_ "bad arguments to " ++ "rot45") { rot45_op = Operator "rot45" rot45_object Operator_type.COMPOUND_REWRAP false; rot45_object x = rot45_matrix x, is_odd_square_matrix x = error "rot45 image: not implemented", is_image x = error (_ "bad arguments to " ++ "rot45"); // slow, but what the heck rot45_matrix l = (im_rotate_dmask45 (Matrix l)).value; } // apply an image function to a [[real]] ... matrix is converted to a 1 band // image for processing apply_matrix_as_image fn m = (get_value @ im_vips2mask @ fn @ im_mask2vips @ Matrix) m; // a general image/matrix operation where the mat version is most easily done // by converting mat->image->mat apply_matim_operation name fn x = oo_unary_function class_op x, is_class x = fn x, is_image x = apply_matrix_as_image fn x, is_matrix x = error (_ "bad arguments to " ++ name) { class_op = Operator name (apply_matim_operation name fn) Operator_type.COMPOUND_REWRAP false; } rot90 = apply_matim_operation "rot90" im_rot90; rot180 = apply_matim_operation "rot180" im_rot180; rot270 = apply_matim_operation "rot270" im_rot270; rotquad = apply_matim_operation "rotquad" im_rotquad; fliplr = apply_matim_operation "fliplr" im_fliphor; fliptb = apply_matim_operation "flipud" im_flipver; image_set_type type x = oo_unary_function image_set_type_op x, is_class x = im_copy_set x (to_real type) (get_header "Xres" x) (get_header "Yres" x) (get_header "Xoffset" x) (get_header "Yoffset" x), is_image x = error (_ "bad arguments to " ++ "image_set_type:" ++ print type ++ " " ++ print x) { image_set_type_op = Operator "image_set_type" (image_set_type type) Operator_type.COMPOUND_REWRAP false; } image_set_origin xoff yoff x = oo_unary_function image_set_origin_op x, is_class x = im_copy_set x (get_header "Type" x) (get_header "Xres" x) (get_header "Yres" x) (to_real xoff) (to_real yoff), is_image x = error (_ "bad arguments to " ++ "image_set_origin") { image_set_origin_op = Operator "image_set_origin" (image_set_origin xoff yoff) Operator_type.COMPOUND_REWRAP false; } cache tile_width tile_height max_tiles x = oo_unary_function cache_op x, is_class x = im_tile_cache_random x (to_real tile_width) (to_real tile_height) (to_real max_tiles), is_image x = error (_ "bad arguments to " ++ "cache") { cache_op = Operator "cache" (cache tile_width tile_height max_tiles) Operator_type.COMPOUND_REWRAP false; } tile across down x = oo_unary_function tile_op x, is_class x = im_replicate x (to_real across) (to_real down), is_image x = error (_ "bad arguments to " ++ "tile") { tile_op = Operator "tile" (tile across down) Operator_type.COMPOUND_REWRAP false; } grid tile_height across down x = oo_unary_function grid_op x, is_class x = im_grid x (to_real tile_height) (to_real across) (to_real down), is_image x = error (_ "bad arguments to " ++ "grid") { grid_op = Operator "grid" (grid tile_height across down) Operator_type.COMPOUND_REWRAP false; } max_pair a b = a, a > b = b; min_pair a b = a, a < b = b; range min value max = min_pair max (max_pair min value); max x = oo_unary_function max_op x, is_class x = im_max x, is_image x = max_list x, is_list x = x, is_number x = error (_ "bad arguments to " ++ "max") { max_op = Operator "max" max Operator_type.COMPOUND false; max_list x = error "max []", x == [] = foldr1 max_pair x, is_real_list x = foldr1 max_pair (map max_list x), is_list x = max x; } min x = oo_unary_function min_op x, is_class x = im_min x, is_image x = min_list x, is_list x = x, is_number x = error (_ "bad arguments to " ++ "min") { min_op = Operator "min" min Operator_type.COMPOUND false; min_list x = error "min []", x == [] = foldr1 min_pair x, is_real_list x = foldr1 min_pair (map min_list x), is_list x = min x; } maxpos x = oo_unary_function maxpos_op x, is_class x = im_maxpos x, is_image x = maxpos_matrix x, is_matrix x = maxpos_list x, is_list x = error (_ "bad arguments to " ++ "maxpos") { maxpos_op = Operator "maxpos" maxpos Operator_type.COMPOUND false; maxpos_matrix m = (-1, -1), m == [[]] = (indexes?row, row) { max_value = max (Matrix m); indexes = map (index (equal max_value)) m; row = index (not_equal (-1)) indexes; } maxpos_list l = -1, l == [] = index (equal (max l)) l; } minpos x = oo_unary_function minpos_op x, is_class x = im_minpos x, is_image x = minpos_matrix x, is_matrix x = minpos_list x, is_list x = error (_ "bad arguments to " ++ "minpos") { minpos_op = Operator "minpos" minpos Operator_type.COMPOUND false; minpos_matrix m = (-1, -1), m == [[]] = (indexes?row, row) { min_value = min (Matrix m); indexes = map (index (equal min_value)) m; row = index (not_equal (-1)) indexes; } minpos_list l = -1, l == [] = index (equal (min l)) l; } stats x = oo_unary_function stats_op x, is_class x = im_stats x, is_image x = im_stats (to_image x).value, is_matrix x = error (_ "bad arguments to " ++ "stats") { stats_op = Operator "stats" stats Operator_type.COMPOUND false; } e = 2.7182818284590452354; pi = 3.14159265358979323846; rad d = 2 * pi * (d / 360); deg r = 360 * r / (2 * pi); sign x = oo_unary_function sign_op x, is_class x = im_sign x, is_image x = sign_cmplx x, is_complex x = sign_num x, is_real x = error (_ "bad arguments to " ++ "sign") { sign_op = Operator "sign" sign Operator_type.COMPOUND_REWRAP false; sign_num n = 0, n == 0 = 1, n > 0 = -1; sign_cmplx c = (0, 0), mod == 0 = (re c / mod, im c / mod) { mod = abs c; } } rint x = oo_unary_function rint_op x, is_class x = im_rint x, is_image x = rint_value x, is_number x = error (_ "bad arguments to " ++ "rint") { rint_op = Operator "rint" rint Operator_type.ARITHMETIC false; rint_value x = (int) (x + 0.5), x > 0 = (int) (x - 0.5); } scale x = oo_unary_function scale_op x, is_class x = (unsigned char) x, is_number x = im_scale x, is_image x = scale_list x, is_real_list x || is_matrix x = error (_ "bad arguments to " ++ "scale") { scale_op = Operator "scale" scale Operator_type.COMPOUND_REWRAP false; scale_list l = apply_scale s o l { mn = find_limit min_pair l; mx = find_limit max_pair l; s = 255.0 / (mx - mn); o = -(mn * s); } find_limit fn l = find_limit fn (map (find_limit fn) l), is_listof is_list l = foldr1 fn l; apply_scale s o x = x * s + o, is_number x = map (apply_scale s o) x; } scaleps x = oo_unary_function scale_op x, is_class x = im_scaleps x, is_image x = error (_ "bad arguments to " ++ "scale") { scale_op = Operator "scaleps" scaleps Operator_type.COMPOUND_REWRAP false; } fwfft x = oo_unary_function fwfft_op x, is_class x = im_fwfft x, is_image x = error (_ "bad arguments to " ++ "fwfft") { fwfft_op = Operator "fwfft" fwfft Operator_type.COMPOUND_REWRAP false; } invfft x = oo_unary_function invfft_op x, is_class x = im_invfftr x, is_image x = error (_ "bad arguments to " ++ "invfft") { invfft_op = Operator "invfft" invfft Operator_type.COMPOUND_REWRAP false; } falsecolour x = oo_unary_function falsecolour_op x, is_class x = image_set_type Image_type.sRGB (im_falsecolour x), is_image x = error (_ "bad arguments to " ++ "falsecolour") { falsecolour_op = Operator "falsecolour" falsecolour Operator_type.COMPOUND_REWRAP false; } polar x = oo_unary_function polar_op x, is_class x = im_c2amph x, is_image x = polar_cmplx x, is_complex x = error (_ "bad arguments to " ++ "polar") { polar_op = Operator "polar" polar Operator_type.COMPOUND false; polar_cmplx r = (l, a) { a = 270, x == 0 && y < 0 = 90, x == 0 && y >= 0 = 360 + atan (y / x), x > 0 && y < 0 = atan (y / x), x > 0 && y >= 0 = 180 + atan (y / x); l = (x ** 2 + y ** 2) ** 0.5; x = re r; y = im r; } } rectangular x = oo_unary_function rectangular_op x, is_class x = im_c2rect x, is_image x = rectangular_cmplx x, is_complex x = error (_ "bad arguments to " ++ "rectangular") { rectangular_op = Operator "rectangular" rectangular Operator_type.COMPOUND false; rectangular_cmplx p = (x, y) { l = re p; a = im p; x = l * cos a; y = l * sin a; } } // we can't use colour_unary: that likes 3 band only recomb matrix x = oo_unary_function recomb_op x, is_class x = im_recomb x matrix, is_image x = recomb_real_list x, is_real_list x = map recomb_real_list x, is_matrix x = error (_ "bad arguments to " ++ "recomb") { // COMPOUND_REWRAP ... signal to the colour class to go to image and // back recomb_op = Operator "recomb" (recomb matrix) Operator_type.COMPOUND_REWRAP false; // process [1,2,3 ..] as an image recomb_real_list l = (to_matrix im').value?0 { im = (float) (to_image (Vector l)).value; im' = recomb matrix im; } } extract_area x y w h obj = oo_unary_function extract_area_op obj, is_class obj = im_extract_area obj x' y' w' h', is_image obj = map (extract_range x' w') (extract_range y' h' obj), is_matrix obj = error (_ "bad arguments to " ++ "extract_area") { x' = to_real x; y' = to_real y; w' = to_real w; h' = to_real h; extract_area_op = Operator "extract_area" (extract_area x y w h) Operator_type.COMPOUND_REWRAP false; extract_range from length list = (take length @ drop from) list; } extract_band b obj = subscript obj b; extract_row y obj = oo_unary_function extract_row_op obj, is_class obj = extract_area 0 y' (get_width obj) 1 obj, is_image obj = [obj?y'], is_matrix obj = error (_ "bad arguments to " ++ "extract_row") { y' = to_real y; extract_row_op = Operator "extract_row" (extract_row y) Operator_type.COMPOUND_REWRAP false; } extract_column x obj = oo_unary_function extract_column_op obj, is_class obj = extract_area x' 0 1 height obj, is_image obj = map (\row [row?x']) obj, is_matrix obj = error (_ "bad arguments to " ++ "extract_column") { x' = to_real x; height = get_header "Ysize" obj; extract_column_op = Operator "extract_column" (extract_column x) Operator_type.COMPOUND_REWRAP false; } blend cond in1 in2 = oo_binary_function blend_op cond [in1,in2], is_class cond = im_blend (get_image cond) (get_image in1) (get_image in2), has_image cond && has_image in1 && has_image in2 = error (_ "bad arguments to " ++ "blend" ++ ": " ++ join_sep ", " (map print [cond, in1, in2])) { blend_op = Operator "blend" blend_obj Operator_type.COMPOUND_REWRAP false; blend_obj cond x = blend_result_image { [then_part, else_part] = x; // get things about our output from inputs in this order objects = [then_part, else_part, cond]; // properties of our output image target_width = get_member_list has_width get_width objects; target_height = get_member_list has_height get_height objects; target_bands = get_member_list has_bands get_bands objects; target_format = get_member_list has_format get_format objects; target_type = get_member_list has_type get_type objects; to_image x = to_image_size target_width target_height target_bands target_format x; [then_image, else_image] = map to_image [then_part, else_part]; blend_result_image = image_set_type target_type (im_blend cond then_image else_image); } } // do big first: we want to keep big's class, if possible // eg. big is a Plot, small is a 1x1 Image insert x y small big = oo_binary'_function insert_op small big, is_class big = oo_binary_function insert_op small big, is_class small = im_insert big small (to_real x) (to_real y), is_image small && is_image big = error (_ "bad arguments to " ++ "insert") { insert_op = Operator "insert" (insert x y) Operator_type.COMPOUND_REWRAP false; } insert_noexpand x y small big = oo_binary_function insert_noexpand_op small big, is_class small = oo_binary'_function insert_noexpand_op small big, is_class big = im_insert_noexpand big small (to_real x) (to_real y), is_image small && is_image big = error (_ "bad arguments to " ++ "insert_noexpand") { insert_noexpand_op = Operator "insert_noexpand" (insert_noexpand x y) Operator_type.COMPOUND_REWRAP false; } decode im = oo_unary_function decode_op im, is_class im = decode_im im, is_image im = error (_ "bad arguments to " ++ "decode") { decode_op = Operator "decode" decode Operator_type.COMPOUND_REWRAP false; decode_im im = im_LabQ2Lab im, get_coding im == Image_coding.LABPACK = im_rad2float im, get_coding im == Image_coding.RAD = im; } measure_draw across down measure image = mark { patch_width = image.width / across; sample_width = patch_width * (measure / 100); left_margin = (patch_width - sample_width) / 2; patch_height = image.height / down; sample_height = patch_height * (measure / 100); top_margin = (patch_height - sample_height) / 2; cods = [[x * patch_width + left_margin, y * patch_height + top_margin] :: y <- [0 .. down - 1]; x <- [0 .. across - 1]]; x = map (extract 0) cods; y = map (extract 1) cods; outer = mkim [$pixel => 255] sample_width sample_height 1; inner = mkim [] (sample_width - 4) (sample_height - 4) 1; patch = insert 2 2 inner outer; bg = mkim [] image.width image.height 1; mask = Image (im_insertset bg.value patch.value x y); image' = colour_transform_to Image_type.sRGB image; mark = if mask then Vector [0, 255, 0] else image'; } measure_sample across down measure image = measures { patch_width = image.width / across; sample_width = patch_width * (measure / 100); left_margin = (patch_width - sample_width) / 2; patch_height = image.height / down; sample_height = patch_height * (measure / 100); top_margin = (patch_height - sample_height) / 2; cods = [[x * patch_width + left_margin, y * patch_height + top_margin] :: y <- [0 .. down - 1]; x <- [0 .. across - 1]]; image' = decode image; patches = map (\p extract_area p?0 p?1 sample_width sample_height image') cods; measures = Matrix (map (map mean) (map bandsplit patches)); } extract_bands b n obj = oo_unary_function extract_bands_op obj, is_class obj = im_extract_bands obj (to_real b) (to_real n), is_image obj = error (_ "bad arguments to " ++ "extract_bands") { extract_bands_op = Operator "extract_bands" (extract_bands b n) Operator_type.COMPOUND_REWRAP false; } invert x = oo_unary_function invert_op x, is_class x = im_invert x, is_image x = 255 - x, is_real x = error (_ "bad arguments to " ++ "invert") { invert_op = Operator "invert" invert Operator_type.COMPOUND false; } transform ipol wrap params image = oo_unary_function transform_op image, is_class image = im_transform image (to_matrix params) (to_real ipol) (to_real wrap), is_image image = error (_ "bad arguments to " ++ "transform") { transform_op = Operator "transform" (transform ipol wrap params) Operator_type.COMPOUND_REWRAP false; } transform_search max_error max_iterations order ipol wrap sample reference = oo_binary_function transform_search_op sample reference, is_class sample = oo_binary'_function transform_search_op sample reference, is_class reference = im_transform_search sample reference (to_real max_error) (to_real max_iterations) (to_real order) (to_real ipol) (to_real wrap), is_image sample && is_image reference = error (_ "bad arguments to " ++ "transform_search") { transform_search_op = Operator "transform_search" (transform_search max_error max_iterations order ipol wrap) Operator_type.COMPOUND false; } rotate interp angle image = oo_binary_function rotate_op angle image, is_class angle = oo_binary'_function rotate_op angle image, is_class image = im_affinei_all image interp.value a (-b) b a 0 0, is_real angle && is_image image = error (_ "bad arguments to " ++ "rotate") { rotate_op = Operator "rotate" (rotate interp) Operator_type.COMPOUND_REWRAP false; a = cos angle; b = sin angle; } matrix_binary fn a b = itom (fn (mtoi a) (mtoi b)) { mtoi x = im_mask2vips (Matrix x); itom x = (im_vips2mask x).value; } join_lr a b = oo_binary_function join_lr_op a b, is_class a = oo_binary'_function join_lr_op a b, is_class b = join_im a b, is_image a && is_image b = matrix_binary join_im a b, is_matrix a && is_matrix b = error (_ "bad arguments to " ++ "join_lr") { join_lr_op = Operator "join_lr" join_lr Operator_type.COMPOUND_REWRAP false; join_im a b = insert (get_width a) 0 b a; } join_tb a b = oo_binary_function join_tb_op a b, is_class a = oo_binary'_function join_tb_op a b, is_class b = join_im a b, is_image a && is_image b = matrix_binary join_im a b, is_matrix a && is_matrix b = error (_ "bad arguments to " ++ "join_tb") { join_tb_op = Operator "join_tb" join_tb Operator_type.COMPOUND_REWRAP false; join_im a b = insert 0 (get_height a) b a; } conj x = oo_unary_function conj_op x, is_class x = (re x, -im x), is_complex x || (is_image x && format == Image_format.COMPLEX) || (is_image x && format == Image_format.DPCOMPLEX) // assume it's some sort of real = x { format = get_header "BandFmt" x; conj_op = Operator "conj" conj Operator_type.COMPOUND false; } clip2fmt format image = oo_unary_function clip2fmt_op image, is_class image = im_clip2fmt image (to_real format), is_image image = error (_ "bad arguments to " ++ "clip2fmt") { clip2fmt_op = Operator "clip2fmt" (clip2fmt format) Operator_type.COMPOUND_REWRAP false; } embed type x y w h im = oo_unary_function embed_op im, is_class im = im_embed im (to_real type) (to_real x) (to_real y) (to_real w) (to_real h), is_image im = error (_ "bad arguments to " ++ "embed") { embed_op = Operator "embed" (embed type x y w h) Operator_type.COMPOUND_REWRAP false; } /* Morph a mask with a [[real]] matrix ... turn m2 into an image, morph it * with m1, turn it back to a matrix again. */ _morph_2_masks fn m1 m2 = m'' { // The [[real]] can contain 128 values ... squeeze them out! image = im_mask2vips (Matrix m2) == 255; m2_width = get_width image; m2_height = get_height image; // need to embed m2 in an image large enough for us to be able to // position m1 all around the edges, with a 1 pixel overlap image' = embed 0 (m1.width / 2) (m1.height / 2) (m2_width + (m1.width - 1)) (m2_height + (m1.height - 1)) image; // morph! image'' = fn m1 image'; // back to mask m' = im_vips2mask ((double) image''); // Turn 0 in output to 128 (don't care). m'' = map (map fn) m'.value { fn a = 128, a == 0; = a; } } dilate mask image = oo_unary_function dilate_op image, is_class image = im_dilate image (to_matrix mask), is_image image = error (_ "bad arguments to " ++ "dilate") { dilate_op = Operator "dilate" dilate_object Operator_type.COMPOUND_REWRAP false; dilate_object x = _morph_2_masks dilate mask x, is_matrix x = dilate mask x; } erode mask image = oo_unary_function erode_op image, is_class image = im_erode image (to_matrix mask), is_image image = error (_ "bad arguments to " ++ "erode") { erode_op = Operator "erode" erode_object Operator_type.COMPOUND_REWRAP false; erode_object x = _morph_2_masks erode mask x, is_matrix x = erode mask x; } conv mask image = oo_unary_function conv_op image, is_class image = im_conv image (to_matrix mask), is_image image = error (_ "bad arguments to " ++ "conv" ++ ": " ++ "conv (" ++ print mask ++ ") (" ++ print image ++ ")") { conv_op = Operator "conv" (conv mask) Operator_type.COMPOUND_REWRAP false; } convf mask image = oo_unary_function convf_op image, is_class image = im_conv_f image (to_matrix mask), is_image image = error (_ "bad arguments to " ++ "convf" ++ ": " ++ "convf (" ++ print mask ++ ") (" ++ print image ++ ")") { convf_op = Operator "convf" (convf mask) Operator_type.COMPOUND_REWRAP false; } convsep mask image = oo_unary_function convsep_op image, is_class image = im_convsep image (to_matrix mask), is_image image = error (_ "bad arguments to " ++ "convsep") { convsep_op = Operator "convsep" (convsep mask) Operator_type.COMPOUND_REWRAP false; } aconvsep layers mask image = oo_unary_function aconvsep_op image, is_class image = im_aconvsep image (to_matrix mask) (to_real layers), is_image image = error (_ "bad arguments to " ++ "aconvsep") { aconvsep_op = Operator "aconvsep" (aconvsep layers mask) Operator_type.COMPOUND_REWRAP false; } convsepf mask image = oo_unary_function convsepf_op image, is_class image = im_convsep_f image (to_matrix mask), is_image image = error (_ "bad arguments to " ++ "convsepf") { convsepf_op = Operator "convsepf" (convsepf mask) Operator_type.COMPOUND_REWRAP false; } rank w h n image = oo_unary_function rank_op image, is_class image = im_rank image (to_real w) (to_real h) (to_real n), is_image image = error (_ "bad arguments to " ++ "rank") { rank_op = Operator "rank" (rank w h n) Operator_type.COMPOUND_REWRAP false; } rank_image n x = rlist x.value, is_Group x = rlist x, is_list x = error (_ "bad arguments to " ++ "rank_image") { rlist l = wrapper ranked, has_wrapper = ranked { has_wrapper = has_member_list (has_member "Image") l; wrapper = get_member_list (has_member "Image") (get_member "Image") l; ranked = im_rank_image (map get_image l) (to_real n); } } // find the correlation surface for a small image within a big one correlate small big = oo_binary_function correlate_op small big, is_class small = oo_binary'_function correlate_op small big, is_class big = im_spcor big small, is_image small && is_image big = error (_ "bad arguments to " ++ "correlate") { correlate_op = Operator "correlate" correlate Operator_type.COMPOUND_REWRAP false; } // just sum-of-squares-of-differences correlate_fast small big = oo_binary_function correlate_fast_op small big, is_class small = oo_binary'_function correlate_fast_op small big, is_class big = im_fastcor big small, is_image small && is_image big = error (_ "bad arguments to " ++ "correlate_fast") { correlate_fast_op = Operator "correlate_fast" correlate_fast Operator_type.COMPOUND_REWRAP false; } // set Type, wrap as Plot_hist if it's a class hist_tag x = oo_unary_function hist_tag_op x, is_class x = image_set_type Image_type.HISTOGRAM x, is_image x = error (_ "bad arguments to " ++ "hist_tag") { hist_tag_op = Operator "hist_tag" (Plot_histogram @ hist_tag) Operator_type.COMPOUND false; } hist_find x = oo_unary_function hist_find_op x, is_class x = im_histgr x (-1), is_image x = error (_ "bad arguments to " ++ "hist_find") { hist_find_op = Operator "hist_find" (Plot_histogram @ hist_find) Operator_type.COMPOUND false; } hist_find_nD bins image = oo_unary_function hist_find_nD_op image, is_class image = im_histnD image (to_real bins), is_image image = error (_ "bad arguments to " ++ "hist_find_nD") { hist_find_nD_op = Operator "hist_find_nD" (hist_find_nD bins) Operator_type.COMPOUND_REWRAP false; } hist_find_indexed index value = oo_binary_function hist_find_indexed_op index value, is_class index = oo_binary'_function hist_find_indexed_op index value, is_class value = im_hist_indexed index value, is_image index && is_image value = error (_ "bad arguments to " ++ "hist_find_indexed") { hist_find_indexed_op = Operator "hist_find_indexed" (compose (compose Plot_histogram) hist_find_indexed) Operator_type.COMPOUND false; } hist_map hist image = oo_binary_function hist_map_op hist image, is_class hist = oo_binary'_function hist_map_op hist image, is_class image = im_maplut image hist, is_image hist && is_image image = error (_ "bad arguments to " ++ "hist_map") { // can't use rewrap, as we want to always wrap as image hist_map_op = Operator "hist_map" (compose (compose Image) hist_map) Operator_type.COMPOUND false; } hist_cum hist = oo_unary_function hist_cum_op hist, is_class hist = im_histcum hist, is_image hist = error (_ "bad arguments to " ++ "hist_cum") { hist_cum_op = Operator "hist_cum" hist_cum Operator_type.COMPOUND_REWRAP false; } hist_diff hist = oo_unary_function hist_diff_op hist, is_class hist = im_histdiff hist, is_image hist = error (_ "bad arguments to " ++ "hist_diff") { hist_diff_op = Operator "hist_diff" hist_diff Operator_type.COMPOUND_REWRAP false; im_histdiff h = (conv (Matrix [[-1, 1]]) @ clip2fmt (fmt (get_format h))) h { // up the format so it can represent the whole range of // possible values from this mask fmt x = Image_format.SHORT, x == Image_format.UCHAR || x == Image_format.CHAR = Image_format.INT, x == Image_format.USHORT || x == Image_format.SHORT || x == Image_format.UINT = x; } } hist_norm hist = oo_unary_function hist_norm_op hist, is_class hist = im_histnorm hist, is_image hist = error (_ "bad arguments to " ++ "hist_norm") { hist_norm_op = Operator "hist_norm" hist_norm Operator_type.COMPOUND_REWRAP false; } hist_inv hist = oo_unary_function hist_inv_op hist, is_class hist = inv hist, is_image hist = error (_ "bad arguments to " ++ "hist_inv") { hist_inv_op = Operator "hist_inv" hist_inv Operator_type.COMPOUND_REWRAP false; inv im = im_invertlut (to_matrix im''') len { // need a vertical doublemask im' = rot90 im, get_width im > 1 && get_height im == 1 = im, get_width im == 1 && get_height im > 1 = error (_ "not a hist"); len = get_height im'; // values must be scaled to 0 - 1 im'' = im' / (max im'); // add an index column on the left // again, must be in 0-1 y = ((make_xy 1 len)?1) / len; im''' = y ++ im''; } } hist_match in ref = oo_binary_function hist_match_op in ref, is_class in = oo_binary'_function hist_match_op in ref, is_class ref = im_histspec in ref, is_image in && is_image ref = error (_ "bad arguments to " ++ "hist_match") { hist_match_op = Operator "hist_match" hist_match Operator_type.COMPOUND_REWRAP false; } hist_equalize x = hist_map ((hist_norm @ hist_cum @ hist_find) x) x; hist_equalize_local w h l image = oo_unary_function hist_equalize_local_op image, is_class image = out, is_image image = error (_ "bad arguments to " ++ "hist_equalize_local") { hist_equalize_local_op = Operator "hist_equalize_local" (hist_equalize_local w h l) Operator_type.COMPOUND_REWRAP false; [out] = vips_call "hist_local" [image, to_real w, to_real h] [$max_slope => to_real l]; } // find the threshold below which are percent of the image (percent in [0,1]) // eg. hist_thresh 0.1 x == 12, then x < 12 will light up 10% of the pixels hist_thresh percent image = x { // our own normaliser ... we don't want to norm channels separately // norm to [0,1] my_hist_norm h = h / max h; // normalised cumulative hist // we sum the channels before we normalise, because we want to treat them // all the same h = (my_hist_norm @ sum @ bandsplit @ hist_cum @ hist_find) image.value; // threshold that, then use im_profile to search for the x position in the // histogram x = mean (im_profile (h > percent) 1); } /* Sometimes useful, despite plotting now being built in, for making * diagnostic images. */ hist_plot hist = oo_unary_function hist_plot_op hist, is_class hist = im_histplot hist, is_image hist = error (_ "bad arguments to " ++ "hist_plot") { hist_plot_op = Operator "hist_plot" (Image @ hist_plot) Operator_type.COMPOUND false; } zerox d x = oo_unary_function zerox_op x, is_class x = im_zerox x (to_real d), is_image x = error (_ "bad arguments to " ++ "zerox") { zerox_op = Operator "zerox" (zerox d) Operator_type.COMPOUND_REWRAP false; } reduce kernel xshr yshr image = oo_unary_function reduce_op image, is_class image = reduce_im image, is_image image = error (_ "bad arguments to " ++ "reduce") { reduce_op = Operator "reduce" reduce_im Operator_type.COMPOUND_REWRAP false; reduce_im im = out { [out] = vips_call "reduce" [im, xshr, yshr] [$kernel => kernel.value]; } } similarity interpolate scale angle image = oo_unary_function similarity_op image, is_class image = similarity_im image, is_image image = error (_ "bad arguments to " ++ "similarity") { similarity_op = Operator "similarity" similarity_im Operator_type.COMPOUND_REWRAP false; similarity_im im = out { [out] = vips_call "similarity" [im] [ $interpolate => interpolate.value, $scale => scale, $angle => angle ]; } } resize kernel xfac yfac image = oo_unary_function resize_op image, is_class image = resize_im image, is_image image = error (_ "bad arguments to " ++ "resize") { resize_op = Operator "resize" resize_im Operator_type.COMPOUND_REWRAP false; xfac' = to_real xfac; yfac' = to_real yfac; rxfac' = 1 / xfac'; ryfac' = 1 / yfac'; is_nn = kernel.type == Kernel_type.NEAREST_NEIGHBOUR; resize_im im // upscale by integer factor, nearest neighbour = im_zoom im xfac' yfac', is_int xfac' && is_int yfac' && xfac' >= 1 && yfac' >= 1 && is_nn // downscale by integer factor, nearest neighbour = im_subsample im rxfac' ryfac', is_int rxfac' && is_int ryfac' && rxfac' >= 1 && ryfac' >= 1 && is_nn // everything else ... we just pass on to vips_resize() = vips_resize kernel xfac' yfac' im { vips_resize kernel hscale vscale im = out { [out] = vips_call "resize" [im, hscale] [$vscale => vscale, $kernel => kernel.value]; } } } sharpen radius x1 y2 y3 m1 m2 in = oo_unary_function sharpen_op in, is_class in = im_sharpen in (to_real radius) (to_real x1) (to_real y2) (to_real y3) (to_real m1) (to_real m2), is_image in = error (_ "bad arguments to " ++ "sharpen") { sharpen_op = Operator "sharpen" (sharpen radius x1 y2 y3 m1 m2) Operator_type.COMPOUND_REWRAP false; } tone_analyse s m h sa ma ha in = oo_unary_function tone_analyse_op in, is_class in = im_tone_analyse in (to_real s) (to_real m) (to_real h) (to_real sa) (to_real ma) (to_real ha), is_image in = error (_ "bad arguments to " ++ "tone_analyse") { tone_analyse_op = Operator "tone_analyse" (Plot_histogram @ tone_analyse s m h sa ma ha) Operator_type.COMPOUND false; } tone_map hist image = oo_binary_function tone_map_op hist image, is_class hist = oo_binary'_function tone_map_op hist image, is_class image = im_tone_map image hist, is_image hist && is_image image = error (_ "bad arguments to " ++ "tone_map") { tone_map_op = Operator "tone_map" tone_map Operator_type.COMPOUND_REWRAP false; } tone_build fmt b w s m h sa ma ha = (Plot_histogram @ clip2fmt fmt) (im_tone_build_range mx mx (to_real b) (to_real w) (to_real s) (to_real m) (to_real h) (to_real sa) (to_real ma) (to_real ha)) { mx = Image_format.maxval fmt; } icc_export depth profile intent in = oo_unary_function icc_export_op in, is_class in = im_icc_export_depth in (to_real depth) (expand profile) (to_real intent), is_image in = error (_ "bad arguments to " ++ "icc_export") { icc_export_op = Operator "icc_export" (icc_export depth profile intent) Operator_type.COMPOUND_REWRAP false; } icc_import profile intent in = oo_unary_function icc_import_op in, is_class in = im_icc_import in (expand profile) (to_real intent), is_image in = error (_ "bad arguments to " ++ "icc_import") { icc_import_op = Operator "icc_import" (icc_import profile intent) Operator_type.COMPOUND_REWRAP false; } icc_import_embedded intent in = oo_unary_function icc_import_embedded_op in, is_class in = im_icc_import_embedded in (to_real intent), is_image in = error (_ "bad arguments to " ++ "icc_import_embedded") { icc_import_embedded_op = Operator "icc_import_embedded" (icc_import_embedded intent) Operator_type.COMPOUND_REWRAP false; } icc_transform in_profile out_profile intent in = oo_unary_function icc_transform_op in, is_class in = im_icc_transform in (expand in_profile) (expand out_profile) (to_real intent), is_image in = error (_ "bad arguments to " ++ "icc_transform") { icc_transform_op = Operator "icc_transform" (icc_transform in_profile out_profile intent) Operator_type.COMPOUND_REWRAP false; } icc_ac2rc profile in = oo_unary_function icc_ac2rc_op in, is_class in = im_icc_ac2rc in (expand profile), is_image in = error (_ "bad arguments to " ++ "icc_ac2rc") { icc_ac2rc_op = Operator "icc_ac2rc" (icc_ac2rc profile) Operator_type.COMPOUND_REWRAP false; } // Given a xywh rect, flip it around so wh are always positive rect_normalise x y w h = [x', y', w', h'] { x' = x + w, w < 0 = x; y' = y + h, h < 0 = y; w' = abs w; h' = abs h; } draw_flood_blob x y ink image = oo_unary_function draw_flood_blob_op image, is_class image = im_draw_flood_blob image (to_real x) (to_real y) ink, is_image image = error (_ "bad arguments to " ++ "draw_flood_blob") { draw_flood_blob_op = Operator "draw_flood_blob" (draw_flood_blob x y ink) Operator_type.COMPOUND_REWRAP false; } draw_flood x y ink image = oo_unary_function draw_flood_op image, is_class image = im_draw_flood image (to_real x) (to_real y) ink, is_image image = error (_ "bad arguments to " ++ "draw_flood") { draw_flood_op = Operator "draw_flood" (draw_flood x y ink) Operator_type.COMPOUND_REWRAP false; } /* This version of draw_rect uses insert_noexpand and will be fast, even for * huge images. */ draw_rect_width x y w h f t ink image = oo_unary_function draw_rect_width_op image, is_class image = my_draw_rect_width image (to_int x) (to_int y) (to_int w) (to_int h) (to_int f) (to_int t) ink, is_image image = error (_ "bad arguments to " ++ "draw_rect_width") { draw_rect_width_op = Operator "draw_rect_width" (draw_rect_width x y w h f t ink) Operator_type.COMPOUND_REWRAP false; my_draw_rect_width image x y w h f t ink = insert x' y' (block w' h') image, f == 1 = (insert x' y' (block w' t) @ insert (x' + w' - t) y' (block t h') @ insert x' (y' + h' - t) (block w' t) @ insert x' y' (block t h')) image { insert = insert_noexpand; block w h = image_new w h (get_bands image) (get_format image) (get_coding image) (get_type image) ink' 0 0; ink' = Vector ink, is_list ink = ink; [x', y', w', h'] = rect_normalise x y w h; } } /* Default to 1 pixel wide edges. */ draw_rect x y w h f ink image = draw_rect_width x y w h f 1 ink image; /* This version of draw_rect uses the paintbox rect draw operation. It is an * inplace operation and will use bucketloads of memory. */ draw_rect_paintbox x y w h f ink image = oo_unary_function draw_rect_op image, is_class image = im_draw_rect image (to_real x) (to_real y) (to_real w) (to_real h) (to_real f) ink, is_image image = error (_ "bad arguments to " ++ "draw_rect_paintbox") { draw_rect_op = Operator "draw_rect" (draw_rect x y w h f ink) Operator_type.COMPOUND_REWRAP false; } draw_circle x y r f ink image = oo_unary_function draw_circle_op image, is_class image = im_draw_circle image (to_real x) (to_real y) (to_real r) (to_real f) ink, is_image image = error (_ "bad arguments to " ++ "draw_circle") { draw_circle_op = Operator "draw_circle" (draw_circle x y r f ink) Operator_type.COMPOUND_REWRAP false; } draw_line x1 y1 x2 y2 ink image = oo_unary_function draw_line_op image, is_class image = im_draw_line image (to_real x1) (to_real y1) (to_real x2) (to_real y2) ink, is_image image = error (_ "bad arguments to " ++ "draw_line") { draw_line_op = Operator "draw_line" (draw_line x1 y1 x2 y2 ink) Operator_type.COMPOUND_REWRAP false; } print_base base in = oo_unary_function print_base_op in, is_class in = map (print_base base) in, is_list in = print_base_real, is_real in = error (_ "bad arguments to " ++ "print_base") { print_base_op = Operator "print_base" (print_base base) Operator_type.COMPOUND false; print_base_real = error "print_base: bad base", base < 2 || base > 16 = "0", in < 0 || chars == [] = reverse chars { digits = map (\x x % base) (takewhile (not_equal 0) (iterate (\x idivide x base) in)); chars = map tohd digits; tohd x = (char) ((int) '0' + x), x < 10 = (char) ((int) 'A' + (x - 10)); } } /* id x: the identity function * * id :: * -> * */ id x = x; /* const x y: junk y, return x * * (const 3) is the function that always returns 3. * const :: * -> ** -> * */ const x y = x; /* converse fn a b: swap order of args to fn * * converse fn a b == fn b a * converse :: (* -> ** -> ***) -> ** -> * -> *** */ converse fn a b = fn b a; /* fix fn x: find the fixed point of a function */ fix fn x = limit (iterate fn x); /* until pred fn n: apply fn to n until pred succeeds; return that value * * until (more 1000) (multiply 2) 1 = 1024 * until :: (* -> bool) -> (* -> *) -> * -> * */ until pred fn n = n, pred n = until pred fn (fn n); /* Infinite list of primes. */ primes = 1 : (sieve [2 ..]) { sieve l = hd l : sieve (filter (nmultiple (hd l)) (tl l)); nmultiple n x = x / n != (int) (x / n); } /* Map an n-ary function (pass the args as a list) over groups of objects. * The objects can be single objects or groups. If more than one * object is a group, we iterate for the length of the smallest group. * Don't loop over plain lists, since we want (eg.) "mean [1, 2, 3]" to work. * Treat [] as no-value --- ie. if any of the inputs are [] we put [] into the * output and don't apply the function. copy-pasted into _types, keep in sync */ map_nary fn args = fn args, groups == [] = Group (map process [0, 1 .. shortest - 1]) { // find all the group arguments groups = filter is_Group args; // what's the length of the shortest group arg? shortest = foldr1 min_pair (map (len @ get_value) groups); // process index n ... pull that member from each argument // recurse to handle application, so we work for nested groups too process n = NULL, any (map (is_noval n) args) = map_nary fn (map (extract n) args) { extract n arg = arg.value?n, is_Group arg = arg; is_noval n arg = is_Group arg && arg.value?n == NULL; } } /* Map a 1-ary function over an object. */ map_unary fn a = map_nary (list_1ary fn) [a]; /* Map a 2-ary function over a pair of objects. */ map_binary fn a b = map_nary (list_2ary fn) [a, b]; /* Map a 3-ary function over three objects. */ map_trinary fn a b c = map_nary (list_3ary fn) [a, b, c]; /* Map a 4-ary function over three objects. */ map_quaternary fn a b c d = map_nary (list_4ary fn) [a, b, c, d]; /* Same as map_nary, but for lists. Handy for (eg.) implementing arith ops on * vectors and matricies. */ map_nary_list fn args = fn args, lists == [] = map process [0, 1 .. shortest - 1] { // find all the list arguments lists = filter is_list args; // what's the length of the shortest list arg? shortest = foldr1 min_pair (map len lists); // process index n ... pull that member from each argument // recurse to handle application, so we work for nested lists too process n = map_nary_list fn (map (extract n) args) { extract n arg = arg?n, is_list arg = arg; } } map_unaryl fn a = map_nary_list (list_1ary fn) [a]; map_binaryl fn a b = map_nary_list (list_2ary fn) [a, b]; /* Remove features smaller than x pixels across from an image. This used to be * rather complex ... convsep is now good enough to use. */ smooth x image = convsep (matrix_gaussian_blur (to_real x * 2)) image; /* Chop up an image into a list of lists of smaller images. Pad edges with * black. */ imagearray_chop tile_width tile_height hoverlap voverlap i = map chop' [0, vstep .. last_y] { width = get_width i; height = get_height i; bands = get_bands i; format = get_format i; type = get_type i; tile_width' = to_real tile_width; tile_height' = to_real tile_height; hoverlap' = to_real hoverlap; voverlap' = to_real voverlap; /* Unique pixels per tile. */ hstep = tile_width' - hoverlap'; vstep = tile_height' - voverlap'; /* Number of tiles across and down. Remember the case where width == * hstep. */ across = (int) ((width - 1) / hstep) + 1; down = (int) ((height - 1) / vstep) + 1; /* top/left of final tile. */ last_x = hstep * (across - 1); last_y = vstep * (down - 1); /* How much do we need to pad by? */ sx = last_x + tile_width'; sy = last_y + tile_height'; /* Expand image with black to pad size. */ pad = embed 0 0 0 sx sy i; /* Chop up a row. */ chop' y = map chop'' [0, hstep .. last_x] { chop'' x = extract_area x y tile_width' tile_height' pad; } } /* Reassemble image. */ imagearray_assemble hoverlap voverlap il = (image_set_origin 0 0 @ foldl1 tbj @ map (foldl1 lrj)) il { lrj l r = insert (get_width l + hoverlap) 0 r l; tbj t b = insert 0 (get_height t + voverlap) b t; } /* Generate an nxn identity matrix. */ identity_matrix n = error "identity_matrix: n > 0", n < 1 = map line [0 .. n - 1] { line p = take p [0, 0 ..] ++ [1] ++ take (n - p - 1) [0, 0 ..]; } /* Incomplete gamma function Q(a, x) == 1 - P(a, x) FIXME ... this is now a builtin, until we can get a nice List class (requires overloadable ':') gammq a x = error "bad args", x < 0 || a <= 0 = 1 - gamser, x < a + 1 = gammcf { gamser = (gser a x)?0; gammcf = (gcf a x)?0; } */ /* Incomplete gamma function P(a, x) evaluated as series representation. Also * return ln(gamma(a)) ... nr in c, pp 218 */ gser a x = [gamser, gln] { gln = gammln a; gamser = error "bad args", x < 0 = 0, x == 0 = 1 // fix this { // maximum iterations maxit = 100; ap = List [a + 1, a + 2 ...]; xoap = x / ap; del = map product (prefixes xoap.value); /* del = map (multiply (1 / a)) (map product (prefixes xoap)) del = xap = iterate (multiply */ /* Generate all prefixes of a list ... [1,2,3] -> [[1], [1, 2], [1, 2, * 3], [1, 2, 3, 4] ...] */ prefixes l = map (converse take l) [1..]; } } /* ln(gamma(xx)) ... nr in c, pp 214 */ gammln xx = gln { cof = [76.18009172947146, -86.50532032941677, 24.01409824083091, -1.231739572450155, 0.1208650973866179e-2, -0.5395239384953e-5]; y = take 6 (iterate (add 1) (xx + 1)); ser = 1.000000000190015 + sum (map2 divide cof y); tmp = xx + 0.5; tmp' = tmp - ((xx + 0.5) * log tmp); gln = -tmp + log (2.5066282746310005 * ser / xx); } /* make a LUT from a scatter */ buildlut x = Plot_histogram (im_buildlut x), is_Matrix x && x.width > 1 = im_buildlut (Matrix x), is_matrix x && is_list_len_more 1 x?0 = error (_ "bad arguments to " ++ "buildlut"); /* Linear regression. Return a class with the stuff we need in. * from s15.2, p 665 NR in C * * Also calculate R2, see eg.: * https://en.wikipedia.org/wiki/Coefficient_of_determination */ linreg xes yes = obj { obj = class { // in case we ever get shown in the workspace _vislevel = 2; slope = sum [t * y :: [t, y] <- zip2 tes yes] / st2; intercept = (sy - sx * slope) / ss; chi2 = sum [(y - intercept - slope * x) ** 2 :: [x, y] <- zip2 xes yes]; siga = (chi2 / (ss - 2)) ** 0.5 * ((1 + sx ** 2 / (ss * st2)) / ss) ** 0.5; sigb = (chi2 / (ss - 2)) ** 0.5 * (1 / st2) ** 0.5; // for compat with linregw, see below q = 1.0; R2 = 1 - chi2 / sum [(y - my) ** 2 :: y <- yes]; } ss = len xes; sx = sum xes; sy = sum yes; my = sy / ss; sxoss = sx / ss; tes = [x - sxoss :: x <- xes]; st2 = sum [t ** 2 :: t <- tes]; } /* Weighted linear regression. Xes, yes and a list of deviations. */ linregw xes yes devs = obj { obj = class { // in case we ever get shown in the workspace _vislevel = 2; slope = sum [(t * y) / sd :: [t, y, sd] <- zip3 tes yes devs] / st2; intercept = (sy - sx * slope) / ss; chi2 = sum [((y - intercept - slope * x) / sd) ** 2 :: [x, y, sd] <- zip3 xes yes devs]; siga = ((1 + sx * sx / (ss * st2)) / ss) ** 0.5; sigb = (1 / st2) ** 0.5; q = gammq (0.5 * (len xes - 2)) (0.5 * chi2); R2 = 1 - chi2 / sum [(y - my) ** 2 :: y <- yes]; } wt = [sd ** -0.5 :: sd <- devs]; ss = sum wt; sx = sum [x * w :: [x, w] <- zip2 xes wt]; sy = sum [y * w :: [y, w] <- zip2 yes wt]; my = sy / len xes; sxoss = sx / ss; tes = [(x - sxoss) / sd :: [x, sd] <- zip2 xes devs]; st2 = sum [t ** 2 :: t <- tes]; } /* Clustering: pass in a list of points, repeatedly merge the * closest two points until no two points are closer than the threshold. * Return [merged-points, corresponding-weights]. A weight is a list of the * indexes we merged to make that point, ie. len weight == how significant * this point is. * * eg. * cluster 12 [152,154,155,42,159] == * [[155,42],[[1,2,0,4],[3]]] */ cluster thresh points = oo_unary_function cluster_op points, is_class points // can't use [0..len points - 1], in case len points == 0 = merge [points, map (converse cons []) (take (len points) [0 ..])], is_list points = error (_ "bad arguments to " ++ "cluster") { cluster_op = Operator "cluster" (cluster thresh) Operator_type.COMPOUND false; merge x = x, m < 2 || d > thresh = merge [points', weights'] { [points, weights] = x; m = len points; // generate indexes of all possible pairs, avoiding comparing a thing // to itself, and assuming that dist is reflexive // first index is always less than 2nd index // the +1,+2 makes sure we have an increasing generator, otherwise we // can get [3 .. 4] (for example), which will make a decreasing // sequence pairs = [[x, y] :: x <- [0 .. m - 1]; y <- [x + 1, x + 2 .. m - 1]]; // distance function // arg is eg. [3,1], meaning get distance from point 3 to point 1 dist x = abs (points?i - points?j) { [i, j] = x; } // smallest distance, then the two points we merge p = minpos (map dist pairs); d = dist pairs?p; [i, j] = pairs?p; // new point and new weight nw = weights?i ++ weights?j; np = (points?i * len weights?i + points?j * len weights?j) / len nw; // remove element i from a list remove i l = take i l ++ drop (i + 1) l; // remove two old points, add the new merged one // i < j (see "pairs", above) points' = np : remove i (remove j points); weights' = nw : remove i (remove j weights); } } /* Extract the area of an image around an arrow. * Transform the image to make the arrow horizontal, then displace by hd and * vd pxels, then cut out a bit h pixels high centered on the arrow. */ extract_arrow hd vd h arrow = extract_area (re p' + hd) (im p' - h / 2 + vd) (re pv) h im' { // the line as a polar vector pv = polar (arrow.width, arrow.height); a = im pv; // smallest rotation that will make the line horizontal a' = 360 - a, a > 270 = 180 - a, a > 90 = -a; im' = rotate Interpolate_bilinear a' arrow.image; // look at the start and end of the arrow, pick the leftmost p = (arrow.left, arrow.top), arrow.left <= arrow.right = (arrow.right, arrow.bottom); // transform that point to im' space p' = rectangular (polar p + (0, a')) + (im'.xoffset, im'.yoffset); } /* You'd think these would go in _convert, but they are not really colour ops, * so put them here. */ rad2float image = oo_unary_function rad2float_op image, is_class image = im_rad2float image, is_image image = error (_ "bad arguments to " ++ "rad2float") { rad2float_op = Operator "rad2float" rad2float Operator_type.COMPOUND_REWRAP false; } float2rad image = oo_unary_function float2rad_op image, is_class image = im_float2rad image, is_image image = error (_ "bad arguments to " ++ "float2rad") { float2rad_op = Operator "float2rad" float2rad Operator_type.COMPOUND_REWRAP false; } segment x = oo_unary_function segment_op x, is_class x = image', is_image x = error (_ "bad arguments to " ++ "segment") { segment_op = Operator "segment" segment Operator_type.COMPOUND_REWRAP false; [image, nsegs] = im_segment x; image' = im_copy_set_meta image "n-segments" nsegs; } point a b = oo_binary_function point_op a b, is_class a = oo_binary'_function point_op a b, is_class b = im_read_point b x y, is_image b = [b?x?y], is_matrix b = [b?x], is_real_list b && y == 0 = [b?y], is_real_list b && x == 0 = error (_ "bad arguments to " ++ "point") { point_op = Operator "point" (\a\b Vector (point a b)) Operator_type.COMPOUND false; (x, y) = a, is_complex a; = (a?0, a?1), is_real_list a && is_list_len 2 a = error "bad position format"; } /* One image in, one out. */ system_image command x = oo_unary_function system_image_op x, is_class x = system x, is_image x = error (_ "bad arguments to " ++ "system_image") { system_image_op = Operator "system_image" (system_image command) Operator_type.COMPOUND_REWRAP false; system im = image_out { [image_out, log] = im_system_image (get_image im) "%s.tif" "%s.tif" command; } } /* Two images in, one out. */ system_image2 command x1 x2 = oo_binary_function system_image2_op x1 x2, is_class x1 = oo_binary'_function system_image2_op x1 x2, is_class x2 = system x1 x2, is_image x1 && is_image x2 = error (_ "bad arguments to " ++ "system_image2") { system_image2_op = Operator "system_image2" (system_image2 command) Operator_type.COMPOUND_REWRAP false; system x1 x2 = image_out { [image_out] = vips_call "system" [command] [ $in => [x1, x2], $out => true, $out_format => "%s.tif", $in_format => "%s.tif" ]; } } /* Three images in, one out. */ system_image3 command x1 x2 x3 = oo_binary_function system_image2_op x2 x3, is_class x2 = oo_binary'_function system_image2_op x2 x3, is_class x3 = system x1 x2 x3, is_image x1 && is_image x2 && is_image x3 = error (_ "bad arguments to " ++ "system_image3") { system_image2_op = Operator "system_image2" (system_image3 command x1) Operator_type.COMPOUND_REWRAP false; system x1 x2 x3 = image_out { [image_out] = vips_call "system" [command] [ $in => [x1, x2, x3], $out => true, $out_format => "%s.tif", $in_format => "%s.tif" ]; } } /* Zero images in, one out. */ system_image0 command = Image image_out { [image_out] = vips_call "system" [command] [ $out => true, $out_format => "%s.tif" ]; } hough_line w h x = oo_unary_function hough_line_op x, is_class x = hline (to_real w) (to_real h) x, is_image x = error (_ "bad arguments to " ++ "hough_line") { hough_line_op = Operator "hough_line" (hough_line w h) Operator_type.COMPOUND_REWRAP false; hline w h x = pspace { [pspace] = vips_call "hough_line" [x] [ $width => w, $height => h ]; } } hough_circle s mn mx x = oo_unary_function hough_circle_op x, is_class x = hcircle (to_real s) (to_real mn) (to_real mx) x, is_image x = error (_ "bad arguments to " ++ "hough_circle") { hough_circle_op = Operator "hough_circle" (hough_circle s mn mx) Operator_type.COMPOUND_REWRAP false; hcircle s mn mx x = pspace { [pspace] = vips_call "hough_circle" [x] [ $scale => s, $min_radius => mn, $max_radius => mx ]; } } mapim interp ind in = oo_binary_function mapim_op ind in, is_class ind = oo_binary'_function mapim_op ind in, is_class in = mapim_fn ind in, is_image ind && is_image in = error (_ "bad arguments to " ++ "mapim") { mapim_op = Operator "mapim" (mapim interp) Operator_type.COMPOUND_REWRAP false; mapim_fn ind im = out { [out] = vips_call "mapim" [im, ind] [$interpolate => interp]; } } perlin cell width height = Image im { [im] = vips_call "perlin" [to_real width, to_real height] [ $cell_size => to_real cell ]; } worley cell width height = Image im { [im] = vips_call "worley" [to_real width, to_real height] [ $cell_size => to_real cell ]; } gaussnoise width height mean sigma = im { [im] = vips_call "gaussnoise" [to_real width, to_real height] [ $mean => to_real mean, $sigma => to_real sigma ]; } flattenimage bg x = oo_unary_function flatten_op x, is_class x = flt (to_vector bg) x, is_image x = error (_ "bad arguments to " ++ "flattenimage") { flatten_op = Operator "flatten" (flattenimage bg) Operator_type.COMPOUND_REWRAP false; flt bg x = out { [out] = vips_call "flatten" [x] [ $background => bg.value ]; } } premultiply x = oo_unary_function premultiply_op x, is_class x = prem x, is_image x = error (_ "bad arguments to " ++ "premultiply") { premultiply_op = Operator "premultiply" premultiply Operator_type.COMPOUND_REWRAP false; prem x = out { [out] = vips_call "premultiply" [x] [ ]; } } unpremultiply x = oo_unary_function unpremultiply_op x, is_class x = unprem x, is_image x = error (_ "bad arguments to " ++ "unpremultiply") { unpremultiply_op = Operator "unpremultiply" unpremultiply Operator_type.COMPOUND_REWRAP false; unprem x = out { [out] = vips_call "unpremultiply" [x] [ ]; } } hist_entropy x = oo_unary_function hist_entropy_op x, is_class x = entropy x, is_image x = error (_ "bad arguments to " ++ "hist_entropy") { hist_entropy_op = Operator "hist_entropy" hist_entropy Operator_type.COMPOUND_REWRAP false; entropy x = out { [out] = vips_call "hist_entropy" [x] [ ]; } } nip2-8.7.0/share/nip2/compat/8.5/Preferences.ws0000644000175000017500000010177213273071606015717 00000000000000 nip2-8.7.0/share/nip2/compat/8.5/Filter.def0000644000175000017500000011740613273071606015011 00000000000000Filter_conv_item = class Menupullright "_Convolution" "various spatial convolution filters" { /* Some useful masks. */ filter_blur = Matrix_con 9 0 [[1, 1, 1], [1, 1, 1], [1, 1, 1]]; filter_sharp = Matrix_con 8 0 [[-1, -1, -1], [-1, 16, -1], [-1, -1, -1]]; filter_emboss = Matrix_con 1 128 [[-1, 0], [0, 1]]; filter_laplacian = Matrix_con 1 128 [[-1, -1, -1], [-1, 8, -1], [-1, -1, -1]]; filter_sobel = Matrix_con 1 128 [[1, 2, 1], [0, 0, 0], [-1, -2, -1]]; filter_lindet = Matrix_con 1 0 [[1, 1, 1], [-2, -2, -2], [1, 1, 1]]; Blur_item = class Menuaction "_Blur" "3x3 blur of image" { action x = map_unary (conv filter_blur) x; } Sharpen_item = class Menuaction "_Sharpen" "3x3 sharpen of image" { action x = map_unary (conv filter_sharp) x; } Emboss_item = class Menuaction "_Emboss" "1 pixel displace emboss" { action x = map_unary (conv filter_emboss) x; } Laplacian_item = class Menuaction "_Laplacian" "3x3 laplacian edge detect" { action x = map_unary (conv filter_laplacian) x; } Sobel_item = class Menuaction "So_bel" "3x3 Sobel edge detect" { action x = map_unary sobel x { sobel im = abs (a - 128) + abs (b - 128) { a = conv filter_sobel im; b = conv (rot270 filter_sobel) im; } } } /* 3x3 line detect of image diagonals should be scaled down by root(2) I guess Kirk */ Linedet_item = class Menuaction "Li_ne Detect" "3x3 line detect" { action x = map_unary lindet x { lindet im = foldr1 max_pair images { masks = take 4 (iterate rot45 filter_lindet); images = map (converse conv im) masks; } } } Usharp_item = class Menuaction "_Unsharp Mask" "cored sharpen of L only in LAB image" { action x = class _result { _vislevel = 3; size = Option "Radius" [ "3 pixels", "5 pixels", "7 pixels", "9 pixels", "11 pixels", "51 pixels" ] 0; st = Scale "Smoothness threshold" 0 5 2; bm = Scale "Brighten by at most" 1 50 10; dm = Scale "Darken by at most" 1 50 20; fs = Scale "Sharpen flat areas by" 0 5 0.5; js = Scale "Sharpen jaggy areas by" 0 5 1; _result = map_unary process x { process in = Image in''' { in' = colour_transform_to Image_type.LABS in.value; in'' = sharpen [3, 5, 7, 9, 11, 51]?size st bm dm fs js in'; in''' = colour_transform_to (get_type in) in''; } } } } sep1 = Menuseparator; Custom_blur_item = class Menuaction "Custom B_lur / Sharpen" "blur or sharpen with tuneable parameters" { action x = class _result { _vislevel = 3; type = Option "Type" ["Blur", "Sharpen"] 0; r = Scale "Radius" 1 100 1; fac = Scale "Amount" 0 1 1; layers = Scale "Layers" 1 100 10; shape = Option "Mask shape" [ "Square", "Gaussian" ] 0; prec = Option "Precision" ["Int", "Float", "Approximate"] 0; _result = map_unary process x { process in = clip2fmt blur.format proc { mask = matrix_blur r.value, shape.value == 0 = matrix_gaussian_blur r.value; blur = [convsep, convsepf, aconvsep layers]?prec mask in; proc = in + fac * (in - blur), type == 1 = blur * fac + in * (1 - fac); } } } } Custom_conv_item = class Menuaction "Custom C_onvolution" "convolution filter with tuneable parameters" { action x = class _result { _vislevel = 3; matrix = Matrix_con 1 0 [[0, 0, 0], [0, 1, 0], [0, 0, 0]]; separable = Toggle "Seperable convolution" false, matrix.width == 1 || matrix.height == 1 = false; type = Option "Convolution type" ["Int", "Float"] 0; rotate = Option "Rotate" [ "Don't rotate", "4 x 45 degrees", "8 x 45 degrees", "2 x 90 degrees" ] 0; _result = map_unary process x { process in = in.Image in' { conv_fn = im_lindetect, !separable && type == 0 && rotate == 1 = im_compass, !separable && type == 0 && rotate == 2 = im_gradient, !separable && type == 0 && rotate == 3 = im_conv, !separable && type == 0 = im_convsep, separable && type == 0 = im_conv_f, !separable && type == 1 = im_convsep_f, separable && type == 1 = error "boink!"; in' = conv_fn in.value matrix; } } } } } Filter_rank_item = class Menupullright "_Rank" "various rank filters" { Median_item = class Menuaction "_Median" "3x3 median rank filter" { action x = map_unary (rank 3 3 4) x; } Image_rank_item = class Menuaction "_Image Rank" "pixelwise rank a list or group of images" { action x = class _result { _vislevel = 3; select = Expression "Rank" ((int) (guess_size / 2)) { guess_size = len x, is_list x = len x.value, is_Group x = 0; } // can't really iterate over groups ... since we allow a group // argument _result = rank_image select x; } } Custom_rank_item = class Menuaction "Custom _Rank" "rank filter with tuneable parameters" { action x = class _result { _vislevel = 3; window_width = Expression "Window width" 3; window_height = Expression "Window height" 3; select = Expression "Rank" ((int) ((to_real window_width * to_real window_height) / 2)); _result = map_unary process x { process in = rank window_width window_height select in; } } } } Filter_morphology_item = class Menupullright "_Morphology" "various morphological filters" { /* Some useful masks. */ mask8 = Matrix_mor [[255, 255, 255], [255, 255, 255], [255, 255, 255]]; mask4 = Matrix_mor [[128, 255, 128], [255, 255, 255], [128, 255, 128]]; mask1 = Matrix_mor [[0, 0, 0], [0, 255, 0], [0, 0, 0]]; thin = Matrix_mor [[0, 0, 0], [128, 255, 128], [255, 255, 255]]; Threshold_item = Select_item.Threshold_item; sep1 = Menuseparator; Dilate_item = class Menupullright "_Dilate" "morphological dilate" { Dilate8_item = class Menuaction "_8-connected" "dilate with an 8-connected mask" { action x = map_unary (dilate mask8) x; } Dilate4_item = class Menuaction "_4-connected" "dilate with a 4-connected mask" { action x = map_unary (dilate mask4) x; } } Erode_item = class Menupullright "_Erode" "morphological erode" { Erode8_item = class Menuaction "_8-connected" "erode with an 8-connected mask" { action x = map_unary (erode mask8) x; } Erode4_item = class Menuaction "_4-connected" "erode with a 4-connected mask" { action x = map_unary (erode mask4) x; } } Custom_morph_item = class Menuaction "Custom _Morphology" "convolution morphological operator" { action x = class _result { _vislevel = 3; mask = mask4; type = Option "Operation" ["Erode", "Dilate"] 1; apply = Expression "Number of times to apply mask" 1; _result = map_unary morph x { morph image = Image value' { fatmask = (iterate (dilate mask) mask)?(to_real apply - 1); value' = im_erode image.value fatmask, type.value == 0 = im_dilate image.value fatmask; } } } } sep2 = Menuseparator; Open_item = class Menuaction "_Open" "open with an 8-connected mask" { action x = map_unary (dilate mask8 @ erode mask8) x; } Close_item = class Menuaction "_Close" "close with an 8-connected mask" { action x = map_unary (erode mask8 @ dilate mask8) x; } Clean_item = class Menuaction "C_lean" "remove 8-connected isolated points" { action x = map_unary clean x { clean x = x ^ erode mask1 x; } } Thin_item = class Menuaction "_Thin" "thin once" { action x = map_unary thinall x { masks = take 8 (iterate rot45 thin); thin1 m x = x ^ erode m x; thinall x = foldr thin1 x masks; } } } Filter_fourier_item = class Menupullright "_Fourier" "various Fourier filters" { preview_size = 64; sense_option = Option "Sense" [ "Pass", "Reject" ] 0; // make a visualisation image make_vis fn = (Image @ image_set_type Image_type.FOURIER @ rotquad @ fn) (im_create_fmask preview_size preview_size); // make the process function process fn in = (Image @ fn) (im_flt_image_freq in.value); New_ideal_item = class Menupullright "_Ideal" "various ideal Fourier filters" { High_low_item = class Menuaction "_High or Low Pass" "highpass/lowpass ideal Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; // call a freq func with our parameters _params f = f sense.value fc.value 0 0 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" "ring pass/reject ideal Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; rw = Scale "Ring width" 0.01 0.99 0.5; // call a freq func with our parameters _params f = f (sense.value + 6) fc.value rw.value 0 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Band_item = class Menuaction "_Band Pass or Band Reject" "band pass/reject ideal Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fcx = Scale "Horizontal frequency cutoff" 0.01 0.99 0.5; fcy = Scale "Vertical frequency cutoff" 0.01 0.99 0.5; r = Scale "Radius" 0.01 0.99 0.5; // call a freq func with our parameters _params f = f (sense.value + 12) fcx.value fcy.value r.value 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } } New_gaussian_item = class Menupullright "_Gaussian" "various Gaussian Fourier filters" { High_low_item = class Menuaction "_High or Low Pass" "highpass/lowpass Gaussian Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; // call a freq func with our parameters _params f = f (sense.value + 4) fc.value ac.value 0 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" "ring pass/reject Gaussian Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; rw = Scale "Ring width" 0.01 0.99 0.5; // call a freq func with our parameters _params f = f (sense.value + 10) fc.value rw.value ac.value 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Band_item = class Menuaction "_Band Pass or Band Reject" "band pass/reject Gaussian Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fcx = Scale "Horizontal frequency cutoff" 0.01 0.99 0.5; fcy = Scale "Vertical frequency cutoff" 0.01 0.99 0.5; r = Scale "Radius" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; // call a freq func with our parameters _params f = f (sense.value + 16) fcx.value fcy.value r.value ac.value 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } } New_butterworth_item = class Menupullright "_Butterworth" "various Butterworth Fourier filters" { High_low_item = class Menuaction "_High or Low Pass" "highpass/lowpass Butterworth Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; o = Scale "Order" 1 10 2; // call a freq func with our parameters _params f = f (sense.value + 2) o.value fc.value ac.value 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" "ring pass/reject Butterworth Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; rw = Scale "Ring width" 0.01 0.99 0.5; o = Scale "Order" 1 10 2; // call a freq func with our parameters _params f = f (sense.value + 8) o.value fc.value rw.value ac.value 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Band_item = class Menuaction "_Band Pass or Band Reject" "band pass/reject Butterworth Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fcx = Scale "Horizontal frequency cutoff" 0.01 0.99 0.5; fcy = Scale "Vertical frequency cutoff" 0.01 0.99 0.5; r = Scale "Radius" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; o = Scale "Order" 1 10 2; // call a freq func with our parameters _params f = f (sense.value + 14) o.value fcx.value fcy.value r.value ac.value; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } } } Filter_enhance_item = class Menupullright "_Enhance" "various enhancement filters" { Falsecolour_item = class Menuaction "_False Colour" "false colour a mono image" { action x = class _result { _vislevel = 3; o = Scale "Offset" (-255) 255 0; clip = Toggle "Clip colour range" false; _result = map_unary process x { process im = falsecolour mono'' { mono = colour_transform_to Image_type.B_W im; mono' = mono + o; mono'' = (unsigned char) mono', clip = (unsigned char) (mono' & 0xff); } } } } Statistical_diff_item = class Menuaction "_Statistical Difference" "statistical difference of an image" { action x = class _result { _vislevel = 3; wsize = Expression "Window size" 11; tmean = Expression "Target mean" 128; mean_weight = Scale "Mean weight" 0 1 0.8; tdev = Expression "Target deviation" 50; dev_weight = Scale "Deviation weight" 0 1 0.8; border = Toggle "Output image matches input image in size" true; _result = map_unary process x { process in = Image in'' { in' = colour_transform_to Image_type.B_W in.value; fn = im_stdif, border = im_stdif_raw; in'' = fn in' mean_weight.value tmean.expr dev_weight.value tdev.expr wsize.expr wsize.expr; } } } } Hist_equal_item = class Menupullright "_Equalise Histogram" "equalise contrast" { Global_item = class Menuaction "_Global" "equalise contrast globally" { action x = map_unary hist_equalize x; } Local_item = class Menuaction "_Local" "equalise contrast within a roving window" { action x = class _result { _vislevel = 3; window_width = Expression "Window width" 20; window_height = Expression "Window height" 20; max_slope = Scale "Maxium slope" 0 10 0; _result = map_unary process x { process in = hist_equalize_local window_width window_height max_slope in; } } } } } Filter_correlate_item = class Menupullright "Spatial _Correlation" "calculate correlation surfaces" { Correlate_item = class Menuaction "_Correlate" "calculate correlation coefficient" { action a b = map_binary corr a b { corr a b = correlate a b, a.width <= b.width && a.height <= b.height = correlate b a; } } Correlate_fast_item = class Menuaction "_Simple Difference" "calculate sum of squares of differences" { action a b = map_binary corr a b { corr a b = correlate_fast a b, a.width <= b.width && a.height <= b.height = correlate_fast b a; } } } Filter_hough_item = class Menupullright "_Hough Transform" "transform to parameter space" { Line_item = class Menuaction "_Line" "find straight line Hough transform" { action a = class _result { _vislevel = 3; pspace_width = Expression "Parameter space width" 64; pspace_height = Expression "Parameter space height" 64; _result = map_unary line a { line a = hough_line (to_real pspace_width) (to_real pspace_height) a; } } } Circle_item = class Menuaction "_Circle" "find circle Hough transform" { action a = class _result { _vislevel = 3; scale = Expression "Scale down parameter space by" 10; min_radius = Expression "Minimum radius" 10; max_radius = Expression "Maximum radius" 30; _result = map_unary circle a { circle a = hough_circle (to_real scale) (to_real min_radius) (to_real max_radius) a; } } } } Filter_coordinate_item = class Menupullright "_Coordinate Transform" "various coordinate transforms" { // run a function which wants a complex arg on a non-complex two-band // image run_cmplx fn x = re x' ++ im x' { x' = fn (x?0, x?1); } Polar_item = class Menuaction "_Polar" "transform to polar coordinates" { action a = class _result { _vislevel = 3; interp = Interpolate_picker Interpolate_type.BILINEAR; _result = map_unary to_polar a { to_polar im = mapim interp.value map' im { // xy image, origin in the centre, scaled to fit image to // a circle xy = make_xy im.width im.height; xy' = xy - Vector [im.width / 2, im.height / 2]; scale = min [im.width, im.height] / im.width; xy'' = 2 * xy' / scale; // to polar, scale vertical axis to 360 degrees map = run_cmplx polar xy''; map' = map * Vector [1, im.height / 360]; } } } } Rectangular_item = class Menuaction "_Rectangular" "transform to rectangular coordinates" { action a = class _result { _vislevel = 3; interp = Interpolate_picker Interpolate_type.BILINEAR; _result = map_unary to_rect a { to_rect im = mapim interp.value map'' im { // xy image, vertical scaled to 360 degrees xy = make_xy im.width im.height; xy' = xy * Vector [1, 360 / im.height]; // to rect, scale to image rect map = run_cmplx rectangular xy'; scale = min [im.width, im.height] / im.width; map' = map * scale / 2; map'' = map' + Vector [im.width / 2, im.height / 2]; } } } } } #separator Filter_tilt_item = class Menupullright "Ti_lt Brightness" "tilt brightness" { Left_right_item = class Menuaction "_Left to Right" "linear left-right brighten" { action x = class _result { _vislevel = 3; tilt = Scale "Left-right tilt" (-1) 1 0; _result = map_unary tilt_lr x { tilt_lr image = image * scale { ramp = im_fgrey image.width image.height; scale = (ramp - 0.5) * tilt + 1; } } } } Top_bottom_item = class Menuaction "_Top to Bottom" "linear top-bottom brighten" { action x = class _result { _vislevel = 3; tilt = Scale "Top-bottom tilt" (-1) 1 0; _result = map_unary tilt_tb x { tilt_tb image = image * scale { ramp = rot90 (im_fgrey image.height image.width); scale = (ramp - 0.5) * tilt + 1; } } } } sep1 = Menuseparator; Left_right_cos_item = class Menuaction "Cosine Left-_right" "cosine left-right brighten" { action x = class _result { _vislevel = 3; tilt = Scale "Left-right tilt" (-1) 1 0; shift = Scale "Shift by" (-1) 1 0; _result = map_unary tilt_lr x { tilt_lr image = image * scale { ramp = im_fgrey image.width image.height - 0.5 - shift.value; scale = 0.5 * tilt.value * cos (ramp * 180) + 1; } } } } Top_bottom_cos_item = class Menuaction "Cosine Top-_bottom" "cosine top-bottom brighten" { action x = class _result { _vislevel = 3; tilt = Scale "Top-bottom tilt" (-1) 1 0; shift = Scale "Shift by" (-1) 1 0; _result = map_unary tilt_tb x { tilt_tb image = image * scale { ramp = rot90 (im_fgrey image.height image.width) - 0.5 - shift.value; scale = 0.5 * tilt.value * cos (ramp * 180) + 1; } } } } sep2 = Menuseparator; Circular_item = class Menuaction "_Circular" "circular brighten" { action x = class _result { _vislevel = 3; tilt = Scale "Tilt" (-1) 1 0; hshift = Scale "Horizontal shift by" (-1) 1 0; vshift = Scale "Vertical shift by" (-1) 1 0; _result = map_unary tilt_tb x { tilt_tb image = image * scale { hramp = im_fgrey image.width image.height - 0.5 - hshift.value; vramp = rot90 (im_fgrey image.height image.width) - 0.5 - vshift.value; ramp = (hramp ** 2 + vramp ** 2) ** 0.5; scale = 0.5 * tilt.value * cos (ramp * 180) + 1; } } } } } Filter_blend_item = class Menupullright "_Blend" "blend objects together" { Scale_blend_item = class Menuaction "_Scale" "blend two objects together with a scale" { action a b = class _result { _vislevel = 3; p = Scale "Blend position" 0 1 0.5; _result = map_binary process a b { process im1 im2 = im1 * (1 - p.value) + im2 * p.value; } } } Image_blend_item = class Menuaction "_Image" "use an image to blend two objects" { action a b c = class _result { _vislevel = 3; i = Toggle "Invert mask" false; _result = map_trinary process a b c { process a b c = blend condition in1 in2, !i = blend (invert condition) in1 in2 { compare a b // prefer image as the condition = false, !has_image a && has_image b // prefer mono images as the condition = false, has_bands a && has_bands b && get_bands a > 1 && get_bands b == 1 // prefer uchar as the condition = false, has_format a && has_format b && get_format a > Image_format.UCHAR && get_format b == Image_format.UCHAR = true; [condition, in1, in2] = sortc compare [a, b, c]; } } } } Line_blend_item = class Menuaction "_Along Line" "blend between image a and image b along a line" { action a b = class _result { _vislevel = 3; orientation = Option "Orientation" [ "Left to Right", "Top to Bottom" ] 0; blend_position = Scale "Blend position" 0 1 0.5; blend_width = Scale "Blend width" 0 1 0.05; _result = map_binary process a b { process a b = blend (Image condition) b a { output_width = max_pair a.width b.width; output_height = max_pair a.height b.height; range = output_width, orientation == 0 = output_height; blend_position' = floor (range * blend_position.value); blend_width' = 1, blend_width.value == 0 = floor (range * blend_width.value); start = blend_position' - blend_width' / 2; background = (make_xy output_width output_height) >= blend_position'; ramp = im_grey blend_width' output_height, orientation == 0 = rot90 (im_grey blend_width' output_width); condition = insert_noexpand start 0 ramp background?0, orientation == 0 = insert_noexpand 0 start ramp background?1; } } } } Blend_alpha_item = class Menuaction "Blend _Alpha" "blend images with optional alpha channels" { // usage: layerit foreground background // input images must be either 1 or 3 bands, optionally + 1 band // which is used as the alpha channel // rich lott scale_mask im opacity = (unsigned char) (to_real opacity / 255 * im); // to mono intensity = colour_transform_to Image_type.B_W; // All the blend functions // I am grateful to this page // http://www.pegtop.net/delphi/blendmodes/ // for most of the formulae. blend_normal mask opacity fg bg = blend (scale_mask mask opacity) fg bg; blend_iflighter mask opacity fg bg = blend (if fg' > bg' then mask' else 0) fg bg { fg' = intensity fg; bg' = intensity bg; mask' = scale_mask mask opacity ; } blend_ifdarker mask opacity fg bg = blend (if fg' < bg' then mask' else 0) fg bg { fg' = intensity fg ; bg' = intensity bg ; mask' = scale_mask mask opacity ; } blend_multiply mask opacity fg bg = blend (scale_mask mask opacity) fg' bg { fg' = fg / 255 * bg; } blend_add mask opacity fg bg = blend mask fg' bg { fg' = opacity / 255 * fg + bg; } blend_subtract mask opacity fg bg = blend mask fg' bg { fg' = bg - opacity / 255 * fg; } blend_screen mask opacity fg bg = blend mask fg' bg { fg' = 255 - (255 - bg) * (255 - (opacity / 255 * fg)) / 255; } blend_burn mask opacity fg bg = blend mask fg'' bg { // fades to white which has no effect. fg' = (255 - opacity) + opacity * fg / 255; fg'' = 255 - 255 * (255 - bg) / fg'; } blend_softlight mask opacity fg bg = blend mask' fg' bg { mask' = scale_mask mask opacity; fg' = (2 * bg * fg + bg * bg * (1 - 2 * fg / 255)) / 255; } blend_hardlight mask opacity fg bg = blend mask' fg' bg { mask' = scale_mask mask opacity; fg' = 2 / 255 * fg * bg, bg < 129 = 255 - 2 * (255 - bg) * (255 - fg) / 255; } blend_lighten mask opacity fg bg = blend mask' fg' bg { mask' = scale_mask mask opacity; fg' = if bg < fg then fg else bg; } blend_darken mask opacity fg bg = blend mask' fg' bg { mask' = scale_mask mask opacity; fg' = if bg > fg then fg else bg; } blend_dodge mask opacity fg bg = blend mask fg'' bg { // one added to avoid divide by zero fg' = 1 + 255 - (opacity / 255 * fg); fg'' = bg * 255 / fg'; } blend_reflect mask opacity fg bg = blend mask' fg' bg { mask' = scale_mask mask opacity; fg' = bg * bg / (255 - fg); } blend_freeze mask opacity fg bg = blend mask' fg' bg { mask' = scale_mask mask opacity; fg' = 255 - (255 - bg) * (255 - bg) / (1 + fg); } blend_or mask opacity fg bg = bg | (unsigned char) fg' { mask' = scale_mask mask opacity; fg' = fg * mask' / 255; } blend_and mask opacity fg bg = bg & (unsigned char) fg' { mask' = scale_mask mask opacity; fg' = fg * mask' / 255; } // blend types NORMAL = 0; IFLIGHTER = 1; IFDARKER = 2; MULTIPLY = 3; ADD = 4; SUBTRACT = 5; SCREEN = 6; BURN = 7; DODGE = 8; HARDLIGHT = 9; SOFTLIGHT = 10; LIGHTEN = 11; DARKEN = 12; REFLECT = 13; FREEZE = 14; OR = 15; AND = 16; // names we show the user for blend types names = Enum [ _ "Normal" => NORMAL, _ "If Lighter" => IFLIGHTER, _ "If Darker" => IFDARKER, _ "Multiply" => MULTIPLY, _ "Add" => ADD, _ "Subtract" => SUBTRACT, _ "Screen" => SCREEN, _ "Burn" => BURN, _ "Soft Light" => SOFTLIGHT, _ "Hard Light" => HARDLIGHT, _ "Lighten" => LIGHTEN, _ "Darken" => DARKEN, _ "Dodge" => DODGE, _ "Reflect" => REFLECT, _ "Freeze" => FREEZE, _ "Bitwise OR" => OR, _ "Bitwise AND" => AND ]; // functions we call for each blend type actions = Table [ [NORMAL, blend_normal], [IFLIGHTER, blend_iflighter], [IFDARKER, blend_ifdarker], [MULTIPLY, blend_multiply], [ADD, blend_add], [SUBTRACT, blend_subtract], [SCREEN, blend_screen], [BURN, blend_burn], [SOFTLIGHT, blend_softlight], [HARDLIGHT, blend_hardlight], [LIGHTEN, blend_lighten], [DARKEN, blend_darken], [DODGE, blend_dodge], [REFLECT, blend_reflect], [FREEZE, blend_freeze], [OR, blend_or], [AND, blend_and] ]; // make sure im has an alpha channel (set opaque if it hasn't) put_alpha im = im, im.bands == 4 || im.bands == 2 = im ++ 255; // make sure im has no alpha channel lose_alpha im = extract_bands 0 3 im, im.bands == 4 = im?0, im.bands == 2 = im; // does im have al alpha channel? has_alpha im = im.bands == 2 || im.bands == 4; // get the alpha (set opaque if no alpha) get_alpha img = img'?3, img.bands == 4 = img'?1 { img' = put_alpha img; } // add an alpha ... cast the alpha image to match the main image append_alpha im alpha = im ++ clip2fmt im.format alpha; // makes fg the same size as bg, displaced with u, v pixel offset moveit fg bg u v = insert_noexpand u v fg bg' { bg' = image_new bg.width bg.height fg.bands fg.format fg.coding fg.type 0 0 0; } action bg fg = class _value { _vislevel = 3; method = Option_enum "Blend mode" names "Normal"; opacity = Scale "Opacity" 0 255 255; hmove = Scale "Horizontal move by" (-bg.width) (bg.width) 0; vmove = Scale "Vertical move by" (-bg.height) (bg.height) 0; _value = append_alpha blended merged_alpha, has_alpha bg = blended { // displace and resize fg (need to displace alpha too) fg' = moveit (put_alpha fg) bg hmove vmove; // transform to sRGB fg'' = colour_transform_to Image_type.sRGB (lose_alpha fg'); bg' = colour_transform_to Image_type.sRGB (lose_alpha bg); // alphas merged merged_alpha = get_alpha bg | get_alpha fg'; // blend together blended = (actions.lookup 0 1 method.value_thing) (get_alpha fg') opacity.value fg'' bg'; } } } } Filter_overlay_header_item = class Menuaction "_Overlay" "make a colour overlay of two monochrome images" { action a b = class _result { _vislevel = 3; colour = Option "Colour overlay as" [ _ "Green over Red", _ "Blue over Red", _ "Red over Green", _ "Red over Blue", _ "Blue over Green", _ "Green over Blue" ] 0; _result = map_binary overlay a b { overlay a b = image_set_type Image_type.sRGB [(a' ++ b' ++ 0), (a' ++ 0 ++ b'), (b' ++ a' ++ 0), (b' ++ 0 ++ a'), (0 ++ a' ++ b'), (0 ++ b' ++ a')]?colour { a' = colour_transform_to Image_type.B_W a; b' = colour_transform_to Image_type.B_W b; } } } } Filter_colourize_item = class Menuaction "_Colourize" "use a colour image or patch to tint a mono image" { action a b = class _result { _vislevel = 3; tint = Scale "Tint" 0 1 0.6; _result = map_binary tintit a b { tintit a b = colour_transform_to (get_type colour) colourized' { // get the mono thing first [mono, colour] = sortc (const (is_colour_type @ get_type)) [a, b]; colour' = tint * colour_transform_to Image_type.LAB colour; mono' = colour_transform_to Image_type.B_W mono; colourized = (mono' / 2.55) ++ colour'?1 ++ colour'?2; colourized' = image_set_type Image_type.LAB colourized; } } } } Filter_browse_multiband_item = class Menupullright "Bro_wse" "browse though an image, bitwise or bandwise" { Bandwise_item = class Menuaction "B_andwise" "browse through the bands of a multiband image" { action image = class _result { _vislevel = 3; band = Scale "Band" 0 (image.bands - 1) 0; display = Option "Display as" [ _ "Grey", _ "Green over Red", _ "Blue over Red", _ "Red over Green", _ "Red over Blue", _ "Blue over Green", _ "Green over Blue" ] 0; _result = output { down = (int) band.value; up = down + 1; remainder = band.value - down; fade x a = Vector [0], x == 0 = a * x; a = fade remainder image?up; b = fade (1 - remainder) image?down; output = [ a + b, a ++ b ++ 0, a ++ 0 ++ b, b ++ a ++ 0, b ++ 0 ++ a, 0 ++ a ++ b, 0 ++ b ++ a ] ? display; } } } Bitwise_item = class Menuaction "Bi_twise" "browse through the bits of an image" { action x = class _result { _vislevel = 3; bit = Islider "Bit" 0 (nbits - 1) (nbits - 1) { nbits = x.bits, is_Image x = 8; Islider c f t v = class scope.Scale c f t ((int) v) { Scale = Islider; } } _result = map_unary process x { process im = (im & (0x1 << bit.value)) != 0; } } } } #separator Filter_negative_item = class Menuaction "Photographic _Negative" "swap black and white" { action x = map_unary invert x { invert in = clip2fmt in.format (colour_transform_to (get_type in) rgb') { rgb = colour_transform_to Image_type.sRGB in; rgb' = 255 - rgb; } } } Filter_solarize_item = class Menuaction "_Solarise" "invert colours above a threshold" { action x = class _result { _vislevel = 3; kink = Scale "Kink" 0 1 0.5; _result = map_unary process x { process image = hist_map tab'''' image { // max pixel value for this format mx = Image_format.maxval image.format; // make a LUT ... just 8 and 16 bit tab = im_identity_ushort image.bands mx, image.format == Image_format.USHORT = im_identity image.bands; tab' = Image tab; // make basic ^ shape tab'' = tab' * (1 / kink), tab' < mx * kink = (mx - tab') / (1 - kink); tab''' = clip2fmt image.format tab''; // smooth a bit mask = matrix_blur (tab'''.width / 8); tab'''' = convsep mask tab'''; } } } } Filter_diffuse_glow_item = class Menuaction "_Diffuse Glow" "add a halo to highlights" { action x = class _result { _vislevel = 3; r = Scale "Radius" 0 50 5; highlights = Scale "Highlights" 0 100 95; glow = Scale "Glow" 0 1 0.5; colour = Colour_new_item.Widget_colour_item.action; _result = map_unary process x { process image = image' { mono = (unsigned char) (colour_transform_to Image_type.B_W image); thresh = hist_thresh (highlights.value / 100) mono; mask = mono > thresh; blur = convsep (matrix_gaussian_blur r.value) mask; colour' = colour_transform_to image.type colour; image' = image + colour' * glow * (blur / 255); } } } } Filter_drop_shadow_item = class Menuaction "Drop S_hadow" "add a drop shadow to an image" { action x = class _result { _vislevel = 3; sx = Scale "Horizontal shadow" (-50) 50 5; sy = Scale "Vertical shadow" (-50) 50 5; ss = Scale "Shadow softness" 0 20 5; bg_colour = Expression "Background colour" 255; sd_colour = Expression "Shadow colour" 128; alpha = Toggle "Shadow in alpha channel" false; transparent = Toggle "Zero pixels are transparent" false; _result = map_unary shadow x { shadow image = Image final { blur_size = ss.value * 2 + 1; // matrix we blur with to soften shadows blur_matrix = matrix_gaussian_blur blur_size; matrix_size = blur_matrix.width; matrix_radius = (int) (matrix_size / 2) + 1; // position and size of shadow image in input cods // before and after fuzzing shadow_rect = Rect sx.value sy.value image.width image.height; fuzzy_shadow_rect = shadow_rect.margin_adjust matrix_radius; // size and pos of final image, in input cods final_rect = image.rect.union fuzzy_shadow_rect; // hard part of shadow in output cods shadow_rect' = Rect (shadow_rect.left - final_rect.left) (shadow_rect.top - final_rect.top) shadow_rect.width shadow_rect.height; // make the shadow mask ... true for parts which cast // a shadow mask = (foldr1 bitwise_and @ bandsplit) (image.value != 0), transparent = image_new image.width image.height 1 Image_format.UCHAR Image_coding.NOCODING Image_type.B_W 255 0 0; mask' = embed 0 shadow_rect'.left shadow_rect'.top final_rect.width final_rect.height mask; mask'' = convsep blur_matrix mask'; // use mask to fade between bg and shadow colour mk_background colour = image_new final_rect.width final_rect.height image.bands image.format image.coding image.type colour 0 0; bg_image = mk_background bg_colour.expr; shadow_image = mk_background sd_colour.expr; bg = blend mask'' shadow_image bg_image; // make a full size mask fg_mask = embed 0 (image.rect.left - final_rect.left) (image.rect.top - final_rect.top) final_rect.width final_rect.height mask; // wrap up the input image ... put the shadow colour // around it, so if we are outputting a separate // alpha the shadow colour will be set correctly fg = insert (image.rect.left - final_rect.left) (image.rect.top - final_rect.top) image.value shadow_image; final // make a separate alpha = fg ++ mask'', alpha // paste image over shadow = if fg_mask then fg else bg; } } } } Filter_paint_text_item = class Menuaction "_Paint Text" "paint text into an image" { action x = paint_position, is_Group x = paint_area { paint_area = class _result { _check_args = [ [x, "x", check_Image] ]; _vislevel = 3; text = String "Text to paint" "Hello world!"; font = Fontname "Use font" Workspaces.Preferences.PAINTBOX_FONT; align = Option "Alignment" ["Left", "Centre", "Right"] 0; dpi = Expression "DPI" 300; colour = Expression "Text colour" 255; place = Region x (x.width / 4) (x.height / 4) (x.width / 2) (x.height / 2); _result = insert_noexpand place.left place.top (blend txt' fg place) x { fg = image_new place.width place.height x.bands x.format x.coding x.type colour.expr 0 0; txt = Image (im_text text.value font.value place.width align.value (to_real dpi)); bg = im_black place.width place.height 1; txt' = insert_noexpand 0 0 txt bg; } } paint_position = class _result { _vislevel = 3; text = Pattern_images_item.Text_item.action; colour = Expression "Text colour" 255; position = Option "Position" [ _ "North-west", _ "North", _ "North-east", _ "West", _ "Centre", _ "East", _ "South-west", _ "South", _ "South-east", _ "Specify in pixels" ] 4; left = Expression "Pixels from left" 0; top = Expression "Pixels from top" 0; _result = map_unary paint x { paint image = insert_noexpand x' y' place' image { xr = image.width - text.width; yr = image.height - text.height; x = left.expr, position == 9 = [0, xr / 2, xr]?(position % 3); y = top.expr, position == 9 = [0, yr / 2, yr]?(position / 3); x' = range 0 x (image.width - 1); y' = range 0 y (image.height - 1); w' = range 1 text.width (image.width - x'); h' = range 1 text.height (image.height - y'); place = extract_area x' y' w' h' image; text' = insert_noexpand 0 0 text (im_black w' h' 1); fg = image_new w' h' image.bands image.format image.coding image.type colour.expr 0 0; place' = blend text' fg place; } } } } } Autotrace_item = class Menuaction "_Trace" "convert a bitmap to an SVG file" { action x = class _result { _vislevel = 3; despeckle = Scale "Despeckle level" 1 20 1; line = Scale "Line threshold" 1 20 1; center = Toggle "Trace centreline" false; scale = Scale "SVG scale" 0.1 10 1; command = "autotrace %s " ++ join_sep " " [ofmt, ofile, desp, lint, cent] { prog = search_for_error "autotrace"; ofmt = "-output-format svg"; ofile = "-output-file %s"; desp = "-despeckle-level " ++ print despeckle.value; lint = "-line-threshold " ++ print line.value; cent = if center then "-centerline " else ""; } _result = Image output { [output] = vips_call "system" [command] [$in => [x.value], $in_format => "%s.ppm", $out => true, $out_format => "%s.svg[scale=" ++ print scale.value ++ "]" ]; } } } nip2-8.7.0/share/nip2/compat/8.5/Histogram.def0000644000175000017500000001636313273071606015521 00000000000000Hist_new_item = class Menupullright "_New" "new histogram" { Hist_item = class Menuaction "_Identity" "make an identity histogram" { action = class _result { _vislevel = 3; d = Option "Depth" ["8 bit", "16 bit"] 0; _result = Plot [] ([im_identity 1, im_identity_ushort 1 65536]?d); } } Hist_new_from_matrix = Matrix_buildlut_item; Hist_from_image_item = class Menuaction "Ta_g Image As Histogram" "set image Type to Histogram" { action x = hist_tag x; } Tone_item = class Menuaction "_Tone Curve" "make a new tone mapping curve" { action = class _result { _vislevel = 3; d = Option "Depth" ["8 bit", "16 bit"] 0; b = Scale "Black point" 0 100 0; w = Scale "White point" 0 100 100; sp = Scale "Shadow point" 0.1 0.3 0.2; mp = Scale "Mid-tone point" 0.4 0.6 0.5; hp = Scale "Highlight point" 0.7 0.9 0.8; sa = Scale "Shadow adjust" (-15) 15 0; ma = Scale "Mid-tone adjust" (-30) 30 0; ha = Scale "Highlight adjust" (-15) 15 0; _result = tone_build fmt b w sp mp hp sa ma ha { fmt = [Image_format.UCHAR, Image_format.USHORT]?d; } } } } Hist_convert_to_hist_item = class Menuaction "Con_vert to Histogram" "convert anything to a histogram" { action x = hist_tag (to_image x); } Hist_find_item = class Menupullright "_Find" "find a histogram" { Oned_item = class Menuaction "_One Dimension" "for a n-band image, make an n-band 1D histogram" { action x = map_unary hist_find x; } Nd_item = class Menuaction "_Many Dimensions" "for a n-band image, make an n-dimensional histogram" { action x = class _result { _vislevel = 3; // default to something small-ish bins = Expression "Number of bins in each dimension" 8; _result = map_unary process x { process in = hist_find_nD bins in; } } } Indexed_item = class Menuaction "_Indexed" "use a 1-band index image to pick bins for an n-band image" { action x y = map_binary map x y { map a b = hist_find_indexed index im { [im, index] = sortc (const is_index) [a, b]; is_index x = has_image x && b == 1 && (f == Image_format.UCHAR || f == Image_format.USHORT) { im = get_image x; b = get_bands x; f = get_format x; } } } } } Hist_map_item = class Menuaction "_Map" "map an image through a histogram" { action x y = map_binary map x y { map a b = hist_map hist im { [im, hist] = sortc (const is_hist) [a, b]; } } } Hist_eq_item = Filter_enhance_item.Hist_equal_item; #separator Hist_cum_item = class Menuaction "_Integrate" "form cumulative histogram" { action x = map_unary hist_cum x; } Hist_diff_item = class Menuaction "_Differentiate" "find point-to-point differences (inverse of Integrate)" { action x = map_unary hist_diff x; } Hist_norm_item = class Menuaction "N_ormalise" "normalise a histogram" { action x = map_unary hist_norm x; } Hist_inv_item = class Menuaction "In_vert" "invert a histogram" { action x = map_unary hist_inv x; } Hist_match_item = class Menuaction "Ma_tch" "find LUT which will match first histogram to second" { action in ref = map_binary hist_match in ref; } Hist_zerox_item = class Menuaction "_Zero Crossings" "find zero crossings" { action x = class _result { _vislevel = 3; edge = Option "Direction" [ "Positive-going", "Negative-going" ] 0; _result = map_unary (zerox (if edge == 0 then -1 else 1)) x; } } Hist_entropy_item = class Menuaction "Entropy" "calculate histogram entropy" { action x = hist_entropy x; } #separator Hist_profile_item = class Menuaction "Find _Profile" "search from image edges for non-zero pixels" { action x = class _result { _vislevel = 3; edge = Option "Search from" [ "Top edge down", "Left edge to right", "Bottom edge up", "Right edge to left" ] 2; _result = map_unary profile x { profile image = (Plot_histogram @ hist_tag) [ profilemb 0 image.value, profilemb 1 image.value, profilemb 0 (fliptb image.value), profilemb 1 (fliplr image.value) ]?edge; // im_profile only does 1 band images :-( profilemb d = bandjoin @ map (converse im_profile d) @ bandsplit; } } } Hist_project_item = class Menuaction "Find Pro_jections" "find horizontal and vertical projections" { action x = class { _vislevel = 2; _result = map_unary project x; // extract the result ... could be a group extr n = Plot_histogram _result?n, is_list _result = Group (map (Plot_histogram @ converse subscript n) _result.value); horizontal = extr 0; vertical = extr 1; centre = (gravity horizontal, gravity vertical); } } #separator Hist_graph_item = class Menuaction "P_lot Slice" "plot a slice along a guide or arrow" { action x = class _value { _vislevel = 3; width = Scale "Width" 1 40 1; displace = Scale "Horizontal displace" (-50) 50 0; vdisplace = Scale "Vertical displace" (-50) 50 0; _value = map_unary graph x { graph arrow = hist_tag area' { area = extract_arrow displace.value vdisplace.value width.value arrow; // squish vertically to get an average area' = resize Kernel_linear 1 (1 / width.value) area; } } } } Extract_arrow_item = class Menuaction "Extract _Arrow" "extract the area around an arrow" { action x = class _value { _vislevel = 3; width = Scale "Width" 1 40 1; displace = Scale "Horizontal displace" (-50) 50 0; vdisplace = Scale "Vertical displace" (-50) 50 0; _value = map_unary (extract_arrow displace.value vdisplace.value width.value) x; } } Hist_plot_item = class Menuaction "Plot _Object" "plot an object as a bar, point or line graph" { action x = class _result { _vislevel = 3; caption = Expression "Chart caption" "none"; format = Option_enum "Format" Plot_format.names "YYYY"; style = Option_enum "Style" Plot_style.names "Line"; auto = Toggle "Auto Range" true; xmin = Expression "X range minimum" 0; xmax = Expression "X range maximum" 1; ymin = Expression "Y range minimum" 0; ymax = Expression "Y range maximum" 1; xcaption = Expression "X axis caption" "none"; ycaption = Expression "Y axis caption" "none"; series_captions = Expression "Series captions" ["Band 0"]; _result = Plot options (image x) { options = [$style => style.value, $format => format.value] ++ range ++ captions; range = [], auto = [$xmin => xmin.expr, $xmax => xmax.expr, $ymin => ymin.expr, $ymax => ymax.expr]; captions = concat (map test caption_options) ++ [$series_captions => series_captions.expr] { caption_options = [ $caption => caption.expr, $xcaption => xcaption.expr, $ycaption => ycaption.expr ]; test x = [], value == "none" = [option_name => value] { [option_name, value] = x; } } image x = image (extract_arrow 0 0 1 x), is_Arrow x = get_image x, has_image x = x2b im, b == 1 = im { im = get_image (to_image x); w = get_width im; h = get_height im; b = get_bands im; // matrix to image makes a 1-band mxn image // we need to put columns into bands x2b im = bandjoin (map extract_col [0 .. w - 1]) { extract_col x = extract_area x 0 1 h im; } } } } } nip2-8.7.0/share/nip2/compat/8.5/Object.def0000644000175000017500000000220513273071606014760 00000000000000Object_duplicate_item = class Menuaction "_Duplicate" "take a copy of an object" { action x = map_unary copy x; } #separator Object_list_to_group_item = class Menuaction "_List to Group" "turn a list of objects into a group" { action x = to_group x; } Object_group_to_list_item = class Menuaction "_Group to List" "turn a group into a list of objects" { action x = to_list x; } #separator Object_break_item = class Menuaction "_Break Up Object" "break an object into a list of components" { action x = map_unary break x { break x = bandsplit x, is_Image x = map Vector x.value, is_Matrix x = x.value, is_Vector x || is_Real x = error "Breakup: not Image/Matrix/Vector/Real"; } } Object_assemble_item = class Menuaction "_Assemble Objects" "assemble a list of objects into a single object" { action x = map_unary ass x { ass x = [], x == [] = Vector x, is_real_list x = Matrix x, is_matrix x = bandjoin x, is_listof is_Image x = Vector (map get_value x), is_listof is_Real x = Matrix (map get_value x), is_listof is_Vector x = error "Assemble: not list of Image/Vector/Real/image/real"; } } nip2-8.7.0/share/nip2/compat/8.5/Makefile.in0000644000175000017500000003702413350464104015141 00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = share/nip2/compat/8.5 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(startdir)" DATA = $(start_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BISON = @BISON@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DLLWRAP = @DLLWRAP@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FFTW3_CFLAGS = @FFTW3_CFLAGS@ FFTW3_LIBS = @FFTW3_LIBS@ FGREP = @FGREP@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_LIBS = @GSL_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ IP_CFLAGS = @IP_CFLAGS@ IP_LIBS = @IP_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBGOFFICE_CFLAGS = @LIBGOFFICE_CFLAGS@ LIBGOFFICE_LIBS = @LIBGOFFICE_LIBS@ LIBGSF_CFLAGS = @LIBGSF_CFLAGS@ LIBGSF_LIBS = @LIBGSF_LIBS@ LIBGVC_CFLAGS = @LIBGVC_CFLAGS@ LIBGVC_LIBS = @LIBGVC_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ 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@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ REQUIRED_PACKAGES_CFLAGS = @REQUIRED_PACKAGES_CFLAGS@ REQUIRED_PACKAGES_LIBS = @REQUIRED_PACKAGES_LIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOP_SRCDIR = @TOP_SRCDIR@ UPDATE_DESKTOP_DATABASE = @UPDATE_DESKTOP_DATABASE@ UPDATE_MIME_DATABASE = @UPDATE_MIME_DATABASE@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XDG_OPEN = @XDG_OPEN@ XGETTEXT = @XGETTEXT@ 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@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ startdir = $(pkgdatadir)/compat/8.5 start_DATA = \ Math.def \ Image.def \ Magick.def \ Colour.def \ Tasks.def \ Object.def \ Filter.def \ Matrix.def \ Widgets.def \ Histogram.def \ Preferences.ws \ _joe_extra.def \ _joe_utilities.def \ _convert.def \ _generate.def \ _list.def \ _predicate.def \ _stdenv.def \ _Object.def \ _magick.def \ _types.def EXTRA_DIST = $(start_DATA) all: all-am .SUFFIXES: $(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) --foreign share/nip2/compat/8.5/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign share/nip2/compat/8.5/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): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-startDATA: $(start_DATA) @$(NORMAL_INSTALL) @list='$(start_DATA)'; test -n "$(startdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(startdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(startdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(startdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(startdir)" || exit $$?; \ done uninstall-startDATA: @$(NORMAL_UNINSTALL) @list='$(start_DATA)'; test -n "$(startdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(startdir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: 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 check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(startdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-startDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-startDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-startDATA install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags-am uninstall uninstall-am uninstall-startDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: nip2-8.7.0/share/nip2/compat/8.5/Matrix.def0000644000175000017500000002573113273071606015027 00000000000000 Matrix_build_item = class Menupullright "_New" "make a new matrix of some sort" { Plain_item = class Menuaction "_Plain" "make a new plain matrix widget" { action = Matrix (identity_matrix 3); } Convolution_item = class Menuaction "_Convolution" "make a new convolution matrix widget" { action = Matrix_con 1 0 [[0, 0, 0], [0, 1, 0], [0, 0, 0]]; } Recombination_item = class Menuaction "_Recombination" "make a new recombination matrix widget" { action = Matrix_rec (identity_matrix 3); } Morphology_item = class Menuaction "_Morphology" "make a new morphology matrix widget" { action = Matrix_mor [[0, 0, 0], [0, 255, 0], [0, 0, 0]]; } sep1 = Menuseparator; Matrix_identity_item = class Menuaction "_Identity" "make an identity matrix" { action = identity (identity_matrix 5); identity v = class _result { _vislevel = 3; s = Expression "Size" (len v); _result = Matrix (identity_matrix (to_real s)), to_real s != len v; = Matrix v; Matrix_vips value scale offset filename display = identity value; } } Matrix_series_item = class Menuaction "_Series" "make a series" { action = series (mkseries 0 1 5); mkseries s t e = transpose [[to_real s, to_real s + to_real t .. to_real e]]; series v = class _result { _vislevel = 3; _s = v?0?0; _t = v?1?0 - v?0?0; _e = (last v)?0; s = Expression "Start value" _s; t = Expression "Step by" _t; e = Expression "End value" _e; _result = Matrix (mkseries s t e), to_real s != _s || to_real t != _t || to_real e != _e = Matrix v; Matrix_vips value scale offset filename display = series value; } } Matrix_square_item = class Menuaction "_Square" "make a square matrix" { action = square (mksquare 5); mksquare s = replicate s (take s [1, 1 ..]); square v = class _result { _vislevel = 3; s = Expression "Size" (len v); _result = Matrix_con (sum v) 0 v, len v == to_real s = Matrix_con (sum m) 0 m { m = mksquare (to_real s); } Matrix_vips value scale offset filename display = square value; } } Matrix_circular_item = class Menuaction "_Circular" "make a circular matrix" { action = circle (mkcircle 3); mkcircle r = map2 (map2 pyth) xes yes { line = [-r .. r]; xes = replicate (2 * r + 1) line; yes = transpose xes; pyth a b = 1, (a**2 + b**2) ** 0.5 <= r = 0; } circle v = class _result { _vislevel = 3; r = Expression "Radius" ((len v - 1) / 2); _result = Matrix_con (sum v) 0 v, len v == r.expr * 2 + 1 = Matrix_con (sum m) 0 m { m = mkcircle (to_real r); } Matrix_vips value scale offset filename display = circle value; } } Matrix_gaussian_item = class Menuaction "_Gaussian" "make a gaussian matrix" { action = class _result { _vislevel = 3; s = Scale "Sigma" 0.001 10 1; ma = Scale "Minimum amplitude" 0 1 0.2; integer = Toggle "Integer" false; _result = fn s.value ma.value { fn = im_gauss_imask, integer = im_gauss_dmask; } } } Matrix_laplacian_item = class Menuaction "_Laplacian" "make the Laplacian of a Gaussian matrix" { action = class _result { _vislevel = 3; s = Scale "Sigma" 0.001 10 1.5; ma = Scale "Minimum amplitude" 0 1 0.1; integer = Toggle "Integer" false; _result = fn s.value ma.value { fn = im_log_imask, integer = im_log_dmask; } } } } Matrix_to_matrix_item = class Menuaction "Con_vert to Matrix" "convert anything to a matrix" { action x = to_matrix x; } #separator Matrix_extract_item = class Menupullright "_Extract" "extract rows or columns from a matrix" { Rows_item = class Menuaction "_Rows" "extract rows" { action x = class _result { _vislevel = 3; first = Expression "Extract from row" 0; number = Expression "Extract this many rows" 1; _result = map_unary process x { process x = extract_area 0 first (get_width x) number x; } } } Columns_item = class Menuaction "_Columns" "extract columns" { action x = class _result { _vislevel = 3; first = Expression "Extract from column" 0; number = Expression "Extract this many columns" 1; _result = map_unary process x { process mat = extract_area first 0 number (get_height x) x; } } } Area_item = class Menuaction "_Area" "extract area" { action x = class _result { _vislevel = 3; left = Expression "First column" 0; top = Expression "First row" 0; width = Expression "Number of columns" 1; height = Expression "Number of rows" 1; _result = map_unary process x { process mat = extract_area left top width height x; } } } Diagonal_item = class Menuaction "_Diagonal" "extract diagonal" { action x = class _result { _vislevel = 3; which = Option "Extract" [ "Leading Diagonal", "Trailing Diagonal" ] 0; _result = map_unary process x { process mat = mat.Matrix_base (map2 extr [0..] mat.value), which == 0 = mat.Matrix_base (map2 extr [mat.width - 1, mat.width - 2 .. 0] mat.value); extr n l = [l?n]; } } } } Matrix_insert_item = class Menupullright "_Insert" "insert rows or columns into a matrix" { // make a new 8-bit uchar image of wxh with pixels set to p // use to generate new cells newim w h p = image_new w h 1 Image_format.UCHAR Image_coding.NOCODING Image_type.B_W p 0 0; Rows_item = class Menuaction "_Rows" "insert rows" { action x = class _result { _vislevel = 3; first = Expression "Insert at row" 0; number = Expression "Insert this many rows" 1; item = Expression "Set new cells to" 0; _result = map_unary process x { process x = foldl1 join_tb (concat [top, new, bottom]) { top = [extract_area 0 0 w f x], f > 0 = []; new = [(if is_Matrix x then to_matrix else id) (newim w number item.expr)]; bottom = [extract_area 0 f w (h - f) x], f < h = []; f = to_real first; w = get_width x; h = get_height x; } } } } Columns_item = class Menuaction "_Columns" "insert columns" { action x = class _result { _vislevel = 3; first = Expression "Insert at column" 0; number = Expression "Insert this many columns" 1; item = Expression "Set new cells to" 0; _result = map_unary process x { process x = foldl1 join_lr (concat [left, new, right]) { left = [extract_area 0 0 f h x], f > 0 = []; new = [(if is_Matrix x then to_matrix else id) (newim number h item.expr)]; right = [extract_area f 0 (w - f) h x], f < w = []; f = to_real first; w = get_width x; h = get_height x; } } } } } Matrix_delete_item = class Menupullright "_Delete" "delete rows or columns from a matrix" { // remove number of items, starting at first delete first number l = take (to_real first) l ++ drop (to_real first + to_real number) l; Rows_item = class Menuaction "_Rows" "delete rows" { action x = class _result { _vislevel = 3; first = Expression "Delete from row" 0; number = Expression "Delete this many rows" 1; _result = map_unary process x { process x = foldl1 join_tb (concat [top, bottom]) { top = [extract_area 0 0 w f x], f > 0 = []; bottom = [extract_area 0 b w (h - b) x], b < h = []; f = to_real first; n = to_real number; b = f + n; w = get_width x; h = get_height x; } } } } Columns_item = class Menuaction "_Columns" "delete columns" { action x = class _result { _vislevel = 3; first = Expression "Delete from column" 0; number = Expression "Delete this many columns" 1; _result = map_unary process x { process x = foldl1 join_lr (concat [left, right]) { left = [extract_area 0 0 f h x], f > 0 = []; right = [extract_area r 0 (w - r) h x], r < w = []; f = to_real first; n = to_real number; r = f + n; w = get_width x; h = get_height x; } } } } } Matrix_join = class Menupullright "_Join" "join two matricies" { Left_right_item = class Menuaction "_Left to Right" "join two matricies left-right" { action a b = map_binary join_lr a b; } Top_bottom_item = class Menuaction "_Top to Bottom" "joiin two matricies top-bottom" { action a b = map_binary join_tb a b; } } Matrix_rotate_item = class Menupullright "_Rotate" "clockwise rotation by fixed angles" { rot90 = Image_transform_item.Rotate_item.Fixed_item.Rot90_item; rot180 = Image_transform_item.Rotate_item.Fixed_item.Rot180_item; rot270 = Image_transform_item.Rotate_item.Fixed_item.Rot270_item; Matrix_rot45_item = class Menuaction "_45 Degrees" "45 degree rotate (square, odd-length-sides only)" { action x = map_unary rot45 x; } } Matrix_flip_item = Image_transform_item.Flip_item; Matrix_sort_item = class Menuaction "_Sort" "sort by column or row" { action x = class _result { _vislevel = 3; o = Option (_ "Orientation") [ _ "Sort by column", _ "Sort by row" ] 0; i = Expression (_ "Sort on index") 0; d = Option (_ "Direction") [ _ "Ascending", _ "Descending" ] 0; _result = map_unary sort x { idx = to_real i; pred a b = a?idx <= b?idx, d == 0 = a?idx >= b?idx; sort x = (x.Matrix_base @ sortc pred) x.value, o == 0 = (x.Matrix_base @ transpose @ sortc pred @ transpose) x.value; } } } #separator Matrix_invert_item = class Menuaction "In_vert" "calculate inverse matrix" { action x = map_unary (converse power (-1)) x; } Matrix_transpose_item = class Menuaction "_Transpose" "swap rows and columns" { action x = map_unary transpose x; } #separator Matrix_plot_scatter_item = class Menuaction "_Plot Scatter" "plot a scatter graph of a matrix of [x,y1,y2,..] coordinates" { action x = class _result { _check_args = [ [x, "x", check_Matrix] ]; _vislevel = 3; auto = Toggle "Auto Range" true; xmin = Expression "X range minimum" 0; xmax = Expression "X range maximum" 1; ymin = Expression "Y range minimum" 0; ymax = Expression "Y range maximum" 1; _result = Plot options ((x2b @ get_image @ to_image) x) { options = [$style => Plot_style.POINT, $format => Plot_format.XYYY] ++ range; range = [], auto = [$xmin => xmin.expr, $xmax => xmax.expr, $ymin => ymin.expr, $ymax => ymax.expr]; // matrix to image makes a 1-band mxn image // we need to put columns into bands x2b im = bandjoin (map extract_col [0 .. w - 1]) { w = get_width im; h = get_height im; b = get_bands im; extract_col x = extract_area x 0 1 h im; } } } } Matrix_plot_item = Hist_plot_item; Matrix_buildlut_item = class Menuaction "_Build LUT From Scatter" "make a lookup table from a matrix of [x,y1,y2..] coordinates" { action x = class _result { _check_args = [ [x, "x", check_Matrix] ]; _result = buildlut x; } } nip2-8.7.0/share/nip2/compat/8.5/_convert.def0000644000175000017500000004557713273071606015414 00000000000000 /* Try to make a Matrix ... works for Vector/Image/Real, plus image/real */ to_matrix x = to_matrix x.expr, is_Expression x = x, is_Matrix x = oo_unary_function to_matrix_op x, is_class x = tom x { to_matrix_op = Operator "to_matrix" tom Operator_type.COMPOUND false; tom x = Matrix (itom x), is_image x = Matrix [[x]], is_real x = Matrix [x], is_real_list x = Matrix x, is_matrix x = error (_ "bad arguments to " ++ "to_matrix"); itom i = (im_vips2mask ((double) i)).value, is_image i = error (_ "not image"); } /* Try to make a Vector ... works for Vector/Image/Real, plus image/real */ to_vector x = to_vector x.expr, is_Expression x = x, is_Vector x = oo_unary_function to_vector_op x, is_class x = tov x { to_vector_op = Operator "to_vector" tov Operator_type.COMPOUND false; tov x = Vector (itov x), is_image x = Vector [x], is_real x = Vector x, is_real_list x = Vector x?0, is_matrix x && len x == 1 = Vector (transpose x)?0, is_matrix x && len x?0 == 1 = error (_ "bad arguments to " ++ "to_vector"); itov i = v, is_image i = error (_ "not image") { m = im_vips2mask ((double) i); v = m.value?0, m.height == 1 = (transpose m.value)?0, m.width == 1 = error (_ "image is not 1xN or Nx1"); } } /* Try to make an Image ... works for Vector/Matrix/Real, plus image/real * Special case for Colour ... pull out the colour_space and set Type in the * image. */ to_image x = to_image x.expr, is_Expression x = Image x.value, is_Plot x = x, is_Image x = Image (image_set_type (Image_type.colour_spaces.lookup 0 1 x.colour_space) (mtoi [x.value])), is_Colour x = oo_unary_function to_image_op x, is_class x = toi x { to_image_op = Operator "to_image" toi Operator_type.COMPOUND false; toi x = Image x, is_image x = Image (mtoi [[x]]), is_real x = Image (mtoi [x]), is_real_list x = Image (mtoi x), is_matrix x = error (_ "bad arguments to " ++ "to_image"); // [[real]] -> image mtoi m = im_mask2vips (Matrix m), width != 3 = joinup (im_mask2vips (Matrix m)) { width = len m?0; height = len m; joinup i = b1 ++ b2 ++ b3 { b1 = extract_area 0 0 1 height i; b2 = extract_area 1 0 1 height i; b3 = extract_area 2 0 1 height i; } } } // like to_image, but we do 1x1 pixel + x, then embed it up // always make an unwrapped image for speed ... this gets used by ifthenelse // and stuff like that // format can be NULL, meaning set format from x to_image_size width height bands format x = x, is_image x = x.value, is_Image x = im'' { // we want x to set the target format if we don't have one, so we // can't use image_new im = im_black 1 1 bands + x; im' = clip2fmt format im, format != NULL = im; im'' = embed 1 0 0 width height im'; } /* Try to make a Colour. */ to_colour x = to_colour x.expr, is_Expression x = x, is_Colour x = to_colour (extract_area x.left x.top 1 1 x.image), is_Mark x = oo_unary_function to_colour_op x, is_class x = toc x { to_colour_op = Operator "to_colour" toc Operator_type.COMPOUND false; toc x = Colour (colour_space (get_type x)) (map mean (bandsplit (get_image x))), has_image x && has_type x = Colour "sRGB" [x, x, x], is_real x // since Colour can't do mono = Colour "sRGB" x, is_real_list x && is_list_len 3 x = map toc x, is_matrix x = error (_ "bad arguments to " ++ "to_colour"); colour_space type = table.get_name type, table.has_name type = error (_ "unable to make Colour from " ++ table.get_name type ++ _ " image") { table = Image_type.colour_spaces; } } /* Try to make a real. (not a Real!) */ to_real x = to_real x.expr, is_Expression x = oo_unary_function to_real_op x, is_class x = tor x { to_real_op = Operator "to_real" tor Operator_type.COMPOUND false; tor x = x, is_real x = abs x, is_complex x = 1, is_bool x && x = 0, is_bool x && !x = error (_ "bad arguments to " ++ "to_real"); } to_int x = (int) (to_real x); /* Try to make a list ... ungroup, basically. We remove the innermost layer of * Groups. */ to_list x = x.value, is_Group x && !contains_Group x.value = Group (map to_list x.value), is_Group x = x; /* Try to make a group. The outermost list objects become Group()'d. */ to_group x = Group x, is_list x = Group (map to_group x.value), is_Group x = x; /* Parse a positive integer. */ parse_pint l = foldl acc 0 l { acc sofar ch = sofar * 10 + parse_c ch; /* Turn a char digit to a number. */ parse_c ch = error (_ "not a digit"), !is_digit ch = (int) ch - (int) '0'; } /* Parse an integer, with an optional sign character. */ parse_int l = error (_ "badly formed number"), !is_list_len 2 parts = sign * n { parts = splitpl [member "+-", is_digit] l; n = parse_pint parts?1; sign = 1, parts?0 == [] || parts?0 == "+" = -1; } /* Parse a float. * [+-]?[0-9]*([.][0-9]*)?(e[0-9]+)? */ parse_float l = err, !is_list_len 4 parts = sign * (abs ipart + fpart) * 10 ** exp { err = error (_ "badly formed number"); parts = splitpl [ member "+-0123456789", member ".0123456789", member "eE", member "+-0123456789" ] l; ipart = parse_int parts?0; sign = 1, ipart >= 0 = -1; fpart = 0, parts?1 == []; = err, parts?1?0 != '.' = parse_pint (tl parts?1) / 10 ** (len parts?1 - 1); exp = 0, parts?2 == [] && parts?3 == [] = err, parts?2 == [] = parse_int parts?3; } /* Parse a time in "hh:mm:ss" into seconds. We could do this in one line :) = (sum @ map2 multiply (iterate (multiply 60) 1) @ reverse @ map parse_pint @ map (subscript (splitpl [is_digit, equal ':', is_digit, equal ':', is_digit] l))) [0,2,4]; but it's totally unreadable. */ parse_time l = error (_ "badly formed time"), !is_list_len 5 parts = s + 60 * m + 60 * 60 * h { parts = splitpl [is_digit, equal ':', is_digit, equal ':', is_digit] l; h = parse_int parts?0; m = parse_int parts?2; s = parse_int parts?4; } /* matrix to convert D65 XYZ to D50 XYZ ... direct conversion, found by * measuring a macbeth chart in D50 and D65 and doing a LMS to get a matrix */ D652D50_direct = Matrix [[ 1.13529, -0.0604663, -0.0606321 ], [ 0.0975399, 0.935024, -0.0256156 ], [ -0.0336428, 0.0414702, 0.994135 ]]; D502D65_direct = D652D50_direct ** -1; /* Convert normalised XYZ to bradford RGB. */ XYZ2RGBbrad = Matrix [[0.8951, 0.2664, -0.1614], [-0.7502, 1.7135, 0.0367], [0.0389, -0.0685, 1.0296]]; /* Convert bradford RGB to normalised XYZ. */ RGBbrad2XYZ = XYZ2RGBbrad ** -1; D93_whitepoint = Vector [89.7400, 100, 130.7700]; D75_whitepoint = Vector [94.9682, 100, 122.5710]; D65_whitepoint = Vector [95.0470, 100, 108.8827]; D55_whitepoint = Vector [95.6831, 100, 92.0871]; D50_whitepoint = Vector [96.4250, 100, 82.4680]; A_whitepoint = Vector [109.8503, 100, 35.5849]; // 2856K B_whitepoint = Vector [99.0720, 100, 85.2230]; // 4874K C_whitepoint = Vector [98.0700, 100, 118.2300]; // 6774K E_whitepoint = Vector [100, 100, 100]; // ill. free D3250_whitepoint = Vector [105.6590, 100, 45.8501]; Whitepoints = Enum [ $D93 => D93_whitepoint, $D75 => D75_whitepoint, $D65 => D65_whitepoint, $D55 => D55_whitepoint, $D50 => D50_whitepoint, $A => A_whitepoint, $B => B_whitepoint, $C => C_whitepoint, $E => E_whitepoint, $D3250 => D3250_whitepoint ]; /* Convert D50 XYZ to D65 using the bradford chromatic adaptation approx. */ im_D502D65 xyz = xyz''' { xyz' = xyz / D50_whitepoint; rgb = recomb XYZ2RGBbrad xyz'; // move white in bradford RGB rgb' = rgb / Vector [0.94, 1.02, 1.33]; xyz'' = recomb RGBbrad2XYZ rgb'; // back to D65 xyz''' = xyz'' * D65_whitepoint; } /* Convert D65 XYZ to D50 using the bradford approx. */ im_D652D50 xyz = xyz''' { xyz' = xyz / D65_whitepoint; rgb = recomb XYZ2RGBbrad xyz'; // move white in bradford RGB rgb' = rgb * Vector [0.94, 1.02, 1.33]; xyz'' = recomb RGBbrad2XYZ rgb'; xyz''' = xyz'' * D50_whitepoint; } /* Convert D50 XYZ to Lab. */ im_D50XYZ2Lab xyz = im_XYZ2Lab_temp xyz D50_whitepoint.value?0 D50_whitepoint.value?1 D50_whitepoint.value?2; im_D50Lab2XYZ lab = im_Lab2XYZ_temp lab D50_whitepoint.value?0 D50_whitepoint.value?1 D50_whitepoint.value?2; /* ... and mono conversions */ im_sRGB2mono in = (image_set_type Image_type.B_W @ clip2fmt (get_header "BandFmt" in) @ recomb (Matrix [[.3, .6, .1]])) in; im_mono2sRGB in = image_set_type Image_type.sRGB (in ++ in ++ in); im_sRGB2Lab = im_XYZ2Lab @ im_sRGB2XYZ; im_Lab2sRGB = im_XYZ2sRGB @ im_Lab2XYZ; // from the 16 bit RGB and GREY formats im_1628 x = im_clip (x >> 8); im_162f x = x / 256; im_8216 x = (im_clip2us x) << 8; im_f216 x = im_clip2us (x * 256); im_RGB162GREY16 in = (image_set_type Image_type.GREY16 @ clip2fmt (get_header "BandFmt" in) @ recomb (Matrix [[.3, .6, .1]])) in; im_GREY162RGB16 in = image_set_type Image_type.RGB16 (in ++ in ++ in); /* apply a func to an image ... make it 1 or 3 bands, and reapply other bands * on the way out. Except if it's LABPACK. */ colour_apply fn x = fn x, b == 1 || b == 3 || c == Image_coding.LABPACK = x'' { b = get_bands x; c = get_coding x; first = extract_bands 0 3 x, b > 3 = extract_bands 0 1 x; tail = extract_bands 3 (b - 3) x, b > 3 = extract_bands 1 (b - 1) x; x' = fn first; x'' = x' ++ clip2fmt (get_format x') tail; } /* Any 1-ary colour op, applied to Vector/Image/Matrix or image */ colour_unary fn x = oo_unary_function colour_op x, is_class x = colour_apply fn x, is_image x = colour_apply fn [x], is_real x = error (_ "bad arguments to " ++ "colour_unary") { // COMPOUND_REWRAP ... signal to the colour class to go to image and // back colour_op = Operator "colour_unary" colour_object Operator_type.COMPOUND_REWRAP false; colour_object x = colour_real_list x, is_real_list x = map colour_real_list x, is_matrix x = colour_apply fn x, is_image x = error (_ "bad arguments to " ++ "colour_unary"); colour_real_list l = (to_matrix (fn (float) (to_image (Vector l)).value)).value?0; } /* Any symmetric 2-ary colour op, applied to Vector/Image/Matrix or image ... * name is op name for error messages etc. */ colour_binary name fn x y = oo_binary_function colour_op x y, is_class x = oo_binary'_function colour_op x y, is_class y = fn x y, is_image x && is_image y = error (_ "bad arguments to " ++ name) { colour_op = Operator name colour_object Operator_type.COMPOUND_REWRAP true; colour_object x y = fn x y, is_image x && is_image y = colour_real_list fn x y, is_real_list x && is_real_list y = map (colour_real_list fn x) y, is_real_list x && is_matrix y = map (colour_real_list (converse fn) y) x, is_matrix x && is_real_list y = map2 (colour_real_list fn) x y, is_matrix x && is_matrix y = error (_ "bad arguments to " ++ name); colour_real_list fn l1 l2 = (to_matrix (fn i1 i2)).value?0 { i1 = (float) (to_image (Vector l1)).value; i2 = (float) (to_image (Vector l2)).value; } } _colour_conversion_table = [ /* Lines are [space-from, space-to, conversion function]. Could do * this as a big array, but table lookup feels safer. */ [B_W, B_W, image_set_type B_W], [B_W, XYZ, im_sRGB2XYZ @ im_mono2sRGB @ im_clip], [B_W, YXY, im_XYZ2Yxy @ im_sRGB2XYZ @ im_mono2sRGB @ im_clip], [B_W, LAB, im_sRGB2Lab @ im_mono2sRGB @ im_clip], [B_W, LCH, im_Lab2LCh @ im_sRGB2Lab @ im_mono2sRGB @ im_clip], [B_W, UCS, im_XYZ2UCS @ im_sRGB2XYZ @ im_mono2sRGB @ im_clip], [B_W, RGB, im_XYZ2disp @ im_sRGB2XYZ @ im_mono2sRGB @ im_clip], [B_W, sRGB, im_mono2sRGB @ im_clip], [B_W, RGB16, image_set_type RGB16 @ im_8216 @ im_mono2sRGB], [B_W, GREY16, image_set_type GREY16 @ im_8216], [B_W, LABQ, im_Lab2LabQ @ im_sRGB2Lab @ im_mono2sRGB @ im_clip], [B_W, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_sRGB2Lab @ im_mono2sRGB @ im_clip], [XYZ, B_W, im_sRGB2mono @ im_XYZ2sRGB @ im_clip2f], [XYZ, XYZ, image_set_type XYZ], [XYZ, YXY, im_XYZ2Yxy @ im_clip2f], [XYZ, LAB, im_XYZ2Lab @ im_clip2f], [XYZ, LCH, im_Lab2LCh @ im_XYZ2Lab], [XYZ, UCS, im_XYZ2UCS @ im_clip2f], [XYZ, RGB, im_XYZ2disp @ im_clip2f], [XYZ, sRGB, im_XYZ2sRGB @ im_clip2f], [XYZ, LABQ, im_Lab2LabQ @ im_XYZ2Lab @ im_clip2f], [XYZ, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_XYZ2Lab @ im_clip2f], [YXY, B_W, im_sRGB2mono @ im_XYZ2sRGB @ im_Yxy2XYZ @ im_clip2f], [YXY, XYZ, im_Yxy2XYZ @ im_clip2f], [YXY, YXY, image_set_type YXY], [YXY, LAB, im_XYZ2Lab @ im_Yxy2XYZ @ im_clip2f], [YXY, LCH, im_Lab2LCh @ im_XYZ2Lab @ im_Yxy2XYZ @ im_clip2f], [YXY, UCS, im_XYZ2UCS @ im_Yxy2XYZ @ im_clip2f], [YXY, RGB, im_XYZ2disp @ im_Yxy2XYZ @ im_clip2f], [YXY, sRGB, im_XYZ2sRGB @ im_Yxy2XYZ @ im_clip2f], [YXY, LABQ, im_Lab2LabQ @ im_XYZ2Lab @ im_Yxy2XYZ @ im_clip2f], [YXY, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_XYZ2Lab @ im_Yxy2XYZ @ im_clip2f], [LAB, B_W, im_sRGB2mono @ im_Lab2sRGB @ im_Lab2XYZ @ im_clip2f], [LAB, XYZ, im_Lab2XYZ @ im_clip2f], [LAB, YXY, im_XYZ2Yxy @ im_Lab2XYZ @ im_clip2f], [LAB, LAB, image_set_type LAB @ im_clip2f], [LAB, LCH, im_Lab2LCh @ im_clip2f], [LAB, UCS, im_Lab2UCS @ im_clip2f], [LAB, RGB, im_Lab2disp @ im_clip2f], [LAB, sRGB, im_Lab2sRGB @ im_clip2f], [LAB, LABQ, im_Lab2LabQ @ im_clip2f], [LAB, LABS, im_Lab2LabS @ im_clip2f], [LCH, B_W, im_sRGB2mono @ im_Lab2sRGB @ im_LCh2Lab @ im_clip2f], [LCH, XYZ, im_Lab2XYZ @ im_LCh2Lab @ im_clip2f], [LCH, YXY, im_XYZ2Yxy @ im_Lab2XYZ @ im_LCh2Lab @ im_clip2f], [LCH, LAB, im_LCh2Lab @ im_clip2f], [LCH, LCH, image_set_type LCH], [LCH, UCS, im_LCh2UCS @ im_clip2f], [LCH, RGB, im_Lab2disp @ im_LCh2Lab @ im_clip2f], [LCH, sRGB, im_Lab2sRGB @ im_LCh2Lab @ im_clip2f], [LCH, LABQ, im_Lab2LabQ @ im_LCh2Lab @ im_clip2f], [LCH, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_LCh2Lab @ im_clip2f], [UCS, B_W, im_sRGB2mono @ im_XYZ2sRGB @ im_UCS2XYZ @ im_clip2f], [UCS, XYZ, im_UCS2XYZ @ im_clip2f], [UCS, YXY, im_XYZ2Yxy @ im_Lab2XYZ @ im_UCS2Lab @ im_clip2f], [UCS, LAB, im_UCS2Lab @ im_clip2f], [UCS, LCH, im_UCS2LCh @ im_clip2f], [UCS, UCS, image_set_type UCS], [UCS, RGB, im_Lab2disp @ im_UCS2Lab @ im_clip2f], [UCS, sRGB, im_Lab2sRGB @ im_UCS2Lab @ im_clip2f], [UCS, LABQ, im_Lab2LabQ @ im_UCS2Lab @ im_clip2f], [UCS, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_UCS2Lab @ im_clip2f], [RGB, B_W, im_sRGB2mono @ im_XYZ2sRGB @ im_disp2XYZ @ im_clip], [RGB, XYZ, im_disp2XYZ @ im_clip], [RGB, YXY, im_XYZ2Yxy @ im_disp2XYZ @ im_clip], [RGB, LAB, im_disp2Lab @ im_clip], [RGB, LCH, im_Lab2LCh @ im_disp2Lab @ im_clip], [RGB, UCS, im_Lab2UCS @ im_disp2Lab @ im_clip], [RGB, RGB, image_set_type RGB], [RGB, sRGB, im_XYZ2sRGB @ im_disp2XYZ @ im_clip], [RGB, RGB16, image_set_type RGB16 @ im_8216], [RGB, GREY16, image_set_type GREY16 @ im_8216 @ im_sRGB2mono], [RGB, LABQ, im_Lab2LabQ @ im_disp2Lab @ im_clip], [RGB, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_disp2Lab @ im_clip], [sRGB, B_W, im_sRGB2mono], [sRGB, XYZ, im_sRGB2XYZ @ im_clip], [sRGB, YXY, im_XYZ2Yxy @ im_sRGB2XYZ @ im_clip], [sRGB, LAB, im_sRGB2Lab @ im_clip], [sRGB, LCH, im_Lab2LCh @ im_sRGB2Lab @ im_clip], [sRGB, UCS, im_XYZ2UCS @ im_sRGB2XYZ @ im_clip], [sRGB, RGB, im_XYZ2disp @ im_sRGB2XYZ @ im_clip], [sRGB, sRGB, image_set_type sRGB], [sRGB, RGB16, image_set_type RGB16 @ im_8216], [sRGB, GREY16, image_set_type GREY16 @ im_8216 @ im_sRGB2mono], [sRGB, LABQ, im_Lab2LabQ @ im_sRGB2Lab @ im_clip], [sRGB, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_sRGB2Lab @ im_clip], [RGB16, B_W, im_1628 @ im_sRGB2mono], [RGB16, RGB, image_set_type RGB @ im_1628], [RGB16, sRGB, image_set_type sRGB @ im_1628], [RGB16, RGB16, image_set_type RGB16], [RGB16, GREY16, im_RGB162GREY16], [RGB16, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_sRGB2Lab], [GREY16, B_W, image_set_type B_W @ im_1628], [GREY16, RGB, im_mono2sRGB @ im_1628], [GREY16, sRGB, im_mono2sRGB @ im_1628], [GREY16, RGB16, im_GREY162RGB16], [GREY16, GREY16, image_set_type GREY16], [LABQ, B_W, im_sRGB2mono @ im_Lab2sRGB @ im_LabQ2Lab], [LABQ, XYZ, im_Lab2XYZ @ im_LabQ2Lab], [LABQ, YXY, im_XYZ2Yxy @ im_Lab2XYZ @ im_LabQ2Lab], [LABQ, LAB, im_LabQ2Lab], [LABQ, LCH, im_Lab2LCh @ im_LabQ2Lab], [LABQ, UCS, im_Lab2UCS @ im_LabQ2Lab], [LABQ, RGB, im_LabQ2disp], [LABQ, sRGB, im_Lab2sRGB @ im_LabQ2Lab], [LABQ, LABQ, image_set_type LABQ], [LABQ, LABS, im_LabQ2LabS], [LABS, B_W, im_sRGB2mono @ im_Lab2sRGB @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, XYZ, im_Lab2XYZ @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, YXY, im_XYZ2Yxy @ im_Lab2XYZ @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, LAB, im_LabS2Lab], [LABS, LCH, im_Lab2LCh @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, UCS, im_Lab2UCS @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, RGB, im_LabQ2disp @ im_LabS2LabQ @ im_clip2s], [LABS, sRGB, im_XYZ2sRGB @ im_Lab2XYZ @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, LABQ, im_LabS2LabQ @ im_clip2s], [LABS, LABS, image_set_type LABS] ] { /* From Image_type ... repeat here for brevity. Use same ordering as * in Colour menu for consistency. */ B_W = 1; XYZ = 12; YXY = 23; LAB = 13; LCH = 19; UCS = 18; RGB = 17; sRGB = 22; RGB16 = 25; GREY16 = 26; LABQ = 16; LABS = 21; } /* Transform between two colour spaces. */ colour_transform from to in = colour_unary _colour_conversion_table?i?2 in, i >= 0 = error (_ "unable to convert " ++ Image_type.type_names.get_name from ++ _ " to " ++ Image_type.type_names.get_name to) { match x = x?0 == from && x?1 == to; i = index match _colour_conversion_table; } /* Transform to a colour space, assuming the type field in the input is * correct */ colour_transform_to to in = colour_transform (get_type in) to in; /* String for path separator on this platform. */ path_separator = expand "$SEP"; /* Form a relative pathname. * path_relative ["home", "john"] == "home/john" * path_relative [] == "" */ path_relative l = join_sep path_separator l; /* Form an absolute pathname. * path_absolute ["home", "john"] == "/home/john" * path_absolute [] == "/" * If the first component looks like 'A:', don't add an initial separator. */ path_absolute l = path_relative l, len l?0 > 1 && is_letter l?0?0 && l?0?1 == ':' = path_separator ++ path_relative l; /* Parse a pathname. * path_parse "/home/john" == ["home", "john"] * path_parse "home/john" == ["home", "john"] */ path_parse str = split (equal path_separator?0) str; /* Return $PATH, reformatted as [["comp1", "comp2"], ["comp1", "comp2"] ..] */ system_search_path = [vipsbin] ++ map path_parse (split (equal path_sep) (expand "$PATH")) { /* On some platforms we ship vips with a few extra progs. Search * $VIPSHOME/bin first. */ vipsbin = path_parse (expand "$VIPSHOME") ++ ["bin"]; path_sep = ':', expand "$SEP" == "/" = ';'; } /* Search $PATH for the first occurence of name, or "". */ search_for name = hits?0, hits != [] = "" { exe_name = name ++ expand "$EXEEXT"; form_path p = path_absolute (p ++ [exe_name]); paths = map form_path system_search_path; hits = dropwhile (equal []) (map search paths); } /* Search $PATH for the first occurence of name, error on failure. */ search_for_error name = path, path != "" = error (exe_name ++ " not found on your search path. " ++ "Check you have installed the program and it is on your PATH.") { exe_name = name ++ expand "$EXEEXT"; path = search_for name; } nip2-8.7.0/share/nip2/compat/8.5/_joe_utilities.def0000644000175000017500000005054213273071606016570 00000000000000/* ******Functions included in start/_NG_utilities.def:****** * * so_balance ref_meanmax im1 im2 mask blur gauss * * nonzero_mean im = no_out * * so_meanmax im = result * * so_calculate ref_meanmax im mask = result * * simple_frame frame im_w im_h ov cs ms bf option = result * * corner_frame frame im_w im_h ov cs ms bf = result * * build_frame r_tl r_tr r_bl r_br r_mt r_mb r_ml r_mr im_w im_h ov bf = result * * complex_frame frame im_w im_h ov cs es ms bf option= result * * complex_edge ra rb t bl d = rc * * frame_lr_min r_l r_r target bw = result * * frame_tb_min r_t r_b target bw = result * * frame_position_image im ref os colour= result * * merge_array bw arr = result * * merge_to_scale im target blend dir = result * * select_ellipse line width = mask * * select_tetragon p1 p2 p3 p4 = mask * * select_polygon pt_list = mask * * perspective_transform to from = trans'' * * sort_pts_clockwise l = l'' * */ /* Called from: * _NG_Extra.def Clone_area_item */ so_balance ref_meanmax im1 im2 mask gauss = result { //ref_meanmax = so_meanmax im1; so_values = so_calculate ref_meanmax im2 mask; im2_cor_a = clip2fmt im2.format im2'', has_member "format" im2 = im2'' {im2'' = im2 * (so_values?0) + (so_values?1);} // Option to convert replacement image to scaled gaussian noise im2_cor = im2_cor_a, gauss == false = clip2fmt im2_cor_a.format gauss_im {gauss_im = gaussnoise im2_cor_a.width im2_cor_a.height ref_meanmax?0 (deviation im2_cor_a);} result = im_blend (get_image mask) (get_image im2_cor) (get_image im1); }; //////////////////////////////////////////////////////////////////////////////// /* Calculates the mean of the non zero pixels. * * Called from: * _NG_utilities so_meanmax */ nonzero_mean im = no_out { zero_im = (im == 0); zero_mean = mean zero_im; no_mean = mean im; no_out = no_mean/(1 - (zero_mean/255)); }; //////////////////////////////////////////////////////////////////////////////// /* Calculates the max and nonzero mean of an image * * Called from: * _NG_utilities so_balance * _NG_utilities so_calculate * _NG_Extra.def Clone_area_item * _NG_Extra.def Balance_item.Balance_find_item */ so_meanmax im = result { mean_of_im = nonzero_mean im; adjusted_im = im - mean_of_im; max_of_im = max adjusted_im; result = [mean_of_im, max_of_im]; }; //////////////////////////////////////////////////////////////////////////////// /* Calculates the scale and offset required to match a reference mean and max * * Called from: * _NG_utilities so_balance * _NG_Extra.def Balance_item.Balance_find_item */ so_calculate ref_meanmax im mask = result { im' = if mask then im else 0; im_values = so_meanmax im'; mean_of_ref = ref_meanmax?0; mean_of_im = im_values?0; max_of_ref = ref_meanmax?1; max_of_im = im_values?1; scale = (max_of_ref)/(max_of_im); offset = mean_of_ref - (mean_of_im * scale); result = [ scale, offset ]; }; //////////////////////////////////////////////////////////////////////////////// /* Extends or shortens the central sections of a simple frame to fit round a given image. * * Called from: * _NG_Extra.def Frame_item.Simple_frame_item */ simple_frame frame im_w im_h ov cs ms bf option = result { cs' = (1 - cs); ms' = (0.5 - (ms/2)); ms'' = (1 - cs); //Regions r_tl = Region_relative frame 0 0 cs cs; r_tr = fliplr r_tl, option == true = Region_relative frame cs' 0 cs cs; r_bl = Region_relative frame 0 cs' cs cs; r_br = fliplr r_bl, option == true = Region_relative frame cs' cs' cs cs; r_mt = Region_relative frame ms' 0 ms cs; r_mb = Region_relative frame ms' ms'' ms cs; r_ml = Region_relative frame 0 ms' cs ms; r_mr = fliplr r_ml, option == true = Region_relative frame ms'' ms' cs ms; result = build_frame r_tl r_tr r_bl r_br r_mt r_mb r_ml r_mr im_w im_h ov bf; }; //////////////////////////////////////////////////////////////////////////////// /* Copies and extends a simple frame corner to produce a complete frame to fit round a given image. * * Called from: * _NG_Extra.def Frame_item.Frame_corner_item */ corner_frame frame im_w im_h ov cs ms bf = result { cs' = (1 - cs); ms' = (0.5 - (ms/2)); //Regions r_tl = Region_relative frame 0 0 cs cs; r_tr = fliplr r_tl; r_bl = fliptb r_tl; r_br = fliplr r_bl; r_mt = Region_relative frame ms' 0 ms cs; r_mb = fliptb r_mt; r_ml = Region_relative frame 0 ms' cs ms;; r_mr = fliplr r_ml; result = build_frame r_tl r_tr r_bl r_br r_mt r_mb r_ml r_mr im_w im_h ov bf; }; //////////////////////////////////////////////////////////////////////////////// /* Completes the frame building process for simple_frame and corner_frame. * * _NG_utilities simple_frame * _NG_utilities corner_frame */ build_frame r_tl r_tr r_bl r_br r_mt r_mb r_ml r_mr im_w im_h ov bf = result { //Find pixel thickness of frames section s_width = r_ml.width - mean (im_profile (map_unary fliplr (r_ml.value)?0) 1); s_height = r_mt.height - mean (im_profile (map_unary fliptb (r_mt.value)?0) 0); w_target = im_w + (2 * (s_width - ov)); h_target = im_h + (2 * (s_height - ov)); blend = bf * r_tl.width; cw_target = w_target - (2 * r_tl.width) + (2 * blend), w_target > (2 * r_tl.width) = w_target; ch_target = h_target - (2 * r_tl.height) + (2 * blend), h_target > (2 * r_tl.height) = h_target; //Use regions to produce sections top = merge_to_scale r_mt cw_target blend 0; bottom = merge_to_scale r_mb cw_target blend 0; left = merge_to_scale r_ml ch_target blend 1; right = merge_to_scale r_mr ch_target blend 1; middle = Image (image_new cw_target ch_target left.bands left.format left.coding left.type 0 0 0); //Build sections into full frame. row_1 = frame_lr_min r_tl r_tr w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[r_tl, top, r_tr]]; row_2 = frame_lr_min left right w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[left, middle, right]]; row_3 = frame_lr_min r_bl r_br w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[r_bl, bottom, r_br]]; result = frame_tb_min row_1 row_3 h_target blend, (h_target < (r_tl.height * 2)) = merge_array blend [[row_1], [row_2], [row_3]]; }; //////////////////////////////////////////////////////////////////////////////// /* Extends or shortens the central sections of a frame, preserving any central details on each * edge, to fit round a given image. * * Called from: * _NG_Extra.def Frame_item.Complex_frame_item */ complex_frame frame im_w im_h ov cs es ms bf option= result { cs' = (1 - cs); ms' = (0.5 - (ms/2)); es' = (0.25 - (es/2)); r_tl = Region_relative frame 0 0 cs cs; r_tr = fliplr r_tl, option == true = Region_relative frame cs' 0 cs cs; r_bl = Region_relative frame 0 cs' cs cs; r_br = fliplr r_bl, option == true = Region_relative frame cs' cs' cs cs; r_mt = Region_relative frame ms' 0 ms cs; r_mb = Region_relative frame ms' cs' ms cs; r_ml = Region_relative frame 0 ms' cs ms; r_mr = fliplr r_ml, option == true = Region_relative frame cs' ms' cs ms; r_et = Region_relative frame es' 0 es cs; r_eb = Region_relative frame es' cs' es cs; r_el = Region_relative frame 0 es' cs es; r_er = fliplr r_el, option == true = Region_relative frame cs' es' cs es; //Find pixel thickness of frames section s_width = r_el.width - mean (im_profile (map_unary fliplr (r_el.value)?0) 1); s_height = r_et.height - mean (im_profile (map_unary fliptb (r_et.value)?0) 0); w_target = im_w + (2 * (s_width - ov)); h_target = im_h + (2 * (s_height - ov)); min_size = foldr1 min_pair [r_tl.width, r_tl.height, r_mt.width, r_mt.height, r_et.width, r_et.height]; blend = bf * min_size; cw_target = w_target - (2 * r_tl.width) + (2 * blend); ch_target = h_target - (2 * r_tl.height) + (2 * blend); top = complex_edge r_mt r_et cw_target blend 0; bottom = complex_edge r_mb r_eb cw_target blend 0; left = complex_edge r_ml r_el ch_target blend 1; right = complex_edge r_mr r_er ch_target blend 1; middle = Image (image_new top.width left.height left.bands left.format left.coding left.type 0 0 0); //Build regions into full frame. row_1 = frame_lr_min r_tl r_tr w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[r_tl, top, r_tr]]; row_2 = frame_lr_min left right w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[left, middle, right]]; row_3 = frame_lr_min r_bl r_br w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[r_bl, bottom, r_br]]; result = frame_tb_min row_1 row_3 h_target blend, (h_target < (r_tl.height * 2)) = merge_array blend [[row_1], [row_2], [row_3]]; }; //////////////////////////////////////////////////////////////////////////////// /* Function called by complex frame, used to produce section * * Called from: * _NG_utilities.def complex_frame */ complex_edge ra rb t bl d = rc { e1 = ceil (ra.width - t)/2, d == 0 = 0; e2 = 0, d == 0 = ceil (ra.height - t)/2; e3 = t, d == 0 = ra.width; e4 = ra.height, d == 0 = t; check = ra.width, d == 0; = ra.height; rai = get_image ra; t2 = (t - ra.width + (2 * bl))/2, d == 0 = (t - ra.height + (2 * bl))/2; rc = ra , t <= 0 = Image (im_extract_area rai e1 e2 e3 e4), t <= check = merge_array bl [[rb',ra,rb']], d == 0 = merge_array bl [[rb'],[ra],[rb']] {rb' = merge_to_scale rb t2 bl d;} }; ////////////////////////////////////////////////////////////////////////////// /* Blends two images left/right to produce an image a specific width. * * _NG_utilities build_frame * _NG_utilities complex_frame */ frame_lr_min r_l r_r target bw = result { //Calculating the new widh required for each image. no = (target/2 + bw); n_w = no, (r_l.width > no) = r_l.width; //Removing excess from what will be the middle of the final image. n_l = im_extract_area r_l.value 0 0 n_w r_l.height; n_r = im_extract_area r_r.value (r_r.width - n_w) 0 n_w r_l.height; //Merge the two image together with a bw*2 pixel overlap. result = Image (im_lrmerge n_l n_r ((bw*2) - n_w) 0 bw); }; ////////////////////////////////////////////////////////////////////////////// /* Blends two images top/bottom to produce an image a specific width. * * _NG_utilities build_frame * _NG_utilities complex_frame */ frame_tb_min r_t r_b target bw = result { //Calculating the new height required for each image. no = (target/2 + bw); n_h = no, (r_t.height > no) = r_t.height; //Removing excess from what will be the middle of the final image. n_t = im_extract_area r_t.value 0 0 r_t.width n_h; n_b = im_extract_area r_b.value 0 (r_b.height - n_h) r_b.width n_h; //Merge the two image together with a 50 pixel overlap. result = Image (im_tbmerge n_t n_b 0 ((bw*2) -n_h) bw); }; ////////////////////////////////////////////////////////////////////////////// /* Resixe canvas of an image to accomodate a frame and possible mount * * Called from: * _NG_Extra.def Frame_item.Frame_corner_item * _NG_Extra.def Frame_item.Simple_frame_item * _NG_Extra.def Frame_item.Complex_frame_item */ frame_position_image im ref os colour= result { background = image_new ref.width ref.height im.bands im.format im.coding im.type colour 0 0; result = insert_noexpand xp yp im background { xp = (ref.width - im.width)/2; yp = (ref.height - im.height - os)/2; } }; ////////////////////////////////////////////////////////////////////////////// /* Merges an array of images together according to blend width bw * * Called from: * _NG_Utilites.def build_frame * _NG_Utilites.def complex_frame * _NG_Utilites.def complex_edge */ merge_array bw arr = result { merge_lr bw im1 im2 = im3 { bw' = get_header "Xsize" (get_image im1); bw'' = -(bw' - bw); im3 = im_lrmerge (get_image im1) (get_image im2) bw'' 0 bw; } merge_tb bw im1 im2 = im3 { bw' = get_header "Ysize" (get_image im1); bw'' = -(bw' - bw); im3 = im_tbmerge (get_image im1) (get_image im2) 0 bw'' bw; } im_out = (image_set_origin 0 0 @ foldl1 (merge_tb bw) @ map (foldl1 (merge_lr bw))) arr; result = Image im_out; }; ////////////////////////////////////////////////////////////////////////////// /* Repeatably top/bottom add clones of im, with a defined overlap, until final height > target * * Called from: * _NG_Utilites.def build_frame * _NG_Utilites.def complex_edge */ merge_to_scale im target blend dir = result { blend' = floor blend; //allow fir lr or tb process var_a = im.width, dir == 0 = im.height; var_w = im.width, dir == 1 = target, target > blend' = blend'; var_h = im.height, dir == 0 = target, target > blend' = blend'; //total numner of copies of im requires, taking overlap into account. no_loops = ceil ((log ((target - blend')/(var_a - blend')))/(log 2)); process im no = result { pr_a = get_header "Xsize" (get_image im), dir == 0 = get_header "Ysize" (get_image im); pr_b = -(pr_a - blend' + 1); im' = im_lrmerge (get_image im) (get_image im) pr_b 0 blend', dir == 0 = im_tbmerge (get_image im) (get_image im) 0 pr_b blend'; no' = no - 1; result = im', no' < 1 = process im' no'; } im_tmp = im.value, var_a > target = process im no_loops; result = Image (im_extract_area (get_image im_tmp) 0 0 var_w var_h); }; ////////////////////////////////////////////////////////////////////////////// /* Selects an elispe based on a line and a width * * Called from: * _NG_Extra.def Select_item.Elipse */ select_ellipse line width = mask { im = Image (get_image line); //Make a 2 band image whose value equals its coordinates. im_coor = Image (make_xy im.width im.height); //Adjust the values to center tham on (line.left, line.top) im_cent = im_coor - Vector [line.left,line.top]; w = line.width; h = line.height; angle = 270, w == 0 && h < 0 = 90, w == 0 && h >= 0 = 360 + atan (h/w), w > 0 && h < 0 = atan (h/w), w > 0 && h >= 0 = 180 + atan (h/w); a = ( (h ** 2) + (w ** 2) )**0.5; b = a * width; x' = ( (cos angle) * im_cent?0) + ( (sin angle) * im_cent?1); y' = ( (cos angle) * im_cent?1) - ( (sin angle) * im_cent?0); mask = ( (b**2) * (x'**2) ) + ( (a**2) * (y'**2) ) <= (a * b)**2; }; ////////////////////////////////////////////////////////////////////////////// /* Selects a tetragon based on four points. * * Called from: * _NG_Extra.def Select_item.Tetragon * _NG_Extra.def Perspective_item */ select_tetragon p1 p2 p3 p4 = mask { //Put points in clockwise order starting at the top left. pt_list = sort_pts_clockwise [p1, p2, p3, p4]; pair_list = [ [ pt_list?0, pt_list?1 ], [ pt_list?1, pt_list?2 ], [ pt_list?2, pt_list?3 ], [ pt_list?3, pt_list?0 ] ]; //Make xy image the same size as p1.image; im_xy = Image (make_xy p1.image.width p1.image.height); white = Image (image_new p1.image.width p1.image.height 1 0 Image_coding.NOCODING 1 255 0 0); mask = foldl process white pair_list; /* Treat each pair of point as a vector going from p1 to p2, * then select all to right of line. This is done for each pair, * the results are all combined to select the area defined by * the four points. */ process im_in pair = im_out { x = (pair?0).left; y = (pair?0).top; x'= (pair?1).left; y'= (pair?1).top; w = x' - x; h = y' - y; m = 0, x == x' = (y-y')/(x-x'); c = 0, x == x' = ((y*x') - (y'*x))/(x' - x); mask= im_xy?1 - (im_xy?0 * m) >= c, w > 0 = im_xy?1 - (im_xy?0 * m) <= c, w < 0 = im_xy?0 <= x, w == 0 && h > 0 = im_xy?0 >= x; im_out = im_in & mask; } }; ////////////////////////////////////////////////////////////////////////////// /* Selects a tetragon based on four points. * * Called from: * _NG_Extra.def Select_item.Polygon */ select_polygon pt_list = mask { group_check = is_Group pt_list; pt_l = pt_list.value, group_check = pt_list; im = Image (get_image (pt_l?0)); im_xy = Image (make_xy im.width im.height); black = Image (image_new im_xy.width im_xy.height 1 0 Image_coding.NOCODING 1 0 0 0); x = im_xy?0; y = im_xy?1; pt_l' = grp_trip pt_l; mask = foldl process black pt_l'; /*Takes a group adds the first two the end and then creates a lists of *lists [[a, b, c], [b, c, d] .... [x, a, b]] */ grp_trip l = l'' { px = take 2 l; l' = join l px; start = [(take 3 l')]; rest = drop 3 l'; process a b = c { x = (last a)?1; x'= (last a)?2; x'' = [[x, x', b]]; c = join a x''; } l'' = foldl process start rest; }; process im_in triplet = im_out { p1 = triplet?0; p2 = triplet?1; p3 = triplet?2; //check for change in x direction between p1-p2 and p2 -p3 dir_1 = sign (p2.left - p1.left); dir_2 = sign (p3.left - p2.left); dir = dir_1 + dir_2; //define min x limit. min_x = p1.left, p1.left < p2.left = p2.left + 1, dir != 0 = p2.left; //define max x limit. max_x = p1.left, p1.left > p2.left = p2.left - 1, dir != 0 = p2.left; //equation of line defined by p1 and p2 m = line_m p1 p2; c = line_c p1 p2; //Every thing below the line im_test = ((y >= (m * x) + c) & (x >= min_x) & (x <= max_x)); im_out = im_in ^ im_test; } line_c p1 p2 = c {m = line_m p1 p2; c = p1.top - (m * p1.left);}; line_m p1 p2 = (p2.top - p1.top)/(p2.left - p1.left), p2.left != p1.left = 0; }; ////////////////////////////////////////////////////////////////////////////// /* Selects a tetragon based on four points. * * Called from: * _NG_Extra.def Perspective_match_item * _NG_Extra.def Perspective_item */ perspective_transform to from = trans'' { /* * Tramsformation matrix is calculated on the bases of the following functions: * x' = c0x + c1y + c2xy + c3 * y' = c4x + c5y + c6xy + c7 * * The functions used in vips im_transform works based on the functions: * x = x' + b0 + b2x' + b4y' + b6x'y' * y = y' + b1 + b3x' + b5y' + b7x'y' * * and is applied in the form of the matrix: * * [[b0, b1], * [b2, b3], * [b4, b5], * [b6, b7]] * * Therefore our required calculated matrix will be * * [[ c3 , c7], * [(c0 - 1) , c4], * [ c1 , (c5 - 1)], * [ c2 , c6]] * * to = [x1, y1, x2, y2, x3, y3, x4, y4] * from = [x1', y1', x2', y2', x3', y3', x4', y4'] * trans = [[c0], [c1], [c2], [c3], [c4], [c5], [c6], [c7]] * */ to' = Matrix [[to?0, to?1, ((to?0)*(to?1)), 1, 0, 0, 0, 0], [0, 0, 0, 0, to?0, to?1, ((to?0)*(to?1)), 1], [to?2, to?3, ((to?2)*(to?3)), 1, 0, 0, 0, 0], [0, 0, 0, 0, to?2, to?3, ((to?2)*(to?3)), 1], [to?4, to?5, ((to?4)*(to?5)), 1, 0, 0, 0, 0], [0, 0, 0, 0, to?4, to?5, ((to?4)*(to?5)), 1], [to?6, to?7, ((to?6)*(to?7)), 1, 0, 0, 0, 0], [0, 0, 0, 0, to?6, to?7, ((to?6)*(to?7)), 1]]; from' = Matrix (transpose [from]); to'' = to' ** (-1); trans = to'' * from'; trans' = trans.value; trans''= Matrix [[(trans'?3)?0, (trans'?7)?0 ], [((trans'?0)?0 - 1), (trans'?4)?0 ], [(trans'?1)?0, ((trans'?5)?0 - 1)], [(trans'?2)?0, (trans'?6)?0 ]]; }; ////////////////////////////////////////////////////////////////////////////// /* Sort a list of points into clockwise order. * * Called from: * _NG_utilities.def select_tetragon * _NG_Extra.def Perspective_match_item * _NG_Extra.def Perspective_item */ sort_pts_clockwise l = l'' { // sort functions: f_top a b = a.top < b.top; f_left a b = a.left < b.left; f_right a b = a.left > b.left; l' = sortc f_top l; l'_a = take 2 l'; l'_b = drop 2 l'; l''_a = sortc f_left l'_a; l''_b = sortc f_right l'_b; l'' = join l''_a l''_b; }; Mount_options _ctype _ppcm = class { _vislevel = 3; apply = Toggle "Apply mount options" false; ls = Expression "Lower mount section bigger by (cm)" 0; mount_colour = Colour _ctype [0, 0, 0]; _los = ls.expr * _ppcm; }; Frame_variables comp = class { _vislevel = 3; scale_factor = Expression "scale the size of the frame by" 1; /* These sliders define the fraction of the frames width or height is extracted * to produce each of the particular regions. */ corner_section = Scale "Corner section" 0.1 1 0.5; edge_section = Scale "Edge section" 0.1 1 0.2, comp > 0 = "Only required for complex frames"; middle_section = Scale "Middle section" 0.1 1 0.2; blend_fraction = Scale "Blend fraction" 0.1 0.9 0.1; option = Toggle "Use mirror of left-side to make right" true; }; nip2-8.7.0/share/nip2/compat/8.5/Image.def0000644000175000017500000015060413273071606014603 00000000000000Image_new_item = class Menupullright "_New" "make new things" { Image_black_item = class Menuaction "_Image" "make a new image" { format_names = [ "8-bit unsigned int - UCHAR", // 0 "8-bit signed int - CHAR", // 1 "16-bit unsigned int - USHORT", // 2 "16-bit signed int - SHORT", // 3 "32-bit unsigned int - UINT", // 4 "32-bit signed int - INT", // 5 "32-bit float - FLOAT", // 6 "64-bit complex - COMPLEX", // 7 "64-bit float - DOUBLE", // 8 "128-bit complex - DPCOMPLEX" // 9 ]; action = class Image _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; nbands = Expression "Image bands" 1; format_option = Option "Image format" format_names 0; type_option = Option_enum "Image type" Image_type.type_names "B_W"; pixel = Expression "Pixel value" 0; _result = image_new (to_real nwidth) (to_real nheight) (to_real nbands) (to_real format_option) Image_coding.NOCODING type_option.value_thing pixel.expr 0 0; } } Image_new_from_image_item = class Menuaction "_From Image" "make a new image based on image x" { action x = class Image _result { _vislevel = 3; pixel = Expression "Pixel value" 0; _result = image_new x.width x.height x.bands x.format x.coding x.type pixel.expr x.xoffset x.yoffset; } } Image_region_item = class Menupullright "_Region on Image" "make a new region on an image" { Region_item = class Menuaction "_Region" "make a region on an image" { action image = scope.Region_relative image 0.25 0.25 0.5 0.5; } Mark_item = class Menuaction "_Point" "make a point on an image" { action image = scope.Mark_relative image 0.5 0.5; } Arrow_item = class Menuaction "_Arrow" "make an arrow on an image" { action image = scope.Arrow_relative image 0.25 0.25 0.5 0.5; } HGuide_item = class Menuaction "_Horizontal Guide" "make a horizontal guide on an image" { action image = scope.HGuide image 0.5; } VGuide_item = class Menuaction "_Vertical Guide" "make a vertical guide on an image" { action image = scope.VGuide image 0.5; } sep1 = Menuseparator; Move_item = class Menuaction "From Region" "new region on image using existing region as a guide" { action a b = map_binary process a b { process a b = x.Region target x.left x.top x.width x.height, is_Region x = x.Arrow target x.left x.top x.width x.height, is_Arrow x = error "bad arguments to region-from-region" { // prefer image then region compare a b = false, !is_Image a && is_Image b = false, is_Region a && !is_Region b = true; [target, x] = sortc compare [a, b]; } } } } } Image_convert_to_image_item = class Menuaction "Con_vert to Image" "convert anything to an image" { action x = to_image x; } Image_number_format_item = class Menupullright "_Format" "convert numeric format" { U8_item = class Menuaction "_8 bit unsigned" "convert to unsigned 8 bit [0, 255]" { action x = map_unary cast_unsigned_char x; } U16_item = class Menuaction "1_6 bit unsigned" "convert to unsigned 16 bit [0, 65535]" { action x = map_unary cast_unsigned_short x; } U32_item = class Menuaction "_32 bit unsigned" "convert to unsigned 32 bit [0, 4294967295]" { action x = map_unary cast_unsigned_int x; } sep1 = Menuseparator; S8_item = class Menuaction "8 _bit signed" "convert to signed 8 bit [-128, 127]" { action x = map_unary cast_signed_char x; } S16_item = class Menuaction "16 b_it signed" "convert to signed 16 bit [-32768, 32767]" { action x = map_unary cast_signed_short x; } S32_item = class Menuaction "32 bi_t signed" "convert to signed 32 bit [-2147483648, 2147483647]" { action x = map_unary cast_signed_int x; } sep2 = Menuseparator; Float_item = class Menuaction "_Single precision float" "convert to IEEE 32 bit float" { action x = map_unary cast_float x; } Double_item = class Menuaction "_Double precision float" "convert to IEEE 64 bit float" { action x = map_unary cast_double x; } sep3 = Menuseparator; Scmplxitem = class Menuaction "Single _precision complex" "convert to 2 x IEEE 32 bit float" { action x = map_unary cast_complex x; } Dcmplx_item = class Menuaction "Double p_recision complex" "convert to 2 x IEEE 64 bit float" { action x = map_unary cast_double_complex x; } } Image_header_item = class Menupullright "_Header" "do stuff to the image header" { Image_get_item = class Menupullright "_Get" "get header fields" { // the header fields we can get fields = class { type = 0; width = 1; height = 2; format = 3; bands = 4; xres = 5; yres = 6; xoffset = 7; yoffset = 8; coding = 9; field_names = Enum [ $width => width, $height => height, $bands => bands, $format => format, $type => type, $xres => xres, $yres => yres, $xoffset => xoffset, $yoffset => yoffset, $coding => coding ]; field_option name = Option_enum (_ "Field") field_names name; field_funcs = Table [ [type, get_type], [width, get_width], [height, get_height], [format, get_format], [bands, get_bands], [xres, get_xres], [yres, get_yres], [xoffset, get_xoffset], [yoffset, get_yoffset], [coding, get_coding] ]; } get_field field_name x = class _result { _vislevel = 3; field = fields.field_option field_name; _result = map_unary (Real @ fields.field_funcs.lookup 0 1 field.value_thing) x; } Width_item = class Menuaction "_Width" "get width" { action x = get_field "width" x; } Height_item = class Menuaction "_Height" "get height" { action x = get_field "height" x; } Bands_item = class Menuaction "_Bands" "get bands" { action x = get_field "bands" x; } Format_item = class Menuaction "_Format" "get format" { action x = get_field "format" x; } Type_item = class Menuaction "_Type" "get type" { action x = get_field "type" x; } Xres_item = class Menuaction "_Xres" "get X resolution" { action x = get_field "xres" x; } Yres_item = class Menuaction "_Yres" "get Y resolution" { action x = get_field "yres" x; } Xoffset_item = class Menuaction "X_offset" "get X offset" { action x = get_field "xoffset" x; } Yoffset_item = class Menuaction "Yo_ffset" "get Y offset" { action x = get_field "yoffset" x; } Coding_item = class Menuaction "_Coding" "get coding" { action x = get_field "coding" x; } sep1 = Menuseparator; Custom_item = class Menuaction "C_ustom" "get any header field" { action x = class _result { _vislevel = 3; field = String "Field" "Xsize"; parse = Option "Parse" [ "No parsing", "Parse string as integer", "Parse string as real", "Parse string as hh:mm:ss" ] 0; _result = map_unary (wrap @ process @ get_header field.value) x { parse_str parse str = parse (split is_space str)?0; parse_field name cast parse x = cast x, is_number x = parse_str parse x, is_string x = error ("not " ++ name); get_int = parse_field "int" cast_signed_int parse_int; get_float = parse_field "float" cast_float parse_float; get_time = parse_field "hh:mm:ss" cast_signed_int parse_time; wrap x = Real x, is_real x = Vector x, is_real_list x = Image x, is_image x = Bool x, is_bool x = Matrix x, is_matrix x = String "String" x, is_string x = List x, is_list x = x; process = [ id, get_int, get_float, get_time ]?parse; } } } } sep1 = Menuseparator; Image_set_meta_item = class Menuaction "_Set" "set image metadata" { action x = class _result { _vislevel = 3; fname = String "Field" "field-name"; val = Expression "Value" 42; _result = map_unary process x { process image = set_header fname.value val.expr image; } } } Image_edit_header_item = class Menuaction "_Edit" "change advisory header fields of image" { type_names = Image_type.type_names; all_names = sort (map (extract 0) type_names.value); get_prop has get def x = get x, has x = def; action x = class _result { _vislevel = 3; nxres = Expression "Xres" (get_prop has_xres get_xres 1 x); nyres = Expression "Yres" (get_prop has_yres get_yres 1 x); nxoff = Expression "Xoffset" (get_prop has_xoffset get_xoffset 0 x); nyoff = Expression "Yoffset" (get_prop has_yoffset get_yoffset 0 x); type_option = Option_enum "Image type" Image_type.type_names (Image_type.type_names.get_name type) { type = x.type, is_Image x = Image_type.MULTIBAND; } _result = map_unary process x { process image = Image (im_copy_set image.value type_option.value_thing (to_real nxres) (to_real nyres) (to_real nxoff) (to_real nyoff)); } } } } Image_cache_item = class Menuaction "C_ache" "cache calculated image pixels" { action x = class _result { _vislevel = 3; tile_width = Number "Tile width" 128; tile_height = Number "Tile height" 128; max_tiles = Number "Maximum number of tiles to cache" (-1); _result = map_unary process x { process image = cache (to_real tile_width) (to_real tile_height) (to_real max_tiles) image; } } } #separator Image_levels_item = class Menupullright "_Levels" "change image levels" { Scale_item = class Menuaction "_Scale to 0 - 255" "linear transform to fit 0 - 255 range" { action x = map_unary scale x; } Linear_item = class Menuaction "_Linear" "linear transform of image levels" { action x = class _result { _vislevel = 3; scale = Scale "Scale" 0.001 3 1; offset = Scale "Offset" (-128) 128 0; _result = map_unary adj x { adj x // only force back to input type if this is a thing // with a type ... so we work for Colour / Matrix etc. = clip2fmt x.format x', has_member "format" x = x' { x' = x * scale + offset; } } } } Gamma_item = class Menuaction "_Power" "power transform of image levels (gamma)" { action x = class _result { _vislevel = 3; gamma = Scale "Gamma" 0.001 4 1; image_maximum_hint = "You may need to change image_maximum if " ++ "this is not an 8 bit image"; im_mx = Expression "Image maximum" mx { mx = Image_format.maxval x.format, has_format x = 255; } _result = map_unary gam x { gam x = clip2fmt (get_format x) x', has_format x = x' { x' = (im_mx.expr / im_mx.expr ** gamma) * x ** gamma; } } } } Tone_item = class Menuaction "_Tone Curve" "adjust tone curve" { action x = class _result { _vislevel = 3; b = Scale "Black point" 0 100 0; w = Scale "White point" 0 100 100; sp = Scale "Shadow point" 0.1 0.3 0.2; mp = Scale "Mid-tone point" 0.4 0.6 0.5; hp = Scale "Highlight point" 0.7 0.9 0.8; sa = Scale "Shadow adjust" (-15) 15 0; ma = Scale "Mid-tone adjust" (-30) 30 0; ha = Scale "Highlight adjust" (-15) 15 0; curve = tone_build x.format b w sp mp hp sa ma ha; _result = map_unary (hist_map curve) x; } } } Image_transform_item = class Menupullright "_Transform" "transform images" { Rotate_item = class Menupullright "Ro_tate" "rotate image" { Fixed_item = class Menupullright "_Fixed" "clockwise rotation by fixed angles" { rotate_widget default x = class _result { _vislevel = 3; angle = Option "Rotate by" [ "Don't rotate", "90 degrees clockwise", "180 degrees", "90 degrees anticlockwise" ] default; _result = map_unary process x { process = [ // we can't use id here since we want to "declass" // the members of x ... consider if x is a crop class, // for example, we don't want to inherit from crop, we // want to make a new image class rot180 @ rot180, rot90, rot180, rot270 ] ? angle; } } Rot90_item = class Menuaction "_90 Degrees" "clockwise rotation by 90 degrees" { action x = rotate_widget 1 x; } Rot180_item = class Menuaction "_180 Degrees" "clockwise rotation by 180 degrees" { action x = rotate_widget 2 x; } Rot270_item = class Menuaction "_270 Degrees" "clockwise rotation by 270 degrees" { action x = rotate_widget 3 x; } } Free_item = class Menuaction "_Free" "clockwise rotation by any angle" { action x = class _result { _vislevel = 3; angle = Scale "Angle" (-180) 180 0; interp = Interpolate_picker Interpolate_type.BILINEAR; _result = map_unary process x { process image = rotate interp angle image; } } } Straighten_item = class Menuaction "_Straighten" ("smallest rotation that makes an arrow either horizontal " ++ "or vertical") { action x = class _result { _vislevel = 3; interp = Interpolate_picker Interpolate_type.BILINEAR; _result = map_unary straighten x { straighten arrow = rotate interp angle'' arrow.image { x = arrow.width; y = arrow.height; angle = im (polar (x, y)); angle' = angle - 360, angle > 315 = angle - 180, angle > 135 = angle; angle'' = -angle', angle' >= (-45) && angle' < 45 = 90 - angle'; } } } } } Flip_item = class Menupullright "_Flip" "mirror left/right or up/down" { Left_right_item = class Menuaction "_Left Right" "mirror object left/right" { action x = map_unary fliplr x; } Top_bottom_item = class Menuaction "_Top Bottom" "mirror object top/bottom" { action x = map_unary fliptb x; } } Resize_item = class Menupullright "_Resize" "change image size" { Scale_item = class Menuaction "_Scale" "scale image size by a factor" { action x = class _result { _vislevel = 3; xfactor = Expression "Horizontal scale factor" 1; yfactor = Expression "Vertical scale factor" 1; kernel = Kernel_picker Kernel_type.LINEAR; _result = map_unary process x { process image = resize kernel xfactor yfactor image; } } } Size_item = class Menuaction "_Size To" "resize to a fixed size" { action x = class _result { _vislevel = 3; which = Option "Resize axis" [ "Shortest", "Longest", "Horizontal", "Vertical" ] 0; size = Expression "Resize to (pixels)" 128; aspect = Toggle "Break aspect ratio" false; kernel = Kernel_picker Kernel_type.LINEAR; _result = map_unary process x { process image = resize kernel h v image, aspect = resize kernel fac fac image { xfac = to_real size / image.width; yfac = to_real size / image.height; max_factor = [xfac, 1], xfac > yfac = [1, yfac]; min_factor = [xfac, 1], xfac < yfac = [1, yfac]; [h, v] = [ max_factor, min_factor, [xfac, 1], [1, yfac]]?which; fac = h, v == 1 = v; } } } } Size_within_item = class Menuaction "Size _Within" "size to fit within a rectangle" { action x = class _result { _vislevel = 3; // the rects we size to fit within _rects = [ [2048, 1536], [1920, 1200], [1600, 1200], [1400, 1050], [1280, 1024], [1024, 768], [800, 600], [640, 480] ]; within = Option "Fit within (pixels)" ( [print w ++ " x " ++ print h :: [w, h] <- _rects] ++ ["Custom"] ) 4; custom_width = Expression "Custom width" 1000; custom_height = Expression "Custom height" 1000; size = Option "Page size" [ "Full page", "Half page", "Quarter page" ] 0; kernel = Kernel_picker Kernel_type.LINEAR; _result = map_unary process x { xdiv = [1, 2, 2]?size; ydiv = [1, 1, 2]?size; allrect = _rects ++ [ [custom_width.expr, custom_height.expr] ]; [width, height] = allrect?within; process x = resize kernel fac fac x, fac < 1 = x { xfac = (width / xdiv) / x.width; yfac = (height / ydiv) / x.height; fac = min_pair xfac yfac; } } } } Resize_canvas_item = class Menuaction "_Canvas" "change size of surrounding image" { action x = class _result { _vislevel = 3; // try to guess a sensible size for the new image _guess_size = x.rect, is_Image x = Rect 0 0 100 100; nwidth = Expression "New width (pixels)" _guess_size.width; nheight = Expression "New height (pixels)" _guess_size.height; bgcolour = Expression "Background colour" 0; position = Option "Position" [ "North-west", "North", "North-east", "West", "Centre", "East", "South-west", "South", "South-east", "Specify in pixels" ] 4; left = Expression "Pixels from left" 0; top = Expression "Pixels from top" 0; _result = map_unary process x { process image = insert_noexpand xp yp image background { width = image.width; height = image.height; coding = image.coding; bands = 3, coding == Image_coding.LABPACK = image.bands; format = Image_format.FLOAT, coding == Image_coding.LABPACK = image.format; type = image.type; // placement vectors ... left, centre, right xposv = [0, to_real nwidth / 2 - width / 2, to_real nwidth - width]; yposv = [0, to_real nheight / 2 - height / 2, to_real nheight - height]; xp = left, position == 9 = xposv?((int) (position % 3)); yp = top, position == 9 = yposv?((int) (position / 3)); background = image_new nwidth nheight bands format coding type bgcolour.expr 0 0; } } } } } Image_map_item = class Menuaction "_Map" "map an image through a 2D transform image" { action a b = class _result { _vislevel = 3; interp = Interpolate_picker Interpolate_type.BILINEAR; _result = map_binary trans a b { trans a b = mapim interp.value in index { // get the index image first [index, in] = sortc (const is_twocomponent) [a, b]; // is a two-component image, ie. one band complex, or // two-band non-complex is_twocomponent x = is_nonc x || is_c x; is_nonc x = has_bands x && get_bands x == 2 && has_format x && !is_complex_format (get_format x); is_c x = has_bands x && get_bands x == 1 && has_format x && is_complex_format (get_format x); is_complex_format f = f == Image_format.COMPLEX || f == Image_format.DPCOMPLEX; } } } } Image_perspective_item = Perspective_item; Image_rubber_item = class Menupullright "Ru_bber Sheet" "automatically warp images to superposition" { rubber_interp = Option "Interpolation" ["Nearest", "Bilinear"] 1; rubber_order = Option "Order" ["0", "1", "2", "3"] 1; rubber_wrap = Toggle "Wrap image edges" false; // a transform ... a matrix, plus the size of the image the // matrix was made for Transform matrix image_width image_height = class matrix { // scale a transform ... if it worked for a m by n image, make // it work for a (m * xfac) by (y * yfac) image rescale xfac yfac = Transform (Matrix (map2 (map2 multiply) matrix.value facs)) (image_width * xfac) (image_height * yfac) { facs = [ [xfac, yfac], [1, 1], [1, 1], [1 / xfac, 1 / yfac], [1 / xfac, 1 / yfac], [1 / xfac, 1 / yfac] ]; } } // yuk!!!! fix is_instanceof to not need absolute names is_Transform = is_instanceof "Image_transform_item.Image_rubber_item.Transform"; Find_item = class Menuaction "_Find" ("find a transform which will map sample image onto " ++ "reference") { action reference sample = class _trn { _vislevel = 3; // controls order = rubber_order; interp = rubber_interp; wrap = rubber_wrap; max_err = Expression "Maximum error" 0.3; max_iter = Expression "Maximum iterations" 10; // transform [sample', trn, err] = transform_search max_err max_iter order interp wrap sample reference; transformed_image = Image sample'; _trn = Transform trn reference.width reference.height; final_error = err; } } Apply_item = class Menuaction "_Apply" "apply a transform to an image" { action a b = class _result { _vislevel = 3; // controls interp = rubber_interp; wrap = rubber_wrap; _result = map_binary trans a b { trans a b = transform interp wrap t' i { // get the transform arg first [i, t] = sortc (const is_Transform) [a, b]; t' = t.rescale (i.width / t.image_width) (i.height / t.image_height); } } } } } sep1 = Menuseparator; Match_item = class Menuaction "_Linear Match" "rotate and scale one image to match another" { action x y = class _result { _vislevel = 3; // try to find an image ... for a group, get the first item find_image x = x, is_Image x = find_image x?0, is_list x = find_image x.value, is_class x && has_value x = error "unable to find image"; _a = find_image x; _b = find_image y; ap1 = Mark_relative _a 0.5 0.25; bp1 = Mark_relative _b 0.5 0.25; ap2 = Mark_relative _a 0.5 0.75; bp2 = Mark_relative _b 0.5 0.75; refine = Toggle "Refine selected tie-points" false; lock = Toggle "No resize" false; _result = map_binary process x y { process a b = Image b''' { _prefs = Workspaces.Preferences; window = _prefs.MOSAIC_WINDOW_SIZE; object = _prefs.MOSAIC_OBJECT_SIZE; a' = a.value; b' = b.value; b'' = clip2fmt a.format b'; // return p2 ... if lock is set, return a p2 a standard // distance along the vector joining p1 and p2 norm p1 p2 = Rect left' top' 0 0, lock = p2 { v = (p2.left - p1.left, p2.top - p1.top); // 100000 to give precision since we pass points as // ints to match n = 100000 * sign v; left' = p1.left + re n; top' = p1.top + im n; } ap2'' = norm ap1 ap2; bp2'' = norm bp1 bp2; b''' = im_match_linear_search a' b'' ap1.left ap1.top bp1.left bp1.top ap2''.left ap2''.top bp2''.left bp2''.top object window, // we can't search if lock is on refine && !lock = im_match_linear a' b'' ap1.left ap1.top bp1.left bp1.top ap2''.left ap2''.top bp2''.left bp2''.top; } } } } Image_perspective_match_item = Perspective_match_item; } Image_band_item = class Menupullright "_Band" "manipulate image bands" { // like extract_bands, but return [] for zero band image // makes compose a bit simpler exb b n x = [], to_real n == 0 = extract_bands b n x; Extract_item = class Menuaction "_Extract" "extract bands from image" { action x = class _result { _vislevel = 3; first = Expression "Extract from band" 0; number = Expression "Extract this many bands" 1; _result = map_unary (exb first number) x; } } Insert_item = class Menuaction "_Insert" "insert bands into image" { action x y = class _result { _vislevel = 3; first = Expression "Insert at position" 0; _result = map_binary process x y { process im1 im2 = exb 0 f im1 ++ im2 ++ exb f (b - f) im1 { f = to_real first; b = im1.bands; } } } } Delete_item = class Menuaction "_Delete" "delete bands from image" { action x = class _result { _vislevel = 3; first = Expression "Delete from band" 0; number = Expression "Delete this many bands" 1; _result = map_unary process x { process im = exb 0 f im ++ exb (f + n) (b - (f + n)) im { f = to_real first; n = to_real number; b = im.bands; } } } } Bandwise_item = Image_join_item.Bandwise_item; sep1a = Menuseparator; Bandand_item = class Menuaction "Bitwise Band AND" "bitwise AND of image bands" { action x = bandand x; } Bandor_item = class Menuaction "Bitwise Band OR" "bitwise OR of image bands" { action x = bandor x; } sep2 = Menuseparator; To_dimension_item = class Menuaction "To D_imension" "convert bands to width or height" { action x = class _result { _vislevel = 3; orientation = Option "Orientation" [ "Horizontal", "Vertical" ] 0; _result = map_unary process x { process im = foldl1 [join_lr, join_tb]?orientation (bandsplit im); } } } To_bands_item = class Menuaction "To B_ands" "turn width or height to bands" { action x = class _result { _vislevel = 3; orientation = Option "Orientation" [ "Horizontal", "Vertical" ] 0; _result = map_unary process x { process im = bandjoin (map extract_column [0 .. im.width - 1]), orientation == 0 = bandjoin (map extract_row [0 .. im.height - 1]) { extract_column n = extract_area n 0 1 im.height im; extract_row n = extract_area 0 n im.width 1 im; } } } } } Image_alpha_item = class Menupullright "_Alpha" "manipulate image alpha" { Add_item = class Menuaction "_Add" "add alpha" { action x = class _result { _vislevel = 3; opacity = Expression "Opacity (255 == solid)" 255; _result = x ++ to_real opacity; } } Flatten_item = class Menuaction "_Flatten" "flatten alpha out of image" { action x = class _result { _vislevel = 3; bg = Expression "Background" 0; _result = map_unary (flattenimage bg) x; } } Extract_item = class Menuaction "_Extract" "extract alpha" { action x = map_unary exb x { exb x = extract_bands (x.bands - 1) 1 x; } } Drop_item = class Menuaction "_Drop" "drop alpha" { action x = map_unary exb x { exb x = extract_bands 0 (x.bands - 1) x; } } sep1 = Menuseparator; Premultiply_item = class Menuaction "_Premultiply" "premultiply alpha" { action x = premultiply x; } Unpremultiply_item = class Menuaction "_Unpremultiply" "unpremultiply alpha" { action x = unpremultiply x; } sep2 = Menuseparator; Blend_alpha_item = Filter_blend_item.Blend_alpha_item; } Image_crop_item = class Menuaction "_Crop" "extract a rectangular area from an image" { action x = crop x [l, t, w, h] { fields = [ [has_left, get_left, 0], [has_top, get_top, 0], [has_width, get_width, 100], [has_height, get_height, 100] ]; [l, t, w, h] = map get_default fields { get_default line = get x, has x = default { [has, get, default] = line; } } } crop x geo = class _result { _vislevel = 3; l = Expression "Crop left" ((int) (geo?0 + geo?2 / 4)); t = Expression "Crop top" ((int) (geo?1 + geo?3 / 4)); w = Expression "Crop width" (max_pair 1 ((int) (geo?2 / 2))); h = Expression "Crop height" (max_pair 1 ((int) (geo?3 / 2))); _result = map_nary (list_5ary extract) [x, l.expr, t.expr, w.expr, h.expr] { extract im l t w h = extract_area left' top' width' height' im { width' = min_pair (to_real w) im.width; height' = min_pair (to_real h) im.height; left' = range 0 (to_real l) (im.width - width'); top' = range 0 (to_real t) (im.height - height'); } } } } Image_insert_item = class Menuaction "_Insert" "insert a small image into a large image" { action a b = insert_position, is_Group a || is_Group b = insert_area { insert_area = class _result { _check_args = [ [a, "a", check_Image], [b, "b", check_Image] ]; _vislevel = 3; // sort to get smallest first _pred x y = x.width * x.height < y.width * y.height; [_a', _b'] = sortc _pred [a, b]; place = Area _b' left top width height { // be careful in case b is smaller than a left = max_pair 0 ((_b'.width - _a'.width) / 2); top = max_pair 0 ((_b'.height - _a'.height) / 2); width = min_pair _a'.width _b'.width; height = min_pair _a'.height _b'.height; } _result = insert_noexpand place.left place.top (clip2fmt _b'.format a'') _b' { a'' = extract_area 0 0 place.width place.height _a'; } } insert_position = class _result { _vislevel = 3; position = Option "Position" [ "North-west", "North", "North-east", "West", "Centre", "East", "South-west", "South", "South-east", "Specify in pixels" ] 4; left = Expression "Pixels from left" 0; top = Expression "Pixels from top" 0; _result = map_binary insert a b { insert a b = insert_noexpand left top (clip2fmt b.format a) b, position == 9 = insert_noexpand xp yp (clip2fmt b.format a) b { xr = b.width - a.width; yr = b.height - a.height; xp = [0, xr / 2, xr]?((int) (position % 3)); yp = [0, yr / 2, yr]?((int) (position / 3)); } } } } } Image_select_item = Select_item; Image_draw_item = class Menupullright "_Draw" "draw lines, circles, rectangles, floods" { Line_item = class Menuaction "_Line" "draw line on image" { action x = class _result { _vislevel = 3; x1 = Expression "Start x" 0; y1 = Expression "Start y" 0; x2 = Expression "End x" 100; y2 = Expression "End y" 100; i = Expression "Ink" [0]; _result = map_unary line x { line im = draw_line x1 y1 x2 y2 i.expr im; } } } Rect_item = class Menuaction "_Rectangle" "draw rectangle on image" { action x = class _result { _vislevel = 3; rx = Expression "Left" 50; ry = Expression "Top" 50; rw = Expression "Width" 100; rh = Expression "Height" 100; f = Toggle "Fill" true; t = Scale "Line thickness" 1 50 3; i = Expression "Ink" [0]; _result = map_unary rect x { rect im = draw_rect_width rx ry rw rh f t i.expr im; } } } Circle_item = class Menuaction "_Circle" "draw circle on image" { action x = class _result { _vislevel = 3; cx = Expression "Centre x" 100; cy = Expression "Centre y" 100; r = Expression "Radius" 50; f = Toggle "Fill" true; i = Expression "Ink" [0]; _result = map_unary circle x { circle im = draw_circle cx cy r f i.expr im; } } } Flood_item = class Menuaction "_Flood" "flood bounded area of image" { action x = class _result { _vislevel = 3; sx = Expression "Start x" 0; sy = Expression "Start y" 0; e = Option "Flood while" [ "Not equal to ink", "Equal to start point" ] 0; // pick a default ink that won't flood, if we can i = Expression "Ink" default_ink { default_ink = [0], ! has_image x = pixel; pixel = map mean (bandsplit (extract_area sx sy 1 1 im)); im = get_image x; } _result = map_unary flood x { flood im = draw_flood sx sy i.expr im, e == 0 = draw_flood_blob sx sy i.expr im; } } } Draw_scalebar_item = class Menuaction "_Scale" "draw scale bar" { action x = class _result { _vislevel = 3; px = Expression "Left" 50; py = Expression "Top" 50; wid = Expression "Width" 100; thick = Scale "Line thickness" 1 50 3; text = String "Dimension text" "50μm"; font = Fontname "Use font" Workspaces.Preferences.PAINTBOX_FONT; pos = Option "Position Text" ["Above", "Below"] 1; vp = Option "Dimension by" [ "Inner Vertical Edge", "Centre of Vertical", "Outer Vertical Edge" ] 1; dpi = Expression "DPI" 100; ink = Colour "Lab" [50,0,0]; _result = map_unary process x { process im = blend (Image scale) ink' im { // make an ink compatible with the image ink' = colour_transform_to (get_type im) ink; x = to_real px; y = to_real py; w = to_real wid; d = to_real dpi; t = floor thick; bg = image_new (get_width im) (get_height im) (get_bands im) (get_format im) (get_coding im) (get_type im) 0 0 0; draw_block x y w t im = draw_rect_width x y w t true 1 [255] im; label = im_text text.value font.value w 1 d; lw = get_width label; lh = get_height label; ly = [y - lh - t, y + 2 * t]?pos; vx = [ [x - t, x + w], [x - t / 2, x + w - t / 2], [x, x + w - t] ]?vp; scale = (draw_block x y w t @ draw_block vx?0 (y - 2 * t) t (t * 5) @ draw_block vx?1 (y - 2 * t) t (t * 5) @ insert_noexpand (x + w / 2 - lw / 2) ly label) bg; } } } } } Image_join_item = class Menupullright "_Join" "join two or more images together" { Bandwise_item = class Menuaction "_Bandwise Join" "join two images bandwise" { action a b = join a b; } sep1 = Menuseparator; join_lr shim bg align a b = im2 { w = a.width + b.width + shim; h = max_pair a.height b.height; back = image_new w h a.bands a.format a.coding a.type bg 0 0; ya = [0, max_pair 0 ((b.height - a.height)/2), max_pair 0 (b.height - a.height)]; yb = [0, max_pair 0 ((a.height - b.height)/2), max_pair 0 (a.height - b.height)]; im1 = insert_noexpand 0 ya?align a back; im2 = insert_noexpand (a.width + shim) yb?align b im1; } join_tb shim bg align a b = im2 { w = max_pair a.width b.width; h = a.height + b.height + shim; back = image_new w h a.bands a.format a.coding a.type bg 0 0; xa = [0, max_pair 0 ((b.width - a.width)/2), max_pair 0 (b.width - a.width)]; xb = [0, max_pair 0 ((a.width - b.width)/2), max_pair 0 (a.width - b.width)]; im1 = insert_noexpand xa?align 0 a back; im2 = insert_noexpand xb?align (a.height + shim) b im1; } halign_names = ["Top", "Centre", "Bottom"]; valign_names = ["Left", "Centre", "Right"]; Left_right_item = class Menuaction "_Left to Right" "join two images left-right" { action a b = class _result { _vislevel = 3; shim = Scale "Spacing" 0 100 0; bg_colour = Expression "Background colour" 0; align = Option "Alignment" halign_names 1; _result = map_binary (join_lr shim.value bg_colour.expr align.value) a b; } } Top_bottom_item = class Menuaction "_Top to Bottom" "join two images top-bottom" { action a b = class _result { _vislevel = 3; shim = Scale "Spacing" 0 100 0; bg_colour = Expression "Background colour" 0; align = Option "Alignment" valign_names 1; _result = map_binary (join_tb shim.value bg_colour.expr align.value) a b; } } sep2 = Menuseparator; Array_item = class Menuaction "_Array" "join a list of lists of images into a single image" { action x = class _result { _vislevel = 3; hshim = Scale "Horizontal spacing" (-100) (100) 0; vshim = Scale "Vertical spacing" (-100) (100) 0; bg_colour = Expression "Background colour" 0; halign = Option "Horizontal alignment" valign_names 1; valign = Option "Vertical alignment" halign_names 1; // we can't use map_unary since chop-into-tiles returns a group of // groups and we want to be able to reassemble that // TODO: chop-into-tiles should return an array class which // displays as group but does not have the looping behaviour? _result = (image_set_origin 0 0 @ foldl1 (join_tb vshim.value bg_colour.expr halign.value) @ map (foldl1 (join_lr hshim.value bg_colour.expr valign.value))) (to_list (to_list x)); } } ArrayFL_item = class Menuaction "_Array from List" "join a list of images into a single image" { action x = class _result { _vislevel = 3; ncol = Number "Max. Number of Columns" 1; hshim = Scale "Horizontal spacing" (-100) (100) 0; vshim = Scale "Vertical spacing" (-100) (100) 0; bg_colour = Expression "Background colour" 0; halign = Option "Horizontal alignment" valign_names 1; valign = Option "Vertical alignment" halign_names 1; snake = Toggle "Reverse the order of every other row" false; _l = split_lines ncol.value x.value, is_Group x = split_lines ncol.value x; _l' = map2 reverse_if_odd [0..] _l, snake = _l { reverse_if_odd n x = reverse x, n % 2 == 1 = x; } _result = (image_set_origin 0 0 @ foldl1 (join_tb vshim.value bg_colour.expr halign.value) @ map (foldl1 (join_lr hshim.value bg_colour.expr valign.value))) (to_list (to_list _l')); } } } Image_tile_item = class Menupullright "Til_e" "tile an image across and down" { tile_widget default_type x = class _result { _vislevel = 3; across = Expression "Tiles across" 2; down = Expression "Tiles down" 2; repeat = Option "Tile type" ["Replicate", "Four-way mirror"] default_type; _result = map_unary process x { process image = tile across down image, repeat == 0 = tile across down image'' { image' = insert image.width 0 (fliplr image) image; image'' = insert 0 image.height (fliptb image') image'; } } } Replicate_item = class Menuaction "_Replicate" "replicate image across and down" { action x = tile_widget 0 x; } Fourway_item = class Menuaction "_Four-way Mirror" "four-way mirror across and down" { action x = tile_widget 1 x; } Chop_item = class Menuaction "_Chop Into Tiles" "slice an image into tiles" { action x = class _result { _vislevel = 3; tile_width = Expression "Tile width" 100; tile_height = Expression "Tile height" 100; hoverlap = Expression "Horizontal overlap" 0; voverlap = Expression "Vertical overlap" 0; _result = map_unary (Group @ map Group @ process) x { process x = imagearray_chop tile_width tile_height hoverlap voverlap x; } } } } #separator Pattern_images_item = class Menupullright "_Patterns" "make a variety of useful patterns" { Grey_item = class Menuaction "Grey _Ramp" "make a smooth grey ramp" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; orientation = Option "Orientation" [ "Horizontal", "Vertical" ] 0; foption = Option "Format" ["8 bit", "float"] 0; _result = Image im { gen = im_grey, foption == 0 = im_fgrey; w = to_real nwidth; h = to_real nheight; im = gen w h, orientation == 0 = rot90 (gen h w); } } } Xy_item = class Menuaction "_XY Image" "make a two band image whose pixel values are their coordinates" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; _result = Image (make_xy nwidth nheight); } } Noise_item = class Menupullright "_Noise" "various noise generators" { Gaussian_item = class Menuaction "_Gaussian" "make an image of gaussian noise" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; mean = Scale "Mean" 0 255 128; deviation = Scale "Deviation" 0 128 50; _result = Image (gaussnoise nwidth nheight mean.value deviation.value); } } Fractal_item = class Menuaction "_Fractal" "make a fractal noise image" { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; dimension = Scale "Dimension" 2.001 2.999 2.001; _result = Image (im_fractsurf (to_real nsize) dimension.value); } } Perlin_item = class Menuaction "_Perlin" "Perlin noise image" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; cell_size = Expression "Cell size (pixels)" 8; eight = Toggle "Eight bit output" true; _result = 128 * im + 128, eight = im { im = perlin cell_size nwidth nheight; } } } Worley_item = class Menuaction "_Worley" "Worley noise image" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 512; nheight = Expression "Image height (pixels)" 512; cell_size = Expression "Cell size (pixels)" 256; _result = worley cell_size nwidth nheight; } } } Checkerboard_item = class Menuaction "_Checkerboard" "make a checkerboard image" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; hpsize = Expression "Horizontal patch size" 8; vpsize = Expression "Vertical patch size" 8; hpoffset = Expression "Horizontal patch offset" 0; vpoffset = Expression "Vertical patch offset" 0; _result = Image (xstripes ^ ystripes) { pixels = make_xy nwidth nheight; xpixels = pixels?0 + to_real hpoffset; ypixels = pixels?1 + to_real vpoffset; make_stripe pix swidth = pix % (swidth * 2) >= swidth; xstripes = make_stripe xpixels (to_real hpsize); ystripes = make_stripe ypixels (to_real vpsize); } } } Grid_item = class Menuaction "Gri_d" "make a grid" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; hspace = Expression "Horizontal line spacing" 8; vspace = Expression "Vertical line spacing" 8; thick = Expression "Line thickness" 1; hoff = Expression "Horizontal grid offset" 4; voff = Expression "Vertical grid offset" 4; _result = Image (xstripes | ystripes) { pixels = make_xy nwidth nheight; xpixels = pixels?0 + to_real hoff; ypixels = pixels?1 + to_real voff; make_stripe pix swidth = pix % swidth < to_real thick; xstripes = make_stripe xpixels (to_real hspace); ystripes = make_stripe ypixels (to_real vspace); } } } Text_item = class Menuaction "_Text" "make a bitmap of some text" { action = class _result { _vislevel = 3; text = String "Text to paint" "Hello world!"; font = Fontname "Use font" Workspaces.Preferences.PAINTBOX_FONT; wrap = Expression "Wrap text at" 500; align = Option "Alignment" [ "Left", "Centre", "Right" ] 0; dpi = Expression "DPI" 300; _result = Image (im_text text.value font.value (to_real wrap) align.value (to_real dpi)); } } New_CIELAB_slice_item = class Menuaction "CIELAB _Slice" "make a slice through CIELAB space" { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; L = Scale "L value" 0 100 50; _result = Image (lab_slice (to_real nsize) L.value); } } sense_option = Option "Sense" [ "Pass", "Reject" ] 0; build fn size = (Image @ image_set_type Image_type.FOURIER @ rotquad @ fn) (im_create_fmask size size); New_ideal_item = class Menupullright "_Ideal Fourier Mask" "make various ideal Fourier filter masks" { High_low_item = class Menuaction "_High or Low Pass" ("make a mask image for a highpass/lowpass " ++ "ideal Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f sense.value fc.value 0 0 0 0; } } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" ("make a mask image for an ring pass/reject " ++ "ideal Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; rw = Scale "Ring width" 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f (sense.value + 6) fc.value rw.value 0 0 0; } } } Band_item = class Menuaction "_Band Pass or Band Reject" ("make a mask image for a band pass/reject " ++ "ideal Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fcx = Scale "Horizontal frequency cutoff" 0.01 0.99 0.5; fcy = Scale "Vertical frequency cutoff" 0.01 0.99 0.5; r = Scale "Radius" 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f (sense.value + 12) fcx.value fcy.value r.value 0 0; } } } } New_gaussian_item = class Menupullright "_Gaussian Fourier Mask" "make various Gaussian Fourier filter masks" { High_low_item = class Menuaction "_High or Low Pass" ("make a mask image for a highpass/lowpass " ++ "Gaussian Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f (sense.value + 4) fc.value ac.value 0 0 0; } } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" ("make a mask image for an ring pass/reject " ++ "Gaussian Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; rw = Scale "Ring width" 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f (sense.value + 10) fc.value rw.value ac.value 0 0; } } } Band_item = class Menuaction "_Band Pass or Band Reject" ("make a mask image for a band pass/reject " ++ "Gaussian Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fcx = Scale "Horizontal frequency cutoff" 0.01 0.99 0.5; fcy = Scale "Vertical frequency cutoff" 0.01 0.99 0.5; r = Scale "Radius" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f (sense.value + 16) fcx.value fcy.value r.value ac.value 0; } } } } New_butterworth_item = class Menupullright "_Butterworth Fourier Mask" "make various Butterworth Fourier filter masks" { High_low_item = class Menuaction "_High or Low Pass" ("make a mask image for a highpass/lowpass " ++ "Butterworth Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; order = Scale "Order" 1 10 2; _result = build param (to_real nsize) { param f = f (sense.value + 2) order.value fc.value ac.value 0 0; } } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" ("make a mask image for an ring pass/reject " ++ "Butterworth Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; rw = Scale "Ring width" 0.01 0.99 0.5; order = Scale "Order" 1 10 2; _result = build param (to_real nsize) { param f = f (sense.value + 8) order.value fc.value rw.value ac.value 0; } } } Band_item = class Menuaction "_Band Pass or Band Reject" ("make a mask image for a band pass/reject " ++ "Butterworth Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fcx = Scale "Horizontal frequency cutoff" 0.01 0.99 0.5; fcy = Scale "Vertical frequency cutoff" 0.01 0.99 0.5; r = Scale "Radius" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; order = Scale "Order" 1 10 2; _result = build param (to_real nsize) { param f = f (sense.value + 14) order.value fcx.value fcy.value r.value ac.value; } } } } } Test_images_item = class Menupullright "Test I_mages" "make a variety of test images" { Eye_item = class Menuaction "_Spatial Response" "image for testing the eye's spatial response" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; factor = Scale "Factor" 0.001 1 0.2; _result = Image (im_eye (to_real nwidth) (to_real nheight) factor.value); } } Zone_plate = class Menuaction "_Zone Plate" "make a zone plate" { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; _result = Image (im_zone (to_real nsize)); } } Frequency_test_chart_item = class Menuaction "_Frequency Testchart" "make a black/white frequency test pattern" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; sheight = Expression "Strip height (pixels)" 10; waves = Expression "Wavelengths" [64, 32, 16, 8, 4, 2]; _result = imagearray_assemble 0 0 (transpose [strips]) { freq_slice wave = Image (sin (grey / wave) > 0); strips = map freq_slice waves.expr; grey = im_fgrey (to_real nwidth) (to_real sheight) * 360 * (to_real nwidth); } } } CRT_test_chart_item = class Menuaction "CRT _Phosphor Chart" "make an image for measuring phosphor colours" { action = class _result { _vislevel = 3; brightness = Scale "Brightness" 0 255 200; psize = Expression "Patch size (pixels)" 32; _result = Image (imagearray_assemble 0 0 [[green, red], [blue, white]]) { black = image_new (to_real psize) (to_real psize) 1 Image_format.FLOAT Image_coding.NOCODING Image_type.B_W 0 0 0; notblack = black + brightness; green = black ++ notblack ++ black; red = notblack ++ black ++ black; blue = black ++ black ++ notblack; white = notblack ++ notblack ++ notblack; } } } Greyscale_chart_item = class Menuaction "_Greyscale" "make a greyscale" { action = class _result { _vislevel = 3; pwidth = Expression "Patch width" 8; pheight = Expression "Patch height" 8; npatches = Expression "Number of patches" 16; _result = Image (image_set_type Image_type.B_W (clip2fmt Image_format.UCHAR wedge)) { wedge = 255 / (to_real npatches - 1) * (int) (strip?0 / to_real pwidth) { strip = make_xy (to_real pwidth * to_real npatches) pheight; } } } } CMYK_test_chart_item = class Menuaction "_CMYK Wedges" "make a set of CMYK wedges" { action = class _result { _vislevel = 3; pwidth = Expression "Patch width" 8; pheight = Expression "Patch height" 8; npatches = Expression "Number of patches" 16; _result = Image (image_set_type Image_type.CMYK (clip2fmt Image_format.UCHAR strips)) { wedge = 255 / (to_real npatches - 1) * (int) (strip?0 / to_real pwidth) { strip = make_xy (to_real pwidth * to_real npatches) pheight; } black = wedge * 0; C = wedge ++ black ++ black ++ black; M = black ++ wedge ++ black ++ black; Y = black ++ black ++ wedge ++ black; K = black ++ black ++ black ++ wedge; strips = imagearray_assemble 0 0 [[C],[M],[Y],[K]]; } } } Colour_atlas_item = class Menuaction "_Colour Atlas" "make a grid of patches grouped around a colour" { action = class _result { _vislevel = 3; start = Colour_picker "Lab" [50,0,0]; nstep = Expression "Number of steps" 9; ssize = Expression "Step size" 10; psize = Expression "Patch size" 32; sepsize = Expression "Separator size" 4; _result = colour_transform_to (get_type start) blocks''' { size = (to_real nstep * 2 + 1) * to_real psize - to_real sepsize; xy = make_xy size size; xy_grid = (xy % to_real psize) < (to_real psize - to_real sepsize); grid = xy_grid?0 & xy_grid?1; blocks = (int) (to_real ssize * ((int) (xy / to_real psize))); lab_start = colour_transform_to Image_type.LAB start; blocks' = blocks - to_real nstep * to_real ssize + Vector (tl lab_start.value); blocks'' = hd lab_start.value ++ Image blocks'; blocks''' = image_set_type Image_type.LAB blocks'', Image grid = 0; } } } } nip2-8.7.0/share/nip2/compat/8.5/_list.def0000644000175000017500000002310313273071606014664 00000000000000/* any l: or all the elements of list l together * * any (map (equal 0) list) == true, if any element of list is zero. * any :: [bool] -> bool */ any = foldr logical_or false; /* all l: and all the elements of list l together * * all (map (==0) list) == true, if every element of list is zero. * all :: [bool] -> bool */ all = foldr logical_and true; /* concat l: join a list of lists together * * concat ["abc","def"] == "abcdef". * concat :: [[*]] -> [*] */ concat l = foldr join [] l; /* delete eq x l: delete the first x from l * * delete equal 'b' "abcdb" == "acdb" * delete :: (* -> bool) -> * -> [*] -> [*] */ delete eq a l = [], l == [] = y, eq a b = b : delete eq a y { b:y = l; } /* difference eq a b: delete b from a * * difference equal "asdf" "ad" == "sf" * difference :: (* -> bool) -> [*] -> [*] -> [*] */ difference = foldl @ converse @ delete; /* drop n l: drop the first n elements from list l * * drop 3 "abcd" == "d" * drop :: num -> [*] -> [*] */ drop n l = l, n <= 0 || l == [] = drop (n - 1) (tl l); /* dropwhile fn l: drop while fn is true * * dropwhile is_digit "1234pigs" == "pigs" * dropwhile :: (* -> bool) -> [*] -> [*] */ dropwhile fn l = [], l == [] = dropwhile fn x, fn a = l { a:x = l; } /* extract n l: extract element at index n from list l */ extract = converse subscript; /* filter fn l: return all elements of l for which predicate fn holds * * filter is_digit "1one2two3three" = "123" * filter :: (* -> bool) -> [*] -> [*] */ filter fn l = foldr addif [] l { addif x l = x : l, fn x; = l; } /* flatten x: flatten a list of lists of things into a simple list * * flatten :: [[*]] -> [*] */ flatten x = foldr flat [] x, is_list x = x { flat x sofar = foldr flat sofar x, is_list x = x : sofar; } /* foldl fn st l: fold list l from the left with function fn and start st * * Start from the left hand end of the list (unlike foldr, see below). * foldl is less useful (and much slower). * * foldl fn start [a,b .. z] = ((((st fn a) fn b) ..) fn z) * foldl :: (* -> ** -> *) -> * -> [**] -> * */ foldl fn st l = st, l == [] = foldl fn (fn st x) xs { x:xs = l; } /* foldl1 fn l: like foldl, but use the 1st element as the start value * * foldl1 fn [1,2,3] == ((1 fn 2) fn 3) * foldl1 :: (* -> * -> *) -> [*] -> * */ foldl1 fn l = [], l == [] = foldl fn x xs { x:xs = l; } /* foldr fn st l: fold list l from the right with function fn and start st * * foldr fn st [a,b..z] = (a fn (b fn (.. (z fn st)))) * foldr :: (* -> ** -> **) -> ** -> [*] -> ** */ foldr fn st l = st, l == [] = fn x (foldr fn st xs) { x:xs = l; } /* foldr1 fn l: like foldr, but use the last element as the start value * * foldr1 fn [1,2,3,4] == (1 fn (2 fn (3 fn 4))) * foldr1 :: (* -> * -> *) -> [*] -> * */ foldr1 fn l = [], l == [] = x, xs == [] = fn x (foldr1 fn xs) { x:xs = l; } /* Search a list for an element, returning its index (or -1) * * index (equal 12) [13,12,11] == 1 * index :: (* -> bool) -> [*] -> real */ index fn list = search list 0 { search l n = -1, l == [] = n, fn x = search xs (n + 1) { x:xs = l; } } /* init l: remove last element of list l * * The dual of tl. * init [1,2,3] == [1,2] * init :: [*] -> [*] */ init l = error "init of []", l == []; = [], tl l == []; = x : init xs { x:xs = l; } /* iterate f x: repeatedly apply f to x * * return the infinite list [x, f x, f (f x), ..]. * iterate (multiply 2) 1 == [1, 2, 4, 8, 16, 32, 64 ... ] * iterate :: (* -> *) -> * -> [*] */ iterate f x = x : iterate f (f x); /* join_sep sep l: join a list with a separator * * join_sep ", " (map print [1 .. 4]) == "1, 2, 3, 4" * join_sep :: [*] -> [[*]] -> [*] */ join_sep sep l = foldl1 fn l { fn a b = a ++ sep ++ b; } /* last l: return the last element of list l * * The dual of hd. last [1,2,3] == 3 * last :: [*] -> [*] */ last l = error "last of []", l == [] = x, xs == [] = last xs { x:xs = l; } /* len l: length of list l * (see also is_list_len and friends in predicate.def) * * len :: [*] -> num */ len l = 0, l == [] = 1 + len (tl l); /* limit l: return the first element of l which is equal to its predecessor * * useful for checking for convergence * limit :: [*] -> * */ limit l = error "incorrect use of limit", l == [] || tl l == [] || tl (tl l) == [] = a, a == b = limit (b : x) { a:b:x = l; } /* Turn a function of n args into a function which takes a single arg of an * n-element list. */ list_1ary fn x = fn x?0; list_2ary fn x = fn x?0 x?1; list_3ary fn x = fn x?0 x?1 x?2; list_4ary fn x = fn x?0 x?1 x?2 x?3; list_5ary fn x = fn x?0 x?1 x?2 x?3 x?4; list_6ary fn x = fn x?0 x?1 x?2 x?3 x?4 x?5; list_7ary fn x = fn x?0 x?1 x?2 x?3 x?4 x?5 x?6; /* map fn l: map function fn over list l * * map :: (* -> **) -> [*] -> [**] */ map f l = [], l == []; = f (hd l) : map f (tl l); /* map2 fn l1 l2: map two lists together with fn * * map2 :: (* -> ** -> ***) -> [*] -> [**] -> [***] */ map2 fn l1 l2 = map (list_2ary fn) (zip2 l1 l2); /* map3 fn l1 l2 l3: map three lists together with fn * * map3 :: (* -> ** -> *** -> ****) -> [*] -> [**] -> [***] -> [****] */ map3 fn l1 l2 l3 = map (list_3ary fn) (zip3 l1 l2 l3); /* member l x: true if x is a member of list l * * is_digit == member "0123456789" * member :: [*] -> * -> bool */ member l x = any (map (equal x) l); /* merge b l r: merge two lists based on a bool list * * merge :: [bool] -> [*] -> [*] -> [*] */ merge p l r = [], p == [] || l == [] || r == [] = a : merge z x y, c = b : merge z x y { a:x = l; b:y = r; c:z = p; } /* mkset eq l: remove duplicates from list l using equality function * * mkset :: (* -> bool) -> [*] -> [*] */ mkset eq l = [], l == [] = a : filter (not @ eq a) (mkset eq x) { a:x = l; } /* postfix l r: add r to the end of list l * * The dual of ':'. * postfix :: [*] -> ** -> [*,**] */ postfix l r = l ++ [r]; /* repeat x: make an infinite list of xes * * repeat :: * -> [*] */ repeat x = map (const x) [1..]; /* replicate n x: make n copies of x in a list * * replicate :: num -> * -> [*] */ replicate n x = take n (repeat x); /* reverse l: reverse list l * * reverse :: [*] -> [*] */ reverse l = foldl (converse cons) [] l; /* scanl fn st l: apply (foldl fn r) to every initial segment of a list * * scanl add 0 [1,2,3] == [1,3,6] * scanl :: (* -> ** -> *) -> * -> [**] -> [*] */ scanl fn st l = st, l == [] = st' : scanl fn st' xs { x:xs = l; st' = fn st x; } /* sort l: sort list l into ascending order * * sort :: [*] -> [*] */ sort l = sortc less_equal l; /* sortc comp l: sort list l into order using a comparision function * * Uses merge sort (n log n behaviour) * sortc :: (* -> * -> bool) -> [*] -> [*] */ sortc comp l = l, n <= 1 = merge (sortc comp (take n2 l)) (sortc comp (drop n2 l)) { n = len l; n2 = (int) (n / 2); /* merge l1 l2: merge sorted lists l1 and l2 to make a single * sorted list */ merge l1 l2 = l2, l1 == [] = l1, l2 == [] = a : merge x (b : y), comp a b = b : merge (a : x) y { a:x = l1; b:y = l2; } } /* sortpl pl l: sort by a list of predicates * * sortpl :: (* -> bool) -> [*] -> [*] */ sortpl pl l = sortc (test pl) l { /* Comparision function ... put true before false, if equal move on to * the next predicate. */ test pl a b = true, pl == [] = ta, ta != tb = test (tl pl) a b { ta = pl?0 a; tb = pl?0 b; } } /* sortr l: sort list l into descending order * * sortr :: [*] -> [*] */ sortr l = sortc more l; /* split fn l: break a list into sections separated by many fn * * split is_space " hello world " == ["hello", "world"] * split is_space " " == [] * split :: (* -> bool) -> [*] -> [[*]] */ split fn l = [], l == [] || l' == [] = head : split fn tail { nfn = not @ fn; l' = dropwhile fn l; head = takewhile nfn l'; tail = dropwhile nfn l'; } /* splits fn l: break a list into sections separated by a single fn * * split (equal ',') ",,1" == ["", "", "1"] * split :: (* -> bool) -> [*] -> [[*]] */ splits fn l = [], l == [] = head : splits fn tail { fn' = not @ fn; dropif x = [], x == [] = tl x; head = takewhile fn' l; tail = dropif (dropwhile fn' l); } /* splitpl fnl l: split a list up with a list of predicates * * splitpl [is_digit, is_letter, is_digit] "123cat" == ["123", "cat", []] * splitpl :: [* -> bool] -> [*] -> [[*]] */ splitpl fnl l = l, fnl == [] = head : splitpl (tl fnl) tail { head = takewhile (hd fnl) l; tail = dropwhile (hd fnl) l; } /* split_lines n l: split a list into equal length lines * * split_lines 4 "1234567" == ["1234", "567"] * splitl :: int -> [*] -> [[*]] */ split_lines n l = [], l == [] = take n l : split_lines n (drop n l); /* take n l: take the first n elements from list l * take :: num -> [*] -> [*] */ take n l = [], n <= 0 = [], l == [] = hd l : take (n-1) (tl l); /* takewhile fn l: take from the front of a list while predicate fn holds * * takewhile is_digit "123onetwothree" == "123" * takewhile :: (* -> bool) -> [*] -> [*] */ takewhile fn l = [], l == [] = hd l : takewhile fn (tl l), fn (hd l) = []; /* zip2 l1 l2: zip two lists together * * zip2 [1,2] ['a', 'b', 'c'] == [[1,'a'],[2,'b']] * zip2 :: [*] -> [**] -> [[*,**]] */ zip2 l1 l2 = [], l1 == [] || l2 == [] = [hd l1, hd l2] : zip2 (tl l1) (tl l2); /* zip3 l1 l2 l3: zip three lists together * * zip3 [1,2] ['a', 'b', 'c'] [true] == [[1,'a',true]] * zip3 :: [*] -> [**] ->[***] -> [[*,**,***]] */ zip3 l1 l2 l3 = [], l1 == [] || l2 == [] || l3 == [] = [hd l1, hd l2, hd l3] : zip3 (tl l1) (tl l2) (tl l3); nip2-8.7.0/share/nip2/compat/8.5/_magick.def0000644000175000017500000005322113273071606015150 00000000000000/* ImageMagick operations edited by Alan Gibson (aka "snibgo"; snibgo at earthling dot net). 1-Apr-2014 Minor corrections to Geometry_widget and Alpha. Added loads of widgets and Menuactions. Not fully tested. 5-Apr-2014 Many more menu actions. Reorganised Magick menu. 10-Apr-2014 Many more menu actions. 11-Apr-2014 jcupitt Split to separate _magick.def Add 0-ary and 2-ary system Put utility funcs into a Magick class 11-Apr-2014 snibgo Added VirtualPixelBack for cases where background is only relevant when VP=Background 17-Apr-2014 snibgo Many small changes. 2-May-2014 jcupitt Added Magick.version 30-June-2014 Put single-quotes around command exe to help win 1-July-2014 Automatically fall back to gm if we can't find convert 17-July-2014 better GM support Last update: 17-July-2014. For details of ImageMagick operations, see http://www.imagemagick.org/script/command-line-options.php etc. */ /* Put these in a class to avoid filling the main namespace with IM stuff. */ Magick = class { // first gm on path, or "" gm_path = search_for "gm"; // first convert on $PATH, or "" // we check for the convert we ship first convert_path = vips_convert, vips_convert != "" = search_for "convert" { // the convert we ship with the vips binary on some platforms, or "" vips_convert = search (path_absolute convert) { vipshome = path_parse (expand "$VIPSHOME"); convert = vipshome ++ ["bin", "convert" ++ expand "$EXEEXT"]; } } use_gm_pref = Workspaces.Preferences.USE_GRAPHICSMAGICK; // Are we in GM or IM mode? use_gm = true, use_gm_pref && gm_path != "" = false, !use_gm_pref && convert_path != "" = false, convert_path != "" = true, gm_path != "" = error "neither IM nor GM executable found"; command_path = gm_path, use_gm = convert_path; // try to get the version as eg. [6, 7, 7, 10] // GM versions are smaller, typically [1, 3, 18] version = map parse_int (split (member ".-") version_string) { [output] = vips_call "system" ["'" ++ command_path ++ "' -version"] [$log=>true]; version_string = (split (equal ' ') output)?1, use_gm = (split (equal ' ') output)?2; } // make a command-line ... args is a [str] we join with spaces command args = "'" ++ command_path ++ "' " ++ join_sep " " args' { args' = ["convert"] ++ args, use_gm = args; } // capabilities ... different versions support different features, we // turn features on and off based on these // would probably be better to test for caps somehow has_intensity = false, use_gm = version?0 > 6 || version?1 > 7; has_channel = false, use_gm = version?0 > 6 || version?1 > 7; system0 cmd = system_image0 cmd; system cmd x = map_unary (system_image cmd) x; system2 cmd x y = map_binary (system_image2 cmd) x y; system3 cmd x y z = map_trinary (system_image3 cmd) x y z; radius_widget = Scale "Radius" 0 100 10; sigma_widget = Scale "Sigma" 0.1 10 1; angle_widget = Scale "Angle (degrees)" (-360) 360 0; text_widget = String "Text to draw" "AaBbCcDdEe"; gamma_widget = Scale "Gamma" 0 10 1; colors_widget = Scale "Colors" 1 10 3; resize_widget = Scale "Resize (percent)" 0 500 100; fuzz_widget = Scale "Fuzz (percent)" 0 100 0; blur_rad_widget = Scale "Radius (0=auto)" 0 100 0; // a colour with no enclosing quotes ... use this if we know there are // some quotes at an outer level print_colour_nq triple = concat ["#", concat (map fmt triple)] { fmt x = reverse (take 2 (reverse (print_base 16 (x + 256)))); } // we need the quotes because # is the comment character in *nix print_colour triple = "\"" ++ print_colour_nq triple ++ "\""; Foreground triple = class Colour "sRGB" triple { _flag = "-fill " ++ print_colour triple; Colour_edit space triple = this.Foreground triple; } foreground_widget = Foreground [0, 0, 0]; GeneralCol triple = class Colour "sRGB" triple { _flag = print_colour_nq triple; Colour_edit space triple = this.GeneralCol triple; } generalcol_widget = GeneralCol [0, 0, 0]; Background triple = class Colour "sRGB" triple { isNone = Toggle "None (transparent black)" false; _flag = "-background " ++ if isNone then "None" else print_colour triple; Colour_edit space triple = this.Background triple; } background_widget = Background [255, 255, 255]; Bordercol triple = class Colour "sRGB" triple { _flag = "-bordercolor " ++ print_colour triple; Colour_edit space triple = this.Bordercol triple; } bordercol_widget = Bordercol [0, 0, 0]; Mattecol triple = class Colour "sRGB" triple { _flag = "-mattecolor " ++ print_colour triple; Colour_edit space triple = this.Mattecol triple; } mattecol_widget = Mattecol [189, 189, 189]; // FIXME: Undercolour, like many others, can have alpha channel. // How does user input this? With a slider? Undercol triple = class Colour "sRGB" triple { isNone = Toggle "None (transparent black)" true; _flag = if isNone then "" else ("-undercolor " ++ print_colour triple); Colour_edit space triple = this.Undercol triple; } undercol_widget = Undercol [0, 0, 0]; changeCol_widget = class { _vislevel = 3; colour = GeneralCol [0, 0, 0]; fuzz = fuzz_widget; nonMatch = Toggle "change non-matching colours" false; } Alpha alpha = class Option_string "Alpha" [ "On", "Off", "Set", "Opaque", "Transparent", "Extract", "Copy", "Shape", "Remove", "Background" ] alpha { _flag = "-alpha " ++ alpha; Option_edit caption labels value = this.Alpha labels?value; } alpha_widget = Alpha "On"; Antialias value = class Toggle "Antialias" value { _flag = "-antialias", value = "+antialias"; Toggle_edit caption value = this.Antialias value; } antialias_widget = Antialias true; Builtin builtin = class Option_string "Builtin" [ // See http://www.imagemagick.org/script/formats.php "rose:", "logo:", "wizard:", "granite:", "netscape:" ] builtin { _flag = builtin; Option_edit caption labels value = this.Builtin labels?value; } builtin_widget = Builtin "rose:"; channels_widget = class { // FIXME? Can we grey-out alpha when we have no alpha channel, // show CMY(K) instead of RGB(K) etc? // Yes, perhaps we can create different widgets for RGB, RGBA, CMY, CMYK, CMYA, CMYKA. ChanR valueR = class Toggle "Red" valueR { _flag = "R", valueR = ""; Toggle_edit caption valueR = this.ChanR valueR; } channelR = ChanR true; ChanG valueG = class Toggle "Green" valueG { _flag = "G", valueG = ""; Toggle_edit caption valueG = this.ChanG valueG; } channelG = ChanG true; ChanB valueB = class Toggle "Blue" valueB { _flag = "B", valueB = ""; Toggle_edit caption valueB = this.ChanB valueB; } channelB = ChanB true; ChanK valueK = class Toggle "Black" valueK { _flag = "K", valueK = ""; Toggle_edit caption valueK = this.ChanK valueK; } channelK = ChanK true; ChanA valueA = class Toggle "Alpha" valueA { _flag = "A", valueA = ""; Toggle_edit caption valueA = this.ChanA valueA; } channelA = ChanA false; ChanSy valueSy = class Toggle "Sync" valueSy { _flag = ",sync", valueSy = ""; Toggle_edit caption valueSy = this.ChanSy valueSy; } channelSy = ChanSy true; _rgbka = concat [channelR._flag, channelG._flag, channelB._flag, channelK._flag, channelA._flag ]; _flag = "", _rgbka == "" || !has_channel = concat [ "-channel ", _rgbka, channelSy._flag ]; } ch_widget = channels_widget; Colorspace colsp = class Option_string "Colorspace" [ "CIELab", "CMY", "CMYK", "Gray", "HCL", "HCLp", "HSB", "HSI", "HSL", "HSV", "HWB", "Lab", "LCH", "LCHab", "LCHuv", "LMS", "Log", "Luv", "OHTA", "Rec601Luma", "Rec601YCbCr", "Rec709Luma", "Rec709YCbCr", "RGB", "scRGB", "sRGB", "Transparent", "XYZ", "YCbCr", "YDbDr", "YCC", "YIQ", "YPbPr", "YUV" ] colsp { _flag = colsp; Option_edit caption labels value = this.Colorspace labels?value; } colorspace_widget = Colorspace "sRGB"; Compose comp = class Option_string "Compose method" [ "Atop", "Blend", "Blur", "Bumpmap", "ChangeMask", "Clear", "ColorBurn", "ColorDodge", "Colorize", "CopyBlack", "CopyBlue", "CopyCyan", "CopyGreen", "Copy", "CopyMagenta", "CopyOpacity", "CopyRed", "CopyYellow", "Darken", "DarkenIntensity", "DivideDst", "DivideSrc", "Dst", "Difference", "Displace", "Dissolve", "Distort", "DstAtop", "DstIn", "DstOut", "DstOver", "Exclusion", "HardLight", "Hue", "In", "Lighten", "LightenIntensity", "LinearBurn", "LinearDodge", "LinearLight", "Luminize", "Mathematics", "MinusDst", "MinusSrc", "Modulate", "ModulusAdd", "ModulusSubtract", "Multiply", "None", "Out", "Overlay", "Over", "PegtopLight", "PinLight", "Plus", "Replace", "Saturate", "Screen", "SoftLight", "Src", "SrcAtop", "SrcIn", "SrcOut", "SrcOver", "VividLight", "Xor" ] comp { _flag = "-compose " ++ comp; Option_edit caption labels value = this.Compose labels?value; } compose_widget = Compose "Over"; // FIXME: Some compose mehods (Displace, Distort, Mathematics) need a string. // FIXME: we could use a class that does both -compose and -intensity, for methods LightenIntensity, DarkenIntensity, CopyOpacity, CopyBlack coordinate_widget = class { _vislevel = 3; x = Expression "X" 0; y = Expression "Y" 0; _flag = concat [print x.expr, ",", print y.expr]; }; Distort distort = class Option_string "Distort" [ "Affine", "AffineProjection", "ScaleRotateTranslate", "SRT", "Perspective", "PerspectiveProjection", "BilinearForward", "BilinearReverse", "Polynomial", "Arc", "Polar", "DePolar", "Barrel", "BarrelInverse", "Shepards", "Resize" ] distort { _flag = distort; Option_edit caption labels value = this.Distort labels?value; } distort_widget = Distort "SRT"; Dither dither = class Option_string "Dither" [ "None", "FloydSteinberg", "Riemersma" ] dither { _flag = "-dither " ++ dither; Option_edit caption labels value = this.Dither labels?value; } dither_widget = Dither "FloydSteinberg"; Evaluate eval = class Option_string "Evaluate operation" [ "Abs", "Add", "AddModulus", "And", "Cos", "Cosine", "Divide", "Exp", "Exponential", "GaussianNoise", "ImpulseNoise", "LaplacianNoise", "LeftShift", "Log", "Max", "Mean", "Median", "Min", "MultiplicativeNoise", "Multiply", "Or", "PoissonNoise", "Pow", "RightShift", "Set", "Sin", "Sine", "Subtract", "Sum", "Threshold", "ThresholdBlack", "ThresholdWhite", "UniformNoise", "Xor" ] eval { _flag = "-evaluate " ++ eval; Option_edit caption labels value = this.Evaluate labels?value; } evaluate_widget = Evaluate "Add"; Filter filt = class Option_string "Filter" [ "default", "Bartlett", "Blackman", "Bohman", "Box", "Catrom", "Cosine", "Cubic", "Gaussian", "Hamming", "Hann", "Hermite", "Jinc", "Kaiser", "Lagrange", "Lanczos", "Lanczos2", "Lanczos2Sharp", "LanczosRadius", "LanczosSharp", "Mitchell", "Parzen", "Point", "Quadratic", "Robidoux", "RobidouxSharp", "Sinc", "SincFast", "Spline", "Triangle", "Welch" ] filt { _flag = if filt == "default" then "" else "-filter " ++ filt; Option_edit caption labels value = this.Filter labels?value; } filter_widget = Filter "default"; Function func = class Option_string "Function" [ "Polynomial", "Sinusoid", "Arcsin", "Arctan" ] func { _flag = func; Option_edit caption labels value = this.Function labels?value; } function_widget = Function "Polynomial"; // "Polynomial (a[n], a[n-1], ... a[1], a[0])", // "Sinusoid (freq, phase, amp, bias)", // "Arcsin (width, centre, range, bias)", // "Arctan (slope, centre, range, bias)" Gravity gravity = class Option_string "Gravity" [ "None", "Center", "East", "Forget", "NorthEast", "North", "NorthWest", "SouthEast", "South", "SouthWest", "West", "Static" ] gravity { _flag = "-gravity " ++ gravity; Option_edit caption labels value = this.Gravity labels?value; } gravity_widget = Gravity "Center"; ImageType imagetype = class Option_string "Image type" [ "Bilevel", "ColorSeparation", "ColorSeparationAlpha", "ColorSeparationMatte", "Grayscale", "GrayscaleAlpha", "GrayscaleMatte", "Optimize", "Palette", "PaletteBilevelAlpha", "PaletteBilevelMatte", "PaletteAlpha", "PaletteMatte", "TrueColorAlpha", "TrueColorMatte", "TrueColor" ] imagetype { _flag = "-type " ++ imagetype; Option_edit caption labels value = this.ImageType labels?value; } imagetype_widget = ImageType "TrueColor"; Intensity intensity = class Option_string "Intensity (gray conversion)" [ "Average", "Brightness", "Lightness", "MS", "Rec601Luma", "Rec601Luminance", "Rec709Luma", "Rec709Luminance", "RMS" ] intensity { _flag = "-intensity " ++ intensity, has_intensity = ""; Option_edit caption labels value = this.Intensity labels?value; } intensity_widget = Intensity "Rec709Luminance"; Interpolate interp = class Option_string "Interpolate" [ "default", "Average", "Average4", "Average9", "Average16", "Background", "Bilinear", "Blend", "Integer", "Mesh", "Nearest", "NearestNeighbor", "Spline" ] interp { _flag = if interp == "default" then "" else "-interpolate " ++ interp; Option_edit caption labels value = this.Interpolate labels?value; } interpolate_widget = Interpolate "default"; Kernel kernel = class Option_string "Kernel" [ "Unity", "Gaussian", "DoG", "LoG", "Blur", "Comet", "Binomial", "Laplacian", "Sobel", "FreiChen", "Roberts", "Prewitt", "Compass", "Kirsch", "Diamond", "Square", "Rectangle", "Disk", "Octagon", "Plus", "Cross", "Ring", "Peaks", "Edges", "Corners", "Diagonals", "LineEnds", "LineJunctions", "Ridges", "ConvexHull", "ThinSe", "Skeleton", "Chebyshev", "Manhattan", "Octagonal", "Euclidean" // FIXME: custom kernel ] kernel { _flag = kernel; Option_edit caption labels value = this.Kernel labels?value; } kernel_widget = Kernel "Unity"; ModColSp msp = class Option_string "modulate colorspace" [ "HCL", "HCLp", "HSB", "HSI", "HSL", "HSV", "HWB", "LCH" ] msp { _flag = "-set option:modulate:colorspace " ++ msp; Option_edit caption labels value = this.ModColSp labels?value; } ModColSp_widget = ModColSp "HSL"; MorphMeth morph = class Option_string "Method" [ "Correlate", "Convolve", "Dilate", "Erode", "Close", "Open", "DilateIntensity", "ErodeIntensity", "CloseIntensity", "OpenIntensity", "Smooth", "EdgeOut", "EdgeIn", "Edge", "TopHat", "BottomHat", "HitAndMiss", "Thinning", "Thicken", "Distance", "IterativeDistance" ] morph { _flag = morph; Option_edit caption labels value = this.MorphMeth labels?value; } morphmeth_widget = MorphMeth "Dilate"; Noise noise = class Option_string "Noise" [ "Gaussian", "Impulse", "Laplacian", "Multiplicative", "Poisson", "Random", "Uniform" ] noise { _flag = "+noise " ++ noise; Option_edit caption labels value = this.Noise labels?value; } noise_widget = Noise "Gaussian"; Pattern pattern = class Option_string "Noise" [ // See http://www.imagemagick.org/script/formats.php "bricks", "checkerboard", "circles", "crosshatch", "crosshatch30", "crosshatch45", "gray0", "gray5", "gray10", "gray15", "gray20", "gray25", "gray30", "gray35", "gray40", "gray45", "gray50", "gray55", "gray60", "gray65", "gray70", "gray75", "gray80", "gray85", "gray90", "gray95", "gray100", "hexagons", "horizontal", "horizontal2", "horizontal3", "horizontalsaw", "hs_bdiagonal", "hs_cross", "hs_diagcross", "hs_fdiagonal", "hs_horizontal", "hs_vertical", "left30", "left45", "leftshingle", "octagons", "right30", "right45", "rightshingle", "smallfishscales", "vertical", "vertical2", "vertical3", "verticalbricks", "verticalleftshingle", "verticalrightshingle", "verticalsaw" ] pattern { _flag = "pattern:" ++ pattern; Option_edit caption labels value = this.Pattern labels?value; } pattern_widget = Pattern "bricks"; ResizeType resizet = class Option_string "Resize type" [ "resize", "scale", "sample", "adaptive-resize" ] resizet { _flag = resizet; Option_edit caption labels value = this.ResizeType labels?value; } ResizeType_widget = ResizeType "resize"; Size_widget = class { _vislevel = 3; width = Expression "Width (pixels)" 64; height = Expression "Height (pixels)" 64; _flag = "-size " ++ print width.expr ++ "x" ++ print height.expr; }; StatType statt = class Option_string "Statistic type" [ "Gradient", "Maximum", "Mean", "Median", "Minimum", "Mode", "Nonpeak", "StandardDeviation" ] statt { _flag = statt; Option_edit caption labels value = this.StatType labels?value; } StatType_widget = StatType "Mean"; VirtualPixel vp = class Option_string "Virtual pixel" [ "Background", "Black", "CheckerTile", "Dither", "Edge", "Gray", "HorizontalTile", "HorizontalTileEdge", "Mirror", "None", "Random", "Tile", "Transparent", "VerticalTile", "VerticalTileEdge", "White" ] vp { _flag = "-virtual-pixel " ++ vp; _isBackground = (vp == "Background"); Option_edit caption labels value = this.VirtualPixel labels?value; } VirtualPixel_widget = VirtualPixel "Edge"; VirtualPixelBack_widget = class { virtpix = Magick.VirtualPixel_widget; background = Magick.background_widget; _flag = (if virtpix._isBackground then (background._flag ++ " ") else "") ++ virtpix._flag; } Geometry_widget = class { _vislevel = 3; x = Expression "X" 0; y = Expression "Y" 0; hoffset = Expression "Horizontal offset" 0; voffset = Expression "Vertical offset" 0; _flag = concat [print x.expr, "x", print y.expr, format hoffset, format voffset] { // print an offset ... we want '+' in front of +ve strings format offset = concat ["+", print offset.expr], offset.expr >= 0 = print offset.expr; } }; AnnotGeometry_widget = class { _vislevel = 3; shearX = Expression "shear X (degrees)" 0; shearY = Expression "shear Y (degrees)" 0; hoffset = Expression "Horizontal offset" 0; voffset = Expression "Vertical offset" 0; _flag = concat [print shearX.expr, "x", print shearY.expr, format hoffset, format voffset] { // print an offset ... we want '+' in front of +ve strings format offset = concat ["+", print offset.expr], offset.expr >= 0 = print offset.expr; } }; OffsetGeometry_widget = class { _vislevel = 3; hoffset = Expression "Horizontal offset" 0; voffset = Expression "Vertical offset" 0; _flag = concat [format hoffset, format voffset] { // print an offset ... we want '+' in front of +ve strings format offset = concat ["+", print offset.expr], offset.expr >= 0 = print offset.expr; } }; WhxyGeometry_widget = class { _vislevel = 3; x = Expression "Width" 0; y = Expression "Height" 0; hoffset = Expression "Horizontal offset" 0; voffset = Expression "Vertical offset" 0; _flag = concat [print x.expr, "x", print y.expr, format hoffset, format voffset] { // print an offset ... we want '+' in front of +ve strings format offset = concat ["+", print offset.expr], offset.expr >= 0 = print offset.expr; } }; FrameGeometry_widget = class { _vislevel = 3; x = Expression "Width" 0; y = Expression "Height" 0; outbev = Expression "Outer bevel thickness" 0; inbev = Expression "Inner bevel thickness" 0; _flag = concat [print x.expr, "x", print y.expr, format outbev, format inbev] { // print an offset ... we want '+' in front of +ve strings format offset = concat ["+", print offset.expr], offset.expr >= 0 = print offset.expr; } }; Font_widget = class { _vislevel = 3; family = Option_string "Family" [ "Arial", "ArialBlack", "AvantGarde", "BitstreamCharter", "Bookman", "CenturySchoolbook", "ComicSansMS", "Courier", "CourierNew", "DejaVuSans", "DejaVuSansMono", "DejaVuSerif", "Dingbats", "FreeMono", "FreeSans", "FreeSerif", "Garuda", "Georgia", "Helvetica", "HelveticaNarrow", "Impact", "LiberationMono", "LiberationSans", "LiberationSerif", "NewCenturySchlbk", "Palatino", "Purisa", "Symbol", "Times", "TimesNewRoman", "Ubuntu", "Verdana", "Webdings" ] "Arial"; style = Option_string "Style" [ "Any", "Italic", "Normal", "Oblique" ] "Normal"; weight = Scale "Weight" 1 800 400; size = Scale "Point size" 1 100 12; stretch = Option_string "Stretch" [ "Any", "Condensed", "Expanded", "ExtraCondensed", "ExtraExpanded", "Normal", "SemiCondensed", "SemiExpanded", "UltraCondensed", "UltraExpanded" ] "Normal"; _flag = join_sep " " [ "-family", family.item, "-weight", print weight.value, "-pointsize", print size.value, "-style", style.item, "-stretch", stretch.item]; } } nip2-8.7.0/share/nip2/compat/8.5/_Object.def0000644000175000017500000002600513273071606015123 00000000000000/* Lots of little arg checks. Global for convenience. */ check_any = [(const true), _ "any"]; check_bool = [is_bool, _ "boolean"]; check_real = [is_real, _ "real"]; check_ureal = [is_ureal, _ "unsigned real"]; check_preal = [is_preal, _ "positive real"]; check_list = [is_list, _ "list"]; check_real_list = [is_real_list, _ "list of real"]; check_string = [is_string, _ "string"]; check_string_list = [is_string_list, _ "list of string"]; check_int = [is_int, _ "integer"]; check_uint = [is_uint, _ "unsigned integer"]; check_pint = [is_pint, _ "positive integer"]; check_matrix = [is_matrix, _ "rectangular array of real"]; check_matrix_display = [Matrix_display.is_display, _ "0|1|2|3"]; check_image = [is_image, _ "image"]; check_xy_list = [is_xy_list, _ "list of form [[1, 2], [3, 4], [5, 6], ...]"]; check_instance name = [is_instanceof name, name]; check_Image = check_instance "Image"; check_Matrix = [is_Matrix, _ "Matrix"]; check_colour_space = [is_colour_space, join_sep "|" Image_type.colour_spaces.names]; check_rectangular = [is_rectangular, _ "rectangular [[*]]"]; check_Guide = [is_Guide, _ "HGuide|VGuide"]; check_Colour = check_instance (_ "Colour"); check_Mark = check_instance (_ "Mark"); /* Check a set of args to a class. Two members to look at: _check_args and * _check_all. * * - each line in _check_args is [arg, "arg name", [test_fn, "arg type"]] * same number of lines as there are args * * stuff like "arg 2 must be real" * * - each line in _check_all is [test, "description"] * any number of lines * * stuff like "to must be greater than from" * * generate an error dialog with a helpful message on failure. * * Have as a separate function to try to keep the size of _Object down. */ check_args x = error message, badargs != [] || badalls != [] = x { argcheck = x._check_args; allcheck = x._check_all; // indent string indent = " "; // test for a condition in a check line fails test_fail x = ! x?0; // set of failed argcheck indexes badargs = map (extract 1) (filter test_fail (zip2 (map testarg argcheck) [0..])) { testarg x = x?2?0 x?0; } // set of failed allcheck indexes badalls = map (extract 1) (filter test_fail (zip2 (map hd allcheck) [0..])); // the error message message = _ "bad properties for " ++ "\"" ++ x.name ++ "\"\n" ++ argmsg ++ allmsg ++ "\n" ++ _ "where" ++ "\n" ++ arg_types ++ extra; // make the failed argcheck messages ... eg. ""value" should be // real, you passed " etc. argmsg = concat (map fmt badargs) { fmt n = indent ++ "\"" ++ argcheck?n?1 ++ "\"" ++ _ " should be of type " ++ argcheck?n?2?1 ++ ", " ++ _ "you passed" ++ ":\n" ++ indent ++ indent ++ print argcheck?n?0 ++ "\n"; } // make the failed allcheck messages ... eg "condition failed: // x < y" ... don't make a message if any typechecks have // failed, as we'll probably error horribly allmsg = [], badargs != [] = concat (map fmt badalls) ++ _ "you passed" ++ "\n" ++ concat (map fmt_arg argcheck) { fmt n = _ "condition failed" ++ ": " ++ allcheck?n?1 ++ "\n"; fmt_arg l = indent ++ l?1 ++ " = " ++ print l?0 ++ "\n"; } // make arg type notes arg_types = join_sep "\n" (map fmt argcheck) { fmt l = indent ++ l?1 ++ " is of type " ++ l?2?1; } // extra bit at the bottom, if we have any conditions extra = [], allcheck == [] = "\n" ++ _ "and" ++ "\n" ++ all_desc; // make a list of all the allcheck descriptions, with a few // spaces in front all_desc_list = map (join indent @ extract 1) allcheck; // join em up to make a set of condition notes all_desc = join_sep "\n" all_desc_list; } /* Operator overloading stuff. */ Operator_type = class { ARITHMETIC = 1; // eg. add RELATIONAL = 2; // eg. less COMPOUND = 3; // eg. max/mean/etc. COMPOUND_REWRAP = 4; // eg. transpose } Operator op_name fn type symmetric = class { } /* Form the converse of an Operator. */ oo_converse op = Operator (converse_name op.op_name) (converse op.fn) op.type op.symmetric { converse_name x = init x, last x == last "'" = x ++ "'"; } /* Given an operator name, look up the definition. */ oo_binary_lookup op_name = matches?0, matches != [] = error (_ "unknown binary operator" ++ ": " ++ print op_name) { operator_table = [ Operator "add" add Operator_type.ARITHMETIC true, Operator "subtract" subtract Operator_type.ARITHMETIC false, Operator "remainder" remainder Operator_type.ARITHMETIC false, Operator "power" power Operator_type.ARITHMETIC false, Operator "subscript" subscript Operator_type.ARITHMETIC false, Operator "left_shift" left_shift Operator_type.ARITHMETIC false, Operator "right_shift" right_shift Operator_type.ARITHMETIC false, Operator "divide" divide Operator_type.ARITHMETIC false, Operator "join" join Operator_type.ARITHMETIC false, Operator "multiply" multiply Operator_type.ARITHMETIC true, Operator "logical_and" logical_and Operator_type.ARITHMETIC true, Operator "logical_or" logical_or Operator_type.ARITHMETIC true, Operator "bitwise_and" bitwise_and Operator_type.ARITHMETIC true, Operator "bitwise_or" bitwise_or Operator_type.ARITHMETIC true, Operator "eor" eor Operator_type.ARITHMETIC true, Operator "comma" comma Operator_type.ARITHMETIC false, Operator "if_then_else" if_then_else Operator_type.ARITHMETIC false, Operator "equal" equal Operator_type.RELATIONAL true, Operator "not_equal" not_equal Operator_type.RELATIONAL true, Operator "less" less Operator_type.RELATIONAL false, Operator "less_equal" less_equal Operator_type.RELATIONAL false ]; matches = filter test_name operator_table; test_name x = x.op_name == op_name; } /* Given an operator name, look up a function that implements that * operator. */ oo_unary_lookup op_name = matches?0, matches != [] = error (_ "unknown unary operator" ++ ": " ++ print op_name) { operator_table = [ /* Operators. */ Operator "cast_signed_char" cast_signed_char Operator_type.ARITHMETIC false, Operator "cast_unsigned_char" cast_unsigned_char Operator_type.ARITHMETIC false, Operator "cast_signed_short" cast_signed_short Operator_type.ARITHMETIC false, Operator "cast_unsigned_short" cast_unsigned_short Operator_type.ARITHMETIC false, Operator "cast_signed_int" cast_signed_int Operator_type.ARITHMETIC false, Operator "cast_unsigned_int" cast_unsigned_int Operator_type.ARITHMETIC false, Operator "cast_float" cast_float Operator_type.ARITHMETIC false, Operator "cast_double" cast_double Operator_type.ARITHMETIC false, Operator "cast_complex" cast_complex Operator_type.ARITHMETIC false, Operator "cast_double_complex" cast_double_complex Operator_type.ARITHMETIC false, Operator "unary_minus" unary_minus Operator_type.ARITHMETIC false, Operator "negate" negate Operator_type.RELATIONAL false, Operator "complement" complement Operator_type.ARITHMETIC false, Operator "unary_plus" unary_plus Operator_type.ARITHMETIC false, /* Built in projections. */ Operator "re" re Operator_type.ARITHMETIC false, Operator "im" im Operator_type.ARITHMETIC false, Operator "hd" hd Operator_type.ARITHMETIC false, Operator "tl" tl Operator_type.ARITHMETIC false, /* Maths builtins. */ Operator "sin" sin Operator_type.ARITHMETIC false, Operator "cos" cos Operator_type.ARITHMETIC false, Operator "tan" tan Operator_type.ARITHMETIC false, Operator "asin" asin Operator_type.ARITHMETIC false, Operator "acos" acos Operator_type.ARITHMETIC false, Operator "atan" atan Operator_type.ARITHMETIC false, Operator "log" log Operator_type.ARITHMETIC false, Operator "log10" log10 Operator_type.ARITHMETIC false, Operator "exp" exp Operator_type.ARITHMETIC false, Operator "exp10" exp10 Operator_type.ARITHMETIC false, Operator "ceil" ceil Operator_type.ARITHMETIC false, Operator "floor" floor Operator_type.ARITHMETIC false ]; matches = filter test_name operator_table; test_name x = x.op_name == op_name; } /* Find the matching methods in a method table. */ oo_method_lookup table = map (extract 0) (filter (extract 1) table); /* A binary op: a is a class, b may be a class ... eg. "add" a b two obvious ways to find a method: - a.oo_binary_search "add" (+) b - b.oo_binary_search "add'" (converse (+)) a, is_class b if these fail but op is a symmetric operator (eg. a + b == b + a), we can also try reversing the args - a.oo_binary_search "add'" (converse (+)) b - b.oo_binary_search "add" (+) a, is_class b if those fail as well, but this is ==, do pointer equals as a fallback */ oo_binary_function op a b = matches1?0, matches1 != [] = matches2?0, is_class b && matches2 != [] = matches3?0, op.symmetric && matches3 != [] = matches4?0, op.symmetric && is_class b && matches4 != [] = pointer_equal a b, op.op_name == "equal" || op.op_name == "equal'" = not_pointer_equal a b, op.op_name == "not_equal" || op.op_name == "not_equal'" = error (_ "No method found for binary operator." ++ "\n" ++ _ "left" ++ " = " ++ print a ++ "\n" ++ _ "operator" ++ " = " ++ op.op_name ++ "\n" ++ _ "right" ++ " = " ++ print b) { matches1 = oo_method_lookup (a.oo_binary_table op b); matches2 = oo_method_lookup (b.oo_binary_table (oo_converse op) a); matches3 = oo_method_lookup (a.oo_binary_table (oo_converse op) b); matches4 = oo_method_lookup (b.oo_binary_table op a); } /* A binary op: a is not a class, b is a class ... eg. "subtract" a b only one way to find a method: - b.oo_binary_search "subtract'" (converse (-)) a if this fails but op is a symmetric operator (eg. a + b == b + a), we can try reversing the args - b.oo_binary_search "add" (+) a, is_class b if that fails as well, but this is ==, do pointer equals as a fallback */ oo_binary'_function op a b = matches1?0, matches1 != [] = matches2?0, op.symmetric && matches2 != [] = pointer_equal a b, op.op_name == "equal" || op.op_name == "equal'" = not_pointer_equal a b, op.op_name == "not_equal" || op.op_name == "not_equal'" = error (_ "No method found for binary operator." ++ "\n" ++ _ "left" ++ " = " ++ print a ++ "\n" ++ _ "operator" ++ " = " ++ op.op_name ++ "\n" ++ _ "right" ++ " = " ++ print b) { matches1 = oo_method_lookup (b.oo_binary_table (oo_converse op) a); matches2 = oo_method_lookup (b.oo_binary_table op a); } oo_unary_function op x = matches?0, matches != [] = error (_ "No method found for unary operator." ++ "\n" ++ _ "operator" ++ " = " ++ op.op_name ++ "\n" ++ _ "argument" ++ " = " ++ print x) { matches = oo_method_lookup (x.oo_unary_table op); } /* Base class for nip's built-in classes ... base check function, base * operator overload functions. */ _Object = class { check = check_args this; // these should always be defined _check_args = []; _check_all = []; /* Operator overloading stuff. */ oo_binary op x = oo_binary_function (oo_binary_lookup op) this x; oo_binary' op x = oo_binary'_function (oo_binary_lookup op) x this; oo_unary op = oo_unary_function (oo_unary_lookup op) this; oo_binary_table op x = []; oo_unary_table op = []; } nip2-8.7.0/share/nip2/compat/8.5/Magick.def0000644000175000017500000014112713273071606014754 00000000000000/* ImageMagick operations edited by Alan Gibson (aka "snibgo"; snibgo at earthling dot net). 1-Apr-2014 Minor corrections to Geometry_widget and Alpha. Added loads of widgets and Menuactions. Not fully tested. 5-Apr-2014 Many more menu actions. Reorganised Magick menu. 10-Apr-2014 Many more menu actions. 11-Apr-2014 jcupitt Split to separate Magick.def 13-Apr-2014 snibgo Put "new image" items into sub-menu. New class VirtualPixlBack. 17-Apr-2014 snibgo Many small changes. A few new menu options. Created sub-menu for multi-input operations. 3-May-2014 jcupitt Put quotes around ( in shadow to help unix Last update: 17-Apr-2014. For details of ImageMagick operations, see http://www.imagemagick.org/script/command-line-options.php etc. */ // We don't need Noop. /*=== Magick_noop_item = class Menuaction "_Noop" "no operation" { action x = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "\"%s\"" ]; _result = Magick.system command x; } } ===*/ Magick_testPar_item = class Menuaction "_TestPar" "no operation" { action x = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "( +clone ) +append ", "\"%s\"" ]; _result = Magick.system command x; } } /* Removed Read_item and Write_item, much better to use nip2 load/save image. * Plus they can load all libMagick formats anyway. */ // Put "new image" items into sub-menu Magick_NewImageMenu_item = class Menupullright "_New image" "make a new image" { Magick_newcanvas_item = class Menuaction "_Solid colour" "make image of solid colour" { action = class _result { _vislevel = 3; size = Magick.Size_widget; colour = Magick.generalcol_widget; command = Magick.command [ size._flag, "\"canvas:" ++ colour._flag ++ "\"", "\"%s\"" ]; _result = Magick.system0 command; } } Magick_builtin_item = class Menuaction "_Built-in image" "create a built-in image" { action = class _result { _vislevel = 3; builtin = Magick.builtin_widget; command = Magick.command [ builtin._flag, "\"%s\"" ]; _result = Magick.system0 command; } } Magick_gradient_item = class Menuaction "_Gradient" "make a linear gradient between two colours" { action = class _result { _vislevel = 3; size = Magick.Size_widget; topColour = Magick.generalcol_widget; bottomColour = Magick.generalcol_widget; command = Magick.command [ size._flag, concat ["\"gradient:", topColour._flag, "-", bottomColour._flag, "\""], "\"%s\"" ]; _result = Magick.system0 command; } } Magick_hald_item = class Menuaction "_Hald-clut image" "create an identity hald-clut image" { action = class _result { _vislevel = 3; order = Expression "order" 8; command = Magick.command [ "hald:" ++ print order.expr, "\"%s\"" ]; _result = Magick.system0 command; } } Magick_pattern_item = class Menuaction "_Pattern" "create pattern" { action = class _result { _vislevel = 3; size = Magick.Size_widget; pattern = Magick.pattern_widget; command = Magick.command [ size._flag, pattern._flag, "\"%s\"" ]; _result = Magick.system0 command; } } Magick_plasma_item = class Menuaction "_Plasma image" "create plasma image" { action = class _result { _vislevel = 3; size = Magick.Size_widget; // FIXME? ColourA-ColourB. // FIXME? Allow plasma:fractal? command = Magick.command [ size._flag, "plasma:", "\"%s\"" ]; _result = Magick.system0 command; } } Magick_radialgradient_item = class Menuaction "_Radial gradient" "make a radial gradient between two colours" { action = class _result { _vislevel = 3; size = Magick.Size_widget; innerColour = Magick.generalcol_widget; outerColour = Magick.generalcol_widget; command = Magick.command [ size._flag, concat ["\"radial-gradient:", innerColour._flag, "-", outerColour._flag, "\""], "\"%s\"" ]; _result = Magick.system0 command; } } } // end Magick_NewImageMenu_item Magick_MultiMenu_item = class Menupullright "_Multiple inputs" "make an image from multiple images" { Magick_composite_item = class Menuaction "_Composite" "composite two images (without mask)" { action x y = class _result { _vislevel = 3; method = Magick.compose_widget; offsets = Magick.OffsetGeometry_widget; gravity = Magick.gravity_widget; command = Magick.command [ "\"%s\"", "\"%s\"", "-geometry", offsets._flag, gravity._flag, method._flag, "-composite", "\"%s\"" ]; _result = Magick.system2 command x y; } } Magick_compositeMask_item = class Menuaction "_Composite masked" "composite two images (with mask)" { action x y z = class _result { _vislevel = 3; method = Magick.compose_widget; offsets = Magick.OffsetGeometry_widget; gravity = Magick.gravity_widget; command = Magick.command [ "\"%s\"", "\"%s\"", "\"%s\"", "-geometry", offsets._flag, gravity._flag, method._flag, "-composite", "\"%s\"" ]; _result = Magick.system3 command x y z; } } // FIXME: other operations like remap that take another image as arguments are: // mask (pointless?), texture, tile (pointless?) // FIXME: operations that take a filename that isn't an image: // cdl, profile Magick_clut_item = class Menuaction "_Clut" "replace values using second image as colour look-up table" { action x y = class _result { _vislevel = 3; // FIXME: uses -intensity "when mapping greyscale CLUT image to alpha channel if set by -channels" command = Magick.command [ "\"%s\"", "\"%s\"", "-clut", "\"%s\"" ]; _result = Magick.system2 command x y; } } Magick_haldclut_item = class Menuaction "_Hald clut" "replace values using second image as Hald colour look-up table" { action x y = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "\"%s\"", "-hald-clut", "\"%s\"" ]; _result = Magick.system2 command x y; } } // Encipher and decipher: key files can be text or image files. Magick_encipher_item = class Menuaction "_Encipher/Decipher" "encipher or decipher an image image" { action x = class _result { _vislevel = 3; pathname = Pathname "Read key file" ""; isDecipher = Toggle "Decipher" false; command = Magick.command [ "\"%s\"", if pathname.value == "" then "" else ( ( if isDecipher then "-decipher " else "-encipher ") ++ ( "\"" ++ pathname.value ++ "\"" ) ), "\"%s\"" ]; _result = Magick.system command x; } } Magick_profile_item = class Menuaction "_Profile" "assigns/applies an ICC profile" { action x = class _result { _vislevel = 3; pathname1 = Pathname "Read profile file" ""; pathname2 = Pathname "Read profile file" ""; command = Magick.command [ "\"%s\"", if pathname1.value == "" then "" else ( "-profile " ++ "\"" ++ pathname1.value ++ "\""), if pathname2.value == "" then "" else ( "-profile " ++ "\"" ++ pathname2.value ++ "\""), "\"%s\"" ]; _result = Magick.system command x; } } Magick_remap_item = class Menuaction "_Remap" "reduce colours to those in another image" { action x y = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "-remap", "\"%s\"", "\"%s\"" ]; _result = Magick.system2 command x y; } } } // end Magick_MultiMenu_item Magick_image_type_item = class Menuaction "_Image Type" "change image type" { action x = class _result { _vislevel = 3; imagetype = Magick.imagetype_widget; command = Magick.command [ "\"%s\"", imagetype._flag, "\"%s\"" ]; _result = Magick.system command x; } } sep2 = Menuseparator; Magick_alpha_item = class Menuaction "_Alpha" "add/remove alpha channel" { action x = class _result { _vislevel = 3; alpha = Magick.alpha_widget; command = Magick.command [ "\"%s\"", alpha._flag, "\"%s\"" ]; _result = Magick.system command x; } } Magick_annotate_item = class Menuaction "_Annotate" "add text annotation" { action x = class _result { _vislevel = 3; text = Magick.text_widget; font = Magick.Font_widget; geometry = Magick.AnnotGeometry_widget; gravity = Magick.gravity_widget; foreground = Magick.foreground_widget; undercol = Magick.undercol_widget; antialias = Magick.antialias_widget; command = Magick.command [ "\"%s\"", font._flag, antialias._flag, gravity._flag, foreground._flag, undercol._flag, "-annotate", geometry._flag, "\"" ++ text.value ++ "\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_autoGamma_item = class Menuaction "_AutoGamma" "automatic gamma" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; command = Magick.command [ "\"%s\"", channels._flag, "-auto-gamma", "\"%s\"" ]; _result = Magick.system command x; } } Magick_autoLevel_item = class Menuaction "_AutoLevel" "automatic level" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; command = Magick.command [ "\"%s\"", channels._flag, "-auto-level", "\"%s\"" ]; _result = Magick.system command x; } } Magick_blurSharpMenu_item = class Menupullright "_Blur/Sharpen" "blur and sharpen" { Magick_adaptive_blur_item = class Menuaction "_Adaptive Blur" "blur less near edges" { action x = class _result { _vislevel = 3; intensity = Magick.intensity_widget; radius = Magick.blur_rad_widget; sigma = Magick.sigma_widget; channels = Magick.channels_widget; // note: adaptive-blur doesn't regard VP. command = Magick.command [ "\"%s\"", intensity._flag, channels._flag, "-adaptive-blur", print radius.value ++ "x" ++ print sigma.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_blur_item = class Menuaction "_Blur" "blur" { action x = class _result { _vislevel = 3; radius = Magick.blur_rad_widget; sigma = Magick.sigma_widget; channels = Magick.channels_widget; virtpixback = Magick.VirtualPixelBack_widget; command = Magick.command [ "\"%s\"", virtpixback._flag, channels._flag, "-blur", print radius.value ++ "x" ++ print sigma.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_gaussianBlur_item = class Menuaction "_Gaussian Blur" "blur with a Gaussian operator" { action x = class _result { _vislevel = 3; radius = Magick.blur_rad_widget; sigma = Magick.sigma_widget; channels = Magick.channels_widget; virtpixback = Magick.VirtualPixelBack_widget; command = Magick.command [ "\"%s\"", virtpixback._flag, channels._flag, "-gaussian-blur", print radius.value ++ "x" ++ print sigma.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_motionBlur_item = class Menuaction "_Motion Blur" "simulate motion blur" { action x = class _result { _vislevel = 3; radius = Magick.blur_rad_widget; sigma = Magick.sigma_widget; angle = Scale "angle" (-360) 360 0; channels = Magick.ch_widget; virtpixback = Magick.VirtualPixelBack_widget; command = Magick.command [ "\"%s\"", virtpixback._flag, channels._flag, "-motion-blur", print radius.value ++ "x" ++ print sigma.value ++ "+" ++ print angle.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_rotationalBlur_item = class Menuaction "_RotationalBlur" "blur around the centre" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; virtpixback = Magick.VirtualPixelBack_widget; angle = Scale "angle (degrees)" (-360) 360 20; command = Magick.command [ "\"%s\"", virtpixback._flag, channels._flag, "-radial-blur", print angle.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_selectiveBlur_item = class Menuaction "_Selective Blur" "blur where contrast is less than or equal to threshold" { action x = class _result { _vislevel = 3; intensity = Magick.intensity_widget; radius = Magick.blur_rad_widget; sigma = Magick.sigma_widget; threshold = Scale "Threshold (percent)" 0 100 50; channels = Magick.channels_widget; virtpixback = Magick.VirtualPixelBack_widget; command = Magick.command [ "\"%s\"", intensity._flag, virtpixback._flag, channels._flag, "-selective-blur", print radius.value ++ "x" ++ print sigma.value ++ "+" ++ print threshold.value ++ "%%", "\"%s\"" ]; _result = Magick.system command x; } } sep1 = Menuseparator; Magick_adaptive_sharpen_item = class Menuaction "_Adaptive Sharpen" "sharpen more near edges" { action x = class _result { _vislevel = 3; intensity = Magick.intensity_widget; radius = Magick.blur_rad_widget; sigma = Magick.sigma_widget; command = Magick.command [ "\"%s\"", intensity._flag, "-adaptive-sharpen", print radius.value ++ "x" ++ print sigma.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_sharpen_item = class Menuaction "_Sharpen" "sharpen" { action x = class _result { _vislevel = 3; radius = Magick.blur_rad_widget; sigma = Magick.sigma_widget; channels = Magick.channels_widget; virtpixback = Magick.VirtualPixelBack_widget; command = Magick.command [ "\"%s\"", virtpixback._flag, channels._flag, "-sharpen", print radius.value ++ "x" ++ print sigma.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_unsharpen_item = class Menuaction "_Unsharp" "sharpen with unsharp mask" { action x = class _result { _vislevel = 3; radius = Magick.blur_rad_widget; sigma = Magick.sigma_widget; channels = Magick.channels_widget; gain = Scale "Gain" (-10) 10 1; threshold = Scale "Threshold" 0 1 0.05; virtpixback = Magick.VirtualPixelBack_widget; command = Magick.command [ "\"%s\"", virtpixback._flag, channels._flag, "-unsharp", print radius.value ++ "x" ++ print sigma.value ++ "+" ++ print gain.value ++ "+" ++ print threshold.value, "\"%s\"" ]; _result = Magick.system command x; } } } // end BlurSharpMenu_item Magick_border_item = class Menuaction "_Border" "add border of given colour" { action x = class _result { _vislevel = 3; compose = Magick.compose_widget; width = Expression "Width" 3; bordercol = Magick.bordercol_widget; command = Magick.command [ "\"%s\"", compose._flag, bordercol._flag, "-border", print width.expr, "\"%s\"" ]; _result = Magick.system command x; } } Magick_brightCont_item = class Menuaction "_Brightness-contrast" "adjust the brightness and/or contrast" { action x = class _result { _vislevel = 3; bri = Scale "brightness" (-100) 100 0; con = Scale "contrast" (-100) 100 0; channels = Magick.channels_widget; command = Magick.command [ "\"%s\"", channels._flag, "-brightness-contrast", print bri.value ++ "x" ++ print con.value, "\"%s\"" ]; _result = Magick.system command x; } } // Note: canny requires ImageMagick 6.8.9-0 or later. Magick_canny_item = class Menuaction "_Canny" "detect a wide range of edges" { action x = class _result { _vislevel = 3; radius = Magick.blur_rad_widget; sigma = Magick.sigma_widget; lowPc = Scale "lower percent" 0 100 10; highPc = Scale "lower percent" 0 100 10; command = Magick.command [ "\"%s\"", "-canny", concat ["\"", print radius.value ++ "x" ++ print sigma.value ++ "+" ++ print lowPc.value ++ "%%+" ++ print highPc.value ++ "%%" ++ "\"" ], "\"%s\"" ]; _result = Magick.system command x; } } Magick_charcoal_item = class Menuaction "_Charcoal" "simulate a charcoal drawing" { action x = class _result { _vislevel = 3; intensity = Magick.intensity_widget; factor = Scale "factor" 0 50 1; command = Magick.command [ "\"%s\"", intensity._flag, "-charcoal", print factor.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_chop_item = class Menuaction "_Chop" "remove pixels from the interior" { action x = class _result { _vislevel = 3; gravity = Magick.gravity_widget; geometry = Magick.WhxyGeometry_widget; command = Magick.command [ "\"%s\"", gravity._flag, "-chop", geometry._flag, "\"%s\"" ]; _result = Magick.system command x; } } Magick_colorize_item = class Menuaction "_Colorize" "colorize by given amount" { action x = class _result { _vislevel = 3; foreground = Magick.foreground_widget; val = Scale "value" 0 100 100; command = Magick.command [ "\"%s\"", foreground._flag, "-colorize", print val.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_colors_item = class Menuaction "_Colors" "reduce number of colors" { action x = class _result { _vislevel = 3; treedepth = Expression "Treedepth" 8; dither = Magick.dither_widget; quantize = Magick.colorspace_widget; colors = Expression "Colours" 3; command = Magick.command [ "\"%s\"", "-quantize", quantize._flag, "-treedepth", print treedepth.expr, dither._flag, "-colors", print colors.expr, "\"%s\"" ]; _result = Magick.system command x; } } // FIXME: color-matrix? Magick_colorspace_item = class Menuaction "_Colourspace" "convert to arbitrary colourspace" { action x = class _result { _vislevel = 3; colsp = Magick.colorspace_widget; command = Magick.command [ "\"%s\"", "-colorspace", colsp._flag, "\"%s\"" ]; _result = Magick.system command x; } } Magick_colorspaceGray_item = class Menuaction "_Colourspace gray" "convert to gray using given intensity method" { action x = class _result { _vislevel = 3; intensity = Magick.intensity_widget; command = Magick.command [ "\"%s\"", intensity._flag, "-colorspace gray", "\"%s\"" ]; _result = Magick.system command x; } } Magick_contrast_item = class Menuaction "_Contrast" "increase or reduce the contrast" { action x = class _result { _vislevel = 3; isReduce = Toggle "reduce contrast" false; command = Magick.command [ "\"%s\"", (if isReduce then "+" else "-") ++ "contrast", "\"%s\"" ]; _result = Magick.system command x; } } Magick_contrastStretch_item = class Menuaction "_Contrast stretch" "stretches tones, making some black/white" { action x = class _result { _vislevel = 3; intensity = Magick.intensity_widget; channels = Magick.channels_widget; blk = Scale "percent to make black" 0 100 0; wht = Scale "percent to make white" 0 100 0; command = Magick.command [ "\"%s\"", intensity._flag, channels._flag, "-contrast-stretch", "\"" ++ print blk.value ++ "x" ++ print wht.value ++ "%%\"", "\"%s\"" ]; _result = Magick.system command x; } } // FIXME: convolve (bias, kernel) Magick_crop_item = class Menuaction "_Crop" "cut out a rectangular region" { action x = class _result { _vislevel = 3; gravity = Magick.gravity_widget; geometry = Magick.WhxyGeometry_widget; command = Magick.command [ "\"%s\"", gravity._flag, "-crop", geometry._flag, "+repage", "\"%s\"" ]; _result = Magick.system command x; } } Magick_deskew_item = class Menuaction "_Deskew" "straighten the image" { action x = class _result { _vislevel = 3; threshold = Scale "Threshold (percent)" 0 100 80; // FIXME: toggle auto-crop? command = Magick.command [ "\"%s\"", "-deskew", "\"" ++ print threshold.value ++ "%%\"", "+repage", "\"%s\"" ]; _result = Magick.system command x; } } Magick_despeckle_item = class Menuaction "_Despeckle" "reduce the speckles" { action x = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "-despeckle", "\"%s\"" ]; _result = Magick.system command x; } } Magick_distort_item = class Menuaction "_Distort" "distort using a method and arguments" { action x = class _result { _vislevel = 3; virtpixback = Magick.VirtualPixelBack_widget; distort = Magick.distort_widget; args = String "Arguments" "1,0"; isPlus = Toggle "Extend to show entire image" false; command = Magick.command [ "\"%s\"", virtpixback._flag, (if isPlus then "+" else "-") ++ "distort", distort._flag, args.value, "+repage", "\"%s\"" ]; _result = Magick.system command x; } } Magick_draw_item = class Menuaction "_Draw" "annotate with one or more graphic primitives" { action x = class _result { _vislevel = 3; foreground = Magick.foreground_widget; args = String "Arguments" "line 0,0 9,9 rectangle 10,10 20,20"; command = Magick.command [ "\"%s\"", foreground._flag, "-draw", concat ["\"", args.value, "\""], "\"%s\"" ]; _result = Magick.system command x; } } Magick_edge_item = class Menuaction "_Edge" "detect edges" { action x = class _result { _vislevel = 3; rad = Expression "Radius" 3; command = Magick.command [ "\"%s\"", "-edge", print rad.expr, "\"%s\"" ]; _result = Magick.system command x; } } Magick_emboss_item = class Menuaction "_Emboss" "emboss" { action x = class _result { _vislevel = 3; rad = Expression "Radius" 3; command = Magick.command [ "\"%s\"", "-emboss", print rad.expr, "\"%s\"" ]; _result = Magick.system command x; } } Magick_enhance_item = class Menuaction "_Enhance" "enhance a noisy image" { action x = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "-enhance", "\"%s\"" ]; _result = Magick.system command x; } } Magick_equalize_item = class Menuaction "_Equalize" "equalize the histogram" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; command = Magick.command [ "\"%s\"", channels._flag, "-equalize", "\"%s\"" ]; _result = Magick.system command x; } } Magick_evaluate_item = class Menuaction "_Evaluate" "evaluate an expression on each pixel channel" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; operation = Magick.evaluate_widget; val = Expression "value" 5; isPc = Toggle "Value is percent" false; command = Magick.command [ "\"%s\"", channels._flag, operation._flag, print val.expr ++ if isPc then "%%" else "", "\"%s\"" ]; _result = Magick.system command x; } } Magick_extent_item = class Menuaction "_Extent" "set the image size and offset" { action x = class _result { _vislevel = 3; background = Magick.background_widget; compose = Magick.compose_widget; gravity = Magick.gravity_widget; geometry = Magick.WhxyGeometry_widget; command = Magick.command [ "\"%s\"", compose._flag, background._flag, gravity._flag, "-extent", geometry._flag, "\"%s\"" ]; _result = Magick.system command x; } } Magick_FlipFlopMenu_item = class Menupullright "_Flip/flop" "flip/flop/transverse/transpose" { Magick_flip_item = class Menuaction "_Flip vertically" "mirror upside-down" { action x = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "-flip", "\"%s\"" ]; _result = Magick.system command x; } } Magick_flop_item = class Menuaction "_Flop horizontally" "mirror left-right" { action x = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "-flop", "\"%s\"" ]; _result = Magick.system command x; } } Magick_transpose_item = class Menuaction "_Transpose" "mirror along the top-left to bottom-right diagonal" { action x = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "-transpose +repage", "\"%s\"" ]; _result = Magick.system command x; } } Magick_transverse_item = class Menuaction "_Transverse" "mirror along the bottom-left to top-right diagonal" { action x = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "-transverse +repage", "\"%s\"" ]; _result = Magick.system command x; } } } // end Magick_FlipFlopMenu_item Magick_floodfill_item = class Menuaction "_Floodfill" "recolour neighbours that match" { action x = class _result { _vislevel = 3; foreground = Magick.foreground_widget; fuzz = Magick.fuzz_widget; coordinate = Magick.coordinate_widget; // -draw "color x,y floodfill" command = Magick.command [ "\"%s\"", foreground._flag, "-fuzz", "\"" ++ print fuzz.value ++ "%%\"", "-draw \" color", coordinate._flag, "floodfill \"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_frame_item = class Menuaction "_Frame" "surround with border or beveled frame" { action x = class _result { _vislevel = 3; border = Magick.bordercol_widget; compose = Magick.compose_widget; matte = Magick.mattecol_widget; geometry = Magick.FrameGeometry_widget; command = Magick.command [ "\"%s\"", compose._flag, border._flag, matte._flag, "-frame", geometry._flag, "\"%s\"" ]; _result = Magick.system command x; } } Magick_function_item = class Menuaction "_Function" "evaluate a function on each pixel channel" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; function = Magick.function_widget; // FIXME: explain values; use sensible defaults. values = String "values" "0,0,0,0"; command = Magick.command [ "\"%s\"", channels._flag, "-function", function._flag, values.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_fx_item = class Menuaction "_Fx" "apply a mathematical expression" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; interpolate = Magick.interpolate_widget; virtpixback = Magick.VirtualPixelBack_widget; args = String "Expression" "u*1/2"; command = Magick.command [ "\"%s\"", channels._flag, interpolate._flag, virtpixback._flag, "-fx", concat ["\"", args.value, "\""], "\"%s\"" ]; _result = Magick.system command x; } } Magick_gamma_item = class Menuaction "_Gamma" "apply a gamma correction" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; gamma = Magick.gamma_widget; command = Magick.command [ "\"%s\"", channels._flag, "-gamma", print gamma.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_gradient_item = class Menuaction "_Gradient" "apply a linear gradient" { action x = class _result { _vislevel = 3; colourA = Magick.generalcol_widget; colourB = Magick.generalcol_widget; position = Option "colourA is at" [ "top", "bottom", "left", "right", "top-left", "top-right", "bottom-left", "bottom-right"] 0; _baryArg = concat ["0,0,", colourA._flag, " 0,%%[fx:h-1],", colourB._flag], position.value == 0 = concat ["0,0,", colourB._flag, " 0,%%[fx:h-1],", colourA._flag], position.value == 1 = concat ["0,0,", colourA._flag, " %%[fx:w-1],0,", colourB._flag], position.value == 2 = concat ["0,0,", colourB._flag, " %%[fx:w-1],0,", colourA._flag], position.value == 3 = concat ["0,0,", colourA._flag, " %%[fx:w-1],%%[fx:h-1],", colourB._flag], position.value == 4 = concat ["%%[fx:w-1],0,", colourA._flag, " 0,%%[fx:h-1],", colourB._flag], position.value == 5 = concat ["%%[fx:w-1],0,", colourB._flag, " 0,%%[fx:h-1],", colourA._flag], position.value == 6 = concat ["0,0,", colourB._flag, " %%[fx:w-1],%%[fx:h-1],", colourA._flag], position.value == 7 = "dunno"; command = Magick.command [ "\"%s\"", "-sparse-color barycentric \"" ++ _baryArg ++ "\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_gradientCorn_item = class Menuaction "_Gradient corners" "apply a bilinear gradient between the corners" { action x = class _result { _vislevel = 3; colour_top_left = Magick.generalcol_widget; colour_top_right = Magick.generalcol_widget; colour_bottom_left = Magick.generalcol_widget; colour_bottom_right = Magick.generalcol_widget; command = Magick.command [ "\"%s\"", "-sparse-color bilinear \"" ++ "0,0," ++ colour_top_left._flag ++ ",%%[fx:w-1],0" ++ colour_top_right._flag ++ ",0,%%[fx:h-1]" ++ colour_bottom_left._flag ++ ",%%[fx:w-1],%%[fx:h-1]" ++ colour_bottom_right._flag ++ "\"", "+depth", "\"%s\"" ]; _result = Magick.system command x; } } Magick_histogram_item = class Menuaction "_Histogram" "make a histogram image" { action x = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "-define histogram:unique-colors=false histogram:" ++ "\"%s\"" ]; _result = Magick.system command x; } } Magick_implode_item = class Menuaction "_Implode" "implode pixels about the center" { action x = class _result { _vislevel = 3; factor = Scale "factor" 0 20 1; interpolate = Magick.interpolate_widget; // FIXME: virtual-pixel? command = Magick.command [ "\"%s\"", interpolate._flag, "-implode", print factor.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_level_item = class Menuaction "_Level" "adjust the level of channels" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; blk = Scale "black point" (-100) 200 0; wht = Scale "white point" (-100) 200 100; gam = Scale "gamma" 0 30 1; isPc = Toggle "Levels are percent" true; isInv = Toggle "Invert effect" false; command = Magick.command [ "\"%s\"", channels._flag, (if isInv then "+" else "-") ++ "level", "\"" ++ print blk.value ++ "," ++ print wht.value ++ (if isPc then "%%" else "") ++ "," ++ print gam.value ++ "\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_levelCols_item = class Menuaction "_Level colors" "adjust levels to given colours" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; colour_black = Magick.generalcol_widget; colour_white = Magick.generalcol_widget; isInv = Toggle "Invert effect" false; command = Magick.command [ "\"%s\"", channels._flag, (if isInv then "+" else "-") ++ "level-colors", "\"" ++ colour_black._flag ++ "," ++ colour_white._flag ++ "\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_linearStretch_item = class Menuaction "_Linear stretch" "stretches tones, making some black/white" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; blk = Scale "percent to make black" 0 100 0; wht = Scale "percent to make white" 0 100 0; command = Magick.command [ "\"%s\"", channels._flag, "-linear-stretch", "\"" ++ print blk.value ++ "x" ++ print wht.value ++ "%%\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_magnify_item = class Menuaction "_Magnify" "double the size of the image with pixel art scaling" { action x = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "-magnify", "\"%s\"" ]; _result = Magick.system command x; } } Magick_modulate_item = class Menuaction "_Modulate" "modulate brightness, saturation and hue" { action x = class _result { _vislevel = 3; modcolsp = Magick.ModColSp_widget; bright = Scale "brightness" 0 200 100; sat = Scale "saturation" 0 200 100; hue = Scale "hue" 0 200 100; command = Magick.command [ "\"%s\"", modcolsp._flag, "-modulate", print bright.value ++ "," ++ print sat.value ++ "," ++ print hue.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_monochrome_item = class Menuaction "_Monochrome" "transform to black and white" { action x = class _result { _vislevel = 3; // FIXME: also intensity? intensity = Magick.intensity_widget; treedepth = Expression "Treedepth" 8; dither = Magick.dither_widget; command = Magick.command [ "\"%s\"", intensity._flag, dither._flag, "-treedepth", print treedepth.expr, "-monochrome", "\"%s\"" ]; _result = Magick.system command x; } } Magick_morphology_item = class // See http://www.imagemagick.org/Usage/morphology/ Menuaction "_Morphology" "apply a morphological method" { action x = class _result { _vislevel = 3; method = Magick.morphmeth_widget; iter = Expression "Iterations (-1=repeat until done)" 1; kernel = Magick.kernel_widget; // FIXME: custom kernel eg "3x1+2+0:1,0,0" // width x height + offsx + offsy : {w*h values} // each value is 0.0 to 1.0 or "NaN" or "-" // kernel args, mostly float radius,scale. radius=0=default. default scale = 1.0 // but // ring takes: radius1, radius2, scale // rectangle and comet take: width x height + offsx + offsy // blur takes: radius x sigma // FIXME: for now, simply allow any string input. kernel_arg = String "Kernel arguments" ""; channels = Magick.channels_widget; command = Magick.command [ "\"%s\"", channels._flag, "-morphology", method._flag ++ ":" ++ print iter.expr, kernel._flag ++ (if kernel_arg.value == "" then "" else ":") ++ kernel_arg.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_negate_item = class Menuaction "_Negate" "negate" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; command = Magick.command [ "\"%s\"", channels._flag, "-negate", "\"%s\"" ]; _result = Magick.system command x; } } Magick_addNoise_item = class Menuaction "_add Noise" "add noise" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; attenuate = Scale "attenuate" 0 1.0 1.0; noise = Magick.noise_widget; command = Magick.command [ "\"%s\"", channels._flag, "-attenuate", print attenuate.value, noise._flag, "\"%s\"" ]; _result = Magick.system command x; } } Magick_normalize_item = class Menuaction "_Normalize" "normalize" { action x = class _result { _vislevel = 3; intensity = Magick.intensity_widget; channels = Magick.channels_widget; command = Magick.command [ "\"%s\"", intensity._flag, channels._flag, "-normalize", "\"%s\"" ]; _result = Magick.system command x; } } Magick_opaque_item = class Menuaction "_Opaque" "change this colour to the fill colour" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; fill = Magick.foreground_widget; changeColour = Magick.changeCol_widget; command = Magick.command [ "\"%s\"", fill._flag, channels._flag, "-fuzz", "\"" ++ print changeColour.fuzz.value ++ "%%\"", (if changeColour.nonMatch then "+" else "-") ++ "opaque", "\"" ++ changeColour.colour._flag ++ "\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_paint_item = class Menuaction "_Paint" "simulate an oil painting" { action x = class _result { _vislevel = 3; rad = Expression "radius" 10; command = Magick.command [ "\"%s\"", "-paint", print rad.expr, "\"%s\"" ]; _result = Magick.system command x; } } /*=== FIXME Bug; remove for now. Polaroid_item = class Menuaction "_Polaroid" "simulate a polaroid picture" { action x = class _result { _vislevel = 3; angle = Scale "angle" (-90) 90 20; command = Magick.command [ "\"%s\"", "-polaroid", print angle.value, "\"%s\"" ]; _result = Magick.system command x; } } ===*/ Magick_posterize_item = class Menuaction "_Posterize" "reduce to (n) levels per channel" { action x = class _result { _vislevel = 3; levels = Expression "levels" 3; command = Magick.command [ "\"%s\"", "-posterize", print levels.expr, "\"%s\"" ]; _result = Magick.system command x; } } Magick_raise_item = class Menuaction "_Raise" "lighten or darken image edges" { action x = class _result { _vislevel = 3; thk = Expression "Thickness" 3; command = Magick.command [ "\"%s\"", "-raise", print thk.expr, "\"%s\"" ]; _result = Magick.system command x; } } Magick_resize_item = class Menuaction "_Resize" "resize to given width and height" { action x = class _result { _vislevel = 3; filter = Magick.filter_widget; type = Magick.ResizeType_widget; width = Scale "Width" 1 100 10; height = Scale "Height" 1 100 10; isPc = Toggle "Width and height are percent" false; command = Magick.command [ "\"%s\"", filter._flag, "-" ++ type._flag, "\"" ++ print width.value ++ "x" ++ print height.value ++ (if isPc then "%%" else "!") ++ "\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_roll_item = class Menuaction "_Roll" "roll an image horizontally or vertically" { action x = class _result { _vislevel = 3; rollx = Expression "X" 3; rolly = Expression "Y" 3; command = Magick.command [ "\"%s\"", "-roll", (if rollx.expr >= 0 then "+" else "") ++ print rollx.expr ++ (if rolly.expr >= 0 then "+" else "") ++ print rolly.expr, "\"%s\"" ]; _result = Magick.system command x; } } Magick_rotate_item = class Menuaction "_Rotate" "rotate" { action x = class _result { _vislevel = 3; angle = Scale "angle (degrees)" (-360) 360 20; virtpixback = Magick.VirtualPixelBack_widget; command = Magick.command [ "\"%s\"", virtpixback._flag, "+distort", "SRT", print angle.value, "+repage", "\"%s\"" ]; _result = Magick.system command x; } } // FIXME: -segment, but cluster-threshold should be percentage of image area. Magick_sepia_item = class Menuaction "_Sepia tone" "simulate a sepia-toned photo" { action x = class _result { _vislevel = 3; threshold = Scale "Threshold (percent)" 0 100 80; command = Magick.command [ "\"%s\"", "-sepia-tone", "\"" ++ print threshold.value ++ "%%\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_shade_item = class Menuaction "_Shade" "shade with a distant light source" { action x = class _result { _vislevel = 3; azimuth = Scale "Azimuth (degrees)" (-360) 360 0; elevation = Scale "Elevation (degrees)" 0 90 45; command = Magick.command [ "\"%s\"", "-shade", print azimuth.value ++ "x" ++ print elevation.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_shadow_item = class Menuaction "_Shadow" "simulate a shadow" { action x = class _result { _vislevel = 3; shadowCol = Magick.generalcol_widget; opacity = Scale "Opacity (percent)" 0 100 75; sigma = Scale "Sigma" 0 30 2; // FIXME: make offsets a single widget? offsx = Scale "X-offset" (-20) 20 4; offsy = Scale "Y-offset" (-20) 20 4; arePc = Toggle "offsets are percentages" false; // FIXME: raw operation creates page offset, which vips dislikes. // So we take this futher, compositing with source. command = Magick.command [ "\"%s\"", "\"(\" +clone", "-background", "\"" ++ shadowCol._flag ++ "\"", "-shadow", concat [ "\"", print opacity.value, "x", print sigma.value, (if offsx.value >= 0 then "+" else ""), print offsx.value, (if offsy.value >= 0 then "+" else ""), print offsy.value, (if arePc then "%%" else ""), "\"" ], "\")\" +swap -background None -layers merge", "+repage", "\"%s\"" ]; _result = Magick.system command x; } } Magick_shave_item = class Menuaction "_Shave" "shave pixels from the edges" { action x = class _result { _vislevel = 3; width = Scale "Width" 0 50 10; height = Scale "Height" 0 50 10; isPc = Toggle "Width and height are percent" false; command = Magick.command [ "\"%s\"", "-shave", "\"" ++ print width.value ++ "x" ++ print height.value ++ (if isPc then "%%" else "") ++ "\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_shear_item = class Menuaction "_Shear" "shear along the x-axis and/or y-axis" { action x = class _result { _vislevel = 3; shearX = Expression "shear X (degrees)" 0; shearY = Expression "shear Y (degrees)" 0; background = Magick.background_widget; command = Magick.command [ "\"%s\"", background._flag, "-shear", print shearX.expr ++ "x" ++ print shearY.expr, "\"%s\"" ]; _result = Magick.system command x; } } Magick_sigmoid_item = class Menuaction "_Sigmoid" "increase or decrease mid-tone contrast sigmoidally" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; contrast = Scale "contrast" 0 30 3; midpoint = Scale "mid-point (percent)" 0 100 50; isInv = Toggle "Invert effect" false; command = Magick.command [ "\"%s\"", channels._flag, (if isInv then "+" else "-") ++ "sigmoidal-contrast", "\"" ++ print contrast.value ++ "x" ++ print midpoint.value ++ "%%\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_sketch_item = class Menuaction "_Sketch" "simulate a pencil sketch" { action x = class _result { _vislevel = 3; radius = Magick.blur_rad_widget; sigma = Magick.sigma_widget; angle = Scale "angle" (-360) 360 0; command = Magick.command [ "\"%s\"", "-sketch", print radius.value ++ "x" ++ print sigma.value ++ (if angle >= 0 then ("+" ++ print angle.value) else ""), "\"%s\"" ]; _result = Magick.system command x; } } Magick_solarize_item = class Menuaction "_Solarize" "negate all pixels above a threshold level" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; threshold = Scale "Threshold (percent)" 0 100 50; command = Magick.command [ "\"%s\"", channels._flag, "-solarize", "\"" ++ print threshold.value ++ "%%\"", "\"%s\"" ]; _result = Magick.system command x; } } // FIXME: -sparse-color needs abitrary list of {x,y,colour}. Magick_splice_item = class Menuaction "_Splice" "splice a colour into the image" { action x = class _result { _vislevel = 3; background = Magick.background_widget; gravity = Magick.gravity_widget; geometry = Magick.WhxyGeometry_widget; command = Magick.command [ "\"%s\"", background._flag, gravity._flag, "-splice", geometry._flag, "\"%s\"" ]; _result = Magick.system command x; } } Magick_spread_item = class Menuaction "_Spread" "displace pixels by random amount" { action x = class _result { _vislevel = 3; virtpixback = Magick.VirtualPixelBack_widget; amount = Expression "Amount (pixels)" 5; command = Magick.command [ "\"%s\"", virtpixback._flag, "-spread", print amount.expr, "\"%s\"" ]; _result = Magick.system command x; } } Magick_statistic_item = class Menuaction "_Statistic" "replace each pixel with statistic from neighbourhood" { action x = class _result { _vislevel = 3; width = Expression "Width" 5; height = Expression "Height" 5; statisticType = Magick.StatType_widget; command = Magick.command [ "\"%s\"", "-statistic", statisticType._flag, print width.expr ++ "x" ++ print height.expr, "\"%s\"" ]; _result = Magick.system command x; } } Magick_swirl_item = class Menuaction "_Swirl" "swirl around the centre" { action x = class _result { _vislevel = 3; angle = Magick.angle_widget; command = Magick.command [ "\"%s\"", "-swirl", print angle.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_thresholdMenu_item = class Menupullright "_Threshold" "make black or white" { Magick_threshold_item = class Menuaction "_Threshold" "apply black/white threshold" { action x = class _result { _vislevel = 3; intensity = Magick.intensity_widget; channels = Magick.channels_widget; threshold = Scale "Threshold (percent)" 0 100 50; command = Magick.command [ "\"%s\"", intensity._flag, channels._flag, "-threshold", "\"" ++ print threshold.value ++ "%%\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_blackThreshold_item = class Menuaction "_Black threshold" "where below threshold set to black" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; threshold = Scale "Threshold (percent)" 0 100 50; command = Magick.command [ "\"%s\"", channels._flag, "-black-threshold", "\"" ++ print threshold.value ++ "%%\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_whiteThreshold_item = class Menuaction "_White threshold" "where above threshold set to white" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; threshold = Scale "Threshold (percent)" 0 100 50; command = Magick.command [ "\"%s\"", channels._flag, "-white-threshold", "\"" ++ print threshold.value ++ "%%\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_latThreshold_item = class Menuaction "_Local Adaptive Threshold" "where above average plus offset set to white, otherwise black" { action x = class _result { _vislevel = 3; width = Expression "Width" 10; height = Expression "Height" 10; offset = Scale "Offset (percent)" (-100) 100 0; // note: "-lat" doesn't respond to channels command = Magick.command [ "\"%s\"", "-lat", concat ["\"", print width.expr, "x", print height.expr, (if offset.value >= 0 then "+" else ""), print offset.value, "%%\"" ], "\"%s\"" ]; _result = Magick.system command x; } } Magick_randThreshold_item = class Menuaction "_Random Threshold" "between specified limits, apply random threshold" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; low = Scale "Low threshold" 0 100 10; high = Scale "High threshold" 0 100 90; isPc = Toggle "Thresholds are percent" true; command = Magick.command [ "\"%s\"", channels._flag, "-random-threshold", "\"" ++ print low.value ++ "x" ++ print high.value ++ (if isPc then "%%" else "") ++ "\"", "\"%s\"" ]; _result = Magick.system command x; } } } // end ThresholdMenu_item // Note: alternatives include: // convert in.tif -write mpr:TILE +delete -size 200x200 -background XXXX -tile-offset +30+30 tile:mpr:TILE out.tif Magick_tile_item = class Menuaction "_Tile" "fill given size with tiled image" { action x = class _result { _vislevel = 3; size = Magick.Size_widget; command = Magick.command [ size._flag, "tile:" ++ "\"%s\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_tint_item = class Menuaction "_Tint" "apply a tint" { action x = class _result { _vislevel = 3; foreground = Magick.foreground_widget; amount = Scale "amount (percent)" 0 100 50; command = Magick.command [ "\"%s\"", foreground._flag, "-tint", // snibgo note: although the amount is a percentage, it doesn't need "%" character. print amount.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_transparent_item = class Menuaction "_Transparent" "make this colour transparent" { action x = class _result { _vislevel = 3; changeColour = Magick.changeCol_widget; command = Magick.command [ "\"%s\"", "-fuzz", "\"" ++ print changeColour.fuzz.value ++ "%%\"", (if changeColour.nonMatch then "+" else "-") ++ "transparent", "\"" ++ changeColour.colour._flag ++ "\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_trim_item = class Menuaction "_Trim" "trims away border" { action x = class _result { _vislevel = 3; fuzz = Magick.fuzz_widget; command = Magick.command [ "\"%s\"", "-fuzz", "\"" ++ print fuzz.value ++ "%%\"", "-trim +repage", "\"%s\"" ]; _result = Magick.system command x; } } Magick_uniqueCols_item = class Menuaction "_Unique colours" "discard all but one of any pixel color" { action x = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "-unique-colors", "\"%s\"" ]; _result = Magick.system command x; } } Magick_vignette_item = class Menuaction "_Vignette" "soften the edges in vignette style" { action x = class _result { _vislevel = 3; radius = Magick.blur_rad_widget; sigma = Magick.sigma_widget; rx = Scale "Rolloff x (percent)" 0 100 10; ry = Scale "Rolloff y (percent)" 0 100 10; background = Magick.background_widget; command = Magick.command [ "\"%s\"", background._flag, "-vignette", print radius.value ++ "x" ++ print sigma.value ++ (if rx.value >= 0 then "+" else "") ++ print rx.value ++ (if ry.value >= 0 then "+" else "") ++ print ry.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_wave_item = class Menuaction "_Wave" "shear the columns into a sine wave" { action x = class _result { _vislevel = 3; amplitude = Scale "Amplitude (pixels)" 0 100 10; wavelength = Scale "Wavelength (pixels)" 0 100 10; command = Magick.command [ "\"%s\"", "-wave", print amplitude.value ++ "x" ++ print wavelength.value, "\"%s\"" ]; _result = Magick.system command x; } } nip2-8.7.0/share/nip2/compat/8.5/_predicate.def0000644000175000017500000003252613273071606015662 00000000000000 /* is_colour_space str: is a string one of nip's colour space names */ is_colour_space str = Image_type.colour_spaces.present 0 str; /* is_colour_type n: is a number one of VIPS's colour spaces */ is_colour_type n = Image_type.colour_spaces.present 1 n; /* is_number: is a real or a complex number. */ is_number a = is_real a || is_complex a; /* is_int: is an integer */ is_int a = is_real a && a == (int) a; /* is_uint: is an unsigned integer */ is_uint a = is_int a && a >= 0; /* is_pint: is a positive integer */ is_pint a = is_int a && a > 0; /* is_preal: is a positive real */ is_preal a = is_real a && a > 0; /* is_ureal: is an unsigned real */ is_ureal a = is_real a && a >= 0; /* is_letter c: true if character c is an ASCII letter * * is_letter :: char -> bool */ is_letter c = ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z'); /* is_digit c: true if character c is an ASCII digit * * is_digit :: char->bool */ is_digit x = '0' <= x && x <= '9'; /* A whitespace character. * * is_space :: char->bool */ is_space = member " \n\t"; /* List str starts with section prefix. * * is_prefix "hell" "hello world!" == true * is_prefix :: [*] -> [*] -> bool */ is_prefix prefix str = take (len prefix) str == prefix; /* List str ends with section suffix. * * is_suffix "ld!" "hello world!" == true * is_suffix :: [*] -> [*] -> bool */ is_suffix suffix str = take (len suffix) (reverse str) == reverse suffix; /* List contains seqence. * * is_substr "llo" "hello world!" == true * is_substr :: [*] -> [*] -> bool */ is_substr seq str = any (map (is_prefix seq) (iterate tl str)); /* is_listof p s: true if finite list with p true for every element. */ is_listof p l = is_list l && all (map p l); /* is_string s: true if finite list of char. */ is_string s = is_listof is_char s; /* is_real_list l: is l a list of real numbers ... test each element, * so no infinite lists pls. */ is_real_list l = is_listof is_real l; /* is_string_list l: is l a finite list of finite strings. */ is_string_list l = is_listof is_string l; /* Test list length ... quicker than len x == n for large lists. */ is_list_len n x = true, x == [] && n == 0 = false, x == [] || n == 0 = is_list_len (n - 1) (tl x); is_list_len_more n x = true, x != [] && n == 0 = false, x == [] || n == 0 = is_list_len_more (n - 1) (tl x); is_list_len_more_equal n x = true, n == 0 = false, x == [] = is_list_len_more_equal (n - 1) (tl x); /* is_rectangular l: is l a rectangular data structure */ is_rectangular l = true, !is_list l = true, all (map is_obj l) = true, all (map is_list l) && all (map (not @ is_obj) l) && all (map is_rectangular l) && is_list_len_more 0 l && all (map (is_list_len (len (hd l))) (tl l)) = false { // treat strings as a base type, not [char] is_obj x = !is_list x || is_string x; } /* is_matrix l: is l a list of lists of real numbers, all the same length * * [[]] is the empty matrix, [] is the empty list ... disallow [] */ is_matrix l = l != [] && is_listof is_real_list l && is_rectangular l; /* is_square_matrix l: is l a matrix with width == height */ is_square_matrix l = true, l == [[]] = is_matrix l && is_list_len (len (hd l)) l; /* is_oddmatrix l: is l a matrix with odd-length sides */ is_oddmatrix l = true, l == [[]] = is_matrix l && len l % 2 == 1 && len l?0 % 2 == 1; /* is_odd_square_matrix l: is l a square_matrix with odd-length sides */ is_odd_square_matrix l = is_square_matrix l && len l % 2 == 1; /* Is an item in a column of a table? */ is_incolumn n table x = member (map (extract n) table) x; /* Is HGuide or VGuide. */ is_HGuide x = is_instanceof "HGuide" x; is_VGuide x = is_instanceof "VGuide" x; is_Guide x = is_HGuide x || is_VGuide x; is_Mark x = is_instanceof "Mark" x; is_Group x = is_instanceof "Group" x; is_NULL x = is_instanceof "NULL" x; is_List x = is_instanceof "List" x; is_Image x = is_instanceof "Image" x; is_Plot x = is_instanceof "Plot" x; is_Region x = is_instanceof "Region" x; is_Real x = is_instanceof "Real" x; is_Matrix x = is_instanceof "Matrix_base" x; is_Vector x = is_instanceof "Vector" x; is_Colour x = is_instanceof "Colour" x; is_Arrow x = is_instanceof "Arrow" x; is_Bool x = is_instanceof "Bool" x; is_Scale x = is_instanceof "Scale" x; is_Rect x = is_instanceof "Rect" x; is_Number x = is_instanceof "Number" x; is_Expression x = is_instanceof "Expression" x; is_String x = is_instanceof "String" x; /* A list of the form [[1,2],[3,4],[5,6]...] */ is_xy_list l = is_list l && all (map xy l) { xy l = is_real_list l && is_list_len 2 l; } // does a nested list structure contain a Group object? contains_Group l = true, is_list l && any (map is_Group l) = any (map contains_Group l), is_list l = false; /* Does an object have a sensible VIPS type? */ has_type x = is_image x || is_Image x || is_Arrow x || is_Colour x; /* Try to get a VIPS image type from an object. */ get_type x = get_type_im x, is_image x = get_type_im x.value, is_Image x = get_type_im x.image.value, is_Arrow x = Image_type.colour_spaces.lookup 0 1 x.colour_space, is_Colour x // slightly odd ... but our display is always 0-255, so it makes sense for // a plain number to be in the same range = Image_type.sRGB, is_real x = oo_unary_function get_type_op x, is_class x = error (_ "bad arguments to " ++ "get_type") { get_type_op = Operator "get_type" get_type Operator_type.COMPOUND false; // get the type from a VIPS image ... but only if it makes sense with // the rest of the image // we often have Type set wrong, hence the ugly guessing :-( // can have alpha, hence we let bands be one more than you might think get_type_im im = Image_type.LABQ, coding == Image_coding.LABPACK = Image_type.GREY16, type == Image_type.GREY16 && is_bands 1 = Image_type.HISTOGRAM, type == Image_type.HISTOGRAM && (width == 1 || height == 1) = Image_type.B_W, is_bands 1 = Image_type.CMYK, type == Image_type.CMYK && is_bands 4 = type, is_colorimetric && is_bands 3 = Image_type.sRGB, !is_colorimetric && is_bands 3 = Image_type.MULTIBAND, !is_colorimetric && !is_bands 3 = type { type = get_header "Type" im; coding = get_header "Coding" im; bands = get_header "Bands" im; width = get_header "Xsize" im; height = get_header "Ysize" im; // 3-band colorimetric types we allow ... the things which the // Colour/Convert To menu can make, excluding mono. ok_types = [ Image_type.sRGB, Image_type.RGB16, Image_type.LAB, Image_type.LABQ, Image_type.LABS, Image_type.LCH, Image_type.XYZ, Image_type.YXY, Image_type.UCS ]; is_colorimetric = member ok_types type; // is bands n, with an optional alpha (ie. can be n + 1 too) is_bands n = bands == n || bands == n + 1; } } has_format x = has_member "format" x || is_Arrow x || is_image x; get_format x = x.format, has_member "format" x = x.image.format, is_Arrow x = get_header "BandFmt" x, is_image x = oo_unary_function get_format_op x, is_class x = error (_ "bad arguments to " ++ "get_format") { get_format_op = Operator "get_format" get_format Operator_type.COMPOUND false; } has_bits x = has_member "bits" x || is_Arrow x || is_image x; get_bits x = x.bits, has_member "bits" x = x.image.bits, is_Arrow x = get_header "Bbits" x, is_image x = oo_unary_function get_bits_op x, is_class x = error (_ "bad arguments to " ++ "get_bits") { get_bits_op = Operator "get_bits" get_format Operator_type.COMPOUND false; } has_bands x = is_image x || has_member "bands" x || is_Arrow x; get_bands x = x.bands, has_member "bands" x = x.image.bands, is_Arrow x = get_header "Bands" x, is_image x = 1, is_real x = len x, is_real_list x = oo_unary_function get_bands_op x, is_class x = error (_ "bad arguments to " ++ "get_bands") { get_bands_op = Operator "get_bands" get_bands Operator_type.COMPOUND false; } has_coding x = has_member "coding" x || is_Arrow x || is_image x; get_coding x = x.coding, has_member "coding" x = x.image.coding, is_Arrow x = get_header "Coding" x, is_image x = Image_coding.NOCODING, is_real x = oo_unary_function get_coding_op x, is_class x = error (_ "bad arguments to " ++ "get_coding") { get_coding_op = Operator "get_coding" get_coding Operator_type.COMPOUND false; } has_xres x = has_member "xres" x || is_Arrow x || is_image x; get_xres x = x.xres, has_member "xres" x = x.image.xres, is_Arrow x = get_header "Xres" x, is_image x = oo_unary_function get_xres_op x, is_class x = error (_ "bad arguments to " ++ "get_xres") { get_xres_op = Operator "get_xres" get_xres Operator_type.COMPOUND false; } has_yres x = has_member "yres" x || is_Arrow x || is_image x; get_yres x = x.yres, has_member "yres" x = x.image.yres, is_Arrow x = get_header "Yres" x, is_image x = oo_unary_function get_yres_op x, is_class x = error (_ "bad arguments to " ++ "get_yres") { get_yres_op = Operator "get_yres" get_yres Operator_type.COMPOUND false; } has_xoffset x = has_member "xoffset" x || is_Arrow x || is_image x; get_xoffset x = x.xoffset, has_member "xoffset" x = x.image.xoffset, is_Arrow x = get_header "Xoffset" x, is_image x = oo_unary_function get_xoffset_op x, is_class x = error (_ "bad arguments to " ++ "get_xoffset") { get_xoffset_op = Operator "get_xoffset" get_xoffset Operator_type.COMPOUND false; } has_yoffset x = has_member "yoffset" x || is_Arrow x || is_image x; get_yoffset x = x.yoffset, has_member "yoffset" x = x.image.yoffset, is_Arrow x = get_header "Yoffset" x, is_image x = oo_unary_function get_yoffset_op x, is_class x = error (_ "bad arguments to " ++ "get_yoffset") { get_yoffset_op = Operator "get_yoffset" get_yoffset Operator_type.COMPOUND false; } has_value = has_member "value"; get_value x = x.value; has_image x = is_image x || is_Image x || is_Arrow x; get_image x = x.value, is_Image x = x.image.value, is_Arrow x = x, is_image x = oo_unary_function get_image_op x, is_class x = error (_ "bad arguments to " ++ "get_image") { get_image_op = Operator "get_image" get_image Operator_type.COMPOUND false; } has_number x = is_number x || is_Real x; get_number x = x.value, is_Real x = x, is_number x = oo_unary_function get_number_op x, is_class x = error (_ "bad arguments to " ++ "get_number") { get_number_op = Operator "get_number" get_number Operator_type.COMPOUND false; } has_real x = is_real x || is_Real x; get_real x = x.value, is_Real x = x, is_real x = oo_unary_function get_real_op x, is_class x = error (_ "bad arguments to " ++ "get_real") { get_real_op = Operator "get_real" get_real Operator_type.COMPOUND false; } has_width x = has_member "width" x || is_image x; get_width x = x.width, has_member "width" x = get_header "Xsize" x, is_image x = oo_unary_function get_width_op x, is_class x = error (_ "bad arguments to " ++ "get_width") { get_width_op = Operator "get_width" get_width Operator_type.COMPOUND false; } has_height x = has_member "height" x || is_image x; get_height x = x.height, has_member "height" x = get_header "Ysize" x, is_image x = oo_unary_function get_height_op x, is_class x = error (_ "bad arguments to " ++ "get_height") { get_height_op = Operator "get_height" get_height Operator_type.COMPOUND false; } has_left x = has_member "left" x; get_left x = x.left, has_member "left" x = oo_unary_function get_left_op x, is_class x = error (_ "bad arguments to " ++ "get_left") { get_left_op = Operator "get_left" get_left Operator_type.COMPOUND false; } has_top x = has_member "top" x; get_top x = x.top, has_member "top" x = oo_unary_function get_top_op x, is_class x = error (_ "bad arguments to " ++ "get_top") { get_top_op = Operator "get_top" get_top Operator_type.COMPOUND false; } // like has/get member, but first in a lst of objects has_member_list has objects = filter has objects != []; // need one with the args swapped get_member = converse dot; // get a member from the first of a list of objects to have it get_member_list has get objects = hd members, members != [] = error "unable to get property" { members = map get (filter has objects); } is_hist x = has_image x && (h == 1 || w == 1 || t == Image_type.HISTOGRAM) { im = get_image x; w = get_width im; h = get_height im; t = get_type im; } get_header field x = oo_unary_function get_header_op x, is_class x = get_header_image x, is_image x = error (_ "bad arguments to " ++ "get_header") { get_header_op = Operator "get_header" (get_header field) Operator_type.COMPOUND false; get_header_image im = im_header_int field im, type == itype = im_header_double field im, type == dtype = im_header_string field im, type == stype1 || type == stype2 = error (_ "image has no field " ++ field), type == 0 = error (_ "unknown type for field " ++ field) { type = im_header_get_typeof field im; itype = name2gtype "gint"; dtype = name2gtype "gdouble"; stype1 = name2gtype "VipsRefString"; stype2 = name2gtype "gchararray"; } } get_header_type field x = oo_unary_function get_header_type_op x, is_class x = im_header_get_typeof field x, is_image x = error (_ "bad arguments to " ++ "get_header_type") { get_header_type_op = Operator "get_header_type" (get_header_type field) Operator_type.COMPOUND false; } set_header field value x = oo_unary_function set_header_op x, is_class x = im_copy_set_meta x field value, is_image x = error (_ "bad arguments to " ++ "set_header") { set_header_op = Operator "set_header" (set_header field value) Operator_type.COMPOUND false; } nip2-8.7.0/share/nip2/compat/8.5/Widgets.def0000644000175000017500000000235313273071606015164 00000000000000Widget_slider_item = class Menuaction "_Scale" "make a new scale widget" { icon = "nip-slider-16.png"; action = Scale "untitled scale" 0 255 128; } Widget_toggle_item = class Menuaction "_Toggle" "make a new toggle widget" { action = Toggle "untitled toggle" false; } Widget_option_item = class Menuaction "_Option" "make a new option widget" { action = Option "untitled option" ["option0", "option1"] 0; } Widget_string_item = class Menuaction "St_ring" "make a new string widget" { action = String "Enter a string" "sample text"; } Widget_number_item = class Menuaction "_Number" "make a new number widget" { action = Number "Enter a number" 42; } Widget_expression_item = class Menuaction "_Expression" "make a new expression widget" { action = Expression "Enter an expression" 42; } Widget_pathname_item = class Menuaction "_File Chooser" "make a new file chooser widget" { action = Pathname "Pick a file" "$VIPSHOME/share/$PACKAGE/data/print_test_image.v"; } Widget_font_item = class Menuaction "F_ont Chooser" "make a new font chooser widget" { action = Fontname "Pick a font" Workspaces.Preferences.PAINTBOX_FONT; } Widget_clock_item = class Menuaction "_Clock" "make a new clock widget" { action = Clock 1 1; } nip2-8.7.0/share/nip2/compat/8.5/Colour.def0000644000175000017500000003773013273071606015030 00000000000000 Colour_new_item = class Menupullright (_ "_New") (_ "make a patch of colour") { Widget_colour_item = class Menuaction (_ "_Colour") (_ "make a patch of colour") { action = Colour_picker "Lab" [50,0,0]; } LAB_colour = class Menuaction (_ "CIE Lab _Picker") (_ "pick colour in CIE Lab space") { action = widget "Lab" [50, 0, 0]; // ab_slice size size = 512; // range of values ... +/- 128 for ab range = 256; // map xy in slice image to ab and back xy2ab x = x / (size / range) - 128; ab2xy a = (a + 128) * (size / range); widget space default_value = class Colour space _result { _vislevel = 3; [_L, _a, _b] = default_value; L = Scale "Lightness" 0 100 _L; ab_slice = Image (lab_slice size L.value); point = Mark ab_slice (ab2xy _a) (ab2xy _b); _result = [L.value, xy2ab point.left, xy2ab point.top]; Colour_edit colour_space value = widget colour_space value; } } CCT_colour = class Menuaction (_ "Colour from CCT") (_ "pick colour by CCT") { action = widget 6500; widget x = class _result { _vislevel = 3; T = Scale "CCT" 1800 25000 x; _result = colour_from_temp (to_real T); Colour_edit space value = widget (temp_from_colour (Colour space value)); } } } Colour_to_colour_item = class Menuaction (_ "Con_vert to Colour") (_ "convert anything to a colour") { action x = to_colour x; } #separator Colour_convert_item = class Menupullright (_ "_Colourspace") (_ "convert to various colour spaces") { spaces = Image_type.image_colour_spaces; conv dest x = class _result { _vislevel = 3; to = Option_enum (_ "Convert to") spaces (spaces.get_name dest); _result = map_unary (colour_transform_to to.value_thing) x; } Mono_item = class Menuaction (_ "_Monochrome") (_ "convert to mono colourspace") { action x = conv Image_type.B_W x; } sRGB_item = class Menuaction (_ "_sRGB") (_ "convert to sRGB colourspace") { action x = conv Image_type.sRGB x; } GREY16_item = class Menuaction (_ "_GREY16") (_ "convert to GREY16 colourspace") { action x = conv Image_type.GREY16 x; } RGB16_item = class Menuaction (_ "_RGB16") (_ "convert to RGB16 colourspace") { action x = conv Image_type.RGB16 x; } Lab_item = class Menuaction (_ "_Lab") (_ "convert to Lab colourspace (float Lab)") { action x = conv Image_type.LAB x; } LabQ_item = class Menuaction (_ "Lab_Q") (_ "convert to LabQ colourspace (32-bit Lab)") { action x = conv Image_type.LABQ x; } LabS_item = class Menuaction (_ "Lab_S") (_ "convert to LabS colourspace (48-bit Lab)") { action x = conv Image_type.LABS x; } LCh_item = class Menuaction (_ "L_Ch") (_ "convert to LCh colourspace") { action x = conv Image_type.LCH x; } XYZ_item = class Menuaction (_ "_XYZ") (_ "convert to XYZ colourspace") { action x = conv Image_type.XYZ x; } Yxy_item = class Menuaction (_ "_Yxy") (_ "convert to Yxy colourspace") { action x = conv Image_type.YXY x; } UCS_item = class Menuaction (_ "_UCS") (_ "convert to UCS colourspace") { action x = conv Image_type.UCS x; } } /* mark objects as being in various colourspaces */ Colour_tag_item = class Menupullright (_ "_Tag As") (_ "tag object as being in various colour spaces") { spaces = Image_type.image_colour_spaces; tag dest x = class _result { _vislevel = 3; to = Option_enum (_ "Tag as") spaces (spaces.get_name dest); _result = map_unary (image_set_type to.value_thing) x; } Mono_item = class Menuaction (_ "_Monochrome") (_ "tag as being in mono colourspace") { action x = tag Image_type.B_W x; } sRGB_item = class Menuaction (_ "_sRGB") (_ "tag as being in sRGB colourspace") { action x = tag Image_type.sRGB x; } RGB16_item = class Menuaction (_ "_RGB16") (_ "tag as being in RGB16 colourspace") { action x = tag Image_type.RGB16 x; } GREY16_item = class Menuaction (_ "_GREY16") (_ "tag as being in GREY16 colourspace") { action x = tag Image_type.GREY16 x; } Lab_item = class Menuaction (_ "_Lab") (_ "tag as being in Lab colourspace (float Lab)") { action x = tag Image_type.LAB x; } LabQ_item = class Menuaction (_ "Lab_Q") (_ "tag as being in LabQ colourspace (32-bit Lab)") { action x = tag Image_type.LABQ x; } LabS_item = class Menuaction (_ "Lab_S") (_ "tag as being in LabS colourspace (48-bit Lab)") { action x = tag Image_type.LABS x; } LCh_item = class Menuaction (_ "L_Ch") (_ "tag as being in LCh colourspace") { action x = tag Image_type.LCH x; } XYZ_item = class Menuaction (_ "_XYZ") (_ "tag as being in XYZ colourspace") { action x = tag Image_type.XYZ x; } Yxy_item = class Menuaction (_ "_Yxy") (_ "tag as being in Yxy colourspace") { action x = tag Image_type.YXY x; } UCS_item = class Menuaction (_ "_UCS") (_ "tag as being in UCS colourspace") { action x = tag Image_type.UCS x; } } Colour_temperature_item = class Menupullright (_ "Te_mperature") (_ "colour temperature conversions") { Whitepoint_item = class Menuaction (_ "_Move Whitepoint") (_ "change whitepoint") { action x = class _result { _vislevel = 3; old_white = Option_enum (_ "Old whitepoint") Whitepoints "D65"; new_white = Option_enum (_ "New whitepoint") Whitepoints "D50"; _result = map_unary process x { process im = im''' { im' = colour_transform_to Image_type.XYZ im; im'' = im' * (new_white.value_thing / old_white.value_thing); im''' = colour_transform_to (get_type im) im''; } } } } D65_to_D50_item = class Menupullright (_ "D_65 to D50") (_ "complex conversion") { XYZ_minimal_item = class Menuaction (_ "_Minimal") (_ "D65 to D50 using the minimal 3x3 matrix in XYZ") { action x = map_unary process x { process im = im''' { im' = colour_transform_to Image_type.XYZ im; im'' = recomb D652D50_direct im'; im''' = colour_transform_to (get_type im) im''; } } } Bradford_item = class Menuaction (_ "_Bradford") (_ "D65 to D50 in Bradford cone space") { action x = map_unary process x { process im = im''' { im' = colour_transform_to Image_type.XYZ im; im'' = im_D652D50 im'; im''' = colour_transform_to (get_type im) im''; } } } } D50_to_D65_item = class Menupullright (_ "D_50 to D65") (_ "complex conversion") { XYZ_minimal_item = class Menuaction (_ "_Minimal") (_ "D50 to D65 using the minimal 3x3 matrix in XYZ") { action x = map_unary process x { process im = im''' { im' = colour_transform_to Image_type.XYZ im; im'' = recomb D502D65_direct im'; im''' = colour_transform_to (get_type im) im''; } } } Bradford_item = class Menuaction (_ "_Bradford") (_ "D60 to D65 in Bradford cone space") { action x = map_unary process x { process im = im''' { im' = colour_transform_to Image_type.XYZ im; im'' = im_D502D65 im'; im''' = colour_transform_to (get_type im) im''; } } } } Lab_to_D50XYZ_item = class Menuaction (_ "_Lab to D50 XYZ") (_ "Lab to XYZ with a D50 whitepoint") { action x = map_unary (colour_unary im_D50Lab2XYZ) x; } D50XYZ_to_Lab_item = class Menuaction (_ "D50 _XYZ to Lab") (_ "XYZ to Lab with a D50 whitepoint") { action x = map_unary (colour_unary im_D50XYZ2Lab) x; } sep1 = Menuseparator; CCT_item = class Menuaction (_ "Calculate temperature") (_ "estimate CCT using the McCamy approximation") { action z = map_unary temp_from_colour z; } Colour_item = Colour_new_item.CCT_colour; } Colour_icc_item = class Menupullright (_ "_ICC") (_ "transform with ICC profiles") { print_profile = "$VIPSHOME/share/$PACKAGE/data/cmyk.icm"; monitor_profile = "$VIPSHOME/share/$PACKAGE/data/sRGB.icm"; guess_profile image = print_profile, has_type image && get_type image == Image_type.CMYK && has_bands image && get_bands image >= 4 = monitor_profile; render_intents = Option_enum (_ "Render intent") Render_intent.names (_ "Absolute"); Export_item = class Menuaction (_ "_Export") (_ "export from PCS to device space") { action x = class _result { _vislevel = 3; profile = Pathname (_ "Output profile") print_profile; intent = render_intents; depth = Option (_ "Output depth") [_ "8 bit", _ "16 bit"] 0; _result = map_unary process x { process image = icc_export [8, 16]?depth profile.value intent.value_thing lab { lab = colour_transform_to Image_type.LABQ image; } } } } Import_item = class Menuaction (_ "_Import") (_ "import from device space to PCS") { action x = class _result { _vislevel = 3; embedded = Toggle (_ "Use embedded profile if possible") false; profile = Pathname (_ "Default input profile") (guess_profile x); intent = render_intents; _result = map_unary process x { process image = icc_import_embedded intent.value_thing image, get_header_type "icc-profile-data" image != 0 && embedded = icc_import profile.value intent.value_thing image; } } } Transform_item = class Menuaction (_ "_Transform") (_ "transform between two device spaces") { action x = class _result { _vislevel = 3; in_profile = Pathname (_ "Input profile") (guess_profile x); out_profile = Pathname (_ "Output profile") print_profile; intent = render_intents; _result = map_unary process x { process image = icc_transform in_profile.value out_profile.value intent.value_thing image; } } } AC2RC_item = class Menuaction (_ "_Absolute to Relative") (_ "absolute to relative colorimetry using device profile") { action x = class _result { _vislevel = 3; profile = Pathname (_ "Pick a profile") (guess_profile x); _result = map_unary process x { process image = icc_ac2rc profile.value lab { lab = colour_transform_to Image_type.LAB image; } } } } } Colour_rad_item = class Menupullright (_ "_Radiance") (_ "convert to and from Radiance packed format") { Unpack_item = class Menuaction (_ "Unpack") (_ "unpack Radiance format to float") { action x = map_unary rad2float x; } Pack_item = class Menuaction (_ "Pack") (_ "pack 3-band float to Radiance format") { action x = map_unary float2rad x; } } #separator Colour_dE_item = class Menupullright (_ "_Difference") (_ "calculate colour difference") { /* Apply a converter to an object ... convert image or colour (since * we can guess the colour space we're converting from), don't convert * matrix or vector (since we can't tell ... assume it's in the right * space already). */ apply_cvt cvt x = cvt x, is_Image x || is_Colour x || is_image x = x; diff cvt in1 in2 = abs_vec (apply_cvt cvt in1 - apply_cvt cvt in2); /* Converter to LAB. */ lab_cvt = colour_transform_to Image_type.LAB; /* Converter to UCS ... plain UCS is Ch form, so we go LAB again after * to make sure we get a rectangular coord system. */ ucs_cvt = colour_transform Image_type.LCH Image_type.LAB @ colour_transform_to Image_type.UCS; CIEdE76_item = class Menuaction (_ "CIE dE _76") (_ "calculate CIE dE 1976 for two objects") { action a b = map_binary (diff lab_cvt) a b; } CIEdE00_item = class Menuaction (_ "CIE dE _00") (_ "calculate CIE dE 2000 for two objects") { action a b = map_binary (colour_binary (_ "im_dE00_fromLab") im_dE00_fromLab) a b; } UCS_item = class Menuaction (_ "_CMC(l:l)") (_ "calculate CMC(l:l) for two objects") { action a b = map_binary (diff ucs_cvt) a b; } } Colour_adjust_item = class Menupullright (_ "_Adjust") (_ "alter colours in various ways") { Recombination_item = class Menuaction (_ "_Recombination") (_ "recombine colour with an editable matrix") { action x = class _result { _vislevel = 3; matrix = Matrix_rec (identity_matrix (bands x)) { // try to guess a sensible value for the size of the // matrix bands x = x.bands, is_Image x || is_Colour x = x.width, is_Matrix x = bands x.value?0, is_Group x = x.bands, has_member "bands" x = 3; } _result = map_unary (recomb matrix) x; } } Cast_item = class Menuaction (_ "_Cast") (_ "displace neutral axis in CIE Lab") { action x = class _result { _vislevel = 3; gr = Scale "Green-red" (-20) 20 0; by = Scale "Blue-yellow" (-20) 20 0; _result = map_unary adjust_cast x { adjust_cast in = colour_transform_to (get_type in) in'' { in' = colour_transform_to Image_type.LAB in; in'' = in' + Vector [0, gr.value, by.value]; } } } } HSB_item = class Menuaction (_ "_HSB") (_ "adjust hue-saturation-brightness in LCh") { action x = class _result { _vislevel = 3; h = Scale "Hue" 0 360 0; s = Scale "Saturation" 0.01 5 1; b = Scale "Brightness" 0.01 5 1; _result = map_unary adjust_hsb x { adjust_hsb in = colour_transform_to (get_type in) in'' { in' = colour_transform_to Image_type.LCH in; in'' = in' * Vector [b.value, s.value, 1] + Vector [0, 0, h.value]; } } } } } Colour_similar_item = class Menuaction (_ "_Similar Colour") (_ "find pixels with a similar colour") { action x = class _result { _vislevel = 3; target_colour = Colour_picker "Lab" [50, 0, 0]; t = Scale "dE threshold" 0 100 10; _result = map_unary match x { match in = abs_vec (in' - target) < t { target = colour_transform_to Image_type.LAB target_colour; in' = colour_transform_to Image_type.LAB in; } } } } #separator Colour_chart_to_matrix_item = class Menuaction (_ "_Measure Colour Chart") (_ "measure average pixel values for a colour chart image") { action x = class _result { _vislevel = 3; pacross = Expression (_ "Patches across chart") 6; pdown = Expression (_ "Patches down chart") 4; measure = Scale (_ "Measure area (%)") 1 100 50; // get a representative image from an arg get_image x = get_image x.value?0, is_Group x = x; _im = get_image x; sample = measure_draw (to_real pacross) (to_real pdown) (to_real measure) _im; _result = map_unary chart x { chart in = measure_sample (to_real pacross) (to_real pdown) (to_real measure) in; } } } Colour_matrix_to_chart_item = class Menuaction (_ "Make Synth_etic Colour Chart") (_ "make a colour chart image from a matrix of measurements") { action x = class _result { _vislevel = 3; pacross = Expression (_ "Patches across chart") 6; pdown = Expression (_ "Patches down chart") 4; pwidth = Expression (_ "Patch width in pixels") 50; pheight = Expression (_ "Patch height in pixels") 50; bwidth = Expression (_ "Border between patches") 0; _result = map_unary build_chart x { build_chart in = Image (imagearray_assemble (to_real bwidth) (to_real bwidth) patch_table) { // patch numbers for row starts rowstart = map (multiply (to_real pacross)) [0 .. to_real pdown - 1]; // assemble patches ... each one a pixel value patches = map (take (to_real pacross)) (map (converse drop in.value) rowstart); // make an n-band constant image from eg. [1,2,3] // we don't know the format .. use sRGB (well, why not?) patch v = image_new (to_real pwidth) (to_real pheight) (len v) Image_format.FLOAT Image_coding.NOCODING Image_type.sRGB (Vector v) 0 0; // make an image for each patch patch_table = map (map patch) patches; } } } } Colour_plot_ab_scatter_item = class Menuaction (_ "_Plot ab Scatter") (_ "plot an ab scatter histogram") { action x = class _result { _vislevel = 3; bins = Expression (_ "Number of bins on each axis") 8; _result = map_unary plot_scatter x { plot_scatter in = Image (bg * (((90 / mx) * hist) ++ blk)) { lab = colour_transform_to Image_type.LAB in.value; ab = (unsigned char) ((lab?1 ++ lab?2) + 128); hist = hist_find_nD bins.expr ab; mx = max hist; bg = lab_slice bins.expr 1; blk = 1 + im_black (to_real bins) (to_real bins) 2; } } } } nip2-8.7.0/share/nip2/compat/8.5/_joe_extra.def0000644000175000017500000003107513273071606015700 00000000000000//////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// Frame_item = class Menupullright "Picture _Frame" "working with images of frames" { //////////////////////////////////////////////////////////////////////////////////// Build_frame_item = class Menupullright "_Build Frame From" "builds a new frame from image a and places it around image b" { //////////////////////////////////////////////////////////////////////////////////// Frame_corner_item = class Menuaction "_Frame Corner" "copies and extends a frame corner, a, to produce a complete frame to fit round a given image, b" { prefs = Workspaces.Preferences; action a b = class _result { _check_args = [ [a, "a", check_Image], [b, "b", check_Image] ]; _check_all = [ [a.coding == b.coding && a.bands == b.bands, "a.coding == b.coding && a.bands == b.bands"] ]; _vislevel = 3; ppcm = Expression "Number of pixels per cm" 25; /* Given the value of ppcm, distance between the inner edge of the frame * and the outer edge of the image. +ve values mean the frame overlaps * the image. */ overlap = Expression "Size of frame overlap in cm" 0; variables = Frame_variables 0; _type = Image_type.colour_spaces.get_name b.type; //If applied the count colour be seen for -ve values of overlap mount_options = Mount_options _type ppcm.expr; _cs = variables.corner_section.value; _ms = variables.middle_section.value; _ov = ppcm.expr * overlap.expr; _sf = variables.scale_factor.expr; _bf = variables.blend_fraction.value; //Scale frame image if required. _a = a, _sf == 1; = a, _sf == 0; = Image (resize Kernel_linear _sf _sf a.value); _im_w = b.width; _im_h = b.height + mount_options._los, mount_options.apply = b.height; _os = mount_options._los, mount_options.apply = 0; _cl = Vector mount_options.mount_colour.value, mount_options.apply = 0; //Produce scaled and resized frame. frame = corner_frame _a _im_w _im_h _ov _cs _ms _bf; //Resize image canvas and applied mount colour as required. _pos_im = frame_position_image b frame _os _cl; //Wrap frame round image. _result = if (frame == 0) then _pos_im else frame; } } //////////////////////////////////////////////////////////////////////////////////// Simple_frame_item = class Menuaction "_Simple Frame" "extends or shortens the central sections of a simple frame, a, to fit round a given image, b" { prefs = Workspaces.Preferences; action a b = class _result { _check_args = [ [a, "a", check_Image], [b, "b", check_Image] ]; _check_all = [ [a.coding == b.coding && a.bands == b.bands, "a.coding == b.coding && a.bands == b.bands"] ]; _vislevel = 3; ppcm = Expression "Number of pixels per cm" 25; /* Given the value of ppcm, distance between the inner edge of the frame * and the outer edge of the image. +ve values mean the frame overlaps * the image. */ overlap = Expression "Size of frame overlap in cm" 0; variables = Frame_variables 0; _type = Image_type.colour_spaces.get_name b.type; //If applied the count colour be seen for -ve values of overlap mount_options = Mount_options _type ppcm.expr; _cs = variables.corner_section.value; _ms = variables.middle_section.value; _ov = ppcm.expr * overlap.expr; _sf = variables.scale_factor.expr; _bf = variables.blend_fraction.value; //Scale frame image if required. _a = a, _sf == 1; = a, _sf == 0; = Image (resize Kernel_linear _sf _sf a.value); _im_w = b.width; _im_h = b.height + mount_options._los, mount_options.apply = b.height; _os = mount_options._los, mount_options.apply = 0; _cl = Vector mount_options.mount_colour.value, mount_options.apply = 0; //Produce scaled and resized frame. frame = simple_frame _a _im_w _im_h _ov _cs _ms _bf variables.option; //Resize image canvas and applied mount colour as required. _pos_im = frame_position_image b frame _os _cl; //Wrap frame round image. _result = if (frame == 0) then _pos_im else frame; } } //////////////////////////////////////////////////////////////////////////////////// Complex_frame_item = class Menuaction "_Complex Frame" "extends or shortens the central sections of a frame a, preserving any central edge details, to fit image b" { prefs = Workspaces.Preferences; action a b = class _result { _check_args = [ [a, "a", check_Image], [b, "b", check_Image] ]; _check_all = [ [a.coding == b.coding && a.bands == b.bands, "a.coding == b.coding && a.bands == b.bands"] ]; _vislevel = 3; ppcm = Expression "Number of pixels per cm" 25; /* Given the value of ppcm, distance between the inner edge of the frame * and the outer edge of the image. +ve values mean the frame overlaps * the image. */ overlap = Expression "Size of frame overlap in cm" 0; variables = Frame_variables 1; _type = Image_type.colour_spaces.get_name b.type; //If applied the count colour be seen for -ve values of overlap mount_options = Mount_options _type ppcm.expr; _cs = variables.corner_section.value; _es = variables.edge_section.value; _ms = variables.middle_section.value; _ov = ppcm.expr * overlap.expr; _sf = variables.scale_factor.expr; _bf = variables.blend_fraction.value; _a = a, _sf == 1; = a, _sf == 0; = Image (resize Kernel_linear _sf _sf a.value); _im_w = b.width; _im_h = b.height + mount_options._los, mount_options.apply = b.height; _os = mount_options._los, mount_options.apply = 0; _cl = Vector mount_options.colour.value, mount_options.apply = 0; //Produce scaled and resized frame. frame = complex_frame _a _im_w _im_h _ov _cs _es _ms _bf variables.option; //Resize image canvas and applied mount colour as required. _pos_im = frame_position_image b frame _os _cl; //Wrap frame round image. _result = if (frame == 0) then _pos_im else frame; } } } //////////////////////////////////////////////////////////////////////////////////// Straighten_frame_item = class Menuaction "_Straighten Frame" "uses four points to square up distorted images of frames" { action a = Perspective_item.action a; } }; //////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// Select_item = class Menupullright "_Select" "select user defined areas of an image" { prefs = Workspaces.Preferences; /* Option toggle used to define whether the user is replacing a * dark or a light area. */ _control = Option "Make" [ "Selection Brighter", "Selection Darker", "Selection Black", "Selection White", "Background Black", "Background White", "Mask" ] 4; control_selection mask im no = [ if mask then im * 1.2 else im * 1, if mask then im * 0.8 else im * 1, if mask then 0 else im, if mask then 255 else im, if mask then im else 0, if mask then im else 255, mask ]?no; Rectangle = class Menuaction "_Rectangle" "use an Arrow or Region x to define a rectangle" { action x = class _result { _vislevel = 3; control = _control; _result = control_selection mask im control { im = x.image; mask = Image m { rx = x.region_rect, is_Region x = x; b = image_new im.width im.height 1 0 0 1 0 0 0; w = image_new rx.nwidth rx.nheight 1 0 0 1 255 0 0; m = insert_noexpand rx.nleft rx.ntop w b; } } } } Elipse = class Menuaction "_Ellipse" "use a line/arrow x to define the center point radius and direction of an ellipse" { action x = class _result { _vislevel = 3; control = _control; width = Scale "Width" 0.01 1 0.5; _result = control_selection mask im control { mask = select_ellipse x width.value; im = x.image; } } } Tetragon = class Menuaction "_Tetragon" "selects the convex area defined by four points" { action a b c d = class _result { _vislevel = 3; control = _control; _result = control_selection mask im control { mask = select_tetragon a b c d; im = get_image a; } } } Polygon = class Menuaction "_Polygon" "selects a polygon from an ordered group of points" { action pt_list = class _result { _vislevel = 3; control = _control; _result = control_selection mask im control { mask = select_polygon pt_list; im = get_image ((pt_list.value)?0); } } } sep1 = Menuseparator; Threshold_item = class Menuaction "Thres_hold" "simple image threshold" { action x = class _result { _vislevel = 3; t = Scale "Threshold" 0 mx (mx / 2) { mx = Image_format.maxval x.format, is_Image x = 255; } _result = map_unary (more t.value) x; } } Threshold_percent_item = class Menuaction "Per_cent Threshold" "threshold at a percentage of pixels" { action x = class _result { _vislevel = 3; t = Scale "Percentage of pixels" 0 100 50; _result = map_unary (more (hist_thresh (t.value / 100) x)) x; } } sep2 = Menuseparator; Segment_item = class Menuaction "_Segment" "break image into disjoint regions" { action x = class _result { _vislevel = 3; segments = Expression "Number of disjoint regions" (map_unary (get_header "n-segments") _result); _result = map_unary segment x; } } }; //////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// Perspective_match_item = class Menuaction "_Perspective Match" "rotate, scale and skew one image to match another" { action x y = class _result { _vislevel = 3; // try to find an image ... for a group, get the first item find_image x = x, is_Image x = find_image x?0, is_list x = find_image x.value, is_class x && has_value x = error "unable to find image"; _a = find_image x; _b = find_image y; ap1 = Mark_relative _a 0.1 0.1; ap2 = Mark_relative _a 0.9 0.1; ap3 = Mark_relative _a 0.1 0.9; ap4 = Mark_relative _a 0.9 0.9; bp1 = Mark_relative _b 0.1 0.1; bp2 = Mark_relative _b 0.9 0.1; bp3 = Mark_relative _b 0.1 0.9; bp4 = Mark_relative _b 0.9 0.9; _result = map_binary process x y { f1 = _a.width / _b.width; f2 = _a.height / _b.height; rl = sort_pts_clockwise [ap1, ap2, ap3, ap4]; pl = sort_pts_clockwise [bp1, bp2, bp3, bp4]; to = [ rl?0.left, rl?0.top, rl?1.left, rl?1.top, rl?2.left, rl?2.top, rl?3.left, rl?3.top ]; from = [ pl?0.left * f1, pl?0.top * f2, pl?1.left * f1, pl?1.top * f2, pl?2.left * f1, pl?2.top * f2, pl?3.left * f1, pl?3.top * f2 ]; trans = perspective_transform to from; process a b = transform 1 0 trans b2 { b2 = resize Kernel_linear f1 f2 b, (f1 >= 1 && f2 >= 1) || (f1 >= 1 && f2 >= 1) = resize Kernel_linear f1 1 b1 {b1 = resize Kernel_linear 1 f2 b;} } } } }; //////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// Perspective_item = class Menuaction "Pe_rspective Distort" "rotate, scale and skew an image with respect to defined points" { action x = class _result { _vislevel = 3; // try to find an image ... for a group, get the first item find_image x = x, is_Image x = find_image x?0, is_list x = find_image x.value, is_class x && has_value x = error "unable to find image"; _a = find_image x; dir = Option "Select distort direction" [ "Distort to points", "Distort to corners" ] 1; ap1 = Mark_relative _a 0.1 0.1; ap2 = Mark_relative _a 0.9 0.1; ap3 = Mark_relative _a 0.9 0.9; ap4 = Mark_relative _a 0.1 0.9; _result = map_unary process x { trans = [perspective_transform to from, perspective_transform from to]?(dir.value) { rl = sort_pts_clockwise [ap1, ap2, ap3, ap4]; to = [(rl?0).left, (rl?0).top, (rl?1).left, (rl?1).top, (rl?2).left, (rl?2).top, (rl?3).left, (rl?3).top]; from=[0, 0, (_a.width - 1), 0, (_a.width - 1), (_a.height - 1), 0, (_a.height - 1)]; } process a = transform 1 0 trans a; } } }; nip2-8.7.0/share/nip2/compat/8.5/_generate.def0000644000175000017500000000755513273071606015520 00000000000000 /* make an image of size x by y whose pixels are their coordinates. */ make_xy x y = im_make_xy (to_real x) (to_real y); /* make an image with the specified properties ... pixel is (eg.) * Vector [0, 0, 0], or 12. If coding == labq, we ignore bands, format and * type, generate a 3 band float image, and lab2labq it before handing it * back. */ image_new w h b fmt coding type pixel xoff yoff = embed 1 0 0 w h im'''' { b' = 3, coding == Image_coding.LABPACK = b; fmt' = Image_format.FLOAT, coding == Image_coding.LABPACK = fmt; type' = Image_type.LAB, coding == Image_coding.LABPACK = type; im = im_black 1 1 (to_real b') + pixel; im' = clip2fmt fmt' im; im'' = im_Lab2LabQ im', coding == Image_coding.LABPACK; = im'; im''' = image_set_type type' im''; im'''' = image_set_origin xoff yoff im'''; } mkim options x y b = Image (image_new x y b (opt $format) (opt $coding) (opt $type) (opt $pixel) (opt $xoffset) (opt $yoffset)) { opt = get_option options [ $format => Image_format.UCHAR, $coding => Image_coding.NOCODING, $type => Image_type.sRGB, $pixel => 0, $xoffset => 0, $yoffset => 0 ]; } /* generate a slice of LAB space size x size pixels for L* == l */ lab_slice size l = image_set_type Image_type.LAB im { L = image_new size size 1 Image_format.FLOAT Image_coding.NOCODING Image_type.B_W l 0 0; A1 = im_fgrey (to_real size) (to_real size); /* im_fgrey always makes 0-1, so these ranges can be wired in. */ A2 = A1 * 256 - 128; A4 = im_rot90 A2; im = image_set_origin (size / 2) (size / 2) (L ++ A2 ++ A4); } /* Look at Image, try to make a Colour (failing that, a Vector) which is white * for that image type. */ image_white im = colour_transform_to type white_lab, bands == 3 && coding == Image_coding.NOCODING && colour_spaces.present 1 type = white_lab, coding == Image_coding.LABPACK = Vector (replicate bands (max_value.lookup 1 0 format)) { bands = im.bands; type = im.type; format = im.format; coding = im.coding; colour_spaces = Image_type.colour_spaces; // white as LAB white_lab = Colour "Lab" [100, 0, 0]; // maximum value for this numeric type max_value = Table [ [255, Image_format.DPCOMPLEX], [255, Image_format.DOUBLE], [255, Image_format.COMPLEX], [255, Image_format.FLOAT], [2 ** 31 - 1, Image_format.INT], [2 ** 32 - 1, Image_format.UINT], [2 ** 15 - 1, Image_format.SHORT], [2 ** 16 - 1, Image_format.USHORT], [2 ** 7 - 1, Image_format.CHAR], [2 ** 8 - 1, Image_format.UCHAR] ]; } /* Make a seperable gaussian mask. */ matrix_gaussian_blur radius = im_gauss_imask_sep (radius / 3) 0.2; /* Make a seperable square mask. */ matrix_blur radius = Matrix_con (sum mask_sq_line) 0 [mask_sq_line] { mask_sq_line = replicate (2 * radius - 1) 1; } /* Make a colour from a temperature. */ colour_from_temp T = error (_ "T out of range"), T < 1667 || T > 25000 = Colour "Yxy" [50, x, y] { // Kim et all approximation // see eg. http://en.wikipedia.org/wiki/Planckian_locus#Approximation x = -0.2661239 * 10 ** 9 / T ** 3 - 0.2343580 * 10 ** 6 / T ** 2 + 0.8776956 * 10 ** 3 / T + 0.179910, T < 4000 = -3.0258469 * 10 ** 9 / T ** 3 + 2.1070379 * 10 ** 6 / T ** 2 + 0.2226347 * 10 ** 3 / T + 0.240390; y = -1.1063814 * x ** 3 - 1.34811020 * x ** 2 + 2.18555832 * x - 0.20219638, T < 2222 = -0.9549476 * x ** 3 - 1.37418593 * x ** 2 + 2.09137015 * x - 0.16748867, T < 4000 = 3.0817580 * x ** 3 - 5.87338670 * x ** 2 + 3.75112997 * x - 0.37001483; } temp_from_colour z = T { c = colour_transform_to Image_type.YXY (to_colour z); x = c.value?1; y = c.value?2; // McCamy's approximation, see eg. // http://en.wikipedia.org/wiki/Color_temperature#Approximation xe = 0.332; ye = 0.1858; n = (x - xe) / (y - ye); T = -449 * n ** 3 + 3525 * n ** 2 - 6823.3 * n + 5520.33; } nip2-8.7.0/share/nip2/compat/8.5/Math.def0000644000175000017500000003162513273071606014453 00000000000000Math_arithmetic_item = class Menupullright "_Arithmetic" "basic arithmetic for objects" { Add_item = class Menuaction "_Add" "add a and b" { action a b = map_binary add a b; } Subtract_item = class Menuaction "_Subtract" "subtract b from a" { action a b = map_binary subtract a b; } Multiply_item = class Menuaction "_Multiply" "multiply a by b" { action a b = map_binary multiply a b; } Divide_item = class Menuaction "_Divide" "divide a by b" { action a b = map_binary divide a b; } Remainder_item = class Menuaction "_Remainder" "remainder after integer division of a by b" { action a b = map_binary remainder a b; } sep1 = Menuseparator; Absolute_value_item = class Menuaction "A_bsolute Value" "absolute value of x" { action x = map_unary abs x; } Absolute_value_vector_item = class Menuaction "Absolute Value _Vector" "like Absolute Value, but treat pixels as vectors" { action x = map_unary abs_vec x; } Sign_item = class Menuaction "S_ign" "unit vector" { action x = map_unary sign x; } Negate_item = class Menuaction "_Negate" "multiply by -1" { action x = map_unary unary_minus x; } } Math_trig_item = class Menupullright "_Trigonometry" "trigonometry operations (all in degrees)" { Sin_item = class Menuaction "_Sine" "calculate sine x" { action x = map_unary sin x; } Cos_item = class Menuaction "_Cosine" "calculate cosine x" { action x = map_unary cos x; } Tan_item = class Menuaction "_Tangent" "calculate tangent x" { action x = map_unary tan x; } sep1 = Menuseparator; Asin_item = class Menuaction "Arc S_ine" "calculate arc sine x" { action x = map_unary asin x; } Acos_item = class Menuaction "Arc C_osine" "calculate arc cosine x" { action x = map_unary acos x; } Atan_item = class Menuaction "Arc T_angent" "calculate arc tangent x" { action x = map_unary atan x; } sep2 = Menuseparator; Rad_item = class Menuaction "_Degrees to Radians" "convert degrees to radians" { action x = map_unary rad x; } Deg_item = class Menuaction "_Radians to Degrees" "convert radians to degrees" { action x = map_unary deg x; } sep3 = Menuseparator; Angle_range_item = class Menuaction "Angle i_n Range" "is angle within t degrees of r, mod 360" { action t r angle = clock (max - angle) < 2*r { max = clock (t + r); clock a = a + 360, a < 0; = a - 360, a >= 360; = a; } } } Math_log_item = class Menupullright "_Log" "logarithms and anti-logs" { Exponential_item = class Menuaction "_Exponential" "calculate e ** x" { action x = map_unary (power e) x; } Log_natural_item = class Menuaction "Natural _Log" "log base e of x" { action x = map_unary log x; } sep1 = Menuseparator; Exponential10_item = class Menuaction "E_xponential base 10" "calculate 10 ** x" { action x = map_unary (power 10) x; } Log10_item = class Menuaction "L_og Base 10" "log base 10 of x" { action x = map_unary log10 x; } sep2 = Menuseparator; Raise_to_power_item = class Menuaction "_Raise to Power" "calculate x ** y" { action x y = map_binary power x y; } } Math_complex_item = class Menupullright "_Complex" "operations on complex numbers and images" { Complex_extract = class Menupullright "_Extract" "extract fields from complex" { Real_item = class Menuaction "_Real" "extract real part of complex" { action in = map_unary re in; } Imaginary_item = class Menuaction "_Imaginary" "extract imaginary part of complex" { action in = map_unary im in; } } Complex_build_item = class Menuaction "_Build" "join a and b to make a complex" { action a b = map_binary comma a b; } sep1 = Menuseparator; Polar_item = class Menuaction "_Polar" "convert real and imag to amplitude and phase" { action a = map_unary polar a; } Rectangular_item = class Menuaction "_Rectagular" ("convert (amplitude, phase) image to rectangular " ++ "coordinates") { action x = map_unary rectangular x; } sep2 = Menuseparator; Conjugate_item = class Menuaction "_Conjugate" "invert imaginary part" { action x = map_unary conj x; } } Math_boolean_item = class Menupullright "_Boolean" "bitwise boolean operations for integer objects" { And_item = class Menuaction "_AND" "bitwise AND of a and b" { action a b = map_binary bitwise_and a b; } Or_item = class Menuaction "_OR" "bitwise OR of a and b" { action a b = map_binary bitwise_or a b; } Eor_item = class Menuaction "_XOR" "bitwise exclusive or of a and b" { action a b = map_binary eor a b; } Not_item = class Menuaction "_NOT" "invert a" { action a = map_unary not a; } sep1 = Menuseparator; Right_shift_item = class Menuaction "Shift _Right" "shift a right by b bits" { action a b = map_binary right_shift a b; } Left_shift_item = class Menuaction "Shift _Left" "shift a left by b bits" { action a b = map_binary left_shift a b; } sep2 = Menuseparator; If_then_else_item = class Menuaction "_If Then Else" "b where a is non-zero, c elsewhere" { action a b c = map_trinary ite a b c { // can't use if_then_else, we need a true trinary ite a b c = if a then b else c; } } Bandand_item = Image_band_item.Bandand_item; Bandor_item = Image_band_item.Bandor_item; } Math_relational_item = class Menupullright "R_elational" "comparison operations" { Equal_item = class Menuaction "_Equal to" "test a equal to b" { action a b = map_binary equal a b; } Not_equal_item = class Menuaction "_Not Equal to" "test a not equal to b" { action a b = map_binary not_equal a b; } sep1 = Menuseparator; More_item = class Menuaction "_More Than" "test a strictly greater than b" { action a b = map_binary more a b; } Less_item = class Menuaction "_Less Than" "test a strictly less than b" { action a b = map_binary less a b; } sep2 = Menuseparator; More_equal_item = class Menuaction "M_ore Than or Equal to" "test a greater than or equal to b" { action a b = map_binary more_equal a b; } Less_equal_item = class Menuaction "L_ess Than or Equal to" "test a less than or equal to b" { action a b = map_binary less_equal a b; } } Math_list_item = class Menupullright "L_ist" "operations on lists" { Head_item = class Menuaction "_Head" "first element in list" { action x = map_unary hd x; } Tail_item = class Menuaction "_Tail" "list without the first element" { action x = map_unary tl x; } Last_item = class Menuaction "_Last" "last element in list" { action x = map_unary last x; } Init_item = class Menuaction "_Init" "list without the last element" { action x = map_unary init x; } sep1 = Menuseparator; Reverse_item = class Menuaction "_Reverse" "reverse order of elements in list" { action x = map_unary reverse x; } Sort_item = class Menuaction "_Sort" "sort list into ascending order" { action x = map_unary sort x; } Make_set_item = class Menuaction "_Make Set" "remove duplicates from list" { action x = map_unary mkset equal x; } Transpose_list_item = class Menuaction "Tr_anspose" "exchange rows and columns in a list of lists" { action x = map_unary transpose x; } Concat_item = class Menuaction "_Concat" "flatten a list of lists into a single list" { action l = map_unary concat l; } sep2 = Menuseparator; Length_item = class Menuaction "L_ength" "find the length of list" { action x = map_unary len x; } Subscript_item = class Menuaction "S_ubscript" "return element n from list (index from zero)" { action n x = map_binary subscript n x; } Take_item = class Menuaction "_Take" "take the first n elements of list x" { action n x = map_binary take n x; } Drop_item = class Menuaction "_Drop" "drop the first n elements of list x" { action n x = map_binary drop n x; } sep3 = Menuseparator; Join_item = class Menuaction "_Join" "join two lists end to end" { action a b = map_binary join a b; } Difference_item = class Menuaction "_Difference" "difference of two lists" { action a b = map_binary difference a b; } Cons_item = class Menuaction "C_ons" "put element a on the front of list x" { action a x = map_binary cons a x; } Zip_item = class Menuaction "_Zip" "join two lists, pairwise" { action a b = map_binary zip2 a b; } } Math_round_item = class Menupullright "_Round" "various rounding operations" { /* smallest integral value not less than x */ Ceil_item = class Menuaction "_Ceil" "smallest integral value not less than x" { action x = map_unary ceil x; } Floor_item = class Menuaction "_Floor" "largest integral value not greater than x" { action x = map_unary floor x; } Rint_item = class Menuaction "_Round to Nearest" "round to nearest integer" { action x = map_unary rint x; } } Math_fourier_item = class Menupullright "_Fourier" "Fourier transform" { Forward_item = class Menuaction "_Forward" "fourier transform of image" { action a = map_unary (rotquad @ fwfft) a; } Reverse_item = class Menuaction "_Reverse" "inverse fourier transform of image" { action a = map_unary (invfft @ rotquad) a; } Rotate_quadrants_item = class Menuaction "Rotate _Quadrants" "rotate quadrants" { action a = map_unary rotquad a; } } Math_stats_item = class Menupullright "_Statistics" "measure various statistics of objects" { Value_item = class Menuaction "_Value" "value of point in object" { action a = class _result { _vislevel = 3; position = Expression "Coordinate" (0, 0); _result = map_binary point position.expr a; } } Mean_item = class Menuaction "_Mean" "arithmetic mean value" { action a = map_unary mean a; } Gmean_item = class Menuaction "_Geometric Mean" "geometric mean value" { action a = map_unary meang a; } Zmean_item = class Menuaction "_Zero-excluding Mean" "mean value of non-zero elements" { action a = map_unary meanze a; } Deviation_item = class Menuaction "_Standard Deviation" "standard deviation of object" { action a = map_unary deviation a; } Zdeviation_item = class Menuaction "Z_ero-excluding Standard Deviation" "standard deviation of non-zero elements" { action a = map_unary deviationze a; } Skew_item = class Menuaction "S_kew" "skew of image or list or vector" { action a = map_unary skew a; } Kurtosis_item = class Menuaction "Kurtosis" "kurtosis of image or list or vector" { action a = map_unary kurtosis a; } Stats_item = class Menuaction "Ma_ny Stats" "calculate many stats in a single pass" { action a = map_unary stats a; } sep1 = Menuseparator; Max_item = class Menuaction "M_aximum" "maximum of object" { action a = map_unary max a; } Min_item = class Menuaction "M_inimum" "minimum of object" { action a = map_unary min a; } Maxpos_item = class Menuaction "_Position of Maximum" "position of maximum in object" { action a = map_unary maxpos a; } Minpos_item = class Menuaction "P_osition of Minimum" "position of minimum in object" { action a = map_unary minpos a; } Gravity_item = class Menuaction "Centre of _Gravity" "position of centre of gravity of histogram" { action a = map_unary gravity a; } sep2 = Menuseparator; Count_set_item = class Menuaction "_Non-zeros" "number of non-zero elements in object" { action a = map_unary cset a { cset i = (mean (i != 0) * i.width * i.height) / 255; } } Count_clear_item = class Menuaction "_Zeros" "number of zero elements in object" { action a = map_unary cclear a { cclear i = (mean (i == 0) * i.width * i.height) / 255; } } Count_edges_item = class Menuaction "_Edges" "count average edges across or down image" { action x = class _result { _vislevel = 3; edge = Option "Count" [ "Horizontal lines", "Vertical lines" ] 0; _result = map_unary process x { process image = Number (edge.labels?edge) (im_cntlines image.value edge.value); } } } sep3 = Menuseparator; Linear_regression_item = class Menuaction "_Linear Regression" "fit a line to a set of points" { action xes yes = linreg xes yes; } Weighted_linear_regression_item = class Menuaction "_Weighted Linear Regression" "fit a line to a set of points and deviations" { action xes yes devs = linregw xes yes devs; } Cluster_item = class Menuaction "_Cluster" "cluster a list of numbers" { action l = class { _vislevel = 3; thresh = Expression "Threshold" 10; [_r, _w] = cluster thresh.expr l; result = _r; weights = _w; } } } Math_base_item = class Menupullright "Bas_e" "convert number bases" { Hexadecimal_item = class Menuaction "_Hexadecimal" "convert to hexadecimal (base 16)" { action a = map_unary (print_base 16) a; } Binary_item = class Menuaction "_Binary" "convert to binary (base 2)" { action a = map_unary (print_base 2) a; } Octal_item = class Menuaction "_Octal" "convert to octal (base 8)" { action a = map_unary (print_base 8) a; } } nip2-8.7.0/share/nip2/compat/8.5/Tasks.def0000644000175000017500000006407313273071606014652 00000000000000Tasks_capture_item = class Menupullright "_Capture" "useful stuff for capturing and preprocessing images" { Csv_import_item = class Menuaction "_CSV Import" "read a file of comma-separated values" { action = class _result { _vislevel = 3; path = Pathname "File to load" "empty"; start_line = Expression "Start at line" 1; rows = Expression "Lines to read (-1 for whole file)" (-1); whitespace = String "Whitespace characters" " \""; separator = String "Separator characters" ",;\t"; _result = Image blank, path.value == "empty" = Image (im_csv2vips filename) { filename = search (expand path.value) ++ ":" ++ "skip:" ++ print (start_line.expr - 1) ++ "," ++ "whi:" ++ escape whitespace.value ++ "," ++ "sep:" ++ escape separator.value ++ "," ++ "line:" ++ print rows.expr; // prefix any ',' with a '\' in the separators line escape x = foldr prefix [] x { prefix x l = '\\' : x : l, x == ',' = x : l; } blank = image_new 1 1 1 Image_format.DOUBLE Image_coding.NOCODING Image_type.B_W 0 0 0; } } } Raw_import_item = class Menuaction "_Raw Import" "read a file of binary values" { action = class _result { _vislevel = 3; path = Pathname "File to load" "empty"; across = Expression "Pixels across" 100; down = Expression "Pixels down" 100; bytes = Expression "Bytes per pixel" 3; skip = Expression "Skip over initial bytes" 0; _result = Image blank, path.value == "empty" = Image (im_binfile path.value across.expr down.expr bytes.expr skip.expr) { blank = image_new 1 1 1 Image_format.DOUBLE Image_coding.NOCODING Image_type.B_W 0 0 0; } } } // interpret Analyze header for layout and calibration Analyze7_header_item = class Menuaction "_Interpret Analyze 7 Header" "examine the Analyze header and set layout and value" { action x = x''' { // read bits of header dim n = get_header ("dsr-image_dimension.dim[" ++ print n ++ "]"); dim0 = dim 0 x; dim1 = dim 1 x; dim2 = dim 2 x; dim3 = dim 3 x; dim4 = dim 4 x; dim5 = dim 5 x; dim6 = dim 6 x; dim7 = dim 7 x; glmax = get_header "dsr-image_dimension.glmax" x; cal_max = get_header "dsr-image_dimension.cal_max" x; // oops, now a nop x' = x; // lay out higher dimensions width-ways x'' = grid dim2 dim3 1 x', dim0 == 3 = grid dim2 dim3 dim4 x', dim0 == 4 = grid (dim2 * dim4) dim5 1 (grid dim2 dim3 dim4) x', dim0 == 5 = grid (dim2 * dim4) dim5 dim6 (grid dim2 dim3 dim4) x', dim0 == 6 = grid (dim2 * dim4 * dim6) dim7 1 (grid (dim2 * dim4) dim5 dim6 (grid dim2 dim3 dim4)) x', dim0 == 7 = error (_ "unsupported dimension " ++ dim0); // multiply by scale factor to get kBeq x''' = x'' * (cal_max / glmax); } } Video_item = class Menuaction "Capture _Video Frame" "capture a frame of still video" { // shortcut to prefs prefs = Workspaces.Preferences; action = class _result { _vislevel = 3; device = prefs.VIDEO_DEVICE; channel = Option "Input channel" [ "TV", "Composite 1", "Composite 2", "Composite 3" ] prefs.VIDEO_CHANNEL; b = Scale "Brightness" 0 32767 prefs.VIDEO_BRIGHTNESS; col = Scale "Colour" 0 32767 prefs.VIDEO_COLOUR; con = Scale "Contrast" 0 32767 prefs.VIDEO_CONTRAST; hue = Scale "Hue" 0 32767 prefs.VIDEO_HUE; frames = Scale "Frames to average" 0 100 prefs.VIDEO_FRAMES; mono = Toggle "Monochrome grab" prefs.VIDEO_MONO; crop = Toggle "Crop image" prefs.VIDEO_CROP; // grab, but hide it ... if we let the crop edit _raw_grab = Image (im_video_v4l1 device channel.value b.value col.value con.value hue.value frames.value); edit_crop = Region _raw_grab left top width height { left = prefs.VIDEO_CROP_LEFT; top = prefs.VIDEO_CROP_TOP; width = min_pair prefs.VIDEO_CROP_WIDTH (_raw_grab.width + left); height = min_pair prefs.VIDEO_CROP_HEIGHT (_raw_grab.height + top); } aspect_ratio = Expression "Stretch vertically by" prefs.VIDEO_ASPECT; _result = frame' { frame = edit_crop, crop = _raw_grab; frame' = colour_transform_to Image_type.B_W frame, mono = frame; } } } Smooth_image_item = class Menuaction "_Smooth" "remove small features from image" { action in = class _result { _vislevel = 3; feature = Scale "Minimum feature size" 1 50 20; _result = map_unary (smooth feature.value) in; } } Light_correct_item = class Menuaction "_Flatfield" "use white image w to flatfield image i" { action w i = map_binary wc w i { wc w i = clip2fmt i.format (w' * i) { fac = mean w / max w; w' = fac * (max w / w); } } } Image_rank_item = Filter_rank_item.Image_rank_item; Tilt_item = Filter_tilt_item; sep1 = Menuseparator; White_balance_item = class Menuaction "_White Balance" "use average of small image to set white of large image" { action a b = class _result { _vislevel = 3; white_hint = "Set image white to:"; white = Colour_picker "Lab" [100, 0, 0]; _result = map_binary wb a b { wb a b = colour_transform_to (get_type image) image_xyz' { area x = x.width * x.height; larger x y = area x > area y; [image, patch] = sortc larger [a, b]; to_xyz = colour_transform_to Image_type.XYZ; // white balance in XYZ patch_xyz = to_colour (to_xyz patch); white_xyz = to_xyz white; facs = (mean patch_xyz / mean white_xyz) * (white_xyz / patch_xyz); image_xyz = to_xyz image; image_xyz' = image_xyz * facs; } } } } Gamma_item = Image_levels_item.Gamma_item; Tone_item = Image_levels_item.Tone_item; sep2 = Menuseparator; Crop_item = Image_crop_item; Rotate_item = Image_transform_item.Rotate_item; Flip_item = Image_transform_item.Flip_item; Resize_item = Image_transform_item.Resize_item; Rubber_item = Image_transform_item.Image_rubber_item; sep3 = Menuseparator; ICC_item = Colour_icc_item; Temp_item = Colour_temperature_item; Find_calib_item = class Menuaction "Find _Colour Calibration" "find an RGB -> XYZ transform from an image of a colour chart" { action image = class _result { _check_args = [ [image, "image", check_Image] ]; _vislevel = 3; measure = Scale (_ "Measure area (%)") 1 100 50; sample = measure_draw 6 4 (to_real measure) image; // get macbeth data file to use macbeth = Pathname "Pick a Macbeth data file" "$VIPSHOME/share/$PACKAGE/data/macbeth_lab_d65.mat"; mode = Option "Input LUT" [ "Linearize from chart greyscale", "Fit intercept from chart greyscale", "Linear input, set brightness from chart", "Linear input" ] 0; // get max of input image _max_value = Image_format.maxval image.format; // measure chart image _camera = measure_sample 6 4 (to_real measure) image; // load true values _true_Lab = Matrix_file macbeth.value; _true_XYZ = colour_transform Image_type.LAB Image_type.XYZ _true_Lab; // get Ys of greyscale _true_grey_Y = map (extract 1) (drop 18 _true_XYZ.value); // camera greyscale (all bands) _camera_grey = drop 18 _camera.value; // normalise both to 0-1 and combine _camera_grey' = map (map (multiply (1 / _max_value))) _camera_grey; _true_grey_Y' = map (multiply (1 / 100)) _true_grey_Y; _comb = Matrix (map2 cons _true_grey_Y' _camera_grey'), mode == 0 = Matrix [0: intercepts, replicate (_camera.width + 1) 1], mode == 1 = Matrix [[0, 0], [1, 1]] { intercepts = [(linreg _true_grey_Y' cam).intercept :: cam <- transpose _camera_grey']; } // make a linearising lut ... zero on left _linear_lut = im_invertlut _comb (_max_value + 1); // and display it // plot from 0 explicitly so we see the effect of mode1 (intercept // from greyscale) linearising_lut = Plot [$ymin => 0] _linear_lut; // map an image though the lineariser linear x = hist_map linearising_lut.value x, mode == 0 || mode == 1 = x; // map the chart measurements though the lineariser _camera' = (to_matrix @ linear @ to_image) _camera; // solve for RGB -> XYZ // normalise: the 2nd row is what makes Y, so divide by that to // get Y in 0-1. _pinv = (transpose _camera' * _camera') ** -1; _full_M = transpose (_pinv * (transpose _camera' * _true_XYZ)); M = _full_M / scale; scale = sum _full_M.value?1; // now turn the camera to LAB and calculate dE76 _camera'' = (to_matrix @ colour_transform Image_type.XYZ Image_type.LAB @ recomb M @ multiply scale @ to_image) _camera'; _dEs = map abs_vec (_camera'' - _true_Lab).value; avg_dE76 = mean _dEs; _max_dE = foldr max_pair 0 _dEs; _worst = index (equal _max_dE) _dEs; worst_patch = name _worst ++ " (patch " ++ print (_worst + 1) ++ ", " ++ print _max_dE ++ " dE)" { name i = macbeth_names?i, i >= 0 && i < len macbeth_names = "Unknown"; } // normalise brightness ... in linear mode, we optionally don't // set the brightness from the Macbeth chart norm x = x * scale, mode != 3 = x; // convert RGB camera to Lab _result = (Image @ colour_transform Image_type.XYZ Image_type.LAB @ norm @ recomb M @ cast_float @ linear) image.value; } } Apply_calib_item = class Menuaction "_Apply Colour Calibration" "apply an RGB -> LAB transform to an image" { action a b = class (map_binary process a b) { process a b = result, is_instanceof calib_name calib && is_Image image = error (_ "bad arguments to " ++ "Calibrate_image") { // the name of the calib object we need calib_name = "Tasks_capture_item.Find_calib_item.action"; // get the Calibrate_chart arg first [image, calib] = sortc (const (is_instanceof calib_name)) [a, b]; result = (Image @ colour_transform Image_type.XYZ Image_type.LAB @ calib.norm @ recomb calib.M @ cast_float @ calib.linear) image.value; } } } sep4 = Menuseparator; Graph_hist_item = Hist_find_item; Graph_bands_item = class Menuaction "Plot _Bands" "show image bands as a graph" { action x = class _result { _vislevel = 3; style = Option_enum "Style" Plot_style.names "Line"; auto = Toggle "Auto Range" true; ymin = Expression "Y range minimum" 0; ymax = Expression "Y range maximum" 1; _result = Plot options (to_image (bands (image x))).value { options = [$style => style.value] ++ if auto then [] else [$ymin => ymin.expr, $ymax => ymax.expr]; // try to make something image-like from it image x = extract_area x.left x.top 1 1 x.image, is_Mark x = get_image x, has_image x = get_image (to_image x); // get as [[1],[2],[3]] bands x = transpose [map mean (bandsplit x)]; } } } } Tasks_mosaic_item = class Menupullright "_Mosaic" "build image mosaics" { /* Check and group a point list by image. */ mosaic_sort_test l = error "mosaic: not all points", !is_listof is_Mark l = error "mosaic: points not on two images", !is_list_len 2 images = error "mosaic: images do not match in format and coding", !all_equal (map get_format l) || !all_equal (map get_coding l) = error "mosaic: not same number of points on each image", !foldr1 equal (map len l') = l' { // test for all elements of a list equal all_equal l = all (map (equal (hd l)) (tl l)); // all the different images images = mkset pointer_equal (map get_image l); // find all points defined on image test_image image p = (get_image p) === image; find l image = filter (test_image image) l; // group point list by image l' = map (find l) images; } /* Sort a point group to get right before left, and within each group to * get above before below. */ mosaic_sort_lr l = l'' { // sort to get upper point first above a b = a.top < b.top; l' = map (sortc above) l; // sort to get right group before left group right a b = a?0.left > b?0.left; l'' = sortc right l'; } /* Sort a point group to get top before bottom, and within each group to * get left before right. */ mosaic_sort_tb l = l'' { // sort to get upper point first left a b = a.left < b.left; l' = map (sortc left) l; // sort to get right group before left group below a b = a?0.top > b?0.top; l'' = sortc below l'; } /* Put 'em together! Group by image, sort vertically (or horizontally) with * one of the above, transpose to get pairs matched up, and flatten again. */ mosaic_sort fn = concat @ transpose @ fn @ mosaic_sort_test; Mosaic_1point_item = class Menupullright "_One Point" "join two images with a single tie point" { check_ab_args a b = [ [a, "a", check_Mark], [b, "b", check_Mark] ]; // shortcut to prefs prefs = Workspaces.Preferences; search_area = prefs.MOSAIC_WINDOW_SIZE; object_size = prefs.MOSAIC_OBJECT_SIZE; blend_width_widget = Scale "Maximum blend width" 0 100 prefs.MOSAIC_MAX_BLEND_WIDTH; refine_widget = Toggle "Refine selected tie-points" prefs.MOSAIC_REFINE; lr_mos _refine a b = class Image _result { _check_args = check_ab_args a b; bw = blend_width_widget; refine = _refine; _result = im_lrmosaic a'.image.value b'.image.value 0 a'.left a'.top b'.left b'.top (object_size / 2) (search_area / 2) 0 bw.value, refine = im_lrmerge a'.image.value b'.image.value (b'.left - a'.left) (b'.top - a'.top) bw.value { [a', b'] = mosaic_sort mosaic_sort_lr [a, b]; } } tb_mos _refine a b = class Image _result { _check_args = check_ab_args a b; bw = blend_width_widget; refine = _refine; _result = im_tbmosaic a'.image.value b'.image.value 0 a'.left a'.top b'.left b'.top (object_size / 2) (search_area / 2) 0 bw.value, refine = im_tbmerge a'.image.value b'.image.value (b'.left - a'.left) (b'.top - a'.top) bw.value { [a', b'] = mosaic_sort mosaic_sort_tb [a, b]; } } Left_right_item = class Menuaction "_Left to Right" "join two images left-right with a single tie point" { action a b = lr_mos refine_widget a b; } Top_bottom_item = class Menuaction "_Top to Bottom" "join two images top-bottom with a single tie point" { action a b = tb_mos refine_widget a b; } sep1 = Menuseparator; Left_right_manual_item = class Menuaction "Manual L_eft to Right" "join left-right, no auto-adjust of tie points" { action a b = lr_mos false a b; } Top_bottom_manual_item = class Menuaction "Manual T_op to Bottom" "join top-bottom, no auto-adjust of tie points" { action a b = tb_mos false a b; } } Mosaic_2point_item = class Menupullright "_Two Point" "join two images with two tie points" { check_abcd_args a b c d = [ [a, "a", check_Mark], [b, "b", check_Mark], [c, "c", check_Mark], [d, "d", check_Mark] ]; // shortcut to prefs prefs = Workspaces.Preferences; search_area = prefs.MOSAIC_WINDOW_SIZE; object_size = prefs.MOSAIC_OBJECT_SIZE; blend_width_widget = Scale "Maximum blend width" 0 100 prefs.MOSAIC_MAX_BLEND_WIDTH; refine_widget = Toggle "Refine selected tie-points" prefs.MOSAIC_REFINE; Left_right_item = class Menuaction "_Left to Right" "join two images left-right with a pair of tie points" { action a b c d = class Image _result { _check_args = check_abcd_args a b c d; bw = blend_width_widget; refine = refine_widget; _result = im_lrmosaic1 a'.image.value b'.image.value 0 a'.left a'.top b'.left b'.top c'.left c'.top d'.left d'.top (object_size / 2) (search_area / 2) 0 bw.value, refine = im_lrmerge1 a'.image.value b'.image.value a'.left a'.top b'.left b'.top c'.left c'.top d'.left d'.top bw.value { [a', b', c', d'] = mosaic_sort mosaic_sort_lr [a, b, c, d]; } } } Top_bottom_item = class Menuaction "_Top to Bottom" "join two images top-bottom with a pair of tie points" { action a b c d = class Image _result { _check_args = check_abcd_args a b c d; bw = blend_width_widget; refine = refine_widget; _result = im_tbmosaic1 a'.image.value b'.image.value 0 a'.left a'.top b'.left b'.top c'.left c'.top d'.left d'.top (object_size / 2) (search_area / 2) 0 bw.value, refine = im_tbmerge1 a'.image.value b'.image.value a'.left a'.top b'.left b'.top c'.left c'.top d'.left d'.top bw.value { [a', b', c', d'] = mosaic_sort mosaic_sort_tb [a, b, c, d]; } } } } sep1 = Menuseparator; Balance_item = class Menuaction "Mosaic _Balance" "disassemble mosaic, scale brightness to match, reassemble" { action x = map_unary balance x { balance x = oo_unary_function balance_op x, is_class x = im_global_balancef x Workspaces.Preferences.MOSAIC_BALANCE_GAMMA, is_image x = error (_ "bad arguments to " ++ "balance") { balance_op = Operator "balance" balance Operator_type.COMPOUND_REWRAP false; } } } //////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// Manual_balance_item = class Menupullright "Manual B_alance" "balance tonality of user defined areas" { prefs = Workspaces.Preferences; //////////////////////////////////////////////////////////////////////////////////// Balance_find_item = class Menuaction "_Find Values" "calculates values required to scale and offset balance user defined areas in a given image" /* Outputs a matrix of scale and offset values. Eg. Values required to balance the secondary * structure in an X-ray image. Takes an X-ray image an 8-bit control mask and a list of * 8-bit reference masks, where the masks are white on a black background. */ { action im_in m_control m_group = class Matrix values{ _vislevel = 1; _control_im = if m_control then im_in else 0; _control_meanmax = so_meanmax _control_im; _group_check = is_Group m_group; _m_list = m_group.value, _group_check = m_group; process m_current mat_in = mat_out {so_values = so_calculate _control_meanmax im_in m_current; mat_out = join [so_values] mat_in;} values = (foldr process [] _m_list); } } //////////////////////////////////////////////////////////////////////////////////// Balance_check_item = class Menuaction "_Check Values" "allows calculated set of scale and offset values to be checked and adjusted if required" /* Outputs adjusted matrix of scale and offset values and scale and offset image maps. * Eg. Check values required to balance the secondary structure in an X-ray image. * Takes an X-ray image an 8-bit control mask and a list of 8-bit reference masks, * where the masks are white on a black background. */ { action im_in m_matrix m_group = class Image value { _vislevel = 3; blur = Scale "Blur" 1 10 1; _blur = (blur.value/2 + 0.5), blur.value > 1 = 1; _group_check = is_Group m_group; _m_list = m_group.value, _group_check = m_group; adjust = Matrix_rec mat_a { no_masks = len _m_list; mat_a = replicate no_masks [0, 0]; } // Apply the user defined adjustments to the inputted matrix of scale and offset values _adjusted = map2 fn_adjust m_matrix.value adjust.value; fn_adjust a b = [(a?0 + b?0), (a?1 + (a?1 * b?1))]; _scaled_ims = map (fn_so_apply im_in) _adjusted; fn_so_apply im so = map_unary adj im {adj im = im * (so?0) + (so?1);} _im_pairs = zip2 _m_list _scaled_ims; // Prepare black images as starting point. //////////// _blank = image_new (_m_list?0).width (_m_list?0).height 1 6 Image_coding.NOCODING 1 0 0 0; _pair_start = [(_blank + 1), _blank]; Build = Toggle "Build Scale and Offset Correction Images" false; Output = class { _vislevel = 1; scale_im = _build?0; offset_im = _build?1; so_values = Matrix _adjusted; _build = [Image so_images?0, Image so_images?1], Build = ["Scale image not built.", "Offset image not built."] { m_list' = transpose [_m_list]; m_all = map2 join m_list' _adjusted; so_images = foldr process_2 _pair_start m_all; } } value = (foldr process_1 im_in_b _im_pairs).value {im_in_b = map_unary cast_float im_in;} process_1 m_current im_start = im_out { bl_mask = convsep (matrix_blur _blur) (get_image m_current?0); blended_im = im_blend bl_mask (m_current?1).value im_start.value; im_out = Image (clip2fmt im_start.format blended_im); } // Process for building scale and offset image. process_2 current p_start = p_out { im_s = if ((current?0) > 128) then current?1 else _blank; im_o = if ((current?0) > 128) then current?2 else _blank; im_s' = convsep (matrix_blur _blur) (im_s != 0); im_o' = convsep (matrix_blur _blur) (im_o != 0); im_s'' = im_blend im_s'.value im_s.value p_start?0; im_o'' = im_blend im_o'.value im_o.value p_start?1; p_out = [im_s'', im_o'']; } } } //////////////////////////////////////////////////////////////////////////////////// Balance_apply_item = class Menuaction "_Apply Values" "apply scale and offset corrections, defined as image maps, to a given image" /* Outputs the balanced image. Eg. Balance the secondary structure in an X-ray image. Takes an * X-ray image an 32-bit float scale image and a 32-bit offset image. */ { action im_in scale_im offset_im = class Image value { _vislevel = 1; xfactor = im_in.width/scale_im.width; yfactor = im_in.height/scale_im.height; _scale_im = resize Kernel_linear xfactor yfactor scale_im; _offset_im = resize Kernel_linear xfactor yfactor offset_im; value = get_image ( clip2fmt im_in.format ( ( im_in * _scale_im ) + _offset_im ) ); } } } Tilt_item = Filter_tilt_item; sep2 = Menuseparator; Rebuild_item = class Menuaction "_Rebuild" "disassemble mosaic, substitute image files and reassemble" { action x = class _result { _vislevel = 3; old = String "In each filename, replace" "foo"; new = String "With" "bar"; _result = map_unary remosaic x { remosaic image = Image (im_remosaic image.value old.value new.value); } } } sep3 = Menuseparator; Clone_area_item = class Menuaction "_Clone Area" "replace dark or light section of im1 with pixels from im2" { action im1 im2 = class _result { _check_args = [ [im1, "im1", check_Image], [im2, "im2", check_Image] ]; _vislevel = 3; /* Region on first image placed in the top left hand corner, * positioned and size relative to the height and width of im1. */ r1 = Region_relative im1 0.05 0.05 0.05 0.05; /* Mark on second image placed in the top left hand corner, * positioned relative to the height and width of im2. Used to * define _r2, the region from which the section of image is cloned * from. */ p2 = Mark_relative im2 0.05 0.05; _r2 = Region im2 p2.left p2.top r1.width r1.height; mask = [r1 <= Options.sc, r1 >= Options.sc]?(Options.replace); Options = class { _vislevel = 3; pause = Toggle "Pause process" true; /* Option toggle used to define whether the user is * replacing a dark or a light area. */ replace = Option "Replace" [ "A Dark Area", "A Light Area" ] 1; // Used to select the area to be replaced. sc = Scale "Scale cutoff" 0.01 mx (mx / 2) {mx = Image_format.maxval im1.format;} //Allows replacement with scale&offset balanced gaussian noise. balance = Toggle "Balance cloned data to match surroundings." true; //Allows replacement with scale&offset balanced //gaussian noise. process = Toggle "Replace area with Gaussian noise." false; } _result = im1, Options.pause = Image (im_insert im1.value patch r1.left r1.top) { r2 = Region im2 p2.left p2.top r1.width r1.height; ref_meanmax = so_meanmax (if mask then 0 else r1); mask8 = Matrix_mor [[255, 255, 255], [255, 255, 255], [255, 255, 255]]; mask_a = map_unary (dilate mask8) mask; mask_b = convsep (matrix_blur 2) mask_a; patch = so_balance ref_meanmax r1 r2 mask_b Options.process, Options.balance = so_balance ref_meanmax r1 r2 mask_b Options.process, Options.process = im_blend (get_image mask_b) (get_image r2) (get_image r1); } } } } Tasks_frame_item = Frame_item; Tasks_print_item = class Menupullright "_Print" "useful stuff for image output" { Rotate_item = Image_transform_item.Rotate_item; Flip_item = Image_transform_item.Flip_item; Resize_item = Image_transform_item.Resize_item; Tone_item = Image_levels_item.Tone_item; Sharpen_item = class Menuaction "_Sharpen" "unsharp filter tuned for typical inkjet printers" { action x = class _result { _vislevel = 3; target_dpi = Option "Sharpen for print at" [ "400 dpi", "300 dpi", "150 dpi", "75 dpi" ] 1; _result = map_unary process x { process image = sharpen params?0 params?1 params?2 params?3 params?4 params?5 (colour_transform_to Image_type.LABQ image) { // sharpen params for various dpi // just change the size of the area we search param_table = [ [7, 2.5, 40, 20, 0.5, 1.5], [5, 2.5, 40, 20, 0.5, 1.5], [3, 2.5, 40, 20, 0.5, 1.5], [11, 2.5, 40, 20, 0.5, 1.5] ]; params = param_table?target_dpi; } } } } sep1 = Menuseparator; Temp_item = Colour_temperature_item; ICC_item = Colour_icc_item; } nip2-8.7.0/share/nip2/compat/8.5/_types.def0000644000175000017500000007115113273071606015063 00000000000000/* A list of things. Do automatic iteration of unary and binary operators on * us. * List [1, 2] + [2, 3] -> List [3, 5] * hd (List [2, 3]) -> 2 * List [] == [] -> true */ List value = class _Object { _check_args = [ [value, "value", check_list] ]; // methods oo_binary_table op x = [ [apply2 op value x', op.op_name == "subscript" || op.op_name == "subscript'" || op.op_name == "equal" || op.op_name == "equal'"], [this.List (apply2 op value x'), op.op_name == "join" || op.op_name == "join'"], [this.List (map2 (apply2 op) value x'), is_list x'], [this.List (map (apply2 op' x) value), true] ] ++ super.oo_binary_table op x { op' = oo_converse op; // strip the List wrapper, if any x' = x.value, is_List x = x; apply2 op x1 x2 = oo_binary_function op x1 x2, is_class x1 = oo_binary'_function op x1 x2, is_class x2 = op.fn x1 x2; }; oo_unary_table op = [ [apply value, op.op_name == "hd" || op.op_name == "tl"], [this.List (map apply value), true] ] ++ super.oo_unary_table op { apply x = oo_unary_function op x, is_class x = op.fn x; } } /* A group of things. Loop the operation over the group. */ Group value = class _Object { _check_args = [ [value, "value", check_list] ]; // methods oo_binary_table op x = [ // if_then_else is really a trinary operator [map_trinary ite this x?0 x?1, op.op_name == "if_then_else"], [map_binary op.fn this x, is_Group x], [map_unary (\a op.fn a x) this, true] ] ++ super.oo_binary_table op x; oo_unary_table op = [ [map_unary op.fn this, true] ] ++ super.oo_unary_table op; // we can't call map_trinary directly, since it uses Group and we // don't support mutually recursive top-level functions :-( // copy-paste it here, keep in sync with the version in _stdenv map_nary fn args = fn args, groups == [] = Group (map process [0, 1 .. shortest - 1]) { groups = filter is_Group args; shortest = foldr1 min_pair (map (len @ get_value) groups); process n = NULL, any (map (is_noval n) args) = map_nary fn (map (extract n) args) { extract n arg = arg.value?n, is_Group arg = arg; is_noval n arg = is_Group arg && arg.value?n == NULL; } } // need ite as a true trinary ite a b c = if a then b else c; map_unary fn a = map_nary (list_1ary fn) [a]; map_binary fn a b = map_nary (list_2ary fn) [a, b]; map_trinary fn a b c = map_nary (list_3ary fn) [a, b, c]; } /* Single real number ... eg slider. */ Real value = class _Object { _check_args = [ [value, "value", check_real] ]; // methods oo_binary_table op x = [ [this.Real (op.fn this.value x.value), is_Real x && op.type == Operator_type.ARITHMETIC], [this.Real (op.fn this.value x), is_real x && op.type == Operator_type.ARITHMETIC], [op.fn this.value x.value, is_Real x && op.type == Operator_type.RELATIONAL], [op.fn this.value x, !is_class x] ] ++ super.oo_binary_table op x; oo_unary_table op = [ [this.Real (op.fn this.value), op.type == Operator_type.ARITHMETIC], [op.fn this.value, true] ] ++ super.oo_unary_table op; } /* Single bool ... eg Toggle. */ Bool value = class _Object { _check_args = [ [value, "value", check_bool] ]; // methods oo_binary_table op x = [ [op.fn this.value x, op.op_name == "if_then_else"], [this.Bool (op.fn this.value x.value), is_Bool x], [this.Bool (op.fn this.value x), is_bool x] ] ++ super.oo_binary_table op x; oo_unary_table op = [ [this.Bool (op.fn this.value), op.type == Operator_type.ARITHMETIC || op.type == Operator_type.RELATIONAL], [op.fn this.value, true] ] ++ super.oo_unary_table op; } /* An editable string. */ String caption value = class _Object { _check_args = [ [caption, "caption", check_string], [value, "value", check_string] ]; } /* An editable real number. */ Number caption value = class scope.Real value { _check_args = [ [caption, "caption", check_string] ]; Real x = this.Number caption x; } /* An editable expression. */ Expression caption expr = class (if is_class expr then expr else _Object) { _check_args = [ [caption, "caption", check_string], [expr, "expr", check_any] ]; } /* A ticking clock. */ Clock interval value = class scope.Real value { _check_args = [ [interval, "interval", check_real] ]; Real x = this.Clock interval x; } /* An editable filename. */ Pathname caption value = class _Object { _check_args = [ [caption, "caption", check_string], [value, "value", check_string] ]; } /* An editable fontname. */ Fontname caption value = class _Object { _check_args = [ [caption, "caption", check_string], [value, "value", check_string] ]; } /* Vector type ... just a finite list of real. Handy for wrapping an * argument to eg. im_lintra_vec. Make it behave like a single pixel image. */ Vector value = class _Object { _check_args = [ [value, "value", check_real_list] ]; bands = len value; // methods oo_binary_table op x = [ // Vector ++ Vector means bandwise join [this.Vector (op.fn this.value x.value), is_Vector x && (op.op_name == "join" || op.op_name == "join'")], [this.Vector (op.fn this.value [get_number x]), has_number x && (op.op_name == "join" || op.op_name == "join'")], // Vector ? number means extract element [op.fn this.value (get_real x), has_real x && (op.op_name == "subscript" || op.op_name == "subscript'")], // extra check for lengths equal [this.Vector (map_binaryl op.fn this.value x.value), is_Vector x && len value == len x.value && op.type == Operator_type.ARITHMETIC], [this.Vector (map_binaryl op.fn this.value (get_real x)), has_real x && op.type == Operator_type.ARITHMETIC], // need extra length check [this.Vector (map bool_to_real (map_binaryl op.fn this.value x.value)), is_Vector x && len value == len x.value && op.type == Operator_type.RELATIONAL], [this.Vector (map bool_to_real (map_binaryl op.fn this.value (get_real x))), has_real x && op.type == Operator_type.RELATIONAL], [this.Vector (op.fn this.value x.value), is_Vector x && len value == len x.value && op.type == Operator_type.COMPOUND_REWRAP], [x.Image (vec op'.op_name x.value value), is_Image x], [vec op'.op_name x value, is_image x], [op.fn this.value x, is_real x] ] ++ super.oo_binary_table op x { op' = oo_converse op; }; oo_unary_table op = [ [this.Vector (map_unaryl op.fn this.value), op.type == Operator_type.ARITHMETIC], [this.Vector (map bool_to_real (map_unaryl op.fn this.value)), op.type == Operator_type.RELATIONAL], [this.Vector (op.fn this.value), op.type == Operator_type.COMPOUND_REWRAP], [op.fn this.value, true] ] ++ super.oo_unary_table op; // turn an ip bool (or a number, for Vector) into VIPSs 255/0 bool_to_real x = 255, is_bool x && x = 255, is_number x && x != 0 = 0; } /* A rectangular array of real. */ Matrix_base value = class _Object { _check_args = [ [value, "value", check_matrix] ]; // calculate these from value width = len value?0; height = len value; // extract a rectanguar area extract left top width height = this.Matrix_base ((map (take width) @ map (drop left) @ take height @ drop top) value); // methods oo_binary_table op x = [ // mat multiply is special [this.Matrix_base mul.value, is_Matrix x && op.op_name == "multiply"], [this.Matrix_base mul'.value, is_Matrix x && op.op_name == "multiply'"], // mat divide is also special [this.Matrix_base div.value, is_Matrix x && op.op_name == "divide"], [this.Matrix_base div'.value, is_Matrix x && op.op_name == "divide'"], // power -1 means invert [this.Matrix_base inv.value, is_real x && x == -1 && op.op_name == "power"], [this.Matrix_base sq.value, is_real x && x == 2 && op.op_name == "power"], [error "matrix **-1 and **2 only", op.op_name == "power" || op.op_name == "power'"], // matrix op vector ... treat a vector as a 1 row matrix [this.Matrix_base (map (map_binaryl op'.fn x.value) this.value), is_Vector x && op.type == Operator_type.ARITHMETIC], [this.Matrix_base (map_binaryl op.fn this.value x.value), (is_Matrix x || is_Real x) && op.type == Operator_type.ARITHMETIC], [this.Matrix_base (map_binaryl op.fn this.value x), is_real x && op.type == Operator_type.ARITHMETIC], // compound ... don't do iteration [this.Matrix_base (op.fn this.value x.value), (is_Matrix x || is_Real x || is_Vector x) && op.type == Operator_type.COMPOUND_REWRAP], [op.fn this.value x, op.type == Operator_type.COMPOUND] ] ++ super.oo_binary_table op x { mul = im_matmul this x; mul' = im_matmul x this; div = im_matmul this (im_matinv x); div' = im_matmul x (im_matinv this); inv = im_matinv this; sq = im_matmul this this; op' = oo_converse op; } oo_unary_table op = [ [this.Matrix_base (map_unaryl op.fn this.value), op.type == Operator_type.ARITHMETIC], [this.Matrix_base (op.fn this.value), op.type == Operator_type.COMPOUND_REWRAP], [op.fn this.value, true] ] ++ super.oo_unary_table op; } /* How to display a matrix: text, sliders, toggles, or text plus scale/offset. */ Matrix_display = class { text = 0; slider = 1; toggle = 2; text_scale_offset = 3; is_display = member [text, slider, toggle, text_scale_offset]; } /* A matrix as VIPS sees them ... add scale, offset and filename. For nip, add * a display type as well to control how the widget renders. */ Matrix_vips value scale offset filename display = class scope.Matrix_base value { _check_args = [ [scale, "scale", check_real], [offset, "offset", check_real], [filename, "filename", check_string], [display, "display", check_matrix_display] ]; Matrix_base x = this.Matrix_vips x scale offset filename display; } /* A plain 'ol matrix which can be passed to VIPS. */ Matrix value = class Matrix_vips value 1 0 "" Matrix_display.text {} /* Specialised constructors ... for convolutions, recombinations and * morphologies. */ Matrix_con scale offset value = class Matrix_vips value scale offset "" Matrix_display.text_scale_offset {}; Matrix_rec value = class Matrix_vips value 1 0 "" Matrix_display.slider {}; Matrix_mor value = class Matrix_vips value 1 0 "" Matrix_display.toggle {}; Matrix_file filename = (im_read_dmask @ expand @ search) filename; /* A CIE colour ... a triple, plus a format (eg XYZ, Lab etc) */ Colour colour_space value = class scope.Vector value { _check_args = [ [colour_space, "colour_space", check_colour_space] ]; _check_all = [ [is_list_len 3 value, "len value == 3"] ]; Vector x = this.Colour colour_space x; // make a colour-ish thing from an image // back to Colour if we have another 3 band image // to a vector if bands > 1 // to a number otherwise itoc im = this.Colour nip_type (to_matrix im).value?0, bands == 3 = scope.Vector (map mean (bandsplit im)), bands > 1 = mean im { type = get_header "Type" im; bands = get_header "Bands" im; nip_type = Image_type.colour_spaces.lookup 1 0 type; } // methods oo_binary_table op x = [ [itoc (op.fn ((float) (to_image this).value) ((float) (to_image x).value)), // here REWRAP means go via image op.type == Operator_type.COMPOUND_REWRAP] ] ++ super.oo_binary_table op x; oo_unary_table op = [ [itoc (op.fn ((float) (to_image this).value)), op.type == Operator_type.COMPOUND_REWRAP] ] ++ super.oo_unary_table op; } // a subclass with widgets for picking a space and value Colour_picker default_colour default_value = class Colour space.item colour.expr { _vislevel = 3; space = Option_enum "Colour space" Image_type.colour_spaces default_colour; colour = Expression "Colour value" default_value; Colour_edit colour_space value = Colour_picker colour_space value; } /* Base scale type. */ Scale caption from to value = class scope.Real value { _check_args = [ [caption, "caption", check_string], [from, "from", check_real], [to, "to", check_real] ]; _check_all = [ [from < to, "from < to"] ]; Real x = this.Scale caption from to x; // methods oo_binary_table op x = [ [this.Scale caption (op.fn this.from x.from) (op.fn this.to x.to) (op.fn this.value x.value), is_Scale x && op.type == Operator_type.ARITHMETIC], [this.Scale caption (op.fn this.from x) (op.fn this.to x) (op.fn this.value x), is_real x && op.type == Operator_type.ARITHMETIC] ] ++ super.oo_binary_table op x; } /* Base toggle type. */ Toggle caption value = class scope.Bool value { _check_args = [ [caption, "caption", check_string], [value, "value", check_bool] ]; Bool x = this.Toggle caption x; } /* Base option type. */ Option caption labels value = class scope.Real value { _check_args = [ [caption, "caption", check_string], [labels, "labels", check_string_list], [value, "value", check_uint] ]; } /* An option whose value is a string rather than a number. */ Option_string caption labels item = class Option caption labels (index (equal item) labels) { Option_edit caption labels value = this.Option_string caption labels (labels?value); } /* Make an option from an enum. */ Option_enum caption enum item = class Option_string caption enum.names item { // corresponding thing value_thing = enum.get_thing item; Option_edit caption labels value = this.Option_enum caption enum (enum.names?value); } /* A rectangle. width and height can be -ve. */ Rect left top width height = class _Object { _check_args = [ [left, "left", check_real], [top, "top", check_real], [width, "width", check_real], [height, "height", check_real] ]; // derived right = left + width; bottom = top + height; oo_binary_table op x = [ [equal x, is_Rect x && (op.op_name == "equal" || op.op_name == "equal'")], [!equal x, is_Rect x && (op.op_name == "not_equal" || op.op_name == "not_equal'")], // binops with a complex are the same as (comp op comp) [oo_binary_function op this (Rect (re x) (im x) 0 0), is_complex x], // all others are just pairwise [this.Rect left' top' width' height', is_Rect x && op.type == Operator_type.ARITHMETIC], [this.Rect left'' top'' width'' height'', has_number x && op.type == Operator_type.ARITHMETIC] ] ++ super.oo_binary_table op x { left' = op.fn left x.left; top' = op.fn top x.top; width' = op.fn width x.width; height' = op.fn height x.height; left'' = op.fn left x'; top'' = op.fn top x'; width'' = op.fn width x'; height'' = op.fn height x'; x' = get_number x; } oo_unary_table op = [ // arithmetic uops just map [this.Rect left' top' width' height', op.type == Operator_type.ARITHMETIC], // compound uops are just like ops on complex // do (width, height) so thing like abs(Arrow) work as you'd expect [op.fn (width, height), op.type == Operator_type.COMPOUND] ] ++ super.oo_unary_table op { left' = op.fn left; top' = op.fn top; width' = op.fn width; height' = op.fn height; } // empty? ie. contains no pixels is_empty = width == 0 || height == 0; // normalised version, ie. make width/height +ve and flip the origin nleft = left + width, width < 0 = left; ntop = top + height, height < 0 = top; nwidth = abs width; nheight = abs height; nright = nleft + nwidth; nbottom = ntop + nheight; equal x = left == x.left && top == x.top && width == x.width && height == x.height; // contains a point? includes_point x y = nleft <= x && x <= nright && ntop <= y && y <= nbottom; // contains a rect? just test top left and bottom right points includes_rect r = includes_point r.nleft r.ntop && includes_point r.nright r.nbottom; // bounding box of two rects // if either is empty, can just return the other union r = r, is_empty = this, r.is_empty = Rect left' top' width' height' { left' = min_pair nleft r.nleft; top' = min_pair ntop r.ntop; width' = max_pair nright r.nright - left'; height' = max_pair nbottom r.nbottom - top'; } // intersection of two rects ... empty rect if no intersection intersect r = Rect left' top' width'' height'' { left' = max_pair nleft r.nleft; top' = max_pair ntop r.ntop; width' = min_pair nright r.nright - left'; height' = min_pair nbottom r.nbottom - top'; width'' = width', width > 0 = 0; height'' = height', height > 0 = 0; } // expand/collapse by n pixels margin_adjust n = Rect (left - n) (top - n) (width + 2 * n) (height + 2 * n); } /* Values for Compression field in image. */ Image_compression = class { NONE = 0; NO_COMPRESSION = 0; TCSF_COMPRESSION = 1; JPEG_COMPRESSION = 2; LABPACK_COMPRESSED = 3; RGB_COMPRESSED = 4; LUM_COMPRESSED = 5; } /* Values for Coding field in image. */ Image_coding = class { NONE = 0; NOCODING = 0; COLQUANT = 1; LABPACK = 2; RAD = 6; } /* Values for BandFmt field in image. */ Image_format = class { DPCOMPLEX = 9; DOUBLE = 8; COMPLEX = 7; FLOAT = 6; INT = 5; UINT = 4; SHORT = 3; USHORT = 2; CHAR = 1; UCHAR = 0; NOTSET = -1; maxval fmt = [ 255, // UCHAR 127, // CHAR 65535, // USHORT 32767, // SHORT 4294967295, // UINT 2147483647, // INT 255, // FLOAT 255, // COMPLEX 255, // DOUBLE 255 // DPCOMPLEX ] ? fmt, fmt >= 0 && fmt <= DPCOMPLEX = error (_ "bad value for BandFmt"); } /* A lookup table. */ Table value = class _Object { _check_args = [ [value, "value", check_rectangular] ]; /* Extract a column. */ column n = map (extract n) value; /* present col x: is there an x in column col */ present col x = member (column col) x; /* Look on column from, return matching item in column to. */ lookup from to x = value?n?to, n >= 0 = error (_ "item" ++ " " ++ print x ++ " " ++ _ "not in table") { n = index (equal x) (column from); } } /* A two column lookup table with the first column a string and the second a * thing. Used for representing various enums. Option_enum makes a selector * from one of these. */ Enum value = class Table value { _check_args = [ [value, "value", check_enum] ] { check_enum = [is_enum, _ "is [[char, *]]"]; is_enum x = is_rectangular x && is_listof is_string (map (extract 0) x); } // handy ... all the names and things as lists names = this.column 0; things = this.column 1; // is a legal name or thing has_name x = this.present 1 x; has_thing x = this.present 0 x; // map things to strings and back get_name x = this.lookup 1 0 x; get_thing x = this.lookup 0 1 x; } /* Type field. */ Image_type = class { MULTIBAND = 0; B_W = 1; HISTOGRAM = 10; XYZ = 12; LAB = 13; CMYK = 15; LABQ = 16; RGB = 17; UCS = 18; LCH = 19; LABS = 21; sRGB = 22; YXY = 23; FOURIER = 24; RGB16 = 25; GREY16 = 26; ARRAY = 27; /* Table to get names <-> numbers. */ type_names = Enum [ $MULTIBAND => MULTIBAND, $B_W => B_W, $HISTOGRAM => HISTOGRAM, $XYZ => XYZ, $LAB => LAB, $CMYK => CMYK, $LABQ => LABQ, $RGB => RGB, $UCS => UCS, $LCH => LCH, $LABS => LABS, $sRGB => sRGB, $YXY => YXY, $FOURIER => FOURIER, $RGB16 => RGB16, $GREY16 => GREY16, $ARRAY => ARRAY ]; /* Table relating nip's colour space names and VIPS's Type numbers. * Options generated from this, so match the order to the order in the * Colour menu. */ colour_spaces = Enum [ $sRGB => sRGB, $Lab => LAB, $LCh => LCH, $XYZ => XYZ, $Yxy => YXY, $UCS => UCS ]; /* A slightly larger table ... the types of colorimetric image we can * have. Add mono, and the S and Q forms of LAB. */ image_colour_spaces = Enum [ $Mono => B_W, $sRGB => sRGB, $RGB16 => RGB16, $GREY16 => GREY16, $Lab => LAB, $LabQ => LABQ, $LabS => LABS, $LCh => LCH, $XYZ => XYZ, $Yxy => YXY, $UCS => UCS ]; } /* Base image type. Simple layer over vips_image. */ Image value = class _Object { _check_args = [ [value, "value", check_image] ]; // fields from VIPS header width = get_width value; height = get_height value; bands = get_bands value; format = get_format value; bits = get_bits value; coding = get_coding value; type = get_type value; xres = get_header "Xres" value; yres = get_header "Yres" value; xoffset = get_header "Xoffset" value; yoffset = get_header "Yoffset" value; filename = get_header "filename" value; // convenience ... the area our pixels occupy, as a rect rect = Rect 0 0 width height; // operator overloading // (op Image Vector) done in Vector class oo_binary_table op x = [ // handle image ++ constant here [wrap join_result_image, (has_real x || is_Vector x) && (op.op_name == "join" || op.op_name == "join'")], [wrap ite_result_image, op.op_name == "if_then_else"], [wrap (op.fn this.value (get_image x)), has_image x], [wrap (op.fn this.value (get_number x)), has_number x], // if it's not a class on the RHS, handle here ... just apply and // rewrap [wrap (op.fn this.value x), !is_class x] // all other cases handled by other classes ] ++ super.oo_binary_table op x { // wrap the result with this // x can be a non-image, eg. compare "Image v == []" vs. // "Image v == 12" wrap x = x, op.type == Operator_type.COMPOUND || !is_image x = this.Image x; join_result_image = value ++ new_stuff, op.op_name == "join" = new_stuff ++ value { new_stuff = image_new width height new_bands format coding Image_type.B_W x xoffset yoffset; new_bands = get_bands x, has_bands x = 1; } [then_part, else_part] = x; // get things about our output from inputs in this order objects = [then_part, else_part, this]; // properties of our output image target_bands = get_member_list has_bands get_bands objects; target_type = get_member_list has_type get_type objects; // if one of then/else is an image, get the target format from that // otherwise, let the non-image objects set the target target_format = get_member_list has_format get_format x, has_member_list has_format x = NULL; to_image x = to_image_size width height target_bands target_format x; [then', else'] = map to_image x; ite_result_image = image_set_type target_type (if value then then' else else'); } // FIXME ... yuk ... don't use operator hints, just always rewrap if // we have an image result // forced on us by things like abs: // abs Vector -> real // abs Image -> Image // does not fit well with COMPOUND/whatever scheme oo_unary_table op = [ [this.Image result, is_image result], [result, true] ] ++ super.oo_unary_table op { result = op.fn this.value; } } /* Construct an image from a file. */ Image_file filename = class Image value { _check_args = [ [filename, "filename", check_string] ]; value = vips_image filename; } Region image left top width height = class Image value { _check_args = [ [image, "Image", check_Image], [left, "left", check_real], [top, "top", check_real], [width, "width", check_preal], [height, "height", check_preal] ]; // a rect for our coordinates // region.rect gets the rect for the extracted image region_rect = Rect left top width height; // we need to always succeed ... value is our enclosing image if we're // out of bounds value = extract_area left top width height image.value, image.rect.includes_rect region_rect = image.value; } Area image left top width height = class scope.Region image left top width height { Region image left top width height = this.Area image left top width height; } Arrow image left top width height = class scope.Rect left top width height { _check_args = [ [image, "Image", check_Image], [left, "left", check_real], [top, "top", check_real], [width, "width", check_real], [height, "height", check_real] ]; Rect l t w h = this.Arrow image l t w h; } HGuide image top = class scope.Arrow image image.rect.left top image.width 0 { Arrow image left top width height = this.HGuide image top; } VGuide image left = class scope.Arrow image left image.rect.top 0 image.height { Arrow image left top width height = this.VGuide image left; } Mark image left top = class scope.Arrow image left top 0 0 { Arrow image left top width height = this.Mark image left top; } // convenience functions: ... specify position as [0 .. 1) Region_relative image u v w h = Region image (image.width * u) (image.height * v) (image.width * w) (image.height * h); Area_relative image u v w h = Area image (image.width * u) (image.height * v) (image.width * w) (image.height * h); Arrow_relative image u v w h = Arrow image (image.width * u) (image.height * v) (image.width * w) (image.height * h); VGuide_relative image v = VGuide image (image.height * v); HGuide_relative image u = HGuide image (image.width * u); Mark_relative image u v = Mark image (image.width * u) (image.height * v); Kernel_type = class { NEAREST_NEIGHBOUR = 0; LINEAR = 1; CUBIC = 2; LANCZOS2 = 3; LANCZOS3 = 4; // Should introspect to get the list of interpolators :-( // We can "dir" on VipsInterpolate to get a list of them, but we // can't get i18n'd descriptions until we have more // introspection stuff in nip2. /* Table to map kernel numbers to descriptive strings */ descriptions = [ _ "Nearest neighbour", _ "Linear", _ "Cubic", _ "Lanczos, two lobes", _ "Lanczos, three lobes" ]; /* And to vips enum nicknames. */ types = [ "nearest", "linear", "cubic", "lanczos2", "lanczos3" ]; } Kernel type = class { value = Kernel_type.types?type; } Kernel_linear = Kernel Kernel_type.LINEAR; Kernel_picker default = class Kernel kernel.value { _vislevel = 2; kernel = Option "Kernel" Kernel_type.descriptions default; } Interpolate_type = class { NEAREST_NEIGHBOUR = 0; BILINEAR = 1; BICUBIC = 2; LBB = 3; NOHALO = 4; VSQBS = 5; // Should introspect to get the list of interpolators :-( // We can "dir" on VipsInterpolate to get a list of them, but we // can't get i18n'd descriptions until we have more // introspection stuff in nip2. /* Table to map interpol numbers to descriptive strings */ descriptions = [ _ "Nearest neighbour", _ "Bilinear", _ "Bicubic", _ "Upsize: reduced halo bicubic (LBB)", _ "Upsharp: reduced halo bicubic with edge sharpening (Nohalo)", _ "Upsmooth: quadratic B-splines with jaggy reduction (VSQBS)" ]; /* And to vips type names. */ types = [ "VipsInterpolateNearest", "VipsInterpolateBilinear", "VipsInterpolateBicubic", "VipsInterpolateLbb", "VipsInterpolateNohalo", "VipsInterpolateVsqbs" ]; } Interpolate type options = class { value = vips_object_new Interpolate_type.types?type [] options; } Interpolate_bilinear = Interpolate Interpolate_type.BILINEAR []; Interpolate_picker default = class Interpolate interp.value [] { _vislevel = 2; interp = Option "Interpolation" Interpolate_type.descriptions default; } Render_intent = class { PERCEPTUAL = 0; RELATIVE = 1; SATURATION = 2; ABSOLUTE = 3; /* Table to get names <-> numbers. */ names = Enum [ _ "Perceptual" => PERCEPTUAL, _ "Relative" => RELATIVE, _ "Saturation" => SATURATION, _ "Absolute" => ABSOLUTE ]; } // abstract base class for toolkit menus Menu = class {} // a "----" line in a menu Menuseparator = class Menu {} // abstract base class for items in menus Menuitem label tooltip = class Menu {} Menupullright label tooltip = class Menuitem label tooltip {} Menuaction label tooltip = class Menuitem label tooltip {} /* Plots. */ Plot_style = class { POINT = 0; LINE = 1; SPLINE = 2; BAR = 3; names = Enum [ _ "Point" => POINT, _ "Line" => LINE, _ "Spline" => SPLINE, _ "Bar" => BAR ]; } Plot_format = class { YYYY = 0; XYYY = 1; XYXY = 2; names = Enum [ _ "YYYY" => YYYY, _ "XYYY" => XYXY, _ "XYXY" => XYXY ]; } Plot_type = class { /* Lots of Ys (ie. multiple line plots). */ YYYY = 0; /* First column of matrix is X position, others are Ys (ie. multiple XY * line plots, all with the same Xes). */ XYYY = 1; /* Many independent XY plots. */ XYXY = 2; } /* "options" is a list of ["key", value] pairs. */ Plot options value = class scope.Image value { Image value = this.Plot options value; to_image dpi = extract_bands 0 3 (graph_export_image (to_real dpi) this); } Plot_matrix options value = class Plot options (to_image value).value { } Plot_histogram value = class scope.Plot [] value { } Plot_xy value = class scope.Plot [$format => Plot_format.XYYY] value { } /* A no-value type. Call it NULL for C-alike fun. Used by Group to indicate * empty slots, for example. */ NULL = class _Object { oo_binary_table op x = [ // the only operation we allow is equality .. use pointer equality, // this lets us test a == NULL and a != NULL [this === x, op.type == Operator_type.RELATIONAL && op.op_name == "equal"], [this !== x, op.type == Operator_type.RELATIONAL && op.op_name == "not_equal"] ] ++ super.oo_binary_table op x; } nip2-8.7.0/share/nip2/compat/8.5/Makefile.am0000644000175000017500000000062113273071606015126 00000000000000startdir = $(pkgdatadir)/compat/8.5 start_DATA = \ Math.def \ Image.def \ Magick.def \ Colour.def \ Tasks.def \ Object.def \ Filter.def \ Matrix.def \ Widgets.def \ Histogram.def \ Preferences.ws \ _joe_extra.def \ _joe_utilities.def \ _convert.def \ _generate.def \ _list.def \ _predicate.def \ _stdenv.def \ _Object.def \ _magick.def \ _types.def EXTRA_DIST = $(start_DATA) nip2-8.7.0/share/nip2/compat/8.2/0000755000175000017500000000000013350464161013146 500000000000000nip2-8.7.0/share/nip2/compat/8.2/_stdenv.def0000644000175000017500000020121613224651032015205 00000000000000/* optional args to functions */ get_option options defaults f = error (_ "unknown parameter " ++ f), hits == [] = hits?0 { hits = [v :: [n, v] <- options ++ defaults; n == f]; } /* Various operators as functions. */ logical_and a b = a && b; logical_or a b = a || b; bitwise_and a b = a & b; bitwise_or a b = a | b; eor a b = a ^ b; left_shift a b = a << b; right_shift a b = a >> b; not a = !a; less a b = a < b; more a b = a > b; less_equal a b = a <= b; more_equal a b = a >= b; equal a b = a == b; not_equal a b = a != b; pointer_equal a b = a === b; not_pointer_equal a b = a !== b; add a b = a + b; subtract a b = a - b; multiply a b = a * b; divide a b = a / b; idivide a b = (int) ((int) a / (int) b); power a b = a ** b; square x = x * x; remainder a b = a % b; cons a b = a : b; dot a b = a . ( b ); join a b = a ++ b; // 'difference' is defined in _list subscript a b = a ? b; generate s n f = [s, n .. f]; comma r i = (r, i); compose f g = f @ g; // our only trinary operator is actually a binary operator if_then_else a x = if a then x?0 else x?1; cast_unsigned_char x = (unsigned char) x; cast_signed_char x = (signed char) x; cast_unsigned_short x = (unsigned short) x; cast_signed_short x = (signed short) x; cast_unsigned_int x = (unsigned int) x; cast_signed_int x = (signed int) x; cast_float x = (float) x; cast_double x = (double) x; cast_complex x = (complex) x; cast_double_complex x = (double complex) x; unary_minus x = -x; negate x = !x; complement x = ~x; unary_plus x = +x; // the function we call for "a -> v" expressions mksvpair s v = [s, v], is_string s = error "not str on lhs of ->"; // the vector ops ... im is an image, vec is a real_list vec op_name im vec = im_lintra_vec ones im vec, op_name == "add" || op_name == "add'" = im_lintra_vec ones (-1 * im) vec, op_name == "subtract'" = im_lintra_vec ones im inv, op_name == "subtract" = im_lintra_vec vec im zeros, op_name == "multiply" || op_name == "multiply'" = im_lintra_vec vec (1 / im) zeros, op_name == "divide'" = im_lintra_vec recip im zeros, op_name == "divide" = im_expntra_vec im vec, op_name == "power'" = im_powtra_vec im vec, op_name == "power" = im_remainderconst_vec im vec, op_name == "remainder" = im_andimage_vec im vec, op_name == "bitwise_and" || op_name == "bitwise_and'" = im_orimage_vec im vec, op_name == "bitwise_or" || op_name == "bitwise_or'" = im_eorimage_vec im vec, op_name == "eor" || op_name == "eor'" = im_equal_vec im vec, op_name == "equal" || op_name == "equal'" = im_notequal_vec im vec, op_name == "not_equal" || op_name == "not_equal'" = im_less_vec im vec, op_name == "less" = im_moreeq_vec im vec, op_name == "less'" = im_lesseq_vec im vec, op_name == "less_equal" = im_more_vec im vec, op_name == "less_equal'" = error ("unimplemented vector operation: " ++ op_name) { zeros = replicate (len vec) 0; ones = replicate (len vec) 1; recip = map (divide 1) vec; inv = map (multiply (-1)) vec; } // make a name value pair mknvpair n v = [n, v], is_string n = error "not [char] on LHS of =>"; /* Macbeth chart patch names. */ macbeth_names = [ "Dark skin", "Light skin", "Blue sky", "Foliage", "Blue flower", "Bluish green", "Orange", "Purplish blue", "Moderate red", "Purple", "Yellow green", "Orange yellow", "Blue", "Green", "Red", "Yellow", "Magenta", "Cyan", "White (density 0.05)", "Neutral 8 (density 0.23)", "Neutral 6.5 (density 0.44)", "Neutral 5 (density 0.70)", "Neutral 3.5 (density 1.05)", "Black (density 1.50)" ]; bandsplit x = oo_unary_function bandsplit_op x, is_class x = map (subscript x) [0 .. bands - 1], is_image x = error (_ "bad arguments to " ++ "bandsplit") { bands = get_header "Bands" x; bandsplit_op = Operator "bandsplit" (map Image @ bandsplit) Operator_type.COMPOUND false; } bandjoin l = wrapper joined, has_wrapper = joined, is_listof has_image l = error (_ "bad arguments to " ++ "bandjoin") { has_wrapper = has_member_list (has_member "Image") l; wrapper = get_member_list (has_member "Image") (get_member "Image") l; joined = im_gbandjoin (map get_image l); } bandand x = oo_unary_function bandand_op x, is_class x = foldr1 bitwise_and (bandsplit x), is_image x = error (_ "bad arguments to " ++ "bandand") { bandand_op = Operator "bandand" bandand Operator_type.COMPOUND_REWRAP false; } bandor x = oo_unary_function bandor_op x, is_class x = foldr1 bitwise_or (bandsplit x), is_image x = error (_ "bad arguments to " ++ "bandor") { bandor_op = Operator "bandor" bandor Operator_type.COMPOUND_REWRAP false; } sum x = oo_unary_function sum_op x, is_class x = im_avg x * (get_width x) * (get_height x) * (get_bands x), is_image x = sum_list x, is_list x = error (_ "bad arguments (" ++ print x ++ ") to " ++ "sum") { sum_op = Operator "sum" sum Operator_type.COMPOUND false; // add elements in a nested-list thing sum_list l = foldr acc 0 l { acc x total = total + sum x, is_list x = total + x; } } product x = oo_unary_function product_op x, is_class x = product_list x, is_list x // (product image) doesn't make much sense :( = error (_ "bad arguments (" ++ print x ++ ") to " ++ "product") { product_op = Operator "product" product Operator_type.COMPOUND false; product_list l = foldr prod 1 l { prod x total = total * product x, is_list x = total * x; } } mean x = oo_unary_function mean_op x, is_class x = im_avg x, is_image x = mean_list x, is_list x = error (_ "bad arguments (" ++ print x ++ ") to " ++ "mean") { mean_op = Operator "mean" mean Operator_type.COMPOUND false; mean_list l = sum l / size l; // number of elements in some sort of nested-list thing size l = foldr acc 0 l { acc x total = total + size x, is_list x = total + 1; } } meang x = (appl (power e) @ mean @ appl log) x { appl fn x = map fn x, is_list x = fn x; } skew x = oo_unary_function skew_op x, is_class x = sum ((x - m) ** 3) / ((N - 1) * s ** 3), is_image x = sum ((Group x' - m) ** 3).value / ((N - 1) * s ** 3), is_list x = error (_ "bad arguments (" ++ print x ++ ") to " ++ "skew") { skew_op = Operator "skew" skew Operator_type.COMPOUND false; // squash any large matrix down to a flat list ... much simpler x' = x, is_image x; = flatten x; m = mean x'; s = deviation x'; w = get_width x'; h = get_height x'; b = get_bands x'; N = w * h * b, is_image x' = len x'; } kurtosis x = oo_unary_function kurtosis_op x, is_class x = sum ((x - m) ** 4) / ((N - 1) * s ** 4), is_image x = sum ((Group x' - m) ** 4).value / ((N - 1) * s ** 4), is_list x = error (_ "bad arguments (" ++ print x ++ ") to " ++ "kurtosis") { kurtosis_op = Operator "kurtosis" kurtosis Operator_type.COMPOUND false; // squash any large matrix down to a flat list ... much simpler x' = x, is_image x; = flatten x; m = mean x'; s = deviation x'; w = get_width x'; h = get_height x'; b = get_bands x'; N = len x', is_list x'; = w * h * b; } // zero-excluding mean meanze x = oo_unary_function meanze_op x, is_class x = meanze_image_hist x, is_image x && (fmt == Image_format.UCHAR || fmt == Image_format.USHORT) = meanze_image x, is_image x = meanze_list x, is_list x = error (_ "bad arguments (" ++ print x ++ ") to " ++ "meanze") { fmt = get_format x; meanze_op = Operator "meanze" meanze Operator_type.COMPOUND false; meanze_list l = sum l / size l; // number of non-zero elements in some sort of nested-list thing size l = foldr acc 0 l { acc x total = total + size x, is_list x = total + 1, x != 0; = total; } // add elements in a nested-list thing sum l = foldr acc 0 l { acc x total = total + sum x, is_list x = total + x; } // image mean, for any image type meanze_image i = sum / N { w = get_width i; h = get_height i; b = get_bands i; st = stats i; sum = st.value?0?2; // find non-zero pixels (not zero in all bands) zp = im_notequal_vec i (replicate b 0); // number of non-zero pixels N = b * (mean zp * w * h) / 255; } // image mean for 8 and 16-bit unsigned images // we can use a histogram, yay, and save a pass through the image meanze_image_hist i = sum / N { // histogram, knock out zeros hist = hist_find i; black = image_new 1 1 (get_bands hist) (get_format hist) (get_coding hist) (get_type hist) 0 0 0; histze = insert 0 0 black hist; // matching identity iden = im_identity_ushort (get_bands hist) (get_width hist), (get_width hist) > 256 = im_identity (get_bands hist); // number of non-zero pixels N = mean histze * 256; // sum of pixels sum = mean (hist * iden) * 256; } } deviation x = oo_unary_function deviation_op x, is_class x = im_deviate x, is_image x = deviation_list x, is_real_list x || is_matrix x = error (_ "bad arguments to " ++ "deviation") { deviation_op = Operator "deviation" deviation Operator_type.COMPOUND false; deviation_list l = (abs (s2 - (s * s / n)) / (n - 1)) ** 0.5 { [n, s, s2] = sum_sum2_list l; } // return n, sum, sum of squares for a list of reals sum_sum2_list x = foldr accumulate [0, 0, 0] x { accumulate x sofar = [n + 1, x + s, x * x + s2], is_real x = [n + n', s + s', s2 + s2'], is_list x = error "sum_sum2_list: not real or [real]" { [n, s, s2] = sofar; [n', s', s2'] = sum_sum2_list x; } } } deviationze x = oo_unary_function deviationze_op x, is_class x = deviationze_image x, is_image x = deviationze_list x, is_real_list x || is_matrix x = error (_ "bad arguments to " ++ "deviationze") { deviationze_op = Operator "deviationze" deviationze Operator_type.COMPOUND false; deviationze_list l = (abs (s2 - (s * s / n)) / (n - 1)) ** 0.5 { [n, s, s2] = sum_sum2_list l; } // return number of non-zero elements, sum, sum of squares for a list of // reals sum_sum2_list x = foldr accumulate [0, 0, 0] x { accumulate x sofar = sofar, is_real x && x == 0 = [n + 1, x + s, x * x + s2], is_real x = [n + n', s + s', s2 + s2'], is_list x = error "sum_sum2_list: not real or [real]" { [n, s, s2] = sofar; [n', s', s2'] = sum_sum2_list x; } } deviationze_image i = ((sum2 - sum * sum / N) / (N - 1)) ** 0.5 { w = get_width i; h = get_height i; b = get_bands i; st = stats i; sum = st.value?0?2; sum2 = st.value?0?3; // find non-zero pixels (not zero in all bands) zp = im_notequal_vec i (replicate b 0); // number of non-zero pixels N = b * (mean zp * w * h) / 255; } } // find the centre of gravity of a histogram gravity x = oo_unary_function gravity_op x, is_class x = im_hist_gravity x, is_hist x = gravity_list x, is_list x = error (_ "bad arguments to " ++ "gravity") { gravity_op = Operator "gravity" gravity Operator_type.COMPOUND false; // centre of gravity of a histogram... use the histogram to weight an // identity, then sum, then find the mean element im_hist_gravity h = m { // make horizontal h' = rot270 h, get_width h == 1 = h, get_height h == 1 = error "width or height not 1"; // number of elements w = get_width h'; // matching identity i = im_identity_ushort 1 w, w <= 2 ** 16 - 1 = make_xy w 1 ? 0; // weight identity and sum s = mean (i * h') * w; // sum of original histogram s' = mean h * w; // weighted mean m = s / s'; } gravity_list l = m { w = len l; // matching identity i = [0, 1 .. w - 1]; // weight identity and sum s = sum (map2 multiply i l); // sum of original histogram s' = sum l; // weighted mean m = s / s'; } } project x = oo_unary_function project_op x, is_class x = im_project x, is_image x = error (_ "bad arguments to " ++ "project") { project_op = Operator "project" project Operator_type.COMPOUND false; } abs x = oo_unary_function abs_op x, is_class x = im_abs x, is_image x = abs_cmplx x, is_complex x = abs_num x, is_real x = abs_list x, is_real_list x = abs_list (map abs_list x), is_matrix x = error (_ "bad arguments to " ++ "abs") { abs_op = Operator "abs" abs Operator_type.COMPOUND false; abs_list l = (sum (map square l)) ** 0.5; abs_num n = n, n >= 0 = -n; abs_cmplx c = ((re c)**2 + (im c)**2) ** 0.5; } copy x = oo_unary_function copy_op x, is_class x = im_copy x, is_image x = x { copy_op = Operator "copy" copy Operator_type.COMPOUND_REWRAP false; } // like abs, but treat pixels as vectors ... ie. always get a 1-band image // back ... also treat matricies as lists of vectors // handy for dE from object difference abs_vec x = oo_unary_function abs_vec_op x, is_class x = abs_vec_image x, is_image x = abs_vec_cmplx x, is_complex x = abs_vec_num x, is_real x = abs_vec_list x, is_real_list x = mean (map abs_vec_list x), is_matrix x = error (_ "bad arguments to " ++ "abs_vec") { abs_vec_op = Operator "abs_vec" abs_vec Operator_type.COMPOUND false; abs_vec_list l = (sum (map square l)) ** 0.5; abs_vec_num n = n, n >= 0 = -n; abs_vec_cmplx c = ((re c)**2 + (im c)**2) ** 0.5; abs_vec_image im = (sum (map square (bandsplit im))) ** 0.5; } transpose x = oo_unary_function transpose_op x, is_class x = transpose_image x, is_image x = transpose_list x, is_listof is_list x = error (_ "bad arguments to " ++ "transpose") { transpose_op = Operator "transpose" transpose Operator_type.COMPOUND_REWRAP false; transpose_list l = [], l' == [] = (map hd l') : (transpose_list (map tl l')) { l' = takewhile (not_equal []) l; } transpose_image = im_flipver @ im_rot270; } rot45 x = oo_unary_function rot45_op x, is_class x = error "rot45 image: not implemented", is_image x = error (_ "bad arguments to " ++ "rot45") { rot45_op = Operator "rot45" rot45_object Operator_type.COMPOUND_REWRAP false; rot45_object x = rot45_matrix x, is_odd_square_matrix x = error "rot45 image: not implemented", is_image x = error (_ "bad arguments to " ++ "rot45"); // slow, but what the heck rot45_matrix l = (im_rotate_dmask45 (Matrix l)).value; } // apply an image function to a [[real]] ... matrix is converted to a 1 band // image for processing apply_matrix_as_image fn m = (get_value @ im_vips2mask @ fn @ im_mask2vips @ Matrix) m; // a general image/matrix operation where the mat version is most easily done // by converting mat->image->mat apply_matim_operation name fn x = oo_unary_function class_op x, is_class x = fn x, is_image x = apply_matrix_as_image fn x, is_matrix x = error (_ "bad arguments to " ++ name) { class_op = Operator name (apply_matim_operation name fn) Operator_type.COMPOUND_REWRAP false; } rot90 = apply_matim_operation "rot90" im_rot90; rot180 = apply_matim_operation "rot180" im_rot180; rot270 = apply_matim_operation "rot270" im_rot270; rotquad = apply_matim_operation "rotquad" im_rotquad; fliplr = apply_matim_operation "fliplr" im_fliphor; fliptb = apply_matim_operation "flipud" im_flipver; image_set_type type x = oo_unary_function image_set_type_op x, is_class x = im_copy_set x (to_real type) (get_header "Xres" x) (get_header "Yres" x) (get_header "Xoffset" x) (get_header "Yoffset" x), is_image x = error (_ "bad arguments to " ++ "image_set_type:" ++ print type ++ " " ++ print x) { image_set_type_op = Operator "image_set_type" (image_set_type type) Operator_type.COMPOUND_REWRAP false; } image_set_origin xoff yoff x = oo_unary_function image_set_origin_op x, is_class x = im_copy_set x (get_header "Type" x) (get_header "Xres" x) (get_header "Yres" x) (to_real xoff) (to_real yoff), is_image x = error (_ "bad arguments to " ++ "image_set_origin") { image_set_origin_op = Operator "image_set_origin" (image_set_origin xoff yoff) Operator_type.COMPOUND_REWRAP false; } cache tile_width tile_height max_tiles x = oo_unary_function cache_op x, is_class x = im_tile_cache_random x (to_real tile_width) (to_real tile_height) (to_real max_tiles), is_image x = error (_ "bad arguments to " ++ "cache") { cache_op = Operator "cache" (cache tile_width tile_height max_tiles) Operator_type.COMPOUND_REWRAP false; } tile across down x = oo_unary_function tile_op x, is_class x = im_replicate x (to_real across) (to_real down), is_image x = error (_ "bad arguments to " ++ "tile") { tile_op = Operator "tile" (tile across down) Operator_type.COMPOUND_REWRAP false; } grid tile_height across down x = oo_unary_function grid_op x, is_class x = im_grid x (to_real tile_height) (to_real across) (to_real down), is_image x = error (_ "bad arguments to " ++ "grid") { grid_op = Operator "grid" (grid tile_height across down) Operator_type.COMPOUND_REWRAP false; } max_pair a b = a, a > b = b; min_pair a b = a, a < b = b; range min value max = min_pair max (max_pair min value); max x = oo_unary_function max_op x, is_class x = im_max x, is_image x = max_list x, is_list x = x, is_number x = error (_ "bad arguments to " ++ "max") { max_op = Operator "max" max Operator_type.COMPOUND false; max_list x = error "max []", x == [] = foldr1 max_pair x, is_real_list x = foldr1 max_pair (map max_list x), is_list x = max x; } min x = oo_unary_function min_op x, is_class x = im_min x, is_image x = min_list x, is_list x = x, is_number x = error (_ "bad arguments to " ++ "min") { min_op = Operator "min" min Operator_type.COMPOUND false; min_list x = error "min []", x == [] = foldr1 min_pair x, is_real_list x = foldr1 min_pair (map min_list x), is_list x = min x; } maxpos x = oo_unary_function maxpos_op x, is_class x = im_maxpos x, is_image x = maxpos_matrix x, is_matrix x = maxpos_list x, is_list x = error (_ "bad arguments to " ++ "maxpos") { maxpos_op = Operator "maxpos" maxpos Operator_type.COMPOUND false; maxpos_matrix m = (-1, -1), m == [[]] = (indexes?row, row) { max_value = max (Matrix m); indexes = map (index (equal max_value)) m; row = index (not_equal (-1)) indexes; } maxpos_list l = -1, l == [] = index (equal (max l)) l; } minpos x = oo_unary_function minpos_op x, is_class x = im_minpos x, is_image x = minpos_matrix x, is_matrix x = minpos_list x, is_list x = error (_ "bad arguments to " ++ "minpos") { minpos_op = Operator "minpos" minpos Operator_type.COMPOUND false; minpos_matrix m = (-1, -1), m == [[]] = (indexes?row, row) { min_value = min (Matrix m); indexes = map (index (equal min_value)) m; row = index (not_equal (-1)) indexes; } minpos_list l = -1, l == [] = index (equal (min l)) l; } stats x = oo_unary_function stats_op x, is_class x = im_stats x, is_image x = im_stats (to_image x).value, is_matrix x = error (_ "bad arguments to " ++ "stats") { stats_op = Operator "stats" stats Operator_type.COMPOUND false; } e = 2.7182818284590452354; pi = 3.14159265358979323846; rad d = 2 * pi * (d / 360); deg r = 360 * r / (2 * pi); sign x = oo_unary_function sign_op x, is_class x = im_sign x, is_image x = sign_cmplx x, is_complex x = sign_num x, is_real x = error (_ "bad arguments to " ++ "sign") { sign_op = Operator "sign" sign Operator_type.COMPOUND_REWRAP false; sign_num n = 0, n == 0 = 1, n > 0 = -1; sign_cmplx c = (0, 0), mod == 0 = (re c / mod, im c / mod) { mod = abs c; } } rint x = oo_unary_function rint_op x, is_class x = im_rint x, is_image x = rint_value x, is_number x = error (_ "bad arguments to " ++ "rint") { rint_op = Operator "rint" rint Operator_type.ARITHMETIC false; rint_value x = (int) (x + 0.5), x > 0 = (int) (x - 0.5); } scale x = oo_unary_function scale_op x, is_class x = (unsigned char) x, is_number x = im_scale x, is_image x = scale_list x, is_real_list x || is_matrix x = error (_ "bad arguments to " ++ "scale") { scale_op = Operator "scale" scale Operator_type.COMPOUND_REWRAP false; scale_list l = apply_scale s o l { mn = find_limit min_pair l; mx = find_limit max_pair l; s = 255.0 / (mx - mn); o = -(mn * s); } find_limit fn l = find_limit fn (map (find_limit fn) l), is_listof is_list l = foldr1 fn l; apply_scale s o x = x * s + o, is_number x = map (apply_scale s o) x; } scaleps x = oo_unary_function scale_op x, is_class x = im_scaleps x, is_image x = error (_ "bad arguments to " ++ "scale") { scale_op = Operator "scaleps" scaleps Operator_type.COMPOUND_REWRAP false; } fwfft x = oo_unary_function fwfft_op x, is_class x = im_fwfft x, is_image x = error (_ "bad arguments to " ++ "fwfft") { fwfft_op = Operator "fwfft" fwfft Operator_type.COMPOUND_REWRAP false; } invfft x = oo_unary_function invfft_op x, is_class x = im_invfftr x, is_image x = error (_ "bad arguments to " ++ "invfft") { invfft_op = Operator "invfft" invfft Operator_type.COMPOUND_REWRAP false; } falsecolour x = oo_unary_function falsecolour_op x, is_class x = image_set_type Image_type.sRGB (im_falsecolour x), is_image x = error (_ "bad arguments to " ++ "falsecolour") { falsecolour_op = Operator "falsecolour" falsecolour Operator_type.COMPOUND_REWRAP false; } polar x = oo_unary_function polar_op x, is_class x = im_c2amph x, is_image x = polar_cmplx x, is_complex x = error (_ "bad arguments to " ++ "polar") { polar_op = Operator "polar" polar Operator_type.COMPOUND false; polar_cmplx r = (l, a) { a = 270, x == 0 && y < 0 = 90, x == 0 && y >= 0 = 360 + atan (y / x), x > 0 && y < 0 = atan (y / x), x > 0 && y >= 0 = 180 + atan (y / x); l = (x ** 2 + y ** 2) ** 0.5; x = re r; y = im r; } } rectangular x = oo_unary_function rectangular_op x, is_class x = im_c2rect x, is_image x = rectangular_cmplx x, is_complex x = error (_ "bad arguments to " ++ "rectangular") { rectangular_op = Operator "rectangular" rectangular Operator_type.COMPOUND false; rectangular_cmplx p = (x, y) { l = re p; a = im p; x = l * cos a; y = l * sin a; } } // we can't use colour_unary: that likes 3 band only recomb matrix x = oo_unary_function recomb_op x, is_class x = im_recomb x matrix, is_image x = recomb_real_list x, is_real_list x = map recomb_real_list x, is_matrix x = error (_ "bad arguments to " ++ "recomb") { // COMPOUND_REWRAP ... signal to the colour class to go to image and // back recomb_op = Operator "recomb" (recomb matrix) Operator_type.COMPOUND_REWRAP false; // process [1,2,3 ..] as an image recomb_real_list l = (to_matrix im').value?0 { im = (float) (to_image (Vector l)).value; im' = recomb matrix im; } } extract_area x y w h obj = oo_unary_function extract_area_op obj, is_class obj = im_extract_area obj x' y' w' h', is_image obj = map (extract_range x' w') (extract_range y' h' obj), is_matrix obj = error (_ "bad arguments to " ++ "extract_area") { x' = to_real x; y' = to_real y; w' = to_real w; h' = to_real h; extract_area_op = Operator "extract_area" (extract_area x y w h) Operator_type.COMPOUND_REWRAP false; extract_range from length list = (take length @ drop from) list; } extract_band b obj = subscript obj b; extract_row y obj = oo_unary_function extract_row_op obj, is_class obj = extract_area 0 y' (get_width obj) 1 obj, is_image obj = [obj?y'], is_matrix obj = error (_ "bad arguments to " ++ "extract_row") { y' = to_real y; extract_row_op = Operator "extract_row" (extract_row y) Operator_type.COMPOUND_REWRAP false; } extract_column x obj = oo_unary_function extract_column_op obj, is_class obj = extract_area x' 0 1 height obj, is_image obj = map (\row [row?x']) obj, is_matrix obj = error (_ "bad arguments to " ++ "extract_column") { x' = to_real x; height = get_header "Ysize" obj; extract_column_op = Operator "extract_column" (extract_column x) Operator_type.COMPOUND_REWRAP false; } blend cond in1 in2 = oo_binary_function blend_op cond [in1,in2], is_class cond = im_blend (get_image cond) (get_image in1) (get_image in2), has_image cond && has_image in1 && has_image in2 = error (_ "bad arguments to " ++ "blend" ++ ": " ++ join_sep ", " (map print [cond, in1, in2])) { blend_op = Operator "blend" blend_obj Operator_type.COMPOUND_REWRAP false; blend_obj cond x = blend_result_image { [then_part, else_part] = x; // get things about our output from inputs in this order objects = [then_part, else_part, cond]; // properties of our output image target_width = get_member_list has_width get_width objects; target_height = get_member_list has_height get_height objects; target_bands = get_member_list has_bands get_bands objects; target_format = get_member_list has_format get_format objects; target_type = get_member_list has_type get_type objects; to_image x = to_image_size target_width target_height target_bands target_format x; [then_image, else_image] = map to_image [then_part, else_part]; blend_result_image = image_set_type target_type (im_blend cond then_image else_image); } } // do big first: we want to keep big's class, if possible // eg. big is a Plot, small is a 1x1 Image insert x y small big = oo_binary'_function insert_op small big, is_class big = oo_binary_function insert_op small big, is_class small = im_insert big small (to_real x) (to_real y), is_image small && is_image big = error (_ "bad arguments to " ++ "insert") { insert_op = Operator "insert" (insert x y) Operator_type.COMPOUND_REWRAP false; } insert_noexpand x y small big = oo_binary_function insert_noexpand_op small big, is_class small = oo_binary'_function insert_noexpand_op small big, is_class big = im_insert_noexpand big small (to_real x) (to_real y), is_image small && is_image big = error (_ "bad arguments to " ++ "insert_noexpand") { insert_noexpand_op = Operator "insert_noexpand" (insert_noexpand x y) Operator_type.COMPOUND_REWRAP false; } decode im = oo_unary_function decode_op im, is_class im = decode_im im, is_image im = error (_ "bad arguments to " ++ "decode") { decode_op = Operator "decode" decode Operator_type.COMPOUND_REWRAP false; decode_im im = im_LabQ2Lab im, get_coding im == Image_coding.LABPACK = im_rad2float im, get_coding im == Image_coding.RAD = im; } measure_draw across down measure image = mark { patch_width = image.width / across; sample_width = patch_width * (measure / 100); left_margin = (patch_width - sample_width) / 2; patch_height = image.height / down; sample_height = patch_height * (measure / 100); top_margin = (patch_height - sample_height) / 2; cods = [[x * patch_width + left_margin, y * patch_height + top_margin] :: y <- [0 .. down - 1]; x <- [0 .. across - 1]]; x = map (extract 0) cods; y = map (extract 1) cods; outer = mkim [$pixel => 255] sample_width sample_height 1; inner = mkim [] (sample_width - 4) (sample_height - 4) 1; patch = insert 2 2 inner outer; bg = mkim [] image.width image.height 1; mask = Image (im_insertset bg.value patch.value x y); image' = colour_transform_to Image_type.sRGB image; mark = if mask then Vector [0, 255, 0] else image'; } measure_sample across down measure image = measures { patch_width = image.width / across; sample_width = patch_width * (measure / 100); left_margin = (patch_width - sample_width) / 2; patch_height = image.height / down; sample_height = patch_height * (measure / 100); top_margin = (patch_height - sample_height) / 2; cods = [[x * patch_width + left_margin, y * patch_height + top_margin] :: y <- [0 .. down - 1]; x <- [0 .. across - 1]]; image' = decode image; patches = map (\p extract_area p?0 p?1 sample_width sample_height image') cods; measures = Matrix (map (map mean) (map bandsplit patches)); } extract_bands b n obj = oo_unary_function extract_bands_op obj, is_class obj = im_extract_bands obj (to_real b) (to_real n), is_image obj = error (_ "bad arguments to " ++ "extract_bands") { extract_bands_op = Operator "extract_bands" (extract_bands b n) Operator_type.COMPOUND_REWRAP false; } invert x = oo_unary_function invert_op x, is_class x = im_invert x, is_image x = 255 - x, is_real x = error (_ "bad arguments to " ++ "invert") { invert_op = Operator "invert" invert Operator_type.COMPOUND false; } transform ipol wrap params image = oo_unary_function transform_op image, is_class image = im_transform image (to_matrix params) (to_real ipol) (to_real wrap), is_image image = error (_ "bad arguments to " ++ "transform") { transform_op = Operator "transform" (transform ipol wrap params) Operator_type.COMPOUND_REWRAP false; } transform_search max_error max_iterations order ipol wrap sample reference = oo_binary_function transform_search_op sample reference, is_class sample = oo_binary'_function transform_search_op sample reference, is_class reference = im_transform_search sample reference (to_real max_error) (to_real max_iterations) (to_real order) (to_real ipol) (to_real wrap), is_image sample && is_image reference = error (_ "bad arguments to " ++ "transform_search") { transform_search_op = Operator "transform_search" (transform_search max_error max_iterations order ipol wrap) Operator_type.COMPOUND false; } rotate interp angle image = oo_binary_function rotate_op angle image, is_class angle = oo_binary'_function rotate_op angle image, is_class image = im_affinei_all image interp.value a (-b) b a 0 0, is_real angle && is_image image = error (_ "bad arguments to " ++ "rotate") { rotate_op = Operator "rotate" (rotate interp) Operator_type.COMPOUND_REWRAP false; a = cos angle; b = sin angle; } matrix_binary fn a b = itom (fn (mtoi a) (mtoi b)) { mtoi x = im_mask2vips (Matrix x); itom x = (im_vips2mask x).value; } join_lr a b = oo_binary_function join_lr_op a b, is_class a = oo_binary'_function join_lr_op a b, is_class b = join_im a b, is_image a && is_image b = matrix_binary join_im a b, is_matrix a && is_matrix b = error (_ "bad arguments to " ++ "join_lr") { join_lr_op = Operator "join_lr" join_lr Operator_type.COMPOUND_REWRAP false; join_im a b = insert (get_width a) 0 b a; } join_tb a b = oo_binary_function join_tb_op a b, is_class a = oo_binary'_function join_tb_op a b, is_class b = join_im a b, is_image a && is_image b = matrix_binary join_im a b, is_matrix a && is_matrix b = error (_ "bad arguments to " ++ "join_tb") { join_tb_op = Operator "join_tb" join_tb Operator_type.COMPOUND_REWRAP false; join_im a b = insert 0 (get_height a) b a; } conj x = oo_unary_function conj_op x, is_class x = (re x, -im x), is_complex x || (is_image x && format == Image_format.COMPLEX) || (is_image x && format == Image_format.DPCOMPLEX) // assume it's some sort of real = x { format = get_header "BandFmt" x; conj_op = Operator "conj" conj Operator_type.COMPOUND false; } clip2fmt format image = oo_unary_function clip2fmt_op image, is_class image = im_clip2fmt image (to_real format), is_image image = error (_ "bad arguments to " ++ "clip2fmt") { clip2fmt_op = Operator "clip2fmt" (clip2fmt format) Operator_type.COMPOUND_REWRAP false; } embed type x y w h im = oo_unary_function embed_op im, is_class im = im_embed im (to_real type) (to_real x) (to_real y) (to_real w) (to_real h), is_image im = error (_ "bad arguments to " ++ "embed") { embed_op = Operator "embed" (embed type x y w h) Operator_type.COMPOUND_REWRAP false; } /* Morph a mask with a [[real]] matrix ... turn m2 into an image, morph it * with m1, turn it back to a matrix again. */ _morph_2_masks fn m1 m2 = m'' { // The [[real]] can contain 128 values ... squeeze them out! image = im_mask2vips (Matrix m2) == 255; m2_width = get_width image; m2_height = get_height image; // need to embed m2 in an image large enough for us to be able to // position m1 all around the edges, with a 1 pixel overlap image' = embed 0 (m1.width / 2) (m1.height / 2) (m2_width + (m1.width - 1)) (m2_height + (m1.height - 1)) image; // morph! image'' = fn m1 image'; // back to mask m' = im_vips2mask ((double) image''); // Turn 0 in output to 128 (don't care). m'' = map (map fn) m'.value { fn a = 128, a == 0; = a; } } dilate mask image = oo_unary_function dilate_op image, is_class image = im_dilate image (to_matrix mask), is_image image = error (_ "bad arguments to " ++ "dilate") { dilate_op = Operator "dilate" dilate_object Operator_type.COMPOUND_REWRAP false; dilate_object x = _morph_2_masks dilate mask x, is_matrix x = dilate mask x; } erode mask image = oo_unary_function erode_op image, is_class image = im_erode image (to_matrix mask), is_image image = error (_ "bad arguments to " ++ "erode") { erode_op = Operator "erode" erode_object Operator_type.COMPOUND_REWRAP false; erode_object x = _morph_2_masks erode mask x, is_matrix x = erode mask x; } conv mask image = oo_unary_function conv_op image, is_class image = im_conv image (to_matrix mask), is_image image = error (_ "bad arguments to " ++ "conv" ++ ": " ++ "conv (" ++ print mask ++ ") (" ++ print image ++ ")") { conv_op = Operator "conv" (conv mask) Operator_type.COMPOUND_REWRAP false; } convf mask image = oo_unary_function convf_op image, is_class image = im_conv_f image (to_matrix mask), is_image image = error (_ "bad arguments to " ++ "convf" ++ ": " ++ "convf (" ++ print mask ++ ") (" ++ print image ++ ")") { convf_op = Operator "convf" (convf mask) Operator_type.COMPOUND_REWRAP false; } convsep mask image = oo_unary_function convsep_op image, is_class image = im_convsep image (to_matrix mask), is_image image = error (_ "bad arguments to " ++ "convsep") { convsep_op = Operator "convsep" (convsep mask) Operator_type.COMPOUND_REWRAP false; } aconvsep layers mask image = oo_unary_function aconvsep_op image, is_class image = im_aconvsep image (to_matrix mask) (to_real layers), is_image image = error (_ "bad arguments to " ++ "aconvsep") { aconvsep_op = Operator "aconvsep" (aconvsep layers mask) Operator_type.COMPOUND_REWRAP false; } convsepf mask image = oo_unary_function convsepf_op image, is_class image = im_convsep_f image (to_matrix mask), is_image image = error (_ "bad arguments to " ++ "convsepf") { convsepf_op = Operator "convsepf" (convsepf mask) Operator_type.COMPOUND_REWRAP false; } rank w h n image = oo_unary_function rank_op image, is_class image = im_rank image (to_real w) (to_real h) (to_real n), is_image image = error (_ "bad arguments to " ++ "rank") { rank_op = Operator "rank" (rank w h n) Operator_type.COMPOUND_REWRAP false; } rank_image n x = rlist x.value, is_Group x = rlist x, is_list x = error (_ "bad arguments to " ++ "rank_image") { rlist l = wrapper ranked, has_wrapper = ranked { has_wrapper = has_member_list (has_member "Image") l; wrapper = get_member_list (has_member "Image") (get_member "Image") l; ranked = im_rank_image (map get_image l) (to_real n); } } // find the correlation surface for a small image within a big one correlate small big = oo_binary_function correlate_op small big, is_class small = oo_binary'_function correlate_op small big, is_class big = im_spcor big small, is_image small && is_image big = error (_ "bad arguments to " ++ "correlate") { correlate_op = Operator "correlate" correlate Operator_type.COMPOUND_REWRAP false; } // just sum-of-squares-of-differences correlate_fast small big = oo_binary_function correlate_fast_op small big, is_class small = oo_binary'_function correlate_fast_op small big, is_class big = im_fastcor big small, is_image small && is_image big = error (_ "bad arguments to " ++ "correlate_fast") { correlate_fast_op = Operator "correlate_fast" correlate_fast Operator_type.COMPOUND_REWRAP false; } // set Type, wrap as Plot_hist if it's a class hist_tag x = oo_unary_function hist_tag_op x, is_class x = image_set_type Image_type.HISTOGRAM x, is_image x = error (_ "bad arguments to " ++ "hist_tag") { hist_tag_op = Operator "hist_tag" (Plot_histogram @ hist_tag) Operator_type.COMPOUND false; } hist_find x = oo_unary_function hist_find_op x, is_class x = im_histgr x (-1), is_image x = error (_ "bad arguments to " ++ "hist_find") { hist_find_op = Operator "hist_find" (Plot_histogram @ hist_find) Operator_type.COMPOUND false; } hist_find_nD bins image = oo_unary_function hist_find_nD_op image, is_class image = im_histnD image (to_real bins), is_image image = error (_ "bad arguments to " ++ "hist_find_nD") { hist_find_nD_op = Operator "hist_find_nD" (hist_find_nD bins) Operator_type.COMPOUND_REWRAP false; } hist_find_indexed index value = oo_binary_function hist_find_indexed_op index value, is_class index = oo_binary'_function hist_find_indexed_op index value, is_class value = im_hist_indexed index value, is_image index && is_image value = error (_ "bad arguments to " ++ "hist_find_indexed") { hist_find_indexed_op = Operator "hist_find_indexed" (compose (compose Plot_histogram) hist_find_indexed) Operator_type.COMPOUND false; } hist_map hist image = oo_binary_function hist_map_op hist image, is_class hist = oo_binary'_function hist_map_op hist image, is_class image = im_maplut image hist, is_image hist && is_image image = error (_ "bad arguments to " ++ "hist_map") { // can't use rewrap, as we want to always wrap as image hist_map_op = Operator "hist_map" (compose (compose Image) hist_map) Operator_type.COMPOUND false; } hist_cum hist = oo_unary_function hist_cum_op hist, is_class hist = im_histcum hist, is_image hist = error (_ "bad arguments to " ++ "hist_cum") { hist_cum_op = Operator "hist_cum" hist_cum Operator_type.COMPOUND_REWRAP false; } hist_diff hist = oo_unary_function hist_diff_op hist, is_class hist = im_histdiff hist, is_image hist = error (_ "bad arguments to " ++ "hist_diff") { hist_diff_op = Operator "hist_diff" hist_diff Operator_type.COMPOUND_REWRAP false; im_histdiff h = (conv (Matrix [[-1, 1]]) @ clip2fmt (fmt (get_format h))) h { // up the format so it can represent the whole range of // possible values from this mask fmt x = Image_format.SHORT, x == Image_format.UCHAR || x == Image_format.CHAR = Image_format.INT, x == Image_format.USHORT || x == Image_format.SHORT || x == Image_format.UINT = x; } } hist_norm hist = oo_unary_function hist_norm_op hist, is_class hist = im_histnorm hist, is_image hist = error (_ "bad arguments to " ++ "hist_norm") { hist_norm_op = Operator "hist_norm" hist_norm Operator_type.COMPOUND_REWRAP false; } hist_inv hist = oo_unary_function hist_inv_op hist, is_class hist = inv hist, is_image hist = error (_ "bad arguments to " ++ "hist_inv") { hist_inv_op = Operator "hist_inv" hist_inv Operator_type.COMPOUND_REWRAP false; inv im = im_invertlut (to_matrix im''') len { // need a vertical doublemask im' = rot90 im, get_width im > 1 && get_height im == 1 = im, get_width im == 1 && get_height im > 1 = error (_ "not a hist"); len = get_height im'; // values must be scaled to 0 - 1 im'' = im' / (max im'); // add an index column on the left // again, must be in 0-1 y = ((make_xy 1 len)?1) / len; im''' = y ++ im''; } } hist_match in ref = oo_binary_function hist_match_op in ref, is_class in = oo_binary'_function hist_match_op in ref, is_class ref = im_histspec in ref, is_image in && is_image ref = error (_ "bad arguments to " ++ "hist_match") { hist_match_op = Operator "hist_match" hist_match Operator_type.COMPOUND_REWRAP false; } hist_equalize x = hist_map ((hist_norm @ hist_cum @ hist_find) x) x; hist_equalize_local w h image = oo_unary_function hist_equalize_local_op image, is_class image = lhisteq image, is_image image = error (_ "bad arguments to " ++ "hist_equalize_local") { hist_equalize_local_op = Operator "hist_equalize_local" (hist_equalize_local w h) Operator_type.COMPOUND_REWRAP false; // loop over bands, if necessary lhisteq im = im_lhisteq im (to_real w) (to_real h), get_bands im == 1 = (foldl1 join @ map lhisteq @ bandsplit) im; } // find the threshold below which are percent of the image (percent in [0,1]) // eg. hist_thresh 0.1 x == 12, then x < 12 will light up 10% of the pixels hist_thresh percent image = x { // our own normaliser ... we don't want to norm channels separately // norm to [0,1] my_hist_norm h = h / max h; // normalised cumulative hist // we sum the channels before we normalise, because we want to treat them // all the same h = (my_hist_norm @ sum @ bandsplit @ hist_cum @ hist_find) image.value; // threshold that, then use im_profile to search for the x position in the // histogram x = mean (im_profile (h > percent) 1); } /* Sometimes useful, despite plotting now being built in, for making * diagnostic images. */ hist_plot hist = oo_unary_function hist_plot_op hist, is_class hist = im_histplot hist, is_image hist = error (_ "bad arguments to " ++ "hist_plot") { hist_plot_op = Operator "hist_plot" (Image @ hist_plot) Operator_type.COMPOUND false; } zerox d x = oo_unary_function zerox_op x, is_class x = im_zerox x (to_real d), is_image x = error (_ "bad arguments to " ++ "zerox") { zerox_op = Operator "zerox" (zerox d) Operator_type.COMPOUND_REWRAP false; } resize interp xfac yfac image = oo_unary_function resize_op image, is_class image = resize_im image, is_image image = error (_ "bad arguments to " ++ "resize") { resize_op = Operator "resize" resize_im Operator_type.COMPOUND_REWRAP false; xfac' = to_real xfac; yfac' = to_real yfac; rxfac' = 1 / xfac'; ryfac' = 1 / yfac'; // is this interpolation nearest-neighbour? is_nn x = x.type == Interpolate_type.NEAREST_NEIGHBOUR; resize_im im // upscale by integer factor, nearest neighbour = im_zoom im xfac' yfac', is_int xfac' && is_int yfac' && xfac' >= 1 && yfac' >= 1 && is_nn interp // downscale by integer factor, nearest neighbour = im_subsample im rxfac' ryfac', is_int rxfac' && is_int ryfac' && rxfac' >= 1 && ryfac' >= 1 && is_nn interp // upscale by any factor, nearest neighbour // upscale by integer part, then affine to exact size = scale xg?1 yg?1 (im_zoom im xg?0 yg?0), xfac' >= 1 && yfac' >= 1 && is_nn interp // downscale by any factor, nearest neighbour // downscale by integer part, then affine to exact size = scale xs?1 ys?1 (im_subsample im xs?0 ys?0), rxfac' >= 1 && ryfac' >= 1 && is_nn interp // upscale by any factor with affine = scale xfac' yfac' im, xfac' >= 1 && yfac' >= 1 // downscale by any factor, bilinear // block shrink by integer factor, then resample to // exact with affine = scale xs?1 ys?1 (im_shrink im xs?0 ys?0), rxfac' >= 1 && ryfac' >= 1 = error ("resize: unimplemented argument combination:\n" ++ " xfac = " ++ print xfac' ++ "\n" ++ " yfac = " ++ print yfac' ++ "\n" ++ " interp = " ++ print interp ++ " (" ++ Interpolate_type.descriptions?interp.type ++ ")") { // convert a float scale to integer plus fraction // eg. scale by 2.5 becomes [2, 1.25] (x * 2.5 == x * 2 * 1.25) break f = [floor f, f / floor f]; // same, but for downsizing ... turn a float scale which is less than // 1 into an int shrink and a float scale // complicated: the int shrink may round the size down (eg. imagine // subsampling a 11 pixel wide image by 3, we'd get a 3 pixel wide // image, not a 3.666 pixel wide image), so pass in the size of image // we are operating on and adjust for any rounding // so ... x is (eg.) 467, f is (eg. 128/467, about 0.274) rbreak x f = [int_shrink, float_resample] { // the size of image we are aiming for after the combined int and // float resample x' = x * f; // int part int_shrink = floor (1 / f); // size after int shrink x'' = floor (x / int_shrink); // therefore what we need for the float part float_resample = x' / x''; } width = get_width im; height = get_height im; // grow and shrink factors xg = break xfac'; yg = break yfac'; xs = rbreak width xfac'; ys = rbreak height yfac'; // resize scale xfac yfac im = im_affinei_all im interp.value xfac 0 0 yfac 0 0; } } sharpen radius x1 y2 y3 m1 m2 in = oo_unary_function sharpen_op in, is_class in = im_sharpen in (to_real radius) (to_real x1) (to_real y2) (to_real y3) (to_real m1) (to_real m2), is_image in = error (_ "bad arguments to " ++ "sharpen") { sharpen_op = Operator "sharpen" (sharpen radius x1 y2 y3 m1 m2) Operator_type.COMPOUND_REWRAP false; } tone_analyse s m h sa ma ha in = oo_unary_function tone_analyse_op in, is_class in = im_tone_analyse in (to_real s) (to_real m) (to_real h) (to_real sa) (to_real ma) (to_real ha), is_image in = error (_ "bad arguments to " ++ "tone_analyse") { tone_analyse_op = Operator "tone_analyse" (Plot_histogram @ tone_analyse s m h sa ma ha) Operator_type.COMPOUND false; } tone_map hist image = oo_binary_function tone_map_op hist image, is_class hist = oo_binary'_function tone_map_op hist image, is_class image = im_tone_map image hist, is_image hist && is_image image = error (_ "bad arguments to " ++ "tone_map") { tone_map_op = Operator "tone_map" tone_map Operator_type.COMPOUND_REWRAP false; } tone_build fmt b w s m h sa ma ha = (Plot_histogram @ clip2fmt fmt) (im_tone_build_range mx mx (to_real b) (to_real w) (to_real s) (to_real m) (to_real h) (to_real sa) (to_real ma) (to_real ha)) { mx = Image_format.maxval fmt; } icc_export depth profile intent in = oo_unary_function icc_export_op in, is_class in = im_icc_export_depth in (to_real depth) (expand profile) (to_real intent), is_image in = error (_ "bad arguments to " ++ "icc_export") { icc_export_op = Operator "icc_export" (icc_export depth profile intent) Operator_type.COMPOUND_REWRAP false; } icc_import profile intent in = oo_unary_function icc_import_op in, is_class in = im_icc_import in (expand profile) (to_real intent), is_image in = error (_ "bad arguments to " ++ "icc_import") { icc_import_op = Operator "icc_import" (icc_import profile intent) Operator_type.COMPOUND_REWRAP false; } icc_import_embedded intent in = oo_unary_function icc_import_embedded_op in, is_class in = im_icc_import_embedded in (to_real intent), is_image in = error (_ "bad arguments to " ++ "icc_import_embedded") { icc_import_embedded_op = Operator "icc_import_embedded" (icc_import_embedded intent) Operator_type.COMPOUND_REWRAP false; } icc_transform in_profile out_profile intent in = oo_unary_function icc_transform_op in, is_class in = im_icc_transform in (expand in_profile) (expand out_profile) (to_real intent), is_image in = error (_ "bad arguments to " ++ "icc_transform") { icc_transform_op = Operator "icc_transform" (icc_transform in_profile out_profile intent) Operator_type.COMPOUND_REWRAP false; } icc_ac2rc profile in = oo_unary_function icc_ac2rc_op in, is_class in = im_icc_ac2rc in (expand profile), is_image in = error (_ "bad arguments to " ++ "icc_ac2rc") { icc_ac2rc_op = Operator "icc_ac2rc" (icc_ac2rc profile) Operator_type.COMPOUND_REWRAP false; } // Given a xywh rect, flip it around so wh are always positive rect_normalise x y w h = [x', y', w', h'] { x' = x + w, w < 0 = x; y' = y + h, h < 0 = y; w' = abs w; h' = abs h; } draw_flood_blob x y ink image = oo_unary_function draw_flood_blob_op image, is_class image = im_draw_flood_blob image (to_real x) (to_real y) ink, is_image image = error (_ "bad arguments to " ++ "draw_flood_blob") { draw_flood_blob_op = Operator "draw_flood_blob" (draw_flood_blob x y ink) Operator_type.COMPOUND_REWRAP false; } draw_flood x y ink image = oo_unary_function draw_flood_op image, is_class image = im_draw_flood image (to_real x) (to_real y) ink, is_image image = error (_ "bad arguments to " ++ "draw_flood") { draw_flood_op = Operator "draw_flood" (draw_flood x y ink) Operator_type.COMPOUND_REWRAP false; } /* This version of draw_rect uses insert_noexpand and will be fast, even for * huge images. */ draw_rect_width x y w h f t ink image = oo_unary_function draw_rect_width_op image, is_class image = my_draw_rect_width image (to_int x) (to_int y) (to_int w) (to_int h) (to_int f) (to_int t) ink, is_image image = error (_ "bad arguments to " ++ "draw_rect_width") { draw_rect_width_op = Operator "draw_rect_width" (draw_rect_width x y w h f t ink) Operator_type.COMPOUND_REWRAP false; my_draw_rect_width image x y w h f t ink = insert x' y' (block w' h') image, f == 1 = (insert x' y' (block w' t) @ insert (x' + w' - t) y' (block t h') @ insert x' (y' + h' - t) (block w' t) @ insert x' y' (block t h')) image { insert = insert_noexpand; block w h = image_new w h (get_bands image) (get_format image) (get_coding image) (get_type image) ink' 0 0; ink' = Vector ink, is_list ink = ink; [x', y', w', h'] = rect_normalise x y w h; } } /* Default to 1 pixel wide edges. */ draw_rect x y w h f ink image = draw_rect_width x y w h f 1 ink image; /* This version of draw_rect uses the paintbox rect draw operation. It is an * inplace operation and will use bucketloads of memory. */ draw_rect_paintbox x y w h f ink image = oo_unary_function draw_rect_op image, is_class image = im_draw_rect image (to_real x) (to_real y) (to_real w) (to_real h) (to_real f) ink, is_image image = error (_ "bad arguments to " ++ "draw_rect_paintbox") { draw_rect_op = Operator "draw_rect" (draw_rect x y w h f ink) Operator_type.COMPOUND_REWRAP false; } draw_circle x y r f ink image = oo_unary_function draw_circle_op image, is_class image = im_draw_circle image (to_real x) (to_real y) (to_real r) (to_real f) ink, is_image image = error (_ "bad arguments to " ++ "draw_circle") { draw_circle_op = Operator "draw_circle" (draw_circle x y r f ink) Operator_type.COMPOUND_REWRAP false; } draw_line x1 y1 x2 y2 ink image = oo_unary_function draw_line_op image, is_class image = im_draw_line image (to_real x1) (to_real y1) (to_real x2) (to_real y2) ink, is_image image = error (_ "bad arguments to " ++ "draw_line") { draw_line_op = Operator "draw_line" (draw_line x1 y1 x2 y2 ink) Operator_type.COMPOUND_REWRAP false; } print_base base in = oo_unary_function print_base_op in, is_class in = map (print_base base) in, is_list in = print_base_real, is_real in = error (_ "bad arguments to " ++ "print_base") { print_base_op = Operator "print_base" (print_base base) Operator_type.COMPOUND false; print_base_real = error "print_base: bad base", base < 2 || base > 16 = "0", in < 0 || chars == [] = reverse chars { digits = map (\x x % base) (takewhile (not_equal 0) (iterate (\x idivide x base) in)); chars = map tohd digits; tohd x = (char) ((int) '0' + x), x < 10 = (char) ((int) 'A' + (x - 10)); } } /* id x: the identity function * * id :: * -> * */ id x = x; /* const x y: junk y, return x * * (const 3) is the function that always returns 3. * const :: * -> ** -> * */ const x y = x; /* converse fn a b: swap order of args to fn * * converse fn a b == fn b a * converse :: (* -> ** -> ***) -> ** -> * -> *** */ converse fn a b = fn b a; /* fix fn x: find the fixed point of a function */ fix fn x = limit (iterate fn x); /* until pred fn n: apply fn to n until pred succeeds; return that value * * until (more 1000) (multiply 2) 1 = 1024 * until :: (* -> bool) -> (* -> *) -> * -> * */ until pred fn n = n, pred n = until pred fn (fn n); /* Infinite list of primes. */ primes = 1 : (sieve [2 ..]) { sieve l = hd l : sieve (filter (nmultiple (hd l)) (tl l)); nmultiple n x = x / n != (int) (x / n); } /* Map an n-ary function (pass the args as a list) over groups of objects. * The objects can be single objects or groups. If more than one * object is a group, we iterate for the length of the smallest group. * Don't loop over plain lists, since we want (eg.) "mean [1, 2, 3]" to work. * Treat [] as no-value --- ie. if any of the inputs are [] we put [] into the * output and don't apply the function. copy-pasted into _types, keep in sync */ map_nary fn args = fn args, groups == [] = Group (map process [0, 1 .. shortest - 1]) { // find all the group arguments groups = filter is_Group args; // what's the length of the shortest group arg? shortest = foldr1 min_pair (map (len @ get_value) groups); // process index n ... pull that member from each argument // recurse to handle application, so we work for nested groups too process n = NULL, any (map (is_noval n) args) = map_nary fn (map (extract n) args) { extract n arg = arg.value?n, is_Group arg = arg; is_noval n arg = is_Group arg && arg.value?n == NULL; } } /* Map a 1-ary function over an object. */ map_unary fn a = map_nary (list_1ary fn) [a]; /* Map a 2-ary function over a pair of objects. */ map_binary fn a b = map_nary (list_2ary fn) [a, b]; /* Map a 3-ary function over three objects. */ map_trinary fn a b c = map_nary (list_3ary fn) [a, b, c]; /* Map a 4-ary function over three objects. */ map_quaternary fn a b c d = map_nary (list_4ary fn) [a, b, c, d]; /* Same as map_nary, but for lists. Handy for (eg.) implementing arith ops on * vectors and matricies. */ map_nary_list fn args = fn args, lists == [] = map process [0, 1 .. shortest - 1] { // find all the list arguments lists = filter is_list args; // what's the length of the shortest list arg? shortest = foldr1 min_pair (map len lists); // process index n ... pull that member from each argument // recurse to handle application, so we work for nested lists too process n = map_nary_list fn (map (extract n) args) { extract n arg = arg?n, is_list arg = arg; } } map_unaryl fn a = map_nary_list (list_1ary fn) [a]; map_binaryl fn a b = map_nary_list (list_2ary fn) [a, b]; /* Remove features smaller than x pixels across from an image. This used to be * rather complex ... convsep is now good enough to use. */ smooth x image = convsep (matrix_gaussian_blur (to_real x * 2)) image; /* Chop up an image into a list of lists of smaller images. Pad edges with * black. */ imagearray_chop tile_width tile_height hoverlap voverlap i = map chop' [0, vstep .. last_y] { width = get_width i; height = get_height i; bands = get_bands i; format = get_format i; type = get_type i; tile_width' = to_real tile_width; tile_height' = to_real tile_height; hoverlap' = to_real hoverlap; voverlap' = to_real voverlap; /* Unique pixels per tile. */ hstep = tile_width' - hoverlap'; vstep = tile_height' - voverlap'; /* Number of tiles across and down. Remember the case where width == * hstep. */ across = (int) ((width - 1) / hstep) + 1; down = (int) ((height - 1) / vstep) + 1; /* top/left of final tile. */ last_x = hstep * (across - 1); last_y = vstep * (down - 1); /* How much do we need to pad by? */ sx = last_x + tile_width'; sy = last_y + tile_height'; /* Expand image with black to pad size. */ pad = embed 0 0 0 sx sy i; /* Chop up a row. */ chop' y = map chop'' [0, hstep .. last_x] { chop'' x = extract_area x y tile_width' tile_height' pad; } } /* Reassemble image. */ imagearray_assemble hoverlap voverlap il = (image_set_origin 0 0 @ foldl1 tbj @ map (foldl1 lrj)) il { lrj l r = insert (get_width l + hoverlap) 0 r l; tbj t b = insert 0 (get_height t + voverlap) b t; } /* Generate an nxn identity matrix. */ identity_matrix n = error "identity_matrix: n > 0", n < 1 = map line [0 .. n - 1] { line p = take p [0, 0 ..] ++ [1] ++ take (n - p - 1) [0, 0 ..]; } /* Incomplete gamma function Q(a, x) == 1 - P(a, x) FIXME ... this is now a builtin, until we can get a nice List class (requires overloadable ':') gammq a x = error "bad args", x < 0 || a <= 0 = 1 - gamser, x < a + 1 = gammcf { gamser = (gser a x)?0; gammcf = (gcf a x)?0; } */ /* Incomplete gamma function P(a, x) evaluated as series representation. Also * return ln(gamma(a)) ... nr in c, pp 218 */ gser a x = [gamser, gln] { gln = gammln a; gamser = error "bad args", x < 0 = 0, x == 0 = 1 // fix this { // maximum iterations maxit = 100; ap = List [a + 1, a + 2 ...]; xoap = x / ap; del = map product (prefixes xoap.value); /* del = map (multiply (1 / a)) (map product (prefixes xoap)) del = xap = iterate (multiply */ /* Generate all prefixes of a list ... [1,2,3] -> [[1], [1, 2], [1, 2, * 3], [1, 2, 3, 4] ...] */ prefixes l = map (converse take l) [1..]; } } /* ln(gamma(xx)) ... nr in c, pp 214 */ gammln xx = gln { cof = [76.18009172947146, -86.50532032941677, 24.01409824083091, -1.231739572450155, 0.1208650973866179e-2, -0.5395239384953e-5]; y = take 6 (iterate (add 1) (xx + 1)); ser = 1.000000000190015 + sum (map2 divide cof y); tmp = xx + 0.5; tmp' = tmp - ((xx + 0.5) * log tmp); gln = -tmp + log (2.5066282746310005 * ser / xx); } /* make a LUT from a scatter */ buildlut x = Plot_histogram (im_buildlut x), is_Matrix x && x.width > 1 = im_buildlut (Matrix x), is_matrix x && is_list_len_more 1 x?0 = error (_ "bad arguments to " ++ "buildlut"); /* Linear regression. Return a class with the stuff we need in. * from s15.2, p 665 NR in C * * Also calculate R2, see eg.: * https://en.wikipedia.org/wiki/Coefficient_of_determination */ linreg xes yes = obj { obj = class { // in case we ever get shown in the workspace _vislevel = 2; slope = sum [t * y :: [t, y] <- zip2 tes yes] / st2; intercept = (sy - sx * slope) / ss; chi2 = sum [(y - intercept - slope * x) ** 2 :: [x, y] <- zip2 xes yes]; siga = (chi2 / (ss - 2)) ** 0.5 * ((1 + sx ** 2 / (ss * st2)) / ss) ** 0.5; sigb = (chi2 / (ss - 2)) ** 0.5 * (1 / st2) ** 0.5; // for compat with linregw, see below q = 1.0; R2 = 1 - chi2 / sum [(y - my) ** 2 :: y <- yes]; } ss = len xes; sx = sum xes; sy = sum yes; my = sy / ss; sxoss = sx / ss; tes = [x - sxoss :: x <- xes]; st2 = sum [t ** 2 :: t <- tes]; } /* Weighted linear regression. Xes, yes and a list of deviations. */ linregw xes yes devs = obj { obj = class { // in case we ever get shown in the workspace _vislevel = 2; slope = sum [(t * y) / sd :: [t, y, sd] <- zip3 tes yes devs] / st2; intercept = (sy - sx * slope) / ss; chi2 = sum [((y - intercept - slope * x) / sd) ** 2 :: [x, y, sd] <- zip3 xes yes devs]; siga = ((1 + sx * sx / (ss * st2)) / ss) ** 0.5; sigb = (1 / st2) ** 0.5; q = gammq (0.5 * (len xes - 2)) (0.5 * chi2); R2 = 1 - chi2 / sum [(y - my) ** 2 :: y <- yes]; } wt = [sd ** -0.5 :: sd <- devs]; ss = sum wt; sx = sum [x * w :: [x, w] <- zip2 xes wt]; sy = sum [y * w :: [y, w] <- zip2 yes wt]; my = sy / len xes; sxoss = sx / ss; tes = [(x - sxoss) / sd :: [x, sd] <- zip2 xes devs]; st2 = sum [t ** 2 :: t <- tes]; } /* Clustering: pass in a list of points, repeatedly merge the * closest two points until no two points are closer than the threshold. * Return [merged-points, corresponding-weights]. A weight is a list of the * indexes we merged to make that point, ie. len weight == how significant * this point is. * * eg. * cluster 12 [152,154,155,42,159] == * [[155,42],[[1,2,0,4],[3]]] */ cluster thresh points = oo_unary_function cluster_op points, is_class points // can't use [0..len points - 1], in case len points == 0 = merge [points, map (converse cons []) (take (len points) [0 ..])], is_list points = error (_ "bad arguments to " ++ "cluster") { cluster_op = Operator "cluster" (cluster thresh) Operator_type.COMPOUND false; merge x = x, m < 2 || d > thresh = merge [points', weights'] { [points, weights] = x; m = len points; // generate indexes of all possible pairs, avoiding comparing a thing // to itself, and assuming that dist is reflexive // first index is always less than 2nd index // the +1,+2 makes sure we have an increasing generator, otherwise we // can get [3 .. 4] (for example), which will make a decreasing // sequence pairs = [[x, y] :: x <- [0 .. m - 1]; y <- [x + 1, x + 2 .. m - 1]]; // distance function // arg is eg. [3,1], meaning get distance from point 3 to point 1 dist x = abs (points?i - points?j) { [i, j] = x; } // smallest distance, then the two points we merge p = minpos (map dist pairs); d = dist pairs?p; [i, j] = pairs?p; // new point and new weight nw = weights?i ++ weights?j; np = (points?i * len weights?i + points?j * len weights?j) / len nw; // remove element i from a list remove i l = take i l ++ drop (i + 1) l; // remove two old points, add the new merged one // i < j (see "pairs", above) points' = np : remove i (remove j points); weights' = nw : remove i (remove j weights); } } /* Extract the area of an image around an arrow. * Transform the image to make the arrow horizontal, then displace by hd and * vd pxels, then cut out a bit h pixels high centered on the arrow. */ extract_arrow hd vd h arrow = extract_area (re p' + hd) (im p' - h / 2 + vd) (re pv) h im' { // the line as a polar vector pv = polar (arrow.width, arrow.height); a = im pv; // smallest rotation that will make the line horizontal a' = 360 - a, a > 270 = 180 - a, a > 90 = -a; im' = rotate Interpolate_bilinear a' arrow.image; // look at the start and end of the arrow, pick the leftmost p = (arrow.left, arrow.top), arrow.left <= arrow.right = (arrow.right, arrow.bottom); // transform that point to im' space p' = rectangular (polar p + (0, a')) + (im'.xoffset, im'.yoffset); } /* You'd think these would go in _convert, but they are not really colour ops, * so put them here. */ rad2float image = oo_unary_function rad2float_op image, is_class image = im_rad2float image, is_image image = error (_ "bad arguments to " ++ "rad2float") { rad2float_op = Operator "rad2float" rad2float Operator_type.COMPOUND_REWRAP false; } float2rad image = oo_unary_function float2rad_op image, is_class image = im_float2rad image, is_image image = error (_ "bad arguments to " ++ "float2rad") { float2rad_op = Operator "float2rad" float2rad Operator_type.COMPOUND_REWRAP false; } segment x = oo_unary_function segment_op x, is_class x = image', is_image x = error (_ "bad arguments to " ++ "segment") { segment_op = Operator "segment" segment Operator_type.COMPOUND_REWRAP false; [image, nsegs] = im_segment x; image' = im_copy_set_meta image "n-segments" nsegs; } point a b = oo_binary_function point_op a b, is_class a = oo_binary'_function point_op a b, is_class b = im_read_point b x y, is_image b = [b?x?y], is_matrix b = [b?x], is_real_list b && y == 0 = [b?y], is_real_list b && x == 0 = error (_ "bad arguments to " ++ "point") { point_op = Operator "point" (\a\b Vector (point a b)) Operator_type.COMPOUND false; (x, y) = a, is_complex a; = (a?0, a?1), is_real_list a && is_list_len 2 a = error "bad position format"; } /* One image in, one out. */ system_image command x = oo_unary_function system_image_op x, is_class x = system x, is_image x = error (_ "bad arguments to " ++ "system_image") { system_image_op = Operator "system_image" (system_image command) Operator_type.COMPOUND_REWRAP false; system im = image_out { [image_out, log] = im_system_image (get_image im) "%s.tif" "%s.tif" command; } } /* Two images in, one out. */ system_image2 command x1 x2 = oo_binary_function system_image2_op x1 x2, is_class x1 = oo_binary'_function system_image2_op x1 x2, is_class x2 = system x1 x2, is_image x1 && is_image x2 = error (_ "bad arguments to " ++ "system_image2") { system_image2_op = Operator "system_image2" (system_image2 command) Operator_type.COMPOUND_REWRAP false; system x1 x2 = image_out { [image_out] = vips_call "system" [command] [ $in => [x1, x2], $out => true, $out_format => "%s.tif", $in_format => "%s.tif" ]; } } /* Three images in, one out. */ system_image3 command x1 x2 x3 = oo_binary_function system_image2_op x2 x3, is_class x2 = oo_binary'_function system_image2_op x2 x3, is_class x3 = system x1 x2 x3, is_image x1 && is_image x2 && is_image x3 = error (_ "bad arguments to " ++ "system_image3") { system_image2_op = Operator "system_image2" (system_image3 command x1) Operator_type.COMPOUND_REWRAP false; system x1 x2 x3 = image_out { [image_out] = vips_call "system" [command] [ $in => [x1, x2, x3], $out => true, $out_format => "%s.tif", $in_format => "%s.tif" ]; } } /* Zero images in, one out. */ system_image0 command = Image image_out { [image_out] = vips_call "system" [command] [ $out => true, $out_format => "%s.tif" ]; } hough_line w h x = oo_unary_function hough_line_op x, is_class x = hline (to_real w) (to_real h) x, is_image x = error (_ "bad arguments to " ++ "hough_line") { hough_line_op = Operator "hough_line" (hough_line w h) Operator_type.COMPOUND_REWRAP false; hline w h x = pspace { [pspace] = vips_call "hough_line" [x] [ $width => w, $height => h ]; } } hough_circle s mn mx x = oo_unary_function hough_circle_op x, is_class x = hcircle (to_real s) (to_real mn) (to_real mx) x, is_image x = error (_ "bad arguments to " ++ "hough_circle") { hough_circle_op = Operator "hough_circle" (hough_circle s mn mx) Operator_type.COMPOUND_REWRAP false; hcircle s mn mx x = pspace { [pspace] = vips_call "hough_circle" [x] [ $scale => s, $min_radius => mn, $max_radius => mx ]; } } mapim interp ind in = oo_binary_function mapim_op ind in, is_class ind = oo_binary'_function mapim_op ind in, is_class in = mapim_fn ind in, is_image ind && is_image in = error (_ "bad arguments to " ++ "mapim") { mapim_op = Operator "mapim" (mapim interp) Operator_type.COMPOUND_REWRAP false; mapim_fn ind im = out { [out] = vips_call "mapim" [im, ind] [$interpolate => interp]; } } nip2-8.7.0/share/nip2/compat/8.2/Preferences.ws0000644000175000017500000010177313224651032015706 00000000000000 nip2-8.7.0/share/nip2/compat/8.2/Filter.def0000644000175000017500000011551413224651032014775 00000000000000Filter_conv_item = class Menupullright "_Convolution" "various spatial convolution filters" { /* Some useful masks. */ filter_blur = Matrix_con 9 0 [[1, 1, 1], [1, 1, 1], [1, 1, 1]]; filter_sharp = Matrix_con 8 0 [[-1, -1, -1], [-1, 16, -1], [-1, -1, -1]]; filter_emboss = Matrix_con 1 128 [[-1, 0], [0, 1]]; filter_laplacian = Matrix_con 1 128 [[-1, -1, -1], [-1, 8, -1], [-1, -1, -1]]; filter_sobel = Matrix_con 1 128 [[1, 2, 1], [0, 0, 0], [-1, -2, -1]]; filter_lindet = Matrix_con 1 0 [[1, 1, 1], [-2, -2, -2], [1, 1, 1]]; Blur_item = class Menuaction "_Blur" "3x3 blur of image" { action x = map_unary (conv filter_blur) x; } Sharpen_item = class Menuaction "_Sharpen" "3x3 sharpen of image" { action x = map_unary (conv filter_sharp) x; } Emboss_item = class Menuaction "_Emboss" "1 pixel displace emboss" { action x = map_unary (conv filter_emboss) x; } Laplacian_item = class Menuaction "_Laplacian" "3x3 laplacian edge detect" { action x = map_unary (conv filter_laplacian) x; } Sobel_item = class Menuaction "So_bel" "3x3 Sobel edge detect" { action x = map_unary sobel x { sobel im = abs (a - 128) + abs (b - 128) { a = conv filter_sobel im; b = conv (rot270 filter_sobel) im; } } } /* 3x3 line detect of image diagonals should be scaled down by root(2) I guess Kirk */ Linedet_item = class Menuaction "Li_ne Detect" "3x3 line detect" { action x = map_unary lindet x { lindet im = foldr1 max_pair images { masks = take 4 (iterate rot45 filter_lindet); images = map (converse conv im) masks; } } } Usharp_item = class Menuaction "_Unsharp Mask" "cored sharpen of L only in LAB image" { action x = class _result { _vislevel = 3; size = Option "Radius" [ "3 pixels", "5 pixels", "7 pixels", "9 pixels", "11 pixels", "51 pixels" ] 0; st = Scale "Smoothness threshold" 0 5 2; bm = Scale "Brighten by at most" 1 50 10; dm = Scale "Darken by at most" 1 50 20; fs = Scale "Sharpen flat areas by" 0 5 0.5; js = Scale "Sharpen jaggy areas by" 0 5 1; _result = map_unary process x { process in = Image in''' { in' = colour_transform_to Image_type.LABS in.value; in'' = sharpen [3, 5, 7, 9, 11, 51]?size st bm dm fs js in'; in''' = colour_transform_to (get_type in) in''; } } } } sep1 = Menuseparator; Custom_blur_item = class Menuaction "Custom B_lur / Sharpen" "blur or sharpen with tuneable parameters" { action x = class _result { _vislevel = 3; type = Option "Type" ["Blur", "Sharpen"] 0; r = Scale "Radius" 1 100 1; fac = Scale "Amount" 0 1 1; layers = Scale "Layers" 1 100 10; shape = Option "Mask shape" [ "Square", "Gaussian" ] 0; prec = Option "Precision" ["Int", "Float", "Approximate"] 0; _result = map_unary process x { process in = clip2fmt blur.format proc { mask = matrix_blur r.value, shape.value == 0 = matrix_gaussian_blur r.value; blur = [convsep, convsepf, aconvsep layers]?prec mask in; proc = in + fac * (in - blur), type == 1 = blur * fac + in * (1 - fac); } } } } Custom_conv_item = class Menuaction "Custom C_onvolution" "convolution filter with tuneable parameters" { action x = class _result { _vislevel = 3; matrix = Matrix_con 1 0 [[0, 0, 0], [0, 1, 0], [0, 0, 0]]; separable = Toggle "Seperable convolution" false, matrix.width == 1 || matrix.height == 1 = false; type = Option "Convolution type" ["Int", "Float"] 0; rotate = Option "Rotate" [ "Don't rotate", "4 x 45 degrees", "8 x 45 degrees", "2 x 90 degrees" ] 0; _result = map_unary process x { process in = in.Image in' { conv_fn = im_lindetect, !separable && type == 0 && rotate == 1 = im_compass, !separable && type == 0 && rotate == 2 = im_gradient, !separable && type == 0 && rotate == 3 = im_conv, !separable && type == 0 = im_convsep, separable && type == 0 = im_conv_f, !separable && type == 1 = im_convsep_f, separable && type == 1 = error "boink!"; in' = conv_fn in.value matrix; } } } } } Filter_rank_item = class Menupullright "_Rank" "various rank filters" { Median_item = class Menuaction "_Median" "3x3 median rank filter" { action x = map_unary (rank 3 3 4) x; } Image_rank_item = class Menuaction "_Image Rank" "pixelwise rank a list or group of images" { action x = class _result { _vislevel = 3; select = Expression "Rank" ((int) (guess_size / 2)) { guess_size = len x, is_list x = len x.value, is_Group x = 0; } // can't really iterate over groups ... since we allow a group // argument _result = rank_image select x; } } Custom_rank_item = class Menuaction "Custom _Rank" "rank filter with tuneable parameters" { action x = class _result { _vislevel = 3; window_width = Expression "Window width" 3; window_height = Expression "Window height" 3; select = Expression "Rank" ((int) ((to_real window_width * to_real window_height) / 2)); _result = map_unary process x { process in = rank window_width window_height select in; } } } } Filter_morphology_item = class Menupullright "_Morphology" "various morphological filters" { /* Some useful masks. */ mask8 = Matrix_mor [[255, 255, 255], [255, 255, 255], [255, 255, 255]]; mask4 = Matrix_mor [[128, 255, 128], [255, 255, 255], [128, 255, 128]]; mask1 = Matrix_mor [[0, 0, 0], [0, 255, 0], [0, 0, 0]]; thin = Matrix_mor [[0, 0, 0], [128, 255, 128], [255, 255, 255]]; Threshold_item = Select_item.Threshold_item; sep1 = Menuseparator; Dilate_item = class Menupullright "_Dilate" "morphological dilate" { Dilate8_item = class Menuaction "_8-connected" "dilate with an 8-connected mask" { action x = map_unary (dilate mask8) x; } Dilate4_item = class Menuaction "_4-connected" "dilate with a 4-connected mask" { action x = map_unary (dilate mask4) x; } } Erode_item = class Menupullright "_Erode" "morphological erode" { Erode8_item = class Menuaction "_8-connected" "erode with an 8-connected mask" { action x = map_unary (erode mask8) x; } Erode4_item = class Menuaction "_4-connected" "erode with a 4-connected mask" { action x = map_unary (erode mask4) x; } } Custom_morph_item = class Menuaction "Custom _Morphology" "convolution morphological operator" { action x = class _result { _vislevel = 3; mask = mask4; type = Option "Operation" ["Erode", "Dilate"] 1; apply = Expression "Number of times to apply mask" 1; _result = map_unary morph x { morph image = Image value' { fatmask = (iterate (dilate mask) mask)?(to_real apply - 1); value' = im_erode image.value fatmask, type.value == 0 = im_dilate image.value fatmask; } } } } sep2 = Menuseparator; Open_item = class Menuaction "_Open" "open with an 8-connected mask" { action x = map_unary (dilate mask8 @ erode mask8) x; } Close_item = class Menuaction "_Close" "close with an 8-connected mask" { action x = map_unary (erode mask8 @ dilate mask8) x; } Clean_item = class Menuaction "C_lean" "remove 8-connected isolated points" { action x = map_unary clean x { clean x = x ^ erode mask1 x; } } Thin_item = class Menuaction "_Thin" "thin once" { action x = map_unary thinall x { masks = take 8 (iterate rot45 thin); thin1 m x = x ^ erode m x; thinall x = foldr thin1 x masks; } } } Filter_fourier_item = class Menupullright "_Fourier" "various Fourier filters" { preview_size = 64; sense_option = Option "Sense" [ "Pass", "Reject" ] 0; // make a visualisation image make_vis fn = (Image @ image_set_type Image_type.FOURIER @ rotquad @ fn) (im_create_fmask preview_size preview_size); // make the process function process fn in = (Image @ fn) (im_flt_image_freq in.value); New_ideal_item = class Menupullright "_Ideal" "various ideal Fourier filters" { High_low_item = class Menuaction "_High or Low Pass" "highpass/lowpass ideal Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; // call a freq func with our parameters _params f = f sense.value fc.value 0 0 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" "ring pass/reject ideal Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; rw = Scale "Ring width" 0.01 0.99 0.5; // call a freq func with our parameters _params f = f (sense.value + 6) fc.value rw.value 0 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Band_item = class Menuaction "_Band Pass or Band Reject" "band pass/reject ideal Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fcx = Scale "Horizontal frequency cutoff" 0.01 0.99 0.5; fcy = Scale "Vertical frequency cutoff" 0.01 0.99 0.5; r = Scale "Radius" 0.01 0.99 0.5; // call a freq func with our parameters _params f = f (sense.value + 12) fcx.value fcy.value r.value 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } } New_gaussian_item = class Menupullright "_Gaussian" "various Gaussian Fourier filters" { High_low_item = class Menuaction "_High or Low Pass" "highpass/lowpass Gaussian Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; // call a freq func with our parameters _params f = f (sense.value + 4) fc.value ac.value 0 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" "ring pass/reject Gaussian Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; rw = Scale "Ring width" 0.01 0.99 0.5; // call a freq func with our parameters _params f = f (sense.value + 10) fc.value rw.value ac.value 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Band_item = class Menuaction "_Band Pass or Band Reject" "band pass/reject Gaussian Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fcx = Scale "Horizontal frequency cutoff" 0.01 0.99 0.5; fcy = Scale "Vertical frequency cutoff" 0.01 0.99 0.5; r = Scale "Radius" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; // call a freq func with our parameters _params f = f (sense.value + 16) fcx.value fcy.value r.value ac.value 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } } New_butterworth_item = class Menupullright "_Butterworth" "various Butterworth Fourier filters" { High_low_item = class Menuaction "_High or Low Pass" "highpass/lowpass Butterworth Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; o = Scale "Order" 1 10 2; // call a freq func with our parameters _params f = f (sense.value + 2) o.value fc.value ac.value 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" "ring pass/reject Butterworth Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; rw = Scale "Ring width" 0.01 0.99 0.5; o = Scale "Order" 1 10 2; // call a freq func with our parameters _params f = f (sense.value + 8) o.value fc.value rw.value ac.value 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Band_item = class Menuaction "_Band Pass or Band Reject" "band pass/reject Butterworth Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fcx = Scale "Horizontal frequency cutoff" 0.01 0.99 0.5; fcy = Scale "Vertical frequency cutoff" 0.01 0.99 0.5; r = Scale "Radius" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; o = Scale "Order" 1 10 2; // call a freq func with our parameters _params f = f (sense.value + 14) o.value fcx.value fcy.value r.value ac.value; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } } } Filter_enhance_item = class Menupullright "_Enhance" "various enhancement filters" { Falsecolour_item = class Menuaction "_False Colour" "false colour a mono image" { action x = class _result { _vislevel = 3; o = Scale "Offset" (-255) 255 0; clip = Toggle "Clip colour range" false; _result = map_unary process x { process im = falsecolour mono'' { mono = colour_transform_to Image_type.B_W im; mono' = mono + o; mono'' = (unsigned char) mono', clip = (unsigned char) (mono' & 0xff); } } } } Statistical_diff_item = class Menuaction "_Statistical Difference" "statistical difference of an image" { action x = class _result { _vislevel = 3; wsize = Expression "Window size" 11; tmean = Expression "Target mean" 128; mean_weight = Scale "Mean weight" 0 1 0.8; tdev = Expression "Target deviation" 50; dev_weight = Scale "Deviation weight" 0 1 0.8; border = Toggle "Output image matches input image in size" true; _result = map_unary process x { process in = Image in'' { in' = colour_transform_to Image_type.B_W in.value; fn = im_stdif, border = im_stdif_raw; in'' = fn in' mean_weight.value tmean.expr dev_weight.value tdev.expr wsize.expr wsize.expr; } } } } Hist_equal_item = class Menupullright "_Equalise Histogram" "equalise contrast" { Global_item = class Menuaction "_Global" "equalise contrast globally" { action x = map_unary hist_equalize x; } Local_item = class Menuaction "_Local" "equalise contrast within a roving window" { action x = class _result { _vislevel = 3; window_width = Expression "Window width" 20; window_height = Expression "Window height" 20; _result = map_unary process x { process in = hist_equalize_local window_width.expr window_height.expr in; } } } } } Filter_correlate_item = class Menupullright "Spatial _Correlation" "calculate correlation surfaces" { Correlate_item = class Menuaction "_Correlate" "calculate correlation coefficient" { action a b = map_binary corr a b { corr a b = correlate a b, a.width <= b.width && a.height <= b.height = correlate b a; } } Correlate_fast_item = class Menuaction "_Simple Difference" "calculate sum of squares of differences" { action a b = map_binary corr a b { corr a b = correlate_fast a b, a.width <= b.width && a.height <= b.height = correlate_fast b a; } } } Filter_hough_item = class Menupullright "_Hough Transform" "transform to parameter space" { Line_item = class Menuaction "_Line" "find straight line Hough transform" { action a = class _result { _vislevel = 3; pspace_width = Expression "Parameter space width" 64; pspace_height = Expression "Parameter space height" 64; _result = map_unary line a { line a = hough_line (to_real pspace_width) (to_real pspace_height) a; } } } Circle_item = class Menuaction "_Circle" "find circle Hough transform" { action a = class _result { _vislevel = 3; scale = Expression "Scale down parameter space by" 10; min_radius = Expression "Minimum radius" 10; max_radius = Expression "Maximum radius" 30; _result = map_unary circle a { circle a = hough_circle (to_real scale) (to_real min_radius) (to_real max_radius) a; } } } } Filter_coordinate_item = class Menupullright "_Coordinate Transform" "various coordinate transforms" { // run a function which wants a complex arg on a non-complex two-band // image run_cmplx fn x = re x' ++ im x' { x' = fn (x?0, x?1); } Polar_item = class Menuaction "_Polar" "transform to polar coordinates" { action a = class _result { _vislevel = 3; interp = Interpolate_picker Interpolate_type.BILINEAR; _result = map_unary to_polar a { to_polar im = mapim interp.value map' im { // xy image, origin in the centre, scaled to fit image to // a circle xy = make_xy im.width im.height; xy' = xy - Vector [im.width / 2, im.height / 2]; scale = min [im.width, im.height] / im.width; xy'' = 2 * xy' / scale; // to polar, scale vertical axis to 360 degrees map = run_cmplx polar xy''; map' = map * Vector [1, im.height / 360]; } } } } Rectangular_item = class Menuaction "_Rectangular" "transform to rectangular coordinates" { action a = class _result { _vislevel = 3; interp = Interpolate_picker Interpolate_type.BILINEAR; _result = map_unary to_rect a { to_rect im = mapim interp.value map'' im { // xy image, vertical scaled to 360 degrees xy = make_xy im.width im.height; xy' = xy * Vector [1, 360 / im.height]; // to rect, scale to image rect map = run_cmplx rectangular xy'; scale = min [im.width, im.height] / im.width; map' = map * scale / 2; map'' = map' + Vector [im.width / 2, im.height / 2]; } } } } } #separator Filter_tilt_item = class Menupullright "Ti_lt Brightness" "tilt brightness" { Left_right_item = class Menuaction "_Left to Right" "linear left-right brighten" { action x = class _result { _vislevel = 3; tilt = Scale "Left-right tilt" (-1) 1 0; _result = map_unary tilt_lr x { tilt_lr image = image * scale { ramp = im_fgrey image.width image.height; scale = (ramp - 0.5) * tilt + 1; } } } } Top_bottom_item = class Menuaction "_Top to Bottom" "linear top-bottom brighten" { action x = class _result { _vislevel = 3; tilt = Scale "Top-bottom tilt" (-1) 1 0; _result = map_unary tilt_tb x { tilt_tb image = image * scale { ramp = rot90 (im_fgrey image.height image.width); scale = (ramp - 0.5) * tilt + 1; } } } } sep1 = Menuseparator; Left_right_cos_item = class Menuaction "Cosine Left-_right" "cosine left-right brighten" { action x = class _result { _vislevel = 3; tilt = Scale "Left-right tilt" (-1) 1 0; shift = Scale "Shift by" (-1) 1 0; _result = map_unary tilt_lr x { tilt_lr image = image * scale { ramp = im_fgrey image.width image.height - 0.5 - shift.value; scale = 0.5 * tilt.value * cos (ramp * 180) + 1; } } } } Top_bottom_cos_item = class Menuaction "Cosine Top-_bottom" "cosine top-bottom brighten" { action x = class _result { _vislevel = 3; tilt = Scale "Top-bottom tilt" (-1) 1 0; shift = Scale "Shift by" (-1) 1 0; _result = map_unary tilt_tb x { tilt_tb image = image * scale { ramp = rot90 (im_fgrey image.height image.width) - 0.5 - shift.value; scale = 0.5 * tilt.value * cos (ramp * 180) + 1; } } } } sep2 = Menuseparator; Circular_item = class Menuaction "_Circular" "circular brighten" { action x = class _result { _vislevel = 3; tilt = Scale "Tilt" (-1) 1 0; hshift = Scale "Horizontal shift by" (-1) 1 0; vshift = Scale "Vertical shift by" (-1) 1 0; _result = map_unary tilt_tb x { tilt_tb image = image * scale { hramp = im_fgrey image.width image.height - 0.5 - hshift.value; vramp = rot90 (im_fgrey image.height image.width) - 0.5 - vshift.value; ramp = (hramp ** 2 + vramp ** 2) ** 0.5; scale = 0.5 * tilt.value * cos (ramp * 180) + 1; } } } } } Filter_blend_item = class Menupullright "_Blend" "blend objects together" { Scale_blend_item = class Menuaction "_Scale" "blend two objects together with a scale" { action a b = class _result { _vislevel = 3; p = Scale "Blend position" 0 1 0.5; _result = map_binary process a b { process im1 im2 = im1 * (1 - p.value) + im2 * p.value; } } } Image_blend_item = class Menuaction "_Image" "use an image to blend two objects" { action a b c = class _result { _vislevel = 3; i = Toggle "Invert mask" false; _result = map_trinary process a b c { process a b c = blend condition in1 in2, !i = blend (invert condition) in1 in2 { compare a b // prefer image as the condition = false, !has_image a && has_image b // prefer mono images as the condition = false, has_bands a && has_bands b && get_bands a > 1 && get_bands b == 1 // prefer uchar as the condition = false, has_format a && has_format b && get_format a > Image_format.UCHAR && get_format b == Image_format.UCHAR = true; [condition, in1, in2] = sortc compare [a, b, c]; } } } } Line_blend_item = class Menuaction "_Along Line" "blend between image a and image b along a line" { action a b = class _result { _vislevel = 3; orientation = Option "Orientation" [ "Left to Right", "Top to Bottom" ] 0; blend_position = Scale "Blend position" 0 1 0.5; blend_width = Scale "Blend width" 0 1 0.05; _result = map_binary process a b { process a b = blend (Image condition) b a { output_width = max_pair a.width b.width; output_height = max_pair a.height b.height; range = output_width, orientation == 0 = output_height; blend_position' = floor (range * blend_position.value); blend_width' = 1, blend_width.value == 0 = floor (range * blend_width.value); start = blend_position' - blend_width' / 2; background = (make_xy output_width output_height) >= blend_position'; ramp = im_grey blend_width' output_height, orientation == 0 = rot90 (im_grey blend_width' output_width); condition = insert_noexpand start 0 ramp background?0, orientation == 0 = insert_noexpand 0 start ramp background?1; } } } } Blend_alpha_item = class Menuaction "_Alpha" "blend images with optional alpha channels" { // usage: layerit foreground background // input images must be either 1 or 3 bands, optionally + 1 band // which is used as the alpha channel // rich lott scale_mask im opacity = (unsigned char) (to_real opacity / 255 * im); // to mono intensity = colour_transform_to Image_type.B_W; // All the blend functions // I am grateful to this page // http://www.pegtop.net/delphi/blendmodes/ // for most of the formulae. blend_normal mask opacity fg bg = blend (scale_mask mask opacity) fg bg; blend_iflighter mask opacity fg bg = blend (if fg' > bg' then mask' else 0) fg bg { fg' = intensity fg; bg' = intensity bg; mask' = scale_mask mask opacity ; } blend_ifdarker mask opacity fg bg = blend (if fg' < bg' then mask' else 0) fg bg { fg' = intensity fg ; bg' = intensity bg ; mask' = scale_mask mask opacity ; } blend_multiply mask opacity fg bg = blend (scale_mask mask opacity) fg' bg { fg' = fg / 255 * bg; } blend_add mask opacity fg bg = blend mask fg' bg { fg' = opacity / 255 * fg + bg; } blend_subtract mask opacity fg bg = blend mask fg' bg { fg' = bg - opacity / 255 * fg; } blend_screen mask opacity fg bg = blend mask fg' bg { fg' = 255 - (255 - bg) * (255 - (opacity / 255 * fg)) / 255; } blend_burn mask opacity fg bg = blend mask fg'' bg { // fades to white which has no effect. fg' = (255 - opacity) + opacity * fg / 255; fg'' = 255 - 255 * (255 - bg) / fg'; } blend_softlight mask opacity fg bg = blend mask' fg' bg { mask' = scale_mask mask opacity; fg' = (2 * bg * fg + bg * bg * (1 - 2 * fg / 255)) / 255; } blend_hardlight mask opacity fg bg = blend mask' fg' bg { mask' = scale_mask mask opacity; fg' = 2 / 255 * fg * bg, bg < 129 = 255 - 2 * (255 - bg) * (255 - fg) / 255; } blend_lighten mask opacity fg bg = blend mask' fg' bg { mask' = scale_mask mask opacity; fg' = if bg < fg then fg else bg; } blend_darken mask opacity fg bg = blend mask' fg' bg { mask' = scale_mask mask opacity; fg' = if bg > fg then fg else bg; } blend_dodge mask opacity fg bg = blend mask fg'' bg { // one added to avoid divide by zero fg' = 1 + 255 - (opacity / 255 * fg); fg'' = bg * 255 / fg'; } blend_reflect mask opacity fg bg = blend mask' fg' bg { mask' = scale_mask mask opacity; fg' = bg * bg / (255 - fg); } blend_freeze mask opacity fg bg = blend mask' fg' bg { mask' = scale_mask mask opacity; fg' = 255 - (255 - bg) * (255 - bg) / (1 + fg); } blend_or mask opacity fg bg = bg | (unsigned char) fg' { mask' = scale_mask mask opacity; fg' = fg * mask' / 255; } blend_and mask opacity fg bg = bg & (unsigned char) fg' { mask' = scale_mask mask opacity; fg' = fg * mask' / 255; } // blend types NORMAL = 0; IFLIGHTER = 1; IFDARKER = 2; MULTIPLY = 3; ADD = 4; SUBTRACT = 5; SCREEN = 6; BURN = 7; DODGE = 8; HARDLIGHT = 9; SOFTLIGHT = 10; LIGHTEN = 11; DARKEN = 12; REFLECT = 13; FREEZE = 14; OR = 15; AND = 16; // names we show the user for blend types names = Enum [ _ "Normal" => NORMAL, _ "If Lighter" => IFLIGHTER, _ "If Darker" => IFDARKER, _ "Multiply" => MULTIPLY, _ "Add" => ADD, _ "Subtract" => SUBTRACT, _ "Screen" => SCREEN, _ "Burn" => BURN, _ "Soft Light" => SOFTLIGHT, _ "Hard Light" => HARDLIGHT, _ "Lighten" => LIGHTEN, _ "Darken" => DARKEN, _ "Dodge" => DODGE, _ "Reflect" => REFLECT, _ "Freeze" => FREEZE, _ "Bitwise OR" => OR, _ "Bitwise AND" => AND ]; // functions we call for each blend type actions = Table [ [NORMAL, blend_normal], [IFLIGHTER, blend_iflighter], [IFDARKER, blend_ifdarker], [MULTIPLY, blend_multiply], [ADD, blend_add], [SUBTRACT, blend_subtract], [SCREEN, blend_screen], [BURN, blend_burn], [SOFTLIGHT, blend_softlight], [HARDLIGHT, blend_hardlight], [LIGHTEN, blend_lighten], [DARKEN, blend_darken], [DODGE, blend_dodge], [REFLECT, blend_reflect], [FREEZE, blend_freeze], [OR, blend_or], [AND, blend_and] ]; // make sure im has an alpha channel (set opaque if it hasn't) put_alpha im = im, im.bands == 4 || im.bands == 2 = im ++ 255; // make sure im has no alpha channel lose_alpha im = extract_bands 0 3 im, im.bands == 4 = im?0, im.bands == 2 = im; // does im have al alpha channel? has_alpha im = im.bands == 2 || im.bands == 4; // get the alpha (set opaque if no alpha) get_alpha img = img'?3, img.bands == 4 = img'?1 { img' = put_alpha img; } // add an alpha ... cast the alpha image to match the main image append_alpha im alpha = im ++ clip2fmt im.format alpha; // makes fg the same size as bg, displaced with u, v pixel offset moveit fg bg u v = insert_noexpand u v fg bg' { bg' = image_new bg.width bg.height fg.bands fg.format fg.coding fg.type 0 0 0; } action bg fg = class _value { _vislevel = 3; method = Option_enum "Blend mode" names "Normal"; opacity = Scale "Opacity" 0 255 255; hmove = Scale "Horizontal move by" (-bg.width) (bg.width) 0; vmove = Scale "Vertical move by" (-bg.height) (bg.height) 0; _value = append_alpha blended merged_alpha, has_alpha bg = blended { // displace and resize fg (need to displace alpha too) fg' = moveit (put_alpha fg) bg hmove vmove; // transform to sRGB fg'' = colour_transform_to Image_type.sRGB (lose_alpha fg'); bg' = colour_transform_to Image_type.sRGB (lose_alpha bg); // alphas merged merged_alpha = get_alpha bg | get_alpha fg'; // blend together blended = (actions.lookup 0 1 method.value_thing) (get_alpha fg') opacity.value fg'' bg'; } } } } Filter_overlay_header_item = class Menuaction "_Overlay" "make a colour overlay of two monochrome images" { action a b = class _result { _vislevel = 3; colour = Option "Colour overlay as" [ _ "Green over Red", _ "Blue over Red", _ "Red over Green", _ "Red over Blue", _ "Blue over Green", _ "Green over Blue" ] 0; _result = map_binary overlay a b { overlay a b = image_set_type Image_type.sRGB [(a' ++ b' ++ 0), (a' ++ 0 ++ b'), (b' ++ a' ++ 0), (b' ++ 0 ++ a'), (0 ++ a' ++ b'), (0 ++ b' ++ a')]?colour { a' = colour_transform_to Image_type.B_W a; b' = colour_transform_to Image_type.B_W b; } } } } Filter_colourize_item = class Menuaction "_Colourize" "use a colour image or patch to tint a mono image" { action a b = class _result { _vislevel = 3; tint = Scale "Tint" 0 1 0.6; _result = map_binary tintit a b { tintit a b = colour_transform_to (get_type colour) colourized' { // get the mono thing first [mono, colour] = sortc (const (is_colour_type @ get_type)) [a, b]; colour' = tint * colour_transform_to Image_type.LAB colour; mono' = colour_transform_to Image_type.B_W mono; colourized = (mono' / 2.55) ++ colour'?1 ++ colour'?2; colourized' = image_set_type Image_type.LAB colourized; } } } } Filter_browse_multiband_item = class Menupullright "Bro_wse" "browse though an image, bitwise or bandwise" { Bandwise_item = class Menuaction "B_andwise" "browse through the bands of a multiband image" { action image = class _result { _vislevel = 3; band = Scale "Band" 0 (image.bands - 1) 0; display = Option "Display as" [ _ "Grey", _ "Green over Red", _ "Blue over Red", _ "Red over Green", _ "Red over Blue", _ "Blue over Green", _ "Green over Blue" ] 0; _result = output { down = (int) band.value; up = down + 1; remainder = band.value - down; fade x a = Vector [0], x == 0 = a * x; a = fade remainder image?up; b = fade (1 - remainder) image?down; output = [ a + b, a ++ b ++ 0, a ++ 0 ++ b, b ++ a ++ 0, b ++ 0 ++ a, 0 ++ a ++ b, 0 ++ b ++ a ] ? display; } } } Bitwise_item = class Menuaction "Bi_twise" "browse through the bits of an image" { action x = class _result { _vislevel = 3; bit = Islider "Bit" 0 (nbits - 1) (nbits - 1) { nbits = x.bits, is_Image x = 8; Islider c f t v = class scope.Scale c f t ((int) v) { Scale = Islider; } } _result = map_unary process x { process im = (im & (0x1 << bit.value)) != 0; } } } } #separator Filter_negative_item = class Menuaction "Photographic _Negative" "swap black and white" { action x = map_unary invert x { invert in = clip2fmt in.format (colour_transform_to (get_type in) rgb') { rgb = colour_transform_to Image_type.sRGB in; rgb' = 255 - rgb; } } } Filter_solarize_item = class Menuaction "_Solarise" "invert colours above a threshold" { action x = class _result { _vislevel = 3; kink = Scale "Kink" 0 1 0.5; _result = map_unary process x { process image = hist_map tab'''' image { // max pixel value for this format mx = Image_format.maxval image.format; // make a LUT ... just 8 and 16 bit tab = im_identity_ushort image.bands mx, image.format == Image_format.USHORT = im_identity image.bands; tab' = Image tab; // make basic ^ shape tab'' = tab' * (1 / kink), tab' < mx * kink = (mx - tab') / (1 - kink); tab''' = clip2fmt image.format tab''; // smooth a bit mask = matrix_blur (tab'''.width / 8); tab'''' = convsep mask tab'''; } } } } Filter_diffuse_glow_item = class Menuaction "_Diffuse Glow" "add a halo to highlights" { action x = class _result { _vislevel = 3; r = Scale "Radius" 0 50 5; highlights = Scale "Highlights" 0 100 95; glow = Scale "Glow" 0 1 0.5; colour = Colour_new_item.Widget_colour_item.action; _result = map_unary process x { process image = image' { mono = (unsigned char) (colour_transform_to Image_type.B_W image); thresh = hist_thresh (highlights.value / 100) mono; mask = mono > thresh; blur = convsep (matrix_gaussian_blur r.value) mask; colour' = colour_transform_to image.type colour; image' = image + colour' * glow * (blur / 255); } } } } Filter_drop_shadow_item = class Menuaction "Drop S_hadow" "add a drop shadow to an image" { action x = class _result { _vislevel = 3; sx = Scale "Horizontal shadow" (-50) 50 5; sy = Scale "Vertical shadow" (-50) 50 5; ss = Scale "Shadow softness" 0 20 5; bg_colour = Expression "Background colour" 255; sd_colour = Expression "Shadow colour" 128; alpha = Toggle "Shadow in alpha channel" false; transparent = Toggle "Zero pixels are transparent" false; _result = map_unary shadow x { shadow image = Image final { blur_size = ss.value * 2 + 1; // matrix we blur with to soften shadows blur_matrix = matrix_gaussian_blur blur_size; matrix_size = blur_matrix.width; matrix_radius = (int) (matrix_size / 2) + 1; // position and size of shadow image in input cods // before and after fuzzing shadow_rect = Rect sx.value sy.value image.width image.height; fuzzy_shadow_rect = shadow_rect.margin_adjust matrix_radius; // size and pos of final image, in input cods final_rect = image.rect.union fuzzy_shadow_rect; // hard part of shadow in output cods shadow_rect' = Rect (shadow_rect.left - final_rect.left) (shadow_rect.top - final_rect.top) shadow_rect.width shadow_rect.height; // make the shadow mask ... true for parts which cast // a shadow mask = (foldr1 bitwise_and @ bandsplit) (image.value != 0), transparent = image_new image.width image.height 1 Image_format.UCHAR Image_coding.NOCODING Image_type.B_W 255 0 0; mask' = embed 0 shadow_rect'.left shadow_rect'.top final_rect.width final_rect.height mask; mask'' = convsep blur_matrix mask'; // use mask to fade between bg and shadow colour mk_background colour = image_new final_rect.width final_rect.height image.bands image.format image.coding image.type colour 0 0; bg_image = mk_background bg_colour.expr; shadow_image = mk_background sd_colour.expr; bg = blend mask'' shadow_image bg_image; // make a full size mask fg_mask = embed 0 (image.rect.left - final_rect.left) (image.rect.top - final_rect.top) final_rect.width final_rect.height mask; // wrap up the input image ... put the shadow colour // around it, so if we are outputting a separate // alpha the shadow colour will be set correctly fg = insert (image.rect.left - final_rect.left) (image.rect.top - final_rect.top) image.value shadow_image; final // make a separate alpha = fg ++ mask'', alpha // paste image over shadow = if fg_mask then fg else bg; } } } } Filter_paint_text_item = class Menuaction "_Paint Text" "paint text into an image" { action x = paint_position, is_Group x = paint_area { paint_area = class _result { _check_args = [ [x, "x", check_Image] ]; _vislevel = 3; text = String "Text to paint" "Hello world!"; font = Fontname "Use font" Workspaces.Preferences.PAINTBOX_FONT; align = Option "Alignment" ["Left", "Centre", "Right"] 0; dpi = Expression "DPI" 300; colour = Expression "Text colour" 255; place = Region x (x.width / 4) (x.height / 4) (x.width / 2) (x.height / 2); _result = insert_noexpand place.left place.top (blend txt' fg place) x { fg = image_new place.width place.height x.bands x.format x.coding x.type colour.expr 0 0; txt = Image (im_text text.value font.value place.width align.value (to_real dpi)); bg = im_black place.width place.height 1; txt' = insert_noexpand 0 0 txt bg; } } paint_position = class _result { _vislevel = 3; text = Pattern_images_item.Text_item.action; colour = Expression "Text colour" 255; position = Option "Position" [ _ "North-west", _ "North", _ "North-east", _ "West", _ "Centre", _ "East", _ "South-west", _ "South", _ "South-east", _ "Specify in pixels" ] 4; left = Expression "Pixels from left" 0; top = Expression "Pixels from top" 0; _result = map_unary paint x { paint image = insert_noexpand x' y' place' image { xr = image.width - text.width; yr = image.height - text.height; x = left.expr, position == 9 = [0, xr / 2, xr]?(position % 3); y = top.expr, position == 9 = [0, yr / 2, yr]?(position / 3); x' = range 0 x (image.width - 1); y' = range 0 y (image.height - 1); w' = range 1 text.width (image.width - x'); h' = range 1 text.height (image.height - y'); place = extract_area x' y' w' h' image; text' = insert_noexpand 0 0 text (im_black w' h' 1); fg = image_new w' h' image.bands image.format image.coding image.type colour.expr 0 0; place' = blend text' fg place; } } } } } nip2-8.7.0/share/nip2/compat/8.2/Histogram.def0000644000175000017500000001621413224651032015502 00000000000000Hist_new_item = class Menupullright "_New" "new histogram" { Hist_item = class Menuaction "_Identity" "make an identity histogram" { action = class _result { _vislevel = 3; d = Option "Depth" ["8 bit", "16 bit"] 0; _result = Plot [] ([im_identity 1, im_identity_ushort 1 65536]?d); } } Hist_new_from_matrix = Matrix_buildlut_item; Hist_from_image_item = class Menuaction "Ta_g Image As Histogram" "set image Type to Histogram" { action x = hist_tag x; } Tone_item = class Menuaction "_Tone Curve" "make a new tone mapping curve" { action = class _result { _vislevel = 3; d = Option "Depth" ["8 bit", "16 bit"] 0; b = Scale "Black point" 0 100 0; w = Scale "White point" 0 100 100; sp = Scale "Shadow point" 0.1 0.3 0.2; mp = Scale "Mid-tone point" 0.4 0.6 0.5; hp = Scale "Highlight point" 0.7 0.9 0.8; sa = Scale "Shadow adjust" (-15) 15 0; ma = Scale "Mid-tone adjust" (-30) 30 0; ha = Scale "Highlight adjust" (-15) 15 0; _result = tone_build fmt b w sp mp hp sa ma ha { fmt = [Image_format.UCHAR, Image_format.USHORT]?d; } } } } Hist_convert_to_hist_item = class Menuaction "Con_vert to Histogram" "convert anything to a histogram" { action x = hist_tag (to_image x); } Hist_find_item = class Menupullright "_Find" "find a histogram" { Oned_item = class Menuaction "_One Dimension" "for a n-band image, make an n-band 1D histogram" { action x = map_unary hist_find x; } Nd_item = class Menuaction "_Many Dimensions" "for a n-band image, make an n-dimensional histogram" { action x = class _result { _vislevel = 3; // default to something small-ish bins = Expression "Number of bins in each dimension" 8; _result = map_unary process x { process in = hist_find_nD bins in; } } } Indexed_item = class Menuaction "_Indexed" "use a 1-band index image to pick bins for an n-band image" { action x y = map_binary map x y { map a b = hist_find_indexed index im { [im, index] = sortc (const is_index) [a, b]; is_index x = has_image x && b == 1 && (f == Image_format.UCHAR || f == Image_format.USHORT) { im = get_image x; b = get_bands x; f = get_format x; } } } } } Hist_map_item = class Menuaction "_Map" "map an image through a histogram" { action x y = map_binary map x y { map a b = hist_map hist im { [im, hist] = sortc (const is_hist) [a, b]; } } } Hist_eq_item = Filter_enhance_item.Hist_equal_item; #separator Hist_cum_item = class Menuaction "_Integrate" "form cumulative histogram" { action x = map_unary hist_cum x; } Hist_diff_item = class Menuaction "_Differentiate" "find point-to-point differences (inverse of Integrate)" { action x = map_unary hist_diff x; } Hist_norm_item = class Menuaction "N_ormalise" "normalise a histogram" { action x = map_unary hist_norm x; } Hist_inv_item = class Menuaction "In_vert" "invert a histogram" { action x = map_unary hist_inv x; } Hist_match_item = class Menuaction "Ma_tch" "find LUT which will match first histogram to second" { action in ref = map_binary hist_match in ref; } Hist_zerox_item = class Menuaction "_Zero Crossings" "find zero crossings" { action x = class _result { _vislevel = 3; edge = Option "Direction" [ "Positive-going", "Negative-going" ] 0; _result = map_unary (zerox (if edge == 0 then -1 else 1)) x; } } #separator Hist_profile_item = class Menuaction "Find _Profile" "search from image edges for non-zero pixels" { action x = class _result { _vislevel = 3; edge = Option "Search from" [ "Top edge down", "Left edge to right", "Bottom edge up", "Right edge to left" ] 2; _result = map_unary profile x { profile image = (Plot_histogram @ hist_tag) [ profilemb 0 image.value, profilemb 1 image.value, profilemb 0 (fliptb image.value), profilemb 1 (fliplr image.value) ]?edge; // im_profile only does 1 band images :-( profilemb d = bandjoin @ map (converse im_profile d) @ bandsplit; } } } Hist_project_item = class Menuaction "Find Pro_jections" "find horizontal and vertical projections" { action x = class { _vislevel = 2; _result = map_unary project x; // extract the result ... could be a group extr n = Plot_histogram _result?n, is_list _result = Group (map (Plot_histogram @ converse subscript n) _result.value); horizontal = extr 0; vertical = extr 1; centre = (gravity horizontal, gravity vertical); } } #separator Hist_graph_item = class Menuaction "P_lot Slice" "plot a slice along a guide or arrow" { action x = class _value { _vislevel = 3; width = Scale "Width" 1 40 1; displace = Scale "Horizontal displace" (-50) 50 0; vdisplace = Scale "Vertical displace" (-50) 50 0; _value = map_unary graph x { graph arrow = hist_tag area' { area = extract_arrow displace.value vdisplace.value width.value arrow; // squish vertically to get an average area' = resize Interpolate_bilinear 1 (1 / width.value) area; } } } } Extract_arrow_item = class Menuaction "Extract _Arrow" "extract the area around an arrow" { action x = class _value { _vislevel = 3; width = Scale "Width" 1 40 1; displace = Scale "Horizontal displace" (-50) 50 0; vdisplace = Scale "Vertical displace" (-50) 50 0; _value = map_unary (extract_arrow displace.value vdisplace.value width.value) x; } } Hist_plot_item = class Menuaction "Plot _Object" "plot an object as a bar, point or line graph" { action x = class _result { _vislevel = 3; caption = Expression "Chart caption" "none"; format = Option_enum "Format" Plot_format.names "YYYY"; style = Option_enum "Style" Plot_style.names "Line"; auto = Toggle "Auto Range" true; xmin = Expression "X range minimum" 0; xmax = Expression "X range maximum" 1; ymin = Expression "Y range minimum" 0; ymax = Expression "Y range maximum" 1; xcaption = Expression "X axis caption" "none"; ycaption = Expression "Y axis caption" "none"; series_captions = Expression "Series captions" ["Band 0"]; _result = Plot options (image x) { options = [$style => style.value, $format => format.value] ++ range ++ captions; range = [], auto = [$xmin => xmin.expr, $xmax => xmax.expr, $ymin => ymin.expr, $ymax => ymax.expr]; captions = concat (map test caption_options) ++ [$series_captions => series_captions.expr] { caption_options = [ $caption => caption.expr, $xcaption => xcaption.expr, $ycaption => ycaption.expr ]; test x = [], value == "none" = [option_name => value] { [option_name, value] = x; } } image x = image (extract_arrow 0 0 1 x), is_Arrow x = get_image x, has_image x = x2b im, b == 1 = im { im = get_image (to_image x); w = get_width im; h = get_height im; b = get_bands im; // matrix to image makes a 1-band mxn image // we need to put columns into bands x2b im = bandjoin (map extract_col [0 .. w - 1]) { extract_col x = extract_area x 0 1 h im; } } } } } nip2-8.7.0/share/nip2/compat/8.2/Object.def0000644000175000017500000000220513224651032014746 00000000000000Object_duplicate_item = class Menuaction "_Duplicate" "take a copy of an object" { action x = map_unary copy x; } #separator Object_list_to_group_item = class Menuaction "_List to Group" "turn a list of objects into a group" { action x = to_group x; } Object_group_to_list_item = class Menuaction "_Group to List" "turn a group into a list of objects" { action x = to_list x; } #separator Object_break_item = class Menuaction "_Break Up Object" "break an object into a list of components" { action x = map_unary break x { break x = bandsplit x, is_Image x = map Vector x.value, is_Matrix x = x.value, is_Vector x || is_Real x = error "Breakup: not Image/Matrix/Vector/Real"; } } Object_assemble_item = class Menuaction "_Assemble Objects" "assemble a list of objects into a single object" { action x = map_unary ass x { ass x = [], x == [] = Vector x, is_real_list x = Matrix x, is_matrix x = bandjoin x, is_listof is_Image x = Vector (map get_value x), is_listof is_Real x = Matrix (map get_value x), is_listof is_Vector x = error "Assemble: not list of Image/Vector/Real/image/real"; } } nip2-8.7.0/share/nip2/compat/8.2/Makefile.in0000644000175000017500000003702413350464104015136 00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = share/nip2/compat/8.2 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(startdir)" DATA = $(start_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BISON = @BISON@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DLLWRAP = @DLLWRAP@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FFTW3_CFLAGS = @FFTW3_CFLAGS@ FFTW3_LIBS = @FFTW3_LIBS@ FGREP = @FGREP@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_LIBS = @GSL_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ IP_CFLAGS = @IP_CFLAGS@ IP_LIBS = @IP_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBGOFFICE_CFLAGS = @LIBGOFFICE_CFLAGS@ LIBGOFFICE_LIBS = @LIBGOFFICE_LIBS@ LIBGSF_CFLAGS = @LIBGSF_CFLAGS@ LIBGSF_LIBS = @LIBGSF_LIBS@ LIBGVC_CFLAGS = @LIBGVC_CFLAGS@ LIBGVC_LIBS = @LIBGVC_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ 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@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ REQUIRED_PACKAGES_CFLAGS = @REQUIRED_PACKAGES_CFLAGS@ REQUIRED_PACKAGES_LIBS = @REQUIRED_PACKAGES_LIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOP_SRCDIR = @TOP_SRCDIR@ UPDATE_DESKTOP_DATABASE = @UPDATE_DESKTOP_DATABASE@ UPDATE_MIME_DATABASE = @UPDATE_MIME_DATABASE@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XDG_OPEN = @XDG_OPEN@ XGETTEXT = @XGETTEXT@ 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@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ startdir = $(pkgdatadir)/compat/8.2 start_DATA = \ Colour.def \ _convert.def \ Filter.def \ _generate.def \ Histogram.def \ Image.def \ _joe_extra.def \ _joe_utilities.def \ _list.def \ _magick.def \ Magick.def \ Math.def \ Matrix.def \ _Object.def \ Object.def \ _predicate.def \ Preferences.ws \ _stdenv.def \ Tasks.def \ _types.def \ Widgets.def EXTRA_DIST = $(start_DATA) all: all-am .SUFFIXES: $(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) --foreign share/nip2/compat/8.2/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign share/nip2/compat/8.2/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): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-startDATA: $(start_DATA) @$(NORMAL_INSTALL) @list='$(start_DATA)'; test -n "$(startdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(startdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(startdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(startdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(startdir)" || exit $$?; \ done uninstall-startDATA: @$(NORMAL_UNINSTALL) @list='$(start_DATA)'; test -n "$(startdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(startdir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: 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 check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(startdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-startDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-startDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-startDATA install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags-am uninstall uninstall-am uninstall-startDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: nip2-8.7.0/share/nip2/compat/8.2/Matrix.def0000644000175000017500000002573113224651032015015 00000000000000 Matrix_build_item = class Menupullright "_New" "make a new matrix of some sort" { Plain_item = class Menuaction "_Plain" "make a new plain matrix widget" { action = Matrix (identity_matrix 3); } Convolution_item = class Menuaction "_Convolution" "make a new convolution matrix widget" { action = Matrix_con 1 0 [[0, 0, 0], [0, 1, 0], [0, 0, 0]]; } Recombination_item = class Menuaction "_Recombination" "make a new recombination matrix widget" { action = Matrix_rec (identity_matrix 3); } Morphology_item = class Menuaction "_Morphology" "make a new morphology matrix widget" { action = Matrix_mor [[0, 0, 0], [0, 255, 0], [0, 0, 0]]; } sep1 = Menuseparator; Matrix_identity_item = class Menuaction "_Identity" "make an identity matrix" { action = identity (identity_matrix 5); identity v = class _result { _vislevel = 3; s = Expression "Size" (len v); _result = Matrix (identity_matrix (to_real s)), to_real s != len v; = Matrix v; Matrix_vips value scale offset filename display = identity value; } } Matrix_series_item = class Menuaction "_Series" "make a series" { action = series (mkseries 0 1 5); mkseries s t e = transpose [[to_real s, to_real s + to_real t .. to_real e]]; series v = class _result { _vislevel = 3; _s = v?0?0; _t = v?1?0 - v?0?0; _e = (last v)?0; s = Expression "Start value" _s; t = Expression "Step by" _t; e = Expression "End value" _e; _result = Matrix (mkseries s t e), to_real s != _s || to_real t != _t || to_real e != _e = Matrix v; Matrix_vips value scale offset filename display = series value; } } Matrix_square_item = class Menuaction "_Square" "make a square matrix" { action = square (mksquare 5); mksquare s = replicate s (take s [1, 1 ..]); square v = class _result { _vislevel = 3; s = Expression "Size" (len v); _result = Matrix_con (sum v) 0 v, len v == to_real s = Matrix_con (sum m) 0 m { m = mksquare (to_real s); } Matrix_vips value scale offset filename display = square value; } } Matrix_circular_item = class Menuaction "_Circular" "make a circular matrix" { action = circle (mkcircle 3); mkcircle r = map2 (map2 pyth) xes yes { line = [-r .. r]; xes = replicate (2 * r + 1) line; yes = transpose xes; pyth a b = 1, (a**2 + b**2) ** 0.5 <= r = 0; } circle v = class _result { _vislevel = 3; r = Expression "Radius" ((len v - 1) / 2); _result = Matrix_con (sum v) 0 v, len v == r.expr * 2 + 1 = Matrix_con (sum m) 0 m { m = mkcircle (to_real r); } Matrix_vips value scale offset filename display = circle value; } } Matrix_gaussian_item = class Menuaction "_Gaussian" "make a gaussian matrix" { action = class _result { _vislevel = 3; s = Scale "Sigma" 0.001 10 1; ma = Scale "Minimum amplitude" 0 1 0.2; integer = Toggle "Integer" false; _result = fn s.value ma.value { fn = im_gauss_imask, integer = im_gauss_dmask; } } } Matrix_laplacian_item = class Menuaction "_Laplacian" "make the Laplacian of a Gaussian matrix" { action = class _result { _vislevel = 3; s = Scale "Sigma" 0.001 10 1.5; ma = Scale "Minimum amplitude" 0 1 0.1; integer = Toggle "Integer" false; _result = fn s.value ma.value { fn = im_log_imask, integer = im_log_dmask; } } } } Matrix_to_matrix_item = class Menuaction "Con_vert to Matrix" "convert anything to a matrix" { action x = to_matrix x; } #separator Matrix_extract_item = class Menupullright "_Extract" "extract rows or columns from a matrix" { Rows_item = class Menuaction "_Rows" "extract rows" { action x = class _result { _vislevel = 3; first = Expression "Extract from row" 0; number = Expression "Extract this many rows" 1; _result = map_unary process x { process x = extract_area 0 first (get_width x) number x; } } } Columns_item = class Menuaction "_Columns" "extract columns" { action x = class _result { _vislevel = 3; first = Expression "Extract from column" 0; number = Expression "Extract this many columns" 1; _result = map_unary process x { process mat = extract_area first 0 number (get_height x) x; } } } Area_item = class Menuaction "_Area" "extract area" { action x = class _result { _vislevel = 3; left = Expression "First column" 0; top = Expression "First row" 0; width = Expression "Number of columns" 1; height = Expression "Number of rows" 1; _result = map_unary process x { process mat = extract_area left top width height x; } } } Diagonal_item = class Menuaction "_Diagonal" "extract diagonal" { action x = class _result { _vislevel = 3; which = Option "Extract" [ "Leading Diagonal", "Trailing Diagonal" ] 0; _result = map_unary process x { process mat = mat.Matrix_base (map2 extr [0..] mat.value), which == 0 = mat.Matrix_base (map2 extr [mat.width - 1, mat.width - 2 .. 0] mat.value); extr n l = [l?n]; } } } } Matrix_insert_item = class Menupullright "_Insert" "insert rows or columns into a matrix" { // make a new 8-bit uchar image of wxh with pixels set to p // use to generate new cells newim w h p = image_new w h 1 Image_format.UCHAR Image_coding.NOCODING Image_type.B_W p 0 0; Rows_item = class Menuaction "_Rows" "insert rows" { action x = class _result { _vislevel = 3; first = Expression "Insert at row" 0; number = Expression "Insert this many rows" 1; item = Expression "Set new cells to" 0; _result = map_unary process x { process x = foldl1 join_tb (concat [top, new, bottom]) { top = [extract_area 0 0 w f x], f > 0 = []; new = [(if is_Matrix x then to_matrix else id) (newim w number item.expr)]; bottom = [extract_area 0 f w (h - f) x], f < h = []; f = to_real first; w = get_width x; h = get_height x; } } } } Columns_item = class Menuaction "_Columns" "insert columns" { action x = class _result { _vislevel = 3; first = Expression "Insert at column" 0; number = Expression "Insert this many columns" 1; item = Expression "Set new cells to" 0; _result = map_unary process x { process x = foldl1 join_lr (concat [left, new, right]) { left = [extract_area 0 0 f h x], f > 0 = []; new = [(if is_Matrix x then to_matrix else id) (newim number h item.expr)]; right = [extract_area f 0 (w - f) h x], f < w = []; f = to_real first; w = get_width x; h = get_height x; } } } } } Matrix_delete_item = class Menupullright "_Delete" "delete rows or columns from a matrix" { // remove number of items, starting at first delete first number l = take (to_real first) l ++ drop (to_real first + to_real number) l; Rows_item = class Menuaction "_Rows" "delete rows" { action x = class _result { _vislevel = 3; first = Expression "Delete from row" 0; number = Expression "Delete this many rows" 1; _result = map_unary process x { process x = foldl1 join_tb (concat [top, bottom]) { top = [extract_area 0 0 w f x], f > 0 = []; bottom = [extract_area 0 b w (h - b) x], b < h = []; f = to_real first; n = to_real number; b = f + n; w = get_width x; h = get_height x; } } } } Columns_item = class Menuaction "_Columns" "delete columns" { action x = class _result { _vislevel = 3; first = Expression "Delete from column" 0; number = Expression "Delete this many columns" 1; _result = map_unary process x { process x = foldl1 join_lr (concat [left, right]) { left = [extract_area 0 0 f h x], f > 0 = []; right = [extract_area r 0 (w - r) h x], r < w = []; f = to_real first; n = to_real number; r = f + n; w = get_width x; h = get_height x; } } } } } Matrix_join = class Menupullright "_Join" "join two matricies" { Left_right_item = class Menuaction "_Left to Right" "join two matricies left-right" { action a b = map_binary join_lr a b; } Top_bottom_item = class Menuaction "_Top to Bottom" "joiin two matricies top-bottom" { action a b = map_binary join_tb a b; } } Matrix_rotate_item = class Menupullright "_Rotate" "clockwise rotation by fixed angles" { rot90 = Image_transform_item.Rotate_item.Fixed_item.Rot90_item; rot180 = Image_transform_item.Rotate_item.Fixed_item.Rot180_item; rot270 = Image_transform_item.Rotate_item.Fixed_item.Rot270_item; Matrix_rot45_item = class Menuaction "_45 Degrees" "45 degree rotate (square, odd-length-sides only)" { action x = map_unary rot45 x; } } Matrix_flip_item = Image_transform_item.Flip_item; Matrix_sort_item = class Menuaction "_Sort" "sort by column or row" { action x = class _result { _vislevel = 3; o = Option (_ "Orientation") [ _ "Sort by column", _ "Sort by row" ] 0; i = Expression (_ "Sort on index") 0; d = Option (_ "Direction") [ _ "Ascending", _ "Descending" ] 0; _result = map_unary sort x { idx = to_real i; pred a b = a?idx <= b?idx, d == 0 = a?idx >= b?idx; sort x = (x.Matrix_base @ sortc pred) x.value, o == 0 = (x.Matrix_base @ transpose @ sortc pred @ transpose) x.value; } } } #separator Matrix_invert_item = class Menuaction "In_vert" "calculate inverse matrix" { action x = map_unary (converse power (-1)) x; } Matrix_transpose_item = class Menuaction "_Transpose" "swap rows and columns" { action x = map_unary transpose x; } #separator Matrix_plot_scatter_item = class Menuaction "_Plot Scatter" "plot a scatter graph of a matrix of [x,y1,y2,..] coordinates" { action x = class _result { _check_args = [ [x, "x", check_Matrix] ]; _vislevel = 3; auto = Toggle "Auto Range" true; xmin = Expression "X range minimum" 0; xmax = Expression "X range maximum" 1; ymin = Expression "Y range minimum" 0; ymax = Expression "Y range maximum" 1; _result = Plot options ((x2b @ get_image @ to_image) x) { options = [$style => Plot_style.POINT, $format => Plot_format.XYYY] ++ range; range = [], auto = [$xmin => xmin.expr, $xmax => xmax.expr, $ymin => ymin.expr, $ymax => ymax.expr]; // matrix to image makes a 1-band mxn image // we need to put columns into bands x2b im = bandjoin (map extract_col [0 .. w - 1]) { w = get_width im; h = get_height im; b = get_bands im; extract_col x = extract_area x 0 1 h im; } } } } Matrix_plot_item = Hist_plot_item; Matrix_buildlut_item = class Menuaction "_Build LUT From Scatter" "make a lookup table from a matrix of [x,y1,y2..] coordinates" { action x = class _result { _check_args = [ [x, "x", check_Matrix] ]; _result = buildlut x; } } nip2-8.7.0/share/nip2/compat/8.2/_convert.def0000644000175000017500000004223013224651032015361 00000000000000 /* Try to make a Matrix ... works for Vector/Image/Real, plus image/real */ to_matrix x = to_matrix x.expr, is_Expression x = x, is_Matrix x = oo_unary_function to_matrix_op x, is_class x = tom x { to_matrix_op = Operator "to_matrix" tom Operator_type.COMPOUND false; tom x = Matrix (itom x), is_image x = Matrix [[x]], is_real x = Matrix [x], is_real_list x = Matrix x, is_matrix x = error (_ "bad arguments to " ++ "to_matrix"); itom i = (im_vips2mask ((double) i)).value, is_image i = error (_ "not image"); } /* Try to make an Image ... works for Vector/Matrix/Real, plus image/real * Special case for Colour ... pull out the colour_space and set Type in the * image. */ to_image x = to_image x.expr, is_Expression x = Image x.value, is_Plot x = x, is_Image x = Image (image_set_type (Image_type.colour_spaces.lookup 0 1 x.colour_space) (mtoi [x.value])), is_Colour x = oo_unary_function to_image_op x, is_class x = toi x { to_image_op = Operator "to_image" toi Operator_type.COMPOUND false; toi x = Image x, is_image x = Image (mtoi [[x]]), is_real x = Image (mtoi [x]), is_real_list x = Image (mtoi x), is_matrix x = error (_ "bad arguments to " ++ "to_image"); // [[real]] -> image mtoi m = im_mask2vips (Matrix m), width != 3 = joinup (im_mask2vips (Matrix m)) { width = len m?0; height = len m; joinup i = b1 ++ b2 ++ b3 { b1 = extract_area 0 0 1 height i; b2 = extract_area 1 0 1 height i; b3 = extract_area 2 0 1 height i; } } } // like to_image, but we do 1x1 pixel + x, then embed it up // always make an unwrapped image for speed ... this gets used by ifthenelse // and stuff like that // format can be NULL, meaning set format from x to_image_size width height bands format x = x, is_image x = x.value, is_Image x = im'' { // we want x to set the target format if we don't have one, so we // can't use image_new im = im_black 1 1 bands + x; im' = clip2fmt format im, format != NULL = im; im'' = embed 1 0 0 width height im'; } /* Try to make a Colour. */ to_colour x = to_colour x.expr, is_Expression x = x, is_Colour x = to_colour (extract_area x.left x.top 1 1 x.image), is_Mark x = oo_unary_function to_colour_op x, is_class x = toc x { to_colour_op = Operator "to_colour" toc Operator_type.COMPOUND false; toc x = Colour (colour_space (get_type x)) (map mean (bandsplit (get_image x))), has_image x && has_type x = Colour "sRGB" [x, x, x], is_real x // since Colour can't do mono = Colour "sRGB" x, is_real_list x && is_list_len 3 x = map toc x, is_matrix x = error (_ "bad arguments to " ++ "to_colour"); colour_space type = table.get_name type, table.has_name type = error (_ "unable to make Colour from " ++ table.get_name type ++ _ " image") { table = Image_type.colour_spaces; } } /* Try to make a real. (not a Real!) */ to_real x = to_real x.expr, is_Expression x = oo_unary_function to_real_op x, is_class x = tor x { to_real_op = Operator "to_real" tor Operator_type.COMPOUND false; tor x = x, is_real x = abs x, is_complex x = 1, is_bool x && x = 0, is_bool x && !x = error (_ "bad arguments to " ++ "to_real"); } to_int x = (int) (to_real x); /* Try to make a list ... ungroup, basically. We remove the innermost layer of * Groups. */ to_list x = x.value, is_Group x && !contains_Group x.value = Group (map to_list x.value), is_Group x = x; /* Try to make a group. The outermost list objects become Group()'d. */ to_group x = Group x, is_list x = Group (map to_group x.value), is_Group x = x; /* Parse a positive integer. */ parse_pint l = foldl acc 0 l { acc sofar ch = sofar * 10 + parse_c ch; /* Turn a char digit to a number. */ parse_c ch = error (_ "not a digit"), !is_digit ch = (int) ch - (int) '0'; } /* Parse an integer, with an optional sign character. */ parse_int l = error (_ "badly formed number"), !is_list_len 2 parts = sign * n { parts = splitpl [member "+-", is_digit] l; n = parse_pint parts?1; sign = 1, parts?0 == [] || parts?0 == "+" = -1; } /* Parse a float. * [+-]?[0-9]*([.][0-9]*)?(e[0-9]+)? */ parse_float l = err, !is_list_len 4 parts = sign * (abs ipart + fpart) * 10 ** exp { err = error (_ "badly formed number"); parts = splitpl [ member "+-0123456789", member ".0123456789", member "eE", member "+-0123456789" ] l; ipart = parse_int parts?0; sign = 1, ipart > 0 = -1; fpart = 0, parts?1 == []; = err, parts?1?0 != '.' = parse_pint (tl parts?1) / 10 ** (len parts?1 - 1); exp = 0, parts?2 == [] && parts?3 == [] = err, parts?2 == [] = parse_int parts?3; } /* Parse a time in "hh:mm:ss" into seconds. We could do this in one line :) = (sum @ map2 multiply (iterate (multiply 60) 1) @ reverse @ map parse_pint @ map (subscript (splitpl [is_digit, equal ':', is_digit, equal ':', is_digit] l))) [0,2,4]; but it's totally unreadable. */ parse_time l = error (_ "badly formed time"), !is_list_len 5 parts = s + 60 * m + 60 * 60 * h { parts = splitpl [is_digit, equal ':', is_digit, equal ':', is_digit] l; h = parse_int parts?0; m = parse_int parts?2; s = parse_int parts?4; } /* matrix to convert D65 XYZ to D50 XYZ ... direct conversion, found by * measuring a macbeth chart in D50 and D65 and doing a LMS to get a matrix */ D652D50_direct = Matrix [[ 1.13529, -0.0604663, -0.0606321 ], [ 0.0975399, 0.935024, -0.0256156 ], [ -0.0336428, 0.0414702, 0.994135 ]]; D502D65_direct = D652D50_direct ** -1; /* Convert normalised XYZ to bradford RGB. */ XYZ2RGBbrad = Matrix [[0.8951, 0.2664, -0.1614], [-0.7502, 1.7135, 0.0367], [0.0389, -0.0685, 1.0296]]; /* Convert bradford RGB to normalised XYZ. */ RGBbrad2XYZ = XYZ2RGBbrad ** -1; D93_whitepoint = Vector [89.7400, 100, 130.7700]; D75_whitepoint = Vector [94.9682, 100, 122.5710]; D65_whitepoint = Vector [95.0470, 100, 108.8827]; D55_whitepoint = Vector [95.6831, 100, 92.0871]; D50_whitepoint = Vector [96.4250, 100, 82.4680]; A_whitepoint = Vector [109.8503, 100, 35.5849]; // 2856K B_whitepoint = Vector [99.0720, 100, 85.2230]; // 4874K C_whitepoint = Vector [98.0700, 100, 118.2300]; // 6774K E_whitepoint = Vector [100, 100, 100]; // ill. free D3250_whitepoint = Vector [105.6590, 100, 45.8501]; Whitepoints = Enum [ $D93 => D93_whitepoint, $D75 => D75_whitepoint, $D65 => D65_whitepoint, $D55 => D55_whitepoint, $D50 => D50_whitepoint, $A => A_whitepoint, $B => B_whitepoint, $C => C_whitepoint, $E => E_whitepoint, $D3250 => D3250_whitepoint ]; /* Convert D50 XYZ to D65 using the bradford chromatic adaptation approx. */ im_D502D65 xyz = xyz''' { xyz' = xyz / D50_whitepoint; rgb = recomb XYZ2RGBbrad xyz'; // move white in bradford RGB rgb' = rgb / Vector [0.94, 1.02, 1.33]; xyz'' = recomb RGBbrad2XYZ rgb'; // back to D65 xyz''' = xyz'' * D65_whitepoint; } /* Convert D65 XYZ to D50 using the bradford approx. */ im_D652D50 xyz = xyz''' { xyz' = xyz / D65_whitepoint; rgb = recomb XYZ2RGBbrad xyz'; // move white in bradford RGB rgb' = rgb * Vector [0.94, 1.02, 1.33]; xyz'' = recomb RGBbrad2XYZ rgb'; xyz''' = xyz'' * D50_whitepoint; } /* Convert D50 XYZ to Lab. */ im_D50XYZ2Lab xyz = im_XYZ2Lab_temp xyz D50_whitepoint.value?0 D50_whitepoint.value?1 D50_whitepoint.value?2; im_D50Lab2XYZ lab = im_Lab2XYZ_temp lab D50_whitepoint.value?0 D50_whitepoint.value?1 D50_whitepoint.value?2; /* ... and mono conversions */ im_sRGB2mono in = (image_set_type Image_type.B_W @ clip2fmt (get_header "BandFmt" in) @ recomb (Matrix [[.3, .6, .1]])) in; im_mono2sRGB in = image_set_type Image_type.sRGB (in ++ in ++ in); im_sRGB2Lab = im_XYZ2Lab @ im_sRGB2XYZ; im_Lab2sRGB = im_XYZ2sRGB @ im_Lab2XYZ; // from the 16 bit RGB and GREY formats im_1628 x = im_clip (x >> 8); im_162f x = x / 256; im_8216 x = (im_clip2us x) << 8; im_f216 x = im_clip2us (x * 256); im_RGB162GREY16 in = (image_set_type Image_type.GREY16 @ clip2fmt (get_header "BandFmt" in) @ recomb (Matrix [[.3, .6, .1]])) in; im_GREY162RGB16 in = image_set_type Image_type.RGB16 (in ++ in ++ in); /* apply a func to an image ... make it 1 or 3 bands, and reapply other bands * on the way out. Except if it's LABPACK. */ colour_apply fn x = fn x, b == 1 || b == 3 || c == Image_coding.LABPACK = x'' { b = get_bands x; c = get_coding x; first = extract_bands 0 3 x, b > 3 = extract_bands 0 1 x; tail = extract_bands 3 (b - 3) x, b > 3 = extract_bands 1 (b - 1) x; x' = fn first; x'' = x' ++ clip2fmt (get_format x') tail; } /* Any 1-ary colour op, applied to Vector/Image/Matrix or image */ colour_unary fn x = oo_unary_function colour_op x, is_class x = colour_apply fn x, is_image x = colour_apply fn [x], is_real x = error (_ "bad arguments to " ++ "colour_unary") { // COMPOUND_REWRAP ... signal to the colour class to go to image and // back colour_op = Operator "colour_unary" colour_object Operator_type.COMPOUND_REWRAP false; colour_object x = colour_real_list x, is_real_list x = map colour_real_list x, is_matrix x = colour_apply fn x, is_image x = error (_ "bad arguments to " ++ "colour_unary"); colour_real_list l = (to_matrix (fn (float) (to_image (Vector l)).value)).value?0; } /* Any symmetric 2-ary colour op, applied to Vector/Image/Matrix or image ... * name is op name for error messages etc. */ colour_binary name fn x y = oo_binary_function colour_op x y, is_class x = oo_binary'_function colour_op x y, is_class y = fn x y, is_image x && is_image y = error (_ "bad arguments to " ++ name) { colour_op = Operator name colour_object Operator_type.COMPOUND_REWRAP true; colour_object x y = fn x y, is_image x && is_image y = colour_real_list fn x y, is_real_list x && is_real_list y = map (colour_real_list fn x) y, is_real_list x && is_matrix y = map (colour_real_list (converse fn) y) x, is_matrix x && is_real_list y = map2 (colour_real_list fn) x y, is_matrix x && is_matrix y = error (_ "bad arguments to " ++ name); colour_real_list fn l1 l2 = (to_matrix (fn i1 i2)).value?0 { i1 = (float) (to_image (Vector l1)).value; i2 = (float) (to_image (Vector l2)).value; } } _colour_conversion_table = [ /* Lines are [space-from, space-to, conversion function]. Could do * this as a big array, but table lookup feels safer. */ [B_W, B_W, image_set_type B_W], [B_W, XYZ, im_sRGB2XYZ @ im_mono2sRGB @ im_clip], [B_W, YXY, im_XYZ2Yxy @ im_sRGB2XYZ @ im_mono2sRGB @ im_clip], [B_W, LAB, im_sRGB2Lab @ im_mono2sRGB @ im_clip], [B_W, LCH, im_Lab2LCh @ im_sRGB2Lab @ im_mono2sRGB @ im_clip], [B_W, UCS, im_XYZ2UCS @ im_sRGB2XYZ @ im_mono2sRGB @ im_clip], [B_W, RGB, im_XYZ2disp @ im_sRGB2XYZ @ im_mono2sRGB @ im_clip], [B_W, sRGB, im_mono2sRGB @ im_clip], [B_W, RGB16, image_set_type RGB16 @ im_8216 @ im_mono2sRGB], [B_W, GREY16, image_set_type GREY16 @ im_8216], [B_W, LABQ, im_Lab2LabQ @ im_sRGB2Lab @ im_mono2sRGB @ im_clip], [B_W, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_sRGB2Lab @ im_mono2sRGB @ im_clip], [XYZ, B_W, im_sRGB2mono @ im_XYZ2sRGB @ im_clip2f], [XYZ, XYZ, image_set_type XYZ], [XYZ, YXY, im_XYZ2Yxy @ im_clip2f], [XYZ, LAB, im_XYZ2Lab @ im_clip2f], [XYZ, LCH, im_Lab2LCh @ im_XYZ2Lab], [XYZ, UCS, im_XYZ2UCS @ im_clip2f], [XYZ, RGB, im_XYZ2disp @ im_clip2f], [XYZ, sRGB, im_XYZ2sRGB @ im_clip2f], [XYZ, LABQ, im_Lab2LabQ @ im_XYZ2Lab @ im_clip2f], [XYZ, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_XYZ2Lab @ im_clip2f], [YXY, B_W, im_sRGB2mono @ im_XYZ2sRGB @ im_Yxy2XYZ @ im_clip2f], [YXY, XYZ, im_Yxy2XYZ @ im_clip2f], [YXY, YXY, image_set_type YXY], [YXY, LAB, im_XYZ2Lab @ im_Yxy2XYZ @ im_clip2f], [YXY, LCH, im_Lab2LCh @ im_XYZ2Lab @ im_Yxy2XYZ @ im_clip2f], [YXY, UCS, im_XYZ2UCS @ im_Yxy2XYZ @ im_clip2f], [YXY, RGB, im_XYZ2disp @ im_Yxy2XYZ @ im_clip2f], [YXY, sRGB, im_XYZ2sRGB @ im_Yxy2XYZ @ im_clip2f], [YXY, LABQ, im_Lab2LabQ @ im_XYZ2Lab @ im_Yxy2XYZ @ im_clip2f], [YXY, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_XYZ2Lab @ im_Yxy2XYZ @ im_clip2f], [LAB, B_W, im_sRGB2mono @ im_Lab2sRGB @ im_Lab2XYZ @ im_clip2f], [LAB, XYZ, im_Lab2XYZ @ im_clip2f], [LAB, YXY, im_XYZ2Yxy @ im_Lab2XYZ @ im_clip2f], [LAB, LAB, image_set_type LAB @ im_clip2f], [LAB, LCH, im_Lab2LCh @ im_clip2f], [LAB, UCS, im_Lab2UCS @ im_clip2f], [LAB, RGB, im_Lab2disp @ im_clip2f], [LAB, sRGB, im_Lab2sRGB @ im_clip2f], [LAB, LABQ, im_Lab2LabQ @ im_clip2f], [LAB, LABS, im_Lab2LabS @ im_clip2f], [LCH, B_W, im_sRGB2mono @ im_Lab2sRGB @ im_LCh2Lab @ im_clip2f], [LCH, XYZ, im_Lab2XYZ @ im_LCh2Lab @ im_clip2f], [LCH, YXY, im_XYZ2Yxy @ im_Lab2XYZ @ im_LCh2Lab @ im_clip2f], [LCH, LAB, im_LCh2Lab @ im_clip2f], [LCH, LCH, image_set_type LCH], [LCH, UCS, im_LCh2UCS @ im_clip2f], [LCH, RGB, im_Lab2disp @ im_LCh2Lab @ im_clip2f], [LCH, sRGB, im_Lab2sRGB @ im_LCh2Lab @ im_clip2f], [LCH, LABQ, im_Lab2LabQ @ im_LCh2Lab @ im_clip2f], [LCH, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_LCh2Lab @ im_clip2f], [UCS, B_W, im_sRGB2mono @ im_XYZ2sRGB @ im_UCS2XYZ @ im_clip2f], [UCS, XYZ, im_UCS2XYZ @ im_clip2f], [UCS, YXY, im_XYZ2Yxy @ im_Lab2XYZ @ im_UCS2Lab @ im_clip2f], [UCS, LAB, im_UCS2Lab @ im_clip2f], [UCS, LCH, im_UCS2LCh @ im_clip2f], [UCS, UCS, image_set_type UCS], [UCS, RGB, im_Lab2disp @ im_UCS2Lab @ im_clip2f], [UCS, sRGB, im_Lab2sRGB @ im_UCS2Lab @ im_clip2f], [UCS, LABQ, im_Lab2LabQ @ im_UCS2Lab @ im_clip2f], [UCS, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_UCS2Lab @ im_clip2f], [RGB, B_W, im_sRGB2mono @ im_XYZ2sRGB @ im_disp2XYZ @ im_clip], [RGB, XYZ, im_disp2XYZ @ im_clip], [RGB, YXY, im_XYZ2Yxy @ im_disp2XYZ @ im_clip], [RGB, LAB, im_disp2Lab @ im_clip], [RGB, LCH, im_Lab2LCh @ im_disp2Lab @ im_clip], [RGB, UCS, im_Lab2UCS @ im_disp2Lab @ im_clip], [RGB, RGB, image_set_type RGB], [RGB, sRGB, im_XYZ2sRGB @ im_disp2XYZ @ im_clip], [RGB, RGB16, image_set_type RGB16 @ im_8216], [RGB, GREY16, image_set_type GREY16 @ im_8216 @ im_sRGB2mono], [RGB, LABQ, im_Lab2LabQ @ im_disp2Lab @ im_clip], [RGB, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_disp2Lab @ im_clip], [sRGB, B_W, im_sRGB2mono], [sRGB, XYZ, im_sRGB2XYZ @ im_clip], [sRGB, YXY, im_XYZ2Yxy @ im_sRGB2XYZ @ im_clip], [sRGB, LAB, im_sRGB2Lab @ im_clip], [sRGB, LCH, im_Lab2LCh @ im_sRGB2Lab @ im_clip], [sRGB, UCS, im_XYZ2UCS @ im_sRGB2XYZ @ im_clip], [sRGB, RGB, im_XYZ2disp @ im_sRGB2XYZ @ im_clip], [sRGB, sRGB, image_set_type sRGB], [sRGB, RGB16, image_set_type RGB16 @ im_8216], [sRGB, GREY16, image_set_type GREY16 @ im_8216 @ im_sRGB2mono], [sRGB, LABQ, im_Lab2LabQ @ im_sRGB2Lab @ im_clip], [sRGB, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_sRGB2Lab @ im_clip], [RGB16, B_W, im_1628 @ im_sRGB2mono], [RGB16, RGB, image_set_type RGB @ im_1628], [RGB16, sRGB, image_set_type sRGB @ im_1628], [RGB16, RGB16, image_set_type RGB16], [RGB16, GREY16, im_RGB162GREY16], [GREY16, B_W, image_set_type B_W @ im_1628], [GREY16, RGB, im_mono2sRGB @ im_1628], [GREY16, sRGB, im_mono2sRGB @ im_1628], [GREY16, RGB16, im_GREY162RGB16], [GREY16, GREY16, image_set_type GREY16], [LABQ, B_W, im_sRGB2mono @ im_Lab2sRGB @ im_LabQ2Lab], [LABQ, XYZ, im_Lab2XYZ @ im_LabQ2Lab], [LABQ, YXY, im_XYZ2Yxy @ im_Lab2XYZ @ im_LabQ2Lab], [LABQ, LAB, im_LabQ2Lab], [LABQ, LCH, im_Lab2LCh @ im_LabQ2Lab], [LABQ, UCS, im_Lab2UCS @ im_LabQ2Lab], [LABQ, RGB, im_LabQ2disp], [LABQ, sRGB, im_Lab2sRGB @ im_LabQ2Lab], [LABQ, LABQ, image_set_type LABQ], [LABQ, LABS, im_LabQ2LabS], [LABS, B_W, im_sRGB2mono @ im_Lab2sRGB @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, XYZ, im_Lab2XYZ @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, YXY, im_XYZ2Yxy @ im_Lab2XYZ @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, LAB, im_LabS2Lab], [LABS, LCH, im_Lab2LCh @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, UCS, im_Lab2UCS @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, RGB, im_LabQ2disp @ im_LabS2LabQ @ im_clip2s], [LABS, sRGB, im_XYZ2sRGB @ im_Lab2XYZ @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, LABQ, im_LabS2LabQ @ im_clip2s], [LABS, LABS, image_set_type LABS] ] { /* From Image_type ... repeat here for brevity. Use same ordering as * in Colour menu for consistency. */ B_W = 1; XYZ = 12; YXY = 23; LAB = 13; LCH = 19; UCS = 18; RGB = 17; sRGB = 22; RGB16 = 25; GREY16 = 26; LABQ = 16; LABS = 21; } /* Transform between two colour spaces. */ colour_transform from to in = colour_unary _colour_conversion_table?i?2 in, i >= 0 = error (_ "unable to convert " ++ Image_type.type_names.get_name from ++ _ " to " ++ Image_type.type_names.get_name to) { match x = x?0 == from && x?1 == to; i = index match _colour_conversion_table; } /* Transform to a colour space, assuming the type field in the input is * correct */ colour_transform_to to in = colour_transform (get_type in) to in; /* String for path separator on this platform. */ path_separator = expand "$SEP"; /* Form a relative pathname. * path_relative ["home", "john"] == "home/john" * path_relative [] == "" */ path_relative l = join_sep path_separator l; /* Form an absolute pathname. * path_absolute ["home", "john"] == "/home/john" * path_absolute [] == "/" * If the first component looks like 'A:', don't add an initial separator. */ path_absolute l = path_relative l, len l?0 > 1 && is_letter l?0?0 && l?0?1 == ':' = path_separator ++ path_relative l; /* Parse a pathname. * path_parse "/home/john" == ["home", "john"] * path_parse "home/john" == ["home", "john"] */ path_parse str = split (equal path_separator?0) str; nip2-8.7.0/share/nip2/compat/8.2/_joe_utilities.def0000644000175000017500000005054513224651032016561 00000000000000/* ******Functions included in start/_NG_utilities.def:****** * * so_balance ref_meanmax im1 im2 mask blur gauss * * nonzero_mean im = no_out * * so_meanmax im = result * * so_calculate ref_meanmax im mask = result * * simple_frame frame im_w im_h ov cs ms bf option = result * * corner_frame frame im_w im_h ov cs ms bf = result * * build_frame r_tl r_tr r_bl r_br r_mt r_mb r_ml r_mr im_w im_h ov bf = result * * complex_frame frame im_w im_h ov cs es ms bf option= result * * complex_edge ra rb t bl d = rc * * frame_lr_min r_l r_r target bw = result * * frame_tb_min r_t r_b target bw = result * * frame_position_image im ref os colour= result * * merge_array bw arr = result * * merge_to_scale im target blend dir = result * * select_ellipse line width = mask * * select_tetragon p1 p2 p3 p4 = mask * * select_polygon pt_list = mask * * perspective_transform to from = trans'' * * sort_pts_clockwise l = l'' * */ /* Called from: * _NG_Extra.def Clone_area_item */ so_balance ref_meanmax im1 im2 mask gauss = result { //ref_meanmax = so_meanmax im1; so_values = so_calculate ref_meanmax im2 mask; im2_cor_a = clip2fmt im2.format im2'', has_member "format" im2 = im2'' {im2'' = im2 * (so_values?0) + (so_values?1);} // Option to convert replacement image to scaled gaussian noise im2_cor = im2_cor_a, gauss == false = clip2fmt im2_cor_a.format gauss_im {gauss_im = im_gaussnoise im2_cor_a.width im2_cor_a.height ref_meanmax?0 (deviation im2_cor_a);} result = im_blend (get_image mask) (get_image im2_cor) (get_image im1); }; //////////////////////////////////////////////////////////////////////////////// /* Calculates the mean of the non zero pixels. * * Called from: * _NG_utilities so_meanmax */ nonzero_mean im = no_out { zero_im = (im == 0); zero_mean = mean zero_im; no_mean = mean im; no_out = no_mean/(1 - (zero_mean/255)); }; //////////////////////////////////////////////////////////////////////////////// /* Calculates the max and nonzero mean of an image * * Called from: * _NG_utilities so_balance * _NG_utilities so_calculate * _NG_Extra.def Clone_area_item * _NG_Extra.def Balance_item.Balance_find_item */ so_meanmax im = result { mean_of_im = nonzero_mean im; adjusted_im = im - mean_of_im; max_of_im = max adjusted_im; result = [mean_of_im, max_of_im]; }; //////////////////////////////////////////////////////////////////////////////// /* Calculates the scale and offset required to match a reference mean and max * * Called from: * _NG_utilities so_balance * _NG_Extra.def Balance_item.Balance_find_item */ so_calculate ref_meanmax im mask = result { im' = if mask then im else 0; im_values = so_meanmax im'; mean_of_ref = ref_meanmax?0; mean_of_im = im_values?0; max_of_ref = ref_meanmax?1; max_of_im = im_values?1; scale = (max_of_ref)/(max_of_im); offset = mean_of_ref - (mean_of_im * scale); result = [ scale, offset ]; }; //////////////////////////////////////////////////////////////////////////////// /* Extends or shortens the central sections of a simple frame to fit round a given image. * * Called from: * _NG_Extra.def Frame_item.Simple_frame_item */ simple_frame frame im_w im_h ov cs ms bf option = result { cs' = (1 - cs); ms' = (0.5 - (ms/2)); ms'' = (1 - cs); //Regions r_tl = Region_relative frame 0 0 cs cs; r_tr = fliplr r_tl, option == true = Region_relative frame cs' 0 cs cs; r_bl = Region_relative frame 0 cs' cs cs; r_br = fliplr r_bl, option == true = Region_relative frame cs' cs' cs cs; r_mt = Region_relative frame ms' 0 ms cs; r_mb = Region_relative frame ms' ms'' ms cs; r_ml = Region_relative frame 0 ms' cs ms; r_mr = fliplr r_ml, option == true = Region_relative frame ms'' ms' cs ms; result = build_frame r_tl r_tr r_bl r_br r_mt r_mb r_ml r_mr im_w im_h ov bf; }; //////////////////////////////////////////////////////////////////////////////// /* Copies and extends a simple frame corner to produce a complete frame to fit round a given image. * * Called from: * _NG_Extra.def Frame_item.Frame_corner_item */ corner_frame frame im_w im_h ov cs ms bf = result { cs' = (1 - cs); ms' = (0.5 - (ms/2)); //Regions r_tl = Region_relative frame 0 0 cs cs; r_tr = fliplr r_tl; r_bl = fliptb r_tl; r_br = fliplr r_bl; r_mt = Region_relative frame ms' 0 ms cs; r_mb = fliptb r_mt; r_ml = Region_relative frame 0 ms' cs ms;; r_mr = fliplr r_ml; result = build_frame r_tl r_tr r_bl r_br r_mt r_mb r_ml r_mr im_w im_h ov bf; }; //////////////////////////////////////////////////////////////////////////////// /* Completes the frame building process for simple_frame and corner_frame. * * _NG_utilities simple_frame * _NG_utilities corner_frame */ build_frame r_tl r_tr r_bl r_br r_mt r_mb r_ml r_mr im_w im_h ov bf = result { //Find pixel thickness of frames section s_width = r_ml.width - mean (im_profile (map_unary fliplr (r_ml.value)?0) 1); s_height = r_mt.height - mean (im_profile (map_unary fliptb (r_mt.value)?0) 0); w_target = im_w + (2 * (s_width - ov)); h_target = im_h + (2 * (s_height - ov)); blend = bf * r_tl.width; cw_target = w_target - (2 * r_tl.width) + (2 * blend), w_target > (2 * r_tl.width) = w_target; ch_target = h_target - (2 * r_tl.height) + (2 * blend), h_target > (2 * r_tl.height) = h_target; //Use regions to produce sections top = merge_to_scale r_mt cw_target blend 0; bottom = merge_to_scale r_mb cw_target blend 0; left = merge_to_scale r_ml ch_target blend 1; right = merge_to_scale r_mr ch_target blend 1; middle = Image (image_new cw_target ch_target left.bands left.format left.coding left.type 0 0 0); //Build sections into full frame. row_1 = frame_lr_min r_tl r_tr w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[r_tl, top, r_tr]]; row_2 = frame_lr_min left right w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[left, middle, right]]; row_3 = frame_lr_min r_bl r_br w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[r_bl, bottom, r_br]]; result = frame_tb_min row_1 row_3 h_target blend, (h_target < (r_tl.height * 2)) = merge_array blend [[row_1], [row_2], [row_3]]; }; //////////////////////////////////////////////////////////////////////////////// /* Extends or shortens the central sections of a frame, preserving any central details on each * edge, to fit round a given image. * * Called from: * _NG_Extra.def Frame_item.Complex_frame_item */ complex_frame frame im_w im_h ov cs es ms bf option= result { cs' = (1 - cs); ms' = (0.5 - (ms/2)); es' = (0.25 - (es/2)); r_tl = Region_relative frame 0 0 cs cs; r_tr = fliplr r_tl, option == true = Region_relative frame cs' 0 cs cs; r_bl = Region_relative frame 0 cs' cs cs; r_br = fliplr r_bl, option == true = Region_relative frame cs' cs' cs cs; r_mt = Region_relative frame ms' 0 ms cs; r_mb = Region_relative frame ms' cs' ms cs; r_ml = Region_relative frame 0 ms' cs ms; r_mr = fliplr r_ml, option == true = Region_relative frame cs' ms' cs ms; r_et = Region_relative frame es' 0 es cs; r_eb = Region_relative frame es' cs' es cs; r_el = Region_relative frame 0 es' cs es; r_er = fliplr r_el, option == true = Region_relative frame cs' es' cs es; //Find pixel thickness of frames section s_width = r_el.width - mean (im_profile (map_unary fliplr (r_el.value)?0) 1); s_height = r_et.height - mean (im_profile (map_unary fliptb (r_et.value)?0) 0); w_target = im_w + (2 * (s_width - ov)); h_target = im_h + (2 * (s_height - ov)); min_size = foldr1 min_pair [r_tl.width, r_tl.height, r_mt.width, r_mt.height, r_et.width, r_et.height]; blend = bf * min_size; cw_target = w_target - (2 * r_tl.width) + (2 * blend); ch_target = h_target - (2 * r_tl.height) + (2 * blend); top = complex_edge r_mt r_et cw_target blend 0; bottom = complex_edge r_mb r_eb cw_target blend 0; left = complex_edge r_ml r_el ch_target blend 1; right = complex_edge r_mr r_er ch_target blend 1; middle = Image (image_new top.width left.height left.bands left.format left.coding left.type 0 0 0); //Build regions into full frame. row_1 = frame_lr_min r_tl r_tr w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[r_tl, top, r_tr]]; row_2 = frame_lr_min left right w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[left, middle, right]]; row_3 = frame_lr_min r_bl r_br w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[r_bl, bottom, r_br]]; result = frame_tb_min row_1 row_3 h_target blend, (h_target < (r_tl.height * 2)) = merge_array blend [[row_1], [row_2], [row_3]]; }; //////////////////////////////////////////////////////////////////////////////// /* Function called by complex frame, used to produce section * * Called from: * _NG_utilities.def complex_frame */ complex_edge ra rb t bl d = rc { e1 = ceil (ra.width - t)/2, d == 0 = 0; e2 = 0, d == 0 = ceil (ra.height - t)/2; e3 = t, d == 0 = ra.width; e4 = ra.height, d == 0 = t; check = ra.width, d == 0; = ra.height; rai = get_image ra; t2 = (t - ra.width + (2 * bl))/2, d == 0 = (t - ra.height + (2 * bl))/2; rc = ra , t <= 0 = Image (im_extract_area rai e1 e2 e3 e4), t <= check = merge_array bl [[rb',ra,rb']], d == 0 = merge_array bl [[rb'],[ra],[rb']] {rb' = merge_to_scale rb t2 bl d;} }; ////////////////////////////////////////////////////////////////////////////// /* Blends two images left/right to produce an image a specific width. * * _NG_utilities build_frame * _NG_utilities complex_frame */ frame_lr_min r_l r_r target bw = result { //Calculating the new widh required for each image. no = (target/2 + bw); n_w = no, (r_l.width > no) = r_l.width; //Removing excess from what will be the middle of the final image. n_l = im_extract_area r_l.value 0 0 n_w r_l.height; n_r = im_extract_area r_r.value (r_r.width - n_w) 0 n_w r_l.height; //Merge the two image together with a bw*2 pixel overlap. result = Image (im_lrmerge n_l n_r ((bw*2) - n_w) 0 bw); }; ////////////////////////////////////////////////////////////////////////////// /* Blends two images top/bottom to produce an image a specific width. * * _NG_utilities build_frame * _NG_utilities complex_frame */ frame_tb_min r_t r_b target bw = result { //Calculating the new height required for each image. no = (target/2 + bw); n_h = no, (r_t.height > no) = r_t.height; //Removing excess from what will be the middle of the final image. n_t = im_extract_area r_t.value 0 0 r_t.width n_h; n_b = im_extract_area r_b.value 0 (r_b.height - n_h) r_b.width n_h; //Merge the two image together with a 50 pixel overlap. result = Image (im_tbmerge n_t n_b 0 ((bw*2) -n_h) bw); }; ////////////////////////////////////////////////////////////////////////////// /* Resixe canvas of an image to accomodate a frame and possible mount * * Called from: * _NG_Extra.def Frame_item.Frame_corner_item * _NG_Extra.def Frame_item.Simple_frame_item * _NG_Extra.def Frame_item.Complex_frame_item */ frame_position_image im ref os colour= result { background = image_new ref.width ref.height im.bands im.format im.coding im.type colour 0 0; result = insert_noexpand xp yp im background { xp = (ref.width - im.width)/2; yp = (ref.height - im.height - os)/2; } }; ////////////////////////////////////////////////////////////////////////////// /* Merges an array of images together according to blend width bw * * Called from: * _NG_Utilites.def build_frame * _NG_Utilites.def complex_frame * _NG_Utilites.def complex_edge */ merge_array bw arr = result { merge_lr bw im1 im2 = im3 { bw' = get_header "Xsize" (get_image im1); bw'' = -(bw' - bw); im3 = im_lrmerge (get_image im1) (get_image im2) bw'' 0 bw; } merge_tb bw im1 im2 = im3 { bw' = get_header "Ysize" (get_image im1); bw'' = -(bw' - bw); im3 = im_tbmerge (get_image im1) (get_image im2) 0 bw'' bw; } im_out = (image_set_origin 0 0 @ foldl1 (merge_tb bw) @ map (foldl1 (merge_lr bw))) arr; result = Image im_out; }; ////////////////////////////////////////////////////////////////////////////// /* Repeatably top/bottom add clones of im, with a defined overlap, until final height > target * * Called from: * _NG_Utilites.def build_frame * _NG_Utilites.def complex_edge */ merge_to_scale im target blend dir = result { blend' = floor blend; //allow fir lr or tb process var_a = im.width, dir == 0 = im.height; var_w = im.width, dir == 1 = target, target > blend' = blend'; var_h = im.height, dir == 0 = target, target > blend' = blend'; //total numner of copies of im requires, taking overlap into account. no_loops = ceil ((log ((target - blend')/(var_a - blend')))/(log 2)); process im no = result { pr_a = get_header "Xsize" (get_image im), dir == 0 = get_header "Ysize" (get_image im); pr_b = -(pr_a - blend' + 1); im' = im_lrmerge (get_image im) (get_image im) pr_b 0 blend', dir == 0 = im_tbmerge (get_image im) (get_image im) 0 pr_b blend'; no' = no - 1; result = im', no' < 1 = process im' no'; } im_tmp = im.value, var_a > target = process im no_loops; result = Image (im_extract_area (get_image im_tmp) 0 0 var_w var_h); }; ////////////////////////////////////////////////////////////////////////////// /* Selects an elispe based on a line and a width * * Called from: * _NG_Extra.def Select_item.Elipse */ select_ellipse line width = mask { im = Image (get_image line); //Make a 2 band image whose value equals its coordinates. im_coor = Image (make_xy im.width im.height); //Adjust the values to center tham on (line.left, line.top) im_cent = im_coor - Vector [line.left,line.top]; w = line.width; h = line.height; angle = 270, w == 0 && h < 0 = 90, w == 0 && h >= 0 = 360 + atan (h/w), w > 0 && h < 0 = atan (h/w), w > 0 && h >= 0 = 180 + atan (h/w); a = ( (h ** 2) + (w ** 2) )**0.5; b = a * width; x' = ( (cos angle) * im_cent?0) + ( (sin angle) * im_cent?1); y' = ( (cos angle) * im_cent?1) - ( (sin angle) * im_cent?0); mask = ( (b**2) * (x'**2) ) + ( (a**2) * (y'**2) ) <= (a * b)**2; }; ////////////////////////////////////////////////////////////////////////////// /* Selects a tetragon based on four points. * * Called from: * _NG_Extra.def Select_item.Tetragon * _NG_Extra.def Perspective_item */ select_tetragon p1 p2 p3 p4 = mask { //Put points in clockwise order starting at the top left. pt_list = sort_pts_clockwise [p1, p2, p3, p4]; pair_list = [ [ pt_list?0, pt_list?1 ], [ pt_list?1, pt_list?2 ], [ pt_list?2, pt_list?3 ], [ pt_list?3, pt_list?0 ] ]; //Make xy image the same size as p1.image; im_xy = Image (make_xy p1.image.width p1.image.height); white = Image (image_new p1.image.width p1.image.height 1 0 Image_coding.NOCODING 1 255 0 0); mask = foldl process white pair_list; /* Treat each pair of point as a vector going from p1 to p2, * then select all to right of line. This is done for each pair, * the results are all combined to select the area defined by * the four points. */ process im_in pair = im_out { x = (pair?0).left; y = (pair?0).top; x'= (pair?1).left; y'= (pair?1).top; w = x' - x; h = y' - y; m = 0, x == x' = (y-y')/(x-x'); c = 0, x == x' = ((y*x') - (y'*x))/(x' - x); mask= im_xy?1 - (im_xy?0 * m) >= c, w > 0 = im_xy?1 - (im_xy?0 * m) <= c, w < 0 = im_xy?0 <= x, w == 0 && h > 0 = im_xy?0 >= x; im_out = im_in & mask; } }; ////////////////////////////////////////////////////////////////////////////// /* Selects a tetragon based on four points. * * Called from: * _NG_Extra.def Select_item.Polygon */ select_polygon pt_list = mask { group_check = is_Group pt_list; pt_l = pt_list.value, group_check = pt_list; im = Image (get_image (pt_l?0)); im_xy = Image (make_xy im.width im.height); black = Image (image_new im_xy.width im_xy.height 1 0 Image_coding.NOCODING 1 0 0 0); x = im_xy?0; y = im_xy?1; pt_l' = grp_trip pt_l; mask = foldl process black pt_l'; /*Takes a group adds the first two the end and then creates a lists of *lists [[a, b, c], [b, c, d] .... [x, a, b]] */ grp_trip l = l'' { px = take 2 l; l' = join l px; start = [(take 3 l')]; rest = drop 3 l'; process a b = c { x = (last a)?1; x'= (last a)?2; x'' = [[x, x', b]]; c = join a x''; } l'' = foldl process start rest; }; process im_in triplet = im_out { p1 = triplet?0; p2 = triplet?1; p3 = triplet?2; //check for change in x direction between p1-p2 and p2 -p3 dir_1 = sign (p2.left - p1.left); dir_2 = sign (p3.left - p2.left); dir = dir_1 + dir_2; //define min x limit. min_x = p1.left, p1.left < p2.left = p2.left + 1, dir != 0 = p2.left; //define max x limit. max_x = p1.left, p1.left > p2.left = p2.left - 1, dir != 0 = p2.left; //equation of line defined by p1 and p2 m = line_m p1 p2; c = line_c p1 p2; //Every thing below the line im_test = ((y >= (m * x) + c) & (x >= min_x) & (x <= max_x)); im_out = im_in ^ im_test; } line_c p1 p2 = c {m = line_m p1 p2; c = p1.top - (m * p1.left);}; line_m p1 p2 = (p2.top - p1.top)/(p2.left - p1.left), p2.left != p1.left = 0; }; ////////////////////////////////////////////////////////////////////////////// /* Selects a tetragon based on four points. * * Called from: * _NG_Extra.def Perspective_match_item * _NG_Extra.def Perspective_item */ perspective_transform to from = trans'' { /* * Tramsformation matrix is calculated on the bases of the following functions: * x' = c0x + c1y + c2xy + c3 * y' = c4x + c5y + c6xy + c7 * * The functions used in vips im_transform works based on the functions: * x = x' + b0 + b2x' + b4y' + b6x'y' * y = y' + b1 + b3x' + b5y' + b7x'y' * * and is applied in the form of the matrix: * * [[b0, b1], * [b2, b3], * [b4, b5], * [b6, b7]] * * Therefore our required calculated matrix will be * * [[ c3 , c7], * [(c0 - 1) , c4], * [ c1 , (c5 - 1)], * [ c2 , c6]] * * to = [x1, y1, x2, y2, x3, y3, x4, y4] * from = [x1', y1', x2', y2', x3', y3', x4', y4'] * trans = [[c0], [c1], [c2], [c3], [c4], [c5], [c6], [c7]] * */ to' = Matrix [[to?0, to?1, ((to?0)*(to?1)), 1, 0, 0, 0, 0], [0, 0, 0, 0, to?0, to?1, ((to?0)*(to?1)), 1], [to?2, to?3, ((to?2)*(to?3)), 1, 0, 0, 0, 0], [0, 0, 0, 0, to?2, to?3, ((to?2)*(to?3)), 1], [to?4, to?5, ((to?4)*(to?5)), 1, 0, 0, 0, 0], [0, 0, 0, 0, to?4, to?5, ((to?4)*(to?5)), 1], [to?6, to?7, ((to?6)*(to?7)), 1, 0, 0, 0, 0], [0, 0, 0, 0, to?6, to?7, ((to?6)*(to?7)), 1]]; from' = Matrix (transpose [from]); to'' = to' ** (-1); trans = to'' * from'; trans' = trans.value; trans''= Matrix [[(trans'?3)?0, (trans'?7)?0 ], [((trans'?0)?0 - 1), (trans'?4)?0 ], [(trans'?1)?0, ((trans'?5)?0 - 1)], [(trans'?2)?0, (trans'?6)?0 ]]; }; ////////////////////////////////////////////////////////////////////////////// /* Sort a list of points into clockwise order. * * Called from: * _NG_utilities.def select_tetragon * _NG_Extra.def Perspective_match_item * _NG_Extra.def Perspective_item */ sort_pts_clockwise l = l'' { // sort functions: f_top a b = a.top < b.top; f_left a b = a.left < b.left; f_right a b = a.left > b.left; l' = sortc f_top l; l'_a = take 2 l'; l'_b = drop 2 l'; l''_a = sortc f_left l'_a; l''_b = sortc f_right l'_b; l'' = join l''_a l''_b; }; Mount_options _ctype _ppcm = class { _vislevel = 3; apply = Toggle "Apply mount options" false; ls = Expression "Lower mount section bigger by (cm)" 0; mount_colour = Colour _ctype [0, 0, 0]; _los = ls.expr * _ppcm; }; Frame_variables comp = class { _vislevel = 3; scale_factor = Expression "scale the size of the frame by" 1; /* These sliders define the fraction of the frames width or height is extracted * to produce each of the particular regions. */ corner_section = Scale "Corner section" 0.1 1 0.5; edge_section = Scale "Edge section" 0.1 1 0.2, comp > 0 = "Only required for complex frames"; middle_section = Scale "Middle section" 0.1 1 0.2; blend_fraction = Scale "Blend fraction" 0.1 0.9 0.1; option = Toggle "Use mirror of left-side to make right" true; }; nip2-8.7.0/share/nip2/compat/8.2/Image.def0000644000175000017500000014444213224651032014574 00000000000000Image_new_item = class Menupullright "_New" "make new things" { Image_black_item = class Menuaction "_Image" "make a new image" { format_names = [ "8-bit unsigned int - UCHAR", // 0 "8-bit signed int - CHAR", // 1 "16-bit unsigned int - USHORT", // 2 "16-bit signed int - SHORT", // 3 "32-bit unsigned int - UINT", // 4 "32-bit signed int - INT", // 5 "32-bit float - FLOAT", // 6 "64-bit complex - COMPLEX", // 7 "64-bit float - DOUBLE", // 8 "128-bit complex - DPCOMPLEX" // 9 ]; action = class Image _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; nbands = Expression "Image bands" 1; format_option = Option "Image format" format_names 0; type_option = Option_enum "Image type" Image_type.type_names "B_W"; pixel = Expression "Pixel value" 0; _result = image_new (to_real nwidth) (to_real nheight) (to_real nbands) (to_real format_option) Image_coding.NOCODING type_option.value_thing pixel.expr 0 0; } } Image_new_from_image_item = class Menuaction "_From Image" "make a new image based on image x" { action x = class Image _result { _vislevel = 3; pixel = Expression "Pixel value" 0; _result = image_new x.width x.height x.bands x.format x.coding x.type pixel.expr x.xoffset x.yoffset; } } Image_region_item = class Menupullright "_Region on Image" "make a new region on an image" { Region_item = class Menuaction "_Region" "make a region on an image" { action image = scope.Region_relative image 0.25 0.25 0.5 0.5; } Mark_item = class Menuaction "_Point" "make a point on an image" { action image = scope.Mark_relative image 0.5 0.5; } Arrow_item = class Menuaction "_Arrow" "make an arrow on an image" { action image = scope.Arrow_relative image 0.25 0.25 0.5 0.5; } HGuide_item = class Menuaction "_Horizontal Guide" "make a horizontal guide on an image" { action image = scope.HGuide image 0.5; } VGuide_item = class Menuaction "_Vertical Guide" "make a vertical guide on an image" { action image = scope.VGuide image 0.5; } sep1 = Menuseparator; Move_item = class Menuaction "From Region" "new region on image using existing region as a guide" { action a b = map_binary process a b { process a b = x.Region target x.left x.top x.width x.height, is_Region x = x.Arrow target x.left x.top x.width x.height, is_Arrow x = error "bad arguments to region-from-region" { // prefer image then region compare a b = false, !is_Image a && is_Image b = false, is_Region a && !is_Region b = true; [target, x] = sortc compare [a, b]; } } } } } Image_convert_to_image_item = class Menuaction "Con_vert to Image" "convert anything to an image" { action x = to_image x; } Image_number_format_item = class Menupullright "_Format" "convert numeric format" { U8_item = class Menuaction "_8 bit unsigned" "convert to unsigned 8 bit [0, 255]" { action x = map_unary cast_unsigned_char x; } U16_item = class Menuaction "1_6 bit unsigned" "convert to unsigned 16 bit [0, 65535]" { action x = map_unary cast_unsigned_short x; } U32_item = class Menuaction "_32 bit unsigned" "convert to unsigned 32 bit [0, 4294967295]" { action x = map_unary cast_unsigned_int x; } sep1 = Menuseparator; S8_item = class Menuaction "8 _bit signed" "convert to signed 8 bit [-128, 127]" { action x = map_unary cast_signed_char x; } S16_item = class Menuaction "16 b_it signed" "convert to signed 16 bit [-32768, 32767]" { action x = map_unary cast_signed_short x; } S32_item = class Menuaction "32 bi_t signed" "convert to signed 32 bit [-2147483648, 2147483647]" { action x = map_unary cast_signed_int x; } sep2 = Menuseparator; Float_item = class Menuaction "_Single precision float" "convert to IEEE 32 bit float" { action x = map_unary cast_float x; } Double_item = class Menuaction "_Double precision float" "convert to IEEE 64 bit float" { action x = map_unary cast_double x; } sep3 = Menuseparator; Scmplxitem = class Menuaction "Single _precision complex" "convert to 2 x IEEE 32 bit float" { action x = map_unary cast_complex x; } Dcmplx_item = class Menuaction "Double p_recision complex" "convert to 2 x IEEE 64 bit float" { action x = map_unary cast_double_complex x; } } Image_header_item = class Menupullright "_Header" "do stuff to the image header" { Image_get_item = class Menupullright "_Get" "get header fields" { // the header fields we can get fields = class { type = 0; width = 1; height = 2; format = 3; bands = 4; xres = 5; yres = 6; xoffset = 7; yoffset = 8; coding = 9; field_names = Enum [ $width => width, $height => height, $bands => bands, $format => format, $type => type, $xres => xres, $yres => yres, $xoffset => xoffset, $yoffset => yoffset, $coding => coding ]; field_option name = Option_enum (_ "Field") field_names name; field_funcs = Table [ [type, get_type], [width, get_width], [height, get_height], [format, get_format], [bands, get_bands], [xres, get_xres], [yres, get_yres], [xoffset, get_xoffset], [yoffset, get_yoffset], [coding, get_coding] ]; } get_field field_name x = class _result { _vislevel = 3; field = fields.field_option field_name; _result = map_unary (Real @ fields.field_funcs.lookup 0 1 field.value_thing) x; } Width_item = class Menuaction "_Width" "get width" { action x = get_field "width" x; } Height_item = class Menuaction "_Height" "get height" { action x = get_field "height" x; } Bands_item = class Menuaction "_Bands" "get bands" { action x = get_field "bands" x; } Format_item = class Menuaction "_Format" "get format" { action x = get_field "format" x; } Type_item = class Menuaction "_Type" "get type" { action x = get_field "type" x; } Xres_item = class Menuaction "_Xres" "get X resolution" { action x = get_field "xres" x; } Yres_item = class Menuaction "_Yres" "get Y resolution" { action x = get_field "yres" x; } Xoffset_item = class Menuaction "X_offset" "get X offset" { action x = get_field "xoffset" x; } Yoffset_item = class Menuaction "Yo_ffset" "get Y offset" { action x = get_field "yoffset" x; } Coding_item = class Menuaction "_Coding" "get coding" { action x = get_field "coding" x; } sep1 = Menuseparator; Custom_item = class Menuaction "C_ustom" "get any header field" { action x = class _result { _vislevel = 3; field = String "Field" "Xsize"; parse = Option "Parse" [ "No parsing", "Parse string as integer", "Parse string as real", "Parse string as hh:mm:ss" ] 0; _result = map_unary (wrap @ process @ get_header field.value) x { parse_str parse str = parse (split is_space str)?0; parse_field name cast parse x = cast x, is_number x = parse_str parse x, is_string x = error ("not " ++ name); get_int = parse_field "int" cast_signed_int parse_int; get_float = parse_field "float" cast_float parse_float; get_time = parse_field "hh:mm:ss" cast_signed_int parse_time; wrap x = Real x, is_real x = Vector x, is_real_list x = Image x, is_image x = Bool x, is_bool x = Matrix x, is_matrix x = String "String" x, is_string x = List x, is_list x = x; process = [ id, get_int, get_float, get_time ]?parse; } } } } sep1 = Menuseparator; Image_set_meta_item = class Menuaction "_Set" "set image metadata" { action x = class _result { _vislevel = 3; fname = String "Field" "field-name"; val = Expression "Value" 42; _result = map_unary process x { process image = set_header fname.value val.expr image; } } } Image_edit_header_item = class Menuaction "_Edit" "change advisory header fields of image" { type_names = Image_type.type_names; all_names = sort (map (extract 0) type_names.value); get_prop has get def x = get x, has x = def; action x = class _result { _vislevel = 3; nxres = Expression "Xres" (get_prop has_xres get_xres 1 x); nyres = Expression "Yres" (get_prop has_yres get_yres 1 x); nxoff = Expression "Xoffset" (get_prop has_xoffset get_xoffset 0 x); nyoff = Expression "Yoffset" (get_prop has_yoffset get_yoffset 0 x); type_option = Option_enum "Image type" Image_type.type_names (Image_type.type_names.get_name type) { type = x.type, is_Image x = Image_type.MULTIBAND; } _result = map_unary process x { process image = Image (im_copy_set image.value type_option.value_thing (to_real nxres) (to_real nyres) (to_real nxoff) (to_real nyoff)); } } } } Image_cache_item = class Menuaction "C_ache" "cache calculated image pixels" { action x = class _result { _vislevel = 3; tile_width = Number "Tile width" 128; tile_height = Number "Tile height" 128; max_tiles = Number "Maximum number of tiles to cache" (-1); _result = map_unary process x { process image = cache (to_real tile_width) (to_real tile_height) (to_real max_tiles) image; } } } #separator Image_levels_item = class Menupullright "_Levels" "change image levels" { Scale_item = class Menuaction "_Scale to 0 - 255" "linear transform to fit 0 - 255 range" { action x = map_unary scale x; } Linear_item = class Menuaction "_Linear" "linear transform of image levels" { action x = class _result { _vislevel = 3; scale = Scale "Scale" 0.001 3 1; offset = Scale "Offset" (-128) 128 0; _result = map_unary adj x { adj x // only force back to input type if this is a thing // with a type ... so we work for Colour / Matrix etc. = clip2fmt x.format x', has_member "format" x = x' { x' = x * scale + offset; } } } } Gamma_item = class Menuaction "_Power" "power transform of image levels (gamma)" { action x = class _result { _vislevel = 3; gamma = Scale "Gamma" 0.001 4 1; image_maximum_hint = "You may need to change image_maximum if " ++ "this is not an 8 bit image"; im_mx = Expression "Image maximum" mx { mx = Image_format.maxval x.format, has_format x = 255; } _result = map_unary gam x { gam x = clip2fmt (get_format x) x', has_format x = x' { x' = (im_mx.expr / im_mx.expr ** gamma) * x ** gamma; } } } } Tone_item = class Menuaction "_Tone Curve" "adjust tone curve" { action x = class _result { _vislevel = 3; b = Scale "Black point" 0 100 0; w = Scale "White point" 0 100 100; sp = Scale "Shadow point" 0.1 0.3 0.2; mp = Scale "Mid-tone point" 0.4 0.6 0.5; hp = Scale "Highlight point" 0.7 0.9 0.8; sa = Scale "Shadow adjust" (-15) 15 0; ma = Scale "Mid-tone adjust" (-30) 30 0; ha = Scale "Highlight adjust" (-15) 15 0; curve = tone_build x.format b w sp mp hp sa ma ha; _result = map_unary (hist_map curve) x; } } } Image_transform_item = class Menupullright "_Transform" "transform images" { Rotate_item = class Menupullright "Ro_tate" "rotate image" { Fixed_item = class Menupullright "_Fixed" "clockwise rotation by fixed angles" { rotate_widget default x = class _result { _vislevel = 3; angle = Option "Rotate by" [ "Don't rotate", "90 degrees clockwise", "180 degrees", "90 degrees anticlockwise" ] default; _result = map_unary process x { process = [ // we can't use id here since we want to "declass" // the members of x ... consider if x is a crop class, // for example, we don't want to inherit from crop, we // want to make a new image class rot180 @ rot180, rot90, rot180, rot270 ] ? angle; } } Rot90_item = class Menuaction "_90 Degrees" "clockwise rotation by 90 degrees" { action x = rotate_widget 1 x; } Rot180_item = class Menuaction "_180 Degrees" "clockwise rotation by 180 degrees" { action x = rotate_widget 2 x; } Rot270_item = class Menuaction "_270 Degrees" "clockwise rotation by 270 degrees" { action x = rotate_widget 3 x; } } Free_item = class Menuaction "_Free" "clockwise rotation by any angle" { action x = class _result { _vislevel = 3; angle = Scale "Angle" (-180) 180 0; interp = Interpolate_picker Interpolate_type.BILINEAR; _result = map_unary process x { process image = rotate interp angle image; } } } Straighten_item = class Menuaction "_Straighten" ("smallest rotation that makes an arrow either horizontal " ++ "or vertical") { action x = class _result { _vislevel = 3; interp = Interpolate_picker Interpolate_type.BILINEAR; _result = map_unary straighten x { straighten arrow = rotate interp angle'' arrow.image { x = arrow.width; y = arrow.height; angle = im (polar (x, y)); angle' = angle - 360, angle > 315 = angle - 180, angle > 135 = angle; angle'' = -angle', angle' >= (-45) && angle' < 45 = 90 - angle'; } } } } } Flip_item = class Menupullright "_Flip" "mirror left/right or up/down" { Left_right_item = class Menuaction "_Left Right" "mirror object left/right" { action x = map_unary fliplr x; } Top_bottom_item = class Menuaction "_Top Bottom" "mirror object top/bottom" { action x = map_unary fliptb x; } } Resize_item = class Menupullright "_Resize" "change image size" { Scale_item = class Menuaction "_Scale" "scale image size by a factor" { action x = class _result { _vislevel = 3; xfactor = Expression "Horizontal scale factor" 1; yfactor = Expression "Vertical scale factor" 1; interp = Interpolate_picker Interpolate_type.BILINEAR; _result = map_unary process x { process image = resize interp xfactor yfactor image; } } } Size_item = class Menuaction "_Size To" "resize to a fixed size" { action x = class _result { _vislevel = 3; which = Option "Resize axis" [ "Shortest", "Longest", "Horizontal", "Vertical" ] 0; size = Expression "Resize to (pixels)" 128; aspect = Toggle "Break aspect ratio" false; interp = Interpolate_picker Interpolate_type.BILINEAR; _result = map_unary process x { process image = resize interp h v image, aspect = resize interp fac fac image { xfac = to_real size / image.width; yfac = to_real size / image.height; max_factor = [xfac, 1], xfac > yfac = [1, yfac]; min_factor = [xfac, 1], xfac < yfac = [1, yfac]; [h, v] = [ max_factor, min_factor, [xfac, 1], [1, yfac]]?which; fac = h, v == 1 = v; } } } } Size_within_item = class Menuaction "Size _Within" "size to fit within a rectangle" { action x = class _result { _vislevel = 3; // the rects we size to fit within _rects = [ [2048, 1536], [1920, 1200], [1600, 1200], [1400, 1050], [1280, 1024], [1024, 768], [800, 600], [640, 480] ]; within = Option "Fit within (pixels)" ( [print w ++ " x " ++ print h :: [w, h] <- _rects] ++ ["Custom"] ) 4; custom_width = Expression "Custom width" 1000; custom_height = Expression "Custom height" 1000; size = Option "Page size" [ "Full page", "Half page", "Quarter page" ] 0; interp = Interpolate_picker Interpolate_type.BILINEAR; _result = map_unary process x { xdiv = [1, 2, 2]?size; ydiv = [1, 1, 2]?size; allrect = _rects ++ [ [custom_width.expr, custom_height.expr] ]; [width, height] = allrect?within; process x = resize interp fac fac x, fac < 1 = x { xfac = (width / xdiv) / x.width; yfac = (height / ydiv) / x.height; fac = min_pair xfac yfac; } } } } Resize_canvas_item = class Menuaction "_Canvas" "change size of surrounding image" { action x = class _result { _vislevel = 3; // try to guess a sensible size for the new image _guess_size = x.rect, is_Image x = Rect 0 0 100 100; nwidth = Expression "New width (pixels)" _guess_size.width; nheight = Expression "New height (pixels)" _guess_size.height; bgcolour = Expression "Background colour" 0; position = Option "Position" [ "North-west", "North", "North-east", "West", "Centre", "East", "South-west", "South", "South-east", "Specify in pixels" ] 4; left = Expression "Pixels from left" 0; top = Expression "Pixels from top" 0; _result = map_unary process x { process image = insert_noexpand xp yp image background { width = image.width; height = image.height; coding = image.coding; bands = 3, coding == Image_coding.LABPACK = image.bands; format = Image_format.FLOAT, coding == Image_coding.LABPACK = image.format; type = image.type; // placement vectors ... left, centre, right xposv = [0, to_real nwidth / 2 - width / 2, to_real nwidth - width]; yposv = [0, to_real nheight / 2 - height / 2, to_real nheight - height]; xp = left, position == 9 = xposv?((int) (position % 3)); yp = top, position == 9 = yposv?((int) (position / 3)); background = image_new nwidth nheight bands format coding type bgcolour.expr 0 0; } } } } } Image_map_item = class Menuaction "_Map" "map an image through a 2D transform image" { action a b = class _result { _vislevel = 3; interp = Interpolate_picker Interpolate_type.BILINEAR; _result = map_binary trans a b { trans a b = mapim interp.value in index { // get the index image first [index, in] = sortc (const is_twocomponent) [a, b]; // is a two-component image, ie. one band complex, or // two-band non-complex is_twocomponent x = is_nonc x || is_c x; is_nonc x = has_bands x && get_bands x == 2 && has_format x && !is_complex_format (get_format x); is_c x = has_bands x && get_bands x == 1 && has_format x && is_complex_format (get_format x); is_complex_format f = f == Image_format.COMPLEX || f == Image_format.DPCOMPLEX; } } } } Image_perspective_item = Perspective_item; Image_rubber_item = class Menupullright "Ru_bber Sheet" "automatically warp images to superposition" { rubber_interp = Option "Interpolation" ["Nearest", "Bilinear"] 1; rubber_order = Option "Order" ["0", "1", "2", "3"] 1; rubber_wrap = Toggle "Wrap image edges" false; // a transform ... a matrix, plus the size of the image the // matrix was made for Transform matrix image_width image_height = class matrix { // scale a transform ... if it worked for a m by n image, make // it work for a (m * xfac) by (y * yfac) image rescale xfac yfac = Transform (Matrix (map2 (map2 multiply) matrix.value facs)) (image_width * xfac) (image_height * yfac) { facs = [ [xfac, yfac], [1, 1], [1, 1], [1 / xfac, 1 / yfac], [1 / xfac, 1 / yfac], [1 / xfac, 1 / yfac] ]; } } // yuk!!!! fix is_instanceof to not need absolute names is_Transform = is_instanceof "Image_transform_item.Image_rubber_item.Transform"; Find_item = class Menuaction "_Find" ("find a transform which will map sample image onto " ++ "reference") { action reference sample = class _trn { _vislevel = 3; // controls order = rubber_order; interp = rubber_interp; wrap = rubber_wrap; max_err = Expression "Maximum error" 0.3; max_iter = Expression "Maximum iterations" 10; // transform [sample', trn, err] = transform_search max_err max_iter order interp wrap sample reference; transformed_image = Image sample'; _trn = Transform trn reference.width reference.height; final_error = err; } } Apply_item = class Menuaction "_Apply" "apply a transform to an image" { action a b = class _result { _vislevel = 3; // controls interp = rubber_interp; wrap = rubber_wrap; _result = map_binary trans a b { trans a b = transform interp wrap t' i { // get the transform arg first [i, t] = sortc (const is_Transform) [a, b]; t' = t.rescale (i.width / t.image_width) (i.height / t.image_height); } } } } } sep1 = Menuseparator; Match_item = class Menuaction "_Linear Match" "rotate and scale one image to match another" { action x y = class _result { _vislevel = 3; // try to find an image ... for a group, get the first item find_image x = x, is_Image x = find_image x?0, is_list x = find_image x.value, is_class x && has_value x = error "unable to find image"; _a = find_image x; _b = find_image y; ap1 = Mark_relative _a 0.5 0.25; bp1 = Mark_relative _b 0.5 0.25; ap2 = Mark_relative _a 0.5 0.75; bp2 = Mark_relative _b 0.5 0.75; refine = Toggle "Refine selected tie-points" false; lock = Toggle "No resize" false; _result = map_binary process x y { process a b = Image b''' { _prefs = Workspaces.Preferences; window = _prefs.MOSAIC_WINDOW_SIZE; object = _prefs.MOSAIC_OBJECT_SIZE; a' = a.value; b' = b.value; b'' = clip2fmt a.format b'; // return p2 ... if lock is set, return a p2 a standard // distance along the vector joining p1 and p2 norm p1 p2 = Rect left' top' 0 0, lock = p2 { v = (p2.left - p1.left, p2.top - p1.top); // 100000 to give precision since we pass points as // ints to match n = 100000 * sign v; left' = p1.left + re n; top' = p1.top + im n; } ap2'' = norm ap1 ap2; bp2'' = norm bp1 bp2; b''' = im_match_linear_search a' b'' ap1.left ap1.top bp1.left bp1.top ap2''.left ap2''.top bp2''.left bp2''.top object window, // we can't search if lock is on refine && !lock = im_match_linear a' b'' ap1.left ap1.top bp1.left bp1.top ap2''.left ap2''.top bp2''.left bp2''.top; } } } } Image_perspective_match_item = Perspective_match_item; } Image_band_item = class Menupullright "_Band" "manipulate image bands" { // like extract_bands, but return [] for zero band image // makes compose a bit simpler exb b n x = [], to_real n == 0 = extract_bands b n x; Extract_item = class Menuaction "_Extract" "extract bands from image" { action x = class _result { _vislevel = 3; first = Expression "Extract from band" 0; number = Expression "Extract this many bands" 1; _result = map_unary (exb first number) x; } } Insert_item = class Menuaction "_Insert" "insert bands into image" { action x y = class _result { _vislevel = 3; first = Expression "Insert at position" 0; _result = map_binary process x y { process im1 im2 = exb 0 f im1 ++ im2 ++ exb f (b - f) im1 { f = to_real first; b = im1.bands; } } } } Delete_item = class Menuaction "_Delete" "delete bands from image" { action x = class _result { _vislevel = 3; first = Expression "Delete from band" 0; number = Expression "Delete this many bands" 1; _result = map_unary process x { process im = exb 0 f im ++ exb (f + n) (b - (f + n)) im { f = to_real first; n = to_real number; b = im.bands; } } } } Bandwise_item = Image_join_item.Bandwise_item; sep1 = Menuseparator; Bandand_item = class Menuaction "Bitwise Band AND" "bitwise AND of image bands" { action x = bandand x; } Bandor_item = class Menuaction "Bitwise Band OR" "bitwise OR of image bands" { action x = bandor x; } sep2 = Menuseparator; To_dimension_item = class Menuaction "To D_imension" "convert bands to width or height" { action x = class _result { _vislevel = 3; orientation = Option "Orientation" [ "Horizontal", "Vertical" ] 0; _result = map_unary process x { process im = foldl1 [join_lr, join_tb]?orientation (bandsplit im); } } } To_bands_item = class Menuaction "To B_ands" "turn width or height to bands" { action x = class _result { _vislevel = 3; orientation = Option "Orientation" [ "Horizontal", "Vertical" ] 0; _result = map_unary process x { process im = bandjoin (map extract_column [0 .. im.width - 1]), orientation == 0 = bandjoin (map extract_row [0 .. im.height - 1]) { extract_column n = extract_area n 0 1 im.height im; extract_row n = extract_area 0 n im.width 1 im; } } } } } Image_crop_item = class Menuaction "_Crop" "extract a rectangular area from an image" { action x = crop x [l, t, w, h] { fields = [ [has_left, get_left, 0], [has_top, get_top, 0], [has_width, get_width, 100], [has_height, get_height, 100] ]; [l, t, w, h] = map get_default fields { get_default line = get x, has x = default { [has, get, default] = line; } } } crop x geo = class _result { _vislevel = 3; l = Expression "Crop left" ((int) (geo?0 + geo?2 / 4)); t = Expression "Crop top" ((int) (geo?1 + geo?3 / 4)); w = Expression "Crop width" (max_pair 1 ((int) (geo?2 / 2))); h = Expression "Crop height" (max_pair 1 ((int) (geo?3 / 2))); _result = map_nary (list_5ary extract) [x, l.expr, t.expr, w.expr, h.expr] { extract im l t w h = extract_area left' top' width' height' im { width' = min_pair (to_real w) im.width; height' = min_pair (to_real h) im.height; left' = range 0 (to_real l) (im.width - width'); top' = range 0 (to_real t) (im.height - height'); } } } } Image_insert_item = class Menuaction "_Insert" "insert a small image into a large image" { action a b = insert_position, is_Group a || is_Group b = insert_area { insert_area = class _result { _check_args = [ [a, "a", check_Image], [b, "b", check_Image] ]; _vislevel = 3; // sort to get smallest first _pred x y = x.width * x.height < y.width * y.height; [_a', _b'] = sortc _pred [a, b]; place = Area _b' left top width height { // be careful in case b is smaller than a left = max_pair 0 ((_b'.width - _a'.width) / 2); top = max_pair 0 ((_b'.height - _a'.height) / 2); width = min_pair _a'.width _b'.width; height = min_pair _a'.height _b'.height; } _result = insert_noexpand place.left place.top (clip2fmt _b'.format a'') _b' { a'' = extract_area 0 0 place.width place.height _a'; } } insert_position = class _result { _vislevel = 3; position = Option "Position" [ "North-west", "North", "North-east", "West", "Centre", "East", "South-west", "South", "South-east", "Specify in pixels" ] 4; left = Expression "Pixels from left" 0; top = Expression "Pixels from top" 0; _result = map_binary insert a b { insert a b = insert_noexpand left top (clip2fmt b.format a) b, position == 9 = insert_noexpand xp yp (clip2fmt b.format a) b { xr = b.width - a.width; yr = b.height - a.height; xp = [0, xr / 2, xr]?((int) (position % 3)); yp = [0, yr / 2, yr]?((int) (position / 3)); } } } } } Image_select_item = Select_item; Image_draw_item = class Menupullright "_Draw" "draw lines, circles, rectangles, floods" { Line_item = class Menuaction "_Line" "draw line on image" { action x = class _result { _vislevel = 3; x1 = Expression "Start x" 0; y1 = Expression "Start y" 0; x2 = Expression "End x" 100; y2 = Expression "End y" 100; i = Expression "Ink" [0]; _result = map_unary line x { line im = draw_line x1 y1 x2 y2 i.expr im; } } } Rect_item = class Menuaction "_Rectangle" "draw rectangle on image" { action x = class _result { _vislevel = 3; rx = Expression "Left" 50; ry = Expression "Top" 50; rw = Expression "Width" 100; rh = Expression "Height" 100; f = Toggle "Fill" true; t = Scale "Line thickness" 1 50 3; i = Expression "Ink" [0]; _result = map_unary rect x { rect im = draw_rect_width rx ry rw rh f t i.expr im; } } } Circle_item = class Menuaction "_Circle" "draw circle on image" { action x = class _result { _vislevel = 3; cx = Expression "Centre x" 100; cy = Expression "Centre y" 100; r = Expression "Radius" 50; f = Toggle "Fill" true; i = Expression "Ink" [0]; _result = map_unary circle x { circle im = draw_circle cx cy r f i.expr im; } } } Flood_item = class Menuaction "_Flood" "flood bounded area of image" { action x = class _result { _vislevel = 3; sx = Expression "Start x" 100; sy = Expression "Start y" 100; e = Option "Flood while" [ "Not equal to ink", "Equal to start point" ] 0; // pick a default ink that won't flood, if we can i = Expression "Ink" default_ink { default_ink = [0], ! has_image x = pixel; pixel = map mean (bandsplit (extract_area sx sy 1 1 im)); im = get_image x; } _result = map_unary flood x { flood im = draw_flood sx sy i.expr im, e == 0 = draw_flood_blob sx sy i.expr im; } } } Draw_scalebar_item = class Menuaction "_Scale" "draw scale bar" { action x = class _result { _vislevel = 3; px = Expression "Left" 50; py = Expression "Top" 50; wid = Expression "Width" 100; thick = Scale "Line thickness" 1 50 3; text = String "Dimension text" "50μm"; font = Fontname "Use font" Workspaces.Preferences.PAINTBOX_FONT; pos = Option "Position Text" ["Above", "Below"] 1; vp = Option "Dimension by" [ "Inner Vertical Edge", "Centre of Vertical", "Outer Vertical Edge" ] 1; dpi = Expression "DPI" 100; ink = Colour "Lab" [50,0,0]; _result = map_unary process x { process im = blend (Image scale) ink' im { // make an ink compatible with the image ink' = colour_transform_to (get_type im) ink; x = to_real px; y = to_real py; w = to_real wid; d = to_real dpi; t = floor thick; bg = image_new (get_width im) (get_height im) (get_bands im) (get_format im) (get_coding im) (get_type im) 0 0 0; draw_block x y w t im = draw_rect_width x y w t true 1 [255] im; label = im_text text.value font.value w 1 d; lw = get_width label; lh = get_height label; ly = [y - lh - t, y + 2 * t]?pos; vx = [ [x - t, x + w], [x - t / 2, x + w - t / 2], [x, x + w - t] ]?vp; scale = (draw_block x y w t @ draw_block vx?0 (y - 2 * t) t (t * 5) @ draw_block vx?1 (y - 2 * t) t (t * 5) @ insert_noexpand (x + w / 2 - lw / 2) ly label) bg; } } } } } Image_join_item = class Menupullright "_Join" "join two or more images together" { Bandwise_item = class Menuaction "_Bandwise Join" "join two images bandwise" { action a b = join a b; } sep1 = Menuseparator; join_lr shim bg align a b = im2 { w = a.width + b.width + shim; h = max_pair a.height b.height; back = image_new w h a.bands a.format a.coding a.type bg 0 0; ya = [0, max_pair 0 ((b.height - a.height)/2), max_pair 0 (b.height - a.height)]; yb = [0, max_pair 0 ((a.height - b.height)/2), max_pair 0 (a.height - b.height)]; im1 = insert_noexpand 0 ya?align a back; im2 = insert_noexpand (a.width + shim) yb?align b im1; } join_tb shim bg align a b = im2 { w = max_pair a.width b.width; h = a.height + b.height + shim; back = image_new w h a.bands a.format a.coding a.type bg 0 0; xa = [0, max_pair 0 ((b.width - a.width)/2), max_pair 0 (b.width - a.width)]; xb = [0, max_pair 0 ((a.width - b.width)/2), max_pair 0 (a.width - b.width)]; im1 = insert_noexpand xa?align 0 a back; im2 = insert_noexpand xb?align (a.height + shim) b im1; } halign_names = ["Top", "Centre", "Bottom"]; valign_names = ["Left", "Centre", "Right"]; Left_right_item = class Menuaction "_Left to Right" "join two images left-right" { action a b = class _result { _vislevel = 3; shim = Scale "Spacing" 0 100 0; bg_colour = Expression "Background colour" 0; align = Option "Alignment" halign_names 1; _result = map_binary (join_lr shim.value bg_colour.expr align.value) a b; } } Top_bottom_item = class Menuaction "_Top to Bottom" "join two images top-bottom" { action a b = class _result { _vislevel = 3; shim = Scale "Spacing" 0 100 0; bg_colour = Expression "Background colour" 0; align = Option "Alignment" valign_names 1; _result = map_binary (join_tb shim.value bg_colour.expr align.value) a b; } } sep2 = Menuseparator; Array_item = class Menuaction "_Array" "join a list of lists of images into a single image" { action x = class _result { _vislevel = 3; hshim = Scale "Horizontal spacing" (-100) (100) 0; vshim = Scale "Vertical spacing" (-100) (100) 0; bg_colour = Expression "Background colour" 0; halign = Option "Horizontal alignment" valign_names 1; valign = Option "Vertical alignment" halign_names 1; // we can't use map_unary since chop-into-tiles returns a group of // groups and we want to be able to reassemble that // TODO: chop-into-tiles should return an array class which // displays as group but does not have the looping behaviour? _result = (image_set_origin 0 0 @ foldl1 (join_tb vshim.value bg_colour.expr halign.value) @ map (foldl1 (join_lr hshim.value bg_colour.expr valign.value))) (to_list (to_list x)); } } ArrayFL_item = class Menuaction "_Array from List" "join a list of images into a single image" { action x = class _result { _vislevel = 3; ncol = Number "Max. Number of Columns" 1; hshim = Scale "Horizontal spacing" (-100) (100) 0; vshim = Scale "Vertical spacing" (-100) (100) 0; bg_colour = Expression "Background colour" 0; halign = Option "Horizontal alignment" valign_names 1; valign = Option "Vertical alignment" halign_names 1; _l = split_lines ncol.value x.value, is_Group x = split_lines ncol.value x; _result = (image_set_origin 0 0 @ foldl1 (join_tb vshim.value bg_colour.expr halign.value) @ map (foldl1 (join_lr hshim.value bg_colour.expr valign.value))) (to_list (to_list _l)); } } } Image_tile_item = class Menupullright "Til_e" "tile an image across and down" { tile_widget default_type x = class _result { _vislevel = 3; across = Expression "Tiles across" 2; down = Expression "Tiles down" 2; repeat = Option "Tile type" ["Replicate", "Four-way mirror"] default_type; _result = map_unary process x { process image = tile across down image, repeat == 0 = tile across down image'' { image' = insert image.width 0 (fliplr image) image; image'' = insert 0 image.height (fliptb image') image'; } } } Replicate_item = class Menuaction "_Replicate" "replicate image across and down" { action x = tile_widget 0 x; } Fourway_item = class Menuaction "_Four-way Mirror" "four-way mirror across and down" { action x = tile_widget 1 x; } Chop_item = class Menuaction "_Chop Into Tiles" "slice an image into tiles" { action x = class _result { _vislevel = 3; tile_width = Expression "Tile width" 100; tile_height = Expression "Tile height" 100; hoverlap = Expression "Horizontal overlap" 0; voverlap = Expression "Vertical overlap" 0; _result = map_unary (Group @ map Group @ process) x { process x = imagearray_chop tile_width tile_height hoverlap voverlap x; } } } } #separator Pattern_images_item = class Menupullright "_Patterns" "make a variety of useful patterns" { Grey_item = class Menuaction "Grey _Ramp" "make a smooth grey ramp" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; orientation = Option "Orientation" [ "Horizontal", "Vertical" ] 0; foption = Option "Format" ["8 bit", "float"] 0; _result = Image im { gen = im_grey, foption == 0 = im_fgrey; w = to_real nwidth; h = to_real nheight; im = gen w h, orientation == 0 = rot90 (gen h w); } } } Xy_item = class Menuaction "_XY Image" "make a two band image whose pixel values are their coordinates" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; _result = Image (make_xy nwidth nheight); } } Gaussian_item = class Menuaction "Gaussian _Noise" "make an image of gaussian noise" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; mean = Scale "Mean" 0 255 128; deviation = Scale "Deviation" 0 128 50; _result = Image (im_gaussnoise (to_real nwidth) (to_real nheight) mean.value deviation.value); } } Fractal_item = class Menuaction "_Fractal" "make a fractal image" { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; dimension = Scale "Dimension" 2.001 2.999 2.001; _result = Image (im_fractsurf (to_real nsize) dimension.value); } } Checkerboard_item = class Menuaction "_Checkerboard" "make a checkerboard image" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; hpsize = Expression "Horizontal patch size" 8; vpsize = Expression "Vertical patch size" 8; hpoffset = Expression "Horizontal patch offset" 0; vpoffset = Expression "Vertical patch offset" 0; _result = Image (xstripes ^ ystripes) { pixels = make_xy nwidth nheight; xpixels = pixels?0 + to_real hpoffset; ypixels = pixels?1 + to_real vpoffset; make_stripe pix swidth = pix % (swidth * 2) >= swidth; xstripes = make_stripe xpixels (to_real hpsize); ystripes = make_stripe ypixels (to_real vpsize); } } } Grid_item = class Menuaction "Gri_d" "make a grid" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; hspace = Expression "Horizontal line spacing" 8; vspace = Expression "Vertical line spacing" 8; thick = Expression "Line thickness" 1; hoff = Expression "Horizontal grid offset" 4; voff = Expression "Vertical grid offset" 4; _result = Image (xstripes | ystripes) { pixels = make_xy nwidth nheight; xpixels = pixels?0 + to_real hoff; ypixels = pixels?1 + to_real voff; make_stripe pix swidth = pix % swidth < to_real thick; xstripes = make_stripe xpixels (to_real hspace); ystripes = make_stripe ypixels (to_real vspace); } } } Text_item = class Menuaction "_Text" "make a bitmap of some text" { action = class _result { _vislevel = 3; text = String "Text to paint" "Hello world!"; font = Fontname "Use font" Workspaces.Preferences.PAINTBOX_FONT; wrap = Expression "Wrap text at" 500; align = Option "Alignment" [ "Left", "Centre", "Right" ] 0; dpi = Expression "DPI" 300; _result = Image (im_text text.value font.value (to_real wrap) align.value (to_real dpi)); } } New_CIELAB_slice_item = class Menuaction "CIELAB _Slice" "make a slice through CIELAB space" { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; L = Scale "L value" 0 100 50; _result = Image (lab_slice (to_real nsize) L.value); } } sense_option = Option "Sense" [ "Pass", "Reject" ] 0; build fn size = (Image @ image_set_type Image_type.FOURIER @ rotquad @ fn) (im_create_fmask size size); New_ideal_item = class Menupullright "_Ideal Fourier Mask" "make various ideal Fourier filter masks" { High_low_item = class Menuaction "_High or Low Pass" ("make a mask image for a highpass/lowpass " ++ "ideal Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f sense.value fc.value 0 0 0 0; } } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" ("make a mask image for an ring pass/reject " ++ "ideal Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; rw = Scale "Ring width" 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f (sense.value + 6) fc.value rw.value 0 0 0; } } } Band_item = class Menuaction "_Band Pass or Band Reject" ("make a mask image for a band pass/reject " ++ "ideal Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fcx = Scale "Horizontal frequency cutoff" 0.01 0.99 0.5; fcy = Scale "Vertical frequency cutoff" 0.01 0.99 0.5; r = Scale "Radius" 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f (sense.value + 12) fcx.value fcy.value r.value 0 0; } } } } New_gaussian_item = class Menupullright "_Gaussian Fourier Mask" "make various Gaussian Fourier filter masks" { High_low_item = class Menuaction "_High or Low Pass" ("make a mask image for a highpass/lowpass " ++ "Gaussian Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f (sense.value + 4) fc.value ac.value 0 0 0; } } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" ("make a mask image for an ring pass/reject " ++ "Gaussian Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; rw = Scale "Ring width" 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f (sense.value + 10) fc.value rw.value ac.value 0 0; } } } Band_item = class Menuaction "_Band Pass or Band Reject" ("make a mask image for a band pass/reject " ++ "Gaussian Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fcx = Scale "Horizontal frequency cutoff" 0.01 0.99 0.5; fcy = Scale "Vertical frequency cutoff" 0.01 0.99 0.5; r = Scale "Radius" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f (sense.value + 16) fcx.value fcy.value r.value ac.value 0; } } } } New_butterworth_item = class Menupullright "_Butterworth Fourier Mask" "make various Butterworth Fourier filter masks" { High_low_item = class Menuaction "_High or Low Pass" ("make a mask image for a highpass/lowpass " ++ "Butterworth Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; order = Scale "Order" 1 10 2; _result = build param (to_real nsize) { param f = f (sense.value + 2) order.value fc.value ac.value 0 0; } } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" ("make a mask image for an ring pass/reject " ++ "Butterworth Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; rw = Scale "Ring width" 0.01 0.99 0.5; order = Scale "Order" 1 10 2; _result = build param (to_real nsize) { param f = f (sense.value + 8) order.value fc.value rw.value ac.value 0; } } } Band_item = class Menuaction "_Band Pass or Band Reject" ("make a mask image for a band pass/reject " ++ "Butterworth Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fcx = Scale "Horizontal frequency cutoff" 0.01 0.99 0.5; fcy = Scale "Vertical frequency cutoff" 0.01 0.99 0.5; r = Scale "Radius" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; order = Scale "Order" 1 10 2; _result = build param (to_real nsize) { param f = f (sense.value + 14) order.value fcx.value fcy.value r.value ac.value; } } } } } Test_images_item = class Menupullright "Test I_mages" "make a variety of test images" { Eye_item = class Menuaction "_Spatial Response" "image for testing the eye's spatial response" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; factor = Scale "Factor" 0.001 1 0.2; _result = Image (im_eye (to_real nwidth) (to_real nheight) factor.value); } } Zone_plate = class Menuaction "_Zone Plate" "make a zone plate" { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; _result = Image (im_zone (to_real nsize)); } } Frequency_test_chart_item = class Menuaction "_Frequency Testchart" "make a black/white frequency test pattern" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; sheight = Expression "Strip height (pixels)" 10; waves = Expression "Wavelengths" [64, 32, 16, 8, 4, 2]; _result = imagearray_assemble 0 0 (transpose [strips]) { freq_slice wave = Image (sin (grey / wave) > 0); strips = map freq_slice waves.expr; grey = im_fgrey (to_real nwidth) (to_real sheight) * 360 * (to_real nwidth); } } } CRT_test_chart_item = class Menuaction "CRT _Phosphor Chart" "make an image for measuring phosphor colours" { action = class _result { _vislevel = 3; brightness = Scale "Brightness" 0 255 200; psize = Expression "Patch size (pixels)" 32; _result = Image (imagearray_assemble 0 0 [[green, red], [blue, white]]) { black = image_new (to_real psize) (to_real psize) 1 Image_format.FLOAT Image_coding.NOCODING Image_type.B_W 0 0 0; notblack = black + brightness; green = black ++ notblack ++ black; red = notblack ++ black ++ black; blue = black ++ black ++ notblack; white = notblack ++ notblack ++ notblack; } } } Greyscale_chart_item = class Menuaction "_Greyscale" "make a greyscale" { action = class _result { _vislevel = 3; pwidth = Expression "Patch width" 8; pheight = Expression "Patch height" 8; npatches = Expression "Number of patches" 16; _result = Image (image_set_type Image_type.B_W (clip2fmt Image_format.UCHAR wedge)) { wedge = 255 / (to_real npatches - 1) * (int) (strip?0 / to_real pwidth) { strip = make_xy (to_real pwidth * to_real npatches) pheight; } } } } CMYK_test_chart_item = class Menuaction "_CMYK Wedges" "make a set of CMYK wedges" { action = class _result { _vislevel = 3; pwidth = Expression "Patch width" 8; pheight = Expression "Patch height" 8; npatches = Expression "Number of patches" 16; _result = Image (image_set_type Image_type.CMYK (clip2fmt Image_format.UCHAR strips)) { wedge = 255 / (to_real npatches - 1) * (int) (strip?0 / to_real pwidth) { strip = make_xy (to_real pwidth * to_real npatches) pheight; } black = wedge * 0; C = wedge ++ black ++ black ++ black; M = black ++ wedge ++ black ++ black; Y = black ++ black ++ wedge ++ black; K = black ++ black ++ black ++ wedge; strips = imagearray_assemble 0 0 [[C],[M],[Y],[K]]; } } } Colour_atlas_item = class Menuaction "_Colour Atlas" "make a grid of patches grouped around a colour" { action = class _result { _vislevel = 3; start = Colour_picker "Lab" [50,0,0]; nstep = Expression "Number of steps" 9; ssize = Expression "Step size" 10; psize = Expression "Patch size" 32; sepsize = Expression "Separator size" 4; _result = colour_transform_to (get_type start) blocks''' { size = (to_real nstep * 2 + 1) * to_real psize - to_real sepsize; xy = make_xy size size; xy_grid = (xy % to_real psize) < (to_real psize - to_real sepsize); grid = xy_grid?0 & xy_grid?1; blocks = (int) (to_real ssize * ((int) (xy / to_real psize))); lab_start = colour_transform_to Image_type.LAB start; blocks' = blocks - to_real nstep * to_real ssize + Vector (tl lab_start.value); blocks'' = hd lab_start.value ++ Image blocks'; blocks''' = image_set_type Image_type.LAB blocks'', Image grid = 0; } } } } nip2-8.7.0/share/nip2/compat/8.2/_list.def0000644000175000017500000002310313224651032014652 00000000000000/* any l: or all the elements of list l together * * any (map (equal 0) list) == true, if any element of list is zero. * any :: [bool] -> bool */ any = foldr logical_or false; /* all l: and all the elements of list l together * * all (map (==0) list) == true, if every element of list is zero. * all :: [bool] -> bool */ all = foldr logical_and true; /* concat l: join a list of lists together * * concat ["abc","def"] == "abcdef". * concat :: [[*]] -> [*] */ concat l = foldr join [] l; /* delete eq x l: delete the first x from l * * delete equal 'b' "abcdb" == "acdb" * delete :: (* -> bool) -> * -> [*] -> [*] */ delete eq a l = [], l == [] = y, eq a b = b : delete eq a y { b:y = l; } /* difference eq a b: delete b from a * * difference equal "asdf" "ad" == "sf" * difference :: (* -> bool) -> [*] -> [*] -> [*] */ difference = foldl @ converse @ delete; /* drop n l: drop the first n elements from list l * * drop 3 "abcd" == "d" * drop :: num -> [*] -> [*] */ drop n l = l, n <= 0 || l == [] = drop (n - 1) (tl l); /* dropwhile fn l: drop while fn is true * * dropwhile is_digit "1234pigs" == "pigs" * dropwhile :: (* -> bool) -> [*] -> [*] */ dropwhile fn l = [], l == [] = dropwhile fn x, fn a = l { a:x = l; } /* extract n l: extract element at index n from list l */ extract = converse subscript; /* filter fn l: return all elements of l for which predicate fn holds * * filter is_digit "1one2two3three" = "123" * filter :: (* -> bool) -> [*] -> [*] */ filter fn l = foldr addif [] l { addif x l = x : l, fn x; = l; } /* flatten x: flatten a list of lists of things into a simple list * * flatten :: [[*]] -> [*] */ flatten x = foldr flat [] x, is_list x = x { flat x sofar = foldr flat sofar x, is_list x = x : sofar; } /* foldl fn st l: fold list l from the left with function fn and start st * * Start from the left hand end of the list (unlike foldr, see below). * foldl is less useful (and much slower). * * foldl fn start [a,b .. z] = ((((st fn a) fn b) ..) fn z) * foldl :: (* -> ** -> *) -> * -> [**] -> * */ foldl fn st l = st, l == [] = foldl fn (fn st x) xs { x:xs = l; } /* foldl1 fn l: like foldl, but use the 1st element as the start value * * foldl1 fn [1,2,3] == ((1 fn 2) fn 3) * foldl1 :: (* -> * -> *) -> [*] -> * */ foldl1 fn l = [], l == [] = foldl fn x xs { x:xs = l; } /* foldr fn st l: fold list l from the right with function fn and start st * * foldr fn st [a,b..z] = (a fn (b fn (.. (z fn st)))) * foldr :: (* -> ** -> **) -> ** -> [*] -> ** */ foldr fn st l = st, l == [] = fn x (foldr fn st xs) { x:xs = l; } /* foldr1 fn l: like foldr, but use the last element as the start value * * foldr1 fn [1,2,3,4] == (1 fn (2 fn (3 fn 4))) * foldr1 :: (* -> * -> *) -> [*] -> * */ foldr1 fn l = [], l == [] = x, xs == [] = fn x (foldr1 fn xs) { x:xs = l; } /* Search a list for an element, returning its index (or -1) * * index (equal 12) [13,12,11] == 1 * index :: (* -> bool) -> [*] -> real */ index fn list = search list 0 { search l n = -1, l == [] = n, fn x = search xs (n + 1) { x:xs = l; } } /* init l: remove last element of list l * * The dual of tl. * init [1,2,3] == [1,2] * init :: [*] -> [*] */ init l = error "init of []", l == []; = [], tl l == []; = x : init xs { x:xs = l; } /* iterate f x: repeatedly apply f to x * * return the infinite list [x, f x, f (f x), ..]. * iterate (multiply 2) 1 == [1, 2, 4, 8, 16, 32, 64 ... ] * iterate :: (* -> *) -> * -> [*] */ iterate f x = x : iterate f (f x); /* join_sep sep l: join a list with a separator * * join_sep ", " (map print [1 .. 4]) == "1, 2, 3, 4" * join_sep :: [*] -> [[*]] -> [*] */ join_sep sep l = foldl1 fn l { fn a b = a ++ sep ++ b; } /* last l: return the last element of list l * * The dual of hd. last [1,2,3] == 3 * last :: [*] -> [*] */ last l = error "last of []", l == [] = x, xs == [] = last xs { x:xs = l; } /* len l: length of list l * (see also is_list_len and friends in predicate.def) * * len :: [*] -> num */ len l = 0, l == [] = 1 + len (tl l); /* limit l: return the first element of l which is equal to its predecessor * * useful for checking for convergence * limit :: [*] -> * */ limit l = error "incorrect use of limit", l == [] || tl l == [] || tl (tl l) == [] = a, a == b = limit (b : x) { a:b:x = l; } /* Turn a function of n args into a function which takes a single arg of an * n-element list. */ list_1ary fn x = fn x?0; list_2ary fn x = fn x?0 x?1; list_3ary fn x = fn x?0 x?1 x?2; list_4ary fn x = fn x?0 x?1 x?2 x?3; list_5ary fn x = fn x?0 x?1 x?2 x?3 x?4; list_6ary fn x = fn x?0 x?1 x?2 x?3 x?4 x?5; list_7ary fn x = fn x?0 x?1 x?2 x?3 x?4 x?5 x?6; /* map fn l: map function fn over list l * * map :: (* -> **) -> [*] -> [**] */ map f l = [], l == []; = f (hd l) : map f (tl l); /* map2 fn l1 l2: map two lists together with fn * * map2 :: (* -> ** -> ***) -> [*] -> [**] -> [***] */ map2 fn l1 l2 = map (list_2ary fn) (zip2 l1 l2); /* map3 fn l1 l2 l3: map three lists together with fn * * map3 :: (* -> ** -> *** -> ****) -> [*] -> [**] -> [***] -> [****] */ map3 fn l1 l2 l3 = map (list_3ary fn) (zip3 l1 l2 l3); /* member l x: true if x is a member of list l * * is_digit == member "0123456789" * member :: [*] -> * -> bool */ member l x = any (map (equal x) l); /* merge b l r: merge two lists based on a bool list * * merge :: [bool] -> [*] -> [*] -> [*] */ merge p l r = [], p == [] || l == [] || r == [] = a : merge z x y, c = b : merge z x y { a:x = l; b:y = r; c:z = p; } /* mkset eq l: remove duplicates from list l using equality function * * mkset :: (* -> bool) -> [*] -> [*] */ mkset eq l = [], l == [] = a : filter (not @ eq a) (mkset eq x) { a:x = l; } /* postfix l r: add r to the end of list l * * The dual of ':'. * postfix :: [*] -> ** -> [*,**] */ postfix l r = l ++ [r]; /* repeat x: make an infinite list of xes * * repeat :: * -> [*] */ repeat x = map (const x) [1..]; /* replicate n x: make n copies of x in a list * * replicate :: num -> * -> [*] */ replicate n x = take n (repeat x); /* reverse l: reverse list l * * reverse :: [*] -> [*] */ reverse l = foldl (converse cons) [] l; /* scanl fn st l: apply (foldl fn r) to every initial segment of a list * * scanl add 0 [1,2,3] == [1,3,6] * scanl :: (* -> ** -> *) -> * -> [**] -> [*] */ scanl fn st l = st, l == [] = st' : scanl fn st' xs { x:xs = l; st' = fn st x; } /* sort l: sort list l into ascending order * * sort :: [*] -> [*] */ sort l = sortc less_equal l; /* sortc comp l: sort list l into order using a comparision function * * Uses merge sort (n log n behaviour) * sortc :: (* -> * -> bool) -> [*] -> [*] */ sortc comp l = l, n <= 1 = merge (sortc comp (take n2 l)) (sortc comp (drop n2 l)) { n = len l; n2 = (int) (n / 2); /* merge l1 l2: merge sorted lists l1 and l2 to make a single * sorted list */ merge l1 l2 = l2, l1 == [] = l1, l2 == [] = a : merge x (b : y), comp a b = b : merge (a : x) y { a:x = l1; b:y = l2; } } /* sortpl pl l: sort by a list of predicates * * sortpl :: (* -> bool) -> [*] -> [*] */ sortpl pl l = sortc (test pl) l { /* Comparision function ... put true before false, if equal move on to * the next predicate. */ test pl a b = true, pl == [] = ta, ta != tb = test (tl pl) a b { ta = pl?0 a; tb = pl?0 b; } } /* sortr l: sort list l into descending order * * sortr :: [*] -> [*] */ sortr l = sortc more l; /* split fn l: break a list into sections separated by many fn * * split is_space " hello world " == ["hello", "world"] * split is_space " " == [] * split :: (* -> bool) -> [*] -> [[*]] */ split fn l = [], l == [] || l' == [] = head : split fn tail { nfn = not @ fn; l' = dropwhile fn l; head = takewhile nfn l'; tail = dropwhile nfn l'; } /* splits fn l: break a list into sections separated by a single fn * * split (equal ',') ",,1" == ["", "", "1"] * split :: (* -> bool) -> [*] -> [[*]] */ splits fn l = [], l == [] = head : splits fn tail { fn' = not @ fn; dropif x = [], x == [] = tl x; head = takewhile fn' l; tail = dropif (dropwhile fn' l); } /* splitpl fnl l: split a list up with a list of predicates * * splitpl [is_digit, is_letter, is_digit] "123cat" == ["123", "cat", []] * splitpl :: [* -> bool] -> [*] -> [[*]] */ splitpl fnl l = l, fnl == [] = head : splitpl (tl fnl) tail { head = takewhile (hd fnl) l; tail = dropwhile (hd fnl) l; } /* split_lines n l: split a list into equal length lines * * split_lines 4 "1234567" == ["1234", "567"] * splitl :: int -> [*] -> [[*]] */ split_lines n l = [], l == [] = take n l : split_lines n (drop n l); /* take n l: take the first n elements from list l * take :: num -> [*] -> [*] */ take n l = [], n <= 0 = [], l == [] = hd l : take (n-1) (tl l); /* takewhile fn l: take from the front of a list while predicate fn holds * * takewhile is_digit "123onetwothree" == "123" * takewhile :: (* -> bool) -> [*] -> [*] */ takewhile fn l = [], l == [] = hd l : takewhile fn (tl l), fn (hd l) = []; /* zip2 l1 l2: zip two lists together * * zip2 [1,2] ['a', 'b', 'c'] == [[1,'a'],[2,'b']] * zip2 :: [*] -> [**] -> [[*,**]] */ zip2 l1 l2 = [], l1 == [] || l2 == [] = [hd l1, hd l2] : zip2 (tl l1) (tl l2); /* zip3 l1 l2 l3: zip three lists together * * zip3 [1,2] ['a', 'b', 'c'] [true] == [[1,'a',true]] * zip3 :: [*] -> [**] ->[***] -> [[*,**,***]] */ zip3 l1 l2 l3 = [], l1 == [] || l2 == [] || l3 == [] = [hd l1, hd l2, hd l3] : zip3 (tl l1) (tl l2) (tl l3); nip2-8.7.0/share/nip2/compat/8.2/_magick.def0000644000175000017500000005416213224651032015143 00000000000000/* ImageMagick operations edited by Alan Gibson (aka "snibgo"; snibgo at earthling dot net). 1-Apr-2014 Minor corrections to Geometry_widget and Alpha. Added loads of widgets and Menuactions. Not fully tested. 5-Apr-2014 Many more menu actions. Reorganised Magick menu. 10-Apr-2014 Many more menu actions. 11-Apr-2014 jcupitt Split to separate _magick.def Add 0-ary and 2-ary system Put utility funcs into a Magick class 11-Apr-2014 snibgo Added VirtualPixelBack for cases where background is only relevant when VP=Background 17-Apr-2014 snibgo Many small changes. 2-May-2014 jcupitt Added Magick.version 30-June-2014 Put single-quotes around command exe to help win 1-July-2014 Automatically fall back to gm if we can't find convert 17-July-2014 better GM support Last update: 17-July-2014. For details of ImageMagick operations, see http://www.imagemagick.org/script/command-line-options.php etc. */ /* Put these in a class to avoid filling the main namespace with IM stuff. */ Magick = class { // turn $PATH into [["comp1", "comp2"], ["comp1", "comp2"] ..] system_search_path = map path_parse (split (equal path_sep) (expand "$PATH")) { path_sep = ':', expand "$SEP" == "/" = ';'; } // the first name[.exe] on $PATH, or "" search_for name = hits?0, hits != [] = "" { exe_name = name ++ expand "$EXEEXT"; form_path p = path_absolute (p ++ [exe_name]); paths = map form_path system_search_path; hits = dropwhile (equal []) (map search paths); } // first gm on path, or "" gm_path = search_for "gm"; // first convert on $PATH, or "" // we check for the convert we ship first convert_path = vips_convert, vips_convert != "" = search_for "convert" { // the convert we ship with the vips binary on some platforms, or "" vips_convert = search (path_absolute convert) { vipshome = path_parse (expand "$VIPSHOME"); convert = vipshome ++ ["bin", "convert" ++ expand "$EXEEXT"]; } } use_gm_pref = Workspaces.Preferences.USE_GRAPHICSMAGICK; // Are we in GM or IM mode? use_gm = true, use_gm_pref && gm_path != "" = false, !use_gm_pref && convert_path != "" = false, convert_path != "" = true, gm_path != "" = error "neither IM nor GM executable found"; command_path = gm_path, use_gm = convert_path; // try to get the version as eg. [6, 7, 7, 10] // GM versions are smaller, typically [1, 3, 18] version = map parse_int (split (member ".-") version_string) { [output] = vips_call "system" ["'" ++ command_path ++ "' -version"] [$log=>true]; version_string = (split (equal ' ') output)?1, use_gm = (split (equal ' ') output)?2; } // make a command-line ... args is a [str] we join with spaces command args = "'" ++ command_path ++ "' " ++ join_sep " " args' { args' = ["convert"] ++ args, use_gm = args; } // capabilities ... different versions support different features, we // turn features on and off based on these // would probably be better to test for caps somehow has_intensity = false, use_gm = version?0 > 6 || version?1 > 7; has_channel = false, use_gm = version?0 > 6 || version?1 > 7; system0 cmd = system_image0 cmd; system cmd x = map_unary (system_image cmd) x; system2 cmd x y = map_binary (system_image2 cmd) x y; system3 cmd x y z = map_trinary (system_image3 cmd) x y z; radius_widget = Scale "Radius" 0 100 10; sigma_widget = Scale "Sigma" 0.1 10 1; angle_widget = Scale "Angle (degrees)" (-360) 360 0; text_widget = String "Text to draw" "AaBbCcDdEe"; gamma_widget = Scale "Gamma" 0 10 1; colors_widget = Scale "Colors" 1 10 3; resize_widget = Scale "Resize (percent)" 0 500 100; fuzz_widget = Scale "Fuzz (percent)" 0 100 0; blur_rad_widget = Scale "Radius (0=auto)" 0 100 0; // a colour with no enclosing quotes ... use this if we know there are // some quotes at an outer level print_colour_nq triple = concat ["#", concat (map fmt triple)] { fmt x = reverse (take 2 (reverse (print_base 16 (x + 256)))); } // we need the quotes because # is the comment character in *nix print_colour triple = "\"" ++ print_colour_nq triple ++ "\""; Foreground triple = class Colour "sRGB" triple { _flag = "-fill " ++ print_colour triple; Colour_edit space triple = this.Foreground triple; } foreground_widget = Foreground [0, 0, 0]; GeneralCol triple = class Colour "sRGB" triple { _flag = print_colour_nq triple; Colour_edit space triple = this.GeneralCol triple; } generalcol_widget = GeneralCol [0, 0, 0]; Background triple = class Colour "sRGB" triple { isNone = Toggle "None (transparent black)" false; _flag = "-background " ++ if isNone then "None" else print_colour triple; Colour_edit space triple = this.Background triple; } background_widget = Background [255, 255, 255]; Bordercol triple = class Colour "sRGB" triple { _flag = "-bordercolor " ++ print_colour triple; Colour_edit space triple = this.Bordercol triple; } bordercol_widget = Bordercol [0, 0, 0]; Mattecol triple = class Colour "sRGB" triple { _flag = "-mattecolor " ++ print_colour triple; Colour_edit space triple = this.Mattecol triple; } mattecol_widget = Mattecol [189, 189, 189]; // FIXME: Undercolour, like many others, can have alpha channel. // How does user input this? With a slider? Undercol triple = class Colour "sRGB" triple { isNone = Toggle "None (transparent black)" true; _flag = if isNone then "" else ("-undercolor " ++ print_colour triple); Colour_edit space triple = this.Undercol triple; } undercol_widget = Undercol [0, 0, 0]; changeCol_widget = class { _vislevel = 3; colour = GeneralCol [0, 0, 0]; fuzz = fuzz_widget; nonMatch = Toggle "change non-matching colours" false; } Alpha alpha = class Option_string "Alpha" [ "On", "Off", "Set", "Opaque", "Transparent", "Extract", "Copy", "Shape", "Remove", "Background" ] alpha { _flag = "-alpha " ++ alpha; Option_edit caption labels value = this.Alpha labels?value; } alpha_widget = Alpha "On"; Antialias value = class Toggle "Antialias" value { _flag = "-antialias", value = "+antialias"; Toggle_edit caption value = this.Antialias value; } antialias_widget = Antialias true; Builtin builtin = class Option_string "Builtin" [ // See http://www.imagemagick.org/script/formats.php "rose:", "logo:", "wizard:", "granite:", "netscape:" ] builtin { _flag = builtin; Option_edit caption labels value = this.Builtin labels?value; } builtin_widget = Builtin "rose:"; channels_widget = class { // FIXME? Can we grey-out alpha when we have no alpha channel, // show CMY(K) instead of RGB(K) etc? // Yes, perhaps we can create different widgets for RGB, RGBA, CMY, CMYK, CMYA, CMYKA. ChanR valueR = class Toggle "Red" valueR { _flag = "R", valueR = ""; Toggle_edit caption valueR = this.ChanR valueR; } channelR = ChanR true; ChanG valueG = class Toggle "Green" valueG { _flag = "G", valueG = ""; Toggle_edit caption valueG = this.ChanG valueG; } channelG = ChanG true; ChanB valueB = class Toggle "Blue" valueB { _flag = "B", valueB = ""; Toggle_edit caption valueB = this.ChanB valueB; } channelB = ChanB true; ChanK valueK = class Toggle "Black" valueK { _flag = "K", valueK = ""; Toggle_edit caption valueK = this.ChanK valueK; } channelK = ChanK true; ChanA valueA = class Toggle "Alpha" valueA { _flag = "A", valueA = ""; Toggle_edit caption valueA = this.ChanA valueA; } channelA = ChanA false; ChanSy valueSy = class Toggle "Sync" valueSy { _flag = ",sync", valueSy = ""; Toggle_edit caption valueSy = this.ChanSy valueSy; } channelSy = ChanSy true; _rgbka = concat [channelR._flag, channelG._flag, channelB._flag, channelK._flag, channelA._flag ]; _flag = "", _rgbka == "" || !has_channel = concat [ "-channel ", _rgbka, channelSy._flag ]; } ch_widget = channels_widget; Colorspace colsp = class Option_string "Colorspace" [ "CIELab", "CMY", "CMYK", "Gray", "HCL", "HCLp", "HSB", "HSI", "HSL", "HSV", "HWB", "Lab", "LCH", "LCHab", "LCHuv", "LMS", "Log", "Luv", "OHTA", "Rec601Luma", "Rec601YCbCr", "Rec709Luma", "Rec709YCbCr", "RGB", "scRGB", "sRGB", "Transparent", "XYZ", "YCbCr", "YDbDr", "YCC", "YIQ", "YPbPr", "YUV" ] colsp { _flag = colsp; Option_edit caption labels value = this.Colorspace labels?value; } colorspace_widget = Colorspace "sRGB"; Compose comp = class Option_string "Compose method" [ "Atop", "Blend", "Blur", "Bumpmap", "ChangeMask", "Clear", "ColorBurn", "ColorDodge", "Colorize", "CopyBlack", "CopyBlue", "CopyCyan", "CopyGreen", "Copy", "CopyMagenta", "CopyOpacity", "CopyRed", "CopyYellow", "Darken", "DarkenIntensity", "DivideDst", "DivideSrc", "Dst", "Difference", "Displace", "Dissolve", "Distort", "DstAtop", "DstIn", "DstOut", "DstOver", "Exclusion", "HardLight", "Hue", "In", "Lighten", "LightenIntensity", "LinearBurn", "LinearDodge", "LinearLight", "Luminize", "Mathematics", "MinusDst", "MinusSrc", "Modulate", "ModulusAdd", "ModulusSubtract", "Multiply", "None", "Out", "Overlay", "Over", "PegtopLight", "PinLight", "Plus", "Replace", "Saturate", "Screen", "SoftLight", "Src", "SrcAtop", "SrcIn", "SrcOut", "SrcOver", "VividLight", "Xor" ] comp { _flag = "-compose " ++ comp; Option_edit caption labels value = this.Compose labels?value; } compose_widget = Compose "Over"; // FIXME: Some compose mehods (Displace, Distort, Mathematics) need a string. // FIXME: we could use a class that does both -compose and -intensity, for methods LightenIntensity, DarkenIntensity, CopyOpacity, CopyBlack coordinate_widget = class { _vislevel = 3; x = Expression "X" 0; y = Expression "Y" 0; _flag = concat [print x.expr, ",", print y.expr]; }; Distort distort = class Option_string "Distort" [ "Affine", "AffineProjection", "ScaleRotateTranslate", "SRT", "Perspective", "PerspectiveProjection", "BilinearForward", "BilinearReverse", "Polynomial", "Arc", "Polar", "DePolar", "Barrel", "BarrelInverse", "Shepards", "Resize" ] distort { _flag = distort; Option_edit caption labels value = this.Distort labels?value; } distort_widget = Distort "SRT"; Dither dither = class Option_string "Dither" [ "None", "FloydSteinberg", "Riemersma" ] dither { _flag = "-dither " ++ dither; Option_edit caption labels value = this.Dither labels?value; } dither_widget = Dither "FloydSteinberg"; Evaluate eval = class Option_string "Evaluate operation" [ "Abs", "Add", "AddModulus", "And", "Cos", "Cosine", "Divide", "Exp", "Exponential", "GaussianNoise", "ImpulseNoise", "LaplacianNoise", "LeftShift", "Log", "Max", "Mean", "Median", "Min", "MultiplicativeNoise", "Multiply", "Or", "PoissonNoise", "Pow", "RightShift", "Set", "Sin", "Sine", "Subtract", "Sum", "Threshold", "ThresholdBlack", "ThresholdWhite", "UniformNoise", "Xor" ] eval { _flag = "-evaluate " ++ eval; Option_edit caption labels value = this.Evaluate labels?value; } evaluate_widget = Evaluate "Add"; Filter filt = class Option_string "Filter" [ "default", "Bartlett", "Blackman", "Bohman", "Box", "Catrom", "Cosine", "Cubic", "Gaussian", "Hamming", "Hann", "Hermite", "Jinc", "Kaiser", "Lagrange", "Lanczos", "Lanczos2", "Lanczos2Sharp", "LanczosRadius", "LanczosSharp", "Mitchell", "Parzen", "Point", "Quadratic", "Robidoux", "RobidouxSharp", "Sinc", "SincFast", "Spline", "Triangle", "Welch" ] filt { _flag = if filt == "default" then "" else "-filter " ++ filt; Option_edit caption labels value = this.Filter labels?value; } filter_widget = Filter "default"; Function func = class Option_string "Function" [ "Polynomial", "Sinusoid", "Arcsin", "Arctan" ] func { _flag = func; Option_edit caption labels value = this.Function labels?value; } function_widget = Function "Polynomial"; // "Polynomial (a[n], a[n-1], ... a[1], a[0])", // "Sinusoid (freq, phase, amp, bias)", // "Arcsin (width, centre, range, bias)", // "Arctan (slope, centre, range, bias)" Gravity gravity = class Option_string "Gravity" [ "None", "Center", "East", "Forget", "NorthEast", "North", "NorthWest", "SouthEast", "South", "SouthWest", "West", "Static" ] gravity { _flag = "-gravity " ++ gravity; Option_edit caption labels value = this.Gravity labels?value; } gravity_widget = Gravity "Center"; ImageType imagetype = class Option_string "Image type" [ "Bilevel", "ColorSeparation", "ColorSeparationAlpha", "ColorSeparationMatte", "Grayscale", "GrayscaleAlpha", "GrayscaleMatte", "Optimize", "Palette", "PaletteBilevelAlpha", "PaletteBilevelMatte", "PaletteAlpha", "PaletteMatte", "TrueColorAlpha", "TrueColorMatte", "TrueColor" ] imagetype { _flag = "-type " ++ imagetype; Option_edit caption labels value = this.ImageType labels?value; } imagetype_widget = ImageType "TrueColor"; Intensity intensity = class Option_string "Intensity (gray conversion)" [ "Average", "Brightness", "Lightness", "MS", "Rec601Luma", "Rec601Luminance", "Rec709Luma", "Rec709Luminance", "RMS" ] intensity { _flag = "-intensity " ++ intensity, has_intensity = ""; Option_edit caption labels value = this.Intensity labels?value; } intensity_widget = Intensity "Rec709Luminance"; Interpolate interp = class Option_string "Interpolate" [ "default", "Average", "Average4", "Average9", "Average16", "Background", "Bilinear", "Blend", "Integer", "Mesh", "Nearest", "NearestNeighbor", "Spline" ] interp { _flag = if interp == "default" then "" else "-interpolate " ++ interp; Option_edit caption labels value = this.Interpolate labels?value; } interpolate_widget = Interpolate "default"; Kernel kernel = class Option_string "Kernel" [ "Unity", "Gaussian", "DoG", "LoG", "Blur", "Comet", "Binomial", "Laplacian", "Sobel", "FreiChen", "Roberts", "Prewitt", "Compass", "Kirsch", "Diamond", "Square", "Rectangle", "Disk", "Octagon", "Plus", "Cross", "Ring", "Peaks", "Edges", "Corners", "Diagonals", "LineEnds", "LineJunctions", "Ridges", "ConvexHull", "ThinSe", "Skeleton", "Chebyshev", "Manhattan", "Octagonal", "Euclidean" // FIXME: custom kernel ] kernel { _flag = kernel; Option_edit caption labels value = this.Kernel labels?value; } kernel_widget = Kernel "Unity"; ModColSp msp = class Option_string "modulate colorspace" [ "HCL", "HCLp", "HSB", "HSI", "HSL", "HSV", "HWB", "LCH" ] msp { _flag = "-set option:modulate:colorspace " ++ msp; Option_edit caption labels value = this.ModColSp labels?value; } ModColSp_widget = ModColSp "HSL"; MorphMeth morph = class Option_string "Method" [ "Correlate", "Convolve", "Dilate", "Erode", "Close", "Open", "DilateIntensity", "ErodeIntensity", "CloseIntensity", "OpenIntensity", "Smooth", "EdgeOut", "EdgeIn", "Edge", "TopHat", "BottomHat", "HitAndMiss", "Thinning", "Thicken", "Distance", "IterativeDistance" ] morph { _flag = morph; Option_edit caption labels value = this.MorphMeth labels?value; } morphmeth_widget = MorphMeth "Dilate"; Noise noise = class Option_string "Noise" [ "Gaussian", "Impulse", "Laplacian", "Multiplicative", "Poisson", "Random", "Uniform" ] noise { _flag = "+noise " ++ noise; Option_edit caption labels value = this.Noise labels?value; } noise_widget = Noise "Gaussian"; Pattern pattern = class Option_string "Noise" [ // See http://www.imagemagick.org/script/formats.php "bricks", "checkerboard", "circles", "crosshatch", "crosshatch30", "crosshatch45", "gray0", "gray5", "gray10", "gray15", "gray20", "gray25", "gray30", "gray35", "gray40", "gray45", "gray50", "gray55", "gray60", "gray65", "gray70", "gray75", "gray80", "gray85", "gray90", "gray95", "gray100", "hexagons", "horizontal", "horizontal2", "horizontal3", "horizontalsaw", "hs_bdiagonal", "hs_cross", "hs_diagcross", "hs_fdiagonal", "hs_horizontal", "hs_vertical", "left30", "left45", "leftshingle", "octagons", "right30", "right45", "rightshingle", "smallfishscales", "vertical", "vertical2", "vertical3", "verticalbricks", "verticalleftshingle", "verticalrightshingle", "verticalsaw" ] pattern { _flag = "pattern:" ++ pattern; Option_edit caption labels value = this.Pattern labels?value; } pattern_widget = Pattern "bricks"; ResizeType resizet = class Option_string "Resize type" [ "resize", "scale", "sample", "adaptive-resize" ] resizet { _flag = resizet; Option_edit caption labels value = this.ResizeType labels?value; } ResizeType_widget = ResizeType "resize"; Size_widget = class { _vislevel = 3; width = Expression "Width (pixels)" 64; height = Expression "Height (pixels)" 64; _flag = "-size " ++ print width.expr ++ "x" ++ print height.expr; }; StatType statt = class Option_string "Statistic type" [ "Gradient", "Maximum", "Mean", "Median", "Minimum", "Mode", "Nonpeak", "StandardDeviation" ] statt { _flag = statt; Option_edit caption labels value = this.StatType labels?value; } StatType_widget = StatType "Mean"; VirtualPixel vp = class Option_string "Virtual pixel" [ "Background", "Black", "CheckerTile", "Dither", "Edge", "Gray", "HorizontalTile", "HorizontalTileEdge", "Mirror", "None", "Random", "Tile", "Transparent", "VerticalTile", "VerticalTileEdge", "White" ] vp { _flag = "-virtual-pixel " ++ vp; _isBackground = (vp == "Background"); Option_edit caption labels value = this.VirtualPixel labels?value; } VirtualPixel_widget = VirtualPixel "Edge"; VirtualPixelBack_widget = class { virtpix = Magick.VirtualPixel_widget; background = Magick.background_widget; _flag = (if virtpix._isBackground then (background._flag ++ " ") else "") ++ virtpix._flag; } Geometry_widget = class { _vislevel = 3; x = Expression "X" 0; y = Expression "Y" 0; hoffset = Expression "Horizontal offset" 0; voffset = Expression "Vertical offset" 0; _flag = concat [print x.expr, "x", print y.expr, format hoffset, format voffset] { // print an offset ... we want '+' in front of +ve strings format offset = concat ["+", print offset.expr], offset.expr >= 0 = print offset.expr; } }; AnnotGeometry_widget = class { _vislevel = 3; shearX = Expression "shear X (degrees)" 0; shearY = Expression "shear Y (degrees)" 0; hoffset = Expression "Horizontal offset" 0; voffset = Expression "Vertical offset" 0; _flag = concat [print shearX.expr, "x", print shearY.expr, format hoffset, format voffset] { // print an offset ... we want '+' in front of +ve strings format offset = concat ["+", print offset.expr], offset.expr >= 0 = print offset.expr; } }; OffsetGeometry_widget = class { _vislevel = 3; hoffset = Expression "Horizontal offset" 0; voffset = Expression "Vertical offset" 0; _flag = concat [format hoffset, format voffset] { // print an offset ... we want '+' in front of +ve strings format offset = concat ["+", print offset.expr], offset.expr >= 0 = print offset.expr; } }; WhxyGeometry_widget = class { _vislevel = 3; x = Expression "Width" 0; y = Expression "Height" 0; hoffset = Expression "Horizontal offset" 0; voffset = Expression "Vertical offset" 0; _flag = concat [print x.expr, "x", print y.expr, format hoffset, format voffset] { // print an offset ... we want '+' in front of +ve strings format offset = concat ["+", print offset.expr], offset.expr >= 0 = print offset.expr; } }; FrameGeometry_widget = class { _vislevel = 3; x = Expression "Width" 0; y = Expression "Height" 0; outbev = Expression "Outer bevel thickness" 0; inbev = Expression "Inner bevel thickness" 0; _flag = concat [print x.expr, "x", print y.expr, format outbev, format inbev] { // print an offset ... we want '+' in front of +ve strings format offset = concat ["+", print offset.expr], offset.expr >= 0 = print offset.expr; } }; Font_widget = class { _vislevel = 3; family = Option_string "Family" [ "Arial", "ArialBlack", "AvantGarde", "BitstreamCharter", "Bookman", "CenturySchoolbook", "ComicSansMS", "Courier", "CourierNew", "DejaVuSans", "DejaVuSansMono", "DejaVuSerif", "Dingbats", "FreeMono", "FreeSans", "FreeSerif", "Garuda", "Georgia", "Helvetica", "HelveticaNarrow", "Impact", "LiberationMono", "LiberationSans", "LiberationSerif", "NewCenturySchlbk", "Palatino", "Purisa", "Symbol", "Times", "TimesNewRoman", "Ubuntu", "Verdana", "Webdings" ] "Arial"; style = Option_string "Style" [ "Any", "Italic", "Normal", "Oblique" ] "Normal"; weight = Scale "Weight" 1 800 400; size = Scale "Point size" 1 100 12; stretch = Option_string "Stretch" [ "Any", "Condensed", "Expanded", "ExtraCondensed", "ExtraExpanded", "Normal", "SemiCondensed", "SemiExpanded", "UltraCondensed", "UltraExpanded" ] "Normal"; _flag = join_sep " " [ "-family", family.item, "-weight", print weight.value, "-pointsize", print size.value, "-style", style.item, "-stretch", stretch.item]; } } nip2-8.7.0/share/nip2/compat/8.2/_Object.def0000644000175000017500000002600513224651032015111 00000000000000/* Lots of little arg checks. Global for convenience. */ check_any = [(const true), _ "any"]; check_bool = [is_bool, _ "boolean"]; check_real = [is_real, _ "real"]; check_ureal = [is_ureal, _ "unsigned real"]; check_preal = [is_preal, _ "positive real"]; check_list = [is_list, _ "list"]; check_real_list = [is_real_list, _ "list of real"]; check_string = [is_string, _ "string"]; check_string_list = [is_string_list, _ "list of string"]; check_int = [is_int, _ "integer"]; check_uint = [is_uint, _ "unsigned integer"]; check_pint = [is_pint, _ "positive integer"]; check_matrix = [is_matrix, _ "rectangular array of real"]; check_matrix_display = [Matrix_display.is_display, _ "0|1|2|3"]; check_image = [is_image, _ "image"]; check_xy_list = [is_xy_list, _ "list of form [[1, 2], [3, 4], [5, 6], ...]"]; check_instance name = [is_instanceof name, name]; check_Image = check_instance "Image"; check_Matrix = [is_Matrix, _ "Matrix"]; check_colour_space = [is_colour_space, join_sep "|" Image_type.colour_spaces.names]; check_rectangular = [is_rectangular, _ "rectangular [[*]]"]; check_Guide = [is_Guide, _ "HGuide|VGuide"]; check_Colour = check_instance (_ "Colour"); check_Mark = check_instance (_ "Mark"); /* Check a set of args to a class. Two members to look at: _check_args and * _check_all. * * - each line in _check_args is [arg, "arg name", [test_fn, "arg type"]] * same number of lines as there are args * * stuff like "arg 2 must be real" * * - each line in _check_all is [test, "description"] * any number of lines * * stuff like "to must be greater than from" * * generate an error dialog with a helpful message on failure. * * Have as a separate function to try to keep the size of _Object down. */ check_args x = error message, badargs != [] || badalls != [] = x { argcheck = x._check_args; allcheck = x._check_all; // indent string indent = " "; // test for a condition in a check line fails test_fail x = ! x?0; // set of failed argcheck indexes badargs = map (extract 1) (filter test_fail (zip2 (map testarg argcheck) [0..])) { testarg x = x?2?0 x?0; } // set of failed allcheck indexes badalls = map (extract 1) (filter test_fail (zip2 (map hd allcheck) [0..])); // the error message message = _ "bad properties for " ++ "\"" ++ x.name ++ "\"\n" ++ argmsg ++ allmsg ++ "\n" ++ _ "where" ++ "\n" ++ arg_types ++ extra; // make the failed argcheck messages ... eg. ""value" should be // real, you passed " etc. argmsg = concat (map fmt badargs) { fmt n = indent ++ "\"" ++ argcheck?n?1 ++ "\"" ++ _ " should be of type " ++ argcheck?n?2?1 ++ ", " ++ _ "you passed" ++ ":\n" ++ indent ++ indent ++ print argcheck?n?0 ++ "\n"; } // make the failed allcheck messages ... eg "condition failed: // x < y" ... don't make a message if any typechecks have // failed, as we'll probably error horribly allmsg = [], badargs != [] = concat (map fmt badalls) ++ _ "you passed" ++ "\n" ++ concat (map fmt_arg argcheck) { fmt n = _ "condition failed" ++ ": " ++ allcheck?n?1 ++ "\n"; fmt_arg l = indent ++ l?1 ++ " = " ++ print l?0 ++ "\n"; } // make arg type notes arg_types = join_sep "\n" (map fmt argcheck) { fmt l = indent ++ l?1 ++ " is of type " ++ l?2?1; } // extra bit at the bottom, if we have any conditions extra = [], allcheck == [] = "\n" ++ _ "and" ++ "\n" ++ all_desc; // make a list of all the allcheck descriptions, with a few // spaces in front all_desc_list = map (join indent @ extract 1) allcheck; // join em up to make a set of condition notes all_desc = join_sep "\n" all_desc_list; } /* Operator overloading stuff. */ Operator_type = class { ARITHMETIC = 1; // eg. add RELATIONAL = 2; // eg. less COMPOUND = 3; // eg. max/mean/etc. COMPOUND_REWRAP = 4; // eg. transpose } Operator op_name fn type symmetric = class { } /* Form the converse of an Operator. */ oo_converse op = Operator (converse_name op.op_name) (converse op.fn) op.type op.symmetric { converse_name x = init x, last x == last "'" = x ++ "'"; } /* Given an operator name, look up the definition. */ oo_binary_lookup op_name = matches?0, matches != [] = error (_ "unknown binary operator" ++ ": " ++ print op_name) { operator_table = [ Operator "add" add Operator_type.ARITHMETIC true, Operator "subtract" subtract Operator_type.ARITHMETIC false, Operator "remainder" remainder Operator_type.ARITHMETIC false, Operator "power" power Operator_type.ARITHMETIC false, Operator "subscript" subscript Operator_type.ARITHMETIC false, Operator "left_shift" left_shift Operator_type.ARITHMETIC false, Operator "right_shift" right_shift Operator_type.ARITHMETIC false, Operator "divide" divide Operator_type.ARITHMETIC false, Operator "join" join Operator_type.ARITHMETIC false, Operator "multiply" multiply Operator_type.ARITHMETIC true, Operator "logical_and" logical_and Operator_type.ARITHMETIC true, Operator "logical_or" logical_or Operator_type.ARITHMETIC true, Operator "bitwise_and" bitwise_and Operator_type.ARITHMETIC true, Operator "bitwise_or" bitwise_or Operator_type.ARITHMETIC true, Operator "eor" eor Operator_type.ARITHMETIC true, Operator "comma" comma Operator_type.ARITHMETIC false, Operator "if_then_else" if_then_else Operator_type.ARITHMETIC false, Operator "equal" equal Operator_type.RELATIONAL true, Operator "not_equal" not_equal Operator_type.RELATIONAL true, Operator "less" less Operator_type.RELATIONAL false, Operator "less_equal" less_equal Operator_type.RELATIONAL false ]; matches = filter test_name operator_table; test_name x = x.op_name == op_name; } /* Given an operator name, look up a function that implements that * operator. */ oo_unary_lookup op_name = matches?0, matches != [] = error (_ "unknown unary operator" ++ ": " ++ print op_name) { operator_table = [ /* Operators. */ Operator "cast_signed_char" cast_signed_char Operator_type.ARITHMETIC false, Operator "cast_unsigned_char" cast_unsigned_char Operator_type.ARITHMETIC false, Operator "cast_signed_short" cast_signed_short Operator_type.ARITHMETIC false, Operator "cast_unsigned_short" cast_unsigned_short Operator_type.ARITHMETIC false, Operator "cast_signed_int" cast_signed_int Operator_type.ARITHMETIC false, Operator "cast_unsigned_int" cast_unsigned_int Operator_type.ARITHMETIC false, Operator "cast_float" cast_float Operator_type.ARITHMETIC false, Operator "cast_double" cast_double Operator_type.ARITHMETIC false, Operator "cast_complex" cast_complex Operator_type.ARITHMETIC false, Operator "cast_double_complex" cast_double_complex Operator_type.ARITHMETIC false, Operator "unary_minus" unary_minus Operator_type.ARITHMETIC false, Operator "negate" negate Operator_type.RELATIONAL false, Operator "complement" complement Operator_type.ARITHMETIC false, Operator "unary_plus" unary_plus Operator_type.ARITHMETIC false, /* Built in projections. */ Operator "re" re Operator_type.ARITHMETIC false, Operator "im" im Operator_type.ARITHMETIC false, Operator "hd" hd Operator_type.ARITHMETIC false, Operator "tl" tl Operator_type.ARITHMETIC false, /* Maths builtins. */ Operator "sin" sin Operator_type.ARITHMETIC false, Operator "cos" cos Operator_type.ARITHMETIC false, Operator "tan" tan Operator_type.ARITHMETIC false, Operator "asin" asin Operator_type.ARITHMETIC false, Operator "acos" acos Operator_type.ARITHMETIC false, Operator "atan" atan Operator_type.ARITHMETIC false, Operator "log" log Operator_type.ARITHMETIC false, Operator "log10" log10 Operator_type.ARITHMETIC false, Operator "exp" exp Operator_type.ARITHMETIC false, Operator "exp10" exp10 Operator_type.ARITHMETIC false, Operator "ceil" ceil Operator_type.ARITHMETIC false, Operator "floor" floor Operator_type.ARITHMETIC false ]; matches = filter test_name operator_table; test_name x = x.op_name == op_name; } /* Find the matching methods in a method table. */ oo_method_lookup table = map (extract 0) (filter (extract 1) table); /* A binary op: a is a class, b may be a class ... eg. "add" a b two obvious ways to find a method: - a.oo_binary_search "add" (+) b - b.oo_binary_search "add'" (converse (+)) a, is_class b if these fail but op is a symmetric operator (eg. a + b == b + a), we can also try reversing the args - a.oo_binary_search "add'" (converse (+)) b - b.oo_binary_search "add" (+) a, is_class b if those fail as well, but this is ==, do pointer equals as a fallback */ oo_binary_function op a b = matches1?0, matches1 != [] = matches2?0, is_class b && matches2 != [] = matches3?0, op.symmetric && matches3 != [] = matches4?0, op.symmetric && is_class b && matches4 != [] = pointer_equal a b, op.op_name == "equal" || op.op_name == "equal'" = not_pointer_equal a b, op.op_name == "not_equal" || op.op_name == "not_equal'" = error (_ "No method found for binary operator." ++ "\n" ++ _ "left" ++ " = " ++ print a ++ "\n" ++ _ "operator" ++ " = " ++ op.op_name ++ "\n" ++ _ "right" ++ " = " ++ print b) { matches1 = oo_method_lookup (a.oo_binary_table op b); matches2 = oo_method_lookup (b.oo_binary_table (oo_converse op) a); matches3 = oo_method_lookup (a.oo_binary_table (oo_converse op) b); matches4 = oo_method_lookup (b.oo_binary_table op a); } /* A binary op: a is not a class, b is a class ... eg. "subtract" a b only one way to find a method: - b.oo_binary_search "subtract'" (converse (-)) a if this fails but op is a symmetric operator (eg. a + b == b + a), we can try reversing the args - b.oo_binary_search "add" (+) a, is_class b if that fails as well, but this is ==, do pointer equals as a fallback */ oo_binary'_function op a b = matches1?0, matches1 != [] = matches2?0, op.symmetric && matches2 != [] = pointer_equal a b, op.op_name == "equal" || op.op_name == "equal'" = not_pointer_equal a b, op.op_name == "not_equal" || op.op_name == "not_equal'" = error (_ "No method found for binary operator." ++ "\n" ++ _ "left" ++ " = " ++ print a ++ "\n" ++ _ "operator" ++ " = " ++ op.op_name ++ "\n" ++ _ "right" ++ " = " ++ print b) { matches1 = oo_method_lookup (b.oo_binary_table (oo_converse op) a); matches2 = oo_method_lookup (b.oo_binary_table op a); } oo_unary_function op x = matches?0, matches != [] = error (_ "No method found for unary operator." ++ "\n" ++ _ "operator" ++ " = " ++ op.op_name ++ "\n" ++ _ "argument" ++ " = " ++ print x) { matches = oo_method_lookup (x.oo_unary_table op); } /* Base class for nip's built-in classes ... base check function, base * operator overload functions. */ _Object = class { check = check_args this; // these should always be defined _check_args = []; _check_all = []; /* Operator overloading stuff. */ oo_binary op x = oo_binary_function (oo_binary_lookup op) this x; oo_binary' op x = oo_binary'_function (oo_binary_lookup op) x this; oo_unary op = oo_unary_function (oo_unary_lookup op) this; oo_binary_table op x = []; oo_unary_table op = []; } nip2-8.7.0/share/nip2/compat/8.2/Magick.def0000644000175000017500000014112713224651032014742 00000000000000/* ImageMagick operations edited by Alan Gibson (aka "snibgo"; snibgo at earthling dot net). 1-Apr-2014 Minor corrections to Geometry_widget and Alpha. Added loads of widgets and Menuactions. Not fully tested. 5-Apr-2014 Many more menu actions. Reorganised Magick menu. 10-Apr-2014 Many more menu actions. 11-Apr-2014 jcupitt Split to separate Magick.def 13-Apr-2014 snibgo Put "new image" items into sub-menu. New class VirtualPixlBack. 17-Apr-2014 snibgo Many small changes. A few new menu options. Created sub-menu for multi-input operations. 3-May-2014 jcupitt Put quotes around ( in shadow to help unix Last update: 17-Apr-2014. For details of ImageMagick operations, see http://www.imagemagick.org/script/command-line-options.php etc. */ // We don't need Noop. /*=== Magick_noop_item = class Menuaction "_Noop" "no operation" { action x = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "\"%s\"" ]; _result = Magick.system command x; } } ===*/ Magick_testPar_item = class Menuaction "_TestPar" "no operation" { action x = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "( +clone ) +append ", "\"%s\"" ]; _result = Magick.system command x; } } /* Removed Read_item and Write_item, much better to use nip2 load/save image. * Plus they can load all libMagick formats anyway. */ // Put "new image" items into sub-menu Magick_NewImageMenu_item = class Menupullright "_New image" "make a new image" { Magick_newcanvas_item = class Menuaction "_Solid colour" "make image of solid colour" { action = class _result { _vislevel = 3; size = Magick.Size_widget; colour = Magick.generalcol_widget; command = Magick.command [ size._flag, "\"canvas:" ++ colour._flag ++ "\"", "\"%s\"" ]; _result = Magick.system0 command; } } Magick_builtin_item = class Menuaction "_Built-in image" "create a built-in image" { action = class _result { _vislevel = 3; builtin = Magick.builtin_widget; command = Magick.command [ builtin._flag, "\"%s\"" ]; _result = Magick.system0 command; } } Magick_gradient_item = class Menuaction "_Gradient" "make a linear gradient between two colours" { action = class _result { _vislevel = 3; size = Magick.Size_widget; topColour = Magick.generalcol_widget; bottomColour = Magick.generalcol_widget; command = Magick.command [ size._flag, concat ["\"gradient:", topColour._flag, "-", bottomColour._flag, "\""], "\"%s\"" ]; _result = Magick.system0 command; } } Magick_hald_item = class Menuaction "_Hald-clut image" "create an identity hald-clut image" { action = class _result { _vislevel = 3; order = Expression "order" 8; command = Magick.command [ "hald:" ++ print order.expr, "\"%s\"" ]; _result = Magick.system0 command; } } Magick_pattern_item = class Menuaction "_Pattern" "create pattern" { action = class _result { _vislevel = 3; size = Magick.Size_widget; pattern = Magick.pattern_widget; command = Magick.command [ size._flag, pattern._flag, "\"%s\"" ]; _result = Magick.system0 command; } } Magick_plasma_item = class Menuaction "_Plasma image" "create plasma image" { action = class _result { _vislevel = 3; size = Magick.Size_widget; // FIXME? ColourA-ColourB. // FIXME? Allow plasma:fractal? command = Magick.command [ size._flag, "plasma:", "\"%s\"" ]; _result = Magick.system0 command; } } Magick_radialgradient_item = class Menuaction "_Radial gradient" "make a radial gradient between two colours" { action = class _result { _vislevel = 3; size = Magick.Size_widget; innerColour = Magick.generalcol_widget; outerColour = Magick.generalcol_widget; command = Magick.command [ size._flag, concat ["\"radial-gradient:", innerColour._flag, "-", outerColour._flag, "\""], "\"%s\"" ]; _result = Magick.system0 command; } } } // end Magick_NewImageMenu_item Magick_MultiMenu_item = class Menupullright "_Multiple inputs" "make an image from multiple images" { Magick_composite_item = class Menuaction "_Composite" "composite two images (without mask)" { action x y = class _result { _vislevel = 3; method = Magick.compose_widget; offsets = Magick.OffsetGeometry_widget; gravity = Magick.gravity_widget; command = Magick.command [ "\"%s\"", "\"%s\"", "-geometry", offsets._flag, gravity._flag, method._flag, "-composite", "\"%s\"" ]; _result = Magick.system2 command x y; } } Magick_compositeMask_item = class Menuaction "_Composite masked" "composite two images (with mask)" { action x y z = class _result { _vislevel = 3; method = Magick.compose_widget; offsets = Magick.OffsetGeometry_widget; gravity = Magick.gravity_widget; command = Magick.command [ "\"%s\"", "\"%s\"", "\"%s\"", "-geometry", offsets._flag, gravity._flag, method._flag, "-composite", "\"%s\"" ]; _result = Magick.system3 command x y z; } } // FIXME: other operations like remap that take another image as arguments are: // mask (pointless?), texture, tile (pointless?) // FIXME: operations that take a filename that isn't an image: // cdl, profile Magick_clut_item = class Menuaction "_Clut" "replace values using second image as colour look-up table" { action x y = class _result { _vislevel = 3; // FIXME: uses -intensity "when mapping greyscale CLUT image to alpha channel if set by -channels" command = Magick.command [ "\"%s\"", "\"%s\"", "-clut", "\"%s\"" ]; _result = Magick.system2 command x y; } } Magick_haldclut_item = class Menuaction "_Hald clut" "replace values using second image as Hald colour look-up table" { action x y = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "\"%s\"", "-hald-clut", "\"%s\"" ]; _result = Magick.system2 command x y; } } // Encipher and decipher: key files can be text or image files. Magick_encipher_item = class Menuaction "_Encipher/Decipher" "encipher or decipher an image image" { action x = class _result { _vislevel = 3; pathname = Pathname "Read key file" ""; isDecipher = Toggle "Decipher" false; command = Magick.command [ "\"%s\"", if pathname.value == "" then "" else ( ( if isDecipher then "-decipher " else "-encipher ") ++ ( "\"" ++ pathname.value ++ "\"" ) ), "\"%s\"" ]; _result = Magick.system command x; } } Magick_profile_item = class Menuaction "_Profile" "assigns/applies an ICC profile" { action x = class _result { _vislevel = 3; pathname1 = Pathname "Read profile file" ""; pathname2 = Pathname "Read profile file" ""; command = Magick.command [ "\"%s\"", if pathname1.value == "" then "" else ( "-profile " ++ "\"" ++ pathname1.value ++ "\""), if pathname2.value == "" then "" else ( "-profile " ++ "\"" ++ pathname2.value ++ "\""), "\"%s\"" ]; _result = Magick.system command x; } } Magick_remap_item = class Menuaction "_Remap" "reduce colours to those in another image" { action x y = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "-remap", "\"%s\"", "\"%s\"" ]; _result = Magick.system2 command x y; } } } // end Magick_MultiMenu_item Magick_image_type_item = class Menuaction "_Image Type" "change image type" { action x = class _result { _vislevel = 3; imagetype = Magick.imagetype_widget; command = Magick.command [ "\"%s\"", imagetype._flag, "\"%s\"" ]; _result = Magick.system command x; } } sep2 = Menuseparator; Magick_alpha_item = class Menuaction "_Alpha" "add/remove alpha channel" { action x = class _result { _vislevel = 3; alpha = Magick.alpha_widget; command = Magick.command [ "\"%s\"", alpha._flag, "\"%s\"" ]; _result = Magick.system command x; } } Magick_annotate_item = class Menuaction "_Annotate" "add text annotation" { action x = class _result { _vislevel = 3; text = Magick.text_widget; font = Magick.Font_widget; geometry = Magick.AnnotGeometry_widget; gravity = Magick.gravity_widget; foreground = Magick.foreground_widget; undercol = Magick.undercol_widget; antialias = Magick.antialias_widget; command = Magick.command [ "\"%s\"", font._flag, antialias._flag, gravity._flag, foreground._flag, undercol._flag, "-annotate", geometry._flag, "\"" ++ text.value ++ "\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_autoGamma_item = class Menuaction "_AutoGamma" "automatic gamma" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; command = Magick.command [ "\"%s\"", channels._flag, "-auto-gamma", "\"%s\"" ]; _result = Magick.system command x; } } Magick_autoLevel_item = class Menuaction "_AutoLevel" "automatic level" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; command = Magick.command [ "\"%s\"", channels._flag, "-auto-level", "\"%s\"" ]; _result = Magick.system command x; } } Magick_blurSharpMenu_item = class Menupullright "_Blur/Sharpen" "blur and sharpen" { Magick_adaptive_blur_item = class Menuaction "_Adaptive Blur" "blur less near edges" { action x = class _result { _vislevel = 3; intensity = Magick.intensity_widget; radius = Magick.blur_rad_widget; sigma = Magick.sigma_widget; channels = Magick.channels_widget; // note: adaptive-blur doesn't regard VP. command = Magick.command [ "\"%s\"", intensity._flag, channels._flag, "-adaptive-blur", print radius.value ++ "x" ++ print sigma.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_blur_item = class Menuaction "_Blur" "blur" { action x = class _result { _vislevel = 3; radius = Magick.blur_rad_widget; sigma = Magick.sigma_widget; channels = Magick.channels_widget; virtpixback = Magick.VirtualPixelBack_widget; command = Magick.command [ "\"%s\"", virtpixback._flag, channels._flag, "-blur", print radius.value ++ "x" ++ print sigma.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_gaussianBlur_item = class Menuaction "_Gaussian Blur" "blur with a Gaussian operator" { action x = class _result { _vislevel = 3; radius = Magick.blur_rad_widget; sigma = Magick.sigma_widget; channels = Magick.channels_widget; virtpixback = Magick.VirtualPixelBack_widget; command = Magick.command [ "\"%s\"", virtpixback._flag, channels._flag, "-gaussian-blur", print radius.value ++ "x" ++ print sigma.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_motionBlur_item = class Menuaction "_Motion Blur" "simulate motion blur" { action x = class _result { _vislevel = 3; radius = Magick.blur_rad_widget; sigma = Magick.sigma_widget; angle = Scale "angle" (-360) 360 0; channels = Magick.ch_widget; virtpixback = Magick.VirtualPixelBack_widget; command = Magick.command [ "\"%s\"", virtpixback._flag, channels._flag, "-motion-blur", print radius.value ++ "x" ++ print sigma.value ++ "+" ++ print angle.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_rotationalBlur_item = class Menuaction "_RotationalBlur" "blur around the centre" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; virtpixback = Magick.VirtualPixelBack_widget; angle = Scale "angle (degrees)" (-360) 360 20; command = Magick.command [ "\"%s\"", virtpixback._flag, channels._flag, "-radial-blur", print angle.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_selectiveBlur_item = class Menuaction "_Selective Blur" "blur where contrast is less than or equal to threshold" { action x = class _result { _vislevel = 3; intensity = Magick.intensity_widget; radius = Magick.blur_rad_widget; sigma = Magick.sigma_widget; threshold = Scale "Threshold (percent)" 0 100 50; channels = Magick.channels_widget; virtpixback = Magick.VirtualPixelBack_widget; command = Magick.command [ "\"%s\"", intensity._flag, virtpixback._flag, channels._flag, "-selective-blur", print radius.value ++ "x" ++ print sigma.value ++ "+" ++ print threshold.value ++ "%%", "\"%s\"" ]; _result = Magick.system command x; } } sep1 = Menuseparator; Magick_adaptive_sharpen_item = class Menuaction "_Adaptive Sharpen" "sharpen more near edges" { action x = class _result { _vislevel = 3; intensity = Magick.intensity_widget; radius = Magick.blur_rad_widget; sigma = Magick.sigma_widget; command = Magick.command [ "\"%s\"", intensity._flag, "-adaptive-sharpen", print radius.value ++ "x" ++ print sigma.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_sharpen_item = class Menuaction "_Sharpen" "sharpen" { action x = class _result { _vislevel = 3; radius = Magick.blur_rad_widget; sigma = Magick.sigma_widget; channels = Magick.channels_widget; virtpixback = Magick.VirtualPixelBack_widget; command = Magick.command [ "\"%s\"", virtpixback._flag, channels._flag, "-sharpen", print radius.value ++ "x" ++ print sigma.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_unsharpen_item = class Menuaction "_Unsharp" "sharpen with unsharp mask" { action x = class _result { _vislevel = 3; radius = Magick.blur_rad_widget; sigma = Magick.sigma_widget; channels = Magick.channels_widget; gain = Scale "Gain" (-10) 10 1; threshold = Scale "Threshold" 0 1 0.05; virtpixback = Magick.VirtualPixelBack_widget; command = Magick.command [ "\"%s\"", virtpixback._flag, channels._flag, "-unsharp", print radius.value ++ "x" ++ print sigma.value ++ "+" ++ print gain.value ++ "+" ++ print threshold.value, "\"%s\"" ]; _result = Magick.system command x; } } } // end BlurSharpMenu_item Magick_border_item = class Menuaction "_Border" "add border of given colour" { action x = class _result { _vislevel = 3; compose = Magick.compose_widget; width = Expression "Width" 3; bordercol = Magick.bordercol_widget; command = Magick.command [ "\"%s\"", compose._flag, bordercol._flag, "-border", print width.expr, "\"%s\"" ]; _result = Magick.system command x; } } Magick_brightCont_item = class Menuaction "_Brightness-contrast" "adjust the brightness and/or contrast" { action x = class _result { _vislevel = 3; bri = Scale "brightness" (-100) 100 0; con = Scale "contrast" (-100) 100 0; channels = Magick.channels_widget; command = Magick.command [ "\"%s\"", channels._flag, "-brightness-contrast", print bri.value ++ "x" ++ print con.value, "\"%s\"" ]; _result = Magick.system command x; } } // Note: canny requires ImageMagick 6.8.9-0 or later. Magick_canny_item = class Menuaction "_Canny" "detect a wide range of edges" { action x = class _result { _vislevel = 3; radius = Magick.blur_rad_widget; sigma = Magick.sigma_widget; lowPc = Scale "lower percent" 0 100 10; highPc = Scale "lower percent" 0 100 10; command = Magick.command [ "\"%s\"", "-canny", concat ["\"", print radius.value ++ "x" ++ print sigma.value ++ "+" ++ print lowPc.value ++ "%%+" ++ print highPc.value ++ "%%" ++ "\"" ], "\"%s\"" ]; _result = Magick.system command x; } } Magick_charcoal_item = class Menuaction "_Charcoal" "simulate a charcoal drawing" { action x = class _result { _vislevel = 3; intensity = Magick.intensity_widget; factor = Scale "factor" 0 50 1; command = Magick.command [ "\"%s\"", intensity._flag, "-charcoal", print factor.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_chop_item = class Menuaction "_Chop" "remove pixels from the interior" { action x = class _result { _vislevel = 3; gravity = Magick.gravity_widget; geometry = Magick.WhxyGeometry_widget; command = Magick.command [ "\"%s\"", gravity._flag, "-chop", geometry._flag, "\"%s\"" ]; _result = Magick.system command x; } } Magick_colorize_item = class Menuaction "_Colorize" "colorize by given amount" { action x = class _result { _vislevel = 3; foreground = Magick.foreground_widget; val = Scale "value" 0 100 100; command = Magick.command [ "\"%s\"", foreground._flag, "-colorize", print val.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_colors_item = class Menuaction "_Colors" "reduce number of colors" { action x = class _result { _vislevel = 3; treedepth = Expression "Treedepth" 8; dither = Magick.dither_widget; quantize = Magick.colorspace_widget; colors = Expression "Colours" 3; command = Magick.command [ "\"%s\"", "-quantize", quantize._flag, "-treedepth", print treedepth.expr, dither._flag, "-colors", print colors.expr, "\"%s\"" ]; _result = Magick.system command x; } } // FIXME: color-matrix? Magick_colorspace_item = class Menuaction "_Colourspace" "convert to arbitrary colourspace" { action x = class _result { _vislevel = 3; colsp = Magick.colorspace_widget; command = Magick.command [ "\"%s\"", "-colorspace", colsp._flag, "\"%s\"" ]; _result = Magick.system command x; } } Magick_colorspaceGray_item = class Menuaction "_Colourspace gray" "convert to gray using given intensity method" { action x = class _result { _vislevel = 3; intensity = Magick.intensity_widget; command = Magick.command [ "\"%s\"", intensity._flag, "-colorspace gray", "\"%s\"" ]; _result = Magick.system command x; } } Magick_contrast_item = class Menuaction "_Contrast" "increase or reduce the contrast" { action x = class _result { _vislevel = 3; isReduce = Toggle "reduce contrast" false; command = Magick.command [ "\"%s\"", (if isReduce then "+" else "-") ++ "contrast", "\"%s\"" ]; _result = Magick.system command x; } } Magick_contrastStretch_item = class Menuaction "_Contrast stretch" "stretches tones, making some black/white" { action x = class _result { _vislevel = 3; intensity = Magick.intensity_widget; channels = Magick.channels_widget; blk = Scale "percent to make black" 0 100 0; wht = Scale "percent to make white" 0 100 0; command = Magick.command [ "\"%s\"", intensity._flag, channels._flag, "-contrast-stretch", "\"" ++ print blk.value ++ "x" ++ print wht.value ++ "%%\"", "\"%s\"" ]; _result = Magick.system command x; } } // FIXME: convolve (bias, kernel) Magick_crop_item = class Menuaction "_Crop" "cut out a rectangular region" { action x = class _result { _vislevel = 3; gravity = Magick.gravity_widget; geometry = Magick.WhxyGeometry_widget; command = Magick.command [ "\"%s\"", gravity._flag, "-crop", geometry._flag, "+repage", "\"%s\"" ]; _result = Magick.system command x; } } Magick_deskew_item = class Menuaction "_Deskew" "straighten the image" { action x = class _result { _vislevel = 3; threshold = Scale "Threshold (percent)" 0 100 80; // FIXME: toggle auto-crop? command = Magick.command [ "\"%s\"", "-deskew", "\"" ++ print threshold.value ++ "%%\"", "+repage", "\"%s\"" ]; _result = Magick.system command x; } } Magick_despeckle_item = class Menuaction "_Despeckle" "reduce the speckles" { action x = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "-despeckle", "\"%s\"" ]; _result = Magick.system command x; } } Magick_distort_item = class Menuaction "_Distort" "distort using a method and arguments" { action x = class _result { _vislevel = 3; virtpixback = Magick.VirtualPixelBack_widget; distort = Magick.distort_widget; args = String "Arguments" "1,0"; isPlus = Toggle "Extend to show entire image" false; command = Magick.command [ "\"%s\"", virtpixback._flag, (if isPlus then "+" else "-") ++ "distort", distort._flag, args.value, "+repage", "\"%s\"" ]; _result = Magick.system command x; } } Magick_draw_item = class Menuaction "_Draw" "annotate with one or more graphic primitives" { action x = class _result { _vislevel = 3; foreground = Magick.foreground_widget; args = String "Arguments" "line 0,0 9,9 rectangle 10,10 20,20"; command = Magick.command [ "\"%s\"", foreground._flag, "-draw", concat ["\"", args.value, "\""], "\"%s\"" ]; _result = Magick.system command x; } } Magick_edge_item = class Menuaction "_Edge" "detect edges" { action x = class _result { _vislevel = 3; rad = Expression "Radius" 3; command = Magick.command [ "\"%s\"", "-edge", print rad.expr, "\"%s\"" ]; _result = Magick.system command x; } } Magick_emboss_item = class Menuaction "_Emboss" "emboss" { action x = class _result { _vislevel = 3; rad = Expression "Radius" 3; command = Magick.command [ "\"%s\"", "-emboss", print rad.expr, "\"%s\"" ]; _result = Magick.system command x; } } Magick_enhance_item = class Menuaction "_Enhance" "enhance a noisy image" { action x = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "-enhance", "\"%s\"" ]; _result = Magick.system command x; } } Magick_equalize_item = class Menuaction "_Equalize" "equalize the histogram" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; command = Magick.command [ "\"%s\"", channels._flag, "-equalize", "\"%s\"" ]; _result = Magick.system command x; } } Magick_evaluate_item = class Menuaction "_Evaluate" "evaluate an expression on each pixel channel" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; operation = Magick.evaluate_widget; val = Expression "value" 5; isPc = Toggle "Value is percent" false; command = Magick.command [ "\"%s\"", channels._flag, operation._flag, print val.expr ++ if isPc then "%%" else "", "\"%s\"" ]; _result = Magick.system command x; } } Magick_extent_item = class Menuaction "_Extent" "set the image size and offset" { action x = class _result { _vislevel = 3; background = Magick.background_widget; compose = Magick.compose_widget; gravity = Magick.gravity_widget; geometry = Magick.WhxyGeometry_widget; command = Magick.command [ "\"%s\"", compose._flag, background._flag, gravity._flag, "-extent", geometry._flag, "\"%s\"" ]; _result = Magick.system command x; } } Magick_FlipFlopMenu_item = class Menupullright "_Flip/flop" "flip/flop/transverse/transpose" { Magick_flip_item = class Menuaction "_Flip vertically" "mirror upside-down" { action x = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "-flip", "\"%s\"" ]; _result = Magick.system command x; } } Magick_flop_item = class Menuaction "_Flop horizontally" "mirror left-right" { action x = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "-flop", "\"%s\"" ]; _result = Magick.system command x; } } Magick_transpose_item = class Menuaction "_Transpose" "mirror along the top-left to bottom-right diagonal" { action x = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "-transpose +repage", "\"%s\"" ]; _result = Magick.system command x; } } Magick_transverse_item = class Menuaction "_Transverse" "mirror along the bottom-left to top-right diagonal" { action x = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "-transverse +repage", "\"%s\"" ]; _result = Magick.system command x; } } } // end Magick_FlipFlopMenu_item Magick_floodfill_item = class Menuaction "_Floodfill" "recolour neighbours that match" { action x = class _result { _vislevel = 3; foreground = Magick.foreground_widget; fuzz = Magick.fuzz_widget; coordinate = Magick.coordinate_widget; // -draw "color x,y floodfill" command = Magick.command [ "\"%s\"", foreground._flag, "-fuzz", "\"" ++ print fuzz.value ++ "%%\"", "-draw \" color", coordinate._flag, "floodfill \"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_frame_item = class Menuaction "_Frame" "surround with border or beveled frame" { action x = class _result { _vislevel = 3; border = Magick.bordercol_widget; compose = Magick.compose_widget; matte = Magick.mattecol_widget; geometry = Magick.FrameGeometry_widget; command = Magick.command [ "\"%s\"", compose._flag, border._flag, matte._flag, "-frame", geometry._flag, "\"%s\"" ]; _result = Magick.system command x; } } Magick_function_item = class Menuaction "_Function" "evaluate a function on each pixel channel" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; function = Magick.function_widget; // FIXME: explain values; use sensible defaults. values = String "values" "0,0,0,0"; command = Magick.command [ "\"%s\"", channels._flag, "-function", function._flag, values.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_fx_item = class Menuaction "_Fx" "apply a mathematical expression" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; interpolate = Magick.interpolate_widget; virtpixback = Magick.VirtualPixelBack_widget; args = String "Expression" "u*1/2"; command = Magick.command [ "\"%s\"", channels._flag, interpolate._flag, virtpixback._flag, "-fx", concat ["\"", args.value, "\""], "\"%s\"" ]; _result = Magick.system command x; } } Magick_gamma_item = class Menuaction "_Gamma" "apply a gamma correction" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; gamma = Magick.gamma_widget; command = Magick.command [ "\"%s\"", channels._flag, "-gamma", print gamma.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_gradient_item = class Menuaction "_Gradient" "apply a linear gradient" { action x = class _result { _vislevel = 3; colourA = Magick.generalcol_widget; colourB = Magick.generalcol_widget; position = Option "colourA is at" [ "top", "bottom", "left", "right", "top-left", "top-right", "bottom-left", "bottom-right"] 0; _baryArg = concat ["0,0,", colourA._flag, " 0,%%[fx:h-1],", colourB._flag], position.value == 0 = concat ["0,0,", colourB._flag, " 0,%%[fx:h-1],", colourA._flag], position.value == 1 = concat ["0,0,", colourA._flag, " %%[fx:w-1],0,", colourB._flag], position.value == 2 = concat ["0,0,", colourB._flag, " %%[fx:w-1],0,", colourA._flag], position.value == 3 = concat ["0,0,", colourA._flag, " %%[fx:w-1],%%[fx:h-1],", colourB._flag], position.value == 4 = concat ["%%[fx:w-1],0,", colourA._flag, " 0,%%[fx:h-1],", colourB._flag], position.value == 5 = concat ["%%[fx:w-1],0,", colourB._flag, " 0,%%[fx:h-1],", colourA._flag], position.value == 6 = concat ["0,0,", colourB._flag, " %%[fx:w-1],%%[fx:h-1],", colourA._flag], position.value == 7 = "dunno"; command = Magick.command [ "\"%s\"", "-sparse-color barycentric \"" ++ _baryArg ++ "\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_gradientCorn_item = class Menuaction "_Gradient corners" "apply a bilinear gradient between the corners" { action x = class _result { _vislevel = 3; colour_top_left = Magick.generalcol_widget; colour_top_right = Magick.generalcol_widget; colour_bottom_left = Magick.generalcol_widget; colour_bottom_right = Magick.generalcol_widget; command = Magick.command [ "\"%s\"", "-sparse-color bilinear \"" ++ "0,0," ++ colour_top_left._flag ++ ",%%[fx:w-1],0" ++ colour_top_right._flag ++ ",0,%%[fx:h-1]" ++ colour_bottom_left._flag ++ ",%%[fx:w-1],%%[fx:h-1]" ++ colour_bottom_right._flag ++ "\"", "+depth", "\"%s\"" ]; _result = Magick.system command x; } } Magick_histogram_item = class Menuaction "_Histogram" "make a histogram image" { action x = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "-define histogram:unique-colors=false histogram:" ++ "\"%s\"" ]; _result = Magick.system command x; } } Magick_implode_item = class Menuaction "_Implode" "implode pixels about the center" { action x = class _result { _vislevel = 3; factor = Scale "factor" 0 20 1; interpolate = Magick.interpolate_widget; // FIXME: virtual-pixel? command = Magick.command [ "\"%s\"", interpolate._flag, "-implode", print factor.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_level_item = class Menuaction "_Level" "adjust the level of channels" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; blk = Scale "black point" (-100) 200 0; wht = Scale "white point" (-100) 200 100; gam = Scale "gamma" 0 30 1; isPc = Toggle "Levels are percent" true; isInv = Toggle "Invert effect" false; command = Magick.command [ "\"%s\"", channels._flag, (if isInv then "+" else "-") ++ "level", "\"" ++ print blk.value ++ "," ++ print wht.value ++ (if isPc then "%%" else "") ++ "," ++ print gam.value ++ "\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_levelCols_item = class Menuaction "_Level colors" "adjust levels to given colours" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; colour_black = Magick.generalcol_widget; colour_white = Magick.generalcol_widget; isInv = Toggle "Invert effect" false; command = Magick.command [ "\"%s\"", channels._flag, (if isInv then "+" else "-") ++ "level-colors", "\"" ++ colour_black._flag ++ "," ++ colour_white._flag ++ "\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_linearStretch_item = class Menuaction "_Linear stretch" "stretches tones, making some black/white" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; blk = Scale "percent to make black" 0 100 0; wht = Scale "percent to make white" 0 100 0; command = Magick.command [ "\"%s\"", channels._flag, "-linear-stretch", "\"" ++ print blk.value ++ "x" ++ print wht.value ++ "%%\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_magnify_item = class Menuaction "_Magnify" "double the size of the image with pixel art scaling" { action x = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "-magnify", "\"%s\"" ]; _result = Magick.system command x; } } Magick_modulate_item = class Menuaction "_Modulate" "modulate brightness, saturation and hue" { action x = class _result { _vislevel = 3; modcolsp = Magick.ModColSp_widget; bright = Scale "brightness" 0 200 100; sat = Scale "saturation" 0 200 100; hue = Scale "hue" 0 200 100; command = Magick.command [ "\"%s\"", modcolsp._flag, "-modulate", print bright.value ++ "," ++ print sat.value ++ "," ++ print hue.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_monochrome_item = class Menuaction "_Monochrome" "transform to black and white" { action x = class _result { _vislevel = 3; // FIXME: also intensity? intensity = Magick.intensity_widget; treedepth = Expression "Treedepth" 8; dither = Magick.dither_widget; command = Magick.command [ "\"%s\"", intensity._flag, dither._flag, "-treedepth", print treedepth.expr, "-monochrome", "\"%s\"" ]; _result = Magick.system command x; } } Magick_morphology_item = class // See http://www.imagemagick.org/Usage/morphology/ Menuaction "_Morphology" "apply a morphological method" { action x = class _result { _vislevel = 3; method = Magick.morphmeth_widget; iter = Expression "Iterations (-1=repeat until done)" 1; kernel = Magick.kernel_widget; // FIXME: custom kernel eg "3x1+2+0:1,0,0" // width x height + offsx + offsy : {w*h values} // each value is 0.0 to 1.0 or "NaN" or "-" // kernel args, mostly float radius,scale. radius=0=default. default scale = 1.0 // but // ring takes: radius1, radius2, scale // rectangle and comet take: width x height + offsx + offsy // blur takes: radius x sigma // FIXME: for now, simply allow any string input. kernel_arg = String "Kernel arguments" ""; channels = Magick.channels_widget; command = Magick.command [ "\"%s\"", channels._flag, "-morphology", method._flag ++ ":" ++ print iter.expr, kernel._flag ++ (if kernel_arg.value == "" then "" else ":") ++ kernel_arg.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_negate_item = class Menuaction "_Negate" "negate" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; command = Magick.command [ "\"%s\"", channels._flag, "-negate", "\"%s\"" ]; _result = Magick.system command x; } } Magick_addNoise_item = class Menuaction "_add Noise" "add noise" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; attenuate = Scale "attenuate" 0 1.0 1.0; noise = Magick.noise_widget; command = Magick.command [ "\"%s\"", channels._flag, "-attenuate", print attenuate.value, noise._flag, "\"%s\"" ]; _result = Magick.system command x; } } Magick_normalize_item = class Menuaction "_Normalize" "normalize" { action x = class _result { _vislevel = 3; intensity = Magick.intensity_widget; channels = Magick.channels_widget; command = Magick.command [ "\"%s\"", intensity._flag, channels._flag, "-normalize", "\"%s\"" ]; _result = Magick.system command x; } } Magick_opaque_item = class Menuaction "_Opaque" "change this colour to the fill colour" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; fill = Magick.foreground_widget; changeColour = Magick.changeCol_widget; command = Magick.command [ "\"%s\"", fill._flag, channels._flag, "-fuzz", "\"" ++ print changeColour.fuzz.value ++ "%%\"", (if changeColour.nonMatch then "+" else "-") ++ "opaque", "\"" ++ changeColour.colour._flag ++ "\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_paint_item = class Menuaction "_Paint" "simulate an oil painting" { action x = class _result { _vislevel = 3; rad = Expression "radius" 10; command = Magick.command [ "\"%s\"", "-paint", print rad.expr, "\"%s\"" ]; _result = Magick.system command x; } } /*=== FIXME Bug; remove for now. Polaroid_item = class Menuaction "_Polaroid" "simulate a polaroid picture" { action x = class _result { _vislevel = 3; angle = Scale "angle" (-90) 90 20; command = Magick.command [ "\"%s\"", "-polaroid", print angle.value, "\"%s\"" ]; _result = Magick.system command x; } } ===*/ Magick_posterize_item = class Menuaction "_Posterize" "reduce to (n) levels per channel" { action x = class _result { _vislevel = 3; levels = Expression "levels" 3; command = Magick.command [ "\"%s\"", "-posterize", print levels.expr, "\"%s\"" ]; _result = Magick.system command x; } } Magick_raise_item = class Menuaction "_Raise" "lighten or darken image edges" { action x = class _result { _vislevel = 3; thk = Expression "Thickness" 3; command = Magick.command [ "\"%s\"", "-raise", print thk.expr, "\"%s\"" ]; _result = Magick.system command x; } } Magick_resize_item = class Menuaction "_Resize" "resize to given width and height" { action x = class _result { _vislevel = 3; filter = Magick.filter_widget; type = Magick.ResizeType_widget; width = Scale "Width" 1 100 10; height = Scale "Height" 1 100 10; isPc = Toggle "Width and height are percent" false; command = Magick.command [ "\"%s\"", filter._flag, "-" ++ type._flag, "\"" ++ print width.value ++ "x" ++ print height.value ++ (if isPc then "%%" else "!") ++ "\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_roll_item = class Menuaction "_Roll" "roll an image horizontally or vertically" { action x = class _result { _vislevel = 3; rollx = Expression "X" 3; rolly = Expression "Y" 3; command = Magick.command [ "\"%s\"", "-roll", (if rollx.expr >= 0 then "+" else "") ++ print rollx.expr ++ (if rolly.expr >= 0 then "+" else "") ++ print rolly.expr, "\"%s\"" ]; _result = Magick.system command x; } } Magick_rotate_item = class Menuaction "_Rotate" "rotate" { action x = class _result { _vislevel = 3; angle = Scale "angle (degrees)" (-360) 360 20; virtpixback = Magick.VirtualPixelBack_widget; command = Magick.command [ "\"%s\"", virtpixback._flag, "+distort", "SRT", print angle.value, "+repage", "\"%s\"" ]; _result = Magick.system command x; } } // FIXME: -segment, but cluster-threshold should be percentage of image area. Magick_sepia_item = class Menuaction "_Sepia tone" "simulate a sepia-toned photo" { action x = class _result { _vislevel = 3; threshold = Scale "Threshold (percent)" 0 100 80; command = Magick.command [ "\"%s\"", "-sepia-tone", "\"" ++ print threshold.value ++ "%%\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_shade_item = class Menuaction "_Shade" "shade with a distant light source" { action x = class _result { _vislevel = 3; azimuth = Scale "Azimuth (degrees)" (-360) 360 0; elevation = Scale "Elevation (degrees)" 0 90 45; command = Magick.command [ "\"%s\"", "-shade", print azimuth.value ++ "x" ++ print elevation.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_shadow_item = class Menuaction "_Shadow" "simulate a shadow" { action x = class _result { _vislevel = 3; shadowCol = Magick.generalcol_widget; opacity = Scale "Opacity (percent)" 0 100 75; sigma = Scale "Sigma" 0 30 2; // FIXME: make offsets a single widget? offsx = Scale "X-offset" (-20) 20 4; offsy = Scale "Y-offset" (-20) 20 4; arePc = Toggle "offsets are percentages" false; // FIXME: raw operation creates page offset, which vips dislikes. // So we take this futher, compositing with source. command = Magick.command [ "\"%s\"", "\"(\" +clone", "-background", "\"" ++ shadowCol._flag ++ "\"", "-shadow", concat [ "\"", print opacity.value, "x", print sigma.value, (if offsx.value >= 0 then "+" else ""), print offsx.value, (if offsy.value >= 0 then "+" else ""), print offsy.value, (if arePc then "%%" else ""), "\"" ], "\")\" +swap -background None -layers merge", "+repage", "\"%s\"" ]; _result = Magick.system command x; } } Magick_shave_item = class Menuaction "_Shave" "shave pixels from the edges" { action x = class _result { _vislevel = 3; width = Scale "Width" 0 50 10; height = Scale "Height" 0 50 10; isPc = Toggle "Width and height are percent" false; command = Magick.command [ "\"%s\"", "-shave", "\"" ++ print width.value ++ "x" ++ print height.value ++ (if isPc then "%%" else "") ++ "\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_shear_item = class Menuaction "_Shear" "shear along the x-axis and/or y-axis" { action x = class _result { _vislevel = 3; shearX = Expression "shear X (degrees)" 0; shearY = Expression "shear Y (degrees)" 0; background = Magick.background_widget; command = Magick.command [ "\"%s\"", background._flag, "-shear", print shearX.expr ++ "x" ++ print shearY.expr, "\"%s\"" ]; _result = Magick.system command x; } } Magick_sigmoid_item = class Menuaction "_Sigmoid" "increase or decrease mid-tone contrast sigmoidally" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; contrast = Scale "contrast" 0 30 3; midpoint = Scale "mid-point (percent)" 0 100 50; isInv = Toggle "Invert effect" false; command = Magick.command [ "\"%s\"", channels._flag, (if isInv then "+" else "-") ++ "sigmoidal-contrast", "\"" ++ print contrast.value ++ "x" ++ print midpoint.value ++ "%%\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_sketch_item = class Menuaction "_Sketch" "simulate a pencil sketch" { action x = class _result { _vislevel = 3; radius = Magick.blur_rad_widget; sigma = Magick.sigma_widget; angle = Scale "angle" (-360) 360 0; command = Magick.command [ "\"%s\"", "-sketch", print radius.value ++ "x" ++ print sigma.value ++ (if angle >= 0 then ("+" ++ print angle.value) else ""), "\"%s\"" ]; _result = Magick.system command x; } } Magick_solarize_item = class Menuaction "_Solarize" "negate all pixels above a threshold level" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; threshold = Scale "Threshold (percent)" 0 100 50; command = Magick.command [ "\"%s\"", channels._flag, "-solarize", "\"" ++ print threshold.value ++ "%%\"", "\"%s\"" ]; _result = Magick.system command x; } } // FIXME: -sparse-color needs abitrary list of {x,y,colour}. Magick_splice_item = class Menuaction "_Splice" "splice a colour into the image" { action x = class _result { _vislevel = 3; background = Magick.background_widget; gravity = Magick.gravity_widget; geometry = Magick.WhxyGeometry_widget; command = Magick.command [ "\"%s\"", background._flag, gravity._flag, "-splice", geometry._flag, "\"%s\"" ]; _result = Magick.system command x; } } Magick_spread_item = class Menuaction "_Spread" "displace pixels by random amount" { action x = class _result { _vislevel = 3; virtpixback = Magick.VirtualPixelBack_widget; amount = Expression "Amount (pixels)" 5; command = Magick.command [ "\"%s\"", virtpixback._flag, "-spread", print amount.expr, "\"%s\"" ]; _result = Magick.system command x; } } Magick_statistic_item = class Menuaction "_Statistic" "replace each pixel with statistic from neighbourhood" { action x = class _result { _vislevel = 3; width = Expression "Width" 5; height = Expression "Height" 5; statisticType = Magick.StatType_widget; command = Magick.command [ "\"%s\"", "-statistic", statisticType._flag, print width.expr ++ "x" ++ print height.expr, "\"%s\"" ]; _result = Magick.system command x; } } Magick_swirl_item = class Menuaction "_Swirl" "swirl around the centre" { action x = class _result { _vislevel = 3; angle = Magick.angle_widget; command = Magick.command [ "\"%s\"", "-swirl", print angle.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_thresholdMenu_item = class Menupullright "_Threshold" "make black or white" { Magick_threshold_item = class Menuaction "_Threshold" "apply black/white threshold" { action x = class _result { _vislevel = 3; intensity = Magick.intensity_widget; channels = Magick.channels_widget; threshold = Scale "Threshold (percent)" 0 100 50; command = Magick.command [ "\"%s\"", intensity._flag, channels._flag, "-threshold", "\"" ++ print threshold.value ++ "%%\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_blackThreshold_item = class Menuaction "_Black threshold" "where below threshold set to black" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; threshold = Scale "Threshold (percent)" 0 100 50; command = Magick.command [ "\"%s\"", channels._flag, "-black-threshold", "\"" ++ print threshold.value ++ "%%\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_whiteThreshold_item = class Menuaction "_White threshold" "where above threshold set to white" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; threshold = Scale "Threshold (percent)" 0 100 50; command = Magick.command [ "\"%s\"", channels._flag, "-white-threshold", "\"" ++ print threshold.value ++ "%%\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_latThreshold_item = class Menuaction "_Local Adaptive Threshold" "where above average plus offset set to white, otherwise black" { action x = class _result { _vislevel = 3; width = Expression "Width" 10; height = Expression "Height" 10; offset = Scale "Offset (percent)" (-100) 100 0; // note: "-lat" doesn't respond to channels command = Magick.command [ "\"%s\"", "-lat", concat ["\"", print width.expr, "x", print height.expr, (if offset.value >= 0 then "+" else ""), print offset.value, "%%\"" ], "\"%s\"" ]; _result = Magick.system command x; } } Magick_randThreshold_item = class Menuaction "_Random Threshold" "between specified limits, apply random threshold" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; low = Scale "Low threshold" 0 100 10; high = Scale "High threshold" 0 100 90; isPc = Toggle "Thresholds are percent" true; command = Magick.command [ "\"%s\"", channels._flag, "-random-threshold", "\"" ++ print low.value ++ "x" ++ print high.value ++ (if isPc then "%%" else "") ++ "\"", "\"%s\"" ]; _result = Magick.system command x; } } } // end ThresholdMenu_item // Note: alternatives include: // convert in.tif -write mpr:TILE +delete -size 200x200 -background XXXX -tile-offset +30+30 tile:mpr:TILE out.tif Magick_tile_item = class Menuaction "_Tile" "fill given size with tiled image" { action x = class _result { _vislevel = 3; size = Magick.Size_widget; command = Magick.command [ size._flag, "tile:" ++ "\"%s\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_tint_item = class Menuaction "_Tint" "apply a tint" { action x = class _result { _vislevel = 3; foreground = Magick.foreground_widget; amount = Scale "amount (percent)" 0 100 50; command = Magick.command [ "\"%s\"", foreground._flag, "-tint", // snibgo note: although the amount is a percentage, it doesn't need "%" character. print amount.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_transparent_item = class Menuaction "_Transparent" "make this colour transparent" { action x = class _result { _vislevel = 3; changeColour = Magick.changeCol_widget; command = Magick.command [ "\"%s\"", "-fuzz", "\"" ++ print changeColour.fuzz.value ++ "%%\"", (if changeColour.nonMatch then "+" else "-") ++ "transparent", "\"" ++ changeColour.colour._flag ++ "\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_trim_item = class Menuaction "_Trim" "trims away border" { action x = class _result { _vislevel = 3; fuzz = Magick.fuzz_widget; command = Magick.command [ "\"%s\"", "-fuzz", "\"" ++ print fuzz.value ++ "%%\"", "-trim +repage", "\"%s\"" ]; _result = Magick.system command x; } } Magick_uniqueCols_item = class Menuaction "_Unique colours" "discard all but one of any pixel color" { action x = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "-unique-colors", "\"%s\"" ]; _result = Magick.system command x; } } Magick_vignette_item = class Menuaction "_Vignette" "soften the edges in vignette style" { action x = class _result { _vislevel = 3; radius = Magick.blur_rad_widget; sigma = Magick.sigma_widget; rx = Scale "Rolloff x (percent)" 0 100 10; ry = Scale "Rolloff y (percent)" 0 100 10; background = Magick.background_widget; command = Magick.command [ "\"%s\"", background._flag, "-vignette", print radius.value ++ "x" ++ print sigma.value ++ (if rx.value >= 0 then "+" else "") ++ print rx.value ++ (if ry.value >= 0 then "+" else "") ++ print ry.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_wave_item = class Menuaction "_Wave" "shear the columns into a sine wave" { action x = class _result { _vislevel = 3; amplitude = Scale "Amplitude (pixels)" 0 100 10; wavelength = Scale "Wavelength (pixels)" 0 100 10; command = Magick.command [ "\"%s\"", "-wave", print amplitude.value ++ "x" ++ print wavelength.value, "\"%s\"" ]; _result = Magick.system command x; } } nip2-8.7.0/share/nip2/compat/8.2/_predicate.def0000644000175000017500000003252613224651032015650 00000000000000 /* is_colour_space str: is a string one of nip's colour space names */ is_colour_space str = Image_type.colour_spaces.present 0 str; /* is_colour_type n: is a number one of VIPS's colour spaces */ is_colour_type n = Image_type.colour_spaces.present 1 n; /* is_number: is a real or a complex number. */ is_number a = is_real a || is_complex a; /* is_int: is an integer */ is_int a = is_real a && a == (int) a; /* is_uint: is an unsigned integer */ is_uint a = is_int a && a >= 0; /* is_pint: is a positive integer */ is_pint a = is_int a && a > 0; /* is_preal: is a positive real */ is_preal a = is_real a && a > 0; /* is_ureal: is an unsigned real */ is_ureal a = is_real a && a >= 0; /* is_letter c: true if character c is an ASCII letter * * is_letter :: char -> bool */ is_letter c = ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z'); /* is_digit c: true if character c is an ASCII digit * * is_digit :: char->bool */ is_digit x = '0' <= x && x <= '9'; /* A whitespace character. * * is_space :: char->bool */ is_space = member " \n\t"; /* List str starts with section prefix. * * is_prefix "hell" "hello world!" == true * is_prefix :: [*] -> [*] -> bool */ is_prefix prefix str = take (len prefix) str == prefix; /* List str ends with section suffix. * * is_suffix "ld!" "hello world!" == true * is_suffix :: [*] -> [*] -> bool */ is_suffix suffix str = take (len suffix) (reverse str) == reverse suffix; /* List contains seqence. * * is_substr "llo" "hello world!" == true * is_substr :: [*] -> [*] -> bool */ is_substr seq str = any (map (is_prefix seq) (iterate tl str)); /* is_listof p s: true if finite list with p true for every element. */ is_listof p l = is_list l && all (map p l); /* is_string s: true if finite list of char. */ is_string s = is_listof is_char s; /* is_real_list l: is l a list of real numbers ... test each element, * so no infinite lists pls. */ is_real_list l = is_listof is_real l; /* is_string_list l: is l a finite list of finite strings. */ is_string_list l = is_listof is_string l; /* Test list length ... quicker than len x == n for large lists. */ is_list_len n x = true, x == [] && n == 0 = false, x == [] || n == 0 = is_list_len (n - 1) (tl x); is_list_len_more n x = true, x != [] && n == 0 = false, x == [] || n == 0 = is_list_len_more (n - 1) (tl x); is_list_len_more_equal n x = true, n == 0 = false, x == [] = is_list_len_more_equal (n - 1) (tl x); /* is_rectangular l: is l a rectangular data structure */ is_rectangular l = true, !is_list l = true, all (map is_obj l) = true, all (map is_list l) && all (map (not @ is_obj) l) && all (map is_rectangular l) && is_list_len_more 0 l && all (map (is_list_len (len (hd l))) (tl l)) = false { // treat strings as a base type, not [char] is_obj x = !is_list x || is_string x; } /* is_matrix l: is l a list of lists of real numbers, all the same length * * [[]] is the empty matrix, [] is the empty list ... disallow [] */ is_matrix l = l != [] && is_listof is_real_list l && is_rectangular l; /* is_square_matrix l: is l a matrix with width == height */ is_square_matrix l = true, l == [[]] = is_matrix l && is_list_len (len (hd l)) l; /* is_oddmatrix l: is l a matrix with odd-length sides */ is_oddmatrix l = true, l == [[]] = is_matrix l && len l % 2 == 1 && len l?0 % 2 == 1; /* is_odd_square_matrix l: is l a square_matrix with odd-length sides */ is_odd_square_matrix l = is_square_matrix l && len l % 2 == 1; /* Is an item in a column of a table? */ is_incolumn n table x = member (map (extract n) table) x; /* Is HGuide or VGuide. */ is_HGuide x = is_instanceof "HGuide" x; is_VGuide x = is_instanceof "VGuide" x; is_Guide x = is_HGuide x || is_VGuide x; is_Mark x = is_instanceof "Mark" x; is_Group x = is_instanceof "Group" x; is_NULL x = is_instanceof "NULL" x; is_List x = is_instanceof "List" x; is_Image x = is_instanceof "Image" x; is_Plot x = is_instanceof "Plot" x; is_Region x = is_instanceof "Region" x; is_Real x = is_instanceof "Real" x; is_Matrix x = is_instanceof "Matrix_base" x; is_Vector x = is_instanceof "Vector" x; is_Colour x = is_instanceof "Colour" x; is_Arrow x = is_instanceof "Arrow" x; is_Bool x = is_instanceof "Bool" x; is_Scale x = is_instanceof "Scale" x; is_Rect x = is_instanceof "Rect" x; is_Number x = is_instanceof "Number" x; is_Expression x = is_instanceof "Expression" x; is_String x = is_instanceof "String" x; /* A list of the form [[1,2],[3,4],[5,6]...] */ is_xy_list l = is_list l && all (map xy l) { xy l = is_real_list l && is_list_len 2 l; } // does a nested list structure contain a Group object? contains_Group l = true, is_list l && any (map is_Group l) = any (map contains_Group l), is_list l = false; /* Does an object have a sensible VIPS type? */ has_type x = is_image x || is_Image x || is_Arrow x || is_Colour x; /* Try to get a VIPS image type from an object. */ get_type x = get_type_im x, is_image x = get_type_im x.value, is_Image x = get_type_im x.image.value, is_Arrow x = Image_type.colour_spaces.lookup 0 1 x.colour_space, is_Colour x // slightly odd ... but our display is always 0-255, so it makes sense for // a plain number to be in the same range = Image_type.sRGB, is_real x = oo_unary_function get_type_op x, is_class x = error (_ "bad arguments to " ++ "get_type") { get_type_op = Operator "get_type" get_type Operator_type.COMPOUND false; // get the type from a VIPS image ... but only if it makes sense with // the rest of the image // we often have Type set wrong, hence the ugly guessing :-( // can have alpha, hence we let bands be one more than you might think get_type_im im = Image_type.LABQ, coding == Image_coding.LABPACK = Image_type.GREY16, type == Image_type.GREY16 && is_bands 1 = Image_type.HISTOGRAM, type == Image_type.HISTOGRAM && (width == 1 || height == 1) = Image_type.B_W, is_bands 1 = Image_type.CMYK, type == Image_type.CMYK && is_bands 4 = type, is_colorimetric && is_bands 3 = Image_type.sRGB, !is_colorimetric && is_bands 3 = Image_type.MULTIBAND, !is_colorimetric && !is_bands 3 = type { type = get_header "Type" im; coding = get_header "Coding" im; bands = get_header "Bands" im; width = get_header "Xsize" im; height = get_header "Ysize" im; // 3-band colorimetric types we allow ... the things which the // Colour/Convert To menu can make, excluding mono. ok_types = [ Image_type.sRGB, Image_type.RGB16, Image_type.LAB, Image_type.LABQ, Image_type.LABS, Image_type.LCH, Image_type.XYZ, Image_type.YXY, Image_type.UCS ]; is_colorimetric = member ok_types type; // is bands n, with an optional alpha (ie. can be n + 1 too) is_bands n = bands == n || bands == n + 1; } } has_format x = has_member "format" x || is_Arrow x || is_image x; get_format x = x.format, has_member "format" x = x.image.format, is_Arrow x = get_header "BandFmt" x, is_image x = oo_unary_function get_format_op x, is_class x = error (_ "bad arguments to " ++ "get_format") { get_format_op = Operator "get_format" get_format Operator_type.COMPOUND false; } has_bits x = has_member "bits" x || is_Arrow x || is_image x; get_bits x = x.bits, has_member "bits" x = x.image.bits, is_Arrow x = get_header "Bbits" x, is_image x = oo_unary_function get_bits_op x, is_class x = error (_ "bad arguments to " ++ "get_bits") { get_bits_op = Operator "get_bits" get_format Operator_type.COMPOUND false; } has_bands x = is_image x || has_member "bands" x || is_Arrow x; get_bands x = x.bands, has_member "bands" x = x.image.bands, is_Arrow x = get_header "Bands" x, is_image x = 1, is_real x = len x, is_real_list x = oo_unary_function get_bands_op x, is_class x = error (_ "bad arguments to " ++ "get_bands") { get_bands_op = Operator "get_bands" get_bands Operator_type.COMPOUND false; } has_coding x = has_member "coding" x || is_Arrow x || is_image x; get_coding x = x.coding, has_member "coding" x = x.image.coding, is_Arrow x = get_header "Coding" x, is_image x = Image_coding.NOCODING, is_real x = oo_unary_function get_coding_op x, is_class x = error (_ "bad arguments to " ++ "get_coding") { get_coding_op = Operator "get_coding" get_coding Operator_type.COMPOUND false; } has_xres x = has_member "xres" x || is_Arrow x || is_image x; get_xres x = x.xres, has_member "xres" x = x.image.xres, is_Arrow x = get_header "Xres" x, is_image x = oo_unary_function get_xres_op x, is_class x = error (_ "bad arguments to " ++ "get_xres") { get_xres_op = Operator "get_xres" get_xres Operator_type.COMPOUND false; } has_yres x = has_member "yres" x || is_Arrow x || is_image x; get_yres x = x.yres, has_member "yres" x = x.image.yres, is_Arrow x = get_header "Yres" x, is_image x = oo_unary_function get_yres_op x, is_class x = error (_ "bad arguments to " ++ "get_yres") { get_yres_op = Operator "get_yres" get_yres Operator_type.COMPOUND false; } has_xoffset x = has_member "xoffset" x || is_Arrow x || is_image x; get_xoffset x = x.xoffset, has_member "xoffset" x = x.image.xoffset, is_Arrow x = get_header "Xoffset" x, is_image x = oo_unary_function get_xoffset_op x, is_class x = error (_ "bad arguments to " ++ "get_xoffset") { get_xoffset_op = Operator "get_xoffset" get_xoffset Operator_type.COMPOUND false; } has_yoffset x = has_member "yoffset" x || is_Arrow x || is_image x; get_yoffset x = x.yoffset, has_member "yoffset" x = x.image.yoffset, is_Arrow x = get_header "Yoffset" x, is_image x = oo_unary_function get_yoffset_op x, is_class x = error (_ "bad arguments to " ++ "get_yoffset") { get_yoffset_op = Operator "get_yoffset" get_yoffset Operator_type.COMPOUND false; } has_value = has_member "value"; get_value x = x.value; has_image x = is_image x || is_Image x || is_Arrow x; get_image x = x.value, is_Image x = x.image.value, is_Arrow x = x, is_image x = oo_unary_function get_image_op x, is_class x = error (_ "bad arguments to " ++ "get_image") { get_image_op = Operator "get_image" get_image Operator_type.COMPOUND false; } has_number x = is_number x || is_Real x; get_number x = x.value, is_Real x = x, is_number x = oo_unary_function get_number_op x, is_class x = error (_ "bad arguments to " ++ "get_number") { get_number_op = Operator "get_number" get_number Operator_type.COMPOUND false; } has_real x = is_real x || is_Real x; get_real x = x.value, is_Real x = x, is_real x = oo_unary_function get_real_op x, is_class x = error (_ "bad arguments to " ++ "get_real") { get_real_op = Operator "get_real" get_real Operator_type.COMPOUND false; } has_width x = has_member "width" x || is_image x; get_width x = x.width, has_member "width" x = get_header "Xsize" x, is_image x = oo_unary_function get_width_op x, is_class x = error (_ "bad arguments to " ++ "get_width") { get_width_op = Operator "get_width" get_width Operator_type.COMPOUND false; } has_height x = has_member "height" x || is_image x; get_height x = x.height, has_member "height" x = get_header "Ysize" x, is_image x = oo_unary_function get_height_op x, is_class x = error (_ "bad arguments to " ++ "get_height") { get_height_op = Operator "get_height" get_height Operator_type.COMPOUND false; } has_left x = has_member "left" x; get_left x = x.left, has_member "left" x = oo_unary_function get_left_op x, is_class x = error (_ "bad arguments to " ++ "get_left") { get_left_op = Operator "get_left" get_left Operator_type.COMPOUND false; } has_top x = has_member "top" x; get_top x = x.top, has_member "top" x = oo_unary_function get_top_op x, is_class x = error (_ "bad arguments to " ++ "get_top") { get_top_op = Operator "get_top" get_top Operator_type.COMPOUND false; } // like has/get member, but first in a lst of objects has_member_list has objects = filter has objects != []; // need one with the args swapped get_member = converse dot; // get a member from the first of a list of objects to have it get_member_list has get objects = hd members, members != [] = error "unable to get property" { members = map get (filter has objects); } is_hist x = has_image x && (h == 1 || w == 1 || t == Image_type.HISTOGRAM) { im = get_image x; w = get_width im; h = get_height im; t = get_type im; } get_header field x = oo_unary_function get_header_op x, is_class x = get_header_image x, is_image x = error (_ "bad arguments to " ++ "get_header") { get_header_op = Operator "get_header" (get_header field) Operator_type.COMPOUND false; get_header_image im = im_header_int field im, type == itype = im_header_double field im, type == dtype = im_header_string field im, type == stype1 || type == stype2 = error (_ "image has no field " ++ field), type == 0 = error (_ "unknown type for field " ++ field) { type = im_header_get_typeof field im; itype = name2gtype "gint"; dtype = name2gtype "gdouble"; stype1 = name2gtype "VipsRefString"; stype2 = name2gtype "gchararray"; } } get_header_type field x = oo_unary_function get_header_type_op x, is_class x = im_header_get_typeof field x, is_image x = error (_ "bad arguments to " ++ "get_header_type") { get_header_type_op = Operator "get_header_type" (get_header_type field) Operator_type.COMPOUND false; } set_header field value x = oo_unary_function set_header_op x, is_class x = im_copy_set_meta x field value, is_image x = error (_ "bad arguments to " ++ "set_header") { set_header_op = Operator "set_header" (set_header field value) Operator_type.COMPOUND false; } nip2-8.7.0/share/nip2/compat/8.2/Widgets.def0000644000175000017500000000235313224651032015152 00000000000000Widget_slider_item = class Menuaction "_Scale" "make a new scale widget" { icon = "nip-slider-16.png"; action = Scale "untitled scale" 0 255 128; } Widget_toggle_item = class Menuaction "_Toggle" "make a new toggle widget" { action = Toggle "untitled toggle" false; } Widget_option_item = class Menuaction "_Option" "make a new option widget" { action = Option "untitled option" ["option0", "option1"] 0; } Widget_string_item = class Menuaction "St_ring" "make a new string widget" { action = String "Enter a string" "sample text"; } Widget_number_item = class Menuaction "_Number" "make a new number widget" { action = Number "Enter a number" 42; } Widget_expression_item = class Menuaction "_Expression" "make a new expression widget" { action = Expression "Enter an expression" 42; } Widget_pathname_item = class Menuaction "_File Chooser" "make a new file chooser widget" { action = Pathname "Pick a file" "$VIPSHOME/share/$PACKAGE/data/print_test_image.v"; } Widget_font_item = class Menuaction "F_ont Chooser" "make a new font chooser widget" { action = Fontname "Pick a font" Workspaces.Preferences.PAINTBOX_FONT; } Widget_clock_item = class Menuaction "_Clock" "make a new clock widget" { action = Clock 1 1; } nip2-8.7.0/share/nip2/compat/8.2/Colour.def0000644000175000017500000003773013224651032015016 00000000000000 Colour_new_item = class Menupullright (_ "_New") (_ "make a patch of colour") { Widget_colour_item = class Menuaction (_ "_Colour") (_ "make a patch of colour") { action = Colour_picker "Lab" [50,0,0]; } LAB_colour = class Menuaction (_ "CIE Lab _Picker") (_ "pick colour in CIE Lab space") { action = widget "Lab" [50, 0, 0]; // ab_slice size size = 512; // range of values ... +/- 128 for ab range = 256; // map xy in slice image to ab and back xy2ab x = x / (size / range) - 128; ab2xy a = (a + 128) * (size / range); widget space default_value = class Colour space _result { _vislevel = 3; [_L, _a, _b] = default_value; L = Scale "Lightness" 0 100 _L; ab_slice = Image (lab_slice size L.value); point = Mark ab_slice (ab2xy _a) (ab2xy _b); _result = [L.value, xy2ab point.left, xy2ab point.top]; Colour_edit colour_space value = widget colour_space value; } } CCT_colour = class Menuaction (_ "Colour from CCT") (_ "pick colour by CCT") { action = widget 6500; widget x = class _result { _vislevel = 3; T = Scale "CCT" 1800 25000 x; _result = colour_from_temp (to_real T); Colour_edit space value = widget (temp_from_colour (Colour space value)); } } } Colour_to_colour_item = class Menuaction (_ "Con_vert to Colour") (_ "convert anything to a colour") { action x = to_colour x; } #separator Colour_convert_item = class Menupullright (_ "_Colourspace") (_ "convert to various colour spaces") { spaces = Image_type.image_colour_spaces; conv dest x = class _result { _vislevel = 3; to = Option_enum (_ "Convert to") spaces (spaces.get_name dest); _result = map_unary (colour_transform_to to.value_thing) x; } Mono_item = class Menuaction (_ "_Monochrome") (_ "convert to mono colourspace") { action x = conv Image_type.B_W x; } sRGB_item = class Menuaction (_ "_sRGB") (_ "convert to sRGB colourspace") { action x = conv Image_type.sRGB x; } GREY16_item = class Menuaction (_ "_GREY16") (_ "convert to GREY16 colourspace") { action x = conv Image_type.GREY16 x; } RGB16_item = class Menuaction (_ "_RGB16") (_ "convert to RGB16 colourspace") { action x = conv Image_type.RGB16 x; } Lab_item = class Menuaction (_ "_Lab") (_ "convert to Lab colourspace (float Lab)") { action x = conv Image_type.LAB x; } LabQ_item = class Menuaction (_ "Lab_Q") (_ "convert to LabQ colourspace (32-bit Lab)") { action x = conv Image_type.LABQ x; } LabS_item = class Menuaction (_ "Lab_S") (_ "convert to LabS colourspace (48-bit Lab)") { action x = conv Image_type.LABS x; } LCh_item = class Menuaction (_ "L_Ch") (_ "convert to LCh colourspace") { action x = conv Image_type.LCH x; } XYZ_item = class Menuaction (_ "_XYZ") (_ "convert to XYZ colourspace") { action x = conv Image_type.XYZ x; } Yxy_item = class Menuaction (_ "_Yxy") (_ "convert to Yxy colourspace") { action x = conv Image_type.YXY x; } UCS_item = class Menuaction (_ "_UCS") (_ "convert to UCS colourspace") { action x = conv Image_type.UCS x; } } /* mark objects as being in various colourspaces */ Colour_tag_item = class Menupullright (_ "_Tag As") (_ "tag object as being in various colour spaces") { spaces = Image_type.image_colour_spaces; tag dest x = class _result { _vislevel = 3; to = Option_enum (_ "Tag as") spaces (spaces.get_name dest); _result = map_unary (image_set_type to.value_thing) x; } Mono_item = class Menuaction (_ "_Monochrome") (_ "tag as being in mono colourspace") { action x = tag Image_type.B_W x; } sRGB_item = class Menuaction (_ "_sRGB") (_ "tag as being in sRGB colourspace") { action x = tag Image_type.sRGB x; } RGB16_item = class Menuaction (_ "_RGB16") (_ "tag as being in RGB16 colourspace") { action x = tag Image_type.RGB16 x; } GREY16_item = class Menuaction (_ "_GREY16") (_ "tag as being in GREY16 colourspace") { action x = tag Image_type.GREY16 x; } Lab_item = class Menuaction (_ "_Lab") (_ "tag as being in Lab colourspace (float Lab)") { action x = tag Image_type.LAB x; } LabQ_item = class Menuaction (_ "Lab_Q") (_ "tag as being in LabQ colourspace (32-bit Lab)") { action x = tag Image_type.LABQ x; } LabS_item = class Menuaction (_ "Lab_S") (_ "tag as being in LabS colourspace (48-bit Lab)") { action x = tag Image_type.LABS x; } LCh_item = class Menuaction (_ "L_Ch") (_ "tag as being in LCh colourspace") { action x = tag Image_type.LCH x; } XYZ_item = class Menuaction (_ "_XYZ") (_ "tag as being in XYZ colourspace") { action x = tag Image_type.XYZ x; } Yxy_item = class Menuaction (_ "_Yxy") (_ "tag as being in Yxy colourspace") { action x = tag Image_type.YXY x; } UCS_item = class Menuaction (_ "_UCS") (_ "tag as being in UCS colourspace") { action x = tag Image_type.UCS x; } } Colour_temperature_item = class Menupullright (_ "Te_mperature") (_ "colour temperature conversions") { Whitepoint_item = class Menuaction (_ "_Move Whitepoint") (_ "change whitepoint") { action x = class _result { _vislevel = 3; old_white = Option_enum (_ "Old whitepoint") Whitepoints "D65"; new_white = Option_enum (_ "New whitepoint") Whitepoints "D50"; _result = map_unary process x { process im = im''' { im' = colour_transform_to Image_type.XYZ im; im'' = im' * (new_white.value_thing / old_white.value_thing); im''' = colour_transform_to (get_type im) im''; } } } } D65_to_D50_item = class Menupullright (_ "D_65 to D50") (_ "complex conversion") { XYZ_minimal_item = class Menuaction (_ "_Minimal") (_ "D65 to D50 using the minimal 3x3 matrix in XYZ") { action x = map_unary process x { process im = im''' { im' = colour_transform_to Image_type.XYZ im; im'' = recomb D652D50_direct im'; im''' = colour_transform_to (get_type im) im''; } } } Bradford_item = class Menuaction (_ "_Bradford") (_ "D65 to D50 in Bradford cone space") { action x = map_unary process x { process im = im''' { im' = colour_transform_to Image_type.XYZ im; im'' = im_D652D50 im'; im''' = colour_transform_to (get_type im) im''; } } } } D50_to_D65_item = class Menupullright (_ "D_50 to D65") (_ "complex conversion") { XYZ_minimal_item = class Menuaction (_ "_Minimal") (_ "D50 to D65 using the minimal 3x3 matrix in XYZ") { action x = map_unary process x { process im = im''' { im' = colour_transform_to Image_type.XYZ im; im'' = recomb D502D65_direct im'; im''' = colour_transform_to (get_type im) im''; } } } Bradford_item = class Menuaction (_ "_Bradford") (_ "D60 to D65 in Bradford cone space") { action x = map_unary process x { process im = im''' { im' = colour_transform_to Image_type.XYZ im; im'' = im_D502D65 im'; im''' = colour_transform_to (get_type im) im''; } } } } Lab_to_D50XYZ_item = class Menuaction (_ "_Lab to D50 XYZ") (_ "Lab to XYZ with a D50 whitepoint") { action x = map_unary (colour_unary im_D50Lab2XYZ) x; } D50XYZ_to_Lab_item = class Menuaction (_ "D50 _XYZ to Lab") (_ "XYZ to Lab with a D50 whitepoint") { action x = map_unary (colour_unary im_D50XYZ2Lab) x; } sep1 = Menuseparator; CCT_item = class Menuaction (_ "Calculate temperature") (_ "estimate CCT using the McCamy approximation") { action z = map_unary temp_from_colour z; } Colour_item = Colour_new_item.CCT_colour; } Colour_icc_item = class Menupullright (_ "_ICC") (_ "transform with ICC profiles") { print_profile = "$VIPSHOME/share/$PACKAGE/data/cmyk.icm"; monitor_profile = "$VIPSHOME/share/$PACKAGE/data/sRGB.icm"; guess_profile image = print_profile, has_type image && get_type image == Image_type.CMYK && has_bands image && get_bands image >= 4 = monitor_profile; render_intents = Option_enum (_ "Render intent") Render_intent.names (_ "Absolute"); Export_item = class Menuaction (_ "_Export") (_ "export from PCS to device space") { action x = class _result { _vislevel = 3; profile = Pathname (_ "Output profile") print_profile; intent = render_intents; depth = Option (_ "Output depth") [_ "8 bit", _ "16 bit"] 0; _result = map_unary process x { process image = icc_export [8, 16]?depth profile.value intent.value_thing lab { lab = colour_transform_to Image_type.LABQ image; } } } } Import_item = class Menuaction (_ "_Import") (_ "import from device space to PCS") { action x = class _result { _vislevel = 3; embedded = Toggle (_ "Use embedded profile if possible") false; profile = Pathname (_ "Default input profile") (guess_profile x); intent = render_intents; _result = map_unary process x { process image = icc_import_embedded intent.value_thing image, get_header_type "icc-profile-data" image != 0 && embedded = icc_import profile.value intent.value_thing image; } } } Transform_item = class Menuaction (_ "_Transform") (_ "transform between two device spaces") { action x = class _result { _vislevel = 3; in_profile = Pathname (_ "Input profile") (guess_profile x); out_profile = Pathname (_ "Output profile") print_profile; intent = render_intents; _result = map_unary process x { process image = icc_transform in_profile.value out_profile.value intent.value_thing image; } } } AC2RC_item = class Menuaction (_ "_Absolute to Relative") (_ "absolute to relative colorimetry using device profile") { action x = class _result { _vislevel = 3; profile = Pathname (_ "Pick a profile") (guess_profile x); _result = map_unary process x { process image = icc_ac2rc profile.value lab { lab = colour_transform_to Image_type.LAB image; } } } } } Colour_rad_item = class Menupullright (_ "_Radiance") (_ "convert to and from Radiance packed format") { Unpack_item = class Menuaction (_ "Unpack") (_ "unpack Radiance format to float") { action x = map_unary rad2float x; } Pack_item = class Menuaction (_ "Pack") (_ "pack 3-band float to Radiance format") { action x = map_unary float2rad x; } } #separator Colour_dE_item = class Menupullright (_ "_Difference") (_ "calculate colour difference") { /* Apply a converter to an object ... convert image or colour (since * we can guess the colour space we're converting from), don't convert * matrix or vector (since we can't tell ... assume it's in the right * space already). */ apply_cvt cvt x = cvt x, is_Image x || is_Colour x || is_image x = x; diff cvt in1 in2 = abs_vec (apply_cvt cvt in1 - apply_cvt cvt in2); /* Converter to LAB. */ lab_cvt = colour_transform_to Image_type.LAB; /* Converter to UCS ... plain UCS is Ch form, so we go LAB again after * to make sure we get a rectangular coord system. */ ucs_cvt = colour_transform Image_type.LCH Image_type.LAB @ colour_transform_to Image_type.UCS; CIEdE76_item = class Menuaction (_ "CIE dE _76") (_ "calculate CIE dE 1976 for two objects") { action a b = map_binary (diff lab_cvt) a b; } CIEdE00_item = class Menuaction (_ "CIE dE _00") (_ "calculate CIE dE 2000 for two objects") { action a b = map_binary (colour_binary (_ "im_dE00_fromLab") im_dE00_fromLab) a b; } UCS_item = class Menuaction (_ "_CMC(l:l)") (_ "calculate CMC(l:l) for two objects") { action a b = map_binary (diff ucs_cvt) a b; } } Colour_adjust_item = class Menupullright (_ "_Adjust") (_ "alter colours in various ways") { Recombination_item = class Menuaction (_ "_Recombination") (_ "recombine colour with an editable matrix") { action x = class _result { _vislevel = 3; matrix = Matrix_rec (identity_matrix (bands x)) { // try to guess a sensible value for the size of the // matrix bands x = x.bands, is_Image x || is_Colour x = x.width, is_Matrix x = bands x.value?0, is_Group x = x.bands, has_member "bands" x = 3; } _result = map_unary (recomb matrix) x; } } Cast_item = class Menuaction (_ "_Cast") (_ "displace neutral axis in CIE Lab") { action x = class _result { _vislevel = 3; gr = Scale "Green-red" (-20) 20 0; by = Scale "Blue-yellow" (-20) 20 0; _result = map_unary adjust_cast x { adjust_cast in = colour_transform_to (get_type in) in'' { in' = colour_transform_to Image_type.LAB in; in'' = in' + Vector [0, gr.value, by.value]; } } } } HSB_item = class Menuaction (_ "_HSB") (_ "adjust hue-saturation-brightness in LCh") { action x = class _result { _vislevel = 3; h = Scale "Hue" 0 360 0; s = Scale "Saturation" 0.01 5 1; b = Scale "Brightness" 0.01 5 1; _result = map_unary adjust_hsb x { adjust_hsb in = colour_transform_to (get_type in) in'' { in' = colour_transform_to Image_type.LCH in; in'' = in' * Vector [b.value, s.value, 1] + Vector [0, 0, h.value]; } } } } } Colour_similar_item = class Menuaction (_ "_Similar Colour") (_ "find pixels with a similar colour") { action x = class _result { _vislevel = 3; target_colour = Colour_picker "Lab" [50, 0, 0]; t = Scale "dE threshold" 0 100 10; _result = map_unary match x { match in = abs_vec (in' - target) < t { target = colour_transform_to Image_type.LAB target_colour; in' = colour_transform_to Image_type.LAB in; } } } } #separator Colour_chart_to_matrix_item = class Menuaction (_ "_Measure Colour Chart") (_ "measure average pixel values for a colour chart image") { action x = class _result { _vislevel = 3; pacross = Expression (_ "Patches across chart") 6; pdown = Expression (_ "Patches down chart") 4; measure = Scale (_ "Measure area (%)") 1 100 50; // get a representative image from an arg get_image x = get_image x.value?0, is_Group x = x; _im = get_image x; sample = measure_draw (to_real pacross) (to_real pdown) (to_real measure) _im; _result = map_unary chart x { chart in = measure_sample (to_real pacross) (to_real pdown) (to_real measure) in; } } } Colour_matrix_to_chart_item = class Menuaction (_ "Make Synth_etic Colour Chart") (_ "make a colour chart image from a matrix of measurements") { action x = class _result { _vislevel = 3; pacross = Expression (_ "Patches across chart") 6; pdown = Expression (_ "Patches down chart") 4; pwidth = Expression (_ "Patch width in pixels") 50; pheight = Expression (_ "Patch height in pixels") 50; bwidth = Expression (_ "Border between patches") 0; _result = map_unary build_chart x { build_chart in = Image (imagearray_assemble (to_real bwidth) (to_real bwidth) patch_table) { // patch numbers for row starts rowstart = map (multiply (to_real pacross)) [0 .. to_real pdown - 1]; // assemble patches ... each one a pixel value patches = map (take (to_real pacross)) (map (converse drop in.value) rowstart); // make an n-band constant image from eg. [1,2,3] // we don't know the format .. use sRGB (well, why not?) patch v = image_new (to_real pwidth) (to_real pheight) (len v) Image_format.FLOAT Image_coding.NOCODING Image_type.sRGB (Vector v) 0 0; // make an image for each patch patch_table = map (map patch) patches; } } } } Colour_plot_ab_scatter_item = class Menuaction (_ "_Plot ab Scatter") (_ "plot an ab scatter histogram") { action x = class _result { _vislevel = 3; bins = Expression (_ "Number of bins on each axis") 8; _result = map_unary plot_scatter x { plot_scatter in = Image (bg * (((90 / mx) * hist) ++ blk)) { lab = colour_transform_to Image_type.LAB in.value; ab = (unsigned char) ((lab?1 ++ lab?2) + 128); hist = hist_find_nD bins.expr ab; mx = max hist; bg = lab_slice bins.expr 1; blk = 1 + im_black (to_real bins) (to_real bins) 2; } } } } nip2-8.7.0/share/nip2/compat/8.2/_joe_extra.def0000644000175000017500000003114713224651032015666 00000000000000//////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// Frame_item = class Menupullright "Picture _Frame" "working with images of frames" { //////////////////////////////////////////////////////////////////////////////////// Build_frame_item = class Menupullright "_Build Frame From" "builds a new frame from image a and places it around image b" { //////////////////////////////////////////////////////////////////////////////////// Frame_corner_item = class Menuaction "_Frame Corner" "copies and extends a frame corner, a, to produce a complete frame to fit round a given image, b" { prefs = Workspaces.Preferences; action a b = class _result { _check_args = [ [a, "a", check_Image], [b, "b", check_Image] ]; _check_all = [ [a.coding == b.coding && a.bands == b.bands, "a.coding == b.coding && a.bands == b.bands"] ]; _vislevel = 3; ppcm = Expression "Number of pixels per cm" 25; /* Given the value of ppcm, distance between the inner edge of the frame * and the outer edge of the image. +ve values mean the frame overlaps * the image. */ overlap = Expression "Size of frame overlap in cm" 0; variables = Frame_variables 0; _type = Image_type.colour_spaces.get_name b.type; //If applied the count colour be seen for -ve values of overlap mount_options = Mount_options _type ppcm.expr; _cs = variables.corner_section.value; _ms = variables.middle_section.value; _ov = ppcm.expr * overlap.expr; _sf = variables.scale_factor.expr; _bf = variables.blend_fraction.value; //Scale frame image if required. _a = a, _sf == 1; = a, _sf == 0; = Image (resize Interpolate_bilinear _sf _sf a.value); _im_w = b.width; _im_h = b.height + mount_options._los, mount_options.apply = b.height; _os = mount_options._los, mount_options.apply = 0; _cl = Vector mount_options.mount_colour.value, mount_options.apply = 0; //Produce scaled and resized frame. frame = corner_frame _a _im_w _im_h _ov _cs _ms _bf; //Resize image canvas and applied mount colour as required. _pos_im = frame_position_image b frame _os _cl; //Wrap frame round image. _result = if (frame == 0) then _pos_im else frame; } } //////////////////////////////////////////////////////////////////////////////////// Simple_frame_item = class Menuaction "_Simple Frame" "extends or shortens the central sections of a simple frame, a, to fit round a given image, b" { prefs = Workspaces.Preferences; action a b = class _result { _check_args = [ [a, "a", check_Image], [b, "b", check_Image] ]; _check_all = [ [a.coding == b.coding && a.bands == b.bands, "a.coding == b.coding && a.bands == b.bands"] ]; _vislevel = 3; ppcm = Expression "Number of pixels per cm" 25; /* Given the value of ppcm, distance between the inner edge of the frame * and the outer edge of the image. +ve values mean the frame overlaps * the image. */ overlap = Expression "Size of frame overlap in cm" 0; variables = Frame_variables 0; _type = Image_type.colour_spaces.get_name b.type; //If applied the count colour be seen for -ve values of overlap mount_options = Mount_options _type ppcm.expr; _cs = variables.corner_section.value; _ms = variables.middle_section.value; _ov = ppcm.expr * overlap.expr; _sf = variables.scale_factor.expr; _bf = variables.blend_fraction.value; //Scale frame image if required. _a = a, _sf == 1; = a, _sf == 0; = Image (resize Interpolate_bilinear _sf _sf a.value); _im_w = b.width; _im_h = b.height + mount_options._los, mount_options.apply = b.height; _os = mount_options._los, mount_options.apply = 0; _cl = Vector mount_options.mount_colour.value, mount_options.apply = 0; //Produce scaled and resized frame. frame = simple_frame _a _im_w _im_h _ov _cs _ms _bf variables.option; //Resize image canvas and applied mount colour as required. _pos_im = frame_position_image b frame _os _cl; //Wrap frame round image. _result = if (frame == 0) then _pos_im else frame; } } //////////////////////////////////////////////////////////////////////////////////// Complex_frame_item = class Menuaction "_Complex Frame" "extends or shortens the central sections of a frame a, preserving any central edge details, to fit image b" { prefs = Workspaces.Preferences; action a b = class _result { _check_args = [ [a, "a", check_Image], [b, "b", check_Image] ]; _check_all = [ [a.coding == b.coding && a.bands == b.bands, "a.coding == b.coding && a.bands == b.bands"] ]; _vislevel = 3; ppcm = Expression "Number of pixels per cm" 25; /* Given the value of ppcm, distance between the inner edge of the frame * and the outer edge of the image. +ve values mean the frame overlaps * the image. */ overlap = Expression "Size of frame overlap in cm" 0; variables = Frame_variables 1; _type = Image_type.colour_spaces.get_name b.type; //If applied the count colour be seen for -ve values of overlap mount_options = Mount_options _type ppcm.expr; _cs = variables.corner_section.value; _es = variables.edge_section.value; _ms = variables.middle_section.value; _ov = ppcm.expr * overlap.expr; _sf = variables.scale_factor.expr; _bf = variables.blend_fraction.value; _a = a, _sf == 1; = a, _sf == 0; = Image (resize Interpolate_bilinear _sf _sf a.value); _im_w = b.width; _im_h = b.height + mount_options._los, mount_options.apply = b.height; _os = mount_options._los, mount_options.apply = 0; _cl = Vector mount_options.colour.value, mount_options.apply = 0; //Produce scaled and resized frame. frame = complex_frame _a _im_w _im_h _ov _cs _es _ms _bf variables.option; //Resize image canvas and applied mount colour as required. _pos_im = frame_position_image b frame _os _cl; //Wrap frame round image. _result = if (frame == 0) then _pos_im else frame; } } } //////////////////////////////////////////////////////////////////////////////////// Straighten_frame_item = class Menuaction "_Straighten Frame" "uses four points to square up distorted images of frames" { action a = Perspective_item.action a; } }; //////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// Select_item = class Menupullright "_Select" "select user defined areas of an image" { prefs = Workspaces.Preferences; /* Option toggle used to define whether the user is replacing a * dark or a light area. */ _control = Option "Make" [ "Selection Brighter", "Selection Darker", "Selection Black", "Selection White", "Background Black", "Background White", "Mask" ] 4; control_selection mask im no = [ if mask then im * 1.2 else im * 1, if mask then im * 0.8 else im * 1, if mask then 0 else im, if mask then 255 else im, if mask then im else 0, if mask then im else 255, mask ]?no; Rectangle = class Menuaction "_Rectangle" "use an Arrow or Region x to define a rectangle" { action x = class _result { _vislevel = 3; control = _control; _result = control_selection mask im control { im = x.image; mask = Image m { rx = x.region_rect, is_Region x = x; b = image_new im.width im.height 1 0 0 1 0 0 0; w = image_new rx.nwidth rx.nheight 1 0 0 1 255 0 0; m = insert_noexpand rx.nleft rx.ntop w b; } } } } Elipse = class Menuaction "_Ellipse" "use a line/arrow x to define the center point radius and direction of an ellipse" { action x = class _result { _vislevel = 3; control = _control; width = Scale "Width" 0.01 1 0.5; _result = control_selection mask im control { mask = select_ellipse x width.value; im = x.image; } } } Tetragon = class Menuaction "_Tetragon" "selects the convex area defined by four points" { action a b c d = class _result { _vislevel = 3; control = _control; _result = control_selection mask im control { mask = select_tetragon a b c d; im = get_image a; } } } Polygon = class Menuaction "_Polygon" "selects a polygon from an ordered group of points" { action pt_list = class _result { _vislevel = 3; control = _control; _result = control_selection mask im control { mask = select_polygon pt_list; im = get_image ((pt_list.value)?0); } } } sep1 = Menuseparator; Threshold_item = class Menuaction "Thres_hold" "simple image threshold" { action x = class _result { _vislevel = 3; t = Scale "Threshold" 0 mx (mx / 2) { mx = Image_format.maxval x.format, is_Image x = 255; } _result = map_unary (more t.value) x; } } Threshold_percent_item = class Menuaction "Per_cent Threshold" "threshold at a percentage of pixels" { action x = class _result { _vislevel = 3; t = Scale "Percentage of pixels" 0 100 50; _result = map_unary (more (hist_thresh (t.value / 100) x)) x; } } sep2 = Menuseparator; Segment_item = class Menuaction "_Segment" "break image into disjoint regions" { action x = class _result { _vislevel = 3; segments = Expression "Number of disjoint regions" (map_unary (get_header "n-segments") _result); _result = map_unary segment x; } } }; //////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// Perspective_match_item = class Menuaction "_Perspective Match" "rotate, scale and skew one image to match another" { action x y = class _result { _vislevel = 3; // try to find an image ... for a group, get the first item find_image x = x, is_Image x = find_image x?0, is_list x = find_image x.value, is_class x && has_value x = error "unable to find image"; _a = find_image x; _b = find_image y; ap1 = Mark_relative _a 0.1 0.1; ap2 = Mark_relative _a 0.9 0.1; ap3 = Mark_relative _a 0.1 0.9; ap4 = Mark_relative _a 0.9 0.9; bp1 = Mark_relative _b 0.1 0.1; bp2 = Mark_relative _b 0.9 0.1; bp3 = Mark_relative _b 0.1 0.9; bp4 = Mark_relative _b 0.9 0.9; _result = map_binary process x y { f1 = _a.width / _b.width; f2 = _a.height / _b.height; rl = sort_pts_clockwise [ap1, ap2, ap3, ap4]; pl = sort_pts_clockwise [bp1, bp2, bp3, bp4]; to = [ rl?0.left, rl?0.top, rl?1.left, rl?1.top, rl?2.left, rl?2.top, rl?3.left, rl?3.top ]; from = [ pl?0.left * f1, pl?0.top * f2, pl?1.left * f1, pl?1.top * f2, pl?2.left * f1, pl?2.top * f2, pl?3.left * f1, pl?3.top * f2 ]; trans = perspective_transform to from; process a b = transform 1 0 trans b2 { b2 = resize Interpolate_bilinear f1 f2 b, (f1 >= 1 && f2 >= 1) || (f1 >= 1 && f2 >= 1) = resize Interpolate_bilinear f1 1 b1 {b1 = resize Interpolate_bilinear 1 f2 b;} } } } }; //////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// Perspective_item = class Menuaction "Pe_rspective Distort" "rotate, scale and skew an image with respect to defined points" { action x = class _result { _vislevel = 3; // try to find an image ... for a group, get the first item find_image x = x, is_Image x = find_image x?0, is_list x = find_image x.value, is_class x && has_value x = error "unable to find image"; _a = find_image x; dir = Option "Select distort direction" [ "Distort to points", "Distort to corners" ] 1; ap1 = Mark_relative _a 0.1 0.1; ap2 = Mark_relative _a 0.9 0.1; ap3 = Mark_relative _a 0.9 0.9; ap4 = Mark_relative _a 0.1 0.9; _result = map_unary process x { trans = [perspective_transform to from, perspective_transform from to]?(dir.value) { rl = sort_pts_clockwise [ap1, ap2, ap3, ap4]; to = [(rl?0).left, (rl?0).top, (rl?1).left, (rl?1).top, (rl?2).left, (rl?2).top, (rl?3).left, (rl?3).top]; from=[0, 0, (_a.width - 1), 0, (_a.width - 1), (_a.height - 1), 0, (_a.height - 1)]; } process a = transform 1 0 trans a; } } }; nip2-8.7.0/share/nip2/compat/8.2/_generate.def0000644000175000017500000000755513224651032015506 00000000000000 /* make an image of size x by y whose pixels are their coordinates. */ make_xy x y = im_make_xy (to_real x) (to_real y); /* make an image with the specified properties ... pixel is (eg.) * Vector [0, 0, 0], or 12. If coding == labq, we ignore bands, format and * type, generate a 3 band float image, and lab2labq it before handing it * back. */ image_new w h b fmt coding type pixel xoff yoff = embed 1 0 0 w h im'''' { b' = 3, coding == Image_coding.LABPACK = b; fmt' = Image_format.FLOAT, coding == Image_coding.LABPACK = fmt; type' = Image_type.LAB, coding == Image_coding.LABPACK = type; im = im_black 1 1 (to_real b') + pixel; im' = clip2fmt fmt' im; im'' = im_Lab2LabQ im', coding == Image_coding.LABPACK; = im'; im''' = image_set_type type' im''; im'''' = image_set_origin xoff yoff im'''; } mkim options x y b = Image (image_new x y b (opt $format) (opt $coding) (opt $type) (opt $pixel) (opt $xoffset) (opt $yoffset)) { opt = get_option options [ $format => Image_format.UCHAR, $coding => Image_coding.NOCODING, $type => Image_type.sRGB, $pixel => 0, $xoffset => 0, $yoffset => 0 ]; } /* generate a slice of LAB space size x size pixels for L* == l */ lab_slice size l = image_set_type Image_type.LAB im { L = image_new size size 1 Image_format.FLOAT Image_coding.NOCODING Image_type.B_W l 0 0; A1 = im_fgrey (to_real size) (to_real size); /* im_fgrey always makes 0-1, so these ranges can be wired in. */ A2 = A1 * 256 - 128; A4 = im_rot90 A2; im = image_set_origin (size / 2) (size / 2) (L ++ A2 ++ A4); } /* Look at Image, try to make a Colour (failing that, a Vector) which is white * for that image type. */ image_white im = colour_transform_to type white_lab, bands == 3 && coding == Image_coding.NOCODING && colour_spaces.present 1 type = white_lab, coding == Image_coding.LABPACK = Vector (replicate bands (max_value.lookup 1 0 format)) { bands = im.bands; type = im.type; format = im.format; coding = im.coding; colour_spaces = Image_type.colour_spaces; // white as LAB white_lab = Colour "Lab" [100, 0, 0]; // maximum value for this numeric type max_value = Table [ [255, Image_format.DPCOMPLEX], [255, Image_format.DOUBLE], [255, Image_format.COMPLEX], [255, Image_format.FLOAT], [2 ** 31 - 1, Image_format.INT], [2 ** 32 - 1, Image_format.UINT], [2 ** 15 - 1, Image_format.SHORT], [2 ** 16 - 1, Image_format.USHORT], [2 ** 7 - 1, Image_format.CHAR], [2 ** 8 - 1, Image_format.UCHAR] ]; } /* Make a seperable gaussian mask. */ matrix_gaussian_blur radius = im_gauss_imask_sep (radius / 3) 0.2; /* Make a seperable square mask. */ matrix_blur radius = Matrix_con (sum mask_sq_line) 0 [mask_sq_line] { mask_sq_line = replicate (2 * radius - 1) 1; } /* Make a colour from a temperature. */ colour_from_temp T = error (_ "T out of range"), T < 1667 || T > 25000 = Colour "Yxy" [50, x, y] { // Kim et all approximation // see eg. http://en.wikipedia.org/wiki/Planckian_locus#Approximation x = -0.2661239 * 10 ** 9 / T ** 3 - 0.2343580 * 10 ** 6 / T ** 2 + 0.8776956 * 10 ** 3 / T + 0.179910, T < 4000 = -3.0258469 * 10 ** 9 / T ** 3 + 2.1070379 * 10 ** 6 / T ** 2 + 0.2226347 * 10 ** 3 / T + 0.240390; y = -1.1063814 * x ** 3 - 1.34811020 * x ** 2 + 2.18555832 * x - 0.20219638, T < 2222 = -0.9549476 * x ** 3 - 1.37418593 * x ** 2 + 2.09137015 * x - 0.16748867, T < 4000 = 3.0817580 * x ** 3 - 5.87338670 * x ** 2 + 3.75112997 * x - 0.37001483; } temp_from_colour z = T { c = colour_transform_to Image_type.YXY (to_colour z); x = c.value?1; y = c.value?2; // McCamy's approximation, see eg. // http://en.wikipedia.org/wiki/Color_temperature#Approximation xe = 0.332; ye = 0.1858; n = (x - xe) / (y - ye); T = -449 * n ** 3 + 3525 * n ** 2 - 6823.3 * n + 5520.33; } nip2-8.7.0/share/nip2/compat/8.2/Math.def0000644000175000017500000003162513224651032014441 00000000000000Math_arithmetic_item = class Menupullright "_Arithmetic" "basic arithmetic for objects" { Add_item = class Menuaction "_Add" "add a and b" { action a b = map_binary add a b; } Subtract_item = class Menuaction "_Subtract" "subtract b from a" { action a b = map_binary subtract a b; } Multiply_item = class Menuaction "_Multiply" "multiply a by b" { action a b = map_binary multiply a b; } Divide_item = class Menuaction "_Divide" "divide a by b" { action a b = map_binary divide a b; } Remainder_item = class Menuaction "_Remainder" "remainder after integer division of a by b" { action a b = map_binary remainder a b; } sep1 = Menuseparator; Absolute_value_item = class Menuaction "A_bsolute Value" "absolute value of x" { action x = map_unary abs x; } Absolute_value_vector_item = class Menuaction "Absolute Value _Vector" "like Absolute Value, but treat pixels as vectors" { action x = map_unary abs_vec x; } Sign_item = class Menuaction "S_ign" "unit vector" { action x = map_unary sign x; } Negate_item = class Menuaction "_Negate" "multiply by -1" { action x = map_unary unary_minus x; } } Math_trig_item = class Menupullright "_Trigonometry" "trigonometry operations (all in degrees)" { Sin_item = class Menuaction "_Sine" "calculate sine x" { action x = map_unary sin x; } Cos_item = class Menuaction "_Cosine" "calculate cosine x" { action x = map_unary cos x; } Tan_item = class Menuaction "_Tangent" "calculate tangent x" { action x = map_unary tan x; } sep1 = Menuseparator; Asin_item = class Menuaction "Arc S_ine" "calculate arc sine x" { action x = map_unary asin x; } Acos_item = class Menuaction "Arc C_osine" "calculate arc cosine x" { action x = map_unary acos x; } Atan_item = class Menuaction "Arc T_angent" "calculate arc tangent x" { action x = map_unary atan x; } sep2 = Menuseparator; Rad_item = class Menuaction "_Degrees to Radians" "convert degrees to radians" { action x = map_unary rad x; } Deg_item = class Menuaction "_Radians to Degrees" "convert radians to degrees" { action x = map_unary deg x; } sep3 = Menuseparator; Angle_range_item = class Menuaction "Angle i_n Range" "is angle within t degrees of r, mod 360" { action t r angle = clock (max - angle) < 2*r { max = clock (t + r); clock a = a + 360, a < 0; = a - 360, a >= 360; = a; } } } Math_log_item = class Menupullright "_Log" "logarithms and anti-logs" { Exponential_item = class Menuaction "_Exponential" "calculate e ** x" { action x = map_unary (power e) x; } Log_natural_item = class Menuaction "Natural _Log" "log base e of x" { action x = map_unary log x; } sep1 = Menuseparator; Exponential10_item = class Menuaction "E_xponential base 10" "calculate 10 ** x" { action x = map_unary (power 10) x; } Log10_item = class Menuaction "L_og Base 10" "log base 10 of x" { action x = map_unary log10 x; } sep2 = Menuseparator; Raise_to_power_item = class Menuaction "_Raise to Power" "calculate x ** y" { action x y = map_binary power x y; } } Math_complex_item = class Menupullright "_Complex" "operations on complex numbers and images" { Complex_extract = class Menupullright "_Extract" "extract fields from complex" { Real_item = class Menuaction "_Real" "extract real part of complex" { action in = map_unary re in; } Imaginary_item = class Menuaction "_Imaginary" "extract imaginary part of complex" { action in = map_unary im in; } } Complex_build_item = class Menuaction "_Build" "join a and b to make a complex" { action a b = map_binary comma a b; } sep1 = Menuseparator; Polar_item = class Menuaction "_Polar" "convert real and imag to amplitude and phase" { action a = map_unary polar a; } Rectangular_item = class Menuaction "_Rectagular" ("convert (amplitude, phase) image to rectangular " ++ "coordinates") { action x = map_unary rectangular x; } sep2 = Menuseparator; Conjugate_item = class Menuaction "_Conjugate" "invert imaginary part" { action x = map_unary conj x; } } Math_boolean_item = class Menupullright "_Boolean" "bitwise boolean operations for integer objects" { And_item = class Menuaction "_AND" "bitwise AND of a and b" { action a b = map_binary bitwise_and a b; } Or_item = class Menuaction "_OR" "bitwise OR of a and b" { action a b = map_binary bitwise_or a b; } Eor_item = class Menuaction "_XOR" "bitwise exclusive or of a and b" { action a b = map_binary eor a b; } Not_item = class Menuaction "_NOT" "invert a" { action a = map_unary not a; } sep1 = Menuseparator; Right_shift_item = class Menuaction "Shift _Right" "shift a right by b bits" { action a b = map_binary right_shift a b; } Left_shift_item = class Menuaction "Shift _Left" "shift a left by b bits" { action a b = map_binary left_shift a b; } sep2 = Menuseparator; If_then_else_item = class Menuaction "_If Then Else" "b where a is non-zero, c elsewhere" { action a b c = map_trinary ite a b c { // can't use if_then_else, we need a true trinary ite a b c = if a then b else c; } } Bandand_item = Image_band_item.Bandand_item; Bandor_item = Image_band_item.Bandor_item; } Math_relational_item = class Menupullright "R_elational" "comparison operations" { Equal_item = class Menuaction "_Equal to" "test a equal to b" { action a b = map_binary equal a b; } Not_equal_item = class Menuaction "_Not Equal to" "test a not equal to b" { action a b = map_binary not_equal a b; } sep1 = Menuseparator; More_item = class Menuaction "_More Than" "test a strictly greater than b" { action a b = map_binary more a b; } Less_item = class Menuaction "_Less Than" "test a strictly less than b" { action a b = map_binary less a b; } sep2 = Menuseparator; More_equal_item = class Menuaction "M_ore Than or Equal to" "test a greater than or equal to b" { action a b = map_binary more_equal a b; } Less_equal_item = class Menuaction "L_ess Than or Equal to" "test a less than or equal to b" { action a b = map_binary less_equal a b; } } Math_list_item = class Menupullright "L_ist" "operations on lists" { Head_item = class Menuaction "_Head" "first element in list" { action x = map_unary hd x; } Tail_item = class Menuaction "_Tail" "list without the first element" { action x = map_unary tl x; } Last_item = class Menuaction "_Last" "last element in list" { action x = map_unary last x; } Init_item = class Menuaction "_Init" "list without the last element" { action x = map_unary init x; } sep1 = Menuseparator; Reverse_item = class Menuaction "_Reverse" "reverse order of elements in list" { action x = map_unary reverse x; } Sort_item = class Menuaction "_Sort" "sort list into ascending order" { action x = map_unary sort x; } Make_set_item = class Menuaction "_Make Set" "remove duplicates from list" { action x = map_unary mkset equal x; } Transpose_list_item = class Menuaction "Tr_anspose" "exchange rows and columns in a list of lists" { action x = map_unary transpose x; } Concat_item = class Menuaction "_Concat" "flatten a list of lists into a single list" { action l = map_unary concat l; } sep2 = Menuseparator; Length_item = class Menuaction "L_ength" "find the length of list" { action x = map_unary len x; } Subscript_item = class Menuaction "S_ubscript" "return element n from list (index from zero)" { action n x = map_binary subscript n x; } Take_item = class Menuaction "_Take" "take the first n elements of list x" { action n x = map_binary take n x; } Drop_item = class Menuaction "_Drop" "drop the first n elements of list x" { action n x = map_binary drop n x; } sep3 = Menuseparator; Join_item = class Menuaction "_Join" "join two lists end to end" { action a b = map_binary join a b; } Difference_item = class Menuaction "_Difference" "difference of two lists" { action a b = map_binary difference a b; } Cons_item = class Menuaction "C_ons" "put element a on the front of list x" { action a x = map_binary cons a x; } Zip_item = class Menuaction "_Zip" "join two lists, pairwise" { action a b = map_binary zip2 a b; } } Math_round_item = class Menupullright "_Round" "various rounding operations" { /* smallest integral value not less than x */ Ceil_item = class Menuaction "_Ceil" "smallest integral value not less than x" { action x = map_unary ceil x; } Floor_item = class Menuaction "_Floor" "largest integral value not greater than x" { action x = map_unary floor x; } Rint_item = class Menuaction "_Round to Nearest" "round to nearest integer" { action x = map_unary rint x; } } Math_fourier_item = class Menupullright "_Fourier" "Fourier transform" { Forward_item = class Menuaction "_Forward" "fourier transform of image" { action a = map_unary (rotquad @ fwfft) a; } Reverse_item = class Menuaction "_Reverse" "inverse fourier transform of image" { action a = map_unary (invfft @ rotquad) a; } Rotate_quadrants_item = class Menuaction "Rotate _Quadrants" "rotate quadrants" { action a = map_unary rotquad a; } } Math_stats_item = class Menupullright "_Statistics" "measure various statistics of objects" { Value_item = class Menuaction "_Value" "value of point in object" { action a = class _result { _vislevel = 3; position = Expression "Coordinate" (0, 0); _result = map_binary point position.expr a; } } Mean_item = class Menuaction "_Mean" "arithmetic mean value" { action a = map_unary mean a; } Gmean_item = class Menuaction "_Geometric Mean" "geometric mean value" { action a = map_unary meang a; } Zmean_item = class Menuaction "_Zero-excluding Mean" "mean value of non-zero elements" { action a = map_unary meanze a; } Deviation_item = class Menuaction "_Standard Deviation" "standard deviation of object" { action a = map_unary deviation a; } Zdeviation_item = class Menuaction "Z_ero-excluding Standard Deviation" "standard deviation of non-zero elements" { action a = map_unary deviationze a; } Skew_item = class Menuaction "S_kew" "skew of image or list or vector" { action a = map_unary skew a; } Kurtosis_item = class Menuaction "Kurtosis" "kurtosis of image or list or vector" { action a = map_unary kurtosis a; } Stats_item = class Menuaction "Ma_ny Stats" "calculate many stats in a single pass" { action a = map_unary stats a; } sep1 = Menuseparator; Max_item = class Menuaction "M_aximum" "maximum of object" { action a = map_unary max a; } Min_item = class Menuaction "M_inimum" "minimum of object" { action a = map_unary min a; } Maxpos_item = class Menuaction "_Position of Maximum" "position of maximum in object" { action a = map_unary maxpos a; } Minpos_item = class Menuaction "P_osition of Minimum" "position of minimum in object" { action a = map_unary minpos a; } Gravity_item = class Menuaction "Centre of _Gravity" "position of centre of gravity of histogram" { action a = map_unary gravity a; } sep2 = Menuseparator; Count_set_item = class Menuaction "_Non-zeros" "number of non-zero elements in object" { action a = map_unary cset a { cset i = (mean (i != 0) * i.width * i.height) / 255; } } Count_clear_item = class Menuaction "_Zeros" "number of zero elements in object" { action a = map_unary cclear a { cclear i = (mean (i == 0) * i.width * i.height) / 255; } } Count_edges_item = class Menuaction "_Edges" "count average edges across or down image" { action x = class _result { _vislevel = 3; edge = Option "Count" [ "Horizontal lines", "Vertical lines" ] 0; _result = map_unary process x { process image = Number (edge.labels?edge) (im_cntlines image.value edge.value); } } } sep3 = Menuseparator; Linear_regression_item = class Menuaction "_Linear Regression" "fit a line to a set of points" { action xes yes = linreg xes yes; } Weighted_linear_regression_item = class Menuaction "_Weighted Linear Regression" "fit a line to a set of points and deviations" { action xes yes devs = linregw xes yes devs; } Cluster_item = class Menuaction "_Cluster" "cluster a list of numbers" { action l = class { _vislevel = 3; thresh = Expression "Threshold" 10; [_r, _w] = cluster thresh.expr l; result = _r; weights = _w; } } } Math_base_item = class Menupullright "Bas_e" "convert number bases" { Hexadecimal_item = class Menuaction "_Hexadecimal" "convert to hexadecimal (base 16)" { action a = map_unary (print_base 16) a; } Binary_item = class Menuaction "_Binary" "convert to binary (base 2)" { action a = map_unary (print_base 2) a; } Octal_item = class Menuaction "_Octal" "convert to octal (base 8)" { action a = map_unary (print_base 8) a; } } nip2-8.7.0/share/nip2/compat/8.2/Tasks.def0000644000175000017500000006411113224651032014631 00000000000000Tasks_capture_item = class Menupullright "_Capture" "useful stuff for capturing and preprocessing images" { Csv_import_item = class Menuaction "_CSV Import" "read a file of comma-separated values" { action = class _result { _vislevel = 3; path = Pathname "File to load" "empty"; start_line = Expression "Start at line" 1; rows = Expression "Lines to read (-1 for whole file)" (-1); whitespace = String "Whitespace characters" " \""; separator = String "Separator characters" ",;\t"; _result = Image blank, path.value == "empty" = Image (im_csv2vips filename) { filename = search (expand path.value) ++ ":" ++ "skip:" ++ print (start_line.expr - 1) ++ "," ++ "whi:" ++ escape whitespace.value ++ "," ++ "sep:" ++ escape separator.value ++ "," ++ "line:" ++ print rows.expr; // prefix any ',' with a '\' in the separators line escape x = foldr prefix [] x { prefix x l = '\\' : x : l, x == ',' = x : l; } blank = image_new 1 1 1 Image_format.DOUBLE Image_coding.NOCODING Image_type.B_W 0 0 0; } } } Raw_import_item = class Menuaction "_Raw Import" "read a file of binary values" { action = class _result { _vislevel = 3; path = Pathname "File to load" "empty"; across = Expression "Pixels across" 100; down = Expression "Pixels down" 100; bytes = Expression "Bytes per pixel" 3; skip = Expression "Skip over initial bytes" 0; _result = Image blank, path.value == "empty" = Image (im_binfile path.value across.expr down.expr bytes.expr skip.expr) { blank = image_new 1 1 1 Image_format.DOUBLE Image_coding.NOCODING Image_type.B_W 0 0 0; } } } // interpret Analyze header for layout and calibration Analyze7_header_item = class Menuaction "_Interpret Analyze 7 Header" "examine the Analyze header and set layout and value" { action x = x''' { // read bits of header dim n = get_header ("dsr-image_dimension.dim[" ++ print n ++ "]"); dim0 = dim 0 x; dim1 = dim 1 x; dim2 = dim 2 x; dim3 = dim 3 x; dim4 = dim 4 x; dim5 = dim 5 x; dim6 = dim 6 x; dim7 = dim 7 x; glmax = get_header "dsr-image_dimension.glmax" x; cal_max = get_header "dsr-image_dimension.cal_max" x; // oops, now a nop x' = x; // lay out higher dimensions width-ways x'' = grid dim2 dim3 1 x', dim0 == 3 = grid dim2 dim3 dim4 x', dim0 == 4 = grid (dim2 * dim4) dim5 1 (grid dim2 dim3 dim4) x', dim0 == 5 = grid (dim2 * dim4) dim5 dim6 (grid dim2 dim3 dim4) x', dim0 == 6 = grid (dim2 * dim4 * dim6) dim7 1 (grid (dim2 * dim4) dim5 dim6 (grid dim2 dim3 dim4)) x', dim0 == 7 = error (_ "unsupported dimension " ++ dim0); // multiply by scale factor to get kBeq x''' = x'' * (cal_max / glmax); } } Video_item = class Menuaction "Capture _Video Frame" "capture a frame of still video" { // shortcut to prefs prefs = Workspaces.Preferences; action = class _result { _vislevel = 3; device = prefs.VIDEO_DEVICE; channel = Option "Input channel" [ "TV", "Composite 1", "Composite 2", "Composite 3" ] prefs.VIDEO_CHANNEL; b = Scale "Brightness" 0 32767 prefs.VIDEO_BRIGHTNESS; col = Scale "Colour" 0 32767 prefs.VIDEO_COLOUR; con = Scale "Contrast" 0 32767 prefs.VIDEO_CONTRAST; hue = Scale "Hue" 0 32767 prefs.VIDEO_HUE; frames = Scale "Frames to average" 0 100 prefs.VIDEO_FRAMES; mono = Toggle "Monochrome grab" prefs.VIDEO_MONO; crop = Toggle "Crop image" prefs.VIDEO_CROP; // grab, but hide it ... if we let the crop edit _raw_grab = Image (im_video_v4l1 device channel.value b.value col.value con.value hue.value frames.value); edit_crop = Region _raw_grab left top width height { left = prefs.VIDEO_CROP_LEFT; top = prefs.VIDEO_CROP_TOP; width = min_pair prefs.VIDEO_CROP_WIDTH (_raw_grab.width + left); height = min_pair prefs.VIDEO_CROP_HEIGHT (_raw_grab.height + top); } aspect_ratio = Expression "Stretch vertically by" prefs.VIDEO_ASPECT; _result = frame' { frame = edit_crop, crop = _raw_grab; frame' = colour_transform_to Image_type.B_W frame, mono = frame; } } } Smooth_image_item = class Menuaction "_Smooth" "remove small features from image" { action in = class _result { _vislevel = 3; feature = Scale "Minimum feature size" 1 50 20; _result = map_unary (smooth feature.value) in; } } Light_correct_item = class Menuaction "_Flatfield" "use white image w to flatfield image i" { action w i = map_binary wc w i { wc w i = clip2fmt i.format (w' * i) { fac = mean w / max w; w' = fac * (max w / w); } } } Image_rank_item = Filter_rank_item.Image_rank_item; Tilt_item = Filter_tilt_item; sep1 = Menuseparator; White_balance_item = class Menuaction "_White Balance" "use average of small image to set white of large image" { action a b = class _result { _vislevel = 3; white_hint = "Set image white to:"; white = Colour_picker "Lab" [100, 0, 0]; _result = map_binary wb a b { wb a b = colour_transform_to (get_type image) image_xyz' { area x = x.width * x.height; larger x y = area x > area y; [image, patch] = sortc larger [a, b]; to_xyz = colour_transform_to Image_type.XYZ; // white balance in XYZ patch_xyz = to_colour (to_xyz patch); white_xyz = to_xyz white; facs = (mean patch_xyz / mean white_xyz) * (white_xyz / patch_xyz); image_xyz = to_xyz image; image_xyz' = image_xyz * facs; } } } } Gamma_item = Image_levels_item.Gamma_item; Tone_item = Image_levels_item.Tone_item; sep2 = Menuseparator; Crop_item = Image_crop_item; Rotate_item = Image_transform_item.Rotate_item; Flip_item = Image_transform_item.Flip_item; Resize_item = Image_transform_item.Resize_item; Rubber_item = Image_transform_item.Image_rubber_item; sep3 = Menuseparator; ICC_item = Colour_icc_item; Temp_item = Colour_temperature_item; Find_calib_item = class Menuaction "Find _Colour Calibration" "find an RGB -> XYZ transform from an image of a colour chart" { action image = class _result { _check_args = [ [image, "image", check_Image] ]; _vislevel = 3; measure = Scale (_ "Measure area (%)") 1 100 50; sample = measure_draw 6 4 (to_real measure) image; // get macbeth data file to use macbeth = Pathname "Pick a Macbeth data file" "$VIPSHOME/share/$PACKAGE/data/macbeth_lab_d65.mat"; mode = Option "Input LUT" [ "Linearize from chart greyscale", "Fit intercept from chart greyscale", "Linear input, set brightness from chart", "Linear input" ] 0; // get max of input image _max_value = Image_format.maxval image.format; // measure chart image _camera = measure_sample 6 4 (to_real measure) image; // load true values _true_Lab = Matrix_file macbeth.value; _true_XYZ = colour_transform Image_type.LAB Image_type.XYZ _true_Lab; // get Ys of greyscale _true_grey_Y = map (extract 1) (drop 18 _true_XYZ.value); // camera greyscale (all bands) _camera_grey = drop 18 _camera.value; // normalise both to 0-1 and combine _camera_grey' = map (map (multiply (1 / _max_value))) _camera_grey; _true_grey_Y' = map (multiply (1 / 100)) _true_grey_Y; _comb = Matrix (map2 cons _true_grey_Y' _camera_grey'), mode == 0 = Matrix [0: intercepts, replicate (_camera.width + 1) 1], mode == 1 = Matrix [[0, 0], [1, 1]] { intercepts = [(linreg _true_grey_Y' cam).intercept :: cam <- transpose _camera_grey']; } // make a linearising lut ... zero on left _linear_lut = im_invertlut _comb (_max_value + 1); // and display it // plot from 0 explicitly so we see the effect of mode1 (intercept // from greyscale) linearising_lut = Plot [$ymin => 0] _linear_lut; // map an image though the lineariser linear x = hist_map linearising_lut.value x, mode == 0 || mode == 1 = x; // map the chart measurements though the lineariser _camera' = (to_matrix @ linear @ to_image) _camera; // solve for RGB -> XYZ // normalise: the 2nd row is what makes Y, so divide by that to // get Y in 0-1. _pinv = (transpose _camera' * _camera') ** -1; _full_M = transpose (_pinv * (transpose _camera' * _true_XYZ)); M = _full_M / scale; scale = sum _full_M.value?1; // now turn the camera to LAB and calculate dE76 _camera'' = (to_matrix @ colour_transform Image_type.XYZ Image_type.LAB @ recomb M @ multiply scale @ to_image) _camera'; _dEs = map abs_vec (_camera'' - _true_Lab).value; avg_dE76 = mean _dEs; _max_dE = foldr max_pair 0 _dEs; _worst = index (equal _max_dE) _dEs; worst_patch = name _worst ++ " (patch " ++ print (_worst + 1) ++ ", " ++ print _max_dE ++ " dE)" { name i = macbeth_names?i, i >= 0 && i < len macbeth_names = "Unknown"; } // normalise brightness ... in linear mode, we optionally don't // set the brightness from the Macbeth chart norm x = x * scale, mode != 3 = x; // convert RGB camera to Lab _result = (Image @ colour_transform Image_type.XYZ Image_type.LAB @ norm @ recomb M @ cast_float @ linear) image.value; } } Apply_calib_item = class Menuaction "_Apply Colour Calibration" "apply an RGB -> LAB transform to an image" { action a b = class (map_binary process a b) { process a b = result, is_instanceof calib_name calib && is_Image image = error (_ "bad arguments to " ++ "Calibrate_image") { // the name of the calib object we need calib_name = "Tasks_capture_item.Find_calib_item.action"; // get the Calibrate_chart arg first [image, calib] = sortc (const (is_instanceof calib_name)) [a, b]; result = (Image @ colour_transform Image_type.XYZ Image_type.LAB @ calib.norm @ recomb calib.M @ cast_float @ calib.linear) image.value; } } } sep4 = Menuseparator; Graph_hist_item = Hist_find_item; Graph_bands_item = class Menuaction "Plot _Bands" "show image bands as a graph" { action x = class _result { _vislevel = 3; style = Option_enum "Style" Plot_style.names "Line"; auto = Toggle "Auto Range" true; ymin = Expression "Y range minimum" 0; ymax = Expression "Y range maximum" 1; _result = Plot options (to_image (bands (image x))).value { options = [$style => style.value] ++ if auto then [] else [$ymin => ymin.expr, $ymax => ymax.expr]; // try to make something image-like from it image x = extract_area x.left x.top 1 1 x.image, is_Mark x = get_image x, has_image x = get_image (to_image x); // get as [[1],[2],[3]] bands x = transpose [map mean (bandsplit x)]; } } } } Tasks_mosaic_item = class Menupullright "_Mosaic" "build image mosaics" { /* Check and group a point list by image. */ mosaic_sort_test l = error "mosaic: not all points", !is_listof is_Mark l = error "mosaic: points not on two images", !is_list_len 2 images = error "mosaic: images do not match in format and coding", !all_equal (map get_format l) || !all_equal (map get_coding l) = error "mosaic: not same number of points on each image", !foldr1 equal (map len l') = l' { // test for all elements of a list equal all_equal l = all (map (equal (hd l)) (tl l)); // all the different images images = mkset pointer_equal (map get_image l); // find all points defined on image test_image image p = (get_image p) === image; find l image = filter (test_image image) l; // group point list by image l' = map (find l) images; } /* Sort a point group to get right before left, and within each group to * get above before below. */ mosaic_sort_lr l = l'' { // sort to get upper point first above a b = a.top < b.top; l' = map (sortc above) l; // sort to get right group before left group right a b = a?0.left > b?0.left; l'' = sortc right l'; } /* Sort a point group to get top before bottom, and within each group to * get left before right. */ mosaic_sort_tb l = l'' { // sort to get upper point first left a b = a.left < b.left; l' = map (sortc left) l; // sort to get right group before left group below a b = a?0.top > b?0.top; l'' = sortc below l'; } /* Put 'em together! Group by image, sort vertically (or horizontally) with * one of the above, transpose to get pairs matched up, and flatten again. */ mosaic_sort fn = concat @ transpose @ fn @ mosaic_sort_test; Mosaic_1point_item = class Menupullright "_One Point" "join two images with a single tie point" { check_ab_args a b = [ [a, "a", check_Mark], [b, "b", check_Mark] ]; // shortcut to prefs prefs = Workspaces.Preferences; search_area = prefs.MOSAIC_WINDOW_SIZE; object_size = prefs.MOSAIC_OBJECT_SIZE; blend_width_widget = Scale "Maximum blend width" 0 100 prefs.MOSAIC_MAX_BLEND_WIDTH; refine_widget = Toggle "Refine selected tie-points" prefs.MOSAIC_REFINE; lr_mos _refine a b = class Image _result { _check_args = check_ab_args a b; bw = blend_width_widget; refine = _refine; _result = im_lrmosaic a'.image.value b'.image.value 0 a'.left a'.top b'.left b'.top (object_size / 2) (search_area / 2) 0 bw.value, refine = im_lrmerge a'.image.value b'.image.value (b'.left - a'.left) (b'.top - a'.top) bw.value { [a', b'] = mosaic_sort mosaic_sort_lr [a, b]; } } tb_mos _refine a b = class Image _result { _check_args = check_ab_args a b; bw = blend_width_widget; refine = _refine; _result = im_tbmosaic a'.image.value b'.image.value 0 a'.left a'.top b'.left b'.top (object_size / 2) (search_area / 2) 0 bw.value, refine = im_tbmerge a'.image.value b'.image.value (b'.left - a'.left) (b'.top - a'.top) bw.value { [a', b'] = mosaic_sort mosaic_sort_tb [a, b]; } } Left_right_item = class Menuaction "_Left to Right" "join two images left-right with a single tie point" { action a b = lr_mos refine_widget a b; } Top_bottom_item = class Menuaction "_Top to Bottom" "join two images top-bottom with a single tie point" { action a b = tb_mos refine_widget a b; } sep1 = Menuseparator; Left_right_manual_item = class Menuaction "Manual L_eft to Right" "join left-right, no auto-adjust of tie points" { action a b = lr_mos false a b; } Top_bottom_manual_item = class Menuaction "Manual T_op to Bottom" "join top-bottom, no auto-adjust of tie points" { action a b = tb_mos false a b; } } Mosaic_2point_item = class Menupullright "_Two Point" "join two images with two tie points" { check_abcd_args a b c d = [ [a, "a", check_Mark], [b, "b", check_Mark], [c, "c", check_Mark], [d, "d", check_Mark] ]; // shortcut to prefs prefs = Workspaces.Preferences; search_area = prefs.MOSAIC_WINDOW_SIZE; object_size = prefs.MOSAIC_OBJECT_SIZE; blend_width_widget = Scale "Maximum blend width" 0 100 prefs.MOSAIC_MAX_BLEND_WIDTH; refine_widget = Toggle "Refine selected tie-points" prefs.MOSAIC_REFINE; Left_right_item = class Menuaction "_Left to Right" "join two images left-right with a pair of tie points" { action a b c d = class Image _result { _check_args = check_abcd_args a b c d; bw = blend_width_widget; refine = refine_widget; _result = im_lrmosaic1 a'.image.value b'.image.value 0 a'.left a'.top b'.left b'.top c'.left c'.top d'.left d'.top (object_size / 2) (search_area / 2) 0 bw.value, refine = im_lrmerge1 a'.image.value b'.image.value a'.left a'.top b'.left b'.top c'.left c'.top d'.left d'.top bw.value { [a', b', c', d'] = mosaic_sort mosaic_sort_lr [a, b, c, d]; } } } Top_bottom_item = class Menuaction "_Top to Bottom" "join two images top-bottom with a pair of tie points" { action a b c d = class Image _result { _check_args = check_abcd_args a b c d; bw = blend_width_widget; refine = refine_widget; _result = im_tbmosaic1 a'.image.value b'.image.value 0 a'.left a'.top b'.left b'.top c'.left c'.top d'.left d'.top (object_size / 2) (search_area / 2) 0 bw.value, refine = im_tbmerge1 a'.image.value b'.image.value a'.left a'.top b'.left b'.top c'.left c'.top d'.left d'.top bw.value { [a', b', c', d'] = mosaic_sort mosaic_sort_tb [a, b, c, d]; } } } } sep1 = Menuseparator; Balance_item = class Menuaction "Mosaic _Balance" "disassemble mosaic, scale brightness to match, reassemble" { action x = map_unary balance x { balance x = oo_unary_function balance_op x, is_class x = im_global_balancef x Workspaces.Preferences.MOSAIC_BALANCE_GAMMA, is_image x = error (_ "bad arguments to " ++ "balance") { balance_op = Operator "balance" balance Operator_type.COMPOUND_REWRAP false; } } } //////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// Manual_balance_item = class Menupullright "Manual B_alance" "balance tonality of user defined areas" { prefs = Workspaces.Preferences; //////////////////////////////////////////////////////////////////////////////////// Balance_find_item = class Menuaction "_Find Values" "calculates values required to scale and offset balance user defined areas in a given image" /* Outputs a matrix of scale and offset values. Eg. Values required to balance the secondary * structure in an X-ray image. Takes an X-ray image an 8-bit control mask and a list of * 8-bit reference masks, where the masks are white on a black background. */ { action im_in m_control m_group = class Matrix values{ _vislevel = 1; _control_im = if m_control then im_in else 0; _control_meanmax = so_meanmax _control_im; _group_check = is_Group m_group; _m_list = m_group.value, _group_check = m_group; process m_current mat_in = mat_out {so_values = so_calculate _control_meanmax im_in m_current; mat_out = join [so_values] mat_in;} values = (foldr process [] _m_list); } } //////////////////////////////////////////////////////////////////////////////////// Balance_check_item = class Menuaction "_Check Values" "allows calculated set of scale and offset values to be checked and adjusted if required" /* Outputs adjusted matrix of scale and offset values and scale and offset image maps. * Eg. Check values required to balance the secondary structure in an X-ray image. * Takes an X-ray image an 8-bit control mask and a list of 8-bit reference masks, * where the masks are white on a black background. */ { action im_in m_matrix m_group = class Image value { _vislevel = 3; blur = Scale "Blur" 1 10 1; _blur = (blur.value/2 + 0.5), blur.value > 1 = 1; _group_check = is_Group m_group; _m_list = m_group.value, _group_check = m_group; adjust = Matrix_rec mat_a { no_masks = len _m_list; mat_a = replicate no_masks [0, 0]; } // Apply the user defined adjustments to the inputted matrix of scale and offset values _adjusted = map2 fn_adjust m_matrix.value adjust.value; fn_adjust a b = [(a?0 + b?0), (a?1 + (a?1 * b?1))]; _scaled_ims = map (fn_so_apply im_in) _adjusted; fn_so_apply im so = map_unary adj im {adj im = im * (so?0) + (so?1);} _im_pairs = zip2 _m_list _scaled_ims; // Prepare black images as starting point. //////////// _blank = image_new (_m_list?0).width (_m_list?0).height 1 6 Image_coding.NOCODING 1 0 0 0; _pair_start = [(_blank + 1), _blank]; Build = Toggle "Build Scale and Offset Correction Images" false; Output = class { _vislevel = 1; scale_im = _build?0; offset_im = _build?1; so_values = Matrix _adjusted; _build = [Image so_images?0, Image so_images?1], Build = ["Scale image not built.", "Offset image not built."] { m_list' = transpose [_m_list]; m_all = map2 join m_list' _adjusted; so_images = foldr process_2 _pair_start m_all; } } value = (foldr process_1 im_in_b _im_pairs).value {im_in_b = map_unary cast_float im_in;} process_1 m_current im_start = im_out { bl_mask = convsep (matrix_blur _blur) (get_image m_current?0); blended_im = im_blend bl_mask (m_current?1).value im_start.value; im_out = Image (clip2fmt im_start.format blended_im); } // Process for building scale and offset image. process_2 current p_start = p_out { im_s = if ((current?0) > 128) then current?1 else _blank; im_o = if ((current?0) > 128) then current?2 else _blank; im_s' = convsep (matrix_blur _blur) (im_s != 0); im_o' = convsep (matrix_blur _blur) (im_o != 0); im_s'' = im_blend im_s'.value im_s.value p_start?0; im_o'' = im_blend im_o'.value im_o.value p_start?1; p_out = [im_s'', im_o'']; } } } //////////////////////////////////////////////////////////////////////////////////// Balance_apply_item = class Menuaction "_Apply Values" "apply scale and offset corrections, defined as image maps, to a given image" /* Outputs the balanced image. Eg. Balance the secondary structure in an X-ray image. Takes an * X-ray image an 32-bit float scale image and a 32-bit offset image. */ { action im_in scale_im offset_im = class Image value { _vislevel = 1; xfactor = im_in.width/scale_im.width; yfactor = im_in.height/scale_im.height; _scale_im = resize Interpolate_bilinear xfactor yfactor scale_im; _offset_im = resize Interpolate_bilinear xfactor yfactor offset_im; value = get_image ( clip2fmt im_in.format ( ( im_in * _scale_im ) + _offset_im ) ); } } } Tilt_item = Filter_tilt_item; sep2 = Menuseparator; Rebuild_item = class Menuaction "_Rebuild" "disassemble mosaic, substitute image files and reassemble" { action x = class _result { _vislevel = 3; old = String "In each filename, replace" "foo"; new = String "With" "bar"; _result = map_unary remosaic x { remosaic image = Image (im_remosaic image.value old.value new.value); } } } sep3 = Menuseparator; Clone_area_item = class Menuaction "_Clone Area" "replace dark or light section of im1 with pixels from im2" { action im1 im2 = class _result { _check_args = [ [im1, "im1", check_Image], [im2, "im2", check_Image] ]; _vislevel = 3; /* Region on first image placed in the top left hand corner, * positioned and size relative to the height and width of im1. */ r1 = Region_relative im1 0.05 0.05 0.05 0.05; /* Mark on second image placed in the top left hand corner, * positioned relative to the height and width of im2. Used to * define _r2, the region from which the section of image is cloned * from. */ p2 = Mark_relative im2 0.05 0.05; _r2 = Region im2 p2.left p2.top r1.width r1.height; mask = [r1 <= Options.sc, r1 >= Options.sc]?(Options.replace); Options = class { _vislevel = 3; pause = Toggle "Pause process" true; /* Option toggle used to define whether the user is * replacing a dark or a light area. */ replace = Option "Replace" [ "A Dark Area", "A Light Area" ] 1; // Used to select the area to be replaced. sc = Scale "Scale cutoff" 0.01 mx (mx / 2) {mx = Image_format.maxval im1.format;} //Allows replacement with scale&offset balanced gaussian noise. balance = Toggle "Balance cloned data to match surroundings." true; //Allows replacement with scale&offset balanced //gaussian noise. process = Toggle "Replace area with Gaussian noise." false; } _result = im1, Options.pause = Image (im_insert im1.value patch r1.left r1.top) { r2 = Region im2 p2.left p2.top r1.width r1.height; ref_meanmax = so_meanmax (if mask then 0 else r1); mask8 = Matrix_mor [[255, 255, 255], [255, 255, 255], [255, 255, 255]]; mask_a = map_unary (dilate mask8) mask; mask_b = convsep (matrix_blur 2) mask_a; patch = so_balance ref_meanmax r1 r2 mask_b Options.process, Options.balance = so_balance ref_meanmax r1 r2 mask_b Options.process, Options.process = im_blend (get_image mask_b) (get_image r2) (get_image r1); } } } } Tasks_frame_item = Frame_item; Tasks_print_item = class Menupullright "_Print" "useful stuff for image output" { Rotate_item = Image_transform_item.Rotate_item; Flip_item = Image_transform_item.Flip_item; Resize_item = Image_transform_item.Resize_item; Tone_item = Image_levels_item.Tone_item; Sharpen_item = class Menuaction "_Sharpen" "unsharp filter tuned for typical inkjet printers" { action x = class _result { _vislevel = 3; target_dpi = Option "Sharpen for print at" [ "400 dpi", "300 dpi", "150 dpi", "75 dpi" ] 1; _result = map_unary process x { process image = sharpen params?0 params?1 params?2 params?3 params?4 params?5 (colour_transform_to Image_type.LABQ image) { // sharpen params for various dpi // just change the size of the area we search param_table = [ [7, 2.5, 40, 20, 0.5, 1.5], [5, 2.5, 40, 20, 0.5, 1.5], [3, 2.5, 40, 20, 0.5, 1.5], [11, 2.5, 40, 20, 0.5, 1.5] ]; params = param_table?target_dpi; } } } } sep1 = Menuseparator; Temp_item = Colour_temperature_item; ICC_item = Colour_icc_item; } nip2-8.7.0/share/nip2/compat/8.2/_types.def0000644000175000017500000006744113224651032015060 00000000000000/* A list of things. Do automatic iteration of unary and binary operators on * us. * List [1, 2] + [2, 3] -> List [3, 5] * hd (List [2, 3]) -> 2 * List [] == [] -> true */ List value = class _Object { _check_args = [ [value, "value", check_list] ]; // methods oo_binary_table op x = [ [apply2 op value x', op.op_name == "subscript" || op.op_name == "subscript'" || op.op_name == "equal" || op.op_name == "equal'"], [this.List (apply2 op value x'), op.op_name == "join" || op.op_name == "join'"], [this.List (map2 (apply2 op) value x'), is_list x'], [this.List (map (apply2 op' x) value), true] ] ++ super.oo_binary_table op x { op' = oo_converse op; // strip the List wrapper, if any x' = x.value, is_List x = x; apply2 op x1 x2 = oo_binary_function op x1 x2, is_class x1 = oo_binary'_function op x1 x2, is_class x2 = op.fn x1 x2; }; oo_unary_table op = [ [apply value, op.op_name == "hd" || op.op_name == "tl"], [this.List (map apply value), true] ] ++ super.oo_unary_table op { apply x = oo_unary_function op x, is_class x = op.fn x; } } /* A group of things. Loop the operation over the group. */ Group value = class _Object { _check_args = [ [value, "value", check_list] ]; // methods oo_binary_table op x = [ // if_then_else is really a trinary operator [map_trinary ite this x?0 x?1, op.op_name == "if_then_else"], [map_binary op.fn this x, is_Group x], [map_unary (\a op.fn a x) this, true] ] ++ super.oo_binary_table op x; oo_unary_table op = [ [map_unary op.fn this, true] ] ++ super.oo_unary_table op; // we can't call map_trinary directly, since it uses Group and we // don't support mutually recursive top-level functions :-( // copy-paste it here, keep in sync with the version in _stdenv map_nary fn args = fn args, groups == [] = Group (map process [0, 1 .. shortest - 1]) { groups = filter is_Group args; shortest = foldr1 min_pair (map (len @ get_value) groups); process n = NULL, any (map (is_noval n) args) = map_nary fn (map (extract n) args) { extract n arg = arg.value?n, is_Group arg = arg; is_noval n arg = is_Group arg && arg.value?n == NULL; } } // need ite as a true trinary ite a b c = if a then b else c; map_unary fn a = map_nary (list_1ary fn) [a]; map_binary fn a b = map_nary (list_2ary fn) [a, b]; map_trinary fn a b c = map_nary (list_3ary fn) [a, b, c]; } /* Single real number ... eg slider. */ Real value = class _Object { _check_args = [ [value, "value", check_real] ]; // methods oo_binary_table op x = [ [this.Real (op.fn this.value x.value), is_Real x && op.type == Operator_type.ARITHMETIC], [this.Real (op.fn this.value x), is_real x && op.type == Operator_type.ARITHMETIC], [op.fn this.value x.value, is_Real x && op.type == Operator_type.RELATIONAL], [op.fn this.value x, !is_class x] ] ++ super.oo_binary_table op x; oo_unary_table op = [ [this.Real (op.fn this.value), op.type == Operator_type.ARITHMETIC], [op.fn this.value, true] ] ++ super.oo_unary_table op; } /* Single bool ... eg Toggle. */ Bool value = class _Object { _check_args = [ [value, "value", check_bool] ]; // methods oo_binary_table op x = [ [op.fn this.value x, op.op_name == "if_then_else"], [this.Bool (op.fn this.value x.value), is_Bool x], [this.Bool (op.fn this.value x), is_bool x] ] ++ super.oo_binary_table op x; oo_unary_table op = [ [this.Bool (op.fn this.value), op.type == Operator_type.ARITHMETIC || op.type == Operator_type.RELATIONAL], [op.fn this.value, true] ] ++ super.oo_unary_table op; } /* An editable string. */ String caption value = class _Object { _check_args = [ [caption, "caption", check_string], [value, "value", check_string] ]; } /* An editable real number. */ Number caption value = class scope.Real value { _check_args = [ [caption, "caption", check_string] ]; Real x = this.Number caption x; } /* An editable expression. */ Expression caption expr = class (if is_class expr then expr else _Object) { _check_args = [ [caption, "caption", check_string], [expr, "expr", check_any] ]; } /* A ticking clock. */ Clock interval value = class scope.Real value { _check_args = [ [interval, "interval", check_real] ]; Real x = this.Clock interval x; } /* An editable filename. */ Pathname caption value = class _Object { _check_args = [ [caption, "caption", check_string], [value, "value", check_string] ]; } /* An editable fontname. */ Fontname caption value = class _Object { _check_args = [ [caption, "caption", check_string], [value, "value", check_string] ]; } /* Vector type ... just a finite list of real. Handy for wrapping an * argument to eg. im_lintra_vec. Make it behave like a single pixel image. */ Vector value = class _Object { _check_args = [ [value, "value", check_real_list] ]; bands = len value; // methods oo_binary_table op x = [ // Vector ++ Vector means bandwise join [this.Vector (op.fn this.value x.value), is_Vector x && (op.op_name == "join" || op.op_name == "join'")], [this.Vector (op.fn this.value [get_number x]), has_number x && (op.op_name == "join" || op.op_name == "join'")], // Vector ? number means extract element [op.fn this.value (get_real x), has_real x && (op.op_name == "subscript" || op.op_name == "subscript'")], // extra check for lengths equal [this.Vector (map_binaryl op.fn this.value x.value), is_Vector x && len value == len x.value && op.type == Operator_type.ARITHMETIC], [this.Vector (map_binaryl op.fn this.value (get_real x)), has_real x && op.type == Operator_type.ARITHMETIC], // need extra length check [this.Vector (map bool_to_real (map_binaryl op.fn this.value x.value)), is_Vector x && len value == len x.value && op.type == Operator_type.RELATIONAL], [this.Vector (map bool_to_real (map_binaryl op.fn this.value (get_real x))), has_real x && op.type == Operator_type.RELATIONAL], [this.Vector (op.fn this.value x.value), is_Vector x && len value == len x.value && op.type == Operator_type.COMPOUND_REWRAP], [x.Image (vec op'.op_name x.value value), is_Image x], [vec op'.op_name x value, is_image x], [op.fn this.value x, is_real x] ] ++ super.oo_binary_table op x { op' = oo_converse op; }; oo_unary_table op = [ [this.Vector (map_unaryl op.fn this.value), op.type == Operator_type.ARITHMETIC], [this.Vector (map bool_to_real (map_unaryl op.fn this.value)), op.type == Operator_type.RELATIONAL], [this.Vector (op.fn this.value), op.type == Operator_type.COMPOUND_REWRAP], [op.fn this.value, true] ] ++ super.oo_unary_table op; // turn an ip bool (or a number, for Vector) into VIPSs 255/0 bool_to_real x = 255, is_bool x && x = 255, is_number x && x != 0 = 0; } /* A rectangular array of real. */ Matrix_base value = class _Object { _check_args = [ [value, "value", check_matrix] ]; // calculate these from value width = len value?0; height = len value; // extract a rectanguar area extract left top width height = this.Matrix_base ((map (take width) @ map (drop left) @ take height @ drop top) value); // methods oo_binary_table op x = [ // mat multiply is special [this.Matrix_base mul.value, is_Matrix x && op.op_name == "multiply"], [this.Matrix_base mul'.value, is_Matrix x && op.op_name == "multiply'"], // mat divide is also special [this.Matrix_base div.value, is_Matrix x && op.op_name == "divide"], [this.Matrix_base div'.value, is_Matrix x && op.op_name == "divide'"], // power -1 means invert [this.Matrix_base inv.value, is_real x && x == -1 && op.op_name == "power"], [this.Matrix_base sq.value, is_real x && x == 2 && op.op_name == "power"], [error "matrix **-1 and **2 only", op.op_name == "power" || op.op_name == "power'"], // matrix op vector ... treat a vector as a 1 row matrix [this.Matrix_base (map (map_binaryl op'.fn x.value) this.value), is_Vector x && op.type == Operator_type.ARITHMETIC], [this.Matrix_base (map_binaryl op.fn this.value x.value), (is_Matrix x || is_Real x) && op.type == Operator_type.ARITHMETIC], [this.Matrix_base (map_binaryl op.fn this.value x), is_real x && op.type == Operator_type.ARITHMETIC], // compound ... don't do iteration [this.Matrix_base (op.fn this.value x.value), (is_Matrix x || is_Real x || is_Vector x) && op.type == Operator_type.COMPOUND_REWRAP], [op.fn this.value x, op.type == Operator_type.COMPOUND] ] ++ super.oo_binary_table op x { mul = im_matmul this x; mul' = im_matmul x this; div = im_matmul this (im_matinv x); div' = im_matmul x (im_matinv this); inv = im_matinv this; sq = im_matmul this this; op' = oo_converse op; } oo_unary_table op = [ [this.Matrix_base (map_unaryl op.fn this.value), op.type == Operator_type.ARITHMETIC], [this.Matrix_base (op.fn this.value), op.type == Operator_type.COMPOUND_REWRAP], [op.fn this.value, true] ] ++ super.oo_unary_table op; } /* How to display a matrix: text, sliders, toggles, or text plus scale/offset. */ Matrix_display = class { text = 0; slider = 1; toggle = 2; text_scale_offset = 3; is_display = member [text, slider, toggle, text_scale_offset]; } /* A matrix as VIPS sees them ... add scale, offset and filename. For nip, add * a display type as well to control how the widget renders. */ Matrix_vips value scale offset filename display = class scope.Matrix_base value { _check_args = [ [scale, "scale", check_real], [offset, "offset", check_real], [filename, "filename", check_string], [display, "display", check_matrix_display] ]; Matrix_base x = this.Matrix_vips x scale offset filename display; } /* A plain 'ol matrix which can be passed to VIPS. */ Matrix value = class Matrix_vips value 1 0 "" Matrix_display.text {} /* Specialised constructors ... for convolutions, recombinations and * morphologies. */ Matrix_con scale offset value = class Matrix_vips value scale offset "" Matrix_display.text_scale_offset {}; Matrix_rec value = class Matrix_vips value 1 0 "" Matrix_display.slider {}; Matrix_mor value = class Matrix_vips value 1 0 "" Matrix_display.toggle {}; Matrix_file filename = (im_read_dmask @ expand @ search) filename; /* A CIE colour ... a triple, plus a format (eg XYZ, Lab etc) */ Colour colour_space value = class scope.Vector value { _check_args = [ [colour_space, "colour_space", check_colour_space] ]; _check_all = [ [is_list_len 3 value, "len value == 3"] ]; Vector x = this.Colour colour_space x; // make a colour-ish thing from an image // back to Colour if we have another 3 band image // to a vector if bands > 1 // to a number otherwise itoc im = this.Colour nip_type (to_matrix im).value?0, bands == 3 = scope.Vector (map mean (bandsplit im)), bands > 1 = mean im { type = get_header "Type" im; bands = get_header "Bands" im; nip_type = Image_type.colour_spaces.lookup 1 0 type; } // methods oo_binary_table op x = [ [itoc (op.fn ((float) (to_image this).value) ((float) (to_image x).value)), // here REWRAP means go via image op.type == Operator_type.COMPOUND_REWRAP] ] ++ super.oo_binary_table op x; oo_unary_table op = [ [itoc (op.fn ((float) (to_image this).value)), op.type == Operator_type.COMPOUND_REWRAP] ] ++ super.oo_unary_table op; } // a subclass with widgets for picking a space and value Colour_picker default_colour default_value = class Colour space.item colour.expr { _vislevel = 3; space = Option_enum "Colour space" Image_type.colour_spaces default_colour; colour = Expression "Colour value" default_value; Colour_edit colour_space value = Colour_picker colour_space value; } /* Base scale type. */ Scale caption from to value = class scope.Real value { _check_args = [ [caption, "caption", check_string], [from, "from", check_real], [to, "to", check_real] ]; _check_all = [ [from < to, "from < to"] ]; Real x = this.Scale caption from to x; // methods oo_binary_table op x = [ [this.Scale caption (op.fn this.from x.from) (op.fn this.to x.to) (op.fn this.value x.value), is_Scale x && op.type == Operator_type.ARITHMETIC], [this.Scale caption (op.fn this.from x) (op.fn this.to x) (op.fn this.value x), is_real x && op.type == Operator_type.ARITHMETIC] ] ++ super.oo_binary_table op x; } /* Base toggle type. */ Toggle caption value = class scope.Bool value { _check_args = [ [caption, "caption", check_string], [value, "value", check_bool] ]; Bool x = this.Toggle caption x; } /* Base option type. */ Option caption labels value = class scope.Real value { _check_args = [ [caption, "caption", check_string], [labels, "labels", check_string_list], [value, "value", check_uint] ]; } /* An option whose value is a string rather than a number. */ Option_string caption labels item = class Option caption labels (index (equal item) labels) { Option_edit caption labels value = this.Option_string caption labels (labels?value); } /* Make an option from an enum. */ Option_enum caption enum item = class Option_string caption enum.names item { // corresponding thing value_thing = enum.get_thing item; Option_edit caption labels value = this.Option_enum caption enum (enum.names?value); } /* A rectangle. width and height can be -ve. */ Rect left top width height = class _Object { _check_args = [ [left, "left", check_real], [top, "top", check_real], [width, "width", check_real], [height, "height", check_real] ]; // derived right = left + width; bottom = top + height; oo_binary_table op x = [ [equal x, is_Rect x && (op.op_name == "equal" || op.op_name == "equal'")], [!equal x, is_Rect x && (op.op_name == "not_equal" || op.op_name == "not_equal'")], // binops with a complex are the same as (comp op comp) [oo_binary_function op this (Rect (re x) (im x) 0 0), is_complex x], // all others are just pairwise [this.Rect left' top' width' height', is_Rect x && op.type == Operator_type.ARITHMETIC], [this.Rect left'' top'' width'' height'', has_number x && op.type == Operator_type.ARITHMETIC] ] ++ super.oo_binary_table op x { left' = op.fn left x.left; top' = op.fn top x.top; width' = op.fn width x.width; height' = op.fn height x.height; left'' = op.fn left x'; top'' = op.fn top x'; width'' = op.fn width x'; height'' = op.fn height x'; x' = get_number x; } oo_unary_table op = [ // arithmetic uops just map [this.Rect left' top' width' height', op.type == Operator_type.ARITHMETIC], // compound uops are just like ops on complex // do (width, height) so thing like abs(Arrow) work as you'd expect [op.fn (width, height), op.type == Operator_type.COMPOUND] ] ++ super.oo_unary_table op { left' = op.fn left; top' = op.fn top; width' = op.fn width; height' = op.fn height; } // empty? ie. contains no pixels is_empty = width == 0 || height == 0; // normalised version, ie. make width/height +ve and flip the origin nleft = left + width, width < 0 = left; ntop = top + height, height < 0 = top; nwidth = abs width; nheight = abs height; nright = nleft + nwidth; nbottom = ntop + nheight; equal x = left == x.left && top == x.top && width == x.width && height == x.height; // contains a point? includes_point x y = nleft <= x && x <= nright && ntop <= y && y <= nbottom; // contains a rect? just test top left and bottom right points includes_rect r = includes_point r.nleft r.ntop && includes_point r.nright r.nbottom; // bounding box of two rects // if either is empty, can just return the other union r = r, is_empty = this, r.is_empty = Rect left' top' width' height' { left' = min_pair nleft r.nleft; top' = min_pair ntop r.ntop; width' = max_pair nright r.nright - left'; height' = max_pair nbottom r.nbottom - top'; } // intersection of two rects ... empty rect if no intersection intersect r = Rect left' top' width'' height'' { left' = max_pair nleft r.nleft; top' = max_pair ntop r.ntop; width' = min_pair nright r.nright - left'; height' = min_pair nbottom r.nbottom - top'; width'' = width', width > 0 = 0; height'' = height', height > 0 = 0; } // expand/collapse by n pixels margin_adjust n = Rect (left - n) (top - n) (width + 2 * n) (height + 2 * n); } /* Values for Compression field in image. */ Image_compression = class { NONE = 0; NO_COMPRESSION = 0; TCSF_COMPRESSION = 1; JPEG_COMPRESSION = 2; LABPACK_COMPRESSED = 3; RGB_COMPRESSED = 4; LUM_COMPRESSED = 5; } /* Values for Coding field in image. */ Image_coding = class { NONE = 0; NOCODING = 0; COLQUANT = 1; LABPACK = 2; RAD = 6; } /* Values for BandFmt field in image. */ Image_format = class { DPCOMPLEX = 9; DOUBLE = 8; COMPLEX = 7; FLOAT = 6; INT = 5; UINT = 4; SHORT = 3; USHORT = 2; CHAR = 1; UCHAR = 0; NOTSET = -1; maxval fmt = [ 255, // UCHAR 127, // CHAR 65535, // USHORT 32767, // SHORT 4294967295, // UINT 2147483647, // INT 255, // FLOAT 255, // COMPLEX 255, // DOUBLE 255 // DPCOMPLEX ] ? fmt, fmt >= 0 && fmt <= DPCOMPLEX = error (_ "bad value for BandFmt"); } /* A lookup table. */ Table value = class _Object { _check_args = [ [value, "value", check_rectangular] ]; /* Extract a column. */ column n = map (extract n) value; /* present col x: is there an x in column col */ present col x = member (column col) x; /* Look on column from, return matching item in column to. */ lookup from to x = value?n?to, n >= 0 = error (_ "item" ++ " " ++ print x ++ " " ++ _ "not in table") { n = index (equal x) (column from); } } /* A two column lookup table with the first column a string and the second a * thing. Used for representing various enums. Option_enum makes a selector * from one of these. */ Enum value = class Table value { _check_args = [ [value, "value", check_enum] ] { check_enum = [is_enum, _ "is [[char, *]]"]; is_enum x = is_rectangular x && is_listof is_string (map (extract 0) x); } // handy ... all the names and things as lists names = this.column 0; things = this.column 1; // is a legal name or thing has_name x = this.present 1 x; has_thing x = this.present 0 x; // map things to strings and back get_name x = this.lookup 1 0 x; get_thing x = this.lookup 0 1 x; } /* Type field. */ Image_type = class { MULTIBAND = 0; B_W = 1; HISTOGRAM = 10; XYZ = 12; LAB = 13; CMYK = 15; LABQ = 16; RGB = 17; UCS = 18; LCH = 19; LABS = 21; sRGB = 22; YXY = 23; FOURIER = 24; RGB16 = 25; GREY16 = 26; ARRAY = 27; /* Table to get names <-> numbers. */ type_names = Enum [ $MULTIBAND => MULTIBAND, $B_W => B_W, $HISTOGRAM => HISTOGRAM, $XYZ => XYZ, $LAB => LAB, $CMYK => CMYK, $LABQ => LABQ, $RGB => RGB, $UCS => UCS, $LCH => LCH, $LABS => LABS, $sRGB => sRGB, $YXY => YXY, $FOURIER => FOURIER, $RGB16 => RGB16, $GREY16 => GREY16, $ARRAY => ARRAY ]; /* Table relating nip's colour space names and VIPS's Type numbers. * Options generated from this, so match the order to the order in the * Colour menu. */ colour_spaces = Enum [ $sRGB => sRGB, $Lab => LAB, $LCh => LCH, $XYZ => XYZ, $Yxy => YXY, $UCS => UCS ]; /* A slightly larger table ... the types of colorimetric image we can * have. Add mono, and the S and Q forms of LAB. */ image_colour_spaces = Enum [ $Mono => B_W, $sRGB => sRGB, $RGB16 => RGB16, $GREY16 => GREY16, $Lab => LAB, $LabQ => LABQ, $LabS => LABS, $LCh => LCH, $XYZ => XYZ, $Yxy => YXY, $UCS => UCS ]; } /* Base image type. Simple layer over vips_image. */ Image value = class _Object { _check_args = [ [value, "value", check_image] ]; // fields from VIPS header width = get_width value; height = get_height value; bands = get_bands value; format = get_format value; bits = get_bits value; coding = get_coding value; type = get_type value; xres = get_header "Xres" value; yres = get_header "Yres" value; xoffset = get_header "Xoffset" value; yoffset = get_header "Yoffset" value; filename = get_header "filename" value; // convenience ... the area our pixels occupy, as a rect rect = Rect 0 0 width height; // operator overloading // (op Image Vector) done in Vector class oo_binary_table op x = [ // handle image ++ constant here [wrap join_result_image, (has_real x || is_Vector x) && (op.op_name == "join" || op.op_name == "join'")], [wrap ite_result_image, op.op_name == "if_then_else"], [wrap (op.fn this.value (get_image x)), has_image x], [wrap (op.fn this.value (get_number x)), has_number x], // if it's not a class on the RHS, handle here ... just apply and // rewrap [wrap (op.fn this.value x), !is_class x] // all other cases handled by other classes ] ++ super.oo_binary_table op x { // wrap the result with this // x can be a non-image, eg. compare "Image v == []" vs. // "Image v == 12" wrap x = x, op.type == Operator_type.COMPOUND || !is_image x = this.Image x; join_result_image = value ++ new_stuff, op.op_name == "join" = new_stuff ++ value { new_stuff = image_new width height new_bands format coding Image_type.B_W x xoffset yoffset; new_bands = get_bands x, has_bands x = 1; } [then_part, else_part] = x; // get things about our output from inputs in this order objects = [then_part, else_part, this]; // properties of our output image target_bands = get_member_list has_bands get_bands objects; target_type = get_member_list has_type get_type objects; // if one of then/else is an image, get the target format from that // otherwise, let the non-image objects set the target target_format = get_member_list has_format get_format x, has_member_list has_format x = NULL; to_image x = to_image_size width height target_bands target_format x; [then', else'] = map to_image x; ite_result_image = image_set_type target_type (if value then then' else else'); } // FIXME ... yuk ... don't use operator hints, just always rewrap if // we have an image result // forced on us by things like abs: // abs Vector -> real // abs Image -> Image // does not fit well with COMPOUND/whatever scheme oo_unary_table op = [ [this.Image result, is_image result], [result, true] ] ++ super.oo_unary_table op { result = op.fn this.value; } } /* Construct an image from a file. */ Image_file filename = class Image value { _check_args = [ [filename, "filename", check_string] ]; value = vips_image filename; } Region image left top width height = class Image value { _check_args = [ [image, "Image", check_Image], [left, "left", check_real], [top, "top", check_real], [width, "width", check_preal], [height, "height", check_preal] ]; // a rect for our coordinates // region.rect gets the rect for the extracted image region_rect = Rect left top width height; // we need to always succeed ... value is our enclosing image if we're // out of bounds value = extract_area left top width height image.value, image.rect.includes_rect region_rect = image.value; } Area image left top width height = class scope.Region image left top width height { Region image left top width height = this.Area image left top width height; } Arrow image left top width height = class scope.Rect left top width height { _check_args = [ [image, "Image", check_Image], [left, "left", check_real], [top, "top", check_real], [width, "width", check_real], [height, "height", check_real] ]; Rect l t w h = this.Arrow image l t w h; } HGuide image top = class scope.Arrow image image.rect.left top image.width 0 { Arrow image left top width height = this.HGuide image top; } VGuide image left = class scope.Arrow image left image.rect.top 0 image.height { Arrow image left top width height = this.VGuide image left; } Mark image left top = class scope.Arrow image left top 0 0 { Arrow image left top width height = this.Mark image left top; } // convenience functions: ... specify position as [0 .. 1) Region_relative image u v w h = Region image (image.width * u) (image.height * v) (image.width * w) (image.height * h); Area_relative image u v w h = Area image (image.width * u) (image.height * v) (image.width * w) (image.height * h); Arrow_relative image u v w h = Arrow image (image.width * u) (image.height * v) (image.width * w) (image.height * h); VGuide_relative image v = VGuide image (image.height * v); HGuide_relative image u = HGuide image (image.width * u); Mark_relative image u v = Mark image (image.width * u) (image.height * v); Interpolate_type = class { NEAREST_NEIGHBOUR = 0; BILINEAR = 1; BICUBIC = 2; LBB = 3; NOHALO = 4; VSQBS = 5; // Should introspect to get the list of interpolators :-( // We can "dir" on VipsInterpolate to get a list of them, but we // can't get i18n'd descriptions until we have more // introspection stuff in nip2. /* Table to map interpol numbers to descriptive strings */ descriptions = [ _ "Nearest neighbour", _ "Bilinear", _ "Bicubic", _ "Upsize: reduced halo bicubic (LBB)", _ "Upsharp: reduced halo bicubic with edge sharpening (Nohalo)", _ "Upsmooth: quadratic B-splines with jaggy reduction (VSQBS)" ]; /* And to vips type names. */ types = [ "VipsInterpolateNearest", "VipsInterpolateBilinear", "VipsInterpolateBicubic", "VipsInterpolateLbb", "VipsInterpolateNohalo", "VipsInterpolateVsqbs" ]; } Interpolate type options = class { value = vips_object_new Interpolate_type.types?type [] options; } Interpolate_bilinear = Interpolate Interpolate_type.BILINEAR []; Interpolate_picker default = class Interpolate interp.value [] { _vislevel = 2; interp = Option "Interpolation" Interpolate_type.descriptions default; } Render_intent = class { PERCEPTUAL = 0; RELATIVE = 1; SATURATION = 2; ABSOLUTE = 3; /* Table to get names <-> numbers. */ names = Enum [ _ "Perceptual" => PERCEPTUAL, _ "Relative" => RELATIVE, _ "Saturation" => SATURATION, _ "Absolute" => ABSOLUTE ]; } // abstract base class for toolkit menus Menu = class {} // a "----" line in a menu Menuseparator = class Menu {} // abstract base class for items in menus Menuitem label tooltip = class Menu {} Menupullright label tooltip = class Menuitem label tooltip {} Menuaction label tooltip = class Menuitem label tooltip {} /* Plots. */ Plot_style = class { POINT = 0; LINE = 1; SPLINE = 2; BAR = 3; names = Enum [ _ "Point" => POINT, _ "Line" => LINE, _ "Spline" => SPLINE, _ "Bar" => BAR ]; } Plot_format = class { YYYY = 0; XYYY = 1; XYXY = 2; names = Enum [ _ "YYYY" => YYYY, _ "XYYY" => XYXY, _ "XYXY" => XYXY ]; } Plot_type = class { /* Lots of Ys (ie. multiple line plots). */ YYYY = 0; /* First column of matrix is X position, others are Ys (ie. multiple XY * line plots, all with the same Xes). */ XYYY = 1; /* Many independent XY plots. */ XYXY = 2; } /* "options" is a list of ["key", value] pairs. */ Plot options value = class scope.Image value { Image value = this.Plot options value; to_image dpi = extract_bands 0 3 (graph_export_image (to_real dpi) this); } Plot_matrix options value = class Plot options (to_image value).value { } Plot_histogram value = class scope.Plot [] value { } Plot_xy value = class scope.Plot [$format => Plot_format.XYYY] value { } /* A no-value type. Call it NULL for C-alike fun. Used by Group to indicate * empty slots, for example. */ NULL = class _Object { oo_binary_table op x = [ // the only operation we allow is equality .. use pointer equality, // this lets us test a == NULL and a != NULL [this === x, op.type == Operator_type.RELATIONAL && op.op_name == "equal"], [this !== x, op.type == Operator_type.RELATIONAL && op.op_name == "not_equal"] ] ++ super.oo_binary_table op x; } nip2-8.7.0/share/nip2/compat/8.2/Makefile.am0000644000175000017500000000062113224651032015114 00000000000000startdir = $(pkgdatadir)/compat/8.2 start_DATA = \ Colour.def \ _convert.def \ Filter.def \ _generate.def \ Histogram.def \ Image.def \ _joe_extra.def \ _joe_utilities.def \ _list.def \ _magick.def \ Magick.def \ Math.def \ Matrix.def \ _Object.def \ Object.def \ _predicate.def \ Preferences.ws \ _stdenv.def \ Tasks.def \ _types.def \ Widgets.def EXTRA_DIST = $(start_DATA) nip2-8.7.0/share/nip2/compat/7.26/0000755000175000017500000000000013350464160013232 500000000000000nip2-8.7.0/share/nip2/compat/7.26/_stdenv.def0000644000175000017500000016472513224651032015307 00000000000000/* Various operators as functions. */ logical_and a b = a && b; logical_or a b = a || b; bitwise_and a b = a & b; bitwise_or a b = a | b; eor a b = a ^ b; left_shift a b = a << b; right_shift a b = a >> b; not a = !a; less a b = a < b; more a b = a > b; less_equal a b = a <= b; more_equal a b = a >= b; equal a b = a == b; not_equal a b = a != b; pointer_equal a b = a === b; not_pointer_equal a b = a !== b; add a b = a + b; subtract a b = a - b; multiply a b = a * b; divide a b = a / b; idivide a b = (int) ((int) a / (int) b); power a b = a ** b; square x = x * x; remainder a b = a % b; cons a b = a : b; dot a b = a . ( b ); join a b = a ++ b; // 'difference' is defined in _list subscript a b = a ? b; generate s n f = [s, n .. f]; comma r i = (r, i); compose f g = f @ g; // our only trinary operator is actually a binary operator if_then_else a x = if a then x?0 else x?1; cast_unsigned_char x = (unsigned char) x; cast_signed_char x = (signed char) x; cast_unsigned_short x = (unsigned short) x; cast_signed_short x = (signed short) x; cast_unsigned_int x = (unsigned int) x; cast_signed_int x = (signed int) x; cast_float x = (float) x; cast_double x = (double) x; cast_complex x = (complex) x; cast_double_complex x = (double complex) x; unary_minus x = -x; negate x = !x; complement x = ~x; unary_plus x = +x; // the function we call for "a -> v" expressions mksvpair s v = [s, v], is_string s = error "not str on lhs of ->"; // the vector ops ... im is an image, vec is a real_list vec op_name im vec = im_lintra_vec ones im vec, op_name == "add" || op_name == "add'" = im_lintra_vec ones (-1 * im) vec, op_name == "subtract'" = im_lintra_vec ones im inv, op_name == "subtract" = im_lintra_vec vec im zeros, op_name == "multiply" || op_name == "multiply'" = im_lintra_vec vec (1 / im) zeros, op_name == "divide'" = im_lintra_vec recip im zeros, op_name == "divide" = im_expntra_vec im vec, op_name == "power'" = im_powtra_vec im vec, op_name == "power" = im_remainderconst_vec im vec, op_name == "remainder" = im_andimage_vec im vec, op_name == "bitwise_and" || op_name == "bitwise_and'" = im_orimage_vec im vec, op_name == "bitwise_or" || op_name == "bitwise_or'" = im_eorimage_vec im vec, op_name == "eor" || op_name == "eor'" = im_equal_vec im vec, op_name == "equal" || op_name == "equal'" = im_notequal_vec im vec, op_name == "not_equal" || op_name == "not_equal'" = im_less_vec im vec, op_name == "less" = im_moreeq_vec im vec, op_name == "less'" = im_lesseq_vec im vec, op_name == "less_equal" = im_more_vec im vec, op_name == "less_equal'" = error ("unimplemented vector operation: " ++ op_name) { zeros = replicate (len vec) 0; ones = replicate (len vec) 1; recip = map (divide 1) vec; inv = map (multiply (-1)) vec; } // make a name value pair mknvpair n v = [n, v], is_string n = error "not [char] on LHS of =>"; /* Macbeth chart patch names. */ macbeth_names = [ "Dark skin", "Light skin", "Blue sky", "Foliage", "Blue flower", "Bluish green", "Orange", "Purplish blue", "Moderate red", "Purple", "Yellow green", "Orange yellow", "Blue", "Green", "Red", "Yellow", "Magenta", "Cyan", "White (density 0.05)", "Neutral 8 (density 0.23)", "Neutral 6.5 (density 0.44)", "Neutral 5 (density 0.70)", "Neutral 3.5 (density 1.05)", "Black (density 1.50)" ]; bandsplit x = oo_unary_function bandsplit_op x, is_class x = map (subscript x) [0 .. bands - 1], is_image x = error (_ "bad arguments to " ++ "bandsplit") { bands = get_header "Bands" x; bandsplit_op = Operator "bandsplit" (map Image @ bandsplit) Operator_type.COMPOUND false; } bandjoin l = wrapper joined, has_wrapper = joined, is_listof has_image l = error (_ "bad arguments to " ++ "bandjoin") { has_wrapper = has_member_list (has_member "Image") l; wrapper = get_member_list (has_member "Image") (get_member "Image") l; joined = im_gbandjoin (map get_image l); } sum x = oo_unary_function sum_op x, is_class x = im_avg x * (get_width x) * (get_height x) * (get_bands x), is_image x = sum_list x, is_list x = error (_ "bad arguments (" ++ print x ++ ") to " ++ "sum") { sum_op = Operator "sum" sum Operator_type.COMPOUND false; // add elements in a nested-list thing sum_list l = foldr acc 0 l { acc x total = total + sum x, is_list x = total + x; } } product x = oo_unary_function product_op x, is_class x = product_list x, is_list x // (product image) doesn't make much sense :( = error (_ "bad arguments (" ++ print x ++ ") to " ++ "product") { product_op = Operator "product" product Operator_type.COMPOUND false; product_list l = foldr prod 1 l { prod x total = total * product x, is_list x = total * x; } } mean x = oo_unary_function mean_op x, is_class x = im_avg x, is_image x = mean_list x, is_list x = error (_ "bad arguments (" ++ print x ++ ") to " ++ "mean") { mean_op = Operator "mean" mean Operator_type.COMPOUND false; mean_list l = sum l / size l; // number of elements in some sort of nested-list thing size l = foldr acc 0 l { acc x total = total + size x, is_list x = total + 1; } } meang x = (appl (power e) @ mean @ appl log) x { appl fn x = map fn x, is_list x = fn x; } // zero-excluding mean meanze x = oo_unary_function meanze_op x, is_class x = meanze_image_hist x, is_image x && (fmt == Image_format.UCHAR || fmt == Image_format.USHORT) = meanze_image x, is_image x = meanze_list x, is_list x = error (_ "bad arguments (" ++ print x ++ ") to " ++ "meanze") { fmt = get_format x; meanze_op = Operator "meanze" meanze Operator_type.COMPOUND false; meanze_list l = sum l / size l; // number of non-zero elements in some sort of nested-list thing size l = foldr acc 0 l { acc x total = total + size x, is_list x = total + 1, x != 0; = total; } // add elements in a nested-list thing sum l = foldr acc 0 l { acc x total = total + sum x, is_list x = total + x; } // image mean, for any image type meanze_image i = sum / N { w = get_width i; h = get_height i; b = get_bands i; st = stats i; sum = st.value?0?2; // find non-zero pixels (not zero in all bands) zp = im_notequal_vec i (replicate b 0); // number of non-zero pixels N = b * (mean zp * w * h) / 255; } // image mean for 8 and 16-bit unsigned images // we can use a histogram, yay, and save a pass through the image meanze_image_hist i = sum / N { // histogram, knock out zeros hist = hist_find i; black = image_new 1 1 (get_bands hist) (get_format hist) (get_coding hist) (get_type hist) 0 0 0; histze = insert 0 0 black hist; // matching identity iden = im_identity_ushort (get_bands hist) (get_width hist), (get_width hist) > 256 = im_identity (get_bands hist); // number of non-zero pixels N = mean histze * 256; // sum of pixels sum = mean (hist * iden) * 256; } } deviation x = oo_unary_function deviation_op x, is_class x = im_deviate x, is_image x = deviation_list x, is_real_list x || is_matrix x = error (_ "bad arguments to " ++ "deviation") { deviation_op = Operator "deviation" deviation Operator_type.COMPOUND false; deviation_list l = (abs (s2 - (s * s / n)) / (n - 1)) ** 0.5 { [n, s, s2] = sum_sum2_list l; } // return n, sum, sum of squares for a list of reals sum_sum2_list x = foldr accumulate [0, 0, 0] x { accumulate x sofar = [n + 1, x + s, x * x + s2], is_real x = [n + n', s + s', s2 + s2'], is_list x = error "sum_sum2_list: not real or [real]" { [n, s, s2] = sofar; [n', s', s2'] = sum_sum2_list x; } } } deviationze x = oo_unary_function deviationze_op x, is_class x = deviationze_image x, is_image x = deviationze_list x, is_real_list x || is_matrix x = error (_ "bad arguments to " ++ "deviationze") { deviationze_op = Operator "deviationze" deviationze Operator_type.COMPOUND false; deviationze_list l = (abs (s2 - (s * s / n)) / (n - 1)) ** 0.5 { [n, s, s2] = sum_sum2_list l; } // return number of non-zero elements, sum, sum of squares for a list of // reals sum_sum2_list x = foldr accumulate [0, 0, 0] x { accumulate x sofar = sofar, is_real x && x == 0 = [n + 1, x + s, x * x + s2], is_real x = [n + n', s + s', s2 + s2'], is_list x = error "sum_sum2_list: not real or [real]" { [n, s, s2] = sofar; [n', s', s2'] = sum_sum2_list x; } } deviationze_image i = ((sum2 - sum * sum / N) / (N - 1)) ** 0.5 { w = get_width i; h = get_height i; b = get_bands i; st = stats i; sum = st.value?0?2; sum2 = st.value?0?3; // find non-zero pixels (not zero in all bands) zp = im_notequal_vec i (replicate b 0); // number of non-zero pixels N = b * (mean zp * w * h) / 255; } } // find the centre of gravity of a histogram gravity x = oo_unary_function gravity_op x, is_class x = im_hist_gravity x, is_hist x = gravity_list x, is_list x = error (_ "bad arguments to " ++ "gravity") { gravity_op = Operator "gravity" gravity Operator_type.COMPOUND false; // centre of gravity of a histogram... use the histogram to weight an // identity, then sum, then find the mean element im_hist_gravity h = m { // make horizontal h' = rot270 h, get_width h == 1 = h, get_height h == 1 = error "width or height not 1"; // number of elements w = get_width h'; // matching identity i = im_identity_ushort 1 w, w <= 2 ** 16 - 1 = make_xy w 1 ? 0; // weight identity and sum s = mean (i * h') * w; // sum of original histogram s' = mean h * w; // weighted mean m = s / s'; } gravity_list l = m { w = len l; // matching identity i = [0, 1 .. w - 1]; // weight identity and sum s = sum (map2 multiply i l); // sum of original histogram s' = sum l; // weighted mean m = s / s'; } } project x = oo_unary_function project_op x, is_class x = im_project x, is_image x = error (_ "bad arguments to " ++ "project") { project_op = Operator "project" project Operator_type.COMPOUND false; } abs x = oo_unary_function abs_op x, is_class x = im_abs x, is_image x = abs_cmplx x, is_complex x = abs_num x, is_real x = abs_list x, is_real_list x = abs_list (map abs_list x), is_matrix x = error (_ "bad arguments to " ++ "abs") { abs_op = Operator "abs" abs Operator_type.COMPOUND false; abs_list l = (sum (map square l)) ** 0.5; abs_num n = n, n >= 0 = -n; abs_cmplx c = ((re c)**2 + (im c)**2) ** 0.5; } copy x = oo_unary_function copy_op x, is_class x = im_copy x, is_image x = x { copy_op = Operator "copy" copy Operator_type.COMPOUND_REWRAP false; } // like abs, but treat pixels as vectors ... ie. always get a 1-band image // back ... also treat matricies as lists of vectors // handy for dE from object difference abs_vec x = oo_unary_function abs_vec_op x, is_class x = abs_vec_image x, is_image x = abs_vec_cmplx x, is_complex x = abs_vec_num x, is_real x = abs_vec_list x, is_real_list x = mean (map abs_vec_list x), is_matrix x = error (_ "bad arguments to " ++ "abs_vec") { abs_vec_op = Operator "abs_vec" abs_vec Operator_type.COMPOUND false; abs_vec_list l = (sum (map square l)) ** 0.5; abs_vec_num n = n, n >= 0 = -n; abs_vec_cmplx c = ((re c)**2 + (im c)**2) ** 0.5; abs_vec_image im = (sum (map square (bandsplit im))) ** 0.5; } transpose x = oo_unary_function transpose_op x, is_class x = transpose_image x, is_image x = transpose_list x, is_listof is_list x = error (_ "bad arguments to " ++ "transpose") { transpose_op = Operator "transpose" transpose Operator_type.COMPOUND_REWRAP false; transpose_list l = [], l' == [] = (map hd l') : (transpose_list (map tl l')) { l' = takewhile (not_equal []) l; } transpose_image = im_flipver @ im_rot270; } rot45 x = oo_unary_function rot45_op x, is_class x = error "rot45 image: not implemented", is_image x = error (_ "bad arguments to " ++ "rot45") { rot45_op = Operator "rot45" rot45_object Operator_type.COMPOUND_REWRAP false; rot45_object x = rot45_matrix x, is_odd_square_matrix x = error "rot45 image: not implemented", is_image x = error (_ "bad arguments to " ++ "rot45"); // slow, but what the heck rot45_matrix l = (im_rotate_dmask45 (Matrix l)).value; } // apply an image function to a [[real]] ... matrix is converted to a 1 band // image for processing apply_matrix_as_image fn m = (get_value @ im_vips2mask @ fn @ im_mask2vips @ Matrix) m; // a general image/matrix operation where the mat version is most easily done // by converting mat->image->mat apply_matim_operation name fn x = oo_unary_function class_op x, is_class x = fn x, is_image x = apply_matrix_as_image fn x, is_matrix x = error (_ "bad arguments to " ++ name) { class_op = Operator name (apply_matim_operation name fn) Operator_type.COMPOUND_REWRAP false; } rot90 = apply_matim_operation "rot90" im_rot90; rot180 = apply_matim_operation "rot180" im_rot180; rot270 = apply_matim_operation "rot270" im_rot270; rotquad = apply_matim_operation "rotquad" im_rotquad; fliplr = apply_matim_operation "fliplr" im_fliphor; fliptb = apply_matim_operation "flipud" im_flipver; image_set_type type x = oo_unary_function image_set_type_op x, is_class x = im_copy_set x (to_real type) (get_header "Xres" x) (get_header "Yres" x) (get_header "Xoffset" x) (get_header "Yoffset" x), is_image x = error (_ "bad arguments to " ++ "image_set_type:" ++ print type ++ " " ++ print x) { image_set_type_op = Operator "image_set_type" (image_set_type type) Operator_type.COMPOUND_REWRAP false; } image_set_origin xoff yoff x = oo_unary_function image_set_origin_op x, is_class x = im_copy_set x (get_header "Type" x) (get_header "Xres" x) (get_header "Yres" x) (to_real xoff) (to_real yoff), is_image x = error (_ "bad arguments to " ++ "image_set_origin") { image_set_origin_op = Operator "image_set_origin" (image_set_origin xoff yoff) Operator_type.COMPOUND_REWRAP false; } cache tile_width tile_height max_tiles x = oo_unary_function cache_op x, is_class x = im_cache x (to_real tile_width) (to_real tile_height) (to_real max_tiles), is_image x = error (_ "bad arguments to " ++ "cache") { cache_op = Operator "cache" (cache tile_width tile_height max_tiles) Operator_type.COMPOUND_REWRAP false; } tile across down x = oo_unary_function tile_op x, is_class x = im_replicate x (to_real across) (to_real down), is_image x = error (_ "bad arguments to " ++ "tile") { tile_op = Operator "tile" (tile across down) Operator_type.COMPOUND_REWRAP false; } grid tile_height across down x = oo_unary_function grid_op x, is_class x = im_grid x (to_real tile_height) (to_real across) (to_real down), is_image x = error (_ "bad arguments to " ++ "grid") { grid_op = Operator "grid" (grid tile_height across down) Operator_type.COMPOUND_REWRAP false; } max_pair a b = a, a > b = b; min_pair a b = a, a < b = b; range min value max = min_pair max (max_pair min value); max x = oo_unary_function max_op x, is_class x = im_max x, is_image x = max_list x, is_list x = x, is_number x = error (_ "bad arguments to " ++ "max") { max_op = Operator "max" max Operator_type.COMPOUND false; max_list x = error "max []", x == [] = foldr1 max_pair x, is_real_list x = foldr1 max_pair (map max_list x), is_list x = max x; } min x = oo_unary_function min_op x, is_class x = im_min x, is_image x = min_list x, is_list x = x, is_number x = error (_ "bad arguments to " ++ "min") { min_op = Operator "min" min Operator_type.COMPOUND false; min_list x = error "min []", x == [] = foldr1 min_pair x, is_real_list x = foldr1 min_pair (map min_list x), is_list x = min x; } maxpos x = oo_unary_function maxpos_op x, is_class x = im_maxpos x, is_image x = maxpos_matrix x, is_matrix x = maxpos_list x, is_list x = error (_ "bad arguments to " ++ "maxpos") { maxpos_op = Operator "maxpos" maxpos Operator_type.COMPOUND false; maxpos_matrix m = (-1, -1), m == [[]] = (indexes?row, row) { max_value = max (Matrix m); indexes = map (index (equal max_value)) m; row = index (not_equal (-1)) indexes; } maxpos_list l = -1, l == [] = index (equal (max l)) l; } minpos x = oo_unary_function minpos_op x, is_class x = im_minpos x, is_image x = minpos_matrix x, is_matrix x = minpos_list x, is_list x = error (_ "bad arguments to " ++ "minpos") { minpos_op = Operator "minpos" minpos Operator_type.COMPOUND false; minpos_matrix m = (-1, -1), m == [[]] = (indexes?row, row) { min_value = min (Matrix m); indexes = map (index (equal min_value)) m; row = index (not_equal (-1)) indexes; } minpos_list l = -1, l == [] = index (equal (min l)) l; } stats x = oo_unary_function stats_op x, is_class x = im_stats x, is_image x = im_stats (to_image x).value, is_matrix x = error (_ "bad arguments to " ++ "stats") { stats_op = Operator "stats" stats Operator_type.COMPOUND false; } e = 2.7182818284590452354; pi = 3.14159265358979323846; rad d = 2 * pi * (d / 360); deg r = 360 * r / (2 * pi); sign x = oo_unary_function sign_op x, is_class x = im_sign x, is_image x = sign_cmplx x, is_complex x = sign_num x, is_real x = error (_ "bad arguments to " ++ "sign") { sign_op = Operator "sign" sign Operator_type.COMPOUND_REWRAP false; sign_num n = 0, n == 0 = 1, n > 0 = -1; sign_cmplx c = (0, 0), mod == 0 = (re c / mod, im c / mod) { mod = abs c; } } rint x = oo_unary_function rint_op x, is_class x = im_rint x, is_image x = rint_value x, is_number x = error (_ "bad arguments to " ++ "rint") { rint_op = Operator "rint" rint Operator_type.ARITHMETIC false; rint_value x = (int) (x + 0.5), x > 0 = (int) (x - 0.5); } scale x = oo_unary_function scale_op x, is_class x = (unsigned char) x, is_number x = im_scale x, is_image x = scale_list x, is_real_list x || is_matrix x = error (_ "bad arguments to " ++ "scale") { scale_op = Operator "scale" scale Operator_type.COMPOUND_REWRAP false; scale_list l = apply_scale s o l { mn = find_limit min_pair l; mx = find_limit max_pair l; s = 255.0 / (mx - mn); o = -(mn * s); } find_limit fn l = find_limit fn (map (find_limit fn) l), is_listof is_list l = foldr1 fn l; apply_scale s o x = x * s + o, is_number x = map (apply_scale s o) x; } scaleps x = oo_unary_function scale_op x, is_class x = im_scaleps x, is_image x = error (_ "bad arguments to " ++ "scale") { scale_op = Operator "scaleps" scaleps Operator_type.COMPOUND_REWRAP false; } fwfft x = oo_unary_function fwfft_op x, is_class x = im_fwfft x, is_image x = error (_ "bad arguments to " ++ "fwfft") { fwfft_op = Operator "fwfft" fwfft Operator_type.COMPOUND_REWRAP false; } invfft x = oo_unary_function invfft_op x, is_class x = im_invfftr x, is_image x = error (_ "bad arguments to " ++ "invfft") { invfft_op = Operator "invfft" invfft Operator_type.COMPOUND_REWRAP false; } falsecolour x = oo_unary_function falsecolour_op x, is_class x = image_set_type Image_type.sRGB (im_falsecolour x), is_image x = error (_ "bad arguments to " ++ "falsecolour") { falsecolour_op = Operator "falsecolour" falsecolour Operator_type.COMPOUND_REWRAP false; } polar x = oo_unary_function polar_op x, is_class x = im_c2amph x, is_image x = polar_cmplx x, is_complex x = error (_ "bad arguments to " ++ "polar") { polar_op = Operator "polar" polar Operator_type.COMPOUND false; polar_cmplx r = (l, a) { a = 270, x == 0 && y < 0 = 90, x == 0 && y >= 0 = 360 + atan (y / x), x > 0 && y < 0 = atan (y / x), x > 0 && y >= 0 = 180 + atan (y / x); l = (x ** 2 + y ** 2) ** 0.5; x = re r; y = im r; } } rectangular x = oo_unary_function rectangular_op x, is_class x = im_c2rect x, is_image x = rectangular_cmplx x, is_complex x = error (_ "bad arguments to " ++ "rectangular") { rectangular_op = Operator "rectangular" rectangular Operator_type.COMPOUND false; rectangular_cmplx p = (x, y) { l = re p; a = im p; x = l * cos a; y = l * sin a; } } // we can't use colour_unary: that likes 3 band only recomb matrix x = oo_unary_function recomb_op x, is_class x = im_recomb x matrix, is_image x = recomb_real_list x, is_real_list x = map recomb_real_list x, is_matrix x = error (_ "bad arguments to " ++ "recomb") { // COMPOUND_REWRAP ... signal to the colour class to go to image and // back recomb_op = Operator "recomb" (recomb matrix) Operator_type.COMPOUND_REWRAP false; // process [1,2,3 ..] as an image recomb_real_list l = (to_matrix im').value?0 { im = (float) (to_image (Vector l)).value; im' = recomb matrix im; } } extract_area x y w h obj = oo_unary_function extract_area_op obj, is_class obj = im_extract_area obj x' y' w' h', is_image obj = map (extract_range x' w') (extract_range y' h' obj), is_matrix obj = error (_ "bad arguments to " ++ "extract_area") { x' = to_real x; y' = to_real y; w' = to_real w; h' = to_real h; extract_area_op = Operator "extract_area" (extract_area x y w h) Operator_type.COMPOUND_REWRAP false; extract_range from length list = (take length @ drop from) list; } extract_band b obj = subscript obj b; extract_row y obj = oo_unary_function extract_row_op obj, is_class obj = extract_area 0 y' (get_width obj) 1 obj, is_image obj = [obj?y'], is_matrix obj = error (_ "bad arguments to " ++ "extract_row") { y' = to_real y; extract_row_op = Operator "extract_row" (extract_row y) Operator_type.COMPOUND_REWRAP false; } extract_column x obj = oo_unary_function extract_column_op obj, is_class obj = extract_area x' 0 1 height obj, is_image obj = map (\row [row?x']) obj, is_matrix obj = error (_ "bad arguments to " ++ "extract_column") { x' = to_real x; height = get_header "Ysize" obj; extract_column_op = Operator "extract_column" (extract_column x) Operator_type.COMPOUND_REWRAP false; } blend cond in1 in2 = oo_binary_function blend_op cond [in1,in2], is_class cond = im_blend (get_image cond) (get_image in1) (get_image in2), has_image cond && has_image in1 && has_image in2 = error (_ "bad arguments to " ++ "blend") { blend_op = Operator "blend" blend_obj Operator_type.COMPOUND_REWRAP false; blend_obj cond x = blend_result_image { [then_part, else_part] = x; // get things about our output from inputs in this order objects = [then_part, else_part, cond]; // properties of our output image target_width = get_member_list has_width get_width objects; target_height = get_member_list has_height get_height objects; target_bands = get_member_list has_bands get_bands objects; target_format = get_member_list has_format get_format objects; target_type = get_member_list has_type get_type objects; to_image x = to_image_size target_width target_height target_bands target_format x; [then_image, else_image] = map to_image [then_part, else_part]; blend_result_image = image_set_type target_type (im_blend cond then_image else_image); } } // do big first: we want to keep big's class, if possible // eg. big is a Plot, small is a 1x1 Image insert x y small big = oo_binary'_function insert_op small big, is_class big = oo_binary_function insert_op small big, is_class small = im_insert big small (to_real x) (to_real y), is_image small && is_image big = error (_ "bad arguments to " ++ "insert") { insert_op = Operator "insert" (insert x y) Operator_type.COMPOUND_REWRAP false; } insert_noexpand x y small big = oo_binary_function insert_noexpand_op small big, is_class small = oo_binary'_function insert_noexpand_op small big, is_class big = im_insert_noexpand big small (to_real x) (to_real y), is_image small && is_image big = error (_ "bad arguments to " ++ "insert_noexpand") { insert_noexpand_op = Operator "insert_noexpand" (insert_noexpand x y) Operator_type.COMPOUND_REWRAP false; } measure x y w h u v image = oo_unary_function measure_op image, is_class image = im_measure image (to_real x) (to_real y) (to_real w) (to_real h) (to_real u) (to_real v), is_image image = error (_ "bad arguments to " ++ "measure") { measure_op = Operator "measure" (measure x y w h u v) Operator_type.COMPOUND_REWRAP false; } extract_bands b n obj = oo_unary_function extract_bands_op obj, is_class obj = im_extract_bands obj (to_real b) (to_real n), is_image obj = error (_ "bad arguments to " ++ "extract_bands") { extract_bands_op = Operator "extract_bands" (extract_bands b n) Operator_type.COMPOUND_REWRAP false; } invert x = oo_unary_function invert_op x, is_class x = im_invert x, is_image x = 255 - x, is_real x = error (_ "bad arguments to " ++ "invert") { invert_op = Operator "invert" invert Operator_type.COMPOUND false; } transform ipol wrap params image = oo_unary_function transform_op image, is_class image = im_transform image (to_matrix params) (to_real ipol) (to_real wrap), is_image image = error (_ "bad arguments to " ++ "transform") { transform_op = Operator "transform" (transform ipol wrap params) Operator_type.COMPOUND_REWRAP false; } transform_search max_error max_iterations order ipol wrap sample reference = oo_binary_function transform_search_op sample reference, is_class sample = oo_binary'_function transform_search_op sample reference, is_class reference = im_transform_search sample reference (to_real max_error) (to_real max_iterations) (to_real order) (to_real ipol) (to_real wrap), is_image sample && is_image reference = error (_ "bad arguments to " ++ "transform_search") { transform_search_op = Operator "transform_search" (transform_search max_error max_iterations order ipol wrap) Operator_type.COMPOUND false; } rotate interp angle image = oo_binary_function rotate_op angle image, is_class angle = oo_binary'_function rotate_op angle image, is_class image = im_affinei_all image interp.value a (-b) b a 0 0, is_real angle && is_image image = error (_ "bad arguments to " ++ "rotate") { rotate_op = Operator "rotate" (rotate interp) Operator_type.COMPOUND_REWRAP false; a = cos angle; b = sin angle; } matrix_binary fn a b = itom (fn (mtoi a) (mtoi b)) { mtoi x = im_mask2vips (Matrix x); itom x = (im_vips2mask x).value; } join_lr a b = oo_binary_function join_lr_op a b, is_class a = oo_binary'_function join_lr_op a b, is_class b = join_im a b, is_image a && is_image b = matrix_binary join_im a b, is_matrix a && is_matrix b = error (_ "bad arguments to " ++ "join_lr") { join_lr_op = Operator "join_lr" join_lr Operator_type.COMPOUND_REWRAP false; join_im a b = insert (get_width a) 0 b a; } join_tb a b = oo_binary_function join_tb_op a b, is_class a = oo_binary'_function join_tb_op a b, is_class b = join_im a b, is_image a && is_image b = matrix_binary join_im a b, is_matrix a && is_matrix b = error (_ "bad arguments to " ++ "join_tb") { join_tb_op = Operator "join_tb" join_tb Operator_type.COMPOUND_REWRAP false; join_im a b = insert 0 (get_height a) b a; } conj x = oo_unary_function conj_op x, is_class x = (re x, -im x), is_complex x || (is_image x && format == Image_format.COMPLEX) || (is_image x && format == Image_format.DPCOMPLEX) // assume it's some sort of real = x { format = get_header "BandFmt" x; conj_op = Operator "conj" conj Operator_type.COMPOUND false; } clip2fmt format image = oo_unary_function clip2fmt_op image, is_class image = im_clip2fmt image (to_real format), is_image image = error (_ "bad arguments to " ++ "clip2fmt") { clip2fmt_op = Operator "clip2fmt" (clip2fmt format) Operator_type.COMPOUND_REWRAP false; } embed type x y w h im = oo_unary_function embed_op im, is_class im = im_embed im (to_real type) (to_real x) (to_real y) (to_real w) (to_real h), is_image im = error (_ "bad arguments to " ++ "embed") { embed_op = Operator "embed" (embed type x y w h) Operator_type.COMPOUND_REWRAP false; } /* Morph a mask with a [[real]] matrix ... turn m2 into an image, morph it * with m1, turn it back to a matrix again. */ _morph_2_masks fn m1 m2 = m'' { // The [[real]] can contain 128 values ... squeeze them out! image = im_mask2vips (Matrix m2) == 255; m2_width = get_width image; m2_height = get_height image; // need to embed m2 in an image large enough for us to be able to // position m1 all around the edges, with a 1 pixel overlap image' = embed 0 (m1.width / 2) (m1.height / 2) (m2_width + (m1.width - 1)) (m2_height + (m1.height - 1)) image; // morph! image'' = fn m1 image'; // back to mask m' = im_vips2mask ((double) image''); // Turn 0 in output to 128 (don't care). m'' = map (map fn) m'.value { fn a = 128, a == 0; = a; } } dilate mask image = oo_unary_function dilate_op image, is_class image = im_dilate image (to_matrix mask), is_image image = error (_ "bad arguments to " ++ "dilate") { dilate_op = Operator "dilate" dilate_object Operator_type.COMPOUND_REWRAP false; dilate_object x = _morph_2_masks dilate mask x, is_matrix x = dilate mask x; } erode mask image = oo_unary_function erode_op image, is_class image = im_erode image (to_matrix mask), is_image image = error (_ "bad arguments to " ++ "erode") { erode_op = Operator "erode" erode_object Operator_type.COMPOUND_REWRAP false; erode_object x = _morph_2_masks erode mask x, is_matrix x = erode mask x; } conv mask image = oo_unary_function conv_op image, is_class image = im_conv image (to_matrix mask), is_image image = error (_ "bad arguments to " ++ "conv" ++ ": " ++ "conv (" ++ print mask ++ ") (" ++ print image ++ ")") { conv_op = Operator "conv" (conv mask) Operator_type.COMPOUND_REWRAP false; } convf mask image = oo_unary_function convf_op image, is_class image = im_conv_f image (to_matrix mask), is_image image = error (_ "bad arguments to " ++ "convf" ++ ": " ++ "convf (" ++ print mask ++ ") (" ++ print image ++ ")") { convf_op = Operator "convf" (convf mask) Operator_type.COMPOUND_REWRAP false; } convsep mask image = oo_unary_function convsep_op image, is_class image = im_convsep image (to_matrix mask), is_image image = error (_ "bad arguments to " ++ "convsep") { convsep_op = Operator "convsep" (convsep mask) Operator_type.COMPOUND_REWRAP false; } aconvsep layers mask image = oo_unary_function aconvsep_op image, is_class image = im_aconvsep image (to_matrix mask) (to_real layers), is_image image = error (_ "bad arguments to " ++ "aconvsep") { aconvsep_op = Operator "aconvsep" (aconvsep layers mask) Operator_type.COMPOUND_REWRAP false; } convsepf mask image = oo_unary_function convsepf_op image, is_class image = im_convsep_f image (to_matrix mask), is_image image = error (_ "bad arguments to " ++ "convsepf") { convsepf_op = Operator "convsepf" (convsepf mask) Operator_type.COMPOUND_REWRAP false; } rank w h n image = oo_unary_function rank_op image, is_class image = im_rank image (to_real w) (to_real h) (to_real n), is_image image = error (_ "bad arguments to " ++ "rank") { rank_op = Operator "rank" (rank w h n) Operator_type.COMPOUND_REWRAP false; } rank_image n x = rlist x.value, is_Group x = rlist x, is_list x = error (_ "bad arguments to " ++ "rank_image") { rlist l = wrapper ranked, has_wrapper = ranked { has_wrapper = has_member_list (has_member "Image") l; wrapper = get_member_list (has_member "Image") (get_member "Image") l; ranked = im_rank_image (map get_image l) (to_real n); } } greyc iterations amplitude sharpness anisotropy alpha sigma dl da gauss_prec interpolation fast_approx x = oo_unary_function greyc_op x, is_class x = greyc_im x, is_image x = error (_ "bad argument" ++ " (" ++ print x ++ ") to " ++ "greyc") { greyc_op = Operator "greyc" (greyc iterations amplitude sharpness anisotropy alpha sigma dl da gauss_prec interpolation fast_approx) Operator_type.COMPOUND_REWRAP false; greyc_im x = im_greyc x iterations amplitude sharpness anisotropy alpha sigma dl da gauss_prec interpolation fast_approx; } greyc_mask iterations amplitude sharpness anisotropy alpha sigma dl da gauss_prec interpolation fast_approx mask x = oo_binary_function greyc_mask_op mask x, is_class mask = oo_binary'_function greyc_mask_op mask x, is_class x = greyc_im mask x, is_image mask && is_image x = error (_ "bad arguments" ++ " (" ++ print mask ++ ", " ++ print x ++ ") " ++ "to " ++ "greyc") { greyc_mask_op = Operator "greyc_mask" (greyc_mask iterations amplitude sharpness anisotropy alpha sigma dl da gauss_prec interpolation fast_approx) Operator_type.COMPOUND_REWRAP false; greyc_im mask x = im_greyc_mask x mask iterations amplitude sharpness anisotropy alpha sigma dl da gauss_prec interpolation fast_approx; } // find the correlation surface for a small image within a big one correlate small big = oo_binary_function correlate_op small big, is_class small = oo_binary'_function correlate_op small big, is_class big = im_spcor big small, is_image small && is_image big = error (_ "bad arguments to " ++ "correlate") { correlate_op = Operator "correlate" correlate Operator_type.COMPOUND_REWRAP false; } // just sum-of-squares-of-differences correlate_fast small big = oo_binary_function correlate_fast_op small big, is_class small = oo_binary'_function correlate_fast_op small big, is_class big = im_fastcor big small, is_image small && is_image big = error (_ "bad arguments to " ++ "correlate_fast") { correlate_fast_op = Operator "correlate_fast" correlate_fast Operator_type.COMPOUND_REWRAP false; } // set Type, wrap as Plot_hist if it's a class hist_tag x = oo_unary_function hist_tag_op x, is_class x = image_set_type Image_type.HISTOGRAM x, is_image x = error (_ "bad arguments to " ++ "hist_tag") { hist_tag_op = Operator "hist_tag" (Plot_histogram @ hist_tag) Operator_type.COMPOUND false; } hist_find x = oo_unary_function hist_find_op x, is_class x = im_histgr x (-1), is_image x = error (_ "bad arguments to " ++ "hist_find") { hist_find_op = Operator "hist_find" (Plot_histogram @ hist_find) Operator_type.COMPOUND false; } hist_find_nD bins image = oo_unary_function hist_find_nD_op image, is_class image = im_histnD image (to_real bins), is_image image = error (_ "bad arguments to " ++ "hist_find_nD") { hist_find_nD_op = Operator "hist_find_nD" (hist_find_nD bins) Operator_type.COMPOUND_REWRAP false; } hist_find_indexed index value = oo_binary_function hist_find_indexed_op index value, is_class index = oo_binary'_function hist_find_indexed_op index value, is_class value = im_hist_indexed index value, is_image index && is_image value = error (_ "bad arguments to " ++ "hist_find_indexed") { hist_find_indexed_op = Operator "hist_find_indexed" (compose (compose Plot_histogram) hist_find_indexed) Operator_type.COMPOUND false; } hist_map hist image = oo_binary_function hist_map_op hist image, is_class hist = oo_binary'_function hist_map_op hist image, is_class image = im_maplut image hist, is_image hist && is_image image = error (_ "bad arguments to " ++ "hist_map") { // can't use rewrap, as we want to always wrap as image hist_map_op = Operator "hist_map" (compose (compose Image) hist_map) Operator_type.COMPOUND false; } hist_cum hist = oo_unary_function hist_cum_op hist, is_class hist = im_histcum hist, is_image hist = error (_ "bad arguments to " ++ "hist_cum") { hist_cum_op = Operator "hist_cum" hist_cum Operator_type.COMPOUND_REWRAP false; } hist_diff hist = oo_unary_function hist_diff_op hist, is_class hist = im_histdiff hist, is_image hist = error (_ "bad arguments to " ++ "hist_diff") { hist_diff_op = Operator "hist_diff" hist_diff Operator_type.COMPOUND_REWRAP false; im_histdiff h = (conv (Matrix [[-1, 1]]) @ clip2fmt (fmt (get_format h))) h { // up the format so it can represent the whole range of // possible values from this mask fmt x = Image_format.SHORT, x == Image_format.UCHAR || x == Image_format.CHAR = Image_format.INT, x == Image_format.USHORT || x == Image_format.SHORT || x == Image_format.UINT = x; } } hist_norm hist = oo_unary_function hist_norm_op hist, is_class hist = im_histnorm hist, is_image hist = error (_ "bad arguments to " ++ "hist_norm") { hist_norm_op = Operator "hist_norm" hist_norm Operator_type.COMPOUND_REWRAP false; } hist_match in ref = oo_binary_function hist_match_op in ref, is_class in = oo_binary'_function hist_match_op in ref, is_class ref = im_histspec in ref, is_image in && is_image ref = error (_ "bad arguments to " ++ "hist_match") { hist_match_op = Operator "hist_match" hist_match Operator_type.COMPOUND_REWRAP false; } hist_equalize x = hist_map ((hist_norm @ hist_cum @ hist_find) x) x; hist_equalize_local w h image = oo_unary_function hist_equalize_local_op image, is_class image = lhisteq image, is_image image = error (_ "bad arguments to " ++ "hist_equalize_local") { hist_equalize_local_op = Operator "hist_equalize_local" (hist_equalize_local w h) Operator_type.COMPOUND_REWRAP false; // loop over bands, if necessary lhisteq im = im_lhisteq im (to_real w) (to_real h), get_bands im == 1 = (foldl1 join @ map lhisteq @ bandsplit) im; } // find the threshold below which are percent of the image (percent in [0,1]) // eg. hist_thresh 0.1 x == 12, then x < 12 will light up 10% of the pixels hist_thresh percent image = x { // our own normaliser ... we don't want to norm channels separately // norm to [0,1] my_hist_norm h = h / max h; // normalised cumulative hist // we sum the channels before we normalise, because we want to treat them // all the same h = (my_hist_norm @ sum @ bandsplit @ hist_cum @ hist_find) image.value; // threshold that, then use im_profile to search for the x position in the // histogram x = mean (im_profile (h > percent) 1); } /* Sometimes useful, despite plotting now being built in, for making * diagnostic images. */ hist_plot hist = oo_unary_function hist_plot_op hist, is_class hist = im_histplot hist, is_image hist = error (_ "bad arguments to " ++ "hist_plot") { hist_plot_op = Operator "hist_plot" (Image @ hist_plot) Operator_type.COMPOUND false; } zerox d x = oo_unary_function zerox_op x, is_class x = im_zerox x (to_real d), is_image x = error (_ "bad arguments to " ++ "zerox") { zerox_op = Operator "zerox" (zerox d) Operator_type.COMPOUND_REWRAP false; } resize interp xfac yfac image = oo_unary_function resize_op image, is_class image = resize_im image, is_image image = error (_ "bad arguments to " ++ "resize") { resize_op = Operator "resize" resize_im Operator_type.COMPOUND_REWRAP false; xfac' = to_real xfac; yfac' = to_real yfac; rxfac' = 1 / xfac'; ryfac' = 1 / yfac'; // is this interpolation nearest-neighbour? is_nn x = x.type == Interpolate_type.NEAREST_NEIGHBOUR; resize_im im // upscale by integer factor, nearest neighbour = im_zoom im xfac' yfac', is_int xfac' && is_int yfac' && xfac' >= 1 && yfac' >= 1 && is_nn interp // downscale by integer factor, nearest neighbour = im_subsample im rxfac' ryfac', is_int rxfac' && is_int ryfac' && rxfac' >= 1 && ryfac' >= 1 && is_nn interp // upscale by any factor, nearest neighbour // upscale by integer part, then affine to exact size = scale xg?1 yg?1 (im_zoom im xg?0 yg?0), xfac' >= 1 && yfac' >= 1 && is_nn interp // downscale by any factor, nearest neighbour // downscale by integer part, then affine to exact size = scale xs?1 ys?1 (im_subsample im xs?0 ys?0), rxfac' >= 1 && ryfac' >= 1 && is_nn interp // upscale by any factor with affine = scale xfac' yfac' im, xfac' >= 1 && yfac' >= 1 // downscale by any factor, bilinear // block shrink by integer factor, then resample to // exact with affine = scale xs?1 ys?1 (im_shrink im xs?0 ys?0), rxfac' >= 1 && ryfac' >= 1 = error ("resize: unimplemented argument combination:\n" ++ " xfac = " ++ print xfac' ++ "\n" ++ " yfac = " ++ print yfac' ++ "\n" ++ " interp = " ++ print interp ++ " (" ++ Interpolate_type.descriptions?interp.type ++ ")") { // convert a float scale to integer plus fraction // eg. scale by 2.5 becomes [2, 1.25] (x * 2.5 == x * 2 * 1.25) break f = [floor f, f / floor f]; // same, but for downsizing ... turn a float scale which is less than // 1 into an int shrink and a float scale // complicated: the int shrink may round the size down (eg. imagine // subsampling a 11 pixel wide image by 3, we'd get a 3 pixel wide // image, not a 3.666 pixel wide image), so pass in the size of image // we are operating on and adjust for any rounding // so ... x is (eg.) 467, f is (eg. 128/467, about 0.274) rbreak x f = [int_shrink, float_resample] { // the size of image we are aiming for after the combined int and // float resample x' = x * f; // int part int_shrink = floor (1 / f); // size after int shrink x'' = floor (x / int_shrink); // therefore what we need for the float part float_resample = x' / x''; } width = get_width im; height = get_height im; // grow and shrink factors xg = break xfac'; yg = break yfac'; xs = rbreak width xfac'; ys = rbreak height yfac'; // resize scale xfac yfac im = im_affinei_all im interp.value xfac 0 0 yfac 0 0; } } sharpen radius x1 y2 y3 m1 m2 in = oo_unary_function sharpen_op in, is_class in = im_sharpen in (to_real radius) (to_real x1) (to_real y2) (to_real y3) (to_real m1) (to_real m2), is_image in = error (_ "bad arguments to " ++ "sharpen") { sharpen_op = Operator "sharpen" (sharpen radius x1 y2 y3 m1 m2) Operator_type.COMPOUND_REWRAP false; } tone_analyse s m h sa ma ha in = oo_unary_function tone_analyse_op in, is_class in = im_tone_analyse in (to_real s) (to_real m) (to_real h) (to_real sa) (to_real ma) (to_real ha), is_image in = error (_ "bad arguments to " ++ "tone_analyse") { tone_analyse_op = Operator "tone_analyse" (Plot_histogram @ tone_analyse s m h sa ma ha) Operator_type.COMPOUND false; } tone_map hist image = oo_binary_function tone_map_op hist image, is_class hist = oo_binary'_function tone_map_op hist image, is_class image = im_tone_map image hist, is_image hist && is_image image = error (_ "bad arguments to " ++ "tone_map") { tone_map_op = Operator "tone_map" tone_map Operator_type.COMPOUND_REWRAP false; } tone_build fmt b w s m h sa ma ha = (Plot_histogram @ clip2fmt fmt) (im_tone_build_range mx mx (to_real b) (to_real w) (to_real s) (to_real m) (to_real h) (to_real sa) (to_real ma) (to_real ha)) { mx = Image_format.maxval fmt; } icc_export depth profile intent in = oo_unary_function icc_export_op in, is_class in = im_icc_export_depth in (to_real depth) (expand profile) (to_real intent), is_image in = error (_ "bad arguments to " ++ "icc_export") { icc_export_op = Operator "icc_export" (icc_export depth profile intent) Operator_type.COMPOUND_REWRAP false; } icc_import profile intent in = oo_unary_function icc_import_op in, is_class in = im_icc_import in (expand profile) (to_real intent), is_image in = error (_ "bad arguments to " ++ "icc_import") { icc_import_op = Operator "icc_import" (icc_import profile intent) Operator_type.COMPOUND_REWRAP false; } icc_import_embedded intent in = oo_unary_function icc_import_embedded_op in, is_class in = im_icc_import_embedded in (to_real intent), is_image in = error (_ "bad arguments to " ++ "icc_import_embedded") { icc_import_embedded_op = Operator "icc_import_embedded" (icc_import_embedded intent) Operator_type.COMPOUND_REWRAP false; } icc_transform in_profile out_profile intent in = oo_unary_function icc_transform_op in, is_class in = im_icc_transform in (expand in_profile) (expand out_profile) (to_real intent), is_image in = error (_ "bad arguments to " ++ "icc_transform") { icc_transform_op = Operator "icc_transform" (icc_transform in_profile out_profile intent) Operator_type.COMPOUND_REWRAP false; } icc_ac2rc profile in = oo_unary_function icc_ac2rc_op in, is_class in = im_icc_ac2rc in (expand profile), is_image in = error (_ "bad arguments to " ++ "icc_ac2rc") { icc_ac2rc_op = Operator "icc_ac2rc" (icc_ac2rc profile) Operator_type.COMPOUND_REWRAP false; } draw_flood_blob x y ink image = oo_unary_function draw_flood_blob_op image, is_class image = im_draw_flood_blob image (to_real x) (to_real y) ink, is_image image = error (_ "bad arguments to " ++ "draw_flood_blob") { draw_flood_blob_op = Operator "draw_flood_blob" (draw_flood_blob x y ink) Operator_type.COMPOUND_REWRAP false; } draw_flood x y ink image = oo_unary_function draw_flood_op image, is_class image = im_draw_flood image (to_real x) (to_real y) ink, is_image image = error (_ "bad arguments to " ++ "draw_flood") { draw_flood_op = Operator "draw_flood" (draw_flood x y ink) Operator_type.COMPOUND_REWRAP false; } draw_rect x y w h f ink image = oo_unary_function draw_rect_op image, is_class image = im_draw_rect image (to_real x) (to_real y) (to_real w) (to_real h) (to_real f) ink, is_image image = error (_ "bad arguments to " ++ "draw_rect") { draw_rect_op = Operator "draw_rect" (draw_rect x y w h f ink) Operator_type.COMPOUND_REWRAP false; } draw_circle x y r f ink image = oo_unary_function draw_circle_op image, is_class image = im_draw_circle image (to_real x) (to_real y) (to_real r) (to_real f) ink, is_image image = error (_ "bad arguments to " ++ "draw_circle") { draw_circle_op = Operator "draw_circle" (draw_circle x y r f ink) Operator_type.COMPOUND_REWRAP false; } draw_line x1 y1 x2 y2 ink image = oo_unary_function draw_line_op image, is_class image = im_draw_line image (to_real x1) (to_real y1) (to_real x2) (to_real y2) ink, is_image image = error (_ "bad arguments to " ++ "draw_line") { draw_line_op = Operator "draw_line" (draw_line x1 y1 x2 y2 ink) Operator_type.COMPOUND_REWRAP false; } print_base base in = oo_unary_function print_base_op in, is_class in = map (print_base base) in, is_list in = print_base_real, is_real in = error (_ "bad arguments to " ++ "print_base") { print_base_op = Operator "print_base" (print_base base) Operator_type.COMPOUND false; print_base_real = error "print_base: bad base", base < 2 || base > 16 = "0", in < 0 || chars == [] = reverse chars { digits = map (\x x % base) (takewhile (not_equal 0) (iterate (\x idivide x base) in)); chars = map tohd digits; tohd x = (char) ((int) '0' + x), x < 10 = (char) ((int) 'A' + (x - 10)); } } /* id x: the identity function * * id :: * -> * */ id x = x; /* const x y: junk y, return x * * (const 3) is the function that always returns 3. * const :: * -> ** -> * */ const x y = x; /* converse fn a b: swap order of args to fn * * converse fn a b == fn b a * converse :: (* -> ** -> ***) -> ** -> * -> *** */ converse fn a b = fn b a; /* fix fn x: find the fixed point of a function */ fix fn x = limit (iterate fn x); /* until pred fn n: apply fn to n until pred succeeds; return that value * * until (more 1000) (multiply 2) 1 = 1024 * until :: (* -> bool) -> (* -> *) -> * -> * */ until pred fn n = n, pred n = until pred fn (fn n); /* Infinite list of primes. */ primes = 1 : (sieve [2 ..]) { sieve l = hd l : sieve (filter (nmultiple (hd l)) (tl l)); nmultiple n x = x / n != (int) (x / n); } /* Map an n-ary function (pass the args as a list) over groups of objects. * The objects can be single objects or groups. If more than one * object is a group, we iterate for the length of the smallest group. * Don't loop over plain lists, since we want (eg.) "mean [1, 2, 3]" to work. * Treat [] as no-value --- ie. if any of the inputs are [] we put [] into the * output and don't apply the function. copy-pasted into _types, keep in sync */ map_nary fn args = fn args, groups == [] = Group (map process [0, 1 .. shortest - 1]) { // find all the group arguments groups = filter is_Group args; // what's the length of the shortest group arg? shortest = foldr1 min_pair (map (len @ get_value) groups); // process index n ... pull that member from each argument // recurse to handle application, so we work for nested groups too process n = NULL, any (map (is_noval n) args) = map_nary fn (map (extract n) args) { extract n arg = arg.value?n, is_Group arg = arg; is_noval n arg = is_Group arg && arg.value?n == NULL; } } /* Map a 1-ary function over an object. */ map_unary fn a = map_nary (list_1ary fn) [a]; /* Map a 2-ary function over a pair of objects. */ map_binary fn a b = map_nary (list_2ary fn) [a, b]; /* Map a 3-ary function over three objects. */ map_trinary fn a b c = map_nary (list_3ary fn) [a, b, c]; /* Map a 4-ary function over three objects. */ map_quaternary fn a b c d = map_nary (list_4ary fn) [a, b, c, d]; /* Same as map_nary, but for lists. Handy for (eg.) implementing arith ops on * vectors and matricies. */ map_nary_list fn args = fn args, lists == [] = map process [0, 1 .. shortest - 1] { // find all the list arguments lists = filter is_list args; // what's the length of the shortest list arg? shortest = foldr1 min_pair (map len lists); // process index n ... pull that member from each argument // recurse to handle application, so we work for nested lists too process n = map_nary_list fn (map (extract n) args) { extract n arg = arg?n, is_list arg = arg; } } map_unaryl fn a = map_nary_list (list_1ary fn) [a]; map_binaryl fn a b = map_nary_list (list_2ary fn) [a, b]; /* Remove features smaller than x pixels across from an image. This used to be * rather complex ... convsep is now good enough to use. */ smooth x image = convsep (matrix_gaussian_blur (to_real x * 2)) image; /* Chop up an image into a list of lists of smaller images. Pad edges with * black. */ imagearray_chop tile_width tile_height hoverlap voverlap i = map chop' [0, vstep .. last_y] { width = get_width i; height = get_height i; bands = get_bands i; format = get_format i; type = get_type i; tile_width' = to_real tile_width; tile_height' = to_real tile_height; hoverlap' = to_real hoverlap; voverlap' = to_real voverlap; /* Unique pixels per tile. */ hstep = tile_width' - hoverlap'; vstep = tile_height' - voverlap'; /* Number of tiles across and down. Remember the case where width == * hstep. */ across = (int) ((width - 1) / hstep) + 1; down = (int) ((height - 1) / vstep) + 1; /* top/left of final tile. */ last_x = hstep * (across - 1); last_y = vstep * (down - 1); /* How much do we need to pad by? */ sx = last_x + tile_width'; sy = last_y + tile_height'; /* Expand image with black to pad size. */ pad = embed 0 0 0 sx sy i; /* Chop up a row. */ chop' y = map chop'' [0, hstep .. last_x] { chop'' x = extract_area x y tile_width' tile_height' pad; } } /* Reassemble image. */ imagearray_assemble hoverlap voverlap il = (image_set_origin 0 0 @ foldl1 tbj @ map (foldl1 lrj)) il { lrj l r = insert (get_width l + hoverlap) 0 r l; tbj t b = insert 0 (get_height t + voverlap) b t; } /* Generate an nxn identity matrix. */ identity_matrix n = error "identity_matrix: n > 0", n < 1 = map line [0 .. n - 1] { line p = take p [0, 0 ..] ++ [1] ++ take (n - p - 1) [0, 0 ..]; } /* Incomplete gamma function Q(a, x) == 1 - P(a, x) FIXME ... this is now a builtin, until we can get a nice List class (requires overloadable ':') gammq a x = error "bad args", x < 0 || a <= 0 = 1 - gamser, x < a + 1 = gammcf { gamser = (gser a x)?0; gammcf = (gcf a x)?0; } */ /* Incomplete gamma function P(a, x) evaluated as series representation. Also * return ln(gamma(a)) ... nr in c, pp 218 */ gser a x = [gamser, gln] { gln = gammln a; gamser = error "bad args", x < 0 = 0, x == 0 = 1 // fix this { // maximum iterations maxit = 100; ap = List [a + 1, a + 2 ...]; xoap = x / ap; del = map product (prefixes xoap.value); /* del = map (multiply (1 / a)) (map product (prefixes xoap)) del = xap = iterate (multiply */ /* Generate all prefixes of a list ... [1,2,3] -> [[1], [1, 2], [1, 2, * 3], [1, 2, 3, 4] ...] */ prefixes l = map (converse take l) [1..]; } } /* ln(gamma(xx)) ... nr in c, pp 214 */ gammln xx = gln { cof = [76.18009172947146, -86.50532032941677, 24.01409824083091, -1.231739572450155, 0.1208650973866179e-2, -0.5395239384953e-5]; y = take 6 (iterate (add 1) (xx + 1)); ser = 1.000000000190015 + sum (map2 divide cof y); tmp = xx + 0.5; tmp' = tmp - ((xx + 0.5) * log tmp); gln = -tmp + log (2.5066282746310005 * ser / xx); } /* make a LUT from a scatter */ buildlut x = Plot_histogram (im_buildlut x), is_Matrix x && x.width > 1 = im_buildlut (Matrix x), is_matrix x && is_list_len_more 1 x?0 = error (_ "bad arguments to " ++ "buildlut"); /* Linear regression. Return a class with the stuff we need in. * from s15.2, p 665 NR in C */ linreg xes yes = obj { obj = class { // in case we ever get shown in the workspace _vislevel = 2; slope = sum [t * y :: [t, y] <- zip2 tes yes] / st2; intercept = (sy - sx * slope) / ss; chi2 = sum [(y - intercept - slope * x) ** 2 :: [x, y] <- zip2 xes yes]; siga = (chi2 / (ss - 2)) ** 0.5 * ((1 + sx ** 2 / (ss * st2)) / ss) ** 0.5; sigb = (chi2 / (ss - 2)) ** 0.5 * (1 / st2) ** 0.5; // for compat with linregw, see below q = 1.0; } ss = len xes; sx = sum xes; sy = sum yes; sxoss = sx / ss; tes = [x - sxoss :: x <- xes]; st2 = sum [t ** 2 :: t <- tes]; } /* Weighted linear regression. Xes, yes and a list of deviations. */ linregw xes yes devs = obj { obj = class { // in case we ever get shown in the workspace _vislevel = 2; slope = sum [(t * y) / sd :: [t, y, sd] <- zip3 tes yes devs] / st2; intercept = (sy - sx * slope) / ss; chi2 = sum [((y - intercept - slope * x) / sd) ** 2 :: [x, y, sd] <- zip3 xes yes devs]; siga = ((1 + sx * sx / (ss * st2)) / ss) ** 0.5; sigb = (1 / st2) ** 0.5; q = gammq (0.5 * (len xes - 2)) (0.5 * chi2); } wt = [sd ** -0.5 :: sd <- devs]; ss = sum wt; sx = sum [x * w :: [x, w] <- zip2 xes wt]; sy = sum [y * w :: [y, w] <- zip2 yes wt]; sxoss = sx / ss; tes = [(x - sxoss) / sd :: [x, sd] <- zip2 xes devs]; st2 = sum [t ** 2 :: t <- tes]; } /* Clustering: pass in a list of points, repeatedly merge the * closest two points until no two points are closer than the threshold. * Return [merged-points, corresponding-weights]. A weight is a list of the * indexes we merged to make that point, ie. len weight == how significant * this point is. * * eg. * cluster 12 [152,154,155,42,159] == * [[155,42],[[1,2,0,4],[3]]] */ cluster thresh points = oo_unary_function cluster_op points, is_class points // can't use [0..len points - 1], in case len points == 0 = merge [points, map (converse cons []) (take (len points) [0 ..])], is_list points = error (_ "bad arguments to " ++ "cluster") { cluster_op = Operator "cluster" (cluster thresh) Operator_type.COMPOUND false; merge x = x, m < 2 || d > thresh = merge [points', weights'] { [points, weights] = x; m = len points; // generate indexes of all possible pairs, avoiding comparing a thing // to itself, and assuming that dist is reflexive // first index is always less than 2nd index // the +1,+2 makes sure we have an increasing generator, otherwise we // can get [3 .. 4] (for example), which will make a decreasing // sequence pairs = [[x, y] :: x <- [0 .. m - 1]; y <- [x + 1, x + 2 .. m - 1]]; // distance function // arg is eg. [3,1], meaning get distance from point 3 to point 1 dist x = abs (points?i - points?j) { [i, j] = x; } // smallest distance, then the two points we merge p = minpos (map dist pairs); d = dist pairs?p; [i, j] = pairs?p; // new point and new weight nw = weights?i ++ weights?j; np = (points?i * len weights?i + points?j * len weights?j) / len nw; // remove element i from a list remove i l = take i l ++ drop (i + 1) l; // remove two old points, add the new merged one // i < j (see "pairs", above) points' = np : remove i (remove j points); weights' = nw : remove i (remove j weights); } } /* Extract the area of an image around an arrow. * Transform the image to make the arrow horizontal, then displace by hd and * vd pxels, then cut out a bit h pixels high centered on the arrow. */ extract_arrow hd vd h arrow = extract_area (re p' + hd) (im p' - h / 2 + vd) (re pv) h im' { // the line as a polar vector pv = polar (arrow.width, arrow.height); a = im pv; // smallest rotation that will make the line horizontal a' = 360 - a, a > 270 = 180 - a, a > 90 = -a; im' = rotate Interpolate_bilinear a' arrow.image; // look at the start and end of the arrow, pick the leftmost p = (arrow.left, arrow.top), arrow.left <= arrow.right = (arrow.right, arrow.bottom); // transform that point to im' space p' = rectangular (polar p + (0, a')) + (im'.xoffset, im'.yoffset); } /* You'd think these would go in _convert, but they are not really colour ops, * so put them here. */ rad2float image = oo_unary_function rad2float_op image, is_class image = im_rad2float image, is_image image = error (_ "bad arguments to " ++ "rad2float") { rad2float_op = Operator "rad2float" rad2float Operator_type.COMPOUND_REWRAP false; } float2rad image = oo_unary_function float2rad_op image, is_class image = im_float2rad image, is_image image = error (_ "bad arguments to " ++ "float2rad") { float2rad_op = Operator "float2rad" float2rad Operator_type.COMPOUND_REWRAP false; } segment x = oo_unary_function segment_op x, is_class x = image', is_image x = error (_ "bad arguments to " ++ "segment") { segment_op = Operator "segment" segment Operator_type.COMPOUND_REWRAP false; [image, nsegs] = im_segment x; image' = im_copy_set_meta image "n-segments" nsegs; } point a b = oo_binary_function point_op a b, is_class a = oo_binary'_function point_op a b, is_class b = im_read_point b x y, is_image b = [b?x?y], is_matrix b = [b?x], is_real_list b && y == 0 = [b?y], is_real_list b && x == 0 = error (_ "bad arguments to " ++ "point") { point_op = Operator "point" (\a\b Vector (point a b)) Operator_type.COMPOUND false; (x, y) = a, is_complex a; = (a?0, a?1), is_real_list a && is_list_len 2 a = error "bad position format"; } /* Generate an ImageMagick (or GraphicsMagick) command suitable for * im_system_image. Use convert.exe in $VIPSHOME/bin, if it exists, otherwise * assume it's on the path somewhere. */ magick_command switch = join_sep " " [convert, "\"%s\"", switch, "\"%s\""] { prefs = Workspaces.Preferences; use_gm = prefs.USE_GRAPHICSMAGICK; name = if use_gm then "gm" else "convert"; exe = concat [name, expand "$EXEEXT"]; vipsexe = path_absolute [expand "$VIPSHOME", "bin", exe]; final_exe = vipsexe, search vipsexe != [] = exe; convert = join_sep " " [final_exe, "convert"], use_gm = final_exe; } /* Run a command on an image. See magick_command, for example. */ system_image command x = oo_unary_function system_image_op x, is_class x = system x, is_image x = error (_ "bad arguments to " ++ "system_image") { system_image_op = Operator "system_image" (system_image command) Operator_type.COMPOUND_REWRAP false; system im = image_out { [image_out, log] = im_system_image (get_image im) "%s.tif" "%s.tif" command; } } nip2-8.7.0/share/nip2/compat/7.26/Filter.def0000644000175000017500000012722113224651032015060 00000000000000Filter_conv_item = class Menupullright "_Convolution" "various spatial convolution filters" { /* Some useful masks. */ filter_blur = Matrix_con 9 0 [[1, 1, 1], [1, 1, 1], [1, 1, 1]]; filter_sharp = Matrix_con 8 0 [[-1, -1, -1], [-1, 16, -1], [-1, -1, -1]]; filter_emboss = Matrix_con 1 128 [[-1, 0], [0, 1]]; filter_laplacian = Matrix_con 1 128 [[-1, -1, -1], [-1, 8, -1], [-1, -1, -1]]; filter_sobel = Matrix_con 1 128 [[1, 2, 1], [0, 0, 0], [-1, -2, -1]]; filter_lindet = Matrix_con 1 0 [[1, 1, 1], [-2, -2, -2], [1, 1, 1]]; Blur_item = class Menuaction "_Blur" "3x3 blur of image" { action x = map_unary (conv filter_blur) x; } Sharpen_item = class Menuaction "_Sharpen" "3x3 sharpen of image" { action x = map_unary (conv filter_sharp) x; } Emboss_item = class Menuaction "_Emboss" "1 pixel displace emboss" { action x = map_unary (conv filter_emboss) x; } Laplacian_item = class Menuaction "_Laplacian" "3x3 laplacian edge detect" { action x = map_unary (conv filter_laplacian) x; } Sobel_item = class Menuaction "So_bel" "3x3 Sobel edge detect" { action x = map_unary sobel x { sobel im = abs (a - 128) + abs (b - 128) { a = conv filter_sobel im; b = conv (rot270 filter_sobel) im; } } } /* 3x3 line detect of image diagonals should be scaled down by root(2) I guess Kirk */ Linedet_item = class Menuaction "Li_ne Detect" "3x3 line detect" { action x = map_unary lindet x { lindet im = foldr1 max_pair images { masks = take 4 (iterate rot45 filter_lindet); images = map (converse conv im) masks; } } } Usharp_item = class Menuaction "_Unsharp Mask" "cored sharpen of L only in LAB image" { action x = class _result { _vislevel = 3; size = Option "Radius" [ "3 pixels", "5 pixels", "7 pixels", "9 pixels", "11 pixels", "51 pixels" ] 0; st = Scale "Smoothness threshold" 0 5 1.5; bm = Scale "Brighten by at most" 1 50 10; dm = Scale "Darken by at most" 1 50 50; fs = Scale "Sharpen flat areas by" (-2) 5 1; js = Scale "Sharpen jaggy areas by" (-2) 5 2; _result = map_unary process x { process in = Image in''' { in' = colour_transform_to Image_type.LABS in.value; in'' = sharpen [3, 5, 7, 9, 11, 51]?size st bm dm fs js in'; in''' = colour_transform_to (get_type in) in''; } } } } sep1 = Menuseparator; Custom_blur_item = class Menuaction "Custom B_lur / Sharpen" "blur or sharpen with tuneable parameters" { action x = class _result { _vislevel = 3; type = Option "Type" ["Blur", "Sharpen"] 0; r = Scale "Radius" 1 100 1; fac = Scale "Amount" 0 1 1; layers = Scale "Layers" 1 100 10; shape = Option "Mask shape" [ "Square", "Gaussian" ] 0; prec = Option "Precision" ["Int", "Float", "Approximate"] 0; _result = map_unary process x { process in = clip2fmt blur.format proc { mask = matrix_blur r.value, shape.value == 0 = matrix_gaussian_blur r.value; blur = [convsep, convsepf, aconvsep layers]?prec mask in; proc = in + fac * (in - blur), type == 1 = blur * fac + in * (1 - fac); } } } } Custom_conv_item = class Menuaction "Custom C_onvolution" "convolution filter with tuneable parameters" { action x = class _result { _vislevel = 3; matrix = Matrix_con 1 0 [[0, 0, 0], [0, 1, 0], [0, 0, 0]]; separable = Toggle "Seperable convolution" false, matrix.width == 1 || matrix.height == 1 = false; type = Option "Convolution type" ["Int", "Float"] 0; rotate = Option "Rotate" [ "Don't rotate", "4 x 45 degrees", "8 x 45 degrees", "2 x 90 degrees" ] 0; _result = map_unary process x { process in = in.Image in' { conv_fn = im_lindetect, !separable && type == 0 && rotate == 1 = im_compass, !separable && type == 0 && rotate == 2 = im_gradient, !separable && type == 0 && rotate == 3 = im_conv, !separable && type == 0 = im_convsep, separable && type == 0 = im_conv_f, !separable && type == 1 = im_convsep_f, separable && type == 1 = error "boink!"; in' = conv_fn in.value matrix; } } } } } Filter_rank_item = class Menupullright "_Rank" "various rank filters" { Median_item = class Menuaction "_Median" "3x3 median rank filter" { action x = map_unary (rank 3 3 4) x; } Image_rank_item = class Menuaction "_Image Rank" "pixelwise rank a list or group of images" { action x = class _result { _vislevel = 3; select = Expression "Rank" ((int) (guess_size / 2)) { guess_size = len x, is_list x = len x.value, is_Group x = 0; } // can't really iterate over groups ... since we allow a group // argument _result = rank_image select x; } } Custom_rank_item = class Menuaction "Custom _Rank" "rank filter with tuneable parameters" { action x = class _result { _vislevel = 3; window_width = Expression "Window width" 3; window_height = Expression "Window height" 3; select = Expression "Rank" ((int) ((to_real window_width * to_real window_height) / 2)); _result = map_unary process x { process in = rank window_width window_height select in; } } } } Filter_morphology_item = class Menupullright "_Morphology" "various morphological filters" { /* Some useful masks. */ mask8 = Matrix_mor [[255, 255, 255], [255, 255, 255], [255, 255, 255]]; mask4 = Matrix_mor [[128, 255, 128], [255, 255, 255], [128, 255, 128]]; mask1 = Matrix_mor [[0, 0, 0], [0, 255, 0], [0, 0, 0]]; thin = Matrix_mor [[0, 0, 0], [128, 255, 128], [255, 255, 255]]; Threshold_item = Select_item.Threshold_item; sep1 = Menuseparator; Dilate_item = class Menupullright "_Dilate" "morphological dilate" { Dilate8_item = class Menuaction "_8-connected" "dilate with an 8-connected mask" { action x = map_unary (dilate mask8) x; } Dilate4_item = class Menuaction "_4-connected" "dilate with a 4-connected mask" { action x = map_unary (dilate mask4) x; } } Erode_item = class Menupullright "_Erode" "morphological erode" { Erode8_item = class Menuaction "_8-connected" "erode with an 8-connected mask" { action x = map_unary (erode mask8) x; } Erode4_item = class Menuaction "_4-connected" "erode with a 4-connected mask" { action x = map_unary (erode mask4) x; } } Custom_morph_item = class Menuaction "Custom _Morphology" "convolution morphological operator" { action x = class _result { _vislevel = 3; mask = mask4; type = Option "Operation" ["Erode", "Dilate"] 1; apply = Expression "Number of times to apply mask" 1; _result = map_unary morph x { morph image = Image value' { fatmask = (iterate (dilate mask) mask)?(to_real apply - 1); value' = im_erode image.value fatmask, type.value == 0 = im_dilate image.value fatmask; } } } } sep2 = Menuseparator; Open_item = class Menuaction "_Open" "open with an 8-connected mask" { action x = map_unary (dilate mask8 @ erode mask8) x; } Close_item = class Menuaction "_Close" "close with an 8-connected mask" { action x = map_unary (erode mask8 @ dilate mask8) x; } Clean_item = class Menuaction "C_lean" "remove 8-connected isolated points" { action x = map_unary clean x { clean x = x ^ erode mask1 x; } } Thin_item = class Menuaction "_Thin" "thin once" { action x = map_unary thinall x { masks = take 8 (iterate rot45 thin); thin1 m x = x ^ erode m x; thinall x = foldr thin1 x masks; } } sep3 = Menuseparator; Segment_item = class Menuaction "_Segment" "break image into disjoint regions" { action x = class _result { _vislevel = 3; segments = Expression "Number of disjoint regions" (map_unary (get_header "n-segments") _result); _result = map_unary segment x; } } } Filter_fourier_item = class Menupullright "_Fourier" "various Fourier filters" { preview_size = 64; sense_option = Option "Sense" [ "Pass", "Reject" ] 0; // make a visualisation image make_vis fn = (Image @ image_set_type Image_type.FOURIER @ rotquad @ fn) (im_create_fmask preview_size preview_size); // make the process function process fn in = (Image @ fn) (im_flt_image_freq in.value); New_ideal_item = class Menupullright "_Ideal" "various ideal Fourier filters" { High_low_item = class Menuaction "_High or Low Pass" "highpass/lowpass ideal Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; // call a freq func with our parameters _params f = f sense.value fc.value 0 0 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" "ring pass/reject ideal Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; rw = Scale "Ring width" 0.01 0.99 0.5; // call a freq func with our parameters _params f = f (sense.value + 6) fc.value rw.value 0 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Band_item = class Menuaction "_Band Pass or Band Reject" "band pass/reject ideal Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fcx = Scale "Horizontal frequency cutoff" 0.01 0.99 0.5; fcy = Scale "Vertical frequency cutoff" 0.01 0.99 0.5; r = Scale "Radius" 0.01 0.99 0.5; // call a freq func with our parameters _params f = f (sense.value + 12) fcx.value fcy.value r.value 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } } New_gaussian_item = class Menupullright "_Gaussian" "various Gaussian Fourier filters" { High_low_item = class Menuaction "_High or Low Pass" "highpass/lowpass Gaussian Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; // call a freq func with our parameters _params f = f (sense.value + 4) fc.value ac.value 0 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" "ring pass/reject Gaussian Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; rw = Scale "Ring width" 0.01 0.99 0.5; // call a freq func with our parameters _params f = f (sense.value + 10) fc.value rw.value ac.value 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Band_item = class Menuaction "_Band Pass or Band Reject" "band pass/reject Gaussian Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fcx = Scale "Horizontal frequency cutoff" 0.01 0.99 0.5; fcy = Scale "Vertical frequency cutoff" 0.01 0.99 0.5; r = Scale "Radius" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; // call a freq func with our parameters _params f = f (sense.value + 16) fcx.value fcy.value r.value ac.value 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } } New_butterworth_item = class Menupullright "_Butterworth" "various Butterworth Fourier filters" { High_low_item = class Menuaction "_High or Low Pass" "highpass/lowpass Butterworth Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; o = Scale "Order" 1 10 2; // call a freq func with our parameters _params f = f (sense.value + 2) o.value fc.value ac.value 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" "ring pass/reject Butterworth Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; rw = Scale "Ring width" 0.01 0.99 0.5; o = Scale "Order" 1 10 2; // call a freq func with our parameters _params f = f (sense.value + 8) o.value fc.value rw.value ac.value 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Band_item = class Menuaction "_Band Pass or Band Reject" "band pass/reject Butterworth Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fcx = Scale "Horizontal frequency cutoff" 0.01 0.99 0.5; fcy = Scale "Vertical frequency cutoff" 0.01 0.99 0.5; r = Scale "Radius" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; o = Scale "Order" 1 10 2; // call a freq func with our parameters _params f = f (sense.value + 14) o.value fcx.value fcy.value r.value ac.value; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } } } Filter_enhance_item = class Menupullright "_Enhance" "various enhancement filters" { Falsecolour_item = class Menuaction "_False Colour" "false colour a mono image" { action x = class _result { _vislevel = 3; o = Scale "Offset" (-255) 255 0; clip = Toggle "Clip colour range" false; _result = map_unary process x { process im = falsecolour mono'' { mono = colour_transform_to Image_type.B_W im; mono' = mono + o; mono'' = (unsigned char) mono', clip = (unsigned char) (mono' & 0xff); } } } } Statistical_diff_item = class Menuaction "_Statistical Difference" "statistical difference of an image" { action x = class _result { _vislevel = 3; wsize = Expression "Window size" 11; tmean = Expression "Target mean" 128; mean_weight = Scale "Mean weight" 0 1 0.8; tdev = Expression "Target deviation" 50; dev_weight = Scale "Deviation weight" 0 1 0.8; border = Toggle "Output image matches input image in size" true; _result = map_unary process x { process in = Image in'' { in' = colour_transform_to Image_type.B_W in.value; fn = im_stdif, border = im_stdif_raw; in'' = fn in' mean_weight.value tmean.expr dev_weight.value tdev.expr wsize.expr wsize.expr; } } } } Hist_equal_item = class Menupullright "_Equalise Histogram" "equalise contrast" { Global_item = class Menuaction "_Global" "equalise contrast globally" { action x = map_unary hist_equalize x; } Local_item = class Menuaction "_Local" "equalise contrast within a roving window" { action x = class _result { _vislevel = 3; window_width = Expression "Window width" 20; window_height = Expression "Window height" 20; _result = map_unary process x { process in = hist_equalize_local window_width.expr window_height.expr in; } } } } } Filter_correlate_item = class Menupullright "Spatial _Correlation" "calculate correlation surfaces" { Correlate_item = class Menuaction "_Correlate" "calculate correlation coefficient" { action a b = map_binary corr a b { corr a b = correlate a b, a.width <= b.width && a.height <= b.height = correlate b a; } } Correlate_fast_item = class Menuaction "_Simple Difference" "calculate sum of squares of differences" { action a b = map_binary corr a b { corr a b = correlate_fast a b, a.width <= b.width && a.height <= b.height = correlate_fast b a; } } } Filter_greyc_item = class Menupullright "_GREYCstoration" "noise-removing filter" { Denoise_item = class Menuaction "Denoise" "Noise-removing filter" { action x = class _result { _vislevel = 3; iterations = Scale "Iterations" 1 5 1; amplitude = Scale "Amplitude" 1 100 40; sharpness = Scale "Sharpness" 0 3 0.9; anisotropy = Scale "Anisotropy" 0 1 0.15; alpha = Scale "Noise scale" 0 5 0.6; sigma = Scale "Geometry regularity" 0 2 1.1; dl = Scale "Spatial integration step" 0 1 0.8; da = Scale "Angular integration step" 0 90 30; gauss_prec = Scale "Precision" 1 10 2; interpolation = Option "Interpolation" ["Nearest-neighbour", "Bilinear", "Runge-Kutta"] 0; fast_approx = Toggle "Fast approximation" true; _result = greyc (to_real iterations) (to_real amplitude) (to_real sharpness) (to_real anisotropy) (to_real alpha) (to_real sigma) (to_real dl) (to_real da) (to_real gauss_prec) (to_real interpolation) (to_real fast_approx) x; } } Enlarge_item = class Menuaction "Enlarge" "Enlarge image" { action x = class _result { _vislevel = 3; scale = Scale "Enlarge" 1 10 3; iterations = Scale "Iterations" 1 5 3; amplitude = Scale "Amplitude" 1 100 20; sharpness = Scale "Sharpness" 0 3 0.2; anisotropy = Scale "Anisotropy" 0 1 0.9; alpha = Scale "Noise scale" 0 5 0.1; sigma = Scale "Geometry regularity" 0 2 1.5; dl = Scale "Spatial integration step" 0 1 0.8; da = Scale "Angular integration step" 0 90 30; gauss_prec = Scale "Precision" 1 10 2; interpolation = Option "Interpolation" ["Nearest-neighbour", "Bilinear", "Runge-Kutta"] 0; fast_approx = Toggle "Fast approximation" true; _result = greyc (to_real iterations) (to_real amplitude) (to_real sharpness) (to_real anisotropy) (to_real alpha) (to_real sigma) (to_real dl) (to_real da) (to_real gauss_prec) (to_real interpolation) (to_real fast_approx) (resize Interpolate_bilinear (to_real scale) (to_real scale) x); } } } Filter_magick_item = class Menupullright "Magic_k" "various Image/Graphics Magick filters" { system command x = map_unary (system_image command) x; radius_widget = Scale "Radius" 1 100 10; sigma_widget = Scale "Sigma" 0.1 10 1; angle_widget = Scale "Angle" (-360) 360 0; text_widget = String "Text to draw" "AaBbCcDdEe"; print_colour triple = concat ["\"#", concat (map fmt triple), "\""] { fmt x = reverse (take 2 (reverse (print_base 16 (x + 256)))); } Foreground triple = class Colour "sRGB" triple { _flag = "-fill " ++ print_colour triple; Colour_edit space triple = this.Foreground triple; } foreground_widget = Foreground [0, 0, 0]; Background triple = class Colour "sRGB" triple { _flag = "-background " ++ print_colour triple; Colour_edit space triple = this.Background triple; } background_widget = Background [255, 255, 255]; Antialias value = class Toggle "Antialias" value { _flag = "-antialias", value = "+antialias"; Toggle_edit caption value = this.Antialias value; } antialias_widget = Antialias true; Gravity gravity = class Option_string "Gravity" [ "None", "Center", "East", "Forget", "NorthEast", "North", "NorthWest", "SouthEast", "South", "SouthWest", "West", "Static" ] gravity { _flag = "-gravity " ++ gravity; Option_edit caption labels value = this.Gravity labels?value; } gravity_widget = Gravity "Center"; Alpha alpha = class Option_string "Alpha" [ "On", "Off", "Set", "Opaque", "Transparent", "Extract", "Copy", "Shape", "Background" ] alpha { _flag = "-alpha " ++ alpha; Option_edit caption labels value = this.Alpha labels?value; } alpha_widget = Alpha "On"; Geometry_widget = class { _vislevel = 3; x = Expression "Y" 0; y = Expression "X" 0; hoffset = Expression "Horizontal offset" 10; voffset = Expression "Vertical offset" 10; _flag = concat [print x.expr, "x", print y.expr, format hoffset, format voffset] { // print an offset ... we want '+' in front of +ve strings format offset = concat ["+", print offset.expr], offset.expr >= 0 = print offset.expr; } }; Font_widget = class { _vislevel = 3; family = Option_string "Family" [ "Arial", "ArialBlack", "AvantGarde", "BitstreamCharter", "Bookman", "CenturySchoolbook", "ComicSansMS", "Courier", "CourierNew", "DejaVuSans", "DejaVuSansMono", "DejaVuSerif", "Dingbats", "FreeMono", "FreeSans", "FreeSerif", "Garuda", "Georgia", "Helvetica", "HelveticaNarrow", "Impact", "LiberationMono", "LiberationSans", "LiberationSerif", "NewCenturySchlbk", "Palatino", "Purisa", "Symbol", "Times", "TimesNewRoman", "Ubuntu", "Verdana", "Webdings" ] "Arial"; style = Option_string "Style" [ "Any", "Italic", "Normal", "Oblique" ] "Normal"; weight = Scale "Weight" 1 800 400; size = Scale "Point size" 1 100 12; stretch = Option_string "Stretch" [ "Any", "Condensed", "Expanded", "ExtraCondensed", "ExtraExpanded", "Normal", "SemiCondensed", "SemiExpanded", "UltraCondensed", "UltraExpanded" ] "Normal"; _flag = join_sep " " [ "-family", family.item, "-weight", print weight.value, "-pointsize", print size.value, "-style", style.item, "-stretch", stretch.item]; } Adaptive_blur_item = class Menuaction "_Adaptive Blur" "blur less near edges" { action x = class _result { _vislevel = 3; radius = radius_widget; sigma = sigma_widget; command = magick_command (concat ["-adaptive-blur ", print radius.value, "x", print sigma.value]); _result = system command x; } } Adaptive_sharpen_item = class Menuaction "_Adaptive Sharpen" "sharpen more near edges" { action x = class _result { _vislevel = 3; radius = radius_widget; sigma = sigma_widget; command = magick_command (concat ["-adaptive-sharpen ", print radius.value, "x", print sigma.value]); _result = system command x; } } Alpha_item = class Menuaction "_Alpha" "add/remove alpha channel" { action x = class _result { _vislevel = 3; alpha = alpha_widget; command = magick_command alpha._flag; _result = system command x; } } Annotate_item = class Menuaction "_Annotate" "add text annotation" { action x = class _result { _vislevel = 3; text = text_widget; font = Font_widget; geometry = Geometry_widget; gravity = gravity_widget; foreground = foreground_widget; antialias = antialias_widget; command = magick_command (join_sep " " [ font._flag, antialias._flag, gravity._flag, foreground._flag, "-annotate", geometry._flag, "\"" ++ text.value ++ "\""]); _result = system command x; } } Swirl_item = class Menuaction "_Swirl" "swirl around the centre" { action x = class _result { _vislevel = 3; angle = angle_widget; command = magick_command ("-swirl " ++ print angle.value); _result = system command x; } } } #separator Filter_tilt_item = class Menupullright "Ti_lt Brightness" "tilt brightness" { Left_right_item = class Menuaction "_Left to Right" "linear left-right brighten" { action x = class _result { _vislevel = 3; tilt = Scale "Left-right tilt" (-1) 1 0; _result = map_unary tilt_lr x { tilt_lr image = image * scale { ramp = im_fgrey image.width image.height; scale = (ramp - 0.5) * tilt + 1; } } } } Top_bottom_item = class Menuaction "_Top to Bottom" "linear top-bottom brighten" { action x = class _result { _vislevel = 3; tilt = Scale "Top-bottom tilt" (-1) 1 0; _result = map_unary tilt_tb x { tilt_tb image = image * scale { ramp = rot90 (im_fgrey image.height image.width); scale = (ramp - 0.5) * tilt + 1; } } } } sep1 = Menuseparator; Left_right_cos_item = class Menuaction "Cosine Left-_right" "cosine left-right brighten" { action x = class _result { _vislevel = 3; tilt = Scale "Left-right tilt" (-1) 1 0; shift = Scale "Shift by" (-1) 1 0; _result = map_unary tilt_lr x { tilt_lr image = image * scale { ramp = im_fgrey image.width image.height - 0.5 - shift.value; scale = 0.5 * tilt.value * cos (ramp * 180) + 1; } } } } Top_bottom_cos_item = class Menuaction "Cosine Top-_bottom" "cosine top-bottom brighten" { action x = class _result { _vislevel = 3; tilt = Scale "Top-bottom tilt" (-1) 1 0; shift = Scale "Shift by" (-1) 1 0; _result = map_unary tilt_tb x { tilt_tb image = image * scale { ramp = rot90 (im_fgrey image.height image.width) - 0.5 - shift.value; scale = 0.5 * tilt.value * cos (ramp * 180) + 1; } } } } sep2 = Menuseparator; Circular_item = class Menuaction "_Circular" "circular brighten" { action x = class _result { _vislevel = 3; tilt = Scale "Tilt" (-1) 1 0; hshift = Scale "Horizontal shift by" (-1) 1 0; vshift = Scale "Vertical shift by" (-1) 1 0; _result = map_unary tilt_tb x { tilt_tb image = image * scale { hramp = im_fgrey image.width image.height - 0.5 - hshift.value; vramp = rot90 (im_fgrey image.height image.width) - 0.5 - vshift.value; ramp = (hramp ** 2 + vramp ** 2) ** 0.5; scale = 0.5 * tilt.value * cos (ramp * 180) + 1; } } } } } Filter_blend_item = class Menupullright "_Blend" "blend objects together" { Scale_blend_item = class Menuaction "_Scale" "blend two objects together with a scale" { action a b = class _result { _vislevel = 3; p = Scale "Blend position" 0 1 0.5; _result = map_binary process a b { process im1 im2 = im1 * (1 - p.value) + im2 * p.value; } } } Image_blend_item = class Menuaction "_Image" "use an image to blend two objects" { action a b c = class _result { _vislevel = 3; i = Toggle "Invert mask" false; _result = map_trinary process a b c { process a b c = blend condition in1 in2, !i = blend (invert condition) in1 in2 { compare a b // prefer image as the condition = false, !has_image a && has_image b // prefer mono images as the condition = false, has_bands a && has_bands b && get_bands a > 1 && get_bands b == 1 // prefer uchar as the condition = false, has_format a && has_format b && get_format a > Image_format.UCHAR && get_format b == Image_format.UCHAR = true; [condition, in1, in2] = sortc compare [a, b, c]; } } } } Line_blend_item = class Menuaction "_Along Line" "blend between image a and image b along a line" { action a b = class _result { _vislevel = 3; orientation = Option "Orientation" [ "Left to Right", "Top to Bottom" ] 0; blend_position = Scale "Blend position" 0 1 0.5; blend_width = Scale "Blend width" 0 1 0.05; _result = map_binary process a b { process a b = blend (Image condition) b a { output_width = max_pair a.width b.width; output_height = max_pair a.height b.height; range = output_width, orientation == 0 = output_height; blend_position' = floor (range * blend_position.value); blend_width' = 1, blend_width.value == 0 = floor (range * blend_width.value); start = blend_position' - blend_width' / 2; background = (make_xy output_width output_height) >= blend_position'; ramp = im_grey blend_width' output_height, orientation == 0 = rot90 (im_grey blend_width' output_width); condition = insert_noexpand start 0 ramp background?0, orientation == 0 = insert_noexpand 0 start ramp background?1; } } } } Blend_alpha_item = class Menuaction "_Alpha" "blend images with optional alpha channels" { // usage: layerit foreground background // input images must be either 1 or 3 bands, optionally + 1 band // which is used as the alpha channel // rich lott scale_mask im opacity = (unsigned char) (to_real opacity / 255 * im); // to mono intensity = colour_transform_to Image_type.B_W; // All the blend functions // I am grateful to this page // http://www.pegtop.net/delphi/blendmodes/ // for most of the formulae. blend_normal mask opacity fg bg = blend (scale_mask mask opacity) fg bg; blend_iflighter mask opacity fg bg = blend (if fg' > bg' then mask' else 0) fg bg { fg' = intensity fg; bg' = intensity bg; mask' = scale_mask mask opacity ; } blend_ifdarker mask opacity fg bg = blend (if fg' < bg' then mask' else 0) fg bg { fg' = intensity fg ; bg' = intensity bg ; mask' = scale_mask mask opacity ; } blend_multiply mask opacity fg bg = blend (scale_mask mask opacity) fg' bg { fg' = fg / 255 * bg; } blend_add mask opacity fg bg = blend mask fg' bg { fg' = opacity / 255 * fg + bg; } blend_subtract mask opacity fg bg = blend mask fg' bg { fg' = bg - opacity / 255 * fg; } blend_screen mask opacity fg bg = blend mask fg' bg { fg' = 255 - (255 - bg) * (255 - (opacity / 255 * fg)) / 255; } blend_burn mask opacity fg bg = blend mask fg'' bg { // fades to white which has no effect. fg' = (255 - opacity) + opacity * fg / 255; fg'' = 255 - 255 * (255 - bg) / fg'; } blend_softlight mask opacity fg bg = blend mask' fg' bg { mask' = scale_mask mask opacity; fg' = (2 * bg * fg + bg * bg * (1 - 2 * fg / 255)) / 255; } blend_hardlight mask opacity fg bg = blend mask' fg' bg { mask' = scale_mask mask opacity; fg' = 2 / 255 * fg * bg, bg < 129 = 255 - 2 * (255 - bg) * (255 - fg) / 255; } blend_lighten mask opacity fg bg = blend mask' fg' bg { mask' = scale_mask mask opacity; fg' = if bg < fg then fg else bg; } blend_darken mask opacity fg bg = blend mask' fg' bg { mask' = scale_mask mask opacity; fg' = if bg > fg then fg else bg; } blend_dodge mask opacity fg bg = blend mask fg'' bg { // one added to avoid divide by zero fg' = 1 + 255 - (opacity / 255 * fg); fg'' = bg * 255 / fg'; } blend_reflect mask opacity fg bg = blend mask' fg' bg { mask' = scale_mask mask opacity; fg' = bg * bg / (255 - fg); } blend_freeze mask opacity fg bg = blend mask' fg' bg { mask' = scale_mask mask opacity; fg' = 255 - (255 - bg) * (255 - bg) / (1 + fg); } blend_or mask opacity fg bg = bg | (unsigned char) fg' { mask' = scale_mask mask opacity; fg' = fg * mask' / 255; } blend_and mask opacity fg bg = bg & (unsigned char) fg' { mask' = scale_mask mask opacity; fg' = fg * mask' / 255; } // blend types NORMAL = 0; IFLIGHTER = 1; IFDARKER = 2; MULTIPLY = 3; ADD = 4; SUBTRACT = 5; SCREEN = 6; BURN = 7; DODGE = 8; HARDLIGHT = 9; SOFTLIGHT = 10; LIGHTEN = 11; DARKEN = 12; REFLECT = 13; FREEZE = 14; OR = 15; AND = 16; // names we show the user for blend types names = Enum [ _ "Normal" => NORMAL, _ "If Lighter" => IFLIGHTER, _ "If Darker" => IFDARKER, _ "Multiply" => MULTIPLY, _ "Add" => ADD, _ "Subtract" => SUBTRACT, _ "Screen" => SCREEN, _ "Burn" => BURN, _ "Soft Light" => SOFTLIGHT, _ "Hard Light" => HARDLIGHT, _ "Lighten" => LIGHTEN, _ "Darken" => DARKEN, _ "Dodge" => DODGE, _ "Reflect" => REFLECT, _ "Freeze" => FREEZE, _ "Bitwise OR" => OR, _ "Bitwise AND" => AND ]; // functions we call for each blend type actions = Table [ [NORMAL, blend_normal], [IFLIGHTER, blend_iflighter], [IFDARKER, blend_ifdarker], [MULTIPLY, blend_multiply], [ADD, blend_add], [SUBTRACT, blend_subtract], [SCREEN, blend_screen], [BURN, blend_burn], [SOFTLIGHT, blend_softlight], [HARDLIGHT, blend_hardlight], [LIGHTEN, blend_lighten], [DARKEN, blend_darken], [DODGE, blend_dodge], [REFLECT, blend_reflect], [FREEZE, blend_freeze], [OR, blend_or], [AND, blend_and] ]; // make sure im has an alpha channel (set opaque if it hasn't) put_alpha im = im, im.bands == 4 || im.bands == 2 = im ++ 255; // make sure im has no alpha channel lose_alpha im = extract_bands 0 3 im, im.bands == 4 = im?0, im.bands == 2 = im; // does im have al alpha channel? has_alpha im = im.bands == 2 || im.bands == 4; // get the alpha (set opaque if no alpha) get_alpha img = img'?3, img.bands == 4 = img'?1 { img' = put_alpha img; } // add an alpha ... cast the alpha image to match the main image append_alpha im alpha = im ++ clip2fmt im.format alpha; // makes fg the same size as bg, displaced with u, v pixel offset moveit fg bg u v = insert_noexpand u v fg bg' { bg' = image_new bg.width bg.height fg.bands fg.format fg.coding fg.type 0 0 0; } action bg fg = class _value { _vislevel = 3; method = Option_enum "Blend mode" names "Normal"; opacity = Scale "Opacity" 0 255 255; hmove = Scale "Horizontal move by" (-bg.width) (bg.width) 0; vmove = Scale "Vertical move by" (-bg.height) (bg.height) 0; _value = append_alpha blended merged_alpha, has_alpha bg = blended { // displace and resize fg (need to displace alpha too) fg' = moveit (put_alpha fg) bg hmove vmove; // transform to sRGB fg'' = colour_transform_to Image_type.sRGB (lose_alpha fg'); bg' = colour_transform_to Image_type.sRGB (lose_alpha bg); // alphas merged merged_alpha = get_alpha bg | get_alpha fg'; // blend together blended = (actions.lookup 0 1 method.value_thing) (get_alpha fg') opacity.value fg'' bg'; } } } } Filter_overlay_header_item = class Menuaction "_Overlay" "make a colour overlay of two monochrome images" { action a b = class _result { _vislevel = 3; colour = Option "Colour overlay as" [ _ "Green over Red", _ "Blue over Red", _ "Red over Green", _ "Red over Blue", _ "Blue over Green", _ "Green over Blue" ] 0; _result = map_binary overlay a b { overlay a b = image_set_type Image_type.sRGB [(a' ++ b' ++ 0), (a' ++ 0 ++ b'), (b' ++ a' ++ 0), (b' ++ 0 ++ a'), (0 ++ a' ++ b'), (0 ++ b' ++ a')]?colour { a' = colour_transform_to Image_type.B_W a; b' = colour_transform_to Image_type.B_W b; } } } } Filter_colourize_item = class Menuaction "_Colourize" "use a colour image or patch to tint a mono image" { action a b = class _result { _vislevel = 3; tint = Scale "Tint" 0 1 0.6; _result = map_binary tintit a b { tintit a b = colour_transform_to (get_type colour) colourized' { // get the mono thing first [mono, colour] = sortc (const (is_colour_type @ get_type)) [a, b]; colour' = tint * colour_transform_to Image_type.LAB colour; mono' = colour_transform_to Image_type.B_W mono; colourized = (mono' / 2.55) ++ colour'?1 ++ colour'?2; colourized' = image_set_type Image_type.LAB colourized; } } } } Filter_browse_multiband_item = class Menupullright "Bro_wse" "browse though an image, bitwise or bandwise" { Bandwise_item = class Menuaction "B_andwise" "browse through the bands of a multiband image" { action image = class _result { _vislevel = 3; band = Scale "Band" 0 (image.bands - 1) 0; display = Option "Display as" [ _ "Grey", _ "Green over Red", _ "Blue over Red", _ "Red over Green", _ "Red over Blue", _ "Blue over Green", _ "Green over Blue" ] 0; _result = output { down = (int) band.value; up = down + 1; remainder = band.value - down; fade x a = Vector [0], x == 0 = a * x; a = fade remainder image?up; b = fade (1 - remainder) image?down; output = [ a + b, a ++ b ++ 0, a ++ 0 ++ b, b ++ a ++ 0, b ++ 0 ++ a, 0 ++ a ++ b, 0 ++ b ++ a ] ? display; } } } Bitwise_item = class Menuaction "Bi_twise" "browse through the bits of an image" { action x = class _result { _vislevel = 3; bit = Islider "Bit" 0 (nbits - 1) (nbits - 1) { nbits = x.bits, is_Image x = 8; Islider c f t v = class scope.Scale c f t ((int) v) { Scale = Islider; } } _result = map_unary process x { process im = (im & (0x1 << bit.value)) != 0; } } } } #separator Filter_negative_item = class Menuaction "Photographic _Negative" "swap black and white" { action x = map_unary invert x { invert in = clip2fmt in.format (colour_transform_to (get_type in) rgb') { rgb = colour_transform_to Image_type.sRGB in; rgb' = 255 - rgb; } } } Filter_solarize_item = class Menuaction "_Solarise" "invert colours above a threshold" { action x = class _result { _vislevel = 3; kink = Scale "Kink" 0 1 0.5; _result = map_unary process x { process image = hist_map tab'''' image { // max pixel value for this format mx = Image_format.maxval image.format; // make a LUT ... just 8 and 16 bit tab = im_identity_ushort image.bands mx, image.format == Image_format.USHORT = im_identity image.bands; tab' = Image tab; // make basic ^ shape tab'' = tab' * (1 / kink), tab' < mx * kink = (mx - tab') / (1 - kink); tab''' = clip2fmt image.format tab''; // smooth a bit mask = matrix_blur (tab'''.width / 8); tab'''' = convsep mask tab'''; } } } } Filter_diffuse_glow_item = class Menuaction "_Diffuse Glow" "add a halo to highlights" { action x = class _result { _vislevel = 3; r = Scale "Radius" 0 50 5; highlights = Scale "Highlights" 0 100 95; glow = Scale "Glow" 0 1 0.5; colour = Colour_new_item.Widget_colour_item.action; _result = map_unary process x { process image = image' { mono = (unsigned char) (colour_transform_to Image_type.B_W image); thresh = hist_thresh (highlights.value / 100) mono; mask = mono > thresh; blur = convsep (matrix_gaussian_blur r.value) mask; colour' = colour_transform_to image.type colour; image' = image + colour' * glow * (blur / 255); } } } } Filter_drop_shadow_item = class Menuaction "Drop S_hadow" "add a drop shadow to an image" { action x = class _result { _vislevel = 3; sx = Scale "Horizontal shadow" (-50) 50 5; sy = Scale "Vertical shadow" (-50) 50 5; ss = Scale "Shadow softness" 0 20 5; bg_colour = Expression "Background colour" 255; sd_colour = Expression "Shadow colour" 128; alpha = Toggle "Shadow in alpha channel" false; transparent = Toggle "Zero pixels are transparent" false; _result = map_unary shadow x { shadow image = Image final { blur_size = ss.value * 2 + 1; // matrix we blur with to soften shadows blur_matrix = matrix_gaussian_blur blur_size; matrix_size = blur_matrix.width; matrix_radius = (int) (matrix_size / 2) + 1; // position and size of shadow image in input cods // before and after fuzzing shadow_rect = Rect sx.value sy.value image.width image.height; fuzzy_shadow_rect = shadow_rect.margin_adjust matrix_radius; // size and pos of final image, in input cods final_rect = image.rect.union fuzzy_shadow_rect; // hard part of shadow in output cods shadow_rect' = Rect (shadow_rect.left - final_rect.left) (shadow_rect.top - final_rect.top) shadow_rect.width shadow_rect.height; // make the shadow mask ... true for parts which cast // a shadow mask = (foldr1 bitwise_and @ bandsplit) (image.value != 0), transparent = image_new image.width image.height 1 Image_format.UCHAR Image_coding.NOCODING Image_type.B_W 255 0 0; mask' = embed 0 shadow_rect'.left shadow_rect'.top final_rect.width final_rect.height mask; mask'' = convsep blur_matrix mask'; // use mask to fade between bg and shadow colour mk_background colour = image_new final_rect.width final_rect.height image.bands image.format image.coding image.type colour 0 0; bg_image = mk_background bg_colour.expr; shadow_image = mk_background sd_colour.expr; bg = blend mask'' shadow_image bg_image; // make a full size mask fg_mask = embed 0 (image.rect.left - final_rect.left) (image.rect.top - final_rect.top) final_rect.width final_rect.height mask; // wrap up the input image ... put the shadow colour // around it, so if we are outputting a separate // alpha the shadow colour will be set correctly fg = insert (image.rect.left - final_rect.left) (image.rect.top - final_rect.top) image.value shadow_image; final // make a separate alpha = fg ++ mask'', alpha // paste image over shadow = if fg_mask then fg else bg; } } } } Filter_paint_text_item = class Menuaction "_Paint Text" "paint text into an image" { action x = paint_position, is_Group x = paint_area { paint_area = class _result { _check_args = [ [x, "x", check_Image] ]; _vislevel = 3; text = String "Text to paint" "Hello world!"; font = Fontname "Use font" Workspaces.Preferences.PAINTBOX_FONT; align = Option "Alignment" ["Left", "Centre", "Right"] 0; dpi = Expression "DPI" 300; colour = Expression "Text colour" 255; place = Region x (x.width / 4) (x.height / 4) (x.width / 2) (x.height / 2); _result = insert_noexpand place.left place.top (blend txt' fg place) x { fg = image_new place.width place.height x.bands x.format x.coding x.type colour.expr 0 0; txt = Image (im_text text.value font.value place.width align.value (to_real dpi)); bg = im_black place.width place.height 1; txt' = insert_noexpand 0 0 txt bg; } } paint_position = class _result { _vislevel = 3; text = Pattern_images_item.Text_item.action; colour = Expression "Text colour" 255; position = Option "Position" [ _ "North-west", _ "North", _ "North-east", _ "West", _ "Centre", _ "East", _ "South-west", _ "South", _ "South-east", _ "Specify in pixels" ] 4; left = Expression "Pixels from left" 0; top = Expression "Pixels from top" 0; _result = map_unary paint x { paint image = insert_noexpand x' y' place' image { xr = image.width - text.width; yr = image.height - text.height; x = left.expr, position == 9 = [0, xr / 2, xr]?(position % 3); y = top.expr, position == 9 = [0, yr / 2, yr]?(position / 3); x' = range 0 x (image.width - 1); y' = range 0 y (image.height - 1); w' = range 1 text.width (image.width - x'); h' = range 1 text.height (image.height - y'); place = extract_area x' y' w' h' image; text' = insert_noexpand 0 0 text (im_black w' h' 1); fg = image_new w' h' image.bands image.format image.coding image.type colour.expr 0 0; place' = blend text' fg place; } } } } } nip2-8.7.0/share/nip2/compat/7.26/Histogram.def0000644000175000017500000001474013224651032015571 00000000000000Hist_new_item = class Menupullright "_New" "new histogram" { Hist_item = class Menuaction "Histogram" "make an identity histogram" { action = class _result { _vislevel = 3; d = Option "Depth" ["8 bit", "16 bit"] 0; _result = Plot [] ([im_identity 1, im_identity_ushort 1 65536]?d); } } Hist_new_from_matrix = Matrix_buildlut_item; Hist_from_image_item = class Menuaction "Ta_g Image As Histogram" "set image Type to Histogram" { action x = hist_tag x; } Tone_item = class Menuaction "_Tone Curve" "make a new tone mapping curve" { action = class _result { _vislevel = 3; d = Option "Depth" ["8 bit", "16 bit"] 0; b = Scale "Black point" 0 100 0; w = Scale "White point" 0 100 100; sp = Scale "Shadow point" 0.1 0.3 0.2; mp = Scale "Mid-tone point" 0.4 0.6 0.5; hp = Scale "Highlight point" 0.7 0.9 0.8; sa = Scale "Shadow adjust" (-15) 15 0; ma = Scale "Mid-tone adjust" (-30) 30 0; ha = Scale "Highlight adjust" (-15) 15 0; _result = tone_build fmt b w sp mp hp sa ma ha { fmt = [Image_format.UCHAR, Image_format.USHORT]?d; } } } } Hist_convert_to_hist_item = class Menuaction "Con_vert to Histogram" "convert anything to a histogram" { action x = hist_tag (to_image x); } Hist_find_item = class Menupullright "_Find" "find a histogram" { Oned_item = class Menuaction "_One Dimension" "for a n-band image, make an n-band 1D histogram" { action x = map_unary hist_find x; } Nd_item = class Menuaction "_Many Dimensions" "for a n-band image, make an n-dimensional histogram" { action x = class _result { _vislevel = 3; // default to something small-ish bins = Expression "Number of bins in each dimension" 8; _result = map_unary process x { process in = hist_find_nD bins in; } } } Indexed_item = class Menuaction "_Indexed" "use a 1-band index image to pick bins for an n-band image" { action x y = map_binary map x y { map a b = hist_find_indexed index im { [im, index] = sortc (const is_index) [a, b]; is_index x = has_image x && b == 1 && (f == Image_format.UCHAR || f == Image_format.USHORT) { im = get_image x; b = get_bands x; f = get_format x; } } } } } Hist_map_item = class Menuaction "_Map" "map an image through a histogram" { action x y = map_binary map x y { map a b = hist_map hist im { [im, hist] = sortc (const is_hist) [a, b]; } } } Hist_eq_item = Filter_enhance_item.Hist_equal_item; #separator Hist_cum_item = class Menuaction "_Integrate" "form cumulative histogram" { action x = map_unary hist_cum x; } Hist_diff_item = class Menuaction "_Differentiate" "find point-to-point differences (inverse of Integrate)" { action x = map_unary hist_diff x; } Hist_norm_item = class Menuaction "N_ormalise" "normalise a histogram" { action x = map_unary hist_norm x; } Hist_match_item = class Menuaction "Ma_tch" "find LUT which will match first histogram to second" { action in ref = map_binary hist_match in ref; } Hist_zerox_item = class Menuaction "_Zero Crossings" "find zero crossings" { action x = class _result { _vislevel = 3; edge = Option "Direction" [ "Positive-going", "Negative-going" ] 0; _result = map_unary (zerox (if edge == 0 then -1 else 1)) x; } } #separator Hist_profile_item = class Menuaction "Find _Profile" "search from image edges for non-zero pixels" { action x = class _result { _vislevel = 3; edge = Option "Search from" [ "Top edge down", "Left edge to right", "Bottom edge up", "Right edge to left" ] 2; _result = map_unary profile x { profile image = (Plot_histogram @ hist_tag) [ profilemb 0 image.value, profilemb 1 image.value, profilemb 0 (fliptb image.value), profilemb 1 (fliplr image.value) ]?edge; // im_profile only does 1 band images :-( profilemb d = bandjoin @ map (converse im_profile d) @ bandsplit; } } } Hist_project_item = class Menuaction "Find Pro_jections" "find horizontal and vertical projections" { action x = class { _vislevel = 2; _result = map_unary project x; // extract the result ... could be a group extr n = Plot_histogram _result?n, is_list _result = Group (map (Plot_histogram @ converse subscript n) _result.value); horizontal = extr 0; vertical = extr 1; centre = (gravity horizontal, gravity vertical); } } #separator Hist_graph_item = class Menuaction "P_lot Slice" "plot a slice along a guide or arrow" { action x = class _value { _vislevel = 3; width = Scale "Width" 1 40 1; displace = Scale "Horizontal displace" (-50) 50 0; vdisplace = Scale "Vertical displace" (-50) 50 0; _value = map_unary graph x { graph arrow = hist_tag area' { area = extract_arrow displace.value vdisplace.value width.value arrow; // squish vertically to get an average area' = resize Interpolate_bilinear 1 (1 / width.value) area; } } } } Extract_arrow_item = class Menuaction "Extract _Arrow" "extract the area around an arrow" { action x = class _value { _vislevel = 3; width = Scale "Width" 1 40 1; displace = Scale "Horizontal displace" (-50) 50 0; vdisplace = Scale "Vertical displace" (-50) 50 0; _value = map_unary (extract_arrow displace.value vdisplace.value width.value) x; } } Hist_plot_item = class Menuaction "Plot _Object" "plot an object as a bar, point or line graph" { action x = class _result { _vislevel = 3; format = Option_enum "Format" Plot_format.names "YYYY"; style = Option_enum "Style" Plot_style.names "Line"; auto = Toggle "Auto Range" true; xmin = Expression "X range minimum" 0; xmax = Expression "X range maximum" 1; ymin = Expression "Y range minimum" 0; ymax = Expression "Y range maximum" 1; _result = Plot options (image x) { options = [$style => style.value, $format => format.value] ++ range; range = [], auto = [$xmin => xmin.expr, $xmax => xmax.expr, $ymin => ymin.expr, $ymax => ymax.expr]; image x = image (extract_arrow 0 0 1 x), is_Arrow x = get_image x, has_image x = x2b im, b == 1 = im { im = get_image (to_image x); w = get_width im; h = get_height im; b = get_bands im; // matrix to image makes a 1-band mxn image // we need to put columns into bands x2b im = bandjoin (map extract_col [0 .. w - 1]) { extract_col x = extract_area x 0 1 h im; } } } } } nip2-8.7.0/share/nip2/compat/7.26/Object.def0000644000175000017500000000222013224651032015030 00000000000000Object_duplicate_item = class Menuaction "_Duplicate" "take a copy of an object" { action x = map_unary copy x; } #separator Object_list_to_group_item = class Menuaction "_List to Group" "turn a list of objects into a group" { action x = to_group x; } Object_group_to_list_item = class Menuaction "_Group to List" "turn a group into a list of objects" { action x = to_list x; } #separator Object_break_item = class Menuaction "_Break Up Object" "break an object into a list of components" { action x = map_unary break x { break x = bandsplit x, is_Image x = map Vector x.value, is_Matrix x = x.value, is_Vector x || is_Real x = error "Breakup: not Image/Matrix/Vector/Real"; } } Object_assemble_item = class Menuaction "_Assemble Objects" "assemble a list (or group) of objects into a single object" { action x = map_unary ass x { ass x = [], x == [] = Vector x, is_real_list x = Matrix x, is_matrix x = bandjoin x, is_listof is_Image x = Vector (map get_value x), is_listof is_Real x = Matrix (map get_value x), is_listof is_Vector x = error "Assemble: not list of Image/Vector/Real/image/real"; } } nip2-8.7.0/share/nip2/compat/7.26/Makefile.in0000644000175000017500000003675113350464104015231 00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = share/nip2/compat/7.26 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(startdir)" DATA = $(start_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BISON = @BISON@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DLLWRAP = @DLLWRAP@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FFTW3_CFLAGS = @FFTW3_CFLAGS@ FFTW3_LIBS = @FFTW3_LIBS@ FGREP = @FGREP@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_LIBS = @GSL_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ IP_CFLAGS = @IP_CFLAGS@ IP_LIBS = @IP_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBGOFFICE_CFLAGS = @LIBGOFFICE_CFLAGS@ LIBGOFFICE_LIBS = @LIBGOFFICE_LIBS@ LIBGSF_CFLAGS = @LIBGSF_CFLAGS@ LIBGSF_LIBS = @LIBGSF_LIBS@ LIBGVC_CFLAGS = @LIBGVC_CFLAGS@ LIBGVC_LIBS = @LIBGVC_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ 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@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ REQUIRED_PACKAGES_CFLAGS = @REQUIRED_PACKAGES_CFLAGS@ REQUIRED_PACKAGES_LIBS = @REQUIRED_PACKAGES_LIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOP_SRCDIR = @TOP_SRCDIR@ UPDATE_DESKTOP_DATABASE = @UPDATE_DESKTOP_DATABASE@ UPDATE_MIME_DATABASE = @UPDATE_MIME_DATABASE@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XDG_OPEN = @XDG_OPEN@ XGETTEXT = @XGETTEXT@ 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@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ startdir = $(pkgdatadir)/compat/7.26 start_DATA = \ Math.def \ Image.def \ Colour.def \ Tasks.def \ Object.def \ Filter.def \ Matrix.def \ Widgets.def \ Histogram.def \ _joe_extra.def \ _joe_utilities.def \ _convert.def \ _generate.def \ _list.def \ _predicate.def \ _stdenv.def \ _Object.def \ _types.def EXTRA_DIST = $(start_DATA) all: all-am .SUFFIXES: $(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) --foreign share/nip2/compat/7.26/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign share/nip2/compat/7.26/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): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-startDATA: $(start_DATA) @$(NORMAL_INSTALL) @list='$(start_DATA)'; test -n "$(startdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(startdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(startdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(startdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(startdir)" || exit $$?; \ done uninstall-startDATA: @$(NORMAL_UNINSTALL) @list='$(start_DATA)'; test -n "$(startdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(startdir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: 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 check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(startdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-startDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-startDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-startDATA install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags-am uninstall uninstall-am uninstall-startDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: nip2-8.7.0/share/nip2/compat/7.26/Matrix.def0000644000175000017500000002433413224651032015100 00000000000000 Matrix_build_item = class Menupullright "_New" "make a new matrix of some sort" { Plain_item = class Menuaction "_Plain" "make a new plain matrix widget" { action = Matrix (identity_matrix 3); } Convolution_item = class Menuaction "_Convolution" "make a new convolution matrix widget" { action = Matrix_con 1 0 [[0, 0, 0], [0, 1, 0], [0, 0, 0]]; } Recombination_item = class Menuaction "_Recombination" "make a new recombination matrix widget" { action = Matrix_rec (identity_matrix 3); } Morphology_item = class Menuaction "_Morphology" "make a new morphology matrix widget" { action = Matrix_mor [[0, 0, 0], [0, 255, 0], [0, 0, 0]]; } sep1 = Menuseparator; Matrix_identity_item = class Menuaction "_Identity" "make an identity matrix" { action = class _result { _vislevel = 3; s = Expression "Size" 5; _result = Matrix (identity_matrix s.expr); } } Matrix_series_item = class Menuaction "_Series" "make a series" { action = class _result { _vislevel = 3; s = Expression "Start value" 0; t = Expression "Step by" 1; e = Expression "End value" 5; _result = Matrix (transpose [series]) { series = [to_real s, to_real t.. to_real e]; } } } Matrix_square_item = class Menuaction "_Square" "make a square matrix" { action = class _result { _vislevel = 3; s = Expression "Size" 5; _result = Matrix_con (s.expr ** 2) 0 square { line = take s.expr [1, 1 ..]; square = replicate s.expr line; } } } Matrix_circular_item = class Menuaction "_Circular" "make a circular matrix" { action = class _result { _vislevel = 3; r = Expression "Radius" 5; _result = Matrix_con (sum circle) 0 circle { line = [-r.expr .. r.expr]; xes = replicate (2 * r.expr + 1) line; yes = transpose xes; circle = map2 (map2 pyth) xes yes { pyth a b = 1, (a**2 + b**2) ** 0.5 <= r.expr = 0; } } } } Matrix_gaussian_item = class Menuaction "_Gaussian" "make a gaussian matrix" { action = class _result { _vislevel = 3; s = Scale "Sigma" 0.001 10 1; ma = Scale "Minimum amplitude" 0 1 0.2; integer = Toggle "Integer" false; _result = fn s.value ma.value { fn = im_gauss_imask, integer = im_gauss_dmask; } } } Matrix_laplacian_item = class Menuaction "_Laplacian" "make the Laplacian of a Gaussian matrix" { action = class _result { _vislevel = 3; s = Scale "Sigma" 0.001 10 1.5; ma = Scale "Minimum amplitude" 0 1 0.1; integer = Toggle "Integer" false; _result = fn s.value ma.value { fn = im_log_imask, integer = im_log_dmask; } } } } Matrix_to_matrix_item = class Menuaction "Con_vert to Matrix" "convert anything to a matrix" { action x = to_matrix x; } #separator Matrix_extract_item = class Menupullright "_Extract" "extract rows or columns from a matrix" { Rows_item = class Menuaction "_Rows" "extract rows" { action x = class _result { _vislevel = 3; first = Expression "Extract from row" 0; number = Expression "Extract this many rows" 1; _result = map_unary process x { process x = extract_area 0 first (get_width x) number x; } } } Columns_item = class Menuaction "_Columns" "extract columns" { action x = class _result { _vislevel = 3; first = Expression "Extract from column" 0; number = Expression "Extract this many columns" 1; _result = map_unary process x { process mat = extract_area first 0 number (get_height x) x; } } } Area_item = class Menuaction "_Area" "extract area" { action x = class _result { _vislevel = 3; left = Expression "First column" 0; top = Expression "First row" 0; width = Expression "Number of columns" 1; height = Expression "Number of rows" 1; _result = map_unary process x { process mat = extract_area left top width height x; } } } Diagonal_item = class Menuaction "_Diagonal" "extract diagonal" { action x = class _result { _vislevel = 3; which = Option "Extract" [ "Leading Diagonal", "Trailing Diagonal" ] 0; _result = map_unary process x { process mat = mat.Matrix_base (map2 extr [0..] mat.value), which == 0 = mat.Matrix_base (map2 extr [mat.width - 1, mat.width - 2 .. 0] mat.value); extr n l = [l?n]; } } } } Matrix_insert_item = class Menupullright "_Insert" "insert rows or columns into a matrix" { // make a new 8-bit uchar image of wxh with pixels set to p // use to generate new cells newim w h p = image_new w h 1 Image_format.UCHAR Image_coding.NOCODING Image_type.B_W p 0 0; Rows_item = class Menuaction "_Rows" "insert rows" { action x = class _result { _vislevel = 3; first = Expression "Insert at row" 0; number = Expression "Insert this many rows" 1; item = Expression "Set new cells to" 0; _result = map_unary process x { process x = foldl1 join_tb (concat [top, new, bottom]) { top = [extract_area 0 0 w f x], f > 0 = []; new = [(if is_Matrix x then to_matrix else id) (newim w number item.expr)]; bottom = [extract_area 0 f w (h - f) x], f < h = []; f = to_real first; w = get_width x; h = get_height x; } } } } Columns_item = class Menuaction "_Columns" "insert columns" { action x = class _result { _vislevel = 3; first = Expression "Insert at column" 0; number = Expression "Insert this many columns" 1; item = Expression "Set new cells to" 0; _result = map_unary process x { process x = foldl1 join_lr (concat [left, new, right]) { left = [extract_area 0 0 f h x], f > 0 = []; new = [(if is_Matrix x then to_matrix else id) (newim number h item.expr)]; right = [extract_area f 0 (w - f) h x], f < w = []; f = to_real first; w = get_width x; h = get_height x; } } } } } Matrix_delete_item = class Menupullright "_Delete" "delete rows or columns from a matrix" { // remove number of items, starting at first delete first number l = take (to_real first) l ++ drop (to_real first + to_real number) l; Rows_item = class Menuaction "_Rows" "delete rows" { action x = class _result { _vislevel = 3; first = Expression "Delete from row" 0; number = Expression "Delete this many rows" 1; _result = map_unary process x { process x = foldl1 join_tb (concat [top, bottom]) { top = [extract_area 0 0 w f x], f > 0 = []; bottom = [extract_area 0 b w (h - b) x], b < h = []; f = to_real first; n = to_real number; b = f + n; w = get_width x; h = get_height x; } } } } Columns_item = class Menuaction "_Columns" "delete columns" { action x = class _result { _vislevel = 3; first = Expression "Delete from column" 0; number = Expression "Delete this many columns" 1; _result = map_unary process x { process x = foldl1 join_lr (concat [left, right]) { left = [extract_area 0 0 f h x], f > 0 = []; right = [extract_area r 0 (w - r) h x], r < w = []; f = to_real first; n = to_real number; r = f + n; w = get_width x; h = get_height x; } } } } } Matrix_join = class Menupullright "_Join" "join two matricies" { Left_right_item = class Menuaction "_Left to Right" "join two matricies left-right" { action a b = map_binary join_lr a b; } Top_bottom_item = class Menuaction "_Top to Bottom" "joiin two matricies top-bottom" { action a b = map_binary join_tb a b; } } Matrix_rotate_item = class Menupullright "_Rotate" "clockwise rotation by fixed angles" { rot90 = Image_transform_item.Rotate_item.Fixed_item.Rot90_item; rot180 = Image_transform_item.Rotate_item.Fixed_item.Rot180_item; rot270 = Image_transform_item.Rotate_item.Fixed_item.Rot270_item; Matrix_rot45_item = class Menuaction "_45 Degrees" "45 degree rotate (square, odd-length-sides only)" { action x = map_unary rot45 x; } } Matrix_flip_item = Image_transform_item.Flip_item; Matrix_sort_item = class Menuaction "_Sort" "sort by column or row" { action x = class _result { _vislevel = 3; o = Option (_ "Orientation") [ _ "Sort by column", _ "Sort by row" ] 0; i = Expression (_ "Sort on index") 0; d = Option (_ "Direction") [ _ "Ascending", _ "Descending" ] 0; _result = map_unary sort x { idx = to_real i; pred a b = a?idx <= b?idx, d == 0 = a?idx >= b?idx; sort x = (x.Matrix_base @ sortc pred) x.value, o == 0 = (x.Matrix_base @ transpose @ sortc pred @ transpose) x.value; } } } #separator Matrix_invert_item = class Menuaction "In_vert" "calculate inverse matrix" { action x = map_unary (converse power (-1)) x; } Matrix_transpose_item = class Menuaction "_Transpose" "swap rows and columns" { action x = map_unary transpose x; } #separator Matrix_plot_scatter_item = class Menuaction "_Plot Scatter" "plot a scatter graph of a matrix of [x,y1,y2,..] coordinates" { action x = class _result { _check_args = [ [x, "x", check_Matrix] ]; _vislevel = 3; auto = Toggle "Auto Range" true; xmin = Expression "X range minimum" 0; xmax = Expression "X range maximum" 1; ymin = Expression "Y range minimum" 0; ymax = Expression "Y range maximum" 1; _result = Plot options ((x2b @ get_image @ to_image) x) { options = [$style => Plot_style.POINT, $format => Plot_format.XYYY] ++ range; range = [], auto = [$xmin => xmin.expr, $xmax => xmax.expr, $ymin => ymin.expr, $ymax => ymax.expr]; // matrix to image makes a 1-band mxn image // we need to put columns into bands x2b im = bandjoin (map extract_col [0 .. w - 1]) { w = get_width im; h = get_height im; b = get_bands im; extract_col x = extract_area x 0 1 h im; } } } } Matrix_plot_item = Hist_plot_item; Matrix_buildlut_item = class Menuaction "_Build LUT From Scatter" "make a lookup table from a matrix of [x,y1,y2..] coordinates" { action x = class _result { _check_args = [ [x, "x", check_Matrix] ]; _result = buildlut x; } } nip2-8.7.0/share/nip2/compat/7.26/_convert.def0000644000175000017500000004210113224651032015443 00000000000000 /* Try to make a Matrix ... works for Vector/Image/Real, plus image/real */ to_matrix x = to_matrix x.expr, is_Expression x = x, is_Matrix x = oo_unary_function to_matrix_op x, is_class x = tom x { to_matrix_op = Operator "to_matrix" tom Operator_type.COMPOUND false; tom x = Matrix (itom x), is_image x = Matrix [[x]], is_real x = Matrix [x], is_real_list x = Matrix x, is_matrix x = error (_ "bad arguments to " ++ "to_matrix"); itom i = (im_vips2mask ((double) i)).value, is_image i = error (_ "not image"); } /* Try to make an Image ... works for Vector/Matrix/Real, plus image/real * Special case for Colour ... pull out the colour_space and set Type in the * image. */ to_image x = to_image x.expr, is_Expression x = x, is_Image x = Image (image_set_type (Image_type.colour_spaces.lookup 0 1 x.colour_space) (mtoi [x.value])), is_Colour x = oo_unary_function to_image_op x, is_class x = toi x { to_image_op = Operator "to_image" toi Operator_type.COMPOUND false; toi x = Image x, is_image x = Image (mtoi [[x]]), is_real x = Image (mtoi [x]), is_real_list x = Image (mtoi x), is_matrix x = error (_ "bad arguments to " ++ "to_image"); // [[real]] -> image mtoi m = im_mask2vips (Matrix m), width != 3 = joinup (im_mask2vips (Matrix m)) { width = len m?0; height = len m; joinup i = b1 ++ b2 ++ b3 { b1 = extract_area 0 0 1 height i; b2 = extract_area 1 0 1 height i; b3 = extract_area 2 0 1 height i; } } } // like to_image, but we do 1x1 pixel + x, then embed it up // always make an unwrapped image for speed ... this gets used by ifthenelse // and stuff like that // format can be NULL, meaning set format from x to_image_size width height bands format x = x, is_image x = x.value, is_Image x = im'' { // we want x to set the target format if we don't have one, so we // can't use image_new im = im_black 1 1 bands + x; im' = clip2fmt format im, format != NULL = im; im'' = embed 1 0 0 width height im'; } /* Try to make a Colour. */ to_colour x = to_colour x.expr, is_Expression x = x, is_Colour x = to_colour (extract_area x.left x.top 1 1 x.image), is_Mark x = oo_unary_function to_colour_op x, is_class x = toc x { to_colour_op = Operator "to_colour" toc Operator_type.COMPOUND false; toc x = Colour (colour_space (get_type x)) (map mean (bandsplit (get_image x))), has_image x && has_type x = Colour "sRGB" [x, x, x], is_real x // since Colour can't do mono = Colour "sRGB" x, is_real_list x && is_list_len 3 x = map toc x, is_matrix x = error (_ "bad arguments to " ++ "to_colour"); colour_space type = table.get_name type, table.has_name type = error (_ "unable to make Colour from " ++ table.get_name type ++ _ " image") { table = Image_type.colour_spaces; } } /* Try to make a real. (not a Real!) */ to_real x = to_real x.expr, is_Expression x = oo_unary_function to_real_op x, is_class x = tor x { to_real_op = Operator "to_real" tor Operator_type.COMPOUND false; tor x = x, is_real x = abs x, is_complex x = 1, is_bool x && x = 0, is_bool x && !x = error (_ "bad arguments to " ++ "to_real"); } /* Try to make a list ... ungroup, basically. We remove the innermost layer of * Groups. */ to_list x = x.value, is_Group x && !contains_Group x.value = Group (map to_list x.value), is_Group x = x; /* Try to make a group. The innermost list objects become Group()'d. */ to_group x = Group x, is_list x && !contains_Group x = Group (map to_group x.value), is_Group x = x; /* Parse a positive integer. */ parse_pint l = foldl acc 0 l { acc sofar ch = sofar * 10 + parse_c ch; /* Turn a char digit to a number. */ parse_c ch = error (_ "not a digit"), !is_digit ch = (int) ch - (int) '0'; } /* Parse an integer, with an optional sign character. */ parse_int l = error (_ "badly formed number"), !is_list_len 2 parts = sign * n { parts = splitpl [member "+-", is_digit] l; n = parse_pint parts?1; sign = 1, parts?0 == [] || parts?0 == "+" = -1; } /* Parse a float. * [+-]?[0-9]*([.][0-9]*)?(e[0-9]+)? */ parse_float l = err, !is_list_len 4 parts = (ipart + fpart) * 10 ** exp { err = error (_ "badly formed number"); parts = splitpl [ member "+-0123456789", member ".0123456789", member "eE", member "+-0123456789" ] l; ipart = parse_int parts?0; fpart = 0, parts?1 == []; = err, parts?1?0 != '.' = parse_pint (tl parts?1) / 10 ** (len parts?1 - 1); exp = 0, parts?2 == [] && parts?3 == [] = err, parts?2 == [] = parse_int parts?3; } /* Parse a time in "hh:mm:ss" into seconds. We could do this in one line :) = (sum @ map2 multiply (iterate (multiply 60) 1) @ reverse @ map parse_pint @ map (subscript (splitpl [is_digit, equal ':', is_digit, equal ':', is_digit] l))) [0,2,4]; but it's totally unreadable. */ parse_time l = error (_ "badly formed time"), !is_list_len 5 parts = s + 60 * m + 60 * 60 * h { parts = splitpl [is_digit, equal ':', is_digit, equal ':', is_digit] l; h = parse_int parts?0; m = parse_int parts?2; s = parse_int parts?4; } /* matrix to convert D65 XYZ to D50 XYZ ... direct conversion, found by * measuring a macbeth chart in D50 and D65 and doing a LMS to get a matrix */ D652D50_direct = Matrix [[ 1.13529, -0.0604663, -0.0606321 ], [ 0.0975399, 0.935024, -0.0256156 ], [ -0.0336428, 0.0414702, 0.994135 ]]; D502D65_direct = D652D50_direct ** -1; /* Convert normalised XYZ to bradford RGB. */ XYZ2RGBbrad = Matrix [[0.8951, 0.2664, -0.1614], [-0.7502, 1.7135, 0.0367], [0.0389, -0.0685, 1.0296]]; /* Convert bradford RGB to normalised XYZ. */ RGBbrad2XYZ = XYZ2RGBbrad ** -1; D93_whitepoint = Vector [89.7400, 100, 130.7700]; D75_whitepoint = Vector [94.9682, 100, 122.5710]; D65_whitepoint = Vector [95.0470, 100, 108.8827]; D55_whitepoint = Vector [95.6831, 100, 92.0871]; D50_whitepoint = Vector [96.4250, 100, 82.4680]; A_whitepoint = Vector [109.8503, 100, 35.5849]; // 2856K B_whitepoint = Vector [99.0720, 100, 85.2230]; // 4874K C_whitepoint = Vector [98.0700, 100, 118.2300]; // 6774K E_whitepoint = Vector [100, 100, 100]; // ill. free D3250_whitepoint = Vector [105.6590, 100, 45.8501]; Whitepoints = Enum [ $D93 => D93_whitepoint, $D75 => D75_whitepoint, $D65 => D65_whitepoint, $D55 => D55_whitepoint, $D50 => D50_whitepoint, $A => A_whitepoint, $B => B_whitepoint, $C => C_whitepoint, $E => E_whitepoint, $D3250 => D3250_whitepoint ]; /* Convert D50 XYZ to D65 using the bradford chromatic adaptation approx. */ im_D502D65 xyz = xyz''' { xyz' = xyz / D50_whitepoint; rgb = recomb XYZ2RGBbrad xyz'; // move white in bradford RGB rgb' = rgb / Vector [0.94, 1.02, 1.33]; xyz'' = recomb RGBbrad2XYZ rgb'; // back to D65 xyz''' = xyz'' * D65_whitepoint; } /* Convert D65 XYZ to D50 using the bradford approx. */ im_D652D50 xyz = xyz''' { xyz' = xyz / D65_whitepoint; rgb = recomb XYZ2RGBbrad xyz'; // move white in bradford RGB rgb' = rgb * Vector [0.94, 1.02, 1.33]; xyz'' = recomb RGBbrad2XYZ rgb'; xyz''' = xyz'' * D50_whitepoint; } /* Convert D50 XYZ to Lab. */ im_D50XYZ2Lab xyz = im_XYZ2Lab_temp xyz D50_whitepoint.value?0 D50_whitepoint.value?1 D50_whitepoint.value?2; im_D50Lab2XYZ lab = im_Lab2XYZ_temp lab D50_whitepoint.value?0 D50_whitepoint.value?1 D50_whitepoint.value?2; /* ... and mono conversions */ im_sRGB2mono in = (image_set_type Image_type.B_W @ clip2fmt (get_header "BandFmt" in) @ recomb (Matrix [[.3, .6, .1]])) in; im_mono2sRGB in = image_set_type Image_type.sRGB (in ++ in ++ in); im_sRGB2Lab = im_XYZ2Lab @ im_sRGB2XYZ; im_Lab2sRGB = im_XYZ2sRGB @ im_Lab2XYZ; // from the 16 bit RGB and GREY formats im_1628 x = im_clip (x >> 8); im_162f x = x / 256; im_8216 x = (im_clip2us x) << 8; im_f216 x = im_clip2us (x * 256); im_RGB162GREY16 in = (image_set_type Image_type.GREY16 @ clip2fmt (get_header "BandFmt" in) @ recomb (Matrix [[.3, .6, .1]])) in; im_GREY162RGB16 in = image_set_type Image_type.RGB16 (in ++ in ++ in); /* apply a func to an image ... make it 1 or 3 bands, and reapply other bands * on the way out. Except if it's LABPACK. */ colour_apply fn x = fn x, b == 1 || b == 3 || c == Image_coding.LABPACK = x'' { b = get_bands x; c = get_coding x; first = extract_bands 0 3 x, b > 3 = extract_bands 0 1 x; tail = extract_bands 3 (b - 3) x, b > 3 = extract_bands 1 (b - 1) x; x' = fn first; x'' = x' ++ clip2fmt (get_format x') tail; } /* Any 1-ary colour op, applied to Vector/Image/Matrix or image */ colour_unary fn x = oo_unary_function colour_op x, is_class x = colour_apply fn x, is_image x = colour_apply fn [x], is_real x = error (_ "bad arguments to " ++ "colour_unary") { // COMPOUND_REWRAP ... signal to the colour class to go to image and // back colour_op = Operator "colour_unary" colour_object Operator_type.COMPOUND_REWRAP false; colour_object x = colour_real_list x, is_real_list x = map colour_real_list x, is_matrix x = colour_apply fn x, is_image x = error (_ "bad arguments to " ++ "colour_unary"); colour_real_list l = (to_matrix (fn (float) (to_image (Vector l)).value)).value?0; } /* Any symmetric 2-ary colour op, applied to Vector/Image/Matrix or image ... * name is op name for error messages etc. */ colour_binary name fn x y = oo_binary_function colour_op x y, is_class x = oo_binary'_function colour_op x y, is_class y = fn x y, is_image x && is_image y = error (_ "bad arguments to " ++ name) { colour_op = Operator name colour_object Operator_type.COMPOUND_REWRAP true; colour_object x y = fn x y, is_image x && is_image y = colour_real_list fn x y, is_real_list x && is_real_list y = map (colour_real_list fn x) y, is_real_list x && is_matrix y = map (colour_real_list (converse fn) y) x, is_matrix x && is_real_list y = map2 (colour_real_list fn) x y, is_matrix x && is_matrix y = error (_ "bad arguments to " ++ name); colour_real_list fn l1 l2 = (to_matrix (fn i1 i2)).value?0 { i1 = (float) (to_image (Vector l1)).value; i2 = (float) (to_image (Vector l2)).value; } } _colour_conversion_table = [ /* Lines are [space-from, space-to, conversion function]. Could do * this as a big array, but table lookup feels safer. */ [B_W, B_W, image_set_type B_W], [B_W, XYZ, im_sRGB2XYZ @ im_mono2sRGB @ im_clip], [B_W, YXY, im_XYZ2Yxy @ im_sRGB2XYZ @ im_mono2sRGB @ im_clip], [B_W, LAB, im_sRGB2Lab @ im_mono2sRGB @ im_clip], [B_W, LCH, im_Lab2LCh @ im_sRGB2Lab @ im_mono2sRGB @ im_clip], [B_W, UCS, im_XYZ2UCS @ im_sRGB2XYZ @ im_mono2sRGB @ im_clip], [B_W, RGB, im_XYZ2disp @ im_sRGB2XYZ @ im_mono2sRGB @ im_clip], [B_W, sRGB, im_mono2sRGB @ im_clip], [B_W, RGB16, image_set_type RGB16 @ im_8216 @ im_mono2sRGB], [B_W, GREY16, image_set_type GREY16 @ im_8216], [B_W, LABQ, im_Lab2LabQ @ im_sRGB2Lab @ im_mono2sRGB @ im_clip], [B_W, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_sRGB2Lab @ im_mono2sRGB @ im_clip], [XYZ, B_W, im_sRGB2mono @ im_XYZ2sRGB @ im_clip2f], [XYZ, XYZ, image_set_type XYZ], [XYZ, YXY, im_XYZ2Yxy @ im_clip2f], [XYZ, LAB, im_XYZ2Lab @ im_clip2f], [XYZ, LCH, im_Lab2LCh @ im_XYZ2Lab], [XYZ, UCS, im_XYZ2UCS @ im_clip2f], [XYZ, RGB, im_XYZ2disp @ im_clip2f], [XYZ, sRGB, im_XYZ2sRGB @ im_clip2f], [XYZ, LABQ, im_Lab2LabQ @ im_XYZ2Lab @ im_clip2f], [XYZ, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_XYZ2Lab @ im_clip2f], [YXY, B_W, im_sRGB2mono @ im_XYZ2sRGB @ im_Yxy2XYZ @ im_clip2f], [YXY, XYZ, im_Yxy2XYZ @ im_clip2f], [YXY, YXY, image_set_type YXY], [YXY, LAB, im_XYZ2Lab @ im_Yxy2XYZ @ im_clip2f], [YXY, LCH, im_Lab2LCh @ im_XYZ2Lab @ im_Yxy2XYZ @ im_clip2f], [YXY, UCS, im_XYZ2UCS @ im_Yxy2XYZ @ im_clip2f], [YXY, RGB, im_XYZ2disp @ im_Yxy2XYZ @ im_clip2f], [YXY, sRGB, im_XYZ2sRGB @ im_Yxy2XYZ @ im_clip2f], [YXY, LABQ, im_Lab2LabQ @ im_XYZ2Lab @ im_Yxy2XYZ @ im_clip2f], [YXY, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_XYZ2Lab @ im_Yxy2XYZ @ im_clip2f], [LAB, B_W, im_sRGB2mono @ im_Lab2sRGB @ im_Lab2XYZ @ im_clip2f], [LAB, XYZ, im_Lab2XYZ @ im_clip2f], [LAB, YXY, im_XYZ2Yxy @ im_Lab2XYZ @ im_clip2f], [LAB, LAB, image_set_type LAB @ im_clip2f], [LAB, LCH, im_Lab2LCh @ im_clip2f], [LAB, UCS, im_Lab2UCS @ im_clip2f], [LAB, RGB, im_Lab2disp @ im_clip2f], [LAB, sRGB, im_Lab2sRGB @ im_clip2f], [LAB, LABQ, im_Lab2LabQ @ im_clip2f], [LAB, LABS, im_Lab2LabS @ im_clip2f], [LCH, B_W, im_sRGB2mono @ im_Lab2sRGB @ im_LCh2Lab @ im_clip2f], [LCH, XYZ, im_Lab2XYZ @ im_LCh2Lab @ im_clip2f], [LCH, YXY, im_XYZ2Yxy @ im_Lab2sRGB @ im_LCh2Lab @ im_clip2f], [LCH, LAB, im_LCh2Lab @ im_clip2f], [LCH, LCH, image_set_type LCH], [LCH, UCS, im_LCh2UCS @ im_clip2f], [LCH, RGB, im_Lab2disp @ im_LCh2Lab @ im_clip2f], [LCH, sRGB, im_Lab2sRGB @ im_LCh2Lab @ im_clip2f], [LCH, LABQ, im_Lab2LabQ @ im_LCh2Lab @ im_clip2f], [LCH, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_LCh2Lab @ im_clip2f], [UCS, B_W, im_sRGB2mono @ im_XYZ2sRGB @ im_UCS2XYZ @ im_clip2f], [UCS, XYZ, im_UCS2XYZ @ im_clip2f], [UCS, YXY, im_XYZ2Yxy @ im_Lab2XYZ @ im_UCS2Lab @ im_clip2f], [UCS, LAB, im_UCS2Lab @ im_clip2f], [UCS, LCH, im_UCS2LCh @ im_clip2f], [UCS, UCS, image_set_type UCS], [UCS, RGB, im_Lab2disp @ im_UCS2Lab @ im_clip2f], [UCS, sRGB, im_Lab2sRGB @ im_UCS2Lab @ im_clip2f], [UCS, LABQ, im_Lab2LabQ @ im_UCS2Lab @ im_clip2f], [UCS, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_UCS2Lab @ im_clip2f], [RGB, B_W, im_sRGB2mono @ im_XYZ2sRGB @ im_disp2XYZ @ im_clip], [RGB, XYZ, im_disp2XYZ @ im_clip], [RGB, YXY, im_XYZ2Yxy @ im_disp2XYZ @ im_clip], [RGB, LAB, im_disp2Lab @ im_clip], [RGB, LCH, im_Lab2LCh @ im_disp2Lab @ im_clip], [RGB, UCS, im_Lab2UCS @ im_disp2Lab @ im_clip], [RGB, RGB, image_set_type RGB], [RGB, sRGB, im_XYZ2sRGB @ im_disp2XYZ @ im_clip], [RGB, RGB16, image_set_type RGB16 @ im_8216], [RGB, GREY16, image_set_type GREY16 @ im_8216 @ im_sRGB2mono], [RGB, LABQ, im_Lab2LabQ @ im_disp2Lab @ im_clip], [RGB, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_disp2Lab @ im_clip], [sRGB, B_W, im_sRGB2mono], [sRGB, XYZ, im_sRGB2XYZ @ im_clip], [sRGB, YXY, im_XYZ2Yxy @ im_sRGB2XYZ @ im_clip], [sRGB, LAB, im_sRGB2Lab @ im_clip], [sRGB, LCH, im_Lab2LCh @ im_sRGB2Lab @ im_clip], [sRGB, UCS, im_XYZ2UCS @ im_sRGB2XYZ @ im_clip], [sRGB, RGB, im_XYZ2disp @ im_sRGB2XYZ @ im_clip], [sRGB, sRGB, image_set_type sRGB], [sRGB, RGB16, image_set_type RGB16 @ im_8216], [sRGB, GREY16, image_set_type GREY16 @ im_8216 @ im_sRGB2mono], [sRGB, LABQ, im_Lab2LabQ @ im_sRGB2Lab @ im_clip], [sRGB, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_sRGB2Lab @ im_clip], [RGB16, B_W, im_1628 @ im_sRGB2mono], [RGB16, RGB, image_set_type RGB @ im_1628], [RGB16, sRGB, image_set_type sRGB @ im_1628], [RGB16, RGB16, image_set_type RGB16], [RGB16, GREY16, im_RGB162GREY16], [GREY16, B_W, image_set_type B_W @ im_1628], [GREY16, RGB, im_mono2sRGB @ im_1628], [GREY16, sRGB, im_mono2sRGB @ im_1628], [GREY16, RGB16, im_GREY162RGB16], [GREY16, GREY16, image_set_type GREY16], [LABQ, B_W, im_sRGB2mono @ im_Lab2sRGB @ im_LabQ2Lab], [LABQ, XYZ, im_Lab2XYZ @ im_LabQ2Lab], [LABQ, YXY, im_XYZ2Yxy @ im_Lab2XYZ @ im_LabQ2Lab], [LABQ, LAB, im_LabQ2Lab], [LABQ, LCH, im_Lab2LCh @ im_LabQ2Lab], [LABQ, UCS, im_Lab2UCS @ im_LabQ2Lab], [LABQ, RGB, im_LabQ2disp], [LABQ, sRGB, im_Lab2sRGB @ im_LabQ2Lab], [LABQ, LABQ, image_set_type LABQ], [LABQ, LABS, im_LabQ2LabS], [LABS, B_W, im_sRGB2mono @ im_Lab2sRGB @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, XYZ, im_Lab2XYZ @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, YXY, im_XYZ2Yxy @ im_Lab2XYZ @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, LAB, im_LabS2Lab], [LABS, LCH, im_Lab2LCh @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, UCS, im_Lab2UCS @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, RGB, im_LabQ2disp @ im_LabS2LabQ @ im_clip2s], [LABS, sRGB, im_XYZ2sRGB @ im_Lab2XYZ @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, LABQ, im_LabS2LabQ @ im_clip2s], [LABS, LABS, image_set_type LABS] ] { /* From Image_type ... repeat here for brevity. Use same ordering as * in Colour menu for consistency. */ B_W = 1; XYZ = 12; YXY = 23; LAB = 13; LCH = 19; UCS = 18; RGB = 17; sRGB = 22; RGB16 = 25; GREY16 = 26; LABQ = 16; LABS = 21; } /* Transform between two colour spaces. */ colour_transform from to in = colour_unary _colour_conversion_table?i?2 in, i >= 0 = error (_ "unable to convert " ++ Image_type.type_names.get_name from ++ _ " to " ++ Image_type.type_names.get_name to) { match x = x?0 == from && x?1 == to; i = index match _colour_conversion_table; } /* Transform to a colour space, assuming the type field in the input is * correct */ colour_transform_to to in = colour_transform (get_type in) to in; /* String for path separator on this platform. */ path_separator = expand "$SEP"; /* Form a relative pathname. * path_relative ["home", "john"] == "home/john" * path_relative [] == "" */ path_relative l = join_sep path_separator l; /* Form an absolute pathname. * path_absolute ["home", "john"] == "/home/john" * path_absolute [] == "/" * If the first component looks like 'A:', don't add an initial separator. */ path_absolute l = path_relative l, len l?0 > 1 && is_letter l?0?0 && l?0?1 == ':' = path_separator ++ path_relative l; /* Parse a pathname. * path_parse "/home/john" == ["home", "john"] * path_parse "home/john" == ["home", "john"] */ path_parse str = split (equal path_separator?0) str; nip2-8.7.0/share/nip2/compat/7.26/_joe_utilities.def0000644000175000017500000005054513224651032016646 00000000000000/* ******Functions included in start/_NG_utilities.def:****** * * so_balance ref_meanmax im1 im2 mask blur gauss * * nonzero_mean im = no_out * * so_meanmax im = result * * so_calculate ref_meanmax im mask = result * * simple_frame frame im_w im_h ov cs ms bf option = result * * corner_frame frame im_w im_h ov cs ms bf = result * * build_frame r_tl r_tr r_bl r_br r_mt r_mb r_ml r_mr im_w im_h ov bf = result * * complex_frame frame im_w im_h ov cs es ms bf option= result * * complex_edge ra rb t bl d = rc * * frame_lr_min r_l r_r target bw = result * * frame_tb_min r_t r_b target bw = result * * frame_position_image im ref os colour= result * * merge_array bw arr = result * * merge_to_scale im target blend dir = result * * select_ellipse line width = mask * * select_tetragon p1 p2 p3 p4 = mask * * select_polygon pt_list = mask * * perspective_transform to from = trans'' * * sort_pts_clockwise l = l'' * */ /* Called from: * _NG_Extra.def Clone_area_item */ so_balance ref_meanmax im1 im2 mask gauss = result { //ref_meanmax = so_meanmax im1; so_values = so_calculate ref_meanmax im2 mask; im2_cor_a = clip2fmt im2.format im2'', has_member "format" im2 = im2'' {im2'' = im2 * (so_values?0) + (so_values?1);} // Option to convert replacement image to scaled gaussian noise im2_cor = im2_cor_a, gauss == false = clip2fmt im2_cor_a.format gauss_im {gauss_im = im_gaussnoise im2_cor_a.width im2_cor_a.height ref_meanmax?0 (deviation im2_cor_a);} result = im_blend (get_image mask) (get_image im2_cor) (get_image im1); }; //////////////////////////////////////////////////////////////////////////////// /* Calculates the mean of the non zero pixels. * * Called from: * _NG_utilities so_meanmax */ nonzero_mean im = no_out { zero_im = (im == 0); zero_mean = mean zero_im; no_mean = mean im; no_out = no_mean/(1 - (zero_mean/255)); }; //////////////////////////////////////////////////////////////////////////////// /* Calculates the max and nonzero mean of an image * * Called from: * _NG_utilities so_balance * _NG_utilities so_calculate * _NG_Extra.def Clone_area_item * _NG_Extra.def Balance_item.Balance_find_item */ so_meanmax im = result { mean_of_im = nonzero_mean im; adjusted_im = im - mean_of_im; max_of_im = max adjusted_im; result = [mean_of_im, max_of_im]; }; //////////////////////////////////////////////////////////////////////////////// /* Calculates the scale and offset required to match a reference mean and max * * Called from: * _NG_utilities so_balance * _NG_Extra.def Balance_item.Balance_find_item */ so_calculate ref_meanmax im mask = result { im' = if mask then im else 0; im_values = so_meanmax im'; mean_of_ref = ref_meanmax?0; mean_of_im = im_values?0; max_of_ref = ref_meanmax?1; max_of_im = im_values?1; scale = (max_of_ref)/(max_of_im); offset = mean_of_ref - (mean_of_im * scale); result = [ scale, offset ]; }; //////////////////////////////////////////////////////////////////////////////// /* Extends or shortens the central sections of a simple frame to fit round a given image. * * Called from: * _NG_Extra.def Frame_item.Simple_frame_item */ simple_frame frame im_w im_h ov cs ms bf option = result { cs' = (1 - cs); ms' = (0.5 - (ms/2)); ms'' = (1 - cs); //Regions r_tl = Region_relative frame 0 0 cs cs; r_tr = fliplr r_tl, option == true = Region_relative frame cs' 0 cs cs; r_bl = Region_relative frame 0 cs' cs cs; r_br = fliplr r_bl, option == true = Region_relative frame cs' cs' cs cs; r_mt = Region_relative frame ms' 0 ms cs; r_mb = Region_relative frame ms' ms'' ms cs; r_ml = Region_relative frame 0 ms' cs ms; r_mr = fliplr r_ml, option == true = Region_relative frame ms'' ms' cs ms; result = build_frame r_tl r_tr r_bl r_br r_mt r_mb r_ml r_mr im_w im_h ov bf; }; //////////////////////////////////////////////////////////////////////////////// /* Copies and extends a simple frame corner to produce a complete frame to fit round a given image. * * Called from: * _NG_Extra.def Frame_item.Frame_corner_item */ corner_frame frame im_w im_h ov cs ms bf = result { cs' = (1 - cs); ms' = (0.5 - (ms/2)); //Regions r_tl = Region_relative frame 0 0 cs cs; r_tr = fliplr r_tl; r_bl = fliptb r_tl; r_br = fliplr r_bl; r_mt = Region_relative frame ms' 0 ms cs; r_mb = fliptb r_mt; r_ml = Region_relative frame 0 ms' cs ms;; r_mr = fliplr r_ml; result = build_frame r_tl r_tr r_bl r_br r_mt r_mb r_ml r_mr im_w im_h ov bf; }; //////////////////////////////////////////////////////////////////////////////// /* Completes the frame building process for simple_frame and corner_frame. * * _NG_utilities simple_frame * _NG_utilities corner_frame */ build_frame r_tl r_tr r_bl r_br r_mt r_mb r_ml r_mr im_w im_h ov bf = result { //Find pixel thickness of frames section s_width = r_ml.width - mean (im_profile (map_unary fliplr (r_ml.value)?0) 1); s_height = r_mt.height - mean (im_profile (map_unary fliptb (r_mt.value)?0) 0); w_target = im_w + (2 * (s_width - ov)); h_target = im_h + (2 * (s_height - ov)); blend = bf * r_tl.width; cw_target = w_target - (2 * r_tl.width) + (2 * blend), w_target > (2 * r_tl.width) = w_target; ch_target = h_target - (2 * r_tl.height) + (2 * blend), h_target > (2 * r_tl.height) = h_target; //Use regions to produce sections top = merge_to_scale r_mt cw_target blend 0; bottom = merge_to_scale r_mb cw_target blend 0; left = merge_to_scale r_ml ch_target blend 1; right = merge_to_scale r_mr ch_target blend 1; middle = Image (image_new cw_target ch_target left.bands left.format left.coding left.type 0 0 0); //Build sections into full frame. row_1 = frame_lr_min r_tl r_tr w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[r_tl, top, r_tr]]; row_2 = frame_lr_min left right w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[left, middle, right]]; row_3 = frame_lr_min r_bl r_br w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[r_bl, bottom, r_br]]; result = frame_tb_min row_1 row_3 h_target blend, (h_target < (r_tl.height * 2)) = merge_array blend [[row_1], [row_2], [row_3]]; }; //////////////////////////////////////////////////////////////////////////////// /* Extends or shortens the central sections of a frame, preserving any central details on each * edge, to fit round a given image. * * Called from: * _NG_Extra.def Frame_item.Complex_frame_item */ complex_frame frame im_w im_h ov cs es ms bf option= result { cs' = (1 - cs); ms' = (0.5 - (ms/2)); es' = (0.25 - (es/2)); r_tl = Region_relative frame 0 0 cs cs; r_tr = fliplr r_tl, option == true = Region_relative frame cs' 0 cs cs; r_bl = Region_relative frame 0 cs' cs cs; r_br = fliplr r_bl, option == true = Region_relative frame cs' cs' cs cs; r_mt = Region_relative frame ms' 0 ms cs; r_mb = Region_relative frame ms' cs' ms cs; r_ml = Region_relative frame 0 ms' cs ms; r_mr = fliplr r_ml, option == true = Region_relative frame cs' ms' cs ms; r_et = Region_relative frame es' 0 es cs; r_eb = Region_relative frame es' cs' es cs; r_el = Region_relative frame 0 es' cs es; r_er = fliplr r_el, option == true = Region_relative frame cs' es' cs es; //Find pixel thickness of frames section s_width = r_el.width - mean (im_profile (map_unary fliplr (r_el.value)?0) 1); s_height = r_et.height - mean (im_profile (map_unary fliptb (r_et.value)?0) 0); w_target = im_w + (2 * (s_width - ov)); h_target = im_h + (2 * (s_height - ov)); min_size = foldr1 min_pair [r_tl.width, r_tl.height, r_mt.width, r_mt.height, r_et.width, r_et.height]; blend = bf * min_size; cw_target = w_target - (2 * r_tl.width) + (2 * blend); ch_target = h_target - (2 * r_tl.height) + (2 * blend); top = complex_edge r_mt r_et cw_target blend 0; bottom = complex_edge r_mb r_eb cw_target blend 0; left = complex_edge r_ml r_el ch_target blend 1; right = complex_edge r_mr r_er ch_target blend 1; middle = Image (image_new top.width left.height left.bands left.format left.coding left.type 0 0 0); //Build regions into full frame. row_1 = frame_lr_min r_tl r_tr w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[r_tl, top, r_tr]]; row_2 = frame_lr_min left right w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[left, middle, right]]; row_3 = frame_lr_min r_bl r_br w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[r_bl, bottom, r_br]]; result = frame_tb_min row_1 row_3 h_target blend, (h_target < (r_tl.height * 2)) = merge_array blend [[row_1], [row_2], [row_3]]; }; //////////////////////////////////////////////////////////////////////////////// /* Function called by complex frame, used to produce section * * Called from: * _NG_utilities.def complex_frame */ complex_edge ra rb t bl d = rc { e1 = ceil (ra.width - t)/2, d == 0 = 0; e2 = 0, d == 0 = ceil (ra.height - t)/2; e3 = t, d == 0 = ra.width; e4 = ra.height, d == 0 = t; check = ra.width, d == 0; = ra.height; rai = get_image ra; t2 = (t - ra.width + (2 * bl))/2, d == 0 = (t - ra.height + (2 * bl))/2; rc = ra , t <= 0 = Image (im_extract_area rai e1 e2 e3 e4), t <= check = merge_array bl [[rb',ra,rb']], d == 0 = merge_array bl [[rb'],[ra],[rb']] {rb' = merge_to_scale rb t2 bl d;} }; ////////////////////////////////////////////////////////////////////////////// /* Blends two images left/right to produce an image a specific width. * * _NG_utilities build_frame * _NG_utilities complex_frame */ frame_lr_min r_l r_r target bw = result { //Calculating the new widh required for each image. no = (target/2 + bw); n_w = no, (r_l.width > no) = r_l.width; //Removing excess from what will be the middle of the final image. n_l = im_extract_area r_l.value 0 0 n_w r_l.height; n_r = im_extract_area r_r.value (r_r.width - n_w) 0 n_w r_l.height; //Merge the two image together with a bw*2 pixel overlap. result = Image (im_lrmerge n_l n_r ((bw*2) - n_w) 0 bw); }; ////////////////////////////////////////////////////////////////////////////// /* Blends two images top/bottom to produce an image a specific width. * * _NG_utilities build_frame * _NG_utilities complex_frame */ frame_tb_min r_t r_b target bw = result { //Calculating the new height required for each image. no = (target/2 + bw); n_h = no, (r_t.height > no) = r_t.height; //Removing excess from what will be the middle of the final image. n_t = im_extract_area r_t.value 0 0 r_t.width n_h; n_b = im_extract_area r_b.value 0 (r_b.height - n_h) r_b.width n_h; //Merge the two image together with a 50 pixel overlap. result = Image (im_tbmerge n_t n_b 0 ((bw*2) -n_h) bw); }; ////////////////////////////////////////////////////////////////////////////// /* Resixe canvas of an image to accomodate a frame and possible mount * * Called from: * _NG_Extra.def Frame_item.Frame_corner_item * _NG_Extra.def Frame_item.Simple_frame_item * _NG_Extra.def Frame_item.Complex_frame_item */ frame_position_image im ref os colour= result { background = image_new ref.width ref.height im.bands im.format im.coding im.type colour 0 0; result = insert_noexpand xp yp im background { xp = (ref.width - im.width)/2; yp = (ref.height - im.height - os)/2; } }; ////////////////////////////////////////////////////////////////////////////// /* Merges an array of images together according to blend width bw * * Called from: * _NG_Utilites.def build_frame * _NG_Utilites.def complex_frame * _NG_Utilites.def complex_edge */ merge_array bw arr = result { merge_lr bw im1 im2 = im3 { bw' = get_header "Xsize" (get_image im1); bw'' = -(bw' - bw); im3 = im_lrmerge (get_image im1) (get_image im2) bw'' 0 bw; } merge_tb bw im1 im2 = im3 { bw' = get_header "Ysize" (get_image im1); bw'' = -(bw' - bw); im3 = im_tbmerge (get_image im1) (get_image im2) 0 bw'' bw; } im_out = (image_set_origin 0 0 @ foldl1 (merge_tb bw) @ map (foldl1 (merge_lr bw))) arr; result = Image im_out; }; ////////////////////////////////////////////////////////////////////////////// /* Repeatably top/bottom add clones of im, with a defined overlap, until final height > target * * Called from: * _NG_Utilites.def build_frame * _NG_Utilites.def complex_edge */ merge_to_scale im target blend dir = result { blend' = floor blend; //allow fir lr or tb process var_a = im.width, dir == 0 = im.height; var_w = im.width, dir == 1 = target, target > blend' = blend'; var_h = im.height, dir == 0 = target, target > blend' = blend'; //total numner of copies of im requires, taking overlap into account. no_loops = ceil ((log ((target - blend')/(var_a - blend')))/(log 2)); process im no = result { pr_a = get_header "Xsize" (get_image im), dir == 0 = get_header "Ysize" (get_image im); pr_b = -(pr_a - blend' + 1); im' = im_lrmerge (get_image im) (get_image im) pr_b 0 blend', dir == 0 = im_tbmerge (get_image im) (get_image im) 0 pr_b blend'; no' = no - 1; result = im', no' < 1 = process im' no'; } im_tmp = im.value, var_a > target = process im no_loops; result = Image (im_extract_area (get_image im_tmp) 0 0 var_w var_h); }; ////////////////////////////////////////////////////////////////////////////// /* Selects an elispe based on a line and a width * * Called from: * _NG_Extra.def Select_item.Elipse */ select_ellipse line width = mask { im = Image (get_image line); //Make a 2 band image whose value equals its coordinates. im_coor = Image (make_xy im.width im.height); //Adjust the values to center tham on (line.left, line.top) im_cent = im_coor - Vector [line.left,line.top]; w = line.width; h = line.height; angle = 270, w == 0 && h < 0 = 90, w == 0 && h >= 0 = 360 + atan (h/w), w > 0 && h < 0 = atan (h/w), w > 0 && h >= 0 = 180 + atan (h/w); a = ( (h ** 2) + (w ** 2) )**0.5; b = a * width; x' = ( (cos angle) * im_cent?0) + ( (sin angle) * im_cent?1); y' = ( (cos angle) * im_cent?1) - ( (sin angle) * im_cent?0); mask = ( (b**2) * (x'**2) ) + ( (a**2) * (y'**2) ) <= (a * b)**2; }; ////////////////////////////////////////////////////////////////////////////// /* Selects a tetragon based on four points. * * Called from: * _NG_Extra.def Select_item.Tetragon * _NG_Extra.def Perspective_item */ select_tetragon p1 p2 p3 p4 = mask { //Put points in clockwise order starting at the top left. pt_list = sort_pts_clockwise [p1, p2, p3, p4]; pair_list = [ [ pt_list?0, pt_list?1 ], [ pt_list?1, pt_list?2 ], [ pt_list?2, pt_list?3 ], [ pt_list?3, pt_list?0 ] ]; //Make xy image the same size as p1.image; im_xy = Image (make_xy p1.image.width p1.image.height); white = Image (image_new p1.image.width p1.image.height 1 0 Image_coding.NOCODING 1 255 0 0); mask = foldl process white pair_list; /* Treat each pair of point as a vector going from p1 to p2, * then select all to right of line. This is done for each pair, * the results are all combined to select the area defined by * the four points. */ process im_in pair = im_out { x = (pair?0).left; y = (pair?0).top; x'= (pair?1).left; y'= (pair?1).top; w = x' - x; h = y' - y; m = 0, x == x' = (y-y')/(x-x'); c = 0, x == x' = ((y*x') - (y'*x))/(x' - x); mask= im_xy?1 - (im_xy?0 * m) >= c, w > 0 = im_xy?1 - (im_xy?0 * m) <= c, w < 0 = im_xy?0 <= x, w == 0 && h > 0 = im_xy?0 >= x; im_out = im_in & mask; } }; ////////////////////////////////////////////////////////////////////////////// /* Selects a tetragon based on four points. * * Called from: * _NG_Extra.def Select_item.Polygon */ select_polygon pt_list = mask { group_check = is_Group pt_list; pt_l = pt_list.value, group_check = pt_list; im = Image (get_image (pt_l?0)); im_xy = Image (make_xy im.width im.height); black = Image (image_new im_xy.width im_xy.height 1 0 Image_coding.NOCODING 1 0 0 0); x = im_xy?0; y = im_xy?1; pt_l' = grp_trip pt_l; mask = foldl process black pt_l'; /*Takes a group adds the first two the end and then creates a lists of *lists [[a, b, c], [b, c, d] .... [x, a, b]] */ grp_trip l = l'' { px = take 2 l; l' = join l px; start = [(take 3 l')]; rest = drop 3 l'; process a b = c { x = (last a)?1; x'= (last a)?2; x'' = [[x, x', b]]; c = join a x''; } l'' = foldl process start rest; }; process im_in triplet = im_out { p1 = triplet?0; p2 = triplet?1; p3 = triplet?2; //check for change in x direction between p1-p2 and p2 -p3 dir_1 = sign (p2.left - p1.left); dir_2 = sign (p3.left - p2.left); dir = dir_1 + dir_2; //define min x limit. min_x = p1.left, p1.left < p2.left = p2.left + 1, dir != 0 = p2.left; //define max x limit. max_x = p1.left, p1.left > p2.left = p2.left - 1, dir != 0 = p2.left; //equation of line defined by p1 and p2 m = line_m p1 p2; c = line_c p1 p2; //Every thing below the line im_test = ((y >= (m * x) + c) & (x >= min_x) & (x <= max_x)); im_out = im_in ^ im_test; } line_c p1 p2 = c {m = line_m p1 p2; c = p1.top - (m * p1.left);}; line_m p1 p2 = (p2.top - p1.top)/(p2.left - p1.left), p2.left != p1.left = 0; }; ////////////////////////////////////////////////////////////////////////////// /* Selects a tetragon based on four points. * * Called from: * _NG_Extra.def Perspective_match_item * _NG_Extra.def Perspective_item */ perspective_transform to from = trans'' { /* * Tramsformation matrix is calculated on the bases of the following functions: * x' = c0x + c1y + c2xy + c3 * y' = c4x + c5y + c6xy + c7 * * The functions used in vips im_transform works based on the functions: * x = x' + b0 + b2x' + b4y' + b6x'y' * y = y' + b1 + b3x' + b5y' + b7x'y' * * and is applied in the form of the matrix: * * [[b0, b1], * [b2, b3], * [b4, b5], * [b6, b7]] * * Therefore our required calculated matrix will be * * [[ c3 , c7], * [(c0 - 1) , c4], * [ c1 , (c5 - 1)], * [ c2 , c6]] * * to = [x1, y1, x2, y2, x3, y3, x4, y4] * from = [x1', y1', x2', y2', x3', y3', x4', y4'] * trans = [[c0], [c1], [c2], [c3], [c4], [c5], [c6], [c7]] * */ to' = Matrix [[to?0, to?1, ((to?0)*(to?1)), 1, 0, 0, 0, 0], [0, 0, 0, 0, to?0, to?1, ((to?0)*(to?1)), 1], [to?2, to?3, ((to?2)*(to?3)), 1, 0, 0, 0, 0], [0, 0, 0, 0, to?2, to?3, ((to?2)*(to?3)), 1], [to?4, to?5, ((to?4)*(to?5)), 1, 0, 0, 0, 0], [0, 0, 0, 0, to?4, to?5, ((to?4)*(to?5)), 1], [to?6, to?7, ((to?6)*(to?7)), 1, 0, 0, 0, 0], [0, 0, 0, 0, to?6, to?7, ((to?6)*(to?7)), 1]]; from' = Matrix (transpose [from]); to'' = to' ** (-1); trans = to'' * from'; trans' = trans.value; trans''= Matrix [[(trans'?3)?0, (trans'?7)?0 ], [((trans'?0)?0 - 1), (trans'?4)?0 ], [(trans'?1)?0, ((trans'?5)?0 - 1)], [(trans'?2)?0, (trans'?6)?0 ]]; }; ////////////////////////////////////////////////////////////////////////////// /* Sort a list of points into clockwise order. * * Called from: * _NG_utilities.def select_tetragon * _NG_Extra.def Perspective_match_item * _NG_Extra.def Perspective_item */ sort_pts_clockwise l = l'' { // sort functions: f_top a b = a.top < b.top; f_left a b = a.left < b.left; f_right a b = a.left > b.left; l' = sortc f_top l; l'_a = take 2 l'; l'_b = drop 2 l'; l''_a = sortc f_left l'_a; l''_b = sortc f_right l'_b; l'' = join l''_a l''_b; }; Mount_options _ctype _ppcm = class { _vislevel = 3; apply = Toggle "Apply mount options" false; ls = Expression "Lower mount section bigger by (cm)" 0; mount_colour = Colour _ctype [0, 0, 0]; _los = ls.expr * _ppcm; }; Frame_variables comp = class { _vislevel = 3; scale_factor = Expression "scale the size of the frame by" 1; /* These sliders define the fraction of the frames width or height is extracted * to produce each of the particular regions. */ corner_section = Scale "Corner section" 0.1 1 0.5; edge_section = Scale "Edge section" 0.1 1 0.2, comp > 0 = "Only required for complex frames"; middle_section = Scale "Middle section" 0.1 1 0.2; blend_fraction = Scale "Blend fraction" 0.1 0.9 0.1; option = Toggle "Use mirror of left-side to make right" true; }; nip2-8.7.0/share/nip2/compat/7.26/Image.def0000644000175000017500000013626213224651032014662 00000000000000Image_new_item = class Menupullright "_New" "make new things" { Image_black_item = class Menuaction "_Image" "make a new image" { format_names = [ "8-bit unsigned int - UCHAR", // 0 "8-bit signed int - CHAR", // 1 "16-bit unsigned int - USHORT", // 2 "16-bit signed int - SHORT", // 3 "32-bit unsigned int - UINT", // 4 "32-bit signed int - INT", // 5 "32-bit float - FLOAT", // 6 "64-bit complex - COMPLEX", // 7 "64-bit float - DOUBLE", // 8 "128-bit complex - DPCOMPLEX" // 9 ]; action = class Image _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; nbands = Expression "Image bands" 1; format_option = Option "Image format" format_names 0; type_option = Option_enum "Image type" Image_type.type_names "B_W"; pixel = Expression "Pixel value" 0; _result = image_new (to_real nwidth) (to_real nheight) (to_real nbands) (to_real format_option) Image_coding.NOCODING type_option.value_thing pixel.expr 0 0; } } Image_new_from_image_item = class Menuaction "_From Image" "make a new image based on image x" { action x = class Image _result { _vislevel = 3; pixel = Expression "Pixel value" 0; _result = image_new x.width x.height x.bands x.format x.coding x.type pixel.expr x.xoffset x.yoffset; } } Image_region_item = class Menupullright "_Region on Image" "make a new region on an image" { Region_item = class Menuaction "_Region" "make a region on an image" { action image = scope.Region_relative image 0.25 0.25 0.5 0.5; } Mark_item = class Menuaction "_Point" "make a point on an image" { action image = scope.Mark_relative image 0.5 0.5; } Arrow_item = class Menuaction "_Arrow" "make an arrow on an image" { action image = scope.Arrow_relative image 0.25 0.25 0.5 0.5; } HGuide_item = class Menuaction "_Horizontal Guide" "make a horizontal guide on an image" { action image = scope.HGuide image 0.5; } VGuide_item = class Menuaction "_Vertical Guide" "make a vertical guide on an image" { action image = scope.VGuide image 0.5; } sep1 = Menuseparator; Move_item = class Menuaction "From Region" "new region on image using existing region as a guide" { action a b = map_binary process a b { process a b = x.Region target x.left x.top x.width x.height, is_Region x = x.Arrow target x.left x.top x.width x.height, is_Arrow x = error "bad arguments to region-from-region" { // prefer image then region compare a b = false, !is_Image a && is_Image b = false, is_Region a && !is_Region b = true; [target, x] = sortc compare [a, b]; } } } } } Image_convert_to_image_item = class Menuaction "Con_vert to Image" "convert anything to an image" { action x = to_image x; } Image_number_format_item = class Menupullright "_Format" "convert numeric format" { U8_item = class Menuaction "_8 bit unsigned" "convert to unsigned 8 bit [0, 255]" { action x = map_unary cast_unsigned_char x; } U16_item = class Menuaction "1_6 bit unsigned" "convert to unsigned 16 bit [0, 65535]" { action x = map_unary cast_unsigned_short x; } U32_item = class Menuaction "_32 bit unsigned" "convert to unsigned 32 bit [0, 4294967295]" { action x = map_unary cast_unsigned_int x; } sep1 = Menuseparator; S8_item = class Menuaction "8 _bit signed" "convert to signed 8 bit [-128, 127]" { action x = map_unary cast_signed_char x; } S16_item = class Menuaction "16 b_it signed" "convert to signed 16 bit [-32768, 32767]" { action x = map_unary cast_signed_short x; } S32_item = class Menuaction "32 bi_t signed" "convert to signed 32 bit [-2147483648, 2147483647]" { action x = map_unary cast_signed_int x; } sep2 = Menuseparator; Float_item = class Menuaction "_Single precision float" "convert to IEEE 32 bit float" { action x = map_unary cast_float x; } Double_item = class Menuaction "_Double precision float" "convert to IEEE 64 bit float" { action x = map_unary cast_double x; } sep3 = Menuseparator; Scmplxitem = class Menuaction "Single _precision complex" "convert to 2 x IEEE 32 bit float" { action x = map_unary cast_complex x; } Dcmplx_item = class Menuaction "Double p_recision complex" "convert to 2 x IEEE 64 bit float" { action x = map_unary cast_double_complex x; } } Image_header_item = class Menupullright "_Header" "do stuff to the image header" { Image_get_item = class Menupullright "_Get" "get header fields" { // the header fields we can get fields = class { type = 0; width = 1; height = 2; format = 3; bands = 4; xres = 5; yres = 6; xoffset = 7; yoffset = 8; coding = 9; field_names = Enum [ $width => width, $height => height, $bands => bands, $format => format, $type => type, $xres => xres, $yres => yres, $xoffset => xoffset, $yoffset => yoffset, $coding => coding ]; field_option name = Option_enum (_ "Field") field_names name; field_funcs = Table [ [type, get_type], [width, get_width], [height, get_height], [format, get_format], [bands, get_bands], [xres, get_xres], [yres, get_yres], [xoffset, get_xoffset], [yoffset, get_yoffset], [coding, get_coding] ]; } get_field field_name x = class _result { _vislevel = 3; field = fields.field_option field_name; _result = map_unary (Real @ fields.field_funcs.lookup 0 1 field.value_thing) x; } Width_item = class Menuaction "_Width" "get width" { action x = get_field "width" x; } Height_item = class Menuaction "_Height" "get height" { action x = get_field "height" x; } Bands_item = class Menuaction "_Bands" "get bands" { action x = get_field "bands" x; } Format_item = class Menuaction "_Format" "get format" { action x = get_field "format" x; } Type_item = class Menuaction "_Type" "get type" { action x = get_field "type" x; } Xres_item = class Menuaction "_Xres" "get X resolution" { action x = get_field "xres" x; } Yres_item = class Menuaction "_Yres" "get Y resolution" { action x = get_field "yres" x; } Xoffset_item = class Menuaction "X_offset" "get X offset" { action x = get_field "xoffset" x; } Yoffset_item = class Menuaction "Yo_ffset" "get Y offset" { action x = get_field "yoffset" x; } Coding_item = class Menuaction "_Coding" "get coding" { action x = get_field "coding" x; } sep1 = Menuseparator; Custom_item = class Menuaction "C_ustom" "get any header field" { action x = class _result { _vislevel = 3; field = String "Field" "Xsize"; parse = Option "Parse" [ "No parsing", "Parse string as integer", "Parse string as real", "Parse string as hh:mm:ss" ] 0; _result = map_unary (wrap @ process @ get_header field.value) x { parse_str parse str = parse (split is_space str)?0; parse_field name cast parse x = cast x, is_number x = parse_str parse x, is_string x = error ("not " ++ name); get_int = parse_field "int" cast_signed_int parse_int; get_float = parse_field "float" cast_float parse_float; get_time = parse_field "hh:mm:ss" cast_signed_int parse_time; wrap x = Real x, is_real x = Vector x, is_real_list x = Image x, is_image x = Bool x, is_bool x = Matrix x, is_matrix x = String "String" x, is_string x = List x, is_list x = x; process = [ id, get_int, get_float, get_time ]?parse; } } } } sep1 = Menuseparator; Image_set_meta_item = class Menuaction "_Set" "set image metadata" { action x = class _result { _vislevel = 3; fname = String "Field" "field-name"; val = Expression "Value" 42; _result = map_unary process x { process image = set_header fname.value val.expr image; } } } Image_edit_header_item = class Menuaction "_Edit" "change advisory header fields of image" { type_names = Image_type.type_names; all_names = sort (map (extract 0) type_names.value); get_prop has get def x = get x, has x = def; action x = class _result { _vislevel = 3; nxres = Expression "Xres" (get_prop has_xres get_xres 1 x); nyres = Expression "Yres" (get_prop has_yres get_yres 1 x); nxoff = Expression "Xoffset" (get_prop has_xoffset get_xoffset 0 x); nyoff = Expression "Yoffset" (get_prop has_yoffset get_yoffset 0 x); type_option = Option_enum "Image type" Image_type.type_names (Image_type.type_names.get_name type) { type = x.type, is_Image x = Image_type.MULTIBAND; } _result = map_unary process x { process image = Image (im_copy_set image.value type_option.value_thing (to_real nxres) (to_real nyres) (to_real nxoff) (to_real nyoff)); } } } } Image_cache_item = class Menuaction "C_ache" "cache calculated image pixels" { action x = class _result { _vislevel = 3; tile_width = Number "Tile width" 128; tile_height = Number "Tile height" 128; max_tiles = Number "Maximum number of tiles to cache" (-1); _result = map_unary process x { process image = cache (to_real tile_width) (to_real tile_height) (to_real max_tiles) image; } } } #separator Image_levels_item = class Menupullright "_Levels" "change image levels" { Scale_item = class Menuaction "_Scale to 0 - 255" "linear transform to fit 0 - 255 range" { action x = map_unary scale x; } Linear_item = class Menuaction "_Linear" "linear transform of image levels" { action x = class _result { _vislevel = 3; scale = Scale "Scale" 0.001 3 1; offset = Scale "Offset" (-128) 128 0; _result = map_unary adj x { adj x // only force back to input type if this is a thing // with a type ... so we work for Colour / Matrix etc. = clip2fmt x.format x', has_member "format" x = x' { x' = x * scale + offset; } } } } Gamma_item = class Menuaction "_Power" "power transform of image levels (gamma)" { action x = class _result { _vislevel = 3; gamma = Scale "Gamma" 0.001 4 1; image_maximum_hint = "You may need to change image_maximum if " ++ "this is not an 8 bit image"; im_mx = Expression "Image maximum" mx { mx = Image_format.maxval x.format, has_format x = 255; } _result = map_unary gam x { gam x = clip2fmt (get_format x) x', has_format x = x' { x' = (im_mx.expr / im_mx.expr ** gamma) * x ** gamma; } } } } Tone_item = class Menuaction "_Tone Curve" "adjust tone curve" { action x = class _result { _vislevel = 3; b = Scale "Black point" 0 100 0; w = Scale "White point" 0 100 100; sp = Scale "Shadow point" 0.1 0.3 0.2; mp = Scale "Mid-tone point" 0.4 0.6 0.5; hp = Scale "Highlight point" 0.7 0.9 0.8; sa = Scale "Shadow adjust" (-15) 15 0; ma = Scale "Mid-tone adjust" (-30) 30 0; ha = Scale "Highlight adjust" (-15) 15 0; curve = tone_build x.format b w sp mp hp sa ma ha; _result = map_unary (hist_map curve) x; } } } Image_transform_item = class Menupullright "_Transform" "transform images" { Rotate_item = class Menupullright "Ro_tate" "rotate image" { Fixed_item = class Menupullright "_Fixed" "clockwise rotation by fixed angles" { rotate_widget default x = class _result { _vislevel = 3; angle = Option "Rotate by" [ "Don't rotate", "90 degrees clockwise", "180 degrees", "90 degrees anticlockwise" ] default; _result = map_unary process x { process in = [ in, rot90 in, rot180 in, rot270 in ] ? angle; } } Rot90_item = class Menuaction "_90 Degrees" "clockwise rotation by 90 degrees" { action x = rotate_widget 1 x; } Rot180_item = class Menuaction "_180 Degrees" "clockwise rotation by 180 degrees" { action x = rotate_widget 2 x; } Rot270_item = class Menuaction "_270 Degrees" "clockwise rotation by 270 degrees" { action x = rotate_widget 3 x; } } Free_item = class Menuaction "_Free" "clockwise rotation by any angle" { action x = class _result { _vislevel = 3; angle = Scale "Angle" (-180) 180 0; interp = Interpolate_picker Interpolate_type.BILINEAR; _result = map_unary process x { process image = rotate interp angle image; } } } Straighten_item = class Menuaction "_Straighten" ("smallest rotation that makes an arrow either horizontal " ++ "or vertical") { action x = class _result { _vislevel = 3; interp = Interpolate_picker Interpolate_type.BILINEAR; _result = map_unary straighten x { straighten arrow = rotate interp angle'' arrow.image { x = arrow.width; y = arrow.height; angle = im (polar (x, y)); angle' = angle - 360, angle > 315 = angle - 180, angle > 135 = angle; angle'' = -angle', angle' >= (-45) && angle' < 45 = 90 - angle'; } } } } } Flip_item = class Menupullright "_Flip" "mirror left/right or up/down" { Left_right_item = class Menuaction "_Left Right" "mirror object left/right" { action x = map_unary fliplr x; } Top_bottom_item = class Menuaction "_Top Bottom" "mirror object top/bottom" { action x = map_unary fliptb x; } } Resize_item = class Menupullright "_Resize" "change image size" { Scale_item = class Menuaction "_Scale" "scale image size by a factor" { action x = class _result { _vislevel = 3; xfactor = Expression "Horizontal scale factor" 1; yfactor = Expression "Vertical scale factor" 1; interp = Interpolate_picker Interpolate_type.BILINEAR; _result = map_unary process x { process image = resize interp xfactor yfactor image; } } } Size_item = class Menuaction "_Size To" "resize to a fixed size" { action x = class _result { _vislevel = 3; which = Option "Resize axis" [ "Shortest", "Longest", "Horizontal", "Vertical" ] 0; size = Expression "Resize to (pixels)" 128; aspect = Toggle "Break aspect ratio" false; interp = Interpolate_picker Interpolate_type.BILINEAR; _result = map_unary process x { process image = resize interp h v image, aspect = resize interp fac fac image { xfac = to_real size / image.width; yfac = to_real size / image.height; max_factor = [xfac, 1], xfac > yfac = [1, yfac]; min_factor = [xfac, 1], xfac < yfac = [1, yfac]; [h, v] = [ max_factor, min_factor, [xfac, 1], [1, yfac]]?which; fac = h, v == 1 = v; } } } } Size_within_item = class Menuaction "Size _Within" "size to fit within a rectangle" { action x = class _result { _vislevel = 3; // the rects we size to fit within _rects = [ [2048, 1536], [1920, 1200], [1600, 1200], [1400, 1050], [1280, 1024], [1024, 768], [800, 600], [640, 480] ]; within = Option "Fit within (pixels)" ( [print w ++ " x " ++ print h :: [w, h] <- _rects] ++ ["Custom"] ) 4; custom_width = Expression "Custom width" 1000; custom_height = Expression "Custom height" 1000; size = Option "Page size" [ "Full page", "Half page", "Quarter page" ] 0; interp = Interpolate_picker Interpolate_type.BILINEAR; _result = map_unary process x { xdiv = [1, 2, 2]?size; ydiv = [1, 1, 2]?size; allrect = _rects ++ [ [custom_width.expr, custom_height.expr] ]; [width, height] = allrect?within; process x = resize interp fac fac x, fac < 1 = x { xfac = (width / xdiv) / x.width; yfac = (height / ydiv) / x.height; fac = min_pair xfac yfac; } } } } Resize_canvas_item = class Menuaction "_Canvas" "change size of surrounding image" { action x = class _result { _vislevel = 3; // try to guess a sensible size for the new image _guess_size = x.rect, is_Image x = Rect 0 0 100 100; nwidth = Expression "New width (pixels)" _guess_size.width; nheight = Expression "New height (pixels)" _guess_size.height; bgcolour = Expression "Background colour" 0; position = Option "Position" [ "North-west", "North", "North-east", "West", "Centre", "East", "South-west", "South", "South-east", "Specify in pixels" ] 4; left = Expression "Pixels from left" 0; top = Expression "Pixels from top" 0; _result = map_unary process x { process image = insert_noexpand xp yp image background { width = image.width; height = image.height; coding = image.coding; bands = 3, coding == Image_coding.LABPACK = image.bands; format = Image_format.FLOAT, coding == Image_coding.LABPACK = image.format; type = image.type; // placement vectors ... left, centre, right xposv = [0, to_real nwidth / 2 - width / 2, to_real nwidth - width]; yposv = [0, to_real nheight / 2 - height / 2, to_real nheight - height]; xp = left, position == 9 = xposv?((int) (position % 3)); yp = top, position == 9 = yposv?((int) (position / 3)); background = image_new nwidth nheight bands format coding type bgcolour.expr 0 0; } } } } } Image_perspective_item = Perspective_item; Image_rubber_item = class Menupullright "Ru_bber Sheet" "automatically warp images to superposition" { rubber_interp = Option "Interpolation" ["Nearest", "Bilinear"] 1; rubber_order = Option "Order" ["0", "1", "2", "3"] 1; rubber_wrap = Toggle "Wrap image edges" false; // a transform ... a matrix, plus the size of the image the // matrix was made for Transform matrix image_width image_height = class matrix { // scale a transform ... if it worked for a m by n image, make // it work for a (m * xfac) by (y * yfac) image rescale xfac yfac = Transform (Matrix (map2 (map2 multiply) matrix.value facs)) (image_width * xfac) (image_height * yfac) { facs = [ [xfac, yfac], [1, 1], [1, 1], [1 / xfac, 1 / yfac], [1 / xfac, 1 / yfac], [1 / xfac, 1 / yfac] ]; } } // yuk!!!! fix is_instanceof to not need absolute names is_Transform = is_instanceof "Image_transform_item.Image_rubber_item.Transform"; Find_item = class Menuaction "_Find" ("find a transform which will map sample image onto " ++ "reference") { action reference sample = class _trn { _vislevel = 3; // controls order = rubber_order; interp = rubber_interp; wrap = rubber_wrap; max_err = Expression "Maximum error" 0.3; max_iter = Expression "Maximum iterations" 10; // transform [sample', trn, err] = transform_search max_err max_iter order interp wrap sample reference; transformed_image = Image sample'; _trn = Transform trn reference.width reference.height; final_error = err; } } Apply_item = class Menuaction "_Apply" "apply a transform to an image" { action a b = class _result { _vislevel = 3; // controls interp = rubber_interp; wrap = rubber_wrap; _result = map_binary trans a b { trans a b = transform interp wrap t' i { // get the transform arg first [i, t] = sortc (const is_Transform) [a, b]; t' = t.rescale (i.width / t.image_width) (i.height / t.image_height); } } } } } sep1 = Menuseparator; Match_item = class Menuaction "_Linear Match" "rotate and scale one image to match another" { action x y = class _result { _vislevel = 3; // try to find an image ... for a group, get the first item find_image x = x, is_Image x = find_image x?0, is_list x = find_image x.value, is_class x && has_value x = error "unable to find image"; _a = find_image x; _b = find_image y; ap1 = Mark_relative _a 0.5 0.25; bp1 = Mark_relative _b 0.5 0.25; ap2 = Mark_relative _a 0.5 0.75; bp2 = Mark_relative _b 0.5 0.75; refine = Toggle "Refine selected tie-points" false; lock = Toggle "No resize" false; _result = map_binary process x y { process a b = Image b''' { _prefs = Workspaces.Preferences; window = _prefs.MOSAIC_WINDOW_SIZE; object = _prefs.MOSAIC_OBJECT_SIZE; a' = a.value; b' = b.value; b'' = clip2fmt a.format b'; // return p2 ... if lock is set, return a p2 a standard // distance along the vector joining p1 and p2 norm p1 p2 = Rect left' top' 0 0, lock = p2 { v = (p2.left - p1.left, p2.top - p1.top); // 100000 to give precision since we pass points as // ints to match n = 100000 * sign v; left' = p1.left + re n; top' = p1.top + im n; } ap2'' = norm ap1 ap2; bp2'' = norm bp1 bp2; b''' = im_match_linear_search a' b'' ap1.left ap1.top bp1.left bp1.top ap2''.left ap2''.top bp2''.left bp2''.top object window, // we can't search if lock is on refine && !lock = im_match_linear a' b'' ap1.left ap1.top bp1.left bp1.top ap2''.left ap2''.top bp2''.left bp2''.top; } } } } Image_perspective_match_item = Perspective_match_item; } Image_band_item = class Menupullright "_Band" "manipulate image bands" { // like extract_bands, but return [] for zero band image // makes compose a bit simpler exb b n x = [], to_real n == 0 = extract_bands b n x; Extract_item = class Menuaction "_Extract" "extract bands from image" { action x = class _result { _vislevel = 3; first = Expression "Extract from band" 0; number = Expression "Extract this many bands" 1; _result = map_unary (exb first number) x; } } Insert_item = class Menuaction "_Insert" "insert bands into image" { action x y = class _result { _vislevel = 3; first = Expression "Insert at position" 0; _result = map_binary process x y { process im1 im2 = exb 0 f im1 ++ im2 ++ exb f (b - f) im1 { f = to_real first; b = im1.bands; } } } } Delete_item = class Menuaction "_Delete" "delete bands from image" { action x = class _result { _vislevel = 3; first = Expression "Delete from band" 0; number = Expression "Delete this many bands" 1; _result = map_unary process x { process im = exb 0 f im ++ exb (f + n) (b - (f + n)) im { f = to_real first; n = to_real number; b = im.bands; } } } } Bandwise_item = Image_join_item.Bandwise_item; sep1 = Menuseparator; To_dimension_item = class Menuaction "To D_imension" "convert bands to width or height" { action x = class _result { _vislevel = 3; orientation = Option "Orientation" [ "Horizontal", "Vertical" ] 0; _result = map_unary process x { process im = foldl1 [join_lr, join_tb]?orientation (bandsplit im); } } } To_bands_item = class Menuaction "To B_ands" "turn width or height to bands" { action x = class _result { _vislevel = 3; orientation = Option "Orientation" [ "Horizontal", "Vertical" ] 0; _result = map_unary process x { process im = bandjoin (map extract_column [0 .. im.width - 1]), orientation == 0 = bandjoin (map extract_row [0 .. im.height - 1]) { extract_column n = extract_area n 0 1 im.height im; extract_row n = extract_area 0 n im.width 1 im; } } } } } Image_crop_item = class Menuaction "_Crop" "extract a rectangular area from an image" { action x = class _result { _vislevel = 3; // try to find the image geometry ... don't bother trying to look // inside groups though _geo = x.rect, is_Image x = Rect 0 0 100 100; l = Expression "Crop left" ((int) (_geo.left + _geo.width / 4)); t = Expression "Crop top" ((int) (_geo.top + _geo.height / 4)); w = Expression "Crop width" (max_pair 1 ((int) (_geo.width / 2))); h = Expression "Crop height" (max_pair 1 ((int) (_geo.height / 2))); _result = map_nary (list_5ary extract) [x, l.expr, t.expr, w.expr, h.expr] { extract im l t w h = extract_area left' top' width' height' im { width' = min_pair (to_real w) im.width; height' = min_pair (to_real h) im.height; left' = range 0 (to_real l) (im.width - width'); top' = range 0 (to_real t) (im.height - height'); } } } } Image_insert_item = class Menuaction "_Insert" "insert a small image into a large image" { action a b = insert_position, is_Group a || is_Group b = insert_area { insert_area = class _result { _check_args = [ [a, "a", check_Image], [b, "b", check_Image] ]; _vislevel = 3; // sort to get smallest first _pred x y = x.width * x.height < y.width * y.height; [_a', _b'] = sortc _pred [a, b]; place = Area _b' left top width height { // be careful in case b is smaller than a left = max_pair 0 ((_b'.width - _a'.width) / 2); top = max_pair 0 ((_b'.height - _a'.height) / 2); width = min_pair _a'.width _b'.width; height = min_pair _a'.height _b'.height; } _result = insert_noexpand place.left place.top (clip2fmt _b'.format a'') _b' { a'' = extract_area 0 0 place.width place.height _a'; } } insert_position = class _result { _vislevel = 3; position = Option "Position" [ "North-west", "North", "North-east", "West", "Centre", "East", "South-west", "South", "South-east", "Specify in pixels" ] 4; left = Expression "Pixels from left" 0; top = Expression "Pixels from top" 0; _result = map_binary insert a b { insert a b = insert_noexpand left top (clip2fmt b.format a) b, position == 9 = insert_noexpand xp yp (clip2fmt b.format a) b { xr = b.width - a.width; yr = b.height - a.height; xp = [0, xr / 2, xr]?((int) (position % 3)); yp = [0, yr / 2, yr]?((int) (position / 3)); } } } } } Image_select_item = Select_item; Image_draw_item = class Menupullright "_Draw" "draw lines, circles, rectangles, floods" { Line_item = class Menuaction "_Line" "draw line on image" { action x = class _result { _vislevel = 3; x1 = Expression "Start x" 0; y1 = Expression "Start y" 0; x2 = Expression "End x" 100; y2 = Expression "End y" 100; ink = Expression "Ink" [0]; _result = map_unary line x { line im = draw_line x1.expr y1.expr x2.expr y2.expr ink.expr im; } } } Rect_item = class Menuaction "_Rectangle" "draw rectangle on image" { action x = class _result { _vislevel = 3; left = Expression "Left" 50; top = Expression "Top" 50; width = Expression "Width" 100; height = Expression "Height" 100; fill = Toggle "Fill" true; ink = Expression "Ink" [0]; _result = map_unary rect x { rect im = draw_rect left.expr top.expr width.expr height.expr fill.value ink.expr im; } } } Circle_item = class Menuaction "_Circle" "draw circle on image" { action x = class _result { _vislevel = 3; cx = Expression "Centre x" 100; cy = Expression "Centre y" 100; r = Expression "Radius" 50; fill = Toggle "Fill" true; ink = Expression "Ink" [0]; _result = map_unary circle x { circle im = draw_circle cx.expr cy.expr r.expr fill.value ink.expr im; } } } Flood_item = class Menuaction "_Flood" "flood bounded area of image" { action x = class _result { _vislevel = 3; startx = Expression "Start x" 100; starty = Expression "Start y" 100; edge = Option "Flood while" [ "Not equal to ink", "Equal to start point" ] 0; // pick a default ink that won't flood, if we can ink = Expression "Ink" default_ink { default_ink = [0], ! has_image x = pixel; pixel = map mean (bandsplit (extract_area left top 1 1 im)); left = startx.expr; top = starty.expr; im = get_image x; } _result = map_unary flood x { flood im = draw_flood left top ink.expr im, edge == 0 = draw_flood_blob left top ink.expr im { left = startx.expr; top = starty.expr; } } } } } Image_join_item = class Menupullright "_Join" "join two or more images together" { Bandwise_item = class Menuaction "_Bandwise" "join two images bandwise" { action a b = join a b; } sep1 = Menuseparator; join_lr shim bg align a b = im2 { w = a.width + b.width + shim; h = max_pair a.height b.height; back = image_new w h a.bands a.format a.coding a.type bg 0 0; ya = [0, max_pair 0 ((b.height - a.height)/2), max_pair 0 (b.height - a.height)]; yb = [0, max_pair 0 ((a.height - b.height)/2), max_pair 0 (a.height - b.height)]; im1 = insert_noexpand 0 ya?align a back; im2 = insert_noexpand (a.width + shim) yb?align b im1; } join_tb shim bg align a b = im2 { w = max_pair a.width b.width; h = a.height + b.height + shim; back = image_new w h a.bands a.format a.coding a.type bg 0 0; xa = [0, max_pair 0 ((b.width - a.width)/2), max_pair 0 (b.width - a.width)]; xb = [0, max_pair 0 ((a.width - b.width)/2), max_pair 0 (a.width - b.width)]; im1 = insert_noexpand xa?align 0 a back; im2 = insert_noexpand xb?align (a.height + shim) b im1; } halign_names = ["Top", "Centre", "Bottom"]; valign_names = ["Left", "Centre", "Right"]; Left_right_item = class Menuaction "_Left to Right" "join two images left-right" { action a b = class _result { _vislevel = 3; shim = Scale "Spacing" 0 100 0; bg_colour = Expression "Background colour" 0; align = Option "Alignment" halign_names 1; _result = map_binary (join_lr shim.value bg_colour.expr align.value) a b; } } Top_bottom_item = class Menuaction "_Top to Bottom" "join two images top-bottom" { action a b = class _result { _vislevel = 3; shim = Scale "Spacing" 0 100 0; bg_colour = Expression "Background colour" 0; align = Option "Alignment" valign_names 1; _result = map_binary (join_tb shim.value bg_colour.expr align.value) a b; } } sep2 = Menuseparator; Array_item = class Menuaction "_Array" "join a list of lists of images into a single image" { action x = class _result { _vislevel = 3; hshim = Scale "Horizontal spacing" (-100) (100) 0; vshim = Scale "Vertical spacing" (-100) (100) 0; bg_colour = Expression "Background colour" 0; halign = Option "Horizontal alignment" valign_names 1; valign = Option "Vertical alignment" halign_names 1; // we can't use map_unary since chop-into-tiles returns a group of // groups and we want to be able to reassemble that // TODO: chop-into-tiles should return an array class which // displays as group but does not have the looping behaviour? _result = (image_set_origin 0 0 @ foldl1 (join_tb vshim.value bg_colour.expr halign.value) @ map (foldl1 (join_lr hshim.value bg_colour.expr valign.value))) (to_list (to_list x)); } } ArrayFL_item = class Menuaction "_Array from List" "join a list of images into a single image" { action x = class _result { _vislevel = 3; ncol = Number "Max. Number of Columns" 1; hshim = Scale "Horizontal spacing" (-100) (100) 0; vshim = Scale "Vertical spacing" (-100) (100) 0; bg_colour = Expression "Background colour" 0; halign = Option "Horizontal alignment" valign_names 1; valign = Option "Vertical alignment" halign_names 1; _l = split_lines ncol.value x.value, is_Group x = split_lines ncol.value x; _result = (image_set_origin 0 0 @ foldl1 (join_tb vshim.value bg_colour.expr halign.value) @ map (foldl1 (join_lr hshim.value bg_colour.expr valign.value))) (to_list (to_list _l)); } } } Image_tile_item = class Menupullright "Til_e" "tile an image across and down" { tile_widget default_type x = class _result { _vislevel = 3; across = Expression "Tiles across" 2; down = Expression "Tiles down" 2; repeat = Option "Tile type" ["Replicate", "Four-way mirror"] default_type; _result = map_unary process x { process image = tile across down image, repeat == 0 = tile across down image'' { image' = insert image.width 0 (fliplr image) image; image'' = insert 0 image.height (fliptb image') image'; } } } Replicate_item = class Menuaction "_Replicate" "replicate image across and down" { action x = tile_widget 0 x; } Fourway_item = class Menuaction "_Four-way Mirror" "four-way mirror across and down" { action x = tile_widget 1 x; } Chop_item = class Menuaction "_Chop Into Tiles" "slice an image into tiles" { action x = class _result { _vislevel = 3; tile_width = Expression "Tile width" 100; tile_height = Expression "Tile height" 100; hoverlap = Expression "Horizontal overlap" 0; voverlap = Expression "Vertical overlap" 0; _result = map_unary (Group @ map Group @ process) x { process x = imagearray_chop tile_width tile_height hoverlap voverlap x; } } } } #separator Pattern_images_item = class Menupullright "_Patterns" "make a variety of useful patterns" { Grey_item = class Menuaction "Grey _Ramp" "make a smooth grey ramp" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; orientation = Option "Orientation" [ "Horizontal", "Vertical" ] 0; foption = Option "Format" ["8 bit", "float"] 0; _result = Image im { gen = im_grey, foption == 0 = im_fgrey; w = to_real nwidth; h = to_real nheight; im = gen w h, orientation == 0 = rot90 (gen h w); } } } Xy_item = class Menuaction "_XY Image" "make a two band image whose pixel values are their coordinates" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; _result = Image (make_xy nwidth nheight); } } Gaussian_item = class Menuaction "Gaussian _Noise" "make an image of gaussian noise" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; mean = Scale "Mean" 0 255 128; deviation = Scale "Deviation" 0 128 50; _result = Image (im_gaussnoise (to_real nwidth) (to_real nheight) mean.value deviation.value); } } Fractal_item = class Menuaction "_Fractal" "make a fractal image" { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; dimension = Scale "Dimension" 2.001 2.999 2.001; _result = Image (im_fractsurf (to_real nsize) dimension.value); } } Checkerboard_item = class Menuaction "_Checkerboard" "make a checkerboard image" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; hpsize = Expression "Horizontal patch size" 8; vpsize = Expression "Vertical patch size" 8; hpoffset = Expression "Horizontal patch offset" 0; vpoffset = Expression "Vertical patch offset" 0; _result = Image (xstripes ^ ystripes) { pixels = make_xy nwidth nheight; xpixels = pixels?0 + to_real hpoffset; ypixels = pixels?1 + to_real vpoffset; make_stripe pix swidth = pix % (swidth * 2) >= swidth; xstripes = make_stripe xpixels (to_real hpsize); ystripes = make_stripe ypixels (to_real vpsize); } } } Grid_item = class Menuaction "Gri_d" "make a grid" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; hspace = Expression "Horizontal line spacing" 8; vspace = Expression "Vertical line spacing" 8; thick = Expression "Line thickness" 1; hoff = Expression "Horizontal grid offset" 4; voff = Expression "Vertical grid offset" 4; _result = Image (xstripes | ystripes) { pixels = make_xy nwidth nheight; xpixels = pixels?0 + to_real hoff; ypixels = pixels?1 + to_real voff; make_stripe pix swidth = pix % swidth < to_real thick; xstripes = make_stripe xpixels (to_real hspace); ystripes = make_stripe ypixels (to_real vspace); } } } Text_item = class Menuaction "_Text" "make a bitmap of some text" { action = class _result { _vislevel = 3; text = String "Text to paint" "Hello world!"; font = Fontname "Use font" Workspaces.Preferences.PAINTBOX_FONT; wrap = Expression "Wrap text at" 500; align = Option "Alignment" [ "Left", "Centre", "Right" ] 0; dpi = Expression "DPI" 300; _result = Image (im_text text.value font.value (to_real wrap) align.value (to_real dpi)); } } New_CIELAB_slice_item = class Menuaction "CIELAB _Slice" "make a slice through CIELAB space" { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; L = Scale "L value" 0 100 50; _result = Image (lab_slice (to_real nsize) L.value); } } sense_option = Option "Sense" [ "Pass", "Reject" ] 0; build fn size = (Image @ image_set_type Image_type.FOURIER @ rotquad @ fn) (im_create_fmask size size); New_ideal_item = class Menupullright "_Ideal Fourier Mask" "make various ideal Fourier filter masks" { High_low_item = class Menuaction "_High or Low Pass" ("make a mask image for a highpass/lowpass " ++ "ideal Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f sense.value fc.value 0 0 0 0; } } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" ("make a mask image for an ring pass/reject " ++ "ideal Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; rw = Scale "Ring width" 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f (sense.value + 6) fc.value rw.value 0 0 0; } } } Band_item = class Menuaction "_Band Pass or Band Reject" ("make a mask image for a band pass/reject " ++ "ideal Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fcx = Scale "Horizontal frequency cutoff" 0.01 0.99 0.5; fcy = Scale "Vertical frequency cutoff" 0.01 0.99 0.5; r = Scale "Radius" 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f (sense.value + 12) fcx.value fcy.value r.value 0 0; } } } } New_gaussian_item = class Menupullright "_Gaussian Fourier Mask" "make various Gaussian Fourier filter masks" { High_low_item = class Menuaction "_High or Low Pass" ("make a mask image for a highpass/lowpass " ++ "Gaussian Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f (sense.value + 4) fc.value ac.value 0 0 0; } } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" ("make a mask image for an ring pass/reject " ++ "Gaussian Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; rw = Scale "Ring width" 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f (sense.value + 10) fc.value rw.value ac.value 0 0; } } } Band_item = class Menuaction "_Band Pass or Band Reject" ("make a mask image for a band pass/reject " ++ "Gaussian Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fcx = Scale "Horizontal frequency cutoff" 0.01 0.99 0.5; fcy = Scale "Vertical frequency cutoff" 0.01 0.99 0.5; r = Scale "Radius" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f (sense.value + 16) fcx.value fcy.value r.value ac.value 0; } } } } New_butterworth_item = class Menupullright "_Butterworth Fourier Mask" "make various Butterworth Fourier filter masks" { High_low_item = class Menuaction "_High or Low Pass" ("make a mask image for a highpass/lowpass " ++ "Butterworth Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; order = Scale "Order" 1 10 2; _result = build param (to_real nsize) { param f = f (sense.value + 2) order.value fc.value ac.value 0 0; } } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" ("make a mask image for an ring pass/reject " ++ "Butterworth Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; rw = Scale "Ring width" 0.01 0.99 0.5; order = Scale "Order" 1 10 2; _result = build param (to_real nsize) { param f = f (sense.value + 8) order.value fc.value rw.value ac.value 0; } } } Band_item = class Menuaction "_Band Pass or Band Reject" ("make a mask image for a band pass/reject " ++ "Butterworth Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fcx = Scale "Horizontal frequency cutoff" 0.01 0.99 0.5; fcy = Scale "Vertical frequency cutoff" 0.01 0.99 0.5; r = Scale "Radius" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; order = Scale "Order" 1 10 2; _result = build param (to_real nsize) { param f = f (sense.value + 14) order.value fcx.value fcy.value r.value ac.value; } } } } } Test_images_item = class Menupullright "Test I_mages" "make a variety of test images" { Eye_item = class Menuaction "_Spatial Response" "image for testing the eye's spatial response" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; factor = Scale "Factor" 0.001 1 0.2; _result = Image (im_eye (to_real nwidth) (to_real nheight) factor.value); } } Zone_plate = class Menuaction "_Zone Plate" "make a zone plate" { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; _result = Image (im_zone (to_real nsize)); } } Frequency_test_chart_item = class Menuaction "_Frequency Testchart" "make a black/white frequency test pattern" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; sheight = Expression "Strip height (pixels)" 10; waves = Expression "Wavelengths" [64, 32, 16, 8, 4, 2]; _result = imagearray_assemble 0 0 (transpose [strips]) { freq_slice wave = Image (sin (grey / wave) > 0); strips = map freq_slice waves.expr; grey = im_fgrey (to_real nwidth) (to_real sheight) * 360 * (to_real nwidth); } } } CRT_test_chart_item = class Menuaction "CRT _Phosphor Chart" "make an image for measuring phosphor colours" { action = class _result { _vislevel = 3; brightness = Scale "Brightness" 0 255 200; psize = Expression "Patch size (pixels)" 32; _result = Image (imagearray_assemble 0 0 [[green, red], [blue, white]]) { black = image_new (to_real psize) (to_real psize) 1 Image_format.FLOAT Image_coding.NOCODING Image_type.B_W 0 0 0; notblack = black + brightness; green = black ++ notblack ++ black; red = notblack ++ black ++ black; blue = black ++ black ++ notblack; white = notblack ++ notblack ++ notblack; } } } Greyscale_chart_item = class Menuaction "_Greyscale" "make a greyscale" { action = class _result { _vislevel = 3; pwidth = Expression "Patch width" 8; pheight = Expression "Patch height" 8; npatches = Expression "Number of patches" 16; _result = Image (image_set_type Image_type.B_W (clip2fmt Image_format.UCHAR wedge)) { wedge = 255 / (to_real npatches - 1) * (int) (strip?0 / to_real pwidth) { strip = make_xy (to_real pwidth * to_real npatches) pheight; } } } } CMYK_test_chart_item = class Menuaction "_CMYK Wedges" "make a set of CMYK wedges" { action = class _result { _vislevel = 3; pwidth = Expression "Patch width" 8; pheight = Expression "Patch height" 8; npatches = Expression "Number of patches" 16; _result = Image (image_set_type Image_type.CMYK (clip2fmt Image_format.UCHAR strips)) { wedge = 255 / (to_real npatches - 1) * (int) (strip?0 / to_real pwidth) { strip = make_xy (to_real pwidth * to_real npatches) pheight; } black = wedge * 0; C = wedge ++ black ++ black ++ black; M = black ++ wedge ++ black ++ black; Y = black ++ black ++ wedge ++ black; K = black ++ black ++ black ++ wedge; strips = imagearray_assemble 0 0 [[C],[M],[Y],[K]]; } } } Colour_atlas_item = class Menuaction "_Colour Atlas" "make a grid of patches grouped around a colour" { action = class _result { _vislevel = 3; start = Colour_picker "Lab" [50,0,0]; nstep = Expression "Number of steps" 9; ssize = Expression "Step size" 10; psize = Expression "Patch size" 32; sepsize = Expression "Separator size" 4; _result = colour_transform_to (get_type start) blocks''' { size = (to_real nstep * 2 + 1) * to_real psize - to_real sepsize; xy = make_xy size size; xy_grid = (xy % to_real psize) < (to_real psize - to_real sepsize); grid = xy_grid?0 & xy_grid?1; blocks = (int) (to_real ssize * ((int) (xy / to_real psize))); lab_start = colour_transform_to Image_type.LAB start; blocks' = blocks - to_real nstep * to_real ssize + Vector (tl lab_start.value); blocks'' = hd lab_start.value ++ Image blocks'; blocks''' = image_set_type Image_type.LAB blocks'', Image grid = 0; } } } } nip2-8.7.0/share/nip2/compat/7.26/_list.def0000644000175000017500000002245013224651032014743 00000000000000/* any l: or all the elements of list l together * * any (map (equal 0) list) == true, if any element of list is zero. * any :: [bool] -> bool */ any = foldr logical_or false; /* all l: and all the elements of list l together * * all (map (==0) list) == true, if every element of list is zero. * all :: [bool] -> bool */ all = foldr logical_and true; /* concat l: join a list of lists together * * concat ["abc","def"] == "abcdef". * concat :: [[*]] -> [*] */ concat l = foldr join [] l; /* delete eq x l: delete the first x from l * * delete equal 'b' "abcdb" == "acdb" * delete :: (* -> bool) -> * -> [*] -> [*] */ delete eq a l = [], l == [] = y, eq a b = b : delete eq a y { b:y = l; } /* difference eq a b: delete b from a * * difference equal "asdf" "ad" == "sf" * difference :: (* -> bool) -> [*] -> [*] -> [*] */ difference = foldl @ converse @ delete; /* drop n l: drop the first n elements from list l * * drop 3 "abcd" == "d" * drop :: num -> [*] -> [*] */ drop n l = l, n <= 0 || l == [] = drop (n - 1) (tl l); /* dropwhile fn l: drop while fn is true * * dropwhile is_digit "1234pigs" == "pigs" * dropwhile :: (* -> bool) -> [*] -> [*] */ dropwhile fn l = [], l == [] = dropwhile fn x, fn a = l { a:x = l; } /* extract n l: extract element at index n from list l */ extract = converse subscript; /* filter fn l: return all elements of l for which predicate fn holds * * filter is_digit "1one2two3three" = "123" * filter :: (* -> bool) -> [*] -> [*] */ filter fn l = foldr addif [] l { addif x l = x : l, fn x; = l; } /* foldl fn st l: fold list l from the left with function fn and start st * * Start from the left hand end of the list (unlike foldr, see below). * foldl is less useful (and much slower). * * foldl fn start [a,b .. z] = ((((st fn a) fn b) ..) fn z) * foldl :: (* -> ** -> *) -> * -> [**] -> * */ foldl fn st l = st, l == [] = foldl fn (fn st (hd l)) (tl l); /* foldl1 fn l: like foldl, but use the 1st element as the start value * * foldl1 fn [1,2,3] == ((1 fn 2) fn 3) * foldl1 :: (* -> * -> *) -> [*] -> * */ foldl1 fn l = [], l == [] = foldl fn (hd l) (tl l); /* foldr fn st l: fold list l from the right with function fn and start st * * foldr fn st [a,b..z] = (a fn (b fn (.. (z fn st)))) * foldr :: (* -> ** -> **) -> ** -> [*] -> ** */ foldr fn st l = st, l == [] = fn (hd l) (foldr fn st (tl l)); /* foldrl fn l: like foldr, but use the 1st element as the start value * * foldr1 fn [1,2,3,4] == (2 fn (3 fn (4 fn 1))) * foldr1 :: (* -> * -> *) -> [*] -> * */ foldr1 fn l = [], l == [] = foldr fn (hd l) (tl l); /* Search a list for an element, returning its index (or -1) * * index (equal 12) [13,12,11] == 1 * index :: (* -> bool) -> [*] -> real */ index fn list = search list 0 { search l n = -1, l == [] = n, fn (hd l) = search (tl l) (n + 1); } /* init l: remove last element of list l * * The dual of tl. * init [1,2,3] == [1,2] * init :: [*] -> [*] */ init l = error "init of []", l == []; = [], tl l == []; = hd l : init (tl l); /* iterate f x: repeatedly apply f to x * * return the infinite list [x, f x, f (f x), ..]. * iterate (multiply 2) 1 == [1, 2, 4, 8, 16, 32, 64 ... ] * iterate :: (* -> *) -> * -> [*] */ iterate f x = x : iterate f (f x); /* join_sep sep l: join a list with a separator * * join_sep ", " (map print [1 .. 4]) == "1, 2, 3, 4" * join_sep :: [*] -> [[*]] -> [*] */ join_sep sep l = foldl1 fn l { fn a b = a ++ sep ++ b; } /* last l: return the last element of list l * * The dual of hd. last [1,2,3] == 3 * last :: [*] -> [*] */ last l = error "last of []", l == [] = hd l, tl l == [] = last (tl l); /* len l: length of list l * (see also is_list_len and friends in predicate.def) * * len :: [*] -> num */ len l = 0, l == [] = 1 + len (tl l); /* limit l: return the first element of l which is equal to its predecessor * * useful for checking for convergence * limit :: [*] -> * */ limit l = error "incorrect use of limit", l == [] || tl l == [] || tl (tl l) == [] = a, a == b = limit (b : x) { a:b:x = l; } /* Turn a function of n args into a function which takes a single arg of an * n-element list. */ list_1ary fn x = fn x?0; list_2ary fn x = fn x?0 x?1; list_3ary fn x = fn x?0 x?1 x?2; list_4ary fn x = fn x?0 x?1 x?2 x?3; list_5ary fn x = fn x?0 x?1 x?2 x?3 x?4; list_6ary fn x = fn x?0 x?1 x?2 x?3 x?4 x?5; list_7ary fn x = fn x?0 x?1 x?2 x?3 x?4 x?5 x?6; /* map fn l: map function fn over list l * * map :: (* -> **) -> [*] -> [**] */ map f l = [], l == []; = f (hd l) : map f (tl l); /* map2 fn l1 l2: map two lists together with fn * * map2 :: (* -> ** -> ***) -> [*] -> [**] -> [***] */ map2 fn l1 l2 = map (list_2ary fn) (zip2 l1 l2); /* map3 fn l1 l2 l3: map three lists together with fn * * map3 :: (* -> ** -> *** -> ****) -> [*] -> [**] -> [***] -> [****] */ map3 fn l1 l2 l3 = map (list_3ary fn) (zip3 l1 l2 l3); /* member l x: true if x is a member of list l * * is_digit == member "0123456789" * member :: [*] -> * -> bool */ member l x = any (map (equal x) l); /* merge b l r: merge two lists based on a bool list * * merge :: [bool] -> [*] -> [*] -> [*] */ merge p l r = [], p == [] || l == [] || r == [] = a : merge z x y, c = b : merge z x y { a:x = l; b:y = r; c:z = p; } /* mkset eq l: remove duplicates from list l using equality function * * mkset :: (* -> bool) -> [*] -> [*] */ mkset eq l = [], l == [] = a : filter (not @ eq a) (mkset eq x) { a:x = l; } /* postfix l r: add r to the end of list l * * The dual of ':'. * postfix :: [*] -> ** -> [*,**] */ postfix l r = l ++ [r]; /* repeat x: make an infinite list of xes * * repeat :: * -> [*] */ repeat x = map (const x) [1..]; /* replicate n x: make n copies of x in a list * * replicate :: num -> * -> [*] */ replicate n x = take n (repeat x); /* reverse l: reverse list l * * reverse :: [*] -> [*] */ reverse l = foldl (converse cons) [] l; /* scan fn st l: apply (fold fn r) to every initial segment of a list * * scan add 0 [1,2,3] == [1,3,6] * scan :: (* -> ** -> *) -> * -> [**] -> [*] */ scan fn = g { g st l = [st], l == [] = st : g (fn st a) x { a:x = l; } } /* sort l: sort list l into ascending order * * sort :: [*] -> [*] */ sort l = sortc less_equal l; /* sortc comp l: sort list l into order using a comparision function * * Uses merge sort (n log n behaviour) * sortc :: (* -> * -> bool) -> [*] -> [*] */ sortc comp l = l, n <= 1 = merge (sortc comp (take n2 l)) (sortc comp (drop n2 l)) { n = len l; n2 = (int) (n / 2); /* merge l1 l2: merge sorted lists l1 and l2 to make a single * sorted list */ merge l1 l2 = l2, l1 == [] = l1, l2 == [] = a : merge x (b : y), comp a b = b : merge (a : x) y { a:x = l1; b:y = l2; } } /* sortpl pl l: sort by a list of predicates * * sortpl :: (* -> bool) -> [*] -> [*] */ sortpl pl l = sortc (test pl) l { /* Comparision function ... put true before false, if equal move on to * the next predicate. */ test pl a b = true, pl == [] = ta, ta != tb = test (tl pl) a b { ta = pl?0 a; tb = pl?0 b; } } /* sortr l: sort list l into descending order * * sortr :: [*] -> [*] */ sortr l = sortc more l; /* split fn l: break a list into sections separated by many fn * * split is_space " hello world " == ["hello", "world"] * split is_space " " == [] * split :: (* -> bool) -> [*] -> [[*]] */ split fn l = [], l == [] || l' == [] = head : split fn tail { nfn = not @ fn; l' = dropwhile fn l; head = takewhile nfn l'; tail = dropwhile nfn l'; } /* splits fn l: break a list into sections separated by a single fn * * split (equal ',') ",,1" == ["", "", "1"] * split :: (* -> bool) -> [*] -> [[*]] */ splits fn l = [], l == [] = head : splits fn tail { fn' = not @ fn; dropif x = [], x == [] = tl x; head = takewhile fn' l; tail = dropif (dropwhile fn' l); } /* splitpl fnl l: split a list up with a list of predicates * * splitpl [is_digit, is_letter, is_digit] "123cat" == ["123", "cat", []] * splitpl :: [* -> bool] -> [*] -> [[*]] */ splitpl fnl l = l, fnl == [] = head : splitpl (tl fnl) tail { head = takewhile (hd fnl) l; tail = dropwhile (hd fnl) l; } /* split_lines n l: split a list into equal length lines * * split_lines 4 "1234567" == ["1234", "567"] * splitl :: int -> [*] -> [[*]] */ split_lines n l = [], l == [] = take n l : split_lines n (drop n l); /* take n l: take the first n elements from list l * take :: num -> [*] -> [*] */ take n l = [], n <= 0 = [], l == [] = hd l : take (n-1) (tl l); /* takewhile fn l: take from the front of a list while predicate fn holds * * takewhile is_digit "123onetwothree" == "123" * takewhile :: (* -> bool) -> [*] -> [*] */ takewhile fn l = [], l == [] = hd l : takewhile fn (tl l), fn (hd l) = []; /* zip2 l1 l2: zip two lists together * * zip2 [1,2] ['a', 'b', 'c'] == [[1,'a'],[2,'b']] * zip2 :: [*] -> [**] -> [[*,**]] */ zip2 l1 l2 = [], l1 == [] || l2 == [] = [hd l1, hd l2] : zip2 (tl l1) (tl l2); /* zip3 l1 l2 l3: zip three lists together * * zip3 [1,2] ['a', 'b', 'c'] [true] == [[1,'a',true]] * zip3 :: [*] -> [**] ->[***] -> [[*,**,***]] */ zip3 l1 l2 l3 = [], l1 == [] || l2 == [] || l3 == [] = [hd l1, hd l2, hd l3] : zip3 (tl l1) (tl l2) (tl l3); nip2-8.7.0/share/nip2/compat/7.26/_Object.def0000644000175000017500000002600513224651032015176 00000000000000/* Lots of little arg checks. Global for convenience. */ check_any = [(const true), _ "any"]; check_bool = [is_bool, _ "boolean"]; check_real = [is_real, _ "real"]; check_ureal = [is_ureal, _ "unsigned real"]; check_preal = [is_preal, _ "positive real"]; check_list = [is_list, _ "list"]; check_real_list = [is_real_list, _ "list of real"]; check_string = [is_string, _ "string"]; check_string_list = [is_string_list, _ "list of string"]; check_int = [is_int, _ "integer"]; check_uint = [is_uint, _ "unsigned integer"]; check_pint = [is_pint, _ "positive integer"]; check_matrix = [is_matrix, _ "rectangular array of real"]; check_matrix_display = [Matrix_display.is_display, _ "0|1|2|3"]; check_image = [is_image, _ "image"]; check_xy_list = [is_xy_list, _ "list of form [[1, 2], [3, 4], [5, 6], ...]"]; check_instance name = [is_instanceof name, name]; check_Image = check_instance "Image"; check_Matrix = [is_Matrix, _ "Matrix"]; check_colour_space = [is_colour_space, join_sep "|" Image_type.colour_spaces.names]; check_rectangular = [is_rectangular, _ "rectangular [[*]]"]; check_Guide = [is_Guide, _ "HGuide|VGuide"]; check_Colour = check_instance (_ "Colour"); check_Mark = check_instance (_ "Mark"); /* Check a set of args to a class. Two members to look at: _check_args and * _check_all. * * - each line in _check_args is [arg, "arg name", [test_fn, "arg type"]] * same number of lines as there are args * * stuff like "arg 2 must be real" * * - each line in _check_all is [test, "description"] * any number of lines * * stuff like "to must be greater than from" * * generate an error dialog with a helpful message on failure. * * Have as a separate function to try to keep the size of _Object down. */ check_args x = error message, badargs != [] || badalls != [] = x { argcheck = x._check_args; allcheck = x._check_all; // indent string indent = " "; // test for a condition in a check line fails test_fail x = ! x?0; // set of failed argcheck indexes badargs = map (extract 1) (filter test_fail (zip2 (map testarg argcheck) [0..])) { testarg x = x?2?0 x?0; } // set of failed allcheck indexes badalls = map (extract 1) (filter test_fail (zip2 (map hd allcheck) [0..])); // the error message message = _ "bad properties for " ++ "\"" ++ x.name ++ "\"\n" ++ argmsg ++ allmsg ++ "\n" ++ _ "where" ++ "\n" ++ arg_types ++ extra; // make the failed argcheck messages ... eg. ""value" should be // real, you passed " etc. argmsg = concat (map fmt badargs) { fmt n = indent ++ "\"" ++ argcheck?n?1 ++ "\"" ++ _ " should be of type " ++ argcheck?n?2?1 ++ ", " ++ _ "you passed" ++ ":\n" ++ indent ++ indent ++ print argcheck?n?0 ++ "\n"; } // make the failed allcheck messages ... eg "condition failed: // x < y" ... don't make a message if any typechecks have // failed, as we'll probably error horribly allmsg = [], badargs != [] = concat (map fmt badalls) ++ _ "you passed" ++ "\n" ++ concat (map fmt_arg argcheck) { fmt n = _ "condition failed" ++ ": " ++ allcheck?n?1 ++ "\n"; fmt_arg l = indent ++ l?1 ++ " = " ++ print l?0 ++ "\n"; } // make arg type notes arg_types = join_sep "\n" (map fmt argcheck) { fmt l = indent ++ l?1 ++ " is of type " ++ l?2?1; } // extra bit at the bottom, if we have any conditions extra = [], allcheck == [] = "\n" ++ _ "and" ++ "\n" ++ all_desc; // make a list of all the allcheck descriptions, with a few // spaces in front all_desc_list = map (join indent @ extract 1) allcheck; // join em up to make a set of condition notes all_desc = join_sep "\n" all_desc_list; } /* Operator overloading stuff. */ Operator_type = class { ARITHMETIC = 1; // eg. add RELATIONAL = 2; // eg. less COMPOUND = 3; // eg. max/mean/etc. COMPOUND_REWRAP = 4; // eg. transpose } Operator op_name fn type symmetric = class { } /* Form the converse of an Operator. */ oo_converse op = Operator (converse_name op.op_name) (converse op.fn) op.type op.symmetric { converse_name x = init x, last x == last "'" = x ++ "'"; } /* Given an operator name, look up the definition. */ oo_binary_lookup op_name = matches?0, matches != [] = error (_ "unknown binary operator" ++ ": " ++ print op_name) { operator_table = [ Operator "add" add Operator_type.ARITHMETIC true, Operator "subtract" subtract Operator_type.ARITHMETIC false, Operator "remainder" remainder Operator_type.ARITHMETIC false, Operator "power" power Operator_type.ARITHMETIC false, Operator "subscript" subscript Operator_type.ARITHMETIC false, Operator "left_shift" left_shift Operator_type.ARITHMETIC false, Operator "right_shift" right_shift Operator_type.ARITHMETIC false, Operator "divide" divide Operator_type.ARITHMETIC false, Operator "join" join Operator_type.ARITHMETIC false, Operator "multiply" multiply Operator_type.ARITHMETIC true, Operator "logical_and" logical_and Operator_type.ARITHMETIC true, Operator "logical_or" logical_or Operator_type.ARITHMETIC true, Operator "bitwise_and" bitwise_and Operator_type.ARITHMETIC true, Operator "bitwise_or" bitwise_or Operator_type.ARITHMETIC true, Operator "eor" eor Operator_type.ARITHMETIC true, Operator "comma" comma Operator_type.ARITHMETIC false, Operator "if_then_else" if_then_else Operator_type.ARITHMETIC false, Operator "equal" equal Operator_type.RELATIONAL true, Operator "not_equal" not_equal Operator_type.RELATIONAL true, Operator "less" less Operator_type.RELATIONAL false, Operator "less_equal" less_equal Operator_type.RELATIONAL false ]; matches = filter test_name operator_table; test_name x = x.op_name == op_name; } /* Given an operator name, look up a function that implements that * operator. */ oo_unary_lookup op_name = matches?0, matches != [] = error (_ "unknown unary operator" ++ ": " ++ print op_name) { operator_table = [ /* Operators. */ Operator "cast_signed_char" cast_signed_char Operator_type.ARITHMETIC false, Operator "cast_unsigned_char" cast_unsigned_char Operator_type.ARITHMETIC false, Operator "cast_signed_short" cast_signed_short Operator_type.ARITHMETIC false, Operator "cast_unsigned_short" cast_unsigned_short Operator_type.ARITHMETIC false, Operator "cast_signed_int" cast_signed_int Operator_type.ARITHMETIC false, Operator "cast_unsigned_int" cast_unsigned_int Operator_type.ARITHMETIC false, Operator "cast_float" cast_float Operator_type.ARITHMETIC false, Operator "cast_double" cast_double Operator_type.ARITHMETIC false, Operator "cast_complex" cast_complex Operator_type.ARITHMETIC false, Operator "cast_double_complex" cast_double_complex Operator_type.ARITHMETIC false, Operator "unary_minus" unary_minus Operator_type.ARITHMETIC false, Operator "negate" negate Operator_type.RELATIONAL false, Operator "complement" complement Operator_type.ARITHMETIC false, Operator "unary_plus" unary_plus Operator_type.ARITHMETIC false, /* Built in projections. */ Operator "re" re Operator_type.ARITHMETIC false, Operator "im" im Operator_type.ARITHMETIC false, Operator "hd" hd Operator_type.ARITHMETIC false, Operator "tl" tl Operator_type.ARITHMETIC false, /* Maths builtins. */ Operator "sin" sin Operator_type.ARITHMETIC false, Operator "cos" cos Operator_type.ARITHMETIC false, Operator "tan" tan Operator_type.ARITHMETIC false, Operator "asin" asin Operator_type.ARITHMETIC false, Operator "acos" acos Operator_type.ARITHMETIC false, Operator "atan" atan Operator_type.ARITHMETIC false, Operator "log" log Operator_type.ARITHMETIC false, Operator "log10" log10 Operator_type.ARITHMETIC false, Operator "exp" exp Operator_type.ARITHMETIC false, Operator "exp10" exp10 Operator_type.ARITHMETIC false, Operator "ceil" ceil Operator_type.ARITHMETIC false, Operator "floor" floor Operator_type.ARITHMETIC false ]; matches = filter test_name operator_table; test_name x = x.op_name == op_name; } /* Find the matching methods in a method table. */ oo_method_lookup table = map (extract 0) (filter (extract 1) table); /* A binary op: a is a class, b may be a class ... eg. "add" a b two obvious ways to find a method: - a.oo_binary_search "add" (+) b - b.oo_binary_search "add'" (converse (+)) a, is_class b if these fail but op is a symmetric operator (eg. a + b == b + a), we can also try reversing the args - a.oo_binary_search "add'" (converse (+)) b - b.oo_binary_search "add" (+) a, is_class b if those fail as well, but this is ==, do pointer equals as a fallback */ oo_binary_function op a b = matches1?0, matches1 != [] = matches2?0, is_class b && matches2 != [] = matches3?0, op.symmetric && matches3 != [] = matches4?0, op.symmetric && is_class b && matches4 != [] = pointer_equal a b, op.op_name == "equal" || op.op_name == "equal'" = not_pointer_equal a b, op.op_name == "not_equal" || op.op_name == "not_equal'" = error (_ "No method found for binary operator." ++ "\n" ++ _ "left" ++ " = " ++ print a ++ "\n" ++ _ "operator" ++ " = " ++ op.op_name ++ "\n" ++ _ "right" ++ " = " ++ print b) { matches1 = oo_method_lookup (a.oo_binary_table op b); matches2 = oo_method_lookup (b.oo_binary_table (oo_converse op) a); matches3 = oo_method_lookup (a.oo_binary_table (oo_converse op) b); matches4 = oo_method_lookup (b.oo_binary_table op a); } /* A binary op: a is not a class, b is a class ... eg. "subtract" a b only one way to find a method: - b.oo_binary_search "subtract'" (converse (-)) a if this fails but op is a symmetric operator (eg. a + b == b + a), we can try reversing the args - b.oo_binary_search "add" (+) a, is_class b if that fails as well, but this is ==, do pointer equals as a fallback */ oo_binary'_function op a b = matches1?0, matches1 != [] = matches2?0, op.symmetric && matches2 != [] = pointer_equal a b, op.op_name == "equal" || op.op_name == "equal'" = not_pointer_equal a b, op.op_name == "not_equal" || op.op_name == "not_equal'" = error (_ "No method found for binary operator." ++ "\n" ++ _ "left" ++ " = " ++ print a ++ "\n" ++ _ "operator" ++ " = " ++ op.op_name ++ "\n" ++ _ "right" ++ " = " ++ print b) { matches1 = oo_method_lookup (b.oo_binary_table (oo_converse op) a); matches2 = oo_method_lookup (b.oo_binary_table op a); } oo_unary_function op x = matches?0, matches != [] = error (_ "No method found for unary operator." ++ "\n" ++ _ "operator" ++ " = " ++ op.op_name ++ "\n" ++ _ "argument" ++ " = " ++ print x) { matches = oo_method_lookup (x.oo_unary_table op); } /* Base class for nip's built-in classes ... base check function, base * operator overload functions. */ _Object = class { check = check_args this; // these should always be defined _check_args = []; _check_all = []; /* Operator overloading stuff. */ oo_binary op x = oo_binary_function (oo_binary_lookup op) this x; oo_binary' op x = oo_binary'_function (oo_binary_lookup op) x this; oo_unary op = oo_unary_function (oo_unary_lookup op) this; oo_binary_table op x = []; oo_unary_table op = []; } nip2-8.7.0/share/nip2/compat/7.26/_predicate.def0000644000175000017500000002672113224651032015735 00000000000000 /* is_colour_space str: is a string one of nip's colour space names */ is_colour_space str = Image_type.colour_spaces.present 0 str; /* is_colour_type n: is a number one of VIPS's colour spaces */ is_colour_type n = Image_type.colour_spaces.present 1 n; /* is_number: is a real or a complex number. */ is_number a = is_real a || is_complex a; /* is_int: is an integer */ is_int a = is_real a && a == (int) a; /* is_uint: is an unsigned integer */ is_uint a = is_int a && a >= 0; /* is_pint: is a positive integer */ is_pint a = is_int a && a > 0; /* is_preal: is a positive real */ is_preal a = is_real a && a > 0; /* is_ureal: is an unsigned real */ is_ureal a = is_real a && a >= 0; /* is_letter c: true if character c is an ASCII letter * * is_letter :: char -> bool */ is_letter c = ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z'); /* is_digit c: true if character c is an ASCII digit * * is_digit :: char->bool */ is_digit x = '0' <= x && x <= '9'; /* A whitespace character. * * is_space :: char->bool */ is_space = member " \n\t"; /* List str starts with section prefix. * * is_prefix "hell" "hello world!" == true * is_prefix :: [*] -> [*] -> bool */ is_prefix prefix str = take (len prefix) str == prefix; /* List str ends with section suffix. * * is_suffix "ld!" "hello world!" == true * is_suffix :: [*] -> [*] -> bool */ is_suffix suffix str = take (len suffix) (reverse str) == reverse suffix; /* List contains seqence. * * is_substr "llo" "hello world!" == true * is_substr :: [*] -> [*] -> bool */ is_substr seq str = any (map (is_prefix seq) (iterate tl str)); /* is_listof p s: true if finite list with p true for every element. */ is_listof p l = is_list l && all (map p l); /* is_string s: true if finite list of char. */ is_string s = is_listof is_char s; /* is_real_list l: is l a list of real numbers ... test each element, * so no infinite lists pls. */ is_real_list l = is_listof is_real l; /* is_string_list l: is l a finite list of finite strings. */ is_string_list l = is_listof is_string l; /* Test list length ... quicker than len x == n for large lists. */ is_list_len n x = true, x == [] && n == 0 = false, x == [] || n == 0 = is_list_len (n - 1) (tl x); is_list_len_more n x = true, x != [] && n == 0 = false, x == [] || n == 0 = is_list_len_more (n - 1) (tl x); is_list_len_more_equal n x = true, n == 0 = false, x == [] = is_list_len_more_equal (n - 1) (tl x); /* is_rectangular l: is l a rectangular data structure */ is_rectangular l = true, !is_list l = true, all (map is_obj l) = true, all (map is_list l) && all (map (not @ is_obj) l) && all (map is_rectangular l) && is_list_len_more 0 l && all (map (is_list_len (len (hd l))) (tl l)) = false { // treat strings as a base type, not [char] is_obj x = !is_list x || is_string x; } /* is_matrix l: is l a list of lists of real numbers, all the same length * * [[]] is the empty matrix, [] is the empty list ... disallow [] */ is_matrix l = l != [] && is_listof is_real_list l && is_rectangular l; /* is_square_matrix l: is l a matrix with width == height */ is_square_matrix l = true, l == [[]] = is_matrix l && is_list_len (len (hd l)) l; /* is_oddmatrix l: is l a matrix with odd-length sides */ is_oddmatrix l = true, l == [[]] = is_matrix l && len l % 2 == 1 && len l?0 % 2 == 1; /* is_odd_square_matrix l: is l a square_matrix with odd-length sides */ is_odd_square_matrix l = is_square_matrix l && len l % 2 == 1; /* Is an item in a column of a table? */ is_incolumn n table x = member (map (extract n) table) x; /* Is HGuide or VGuide. */ is_HGuide x = is_instanceof "HGuide" x; is_VGuide x = is_instanceof "VGuide" x; is_Guide x = is_HGuide x || is_VGuide x; is_Mark x = is_instanceof "Mark" x; is_Group x = is_instanceof "Group" x; is_NULL x = is_instanceof "NULL" x; is_List x = is_instanceof "List" x; is_Image x = is_instanceof "Image" x; is_Region x = is_instanceof "Region" x; is_Real x = is_instanceof "Real" x; is_Matrix x = is_instanceof "Matrix_base" x; is_Vector x = is_instanceof "Vector" x; is_Colour x = is_instanceof "Colour" x; is_Arrow x = is_instanceof "Arrow" x; is_Bool x = is_instanceof "Bool" x; is_Scale x = is_instanceof "Scale" x; is_Rect x = is_instanceof "Rect" x; is_Number x = is_instanceof "Number" x; is_Expression x = is_instanceof "Expression" x; is_String x = is_instanceof "String" x; /* A list of the form [[1,2],[3,4],[5,6]...] */ is_xy_list l = is_list l && all (map xy l) { xy l = is_real_list l && is_list_len 2 l; } // does a nested list structure contain a Group object? contains_Group l = true, is_list l && any (map is_Group l) = any (map contains_Group l), is_list l = false; /* Does an object have a sensible VIPS type? */ has_type x = is_image x || is_Image x || is_Arrow x || is_Colour x; /* Try to get a VIPS image type from an object. */ get_type x = get_type_im x, is_image x = get_type_im x.value, is_Image x = get_type_im x.image.value, is_Arrow x = Image_type.colour_spaces.lookup 0 1 x.colour_space, is_Colour x // slightly odd ... but our display is always 0-255, so it makes sense for // a plain number to be in the same range = Image_type.sRGB, is_real x = error ("get_type: unable to get type from " ++ print x) { // get the type from a VIPS image ... but only if it makes sense with // the rest of the image // we often have Type set wrong, hence the ugly guessing :-( // can have alpha, hence we let bands be one more than you might think get_type_im im = Image_type.LABQ, coding == Image_coding.LABPACK = Image_type.GREY16, type == Image_type.GREY16 && is_bands 1 = Image_type.HISTOGRAM, type == Image_type.HISTOGRAM && (width == 1 || height == 1) = Image_type.B_W, is_bands 1 = Image_type.CMYK, type == Image_type.CMYK && is_bands 4 = type, is_colorimetric && is_bands 3 = Image_type.sRGB, !is_colorimetric && is_bands 3 = Image_type.MULTIBAND, !is_colorimetric && !is_bands 3 = type { type = get_header "Type" im; coding = get_header "Coding" im; bands = get_header "Bands" im; width = get_header "Xsize" im; height = get_header "Ysize" im; // 3-band colorimetric types we allow ... the things which the // Colour/Convert To menu can make, excluding mono. ok_types = [ Image_type.sRGB, Image_type.RGB16, Image_type.LAB, Image_type.LABQ, Image_type.LABS, Image_type.LCH, Image_type.XYZ, Image_type.YXY, Image_type.UCS ]; is_colorimetric = member ok_types type; // is bands n, with an optional alpha (ie. can be n + 1 too) is_bands n = bands == n || bands == n + 1; } } has_format x = has_member "format" x || is_Arrow x || is_image x; get_format x = x.format, has_member "format" x = x.image.format, is_Arrow x = get_header "BandFmt" x, is_image x = error ("get_format: unable to get format from " ++ print x); has_bits x = has_member "bits" x || is_Arrow x || is_image x; get_bits x = x.bits, has_member "bits" x = x.image.bits, is_Arrow x = get_header "Bbits" x, is_image x = error ("get_bits: unable to get bits from " ++ print x); has_bands x = is_image x || has_member "bands" x || is_Arrow x; get_bands x = x.bands, has_member "bands" x = x.image.bands, is_Arrow x = get_header "Bands" x, is_image x = 1, is_real x = len x, is_real_list x = error ("get_bands: unable to get bands from " ++ print x); has_coding x = has_member "coding" x || is_Arrow x || is_image x; get_coding x = x.coding, has_member "coding" x = x.image.coding, is_Arrow x = get_header "Coding" x, is_image x = Image_coding.NOCODING, is_real x = error ("get_coding: unable to get coding from " ++ print x); has_xres x = has_member "xres" x || is_Arrow x || is_image x; get_xres x = x.xres, has_member "xres" x = x.image.xres, is_Arrow x = get_header "Xres" x, is_image x = error ("get_xres: unable to get xres from " ++ print x); has_yres x = has_member "yres" x || is_Arrow x || is_image x; get_yres x = x.yres, has_member "yres" x = x.image.yres, is_Arrow x = get_header "Yres" x, is_image x = error ("get_yres: unable to get yres from " ++ print x); has_xoffset x = has_member "xoffset" x || is_Arrow x || is_image x; get_xoffset x = x.xoffset, has_member "xoffset" x = x.image.xoffset, is_Arrow x = get_header "Xoffset" x, is_image x = error ("get_xoffset: unable to get xoffset from " ++ print x); has_yoffset x = has_member "yoffset" x || is_Arrow x || is_image x; get_yoffset x = x.yoffset, has_member "yoffset" x = x.image.yoffset, is_Arrow x = get_header "Yoffset" x, is_image x = error ("get_yoffset: unable to get yoffset from " ++ print x); has_value = has_member "value"; get_value x = x.value; has_image x = is_image x || is_Image x || is_Arrow x; get_image x = x.value, is_Image x = x.image.value, is_Arrow x = x, is_image x = error ("get_image: unable to get image from " ++ print x); has_number x = is_number x || is_Real x; get_number x = x.value, is_Real x = x, is_number x = error ("get_number: unable to get number from " ++ print x); has_real x = is_real x || is_Real x; get_real x = x.value, is_Real x = x, is_real x = error ("get_real: unable to get real from " ++ print x); has_width x = has_member "width" x || is_image x; get_width x = x.width, has_member "width" x = get_header "Xsize" x, is_image x = error ("get_width: unable to get width from " ++ print x); has_height x = has_member "height" x || is_image x; get_height x = x.height, has_member "height" x = get_header "Ysize" x, is_image x = error ("get_height: unable to get height from " ++ print x); has_left x = has_member "left" x; get_left x = x.left, has_member "left" x = error ("get_left: unable to get left from " ++ print x); has_top x = has_member "top" x; get_top x = x.top, has_member "top" x = error ("get_top: unable to get top from " ++ print x); // like has/get member, but first in a lst of objects has_member_list has objects = filter has objects != []; // need one with the args swapped get_member = converse dot; // get a member from the first of a list of objects to have it get_member_list has get objects = hd members, members != [] = error "unable to get property" { members = map get (filter has objects); } is_hist x = has_image x && (h == 1 || w == 1 || t == Image_type.HISTOGRAM) { im = get_image x; w = get_width im; h = get_height im; t = get_type im; } get_header field x = oo_unary_function get_header_op x, is_class x = get_header_image x, is_image x = error (_ "bad arguments to " ++ "get_header") { get_header_op = Operator "get_header" (get_header field) Operator_type.COMPOUND false; get_header_image im = im_header_int field im, type == itype = im_header_double field im, type == dtype = im_header_string field im, type == stype1 || type == stype2 = error (_ "image has no field " ++ field), type == 0 = error (_ "unknown type for field " ++ field) { type = im_header_get_typeof field im; itype = name2gtype "gint"; dtype = name2gtype "gdouble"; stype1 = name2gtype "VipsRefString"; stype2 = name2gtype "gchararray"; } } get_header_type field x = oo_unary_function get_header_type_op x, is_class x = im_header_get_typeof field x, is_image x = error (_ "bad arguments to " ++ "get_header_type") { get_header_type_op = Operator "get_header_type" (get_header_type field) Operator_type.COMPOUND false; } set_header field value x = oo_unary_function set_header_op x, is_class x = im_copy_set_meta x field value, is_image x = error (_ "bad arguments to " ++ "set_header") { set_header_op = Operator "set_header" (set_header field value) Operator_type.COMPOUND false; } nip2-8.7.0/share/nip2/compat/7.26/Widgets.def0000644000175000017500000000235313224651032015237 00000000000000Widget_slider_item = class Menuaction "_Scale" "make a new scale widget" { icon = "nip-slider-16.png"; action = Scale "untitled scale" 0 255 128; } Widget_toggle_item = class Menuaction "_Toggle" "make a new toggle widget" { action = Toggle "untitled toggle" false; } Widget_option_item = class Menuaction "_Option" "make a new option widget" { action = Option "untitled option" ["option0", "option1"] 0; } Widget_string_item = class Menuaction "St_ring" "make a new string widget" { action = String "Enter a string" "sample text"; } Widget_number_item = class Menuaction "_Number" "make a new number widget" { action = Number "Enter a number" 42; } Widget_expression_item = class Menuaction "_Expression" "make a new expression widget" { action = Expression "Enter an expression" 42; } Widget_pathname_item = class Menuaction "_File Chooser" "make a new file chooser widget" { action = Pathname "Pick a file" "$VIPSHOME/share/$PACKAGE/data/print_test_image.v"; } Widget_font_item = class Menuaction "F_ont Chooser" "make a new font chooser widget" { action = Fontname "Pick a font" Workspaces.Preferences.PAINTBOX_FONT; } Widget_clock_item = class Menuaction "_Clock" "make a new clock widget" { action = Clock 1 1; } nip2-8.7.0/share/nip2/compat/7.26/Colour.def0000644000175000017500000003607713224651032015106 00000000000000 Colour_new_item = class Menupullright (_ "_New") (_ "make a patch of colour") { Widget_colour_item = class Menuaction (_ "_Colour") (_ "make a patch of colour") { action = Colour_picker "Lab" [50,0,0]; } LAB_colour = class Menuaction (_ "CIE Lab _Picker") (_ "pick colour in CIE Lab space") { action = widget "Lab" [50, 0, 0]; // ab_slice size size = 512; // range of values ... +/- 128 for ab range = 256; // map xy in slice image to ab and back xy2ab x = x / (size / range) - 128; ab2xy a = (a + 128) * (size / range); widget space default_value = class Colour space _result { _vislevel = 3; [_L, _a, _b] = default_value; L = Scale "Lightness" 0 100 _L; ab_slice = Image (lab_slice size L.value); point = Mark ab_slice (ab2xy _a) (ab2xy _b); _result = [L.value, xy2ab point.left, xy2ab point.top]; Colour_edit colour_space value = widget colour_space value; } } } Colour_to_colour_item = class Menuaction (_ "Con_vert to Colour") (_ "convert anything to a colour") { action x = to_colour x; } #separator Colour_convert_item = class Menupullright (_ "_Colourspace") (_ "convert to various colour spaces") { spaces = Image_type.image_colour_spaces; conv dest x = class _result { _vislevel = 3; to = Option_enum (_ "Convert to") spaces (spaces.get_name dest); _result = map_unary (colour_transform_to to.value_thing) x; } Mono_item = class Menuaction (_ "_Monochrome") (_ "convert to mono colourspace") { action x = conv Image_type.B_W x; } sRGB_item = class Menuaction (_ "_sRGB") (_ "convert to sRGB colourspace") { action x = conv Image_type.sRGB x; } GREY16_item = class Menuaction (_ "_GREY16") (_ "convert to GREY16 colourspace") { action x = conv Image_type.GREY16 x; } RGB16_item = class Menuaction (_ "_RGB16") (_ "convert to RGB16 colourspace") { action x = conv Image_type.RGB16 x; } Lab_item = class Menuaction (_ "_Lab") (_ "convert to Lab colourspace (float Lab)") { action x = conv Image_type.LAB x; } LabQ_item = class Menuaction (_ "Lab_Q") (_ "convert to LabQ colourspace (32-bit Lab)") { action x = conv Image_type.LABQ x; } LabS_item = class Menuaction (_ "Lab_S") (_ "convert to LabS colourspace (48-bit Lab)") { action x = conv Image_type.LABS x; } LCh_item = class Menuaction (_ "L_Ch") (_ "convert to LCh colourspace") { action x = conv Image_type.LCH x; } XYZ_item = class Menuaction (_ "_XYZ") (_ "convert to XYZ colourspace") { action x = conv Image_type.XYZ x; } Yxy_item = class Menuaction (_ "_Yxy") (_ "convert to Yxy colourspace") { action x = conv Image_type.YXY x; } UCS_item = class Menuaction (_ "_UCS") (_ "convert to UCS colourspace") { action x = conv Image_type.UCS x; } } /* mark objects as being in various colourspaces */ Colour_tag_item = class Menupullright (_ "_Tag As") (_ "tag object as being in various colour spaces") { spaces = Image_type.image_colour_spaces; tag dest x = class _result { _vislevel = 3; to = Option_enum (_ "Tag as") spaces (spaces.get_name dest); _result = map_unary (image_set_type to.value_thing) x; } Mono_item = class Menuaction (_ "_Monochrome") (_ "tag as being in mono colourspace") { action x = tag Image_type.B_W x; } sRGB_item = class Menuaction (_ "_sRGB") (_ "tag as being in sRGB colourspace") { action x = tag Image_type.sRGB x; } RGB16_item = class Menuaction (_ "_RGB16") (_ "tag as being in RGB16 colourspace") { action x = tag Image_type.RGB16 x; } GREY16_item = class Menuaction (_ "_GREY16") (_ "tag as being in GREY16 colourspace") { action x = tag Image_type.GREY16 x; } Lab_item = class Menuaction (_ "_Lab") (_ "tag as being in Lab colourspace (float Lab)") { action x = tag Image_type.LAB x; } LabQ_item = class Menuaction (_ "Lab_Q") (_ "tag as being in LabQ colourspace (32-bit Lab)") { action x = tag Image_type.LABQ x; } LabS_item = class Menuaction (_ "Lab_S") (_ "tag as being in LabS colourspace (48-bit Lab)") { action x = tag Image_type.LABS x; } LCh_item = class Menuaction (_ "L_Ch") (_ "tag as being in LCh colourspace") { action x = tag Image_type.LCH x; } XYZ_item = class Menuaction (_ "_XYZ") (_ "tag as being in XYZ colourspace") { action x = tag Image_type.XYZ x; } Yxy_item = class Menuaction (_ "_Yxy") (_ "tag as being in Yxy colourspace") { action x = tag Image_type.YXY x; } UCS_item = class Menuaction (_ "_UCS") (_ "tag as being in UCS colourspace") { action x = tag Image_type.UCS x; } } Colour_temperature_item = class Menupullright (_ "Colour Te_mperature") (_ "colour temperature conversions") { Whitepoint_item = class Menuaction (_ "_Move Whitepoint") (_ "change whitepoint") { action x = class _result { _vislevel = 3; old_white = Option_enum (_ "Old whitepoint") Whitepoints "D65"; new_white = Option_enum (_ "New whitepoint") Whitepoints "D50"; _result = map_unary process x { process im = im''' { im' = colour_transform_to Image_type.XYZ im; im'' = im' * (new_white.value_thing / old_white.value_thing); im''' = colour_transform_to (get_type im) im''; } } } } D65_to_D50_item = class Menupullright (_ "D_65 to D50") (_ "complex conversion") { XYZ_minimal_item = class Menuaction (_ "_Minimal") (_ "D65 to D50 using the minimal 3x3 matrix in XYZ") { action x = map_unary process x { process im = im''' { im' = colour_transform_to Image_type.XYZ im; im'' = recomb D652D50_direct im'; im''' = colour_transform_to (get_type im) im''; } } } Bradford_item = class Menuaction (_ "_Bradford") (_ "D65 to D50 in Bradford cone space") { action x = map_unary process x { process im = im''' { im' = colour_transform_to Image_type.XYZ im; im'' = im_D652D50 im'; im''' = colour_transform_to (get_type im) im''; } } } } D50_to_D65_item = class Menupullright (_ "D_50 to D65") (_ "complex conversion") { XYZ_minimal_item = class Menuaction (_ "_Minimal") (_ "D50 to D65 using the minimal 3x3 matrix in XYZ") { action x = map_unary process x { process im = im''' { im' = colour_transform_to Image_type.XYZ im; im'' = recomb D502D65_direct im'; im''' = colour_transform_to (get_type im) im''; } } } Bradford_item = class Menuaction (_ "_Bradford") (_ "D60 to D65 in Bradford cone space") { action x = map_unary process x { process im = im''' { im' = colour_transform_to Image_type.XYZ im; im'' = im_D502D65 im'; im''' = colour_transform_to (get_type im) im''; } } } } Lab_to_D50XYZ_item = class Menuaction (_ "_Lab to D50 XYZ") (_ "Lab to XYZ with a D50 whitepoint") { action x = map_unary (colour_unary im_D50Lab2XYZ) x; } D50XYZ_to_Lab_item = class Menuaction (_ "D50 _XYZ to Lab") (_ "XYZ to Lab with a D50 whitepoint") { action x = map_unary (colour_unary im_D50XYZ2Lab) x; } } Colour_icc_item = class Menupullright (_ "_ICC") (_ "transform with ICC profiles") { print_profile = "$VIPSHOME/share/$PACKAGE/data/cmyk.icm"; monitor_profile = "$VIPSHOME/share/$PACKAGE/data/sRGB.icm"; guess_profile image = monitor_profile, has_bands image && get_bands image == 3 = print_profile; render_intents = Option_enum (_ "Render intent") Render_intent.names (_ "Absolute"); Export_item = class Menuaction (_ "_Export") (_ "export from PCS to device space") { action x = class _result { _vislevel = 3; profile = Pathname (_ "Output profile") print_profile; intent = render_intents; depth = Option (_ "Output depth") [_ "8 bit", _ "16 bit"] 0; _result = map_unary process x { process image = icc_export [8, 16]?depth profile.value intent.value_thing lab { lab = colour_transform_to Image_type.LABQ image; } } } } Import_item = class Menuaction (_ "_Import") (_ "import from device space to PCS") { action x = class _result { _vislevel = 3; embedded = Toggle (_ "Use embedded profile if possible") false; profile = Pathname (_ "Default input profile") (guess_profile x); intent = render_intents; _result = map_unary process x { process image = icc_import_embedded intent.value_thing image, get_header_type "icc-profile-data" image != 0 && embedded = icc_import profile.value intent.value_thing image; } } } Transform_item = class Menuaction (_ "_Transform") (_ "transform between two device spaces") { action x = class _result { _vislevel = 3; in_profile = Pathname (_ "Input profile") (guess_profile x); out_profile = Pathname (_ "Output profile") print_profile; intent = render_intents; _result = map_unary process x { process image = icc_transform in_profile.value out_profile.value intent.value_thing image; } } } AC2RC_item = class Menuaction (_ "_Absolute to Relative") (_ "absolute to relative colorimetry using device profile") { action x = class _result { _vislevel = 3; profile = Pathname (_ "Pick a profile") (guess_profile x); _result = map_unary process x { process image = icc_ac2rc profile.value lab { lab = colour_transform_to Image_type.LAB image; } } } } } Colour_rad_item = class Menupullright (_ "_Radiance") (_ "convert to and from Radiance packed format") { Unpack_item = class Menuaction (_ "Unpack") (_ "unpack Radiance format to float") { action x = map_unary rad2float x; } Pack_item = class Menuaction (_ "Pack") (_ "pack 3-band float to Radiance format") { action x = map_unary float2rad x; } } #separator Colour_dE_item = class Menupullright (_ "_Difference") (_ "calculate colour difference") { /* Apply a converter to an object ... convert image or colour (since * we can guess the colour space we're converting from), don't convert * matrix or vector (since we can't tell ... assume it's in the right * space already). */ apply_cvt cvt x = cvt x, is_Image x || is_Colour x || is_image x = x; diff cvt in1 in2 = abs_vec (apply_cvt cvt in1 - apply_cvt cvt in2); /* Converter to LAB. */ lab_cvt = colour_transform_to Image_type.LAB; /* Converter to UCS ... plain UCS is Ch form, so we go LAB again after * to make sure we get a rectangular coord system. */ ucs_cvt = colour_transform Image_type.LCH Image_type.LAB @ colour_transform_to Image_type.UCS; CIEdE76_item = class Menuaction (_ "CIE dE _76") (_ "calculate CIE dE 1976 for two objects") { action a b = map_binary (diff lab_cvt) a b; } CIEdE00_item = class Menuaction (_ "CIE dE _00") (_ "calculate CIE dE 2000 for two objects") { action a b = map_binary (colour_binary (_ "im_dE00_fromLab") im_dE00_fromLab) a b; } UCS_item = class Menuaction (_ "_CMC(l:l)") (_ "calculate CMC(l:l) for two objects") { action a b = map_binary (diff ucs_cvt) a b; } } Colour_adjust_item = class Menupullright (_ "_Adjust") (_ "alter colours in various ways") { Recombination_item = class Menuaction (_ "_Recombination") (_ "recombine colour with an editable matrix") { action x = class _result { _vislevel = 3; matrix = Matrix_rec (identity_matrix (bands x)) { // try to guess a sensible value for the size of the // matrix bands x = x.bands, is_Image x || is_Colour x = x.width, is_Matrix x = bands x.value?0, is_Group x = x.bands, has_member "bands" x = 3; } _result = map_unary (recomb matrix) x; } } Cast_item = class Menuaction (_ "_Cast") (_ "displace neutral axis in CIE Lab") { action x = class _result { _vislevel = 3; gr = Scale "Green-red" (-20) 20 0; by = Scale "Blue-yellow" (-20) 20 0; _result = map_unary adjust_cast x { adjust_cast in = colour_transform_to (get_type in) in'' { in' = colour_transform_to Image_type.LAB in; in'' = in' + Vector [0, gr.value, by.value]; } } } } HSB_item = class Menuaction (_ "_HSB") (_ "adjust hue-saturation-brightness in LCh") { action x = class _result { _vislevel = 3; h = Scale "Hue" 0 360 0; s = Scale "Saturation" 0.01 5 1; b = Scale "Brightness" 0.01 5 1; _result = map_unary adjust_hsb x { adjust_hsb in = colour_transform_to (get_type in) in'' { in' = colour_transform_to Image_type.LCH in; in'' = in' * Vector [b.value, s.value, 1] + Vector [0, 0, h.value]; } } } } } Colour_similar_item = class Menuaction (_ "_Similar Colour") (_ "find pixels with a similar colour") { action x = class _result { _vislevel = 3; target_colour = Colour_picker "Lab" [50, 0, 0]; t = Scale "dE threshold" 0 100 10; _result = map_unary match x { match in = abs_vec (in' - target) < t { target = colour_transform_to Image_type.LAB target_colour; in' = colour_transform_to Image_type.LAB in; } } } } #separator Colour_chart_to_matrix_item = class Menuaction (_ "_Measure Colour Chart") (_ "measure average pixel values for a colour chart image") { action x = class _result { _vislevel = 3; pacross = Expression (_ "Patches across chart") 6; pdown = Expression (_ "Patches down chart") 4; _result = map_unary chart x { chart in = measure 0 0 in.width in.height (to_real pacross) (to_real pdown) in; } } } Colour_matrix_to_chart_item = class Menuaction (_ "Make Synth_etic Colour Chart") (_ "make a colour chart image from a matrix of measurements") { action x = class _result { _vislevel = 3; pacross = Expression (_ "Patches across chart") 6; pdown = Expression (_ "Patches down chart") 4; pwidth = Expression (_ "Patch width in pixels") 50; pheight = Expression (_ "Patch height in pixels") 50; bwidth = Expression (_ "Border between patches") 0; _result = map_unary build_chart x { build_chart in = Image (imagearray_assemble (to_real bwidth) (to_real bwidth) patch_table) { // patch numbers for row starts rowstart = map (multiply (to_real pacross)) [0 .. to_real pdown - 1]; // assemble patches ... each one a pixel value patches = map (take (to_real pacross)) (map (converse drop in.value) rowstart); // make an n-band constant image from eg. [1,2,3] // we don't know the format .. use sRGB (well, why not?) patch v = image_new (to_real pwidth) (to_real pheight) (len v) Image_format.FLOAT Image_coding.NOCODING Image_type.sRGB (Vector v) 0 0; // make an image for each patch patch_table = map (map patch) patches; } } } } Colour_plot_ab_scatter_item = class Menuaction (_ "_Plot ab Scatter") (_ "plot an ab scatter histogram") { action x = class _result { _vislevel = 3; bins = Expression (_ "Number of bins on each axis") 8; _result = map_unary plot_scatter x { plot_scatter in = Image (bg * (((90 / mx) * hist) ++ blk)) { lab = colour_transform_to Image_type.LAB in.value; ab = (unsigned char) ((lab?1 ++ lab?2) + 128); hist = hist_find_nD bins.expr ab; mx = max hist; bg = lab_slice bins.expr 1; blk = 1 + im_black (to_real bins) (to_real bins) 2; } } } } nip2-8.7.0/share/nip2/compat/7.26/_joe_extra.def0000644000175000017500000003017513224651032015753 00000000000000//////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// Frame_item = class Menupullright "Picture _Frame" "working with images of frames" { //////////////////////////////////////////////////////////////////////////////////// Build_frame_item = class Menupullright "_Build Frame From" "builds a new frame from image a and places it around image b" { //////////////////////////////////////////////////////////////////////////////////// Frame_corner_item = class Menuaction "_Frame Corner" "copies and extends a frame corner, a, to produce a complete frame to fit round a given image, b" { prefs = Workspaces.Preferences; action a b = class _result { _check_args = [ [a, "a", check_Image], [b, "b", check_Image] ]; _check_all = [ [a.coding == b.coding && a.bands == b.bands, "a.coding == b.coding && a.bands == b.bands"] ]; _vislevel = 3; ppcm = Expression "Number of pixels per cm" 25; /* Given the value of ppcm, distance between the inner edge of the frame * and the outer edge of the image. +ve values mean the frame overlaps * the image. */ overlap = Expression "Size of frame overlap in cm" 0; variables = Frame_variables 0; _type = Image_type.colour_spaces.get_name b.type; //If applied the count colour be seen for -ve values of overlap mount_options = Mount_options _type ppcm.expr; _cs = variables.corner_section.value; _ms = variables.middle_section.value; _ov = ppcm.expr * overlap.expr; _sf = variables.scale_factor.expr; _bf = variables.blend_fraction.value; //Scale frame image if required. _a = a, _sf == 1; = a, _sf == 0; = Image (resize Interpolate_bilinear _sf _sf a.value); _im_w = b.width; _im_h = b.height + mount_options._los, mount_options.apply = b.height; _os = mount_options._los, mount_options.apply = 0; _cl = Vector mount_options.mount_colour.value, mount_options.apply = 0; //Produce scaled and resized frame. frame = corner_frame _a _im_w _im_h _ov _cs _ms _bf; //Resize image canvas and applied mount colour as required. _pos_im = frame_position_image b frame _os _cl; //Wrap frame round image. _result = if (frame == 0) then _pos_im else frame; } } //////////////////////////////////////////////////////////////////////////////////// Simple_frame_item = class Menuaction "_Simple Frame" "extends or shortens the central sections of a simple frame, a, to fit round a given image, b" { prefs = Workspaces.Preferences; action a b = class _result { _check_args = [ [a, "a", check_Image], [b, "b", check_Image] ]; _check_all = [ [a.coding == b.coding && a.bands == b.bands, "a.coding == b.coding && a.bands == b.bands"] ]; _vislevel = 3; ppcm = Expression "Number of pixels per cm" 25; /* Given the value of ppcm, distance between the inner edge of the frame * and the outer edge of the image. +ve values mean the frame overlaps * the image. */ overlap = Expression "Size of frame overlap in cm" 0; variables = Frame_variables 0; _type = Image_type.colour_spaces.get_name b.type; //If applied the count colour be seen for -ve values of overlap mount_options = Mount_options _type ppcm.expr; _cs = variables.corner_section.value; _ms = variables.middle_section.value; _ov = ppcm.expr * overlap.expr; _sf = variables.scale_factor.expr; _bf = variables.blend_fraction.value; //Scale frame image if required. _a = a, _sf == 1; = a, _sf == 0; = Image (resize Interpolate_bilinear _sf _sf a.value); _im_w = b.width; _im_h = b.height + mount_options._los, mount_options.apply = b.height; _os = mount_options._los, mount_options.apply = 0; _cl = Vector mount_options.mount_colour.value, mount_options.apply = 0; //Produce scaled and resized frame. frame = simple_frame _a _im_w _im_h _ov _cs _ms _bf variables.option; //Resize image canvas and applied mount colour as required. _pos_im = frame_position_image b frame _os _cl; //Wrap frame round image. _result = if (frame == 0) then _pos_im else frame; } } //////////////////////////////////////////////////////////////////////////////////// Complex_frame_item = class Menuaction "_Complex Frame" "extends or shortens the central sections of a frame a, preserving any central edge details, to fit image b" { prefs = Workspaces.Preferences; action a b = class _result { _check_args = [ [a, "a", check_Image], [b, "b", check_Image] ]; _check_all = [ [a.coding == b.coding && a.bands == b.bands, "a.coding == b.coding && a.bands == b.bands"] ]; _vislevel = 3; ppcm = Expression "Number of pixels per cm" 25; /* Given the value of ppcm, distance between the inner edge of the frame * and the outer edge of the image. +ve values mean the frame overlaps * the image. */ overlap = Expression "Size of frame overlap in cm" 0; variables = Frame_variables 1; _type = Image_type.colour_spaces.get_name b.type; //If applied the count colour be seen for -ve values of overlap mount_options = Mount_options _type ppcm.expr; _cs = variables.corner_section.value; _es = variables.edge_section.value; _ms = variables.middle_section.value; _ov = ppcm.expr * overlap.expr; _sf = variables.scale_factor.expr; _bf = variables.blend_fraction.value; _a = a, _sf == 1; = a, _sf == 0; = Image (resize Interpolate_bilinear _sf _sf a.value); _im_w = b.width; _im_h = b.height + mount_options._los, mount_options.apply = b.height; _os = mount_options._los, mount_options.apply = 0; _cl = Vector mount_options.colour.value, mount_options.apply = 0; //Produce scaled and resized frame. frame = complex_frame _a _im_w _im_h _ov _cs _es _ms _bf variables.option; //Resize image canvas and applied mount colour as required. _pos_im = frame_position_image b frame _os _cl; //Wrap frame round image. _result = if (frame == 0) then _pos_im else frame; } } } //////////////////////////////////////////////////////////////////////////////////// Straighten_frame_item = class Menuaction "_Straighten Frame" "uses four points to square up distorted images of frames" { action a = Perspective_item.action a; } }; //////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// Select_item = class Menupullright "_Select" "select user defined areas of an image" { prefs = Workspaces.Preferences; /* Option toggle used to define whether the user is replacing a * dark or a light area. */ _control = Option "Make" [ "Selection Brighter", "Selection Darker", "Selection Black", "Selection White", "Background Black", "Background White", "Mask" ] 4; control_selection mask im no = [ if mask then im * 1.2 else im * 1, if mask then im * 0.8 else im * 1, if mask then 0 else im, if mask then 255 else im, if mask then im else 0, if mask then im else 255, mask ]?no; Rectangle = class Menuaction "_Rectangle" "use line/arrow/rect x to define a rectangle" { action x = class _result { _vislevel = 3; control = _control; _result = control_selection mask im control { mask = select_rect x; im = get_image x; select_rect x = Image mask { im = Image (get_image x); imc = make_xy im.width im.height; mask = imc?0 >= x.nleft & imc?0 < x.nright & imc?1 >= x.ntop & imc?1 < x.nbottom; } } } } Elipse = class Menuaction "_Ellipse" "use a line/arrow x to define the center point radius and direction of an ellipse" { action x = class _result { _vislevel = 3; control = _control; width = Scale "Width" 0.01 1 0.5; _result = control_selection mask im control { mask = select_ellipse x width.value; im = x.image; } } } Tetragon = class Menuaction "_Tetragon" "selects the convex area defined by four points" { action a b c d = class _result { _vislevel = 3; control = _control; _result = control_selection mask im control { mask = select_tetragon a b c d; im = get_image a; } } } Polygon = class Menuaction "_Polygon" "selects a polygon from an ordered group of points" { action pt_list = class _result { _vislevel = 3; control = _control; _result = control_selection mask im control { mask = select_polygon pt_list; im = get_image ((pt_list.value)?0); } } } sep1 = Menuseparator; Threshold_item = class Menuaction "Thres_hold" "simple image threshold" { action x = class _result { _vislevel = 3; t = Scale "Threshold" 0 mx (mx / 2) { mx = Image_format.maxval x.format, is_Image x = 255; } _result = map_unary (more t.value) x; } } Threshold_percent_item = class Menuaction "Per_cent Threshold" "threshold at a percentage of pixels" { action x = class _result { _vislevel = 3; t = Scale "Percentage of pixels" 0 100 50; _result = map_unary (more (hist_thresh (t.value / 100) x)) x; } } }; //////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// Perspective_match_item = class Menuaction "_Perspective Match" "rotate, scale and skew one image to match another" { action x y = class _result { _vislevel = 3; // try to find an image ... for a group, get the first item find_image x = x, is_Image x = find_image x?0, is_list x = find_image x.value, is_class x && has_value x = error "unable to find image"; _a = find_image x; _b = find_image y; ap1 = Mark_relative _a 0.1 0.1; ap2 = Mark_relative _a 0.9 0.1; ap3 = Mark_relative _a 0.1 0.9; ap4 = Mark_relative _a 0.9 0.9; bp1 = Mark_relative _b 0.1 0.1; bp2 = Mark_relative _b 0.9 0.1; bp3 = Mark_relative _b 0.1 0.9; bp4 = Mark_relative _b 0.9 0.9; _result = map_binary process x y { f1 = _a.width / _b.width; f2 = _a.height / _b.height; rl = sort_pts_clockwise [ap1, ap2, ap3, ap4]; pl = sort_pts_clockwise [bp1, bp2, bp3, bp4]; to = [ rl?0.left, rl?0.top, rl?1.left, rl?1.top, rl?2.left, rl?2.top, rl?3.left, rl?3.top ]; from = [ pl?0.left * f1, pl?0.top * f2, pl?1.left * f1, pl?1.top * f2, pl?2.left * f1, pl?2.top * f2, pl?3.left * f1, pl?3.top * f2 ]; trans = perspective_transform to from; process a b = transform 1 0 trans b2 { b2 = resize Interpolate_bilinear f1 f2 b, (f1 >= 1 && f2 >= 1) || (f1 >= 1 && f2 >= 1) = resize Interpolate_bilinear f1 1 b1 {b1 = resize Interpolate_bilinear 1 f2 b;} } } } }; //////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// Perspective_item = class Menuaction "Pe_rspective Distort" "rotate, scale and skew an image with respect to defined points" { action x = class _result { _vislevel = 3; // try to find an image ... for a group, get the first item find_image x = x, is_Image x = find_image x?0, is_list x = find_image x.value, is_class x && has_value x = error "unable to find image"; _a = find_image x; dir = Option "Select distort direction" [ "Distort to points", "Distort to corners" ] 1; ap1 = Mark_relative _a 0.1 0.1; ap2 = Mark_relative _a 0.9 0.1; ap3 = Mark_relative _a 0.9 0.9; ap4 = Mark_relative _a 0.1 0.9; _result = map_unary process x { trans = [perspective_transform to from, perspective_transform from to]?(dir.value) { rl = sort_pts_clockwise [ap1, ap2, ap3, ap4]; to = [(rl?0).left, (rl?0).top, (rl?1).left, (rl?1).top, (rl?2).left, (rl?2).top, (rl?3).left, (rl?3).top]; from=[0, 0, (_a.width - 1), 0, (_a.width - 1), (_a.height - 1), 0, (_a.height - 1)]; } process a = transform 1 0 trans a; } } }; nip2-8.7.0/share/nip2/compat/7.26/_generate.def0000644000175000017500000000470713224651032015567 00000000000000 /* make an image of size x by y whose pixels are their coordinates. */ make_xy x y = im_make_xy (to_real x) (to_real y); /* make an image with the specified properties ... pixel is (eg.) * Vector [0, 0, 0], or 12. If coding == labq, we ignore bands, format and * type, generate a 3 band float image, and lab2labq it before handing it * back. */ image_new w h b fmt coding type pixel xoff yoff = embed 1 0 0 w h im'''' { b' = 3, coding == Image_coding.LABPACK = b; fmt' = Image_format.FLOAT, coding == Image_coding.LABPACK = fmt; type' = Image_type.LAB, coding == Image_coding.LABPACK = type; im = im_black 1 1 (to_real b') + pixel; im' = clip2fmt fmt' im; im'' = im_Lab2LabQ im', coding == Image_coding.LABPACK; = im'; im''' = image_set_type type' im''; im'''' = image_set_origin xoff yoff im'''; } /* generate a slice of LAB space size x size pixels for L* == l */ lab_slice size l = image_set_type Image_type.LAB im { L = image_new size size 1 Image_format.FLOAT Image_coding.NOCODING Image_type.B_W l 0 0; A1 = im_fgrey (to_real size) (to_real size); /* im_fgrey always makes 0-1, so these ranges can be wired in. */ A2 = A1 * 256 - 128; A4 = im_rot90 A2; im = image_set_origin (size / 2) (size / 2) (L ++ A2 ++ A4); } /* Look at Image, try to make a Colour (failing that, a Vector) which is white * for that image type. */ image_white im = colour_transform_to type white_lab, bands == 3 && coding == Image_coding.NOCODING && colour_spaces.present 1 type = white_lab, coding == Image_coding.LABPACK = Vector (replicate bands (max_value.lookup 1 0 format)) { bands = im.bands; type = im.type; format = im.format; coding = im.coding; colour_spaces = Image_type.colour_spaces; // white as LAB white_lab = Colour "Lab" [100, 0, 0]; // maximum value for this numeric type max_value = Table [ [255, Image_format.DPCOMPLEX], [255, Image_format.DOUBLE], [255, Image_format.COMPLEX], [255, Image_format.FLOAT], [2 ** 31 - 1, Image_format.INT], [2 ** 32 - 1, Image_format.UINT], [2 ** 15 - 1, Image_format.SHORT], [2 ** 16 - 1, Image_format.USHORT], [2 ** 7 - 1, Image_format.CHAR], [2 ** 8 - 1, Image_format.UCHAR] ]; } /* Make a seperable gaussian mask. */ matrix_gaussian_blur radius = im_gauss_imask_sep (radius / 3) 0.2; /* Make a seperable square mask. */ matrix_blur radius = Matrix_con (sum mask_sq_line) 0 [mask_sq_line] { mask_sq_line = replicate (2 * radius - 1) 1; } nip2-8.7.0/share/nip2/compat/7.26/Math.def0000644000175000017500000003157713224651032014534 00000000000000Math_arithmetic_item = class Menupullright "_Arithmetic" "basic arithmetic for objects" { Add_item = class Menuaction "_Add" "add a and b" { action a b = map_binary add a b; } Subtract_item = class Menuaction "_Subtract" "subtract b from a" { action a b = map_binary subtract a b; } Multiply_item = class Menuaction "_Multiply" "multiply a by b" { action a b = map_binary multiply a b; } Divide_item = class Menuaction "_Divide" "divide a by b" { action a b = map_binary divide a b; } Remainder_item = class Menuaction "_Remainder" "remainder after integer division of a by b" { action a b = map_binary remainder a b; } sep1 = Menuseparator; Absolute_value_item = class Menuaction "A_bsolute Value" "absolute value of x" { action x = map_unary abs x; } Absolute_value_vector_item = class Menuaction "Absolute Value _Vector" "like Absolute Value, but treat pixels as vectors" { action x = map_unary abs_vec x; } Sign_item = class Menuaction "S_ign" "unit vector" { action x = map_unary sign x; } Negate_item = class Menuaction "_Negate" "multiply by -1" { action x = map_unary unary_minus x; } } Math_trig_item = class Menupullright "_Trigonometry" "trigonometry operations (all in degrees)" { Sin_item = class Menuaction "_Sine" "calculate sine x" { action x = map_unary sin x; } Cos_item = class Menuaction "_Cosine" "calculate cosine x" { action x = map_unary cos x; } Tan_item = class Menuaction "_Tangent" "calculate tangent x" { action x = map_unary tan x; } sep1 = Menuseparator; Asin_item = class Menuaction "Arc S_ine" "calculate arc sine x" { action x = map_unary asin x; } Acos_item = class Menuaction "Arc C_osine" "calculate arc cosine x" { action x = map_unary acos x; } Atan_item = class Menuaction "Arc T_angent" "calculate arc tangent x" { action x = map_unary atan x; } sep2 = Menuseparator; Rad_item = class Menuaction "_Degrees to Radians" "convert degrees to radians" { action x = map_unary rad x; } Deg_item = class Menuaction "_Radians to Degrees" "convert radians to degrees" { action x = map_unary deg x; } sep3 = Menuseparator; Angle_range_item = class Menuaction "Angle i_n Range" "is angle within t degrees of r, mod 360" { action t r angle = clock (max - angle) < 2*r { max = clock (t + r); clock a = a + 360, a < 0; = a - 360, a >= 360; = a; } } } Math_log_item = class Menupullright "_Log" "logarithms and anti-logs" { Exponential_item = class Menuaction "_Exponential" "calculate e ** x" { action x = map_unary (power e) x; } Log_natural_item = class Menuaction "Natural _Log" "log base e of x" { action x = map_unary log x; } sep1 = Menuseparator; Exponential10_item = class Menuaction "E_xponential base 10" "calculate 10 ** x" { action x = map_unary (power 10) x; } Log10_item = class Menuaction "L_og Base 10" "log base 10 of x" { action x = map_unary log10 x; } sep2 = Menuseparator; Raise_to_power_item = class Menuaction "_Raise to Power" "calculate x ** y" { action x y = map_binary power x y; } } Math_complex_item = class Menupullright "_Complex" "operations on complex numbers and images" { Complex_extract = class Menupullright "_Extract" "extract fields from complex" { Real_item = class Menuaction "_Real" "extract real part of complex" { action in = map_unary re in; } Imaginary_item = class Menuaction "_Imaginary" "extract imaginary part of complex" { action in = map_unary im in; } } Complex_build_item = class Menuaction "_Build" "join a and b to make a complex" { action a b = map_binary comma a b; } sep1 = Menuseparator; Polar_item = class Menuaction "_Polar" "convert real and imag to amplitude and phase" { action a = map_unary polar a; } Rectangular_item = class Menuaction "_Rectagular" ("convert (amplitude, phase) image to rectangular " ++ "coordinates") { action x = map_unary rectangular x; } sep2 = Menuseparator; Conjugate_item = class Menuaction "_Conjugate" "invert imaginary part" { action x = map_unary conj x; } } Math_boolean_item = class Menupullright "_Boolean" "bitwise boolean operations for integer objects" { And_item = class Menuaction "_And" "bitwise and of a and b" { action a b = map_binary bitwise_and a b; } Or_item = class Menuaction "_Or" "bitwise or of a and b" { action a b = map_binary bitwise_or a b; } Eor_item = class Menuaction "E_xclusive Or" "bitwise exclusive or of a and b" { action a b = map_binary eor a b; } Not_item = class Menuaction "_Not" "invert a" { action a = map_unary not a; } sep1 = Menuseparator; Right_shift_item = class Menuaction "Shift _Right" "shift a right by b bits" { action a b = map_binary right_shift a b; } Left_shift_item = class Menuaction "Shift _Left" "shift a left by b bits" { action a b = map_binary left_shift a b; } sep2 = Menuseparator; If_then_else_item = class Menuaction "_If Then Else" "b where a is non-zero, c elsewhere" { action a b c = map_trinary ite a b c { // can't use if_then_else, we need a true trinary ite a b c = if a then b else c; } } Band_or_item = class Menuaction "Band O_r" "or the bands of an image together" { action im = map_unary (foldr1 bitwise_or @ bandsplit) im; } Band_and_item = class Menuaction "Band A_nd" "and the bands of an image together" { action im = map_unary (foldr1 bitwise_and @ bandsplit) im; } } Math_relational_item = class Menupullright "R_elational" "comparison operations" { Equal_item = class Menuaction "_Equal to" "test a equal to b" { action a b = map_binary equal a b; } Not_equal_item = class Menuaction "_Not Equal to" "test a not equal to b" { action a b = map_binary not_equal a b; } sep1 = Menuseparator; More_item = class Menuaction "_More Than" "test a strictly greater than b" { action a b = map_binary more a b; } Less_item = class Menuaction "_Less Than" "test a strictly less than b" { action a b = map_binary less a b; } sep2 = Menuseparator; More_equal_item = class Menuaction "M_ore Than or Equal to" "test a greater than or equal to b" { action a b = map_binary more_equal a b; } Less_equal_item = class Menuaction "L_ess Than or Equal to" "test a less than or equal to b" { action a b = map_binary less_equal a b; } } Math_list_item = class Menupullright "L_ist" "operations on lists" { Head_item = class Menuaction "_Head" "first element in list" { action x = map_unary hd x; } Tail_item = class Menuaction "_Tail" "list without the first element" { action x = map_unary tl x; } Last_item = class Menuaction "_Last" "last element in list" { action x = map_unary last x; } Init_item = class Menuaction "_Init" "list without the last element" { action x = map_unary init x; } sep1 = Menuseparator; Reverse_item = class Menuaction "_Reverse" "reverse order of elements in list" { action x = map_unary reverse x; } Sort_item = class Menuaction "_Sort" "sort list into ascending order" { action x = map_unary sort x; } Make_set_item = class Menuaction "_Make Set" "remove duplicates from list" { action x = map_unary mkset equal x; } Transpose_list_item = class Menuaction "Tr_anspose" "exchange rows and columns in a list of lists" { action x = map_unary transpose x; } Concat_item = class Menuaction "_Concat" "flatten a list of lists into a single list" { action l = map_unary concat l; } sep2 = Menuseparator; Length_item = class Menuaction "L_ength" "find the length of list" { action x = map_unary len x; } Subscript_item = class Menuaction "S_ubscript" "return element n from list (index from zero)" { action n x = map_binary subscript n x; } Take_item = class Menuaction "_Take" "take the first n elements of list x" { action n x = map_binary take n x; } Drop_item = class Menuaction "_Drop" "drop the first n elements of list x" { action n x = map_binary drop n x; } sep3 = Menuseparator; Join_item = class Menuaction "_Join" "join two lists end to end" { action a b = map_binary join a b; } Difference_item = class Menuaction "_Difference" "difference of two lists" { action a b = map_binary difference a b; } Cons_item = class Menuaction "C_ons" "put element a on the front of list x" { action a x = map_binary cons a x; } Zip_item = class Menuaction "_Zip" "join two lists, pairwise" { action a b = map_binary zip2 a b; } } Math_round_item = class Menupullright "_Round" "various rounding operations" { /* smallest integral value not less than x */ Ceil_item = class Menuaction "_Ceil" "smallest integral value not less than x" { action x = map_unary ceil x; } Floor_item = class Menuaction "_Floor" "largest integral value not greater than x" { action x = map_unary floor x; } Rint_item = class Menuaction "_Round to Nearest" "round to nearest integer" { action x = map_unary rint x; } } Math_fourier_item = class Menupullright "_Fourier" "Fourier transform" { Forward_item = class Menuaction "_Forward" "fourier transform of image" { action a = map_unary (rotquad @ fwfft) a; } Reverse_item = class Menuaction "_Reverse" "inverse fourier transform of image" { action a = map_unary (invfft @ rotquad) a; } Rotate_quadrants_item = class Menuaction "Rotate _Quadrants" "rotate quadrants" { action a = map_unary rotquad a; } } Math_stats_item = class Menupullright "_Statistics" "measure various statistics of objects" { Value_item = class Menuaction "_Value" "value of point in object" { action a = class _result { _vislevel = 3; position = Expression "Coordinate" (0, 0); _result = map_binary point position.expr a; } } Mean_item = class Menuaction "_Mean" "arithmetic mean value" { action a = map_unary mean a; } Gmean_item = class Menuaction "_Geometric Mean" "geometric mean value" { action a = map_unary meang a; } Zmean_item = class Menuaction "_Zero-excluding Mean" "mean value of non-zero elements" { action a = map_unary meanze a; } Deviation_item = class Menuaction "_Standard Deviation" "standard deviation of object" { action a = map_unary deviation a; } Zdeviation_item = class Menuaction "Z_ero-excluding Standard Deviation" "standard deviation of non-zero elements" { action a = map_unary deviationze a; } Stats_item = class Menuaction "Ma_ny Stats" "calculate many stats in a single pass" { action a = map_unary stats a; } sep1 = Menuseparator; Max_item = class Menuaction "M_aximum" "maximum of object" { action a = map_unary max a; } Min_item = class Menuaction "M_inimum" "minimum of object" { action a = map_unary min a; } Maxpos_item = class Menuaction "_Position of Maximum" "position of maximum in object" { action a = map_unary maxpos a; } Minpos_item = class Menuaction "P_osition of Minimum" "position of minimum in object" { action a = map_unary minpos a; } Gravity_item = class Menuaction "Centre of _Gravity" "position of centre of gravity of histogram" { action a = map_unary gravity a; } sep2 = Menuseparator; Count_set_item = class Menuaction "_Non-zeros" "number of non-zero elements in object" { action a = map_unary cset a { cset i = (mean (i != 0) * i.width * i.height) / 255; } } Count_clear_item = class Menuaction "_Zeros" "number of zero elements in object" { action a = map_unary cclear a { cclear i = (mean (i == 0) * i.width * i.height) / 255; } } Count_edges_item = class Menuaction "_Edges" "count average edges across or down image" { action x = class _result { _vislevel = 3; edge = Option "Count" [ "Horizontal lines", "Vertical lines" ] 0; _result = map_unary process x { process image = Number (edge.labels?edge) (im_cntlines image.value edge.value); } } } sep3 = Menuseparator; Linear_regression_item = class Menuaction "_Linear Regression" "fit a line to a set of points" { action xes yes = linreg xes yes; } Weighted_linear_regression_item = class Menuaction "_Weighted Linear Regression" "fit a line to a set of points and deviations" { action xes yes devs = linregw xes yes devs; } Cluster_item = class Menuaction "_Cluster" "cluster a list of numbers" { action l = class { _vislevel = 3; thresh = Expression "Threshold" 10; [_r, _w] = cluster thresh.expr l; result = _r; weights = _w; } } } Math_base_item = class Menupullright "Bas_e" "convert number bases" { Hexadecimal_item = class Menuaction "_Hexadecimal" "convert to hexadecimal (base 16)" { action a = map_unary (print_base 16) a; } Binary_item = class Menuaction "_Binary" "convert to binary (base 2)" { action a = map_unary (print_base 2) a; } Octal_item = class Menuaction "_Octal" "convert to octal (base 8)" { action a = map_unary (print_base 8) a; } } nip2-8.7.0/share/nip2/compat/7.26/Tasks.def0000644000175000017500000006321313224651032014720 00000000000000Tasks_capture_item = class Menupullright "_Capture" "useful stuff for capturing and preprocessing images" { Csv_import_item = class Menuaction "_CSV Import" "read a file of comma-separated values" { action = class _result { _vislevel = 3; path = Pathname "File to load" "empty"; start_line = Expression "Start at line" 1; rows = Expression "Lines to read (-1 for whole file)" (-1); whitespace = String "Whitespace characters" " \""; separator = String "Separator characters" ",;\t"; _result = Image blank, path.value == "empty" = Image (im_csv2vips filename) { filename = search (expand path.value) ++ ":" ++ "skip:" ++ print (start_line.expr - 1) ++ "," ++ "whi:" ++ escape whitespace.value ++ "," ++ "sep:" ++ escape separator.value ++ "," ++ "line:" ++ print rows.expr; // prefix any ',' with a '\' in the separators line escape x = foldr prefix [] x { prefix x l = '\\' : x : l, x == ',' = x : l; } blank = image_new 1 1 1 Image_format.DOUBLE Image_coding.NOCODING Image_type.B_W 0 0 0; } } } Raw_import_item = class Menuaction "_Raw Import" "read a file of binary values" { action = class _result { _vislevel = 3; path = Pathname "File to load" "empty"; across = Expression "Pixels across" 100; down = Expression "Pixels down" 100; bytes = Expression "Bytes per pixel" 3; skip = Expression "Skip over initial bytes" 0; _result = Image blank, path.value == "empty" = Image (im_binfile path.value across.expr down.expr bytes.expr skip.expr) { blank = image_new 1 1 1 Image_format.DOUBLE Image_coding.NOCODING Image_type.B_W 0 0 0; } } } // interpret Analyze header for layout and calibration Analyze7_header_item = class Menuaction "_Interpret Analyze 7 Header" "examine the Analyze header and set layout and value" { action x = x''' { // read bits of header dim n = get_header ("dsr-image_dimension.dim[" ++ print n ++ "]"); dim0 = dim 0 x; dim1 = dim 1 x; dim2 = dim 2 x; dim3 = dim 3 x; dim4 = dim 4 x; dim5 = dim 5 x; dim6 = dim 6 x; dim7 = dim 7 x; glmax = get_header "dsr-image_dimension.glmax" x; cal_max = get_header "dsr-image_dimension.cal_max" x; // oops, now a nop x' = x; // lay out higher dimensions width-ways x'' = grid dim2 dim3 1 x', dim0 == 3 = grid dim2 dim3 dim4 x', dim0 == 4 = grid (dim2 * dim4) dim5 1 (grid dim2 dim3 dim4) x', dim0 == 5 = grid (dim2 * dim4) dim5 dim6 (grid dim2 dim3 dim4) x', dim0 == 6 = grid (dim2 * dim4 * dim6) dim7 1 (grid (dim2 * dim4) dim5 dim6 (grid dim2 dim3 dim4)) x', dim0 == 7 = error (_ "unsupported dimension " ++ dim0); // multiply by scale factor to get kBeq x''' = x'' * (cal_max / glmax); } } Video_item = class Menuaction "Capture _Video Frame" "capture a frame of still video" { // shortcut to prefs prefs = Workspaces.Preferences; action = class _result { _vislevel = 3; device = prefs.VIDEO_DEVICE; channel = Option "Input channel" [ "TV", "Composite 1", "Composite 2", "Composite 3" ] prefs.VIDEO_CHANNEL; b = Scale "Brightness" 0 32767 prefs.VIDEO_BRIGHTNESS; col = Scale "Colour" 0 32767 prefs.VIDEO_COLOUR; con = Scale "Contrast" 0 32767 prefs.VIDEO_CONTRAST; hue = Scale "Hue" 0 32767 prefs.VIDEO_HUE; frames = Scale "Frames to average" 0 100 prefs.VIDEO_FRAMES; mono = Toggle "Monochrome grab" prefs.VIDEO_MONO; crop = Toggle "Crop image" prefs.VIDEO_CROP; // grab, but hide it ... if we let the crop edit _raw_grab = Image (im_video_v4l1 device channel.value b.value col.value con.value hue.value frames.value); edit_crop = Region _raw_grab left top width height { left = prefs.VIDEO_CROP_LEFT; top = prefs.VIDEO_CROP_TOP; width = min_pair prefs.VIDEO_CROP_WIDTH (_raw_grab.width + left); height = min_pair prefs.VIDEO_CROP_HEIGHT (_raw_grab.height + top); } aspect_ratio = Expression "Stretch vertically by" prefs.VIDEO_ASPECT; _result = frame' { frame = edit_crop, crop = _raw_grab; frame' = colour_transform_to Image_type.B_W frame, mono = frame; } } } Smooth_image_item = class Menuaction "_Smooth" "remove small features from image" { action in = class _result { _vislevel = 3; feature = Scale "Minimum feature size" 1 50 20; _result = map_unary (smooth feature.value) in; } } Light_correct_item = class Menuaction "_Flatfield" "use white image w to flatfield image i" { action w i = map_binary wc w i { wc w i = clip2fmt i.format (w' * i) { fac = mean w / max w; w' = fac * (max w / w); } } } Image_rank_item = Filter_rank_item.Image_rank_item; Tilt_item = Filter_tilt_item; sep1 = Menuseparator; White_balance_item = class Menuaction "_White Balance" "use average of small image to set white of large image" { action a b = class _result { _vislevel = 3; white_hint = "Set image white to:"; white = Colour_picker "Lab" [100, 0, 0]; _result = map_binary wb a b { wb a b = colour_transform_to (get_type image) image_xyz' { area x = x.width * x.height; larger x y = area x > area y; [image, patch] = sortc larger [a, b]; to_xyz = colour_transform_to Image_type.XYZ; // white balance in XYZ patch_xyz = to_colour (to_xyz patch); white_xyz = to_xyz white; facs = (mean patch_xyz / mean white_xyz) * (white_xyz / patch_xyz); image_xyz = to_xyz image; image_xyz' = image_xyz * facs; } } } } Gamma_item = Image_levels_item.Gamma_item; Tone_item = Image_levels_item.Tone_item; sep2 = Menuseparator; Crop_item = Image_crop_item; Rotate_item = Image_transform_item.Rotate_item; Flip_item = Image_transform_item.Flip_item; Resize_item = Image_transform_item.Resize_item; Rubber_item = Image_transform_item.Image_rubber_item; sep3 = Menuseparator; ICC_item = Colour_icc_item; Temp_item = Colour_temperature_item; Find_calib_item = class Menuaction "Find _Colour Calibration" "find an RGB -> XYZ transform from an image of a colour chart" { action image = class _result { _check_args = [ [image, "image", check_Image] ]; _vislevel = 3; // get macbeth data file to use macbeth = Pathname "Pick a Macbeth data file" "$VIPSHOME/share/$PACKAGE/data/macbeth_lab_d65.mat"; mode = Option "Input LUT" [ "Linear input", "Fit intercept from chart greyscale", "Linearize input from chart greyscale" ] 2; // get max of input image _max_value = Image_format.maxval image.format; // measure chart image _camera = measure 0 0 image.width image.height 6 4 image.value; // load true values _true_Lab = Matrix_file macbeth.value; _true_XYZ = colour_transform Image_type.LAB Image_type.XYZ _true_Lab; // get Ys of greyscale _true_grey_Y = map (extract 1) (drop 18 _true_XYZ.value); // camera greyscale (all bands) _camera_grey = drop 18 _camera.value; // normalise both to 0-1 and combine _camera_grey' = map (map (multiply (1 / _max_value))) _camera_grey; _true_grey_Y' = map (multiply (1 / 100)) _true_grey_Y; _comb = Matrix [[0, 0], [1, 1]], mode == 0 = Matrix [0: intercepts, replicate (_camera.width + 1) 1], mode == 1 = Matrix (map2 cons _true_grey_Y' _camera_grey') { intercepts = [(linreg _true_grey_Y' cam).intercept :: cam <- transpose _camera_grey']; } // make a linearising lut ... zero on left _linear_lut = im_invertlut _comb (_max_value + 1); // and display it // plot from 0 explicitly so we see the effect of mode1 (intercept // from greyscale) linearising_lut = Plot [$ymin => 0] _linear_lut; // map the original image through the lineariser to // get linear 0-1 RGB image _image' = hist_map linearising_lut.value image.value; // remeasure and solve for RGB -> XYZ _camera' = im_measure _image' 0 0 image.width image.height 6 4; _pinv = (transpose _camera' * _camera') ** -1; M = transpose (_pinv * transpose _camera' * _true_XYZ); // convert linear RGB camera to Lab _result = (Image @ colour_transform Image_type.XYZ Image_type.LAB @ cast_float @ recomb M) _image'; // measure again and compute dE76 _camera'' = im_measure _result.value 0 0 image.width image.height 6 4; _dEs = map abs_vec (_camera'' - _true_Lab).value; final_dE76 = mean _dEs; _max_dE = foldr max_pair 0 _dEs; _worst = index (equal _max_dE) _dEs; worst_patch = name _worst ++ " (patch " ++ print (_worst + 1) ++ ", " ++ print _max_dE ++ " dE)" { name i = macbeth_names?i, i >= 0 && i < len macbeth_names = "Unknown"; } } } Apply_calib_item = class Menuaction "_Apply Colour Calibration" "apply an RGB -> LAB transform to an image" { action a b = class (map_binary process a b) { process a b = result, is_instanceof calib_name calib && is_Image image = error (_ "bad arguments to " ++ "Calibrate_image") { // the name of the calib object we need calib_name = "Tasks_capture_item.Find_calib_item.action"; // get the Calibrate_chart arg first [image, calib] = sortc (const (is_instanceof calib_name)) [a, b]; // map the original image through the lineariser to get // linear 0-1 RGB image image' = hist_map calib.linearising_lut image; // convert linear RGB camera to Lab result = colour_transform Image_type.XYZ Image_type.LAB ((float) (recomb calib.M image')); } } } sep4 = Menuseparator; Graph_hist_item = Hist_find_item; Graph_bands_item = class Menuaction "Plot _Bands" "show image bands as a graph" { action x = class _result { _vislevel = 3; style = Option_enum "Style" Plot_style.names "Line"; auto = Toggle "Auto Range" true; ymin = Expression "Y range minimum" 0; ymax = Expression "Y range maximum" 1; _result = Plot options (to_image (bands (image x))).value { options = [$style => style.value] ++ if auto then [] else [$ymin => ymin.expr, $ymax => ymax.expr]; // try to make something image-like from it image x = extract_area x.left x.top 1 1 x.image, is_Mark x = get_image x, has_image x = get_image (to_image x); // get as [[1],[2],[3]] bands x = transpose [map mean (bandsplit x)]; } } } } Tasks_mosaic_item = class Menupullright "_Mosaic" "build image mosaics" { /* Check and group a point list by image. */ mosaic_sort_test l = error "mosaic: not all points", !is_listof is_Mark l = error "mosaic: points not on two images", !is_list_len 2 images = error "mosaic: images do not match in format and coding", !all_equal (map get_format l) || !all_equal (map get_coding l) = error "mosaic: not same number of points on each image", !foldr1 equal (map len l') = l' { // test for all elements of a list equal all_equal l = all (map (equal (hd l)) (tl l)); // all the different images images = mkset pointer_equal (map get_image l); // find all points defined on image test_image image p = (get_image p) === image; find l image = filter (test_image image) l; // group point list by image l' = map (find l) images; } /* Sort a point group to get right before left, and within each group to * get above before below. */ mosaic_sort_lr l = l'' { // sort to get upper point first above a b = a.top < b.top; l' = map (sortc above) l; // sort to get right group before left group right a b = a?0.left > b?0.left; l'' = sortc right l'; } /* Sort a point group to get top before bottom, and within each group to * get left before right. */ mosaic_sort_tb l = l'' { // sort to get upper point first left a b = a.left < b.left; l' = map (sortc left) l; // sort to get right group before left group below a b = a?0.top > b?0.top; l'' = sortc below l'; } /* Put 'em together! Group by image, sort vertically (or horizontally) with * one of the above, transpose to get pairs matched up, and flatten again. */ mosaic_sort fn = concat @ transpose @ fn @ mosaic_sort_test; Mosaic_1point_item = class Menupullright "_One Point" "join two images with a single tie point" { check_ab_args a b = [ [a, "a", check_Mark], [b, "b", check_Mark] ]; // shortcut to prefs prefs = Workspaces.Preferences; search_area = prefs.MOSAIC_WINDOW_SIZE; object_size = prefs.MOSAIC_OBJECT_SIZE; blend_width_widget = Scale "Maximum blend width" 0 100 prefs.MOSAIC_MAX_BLEND_WIDTH; refine_widget = Toggle "Refine selected tie-points" prefs.MOSAIC_REFINE; lr_mos _refine a b = class Image _result { _check_args = check_ab_args a b; bw = blend_width_widget; refine = _refine; _result = im_lrmosaic a'.image.value b'.image.value 0 a'.left a'.top b'.left b'.top (object_size / 2) (search_area / 2) 0 bw.value, refine = im_lrmerge a'.image.value b'.image.value (b'.left - a'.left) (b'.top - a'.top) bw.value { [a', b'] = mosaic_sort mosaic_sort_lr [a, b]; } } tb_mos _refine a b = class Image _result { _check_args = check_ab_args a b; bw = blend_width_widget; refine = _refine; _result = im_tbmosaic a'.image.value b'.image.value 0 a'.left a'.top b'.left b'.top (object_size / 2) (search_area / 2) 0 bw.value, refine = im_tbmerge a'.image.value b'.image.value (b'.left - a'.left) (b'.top - a'.top) bw.value { [a', b'] = mosaic_sort mosaic_sort_tb [a, b]; } } Left_right_item = class Menuaction "_Left to Right" "join two images left-right with a single tie point" { action a b = lr_mos refine_widget a b; } Top_bottom_item = class Menuaction "_Top to Bottom" "join two images top-bottom with a single tie point" { action a b = tb_mos refine_widget a b; } sep1 = Menuseparator; Left_right_manual_item = class Menuaction "Manual L_eft to Right" "join left-right, no auto-adjust of tie points" { action a b = lr_mos false a b; } Top_bottom_manual_item = class Menuaction "Manual T_op to Bottom" "join top-bottom, no auto-adjust of tie points" { action a b = tb_mos false a b; } } Mosaic_2point_item = class Menupullright "_Two Point" "join two images with two tie points" { check_abcd_args a b c d = [ [a, "a", check_Mark], [b, "b", check_Mark], [c, "c", check_Mark], [d, "d", check_Mark] ]; // shortcut to prefs prefs = Workspaces.Preferences; search_area = prefs.MOSAIC_WINDOW_SIZE; object_size = prefs.MOSAIC_OBJECT_SIZE; blend_width_widget = Scale "Maximum blend width" 0 100 prefs.MOSAIC_MAX_BLEND_WIDTH; refine_widget = Toggle "Refine selected tie-points" prefs.MOSAIC_REFINE; Left_right_item = class Menuaction "_Left to Right" "join two images left-right with a pair of tie points" { action a b c d = class Image _result { _check_args = check_abcd_args a b c d; bw = blend_width_widget; refine = refine_widget; _result = im_lrmosaic1 a'.image.value b'.image.value 0 a'.left a'.top b'.left b'.top c'.left c'.top d'.left d'.top (object_size / 2) (search_area / 2) 0 bw.value, refine = im_lrmerge1 a'.image.value b'.image.value a'.left a'.top b'.left b'.top c'.left c'.top d'.left d'.top bw.value { [a', b', c', d'] = mosaic_sort mosaic_sort_lr [a, b, c, d]; } } } Top_bottom_item = class Menuaction "_Top to Bottom" "join two images top-bottom with a pair of tie points" { action a b c d = class Image _result { _check_args = check_abcd_args a b c d; bw = blend_width_widget; refine = refine_widget; _result = im_tbmosaic1 a'.image.value b'.image.value 0 a'.left a'.top b'.left b'.top c'.left c'.top d'.left d'.top (object_size / 2) (search_area / 2) 0 bw.value, refine = im_tbmerge1 a'.image.value b'.image.value a'.left a'.top b'.left b'.top c'.left c'.top d'.left d'.top bw.value { [a', b', c', d'] = mosaic_sort mosaic_sort_tb [a, b, c, d]; } } } } sep1 = Menuseparator; Balance_item = class Menuaction "Mosaic _Balance" "disassemble mosaic, scale brightness to match, reassemble" { action x = map_unary balance x { balance x = oo_unary_function balance_op x, is_class x = im_global_balancef x Workspaces.Preferences.MOSAIC_BALANCE_GAMMA, is_image x = error (_ "bad arguments to " ++ "balance") { balance_op = Operator "balance" balance Operator_type.COMPOUND_REWRAP false; } } } //////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// Manual_balance_item = class Menupullright "Manual B_alance" "balance tonality of user defined areas" { prefs = Workspaces.Preferences; //////////////////////////////////////////////////////////////////////////////////// Balance_find_item = class Menuaction "_Find Values" "calculates values required to scale and offset balance user defined areas in a given image" /* Outputs a matrix of scale and offset values. Eg. Values required to balance the secondary * structure in an X-ray image. Takes an X-ray image an 8-bit control mask and a list of * 8-bit reference masks, where the masks are white on a black background. */ { action im_in m_control m_group = class Matrix values{ _vislevel = 1; _control_im = if m_control then im_in else 0; _control_meanmax = so_meanmax _control_im; _group_check = is_Group m_group; _m_list = m_group.value, _group_check = m_group; process m_current mat_in = mat_out {so_values = so_calculate _control_meanmax im_in m_current; mat_out = join [so_values] mat_in;} values = (foldr process [] _m_list); } } //////////////////////////////////////////////////////////////////////////////////// Balance_check_item = class Menuaction "_Check Values" "allows calculated set of scale and offset values to be checked and adjusted if required" /* Outputs adjusted matrix of scale and offset values and scale and offset image maps. * Eg. Check values required to balance the secondary structure in an X-ray image. * Takes an X-ray image an 8-bit control mask and a list of 8-bit reference masks, * where the masks are white on a black background. */ { action im_in m_matrix m_group = class Image value { _vislevel = 3; blur = Scale "Blur" 1 10 1; _blur = (blur.value/2 + 0.5), blur.value > 1 = 1; _group_check = is_Group m_group; _m_list = m_group.value, _group_check = m_group; adjust = Matrix_rec mat_a { no_masks = len _m_list; mat_a = replicate no_masks [0, 0]; } // Apply the user defined adjustments to the inputted matrix of scale and offset values _adjusted = map2 fn_adjust m_matrix.value adjust.value; fn_adjust a b = [(a?0 + b?0), (a?1 + (a?1 * b?1))]; _scaled_ims = map (fn_so_apply im_in) _adjusted; fn_so_apply im so = map_unary adj im {adj im = im * (so?0) + (so?1);} _im_pairs = zip2 _m_list _scaled_ims; // Prepare black images as starting point. //////////// _blank = image_new (_m_list?0).width (_m_list?0).height 1 6 Image_coding.NOCODING 1 0 0 0; _pair_start = [(_blank + 1), _blank]; Build = Toggle "Build Scale and Offset Correction Images" false; Output = class { _vislevel = 1; scale_im = _build?0; offset_im = _build?1; so_values = Matrix _adjusted; _build = [Image so_images?0, Image so_images?1], Build = ["Scale image not built.", "Offset image not built."] { m_list' = transpose [_m_list]; m_all = map2 join m_list' _adjusted; so_images = foldr process_2 _pair_start m_all; } } value = (foldr process_1 im_in_b _im_pairs).value {im_in_b = map_unary cast_float im_in;} process_1 m_current im_start = im_out { bl_mask = convsep (matrix_blur _blur) (get_image m_current?0); blended_im = im_blend bl_mask (m_current?1).value im_start.value; im_out = Image (clip2fmt im_start.format blended_im); } // Process for building scale and offset image. process_2 current p_start = p_out { im_s = if ((current?0) > 128) then current?1 else _blank; im_o = if ((current?0) > 128) then current?2 else _blank; im_s' = convsep (matrix_blur _blur) (im_s != 0); im_o' = convsep (matrix_blur _blur) (im_o != 0); im_s'' = im_blend im_s'.value im_s.value p_start?0; im_o'' = im_blend im_o'.value im_o.value p_start?1; p_out = [im_s'', im_o'']; } } } //////////////////////////////////////////////////////////////////////////////////// Balance_apply_item = class Menuaction "_Apply Values" "apply scale and offset corrections, defined as image maps, to a given image" /* Outputs the balanced image. Eg. Balance the secondary structure in an X-ray image. Takes an * X-ray image an 32-bit float scale image and a 32-bit offset image. */ { action im_in scale_im offset_im = class Image value { _vislevel = 1; xfactor = im_in.width/scale_im.width; yfactor = im_in.height/scale_im.height; _scale_im = resize Interpolate_bilinear xfactor yfactor scale_im; _offset_im = resize Interpolate_bilinear xfactor yfactor offset_im; value = get_image ( clip2fmt im_in.format ( ( im_in * _scale_im ) + _offset_im ) ); } } } Tilt_item = Filter_tilt_item; sep2 = Menuseparator; Rebuild_item = class Menuaction "_Rebuild" "disassemble mosaic, substitute image files and reassemble" { action x = class _result { _vislevel = 3; old = String "In each filename, replace" "foo"; new = String "With" "bar"; _result = map_unary remosaic x { remosaic image = Image (im_remosaic image.value old.value new.value); } } } sep3 = Menuseparator; Clone_area_item = class Menuaction "_Clone Area" "replace dark or light section of im1 with pixels from im2" { action im1 im2 = class _result { _check_args = [ [im1, "im1", check_Image], [im2, "im2", check_Image] ]; _vislevel = 3; /* Region on first image placed in the top left hand corner, * positioned and size relative to the height and width of im1. */ r1 = Region_relative im1 0.05 0.05 0.05 0.05; /* Mark on second image placed in the top left hand corner, * positioned relative to the height and width of im2. Used to * define _r2, the region from which the section of image is cloned * from. */ p2 = Mark_relative im2 0.05 0.05; _r2 = Region im2 p2.left p2.top r1.width r1.height; mask = [r1 <= Options.sc, r1 >= Options.sc]?(Options.replace); Options = class { _vislevel = 3; pause = Toggle "Pause process" true; /* Option toggle used to define whether the user is * replacing a dark or a light area. */ replace = Option "Replace" [ "A Dark Area", "A Light Area" ] 1; // Used to select the area to be replaced. sc = Scale "Scale cutoff" 0.01 mx (mx / 2) {mx = Image_format.maxval im1.format;} //Allows replacement with scale&offset balanced gaussian noise. balance = Toggle "Balance cloned data to match surroundings." true; //Allows replacement with scale&offset balanced //gaussian noise. process = Toggle "Replace area with Gaussian noise." false; } _result = im1, Options.pause = Image (im_insert im1.value patch r1.left r1.top) { r2 = Region im2 p2.left p2.top r1.width r1.height; ref_meanmax = so_meanmax (if mask then 0 else r1); mask8 = Matrix_mor [[255, 255, 255], [255, 255, 255], [255, 255, 255]]; mask_a = map_unary (dilate mask8) mask; mask_b = convsep (matrix_blur 2) mask_a; patch = so_balance ref_meanmax r1 r2 mask_b Options.process, Options.balance = so_balance ref_meanmax r1 r2 mask_b Options.process, Options.process = im_blend (get_image mask_b) (get_image r2) (get_image r1); } } } } Tasks_frame_item = Frame_item; Tasks_print_item = class Menupullright "_Print" "useful stuff for image output" { Rotate_item = Image_transform_item.Rotate_item; Flip_item = Image_transform_item.Flip_item; Resize_item = Image_transform_item.Resize_item; Tone_item = Image_levels_item.Tone_item; Sharpen_item = class Menuaction "_Sharpen" "unsharp filter tuned for typical inkjet printers" { action x = class _result { _vislevel = 3; target_dpi = Option "Sharpen for print at" [ "400 dpi", "300 dpi", "150 dpi", "75 dpi" ] 1; _result = map_unary process x { process image = sharpen params?0 params?1 params?2 params?3 params?4 params?5 (colour_transform_to Image_type.LABQ image) { // sharpen params for various dpi // just change the size of the area we search param_table = [ [7, 2.5, 40, 20, 0.5, 1.5], [5, 2.5, 40, 20, 0.5, 1.5], [3, 2.5, 40, 20, 0.5, 1.5], [11, 2.5, 40, 20, 0.5, 1.5] ]; params = param_table?target_dpi; } } } } sep1 = Menuseparator; Temp_item = Colour_temperature_item; ICC_item = Colour_icc_item; } nip2-8.7.0/share/nip2/compat/7.26/_types.def0000644000175000017500000007003013224651032015131 00000000000000/* A list of things. Do automatic iteration of unary and binary operators on * us. * List [1, 2] + [2, 3] -> List [3, 5] * hd (List [2, 3]) -> 2 * List [] == [] -> true */ List value = class _Object { _check_args = [ [value, "value", check_list] ]; // methods oo_binary_table op x = [ [apply2 op value x', op.op_name == "subscript" || op.op_name == "subscript'" || op.op_name == "equal" || op.op_name == "equal'"], [this.List (apply2 op value x'), op.op_name == "join" || op.op_name == "join'"], [this.List (map2 (apply2 op) value x'), is_list x'], [this.List (map (apply2 op' x) value), true] ] ++ super.oo_binary_table op x { op' = oo_converse op; // strip the List wrapper, if any x' = x.value, is_List x = x; apply2 op x1 x2 = oo_binary_function op x1 x2, is_class x1 = oo_binary'_function op x1 x2, is_class x2 = op.fn x1 x2; }; oo_unary_table op = [ [apply value, op.op_name == "hd" || op.op_name == "tl"], [this.List (map apply value), true] ] ++ super.oo_unary_table op { apply x = oo_unary_function op x, is_class x = op.fn x; } } /* A group of things. Loop the operation over the group. */ Group value = class _Object { _check_args = [ [value, "value", check_list] ]; // methods oo_binary_table op x = [ // if_then_else is really a trinary operator [map_trinary ite this x?0 x?1, op.op_name == "if_then_else"], [map_binary op.fn this x, is_Group x], [map_unary (\a op.fn a x) this, true] ] ++ super.oo_binary_table op x; oo_unary_table op = [ [map_unary op.fn this, true] ] ++ super.oo_unary_table op; // we can't call map_trinary directly, since it uses Group and we // don't support mutually recursive top-level functions :-( // copy-paste it here, keep in sync with the version in _stdenv map_nary fn args = fn args, groups == [] = Group (map process [0, 1 .. shortest - 1]) { groups = filter is_Group args; shortest = foldr1 min_pair (map (len @ get_value) groups); process n = NULL, any (map (is_noval n) args) = map_nary fn (map (extract n) args) { extract n arg = arg.value?n, is_Group arg = arg; is_noval n arg = is_Group arg && arg.value?n == NULL; } } // need ite as a true trinary ite a b c = if a then b else c; map_unary fn a = map_nary (list_1ary fn) [a]; map_binary fn a b = map_nary (list_2ary fn) [a, b]; map_trinary fn a b c = map_nary (list_3ary fn) [a, b, c]; } /* Single real number ... eg slider. */ Real value = class _Object { _check_args = [ [value, "value", check_real] ]; // methods oo_binary_table op x = [ [this.Real (op.fn this.value x.value), is_Real x && op.type == Operator_type.ARITHMETIC], [this.Real (op.fn this.value x), is_real x && op.type == Operator_type.ARITHMETIC], [op.fn this.value x.value, is_Real x && op.type == Operator_type.RELATIONAL], [op.fn this.value x, !is_class x] ] ++ super.oo_binary_table op x; oo_unary_table op = [ [this.Real (op.fn this.value), op.type == Operator_type.ARITHMETIC], [op.fn this.value, true] ] ++ super.oo_unary_table op; } /* Single bool ... eg Toggle. */ Bool value = class _Object { _check_args = [ [value, "value", check_bool] ]; // methods oo_binary_table op x = [ [op.fn this.value x, op.op_name == "if_then_else"], [this.Bool (op.fn this.value x.value), is_Bool x], [this.Bool (op.fn this.value x), is_bool x] ] ++ super.oo_binary_table op x; oo_unary_table op = [ [this.Bool (op.fn this.value), op.type == Operator_type.ARITHMETIC || op.type == Operator_type.RELATIONAL], [op.fn this.value, true] ] ++ super.oo_unary_table op; } /* An editable string. */ String caption value = class _Object { _check_args = [ [caption, "caption", check_string], [value, "value", check_string] ]; } /* An editable real number. */ Number caption value = class scope.Real value { _check_args = [ [caption, "caption", check_string] ]; Real x = this.Number caption x; } /* An editable expression. */ Expression caption expr = class (if is_class expr then expr else _Object) { _check_args = [ [caption, "caption", check_string], [expr, "expr", check_any] ]; } /* A ticking clock. */ Clock interval value = class scope.Real value { _check_args = [ [interval, "interval", check_real] ]; Real x = this.Clock interval x; } /* An editable filename. */ Pathname caption value = class _Object { _check_args = [ [caption, "caption", check_string], [value, "value", check_string] ]; } /* An editable fontname. */ Fontname caption value = class _Object { _check_args = [ [caption, "caption", check_string], [value, "value", check_string] ]; } /* Vector type ... just a finite list of real. Handy for wrapping an * argument to eg. im_lintra_vec. Make it behave like a single pixel image. */ Vector value = class _Object { _check_args = [ [value, "value", check_real_list] ]; bands = len value; // methods oo_binary_table op x = [ // Vector ++ Vector means bandwise join [this.Vector (op.fn this.value x.value), is_Vector x && (op.op_name == "join" || op.op_name == "join'")], [this.Vector (op.fn this.value [get_number x]), has_number x && (op.op_name == "join" || op.op_name == "join'")], // Vector ? number means extract element [op.fn this.value (get_real x), has_real x && (op.op_name == "subscript" || op.op_name == "subscript'")], // extra check for lengths equal [this.Vector (map_binaryl op.fn this.value x.value), is_Vector x && len value == len x.value && op.type == Operator_type.ARITHMETIC], [this.Vector (map_binaryl op.fn this.value (get_real x)), has_real x && op.type == Operator_type.ARITHMETIC], // need extra length check [this.Vector (map bool_to_real (map_binaryl op.fn this.value x.value)), is_Vector x && len value == len x.value && op.type == Operator_type.RELATIONAL], [this.Vector (map bool_to_real (map_binaryl op.fn this.value (get_real x))), has_real x && op.type == Operator_type.RELATIONAL], [this.Vector (op.fn this.value x.value), is_Vector x && len value == len x.value && op.type == Operator_type.COMPOUND_REWRAP], [x.Image (vec op'.op_name x.value value), is_Image x], [vec op'.op_name x value, is_image x], [op.fn this.value x, is_real x] ] ++ super.oo_binary_table op x { op' = oo_converse op; }; oo_unary_table op = [ [this.Vector (map_unaryl op.fn this.value), op.type == Operator_type.ARITHMETIC], [this.Vector (map bool_to_real (map_unaryl op.fn this.value)), op.type == Operator_type.RELATIONAL], [this.Vector (op.fn this.value), op.type == Operator_type.COMPOUND_REWRAP], [op.fn this.value, true] ] ++ super.oo_unary_table op; // turn an ip bool (or a number, for Vector) into VIPSs 255/0 bool_to_real x = 255, is_bool x && x = 255, is_number x && x != 0 = 0; } /* A rectangular array of real. */ Matrix_base value = class _Object { _check_args = [ [value, "value", check_matrix] ]; // calculate these from value width = len value?0; height = len value; // extract a rectanguar area extract left top width height = this.Matrix_base ((map (take width) @ map (drop left) @ take height @ drop top) value); // methods oo_binary_table op x = [ // mat multiply is special [this.Matrix_base mul.value, is_Matrix x && op.op_name == "multiply"], [this.Matrix_base mul'.value, is_Matrix x && op.op_name == "multiply'"], // mat divide is also special [this.Matrix_base div.value, is_Matrix x && op.op_name == "divide"], [this.Matrix_base div'.value, is_Matrix x && op.op_name == "divide'"], // power -1 means invert [this.Matrix_base inv.value, is_real x && x == -1 && op.op_name == "power"], [this.Matrix_base sq.value, is_real x && x == 2 && op.op_name == "power"], [error "matrix **-1 and **2 only", op.op_name == "power" || op.op_name == "power'"], // matrix op vector ... treat a vector as a 1 row matrix [this.Matrix_base (map (map_binaryl op'.fn x.value) this.value), is_Vector x && op.type == Operator_type.ARITHMETIC], [this.Matrix_base (map_binaryl op.fn this.value x.value), (is_Matrix x || is_Real x) && op.type == Operator_type.ARITHMETIC], [this.Matrix_base (map_binaryl op.fn this.value x), is_real x && op.type == Operator_type.ARITHMETIC], // compound ... don't do iteration [this.Matrix_base (op.fn this.value x.value), (is_Matrix x || is_Real x || is_Vector x) && op.type == Operator_type.COMPOUND_REWRAP], [op.fn this.value x, op.type == Operator_type.COMPOUND] ] ++ super.oo_binary_table op x { mul = im_matmul this x; mul' = im_matmul x this; div = im_matmul this (im_matinv x); div' = im_matmul x (im_matinv this); inv = im_matinv this; sq = im_matmul this this; op' = oo_converse op; } oo_unary_table op = [ [this.Matrix_base (map_unaryl op.fn this.value), op.type == Operator_type.ARITHMETIC], [this.Matrix_base (op.fn this.value), op.type == Operator_type.COMPOUND_REWRAP], [op.fn this.value, true] ] ++ super.oo_unary_table op; } /* How to display a matrix: text, sliders, toggles, or text plus scale/offset. */ Matrix_display = class { text = 0; slider = 1; toggle = 2; text_scale_offset = 3; is_display = member [text, slider, toggle, text_scale_offset]; } /* A matrix as VIPS sees them ... add scale, offset and filename. For nip, add * a display type as well to control how the widget renders. */ Matrix_vips value scale offset filename display = class scope.Matrix_base value { _check_args = [ [scale, "scale", check_real], [offset, "offset", check_real], [filename, "filename", check_string], [display, "display", check_matrix_display] ]; Matrix_base x = this.Matrix_vips x scale offset filename display; } /* A plain 'ol matrix which can be passed to VIPS. */ Matrix value = class Matrix_vips value 1 0 "" Matrix_display.text {} /* Specialised constructors ... for convolutions, recombinations and * morphologies. */ Matrix_con scale offset value = class Matrix_vips value scale offset "" Matrix_display.text_scale_offset {}; Matrix_rec value = class Matrix_vips value 1 0 "" Matrix_display.slider {}; Matrix_mor value = class Matrix_vips value 1 0 "" Matrix_display.toggle {}; Matrix_file filename = (im_read_dmask @ expand @ search) filename; /* A CIE colour ... a triple, plus a format (eg XYZ, Lab etc) */ Colour colour_space value = class scope.Vector value { _check_args = [ [colour_space, "colour_space", check_colour_space] ]; _check_all = [ [is_list_len 3 value, "len value == 3"] ]; Vector x = this.Colour colour_space x; // make a colour-ish thing from an image // back to Colour if we have another 3 band image // to a vector if bands > 1 // to a number otherwise itoc im = this.Colour nip_type (to_matrix im).value?0, bands == 3 = scope.Vector (map mean (bandsplit im)), bands > 1 = mean im { type = get_header "Type" im; bands = get_header "Bands" im; nip_type = Image_type.colour_spaces.lookup 1 0 type; } // methods oo_binary_table op x = [ [itoc (op.fn ((float) (to_image this).value) ((float) (to_image x).value)), // here REWRAP means go via image op.type == Operator_type.COMPOUND_REWRAP] ] ++ super.oo_binary_table op x; oo_unary_table op = [ [itoc (op.fn ((float) (to_image this).value)), op.type == Operator_type.COMPOUND_REWRAP] ] ++ super.oo_unary_table op; } // a subclass with widgets for picking a space and value Colour_picker default_colour default_value = class Colour space.item colour.expr { _vislevel = 3; space = Option_enum "Colour space" Image_type.colour_spaces default_colour; colour = Expression "Colour value" default_value; Colour_edit colour_space value = Colour_picker colour_space value; } /* Base scale type. */ Scale caption from to value = class scope.Real value { _check_args = [ [caption, "caption", check_string], [from, "from", check_real], [to, "to", check_real] ]; _check_all = [ [from < to, "from < to"] ]; Real x = this.Scale caption from to x; // methods oo_binary_table op x = [ [this.Scale caption (op.fn this.from x.from) (op.fn this.to x.to) (op.fn this.value x.value), is_Scale x && op.type == Operator_type.ARITHMETIC], [this.Scale caption (op.fn this.from x) (op.fn this.to x) (op.fn this.value x), is_real x && op.type == Operator_type.ARITHMETIC] ] ++ super.oo_binary_table op x; } /* Base toggle type. */ Toggle caption value = class scope.Bool value { _check_args = [ [caption, "caption", check_string], [value, "value", check_bool] ]; Bool x = this.Toggle caption x; } /* Base option type. */ Option caption labels value = class scope.Real value { _check_args = [ [caption, "caption", check_string], [labels, "labels", check_string_list], [value, "value", check_uint] ]; } /* An option whose value is a string rather than a number. */ Option_string caption labels item = class Option caption labels (index (equal item) labels) { Option_edit caption labels value = this.Option_string caption labels (labels?value); } /* Make an option from an enum. */ Option_enum caption enum item = class Option_string caption enum.names item { // corresponding thing value_thing = enum.get_thing item; Option_edit caption labels value = this.Option_enum caption enum (enum.names?value); } /* A rectangle. width and height can be -ve. */ Rect left top width height = class _Object { _check_args = [ [left, "left", check_real], [top, "top", check_real], [width, "width", check_real], [height, "height", check_real] ]; // derived right = left + width; bottom = top + height; oo_binary_table op x = [ [equal x, is_Rect x && (op.op_name == "equal" || op.op_name == "equal'")], [!equal x, is_Rect x && (op.op_name == "not_equal" || op.op_name == "not_equal'")], // binops with a complex are the same as (comp op comp) [oo_binary_function op this (Rect (re x) (im x) 0 0), is_complex x], // all others are just pairwise [this.Rect left' top' width' height', is_Rect x && op.type == Operator_type.ARITHMETIC], [this.Rect left'' top'' width'' height'', has_number x && op.type == Operator_type.ARITHMETIC] ] ++ super.oo_binary_table op x { left' = op.fn left x.left; top' = op.fn top x.top; width' = op.fn width x.width; height' = op.fn height x.height; left'' = op.fn left x'; top'' = op.fn top x'; width'' = op.fn width x'; height'' = op.fn height x'; x' = get_number x; } oo_unary_table op = [ // arithmetic uops just map [this.Rect left' top' width' height', op.type == Operator_type.ARITHMETIC], // compound uops are just like ops on complex // do (width, height) so thing like abs(Arrow) work as you'd expect [op.fn (width, height), op.type == Operator_type.COMPOUND] ] ++ super.oo_unary_table op { left' = op.fn left; top' = op.fn top; width' = op.fn width; height' = op.fn height; } // empty? ie. contains no pixels is_empty = width == 0 || height == 0; // normalised version, ie. make width/height +ve and flip the origin nleft = left + width, width < 0 = left; ntop = top + height, height < 0 = top; nwidth = abs width; nheight = abs height; nright = nleft + nwidth; nbottom = ntop + nheight; equal x = left == x.left && top == x.top && width == x.width && height == x.height; // contains a point? includes_point x y = nleft <= x && x <= nright && ntop <= y && y <= nbottom; // contains a rect? just test top left and bottom right points includes_rect r = includes_point r.nleft r.ntop && includes_point r.nright r.nbottom; // bounding box of two rects // if either is empty, can just return the other union r = r, is_empty = this, r.is_empty = Rect left' top' width' height' { left' = min_pair nleft r.nleft; top' = min_pair ntop r.ntop; width' = max_pair nright r.nright - left'; height' = max_pair nbottom r.nbottom - top'; } // intersection of two rects ... empty rect if no intersection intersect r = Rect left' top' width'' height'' { left' = max_pair nleft r.nleft; top' = max_pair ntop r.ntop; width' = min_pair nright r.nright - left'; height' = min_pair nbottom r.nbottom - top'; width'' = width', width > 0 = 0; height'' = height', height > 0 = 0; } // expand/collapse by n pixels margin_adjust n = Rect (left - n) (top - n) (width + 2 * n) (height + 2 * n); } /* Values for Compression field in image. */ Image_compression = class { NONE = 0; NO_COMPRESSION = 0; TCSF_COMPRESSION = 1; JPEG_COMPRESSION = 2; LABPACK_COMPRESSED = 3; RGB_COMPRESSED = 4; LUM_COMPRESSED = 5; } /* Values for Coding field in image. */ Image_coding = class { NONE = 0; NOCODING = 0; COLQUANT = 1; LABPACK = 2; RAD = 6; } /* Values for BandFmt field in image. */ Image_format = class { DPCOMPLEX = 9; DOUBLE = 8; COMPLEX = 7; FLOAT = 6; INT = 5; UINT = 4; SHORT = 3; USHORT = 2; CHAR = 1; UCHAR = 0; NOTSET = -1; maxval fmt = [ 255, // UCHAR 127, // CHAR 65535, // USHORT 32767, // SHORT 4294967295, // UINT 2147483647, // INT 255, // FLOAT 255, // COMPLEX 255, // DOUBLE 255 // DPCOMPLEX ] ? fmt, fmt >= 0 && fmt <= DPCOMPLEX = error (_ "bad value for BandFmt"); } /* A lookup table. */ Table value = class _Object { _check_args = [ [value, "value", check_rectangular] ]; /* Extract a column. */ column n = map (extract n) value; /* present col x: is there an x in column col */ present col x = member (column col) x; /* Look on column from, return matching item in column to. */ lookup from to x = value?n?to, n >= 0 = error (_ "item" ++ " " ++ print x ++ " " ++ _ "not in table") { n = index (equal x) (column from); } } /* A two column lookup table with the first column a string and the second a * thing. Used for representing various enums. Option_enum makes a selector * from one of these. */ Enum value = class Table value { _check_args = [ [value, "value", check_enum] ] { check_enum = [is_enum, _ "is [[char, *]]"]; is_enum x = is_rectangular x && is_listof is_string (map (extract 0) x); } // handy ... all the names and things as lists names = this.column 0; things = this.column 1; // is a legal name or thing has_name x = this.present 1 x; has_thing x = this.present 0 x; // map things to strings and back get_name x = this.lookup 1 0 x; get_thing x = this.lookup 0 1 x; } /* Type field. */ Image_type = class { MULTIBAND = 0; B_W = 1; LUMINANCE = 2; XRAY = 3; IR = 4; YUV = 5; RED_ONLY = 6; GREEN_ONLY = 7; BLUE_ONLY = 8; POWER_SPECTRUM = 9; HISTOGRAM = 10; LUT = 11; XYZ = 12; LAB = 13; CMC = 14; CMYK = 15; LABQ = 16; RGB = 17; UCS = 18; LCH = 19; LABS = 21; sRGB = 22; YXY = 23; FOURIER = 24; RGB16 = 25; GREY16 = 26; /* Table to get names <-> numbers. */ type_names = Enum [ $MULTIBAND => MULTIBAND, $B_W => B_W, $LUMINANCE => LUMINANCE, $XRAY => XRAY, $IR => IR, $YUV => YUV, $RED_ONLY => RED_ONLY, $GREEN_ONLY => GREEN_ONLY, $BLUE_ONLY => BLUE_ONLY, $POWER_SPECTRUM => POWER_SPECTRUM, $HISTOGRAM => HISTOGRAM, $LUT => LUT, $XYZ => XYZ, $LAB => LAB, $CMC => CMC, $CMYK => CMYK, $LABQ => LABQ, $RGB => RGB, $UCS => UCS, $LCH => LCH, $LABS => LABS, $sRGB => sRGB, $YXY => YXY, $FOURIER => FOURIER, $RGB16 => RGB16, $GREY16 => GREY16 ]; /* Table relating nip's colour space names and VIPS's Type numbers. * Options generated from this, so match the order to the order in the * Colour menu. */ colour_spaces = Enum [ $sRGB => sRGB, $Lab => LAB, $LCh => LCH, $XYZ => XYZ, $Yxy => YXY, $UCS => UCS ]; /* A slightly larger table ... the types of colorimetric image we can * have. Add mono, and the S and Q forms of LAB. */ image_colour_spaces = Enum [ $Mono => B_W, $sRGB => sRGB, $RGB16 => RGB16, $GREY16 => GREY16, $Lab => LAB, $LabQ => LABQ, $LabS => LABS, $LCh => LCH, $XYZ => XYZ, $Yxy => YXY, $UCS => UCS ]; } /* Base image type. Simple layer over vips_image. */ Image value = class _Object { _check_args = [ [value, "value", check_image] ]; // fields from VIPS header width = get_width value; height = get_height value; bands = get_bands value; format = get_format value; bits = get_bits value; coding = get_coding value; type = get_type value; xres = get_header "Xres" value; yres = get_header "Yres" value; xoffset = get_header "Xoffset" value; yoffset = get_header "Yoffset" value; filename = get_header "filename" value; // convenience ... the area our pixels occupy, as a rect rect = Rect 0 0 width height; // operator overloading // (op Image Vector) done in Vector class oo_binary_table op x = [ // handle image ++ constant here [wrap join_result_image, (has_real x || is_Vector x) && (op.op_name == "join" || op.op_name == "join'")], [wrap ite_result_image, op.op_name == "if_then_else"], [wrap (op.fn this.value (get_image x)), has_image x], [wrap (op.fn this.value (get_number x)), has_number x], // if it's not a class on the RHS, handle here ... just apply and // rewrap [wrap (op.fn this.value x), !is_class x] // all other cases handled by other classes ] ++ super.oo_binary_table op x { // wrap the result with this // x can be a non-image, eg. compare "Image v == []" vs. // "Image v == 12" wrap x = x, op.type == Operator_type.COMPOUND || !is_image x = this.Image x; join_result_image = value ++ new_stuff, op.op_name == "join" = new_stuff ++ value { new_stuff = image_new width height new_bands format coding Image_type.B_W x xoffset yoffset; new_bands = get_bands x, has_bands x = 1; } [then_part, else_part] = x; // get things about our output from inputs in this order objects = [then_part, else_part, this]; // properties of our output image target_bands = get_member_list has_bands get_bands objects; target_type = get_member_list has_type get_type objects; // if one of then/else is an image, get the target format from that // otherwise, let the non-image objects set the target target_format = get_member_list has_format get_format x, has_member_list has_format x = NULL; to_image x = to_image_size width height target_bands target_format x; [then', else'] = map to_image x; ite_result_image = image_set_type target_type (if value then then' else else'); } // FIXME ... yuk ... don't use operator hints, just always rewrap if // we have an image result // forced on us by things like abs: // abs Vector -> real // abs Image -> Image // does not fit well with COMPOUND/whatever scheme oo_unary_table op = [ [this.Image result, is_image result], [result, true] ] ++ super.oo_unary_table op { result = op.fn this.value; } } /* Construct an image from a file. */ Image_file filename = class Image value { _check_args = [ [filename, "filename", check_string] ]; value = vips_image filename; } Region image left top width height = class Image value { _check_args = [ [image, "Image", check_Image], [left, "left", check_real], [top, "top", check_real], [width, "width", check_preal], [height, "height", check_preal] ]; // a rect for our coordinates // region.rect gets the rect for the extracted image region_rect = Rect left top width height; // we need to always succeed ... value is our enclosing image if we're // out of bounds value = extract_area left top width height image.value, image.rect.includes_rect region_rect = image.value; } Area image left top width height = class scope.Region image left top width height { Region image left top width height = this.Area image left top width height; } Arrow image left top width height = class scope.Rect left top width height { _check_args = [ [image, "Image", check_Image], [left, "left", check_real], [top, "top", check_real], [width, "width", check_real], [height, "height", check_real] ]; Rect l t w h = this.Arrow image l t w h; } HGuide image top = class scope.Arrow image image.rect.left top image.width 0 { Arrow image left top width height = this.HGuide image top; } VGuide image left = class scope.Arrow image left image.rect.top 0 image.height { Arrow image left top width height = this.VGuide image left; } Mark image left top = class scope.Arrow image left top 0 0 { Arrow image left top width height = this.Mark image left top; } // convenience functions: ... specify position as [0 .. 1) Region_relative image u v w h = Region image (image.width * u) (image.height * v) (image.width * w) (image.height * h); Area_relative image u v w h = Area image (image.width * u) (image.height * v) (image.width * w) (image.height * h); Arrow_relative image u v w h = Arrow image (image.width * u) (image.height * v) (image.width * w) (image.height * h); VGuide_relative image v = VGuide image (image.height * v); HGuide_relative image u = HGuide image (image.width * u); Mark_relative image u v = Mark image (image.width * u) (image.height * v); Interpolate_type = class { NEAREST_NEIGHBOUR = 0; BILINEAR = 1; BICUBIC = 2; LBB = 3; NOHALO = 4; VSQBS = 5; // Should introspect to get the list of interpolators :-( // We can "dir" on VipsInterpolate to get a list of them, but we // can't get i18n'd descriptions until we have more // introspection stuff in nip2. /* Table to map interpol numbers to descriptive strings */ descriptions = [ _ "Nearest neighbour", _ "Bilinear", _ "Bicubic", _ "Upsize: reduced halo bicubic (LBB)", _ "Upsharp: reduced halo bicubic with edge sharpening (Nohalo)", _ "Upsmooth: quadratic B-splines with jaggy reduction (VSQBS)" ]; /* And to vips type names. */ types = [ "VipsInterpolateNearest", "VipsInterpolateBilinear", "VipsInterpolateBicubic", "VipsInterpolateLbb", "VipsInterpolateNohalo", "VipsInterpolateVsqbs" ]; } Interpolate type options = class { value = vips_object_new Interpolate_type.types?type [] options; } Interpolate_bilinear = Interpolate Interpolate_type.BILINEAR []; Interpolate_picker default = class Interpolate interp.value [] { _vislevel = 2; interp = Option "Interpolation" Interpolate_type.descriptions default; } Render_intent = class { PERCEPTUAL = 0; RELATIVE = 1; SATURATION = 2; ABSOLUTE = 3; /* Table to get names <-> numbers. */ names = Enum [ _ "Perceptual" => PERCEPTUAL, _ "Relative" => RELATIVE, _ "Saturation" => SATURATION, _ "Absolute" => ABSOLUTE ]; } // abstract base class for toolkit menus Menu = class {} // a "----" line in a menu Menuseparator = class Menu {} // abstract base class for items in menus Menuitem label tooltip = class Menu {} Menupullright label tooltip = class Menuitem label tooltip {} Menuaction label tooltip = class Menuitem label tooltip {} /* Plots. */ Plot_style = class { POINT = 0; LINE = 1; SPLINE = 2; BAR = 3; names = Enum [ _ "Point" => POINT, _ "Line" => LINE, _ "Spline" => SPLINE, _ "Bar" => BAR ]; } Plot_format = class { YYYY = 0; XYYY = 1; XYXY = 2; names = Enum [ _ "YYYY" => YYYY, _ "XYYY" => XYXY, _ "XYXY" => XYXY ]; } Plot_type = class { /* Lots of Ys (ie. multiple line plots). */ YYYY = 0; /* First column of matrix is X position, others are Ys (ie. multiple XY * line plots, all with the same Xes). */ XYYY = 1; /* Many independent XY plots. */ XYXY = 2; } /* "options" is a list of ["key", value] pairs. */ Plot options value = class scope.Image value { Image value = this.Plot options value; } Plot_matrix options value = class Plot options (to_image value).value { } Plot_histogram value = class scope.Plot [] value { } Plot_xy value = class scope.Plot [$format => Plot_format.XYYY] value { } /* A no-value type. Call it NULL for C-alike fun. Used by Group to indicate * empty slots, for example. */ NULL = class _Object { oo_binary_table op x = [ // the only operation we allow is equality .. use pointer equality, // this lets us test a == NULL and a != NULL [this === x, op.type == Operator_type.RELATIONAL && op.op_name == "equal"], [this !== x, op.type == Operator_type.RELATIONAL && op.op_name == "not_equal"] ] ++ super.oo_binary_table op x; } nip2-8.7.0/share/nip2/compat/7.26/Makefile.am0000644000175000017500000000054313224651032015204 00000000000000startdir = $(pkgdatadir)/compat/7.26 start_DATA = \ Math.def \ Image.def \ Colour.def \ Tasks.def \ Object.def \ Filter.def \ Matrix.def \ Widgets.def \ Histogram.def \ _joe_extra.def \ _joe_utilities.def \ _convert.def \ _generate.def \ _list.def \ _predicate.def \ _stdenv.def \ _Object.def \ _types.def EXTRA_DIST = $(start_DATA) nip2-8.7.0/share/nip2/compat/7.9/0000755000175000017500000000000013350464160013153 500000000000000nip2-8.7.0/share/nip2/compat/7.9/_stdenv.def0000644000175000017500000007141013224651032015214 00000000000000/* Various operators as functions. */ logical_and a b = a && b; logical_or a b = a || b; bitwise_and a b = a & b; bitwise_or a b = a | b; eor a b = a ^ b; left_shift a b = a << b; right_shift a b = a >> b; not a = !a; less a b = a < b; more a b = a > b; less_equal a b = a <= b; more_equal a b = a >= b; equal a b = a == b; not_equal a b = a != b; pointer_equal a b = a === b; not_pointer_equal a b = a !== b; add a b = a + b; subtract a b = a - b; multiply a b = a * b; divide a b = a / b; power a b = a ** b; square x = x * x; remainder a b = a % b; cons a b = a : b; join a b = a ++ b; subscript a b = a ? b; generate s n f = [s, n .. f]; comma r i = (r, i); compose f g = f @ g; cast_unsigned_char x = (unsigned char) x; cast_signed_char x = (signed char) x; cast_unsigned_short x = (unsigned short) x; cast_signed_short x = (signed short) x; cast_unsigned_int x = (unsigned int) x; cast_signed_int x = (signed int) x; cast_float x = (float) x; cast_double x = (double) x; cast_complex x = (complex) x; cast_double_complex x = (double complex) x; unary_minus x = -x; negate x = !x; complement x = ~x; unary_plus x = +x; if_then_else a b c = if a then b else c; // the vector ops ... im is an image, vec is a real_list vec op_name im vec = im_lintra_vec ones im vec, op_name == "add" || op_name == "add'" = im_lintra_vec ones (-1 * im) vec, op_name == "subtract'" = im_lintra_vec ones im inv, op_name == "subtract" = im_lintra_vec vec im zeros, op_name == "multiply" || op_name == "multiply'" = im_lintra_vec vec (1 / im) zeros, op_name == "divide'" = im_lintra_vec recip im zeros, op_name == "divide" = im_expntra_vec im vec, op_name == "power'" = im_powtra_vec im vec, op_name == "power" = im_remainderconst_vec im vec, op_name == "remainder" = im_andimage_vec im vec, op_name == "bitwise_and" || op_name == "bitwise_and'" = im_orimage_vec im vec, op_name == "bitwise_or" || op_name == "bitwise_or'" = im_eorimage_vec im vec, op_name == "eor" || op_name == "eor'" = im_equal_vec im vec, op_name == "equal" || op_name == "equal'" = im_notequal_vec im vec, op_name == "not_equal" || op_name == "not_equal'" = im_less_vec im vec, op_name == "less" = im_moreeq_vec im vec, op_name == "less'" = im_lesseq_vec im vec, op_name == "less_equal" = im_more_vec im vec, op_name == "less_equal'" = error "unimplemented vector operation" { zeros = map (const 0) [1 .. len vec]; ones = map (const 1) [1 .. len vec]; recip = map (divide 1) vec; inv = map (multiply (-1)) vec; } /* Macbeth chart patch names. */ _macbeth_names = [ "Dark skin", "Light skin", "Blue sky", "Foliage", "Blue flower", "Bluish green", "Orange", "Purplish blue", "Moderate red", "Purple", "Yellow green", "Orange yellow", "Blue", "Green", "Red", "Yellow", "Magenta", "Cyan", "White (density 0.05)", "Neutral 8 (density 0.23)", "Neutral 6.5 (density 0.44)", "Neutral 5 (density 0.70)", "Neutral 3.5 (density 1.05)", "Black (density 1.50)" ]; bandsplit x = oo_unary_function bandsplit_op x, is_class x = map (subscript x) [0 .. bands - 1], is_image x = error (errors.badargs ++ "bandsplit") { bands = im_header_int "Bands" x; bandsplit_op = Operator "bandsplit" (map Image @ bandsplit) Operator_type.COMPOUND false; } bandjoin l = Image (concat (map get_value l)), is_listof (is_instanceof "Image") l = concat l, is_listof is_image l = error (errors.badargs ++ "bandjoin") { get_value x = x.value; } mean x = oo_unary_function mean_op x, is_class x = im_avg x, is_image x = error (errors.badargs ++ "mean") { mean_op = Operator "mean" mean_object Operator_type.COMPOUND false; mean_object x = im_avg x, is_image x = mean_list x, is_real_list x || is_matrix x = error (errors.badargs ++ "mean"); mean_list l = s / n { totals = sum l; n = totals?0; s = totals?1; } // return [n, sum] for a list of numbers, or a list of list of num // etc. sum x = foldr accumulate [0, 0] x { accumulate x sofar = [n + 1, x + s], is_real x = [n + n', s + s'], is_list x = error "mean_list: not real or [real]" { n = sofar?0; s = sofar?1; sub_acc = sum x; n' = sub_acc?0; s' = sub_acc?1; } } } deviation x = oo_unary_function deviation_op x, is_class x = im_deviate x, is_image x = error (errors.badargs ++ "deviation") { deviation_op = Operator "deviation" deviation_object Operator_type.COMPOUND false; deviation_object x = im_deviate x, is_image x = deviation_list x, is_real_list x || is_matrix x = error (errors.badargs ++ "deviation"); deviation_list l = (abs (s2 - (s * s / n)) / (n - 1)) ** 0.5 { totals = sum_sum2_list l; n = totals?0; s = totals?1; s2 = totals?2; } // return n, sum, sum of squares for a list of reals sum_sum2_list x = foldr accumulate [0, 0, 0] x { accumulate x sofar = [n + 1, x + s, x * x + s2], is_real x = [n + n', s + s', s2 + s2'], is_list x = error "sum_sum2_list: not real or [real]" { n = sofar?0; s = sofar?1; s2 = sofar?2; sub_acc = sum_sum2_list x; n' = sub_acc?0; s' = sub_acc?1; s2' = sub_acc?2; } } } abs x = oo_unary_function abs_op x, is_class x = im_abs x, is_image x = abs_cmplx x, is_complex x = abs_num x, is_real x = error (errors.badargs ++ "abs") { abs_op = Operator "abs" abs_object Operator_type.COMPOUND false; abs_object x = im_abs x, is_image x = abs_cmplx x, is_complex x = abs_num x, is_real x = abs_list x, is_real_list x = abs_list (map abs_list x), is_matrix x = error (errors.badargs ++ "abs"); abs_list l = (foldr1 add (map square l)) ** 0.5; abs_num n = n, n >= 0 = -n; abs_cmplx c = ((re c)**2 + (im c)**2) ** 0.5; } copy x = oo_unary_function copy_op x, is_class x = im_copy x, is_image x = x { copy_op = Operator "copy" copy Operator_type.COMPOUND_REWRAP false; } // like abs, but treat pixels as vectors ... ie. always get a 1-band image // back ... also treat matricies as lists of vectors // handy for dE from object difference abs_vec x = oo_unary_function abs_vec_op x, is_class x = abs_vec_image x, is_image x = abs_vec_cmplx x, is_complex x = abs_vec_num x, is_real x = error (errors.badargs ++ "abs_vec") { abs_vec_op = Operator "abs_vec" abs_vec_object Operator_type.COMPOUND false; abs_vec_object x = abs_vec_image x, is_image x = abs_vec_cmplx x, is_complex x = abs_vec_num x, is_real x = abs_vec_list x, is_real_list x = mean (Vector (map abs_vec_list x)), is_matrix x = error (errors.badargs ++ "abs_vec"); abs_vec_list l = (foldr1 add (map square l)) ** 0.5; abs_vec_num n = n, n >= 0 = -n; abs_vec_cmplx c = ((re c)**2 + (im c)**2) ** 0.5; abs_vec_image im = (foldr1 add (map square (bandsplit im))) ** 0.5; } transpose x = oo_unary_function transpose_op x, is_class x = transpose_image x, is_image x = transpose_matrix x, is_list x && is_list (hd x) = error (errors.badargs ++ "transpose") { transpose_op = Operator "transpose" transpose_object Operator_type.COMPOUND_REWRAP false; transpose_object x = transpose_matrix x, is_matrix x = transpose_image x, is_image x = error (errors.badargs ++ "transpose"); transpose_matrix l = [], l' == [] = (map hd l') : (transpose_matrix (map tl l')) { l' = takewhile (not_equal []) l; } transpose_image = im_flipver @ im_rot270; } rot45 x = oo_unary_function rot45_op x, is_class x = error "rot45 image: not implemented", is_image x = error (errors.badargs ++ "rot45") { rot45_op = Operator "rot45" rot45_object Operator_type.COMPOUND_REWRAP false; rot45_object x = rot45_matrix x, is_odd_square_matrix x = error "rot45 image: not implemented", is_image x = error (errors.badargs ++ "rot45"); // slow, but what the heck rot45_matrix l = (im_rotate_dmask45 (Matrix l)).value; } rot90 x = oo_unary_function rot90_op x, is_class x = im_rot90 x, is_image x = error (errors.badargs ++ "rot90") { rot90_op = Operator "rot90" rot90_object Operator_type.COMPOUND_REWRAP false; rot90_object x = rot90_matrix x, is_matrix x = im_rot90 x, is_image x = error (errors.badargs ++ "rot90"); // slow, but what the heck rot90_matrix l = (im_rotate_dmask90 (Matrix l)).value; } rot180 x = oo_unary_function rot180_op x, is_class x = im_rot180 x, is_image x = error (errors.badargs ++ "rot180") { rot180_op = Operator "rot180" rot180_object Operator_type.COMPOUND_REWRAP false; rot180_object x = rot180_matrix x, is_matrix x = im_rot180 x, is_image x = error (errors.badargs ++ "rot180"); // slow, but what the heck rot180_matrix l = (im_rotate_dmask90 (im_rotate_dmask90 (Matrix l))).value; } rot270 x = oo_unary_function rot270_op x, is_class x = im_rot270 x, is_image x = error (errors.badargs ++ "rot270") { rot270_op = Operator "rot270" rot270_object Operator_type.COMPOUND_REWRAP false; rot270_object x = rot270_matrix x, is_matrix x = im_rot270 x, is_image x = error (errors.badargs ++ "rot270"); // slow, but what the heck rot270_matrix l = (im_rotate_dmask90 (im_rotate_dmask90 (im_rotate_dmask90 (Matrix l)))).value; } rotquad x = oo_unary_function rotquad_op x, is_class x = im_rotquad x, is_image x = error (errors.badargs ++ "rotquad") { rotquad_op = Operator "rotquad" rotquad_object Operator_type.COMPOUND_REWRAP false; rotquad_object x = rotquad_matrix x, is_matrix x = im_rotquad x, is_image x = error (errors.badargs ++ "rotquad"); rotquad_matrix l = error "rotquad matrix: not implemented"; } flipud x = oo_unary_function flipud_op x, is_class x = im_flipver x, is_image x = error (errors.badargs ++ "flipud") { flipud_op = Operator "flipud" flipud_object Operator_type.COMPOUND_REWRAP false; flipud_object x = flipud_matrix x, is_matrix x = im_flipver x, is_image x = error (errors.badargs ++ "flipud"); flipud_matrix l = reverse l; } fliplr x = oo_unary_function fliplr_op x, is_class x = im_fliphor x, is_image x = error (errors.badargs ++ "fliplr") { fliplr_op = Operator "fliplr" fliplr_object Operator_type.COMPOUND_REWRAP false; fliplr_object x = fliplr_matrix x, is_matrix x = im_fliphor x, is_image x = error (errors.badargs ++ "fliplr"); fliplr_matrix l = map reverse l; } max_pair a b = a, a > b = b; min_pair a b = a, a < b = b; max x = oo_unary_function max_op x, is_class x = im_max x, is_image x = x, is_number x = error (errors.badargs ++ "max") { max_op = Operator "max" max_list Operator_type.COMPOUND false; max_list x = foldr1 max_pair x, is_real_list x = foldr1 max_pair (map max_list x), is_matrix x = max x; } min x = oo_unary_function min_op x, is_class x = im_min x, is_image x = x, is_number x = error (errors.badargs ++ "min") { min_op = Operator "min" min_list Operator_type.COMPOUND false; min_list x = foldr1 min_pair x, is_real_list x = foldr1 min_pair (map min_list x), is_matrix x = min x; } maxpos x = oo_unary_function maxpos_op x, is_class x = im_maxpos x, is_image x = error (errors.badargs ++ "maxpos") { maxpos_op = Operator "maxpos" maxpos_object Operator_type.COMPOUND false; maxpos_object x = maxpos_matrix x, is_matrix x = im_maxpos x, is_image x = error (errors.badargs ++ "maxpos"); maxpos_matrix m = (indexes?row, row) { max_value = max (Matrix m); indexes = map (index (equal max_value)) m; row = index (not_equal (-1)) indexes; } } minpos x = oo_unary_function minpos_op x, is_class x = im_minpos x, is_image x = error (errors.badargs ++ "minpos") { minpos_op = Operator "minpos" minpos_object Operator_type.COMPOUND false; minpos_object x = minpos_matrix x, is_matrix x = im_minpos x, is_image x = error (errors.badargs ++ "minpos"); minpos_matrix m = (indexes?row, row) { min_value = min (Matrix m); indexes = map (index (equal min_value)) m; row = index (not_equal (-1)) indexes; } } stats x = oo_unary_function stats_op x, is_class x = im_stats x, is_image x = error (errors.badargs ++ "stats") { stats_op = Operator "stats" stats_object Operator_type.COMPOUND false; stats_object x = im_stats (to_image x).value, is_matrix x = im_stats x, is_image x = error (errors.badargs ++ "stats"); } e = 2.7182818284590452354; pi = 3.14159265358979323846; rad d = 2 * pi * (d / 360); deg r = 360 * r / (2 * pi); sign x = oo_unary_function sign_op x, is_class x = im_sign x, is_image x = sign_cmplx x, is_complex x = sign_num x, is_real x = error (errors.badargs ++ "sign") { sign_op = Operator "sign" sign Operator_type.COMPOUND_REWRAP false; sign_num n = 0, n == 0 = 1, n > 0 = -1; sign_cmplx c = (0, 0), mod == 0 = (re c / mod, im c / mod) { mod = abs c; } } rint x = oo_unary_function rint_op x, is_class x = rint_value x, is_image x || is_number x = error (errors.badargs ++ "rint") { rint_op = Operator "rint" rint_value Operator_type.ARITHMETIC false; rint_value x = (int) (x + 0.5), x > 0 = (int) (x - 0.5); } scale x = oo_unary_function scale_op x, is_class x = scale_prim x { scale_op = Operator "scale" scale_prim Operator_type.COMPOUND_REWRAP false; scale_prim x = (unsigned char) x, is_number x = im_scale x, is_image x = scale_list x, is_real_list x || is_matrix x = error (errors.badargs ++ "scale"); scale_list l = apply_scale s o l { mn = find_limit min_pair l; mx = find_limit max_pair l; s = 255.0 / (mx - mn); o = -(mn * s); } find_limit fn l = find_limit fn (map (find_limit fn) l), is_listof is_list l = foldr1 fn l; apply_scale s o x = x * s + o, is_number x = map (apply_scale s o) x; } scaleps x = oo_unary_function scale_op x, is_class x = im_scaleps x, is_image x = error (errors.badargs ++ "scale") { scale_op = Operator "scaleps" scaleps Operator_type.COMPOUND_REWRAP false; } fwfft x = oo_unary_function fwfft_op x, is_class x = im_fwfft x, is_image x = error (errors.badargs ++ "fwfft") { fwfft_op = Operator "fwfft" fwfft Operator_type.COMPOUND_REWRAP false; } invfft x = oo_unary_function invfft_op x, is_class x = im_invfftr x, is_image x = error (errors.badargs ++ "invfft") { invfft_op = Operator "invfft" invfft Operator_type.COMPOUND_REWRAP false; } falsecolour x = oo_unary_function falsecolour_op x, is_class x = im_falsecolour x, is_image x = error (errors.badargs ++ "falsecolour") { falsecolour_op = Operator "falsecolour" falsecolour Operator_type.COMPOUND_REWRAP false; } polar x = oo_unary_function polar_op x, is_class x = im_c2amph x, is_image x = polar_cmplx x, is_complex x = error (errors.badargs ++ "polar") { polar_op = Operator "polar" polar Operator_type.COMPOUND false; polar_cmplx r = (l, a) { a = 270, x == 0 && y < 0 = 90, x == 0 && y >= 0 = 360 + atan (y / x), x > 0 && y < 0 = atan (y / x), x > 0 && y >= 0 = 180 + atan (y / x); l = (x ** 2 + y ** 2) ** 0.5; x = re r; y = im r; } } rectangular x = oo_unary_function rectangular_op x, is_class x = im_c2rect x, is_image x = rectangular_cmplx x, is_complex x = error (errors.badargs ++ "rectangular") { rectangular_op = Operator "rectangular" rectangular Operator_type.COMPOUND false; rectangular_cmplx p = (x, y) { l = re p; a = im p; x = l * cos a; y = l * sin a; } } recomb matrix image = colour_unary recomb_op image { recomb_op x = im_recomb x matrix, is_image x = error (errors.badargs ++ "recomb"); } extract_area x y w h obj = oo_unary_function extract_area_op obj, is_class obj = extract_area_prim obj { x' = to_real x; y' = to_real y; w' = to_real w; h' = to_real h; extract_area_op = Operator "extract_area" extract_area_prim Operator_type.COMPOUND_REWRAP false; extract_area_prim obj = im_extract_area obj x' y' w' h', is_image obj = map (extract_range x' w') (extract_range y' h' obj), is_matrix obj = error (errors.badargs ++ "extract_area"); extract_range from length list = (take length @ drop from) list; } extract_band b obj = subscript obj b; extract_row y obj = oo_unary_function extract_row_op obj, is_class obj = extract_row_prim obj { y' = to_real y; extract_row_op = Operator "extract_row" extract_row_prim Operator_type.COMPOUND_REWRAP false; extract_row_prim obj = im_extract_area obj 0 y' width 1, is_image obj = [obj?y'], is_matrix obj = error (errors.badargs ++ "extract_row") { width = im_header_int "Xsize" obj; } } extract_column x obj = oo_unary_function extract_column_op obj, is_class obj = extract_column_prim obj { x' = to_real x; extract_column_op = Operator "extract_column" extract_column_prim Operator_type.COMPOUND_REWRAP false; extract_column_prim obj = im_extract_area obj x' 0 1 height, is_image obj = map (converse cons [] @ converse subscript x') obj, is_matrix obj = error (errors.badargs ++ "extract_column") { height = im_header_int "Ysize" obj; } } join_lr a b = oo_binary_function join_lr_op a b, is_class a = oo_binary'_function join_lr_op a b, is_class b = join_lr_prim a b { join_lr_op = Operator "join_lr" join_lr_prim Operator_type.COMPOUND_REWRAP false; join_lr_prim a b = im_extract_area (im_insert a b a_width 0) 0 0 (a_width + b_width) out_height, is_image a && is_image b = map2 join a b, is_matrix a && is_matrix b = error (errors.badargs ++ "join_lr") { a_height = im_header_int "Ysize" a; b_height = im_header_int "Ysize" b; a_width = im_header_int "Xsize" a; b_width = im_header_int "Xsize" b; out_height = min_pair a_height b_height; } } join_tb a b = oo_binary_function join_tb_op a b, is_class a = oo_binary'_function join_tb_op a b, is_class b = join_tb_prim a b { join_tb_op = Operator "join_tb" join_tb_prim Operator_type.COMPOUND_REWRAP false; join_tb_prim a b = im_extract_area (im_insert a b 0 a_height) 0 0 out_width (a_height + b_height), is_image a && is_image b = map (take out_matrix_width) a ++ map (take out_matrix_width) b, is_matrix a && is_matrix b = error (errors.badargs ++ "join_tb") { a_height = im_header_int "Ysize" a; b_height = im_header_int "Ysize" b; a_width = im_header_int "Xsize" a; b_width = im_header_int "Xsize" b; out_width = min_pair a_width b_width; out_matrix_width = min_pair a_matrix_width b_matrix_width { a_matrix_width = len a?0; b_matrix_width = len b?0; } } } insert x y small big = oo_binary_function insert_op small big, is_class small = oo_binary'_function insert_op small big, is_class big = im_insert big small (to_real x) (to_real y), is_image small && is_image big = error (errors.badargs ++ "insert") { insert_op = Operator "insert" (insert x y) Operator_type.COMPOUND_REWRAP false; } measure x y w h u v image = oo_unary_function measure_op image, is_class image = im_measure image (to_real x) (to_real y) (to_real w) (to_real h) (to_real u) (to_real v), is_image image = error (errors.badargs ++ "measure") { measure_op = Operator "measure" (measure x y w h u v) Operator_type.COMPOUND_REWRAP false; } rotate angle image = oo_binary_function rotate_op angle image, is_class angle = oo_binary'_function rotate_op angle image, is_class image = im_similarity image (cos angle) (sin angle) 0 0, is_real angle && is_image image = error (errors.badargs ++ "rotate") { rotate_op = Operator "rotate" rotate Operator_type.COMPOUND_REWRAP false; } conj x = oo_unary_function conj_op x, is_class x = (re x, -im x), is_complex x || (is_image x && format == Image_format.COMPLEX) || (is_image x && format == Image_format.DPCOMPLEX) // assume it's some sort of real = x { format = im_header_int "BandFmt" x; conj_op = Operator "conj" conj Operator_type.COMPOUND false; } clip2fmt format image = oo_unary_function (clip2fmt_op format) image, is_class image = im_clip2fmt image format, is_image image = error (errors.badargs ++ "clip2fmt") { clip2fmt_op format = Operator "clip2fmt" (clip2fmt format) Operator_type.COMPOUND_REWRAP false; } /* Morph a mask with a [[real]] matrix ... turn m2 into an image, morph it * with m1, turn it back to a matrix again. */ _morph_2_masks fn m1 m2 = m'' { image = (unsigned char) im_mask2vips (Matrix m2); m2_width = im_header_int "Xsize" image; m2_height = im_header_int "Ysize" image; // need to embed m2 in an image large enough for us to be able to // position m1 all around the edges, with a 1 pixel overlap image' = im_embed image 0 (m1.width - 1) (m1.height - 1) (m2_width + 2 * (m1.width - 1)) (m2_height + 2 * (m1.height - 1)); // morph! image'' = fn m1 image'; // back to mask m' = im_vips2mask ((double) image''); // Turn 0 in output to 128 (don't care). m'' = map (map fn) m'.value { fn a = 128, a == 0; = a; } } dilate mask image = oo_unary_function dilate_op image, is_class image = im_dilate image mask, is_image image = error (errors.badargs ++ "dilate") { dilate_op = Operator "dilate" dilate_object Operator_type.COMPOUND_REWRAP false; dilate_object x = _morph_2_masks dilate mask x, is_matrix x = dilate mask x; } erode mask image = oo_unary_function erode_op image, is_class image = im_erode image mask, is_image image = error (errors.badargs ++ "erode") { erode_op = Operator "erode" erode_object Operator_type.COMPOUND_REWRAP false; erode_object x = _morph_2_masks erode mask x, is_matrix x = erode mask x; } conv mask image = oo_unary_function conv_op image, is_class image = im_conv image mask, is_image image = error (errors.badargs ++ "conv") { conv_op = Operator "conv" (conv mask) Operator_type.COMPOUND_REWRAP false; } rank w h n image = oo_unary_function rank_op image, is_class image = im_rank image w h n, is_image image = error (errors.badargs ++ "rank") { rank_op = Operator "rank" (rank w h n) Operator_type.COMPOUND_REWRAP false; } hist_find image = oo_unary_function hist_find_op image, is_class image = im_histgr image (-1), is_image image = error (errors.badargs ++ "hist_find") { hist_find_op = Operator "hist_find" hist_find Operator_type.COMPOUND_REWRAP false; } hist_find_nD bins image = oo_unary_function hist_find_nD_op image, is_class image = im_histnD image bins, is_image image = error (errors.badargs ++ "hist_find_nD") { hist_find_nD_op = Operator "hist_find_nD" hist_find_nD Operator_type.COMPOUND_REWRAP false; } hist_map hist image = oo_binary_function hist_map_op hist image, is_class hist = oo_binary'_function hist_map_op hist image, is_class image = im_maplut image hist, is_image hist && is_image image = error (errors.badargs ++ "hist_map") { hist_map_op = Operator "hist_map" hist_map Operator_type.COMPOUND_REWRAP false; } hist_cum hist = oo_unary_function hist_cum_op hist, is_class hist = im_histcum hist, is_image hist = error (errors.badargs ++ "hist_cum") { hist_cum_op = Operator "hist_cum" hist_cum Operator_type.COMPOUND_REWRAP false; } hist_norm hist = oo_unary_function hist_norm_op hist, is_class hist = im_histnorm hist, is_image hist = error (errors.badargs ++ "hist_norm") { hist_norm_op = Operator "hist_norm" hist_norm Operator_type.COMPOUND_REWRAP false; } hist_match in ref = oo_binary_function hist_match_op in ref, is_class in = oo_binary'_function hist_match_op in ref, is_class ref = im_histspec in ref, is_image in && is_image ref = error (errors.badargs ++ "hist_match") { hist_match_op = Operator "hist_match" hist_match Operator_type.COMPOUND_REWRAP false; } hist_equalize x = hist_map ((hist_norm @ hist_cum @ hist_find) x) x; hist_equalize_local w h image = oo_unary_function hist_equalize_local_op image, is_class image = im_lhisteq image w h, is_image image = error (errors.badargs ++ "hist_equalize_local") { hist_equalize_local_op = Operator "hist_equalize_local" (hist_equalize_local w h) Operator_type.COMPOUND_REWRAP false; } resize xfac yfac interp image = oo_unary_function resize_op image, is_class image = resize_im image, is_image image = error (errors.badargs ++ "resize") { resize_op = Operator "resize" resize_im Operator_type.COMPOUND_REWRAP false; resize_im im // upscale by integer factor, nearest neighbour = im_zoom im xfac yfac, is_int xfac && is_int yfac && xfac >= 1 && yfac >= 1 && interp == Interpolate.nearest_neighbour // downscale by integer factor, nearest neighbour = im_subsample im xfac' yfac', is_int xfac' && is_int yfac' && xfac' >= 1 && yfac' >= 1 && interp == Interpolate.nearest_neighbour // upscale by any factor, nearest neighbour // can't really do this right ... upscale by integer part, then // bilinear to exact size = scale (break xfac)?1 (break yfac)?1 (im_zoom im (break xfac)?0 (break yfac)?0), xfac >= 1 && yfac >= 1 && interp == Interpolate.nearest_neighbour // downscale by any factor, nearest neighbour // can't really do this right ... downscale by integer part, // then bilinear to exact size = scale (1 / (break xfac')?1) (1 / (break yfac')?1) (im_subsample im (break xfac')?0 (break yfac')?0), xfac' >= 1 && yfac' >= 1 && interp == Interpolate.nearest_neighbour // upscale by any factor, bilinear = scale xfac yfac im, xfac >= 1 && yfac >= 1 && interp == Interpolate.bilinear // downscale by any factor, bilinear // block shrink by integer factor, then bilinear resample to // exact = scale (1 / (break xfac')?1) (1 / (break yfac')?1) (im_shrink im (break xfac')?0 (break yfac')?0), xfac' >= 1 && yfac' >= 1 && interp == Interpolate.bilinear = error ("resize: unimplemented argument combination:\n" ++ " xfac = " ++ print xfac ++ "\n" ++ " yfac = " ++ print yfac ++ "\n" ++ " interp = " ++ print interp ++ " (" ++ Interpolate.names.lookup 1 0 interp ++ ")") { xfac' = 1 / xfac; yfac' = 1 / yfac; // convert a float scale to integer plus fraction // eg. scale by 2.5 becomes [2, 1.25] (x * 2.5 == x * 2 * 1.25) break f = [floor f, f / floor f]; // binlinear resize scale xfac yfac im = im_affine im xfac 0 0 yfac 0 0 0 0 (width * xfac) (height * yfac) { width = im_header_int "Xsize" im; height = im_header_int "Ysize" im; } } } /* id x: the identity function * * id :: * -> * */ id x = x; /* const x y: junk y, return x * * (const 3) is the function that always returns 3. * const :: * -> ** -> * */ const x y = x; /* converse fn a b: swap order of args to fn * * converse fn a b == fn b a * converse :: (* -> ** -> ***) -> ** -> * -> *** */ converse fn a b = fn b a; /* fix fn x: find the fixed point of a function */ fix fn x = limit (iterate fn x); /* until pred fn n: apply fn to n until pred succeeds; return that value * * until (more 1000) (multiply 2) 1 = 1024 * until :: (* -> bool) -> (* -> *) -> * -> * */ until pred fn n = n, pred n = until pred fn (fn n); /* Infinite list of primes. */ primes = 1 : (sieve [2..]) { sieve l = hd l : sieve (filter (nmultiple (hd l)) (tl l)); nmultiple n x = x / n != (int) (x / n); } /* Map a 3-ary function over three objects. */ map_trinary fn a b c = map3 (map_trinary fn) a b c, is_list a && is_list b && is_list c = map2 (map_trinary fn a) b c, is_list b && is_list c = map2 (map_trinary (converse31 fn) b) a c, is_list a && is_list c = map2 (map_trinary (converse32 fn) c) a b, is_list a && is_list b = map (map_trinary fn a b) c, is_list c = map (map_trinary (converse32 fn) a c) b, is_list b = map (map_trinary (converse34 fn) b c) a, is_list a = fn a b c { converse31 fn a b c = fn b a c; converse32 fn a b c = fn c a b; converse33 fn a b c = fn a c b; converse34 fn a b c = fn b c a; } /* Map a 2-ary function over a pair of objects. */ map_binary fn a b = map2 (map_binary fn) a b, is_list a && is_list b = map (map_binary fn a) b, is_list b = map (map_binary (converse fn) b) a, is_list a = fn a b; /* Map a 1-ary function over an object. */ map_unary fn a = map (map_unary fn) a, is_list a = fn a; /* Chop up an image into a list of lists of smaller images. Pad edges with * black. */ imagearray_chop block_size overlap i = map chop' [0, step .. height] { width = im_header_int "Xsize" i; height = im_header_int "Ysize" i; bands = im_header_int "Bands" i; format = im_header_int "BandFmt" i; type = im_header_int "Type" i; /* Unique pixels per tile. */ step = block_size - overlap; /* Calculate padding ... pad up to block_size pixel boundary. */ sx = block_size + (width - width % step); sy = block_size + (height - height % step); /* Expand image with black to pad size. */ background = image_new sx sy bands format Image_coding.NOCODING type 0 0 0; pad = im_insert background i 0 0; /* Chop up a row. */ chop' y = map chop'' [0, step .. width] { chop'' x = im_extract_area pad x y block_size block_size; } } /* Reassemble image. */ imagearray_assemble hoverlap voverlap il = vjoin (map hjoin il) { /* Join a list of tiles horizontally. */ hjoin l = foldl1 lrj l { lrj l r = im_lrmerge l r (hoverlap - im_header_int "Xsize" l) 0 10; } /* Join a list of tiles vertically. */ vjoin l = foldl1 tbj l { tbj t b = im_tbmerge t b 0 (voverlap - im_header_int "Ysize" t) 10; } } /* Generate an nxn identity matrix. */ identity_matrix n = error "identity_matrix: n > 0", n < 1 = map line [0 .. n - 1] { line p = take p [0, 0 ..] ++ [1] ++ take (n - p - 1) [0, 0 ..]; } nip2-8.7.0/share/nip2/compat/7.9/Mosaic.def0000644000175000017500000002121713224651032014765 00000000000000 /* Check and group a point list by image. */ _mosaic_sort_test l = error "mosaic: not all points", !is_listof (is_instanceof "Point") l = error "mosaic: points not on two images", len images != 2 = error "mosaic: images do not match in format and coding", !all_equal (map get_format l) || !all_equal (map get_coding l) = error "mosaic: not same number of points on each image", !foldr1 equal (map len l') = l' { // test for all elements of a list equal all_equal l = land (map (equal (hd l)) (tl l)); get_format x = x.image.format; get_coding x = x.image.coding; // all the different images get_image x = x.image; images = mkset pointer_equal (map get_image l); // find all points defined on image test_image image p = p.image === image; find l image = filter (test_image image) l; // group point list by image l' = map (find l) images; } /* Sort a point group to get right before left, and within each group to get * above before below. */ _mosaic_sort_lr l = l'' { // sort to get upper point first above a b = a.top < b.top; l' = map (sortc above) l; // sort to get right group before left group right a b = (a?0).left > (b?0).left; l'' = sortc right l'; } /* Sort a point group to get top before bottom, and within each group to get * left before right. */ _mosaic_sort_tb l = l'' { // sort to get upper point first left a b = a.left < b.left; l' = map (sortc left) l; // sort to get right group before left group below a b = (a?0).top > (b?0).top; l'' = sortc below l'; } /* Put 'em together! Group by image, sort vertically (or horizontally) with * one of the above, transpose to get pairs matched up, and flatten again. */ _mosaic_sort fn = concat @ transpose @ fn @ _mosaic_sort_test; /* translate and blend two images together left/right or up/down */ Mosaic_translate = class { _check_ab_args a b = [ [a, "a", check_Point], [b, "b", check_Point] ]; // shortcut to prefs _prefs = Workspaces.Preferences; _search_area = _prefs.MOSAIC_WINDOW_SIZE; _object_size = _prefs.MOSAIC_OBJECT_SIZE; _blend_width = Slider 0 100 _prefs.MOSAIC_MAX_BLEND_WIDTH; _refine = Toggle "Refine selected tie-points" _prefs.MOSAIC_REFINE; /* translate and blend two images left/right */ Left_right a b = class Image value { _check_args = _check_ab_args a b ++ super._check_args; blend_width = _blend_width; refine = _refine; value = im_lrmosaic a'.image.value b'.image.value 0 ra'.left ra'.top rb'.left rb'.top (_object_size / 2) (_search_area / 2) 0 blend_width.value, refine = im_lrmerge a'.image.value b'.image.value (rb'.left - ra'.left) (rb'.top - ra'.top) blend_width.value { sorted = _mosaic_sort _mosaic_sort_lr [a, b]; a' = sorted?0; b' = sorted?1; ra' = a'.image_rect; rb' = b'.image_rect; } } /* translate and blend two images top/bottom */ Top_bottom a b = class Image value { _check_args = _check_ab_args a b ++ super._check_args; blend_width = _blend_width; refine = _refine; value = im_tbmosaic a'.image.value b'.image.value 0 ra'.left ra'.top rb'.left rb'.top (_object_size / 2) (_search_area / 2) 0 blend_width.value, refine = im_tbmerge a'.image.value b'.image.value (rb'.left - ra'.left) (rb'.top - ra'.top) blend_width.value { sorted = _mosaic_sort _mosaic_sort_tb [a, b]; a' = sorted?0; b' = sorted?1; ra' = a'.image_rect; rb' = b'.image_rect; } } } /* forcibly translate and blend two images together left/right or up/down */ Mosaic_force = class { _check_ab_args a b = [ [a, "a", check_Point], [b, "b", check_Point] ]; // shortcut to prefs _prefs = Workspaces.Preferences; _blend_width = Slider 0 100 _prefs.MOSAIC_MAX_BLEND_WIDTH; /* forcibly translate and blend two images left/right */ Left_right a b = class Image value { _check_args = _check_ab_args a b ++ super._check_args; blend_width = _blend_width; value = im_lrmerge a'.image.value b'.image.value (rb'.left - ra'.left) (rb'.top - ra'.top) blend_width.value { sorted = _mosaic_sort _mosaic_sort_lr [a, b]; a' = sorted?0; b' = sorted?1; ra' = a'.image_rect; rb' = b'.image_rect; } } /* forcibly translate and blend two images top/bottom */ Top_bottom a b = class Image value { _check_args = _check_ab_args a b ++ super._check_args; blend_width = _blend_width; value = im_tbmerge a'.image.value b'.image.value (rb'.left - ra'.left) (rb'.top - ra'.top) blend_width.value { sorted = _mosaic_sort _mosaic_sort_tb [a, b]; a' = sorted?0; b' = sorted?1; ra' = a'.image_rect; rb' = b'.image_rect; } } } /* translate, rotate, scale and blend two images together left/right or up/down */ Mosaic_affine = class { _check_abcd_args a b c d = [ [a, "a", check_Point], [b, "b", check_Point], [c, "c", check_Point], [d, "d", check_Point] ]; // shortcut to prefs _prefs = Workspaces.Preferences; _search_area = _prefs.MOSAIC_WINDOW_SIZE; _object_size = _prefs.MOSAIC_OBJECT_SIZE; _blend_width = Slider 0 100 _prefs.MOSAIC_MAX_BLEND_WIDTH; _refine = Toggle "Refine selected tie-points" _prefs.MOSAIC_REFINE; /* translate, rotate, scale and blend two images left/right */ Left_right a b c d = class Image value { _check_args = _check_abcd_args a b c d ++ super._check_args; blend_width = _blend_width; refine = _refine; value = im_lrmosaic1 a'.image.value b'.image.value 0 ra'.left ra'.top rb'.left rb'.top rc'.left rc'.top rd'.left rd'.top (_object_size / 2) (_search_area / 2) 0 blend_width.value, refine = im_lrmerge1 a'.image.value b'.image.value ra'.left ra'.top rb'.left rb'.top rc'.left rc'.top rd'.left rd'.top blend_width.value { sorted = _mosaic_sort _mosaic_sort_lr [a, b, c, d]; a' = sorted?0; b' = sorted?1; c' = sorted?2; d' = sorted?3; ra' = a'.image_rect; rb' = b'.image_rect; rc' = c'.image_rect; rd' = d'.image_rect; } } /* translate, rotate, scale and blend two images top/bottom */ Top_bottom a b c d = class Image value { _check_args = _check_abcd_args a b c d ++ super._check_args; blend_width = _blend_width; refine = _refine; value = im_tbmosaic1 a'.image.value b'.image.value 0 ra'.left ra'.top rb'.left rb'.top rc'.left rc'.top rd'.left rd'.top (_object_size / 2) (_search_area / 2) 0 blend_width.value, refine = im_tbmerge1 a'.image.value b'.image.value ra'.left ra'.top rb'.left rb'.top rc'.left rc'.top rd'.left rd'.top blend_width.value { sorted = _mosaic_sort _mosaic_sort_tb [a, b, c, d]; a' = sorted?0; b' = sorted?1; c' = sorted?2; d' = sorted?3; ra' = a'.image_rect; rb' = b'.image_rect; rc' = c'.image_rect; rd' = d'.image_rect; } } } #separator /* disassemble mosaic, adjust brightnesses to match, and reassemble */ Mosaic_balance x = map_unary balance x { balance x = oo_unary_function balance_op x, is_class x = im_global_balancef x Workspaces.Preferences.MOSAIC_BALANCE_GAMMA, is_image x = error (errors.badargs ++ "balance") { balance_op = Operator "balance" balance Operator_type.COMPOUND_REWRAP false; } } /* brighten along a left/right or up/down axis */ Tilt_brightness = class { /* brighten along a left/right axis */ Left_right x = map_unary tilt_lr x { tilt_lr image = class Image value { _check_args = [ [image, "image", check_Image] ] ++ super._check_args; _vislevel = 3; tilt = Slider (-1) 1 0; value = final { ramp = im_fgrey image.width image.height; ramp' = bandjoin (map (const ramp) [1..image.bands]); scale = (ramp' - 0.5) * tilt + 1; final = image.value * scale; } } } /* brighten along a top/bottom axis */ Top_bottom x = map_unary tilt_tb x { tilt_tb image = class Image value { _check_args = [ [image, "image", check_Image] ] ++ super._check_args; _vislevel = 3; tilt = Slider (-1) 1 0; value = final { ramp = rot90 (im_fgrey image.height image.width); ramp' = bandjoin (map (const ramp) [1..image.bands]); scale = (ramp' - 0.5) * tilt + 1; final = image.value * scale; } } } } #separator /* disassemble mosaic, substitute different image files, and reassemble */ Mosaic_rebuild x = map_unary remosaic x { remosaic image = class Image value { _check_args = [ [image, "image", check_Image] ] ++ super._check_args; _vislevel = 3; old_hint = "For the name of each file making up the mosaic, " ++ "exchange this string:"; old = "foo"; new_hint = "for this string:"; new = "bar"; value = im_remosaic image.value old new; } } nip2-8.7.0/share/nip2/compat/7.9/Print.def0000644000175000017500000001541613224651032014652 00000000000000/* cored sharpen of L only in LAB image ... tuned for typical printers */ Sharpen_for_print in = map_unary widget in { widget in = class Image value { _check_args = [ [in, "in", check_Image] ] ++ super._check_args; _vislevel = 3; target_dpi = Option "Sharpen for print at" [ "300 dpi", "150 dpi", "75 dpi" ] 0; // sharpen params for 300, 150 and 75 dpi // just change the size of the area we search _param_table = [ [7, 2.5, 40, 20, 0.5, 1.5], [5, 2.5, 40, 20, 0.5, 1.5], [3, 2.5, 40, 20, 0.5, 1.5] ]; _params = _param_table?target_dpi; value = im_sharpen (colour_transform_to Image_type.LABQ in.value) _params?0 _params?1 _params?2 _params?3 _params?4 _params?5; } } /* adjust tone curve on L* */ Tone_for_print in = map_unary widget in { widget in = class Image value { _check_args = [ [in, "in", check_Image] ] ++ super._check_args; _vislevel = 3; black = Slider 0 100 0; white = Slider 0 100 100; shadow_point = Slider 0.1 0.3 0.2; mid_point = Slider 0.4 0.6 0.5; highlight_point = Slider 0.7 0.9 0.8; shadow_adjust = Slider (-15) 15 0; mid_adjust = Slider (-30) 30 0; highlight_adjust = Slider (-15) 15 0; preview_curve = Image (im_tone_build black.value white.value shadow_point.value mid_point.value highlight_point.value shadow_adjust.value mid_adjust.value highlight_adjust.value); value = im_tone_map (colour_transform_to Image_type.LABQ in.value) preview_curve.value; } } /* morph image colours in LAB space ... useful for tweaking colour for print */ Morph_for_print in = map_unary widget in { widget in = class Image value { _check_args = [ [in, "in", check_Image] ] ++ super._check_args; _vislevel = 3; L_scale = 1.15; L_offset = -4.2; ab_scale = Slider 1 1.5 1.15; a_offset = Slider (-10) 10 0; b_offset = Slider (-10) 10 5; grey_correction = Matrix_con 1 0 [ [5, 5, -1 ], [10, 4, -1 ], [15, 2, -1 ], [20, 1, 1 ], [25, 1, 2 ], [30, 0, 1 ], [35, 0, 1 ], [40, 0, 1 ], [45, 0, 1 ], [50, 0, 1 ], [55, 0, 0 ], [99, 0, 0 ] ]; value = im_lab_morph in.value (Vector [0, a_offset.value, b_offset.value] + grey_correction) L_offset L_scale ab_scale.value ab_scale.value; } } #separator _sample_print_profile = "$VIPSHOME/share/$PACKAGE/data/cmyk.icm"; _sample_monitor_profile = "$VIPSHOME/share/$PACKAGE/data/sRGB.icm"; _render_intents = Option "Render intent" [ "Perceptual", "Relative", "Saturation", "Absolute" ] 3; /* transform from PCS to device space */ ICC_export in = map_unary widget in { widget in = class Image value { _check_args = [ [in, "in", check_Image] ] ++ super._check_args; _vislevel = 3; profile = Filename _sample_print_profile; intent = _render_intents; depth = Option "Output depth" ["8 bit", "16 bit"] 0; value = im_icc_export_depth in.value [8, 16]?depth (expand profile.value) intent.value; } } /* transform from device space to PCS */ ICC_import in = map_unary widget in { widget in = class Image value { _check_args = [ [in, "in", check_Image] ] ++ super._check_args; _check_all = [ [in.bands == 3 || in.bands == 4, "in.bands == 3 || in.bands == 4" ] ] ++ super._check_all; _vislevel = 3; profile = Filename _sample_monitor_profile, in.bands == 3 = Filename _sample_print_profile; intent = _render_intents; value = im_icc_import in.value (expand profile.value) intent.value; } } /* transform between two device spaces */ ICC_transform in = map_unary widget in { widget in = class Image value { _check_args = [ [in, "in", check_Image] ] ++ super._check_args; _vislevel = 3; in_profile = Filename _sample_monitor_profile; out_profile = Filename _sample_print_profile; intent = _render_intents; value = im_icc_transform in.value (expand in_profile.value) (expand out_profile.value) intent.value; } } /* transform from absolute to relative colorimetry */ ICC_ac2rc in = map_unary widget in { widget in = class Image value { _check_args = [ [in, "in", check_Image] ] ++ super._check_args; _vislevel = 3; profile = Filename _sample_print_profile; value = im_icc_ac2rc in.value (expand profile.value); } } #separator /* convert between XYZ and Lab for D50 */ D50XYZ_to_D50Lab in = map_unary (colour_unary im_D50XYZ2Lab) in; /* convert between XYZ and Lab for D50 */ D50Lab_to_D50XYZ in = map_unary (colour_unary im_D50Lab2XYZ) in; #separator /* add an editable drop shadow to an image */ Drop_shadow x = map_unary shadow x { shadow image = class Image value { _check_args = [ [image, "image", check_Image] ] ++ super._check_args; _vislevel = 3; shadow_width = Slider 0 50 5; shadow_height = Slider 0 50 5; shadow_softness = Slider 0 20 5; use_mask = Toggle "Use mask to make shadow" false; mask_image = foldr1 bitwise_and (bandsplit (image > 128)); background_colour = 255; shadow_colour = 128; value = final { blur_size = shadow_softness.value * 2 + 1; // matrix we blur with to soften shadows mask_g = im_gauss_imask (blur_size / 3) 0.2; mask_g_line = mask_g.value ? (mask_g.height / 2); mask_g_sum = foldr1 add mask_g_line; blur_matrix = Matrix_con mask_g_sum 0 [mask_g_line]; mask_size = mask_g.width; // size of final image we build final_width = image.width + 2 * mask_size + shadow_width.value; final_height = image.height + 2 * mask_size + shadow_height.value; // make a plain image mk_background colour = image_new final_width final_height image.bands image.format Image_coding.NOCODING image.type colour 0 0; // make a mask image ... place at (x,y) in the final // image mk_mask x y = im_insert black mask_image.value x y, use_mask = im_insert black white x y { black = image_new final_width final_height 1 Image_format.UCHAR Image_coding.NOCODING Image_type.B_W 0 0 0; white = image_new image.width image.height 1 Image_format.UCHAR Image_coding.NOCODING Image_type.B_W 255 0 0; } // make the shadow mask image ... offset mask and // soften shadow_mask = mk_mask (mask_size + shadow_width.value) (mask_size + shadow_height.value); shadow_mask' = im_convsep shadow_mask blur_matrix; // make underlay ... use shadow mask to blend between // background colour and shadow colour background = mk_background background_colour; shadow = mk_background shadow_colour; underlay = im_blend shadow_mask' shadow background; // overlay ... place image at final position overlay = mk_background 0; overlay' = im_insert overlay image.value mask_size mask_size; // overlay mask overlay_mask = mk_mask mask_size mask_size; final = if overlay_mask then overlay' else underlay; } } } nip2-8.7.0/share/nip2/compat/7.9/Format.def0000644000175000017500000001125013224651032014776 00000000000000/* various operations to convert numeric precision */ Convert_format_to = class { /* convert to unsigned 8 bit [0, 255] */ unsigned_8bit x = map_unary cast_unsigned_char x; /* convert to signed 8 bit [-128, 127] */ signed_8bit x = map_unary cast_signed_char x; /* convert to unsigned 16 bit [0, 65535] */ unsigned_16bit x = map_unary cast_unsigned_short x; /* convert to signed 16 bit [-32768, 32767] */ signed_16bit x = map_unary cast_signed_short x; /* convert to unsigned 32 bit [0, 4294967295] */ unsigned_32bit x = map_unary cast_unsigned_int x; /* convert to signed 32 bit [-2147483648, 2147483647] */ signed_32bit x = map_unary cast_signed_int x; /* convert to IEEE 32 bit floating point */ float_32bit x = map_unary cast_float x; /* convert to IEEE 64 bit floating point */ float_64bit x = map_unary cast_double x; /* convert to 64 bit complex (2 x IEEE 32 bit floating point) */ complex_64bit x = map_unary cast_complex x; /* convert to 128 bit complex (2 x IEEE 64 bit floating point) */ complex_128bit x = map_unary cast_double_complex x; } /* linear scale of pixel values to fit range 0-255 */ Scale_to_byte x = map_unary scale x; #separator /* try to make a matrix out of an object */ Convert_to_matrix in = map_unary to_matrix in; /* try to make an image out of an object */ Convert_to_image in = map_unary to_image in; #separator /* measure average value of a set of patches */ Matrix_from_colour_chart x = map_unary chart x { chart image = class Matrix value { _check_args = [ [image, "image", check_Image] ] ++ super._check_args; pacross = 6; pdown = 4; value = (im_measure image.value 0 0 image.width image.height pacross pdown).value; /* Hmm, not very helpful, we throw edits away. */ Matrix_vips_edit value scale offset filename display = chart image; } } /* make a synthetic colour chart image from a matrix */ Colour_chart_from_matrix matrix = map_unary build_chart matrix { build_chart matrix = class Image value { _check_args = [ [matrix, "matrix", check_Matrix] ] ++ super._check_args; patches_across = 6; patches_down = 4; patch_width = 50; patch_height = 50; border_width = 0; value = imagearray_assemble overlap overlap patch_table { overlap = -border_width; // patch numbers for row starts rowstart = map (multiply patches_across) [0 .. patches_down - 1]; // assemble patches ... each one a pixel value patches = map (take patches_across) (map (converse drop matrix.value) rowstart); // make an n-band constant image from eg. [1,2,3] patch v = image_new patch_width patch_height (len v) Image_format.FLOAT Image_coding.NOCODING Image_type.sRGB (Vector v) 0 0; // make an image for each patch patch_table = map (map patch) patches; } } } #separator /* make a colour from the average values in an image */ Colour_from_image image = map_unary test image { test x = build_chart x, is_instanceof "Image" x = build_chart (Image pixel), is_instanceof "Point" x = error ("Colour_from_image: arg not Image or Point: " ++ print x) { pixel = x.image.extract_area x.left x.top 1 1; } build_chart image = class Colour colour_space value { _check_args = [ [image, "image", check_Image] ] ++ super._check_args; colour_space = table.lookup 1 0 type, table.present 1 type = error ("Colour_from_image: unable to make Colour " ++ "from " ++ Image_type.type_names.lookup 1 0 type ++ " image") { table = Image_type.colour_spaces; type = im_header_int "Type" image.value; } value = map mean (bandsplit image.value); } } /* make a constant image from a colour patch */ Image_from_colour x = map_unary build x { build c = class Image value { _check_args = [ [c, "c", check_Colour] ] ++ super._check_args; width = 64; height = 64; value = image_new width height 3 Image_format.FLOAT Image_coding.NOCODING (get_type c) c 0 0; } } #separator /* try to break object in into a list of components */ Decompose in = map_unary dec in { dec x = bandsplit x, is_instanceof "Image" x = map Vector x.value, is_instanceof "Matrix_base" x = x.value, is_instanceof "Vector" x || is_instanceof "Real" x = error "Decompose: not Image/Matrix/Vector/Real"; } /* try to put a list of objects together into a large single object */ Compose x = Vector x, is_real_list x = Matrix x, is_matrix x = bandjoin x, is_listof (is_instanceof "Image") x = Vector (map get_value x), is_listof (is_instanceof "Real") x = Matrix (map get_value x), is_listof (is_instanceof "Vector") x = map_unary Compose x, is_list x = error "Compose: not list of Image/Vector/Real/image/real" { get_value x = x.value; } nip2-8.7.0/share/nip2/compat/7.9/Morphology.def0000644000175000017500000000626313224651032015715 00000000000000/* Some useful masks. */ _morph_mask8 = Matrix_mor [[255, 255, 255], [255, 255, 255], [255, 255, 255]]; _morph_mask4 = Matrix_mor [[128, 255, 128], [255, 255, 255], [128, 255, 128]]; _morph_mask1 = Matrix_mor [[0, 0, 0], [0, 255, 0], [0, 0, 0]]; _morph_thin = Matrix_mor [[0, 0, 0], [128, 255, 128], [255, 255, 255]]; /* dilate x with 8-connected mask */ Dilate8 x = map_unary (dilate _morph_mask8) x; /* dilate x with 4-connected mask */ Dilate4 x = map_unary (dilate _morph_mask4) x; /* erode x with 8-connected mask */ Erode8 x = map_unary (erode _morph_mask8) x; /* erode x with 4-connected mask */ Erode4 x = map_unary (erode _morph_mask4) x; #separator /* open with 8-connected mask */ Open x = map_unary (dilate _morph_mask8 @ erode _morph_mask8) x; /* close with 8-connected mask */ Close x = map_unary (erode _morph_mask8 @ dilate _morph_mask8) x; /* remove single points */ Clean x = map_unary clean x { clean x = x ^ erode _morph_mask1 x; } /* thin once */ Thin x = map_unary thinall x { masks = take 8 (iterate rot45 _morph_thin); thin1 m x = x ^ erode m x; thinall x = foldr thin1 x masks; } #separator /* dilate object x with mask m */ Dilate m x = map_unary (dilate m) x; /* erode object x with mask m */ Erode m x = map_unary (erode m) x; /* dilate mask m with itself n times */ Dilate_multiple m n = (iterate (dilate m) m)?n; /* erode mask m with itself n times */ Erode_multiple m n = (iterate (erode m) m)?n; #separator /* morph with a mask you can edit */ Custom_morphology in = map_unary morph in { morph image = class Image value { _check_args = [ [image, "Image", check_Image] ] ++ super._check_args; _vislevel = 3; mask = _morph_mask8; type = Option "Operation" ["Erode", "Dilate"] 1; hint_apply_n_times = "Number of times to apply mask:"; apply_n_times = 1; border = Toggle "Output image matches input image in size" true; value = im_embed image' 0 xoff yoff image.width image.height, border = image' { fatmask = (iterate (dilate mask) mask) ? (apply_n_times - 1); image' = im_erode_raw image.value fatmask, type.value == 0 = im_dilate_raw image.value fatmask; xoff = (fatmask.width + 1) / 2; yoff = (fatmask.height + 1) / 2; } } } /* search in from the edges of an image for the first non-zero pixel */ Find_profile in = map_unary widget in { widget image = class Image value { _check_args = [ [image, "Image", check_Image] ] ++ super._check_args; _vislevel = 3; edge = Option "Search from" [ "Top edge down", "Left edge to right", "Bottom edge up", "Right edge to left" ] 2; value = image_set_type Image_type.HISTOGRAM [ im_profile image.value 0, rot270 (im_profile image.value 1), im_profile (flipud image.value) 0, rot270 (im_profile (fliplr image.value) 1) ]?edge; } } /* count the average number of black-to-white transitions across an image */ Count_lines in = map_unary widget in { widget image = class Real value { _check_args = [ [image, "Image", check_Image] ] ++ super._check_args; _vislevel = 3; edge = Option "Count" [ "Horizontal lines", "Vertical lines" ] 0; value = im_cntlines image.value edge.value; } } nip2-8.7.0/share/nip2/compat/7.9/Filter.def0000644000175000017500000003042313224651032014776 00000000000000/* Some useful masks. */ _filter_blur = Matrix_con 9 0 [[1, 1, 1], [1, 1, 1], [1, 1, 1]]; _filter_sharp = Matrix_con 8 0 [[-1, -1, -1], [-1, 16, -1], [-1, -1, -1]]; _filter_laplacian = Matrix_con 1 128 [[-1, -1, -1], [-1, 8, -1], [-1, -1, -1]]; _filter_sobel = Matrix_con 1 128 [[1, 2, 1], [0, 0, 0], [-1, -2, -1]]; _filter_lindet = Matrix_con 1 0 [[1, 1, 1], [-2, -2, -2], [1, 1, 1]]; _filter_emboss = Matrix_con 1 128 [[-1, 0], [0, 1]]; /* 3x3 blur of image */ Blur x = map_unary (conv _filter_blur) x; /* 3x3 sharpen of image */ Sharpen x = map_unary (conv _filter_sharp) x; /* 1-pixel displacement emboss */ Emboss x = map_unary (conv _filter_emboss) x; /* 3x3 median filter of image */ Median x = map_unary (rank 3 3 5) x; /* 3x3 laplacian of image */ Laplacian x = map_unary (conv _filter_laplacian) x; /* 3x3 Sobel edge detect of image */ Sobel x = map_unary sobel x { sobel im = abs (a - 128) + abs (b - 128) { a = conv _filter_sobel im; b = conv (rot270 _filter_sobel) im; } } /* 3x3 line detect of image diagonals should be scaled down by root(2) I guess Kirk */ Linedet x = map_unary lindet x { lindet im = foldr1 max_pair images { masks = take 4 (iterate rot45 _filter_lindet); images = map (converse conv im) masks; } } #separator /* custom convolution of an image */ Custom_convolution in = map_unary widget in { widget image = class Image value { _check_args = [ [image, "Image", check_Image] ] ++ super._check_args; _vislevel = 3; matrix = Matrix_con 1 0 [[0, 0, 0], [0, 1, 0], [0, 0, 0]]; separable = Toggle "Seperable convolution" false, matrix.width == 1 || matrix.height == 1 = false; type = Option "Convolution type" ["Int", "Float"] 0; border = Toggle "Output image matches input image in size" true; value = im_embed image' 0 off off image.width image.height, border = image' { conv_op = im_conv_raw, !separable && type == 0 = im_convsep_raw, separable && type == 0 = im_convf_raw, !separable && type == 1 = im_convsepf_raw, separable && type == 1 = error "boink!"; image' = conv_op image.value matrix; off = (matrix.width + 1) / 2; } } } /* blur with a radius and shape */ Custom_blur in = map_unary widget in { widget in = class Image value { _check_args = [ [in, "in", check_Image] ] ++ super._check_args; _vislevel = 3; radius = Slider 1 50 1; shape = Option "Mask shape" [ "Square", "Gaussian" ] 0; value = im_convsep in.value mask { /* Make a square mask. */ mask_sq_line = map (const 1) [1 .. 2 * radius.value - 1]; mask_sq_sum = foldr1 add mask_sq_line; mask_sq_sep = Matrix_con mask_sq_sum 0 [mask_sq_line]; /* Make a gaussian mask. sigma is not really related * to radius very well, sort-of bodge it. */ mask_g = im_gauss_imask (radius.value / 2) 0.2; mask_g_line = mask_g.value ? (mask_g.height / 2); mask_g_sum = foldr1 add mask_g_line; mask_g_sep = Matrix_con mask_g_sum 0 [mask_g_line]; mask = mask_sq_sep, shape.value == 0 = mask_g_sep; } } } /* cored sharpen of L only in LAB image */ Custom_sharpen in = map_unary widget in { widget in = class Image value { _check_args = [ [in, "in", check_Image] ] ++ super._check_args; _vislevel = 3; size = Option "Mask size" [ "3 x 3", "5 x 5", "7 x 7", "9 x 9", "11 x 11" ] 0; smooth_threshold = Slider 0 5 1.5; brighten_max = Slider 1 50 10; darken_max = Slider 1 50 50; flat_sharp = Slider (-2) 5 1; jaggy_sharp = Slider (-2) 5 2; value = im_sharpen in.value [3, 5, 7, 9, 11]?size smooth_threshold.value brighten_max.value darken_max.value flat_sharp.value jaggy_sharp.value; } } /* custom rank filter of an image */ Custom_rank in = map_unary widget in { widget image = class Image value { _check_args = [ [image, "Image", check_Image] ] ++ super._check_args; _vislevel = 3; window_size_hint = "Length of side of window to pass " ++ "over image:"; window_size = 3; rank = (int) ((window_size * window_size + 1) / 2); border = Toggle "Output image matches input image in size" true; value = im_embed image' 0 off off image.width image.height, border = image' { image' = im_rank_raw image.value window_size window_size rank; off = (window_size + 1) / 2; } } } /* statistical difference of an image */ Statistical_difference in = map_unary widget in { widget image = class Image value { _check_args = [ [image, "Image", check_Image] ] ++ super._check_args; _vislevel = 3; window_size_hint = "Length of side of window to pass " ++ "over image:"; window_size = 11; target_mean = 128; target_mean_weight = Slider 0 1 0.8; target_deviation = 50; target_deviation_weight = Slider 0 1 0.8; border = Toggle "Output image matches input image in size" true; value = im_embed image' 0 off off image.width image.height, border = image' { image' = im_stdif_raw image.value target_mean_weight.value target_mean target_deviation_weight.value target_deviation window_size window_size; off = (window_size + 1) / 2; } } } #separator /* various ideal fourier filters */ Ideal_filter = class { _preview_size = 64; _high_low image = class Image value { _check_args = [ [image, "Image", check_Image] ] ++ super._check_args; _vislevel = 3; frequency_cutoff = Slider 0.01 0.99 0.5; type = Option "High or low" ["High pass", "Low pass"] 0; _type = type.value; visualize_mask = Image vis { vis = image_set_type Image_type.FOURIER (rotquad mask); mask = im_create_fmask _preview_size _preview_size _type frequency_cutoff.value 0 0 0 0; } value = im_flt_image_freq image.value _type frequency_cutoff.value 0 0 0 0; } _ring image = class Image value { _check_args = [ [image, "Image", check_Image] ] ++ super._check_args; _vislevel = 3; frequency_cutoff = Slider 0.01 0.99 0.5; ring_width = Slider 0.01 0.99 0.5; type = Option "Pass or reject" ["Ring pass", "Ring reject"] 0; _type = type.value + 6; visualize_mask = Image vis { vis = image_set_type Image_type.FOURIER (rotquad mask); mask = im_create_fmask _preview_size _preview_size _type frequency_cutoff.value ring_width.value 0 0 0; } value = im_flt_image_freq image.value _type frequency_cutoff.value ring_width.value 0 0 0; } _band image = class Image value { _check_args = [ [image, "Image", check_Image] ] ++ super._check_args; _vislevel = 3; frequency_cutoff_x = Slider 0.01 0.99 0.5; frequency_cutoff_y = Slider 0.01 0.99 0.5; radius = Slider 0.01 0.99 0.5; type = Option "Pass or reject" ["Band pass", "Band reject"] 0; _type = type.value + 12; visualize_mask = Image vis { vis = image_set_type Image_type.FOURIER (rotquad mask); mask = im_create_fmask _preview_size _preview_size _type frequency_cutoff_x.value frequency_cutoff_y.value radius.value 0 0; } value = im_flt_image_freq image.value _type frequency_cutoff_x.value frequency_cutoff_y.value radius.value 0 0; } /* high or low pass ideal filter */ High_low x = map_unary _high_low x; /* ring pass or reject ideal filter */ Ring x = map_unary _ring x; /* band pass or reject ideal filter */ Band x = map_unary _band x; } /* Gaussian fourier filters */ Gaussian_filter = class { _preview_size = 64; _high_low image = class Image value { _check_args = [ [image, "Image", check_Image] ] ++ super._check_args; _vislevel = 3; frequency_cutoff = Slider 0.01 0.99 0.5; amplitude_cutoff = Slider 0.01 0.99 0.5; type = Option "High or low" ["High pass", "Low pass"] 0; _type = type.value + 4; visualize_mask = Image vis { vis = image_set_type Image_type.FOURIER (rotquad mask); mask = im_create_fmask _preview_size _preview_size _type frequency_cutoff.value amplitude_cutoff.value 0 0 0; } value = im_flt_image_freq image.value _type frequency_cutoff.value amplitude_cutoff.value 0 0 0; } _ring image = class Image value { _check_args = [ [image, "Image", check_Image] ] ++ super._check_args; _vislevel = 3; frequency_cutoff = Slider 0.01 0.99 0.5; ring_width = Slider 0.01 0.99 0.5; amplitude_cutoff = Slider 0.01 0.99 0.5; type = Option "Pass or reject" ["Ring pass", "Ring reject"] 0; _type = type.value + 10; visualize_mask = Image vis { vis = image_set_type Image_type.FOURIER (rotquad mask); mask = im_create_fmask _preview_size _preview_size _type frequency_cutoff.value ring_width.value amplitude_cutoff.value 0 0; } value = im_flt_image_freq image.value _type frequency_cutoff.value ring_width.value amplitude_cutoff.value 0 0; } _band image = class Image value { _check_args = [ [image, "Image", check_Image] ] ++ super._check_args; _vislevel = 3; frequency_cutoff_x = Slider 0.01 0.99 0.5; frequency_cutoff_y = Slider 0.01 0.99 0.5; radius = Slider 0.01 0.99 0.5; amplitude_cutoff = Slider 0.01 0.99 0.5; type = Option "Pass or reject" ["Band pass", "Band reject"] 0; _type = type.value + 16; visualize_mask = Image vis { vis = image_set_type Image_type.FOURIER (rotquad mask); mask = im_create_fmask _preview_size _preview_size _type frequency_cutoff_x.value frequency_cutoff_y.value radius.value amplitude_cutoff.value 0; } value = im_flt_image_freq image.value _type frequency_cutoff_x.value frequency_cutoff_y.value radius.value amplitude_cutoff.value 0; } /* high or low pass Gaussian filter */ High_low x = map_unary _high_low x; /* ring pass or reject Gaussian filter */ Ring x = map_unary _ring x; /* band pass or reject Gaussian filter */ Band x = map_unary _band x; } /* various Butterworth fourier filters */ Butterworth_filter = class { _preview_size = 64; _high_low image = class Image value { _check_args = [ [image, "Image", check_Image] ] ++ super._check_args; _vislevel = 3; order = Slider 1 10 2; frequency_cutoff = Slider 0.01 0.99 0.5; amplitude_cutoff = Slider 0.01 0.99 0.5; type = Option "High or low" ["High pass", "Low pass"] 0; _type = type.value + 2; visualize_mask = Image vis { vis = image_set_type Image_type.FOURIER (rotquad mask); mask = im_create_fmask _preview_size _preview_size _type order.value frequency_cutoff.value amplitude_cutoff.value 0 0; } value = im_flt_image_freq image.value _type order.value frequency_cutoff.value amplitude_cutoff.value 0 0; } _ring image = class Image value { _check_args = [ [image, "Image", check_Image] ] ++ super._check_args; _vislevel = 3; order = Slider 1 10 2; frequency_cutoff = Slider 0.01 0.99 0.5; ring_width = Slider 0.01 0.99 0.5; amplitude_cutoff = Slider 0.01 0.99 0.5; type = Option "Pass or reject" ["Ring pass", "Ring reject"] 0; _type = type.value + 8; visualize_mask = Image vis { vis = image_set_type Image_type.FOURIER (rotquad mask); mask = im_create_fmask _preview_size _preview_size _type order.value frequency_cutoff.value ring_width.value amplitude_cutoff.value 0; } value = im_flt_image_freq image.value _type order.value frequency_cutoff.value ring_width.value amplitude_cutoff.value 0; } _band image = class Image value { _check_args = [ [image, "Image", check_Image] ] ++ super._check_args; _vislevel = 3; order = Slider 1 10 2; frequency_cutoff_x = Slider 0.01 0.99 0.5; frequency_cutoff_y = Slider 0.01 0.99 0.5; radius = Slider 0.01 0.99 0.5; amplitude_cutoff = Slider 0.01 0.99 0.5; type = Option "Pass or reject" ["Band pass", "Band reject"] 0; _type = type.value + 14; visualize_mask = Image vis { vis = image_set_type Image_type.FOURIER (rotquad mask); mask = im_create_fmask _preview_size _preview_size _type order.value frequency_cutoff_x.value frequency_cutoff_y.value radius.value amplitude_cutoff.value; } value = im_flt_image_freq image.value _type order.value frequency_cutoff_x.value frequency_cutoff_y.value radius.value amplitude_cutoff.value; } /* high or low pass Butterworth filter */ High_low x = map_unary _high_low x; /* ring pass or reject Butterworth filter */ Ring x = map_unary _ring x; /* band pass or reject Butterworth filter */ Band x = map_unary _band x; } nip2-8.7.0/share/nip2/compat/7.9/Histogram.def0000644000175000017500000000302113224651032015500 00000000000000/* find histogram of x */ Hist_find x = map_unary hist_find x; /* find n-dimensional histogram from n-band image */ Hist_find_nD in = map_unary widget in { widget image = class Image value { _check_args = [ [image, "Image", check_Image] ] ++ super._check_args; _vislevel = 3; // default to something small-ish bins = 8; value = hist_find_nD bins image.value; } } /* map image x through histogram hist */ Hist_map hist x = map_binary hist_map hist x; /* find cumulative histogram of hist */ Hist_cumulative x = map_unary hist_cum x; /* find normalised histogram of hist */ Hist_normalise x = map_unary hist_norm x; /* find LUT which matches hist in to hist ref */ Hist_match in ref = map_binary hist_match in ref; #separator /* histogram equalisation */ Hist_equalise = class { /* histogram equalise x globally */ Global x = map_unary hist_equalize x; /* local histogram equalisation using region r as window */ Local r = map_unary (hist_equalize_local r.width r.height) r.image; } /* slice a line of pixels along a guide line and display as a histogram */ Guide_slice in = map_unary widget in { widget guide = class Image value { _check_args = [ [guide, "Guide", check_Guide] ] ++ super._check_args; value = image_set_type Image_type.HISTOGRAM slice { slice = guide.image.extract_area guide.image.rect.left guide.top guide.width 1, is_instanceof "HGuide" guide = guide.image.extract_area guide.left guide.image.rect.top 1 guide.height; } } } nip2-8.7.0/share/nip2/compat/7.9/Statistics.def0000644000175000017500000000610513224651032015703 00000000000000/* mean value of object */ Mean a = map_unary mean a; /* standard deviation of object */ Deviation a = map_unary deviation a; /* calculate a large set of stats on an object */ Stats a = map_unary stats a; #separator /* maximum of an object */ Max a = map_unary max a; /* minimum of an object */ Min a = map_unary min a; /* return complex number (max, min) */ Maxmin a = map_unary maxmin a { maxmin x = (Max x, Min x); } /* position of maximum in an image */ Maximum_position a = map_unary maxpos a; /* position of minimum in an image */ Minimum_position a = map_unary minpos a; #separator /* count the number of non-zeros in an image */ Count_set a = map_unary cset a { cset i = (mean (i != 0) * i.width * i.height) / 255; } /* count the number of zeros in an image */ Count_clear a = map_unary cclear a { cclear i = (mean (i == 0) * i.width * i.height) / 255; } #separator /* plot a scatter graph of a list of [x,y] coordinates */ Plot_scatter x //= map_unary widget x = widget x { widget data = class Image value { _check_args = [ [data, "data", check_xy_list] ] ++ super._check_args; width = 512; height = 512; plot_colour = Colour "Lab" [80, -80, 80]; xmin = foldr1 min_pair (map (extract 0) data); xmax = foldr1 max_pair (map (extract 0) data); ymin = foldr1 min_pair (map (extract 1) data); ymax = foldr1 max_pair (map (extract 1) data); axies = Toggle "Draw axies" true; mark = Point this x y { p = _to_image data?0; x = p?0; y = p?1; } mark_position_hint = "mark is at position:"; mark_position = _from_image [mark.left, mark.top]; // geometry _xrange = xmax - xmin; _yrange = ymax - ymin; _xscale = width / _xrange; _yscale = height / _yrange; // map an [x,y] point into the image coordinates _to_image p = [(p?0 - xmin) * _xscale, height - (p?1 - ymin) * _yscale]; // map an [x,y] point from image cods back to real cods _from_image p = [p?0 / _xscale + xmin, (height - p?1) / _yscale + ymin]; value = foldr plot background' data { plot_image_new width height pixel = image_new width height 3 Image_format.FLOAT Image_coding.NOCODING (Image_type.colour_spaces.lookup 0 1 plot_colour.colour_space) pixel 0 0; // background background = plot_image_new width height 0; // mark we plot mark_width = max_pair 1 (width / 100); mark_height = max_pair 1 (height / 100); mark = plot_image_new mark_width mark_height plot_colour; // draw axies on background background' = drawxy, axies = background { // axies xaxis = plot_image_new width 1 (Colour "Lab" [100, 0, 0]); yaxis = plot_image_new 1 height (Colour "Lab" [100, 0, 0]); origin = _to_image [0, 0]; drawx = im_insert_noexpand background xaxis 0 origin?1; drawxy = im_insert_noexpand drawx yaxis origin?0 0; } // plot a single point on an image plot p im = im_insert_noexpand im mark (x - mark_width / 2) (y - mark_height / 2) { p' = _to_image p; x = p'?0; y = p'?1; } } } } nip2-8.7.0/share/nip2/compat/7.9/Makefile.in0000644000175000017500000003702513350464104015145 00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = share/nip2/compat/7.9 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(startdir)" DATA = $(start_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BISON = @BISON@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DLLWRAP = @DLLWRAP@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FFTW3_CFLAGS = @FFTW3_CFLAGS@ FFTW3_LIBS = @FFTW3_LIBS@ FGREP = @FGREP@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_LIBS = @GSL_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ IP_CFLAGS = @IP_CFLAGS@ IP_LIBS = @IP_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBGOFFICE_CFLAGS = @LIBGOFFICE_CFLAGS@ LIBGOFFICE_LIBS = @LIBGOFFICE_LIBS@ LIBGSF_CFLAGS = @LIBGSF_CFLAGS@ LIBGSF_LIBS = @LIBGSF_LIBS@ LIBGVC_CFLAGS = @LIBGVC_CFLAGS@ LIBGVC_LIBS = @LIBGVC_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ 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@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ REQUIRED_PACKAGES_CFLAGS = @REQUIRED_PACKAGES_CFLAGS@ REQUIRED_PACKAGES_LIBS = @REQUIRED_PACKAGES_LIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOP_SRCDIR = @TOP_SRCDIR@ UPDATE_DESKTOP_DATABASE = @UPDATE_DESKTOP_DATABASE@ UPDATE_MIME_DATABASE = @UPDATE_MIME_DATABASE@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XDG_OPEN = @XDG_OPEN@ XGETTEXT = @XGETTEXT@ 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@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ startdir = $(pkgdatadir)/compat/7.9 start_DATA = \ Math.def \ Image.def \ Mosaic.def \ Colour.def \ Resize.def \ Capture.def \ Format.def \ Filter.def \ Morphology.def \ New.def \ Histogram.def \ Print.def \ Rotate.def \ Statistics.def \ X_ray.def \ _convert.def \ _errors.def \ _generate.def \ _list.def \ _predicate.def \ _stdenv.def \ _types.def EXTRA_DIST = $(start_DATA) all: all-am .SUFFIXES: $(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) --foreign share/nip2/compat/7.9/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign share/nip2/compat/7.9/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): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-startDATA: $(start_DATA) @$(NORMAL_INSTALL) @list='$(start_DATA)'; test -n "$(startdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(startdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(startdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(startdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(startdir)" || exit $$?; \ done uninstall-startDATA: @$(NORMAL_UNINSTALL) @list='$(start_DATA)'; test -n "$(startdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(startdir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: 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 check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(startdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-startDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-startDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-startDATA install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags-am uninstall uninstall-am uninstall-startDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: nip2-8.7.0/share/nip2/compat/7.9/_convert.def0000644000175000017500000003242113224651032015370 00000000000000 /* Convert an image ... just set the Type field. */ image_set_type type in = im_copy_set in type (im_header_double "Xres" in) (im_header_double "Yres" in) (im_header_int "Xoffset" in) (im_header_int "Yoffset" in); /* Convert an image ... just set origin */ image_set_origin xoff yoff in = im_copy_set in (im_header_int "Type" in) (im_header_double "Xres" in) (im_header_double "Yres" in) xoff yoff; /* Try to make a Matrix ... works for Vector/Image/Real, plus image/real */ to_matrix x = oo_unary_function to_matrix_op x, is_class x = tom x, is_real x || is_image x = error (errors.badargs ++ "to_matrix") { to_matrix_op = Operator "to_matrix" tom Operator_type.COMPOUND false; tom x = Matrix (itom x), is_image x = Matrix [[x]], is_real x = Matrix [x], is_real_list x = Matrix x, is_matrix x = error (errors.badargs ++ "to_matrix"); itom i = (im_vips2mask ((double) i)).value, is_image i && bands == 1 = (im_vips2mask ((double) i'')).value, is_image i && bands == 3 && width == 1 = error errors.not1band3band { width = im_header_int "Xsize" i; bands = im_header_int "Bands" i; split = bandsplit i; i' = im_insert (split?0) (split?1) 1 0; i'' = im_insert i' (split?2) 2 0; } } /* Try to make an Image ... works for Vector/Matrix/Real, plus image/real * Special case for Colour ... pull out the colour_space and set Type in the * image. */ to_image x = Image (image_set_type (Image_type.colour_spaces.lookup 0 1 x.colour_space) (mtoi [x.value])), is_instanceof "Colour" x = oo_unary_function to_image_op x, is_class x = toi x, is_real x || is_image x = error (errors.badargs ++ "to_image") { to_image_op = Operator "to_image" toi Operator_type.COMPOUND false; toi x = Image x, is_image x = Image (mtoi [[x]]), is_real x = Image (mtoi [x]), is_real_list x = Image (mtoi x), is_matrix x = error (errors.badargs ++ "to_image"); // [[real]] -> image mtoi m = im_mask2vips (Matrix m), width != 3 = joinup (im_mask2vips (Matrix m)) { width = len m?0; height = len m; joinup i = b1 ++ b2 ++ b3 { b1 = extract_area 0 0 1 height i; b2 = extract_area 1 0 1 height i; b3 = extract_area 2 0 1 height i; } } } /* Try to make a real. */ to_real x = to_real x.value, is_class x = x, is_real x = abs x, is_complex x = error (errors.badargs ++ "to_real"); /* Parse a positive integer. */ parse_pint l = foldl acc 0 l { acc sofar ch = sofar * 10 + parse_c ch; /* Turn a char digit to a number. */ parse_c ch = error "parse_c: not a digit", ! is_digit ch = (int) ch - (int) '0'; } /* Parse an integer, with an optional sign character. */ parse_int l = error "parse_number: badly formed number", len parts != 2 = sign * n { parts = splitpl [ member "+-", is_digit ] l; n = parse_pint parts?1; sign = 1, parts?0 == [] || parts?0 == "+" = -1; } /* Parse a float. * [+-]?[0-9]*([.][0-9]*)?(e[0-9]+)? */ parse_float l = err, len parts != 4 = (ipart + fpart) * 10 ** exp { err = error "parse_float: badly formed number"; parts = splitpl [ member "+-0123456789", member ".0123456789", member "eE", member "+-0123456789" ] l; ipart = parse_int parts?0; fpart = 0, parts?1 == []; = err, parts?1?0 != '.' = parse_pint (tl parts?1) / 10**(len parts?1 - 1); exp = 0, parts?2 == [] && parts?3 == [] = err, parts?2 == [] = parse_int parts?3; } /* Print integer as hex. */ print_hex i = "0", chars == [] = "0x" ++ reverse chars { digits = takewhile (not_equal 0) (map (bitwise_and 0xf) (iterate (converse right_shift 4) i)); chars = map tohd digits; tohd x = (char) ((int) '0' + x), x < 10 = (char) ((int) 'a' + (x - 10)); } /* Convert normalised XYZ to bradford RGB. */ XYZ2RGBbrad = Matrix [[ 0.8951, 0.2664, -0.1614], [-0.7502, 1.7135, 0.0367], [ 0.0389, -0.0685, 1.0296]]; /* Convert bradford RGB to normalised XYZ. */ RGBbrad2XYZ = XYZ2RGBbrad ** -1; /* Convert D50 XYZ to D65 using the bradford chromatic adaptation approx. */ im_D502D65 xyz = xyz''' { // divide by D50 white point xyz' = xyz / Vector [96.4250, 100.0, 82.4680]; rgb = recomb XYZ2RGBbrad xyz'; // move white in bradford RGB rgb' = rgb / Vector [0.94, 1.02, 1.33]; xyz'' = recomb RGBbrad2XYZ rgb'; // back to D65 xyz''' = xyz'' * Vector [95.0470, 100.0, 108.8827]; } /* Convert D65 XYZ to D50 using the bradford approx. */ im_D652D50 xyz = xyz''' { // divide by D65 white point xyz' = xyz / Vector [95.0470, 100.0, 108.8827]; rgb = recomb XYZ2RGBbrad xyz'; // move white in bradford RGB rgb' = rgb * Vector [0.94, 1.02, 1.33]; xyz'' = recomb RGBbrad2XYZ rgb'; // back to D50 xyz''' = xyz'' * Vector [96.4250, 100.0, 82.4680]; } /* Convert D50 XYZ to Lab. */ im_D50XYZ2Lab xyz = im_XYZ2Lab_temp xyz 96.4250 100 82.4680; /* Convert D50 Lab to XYZ. */ im_D50Lab2XYZ lab = im_Lab2XYZ_temp lab 96.4250 100 82.4680; /* ... and mono conversions */ im_sRGB2mono in = clip2fmt (im_header_int "BandFmt" in) (im_recomb in (Matrix [[.3, .6, .1]])); im_mono2sRGB in = (unsigned char) (in ++ in ++ in); /* Any 1-ary colour op, applied to Vector/Image/Matrix or image */ colour_unary fn x = oo_unary_function colour_op x, is_class x = fn x, is_image x = error (errors.badargs ++ "colour_unary") { // COMPOUND_REWRAP ... signal to the colour class to go to image and // back colour_op = Operator "colour_unary" colour_object Operator_type.COMPOUND_REWRAP false; colour_object x = colour_real_list x, is_real_list x = map colour_real_list x, is_matrix x = fn x, is_image x = error (errors.badargs ++ "colour_unary"); colour_real_list l = (to_matrix (fn (float) (to_image (Vector l)).value)).value?0; } /* Any symmetric 2-ary colour op, applied to Vector/Image/Matrix or image ... * name is op name for error messages etc. */ colour_binary name fn x y = oo_binary_function colour_op x y, is_class x = oo_binary'_function colour_op x y, is_class y = fn x y, is_image x && is_image y = error (errors.badargs ++ name) { colour_op = Operator name colour_object Operator_type.COMPOUND_REWRAP true; colour_object x y = fn x y, is_image x && is_image y = colour_real_list fn x y, is_real_list x && is_real_list y = map (colour_real_list fn x) y, is_real_list x && is_matrix y = map (colour_real_list (converse fn) y) x, is_matrix x && is_real_list y = map2 (colour_real_list fn) x y, is_matrix x && is_matrix y = error (errors.badargs ++ name); colour_real_list fn l1 l2 = (to_matrix (fn i1 i2)).value?0 { i1 = (float) (to_image (Vector l1)).value; i2 = (float) (to_image (Vector l2)).value; } } _colour_conversion_table = [ /* Lines are [space-from, space-to, conversion function]. Could do * this as a big array, but table lookup feels safer. */ [B_W, B_W, image_set_type B_W], [B_W, XYZ, im_sRGB2XYZ @ im_mono2sRGB], [B_W, YXY, im_XYZ2Yxy @ im_sRGB2XYZ @ im_mono2sRGB], [B_W, LAB, im_XYZ2Lab @ im_sRGB2XYZ @ im_mono2sRGB], [B_W, LCH, im_Lab2LCh @ im_XYZ2Lab @ im_sRGB2XYZ @ im_mono2sRGB], [B_W, UCS, im_XYZ2UCS @ im_sRGB2XYZ @ im_mono2sRGB], [B_W, RGB, im_XYZ2disp @ im_sRGB2XYZ @ im_mono2sRGB], [B_W, sRGB, im_mono2sRGB], [B_W, LABQ, im_Lab2LabQ @ im_XYZ2Lab @ im_sRGB2XYZ @ im_mono2sRGB], [B_W, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_XYZ2Lab @ im_sRGB2XYZ @ im_mono2sRGB], [XYZ, B_W, im_sRGB2mono @ im_XYZ2sRGB], [XYZ, XYZ, image_set_type XYZ], [XYZ, YXY, im_XYZ2Yxy], [XYZ, LAB, im_XYZ2Lab], [XYZ, LCH, im_Lab2LCh @ im_XYZ2Lab], [XYZ, UCS, im_XYZ2UCS], [XYZ, RGB, im_XYZ2disp], [XYZ, sRGB, im_XYZ2sRGB], [XYZ, LABQ, im_Lab2LabQ @ im_XYZ2Lab], [XYZ, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_XYZ2Lab], [YXY, B_W, im_sRGB2mono @ im_XYZ2sRGB @ im_Yxy2XYZ], [YXY, XYZ, im_Yxy2XYZ], [YXY, YXY, image_set_type YXY], [YXY, LAB, im_XYZ2Lab @ im_Yxy2XYZ], [YXY, LCH, im_Lab2LCh @ im_XYZ2Lab @ im_Yxy2XYZ], [YXY, UCS, im_XYZ2UCS @ im_Yxy2XYZ], [YXY, RGB, im_XYZ2disp @ im_Yxy2XYZ], [YXY, sRGB, im_XYZ2sRGB @ im_Yxy2XYZ], [YXY, LABQ, im_Lab2LabQ @ im_XYZ2Lab @ im_Yxy2XYZ], [YXY, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_XYZ2Lab @ im_Yxy2XYZ], [LAB, B_W, im_sRGB2mono @ im_XYZ2sRGB @ im_Lab2XYZ], [LAB, XYZ, im_Lab2XYZ], [LAB, YXY, im_XYZ2Yxy @ im_Lab2XYZ], [LAB, LAB, image_set_type LAB], [LAB, LCH, im_Lab2LCh], [LAB, UCS, im_Lab2UCS], [LAB, RGB, im_Lab2disp], [LAB, sRGB, im_XYZ2sRGB @ im_Lab2XYZ], [LAB, LABQ, im_Lab2LabQ], [LAB, LABS, im_Lab2LabS], [LCH, B_W, im_sRGB2mono @ im_XYZ2sRGB @ im_Lab2XYZ @ im_LCh2Lab], [LCH, XYZ, im_Lab2XYZ @ im_LCh2Lab], [LCH, YXY, im_XYZ2Yxy @ im_XYZ2sRGB @ im_Lab2XYZ @ im_LCh2Lab], [LCH, LAB, im_LCh2Lab], [LCH, LCH, image_set_type LCH], [LCH, UCS, im_LCh2UCS], [LCH, RGB, im_Lab2disp @ im_LCh2Lab], [LCH, sRGB, im_XYZ2sRGB @ im_Lab2XYZ @ im_LCh2Lab], [LCH, LABQ, im_Lab2LabQ @ im_LCh2Lab], [LCH, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_LCh2Lab], [UCS, B_W, im_sRGB2mono @ im_XYZ2sRGB @ im_UCS2XYZ], [UCS, XYZ, im_UCS2XYZ], [UCS, YXY, im_XYZ2Yxy @ im_Lab2XYZ @ im_UCS2Lab], [UCS, LAB, im_UCS2Lab], [UCS, LCH, im_UCS2LCh], [UCS, UCS, image_set_type UCS], [UCS, RGB, im_Lab2disp @ im_UCS2Lab], [UCS, sRGB, im_XYZ2sRGB @ im_Lab2XYZ @ im_UCS2Lab], [UCS, LABQ, im_Lab2LabQ @ im_UCS2Lab], [UCS, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_UCS2Lab], [RGB, B_W, im_sRGB2mono @ im_XYZ2sRGB @ im_disp2XYZ @ im_clip], [RGB, XYZ, im_disp2XYZ @ im_clip], [RGB, YXY, im_XYZ2Yxy @ im_disp2XYZ @ im_clip], [RGB, LAB, im_disp2Lab @ im_clip], [RGB, LCH, im_Lab2LCh @ im_disp2Lab @ im_clip], [RGB, UCS, im_Lab2UCS @ im_disp2Lab @ im_clip], [RGB, RGB, image_set_type RGB], [RGB, sRGB, im_XYZ2sRGB @ im_disp2XYZ @ im_clip], [RGB, LABQ, im_Lab2LabQ @ im_disp2Lab @ im_clip], [RGB, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_disp2Lab @ im_clip], [sRGB, B_W, im_sRGB2mono], [sRGB, XYZ, im_sRGB2XYZ @ im_clip], [sRGB, YXY, im_XYZ2Yxy @ im_sRGB2XYZ @ im_clip], [sRGB, LAB, im_XYZ2Lab @ im_sRGB2XYZ @ im_clip], [sRGB, LCH, im_Lab2LCh @ im_XYZ2Lab @ im_sRGB2XYZ @ im_clip], [sRGB, UCS, im_XYZ2UCS @ im_sRGB2XYZ @ im_clip], [sRGB, RGB, im_XYZ2disp @ im_sRGB2XYZ @ im_clip], [sRGB, sRGB, image_set_type sRGB], [sRGB, LABQ, im_Lab2LabQ @ im_XYZ2Lab @ im_sRGB2XYZ @ im_clip], [sRGB, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_XYZ2Lab @ im_sRGB2XYZ @ im_clip], [LABQ, B_W, im_sRGB2mono @ im_XYZ2sRGB @ im_Lab2XYZ @ im_LabQ2Lab], [LABQ, XYZ, im_Lab2XYZ @ im_LabQ2Lab], [LABQ, YXY, im_XYZ2Yxy @ im_Lab2XYZ @ im_LabQ2Lab], [LABQ, LAB, im_LabQ2Lab], [LABQ, LCH, im_Lab2LCh @ im_LabQ2Lab], [LABQ, UCS, im_Lab2UCS @ im_LabQ2Lab], [LABQ, RGB, im_LabQ2disp], [LABQ, sRGB, im_XYZ2sRGB @ im_Lab2XYZ @ im_LabQ2Lab], [LABQ, LABQ, image_set_type LABQ], [LABQ, LABS, im_LabQ2LabS], [LABS, B_W, im_sRGB2mono @ im_XYZ2sRGB @ im_Lab2XYZ @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, XYZ, im_Lab2XYZ @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, YXY, im_XYZ2Yxy @ im_Lab2XYZ @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, LAB, im_LabS2Lab], [LABS, LCH, im_Lab2LCh @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, UCS, im_Lab2UCS @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, RGB, im_LabQ2disp @ im_LabS2LabQ @ im_clip2s], [LABS, sRGB, im_XYZ2sRGB @ im_Lab2XYZ @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, LABQ, im_LabS2LabQ @ im_clip2s], [LABS, LABS, image_set_type LABS] ] { /* From Image_type ... repeat here for brevity. Use same ordering as * in Colour menu for consistency. */ B_W = 1; XYZ = 12; YXY = 23; LAB = 13; LCH = 19; UCS = 18; RGB = 17; sRGB = 22; LABQ = 16; LABS = 21; } /* Transform between two colour spaces. */ colour_transform from to in = colour_unary _colour_conversion_table?i?2 in, i >= 0 = error ("unable to convert " ++ from_name ++ " to " ++ to_name) { match x = x?0 == from && x?1 == to; i = index match _colour_conversion_table; from_name = Image_type.type_names.lookup 1 0 from; to_name = Image_type.type_names.lookup 1 0 to; } /* Does an object have a sensible VIPS type? */ has_type x = is_image x || is_instanceof "Image" x || is_instanceof "Arrow" x || is_instanceof "Colour" x; /* Try to get a VIPS image type from an object. */ get_type x = get_type_im x, is_image x = get_type_im x.value, is_instanceof "Image" x = get_type_im x.image.value, is_instanceof "Arrow" x = Image_type.colour_spaces.lookup 0 1 x.colour_space, is_instanceof "Colour" x = error ("get_type: unable to get type from " ++ print x) { // get the type from a VIPS image ... but only if it makes sense with // the rest of the image get_type_im im = Image_type.LABQ, coding == Image_coding.LABPACK = Image_type.B_W, bands == 1 = type, bands == 3 && is_colorimetric = Image_type.MULTIBAND, bands != 3 && !is_colorimetric = type { is_colorimetric = Image_type.colour_spaces.present 1 type; type = im_header_int "Type" im; coding = im_header_int "Coding" im; bands = im_header_int "Bands" im; } } /* Transform to a colour space, assuming the type field in the input is * correct */ colour_transform_to to in = colour_transform (get_type in) to in; nip2-8.7.0/share/nip2/compat/7.9/Resize.def0000644000175000017500000000463613224651032015021 00000000000000_resize_interp = Option "Interpolation" (map (extract 0) Interpolate.names.value) Interpolate.bilinear; /* resize image x by any scale factor */ Resize_image x = map_unary widget x { widget image = class Image value { _vislevel = 3; factor = 1; interp = _resize_interp; value = resize factor factor interp.value image.value; } } /* resize image with separate x/y factors */ Resize_xy_image x = map_unary widget x { widget image = class Image value { _vislevel = 3; xfactor = 1; yfactor = 1; interp = _resize_interp; value = resize xfactor yfactor interp.value image.value; } } /* place image x in a larger piece of image */ Resize_canvas x = map_unary widget x { widget image = class Image value { _vislevel = 3; new_image_width = image.width; new_image_height = image.height; position = Option "Position" [ "North-west", "North", "North-east", "West", "Centre", "East", "South-west", "South", "South-east" ] 4; fill = Option "Fill background with" [ "White", "Black" ] 0; value = im_insert_noexpand background image.value xp yp { width = image.width; height = image.height; coding = image.coding; bands = 3, coding == Image_coding.LABPACK = image.bands; format = Image_format.FLOAT, coding == Image_coding.LABPACK = image.format; type = image.type; background_colour = image_white image, fill == 0 = Vector (map (const 0) [1 .. bands]); // placement vectors ... left, centre, right xposv = [0, new_image_width / 2 - width / 2, new_image_width - width]; yposv = [0, new_image_height / 2 - height / 2, new_image_height - height]; xp = xposv?((int) (position % 3)); yp = yposv?((int) (position / 3)); background = image_new new_image_width new_image_height bands format coding type background_colour 0 0; } } } #separator /* resize image x so that the shortest axis is a certain size */ Shrink_to = class { _shrink_width default_size image = class Image value { size = default_size; interp = _resize_interp; value = resize factor factor interp.value image.value { xfac = size / image.width; yfac = size / image.height; factor = max_pair xfac yfac; } } /* shrink minimum dimension to 400 pixels */ Quicklook x = map_unary (_shrink_width 400) x; /* shrink minimum dimension to 64 pixels */ Icon x = map_unary (_shrink_width 64) x; } nip2-8.7.0/share/nip2/compat/7.9/Image.def0000644000175000017500000002517713224651032014605 00000000000000/* take a copy of x */ Duplicate x = map_unary copy x; /* crop image x */ Crop x = map_unary build_widget x { build_widget image = widget image (image.width * 0.25 - image.xoffset) (image.height * 0.25 - image.yoffset) (image.width * 0.5) (image.height * 0.5); widget image left top width height = class Region image left top width height { _check_args = [ [image, "Image", check_Image] ] ++ super._check_args; _vislevel = 4; Region_edit image left top width height = widget image left top width height; } } /* insert image b into image a */ Insert a b = class Image value { _check_args = [ [a, "a", check_Image], [b, "b", check_Image] ] ++ super._check_args; _check_all = [ [a.format == b.format && a.coding == b.coding && a.bands == b.bands, "a.format == b.format && a.coding == b.coding && " ++ "a.bands == b.bands"], [a.width >= b.width && a.height >= b.height, "First image should be able to enclose second"] ]; _vislevel = 3; place = Area a ((a.width - b.width) / 2) ((a.height - b.height) / 2) b.width b.height; value = im_insert_noexpand a' b'' place.left place.top { a' = a.value; b' = b.value; b'' = clip2fmt a.format b'; } } /* join two images left/right or up/down */ Join = class { _check_ab_args a b = [ [a, "a", check_Image], [b, "b", check_Image] ]; _check_ab_all a b = [ [a.format == b.format && a.coding == b.coding && a.bands == b.bands, "a.format == b.format && a.coding == b.coding && " ++ "a.bands == b.bands"] ]; /* join two images left-right */ Left_right a b = class Image value { _check_args = _check_ab_args a b ++ super._check_args; _check_all = _check_ab_all a b ++ super._check_all; shim = Slider 0 100 0; background_colour = 0; align = Option "Alignment" ["Top", "Centre", "Bottom"] 1; value = im2 { w = a.width + b.width + shim.value; h = max_pair a.height b.height; bg = image_new w h a.bands a.format a.coding a.type background_colour 0 0; ya = [0, max_pair 0 ((b.height - a.height)/2), max_pair 0 (b.height - a.height)]; yb = [0, max_pair 0 ((a.height - b.height)/2), max_pair 0 (a.height - b.height)]; im1 = im_insert_noexpand bg a.value 0 (ya?align); im2 = im_insert_noexpand im1 b.value (a.width + shim.value) (yb?align); } } /* join two images top-bottom */ Top_bottom a b = class Image value { _check_args = _check_ab_args a b ++ super._check_args; _check_all = _check_ab_all a b ++ super._check_all; shim = Slider 0 100 0; background_colour = 0; align = Option "Alignment" ["Left", "Centre", "Right"] 1; value = im2 { w = max_pair a.width b.width; h = a.height + b.height + shim.value; bg = image_new w h a.bands a.format a.coding a.type background_colour 0 0; xa = [0, max_pair 0 ((b.width - a.width)/2), max_pair 0 (b.width - a.width)]; xb = [0, max_pair 0 ((a.width - b.width)/2), max_pair 0 (a.width - b.width)]; im1 = im_insert_noexpand bg a.value (xa?align) 0; im2 = im_insert_noexpand im1 b.value (xb?align) (a.height + shim.value); } } /* join a 2-D array of images */ Array x = class Image value { hspacing = Slider (-100) (100) 0; vspacing = Slider (-100) (100) 0; value = imagearray_assemble (-hspacing.value) (-vspacing.value) x' { x' = map (map getval) x; getval x = x.value, is_class x = x; } } } /* morph images to match (needs the rubbersheet plugin) */ Rubber = class { _rubber_interp = Option "Interpolation" (map (extract 0) Interpolate.names.value) Interpolate.bilinear; _rubber_order = Option "order" ["0", "1", "2", "3"] 1; _rubber_edges = Toggle "Wrap image edges" false; /* find a transform which will turn sample image into reference image */ Rubber_find reference sample = class Matrix transformation { _vislevel = 3; // controls order = _rubber_order; interp = _rubber_interp; edges = _rubber_edges; max_error = 0.3; max_iterations = 10; // transform _result = resample sample.value reference.value max_error max_iterations order.value interp.value edges.value; // results transformed_image = Image (_result?0); transformation = (_result?1).value; final_error = _result?2; } /* apply a transform to an image */ Rubber_apply transform image = class Image value { // controls interp = _rubber_interp; edges = _rubber_edges; value = im_transform image.value transform interp.value edges.value; } /* change a transformation's scale factor */ Rubber_scale transform = class Matrix scaled_transform { factor_hint = "scale transform by this factor"; factor_x = 1; factor_y = 1; // pairwise multiply scaled_transform = map2 (map2 multiply) transform.value facs { facs = [[ factor_x, factor_y ], [ 1, 1 ], [ 1, 1 ], [ 1 / factor_x, 1 / factor_y ], [ 1 / factor_x, 1 / factor_y ], [ 1 / factor_x, 1 / factor_y ]]; } } } #separator /* set pixels to 255 - x */ Photographic_negative x = map_unary invert x { invert x = oo_unary_function neg_op x, is_class x = im_invert x, is_image x = 255 - x, is_number x = error (errors.badargs ++ "invert"); neg_op = Operator "photographic_negative" invert Operator_type.ARITHMETIC false; } /* falsecolour a mono image */ Falsecolour x = map_unary falsecolour x; #separator /* adjust brightness and contrast of image x */ Adjust_scale_offset x = map_unary widget x { widget image = class Image value { _check_args = [ [image, "image", check_Image] ] ++ super._check_args; _vislevel = 3; scale = Slider 0.001 255 1; offset = Slider (-128) 128 0; value = clip2fmt image.format (image * scale + offset).value; } } /* adjust gamma of image x */ Adjust_gamma x = map_unary widget x { widget image = class Image value { _check_args = [ [image, "image", check_Image] ] ++ super._check_args; _vislevel = 3; gamma = Slider 0.001 4 1; image_maximum_hint = "Change image_maximum if this is " ++ "not an 8 bit image"; image_maximum = 255; value = clip2fmt image.format gammaed.value { gammaed = (image_maximum / image_maximum ** gamma) * image ** gamma; } } } /* change advisory header fields of image x */ Edit_header x = map_unary widget x { type_names = Image_type.type_names; names = sort (map (extract 0) type_names.value); widget image = class Image value { _check_args = [ [image, "image", check_Image] ] ++ super._check_args; _vislevel = 3; xres = image.xres; yres = image.yres; xoffset = image.xoffset; yoffset = image.yoffset; type_option = Option "Image type" names pos { name = type_names.lookup 1 0 image.type; pos = index (equal name) names; } value = im_copy_set image.value type xres yres xoffset yoffset { type = type_names.lookup 0 1 names?type_option; } } } #separator /* rotate and scale one image to match another */ Match a b = class Image value { _check_args = [ [a, "a", check_Image], [b, "b", check_Image] ] ++ super._check_args; _vislevel = 3; ap1 = Point_relative a 0.5 0.25; bp1 = Point_relative b 0.5 0.25; ap2 = Point_relative a 0.5 0.75; bp2 = Point_relative b 0.5 0.75; refine = Toggle "Refine selected tie-points" false; value = b''' { _prefs = Workspaces.Preferences; window = _prefs.MOSAIC_WINDOW_SIZE; object = _prefs.MOSAIC_OBJECT_SIZE; a' = a.value; b' = b.value; b'' = clip2fmt a.format b'; ap1' = ap1.image_rect; ap2' = ap2.image_rect; bp1' = bp1.image_rect; bp2' = bp2.image_rect; b''' = im_match_linear_search a' b'' ap1'.left ap1'.top bp1'.left bp1'.top ap2'.left ap2'.top bp2'.left bp2'.top object window, refine = im_match_linear a' b'' ap1'.left ap1'.top bp1'.left bp1'.top ap2'.left ap2'.top bp2'.left bp2'.top; } } /* make a colour overlay of two mono images */ Overlay a b = class Image value { _check_args = [ [a, "a", check_Image], [b, "b", check_Image] ] ++ super._check_args; _check_all = [ [a.bands == 1 && b.bands == 1, "a.bands == 1 && b.bands == 1"] ] ++ super._check_all; _vislevel = 3; ap1 = Point_relative a 0.5 0.25; bp1 = Point_relative b 0.5 0.25; ap2 = Point_relative a 0.5 0.75; bp2 = Point_relative b 0.5 0.75; refine = Toggle "Refine selected tie-points" false; lock = Toggle "No resize" false; colour = Option "Colour overlay as" [ "Green over Red", "Blue over Red", "Red over Green", "Red over Blue", "Blue over Green", "Green over Blue" ] 0; value = [(a' ++ b''' ++ black), (a' ++ black ++ b'''), (b''' ++ a' ++ black), (b''' ++ black ++ a'), (black ++ a' ++ b'''), (black ++ b''' ++ a')]?colour { _prefs = Workspaces.Preferences; window = _prefs.MOSAIC_WINDOW_SIZE; object = _prefs.MOSAIC_OBJECT_SIZE; a' = a.value; b' = b.value; b'' = clip2fmt a.format b'; ap1' = ap1.image_rect; ap2' = ap2.image_rect; bp1' = bp1.image_rect; bp2' = bp2.image_rect; // return p2 ... if lock is set, return a p2 a standard // distance along the vector joining p1 and p2 norm p1 p2 = Rect left' top' 0 0, lock = p2 { v = (p2.left - p1.left, p2.top - p1.top); // 100000 to give precision since we pass points as // ints to match n = 100000 * sign v; left' = p1.left + re n; top' = p1.top + im n; } ap2'' = norm ap1' ap2'; bp2'' = norm bp1' bp2'; b''' = im_match_linear_search a' b'' ap1'.left ap1'.top bp1'.left bp1'.top ap2''.left ap2''.top bp2''.left bp2''.top object window, // we can't search if lock is on refine && !lock = im_match_linear a' b'' ap1'.left ap1'.top bp1'.left bp1'.top ap2''.left ap2''.top bp2''.left bp2''.top; black = image_new a.width a.height a.bands a.format a.coding a.type 0 0 0; } } /* browse through the bands of a multiband image with a slider */ Browse_multiband image = class Image value { _vislevel = 3; band = Slider 0 (image.bands - 1) 0; display = Option "Display as" [ "Grey", "Green over Red", "Blue over Red", "Red over Green", "Red over Blue", "Blue over Green", "Green over Blue" ] 0; value = output { down = (int) band.value; up = (int) (band.value + 1); remainder = band.value - down; a = (image.value ? up) * remainder; b = (image.value ? down) * (1 - remainder); c = image_new image.width image.height 1 Image_format.FLOAT Image_coding.NOCODING Image_type.B_W 0 0 0; output = [ a + b, a ++ b ++ c, a ++ c ++ b, b ++ a ++ c, b ++ c ++ a, c ++ a ++ b, c ++ b ++ a ] ? display; } } nip2-8.7.0/share/nip2/compat/7.9/Rotate.def0000644000175000017500000000460713224651032015014 00000000000000/* rotate images and matricies by fixed angles */ Rotate_fixed = class { /* rotate image clockwise in 90 degree increments */ _rotate_widget default a = map_unary widget a { widget image = class Image value { _check_args = [ [image, "image", check_Image] ] ++ super._check_args; _vislevel = 3; angle = Option "Rotate by" [ "Don't rotate", "90 degrees clockwise", "180 degrees", "90 degrees anticlockwise" ] default; value = [ image.value, rot90 image.value, rot180 image.value, rot270 image.value ] ? angle; } } /* clockwise rotate by 90 degrees */ R90 x = _rotate_widget 1 x; /* rotate by 180 degrees */ R180 x = _rotate_widget 2 x; /* clockwise rotate by 270 degrees */ R270 x = _rotate_widget 3 x; /* rotate by 45 degrees ... square, odd-length-sides, matrices only */ R45 x = map_unary rot45 x; } /* rotate image anticlockwise by any angle */ Rotate_free a = map_unary widget a { widget image = class Image value { _check_args = [ [image, "image", check_Image] ] ++ super._check_args; _vislevel = 3; angle = Slider 0 360 0; value = rotate angle image.value; } } #separator /* mirror left/right or up/down */ Flip = class { /* mirror object up/down */ Up_down x = map_unary flipud x; /* mirror object left/right */ Left_right x = map_unary fliplr x; } /* swap rows and columns */ Transpose x = map_unary transpose x; #separator /* smallest rotate that gets arrow vertical or horizontal */ Straighten_arrow x = map_unary straighten x { straighten arrow = rotate angle'' arrow.image { x = arrow.width; y = arrow.height; angle = im (polar (x, y)); angle' = angle - 360, angle > 315 = angle - 180, angle > 135 = angle; angle'' = -angle', angle' >= (-45) && angle' < 45 = 90 - angle'; } } nip2-8.7.0/share/nip2/compat/7.9/Capture.def0000644000175000017500000001117413224651032015156 00000000000000/* make a new capture image */ Capture_video = class Image value { // shortcut to prefs _prefs = Workspaces.Preferences; device = _prefs.VIDEO_DEVICE; channel = Option "Input channel" [ "TV", "Composite 1", "Composite 2", "Composite 3" ] _prefs.VIDEO_CHANNEL; brightness = Slider 0 32767 _prefs.VIDEO_BRIGHTNESS; colour = Slider 0 32767 _prefs.VIDEO_COLOUR; contrast = Slider 0 32767 _prefs.VIDEO_CONTRAST; hue = Slider 0 32767 _prefs.VIDEO_HUE; frames_hint = "Average this many frames:"; frames = Slider 0 100 _prefs.VIDEO_FRAMES; mono = Toggle "Monochrome grab" _prefs.VIDEO_MONO; crop = Toggle "Crop image" _prefs.VIDEO_CROP; // grab, but hide it ... if we let the crop edit _raw_grab = Image (im_video_v4l1 device channel.value brightness.value colour.value contrast.value hue.value frames.value); edit_crop = Region _raw_grab left top width height { left = _prefs.VIDEO_CROP_LEFT; top = _prefs.VIDEO_CROP_TOP; width = min_pair _prefs.VIDEO_CROP_WIDTH (_raw_grab.width + left); height = min_pair _prefs.VIDEO_CROP_HEIGHT (_raw_grab.height + top); } aspect_hint = "Stretch vertically by this factor:"; aspect_ratio = _prefs.VIDEO_ASPECT; value = frame' { frame = edit_crop.value, crop = _raw_grab.value; frame' = colour_transform Image_type.sRGB Image_type.B_W frame, mono = frame; } } #separator /* use white image w to correct image i */ Light_correct w i = map_binary wc w i { wc w i = clip2fmt i.format (w' * i) { fac = mean w / max w; w' = fac * (max w / w); } } /* equalize bands in region r */ White_balance r = map_unary wb r { wb region = clip2fmt region.format (region.image * Vector facs) { target = mean region; facs = map (divide target) (map mean (bandsplit region)); } } /* remove features larger than a certain size from image x */ Smooth_image x = map_unary smooth x { smooth image = class Image value { _check_args = [ [image, "image", check_Image] ] ++ super._check_args; _vislevel = 3; feature = Slider 1 50 20; value = im_resize_linear (im_shrink image.value feature.value feature.value) image.width image.height; } } #separator /* calculate RGB -> LAB transform from an image of a Macbeth colour chart */ Calibrate_chart image = class Image value { _check_args = [ [image, "image", check_Image] ] ++ super._check_args; _vislevel = 3; // get macbeth data file to use macbeth = Filename "$VIPSHOME/share/$PACKAGE/data/macbeth_lab_d65.mat"; // get max of input image _max_value = Image_format.maxval image.format; // measure chart image _camera = im_measure image.value 0 0 image.width image.height 6 4; // load true values _true_Lab = Matrix_file macbeth.value; _true_XYZ = colour_transform Image_type.LAB Image_type.XYZ _true_Lab; // get Ys of greyscale _true_grey_Y = map (extract 1) (drop 18 _true_XYZ.value); // camera greyscale (all bands) _camera_grey = drop 18 _camera.value; // normalise both to 0-1 and combine _camera_grey' = map (map (multiply (1 / _max_value))) _camera_grey; _true_grey_Y' = map (multiply (1 / 100)) _true_grey_Y; _comb = Matrix (map2 cons _true_grey_Y' _camera_grey'); // make a linearising lut ... zero on left _linear_lut = im_invertlut _comb (_max_value + 1); // and display it linearising_lut = Image _linear_lut; // map the original image through the lineariser to get linear 0-1 // RGB image _image' = im_maplut image.value linearising_lut.value; // remeasure and solve for RGB -> XYZ _camera' = im_measure _image' 0 0 image.width image.height 6 4; _pinv = (transpose _camera' * _camera') ** -1; M = transpose (_pinv * transpose _camera' * _true_XYZ); // convert linear RGB camera to Lab value = colour_transform Image_type.XYZ Image_type.LAB ((float) (recomb M _image')); // measure again and compute dE76 _camera'' = im_measure value 0 0 image.width image.height 6 4; _dEs = map abs_vec (map Vector (_camera'' - _true_Lab).value); final_dE76 = mean (Vector _dEs); _max_dE = foldr max_pair 0 _dEs; _worst = index (equal _max_dE) _dEs; worst_patch = _macbeth_names ? _worst ++ " (patch " ++ print (_worst + 1) ++ ")"; } /* apply RGB -> LAB transform to an image */ Calibrate_image calib image = class Image value { _check_args = [ [calib, "calib", check_instance "Calibrate_chart"], [image, "image", check_Image] ] ++ super._check_args; // map the original image through the lineariser to get linear 0-1 // RGB image _image' = im_maplut image.value calib.linearising_lut.value; // convert linear RGB camera to Lab value = colour_transform Image_type.XYZ Image_type.LAB ((float) (recomb calib.M _image')); } nip2-8.7.0/share/nip2/compat/7.9/New.def0000644000175000017500000003034613224651032014306 00000000000000 /* make a new blank image */ New_image = widget { type_names = Image_type.type_names; names = sort (map (extract 0) type_names.value); default_type_name = type_names.lookup 1 0 Image_type.MULTIBAND; default_type_pos = index (equal default_type_name) names; widget = class Image value { width = 64; height = 64; bands = 1; format_option = Option "Image format" [ "8-bit unsigned int - UCHAR", // 0 "8-bit signed int - CHAR", // 1 "16-bit unsigned int - USHORT", // 2 "16-bit signed int - SHORT", // 3 "32-bit unsigned int - UINT", // 4 "32-bit signed int - INT", // 5 "32-bit float - FLOAT", // 6 "64-bit complex - COMPLEX", // 7 "64-bit float - DOUBLE", // 8 "128-bit complex - DPCOMPLEX" // 9 ] 0; type_option = Option "Image type" names default_type_pos; value = image_new width height bands format Image_coding.NOCODING type 0 0 0 { format = format_option.value; type = type_names.lookup 0 1 names?type_option; } } } /* pick a colour ... any colour space */ New_colour = widget "Lab" [50,0,0] { widget default_colour value = class Colour colour_space value { _colourspaces = [ "XYZ", "Yxy", "Lab", "LCh", "UCS", "RGB", "sRGB" ]; colour_space_option = Option "Colour space" _colourspaces (index (equal default_colour) _colourspaces); colour_space = colour_space_option.labels? colour_space_option.value; Colour_edit colour_space value = widget colour_space value; } } /* make a slider */ New_slider = Slider 0 255 128; /* make a toggle widget */ New_toggle = Toggle "untitled" false; /* make an option widget */ New_option = Option "untitled" ["option0", "option1"] 0; /* make a string entry widget */ New_string = String "Enter a string" "sample text"; /* make a number entry widget */ New_number = Number "Enter a number" 42; /* make a file chooser */ New_filename = Filename "$VIPSHOME/share/$PACKAGE/data/print_test_image.v"; /* make a matrix */ New_matrix = class { /* make a plain matrix */ Plain = Matrix (identity_matrix 3); /* make a convolution matrix */ Convolution = Matrix_con 1 0 [[0, 0, 0], [0, 1, 0], [0, 0, 0]]; /* make a recombination matrix */ Recombination = Matrix_rec (identity_matrix 3); /* make a morphology matrix */ Morphology = Matrix_mor [[0, 0, 0], [0, 255, 0], [0, 0, 0]]; } /* make a mark on an image */ New_mark = class { /* mark a region on an image */ Region image = scope.Region_relative image 0.25 0.25 0.5 0.5; /* mark a point on an image */ Point image = scope.Point_relative image 0.5 0.5; /* mark an arrow on an image */ Arrow image = scope.Arrow_relative image 0.25 0.25 0.5 0.5; /* mark a horizontal guide on an image */ HGuide image = scope.HGuide_relative image 0.5; /* mark a vertical guide on an image */ VGuide image = scope.VGuide_relative image 0.5; } #separator /* make a spatial response pattern image */ New_eye = class Image value { width = 64; height = 64; factor = Slider 0.001 1 0.2; value = im_eye width height factor.value; } /* make a zone plate image */ New_zone_plate = class Image value { size = 64; value = im_zone size; } /* make a grey ramp image */ New_grey = class Image value { width = 64; height = 64; orientation = Option "" ["Horizontal", "Vertical"] 0; value = [im_grey width height, im_rot90 (im_grey height width)]?orientation; } /* make a two band image whose pixel values are their coordinates */ New_xy = class Image value { width = 64; height = 64; value = make_xy width height; } /* make a new image of gaussian noise */ New_gauss_noise = class Image value { size = 64; mean = Slider 0 255 128; deviation = Slider 0 128 50; value = im_gaussnoise size size mean.value deviation.value; } /* make a 2d fractal image */ New_fractal = class Image value { size = 64; dimension = Slider 2.001 2.999 2.001; value = im_fractsurf size dimension.value; } /* make a CRT calibration chart */ New_CRT_test_chart = class Image value { brightness = Slider 0 255 200; patch_size = 32; value = imagearray_assemble 0 0 [[green, red], [blue, white]] { black = image_new patch_size patch_size 1 Image_format.FLOAT Image_coding.NOCODING Image_type.B_W 0 0 0; notblack = black + brightness; green = black ++ notblack ++ black; red = notblack ++ black ++ black; blue = black ++ black ++ notblack; white = notblack ++ notblack ++ notblack; } } /* make a frequency test chart */ New_frequency_test_chart = class Image value { width = 64; strip_height = 10; wavelengths = [64, 32, 16, 8, 4, 2]; value = join.value { freq_slice wave = Image (sin ((im_fgrey width strip_height) * 360 * width / wave) > 0); strips = map freq_slice wavelengths; join = foldl1 Join.Top_bottom strips; } } /* make a checkerboard pattern */ New_checkerboard = class Image value { width = 64; height = 64; horizontal_patch_size = 8; vertical_patch_size = 8; horizontal_patch_offset = 0; vertical_patch_offset = 0; value = xstripes ^ ystripes { pixels = make_xy width height; xpixels = pixels?0 + horizontal_patch_offset; ypixels = pixels?1 + vertical_patch_offset; make_stripe pix swidth = pix % (swidth * 2) >= swidth; xstripes = make_stripe xpixels horizontal_patch_size; ystripes = make_stripe ypixels vertical_patch_size; } } /* make a grid pattern */ New_grid = class Image value { width = 64; height = 64; horizontal_line_spacing = 8; vertical_line_spacing = 8; line_thickness = 1; horizontal_grid_offset = 0; vertical_grid_offset = 0; value = xstripes | ystripes { pixels = make_xy width height; xpixels = pixels?0 + horizontal_grid_offset; ypixels = pixels?1 + vertical_grid_offset; make_stripe pix swidth = pix % swidth < line_thickness; xstripes = make_stripe xpixels horizontal_line_spacing; ystripes = make_stripe ypixels vertical_line_spacing; } } #separator /* make a gaussian matrix */ New_gauss_matrix = class Matrix_vips _mask.value _mask.scale _mask.offset _mask.filename _mask.display { sigma = Slider 0.001 10 1; min_amplitude = Slider 0 1 0.2; integer = Toggle "Integer" false; _mask = fn sigma.value min_amplitude.value { fn = im_gauss_imask, integer = im_gauss_dmask; } } /* make a laplacian of a gaussian mask */ New_log_matrix = class Matrix_vips _mask.value _mask.scale _mask.offset _mask.filename _mask.display { sigma = Slider 0.001 10 1.5; min_amplitude = Slider 0 1 0.1; integer = Toggle "Integer" false; _mask = fn sigma.value min_amplitude.value { fn = im_log_imask, integer = im_log_dmask; } } #separator /* make the mask images for various ideal fourier filters */ New_ideal = class { /* make a mask image for an ideal highpass/lowpass fourier filter */ High_low = class Image value { size = 64; frequency_cutoff = Slider 0.01 0.99 0.5; type = Option "High or low" ["High pass", "Low pass"] 0; _type = type.value; value = image_set_type Image_type.FOURIER (rotquad mask) { mask = im_create_fmask size size _type frequency_cutoff.value 0 0 0 0; } } /* make a mask image for an ideal ring pass/reject fourier filter */ Ring = class Image value { size = 64; frequency_cutoff = Slider 0.01 0.99 0.5; ring_width = Slider 0.01 0.99 0.5; type = Option "Pass or reject" ["Ring pass", "Ring reject"] 0; _type = type.value + 6; value = image_set_type Image_type.FOURIER (rotquad mask) { mask = im_create_fmask size size _type frequency_cutoff.value ring_width.value 0 0 0; } } /* make a mask image for an ideal band pass/reject fourier filter */ Band = class Image value { size = 64; frequency_cutoff_x = Slider 0.01 0.99 0.5; frequency_cutoff_y = Slider 0.01 0.99 0.5; radius = Slider 0.01 0.99 0.5; type = Option "Pass or reject" ["Band pass", "Band reject"] 0; _type = type.value + 12; value = image_set_type Image_type.FOURIER (rotquad mask) { mask = im_create_fmask size size _type frequency_cutoff_x.value frequency_cutoff_y.value radius.value 0 0; } } } /* various Gaussian fourier filters */ New_gaussian = class { /* make a mask image for a gaussian highpass/lowpass fourier filter */ High_low = class Image value { size = 64; frequency_cutoff = Slider 0.01 0.99 0.5; amplitude_cutoff = Slider 0.01 0.99 0.5; type = Option "High or low" ["High pass", "Low pass"] 0; _type = type.value + 4; value = image_set_type Image_type.FOURIER (rotquad mask) { mask = im_create_fmask size size _type frequency_cutoff.value amplitude_cutoff.value 0 0 0; } } /* make a mask image for a gaussian ring pass/reject fourier filter */ Ring = class Image value { size = 64; frequency_cutoff = Slider 0.01 0.99 0.5; ring_width = Slider 0.01 0.99 0.5; amplitude_cutoff = Slider 0.01 0.99 0.5; type = Option "Pass or reject" ["Ring pass", "Ring reject"] 0; _type = type.value + 10; value = image_set_type Image_type.FOURIER (rotquad mask) { mask = im_create_fmask size size _type frequency_cutoff.value ring_width.value amplitude_cutoff.value 0 0; } } /* make a mask image for a gaussian band pass/reject fourier filter */ Band = class Image value { size = 64; frequency_cutoff_x = Slider 0.01 0.99 0.5; frequency_cutoff_y = Slider 0.01 0.99 0.5; radius = Slider 0.01 0.99 0.5; amplitude_cutoff = Slider 0.01 0.99 0.5; type = Option "Pass or reject" ["Band pass", "Band reject"] 0; _type = type.value + 16; value = image_set_type Image_type.FOURIER (rotquad mask) { mask = im_create_fmask size size _type frequency_cutoff_x.value frequency_cutoff_y.value radius.value amplitude_cutoff.value 0; } } } /* various Butterworth fourier filters */ New_butterworth = class { /* make a mask image for a Butterworth highpass/lowpass fourier filter */ High_low = class Image value { size = 64; order = Slider 1 10 2; frequency_cutoff = Slider 0.01 0.99 0.5; amplitude_cutoff = Slider 0.01 0.99 0.5; type = Option "High or low" ["High pass", "Low pass"] 0; _type = type.value + 2; value = image_set_type Image_type.FOURIER (rotquad mask) { mask = im_create_fmask size size _type order.value frequency_cutoff.value amplitude_cutoff.value 0 0; } } /* make a mask image for a Butterworth ring pass/reject fourier filter */ Ring = class Image value { size = 64; order = Slider 1 10 2; frequency_cutoff = Slider 0.01 0.99 0.5; ring_width = Slider 0.01 0.99 0.5; amplitude_cutoff = Slider 0.01 0.99 0.5; type = Option "Pass or reject" ["Ring pass", "Ring reject"] 0; _type = type.value + 8; value = image_set_type Image_type.FOURIER (rotquad mask) { mask = im_create_fmask size size _type order.value frequency_cutoff.value ring_width.value amplitude_cutoff.value 0; } } /* make a mask image for a Butterworth band pass/reject fourier filter */ Band = class Image value { size = 64; order = Slider 1 10 2; frequency_cutoff_x = Slider 0.01 0.99 0.5; frequency_cutoff_y = Slider 0.01 0.99 0.5; radius = Slider 0.01 0.99 0.5; amplitude_cutoff = Slider 0.01 0.99 0.5; type = Option "Pass or reject" ["Band pass", "Band reject"] 0; _type = type.value + 14; value = image_set_type Image_type.FOURIER (rotquad mask) { mask = im_create_fmask size size _type order.value frequency_cutoff_x.value frequency_cutoff_y.value radius.value amplitude_cutoff.value; } } } #separator /* make a slice through CIELAB space */ New_CIELAB_slice = class Image value { size = 64; L = Slider 0 100 50; value = lab_slice size L.value; } /* pick a colour in LAB space */ New_LAB_colour = widget "Lab" [50, 0, 0] { // ab_slice size size = 512; // range of values ... +/- 128 for ab range = 256; // map xy in slice image to ab and back xy2ab x = x / (size / range); ab2xy a = (a * (size / range)); widget space default_value = class Colour space value { L = default_value?0; a = default_value?1; b = default_value?2; lightness = Slider 0 100 L; ab_slice = Image (lab_slice size lightness.value); point = Point ab_slice (ab2xy a) (ab2xy b); value = [lightness.value, xy2ab point.left, xy2ab point.top]; Colour_edit colour_space value = widget colour_space value; } } nip2-8.7.0/share/nip2/compat/7.9/_list.def0000644000175000017500000001743713224651032014675 00000000000000/* concat l: join a list of lists together * * concat ["abc","def"] == "abcdef". * concat :: [[*]] -> [*] */ concat l = foldr join [] l; /* drop n l: drop the first n elements from list l * * drop 3 "abcd" == "d" * drop :: num -> [*] -> [*] */ drop n l = l, n <= 0 || l == [] = drop (n - 1) (tl l); /* dropwhile fn l: drop while fn is true * * dropwhile is_digit "1234pigs" == "pigs" * dropwhile :: (* -> bool) -> [*] -> [*] */ dropwhile fn l = [], l == [] = dropwhile fn (tl l), fn (hd l) = l; /* extract n l: extract element at index n from list l */ extract = converse subscript; /* filter fn l: return all elements of l for which predicate fn holds * * filter is_digit "1one2two3three" = "123" * filter :: (* -> bool) -> [*] -> [*] */ filter fn l = foldr addif [] l { addif x l = x : l, fn x; = l; } /* foldl fn st l: fold list l up from the left using function fn and start value st * * Start from the left hand end of the list (unlike foldr, see below). * foldl is less useful (and much slower). * * foldl fn start [a,b .. z] = ((((st fn a) fn b) ..) fn z) * foldl :: (* -> ** -> *) -> * -> [**] -> * */ foldl fn st l = st, l == [] = foldl fn (fn st (hd l)) (tl l); /* foldl1 fn l: like foldl, but use the 1st element as the start value * * foldl1 fn [1,2,3] == ((1 fn 2) fn 3) * foldl1 :: (* -> * -> *) -> [*] -> * */ foldl1 fn l = [], l == [] = foldl fn (hd l) (tl l); /* foldr fn st l: fold up list l, right to left, with function fn and start * * foldr fn st [a,b..z] = (a fn (b fn (.. (z fn st)))) * foldr :: (* -> ** -> **) -> ** -> [*] -> ** */ foldr fn st l = st, l == [] = fn (hd l) (foldr fn st (tl l)); /* foldrl fn l: like foldr, but use the 1st element as the start value * * foldr1 fn [1,2,3,4] == (2 fn (3 fn (4 fn 1))) * foldr1 :: (* -> * -> *) -> [*] -> * */ foldr1 fn l = [], l == [] = foldr fn (hd l) (tl l); /* Search a list for an element, returning it's index (or -1) * * index (equal 12) [13,12,11] == 1 * index :: (* -> bool) -> [*] -> real */ index fn list = search list 0 { search l n = -1, l == [] = n, fn (hd l) = search (tl l) (n + 1); } /* init l: remove last element of list l * * The dual of tl. * init [1,2,3] == [1,2] * init :: [*] -> [*] */ init l = error "init of []", l == []; = [], tl l == []; = hd l : init (tl l); /* iterate f x: repeatedly apply f to x * * return the infinite list [x, f x, f (f x), ..]. * iterate (multiply 2) 1 == [1, 2, 4, 8, 16, 32, 64 ... ] * iterate :: (* -> *) -> * -> [*] */ iterate f x = x : iterate f (f x); /* land l: and all the elements of list l together * * land (map (==0) list) == true, if every element of list is zero. * land :: [bool] -> bool */ land = foldr logical_and true; /* last l: return the last element of list l * * The dual of hd. last [1,2,3] == 3 * last :: [*] -> [*] */ last l = error "last of []", l == [] = hd l, tl l == [] = last (tl l); /* len l: length of list l * * len :: [*] -> num */ len l = 0, l == [] = 1 + len (tl l); /* limit l: return the first element of l which is equal to its predecessor * * useful for checking for convergence * limit :: [*] -> * */ limit l = error "incorrect use of limit", l == [] || tl l == [] || tl (tl l) == [] = a, a == b = limit (b : x) { a = l?0; b = l?1; x = tl (tl l); } /* lor l: or all the elements of list l together * * lor (map (equal 0) list) == true, if any element of list is zero. * lor :: [bool] -> bool */ lor = foldr logical_or false; /* map fn l: map function fn over list l * * map :: (* -> **) -> [*] -> [**] */ map f l = [], l == []; = f (hd l) : map f (tl l); /* map2 fn l1 l2: map two lists together with fn * * map2 :: (* -> ** -> ***) -> [*] -> [**] -> [***] */ map2 fn l1 l2 = map fn' (zip2 l1 l2) { fn' p = fn p?0 p?1; } /* map3 fn l1 l2 l3: map three lists together with fn * * map3 :: (* -> ** -> *** -> ****) -> [*] -> [**] -> [***] -> [****] */ map3 fn l1 l2 l3 = map fn' (zip3 l1 l2 l3) { fn' p = fn p?0 p?1 p?2; } /* member l x: true if x is a member of list l * * is_digit == member "0123456789" * member :: [*] -> * -> bool */ member l x = lor (map (equal x) l); /* mkset eq l: remove duplicates from list l using equality function * * mkset :: (* -> bool) -> [*] -> [*] */ mkset eq l = [], l == [] = a : filter (not @ eq a) (mkset eq x) { a = hd l; x = tl l; } /* postfix l r: add r to the end of list l * * The dual of ':'. * postfix :: [*] -> ** -> [*,**] */ postfix l r = l ++ [r]; /* repeat x: make an infinite list of xes * * repeat :: * -> [*] */ repeat x = map (const x) [1..]; /* replicate n x: make n copies of x in a list * * replicate :: num -> * -> [*] */ replicate n x = take n (repeat x); /* reverse l: reverse list l * * reverse :: [*] -> [*] */ reverse l = foldl (converse cons) [] l; /* scan fn st l: apply (fold fn r) to every initial segment of a list * * scan add 0 [1,2,3] == [1,3,6] * scan :: (* -> ** -> *) -> * -> [**] -> [*] */ scan fn = g { g st l = [st], l == [] = st : g (fn st (hd l)) (tl l); } /* sort l: sort list l into ascending order * * sort :: [*] -> [*] */ sort l = sortc less_equal l; /* sortc comp l: sort list l into order using a comparision function * * Uses merge sort (n log n behaviour) * sortc :: (* -> * -> bool) -> [*] -> [*] */ sortc comp l = l, n <= 1 = merge (sortc comp (take n2 l)) (sortc comp (drop n2 l)) { n = len l; n2 = (int) (n / 2); /* merge l1 l2: merge sorted lists l1 and l2 to make a single * sorted list */ merge l1 l2 = l2, l1 == [] = l1, l2 == [] = a : merge x (b : y), comp a b = b : merge (a : x) y { a = hd l1; x = tl l1; b = hd l2; y = tl l2; } } /* sortpl pl l: sort by a list of predicates * * sortpl :: (* -> bool) -> [*] -> [*] */ sortpl pl l = sortc (test pl) l { /* Comparision function ... put true before false, if equal move on to * the next predicate. */ test pl a b = true, pl == [] = ta, ta != tb = test (tl pl) a b { ta = pl?0 a; tb = pl?0 b; } } /* sortr l: sort list l into descending order * * sortr :: [*] -> [*] */ sortr l = sortc more l; /* split fn l: break a list into sections separated by fn * * split is_space "hello world" == ["hello", "world"] * split :: (* -> bool) -> [*] -> [[*]] */ split fn l = [], l == [] = head : split fn tail { nfn = not @ fn; l' = dropwhile fn l; head = takewhile nfn l'; tail = dropwhile nfn l'; } /* splitpl fnl l: split a list up with a list of predicates * * splitpl [is_digit, is_letter, is_digit] "123cat" == ["123", "cat", []] * splitpl :: [* -> bool] -> [*] -> [[*]] */ splitpl fnl l = l, fnl == [] = head : splitpl (tl fnl) tail { head = takewhile (hd fnl) l; tail = dropwhile (hd fnl) l; } /* split_lines n l: split a list into equal length lines * * split_lines 4 "1234567" == ["1234", "567"] * splitl :: int -> [*] -> [[*]] */ split_lines n l = [], l == [] = take n l : split_lines n (drop n l); /* take n l: take the first n elements from list l * take :: num -> [*] -> [*] */ take n l = [], n <= 0 = [], l == [] = hd l : take (n-1) (tl l); /* takewhile fn l: take from the front of a list while predicate fn holds * * takewhile is_digit "123onetwothree" == "123" * takewhile :: (* -> bool) -> [*] -> [*] */ takewhile fn l = [], l == [] = hd l : takewhile fn (tl l), fn (hd l) = []; /* zip2 l1 l2: zip two lists together * * zip2 [1,2] ['a', 'b', 'c'] == [[1,'a'],[2,'b']] * zip2 :: [*] -> [**] -> [[*,**]] */ zip2 l1 l2 = [], l1 == [] || l2 == [] = [hd l1, hd l2] : zip2 (tl l1) (tl l2); /* zip3 l1 l2 l3: zip three lists together * * zip3 [1,2] ['a', 'b', 'c'] [true] == [[1,'a',true]] * zip3 :: [*] -> [**] ->[***] -> [[*,**,***]] */ zip3 l1 l2 l3 = [], l1 == [] || l2 == [] || l3 == [] = [hd l1, hd l2, hd l3] : zip3 (tl l1) (tl l2) (tl l3); nip2-8.7.0/share/nip2/compat/7.9/_errors.def0000644000175000017500000000273313224651032015227 00000000000000 /* Lots of error messages. */ errors = class { not1band = "not 1 band image"; not1band8bit = "not 1 band 8-bit image"; not1band3band = "not 1 band image, or 3 band 1 column image"; notodd = "not odd width|height"; notmask = "not mask"; notmaskim = "not image|mask, mask"; badcoding = "not NOCODING or LABPACK"; badlab = "unable to convert to LAB"; allreal = "not all real numbers"; allreg = "not all regions"; badargs = "bad arguments to "; badbands = "images have differing numbers of bands"; badcolour = "bad arg to colourspace function"; badmatrixmatch = "matrix arguments do not match"; badnum = "wrong number of real number arguments"; bandFmt = "bad BandFmt"; internal = "menu macro sanity failure!"; lengthdiff = "list arguments differ in length"; noimage = "no image argument"; noregion = "no region argument"; notim = "not image"; notimcmplx = "not image|complex"; notimnotreal = "non image arguments not all real numbers"; notimreg = "not image|region"; notregimreg = "not region, image|region"; notimregnum = "not image|region|number"; notimregstr = "not image|region|string"; notmatnum = "not real|matrix|mask"; notmatrix = "not matrix|mask"; notodd_square_matrix = "not odd-sided square matrix|mask"; notreal = "not real number"; notreglist = "not region|[region]"; notsquare_matrix = "not square matrix|mask"; regwrong = "regions not on two images"; sfacgt1 = "shrink factors should be >= 1"; unknownType = "unknown type"; usage = "usage: "; }; nip2-8.7.0/share/nip2/compat/7.9/X_ray.def0000644000175000017500000002501513224651032014634 00000000000000/* replace dark or light section of im1 with section from im2 */ Replace_area im1 im2 = class Image value { _check_args = [ [im1, "im1", check_Image], [im2, "im2", check_Image] ] ++ super._check_args; _vislevel = 3; /* Region on first image placed in the top left hand corner, * positioned and size relative to the height and width of im1. */ r1 = Region_relative im1 0.1 0.1 0.1 0.1; /* Point on second image placed in the top left hand corner, * positioned relative to the height and width of im2. Used to * define _r2, the region from which the section of image is cloned * from. */ p2 = Point im2 (im2.width * 0.1 - im2.xoffset) (im2.height * 0.1 - im2.yoffset); _r2 = Region im2 p2.left p2.top r1.width r1.height; _mask = [r1 <= Options.scale_cutoff, r1 >= Options.scale_cutoff] ? Options.control; mask = _mask?0; Options = option_1, format < 4 = option_2 { format = im1.format; option_1 = class { _vislevel = 3; /* Option toggle used to define whether the user is replacing a * dark or a light area. */ control = Option "Removing a" [ "Dark Area", "Light Area" ] 1; /* Used to select the area to be replaced. */ scale_cutoff = Slider 0.01 mx (mx / 2) { mx = Image_format.maxval im1.format; } /* Option toggle how the levels in the replacment area are calculated. * Replacement with gaussian noise uses the scale&offset balancing. */ process = Option "Use" [ "Scale&Offset Balancing", "Gaussian noise replacement", "Histogram Balancing" ] 0; /* This allows the function to be paused. */ pause = Toggle "Pause function to allow easy adjustment of region r1." true; } option_2 = class { _vislevel = 3; /* Option toggle used to define whether the user is replacing a * dark or a light area. */ control = Option "Removing a" [ "Dark Area", "Light Area" ] 1; /* Used to select the area to be replaced. */ scale_cutoff = Slider 0.01 mx (mx / 2) { /* the below function can not cope with floats * and don't need massive range for 32-bit ints so * will just define the max as for a 16 bit unsigned. */ mx = Image_format.maxval 2; //im1.format; } /* Option toggle how the levels in the replacment area are calculated. * Replacement with gaussian noise uses the scale&offset balancing. */ process = Option "Use" [ "Scale&Offset Balancing", "Gaussian noise replacement" ] 0; /* This allows the function to be paused. */ pause = Toggle "Pause function to allow easy adjustment of region r1." true; } } value = im1.value, Options.pause = im_insert im1.value patch r1.left r1.top { patch = _so_balance mask r1.value _r2.value false, Options.process == 0; = _so_balance mask r1.value _r2.value true, Options.process == 1; = _hist_balance_2 mask r1.value _r2.value; } }; #separator /* Balance the effect of secondary structure on an X-ray image * Takes an X-ray image an 8-bit control mask and a list of 8-bit reference * masks, where the masks are white on a black background. Then simplifys * the original X-ray to reduce interference from stretchers cradles etc. */ Balance_areas im_in m_control m_list = class Image value { _vislevel = 3; _format = im_in.format; Options = option_1, format < 4 = option_2 { format = im_in.format; option_1 = class { _vislevel = 3; pause = Toggle "Pause Process." true; blur = Slider 0 5 0; _blur = rint blur.value; option = Toggle "Use Scale&Offset Balancing rather than Histogram." true; _option = option; } option_2 = class { _vislevel = 3; pause = Toggle "Pause Process." true; blur = Slider 0 5 0; _blur = rint blur.value; _option = true; } } _control_im = _section_select2 im_in m_control; _control_values = _so_values _control_im; /* blur mask over a set number of pixels then histogram match an area * of the original image defined by m_current to the _control_im * then blend the matched area back into im_in. */ process m_current im_start = im_out { alternative = false; bl_mask = _mask_blur_2 m_current Options._blur; scaled_im = _so_convert _control_values im_start m_current, Options._option == true = _hist_convert_2 _control_im im_start m_current; fmt_im = clip2fmt im_start.format scaled_im; blended_im = im_blend bl_mask scaled_im.value im_start.value; im_out = Image (clip2fmt im_start.format blended_im); } value = im_in.value, Options.pause == true = (foldr process im_in m_list).value; }; _so_balance mask im1 im2 gauss = result { /* Extract the undamaged areas. */ im1' = if !mask then Image im1 else 0; im2' = if !mask then Image im2 else 0; /* Find the non_zero means of the undamaged areas. */ m1 = _mean_fn im1'; m2 = _mean_fn im2'; im1_mn = im1' - m1; im2_mn = im2' - m2; scale = (max im1_mn)/(max im2_mn); im2_corrected_a = ((im2 - m2) * scale) + m1; im2_corrected_b = clip2fmt im1'.format im2_corrected_a; /* Option to convert replacement image to scaled gaussian noise */ im2_corrected = im2_corrected_b, gauss == false = _gauss_noise im2_corrected_b; /* Blur mask. */ mask' = _mask_blur_2 mask 5; //mask' = _feather_mask_2 5 mask.value; /* Blend im2 into im1. */ result = im_blend mask' im2_corrected im1; }; /* make a new image of gaussian noise */ _gauss_noise im2 = value { i = Image (im2); width = i.width; height = i.height; mean = Mean i; deviation = Deviation i; noise = im_gaussnoise width height mean deviation; value = clip2fmt i.format noise; }; /* Dilate and blur a mask by a number of pixels. * *_feather_mask_2 pixels mask * = im_convsep (dilate dilate_matrix mask) blur_matrix *{ * dilate_matrix = (iterate (dilate _morph_mask8) _morph_mask8) ? pixels; * blur_matrix = Matrix_con pixels 0 [(map (const 1) [1 .. pixels])]; *}; */ /* Mask is 255 to indicate parts of im1 which are damaged: replace these bits * with the corresponding parts of im2. * * Match the histograms of the two images to hide grey-level differences, be * careful to only consider undamaged sections. * * Feather the edges of the blend to hide the join. * * mask is an Image class. im1, im2 and result are vips images. */ _hist_balance_2 mask im1 im2 = result { format = im_header_int "BandFmt" im1; bands = im_header_int "Bands" im1; /* checks for 8 or 16 bit signed and converts to unsigned */ force_unsigned i = clip2fmt Image_format.UCHAR (i + 128), format == Image_format.CHAR = clip2fmt Image_format.USHORT (i + 32768), format == Image_format.SHORT = i; /* undo any force_unsigned */ format_restore i = clip2fmt Image_format.CHAR (i - 128), format == Image_format.CHAR = clip2fmt Image_format.SHORT (i - 32768), format == Image_format.SHORT = i; /* Find histogram and then zap the zero column (0 == background). For * 16-bit images, the histogram can be smaller than 65535 .... expand * up to full size. */ build_hist i = im_insert big_black h' 0 0 { max_value = Image_format.maxval i.format; h = hist_find i.value; black_1 = image_new 1 1 i.bands Image_format.UINT Image_coding.NOCODING i.type 0 0 0; big_black = image_new max_value 1 i.bands Image_format.UINT Image_coding.NOCODING i.type 0 0 0; h' = im_insert h black_1 0 0; } /* We can't get hists of signed images :-( go unsigned if we have to. */ im1' = force_unsigned im1; im2' = force_unsigned im2; /* Extract the undamaged areas. */ reference = if !mask then Image im1' else 0; secondary = if !mask then Image im2' else 0; /* Find the hists of the undamaged areas. */ h1 = build_hist reference; h2 = build_hist secondary; /* Match greylevels of im2 to match im1. */ im2'' = hist_map (hist_match h1 h2) im2'; /* Feather mask. */ mask' = _mask_blur_2 mask 5; //mask' = _feather_mask_2 5 mask.value; /* Blend im2 into im1. */ im1'' = im_blend mask' im2'' im1'; /* Undo any signed/unsigned nonsense. */ result = format_restore im1''; }; // Blurs the edges of an 8 bit mask, over a given number of pixels. _mask_blur_2 mask pixel = value { pixels = 1, pixel == 0 = pixel; black = im_black (mask.width + (2*pixels)) (mask.height + (2*pixels)) 1; new_mask = Image (im_insert black mask.value pixels pixels); blur_matrix = Matrix_con pixels 0 [(map (const 1) [1 .. pixels])]; im_blur = im_convsep new_mask.value blur_matrix; left = pixels; top = pixels; width = mask.width; height = mask.height; value = im_extract_area im_blur left top width height; }; _so_values im = result { mean_of_im = _mean_fn im; adjusted_im = im - mean_of_im; max_of_im = max adjusted_im; result = [mean_of_im, max_of_im]; }; _so_convert con_values im mask = result { im' = _section_select2 im mask; im_values = _so_values im'; mean_of_con = con_values?0; mean_of_im = im_values?0; max_of_con = con_values?1; max_of_im = im_values?1; scale = (max_of_con)/(max_of_im); im_convert = ((im - mean_of_im) * scale) + mean_of_con; result = clip2fmt im.format im_convert; }; /* Convert the histogram of part of image im_a, depending on the mask im_m, * to match the histogram of im_c. */ _hist_convert_2 control_im im adjust_mask = im_final { max_value = Image_format.maxval im.format; adjust_im = _section_select2 im adjust_mask; hist_c = hist_fn control_im; hist_a = hist_fn adjust_im; /* Find histogram and then edit out any information related to parts * of the image with value 0. Ensure that the histogram represents * the full scale for the appropriate format. Output corrected * histograms for the correct parts of the image. */ hist_fn im_in = output { hist_1 = hist_find im_in; black_1 = clip2fmt hist_1.format (im_black 1 1 1); hist_2 = im_insert hist_1.value black_1 0 0; black_2 = clip2fmt hist_1.format (im_black max_value 1 1); output = im_insert black_2 hist_2 0 0; } im_final = hist_map (hist_match hist_a hist_c) im; }; //------------------------------------------------------------------------------- /*Returns a section of im, defined by a mask, on a black background*/ _section_select2 im_in mask = output { output = clip2fmt im_in.format (im_black im_in.width im_in.height 1), mask == 0 = im_in; }; _mean_fn im = no_out { zero_im = (im == 0); zero_mean = mean zero_im; no_mean = mean im; no_out = no_mean/(1 - (zero_mean/255)); } nip2-8.7.0/share/nip2/compat/7.9/_predicate.def0000644000175000017500000000551013224651032015647 00000000000000 /* is_colour_space str: is a string one of nip's colour space names */ is_colour_space str = Image_type.colour_spaces.present 0 str; /* is_colour_type n: is a number one of VIPS's colour spaces */ is_colour_type n = Image_type.colour_spaces.present 1 n; /* is_number: is a real or a complex number. */ is_number a = is_real a || is_complex a; /* is_int: is an integer */ is_int a = is_real a && a == (int) a; /* is_uint: is an unsigned integer */ is_uint a = is_int a && a >= 0; /* is_pint: is a positive integer */ is_pint a = is_int a && a > 0; /* is_preal: is a positive real */ is_preal a = is_real a && a > 0; /* is_ureal: is an unsigned real */ is_ureal a = is_real a && a >= 0; /* is_letter c: true of character c is an ASCII letter * * is_letter :: char -> bool */ is_letter c = ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z'); /* is_digit c: true if character c is an ASCII digit * * is_digit :: char->bool */ is_digit x = '0' <= x && x <= '9'; /* A whitespace character. * * is_space :: char->bool */ is_space = member " \n\t"; /* is_listof p s: true if finite list with p true for every element. */ is_listof p l = is_list l && land (map p l); /* is_string s: true if finite list of char. */ is_string s = is_listof is_char s; /* is_real_list l: is l a list of real numbers ... test each element, * so no infinite lists pls. */ is_real_list l = is_listof is_real l; /* is_string_list l: is l a finite list of finite strings. */ is_string_list l = is_listof is_string l; /* is_rectangular l: is l a rectangular data structure */ is_rectangular l = true, !is_list l = true, land (map is_obj l) = true, land (map is_list l) && land (map (not @ is_obj) l) && land (map is_rectangular l) && len l > 0 && land (map (equal (hd lengths)) (tl lengths)) = false { // treat strings as a base type, not [char] is_obj x = !is_list x || is_string x; lengths = map len l; } /* is_matrix l: is l a list of lists of real numbers, all the same length */ is_matrix l = is_listof is_real_list l && is_rectangular l; /* is_square_matrix l: is l a matrix with width == height */ is_square_matrix l = true, l == [] = is_matrix l && len l == len (hd l); /* is_oddmatrix l: is l a matrix with odd-length sides */ is_oddmatrix l = true, l == [] = is_matrix l && (len l) % 2 == 1 && (len (l?0)) % 2 == 1; /* is_odd_square_matrix l: is l a square_matrix with odd-length sides */ is_odd_square_matrix l = is_square_matrix l && (len l) % 2 == 1; /* Is an item in a column of a table? */ is_incolumn n table x = member (map (extract n) table) x; /* Is HGuide or VGuide. */ is_Guide x = is_instanceof "HGuide" x || is_instanceof "VGuide" x; is_Point x = is_instanceof "Point" x; /* A list of the form [[1,2],[3,4],[5,6]...] */ is_xy_list l = is_list l && land (map xy l) { xy l = is_real_list l && len l == 2; } nip2-8.7.0/share/nip2/compat/7.9/Colour.def0000644000175000017500000004036613224651032015023 00000000000000/* Save a bit of typing. */ _colour_conv from to x = map_unary (colour_transform from to) x; /* convert Mono to various formats */ Mono_to = class { /* convert mono colourspace to mono colourspace */ Mono x = _colour_conv Image_type.B_W Image_type.B_W x; /* convert mono colourspace to XYZ colourspace */ XYZ x = _colour_conv Image_type.B_W Image_type.XYZ x; /* convert mono colourspace to Yxy colourspace */ Yxy x = _colour_conv Image_type.B_W Image_type.YXY x; /* convert mono colourspace to Lab colourspace */ Lab x = _colour_conv Image_type.B_W Image_type.LAB x; /* convert mono colourspace to LCh colourspace */ LCh x = _colour_conv Image_type.B_W Image_type.LCH x; /* convert mono colourspace to UCS colourspace */ UCS x = _colour_conv Image_type.B_W Image_type.UCS x; /* convert mono colourspace to RGB colourspace */ RGB x = _colour_conv Image_type.B_W Image_type.RGB x; /* convert mono colourspace to sRGB colourspace */ sRGB x = _colour_conv Image_type.B_W Image_type.sRGB x; /* convert mono colourspace to LabQ colourspace */ LabQ x = _colour_conv Image_type.B_W Image_type.LABQ x; /* convert mono colourspace to LabS colourspace */ LabS x = _colour_conv Image_type.B_W Image_type.LABS x; } /* convert XYZ to various formats */ XYZ_to = class { /* convert XYZ colourspace to mono colourspace */ Mono x = _colour_conv Image_type.XYZ Image_type.B_W x; /* convert XYZ colourspace to XYZ colourspace */ XYZ x = _colour_conv Image_type.XYZ Image_type.XYZ x; /* convert XYZ colourspace to Yxy colourspace */ Yxy x = _colour_conv Image_type.XYZ Image_type.YXY x; /* convert XYZ colourspace to Lab colourspace */ Lab x = _colour_conv Image_type.XYZ Image_type.LAB x; /* convert XYZ colourspace to LCh colourspace */ LCh x = _colour_conv Image_type.XYZ Image_type.LCH x; /* convert XYZ colourspace to UCS colourspace */ UCS x = _colour_conv Image_type.XYZ Image_type.UCS x; /* convert XYZ colourspace to RGB colourspace */ RGB x = _colour_conv Image_type.XYZ Image_type.RGB x; /* convert XYZ colourspace to sRGB colourspace */ sRGB x = _colour_conv Image_type.XYZ Image_type.sRGB x; /* convert XYZ colourspace to LabQ colourspace */ LabQ x = _colour_conv Image_type.XYZ Image_type.LABQ x; /* convert XYZ colourspace to LabS colourspace */ LabS x = _colour_conv Image_type.XYZ Image_type.LABS x; } /* convert Yxy to various formats */ Yxy_to = class { /* convert Yxy colourspace to mono colourspace */ Mono x = _colour_conv Image_type.YXY Image_type.B_W x; /* convert Yxy colourspace to XYZ colourspace */ XYZ x = _colour_conv Image_type.YXY Image_type.XYZ x; /* convert Yxy colourspace to Yxy colourspace */ Yxy x = _colour_conv Image_type.YXY Image_type.YXY x; /* convert Yxy colourspace to Lab colourspace */ Lab x = _colour_conv Image_type.YXY Image_type.LAB x; /* convert Yxy colourspace to LCh colourspace */ LCh x = _colour_conv Image_type.YXY Image_type.LCH x; /* convert Yxy colourspace to UCS colourspace */ UCS x = _colour_conv Image_type.YXY Image_type.UCS x; /* convert Yxy colourspace to RGB colourspace */ RGB x = _colour_conv Image_type.YXY Image_type.RGB x; /* convert Yxy colourspace to sRGB colourspace */ sRGB x = _colour_conv Image_type.YXY Image_type.sRGB x; /* convert Yxy colourspace to LabQ colourspace */ LabQ x = _colour_conv Image_type.YXY Image_type.LABQ x; /* convert Yxy colourspace to LabS colourspace */ LabS x = _colour_conv Image_type.YXY Image_type.LABS x; } /* convert Lab to various formats */ Lab_to = class { /* convert Lab colourspace to mono colourspace */ Mono x = _colour_conv Image_type.LAB Image_type.B_W x; /* convert Lab colourspace to XYZ colourspace */ XYZ x = _colour_conv Image_type.LAB Image_type.XYZ x; /* convert Lab colourspace to Yxy colourspace */ Yxy x = _colour_conv Image_type.LAB Image_type.YXY x; /* convert Lab colourspace to Lab colourspace */ Lab x = _colour_conv Image_type.LAB Image_type.LAB x; /* convert Lab colourspace to LCh colourspace */ LCh x = _colour_conv Image_type.LAB Image_type.LCH x; /* convert Lab colourspace to UCS colourspace */ UCS x = _colour_conv Image_type.LAB Image_type.UCS x; /* convert Lab colourspace to RGB colourspace */ RGB x = _colour_conv Image_type.LAB Image_type.RGB x; /* convert Lab colourspace to sRGB colourspace */ sRGB x = _colour_conv Image_type.LAB Image_type.sRGB x; /* convert Lab colourspace to LabQ colourspace */ LabQ x = _colour_conv Image_type.LAB Image_type.LABQ x; /* convert Lab colourspace to LabS colourspace */ LabS x = _colour_conv Image_type.LAB Image_type.LABS x; } /* convert LCh to various formats */ LCh_to = class { /* convert LCh colourspace to mono colourspace */ Mono x = _colour_conv Image_type.LCH Image_type.B_W x; /* convert LCh colourspace to XYZ colourspace */ XYZ x = _colour_conv Image_type.LCH Image_type.XYZ x; /* convert LCh colourspace to Yxy colourspace */ Yxy x = _colour_conv Image_type.LCH Image_type.YXY x; /* convert LCh colourspace to Lab colourspace */ Lab x = _colour_conv Image_type.LCH Image_type.LAB x; /* convert LCh colourspace to LCh colourspace */ LCh x = _colour_conv Image_type.LCH Image_type.LCH x; /* convert LCh colourspace to UCS colourspace */ UCS x = _colour_conv Image_type.LCH Image_type.UCS x; /* convert LCh colourspace to RGB colourspace */ RGB x = _colour_conv Image_type.LCH Image_type.RGB x; /* convert LCh colourspace to sRGB colourspace */ sRGB x = _colour_conv Image_type.LCH Image_type.sRGB x; /* convert LCh colourspace to LabQ colourspace */ LabQ x = _colour_conv Image_type.LCH Image_type.LABQ x; /* convert LCh colourspace to LabS colourspace */ LabS x = _colour_conv Image_type.LCH Image_type.LABS x; } /* convert UCS to various formats */ UCS_to = class { /* convert UCS colourspace to mono colourspace */ Mono x = _colour_conv Image_type.UCS Image_type.B_W x; /* convert UCS colourspace to XYZ colourspace */ XYZ x = _colour_conv Image_type.UCS Image_type.XYZ x; /* convert UCS colourspace to Yxy colourspace */ Yxy x = _colour_conv Image_type.UCS Image_type.YXY x; /* convert UCS colourspace to Lab colourspace */ Lab x = _colour_conv Image_type.UCS Image_type.LAB x; /* convert UCS colourspace to LCh colourspace */ LCh x = _colour_conv Image_type.UCS Image_type.LCH x; /* convert UCS colourspace to UCS colourspace */ UCS x = _colour_conv Image_type.UCS Image_type.UCS x; /* convert UCS colourspace to RGB colourspace */ RGB x = _colour_conv Image_type.UCS Image_type.RGB x; /* convert UCS colourspace to sRGB colourspace */ sRGB x = _colour_conv Image_type.UCS Image_type.sRGB x; /* convert UCS colourspace to LabQ colourspace */ LabQ x = _colour_conv Image_type.UCS Image_type.LABQ x; /* convert UCS colourspace to LabS colourspace */ LabS x = _colour_conv Image_type.UCS Image_type.LABS x; } /* convert RGB to various formats */ RGB_to = class { /* convert RGB colourspace to mono colourspace */ Mono x = _colour_conv Image_type.RGB Image_type.B_W x; /* convert RGB colourspace to XYZ colourspace */ XYZ x = _colour_conv Image_type.RGB Image_type.XYZ x; /* convert RGB colourspace to Yxy colourspace */ Yxy x = _colour_conv Image_type.RGB Image_type.YXY x; /* convert RGB colourspace to Lab colourspace */ Lab x = _colour_conv Image_type.RGB Image_type.LAB x; /* convert RGB colourspace to LCh colourspace */ LCh x = _colour_conv Image_type.RGB Image_type.LCH x; /* convert RGB colourspace to UCS colourspace */ UCS x = _colour_conv Image_type.RGB Image_type.UCS x; /* convert RGB colourspace to RGB colourspace */ RGB x = _colour_conv Image_type.RGB Image_type.RGB x; /* convert RGB colourspace to sRGB colourspace */ sRGB x = _colour_conv Image_type.RGB Image_type.sRGB x; /* convert RGB colourspace to LabQ colourspace */ LabQ x = _colour_conv Image_type.RGB Image_type.LABQ x; /* convert RGB colourspace to LabS colourspace */ LabS x = _colour_conv Image_type.RGB Image_type.LABS x; } /* convert sRGB to various formats */ sRGB_to = class { /* convert sRGB colourspace to mono colourspace */ Mono x = _colour_conv Image_type.sRGB Image_type.B_W x; /* convert sRGB colourspace to XYZ colourspace */ XYZ x = _colour_conv Image_type.sRGB Image_type.XYZ x; /* convert sRGB colourspace to Yxy colourspace */ Yxy x = _colour_conv Image_type.sRGB Image_type.YXY x; /* convert sRGB colourspace to Lab colourspace */ Lab x = _colour_conv Image_type.sRGB Image_type.LAB x; /* convert sRGB colourspace to LCh colourspace */ LCh x = _colour_conv Image_type.sRGB Image_type.LCH x; /* convert sRGB colourspace to UCS colourspace */ UCS x = _colour_conv Image_type.sRGB Image_type.UCS x; /* convert sRGB colourspace to RGB colourspace */ RGB x = _colour_conv Image_type.sRGB Image_type.RGB x; /* convert sRGB colourspace to sRGB colourspace */ sRGB x = _colour_conv Image_type.sRGB Image_type.sRGB x; /* convert sRGB colourspace to LabQ colourspace */ LabQ x = _colour_conv Image_type.sRGB Image_type.LABQ x; /* convert sRGB colourspace to LabS colourspace */ LabS x = _colour_conv Image_type.sRGB Image_type.LABS x; } /* convert LabQ to various formats */ LabQ_to = class { /* convert LabQ colourspace to mono colourspace */ Mono x = _colour_conv Image_type.LABQ Image_type.B_W x; /* convert LabQ colourspace to XYZ colourspace */ XYZ x = _colour_conv Image_type.LABQ Image_type.XYZ x; /* convert LabQ colourspace to Yxy colourspace */ Yxy x = _colour_conv Image_type.LABQ Image_type.YXY x; /* convert LabQ colourspace to Lab colourspace */ Lab x = _colour_conv Image_type.LABQ Image_type.LAB x; /* convert LabQ colourspace to LCh colourspace */ LCh x = _colour_conv Image_type.LABQ Image_type.LCH x; /* convert LabQ colourspace to UCS colourspace */ UCS x = _colour_conv Image_type.LABQ Image_type.UCS x; /* convert LabQ colourspace to RGB colourspace */ RGB x = _colour_conv Image_type.LABQ Image_type.RGB x; /* convert LabQ colourspace to sRGB colourspace */ sRGB x = _colour_conv Image_type.LABQ Image_type.sRGB x; /* convert LabQ colourspace to LabQ colourspace */ LabQ x = _colour_conv Image_type.LABQ Image_type.LABQ x; /* convert LabQ colourspace to LabS colourspace */ LabS x = _colour_conv Image_type.LABQ Image_type.LABS x; } /* convert LabS to various formats */ LabS_to = class { /* convert LabS colourspace to mono colourspace */ Mono x = _colour_conv Image_type.LABS Image_type.B_W x; /* convert LabS colourspace to XYZ colourspace */ XYZ x = _colour_conv Image_type.LABS Image_type.XYZ x; /* convert LabS colourspace to Yxy colourspace */ Yxy x = _colour_conv Image_type.LABS Image_type.YXY x; /* convert LabS colourspace to Lab colourspace */ Lab x = _colour_conv Image_type.LABS Image_type.LAB x; /* convert LabS colourspace to LCh colourspace */ LCh x = _colour_conv Image_type.LABS Image_type.LCH x; /* convert LabS colourspace to UCS colourspace */ UCS x = _colour_conv Image_type.LABS Image_type.UCS x; /* convert LabS colourspace to RGB colourspace */ RGB x = _colour_conv Image_type.LABS Image_type.RGB x; /* convert LabS colourspace to sRGB colourspace */ sRGB x = _colour_conv Image_type.LABS Image_type.sRGB x; /* convert LabS colourspace to LabQ colourspace */ LabQ x = _colour_conv Image_type.LABS Image_type.LABQ x; /* convert LabS colourspace to LabS colourspace */ LabS x = _colour_conv Image_type.LABS Image_type.LABS x; } #separator /* recombine image bands with an editable matrix */ Colour_recombination in = map_unary widget in { widget image = class Image value { _check_args = [ [image, "image", check_Image] ] ++ super._check_args; _vislevel = 3; matrix = Matrix_rec (identity_matrix image.bands); value = recomb matrix image.value; } } /* colour temperature conversions */ Colour_temperature = class { /* convert XYZ from D65 to D50 ... use the Bradford approximation */ D65XYZ_to_D50XYZ in = map_unary (colour_unary im_D652D50) in; /* convert XYZ from D50 to D65 ... use the Bradford approximation */ D50XYZ_to_D65XYZ in = map_unary (colour_unary im_D502D65) in; } /* various colour difference metrics */ dE_ = class { /* Apply a converter to an object ... convert image or colour (since * we can guess the colour space we're converting from), don't convert * matrix or vector (since we can't tell ... assume it's in the right * space already). */ _apply_cvt cvt x = cvt x, is_instanceof "Image" x || is_instanceof "Colour" x || is_image x = x; _diff cvt in1 in2 = abs_vec (_apply_cvt cvt in1 - _apply_cvt cvt in2); /* Converter to LAB. */ _lab_cvt = colour_transform_to Image_type.LAB; /* Converter to UCS ... plain UCS is Ch form, so we go LAB again after * to make sure we get a rectangular coord system. */ _ucs_cvt = colour_transform Image_type.LCH Image_type.LAB @ colour_transform_to Image_type.UCS; /* calculate delta-E CIE76 for two objects */ CIE76 in1 in2 = map_binary (_diff _lab_cvt) in1 in2; /* calculate delta-E00 (CIEDE2000) for two objects */ CIE00 in1 in2 = map_binary (colour_binary "im_dE00_fromLab" im_dE00_fromLab) in1 in2; /* calculate delta-E CMC(1:1) for two objects */ UCS in1 in2 = map_binary (_diff _ucs_cvt) in1 in2; } #separator /* apply a coloured tint to a monochrome image */ Tint_mono_image in = map_unary apply_tint in { apply_tint in = class Image value { _check_args = [ [in, "in", check_Image] ] ++ super._check_args; _vislevel = 3; tint = Colour "Lab" [50, 0, 0]; value = image_set_type Image_type.LAB (fancytint inp l_tint a_tint b_tint) { // input image ... to L only inp_lab = colour_transform_to Image_type.LAB in.value; inp = inp_lab?0; // make sure tint is LAB (might be edited) lab_tint = colour_transform_to Image_type.LAB tint; // selected lab l_tint = lab_tint.value?0; a_tint = lab_tint.value?1; b_tint = lab_tint.value?2; // fancy tint function ... don't tint black and white fancytint im l a b = im ++ ima ++ imb { mod = (100 - im) / (100 - l), im > l = im / l; backgr = image_new in.width in.height 1 Image_format.FLOAT Image_coding.NOCODING Image_type.B_W 0 0 0; ima = mod * (backgr + a); imb = mod * (backgr + b); } } } } /* displace neutral axis in LAB colourspace */ Adjust_cast image = map_unary widget image { widget image = class Image value { _check_args = [ [image, "Image", check_Image] ] ++ super._check_args; _vislevel = 3; green_red = Slider (-20) 20 0; blue_yellow = Slider (-20) 20 0; value = (colour_transform_to (get_type image) image'').value { image' = colour_transform_to Image_type.LAB image; image'' = image' + Vector [0, green_red.value, blue_yellow.value]; } } } /* displace h, scale LC in LCh colourspace */ Adjust_hue_saturation_brightness image = map_unary widget image { widget image = class Image value { _check_args = [ [image, "Image", check_Image] ] ++ super._check_args; _vislevel = 3; hue = Slider 0 360 0; saturation = Slider 0.01 5 1; brightness = Slider 0.01 5 1; value = (colour_transform_to (get_type image) image'').value { image' = colour_transform_to Image_type.LCH image; image'' = image' * Vector [bv, sv, 1] + Vector [0, 0, hv]; bv = brightness.value; sv = saturation.value; hv = hue.value; } } } /* find pixels with a similar colour */ Similar_colour image = map_unary match image { match image = class Image value { _check_args = [ [image, "Image", check_Image] ] ++ super._check_args; _vislevel = 3; target_patch = Region image (20 - image.xoffset) (20 - image.yoffset) 10 10; target_colour = Colour_from_image target_patch; dE_threshold = Slider 0 100 10; value = (dE_.CIE76 image target_colour < dE_threshold).value; } } /* plot an ab scatter histogram */ Plot_ab_scatter image = map_unary widget image { widget image = class Image value { _check_args = [ [image, "Image", check_Image] ] ++ super._check_args; _vislevel = 3; bins = 8; value = bg * (((90 / mx) * hist) ++ blk) { lab = colour_transform_to Image_type.LAB image.value; ab = (unsigned char) ((lab?1 ++ lab?2) + 128); hist = hist_find_nD bins ab; mx = max hist; bg = lab_slice bins 1; blk = 1 + im_black bins bins 2; } } } nip2-8.7.0/share/nip2/compat/7.9/_generate.def0000644000175000017500000000355113224651032015504 00000000000000 /* make an image of size x by y whose pixels are their coordinates. */ make_xy x y = (unsigned int) (h ++ v) { h = (x - 1) * im_fgrey x y; v = (y - 1) * im_rot90 (im_fgrey y x); } /* make an image with the specified properties ... pixel is (eg.) * Vector [0, 0, 0], or 12 */ image_new w h b fmt coding type pixel xoff yoff = im'''' { im = im_black w h b + pixel; im' = clip2fmt fmt im; im'' = im_Lab2LabQ im', coding == Image_coding.LABPACK; = im'; im''' = image_set_type type im''; im'''' = image_set_origin xoff yoff im'''; } /* generate a slice of LAB space size x size pixels for L* == l */ lab_slice size l = image_set_type Image_type.LAB im { L = image_new size size 1 Image_format.FLOAT Image_coding.NOCODING Image_type.B_W l (size / 2) (size / 2); A1 = im_fgrey size size; /* im_fgrey always makes 0-1, so these ranges can be wired in. */ A2 = A1 * 256 - 128; A4 = im_rot90 A2; im = L ++ A2 ++ A4; } /* Look at Image, try to make a Colour (failing that, a Vector) which is white * for that image type. */ image_white im = colour_transform_to type white_lab, bands == 3 && coding == Image_coding.NOCODING && colour_spaces.present 1 type = white_lab, coding == Image_coding.LABPACK = Vector (map (const (max_value.lookup 1 0 format)) [1 .. bands]) { bands = im.bands; type = im.type; format = im.format; coding = im.coding; colour_spaces = Image_type.colour_spaces; // white as LAB white_lab = Colour "Lab" [100, 0, 0]; // maximum value for this numeric type max_value = Table [ [255, Image_format.DPCOMPLEX], [255, Image_format.DOUBLE], [255, Image_format.COMPLEX], [255, Image_format.FLOAT], [2 ** 31 - 1, Image_format.INT], [2 ** 32 - 1, Image_format.UINT], [2 ** 15 - 1, Image_format.SHORT], [2 ** 16 - 1, Image_format.USHORT], [2 ** 7 - 1, Image_format.CHAR], [2 ** 8 - 1, Image_format.UCHAR] ]; } nip2-8.7.0/share/nip2/compat/7.9/Math.def0000644000175000017500000001325113224651032014442 00000000000000/* basic arithmetic for objects */ Arithmetic = class { /* add a and b */ Add a b = map_binary add a b; /* subtract b from a */ Subtract a b = map_binary subtract a b; /* multiply a by b */ Multiply a b = map_binary multiply a b; /* divide a by b */ Divide a b = map_binary divide a b; /* remainder after dividing a by b */ Remainder a b = map_binary remainder a b; sep1 = Separator; /* absolute value of x */ Absolute_value x = map_unary abs x; /* like Absolute_value, but treat pixels as vectors */ Absolute_value_vector x = map_unary abs_vec x; /* calculate unit vector for band elements */ Sign x = map_unary sign x; /* multiply by -1 */ Negate x = map_unary unary_minus x; } /* trigonometry operations (all in degrees) */ Trig = class { /* calculate sine x */ Sin x = map_unary sin x; /* calculate cosine x */ Cos x = map_unary cos x; /* calculate tangent x */ Tan x = map_unary tan x; sep1 = Separator; /* calculate arc sine x */ Asin x = map_unary asin x; /* calculate arc cosine x */ Acos x = map_unary acos x; /* calculate arc tangent x */ Atan x = map_unary atan x; sep2 = Separator; /* convert degrees to radians */ Rad x = map_unary rad x; /* convert radians to degrees */ Deg x = map_unary deg x; sep3 = Separator; /* is angle within t degrees of r, mod 360 */ Angle_range t r angle = clock (max - angle) < 2*r { max = clock (t + r); clock a = a + 360, a < 0; = a - 360, a >= 360; = a; } } /* logarithms and anti-logs */ Log = class { /* calculate e ** x */ Exponential x = map_unary (power e) x; /* log base e of x */ Log_natural x = map_unary log x; sep1 = Separator; /* log base 10 of x */ Log10 x = map_unary log10 x; /* calculate 10 ** x */ Exponential10 x = map_unary (power 10) x; sep2 = Separator; /* calculate x ** y */ Raise_to_power x y = map_binary power x y; } /* operations on complex numbers and images */ Complex = class { /* extract fields from complex */ Complex_extract = class { /* extract real part of complex */ Real in = map_unary re in; /* extract imaginary part of complex */ Imaginary in = map_unary im in; } /* join a and b to make a complex */ Complex_build a b = map_binary comma a b; sep1 = Separator; /* convert real and imag to amplitude and phase */ Polar a = map_unary polar a; /* convert (amplitude, phase) image to rectangular coordinates */ Rectangular x = map_unary rectangular x; sep2 = Separator; /* invert imaginary part */ Conjugate x = map_unary conj x; } /* bitwise boolean operations for integer objects */ Boolean = class { /* bitwise and of a and b */ And a b = map_binary bitwise_and a b; /* bitwise or of a and b */ Or a b = map_binary bitwise_or a b; /* bitwise exclusive or of a and b */ Eor a b = map_binary eor a b; /* invert a */ Not a = map_unary not a; sep1 = Separator; /* shift a right by b bits */ Right_shift a b = map_binary right_shift a b; /* shift a left by b bits */ Left_shift a b = map_binary left_shift a b; sep2 = Separator; /* b where a is non-zero, c elsewhere */ If_then_else a b c = map_trinary if_then_else a b c; /* or the bands of an image together */ Band_or im = foldr1 bitwise_or (bandsplit im); /* and the bands of an image together */ Band_and im = foldr1 bitwise_and (bandsplit im); } /* all comparison operations */ Relational = class { /* find points at which a is equal to b */ Equal a b = map_binary equal a b; /* find points at which a is not equal to b */ Not_equal a b = map_binary not_equal a b; /* find points at which a is greater than b */ More a b = map_binary more a b; /* find points at which a is less than b */ Less a b = map_binary less a b; /* find points at which a is greater than or equal to b */ More_equal a b = map_binary more_equal a b; /* find points at which a is less than or equal to b */ Less_equal a b = map_binary less_equal a b; } /* operations on lists */ List = class { /* take first element of list */ Head x = hd x; /* drop the first element of list */ Tail x = tl x; /* drop the last element of list */ Init x = init x; /* take the last element of list */ Last x = last x; sep1 = Separator; /* reverse order of elements in list */ Reverse x = reverse x; /* sort elements of list into ascending order */ Sort x = sort x; /* remove duplicates from list */ Make_set x = mkset equal x; /* exchange rows and columns in a list of lists */ Transpose_list x = transpose x; /* flatten a list of lists into a single list */ Concat l = concat l; sep2 = Separator; /* find the length of list */ Length x = len x; /* return element n from list (index from zero) */ Subscript n x = n ? x; /* take the first n elements of list x */ Take n x = take n x; /* drop the first n elements of list x */ Drop n x = drop n x; sep3 = Separator; /* join two lists end to end */ Join a b = a ++ b; /* put element a on the front of list x */ Cons a x = a : x; /* join two lists, pairwise */ Zip a b = zip2 a b; } /* various rounding operations */ Round = class { /* smallest integral value not less than x */ Ceil x = map_unary ceil x; /* largest integral value not greater than x */ Floor x = map_unary floor x; /* round to nearest integer */ Rint x = map_unary rint x; } /* forward and reverse fourier transforms */ Fourier = class { /* find fourier transform of image */ Forward a = map_unary (rotquad @ fwfft) a; /* find inverse fourier transform of image */ Reverse a = map_unary (invfft @ rotquad) a; /* rotate quadrants */ Rotate_quadrants a = map_unary rotquad a; } nip2-8.7.0/share/nip2/compat/7.9/_types.def0000644000175000017500000010054213224651032015054 00000000000000 /* Lots of little arg checks. Global for convenience. */ check_any = [(const true), "any"]; check_bool = [is_bool, "boolean"]; check_real = [is_real, "real"]; check_ureal = [is_ureal, "unsigned real"]; check_preal = [is_preal, "positive real"]; check_real_list = [is_real_list, "list of real"]; check_string = [is_string, "string"]; check_string_list = [is_string_list, "list of string"]; check_int = [is_int, "integer"]; check_uint = [is_uint, "unsigned integer"]; check_pint = [is_pint, "positive integer"]; check_matrix = [is_matrix, "rectangular array of real"]; check_matrix_display = [Matrix_display.is_display, "0, 1, 2 or 3"]; check_image = [is_image, "image"]; check_xy_list = [is_xy_list, "list of form [[1, 2], [3, 4], [5, 6], ...]"]; check_instance name = [is_instanceof name, name]; check_Image = check_instance "Image"; check_Matrix = [is_instanceof "Matrix_base", "Matrix"]; check_colour_space = [is_colour_space, "colour_space"]; check_rectangular = [is_rectangular, "rectangular [[*]]"]; check_Guide = [is_Guide, "HGuide or VGuide"]; check_Point = check_instance "Point"; check_Colour = check_instance "Colour"; /* Check a set of args. Grab _check_table. It's a list of two check * lists: the first checks each arg, and the second checks all args * together. * * - each line in argcheck is [arg, "arg name", [test_fn, "arg type"]] * same number of lines as there are args * * stuff like "arg 2 must be real" * * - each line in allcheck is [test, "description"] * any number of lines * * stuff like "to must be greater than from" * * generate an error dialog with a helpful message on failure. * * Have as a separate function to try to keep the size of _Object down a bit. */ check_args x = x, badargs == [] && badalls == [] = error message { argcheck = x._check_args; allcheck = x._check_all; // join two strings up with a separator string join_sep j a b = a ++ j ++ b; // indent string indent = " "; // test for a condition in a check line fails test_fail x = ! x?0; // set of failed argcheck indexes badargs = map (extract 1) (filter test_fail (zip2 (map testarg argcheck) [0..])) { testarg x = x?2?0 x?0; } // set of failed allcheck indexes badalls = map (extract 1) (filter test_fail (zip2 (map hd allcheck) [0..])); // the error message message = errors.badargs ++ "\"" ++ x.name ++ "\"\n" ++ argmsg ++ allmsg ++ "\nusage\n" ++ indent ++ usage ++ "\nwhere\n" ++ arg_types ++ extra; // make the failed argcheck messages ... eg. ""value" should be // real, you passed " etc. argmsg = concat (map fmt badargs) { fmt n = indent ++ "\"" ++ argcheck?n?1 ++ "\"" ++ " should be of type " ++ argcheck?n?2?1 ++ ", " ++ "you passed " ++ print argcheck?n?0 ++ "\n"; } // make the failed allcheck messages ... eg "condition failed: // x < y" ... don't make a message if any typechecks have // failed, as we'll probably error horribly allmsg = [], badargs != [] = concat (map fmt badalls) ++ "you passed\n" ++ concat (map fmt_arg argcheck) { fmt n = "condition failed: " ++ allcheck?n?1 ++ "\n"; fmt_arg l = indent ++ l?1 ++ " = " ++ print l?0 ++ "\n"; } // make usage note usage = x.name ++ " " ++ foldr (join_sep " ") [] (map (extract 1) argcheck); // make arg type notes arg_types = foldr (join_sep "\n") [] (map fmt argcheck) { fmt l = indent ++ l?1 ++ " is of type " ++ l?2?1; } // extra bit at the bottom, if we have any conditions extra = [], allcheck == [] = "and\n" ++ all_desc; // make a list of all the allcheck descriptions, with a few // spaces in front all_desc_list = map (join indent @ extract 1) allcheck; // join em up to make a set of condition notes all_desc = foldr (join_sep "\n") [] all_desc_list; } /* Operator overloading stuff. */ Operator_type = class { ARITHMETIC = 1; // eg. add RELATIONAL = 2; // eg. less COMPOUND = 3; // eg. max/mean/etc. COMPOUND_REWRAP = 4; // eg. transpose } Operator op_name fn type symmetric = class { } /* Form the converse of an Operator. */ oo_converse op = Operator (converse_name op.op_name) (converse op.fn) op.type op.symmetric { converse_name x = init x, last x == last "'" = x ++ "'"; } /* Given an operator name, look up the definition. */ oo_binary_lookup op_name = matches?0, matches != [] = error ("unknown binary operator: " ++ print op_name) { operator_table = [ Operator "add" add Operator_type.ARITHMETIC true, Operator "subtract" subtract Operator_type.ARITHMETIC false, Operator "remainder" remainder Operator_type.ARITHMETIC false, Operator "power" power Operator_type.ARITHMETIC false, Operator "subscript" subscript Operator_type.ARITHMETIC false, Operator "left_shift" left_shift Operator_type.ARITHMETIC false, Operator "right_shift" right_shift Operator_type.ARITHMETIC false, Operator "divide" divide Operator_type.ARITHMETIC false, Operator "join" join Operator_type.ARITHMETIC false, Operator "multiply" multiply Operator_type.ARITHMETIC true, Operator "logical_and" logical_and Operator_type.ARITHMETIC true, Operator "logical_or" logical_or Operator_type.ARITHMETIC true, Operator "bitwise_and" bitwise_and Operator_type.ARITHMETIC true, Operator "bitwise_or" bitwise_or Operator_type.ARITHMETIC true, Operator "eor" eor Operator_type.ARITHMETIC true, Operator "comma" comma Operator_type.ARITHMETIC false, Operator "if_then_else" if_then_else Operator_type.ARITHMETIC false, Operator "equal" equal Operator_type.RELATIONAL true, Operator "not_equal" not_equal Operator_type.RELATIONAL true, Operator "less" less Operator_type.RELATIONAL false, Operator "less_equal" less_equal Operator_type.RELATIONAL false ]; matches = filter test_name operator_table; test_name x = x.op_name == op_name; } /* Given an operator name, look up a function that implements that * operator. */ oo_unary_lookup op_name = matches?0, matches != [] = error ("unknown unary operator: " ++ print op_name) { operator_table = [ /* Operators. */ Operator "cast_signed_char" cast_signed_char Operator_type.ARITHMETIC false, Operator "cast_unsigned_char" cast_unsigned_char Operator_type.ARITHMETIC false, Operator "cast_signed_short" cast_signed_short Operator_type.ARITHMETIC false, Operator "cast_unsigned_short" cast_unsigned_short Operator_type.ARITHMETIC false, Operator "cast_signed_int" cast_signed_int Operator_type.ARITHMETIC false, Operator "cast_unsigned_int" cast_unsigned_int Operator_type.ARITHMETIC false, Operator "cast_float" cast_float Operator_type.ARITHMETIC false, Operator "cast_double" cast_double Operator_type.ARITHMETIC false, Operator "cast_complex" cast_complex Operator_type.ARITHMETIC false, Operator "cast_double_complex" cast_double_complex Operator_type.ARITHMETIC false, Operator "unary_minus" unary_minus Operator_type.ARITHMETIC false, Operator "negate" negate Operator_type.RELATIONAL false, Operator "complement" complement Operator_type.ARITHMETIC false, Operator "unary_plus" unary_plus Operator_type.ARITHMETIC false, /* Built in projections. */ Operator "re" re Operator_type.ARITHMETIC false, Operator "im" im Operator_type.ARITHMETIC false, Operator "hd" hd Operator_type.ARITHMETIC false, Operator "tl" tl Operator_type.ARITHMETIC false, /* Maths builtins. */ Operator "sin" sin Operator_type.ARITHMETIC false, Operator "cos" cos Operator_type.ARITHMETIC false, Operator "tan" tan Operator_type.ARITHMETIC false, Operator "asin" asin Operator_type.ARITHMETIC false, Operator "acos" acos Operator_type.ARITHMETIC false, Operator "atan" atan Operator_type.ARITHMETIC false, Operator "log" log Operator_type.ARITHMETIC false, Operator "log10" log10 Operator_type.ARITHMETIC false, Operator "exp" exp Operator_type.ARITHMETIC false, Operator "exp10" exp10 Operator_type.ARITHMETIC false, Operator "ceil" ceil Operator_type.ARITHMETIC false, Operator "floor" floor Operator_type.ARITHMETIC false ]; matches = filter test_name operator_table; test_name x = x.op_name == op_name; } /* Find the matching methods in a method table. */ oo_method_lookup table = map (extract 0) (filter (extract 1) table); /* A binary op: a is a class, b may be a class ... eg. "add" a b two obvious ways to find a method: - a.oo_binary_search "add" (+) b - b.oo_binary_search "add'" (converse (+)) a, is_class b if these fail but op is a symmetric operator (eg. a + b == b + a), we can also try reversing the args - a.oo_binary_search "add'" (converse (+)) b - b.oo_binary_search "add" (+) a, is_class b */ oo_binary_function op a b = matches1?0, matches1 != [] = matches2?0, is_class b && matches2 != [] = matches3?0, op.symmetric && matches3 != [] = matches4?0, op.symmetric && is_class b && matches4 != [] = error ("No method found for binary operator.\n" ++ "left = " ++ print a ++ "\n" ++ "operator = " ++ op.op_name ++ "\n" ++ "right = " ++ print b) { matches1 = oo_method_lookup (a.oo_binary_table op b); matches2 = oo_method_lookup (b.oo_binary_table (oo_converse op) a); matches3 = oo_method_lookup (a.oo_binary_table (oo_converse op) b); matches4 = oo_method_lookup (b.oo_binary_table op a); } /* A binary op: a is not a class, b is a class ... eg. "subtract" a b only one way to find a method: - b.oo_binary_search "subtract'" (converse (-)) a if this fails but op is a symmetric operator (eg. a + b == b + a), we can try reversing the args - b.oo_binary_search "add" (+) a, is_class b */ oo_binary'_function op a b = matches1?0, matches1 != [] = matches2?0, op.symmetric && matches2 != [] = error ("No method found for binary operator.\n" ++ "left = " ++ print a ++ "\n" ++ "operator = " ++ op.op_name ++ "\n" ++ "right = " ++ print b) { matches1 = oo_method_lookup (b.oo_binary_table (oo_converse op) a); matches2 = oo_method_lookup (b.oo_binary_table op a); } oo_unary_function op x = matches?0, matches != [] = error ("No method found for unary operator.\n" ++ "operator = " ++ op.op_name ++ "\n" ++ "argument = " ++ print x) { matches = oo_method_lookup (x.oo_unary_table op); } /* Base class for nip's built-in classes ... base check function, base * operator overload functions. */ _Object = class { check = check_args this; /* Default: no checks ... override in subclasses. */ _check_args = []; _check_all = []; /* Operator overloading stuff. */ oo_binary op x = oo_binary_function (oo_binary_lookup op) this x; oo_binary' op x = oo_binary'_function (oo_binary_lookup op) x this; oo_unary op = oo_unary_function (oo_unary_lookup op) this; /* Provide a fallback for class == thing ... just use pointer * equality. */ oo_binary_table op x = [ [ pointer_equal this x, op.op_name == "equal" || op.op_name == "equal'" ], [ not_pointer_equal this x, op.op_name == "not_equal" || op.op_name == "not_equal'" ] ]; oo_unary_table op = []; } /* Single real number ... eg slider. */ Real value = class _Object { _check_args = [ [value, "value", check_real] ] ++ super._check_args; // methods oo_binary_table op x = [ [ this.Real (op.fn this.value x.value), is_instanceof "Real" x && op.type == Operator_type.ARITHMETIC ], [ this.Real (op.fn this.value x), is_real x && op.type == Operator_type.ARITHMETIC ], [ op.fn this.value x.value, is_instanceof "Real" x && op.type == Operator_type.RELATIONAL ], [ op.fn this.value x, !is_class x ] ] ++ super.oo_binary_table op x; oo_unary_table op = [ [ this.Real (op.fn this.value), op.type == Operator_type.ARITHMETIC ], [ op.fn this.value, true ] ] ++ super.oo_unary_table op; } /* Single bool ... eg Toggle. */ Bool value = class _Object { _check_args = [ [value, "value", check_bool] ] ++ super._check_args; // methods oo_binary_table op x = [ [ if value then x?0 else x?1, op.op_name == "if_then_else" ], [ this.Bool (op.fn this.value x.value), is_instanceof "Bool" x ], [ this.Bool (op.fn this.value x), is_bool x ] ] ++ super.oo_binary_table op x; oo_unary_table op = [ [ this.Bool (op.fn this.value), op.type == Operator_type.ARITHMETIC || op.type == Operator_type.RELATIONAL ] ] ++ super.oo_unary_table op; } /* An editable string. */ String caption value = class _Object { _check_args = [ [caption, "caption", check_string], [value, "value", check_string] ] ++ super._check_args; } /* An editable real number. */ Number caption value = class scope.Real value { _check_args = [ [caption, "caption", check_string] ] ++ super._check_args; Real value = Number caption value; } /* An editable filename. */ Pathname caption value = class _Object { _check_args = [ [caption, "caption", check_string], [value, "value", check_string] ] ++ super._check_args; } // the old name Filename = Pathname "Pick a file"; /* Vector type ... just a finite list of real ... handy for wrapping an * argument to eg. im_lintra_vec. Make it behave like a single pixel image. */ Vector value = class _Object { _check_args = [ [value, "value", check_real_list] ] ++ super._check_args; bands = len value; // methods oo_binary_table op x = [ // Vector ++ Vector means bandwise join [ this.Vector (op.fn this.value x.value), is_instanceof "Vector" x && (op.op_name == "join" || op.op_name == "join'") ], // extra check for lengths equal [ this.Vector (map_binary op.fn this.value x.value), is_instanceof "Vector" x && len value == len x.value && op.type == Operator_type.ARITHMETIC ], [ this.Vector (map_binary op.fn this.value x.value), is_instanceof "Real" x && op.type == Operator_type.ARITHMETIC ], [ this.Vector (map_binary op.fn this.value x), is_real x && op.type == Operator_type.ARITHMETIC ], // need extra length check [ this.Vector (map bool_to_real (map_binary op.fn this.value x.value)), is_instanceof "Vector" x && len value == len x.value && op.type == Operator_type.RELATIONAL ], [ this.Vector (map bool_to_real (map_binary op.fn this.value x.value)), is_instanceof "Real" x && op.type == Operator_type.RELATIONAL ], [ this.Vector (map bool_to_real (map_binary op.fn this.value x)), is_real x && op.type == Operator_type.RELATIONAL ], [ this.Vector (op.fn this.value x.value), is_instanceof "Vector" x && len value == len x.value && op.type == Operator_type.COMPOUND_REWRAP ], [ x.Image (vec op'.op_name x.value value), is_instanceof "Image" x ], [ vec op'.op_name x value, is_image x ], [ op.fn this.value x, is_real x ] ] ++ super.oo_binary_table op x { op' = oo_converse op; }; oo_unary_table op = [ [ this.Vector (map_unary op.fn this.value), op.type == Operator_type.ARITHMETIC ], [ this.Vector (map bool_to_real (map_unary op.fn this.value)), op.type == Operator_type.RELATIONAL ], [ this.Vector (op.fn this.value), op.type == Operator_type.COMPOUND_REWRAP ], [ op.fn this.value, true ] ] ++ super.oo_unary_table op; // turn an ip bool (or a number, for Vector) into VIPSs 255/0 bool_to_real x = 255, is_bool x && x = 255, is_number x && x != 0 = 0; } /* A rectangular array of real. */ Matrix_base value = class _Object { _check_args = [ [value, "value", check_matrix] ] ++ super._check_args; // calculate these from value width = len value?0; height = len value; // methods oo_binary_table op x = [ // mat multiply is special [ this.Matrix_base mul.value, is_instanceof "Matrix_base" x && op.op_name == "multiply" ], [ this.Matrix_base mul'.value, is_instanceof "Matrix_base" x && op.op_name == "multiply'" ], // mat divide is also special [ this.Matrix_base div.value, is_instanceof "Matrix_base" x && op.op_name == "divide" ], [ this.Matrix_base div'.value, is_instanceof "Matrix_base" x && op.op_name == "divide'" ], // power -1 means invert [ this.Matrix_base inv.value, is_real x && x == -1 && op.op_name == "power" ], [ this.Matrix_base sq.value, is_real x && x == 2 && op.op_name == "power" ], [ error "matrix **-1 and **2 only", op.op_name == "power" || op.op_name == "power'" ], // matrix op vector ... treat a vector as a 1 row matrix [ this.Matrix_base (map (map_binary op'.fn x.value) this.value), is_instanceof "Vector" x && op.type == Operator_type.ARITHMETIC ], [ this.Matrix_base (map_binary op.fn this.value x.value), (is_instanceof "Matrix_base" x || is_instanceof "Real" x) && op.type == Operator_type.ARITHMETIC ], [ this.Matrix_base (map_binary op.fn this.value x), is_real x && op.type == Operator_type.ARITHMETIC ], // compound ... don't do iteration [ this.Matrix_base (op.fn this.value x.value), (is_instanceof "Matrix_base" x || is_instanceof "Real" x || is_instanceof "Vector" x) && op.type == Operator_type.COMPOUND_REWRAP ] ] ++ super.oo_binary_table op x { mul = im_matmul this x; mul' = im_matmul x this; div = im_matmul this (im_matinv x); div' = im_matmul x (im_matinv this); inv = im_matinv this; sq = im_matmul this this; op' = oo_converse op; } oo_unary_table op = [ [ this.Matrix_base (map_unary op.fn this.value), op.type == Operator_type.ARITHMETIC ], [ this.Matrix_base (op.fn this.value), op.type == Operator_type.COMPOUND_REWRAP ], [ op.fn this.value, true ] ] ++ super.oo_unary_table op; } /* How to display a matrix: text, sliders, toggles, or text plus scale/offset. */ Matrix_display = class { text = 0; slider = 1; toggle = 2; text_scale_offset = 3; is_display = member [text, slider, toggle, text_scale_offset]; } /* A matrix as VIPS sees them ... add scale, offset and filename. For nip, add * a display type as well to control how the widget renders. */ Matrix_vips value scale offset filename display = class scope.Matrix_base value { _check_args = [ [scale, "scale", check_real], [offset, "offset", check_real], [filename, "filename", check_string], [display, "display", check_matrix_display] ] ++ super._check_args; Matrix_base value = Matrix_vips value scale offset filename display; } /* A plain 'ol matrix which can be passed to VIPS. */ Matrix value = class Matrix_vips value 1 0 "" Matrix_display.text {}; /* Specialised constructors ... for convolutions, recombinations and * morphologies. */ Matrix_con scale offset value = class Matrix_vips value scale offset "" Matrix_display.text_scale_offset {}; Matrix_rec value = class Matrix_vips value 1 0 "" Matrix_display.slider {}; Matrix_mor value = class Matrix_vips value 1 0 "" Matrix_display.toggle {}; Matrix_file filename = im_read_dmask (expand filename); /* A CIE colour ... a triple, plus a format (eg XYZ, Lab etc) */ Colour colour_space value = class scope.Vector value { _check_args = [ [colour_space, "colour_space", check_colour_space] ] ++ super._check_args; _check_all = [ [len value == 3, "len value == 3"] ] ++ super._check_all; // make a colour-ish thing from an image // back to Colour if we have another 3 band image // to a vector if bands > 1 // to a number otherwise itoc im = this.Colour nip_type (to_matrix im).value?0, bands == 3 = scope.Vector (map mean (bandsplit im)), bands > 1 = mean im { type = im_header_int "Type" im; bands = im_header_int "Bands" im; nip_type = Image_type.colour_spaces.lookup 1 0 type; } // methods oo_binary_table op x = [ [ itoc (op.fn ((float) (to_image this).value) ((float) (to_image x).value)), // here REWRAP means go via image op.type == Operator_type.COMPOUND_REWRAP ] ] ++ super.oo_binary_table op x; oo_unary_table op = [ [ itoc (op.fn ((float) (to_image this).value)), op.type == Operator_type.COMPOUND_REWRAP ] ] ++ super.oo_unary_table op; Vector value = Colour colour_space value; } /* Base slider type. */ Scale caption from to value = class scope.Real value { _check_args = [ [caption, "caption", check_string], [from, "from", check_real], [to, "to", check_real] ] ++ super._check_args; _check_all = [ [from < to, "from < to"] ] ++ super._check_all; // methods oo_binary_table op x = [ [ this.Scale (op.fn this.from x.from) (op.fn this.to x.to) (op.fn this.value x.value), is_instanceof "Scale" x && op.type == Operator_type.ARITHMETIC ], [ this.Scale (op.fn this.from x) (op.fn this.to x) (op.fn this.value x), is_real x && op.type == Operator_type.ARITHMETIC ] ] ++ super.oo_binary_table op x; Real value = Scale from to value; } /* Base slider type. */ Slider f t v = Scale "" f t v; /* Base toggle type. */ Toggle caption value = class scope.Bool value { _check_args = [ [caption, "caption", check_string], [value, "value", check_bool] ] ++ super._check_args; Bool value = Toggle caption value; } /* Base option type. */ Option caption labels value = class Real value { _check_args = [ [caption, "caption", check_string], [labels, "labels", check_string_list], [value, "value", check_uint] ] ++ super._check_args; } /* A lookup table. */ Table value = class _Object { _check_args = [ [value, "value", check_rectangular] ] ++ super._check_args; /* present col x: is there an x in column col */ present col x = member (map (extract col) value) x; /* Look on column from, return matching item in column to. */ lookup from to x = value?n?to, n >= 0 = error ("item " ++ print x ++ " not in table") { n = index (equal x) (map (extract from) value); } } /* A rectangle. width and height can be -ve. */ Rect left top width height = class _Object { _check_args = [ [left, "left", check_real], [top, "top", check_real], [width, "width", check_real], [height, "height", check_real] ] ++ super._check_args; // derived right = left + width; bottom = top + height; // empty? ie. contains no pixels is_empty = width == 0 || height == 0; // normalised version, ie. make width/height +ve and flip the origin nleft = left + width, width < 0 = left; ntop = top + height, height < 0 = top; nwidth = abs width; nheight = abs height; nright = nleft + nwidth; nbottom = ntop + nheight; // contains a point? includes_point x y = nleft <= x && x <= nright && ntop <= y && y <= nbottom; // contains a rect? just test top left and bottom right points includes_rect r = includes_point r.nleft r.ntop && includes_point r.nright r.nbottom; // bounding box of two rects // if either is empty, can just return the other union r = r, is_empty = this, r.is_empty = Rect left' top' width' height' { left' = min_pair nleft r.nleft; top' = min_pair ntop r.ntop; width' = max_pair nright r.nright - left'; height' = max_pair nbottom r.nbottom - top'; } // intersection of two rects ... empty rect if no intersection intersect r = Rect left' top' width'' height'' { left' = max_pair nleft r.nleft; top' = max_pair ntop r.ntop; width' = min_pair nright r.nright - left'; height' = min_pair nbottom r.nbottom - top'; width'' = width', width > 0 = 0; height'' = height', height > 0 = 0; } // equal to another rect equal r = left == r.left && top == r.top && width == r.width && height == r.height; // expand/collapse by n pixels margin_adjust n = Rect (left - n) (top - n) (width + 2 * n) (height + 2 * n); // operator overloading // just define equal and not equal oo_binary_table op x = [ [ equal x, is_instanceof "Rect" x && (op.op_name == "equal" || op.op_name == "equal'") ], [ !equal x, is_instanceof "Rect" x && (op.op_name == "not_equal" || op.op_name == "not_equal'") ] ] ++ super.oo_binary_table op x; } /* Values for Compression field in image. */ Image_compression = class { NO_COMPRESSION = 0; TCSF_COMPRESSION = 1; JPEG_COMPRESSION = 2; LABPACK_COMPRESSED = 3; RGB_COMPRESSED = 4; LUM_COMPRESSED = 5; } /* Values for Coding field in image. */ Image_coding = class { NOCODING = 0; COLQUANT = 1; LABPACK = 2; } /* Values for BandFmt field in image. */ Image_format = class { DPCOMPLEX = 9; DOUBLE = 8; COMPLEX = 7; FLOAT = 6; INT = 5; UINT = 4; SHORT = 3; USHORT = 2; CHAR = 1; UCHAR = 0; NOTSET = -1; maxval fmt = [ 255, // UCHAR 127, // CHAR 65535, // USHORT 32767, // SHORT 4294967295, // UINT 2147483647 // INT ] ? fmt, fmt >= 0 && fmt <= INT = error errors.bandFmt; } /* Type field. */ Image_type = class { FOURIER = 24; YXY = 23; sRGB = 22; LABS = 21; LCH = 19; UCS = 18; RGB = 17; LABQ = 16; CMYK = 15; CMC = 14; LAB = 13; XYZ = 12; LUT = 11; HISTOGRAM = 10; POWER_SPECTRUM = 9; BLUE_ONLY = 8; GREEN_ONLY = 7; RED_ONLY = 6; YUV = 5; IR = 4; XRAY = 3; LUMINACE = 2; B_W = 1; MULTIBAND = 0; /* Table to get names <-> numbers. */ type_names = Table [ [ "FOURIER", FOURIER ], [ "YXY", YXY ], [ "sRGB", sRGB ], [ "LABS", LABS ], [ "LCH", LCH ], [ "UCS", UCS ], [ "RGB", RGB ], [ "LABQ", LABQ ], [ "CMYK", CMYK ], [ "CMC", CMC ], [ "LAB", LAB ], [ "XYZ", XYZ ], [ "LUT", LUT ], [ "HISTOGRAM", HISTOGRAM ], [ "POWER_SPECTRUM", POWER_SPECTRUM ], [ "BLUE_ONLY", BLUE_ONLY ], [ "GREEN_ONLY", GREEN_ONLY ], [ "RED_ONLY", RED_ONLY ], [ "YUV", YUV ], [ "IR", IR ], [ "XRAY", XRAY ], [ "LUMINACE", LUMINACE ], [ "B_W", B_W ], [ "MULTIBAND", MULTIBAND ] ]; /* Table relating nip's colour space names and VIPS's Type numbers. */ colour_spaces = Table [ [ "XYZ", Image_type.XYZ ], [ "Yxy", Image_type.YXY ], [ "Lab", Image_type.LAB ], [ "LCh", Image_type.LCH ], [ "UCS", Image_type.UCS ], [ "RGB", Image_type.RGB ], [ "sRGB", Image_type.sRGB ] ]; } /* Base image type. Simple layer over vips_image. */ Image value = class _Object { _check_args = [ [value, "value", check_image] ] ++ super._check_args; // fields from VIPS header width = im_header_int "Xsize" value; height = im_header_int "Ysize" value; bands = im_header_int "Bands" value; format = im_header_int "BandFmt" value; coding = im_header_int "Coding" value; type = im_header_int "Type" value; xres = im_header_double "Xres" value; yres = im_header_double "Yres" value; xoffset = im_header_int "Xoffset" value; yoffset = im_header_int "Yoffset" value; filename = im_header_string "filename" value; // convenience ... the area our pixels occupy as a rect rect = Rect (-xoffset) (-yoffset) width height; // extract an area, addressed in nip cordinates extract_area left top width height = im_extract_area value (left + xoffset) (top + yoffset) width height; // operator overloading // (op Image Vector) done in Vector class oo_binary_table op x = [ [ this.Image (op.fn this.value x.value), is_instanceof "Image" x || is_instanceof "Real" x ], [ this.Image result_image, op.op_name == "if_then_else" ], [ this.Image (vec op.op_name value x.value), is_instanceof "Vector" x ], [ this.Image (op.fn this.value x), is_number x || is_image x ] ] ++ super.oo_binary_table op x { to_image x = x, is_image x = x.value, is_instanceof "Image" x = black + x { black = im_black width height target_bands; } // get a member from the first of a list of objects to have it get_property has get objects = hd members, members != [] = error "unable to get property" { members = map get (filter has objects); } // get things about our output from inputs in this order objects = [then_part, else_part, this]; then_part = x?0; else_part = x?1; // properties of our output image target_bands = get_property (has_member "bands") (get_member "bands") objects; target_format = get_property (has_member "format") (get_member "format") objects; target_type = get_property has_type get_type objects; then_image = to_image then_part; else_image = to_image else_part; then_image' = clip2fmt target_format then_image; else_image' = clip2fmt target_format else_image; result_image = image_set_type target_type (if value then then_image' else else_image'); } // FIXME ... yuk ... don't use operator hints, just always rewrap if // we have an image result // forced on us by things like abs: // abs Vector -> real // abs Image -> Image // does not fit well with COMPOUND/whatever scheme oo_unary_table op = [ [ this.Image result, is_image result ], [ result, true ] ] ++ super.oo_unary_table op { result = op.fn this.value; } } /* Construct an image from a file. */ Image_file str = class Image value { _check_args = [ [str, "str", check_string] ] ++ super._check_args; file = Filename str; value = vips_image file.value; } Region image left top width height = class Image value { _check_args = [ [image, "Image", check_Image], [left, "left", check_real], [top, "top", check_real], [width, "width", check_preal], [height, "height", check_preal] ] ++ super._check_args; // a rect for our coordinates // region.rect gets the rect for the extracted image region_rect = Rect left top width height; // we need to always succeed ... value is our enclosing image if we're // out of bounds value = image.extract_area left top width height, image.rect.includes_rect region_rect = image.value; } Area image left top width height = class scope.Region image left top width height { Region image left top width height = Area image left top width height; } Arrow image left top width height = class Rect left top width height { _check_args = [ [image, "Image", check_Image], [left, "left", check_real], [top, "top", check_real], [width, "width", check_real], [height, "height", check_real] ] ++ super._check_args; _check_all = [ [image.rect.includes_rect this, "image.rect.includes_rect this"] ] ++ super._check_all; // our rect, translated to image cods (ie. offset by origin) image_rect = Rect (left + image.xoffset) (top + image.yoffset) width height; // methods oo_binary_table op x = [ [ this.Arrow this.image left' top' width' height', is_instanceof "Arrow" x && op.type == Operator_type.ARITHMETIC ] ] ++ super.oo_binary_table op x { left' = op.fn this.left x.left; top' = op.fn this.top x.top; width' = op.fn this.width x.width; height' = op.fn this.height x.height; } oo_unary_search op = [ [ this.Arrow this.image left' top' width' height', op.type == Operator_type.ARITHMETIC ] ] ++ super.oo_unary_table op { left' = op.fn this.left; top' = op.fn this.top; width' = op.fn this.width; height' = op.fn this.height; } } HGuide image top = class scope.Arrow image image.rect.left top image.width 0 { Arrow image left top width height = HGuide image top; } VGuide image left = class scope.Arrow image left image.rect.top 0 image.height { Arrow image left top width height = VGuide image left; } Point image left top = class scope.Arrow image left top 0 0 { Arrow image left top width height = Point image left top; } // Mark is the name nip2 expects for Point Mark = Point; // convenience functions: make relative on an image ... subtract origin // offset, ie. make in pixel coordinates Region_relative image u v w h = Region image (image.width * u - image.xoffset) (image.height * v - image.yoffset) (image.width * w) (image.height * h); Area_relative image u v w h = Area image (image.width * u - image.xoffset) (image.height * v - image.yoffset) (image.width * w) (image.height * h); Arrow_relative image u v w h = Arrow image (image.width * u - image.xoffset) (image.height * v - image.yoffset) (image.width * w) (image.height * h); VGuide_relative image v = VGuide image (image.height * v - image.yoffset); HGuide_relative image u = HGuide image (image.width * u - image.xoffset); Point_relative image u v = Point image (image.width * u - image.xoffset) (image.height * v - image.yoffset); Interpolate = class { nearest_neighbour = 0; bilinear = 1; bicubic = 2; /* Table to map interpol numbers to descriptive strings */ names = Table [ [ "Nearest neighbour", nearest_neighbour ], [ "Bilinear", bilinear ], [ "Bicubic", bicubic ] ]; } Separator = class {} // renamed in 7.9 estpar = im_estpar; resample = im_transform_search; nip2-8.7.0/share/nip2/compat/7.9/Makefile.am0000644000175000017500000000062213224651032015123 00000000000000startdir = $(pkgdatadir)/compat/7.9 start_DATA = \ Math.def \ Image.def \ Mosaic.def \ Colour.def \ Resize.def \ Capture.def \ Format.def \ Filter.def \ Morphology.def \ New.def \ Histogram.def \ Print.def \ Rotate.def \ Statistics.def \ X_ray.def \ _convert.def \ _errors.def \ _generate.def \ _list.def \ _predicate.def \ _stdenv.def \ _types.def EXTRA_DIST = $(start_DATA) nip2-8.7.0/share/nip2/compat/7.24/0000755000175000017500000000000013350464160013230 500000000000000nip2-8.7.0/share/nip2/compat/7.24/_stdenv.def0000644000175000017500000015754513224651032015307 00000000000000/* Various operators as functions. */ logical_and a b = a && b; logical_or a b = a || b; bitwise_and a b = a & b; bitwise_or a b = a | b; eor a b = a ^ b; left_shift a b = a << b; right_shift a b = a >> b; not a = !a; less a b = a < b; more a b = a > b; less_equal a b = a <= b; more_equal a b = a >= b; equal a b = a == b; not_equal a b = a != b; pointer_equal a b = a === b; not_pointer_equal a b = a !== b; add a b = a + b; subtract a b = a - b; multiply a b = a * b; divide a b = a / b; idivide a b = (int) ((int) a / (int) b); power a b = a ** b; square x = x * x; remainder a b = a % b; cons a b = a : b; dot a b = a . ( b ); join a b = a ++ b; // 'difference' is defined in _list subscript a b = a ? b; generate s n f = [s, n .. f]; comma r i = (r, i); compose f g = f @ g; // our only trinary operator is actually a binary operator if_then_else a x = if a then x?0 else x?1; cast_unsigned_char x = (unsigned char) x; cast_signed_char x = (signed char) x; cast_unsigned_short x = (unsigned short) x; cast_signed_short x = (signed short) x; cast_unsigned_int x = (unsigned int) x; cast_signed_int x = (signed int) x; cast_float x = (float) x; cast_double x = (double) x; cast_complex x = (complex) x; cast_double_complex x = (double complex) x; unary_minus x = -x; negate x = !x; complement x = ~x; unary_plus x = +x; // the function we call for "a -> v" expressions mksvpair s v = [s, v], is_string s = error "not str on lhs of ->"; // the vector ops ... im is an image, vec is a real_list vec op_name im vec = im_lintra_vec ones im vec, op_name == "add" || op_name == "add'" = im_lintra_vec ones (-1 * im) vec, op_name == "subtract'" = im_lintra_vec ones im inv, op_name == "subtract" = im_lintra_vec vec im zeros, op_name == "multiply" || op_name == "multiply'" = im_lintra_vec vec (1 / im) zeros, op_name == "divide'" = im_lintra_vec recip im zeros, op_name == "divide" = im_expntra_vec im vec, op_name == "power'" = im_powtra_vec im vec, op_name == "power" = im_remainderconst_vec im vec, op_name == "remainder" = im_andimage_vec im vec, op_name == "bitwise_and" || op_name == "bitwise_and'" = im_orimage_vec im vec, op_name == "bitwise_or" || op_name == "bitwise_or'" = im_eorimage_vec im vec, op_name == "eor" || op_name == "eor'" = im_equal_vec im vec, op_name == "equal" || op_name == "equal'" = im_notequal_vec im vec, op_name == "not_equal" || op_name == "not_equal'" = im_less_vec im vec, op_name == "less" = im_moreeq_vec im vec, op_name == "less'" = im_lesseq_vec im vec, op_name == "less_equal" = im_more_vec im vec, op_name == "less_equal'" = error ("unimplemented vector operation: " ++ op_name) { zeros = replicate (len vec) 0; ones = replicate (len vec) 1; recip = map (divide 1) vec; inv = map (multiply (-1)) vec; } // make a name value pair mknvpair n v = [n, v], is_string n = error "not [char] on LHS of =>"; /* Macbeth chart patch names. */ macbeth_names = [ "Dark skin", "Light skin", "Blue sky", "Foliage", "Blue flower", "Bluish green", "Orange", "Purplish blue", "Moderate red", "Purple", "Yellow green", "Orange yellow", "Blue", "Green", "Red", "Yellow", "Magenta", "Cyan", "White (density 0.05)", "Neutral 8 (density 0.23)", "Neutral 6.5 (density 0.44)", "Neutral 5 (density 0.70)", "Neutral 3.5 (density 1.05)", "Black (density 1.50)" ]; bandsplit x = oo_unary_function bandsplit_op x, is_class x = map (subscript x) [0 .. bands - 1], is_image x = error (_ "bad arguments to " ++ "bandsplit") { bands = get_header "Bands" x; bandsplit_op = Operator "bandsplit" (map Image @ bandsplit) Operator_type.COMPOUND false; } bandjoin l = wrapper joined, has_wrapper = joined, is_listof has_image l = error (_ "bad arguments to " ++ "bandjoin") { has_wrapper = has_member_list (has_member "Image") l; wrapper = get_member_list (has_member "Image") (get_member "Image") l; joined = im_gbandjoin (map get_image l); } sum x = oo_unary_function sum_op x, is_class x = im_avg x * (get_width x) * (get_height x) * (get_bands x), is_image x = sum_list x, is_list x = error (_ "bad arguments (" ++ print x ++ ") to " ++ "sum") { sum_op = Operator "sum" sum Operator_type.COMPOUND false; // add elements in a nested-list thing sum_list l = foldr acc 0 l { acc x total = total + sum x, is_list x = total + x; } } product x = oo_unary_function product_op x, is_class x = product_list x, is_list x // (product image) doesn't make much sense :( = error (_ "bad arguments (" ++ print x ++ ") to " ++ "product") { product_op = Operator "product" product Operator_type.COMPOUND false; product_list l = foldr prod 1 l { prod x total = total * product x, is_list x = total * x; } } mean x = oo_unary_function mean_op x, is_class x = im_avg x, is_image x = mean_list x, is_list x = error (_ "bad arguments (" ++ print x ++ ") to " ++ "mean") { mean_op = Operator "mean" mean Operator_type.COMPOUND false; mean_list l = sum l / size l; // number of elements in some sort of nested-list thing size l = foldr acc 0 l { acc x total = total + size x, is_list x = total + 1; } } meang x = (appl (power e) @ mean @ appl log) x { appl fn x = map fn x, is_list x = fn x; } // zero-excluding mean meanze x = oo_unary_function meanze_op x, is_class x = meanze_image_hist x, is_image x && (fmt == Image_format.UCHAR || fmt == Image_format.USHORT) = meanze_image x, is_image x = meanze_list x, is_list x = error (_ "bad arguments (" ++ print x ++ ") to " ++ "meanze") { fmt = get_format x; meanze_op = Operator "meanze" meanze Operator_type.COMPOUND false; meanze_list l = sum l / size l; // number of non-zero elements in some sort of nested-list thing size l = foldr acc 0 l { acc x total = total + size x, is_list x = total + 1, x != 0; = total; } // add elements in a nested-list thing sum l = foldr acc 0 l { acc x total = total + sum x, is_list x = total + x; } // image mean, for any image type meanze_image i = sum / N { w = get_width i; h = get_height i; b = get_bands i; st = stats i; sum = st.value?0?2; // find non-zero pixels (not zero in all bands) zp = im_notequal_vec i (replicate b 0); // number of non-zero pixels N = b * (mean zp * w * h) / 255; } // image mean for 8 and 16-bit unsigned images // we can use a histogram, yay, and save a pass through the image meanze_image_hist i = sum / N { // histogram, knock out zeros hist = hist_find i; black = image_new 1 1 (get_bands hist) (get_format hist) (get_coding hist) (get_type hist) 0 0 0; histze = insert 0 0 black hist; // matching identity iden = im_identity_ushort (get_bands hist) (get_width hist), (get_width hist) > 256 = im_identity (get_bands hist); // number of non-zero pixels N = mean histze * 256; // sum of pixels sum = mean (hist * iden) * 256; } } deviation x = oo_unary_function deviation_op x, is_class x = im_deviate x, is_image x = deviation_list x, is_real_list x || is_matrix x = error (_ "bad arguments to " ++ "deviation") { deviation_op = Operator "deviation" deviation Operator_type.COMPOUND false; deviation_list l = (abs (s2 - (s * s / n)) / (n - 1)) ** 0.5 { [n, s, s2] = sum_sum2_list l; } // return n, sum, sum of squares for a list of reals sum_sum2_list x = foldr accumulate [0, 0, 0] x { accumulate x sofar = [n + 1, x + s, x * x + s2], is_real x = [n + n', s + s', s2 + s2'], is_list x = error "sum_sum2_list: not real or [real]" { [n, s, s2] = sofar; [n', s', s2'] = sum_sum2_list x; } } } deviationze x = oo_unary_function deviationze_op x, is_class x = deviationze_image x, is_image x = deviationze_list x, is_real_list x || is_matrix x = error (_ "bad arguments to " ++ "deviationze") { deviationze_op = Operator "deviationze" deviationze Operator_type.COMPOUND false; deviationze_list l = (abs (s2 - (s * s / n)) / (n - 1)) ** 0.5 { [n, s, s2] = sum_sum2_list l; } // return number of non-zero elements, sum, sum of squares for a list of // reals sum_sum2_list x = foldr accumulate [0, 0, 0] x { accumulate x sofar = sofar, is_real x && x == 0 = [n + 1, x + s, x * x + s2], is_real x = [n + n', s + s', s2 + s2'], is_list x = error "sum_sum2_list: not real or [real]" { [n, s, s2] = sofar; [n', s', s2'] = sum_sum2_list x; } } deviationze_image i = ((sum2 - sum * sum / N) / (N - 1)) ** 0.5 { w = get_width i; h = get_height i; b = get_bands i; st = stats i; sum = st.value?0?2; sum2 = st.value?0?3; // find non-zero pixels (not zero in all bands) zp = im_notequal_vec i (replicate b 0); // number of non-zero pixels N = b * (mean zp * w * h) / 255; } } // find the centre of gravity of a histogram gravity x = oo_unary_function gravity_op x, is_class x = im_hist_gravity x, is_hist x = gravity_list x, is_list x = error (_ "bad arguments to " ++ "gravity") { gravity_op = Operator "gravity" gravity Operator_type.COMPOUND false; // centre of gravity of a histogram... use the histogram to weight an // identity, then sum, then find the mean element im_hist_gravity h = m { // make horizontal h' = rot270 h, get_width h == 1 = h, get_height h == 1 = error "width or height not 1"; // number of elements w = get_width h'; // matching identity i = im_identity_ushort 1 w, w <= 2 ** 16 - 1 = make_xy w 1 ? 0; // weight identity and sum s = mean (i * h') * w; // sum of original histogram s' = mean h * w; // weighted mean m = s / s'; } gravity_list l = m { w = len l; // matching identity i = [0, 1 .. w - 1]; // weight identity and sum s = sum (map2 multiply i l); // sum of original histogram s' = sum l; // weighted mean m = s / s'; } } project x = oo_unary_function project_op x, is_class x = im_project x, is_image x = error (_ "bad arguments to " ++ "project") { project_op = Operator "project" project Operator_type.COMPOUND false; } abs x = oo_unary_function abs_op x, is_class x = im_abs x, is_image x = abs_cmplx x, is_complex x = abs_num x, is_real x = abs_list x, is_real_list x = abs_list (map abs_list x), is_matrix x = error (_ "bad arguments to " ++ "abs") { abs_op = Operator "abs" abs Operator_type.COMPOUND false; abs_list l = (sum (map square l)) ** 0.5; abs_num n = n, n >= 0 = -n; abs_cmplx c = ((re c)**2 + (im c)**2) ** 0.5; } copy x = oo_unary_function copy_op x, is_class x = im_copy x, is_image x = x { copy_op = Operator "copy" copy Operator_type.COMPOUND_REWRAP false; } // like abs, but treat pixels as vectors ... ie. always get a 1-band image // back ... also treat matricies as lists of vectors // handy for dE from object difference abs_vec x = oo_unary_function abs_vec_op x, is_class x = abs_vec_image x, is_image x = abs_vec_cmplx x, is_complex x = abs_vec_num x, is_real x = abs_vec_list x, is_real_list x = mean (map abs_vec_list x), is_matrix x = error (_ "bad arguments to " ++ "abs_vec") { abs_vec_op = Operator "abs_vec" abs_vec Operator_type.COMPOUND false; abs_vec_list l = (sum (map square l)) ** 0.5; abs_vec_num n = n, n >= 0 = -n; abs_vec_cmplx c = ((re c)**2 + (im c)**2) ** 0.5; abs_vec_image im = (sum (map square (bandsplit im))) ** 0.5; } transpose x = oo_unary_function transpose_op x, is_class x = transpose_image x, is_image x = transpose_list x, is_listof is_list x = error (_ "bad arguments to " ++ "transpose") { transpose_op = Operator "transpose" transpose Operator_type.COMPOUND_REWRAP false; transpose_list l = [], l' == [] = (map hd l') : (transpose_list (map tl l')) { l' = takewhile (not_equal []) l; } transpose_image = im_flipver @ im_rot270; } rot45 x = oo_unary_function rot45_op x, is_class x = error "rot45 image: not implemented", is_image x = error (_ "bad arguments to " ++ "rot45") { rot45_op = Operator "rot45" rot45_object Operator_type.COMPOUND_REWRAP false; rot45_object x = rot45_matrix x, is_odd_square_matrix x = error "rot45 image: not implemented", is_image x = error (_ "bad arguments to " ++ "rot45"); // slow, but what the heck rot45_matrix l = (im_rotate_dmask45 (Matrix l)).value; } // apply an image function to a [[real]] ... matrix is converted to a 1 band // image for processing apply_matrix_as_image fn m = (get_value @ im_vips2mask @ fn @ im_mask2vips @ Matrix) m; // a general image/matrix operation where the mat version is most easily done // by converting mat->image->mat apply_matim_operation name fn x = oo_unary_function class_op x, is_class x = fn x, is_image x = apply_matrix_as_image fn x, is_matrix x = error (_ "bad arguments to " ++ name) { class_op = Operator name (apply_matim_operation name fn) Operator_type.COMPOUND_REWRAP false; } rot90 = apply_matim_operation "rot90" im_rot90; rot180 = apply_matim_operation "rot180" im_rot180; rot270 = apply_matim_operation "rot270" im_rot270; rotquad = apply_matim_operation "rotquad" im_rotquad; fliplr = apply_matim_operation "fliplr" im_fliphor; fliptb = apply_matim_operation "flipud" im_flipver; image_set_type type x = oo_unary_function image_set_type_op x, is_class x = im_copy_set x (to_real type) (get_header "Xres" x) (get_header "Yres" x) (get_header "Xoffset" x) (get_header "Yoffset" x), is_image x = error (_ "bad arguments to " ++ "image_set_type:" ++ print type ++ " " ++ print x) { image_set_type_op = Operator "image_set_type" (image_set_type type) Operator_type.COMPOUND_REWRAP false; } image_set_origin xoff yoff x = oo_unary_function image_set_origin_op x, is_class x = im_copy_set x (get_header "Type" x) (get_header "Xres" x) (get_header "Yres" x) (to_real xoff) (to_real yoff), is_image x = error (_ "bad arguments to " ++ "image_set_origin") { image_set_origin_op = Operator "image_set_origin" (image_set_origin xoff yoff) Operator_type.COMPOUND_REWRAP false; } cache tile_width tile_height max_tiles x = oo_unary_function cache_op x, is_class x = im_cache x (to_real tile_width) (to_real tile_height) (to_real max_tiles), is_image x = error (_ "bad arguments to " ++ "cache") { cache_op = Operator "cache" (cache tile_width tile_height max_tiles) Operator_type.COMPOUND_REWRAP false; } tile across down x = oo_unary_function tile_op x, is_class x = im_replicate x (to_real across) (to_real down), is_image x = error (_ "bad arguments to " ++ "tile") { tile_op = Operator "tile" (tile across down) Operator_type.COMPOUND_REWRAP false; } grid tile_height across down x = oo_unary_function grid_op x, is_class x = im_grid x (to_real tile_height) (to_real across) (to_real down), is_image x = error (_ "bad arguments to " ++ "grid") { grid_op = Operator "grid" (grid tile_height across down) Operator_type.COMPOUND_REWRAP false; } max_pair a b = a, a > b = b; min_pair a b = a, a < b = b; range min value max = min_pair max (max_pair min value); max x = oo_unary_function max_op x, is_class x = im_max x, is_image x = max_list x, is_list x = x, is_number x = error (_ "bad arguments to " ++ "max") { max_op = Operator "max" max Operator_type.COMPOUND false; max_list x = error "max []", x == [] = foldr1 max_pair x, is_real_list x = foldr1 max_pair (map max_list x), is_list x = max x; } min x = oo_unary_function min_op x, is_class x = im_min x, is_image x = min_list x, is_list x = x, is_number x = error (_ "bad arguments to " ++ "min") { min_op = Operator "min" min Operator_type.COMPOUND false; min_list x = error "min []", x == [] = foldr1 min_pair x, is_real_list x = foldr1 min_pair (map min_list x), is_list x = min x; } maxpos x = oo_unary_function maxpos_op x, is_class x = im_maxpos x, is_image x = maxpos_matrix x, is_matrix x = maxpos_list x, is_list x = error (_ "bad arguments to " ++ "maxpos") { maxpos_op = Operator "maxpos" maxpos Operator_type.COMPOUND false; maxpos_matrix m = (-1, -1), m == [[]] = (indexes?row, row) { max_value = max (Matrix m); indexes = map (index (equal max_value)) m; row = index (not_equal (-1)) indexes; } maxpos_list l = -1, l == [] = index (equal (max l)) l; } minpos x = oo_unary_function minpos_op x, is_class x = im_minpos x, is_image x = minpos_matrix x, is_matrix x = minpos_list x, is_list x = error (_ "bad arguments to " ++ "minpos") { minpos_op = Operator "minpos" minpos Operator_type.COMPOUND false; minpos_matrix m = (-1, -1), m == [[]] = (indexes?row, row) { min_value = min (Matrix m); indexes = map (index (equal min_value)) m; row = index (not_equal (-1)) indexes; } minpos_list l = -1, l == [] = index (equal (min l)) l; } stats x = oo_unary_function stats_op x, is_class x = im_stats x, is_image x = im_stats (to_image x).value, is_matrix x = error (_ "bad arguments to " ++ "stats") { stats_op = Operator "stats" stats Operator_type.COMPOUND false; } e = 2.7182818284590452354; pi = 3.14159265358979323846; rad d = 2 * pi * (d / 360); deg r = 360 * r / (2 * pi); sign x = oo_unary_function sign_op x, is_class x = im_sign x, is_image x = sign_cmplx x, is_complex x = sign_num x, is_real x = error (_ "bad arguments to " ++ "sign") { sign_op = Operator "sign" sign Operator_type.COMPOUND_REWRAP false; sign_num n = 0, n == 0 = 1, n > 0 = -1; sign_cmplx c = (0, 0), mod == 0 = (re c / mod, im c / mod) { mod = abs c; } } rint x = oo_unary_function rint_op x, is_class x = im_rint x, is_image x = rint_value x, is_number x = error (_ "bad arguments to " ++ "rint") { rint_op = Operator "rint" rint Operator_type.ARITHMETIC false; rint_value x = (int) (x + 0.5), x > 0 = (int) (x - 0.5); } scale x = oo_unary_function scale_op x, is_class x = (unsigned char) x, is_number x = im_scale x, is_image x = scale_list x, is_real_list x || is_matrix x = error (_ "bad arguments to " ++ "scale") { scale_op = Operator "scale" scale Operator_type.COMPOUND_REWRAP false; scale_list l = apply_scale s o l { mn = find_limit min_pair l; mx = find_limit max_pair l; s = 255.0 / (mx - mn); o = -(mn * s); } find_limit fn l = find_limit fn (map (find_limit fn) l), is_listof is_list l = foldr1 fn l; apply_scale s o x = x * s + o, is_number x = map (apply_scale s o) x; } scaleps x = oo_unary_function scale_op x, is_class x = im_scaleps x, is_image x = error (_ "bad arguments to " ++ "scale") { scale_op = Operator "scaleps" scaleps Operator_type.COMPOUND_REWRAP false; } fwfft x = oo_unary_function fwfft_op x, is_class x = im_fwfft x, is_image x = error (_ "bad arguments to " ++ "fwfft") { fwfft_op = Operator "fwfft" fwfft Operator_type.COMPOUND_REWRAP false; } invfft x = oo_unary_function invfft_op x, is_class x = im_invfftr x, is_image x = error (_ "bad arguments to " ++ "invfft") { invfft_op = Operator "invfft" invfft Operator_type.COMPOUND_REWRAP false; } falsecolour x = oo_unary_function falsecolour_op x, is_class x = image_set_type Image_type.sRGB (im_falsecolour x), is_image x = error (_ "bad arguments to " ++ "falsecolour") { falsecolour_op = Operator "falsecolour" falsecolour Operator_type.COMPOUND_REWRAP false; } polar x = oo_unary_function polar_op x, is_class x = im_c2amph x, is_image x = polar_cmplx x, is_complex x = error (_ "bad arguments to " ++ "polar") { polar_op = Operator "polar" polar Operator_type.COMPOUND false; polar_cmplx r = (l, a) { a = 270, x == 0 && y < 0 = 90, x == 0 && y >= 0 = 360 + atan (y / x), x > 0 && y < 0 = atan (y / x), x > 0 && y >= 0 = 180 + atan (y / x); l = (x ** 2 + y ** 2) ** 0.5; x = re r; y = im r; } } rectangular x = oo_unary_function rectangular_op x, is_class x = im_c2rect x, is_image x = rectangular_cmplx x, is_complex x = error (_ "bad arguments to " ++ "rectangular") { rectangular_op = Operator "rectangular" rectangular Operator_type.COMPOUND false; rectangular_cmplx p = (x, y) { l = re p; a = im p; x = l * cos a; y = l * sin a; } } // we can't use colour_unary: that likes 3 band only recomb matrix x = oo_unary_function recomb_op x, is_class x = im_recomb x matrix, is_image x = recomb_real_list x, is_real_list x = map recomb_real_list x, is_matrix x = error (_ "bad arguments to " ++ "recomb") { // COMPOUND_REWRAP ... signal to the colour class to go to image and // back recomb_op = Operator "recomb" (recomb matrix) Operator_type.COMPOUND_REWRAP false; // process [1,2,3 ..] as an image recomb_real_list l = (to_matrix im').value?0 { im = (float) (to_image (Vector l)).value; im' = recomb matrix im; } } extract_area x y w h obj = oo_unary_function extract_area_op obj, is_class obj = im_extract_area obj x' y' w' h', is_image obj = map (extract_range x' w') (extract_range y' h' obj), is_matrix obj = error (_ "bad arguments to " ++ "extract_area") { x' = to_real x; y' = to_real y; w' = to_real w; h' = to_real h; extract_area_op = Operator "extract_area" (extract_area x y w h) Operator_type.COMPOUND_REWRAP false; extract_range from length list = (take length @ drop from) list; } extract_band b obj = subscript obj b; extract_row y obj = oo_unary_function extract_row_op obj, is_class obj = extract_area 0 y' (get_width obj) 1 obj, is_image obj = [obj?y'], is_matrix obj = error (_ "bad arguments to " ++ "extract_row") { y' = to_real y; extract_row_op = Operator "extract_row" (extract_row y) Operator_type.COMPOUND_REWRAP false; } extract_column x obj = oo_unary_function extract_column_op obj, is_class obj = extract_area x' 0 1 height obj, is_image obj = map (\row [row?x']) obj, is_matrix obj = error (_ "bad arguments to " ++ "extract_column") { x' = to_real x; height = get_header "Ysize" obj; extract_column_op = Operator "extract_column" (extract_column x) Operator_type.COMPOUND_REWRAP false; } blend cond in1 in2 = oo_binary_function blend_op cond [in1,in2], is_class cond = im_blend (get_image cond) (get_image in1) (get_image in2), has_image cond && has_image in1 && has_image in2 = error (_ "bad arguments to " ++ "blend") { blend_op = Operator "blend" blend_obj Operator_type.COMPOUND_REWRAP false; blend_obj cond x = blend_result_image { [then_part, else_part] = x; // get things about our output from inputs in this order objects = [then_part, else_part, cond]; // properties of our output image target_width = get_member_list has_width get_width objects; target_height = get_member_list has_height get_height objects; target_bands = get_member_list has_bands get_bands objects; target_format = get_member_list has_format get_format objects; target_type = get_member_list has_type get_type objects; to_image x = to_image_size target_width target_height target_bands target_format x; [then_image, else_image] = map to_image [then_part, else_part]; [c, t, e] = size_alike [cond, then_image, else_image]; blend_result_image = image_set_type target_type (im_blend c t e); } } insert x y small big = oo_binary_function insert_op small big, is_class small = oo_binary'_function insert_op small big, is_class big = im_insert big' small' (to_real x) (to_real y), is_image small && is_image big = error (_ "bad arguments to " ++ "insert") { insert_op = Operator "insert" (insert x y) Operator_type.COMPOUND_REWRAP false; [small', big'] = (formats_alike @ bands_alike) [small, big]; } insert_noexpand x y small big = oo_binary_function insert_noexpand_op small big, is_class small = oo_binary'_function insert_noexpand_op small big, is_class big = im_insert_noexpand big' small' (to_real x) (to_real y), is_image small && is_image big = error (_ "bad arguments to " ++ "insert_noexpand") { insert_noexpand_op = Operator "insert_noexpand" (insert_noexpand x y) Operator_type.COMPOUND_REWRAP false; [small', big'] = (formats_alike @ bands_alike) [small, big]; } measure x y w h u v image = oo_unary_function measure_op image, is_class image = im_measure image (to_real x) (to_real y) (to_real w) (to_real h) (to_real u) (to_real v), is_image image = error (_ "bad arguments to " ++ "measure") { measure_op = Operator "measure" (measure x y w h u v) Operator_type.COMPOUND_REWRAP false; } extract_bands b n obj = oo_unary_function extract_bands_op obj, is_class obj = im_extract_bands obj (to_real b) (to_real n), is_image obj = error (_ "bad arguments to " ++ "extract_bands") { extract_bands_op = Operator "extract_bands" (extract_bands b n) Operator_type.COMPOUND_REWRAP false; } invert x = oo_unary_function invert_op x, is_class x = im_invert x, is_image x = 255 - x, is_real x = error (_ "bad arguments to " ++ "invert") { invert_op = Operator "invert" invert Operator_type.COMPOUND false; } transform ipol wrap params image = oo_unary_function transform_op image, is_class image = im_transform image (to_matrix params) (to_real ipol) (to_real wrap), is_image image = error (_ "bad arguments to " ++ "transform") { transform_op = Operator "transform" (transform ipol wrap params) Operator_type.COMPOUND_REWRAP false; } transform_search max_error max_iterations order ipol wrap sample reference = oo_binary_function transform_search_op sample reference, is_class sample = oo_binary'_function transform_search_op sample reference, is_class reference = im_transform_search sample reference (to_real max_error) (to_real max_iterations) (to_real order) (to_real ipol) (to_real wrap), is_image sample && is_image reference = error (_ "bad arguments to " ++ "transform_search") { transform_search_op = Operator "transform_search" (transform_search max_error max_iterations order ipol wrap) Operator_type.COMPOUND false; } rotate interp angle image = oo_binary_function rotate_op angle image, is_class angle = oo_binary'_function rotate_op angle image, is_class image = im_affinei_all image interp.value a (-b) b a 0 0, is_real angle && is_image image = error (_ "bad arguments to " ++ "rotate") { rotate_op = Operator "rotate" (rotate interp) Operator_type.COMPOUND_REWRAP false; a = cos angle; b = sin angle; } matrix_binary fn a b = itom (fn (mtoi a) (mtoi b)) { mtoi x = im_mask2vips (Matrix x); itom x = (im_vips2mask x).value; } join_lr a b = oo_binary_function join_lr_op a b, is_class a = oo_binary'_function join_lr_op a b, is_class b = join_im a b, is_image a && is_image b = matrix_binary join_im a b, is_matrix a && is_matrix b = error (_ "bad arguments to " ++ "join_lr") { join_lr_op = Operator "join_lr" join_lr Operator_type.COMPOUND_REWRAP false; join_im a b = insert (get_width a) 0 b a; } join_tb a b = oo_binary_function join_tb_op a b, is_class a = oo_binary'_function join_tb_op a b, is_class b = join_im a b, is_image a && is_image b = matrix_binary join_im a b, is_matrix a && is_matrix b = error (_ "bad arguments to " ++ "join_tb") { join_tb_op = Operator "join_tb" join_tb Operator_type.COMPOUND_REWRAP false; join_im a b = insert 0 (get_height a) b a; } conj x = oo_unary_function conj_op x, is_class x = (re x, -im x), is_complex x || (is_image x && format == Image_format.COMPLEX) || (is_image x && format == Image_format.DPCOMPLEX) // assume it's some sort of real = x { format = get_header "BandFmt" x; conj_op = Operator "conj" conj Operator_type.COMPOUND false; } clip2fmt format image = oo_unary_function clip2fmt_op image, is_class image = im_clip2fmt image (to_real format), is_image image = error (_ "bad arguments to " ++ "clip2fmt") { clip2fmt_op = Operator "clip2fmt" (clip2fmt format) Operator_type.COMPOUND_REWRAP false; } embed type x y w h im = oo_unary_function embed_op im, is_class im = im_embed im (to_real type) (to_real x) (to_real y) (to_real w) (to_real h), is_image im = error (_ "bad arguments to " ++ "embed") { embed_op = Operator "embed" (embed type x y w h) Operator_type.COMPOUND_REWRAP false; } /* Morph a mask with a [[real]] matrix ... turn m2 into an image, morph it * with m1, turn it back to a matrix again. */ _morph_2_masks fn m1 m2 = m'' { // The [[real]] can contain 128 values ... squeeze them out! image = im_mask2vips (Matrix m2) == 255; m2_width = get_width image; m2_height = get_height image; // need to embed m2 in an image large enough for us to be able to // position m1 all around the edges, with a 1 pixel overlap image' = embed 0 (m1.width / 2) (m1.height / 2) (m2_width + (m1.width - 1)) (m2_height + (m1.height - 1)) image; // morph! image'' = fn m1 image'; // back to mask m' = im_vips2mask ((double) image''); // Turn 0 in output to 128 (don't care). m'' = map (map fn) m'.value { fn a = 128, a == 0; = a; } } dilate mask image = oo_unary_function dilate_op image, is_class image = im_dilate image (to_matrix mask), is_image image = error (_ "bad arguments to " ++ "dilate") { dilate_op = Operator "dilate" dilate_object Operator_type.COMPOUND_REWRAP false; dilate_object x = _morph_2_masks dilate mask x, is_matrix x = dilate mask x; } erode mask image = oo_unary_function erode_op image, is_class image = im_erode image (to_matrix mask), is_image image = error (_ "bad arguments to " ++ "erode") { erode_op = Operator "erode" erode_object Operator_type.COMPOUND_REWRAP false; erode_object x = _morph_2_masks erode mask x, is_matrix x = erode mask x; } conv mask image = oo_unary_function conv_op image, is_class image = im_conv image (to_matrix mask), is_image image = error (_ "bad arguments to " ++ "conv" ++ ": " ++ "conv (" ++ print mask ++ ") (" ++ print image ++ ")") { conv_op = Operator "conv" (conv mask) Operator_type.COMPOUND_REWRAP false; } convf mask image = oo_unary_function convf_op image, is_class image = im_conv_f image (to_matrix mask), is_image image = error (_ "bad arguments to " ++ "convf" ++ ": " ++ "convf (" ++ print mask ++ ") (" ++ print image ++ ")") { convf_op = Operator "convf" (convf mask) Operator_type.COMPOUND_REWRAP false; } convsep mask image = oo_unary_function convsep_op image, is_class image = im_convsep image (to_matrix mask), is_image image = error (_ "bad arguments to " ++ "convsep") { convsep_op = Operator "convsep" (convsep mask) Operator_type.COMPOUND_REWRAP false; } convsepf mask image = oo_unary_function convsepf_op image, is_class image = im_convsep_f image (to_matrix mask), is_image image = error (_ "bad arguments to " ++ "convsepf") { convsepf_op = Operator "convsepf" (convsepf mask) Operator_type.COMPOUND_REWRAP false; } rank w h n image = oo_unary_function rank_op image, is_class image = im_rank image (to_real w) (to_real h) (to_real n), is_image image = error (_ "bad arguments to " ++ "rank") { rank_op = Operator "rank" (rank w h n) Operator_type.COMPOUND_REWRAP false; } rank_image n x = rlist x.value, is_Group x = rlist x, is_list x = error (_ "bad arguments to " ++ "rank_image") { rlist l = wrapper ranked, has_wrapper = ranked { has_wrapper = has_member_list (has_member "Image") l; wrapper = get_member_list (has_member "Image") (get_member "Image") l; ranked = im_rank_image (map get_image l) (to_real n); } } greyc iterations amplitude sharpness anisotropy alpha sigma dl da gauss_prec interpolation fast_approx x = oo_unary_function greyc_op x, is_class x = greyc_im x, is_image x = error (_ "bad argument" ++ " (" ++ print x ++ ") to " ++ "greyc") { greyc_op = Operator "greyc" (greyc iterations amplitude sharpness anisotropy alpha sigma dl da gauss_prec interpolation fast_approx) Operator_type.COMPOUND_REWRAP false; greyc_im x = im_greyc x iterations amplitude sharpness anisotropy alpha sigma dl da gauss_prec interpolation fast_approx; } greyc_mask iterations amplitude sharpness anisotropy alpha sigma dl da gauss_prec interpolation fast_approx mask x = oo_binary_function greyc_mask_op mask x, is_class mask = oo_binary'_function greyc_mask_op mask x, is_class x = greyc_im mask x, is_image mask && is_image x = error (_ "bad arguments" ++ " (" ++ print mask ++ ", " ++ print x ++ ") " ++ "to " ++ "greyc") { greyc_mask_op = Operator "greyc_mask" (greyc_mask iterations amplitude sharpness anisotropy alpha sigma dl da gauss_prec interpolation fast_approx) Operator_type.COMPOUND_REWRAP false; greyc_im mask x = im_greyc_mask x mask iterations amplitude sharpness anisotropy alpha sigma dl da gauss_prec interpolation fast_approx; } // find the correlation surface for a small image within a big one correlate small big = oo_binary_function correlate_op small big, is_class small = oo_binary'_function correlate_op small big, is_class big = im_spcor big small, is_image small && is_image big = error (_ "bad arguments to " ++ "correlate") { correlate_op = Operator "correlate" correlate Operator_type.COMPOUND_REWRAP false; } // just sum-of-squares-of-differences correlate_fast small big = oo_binary_function correlate_fast_op small big, is_class small = oo_binary'_function correlate_fast_op small big, is_class big = im_fastcor big small, is_image small && is_image big = error (_ "bad arguments to " ++ "correlate_fast") { correlate_fast_op = Operator "correlate_fast" correlate_fast Operator_type.COMPOUND_REWRAP false; } // set Type, wrap as Plot_hist if it's a class hist_tag x = oo_unary_function hist_tag_op x, is_class x = image_set_type Image_type.HISTOGRAM x, is_image x = error (_ "bad arguments to " ++ "hist_tag") { hist_tag_op = Operator "hist_tag" (Plot_histogram @ hist_tag) Operator_type.COMPOUND false; } hist_find x = oo_unary_function hist_find_op x, is_class x = im_histgr x (-1), is_image x = error (_ "bad arguments to " ++ "hist_find") { hist_find_op = Operator "hist_find" (Plot_histogram @ hist_find) Operator_type.COMPOUND false; } hist_find_nD bins image = oo_unary_function hist_find_nD_op image, is_class image = im_histnD image (to_real bins), is_image image = error (_ "bad arguments to " ++ "hist_find_nD") { hist_find_nD_op = Operator "hist_find_nD" (hist_find_nD bins) Operator_type.COMPOUND_REWRAP false; } hist_find_indexed index value = oo_binary_function hist_find_indexed_op index value, is_class index = oo_binary'_function hist_find_indexed_op index value, is_class value = im_hist_indexed index value, is_image index && is_image value = error (_ "bad arguments to " ++ "hist_find_indexed") { hist_find_indexed_op = Operator "hist_find_indexed" (compose (compose Plot_histogram) hist_find_indexed) Operator_type.COMPOUND false; } hist_map hist image = oo_binary_function hist_map_op hist image, is_class hist = oo_binary'_function hist_map_op hist image, is_class image = im_maplut image hist, is_image hist && is_image image = error (_ "bad arguments to " ++ "hist_map") { // can't use rewrap, as we want to always wrap as image hist_map_op = Operator "hist_map" (compose (compose Image) hist_map) Operator_type.COMPOUND false; } hist_cum hist = oo_unary_function hist_cum_op hist, is_class hist = im_histcum hist, is_image hist = error (_ "bad arguments to " ++ "hist_cum") { hist_cum_op = Operator "hist_cum" hist_cum Operator_type.COMPOUND_REWRAP false; } hist_diff hist = oo_unary_function hist_diff_op hist, is_class hist = im_histdiff hist, is_image hist = error (_ "bad arguments to " ++ "hist_diff") { hist_diff_op = Operator "hist_diff" hist_diff Operator_type.COMPOUND_REWRAP false; im_histdiff h = (conv (Matrix [[-1, 1]]) @ clip2fmt (fmt (get_format h))) h { // up the format so it can represent the whole range of // possible values from this mask fmt x = Image_format.SHORT, x == Image_format.UCHAR || x == Image_format.CHAR = Image_format.INT, x == Image_format.USHORT || x == Image_format.SHORT || x == Image_format.UINT = x; } } hist_norm hist = oo_unary_function hist_norm_op hist, is_class hist = im_histnorm hist, is_image hist = error (_ "bad arguments to " ++ "hist_norm") { hist_norm_op = Operator "hist_norm" hist_norm Operator_type.COMPOUND_REWRAP false; } hist_match in ref = oo_binary_function hist_match_op in ref, is_class in = oo_binary'_function hist_match_op in ref, is_class ref = im_histspec in ref, is_image in && is_image ref = error (_ "bad arguments to " ++ "hist_match") { hist_match_op = Operator "hist_match" hist_match Operator_type.COMPOUND_REWRAP false; } hist_equalize x = hist_map ((hist_norm @ hist_cum @ hist_find) x) x; hist_equalize_local w h image = oo_unary_function hist_equalize_local_op image, is_class image = lhisteq image, is_image image = error (_ "bad arguments to " ++ "hist_equalize_local") { hist_equalize_local_op = Operator "hist_equalize_local" (hist_equalize_local w h) Operator_type.COMPOUND_REWRAP false; // loop over bands, if necessary lhisteq im = im_lhisteq im (to_real w) (to_real h), get_bands im == 1 = (foldl1 join @ map lhisteq @ bandsplit) im; } // find the threshold below which are percent of the image (percent in [0,1]) // eg. hist_thresh 0.1 x == 12, then x < 12 will light up 10% of the pixels hist_thresh percent image = x { // our own normaliser ... we don't want to norm channels separately // norm to [0,1] my_hist_norm h = h / max h; // normalised cumulative hist // we sum the channels before we normalise, because we want to treat them // all the same h = (my_hist_norm @ sum @ bandsplit @ hist_cum @ hist_find) image.value; // threshold that, then use im_profile to search for the x position in the // histogram x = mean (im_profile (h > percent) 1); } /* Sometimes useful, despite plotting now being built in, for making * diagnostic images. */ hist_plot hist = oo_unary_function hist_plot_op hist, is_class hist = im_histplot hist, is_image hist = error (_ "bad arguments to " ++ "hist_plot") { hist_plot_op = Operator "hist_plot" (Image @ hist_plot) Operator_type.COMPOUND false; } zerox d x = oo_unary_function zerox_op x, is_class x = im_zerox x (to_real d), is_image x = error (_ "bad arguments to " ++ "zerox") { zerox_op = Operator "zerox" (zerox d) Operator_type.COMPOUND_REWRAP false; } resize interp xfac yfac image = oo_unary_function resize_op image, is_class image = resize_im image, is_image image = error (_ "bad arguments to " ++ "resize") { resize_op = Operator "resize" resize_im Operator_type.COMPOUND_REWRAP false; xfac' = to_real xfac; yfac' = to_real yfac; rxfac' = 1 / xfac'; ryfac' = 1 / yfac'; // is this interpolation nearest-neighbour? is_nn x = x.type == Interpolate_type.NEAREST_NEIGHBOUR; resize_im im // upscale by integer factor, nearest neighbour = im_zoom im xfac' yfac', is_int xfac' && is_int yfac' && xfac' >= 1 && yfac' >= 1 && is_nn interp // downscale by integer factor, nearest neighbour = im_subsample im rxfac' ryfac', is_int rxfac' && is_int ryfac' && rxfac' >= 1 && ryfac' >= 1 && is_nn interp // upscale by any factor, nearest neighbour // upscale by integer part, then affine to exact size = scale xg?1 yg?1 (im_zoom im xg?0 yg?0), xfac' >= 1 && yfac' >= 1 && is_nn interp // downscale by any factor, nearest neighbour // downscale by integer part, then affine to exact size = scale xs?1 ys?1 (im_subsample im xs?0 ys?0), rxfac' >= 1 && ryfac' >= 1 && is_nn interp // upscale by any factor with affine = scale xfac' yfac' im, xfac' >= 1 && yfac' >= 1 // downscale by any factor, bilinear // block shrink by integer factor, then resample to // exact with affine = scale xs?1 ys?1 (im_shrink im xs?0 ys?0), rxfac' >= 1 && ryfac' >= 1 = error ("resize: unimplemented argument combination:\n" ++ " xfac = " ++ print xfac' ++ "\n" ++ " yfac = " ++ print yfac' ++ "\n" ++ " interp = " ++ print interp ++ " (" ++ Interpolate_type.descriptions?interp.type ++ ")") { // convert a float scale to integer plus fraction // eg. scale by 2.5 becomes [2, 1.25] (x * 2.5 == x * 2 * 1.25) break f = [floor f, f / floor f]; // same, but for downsizing ... turn a float scale which is less than // 1 into an int shrink and a float scale // complicated: the int shrink may round the size down (eg. imagine // subsampling a 11 pixel wide image by 3, we'd get a 3 pixel wide // image, not a 3.666 pixel wide image), so pass in the size of image // we are operating on and adjust for any rounding // so ... x is (eg.) 467, f is (eg. 128/467, about 0.274) rbreak x f = [int_shrink, float_resample] { // the size of image we are aiming for after the combined int and // float resample x' = x * f; // int part int_shrink = floor (1 / f); // size after int shrink x'' = floor (x / int_shrink); // therefore what we need for the float part float_resample = x' / x''; } width = get_width im; height = get_height im; // grow and shrink factors xg = break xfac'; yg = break yfac'; xs = rbreak width xfac'; ys = rbreak height yfac'; // resize scale xfac yfac im = im_affinei_all im interp.value xfac 0 0 yfac 0 0; } } sharpen radius x1 y2 y3 m1 m2 in = oo_unary_function sharpen_op in, is_class in = im_sharpen in (to_real radius) (to_real x1) (to_real y2) (to_real y3) (to_real m1) (to_real m2), is_image in = error (_ "bad arguments to " ++ "sharpen") { sharpen_op = Operator "sharpen" (sharpen radius x1 y2 y3 m1 m2) Operator_type.COMPOUND_REWRAP false; } tone_analyse s m h sa ma ha in = oo_unary_function tone_analyse_op in, is_class in = im_tone_analyse in (to_real s) (to_real m) (to_real h) (to_real sa) (to_real ma) (to_real ha), is_image in = error (_ "bad arguments to " ++ "tone_analyse") { tone_analyse_op = Operator "tone_analyse" (Plot_histogram @ tone_analyse s m h sa ma ha) Operator_type.COMPOUND false; } tone_map hist image = oo_binary_function tone_map_op hist image, is_class hist = oo_binary'_function tone_map_op hist image, is_class image = im_tone_map image hist, is_image hist && is_image image = error (_ "bad arguments to " ++ "tone_map") { tone_map_op = Operator "tone_map" tone_map Operator_type.COMPOUND_REWRAP false; } tone_build fmt b w s m h sa ma ha = (Plot_histogram @ clip2fmt fmt) (im_tone_build_range mx mx (to_real b) (to_real w) (to_real s) (to_real m) (to_real h) (to_real sa) (to_real ma) (to_real ha)) { mx = Image_format.maxval fmt; } icc_export depth profile intent in = oo_unary_function icc_export_op in, is_class in = im_icc_export_depth in (to_real depth) (expand profile) (to_real intent), is_image in = error (_ "bad arguments to " ++ "icc_export") { icc_export_op = Operator "icc_export" (icc_export depth profile intent) Operator_type.COMPOUND_REWRAP false; } icc_import profile intent in = oo_unary_function icc_import_op in, is_class in = im_icc_import in (expand profile) (to_real intent), is_image in = error (_ "bad arguments to " ++ "icc_import") { icc_import_op = Operator "icc_import" (icc_import profile intent) Operator_type.COMPOUND_REWRAP false; } icc_import_embedded intent in = oo_unary_function icc_import_embedded_op in, is_class in = im_icc_import_embedded in (to_real intent), is_image in = error (_ "bad arguments to " ++ "icc_import_embedded") { icc_import_embedded_op = Operator "icc_import_embedded" (icc_import_embedded intent) Operator_type.COMPOUND_REWRAP false; } icc_transform in_profile out_profile intent in = oo_unary_function icc_transform_op in, is_class in = im_icc_transform in (expand in_profile) (expand out_profile) (to_real intent), is_image in = error (_ "bad arguments to " ++ "icc_transform") { icc_transform_op = Operator "icc_transform" (icc_transform in_profile out_profile intent) Operator_type.COMPOUND_REWRAP false; } icc_ac2rc profile in = oo_unary_function icc_ac2rc_op in, is_class in = im_icc_ac2rc in (expand profile), is_image in = error (_ "bad arguments to " ++ "icc_ac2rc") { icc_ac2rc_op = Operator "icc_ac2rc" (icc_ac2rc profile) Operator_type.COMPOUND_REWRAP false; } flood_blob x y v image = oo_unary_function flood_blob_op image, is_class image = im_flood_blob_copy image (to_real x) (to_real y) v, is_image image = error (_ "bad arguments to " ++ "flood_blob") { flood_blob_op = Operator "flood_blob" (flood_blob x y v) Operator_type.COMPOUND_REWRAP false; } print_base base in = oo_unary_function print_base_op in, is_class in = map (print_base base) in, is_list in = print_base_real, is_real in = error (_ "bad arguments to " ++ "print_base") { print_base_op = Operator "print_base" (print_base base) Operator_type.COMPOUND false; print_base_real = error "print_base: bad base", base < 2 || base > 16 = "0", in < 0 || chars == [] = reverse chars { digits = map (\x x % base) (takewhile (not_equal 0) (iterate (\x idivide x base) in)); chars = map tohd digits; tohd x = (char) ((int) '0' + x), x < 10 = (char) ((int) 'A' + (x - 10)); } } /* id x: the identity function * * id :: * -> * */ id x = x; /* const x y: junk y, return x * * (const 3) is the function that always returns 3. * const :: * -> ** -> * */ const x y = x; /* converse fn a b: swap order of args to fn * * converse fn a b == fn b a * converse :: (* -> ** -> ***) -> ** -> * -> *** */ converse fn a b = fn b a; /* fix fn x: find the fixed point of a function */ fix fn x = limit (iterate fn x); /* until pred fn n: apply fn to n until pred succeeds; return that value * * until (more 1000) (multiply 2) 1 = 1024 * until :: (* -> bool) -> (* -> *) -> * -> * */ until pred fn n = n, pred n = until pred fn (fn n); /* Infinite list of primes. */ primes = 1 : (sieve [2 ..]) { sieve l = hd l : sieve (filter (nmultiple (hd l)) (tl l)); nmultiple n x = x / n != (int) (x / n); } /* Map an n-ary function (pass the args as a list) over groups of objects. * The objects can be single objects or groups. If more than one * object is a group, we iterate for the length of the smallest group. * Don't loop over plain lists, since we want (eg.) "mean [1, 2, 3]" to work. * Treat [] as no-value --- ie. if any of the inputs are [] we put [] into the * output and don't apply the function. copy-pasted into _types, keep in sync */ map_nary fn args = fn args, groups == [] = Group (map process [0, 1 .. shortest - 1]) { // find all the group arguments groups = filter is_Group args; // what's the length of the shortest group arg? shortest = foldr1 min_pair (map (len @ get_value) groups); // process index n ... pull that member from each argument // recurse to handle application, so we work for nested groups too process n = NULL, any (map (is_noval n) args) = map_nary fn (map (extract n) args) { extract n arg = arg.value?n, is_Group arg = arg; is_noval n arg = is_Group arg && arg.value?n == NULL; } } /* Map a 1-ary function over an object. */ map_unary fn a = map_nary (list_1ary fn) [a]; /* Map a 2-ary function over a pair of objects. */ map_binary fn a b = map_nary (list_2ary fn) [a, b]; /* Map a 3-ary function over three objects. */ map_trinary fn a b c = map_nary (list_3ary fn) [a, b, c]; /* Map a 4-ary function over three objects. */ map_quaternary fn a b c d = map_nary (list_4ary fn) [a, b, c, d]; /* Same as map_nary, but for lists. Handy for (eg.) implementing arith ops on * vectors and matricies. */ map_nary_list fn args = fn args, lists == [] = map process [0, 1 .. shortest - 1] { // find all the list arguments lists = filter is_list args; // what's the length of the shortest list arg? shortest = foldr1 min_pair (map len lists); // process index n ... pull that member from each argument // recurse to handle application, so we work for nested lists too process n = map_nary_list fn (map (extract n) args) { extract n arg = arg?n, is_list arg = arg; } } map_unaryl fn a = map_nary_list (list_1ary fn) [a]; map_binaryl fn a b = map_nary_list (list_2ary fn) [a, b]; /* Remove features smaller than x pixels across from an image. This used to be * rather complex ... convsep is now good enough to use. */ smooth x image = convsep (matrix_gaussian_blur (to_real x * 2)) image; /* Chop up an image into a list of lists of smaller images. Pad edges with * black. */ imagearray_chop tile_width tile_height hoverlap voverlap i = map chop' [0, vstep .. last_y] { width = get_width i; height = get_height i; bands = get_bands i; format = get_format i; type = get_type i; tile_width' = to_real tile_width; tile_height' = to_real tile_height; hoverlap' = to_real hoverlap; voverlap' = to_real voverlap; /* Unique pixels per tile. */ hstep = tile_width' - hoverlap'; vstep = tile_height' - voverlap'; /* Number of tiles across and down. Remember the case where width == * hstep. */ across = (int) ((width - 1) / hstep) + 1; down = (int) ((height - 1) / vstep) + 1; /* top/left of final tile. */ last_x = hstep * (across - 1); last_y = vstep * (down - 1); /* How much do we need to pad by? */ sx = last_x + tile_width'; sy = last_y + tile_height'; /* Expand image with black to pad size. */ pad = embed 0 0 0 sx sy i; /* Chop up a row. */ chop' y = map chop'' [0, hstep .. last_x] { chop'' x = extract_area x y tile_width' tile_height' pad; } } /* Reassemble image. */ imagearray_assemble hoverlap voverlap il = (image_set_origin 0 0 @ foldl1 tbj @ map (foldl1 lrj)) il { lrj l r = insert (get_width l + hoverlap) 0 r l; tbj t b = insert 0 (get_height t + voverlap) b t; } /* Generate an nxn identity matrix. */ identity_matrix n = error "identity_matrix: n > 0", n < 1 = map line [0 .. n - 1] { line p = take p [0, 0 ..] ++ [1] ++ take (n - p - 1) [0, 0 ..]; } /* Incomplete gamma function Q(a, x) == 1 - P(a, x) FIXME ... this is now a builtin, until we can get a nice List class (requires overloadable ':') gammq a x = error "bad args", x < 0 || a <= 0 = 1 - gamser, x < a + 1 = gammcf { gamser = (gser a x)?0; gammcf = (gcf a x)?0; } */ /* Incomplete gamma function P(a, x) evaluated as series representation. Also * return ln(gamma(a)) ... nr in c, pp 218 */ gser a x = [gamser, gln] { gln = gammln a; gamser = error "bad args", x < 0 = 0, x == 0 = 1 // fix this { // maximum iterations maxit = 100; ap = List [a + 1, a + 2 ...]; xoap = x / ap; del = map product (prefixes xoap.value); /* del = map (multiply (1 / a)) (map product (prefixes xoap)) del = xap = iterate (multiply */ /* Generate all prefixes of a list ... [1,2,3] -> [[1], [1, 2], [1, 2, * 3], [1, 2, 3, 4] ...] */ prefixes l = map (converse take l) [1..]; } } /* ln(gamma(xx)) ... nr in c, pp 214 */ gammln xx = gln { cof = [76.18009172947146, -86.50532032941677, 24.01409824083091, -1.231739572450155, 0.1208650973866179e-2, -0.5395239384953e-5]; y = take 6 (iterate (add 1) (xx + 1)); ser = 1.000000000190015 + sum (map2 divide cof y); tmp = xx + 0.5; tmp' = tmp - ((xx + 0.5) * log tmp); gln = -tmp + log (2.5066282746310005 * ser / xx); } /* make a LUT from a scatter */ buildlut x = Plot_histogram (im_buildlut x), is_Matrix x && x.width > 1 = im_buildlut (Matrix x), is_matrix x && is_list_len_more 1 x?0 = error (_ "bad arguments to " ++ "buildlut"); /* Linear regression. Return a class with the stuff we need in. * from s15.2, p 665 NR in C */ linreg xes yes = obj { obj = class { // in case we ever get shown in the workspace _vislevel = 2; slope = sum [t * y :: [t, y] <- zip2 tes yes] / st2; intercept = (sy - sx * slope) / ss; chi2 = sum [(y - intercept - slope * x) ** 2 :: [x, y] <- zip2 xes yes]; siga = (chi2 / (ss - 2)) ** 0.5 * ((1 + sx ** 2 / (ss * st2)) / ss) ** 0.5; sigb = (chi2 / (ss - 2)) ** 0.5 * (1 / st2) ** 0.5; // for compat with linregw, see below q = 1.0; } ss = len xes; sx = sum xes; sy = sum yes; sxoss = sx / ss; tes = [x - sxoss :: x <- xes]; st2 = sum [t ** 2 :: t <- tes]; } /* Weighted linear regression. Xes, yes and a list of deviations. */ linregw xes yes devs = obj { obj = class { // in case we ever get shown in the workspace _vislevel = 2; slope = sum [(t * y) / sd :: [t, y, sd] <- zip3 tes yes devs] / st2; intercept = (sy - sx * slope) / ss; chi2 = sum [((y - intercept - slope * x) / sd) ** 2 :: [x, y, sd] <- zip3 xes yes devs]; siga = ((1 + sx * sx / (ss * st2)) / ss) ** 0.5; sigb = (1 / st2) ** 0.5; q = gammq (0.5 * (len xes - 2)) (0.5 * chi2); } wt = [sd ** -0.5 :: sd <- devs]; ss = sum wt; sx = sum [x * w :: [x, w] <- zip2 xes wt]; sy = sum [y * w :: [y, w] <- zip2 yes wt]; sxoss = sx / ss; tes = [(x - sxoss) / sd :: [x, sd] <- zip2 xes devs]; st2 = sum [t ** 2 :: t <- tes]; } /* Clustering: pass in a list of points, repeatedly merge the * closest two points until no two points are closer than the threshold. * Return [merged-points, corresponding-weights]. A weight is a list of the * indexes we merged to make that point, ie. len weight == how significant * this point is. * * eg. * cluster 12 [152,154,155,42,159] == * [[155,42],[[1,2,0,4],[3]]] */ cluster thresh points = oo_unary_function cluster_op points, is_class points // can't use [0..len points - 1], in case len points == 0 = merge [points, map (converse cons []) (take (len points) [0 ..])], is_list points = error (_ "bad arguments to " ++ "cluster") { cluster_op = Operator "cluster" (cluster thresh) Operator_type.COMPOUND false; merge x = x, m < 2 || d > thresh = merge [points', weights'] { [points, weights] = x; m = len points; // generate indexes of all possible pairs, avoiding comparing a thing // to itself, and assuming that dist is reflexive // first index is always less than 2nd index // the +1,+2 makes sure we have an increasing generator, otherwise we // can get [3 .. 4] (for example), which will make a decreasing // sequence pairs = [[x, y] :: x <- [0 .. m - 1]; y <- [x + 1, x + 2 .. m - 1]]; // distance function // arg is eg. [3,1], meaning get distance from point 3 to point 1 dist x = abs (points?i - points?j) { [i, j] = x; } // smallest distance, then the two points we merge p = minpos (map dist pairs); d = dist pairs?p; [i, j] = pairs?p; // new point and new weight nw = weights?i ++ weights?j; np = (points?i * len weights?i + points?j * len weights?j) / len nw; // remove element i from a list remove i l = take i l ++ drop (i + 1) l; // remove two old points, add the new merged one // i < j (see "pairs", above) points' = np : remove i (remove j points); weights' = nw : remove i (remove j weights); } } /* Extract the area of an image around an arrow. * Transform the image to make the arrow horizontal, then displace by hd and * vd pxels, then cut out a bit h pixels high centered on the arrow. */ extract_arrow hd vd h arrow = extract_area (re p' + hd) (im p' - h / 2 + vd) (re pv) h im' { // the line as a polar vector pv = polar (arrow.width, arrow.height); a = im pv; // smallest rotation that will make the line horizontal a' = 360 - a, a > 270 = 180 - a, a > 90 = -a; im' = rotate Interpolate_bilinear a' arrow.image; // look at the start and end of the arrow, pick the leftmost p = (arrow.left, arrow.top), arrow.left <= arrow.right = (arrow.right, arrow.bottom); // transform that point to im' space p' = rectangular (polar p + (0, a')) + (im'.xoffset, im'.yoffset); } /* You'd think these would go in _convert, but they are not really colour ops, * so put them here. */ rad2float image = oo_unary_function rad2float_op image, is_class image = im_rad2float image, is_image image = error (_ "bad arguments to " ++ "rad2float") { rad2float_op = Operator "rad2float" rad2float Operator_type.COMPOUND_REWRAP false; } float2rad image = oo_unary_function float2rad_op image, is_class image = im_float2rad image, is_image image = error (_ "bad arguments to " ++ "float2rad") { float2rad_op = Operator "float2rad" float2rad Operator_type.COMPOUND_REWRAP false; } segment x = oo_unary_function segment_op x, is_class x = image', is_image x = error (_ "bad arguments to " ++ "segment") { segment_op = Operator "segment" segment Operator_type.COMPOUND_REWRAP false; [image, nsegs] = im_segment x; image' = im_copy_set_meta image "n-segments" nsegs; } point a b = oo_binary_function point_op a b, is_class a = oo_binary'_function point_op a b, is_class b = im_read_point b x y, is_image b = [b?x?y], is_matrix b = [b?x], is_real_list b && y == 0 = [b?y], is_real_list b && x == 0 = error (_ "bad arguments to " ++ "point") { point_op = Operator "point" (\a\b Vector (point a b)) Operator_type.COMPOUND false; (x, y) = a, is_complex a; = (a?0, a?1), is_real_list a && is_list_len 2 a = error "bad position format"; } nip2-8.7.0/share/nip2/compat/7.24/Filter.def0000644000175000017500000011516513224651032015062 00000000000000Filter_conv_item = class Menupullright "_Convolution" "various spatial convolution filters" { /* Some useful masks. */ filter_blur = Matrix_con 9 0 [[1, 1, 1], [1, 1, 1], [1, 1, 1]]; filter_sharp = Matrix_con 8 0 [[-1, -1, -1], [-1, 16, -1], [-1, -1, -1]]; filter_emboss = Matrix_con 1 128 [[-1, 0], [0, 1]]; filter_laplacian = Matrix_con 1 128 [[-1, -1, -1], [-1, 8, -1], [-1, -1, -1]]; filter_sobel = Matrix_con 1 128 [[1, 2, 1], [0, 0, 0], [-1, -2, -1]]; filter_lindet = Matrix_con 1 0 [[1, 1, 1], [-2, -2, -2], [1, 1, 1]]; Blur_item = class Menuaction "_Blur" "3x3 blur of image" { action x = map_unary (conv filter_blur) x; } Sharpen_item = class Menuaction "_Sharpen" "3x3 sharpen of image" { action x = map_unary (conv filter_sharp) x; } Emboss_item = class Menuaction "_Emboss" "1 pixel displace emboss" { action x = map_unary (conv filter_emboss) x; } Laplacian_item = class Menuaction "_Laplacian" "3x3 laplacian edge detect" { action x = map_unary (conv filter_laplacian) x; } Sobel_item = class Menuaction "So_bel" "3x3 Sobel edge detect" { action x = map_unary sobel x { sobel im = abs (a - 128) + abs (b - 128) { a = conv filter_sobel im; b = conv (rot270 filter_sobel) im; } } } /* 3x3 line detect of image diagonals should be scaled down by root(2) I guess Kirk */ Linedet_item = class Menuaction "Li_ne Detect" "3x3 line detect" { action x = map_unary lindet x { lindet im = foldr1 max_pair images { masks = take 4 (iterate rot45 filter_lindet); images = map (converse conv im) masks; } } } Usharp_item = class Menuaction "_Unsharp Mask" "cored sharpen of L only in LAB image" { action x = class _result { _vislevel = 3; size = Option "Radius" [ "3 pixels", "5 pixels", "7 pixels", "9 pixels", "11 pixels", "51 pixels" ] 0; st = Scale "Smoothness threshold" 0 5 1.5; bm = Scale "Brighten by at most" 1 50 10; dm = Scale "Darken by at most" 1 50 50; fs = Scale "Sharpen flat areas by" (-2) 5 1; js = Scale "Sharpen jaggy areas by" (-2) 5 2; _result = map_unary process x { process in = Image in''' { in' = colour_transform_to Image_type.LABS in.value; in'' = sharpen [3, 5, 7, 9, 11, 51]?size st bm dm fs js in'; in''' = colour_transform_to (get_type in) in''; } } } } sep1 = Menuseparator; Custom_blur_item = class Menuaction "Custom B_lur / Sharpen" "blur or sharpen with tuneable parameters" { action x = class _result { _vislevel = 3; type = Option "Type" ["Blur", "Sharpen"] 0; r = Scale "Radius" 1 100 1; fac = Scale "Amount" 0 1 1; shape = Option "Mask shape" [ "Square", "Gaussian" ] 0; prec = Option "Precision" ["Int", "Float"] 0; _result = map_unary process x { process in = clip2fmt blur.format proc { mask = matrix_blur r.value, shape.value == 0 = matrix_gaussian_blur r.value; blur = [convsep, convsepf]?prec mask in; proc = in + fac * (in - blur), type == 1 = blur * fac + in * (1 - fac); } } } } Custom_conv_item = class Menuaction "Custom C_onvolution" "convolution filter with tuneable parameters" { action x = class _result { _vislevel = 3; matrix = Matrix_con 1 0 [[0, 0, 0], [0, 1, 0], [0, 0, 0]]; separable = Toggle "Seperable convolution" false, matrix.width == 1 || matrix.height == 1 = false; type = Option "Convolution type" ["Int", "Float"] 0; rotate = Option "Rotate" [ "Don't rotate", "4 x 45 degrees", "8 x 45 degrees", "2 x 90 degrees"] 0; _result = map_unary process x { process in = in.Image in' { conv_fn = im_lindetect, !separable && type == 0 && rotate == 1 = im_compass, !separable && type == 0 && rotate == 2 = im_gradient, !separable && type == 0 && rotate == 3 = im_conv, !separable && type == 0 = im_convsep, separable && type == 0 = im_conv_f, !separable && type == 1 = im_convsep_f, separable && type == 1 = error "boink!"; in' = conv_fn in.value matrix; } } } } } Filter_rank_item = class Menupullright "_Rank" "various rank filters" { Median_item = class Menuaction "_Median" "3x3 median rank filter" { action x = map_unary (rank 3 3 4) x; } Image_rank_item = class Menuaction "_Image Rank" "pixelwise rank a list or group of images" { action x = class _result { _vislevel = 3; select = Expression "Rank" ((int) (guess_size / 2)) { guess_size = len x, is_list x = len x.value, is_Group x = 0; } // can't really iterate over groups ... since we allow a group // argument _result = rank_image select x; } } Custom_rank_item = class Menuaction "Custom _Rank" "rank filter with tuneable parameters" { action x = class _result { _vislevel = 3; window_width = Expression "Window width" 3; window_height = Expression "Window height" 3; select = Expression "Rank" ((int) ((to_real window_width * to_real window_height) / 2)); _result = map_unary process x { process in = rank window_width window_height select in; } } } } Filter_morphology_item = class Menupullright "_Morphology" "various morphological filters" { /* Some useful masks. */ mask8 = Matrix_mor [[255, 255, 255], [255, 255, 255], [255, 255, 255]]; mask4 = Matrix_mor [[128, 255, 128], [255, 255, 255], [128, 255, 128]]; mask1 = Matrix_mor [[0, 0, 0], [0, 255, 0], [0, 0, 0]]; thin = Matrix_mor [[0, 0, 0], [128, 255, 128], [255, 255, 255]]; Threshold_item = Select_item.Threshold_item; sep1 = Menuseparator; Dilate_item = class Menupullright "_Dilate" "morphological dilate" { Dilate8_item = class Menuaction "_8-connected" "dilate with an 8-connected mask" { action x = map_unary (dilate mask8) x; } Dilate4_item = class Menuaction "_4-connected" "dilate with a 4-connected mask" { action x = map_unary (dilate mask4) x; } } Erode_item = class Menupullright "_Erode" "morphological erode" { Erode8_item = class Menuaction "_8-connected" "erode with an 8-connected mask" { action x = map_unary (erode mask8) x; } Erode4_item = class Menuaction "_4-connected" "erode with a 4-connected mask" { action x = map_unary (erode mask4) x; } } Custom_morph_item = class Menuaction "Custom _Morphology" "convolution morphological operator" { action x = class _result { _vislevel = 3; mask = mask4; type = Option "Operation" ["Erode", "Dilate"] 1; apply = Expression "Number of times to apply mask" 1; _result = map_unary morph x { morph image = Image value' { fatmask = (iterate (dilate mask) mask)?(to_real apply - 1); value' = im_erode image.value fatmask, type.value == 0 = im_dilate image.value fatmask; } } } } sep2 = Menuseparator; Open_item = class Menuaction "_Open" "open with an 8-connected mask" { action x = map_unary (dilate mask8 @ erode mask8) x; } Close_item = class Menuaction "_Close" "close with an 8-connected mask" { action x = map_unary (erode mask8 @ dilate mask8) x; } Clean_item = class Menuaction "C_lean" "remove 8-connected isolated points" { action x = map_unary clean x { clean x = x ^ erode mask1 x; } } Thin_item = class Menuaction "_Thin" "thin once" { action x = map_unary thinall x { masks = take 8 (iterate rot45 thin); thin1 m x = x ^ erode m x; thinall x = foldr thin1 x masks; } } sep3 = Menuseparator; Segment_item = class Menuaction "_Segment" "break image into disjoint regions" { action x = class _result { _vislevel = 3; segments = Expression "Number of disjoint regions" (map_unary (get_header "n-segments") _result); _result = map_unary segment x; } } } Filter_fourier_item = class Menupullright "_Fourier" "various Fourier filters" { preview_size = 64; sense_option = Option "Sense" [ "Pass", "Reject" ] 0; // make a visualisation image make_vis fn = (Image @ image_set_type Image_type.FOURIER @ rotquad @ fn) (im_create_fmask preview_size preview_size); // make the process function process fn in = (Image @ fn) (im_flt_image_freq in.value); New_ideal_item = class Menupullright "_Ideal" "various ideal Fourier filters" { High_low_item = class Menuaction "_High or Low Pass" "highpass/lowpass ideal Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; // call a freq func with our parameters _params f = f sense.value fc.value 0 0 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" "ring pass/reject ideal Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; rw = Scale "Ring width" 0.01 0.99 0.5; // call a freq func with our parameters _params f = f (sense.value + 6) fc.value rw.value 0 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Band_item = class Menuaction "_Band Pass or Band Reject" "band pass/reject ideal Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fcx = Scale "Horizontal frequency cutoff" 0.01 0.99 0.5; fcy = Scale "Vertical frequency cutoff" 0.01 0.99 0.5; r = Scale "Radius" 0.01 0.99 0.5; // call a freq func with our parameters _params f = f (sense.value + 12) fcx.value fcy.value r.value 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } } New_gaussian_item = class Menupullright "_Gaussian" "various Gaussian Fourier filters" { High_low_item = class Menuaction "_High or Low Pass" "highpass/lowpass Gaussian Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; // call a freq func with our parameters _params f = f (sense.value + 4) fc.value ac.value 0 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" "ring pass/reject Gaussian Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; rw = Scale "Ring width" 0.01 0.99 0.5; // call a freq func with our parameters _params f = f (sense.value + 10) fc.value rw.value ac.value 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Band_item = class Menuaction "_Band Pass or Band Reject" "band pass/reject Gaussian Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fcx = Scale "Horizontal frequency cutoff" 0.01 0.99 0.5; fcy = Scale "Vertical frequency cutoff" 0.01 0.99 0.5; r = Scale "Radius" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; // call a freq func with our parameters _params f = f (sense.value + 16) fcx.value fcy.value r.value ac.value 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } } New_butterworth_item = class Menupullright "_Butterworth" "various Butterworth Fourier filters" { High_low_item = class Menuaction "_High or Low Pass" "highpass/lowpass Butterworth Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; o = Scale "Order" 1 10 2; // call a freq func with our parameters _params f = f (sense.value + 2) o.value fc.value ac.value 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" "ring pass/reject Butterworth Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; rw = Scale "Ring width" 0.01 0.99 0.5; o = Scale "Order" 1 10 2; // call a freq func with our parameters _params f = f (sense.value + 8) o.value fc.value rw.value ac.value 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Band_item = class Menuaction "_Band Pass or Band Reject" "band pass/reject Butterworth Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fcx = Scale "Horizontal frequency cutoff" 0.01 0.99 0.5; fcy = Scale "Vertical frequency cutoff" 0.01 0.99 0.5; r = Scale "Radius" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; o = Scale "Order" 1 10 2; // call a freq func with our parameters _params f = f (sense.value + 14) o.value fcx.value fcy.value r.value ac.value; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } } } Filter_enhance_item = class Menupullright "_Enhance" "various enhancement filters" { Falsecolour_item = class Menuaction "_False Colour" "false colour a mono image" { action x = class _result { _vislevel = 3; o = Scale "Offset" (-255) 255 0; clip = Toggle "Clip colour range" false; _result = map_unary process x { process im = falsecolour mono'' { mono = colour_transform_to Image_type.B_W im; mono' = mono + o; mono'' = (unsigned char) mono', clip = (unsigned char) (mono' & 0xff); } } } } Statistical_diff_item = class Menuaction "_Statistical Difference" "statistical difference of an image" { action x = class _result { _vislevel = 3; wsize = Expression "Window size" 11; tmean = Expression "Target mean" 128; mean_weight = Scale "Mean weight" 0 1 0.8; tdev = Expression "Target deviation" 50; dev_weight = Scale "Deviation weight" 0 1 0.8; border = Toggle "Output image matches input image in size" true; _result = map_unary process x { process in = Image in'' { in' = colour_transform_to Image_type.B_W in.value; fn = im_stdif, border = im_stdif_raw; in'' = fn in' mean_weight.value tmean.expr dev_weight.value tdev.expr wsize.expr wsize.expr; } } } } Hist_equal_item = class Menupullright "_Equalise Histogram" "equalise contrast" { Global_item = class Menuaction "_Global" "equalise contrast globally" { action x = map_unary hist_equalize x; } Local_item = class Menuaction "_Local" "equalise contrast within a roving window" { action x = class _result { _vislevel = 3; window_width = Expression "Window width" 20; window_height = Expression "Window height" 20; _result = map_unary process x { process in = hist_equalize_local window_width.expr window_height.expr in; } } } } } Filter_correlate_item = class Menupullright "Spatial _Correlation" "calculate correlation surfaces" { Correlate_item = class Menuaction "_Correlate" "calculate correlation coefficient" { action a b = map_binary corr a b { corr a b = correlate a b, a.width <= b.width && a.height <= b.height = correlate b a; } } Correlate_fast_item = class Menuaction "_Simple Difference" "calculate sum of squares of differences" { action a b = map_binary corr a b { corr a b = correlate_fast a b, a.width <= b.width && a.height <= b.height = correlate_fast b a; } } } Filter_greyc_item = class Menupullright "_GREYCstoration" "noise-removing filter" { Denoise_item = class Menuaction "Denoise" "Noise-removing filter" { action x = class _result { _vislevel = 3; iterations = Scale "Iterations" 1 5 1; amplitude = Scale "Amplitude" 1 100 40; sharpness = Scale "Sharpness" 0 3 0.9; anisotropy = Scale "Anisotropy" 0 1 0.15; alpha = Scale "Noise scale" 0 5 0.6; sigma = Scale "Geometry regularity" 0 2 1.1; dl = Scale "Spatial integration step" 0 1 0.8; da = Scale "Angular integration step" 0 90 30; gauss_prec = Scale "Precision" 1 10 2; interpolation = Option "Interpolation" ["Nearest-neighbour", "Bilinear", "Runge-Kutta"] 0; fast_approx = Toggle "Fast approximation" true; _result = greyc (to_real iterations) (to_real amplitude) (to_real sharpness) (to_real anisotropy) (to_real alpha) (to_real sigma) (to_real dl) (to_real da) (to_real gauss_prec) (to_real interpolation) (to_real fast_approx) x; } } Enlarge_item = class Menuaction "Enlarge" "Enlarge image" { action x = class _result { _vislevel = 3; scale = Scale "Enlarge" 1 10 3; iterations = Scale "Iterations" 1 5 3; amplitude = Scale "Amplitude" 1 100 20; sharpness = Scale "Sharpness" 0 3 0.2; anisotropy = Scale "Anisotropy" 0 1 0.9; alpha = Scale "Noise scale" 0 5 0.1; sigma = Scale "Geometry regularity" 0 2 1.5; dl = Scale "Spatial integration step" 0 1 0.8; da = Scale "Angular integration step" 0 90 30; gauss_prec = Scale "Precision" 1 10 2; interpolation = Option "Interpolation" ["Nearest-neighbour", "Bilinear", "Runge-Kutta"] 0; fast_approx = Toggle "Fast approximation" true; _result = greyc (to_real iterations) (to_real amplitude) (to_real sharpness) (to_real anisotropy) (to_real alpha) (to_real sigma) (to_real dl) (to_real da) (to_real gauss_prec) (to_real interpolation) (to_real fast_approx) (resize Interpolate_bilinear (to_real scale) (to_real scale) x); } } } #separator Filter_tilt_item = class Menupullright "Ti_lt Brightness" "tilt brightness" { Left_right_item = class Menuaction "_Left to Right" "linear left-right brighten" { action x = class _result { _vislevel = 3; tilt = Scale "Left-right tilt" (-1) 1 0; _result = map_unary tilt_lr x { tilt_lr image = image * scale { ramp = im_fgrey image.width image.height; scale = (ramp - 0.5) * tilt + 1; } } } } Top_bottom_item = class Menuaction "_Top to Bottom" "linear top-bottom brighten" { action x = class _result { _vislevel = 3; tilt = Scale "Top-bottom tilt" (-1) 1 0; _result = map_unary tilt_tb x { tilt_tb image = image * scale { ramp = rot90 (im_fgrey image.height image.width); scale = (ramp - 0.5) * tilt + 1; } } } } sep1 = Menuseparator; Left_right_cos_item = class Menuaction "Cosine Left-_right" "cosine left-right brighten" { action x = class _result { _vislevel = 3; tilt = Scale "Left-right tilt" (-1) 1 0; shift = Scale "Shift by" (-1) 1 0; _result = map_unary tilt_lr x { tilt_lr image = image * scale { ramp = im_fgrey image.width image.height - 0.5 - shift.value; scale = 0.5 * tilt.value * cos (ramp * 180) + 1; } } } } Top_bottom_cos_item = class Menuaction "Cosine Top-_bottom" "cosine top-bottom brighten" { action x = class _result { _vislevel = 3; tilt = Scale "Top-bottom tilt" (-1) 1 0; shift = Scale "Shift by" (-1) 1 0; _result = map_unary tilt_tb x { tilt_tb image = image * scale { ramp = rot90 (im_fgrey image.height image.width) - 0.5 - shift.value; scale = 0.5 * tilt.value * cos (ramp * 180) + 1; } } } } sep2 = Menuseparator; Circular_item = class Menuaction "_Circular" "circular brighten" { action x = class _result { _vislevel = 3; tilt = Scale "Tilt" (-1) 1 0; hshift = Scale "Horizontal shift by" (-1) 1 0; vshift = Scale "Vertical shift by" (-1) 1 0; _result = map_unary tilt_tb x { tilt_tb image = image * scale { hramp = im_fgrey image.width image.height - 0.5 - hshift.value; vramp = rot90 (im_fgrey image.height image.width) - 0.5 - vshift.value; ramp = (hramp ** 2 + vramp ** 2) ** 0.5; scale = 0.5 * tilt.value * cos (ramp * 180) + 1; } } } } } Filter_blend_item = class Menupullright "_Blend" "blend objects together" { Scale_blend_item = class Menuaction "_Scale" "blend two objects together with a scale" { action a b = class _result { _vislevel = 3; p = Scale "Blend position" 0 1 0.5; _result = map_binary process a b { process im1 im2 = im1 * (1 - p.value) + im2 * p.value; } } } Image_blend_item = class Menuaction "_Image" "use an image to blend two objects" { action a b c = class _result { _vislevel = 3; i = Toggle "Invert mask" false; _result = map_trinary process a b c { process a b c = blend condition in1 in2, !i = blend (invert condition) in1 in2 { compare a b // prefer image as the condition = false, !has_image a && has_image b // prefer mono images as the condition = false, has_bands a && has_bands b && get_bands a > 1 && get_bands b == 1 // prefer uchar as the condition = false, has_format a && has_format b && get_format a > Image_format.UCHAR && get_format b == Image_format.UCHAR = true; [condition, in1, in2] = sortc compare [a, b, c]; } } } } Line_blend_item = class Menuaction "_Along Line" "blend between image a and image b along a line" { action a b = class _result { _vislevel = 3; orientation = Option "Orientation" [ "Left to Right", "Top to Bottom" ] 0; blend_position = Scale "Blend position" 0 1 0.5; blend_width = Scale "Blend width" 0 1 0.05; _result = map_binary process a b { process a b = blend (Image condition) b a { output_width = max_pair a.width b.width; output_height = max_pair a.height b.height; range = output_width, orientation == 0 = output_height; blend_position' = floor (range * blend_position.value); blend_width' = 1, blend_width.value == 0 = floor (range * blend_width.value); start = blend_position' - blend_width' / 2; background = (make_xy output_width output_height) >= blend_position'; ramp = im_grey blend_width' output_height, orientation == 0 = rot90 (im_grey blend_width' output_width); condition = insert_noexpand start 0 ramp background?0, orientation == 0 = insert_noexpand 0 start ramp background?1; } } } } Blend_alpha_item = class Menuaction "_Alpha" "blend images with optional alpha channels" { // usage: layerit foreground background // input images must be either 1 or 3 bands, optionally + 1 band // which is used as the alpha channel // rich lott scale_mask im opacity = (unsigned char) (to_real opacity / 255 * im); // to mono intensity = colour_transform_to Image_type.B_W; // All the blend functions // I am grateful to this page // http://www.pegtop.net/delphi/blendmodes/ // for most of the formulae. blend_normal mask opacity fg bg = blend (scale_mask mask opacity) fg bg; blend_iflighter mask opacity fg bg = blend (if fg' > bg' then mask' else 0) fg bg { fg' = intensity fg; bg' = intensity bg; mask' = scale_mask mask opacity ; } blend_ifdarker mask opacity fg bg = blend (if fg' < bg' then mask' else 0) fg bg { fg' = intensity fg ; bg' = intensity bg ; mask' = scale_mask mask opacity ; } blend_multiply mask opacity fg bg = blend (scale_mask mask opacity) fg' bg { fg' = fg / 255 * bg; } blend_add mask opacity fg bg = blend mask fg' bg { fg' = opacity / 255 * fg + bg; } blend_subtract mask opacity fg bg = blend mask fg' bg { fg' = bg - opacity / 255 * fg; } blend_screen mask opacity fg bg = blend mask fg' bg { fg' = 255 - (255 - bg) * (255 - (opacity / 255 * fg)) / 255; } blend_burn mask opacity fg bg = blend mask fg'' bg { // fades to white which has no effect. fg' = (255 - opacity) + opacity * fg / 255; fg'' = 255 - 255 * (255 - bg) / fg'; } blend_softlight mask opacity fg bg = blend mask' fg' bg { mask' = scale_mask mask opacity; fg' = (2 * bg * fg + bg * bg * (1 - 2 * fg / 255)) / 255; } blend_hardlight mask opacity fg bg = blend mask' fg' bg { mask' = scale_mask mask opacity; fg' = 2 / 255 * fg * bg, bg < 129 = 255 - 2 * (255 - bg) * (255 - fg) / 255; } blend_lighten mask opacity fg bg = blend mask' fg' bg { mask' = scale_mask mask opacity; fg' = if bg < fg then fg else bg; } blend_darken mask opacity fg bg = blend mask' fg' bg { mask' = scale_mask mask opacity; fg' = if bg > fg then fg else bg; } blend_dodge mask opacity fg bg = blend mask fg'' bg { // one added to avoid divide by zero fg' = 1 + 255 - (opacity / 255 * fg); fg'' = bg * 255 / fg'; } blend_reflect mask opacity fg bg = blend mask' fg' bg { mask' = scale_mask mask opacity; fg' = bg * bg / (255 - fg); } blend_freeze mask opacity fg bg = blend mask' fg' bg { mask' = scale_mask mask opacity; fg' = 255 - (255 - bg) * (255 - bg) / (1 + fg); } blend_or mask opacity fg bg = bg | (unsigned char) fg' { mask' = scale_mask mask opacity; fg' = fg * mask' / 255; } blend_and mask opacity fg bg = bg & (unsigned char) fg' { mask' = scale_mask mask opacity; fg' = fg * mask' / 255; } // blend types NORMAL = 0; IFLIGHTER = 1; IFDARKER = 2; MULTIPLY = 3; ADD = 4; SUBTRACT = 5; SCREEN = 6; BURN = 7; DODGE = 8; HARDLIGHT = 9; SOFTLIGHT = 10; LIGHTEN = 11; DARKEN = 12; REFLECT = 13; FREEZE = 14; OR = 15; AND = 16; // names we show the user for blend types names = Enum [ [_ "Normal", NORMAL], [_ "If Lighter", IFLIGHTER], [_ "If Darker", IFDARKER], [_ "Multiply", MULTIPLY], [_ "Add", ADD], [_ "Subtract", SUBTRACT], [_ "Screen", SCREEN], [_ "Burn", BURN], [_ "Soft Light", SOFTLIGHT], [_ "Hard Light", HARDLIGHT], [_ "Lighten", LIGHTEN], [_ "Darken", DARKEN], [_ "Dodge", DODGE], [_ "Reflect", REFLECT], [_ "Freeze", FREEZE], [_ "Bitwise OR", OR], [_ "Bitwise AND", AND] ]; // functions we call for each blend type actions = Table [ [NORMAL, blend_normal], [IFLIGHTER, blend_iflighter], [IFDARKER, blend_ifdarker], [MULTIPLY, blend_multiply], [ADD, blend_add], [SUBTRACT, blend_subtract], [SCREEN, blend_screen], [BURN, blend_burn], [SOFTLIGHT, blend_softlight], [HARDLIGHT, blend_hardlight], [LIGHTEN, blend_lighten], [DARKEN, blend_darken], [DODGE, blend_dodge], [REFLECT, blend_reflect], [FREEZE, blend_freeze], [OR, blend_or], [AND, blend_and] ]; // make sure im has an alpha channel (set opaque if it hasn't) put_alpha im = im, im.bands == 4 || im.bands == 2 = im ++ 255; // make sure im has no alpha channel lose_alpha im = extract_bands 0 3 im, im.bands == 4 = im?0, im.bands == 2 = im; // does im have al alpha channel? has_alpha im = im.bands == 2 || im.bands == 4; // get the alpha (set opaque if no alpha) get_alpha img = img'?3, img.bands == 4 = img'?1 { img' = put_alpha img; } // add an alpha ... cast the alpha image to match the main image append_alpha im alpha = im ++ clip2fmt im.format alpha; // makes fg the same size as bg, displaced with u, v pixel offset moveit fg bg u v = insert_noexpand u v fg bg' { bg' = image_new bg.width bg.height fg.bands fg.format fg.coding fg.type 0 0 0; } action bg fg = class _value { _vislevel = 3; method = Option_enum names "Blend mode" "Normal"; opacity = Scale "Opacity" 0 255 255; hmove = Scale "Horizontal move by" (-bg.width) (bg.width) 0; vmove = Scale "Vertical move by" (-bg.height) (bg.height) 0; _value = append_alpha blended merged_alpha, has_alpha bg = blended { // displace and resize fg (need to displace alpha too) fg' = moveit (put_alpha fg) bg hmove vmove; // transform to sRGB fg'' = colour_transform_to Image_type.sRGB (lose_alpha fg'); bg' = colour_transform_to Image_type.sRGB (lose_alpha bg); // alphas merged merged_alpha = get_alpha bg | get_alpha fg'; // blend together blended = (actions.lookup 0 1 method.value_thing) (get_alpha fg') opacity.value fg'' bg'; } } } } Filter_overlay_header_item = class Menuaction "_Overlay" "make a colour overlay of two monochrome images" { action a b = class _result { _vislevel = 3; colour = Option "Colour overlay as" [ _ "Green over Red", _ "Blue over Red", _ "Red over Green", _ "Red over Blue", _ "Blue over Green", _ "Green over Blue" ] 0; _result = map_binary overlay a b { overlay a b = image_set_type Image_type.sRGB [(a' ++ b' ++ 0), (a' ++ 0 ++ b'), (b' ++ a' ++ 0), (b' ++ 0 ++ a'), (0 ++ a' ++ b'), (0 ++ b' ++ a')]?colour { a' = colour_transform_to Image_type.B_W a; b' = colour_transform_to Image_type.B_W b; } } } } Filter_colourize_item = class Menuaction "_Colourize" "use a colour image or patch to tint a mono image" { action a b = class _result { _vislevel = 3; tint = Scale "Tint" 0 1 0.6; _result = map_binary tintit a b { tintit a b = colour_transform_to (get_type colour) colourized' { // get the mono thing first [mono, colour] = sortc (const (is_colour_type @ get_type)) [a, b]; colour' = tint * colour_transform_to Image_type.LAB colour; mono' = colour_transform_to Image_type.B_W mono; colourized = (mono' / 2.55) ++ colour'?1 ++ colour'?2; colourized' = image_set_type Image_type.LAB colourized; } } } } Filter_browse_multiband_item = class Menupullright "Bro_wse" "browse though an image, bitwise or bandwise" { Bandwise_item = class Menuaction "B_andwise" "browse through the bands of a multiband image" { action image = class _result { _vislevel = 3; band = Scale "Band" 0 (image.bands - 1) 0; display = Option "Display as" [ _ "Grey", _ "Green over Red", _ "Blue over Red", _ "Red over Green", _ "Red over Blue", _ "Blue over Green", _ "Green over Blue" ] 0; _result = output { down = (int) band.value; up = down + 1; remainder = band.value - down; fade x a = Vector [0], x == 0 = a * x; a = fade remainder image?up; b = fade (1 - remainder) image?down; output = [ a + b, a ++ b ++ 0, a ++ 0 ++ b, b ++ a ++ 0, b ++ 0 ++ a, 0 ++ a ++ b, 0 ++ b ++ a ] ? display; } } } Bitwise_item = class Menuaction "Bi_twise" "browse through the bits of an image" { action x = class _result { _vislevel = 3; bit = Islider "Bit" 0 (nbits - 1) (nbits - 1) { nbits = x.bits, is_Image x = 8; Islider c f t v = class scope.Scale c f t ((int) v) { Scale = Islider; } } _result = map_unary process x { process im = (im & (0x1 << bit.value)) != 0; } } } } #separator Filter_negative_item = class Menuaction "Photographic _Negative" "swap black and white" { action x = map_unary invert x { invert in = clip2fmt in.format (colour_transform_to (get_type in) rgb') { rgb = colour_transform_to Image_type.sRGB in; rgb' = 255 - rgb; } } } Filter_solarize_item = class Menuaction "_Solarise" "invert colours above a threshold" { action x = class _result { _vislevel = 3; kink = Scale "Kink" 0 1 0.5; _result = map_unary process x { process image = hist_map tab'''' image { // max pixel value for this format mx = Image_format.maxval image.format; // make a LUT ... just 8 and 16 bit tab = im_identity_ushort image.bands mx, image.format == Image_format.USHORT = im_identity image.bands; tab' = Image tab; // make basic ^ shape tab'' = tab' * (1 / kink), tab' < mx * kink = (mx - tab') / (1 - kink); tab''' = clip2fmt image.format tab''; // smooth a bit mask = matrix_blur (tab'''.width / 8); tab'''' = convsep mask tab'''; } } } } Filter_diffuse_glow_item = class Menuaction "_Diffuse Glow" "add a halo to highlights" { action x = class _result { _vislevel = 3; r = Scale "Radius" 0 50 5; highlights = Scale "Highlights" 0 100 95; glow = Scale "Glow" 0 1 0.5; colour = Colour_new_item.Widget_colour_item.action; _result = map_unary process x { process image = image' { mono = (unsigned char) (colour_transform_to Image_type.B_W image); thresh = hist_thresh (highlights.value / 100) mono; mask = mono > thresh; blur = convsep (matrix_gaussian_blur r.value) mask; colour' = colour_transform_to image.type colour; image' = image + colour' * glow * (blur / 255); } } } } Filter_drop_shadow_item = class Menuaction "Drop S_hadow" "add a drop shadow to an image" { action x = class _result { _vislevel = 3; sx = Scale "Horizontal shadow" (-50) 50 5; sy = Scale "Vertical shadow" (-50) 50 5; ss = Scale "Shadow softness" 0 20 5; bg_colour = Expression "Background colour" 255; sd_colour = Expression "Shadow colour" 128; alpha = Toggle "Shadow in alpha channel" false; transparent = Toggle "Zero pixels are transparent" false; _result = map_unary shadow x { shadow image = Image final { blur_size = ss.value * 2 + 1; // matrix we blur with to soften shadows blur_matrix = matrix_gaussian_blur blur_size; matrix_size = blur_matrix.width; matrix_radius = (int) (matrix_size / 2) + 1; // position and size of shadow image in input cods // before and after fuzzing shadow_rect = Rect sx.value sy.value image.width image.height; fuzzy_shadow_rect = shadow_rect.margin_adjust matrix_radius; // size and pos of final image, in input cods final_rect = image.rect.union fuzzy_shadow_rect; // hard part of shadow in output cods shadow_rect' = Rect (shadow_rect.left - final_rect.left) (shadow_rect.top - final_rect.top) shadow_rect.width shadow_rect.height; // make the shadow mask ... true for parts which cast // a shadow mask = (foldr1 bitwise_and @ bandsplit) (image.value != 0), transparent = image_new image.width image.height 1 Image_format.UCHAR Image_coding.NOCODING Image_type.B_W 255 0 0; mask' = embed 0 shadow_rect'.left shadow_rect'.top final_rect.width final_rect.height mask; mask'' = convsep blur_matrix mask'; // use mask to fade between bg and shadow colour mk_background colour = image_new final_rect.width final_rect.height image.bands image.format image.coding image.type colour 0 0; bg_image = mk_background bg_colour.expr; shadow_image = mk_background sd_colour.expr; bg = blend mask'' shadow_image bg_image; // make a full size mask fg_mask = embed 0 (image.rect.left - final_rect.left) (image.rect.top - final_rect.top) final_rect.width final_rect.height mask; // wrap up the input image ... put the shadow colour // around it, so if we are outputting a separate // alpha the shadow colour will be set correctly fg = insert (image.rect.left - final_rect.left) (image.rect.top - final_rect.top) image.value shadow_image; final // make a separate alpha = fg ++ mask'', alpha // paste image over shadow = if fg_mask then fg else bg; } } } } Filter_paint_text_item = class Menuaction "_Paint Text" "paint text into an image" { action x = paint_position, is_Group x = paint_area { paint_area = class _result { _check_args = [ [x, "x", check_Image] ]; _vislevel = 3; text = String "Text to paint" "Hello world!"; font = Fontname "Use font" Workspaces.Preferences.PAINTBOX_FONT; align = Option "Alignment" ["Left", "Centre", "Right"] 0; dpi = Expression "DPI" 300; colour = Expression "Text colour" 255; place = Region x (x.width / 4) (x.height / 4) (x.width / 2) (x.height / 2); _result = insert_noexpand place.left place.top (blend txt' fg place) x { fg = image_new place.width place.height x.bands x.format x.coding x.type colour.expr 0 0; txt = Image (im_text text.value font.value place.width align.value (to_real dpi)); bg = im_black place.width place.height 1; txt' = insert_noexpand 0 0 txt bg; } } paint_position = class _result { _vislevel = 3; text = Pattern_images_item.Text_item.action; colour = Expression "Text colour" 255; position = Option "Position" [ _ "North-west", _ "North", _ "North-east", _ "West", _ "Centre", _ "East", _ "South-west", _ "South", _ "South-east", _ "Specify in pixels" ] 4; left = Expression "Pixels from left" 0; top = Expression "Pixels from top" 0; _result = map_unary paint x { paint image = insert_noexpand x' y' place' image { xr = image.width - text.width; yr = image.height - text.height; x = left.expr, position == 9 = [0, xr / 2, xr]?(position % 3); y = top.expr, position == 9 = [0, yr / 2, yr]?(position / 3); x' = range 0 x (image.width - 1); y' = range 0 y (image.height - 1); w' = range 1 text.width (image.width - x'); h' = range 1 text.height (image.height - y'); place = extract_area x' y' w' h' image; text' = insert_noexpand 0 0 text (im_black w' h' 1); fg = image_new w' h' image.bands image.format image.coding image.type colour.expr 0 0; place' = blend text' fg place; } } } } } nip2-8.7.0/share/nip2/compat/7.24/Histogram.def0000644000175000017500000001452513224651032015570 00000000000000Hist_new_item = class Menupullright "_New" "new histogram" { Hist_item = class Menuaction "Histogram" "make an identity histogram" { action = class _result { _vislevel = 3; d = Option "Depth" ["8 bit", "16 bit"] 0; _result = Plot [] ([im_identity 1, im_identity_ushort 1 65536]?d); } } Hist_new_from_matrix = Matrix_buildlut_item; Hist_from_image_item = class Menuaction "Ta_g Image As Histogram" "set image Type to Histogram" { action x = hist_tag x; } Tone_item = class Menuaction "_Tone Curve" "make a new tone mapping curve" { action = class _result { _vislevel = 3; d = Option "Depth" ["8 bit", "16 bit"] 0; b = Scale "Black point" 0 100 0; w = Scale "White point" 0 100 100; sp = Scale "Shadow point" 0.1 0.3 0.2; mp = Scale "Mid-tone point" 0.4 0.6 0.5; hp = Scale "Highlight point" 0.7 0.9 0.8; sa = Scale "Shadow adjust" (-15) 15 0; ma = Scale "Mid-tone adjust" (-30) 30 0; ha = Scale "Highlight adjust" (-15) 15 0; _result = tone_build fmt b w sp mp hp sa ma ha { fmt = [Image_format.UCHAR, Image_format.USHORT]?d; } } } } Hist_find_item = class Menupullright "_Find" "find a histogram" { Oned_item = class Menuaction "_One Dimension" "for a n-band image, make an n-band 1D histogram" { action x = map_unary hist_find x; } Nd_item = class Menuaction "_Many Dimensions" "for a n-band image, make an n-dimensional histogram" { action x = class _result { _vislevel = 3; // default to something small-ish bins = Expression "Number of bins in each dimension" 8; _result = map_unary process x { process in = hist_find_nD bins in; } } } Indexed_item = class Menuaction "_Indexed" "use a 1-band index image to pick bins for an n-band image" { action x y = map_binary map x y { map a b = hist_find_indexed index im { [im, index] = sortc (const is_index) [a, b]; is_index x = has_image x && b == 1 && (f == Image_format.UCHAR || f == Image_format.USHORT) { im = get_image x; b = get_bands x; f = get_format x; } } } } } Hist_map_item = class Menuaction "_Map" "map an image through a histogram" { action x y = map_binary map x y { map a b = hist_map hist im { [im, hist] = sortc (const is_hist) [a, b]; } } } Hist_eq_item = Filter_enhance_item.Hist_equal_item; #separator Hist_cum_item = class Menuaction "_Cumulativise" "form cumulative histogram" { action x = map_unary hist_cum x; } Hist_diff_item = class Menuaction "_Differentiate" "find point-to-point differences (inverse of Cumulativise)" { action x = map_unary hist_diff x; } Hist_norm_item = class Menuaction "N_ormalise" "normalise a histogram" { action x = map_unary hist_norm x; } Hist_match_item = class Menuaction "Ma_tch" "find LUT which will match first histogram to second" { action in ref = map_binary hist_match in ref; } Hist_zerox_item = class Menuaction "_Zero Crossings" "find zero crossings" { action x = class _result { _vislevel = 3; edge = Option "Direction" [ "Positive-going", "Negative-going" ] 0; _result = map_unary (zerox (if edge == 0 then -1 else 1)) x; } } #separator Hist_profile_item = class Menuaction "Find _Profile" "search from image edges for non-zero pixels" { action x = class _result { _vislevel = 3; edge = Option "Search from" [ "Top edge down", "Left edge to right", "Bottom edge up", "Right edge to left" ] 2; _result = map_unary profile x { profile image = (Plot_histogram @ hist_tag) [ profilemb 0 image.value, profilemb 1 image.value, profilemb 0 (fliptb image.value), profilemb 1 (fliplr image.value) ]?edge; // im_profile only does 1 band images :-( profilemb d = bandjoin @ map (converse im_profile d) @ bandsplit; } } } Hist_project_item = class Menuaction "Find Pro_jections" "find horizontal and vertical projections" { action x = class { _vislevel = 2; _result = map_unary project x; // extract the result ... could be a group extr n = Plot_histogram _result?n, is_list _result = Group (map (Plot_histogram @ converse subscript n) _result.value); horizontal = extr 0; vertical = extr 1; centre = (gravity horizontal, gravity vertical); } } #separator Hist_graph_item = class Menuaction "P_lot Slice" "plot a slice along a guide or arrow" { action x = class _value { _vislevel = 3; width = Scale "Width" 1 40 1; displace = Scale "Horizontal displace" (-50) 50 0; vdisplace = Scale "Vertical displace" (-50) 50 0; _value = map_unary graph x { graph arrow = hist_tag area' { area = extract_arrow displace.value vdisplace.value width.value arrow; // squish vertically to get an average area' = resize Interpolate_bilinear 1 (1 / width.value) area; } } } } Extract_arrow_item = class Menuaction "Extract _Arrow" "extract the area around an arrow" { action x = class _value { _vislevel = 3; width = Scale "Width" 1 40 1; displace = Scale "Horizontal displace" (-50) 50 0; vdisplace = Scale "Vertical displace" (-50) 50 0; _value = map_unary (extract_arrow displace.value vdisplace.value width.value) x; } } Hist_plot_item = class Menuaction "Plot _Object" "plot an object as a bar, point or line graph" { action x = class _result { _vislevel = 3; format = Option_enum Plot_format.names "Format" "YYYY"; style = Option_enum Plot_style.names "Style" "Line"; auto = Toggle "Auto Range" true; xmin = Expression "X range minimum" 0; xmax = Expression "X range maximum" 1; ymin = Expression "Y range minimum" 0; ymax = Expression "Y range maximum" 1; _result = Plot options (image x) { options = [$style => style.value, $format => format.value] ++ range; range = [], auto = [$xmin => xmin.expr, $xmax => xmax.expr, $ymin => ymin.expr, $ymax => ymax.expr]; image x = image (extract_arrow 0 0 1 x), is_Arrow x = get_image x, has_image x = x2b im, b == 1 = im { im = get_image (to_image x); w = get_width im; h = get_height im; b = get_bands im; // matrix to image makes a 1-band mxn image // we need to put columns into bands x2b im = bandjoin (map extract_col [0 .. w - 1]) { extract_col x = extract_area x 0 1 h im; } } } } } nip2-8.7.0/share/nip2/compat/7.24/Object.def0000644000175000017500000000222013224651032015026 00000000000000Object_duplicate_item = class Menuaction "_Duplicate" "take a copy of an object" { action x = map_unary copy x; } #separator Object_list_to_group_item = class Menuaction "_List to Group" "turn a list of objects into a group" { action x = to_group x; } Object_group_to_list_item = class Menuaction "_Group to List" "turn a group into a list of objects" { action x = to_list x; } #separator Object_break_item = class Menuaction "_Break Up Object" "break an object into a list of components" { action x = map_unary break x { break x = bandsplit x, is_Image x = map Vector x.value, is_Matrix x = x.value, is_Vector x || is_Real x = error "Breakup: not Image/Matrix/Vector/Real"; } } Object_assemble_item = class Menuaction "_Assemble Objects" "assemble a list (or group) of objects into a single object" { action x = map_unary ass x { ass x = [], x == [] = Vector x, is_real_list x = Matrix x, is_matrix x = bandjoin x, is_listof is_Image x = Vector (map get_value x), is_listof is_Real x = Matrix (map get_value x), is_listof is_Vector x = error "Assemble: not list of Image/Vector/Real/image/real"; } } nip2-8.7.0/share/nip2/compat/7.24/Makefile.in0000644000175000017500000003675113350464104015227 00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = share/nip2/compat/7.24 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(startdir)" DATA = $(start_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BISON = @BISON@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DLLWRAP = @DLLWRAP@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FFTW3_CFLAGS = @FFTW3_CFLAGS@ FFTW3_LIBS = @FFTW3_LIBS@ FGREP = @FGREP@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_LIBS = @GSL_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ IP_CFLAGS = @IP_CFLAGS@ IP_LIBS = @IP_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBGOFFICE_CFLAGS = @LIBGOFFICE_CFLAGS@ LIBGOFFICE_LIBS = @LIBGOFFICE_LIBS@ LIBGSF_CFLAGS = @LIBGSF_CFLAGS@ LIBGSF_LIBS = @LIBGSF_LIBS@ LIBGVC_CFLAGS = @LIBGVC_CFLAGS@ LIBGVC_LIBS = @LIBGVC_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ 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@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ REQUIRED_PACKAGES_CFLAGS = @REQUIRED_PACKAGES_CFLAGS@ REQUIRED_PACKAGES_LIBS = @REQUIRED_PACKAGES_LIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOP_SRCDIR = @TOP_SRCDIR@ UPDATE_DESKTOP_DATABASE = @UPDATE_DESKTOP_DATABASE@ UPDATE_MIME_DATABASE = @UPDATE_MIME_DATABASE@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XDG_OPEN = @XDG_OPEN@ XGETTEXT = @XGETTEXT@ 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@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ startdir = $(pkgdatadir)/compat/7.24 start_DATA = \ Math.def \ Image.def \ Colour.def \ Tasks.def \ Object.def \ Filter.def \ Matrix.def \ Widgets.def \ Histogram.def \ _joe_extra.def \ _joe_utilities.def \ _convert.def \ _generate.def \ _list.def \ _predicate.def \ _stdenv.def \ _Object.def \ _types.def EXTRA_DIST = $(start_DATA) all: all-am .SUFFIXES: $(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) --foreign share/nip2/compat/7.24/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign share/nip2/compat/7.24/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): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-startDATA: $(start_DATA) @$(NORMAL_INSTALL) @list='$(start_DATA)'; test -n "$(startdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(startdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(startdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(startdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(startdir)" || exit $$?; \ done uninstall-startDATA: @$(NORMAL_UNINSTALL) @list='$(start_DATA)'; test -n "$(startdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(startdir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: 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 check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(startdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-startDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-startDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-startDATA install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags-am uninstall uninstall-am uninstall-startDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: nip2-8.7.0/share/nip2/compat/7.24/Matrix.def0000644000175000017500000002060713224651032015075 00000000000000 Matrix_build_item = class Menupullright "_New" "make a new matrix of some sort" { Plain_item = class Menuaction "_Plain" "make a new plain matrix widget" { action = Matrix (identity_matrix 3); } Convolution_item = class Menuaction "_Convolution" "make a new convolution matrix widget" { action = Matrix_con 1 0 [[0, 0, 0], [0, 1, 0], [0, 0, 0]]; } Recombination_item = class Menuaction "_Recombination" "make a new recombination matrix widget" { action = Matrix_rec (identity_matrix 3); } Morphology_item = class Menuaction "_Morphology" "make a new morphology matrix widget" { action = Matrix_mor [[0, 0, 0], [0, 255, 0], [0, 0, 0]]; } sep1 = Menuseparator; Matrix_gaussian_item = class Menuaction "_Gaussian" "make a gaussian matrix" { action = class _result { _vislevel = 3; s = Scale "Sigma" 0.001 10 1; ma = Scale "Minimum amplitude" 0 1 0.2; integer = Toggle "Integer" false; _result = fn s.value ma.value { fn = im_gauss_imask, integer = im_gauss_dmask; } } } Matrix_laplacian_item = class Menuaction "_Laplacian" "make the Laplacian of a Gaussian matrix" { action = class _result { _vislevel = 3; s = Scale "Sigma" 0.001 10 1.5; ma = Scale "Minimum amplitude" 0 1 0.1; integer = Toggle "Integer" false; _result = fn s.value ma.value { fn = im_log_imask, integer = im_log_dmask; } } } } Matrix_to_matrix_item = class Menuaction "Con_vert to Matrix" "convert anything to a matrix" { action x = to_matrix x; } #separator Matrix_extract_item = class Menupullright "_Extract" "extract rows or columns from a matrix" { Rows_item = class Menuaction "_Rows" "extract rows" { action x = class _result { _vislevel = 3; first = Expression "Extract from row" 0; number = Expression "Extract this many rows" 1; _result = map_unary process x { process x = extract_area 0 first (get_width x) number x; } } } Columns_item = class Menuaction "_Columns" "extract columns" { action x = class _result { _vislevel = 3; first = Expression "Extract from column" 0; number = Expression "Extract this many columns" 1; _result = map_unary process x { process mat = extract_area first 0 number (get_height x) x; } } } Area_item = class Menuaction "_Area" "extract area" { action x = class _result { _vislevel = 3; left = Expression "First column" 0; top = Expression "First row" 0; width = Expression "Number of columns" 1; height = Expression "Number of rows" 1; _result = map_unary process x { process mat = extract_area left top width height x; } } } Diagonal_item = class Menuaction "_Diagonal" "extract diagonal" { action x = class _result { _vislevel = 3; which = Option "Extract" [ "Leading Diagonal", "Trailing Diagonal" ] 0; _result = map_unary process x { process mat = mat.Matrix_base (map2 extr [0..] mat.value), which == 0 = mat.Matrix_base (map2 extr [mat.width - 1, mat.width - 2 .. 0] mat.value); extr n l = [l?n]; } } } } Matrix_insert_item = class Menupullright "_Insert" "insert rows or columns into a matrix" { // make a new 8-bit uchar image of wxh with pixels set to p // use to generate new cells newim w h p = image_new w h 1 Image_format.UCHAR Image_coding.NOCODING Image_type.B_W p 0 0; Rows_item = class Menuaction "_Rows" "insert rows" { action x = class _result { _vislevel = 3; first = Expression "Insert at row" 0; number = Expression "Insert this many rows" 1; item = Expression "Set new cells to" 0; _result = map_unary process x { process x = foldl1 join_tb (concat [top, new, bottom]) { top = [extract_area 0 0 w f x], f > 0 = []; new = [(if is_Matrix x then to_matrix else id) (newim w number item.expr)]; bottom = [extract_area 0 f w (h - f) x], f < h = []; f = to_real first; w = get_width x; h = get_height x; } } } } Columns_item = class Menuaction "_Columns" "insert columns" { action x = class _result { _vislevel = 3; first = Expression "Insert at column" 0; number = Expression "Insert this many columns" 1; item = Expression "Set new cells to" 0; _result = map_unary process x { process x = foldl1 join_lr (concat [left, new, right]) { left = [extract_area 0 0 f h x], f > 0 = []; new = [(if is_Matrix x then to_matrix else id) (newim number h item.expr)]; right = [extract_area f 0 (w - f) h x], f < w = []; f = to_real first; w = get_width x; h = get_height x; } } } } } Matrix_delete_item = class Menupullright "_Delete" "delete rows or columns from a matrix" { // remove number of items, starting at first delete first number l = take (to_real first) l ++ drop (to_real first + to_real number) l; Rows_item = class Menuaction "_Rows" "delete rows" { action x = class _result { _vislevel = 3; first = Expression "Delete from row" 0; number = Expression "Delete this many rows" 1; _result = map_unary process x { process x = foldl1 join_tb (concat [top, bottom]) { top = [extract_area 0 0 w f x], f > 0 = []; bottom = [extract_area 0 b w (h - b) x], b < h = []; f = to_real first; n = to_real number; b = f + n; w = get_width x; h = get_height x; } } } } Columns_item = class Menuaction "_Columns" "delete columns" { action x = class _result { _vislevel = 3; first = Expression "Delete from column" 0; number = Expression "Delete this many columns" 1; _result = map_unary process x { process x = foldl1 join_lr (concat [left, right]) { left = [extract_area 0 0 f h x], f > 0 = []; right = [extract_area r 0 (w - r) h x], r < w = []; f = to_real first; n = to_real number; r = f + n; w = get_width x; h = get_height x; } } } } } Matrix_join = class Menupullright "_Join" "join two matricies" { Left_right_item = class Menuaction "_Left to Right" "join two matricies left-right" { action a b = map_binary join_lr a b; } Top_bottom_item = class Menuaction "_Top to Bottom" "joiin two matricies top-bottom" { action a b = map_binary join_tb a b; } } Matrix_rotate_item = class Menupullright "_Rotate" "clockwise rotation by fixed angles" { rot90 = Image_transform_item.Rotate_item.Fixed_item.Rot90_item; rot180 = Image_transform_item.Rotate_item.Fixed_item.Rot180_item; rot270 = Image_transform_item.Rotate_item.Fixed_item.Rot270_item; Matrix_rot45_item = class Menuaction "_45 Degrees" "45 degree rotate (square, odd-length-sides only)" { action x = map_unary rot45 x; } } Matrix_flip_item = Image_transform_item.Flip_item; #separator Matrix_invert_item = class Menuaction "In_vert" "calculate inverse matrix" { action x = map_unary (converse power (-1)) x; } Matrix_transpose_item = class Menuaction "_Transpose" "swap rows and columns" { action x = map_unary transpose x; } #separator Matrix_plot_scatter_item = class Menuaction "_Plot Scatter" "plot a scatter graph of a matrix of [x,y1,y2,..] coordinates" { action x = class _result { _check_args = [ [x, "x", check_Matrix] ]; _vislevel = 3; auto = Toggle "Auto Range" true; xmin = Expression "X range minimum" 0; xmax = Expression "X range maximum" 1; ymin = Expression "Y range minimum" 0; ymax = Expression "Y range maximum" 1; _result = Plot options ((x2b @ get_image @ to_image) x) { options = [$style => Plot_style.POINT, $format => Plot_format.XYYY] ++ range; range = [], auto = [$xmin => xmin.expr, $xmax => xmax.expr, $ymin => ymin.expr, $ymax => ymax.expr]; // matrix to image makes a 1-band mxn image // we need to put columns into bands x2b im = bandjoin (map extract_col [0 .. w - 1]) { w = get_width im; h = get_height im; b = get_bands im; extract_col x = extract_area x 0 1 h im; } } } } Matrix_plot_item = Hist_plot_item; Matrix_buildlut_item = class Menuaction "_Build LUT From Scatter" "make a lookup table from a matrix of [x,y1,y2..] coordinates" { action x = class _result { _check_args = [ [x, "x", check_Matrix] ]; _result = buildlut x; } } nip2-8.7.0/share/nip2/compat/7.24/_convert.def0000644000175000017500000004437013224651032015453 00000000000000 /* Try to make a Matrix ... works for Vector/Image/Real, plus image/real */ to_matrix x = to_matrix x.expr, is_Expression x = x, is_Matrix x = oo_unary_function to_matrix_op x, is_class x = tom x { to_matrix_op = Operator "to_matrix" tom Operator_type.COMPOUND false; tom x = Matrix (itom x), is_image x = Matrix [[x]], is_real x = Matrix [x], is_real_list x = Matrix x, is_matrix x = error (_ "bad arguments to " ++ "to_matrix"); itom i = (im_vips2mask ((double) i)).value, is_image i = error (_ "not image"); } /* Try to make an Image ... works for Vector/Matrix/Real, plus image/real * Special case for Colour ... pull out the colour_space and set Type in the * image. */ to_image x = to_image x.expr, is_Expression x = x, is_Image x = Image (image_set_type (Image_type.colour_spaces.lookup 0 1 x.colour_space) (mtoi [x.value])), is_Colour x = oo_unary_function to_image_op x, is_class x = toi x { to_image_op = Operator "to_image" toi Operator_type.COMPOUND false; toi x = Image x, is_image x = Image (mtoi [[x]]), is_real x = Image (mtoi [x]), is_real_list x = Image (mtoi x), is_matrix x = error (_ "bad arguments to " ++ "to_image"); // [[real]] -> image mtoi m = im_mask2vips (Matrix m), width != 3 = joinup (im_mask2vips (Matrix m)) { width = len m?0; height = len m; joinup i = b1 ++ b2 ++ b3 { b1 = extract_area 0 0 1 height i; b2 = extract_area 1 0 1 height i; b3 = extract_area 2 0 1 height i; } } } // like to_image, but we do 1x1 pixel + x, then embed it up // always make an unwrapped image for speed ... this gets used by ifthenelse // and stuff like that // format can be NULL, meaning set format from x to_image_size width height bands format x = x, is_image x = x.value, is_Image x = im'' { // we want x to set the target format if we don't have one, so we // can't use image_new im = im_black 1 1 bands + x; im' = clip2fmt format im, format != NULL = im; im'' = embed 1 0 0 width height im'; } /* Try to make a Colour. */ to_colour x = to_colour x.expr, is_Expression x = x, is_Colour x = to_colour (extract_area x.left x.top 1 1 x.image), is_Mark x = oo_unary_function to_colour_op x, is_class x = toc x { to_colour_op = Operator "to_colour" toc Operator_type.COMPOUND false; toc x = Colour (colour_space (get_type x)) (map mean (bandsplit (get_image x))), has_image x && has_type x = Colour "sRGB" [x, x, x], is_real x // since Colour can't do mono = Colour "sRGB" x, is_real_list x && is_list_len 3 x = map toc x, is_matrix x = error (_ "bad arguments to " ++ "to_colour"); colour_space type = table.get_name type, table.has_name type = error (_ "unable to make Colour from " ++ table.get_name type ++ _ " image") { table = Image_type.colour_spaces; } } /* Try to make a real. (not a Real!) */ to_real x = to_real x.expr, is_Expression x = oo_unary_function to_real_op x, is_class x = tor x { to_real_op = Operator "to_real" tor Operator_type.COMPOUND false; tor x = x, is_real x = abs x, is_complex x = 1, is_bool x && x = 0, is_bool x && !x = error (_ "bad arguments to " ++ "to_real"); } /* Try to make a list ... ungroup, basically. We remove the innermost layer of * Groups. */ to_list x = x.value, is_Group x && !contains_Group x.value = Group (map to_list x.value), is_Group x = x; /* Try to make a group. The innermost list objects become Group()'d. */ to_group x = Group x, is_list x && !contains_Group x = Group (map to_group x.value), is_Group x = x; /* Parse a positive integer. */ parse_pint l = foldl acc 0 l { acc sofar ch = sofar * 10 + parse_c ch; /* Turn a char digit to a number. */ parse_c ch = error (_ "not a digit"), !is_digit ch = (int) ch - (int) '0'; } /* Parse an integer, with an optional sign character. */ parse_int l = error (_ "badly formed number"), !is_list_len 2 parts = sign * n { parts = splitpl [member "+-", is_digit] l; n = parse_pint parts?1; sign = 1, parts?0 == [] || parts?0 == "+" = -1; } /* Parse a float. * [+-]?[0-9]*([.][0-9]*)?(e[0-9]+)? */ parse_float l = err, !is_list_len 4 parts = (ipart + fpart) * 10 ** exp { err = error (_ "badly formed number"); parts = splitpl [ member "+-0123456789", member ".0123456789", member "eE", member "+-0123456789" ] l; ipart = parse_int parts?0; fpart = 0, parts?1 == []; = err, parts?1?0 != '.' = parse_pint (tl parts?1) / 10 ** (len parts?1 - 1); exp = 0, parts?2 == [] && parts?3 == [] = err, parts?2 == [] = parse_int parts?3; } /* Parse a time in "hh:mm:ss" into seconds. We could do this in one line :) = (sum @ map2 multiply (iterate (multiply 60) 1) @ reverse @ map parse_pint @ map (subscript (splitpl [is_digit, equal ':', is_digit, equal ':', is_digit] l))) [0,2,4]; but it's totally unreadable. */ parse_time l = error (_ "badly formed time"), !is_list_len 5 parts = s + 60 * m + 60 * 60 * h { parts = splitpl [is_digit, equal ':', is_digit, equal ':', is_digit] l; h = parse_int parts?0; m = parse_int parts?2; s = parse_int parts?4; } /* matrix to convert D65 XYZ to D50 XYZ ... direct conversion, found by * measuring a macbeth chart in D50 and D65 and doing a LMS to get a matrix */ D652D50_direct = Matrix [[ 1.13529, -0.0604663, -0.0606321 ], [ 0.0975399, 0.935024, -0.0256156 ], [ -0.0336428, 0.0414702, 0.994135 ]]; D502D65_direct = D652D50_direct ** -1; /* Convert normalised XYZ to bradford RGB. */ XYZ2RGBbrad = Matrix [[0.8951, 0.2664, -0.1614], [-0.7502, 1.7135, 0.0367], [0.0389, -0.0685, 1.0296]]; /* Convert bradford RGB to normalised XYZ. */ RGBbrad2XYZ = XYZ2RGBbrad ** -1; D93_whitepoint = Vector [89.7400, 100, 130.7700]; D75_whitepoint = Vector [94.9682, 100, 122.5710]; D65_whitepoint = Vector [95.0470, 100, 108.8827]; D55_whitepoint = Vector [95.6831, 100, 92.0871]; D50_whitepoint = Vector [96.4250, 100, 82.4680]; A_whitepoint = Vector [109.8503, 100, 35.5849]; // 2856K B_whitepoint = Vector [99.0720, 100, 85.2230]; // 4874K C_whitepoint = Vector [98.0700, 100, 118.2300]; // 6774K E_whitepoint = Vector [100, 100, 100]; // ill. free D3250_whitepoint = Vector [105.6590, 100, 45.8501]; Whitepoints = Enum [ $D93 => D93_whitepoint, $D75 => D75_whitepoint, $D65 => D65_whitepoint, $D55 => D55_whitepoint, $D50 => D50_whitepoint, $A => A_whitepoint, $B => B_whitepoint, $C => C_whitepoint, $E => E_whitepoint, $D3250 => D3250_whitepoint ]; /* Convert D50 XYZ to D65 using the bradford chromatic adaptation approx. */ im_D502D65 xyz = xyz''' { xyz' = xyz / D50_whitepoint; rgb = recomb XYZ2RGBbrad xyz'; // move white in bradford RGB rgb' = rgb / Vector [0.94, 1.02, 1.33]; xyz'' = recomb RGBbrad2XYZ rgb'; // back to D65 xyz''' = xyz'' * D65_whitepoint; } /* Convert D65 XYZ to D50 using the bradford approx. */ im_D652D50 xyz = xyz''' { xyz' = xyz / D65_whitepoint; rgb = recomb XYZ2RGBbrad xyz'; // move white in bradford RGB rgb' = rgb * Vector [0.94, 1.02, 1.33]; xyz'' = recomb RGBbrad2XYZ rgb'; xyz''' = xyz'' * D50_whitepoint; } /* Convert D50 XYZ to Lab. */ im_D50XYZ2Lab xyz = im_XYZ2Lab_temp xyz D50_whitepoint.value?0 D50_whitepoint.value?1 D50_whitepoint.value?2; im_D50Lab2XYZ lab = im_Lab2XYZ_temp lab D50_whitepoint.value?0 D50_whitepoint.value?1 D50_whitepoint.value?2; /* ... and mono conversions */ im_sRGB2mono in = (image_set_type Image_type.B_W @ clip2fmt (get_header "BandFmt" in) @ recomb (Matrix [[.3, .6, .1]])) in; im_mono2sRGB in = image_set_type Image_type.sRGB (in ++ in ++ in); im_sRGB2Lab = im_XYZ2Lab @ im_sRGB2XYZ; im_Lab2sRGB = im_XYZ2sRGB @ im_Lab2XYZ; // from the 16 bit RGB and GREY formats im_1628 x = im_clip (x >> 8); im_162f x = x / 256; im_8216 x = (im_clip2us x) << 8; im_f216 x = im_clip2us (x * 256); im_RGB162GREY16 in = (image_set_type Image_type.GREY16 @ clip2fmt (get_header "BandFmt" in) @ recomb (Matrix [[.3, .6, .1]])) in; im_GREY162RGB16 in = image_set_type Image_type.RGB16 (in ++ in ++ in); /* apply a func to an image ... make it 1 or 3 bands, and reapply other bands * on the way out. Except if it's LABPACK. */ colour_apply fn x = fn x, b == 1 || b == 3 || c == Image_coding.LABPACK = x'' { b = get_bands x; c = get_coding x; first = extract_bands 0 3 x, b > 3 = extract_bands 0 1 x; tail = extract_bands 3 (b - 3) x, b > 3 = extract_bands 1 (b - 1) x; x' = fn first; x'' = x' ++ clip2fmt (get_format x') tail; } /* Any 1-ary colour op, applied to Vector/Image/Matrix or image */ colour_unary fn x = oo_unary_function colour_op x, is_class x = colour_apply fn x, is_image x = colour_apply fn [x], is_real x = error (_ "bad arguments to " ++ "colour_unary") { // COMPOUND_REWRAP ... signal to the colour class to go to image and // back colour_op = Operator "colour_unary" colour_object Operator_type.COMPOUND_REWRAP false; colour_object x = colour_real_list x, is_real_list x = map colour_real_list x, is_matrix x = colour_apply fn x, is_image x = error (_ "bad arguments to " ++ "colour_unary"); colour_real_list l = (to_matrix (fn (float) (to_image (Vector l)).value)).value?0; } /* Any symmetric 2-ary colour op, applied to Vector/Image/Matrix or image ... * name is op name for error messages etc. */ colour_binary name fn x y = oo_binary_function colour_op x y, is_class x = oo_binary'_function colour_op x y, is_class y = fn x y, is_image x && is_image y = error (_ "bad arguments to " ++ name) { colour_op = Operator name colour_object Operator_type.COMPOUND_REWRAP true; colour_object x y = fn x y, is_image x && is_image y = colour_real_list fn x y, is_real_list x && is_real_list y = map (colour_real_list fn x) y, is_real_list x && is_matrix y = map (colour_real_list (converse fn) y) x, is_matrix x && is_real_list y = map2 (colour_real_list fn) x y, is_matrix x && is_matrix y = error (_ "bad arguments to " ++ name); colour_real_list fn l1 l2 = (to_matrix (fn i1 i2)).value?0 { i1 = (float) (to_image (Vector l1)).value; i2 = (float) (to_image (Vector l2)).value; } } _colour_conversion_table = [ /* Lines are [space-from, space-to, conversion function]. Could do * this as a big array, but table lookup feels safer. */ [B_W, B_W, image_set_type B_W], [B_W, XYZ, im_sRGB2XYZ @ im_mono2sRGB @ im_clip], [B_W, YXY, im_XYZ2Yxy @ im_sRGB2XYZ @ im_mono2sRGB @ im_clip], [B_W, LAB, im_sRGB2Lab @ im_mono2sRGB @ im_clip], [B_W, LCH, im_Lab2LCh @ im_sRGB2Lab @ im_mono2sRGB @ im_clip], [B_W, UCS, im_XYZ2UCS @ im_sRGB2XYZ @ im_mono2sRGB @ im_clip], [B_W, RGB, im_XYZ2disp @ im_sRGB2XYZ @ im_mono2sRGB @ im_clip], [B_W, sRGB, im_mono2sRGB @ im_clip], [B_W, RGB16, image_set_type RGB16 @ im_8216 @ im_mono2sRGB], [B_W, GREY16, image_set_type GREY16 @ im_8216], [B_W, LABQ, im_Lab2LabQ @ im_sRGB2Lab @ im_mono2sRGB @ im_clip], [B_W, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_sRGB2Lab @ im_mono2sRGB @ im_clip], [XYZ, B_W, im_sRGB2mono @ im_XYZ2sRGB @ im_clip2f], [XYZ, XYZ, image_set_type XYZ], [XYZ, YXY, im_XYZ2Yxy @ im_clip2f], [XYZ, LAB, im_XYZ2Lab @ im_clip2f], [XYZ, LCH, im_Lab2LCh @ im_XYZ2Lab], [XYZ, UCS, im_XYZ2UCS @ im_clip2f], [XYZ, RGB, im_XYZ2disp @ im_clip2f], [XYZ, sRGB, im_XYZ2sRGB @ im_clip2f], [XYZ, LABQ, im_Lab2LabQ @ im_XYZ2Lab @ im_clip2f], [XYZ, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_XYZ2Lab @ im_clip2f], [YXY, B_W, im_sRGB2mono @ im_XYZ2sRGB @ im_Yxy2XYZ @ im_clip2f], [YXY, XYZ, im_Yxy2XYZ @ im_clip2f], [YXY, YXY, image_set_type YXY], [YXY, LAB, im_XYZ2Lab @ im_Yxy2XYZ @ im_clip2f], [YXY, LCH, im_Lab2LCh @ im_XYZ2Lab @ im_Yxy2XYZ @ im_clip2f], [YXY, UCS, im_XYZ2UCS @ im_Yxy2XYZ @ im_clip2f], [YXY, RGB, im_XYZ2disp @ im_Yxy2XYZ @ im_clip2f], [YXY, sRGB, im_XYZ2sRGB @ im_Yxy2XYZ @ im_clip2f], [YXY, LABQ, im_Lab2LabQ @ im_XYZ2Lab @ im_Yxy2XYZ @ im_clip2f], [YXY, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_XYZ2Lab @ im_Yxy2XYZ @ im_clip2f], [LAB, B_W, im_sRGB2mono @ im_Lab2sRGB @ im_Lab2XYZ @ im_clip2f], [LAB, XYZ, im_Lab2XYZ @ im_clip2f], [LAB, YXY, im_XYZ2Yxy @ im_Lab2XYZ @ im_clip2f], [LAB, LAB, image_set_type LAB @ im_clip2f], [LAB, LCH, im_Lab2LCh @ im_clip2f], [LAB, UCS, im_Lab2UCS @ im_clip2f], [LAB, RGB, im_Lab2disp @ im_clip2f], [LAB, sRGB, im_Lab2sRGB @ im_clip2f], [LAB, LABQ, im_Lab2LabQ @ im_clip2f], [LAB, LABS, im_Lab2LabS @ im_clip2f], [LCH, B_W, im_sRGB2mono @ im_Lab2sRGB @ im_LCh2Lab @ im_clip2f], [LCH, XYZ, im_Lab2XYZ @ im_LCh2Lab @ im_clip2f], [LCH, YXY, im_XYZ2Yxy @ im_Lab2sRGB @ im_LCh2Lab @ im_clip2f], [LCH, LAB, im_LCh2Lab @ im_clip2f], [LCH, LCH, image_set_type LCH], [LCH, UCS, im_LCh2UCS @ im_clip2f], [LCH, RGB, im_Lab2disp @ im_LCh2Lab @ im_clip2f], [LCH, sRGB, im_Lab2sRGB @ im_LCh2Lab @ im_clip2f], [LCH, LABQ, im_Lab2LabQ @ im_LCh2Lab @ im_clip2f], [LCH, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_LCh2Lab @ im_clip2f], [UCS, B_W, im_sRGB2mono @ im_XYZ2sRGB @ im_UCS2XYZ @ im_clip2f], [UCS, XYZ, im_UCS2XYZ @ im_clip2f], [UCS, YXY, im_XYZ2Yxy @ im_Lab2XYZ @ im_UCS2Lab @ im_clip2f], [UCS, LAB, im_UCS2Lab @ im_clip2f], [UCS, LCH, im_UCS2LCh @ im_clip2f], [UCS, UCS, image_set_type UCS], [UCS, RGB, im_Lab2disp @ im_UCS2Lab @ im_clip2f], [UCS, sRGB, im_Lab2sRGB @ im_UCS2Lab @ im_clip2f], [UCS, LABQ, im_Lab2LabQ @ im_UCS2Lab @ im_clip2f], [UCS, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_UCS2Lab @ im_clip2f], [RGB, B_W, im_sRGB2mono @ im_XYZ2sRGB @ im_disp2XYZ @ im_clip], [RGB, XYZ, im_disp2XYZ @ im_clip], [RGB, YXY, im_XYZ2Yxy @ im_disp2XYZ @ im_clip], [RGB, LAB, im_disp2Lab @ im_clip], [RGB, LCH, im_Lab2LCh @ im_disp2Lab @ im_clip], [RGB, UCS, im_Lab2UCS @ im_disp2Lab @ im_clip], [RGB, RGB, image_set_type RGB], [RGB, sRGB, im_XYZ2sRGB @ im_disp2XYZ @ im_clip], [RGB, RGB16, image_set_type RGB16 @ im_8216], [RGB, GREY16, image_set_type GREY16 @ im_8216 @ im_sRGB2mono], [RGB, LABQ, im_Lab2LabQ @ im_disp2Lab @ im_clip], [RGB, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_disp2Lab @ im_clip], [sRGB, B_W, im_sRGB2mono], [sRGB, XYZ, im_sRGB2XYZ @ im_clip], [sRGB, YXY, im_XYZ2Yxy @ im_sRGB2XYZ @ im_clip], [sRGB, LAB, im_sRGB2Lab @ im_clip], [sRGB, LCH, im_Lab2LCh @ im_sRGB2Lab @ im_clip], [sRGB, UCS, im_XYZ2UCS @ im_sRGB2XYZ @ im_clip], [sRGB, RGB, im_XYZ2disp @ im_sRGB2XYZ @ im_clip], [sRGB, sRGB, image_set_type sRGB], [sRGB, RGB16, image_set_type RGB16 @ im_8216], [sRGB, GREY16, image_set_type GREY16 @ im_8216 @ im_sRGB2mono], [sRGB, LABQ, im_Lab2LabQ @ im_sRGB2Lab @ im_clip], [sRGB, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_sRGB2Lab @ im_clip], [RGB16, B_W, im_1628 @ im_sRGB2mono], [RGB16, RGB, image_set_type RGB @ im_1628], [RGB16, sRGB, image_set_type sRGB @ im_1628], [RGB16, RGB16, image_set_type RGB16], [RGB16, GREY16, im_RGB162GREY16], [GREY16, B_W, image_set_type B_W @ im_1628], [GREY16, RGB, im_mono2sRGB @ im_1628], [GREY16, sRGB, im_mono2sRGB @ im_1628], [GREY16, RGB16, im_GREY162RGB16], [GREY16, GREY16, image_set_type GREY16], [LABQ, B_W, im_sRGB2mono @ im_Lab2sRGB @ im_LabQ2Lab], [LABQ, XYZ, im_Lab2XYZ @ im_LabQ2Lab], [LABQ, YXY, im_XYZ2Yxy @ im_Lab2XYZ @ im_LabQ2Lab], [LABQ, LAB, im_LabQ2Lab], [LABQ, LCH, im_Lab2LCh @ im_LabQ2Lab], [LABQ, UCS, im_Lab2UCS @ im_LabQ2Lab], [LABQ, RGB, im_LabQ2disp], [LABQ, sRGB, im_Lab2sRGB @ im_LabQ2Lab], [LABQ, LABQ, image_set_type LABQ], [LABQ, LABS, im_LabQ2LabS], [LABS, B_W, im_sRGB2mono @ im_Lab2sRGB @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, XYZ, im_Lab2XYZ @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, YXY, im_XYZ2Yxy @ im_Lab2XYZ @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, LAB, im_LabS2Lab], [LABS, LCH, im_Lab2LCh @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, UCS, im_Lab2UCS @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, RGB, im_LabQ2disp @ im_LabS2LabQ @ im_clip2s], [LABS, sRGB, im_XYZ2sRGB @ im_Lab2XYZ @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, LABQ, im_LabS2LabQ @ im_clip2s], [LABS, LABS, image_set_type LABS] ] { /* From Image_type ... repeat here for brevity. Use same ordering as * in Colour menu for consistency. */ B_W = 1; XYZ = 12; YXY = 23; LAB = 13; LCH = 19; UCS = 18; RGB = 17; sRGB = 22; RGB16 = 25; GREY16 = 26; LABQ = 16; LABS = 21; } /* Transform between two colour spaces. */ colour_transform from to in = colour_unary _colour_conversion_table?i?2 in, i >= 0 = error (_ "unable to convert " ++ Image_type.type_names.get_name from ++ _ " to " ++ Image_type.type_names.get_name to) { match x = x?0 == from && x?1 == to; i = index match _colour_conversion_table; } /* Transform to a colour space, assuming the type field in the input is * correct */ colour_transform_to to in = colour_transform (get_type in) to in; /* Given a list of things, try to make them all the same size. Don't change * the format. Don't touch non-image things. */ size_alike l = map enlarge l { max_width = foldr (test_prop has_width get_width) 0 l; max_height = foldr (test_prop has_height get_height) 0 l; test_prop has get x best = best, !has x = max_pair best (get x); enlarge x = embed 0 0 0 max_width max_height x, has_width x = x; } /* Given a list of things, look for 1 band objects and bump them to to n - * band objects, where n is the maximum number of bands. Don't change the * format. Don't touch non-image things. */ bands_alike l = map upband l { max_bands = foldr (test_prop has_bands get_bands) 0 l; test_prop has get x best = best, !has x = max_pair best (get x); upband x = bandjoin (replicate max_bands x), has_bands x && get_bands x == 1 = x; } /* Given a list of things, try to match the formats. Don't touch non-image * objects. */ formats_alike l = map upformat l { max_format = foldr (test_prop has_format get_format) Image_format.UCHAR l; test_prop has get x best = best, !has x = max_pair best (get x); upformat x = clip2fmt max_format x, has_format x = x; } /* String for path separator on this platform. */ path_separator = expand "$SEP"; /* Form a relative pathname. * path_relative ["home", "john"] == "home/john" * path_relative [] == "" */ path_relative l = join_sep path_separator l; /* Form an absolute pathname. * path_absolute ["home", "john"] == "/home/john" * path_absolute [] == "/" * If the first component looks like 'A:', don't add an initial separator. */ path_absolute l = path_relative l, len l?0 == 2 && is_letter l?0?0 && l?0?1 == ':' = path_separator ++ path_relative l; /* Parse a pathname. * path_parse "/home/john" == ["home", "john"] * path_parse "home/john" == ["home", "john"] */ path_parse str = split (equal path_separator?0) str; nip2-8.7.0/share/nip2/compat/7.24/_joe_utilities.def0000644000175000017500000005054713224651032016646 00000000000000/* ******Functions included in start/_NG_utilities.def:****** * * so_balance ref_meanmax im1 im2 mask blur gauss * * nonzero_mean im = no_out * * so_meanmax im = result * * so_calculate ref_meanmax im mask = result * * simple_frame frame im_w im_h ov cs ms bf option = result * * corner_frame frame im_w im_h ov cs ms bf = result * * build_frame r_tl r_tr r_bl r_br r_mt r_mb r_ml r_mr im_w im_h ov bf = result * * complex_frame frame im_w im_h ov cs es ms bf option= result * * complex_edge ra rb t bl d = rc * * frame_lr_min r_l r_r target bw = result * * frame_tb_min r_t r_b target bw = result * * frame_position_image im ref os colour= result * * merge_array bw arr = result * * merge_to_scale im target blend dir = result * * select_ellipse line width = mask * * select_tetragon p1 p2 p3 p4 = mask * * select_polygon pt_list = mask * * perspective_transform to from = trans'' * * sort_pts_clockwise l = l'' * */ /* Called from: * _NG_Extra.def Clone_area_item */ so_balance ref_meanmax im1 im2 mask gauss = result { //ref_meanmax = so_meanmax im1; so_values = so_calculate ref_meanmax im2 mask; im2_cor_a = clip2fmt im2.format im2'', has_member "format" im2 = im2'' {im2'' = im2 * (so_values?0) + (so_values?1);} // Option to convert replacement image to scaled gaussian noise im2_cor = im2_cor_a, gauss == false = clip2fmt im2_cor_a.format gauss_im {gauss_im = im_gaussnoise im2_cor_a.width im2_cor_a.height ref_meanmax?0 (deviation im2_cor_a);} result = im_blend (get_image mask) (get_image im2_cor) (get_image im1); }; //////////////////////////////////////////////////////////////////////////////// /* Calculates the mean of the non zero pixels. * * Called from: * _NG_utilities so_meanmax */ nonzero_mean im = no_out { zero_im = (im == 0); zero_mean = mean zero_im; no_mean = mean im; no_out = no_mean/(1 - (zero_mean/255)); }; //////////////////////////////////////////////////////////////////////////////// /* Calculates the max and nonzero mean of an image * * Called from: * _NG_utilities so_balance * _NG_utilities so_calculate * _NG_Extra.def Clone_area_item * _NG_Extra.def Balance_item.Balance_find_item */ so_meanmax im = result { mean_of_im = nonzero_mean im; adjusted_im = im - mean_of_im; max_of_im = max adjusted_im; result = [mean_of_im, max_of_im]; }; //////////////////////////////////////////////////////////////////////////////// /* Calculates the scale and offset required to match a reference mean and max * * Called from: * _NG_utilities so_balance * _NG_Extra.def Balance_item.Balance_find_item */ so_calculate ref_meanmax im mask = result { im' = if mask then im else 0; im_values = so_meanmax im'; mean_of_ref = ref_meanmax?0; mean_of_im = im_values?0; max_of_ref = ref_meanmax?1; max_of_im = im_values?1; scale = (max_of_ref)/(max_of_im); offset = mean_of_ref - (mean_of_im * scale); result = [ scale, offset ]; }; //////////////////////////////////////////////////////////////////////////////// /* Extends or shortens the central sections of a simple frame to fit round a given image. * * Called from: * _NG_Extra.def Frame_item.Simple_frame_item */ simple_frame frame im_w im_h ov cs ms bf option = result { cs' = (1 - cs); ms' = (0.5 - (ms/2)); ms'' = (1 - cs); //Regions r_tl = Region_relative frame 0 0 cs cs; r_tr = fliplr r_tl, option == true = Region_relative frame cs' 0 cs cs; r_bl = Region_relative frame 0 cs' cs cs; r_br = fliplr r_bl, option == true = Region_relative frame cs' cs' cs cs; r_mt = Region_relative frame ms' 0 ms cs; r_mb = Region_relative frame ms' ms'' ms cs; r_ml = Region_relative frame 0 ms' cs ms; r_mr = fliplr r_ml, option == true = Region_relative frame ms'' ms' cs ms; result = build_frame r_tl r_tr r_bl r_br r_mt r_mb r_ml r_mr im_w im_h ov bf; }; //////////////////////////////////////////////////////////////////////////////// /* Copies and extends a simple frame corner to produce a complete frame to fit round a given image. * * Called from: * _NG_Extra.def Frame_item.Frame_corner_item */ corner_frame frame im_w im_h ov cs ms bf = result { cs' = (1 - cs); ms' = (0.5 - (ms/2)); //Regions r_tl = Region_relative frame 0 0 cs cs; r_tr = fliplr r_tl; r_bl = fliptb r_tl; r_br = fliplr r_bl; r_mt = Region_relative frame ms' 0 ms cs; r_mb = fliptb r_mt; r_ml = Region_relative frame 0 ms' cs ms;; r_mr = fliplr r_ml; result = build_frame r_tl r_tr r_bl r_br r_mt r_mb r_ml r_mr im_w im_h ov bf; }; //////////////////////////////////////////////////////////////////////////////// /* Completes the frame building process for simple_frame and corner_frame. * * _NG_utilities simple_frame * _NG_utilities corner_frame */ build_frame r_tl r_tr r_bl r_br r_mt r_mb r_ml r_mr im_w im_h ov bf = result { //Find pixel thickness of frames section s_width = r_ml.width - mean (im_profile (map_unary fliplr (r_ml.value)?0) 1); s_height = r_mt.height - mean (im_profile (map_unary fliptb (r_mt.value)?0) 0); w_target = im_w + (2 * (s_width - ov)); h_target = im_h + (2 * (s_height - ov)); blend = bf * r_tl.width; cw_target = w_target - (2 * r_tl.width) + (2 * blend), w_target > (2 * r_tl.width) = w_target; ch_target = h_target - (2 * r_tl.height) + (2 * blend), h_target > (2 * r_tl.height) = h_target; //Use regions to produce sections top = merge_to_scale r_mt cw_target blend 0; bottom = merge_to_scale r_mb cw_target blend 0; left = merge_to_scale r_ml ch_target blend 1; right = merge_to_scale r_mr ch_target blend 1; middle = Image (image_new cw_target ch_target left.bands left.format left.coding left.type 0 0 0); //Build sections into full frame. row_1 = frame_lr_min r_tl r_tr w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[r_tl, top, r_tr]]; row_2 = frame_lr_min left right w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[left, middle, right]]; row_3 = frame_lr_min r_bl r_br w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[r_bl, bottom, r_br]]; result = frame_tb_min row_1 row_3 h_target blend, (h_target < (r_tl.height * 2)) = merge_array blend [[row_1], [row_2], [row_3]]; }; //////////////////////////////////////////////////////////////////////////////// /* Extends or shortens the central sections of a frame, preserving any central details on each * edge, to fit round a given image. * * Called from: * _NG_Extra.def Frame_item.Complex_frame_item */ complex_frame frame im_w im_h ov cs es ms bf option= result { cs' = (1 - cs); ms' = (0.5 - (ms/2)); es' = (0.25 - (es/2)); r_tl = Region_relative frame 0 0 cs cs; r_tr = fliplr r_tl, option == true = Region_relative frame cs' 0 cs cs; r_bl = Region_relative frame 0 cs' cs cs; r_br = fliplr r_bl, option == true = Region_relative frame cs' cs' cs cs; r_mt = Region_relative frame ms' 0 ms cs; r_mb = Region_relative frame ms' cs' ms cs; r_ml = Region_relative frame 0 ms' cs ms; r_mr = fliplr r_ml, option == true = Region_relative frame cs' ms' cs ms; r_et = Region_relative frame es' 0 es cs; r_eb = Region_relative frame es' cs' es cs; r_el = Region_relative frame 0 es' cs es; r_er = fliplr r_el, option == true = Region_relative frame cs' es' cs es; //Find pixel thickness of frames section s_width = r_el.width - mean (im_profile (map_unary fliplr (r_el.value)?0) 1); s_height = r_et.height - mean (im_profile (map_unary fliptb (r_et.value)?0) 0); w_target = im_w + (2 * (s_width - ov)); h_target = im_h + (2 * (s_height - ov)); min_size = foldr1 min_pair [r_tl.width, r_tl.height, r_mt.width, r_mt.height, r_et.width, r_et.height]; blend = bf * min_size; cw_target = w_target - (2 * r_tl.width) + (2 * blend); ch_target = h_target - (2 * r_tl.height) + (2 * blend); top = complex_edge r_mt r_et cw_target blend 0; bottom = complex_edge r_mb r_eb cw_target blend 0; left = complex_edge r_ml r_el ch_target blend 1; right = complex_edge r_mr r_er ch_target blend 1; middle = Image (image_new top.width left.height left.bands left.format left.coding left.type 0 0 0); //Build regions into full frame. row_1 = frame_lr_min r_tl r_tr w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[r_tl, top, r_tr]]; row_2 = frame_lr_min left right w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[left, middle, right]]; row_3 = frame_lr_min r_bl r_br w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[r_bl, bottom, r_br]]; result = frame_tb_min row_1 row_3 h_target blend, (h_target < (r_tl.height * 2)) = merge_array blend [[row_1], [row_2], [row_3]]; }; //////////////////////////////////////////////////////////////////////////////// /* Function called by complex frame, used to produce section * * Called from: * _NG_utilities.def complex_frame */ complex_edge ra rb t bl d = rc { e1 = ceil (ra.width - t)/2, d == 0 = 0; e2 = 0, d == 0 = ceil (ra.height - t)/2; e3 = t, d == 0 = ra.width; e4 = ra.height, d == 0 = t; check = ra.width, d == 0; = ra.height; rai = get_image ra; t2 = (t - ra.width + (2 * bl))/2, d == 0 = (t - ra.height + (2 * bl))/2; rc = ra , t <= 0 = Image (im_extract_area rai e1 e2 e3 e4), t <= check = merge_array bl [[rb',ra,rb']], d == 0 = merge_array bl [[rb'],[ra],[rb']] {rb' = merge_to_scale rb t2 bl d;} }; ////////////////////////////////////////////////////////////////////////////// /* Blends two images left/right to produce an image a specific width. * * _NG_utilities build_frame * _NG_utilities complex_frame */ frame_lr_min r_l r_r target bw = result { //Calculating the new widh required for each image. no = (target/2 + bw); n_w = no, (r_l.width > no) = r_l.width; //Removing excess from what will be the middle of the final image. n_l = im_extract_area r_l.value 0 0 n_w r_l.height; n_r = im_extract_area r_r.value (r_r.width - n_w) 0 n_w r_l.height; //Merge the two image together with a bw*2 pixel overlap. result = Image (im_lrmerge n_l n_r ((bw*2) - n_w) 0 bw); }; ////////////////////////////////////////////////////////////////////////////// /* Blends two images top/bottom to produce an image a specific width. * * _NG_utilities build_frame * _NG_utilities complex_frame */ frame_tb_min r_t r_b target bw = result { //Calculating the new height required for each image. no = (target/2 + bw); n_h = no, (r_t.height > no) = r_t.height; //Removing excess from what will be the middle of the final image. n_t = im_extract_area r_t.value 0 0 r_t.width n_h; n_b = im_extract_area r_b.value 0 (r_b.height - n_h) r_b.width n_h; //Merge the two image together with a 50 pixel overlap. result = Image (im_tbmerge n_t n_b 0 ((bw*2) -n_h) bw); }; ////////////////////////////////////////////////////////////////////////////// /* Resixe canvas of an image to accomodate a frame and possible mount * * Called from: * _NG_Extra.def Frame_item.Frame_corner_item * _NG_Extra.def Frame_item.Simple_frame_item * _NG_Extra.def Frame_item.Complex_frame_item */ frame_position_image im ref os colour= result { background = image_new ref.width ref.height im.bands im.format im.coding im.type colour 0 0; result = insert_noexpand xp yp im background { xp = (ref.width - im.width)/2; yp = (ref.height - im.height - os)/2; } }; ////////////////////////////////////////////////////////////////////////////// /* Merges an array of images together according to blend width bw * * Called from: * _NG_Utilites.def build_frame * _NG_Utilites.def complex_frame * _NG_Utilites.def complex_edge */ merge_array bw arr = result { merge_lr bw im1 im2 = im3 { bw' = get_header "Xsize" (get_image im1); bw'' = -(bw' - bw); im3 = im_lrmerge (get_image im1) (get_image im2) bw'' 0 bw; } merge_tb bw im1 im2 = im3 { bw' = get_header "Ysize" (get_image im1); bw'' = -(bw' - bw); im3 = im_tbmerge (get_image im1) (get_image im2) 0 bw'' bw; } im_out = (image_set_origin 0 0 @ foldl1 (merge_tb bw) @ map (foldl1 (merge_lr bw))) arr; result = Image im_out; }; ////////////////////////////////////////////////////////////////////////////// /* Repeatably top/bottom add clones of im, with a defined overlap, until final height > target * * Called from: * _NG_Utilites.def build_frame * _NG_Utilites.def complex_edge */ merge_to_scale im target blend dir = result { blend' = floor blend; //allow fir lr or tb process var_a = im.width, dir == 0 = im.height; var_w = im.width, dir == 1 = target, target > blend' = blend'; var_h = im.height, dir == 0 = target, target > blend' = blend'; //total numner of copies of im requires, taking overlap into account. no_loops = ceil ((log ((target - blend')/(var_a - blend')))/(log 2)); process im no = result { pr_a = get_header "Xsize" (get_image im), dir == 0 = get_header "Ysize" (get_image im); pr_b = -(pr_a - blend' + 1); im' = im_lrmerge (get_image im) (get_image im) pr_b 0 blend', dir == 0 = im_tbmerge (get_image im) (get_image im) 0 pr_b blend'; no' = no - 1; result = im', no' < 1 = process im' no'; } im_tmp = im.value, var_a > target = process im no_loops; result = Image (im_extract_area (get_image im_tmp) 0 0 var_w var_h); }; ////////////////////////////////////////////////////////////////////////////// /* Selects an elispe based on a line and a width * * Called from: * _NG_Extra.def Select_item.Elipse */ select_ellipse line width = mask { im = Image (get_image line); //Make a 2 band image whose value equals its coordinates. im_coor = Image (make_xy im.width im.height); //Adjust the values to center tham on (line.left, line.top) im_cent = im_coor - Vector [line.left,line.top]; w = line.width; h = line.height; angle = 270, w == 0 && h < 0 = 90, w == 0 && h >= 0 = 360 + atan (h/w), w > 0 && h < 0 = atan (h/w), w > 0 && h >= 0 = 180 + atan (h/w); a = ( (h ** 2) + (w ** 2) )**0.5; b = a * width; x' = ( (cos angle) * im_cent?0) + ( (sin angle) * im_cent?1); y' = ( (cos angle) * im_cent?1) - ( (sin angle) * im_cent?0); mask = ( (b**2) * (x'**2) ) + ( (a**2) * (y'**2) ) <= (a * b)**2; }; ////////////////////////////////////////////////////////////////////////////// /* Selects a tetragon based on four points. * * Called from: * _NG_Extra.def Select_item.Tetragon * _NG_Extra.def Perspective_item */ select_tetragon p1 p2 p3 p4 = mask { //Put points in clockwise order starting at the top left. pt_list = sort_pts_clockwise [p1, p2, p3, p4]; pair_list = [ [ pt_list?0, pt_list?1 ], [ pt_list?1, pt_list?2 ], [ pt_list?2, pt_list?3 ], [ pt_list?3, pt_list?0 ] ]; //Make xy image the same size as p1.image; im_xy = Image (make_xy p1.image.width p1.image.height); white = Image (image_new p1.image.width p1.image.height 1 0 Image_coding.NOCODING 1 255 0 0); mask = foldl process white pair_list; /* Treat each pair of point as a vector going from p1 to p2, * then select all to right of line. This is done for each pair, * the results are all combined to select the area defined by * the four points. */ process im_in pair = im_out { x = (pair?0).left; y = (pair?0).top; x'= (pair?1).left; y'= (pair?1).top; w = x' - x; h = y' - y; m = 0, x == x' = (y-y')/(x-x'); c = 0, x == x' = ((y*x') - (y'*x))/(x' - x); mask= im_xy?1 - (im_xy?0 * m) >= c, w > 0 = im_xy?1 - (im_xy?0 * m) <= c, w < 0 = im_xy?0 <= x, w == 0 && h > 0 = im_xy?0 >= x; im_out = im_in & mask; } }; ////////////////////////////////////////////////////////////////////////////// /* Selects a tetragon based on four points. * * Called from: * _NG_Extra.def Select_item.Polygon */ select_polygon pt_list = mask { group_check = is_Group pt_list; pt_l = pt_list.value, group_check = pt_list; im = Image (get_image (pt_l?0)); im_xy = Image (make_xy im.width im.height); black = Image (image_new im_xy.width im_xy.height 1 0 Image_coding.NOCODING 1 0 0 0); x = im_xy?0; y = im_xy?1; pt_l' = grp_trip pt_l; mask = foldl process black pt_l'; /*Takes a group adds the first two the end and then creates a lists of *lists [[a, b, c], [b, c, d] .... [x, a, b]] */ grp_trip l = l'' { px = take 2 l; l' = join l px; start = [(take 3 l')]; rest = drop 3 l'; process a b = c { x = (last a)?1; x'= (last a)?2; x'' = [[x, x', b]]; c = join a x''; } l'' = foldl process start rest; }; process im_in triplet = im_out { p1 = triplet?0; p2 = triplet?1; p3 = triplet?2; //check for change in x direction between p1-p2 and p2 -p3 dir_1 = sign (p2.left - p1.left); dir_2 = sign (p3.left - p2.left); dir = dir_1 + dir_2; //define min x limit. min_x = p1.left, p1.left < p2.left = p2.left + 1, dir != 0 = p2.left; //define max x limit. max_x = p1.left, p1.left > p2.left = p2.left - 1, dir != 0 = p2.left; //equation of line defined by p1 and p2 m = line_m p1 p2; c = line_c p1 p2; //Every thing below the line im_test = ((y >= (m * x) + c) & (x >= min_x) & (x <= max_x)); im_out = im_in ^ im_test; } line_c p1 p2 = c {m = line_m p1 p2; c = p1.top - (m * p1.left);}; line_m p1 p2 = (p2.top - p1.top)/(p2.left - p1.left), p2.left != p1.left = 0; }; ////////////////////////////////////////////////////////////////////////////// /* Selects a tetragon based on four points. * * Called from: * _NG_Extra.def Perspective_match_item * _NG_Extra.def Perspective_item */ perspective_transform to from = trans'' { /* * Tramsformation matrix is calculated on the bases of the following functions: * x' = c0x + c1y + c2xy + c3 * y' = c4x + c5y + c6xy + c7 * * The functions used in vips im_transform works based on the functions: * x = x' + b0 + b2x' + b4y' + b6x'y' * y = y' + b1 + b3x' + b5y' + b7x'y' * * and is applied in the form of the matrix: * * [[b0, b1], * [b2, b3], * [b4, b5], * [b6, b7]] * * Therefore our required calculated matrix will be * * [[ c3 , c7], * [(c0 - 1) , c4], * [ c1 , (c5 - 1)], * [ c2 , c6]] * * to = [x1, y1, x2, y2, x3, y3, x4, y4] * from = [x1', y1', x2', y2', x3', y3', x4', y4'] * trans = [[c0], [c1], [c2], [c3], [c4], [c5], [c6], [c7]] * */ to' = Matrix [[to?0, to?1, ((to?0)*(to?1)), 1, 0, 0, 0, 0], [0, 0, 0, 0, to?0, to?1, ((to?0)*(to?1)), 1], [to?2, to?3, ((to?2)*(to?3)), 1, 0, 0, 0, 0], [0, 0, 0, 0, to?2, to?3, ((to?2)*(to?3)), 1], [to?4, to?5, ((to?4)*(to?5)), 1, 0, 0, 0, 0], [0, 0, 0, 0, to?4, to?5, ((to?4)*(to?5)), 1], [to?6, to?7, ((to?6)*(to?7)), 1, 0, 0, 0, 0], [0, 0, 0, 0, to?6, to?7, ((to?6)*(to?7)), 1]]; from' = Matrix (transpose [from]); to'' = to' ** (-1); trans = to'' * from'; trans' = trans.value; trans''= Matrix [[(trans'?3)?0, (trans'?7)?0 ], [((trans'?0)?0 - 1), (trans'?4)?0 ], [(trans'?1)?0, ((trans'?5)?0 - 1)], [(trans'?2)?0, (trans'?6)?0 ]]; }; ////////////////////////////////////////////////////////////////////////////// /* Sort a list of points into clockwise order. * * Called from: * _NG_utilities.def select_tetragon * _NG_Extra.def Perspective_match_item * _NG_Extra.def Perspective_item */ sort_pts_clockwise l = l'' { // sort functions: f_top a b = a.top < b.top; f_left a b = a.left < b.left; f_right a b = a.left > b.left; l' = sortc f_top l; l'_a = take 2 l'; l'_b = drop 2 l'; l''_a = sortc f_left l'_a; l''_b = sortc f_right l'_b; l'' = join l''_a l''_b; }; Mount_options _ctype _ppcm = class { _vislevel = 3; apply = Toggle "Apply mount options" false; ls = Expression "Lower mount section bigger by (cm)" 0; mount_colour = Colour _ctype [0, 0, 0]; _los = ls.expr * _ppcm; }; Frame_variables comp = class { _vislevel = 3; scale_factor = Expression "scale the size of the frame by" 1; /* These sliders define the fraction of the frames width or height is extracted * to produce each of the particular regions. */ corner_section = Scale "Corner section" 0.1 1 0.5; edge_section = Scale "Edge section" 0.1 1 0.2, comp > 0 = "Only required for complex frames"; middle_section = Scale "Middle section" 0.1 1 0.2; blend_fraction = Scale "Blend fraction" 0.1 0.9 0.1; option = Toggle "Use mirror of left-side to make right" true; }; nip2-8.7.0/share/nip2/compat/7.24/Image.def0000644000175000017500000013201513224651032014650 00000000000000Image_new_item = class Menupullright "_New" "make new things" { Image_black_item = class Menuaction "_Image" "make a new image" { format_names = [ "8-bit unsigned int - UCHAR", // 0 "8-bit signed int - CHAR", // 1 "16-bit unsigned int - USHORT", // 2 "16-bit signed int - SHORT", // 3 "32-bit unsigned int - UINT", // 4 "32-bit signed int - INT", // 5 "32-bit float - FLOAT", // 6 "64-bit complex - COMPLEX", // 7 "64-bit float - DOUBLE", // 8 "128-bit complex - DPCOMPLEX" // 9 ]; action = class Image _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; nbands = Expression "Image bands" 1; format_option = Option "Image format" format_names 0; type_option = Option_enum Image_type.type_names "Image type" "B_W"; pixel = Expression "Pixel value" 0; _result = image_new (to_real nwidth) (to_real nheight) (to_real nbands) (to_real format_option) Image_coding.NOCODING type_option.value_thing pixel.expr 0 0; } } Image_new_from_image_item = class Menuaction "_From Image" "make a new image based on image x" { action x = class Image _result { _vislevel = 3; pixel = Expression "Pixel value" 0; _result = image_new x.width x.height x.bands x.format x.coding x.type pixel.expr x.xoffset x.yoffset; } } Image_region_item = class Menupullright "_Region on Image" "make a new region on an image" { Region_item = class Menuaction "_Region" "make a region on an image" { action image = scope.Region_relative image 0.25 0.25 0.5 0.5; } Mark_item = class Menuaction "_Point" "make a point on an image" { action image = scope.Mark_relative image 0.5 0.5; } Arrow_item = class Menuaction "_Arrow" "make an arrow on an image" { action image = scope.Arrow_relative image 0.25 0.25 0.5 0.5; } HGuide_item = class Menuaction "_Horizontal Guide" "make a horizontal guide on an image" { action image = scope.HGuide image 0.5; } VGuide_item = class Menuaction "_Vertical Guide" "make a vertical guide on an image" { action image = scope.VGuide image 0.5; } sep1 = Menuseparator; Move_item = class Menuaction "From Region" "new region on image using existing region as a guide" { action a b = map_binary process a b { process a b = x.Region target x.left x.top x.width x.height, is_Region x = x.Arrow target x.left x.top x.width x.height, is_Arrow x = error "bad arguments to region-from-region" { // prefer image then region compare a b = false, !is_Image a && is_Image b = false, is_Region a && !is_Region b = true; [target, x] = sortc compare [a, b]; } } } } } Image_convert_to_image_item = class Menuaction "Con_vert to Image" "convert anything to an image" { action x = to_image x; } Image_number_format_item = class Menupullright "_Format" "convert numeric format" { U8_item = class Menuaction "_8 bit unsigned" "convert to unsigned 8 bit [0, 255]" { action x = map_unary cast_unsigned_char x; } U16_item = class Menuaction "1_6 bit unsigned" "convert to unsigned 16 bit [0, 65535]" { action x = map_unary cast_unsigned_short x; } U32_item = class Menuaction "_32 bit unsigned" "convert to unsigned 32 bit [0, 4294967295]" { action x = map_unary cast_unsigned_int x; } sep1 = Menuseparator; S8_item = class Menuaction "8 _bit signed" "convert to signed 8 bit [-128, 127]" { action x = map_unary cast_signed_char x; } S16_item = class Menuaction "16 b_it signed" "convert to signed 16 bit [-32768, 32767]" { action x = map_unary cast_signed_short x; } S32_item = class Menuaction "32 bi_t signed" "convert to signed 32 bit [-2147483648, 2147483647]" { action x = map_unary cast_signed_int x; } sep2 = Menuseparator; Float_item = class Menuaction "_Single precision float" "convert to IEEE 32 bit float" { action x = map_unary cast_float x; } Double_item = class Menuaction "_Double precision float" "convert to IEEE 64 bit float" { action x = map_unary cast_double x; } sep3 = Menuseparator; Scmplxitem = class Menuaction "Single _precision complex" "convert to 2 x IEEE 32 bit float" { action x = map_unary cast_complex x; } Dcmplx_item = class Menuaction "Double p_recision complex" "convert to 2 x IEEE 64 bit float" { action x = map_unary cast_double_complex x; } } Image_header_item = class Menupullright "_Header" "do stuff to the image header" { Image_get_item = class Menupullright "_Get" "get header fields" { // the header fields we can get fields = class { type = 0; width = 1; height = 2; format = 3; bands = 4; xres = 5; yres = 6; xoffset = 7; yoffset = 8; coding = 9; field_names = Enum [ $width => width, $height => height, $bands => bands, $format => format, $type => type, $xres => xres, $yres => yres, $xoffset => xoffset, $yoffset => yoffset, $coding => coding ]; field_option name = Option_enum field_names (_ "Field") name; field_funcs = Table [ [type, get_type], [width, get_width], [height, get_height], [format, get_format], [bands, get_bands], [xres, get_xres], [yres, get_yres], [xoffset, get_xoffset], [yoffset, get_yoffset], [coding, get_coding] ]; } get_field field_name x = class _result { _vislevel = 3; field = fields.field_option field_name; _result = map_unary (Real @ fields.field_funcs.lookup 0 1 field.value_thing) x; } Width_item = class Menuaction "_Width" "get width" { action x = get_field "width" x; } Height_item = class Menuaction "_Height" "get height" { action x = get_field "height" x; } Bands_item = class Menuaction "_Bands" "get bands" { action x = get_field "bands" x; } Format_item = class Menuaction "_Format" "get format" { action x = get_field "format" x; } Type_item = class Menuaction "_Type" "get type" { action x = get_field "type" x; } Xres_item = class Menuaction "_Xres" "get X resolution" { action x = get_field "xres" x; } Yres_item = class Menuaction "_Yres" "get Y resolution" { action x = get_field "yres" x; } Xoffset_item = class Menuaction "X_offset" "get X offset" { action x = get_field "xoffset" x; } Yoffset_item = class Menuaction "Yo_ffset" "get Y offset" { action x = get_field "yoffset" x; } Coding_item = class Menuaction "_Coding" "get coding" { action x = get_field "coding" x; } sep1 = Menuseparator; Custom_item = class Menuaction "C_ustom" "get any header field" { action x = class _result { _vislevel = 3; field = String "Field" "Xsize"; parse = Option "Parse" [ "No parsing", "Parse string as integer", "Parse string as real", "Parse string as hh:mm:ss" ] 0; _result = map_unary (wrap @ process @ get_header field.value) x { parse_str parse str = parse (split is_space str)?0; parse_field name cast parse x = cast x, is_number x = parse_str parse x, is_string x = error ("not " ++ name); get_int = parse_field "int" cast_signed_int parse_int; get_float = parse_field "float" cast_float parse_float; get_time = parse_field "hh:mm:ss" cast_signed_int parse_time; wrap x = Real x, is_real x = Vector x, is_real_list x = Image x, is_image x = Bool x, is_bool x = Matrix x, is_matrix x = String "String" x, is_string x = List x, is_list x = x; process = [ id, get_int, get_float, get_time ]?parse; } } } } sep1 = Menuseparator; Image_set_meta_item = class Menuaction "_Set" "set image metadata" { action x = class _result { _vislevel = 3; fname = String "Field" "field-name"; val = Expression "Value" 42; _result = map_unary process x { process image = set_header fname.value val.expr image; } } } Image_edit_header_item = class Menuaction "_Edit" "change advisory header fields of image" { type_names = Image_type.type_names; all_names = sort (map (extract 0) type_names.value); get_prop has get def x = get x, has x = def; action x = class _result { _vislevel = 3; nxres = Expression "Xres" (get_prop has_xres get_xres 1 x); nyres = Expression "Yres" (get_prop has_yres get_yres 1 x); nxoff = Expression "Xoffset" (get_prop has_xoffset get_xoffset 0 x); nyoff = Expression "Yoffset" (get_prop has_yoffset get_yoffset 0 x); type_option = Option_enum Image_type.type_names "Image type" (Image_type.type_names.get_name type) { type = x.type, is_Image x = Image_type.MULTIBAND; } _result = map_unary process x { process image = Image (im_copy_set image.value type_option.value_thing (to_real nxres) (to_real nyres) (to_real nxoff) (to_real nyoff)); } } } } Image_cache_item = class Menuaction "C_ache" "cache calculated image pixels" { action x = class _result { _vislevel = 3; tile_width = Number "Tile width" 128; tile_height = Number "Tile height" 128; max_tiles = Number "Maximum number of tiles to cache" (-1); _result = map_unary process x { process image = cache (to_real tile_width) (to_real tile_height) (to_real max_tiles) image; } } } #separator Image_levels_item = class Menupullright "_Levels" "change image levels" { Scale_item = class Menuaction "_Scale to 0 - 255" "linear transform to fit 0 - 255 range" { action x = map_unary scale x; } Linear_item = class Menuaction "_Linear" "linear transform of image levels" { action x = class _result { _vislevel = 3; scale = Scale "Scale" 0.001 3 1; offset = Scale "Offset" (-128) 128 0; _result = map_unary adj x { adj x // only force back to input type if this is a thing // with a type ... so we work for Colour / Matrix etc. = clip2fmt x.format x', has_member "format" x = x' { x' = x * scale + offset; } } } } Gamma_item = class Menuaction "_Power" "power transform of image levels (gamma)" { action x = class _result { _vislevel = 3; gamma = Scale "Gamma" 0.001 4 1; image_maximum_hint = "You may need to change image_maximum if " ++ "this is not an 8 bit image"; im_mx = Expression "Image maximum" mx { mx = Image_format.maxval x.format, has_format x = 255; } _result = map_unary gam x { gam x = clip2fmt (get_format x) x', has_format x = x' { x' = (im_mx.expr / im_mx.expr ** gamma) * x ** gamma; } } } } Tone_item = class Menuaction "_Tone Curve" "adjust tone curve" { action x = class _result { _vislevel = 3; b = Scale "Black point" 0 100 0; w = Scale "White point" 0 100 100; sp = Scale "Shadow point" 0.1 0.3 0.2; mp = Scale "Mid-tone point" 0.4 0.6 0.5; hp = Scale "Highlight point" 0.7 0.9 0.8; sa = Scale "Shadow adjust" (-15) 15 0; ma = Scale "Mid-tone adjust" (-30) 30 0; ha = Scale "Highlight adjust" (-15) 15 0; curve = tone_build x.format b w sp mp hp sa ma ha; _result = map_unary (hist_map curve) x; } } } Image_transform_item = class Menupullright "_Transform" "transform images" { Rotate_item = class Menupullright "Ro_tate" "rotate image" { Fixed_item = class Menupullright "_Fixed" "clockwise rotation by fixed angles" { rotate_widget default x = class _result { _vislevel = 3; angle = Option "Rotate by" [ "Don't rotate", "90 degrees clockwise", "180 degrees", "90 degrees anticlockwise" ] default; _result = map_unary process x { process in = [ in, rot90 in, rot180 in, rot270 in ] ? angle; } } Rot90_item = class Menuaction "_90 Degrees" "clockwise rotation by 90 degrees" { action x = rotate_widget 1 x; } Rot180_item = class Menuaction "_180 Degrees" "clockwise rotation by 180 degrees" { action x = rotate_widget 2 x; } Rot270_item = class Menuaction "_270 Degrees" "clockwise rotation by 270 degrees" { action x = rotate_widget 3 x; } } Free_item = class Menuaction "_Free" "clockwise rotation by any angle" { action x = class _result { _vislevel = 3; angle = Scale "Angle" (-180) 180 0; interp = Interpolate_picker Interpolate_type.BILINEAR; _result = map_unary process x { process image = rotate interp angle image; } } } Straighten_item = class Menuaction "_Straighten" ("smallest rotation that makes an arrow either horizontal " ++ "or vertical") { action x = class _result { _vislevel = 3; interp = Interpolate_picker Interpolate_type.BILINEAR; _result = map_unary straighten x { straighten arrow = rotate interp angle'' arrow.image { x = arrow.width; y = arrow.height; angle = im (polar (x, y)); angle' = angle - 360, angle > 315 = angle - 180, angle > 135 = angle; angle'' = -angle', angle' >= (-45) && angle' < 45 = 90 - angle'; } } } } } Flip_item = class Menupullright "_Flip" "mirror left/right or up/down" { Left_right_item = class Menuaction "_Left Right" "mirror object left/right" { action x = map_unary fliplr x; } Top_bottom_item = class Menuaction "_Top Bottom" "mirror object top/bottom" { action x = map_unary fliptb x; } } Resize_item = class Menupullright "_Resize" "change image size" { Scale_item = class Menuaction "_Scale" "scale image size by a factor" { action x = class _result { _vislevel = 3; xfactor = Expression "Horizontal scale factor" 1; yfactor = Expression "Vertical scale factor" 1; interp = Interpolate_picker Interpolate_type.BILINEAR; _result = map_unary process x { process image = resize interp xfactor yfactor image; } } } Size_item = class Menuaction "_Size To" "resize to a fixed size" { action x = class _result { _vislevel = 3; which = Option "Resize axis" [ "Shortest", "Longest", "Horizontal", "Vertical" ] 0; size = Expression "Resize to (pixels)" 128; aspect = Toggle "Break aspect ratio" false; interp = Interpolate_picker Interpolate_type.BILINEAR; _result = map_unary process x { process image = resize interp h v image, aspect = resize interp fac fac image { xfac = to_real size / image.width; yfac = to_real size / image.height; max_factor = [xfac, 1], xfac > yfac = [1, yfac]; min_factor = [xfac, 1], xfac < yfac = [1, yfac]; [h, v] = [ max_factor, min_factor, [xfac, 1], [1, yfac]]?which; fac = h, v == 1 = v; } } } } Size_within_item = class Menuaction "Size _Within" "size to fit within a rectangle" { action x = class _result { _vislevel = 3; // the rects we size to fit within _rects = [ [2048, 1536], [1920, 1200], [1600, 1200], [1400, 1050], [1280, 1024], [1024, 768], [800, 600], [640, 480] ]; within = Option "Fit within (pixels)" ( [print w ++ " x " ++ print h :: [w, h] <- _rects] ++ ["Custom"] ) 4; custom_width = Expression "Custom width" 1000; custom_height = Expression "Custom height" 1000; size = Option "Page size" [ "Full page", "Half page", "Quarter page" ] 0; interp = Interpolate_picker Interpolate_type.BILINEAR; _result = map_unary process x { xdiv = [1, 2, 2]?size; ydiv = [1, 1, 2]?size; allrect = _rects ++ [ [custom_width.expr, custom_height.expr] ]; [width, height] = allrect?within; process x = resize interp fac fac x, fac < 1 = x { xfac = (width / xdiv) / x.width; yfac = (height / ydiv) / x.height; fac = min_pair xfac yfac; } } } } Resize_canvas_item = class Menuaction "_Canvas" "change size of surrounding image" { action x = class _result { _vislevel = 3; // try to guess a sensible size for the new image _guess_size = x.rect, is_Image x = Rect 0 0 100 100; nwidth = Expression "New width (pixels)" _guess_size.width; nheight = Expression "New height (pixels)" _guess_size.height; bgcolour = Expression "Background colour" 0; position = Option "Position" [ "North-west", "North", "North-east", "West", "Centre", "East", "South-west", "South", "South-east", "Specify in pixels" ] 4; left = Expression "Pixels from left" 0; top = Expression "Pixels from top" 0; _result = map_unary process x { process image = insert_noexpand xp yp image background { width = image.width; height = image.height; coding = image.coding; bands = 3, coding == Image_coding.LABPACK = image.bands; format = Image_format.FLOAT, coding == Image_coding.LABPACK = image.format; type = image.type; // placement vectors ... left, centre, right xposv = [0, to_real nwidth / 2 - width / 2, to_real nwidth - width]; yposv = [0, to_real nheight / 2 - height / 2, to_real nheight - height]; xp = left, position == 9 = xposv?((int) (position % 3)); yp = top, position == 9 = yposv?((int) (position / 3)); background = image_new nwidth nheight bands format coding type bgcolour.expr 0 0; } } } } } Image_perspective_item = Perspective_item; Image_rubber_item = class Menupullright "Ru_bber Sheet" "automatically warp images to superposition" { rubber_interp = Option "Interpolation" ["Nearest", "Bilinear"] 1; rubber_order = Option "Order" ["0", "1", "2", "3"] 1; rubber_wrap = Toggle "Wrap image edges" false; // a transform ... a matrix, plus the size of the image the // matrix was made for Transform matrix image_width image_height = class matrix { // scale a transform ... if it worked for a m by n image, make // it work for a (m * xfac) by (y * yfac) image rescale xfac yfac = Transform (Matrix (map2 (map2 multiply) matrix.value facs)) (image_width * xfac) (image_height * yfac) { facs = [ [xfac, yfac], [1, 1], [1, 1], [1 / xfac, 1 / yfac], [1 / xfac, 1 / yfac], [1 / xfac, 1 / yfac] ]; } } // yuk!!!! fix is_instanceof to not need absolute names is_Transform = is_instanceof "Image_transform_item.Image_rubber_item.Transform"; Find_item = class Menuaction "_Find" ("find a transform which will map sample image onto " ++ "reference") { action reference sample = class _trn { _vislevel = 3; // controls order = rubber_order; interp = rubber_interp; wrap = rubber_wrap; max_err = Expression "Maximum error" 0.3; max_iter = Expression "Maximum iterations" 10; // transform [sample', trn, err] = transform_search max_err max_iter order interp wrap sample reference; transformed_image = Image sample'; _trn = Transform trn reference.width reference.height; final_error = err; } } Apply_item = class Menuaction "_Apply" "apply a transform to an image" { action a b = class _result { _vislevel = 3; // controls interp = rubber_interp; wrap = rubber_wrap; _result = map_binary trans a b { trans a b = transform interp wrap t' i { // get the transform arg first [i, t] = sortc (const is_Transform) [a, b]; t' = t.rescale (i.width / t.image_width) (i.height / t.image_height); } } } } } sep1 = Menuseparator; Match_item = class Menuaction "_Linear Match" "rotate and scale one image to match another" { action x y = class _result { _vislevel = 3; // try to find an image ... for a group, get the first item find_image x = x, is_Image x = find_image x?0, is_list x = find_image x.value, is_class x && has_value x = error "unable to find image"; _a = find_image x; _b = find_image y; ap1 = Mark_relative _a 0.5 0.25; bp1 = Mark_relative _b 0.5 0.25; ap2 = Mark_relative _a 0.5 0.75; bp2 = Mark_relative _b 0.5 0.75; refine = Toggle "Refine selected tie-points" false; lock = Toggle "No resize" false; _result = map_binary process x y { process a b = Image b''' { _prefs = Workspaces.Preferences; window = _prefs.MOSAIC_WINDOW_SIZE; object = _prefs.MOSAIC_OBJECT_SIZE; a' = a.value; b' = b.value; b'' = clip2fmt a.format b'; // return p2 ... if lock is set, return a p2 a standard // distance along the vector joining p1 and p2 norm p1 p2 = Rect left' top' 0 0, lock = p2 { v = (p2.left - p1.left, p2.top - p1.top); // 100000 to give precision since we pass points as // ints to match n = 100000 * sign v; left' = p1.left + re n; top' = p1.top + im n; } ap2'' = norm ap1 ap2; bp2'' = norm bp1 bp2; b''' = im_match_linear_search a' b'' ap1.left ap1.top bp1.left bp1.top ap2''.left ap2''.top bp2''.left bp2''.top object window, // we can't search if lock is on refine && !lock = im_match_linear a' b'' ap1.left ap1.top bp1.left bp1.top ap2''.left ap2''.top bp2''.left bp2''.top; } } } } Image_perspective_match_item = Perspective_match_item; } Image_band_item = class Menupullright "_Band" "manipulate image bands" { // like extract_bands, but return [] for zero band image // makes compose a bit simpler exb b n x = [], to_real n == 0 = extract_bands b n x; Extract_item = class Menuaction "_Extract" "extract bands from image" { action x = class _result { _vislevel = 3; first = Expression "Extract from band" 0; number = Expression "Extract this many bands" 1; _result = map_unary (exb first number) x; } } Insert_item = class Menuaction "_Insert" "insert bands into image" { action x y = class _result { _vislevel = 3; first = Expression "Insert at position" 0; _result = map_binary process x y { process im1 im2 = exb 0 f im1 ++ im2 ++ exb f (b - f) im1 { f = to_real first; b = im1.bands; } } } } Delete_item = class Menuaction "_Delete" "delete bands from image" { action x = class _result { _vislevel = 3; first = Expression "Delete from band" 0; number = Expression "Delete this many bands" 1; _result = map_unary process x { process im = exb 0 f im ++ exb (f + n) (b - (f + n)) im { f = to_real first; n = to_real number; b = im.bands; } } } } Bandwise_item = Image_join_item.Bandwise_item; sep1 = Menuseparator; To_dimension_item = class Menuaction "To D_imension" "convert bands to width or height" { action x = class _result { _vislevel = 3; orientation = Option "Orientation" [ "Horizontal", "Vertical" ] 0; _result = map_unary process x { process im = foldl1 [join_lr, join_tb]?orientation (bandsplit im); } } } To_bands_item = class Menuaction "To B_ands" "turn width or height to bands" { action x = class _result { _vislevel = 3; orientation = Option "Orientation" [ "Horizontal", "Vertical" ] 0; _result = map_unary process x { process im = bandjoin (map extract_column [0 .. im.width - 1]), orientation == 0 = bandjoin (map extract_row [0 .. im.height - 1]) { extract_column n = extract_area n 0 1 im.height im; extract_row n = extract_area 0 n im.width 1 im; } } } } } Image_crop_item = class Menuaction "_Crop" "extract a rectangular area from an image" { action x = class _result { _vislevel = 3; // try to find the image geometry ... don't bother trying to look // inside groups though _geo = x.rect, is_Image x = Rect 0 0 100 100; l = Expression "Crop left" ((int) (_geo.left + _geo.width / 4)); t = Expression "Crop top" ((int) (_geo.top + _geo.height / 4)); w = Expression "Crop width" (max_pair 1 ((int) (_geo.width / 2))); h = Expression "Crop height" (max_pair 1 ((int) (_geo.height / 2))); _result = map_nary (list_5ary extract) [x, l.expr, t.expr, w.expr, h.expr] { extract im l t w h = extract_area left' top' width' height' im { width' = min_pair (to_real w) im.width; height' = min_pair (to_real h) im.height; left' = range 0 (to_real l) (im.width - width'); top' = range 0 (to_real t) (im.height - height'); } } } } Image_insert_item = class Menuaction "_Insert" "insert a small image into a large image" { action a b = insert_position, is_Group a || is_Group b = insert_area { insert_area = class _result { _check_args = [ [a, "a", check_Image], [b, "b", check_Image] ]; _vislevel = 3; // sort to get smallest first _pred x y = x.width * x.height < y.width * y.height; [_a', _b'] = sortc _pred [a, b]; place = Area _b' left top width height { // be careful in case b is smaller than a left = max_pair 0 ((_b'.width - _a'.width) / 2); top = max_pair 0 ((_b'.height - _a'.height) / 2); width = min_pair _a'.width _b'.width; height = min_pair _a'.height _b'.height; } _result = insert_noexpand place.left place.top (clip2fmt _b'.format a'') _b' { a'' = extract_area 0 0 place.width place.height _a'; } } insert_position = class _result { _vislevel = 3; position = Option "Position" [ "North-west", "North", "North-east", "West", "Centre", "East", "South-west", "South", "South-east", "Specify in pixels" ] 4; left = Expression "Pixels from left" 0; top = Expression "Pixels from top" 0; _result = map_binary insert a b { insert a b = insert_noexpand left top (clip2fmt b.format a) b, position == 9 = insert_noexpand xp yp (clip2fmt b.format a) b { xr = b.width - a.width; yr = b.height - a.height; xp = [0, xr / 2, xr]?((int) (position % 3)); yp = [0, yr / 2, yr]?((int) (position / 3)); } } } } } Image_select_item = Select_item; Image_join_item = class Menupullright "_Join" "join two or more images together" { Bandwise_item = class Menuaction "_Bandwise" "join two images bandwise" { action a b = join a b; } sep1 = Menuseparator; join_lr shim bg align a b = im2 { w = a.width + b.width + shim; h = max_pair a.height b.height; back = image_new w h a.bands a.format a.coding a.type bg 0 0; ya = [0, max_pair 0 ((b.height - a.height)/2), max_pair 0 (b.height - a.height)]; yb = [0, max_pair 0 ((a.height - b.height)/2), max_pair 0 (a.height - b.height)]; im1 = insert_noexpand 0 ya?align a back; im2 = insert_noexpand (a.width + shim) yb?align b im1; } join_tb shim bg align a b = im2 { w = max_pair a.width b.width; h = a.height + b.height + shim; back = image_new w h a.bands a.format a.coding a.type bg 0 0; xa = [0, max_pair 0 ((b.width - a.width)/2), max_pair 0 (b.width - a.width)]; xb = [0, max_pair 0 ((a.width - b.width)/2), max_pair 0 (a.width - b.width)]; im1 = insert_noexpand xa?align 0 a back; im2 = insert_noexpand xb?align (a.height + shim) b im1; } halign_names = ["Top", "Centre", "Bottom"]; valign_names = ["Left", "Centre", "Right"]; Left_right_item = class Menuaction "_Left to Right" "join two images left-right" { action a b = class _result { _vislevel = 3; shim = Scale "Spacing" 0 100 0; bg_colour = Expression "Background colour" 0; align = Option "Alignment" halign_names 1; _result = map_binary (join_lr shim.value bg_colour.expr align.value) a b; } } Top_bottom_item = class Menuaction "_Top to Bottom" "join two images top-bottom" { action a b = class _result { _vislevel = 3; shim = Scale "Spacing" 0 100 0; bg_colour = Expression "Background colour" 0; align = Option "Alignment" valign_names 1; _result = map_binary (join_tb shim.value bg_colour.expr align.value) a b; } } sep2 = Menuseparator; Array_item = class Menuaction "_Array" "join a list of lists of images into a single image" { action x = class _result { _vislevel = 3; hshim = Scale "Horizontal spacing" (-100) (100) 0; vshim = Scale "Vertical spacing" (-100) (100) 0; bg_colour = Expression "Background colour" 0; halign = Option "Horizontal alignment" valign_names 1; valign = Option "Vertical alignment" halign_names 1; // we can't use map_unary since chop-into-tiles returns a group of // groups and we want to be able to reassemble that // TODO: chop-into-tiles should return an array class which // displays as group but does not have the looping behaviour? _result = (image_set_origin 0 0 @ foldl1 (join_tb vshim.value bg_colour.expr halign.value) @ map (foldl1 (join_lr hshim.value bg_colour.expr valign.value))) (to_list (to_list x)); } } ArrayFL_item = class Menuaction "_Array from List" "join a list of images into a single image" { action x = class _result { _vislevel = 3; ncol = Number "Max. Number of Columns" 1; hshim = Scale "Horizontal spacing" (-100) (100) 0; vshim = Scale "Vertical spacing" (-100) (100) 0; bg_colour = Expression "Background colour" 0; halign = Option "Horizontal alignment" valign_names 1; valign = Option "Vertical alignment" halign_names 1; _l = split_lines ncol.value x.value, is_Group x = split_lines ncol.value x; _result = (image_set_origin 0 0 @ foldl1 (join_tb vshim.value bg_colour.expr halign.value) @ map (foldl1 (join_lr hshim.value bg_colour.expr valign.value))) (to_list (to_list _l)); } } } Image_tile_item = class Menupullright "Til_e" "tile an image across and down" { tile_widget default_type x = class _result { _vislevel = 3; across = Expression "Tiles across" 2; down = Expression "Tiles down" 2; repeat = Option "Tile type" ["Replicate", "Four-way mirror"] default_type; _result = map_unary process x { process image = tile across down image, repeat == 0 = tile across down image'' { image' = insert image.width 0 (fliplr image) image; image'' = insert 0 image.height (fliptb image') image'; } } } Replicate_item = class Menuaction "_Replicate" "replicate image across and down" { action x = tile_widget 0 x; } Fourway_item = class Menuaction "_Four-way Mirror" "four-way mirror across and down" { action x = tile_widget 1 x; } Chop_item = class Menuaction "_Chop Into Tiles" "slice an image into tiles" { action x = class _result { _vislevel = 3; tile_width = Expression "Tile width" 100; tile_height = Expression "Tile height" 100; hoverlap = Expression "Horizontal overlap" 0; voverlap = Expression "Vertical overlap" 0; _result = map_unary (Group @ map Group @ process) x { process x = imagearray_chop tile_width tile_height hoverlap voverlap x; } } } } #separator Pattern_images_item = class Menupullright "_Patterns" "make a variety of useful patterns" { Grey_item = class Menuaction "Grey _Ramp" "make a smooth grey ramp" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; orientation = Option "Orientation" [ "Horizontal", "Vertical" ] 0; foption = Option "Format" ["8 bit", "float"] 0; _result = Image im { gen = im_grey, foption == 0 = im_fgrey; w = to_real nwidth; h = to_real nheight; im = gen w h, orientation == 0 = rot90 (gen h w); } } } Xy_item = class Menuaction "_XY Image" "make a two band image whose pixel values are their coordinates" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; _result = Image (make_xy nwidth nheight); } } Gaussian_item = class Menuaction "Gaussian _Noise" "make an image of gaussian noise" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; mean = Scale "Mean" 0 255 128; deviation = Scale "Deviation" 0 128 50; _result = Image (im_gaussnoise (to_real nwidth) (to_real nheight) mean.value deviation.value); } } Fractal_item = class Menuaction "_Fractal" "make a fractal image" { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; dimension = Scale "Dimension" 2.001 2.999 2.001; _result = Image (im_fractsurf (to_real nsize) dimension.value); } } Checkerboard_item = class Menuaction "_Checkerboard" "make a checkerboard image" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; hpsize = Expression "Horizontal patch size" 8; vpsize = Expression "Vertical patch size" 8; hpoffset = Expression "Horizontal patch offset" 0; vpoffset = Expression "Vertical patch offset" 0; _result = Image (xstripes ^ ystripes) { pixels = make_xy nwidth nheight; xpixels = pixels?0 + to_real hpoffset; ypixels = pixels?1 + to_real vpoffset; make_stripe pix swidth = pix % (swidth * 2) >= swidth; xstripes = make_stripe xpixels (to_real hpsize); ystripes = make_stripe ypixels (to_real vpsize); } } } Grid_item = class Menuaction "Gri_d" "make a grid" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; hspace = Expression "Horizontal line spacing" 8; vspace = Expression "Vertical line spacing" 8; thick = Expression "Line thickness" 1; hoff = Expression "Horizontal grid offset" 4; voff = Expression "Vertical grid offset" 4; _result = Image (xstripes | ystripes) { pixels = make_xy nwidth nheight; xpixels = pixels?0 + to_real hoff; ypixels = pixels?1 + to_real voff; make_stripe pix swidth = pix % swidth < to_real thick; xstripes = make_stripe xpixels (to_real hspace); ystripes = make_stripe ypixels (to_real vspace); } } } Text_item = class Menuaction "_Text" "make a bitmap of some text" { action = class _result { _vislevel = 3; text = String "Text to paint" "Hello world!"; font = Fontname "Use font" Workspaces.Preferences.PAINTBOX_FONT; wrap = Expression "Wrap text at" 500; align = Option "Alignment" [ "Left", "Centre", "Right" ] 0; dpi = Expression "DPI" 300; _result = Image (im_text text.value font.value (to_real wrap) align.value (to_real dpi)); } } New_CIELAB_slice_item = class Menuaction "CIELAB _Slice" "make a slice through CIELAB space" { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; L = Scale "L value" 0 100 50; _result = Image (lab_slice (to_real nsize) L.value); } } sense_option = Option "Sense" [ "Pass", "Reject" ] 0; build fn size = (Image @ image_set_type Image_type.FOURIER @ rotquad @ fn) (im_create_fmask size size); New_ideal_item = class Menupullright "_Ideal Fourier Mask" "make various ideal Fourier filter masks" { High_low_item = class Menuaction "_High or Low Pass" ("make a mask image for a highpass/lowpass " ++ "ideal Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f sense.value fc.value 0 0 0 0; } } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" ("make a mask image for an ring pass/reject " ++ "ideal Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; rw = Scale "Ring width" 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f (sense.value + 6) fc.value rw.value 0 0 0; } } } Band_item = class Menuaction "_Band Pass or Band Reject" ("make a mask image for a band pass/reject " ++ "ideal Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fcx = Scale "Horizontal frequency cutoff" 0.01 0.99 0.5; fcy = Scale "Vertical frequency cutoff" 0.01 0.99 0.5; r = Scale "Radius" 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f (sense.value + 12) fcx.value fcy.value r.value 0 0; } } } } New_gaussian_item = class Menupullright "_Gaussian Fourier Mask" "make various Gaussian Fourier filter masks" { High_low_item = class Menuaction "_High or Low Pass" ("make a mask image for a highpass/lowpass " ++ "Gaussian Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f (sense.value + 4) fc.value ac.value 0 0 0; } } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" ("make a mask image for an ring pass/reject " ++ "Gaussian Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; rw = Scale "Ring width" 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f (sense.value + 10) fc.value rw.value ac.value 0 0; } } } Band_item = class Menuaction "_Band Pass or Band Reject" ("make a mask image for a band pass/reject " ++ "Gaussian Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fcx = Scale "Horizontal frequency cutoff" 0.01 0.99 0.5; fcy = Scale "Vertical frequency cutoff" 0.01 0.99 0.5; r = Scale "Radius" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f (sense.value + 16) fcx.value fcy.value r.value ac.value 0; } } } } New_butterworth_item = class Menupullright "_Butterworth Fourier Mask" "make various Butterworth Fourier filter masks" { High_low_item = class Menuaction "_High or Low Pass" ("make a mask image for a highpass/lowpass " ++ "Butterworth Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; order = Scale "Order" 1 10 2; _result = build param (to_real nsize) { param f = f (sense.value + 2) order.value fc.value ac.value 0 0; } } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" ("make a mask image for an ring pass/reject " ++ "Butterworth Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; rw = Scale "Ring width" 0.01 0.99 0.5; order = Scale "Order" 1 10 2; _result = build param (to_real nsize) { param f = f (sense.value + 8) order.value fc.value rw.value ac.value 0; } } } Band_item = class Menuaction "_Band Pass or Band Reject" ("make a mask image for a band pass/reject " ++ "Butterworth Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fcx = Scale "Horizontal frequency cutoff" 0.01 0.99 0.5; fcy = Scale "Vertical frequency cutoff" 0.01 0.99 0.5; r = Scale "Radius" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; order = Scale "Order" 1 10 2; _result = build param (to_real nsize) { param f = f (sense.value + 14) order.value fcx.value fcy.value r.value ac.value; } } } } } Test_images_item = class Menupullright "Test I_mages" "make a variety of test images" { Eye_item = class Menuaction "_Spatial Response" "image for testing the eye's spatial response" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; factor = Scale "Factor" 0.001 1 0.2; _result = Image (im_eye (to_real nwidth) (to_real nheight) factor.value); } } Zone_plate = class Menuaction "_Zone Plate" "make a zone plate" { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; _result = Image (im_zone (to_real nsize)); } } Frequency_test_chart_item = class Menuaction "_Frequency Testchart" "make a black/white frequency test pattern" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; sheight = Expression "Strip height (pixels)" 10; waves = Expression "Wavelengths" [64, 32, 16, 8, 4, 2]; _result = imagearray_assemble 0 0 (transpose [strips]) { freq_slice wave = Image (sin (grey / wave) > 0); strips = map freq_slice waves.expr; grey = im_fgrey (to_real nwidth) (to_real sheight) * 360 * (to_real nwidth); } } } CRT_test_chart_item = class Menuaction "CRT _Phosphor Chart" "make an image for measuring phosphor colours" { action = class _result { _vislevel = 3; brightness = Scale "Brightness" 0 255 200; psize = Expression "Patch size (pixels)" 32; _result = Image (imagearray_assemble 0 0 [[green, red], [blue, white]]) { black = image_new (to_real psize) (to_real psize) 1 Image_format.FLOAT Image_coding.NOCODING Image_type.B_W 0 0 0; notblack = black + brightness; green = black ++ notblack ++ black; red = notblack ++ black ++ black; blue = black ++ black ++ notblack; white = notblack ++ notblack ++ notblack; } } } Greyscale_chart_item = class Menuaction "_Greyscale" "make a greyscale" { action = class _result { _vislevel = 3; pwidth = Expression "Patch width" 8; pheight = Expression "Patch height" 8; npatches = Expression "Number of patches" 16; _result = Image (image_set_type Image_type.B_W (clip2fmt Image_format.UCHAR wedge)) { wedge = 255 / (to_real npatches - 1) * (int) (strip?0 / to_real pwidth) { strip = make_xy (to_real pwidth * to_real npatches) pheight; } } } } CMYK_test_chart_item = class Menuaction "_CMYK Wedges" "make a set of CMYK wedges" { action = class _result { _vislevel = 3; pwidth = Expression "Patch width" 8; pheight = Expression "Patch height" 8; npatches = Expression "Number of patches" 16; _result = Image (image_set_type Image_type.CMYK (clip2fmt Image_format.UCHAR strips)) { wedge = 255 / (to_real npatches - 1) * (int) (strip?0 / to_real pwidth) { strip = make_xy (to_real pwidth * to_real npatches) pheight; } black = wedge * 0; C = wedge ++ black ++ black ++ black; M = black ++ wedge ++ black ++ black; Y = black ++ black ++ wedge ++ black; K = black ++ black ++ black ++ wedge; strips = imagearray_assemble 0 0 [[C],[M],[Y],[K]]; } } } Colour_atlas_item = class Menuaction "_Colour Atlas" "make a grid of patches grouped around a colour" { action = class _result { _vislevel = 3; start = Colour_picker "Lab" [50,0,0]; nstep = Expression "Number of steps" 9; ssize = Expression "Step size" 10; psize = Expression "Patch size" 32; sepsize = Expression "Separator size" 4; _result = colour_transform_to (get_type start) blocks''' { size = (to_real nstep * 2 + 1) * to_real psize - to_real sepsize; xy = make_xy size size; xy_grid = (xy % to_real psize) < (to_real psize - to_real sepsize); grid = xy_grid?0 & xy_grid?1; blocks = (int) (to_real ssize * ((int) (xy / to_real psize))); lab_start = colour_transform_to Image_type.LAB start; blocks' = blocks - to_real nstep * to_real ssize + Vector (tl lab_start.value); blocks'' = hd lab_start.value ++ Image blocks'; blocks''' = image_set_type Image_type.LAB blocks'', Image grid = 0; } } } } nip2-8.7.0/share/nip2/compat/7.24/_list.def0000644000175000017500000002245013224651032014741 00000000000000/* any l: or all the elements of list l together * * any (map (equal 0) list) == true, if any element of list is zero. * any :: [bool] -> bool */ any = foldr logical_or false; /* all l: and all the elements of list l together * * all (map (==0) list) == true, if every element of list is zero. * all :: [bool] -> bool */ all = foldr logical_and true; /* concat l: join a list of lists together * * concat ["abc","def"] == "abcdef". * concat :: [[*]] -> [*] */ concat l = foldr join [] l; /* delete eq x l: delete the first x from l * * delete equal 'b' "abcdb" == "acdb" * delete :: (* -> bool) -> * -> [*] -> [*] */ delete eq a l = [], l == [] = y, eq a b = b : delete eq a y { b:y = l; } /* difference eq a b: delete b from a * * difference equal "asdf" "ad" == "sf" * difference :: (* -> bool) -> [*] -> [*] -> [*] */ difference = foldl @ converse @ delete; /* drop n l: drop the first n elements from list l * * drop 3 "abcd" == "d" * drop :: num -> [*] -> [*] */ drop n l = l, n <= 0 || l == [] = drop (n - 1) (tl l); /* dropwhile fn l: drop while fn is true * * dropwhile is_digit "1234pigs" == "pigs" * dropwhile :: (* -> bool) -> [*] -> [*] */ dropwhile fn l = [], l == [] = dropwhile fn x, fn a = l { a:x = l; } /* extract n l: extract element at index n from list l */ extract = converse subscript; /* filter fn l: return all elements of l for which predicate fn holds * * filter is_digit "1one2two3three" = "123" * filter :: (* -> bool) -> [*] -> [*] */ filter fn l = foldr addif [] l { addif x l = x : l, fn x; = l; } /* foldl fn st l: fold list l from the left with function fn and start st * * Start from the left hand end of the list (unlike foldr, see below). * foldl is less useful (and much slower). * * foldl fn start [a,b .. z] = ((((st fn a) fn b) ..) fn z) * foldl :: (* -> ** -> *) -> * -> [**] -> * */ foldl fn st l = st, l == [] = foldl fn (fn st (hd l)) (tl l); /* foldl1 fn l: like foldl, but use the 1st element as the start value * * foldl1 fn [1,2,3] == ((1 fn 2) fn 3) * foldl1 :: (* -> * -> *) -> [*] -> * */ foldl1 fn l = [], l == [] = foldl fn (hd l) (tl l); /* foldr fn st l: fold list l from the right with function fn and start st * * foldr fn st [a,b..z] = (a fn (b fn (.. (z fn st)))) * foldr :: (* -> ** -> **) -> ** -> [*] -> ** */ foldr fn st l = st, l == [] = fn (hd l) (foldr fn st (tl l)); /* foldrl fn l: like foldr, but use the 1st element as the start value * * foldr1 fn [1,2,3,4] == (2 fn (3 fn (4 fn 1))) * foldr1 :: (* -> * -> *) -> [*] -> * */ foldr1 fn l = [], l == [] = foldr fn (hd l) (tl l); /* Search a list for an element, returning its index (or -1) * * index (equal 12) [13,12,11] == 1 * index :: (* -> bool) -> [*] -> real */ index fn list = search list 0 { search l n = -1, l == [] = n, fn (hd l) = search (tl l) (n + 1); } /* init l: remove last element of list l * * The dual of tl. * init [1,2,3] == [1,2] * init :: [*] -> [*] */ init l = error "init of []", l == []; = [], tl l == []; = hd l : init (tl l); /* iterate f x: repeatedly apply f to x * * return the infinite list [x, f x, f (f x), ..]. * iterate (multiply 2) 1 == [1, 2, 4, 8, 16, 32, 64 ... ] * iterate :: (* -> *) -> * -> [*] */ iterate f x = x : iterate f (f x); /* join_sep sep l: join a list with a separator * * join_sep ", " (map print [1 .. 4]) == "1, 2, 3, 4" * join_sep :: [*] -> [[*]] -> [*] */ join_sep sep l = foldl1 fn l { fn a b = a ++ sep ++ b; } /* last l: return the last element of list l * * The dual of hd. last [1,2,3] == 3 * last :: [*] -> [*] */ last l = error "last of []", l == [] = hd l, tl l == [] = last (tl l); /* len l: length of list l * (see also is_list_len and friends in predicate.def) * * len :: [*] -> num */ len l = 0, l == [] = 1 + len (tl l); /* limit l: return the first element of l which is equal to its predecessor * * useful for checking for convergence * limit :: [*] -> * */ limit l = error "incorrect use of limit", l == [] || tl l == [] || tl (tl l) == [] = a, a == b = limit (b : x) { a:b:x = l; } /* Turn a function of n args into a function which takes a single arg of an * n-element list. */ list_1ary fn x = fn x?0; list_2ary fn x = fn x?0 x?1; list_3ary fn x = fn x?0 x?1 x?2; list_4ary fn x = fn x?0 x?1 x?2 x?3; list_5ary fn x = fn x?0 x?1 x?2 x?3 x?4; list_6ary fn x = fn x?0 x?1 x?2 x?3 x?4 x?5; list_7ary fn x = fn x?0 x?1 x?2 x?3 x?4 x?5 x?6; /* map fn l: map function fn over list l * * map :: (* -> **) -> [*] -> [**] */ map f l = [], l == []; = f (hd l) : map f (tl l); /* map2 fn l1 l2: map two lists together with fn * * map2 :: (* -> ** -> ***) -> [*] -> [**] -> [***] */ map2 fn l1 l2 = map (list_2ary fn) (zip2 l1 l2); /* map3 fn l1 l2 l3: map three lists together with fn * * map3 :: (* -> ** -> *** -> ****) -> [*] -> [**] -> [***] -> [****] */ map3 fn l1 l2 l3 = map (list_3ary fn) (zip3 l1 l2 l3); /* member l x: true if x is a member of list l * * is_digit == member "0123456789" * member :: [*] -> * -> bool */ member l x = any (map (equal x) l); /* merge b l r: merge two lists based on a bool list * * merge :: [bool] -> [*] -> [*] -> [*] */ merge p l r = [], p == [] || l == [] || r == [] = a : merge z x y, c = b : merge z x y { a:x = l; b:y = r; c:z = p; } /* mkset eq l: remove duplicates from list l using equality function * * mkset :: (* -> bool) -> [*] -> [*] */ mkset eq l = [], l == [] = a : filter (not @ eq a) (mkset eq x) { a:x = l; } /* postfix l r: add r to the end of list l * * The dual of ':'. * postfix :: [*] -> ** -> [*,**] */ postfix l r = l ++ [r]; /* repeat x: make an infinite list of xes * * repeat :: * -> [*] */ repeat x = map (const x) [1..]; /* replicate n x: make n copies of x in a list * * replicate :: num -> * -> [*] */ replicate n x = take n (repeat x); /* reverse l: reverse list l * * reverse :: [*] -> [*] */ reverse l = foldl (converse cons) [] l; /* scan fn st l: apply (fold fn r) to every initial segment of a list * * scan add 0 [1,2,3] == [1,3,6] * scan :: (* -> ** -> *) -> * -> [**] -> [*] */ scan fn = g { g st l = [st], l == [] = st : g (fn st a) x { a:x = l; } } /* sort l: sort list l into ascending order * * sort :: [*] -> [*] */ sort l = sortc less_equal l; /* sortc comp l: sort list l into order using a comparision function * * Uses merge sort (n log n behaviour) * sortc :: (* -> * -> bool) -> [*] -> [*] */ sortc comp l = l, n <= 1 = merge (sortc comp (take n2 l)) (sortc comp (drop n2 l)) { n = len l; n2 = (int) (n / 2); /* merge l1 l2: merge sorted lists l1 and l2 to make a single * sorted list */ merge l1 l2 = l2, l1 == [] = l1, l2 == [] = a : merge x (b : y), comp a b = b : merge (a : x) y { a:x = l1; b:y = l2; } } /* sortpl pl l: sort by a list of predicates * * sortpl :: (* -> bool) -> [*] -> [*] */ sortpl pl l = sortc (test pl) l { /* Comparision function ... put true before false, if equal move on to * the next predicate. */ test pl a b = true, pl == [] = ta, ta != tb = test (tl pl) a b { ta = pl?0 a; tb = pl?0 b; } } /* sortr l: sort list l into descending order * * sortr :: [*] -> [*] */ sortr l = sortc more l; /* split fn l: break a list into sections separated by many fn * * split is_space " hello world " == ["hello", "world"] * split is_space " " == [] * split :: (* -> bool) -> [*] -> [[*]] */ split fn l = [], l == [] || l' == [] = head : split fn tail { nfn = not @ fn; l' = dropwhile fn l; head = takewhile nfn l'; tail = dropwhile nfn l'; } /* splits fn l: break a list into sections separated by a single fn * * split (equal ',') ",,1" == ["", "", "1"] * split :: (* -> bool) -> [*] -> [[*]] */ splits fn l = [], l == [] = head : splits fn tail { fn' = not @ fn; dropif x = [], x == [] = tl x; head = takewhile fn' l; tail = dropif (dropwhile fn' l); } /* splitpl fnl l: split a list up with a list of predicates * * splitpl [is_digit, is_letter, is_digit] "123cat" == ["123", "cat", []] * splitpl :: [* -> bool] -> [*] -> [[*]] */ splitpl fnl l = l, fnl == [] = head : splitpl (tl fnl) tail { head = takewhile (hd fnl) l; tail = dropwhile (hd fnl) l; } /* split_lines n l: split a list into equal length lines * * split_lines 4 "1234567" == ["1234", "567"] * splitl :: int -> [*] -> [[*]] */ split_lines n l = [], l == [] = take n l : split_lines n (drop n l); /* take n l: take the first n elements from list l * take :: num -> [*] -> [*] */ take n l = [], n <= 0 = [], l == [] = hd l : take (n-1) (tl l); /* takewhile fn l: take from the front of a list while predicate fn holds * * takewhile is_digit "123onetwothree" == "123" * takewhile :: (* -> bool) -> [*] -> [*] */ takewhile fn l = [], l == [] = hd l : takewhile fn (tl l), fn (hd l) = []; /* zip2 l1 l2: zip two lists together * * zip2 [1,2] ['a', 'b', 'c'] == [[1,'a'],[2,'b']] * zip2 :: [*] -> [**] -> [[*,**]] */ zip2 l1 l2 = [], l1 == [] || l2 == [] = [hd l1, hd l2] : zip2 (tl l1) (tl l2); /* zip3 l1 l2 l3: zip three lists together * * zip3 [1,2] ['a', 'b', 'c'] [true] == [[1,'a',true]] * zip3 :: [*] -> [**] ->[***] -> [[*,**,***]] */ zip3 l1 l2 l3 = [], l1 == [] || l2 == [] || l3 == [] = [hd l1, hd l2, hd l3] : zip3 (tl l1) (tl l2) (tl l3); nip2-8.7.0/share/nip2/compat/7.24/_Object.def0000644000175000017500000002600513224651032015174 00000000000000/* Lots of little arg checks. Global for convenience. */ check_any = [(const true), _ "any"]; check_bool = [is_bool, _ "boolean"]; check_real = [is_real, _ "real"]; check_ureal = [is_ureal, _ "unsigned real"]; check_preal = [is_preal, _ "positive real"]; check_list = [is_list, _ "list"]; check_real_list = [is_real_list, _ "list of real"]; check_string = [is_string, _ "string"]; check_string_list = [is_string_list, _ "list of string"]; check_int = [is_int, _ "integer"]; check_uint = [is_uint, _ "unsigned integer"]; check_pint = [is_pint, _ "positive integer"]; check_matrix = [is_matrix, _ "rectangular array of real"]; check_matrix_display = [Matrix_display.is_display, _ "0|1|2|3"]; check_image = [is_image, _ "image"]; check_xy_list = [is_xy_list, _ "list of form [[1, 2], [3, 4], [5, 6], ...]"]; check_instance name = [is_instanceof name, name]; check_Image = check_instance "Image"; check_Matrix = [is_Matrix, _ "Matrix"]; check_colour_space = [is_colour_space, join_sep "|" Image_type.colour_spaces.names]; check_rectangular = [is_rectangular, _ "rectangular [[*]]"]; check_Guide = [is_Guide, _ "HGuide|VGuide"]; check_Colour = check_instance (_ "Colour"); check_Mark = check_instance (_ "Mark"); /* Check a set of args to a class. Two members to look at: _check_args and * _check_all. * * - each line in _check_args is [arg, "arg name", [test_fn, "arg type"]] * same number of lines as there are args * * stuff like "arg 2 must be real" * * - each line in _check_all is [test, "description"] * any number of lines * * stuff like "to must be greater than from" * * generate an error dialog with a helpful message on failure. * * Have as a separate function to try to keep the size of _Object down. */ check_args x = error message, badargs != [] || badalls != [] = x { argcheck = x._check_args; allcheck = x._check_all; // indent string indent = " "; // test for a condition in a check line fails test_fail x = ! x?0; // set of failed argcheck indexes badargs = map (extract 1) (filter test_fail (zip2 (map testarg argcheck) [0..])) { testarg x = x?2?0 x?0; } // set of failed allcheck indexes badalls = map (extract 1) (filter test_fail (zip2 (map hd allcheck) [0..])); // the error message message = _ "bad properties for " ++ "\"" ++ x.name ++ "\"\n" ++ argmsg ++ allmsg ++ "\n" ++ _ "where" ++ "\n" ++ arg_types ++ extra; // make the failed argcheck messages ... eg. ""value" should be // real, you passed " etc. argmsg = concat (map fmt badargs) { fmt n = indent ++ "\"" ++ argcheck?n?1 ++ "\"" ++ _ " should be of type " ++ argcheck?n?2?1 ++ ", " ++ _ "you passed" ++ ":\n" ++ indent ++ indent ++ print argcheck?n?0 ++ "\n"; } // make the failed allcheck messages ... eg "condition failed: // x < y" ... don't make a message if any typechecks have // failed, as we'll probably error horribly allmsg = [], badargs != [] = concat (map fmt badalls) ++ _ "you passed" ++ "\n" ++ concat (map fmt_arg argcheck) { fmt n = _ "condition failed" ++ ": " ++ allcheck?n?1 ++ "\n"; fmt_arg l = indent ++ l?1 ++ " = " ++ print l?0 ++ "\n"; } // make arg type notes arg_types = join_sep "\n" (map fmt argcheck) { fmt l = indent ++ l?1 ++ " is of type " ++ l?2?1; } // extra bit at the bottom, if we have any conditions extra = [], allcheck == [] = "\n" ++ _ "and" ++ "\n" ++ all_desc; // make a list of all the allcheck descriptions, with a few // spaces in front all_desc_list = map (join indent @ extract 1) allcheck; // join em up to make a set of condition notes all_desc = join_sep "\n" all_desc_list; } /* Operator overloading stuff. */ Operator_type = class { ARITHMETIC = 1; // eg. add RELATIONAL = 2; // eg. less COMPOUND = 3; // eg. max/mean/etc. COMPOUND_REWRAP = 4; // eg. transpose } Operator op_name fn type symmetric = class { } /* Form the converse of an Operator. */ oo_converse op = Operator (converse_name op.op_name) (converse op.fn) op.type op.symmetric { converse_name x = init x, last x == last "'" = x ++ "'"; } /* Given an operator name, look up the definition. */ oo_binary_lookup op_name = matches?0, matches != [] = error (_ "unknown binary operator" ++ ": " ++ print op_name) { operator_table = [ Operator "add" add Operator_type.ARITHMETIC true, Operator "subtract" subtract Operator_type.ARITHMETIC false, Operator "remainder" remainder Operator_type.ARITHMETIC false, Operator "power" power Operator_type.ARITHMETIC false, Operator "subscript" subscript Operator_type.ARITHMETIC false, Operator "left_shift" left_shift Operator_type.ARITHMETIC false, Operator "right_shift" right_shift Operator_type.ARITHMETIC false, Operator "divide" divide Operator_type.ARITHMETIC false, Operator "join" join Operator_type.ARITHMETIC false, Operator "multiply" multiply Operator_type.ARITHMETIC true, Operator "logical_and" logical_and Operator_type.ARITHMETIC true, Operator "logical_or" logical_or Operator_type.ARITHMETIC true, Operator "bitwise_and" bitwise_and Operator_type.ARITHMETIC true, Operator "bitwise_or" bitwise_or Operator_type.ARITHMETIC true, Operator "eor" eor Operator_type.ARITHMETIC true, Operator "comma" comma Operator_type.ARITHMETIC false, Operator "if_then_else" if_then_else Operator_type.ARITHMETIC false, Operator "equal" equal Operator_type.RELATIONAL true, Operator "not_equal" not_equal Operator_type.RELATIONAL true, Operator "less" less Operator_type.RELATIONAL false, Operator "less_equal" less_equal Operator_type.RELATIONAL false ]; matches = filter test_name operator_table; test_name x = x.op_name == op_name; } /* Given an operator name, look up a function that implements that * operator. */ oo_unary_lookup op_name = matches?0, matches != [] = error (_ "unknown unary operator" ++ ": " ++ print op_name) { operator_table = [ /* Operators. */ Operator "cast_signed_char" cast_signed_char Operator_type.ARITHMETIC false, Operator "cast_unsigned_char" cast_unsigned_char Operator_type.ARITHMETIC false, Operator "cast_signed_short" cast_signed_short Operator_type.ARITHMETIC false, Operator "cast_unsigned_short" cast_unsigned_short Operator_type.ARITHMETIC false, Operator "cast_signed_int" cast_signed_int Operator_type.ARITHMETIC false, Operator "cast_unsigned_int" cast_unsigned_int Operator_type.ARITHMETIC false, Operator "cast_float" cast_float Operator_type.ARITHMETIC false, Operator "cast_double" cast_double Operator_type.ARITHMETIC false, Operator "cast_complex" cast_complex Operator_type.ARITHMETIC false, Operator "cast_double_complex" cast_double_complex Operator_type.ARITHMETIC false, Operator "unary_minus" unary_minus Operator_type.ARITHMETIC false, Operator "negate" negate Operator_type.RELATIONAL false, Operator "complement" complement Operator_type.ARITHMETIC false, Operator "unary_plus" unary_plus Operator_type.ARITHMETIC false, /* Built in projections. */ Operator "re" re Operator_type.ARITHMETIC false, Operator "im" im Operator_type.ARITHMETIC false, Operator "hd" hd Operator_type.ARITHMETIC false, Operator "tl" tl Operator_type.ARITHMETIC false, /* Maths builtins. */ Operator "sin" sin Operator_type.ARITHMETIC false, Operator "cos" cos Operator_type.ARITHMETIC false, Operator "tan" tan Operator_type.ARITHMETIC false, Operator "asin" asin Operator_type.ARITHMETIC false, Operator "acos" acos Operator_type.ARITHMETIC false, Operator "atan" atan Operator_type.ARITHMETIC false, Operator "log" log Operator_type.ARITHMETIC false, Operator "log10" log10 Operator_type.ARITHMETIC false, Operator "exp" exp Operator_type.ARITHMETIC false, Operator "exp10" exp10 Operator_type.ARITHMETIC false, Operator "ceil" ceil Operator_type.ARITHMETIC false, Operator "floor" floor Operator_type.ARITHMETIC false ]; matches = filter test_name operator_table; test_name x = x.op_name == op_name; } /* Find the matching methods in a method table. */ oo_method_lookup table = map (extract 0) (filter (extract 1) table); /* A binary op: a is a class, b may be a class ... eg. "add" a b two obvious ways to find a method: - a.oo_binary_search "add" (+) b - b.oo_binary_search "add'" (converse (+)) a, is_class b if these fail but op is a symmetric operator (eg. a + b == b + a), we can also try reversing the args - a.oo_binary_search "add'" (converse (+)) b - b.oo_binary_search "add" (+) a, is_class b if those fail as well, but this is ==, do pointer equals as a fallback */ oo_binary_function op a b = matches1?0, matches1 != [] = matches2?0, is_class b && matches2 != [] = matches3?0, op.symmetric && matches3 != [] = matches4?0, op.symmetric && is_class b && matches4 != [] = pointer_equal a b, op.op_name == "equal" || op.op_name == "equal'" = not_pointer_equal a b, op.op_name == "not_equal" || op.op_name == "not_equal'" = error (_ "No method found for binary operator." ++ "\n" ++ _ "left" ++ " = " ++ print a ++ "\n" ++ _ "operator" ++ " = " ++ op.op_name ++ "\n" ++ _ "right" ++ " = " ++ print b) { matches1 = oo_method_lookup (a.oo_binary_table op b); matches2 = oo_method_lookup (b.oo_binary_table (oo_converse op) a); matches3 = oo_method_lookup (a.oo_binary_table (oo_converse op) b); matches4 = oo_method_lookup (b.oo_binary_table op a); } /* A binary op: a is not a class, b is a class ... eg. "subtract" a b only one way to find a method: - b.oo_binary_search "subtract'" (converse (-)) a if this fails but op is a symmetric operator (eg. a + b == b + a), we can try reversing the args - b.oo_binary_search "add" (+) a, is_class b if that fails as well, but this is ==, do pointer equals as a fallback */ oo_binary'_function op a b = matches1?0, matches1 != [] = matches2?0, op.symmetric && matches2 != [] = pointer_equal a b, op.op_name == "equal" || op.op_name == "equal'" = not_pointer_equal a b, op.op_name == "not_equal" || op.op_name == "not_equal'" = error (_ "No method found for binary operator." ++ "\n" ++ _ "left" ++ " = " ++ print a ++ "\n" ++ _ "operator" ++ " = " ++ op.op_name ++ "\n" ++ _ "right" ++ " = " ++ print b) { matches1 = oo_method_lookup (b.oo_binary_table (oo_converse op) a); matches2 = oo_method_lookup (b.oo_binary_table op a); } oo_unary_function op x = matches?0, matches != [] = error (_ "No method found for unary operator." ++ "\n" ++ _ "operator" ++ " = " ++ op.op_name ++ "\n" ++ _ "argument" ++ " = " ++ print x) { matches = oo_method_lookup (x.oo_unary_table op); } /* Base class for nip's built-in classes ... base check function, base * operator overload functions. */ _Object = class { check = check_args this; // these should always be defined _check_args = []; _check_all = []; /* Operator overloading stuff. */ oo_binary op x = oo_binary_function (oo_binary_lookup op) this x; oo_binary' op x = oo_binary'_function (oo_binary_lookup op) x this; oo_unary op = oo_unary_function (oo_unary_lookup op) this; oo_binary_table op x = []; oo_unary_table op = []; } nip2-8.7.0/share/nip2/compat/7.24/_predicate.def0000644000175000017500000002672113224651032015733 00000000000000 /* is_colour_space str: is a string one of nip's colour space names */ is_colour_space str = Image_type.colour_spaces.present 0 str; /* is_colour_type n: is a number one of VIPS's colour spaces */ is_colour_type n = Image_type.colour_spaces.present 1 n; /* is_number: is a real or a complex number. */ is_number a = is_real a || is_complex a; /* is_int: is an integer */ is_int a = is_real a && a == (int) a; /* is_uint: is an unsigned integer */ is_uint a = is_int a && a >= 0; /* is_pint: is a positive integer */ is_pint a = is_int a && a > 0; /* is_preal: is a positive real */ is_preal a = is_real a && a > 0; /* is_ureal: is an unsigned real */ is_ureal a = is_real a && a >= 0; /* is_letter c: true if character c is an ASCII letter * * is_letter :: char -> bool */ is_letter c = ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z'); /* is_digit c: true if character c is an ASCII digit * * is_digit :: char->bool */ is_digit x = '0' <= x && x <= '9'; /* A whitespace character. * * is_space :: char->bool */ is_space = member " \n\t"; /* List str starts with section prefix. * * is_prefix "hell" "hello world!" == true * is_prefix :: [*] -> [*] -> bool */ is_prefix prefix str = take (len prefix) str == prefix; /* List str ends with section suffix. * * is_suffix "ld!" "hello world!" == true * is_suffix :: [*] -> [*] -> bool */ is_suffix suffix str = take (len suffix) (reverse str) == reverse suffix; /* List contains seqence. * * is_substr "llo" "hello world!" == true * is_substr :: [*] -> [*] -> bool */ is_substr seq str = any (map (is_prefix seq) (iterate tl str)); /* is_listof p s: true if finite list with p true for every element. */ is_listof p l = is_list l && all (map p l); /* is_string s: true if finite list of char. */ is_string s = is_listof is_char s; /* is_real_list l: is l a list of real numbers ... test each element, * so no infinite lists pls. */ is_real_list l = is_listof is_real l; /* is_string_list l: is l a finite list of finite strings. */ is_string_list l = is_listof is_string l; /* Test list length ... quicker than len x == n for large lists. */ is_list_len n x = true, x == [] && n == 0 = false, x == [] || n == 0 = is_list_len (n - 1) (tl x); is_list_len_more n x = true, x != [] && n == 0 = false, x == [] || n == 0 = is_list_len_more (n - 1) (tl x); is_list_len_more_equal n x = true, n == 0 = false, x == [] = is_list_len_more_equal (n - 1) (tl x); /* is_rectangular l: is l a rectangular data structure */ is_rectangular l = true, !is_list l = true, all (map is_obj l) = true, all (map is_list l) && all (map (not @ is_obj) l) && all (map is_rectangular l) && is_list_len_more 0 l && all (map (is_list_len (len (hd l))) (tl l)) = false { // treat strings as a base type, not [char] is_obj x = !is_list x || is_string x; } /* is_matrix l: is l a list of lists of real numbers, all the same length * * [[]] is the empty matrix, [] is the empty list ... disallow [] */ is_matrix l = l != [] && is_listof is_real_list l && is_rectangular l; /* is_square_matrix l: is l a matrix with width == height */ is_square_matrix l = true, l == [[]] = is_matrix l && is_list_len (len (hd l)) l; /* is_oddmatrix l: is l a matrix with odd-length sides */ is_oddmatrix l = true, l == [[]] = is_matrix l && len l % 2 == 1 && len l?0 % 2 == 1; /* is_odd_square_matrix l: is l a square_matrix with odd-length sides */ is_odd_square_matrix l = is_square_matrix l && len l % 2 == 1; /* Is an item in a column of a table? */ is_incolumn n table x = member (map (extract n) table) x; /* Is HGuide or VGuide. */ is_HGuide x = is_instanceof "HGuide" x; is_VGuide x = is_instanceof "VGuide" x; is_Guide x = is_HGuide x || is_VGuide x; is_Mark x = is_instanceof "Mark" x; is_Group x = is_instanceof "Group" x; is_NULL x = is_instanceof "NULL" x; is_List x = is_instanceof "List" x; is_Image x = is_instanceof "Image" x; is_Region x = is_instanceof "Region" x; is_Real x = is_instanceof "Real" x; is_Matrix x = is_instanceof "Matrix_base" x; is_Vector x = is_instanceof "Vector" x; is_Colour x = is_instanceof "Colour" x; is_Arrow x = is_instanceof "Arrow" x; is_Bool x = is_instanceof "Bool" x; is_Scale x = is_instanceof "Scale" x; is_Rect x = is_instanceof "Rect" x; is_Number x = is_instanceof "Number" x; is_Expression x = is_instanceof "Expression" x; is_String x = is_instanceof "String" x; /* A list of the form [[1,2],[3,4],[5,6]...] */ is_xy_list l = is_list l && all (map xy l) { xy l = is_real_list l && is_list_len 2 l; } // does a nested list structure contain a Group object? contains_Group l = true, is_list l && any (map is_Group l) = any (map contains_Group l), is_list l = false; /* Does an object have a sensible VIPS type? */ has_type x = is_image x || is_Image x || is_Arrow x || is_Colour x; /* Try to get a VIPS image type from an object. */ get_type x = get_type_im x, is_image x = get_type_im x.value, is_Image x = get_type_im x.image.value, is_Arrow x = Image_type.colour_spaces.lookup 0 1 x.colour_space, is_Colour x // slightly odd ... but our display is always 0-255, so it makes sense for // a plain number to be in the same range = Image_type.sRGB, is_real x = error ("get_type: unable to get type from " ++ print x) { // get the type from a VIPS image ... but only if it makes sense with // the rest of the image // we often have Type set wrong, hence the ugly guessing :-( // can have alpha, hence we let bands be one more than you might think get_type_im im = Image_type.LABQ, coding == Image_coding.LABPACK = Image_type.GREY16, type == Image_type.GREY16 && is_bands 1 = Image_type.HISTOGRAM, type == Image_type.HISTOGRAM && (width == 1 || height == 1) = Image_type.B_W, is_bands 1 = Image_type.CMYK, type == Image_type.CMYK && is_bands 4 = type, is_colorimetric && is_bands 3 = Image_type.sRGB, !is_colorimetric && is_bands 3 = Image_type.MULTIBAND, !is_colorimetric && !is_bands 3 = type { type = get_header "Type" im; coding = get_header "Coding" im; bands = get_header "Bands" im; width = get_header "Xsize" im; height = get_header "Ysize" im; // 3-band colorimetric types we allow ... the things which the // Colour/Convert To menu can make, excluding mono. ok_types = [ Image_type.sRGB, Image_type.RGB16, Image_type.LAB, Image_type.LABQ, Image_type.LABS, Image_type.LCH, Image_type.XYZ, Image_type.YXY, Image_type.UCS ]; is_colorimetric = member ok_types type; // is bands n, with an optional alpha (ie. can be n + 1 too) is_bands n = bands == n || bands == n + 1; } } has_format x = has_member "format" x || is_Arrow x || is_image x; get_format x = x.format, has_member "format" x = x.image.format, is_Arrow x = get_header "BandFmt" x, is_image x = error ("get_format: unable to get format from " ++ print x); has_bits x = has_member "bits" x || is_Arrow x || is_image x; get_bits x = x.bits, has_member "bits" x = x.image.bits, is_Arrow x = get_header "Bbits" x, is_image x = error ("get_bits: unable to get bits from " ++ print x); has_bands x = is_image x || has_member "bands" x || is_Arrow x; get_bands x = x.bands, has_member "bands" x = x.image.bands, is_Arrow x = get_header "Bands" x, is_image x = 1, is_real x = len x, is_real_list x = error ("get_bands: unable to get bands from " ++ print x); has_coding x = has_member "coding" x || is_Arrow x || is_image x; get_coding x = x.coding, has_member "coding" x = x.image.coding, is_Arrow x = get_header "Coding" x, is_image x = Image_coding.NOCODING, is_real x = error ("get_coding: unable to get coding from " ++ print x); has_xres x = has_member "xres" x || is_Arrow x || is_image x; get_xres x = x.xres, has_member "xres" x = x.image.xres, is_Arrow x = get_header "Xres" x, is_image x = error ("get_xres: unable to get xres from " ++ print x); has_yres x = has_member "yres" x || is_Arrow x || is_image x; get_yres x = x.yres, has_member "yres" x = x.image.yres, is_Arrow x = get_header "Yres" x, is_image x = error ("get_yres: unable to get yres from " ++ print x); has_xoffset x = has_member "xoffset" x || is_Arrow x || is_image x; get_xoffset x = x.xoffset, has_member "xoffset" x = x.image.xoffset, is_Arrow x = get_header "Xoffset" x, is_image x = error ("get_xoffset: unable to get xoffset from " ++ print x); has_yoffset x = has_member "yoffset" x || is_Arrow x || is_image x; get_yoffset x = x.yoffset, has_member "yoffset" x = x.image.yoffset, is_Arrow x = get_header "Yoffset" x, is_image x = error ("get_yoffset: unable to get yoffset from " ++ print x); has_value = has_member "value"; get_value x = x.value; has_image x = is_image x || is_Image x || is_Arrow x; get_image x = x.value, is_Image x = x.image.value, is_Arrow x = x, is_image x = error ("get_image: unable to get image from " ++ print x); has_number x = is_number x || is_Real x; get_number x = x.value, is_Real x = x, is_number x = error ("get_number: unable to get number from " ++ print x); has_real x = is_real x || is_Real x; get_real x = x.value, is_Real x = x, is_real x = error ("get_real: unable to get real from " ++ print x); has_width x = has_member "width" x || is_image x; get_width x = x.width, has_member "width" x = get_header "Xsize" x, is_image x = error ("get_width: unable to get width from " ++ print x); has_height x = has_member "height" x || is_image x; get_height x = x.height, has_member "height" x = get_header "Ysize" x, is_image x = error ("get_height: unable to get height from " ++ print x); has_left x = has_member "left" x; get_left x = x.left, has_member "left" x = error ("get_left: unable to get left from " ++ print x); has_top x = has_member "top" x; get_top x = x.top, has_member "top" x = error ("get_top: unable to get top from " ++ print x); // like has/get member, but first in a lst of objects has_member_list has objects = filter has objects != []; // need one with the args swapped get_member = converse dot; // get a member from the first of a list of objects to have it get_member_list has get objects = hd members, members != [] = error "unable to get property" { members = map get (filter has objects); } is_hist x = has_image x && (h == 1 || w == 1 || t == Image_type.HISTOGRAM) { im = get_image x; w = get_width im; h = get_height im; t = get_type im; } get_header field x = oo_unary_function get_header_op x, is_class x = get_header_image x, is_image x = error (_ "bad arguments to " ++ "get_header") { get_header_op = Operator "get_header" (get_header field) Operator_type.COMPOUND false; get_header_image im = im_header_int field im, type == itype = im_header_double field im, type == dtype = im_header_string field im, type == stype1 || type == stype2 = error (_ "image has no field " ++ field), type == 0 = error (_ "unknown type for field " ++ field) { type = im_header_get_typeof field im; itype = name2gtype "gint"; dtype = name2gtype "gdouble"; stype1 = name2gtype "VipsRefString"; stype2 = name2gtype "gchararray"; } } get_header_type field x = oo_unary_function get_header_type_op x, is_class x = im_header_get_typeof field x, is_image x = error (_ "bad arguments to " ++ "get_header_type") { get_header_type_op = Operator "get_header_type" (get_header_type field) Operator_type.COMPOUND false; } set_header field value x = oo_unary_function set_header_op x, is_class x = im_copy_set_meta x field value, is_image x = error (_ "bad arguments to " ++ "set_header") { set_header_op = Operator "set_header" (set_header field value) Operator_type.COMPOUND false; } nip2-8.7.0/share/nip2/compat/7.24/Widgets.def0000644000175000017500000000235313224651032015235 00000000000000Widget_slider_item = class Menuaction "_Scale" "make a new scale widget" { icon = "nip-slider-16.png"; action = Scale "untitled scale" 0 255 128; } Widget_toggle_item = class Menuaction "_Toggle" "make a new toggle widget" { action = Toggle "untitled toggle" false; } Widget_option_item = class Menuaction "_Option" "make a new option widget" { action = Option "untitled option" ["option0", "option1"] 0; } Widget_string_item = class Menuaction "St_ring" "make a new string widget" { action = String "Enter a string" "sample text"; } Widget_number_item = class Menuaction "_Number" "make a new number widget" { action = Number "Enter a number" 42; } Widget_expression_item = class Menuaction "_Expression" "make a new expression widget" { action = Expression "Enter an expression" 42; } Widget_pathname_item = class Menuaction "_File Chooser" "make a new file chooser widget" { action = Pathname "Pick a file" "$VIPSHOME/share/$PACKAGE/data/print_test_image.v"; } Widget_font_item = class Menuaction "F_ont Chooser" "make a new font chooser widget" { action = Fontname "Pick a font" Workspaces.Preferences.PAINTBOX_FONT; } Widget_clock_item = class Menuaction "_Clock" "make a new clock widget" { action = Clock 1 1; } nip2-8.7.0/share/nip2/compat/7.24/Colour.def0000644000175000017500000003610013224651032015067 00000000000000 Colour_new_item = class Menupullright (_ "_New") (_ "make a patch of colour") { Widget_colour_item = class Menuaction (_ "_Colour") (_ "make a patch of colour") { action = Colour_picker "Lab" [50,0,0]; } LAB_colour = class Menuaction (_ "CIE Lab _Picker") (_ "pick colour in CIE Lab space") { action = widget "Lab" [50, 0, 0]; // ab_slice size size = 512; // range of values ... +/- 128 for ab range = 256; // map xy in slice image to ab and back xy2ab x = x / (size / range) - 128; ab2xy a = (a + 128) * (size / range); widget space default_value = class Colour space _result { _vislevel = 3; [_L, _a, _b] = default_value; L = Scale "Lightness" 0 100 _L; ab_slice = Image (lab_slice size L.value); point = Mark ab_slice (ab2xy _a) (ab2xy _b); _result = [L.value, xy2ab point.left, xy2ab point.top]; Colour_edit colour_space value = widget colour_space value; } } } Colour_to_colour_item = class Menuaction (_ "Con_vert to Colour") (_ "convert anything to a colour") { action x = to_colour x; } #separator Colour_convert_item = class Menupullright (_ "_Colourspace") (_ "convert to various colour spaces") { spaces = Image_type.image_colour_spaces; conv dest x = class _result { _vislevel = 3; to = Option_enum spaces (_ "Convert to") (spaces.get_name dest); _result = map_unary (colour_transform_to to.value_thing) x; } Mono_item = class Menuaction (_ "_Monochrome") (_ "convert to mono colourspace") { action x = conv Image_type.B_W x; } sRGB_item = class Menuaction (_ "_sRGB") (_ "convert to sRGB colourspace") { action x = conv Image_type.sRGB x; } GREY16_item = class Menuaction (_ "_GREY16") (_ "convert to GREY16 colourspace") { action x = conv Image_type.GREY16 x; } RGB16_item = class Menuaction (_ "_RGB16") (_ "convert to RGB16 colourspace") { action x = conv Image_type.RGB16 x; } Lab_item = class Menuaction (_ "_Lab") (_ "convert to Lab colourspace (float Lab)") { action x = conv Image_type.LAB x; } LabQ_item = class Menuaction (_ "Lab_Q") (_ "convert to LabQ colourspace (32-bit Lab)") { action x = conv Image_type.LABQ x; } LabS_item = class Menuaction (_ "Lab_S") (_ "convert to LabS colourspace (48-bit Lab)") { action x = conv Image_type.LABS x; } LCh_item = class Menuaction (_ "L_Ch") (_ "convert to LCh colourspace") { action x = conv Image_type.LCH x; } XYZ_item = class Menuaction (_ "_XYZ") (_ "convert to XYZ colourspace") { action x = conv Image_type.XYZ x; } Yxy_item = class Menuaction (_ "_Yxy") (_ "convert to Yxy colourspace") { action x = conv Image_type.YXY x; } UCS_item = class Menuaction (_ "_UCS") (_ "convert to UCS colourspace") { action x = conv Image_type.UCS x; } } /* mark objects as being in various colourspaces */ Colour_tag_item = class Menupullright (_ "_Tag As") (_ "tag object as being in various colour spaces") { spaces = Image_type.image_colour_spaces; tag dest x = class _result { _vislevel = 3; to = Option_enum spaces (_ "Tag as") (spaces.get_name dest); _result = map_unary (image_set_type to.value_thing) x; } Mono_item = class Menuaction (_ "_Monochrome") (_ "tag as being in mono colourspace") { action x = tag Image_type.B_W x; } sRGB_item = class Menuaction (_ "_sRGB") (_ "tag as being in sRGB colourspace") { action x = tag Image_type.sRGB x; } RGB16_item = class Menuaction (_ "_RGB16") (_ "tag as being in RGB16 colourspace") { action x = tag Image_type.RGB16 x; } GREY16_item = class Menuaction (_ "_GREY16") (_ "tag as being in GREY16 colourspace") { action x = tag Image_type.GREY16 x; } Lab_item = class Menuaction (_ "_Lab") (_ "tag as being in Lab colourspace (float Lab)") { action x = tag Image_type.LAB x; } LabQ_item = class Menuaction (_ "Lab_Q") (_ "tag as being in LabQ colourspace (32-bit Lab)") { action x = tag Image_type.LABQ x; } LabS_item = class Menuaction (_ "Lab_S") (_ "tag as being in LabS colourspace (48-bit Lab)") { action x = tag Image_type.LABS x; } LCh_item = class Menuaction (_ "L_Ch") (_ "tag as being in LCh colourspace") { action x = tag Image_type.LCH x; } XYZ_item = class Menuaction (_ "_XYZ") (_ "tag as being in XYZ colourspace") { action x = tag Image_type.XYZ x; } Yxy_item = class Menuaction (_ "_Yxy") (_ "tag as being in Yxy colourspace") { action x = tag Image_type.YXY x; } UCS_item = class Menuaction (_ "_UCS") (_ "tag as being in UCS colourspace") { action x = tag Image_type.UCS x; } } Colour_temperature_item = class Menupullright (_ "Colour Te_mperature") (_ "colour temperature conversions") { Whitepoint_item = class Menuaction (_ "_Move Whitepoint") (_ "change whitepoint") { action x = class _result { _vislevel = 3; old_white = Option_enum Whitepoints (_ "Old whitepoint") "D65"; new_white = Option_enum Whitepoints (_ "New whitepoint") "D50"; _result = map_unary process x { process im = im''' { im' = colour_transform_to Image_type.XYZ im; im'' = im' * (new_white.value_thing / old_white.value_thing); im''' = colour_transform_to (get_type im) im''; } } } } D65_to_D50_item = class Menupullright (_ "D_65 to D50") (_ "complex conversion") { XYZ_minimal_item = class Menuaction (_ "_Minimal") (_ "D65 to D50 using the minimal 3x3 matrix in XYZ") { action x = map_unary process x { process im = im''' { im' = colour_transform_to Image_type.XYZ im; im'' = recomb D652D50_direct im'; im''' = colour_transform_to (get_type im) im''; } } } Bradford_item = class Menuaction (_ "_Bradford") (_ "D65 to D50 in Bradford cone space") { action x = map_unary process x { process im = im''' { im' = colour_transform_to Image_type.XYZ im; im'' = im_D652D50 im'; im''' = colour_transform_to (get_type im) im''; } } } } D50_to_D65_item = class Menupullright (_ "D_50 to D65") (_ "complex conversion") { XYZ_minimal_item = class Menuaction (_ "_Minimal") (_ "D50 to D65 using the minimal 3x3 matrix in XYZ") { action x = map_unary process x { process im = im''' { im' = colour_transform_to Image_type.XYZ im; im'' = recomb D502D65_direct im'; im''' = colour_transform_to (get_type im) im''; } } } Bradford_item = class Menuaction (_ "_Bradford") (_ "D60 to D65 in Bradford cone space") { action x = map_unary process x { process im = im''' { im' = colour_transform_to Image_type.XYZ im; im'' = im_D502D65 im'; im''' = colour_transform_to (get_type im) im''; } } } } Lab_to_D50XYZ_item = class Menuaction (_ "_Lab to D50 XYZ") (_ "Lab to XYZ with a D50 whitepoint") { action x = map_unary (colour_unary im_D50Lab2XYZ) x; } D50XYZ_to_Lab_item = class Menuaction (_ "D50 _XYZ to Lab") (_ "XYZ to Lab with a D50 whitepoint") { action x = map_unary (colour_unary im_D50XYZ2Lab) x; } } Colour_icc_item = class Menupullright (_ "_ICC") (_ "transform with ICC profiles") { print_profile = "$VIPSHOME/share/$PACKAGE/data/cmyk.icm"; monitor_profile = "$VIPSHOME/share/$PACKAGE/data/sRGB.icm"; guess_profile image = monitor_profile, has_bands image && get_bands image == 3 = print_profile; render_intents = Option_enum Render_intent.names (_ "Render intent") (_ "Absolute"); Export_item = class Menuaction (_ "_Export") (_ "export from PCS to device space") { action x = class _result { _vislevel = 3; profile = Pathname (_ "Output profile") print_profile; intent = render_intents; depth = Option (_ "Output depth") [_ "8 bit", _ "16 bit"] 0; _result = map_unary process x { process image = icc_export [8, 16]?depth profile.value intent.value_thing lab { lab = colour_transform_to Image_type.LABQ image; } } } } Import_item = class Menuaction (_ "_Import") (_ "import from device space to PCS") { action x = class _result { _vislevel = 3; embedded = Toggle (_ "Use embedded profile if possible") false; profile = Pathname (_ "Default input profile") (guess_profile x); intent = render_intents; _result = map_unary process x { process image = icc_import_embedded intent.value_thing image, get_header_type "icc-profile-data" image != 0 && embedded = icc_import profile.value intent.value_thing image; } } } Transform_item = class Menuaction (_ "_Transform") (_ "transform between two device spaces") { action x = class _result { _vislevel = 3; in_profile = Pathname (_ "Input profile") (guess_profile x); out_profile = Pathname (_ "Output profile") print_profile; intent = render_intents; _result = map_unary process x { process image = icc_transform in_profile.value out_profile.value intent.value_thing image; } } } AC2RC_item = class Menuaction (_ "_Absolute to Relative") (_ "absolute to relative colorimetry using device profile") { action x = class _result { _vislevel = 3; profile = Pathname (_ "Pick a profile") (guess_profile x); _result = map_unary process x { process image = icc_ac2rc profile.value lab { lab = colour_transform_to Image_type.LAB image; } } } } } Colour_rad_item = class Menupullright (_ "_Radiance") (_ "convert to and from Radiance packed format") { Unpack_item = class Menuaction (_ "Unpack") (_ "unpack Radiance format to float") { action x = map_unary rad2float x; } Pack_item = class Menuaction (_ "Pack") (_ "pack 3-band float to Radiance format") { action x = map_unary float2rad x; } } #separator Colour_dE_item = class Menupullright (_ "_Difference") (_ "calculate colour difference") { /* Apply a converter to an object ... convert image or colour (since * we can guess the colour space we're converting from), don't convert * matrix or vector (since we can't tell ... assume it's in the right * space already). */ apply_cvt cvt x = cvt x, is_Image x || is_Colour x || is_image x = x; diff cvt in1 in2 = abs_vec (apply_cvt cvt in1 - apply_cvt cvt in2); /* Converter to LAB. */ lab_cvt = colour_transform_to Image_type.LAB; /* Converter to UCS ... plain UCS is Ch form, so we go LAB again after * to make sure we get a rectangular coord system. */ ucs_cvt = colour_transform Image_type.LCH Image_type.LAB @ colour_transform_to Image_type.UCS; CIEdE76_item = class Menuaction (_ "CIE dE _76") (_ "calculate CIE dE 1976 for two objects") { action a b = map_binary (diff lab_cvt) a b; } CIEdE00_item = class Menuaction (_ "CIE dE _00") (_ "calculate CIE dE 2000 for two objects") { action a b = map_binary (colour_binary (_ "im_dE00_fromLab") im_dE00_fromLab) a b; } UCS_item = class Menuaction (_ "_CMC(l:l)") (_ "calculate CMC(l:l) for two objects") { action a b = map_binary (diff ucs_cvt) a b; } } Colour_adjust_item = class Menupullright (_ "_Adjust") (_ "alter colours in various ways") { Recombination_item = class Menuaction (_ "_Recombination") (_ "recombine colour with an editable matrix") { action x = class _result { _vislevel = 3; matrix = Matrix_rec (identity_matrix (bands x)) { // try to guess a sensible value for the size of the // matrix bands x = x.bands, is_Image x || is_Colour x = x.width, is_Matrix x = bands x.value?0, is_Group x = x.bands, has_member "bands" x = 3; } _result = map_unary (recomb matrix) x; } } Cast_item = class Menuaction (_ "_Cast") (_ "displace neutral axis in CIE Lab") { action x = class _result { _vislevel = 3; gr = Scale "Green-red" (-20) 20 0; by = Scale "Blue-yellow" (-20) 20 0; _result = map_unary adjust_cast x { adjust_cast in = colour_transform_to (get_type in) in'' { in' = colour_transform_to Image_type.LAB in; in'' = in' + Vector [0, gr.value, by.value]; } } } } HSB_item = class Menuaction (_ "_HSB") (_ "adjust hue-saturation-brightness in LCh") { action x = class _result { _vislevel = 3; h = Scale "Hue" 0 360 0; s = Scale "Saturation" 0.01 5 1; b = Scale "Brightness" 0.01 5 1; _result = map_unary adjust_hsb x { adjust_hsb in = colour_transform_to (get_type in) in'' { in' = colour_transform_to Image_type.LCH in; in'' = in' * Vector [b.value, s.value, 1] + Vector [0, 0, h.value]; } } } } } Colour_similar_item = class Menuaction (_ "_Similar Colour") (_ "find pixels with a similar colour") { action x = class _result { _vislevel = 3; target_colour = Colour_picker "Lab" [50, 0, 0]; t = Scale "dE threshold" 0 100 10; _result = map_unary match x { match in = abs_vec (in' - target) < t { target = colour_transform_to Image_type.LAB target_colour; in' = colour_transform_to Image_type.LAB in; } } } } #separator Colour_chart_to_matrix_item = class Menuaction (_ "_Measure Colour Chart") (_ "measure average pixel values for a colour chart image") { action x = class _result { _vislevel = 3; pacross = Expression (_ "Patches across chart") 6; pdown = Expression (_ "Patches down chart") 4; _result = map_unary chart x { chart in = measure 0 0 in.width in.height (to_real pacross) (to_real pdown) in; } } } Colour_matrix_to_chart_item = class Menuaction (_ "Make Synth_etic Colour Chart") (_ "make a colour chart image from a matrix of measurements") { action x = class _result { _vislevel = 3; pacross = Expression (_ "Patches across chart") 6; pdown = Expression (_ "Patches down chart") 4; pwidth = Expression (_ "Patch width in pixels") 50; pheight = Expression (_ "Patch height in pixels") 50; bwidth = Expression (_ "Border between patches") 0; _result = map_unary build_chart x { build_chart in = Image (imagearray_assemble (to_real bwidth) (to_real bwidth) patch_table) { // patch numbers for row starts rowstart = map (multiply (to_real pacross)) [0 .. to_real pdown - 1]; // assemble patches ... each one a pixel value patches = map (take (to_real pacross)) (map (converse drop in.value) rowstart); // make an n-band constant image from eg. [1,2,3] // we don't know the format .. use sRGB (well, why not?) patch v = image_new (to_real pwidth) (to_real pheight) (len v) Image_format.FLOAT Image_coding.NOCODING Image_type.sRGB (Vector v) 0 0; // make an image for each patch patch_table = map (map patch) patches; } } } } Colour_plot_ab_scatter_item = class Menuaction (_ "_Plot ab Scatter") (_ "plot an ab scatter histogram") { action x = class _result { _vislevel = 3; bins = Expression (_ "Number of bins on each axis") 8; _result = map_unary plot_scatter x { plot_scatter in = Image (bg * (((90 / mx) * hist) ++ blk)) { lab = colour_transform_to Image_type.LAB in.value; ab = (unsigned char) ((lab?1 ++ lab?2) + 128); hist = hist_find_nD bins.expr ab; mx = max hist; bg = lab_slice bins.expr 1; blk = 1 + im_black (to_real bins) (to_real bins) 2; } } } } nip2-8.7.0/share/nip2/compat/7.24/_joe_extra.def0000644000175000017500000002725013224651032015751 00000000000000//////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// Frame_item = class Menupullright "Picture _Frame" "working with images of frames" { //////////////////////////////////////////////////////////////////////////////////// Build_frame_item = class Menupullright "_Build Frame From" "builds a new frame from image a and places it around image b" { //////////////////////////////////////////////////////////////////////////////////// Frame_corner_item = class Menuaction "_Frame Corner" "copies and extends a frame corner, a, to produce a complete frame to fit round a given image, b" { prefs = Workspaces.Preferences; action a b = class _result { _check_args = [ [a, "a", check_Image], [b, "b", check_Image] ]; _check_all = [ [a.coding == b.coding && a.bands == b.bands, "a.coding == b.coding && a.bands == b.bands"] ]; _vislevel = 3; ppcm = Expression "Number of pixels per cm" 25; /* Given the value of ppcm, distance between the inner edge of the frame * and the outer edge of the image. +ve values mean the frame overlaps * the image. */ overlap = Expression "Size of frame overlap in cm" 0; variables = Frame_variables 0; _type = Image_type.colour_spaces.get_name b.type; //If applied the count colour be seen for -ve values of overlap mount_options = Mount_options _type ppcm.expr; _cs = variables.corner_section.value; _ms = variables.middle_section.value; _ov = ppcm.expr * overlap.expr; _sf = variables.scale_factor.expr; _bf = variables.blend_fraction.value; //Scale frame image if required. _a = a, _sf == 1; = a, _sf == 0; = Image (resize Interpolate_bilinear _sf _sf a.value); _im_w = b.width; _im_h = b.height + mount_options._los, mount_options.apply = b.height; _os = mount_options._los, mount_options.apply = 0; _cl = Vector mount_options.mount_colour.value, mount_options.apply = 0; //Produce scaled and resized frame. frame = corner_frame _a _im_w _im_h _ov _cs _ms _bf; //Resize image canvas and applied mount colour as required. _pos_im = frame_position_image b frame _os _cl; //Wrap frame round image. _result = if (frame == 0) then _pos_im else frame; } } //////////////////////////////////////////////////////////////////////////////////// Simple_frame_item = class Menuaction "_Simple Frame" "extends or shortens the central sections of a simple frame, a, to fit round a given image, b" { prefs = Workspaces.Preferences; action a b = class _result { _check_args = [ [a, "a", check_Image], [b, "b", check_Image] ]; _check_all = [ [a.coding == b.coding && a.bands == b.bands, "a.coding == b.coding && a.bands == b.bands"] ]; _vislevel = 3; ppcm = Expression "Number of pixels per cm" 25; /* Given the value of ppcm, distance between the inner edge of the frame * and the outer edge of the image. +ve values mean the frame overlaps * the image. */ overlap = Expression "Size of frame overlap in cm" 0; variables = Frame_variables 0; _type = Image_type.colour_spaces.get_name b.type; //If applied the count colour be seen for -ve values of overlap mount_options = Mount_options _type ppcm.expr; _cs = variables.corner_section.value; _ms = variables.middle_section.value; _ov = ppcm.expr * overlap.expr; _sf = variables.scale_factor.expr; _bf = variables.blend_fraction.value; //Scale frame image if required. _a = a, _sf == 1; = a, _sf == 0; = Image (resize Interpolate_bilinear _sf _sf a.value); _im_w = b.width; _im_h = b.height + mount_options._los, mount_options.apply = b.height; _os = mount_options._los, mount_options.apply = 0; _cl = Vector mount_options.mount_colour.value, mount_options.apply = 0; //Produce scaled and resized frame. frame = simple_frame _a _im_w _im_h _ov _cs _ms _bf variables.option; //Resize image canvas and applied mount colour as required. _pos_im = frame_position_image b frame _os _cl; //Wrap frame round image. _result = if (frame == 0) then _pos_im else frame; } } //////////////////////////////////////////////////////////////////////////////////// Complex_frame_item = class Menuaction "_Complex Frame" "extends or shortens the central sections of a frame a, preserving any central edge details, to fit image b" { prefs = Workspaces.Preferences; action a b = class _result { _check_args = [ [a, "a", check_Image], [b, "b", check_Image] ]; _check_all = [ [a.coding == b.coding && a.bands == b.bands, "a.coding == b.coding && a.bands == b.bands"] ]; _vislevel = 3; ppcm = Expression "Number of pixels per cm" 25; /* Given the value of ppcm, distance between the inner edge of the frame * and the outer edge of the image. +ve values mean the frame overlaps * the image. */ overlap = Expression "Size of frame overlap in cm" 0; variables = Frame_variables 1; _type = Image_type.colour_spaces.get_name b.type; //If applied the count colour be seen for -ve values of overlap mount_options = Mount_options _type ppcm.expr; _cs = variables.corner_section.value; _es = variables.edge_section.value; _ms = variables.middle_section.value; _ov = ppcm.expr * overlap.expr; _sf = variables.scale_factor.expr; _bf = variables.blend_fraction.value; _a = a, _sf == 1; = a, _sf == 0; = Image (resize Interpolate_bilinear _sf _sf a.value); _im_w = b.width; _im_h = b.height + mount_options._los, mount_options.apply = b.height; _os = mount_options._los, mount_options.apply = 0; _cl = Vector mount_options.colour.value, mount_options.apply = 0; //Produce scaled and resized frame. frame = complex_frame _a _im_w _im_h _ov _cs _es _ms _bf variables.option; //Resize image canvas and applied mount colour as required. _pos_im = frame_position_image b frame _os _cl; //Wrap frame round image. _result = if (frame == 0) then _pos_im else frame; } } } //////////////////////////////////////////////////////////////////////////////////// Straighten_frame_item = class Menuaction "_Straighten Frame" "uses four points to square up distorted images of frames" { action a = Perspective_item.action a; } }; //////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// Select_item = class Menupullright "_Select" "select user defined areas of an image" { prefs = Workspaces.Preferences; /* Option toggle used to define whether the user is replacing a * dark or a light area. */ _control = Option "Make" [ "Selection Brighter", "Selection Darker", "Selection Black", "Selection White", "Background Black", "Background White", "Mask" ] 4; control_selection mask im no = (if mask then im * 1.2 else im * 1), no == 0 = (if mask then im * 0.8 else im * 1), no == 1 = (if mask then 0 else im), no == 2 = (if mask then 255 else im), no == 3 = (if mask then im else 0), no == 4 = (if mask then im else 255), no == 5 = mask; Elipse = class Menuaction "_Ellipse" "use a line/arrow x to define the center point radius and direction of an ellipse" { action x = class _result { _vislevel = 3; control = _control; width = Scale "Width" 0.01 1 0.5; _result = control_selection mask im control { mask = select_ellipse x width.value; im = x.image; } } } Tetragon = class Menuaction "_Tetragon" "selects the convex area defined by four points" { action a b c d = class _result { _vislevel = 3; control = _control; _result = control_selection mask im control { mask = select_tetragon a b c d; im = get_image a; } } } Polygon = class Menuaction "_Polygon" "selects a polygon from an ordered group of points" { action pt_list = class _result { _vislevel = 3; control = _control; _result = control_selection mask im control { mask = select_polygon pt_list; im = get_image ((pt_list.value)?0); } } } sep1 = Menuseparator; Threshold_item = class Menuaction "Thres_hold" "simple image threshold" { action x = class _result { _vislevel = 3; t = Scale "Threshold" 0 mx (mx / 2) { mx = Image_format.maxval x.format, is_Image x = 255; } _result = map_unary (more t.value) x; } } Threshold_percent_item = class Menuaction "Per_cent Threshold" "threshold at a percentage of pixels" { action x = class _result { _vislevel = 3; t = Scale "Percentage of pixels" 0 100 50; _result = map_unary (more (hist_thresh (t.value / 100) x)) x; } } }; //////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// Perspective_match_item = class Menuaction "_Perspective Match" "rotate, scale and skew one image to match another" { action x y = class _result { _vislevel = 3; // try to find an image ... for a group, get the first item find_image x = x, is_Image x = find_image x?0, is_list x = find_image x.value, is_class x && has_value x = error "unable to find image"; _a = find_image x; _b = find_image y; ap1 = Mark_relative _a 0.1 0.1; ap2 = Mark_relative _a 0.9 0.1; ap3 = Mark_relative _a 0.1 0.9; ap4 = Mark_relative _a 0.9 0.9; bp1 = Mark_relative _b 0.1 0.1; bp2 = Mark_relative _b 0.9 0.1; bp3 = Mark_relative _b 0.1 0.9; bp4 = Mark_relative _b 0.9 0.9; _result = map_binary process x y { f1 = _a.width / _b.width; f2 = _a.height / _b.height; rl = sort_pts_clockwise [ap1, ap2, ap3, ap4]; pl = sort_pts_clockwise [bp1, bp2, bp3, bp4]; to = [ rl?0.left, rl?0.top, rl?1.left, rl?1.top, rl?2.left, rl?2.top, rl?3.left, rl?3.top ]; from = [ pl?0.left * f1, pl?0.top * f2, pl?1.left * f1, pl?1.top * f2, pl?2.left * f1, pl?2.top * f2, pl?3.left * f1, pl?3.top * f2 ]; trans = perspective_transform to from; process a b = transform 1 0 trans b2 { b2 = resize Interpolate_bilinear f1 f2 b, (f1 >= 1 && f2 >= 1) || (f1 >= 1 && f2 >= 1) = resize Interpolate_bilinear f1 1 b1 {b1 = resize Interpolate_bilinear 1 f2 b;} } } } }; //////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// Perspective_item = class Menuaction "Pe_rspective Distort" "rotate, scale and skew an image with respect to defined points" { action x = class _result { _vislevel = 3; // try to find an image ... for a group, get the first item find_image x = x, is_Image x = find_image x?0, is_list x = find_image x.value, is_class x && has_value x = error "unable to find image"; _a = find_image x; dir = Option "Select distort direction" [ "Distort to points", "Distort to corners" ] 1; ap1 = Mark_relative _a 0.1 0.1; ap2 = Mark_relative _a 0.9 0.1; ap3 = Mark_relative _a 0.9 0.9; ap4 = Mark_relative _a 0.1 0.9; _result = map_unary process x { trans = [perspective_transform to from, perspective_transform from to]?(dir.value) { rl = sort_pts_clockwise [ap1, ap2, ap3, ap4]; to = [(rl?0).left, (rl?0).top, (rl?1).left, (rl?1).top, (rl?2).left, (rl?2).top, (rl?3).left, (rl?3).top]; from=[0, 0, (_a.width - 1), 0, (_a.width - 1), (_a.height - 1), 0, (_a.height - 1)]; } process a = transform 1 0 trans a; } } }; nip2-8.7.0/share/nip2/compat/7.24/_generate.def0000644000175000017500000000470713224651032015565 00000000000000 /* make an image of size x by y whose pixels are their coordinates. */ make_xy x y = im_make_xy (to_real x) (to_real y); /* make an image with the specified properties ... pixel is (eg.) * Vector [0, 0, 0], or 12. If coding == labq, we ignore bands, format and * type, generate a 3 band float image, and lab2labq it before handing it * back. */ image_new w h b fmt coding type pixel xoff yoff = embed 1 0 0 w h im'''' { b' = 3, coding == Image_coding.LABPACK = b; fmt' = Image_format.FLOAT, coding == Image_coding.LABPACK = fmt; type' = Image_type.LAB, coding == Image_coding.LABPACK = type; im = im_black 1 1 (to_real b') + pixel; im' = clip2fmt fmt' im; im'' = im_Lab2LabQ im', coding == Image_coding.LABPACK; = im'; im''' = image_set_type type' im''; im'''' = image_set_origin xoff yoff im'''; } /* generate a slice of LAB space size x size pixels for L* == l */ lab_slice size l = image_set_type Image_type.LAB im { L = image_new size size 1 Image_format.FLOAT Image_coding.NOCODING Image_type.B_W l 0 0; A1 = im_fgrey (to_real size) (to_real size); /* im_fgrey always makes 0-1, so these ranges can be wired in. */ A2 = A1 * 256 - 128; A4 = im_rot90 A2; im = image_set_origin (size / 2) (size / 2) (L ++ A2 ++ A4); } /* Look at Image, try to make a Colour (failing that, a Vector) which is white * for that image type. */ image_white im = colour_transform_to type white_lab, bands == 3 && coding == Image_coding.NOCODING && colour_spaces.present 1 type = white_lab, coding == Image_coding.LABPACK = Vector (replicate bands (max_value.lookup 1 0 format)) { bands = im.bands; type = im.type; format = im.format; coding = im.coding; colour_spaces = Image_type.colour_spaces; // white as LAB white_lab = Colour "Lab" [100, 0, 0]; // maximum value for this numeric type max_value = Table [ [255, Image_format.DPCOMPLEX], [255, Image_format.DOUBLE], [255, Image_format.COMPLEX], [255, Image_format.FLOAT], [2 ** 31 - 1, Image_format.INT], [2 ** 32 - 1, Image_format.UINT], [2 ** 15 - 1, Image_format.SHORT], [2 ** 16 - 1, Image_format.USHORT], [2 ** 7 - 1, Image_format.CHAR], [2 ** 8 - 1, Image_format.UCHAR] ]; } /* Make a seperable gaussian mask. */ matrix_gaussian_blur radius = im_gauss_imask_sep (radius / 3) 0.2; /* Make a seperable square mask. */ matrix_blur radius = Matrix_con (sum mask_sq_line) 0 [mask_sq_line] { mask_sq_line = replicate (2 * radius - 1) 1; } nip2-8.7.0/share/nip2/compat/7.24/Math.def0000644000175000017500000003157713224651032014532 00000000000000Math_arithmetic_item = class Menupullright "_Arithmetic" "basic arithmetic for objects" { Add_item = class Menuaction "_Add" "add a and b" { action a b = map_binary add a b; } Subtract_item = class Menuaction "_Subtract" "subtract b from a" { action a b = map_binary subtract a b; } Multiply_item = class Menuaction "_Multiply" "multiply a by b" { action a b = map_binary multiply a b; } Divide_item = class Menuaction "_Divide" "divide a by b" { action a b = map_binary divide a b; } Remainder_item = class Menuaction "_Remainder" "remainder after integer division of a by b" { action a b = map_binary remainder a b; } sep1 = Menuseparator; Absolute_value_item = class Menuaction "A_bsolute Value" "absolute value of x" { action x = map_unary abs x; } Absolute_value_vector_item = class Menuaction "Absolute Value _Vector" "like Absolute Value, but treat pixels as vectors" { action x = map_unary abs_vec x; } Sign_item = class Menuaction "S_ign" "unit vector" { action x = map_unary sign x; } Negate_item = class Menuaction "_Negate" "multiply by -1" { action x = map_unary unary_minus x; } } Math_trig_item = class Menupullright "_Trigonometry" "trigonometry operations (all in degrees)" { Sin_item = class Menuaction "_Sine" "calculate sine x" { action x = map_unary sin x; } Cos_item = class Menuaction "_Cosine" "calculate cosine x" { action x = map_unary cos x; } Tan_item = class Menuaction "_Tangent" "calculate tangent x" { action x = map_unary tan x; } sep1 = Menuseparator; Asin_item = class Menuaction "Arc S_ine" "calculate arc sine x" { action x = map_unary asin x; } Acos_item = class Menuaction "Arc C_osine" "calculate arc cosine x" { action x = map_unary acos x; } Atan_item = class Menuaction "Arc T_angent" "calculate arc tangent x" { action x = map_unary atan x; } sep2 = Menuseparator; Rad_item = class Menuaction "_Degrees to Radians" "convert degrees to radians" { action x = map_unary rad x; } Deg_item = class Menuaction "_Radians to Degrees" "convert radians to degrees" { action x = map_unary deg x; } sep3 = Menuseparator; Angle_range_item = class Menuaction "Angle i_n Range" "is angle within t degrees of r, mod 360" { action t r angle = clock (max - angle) < 2*r { max = clock (t + r); clock a = a + 360, a < 0; = a - 360, a >= 360; = a; } } } Math_log_item = class Menupullright "_Log" "logarithms and anti-logs" { Exponential_item = class Menuaction "_Exponential" "calculate e ** x" { action x = map_unary (power e) x; } Log_natural_item = class Menuaction "Natural _Log" "log base e of x" { action x = map_unary log x; } sep1 = Menuseparator; Exponential10_item = class Menuaction "E_xponential base 10" "calculate 10 ** x" { action x = map_unary (power 10) x; } Log10_item = class Menuaction "L_og Base 10" "log base 10 of x" { action x = map_unary log10 x; } sep2 = Menuseparator; Raise_to_power_item = class Menuaction "_Raise to Power" "calculate x ** y" { action x y = map_binary power x y; } } Math_complex_item = class Menupullright "_Complex" "operations on complex numbers and images" { Complex_extract = class Menupullright "_Extract" "extract fields from complex" { Real_item = class Menuaction "_Real" "extract real part of complex" { action in = map_unary re in; } Imaginary_item = class Menuaction "_Imaginary" "extract imaginary part of complex" { action in = map_unary im in; } } Complex_build_item = class Menuaction "_Build" "join a and b to make a complex" { action a b = map_binary comma a b; } sep1 = Menuseparator; Polar_item = class Menuaction "_Polar" "convert real and imag to amplitude and phase" { action a = map_unary polar a; } Rectangular_item = class Menuaction "_Rectagular" ("convert (amplitude, phase) image to rectangular " ++ "coordinates") { action x = map_unary rectangular x; } sep2 = Menuseparator; Conjugate_item = class Menuaction "_Conjugate" "invert imaginary part" { action x = map_unary conj x; } } Math_boolean_item = class Menupullright "_Boolean" "bitwise boolean operations for integer objects" { And_item = class Menuaction "_And" "bitwise and of a and b" { action a b = map_binary bitwise_and a b; } Or_item = class Menuaction "_Or" "bitwise or of a and b" { action a b = map_binary bitwise_or a b; } Eor_item = class Menuaction "E_xclusive Or" "bitwise exclusive or of a and b" { action a b = map_binary eor a b; } Not_item = class Menuaction "_Not" "invert a" { action a = map_unary not a; } sep1 = Menuseparator; Right_shift_item = class Menuaction "Shift _Right" "shift a right by b bits" { action a b = map_binary right_shift a b; } Left_shift_item = class Menuaction "Shift _Left" "shift a left by b bits" { action a b = map_binary left_shift a b; } sep2 = Menuseparator; If_then_else_item = class Menuaction "_If Then Else" "b where a is non-zero, c elsewhere" { action a b c = map_trinary ite a b c { // can't use if_then_else, we need a true trinary ite a b c = if a then b else c; } } Band_or_item = class Menuaction "Band O_r" "or the bands of an image together" { action im = map_unary (foldr1 bitwise_or @ bandsplit) im; } Band_and_item = class Menuaction "Band A_nd" "and the bands of an image together" { action im = map_unary (foldr1 bitwise_and @ bandsplit) im; } } Math_relational_item = class Menupullright "R_elational" "comparison operations" { Equal_item = class Menuaction "_Equal to" "test a equal to b" { action a b = map_binary equal a b; } Not_equal_item = class Menuaction "_Not Equal to" "test a not equal to b" { action a b = map_binary not_equal a b; } sep1 = Menuseparator; More_item = class Menuaction "_More Than" "test a strictly greater than b" { action a b = map_binary more a b; } Less_item = class Menuaction "_Less Than" "test a strictly less than b" { action a b = map_binary less a b; } sep2 = Menuseparator; More_equal_item = class Menuaction "M_ore Than or Equal to" "test a greater than or equal to b" { action a b = map_binary more_equal a b; } Less_equal_item = class Menuaction "L_ess Than or Equal to" "test a less than or equal to b" { action a b = map_binary less_equal a b; } } Math_list_item = class Menupullright "L_ist" "operations on lists" { Head_item = class Menuaction "_Head" "first element in list" { action x = map_unary hd x; } Tail_item = class Menuaction "_Tail" "list without the first element" { action x = map_unary tl x; } Last_item = class Menuaction "_Last" "last element in list" { action x = map_unary last x; } Init_item = class Menuaction "_Init" "list without the last element" { action x = map_unary init x; } sep1 = Menuseparator; Reverse_item = class Menuaction "_Reverse" "reverse order of elements in list" { action x = map_unary reverse x; } Sort_item = class Menuaction "_Sort" "sort list into ascending order" { action x = map_unary sort x; } Make_set_item = class Menuaction "_Make Set" "remove duplicates from list" { action x = map_unary mkset equal x; } Transpose_list_item = class Menuaction "Tr_anspose" "exchange rows and columns in a list of lists" { action x = map_unary transpose x; } Concat_item = class Menuaction "_Concat" "flatten a list of lists into a single list" { action l = map_unary concat l; } sep2 = Menuseparator; Length_item = class Menuaction "L_ength" "find the length of list" { action x = map_unary len x; } Subscript_item = class Menuaction "S_ubscript" "return element n from list (index from zero)" { action n x = map_binary subscript n x; } Take_item = class Menuaction "_Take" "take the first n elements of list x" { action n x = map_binary take n x; } Drop_item = class Menuaction "_Drop" "drop the first n elements of list x" { action n x = map_binary drop n x; } sep3 = Menuseparator; Join_item = class Menuaction "_Join" "join two lists end to end" { action a b = map_binary join a b; } Difference_item = class Menuaction "_Difference" "difference of two lists" { action a b = map_binary difference a b; } Cons_item = class Menuaction "C_ons" "put element a on the front of list x" { action a x = map_binary cons a x; } Zip_item = class Menuaction "_Zip" "join two lists, pairwise" { action a b = map_binary zip2 a b; } } Math_round_item = class Menupullright "_Round" "various rounding operations" { /* smallest integral value not less than x */ Ceil_item = class Menuaction "_Ceil" "smallest integral value not less than x" { action x = map_unary ceil x; } Floor_item = class Menuaction "_Floor" "largest integral value not greater than x" { action x = map_unary floor x; } Rint_item = class Menuaction "_Round to Nearest" "round to nearest integer" { action x = map_unary rint x; } } Math_fourier_item = class Menupullright "_Fourier" "Fourier transform" { Forward_item = class Menuaction "_Forward" "fourier transform of image" { action a = map_unary (rotquad @ fwfft) a; } Reverse_item = class Menuaction "_Reverse" "inverse fourier transform of image" { action a = map_unary (invfft @ rotquad) a; } Rotate_quadrants_item = class Menuaction "Rotate _Quadrants" "rotate quadrants" { action a = map_unary rotquad a; } } Math_stats_item = class Menupullright "_Statistics" "measure various statistics of objects" { Value_item = class Menuaction "_Value" "value of point in object" { action a = class _result { _vislevel = 3; position = Expression "Coordinate" (0, 0); _result = map_binary point position.expr a; } } Mean_item = class Menuaction "_Mean" "arithmetic mean value" { action a = map_unary mean a; } Gmean_item = class Menuaction "_Geometric Mean" "geometric mean value" { action a = map_unary meang a; } Zmean_item = class Menuaction "_Zero-excluding Mean" "mean value of non-zero elements" { action a = map_unary meanze a; } Deviation_item = class Menuaction "_Standard Deviation" "standard deviation of object" { action a = map_unary deviation a; } Zdeviation_item = class Menuaction "Z_ero-excluding Standard Deviation" "standard deviation of non-zero elements" { action a = map_unary deviationze a; } Stats_item = class Menuaction "Ma_ny Stats" "calculate many stats in a single pass" { action a = map_unary stats a; } sep1 = Menuseparator; Max_item = class Menuaction "M_aximum" "maximum of object" { action a = map_unary max a; } Min_item = class Menuaction "M_inimum" "minimum of object" { action a = map_unary min a; } Maxpos_item = class Menuaction "_Position of Maximum" "position of maximum in object" { action a = map_unary maxpos a; } Minpos_item = class Menuaction "P_osition of Minimum" "position of minimum in object" { action a = map_unary minpos a; } Gravity_item = class Menuaction "Centre of _Gravity" "position of centre of gravity of histogram" { action a = map_unary gravity a; } sep2 = Menuseparator; Count_set_item = class Menuaction "_Non-zeros" "number of non-zero elements in object" { action a = map_unary cset a { cset i = (mean (i != 0) * i.width * i.height) / 255; } } Count_clear_item = class Menuaction "_Zeros" "number of zero elements in object" { action a = map_unary cclear a { cclear i = (mean (i == 0) * i.width * i.height) / 255; } } Count_edges_item = class Menuaction "_Edges" "count average edges across or down image" { action x = class _result { _vislevel = 3; edge = Option "Count" [ "Horizontal lines", "Vertical lines" ] 0; _result = map_unary process x { process image = Number (edge.labels?edge) (im_cntlines image.value edge.value); } } } sep3 = Menuseparator; Linear_regression_item = class Menuaction "_Linear Regression" "fit a line to a set of points" { action xes yes = linreg xes yes; } Weighted_linear_regression_item = class Menuaction "_Weighted Linear Regression" "fit a line to a set of points and deviations" { action xes yes devs = linregw xes yes devs; } Cluster_item = class Menuaction "_Cluster" "cluster a list of numbers" { action l = class { _vislevel = 3; thresh = Expression "Threshold" 10; [_r, _w] = cluster thresh.expr l; result = _r; weights = _w; } } } Math_base_item = class Menupullright "Bas_e" "convert number bases" { Hexadecimal_item = class Menuaction "_Hexadecimal" "convert to hexadecimal (base 16)" { action a = map_unary (print_base 16) a; } Binary_item = class Menuaction "_Binary" "convert to binary (base 2)" { action a = map_unary (print_base 2) a; } Octal_item = class Menuaction "_Octal" "convert to octal (base 8)" { action a = map_unary (print_base 8) a; } } nip2-8.7.0/share/nip2/compat/7.24/Tasks.def0000644000175000017500000006321313224651032014716 00000000000000Tasks_capture_item = class Menupullright "_Capture" "useful stuff for capturing and preprocessing images" { Csv_import_item = class Menuaction "_CSV Import" "read a file of comma-separated values" { action = class _result { _vislevel = 3; path = Pathname "File to load" "empty"; start_line = Expression "Start at line" 1; rows = Expression "Lines to read (-1 for whole file)" (-1); whitespace = String "Whitespace characters" " \""; separator = String "Separator characters" ",;\t"; _result = Image blank, path.value == "empty" = Image (im_csv2vips filename) { filename = search (expand path.value) ++ ":" ++ "skip:" ++ print (start_line.expr - 1) ++ "," ++ "whi:" ++ escape whitespace.value ++ "," ++ "sep:" ++ escape separator.value ++ "," ++ "line:" ++ print rows.expr; // prefix any ',' with a '\' in the separators line escape x = foldr prefix [] x { prefix x l = '\\' : x : l, x == ',' = x : l; } blank = image_new 1 1 1 Image_format.DOUBLE Image_coding.NOCODING Image_type.B_W 0 0 0; } } } Raw_import_item = class Menuaction "_Raw Import" "read a file of binary values" { action = class _result { _vislevel = 3; path = Pathname "File to load" "empty"; across = Expression "Pixels across" 100; down = Expression "Pixels down" 100; bytes = Expression "Bytes per pixel" 3; skip = Expression "Skip over initial bytes" 0; _result = Image blank, path.value == "empty" = Image (im_binfile path.value across.expr down.expr bytes.expr skip.expr) { blank = image_new 1 1 1 Image_format.DOUBLE Image_coding.NOCODING Image_type.B_W 0 0 0; } } } // interpret Analyze header for layout and calibration Analyze7_header_item = class Menuaction "_Interpret Analyze 7 Header" "examine the Analyze header and set layout and value" { action x = x''' { // read bits of header dim n = get_header ("dsr-image_dimension.dim[" ++ print n ++ "]"); dim0 = dim 0 x; dim1 = dim 1 x; dim2 = dim 2 x; dim3 = dim 3 x; dim4 = dim 4 x; dim5 = dim 5 x; dim6 = dim 6 x; dim7 = dim 7 x; glmax = get_header "dsr-image_dimension.glmax" x; cal_max = get_header "dsr-image_dimension.cal_max" x; // oops, now a nop x' = x; // lay out higher dimensions width-ways x'' = grid dim2 dim3 1 x', dim0 == 3 = grid dim2 dim3 dim4 x', dim0 == 4 = grid (dim2 * dim4) dim5 1 (grid dim2 dim3 dim4) x', dim0 == 5 = grid (dim2 * dim4) dim5 dim6 (grid dim2 dim3 dim4) x', dim0 == 6 = grid (dim2 * dim4 * dim6) dim7 1 (grid (dim2 * dim4) dim5 dim6 (grid dim2 dim3 dim4)) x', dim0 == 7 = error (_ "unsupported dimension " ++ dim0); // multiply by scale factor to get kBeq x''' = x'' * (cal_max / glmax); } } Video_item = class Menuaction "Capture _Video Frame" "capture a frame of still video" { // shortcut to prefs prefs = Workspaces.Preferences; action = class _result { _vislevel = 3; device = prefs.VIDEO_DEVICE; channel = Option "Input channel" [ "TV", "Composite 1", "Composite 2", "Composite 3" ] prefs.VIDEO_CHANNEL; b = Scale "Brightness" 0 32767 prefs.VIDEO_BRIGHTNESS; col = Scale "Colour" 0 32767 prefs.VIDEO_COLOUR; con = Scale "Contrast" 0 32767 prefs.VIDEO_CONTRAST; hue = Scale "Hue" 0 32767 prefs.VIDEO_HUE; frames = Scale "Frames to average" 0 100 prefs.VIDEO_FRAMES; mono = Toggle "Monochrome grab" prefs.VIDEO_MONO; crop = Toggle "Crop image" prefs.VIDEO_CROP; // grab, but hide it ... if we let the crop edit _raw_grab = Image (im_video_v4l1 device channel.value b.value col.value con.value hue.value frames.value); edit_crop = Region _raw_grab left top width height { left = prefs.VIDEO_CROP_LEFT; top = prefs.VIDEO_CROP_TOP; width = min_pair prefs.VIDEO_CROP_WIDTH (_raw_grab.width + left); height = min_pair prefs.VIDEO_CROP_HEIGHT (_raw_grab.height + top); } aspect_ratio = Expression "Stretch vertically by" prefs.VIDEO_ASPECT; _result = frame' { frame = edit_crop, crop = _raw_grab; frame' = colour_transform_to Image_type.B_W frame, mono = frame; } } } Smooth_image_item = class Menuaction "_Smooth" "remove small features from image" { action in = class _result { _vislevel = 3; feature = Scale "Minimum feature size" 1 50 20; _result = map_unary (smooth feature.value) in; } } Light_correct_item = class Menuaction "_Flatfield" "use white image w to flatfield image i" { action w i = map_binary wc w i { wc w i = clip2fmt i.format (w' * i) { fac = mean w / max w; w' = fac * (max w / w); } } } Image_rank_item = Filter_rank_item.Image_rank_item; Tilt_item = Filter_tilt_item; sep1 = Menuseparator; White_balance_item = class Menuaction "_White Balance" "use average of small image to set white of large image" { action a b = class _result { _vislevel = 3; white_hint = "Set image white to:"; white = Colour_picker "Lab" [100, 0, 0]; _result = map_binary wb a b { wb a b = colour_transform_to (get_type image) image_xyz' { area x = x.width * x.height; larger x y = area x > area y; [image, patch] = sortc larger [a, b]; to_xyz = colour_transform_to Image_type.XYZ; // white balance in XYZ patch_xyz = to_colour (to_xyz patch); white_xyz = to_xyz white; facs = (mean patch_xyz / mean white_xyz) * (white_xyz / patch_xyz); image_xyz = to_xyz image; image_xyz' = image_xyz * facs; } } } } Gamma_item = Image_levels_item.Gamma_item; Tone_item = Image_levels_item.Tone_item; sep2 = Menuseparator; Crop_item = Image_crop_item; Rotate_item = Image_transform_item.Rotate_item; Flip_item = Image_transform_item.Flip_item; Resize_item = Image_transform_item.Resize_item; Rubber_item = Image_transform_item.Image_rubber_item; sep3 = Menuseparator; ICC_item = Colour_icc_item; Temp_item = Colour_temperature_item; Find_calib_item = class Menuaction "Find _Colour Calibration" "find an RGB -> XYZ transform from an image of a colour chart" { action image = class _result { _check_args = [ [image, "image", check_Image] ]; _vislevel = 3; // get macbeth data file to use macbeth = Pathname "Pick a Macbeth data file" "$VIPSHOME/share/$PACKAGE/data/macbeth_lab_d65.mat"; mode = Option "Input LUT" [ "Linear input", "Fit intercept from chart greyscale", "Linearize input from chart greyscale" ] 2; // get max of input image _max_value = Image_format.maxval image.format; // measure chart image _camera = measure 0 0 image.width image.height 6 4 image.value; // load true values _true_Lab = Matrix_file macbeth.value; _true_XYZ = colour_transform Image_type.LAB Image_type.XYZ _true_Lab; // get Ys of greyscale _true_grey_Y = map (extract 1) (drop 18 _true_XYZ.value); // camera greyscale (all bands) _camera_grey = drop 18 _camera.value; // normalise both to 0-1 and combine _camera_grey' = map (map (multiply (1 / _max_value))) _camera_grey; _true_grey_Y' = map (multiply (1 / 100)) _true_grey_Y; _comb = Matrix [[0, 0], [1, 1]], mode == 0 = Matrix [0: intercepts, replicate (_camera.width + 1) 1], mode == 1 = Matrix (map2 cons _true_grey_Y' _camera_grey') { intercepts = [(linreg _true_grey_Y' cam).intercept :: cam <- transpose _camera_grey']; } // make a linearising lut ... zero on left _linear_lut = im_invertlut _comb (_max_value + 1); // and display it // plot from 0 explicitly so we see the effect of mode1 (intercept // from greyscale) linearising_lut = Plot [$ymin => 0] _linear_lut; // map the original image through the lineariser to // get linear 0-1 RGB image _image' = hist_map linearising_lut.value image.value; // remeasure and solve for RGB -> XYZ _camera' = im_measure _image' 0 0 image.width image.height 6 4; _pinv = (transpose _camera' * _camera') ** -1; M = transpose (_pinv * transpose _camera' * _true_XYZ); // convert linear RGB camera to Lab _result = (Image @ colour_transform Image_type.XYZ Image_type.LAB @ cast_float @ recomb M) _image'; // measure again and compute dE76 _camera'' = im_measure _result.value 0 0 image.width image.height 6 4; _dEs = map abs_vec (_camera'' - _true_Lab).value; final_dE76 = mean _dEs; _max_dE = foldr max_pair 0 _dEs; _worst = index (equal _max_dE) _dEs; worst_patch = name _worst ++ " (patch " ++ print (_worst + 1) ++ ", " ++ print _max_dE ++ " dE)" { name i = macbeth_names?i, i >= 0 && i < len macbeth_names = "Unknown"; } } } Apply_calib_item = class Menuaction "_Apply Colour Calibration" "apply an RGB -> LAB transform to an image" { action a b = class (map_binary process a b) { process a b = result, is_instanceof calib_name calib && is_Image image = error (_ "bad arguments to " ++ "Calibrate_image") { // the name of the calib object we need calib_name = "Tasks_capture_item.Find_calib_item.action"; // get the Calibrate_chart arg first [image, calib] = sortc (const (is_instanceof calib_name)) [a, b]; // map the original image through the lineariser to get // linear 0-1 RGB image image' = hist_map calib.linearising_lut image; // convert linear RGB camera to Lab result = colour_transform Image_type.XYZ Image_type.LAB ((float) (recomb calib.M image')); } } } sep4 = Menuseparator; Graph_hist_item = Hist_find_item; Graph_bands_item = class Menuaction "Plot _Bands" "show image bands as a graph" { action x = class _result { _vislevel = 3; style = Option_enum Plot_style.names "Style" "Line"; auto = Toggle "Auto Range" true; ymin = Expression "Y range minimum" 0; ymax = Expression "Y range maximum" 1; _result = Plot options (to_image (bands (image x))).value { options = [$style => style.value] ++ if auto then [] else [$ymin => ymin.expr, $ymax => ymax.expr]; // try to make something image-like from it image x = extract_area x.left x.top 1 1 x.image, is_Mark x = get_image x, has_image x = get_image (to_image x); // get as [[1],[2],[3]] bands x = transpose [map mean (bandsplit x)]; } } } } Tasks_mosaic_item = class Menupullright "_Mosaic" "build image mosaics" { /* Check and group a point list by image. */ mosaic_sort_test l = error "mosaic: not all points", !is_listof is_Mark l = error "mosaic: points not on two images", !is_list_len 2 images = error "mosaic: images do not match in format and coding", !all_equal (map get_format l) || !all_equal (map get_coding l) = error "mosaic: not same number of points on each image", !foldr1 equal (map len l') = l' { // test for all elements of a list equal all_equal l = all (map (equal (hd l)) (tl l)); // all the different images images = mkset pointer_equal (map get_image l); // find all points defined on image test_image image p = (get_image p) === image; find l image = filter (test_image image) l; // group point list by image l' = map (find l) images; } /* Sort a point group to get right before left, and within each group to * get above before below. */ mosaic_sort_lr l = l'' { // sort to get upper point first above a b = a.top < b.top; l' = map (sortc above) l; // sort to get right group before left group right a b = a?0.left > b?0.left; l'' = sortc right l'; } /* Sort a point group to get top before bottom, and within each group to * get left before right. */ mosaic_sort_tb l = l'' { // sort to get upper point first left a b = a.left < b.left; l' = map (sortc left) l; // sort to get right group before left group below a b = a?0.top > b?0.top; l'' = sortc below l'; } /* Put 'em together! Group by image, sort vertically (or horizontally) with * one of the above, transpose to get pairs matched up, and flatten again. */ mosaic_sort fn = concat @ transpose @ fn @ mosaic_sort_test; Mosaic_1point_item = class Menupullright "_One Point" "join two images with a single tie point" { check_ab_args a b = [ [a, "a", check_Mark], [b, "b", check_Mark] ]; // shortcut to prefs prefs = Workspaces.Preferences; search_area = prefs.MOSAIC_WINDOW_SIZE; object_size = prefs.MOSAIC_OBJECT_SIZE; blend_width_widget = Scale "Maximum blend width" 0 100 prefs.MOSAIC_MAX_BLEND_WIDTH; refine_widget = Toggle "Refine selected tie-points" prefs.MOSAIC_REFINE; lr_mos _refine a b = class Image _result { _check_args = check_ab_args a b; bw = blend_width_widget; refine = _refine; _result = im_lrmosaic a'.image.value b'.image.value 0 a'.left a'.top b'.left b'.top (object_size / 2) (search_area / 2) 0 bw.value, refine = im_lrmerge a'.image.value b'.image.value (b'.left - a'.left) (b'.top - a'.top) bw.value { [a', b'] = mosaic_sort mosaic_sort_lr [a, b]; } } tb_mos _refine a b = class Image _result { _check_args = check_ab_args a b; bw = blend_width_widget; refine = _refine; _result = im_tbmosaic a'.image.value b'.image.value 0 a'.left a'.top b'.left b'.top (object_size / 2) (search_area / 2) 0 bw.value, refine = im_tbmerge a'.image.value b'.image.value (b'.left - a'.left) (b'.top - a'.top) bw.value { [a', b'] = mosaic_sort mosaic_sort_tb [a, b]; } } Left_right_item = class Menuaction "_Left to Right" "join two images left-right with a single tie point" { action a b = lr_mos refine_widget a b; } Top_bottom_item = class Menuaction "_Top to Bottom" "join two images top-bottom with a single tie point" { action a b = tb_mos refine_widget a b; } sep1 = Menuseparator; Left_right_manual_item = class Menuaction "Manual L_eft to Right" "join left-right, no auto-adjust of tie points" { action a b = lr_mos false a b; } Top_bottom_manual_item = class Menuaction "Manual T_op to Bottom" "join top-bottom, no auto-adjust of tie points" { action a b = tb_mos false a b; } } Mosaic_2point_item = class Menupullright "_Two Point" "join two images with two tie points" { check_abcd_args a b c d = [ [a, "a", check_Mark], [b, "b", check_Mark], [c, "c", check_Mark], [d, "d", check_Mark] ]; // shortcut to prefs prefs = Workspaces.Preferences; search_area = prefs.MOSAIC_WINDOW_SIZE; object_size = prefs.MOSAIC_OBJECT_SIZE; blend_width_widget = Scale "Maximum blend width" 0 100 prefs.MOSAIC_MAX_BLEND_WIDTH; refine_widget = Toggle "Refine selected tie-points" prefs.MOSAIC_REFINE; Left_right_item = class Menuaction "_Left to Right" "join two images left-right with a pair of tie points" { action a b c d = class Image _result { _check_args = check_abcd_args a b c d; bw = blend_width_widget; refine = refine_widget; _result = im_lrmosaic1 a'.image.value b'.image.value 0 a'.left a'.top b'.left b'.top c'.left c'.top d'.left d'.top (object_size / 2) (search_area / 2) 0 bw.value, refine = im_lrmerge1 a'.image.value b'.image.value a'.left a'.top b'.left b'.top c'.left c'.top d'.left d'.top bw.value { [a', b', c', d'] = mosaic_sort mosaic_sort_lr [a, b, c, d]; } } } Top_bottom_item = class Menuaction "_Top to Bottom" "join two images top-bottom with a pair of tie points" { action a b c d = class Image _result { _check_args = check_abcd_args a b c d; bw = blend_width_widget; refine = refine_widget; _result = im_tbmosaic1 a'.image.value b'.image.value 0 a'.left a'.top b'.left b'.top c'.left c'.top d'.left d'.top (object_size / 2) (search_area / 2) 0 bw.value, refine = im_tbmerge1 a'.image.value b'.image.value a'.left a'.top b'.left b'.top c'.left c'.top d'.left d'.top bw.value { [a', b', c', d'] = mosaic_sort mosaic_sort_tb [a, b, c, d]; } } } } sep1 = Menuseparator; Balance_item = class Menuaction "Mosaic _Balance" "disassemble mosaic, scale brightness to match, reassemble" { action x = map_unary balance x { balance x = oo_unary_function balance_op x, is_class x = im_global_balancef x Workspaces.Preferences.MOSAIC_BALANCE_GAMMA, is_image x = error (_ "bad arguments to " ++ "balance") { balance_op = Operator "balance" balance Operator_type.COMPOUND_REWRAP false; } } } //////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// Manual_balance_item = class Menupullright "Manual B_alance" "balance tonality of user defined areas" { prefs = Workspaces.Preferences; //////////////////////////////////////////////////////////////////////////////////// Balance_find_item = class Menuaction "_Find Values" "calculates values required to scale and offset balance user defined areas in a given image" /* Outputs a matrix of scale and offset values. Eg. Values required to balance the secondary * structure in an X-ray image. Takes an X-ray image an 8-bit control mask and a list of * 8-bit reference masks, where the masks are white on a black background. */ { action im_in m_control m_group = class Matrix values{ _vislevel = 1; _control_im = if m_control then im_in else 0; _control_meanmax = so_meanmax _control_im; _group_check = is_Group m_group; _m_list = m_group.value, _group_check = m_group; process m_current mat_in = mat_out {so_values = so_calculate _control_meanmax im_in m_current; mat_out = join [so_values] mat_in;} values = (foldr process [] _m_list); } } //////////////////////////////////////////////////////////////////////////////////// Balance_check_item = class Menuaction "_Check Values" "allows calculated set of scale and offset values to be checked and adjusted if required" /* Outputs adjusted matrix of scale and offset values and scale and offset image maps. * Eg. Check values required to balance the secondary structure in an X-ray image. * Takes an X-ray image an 8-bit control mask and a list of 8-bit reference masks, * where the masks are white on a black background. */ { action im_in m_matrix m_group = class Image value { _vislevel = 3; blur = Scale "Blur" 1 10 1; _blur = (blur.value/2 + 0.5), blur.value > 1 = 1; _group_check = is_Group m_group; _m_list = m_group.value, _group_check = m_group; adjust = Matrix_rec mat_a { no_masks = len _m_list; mat_a = replicate no_masks [0, 0]; } // Apply the user defined adjustments to the inputted matrix of scale and offset values _adjusted = map2 fn_adjust m_matrix.value adjust.value; fn_adjust a b = [(a?0 + b?0), (a?1 + (a?1 * b?1))]; _scaled_ims = map (fn_so_apply im_in) _adjusted; fn_so_apply im so = map_unary adj im {adj im = im * (so?0) + (so?1);} _im_pairs = zip2 _m_list _scaled_ims; // Prepare black images as starting point. //////////// _blank = image_new (_m_list?0).width (_m_list?0).height 1 6 Image_coding.NOCODING 1 0 0 0; _pair_start = [(_blank + 1), _blank]; Build = Toggle "Build Scale and Offset Correction Images" false; Output = class { _vislevel = 1; scale_im = _build?0; offset_im = _build?1; so_values = Matrix _adjusted; _build = [Image so_images?0, Image so_images?1], Build = ["Scale image not built.", "Offset image not built."] { m_list' = transpose [_m_list]; m_all = map2 join m_list' _adjusted; so_images = foldr process_2 _pair_start m_all; } } value = (foldr process_1 im_in_b _im_pairs).value {im_in_b = map_unary cast_float im_in;} process_1 m_current im_start = im_out { bl_mask = convsep (matrix_blur _blur) (get_image m_current?0); blended_im = im_blend bl_mask (m_current?1).value im_start.value; im_out = Image (clip2fmt im_start.format blended_im); } // Process for building scale and offset image. process_2 current p_start = p_out { im_s = if ((current?0) > 128) then current?1 else _blank; im_o = if ((current?0) > 128) then current?2 else _blank; im_s' = convsep (matrix_blur _blur) (im_s != 0); im_o' = convsep (matrix_blur _blur) (im_o != 0); im_s'' = im_blend im_s'.value im_s.value p_start?0; im_o'' = im_blend im_o'.value im_o.value p_start?1; p_out = [im_s'', im_o'']; } } } //////////////////////////////////////////////////////////////////////////////////// Balance_apply_item = class Menuaction "_Apply Values" "apply scale and offset corrections, defined as image maps, to a given image" /* Outputs the balanced image. Eg. Balance the secondary structure in an X-ray image. Takes an * X-ray image an 32-bit float scale image and a 32-bit offset image. */ { action im_in scale_im offset_im = class Image value { _vislevel = 1; xfactor = im_in.width/scale_im.width; yfactor = im_in.height/scale_im.height; _scale_im = resize Interpolate_bilinear xfactor yfactor scale_im; _offset_im = resize Interpolate_bilinear xfactor yfactor offset_im; value = get_image ( clip2fmt im_in.format ( ( im_in * _scale_im ) + _offset_im ) ); } } } Tilt_item = Filter_tilt_item; sep2 = Menuseparator; Rebuild_item = class Menuaction "_Rebuild" "disassemble mosaic, substitute image files and reassemble" { action x = class _result { _vislevel = 3; old = String "In each filename, replace" "foo"; new = String "With" "bar"; _result = map_unary remosaic x { remosaic image = Image (im_remosaic image.value old.value new.value); } } } sep3 = Menuseparator; Clone_area_item = class Menuaction "_Clone Area" "replace dark or light section of im1 with pixels from im2" { action im1 im2 = class _result { _check_args = [ [im1, "im1", check_Image], [im2, "im2", check_Image] ]; _vislevel = 3; /* Region on first image placed in the top left hand corner, * positioned and size relative to the height and width of im1. */ r1 = Region_relative im1 0.05 0.05 0.05 0.05; /* Mark on second image placed in the top left hand corner, * positioned relative to the height and width of im2. Used to * define _r2, the region from which the section of image is cloned * from. */ p2 = Mark_relative im2 0.05 0.05; _r2 = Region im2 p2.left p2.top r1.width r1.height; mask = [r1 <= Options.sc, r1 >= Options.sc]?(Options.replace); Options = class { _vislevel = 3; pause = Toggle "Pause process" true; /* Option toggle used to define whether the user is * replacing a dark or a light area. */ replace = Option "Replace" [ "A Dark Area", "A Light Area" ] 1; // Used to select the area to be replaced. sc = Scale "Scale cutoff" 0.01 mx (mx / 2) {mx = Image_format.maxval im1.format;} //Allows replacement with scale&offset balanced gaussian noise. balance = Toggle "Balance cloned data to match surroundings." true; //Allows replacement with scale&offset balanced //gaussian noise. process = Toggle "Replace area with Gaussian noise." false; } _result = im1, Options.pause = Image (im_insert im1.value patch r1.left r1.top) { r2 = Region im2 p2.left p2.top r1.width r1.height; ref_meanmax = so_meanmax (if mask then 0 else r1); mask8 = Matrix_mor [[255, 255, 255], [255, 255, 255], [255, 255, 255]]; mask_a = map_unary (dilate mask8) mask; mask_b = convsep (matrix_blur 2) mask_a; patch = so_balance ref_meanmax r1 r2 mask_b Options.process, Options.balance = so_balance ref_meanmax r1 r2 mask_b Options.process, Options.process = im_blend (get_image mask_b) (get_image r2) (get_image r1); } } } } Tasks_frame_item = Frame_item; Tasks_print_item = class Menupullright "_Print" "useful stuff for image output" { Rotate_item = Image_transform_item.Rotate_item; Flip_item = Image_transform_item.Flip_item; Resize_item = Image_transform_item.Resize_item; Tone_item = Image_levels_item.Tone_item; Sharpen_item = class Menuaction "_Sharpen" "unsharp filter tuned for typical inkjet printers" { action x = class _result { _vislevel = 3; target_dpi = Option "Sharpen for print at" [ "400 dpi", "300 dpi", "150 dpi", "75 dpi" ] 1; _result = map_unary process x { process image = sharpen params?0 params?1 params?2 params?3 params?4 params?5 (colour_transform_to Image_type.LABQ image) { // sharpen params for various dpi // just change the size of the area we search param_table = [ [7, 2.5, 40, 20, 0.5, 1.5], [5, 2.5, 40, 20, 0.5, 1.5], [3, 2.5, 40, 20, 0.5, 1.5], [11, 2.5, 40, 20, 0.5, 1.5] ]; params = param_table?target_dpi; } } } } sep1 = Menuseparator; Temp_item = Colour_temperature_item; ICC_item = Colour_icc_item; } nip2-8.7.0/share/nip2/compat/7.24/_types.def0000644000175000017500000007073213224651032015140 00000000000000/* A list of things. Do automatic iteration of unary and binary operators on * us. * List [1, 2] + [2, 3] -> List [3, 5] * hd (List [2, 3]) -> 2 * List [] == [] -> true */ List value = class _Object { _check_args = [ [value, "value", check_list] ]; // methods oo_binary_table op x = [ [apply2 op value x', op.op_name == "subscript" || op.op_name == "subscript'" || op.op_name == "equal" || op.op_name == "equal'"], [this.List (apply2 op value x'), op.op_name == "join" || op.op_name == "join'"], [this.List (map2 (apply2 op) value x'), is_list x'], [this.List (map (apply2 op' x) value), true] ] ++ super.oo_binary_table op x { op' = oo_converse op; // strip the List wrapper, if any x' = x.value, is_List x = x; apply2 op x1 x2 = oo_binary_function op x1 x2, is_class x1 = oo_binary'_function op x1 x2, is_class x2 = op.fn x1 x2; }; oo_unary_table op = [ [apply value, op.op_name == "hd" || op.op_name == "tl"], [this.List (map apply value), true] ] ++ super.oo_unary_table op { apply x = oo_unary_function op x, is_class x = op.fn x; } } /* A group of things. Loop the operation over the group. */ Group value = class _Object { _check_args = [ [value, "value", check_list] ]; // methods oo_binary_table op x = [ // if_then_else is really a trinary operator [map_trinary ite this x?0 x?1, op.op_name == "if_then_else"], [map_binary op.fn this x, is_Group x], [map_unary (\a op.fn a x) this, true] ] ++ super.oo_binary_table op x; oo_unary_table op = [ [map_unary op.fn this, true] ] ++ super.oo_unary_table op; // we can't call map_trinary directly, since it uses Group and we // don't support mutually recursive top-level functions :-( // copy-paste it here, keep in sync with the version in _stdenv map_nary fn args = fn args, groups == [] = Group (map process [0, 1 .. shortest - 1]) { groups = filter is_Group args; shortest = foldr1 min_pair (map (len @ get_value) groups); process n = NULL, any (map (is_noval n) args) = map_nary fn (map (extract n) args) { extract n arg = arg.value?n, is_Group arg = arg; is_noval n arg = is_Group arg && arg.value?n == NULL; } } // need ite as a true trinary ite a b c = if a then b else c; map_unary fn a = map_nary (list_1ary fn) [a]; map_binary fn a b = map_nary (list_2ary fn) [a, b]; map_trinary fn a b c = map_nary (list_3ary fn) [a, b, c]; } /* Single real number ... eg slider. */ Real value = class _Object { _check_args = [ [value, "value", check_real] ]; // methods oo_binary_table op x = [ [this.Real (op.fn this.value x.value), is_Real x && op.type == Operator_type.ARITHMETIC], [this.Real (op.fn this.value x), is_real x && op.type == Operator_type.ARITHMETIC], [op.fn this.value x.value, is_Real x && op.type == Operator_type.RELATIONAL], [op.fn this.value x, !is_class x] ] ++ super.oo_binary_table op x; oo_unary_table op = [ [this.Real (op.fn this.value), op.type == Operator_type.ARITHMETIC], [op.fn this.value, true] ] ++ super.oo_unary_table op; } /* Single bool ... eg Toggle. */ Bool value = class _Object { _check_args = [ [value, "value", check_bool] ]; // methods oo_binary_table op x = [ [op.fn this.value x, op.op_name == "if_then_else"], [this.Bool (op.fn this.value x.value), is_Bool x], [this.Bool (op.fn this.value x), is_bool x] ] ++ super.oo_binary_table op x; oo_unary_table op = [ [this.Bool (op.fn this.value), op.type == Operator_type.ARITHMETIC || op.type == Operator_type.RELATIONAL], [op.fn this.value, true] ] ++ super.oo_unary_table op; } /* An editable string. */ String caption value = class _Object { _check_args = [ [caption, "caption", check_string], [value, "value", check_string] ]; } /* An editable real number. */ Number caption value = class scope.Real value { _check_args = [ [caption, "caption", check_string] ]; Real x = this.Number caption x; } /* An editable expression. */ Expression caption expr = class (if is_class expr then expr else _Object) { _check_args = [ [caption, "caption", check_string], [expr, "expr", check_any] ]; } /* A ticking clock. */ Clock interval value = class scope.Real value { _check_args = [ [interval, "interval", check_real] ]; Real x = this.Clock interval x; } /* An editable filename. */ Pathname caption value = class _Object { _check_args = [ [caption, "caption", check_string], [value, "value", check_string] ]; } /* An editable fontname. */ Fontname caption value = class _Object { _check_args = [ [caption, "caption", check_string], [value, "value", check_string] ]; } /* Vector type ... just a finite list of real. Handy for wrapping an * argument to eg. im_lintra_vec. Make it behave like a single pixel image. */ Vector value = class _Object { _check_args = [ [value, "value", check_real_list] ]; bands = len value; // methods oo_binary_table op x = [ // Vector ++ Vector means bandwise join [this.Vector (op.fn this.value x.value), is_Vector x && (op.op_name == "join" || op.op_name == "join'")], [this.Vector (op.fn this.value [get_number x]), has_number x && (op.op_name == "join" || op.op_name == "join'")], // Vector ? number means extract element [op.fn this.value (get_real x), has_real x && (op.op_name == "subscript" || op.op_name == "subscript'")], // extra check for lengths equal [this.Vector (map_binaryl op.fn this.value x.value), is_Vector x && len value == len x.value && op.type == Operator_type.ARITHMETIC], [this.Vector (map_binaryl op.fn this.value (get_real x)), has_real x && op.type == Operator_type.ARITHMETIC], // need extra length check [this.Vector (map bool_to_real (map_binaryl op.fn this.value x.value)), is_Vector x && len value == len x.value && op.type == Operator_type.RELATIONAL], [this.Vector (map bool_to_real (map_binaryl op.fn this.value (get_real x))), has_real x && op.type == Operator_type.RELATIONAL], [this.Vector (op.fn this.value x.value), is_Vector x && len value == len x.value && op.type == Operator_type.COMPOUND_REWRAP], [x.Image (vec op'.op_name x.value value), is_Image x], [vec op'.op_name x value, is_image x], [op.fn this.value x, is_real x] ] ++ super.oo_binary_table op x { op' = oo_converse op; }; oo_unary_table op = [ [this.Vector (map_unaryl op.fn this.value), op.type == Operator_type.ARITHMETIC], [this.Vector (map bool_to_real (map_unaryl op.fn this.value)), op.type == Operator_type.RELATIONAL], [this.Vector (op.fn this.value), op.type == Operator_type.COMPOUND_REWRAP], [op.fn this.value, true] ] ++ super.oo_unary_table op; // turn an ip bool (or a number, for Vector) into VIPSs 255/0 bool_to_real x = 255, is_bool x && x = 255, is_number x && x != 0 = 0; } /* A rectangular array of real. */ Matrix_base value = class _Object { _check_args = [ [value, "value", check_matrix] ]; // calculate these from value width = len value?0; height = len value; // extract a rectanguar area extract left top width height = this.Matrix_base ((map (take width) @ map (drop left) @ take height @ drop top) value); // methods oo_binary_table op x = [ // mat multiply is special [this.Matrix_base mul.value, is_Matrix x && op.op_name == "multiply"], [this.Matrix_base mul'.value, is_Matrix x && op.op_name == "multiply'"], // mat divide is also special [this.Matrix_base div.value, is_Matrix x && op.op_name == "divide"], [this.Matrix_base div'.value, is_Matrix x && op.op_name == "divide'"], // power -1 means invert [this.Matrix_base inv.value, is_real x && x == -1 && op.op_name == "power"], [this.Matrix_base sq.value, is_real x && x == 2 && op.op_name == "power"], [error "matrix **-1 and **2 only", op.op_name == "power" || op.op_name == "power'"], // matrix op vector ... treat a vector as a 1 row matrix [this.Matrix_base (map (map_binaryl op'.fn x.value) this.value), is_Vector x && op.type == Operator_type.ARITHMETIC], [this.Matrix_base (map_binaryl op.fn this.value x.value), (is_Matrix x || is_Real x) && op.type == Operator_type.ARITHMETIC], [this.Matrix_base (map_binaryl op.fn this.value x), is_real x && op.type == Operator_type.ARITHMETIC], // compound ... don't do iteration [this.Matrix_base (op.fn this.value x.value), (is_Matrix x || is_Real x || is_Vector x) && op.type == Operator_type.COMPOUND_REWRAP], [op.fn this.value x, op.type == Operator_type.COMPOUND] ] ++ super.oo_binary_table op x { mul = im_matmul this x; mul' = im_matmul x this; div = im_matmul this (im_matinv x); div' = im_matmul x (im_matinv this); inv = im_matinv this; sq = im_matmul this this; op' = oo_converse op; } oo_unary_table op = [ [this.Matrix_base (map_unaryl op.fn this.value), op.type == Operator_type.ARITHMETIC], [this.Matrix_base (op.fn this.value), op.type == Operator_type.COMPOUND_REWRAP], [op.fn this.value, true] ] ++ super.oo_unary_table op; } /* How to display a matrix: text, sliders, toggles, or text plus scale/offset. */ Matrix_display = class { text = 0; slider = 1; toggle = 2; text_scale_offset = 3; is_display = member [text, slider, toggle, text_scale_offset]; } /* A matrix as VIPS sees them ... add scale, offset and filename. For nip, add * a display type as well to control how the widget renders. */ Matrix_vips value scale offset filename display = class scope.Matrix_base value { _check_args = [ [scale, "scale", check_real], [offset, "offset", check_real], [filename, "filename", check_string], [display, "display", check_matrix_display] ]; Matrix_base x = this.Matrix_vips x scale offset filename display; } /* A plain 'ol matrix which can be passed to VIPS. */ Matrix value = class Matrix_vips value 1 0 "" Matrix_display.text {} /* Specialised constructors ... for convolutions, recombinations and * morphologies. */ Matrix_con scale offset value = class Matrix_vips value scale offset "" Matrix_display.text_scale_offset {}; Matrix_rec value = class Matrix_vips value 1 0 "" Matrix_display.slider {}; Matrix_mor value = class Matrix_vips value 1 0 "" Matrix_display.toggle {}; Matrix_file filename = (im_read_dmask @ expand @ search) filename; /* A CIE colour ... a triple, plus a format (eg XYZ, Lab etc) */ Colour colour_space value = class scope.Vector value { _check_args = [ [colour_space, "colour_space", check_colour_space] ]; _check_all = [ [is_list_len 3 value, "len value == 3"] ]; Vector x = this.Colour colour_space x; // make a colour-ish thing from an image // back to Colour if we have another 3 band image // to a vector if bands > 1 // to a number otherwise itoc im = this.Colour nip_type (to_matrix im).value?0, bands == 3 = scope.Vector (map mean (bandsplit im)), bands > 1 = mean im { type = get_header "Type" im; bands = get_header "Bands" im; nip_type = Image_type.colour_spaces.lookup 1 0 type; } // methods oo_binary_table op x = [ [itoc (op.fn ((float) (to_image this).value) ((float) (to_image x).value)), // here REWRAP means go via image op.type == Operator_type.COMPOUND_REWRAP] ] ++ super.oo_binary_table op x; oo_unary_table op = [ [itoc (op.fn ((float) (to_image this).value)), op.type == Operator_type.COMPOUND_REWRAP] ] ++ super.oo_unary_table op; } // a subclass with widgets for picking a space and value Colour_picker default_colour default_value = class Colour space.value_name colour.expr { _vislevel = 3; space = Option_enum Image_type.colour_spaces "Colour space" default_colour; colour = Expression "Colour value" default_value; Colour_edit colour_space value = Colour_picker colour_space value; } /* Base scale type. */ Scale caption from to value = class scope.Real value { _check_args = [ [caption, "caption", check_string], [from, "from", check_real], [to, "to", check_real] ]; _check_all = [ [from < to, "from < to"] ]; Real x = this.Scale caption from to x; // methods oo_binary_table op x = [ [this.Scale caption (op.fn this.from x.from) (op.fn this.to x.to) (op.fn this.value x.value), is_Scale x && op.type == Operator_type.ARITHMETIC], [this.Scale caption (op.fn this.from x) (op.fn this.to x) (op.fn this.value x), is_real x && op.type == Operator_type.ARITHMETIC] ] ++ super.oo_binary_table op x; } /* Base toggle type. */ Toggle caption value = class scope.Bool value { _check_args = [ [caption, "caption", check_string], [value, "value", check_bool] ]; Bool x = this.Toggle caption x; } /* Base option type. */ Option caption labels value = class scope.Real value { _check_args = [ [caption, "caption", check_string], [labels, "labels", check_string_list], [value, "value", check_uint] ]; } Option_enum enum caption value_name = class Option caption enum.names (index (equal value_name) enum.names) { // corresponding thing value_thing = enum.get_thing value_name; Option_edit caption labels value = this.Option_enum enum caption (enum.names ? value); } /* A rectangle. width and height can be -ve. */ Rect left top width height = class _Object { _check_args = [ [left, "left", check_real], [top, "top", check_real], [width, "width", check_real], [height, "height", check_real] ]; // derived right = left + width; bottom = top + height; oo_binary_table op x = [ [equal x, is_Rect x && (op.op_name == "equal" || op.op_name == "equal'")], [!equal x, is_Rect x && (op.op_name == "not_equal" || op.op_name == "not_equal'")], // binops with a complex are the same as (comp op comp) [oo_binary_function op this (Rect (re x) (im x) 0 0), is_complex x], // all others are just pairwise [this.Rect left' top' width' height', is_Rect x && op.type == Operator_type.ARITHMETIC], [this.Rect left'' top'' width'' height'', has_number x && op.type == Operator_type.ARITHMETIC] ] ++ super.oo_binary_table op x { left' = op.fn left x.left; top' = op.fn top x.top; width' = op.fn width x.width; height' = op.fn height x.height; left'' = op.fn left x'; top'' = op.fn top x'; width'' = op.fn width x'; height'' = op.fn height x'; x' = get_number x; } oo_unary_table op = [ // arithmetic uops just map [this.Rect left' top' width' height', op.type == Operator_type.ARITHMETIC], // compound uops are just like ops on complex // do (width, height) so thing like abs(Arrow) work as you'd expect [op.fn (width, height), op.type == Operator_type.COMPOUND] ] ++ super.oo_unary_table op { left' = op.fn left; top' = op.fn top; width' = op.fn width; height' = op.fn height; } // empty? ie. contains no pixels is_empty = width == 0 || height == 0; // normalised version, ie. make width/height +ve and flip the origin nleft = left + width, width < 0 = left; ntop = top + height, height < 0 = top; nwidth = abs width; nheight = abs height; nright = nleft + nwidth; nbottom = ntop + nheight; equal x = left == x.left && top == x.top && width == x.width && height == x.height; // contains a point? includes_point x y = nleft <= x && x <= nright && ntop <= y && y <= nbottom; // contains a rect? just test top left and bottom right points includes_rect r = includes_point r.nleft r.ntop && includes_point r.nright r.nbottom; // bounding box of two rects // if either is empty, can just return the other union r = r, is_empty = this, r.is_empty = Rect left' top' width' height' { left' = min_pair nleft r.nleft; top' = min_pair ntop r.ntop; width' = max_pair nright r.nright - left'; height' = max_pair nbottom r.nbottom - top'; } // intersection of two rects ... empty rect if no intersection intersect r = Rect left' top' width'' height'' { left' = max_pair nleft r.nleft; top' = max_pair ntop r.ntop; width' = min_pair nright r.nright - left'; height' = min_pair nbottom r.nbottom - top'; width'' = width', width > 0 = 0; height'' = height', height > 0 = 0; } // expand/collapse by n pixels margin_adjust n = Rect (left - n) (top - n) (width + 2 * n) (height + 2 * n); } /* Values for Compression field in image. */ Image_compression = class { NONE = 0; NO_COMPRESSION = 0; TCSF_COMPRESSION = 1; JPEG_COMPRESSION = 2; LABPACK_COMPRESSED = 3; RGB_COMPRESSED = 4; LUM_COMPRESSED = 5; } /* Values for Coding field in image. */ Image_coding = class { NONE = 0; NOCODING = 0; COLQUANT = 1; LABPACK = 2; RAD = 6; } /* Values for BandFmt field in image. */ Image_format = class { DPCOMPLEX = 9; DOUBLE = 8; COMPLEX = 7; FLOAT = 6; INT = 5; UINT = 4; SHORT = 3; USHORT = 2; CHAR = 1; UCHAR = 0; NOTSET = -1; maxval fmt = [ 255, // UCHAR 127, // CHAR 65535, // USHORT 32767, // SHORT 4294967295, // UINT 2147483647, // INT 255, // FLOAT 255, // COMPLEX 255, // DOUBLE 255 // DPCOMPLEX ] ? fmt, fmt >= 0 && fmt <= DPCOMPLEX = error (_ "bad value for BandFmt"); } /* A lookup table. */ Table value = class _Object { _check_args = [ [value, "value", check_rectangular] ]; /* Extract a column. */ column n = map (extract n) value; /* present col x: is there an x in column col */ present col x = member (column col) x; /* Look on column from, return matching item in column to. */ lookup from to x = value?n?to, n >= 0 = error (_ "item" ++ " " ++ print x ++ " " ++ _ "not in table") { n = index (equal x) (column from); } } /* A two column lookup table with the first column a string and the second a * thing. Used for representing various enums. Option_enum makes a selector * from one of these. */ Enum value = class Table value { _check_args = [ [value, "value", check_enum] ] { check_enum = [is_enum, _ "is [[char, *]]"]; is_enum x = is_rectangular x && is_listof is_string (map (extract 0) x); } // handy ... all the names and things as lists names = this.column 0; things = this.column 1; // is a legal name or thing has_name x = this.present 1 x; has_thing x = this.present 0 x; // map things to strings and back get_name x = this.lookup 1 0 x; get_thing x = this.lookup 0 1 x; } /* Type field. */ Image_type = class { MULTIBAND = 0; B_W = 1; LUMINANCE = 2; XRAY = 3; IR = 4; YUV = 5; RED_ONLY = 6; GREEN_ONLY = 7; BLUE_ONLY = 8; POWER_SPECTRUM = 9; HISTOGRAM = 10; LUT = 11; XYZ = 12; LAB = 13; CMC = 14; CMYK = 15; LABQ = 16; RGB = 17; UCS = 18; LCH = 19; LABS = 21; sRGB = 22; YXY = 23; FOURIER = 24; RGB16 = 25; GREY16 = 26; /* Table to get names <-> numbers. */ type_names = Enum [ $MULTIBAND => MULTIBAND, $B_W => B_W, $LUMINANCE => LUMINANCE, $XRAY => XRAY, $IR => IR, $YUV => YUV, $RED_ONLY => RED_ONLY, $GREEN_ONLY => GREEN_ONLY, $BLUE_ONLY => BLUE_ONLY, $POWER_SPECTRUM => POWER_SPECTRUM, $HISTOGRAM => HISTOGRAM, $LUT => LUT, $XYZ => XYZ, $LAB => LAB, $CMC => CMC, $CMYK => CMYK, $LABQ => LABQ, $RGB => RGB, $UCS => UCS, $LCH => LCH, $LABS => LABS, $sRGB => sRGB, $YXY => YXY, $FOURIER => FOURIER, $RGB16 => RGB16, $GREY16 => GREY16 ]; /* Table relating nip's colour space names and VIPS's Type numbers. * Options generated from this, so match the order to the order in the * Colour menu. */ colour_spaces = Enum [ $sRGB => sRGB, $Lab => LAB, $LCh => LCH, $XYZ => XYZ, $Yxy => YXY, $UCS => UCS ]; /* A slightly larger table ... the types of colorimetric image we can * have. Add mono, and the S and Q forms of LAB. */ image_colour_spaces = Enum [ $Mono => B_W, $sRGB => sRGB, $RGB16 => RGB16, $GREY16 => GREY16, $Lab => LAB, $LabQ => LABQ, $LabS => LABS, $LCh => LCH, $XYZ => XYZ, $Yxy => YXY, $UCS => UCS ]; } /* Base image type. Simple layer over vips_image. */ Image value = class _Object { _check_args = [ [value, "value", check_image] ]; // fields from VIPS header width = get_width value; height = get_height value; bands = get_bands value; format = get_format value; bits = get_bits value; coding = get_coding value; type = get_type value; xres = get_header "Xres" value; yres = get_header "Yres" value; xoffset = get_header "Xoffset" value; yoffset = get_header "Yoffset" value; filename = get_header "filename" value; // convenience ... the area our pixels occupy, as a rect rect = Rect 0 0 width height; // operator overloading // (op Image Vector) done in Vector class oo_binary_table op x = [ // handle image ++ constant here [wrap join_result_image, (has_real x || is_Vector x) && (op.op_name == "join" || op.op_name == "join'")], // image ++ image is slightly different ... we want to // sizealike, but we must not bandalike [wrap (op.fn (get_image resized?0) (get_image resized?1)), has_image x && (op.op_name == "join" || op.op_name == "join'")], [wrap ite_result_image, op.op_name == "if_then_else"], // arithmetic and reational binops between image resize // and band_alike images to match [wrap (op.fn (get_image rebanded?0) (get_image rebanded?1)), has_image x && (op.type == Operator_type.ARITHMETIC || op.type == Operator_type.RELATIONAL)], // other op types don't resize [wrap (op.fn this.value (get_image x)), has_image x], [wrap (op.fn this.value (get_number x)), has_number x], // if it's not a class on the RHS, handle here ... just apply and // rewrap [wrap (op.fn this.value x), !is_class x] // all other cases handled by other classes ] ++ super.oo_binary_table op x { // wrap the result with this // x can be a non-image, eg. compare "Image v == []" vs. // "Image v == 12" wrap x = x, op.type == Operator_type.COMPOUND || !is_image x = this.Image x; join_result_image = value ++ new_stuff, op.op_name == "join" = new_stuff ++ value { new_stuff = image_new width height new_bands format coding Image_type.B_W x xoffset yoffset; new_bands = get_bands x, has_bands x = 1; } [then_part, else_part] = x; // get things about our output from inputs in this order objects = [then_part, else_part, this]; // properties of our output image target_bands = get_member_list has_bands get_bands objects; target_type = get_member_list has_type get_type objects; // if one of then/else is an image, get the target format from that // otherwise, let the non-image objects set the target target_format = get_member_list has_format get_format x, has_member_list has_format x = NULL; to_image x = to_image_size width height target_bands target_format x; [if_size, then_size, else_size] = size_alike (value : formats_alike (map to_image x)); ite_result_image = image_set_type target_type (if if_size then then_size else else_size); resized = size_alike [this, x]; rebanded = bands_alike resized; } // FIXME ... yuk ... don't use operator hints, just always rewrap if // we have an image result // forced on us by things like abs: // abs Vector -> real // abs Image -> Image // does not fit well with COMPOUND/whatever scheme oo_unary_table op = [ [this.Image result, is_image result], [result, true] ] ++ super.oo_unary_table op { result = op.fn this.value; } } /* Construct an image from a file. */ Image_file filename = class Image value { _check_args = [ [filename, "filename", check_string] ]; value = vips_image filename; } Region image left top width height = class Image value { _check_args = [ [image, "Image", check_Image], [left, "left", check_real], [top, "top", check_real], [width, "width", check_preal], [height, "height", check_preal] ]; // a rect for our coordinates // region.rect gets the rect for the extracted image region_rect = Rect left top width height; // we need to always succeed ... value is our enclosing image if we're // out of bounds value = extract_area left top width height image.value, image.rect.includes_rect region_rect = image.value; } Area image left top width height = class scope.Region image left top width height { Region image left top width height = this.Area image left top width height; } Arrow image left top width height = class scope.Rect left top width height { _check_args = [ [image, "Image", check_Image], [left, "left", check_real], [top, "top", check_real], [width, "width", check_real], [height, "height", check_real] ]; Rect l t w h = this.Arrow image l t w h; } HGuide image top = class scope.Arrow image image.rect.left top image.width 0 { Arrow image left top width height = this.HGuide image top; } VGuide image left = class scope.Arrow image left image.rect.top 0 image.height { Arrow image left top width height = this.VGuide image left; } Mark image left top = class scope.Arrow image left top 0 0 { Arrow image left top width height = this.Mark image left top; } // convenience functions: ... specify position as [0 .. 1) Region_relative image u v w h = Region image (image.width * u) (image.height * v) (image.width * w) (image.height * h); Area_relative image u v w h = Area image (image.width * u) (image.height * v) (image.width * w) (image.height * h); Arrow_relative image u v w h = Arrow image (image.width * u) (image.height * v) (image.width * w) (image.height * h); VGuide_relative image v = VGuide image (image.height * v); HGuide_relative image u = HGuide image (image.width * u); Mark_relative image u v = Mark image (image.width * u) (image.height * v); Interpolate_type = class { NEAREST_NEIGHBOUR = 0; BILINEAR = 1; BICUBIC = 2; LBB = 3; NOHALO = 4; VSQBS = 5; // Should introspect to get the list of interpolators :-( // We can "dir" on VipsInterpolate to get a list of them, but we // can't get i18n'd descriptions until we have more // introspection stuff in nip2. /* Table to map interpol numbers to descriptive strings */ descriptions = [ _ "Nearest neighbour", _ "Bilinear", _ "Bicubic", _ "Upsize: reduced halo bicubic (LBB)", _ "Upsharp: reduced halo bicubic with edge sharpening (Nohalo)", _ "Upsmooth: quadratic B-splines with jaggy reduction (VSQBS)" ]; /* And to vips type names. */ types = [ "VipsInterpolateNearest", "VipsInterpolateBilinear", "VipsInterpolateBicubic", "VipsInterpolateLbb", "VipsInterpolateNohalo", "VipsInterpolateVsqbs" ]; } Interpolate type options = class { value = vips_object_new Interpolate_type.types?type [] options; } Interpolate_bilinear = Interpolate Interpolate_type.BILINEAR []; Interpolate_picker default = class Interpolate interp.value [] { _vislevel = 2; interp = Option "Interpolation" Interpolate_type.descriptions default; } Render_intent = class { PERCEPTUAL = 0; RELATIVE = 1; SATURATION = 2; ABSOLUTE = 3; /* Table to get names <-> numbers. */ names = Enum [ [_ "Perceptual", PERCEPTUAL], [_ "Relative", RELATIVE], [_ "Saturation", SATURATION], [_ "Absolute", ABSOLUTE] ]; } // abstract base class for toolkit menus Menu = class {} // a "----" line in a menu Menuseparator = class Menu {} // abstract base class for items in menus Menuitem label tooltip = class Menu {} Menupullright label tooltip = class Menuitem label tooltip {} Menuaction label tooltip = class Menuitem label tooltip {} /* Plots. */ Plot_style = class { POINT = 0; LINE = 1; SPLINE = 2; BAR = 3; names = Enum [ [_ "Point", POINT], [_ "Line", LINE], [_ "Spline", SPLINE], [_ "Bar", BAR] ]; } Plot_format = class { YYYY = 0; XYYY = 1; XYXY = 2; names = Enum [ [_ "YYYY", YYYY], [_ "XYYY", XYXY], [_ "XYXY", XYXY] ]; } Plot_type = class { /* Lots of Ys (ie. multiple line plots). */ YYYY = 0; /* First column of matrix is X position, others are Ys (ie. multiple XY * line plots, all with the same Xes). */ XYYY = 1; /* Many independent XY plots. */ XYXY = 2; } /* "options" is a list of ["key", value] pairs. */ Plot options value = class scope.Image value { Image value = this.Plot options value; } Plot_matrix options value = class Plot options (to_image value).value { } Plot_histogram value = class scope.Plot [] value { } Plot_xy value = class scope.Plot [$format => Plot_format.XYYY] value { } /* A no-value type. Call it NULL for C-alike fun. Used by Group to indicate * empty slots, for example. */ NULL = class _Object { oo_binary_table op x = [ // the only operation we allow is equality .. use pointer equality, // this lets us test a == NULL and a != NULL [this === x, op.type == Operator_type.RELATIONAL && op.op_name == "equal"], [this !== x, op.type == Operator_type.RELATIONAL && op.op_name == "not_equal"] ] ++ super.oo_binary_table op x; } nip2-8.7.0/share/nip2/compat/7.24/Makefile.am0000644000175000017500000000054313224651032015202 00000000000000startdir = $(pkgdatadir)/compat/7.24 start_DATA = \ Math.def \ Image.def \ Colour.def \ Tasks.def \ Object.def \ Filter.def \ Matrix.def \ Widgets.def \ Histogram.def \ _joe_extra.def \ _joe_utilities.def \ _convert.def \ _generate.def \ _list.def \ _predicate.def \ _stdenv.def \ _Object.def \ _types.def EXTRA_DIST = $(start_DATA) nip2-8.7.0/share/nip2/compat/7.38/0000755000175000017500000000000013350464161013236 500000000000000nip2-8.7.0/share/nip2/compat/7.38/_stdenv.def0000644000175000017500000017677113224651032015316 00000000000000/* optional args to functions */ get_option options defaults f = error (_ "unknown parameter " ++ f), hits == [] = hits?0 { hits = [v :: [n, v] <- options ++ defaults; n == f]; } /* Various operators as functions. */ logical_and a b = a && b; logical_or a b = a || b; bitwise_and a b = a & b; bitwise_or a b = a | b; eor a b = a ^ b; left_shift a b = a << b; right_shift a b = a >> b; not a = !a; less a b = a < b; more a b = a > b; less_equal a b = a <= b; more_equal a b = a >= b; equal a b = a == b; not_equal a b = a != b; pointer_equal a b = a === b; not_pointer_equal a b = a !== b; add a b = a + b; subtract a b = a - b; multiply a b = a * b; divide a b = a / b; idivide a b = (int) ((int) a / (int) b); power a b = a ** b; square x = x * x; remainder a b = a % b; cons a b = a : b; dot a b = a . ( b ); join a b = a ++ b; // 'difference' is defined in _list subscript a b = a ? b; generate s n f = [s, n .. f]; comma r i = (r, i); compose f g = f @ g; // our only trinary operator is actually a binary operator if_then_else a x = if a then x?0 else x?1; cast_unsigned_char x = (unsigned char) x; cast_signed_char x = (signed char) x; cast_unsigned_short x = (unsigned short) x; cast_signed_short x = (signed short) x; cast_unsigned_int x = (unsigned int) x; cast_signed_int x = (signed int) x; cast_float x = (float) x; cast_double x = (double) x; cast_complex x = (complex) x; cast_double_complex x = (double complex) x; unary_minus x = -x; negate x = !x; complement x = ~x; unary_plus x = +x; // the function we call for "a -> v" expressions mksvpair s v = [s, v], is_string s = error "not str on lhs of ->"; // the vector ops ... im is an image, vec is a real_list vec op_name im vec = im_lintra_vec ones im vec, op_name == "add" || op_name == "add'" = im_lintra_vec ones (-1 * im) vec, op_name == "subtract'" = im_lintra_vec ones im inv, op_name == "subtract" = im_lintra_vec vec im zeros, op_name == "multiply" || op_name == "multiply'" = im_lintra_vec vec (1 / im) zeros, op_name == "divide'" = im_lintra_vec recip im zeros, op_name == "divide" = im_expntra_vec im vec, op_name == "power'" = im_powtra_vec im vec, op_name == "power" = im_remainderconst_vec im vec, op_name == "remainder" = im_andimage_vec im vec, op_name == "bitwise_and" || op_name == "bitwise_and'" = im_orimage_vec im vec, op_name == "bitwise_or" || op_name == "bitwise_or'" = im_eorimage_vec im vec, op_name == "eor" || op_name == "eor'" = im_equal_vec im vec, op_name == "equal" || op_name == "equal'" = im_notequal_vec im vec, op_name == "not_equal" || op_name == "not_equal'" = im_less_vec im vec, op_name == "less" = im_moreeq_vec im vec, op_name == "less'" = im_lesseq_vec im vec, op_name == "less_equal" = im_more_vec im vec, op_name == "less_equal'" = error ("unimplemented vector operation: " ++ op_name) { zeros = replicate (len vec) 0; ones = replicate (len vec) 1; recip = map (divide 1) vec; inv = map (multiply (-1)) vec; } // make a name value pair mknvpair n v = [n, v], is_string n = error "not [char] on LHS of =>"; /* Macbeth chart patch names. */ macbeth_names = [ "Dark skin", "Light skin", "Blue sky", "Foliage", "Blue flower", "Bluish green", "Orange", "Purplish blue", "Moderate red", "Purple", "Yellow green", "Orange yellow", "Blue", "Green", "Red", "Yellow", "Magenta", "Cyan", "White (density 0.05)", "Neutral 8 (density 0.23)", "Neutral 6.5 (density 0.44)", "Neutral 5 (density 0.70)", "Neutral 3.5 (density 1.05)", "Black (density 1.50)" ]; bandsplit x = oo_unary_function bandsplit_op x, is_class x = map (subscript x) [0 .. bands - 1], is_image x = error (_ "bad arguments to " ++ "bandsplit") { bands = get_header "Bands" x; bandsplit_op = Operator "bandsplit" (map Image @ bandsplit) Operator_type.COMPOUND false; } bandjoin l = wrapper joined, has_wrapper = joined, is_listof has_image l = error (_ "bad arguments to " ++ "bandjoin") { has_wrapper = has_member_list (has_member "Image") l; wrapper = get_member_list (has_member "Image") (get_member "Image") l; joined = im_gbandjoin (map get_image l); } bandand x = oo_unary_function bandand_op x, is_class x = foldr1 bitwise_and (bandsplit x), is_image x = error (_ "bad arguments to " ++ "bandand") { bandand_op = Operator "bandand" bandand Operator_type.COMPOUND_REWRAP false; } bandor x = oo_unary_function bandor_op x, is_class x = foldr1 bitwise_or (bandsplit x), is_image x = error (_ "bad arguments to " ++ "bandor") { bandor_op = Operator "bandor" bandor Operator_type.COMPOUND_REWRAP false; } sum x = oo_unary_function sum_op x, is_class x = im_avg x * (get_width x) * (get_height x) * (get_bands x), is_image x = sum_list x, is_list x = error (_ "bad arguments (" ++ print x ++ ") to " ++ "sum") { sum_op = Operator "sum" sum Operator_type.COMPOUND false; // add elements in a nested-list thing sum_list l = foldr acc 0 l { acc x total = total + sum x, is_list x = total + x; } } product x = oo_unary_function product_op x, is_class x = product_list x, is_list x // (product image) doesn't make much sense :( = error (_ "bad arguments (" ++ print x ++ ") to " ++ "product") { product_op = Operator "product" product Operator_type.COMPOUND false; product_list l = foldr prod 1 l { prod x total = total * product x, is_list x = total * x; } } mean x = oo_unary_function mean_op x, is_class x = im_avg x, is_image x = mean_list x, is_list x = error (_ "bad arguments (" ++ print x ++ ") to " ++ "mean") { mean_op = Operator "mean" mean Operator_type.COMPOUND false; mean_list l = sum l / size l; // number of elements in some sort of nested-list thing size l = foldr acc 0 l { acc x total = total + size x, is_list x = total + 1; } } meang x = (appl (power e) @ mean @ appl log) x { appl fn x = map fn x, is_list x = fn x; } skew x = oo_unary_function skew_op x, is_class x = sum ((x - m) ** 3) / ((N - 1) * s ** 3), is_image x = sum ((Group x' - m) ** 3).value / ((N - 1) * s ** 3), is_list x = error (_ "bad arguments (" ++ print x ++ ") to " ++ "skew") { skew_op = Operator "skew" skew Operator_type.COMPOUND false; // squash any large matrix down to a flat list ... much simpler x' = x, is_image x; = flatten x; m = mean x'; s = deviation x'; w = get_width x'; h = get_height x'; b = get_bands x'; N = w * h * b, is_image x' = len x'; } kurtosis x = oo_unary_function kurtosis_op x, is_class x = sum ((x - m) ** 4) / ((N - 1) * s ** 4), is_image x = sum ((Group x' - m) ** 4).value / ((N - 1) * s ** 4), is_list x = error (_ "bad arguments (" ++ print x ++ ") to " ++ "kurtosis") { kurtosis_op = Operator "kurtosis" kurtosis Operator_type.COMPOUND false; // squash any large matrix down to a flat list ... much simpler x' = x, is_image x; = flatten x; m = mean x'; s = deviation x'; w = get_width x'; h = get_height x'; b = get_bands x'; N = len x', is_list x'; = w * h * b; } // zero-excluding mean meanze x = oo_unary_function meanze_op x, is_class x = meanze_image_hist x, is_image x && (fmt == Image_format.UCHAR || fmt == Image_format.USHORT) = meanze_image x, is_image x = meanze_list x, is_list x = error (_ "bad arguments (" ++ print x ++ ") to " ++ "meanze") { fmt = get_format x; meanze_op = Operator "meanze" meanze Operator_type.COMPOUND false; meanze_list l = sum l / size l; // number of non-zero elements in some sort of nested-list thing size l = foldr acc 0 l { acc x total = total + size x, is_list x = total + 1, x != 0; = total; } // add elements in a nested-list thing sum l = foldr acc 0 l { acc x total = total + sum x, is_list x = total + x; } // image mean, for any image type meanze_image i = sum / N { w = get_width i; h = get_height i; b = get_bands i; st = stats i; sum = st.value?0?2; // find non-zero pixels (not zero in all bands) zp = im_notequal_vec i (replicate b 0); // number of non-zero pixels N = b * (mean zp * w * h) / 255; } // image mean for 8 and 16-bit unsigned images // we can use a histogram, yay, and save a pass through the image meanze_image_hist i = sum / N { // histogram, knock out zeros hist = hist_find i; black = image_new 1 1 (get_bands hist) (get_format hist) (get_coding hist) (get_type hist) 0 0 0; histze = insert 0 0 black hist; // matching identity iden = im_identity_ushort (get_bands hist) (get_width hist), (get_width hist) > 256 = im_identity (get_bands hist); // number of non-zero pixels N = mean histze * 256; // sum of pixels sum = mean (hist * iden) * 256; } } deviation x = oo_unary_function deviation_op x, is_class x = im_deviate x, is_image x = deviation_list x, is_real_list x || is_matrix x = error (_ "bad arguments to " ++ "deviation") { deviation_op = Operator "deviation" deviation Operator_type.COMPOUND false; deviation_list l = (abs (s2 - (s * s / n)) / (n - 1)) ** 0.5 { [n, s, s2] = sum_sum2_list l; } // return n, sum, sum of squares for a list of reals sum_sum2_list x = foldr accumulate [0, 0, 0] x { accumulate x sofar = [n + 1, x + s, x * x + s2], is_real x = [n + n', s + s', s2 + s2'], is_list x = error "sum_sum2_list: not real or [real]" { [n, s, s2] = sofar; [n', s', s2'] = sum_sum2_list x; } } } deviationze x = oo_unary_function deviationze_op x, is_class x = deviationze_image x, is_image x = deviationze_list x, is_real_list x || is_matrix x = error (_ "bad arguments to " ++ "deviationze") { deviationze_op = Operator "deviationze" deviationze Operator_type.COMPOUND false; deviationze_list l = (abs (s2 - (s * s / n)) / (n - 1)) ** 0.5 { [n, s, s2] = sum_sum2_list l; } // return number of non-zero elements, sum, sum of squares for a list of // reals sum_sum2_list x = foldr accumulate [0, 0, 0] x { accumulate x sofar = sofar, is_real x && x == 0 = [n + 1, x + s, x * x + s2], is_real x = [n + n', s + s', s2 + s2'], is_list x = error "sum_sum2_list: not real or [real]" { [n, s, s2] = sofar; [n', s', s2'] = sum_sum2_list x; } } deviationze_image i = ((sum2 - sum * sum / N) / (N - 1)) ** 0.5 { w = get_width i; h = get_height i; b = get_bands i; st = stats i; sum = st.value?0?2; sum2 = st.value?0?3; // find non-zero pixels (not zero in all bands) zp = im_notequal_vec i (replicate b 0); // number of non-zero pixels N = b * (mean zp * w * h) / 255; } } // find the centre of gravity of a histogram gravity x = oo_unary_function gravity_op x, is_class x = im_hist_gravity x, is_hist x = gravity_list x, is_list x = error (_ "bad arguments to " ++ "gravity") { gravity_op = Operator "gravity" gravity Operator_type.COMPOUND false; // centre of gravity of a histogram... use the histogram to weight an // identity, then sum, then find the mean element im_hist_gravity h = m { // make horizontal h' = rot270 h, get_width h == 1 = h, get_height h == 1 = error "width or height not 1"; // number of elements w = get_width h'; // matching identity i = im_identity_ushort 1 w, w <= 2 ** 16 - 1 = make_xy w 1 ? 0; // weight identity and sum s = mean (i * h') * w; // sum of original histogram s' = mean h * w; // weighted mean m = s / s'; } gravity_list l = m { w = len l; // matching identity i = [0, 1 .. w - 1]; // weight identity and sum s = sum (map2 multiply i l); // sum of original histogram s' = sum l; // weighted mean m = s / s'; } } project x = oo_unary_function project_op x, is_class x = im_project x, is_image x = error (_ "bad arguments to " ++ "project") { project_op = Operator "project" project Operator_type.COMPOUND false; } abs x = oo_unary_function abs_op x, is_class x = im_abs x, is_image x = abs_cmplx x, is_complex x = abs_num x, is_real x = abs_list x, is_real_list x = abs_list (map abs_list x), is_matrix x = error (_ "bad arguments to " ++ "abs") { abs_op = Operator "abs" abs Operator_type.COMPOUND false; abs_list l = (sum (map square l)) ** 0.5; abs_num n = n, n >= 0 = -n; abs_cmplx c = ((re c)**2 + (im c)**2) ** 0.5; } copy x = oo_unary_function copy_op x, is_class x = im_copy x, is_image x = x { copy_op = Operator "copy" copy Operator_type.COMPOUND_REWRAP false; } // like abs, but treat pixels as vectors ... ie. always get a 1-band image // back ... also treat matricies as lists of vectors // handy for dE from object difference abs_vec x = oo_unary_function abs_vec_op x, is_class x = abs_vec_image x, is_image x = abs_vec_cmplx x, is_complex x = abs_vec_num x, is_real x = abs_vec_list x, is_real_list x = mean (map abs_vec_list x), is_matrix x = error (_ "bad arguments to " ++ "abs_vec") { abs_vec_op = Operator "abs_vec" abs_vec Operator_type.COMPOUND false; abs_vec_list l = (sum (map square l)) ** 0.5; abs_vec_num n = n, n >= 0 = -n; abs_vec_cmplx c = ((re c)**2 + (im c)**2) ** 0.5; abs_vec_image im = (sum (map square (bandsplit im))) ** 0.5; } transpose x = oo_unary_function transpose_op x, is_class x = transpose_image x, is_image x = transpose_list x, is_listof is_list x = error (_ "bad arguments to " ++ "transpose") { transpose_op = Operator "transpose" transpose Operator_type.COMPOUND_REWRAP false; transpose_list l = [], l' == [] = (map hd l') : (transpose_list (map tl l')) { l' = takewhile (not_equal []) l; } transpose_image = im_flipver @ im_rot270; } rot45 x = oo_unary_function rot45_op x, is_class x = error "rot45 image: not implemented", is_image x = error (_ "bad arguments to " ++ "rot45") { rot45_op = Operator "rot45" rot45_object Operator_type.COMPOUND_REWRAP false; rot45_object x = rot45_matrix x, is_odd_square_matrix x = error "rot45 image: not implemented", is_image x = error (_ "bad arguments to " ++ "rot45"); // slow, but what the heck rot45_matrix l = (im_rotate_dmask45 (Matrix l)).value; } // apply an image function to a [[real]] ... matrix is converted to a 1 band // image for processing apply_matrix_as_image fn m = (get_value @ im_vips2mask @ fn @ im_mask2vips @ Matrix) m; // a general image/matrix operation where the mat version is most easily done // by converting mat->image->mat apply_matim_operation name fn x = oo_unary_function class_op x, is_class x = fn x, is_image x = apply_matrix_as_image fn x, is_matrix x = error (_ "bad arguments to " ++ name) { class_op = Operator name (apply_matim_operation name fn) Operator_type.COMPOUND_REWRAP false; } rot90 = apply_matim_operation "rot90" im_rot90; rot180 = apply_matim_operation "rot180" im_rot180; rot270 = apply_matim_operation "rot270" im_rot270; rotquad = apply_matim_operation "rotquad" im_rotquad; fliplr = apply_matim_operation "fliplr" im_fliphor; fliptb = apply_matim_operation "flipud" im_flipver; image_set_type type x = oo_unary_function image_set_type_op x, is_class x = im_copy_set x (to_real type) (get_header "Xres" x) (get_header "Yres" x) (get_header "Xoffset" x) (get_header "Yoffset" x), is_image x = error (_ "bad arguments to " ++ "image_set_type:" ++ print type ++ " " ++ print x) { image_set_type_op = Operator "image_set_type" (image_set_type type) Operator_type.COMPOUND_REWRAP false; } image_set_origin xoff yoff x = oo_unary_function image_set_origin_op x, is_class x = im_copy_set x (get_header "Type" x) (get_header "Xres" x) (get_header "Yres" x) (to_real xoff) (to_real yoff), is_image x = error (_ "bad arguments to " ++ "image_set_origin") { image_set_origin_op = Operator "image_set_origin" (image_set_origin xoff yoff) Operator_type.COMPOUND_REWRAP false; } cache tile_width tile_height max_tiles x = oo_unary_function cache_op x, is_class x = im_cache x (to_real tile_width) (to_real tile_height) (to_real max_tiles), is_image x = error (_ "bad arguments to " ++ "cache") { cache_op = Operator "cache" (cache tile_width tile_height max_tiles) Operator_type.COMPOUND_REWRAP false; } tile across down x = oo_unary_function tile_op x, is_class x = im_replicate x (to_real across) (to_real down), is_image x = error (_ "bad arguments to " ++ "tile") { tile_op = Operator "tile" (tile across down) Operator_type.COMPOUND_REWRAP false; } grid tile_height across down x = oo_unary_function grid_op x, is_class x = im_grid x (to_real tile_height) (to_real across) (to_real down), is_image x = error (_ "bad arguments to " ++ "grid") { grid_op = Operator "grid" (grid tile_height across down) Operator_type.COMPOUND_REWRAP false; } max_pair a b = a, a > b = b; min_pair a b = a, a < b = b; range min value max = min_pair max (max_pair min value); max x = oo_unary_function max_op x, is_class x = im_max x, is_image x = max_list x, is_list x = x, is_number x = error (_ "bad arguments to " ++ "max") { max_op = Operator "max" max Operator_type.COMPOUND false; max_list x = error "max []", x == [] = foldr1 max_pair x, is_real_list x = foldr1 max_pair (map max_list x), is_list x = max x; } min x = oo_unary_function min_op x, is_class x = im_min x, is_image x = min_list x, is_list x = x, is_number x = error (_ "bad arguments to " ++ "min") { min_op = Operator "min" min Operator_type.COMPOUND false; min_list x = error "min []", x == [] = foldr1 min_pair x, is_real_list x = foldr1 min_pair (map min_list x), is_list x = min x; } maxpos x = oo_unary_function maxpos_op x, is_class x = im_maxpos x, is_image x = maxpos_matrix x, is_matrix x = maxpos_list x, is_list x = error (_ "bad arguments to " ++ "maxpos") { maxpos_op = Operator "maxpos" maxpos Operator_type.COMPOUND false; maxpos_matrix m = (-1, -1), m == [[]] = (indexes?row, row) { max_value = max (Matrix m); indexes = map (index (equal max_value)) m; row = index (not_equal (-1)) indexes; } maxpos_list l = -1, l == [] = index (equal (max l)) l; } minpos x = oo_unary_function minpos_op x, is_class x = im_minpos x, is_image x = minpos_matrix x, is_matrix x = minpos_list x, is_list x = error (_ "bad arguments to " ++ "minpos") { minpos_op = Operator "minpos" minpos Operator_type.COMPOUND false; minpos_matrix m = (-1, -1), m == [[]] = (indexes?row, row) { min_value = min (Matrix m); indexes = map (index (equal min_value)) m; row = index (not_equal (-1)) indexes; } minpos_list l = -1, l == [] = index (equal (min l)) l; } stats x = oo_unary_function stats_op x, is_class x = im_stats x, is_image x = im_stats (to_image x).value, is_matrix x = error (_ "bad arguments to " ++ "stats") { stats_op = Operator "stats" stats Operator_type.COMPOUND false; } e = 2.7182818284590452354; pi = 3.14159265358979323846; rad d = 2 * pi * (d / 360); deg r = 360 * r / (2 * pi); sign x = oo_unary_function sign_op x, is_class x = im_sign x, is_image x = sign_cmplx x, is_complex x = sign_num x, is_real x = error (_ "bad arguments to " ++ "sign") { sign_op = Operator "sign" sign Operator_type.COMPOUND_REWRAP false; sign_num n = 0, n == 0 = 1, n > 0 = -1; sign_cmplx c = (0, 0), mod == 0 = (re c / mod, im c / mod) { mod = abs c; } } rint x = oo_unary_function rint_op x, is_class x = im_rint x, is_image x = rint_value x, is_number x = error (_ "bad arguments to " ++ "rint") { rint_op = Operator "rint" rint Operator_type.ARITHMETIC false; rint_value x = (int) (x + 0.5), x > 0 = (int) (x - 0.5); } scale x = oo_unary_function scale_op x, is_class x = (unsigned char) x, is_number x = im_scale x, is_image x = scale_list x, is_real_list x || is_matrix x = error (_ "bad arguments to " ++ "scale") { scale_op = Operator "scale" scale Operator_type.COMPOUND_REWRAP false; scale_list l = apply_scale s o l { mn = find_limit min_pair l; mx = find_limit max_pair l; s = 255.0 / (mx - mn); o = -(mn * s); } find_limit fn l = find_limit fn (map (find_limit fn) l), is_listof is_list l = foldr1 fn l; apply_scale s o x = x * s + o, is_number x = map (apply_scale s o) x; } scaleps x = oo_unary_function scale_op x, is_class x = im_scaleps x, is_image x = error (_ "bad arguments to " ++ "scale") { scale_op = Operator "scaleps" scaleps Operator_type.COMPOUND_REWRAP false; } fwfft x = oo_unary_function fwfft_op x, is_class x = im_fwfft x, is_image x = error (_ "bad arguments to " ++ "fwfft") { fwfft_op = Operator "fwfft" fwfft Operator_type.COMPOUND_REWRAP false; } invfft x = oo_unary_function invfft_op x, is_class x = im_invfftr x, is_image x = error (_ "bad arguments to " ++ "invfft") { invfft_op = Operator "invfft" invfft Operator_type.COMPOUND_REWRAP false; } falsecolour x = oo_unary_function falsecolour_op x, is_class x = image_set_type Image_type.sRGB (im_falsecolour x), is_image x = error (_ "bad arguments to " ++ "falsecolour") { falsecolour_op = Operator "falsecolour" falsecolour Operator_type.COMPOUND_REWRAP false; } polar x = oo_unary_function polar_op x, is_class x = im_c2amph x, is_image x = polar_cmplx x, is_complex x = error (_ "bad arguments to " ++ "polar") { polar_op = Operator "polar" polar Operator_type.COMPOUND false; polar_cmplx r = (l, a) { a = 270, x == 0 && y < 0 = 90, x == 0 && y >= 0 = 360 + atan (y / x), x > 0 && y < 0 = atan (y / x), x > 0 && y >= 0 = 180 + atan (y / x); l = (x ** 2 + y ** 2) ** 0.5; x = re r; y = im r; } } rectangular x = oo_unary_function rectangular_op x, is_class x = im_c2rect x, is_image x = rectangular_cmplx x, is_complex x = error (_ "bad arguments to " ++ "rectangular") { rectangular_op = Operator "rectangular" rectangular Operator_type.COMPOUND false; rectangular_cmplx p = (x, y) { l = re p; a = im p; x = l * cos a; y = l * sin a; } } // we can't use colour_unary: that likes 3 band only recomb matrix x = oo_unary_function recomb_op x, is_class x = im_recomb x matrix, is_image x = recomb_real_list x, is_real_list x = map recomb_real_list x, is_matrix x = error (_ "bad arguments to " ++ "recomb") { // COMPOUND_REWRAP ... signal to the colour class to go to image and // back recomb_op = Operator "recomb" (recomb matrix) Operator_type.COMPOUND_REWRAP false; // process [1,2,3 ..] as an image recomb_real_list l = (to_matrix im').value?0 { im = (float) (to_image (Vector l)).value; im' = recomb matrix im; } } extract_area x y w h obj = oo_unary_function extract_area_op obj, is_class obj = im_extract_area obj x' y' w' h', is_image obj = map (extract_range x' w') (extract_range y' h' obj), is_matrix obj = error (_ "bad arguments to " ++ "extract_area") { x' = to_real x; y' = to_real y; w' = to_real w; h' = to_real h; extract_area_op = Operator "extract_area" (extract_area x y w h) Operator_type.COMPOUND_REWRAP false; extract_range from length list = (take length @ drop from) list; } extract_band b obj = subscript obj b; extract_row y obj = oo_unary_function extract_row_op obj, is_class obj = extract_area 0 y' (get_width obj) 1 obj, is_image obj = [obj?y'], is_matrix obj = error (_ "bad arguments to " ++ "extract_row") { y' = to_real y; extract_row_op = Operator "extract_row" (extract_row y) Operator_type.COMPOUND_REWRAP false; } extract_column x obj = oo_unary_function extract_column_op obj, is_class obj = extract_area x' 0 1 height obj, is_image obj = map (\row [row?x']) obj, is_matrix obj = error (_ "bad arguments to " ++ "extract_column") { x' = to_real x; height = get_header "Ysize" obj; extract_column_op = Operator "extract_column" (extract_column x) Operator_type.COMPOUND_REWRAP false; } blend cond in1 in2 = oo_binary_function blend_op cond [in1,in2], is_class cond = im_blend (get_image cond) (get_image in1) (get_image in2), has_image cond && has_image in1 && has_image in2 = error (_ "bad arguments to " ++ "blend" ++ ": " ++ join_sep ", " (map print [cond, in1, in2])) { blend_op = Operator "blend" blend_obj Operator_type.COMPOUND_REWRAP false; blend_obj cond x = blend_result_image { [then_part, else_part] = x; // get things about our output from inputs in this order objects = [then_part, else_part, cond]; // properties of our output image target_width = get_member_list has_width get_width objects; target_height = get_member_list has_height get_height objects; target_bands = get_member_list has_bands get_bands objects; target_format = get_member_list has_format get_format objects; target_type = get_member_list has_type get_type objects; to_image x = to_image_size target_width target_height target_bands target_format x; [then_image, else_image] = map to_image [then_part, else_part]; blend_result_image = image_set_type target_type (im_blend cond then_image else_image); } } // do big first: we want to keep big's class, if possible // eg. big is a Plot, small is a 1x1 Image insert x y small big = oo_binary'_function insert_op small big, is_class big = oo_binary_function insert_op small big, is_class small = im_insert big small (to_real x) (to_real y), is_image small && is_image big = error (_ "bad arguments to " ++ "insert") { insert_op = Operator "insert" (insert x y) Operator_type.COMPOUND_REWRAP false; } insert_noexpand x y small big = oo_binary_function insert_noexpand_op small big, is_class small = oo_binary'_function insert_noexpand_op small big, is_class big = im_insert_noexpand big small (to_real x) (to_real y), is_image small && is_image big = error (_ "bad arguments to " ++ "insert_noexpand") { insert_noexpand_op = Operator "insert_noexpand" (insert_noexpand x y) Operator_type.COMPOUND_REWRAP false; } measure_draw across down measure image = mark { patch_width = image.width / across; sample_width = patch_width * (measure / 100); left_margin = (patch_width - sample_width) / 2; patch_height = image.height / down; sample_height = patch_height * (measure / 100); top_margin = (patch_height - sample_height) / 2; cods = [[x * patch_width + left_margin, y * patch_height + top_margin] :: y <- [0 .. down - 1]; x <- [0 .. across - 1]]; x = map (extract 0) cods; y = map (extract 1) cods; outer = mkim [$pixel => 255] sample_width sample_height 1; inner = mkim [] (sample_width - 4) (sample_height - 4) 1; patch = insert 2 2 inner outer; bg = mkim [] image.width image.height 1; mask = Image (im_insertset bg.value patch.value x y); image' = colour_transform_to Image_type.sRGB image; mark = if mask then Vector [0, 255, 0] else image'; } measure_sample across down measure image = measures { patch_width = image.width / across; sample_width = patch_width * (measure / 100); left_margin = (patch_width - sample_width) / 2; patch_height = image.height / down; sample_height = patch_height * (measure / 100); top_margin = (patch_height - sample_height) / 2; cods = [[x * patch_width + left_margin, y * patch_height + top_margin] :: y <- [0 .. down - 1]; x <- [0 .. across - 1]]; patches = map (\p extract_area p?0 p?1 sample_width sample_height image) cods; measures = Matrix (map (map mean) (map bandsplit patches)); } extract_bands b n obj = oo_unary_function extract_bands_op obj, is_class obj = im_extract_bands obj (to_real b) (to_real n), is_image obj = error (_ "bad arguments to " ++ "extract_bands") { extract_bands_op = Operator "extract_bands" (extract_bands b n) Operator_type.COMPOUND_REWRAP false; } invert x = oo_unary_function invert_op x, is_class x = im_invert x, is_image x = 255 - x, is_real x = error (_ "bad arguments to " ++ "invert") { invert_op = Operator "invert" invert Operator_type.COMPOUND false; } transform ipol wrap params image = oo_unary_function transform_op image, is_class image = im_transform image (to_matrix params) (to_real ipol) (to_real wrap), is_image image = error (_ "bad arguments to " ++ "transform") { transform_op = Operator "transform" (transform ipol wrap params) Operator_type.COMPOUND_REWRAP false; } transform_search max_error max_iterations order ipol wrap sample reference = oo_binary_function transform_search_op sample reference, is_class sample = oo_binary'_function transform_search_op sample reference, is_class reference = im_transform_search sample reference (to_real max_error) (to_real max_iterations) (to_real order) (to_real ipol) (to_real wrap), is_image sample && is_image reference = error (_ "bad arguments to " ++ "transform_search") { transform_search_op = Operator "transform_search" (transform_search max_error max_iterations order ipol wrap) Operator_type.COMPOUND false; } rotate interp angle image = oo_binary_function rotate_op angle image, is_class angle = oo_binary'_function rotate_op angle image, is_class image = im_affinei_all image interp.value a (-b) b a 0 0, is_real angle && is_image image = error (_ "bad arguments to " ++ "rotate") { rotate_op = Operator "rotate" (rotate interp) Operator_type.COMPOUND_REWRAP false; a = cos angle; b = sin angle; } matrix_binary fn a b = itom (fn (mtoi a) (mtoi b)) { mtoi x = im_mask2vips (Matrix x); itom x = (im_vips2mask x).value; } join_lr a b = oo_binary_function join_lr_op a b, is_class a = oo_binary'_function join_lr_op a b, is_class b = join_im a b, is_image a && is_image b = matrix_binary join_im a b, is_matrix a && is_matrix b = error (_ "bad arguments to " ++ "join_lr") { join_lr_op = Operator "join_lr" join_lr Operator_type.COMPOUND_REWRAP false; join_im a b = insert (get_width a) 0 b a; } join_tb a b = oo_binary_function join_tb_op a b, is_class a = oo_binary'_function join_tb_op a b, is_class b = join_im a b, is_image a && is_image b = matrix_binary join_im a b, is_matrix a && is_matrix b = error (_ "bad arguments to " ++ "join_tb") { join_tb_op = Operator "join_tb" join_tb Operator_type.COMPOUND_REWRAP false; join_im a b = insert 0 (get_height a) b a; } conj x = oo_unary_function conj_op x, is_class x = (re x, -im x), is_complex x || (is_image x && format == Image_format.COMPLEX) || (is_image x && format == Image_format.DPCOMPLEX) // assume it's some sort of real = x { format = get_header "BandFmt" x; conj_op = Operator "conj" conj Operator_type.COMPOUND false; } clip2fmt format image = oo_unary_function clip2fmt_op image, is_class image = im_clip2fmt image (to_real format), is_image image = error (_ "bad arguments to " ++ "clip2fmt") { clip2fmt_op = Operator "clip2fmt" (clip2fmt format) Operator_type.COMPOUND_REWRAP false; } embed type x y w h im = oo_unary_function embed_op im, is_class im = im_embed im (to_real type) (to_real x) (to_real y) (to_real w) (to_real h), is_image im = error (_ "bad arguments to " ++ "embed") { embed_op = Operator "embed" (embed type x y w h) Operator_type.COMPOUND_REWRAP false; } /* Morph a mask with a [[real]] matrix ... turn m2 into an image, morph it * with m1, turn it back to a matrix again. */ _morph_2_masks fn m1 m2 = m'' { // The [[real]] can contain 128 values ... squeeze them out! image = im_mask2vips (Matrix m2) == 255; m2_width = get_width image; m2_height = get_height image; // need to embed m2 in an image large enough for us to be able to // position m1 all around the edges, with a 1 pixel overlap image' = embed 0 (m1.width / 2) (m1.height / 2) (m2_width + (m1.width - 1)) (m2_height + (m1.height - 1)) image; // morph! image'' = fn m1 image'; // back to mask m' = im_vips2mask ((double) image''); // Turn 0 in output to 128 (don't care). m'' = map (map fn) m'.value { fn a = 128, a == 0; = a; } } dilate mask image = oo_unary_function dilate_op image, is_class image = im_dilate image (to_matrix mask), is_image image = error (_ "bad arguments to " ++ "dilate") { dilate_op = Operator "dilate" dilate_object Operator_type.COMPOUND_REWRAP false; dilate_object x = _morph_2_masks dilate mask x, is_matrix x = dilate mask x; } erode mask image = oo_unary_function erode_op image, is_class image = im_erode image (to_matrix mask), is_image image = error (_ "bad arguments to " ++ "erode") { erode_op = Operator "erode" erode_object Operator_type.COMPOUND_REWRAP false; erode_object x = _morph_2_masks erode mask x, is_matrix x = erode mask x; } conv mask image = oo_unary_function conv_op image, is_class image = im_conv image (to_matrix mask), is_image image = error (_ "bad arguments to " ++ "conv" ++ ": " ++ "conv (" ++ print mask ++ ") (" ++ print image ++ ")") { conv_op = Operator "conv" (conv mask) Operator_type.COMPOUND_REWRAP false; } convf mask image = oo_unary_function convf_op image, is_class image = im_conv_f image (to_matrix mask), is_image image = error (_ "bad arguments to " ++ "convf" ++ ": " ++ "convf (" ++ print mask ++ ") (" ++ print image ++ ")") { convf_op = Operator "convf" (convf mask) Operator_type.COMPOUND_REWRAP false; } convsep mask image = oo_unary_function convsep_op image, is_class image = im_convsep image (to_matrix mask), is_image image = error (_ "bad arguments to " ++ "convsep") { convsep_op = Operator "convsep" (convsep mask) Operator_type.COMPOUND_REWRAP false; } aconvsep layers mask image = oo_unary_function aconvsep_op image, is_class image = im_aconvsep image (to_matrix mask) (to_real layers), is_image image = error (_ "bad arguments to " ++ "aconvsep") { aconvsep_op = Operator "aconvsep" (aconvsep layers mask) Operator_type.COMPOUND_REWRAP false; } convsepf mask image = oo_unary_function convsepf_op image, is_class image = im_convsep_f image (to_matrix mask), is_image image = error (_ "bad arguments to " ++ "convsepf") { convsepf_op = Operator "convsepf" (convsepf mask) Operator_type.COMPOUND_REWRAP false; } rank w h n image = oo_unary_function rank_op image, is_class image = im_rank image (to_real w) (to_real h) (to_real n), is_image image = error (_ "bad arguments to " ++ "rank") { rank_op = Operator "rank" (rank w h n) Operator_type.COMPOUND_REWRAP false; } rank_image n x = rlist x.value, is_Group x = rlist x, is_list x = error (_ "bad arguments to " ++ "rank_image") { rlist l = wrapper ranked, has_wrapper = ranked { has_wrapper = has_member_list (has_member "Image") l; wrapper = get_member_list (has_member "Image") (get_member "Image") l; ranked = im_rank_image (map get_image l) (to_real n); } } greyc iterations amplitude sharpness anisotropy alpha sigma dl da gauss_prec interpolation fast_approx x = oo_unary_function greyc_op x, is_class x = greyc_im x, is_image x = error (_ "bad argument" ++ " (" ++ print x ++ ") to " ++ "greyc") { greyc_op = Operator "greyc" (greyc iterations amplitude sharpness anisotropy alpha sigma dl da gauss_prec interpolation fast_approx) Operator_type.COMPOUND_REWRAP false; greyc_im x = im_greyc x iterations amplitude sharpness anisotropy alpha sigma dl da gauss_prec interpolation fast_approx; } greyc_mask iterations amplitude sharpness anisotropy alpha sigma dl da gauss_prec interpolation fast_approx mask x = oo_binary_function greyc_mask_op mask x, is_class mask = oo_binary'_function greyc_mask_op mask x, is_class x = greyc_im mask x, is_image mask && is_image x = error (_ "bad arguments" ++ " (" ++ print mask ++ ", " ++ print x ++ ") " ++ "to " ++ "greyc") { greyc_mask_op = Operator "greyc_mask" (greyc_mask iterations amplitude sharpness anisotropy alpha sigma dl da gauss_prec interpolation fast_approx) Operator_type.COMPOUND_REWRAP false; greyc_im mask x = im_greyc_mask x mask iterations amplitude sharpness anisotropy alpha sigma dl da gauss_prec interpolation fast_approx; } // find the correlation surface for a small image within a big one correlate small big = oo_binary_function correlate_op small big, is_class small = oo_binary'_function correlate_op small big, is_class big = im_spcor big small, is_image small && is_image big = error (_ "bad arguments to " ++ "correlate") { correlate_op = Operator "correlate" correlate Operator_type.COMPOUND_REWRAP false; } // just sum-of-squares-of-differences correlate_fast small big = oo_binary_function correlate_fast_op small big, is_class small = oo_binary'_function correlate_fast_op small big, is_class big = im_fastcor big small, is_image small && is_image big = error (_ "bad arguments to " ++ "correlate_fast") { correlate_fast_op = Operator "correlate_fast" correlate_fast Operator_type.COMPOUND_REWRAP false; } // set Type, wrap as Plot_hist if it's a class hist_tag x = oo_unary_function hist_tag_op x, is_class x = image_set_type Image_type.HISTOGRAM x, is_image x = error (_ "bad arguments to " ++ "hist_tag") { hist_tag_op = Operator "hist_tag" (Plot_histogram @ hist_tag) Operator_type.COMPOUND false; } hist_find x = oo_unary_function hist_find_op x, is_class x = im_histgr x (-1), is_image x = error (_ "bad arguments to " ++ "hist_find") { hist_find_op = Operator "hist_find" (Plot_histogram @ hist_find) Operator_type.COMPOUND false; } hist_find_nD bins image = oo_unary_function hist_find_nD_op image, is_class image = im_histnD image (to_real bins), is_image image = error (_ "bad arguments to " ++ "hist_find_nD") { hist_find_nD_op = Operator "hist_find_nD" (hist_find_nD bins) Operator_type.COMPOUND_REWRAP false; } hist_find_indexed index value = oo_binary_function hist_find_indexed_op index value, is_class index = oo_binary'_function hist_find_indexed_op index value, is_class value = im_hist_indexed index value, is_image index && is_image value = error (_ "bad arguments to " ++ "hist_find_indexed") { hist_find_indexed_op = Operator "hist_find_indexed" (compose (compose Plot_histogram) hist_find_indexed) Operator_type.COMPOUND false; } hist_map hist image = oo_binary_function hist_map_op hist image, is_class hist = oo_binary'_function hist_map_op hist image, is_class image = im_maplut image hist, is_image hist && is_image image = error (_ "bad arguments to " ++ "hist_map") { // can't use rewrap, as we want to always wrap as image hist_map_op = Operator "hist_map" (compose (compose Image) hist_map) Operator_type.COMPOUND false; } hist_cum hist = oo_unary_function hist_cum_op hist, is_class hist = im_histcum hist, is_image hist = error (_ "bad arguments to " ++ "hist_cum") { hist_cum_op = Operator "hist_cum" hist_cum Operator_type.COMPOUND_REWRAP false; } hist_diff hist = oo_unary_function hist_diff_op hist, is_class hist = im_histdiff hist, is_image hist = error (_ "bad arguments to " ++ "hist_diff") { hist_diff_op = Operator "hist_diff" hist_diff Operator_type.COMPOUND_REWRAP false; im_histdiff h = (conv (Matrix [[-1, 1]]) @ clip2fmt (fmt (get_format h))) h { // up the format so it can represent the whole range of // possible values from this mask fmt x = Image_format.SHORT, x == Image_format.UCHAR || x == Image_format.CHAR = Image_format.INT, x == Image_format.USHORT || x == Image_format.SHORT || x == Image_format.UINT = x; } } hist_norm hist = oo_unary_function hist_norm_op hist, is_class hist = im_histnorm hist, is_image hist = error (_ "bad arguments to " ++ "hist_norm") { hist_norm_op = Operator "hist_norm" hist_norm Operator_type.COMPOUND_REWRAP false; } hist_inv hist = oo_unary_function hist_inv_op hist, is_class hist = inv hist, is_image hist = error (_ "bad arguments to " ++ "hist_inv") { hist_inv_op = Operator "hist_inv" hist_inv Operator_type.COMPOUND_REWRAP false; inv im = im_invertlut (to_matrix im''') len { // need a vertical doublemask im' = rot90 im, get_width im > 1 && get_height im == 1 = im, get_width im == 1 && get_height im > 1 = error (_ "not a hist"); len = get_height im'; // values must be scaled to 0 - 1 im'' = im' / (max im'); // add an index column on the left // again, must be in 0-1 y = ((make_xy 1 len)?1) / len; im''' = y ++ im''; } } hist_match in ref = oo_binary_function hist_match_op in ref, is_class in = oo_binary'_function hist_match_op in ref, is_class ref = im_histspec in ref, is_image in && is_image ref = error (_ "bad arguments to " ++ "hist_match") { hist_match_op = Operator "hist_match" hist_match Operator_type.COMPOUND_REWRAP false; } hist_equalize x = hist_map ((hist_norm @ hist_cum @ hist_find) x) x; hist_equalize_local w h image = oo_unary_function hist_equalize_local_op image, is_class image = lhisteq image, is_image image = error (_ "bad arguments to " ++ "hist_equalize_local") { hist_equalize_local_op = Operator "hist_equalize_local" (hist_equalize_local w h) Operator_type.COMPOUND_REWRAP false; // loop over bands, if necessary lhisteq im = im_lhisteq im (to_real w) (to_real h), get_bands im == 1 = (foldl1 join @ map lhisteq @ bandsplit) im; } // find the threshold below which are percent of the image (percent in [0,1]) // eg. hist_thresh 0.1 x == 12, then x < 12 will light up 10% of the pixels hist_thresh percent image = x { // our own normaliser ... we don't want to norm channels separately // norm to [0,1] my_hist_norm h = h / max h; // normalised cumulative hist // we sum the channels before we normalise, because we want to treat them // all the same h = (my_hist_norm @ sum @ bandsplit @ hist_cum @ hist_find) image.value; // threshold that, then use im_profile to search for the x position in the // histogram x = mean (im_profile (h > percent) 1); } /* Sometimes useful, despite plotting now being built in, for making * diagnostic images. */ hist_plot hist = oo_unary_function hist_plot_op hist, is_class hist = im_histplot hist, is_image hist = error (_ "bad arguments to " ++ "hist_plot") { hist_plot_op = Operator "hist_plot" (Image @ hist_plot) Operator_type.COMPOUND false; } zerox d x = oo_unary_function zerox_op x, is_class x = im_zerox x (to_real d), is_image x = error (_ "bad arguments to " ++ "zerox") { zerox_op = Operator "zerox" (zerox d) Operator_type.COMPOUND_REWRAP false; } resize interp xfac yfac image = oo_unary_function resize_op image, is_class image = resize_im image, is_image image = error (_ "bad arguments to " ++ "resize") { resize_op = Operator "resize" resize_im Operator_type.COMPOUND_REWRAP false; xfac' = to_real xfac; yfac' = to_real yfac; rxfac' = 1 / xfac'; ryfac' = 1 / yfac'; // is this interpolation nearest-neighbour? is_nn x = x.type == Interpolate_type.NEAREST_NEIGHBOUR; resize_im im // upscale by integer factor, nearest neighbour = im_zoom im xfac' yfac', is_int xfac' && is_int yfac' && xfac' >= 1 && yfac' >= 1 && is_nn interp // downscale by integer factor, nearest neighbour = im_subsample im rxfac' ryfac', is_int rxfac' && is_int ryfac' && rxfac' >= 1 && ryfac' >= 1 && is_nn interp // upscale by any factor, nearest neighbour // upscale by integer part, then affine to exact size = scale xg?1 yg?1 (im_zoom im xg?0 yg?0), xfac' >= 1 && yfac' >= 1 && is_nn interp // downscale by any factor, nearest neighbour // downscale by integer part, then affine to exact size = scale xs?1 ys?1 (im_subsample im xs?0 ys?0), rxfac' >= 1 && ryfac' >= 1 && is_nn interp // upscale by any factor with affine = scale xfac' yfac' im, xfac' >= 1 && yfac' >= 1 // downscale by any factor, bilinear // block shrink by integer factor, then resample to // exact with affine = scale xs?1 ys?1 (im_shrink im xs?0 ys?0), rxfac' >= 1 && ryfac' >= 1 = error ("resize: unimplemented argument combination:\n" ++ " xfac = " ++ print xfac' ++ "\n" ++ " yfac = " ++ print yfac' ++ "\n" ++ " interp = " ++ print interp ++ " (" ++ Interpolate_type.descriptions?interp.type ++ ")") { // convert a float scale to integer plus fraction // eg. scale by 2.5 becomes [2, 1.25] (x * 2.5 == x * 2 * 1.25) break f = [floor f, f / floor f]; // same, but for downsizing ... turn a float scale which is less than // 1 into an int shrink and a float scale // complicated: the int shrink may round the size down (eg. imagine // subsampling a 11 pixel wide image by 3, we'd get a 3 pixel wide // image, not a 3.666 pixel wide image), so pass in the size of image // we are operating on and adjust for any rounding // so ... x is (eg.) 467, f is (eg. 128/467, about 0.274) rbreak x f = [int_shrink, float_resample] { // the size of image we are aiming for after the combined int and // float resample x' = x * f; // int part int_shrink = floor (1 / f); // size after int shrink x'' = floor (x / int_shrink); // therefore what we need for the float part float_resample = x' / x''; } width = get_width im; height = get_height im; // grow and shrink factors xg = break xfac'; yg = break yfac'; xs = rbreak width xfac'; ys = rbreak height yfac'; // resize scale xfac yfac im = im_affinei_all im interp.value xfac 0 0 yfac 0 0; } } sharpen radius x1 y2 y3 m1 m2 in = oo_unary_function sharpen_op in, is_class in = im_sharpen in (to_real radius) (to_real x1) (to_real y2) (to_real y3) (to_real m1) (to_real m2), is_image in = error (_ "bad arguments to " ++ "sharpen") { sharpen_op = Operator "sharpen" (sharpen radius x1 y2 y3 m1 m2) Operator_type.COMPOUND_REWRAP false; } tone_analyse s m h sa ma ha in = oo_unary_function tone_analyse_op in, is_class in = im_tone_analyse in (to_real s) (to_real m) (to_real h) (to_real sa) (to_real ma) (to_real ha), is_image in = error (_ "bad arguments to " ++ "tone_analyse") { tone_analyse_op = Operator "tone_analyse" (Plot_histogram @ tone_analyse s m h sa ma ha) Operator_type.COMPOUND false; } tone_map hist image = oo_binary_function tone_map_op hist image, is_class hist = oo_binary'_function tone_map_op hist image, is_class image = im_tone_map image hist, is_image hist && is_image image = error (_ "bad arguments to " ++ "tone_map") { tone_map_op = Operator "tone_map" tone_map Operator_type.COMPOUND_REWRAP false; } tone_build fmt b w s m h sa ma ha = (Plot_histogram @ clip2fmt fmt) (im_tone_build_range mx mx (to_real b) (to_real w) (to_real s) (to_real m) (to_real h) (to_real sa) (to_real ma) (to_real ha)) { mx = Image_format.maxval fmt; } icc_export depth profile intent in = oo_unary_function icc_export_op in, is_class in = im_icc_export_depth in (to_real depth) (expand profile) (to_real intent), is_image in = error (_ "bad arguments to " ++ "icc_export") { icc_export_op = Operator "icc_export" (icc_export depth profile intent) Operator_type.COMPOUND_REWRAP false; } icc_import profile intent in = oo_unary_function icc_import_op in, is_class in = im_icc_import in (expand profile) (to_real intent), is_image in = error (_ "bad arguments to " ++ "icc_import") { icc_import_op = Operator "icc_import" (icc_import profile intent) Operator_type.COMPOUND_REWRAP false; } icc_import_embedded intent in = oo_unary_function icc_import_embedded_op in, is_class in = im_icc_import_embedded in (to_real intent), is_image in = error (_ "bad arguments to " ++ "icc_import_embedded") { icc_import_embedded_op = Operator "icc_import_embedded" (icc_import_embedded intent) Operator_type.COMPOUND_REWRAP false; } icc_transform in_profile out_profile intent in = oo_unary_function icc_transform_op in, is_class in = im_icc_transform in (expand in_profile) (expand out_profile) (to_real intent), is_image in = error (_ "bad arguments to " ++ "icc_transform") { icc_transform_op = Operator "icc_transform" (icc_transform in_profile out_profile intent) Operator_type.COMPOUND_REWRAP false; } icc_ac2rc profile in = oo_unary_function icc_ac2rc_op in, is_class in = im_icc_ac2rc in (expand profile), is_image in = error (_ "bad arguments to " ++ "icc_ac2rc") { icc_ac2rc_op = Operator "icc_ac2rc" (icc_ac2rc profile) Operator_type.COMPOUND_REWRAP false; } // Given a xywh rect, flip it around so wh are always positive rect_normalise x y w h = [x', y', w', h'] { x' = x + w, w < 0 = x; y' = y + h, h < 0 = y; w' = abs w; h' = abs h; } draw_flood_blob x y ink image = oo_unary_function draw_flood_blob_op image, is_class image = im_draw_flood_blob image (to_real x) (to_real y) ink, is_image image = error (_ "bad arguments to " ++ "draw_flood_blob") { draw_flood_blob_op = Operator "draw_flood_blob" (draw_flood_blob x y ink) Operator_type.COMPOUND_REWRAP false; } draw_flood x y ink image = oo_unary_function draw_flood_op image, is_class image = im_draw_flood image (to_real x) (to_real y) ink, is_image image = error (_ "bad arguments to " ++ "draw_flood") { draw_flood_op = Operator "draw_flood" (draw_flood x y ink) Operator_type.COMPOUND_REWRAP false; } /* This version of draw_rect uses insert_noexpand and will be fast, even for * huge images. */ draw_rect_width x y w h f t ink image = oo_unary_function draw_rect_width_op image, is_class image = my_draw_rect_width image (to_int x) (to_int y) (to_int w) (to_int h) (to_int f) (to_int t) ink, is_image image = error (_ "bad arguments to " ++ "draw_rect_width") { draw_rect_width_op = Operator "draw_rect_width" (draw_rect_width x y w h f t ink) Operator_type.COMPOUND_REWRAP false; my_draw_rect_width image x y w h f t ink = insert x' y' (block w' h') image, f == 1 = (insert x' y' (block w' t) @ insert (x' + w' - t) y' (block t h') @ insert x' (y' + h' - t) (block w' t) @ insert x' y' (block t h')) image { insert = insert_noexpand; block w h = image_new w h (get_bands image) (get_format image) (get_coding image) (get_type image) ink' 0 0; ink' = Vector ink, is_list ink = ink; [x', y', w', h'] = rect_normalise x y w h; } } /* Default to 1 pixel wide edges. */ draw_rect x y w h f ink image = draw_rect_width x y w h f 1 ink image; /* This version of draw_rect uses the paintbox rect draw operation. It is an * inplace operation and will use bucketloads of memory. */ draw_rect_paintbox x y w h f ink image = oo_unary_function draw_rect_op image, is_class image = im_draw_rect image (to_real x) (to_real y) (to_real w) (to_real h) (to_real f) ink, is_image image = error (_ "bad arguments to " ++ "draw_rect_paintbox") { draw_rect_op = Operator "draw_rect" (draw_rect x y w h f ink) Operator_type.COMPOUND_REWRAP false; } draw_circle x y r f ink image = oo_unary_function draw_circle_op image, is_class image = im_draw_circle image (to_real x) (to_real y) (to_real r) (to_real f) ink, is_image image = error (_ "bad arguments to " ++ "draw_circle") { draw_circle_op = Operator "draw_circle" (draw_circle x y r f ink) Operator_type.COMPOUND_REWRAP false; } draw_line x1 y1 x2 y2 ink image = oo_unary_function draw_line_op image, is_class image = im_draw_line image (to_real x1) (to_real y1) (to_real x2) (to_real y2) ink, is_image image = error (_ "bad arguments to " ++ "draw_line") { draw_line_op = Operator "draw_line" (draw_line x1 y1 x2 y2 ink) Operator_type.COMPOUND_REWRAP false; } print_base base in = oo_unary_function print_base_op in, is_class in = map (print_base base) in, is_list in = print_base_real, is_real in = error (_ "bad arguments to " ++ "print_base") { print_base_op = Operator "print_base" (print_base base) Operator_type.COMPOUND false; print_base_real = error "print_base: bad base", base < 2 || base > 16 = "0", in < 0 || chars == [] = reverse chars { digits = map (\x x % base) (takewhile (not_equal 0) (iterate (\x idivide x base) in)); chars = map tohd digits; tohd x = (char) ((int) '0' + x), x < 10 = (char) ((int) 'A' + (x - 10)); } } /* id x: the identity function * * id :: * -> * */ id x = x; /* const x y: junk y, return x * * (const 3) is the function that always returns 3. * const :: * -> ** -> * */ const x y = x; /* converse fn a b: swap order of args to fn * * converse fn a b == fn b a * converse :: (* -> ** -> ***) -> ** -> * -> *** */ converse fn a b = fn b a; /* fix fn x: find the fixed point of a function */ fix fn x = limit (iterate fn x); /* until pred fn n: apply fn to n until pred succeeds; return that value * * until (more 1000) (multiply 2) 1 = 1024 * until :: (* -> bool) -> (* -> *) -> * -> * */ until pred fn n = n, pred n = until pred fn (fn n); /* Infinite list of primes. */ primes = 1 : (sieve [2 ..]) { sieve l = hd l : sieve (filter (nmultiple (hd l)) (tl l)); nmultiple n x = x / n != (int) (x / n); } /* Map an n-ary function (pass the args as a list) over groups of objects. * The objects can be single objects or groups. If more than one * object is a group, we iterate for the length of the smallest group. * Don't loop over plain lists, since we want (eg.) "mean [1, 2, 3]" to work. * Treat [] as no-value --- ie. if any of the inputs are [] we put [] into the * output and don't apply the function. copy-pasted into _types, keep in sync */ map_nary fn args = fn args, groups == [] = Group (map process [0, 1 .. shortest - 1]) { // find all the group arguments groups = filter is_Group args; // what's the length of the shortest group arg? shortest = foldr1 min_pair (map (len @ get_value) groups); // process index n ... pull that member from each argument // recurse to handle application, so we work for nested groups too process n = NULL, any (map (is_noval n) args) = map_nary fn (map (extract n) args) { extract n arg = arg.value?n, is_Group arg = arg; is_noval n arg = is_Group arg && arg.value?n == NULL; } } /* Map a 1-ary function over an object. */ map_unary fn a = map_nary (list_1ary fn) [a]; /* Map a 2-ary function over a pair of objects. */ map_binary fn a b = map_nary (list_2ary fn) [a, b]; /* Map a 3-ary function over three objects. */ map_trinary fn a b c = map_nary (list_3ary fn) [a, b, c]; /* Map a 4-ary function over three objects. */ map_quaternary fn a b c d = map_nary (list_4ary fn) [a, b, c, d]; /* Same as map_nary, but for lists. Handy for (eg.) implementing arith ops on * vectors and matricies. */ map_nary_list fn args = fn args, lists == [] = map process [0, 1 .. shortest - 1] { // find all the list arguments lists = filter is_list args; // what's the length of the shortest list arg? shortest = foldr1 min_pair (map len lists); // process index n ... pull that member from each argument // recurse to handle application, so we work for nested lists too process n = map_nary_list fn (map (extract n) args) { extract n arg = arg?n, is_list arg = arg; } } map_unaryl fn a = map_nary_list (list_1ary fn) [a]; map_binaryl fn a b = map_nary_list (list_2ary fn) [a, b]; /* Remove features smaller than x pixels across from an image. This used to be * rather complex ... convsep is now good enough to use. */ smooth x image = convsep (matrix_gaussian_blur (to_real x * 2)) image; /* Chop up an image into a list of lists of smaller images. Pad edges with * black. */ imagearray_chop tile_width tile_height hoverlap voverlap i = map chop' [0, vstep .. last_y] { width = get_width i; height = get_height i; bands = get_bands i; format = get_format i; type = get_type i; tile_width' = to_real tile_width; tile_height' = to_real tile_height; hoverlap' = to_real hoverlap; voverlap' = to_real voverlap; /* Unique pixels per tile. */ hstep = tile_width' - hoverlap'; vstep = tile_height' - voverlap'; /* Number of tiles across and down. Remember the case where width == * hstep. */ across = (int) ((width - 1) / hstep) + 1; down = (int) ((height - 1) / vstep) + 1; /* top/left of final tile. */ last_x = hstep * (across - 1); last_y = vstep * (down - 1); /* How much do we need to pad by? */ sx = last_x + tile_width'; sy = last_y + tile_height'; /* Expand image with black to pad size. */ pad = embed 0 0 0 sx sy i; /* Chop up a row. */ chop' y = map chop'' [0, hstep .. last_x] { chop'' x = extract_area x y tile_width' tile_height' pad; } } /* Reassemble image. */ imagearray_assemble hoverlap voverlap il = (image_set_origin 0 0 @ foldl1 tbj @ map (foldl1 lrj)) il { lrj l r = insert (get_width l + hoverlap) 0 r l; tbj t b = insert 0 (get_height t + voverlap) b t; } /* Generate an nxn identity matrix. */ identity_matrix n = error "identity_matrix: n > 0", n < 1 = map line [0 .. n - 1] { line p = take p [0, 0 ..] ++ [1] ++ take (n - p - 1) [0, 0 ..]; } /* Incomplete gamma function Q(a, x) == 1 - P(a, x) FIXME ... this is now a builtin, until we can get a nice List class (requires overloadable ':') gammq a x = error "bad args", x < 0 || a <= 0 = 1 - gamser, x < a + 1 = gammcf { gamser = (gser a x)?0; gammcf = (gcf a x)?0; } */ /* Incomplete gamma function P(a, x) evaluated as series representation. Also * return ln(gamma(a)) ... nr in c, pp 218 */ gser a x = [gamser, gln] { gln = gammln a; gamser = error "bad args", x < 0 = 0, x == 0 = 1 // fix this { // maximum iterations maxit = 100; ap = List [a + 1, a + 2 ...]; xoap = x / ap; del = map product (prefixes xoap.value); /* del = map (multiply (1 / a)) (map product (prefixes xoap)) del = xap = iterate (multiply */ /* Generate all prefixes of a list ... [1,2,3] -> [[1], [1, 2], [1, 2, * 3], [1, 2, 3, 4] ...] */ prefixes l = map (converse take l) [1..]; } } /* ln(gamma(xx)) ... nr in c, pp 214 */ gammln xx = gln { cof = [76.18009172947146, -86.50532032941677, 24.01409824083091, -1.231739572450155, 0.1208650973866179e-2, -0.5395239384953e-5]; y = take 6 (iterate (add 1) (xx + 1)); ser = 1.000000000190015 + sum (map2 divide cof y); tmp = xx + 0.5; tmp' = tmp - ((xx + 0.5) * log tmp); gln = -tmp + log (2.5066282746310005 * ser / xx); } /* make a LUT from a scatter */ buildlut x = Plot_histogram (im_buildlut x), is_Matrix x && x.width > 1 = im_buildlut (Matrix x), is_matrix x && is_list_len_more 1 x?0 = error (_ "bad arguments to " ++ "buildlut"); /* Linear regression. Return a class with the stuff we need in. * from s15.2, p 665 NR in C */ linreg xes yes = obj { obj = class { // in case we ever get shown in the workspace _vislevel = 2; slope = sum [t * y :: [t, y] <- zip2 tes yes] / st2; intercept = (sy - sx * slope) / ss; chi2 = sum [(y - intercept - slope * x) ** 2 :: [x, y] <- zip2 xes yes]; siga = (chi2 / (ss - 2)) ** 0.5 * ((1 + sx ** 2 / (ss * st2)) / ss) ** 0.5; sigb = (chi2 / (ss - 2)) ** 0.5 * (1 / st2) ** 0.5; // for compat with linregw, see below q = 1.0; } ss = len xes; sx = sum xes; sy = sum yes; sxoss = sx / ss; tes = [x - sxoss :: x <- xes]; st2 = sum [t ** 2 :: t <- tes]; } /* Weighted linear regression. Xes, yes and a list of deviations. */ linregw xes yes devs = obj { obj = class { // in case we ever get shown in the workspace _vislevel = 2; slope = sum [(t * y) / sd :: [t, y, sd] <- zip3 tes yes devs] / st2; intercept = (sy - sx * slope) / ss; chi2 = sum [((y - intercept - slope * x) / sd) ** 2 :: [x, y, sd] <- zip3 xes yes devs]; siga = ((1 + sx * sx / (ss * st2)) / ss) ** 0.5; sigb = (1 / st2) ** 0.5; q = gammq (0.5 * (len xes - 2)) (0.5 * chi2); } wt = [sd ** -0.5 :: sd <- devs]; ss = sum wt; sx = sum [x * w :: [x, w] <- zip2 xes wt]; sy = sum [y * w :: [y, w] <- zip2 yes wt]; sxoss = sx / ss; tes = [(x - sxoss) / sd :: [x, sd] <- zip2 xes devs]; st2 = sum [t ** 2 :: t <- tes]; } /* Clustering: pass in a list of points, repeatedly merge the * closest two points until no two points are closer than the threshold. * Return [merged-points, corresponding-weights]. A weight is a list of the * indexes we merged to make that point, ie. len weight == how significant * this point is. * * eg. * cluster 12 [152,154,155,42,159] == * [[155,42],[[1,2,0,4],[3]]] */ cluster thresh points = oo_unary_function cluster_op points, is_class points // can't use [0..len points - 1], in case len points == 0 = merge [points, map (converse cons []) (take (len points) [0 ..])], is_list points = error (_ "bad arguments to " ++ "cluster") { cluster_op = Operator "cluster" (cluster thresh) Operator_type.COMPOUND false; merge x = x, m < 2 || d > thresh = merge [points', weights'] { [points, weights] = x; m = len points; // generate indexes of all possible pairs, avoiding comparing a thing // to itself, and assuming that dist is reflexive // first index is always less than 2nd index // the +1,+2 makes sure we have an increasing generator, otherwise we // can get [3 .. 4] (for example), which will make a decreasing // sequence pairs = [[x, y] :: x <- [0 .. m - 1]; y <- [x + 1, x + 2 .. m - 1]]; // distance function // arg is eg. [3,1], meaning get distance from point 3 to point 1 dist x = abs (points?i - points?j) { [i, j] = x; } // smallest distance, then the two points we merge p = minpos (map dist pairs); d = dist pairs?p; [i, j] = pairs?p; // new point and new weight nw = weights?i ++ weights?j; np = (points?i * len weights?i + points?j * len weights?j) / len nw; // remove element i from a list remove i l = take i l ++ drop (i + 1) l; // remove two old points, add the new merged one // i < j (see "pairs", above) points' = np : remove i (remove j points); weights' = nw : remove i (remove j weights); } } /* Extract the area of an image around an arrow. * Transform the image to make the arrow horizontal, then displace by hd and * vd pxels, then cut out a bit h pixels high centered on the arrow. */ extract_arrow hd vd h arrow = extract_area (re p' + hd) (im p' - h / 2 + vd) (re pv) h im' { // the line as a polar vector pv = polar (arrow.width, arrow.height); a = im pv; // smallest rotation that will make the line horizontal a' = 360 - a, a > 270 = 180 - a, a > 90 = -a; im' = rotate Interpolate_bilinear a' arrow.image; // look at the start and end of the arrow, pick the leftmost p = (arrow.left, arrow.top), arrow.left <= arrow.right = (arrow.right, arrow.bottom); // transform that point to im' space p' = rectangular (polar p + (0, a')) + (im'.xoffset, im'.yoffset); } /* You'd think these would go in _convert, but they are not really colour ops, * so put them here. */ rad2float image = oo_unary_function rad2float_op image, is_class image = im_rad2float image, is_image image = error (_ "bad arguments to " ++ "rad2float") { rad2float_op = Operator "rad2float" rad2float Operator_type.COMPOUND_REWRAP false; } float2rad image = oo_unary_function float2rad_op image, is_class image = im_float2rad image, is_image image = error (_ "bad arguments to " ++ "float2rad") { float2rad_op = Operator "float2rad" float2rad Operator_type.COMPOUND_REWRAP false; } segment x = oo_unary_function segment_op x, is_class x = image', is_image x = error (_ "bad arguments to " ++ "segment") { segment_op = Operator "segment" segment Operator_type.COMPOUND_REWRAP false; [image, nsegs] = im_segment x; image' = im_copy_set_meta image "n-segments" nsegs; } point a b = oo_binary_function point_op a b, is_class a = oo_binary'_function point_op a b, is_class b = im_read_point b x y, is_image b = [b?x?y], is_matrix b = [b?x], is_real_list b && y == 0 = [b?y], is_real_list b && x == 0 = error (_ "bad arguments to " ++ "point") { point_op = Operator "point" (\a\b Vector (point a b)) Operator_type.COMPOUND false; (x, y) = a, is_complex a; = (a?0, a?1), is_real_list a && is_list_len 2 a = error "bad position format"; } /* Generate an ImageMagick (or GraphicsMagick) command suitable for * im_system_image. Use convert.exe in $VIPSHOME/bin, if it exists, otherwise * assume it's on the path somewhere. */ magick_command switch = join_sep " " [convert, "\"%s\"", switch, "\"%s\""] { prefs = Workspaces.Preferences; use_gm = prefs.USE_GRAPHICSMAGICK; name = if use_gm then "gm" else "convert"; exe = concat [name, expand "$EXEEXT"]; vipsexe = path_absolute [expand "$VIPSHOME", "bin", exe]; final_exe = vipsexe, search vipsexe != [] = exe; convert = join_sep " " [final_exe, "convert"], use_gm = final_exe; } /* Run a command on an image. See magick_command, for example. */ system_image command x = oo_unary_function system_image_op x, is_class x = system x, is_image x = error (_ "bad arguments to " ++ "system_image") { system_image_op = Operator "system_image" (system_image command) Operator_type.COMPOUND_REWRAP false; system im = image_out { [image_out, log] = im_system_image (get_image im) "%s.tif" "%s.tif" command; } } nip2-8.7.0/share/nip2/compat/7.38/Filter.def0000644000175000017500000012653013224651032015065 00000000000000Filter_conv_item = class Menupullright "_Convolution" "various spatial convolution filters" { /* Some useful masks. */ filter_blur = Matrix_con 9 0 [[1, 1, 1], [1, 1, 1], [1, 1, 1]]; filter_sharp = Matrix_con 8 0 [[-1, -1, -1], [-1, 16, -1], [-1, -1, -1]]; filter_emboss = Matrix_con 1 128 [[-1, 0], [0, 1]]; filter_laplacian = Matrix_con 1 128 [[-1, -1, -1], [-1, 8, -1], [-1, -1, -1]]; filter_sobel = Matrix_con 1 128 [[1, 2, 1], [0, 0, 0], [-1, -2, -1]]; filter_lindet = Matrix_con 1 0 [[1, 1, 1], [-2, -2, -2], [1, 1, 1]]; Blur_item = class Menuaction "_Blur" "3x3 blur of image" { action x = map_unary (conv filter_blur) x; } Sharpen_item = class Menuaction "_Sharpen" "3x3 sharpen of image" { action x = map_unary (conv filter_sharp) x; } Emboss_item = class Menuaction "_Emboss" "1 pixel displace emboss" { action x = map_unary (conv filter_emboss) x; } Laplacian_item = class Menuaction "_Laplacian" "3x3 laplacian edge detect" { action x = map_unary (conv filter_laplacian) x; } Sobel_item = class Menuaction "So_bel" "3x3 Sobel edge detect" { action x = map_unary sobel x { sobel im = abs (a - 128) + abs (b - 128) { a = conv filter_sobel im; b = conv (rot270 filter_sobel) im; } } } /* 3x3 line detect of image diagonals should be scaled down by root(2) I guess Kirk */ Linedet_item = class Menuaction "Li_ne Detect" "3x3 line detect" { action x = map_unary lindet x { lindet im = foldr1 max_pair images { masks = take 4 (iterate rot45 filter_lindet); images = map (converse conv im) masks; } } } Usharp_item = class Menuaction "_Unsharp Mask" "cored sharpen of L only in LAB image" { action x = class _result { _vislevel = 3; size = Option "Radius" [ "3 pixels", "5 pixels", "7 pixels", "9 pixels", "11 pixels", "51 pixels" ] 0; st = Scale "Smoothness threshold" 0 5 1.5; bm = Scale "Brighten by at most" 1 50 10; dm = Scale "Darken by at most" 1 50 50; fs = Scale "Sharpen flat areas by" (-2) 5 1; js = Scale "Sharpen jaggy areas by" (-2) 5 2; _result = map_unary process x { process in = Image in''' { in' = colour_transform_to Image_type.LABS in.value; in'' = sharpen [3, 5, 7, 9, 11, 51]?size st bm dm fs js in'; in''' = colour_transform_to (get_type in) in''; } } } } sep1 = Menuseparator; Custom_blur_item = class Menuaction "Custom B_lur / Sharpen" "blur or sharpen with tuneable parameters" { action x = class _result { _vislevel = 3; type = Option "Type" ["Blur", "Sharpen"] 0; r = Scale "Radius" 1 100 1; fac = Scale "Amount" 0 1 1; layers = Scale "Layers" 1 100 10; shape = Option "Mask shape" [ "Square", "Gaussian" ] 0; prec = Option "Precision" ["Int", "Float", "Approximate"] 0; _result = map_unary process x { process in = clip2fmt blur.format proc { mask = matrix_blur r.value, shape.value == 0 = matrix_gaussian_blur r.value; blur = [convsep, convsepf, aconvsep layers]?prec mask in; proc = in + fac * (in - blur), type == 1 = blur * fac + in * (1 - fac); } } } } Custom_conv_item = class Menuaction "Custom C_onvolution" "convolution filter with tuneable parameters" { action x = class _result { _vislevel = 3; matrix = Matrix_con 1 0 [[0, 0, 0], [0, 1, 0], [0, 0, 0]]; separable = Toggle "Seperable convolution" false, matrix.width == 1 || matrix.height == 1 = false; type = Option "Convolution type" ["Int", "Float"] 0; rotate = Option "Rotate" [ "Don't rotate", "4 x 45 degrees", "8 x 45 degrees", "2 x 90 degrees" ] 0; _result = map_unary process x { process in = in.Image in' { conv_fn = im_lindetect, !separable && type == 0 && rotate == 1 = im_compass, !separable && type == 0 && rotate == 2 = im_gradient, !separable && type == 0 && rotate == 3 = im_conv, !separable && type == 0 = im_convsep, separable && type == 0 = im_conv_f, !separable && type == 1 = im_convsep_f, separable && type == 1 = error "boink!"; in' = conv_fn in.value matrix; } } } } } Filter_rank_item = class Menupullright "_Rank" "various rank filters" { Median_item = class Menuaction "_Median" "3x3 median rank filter" { action x = map_unary (rank 3 3 4) x; } Image_rank_item = class Menuaction "_Image Rank" "pixelwise rank a list or group of images" { action x = class _result { _vislevel = 3; select = Expression "Rank" ((int) (guess_size / 2)) { guess_size = len x, is_list x = len x.value, is_Group x = 0; } // can't really iterate over groups ... since we allow a group // argument _result = rank_image select x; } } Custom_rank_item = class Menuaction "Custom _Rank" "rank filter with tuneable parameters" { action x = class _result { _vislevel = 3; window_width = Expression "Window width" 3; window_height = Expression "Window height" 3; select = Expression "Rank" ((int) ((to_real window_width * to_real window_height) / 2)); _result = map_unary process x { process in = rank window_width window_height select in; } } } } Filter_morphology_item = class Menupullright "_Morphology" "various morphological filters" { /* Some useful masks. */ mask8 = Matrix_mor [[255, 255, 255], [255, 255, 255], [255, 255, 255]]; mask4 = Matrix_mor [[128, 255, 128], [255, 255, 255], [128, 255, 128]]; mask1 = Matrix_mor [[0, 0, 0], [0, 255, 0], [0, 0, 0]]; thin = Matrix_mor [[0, 0, 0], [128, 255, 128], [255, 255, 255]]; Threshold_item = Select_item.Threshold_item; sep1 = Menuseparator; Dilate_item = class Menupullright "_Dilate" "morphological dilate" { Dilate8_item = class Menuaction "_8-connected" "dilate with an 8-connected mask" { action x = map_unary (dilate mask8) x; } Dilate4_item = class Menuaction "_4-connected" "dilate with a 4-connected mask" { action x = map_unary (dilate mask4) x; } } Erode_item = class Menupullright "_Erode" "morphological erode" { Erode8_item = class Menuaction "_8-connected" "erode with an 8-connected mask" { action x = map_unary (erode mask8) x; } Erode4_item = class Menuaction "_4-connected" "erode with a 4-connected mask" { action x = map_unary (erode mask4) x; } } Custom_morph_item = class Menuaction "Custom _Morphology" "convolution morphological operator" { action x = class _result { _vislevel = 3; mask = mask4; type = Option "Operation" ["Erode", "Dilate"] 1; apply = Expression "Number of times to apply mask" 1; _result = map_unary morph x { morph image = Image value' { fatmask = (iterate (dilate mask) mask)?(to_real apply - 1); value' = im_erode image.value fatmask, type.value == 0 = im_dilate image.value fatmask; } } } } sep2 = Menuseparator; Open_item = class Menuaction "_Open" "open with an 8-connected mask" { action x = map_unary (dilate mask8 @ erode mask8) x; } Close_item = class Menuaction "_Close" "close with an 8-connected mask" { action x = map_unary (erode mask8 @ dilate mask8) x; } Clean_item = class Menuaction "C_lean" "remove 8-connected isolated points" { action x = map_unary clean x { clean x = x ^ erode mask1 x; } } Thin_item = class Menuaction "_Thin" "thin once" { action x = map_unary thinall x { masks = take 8 (iterate rot45 thin); thin1 m x = x ^ erode m x; thinall x = foldr thin1 x masks; } } } Filter_fourier_item = class Menupullright "_Fourier" "various Fourier filters" { preview_size = 64; sense_option = Option "Sense" [ "Pass", "Reject" ] 0; // make a visualisation image make_vis fn = (Image @ image_set_type Image_type.FOURIER @ rotquad @ fn) (im_create_fmask preview_size preview_size); // make the process function process fn in = (Image @ fn) (im_flt_image_freq in.value); New_ideal_item = class Menupullright "_Ideal" "various ideal Fourier filters" { High_low_item = class Menuaction "_High or Low Pass" "highpass/lowpass ideal Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; // call a freq func with our parameters _params f = f sense.value fc.value 0 0 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" "ring pass/reject ideal Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; rw = Scale "Ring width" 0.01 0.99 0.5; // call a freq func with our parameters _params f = f (sense.value + 6) fc.value rw.value 0 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Band_item = class Menuaction "_Band Pass or Band Reject" "band pass/reject ideal Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fcx = Scale "Horizontal frequency cutoff" 0.01 0.99 0.5; fcy = Scale "Vertical frequency cutoff" 0.01 0.99 0.5; r = Scale "Radius" 0.01 0.99 0.5; // call a freq func with our parameters _params f = f (sense.value + 12) fcx.value fcy.value r.value 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } } New_gaussian_item = class Menupullright "_Gaussian" "various Gaussian Fourier filters" { High_low_item = class Menuaction "_High or Low Pass" "highpass/lowpass Gaussian Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; // call a freq func with our parameters _params f = f (sense.value + 4) fc.value ac.value 0 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" "ring pass/reject Gaussian Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; rw = Scale "Ring width" 0.01 0.99 0.5; // call a freq func with our parameters _params f = f (sense.value + 10) fc.value rw.value ac.value 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Band_item = class Menuaction "_Band Pass or Band Reject" "band pass/reject Gaussian Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fcx = Scale "Horizontal frequency cutoff" 0.01 0.99 0.5; fcy = Scale "Vertical frequency cutoff" 0.01 0.99 0.5; r = Scale "Radius" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; // call a freq func with our parameters _params f = f (sense.value + 16) fcx.value fcy.value r.value ac.value 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } } New_butterworth_item = class Menupullright "_Butterworth" "various Butterworth Fourier filters" { High_low_item = class Menuaction "_High or Low Pass" "highpass/lowpass Butterworth Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; o = Scale "Order" 1 10 2; // call a freq func with our parameters _params f = f (sense.value + 2) o.value fc.value ac.value 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" "ring pass/reject Butterworth Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; rw = Scale "Ring width" 0.01 0.99 0.5; o = Scale "Order" 1 10 2; // call a freq func with our parameters _params f = f (sense.value + 8) o.value fc.value rw.value ac.value 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Band_item = class Menuaction "_Band Pass or Band Reject" "band pass/reject Butterworth Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fcx = Scale "Horizontal frequency cutoff" 0.01 0.99 0.5; fcy = Scale "Vertical frequency cutoff" 0.01 0.99 0.5; r = Scale "Radius" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; o = Scale "Order" 1 10 2; // call a freq func with our parameters _params f = f (sense.value + 14) o.value fcx.value fcy.value r.value ac.value; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } } } Filter_enhance_item = class Menupullright "_Enhance" "various enhancement filters" { Falsecolour_item = class Menuaction "_False Colour" "false colour a mono image" { action x = class _result { _vislevel = 3; o = Scale "Offset" (-255) 255 0; clip = Toggle "Clip colour range" false; _result = map_unary process x { process im = falsecolour mono'' { mono = colour_transform_to Image_type.B_W im; mono' = mono + o; mono'' = (unsigned char) mono', clip = (unsigned char) (mono' & 0xff); } } } } Statistical_diff_item = class Menuaction "_Statistical Difference" "statistical difference of an image" { action x = class _result { _vislevel = 3; wsize = Expression "Window size" 11; tmean = Expression "Target mean" 128; mean_weight = Scale "Mean weight" 0 1 0.8; tdev = Expression "Target deviation" 50; dev_weight = Scale "Deviation weight" 0 1 0.8; border = Toggle "Output image matches input image in size" true; _result = map_unary process x { process in = Image in'' { in' = colour_transform_to Image_type.B_W in.value; fn = im_stdif, border = im_stdif_raw; in'' = fn in' mean_weight.value tmean.expr dev_weight.value tdev.expr wsize.expr wsize.expr; } } } } Hist_equal_item = class Menupullright "_Equalise Histogram" "equalise contrast" { Global_item = class Menuaction "_Global" "equalise contrast globally" { action x = map_unary hist_equalize x; } Local_item = class Menuaction "_Local" "equalise contrast within a roving window" { action x = class _result { _vislevel = 3; window_width = Expression "Window width" 20; window_height = Expression "Window height" 20; _result = map_unary process x { process in = hist_equalize_local window_width.expr window_height.expr in; } } } } } Filter_correlate_item = class Menupullright "Spatial _Correlation" "calculate correlation surfaces" { Correlate_item = class Menuaction "_Correlate" "calculate correlation coefficient" { action a b = map_binary corr a b { corr a b = correlate a b, a.width <= b.width && a.height <= b.height = correlate b a; } } Correlate_fast_item = class Menuaction "_Simple Difference" "calculate sum of squares of differences" { action a b = map_binary corr a b { corr a b = correlate_fast a b, a.width <= b.width && a.height <= b.height = correlate_fast b a; } } } Filter_greyc_item = class Menupullright "_GREYCstoration" "noise-removing filter" { Denoise_item = class Menuaction "Denoise" "Noise-removing filter" { action x = class _result { _vislevel = 3; iterations = Scale "Iterations" 1 5 1; amplitude = Scale "Amplitude" 1 100 40; sharpness = Scale "Sharpness" 0 3 0.9; anisotropy = Scale "Anisotropy" 0 1 0.15; alpha = Scale "Noise scale" 0 5 0.6; sigma = Scale "Geometry regularity" 0 2 1.1; dl = Scale "Spatial integration step" 0 1 0.8; da = Scale "Angular integration step" 0 90 30; gauss_prec = Scale "Precision" 1 10 2; interpolation = Option "Interpolation" ["Nearest-neighbour", "Bilinear", "Runge-Kutta"] 0; fast_approx = Toggle "Fast approximation" true; _result = greyc (to_real iterations) (to_real amplitude) (to_real sharpness) (to_real anisotropy) (to_real alpha) (to_real sigma) (to_real dl) (to_real da) (to_real gauss_prec) (to_real interpolation) (to_real fast_approx) x; } } Enlarge_item = class Menuaction "Enlarge" "Enlarge image" { action x = class _result { _vislevel = 3; scale = Scale "Enlarge" 1 10 3; iterations = Scale "Iterations" 1 5 3; amplitude = Scale "Amplitude" 1 100 20; sharpness = Scale "Sharpness" 0 3 0.2; anisotropy = Scale "Anisotropy" 0 1 0.9; alpha = Scale "Noise scale" 0 5 0.1; sigma = Scale "Geometry regularity" 0 2 1.5; dl = Scale "Spatial integration step" 0 1 0.8; da = Scale "Angular integration step" 0 90 30; gauss_prec = Scale "Precision" 1 10 2; interpolation = Option "Interpolation" ["Nearest-neighbour", "Bilinear", "Runge-Kutta"] 0; fast_approx = Toggle "Fast approximation" true; _result = greyc (to_real iterations) (to_real amplitude) (to_real sharpness) (to_real anisotropy) (to_real alpha) (to_real sigma) (to_real dl) (to_real da) (to_real gauss_prec) (to_real interpolation) (to_real fast_approx) (resize Interpolate_bilinear (to_real scale) (to_real scale) x); } } } Filter_magick_item = class Menupullright "Magic_k" "various Image/Graphics Magick filters" { system command x = map_unary (system_image command) x; radius_widget = Scale "Radius" 1 100 10; sigma_widget = Scale "Sigma" 0.1 10 1; angle_widget = Scale "Angle" (-360) 360 0; text_widget = String "Text to draw" "AaBbCcDdEe"; print_colour triple = concat ["\"#", concat (map fmt triple), "\""] { fmt x = reverse (take 2 (reverse (print_base 16 (x + 256)))); } Foreground triple = class Colour "sRGB" triple { _flag = "-fill " ++ print_colour triple; Colour_edit space triple = this.Foreground triple; } foreground_widget = Foreground [0, 0, 0]; Background triple = class Colour "sRGB" triple { _flag = "-background " ++ print_colour triple; Colour_edit space triple = this.Background triple; } background_widget = Background [255, 255, 255]; Antialias value = class Toggle "Antialias" value { _flag = "-antialias", value = "+antialias"; Toggle_edit caption value = this.Antialias value; } antialias_widget = Antialias true; Gravity gravity = class Option_string "Gravity" [ "None", "Center", "East", "Forget", "NorthEast", "North", "NorthWest", "SouthEast", "South", "SouthWest", "West", "Static" ] gravity { _flag = "-gravity " ++ gravity; Option_edit caption labels value = this.Gravity labels?value; } gravity_widget = Gravity "Center"; Alpha alpha = class Option_string "Alpha" [ "On", "Off", "Set", "Opaque", "Transparent", "Extract", "Copy", "Shape", "Background" ] alpha { _flag = "-alpha " ++ alpha; Option_edit caption labels value = this.Alpha labels?value; } alpha_widget = Alpha "On"; Geometry_widget = class { _vislevel = 3; x = Expression "Y" 0; y = Expression "X" 0; hoffset = Expression "Horizontal offset" 10; voffset = Expression "Vertical offset" 10; _flag = concat [print x.expr, "x", print y.expr, format hoffset, format voffset] { // print an offset ... we want '+' in front of +ve strings format offset = concat ["+", print offset.expr], offset.expr >= 0 = print offset.expr; } }; Font_widget = class { _vislevel = 3; family = Option_string "Family" [ "Arial", "ArialBlack", "AvantGarde", "BitstreamCharter", "Bookman", "CenturySchoolbook", "ComicSansMS", "Courier", "CourierNew", "DejaVuSans", "DejaVuSansMono", "DejaVuSerif", "Dingbats", "FreeMono", "FreeSans", "FreeSerif", "Garuda", "Georgia", "Helvetica", "HelveticaNarrow", "Impact", "LiberationMono", "LiberationSans", "LiberationSerif", "NewCenturySchlbk", "Palatino", "Purisa", "Symbol", "Times", "TimesNewRoman", "Ubuntu", "Verdana", "Webdings" ] "Arial"; style = Option_string "Style" [ "Any", "Italic", "Normal", "Oblique" ] "Normal"; weight = Scale "Weight" 1 800 400; size = Scale "Point size" 1 100 12; stretch = Option_string "Stretch" [ "Any", "Condensed", "Expanded", "ExtraCondensed", "ExtraExpanded", "Normal", "SemiCondensed", "SemiExpanded", "UltraCondensed", "UltraExpanded" ] "Normal"; _flag = join_sep " " [ "-family", family.item, "-weight", print weight.value, "-pointsize", print size.value, "-style", style.item, "-stretch", stretch.item]; } Adaptive_blur_item = class Menuaction "_Adaptive Blur" "blur less near edges" { action x = class _result { _vislevel = 3; radius = radius_widget; sigma = sigma_widget; command = magick_command (concat ["-adaptive-blur ", print radius.value, "x", print sigma.value]); _result = system command x; } } Adaptive_sharpen_item = class Menuaction "_Adaptive Sharpen" "sharpen more near edges" { action x = class _result { _vislevel = 3; radius = radius_widget; sigma = sigma_widget; command = magick_command (concat ["-adaptive-sharpen ", print radius.value, "x", print sigma.value]); _result = system command x; } } Alpha_item = class Menuaction "_Alpha" "add/remove alpha channel" { action x = class _result { _vislevel = 3; alpha = alpha_widget; command = magick_command alpha._flag; _result = system command x; } } Annotate_item = class Menuaction "_Annotate" "add text annotation" { action x = class _result { _vislevel = 3; text = text_widget; font = Font_widget; geometry = Geometry_widget; gravity = gravity_widget; foreground = foreground_widget; antialias = antialias_widget; command = magick_command (join_sep " " [ font._flag, antialias._flag, gravity._flag, foreground._flag, "-annotate", geometry._flag, "\"" ++ text.value ++ "\""]); _result = system command x; } } Swirl_item = class Menuaction "_Swirl" "swirl around the centre" { action x = class _result { _vislevel = 3; angle = angle_widget; command = magick_command ("-swirl " ++ print angle.value); _result = system command x; } } } #separator Filter_tilt_item = class Menupullright "Ti_lt Brightness" "tilt brightness" { Left_right_item = class Menuaction "_Left to Right" "linear left-right brighten" { action x = class _result { _vislevel = 3; tilt = Scale "Left-right tilt" (-1) 1 0; _result = map_unary tilt_lr x { tilt_lr image = image * scale { ramp = im_fgrey image.width image.height; scale = (ramp - 0.5) * tilt + 1; } } } } Top_bottom_item = class Menuaction "_Top to Bottom" "linear top-bottom brighten" { action x = class _result { _vislevel = 3; tilt = Scale "Top-bottom tilt" (-1) 1 0; _result = map_unary tilt_tb x { tilt_tb image = image * scale { ramp = rot90 (im_fgrey image.height image.width); scale = (ramp - 0.5) * tilt + 1; } } } } sep1 = Menuseparator; Left_right_cos_item = class Menuaction "Cosine Left-_right" "cosine left-right brighten" { action x = class _result { _vislevel = 3; tilt = Scale "Left-right tilt" (-1) 1 0; shift = Scale "Shift by" (-1) 1 0; _result = map_unary tilt_lr x { tilt_lr image = image * scale { ramp = im_fgrey image.width image.height - 0.5 - shift.value; scale = 0.5 * tilt.value * cos (ramp * 180) + 1; } } } } Top_bottom_cos_item = class Menuaction "Cosine Top-_bottom" "cosine top-bottom brighten" { action x = class _result { _vislevel = 3; tilt = Scale "Top-bottom tilt" (-1) 1 0; shift = Scale "Shift by" (-1) 1 0; _result = map_unary tilt_tb x { tilt_tb image = image * scale { ramp = rot90 (im_fgrey image.height image.width) - 0.5 - shift.value; scale = 0.5 * tilt.value * cos (ramp * 180) + 1; } } } } sep2 = Menuseparator; Circular_item = class Menuaction "_Circular" "circular brighten" { action x = class _result { _vislevel = 3; tilt = Scale "Tilt" (-1) 1 0; hshift = Scale "Horizontal shift by" (-1) 1 0; vshift = Scale "Vertical shift by" (-1) 1 0; _result = map_unary tilt_tb x { tilt_tb image = image * scale { hramp = im_fgrey image.width image.height - 0.5 - hshift.value; vramp = rot90 (im_fgrey image.height image.width) - 0.5 - vshift.value; ramp = (hramp ** 2 + vramp ** 2) ** 0.5; scale = 0.5 * tilt.value * cos (ramp * 180) + 1; } } } } } Filter_blend_item = class Menupullright "_Blend" "blend objects together" { Scale_blend_item = class Menuaction "_Scale" "blend two objects together with a scale" { action a b = class _result { _vislevel = 3; p = Scale "Blend position" 0 1 0.5; _result = map_binary process a b { process im1 im2 = im1 * (1 - p.value) + im2 * p.value; } } } Image_blend_item = class Menuaction "_Image" "use an image to blend two objects" { action a b c = class _result { _vislevel = 3; i = Toggle "Invert mask" false; _result = map_trinary process a b c { process a b c = blend condition in1 in2, !i = blend (invert condition) in1 in2 { compare a b // prefer image as the condition = false, !has_image a && has_image b // prefer mono images as the condition = false, has_bands a && has_bands b && get_bands a > 1 && get_bands b == 1 // prefer uchar as the condition = false, has_format a && has_format b && get_format a > Image_format.UCHAR && get_format b == Image_format.UCHAR = true; [condition, in1, in2] = sortc compare [a, b, c]; } } } } Line_blend_item = class Menuaction "_Along Line" "blend between image a and image b along a line" { action a b = class _result { _vislevel = 3; orientation = Option "Orientation" [ "Left to Right", "Top to Bottom" ] 0; blend_position = Scale "Blend position" 0 1 0.5; blend_width = Scale "Blend width" 0 1 0.05; _result = map_binary process a b { process a b = blend (Image condition) b a { output_width = max_pair a.width b.width; output_height = max_pair a.height b.height; range = output_width, orientation == 0 = output_height; blend_position' = floor (range * blend_position.value); blend_width' = 1, blend_width.value == 0 = floor (range * blend_width.value); start = blend_position' - blend_width' / 2; background = (make_xy output_width output_height) >= blend_position'; ramp = im_grey blend_width' output_height, orientation == 0 = rot90 (im_grey blend_width' output_width); condition = insert_noexpand start 0 ramp background?0, orientation == 0 = insert_noexpand 0 start ramp background?1; } } } } Blend_alpha_item = class Menuaction "_Alpha" "blend images with optional alpha channels" { // usage: layerit foreground background // input images must be either 1 or 3 bands, optionally + 1 band // which is used as the alpha channel // rich lott scale_mask im opacity = (unsigned char) (to_real opacity / 255 * im); // to mono intensity = colour_transform_to Image_type.B_W; // All the blend functions // I am grateful to this page // http://www.pegtop.net/delphi/blendmodes/ // for most of the formulae. blend_normal mask opacity fg bg = blend (scale_mask mask opacity) fg bg; blend_iflighter mask opacity fg bg = blend (if fg' > bg' then mask' else 0) fg bg { fg' = intensity fg; bg' = intensity bg; mask' = scale_mask mask opacity ; } blend_ifdarker mask opacity fg bg = blend (if fg' < bg' then mask' else 0) fg bg { fg' = intensity fg ; bg' = intensity bg ; mask' = scale_mask mask opacity ; } blend_multiply mask opacity fg bg = blend (scale_mask mask opacity) fg' bg { fg' = fg / 255 * bg; } blend_add mask opacity fg bg = blend mask fg' bg { fg' = opacity / 255 * fg + bg; } blend_subtract mask opacity fg bg = blend mask fg' bg { fg' = bg - opacity / 255 * fg; } blend_screen mask opacity fg bg = blend mask fg' bg { fg' = 255 - (255 - bg) * (255 - (opacity / 255 * fg)) / 255; } blend_burn mask opacity fg bg = blend mask fg'' bg { // fades to white which has no effect. fg' = (255 - opacity) + opacity * fg / 255; fg'' = 255 - 255 * (255 - bg) / fg'; } blend_softlight mask opacity fg bg = blend mask' fg' bg { mask' = scale_mask mask opacity; fg' = (2 * bg * fg + bg * bg * (1 - 2 * fg / 255)) / 255; } blend_hardlight mask opacity fg bg = blend mask' fg' bg { mask' = scale_mask mask opacity; fg' = 2 / 255 * fg * bg, bg < 129 = 255 - 2 * (255 - bg) * (255 - fg) / 255; } blend_lighten mask opacity fg bg = blend mask' fg' bg { mask' = scale_mask mask opacity; fg' = if bg < fg then fg else bg; } blend_darken mask opacity fg bg = blend mask' fg' bg { mask' = scale_mask mask opacity; fg' = if bg > fg then fg else bg; } blend_dodge mask opacity fg bg = blend mask fg'' bg { // one added to avoid divide by zero fg' = 1 + 255 - (opacity / 255 * fg); fg'' = bg * 255 / fg'; } blend_reflect mask opacity fg bg = blend mask' fg' bg { mask' = scale_mask mask opacity; fg' = bg * bg / (255 - fg); } blend_freeze mask opacity fg bg = blend mask' fg' bg { mask' = scale_mask mask opacity; fg' = 255 - (255 - bg) * (255 - bg) / (1 + fg); } blend_or mask opacity fg bg = bg | (unsigned char) fg' { mask' = scale_mask mask opacity; fg' = fg * mask' / 255; } blend_and mask opacity fg bg = bg & (unsigned char) fg' { mask' = scale_mask mask opacity; fg' = fg * mask' / 255; } // blend types NORMAL = 0; IFLIGHTER = 1; IFDARKER = 2; MULTIPLY = 3; ADD = 4; SUBTRACT = 5; SCREEN = 6; BURN = 7; DODGE = 8; HARDLIGHT = 9; SOFTLIGHT = 10; LIGHTEN = 11; DARKEN = 12; REFLECT = 13; FREEZE = 14; OR = 15; AND = 16; // names we show the user for blend types names = Enum [ _ "Normal" => NORMAL, _ "If Lighter" => IFLIGHTER, _ "If Darker" => IFDARKER, _ "Multiply" => MULTIPLY, _ "Add" => ADD, _ "Subtract" => SUBTRACT, _ "Screen" => SCREEN, _ "Burn" => BURN, _ "Soft Light" => SOFTLIGHT, _ "Hard Light" => HARDLIGHT, _ "Lighten" => LIGHTEN, _ "Darken" => DARKEN, _ "Dodge" => DODGE, _ "Reflect" => REFLECT, _ "Freeze" => FREEZE, _ "Bitwise OR" => OR, _ "Bitwise AND" => AND ]; // functions we call for each blend type actions = Table [ [NORMAL, blend_normal], [IFLIGHTER, blend_iflighter], [IFDARKER, blend_ifdarker], [MULTIPLY, blend_multiply], [ADD, blend_add], [SUBTRACT, blend_subtract], [SCREEN, blend_screen], [BURN, blend_burn], [SOFTLIGHT, blend_softlight], [HARDLIGHT, blend_hardlight], [LIGHTEN, blend_lighten], [DARKEN, blend_darken], [DODGE, blend_dodge], [REFLECT, blend_reflect], [FREEZE, blend_freeze], [OR, blend_or], [AND, blend_and] ]; // make sure im has an alpha channel (set opaque if it hasn't) put_alpha im = im, im.bands == 4 || im.bands == 2 = im ++ 255; // make sure im has no alpha channel lose_alpha im = extract_bands 0 3 im, im.bands == 4 = im?0, im.bands == 2 = im; // does im have al alpha channel? has_alpha im = im.bands == 2 || im.bands == 4; // get the alpha (set opaque if no alpha) get_alpha img = img'?3, img.bands == 4 = img'?1 { img' = put_alpha img; } // add an alpha ... cast the alpha image to match the main image append_alpha im alpha = im ++ clip2fmt im.format alpha; // makes fg the same size as bg, displaced with u, v pixel offset moveit fg bg u v = insert_noexpand u v fg bg' { bg' = image_new bg.width bg.height fg.bands fg.format fg.coding fg.type 0 0 0; } action bg fg = class _value { _vislevel = 3; method = Option_enum "Blend mode" names "Normal"; opacity = Scale "Opacity" 0 255 255; hmove = Scale "Horizontal move by" (-bg.width) (bg.width) 0; vmove = Scale "Vertical move by" (-bg.height) (bg.height) 0; _value = append_alpha blended merged_alpha, has_alpha bg = blended { // displace and resize fg (need to displace alpha too) fg' = moveit (put_alpha fg) bg hmove vmove; // transform to sRGB fg'' = colour_transform_to Image_type.sRGB (lose_alpha fg'); bg' = colour_transform_to Image_type.sRGB (lose_alpha bg); // alphas merged merged_alpha = get_alpha bg | get_alpha fg'; // blend together blended = (actions.lookup 0 1 method.value_thing) (get_alpha fg') opacity.value fg'' bg'; } } } } Filter_overlay_header_item = class Menuaction "_Overlay" "make a colour overlay of two monochrome images" { action a b = class _result { _vislevel = 3; colour = Option "Colour overlay as" [ _ "Green over Red", _ "Blue over Red", _ "Red over Green", _ "Red over Blue", _ "Blue over Green", _ "Green over Blue" ] 0; _result = map_binary overlay a b { overlay a b = image_set_type Image_type.sRGB [(a' ++ b' ++ 0), (a' ++ 0 ++ b'), (b' ++ a' ++ 0), (b' ++ 0 ++ a'), (0 ++ a' ++ b'), (0 ++ b' ++ a')]?colour { a' = colour_transform_to Image_type.B_W a; b' = colour_transform_to Image_type.B_W b; } } } } Filter_colourize_item = class Menuaction "_Colourize" "use a colour image or patch to tint a mono image" { action a b = class _result { _vislevel = 3; tint = Scale "Tint" 0 1 0.6; _result = map_binary tintit a b { tintit a b = colour_transform_to (get_type colour) colourized' { // get the mono thing first [mono, colour] = sortc (const (is_colour_type @ get_type)) [a, b]; colour' = tint * colour_transform_to Image_type.LAB colour; mono' = colour_transform_to Image_type.B_W mono; colourized = (mono' / 2.55) ++ colour'?1 ++ colour'?2; colourized' = image_set_type Image_type.LAB colourized; } } } } Filter_browse_multiband_item = class Menupullright "Bro_wse" "browse though an image, bitwise or bandwise" { Bandwise_item = class Menuaction "B_andwise" "browse through the bands of a multiband image" { action image = class _result { _vislevel = 3; band = Scale "Band" 0 (image.bands - 1) 0; display = Option "Display as" [ _ "Grey", _ "Green over Red", _ "Blue over Red", _ "Red over Green", _ "Red over Blue", _ "Blue over Green", _ "Green over Blue" ] 0; _result = output { down = (int) band.value; up = down + 1; remainder = band.value - down; fade x a = Vector [0], x == 0 = a * x; a = fade remainder image?up; b = fade (1 - remainder) image?down; output = [ a + b, a ++ b ++ 0, a ++ 0 ++ b, b ++ a ++ 0, b ++ 0 ++ a, 0 ++ a ++ b, 0 ++ b ++ a ] ? display; } } } Bitwise_item = class Menuaction "Bi_twise" "browse through the bits of an image" { action x = class _result { _vislevel = 3; bit = Islider "Bit" 0 (nbits - 1) (nbits - 1) { nbits = x.bits, is_Image x = 8; Islider c f t v = class scope.Scale c f t ((int) v) { Scale = Islider; } } _result = map_unary process x { process im = (im & (0x1 << bit.value)) != 0; } } } } #separator Filter_negative_item = class Menuaction "Photographic _Negative" "swap black and white" { action x = map_unary invert x { invert in = clip2fmt in.format (colour_transform_to (get_type in) rgb') { rgb = colour_transform_to Image_type.sRGB in; rgb' = 255 - rgb; } } } Filter_solarize_item = class Menuaction "_Solarise" "invert colours above a threshold" { action x = class _result { _vislevel = 3; kink = Scale "Kink" 0 1 0.5; _result = map_unary process x { process image = hist_map tab'''' image { // max pixel value for this format mx = Image_format.maxval image.format; // make a LUT ... just 8 and 16 bit tab = im_identity_ushort image.bands mx, image.format == Image_format.USHORT = im_identity image.bands; tab' = Image tab; // make basic ^ shape tab'' = tab' * (1 / kink), tab' < mx * kink = (mx - tab') / (1 - kink); tab''' = clip2fmt image.format tab''; // smooth a bit mask = matrix_blur (tab'''.width / 8); tab'''' = convsep mask tab'''; } } } } Filter_diffuse_glow_item = class Menuaction "_Diffuse Glow" "add a halo to highlights" { action x = class _result { _vislevel = 3; r = Scale "Radius" 0 50 5; highlights = Scale "Highlights" 0 100 95; glow = Scale "Glow" 0 1 0.5; colour = Colour_new_item.Widget_colour_item.action; _result = map_unary process x { process image = image' { mono = (unsigned char) (colour_transform_to Image_type.B_W image); thresh = hist_thresh (highlights.value / 100) mono; mask = mono > thresh; blur = convsep (matrix_gaussian_blur r.value) mask; colour' = colour_transform_to image.type colour; image' = image + colour' * glow * (blur / 255); } } } } Filter_drop_shadow_item = class Menuaction "Drop S_hadow" "add a drop shadow to an image" { action x = class _result { _vislevel = 3; sx = Scale "Horizontal shadow" (-50) 50 5; sy = Scale "Vertical shadow" (-50) 50 5; ss = Scale "Shadow softness" 0 20 5; bg_colour = Expression "Background colour" 255; sd_colour = Expression "Shadow colour" 128; alpha = Toggle "Shadow in alpha channel" false; transparent = Toggle "Zero pixels are transparent" false; _result = map_unary shadow x { shadow image = Image final { blur_size = ss.value * 2 + 1; // matrix we blur with to soften shadows blur_matrix = matrix_gaussian_blur blur_size; matrix_size = blur_matrix.width; matrix_radius = (int) (matrix_size / 2) + 1; // position and size of shadow image in input cods // before and after fuzzing shadow_rect = Rect sx.value sy.value image.width image.height; fuzzy_shadow_rect = shadow_rect.margin_adjust matrix_radius; // size and pos of final image, in input cods final_rect = image.rect.union fuzzy_shadow_rect; // hard part of shadow in output cods shadow_rect' = Rect (shadow_rect.left - final_rect.left) (shadow_rect.top - final_rect.top) shadow_rect.width shadow_rect.height; // make the shadow mask ... true for parts which cast // a shadow mask = (foldr1 bitwise_and @ bandsplit) (image.value != 0), transparent = image_new image.width image.height 1 Image_format.UCHAR Image_coding.NOCODING Image_type.B_W 255 0 0; mask' = embed 0 shadow_rect'.left shadow_rect'.top final_rect.width final_rect.height mask; mask'' = convsep blur_matrix mask'; // use mask to fade between bg and shadow colour mk_background colour = image_new final_rect.width final_rect.height image.bands image.format image.coding image.type colour 0 0; bg_image = mk_background bg_colour.expr; shadow_image = mk_background sd_colour.expr; bg = blend mask'' shadow_image bg_image; // make a full size mask fg_mask = embed 0 (image.rect.left - final_rect.left) (image.rect.top - final_rect.top) final_rect.width final_rect.height mask; // wrap up the input image ... put the shadow colour // around it, so if we are outputting a separate // alpha the shadow colour will be set correctly fg = insert (image.rect.left - final_rect.left) (image.rect.top - final_rect.top) image.value shadow_image; final // make a separate alpha = fg ++ mask'', alpha // paste image over shadow = if fg_mask then fg else bg; } } } } Filter_paint_text_item = class Menuaction "_Paint Text" "paint text into an image" { action x = paint_position, is_Group x = paint_area { paint_area = class _result { _check_args = [ [x, "x", check_Image] ]; _vislevel = 3; text = String "Text to paint" "Hello world!"; font = Fontname "Use font" Workspaces.Preferences.PAINTBOX_FONT; align = Option "Alignment" ["Left", "Centre", "Right"] 0; dpi = Expression "DPI" 300; colour = Expression "Text colour" 255; place = Region x (x.width / 4) (x.height / 4) (x.width / 2) (x.height / 2); _result = insert_noexpand place.left place.top (blend txt' fg place) x { fg = image_new place.width place.height x.bands x.format x.coding x.type colour.expr 0 0; txt = Image (im_text text.value font.value place.width align.value (to_real dpi)); bg = im_black place.width place.height 1; txt' = insert_noexpand 0 0 txt bg; } } paint_position = class _result { _vislevel = 3; text = Pattern_images_item.Text_item.action; colour = Expression "Text colour" 255; position = Option "Position" [ _ "North-west", _ "North", _ "North-east", _ "West", _ "Centre", _ "East", _ "South-west", _ "South", _ "South-east", _ "Specify in pixels" ] 4; left = Expression "Pixels from left" 0; top = Expression "Pixels from top" 0; _result = map_unary paint x { paint image = insert_noexpand x' y' place' image { xr = image.width - text.width; yr = image.height - text.height; x = left.expr, position == 9 = [0, xr / 2, xr]?(position % 3); y = top.expr, position == 9 = [0, yr / 2, yr]?(position / 3); x' = range 0 x (image.width - 1); y' = range 0 y (image.height - 1); w' = range 1 text.width (image.width - x'); h' = range 1 text.height (image.height - y'); place = extract_area x' y' w' h' image; text' = insert_noexpand 0 0 text (im_black w' h' 1); fg = image_new w' h' image.bands image.format image.coding image.type colour.expr 0 0; place' = blend text' fg place; } } } } } nip2-8.7.0/share/nip2/compat/7.38/Histogram.def0000644000175000017500000001511113224651032015565 00000000000000Hist_new_item = class Menupullright "_New" "new histogram" { Hist_item = class Menuaction "_Identity" "make an identity histogram" { action = class _result { _vislevel = 3; d = Option "Depth" ["8 bit", "16 bit"] 0; _result = Plot [] ([im_identity 1, im_identity_ushort 1 65536]?d); } } Hist_new_from_matrix = Matrix_buildlut_item; Hist_from_image_item = class Menuaction "Ta_g Image As Histogram" "set image Type to Histogram" { action x = hist_tag x; } Tone_item = class Menuaction "_Tone Curve" "make a new tone mapping curve" { action = class _result { _vislevel = 3; d = Option "Depth" ["8 bit", "16 bit"] 0; b = Scale "Black point" 0 100 0; w = Scale "White point" 0 100 100; sp = Scale "Shadow point" 0.1 0.3 0.2; mp = Scale "Mid-tone point" 0.4 0.6 0.5; hp = Scale "Highlight point" 0.7 0.9 0.8; sa = Scale "Shadow adjust" (-15) 15 0; ma = Scale "Mid-tone adjust" (-30) 30 0; ha = Scale "Highlight adjust" (-15) 15 0; _result = tone_build fmt b w sp mp hp sa ma ha { fmt = [Image_format.UCHAR, Image_format.USHORT]?d; } } } } Hist_convert_to_hist_item = class Menuaction "Con_vert to Histogram" "convert anything to a histogram" { action x = hist_tag (to_image x); } Hist_find_item = class Menupullright "_Find" "find a histogram" { Oned_item = class Menuaction "_One Dimension" "for a n-band image, make an n-band 1D histogram" { action x = map_unary hist_find x; } Nd_item = class Menuaction "_Many Dimensions" "for a n-band image, make an n-dimensional histogram" { action x = class _result { _vislevel = 3; // default to something small-ish bins = Expression "Number of bins in each dimension" 8; _result = map_unary process x { process in = hist_find_nD bins in; } } } Indexed_item = class Menuaction "_Indexed" "use a 1-band index image to pick bins for an n-band image" { action x y = map_binary map x y { map a b = hist_find_indexed index im { [im, index] = sortc (const is_index) [a, b]; is_index x = has_image x && b == 1 && (f == Image_format.UCHAR || f == Image_format.USHORT) { im = get_image x; b = get_bands x; f = get_format x; } } } } } Hist_map_item = class Menuaction "_Map" "map an image through a histogram" { action x y = map_binary map x y { map a b = hist_map hist im { [im, hist] = sortc (const is_hist) [a, b]; } } } Hist_eq_item = Filter_enhance_item.Hist_equal_item; #separator Hist_cum_item = class Menuaction "_Integrate" "form cumulative histogram" { action x = map_unary hist_cum x; } Hist_diff_item = class Menuaction "_Differentiate" "find point-to-point differences (inverse of Integrate)" { action x = map_unary hist_diff x; } Hist_norm_item = class Menuaction "N_ormalise" "normalise a histogram" { action x = map_unary hist_norm x; } Hist_inv_item = class Menuaction "In_vert" "invert a histogram" { action x = map_unary hist_inv x; } Hist_match_item = class Menuaction "Ma_tch" "find LUT which will match first histogram to second" { action in ref = map_binary hist_match in ref; } Hist_zerox_item = class Menuaction "_Zero Crossings" "find zero crossings" { action x = class _result { _vislevel = 3; edge = Option "Direction" [ "Positive-going", "Negative-going" ] 0; _result = map_unary (zerox (if edge == 0 then -1 else 1)) x; } } #separator Hist_profile_item = class Menuaction "Find _Profile" "search from image edges for non-zero pixels" { action x = class _result { _vislevel = 3; edge = Option "Search from" [ "Top edge down", "Left edge to right", "Bottom edge up", "Right edge to left" ] 2; _result = map_unary profile x { profile image = (Plot_histogram @ hist_tag) [ profilemb 0 image.value, profilemb 1 image.value, profilemb 0 (fliptb image.value), profilemb 1 (fliplr image.value) ]?edge; // im_profile only does 1 band images :-( profilemb d = bandjoin @ map (converse im_profile d) @ bandsplit; } } } Hist_project_item = class Menuaction "Find Pro_jections" "find horizontal and vertical projections" { action x = class { _vislevel = 2; _result = map_unary project x; // extract the result ... could be a group extr n = Plot_histogram _result?n, is_list _result = Group (map (Plot_histogram @ converse subscript n) _result.value); horizontal = extr 0; vertical = extr 1; centre = (gravity horizontal, gravity vertical); } } #separator Hist_graph_item = class Menuaction "P_lot Slice" "plot a slice along a guide or arrow" { action x = class _value { _vislevel = 3; width = Scale "Width" 1 40 1; displace = Scale "Horizontal displace" (-50) 50 0; vdisplace = Scale "Vertical displace" (-50) 50 0; _value = map_unary graph x { graph arrow = hist_tag area' { area = extract_arrow displace.value vdisplace.value width.value arrow; // squish vertically to get an average area' = resize Interpolate_bilinear 1 (1 / width.value) area; } } } } Extract_arrow_item = class Menuaction "Extract _Arrow" "extract the area around an arrow" { action x = class _value { _vislevel = 3; width = Scale "Width" 1 40 1; displace = Scale "Horizontal displace" (-50) 50 0; vdisplace = Scale "Vertical displace" (-50) 50 0; _value = map_unary (extract_arrow displace.value vdisplace.value width.value) x; } } Hist_plot_item = class Menuaction "Plot _Object" "plot an object as a bar, point or line graph" { action x = class _result { _vislevel = 3; format = Option_enum "Format" Plot_format.names "YYYY"; style = Option_enum "Style" Plot_style.names "Line"; auto = Toggle "Auto Range" true; xmin = Expression "X range minimum" 0; xmax = Expression "X range maximum" 1; ymin = Expression "Y range minimum" 0; ymax = Expression "Y range maximum" 1; _result = Plot options (image x) { options = [$style => style.value, $format => format.value] ++ range; range = [], auto = [$xmin => xmin.expr, $xmax => xmax.expr, $ymin => ymin.expr, $ymax => ymax.expr]; image x = image (extract_arrow 0 0 1 x), is_Arrow x = get_image x, has_image x = x2b im, b == 1 = im { im = get_image (to_image x); w = get_width im; h = get_height im; b = get_bands im; // matrix to image makes a 1-band mxn image // we need to put columns into bands x2b im = bandjoin (map extract_col [0 .. w - 1]) { extract_col x = extract_area x 0 1 h im; } } } } } nip2-8.7.0/share/nip2/compat/7.38/Object.def0000644000175000017500000000220513224651032015036 00000000000000Object_duplicate_item = class Menuaction "_Duplicate" "take a copy of an object" { action x = map_unary copy x; } #separator Object_list_to_group_item = class Menuaction "_List to Group" "turn a list of objects into a group" { action x = to_group x; } Object_group_to_list_item = class Menuaction "_Group to List" "turn a group into a list of objects" { action x = to_list x; } #separator Object_break_item = class Menuaction "_Break Up Object" "break an object into a list of components" { action x = map_unary break x { break x = bandsplit x, is_Image x = map Vector x.value, is_Matrix x = x.value, is_Vector x || is_Real x = error "Breakup: not Image/Matrix/Vector/Real"; } } Object_assemble_item = class Menuaction "_Assemble Objects" "assemble a list of objects into a single object" { action x = map_unary ass x { ass x = [], x == [] = Vector x, is_real_list x = Matrix x, is_matrix x = bandjoin x, is_listof is_Image x = Vector (map get_value x), is_listof is_Real x = Matrix (map get_value x), is_listof is_Vector x = error "Assemble: not list of Image/Vector/Real/image/real"; } } nip2-8.7.0/share/nip2/compat/7.38/Makefile.in0000644000175000017500000003675113350464104015234 00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = share/nip2/compat/7.38 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(startdir)" DATA = $(start_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BISON = @BISON@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DLLWRAP = @DLLWRAP@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FFTW3_CFLAGS = @FFTW3_CFLAGS@ FFTW3_LIBS = @FFTW3_LIBS@ FGREP = @FGREP@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_LIBS = @GSL_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ IP_CFLAGS = @IP_CFLAGS@ IP_LIBS = @IP_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBGOFFICE_CFLAGS = @LIBGOFFICE_CFLAGS@ LIBGOFFICE_LIBS = @LIBGOFFICE_LIBS@ LIBGSF_CFLAGS = @LIBGSF_CFLAGS@ LIBGSF_LIBS = @LIBGSF_LIBS@ LIBGVC_CFLAGS = @LIBGVC_CFLAGS@ LIBGVC_LIBS = @LIBGVC_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ 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@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ REQUIRED_PACKAGES_CFLAGS = @REQUIRED_PACKAGES_CFLAGS@ REQUIRED_PACKAGES_LIBS = @REQUIRED_PACKAGES_LIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOP_SRCDIR = @TOP_SRCDIR@ UPDATE_DESKTOP_DATABASE = @UPDATE_DESKTOP_DATABASE@ UPDATE_MIME_DATABASE = @UPDATE_MIME_DATABASE@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XDG_OPEN = @XDG_OPEN@ XGETTEXT = @XGETTEXT@ 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@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ startdir = $(pkgdatadir)/compat/7.38 start_DATA = \ Math.def \ Image.def \ Colour.def \ Tasks.def \ Object.def \ Filter.def \ Matrix.def \ Widgets.def \ Histogram.def \ _joe_extra.def \ _joe_utilities.def \ _convert.def \ _generate.def \ _list.def \ _predicate.def \ _stdenv.def \ _Object.def \ _types.def EXTRA_DIST = $(start_DATA) all: all-am .SUFFIXES: $(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) --foreign share/nip2/compat/7.38/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign share/nip2/compat/7.38/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): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-startDATA: $(start_DATA) @$(NORMAL_INSTALL) @list='$(start_DATA)'; test -n "$(startdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(startdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(startdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(startdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(startdir)" || exit $$?; \ done uninstall-startDATA: @$(NORMAL_UNINSTALL) @list='$(start_DATA)'; test -n "$(startdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(startdir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: 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 check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(startdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-startDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-startDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-startDATA install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags-am uninstall uninstall-am uninstall-startDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: nip2-8.7.0/share/nip2/compat/7.38/Matrix.def0000644000175000017500000002573113224651032015105 00000000000000 Matrix_build_item = class Menupullright "_New" "make a new matrix of some sort" { Plain_item = class Menuaction "_Plain" "make a new plain matrix widget" { action = Matrix (identity_matrix 3); } Convolution_item = class Menuaction "_Convolution" "make a new convolution matrix widget" { action = Matrix_con 1 0 [[0, 0, 0], [0, 1, 0], [0, 0, 0]]; } Recombination_item = class Menuaction "_Recombination" "make a new recombination matrix widget" { action = Matrix_rec (identity_matrix 3); } Morphology_item = class Menuaction "_Morphology" "make a new morphology matrix widget" { action = Matrix_mor [[0, 0, 0], [0, 255, 0], [0, 0, 0]]; } sep1 = Menuseparator; Matrix_identity_item = class Menuaction "_Identity" "make an identity matrix" { action = identity (identity_matrix 5); identity v = class _result { _vislevel = 3; s = Expression "Size" (len v); _result = Matrix (identity_matrix (to_real s)), to_real s != len v; = Matrix v; Matrix_vips value scale offset filename display = identity value; } } Matrix_series_item = class Menuaction "_Series" "make a series" { action = series (mkseries 0 1 5); mkseries s t e = transpose [[to_real s, to_real s + to_real t .. to_real e]]; series v = class _result { _vislevel = 3; _s = v?0?0; _t = v?1?0 - v?0?0; _e = (last v)?0; s = Expression "Start value" _s; t = Expression "Step by" _t; e = Expression "End value" _e; _result = Matrix (mkseries s t e), to_real s != _s || to_real t != _t || to_real e != _e = Matrix v; Matrix_vips value scale offset filename display = series value; } } Matrix_square_item = class Menuaction "_Square" "make a square matrix" { action = square (mksquare 5); mksquare s = replicate s (take s [1, 1 ..]); square v = class _result { _vislevel = 3; s = Expression "Size" (len v); _result = Matrix_con (sum v) 0 v, len v == to_real s = Matrix_con (sum m) 0 m { m = mksquare (to_real s); } Matrix_vips value scale offset filename display = square value; } } Matrix_circular_item = class Menuaction "_Circular" "make a circular matrix" { action = circle (mkcircle 3); mkcircle r = map2 (map2 pyth) xes yes { line = [-r .. r]; xes = replicate (2 * r + 1) line; yes = transpose xes; pyth a b = 1, (a**2 + b**2) ** 0.5 <= r = 0; } circle v = class _result { _vislevel = 3; r = Expression "Radius" ((len v - 1) / 2); _result = Matrix_con (sum v) 0 v, len v == r.expr * 2 + 1 = Matrix_con (sum m) 0 m { m = mkcircle (to_real r); } Matrix_vips value scale offset filename display = circle value; } } Matrix_gaussian_item = class Menuaction "_Gaussian" "make a gaussian matrix" { action = class _result { _vislevel = 3; s = Scale "Sigma" 0.001 10 1; ma = Scale "Minimum amplitude" 0 1 0.2; integer = Toggle "Integer" false; _result = fn s.value ma.value { fn = im_gauss_imask, integer = im_gauss_dmask; } } } Matrix_laplacian_item = class Menuaction "_Laplacian" "make the Laplacian of a Gaussian matrix" { action = class _result { _vislevel = 3; s = Scale "Sigma" 0.001 10 1.5; ma = Scale "Minimum amplitude" 0 1 0.1; integer = Toggle "Integer" false; _result = fn s.value ma.value { fn = im_log_imask, integer = im_log_dmask; } } } } Matrix_to_matrix_item = class Menuaction "Con_vert to Matrix" "convert anything to a matrix" { action x = to_matrix x; } #separator Matrix_extract_item = class Menupullright "_Extract" "extract rows or columns from a matrix" { Rows_item = class Menuaction "_Rows" "extract rows" { action x = class _result { _vislevel = 3; first = Expression "Extract from row" 0; number = Expression "Extract this many rows" 1; _result = map_unary process x { process x = extract_area 0 first (get_width x) number x; } } } Columns_item = class Menuaction "_Columns" "extract columns" { action x = class _result { _vislevel = 3; first = Expression "Extract from column" 0; number = Expression "Extract this many columns" 1; _result = map_unary process x { process mat = extract_area first 0 number (get_height x) x; } } } Area_item = class Menuaction "_Area" "extract area" { action x = class _result { _vislevel = 3; left = Expression "First column" 0; top = Expression "First row" 0; width = Expression "Number of columns" 1; height = Expression "Number of rows" 1; _result = map_unary process x { process mat = extract_area left top width height x; } } } Diagonal_item = class Menuaction "_Diagonal" "extract diagonal" { action x = class _result { _vislevel = 3; which = Option "Extract" [ "Leading Diagonal", "Trailing Diagonal" ] 0; _result = map_unary process x { process mat = mat.Matrix_base (map2 extr [0..] mat.value), which == 0 = mat.Matrix_base (map2 extr [mat.width - 1, mat.width - 2 .. 0] mat.value); extr n l = [l?n]; } } } } Matrix_insert_item = class Menupullright "_Insert" "insert rows or columns into a matrix" { // make a new 8-bit uchar image of wxh with pixels set to p // use to generate new cells newim w h p = image_new w h 1 Image_format.UCHAR Image_coding.NOCODING Image_type.B_W p 0 0; Rows_item = class Menuaction "_Rows" "insert rows" { action x = class _result { _vislevel = 3; first = Expression "Insert at row" 0; number = Expression "Insert this many rows" 1; item = Expression "Set new cells to" 0; _result = map_unary process x { process x = foldl1 join_tb (concat [top, new, bottom]) { top = [extract_area 0 0 w f x], f > 0 = []; new = [(if is_Matrix x then to_matrix else id) (newim w number item.expr)]; bottom = [extract_area 0 f w (h - f) x], f < h = []; f = to_real first; w = get_width x; h = get_height x; } } } } Columns_item = class Menuaction "_Columns" "insert columns" { action x = class _result { _vislevel = 3; first = Expression "Insert at column" 0; number = Expression "Insert this many columns" 1; item = Expression "Set new cells to" 0; _result = map_unary process x { process x = foldl1 join_lr (concat [left, new, right]) { left = [extract_area 0 0 f h x], f > 0 = []; new = [(if is_Matrix x then to_matrix else id) (newim number h item.expr)]; right = [extract_area f 0 (w - f) h x], f < w = []; f = to_real first; w = get_width x; h = get_height x; } } } } } Matrix_delete_item = class Menupullright "_Delete" "delete rows or columns from a matrix" { // remove number of items, starting at first delete first number l = take (to_real first) l ++ drop (to_real first + to_real number) l; Rows_item = class Menuaction "_Rows" "delete rows" { action x = class _result { _vislevel = 3; first = Expression "Delete from row" 0; number = Expression "Delete this many rows" 1; _result = map_unary process x { process x = foldl1 join_tb (concat [top, bottom]) { top = [extract_area 0 0 w f x], f > 0 = []; bottom = [extract_area 0 b w (h - b) x], b < h = []; f = to_real first; n = to_real number; b = f + n; w = get_width x; h = get_height x; } } } } Columns_item = class Menuaction "_Columns" "delete columns" { action x = class _result { _vislevel = 3; first = Expression "Delete from column" 0; number = Expression "Delete this many columns" 1; _result = map_unary process x { process x = foldl1 join_lr (concat [left, right]) { left = [extract_area 0 0 f h x], f > 0 = []; right = [extract_area r 0 (w - r) h x], r < w = []; f = to_real first; n = to_real number; r = f + n; w = get_width x; h = get_height x; } } } } } Matrix_join = class Menupullright "_Join" "join two matricies" { Left_right_item = class Menuaction "_Left to Right" "join two matricies left-right" { action a b = map_binary join_lr a b; } Top_bottom_item = class Menuaction "_Top to Bottom" "joiin two matricies top-bottom" { action a b = map_binary join_tb a b; } } Matrix_rotate_item = class Menupullright "_Rotate" "clockwise rotation by fixed angles" { rot90 = Image_transform_item.Rotate_item.Fixed_item.Rot90_item; rot180 = Image_transform_item.Rotate_item.Fixed_item.Rot180_item; rot270 = Image_transform_item.Rotate_item.Fixed_item.Rot270_item; Matrix_rot45_item = class Menuaction "_45 Degrees" "45 degree rotate (square, odd-length-sides only)" { action x = map_unary rot45 x; } } Matrix_flip_item = Image_transform_item.Flip_item; Matrix_sort_item = class Menuaction "_Sort" "sort by column or row" { action x = class _result { _vislevel = 3; o = Option (_ "Orientation") [ _ "Sort by column", _ "Sort by row" ] 0; i = Expression (_ "Sort on index") 0; d = Option (_ "Direction") [ _ "Ascending", _ "Descending" ] 0; _result = map_unary sort x { idx = to_real i; pred a b = a?idx <= b?idx, d == 0 = a?idx >= b?idx; sort x = (x.Matrix_base @ sortc pred) x.value, o == 0 = (x.Matrix_base @ transpose @ sortc pred @ transpose) x.value; } } } #separator Matrix_invert_item = class Menuaction "In_vert" "calculate inverse matrix" { action x = map_unary (converse power (-1)) x; } Matrix_transpose_item = class Menuaction "_Transpose" "swap rows and columns" { action x = map_unary transpose x; } #separator Matrix_plot_scatter_item = class Menuaction "_Plot Scatter" "plot a scatter graph of a matrix of [x,y1,y2,..] coordinates" { action x = class _result { _check_args = [ [x, "x", check_Matrix] ]; _vislevel = 3; auto = Toggle "Auto Range" true; xmin = Expression "X range minimum" 0; xmax = Expression "X range maximum" 1; ymin = Expression "Y range minimum" 0; ymax = Expression "Y range maximum" 1; _result = Plot options ((x2b @ get_image @ to_image) x) { options = [$style => Plot_style.POINT, $format => Plot_format.XYYY] ++ range; range = [], auto = [$xmin => xmin.expr, $xmax => xmax.expr, $ymin => ymin.expr, $ymax => ymax.expr]; // matrix to image makes a 1-band mxn image // we need to put columns into bands x2b im = bandjoin (map extract_col [0 .. w - 1]) { w = get_width im; h = get_height im; b = get_bands im; extract_col x = extract_area x 0 1 h im; } } } } Matrix_plot_item = Hist_plot_item; Matrix_buildlut_item = class Menuaction "_Build LUT From Scatter" "make a lookup table from a matrix of [x,y1,y2..] coordinates" { action x = class _result { _check_args = [ [x, "x", check_Matrix] ]; _result = buildlut x; } } nip2-8.7.0/share/nip2/compat/7.38/_convert.def0000644000175000017500000004223113224651032015452 00000000000000 /* Try to make a Matrix ... works for Vector/Image/Real, plus image/real */ to_matrix x = to_matrix x.expr, is_Expression x = x, is_Matrix x = oo_unary_function to_matrix_op x, is_class x = tom x { to_matrix_op = Operator "to_matrix" tom Operator_type.COMPOUND false; tom x = Matrix (itom x), is_image x = Matrix [[x]], is_real x = Matrix [x], is_real_list x = Matrix x, is_matrix x = error (_ "bad arguments to " ++ "to_matrix"); itom i = (im_vips2mask ((double) i)).value, is_image i = error (_ "not image"); } /* Try to make an Image ... works for Vector/Matrix/Real, plus image/real * Special case for Colour ... pull out the colour_space and set Type in the * image. */ to_image x = to_image x.expr, is_Expression x = Image x.value, is_Plot x = x, is_Image x = Image (image_set_type (Image_type.colour_spaces.lookup 0 1 x.colour_space) (mtoi [x.value])), is_Colour x = oo_unary_function to_image_op x, is_class x = toi x { to_image_op = Operator "to_image" toi Operator_type.COMPOUND false; toi x = Image x, is_image x = Image (mtoi [[x]]), is_real x = Image (mtoi [x]), is_real_list x = Image (mtoi x), is_matrix x = error (_ "bad arguments to " ++ "to_image"); // [[real]] -> image mtoi m = im_mask2vips (Matrix m), width != 3 = joinup (im_mask2vips (Matrix m)) { width = len m?0; height = len m; joinup i = b1 ++ b2 ++ b3 { b1 = extract_area 0 0 1 height i; b2 = extract_area 1 0 1 height i; b3 = extract_area 2 0 1 height i; } } } // like to_image, but we do 1x1 pixel + x, then embed it up // always make an unwrapped image for speed ... this gets used by ifthenelse // and stuff like that // format can be NULL, meaning set format from x to_image_size width height bands format x = x, is_image x = x.value, is_Image x = im'' { // we want x to set the target format if we don't have one, so we // can't use image_new im = im_black 1 1 bands + x; im' = clip2fmt format im, format != NULL = im; im'' = embed 1 0 0 width height im'; } /* Try to make a Colour. */ to_colour x = to_colour x.expr, is_Expression x = x, is_Colour x = to_colour (extract_area x.left x.top 1 1 x.image), is_Mark x = oo_unary_function to_colour_op x, is_class x = toc x { to_colour_op = Operator "to_colour" toc Operator_type.COMPOUND false; toc x = Colour (colour_space (get_type x)) (map mean (bandsplit (get_image x))), has_image x && has_type x = Colour "sRGB" [x, x, x], is_real x // since Colour can't do mono = Colour "sRGB" x, is_real_list x && is_list_len 3 x = map toc x, is_matrix x = error (_ "bad arguments to " ++ "to_colour"); colour_space type = table.get_name type, table.has_name type = error (_ "unable to make Colour from " ++ table.get_name type ++ _ " image") { table = Image_type.colour_spaces; } } /* Try to make a real. (not a Real!) */ to_real x = to_real x.expr, is_Expression x = oo_unary_function to_real_op x, is_class x = tor x { to_real_op = Operator "to_real" tor Operator_type.COMPOUND false; tor x = x, is_real x = abs x, is_complex x = 1, is_bool x && x = 0, is_bool x && !x = error (_ "bad arguments to " ++ "to_real"); } to_int x = (int) (to_real x); /* Try to make a list ... ungroup, basically. We remove the innermost layer of * Groups. */ to_list x = x.value, is_Group x && !contains_Group x.value = Group (map to_list x.value), is_Group x = x; /* Try to make a group. The outermost list objects become Group()'d. */ to_group x = Group x, is_list x = Group (map to_group x.value), is_Group x = x; /* Parse a positive integer. */ parse_pint l = foldl acc 0 l { acc sofar ch = sofar * 10 + parse_c ch; /* Turn a char digit to a number. */ parse_c ch = error (_ "not a digit"), !is_digit ch = (int) ch - (int) '0'; } /* Parse an integer, with an optional sign character. */ parse_int l = error (_ "badly formed number"), !is_list_len 2 parts = sign * n { parts = splitpl [member "+-", is_digit] l; n = parse_pint parts?1; sign = 1, parts?0 == [] || parts?0 == "+" = -1; } /* Parse a float. * [+-]?[0-9]*([.][0-9]*)?(e[0-9]+)? */ parse_float l = err, !is_list_len 4 parts = sign * (abs ipart + fpart) * 10 ** exp { err = error (_ "badly formed number"); parts = splitpl [ member "+-0123456789", member ".0123456789", member "eE", member "+-0123456789" ] l; ipart = parse_int parts?0; sign = 1, ipart > 0 = -1; fpart = 0, parts?1 == []; = err, parts?1?0 != '.' = parse_pint (tl parts?1) / 10 ** (len parts?1 - 1); exp = 0, parts?2 == [] && parts?3 == [] = err, parts?2 == [] = parse_int parts?3; } /* Parse a time in "hh:mm:ss" into seconds. We could do this in one line :) = (sum @ map2 multiply (iterate (multiply 60) 1) @ reverse @ map parse_pint @ map (subscript (splitpl [is_digit, equal ':', is_digit, equal ':', is_digit] l))) [0,2,4]; but it's totally unreadable. */ parse_time l = error (_ "badly formed time"), !is_list_len 5 parts = s + 60 * m + 60 * 60 * h { parts = splitpl [is_digit, equal ':', is_digit, equal ':', is_digit] l; h = parse_int parts?0; m = parse_int parts?2; s = parse_int parts?4; } /* matrix to convert D65 XYZ to D50 XYZ ... direct conversion, found by * measuring a macbeth chart in D50 and D65 and doing a LMS to get a matrix */ D652D50_direct = Matrix [[ 1.13529, -0.0604663, -0.0606321 ], [ 0.0975399, 0.935024, -0.0256156 ], [ -0.0336428, 0.0414702, 0.994135 ]]; D502D65_direct = D652D50_direct ** -1; /* Convert normalised XYZ to bradford RGB. */ XYZ2RGBbrad = Matrix [[0.8951, 0.2664, -0.1614], [-0.7502, 1.7135, 0.0367], [0.0389, -0.0685, 1.0296]]; /* Convert bradford RGB to normalised XYZ. */ RGBbrad2XYZ = XYZ2RGBbrad ** -1; D93_whitepoint = Vector [89.7400, 100, 130.7700]; D75_whitepoint = Vector [94.9682, 100, 122.5710]; D65_whitepoint = Vector [95.0470, 100, 108.8827]; D55_whitepoint = Vector [95.6831, 100, 92.0871]; D50_whitepoint = Vector [96.4250, 100, 82.4680]; A_whitepoint = Vector [109.8503, 100, 35.5849]; // 2856K B_whitepoint = Vector [99.0720, 100, 85.2230]; // 4874K C_whitepoint = Vector [98.0700, 100, 118.2300]; // 6774K E_whitepoint = Vector [100, 100, 100]; // ill. free D3250_whitepoint = Vector [105.6590, 100, 45.8501]; Whitepoints = Enum [ $D93 => D93_whitepoint, $D75 => D75_whitepoint, $D65 => D65_whitepoint, $D55 => D55_whitepoint, $D50 => D50_whitepoint, $A => A_whitepoint, $B => B_whitepoint, $C => C_whitepoint, $E => E_whitepoint, $D3250 => D3250_whitepoint ]; /* Convert D50 XYZ to D65 using the bradford chromatic adaptation approx. */ im_D502D65 xyz = xyz''' { xyz' = xyz / D50_whitepoint; rgb = recomb XYZ2RGBbrad xyz'; // move white in bradford RGB rgb' = rgb / Vector [0.94, 1.02, 1.33]; xyz'' = recomb RGBbrad2XYZ rgb'; // back to D65 xyz''' = xyz'' * D65_whitepoint; } /* Convert D65 XYZ to D50 using the bradford approx. */ im_D652D50 xyz = xyz''' { xyz' = xyz / D65_whitepoint; rgb = recomb XYZ2RGBbrad xyz'; // move white in bradford RGB rgb' = rgb * Vector [0.94, 1.02, 1.33]; xyz'' = recomb RGBbrad2XYZ rgb'; xyz''' = xyz'' * D50_whitepoint; } /* Convert D50 XYZ to Lab. */ im_D50XYZ2Lab xyz = im_XYZ2Lab_temp xyz D50_whitepoint.value?0 D50_whitepoint.value?1 D50_whitepoint.value?2; im_D50Lab2XYZ lab = im_Lab2XYZ_temp lab D50_whitepoint.value?0 D50_whitepoint.value?1 D50_whitepoint.value?2; /* ... and mono conversions */ im_sRGB2mono in = (image_set_type Image_type.B_W @ clip2fmt (get_header "BandFmt" in) @ recomb (Matrix [[.3, .6, .1]])) in; im_mono2sRGB in = image_set_type Image_type.sRGB (in ++ in ++ in); im_sRGB2Lab = im_XYZ2Lab @ im_sRGB2XYZ; im_Lab2sRGB = im_XYZ2sRGB @ im_Lab2XYZ; // from the 16 bit RGB and GREY formats im_1628 x = im_clip (x >> 8); im_162f x = x / 256; im_8216 x = (im_clip2us x) << 8; im_f216 x = im_clip2us (x * 256); im_RGB162GREY16 in = (image_set_type Image_type.GREY16 @ clip2fmt (get_header "BandFmt" in) @ recomb (Matrix [[.3, .6, .1]])) in; im_GREY162RGB16 in = image_set_type Image_type.RGB16 (in ++ in ++ in); /* apply a func to an image ... make it 1 or 3 bands, and reapply other bands * on the way out. Except if it's LABPACK. */ colour_apply fn x = fn x, b == 1 || b == 3 || c == Image_coding.LABPACK = x'' { b = get_bands x; c = get_coding x; first = extract_bands 0 3 x, b > 3 = extract_bands 0 1 x; tail = extract_bands 3 (b - 3) x, b > 3 = extract_bands 1 (b - 1) x; x' = fn first; x'' = x' ++ clip2fmt (get_format x') tail; } /* Any 1-ary colour op, applied to Vector/Image/Matrix or image */ colour_unary fn x = oo_unary_function colour_op x, is_class x = colour_apply fn x, is_image x = colour_apply fn [x], is_real x = error (_ "bad arguments to " ++ "colour_unary") { // COMPOUND_REWRAP ... signal to the colour class to go to image and // back colour_op = Operator "colour_unary" colour_object Operator_type.COMPOUND_REWRAP false; colour_object x = colour_real_list x, is_real_list x = map colour_real_list x, is_matrix x = colour_apply fn x, is_image x = error (_ "bad arguments to " ++ "colour_unary"); colour_real_list l = (to_matrix (fn (float) (to_image (Vector l)).value)).value?0; } /* Any symmetric 2-ary colour op, applied to Vector/Image/Matrix or image ... * name is op name for error messages etc. */ colour_binary name fn x y = oo_binary_function colour_op x y, is_class x = oo_binary'_function colour_op x y, is_class y = fn x y, is_image x && is_image y = error (_ "bad arguments to " ++ name) { colour_op = Operator name colour_object Operator_type.COMPOUND_REWRAP true; colour_object x y = fn x y, is_image x && is_image y = colour_real_list fn x y, is_real_list x && is_real_list y = map (colour_real_list fn x) y, is_real_list x && is_matrix y = map (colour_real_list (converse fn) y) x, is_matrix x && is_real_list y = map2 (colour_real_list fn) x y, is_matrix x && is_matrix y = error (_ "bad arguments to " ++ name); colour_real_list fn l1 l2 = (to_matrix (fn i1 i2)).value?0 { i1 = (float) (to_image (Vector l1)).value; i2 = (float) (to_image (Vector l2)).value; } } _colour_conversion_table = [ /* Lines are [space-from, space-to, conversion function]. Could do * this as a big array, but table lookup feels safer. */ [B_W, B_W, image_set_type B_W], [B_W, XYZ, im_sRGB2XYZ @ im_mono2sRGB @ im_clip], [B_W, YXY, im_XYZ2Yxy @ im_sRGB2XYZ @ im_mono2sRGB @ im_clip], [B_W, LAB, im_sRGB2Lab @ im_mono2sRGB @ im_clip], [B_W, LCH, im_Lab2LCh @ im_sRGB2Lab @ im_mono2sRGB @ im_clip], [B_W, UCS, im_XYZ2UCS @ im_sRGB2XYZ @ im_mono2sRGB @ im_clip], [B_W, RGB, im_XYZ2disp @ im_sRGB2XYZ @ im_mono2sRGB @ im_clip], [B_W, sRGB, im_mono2sRGB @ im_clip], [B_W, RGB16, image_set_type RGB16 @ im_8216 @ im_mono2sRGB], [B_W, GREY16, image_set_type GREY16 @ im_8216], [B_W, LABQ, im_Lab2LabQ @ im_sRGB2Lab @ im_mono2sRGB @ im_clip], [B_W, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_sRGB2Lab @ im_mono2sRGB @ im_clip], [XYZ, B_W, im_sRGB2mono @ im_XYZ2sRGB @ im_clip2f], [XYZ, XYZ, image_set_type XYZ], [XYZ, YXY, im_XYZ2Yxy @ im_clip2f], [XYZ, LAB, im_XYZ2Lab @ im_clip2f], [XYZ, LCH, im_Lab2LCh @ im_XYZ2Lab], [XYZ, UCS, im_XYZ2UCS @ im_clip2f], [XYZ, RGB, im_XYZ2disp @ im_clip2f], [XYZ, sRGB, im_XYZ2sRGB @ im_clip2f], [XYZ, LABQ, im_Lab2LabQ @ im_XYZ2Lab @ im_clip2f], [XYZ, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_XYZ2Lab @ im_clip2f], [YXY, B_W, im_sRGB2mono @ im_XYZ2sRGB @ im_Yxy2XYZ @ im_clip2f], [YXY, XYZ, im_Yxy2XYZ @ im_clip2f], [YXY, YXY, image_set_type YXY], [YXY, LAB, im_XYZ2Lab @ im_Yxy2XYZ @ im_clip2f], [YXY, LCH, im_Lab2LCh @ im_XYZ2Lab @ im_Yxy2XYZ @ im_clip2f], [YXY, UCS, im_XYZ2UCS @ im_Yxy2XYZ @ im_clip2f], [YXY, RGB, im_XYZ2disp @ im_Yxy2XYZ @ im_clip2f], [YXY, sRGB, im_XYZ2sRGB @ im_Yxy2XYZ @ im_clip2f], [YXY, LABQ, im_Lab2LabQ @ im_XYZ2Lab @ im_Yxy2XYZ @ im_clip2f], [YXY, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_XYZ2Lab @ im_Yxy2XYZ @ im_clip2f], [LAB, B_W, im_sRGB2mono @ im_Lab2sRGB @ im_Lab2XYZ @ im_clip2f], [LAB, XYZ, im_Lab2XYZ @ im_clip2f], [LAB, YXY, im_XYZ2Yxy @ im_Lab2XYZ @ im_clip2f], [LAB, LAB, image_set_type LAB @ im_clip2f], [LAB, LCH, im_Lab2LCh @ im_clip2f], [LAB, UCS, im_Lab2UCS @ im_clip2f], [LAB, RGB, im_Lab2disp @ im_clip2f], [LAB, sRGB, im_Lab2sRGB @ im_clip2f], [LAB, LABQ, im_Lab2LabQ @ im_clip2f], [LAB, LABS, im_Lab2LabS @ im_clip2f], [LCH, B_W, im_sRGB2mono @ im_Lab2sRGB @ im_LCh2Lab @ im_clip2f], [LCH, XYZ, im_Lab2XYZ @ im_LCh2Lab @ im_clip2f], [LCH, YXY, im_XYZ2Yxy @ im_Lab2sRGB @ im_LCh2Lab @ im_clip2f], [LCH, LAB, im_LCh2Lab @ im_clip2f], [LCH, LCH, image_set_type LCH], [LCH, UCS, im_LCh2UCS @ im_clip2f], [LCH, RGB, im_Lab2disp @ im_LCh2Lab @ im_clip2f], [LCH, sRGB, im_Lab2sRGB @ im_LCh2Lab @ im_clip2f], [LCH, LABQ, im_Lab2LabQ @ im_LCh2Lab @ im_clip2f], [LCH, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_LCh2Lab @ im_clip2f], [UCS, B_W, im_sRGB2mono @ im_XYZ2sRGB @ im_UCS2XYZ @ im_clip2f], [UCS, XYZ, im_UCS2XYZ @ im_clip2f], [UCS, YXY, im_XYZ2Yxy @ im_Lab2XYZ @ im_UCS2Lab @ im_clip2f], [UCS, LAB, im_UCS2Lab @ im_clip2f], [UCS, LCH, im_UCS2LCh @ im_clip2f], [UCS, UCS, image_set_type UCS], [UCS, RGB, im_Lab2disp @ im_UCS2Lab @ im_clip2f], [UCS, sRGB, im_Lab2sRGB @ im_UCS2Lab @ im_clip2f], [UCS, LABQ, im_Lab2LabQ @ im_UCS2Lab @ im_clip2f], [UCS, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_UCS2Lab @ im_clip2f], [RGB, B_W, im_sRGB2mono @ im_XYZ2sRGB @ im_disp2XYZ @ im_clip], [RGB, XYZ, im_disp2XYZ @ im_clip], [RGB, YXY, im_XYZ2Yxy @ im_disp2XYZ @ im_clip], [RGB, LAB, im_disp2Lab @ im_clip], [RGB, LCH, im_Lab2LCh @ im_disp2Lab @ im_clip], [RGB, UCS, im_Lab2UCS @ im_disp2Lab @ im_clip], [RGB, RGB, image_set_type RGB], [RGB, sRGB, im_XYZ2sRGB @ im_disp2XYZ @ im_clip], [RGB, RGB16, image_set_type RGB16 @ im_8216], [RGB, GREY16, image_set_type GREY16 @ im_8216 @ im_sRGB2mono], [RGB, LABQ, im_Lab2LabQ @ im_disp2Lab @ im_clip], [RGB, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_disp2Lab @ im_clip], [sRGB, B_W, im_sRGB2mono], [sRGB, XYZ, im_sRGB2XYZ @ im_clip], [sRGB, YXY, im_XYZ2Yxy @ im_sRGB2XYZ @ im_clip], [sRGB, LAB, im_sRGB2Lab @ im_clip], [sRGB, LCH, im_Lab2LCh @ im_sRGB2Lab @ im_clip], [sRGB, UCS, im_XYZ2UCS @ im_sRGB2XYZ @ im_clip], [sRGB, RGB, im_XYZ2disp @ im_sRGB2XYZ @ im_clip], [sRGB, sRGB, image_set_type sRGB], [sRGB, RGB16, image_set_type RGB16 @ im_8216], [sRGB, GREY16, image_set_type GREY16 @ im_8216 @ im_sRGB2mono], [sRGB, LABQ, im_Lab2LabQ @ im_sRGB2Lab @ im_clip], [sRGB, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_sRGB2Lab @ im_clip], [RGB16, B_W, im_1628 @ im_sRGB2mono], [RGB16, RGB, image_set_type RGB @ im_1628], [RGB16, sRGB, image_set_type sRGB @ im_1628], [RGB16, RGB16, image_set_type RGB16], [RGB16, GREY16, im_RGB162GREY16], [GREY16, B_W, image_set_type B_W @ im_1628], [GREY16, RGB, im_mono2sRGB @ im_1628], [GREY16, sRGB, im_mono2sRGB @ im_1628], [GREY16, RGB16, im_GREY162RGB16], [GREY16, GREY16, image_set_type GREY16], [LABQ, B_W, im_sRGB2mono @ im_Lab2sRGB @ im_LabQ2Lab], [LABQ, XYZ, im_Lab2XYZ @ im_LabQ2Lab], [LABQ, YXY, im_XYZ2Yxy @ im_Lab2XYZ @ im_LabQ2Lab], [LABQ, LAB, im_LabQ2Lab], [LABQ, LCH, im_Lab2LCh @ im_LabQ2Lab], [LABQ, UCS, im_Lab2UCS @ im_LabQ2Lab], [LABQ, RGB, im_LabQ2disp], [LABQ, sRGB, im_Lab2sRGB @ im_LabQ2Lab], [LABQ, LABQ, image_set_type LABQ], [LABQ, LABS, im_LabQ2LabS], [LABS, B_W, im_sRGB2mono @ im_Lab2sRGB @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, XYZ, im_Lab2XYZ @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, YXY, im_XYZ2Yxy @ im_Lab2XYZ @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, LAB, im_LabS2Lab], [LABS, LCH, im_Lab2LCh @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, UCS, im_Lab2UCS @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, RGB, im_LabQ2disp @ im_LabS2LabQ @ im_clip2s], [LABS, sRGB, im_XYZ2sRGB @ im_Lab2XYZ @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, LABQ, im_LabS2LabQ @ im_clip2s], [LABS, LABS, image_set_type LABS] ] { /* From Image_type ... repeat here for brevity. Use same ordering as * in Colour menu for consistency. */ B_W = 1; XYZ = 12; YXY = 23; LAB = 13; LCH = 19; UCS = 18; RGB = 17; sRGB = 22; RGB16 = 25; GREY16 = 26; LABQ = 16; LABS = 21; } /* Transform between two colour spaces. */ colour_transform from to in = colour_unary _colour_conversion_table?i?2 in, i >= 0 = error (_ "unable to convert " ++ Image_type.type_names.get_name from ++ _ " to " ++ Image_type.type_names.get_name to) { match x = x?0 == from && x?1 == to; i = index match _colour_conversion_table; } /* Transform to a colour space, assuming the type field in the input is * correct */ colour_transform_to to in = colour_transform (get_type in) to in; /* String for path separator on this platform. */ path_separator = expand "$SEP"; /* Form a relative pathname. * path_relative ["home", "john"] == "home/john" * path_relative [] == "" */ path_relative l = join_sep path_separator l; /* Form an absolute pathname. * path_absolute ["home", "john"] == "/home/john" * path_absolute [] == "/" * If the first component looks like 'A:', don't add an initial separator. */ path_absolute l = path_relative l, len l?0 > 1 && is_letter l?0?0 && l?0?1 == ':' = path_separator ++ path_relative l; /* Parse a pathname. * path_parse "/home/john" == ["home", "john"] * path_parse "home/john" == ["home", "john"] */ path_parse str = split (equal path_separator?0) str; nip2-8.7.0/share/nip2/compat/7.38/_joe_utilities.def0000644000175000017500000005054513224651032016651 00000000000000/* ******Functions included in start/_NG_utilities.def:****** * * so_balance ref_meanmax im1 im2 mask blur gauss * * nonzero_mean im = no_out * * so_meanmax im = result * * so_calculate ref_meanmax im mask = result * * simple_frame frame im_w im_h ov cs ms bf option = result * * corner_frame frame im_w im_h ov cs ms bf = result * * build_frame r_tl r_tr r_bl r_br r_mt r_mb r_ml r_mr im_w im_h ov bf = result * * complex_frame frame im_w im_h ov cs es ms bf option= result * * complex_edge ra rb t bl d = rc * * frame_lr_min r_l r_r target bw = result * * frame_tb_min r_t r_b target bw = result * * frame_position_image im ref os colour= result * * merge_array bw arr = result * * merge_to_scale im target blend dir = result * * select_ellipse line width = mask * * select_tetragon p1 p2 p3 p4 = mask * * select_polygon pt_list = mask * * perspective_transform to from = trans'' * * sort_pts_clockwise l = l'' * */ /* Called from: * _NG_Extra.def Clone_area_item */ so_balance ref_meanmax im1 im2 mask gauss = result { //ref_meanmax = so_meanmax im1; so_values = so_calculate ref_meanmax im2 mask; im2_cor_a = clip2fmt im2.format im2'', has_member "format" im2 = im2'' {im2'' = im2 * (so_values?0) + (so_values?1);} // Option to convert replacement image to scaled gaussian noise im2_cor = im2_cor_a, gauss == false = clip2fmt im2_cor_a.format gauss_im {gauss_im = im_gaussnoise im2_cor_a.width im2_cor_a.height ref_meanmax?0 (deviation im2_cor_a);} result = im_blend (get_image mask) (get_image im2_cor) (get_image im1); }; //////////////////////////////////////////////////////////////////////////////// /* Calculates the mean of the non zero pixels. * * Called from: * _NG_utilities so_meanmax */ nonzero_mean im = no_out { zero_im = (im == 0); zero_mean = mean zero_im; no_mean = mean im; no_out = no_mean/(1 - (zero_mean/255)); }; //////////////////////////////////////////////////////////////////////////////// /* Calculates the max and nonzero mean of an image * * Called from: * _NG_utilities so_balance * _NG_utilities so_calculate * _NG_Extra.def Clone_area_item * _NG_Extra.def Balance_item.Balance_find_item */ so_meanmax im = result { mean_of_im = nonzero_mean im; adjusted_im = im - mean_of_im; max_of_im = max adjusted_im; result = [mean_of_im, max_of_im]; }; //////////////////////////////////////////////////////////////////////////////// /* Calculates the scale and offset required to match a reference mean and max * * Called from: * _NG_utilities so_balance * _NG_Extra.def Balance_item.Balance_find_item */ so_calculate ref_meanmax im mask = result { im' = if mask then im else 0; im_values = so_meanmax im'; mean_of_ref = ref_meanmax?0; mean_of_im = im_values?0; max_of_ref = ref_meanmax?1; max_of_im = im_values?1; scale = (max_of_ref)/(max_of_im); offset = mean_of_ref - (mean_of_im * scale); result = [ scale, offset ]; }; //////////////////////////////////////////////////////////////////////////////// /* Extends or shortens the central sections of a simple frame to fit round a given image. * * Called from: * _NG_Extra.def Frame_item.Simple_frame_item */ simple_frame frame im_w im_h ov cs ms bf option = result { cs' = (1 - cs); ms' = (0.5 - (ms/2)); ms'' = (1 - cs); //Regions r_tl = Region_relative frame 0 0 cs cs; r_tr = fliplr r_tl, option == true = Region_relative frame cs' 0 cs cs; r_bl = Region_relative frame 0 cs' cs cs; r_br = fliplr r_bl, option == true = Region_relative frame cs' cs' cs cs; r_mt = Region_relative frame ms' 0 ms cs; r_mb = Region_relative frame ms' ms'' ms cs; r_ml = Region_relative frame 0 ms' cs ms; r_mr = fliplr r_ml, option == true = Region_relative frame ms'' ms' cs ms; result = build_frame r_tl r_tr r_bl r_br r_mt r_mb r_ml r_mr im_w im_h ov bf; }; //////////////////////////////////////////////////////////////////////////////// /* Copies and extends a simple frame corner to produce a complete frame to fit round a given image. * * Called from: * _NG_Extra.def Frame_item.Frame_corner_item */ corner_frame frame im_w im_h ov cs ms bf = result { cs' = (1 - cs); ms' = (0.5 - (ms/2)); //Regions r_tl = Region_relative frame 0 0 cs cs; r_tr = fliplr r_tl; r_bl = fliptb r_tl; r_br = fliplr r_bl; r_mt = Region_relative frame ms' 0 ms cs; r_mb = fliptb r_mt; r_ml = Region_relative frame 0 ms' cs ms;; r_mr = fliplr r_ml; result = build_frame r_tl r_tr r_bl r_br r_mt r_mb r_ml r_mr im_w im_h ov bf; }; //////////////////////////////////////////////////////////////////////////////// /* Completes the frame building process for simple_frame and corner_frame. * * _NG_utilities simple_frame * _NG_utilities corner_frame */ build_frame r_tl r_tr r_bl r_br r_mt r_mb r_ml r_mr im_w im_h ov bf = result { //Find pixel thickness of frames section s_width = r_ml.width - mean (im_profile (map_unary fliplr (r_ml.value)?0) 1); s_height = r_mt.height - mean (im_profile (map_unary fliptb (r_mt.value)?0) 0); w_target = im_w + (2 * (s_width - ov)); h_target = im_h + (2 * (s_height - ov)); blend = bf * r_tl.width; cw_target = w_target - (2 * r_tl.width) + (2 * blend), w_target > (2 * r_tl.width) = w_target; ch_target = h_target - (2 * r_tl.height) + (2 * blend), h_target > (2 * r_tl.height) = h_target; //Use regions to produce sections top = merge_to_scale r_mt cw_target blend 0; bottom = merge_to_scale r_mb cw_target blend 0; left = merge_to_scale r_ml ch_target blend 1; right = merge_to_scale r_mr ch_target blend 1; middle = Image (image_new cw_target ch_target left.bands left.format left.coding left.type 0 0 0); //Build sections into full frame. row_1 = frame_lr_min r_tl r_tr w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[r_tl, top, r_tr]]; row_2 = frame_lr_min left right w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[left, middle, right]]; row_3 = frame_lr_min r_bl r_br w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[r_bl, bottom, r_br]]; result = frame_tb_min row_1 row_3 h_target blend, (h_target < (r_tl.height * 2)) = merge_array blend [[row_1], [row_2], [row_3]]; }; //////////////////////////////////////////////////////////////////////////////// /* Extends or shortens the central sections of a frame, preserving any central details on each * edge, to fit round a given image. * * Called from: * _NG_Extra.def Frame_item.Complex_frame_item */ complex_frame frame im_w im_h ov cs es ms bf option= result { cs' = (1 - cs); ms' = (0.5 - (ms/2)); es' = (0.25 - (es/2)); r_tl = Region_relative frame 0 0 cs cs; r_tr = fliplr r_tl, option == true = Region_relative frame cs' 0 cs cs; r_bl = Region_relative frame 0 cs' cs cs; r_br = fliplr r_bl, option == true = Region_relative frame cs' cs' cs cs; r_mt = Region_relative frame ms' 0 ms cs; r_mb = Region_relative frame ms' cs' ms cs; r_ml = Region_relative frame 0 ms' cs ms; r_mr = fliplr r_ml, option == true = Region_relative frame cs' ms' cs ms; r_et = Region_relative frame es' 0 es cs; r_eb = Region_relative frame es' cs' es cs; r_el = Region_relative frame 0 es' cs es; r_er = fliplr r_el, option == true = Region_relative frame cs' es' cs es; //Find pixel thickness of frames section s_width = r_el.width - mean (im_profile (map_unary fliplr (r_el.value)?0) 1); s_height = r_et.height - mean (im_profile (map_unary fliptb (r_et.value)?0) 0); w_target = im_w + (2 * (s_width - ov)); h_target = im_h + (2 * (s_height - ov)); min_size = foldr1 min_pair [r_tl.width, r_tl.height, r_mt.width, r_mt.height, r_et.width, r_et.height]; blend = bf * min_size; cw_target = w_target - (2 * r_tl.width) + (2 * blend); ch_target = h_target - (2 * r_tl.height) + (2 * blend); top = complex_edge r_mt r_et cw_target blend 0; bottom = complex_edge r_mb r_eb cw_target blend 0; left = complex_edge r_ml r_el ch_target blend 1; right = complex_edge r_mr r_er ch_target blend 1; middle = Image (image_new top.width left.height left.bands left.format left.coding left.type 0 0 0); //Build regions into full frame. row_1 = frame_lr_min r_tl r_tr w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[r_tl, top, r_tr]]; row_2 = frame_lr_min left right w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[left, middle, right]]; row_3 = frame_lr_min r_bl r_br w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[r_bl, bottom, r_br]]; result = frame_tb_min row_1 row_3 h_target blend, (h_target < (r_tl.height * 2)) = merge_array blend [[row_1], [row_2], [row_3]]; }; //////////////////////////////////////////////////////////////////////////////// /* Function called by complex frame, used to produce section * * Called from: * _NG_utilities.def complex_frame */ complex_edge ra rb t bl d = rc { e1 = ceil (ra.width - t)/2, d == 0 = 0; e2 = 0, d == 0 = ceil (ra.height - t)/2; e3 = t, d == 0 = ra.width; e4 = ra.height, d == 0 = t; check = ra.width, d == 0; = ra.height; rai = get_image ra; t2 = (t - ra.width + (2 * bl))/2, d == 0 = (t - ra.height + (2 * bl))/2; rc = ra , t <= 0 = Image (im_extract_area rai e1 e2 e3 e4), t <= check = merge_array bl [[rb',ra,rb']], d == 0 = merge_array bl [[rb'],[ra],[rb']] {rb' = merge_to_scale rb t2 bl d;} }; ////////////////////////////////////////////////////////////////////////////// /* Blends two images left/right to produce an image a specific width. * * _NG_utilities build_frame * _NG_utilities complex_frame */ frame_lr_min r_l r_r target bw = result { //Calculating the new widh required for each image. no = (target/2 + bw); n_w = no, (r_l.width > no) = r_l.width; //Removing excess from what will be the middle of the final image. n_l = im_extract_area r_l.value 0 0 n_w r_l.height; n_r = im_extract_area r_r.value (r_r.width - n_w) 0 n_w r_l.height; //Merge the two image together with a bw*2 pixel overlap. result = Image (im_lrmerge n_l n_r ((bw*2) - n_w) 0 bw); }; ////////////////////////////////////////////////////////////////////////////// /* Blends two images top/bottom to produce an image a specific width. * * _NG_utilities build_frame * _NG_utilities complex_frame */ frame_tb_min r_t r_b target bw = result { //Calculating the new height required for each image. no = (target/2 + bw); n_h = no, (r_t.height > no) = r_t.height; //Removing excess from what will be the middle of the final image. n_t = im_extract_area r_t.value 0 0 r_t.width n_h; n_b = im_extract_area r_b.value 0 (r_b.height - n_h) r_b.width n_h; //Merge the two image together with a 50 pixel overlap. result = Image (im_tbmerge n_t n_b 0 ((bw*2) -n_h) bw); }; ////////////////////////////////////////////////////////////////////////////// /* Resixe canvas of an image to accomodate a frame and possible mount * * Called from: * _NG_Extra.def Frame_item.Frame_corner_item * _NG_Extra.def Frame_item.Simple_frame_item * _NG_Extra.def Frame_item.Complex_frame_item */ frame_position_image im ref os colour= result { background = image_new ref.width ref.height im.bands im.format im.coding im.type colour 0 0; result = insert_noexpand xp yp im background { xp = (ref.width - im.width)/2; yp = (ref.height - im.height - os)/2; } }; ////////////////////////////////////////////////////////////////////////////// /* Merges an array of images together according to blend width bw * * Called from: * _NG_Utilites.def build_frame * _NG_Utilites.def complex_frame * _NG_Utilites.def complex_edge */ merge_array bw arr = result { merge_lr bw im1 im2 = im3 { bw' = get_header "Xsize" (get_image im1); bw'' = -(bw' - bw); im3 = im_lrmerge (get_image im1) (get_image im2) bw'' 0 bw; } merge_tb bw im1 im2 = im3 { bw' = get_header "Ysize" (get_image im1); bw'' = -(bw' - bw); im3 = im_tbmerge (get_image im1) (get_image im2) 0 bw'' bw; } im_out = (image_set_origin 0 0 @ foldl1 (merge_tb bw) @ map (foldl1 (merge_lr bw))) arr; result = Image im_out; }; ////////////////////////////////////////////////////////////////////////////// /* Repeatably top/bottom add clones of im, with a defined overlap, until final height > target * * Called from: * _NG_Utilites.def build_frame * _NG_Utilites.def complex_edge */ merge_to_scale im target blend dir = result { blend' = floor blend; //allow fir lr or tb process var_a = im.width, dir == 0 = im.height; var_w = im.width, dir == 1 = target, target > blend' = blend'; var_h = im.height, dir == 0 = target, target > blend' = blend'; //total numner of copies of im requires, taking overlap into account. no_loops = ceil ((log ((target - blend')/(var_a - blend')))/(log 2)); process im no = result { pr_a = get_header "Xsize" (get_image im), dir == 0 = get_header "Ysize" (get_image im); pr_b = -(pr_a - blend' + 1); im' = im_lrmerge (get_image im) (get_image im) pr_b 0 blend', dir == 0 = im_tbmerge (get_image im) (get_image im) 0 pr_b blend'; no' = no - 1; result = im', no' < 1 = process im' no'; } im_tmp = im.value, var_a > target = process im no_loops; result = Image (im_extract_area (get_image im_tmp) 0 0 var_w var_h); }; ////////////////////////////////////////////////////////////////////////////// /* Selects an elispe based on a line and a width * * Called from: * _NG_Extra.def Select_item.Elipse */ select_ellipse line width = mask { im = Image (get_image line); //Make a 2 band image whose value equals its coordinates. im_coor = Image (make_xy im.width im.height); //Adjust the values to center tham on (line.left, line.top) im_cent = im_coor - Vector [line.left,line.top]; w = line.width; h = line.height; angle = 270, w == 0 && h < 0 = 90, w == 0 && h >= 0 = 360 + atan (h/w), w > 0 && h < 0 = atan (h/w), w > 0 && h >= 0 = 180 + atan (h/w); a = ( (h ** 2) + (w ** 2) )**0.5; b = a * width; x' = ( (cos angle) * im_cent?0) + ( (sin angle) * im_cent?1); y' = ( (cos angle) * im_cent?1) - ( (sin angle) * im_cent?0); mask = ( (b**2) * (x'**2) ) + ( (a**2) * (y'**2) ) <= (a * b)**2; }; ////////////////////////////////////////////////////////////////////////////// /* Selects a tetragon based on four points. * * Called from: * _NG_Extra.def Select_item.Tetragon * _NG_Extra.def Perspective_item */ select_tetragon p1 p2 p3 p4 = mask { //Put points in clockwise order starting at the top left. pt_list = sort_pts_clockwise [p1, p2, p3, p4]; pair_list = [ [ pt_list?0, pt_list?1 ], [ pt_list?1, pt_list?2 ], [ pt_list?2, pt_list?3 ], [ pt_list?3, pt_list?0 ] ]; //Make xy image the same size as p1.image; im_xy = Image (make_xy p1.image.width p1.image.height); white = Image (image_new p1.image.width p1.image.height 1 0 Image_coding.NOCODING 1 255 0 0); mask = foldl process white pair_list; /* Treat each pair of point as a vector going from p1 to p2, * then select all to right of line. This is done for each pair, * the results are all combined to select the area defined by * the four points. */ process im_in pair = im_out { x = (pair?0).left; y = (pair?0).top; x'= (pair?1).left; y'= (pair?1).top; w = x' - x; h = y' - y; m = 0, x == x' = (y-y')/(x-x'); c = 0, x == x' = ((y*x') - (y'*x))/(x' - x); mask= im_xy?1 - (im_xy?0 * m) >= c, w > 0 = im_xy?1 - (im_xy?0 * m) <= c, w < 0 = im_xy?0 <= x, w == 0 && h > 0 = im_xy?0 >= x; im_out = im_in & mask; } }; ////////////////////////////////////////////////////////////////////////////// /* Selects a tetragon based on four points. * * Called from: * _NG_Extra.def Select_item.Polygon */ select_polygon pt_list = mask { group_check = is_Group pt_list; pt_l = pt_list.value, group_check = pt_list; im = Image (get_image (pt_l?0)); im_xy = Image (make_xy im.width im.height); black = Image (image_new im_xy.width im_xy.height 1 0 Image_coding.NOCODING 1 0 0 0); x = im_xy?0; y = im_xy?1; pt_l' = grp_trip pt_l; mask = foldl process black pt_l'; /*Takes a group adds the first two the end and then creates a lists of *lists [[a, b, c], [b, c, d] .... [x, a, b]] */ grp_trip l = l'' { px = take 2 l; l' = join l px; start = [(take 3 l')]; rest = drop 3 l'; process a b = c { x = (last a)?1; x'= (last a)?2; x'' = [[x, x', b]]; c = join a x''; } l'' = foldl process start rest; }; process im_in triplet = im_out { p1 = triplet?0; p2 = triplet?1; p3 = triplet?2; //check for change in x direction between p1-p2 and p2 -p3 dir_1 = sign (p2.left - p1.left); dir_2 = sign (p3.left - p2.left); dir = dir_1 + dir_2; //define min x limit. min_x = p1.left, p1.left < p2.left = p2.left + 1, dir != 0 = p2.left; //define max x limit. max_x = p1.left, p1.left > p2.left = p2.left - 1, dir != 0 = p2.left; //equation of line defined by p1 and p2 m = line_m p1 p2; c = line_c p1 p2; //Every thing below the line im_test = ((y >= (m * x) + c) & (x >= min_x) & (x <= max_x)); im_out = im_in ^ im_test; } line_c p1 p2 = c {m = line_m p1 p2; c = p1.top - (m * p1.left);}; line_m p1 p2 = (p2.top - p1.top)/(p2.left - p1.left), p2.left != p1.left = 0; }; ////////////////////////////////////////////////////////////////////////////// /* Selects a tetragon based on four points. * * Called from: * _NG_Extra.def Perspective_match_item * _NG_Extra.def Perspective_item */ perspective_transform to from = trans'' { /* * Tramsformation matrix is calculated on the bases of the following functions: * x' = c0x + c1y + c2xy + c3 * y' = c4x + c5y + c6xy + c7 * * The functions used in vips im_transform works based on the functions: * x = x' + b0 + b2x' + b4y' + b6x'y' * y = y' + b1 + b3x' + b5y' + b7x'y' * * and is applied in the form of the matrix: * * [[b0, b1], * [b2, b3], * [b4, b5], * [b6, b7]] * * Therefore our required calculated matrix will be * * [[ c3 , c7], * [(c0 - 1) , c4], * [ c1 , (c5 - 1)], * [ c2 , c6]] * * to = [x1, y1, x2, y2, x3, y3, x4, y4] * from = [x1', y1', x2', y2', x3', y3', x4', y4'] * trans = [[c0], [c1], [c2], [c3], [c4], [c5], [c6], [c7]] * */ to' = Matrix [[to?0, to?1, ((to?0)*(to?1)), 1, 0, 0, 0, 0], [0, 0, 0, 0, to?0, to?1, ((to?0)*(to?1)), 1], [to?2, to?3, ((to?2)*(to?3)), 1, 0, 0, 0, 0], [0, 0, 0, 0, to?2, to?3, ((to?2)*(to?3)), 1], [to?4, to?5, ((to?4)*(to?5)), 1, 0, 0, 0, 0], [0, 0, 0, 0, to?4, to?5, ((to?4)*(to?5)), 1], [to?6, to?7, ((to?6)*(to?7)), 1, 0, 0, 0, 0], [0, 0, 0, 0, to?6, to?7, ((to?6)*(to?7)), 1]]; from' = Matrix (transpose [from]); to'' = to' ** (-1); trans = to'' * from'; trans' = trans.value; trans''= Matrix [[(trans'?3)?0, (trans'?7)?0 ], [((trans'?0)?0 - 1), (trans'?4)?0 ], [(trans'?1)?0, ((trans'?5)?0 - 1)], [(trans'?2)?0, (trans'?6)?0 ]]; }; ////////////////////////////////////////////////////////////////////////////// /* Sort a list of points into clockwise order. * * Called from: * _NG_utilities.def select_tetragon * _NG_Extra.def Perspective_match_item * _NG_Extra.def Perspective_item */ sort_pts_clockwise l = l'' { // sort functions: f_top a b = a.top < b.top; f_left a b = a.left < b.left; f_right a b = a.left > b.left; l' = sortc f_top l; l'_a = take 2 l'; l'_b = drop 2 l'; l''_a = sortc f_left l'_a; l''_b = sortc f_right l'_b; l'' = join l''_a l''_b; }; Mount_options _ctype _ppcm = class { _vislevel = 3; apply = Toggle "Apply mount options" false; ls = Expression "Lower mount section bigger by (cm)" 0; mount_colour = Colour _ctype [0, 0, 0]; _los = ls.expr * _ppcm; }; Frame_variables comp = class { _vislevel = 3; scale_factor = Expression "scale the size of the frame by" 1; /* These sliders define the fraction of the frames width or height is extracted * to produce each of the particular regions. */ corner_section = Scale "Corner section" 0.1 1 0.5; edge_section = Scale "Edge section" 0.1 1 0.2, comp > 0 = "Only required for complex frames"; middle_section = Scale "Middle section" 0.1 1 0.2; blend_fraction = Scale "Blend fraction" 0.1 0.9 0.1; option = Toggle "Use mirror of left-side to make right" true; }; nip2-8.7.0/share/nip2/compat/7.38/Image.def0000644000175000017500000014266213224651032014666 00000000000000Image_new_item = class Menupullright "_New" "make new things" { Image_black_item = class Menuaction "_Image" "make a new image" { format_names = [ "8-bit unsigned int - UCHAR", // 0 "8-bit signed int - CHAR", // 1 "16-bit unsigned int - USHORT", // 2 "16-bit signed int - SHORT", // 3 "32-bit unsigned int - UINT", // 4 "32-bit signed int - INT", // 5 "32-bit float - FLOAT", // 6 "64-bit complex - COMPLEX", // 7 "64-bit float - DOUBLE", // 8 "128-bit complex - DPCOMPLEX" // 9 ]; action = class Image _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; nbands = Expression "Image bands" 1; format_option = Option "Image format" format_names 0; type_option = Option_enum "Image type" Image_type.type_names "B_W"; pixel = Expression "Pixel value" 0; _result = image_new (to_real nwidth) (to_real nheight) (to_real nbands) (to_real format_option) Image_coding.NOCODING type_option.value_thing pixel.expr 0 0; } } Image_new_from_image_item = class Menuaction "_From Image" "make a new image based on image x" { action x = class Image _result { _vislevel = 3; pixel = Expression "Pixel value" 0; _result = image_new x.width x.height x.bands x.format x.coding x.type pixel.expr x.xoffset x.yoffset; } } Image_region_item = class Menupullright "_Region on Image" "make a new region on an image" { Region_item = class Menuaction "_Region" "make a region on an image" { action image = scope.Region_relative image 0.25 0.25 0.5 0.5; } Mark_item = class Menuaction "_Point" "make a point on an image" { action image = scope.Mark_relative image 0.5 0.5; } Arrow_item = class Menuaction "_Arrow" "make an arrow on an image" { action image = scope.Arrow_relative image 0.25 0.25 0.5 0.5; } HGuide_item = class Menuaction "_Horizontal Guide" "make a horizontal guide on an image" { action image = scope.HGuide image 0.5; } VGuide_item = class Menuaction "_Vertical Guide" "make a vertical guide on an image" { action image = scope.VGuide image 0.5; } sep1 = Menuseparator; Move_item = class Menuaction "From Region" "new region on image using existing region as a guide" { action a b = map_binary process a b { process a b = x.Region target x.left x.top x.width x.height, is_Region x = x.Arrow target x.left x.top x.width x.height, is_Arrow x = error "bad arguments to region-from-region" { // prefer image then region compare a b = false, !is_Image a && is_Image b = false, is_Region a && !is_Region b = true; [target, x] = sortc compare [a, b]; } } } } } Image_convert_to_image_item = class Menuaction "Con_vert to Image" "convert anything to an image" { action x = to_image x; } Image_number_format_item = class Menupullright "_Format" "convert numeric format" { U8_item = class Menuaction "_8 bit unsigned" "convert to unsigned 8 bit [0, 255]" { action x = map_unary cast_unsigned_char x; } U16_item = class Menuaction "1_6 bit unsigned" "convert to unsigned 16 bit [0, 65535]" { action x = map_unary cast_unsigned_short x; } U32_item = class Menuaction "_32 bit unsigned" "convert to unsigned 32 bit [0, 4294967295]" { action x = map_unary cast_unsigned_int x; } sep1 = Menuseparator; S8_item = class Menuaction "8 _bit signed" "convert to signed 8 bit [-128, 127]" { action x = map_unary cast_signed_char x; } S16_item = class Menuaction "16 b_it signed" "convert to signed 16 bit [-32768, 32767]" { action x = map_unary cast_signed_short x; } S32_item = class Menuaction "32 bi_t signed" "convert to signed 32 bit [-2147483648, 2147483647]" { action x = map_unary cast_signed_int x; } sep2 = Menuseparator; Float_item = class Menuaction "_Single precision float" "convert to IEEE 32 bit float" { action x = map_unary cast_float x; } Double_item = class Menuaction "_Double precision float" "convert to IEEE 64 bit float" { action x = map_unary cast_double x; } sep3 = Menuseparator; Scmplxitem = class Menuaction "Single _precision complex" "convert to 2 x IEEE 32 bit float" { action x = map_unary cast_complex x; } Dcmplx_item = class Menuaction "Double p_recision complex" "convert to 2 x IEEE 64 bit float" { action x = map_unary cast_double_complex x; } } Image_header_item = class Menupullright "_Header" "do stuff to the image header" { Image_get_item = class Menupullright "_Get" "get header fields" { // the header fields we can get fields = class { type = 0; width = 1; height = 2; format = 3; bands = 4; xres = 5; yres = 6; xoffset = 7; yoffset = 8; coding = 9; field_names = Enum [ $width => width, $height => height, $bands => bands, $format => format, $type => type, $xres => xres, $yres => yres, $xoffset => xoffset, $yoffset => yoffset, $coding => coding ]; field_option name = Option_enum (_ "Field") field_names name; field_funcs = Table [ [type, get_type], [width, get_width], [height, get_height], [format, get_format], [bands, get_bands], [xres, get_xres], [yres, get_yres], [xoffset, get_xoffset], [yoffset, get_yoffset], [coding, get_coding] ]; } get_field field_name x = class _result { _vislevel = 3; field = fields.field_option field_name; _result = map_unary (Real @ fields.field_funcs.lookup 0 1 field.value_thing) x; } Width_item = class Menuaction "_Width" "get width" { action x = get_field "width" x; } Height_item = class Menuaction "_Height" "get height" { action x = get_field "height" x; } Bands_item = class Menuaction "_Bands" "get bands" { action x = get_field "bands" x; } Format_item = class Menuaction "_Format" "get format" { action x = get_field "format" x; } Type_item = class Menuaction "_Type" "get type" { action x = get_field "type" x; } Xres_item = class Menuaction "_Xres" "get X resolution" { action x = get_field "xres" x; } Yres_item = class Menuaction "_Yres" "get Y resolution" { action x = get_field "yres" x; } Xoffset_item = class Menuaction "X_offset" "get X offset" { action x = get_field "xoffset" x; } Yoffset_item = class Menuaction "Yo_ffset" "get Y offset" { action x = get_field "yoffset" x; } Coding_item = class Menuaction "_Coding" "get coding" { action x = get_field "coding" x; } sep1 = Menuseparator; Custom_item = class Menuaction "C_ustom" "get any header field" { action x = class _result { _vislevel = 3; field = String "Field" "Xsize"; parse = Option "Parse" [ "No parsing", "Parse string as integer", "Parse string as real", "Parse string as hh:mm:ss" ] 0; _result = map_unary (wrap @ process @ get_header field.value) x { parse_str parse str = parse (split is_space str)?0; parse_field name cast parse x = cast x, is_number x = parse_str parse x, is_string x = error ("not " ++ name); get_int = parse_field "int" cast_signed_int parse_int; get_float = parse_field "float" cast_float parse_float; get_time = parse_field "hh:mm:ss" cast_signed_int parse_time; wrap x = Real x, is_real x = Vector x, is_real_list x = Image x, is_image x = Bool x, is_bool x = Matrix x, is_matrix x = String "String" x, is_string x = List x, is_list x = x; process = [ id, get_int, get_float, get_time ]?parse; } } } } sep1 = Menuseparator; Image_set_meta_item = class Menuaction "_Set" "set image metadata" { action x = class _result { _vislevel = 3; fname = String "Field" "field-name"; val = Expression "Value" 42; _result = map_unary process x { process image = set_header fname.value val.expr image; } } } Image_edit_header_item = class Menuaction "_Edit" "change advisory header fields of image" { type_names = Image_type.type_names; all_names = sort (map (extract 0) type_names.value); get_prop has get def x = get x, has x = def; action x = class _result { _vislevel = 3; nxres = Expression "Xres" (get_prop has_xres get_xres 1 x); nyres = Expression "Yres" (get_prop has_yres get_yres 1 x); nxoff = Expression "Xoffset" (get_prop has_xoffset get_xoffset 0 x); nyoff = Expression "Yoffset" (get_prop has_yoffset get_yoffset 0 x); type_option = Option_enum "Image type" Image_type.type_names (Image_type.type_names.get_name type) { type = x.type, is_Image x = Image_type.MULTIBAND; } _result = map_unary process x { process image = Image (im_copy_set image.value type_option.value_thing (to_real nxres) (to_real nyres) (to_real nxoff) (to_real nyoff)); } } } } Image_cache_item = class Menuaction "C_ache" "cache calculated image pixels" { action x = class _result { _vislevel = 3; tile_width = Number "Tile width" 128; tile_height = Number "Tile height" 128; max_tiles = Number "Maximum number of tiles to cache" (-1); _result = map_unary process x { process image = cache (to_real tile_width) (to_real tile_height) (to_real max_tiles) image; } } } #separator Image_levels_item = class Menupullright "_Levels" "change image levels" { Scale_item = class Menuaction "_Scale to 0 - 255" "linear transform to fit 0 - 255 range" { action x = map_unary scale x; } Linear_item = class Menuaction "_Linear" "linear transform of image levels" { action x = class _result { _vislevel = 3; scale = Scale "Scale" 0.001 3 1; offset = Scale "Offset" (-128) 128 0; _result = map_unary adj x { adj x // only force back to input type if this is a thing // with a type ... so we work for Colour / Matrix etc. = clip2fmt x.format x', has_member "format" x = x' { x' = x * scale + offset; } } } } Gamma_item = class Menuaction "_Power" "power transform of image levels (gamma)" { action x = class _result { _vislevel = 3; gamma = Scale "Gamma" 0.001 4 1; image_maximum_hint = "You may need to change image_maximum if " ++ "this is not an 8 bit image"; im_mx = Expression "Image maximum" mx { mx = Image_format.maxval x.format, has_format x = 255; } _result = map_unary gam x { gam x = clip2fmt (get_format x) x', has_format x = x' { x' = (im_mx.expr / im_mx.expr ** gamma) * x ** gamma; } } } } Tone_item = class Menuaction "_Tone Curve" "adjust tone curve" { action x = class _result { _vislevel = 3; b = Scale "Black point" 0 100 0; w = Scale "White point" 0 100 100; sp = Scale "Shadow point" 0.1 0.3 0.2; mp = Scale "Mid-tone point" 0.4 0.6 0.5; hp = Scale "Highlight point" 0.7 0.9 0.8; sa = Scale "Shadow adjust" (-15) 15 0; ma = Scale "Mid-tone adjust" (-30) 30 0; ha = Scale "Highlight adjust" (-15) 15 0; curve = tone_build x.format b w sp mp hp sa ma ha; _result = map_unary (hist_map curve) x; } } } Image_transform_item = class Menupullright "_Transform" "transform images" { Rotate_item = class Menupullright "Ro_tate" "rotate image" { Fixed_item = class Menupullright "_Fixed" "clockwise rotation by fixed angles" { rotate_widget default x = class _result { _vislevel = 3; angle = Option "Rotate by" [ "Don't rotate", "90 degrees clockwise", "180 degrees", "90 degrees anticlockwise" ] default; _result = map_unary process x { process = [ // we can't use id here since we want to "declass" // the members of x ... consider if x is a crop class, // for example, we don't want to inherit from crop, we // want to make a new image class rot180 @ rot180, rot90, rot180, rot270 ] ? angle; } } Rot90_item = class Menuaction "_90 Degrees" "clockwise rotation by 90 degrees" { action x = rotate_widget 1 x; } Rot180_item = class Menuaction "_180 Degrees" "clockwise rotation by 180 degrees" { action x = rotate_widget 2 x; } Rot270_item = class Menuaction "_270 Degrees" "clockwise rotation by 270 degrees" { action x = rotate_widget 3 x; } } Free_item = class Menuaction "_Free" "clockwise rotation by any angle" { action x = class _result { _vislevel = 3; angle = Scale "Angle" (-180) 180 0; interp = Interpolate_picker Interpolate_type.BILINEAR; _result = map_unary process x { process image = rotate interp angle image; } } } Straighten_item = class Menuaction "_Straighten" ("smallest rotation that makes an arrow either horizontal " ++ "or vertical") { action x = class _result { _vislevel = 3; interp = Interpolate_picker Interpolate_type.BILINEAR; _result = map_unary straighten x { straighten arrow = rotate interp angle'' arrow.image { x = arrow.width; y = arrow.height; angle = im (polar (x, y)); angle' = angle - 360, angle > 315 = angle - 180, angle > 135 = angle; angle'' = -angle', angle' >= (-45) && angle' < 45 = 90 - angle'; } } } } } Flip_item = class Menupullright "_Flip" "mirror left/right or up/down" { Left_right_item = class Menuaction "_Left Right" "mirror object left/right" { action x = map_unary fliplr x; } Top_bottom_item = class Menuaction "_Top Bottom" "mirror object top/bottom" { action x = map_unary fliptb x; } } Resize_item = class Menupullright "_Resize" "change image size" { Scale_item = class Menuaction "_Scale" "scale image size by a factor" { action x = class _result { _vislevel = 3; xfactor = Expression "Horizontal scale factor" 1; yfactor = Expression "Vertical scale factor" 1; interp = Interpolate_picker Interpolate_type.BILINEAR; _result = map_unary process x { process image = resize interp xfactor yfactor image; } } } Size_item = class Menuaction "_Size To" "resize to a fixed size" { action x = class _result { _vislevel = 3; which = Option "Resize axis" [ "Shortest", "Longest", "Horizontal", "Vertical" ] 0; size = Expression "Resize to (pixels)" 128; aspect = Toggle "Break aspect ratio" false; interp = Interpolate_picker Interpolate_type.BILINEAR; _result = map_unary process x { process image = resize interp h v image, aspect = resize interp fac fac image { xfac = to_real size / image.width; yfac = to_real size / image.height; max_factor = [xfac, 1], xfac > yfac = [1, yfac]; min_factor = [xfac, 1], xfac < yfac = [1, yfac]; [h, v] = [ max_factor, min_factor, [xfac, 1], [1, yfac]]?which; fac = h, v == 1 = v; } } } } Size_within_item = class Menuaction "Size _Within" "size to fit within a rectangle" { action x = class _result { _vislevel = 3; // the rects we size to fit within _rects = [ [2048, 1536], [1920, 1200], [1600, 1200], [1400, 1050], [1280, 1024], [1024, 768], [800, 600], [640, 480] ]; within = Option "Fit within (pixels)" ( [print w ++ " x " ++ print h :: [w, h] <- _rects] ++ ["Custom"] ) 4; custom_width = Expression "Custom width" 1000; custom_height = Expression "Custom height" 1000; size = Option "Page size" [ "Full page", "Half page", "Quarter page" ] 0; interp = Interpolate_picker Interpolate_type.BILINEAR; _result = map_unary process x { xdiv = [1, 2, 2]?size; ydiv = [1, 1, 2]?size; allrect = _rects ++ [ [custom_width.expr, custom_height.expr] ]; [width, height] = allrect?within; process x = resize interp fac fac x, fac < 1 = x { xfac = (width / xdiv) / x.width; yfac = (height / ydiv) / x.height; fac = min_pair xfac yfac; } } } } Resize_canvas_item = class Menuaction "_Canvas" "change size of surrounding image" { action x = class _result { _vislevel = 3; // try to guess a sensible size for the new image _guess_size = x.rect, is_Image x = Rect 0 0 100 100; nwidth = Expression "New width (pixels)" _guess_size.width; nheight = Expression "New height (pixels)" _guess_size.height; bgcolour = Expression "Background colour" 0; position = Option "Position" [ "North-west", "North", "North-east", "West", "Centre", "East", "South-west", "South", "South-east", "Specify in pixels" ] 4; left = Expression "Pixels from left" 0; top = Expression "Pixels from top" 0; _result = map_unary process x { process image = insert_noexpand xp yp image background { width = image.width; height = image.height; coding = image.coding; bands = 3, coding == Image_coding.LABPACK = image.bands; format = Image_format.FLOAT, coding == Image_coding.LABPACK = image.format; type = image.type; // placement vectors ... left, centre, right xposv = [0, to_real nwidth / 2 - width / 2, to_real nwidth - width]; yposv = [0, to_real nheight / 2 - height / 2, to_real nheight - height]; xp = left, position == 9 = xposv?((int) (position % 3)); yp = top, position == 9 = yposv?((int) (position / 3)); background = image_new nwidth nheight bands format coding type bgcolour.expr 0 0; } } } } } Image_perspective_item = Perspective_item; Image_rubber_item = class Menupullright "Ru_bber Sheet" "automatically warp images to superposition" { rubber_interp = Option "Interpolation" ["Nearest", "Bilinear"] 1; rubber_order = Option "Order" ["0", "1", "2", "3"] 1; rubber_wrap = Toggle "Wrap image edges" false; // a transform ... a matrix, plus the size of the image the // matrix was made for Transform matrix image_width image_height = class matrix { // scale a transform ... if it worked for a m by n image, make // it work for a (m * xfac) by (y * yfac) image rescale xfac yfac = Transform (Matrix (map2 (map2 multiply) matrix.value facs)) (image_width * xfac) (image_height * yfac) { facs = [ [xfac, yfac], [1, 1], [1, 1], [1 / xfac, 1 / yfac], [1 / xfac, 1 / yfac], [1 / xfac, 1 / yfac] ]; } } // yuk!!!! fix is_instanceof to not need absolute names is_Transform = is_instanceof "Image_transform_item.Image_rubber_item.Transform"; Find_item = class Menuaction "_Find" ("find a transform which will map sample image onto " ++ "reference") { action reference sample = class _trn { _vislevel = 3; // controls order = rubber_order; interp = rubber_interp; wrap = rubber_wrap; max_err = Expression "Maximum error" 0.3; max_iter = Expression "Maximum iterations" 10; // transform [sample', trn, err] = transform_search max_err max_iter order interp wrap sample reference; transformed_image = Image sample'; _trn = Transform trn reference.width reference.height; final_error = err; } } Apply_item = class Menuaction "_Apply" "apply a transform to an image" { action a b = class _result { _vislevel = 3; // controls interp = rubber_interp; wrap = rubber_wrap; _result = map_binary trans a b { trans a b = transform interp wrap t' i { // get the transform arg first [i, t] = sortc (const is_Transform) [a, b]; t' = t.rescale (i.width / t.image_width) (i.height / t.image_height); } } } } } sep1 = Menuseparator; Match_item = class Menuaction "_Linear Match" "rotate and scale one image to match another" { action x y = class _result { _vislevel = 3; // try to find an image ... for a group, get the first item find_image x = x, is_Image x = find_image x?0, is_list x = find_image x.value, is_class x && has_value x = error "unable to find image"; _a = find_image x; _b = find_image y; ap1 = Mark_relative _a 0.5 0.25; bp1 = Mark_relative _b 0.5 0.25; ap2 = Mark_relative _a 0.5 0.75; bp2 = Mark_relative _b 0.5 0.75; refine = Toggle "Refine selected tie-points" false; lock = Toggle "No resize" false; _result = map_binary process x y { process a b = Image b''' { _prefs = Workspaces.Preferences; window = _prefs.MOSAIC_WINDOW_SIZE; object = _prefs.MOSAIC_OBJECT_SIZE; a' = a.value; b' = b.value; b'' = clip2fmt a.format b'; // return p2 ... if lock is set, return a p2 a standard // distance along the vector joining p1 and p2 norm p1 p2 = Rect left' top' 0 0, lock = p2 { v = (p2.left - p1.left, p2.top - p1.top); // 100000 to give precision since we pass points as // ints to match n = 100000 * sign v; left' = p1.left + re n; top' = p1.top + im n; } ap2'' = norm ap1 ap2; bp2'' = norm bp1 bp2; b''' = im_match_linear_search a' b'' ap1.left ap1.top bp1.left bp1.top ap2''.left ap2''.top bp2''.left bp2''.top object window, // we can't search if lock is on refine && !lock = im_match_linear a' b'' ap1.left ap1.top bp1.left bp1.top ap2''.left ap2''.top bp2''.left bp2''.top; } } } } Image_perspective_match_item = Perspective_match_item; } Image_band_item = class Menupullright "_Band" "manipulate image bands" { // like extract_bands, but return [] for zero band image // makes compose a bit simpler exb b n x = [], to_real n == 0 = extract_bands b n x; Extract_item = class Menuaction "_Extract" "extract bands from image" { action x = class _result { _vislevel = 3; first = Expression "Extract from band" 0; number = Expression "Extract this many bands" 1; _result = map_unary (exb first number) x; } } Insert_item = class Menuaction "_Insert" "insert bands into image" { action x y = class _result { _vislevel = 3; first = Expression "Insert at position" 0; _result = map_binary process x y { process im1 im2 = exb 0 f im1 ++ im2 ++ exb f (b - f) im1 { f = to_real first; b = im1.bands; } } } } Delete_item = class Menuaction "_Delete" "delete bands from image" { action x = class _result { _vislevel = 3; first = Expression "Delete from band" 0; number = Expression "Delete this many bands" 1; _result = map_unary process x { process im = exb 0 f im ++ exb (f + n) (b - (f + n)) im { f = to_real first; n = to_real number; b = im.bands; } } } } Bandwise_item = Image_join_item.Bandwise_item; sep1 = Menuseparator; Bandand_item = class Menuaction "Bitwise Band AND" "bitwise AND of image bands" { action x = bandand x; } Bandor_item = class Menuaction "Bitwise Band OR" "bitwise OR of image bands" { action x = bandor x; } sep2 = Menuseparator; To_dimension_item = class Menuaction "To D_imension" "convert bands to width or height" { action x = class _result { _vislevel = 3; orientation = Option "Orientation" [ "Horizontal", "Vertical" ] 0; _result = map_unary process x { process im = foldl1 [join_lr, join_tb]?orientation (bandsplit im); } } } To_bands_item = class Menuaction "To B_ands" "turn width or height to bands" { action x = class _result { _vislevel = 3; orientation = Option "Orientation" [ "Horizontal", "Vertical" ] 0; _result = map_unary process x { process im = bandjoin (map extract_column [0 .. im.width - 1]), orientation == 0 = bandjoin (map extract_row [0 .. im.height - 1]) { extract_column n = extract_area n 0 1 im.height im; extract_row n = extract_area 0 n im.width 1 im; } } } } } Image_crop_item = class Menuaction "_Crop" "extract a rectangular area from an image" { action x = crop x [l, t, w, h] { fields = [ [has_left, get_left, 0], [has_top, get_top, 0], [has_width, get_width, 100], [has_height, get_height, 100] ]; [l, t, w, h] = map get_default fields { get_default line = get x, has x = default { [has, get, default] = line; } } } crop x geo = class _result { _vislevel = 3; l = Expression "Crop left" ((int) (geo?0 + geo?2 / 4)); t = Expression "Crop top" ((int) (geo?1 + geo?3 / 4)); w = Expression "Crop width" (max_pair 1 ((int) (geo?2 / 2))); h = Expression "Crop height" (max_pair 1 ((int) (geo?3 / 2))); _result = map_nary (list_5ary extract) [x, l.expr, t.expr, w.expr, h.expr] { extract im l t w h = extract_area left' top' width' height' im { width' = min_pair (to_real w) im.width; height' = min_pair (to_real h) im.height; left' = range 0 (to_real l) (im.width - width'); top' = range 0 (to_real t) (im.height - height'); } } } } Image_insert_item = class Menuaction "_Insert" "insert a small image into a large image" { action a b = insert_position, is_Group a || is_Group b = insert_area { insert_area = class _result { _check_args = [ [a, "a", check_Image], [b, "b", check_Image] ]; _vislevel = 3; // sort to get smallest first _pred x y = x.width * x.height < y.width * y.height; [_a', _b'] = sortc _pred [a, b]; place = Area _b' left top width height { // be careful in case b is smaller than a left = max_pair 0 ((_b'.width - _a'.width) / 2); top = max_pair 0 ((_b'.height - _a'.height) / 2); width = min_pair _a'.width _b'.width; height = min_pair _a'.height _b'.height; } _result = insert_noexpand place.left place.top (clip2fmt _b'.format a'') _b' { a'' = extract_area 0 0 place.width place.height _a'; } } insert_position = class _result { _vislevel = 3; position = Option "Position" [ "North-west", "North", "North-east", "West", "Centre", "East", "South-west", "South", "South-east", "Specify in pixels" ] 4; left = Expression "Pixels from left" 0; top = Expression "Pixels from top" 0; _result = map_binary insert a b { insert a b = insert_noexpand left top (clip2fmt b.format a) b, position == 9 = insert_noexpand xp yp (clip2fmt b.format a) b { xr = b.width - a.width; yr = b.height - a.height; xp = [0, xr / 2, xr]?((int) (position % 3)); yp = [0, yr / 2, yr]?((int) (position / 3)); } } } } } Image_select_item = Select_item; Image_draw_item = class Menupullright "_Draw" "draw lines, circles, rectangles, floods" { Line_item = class Menuaction "_Line" "draw line on image" { action x = class _result { _vislevel = 3; x1 = Expression "Start x" 0; y1 = Expression "Start y" 0; x2 = Expression "End x" 100; y2 = Expression "End y" 100; i = Expression "Ink" [0]; _result = map_unary line x { line im = draw_line x1 y1 x2 y2 i.expr im; } } } Rect_item = class Menuaction "_Rectangle" "draw rectangle on image" { action x = class _result { _vislevel = 3; rx = Expression "Left" 50; ry = Expression "Top" 50; rw = Expression "Width" 100; rh = Expression "Height" 100; f = Toggle "Fill" true; t = Scale "Line thickness" 1 50 3; i = Expression "Ink" [0]; _result = map_unary rect x { rect im = draw_rect_width rx ry rw rh f t i.expr im; } } } Circle_item = class Menuaction "_Circle" "draw circle on image" { action x = class _result { _vislevel = 3; cx = Expression "Centre x" 100; cy = Expression "Centre y" 100; r = Expression "Radius" 50; f = Toggle "Fill" true; i = Expression "Ink" [0]; _result = map_unary circle x { circle im = draw_circle cx cy r f i.expr im; } } } Flood_item = class Menuaction "_Flood" "flood bounded area of image" { action x = class _result { _vislevel = 3; sx = Expression "Start x" 100; sy = Expression "Start y" 100; e = Option "Flood while" [ "Not equal to ink", "Equal to start point" ] 0; // pick a default ink that won't flood, if we can i = Expression "Ink" default_ink { default_ink = [0], ! has_image x = pixel; pixel = map mean (bandsplit (extract_area sx sy 1 1 im)); im = get_image x; } _result = map_unary flood x { flood im = draw_flood sx sy i.expr im, e == 0 = draw_flood_blob sx sy i.expr im; } } } Draw_scalebar_item = class Menuaction "_Scale" "draw scale bar" { action x = class _result { _vislevel = 3; px = Expression "Left" 50; py = Expression "Top" 50; wid = Expression "Width" 100; thick = Scale "Line thickness" 1 50 3; text = String "Dimension text" "50μm"; font = Fontname "Use font" Workspaces.Preferences.PAINTBOX_FONT; pos = Option "Position Text" ["Above", "Below"] 1; vp = Option "Dimension by" [ "Inner Vertical Edge", "Centre of Vertical", "Outer Vertical Edge" ] 1; dpi = Expression "DPI" 100; ink = Colour "Lab" [50,0,0]; _result = map_unary process x { process im = blend (Image scale) ink' im { // make an ink compatible with the image ink' = colour_transform_to (get_type im) ink; x = to_real px; y = to_real py; w = to_real wid; d = to_real dpi; t = floor thick; bg = image_new (get_width im) (get_height im) (get_bands im) (get_format im) (get_coding im) (get_type im) 0 0 0; draw_block x y w t im = draw_rect_width x y w t true 1 [255] im; label = im_text text.value font.value w 1 d; lw = get_width label; lh = get_height label; ly = [y - lh - t, y + 2 * t]?pos; vx = [ [x - t, x + w], [x - t / 2, x + w - t / 2], [x, x + w - t] ]?vp; scale = (draw_block x y w t @ draw_block vx?0 (y - 2 * t) t (t * 5) @ draw_block vx?1 (y - 2 * t) t (t * 5) @ insert_noexpand (x + w / 2 - lw / 2) ly label) bg; } } } } } Image_join_item = class Menupullright "_Join" "join two or more images together" { Bandwise_item = class Menuaction "_Bandwise Join" "join two images bandwise" { action a b = join a b; } sep1 = Menuseparator; join_lr shim bg align a b = im2 { w = a.width + b.width + shim; h = max_pair a.height b.height; back = image_new w h a.bands a.format a.coding a.type bg 0 0; ya = [0, max_pair 0 ((b.height - a.height)/2), max_pair 0 (b.height - a.height)]; yb = [0, max_pair 0 ((a.height - b.height)/2), max_pair 0 (a.height - b.height)]; im1 = insert_noexpand 0 ya?align a back; im2 = insert_noexpand (a.width + shim) yb?align b im1; } join_tb shim bg align a b = im2 { w = max_pair a.width b.width; h = a.height + b.height + shim; back = image_new w h a.bands a.format a.coding a.type bg 0 0; xa = [0, max_pair 0 ((b.width - a.width)/2), max_pair 0 (b.width - a.width)]; xb = [0, max_pair 0 ((a.width - b.width)/2), max_pair 0 (a.width - b.width)]; im1 = insert_noexpand xa?align 0 a back; im2 = insert_noexpand xb?align (a.height + shim) b im1; } halign_names = ["Top", "Centre", "Bottom"]; valign_names = ["Left", "Centre", "Right"]; Left_right_item = class Menuaction "_Left to Right" "join two images left-right" { action a b = class _result { _vislevel = 3; shim = Scale "Spacing" 0 100 0; bg_colour = Expression "Background colour" 0; align = Option "Alignment" halign_names 1; _result = map_binary (join_lr shim.value bg_colour.expr align.value) a b; } } Top_bottom_item = class Menuaction "_Top to Bottom" "join two images top-bottom" { action a b = class _result { _vislevel = 3; shim = Scale "Spacing" 0 100 0; bg_colour = Expression "Background colour" 0; align = Option "Alignment" valign_names 1; _result = map_binary (join_tb shim.value bg_colour.expr align.value) a b; } } sep2 = Menuseparator; Array_item = class Menuaction "_Array" "join a list of lists of images into a single image" { action x = class _result { _vislevel = 3; hshim = Scale "Horizontal spacing" (-100) (100) 0; vshim = Scale "Vertical spacing" (-100) (100) 0; bg_colour = Expression "Background colour" 0; halign = Option "Horizontal alignment" valign_names 1; valign = Option "Vertical alignment" halign_names 1; // we can't use map_unary since chop-into-tiles returns a group of // groups and we want to be able to reassemble that // TODO: chop-into-tiles should return an array class which // displays as group but does not have the looping behaviour? _result = (image_set_origin 0 0 @ foldl1 (join_tb vshim.value bg_colour.expr halign.value) @ map (foldl1 (join_lr hshim.value bg_colour.expr valign.value))) (to_list (to_list x)); } } ArrayFL_item = class Menuaction "_Array from List" "join a list of images into a single image" { action x = class _result { _vislevel = 3; ncol = Number "Max. Number of Columns" 1; hshim = Scale "Horizontal spacing" (-100) (100) 0; vshim = Scale "Vertical spacing" (-100) (100) 0; bg_colour = Expression "Background colour" 0; halign = Option "Horizontal alignment" valign_names 1; valign = Option "Vertical alignment" halign_names 1; _l = split_lines ncol.value x.value, is_Group x = split_lines ncol.value x; _result = (image_set_origin 0 0 @ foldl1 (join_tb vshim.value bg_colour.expr halign.value) @ map (foldl1 (join_lr hshim.value bg_colour.expr valign.value))) (to_list (to_list _l)); } } } Image_tile_item = class Menupullright "Til_e" "tile an image across and down" { tile_widget default_type x = class _result { _vislevel = 3; across = Expression "Tiles across" 2; down = Expression "Tiles down" 2; repeat = Option "Tile type" ["Replicate", "Four-way mirror"] default_type; _result = map_unary process x { process image = tile across down image, repeat == 0 = tile across down image'' { image' = insert image.width 0 (fliplr image) image; image'' = insert 0 image.height (fliptb image') image'; } } } Replicate_item = class Menuaction "_Replicate" "replicate image across and down" { action x = tile_widget 0 x; } Fourway_item = class Menuaction "_Four-way Mirror" "four-way mirror across and down" { action x = tile_widget 1 x; } Chop_item = class Menuaction "_Chop Into Tiles" "slice an image into tiles" { action x = class _result { _vislevel = 3; tile_width = Expression "Tile width" 100; tile_height = Expression "Tile height" 100; hoverlap = Expression "Horizontal overlap" 0; voverlap = Expression "Vertical overlap" 0; _result = map_unary (Group @ map Group @ process) x { process x = imagearray_chop tile_width tile_height hoverlap voverlap x; } } } } #separator Pattern_images_item = class Menupullright "_Patterns" "make a variety of useful patterns" { Grey_item = class Menuaction "Grey _Ramp" "make a smooth grey ramp" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; orientation = Option "Orientation" [ "Horizontal", "Vertical" ] 0; foption = Option "Format" ["8 bit", "float"] 0; _result = Image im { gen = im_grey, foption == 0 = im_fgrey; w = to_real nwidth; h = to_real nheight; im = gen w h, orientation == 0 = rot90 (gen h w); } } } Xy_item = class Menuaction "_XY Image" "make a two band image whose pixel values are their coordinates" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; _result = Image (make_xy nwidth nheight); } } Gaussian_item = class Menuaction "Gaussian _Noise" "make an image of gaussian noise" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; mean = Scale "Mean" 0 255 128; deviation = Scale "Deviation" 0 128 50; _result = Image (im_gaussnoise (to_real nwidth) (to_real nheight) mean.value deviation.value); } } Fractal_item = class Menuaction "_Fractal" "make a fractal image" { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; dimension = Scale "Dimension" 2.001 2.999 2.001; _result = Image (im_fractsurf (to_real nsize) dimension.value); } } Checkerboard_item = class Menuaction "_Checkerboard" "make a checkerboard image" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; hpsize = Expression "Horizontal patch size" 8; vpsize = Expression "Vertical patch size" 8; hpoffset = Expression "Horizontal patch offset" 0; vpoffset = Expression "Vertical patch offset" 0; _result = Image (xstripes ^ ystripes) { pixels = make_xy nwidth nheight; xpixels = pixels?0 + to_real hpoffset; ypixels = pixels?1 + to_real vpoffset; make_stripe pix swidth = pix % (swidth * 2) >= swidth; xstripes = make_stripe xpixels (to_real hpsize); ystripes = make_stripe ypixels (to_real vpsize); } } } Grid_item = class Menuaction "Gri_d" "make a grid" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; hspace = Expression "Horizontal line spacing" 8; vspace = Expression "Vertical line spacing" 8; thick = Expression "Line thickness" 1; hoff = Expression "Horizontal grid offset" 4; voff = Expression "Vertical grid offset" 4; _result = Image (xstripes | ystripes) { pixels = make_xy nwidth nheight; xpixels = pixels?0 + to_real hoff; ypixels = pixels?1 + to_real voff; make_stripe pix swidth = pix % swidth < to_real thick; xstripes = make_stripe xpixels (to_real hspace); ystripes = make_stripe ypixels (to_real vspace); } } } Text_item = class Menuaction "_Text" "make a bitmap of some text" { action = class _result { _vislevel = 3; text = String "Text to paint" "Hello world!"; font = Fontname "Use font" Workspaces.Preferences.PAINTBOX_FONT; wrap = Expression "Wrap text at" 500; align = Option "Alignment" [ "Left", "Centre", "Right" ] 0; dpi = Expression "DPI" 300; _result = Image (im_text text.value font.value (to_real wrap) align.value (to_real dpi)); } } New_CIELAB_slice_item = class Menuaction "CIELAB _Slice" "make a slice through CIELAB space" { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; L = Scale "L value" 0 100 50; _result = Image (lab_slice (to_real nsize) L.value); } } sense_option = Option "Sense" [ "Pass", "Reject" ] 0; build fn size = (Image @ image_set_type Image_type.FOURIER @ rotquad @ fn) (im_create_fmask size size); New_ideal_item = class Menupullright "_Ideal Fourier Mask" "make various ideal Fourier filter masks" { High_low_item = class Menuaction "_High or Low Pass" ("make a mask image for a highpass/lowpass " ++ "ideal Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f sense.value fc.value 0 0 0 0; } } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" ("make a mask image for an ring pass/reject " ++ "ideal Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; rw = Scale "Ring width" 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f (sense.value + 6) fc.value rw.value 0 0 0; } } } Band_item = class Menuaction "_Band Pass or Band Reject" ("make a mask image for a band pass/reject " ++ "ideal Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fcx = Scale "Horizontal frequency cutoff" 0.01 0.99 0.5; fcy = Scale "Vertical frequency cutoff" 0.01 0.99 0.5; r = Scale "Radius" 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f (sense.value + 12) fcx.value fcy.value r.value 0 0; } } } } New_gaussian_item = class Menupullright "_Gaussian Fourier Mask" "make various Gaussian Fourier filter masks" { High_low_item = class Menuaction "_High or Low Pass" ("make a mask image for a highpass/lowpass " ++ "Gaussian Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f (sense.value + 4) fc.value ac.value 0 0 0; } } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" ("make a mask image for an ring pass/reject " ++ "Gaussian Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; rw = Scale "Ring width" 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f (sense.value + 10) fc.value rw.value ac.value 0 0; } } } Band_item = class Menuaction "_Band Pass or Band Reject" ("make a mask image for a band pass/reject " ++ "Gaussian Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fcx = Scale "Horizontal frequency cutoff" 0.01 0.99 0.5; fcy = Scale "Vertical frequency cutoff" 0.01 0.99 0.5; r = Scale "Radius" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f (sense.value + 16) fcx.value fcy.value r.value ac.value 0; } } } } New_butterworth_item = class Menupullright "_Butterworth Fourier Mask" "make various Butterworth Fourier filter masks" { High_low_item = class Menuaction "_High or Low Pass" ("make a mask image for a highpass/lowpass " ++ "Butterworth Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; order = Scale "Order" 1 10 2; _result = build param (to_real nsize) { param f = f (sense.value + 2) order.value fc.value ac.value 0 0; } } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" ("make a mask image for an ring pass/reject " ++ "Butterworth Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; rw = Scale "Ring width" 0.01 0.99 0.5; order = Scale "Order" 1 10 2; _result = build param (to_real nsize) { param f = f (sense.value + 8) order.value fc.value rw.value ac.value 0; } } } Band_item = class Menuaction "_Band Pass or Band Reject" ("make a mask image for a band pass/reject " ++ "Butterworth Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fcx = Scale "Horizontal frequency cutoff" 0.01 0.99 0.5; fcy = Scale "Vertical frequency cutoff" 0.01 0.99 0.5; r = Scale "Radius" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; order = Scale "Order" 1 10 2; _result = build param (to_real nsize) { param f = f (sense.value + 14) order.value fcx.value fcy.value r.value ac.value; } } } } } Test_images_item = class Menupullright "Test I_mages" "make a variety of test images" { Eye_item = class Menuaction "_Spatial Response" "image for testing the eye's spatial response" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; factor = Scale "Factor" 0.001 1 0.2; _result = Image (im_eye (to_real nwidth) (to_real nheight) factor.value); } } Zone_plate = class Menuaction "_Zone Plate" "make a zone plate" { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; _result = Image (im_zone (to_real nsize)); } } Frequency_test_chart_item = class Menuaction "_Frequency Testchart" "make a black/white frequency test pattern" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; sheight = Expression "Strip height (pixels)" 10; waves = Expression "Wavelengths" [64, 32, 16, 8, 4, 2]; _result = imagearray_assemble 0 0 (transpose [strips]) { freq_slice wave = Image (sin (grey / wave) > 0); strips = map freq_slice waves.expr; grey = im_fgrey (to_real nwidth) (to_real sheight) * 360 * (to_real nwidth); } } } CRT_test_chart_item = class Menuaction "CRT _Phosphor Chart" "make an image for measuring phosphor colours" { action = class _result { _vislevel = 3; brightness = Scale "Brightness" 0 255 200; psize = Expression "Patch size (pixels)" 32; _result = Image (imagearray_assemble 0 0 [[green, red], [blue, white]]) { black = image_new (to_real psize) (to_real psize) 1 Image_format.FLOAT Image_coding.NOCODING Image_type.B_W 0 0 0; notblack = black + brightness; green = black ++ notblack ++ black; red = notblack ++ black ++ black; blue = black ++ black ++ notblack; white = notblack ++ notblack ++ notblack; } } } Greyscale_chart_item = class Menuaction "_Greyscale" "make a greyscale" { action = class _result { _vislevel = 3; pwidth = Expression "Patch width" 8; pheight = Expression "Patch height" 8; npatches = Expression "Number of patches" 16; _result = Image (image_set_type Image_type.B_W (clip2fmt Image_format.UCHAR wedge)) { wedge = 255 / (to_real npatches - 1) * (int) (strip?0 / to_real pwidth) { strip = make_xy (to_real pwidth * to_real npatches) pheight; } } } } CMYK_test_chart_item = class Menuaction "_CMYK Wedges" "make a set of CMYK wedges" { action = class _result { _vislevel = 3; pwidth = Expression "Patch width" 8; pheight = Expression "Patch height" 8; npatches = Expression "Number of patches" 16; _result = Image (image_set_type Image_type.CMYK (clip2fmt Image_format.UCHAR strips)) { wedge = 255 / (to_real npatches - 1) * (int) (strip?0 / to_real pwidth) { strip = make_xy (to_real pwidth * to_real npatches) pheight; } black = wedge * 0; C = wedge ++ black ++ black ++ black; M = black ++ wedge ++ black ++ black; Y = black ++ black ++ wedge ++ black; K = black ++ black ++ black ++ wedge; strips = imagearray_assemble 0 0 [[C],[M],[Y],[K]]; } } } Colour_atlas_item = class Menuaction "_Colour Atlas" "make a grid of patches grouped around a colour" { action = class _result { _vislevel = 3; start = Colour_picker "Lab" [50,0,0]; nstep = Expression "Number of steps" 9; ssize = Expression "Step size" 10; psize = Expression "Patch size" 32; sepsize = Expression "Separator size" 4; _result = colour_transform_to (get_type start) blocks''' { size = (to_real nstep * 2 + 1) * to_real psize - to_real sepsize; xy = make_xy size size; xy_grid = (xy % to_real psize) < (to_real psize - to_real sepsize); grid = xy_grid?0 & xy_grid?1; blocks = (int) (to_real ssize * ((int) (xy / to_real psize))); lab_start = colour_transform_to Image_type.LAB start; blocks' = blocks - to_real nstep * to_real ssize + Vector (tl lab_start.value); blocks'' = hd lab_start.value ++ Image blocks'; blocks''' = image_set_type Image_type.LAB blocks'', Image grid = 0; } } } } nip2-8.7.0/share/nip2/compat/7.38/_list.def0000644000175000017500000002310313224651032014742 00000000000000/* any l: or all the elements of list l together * * any (map (equal 0) list) == true, if any element of list is zero. * any :: [bool] -> bool */ any = foldr logical_or false; /* all l: and all the elements of list l together * * all (map (==0) list) == true, if every element of list is zero. * all :: [bool] -> bool */ all = foldr logical_and true; /* concat l: join a list of lists together * * concat ["abc","def"] == "abcdef". * concat :: [[*]] -> [*] */ concat l = foldr join [] l; /* delete eq x l: delete the first x from l * * delete equal 'b' "abcdb" == "acdb" * delete :: (* -> bool) -> * -> [*] -> [*] */ delete eq a l = [], l == [] = y, eq a b = b : delete eq a y { b:y = l; } /* difference eq a b: delete b from a * * difference equal "asdf" "ad" == "sf" * difference :: (* -> bool) -> [*] -> [*] -> [*] */ difference = foldl @ converse @ delete; /* drop n l: drop the first n elements from list l * * drop 3 "abcd" == "d" * drop :: num -> [*] -> [*] */ drop n l = l, n <= 0 || l == [] = drop (n - 1) (tl l); /* dropwhile fn l: drop while fn is true * * dropwhile is_digit "1234pigs" == "pigs" * dropwhile :: (* -> bool) -> [*] -> [*] */ dropwhile fn l = [], l == [] = dropwhile fn x, fn a = l { a:x = l; } /* extract n l: extract element at index n from list l */ extract = converse subscript; /* filter fn l: return all elements of l for which predicate fn holds * * filter is_digit "1one2two3three" = "123" * filter :: (* -> bool) -> [*] -> [*] */ filter fn l = foldr addif [] l { addif x l = x : l, fn x; = l; } /* flatten x: flatten a list of lists of things into a simple list * * flatten :: [[*]] -> [*] */ flatten x = foldr flat [] x, is_list x = x { flat x sofar = foldr flat sofar x, is_list x = x : sofar; } /* foldl fn st l: fold list l from the left with function fn and start st * * Start from the left hand end of the list (unlike foldr, see below). * foldl is less useful (and much slower). * * foldl fn start [a,b .. z] = ((((st fn a) fn b) ..) fn z) * foldl :: (* -> ** -> *) -> * -> [**] -> * */ foldl fn st l = st, l == [] = foldl fn (fn st x) xs { x:xs = l; } /* foldl1 fn l: like foldl, but use the 1st element as the start value * * foldl1 fn [1,2,3] == ((1 fn 2) fn 3) * foldl1 :: (* -> * -> *) -> [*] -> * */ foldl1 fn l = [], l == [] = foldl fn x xs { x:xs = l; } /* foldr fn st l: fold list l from the right with function fn and start st * * foldr fn st [a,b..z] = (a fn (b fn (.. (z fn st)))) * foldr :: (* -> ** -> **) -> ** -> [*] -> ** */ foldr fn st l = st, l == [] = fn x (foldr fn st xs) { x:xs = l; } /* foldr1 fn l: like foldr, but use the last element as the start value * * foldr1 fn [1,2,3,4] == (1 fn (2 fn (3 fn 4))) * foldr1 :: (* -> * -> *) -> [*] -> * */ foldr1 fn l = [], l == [] = x, xs == [] = fn x (foldr1 fn xs) { x:xs = l; } /* Search a list for an element, returning its index (or -1) * * index (equal 12) [13,12,11] == 1 * index :: (* -> bool) -> [*] -> real */ index fn list = search list 0 { search l n = -1, l == [] = n, fn x = search xs (n + 1) { x:xs = l; } } /* init l: remove last element of list l * * The dual of tl. * init [1,2,3] == [1,2] * init :: [*] -> [*] */ init l = error "init of []", l == []; = [], tl l == []; = x : init xs { x:xs = l; } /* iterate f x: repeatedly apply f to x * * return the infinite list [x, f x, f (f x), ..]. * iterate (multiply 2) 1 == [1, 2, 4, 8, 16, 32, 64 ... ] * iterate :: (* -> *) -> * -> [*] */ iterate f x = x : iterate f (f x); /* join_sep sep l: join a list with a separator * * join_sep ", " (map print [1 .. 4]) == "1, 2, 3, 4" * join_sep :: [*] -> [[*]] -> [*] */ join_sep sep l = foldl1 fn l { fn a b = a ++ sep ++ b; } /* last l: return the last element of list l * * The dual of hd. last [1,2,3] == 3 * last :: [*] -> [*] */ last l = error "last of []", l == [] = x, xs == [] = last xs { x:xs = l; } /* len l: length of list l * (see also is_list_len and friends in predicate.def) * * len :: [*] -> num */ len l = 0, l == [] = 1 + len (tl l); /* limit l: return the first element of l which is equal to its predecessor * * useful for checking for convergence * limit :: [*] -> * */ limit l = error "incorrect use of limit", l == [] || tl l == [] || tl (tl l) == [] = a, a == b = limit (b : x) { a:b:x = l; } /* Turn a function of n args into a function which takes a single arg of an * n-element list. */ list_1ary fn x = fn x?0; list_2ary fn x = fn x?0 x?1; list_3ary fn x = fn x?0 x?1 x?2; list_4ary fn x = fn x?0 x?1 x?2 x?3; list_5ary fn x = fn x?0 x?1 x?2 x?3 x?4; list_6ary fn x = fn x?0 x?1 x?2 x?3 x?4 x?5; list_7ary fn x = fn x?0 x?1 x?2 x?3 x?4 x?5 x?6; /* map fn l: map function fn over list l * * map :: (* -> **) -> [*] -> [**] */ map f l = [], l == []; = f (hd l) : map f (tl l); /* map2 fn l1 l2: map two lists together with fn * * map2 :: (* -> ** -> ***) -> [*] -> [**] -> [***] */ map2 fn l1 l2 = map (list_2ary fn) (zip2 l1 l2); /* map3 fn l1 l2 l3: map three lists together with fn * * map3 :: (* -> ** -> *** -> ****) -> [*] -> [**] -> [***] -> [****] */ map3 fn l1 l2 l3 = map (list_3ary fn) (zip3 l1 l2 l3); /* member l x: true if x is a member of list l * * is_digit == member "0123456789" * member :: [*] -> * -> bool */ member l x = any (map (equal x) l); /* merge b l r: merge two lists based on a bool list * * merge :: [bool] -> [*] -> [*] -> [*] */ merge p l r = [], p == [] || l == [] || r == [] = a : merge z x y, c = b : merge z x y { a:x = l; b:y = r; c:z = p; } /* mkset eq l: remove duplicates from list l using equality function * * mkset :: (* -> bool) -> [*] -> [*] */ mkset eq l = [], l == [] = a : filter (not @ eq a) (mkset eq x) { a:x = l; } /* postfix l r: add r to the end of list l * * The dual of ':'. * postfix :: [*] -> ** -> [*,**] */ postfix l r = l ++ [r]; /* repeat x: make an infinite list of xes * * repeat :: * -> [*] */ repeat x = map (const x) [1..]; /* replicate n x: make n copies of x in a list * * replicate :: num -> * -> [*] */ replicate n x = take n (repeat x); /* reverse l: reverse list l * * reverse :: [*] -> [*] */ reverse l = foldl (converse cons) [] l; /* scanl fn st l: apply (foldl fn r) to every initial segment of a list * * scanl add 0 [1,2,3] == [1,3,6] * scanl :: (* -> ** -> *) -> * -> [**] -> [*] */ scanl fn st l = st, l == [] = st' : scanl fn st' xs { x:xs = l; st' = fn st x; } /* sort l: sort list l into ascending order * * sort :: [*] -> [*] */ sort l = sortc less_equal l; /* sortc comp l: sort list l into order using a comparision function * * Uses merge sort (n log n behaviour) * sortc :: (* -> * -> bool) -> [*] -> [*] */ sortc comp l = l, n <= 1 = merge (sortc comp (take n2 l)) (sortc comp (drop n2 l)) { n = len l; n2 = (int) (n / 2); /* merge l1 l2: merge sorted lists l1 and l2 to make a single * sorted list */ merge l1 l2 = l2, l1 == [] = l1, l2 == [] = a : merge x (b : y), comp a b = b : merge (a : x) y { a:x = l1; b:y = l2; } } /* sortpl pl l: sort by a list of predicates * * sortpl :: (* -> bool) -> [*] -> [*] */ sortpl pl l = sortc (test pl) l { /* Comparision function ... put true before false, if equal move on to * the next predicate. */ test pl a b = true, pl == [] = ta, ta != tb = test (tl pl) a b { ta = pl?0 a; tb = pl?0 b; } } /* sortr l: sort list l into descending order * * sortr :: [*] -> [*] */ sortr l = sortc more l; /* split fn l: break a list into sections separated by many fn * * split is_space " hello world " == ["hello", "world"] * split is_space " " == [] * split :: (* -> bool) -> [*] -> [[*]] */ split fn l = [], l == [] || l' == [] = head : split fn tail { nfn = not @ fn; l' = dropwhile fn l; head = takewhile nfn l'; tail = dropwhile nfn l'; } /* splits fn l: break a list into sections separated by a single fn * * split (equal ',') ",,1" == ["", "", "1"] * split :: (* -> bool) -> [*] -> [[*]] */ splits fn l = [], l == [] = head : splits fn tail { fn' = not @ fn; dropif x = [], x == [] = tl x; head = takewhile fn' l; tail = dropif (dropwhile fn' l); } /* splitpl fnl l: split a list up with a list of predicates * * splitpl [is_digit, is_letter, is_digit] "123cat" == ["123", "cat", []] * splitpl :: [* -> bool] -> [*] -> [[*]] */ splitpl fnl l = l, fnl == [] = head : splitpl (tl fnl) tail { head = takewhile (hd fnl) l; tail = dropwhile (hd fnl) l; } /* split_lines n l: split a list into equal length lines * * split_lines 4 "1234567" == ["1234", "567"] * splitl :: int -> [*] -> [[*]] */ split_lines n l = [], l == [] = take n l : split_lines n (drop n l); /* take n l: take the first n elements from list l * take :: num -> [*] -> [*] */ take n l = [], n <= 0 = [], l == [] = hd l : take (n-1) (tl l); /* takewhile fn l: take from the front of a list while predicate fn holds * * takewhile is_digit "123onetwothree" == "123" * takewhile :: (* -> bool) -> [*] -> [*] */ takewhile fn l = [], l == [] = hd l : takewhile fn (tl l), fn (hd l) = []; /* zip2 l1 l2: zip two lists together * * zip2 [1,2] ['a', 'b', 'c'] == [[1,'a'],[2,'b']] * zip2 :: [*] -> [**] -> [[*,**]] */ zip2 l1 l2 = [], l1 == [] || l2 == [] = [hd l1, hd l2] : zip2 (tl l1) (tl l2); /* zip3 l1 l2 l3: zip three lists together * * zip3 [1,2] ['a', 'b', 'c'] [true] == [[1,'a',true]] * zip3 :: [*] -> [**] ->[***] -> [[*,**,***]] */ zip3 l1 l2 l3 = [], l1 == [] || l2 == [] || l3 == [] = [hd l1, hd l2, hd l3] : zip3 (tl l1) (tl l2) (tl l3); nip2-8.7.0/share/nip2/compat/7.38/_Object.def0000644000175000017500000002600513224651032015201 00000000000000/* Lots of little arg checks. Global for convenience. */ check_any = [(const true), _ "any"]; check_bool = [is_bool, _ "boolean"]; check_real = [is_real, _ "real"]; check_ureal = [is_ureal, _ "unsigned real"]; check_preal = [is_preal, _ "positive real"]; check_list = [is_list, _ "list"]; check_real_list = [is_real_list, _ "list of real"]; check_string = [is_string, _ "string"]; check_string_list = [is_string_list, _ "list of string"]; check_int = [is_int, _ "integer"]; check_uint = [is_uint, _ "unsigned integer"]; check_pint = [is_pint, _ "positive integer"]; check_matrix = [is_matrix, _ "rectangular array of real"]; check_matrix_display = [Matrix_display.is_display, _ "0|1|2|3"]; check_image = [is_image, _ "image"]; check_xy_list = [is_xy_list, _ "list of form [[1, 2], [3, 4], [5, 6], ...]"]; check_instance name = [is_instanceof name, name]; check_Image = check_instance "Image"; check_Matrix = [is_Matrix, _ "Matrix"]; check_colour_space = [is_colour_space, join_sep "|" Image_type.colour_spaces.names]; check_rectangular = [is_rectangular, _ "rectangular [[*]]"]; check_Guide = [is_Guide, _ "HGuide|VGuide"]; check_Colour = check_instance (_ "Colour"); check_Mark = check_instance (_ "Mark"); /* Check a set of args to a class. Two members to look at: _check_args and * _check_all. * * - each line in _check_args is [arg, "arg name", [test_fn, "arg type"]] * same number of lines as there are args * * stuff like "arg 2 must be real" * * - each line in _check_all is [test, "description"] * any number of lines * * stuff like "to must be greater than from" * * generate an error dialog with a helpful message on failure. * * Have as a separate function to try to keep the size of _Object down. */ check_args x = error message, badargs != [] || badalls != [] = x { argcheck = x._check_args; allcheck = x._check_all; // indent string indent = " "; // test for a condition in a check line fails test_fail x = ! x?0; // set of failed argcheck indexes badargs = map (extract 1) (filter test_fail (zip2 (map testarg argcheck) [0..])) { testarg x = x?2?0 x?0; } // set of failed allcheck indexes badalls = map (extract 1) (filter test_fail (zip2 (map hd allcheck) [0..])); // the error message message = _ "bad properties for " ++ "\"" ++ x.name ++ "\"\n" ++ argmsg ++ allmsg ++ "\n" ++ _ "where" ++ "\n" ++ arg_types ++ extra; // make the failed argcheck messages ... eg. ""value" should be // real, you passed " etc. argmsg = concat (map fmt badargs) { fmt n = indent ++ "\"" ++ argcheck?n?1 ++ "\"" ++ _ " should be of type " ++ argcheck?n?2?1 ++ ", " ++ _ "you passed" ++ ":\n" ++ indent ++ indent ++ print argcheck?n?0 ++ "\n"; } // make the failed allcheck messages ... eg "condition failed: // x < y" ... don't make a message if any typechecks have // failed, as we'll probably error horribly allmsg = [], badargs != [] = concat (map fmt badalls) ++ _ "you passed" ++ "\n" ++ concat (map fmt_arg argcheck) { fmt n = _ "condition failed" ++ ": " ++ allcheck?n?1 ++ "\n"; fmt_arg l = indent ++ l?1 ++ " = " ++ print l?0 ++ "\n"; } // make arg type notes arg_types = join_sep "\n" (map fmt argcheck) { fmt l = indent ++ l?1 ++ " is of type " ++ l?2?1; } // extra bit at the bottom, if we have any conditions extra = [], allcheck == [] = "\n" ++ _ "and" ++ "\n" ++ all_desc; // make a list of all the allcheck descriptions, with a few // spaces in front all_desc_list = map (join indent @ extract 1) allcheck; // join em up to make a set of condition notes all_desc = join_sep "\n" all_desc_list; } /* Operator overloading stuff. */ Operator_type = class { ARITHMETIC = 1; // eg. add RELATIONAL = 2; // eg. less COMPOUND = 3; // eg. max/mean/etc. COMPOUND_REWRAP = 4; // eg. transpose } Operator op_name fn type symmetric = class { } /* Form the converse of an Operator. */ oo_converse op = Operator (converse_name op.op_name) (converse op.fn) op.type op.symmetric { converse_name x = init x, last x == last "'" = x ++ "'"; } /* Given an operator name, look up the definition. */ oo_binary_lookup op_name = matches?0, matches != [] = error (_ "unknown binary operator" ++ ": " ++ print op_name) { operator_table = [ Operator "add" add Operator_type.ARITHMETIC true, Operator "subtract" subtract Operator_type.ARITHMETIC false, Operator "remainder" remainder Operator_type.ARITHMETIC false, Operator "power" power Operator_type.ARITHMETIC false, Operator "subscript" subscript Operator_type.ARITHMETIC false, Operator "left_shift" left_shift Operator_type.ARITHMETIC false, Operator "right_shift" right_shift Operator_type.ARITHMETIC false, Operator "divide" divide Operator_type.ARITHMETIC false, Operator "join" join Operator_type.ARITHMETIC false, Operator "multiply" multiply Operator_type.ARITHMETIC true, Operator "logical_and" logical_and Operator_type.ARITHMETIC true, Operator "logical_or" logical_or Operator_type.ARITHMETIC true, Operator "bitwise_and" bitwise_and Operator_type.ARITHMETIC true, Operator "bitwise_or" bitwise_or Operator_type.ARITHMETIC true, Operator "eor" eor Operator_type.ARITHMETIC true, Operator "comma" comma Operator_type.ARITHMETIC false, Operator "if_then_else" if_then_else Operator_type.ARITHMETIC false, Operator "equal" equal Operator_type.RELATIONAL true, Operator "not_equal" not_equal Operator_type.RELATIONAL true, Operator "less" less Operator_type.RELATIONAL false, Operator "less_equal" less_equal Operator_type.RELATIONAL false ]; matches = filter test_name operator_table; test_name x = x.op_name == op_name; } /* Given an operator name, look up a function that implements that * operator. */ oo_unary_lookup op_name = matches?0, matches != [] = error (_ "unknown unary operator" ++ ": " ++ print op_name) { operator_table = [ /* Operators. */ Operator "cast_signed_char" cast_signed_char Operator_type.ARITHMETIC false, Operator "cast_unsigned_char" cast_unsigned_char Operator_type.ARITHMETIC false, Operator "cast_signed_short" cast_signed_short Operator_type.ARITHMETIC false, Operator "cast_unsigned_short" cast_unsigned_short Operator_type.ARITHMETIC false, Operator "cast_signed_int" cast_signed_int Operator_type.ARITHMETIC false, Operator "cast_unsigned_int" cast_unsigned_int Operator_type.ARITHMETIC false, Operator "cast_float" cast_float Operator_type.ARITHMETIC false, Operator "cast_double" cast_double Operator_type.ARITHMETIC false, Operator "cast_complex" cast_complex Operator_type.ARITHMETIC false, Operator "cast_double_complex" cast_double_complex Operator_type.ARITHMETIC false, Operator "unary_minus" unary_minus Operator_type.ARITHMETIC false, Operator "negate" negate Operator_type.RELATIONAL false, Operator "complement" complement Operator_type.ARITHMETIC false, Operator "unary_plus" unary_plus Operator_type.ARITHMETIC false, /* Built in projections. */ Operator "re" re Operator_type.ARITHMETIC false, Operator "im" im Operator_type.ARITHMETIC false, Operator "hd" hd Operator_type.ARITHMETIC false, Operator "tl" tl Operator_type.ARITHMETIC false, /* Maths builtins. */ Operator "sin" sin Operator_type.ARITHMETIC false, Operator "cos" cos Operator_type.ARITHMETIC false, Operator "tan" tan Operator_type.ARITHMETIC false, Operator "asin" asin Operator_type.ARITHMETIC false, Operator "acos" acos Operator_type.ARITHMETIC false, Operator "atan" atan Operator_type.ARITHMETIC false, Operator "log" log Operator_type.ARITHMETIC false, Operator "log10" log10 Operator_type.ARITHMETIC false, Operator "exp" exp Operator_type.ARITHMETIC false, Operator "exp10" exp10 Operator_type.ARITHMETIC false, Operator "ceil" ceil Operator_type.ARITHMETIC false, Operator "floor" floor Operator_type.ARITHMETIC false ]; matches = filter test_name operator_table; test_name x = x.op_name == op_name; } /* Find the matching methods in a method table. */ oo_method_lookup table = map (extract 0) (filter (extract 1) table); /* A binary op: a is a class, b may be a class ... eg. "add" a b two obvious ways to find a method: - a.oo_binary_search "add" (+) b - b.oo_binary_search "add'" (converse (+)) a, is_class b if these fail but op is a symmetric operator (eg. a + b == b + a), we can also try reversing the args - a.oo_binary_search "add'" (converse (+)) b - b.oo_binary_search "add" (+) a, is_class b if those fail as well, but this is ==, do pointer equals as a fallback */ oo_binary_function op a b = matches1?0, matches1 != [] = matches2?0, is_class b && matches2 != [] = matches3?0, op.symmetric && matches3 != [] = matches4?0, op.symmetric && is_class b && matches4 != [] = pointer_equal a b, op.op_name == "equal" || op.op_name == "equal'" = not_pointer_equal a b, op.op_name == "not_equal" || op.op_name == "not_equal'" = error (_ "No method found for binary operator." ++ "\n" ++ _ "left" ++ " = " ++ print a ++ "\n" ++ _ "operator" ++ " = " ++ op.op_name ++ "\n" ++ _ "right" ++ " = " ++ print b) { matches1 = oo_method_lookup (a.oo_binary_table op b); matches2 = oo_method_lookup (b.oo_binary_table (oo_converse op) a); matches3 = oo_method_lookup (a.oo_binary_table (oo_converse op) b); matches4 = oo_method_lookup (b.oo_binary_table op a); } /* A binary op: a is not a class, b is a class ... eg. "subtract" a b only one way to find a method: - b.oo_binary_search "subtract'" (converse (-)) a if this fails but op is a symmetric operator (eg. a + b == b + a), we can try reversing the args - b.oo_binary_search "add" (+) a, is_class b if that fails as well, but this is ==, do pointer equals as a fallback */ oo_binary'_function op a b = matches1?0, matches1 != [] = matches2?0, op.symmetric && matches2 != [] = pointer_equal a b, op.op_name == "equal" || op.op_name == "equal'" = not_pointer_equal a b, op.op_name == "not_equal" || op.op_name == "not_equal'" = error (_ "No method found for binary operator." ++ "\n" ++ _ "left" ++ " = " ++ print a ++ "\n" ++ _ "operator" ++ " = " ++ op.op_name ++ "\n" ++ _ "right" ++ " = " ++ print b) { matches1 = oo_method_lookup (b.oo_binary_table (oo_converse op) a); matches2 = oo_method_lookup (b.oo_binary_table op a); } oo_unary_function op x = matches?0, matches != [] = error (_ "No method found for unary operator." ++ "\n" ++ _ "operator" ++ " = " ++ op.op_name ++ "\n" ++ _ "argument" ++ " = " ++ print x) { matches = oo_method_lookup (x.oo_unary_table op); } /* Base class for nip's built-in classes ... base check function, base * operator overload functions. */ _Object = class { check = check_args this; // these should always be defined _check_args = []; _check_all = []; /* Operator overloading stuff. */ oo_binary op x = oo_binary_function (oo_binary_lookup op) this x; oo_binary' op x = oo_binary'_function (oo_binary_lookup op) x this; oo_unary op = oo_unary_function (oo_unary_lookup op) this; oo_binary_table op x = []; oo_unary_table op = []; } nip2-8.7.0/share/nip2/compat/7.38/_predicate.def0000644000175000017500000003252613224651032015740 00000000000000 /* is_colour_space str: is a string one of nip's colour space names */ is_colour_space str = Image_type.colour_spaces.present 0 str; /* is_colour_type n: is a number one of VIPS's colour spaces */ is_colour_type n = Image_type.colour_spaces.present 1 n; /* is_number: is a real or a complex number. */ is_number a = is_real a || is_complex a; /* is_int: is an integer */ is_int a = is_real a && a == (int) a; /* is_uint: is an unsigned integer */ is_uint a = is_int a && a >= 0; /* is_pint: is a positive integer */ is_pint a = is_int a && a > 0; /* is_preal: is a positive real */ is_preal a = is_real a && a > 0; /* is_ureal: is an unsigned real */ is_ureal a = is_real a && a >= 0; /* is_letter c: true if character c is an ASCII letter * * is_letter :: char -> bool */ is_letter c = ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z'); /* is_digit c: true if character c is an ASCII digit * * is_digit :: char->bool */ is_digit x = '0' <= x && x <= '9'; /* A whitespace character. * * is_space :: char->bool */ is_space = member " \n\t"; /* List str starts with section prefix. * * is_prefix "hell" "hello world!" == true * is_prefix :: [*] -> [*] -> bool */ is_prefix prefix str = take (len prefix) str == prefix; /* List str ends with section suffix. * * is_suffix "ld!" "hello world!" == true * is_suffix :: [*] -> [*] -> bool */ is_suffix suffix str = take (len suffix) (reverse str) == reverse suffix; /* List contains seqence. * * is_substr "llo" "hello world!" == true * is_substr :: [*] -> [*] -> bool */ is_substr seq str = any (map (is_prefix seq) (iterate tl str)); /* is_listof p s: true if finite list with p true for every element. */ is_listof p l = is_list l && all (map p l); /* is_string s: true if finite list of char. */ is_string s = is_listof is_char s; /* is_real_list l: is l a list of real numbers ... test each element, * so no infinite lists pls. */ is_real_list l = is_listof is_real l; /* is_string_list l: is l a finite list of finite strings. */ is_string_list l = is_listof is_string l; /* Test list length ... quicker than len x == n for large lists. */ is_list_len n x = true, x == [] && n == 0 = false, x == [] || n == 0 = is_list_len (n - 1) (tl x); is_list_len_more n x = true, x != [] && n == 0 = false, x == [] || n == 0 = is_list_len_more (n - 1) (tl x); is_list_len_more_equal n x = true, n == 0 = false, x == [] = is_list_len_more_equal (n - 1) (tl x); /* is_rectangular l: is l a rectangular data structure */ is_rectangular l = true, !is_list l = true, all (map is_obj l) = true, all (map is_list l) && all (map (not @ is_obj) l) && all (map is_rectangular l) && is_list_len_more 0 l && all (map (is_list_len (len (hd l))) (tl l)) = false { // treat strings as a base type, not [char] is_obj x = !is_list x || is_string x; } /* is_matrix l: is l a list of lists of real numbers, all the same length * * [[]] is the empty matrix, [] is the empty list ... disallow [] */ is_matrix l = l != [] && is_listof is_real_list l && is_rectangular l; /* is_square_matrix l: is l a matrix with width == height */ is_square_matrix l = true, l == [[]] = is_matrix l && is_list_len (len (hd l)) l; /* is_oddmatrix l: is l a matrix with odd-length sides */ is_oddmatrix l = true, l == [[]] = is_matrix l && len l % 2 == 1 && len l?0 % 2 == 1; /* is_odd_square_matrix l: is l a square_matrix with odd-length sides */ is_odd_square_matrix l = is_square_matrix l && len l % 2 == 1; /* Is an item in a column of a table? */ is_incolumn n table x = member (map (extract n) table) x; /* Is HGuide or VGuide. */ is_HGuide x = is_instanceof "HGuide" x; is_VGuide x = is_instanceof "VGuide" x; is_Guide x = is_HGuide x || is_VGuide x; is_Mark x = is_instanceof "Mark" x; is_Group x = is_instanceof "Group" x; is_NULL x = is_instanceof "NULL" x; is_List x = is_instanceof "List" x; is_Image x = is_instanceof "Image" x; is_Plot x = is_instanceof "Plot" x; is_Region x = is_instanceof "Region" x; is_Real x = is_instanceof "Real" x; is_Matrix x = is_instanceof "Matrix_base" x; is_Vector x = is_instanceof "Vector" x; is_Colour x = is_instanceof "Colour" x; is_Arrow x = is_instanceof "Arrow" x; is_Bool x = is_instanceof "Bool" x; is_Scale x = is_instanceof "Scale" x; is_Rect x = is_instanceof "Rect" x; is_Number x = is_instanceof "Number" x; is_Expression x = is_instanceof "Expression" x; is_String x = is_instanceof "String" x; /* A list of the form [[1,2],[3,4],[5,6]...] */ is_xy_list l = is_list l && all (map xy l) { xy l = is_real_list l && is_list_len 2 l; } // does a nested list structure contain a Group object? contains_Group l = true, is_list l && any (map is_Group l) = any (map contains_Group l), is_list l = false; /* Does an object have a sensible VIPS type? */ has_type x = is_image x || is_Image x || is_Arrow x || is_Colour x; /* Try to get a VIPS image type from an object. */ get_type x = get_type_im x, is_image x = get_type_im x.value, is_Image x = get_type_im x.image.value, is_Arrow x = Image_type.colour_spaces.lookup 0 1 x.colour_space, is_Colour x // slightly odd ... but our display is always 0-255, so it makes sense for // a plain number to be in the same range = Image_type.sRGB, is_real x = oo_unary_function get_type_op x, is_class x = error (_ "bad arguments to " ++ "get_type") { get_type_op = Operator "get_type" get_type Operator_type.COMPOUND false; // get the type from a VIPS image ... but only if it makes sense with // the rest of the image // we often have Type set wrong, hence the ugly guessing :-( // can have alpha, hence we let bands be one more than you might think get_type_im im = Image_type.LABQ, coding == Image_coding.LABPACK = Image_type.GREY16, type == Image_type.GREY16 && is_bands 1 = Image_type.HISTOGRAM, type == Image_type.HISTOGRAM && (width == 1 || height == 1) = Image_type.B_W, is_bands 1 = Image_type.CMYK, type == Image_type.CMYK && is_bands 4 = type, is_colorimetric && is_bands 3 = Image_type.sRGB, !is_colorimetric && is_bands 3 = Image_type.MULTIBAND, !is_colorimetric && !is_bands 3 = type { type = get_header "Type" im; coding = get_header "Coding" im; bands = get_header "Bands" im; width = get_header "Xsize" im; height = get_header "Ysize" im; // 3-band colorimetric types we allow ... the things which the // Colour/Convert To menu can make, excluding mono. ok_types = [ Image_type.sRGB, Image_type.RGB16, Image_type.LAB, Image_type.LABQ, Image_type.LABS, Image_type.LCH, Image_type.XYZ, Image_type.YXY, Image_type.UCS ]; is_colorimetric = member ok_types type; // is bands n, with an optional alpha (ie. can be n + 1 too) is_bands n = bands == n || bands == n + 1; } } has_format x = has_member "format" x || is_Arrow x || is_image x; get_format x = x.format, has_member "format" x = x.image.format, is_Arrow x = get_header "BandFmt" x, is_image x = oo_unary_function get_format_op x, is_class x = error (_ "bad arguments to " ++ "get_format") { get_format_op = Operator "get_format" get_format Operator_type.COMPOUND false; } has_bits x = has_member "bits" x || is_Arrow x || is_image x; get_bits x = x.bits, has_member "bits" x = x.image.bits, is_Arrow x = get_header "Bbits" x, is_image x = oo_unary_function get_bits_op x, is_class x = error (_ "bad arguments to " ++ "get_bits") { get_bits_op = Operator "get_bits" get_format Operator_type.COMPOUND false; } has_bands x = is_image x || has_member "bands" x || is_Arrow x; get_bands x = x.bands, has_member "bands" x = x.image.bands, is_Arrow x = get_header "Bands" x, is_image x = 1, is_real x = len x, is_real_list x = oo_unary_function get_bands_op x, is_class x = error (_ "bad arguments to " ++ "get_bands") { get_bands_op = Operator "get_bands" get_bands Operator_type.COMPOUND false; } has_coding x = has_member "coding" x || is_Arrow x || is_image x; get_coding x = x.coding, has_member "coding" x = x.image.coding, is_Arrow x = get_header "Coding" x, is_image x = Image_coding.NOCODING, is_real x = oo_unary_function get_coding_op x, is_class x = error (_ "bad arguments to " ++ "get_coding") { get_coding_op = Operator "get_coding" get_coding Operator_type.COMPOUND false; } has_xres x = has_member "xres" x || is_Arrow x || is_image x; get_xres x = x.xres, has_member "xres" x = x.image.xres, is_Arrow x = get_header "Xres" x, is_image x = oo_unary_function get_xres_op x, is_class x = error (_ "bad arguments to " ++ "get_xres") { get_xres_op = Operator "get_xres" get_xres Operator_type.COMPOUND false; } has_yres x = has_member "yres" x || is_Arrow x || is_image x; get_yres x = x.yres, has_member "yres" x = x.image.yres, is_Arrow x = get_header "Yres" x, is_image x = oo_unary_function get_yres_op x, is_class x = error (_ "bad arguments to " ++ "get_yres") { get_yres_op = Operator "get_yres" get_yres Operator_type.COMPOUND false; } has_xoffset x = has_member "xoffset" x || is_Arrow x || is_image x; get_xoffset x = x.xoffset, has_member "xoffset" x = x.image.xoffset, is_Arrow x = get_header "Xoffset" x, is_image x = oo_unary_function get_xoffset_op x, is_class x = error (_ "bad arguments to " ++ "get_xoffset") { get_xoffset_op = Operator "get_xoffset" get_xoffset Operator_type.COMPOUND false; } has_yoffset x = has_member "yoffset" x || is_Arrow x || is_image x; get_yoffset x = x.yoffset, has_member "yoffset" x = x.image.yoffset, is_Arrow x = get_header "Yoffset" x, is_image x = oo_unary_function get_yoffset_op x, is_class x = error (_ "bad arguments to " ++ "get_yoffset") { get_yoffset_op = Operator "get_yoffset" get_yoffset Operator_type.COMPOUND false; } has_value = has_member "value"; get_value x = x.value; has_image x = is_image x || is_Image x || is_Arrow x; get_image x = x.value, is_Image x = x.image.value, is_Arrow x = x, is_image x = oo_unary_function get_image_op x, is_class x = error (_ "bad arguments to " ++ "get_image") { get_image_op = Operator "get_image" get_image Operator_type.COMPOUND false; } has_number x = is_number x || is_Real x; get_number x = x.value, is_Real x = x, is_number x = oo_unary_function get_number_op x, is_class x = error (_ "bad arguments to " ++ "get_number") { get_number_op = Operator "get_number" get_number Operator_type.COMPOUND false; } has_real x = is_real x || is_Real x; get_real x = x.value, is_Real x = x, is_real x = oo_unary_function get_real_op x, is_class x = error (_ "bad arguments to " ++ "get_real") { get_real_op = Operator "get_real" get_real Operator_type.COMPOUND false; } has_width x = has_member "width" x || is_image x; get_width x = x.width, has_member "width" x = get_header "Xsize" x, is_image x = oo_unary_function get_width_op x, is_class x = error (_ "bad arguments to " ++ "get_width") { get_width_op = Operator "get_width" get_width Operator_type.COMPOUND false; } has_height x = has_member "height" x || is_image x; get_height x = x.height, has_member "height" x = get_header "Ysize" x, is_image x = oo_unary_function get_height_op x, is_class x = error (_ "bad arguments to " ++ "get_height") { get_height_op = Operator "get_height" get_height Operator_type.COMPOUND false; } has_left x = has_member "left" x; get_left x = x.left, has_member "left" x = oo_unary_function get_left_op x, is_class x = error (_ "bad arguments to " ++ "get_left") { get_left_op = Operator "get_left" get_left Operator_type.COMPOUND false; } has_top x = has_member "top" x; get_top x = x.top, has_member "top" x = oo_unary_function get_top_op x, is_class x = error (_ "bad arguments to " ++ "get_top") { get_top_op = Operator "get_top" get_top Operator_type.COMPOUND false; } // like has/get member, but first in a lst of objects has_member_list has objects = filter has objects != []; // need one with the args swapped get_member = converse dot; // get a member from the first of a list of objects to have it get_member_list has get objects = hd members, members != [] = error "unable to get property" { members = map get (filter has objects); } is_hist x = has_image x && (h == 1 || w == 1 || t == Image_type.HISTOGRAM) { im = get_image x; w = get_width im; h = get_height im; t = get_type im; } get_header field x = oo_unary_function get_header_op x, is_class x = get_header_image x, is_image x = error (_ "bad arguments to " ++ "get_header") { get_header_op = Operator "get_header" (get_header field) Operator_type.COMPOUND false; get_header_image im = im_header_int field im, type == itype = im_header_double field im, type == dtype = im_header_string field im, type == stype1 || type == stype2 = error (_ "image has no field " ++ field), type == 0 = error (_ "unknown type for field " ++ field) { type = im_header_get_typeof field im; itype = name2gtype "gint"; dtype = name2gtype "gdouble"; stype1 = name2gtype "VipsRefString"; stype2 = name2gtype "gchararray"; } } get_header_type field x = oo_unary_function get_header_type_op x, is_class x = im_header_get_typeof field x, is_image x = error (_ "bad arguments to " ++ "get_header_type") { get_header_type_op = Operator "get_header_type" (get_header_type field) Operator_type.COMPOUND false; } set_header field value x = oo_unary_function set_header_op x, is_class x = im_copy_set_meta x field value, is_image x = error (_ "bad arguments to " ++ "set_header") { set_header_op = Operator "set_header" (set_header field value) Operator_type.COMPOUND false; } nip2-8.7.0/share/nip2/compat/7.38/Widgets.def0000644000175000017500000000235313224651032015242 00000000000000Widget_slider_item = class Menuaction "_Scale" "make a new scale widget" { icon = "nip-slider-16.png"; action = Scale "untitled scale" 0 255 128; } Widget_toggle_item = class Menuaction "_Toggle" "make a new toggle widget" { action = Toggle "untitled toggle" false; } Widget_option_item = class Menuaction "_Option" "make a new option widget" { action = Option "untitled option" ["option0", "option1"] 0; } Widget_string_item = class Menuaction "St_ring" "make a new string widget" { action = String "Enter a string" "sample text"; } Widget_number_item = class Menuaction "_Number" "make a new number widget" { action = Number "Enter a number" 42; } Widget_expression_item = class Menuaction "_Expression" "make a new expression widget" { action = Expression "Enter an expression" 42; } Widget_pathname_item = class Menuaction "_File Chooser" "make a new file chooser widget" { action = Pathname "Pick a file" "$VIPSHOME/share/$PACKAGE/data/print_test_image.v"; } Widget_font_item = class Menuaction "F_ont Chooser" "make a new font chooser widget" { action = Fontname "Pick a font" Workspaces.Preferences.PAINTBOX_FONT; } Widget_clock_item = class Menuaction "_Clock" "make a new clock widget" { action = Clock 1 1; } nip2-8.7.0/share/nip2/compat/7.38/Colour.def0000644000175000017500000003762213224651032015106 00000000000000 Colour_new_item = class Menupullright (_ "_New") (_ "make a patch of colour") { Widget_colour_item = class Menuaction (_ "_Colour") (_ "make a patch of colour") { action = Colour_picker "Lab" [50,0,0]; } LAB_colour = class Menuaction (_ "CIE Lab _Picker") (_ "pick colour in CIE Lab space") { action = widget "Lab" [50, 0, 0]; // ab_slice size size = 512; // range of values ... +/- 128 for ab range = 256; // map xy in slice image to ab and back xy2ab x = x / (size / range) - 128; ab2xy a = (a + 128) * (size / range); widget space default_value = class Colour space _result { _vislevel = 3; [_L, _a, _b] = default_value; L = Scale "Lightness" 0 100 _L; ab_slice = Image (lab_slice size L.value); point = Mark ab_slice (ab2xy _a) (ab2xy _b); _result = [L.value, xy2ab point.left, xy2ab point.top]; Colour_edit colour_space value = widget colour_space value; } } CCT_colour = class Menuaction (_ "Colour from CCT") (_ "pick colour by CCT") { action = widget 6500; widget x = class _result { _vislevel = 3; T = Scale "CCT" 1800 25000 x; _result = colour_from_temp (to_real T); Colour_edit space value = widget (temp_from_colour (Colour space value)); } } } Colour_to_colour_item = class Menuaction (_ "Con_vert to Colour") (_ "convert anything to a colour") { action x = to_colour x; } #separator Colour_convert_item = class Menupullright (_ "_Colourspace") (_ "convert to various colour spaces") { spaces = Image_type.image_colour_spaces; conv dest x = class _result { _vislevel = 3; to = Option_enum (_ "Convert to") spaces (spaces.get_name dest); _result = map_unary (colour_transform_to to.value_thing) x; } Mono_item = class Menuaction (_ "_Monochrome") (_ "convert to mono colourspace") { action x = conv Image_type.B_W x; } sRGB_item = class Menuaction (_ "_sRGB") (_ "convert to sRGB colourspace") { action x = conv Image_type.sRGB x; } GREY16_item = class Menuaction (_ "_GREY16") (_ "convert to GREY16 colourspace") { action x = conv Image_type.GREY16 x; } RGB16_item = class Menuaction (_ "_RGB16") (_ "convert to RGB16 colourspace") { action x = conv Image_type.RGB16 x; } Lab_item = class Menuaction (_ "_Lab") (_ "convert to Lab colourspace (float Lab)") { action x = conv Image_type.LAB x; } LabQ_item = class Menuaction (_ "Lab_Q") (_ "convert to LabQ colourspace (32-bit Lab)") { action x = conv Image_type.LABQ x; } LabS_item = class Menuaction (_ "Lab_S") (_ "convert to LabS colourspace (48-bit Lab)") { action x = conv Image_type.LABS x; } LCh_item = class Menuaction (_ "L_Ch") (_ "convert to LCh colourspace") { action x = conv Image_type.LCH x; } XYZ_item = class Menuaction (_ "_XYZ") (_ "convert to XYZ colourspace") { action x = conv Image_type.XYZ x; } Yxy_item = class Menuaction (_ "_Yxy") (_ "convert to Yxy colourspace") { action x = conv Image_type.YXY x; } UCS_item = class Menuaction (_ "_UCS") (_ "convert to UCS colourspace") { action x = conv Image_type.UCS x; } } /* mark objects as being in various colourspaces */ Colour_tag_item = class Menupullright (_ "_Tag As") (_ "tag object as being in various colour spaces") { spaces = Image_type.image_colour_spaces; tag dest x = class _result { _vislevel = 3; to = Option_enum (_ "Tag as") spaces (spaces.get_name dest); _result = map_unary (image_set_type to.value_thing) x; } Mono_item = class Menuaction (_ "_Monochrome") (_ "tag as being in mono colourspace") { action x = tag Image_type.B_W x; } sRGB_item = class Menuaction (_ "_sRGB") (_ "tag as being in sRGB colourspace") { action x = tag Image_type.sRGB x; } RGB16_item = class Menuaction (_ "_RGB16") (_ "tag as being in RGB16 colourspace") { action x = tag Image_type.RGB16 x; } GREY16_item = class Menuaction (_ "_GREY16") (_ "tag as being in GREY16 colourspace") { action x = tag Image_type.GREY16 x; } Lab_item = class Menuaction (_ "_Lab") (_ "tag as being in Lab colourspace (float Lab)") { action x = tag Image_type.LAB x; } LabQ_item = class Menuaction (_ "Lab_Q") (_ "tag as being in LabQ colourspace (32-bit Lab)") { action x = tag Image_type.LABQ x; } LabS_item = class Menuaction (_ "Lab_S") (_ "tag as being in LabS colourspace (48-bit Lab)") { action x = tag Image_type.LABS x; } LCh_item = class Menuaction (_ "L_Ch") (_ "tag as being in LCh colourspace") { action x = tag Image_type.LCH x; } XYZ_item = class Menuaction (_ "_XYZ") (_ "tag as being in XYZ colourspace") { action x = tag Image_type.XYZ x; } Yxy_item = class Menuaction (_ "_Yxy") (_ "tag as being in Yxy colourspace") { action x = tag Image_type.YXY x; } UCS_item = class Menuaction (_ "_UCS") (_ "tag as being in UCS colourspace") { action x = tag Image_type.UCS x; } } Colour_temperature_item = class Menupullright (_ "Te_mperature") (_ "colour temperature conversions") { Whitepoint_item = class Menuaction (_ "_Move Whitepoint") (_ "change whitepoint") { action x = class _result { _vislevel = 3; old_white = Option_enum (_ "Old whitepoint") Whitepoints "D65"; new_white = Option_enum (_ "New whitepoint") Whitepoints "D50"; _result = map_unary process x { process im = im''' { im' = colour_transform_to Image_type.XYZ im; im'' = im' * (new_white.value_thing / old_white.value_thing); im''' = colour_transform_to (get_type im) im''; } } } } D65_to_D50_item = class Menupullright (_ "D_65 to D50") (_ "complex conversion") { XYZ_minimal_item = class Menuaction (_ "_Minimal") (_ "D65 to D50 using the minimal 3x3 matrix in XYZ") { action x = map_unary process x { process im = im''' { im' = colour_transform_to Image_type.XYZ im; im'' = recomb D652D50_direct im'; im''' = colour_transform_to (get_type im) im''; } } } Bradford_item = class Menuaction (_ "_Bradford") (_ "D65 to D50 in Bradford cone space") { action x = map_unary process x { process im = im''' { im' = colour_transform_to Image_type.XYZ im; im'' = im_D652D50 im'; im''' = colour_transform_to (get_type im) im''; } } } } D50_to_D65_item = class Menupullright (_ "D_50 to D65") (_ "complex conversion") { XYZ_minimal_item = class Menuaction (_ "_Minimal") (_ "D50 to D65 using the minimal 3x3 matrix in XYZ") { action x = map_unary process x { process im = im''' { im' = colour_transform_to Image_type.XYZ im; im'' = recomb D502D65_direct im'; im''' = colour_transform_to (get_type im) im''; } } } Bradford_item = class Menuaction (_ "_Bradford") (_ "D60 to D65 in Bradford cone space") { action x = map_unary process x { process im = im''' { im' = colour_transform_to Image_type.XYZ im; im'' = im_D502D65 im'; im''' = colour_transform_to (get_type im) im''; } } } } Lab_to_D50XYZ_item = class Menuaction (_ "_Lab to D50 XYZ") (_ "Lab to XYZ with a D50 whitepoint") { action x = map_unary (colour_unary im_D50Lab2XYZ) x; } D50XYZ_to_Lab_item = class Menuaction (_ "D50 _XYZ to Lab") (_ "XYZ to Lab with a D50 whitepoint") { action x = map_unary (colour_unary im_D50XYZ2Lab) x; } sep1 = Menuseparator; CCT_item = class Menuaction (_ "Calculate temperature") (_ "estimate CCT using the McCamy approximation") { action z = map_unary temp_from_colour z; } Colour_item = Colour_new_item.CCT_colour; } Colour_icc_item = class Menupullright (_ "_ICC") (_ "transform with ICC profiles") { print_profile = "$VIPSHOME/share/$PACKAGE/data/cmyk.icm"; monitor_profile = "$VIPSHOME/share/$PACKAGE/data/sRGB.icm"; guess_profile image = monitor_profile, has_bands image && get_bands image == 3 = print_profile; render_intents = Option_enum (_ "Render intent") Render_intent.names (_ "Absolute"); Export_item = class Menuaction (_ "_Export") (_ "export from PCS to device space") { action x = class _result { _vislevel = 3; profile = Pathname (_ "Output profile") print_profile; intent = render_intents; depth = Option (_ "Output depth") [_ "8 bit", _ "16 bit"] 0; _result = map_unary process x { process image = icc_export [8, 16]?depth profile.value intent.value_thing lab { lab = colour_transform_to Image_type.LABQ image; } } } } Import_item = class Menuaction (_ "_Import") (_ "import from device space to PCS") { action x = class _result { _vislevel = 3; embedded = Toggle (_ "Use embedded profile if possible") false; profile = Pathname (_ "Default input profile") (guess_profile x); intent = render_intents; _result = map_unary process x { process image = icc_import_embedded intent.value_thing image, get_header_type "icc-profile-data" image != 0 && embedded = icc_import profile.value intent.value_thing image; } } } Transform_item = class Menuaction (_ "_Transform") (_ "transform between two device spaces") { action x = class _result { _vislevel = 3; in_profile = Pathname (_ "Input profile") (guess_profile x); out_profile = Pathname (_ "Output profile") print_profile; intent = render_intents; _result = map_unary process x { process image = icc_transform in_profile.value out_profile.value intent.value_thing image; } } } AC2RC_item = class Menuaction (_ "_Absolute to Relative") (_ "absolute to relative colorimetry using device profile") { action x = class _result { _vislevel = 3; profile = Pathname (_ "Pick a profile") (guess_profile x); _result = map_unary process x { process image = icc_ac2rc profile.value lab { lab = colour_transform_to Image_type.LAB image; } } } } } Colour_rad_item = class Menupullright (_ "_Radiance") (_ "convert to and from Radiance packed format") { Unpack_item = class Menuaction (_ "Unpack") (_ "unpack Radiance format to float") { action x = map_unary rad2float x; } Pack_item = class Menuaction (_ "Pack") (_ "pack 3-band float to Radiance format") { action x = map_unary float2rad x; } } #separator Colour_dE_item = class Menupullright (_ "_Difference") (_ "calculate colour difference") { /* Apply a converter to an object ... convert image or colour (since * we can guess the colour space we're converting from), don't convert * matrix or vector (since we can't tell ... assume it's in the right * space already). */ apply_cvt cvt x = cvt x, is_Image x || is_Colour x || is_image x = x; diff cvt in1 in2 = abs_vec (apply_cvt cvt in1 - apply_cvt cvt in2); /* Converter to LAB. */ lab_cvt = colour_transform_to Image_type.LAB; /* Converter to UCS ... plain UCS is Ch form, so we go LAB again after * to make sure we get a rectangular coord system. */ ucs_cvt = colour_transform Image_type.LCH Image_type.LAB @ colour_transform_to Image_type.UCS; CIEdE76_item = class Menuaction (_ "CIE dE _76") (_ "calculate CIE dE 1976 for two objects") { action a b = map_binary (diff lab_cvt) a b; } CIEdE00_item = class Menuaction (_ "CIE dE _00") (_ "calculate CIE dE 2000 for two objects") { action a b = map_binary (colour_binary (_ "im_dE00_fromLab") im_dE00_fromLab) a b; } UCS_item = class Menuaction (_ "_CMC(l:l)") (_ "calculate CMC(l:l) for two objects") { action a b = map_binary (diff ucs_cvt) a b; } } Colour_adjust_item = class Menupullright (_ "_Adjust") (_ "alter colours in various ways") { Recombination_item = class Menuaction (_ "_Recombination") (_ "recombine colour with an editable matrix") { action x = class _result { _vislevel = 3; matrix = Matrix_rec (identity_matrix (bands x)) { // try to guess a sensible value for the size of the // matrix bands x = x.bands, is_Image x || is_Colour x = x.width, is_Matrix x = bands x.value?0, is_Group x = x.bands, has_member "bands" x = 3; } _result = map_unary (recomb matrix) x; } } Cast_item = class Menuaction (_ "_Cast") (_ "displace neutral axis in CIE Lab") { action x = class _result { _vislevel = 3; gr = Scale "Green-red" (-20) 20 0; by = Scale "Blue-yellow" (-20) 20 0; _result = map_unary adjust_cast x { adjust_cast in = colour_transform_to (get_type in) in'' { in' = colour_transform_to Image_type.LAB in; in'' = in' + Vector [0, gr.value, by.value]; } } } } HSB_item = class Menuaction (_ "_HSB") (_ "adjust hue-saturation-brightness in LCh") { action x = class _result { _vislevel = 3; h = Scale "Hue" 0 360 0; s = Scale "Saturation" 0.01 5 1; b = Scale "Brightness" 0.01 5 1; _result = map_unary adjust_hsb x { adjust_hsb in = colour_transform_to (get_type in) in'' { in' = colour_transform_to Image_type.LCH in; in'' = in' * Vector [b.value, s.value, 1] + Vector [0, 0, h.value]; } } } } } Colour_similar_item = class Menuaction (_ "_Similar Colour") (_ "find pixels with a similar colour") { action x = class _result { _vislevel = 3; target_colour = Colour_picker "Lab" [50, 0, 0]; t = Scale "dE threshold" 0 100 10; _result = map_unary match x { match in = abs_vec (in' - target) < t { target = colour_transform_to Image_type.LAB target_colour; in' = colour_transform_to Image_type.LAB in; } } } } #separator Colour_chart_to_matrix_item = class Menuaction (_ "_Measure Colour Chart") (_ "measure average pixel values for a colour chart image") { action x = class _result { _vislevel = 3; pacross = Expression (_ "Patches across chart") 6; pdown = Expression (_ "Patches down chart") 4; measure = Scale (_ "Measure area (%)") 1 100 50; // get a representative image from an arg get_image x = get_image x.value?0, is_Group x = x; _im = get_image x; sample = measure_draw (to_real pacross) (to_real pdown) (to_real measure) _im; _result = map_unary chart x { chart in = measure_sample (to_real pacross) (to_real pdown) (to_real measure) in; } } } Colour_matrix_to_chart_item = class Menuaction (_ "Make Synth_etic Colour Chart") (_ "make a colour chart image from a matrix of measurements") { action x = class _result { _vislevel = 3; pacross = Expression (_ "Patches across chart") 6; pdown = Expression (_ "Patches down chart") 4; pwidth = Expression (_ "Patch width in pixels") 50; pheight = Expression (_ "Patch height in pixels") 50; bwidth = Expression (_ "Border between patches") 0; _result = map_unary build_chart x { build_chart in = Image (imagearray_assemble (to_real bwidth) (to_real bwidth) patch_table) { // patch numbers for row starts rowstart = map (multiply (to_real pacross)) [0 .. to_real pdown - 1]; // assemble patches ... each one a pixel value patches = map (take (to_real pacross)) (map (converse drop in.value) rowstart); // make an n-band constant image from eg. [1,2,3] // we don't know the format .. use sRGB (well, why not?) patch v = image_new (to_real pwidth) (to_real pheight) (len v) Image_format.FLOAT Image_coding.NOCODING Image_type.sRGB (Vector v) 0 0; // make an image for each patch patch_table = map (map patch) patches; } } } } Colour_plot_ab_scatter_item = class Menuaction (_ "_Plot ab Scatter") (_ "plot an ab scatter histogram") { action x = class _result { _vislevel = 3; bins = Expression (_ "Number of bins on each axis") 8; _result = map_unary plot_scatter x { plot_scatter in = Image (bg * (((90 / mx) * hist) ++ blk)) { lab = colour_transform_to Image_type.LAB in.value; ab = (unsigned char) ((lab?1 ++ lab?2) + 128); hist = hist_find_nD bins.expr ab; mx = max hist; bg = lab_slice bins.expr 1; blk = 1 + im_black (to_real bins) (to_real bins) 2; } } } } nip2-8.7.0/share/nip2/compat/7.38/_joe_extra.def0000644000175000017500000003114713224651032015756 00000000000000//////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// Frame_item = class Menupullright "Picture _Frame" "working with images of frames" { //////////////////////////////////////////////////////////////////////////////////// Build_frame_item = class Menupullright "_Build Frame From" "builds a new frame from image a and places it around image b" { //////////////////////////////////////////////////////////////////////////////////// Frame_corner_item = class Menuaction "_Frame Corner" "copies and extends a frame corner, a, to produce a complete frame to fit round a given image, b" { prefs = Workspaces.Preferences; action a b = class _result { _check_args = [ [a, "a", check_Image], [b, "b", check_Image] ]; _check_all = [ [a.coding == b.coding && a.bands == b.bands, "a.coding == b.coding && a.bands == b.bands"] ]; _vislevel = 3; ppcm = Expression "Number of pixels per cm" 25; /* Given the value of ppcm, distance between the inner edge of the frame * and the outer edge of the image. +ve values mean the frame overlaps * the image. */ overlap = Expression "Size of frame overlap in cm" 0; variables = Frame_variables 0; _type = Image_type.colour_spaces.get_name b.type; //If applied the count colour be seen for -ve values of overlap mount_options = Mount_options _type ppcm.expr; _cs = variables.corner_section.value; _ms = variables.middle_section.value; _ov = ppcm.expr * overlap.expr; _sf = variables.scale_factor.expr; _bf = variables.blend_fraction.value; //Scale frame image if required. _a = a, _sf == 1; = a, _sf == 0; = Image (resize Interpolate_bilinear _sf _sf a.value); _im_w = b.width; _im_h = b.height + mount_options._los, mount_options.apply = b.height; _os = mount_options._los, mount_options.apply = 0; _cl = Vector mount_options.mount_colour.value, mount_options.apply = 0; //Produce scaled and resized frame. frame = corner_frame _a _im_w _im_h _ov _cs _ms _bf; //Resize image canvas and applied mount colour as required. _pos_im = frame_position_image b frame _os _cl; //Wrap frame round image. _result = if (frame == 0) then _pos_im else frame; } } //////////////////////////////////////////////////////////////////////////////////// Simple_frame_item = class Menuaction "_Simple Frame" "extends or shortens the central sections of a simple frame, a, to fit round a given image, b" { prefs = Workspaces.Preferences; action a b = class _result { _check_args = [ [a, "a", check_Image], [b, "b", check_Image] ]; _check_all = [ [a.coding == b.coding && a.bands == b.bands, "a.coding == b.coding && a.bands == b.bands"] ]; _vislevel = 3; ppcm = Expression "Number of pixels per cm" 25; /* Given the value of ppcm, distance between the inner edge of the frame * and the outer edge of the image. +ve values mean the frame overlaps * the image. */ overlap = Expression "Size of frame overlap in cm" 0; variables = Frame_variables 0; _type = Image_type.colour_spaces.get_name b.type; //If applied the count colour be seen for -ve values of overlap mount_options = Mount_options _type ppcm.expr; _cs = variables.corner_section.value; _ms = variables.middle_section.value; _ov = ppcm.expr * overlap.expr; _sf = variables.scale_factor.expr; _bf = variables.blend_fraction.value; //Scale frame image if required. _a = a, _sf == 1; = a, _sf == 0; = Image (resize Interpolate_bilinear _sf _sf a.value); _im_w = b.width; _im_h = b.height + mount_options._los, mount_options.apply = b.height; _os = mount_options._los, mount_options.apply = 0; _cl = Vector mount_options.mount_colour.value, mount_options.apply = 0; //Produce scaled and resized frame. frame = simple_frame _a _im_w _im_h _ov _cs _ms _bf variables.option; //Resize image canvas and applied mount colour as required. _pos_im = frame_position_image b frame _os _cl; //Wrap frame round image. _result = if (frame == 0) then _pos_im else frame; } } //////////////////////////////////////////////////////////////////////////////////// Complex_frame_item = class Menuaction "_Complex Frame" "extends or shortens the central sections of a frame a, preserving any central edge details, to fit image b" { prefs = Workspaces.Preferences; action a b = class _result { _check_args = [ [a, "a", check_Image], [b, "b", check_Image] ]; _check_all = [ [a.coding == b.coding && a.bands == b.bands, "a.coding == b.coding && a.bands == b.bands"] ]; _vislevel = 3; ppcm = Expression "Number of pixels per cm" 25; /* Given the value of ppcm, distance between the inner edge of the frame * and the outer edge of the image. +ve values mean the frame overlaps * the image. */ overlap = Expression "Size of frame overlap in cm" 0; variables = Frame_variables 1; _type = Image_type.colour_spaces.get_name b.type; //If applied the count colour be seen for -ve values of overlap mount_options = Mount_options _type ppcm.expr; _cs = variables.corner_section.value; _es = variables.edge_section.value; _ms = variables.middle_section.value; _ov = ppcm.expr * overlap.expr; _sf = variables.scale_factor.expr; _bf = variables.blend_fraction.value; _a = a, _sf == 1; = a, _sf == 0; = Image (resize Interpolate_bilinear _sf _sf a.value); _im_w = b.width; _im_h = b.height + mount_options._los, mount_options.apply = b.height; _os = mount_options._los, mount_options.apply = 0; _cl = Vector mount_options.colour.value, mount_options.apply = 0; //Produce scaled and resized frame. frame = complex_frame _a _im_w _im_h _ov _cs _es _ms _bf variables.option; //Resize image canvas and applied mount colour as required. _pos_im = frame_position_image b frame _os _cl; //Wrap frame round image. _result = if (frame == 0) then _pos_im else frame; } } } //////////////////////////////////////////////////////////////////////////////////// Straighten_frame_item = class Menuaction "_Straighten Frame" "uses four points to square up distorted images of frames" { action a = Perspective_item.action a; } }; //////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// Select_item = class Menupullright "_Select" "select user defined areas of an image" { prefs = Workspaces.Preferences; /* Option toggle used to define whether the user is replacing a * dark or a light area. */ _control = Option "Make" [ "Selection Brighter", "Selection Darker", "Selection Black", "Selection White", "Background Black", "Background White", "Mask" ] 4; control_selection mask im no = [ if mask then im * 1.2 else im * 1, if mask then im * 0.8 else im * 1, if mask then 0 else im, if mask then 255 else im, if mask then im else 0, if mask then im else 255, mask ]?no; Rectangle = class Menuaction "_Rectangle" "use an Arrow or Region x to define a rectangle" { action x = class _result { _vislevel = 3; control = _control; _result = control_selection mask im control { im = x.image; mask = Image m { rx = x.region_rect, is_Region x = x; b = image_new im.width im.height 1 0 0 1 0 0 0; w = image_new rx.nwidth rx.nheight 1 0 0 1 255 0 0; m = insert_noexpand rx.nleft rx.ntop w b; } } } } Elipse = class Menuaction "_Ellipse" "use a line/arrow x to define the center point radius and direction of an ellipse" { action x = class _result { _vislevel = 3; control = _control; width = Scale "Width" 0.01 1 0.5; _result = control_selection mask im control { mask = select_ellipse x width.value; im = x.image; } } } Tetragon = class Menuaction "_Tetragon" "selects the convex area defined by four points" { action a b c d = class _result { _vislevel = 3; control = _control; _result = control_selection mask im control { mask = select_tetragon a b c d; im = get_image a; } } } Polygon = class Menuaction "_Polygon" "selects a polygon from an ordered group of points" { action pt_list = class _result { _vislevel = 3; control = _control; _result = control_selection mask im control { mask = select_polygon pt_list; im = get_image ((pt_list.value)?0); } } } sep1 = Menuseparator; Threshold_item = class Menuaction "Thres_hold" "simple image threshold" { action x = class _result { _vislevel = 3; t = Scale "Threshold" 0 mx (mx / 2) { mx = Image_format.maxval x.format, is_Image x = 255; } _result = map_unary (more t.value) x; } } Threshold_percent_item = class Menuaction "Per_cent Threshold" "threshold at a percentage of pixels" { action x = class _result { _vislevel = 3; t = Scale "Percentage of pixels" 0 100 50; _result = map_unary (more (hist_thresh (t.value / 100) x)) x; } } sep2 = Menuseparator; Segment_item = class Menuaction "_Segment" "break image into disjoint regions" { action x = class _result { _vislevel = 3; segments = Expression "Number of disjoint regions" (map_unary (get_header "n-segments") _result); _result = map_unary segment x; } } }; //////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// Perspective_match_item = class Menuaction "_Perspective Match" "rotate, scale and skew one image to match another" { action x y = class _result { _vislevel = 3; // try to find an image ... for a group, get the first item find_image x = x, is_Image x = find_image x?0, is_list x = find_image x.value, is_class x && has_value x = error "unable to find image"; _a = find_image x; _b = find_image y; ap1 = Mark_relative _a 0.1 0.1; ap2 = Mark_relative _a 0.9 0.1; ap3 = Mark_relative _a 0.1 0.9; ap4 = Mark_relative _a 0.9 0.9; bp1 = Mark_relative _b 0.1 0.1; bp2 = Mark_relative _b 0.9 0.1; bp3 = Mark_relative _b 0.1 0.9; bp4 = Mark_relative _b 0.9 0.9; _result = map_binary process x y { f1 = _a.width / _b.width; f2 = _a.height / _b.height; rl = sort_pts_clockwise [ap1, ap2, ap3, ap4]; pl = sort_pts_clockwise [bp1, bp2, bp3, bp4]; to = [ rl?0.left, rl?0.top, rl?1.left, rl?1.top, rl?2.left, rl?2.top, rl?3.left, rl?3.top ]; from = [ pl?0.left * f1, pl?0.top * f2, pl?1.left * f1, pl?1.top * f2, pl?2.left * f1, pl?2.top * f2, pl?3.left * f1, pl?3.top * f2 ]; trans = perspective_transform to from; process a b = transform 1 0 trans b2 { b2 = resize Interpolate_bilinear f1 f2 b, (f1 >= 1 && f2 >= 1) || (f1 >= 1 && f2 >= 1) = resize Interpolate_bilinear f1 1 b1 {b1 = resize Interpolate_bilinear 1 f2 b;} } } } }; //////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// Perspective_item = class Menuaction "Pe_rspective Distort" "rotate, scale and skew an image with respect to defined points" { action x = class _result { _vislevel = 3; // try to find an image ... for a group, get the first item find_image x = x, is_Image x = find_image x?0, is_list x = find_image x.value, is_class x && has_value x = error "unable to find image"; _a = find_image x; dir = Option "Select distort direction" [ "Distort to points", "Distort to corners" ] 1; ap1 = Mark_relative _a 0.1 0.1; ap2 = Mark_relative _a 0.9 0.1; ap3 = Mark_relative _a 0.9 0.9; ap4 = Mark_relative _a 0.1 0.9; _result = map_unary process x { trans = [perspective_transform to from, perspective_transform from to]?(dir.value) { rl = sort_pts_clockwise [ap1, ap2, ap3, ap4]; to = [(rl?0).left, (rl?0).top, (rl?1).left, (rl?1).top, (rl?2).left, (rl?2).top, (rl?3).left, (rl?3).top]; from=[0, 0, (_a.width - 1), 0, (_a.width - 1), (_a.height - 1), 0, (_a.height - 1)]; } process a = transform 1 0 trans a; } } }; nip2-8.7.0/share/nip2/compat/7.38/_generate.def0000644000175000017500000000755513224651032015576 00000000000000 /* make an image of size x by y whose pixels are their coordinates. */ make_xy x y = im_make_xy (to_real x) (to_real y); /* make an image with the specified properties ... pixel is (eg.) * Vector [0, 0, 0], or 12. If coding == labq, we ignore bands, format and * type, generate a 3 band float image, and lab2labq it before handing it * back. */ image_new w h b fmt coding type pixel xoff yoff = embed 1 0 0 w h im'''' { b' = 3, coding == Image_coding.LABPACK = b; fmt' = Image_format.FLOAT, coding == Image_coding.LABPACK = fmt; type' = Image_type.LAB, coding == Image_coding.LABPACK = type; im = im_black 1 1 (to_real b') + pixel; im' = clip2fmt fmt' im; im'' = im_Lab2LabQ im', coding == Image_coding.LABPACK; = im'; im''' = image_set_type type' im''; im'''' = image_set_origin xoff yoff im'''; } mkim options x y b = Image (image_new x y b (opt $format) (opt $coding) (opt $type) (opt $pixel) (opt $xoffset) (opt $yoffset)) { opt = get_option options [ $format => Image_format.UCHAR, $coding => Image_coding.NOCODING, $type => Image_type.sRGB, $pixel => 0, $xoffset => 0, $yoffset => 0 ]; } /* generate a slice of LAB space size x size pixels for L* == l */ lab_slice size l = image_set_type Image_type.LAB im { L = image_new size size 1 Image_format.FLOAT Image_coding.NOCODING Image_type.B_W l 0 0; A1 = im_fgrey (to_real size) (to_real size); /* im_fgrey always makes 0-1, so these ranges can be wired in. */ A2 = A1 * 256 - 128; A4 = im_rot90 A2; im = image_set_origin (size / 2) (size / 2) (L ++ A2 ++ A4); } /* Look at Image, try to make a Colour (failing that, a Vector) which is white * for that image type. */ image_white im = colour_transform_to type white_lab, bands == 3 && coding == Image_coding.NOCODING && colour_spaces.present 1 type = white_lab, coding == Image_coding.LABPACK = Vector (replicate bands (max_value.lookup 1 0 format)) { bands = im.bands; type = im.type; format = im.format; coding = im.coding; colour_spaces = Image_type.colour_spaces; // white as LAB white_lab = Colour "Lab" [100, 0, 0]; // maximum value for this numeric type max_value = Table [ [255, Image_format.DPCOMPLEX], [255, Image_format.DOUBLE], [255, Image_format.COMPLEX], [255, Image_format.FLOAT], [2 ** 31 - 1, Image_format.INT], [2 ** 32 - 1, Image_format.UINT], [2 ** 15 - 1, Image_format.SHORT], [2 ** 16 - 1, Image_format.USHORT], [2 ** 7 - 1, Image_format.CHAR], [2 ** 8 - 1, Image_format.UCHAR] ]; } /* Make a seperable gaussian mask. */ matrix_gaussian_blur radius = im_gauss_imask_sep (radius / 3) 0.2; /* Make a seperable square mask. */ matrix_blur radius = Matrix_con (sum mask_sq_line) 0 [mask_sq_line] { mask_sq_line = replicate (2 * radius - 1) 1; } /* Make a colour from a temperature. */ colour_from_temp T = error (_ "T out of range"), T < 1667 || T > 25000 = Colour "Yxy" [50, x, y] { // Kim et all approximation // see eg. http://en.wikipedia.org/wiki/Planckian_locus#Approximation x = -0.2661239 * 10 ** 9 / T ** 3 - 0.2343580 * 10 ** 6 / T ** 2 + 0.8776956 * 10 ** 3 / T + 0.179910, T < 4000 = -3.0258469 * 10 ** 9 / T ** 3 + 2.1070379 * 10 ** 6 / T ** 2 + 0.2226347 * 10 ** 3 / T + 0.240390; y = -1.1063814 * x ** 3 - 1.34811020 * x ** 2 + 2.18555832 * x - 0.20219638, T < 2222 = -0.9549476 * x ** 3 - 1.37418593 * x ** 2 + 2.09137015 * x - 0.16748867, T < 4000 = 3.0817580 * x ** 3 - 5.87338670 * x ** 2 + 3.75112997 * x - 0.37001483; } temp_from_colour z = T { c = colour_transform_to Image_type.YXY (to_colour z); x = c.value?1; y = c.value?2; // McCamy's approximation, see eg. // http://en.wikipedia.org/wiki/Color_temperature#Approximation xe = 0.332; ye = 0.1858; n = (x - xe) / (y - ye); T = -449 * n ** 3 + 3525 * n ** 2 - 6823.3 * n + 5520.33; } nip2-8.7.0/share/nip2/compat/7.38/Math.def0000644000175000017500000003162513224651032014531 00000000000000Math_arithmetic_item = class Menupullright "_Arithmetic" "basic arithmetic for objects" { Add_item = class Menuaction "_Add" "add a and b" { action a b = map_binary add a b; } Subtract_item = class Menuaction "_Subtract" "subtract b from a" { action a b = map_binary subtract a b; } Multiply_item = class Menuaction "_Multiply" "multiply a by b" { action a b = map_binary multiply a b; } Divide_item = class Menuaction "_Divide" "divide a by b" { action a b = map_binary divide a b; } Remainder_item = class Menuaction "_Remainder" "remainder after integer division of a by b" { action a b = map_binary remainder a b; } sep1 = Menuseparator; Absolute_value_item = class Menuaction "A_bsolute Value" "absolute value of x" { action x = map_unary abs x; } Absolute_value_vector_item = class Menuaction "Absolute Value _Vector" "like Absolute Value, but treat pixels as vectors" { action x = map_unary abs_vec x; } Sign_item = class Menuaction "S_ign" "unit vector" { action x = map_unary sign x; } Negate_item = class Menuaction "_Negate" "multiply by -1" { action x = map_unary unary_minus x; } } Math_trig_item = class Menupullright "_Trigonometry" "trigonometry operations (all in degrees)" { Sin_item = class Menuaction "_Sine" "calculate sine x" { action x = map_unary sin x; } Cos_item = class Menuaction "_Cosine" "calculate cosine x" { action x = map_unary cos x; } Tan_item = class Menuaction "_Tangent" "calculate tangent x" { action x = map_unary tan x; } sep1 = Menuseparator; Asin_item = class Menuaction "Arc S_ine" "calculate arc sine x" { action x = map_unary asin x; } Acos_item = class Menuaction "Arc C_osine" "calculate arc cosine x" { action x = map_unary acos x; } Atan_item = class Menuaction "Arc T_angent" "calculate arc tangent x" { action x = map_unary atan x; } sep2 = Menuseparator; Rad_item = class Menuaction "_Degrees to Radians" "convert degrees to radians" { action x = map_unary rad x; } Deg_item = class Menuaction "_Radians to Degrees" "convert radians to degrees" { action x = map_unary deg x; } sep3 = Menuseparator; Angle_range_item = class Menuaction "Angle i_n Range" "is angle within t degrees of r, mod 360" { action t r angle = clock (max - angle) < 2*r { max = clock (t + r); clock a = a + 360, a < 0; = a - 360, a >= 360; = a; } } } Math_log_item = class Menupullright "_Log" "logarithms and anti-logs" { Exponential_item = class Menuaction "_Exponential" "calculate e ** x" { action x = map_unary (power e) x; } Log_natural_item = class Menuaction "Natural _Log" "log base e of x" { action x = map_unary log x; } sep1 = Menuseparator; Exponential10_item = class Menuaction "E_xponential base 10" "calculate 10 ** x" { action x = map_unary (power 10) x; } Log10_item = class Menuaction "L_og Base 10" "log base 10 of x" { action x = map_unary log10 x; } sep2 = Menuseparator; Raise_to_power_item = class Menuaction "_Raise to Power" "calculate x ** y" { action x y = map_binary power x y; } } Math_complex_item = class Menupullright "_Complex" "operations on complex numbers and images" { Complex_extract = class Menupullright "_Extract" "extract fields from complex" { Real_item = class Menuaction "_Real" "extract real part of complex" { action in = map_unary re in; } Imaginary_item = class Menuaction "_Imaginary" "extract imaginary part of complex" { action in = map_unary im in; } } Complex_build_item = class Menuaction "_Build" "join a and b to make a complex" { action a b = map_binary comma a b; } sep1 = Menuseparator; Polar_item = class Menuaction "_Polar" "convert real and imag to amplitude and phase" { action a = map_unary polar a; } Rectangular_item = class Menuaction "_Rectagular" ("convert (amplitude, phase) image to rectangular " ++ "coordinates") { action x = map_unary rectangular x; } sep2 = Menuseparator; Conjugate_item = class Menuaction "_Conjugate" "invert imaginary part" { action x = map_unary conj x; } } Math_boolean_item = class Menupullright "_Boolean" "bitwise boolean operations for integer objects" { And_item = class Menuaction "_AND" "bitwise AND of a and b" { action a b = map_binary bitwise_and a b; } Or_item = class Menuaction "_OR" "bitwise OR of a and b" { action a b = map_binary bitwise_or a b; } Eor_item = class Menuaction "_XOR" "bitwise exclusive or of a and b" { action a b = map_binary eor a b; } Not_item = class Menuaction "_NOT" "invert a" { action a = map_unary not a; } sep1 = Menuseparator; Right_shift_item = class Menuaction "Shift _Right" "shift a right by b bits" { action a b = map_binary right_shift a b; } Left_shift_item = class Menuaction "Shift _Left" "shift a left by b bits" { action a b = map_binary left_shift a b; } sep2 = Menuseparator; If_then_else_item = class Menuaction "_If Then Else" "b where a is non-zero, c elsewhere" { action a b c = map_trinary ite a b c { // can't use if_then_else, we need a true trinary ite a b c = if a then b else c; } } Bandand_item = Image_band_item.Bandand_item; Bandor_item = Image_band_item.Bandor_item; } Math_relational_item = class Menupullright "R_elational" "comparison operations" { Equal_item = class Menuaction "_Equal to" "test a equal to b" { action a b = map_binary equal a b; } Not_equal_item = class Menuaction "_Not Equal to" "test a not equal to b" { action a b = map_binary not_equal a b; } sep1 = Menuseparator; More_item = class Menuaction "_More Than" "test a strictly greater than b" { action a b = map_binary more a b; } Less_item = class Menuaction "_Less Than" "test a strictly less than b" { action a b = map_binary less a b; } sep2 = Menuseparator; More_equal_item = class Menuaction "M_ore Than or Equal to" "test a greater than or equal to b" { action a b = map_binary more_equal a b; } Less_equal_item = class Menuaction "L_ess Than or Equal to" "test a less than or equal to b" { action a b = map_binary less_equal a b; } } Math_list_item = class Menupullright "L_ist" "operations on lists" { Head_item = class Menuaction "_Head" "first element in list" { action x = map_unary hd x; } Tail_item = class Menuaction "_Tail" "list without the first element" { action x = map_unary tl x; } Last_item = class Menuaction "_Last" "last element in list" { action x = map_unary last x; } Init_item = class Menuaction "_Init" "list without the last element" { action x = map_unary init x; } sep1 = Menuseparator; Reverse_item = class Menuaction "_Reverse" "reverse order of elements in list" { action x = map_unary reverse x; } Sort_item = class Menuaction "_Sort" "sort list into ascending order" { action x = map_unary sort x; } Make_set_item = class Menuaction "_Make Set" "remove duplicates from list" { action x = map_unary mkset equal x; } Transpose_list_item = class Menuaction "Tr_anspose" "exchange rows and columns in a list of lists" { action x = map_unary transpose x; } Concat_item = class Menuaction "_Concat" "flatten a list of lists into a single list" { action l = map_unary concat l; } sep2 = Menuseparator; Length_item = class Menuaction "L_ength" "find the length of list" { action x = map_unary len x; } Subscript_item = class Menuaction "S_ubscript" "return element n from list (index from zero)" { action n x = map_binary subscript n x; } Take_item = class Menuaction "_Take" "take the first n elements of list x" { action n x = map_binary take n x; } Drop_item = class Menuaction "_Drop" "drop the first n elements of list x" { action n x = map_binary drop n x; } sep3 = Menuseparator; Join_item = class Menuaction "_Join" "join two lists end to end" { action a b = map_binary join a b; } Difference_item = class Menuaction "_Difference" "difference of two lists" { action a b = map_binary difference a b; } Cons_item = class Menuaction "C_ons" "put element a on the front of list x" { action a x = map_binary cons a x; } Zip_item = class Menuaction "_Zip" "join two lists, pairwise" { action a b = map_binary zip2 a b; } } Math_round_item = class Menupullright "_Round" "various rounding operations" { /* smallest integral value not less than x */ Ceil_item = class Menuaction "_Ceil" "smallest integral value not less than x" { action x = map_unary ceil x; } Floor_item = class Menuaction "_Floor" "largest integral value not greater than x" { action x = map_unary floor x; } Rint_item = class Menuaction "_Round to Nearest" "round to nearest integer" { action x = map_unary rint x; } } Math_fourier_item = class Menupullright "_Fourier" "Fourier transform" { Forward_item = class Menuaction "_Forward" "fourier transform of image" { action a = map_unary (rotquad @ fwfft) a; } Reverse_item = class Menuaction "_Reverse" "inverse fourier transform of image" { action a = map_unary (invfft @ rotquad) a; } Rotate_quadrants_item = class Menuaction "Rotate _Quadrants" "rotate quadrants" { action a = map_unary rotquad a; } } Math_stats_item = class Menupullright "_Statistics" "measure various statistics of objects" { Value_item = class Menuaction "_Value" "value of point in object" { action a = class _result { _vislevel = 3; position = Expression "Coordinate" (0, 0); _result = map_binary point position.expr a; } } Mean_item = class Menuaction "_Mean" "arithmetic mean value" { action a = map_unary mean a; } Gmean_item = class Menuaction "_Geometric Mean" "geometric mean value" { action a = map_unary meang a; } Zmean_item = class Menuaction "_Zero-excluding Mean" "mean value of non-zero elements" { action a = map_unary meanze a; } Deviation_item = class Menuaction "_Standard Deviation" "standard deviation of object" { action a = map_unary deviation a; } Zdeviation_item = class Menuaction "Z_ero-excluding Standard Deviation" "standard deviation of non-zero elements" { action a = map_unary deviationze a; } Skew_item = class Menuaction "S_kew" "skew of image or list or vector" { action a = map_unary skew a; } Kurtosis_item = class Menuaction "Kurtosis" "kurtosis of image or list or vector" { action a = map_unary kurtosis a; } Stats_item = class Menuaction "Ma_ny Stats" "calculate many stats in a single pass" { action a = map_unary stats a; } sep1 = Menuseparator; Max_item = class Menuaction "M_aximum" "maximum of object" { action a = map_unary max a; } Min_item = class Menuaction "M_inimum" "minimum of object" { action a = map_unary min a; } Maxpos_item = class Menuaction "_Position of Maximum" "position of maximum in object" { action a = map_unary maxpos a; } Minpos_item = class Menuaction "P_osition of Minimum" "position of minimum in object" { action a = map_unary minpos a; } Gravity_item = class Menuaction "Centre of _Gravity" "position of centre of gravity of histogram" { action a = map_unary gravity a; } sep2 = Menuseparator; Count_set_item = class Menuaction "_Non-zeros" "number of non-zero elements in object" { action a = map_unary cset a { cset i = (mean (i != 0) * i.width * i.height) / 255; } } Count_clear_item = class Menuaction "_Zeros" "number of zero elements in object" { action a = map_unary cclear a { cclear i = (mean (i == 0) * i.width * i.height) / 255; } } Count_edges_item = class Menuaction "_Edges" "count average edges across or down image" { action x = class _result { _vislevel = 3; edge = Option "Count" [ "Horizontal lines", "Vertical lines" ] 0; _result = map_unary process x { process image = Number (edge.labels?edge) (im_cntlines image.value edge.value); } } } sep3 = Menuseparator; Linear_regression_item = class Menuaction "_Linear Regression" "fit a line to a set of points" { action xes yes = linreg xes yes; } Weighted_linear_regression_item = class Menuaction "_Weighted Linear Regression" "fit a line to a set of points and deviations" { action xes yes devs = linregw xes yes devs; } Cluster_item = class Menuaction "_Cluster" "cluster a list of numbers" { action l = class { _vislevel = 3; thresh = Expression "Threshold" 10; [_r, _w] = cluster thresh.expr l; result = _r; weights = _w; } } } Math_base_item = class Menupullright "Bas_e" "convert number bases" { Hexadecimal_item = class Menuaction "_Hexadecimal" "convert to hexadecimal (base 16)" { action a = map_unary (print_base 16) a; } Binary_item = class Menuaction "_Binary" "convert to binary (base 2)" { action a = map_unary (print_base 2) a; } Octal_item = class Menuaction "_Octal" "convert to octal (base 8)" { action a = map_unary (print_base 8) a; } } nip2-8.7.0/share/nip2/compat/7.38/Tasks.def0000644000175000017500000006411113224651032014721 00000000000000Tasks_capture_item = class Menupullright "_Capture" "useful stuff for capturing and preprocessing images" { Csv_import_item = class Menuaction "_CSV Import" "read a file of comma-separated values" { action = class _result { _vislevel = 3; path = Pathname "File to load" "empty"; start_line = Expression "Start at line" 1; rows = Expression "Lines to read (-1 for whole file)" (-1); whitespace = String "Whitespace characters" " \""; separator = String "Separator characters" ",;\t"; _result = Image blank, path.value == "empty" = Image (im_csv2vips filename) { filename = search (expand path.value) ++ ":" ++ "skip:" ++ print (start_line.expr - 1) ++ "," ++ "whi:" ++ escape whitespace.value ++ "," ++ "sep:" ++ escape separator.value ++ "," ++ "line:" ++ print rows.expr; // prefix any ',' with a '\' in the separators line escape x = foldr prefix [] x { prefix x l = '\\' : x : l, x == ',' = x : l; } blank = image_new 1 1 1 Image_format.DOUBLE Image_coding.NOCODING Image_type.B_W 0 0 0; } } } Raw_import_item = class Menuaction "_Raw Import" "read a file of binary values" { action = class _result { _vislevel = 3; path = Pathname "File to load" "empty"; across = Expression "Pixels across" 100; down = Expression "Pixels down" 100; bytes = Expression "Bytes per pixel" 3; skip = Expression "Skip over initial bytes" 0; _result = Image blank, path.value == "empty" = Image (im_binfile path.value across.expr down.expr bytes.expr skip.expr) { blank = image_new 1 1 1 Image_format.DOUBLE Image_coding.NOCODING Image_type.B_W 0 0 0; } } } // interpret Analyze header for layout and calibration Analyze7_header_item = class Menuaction "_Interpret Analyze 7 Header" "examine the Analyze header and set layout and value" { action x = x''' { // read bits of header dim n = get_header ("dsr-image_dimension.dim[" ++ print n ++ "]"); dim0 = dim 0 x; dim1 = dim 1 x; dim2 = dim 2 x; dim3 = dim 3 x; dim4 = dim 4 x; dim5 = dim 5 x; dim6 = dim 6 x; dim7 = dim 7 x; glmax = get_header "dsr-image_dimension.glmax" x; cal_max = get_header "dsr-image_dimension.cal_max" x; // oops, now a nop x' = x; // lay out higher dimensions width-ways x'' = grid dim2 dim3 1 x', dim0 == 3 = grid dim2 dim3 dim4 x', dim0 == 4 = grid (dim2 * dim4) dim5 1 (grid dim2 dim3 dim4) x', dim0 == 5 = grid (dim2 * dim4) dim5 dim6 (grid dim2 dim3 dim4) x', dim0 == 6 = grid (dim2 * dim4 * dim6) dim7 1 (grid (dim2 * dim4) dim5 dim6 (grid dim2 dim3 dim4)) x', dim0 == 7 = error (_ "unsupported dimension " ++ dim0); // multiply by scale factor to get kBeq x''' = x'' * (cal_max / glmax); } } Video_item = class Menuaction "Capture _Video Frame" "capture a frame of still video" { // shortcut to prefs prefs = Workspaces.Preferences; action = class _result { _vislevel = 3; device = prefs.VIDEO_DEVICE; channel = Option "Input channel" [ "TV", "Composite 1", "Composite 2", "Composite 3" ] prefs.VIDEO_CHANNEL; b = Scale "Brightness" 0 32767 prefs.VIDEO_BRIGHTNESS; col = Scale "Colour" 0 32767 prefs.VIDEO_COLOUR; con = Scale "Contrast" 0 32767 prefs.VIDEO_CONTRAST; hue = Scale "Hue" 0 32767 prefs.VIDEO_HUE; frames = Scale "Frames to average" 0 100 prefs.VIDEO_FRAMES; mono = Toggle "Monochrome grab" prefs.VIDEO_MONO; crop = Toggle "Crop image" prefs.VIDEO_CROP; // grab, but hide it ... if we let the crop edit _raw_grab = Image (im_video_v4l1 device channel.value b.value col.value con.value hue.value frames.value); edit_crop = Region _raw_grab left top width height { left = prefs.VIDEO_CROP_LEFT; top = prefs.VIDEO_CROP_TOP; width = min_pair prefs.VIDEO_CROP_WIDTH (_raw_grab.width + left); height = min_pair prefs.VIDEO_CROP_HEIGHT (_raw_grab.height + top); } aspect_ratio = Expression "Stretch vertically by" prefs.VIDEO_ASPECT; _result = frame' { frame = edit_crop, crop = _raw_grab; frame' = colour_transform_to Image_type.B_W frame, mono = frame; } } } Smooth_image_item = class Menuaction "_Smooth" "remove small features from image" { action in = class _result { _vislevel = 3; feature = Scale "Minimum feature size" 1 50 20; _result = map_unary (smooth feature.value) in; } } Light_correct_item = class Menuaction "_Flatfield" "use white image w to flatfield image i" { action w i = map_binary wc w i { wc w i = clip2fmt i.format (w' * i) { fac = mean w / max w; w' = fac * (max w / w); } } } Image_rank_item = Filter_rank_item.Image_rank_item; Tilt_item = Filter_tilt_item; sep1 = Menuseparator; White_balance_item = class Menuaction "_White Balance" "use average of small image to set white of large image" { action a b = class _result { _vislevel = 3; white_hint = "Set image white to:"; white = Colour_picker "Lab" [100, 0, 0]; _result = map_binary wb a b { wb a b = colour_transform_to (get_type image) image_xyz' { area x = x.width * x.height; larger x y = area x > area y; [image, patch] = sortc larger [a, b]; to_xyz = colour_transform_to Image_type.XYZ; // white balance in XYZ patch_xyz = to_colour (to_xyz patch); white_xyz = to_xyz white; facs = (mean patch_xyz / mean white_xyz) * (white_xyz / patch_xyz); image_xyz = to_xyz image; image_xyz' = image_xyz * facs; } } } } Gamma_item = Image_levels_item.Gamma_item; Tone_item = Image_levels_item.Tone_item; sep2 = Menuseparator; Crop_item = Image_crop_item; Rotate_item = Image_transform_item.Rotate_item; Flip_item = Image_transform_item.Flip_item; Resize_item = Image_transform_item.Resize_item; Rubber_item = Image_transform_item.Image_rubber_item; sep3 = Menuseparator; ICC_item = Colour_icc_item; Temp_item = Colour_temperature_item; Find_calib_item = class Menuaction "Find _Colour Calibration" "find an RGB -> XYZ transform from an image of a colour chart" { action image = class _result { _check_args = [ [image, "image", check_Image] ]; _vislevel = 3; measure = Scale (_ "Measure area (%)") 1 100 50; sample = measure_draw 6 4 (to_real measure) image; // get macbeth data file to use macbeth = Pathname "Pick a Macbeth data file" "$VIPSHOME/share/$PACKAGE/data/macbeth_lab_d65.mat"; mode = Option "Input LUT" [ "Linearize from chart greyscale", "Fit intercept from chart greyscale", "Linear input, set brightness from chart", "Linear input" ] 0; // get max of input image _max_value = Image_format.maxval image.format; // measure chart image _camera = measure_sample 6 4 (to_real measure) image; // load true values _true_Lab = Matrix_file macbeth.value; _true_XYZ = colour_transform Image_type.LAB Image_type.XYZ _true_Lab; // get Ys of greyscale _true_grey_Y = map (extract 1) (drop 18 _true_XYZ.value); // camera greyscale (all bands) _camera_grey = drop 18 _camera.value; // normalise both to 0-1 and combine _camera_grey' = map (map (multiply (1 / _max_value))) _camera_grey; _true_grey_Y' = map (multiply (1 / 100)) _true_grey_Y; _comb = Matrix (map2 cons _true_grey_Y' _camera_grey'), mode == 0 = Matrix [0: intercepts, replicate (_camera.width + 1) 1], mode == 1 = Matrix [[0, 0], [1, 1]] { intercepts = [(linreg _true_grey_Y' cam).intercept :: cam <- transpose _camera_grey']; } // make a linearising lut ... zero on left _linear_lut = im_invertlut _comb (_max_value + 1); // and display it // plot from 0 explicitly so we see the effect of mode1 (intercept // from greyscale) linearising_lut = Plot [$ymin => 0] _linear_lut; // map an image though the lineariser linear x = hist_map linearising_lut.value x, mode == 0 || mode == 1 = x; // map the chart measurements though the lineariser _camera' = (to_matrix @ linear @ to_image) _camera; // solve for RGB -> XYZ // normalise: the 2nd row is what makes Y, so divide by that to // get Y in 0-1. _pinv = (transpose _camera' * _camera') ** -1; _full_M = transpose (_pinv * (transpose _camera' * _true_XYZ)); M = _full_M / scale; scale = sum _full_M.value?1; // now turn the camera to LAB and calculate dE76 _camera'' = (to_matrix @ colour_transform Image_type.XYZ Image_type.LAB @ recomb M @ multiply scale @ to_image) _camera'; _dEs = map abs_vec (_camera'' - _true_Lab).value; avg_dE76 = mean _dEs; _max_dE = foldr max_pair 0 _dEs; _worst = index (equal _max_dE) _dEs; worst_patch = name _worst ++ " (patch " ++ print (_worst + 1) ++ ", " ++ print _max_dE ++ " dE)" { name i = macbeth_names?i, i >= 0 && i < len macbeth_names = "Unknown"; } // normalise brightness ... in linear mode, we optionally don't // set the brightness from the Macbeth chart norm x = x * scale, mode != 3 = x; // convert RGB camera to Lab _result = (Image @ colour_transform Image_type.XYZ Image_type.LAB @ norm @ recomb M @ cast_float @ linear) image.value; } } Apply_calib_item = class Menuaction "_Apply Colour Calibration" "apply an RGB -> LAB transform to an image" { action a b = class (map_binary process a b) { process a b = result, is_instanceof calib_name calib && is_Image image = error (_ "bad arguments to " ++ "Calibrate_image") { // the name of the calib object we need calib_name = "Tasks_capture_item.Find_calib_item.action"; // get the Calibrate_chart arg first [image, calib] = sortc (const (is_instanceof calib_name)) [a, b]; result = (Image @ colour_transform Image_type.XYZ Image_type.LAB @ calib.norm @ recomb calib.M @ cast_float @ calib.linear) image.value; } } } sep4 = Menuseparator; Graph_hist_item = Hist_find_item; Graph_bands_item = class Menuaction "Plot _Bands" "show image bands as a graph" { action x = class _result { _vislevel = 3; style = Option_enum "Style" Plot_style.names "Line"; auto = Toggle "Auto Range" true; ymin = Expression "Y range minimum" 0; ymax = Expression "Y range maximum" 1; _result = Plot options (to_image (bands (image x))).value { options = [$style => style.value] ++ if auto then [] else [$ymin => ymin.expr, $ymax => ymax.expr]; // try to make something image-like from it image x = extract_area x.left x.top 1 1 x.image, is_Mark x = get_image x, has_image x = get_image (to_image x); // get as [[1],[2],[3]] bands x = transpose [map mean (bandsplit x)]; } } } } Tasks_mosaic_item = class Menupullright "_Mosaic" "build image mosaics" { /* Check and group a point list by image. */ mosaic_sort_test l = error "mosaic: not all points", !is_listof is_Mark l = error "mosaic: points not on two images", !is_list_len 2 images = error "mosaic: images do not match in format and coding", !all_equal (map get_format l) || !all_equal (map get_coding l) = error "mosaic: not same number of points on each image", !foldr1 equal (map len l') = l' { // test for all elements of a list equal all_equal l = all (map (equal (hd l)) (tl l)); // all the different images images = mkset pointer_equal (map get_image l); // find all points defined on image test_image image p = (get_image p) === image; find l image = filter (test_image image) l; // group point list by image l' = map (find l) images; } /* Sort a point group to get right before left, and within each group to * get above before below. */ mosaic_sort_lr l = l'' { // sort to get upper point first above a b = a.top < b.top; l' = map (sortc above) l; // sort to get right group before left group right a b = a?0.left > b?0.left; l'' = sortc right l'; } /* Sort a point group to get top before bottom, and within each group to * get left before right. */ mosaic_sort_tb l = l'' { // sort to get upper point first left a b = a.left < b.left; l' = map (sortc left) l; // sort to get right group before left group below a b = a?0.top > b?0.top; l'' = sortc below l'; } /* Put 'em together! Group by image, sort vertically (or horizontally) with * one of the above, transpose to get pairs matched up, and flatten again. */ mosaic_sort fn = concat @ transpose @ fn @ mosaic_sort_test; Mosaic_1point_item = class Menupullright "_One Point" "join two images with a single tie point" { check_ab_args a b = [ [a, "a", check_Mark], [b, "b", check_Mark] ]; // shortcut to prefs prefs = Workspaces.Preferences; search_area = prefs.MOSAIC_WINDOW_SIZE; object_size = prefs.MOSAIC_OBJECT_SIZE; blend_width_widget = Scale "Maximum blend width" 0 100 prefs.MOSAIC_MAX_BLEND_WIDTH; refine_widget = Toggle "Refine selected tie-points" prefs.MOSAIC_REFINE; lr_mos _refine a b = class Image _result { _check_args = check_ab_args a b; bw = blend_width_widget; refine = _refine; _result = im_lrmosaic a'.image.value b'.image.value 0 a'.left a'.top b'.left b'.top (object_size / 2) (search_area / 2) 0 bw.value, refine = im_lrmerge a'.image.value b'.image.value (b'.left - a'.left) (b'.top - a'.top) bw.value { [a', b'] = mosaic_sort mosaic_sort_lr [a, b]; } } tb_mos _refine a b = class Image _result { _check_args = check_ab_args a b; bw = blend_width_widget; refine = _refine; _result = im_tbmosaic a'.image.value b'.image.value 0 a'.left a'.top b'.left b'.top (object_size / 2) (search_area / 2) 0 bw.value, refine = im_tbmerge a'.image.value b'.image.value (b'.left - a'.left) (b'.top - a'.top) bw.value { [a', b'] = mosaic_sort mosaic_sort_tb [a, b]; } } Left_right_item = class Menuaction "_Left to Right" "join two images left-right with a single tie point" { action a b = lr_mos refine_widget a b; } Top_bottom_item = class Menuaction "_Top to Bottom" "join two images top-bottom with a single tie point" { action a b = tb_mos refine_widget a b; } sep1 = Menuseparator; Left_right_manual_item = class Menuaction "Manual L_eft to Right" "join left-right, no auto-adjust of tie points" { action a b = lr_mos false a b; } Top_bottom_manual_item = class Menuaction "Manual T_op to Bottom" "join top-bottom, no auto-adjust of tie points" { action a b = tb_mos false a b; } } Mosaic_2point_item = class Menupullright "_Two Point" "join two images with two tie points" { check_abcd_args a b c d = [ [a, "a", check_Mark], [b, "b", check_Mark], [c, "c", check_Mark], [d, "d", check_Mark] ]; // shortcut to prefs prefs = Workspaces.Preferences; search_area = prefs.MOSAIC_WINDOW_SIZE; object_size = prefs.MOSAIC_OBJECT_SIZE; blend_width_widget = Scale "Maximum blend width" 0 100 prefs.MOSAIC_MAX_BLEND_WIDTH; refine_widget = Toggle "Refine selected tie-points" prefs.MOSAIC_REFINE; Left_right_item = class Menuaction "_Left to Right" "join two images left-right with a pair of tie points" { action a b c d = class Image _result { _check_args = check_abcd_args a b c d; bw = blend_width_widget; refine = refine_widget; _result = im_lrmosaic1 a'.image.value b'.image.value 0 a'.left a'.top b'.left b'.top c'.left c'.top d'.left d'.top (object_size / 2) (search_area / 2) 0 bw.value, refine = im_lrmerge1 a'.image.value b'.image.value a'.left a'.top b'.left b'.top c'.left c'.top d'.left d'.top bw.value { [a', b', c', d'] = mosaic_sort mosaic_sort_lr [a, b, c, d]; } } } Top_bottom_item = class Menuaction "_Top to Bottom" "join two images top-bottom with a pair of tie points" { action a b c d = class Image _result { _check_args = check_abcd_args a b c d; bw = blend_width_widget; refine = refine_widget; _result = im_tbmosaic1 a'.image.value b'.image.value 0 a'.left a'.top b'.left b'.top c'.left c'.top d'.left d'.top (object_size / 2) (search_area / 2) 0 bw.value, refine = im_tbmerge1 a'.image.value b'.image.value a'.left a'.top b'.left b'.top c'.left c'.top d'.left d'.top bw.value { [a', b', c', d'] = mosaic_sort mosaic_sort_tb [a, b, c, d]; } } } } sep1 = Menuseparator; Balance_item = class Menuaction "Mosaic _Balance" "disassemble mosaic, scale brightness to match, reassemble" { action x = map_unary balance x { balance x = oo_unary_function balance_op x, is_class x = im_global_balancef x Workspaces.Preferences.MOSAIC_BALANCE_GAMMA, is_image x = error (_ "bad arguments to " ++ "balance") { balance_op = Operator "balance" balance Operator_type.COMPOUND_REWRAP false; } } } //////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// Manual_balance_item = class Menupullright "Manual B_alance" "balance tonality of user defined areas" { prefs = Workspaces.Preferences; //////////////////////////////////////////////////////////////////////////////////// Balance_find_item = class Menuaction "_Find Values" "calculates values required to scale and offset balance user defined areas in a given image" /* Outputs a matrix of scale and offset values. Eg. Values required to balance the secondary * structure in an X-ray image. Takes an X-ray image an 8-bit control mask and a list of * 8-bit reference masks, where the masks are white on a black background. */ { action im_in m_control m_group = class Matrix values{ _vislevel = 1; _control_im = if m_control then im_in else 0; _control_meanmax = so_meanmax _control_im; _group_check = is_Group m_group; _m_list = m_group.value, _group_check = m_group; process m_current mat_in = mat_out {so_values = so_calculate _control_meanmax im_in m_current; mat_out = join [so_values] mat_in;} values = (foldr process [] _m_list); } } //////////////////////////////////////////////////////////////////////////////////// Balance_check_item = class Menuaction "_Check Values" "allows calculated set of scale and offset values to be checked and adjusted if required" /* Outputs adjusted matrix of scale and offset values and scale and offset image maps. * Eg. Check values required to balance the secondary structure in an X-ray image. * Takes an X-ray image an 8-bit control mask and a list of 8-bit reference masks, * where the masks are white on a black background. */ { action im_in m_matrix m_group = class Image value { _vislevel = 3; blur = Scale "Blur" 1 10 1; _blur = (blur.value/2 + 0.5), blur.value > 1 = 1; _group_check = is_Group m_group; _m_list = m_group.value, _group_check = m_group; adjust = Matrix_rec mat_a { no_masks = len _m_list; mat_a = replicate no_masks [0, 0]; } // Apply the user defined adjustments to the inputted matrix of scale and offset values _adjusted = map2 fn_adjust m_matrix.value adjust.value; fn_adjust a b = [(a?0 + b?0), (a?1 + (a?1 * b?1))]; _scaled_ims = map (fn_so_apply im_in) _adjusted; fn_so_apply im so = map_unary adj im {adj im = im * (so?0) + (so?1);} _im_pairs = zip2 _m_list _scaled_ims; // Prepare black images as starting point. //////////// _blank = image_new (_m_list?0).width (_m_list?0).height 1 6 Image_coding.NOCODING 1 0 0 0; _pair_start = [(_blank + 1), _blank]; Build = Toggle "Build Scale and Offset Correction Images" false; Output = class { _vislevel = 1; scale_im = _build?0; offset_im = _build?1; so_values = Matrix _adjusted; _build = [Image so_images?0, Image so_images?1], Build = ["Scale image not built.", "Offset image not built."] { m_list' = transpose [_m_list]; m_all = map2 join m_list' _adjusted; so_images = foldr process_2 _pair_start m_all; } } value = (foldr process_1 im_in_b _im_pairs).value {im_in_b = map_unary cast_float im_in;} process_1 m_current im_start = im_out { bl_mask = convsep (matrix_blur _blur) (get_image m_current?0); blended_im = im_blend bl_mask (m_current?1).value im_start.value; im_out = Image (clip2fmt im_start.format blended_im); } // Process for building scale and offset image. process_2 current p_start = p_out { im_s = if ((current?0) > 128) then current?1 else _blank; im_o = if ((current?0) > 128) then current?2 else _blank; im_s' = convsep (matrix_blur _blur) (im_s != 0); im_o' = convsep (matrix_blur _blur) (im_o != 0); im_s'' = im_blend im_s'.value im_s.value p_start?0; im_o'' = im_blend im_o'.value im_o.value p_start?1; p_out = [im_s'', im_o'']; } } } //////////////////////////////////////////////////////////////////////////////////// Balance_apply_item = class Menuaction "_Apply Values" "apply scale and offset corrections, defined as image maps, to a given image" /* Outputs the balanced image. Eg. Balance the secondary structure in an X-ray image. Takes an * X-ray image an 32-bit float scale image and a 32-bit offset image. */ { action im_in scale_im offset_im = class Image value { _vislevel = 1; xfactor = im_in.width/scale_im.width; yfactor = im_in.height/scale_im.height; _scale_im = resize Interpolate_bilinear xfactor yfactor scale_im; _offset_im = resize Interpolate_bilinear xfactor yfactor offset_im; value = get_image ( clip2fmt im_in.format ( ( im_in * _scale_im ) + _offset_im ) ); } } } Tilt_item = Filter_tilt_item; sep2 = Menuseparator; Rebuild_item = class Menuaction "_Rebuild" "disassemble mosaic, substitute image files and reassemble" { action x = class _result { _vislevel = 3; old = String "In each filename, replace" "foo"; new = String "With" "bar"; _result = map_unary remosaic x { remosaic image = Image (im_remosaic image.value old.value new.value); } } } sep3 = Menuseparator; Clone_area_item = class Menuaction "_Clone Area" "replace dark or light section of im1 with pixels from im2" { action im1 im2 = class _result { _check_args = [ [im1, "im1", check_Image], [im2, "im2", check_Image] ]; _vislevel = 3; /* Region on first image placed in the top left hand corner, * positioned and size relative to the height and width of im1. */ r1 = Region_relative im1 0.05 0.05 0.05 0.05; /* Mark on second image placed in the top left hand corner, * positioned relative to the height and width of im2. Used to * define _r2, the region from which the section of image is cloned * from. */ p2 = Mark_relative im2 0.05 0.05; _r2 = Region im2 p2.left p2.top r1.width r1.height; mask = [r1 <= Options.sc, r1 >= Options.sc]?(Options.replace); Options = class { _vislevel = 3; pause = Toggle "Pause process" true; /* Option toggle used to define whether the user is * replacing a dark or a light area. */ replace = Option "Replace" [ "A Dark Area", "A Light Area" ] 1; // Used to select the area to be replaced. sc = Scale "Scale cutoff" 0.01 mx (mx / 2) {mx = Image_format.maxval im1.format;} //Allows replacement with scale&offset balanced gaussian noise. balance = Toggle "Balance cloned data to match surroundings." true; //Allows replacement with scale&offset balanced //gaussian noise. process = Toggle "Replace area with Gaussian noise." false; } _result = im1, Options.pause = Image (im_insert im1.value patch r1.left r1.top) { r2 = Region im2 p2.left p2.top r1.width r1.height; ref_meanmax = so_meanmax (if mask then 0 else r1); mask8 = Matrix_mor [[255, 255, 255], [255, 255, 255], [255, 255, 255]]; mask_a = map_unary (dilate mask8) mask; mask_b = convsep (matrix_blur 2) mask_a; patch = so_balance ref_meanmax r1 r2 mask_b Options.process, Options.balance = so_balance ref_meanmax r1 r2 mask_b Options.process, Options.process = im_blend (get_image mask_b) (get_image r2) (get_image r1); } } } } Tasks_frame_item = Frame_item; Tasks_print_item = class Menupullright "_Print" "useful stuff for image output" { Rotate_item = Image_transform_item.Rotate_item; Flip_item = Image_transform_item.Flip_item; Resize_item = Image_transform_item.Resize_item; Tone_item = Image_levels_item.Tone_item; Sharpen_item = class Menuaction "_Sharpen" "unsharp filter tuned for typical inkjet printers" { action x = class _result { _vislevel = 3; target_dpi = Option "Sharpen for print at" [ "400 dpi", "300 dpi", "150 dpi", "75 dpi" ] 1; _result = map_unary process x { process image = sharpen params?0 params?1 params?2 params?3 params?4 params?5 (colour_transform_to Image_type.LABQ image) { // sharpen params for various dpi // just change the size of the area we search param_table = [ [7, 2.5, 40, 20, 0.5, 1.5], [5, 2.5, 40, 20, 0.5, 1.5], [3, 2.5, 40, 20, 0.5, 1.5], [11, 2.5, 40, 20, 0.5, 1.5] ]; params = param_table?target_dpi; } } } } sep1 = Menuseparator; Temp_item = Colour_temperature_item; ICC_item = Colour_icc_item; } nip2-8.7.0/share/nip2/compat/7.38/_types.def0000644000175000017500000006732313224651032015147 00000000000000/* A list of things. Do automatic iteration of unary and binary operators on * us. * List [1, 2] + [2, 3] -> List [3, 5] * hd (List [2, 3]) -> 2 * List [] == [] -> true */ List value = class _Object { _check_args = [ [value, "value", check_list] ]; // methods oo_binary_table op x = [ [apply2 op value x', op.op_name == "subscript" || op.op_name == "subscript'" || op.op_name == "equal" || op.op_name == "equal'"], [this.List (apply2 op value x'), op.op_name == "join" || op.op_name == "join'"], [this.List (map2 (apply2 op) value x'), is_list x'], [this.List (map (apply2 op' x) value), true] ] ++ super.oo_binary_table op x { op' = oo_converse op; // strip the List wrapper, if any x' = x.value, is_List x = x; apply2 op x1 x2 = oo_binary_function op x1 x2, is_class x1 = oo_binary'_function op x1 x2, is_class x2 = op.fn x1 x2; }; oo_unary_table op = [ [apply value, op.op_name == "hd" || op.op_name == "tl"], [this.List (map apply value), true] ] ++ super.oo_unary_table op { apply x = oo_unary_function op x, is_class x = op.fn x; } } /* A group of things. Loop the operation over the group. */ Group value = class _Object { _check_args = [ [value, "value", check_list] ]; // methods oo_binary_table op x = [ // if_then_else is really a trinary operator [map_trinary ite this x?0 x?1, op.op_name == "if_then_else"], [map_binary op.fn this x, is_Group x], [map_unary (\a op.fn a x) this, true] ] ++ super.oo_binary_table op x; oo_unary_table op = [ [map_unary op.fn this, true] ] ++ super.oo_unary_table op; // we can't call map_trinary directly, since it uses Group and we // don't support mutually recursive top-level functions :-( // copy-paste it here, keep in sync with the version in _stdenv map_nary fn args = fn args, groups == [] = Group (map process [0, 1 .. shortest - 1]) { groups = filter is_Group args; shortest = foldr1 min_pair (map (len @ get_value) groups); process n = NULL, any (map (is_noval n) args) = map_nary fn (map (extract n) args) { extract n arg = arg.value?n, is_Group arg = arg; is_noval n arg = is_Group arg && arg.value?n == NULL; } } // need ite as a true trinary ite a b c = if a then b else c; map_unary fn a = map_nary (list_1ary fn) [a]; map_binary fn a b = map_nary (list_2ary fn) [a, b]; map_trinary fn a b c = map_nary (list_3ary fn) [a, b, c]; } /* Single real number ... eg slider. */ Real value = class _Object { _check_args = [ [value, "value", check_real] ]; // methods oo_binary_table op x = [ [this.Real (op.fn this.value x.value), is_Real x && op.type == Operator_type.ARITHMETIC], [this.Real (op.fn this.value x), is_real x && op.type == Operator_type.ARITHMETIC], [op.fn this.value x.value, is_Real x && op.type == Operator_type.RELATIONAL], [op.fn this.value x, !is_class x] ] ++ super.oo_binary_table op x; oo_unary_table op = [ [this.Real (op.fn this.value), op.type == Operator_type.ARITHMETIC], [op.fn this.value, true] ] ++ super.oo_unary_table op; } /* Single bool ... eg Toggle. */ Bool value = class _Object { _check_args = [ [value, "value", check_bool] ]; // methods oo_binary_table op x = [ [op.fn this.value x, op.op_name == "if_then_else"], [this.Bool (op.fn this.value x.value), is_Bool x], [this.Bool (op.fn this.value x), is_bool x] ] ++ super.oo_binary_table op x; oo_unary_table op = [ [this.Bool (op.fn this.value), op.type == Operator_type.ARITHMETIC || op.type == Operator_type.RELATIONAL], [op.fn this.value, true] ] ++ super.oo_unary_table op; } /* An editable string. */ String caption value = class _Object { _check_args = [ [caption, "caption", check_string], [value, "value", check_string] ]; } /* An editable real number. */ Number caption value = class scope.Real value { _check_args = [ [caption, "caption", check_string] ]; Real x = this.Number caption x; } /* An editable expression. */ Expression caption expr = class (if is_class expr then expr else _Object) { _check_args = [ [caption, "caption", check_string], [expr, "expr", check_any] ]; } /* A ticking clock. */ Clock interval value = class scope.Real value { _check_args = [ [interval, "interval", check_real] ]; Real x = this.Clock interval x; } /* An editable filename. */ Pathname caption value = class _Object { _check_args = [ [caption, "caption", check_string], [value, "value", check_string] ]; } /* An editable fontname. */ Fontname caption value = class _Object { _check_args = [ [caption, "caption", check_string], [value, "value", check_string] ]; } /* Vector type ... just a finite list of real. Handy for wrapping an * argument to eg. im_lintra_vec. Make it behave like a single pixel image. */ Vector value = class _Object { _check_args = [ [value, "value", check_real_list] ]; bands = len value; // methods oo_binary_table op x = [ // Vector ++ Vector means bandwise join [this.Vector (op.fn this.value x.value), is_Vector x && (op.op_name == "join" || op.op_name == "join'")], [this.Vector (op.fn this.value [get_number x]), has_number x && (op.op_name == "join" || op.op_name == "join'")], // Vector ? number means extract element [op.fn this.value (get_real x), has_real x && (op.op_name == "subscript" || op.op_name == "subscript'")], // extra check for lengths equal [this.Vector (map_binaryl op.fn this.value x.value), is_Vector x && len value == len x.value && op.type == Operator_type.ARITHMETIC], [this.Vector (map_binaryl op.fn this.value (get_real x)), has_real x && op.type == Operator_type.ARITHMETIC], // need extra length check [this.Vector (map bool_to_real (map_binaryl op.fn this.value x.value)), is_Vector x && len value == len x.value && op.type == Operator_type.RELATIONAL], [this.Vector (map bool_to_real (map_binaryl op.fn this.value (get_real x))), has_real x && op.type == Operator_type.RELATIONAL], [this.Vector (op.fn this.value x.value), is_Vector x && len value == len x.value && op.type == Operator_type.COMPOUND_REWRAP], [x.Image (vec op'.op_name x.value value), is_Image x], [vec op'.op_name x value, is_image x], [op.fn this.value x, is_real x] ] ++ super.oo_binary_table op x { op' = oo_converse op; }; oo_unary_table op = [ [this.Vector (map_unaryl op.fn this.value), op.type == Operator_type.ARITHMETIC], [this.Vector (map bool_to_real (map_unaryl op.fn this.value)), op.type == Operator_type.RELATIONAL], [this.Vector (op.fn this.value), op.type == Operator_type.COMPOUND_REWRAP], [op.fn this.value, true] ] ++ super.oo_unary_table op; // turn an ip bool (or a number, for Vector) into VIPSs 255/0 bool_to_real x = 255, is_bool x && x = 255, is_number x && x != 0 = 0; } /* A rectangular array of real. */ Matrix_base value = class _Object { _check_args = [ [value, "value", check_matrix] ]; // calculate these from value width = len value?0; height = len value; // extract a rectanguar area extract left top width height = this.Matrix_base ((map (take width) @ map (drop left) @ take height @ drop top) value); // methods oo_binary_table op x = [ // mat multiply is special [this.Matrix_base mul.value, is_Matrix x && op.op_name == "multiply"], [this.Matrix_base mul'.value, is_Matrix x && op.op_name == "multiply'"], // mat divide is also special [this.Matrix_base div.value, is_Matrix x && op.op_name == "divide"], [this.Matrix_base div'.value, is_Matrix x && op.op_name == "divide'"], // power -1 means invert [this.Matrix_base inv.value, is_real x && x == -1 && op.op_name == "power"], [this.Matrix_base sq.value, is_real x && x == 2 && op.op_name == "power"], [error "matrix **-1 and **2 only", op.op_name == "power" || op.op_name == "power'"], // matrix op vector ... treat a vector as a 1 row matrix [this.Matrix_base (map (map_binaryl op'.fn x.value) this.value), is_Vector x && op.type == Operator_type.ARITHMETIC], [this.Matrix_base (map_binaryl op.fn this.value x.value), (is_Matrix x || is_Real x) && op.type == Operator_type.ARITHMETIC], [this.Matrix_base (map_binaryl op.fn this.value x), is_real x && op.type == Operator_type.ARITHMETIC], // compound ... don't do iteration [this.Matrix_base (op.fn this.value x.value), (is_Matrix x || is_Real x || is_Vector x) && op.type == Operator_type.COMPOUND_REWRAP], [op.fn this.value x, op.type == Operator_type.COMPOUND] ] ++ super.oo_binary_table op x { mul = im_matmul this x; mul' = im_matmul x this; div = im_matmul this (im_matinv x); div' = im_matmul x (im_matinv this); inv = im_matinv this; sq = im_matmul this this; op' = oo_converse op; } oo_unary_table op = [ [this.Matrix_base (map_unaryl op.fn this.value), op.type == Operator_type.ARITHMETIC], [this.Matrix_base (op.fn this.value), op.type == Operator_type.COMPOUND_REWRAP], [op.fn this.value, true] ] ++ super.oo_unary_table op; } /* How to display a matrix: text, sliders, toggles, or text plus scale/offset. */ Matrix_display = class { text = 0; slider = 1; toggle = 2; text_scale_offset = 3; is_display = member [text, slider, toggle, text_scale_offset]; } /* A matrix as VIPS sees them ... add scale, offset and filename. For nip, add * a display type as well to control how the widget renders. */ Matrix_vips value scale offset filename display = class scope.Matrix_base value { _check_args = [ [scale, "scale", check_real], [offset, "offset", check_real], [filename, "filename", check_string], [display, "display", check_matrix_display] ]; Matrix_base x = this.Matrix_vips x scale offset filename display; } /* A plain 'ol matrix which can be passed to VIPS. */ Matrix value = class Matrix_vips value 1 0 "" Matrix_display.text {} /* Specialised constructors ... for convolutions, recombinations and * morphologies. */ Matrix_con scale offset value = class Matrix_vips value scale offset "" Matrix_display.text_scale_offset {}; Matrix_rec value = class Matrix_vips value 1 0 "" Matrix_display.slider {}; Matrix_mor value = class Matrix_vips value 1 0 "" Matrix_display.toggle {}; Matrix_file filename = (im_read_dmask @ expand @ search) filename; /* A CIE colour ... a triple, plus a format (eg XYZ, Lab etc) */ Colour colour_space value = class scope.Vector value { _check_args = [ [colour_space, "colour_space", check_colour_space] ]; _check_all = [ [is_list_len 3 value, "len value == 3"] ]; Vector x = this.Colour colour_space x; // make a colour-ish thing from an image // back to Colour if we have another 3 band image // to a vector if bands > 1 // to a number otherwise itoc im = this.Colour nip_type (to_matrix im).value?0, bands == 3 = scope.Vector (map mean (bandsplit im)), bands > 1 = mean im { type = get_header "Type" im; bands = get_header "Bands" im; nip_type = Image_type.colour_spaces.lookup 1 0 type; } // methods oo_binary_table op x = [ [itoc (op.fn ((float) (to_image this).value) ((float) (to_image x).value)), // here REWRAP means go via image op.type == Operator_type.COMPOUND_REWRAP] ] ++ super.oo_binary_table op x; oo_unary_table op = [ [itoc (op.fn ((float) (to_image this).value)), op.type == Operator_type.COMPOUND_REWRAP] ] ++ super.oo_unary_table op; } // a subclass with widgets for picking a space and value Colour_picker default_colour default_value = class Colour space.item colour.expr { _vislevel = 3; space = Option_enum "Colour space" Image_type.colour_spaces default_colour; colour = Expression "Colour value" default_value; Colour_edit colour_space value = Colour_picker colour_space value; } /* Base scale type. */ Scale caption from to value = class scope.Real value { _check_args = [ [caption, "caption", check_string], [from, "from", check_real], [to, "to", check_real] ]; _check_all = [ [from < to, "from < to"] ]; Real x = this.Scale caption from to x; // methods oo_binary_table op x = [ [this.Scale caption (op.fn this.from x.from) (op.fn this.to x.to) (op.fn this.value x.value), is_Scale x && op.type == Operator_type.ARITHMETIC], [this.Scale caption (op.fn this.from x) (op.fn this.to x) (op.fn this.value x), is_real x && op.type == Operator_type.ARITHMETIC] ] ++ super.oo_binary_table op x; } /* Base toggle type. */ Toggle caption value = class scope.Bool value { _check_args = [ [caption, "caption", check_string], [value, "value", check_bool] ]; Bool x = this.Toggle caption x; } /* Base option type. */ Option caption labels value = class scope.Real value { _check_args = [ [caption, "caption", check_string], [labels, "labels", check_string_list], [value, "value", check_uint] ]; } /* An option whose value is a string rather than a number. */ Option_string caption labels item = class Option caption labels (index (equal item) labels) { Option_edit caption labels value = this.Option_string caption labels (labels?value); } /* Make an option from an enum. */ Option_enum caption enum item = class Option_string caption enum.names item { // corresponding thing value_thing = enum.get_thing item; Option_edit caption labels value = this.Option_enum caption enum (enum.names?value); } /* A rectangle. width and height can be -ve. */ Rect left top width height = class _Object { _check_args = [ [left, "left", check_real], [top, "top", check_real], [width, "width", check_real], [height, "height", check_real] ]; // derived right = left + width; bottom = top + height; oo_binary_table op x = [ [equal x, is_Rect x && (op.op_name == "equal" || op.op_name == "equal'")], [!equal x, is_Rect x && (op.op_name == "not_equal" || op.op_name == "not_equal'")], // binops with a complex are the same as (comp op comp) [oo_binary_function op this (Rect (re x) (im x) 0 0), is_complex x], // all others are just pairwise [this.Rect left' top' width' height', is_Rect x && op.type == Operator_type.ARITHMETIC], [this.Rect left'' top'' width'' height'', has_number x && op.type == Operator_type.ARITHMETIC] ] ++ super.oo_binary_table op x { left' = op.fn left x.left; top' = op.fn top x.top; width' = op.fn width x.width; height' = op.fn height x.height; left'' = op.fn left x'; top'' = op.fn top x'; width'' = op.fn width x'; height'' = op.fn height x'; x' = get_number x; } oo_unary_table op = [ // arithmetic uops just map [this.Rect left' top' width' height', op.type == Operator_type.ARITHMETIC], // compound uops are just like ops on complex // do (width, height) so thing like abs(Arrow) work as you'd expect [op.fn (width, height), op.type == Operator_type.COMPOUND] ] ++ super.oo_unary_table op { left' = op.fn left; top' = op.fn top; width' = op.fn width; height' = op.fn height; } // empty? ie. contains no pixels is_empty = width == 0 || height == 0; // normalised version, ie. make width/height +ve and flip the origin nleft = left + width, width < 0 = left; ntop = top + height, height < 0 = top; nwidth = abs width; nheight = abs height; nright = nleft + nwidth; nbottom = ntop + nheight; equal x = left == x.left && top == x.top && width == x.width && height == x.height; // contains a point? includes_point x y = nleft <= x && x <= nright && ntop <= y && y <= nbottom; // contains a rect? just test top left and bottom right points includes_rect r = includes_point r.nleft r.ntop && includes_point r.nright r.nbottom; // bounding box of two rects // if either is empty, can just return the other union r = r, is_empty = this, r.is_empty = Rect left' top' width' height' { left' = min_pair nleft r.nleft; top' = min_pair ntop r.ntop; width' = max_pair nright r.nright - left'; height' = max_pair nbottom r.nbottom - top'; } // intersection of two rects ... empty rect if no intersection intersect r = Rect left' top' width'' height'' { left' = max_pair nleft r.nleft; top' = max_pair ntop r.ntop; width' = min_pair nright r.nright - left'; height' = min_pair nbottom r.nbottom - top'; width'' = width', width > 0 = 0; height'' = height', height > 0 = 0; } // expand/collapse by n pixels margin_adjust n = Rect (left - n) (top - n) (width + 2 * n) (height + 2 * n); } /* Values for Compression field in image. */ Image_compression = class { NONE = 0; NO_COMPRESSION = 0; TCSF_COMPRESSION = 1; JPEG_COMPRESSION = 2; LABPACK_COMPRESSED = 3; RGB_COMPRESSED = 4; LUM_COMPRESSED = 5; } /* Values for Coding field in image. */ Image_coding = class { NONE = 0; NOCODING = 0; COLQUANT = 1; LABPACK = 2; RAD = 6; } /* Values for BandFmt field in image. */ Image_format = class { DPCOMPLEX = 9; DOUBLE = 8; COMPLEX = 7; FLOAT = 6; INT = 5; UINT = 4; SHORT = 3; USHORT = 2; CHAR = 1; UCHAR = 0; NOTSET = -1; maxval fmt = [ 255, // UCHAR 127, // CHAR 65535, // USHORT 32767, // SHORT 4294967295, // UINT 2147483647, // INT 255, // FLOAT 255, // COMPLEX 255, // DOUBLE 255 // DPCOMPLEX ] ? fmt, fmt >= 0 && fmt <= DPCOMPLEX = error (_ "bad value for BandFmt"); } /* A lookup table. */ Table value = class _Object { _check_args = [ [value, "value", check_rectangular] ]; /* Extract a column. */ column n = map (extract n) value; /* present col x: is there an x in column col */ present col x = member (column col) x; /* Look on column from, return matching item in column to. */ lookup from to x = value?n?to, n >= 0 = error (_ "item" ++ " " ++ print x ++ " " ++ _ "not in table") { n = index (equal x) (column from); } } /* A two column lookup table with the first column a string and the second a * thing. Used for representing various enums. Option_enum makes a selector * from one of these. */ Enum value = class Table value { _check_args = [ [value, "value", check_enum] ] { check_enum = [is_enum, _ "is [[char, *]]"]; is_enum x = is_rectangular x && is_listof is_string (map (extract 0) x); } // handy ... all the names and things as lists names = this.column 0; things = this.column 1; // is a legal name or thing has_name x = this.present 1 x; has_thing x = this.present 0 x; // map things to strings and back get_name x = this.lookup 1 0 x; get_thing x = this.lookup 0 1 x; } /* Type field. */ Image_type = class { MULTIBAND = 0; B_W = 1; HISTOGRAM = 10; XYZ = 12; LAB = 13; CMYK = 15; LABQ = 16; RGB = 17; UCS = 18; LCH = 19; LABS = 21; sRGB = 22; YXY = 23; FOURIER = 24; RGB16 = 25; GREY16 = 26; ARRAY = 27; /* Table to get names <-> numbers. */ type_names = Enum [ $MULTIBAND => MULTIBAND, $B_W => B_W, $HISTOGRAM => HISTOGRAM, $XYZ => XYZ, $LAB => LAB, $CMYK => CMYK, $LABQ => LABQ, $RGB => RGB, $UCS => UCS, $LCH => LCH, $LABS => LABS, $sRGB => sRGB, $YXY => YXY, $FOURIER => FOURIER, $RGB16 => RGB16, $GREY16 => GREY16, $ARRAY => ARRAY ]; /* Table relating nip's colour space names and VIPS's Type numbers. * Options generated from this, so match the order to the order in the * Colour menu. */ colour_spaces = Enum [ $sRGB => sRGB, $Lab => LAB, $LCh => LCH, $XYZ => XYZ, $Yxy => YXY, $UCS => UCS ]; /* A slightly larger table ... the types of colorimetric image we can * have. Add mono, and the S and Q forms of LAB. */ image_colour_spaces = Enum [ $Mono => B_W, $sRGB => sRGB, $RGB16 => RGB16, $GREY16 => GREY16, $Lab => LAB, $LabQ => LABQ, $LabS => LABS, $LCh => LCH, $XYZ => XYZ, $Yxy => YXY, $UCS => UCS ]; } /* Base image type. Simple layer over vips_image. */ Image value = class _Object { _check_args = [ [value, "value", check_image] ]; // fields from VIPS header width = get_width value; height = get_height value; bands = get_bands value; format = get_format value; bits = get_bits value; coding = get_coding value; type = get_type value; xres = get_header "Xres" value; yres = get_header "Yres" value; xoffset = get_header "Xoffset" value; yoffset = get_header "Yoffset" value; filename = get_header "filename" value; // convenience ... the area our pixels occupy, as a rect rect = Rect 0 0 width height; // operator overloading // (op Image Vector) done in Vector class oo_binary_table op x = [ // handle image ++ constant here [wrap join_result_image, (has_real x || is_Vector x) && (op.op_name == "join" || op.op_name == "join'")], [wrap ite_result_image, op.op_name == "if_then_else"], [wrap (op.fn this.value (get_image x)), has_image x], [wrap (op.fn this.value (get_number x)), has_number x], // if it's not a class on the RHS, handle here ... just apply and // rewrap [wrap (op.fn this.value x), !is_class x] // all other cases handled by other classes ] ++ super.oo_binary_table op x { // wrap the result with this // x can be a non-image, eg. compare "Image v == []" vs. // "Image v == 12" wrap x = x, op.type == Operator_type.COMPOUND || !is_image x = this.Image x; join_result_image = value ++ new_stuff, op.op_name == "join" = new_stuff ++ value { new_stuff = image_new width height new_bands format coding Image_type.B_W x xoffset yoffset; new_bands = get_bands x, has_bands x = 1; } [then_part, else_part] = x; // get things about our output from inputs in this order objects = [then_part, else_part, this]; // properties of our output image target_bands = get_member_list has_bands get_bands objects; target_type = get_member_list has_type get_type objects; // if one of then/else is an image, get the target format from that // otherwise, let the non-image objects set the target target_format = get_member_list has_format get_format x, has_member_list has_format x = NULL; to_image x = to_image_size width height target_bands target_format x; [then', else'] = map to_image x; ite_result_image = image_set_type target_type (if value then then' else else'); } // FIXME ... yuk ... don't use operator hints, just always rewrap if // we have an image result // forced on us by things like abs: // abs Vector -> real // abs Image -> Image // does not fit well with COMPOUND/whatever scheme oo_unary_table op = [ [this.Image result, is_image result], [result, true] ] ++ super.oo_unary_table op { result = op.fn this.value; } } /* Construct an image from a file. */ Image_file filename = class Image value { _check_args = [ [filename, "filename", check_string] ]; value = vips_image filename; } Region image left top width height = class Image value { _check_args = [ [image, "Image", check_Image], [left, "left", check_real], [top, "top", check_real], [width, "width", check_preal], [height, "height", check_preal] ]; // a rect for our coordinates // region.rect gets the rect for the extracted image region_rect = Rect left top width height; // we need to always succeed ... value is our enclosing image if we're // out of bounds value = extract_area left top width height image.value, image.rect.includes_rect region_rect = image.value; } Area image left top width height = class scope.Region image left top width height { Region image left top width height = this.Area image left top width height; } Arrow image left top width height = class scope.Rect left top width height { _check_args = [ [image, "Image", check_Image], [left, "left", check_real], [top, "top", check_real], [width, "width", check_real], [height, "height", check_real] ]; Rect l t w h = this.Arrow image l t w h; } HGuide image top = class scope.Arrow image image.rect.left top image.width 0 { Arrow image left top width height = this.HGuide image top; } VGuide image left = class scope.Arrow image left image.rect.top 0 image.height { Arrow image left top width height = this.VGuide image left; } Mark image left top = class scope.Arrow image left top 0 0 { Arrow image left top width height = this.Mark image left top; } // convenience functions: ... specify position as [0 .. 1) Region_relative image u v w h = Region image (image.width * u) (image.height * v) (image.width * w) (image.height * h); Area_relative image u v w h = Area image (image.width * u) (image.height * v) (image.width * w) (image.height * h); Arrow_relative image u v w h = Arrow image (image.width * u) (image.height * v) (image.width * w) (image.height * h); VGuide_relative image v = VGuide image (image.height * v); HGuide_relative image u = HGuide image (image.width * u); Mark_relative image u v = Mark image (image.width * u) (image.height * v); Interpolate_type = class { NEAREST_NEIGHBOUR = 0; BILINEAR = 1; BICUBIC = 2; LBB = 3; NOHALO = 4; VSQBS = 5; // Should introspect to get the list of interpolators :-( // We can "dir" on VipsInterpolate to get a list of them, but we // can't get i18n'd descriptions until we have more // introspection stuff in nip2. /* Table to map interpol numbers to descriptive strings */ descriptions = [ _ "Nearest neighbour", _ "Bilinear", _ "Bicubic", _ "Upsize: reduced halo bicubic (LBB)", _ "Upsharp: reduced halo bicubic with edge sharpening (Nohalo)", _ "Upsmooth: quadratic B-splines with jaggy reduction (VSQBS)" ]; /* And to vips type names. */ types = [ "VipsInterpolateNearest", "VipsInterpolateBilinear", "VipsInterpolateBicubic", "VipsInterpolateLbb", "VipsInterpolateNohalo", "VipsInterpolateVsqbs" ]; } Interpolate type options = class { value = vips_object_new Interpolate_type.types?type [] options; } Interpolate_bilinear = Interpolate Interpolate_type.BILINEAR []; Interpolate_picker default = class Interpolate interp.value [] { _vislevel = 2; interp = Option "Interpolation" Interpolate_type.descriptions default; } Render_intent = class { PERCEPTUAL = 0; RELATIVE = 1; SATURATION = 2; ABSOLUTE = 3; /* Table to get names <-> numbers. */ names = Enum [ _ "Perceptual" => PERCEPTUAL, _ "Relative" => RELATIVE, _ "Saturation" => SATURATION, _ "Absolute" => ABSOLUTE ]; } // abstract base class for toolkit menus Menu = class {} // a "----" line in a menu Menuseparator = class Menu {} // abstract base class for items in menus Menuitem label tooltip = class Menu {} Menupullright label tooltip = class Menuitem label tooltip {} Menuaction label tooltip = class Menuitem label tooltip {} /* Plots. */ Plot_style = class { POINT = 0; LINE = 1; SPLINE = 2; BAR = 3; names = Enum [ _ "Point" => POINT, _ "Line" => LINE, _ "Spline" => SPLINE, _ "Bar" => BAR ]; } Plot_format = class { YYYY = 0; XYYY = 1; XYXY = 2; names = Enum [ _ "YYYY" => YYYY, _ "XYYY" => XYXY, _ "XYXY" => XYXY ]; } Plot_type = class { /* Lots of Ys (ie. multiple line plots). */ YYYY = 0; /* First column of matrix is X position, others are Ys (ie. multiple XY * line plots, all with the same Xes). */ XYYY = 1; /* Many independent XY plots. */ XYXY = 2; } /* "options" is a list of ["key", value] pairs. */ Plot options value = class scope.Image value { Image value = this.Plot options value; } Plot_matrix options value = class Plot options (to_image value).value { } Plot_histogram value = class scope.Plot [] value { } Plot_xy value = class scope.Plot [$format => Plot_format.XYYY] value { } /* A no-value type. Call it NULL for C-alike fun. Used by Group to indicate * empty slots, for example. */ NULL = class _Object { oo_binary_table op x = [ // the only operation we allow is equality .. use pointer equality, // this lets us test a == NULL and a != NULL [this === x, op.type == Operator_type.RELATIONAL && op.op_name == "equal"], [this !== x, op.type == Operator_type.RELATIONAL && op.op_name == "not_equal"] ] ++ super.oo_binary_table op x; } nip2-8.7.0/share/nip2/compat/7.38/Makefile.am0000644000175000017500000000054313224651032015207 00000000000000startdir = $(pkgdatadir)/compat/7.38 start_DATA = \ Math.def \ Image.def \ Colour.def \ Tasks.def \ Object.def \ Filter.def \ Matrix.def \ Widgets.def \ Histogram.def \ _joe_extra.def \ _joe_utilities.def \ _convert.def \ _generate.def \ _list.def \ _predicate.def \ _stdenv.def \ _Object.def \ _types.def EXTRA_DIST = $(start_DATA) nip2-8.7.0/share/nip2/compat/7.16/0000755000175000017500000000000013350464160013231 500000000000000nip2-8.7.0/share/nip2/compat/7.16/_stdenv.def0000644000175000017500000014732513224651032015303 00000000000000/* Various operators as functions. */ logical_and a b = a && b; logical_or a b = a || b; bitwise_and a b = a & b; bitwise_or a b = a | b; eor a b = a ^ b; left_shift a b = a << b; right_shift a b = a >> b; not a = !a; less a b = a < b; more a b = a > b; less_equal a b = a <= b; more_equal a b = a >= b; equal a b = a == b; not_equal a b = a != b; pointer_equal a b = a === b; not_pointer_equal a b = a !== b; add a b = a + b; subtract a b = a - b; multiply a b = a * b; divide a b = a / b; idivide a b = (int) ((int) a / (int) b); power a b = a ** b; square x = x * x; remainder a b = a % b; cons a b = a : b; dot a b = a . ( b ); join a b = a ++ b; subscript a b = a ? b; generate s n f = [s, n .. f]; comma r i = (r, i); compose f g = f @ g; // our only trinary operator is actually a binary operator if_then_else a x = if a then x?0 else x?1; cast_unsigned_char x = (unsigned char) x; cast_signed_char x = (signed char) x; cast_unsigned_short x = (unsigned short) x; cast_signed_short x = (signed short) x; cast_unsigned_int x = (unsigned int) x; cast_signed_int x = (signed int) x; cast_float x = (float) x; cast_double x = (double) x; cast_complex x = (complex) x; cast_double_complex x = (double complex) x; unary_minus x = -x; negate x = !x; complement x = ~x; unary_plus x = +x; // the function we call for "a -> v" expressions mksvpair s v = [s, v], is_string s = error "not str on lhs of ->"; // the vector ops ... im is an image, vec is a real_list vec op_name im vec = im_lintra_vec ones im vec, op_name == "add" || op_name == "add'" = im_lintra_vec ones (-1 * im) vec, op_name == "subtract'" = im_lintra_vec ones im inv, op_name == "subtract" = im_lintra_vec vec im zeros, op_name == "multiply" || op_name == "multiply'" = im_lintra_vec vec (1 / im) zeros, op_name == "divide'" = im_lintra_vec recip im zeros, op_name == "divide" = im_expntra_vec im vec, op_name == "power'" = im_powtra_vec im vec, op_name == "power" = im_remainderconst_vec im vec, op_name == "remainder" = im_andimage_vec im vec, op_name == "bitwise_and" || op_name == "bitwise_and'" = im_orimage_vec im vec, op_name == "bitwise_or" || op_name == "bitwise_or'" = im_eorimage_vec im vec, op_name == "eor" || op_name == "eor'" = im_equal_vec im vec, op_name == "equal" || op_name == "equal'" = im_notequal_vec im vec, op_name == "not_equal" || op_name == "not_equal'" = im_less_vec im vec, op_name == "less" = im_moreeq_vec im vec, op_name == "less'" = im_lesseq_vec im vec, op_name == "less_equal" = im_more_vec im vec, op_name == "less_equal'" = error "unimplemented vector operation" { zeros = replicate (len vec) 0; ones = replicate (len vec) 1; recip = map (divide 1) vec; inv = map (multiply (-1)) vec; } // make a name value pair mknvpair n v = [n, v], is_string n = error "not [char] on LHS of =>"; /* Macbeth chart patch names. */ macbeth_names = [ "Dark skin", "Light skin", "Blue sky", "Foliage", "Blue flower", "Bluish green", "Orange", "Purplish blue", "Moderate red", "Purple", "Yellow green", "Orange yellow", "Blue", "Green", "Red", "Yellow", "Magenta", "Cyan", "White (density 0.05)", "Neutral 8 (density 0.23)", "Neutral 6.5 (density 0.44)", "Neutral 5 (density 0.70)", "Neutral 3.5 (density 1.05)", "Black (density 1.50)" ]; bandsplit x = oo_unary_function bandsplit_op x, is_class x = map (subscript x) [0 .. bands - 1], is_image x = error (_ "bad arguments to " ++ "bandsplit") { bands = get_header "Bands" x; bandsplit_op = Operator "bandsplit" (map Image @ bandsplit) Operator_type.COMPOUND false; } bandjoin l = wrapper joined, has_wrapper = joined, is_listof has_image l = error (_ "bad arguments to " ++ "bandjoin") { has_wrapper = has_member_list (has_member "Image") l; wrapper = get_member_list (has_member "Image") (get_member "Image") l; joined = im_gbandjoin (map get_image l); } mean x = oo_unary_function mean_op x, is_class x = im_avg x, is_image x = mean_list x, is_list x = error (_ "bad arguments (" ++ print x ++ ") to " ++ "mean") { mean_op = Operator "mean" mean Operator_type.COMPOUND false; mean_list l = sum l / size l; // number of elements in some sort of nested-list thing size l = foldr acc 0 l { acc x total = total + size x, is_list x = total + 1; } // add elements in a nested-list thing sum l = foldr acc 0 l { acc x total = total + sum x, is_list x = total + x; } } meang x = (appl (power e) @ mean @ appl log) x { appl fn x = map fn x, is_list x = fn x; } // zero-excluding mean meanze x = oo_unary_function meanze_op x, is_class x = meanze_image x, is_image x = meanze_list x, is_list x = error (_ "bad arguments (" ++ print x ++ ") to " ++ "meanze") { meanze_op = Operator "meanze" meanze Operator_type.COMPOUND false; meanze_list l = sum l / size l; // number of non-zero elements in some sort of nested-list thing size l = foldr acc 0 l { acc x total = total + size x, is_list x = total + 1, x != 0; = total; } // add elements in a nested-list thing sum l = foldr acc 0 l { acc x total = total + sum x, is_list x = total + x; } // image mean meanze_image i = sum / N { w = get_width i; h = get_height i; b = get_bands i; st = stats i; sum = st.value?0?2; // find non-zero pixels (not zero in all bands) zp = im_notequal_vec i (replicate b 0); // number of non-zero pixels N = b * (mean zp * w * h) / 255; } } deviation x = oo_unary_function deviation_op x, is_class x = im_deviate x, is_image x = deviation_list x, is_real_list x || is_matrix x = error (_ "bad arguments to " ++ "deviation") { deviation_op = Operator "deviation" deviation Operator_type.COMPOUND false; deviation_list l = (abs (s2 - (s * s / n)) / (n - 1)) ** 0.5 { [n, s, s2] = sum_sum2_list l; } // return n, sum, sum of squares for a list of reals sum_sum2_list x = foldr accumulate [0, 0, 0] x { accumulate x sofar = [n + 1, x + s, x * x + s2], is_real x = [n + n', s + s', s2 + s2'], is_list x = error "sum_sum2_list: not real or [real]" { [n, s, s2] = sofar; [n', s', s2'] = sum_sum2_list x; } } } deviationze x = oo_unary_function deviationze_op x, is_class x = deviationze_image x, is_image x = deviationze_list x, is_real_list x || is_matrix x = error (_ "bad arguments to " ++ "deviationze") { deviationze_op = Operator "deviationze" deviationze Operator_type.COMPOUND false; deviationze_list l = (abs (s2 - (s * s / n)) / (n - 1)) ** 0.5 { [n, s, s2] = sum_sum2_list l; } // return number of non-zero elements, sum, sum of squares for a list of // reals sum_sum2_list x = foldr accumulate [0, 0, 0] x { accumulate x sofar = sofar, is_real x && x == 0 = [n + 1, x + s, x * x + s2], is_real x = [n + n', s + s', s2 + s2'], is_list x = error "sum_sum2_list: not real or [real]" { [n, s, s2] = sofar; [n', s', s2'] = sum_sum2_list x; } } deviationze_image i = ((sum2 - sum * sum / N) / (N - 1)) ** 0.5 { w = get_width i; h = get_height i; b = get_bands i; st = stats i; sum = st.value?0?2; sum2 = st.value?0?3; // find non-zero pixels (not zero in all bands) zp = im_notequal_vec i (replicate b 0); // number of non-zero pixels N = b * (mean zp * w * h) / 255; } } // find the centre of gravity of a histogram gravity x = oo_unary_function gravity_op x, is_class x = im_hist_gravity x, is_hist x = gravity_list x, is_list x = error (_ "bad arguments to " ++ "gravity") { gravity_op = Operator "gravity" gravity Operator_type.COMPOUND false; // centre of gravity of a histogram... use the histogram to weight an // identity, then sum, then find the mean element im_hist_gravity h = m { // make horizontal h' = rot270 h, get_width h == 1 = h, get_height h == 1 = error "width or height not 1"; // number of elements w = get_width h'; // matching identity i = im_identity_ushort 1 w, w <= 2 ** 16 - 1 = make_xy w 1 ? 0; // weight identity and sum s = mean (i * h') * w; // sum of original histogram s' = mean h * w; // weighted mean m = s / s'; } gravity_list l = m { w = len l; // matching identity i = [0, 1 .. w - 1]; // weight identity and sum s = sum (map2 multiply i l); // sum of original histogram s' = sum l; // weighted mean m = s / s'; } } project x = oo_unary_function project_op x, is_class x = im_project x, is_image x = error (_ "bad arguments to " ++ "project") { project_op = Operator "project" project Operator_type.COMPOUND false; } abs x = oo_unary_function abs_op x, is_class x = im_abs x, is_image x = abs_cmplx x, is_complex x = abs_num x, is_real x = abs_list x, is_real_list x = abs_list (map abs_list x), is_matrix x = error (_ "bad arguments to " ++ "abs") { abs_op = Operator "abs" abs Operator_type.COMPOUND false; abs_list l = (sum (map square l)) ** 0.5; abs_num n = n, n >= 0 = -n; abs_cmplx c = ((re c)**2 + (im c)**2) ** 0.5; } copy x = oo_unary_function copy_op x, is_class x = im_copy x, is_image x = x { copy_op = Operator "copy" copy Operator_type.COMPOUND_REWRAP false; } // like abs, but treat pixels as vectors ... ie. always get a 1-band image // back ... also treat matricies as lists of vectors // handy for dE from object difference abs_vec x = oo_unary_function abs_vec_op x, is_class x = abs_vec_image x, is_image x = abs_vec_cmplx x, is_complex x = abs_vec_num x, is_real x = abs_vec_list x, is_real_list x = mean (map abs_vec_list x), is_matrix x = error (_ "bad arguments to " ++ "abs_vec") { abs_vec_op = Operator "abs_vec" abs_vec Operator_type.COMPOUND false; abs_vec_list l = (sum (map square l)) ** 0.5; abs_vec_num n = n, n >= 0 = -n; abs_vec_cmplx c = ((re c)**2 + (im c)**2) ** 0.5; abs_vec_image im = (sum (map square (bandsplit im))) ** 0.5; } transpose x = oo_unary_function transpose_op x, is_class x = transpose_image x, is_image x = transpose_list x, is_listof is_list x = error (_ "bad arguments to " ++ "transpose") { transpose_op = Operator "transpose" transpose Operator_type.COMPOUND_REWRAP false; transpose_list l = [], l' == [] = (map hd l') : (transpose_list (map tl l')) { l' = takewhile (not_equal []) l; } transpose_image = im_flipver @ im_rot270; } rot45 x = oo_unary_function rot45_op x, is_class x = error "rot45 image: not implemented", is_image x = error (_ "bad arguments to " ++ "rot45") { rot45_op = Operator "rot45" rot45_object Operator_type.COMPOUND_REWRAP false; rot45_object x = rot45_matrix x, is_odd_square_matrix x = error "rot45 image: not implemented", is_image x = error (_ "bad arguments to " ++ "rot45"); // slow, but what the heck rot45_matrix l = (im_rotate_dmask45 (Matrix l)).value; } // apply an image function to a [[real]] ... matrix is converted to a 1 band // image for processing apply_matrix_as_image fn m = (get_value @ im_vips2mask @ fn @ im_mask2vips @ Matrix) m; // a general image/matrix operation where the mat version is most easily done // by converting mat->image->mat apply_matim_operation name fn x = oo_unary_function class_op x, is_class x = fn x, is_image x = apply_matrix_as_image fn x, is_matrix x = error (_ "bad arguments to " ++ name) { class_op = Operator name (apply_matim_operation name fn) Operator_type.COMPOUND_REWRAP false; } rot90 = apply_matim_operation "rot90" im_rot90; rot180 = apply_matim_operation "rot180" im_rot180; rot270 = apply_matim_operation "rot270" im_rot270; rotquad = apply_matim_operation "rotquad" im_rotquad; fliplr = apply_matim_operation "fliplr" im_fliphor; fliptb = apply_matim_operation "flipud" im_flipver; image_set_type type x = oo_unary_function image_set_type_op x, is_class x = im_copy_set x (to_real type) (get_header "Xres" x) (get_header "Yres" x) (get_header "Xoffset" x) (get_header "Yoffset" x), is_image x = error (_ "bad arguments to " ++ "image_set_type:" ++ print type ++ " " ++ print x) { image_set_type_op = Operator "image_set_type" (image_set_type type) Operator_type.COMPOUND_REWRAP false; } image_set_origin xoff yoff x = oo_unary_function image_set_origin_op x, is_class x = im_copy_set x (get_header "Type" x) (get_header "Xres" x) (get_header "Yres" x) (to_real xoff) (to_real yoff), is_image x = error (_ "bad arguments to " ++ "image_set_origin") { image_set_origin_op = Operator "image_set_origin" (image_set_origin xoff yoff) Operator_type.COMPOUND_REWRAP false; } cache tile_width tile_height max_tiles x = oo_unary_function cache_op x, is_class x = im_cache x (to_real tile_width) (to_real tile_height) (to_real max_tiles), is_image x = error (_ "bad arguments to " ++ "cache") { cache_op = Operator "cache" (cache tile_width tile_height max_tiles) Operator_type.COMPOUND_REWRAP false; } tile across down x = oo_unary_function tile_op x, is_class x = im_replicate x (to_real across) (to_real down), is_image x = error (_ "bad arguments to " ++ "tile") { tile_op = Operator "tile" (tile across down) Operator_type.COMPOUND_REWRAP false; } grid tile_height across down x = oo_unary_function grid_op x, is_class x = im_grid x (to_real tile_height) (to_real across) (to_real down), is_image x = error (_ "bad arguments to " ++ "grid") { grid_op = Operator "grid" (grid tile_height across down) Operator_type.COMPOUND_REWRAP false; } max_pair a b = a, a > b = b; min_pair a b = a, a < b = b; range min value max = min_pair max (max_pair min value); max x = oo_unary_function max_op x, is_class x = im_max x, is_image x = max_list x, is_list x = x, is_number x = error (_ "bad arguments to " ++ "max") { max_op = Operator "max" max Operator_type.COMPOUND false; max_list x = error "max []", x == [] = foldr1 max_pair x, is_real_list x = foldr1 max_pair (map max_list x), is_list x = max x; } min x = oo_unary_function min_op x, is_class x = im_min x, is_image x = min_list x, is_list x = x, is_number x = error (_ "bad arguments to " ++ "min") { min_op = Operator "min" min Operator_type.COMPOUND false; min_list x = error "min []", x == [] = foldr1 min_pair x, is_real_list x = foldr1 min_pair (map min_list x), is_list x = min x; } maxpos x = oo_unary_function maxpos_op x, is_class x = im_maxpos x, is_image x = maxpos_matrix x, is_matrix x = maxpos_list x, is_list x = error (_ "bad arguments to " ++ "maxpos") { maxpos_op = Operator "maxpos" maxpos Operator_type.COMPOUND false; maxpos_matrix m = (-1, -1), m == [[]] = (indexes?row, row) { max_value = max (Matrix m); indexes = map (index (equal max_value)) m; row = index (not_equal (-1)) indexes; } maxpos_list l = -1, l == [] = index (equal (max l)) l; } minpos x = oo_unary_function minpos_op x, is_class x = im_minpos x, is_image x = minpos_matrix x, is_matrix x = minpos_list x, is_list x = error (_ "bad arguments to " ++ "minpos") { minpos_op = Operator "minpos" minpos Operator_type.COMPOUND false; minpos_matrix m = (-1, -1), m == [[]] = (indexes?row, row) { min_value = min (Matrix m); indexes = map (index (equal min_value)) m; row = index (not_equal (-1)) indexes; } minpos_list l = -1, l == [] = index (equal (min l)) l; } stats x = oo_unary_function stats_op x, is_class x = im_stats x, is_image x = im_stats (to_image x).value, is_matrix x = error (_ "bad arguments to " ++ "stats") { stats_op = Operator "stats" stats Operator_type.COMPOUND false; } e = 2.7182818284590452354; pi = 3.14159265358979323846; rad d = 2 * pi * (d / 360); deg r = 360 * r / (2 * pi); sign x = oo_unary_function sign_op x, is_class x = im_sign x, is_image x = sign_cmplx x, is_complex x = sign_num x, is_real x = error (_ "bad arguments to " ++ "sign") { sign_op = Operator "sign" sign Operator_type.COMPOUND_REWRAP false; sign_num n = 0, n == 0 = 1, n > 0 = -1; sign_cmplx c = (0, 0), mod == 0 = (re c / mod, im c / mod) { mod = abs c; } } rint x = oo_unary_function rint_op x, is_class x = im_rint x, is_image x = rint_value x, is_number x = error (_ "bad arguments to " ++ "rint") { rint_op = Operator "rint" rint Operator_type.ARITHMETIC false; rint_value x = (int) (x + 0.5), x > 0 = (int) (x - 0.5); } scale x = oo_unary_function scale_op x, is_class x = (unsigned char) x, is_number x = im_scale x, is_image x = scale_list x, is_real_list x || is_matrix x = error (_ "bad arguments to " ++ "scale") { scale_op = Operator "scale" scale Operator_type.COMPOUND_REWRAP false; scale_list l = apply_scale s o l { mn = find_limit min_pair l; mx = find_limit max_pair l; s = 255.0 / (mx - mn); o = -(mn * s); } find_limit fn l = find_limit fn (map (find_limit fn) l), is_listof is_list l = foldr1 fn l; apply_scale s o x = x * s + o, is_number x = map (apply_scale s o) x; } scaleps x = oo_unary_function scale_op x, is_class x = im_scaleps x, is_image x = error (_ "bad arguments to " ++ "scale") { scale_op = Operator "scaleps" scaleps Operator_type.COMPOUND_REWRAP false; } fwfft x = oo_unary_function fwfft_op x, is_class x = im_fwfft x, is_image x = error (_ "bad arguments to " ++ "fwfft") { fwfft_op = Operator "fwfft" fwfft Operator_type.COMPOUND_REWRAP false; } invfft x = oo_unary_function invfft_op x, is_class x = im_invfftr x, is_image x = error (_ "bad arguments to " ++ "invfft") { invfft_op = Operator "invfft" invfft Operator_type.COMPOUND_REWRAP false; } falsecolour x = oo_unary_function falsecolour_op x, is_class x = image_set_type Image_type.sRGB (im_falsecolour x), is_image x = error (_ "bad arguments to " ++ "falsecolour") { falsecolour_op = Operator "falsecolour" falsecolour Operator_type.COMPOUND_REWRAP false; } polar x = oo_unary_function polar_op x, is_class x = im_c2amph x, is_image x = polar_cmplx x, is_complex x = error (_ "bad arguments to " ++ "polar") { polar_op = Operator "polar" polar Operator_type.COMPOUND false; polar_cmplx r = (l, a) { a = 270, x == 0 && y < 0 = 90, x == 0 && y >= 0 = 360 + atan (y / x), x > 0 && y < 0 = atan (y / x), x > 0 && y >= 0 = 180 + atan (y / x); l = (x ** 2 + y ** 2) ** 0.5; x = re r; y = im r; } } rectangular x = oo_unary_function rectangular_op x, is_class x = im_c2rect x, is_image x = rectangular_cmplx x, is_complex x = error (_ "bad arguments to " ++ "rectangular") { rectangular_op = Operator "rectangular" rectangular Operator_type.COMPOUND false; rectangular_cmplx p = (x, y) { l = re p; a = im p; x = l * cos a; y = l * sin a; } } // we can't use colour_unary: that likes 3 band only recomb matrix x = oo_unary_function recomb_op x, is_class x = im_recomb x matrix, is_image x = recomb_real_list x, is_real_list x = map recomb_real_list x, is_matrix x = error (_ "bad arguments to " ++ "recomb") { // COMPOUND_REWRAP ... signal to the colour class to go to image and // back recomb_op = Operator "recomb" (recomb matrix) Operator_type.COMPOUND_REWRAP false; // process [1,2,3 ..] as an image recomb_real_list l = (to_matrix im').value?0 { im = (float) (to_image (Vector l)).value; im' = recomb matrix im; } } extract_area x y w h obj = oo_unary_function extract_area_op obj, is_class obj = im_extract_area obj x' y' w' h', is_image obj = map (extract_range x' w') (extract_range y' h' obj), is_matrix obj = error (_ "bad arguments to " ++ "extract_area") { x' = to_real x; y' = to_real y; w' = to_real w; h' = to_real h; extract_area_op = Operator "extract_area" (extract_area x y w h) Operator_type.COMPOUND_REWRAP false; extract_range from length list = (take length @ drop from) list; } extract_band b obj = subscript obj b; extract_row y obj = oo_unary_function extract_row_op obj, is_class obj = extract_area 0 y' (get_width obj) 1 obj, is_image obj = [obj?y'], is_matrix obj = error (_ "bad arguments to " ++ "extract_row") { y' = to_real y; extract_row_op = Operator "extract_row" (extract_row y) Operator_type.COMPOUND_REWRAP false; } extract_column x obj = oo_unary_function extract_column_op obj, is_class obj = extract_area x' 0 1 height obj, is_image obj = map (\row [row?x']) obj, is_matrix obj = error (_ "bad arguments to " ++ "extract_column") { x' = to_real x; height = get_header "Ysize" obj; extract_column_op = Operator "extract_column" (extract_column x) Operator_type.COMPOUND_REWRAP false; } blend cond in1 in2 = oo_binary_function blend_op cond [in1,in2], is_class cond = im_blend (get_image cond) (get_image in1) (get_image in2), has_image cond && has_image in1 && has_image in2 = error (_ "bad arguments to " ++ "blend") { blend_op = Operator "blend" blend_obj Operator_type.COMPOUND_REWRAP false; blend_obj cond x = blend_result_image { [then_part, else_part] = x; // get things about our output from inputs in this order objects = [then_part, else_part, cond]; // properties of our output image target_width = get_member_list has_width get_width objects; target_height = get_member_list has_height get_height objects; target_bands = get_member_list has_bands get_bands objects; target_format = get_member_list has_format get_format objects; target_type = get_member_list has_type get_type objects; to_image x = x, is_image x = x.value, is_Image x = black + x { black = im_black target_width target_height target_bands; } [then_image, else_image] = map (clip2fmt target_format @ to_image) [then_part, else_part]; [c, t, e] = size_alike [cond, then_image, else_image]; blend_result_image = image_set_type target_type (im_blend c t e); } } insert x y small big = oo_binary_function insert_op small big, is_class small = oo_binary'_function insert_op small big, is_class big = im_insert big' small' (to_real x) (to_real y), is_image small && is_image big = error (_ "bad arguments to " ++ "insert") { insert_op = Operator "insert" (insert x y) Operator_type.COMPOUND_REWRAP false; [small', big'] = (formats_alike @ bands_alike) [small, big]; } insert_noexpand x y small big = oo_binary_function insert_noexpand_op small big, is_class small = oo_binary'_function insert_noexpand_op small big, is_class big = im_insert_noexpand big' small' (to_real x) (to_real y), is_image small && is_image big = error (_ "bad arguments to " ++ "insert_noexpand") { insert_noexpand_op = Operator "insert_noexpand" (insert_noexpand x y) Operator_type.COMPOUND_REWRAP false; [small', big'] = (formats_alike @ bands_alike) [small, big]; } measure x y w h u v image = oo_unary_function measure_op image, is_class image = im_measure image (to_real x) (to_real y) (to_real w) (to_real h) (to_real u) (to_real v), is_image image = error (_ "bad arguments to " ++ "measure") { measure_op = Operator "measure" (measure x y w h u v) Operator_type.COMPOUND_REWRAP false; } extract_bands b n obj = oo_unary_function extract_bands_op obj, is_class obj = im_extract_bands obj (to_real b) (to_real n), is_image obj = error (_ "bad arguments to " ++ "extract_bands") { extract_bands_op = Operator "extract_bands" (extract_bands b n) Operator_type.COMPOUND_REWRAP false; } invert x = oo_unary_function invert_op x, is_class x = im_invert x, is_image x = 255 - x, is_real x = error (_ "bad arguments to " ++ "invert") { invert_op = Operator "invert" invert Operator_type.COMPOUND false; } transform ipol wrap params image = oo_unary_function transform_op image, is_class image = im_transform image (to_matrix params) (to_real ipol) (to_real wrap), is_image image = error (_ "bad arguments to " ++ "transform") { transform_op = Operator "transform" (transform ipol wrap params) Operator_type.COMPOUND_REWRAP false; } transform_search max_error max_iterations order ipol wrap sample reference = oo_binary_function transform_search_op sample reference, is_class sample = oo_binary'_function transform_search_op sample reference, is_class reference = im_transform_search sample reference (to_real max_error) (to_real max_iterations) (to_real order) (to_real ipol) (to_real wrap), is_image sample && is_image reference = error (_ "bad arguments to " ++ "transform_search") { transform_search_op = Operator "transform_search" (transform_search max_error max_iterations order ipol wrap) Operator_type.COMPOUND false; } rotate angle image = oo_binary_function rotate_op angle image, is_class angle = oo_binary'_function rotate_op angle image, is_class image = im_similarity image (cos angle) (sin angle) 0 0, is_real angle && is_image image = error (_ "bad arguments to " ++ "rotate") { rotate_op = Operator "rotate" rotate Operator_type.COMPOUND_REWRAP false; } matrix_binary fn a b = itom (fn (mtoi a) (mtoi b)) { mtoi x = im_mask2vips (Matrix x); itom x = (im_vips2mask x).value; } join_lr a b = oo_binary_function join_lr_op a b, is_class a = oo_binary'_function join_lr_op a b, is_class b = join a b { join_lr_op = Operator "join_lr" join Operator_type.COMPOUND_REWRAP false; join a b = join_im a b, is_image a && is_image b = matrix_binary join_im a b, is_matrix a && is_matrix b = error (_ "bad arguments to " ++ "join_lr"); join_im a b = insert (get_width a) 0 b a; } join_tb a b = oo_binary_function join_tb_op a b, is_class a = oo_binary'_function join_tb_op a b, is_class b = join a b { join_tb_op = Operator "join_tb" join Operator_type.COMPOUND_REWRAP false; join a b = join_im a b, is_image a && is_image b = matrix_binary join_im a b, is_matrix a && is_matrix b = error (_ "bad arguments to " ++ "join_tb"); join_im a b = insert 0 (get_height a) b a; } conj x = oo_unary_function conj_op x, is_class x = (re x, -im x), is_complex x || (is_image x && format == Image_format.COMPLEX) || (is_image x && format == Image_format.DPCOMPLEX) // assume it's some sort of real = x { format = get_header "BandFmt" x; conj_op = Operator "conj" conj Operator_type.COMPOUND false; } clip2fmt format image = oo_unary_function clip2fmt_op image, is_class image = im_clip2fmt image (to_real format), is_image image = error (_ "bad arguments to " ++ "clip2fmt") { clip2fmt_op = Operator "clip2fmt" (clip2fmt format) Operator_type.COMPOUND_REWRAP false; } embed type x y w h im = oo_unary_function embed_op im, is_class im = im_embed im (to_real type) (to_real x) (to_real y) (to_real w) (to_real h), is_image im = error (_ "bad arguments to " ++ "embed") { embed_op = Operator "embed" (embed type x y w h) Operator_type.COMPOUND_REWRAP false; } /* Morph a mask with a [[real]] matrix ... turn m2 into an image, morph it * with m1, turn it back to a matrix again. */ _morph_2_masks fn m1 m2 = m'' { image = (unsigned char) im_mask2vips (Matrix m2); m2_width = get_width image; m2_height = get_height image; // need to embed m2 in an image large enough for us to be able to // position m1 all around the edges, with a 1 pixel overlap image' = embed 0 (m1.width / 2) (m1.height / 2) (m2_width + (m1.width - 1)) (m2_height + (m1.height - 1)) image; // morph! image'' = fn m1 image'; // back to mask m' = im_vips2mask ((double) image''); // Turn 0 in output to 128 (don't care). m'' = map (map fn) m'.value { fn a = 128, a == 0; = a; } } dilate mask image = oo_unary_function dilate_op image, is_class image = im_dilate image (to_matrix mask), is_image image = error (_ "bad arguments to " ++ "dilate") { dilate_op = Operator "dilate" dilate_object Operator_type.COMPOUND_REWRAP false; dilate_object x = _morph_2_masks dilate mask x, is_matrix x = dilate mask x; } erode mask image = oo_unary_function erode_op image, is_class image = im_erode image (to_matrix mask), is_image image = error (_ "bad arguments to " ++ "erode") { erode_op = Operator "erode" erode_object Operator_type.COMPOUND_REWRAP false; erode_object x = _morph_2_masks erode mask x, is_matrix x = erode mask x; } conv mask image = oo_unary_function conv_op image, is_class image = im_conv image (to_matrix mask), is_image image = error (_ "bad arguments to " ++ "conv") { conv_op = Operator "conv" (conv mask) Operator_type.COMPOUND_REWRAP false; } convsep mask image = oo_unary_function convsep_op image, is_class image = im_convsep image (to_matrix mask), is_image image = error (_ "bad arguments to " ++ "convsep") { convsep_op = Operator "convsep" (convsep mask) Operator_type.COMPOUND_REWRAP false; } convsepf mask image = oo_unary_function convsepf_op image, is_class image = im_convsepf image (to_matrix mask), is_image image = error (_ "bad arguments to " ++ "convsepf") { convsepf_op = Operator "convsepf" (convsepf mask) Operator_type.COMPOUND_REWRAP false; } rank w h n image = oo_unary_function rank_op image, is_class image = im_rank image (to_real w) (to_real h) (to_real n), is_image image = error (_ "bad arguments to " ++ "rank") { rank_op = Operator "rank" (rank w h n) Operator_type.COMPOUND_REWRAP false; } rank_image n x = rlist x.value, is_Group x = rlist x, is_list x = error (_ "bad arguments to " ++ "rank_image") { rlist l = wrapper ranked, has_wrapper = ranked { has_wrapper = has_member_list (has_member "Image") l; wrapper = get_member_list (has_member "Image") (get_member "Image") l; ranked = im_rank_image (map get_image l) (to_real n); } } greyc iterations amplitude sharpness anisotropy alpha sigma dl da gauss_prec interpolation fast_approx x = oo_unary_function greyc_op x, is_class x = greyc_im x, is_image x = error (_ "bad argument" ++ " (" ++ print x ++ ") to " ++ "greyc") { greyc_op = Operator "greyc" (greyc iterations amplitude sharpness anisotropy alpha sigma dl da gauss_prec interpolation fast_approx) Operator_type.COMPOUND_REWRAP false; greyc_im x = im_greyc x iterations amplitude sharpness anisotropy alpha sigma dl da gauss_prec interpolation fast_approx; } greyc_mask iterations amplitude sharpness anisotropy alpha sigma dl da gauss_prec interpolation fast_approx mask x = oo_binary_function greyc_mask_op mask x, is_class mask = oo_binary'_function greyc_mask_op mask x, is_class x = greyc_im mask x, is_image mask && is_image x = error (_ "bad arguments" ++ " (" ++ print mask ++ ", " ++ print x ++ ") " ++ "to " ++ "greyc") { greyc_mask_op = Operator "greyc_mask" (greyc_mask iterations amplitude sharpness anisotropy alpha sigma dl da gauss_prec interpolation fast_approx) Operator_type.COMPOUND_REWRAP false; greyc_im mask x = im_greyc_mask x mask iterations amplitude sharpness anisotropy alpha sigma dl da gauss_prec interpolation fast_approx; } // find the correlation surface for a small image within a big one correlate small big = oo_binary_function correlate_op small big, is_class small = oo_binary'_function correlate_op small big, is_class big = im_spcor big small, is_image small && is_image big = error (_ "bad arguments to " ++ "correlate") { correlate_op = Operator "correlate" correlate Operator_type.COMPOUND_REWRAP false; } // just sum-of-squares-of-differences correlate_fast small big = oo_binary_function correlate_fast_op small big, is_class small = oo_binary'_function correlate_fast_op small big, is_class big = im_fastcor big small, is_image small && is_image big = error (_ "bad arguments to " ++ "correlate_fast") { correlate_fast_op = Operator "correlate_fast" correlate_fast Operator_type.COMPOUND_REWRAP false; } // set Type, wrap as Plot_hist if it's a class hist_tag x = oo_unary_function hist_tag_op x, is_class x = image_set_type Image_type.HISTOGRAM x, is_image x = error (_ "bad arguments to " ++ "hist_tag") { hist_tag_op = Operator "hist_tag" (Plot_histogram @ hist_tag) Operator_type.COMPOUND false; } hist_find x = oo_unary_function hist_find_op x, is_class x = im_histgr x (-1), is_image x = error (_ "bad arguments to " ++ "hist_find") { hist_find_op = Operator "hist_find" (Plot_histogram @ hist_find) Operator_type.COMPOUND false; } hist_find_nD bins image = oo_unary_function hist_find_nD_op image, is_class image = im_histnD image (to_real bins), is_image image = error (_ "bad arguments to " ++ "hist_find_nD") { hist_find_nD_op = Operator "hist_find_nD" (hist_find_nD bins) Operator_type.COMPOUND_REWRAP false; } hist_map hist image = oo_binary_function hist_map_op hist image, is_class hist = oo_binary'_function hist_map_op hist image, is_class image = im_maplut image hist, is_image hist && is_image image = error (_ "bad arguments to " ++ "hist_map") { // can't use rewrap, as we want to always wrap as image hist_map_op = Operator "hist_map" (compose (compose Image) hist_map) Operator_type.COMPOUND false; } hist_cum hist = oo_unary_function hist_cum_op hist, is_class hist = im_histcum hist, is_image hist = error (_ "bad arguments to " ++ "hist_cum") { hist_cum_op = Operator "hist_cum" hist_cum Operator_type.COMPOUND_REWRAP false; } hist_diff hist = oo_unary_function hist_diff_op hist, is_class hist = im_histdiff hist, is_image hist = error (_ "bad arguments to " ++ "hist_diff") { hist_diff_op = Operator "hist_diff" hist_diff Operator_type.COMPOUND_REWRAP false; im_histdiff h = (conv (Matrix [[-1, 1]]) @ clip2fmt (fmt (get_format h))) h { // up the format so it can represent the whole range of // possible values from this mask fmt x = Image_format.SHORT, x == Image_format.UCHAR || x == Image_format.CHAR = Image_format.INT, x == Image_format.USHORT || x == Image_format.SHORT || x == Image_format.UINT = x; } } hist_norm hist = oo_unary_function hist_norm_op hist, is_class hist = im_histnorm hist, is_image hist = error (_ "bad arguments to " ++ "hist_norm") { hist_norm_op = Operator "hist_norm" hist_norm Operator_type.COMPOUND_REWRAP false; } hist_match in ref = oo_binary_function hist_match_op in ref, is_class in = oo_binary'_function hist_match_op in ref, is_class ref = im_histspec in ref, is_image in && is_image ref = error (_ "bad arguments to " ++ "hist_match") { hist_match_op = Operator "hist_match" hist_match Operator_type.COMPOUND_REWRAP false; } hist_equalize x = hist_map ((hist_norm @ hist_cum @ hist_find) x) x; hist_equalize_local w h image = oo_unary_function hist_equalize_local_op image, is_class image = lhisteq image, is_image image = error (_ "bad arguments to " ++ "hist_equalize_local") { hist_equalize_local_op = Operator "hist_equalize_local" (hist_equalize_local w h) Operator_type.COMPOUND_REWRAP false; // loop over bands, if necessary lhisteq im = im_lhisteq im (to_real w) (to_real h), get_bands im == 1 = (foldl1 join @ map lhisteq @ bandsplit) im; } // find the threshold below which are percent of the image (percent in [0,1]) // eg. hist_thresh 0.1 x == 12, then x < 12 will light up 10% of the pixels hist_thresh percent image = x { // our own normaliser ... we don't want to norm channels separately // norm to [0,1] my_hist_norm h = h / max h; // normalised cumulative hist // we sum the channels before we normalise, because we want to treat them // all the same h = (my_hist_norm @ sum @ bandsplit @ hist_cum @ hist_find) image.value; // threshold that, then use im_profile to search for the x position in the // histogram x = mean (im_profile (h > percent) 1); } /* Sometimes useful, despite plotting now being built in, for making * diagnostic images. */ hist_plot hist = oo_unary_function hist_plot_op hist, is_class hist = im_histplot hist, is_image hist = error (_ "bad arguments to " ++ "hist_plot") { hist_plot_op = Operator "hist_plot" (Image @ hist_plot) Operator_type.COMPOUND false; } zerox d x = oo_unary_function zerox_op x, is_class x = im_zerox x (to_real d), is_image x = error (_ "bad arguments to " ++ "zerox") { zerox_op = Operator "zerox" (zerox d) Operator_type.COMPOUND_REWRAP false; } resize xfac yfac interp image = oo_unary_function resize_op image, is_class image = resize_im image, is_image image = error (_ "bad arguments to " ++ "resize") { resize_op = Operator "resize" resize_im Operator_type.COMPOUND_REWRAP false; xfac' = to_real xfac; yfac' = to_real yfac; rxfac' = 1 / xfac'; ryfac' = 1 / yfac'; resize_im im // upscale by integer factor, nearest neighbour = im_zoom im xfac' yfac', is_int xfac' && is_int yfac' && xfac' >= 1 && yfac' >= 1 && interp == Interpolate.NEAREST_NEIGHBOUR // downscale by integer factor, nearest neighbour = im_subsample im rxfac' ryfac', is_int rxfac' && is_int ryfac' && rxfac' >= 1 && ryfac' >= 1 && interp == Interpolate.NEAREST_NEIGHBOUR // upscale by any factor, nearest neighbour // can't really do this right ... upscale by integer part, then // bilinear to exact size = scale xg?1 yg?1 (im_zoom im xg?0 yg?0), xfac' >= 1 && yfac' >= 1 && interp == Interpolate.NEAREST_NEIGHBOUR // downscale by any factor, nearest neighbour // can't really do this right ... downscale by integer part, // then bilinear to exact size = scale xs?1 ys?1 (im_subsample im xs?0 ys?0), rxfac' >= 1 && ryfac' >= 1 && interp == Interpolate.NEAREST_NEIGHBOUR // upscale by any factor, bilinear = scale xfac' yfac' im, xfac' >= 1 && yfac' >= 1 && interp == Interpolate.BILINEAR // downscale by any factor, bilinear // block shrink by integer factor, then bilinear resample to // exact = scale xs?1 ys?1 (im_shrink im xs?0 ys?0), rxfac' >= 1 && ryfac' >= 1 && interp == Interpolate.BILINEAR = error ("resize: unimplemented argument combination:\n" ++ " xfac = " ++ print xfac' ++ "\n" ++ " yfac = " ++ print yfac' ++ "\n" ++ " interp = " ++ print interp ++ " (" ++ Interpolate.names.lookup 1 0 interp ++ ")") { // convert a float scale to integer plus fraction // eg. scale by 2.5 becomes [2, 1.25] (x * 2.5 == x * 2 * 1.25) break f = [floor f, f / floor f]; // same, but for downsizing ... turn a float scale which is less than // 1 into an int shrink and a float scale // complicated: the int shrink may round the size down (eg. imagine // subsampling a 11 pixel wide image by 3, we'd get a 3 pixel wide // image, not a 3.666 pixel wide image), so pass in the size of image // we are operating on and adjust for any rounding // so ... x is (eg.) 467, f is (eg. 128/467, about 0.274) rbreak x f = [int_shrink, float_resample] { // the size of image we are aiming for after the combined int and // float resample x' = x * f; // int part int_shrink = floor (1 / f); // size after int shrink x'' = floor (x / int_shrink); // therefore what we need for the float part float_resample = x' / x''; } width = get_width im; height = get_height im; // grow and shrink factors xg = break xfac'; yg = break yfac'; xs = rbreak width xfac'; ys = rbreak height yfac'; // binlinear resize scale xfac yfac im = im_affine im xfac 0 0 yfac 0 0 0 0 (rint (get_width im * xfac)) (rint (get_height im * yfac)); } } sharpen radius x1 y2 y3 m1 m2 in = oo_unary_function sharpen_op in, is_class in = im_sharpen in (to_real radius) (to_real x1) (to_real y2) (to_real y3) (to_real m1) (to_real m2), is_image in = error (_ "bad arguments to " ++ "sharpen") { sharpen_op = Operator "sharpen" (sharpen radius x1 y2 y3 m1 m2) Operator_type.COMPOUND_REWRAP false; } tone_analyse s m h sa ma ha in = oo_unary_function tone_analyse_op in, is_class in = im_tone_analyse in (to_real s) (to_real m) (to_real h) (to_real sa) (to_real ma) (to_real ha), is_image in = error (_ "bad arguments to " ++ "tone_analyse") { tone_analyse_op = Operator "tone_analyse" (Plot_histogram @ tone_analyse s m h sa ma ha) Operator_type.COMPOUND false; } tone_map hist image = oo_binary_function tone_map_op hist image, is_class hist = oo_binary'_function tone_map_op hist image, is_class image = im_tone_map image hist, is_image hist && is_image image = error (_ "bad arguments to " ++ "tone_map") { tone_map_op = Operator "tone_map" tone_map Operator_type.COMPOUND_REWRAP false; } tone_build fmt b w s m h sa ma ha = (Plot_histogram @ clip2fmt fmt) (im_tone_build_range mx mx (to_real b) (to_real w) (to_real s) (to_real m) (to_real h) (to_real sa) (to_real ma) (to_real ha)) { mx = Image_format.maxval fmt; } icc_export depth profile intent in = oo_unary_function icc_export_op in, is_class in = im_icc_export_depth in (to_real depth) (expand profile) (to_real intent), is_image in = error (_ "bad arguments to " ++ "icc_export") { icc_export_op = Operator "icc_export" (icc_export depth profile intent) Operator_type.COMPOUND_REWRAP false; } icc_import profile intent in = oo_unary_function icc_import_op in, is_class in = im_icc_import in (expand profile) (to_real intent), is_image in = error (_ "bad arguments to " ++ "icc_import") { icc_import_op = Operator "icc_import" (icc_import profile intent) Operator_type.COMPOUND_REWRAP false; } icc_import_embedded intent in = oo_unary_function icc_import_embedded_op in, is_class in = im_icc_import_embedded in (to_real intent), is_image in = error (_ "bad arguments to " ++ "icc_import_embedded") { icc_import_embedded_op = Operator "icc_import_embedded" (icc_import_embedded intent) Operator_type.COMPOUND_REWRAP false; } icc_transform in_profile out_profile intent in = oo_unary_function icc_transform_op in, is_class in = im_icc_transform in (expand in_profile) (expand out_profile) (to_real intent), is_image in = error (_ "bad arguments to " ++ "icc_transform") { icc_transform_op = Operator "icc_transform" (icc_transform in_profile out_profile intent) Operator_type.COMPOUND_REWRAP false; } icc_ac2rc profile in = oo_unary_function icc_ac2rc_op in, is_class in = im_icc_ac2rc in (expand profile), is_image in = error (_ "bad arguments to " ++ "icc_ac2rc") { icc_ac2rc_op = Operator "icc_ac2rc" (icc_ac2rc profile) Operator_type.COMPOUND_REWRAP false; } flood_blob x y v image = oo_unary_function flood_blob_op image, is_class image = im_flood_blob_copy image (to_real x) (to_real y) v, is_image image = error (_ "bad arguments to " ++ "flood_blob") { flood_blob_op = Operator "flood_blob" (flood_blob x y v) Operator_type.COMPOUND_REWRAP false; } print_base base in = oo_unary_function print_base_op in, is_class in = map (print_base base) in, is_list in = print_base_real, is_real in = error (_ "bad arguments to " ++ "print_base") { print_base_op = Operator "print_base" (print_base base) Operator_type.COMPOUND false; print_base_real = error "print_base: bad base", base < 2 || base > 16 = "0", in < 0 || chars == [] = reverse chars { digits = map (\x x % base) (takewhile (not_equal 0) (iterate (\x idivide x base) in)); chars = map tohd digits; tohd x = (char) ((int) '0' + x), x < 10 = (char) ((int) 'A' + (x - 10)); } } /* id x: the identity function * * id :: * -> * */ id x = x; /* const x y: junk y, return x * * (const 3) is the function that always returns 3. * const :: * -> ** -> * */ const x y = x; /* converse fn a b: swap order of args to fn * * converse fn a b == fn b a * converse :: (* -> ** -> ***) -> ** -> * -> *** */ converse fn a b = fn b a; /* fix fn x: find the fixed point of a function */ fix fn x = limit (iterate fn x); /* until pred fn n: apply fn to n until pred succeeds; return that value * * until (more 1000) (multiply 2) 1 = 1024 * until :: (* -> bool) -> (* -> *) -> * -> * */ until pred fn n = n, pred n = until pred fn (fn n); /* Infinite list of primes. */ primes = 1 : (sieve [2 ..]) { sieve l = hd l : sieve (filter (nmultiple (hd l)) (tl l)); nmultiple n x = x / n != (int) (x / n); } /* Map an n-ary function (pass the args as a list) over groups of objects. * The objects can be single objects or groups. If more than one * object is a group, we iterate for the length of the smallest group. * Don't loop over plain lists, since we want (eg.) "mean [1, 2, 3]" to work. * Treat [] as no-value --- ie. if any of the inputs are [] we put [] into the * output and don't apply the function. copy-pasted into _types, keep in sync */ map_nary fn args = fn args, groups == [] = Group (map process [0, 1 .. shortest - 1]) { // find all the group arguments groups = filter is_Group args; // what's the length of the shortest group arg? shortest = foldr1 min_pair (map (len @ get_value) groups); // process index n ... pull that member from each argument // recurse to handle application, so we work for nested groups too process n = NULL, any (map (is_noval n) args) = map_nary fn (map (extract n) args) { extract n arg = arg.value?n, is_Group arg = arg; is_noval n arg = is_Group arg && arg.value?n == NULL; } } /* Map a 1-ary function over an object. */ map_unary fn a = map_nary (list_1ary fn) [a]; /* Map a 2-ary function over a pair of objects. */ map_binary fn a b = map_nary (list_2ary fn) [a, b]; /* Map a 3-ary function over three objects. */ map_trinary fn a b c = map_nary (list_3ary fn) [a, b, c]; /* Map a 4-ary function over three objects. */ map_quaternary fn a b c d = map_nary (list_4ary fn) [a, b, c, d]; /* Same as map_nary, but for lists. Handy for (eg.) implementing arith ops on * vectors and matricies. */ map_nary_list fn args = fn args, lists == [] = map process [0, 1 .. shortest - 1] { // find all the list arguments lists = filter is_list args; // what's the length of the shortest list arg? shortest = foldr1 min_pair (map len lists); // process index n ... pull that member from each argument // recurse to handle application, so we work for nested lists too process n = map_nary_list fn (map (extract n) args) { extract n arg = arg?n, is_list arg = arg; } } map_unaryl fn a = map_nary_list (list_1ary fn) [a]; map_binaryl fn a b = map_nary_list (list_2ary fn) [a, b]; /* Remove features smaller than x pixels across from an image. This used to be * rather complex ... convsep is now good enough to use. */ smooth x image = convsep (matrix_gaussian_blur (to_real x * 2)) image; /* Chop up an image into a list of lists of smaller images. Pad edges with * black. */ imagearray_chop tile_width tile_height hoverlap voverlap i = map chop' [0, vstep .. last_y] { width = get_width i; height = get_height i; bands = get_bands i; format = get_format i; type = get_type i; tile_width' = to_real tile_width; tile_height' = to_real tile_height; hoverlap' = to_real hoverlap; voverlap' = to_real voverlap; /* Unique pixels per tile. */ hstep = tile_width' - hoverlap'; vstep = tile_height' - voverlap'; /* Number of tiles across and down. Remember the case where width == * hstep. */ across = (int) ((width - 1) / hstep) + 1; down = (int) ((height - 1) / vstep) + 1; /* top/left of final tile. */ last_x = hstep * (across - 1); last_y = vstep * (down - 1); /* How much do we need to pad by? */ sx = last_x + tile_width'; sy = last_y + tile_height'; /* Expand image with black to pad size. */ pad = embed 0 0 0 sx sy i; /* Chop up a row. */ chop' y = map chop'' [0, hstep .. last_x] { chop'' x = extract_area x y tile_width' tile_height' pad; } } /* Reassemble image. */ imagearray_assemble hoverlap voverlap il = (image_set_origin 0 0 @ foldl1 tbj @ map (foldl1 lrj)) il { lrj l r = insert (get_width l + hoverlap) 0 r l; tbj t b = insert 0 (get_height t + voverlap) b t; } /* Generate an nxn identity matrix. */ identity_matrix n = error "identity_matrix: n > 0", n < 1 = map line [0 .. n - 1] { line p = take p [0, 0 ..] ++ [1] ++ take (n - p - 1) [0, 0 ..]; } /* Incomplete gamma function Q(a, x) == 1 - P(a, x) FIXME ... this is now a builtin, until we can get a nice List class (requires overloadable ':') gammq a x = error "bad args", x < 0 || a <= 0 = 1 - gamser, x < a + 1 = gammcf { gamser = (gser a x)?0; gammcf = (gcf a x)?0; } */ /* Incomplete gamma function P(a, x) evaluated as series representation. Also * return ln(gamma(a)) ... nr in c, pp 218 */ gser a x = [gamser, gln] { gln = gammln a; gamser = error "bad args", x < 0 = 0, x == 0 = 1 // fix this { // maximum iterations maxit = 100; ap = List [a + 1, a + 2 ...]; xoap = x / ap; del = map product (prefixes xoap.value); /* del = map (multiply (1 / a)) (map product (prefixes xoap)) del = xap = iterate (multiply */ /* Generate all prefixes of a list ... [1,2,3] -> [[1], [1, 2], [1, 2, * 3], [1, 2, 3, 4] ...] */ prefixes l = map (converse take l) [1..]; } } /* ln(gamma(xx)) ... nr in c, pp 214 */ gammln xx = gln { cof = [76.18009172947146, -86.50532032941677, 24.01409824083091, -1.231739572450155, 0.1208650973866179e-2, -0.5395239384953e-5]; y = take 6 (iterate (add 1) (xx + 1)); ser = 1.000000000190015 + sum (map2 divide cof y); tmp = xx + 0.5; tmp' = tmp - ((xx + 0.5) * log tmp); gln = -tmp + log (2.5066282746310005 * ser / xx); } /* make a LUT from a scatter */ buildlut x = Image (im_buildlut x), is_Matrix x && x.width > 1 = im_buildlut (Matrix x), is_matrix x && is_list_len_more 1 x?0 = error (_ "bad arguments to " ++ "buildlut"); /* Linear regression. Return a class with the stuff we need in. * from s15.2, p 665 NR in C */ linreg xes yes = obj { obj = class { // in case we ever get shown in the workspace _vislevel = 2; slope = sum [t * y :: [t, y] <- zip2 tes yes] / st2; intercept = (sy - sx * slope) / ss; chi2 = sum [(y - intercept - slope * x) ** 2 :: [x, y] <- zip2 xes yes]; siga = (chi2 / (ss - 2)) ** 0.5 * ((1 + sx ** 2 / (ss * st2)) / ss) ** 0.5; sigb = (chi2 / (ss - 2)) ** 0.5 * (1 / st2) ** 0.5; // for compat with linregw, see below q = 1.0; } ss = len xes; sx = sum xes; sy = sum yes; sxoss = sx / ss; tes = [x - sxoss :: x <- xes]; st2 = sum [t ** 2 :: t <- tes]; } /* Weighted linear regression. Xes, yes and a list of deviations. */ linregw xes yes devs = obj { obj = class { // in case we ever get shown in the workspace _vislevel = 2; slope = sum [(t * y) / sd :: [t, y, sd] <- zip3 tes yes devs] / st2; intercept = (sy - sx * slope) / ss; chi2 = sum [((y - intercept - slope * x) / sd) ** 2 :: [x, y, sd] <- zip3 xes yes devs]; siga = ((1 + sx * sx / (ss * st2)) / ss) ** 0.5; sigb = (1 / st2) ** 0.5; q = gammq (0.5 * (len xes - 2)) (0.5 * chi2); } wt = [sd ** -0.5 :: sd <- devs]; ss = sum wt; sx = sum [x * w :: [x, w] <- zip2 xes wt]; sy = sum [y * w :: [y, w] <- zip2 yes wt]; sxoss = sx / ss; tes = [(x - sxoss) / sd :: [x, sd] <- zip2 xes devs]; st2 = sum [t ** 2 :: t <- tes]; } /* Clustering: pass in a list of points, repeatedly merge the * closest two points until no two points are closer than the threshold. * Return [merged-points, corresponding-weights]. A weight is a list of the * indexes we merged to make that point, ie. len weight == how significant * this point is. * * eg. * cluster 12 [152,154,155,42,159] == * [[155,42],[[1,2,0,4],[3]]] */ cluster thresh points = oo_unary_function cluster_op points, is_class points // can't use [0..len points - 1], in case len points == 0 = merge [points, map (converse cons []) (take (len points) [0 ..])], is_list points = error (_ "bad arguments to " ++ "cluster") { cluster_op = Operator "cluster" (cluster thresh) Operator_type.COMPOUND false; merge x = x, m < 2 || d > thresh = merge [points', weights'] { [points, weights] = x; m = len points; // generate indexes of all possible pairs, avoiding comparing a thing // to itself, and assuming that dist is reflexive // first index is always less than 2nd index // the +1,+2 makes sure we have an increasing generator, otherwise we // can get [3 .. 4] (for example), which will make a decreasing // sequence pairs = [[x, y] :: x <- [0 .. m - 1]; y <- [x + 1, x + 2 .. m - 1]]; // distance function // arg is eg. [3,1], meaning get distance from point 3 to point 1 dist x = abs (points?i - points?j) { [i, j] = x; } // smallest distance, then the two points we merge p = minpos (map dist pairs); d = dist pairs?p; [i, j] = pairs?p; // new point and new weight nw = weights?i ++ weights?j; np = (points?i * len weights?i + points?j * len weights?j) / len nw; // remove element i from a list remove i l = take i l ++ drop (i + 1) l; // remove two old points, add the new merged one // i < j (see "pairs", above) points' = np : remove i (remove j points); weights' = nw : remove i (remove j weights); } } nip2-8.7.0/share/nip2/compat/7.16/Preferences.ws0000644000175000017500000007670713224651032016002 00000000000000 nip2-8.7.0/share/nip2/compat/7.16/Filter.def0000644000175000017500000011404213224651032015054 00000000000000Filter_conv_item = class Menupullright "_Convolution" "various spatial convolution filters" { /* Some useful masks. */ filter_blur = Matrix_con 9 0 [[1, 1, 1], [1, 1, 1], [1, 1, 1]]; filter_sharp = Matrix_con 8 0 [[-1, -1, -1], [-1, 16, -1], [-1, -1, -1]]; filter_emboss = Matrix_con 1 128 [[-1, 0], [0, 1]]; filter_laplacian = Matrix_con 1 128 [[-1, -1, -1], [-1, 8, -1], [-1, -1, -1]]; filter_sobel = Matrix_con 1 128 [[1, 2, 1], [0, 0, 0], [-1, -2, -1]]; filter_lindet = Matrix_con 1 0 [[1, 1, 1], [-2, -2, -2], [1, 1, 1]]; Blur_item = class Menuaction "_Blur" "3x3 blur of image" { action x = map_unary (conv filter_blur) x; } Sharpen_item = class Menuaction "_Sharpen" "3x3 sharpen of image" { action x = map_unary (conv filter_sharp) x; } Emboss_item = class Menuaction "_Emboss" "1 pixel displace emboss" { action x = map_unary (conv filter_emboss) x; } Laplacian_item = class Menuaction "_Laplacian" "3x3 laplacian edge detect" { action x = map_unary (conv filter_laplacian) x; } Sobel_item = class Menuaction "So_bel" "3x3 Sobel edge detect" { action x = map_unary sobel x { sobel im = abs (a - 128) + abs (b - 128) { a = conv filter_sobel im; b = conv (rot270 filter_sobel) im; } } } /* 3x3 line detect of image diagonals should be scaled down by root(2) I guess Kirk */ Linedet_item = class Menuaction "Li_ne Detect" "3x3 line detect" { action x = map_unary lindet x { lindet im = foldr1 max_pair images { masks = take 4 (iterate rot45 filter_lindet); images = map (converse conv im) masks; } } } Usharp_item = class Menuaction "_Unsharp Mask" "cored sharpen of L only in LAB image" { action x = class _result { _vislevel = 3; size = Option "Radius" [ "3 pixels", "5 pixels", "7 pixels", "9 pixels", "11 pixels", "51 pixels" ] 0; st = Scale "Smoothness threshold" 0 5 1.5; bm = Scale "Brighten by at most" 1 50 10; dm = Scale "Darken by at most" 1 50 50; fs = Scale "Sharpen flat areas by" (-2) 5 1; js = Scale "Sharpen jaggy areas by" (-2) 5 2; _result = map_unary process x { process in = Image in''' { in' = colour_transform_to Image_type.LABS in.value; in'' = sharpen [3, 5, 7, 9, 11, 51]?size st bm dm fs js in'; in''' = colour_transform_to (get_type in) in''; } } } } sep1 = Menuseparator; Custom_blur_item = class Menuaction "Custom B_lur / Sharpen" "blur or sharpen with tuneable parameters" { action x = class _result { _vislevel = 3; type = Option "Type" ["Blur", "Sharpen"] 0; r = Scale "Radius" 1 100 1; fac = Scale "Amount" 0 1 1; shape = Option "Mask shape" [ "Square", "Gaussian" ] 0; prec = Option "Precision" ["Int", "Float"] 0; _result = map_unary process x { process in = clip2fmt blur.format proc { mask = matrix_blur r.value, shape.value == 0 = matrix_gaussian_blur r.value; blur = [convsep, convsepf]?prec mask in; proc = in + fac * (in - blur), type == 1 = blur * fac + in * (1 - fac); } } } } Custom_conv_item = class Menuaction "Custom C_onvolution" "convolution filter with tuneable parameters" { action x = class _result { _vislevel = 3; matrix = Matrix_con 1 0 [[0, 0, 0], [0, 1, 0], [0, 0, 0]]; separable = Toggle "Seperable convolution" false, matrix.width == 1 || matrix.height == 1 = false; type = Option "Convolution type" ["Int", "Float"] 0; _result = map_unary process x { process in = in.Image in' { conv_fn = im_conv, !separable && type == 0 = im_convsep, separable && type == 0 = im_convf, !separable && type == 1 = im_convsepf, separable && type == 1 = error "boink!"; in' = conv_fn in.value matrix; } } } } } Filter_rank_item = class Menupullright "_Rank" "various rank filters" { Median_item = class Menuaction "_Median" "3x3 median rank filter" { action x = map_unary (rank 3 3 5) x; } Image_rank_item = class Menuaction "_Image Rank" "pixelwise rank a list or group of images" { action x = class _result { _vislevel = 3; select = Expression "Rank" ((int) (guess_size / 2)) { guess_size = len x, is_list x = len x.value, is_Group x = 0; } // can't really iterate over groups ... since we allow a group // argument _result = rank_image select x; } } Custom_rank_item = class Menuaction "Custom _Rank" "rank filter with tuneable parameters" { action x = class _result { _vislevel = 3; window_width = Expression "Window width" 3; window_height = Expression "Window height" 3; select = Expression "Rank" ((int) ((to_real window_width * to_real window_height + 1) / 2)); _result = map_unary process x { process in = rank window_width window_height select in; } } } } Filter_morphology_item = class Menupullright "_Morphology" "various morphological filters" { /* Some useful masks. */ mask8 = Matrix_mor [[255, 255, 255], [255, 255, 255], [255, 255, 255]]; mask4 = Matrix_mor [[128, 255, 128], [255, 255, 255], [128, 255, 128]]; mask1 = Matrix_mor [[0, 0, 0], [0, 255, 0], [0, 0, 0]]; thin = Matrix_mor [[0, 0, 0], [128, 255, 128], [255, 255, 255]]; Threshold_item = Select_item.Threshold_item; sep1 = Menuseparator; Dilate_item = class Menupullright "_Dilate" "morphological dilate" { Dilate8_item = class Menuaction "_8-connected" "dilate with an 8-connected mask" { action x = map_unary (dilate mask8) x; } Dilate4_item = class Menuaction "_4-connected" "dilate with a 4-connected mask" { action x = map_unary (dilate mask4) x; } } Erode_item = class Menupullright "_Erode" "morphological erode" { Erode8_item = class Menuaction "_8-connected" "erode with an 8-connected mask" { action x = map_unary (erode mask8) x; } Erode4_item = class Menuaction "_4-connected" "erode with a 4-connected mask" { action x = map_unary (erode mask4) x; } } Custom_morph_item = class Menuaction "Custom _Morphology" "convolution morphological operator" { action x = class _result { _vislevel = 3; mask = mask4; type = Option "Operation" ["Erode", "Dilate"] 1; apply = Expression "Number of times to apply mask" 1; _result = map_unary morph x { morph image = Image value' { fatmask = (iterate (dilate mask) mask)?(to_real apply - 1); value' = im_erode image.value fatmask, type.value == 0 = im_dilate image.value fatmask; } } } } sep2 = Menuseparator; Open_item = class Menuaction "_Open" "open with an 8-connected mask" { action x = map_unary (dilate mask8 @ erode mask8) x; } Close_item = class Menuaction "_Close" "close with an 8-connected mask" { action x = map_unary (erode mask8 @ dilate mask8) x; } Clean_item = class Menuaction "C_lean" "remove 8-connected isolated points" { action x = map_unary clean x { clean x = x ^ erode mask1 x; } } Thin_item = class Menuaction "_Thin" "thin once" { action x = map_unary thinall x { masks = take 8 (iterate rot45 thin); thin1 m x = x ^ erode m x; thinall x = foldr thin1 x masks; } } } Filter_fourier_item = class Menupullright "_Fourier" "various Fourier filters" { preview_size = 64; sense_option = Option "Sense" [ "Pass", "Reject" ] 0; // make a visualisation image make_vis fn = (Image @ image_set_type Image_type.FOURIER @ rotquad @ fn) (im_create_fmask preview_size preview_size); // make the process function process fn in = (Image @ fn) (im_flt_image_freq in.value); New_ideal_item = class Menupullright "_Ideal" "various ideal Fourier filters" { High_low_item = class Menuaction "_High or Low Pass" "highpass/lowpass ideal Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; // call a freq func with our parameters _params f = f sense.value fc.value 0 0 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" "ring pass/reject ideal Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; rw = Scale "Ring width" 0.01 0.99 0.5; // call a freq func with our parameters _params f = f (sense.value + 6) fc.value rw.value 0 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Band_item = class Menuaction "_Band Pass or Band Reject" "band pass/reject ideal Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fcx = Scale "Horizontal frequency cutoff" 0.01 0.99 0.5; fcy = Scale "Vertical frequency cutoff" 0.01 0.99 0.5; r = Scale "Radius" 0.01 0.99 0.5; // call a freq func with our parameters _params f = f (sense.value + 12) fcx.value fcy.value r.value 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } } New_gaussian_item = class Menupullright "_Gaussian" "various Gaussian Fourier filters" { High_low_item = class Menuaction "_High or Low Pass" "highpass/lowpass Gaussian Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; // call a freq func with our parameters _params f = f (sense.value + 4) fc.value ac.value 0 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" "ring pass/reject Gaussian Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; rw = Scale "Ring width" 0.01 0.99 0.5; // call a freq func with our parameters _params f = f (sense.value + 10) fc.value rw.value ac.value 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Band_item = class Menuaction "_Band Pass or Band Reject" "band pass/reject Gaussian Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fcx = Scale "Horizontal frequency cutoff" 0.01 0.99 0.5; fcy = Scale "Vertical frequency cutoff" 0.01 0.99 0.5; r = Scale "Radius" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; // call a freq func with our parameters _params f = f (sense.value + 16) fcx.value fcy.value r.value ac.value 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } } New_butterworth_item = class Menupullright "_Butterworth" "various Butterworth Fourier filters" { High_low_item = class Menuaction "_High or Low Pass" "highpass/lowpass Butterworth Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; o = Scale "Order" 1 10 2; // call a freq func with our parameters _params f = f (sense.value + 2) o.value fc.value ac.value 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" "ring pass/reject Butterworth Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; rw = Scale "Ring width" 0.01 0.99 0.5; o = Scale "Order" 1 10 2; // call a freq func with our parameters _params f = f (sense.value + 8) o.value fc.value rw.value ac.value 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Band_item = class Menuaction "_Band Pass or Band Reject" "band pass/reject Butterworth Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fcx = Scale "Horizontal frequency cutoff" 0.01 0.99 0.5; fcy = Scale "Vertical frequency cutoff" 0.01 0.99 0.5; r = Scale "Radius" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; o = Scale "Order" 1 10 2; // call a freq func with our parameters _params f = f (sense.value + 14) o.value fcx.value fcy.value r.value ac.value; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } } } Filter_enhance_item = class Menupullright "_Enhance" "various enhancement filters" { Falsecolour_item = class Menuaction "_False Colour" "false colour a mono image" { action x = class _result { _vislevel = 3; o = Scale "Offset" (-255) 255 0; clip = Toggle "Clip colour range" false; _result = map_unary process x { process im = falsecolour mono'' { mono = colour_transform_to Image_type.B_W im; mono' = mono + o; mono'' = (unsigned char) mono', clip = (unsigned char) (mono' & 0xff); } } } } Statistical_diff_item = class Menuaction "_Statistical Difference" "statistical difference of an image" { action x = class _result { _vislevel = 3; wsize = Expression "Window size" 11; tmean = Expression "Target mean" 128; mean_weight = Scale "Mean weight" 0 1 0.8; tdev = Expression "Target deviation" 50; dev_weight = Scale "Deviation weight" 0 1 0.8; border = Toggle "Output image matches input image in size" true; _result = map_unary process x { process in = Image in'' { in' = colour_transform_to Image_type.B_W in.value; fn = im_stdif, border = im_stdif_raw; in'' = fn in' mean_weight.value tmean.expr dev_weight.value tdev.expr wsize.expr wsize.expr; } } } } Hist_equal_item = class Menupullright "_Equalise Histogram" "equalise contrast" { Global_item = class Menuaction "_Global" "equalise contrast globally" { action x = map_unary hist_equalize x; } Local_item = class Menuaction "_Local" "equalise contrast within a roving window" { action x = class _result { _vislevel = 3; window_width = Expression "Window width" 20; window_height = Expression "Window height" 20; _result = map_unary process x { process in = hist_equalize_local window_width.expr window_height.expr in; } } } } } Filter_correlate_item = class Menupullright "Spatial _Correlation" "calculate correlation surfaces" { Correlate_item = class Menuaction "_Correlate" "calculate correlation coefficient" { action a b = map_binary corr a b { corr a b = correlate a b, a.width <= b.width && a.height <= b.height = correlate b a; } } Correlate_fast_item = class Menuaction "_Simple Difference" "calculate sum of squares of differences" { action a b = map_binary corr a b { corr a b = correlate_fast a b, a.width <= b.width && a.height <= b.height = correlate_fast b a; } } } Filter_greyc_item = class Menupullright "_GREYCstoration" "noise-removing filter" { Denoise_item = class Menuaction "Denoise" "Noise-removing filter" { action x = class _result { _vislevel = 3; iterations = Scale "Iterations" 1 5 1; amplitude = Scale "Amplitude" 1 100 40; sharpness = Scale "Sharpness" 0 3 0.9; anisotropy = Scale "Anisotropy" 0 1 0.15; alpha = Scale "Noise scale" 0 5 0.6; sigma = Scale "Geometry regularity" 0 2 1.1; dl = Scale "Spatial integration step" 0 1 0.8; da = Scale "Angular integration step" 0 90 30; gauss_prec = Scale "Precision" 1 10 2; interpolation = Option "Interpolation" ["Nearest-neighbour", "Bilinear", "Runge-Kutta"] 0; fast_approx = Toggle "Fast approximation" true; _result = greyc (to_real iterations) (to_real amplitude) (to_real sharpness) (to_real anisotropy) (to_real alpha) (to_real sigma) (to_real dl) (to_real da) (to_real gauss_prec) (to_real interpolation) (to_real fast_approx) x; } } Enlarge_item = class Menuaction "Enlarge" "Enlarge image" { action x = class _result { _vislevel = 3; scale = Scale "Enlarge" 1 10 3; iterations = Scale "Iterations" 1 5 3; amplitude = Scale "Amplitude" 1 100 20; sharpness = Scale "Sharpness" 0 3 0.2; anisotropy = Scale "Anisotropy" 0 1 0.9; alpha = Scale "Noise scale" 0 5 0.1; sigma = Scale "Geometry regularity" 0 2 1.5; dl = Scale "Spatial integration step" 0 1 0.8; da = Scale "Angular integration step" 0 90 30; gauss_prec = Scale "Precision" 1 10 2; interpolation = Option "Interpolation" ["Nearest-neighbour", "Bilinear", "Runge-Kutta"] 0; fast_approx = Toggle "Fast approximation" true; _result = greyc (to_real iterations) (to_real amplitude) (to_real sharpness) (to_real anisotropy) (to_real alpha) (to_real sigma) (to_real dl) (to_real da) (to_real gauss_prec) (to_real interpolation) (to_real fast_approx) (resize (to_real scale) (to_real scale) Interpolate.BILINEAR x); } } } #separator Filter_tilt_item = class Menupullright "Ti_lt Brightness" "tilt brightness" { Left_right_item = class Menuaction "_Left to Right" "linear left-right brighten" { action x = class _result { _vislevel = 3; tilt = Scale "Left-right tilt" (-1) 1 0; _result = map_unary tilt_lr x { tilt_lr image = image * scale { ramp = im_fgrey image.width image.height; scale = (ramp - 0.5) * tilt + 1; } } } } Top_bottom_item = class Menuaction "_Top to Bottom" "linear top-bottom brighten" { action x = class _result { _vislevel = 3; tilt = Scale "Top-bottom tilt" (-1) 1 0; _result = map_unary tilt_tb x { tilt_tb image = image * scale { ramp = rot90 (im_fgrey image.height image.width); scale = (ramp - 0.5) * tilt + 1; } } } } sep1 = Menuseparator; Left_right_cos_item = class Menuaction "Cosine Left-_right" "cosine left-right brighten" { action x = class _result { _vislevel = 3; tilt = Scale "Left-right tilt" (-1) 1 0; shift = Scale "Shift by" (-1) 1 0; _result = map_unary tilt_lr x { tilt_lr image = image * scale { ramp = im_fgrey image.width image.height - 0.5 - shift.value; scale = 0.5 * tilt.value * cos (ramp * 180) + 1; } } } } Top_bottom_cos_item = class Menuaction "Cosine Top-_bottom" "cosine top-bottom brighten" { action x = class _result { _vislevel = 3; tilt = Scale "Top-bottom tilt" (-1) 1 0; shift = Scale "Shift by" (-1) 1 0; _result = map_unary tilt_tb x { tilt_tb image = image * scale { ramp = rot90 (im_fgrey image.height image.width) - 0.5 - shift.value; scale = 0.5 * tilt.value * cos (ramp * 180) + 1; } } } } sep2 = Menuseparator; Circular_item = class Menuaction "_Circular" "circular brighten" { action x = class _result { _vislevel = 3; tilt = Scale "Tilt" (-1) 1 0; hshift = Scale "Horizontal shift by" (-1) 1 0; vshift = Scale "Vertical shift by" (-1) 1 0; _result = map_unary tilt_tb x { tilt_tb image = image * scale { hramp = im_fgrey image.width image.height - 0.5 - hshift.value; vramp = rot90 (im_fgrey image.height image.width) - 0.5 - vshift.value; ramp = (hramp ** 2 + vramp ** 2) ** 0.5; scale = 0.5 * tilt.value * cos (ramp * 180) + 1; } } } } } Filter_blend_item = class Menupullright "_Blend" "blend objects together" { Scale_blend_item = class Menuaction "_Scale" "blend two objects together with a scale" { action a b = class _result { _vislevel = 3; p = Scale "Blend position" 0 1 0.5; _result = map_binary process a b { process im1 im2 = im1 * (1 - p.value) + im2 * p.value; } } } Image_blend_item = class Menuaction "_Image" "use an image to blend two objects" { action a b c = class _result { _vislevel = 3; i = Toggle "Invert mask" false; _result = map_trinary process a b c { process a b c = blend condition in1 in2, !i = blend (invert condition) in1 in2 { compare a b // prefer image as the condition = false, !has_image a && has_image b // prefer mono images as the condition = false, has_bands a && has_bands b && get_bands a > 1 && get_bands b == 1 // prefer uchar as the condition = false, has_format a && has_format b && get_format a > Image_format.UCHAR && get_format b == Image_format.UCHAR = true; [condition, in1, in2] = sortc compare [a, b, c]; } } } } Line_blend_item = class Menuaction "_Along Line" "blend between image a and image b along a line" { action a b = class _result { _vislevel = 3; orientation = Option "Orientation" [ "Left to Right", "Top to Bottom" ] 0; blend_position = Scale "Blend position" 0 1 0.5; blend_width = Scale "Blend width" 0 1 0.05; _result = map_binary process a b { process a b = blend (Image condition) b a { output_width = max_pair a.width b.width; output_height = max_pair a.height b.height; range = output_width, orientation == 0 = output_height; blend_position' = floor (range * blend_position.value); blend_width' = 1, blend_width.value == 0 = floor (range * blend_width.value); start = blend_position' - blend_width' / 2; background = (make_xy output_width output_height) >= blend_position'; ramp = im_grey blend_width' output_height, orientation == 0 = rot90 (im_grey blend_width' output_width); condition = insert_noexpand start 0 ramp background?0, orientation == 0 = insert_noexpand 0 start ramp background?1; } } } } Blend_alpha_item = class Menuaction "_Alpha" "blend images with optional alpha channels" { // usage: layerit foreground background // input images must be either 1 or 3 bands, optionally + 1 band // which is used as the alpha channel // rich lott scale_mask im opacity = (unsigned char) (to_real opacity / 255 * im); // to mono intensity = colour_transform_to Image_type.B_W; // All the blend functions // I am grateful to this page // http://www.pegtop.net/delphi/blendmodes/ // for most of the formulae. blend_normal mask opacity fg bg = blend (scale_mask mask opacity) fg bg; blend_iflighter mask opacity fg bg = blend (if fg' > bg' then mask' else 0) fg bg { fg' = intensity fg; bg' = intensity bg; mask' = scale_mask mask opacity ; } blend_ifdarker mask opacity fg bg = blend (if fg' < bg' then mask' else 0) fg bg { fg' = intensity fg ; bg' = intensity bg ; mask' = scale_mask mask opacity ; } blend_multiply mask opacity fg bg = blend (scale_mask mask opacity) fg' bg { fg' = fg / 255 * bg; } blend_add mask opacity fg bg = blend mask fg' bg { fg' = opacity / 255 * fg + bg; } blend_subtract mask opacity fg bg = blend mask fg' bg { fg' = bg - opacity / 255 * fg; } blend_screen mask opacity fg bg = blend mask fg' bg { fg' = 255 - (255 - bg) * (255 - (opacity / 255 * fg)) / 255; } blend_burn mask opacity fg bg = blend mask fg'' bg { // fades to white which has no effect. fg' = (255 - opacity) + opacity * fg / 255; fg'' = 255 - 255 * (255 - bg) / fg'; } blend_softlight mask opacity fg bg = blend mask' fg' bg { mask' = scale_mask mask opacity; fg' = (2 * bg * fg + bg * bg * (1 - 2 * fg / 255)) / 255; } blend_hardlight mask opacity fg bg = blend mask' fg' bg { mask' = scale_mask mask opacity; fg' = 2 / 255 * fg * bg, bg < 129 = 255 - 2 * (255 - bg) * (255 - fg) / 255; } blend_lighten mask opacity fg bg = blend mask' fg' bg { mask' = scale_mask mask opacity; fg' = if bg < fg then fg else bg; } blend_darken mask opacity fg bg = blend mask' fg' bg { mask' = scale_mask mask opacity; fg' = if bg > fg then fg else bg; } blend_dodge mask opacity fg bg = blend mask fg'' bg { // one added to avoid divide by zero fg' = 1 + 255 - (opacity / 255 * fg); fg'' = bg * 255 / fg'; } blend_reflect mask opacity fg bg = blend mask' fg' bg { mask' = scale_mask mask opacity; fg' = bg * bg / (255 - fg); } blend_freeze mask opacity fg bg = blend mask' fg' bg { mask' = scale_mask mask opacity; fg' = 255 - (255 - bg) * (255 - bg) / (1 + fg); } blend_or mask opacity fg bg = bg | (unsigned char) fg' { mask' = scale_mask mask opacity; fg' = fg * mask' / 255; } blend_and mask opacity fg bg = bg & (unsigned char) fg' { mask' = scale_mask mask opacity; fg' = fg * mask' / 255; } // blend types NORMAL = 0; IFLIGHTER = 1; IFDARKER = 2; MULTIPLY = 3; ADD = 4; SUBTRACT = 5; SCREEN = 6; BURN = 7; DODGE = 8; HARDLIGHT = 9; SOFTLIGHT = 10; LIGHTEN = 11; DARKEN = 12; REFLECT = 13; FREEZE = 14; OR = 15; AND = 16; // names we show the user for blend types names = Enum [ [_ "Normal", NORMAL], [_ "If Lighter", IFLIGHTER], [_ "If Darker", IFDARKER], [_ "Multiply", MULTIPLY], [_ "Add", ADD], [_ "Subtract", SUBTRACT], [_ "Screen", SCREEN], [_ "Burn", BURN], [_ "Soft Light", SOFTLIGHT], [_ "Hard Light", HARDLIGHT], [_ "Lighten", LIGHTEN], [_ "Darken", DARKEN], [_ "Dodge", DODGE], [_ "Reflect", REFLECT], [_ "Freeze", FREEZE], [_ "Bitwise OR", OR], [_ "Bitwise AND", AND] ]; // functions we call for each blend type actions = Table [ [NORMAL, blend_normal], [IFLIGHTER, blend_iflighter], [IFDARKER, blend_ifdarker], [MULTIPLY, blend_multiply], [ADD, blend_add], [SUBTRACT, blend_subtract], [SCREEN, blend_screen], [BURN, blend_burn], [SOFTLIGHT, blend_softlight], [HARDLIGHT, blend_hardlight], [LIGHTEN, blend_lighten], [DARKEN, blend_darken], [DODGE, blend_dodge], [REFLECT, blend_reflect], [FREEZE, blend_freeze], [OR, blend_or], [AND, blend_and] ]; // make sure im has an alpha channel (set opaque if it hasn't) put_alpha im = im, im.bands == 4 || im.bands == 2 = im ++ 255; // make sure im has no alpha channel lose_alpha im = extract_bands 0 3 im, im.bands == 4 = im?0, im.bands == 2 = im; // does im have al alpha channel? has_alpha im = im.bands == 2 || im.bands == 4; // get the alpha (set opaque if no alpha) get_alpha img = img'?3, img.bands == 4 = img'?1 { img' = put_alpha img; } // add an alpha ... cast the alpha image to match the main image append_alpha im alpha = im ++ clip2fmt im.format alpha; // makes fg the same size as bg, displaced with u, v pixel offset moveit fg bg u v = insert_noexpand u v fg bg' { bg' = image_new bg.width bg.height fg.bands fg.format fg.coding fg.type 0 0 0; } action bg fg = class _value { _vislevel = 3; method = Option_enum names "Blend mode" "Normal"; opacity = Scale "Opacity" 0 255 255; hmove = Scale "Horizontal move by" (-bg.width) (bg.width) 0; vmove = Scale "Vertical move by" (-bg.height) (bg.height) 0; _value = append_alpha blended merged_alpha, has_alpha bg = blended { // displace and resize fg (need to displace alpha too) fg' = moveit (put_alpha fg) bg hmove vmove; // transform to sRGB fg'' = colour_transform_to Image_type.sRGB (lose_alpha fg'); bg' = colour_transform_to Image_type.sRGB (lose_alpha bg); // alphas merged merged_alpha = get_alpha bg | get_alpha fg'; // blend together blended = (actions.lookup 0 1 method.value_thing) (get_alpha fg') opacity.value fg'' bg'; } } } } Filter_overlay_header_item = class Menuaction "_Overlay" "make a colour overlay of two monochrome images" { action a b = class _result { _vislevel = 3; colour = Option "Colour overlay as" [ _ "Green over Red", _ "Blue over Red", _ "Red over Green", _ "Red over Blue", _ "Blue over Green", _ "Green over Blue" ] 0; _result = map_binary overlay a b { overlay a b = image_set_type Image_type.sRGB [(a' ++ b' ++ 0), (a' ++ 0 ++ b'), (b' ++ a' ++ 0), (b' ++ 0 ++ a'), (0 ++ a' ++ b'), (0 ++ b' ++ a')]?colour { a' = colour_transform_to Image_type.B_W a; b' = colour_transform_to Image_type.B_W b; } } } } Filter_colourize_item = class Menuaction "_Colourize" "use a colour image or patch to tint a mono image" { action a b = class _result { _vislevel = 3; tint = Scale "Tint" 0 1 0.6; _result = map_binary tintit a b { tintit a b = colour_transform_to (get_type colour) colourized' { // get the mono thing first [mono, colour] = sortc (const (is_colour_type @ get_type)) [a, b]; colour' = tint * colour_transform_to Image_type.LAB colour; mono' = colour_transform_to Image_type.B_W mono; colourized = (mono' / 2.55) ++ colour'?1 ++ colour'?2; colourized' = image_set_type Image_type.LAB colourized; } } } } Filter_browse_multiband_item = class Menupullright "Bro_wse" "browse though an image, bitwise or bandwise" { Bandwise_item = class Menuaction "B_andwise" "browse through the bands of a multiband image" { action image = class _result { _vislevel = 3; band = Scale "Band" 0 (image.bands - 1) 0; display = Option "Display as" [ _ "Grey", _ "Green over Red", _ "Blue over Red", _ "Red over Green", _ "Red over Blue", _ "Blue over Green", _ "Green over Blue" ] 0; _result = output { down = (int) band.value; up = down + 1; remainder = band.value - down; fade x a = Vector [0], x == 0 = a * x; a = fade remainder image?up; b = fade (1 - remainder) image?down; output = [ a + b, a ++ b ++ 0, a ++ 0 ++ b, b ++ a ++ 0, b ++ 0 ++ a, 0 ++ a ++ b, 0 ++ b ++ a ] ? display; } } } Bitwise_item = class Menuaction "Bi_twise" "browse through the bits of an image" { action x = class _result { _vislevel = 3; bit = Islider "Bit" 0 (nbits - 1) (nbits - 1) { nbits = x.bits, is_Image x = 8; Islider c f t v = class scope.Scale c f t ((int) v) { Scale = Islider; } } _result = map_unary process x { process im = (im & (0x1 << bit.value)) != 0; } } } } #separator Filter_negative_item = class Menuaction "Photographic _Negative" "swap black and white" { action x = map_unary invert x { invert in = clip2fmt in.format (colour_transform_to (get_type in) rgb') { rgb = colour_transform_to Image_type.sRGB in; rgb' = 255 - rgb; } } } Filter_solarize_item = class Menuaction "_Solarise" "invert colours above a threshold" { action x = class _result { _vislevel = 3; kink = Scale "Kink" 0 1 0.5; _result = map_unary process x { process image = hist_map tab'''' image { // max pixel value for this format mx = Image_format.maxval image.format; // make a LUT ... just 8 and 16 bit tab = im_identity_ushort image.bands mx, image.format == Image_format.USHORT = im_identity image.bands; tab' = Image tab; // make basic ^ shape tab'' = tab' * (1 / kink), tab' < mx * kink = (mx - tab') / (1 - kink); tab''' = clip2fmt image.format tab''; // smooth a bit mask = matrix_blur (tab'''.width / 8); tab'''' = convsep mask tab'''; } } } } Filter_diffuse_glow_item = class Menuaction "_Diffuse Glow" "add a halo to highlights" { action x = class _result { _vislevel = 3; r = Scale "Radius" 0 50 5; highlights = Scale "Highlights" 0 100 95; glow = Scale "Glow" 0 1 0.5; colour = Colour_new_item.Widget_colour_item.action; _result = map_unary process x { process image = image' { mono = (unsigned char) (colour_transform_to Image_type.B_W image); thresh = hist_thresh (highlights.value / 100) mono; mask = mono > thresh; blur = convsep (matrix_gaussian_blur r.value) mask; colour' = colour_transform_to image.type colour; image' = image + colour' * glow * (blur / 255); } } } } Filter_drop_shadow_item = class Menuaction "Drop S_hadow" "add a drop shadow to an image" { action x = class _result { _vislevel = 3; sx = Scale "Horizontal shadow" (-50) 50 5; sy = Scale "Vertical shadow" (-50) 50 5; ss = Scale "Shadow softness" 0 20 5; bg_colour = Expression "Background colour" 255; sd_colour = Expression "Shadow colour" 128; alpha = Toggle "Shadow in alpha channel" false; transparent = Toggle "Zero pixels are transparent" false; _result = map_unary shadow x { shadow image = Image final { blur_size = ss.value * 2 + 1; // matrix we blur with to soften shadows blur_matrix = matrix_gaussian_blur blur_size; matrix_size = blur_matrix.width; matrix_radius = (int) (matrix_size / 2) + 1; // position and size of shadow image in input cods // before and after fuzzing shadow_rect = Rect sx.value sy.value image.width image.height; fuzzy_shadow_rect = shadow_rect.margin_adjust matrix_radius; // size and pos of final image, in input cods final_rect = image.rect.union fuzzy_shadow_rect; // hard part of shadow in output cods shadow_rect' = Rect (shadow_rect.left - final_rect.left) (shadow_rect.top - final_rect.top) shadow_rect.width shadow_rect.height; // make the shadow mask ... true for parts which cast // a shadow mask = (foldr1 bitwise_and @ bandsplit) (image.value != 0), transparent = image_new image.width image.height 1 Image_format.UCHAR Image_coding.NOCODING Image_type.B_W 255 0 0; mask' = embed 0 shadow_rect'.left shadow_rect'.top final_rect.width final_rect.height mask; mask'' = convsep blur_matrix mask'; // use mask to fade between bg and shadow colour mk_background colour = image_new final_rect.width final_rect.height image.bands image.format image.coding image.type colour 0 0; bg_image = mk_background bg_colour.expr; shadow_image = mk_background sd_colour.expr; bg = blend mask'' shadow_image bg_image; // make a full size mask fg_mask = embed 0 (image.rect.left - final_rect.left) (image.rect.top - final_rect.top) final_rect.width final_rect.height mask; // wrap up the input image ... put the shadow colour // around it, so if we are outputting a separate // alpha the shadow colour will be set correctly fg = insert (image.rect.left - final_rect.left) (image.rect.top - final_rect.top) image.value shadow_image; final // make a separate alpha = fg ++ mask'', alpha // paste image over shadow = if fg_mask then fg else bg; } } } } Filter_paint_text_item = class Menuaction "_Paint Text" "paint text into an image" { action x = paint_position, is_Group x = paint_area { paint_area = class _result { _check_args = [ [x, "x", check_Image] ] ++ super._check_args; _vislevel = 3; text = String "Text to paint" "Hello world!"; font = Fontname "Use font" Workspaces.Preferences.PAINTBOX_FONT; align = Option "Alignment" ["Left", "Centre", "Right"] 0; dpi = Expression "DPI" 300; colour = Expression "Text colour" 255; place = Region x (x.width / 4) (x.height / 4) (x.width / 2) (x.height / 2); _result = insert_noexpand place.left place.top (blend txt' fg place) x { fg = image_new place.width place.height x.bands x.format x.coding x.type colour.expr 0 0; txt = Image (im_text text.value font.value place.width align.value (to_real dpi)); bg = im_black place.width place.height 1; txt' = insert_noexpand 0 0 txt bg; } } paint_position = class _result { _vislevel = 3; text = Pattern_images_item.Text_item.action; colour = Expression "Text colour" 255; position = Option "Position" [ _ "North-west", _ "North", _ "North-east", _ "West", _ "Centre", _ "East", _ "South-west", _ "South", _ "South-east", _ "Specify in pixels" ] 4; left = Expression "Pixels from left" 0; top = Expression "Pixels from top" 0; _result = map_unary paint x { paint image = insert_noexpand x' y' place' image { xr = image.width - text.width; yr = image.height - text.height; x = left.expr, position == 9 = [0, xr / 2, xr]?(position % 3); y = top.expr, position == 9 = [0, yr / 2, yr]?(position / 3); x' = range 0 x (image.width - 1); y' = range 0 y (image.height - 1); w' = range 1 text.width (image.width - x'); h' = range 1 text.height (image.height - y'); place = extract_area x' y' w' h' image; text' = insert_noexpand 0 0 text (im_black w' h' 1); fg = image_new w' h' image.bands image.format image.coding image.type colour.expr 0 0; place' = blend text' fg place; } } } } } nip2-8.7.0/share/nip2/compat/7.16/Histogram.def0000644000175000017500000001752213224651032015571 00000000000000Hist_new_item = class Menupullright "_New" "new histogram" { Hist_item = class Menuaction "Histogram" "make an identity histogram" { action = class _result { _vislevel = 3; d = Option "Depth" ["8 bit", "16 bit"] 0; _result = Plot [] ([im_identity 1, im_identity_ushort 1 65536]?d); } } Hist_new_from_matrix = Matrix_buildlut_item; Hist_from_image_item = class Menuaction "Ta_g Image As Histogram" "set image Type field to Histogram" { action x = hist_tag x; } Tone_item = class Menuaction "_Tone Curve" "make a new tone mapping curve" { action = class _result { _vislevel = 3; d = Option "Depth" ["8 bit", "16 bit"] 0; b = Scale "Black point" 0 100 0; w = Scale "White point" 0 100 100; sp = Scale "Shadow point" 0.1 0.3 0.2; mp = Scale "Mid-tone point" 0.4 0.6 0.5; hp = Scale "Highlight point" 0.7 0.9 0.8; sa = Scale "Shadow adjust" (-15) 15 0; ma = Scale "Mid-tone adjust" (-30) 30 0; ha = Scale "Highlight adjust" (-15) 15 0; _result = tone_build fmt b w sp mp hp sa ma ha { fmt = [Image_format.UCHAR, Image_format.USHORT]?d; } } } } Hist_find_item = class Menupullright "_Find" "find a histogram" { Oned_item = class Menuaction "_One Dimension" "for a n-band image, make an n-band 1D histogram" { action x = map_unary hist_find x; } Nd_item = class Menuaction "_Many Dimensions" "for a n-band image, make an n-dimensional histogram" { action x = class _result { _vislevel = 3; // default to something small-ish bins = Expression "Number of bins in each dimension" 8; _result = map_unary process x { process in = hist_find_nD bins in; } } } } Hist_map_item = class Menuaction "_Map Histogram" "map an image through a histogram" { action x y = map_binary map x y { map a b = hist_map hist im { [im, hist] = sortc (const is_hist) [a, b]; } } } Hist_eq_item = Filter_enhance_item.Hist_equal_item; #separator Hist_cum_item = class Menuaction "_Cumulativise Histogram" "form cumulative histogram" { action x = map_unary hist_cum x; } Hist_diff_item = class Menuaction "_Differentiate Histogram" "find point-to-point differences (inverse of Cumulativise)" { action x = map_unary hist_diff x; } Hist_norm_item = class Menuaction "N_ormalise Histogram" "normalise a histogram" { action x = map_unary hist_norm x; } Hist_match_item = class Menuaction "Ma_tch Histogram" "find LUT which will match first histogram to second" { action in ref = map_binary hist_match in ref; } Hist_zerox_item = class Menuaction "_Zero Crossings" "find zero crossings" { action x = class _result { _vislevel = 3; edge = Option "Direction" [ "Positive-going", "Negative-going" ] 0; _result = map_unary (zerox (if edge == 0 then -1 else 1)) x; } } #separator Hist_profile_item = class Menuaction "Find _Profile" "search from image edges for non-zero pixels" { action x = class _result { _vislevel = 3; edge = Option "Search from" [ "Top edge down", "Left edge to right", "Bottom edge up", "Right edge to left" ] 2; _result = map_unary profile x { profile image = (Plot_histogram @ hist_tag) [ profilemb 0 image.value, profilemb 1 image.value, profilemb 0 (fliptb image.value), profilemb 1 (fliplr image.value) ]?edge; // im_profile only does 1 band images :-( profilemb d = bandjoin @ map (converse im_profile d) @ bandsplit; } } } Hist_project_item = class Menuaction "Find Pro_jections" "find horizontal and vertical projections" { action x = class { _vislevel = 2; _result = map_unary project x; // extract the result ... could be a group extr n = Plot_histogram _result?n, is_list _result = Group (map (Plot_histogram @ converse subscript n) _result.value); horizontal = extr 0; vertical = extr 1; centre = (gravity horizontal, gravity vertical); } } #separator Hist_graph_item = class Menuaction "P_lot Slice" "plot a slice along a guide or arrow" { action x = class _value { _vislevel = 3; width = Scale "Width" 1 40 1; displace = Scale "Horizontal displace" (-50) 50 0; vdisplace = Scale "Vertical displace" (-50) 50 0; _value = map_unary graph x { graph arrow = hist_tag area' { // the line as a polar vector pv = polar (arrow.width, arrow.height); a = im pv; // smallest rotation that will make the line horizontal a' = 360 - a, a > 270 = 180 - a, a > 90 = -a; im' = rotate a' arrow.image; // look at the start and end of the arrow, pick the leftmost p = (arrow.left, arrow.top), arrow.left <= arrow.right = (arrow.right, arrow.bottom); // transform that point to im' space p' = rectangular (polar p + (0, a')) + (im'.xoffset, im'.yoffset); // extract that area area = extract_area (re p' + displace.value) (im p' - width.value / 2 + vdisplace.value) (re pv) width.value im'; // squish vertically to get an average area' = resize 1 (1 / width.value) Interpolate.BILINEAR area; } } } } Extract_arrow_item = class Menuaction "Extract _Arrow" "extract the area around an arrow" { action x = class _value { _vislevel = 3; width = Scale "Width" 1 40 1; displace = Scale "Horizontal displace" (-50) 50 0; vdisplace = Scale "Vertical displace" (-50) 50 0; _value = map_unary graph x { graph arrow = area { // the line as a polar vector pv = polar (arrow.width, arrow.height); a = im pv; // smallest rotation that will make the line horizontal a' = 360 - a, a > 270 = 180 - a, a > 90 = -a; im' = rotate a' arrow.image; // look at the start and end of the arrow, pick the leftmost p = (arrow.left, arrow.top), arrow.left <= arrow.right = (arrow.right, arrow.bottom); // transform that point to im' space p' = rectangular (polar p + (0, a')) + (im'.xoffset, im'.yoffset); // extract that area area = extract_area (re p' + displace.value) (im p' - width.value / 2 + vdisplace.value) (re pv) width.value im'; } } } } Hist_plot_item = class Menuaction "Plot _Object" "plot an object as a bar, point or line graph" { action x = class _result { _vislevel = 3; format = Option_enum Plot_format.names "Format" "YYYY"; style = Option_enum Plot_style.names "Style" "Line"; auto = Toggle "Auto Range" true; xmin = Expression "X range minimum" 0; xmax = Expression "X range maximum" 1; ymin = Expression "Y range minimum" 0; ymax = Expression "Y range maximum" 1; _result = Plot options (image x) { options = [$style => style.value, $format => format.value] ++ range; range = [], auto = [$xmin => xmin.expr, $xmax => xmax.expr, $ymin => ymin.expr, $ymax => ymax.expr]; image x = image (extract_arrow x), is_Arrow x = get_image x, has_image x = x2b im, b == 1 = im { im = get_image (to_image x); w = get_width im; h = get_height im; b = get_bands im; // matrix to image makes a 1-band mxn image // we need to put columns into bands x2b im = bandjoin (map extract_col [0 .. w - 1]) { extract_col x = extract_area x 0 1 h im; } } extract_arrow arrow = extract_area (re p') (im p') (re pv) 1 im' { // the line as a polar vector pv = polar (arrow.width, arrow.height); a = im pv; // smallest rotation that will make the line horizontal a' = 360 - a, a > 270 = 180 - a, a > 90 = -a; im' = rotate a' arrow.image; // look at the start and end of the arrow, pick the leftmost p = (arrow.left, arrow.top), arrow.left <= arrow.right = (arrow.right, arrow.bottom); // transform that point to im' space p' = rectangular (polar p + (0, a')) + (im'.xoffset, im'.yoffset); } } } } nip2-8.7.0/share/nip2/compat/7.16/Object.def0000644000175000017500000000222013224651032015027 00000000000000Object_duplicate_item = class Menuaction "_Duplicate" "take a copy of an object" { action x = map_unary copy x; } #separator Object_list_to_group_item = class Menuaction "_List to Group" "turn a list of objects into a group" { action x = to_group x; } Object_group_to_list_item = class Menuaction "_Group to List" "turn a group into a list of objects" { action x = to_list x; } #separator Object_break_item = class Menuaction "_Break Up Object" "break an object into a list of components" { action x = map_unary break x { break x = bandsplit x, is_Image x = map Vector x.value, is_Matrix x = x.value, is_Vector x || is_Real x = error "Breakup: not Image/Matrix/Vector/Real"; } } Object_assemble_item = class Menuaction "_Assemble Objects" "assemble a list (or group) of objects into a single object" { action x = map_unary ass x { ass x = [], x == [] = Vector x, is_real_list x = Matrix x, is_matrix x = bandjoin x, is_listof is_Image x = Vector (map get_value x), is_listof is_Real x = Matrix (map get_value x), is_listof is_Vector x = error "Assemble: not list of Image/Vector/Real/image/real"; } } nip2-8.7.0/share/nip2/compat/7.16/Makefile.in0000644000175000017500000003677313350464104015234 00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = share/nip2/compat/7.16 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(startdir)" DATA = $(start_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BISON = @BISON@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DLLWRAP = @DLLWRAP@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FFTW3_CFLAGS = @FFTW3_CFLAGS@ FFTW3_LIBS = @FFTW3_LIBS@ FGREP = @FGREP@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_LIBS = @GSL_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ IP_CFLAGS = @IP_CFLAGS@ IP_LIBS = @IP_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBGOFFICE_CFLAGS = @LIBGOFFICE_CFLAGS@ LIBGOFFICE_LIBS = @LIBGOFFICE_LIBS@ LIBGSF_CFLAGS = @LIBGSF_CFLAGS@ LIBGSF_LIBS = @LIBGSF_LIBS@ LIBGVC_CFLAGS = @LIBGVC_CFLAGS@ LIBGVC_LIBS = @LIBGVC_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ 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@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ REQUIRED_PACKAGES_CFLAGS = @REQUIRED_PACKAGES_CFLAGS@ REQUIRED_PACKAGES_LIBS = @REQUIRED_PACKAGES_LIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOP_SRCDIR = @TOP_SRCDIR@ UPDATE_DESKTOP_DATABASE = @UPDATE_DESKTOP_DATABASE@ UPDATE_MIME_DATABASE = @UPDATE_MIME_DATABASE@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XDG_OPEN = @XDG_OPEN@ XGETTEXT = @XGETTEXT@ 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@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ startdir = $(pkgdatadir)/compat/7.16 start_DATA = \ Math.def \ Image.def \ Colour.def \ Tasks.def \ Object.def \ Filter.def \ Matrix.def \ Widgets.def \ Histogram.def \ Preferences.ws \ _joe_extra.def \ _joe_utilities.def \ _convert.def \ _generate.def \ _list.def \ _predicate.def \ _stdenv.def \ _Object.def \ _types.def EXTRA_DIST = $(start_DATA) all: all-am .SUFFIXES: $(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) --foreign share/nip2/compat/7.16/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign share/nip2/compat/7.16/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): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-startDATA: $(start_DATA) @$(NORMAL_INSTALL) @list='$(start_DATA)'; test -n "$(startdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(startdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(startdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(startdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(startdir)" || exit $$?; \ done uninstall-startDATA: @$(NORMAL_UNINSTALL) @list='$(start_DATA)'; test -n "$(startdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(startdir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: 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 check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(startdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-startDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-startDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-startDATA install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags-am uninstall uninstall-am uninstall-startDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: nip2-8.7.0/share/nip2/compat/7.16/Matrix.def0000644000175000017500000002066113224651032015076 00000000000000 Matrix_build_item = class Menupullright "_New" "make a new matrix of some sort" { Plain_item = class Menuaction "_Plain" "make a new plain matrix widget" { action = Matrix (identity_matrix 3); } Convolution_item = class Menuaction "_Convolution" "make a new convolution matrix widget" { action = Matrix_con 1 0 [[0, 0, 0], [0, 1, 0], [0, 0, 0]]; } Recombination_item = class Menuaction "_Recombination" "make a new recombination matrix widget" { action = Matrix_rec (identity_matrix 3); } Morphology_item = class Menuaction "_Morphology" "make a new morphology matrix widget" { action = Matrix_mor [[0, 0, 0], [0, 255, 0], [0, 0, 0]]; } sep1 = Menuseparator; Matrix_gaussian_item = class Menuaction "_Gaussian" "make a gaussian matrix" { action = class _result { _vislevel = 3; s = Scale "Sigma" 0.001 10 1; ma = Scale "Minimum amplitude" 0 1 0.2; integer = Toggle "Integer" false; _result = fn s.value ma.value { fn = im_gauss_imask, integer = im_gauss_dmask; } } } Matrix_laplacian_item = class Menuaction "_Laplacian" "make the Laplacian of a Gaussian matrix" { action = class _result { _vislevel = 3; s = Scale "Sigma" 0.001 10 1.5; ma = Scale "Minimum amplitude" 0 1 0.1; integer = Toggle "Integer" false; _result = fn s.value ma.value { fn = im_log_imask, integer = im_log_dmask; } } } } Matrix_to_matrix_item = class Menuaction "Con_vert to Matrix" "convert anything to a matrix" { action x = to_matrix x; } #separator Matrix_extract_item = class Menupullright "_Extract" "extract rows or columns from a matrix" { Rows_item = class Menuaction "_Rows" "extract rows" { action x = class _result { _vislevel = 3; first = Expression "Extract from row" 0; number = Expression "Extract this many rows" 1; _result = map_unary process x { process x = extract_area 0 first (get_width x) number x; } } } Columns_item = class Menuaction "_Columns" "extract columns" { action x = class _result { _vislevel = 3; first = Expression "Extract from column" 0; number = Expression "Extract this many columns" 1; _result = map_unary process x { process mat = extract_area first 0 number (get_height x) x; } } } Area_item = class Menuaction "_Area" "extract area" { action x = class _result { _vislevel = 3; left = Expression "First column" 0; top = Expression "First row" 0; width = Expression "Number of columns" 1; height = Expression "Number of rows" 1; _result = map_unary process x { process mat = extract_area left top width height x; } } } Diagonal_item = class Menuaction "_Diagonal" "extract diagonal" { action x = class _result { _vislevel = 3; which = Option "Extract" [ "Leading Diagonal", "Trailing Diagonal" ] 0; _result = map_unary process x { process mat = mat.Matrix_base (map2 extr [0..] mat.value), which == 0 = mat.Matrix_base (map2 extr [mat.width - 1, mat.width - 2 .. 0] mat.value); extr n l = [l?n]; } } } } Matrix_insert_item = class Menupullright "_Insert" "insert rows or columns into a matrix" { // make a new 8-bit uchar image of wxh with pixels set to p // use to generate new cells newim w h p = image_new w h 1 Image_format.UCHAR Image_coding.NOCODING Image_type.B_W p 0 0; Rows_item = class Menuaction "_Rows" "insert rows" { action x = class _result { _vislevel = 3; first = Expression "Insert at row" 0; number = Expression "Insert this many rows" 1; item = Expression "Set new cells to" 0; _result = map_unary process x { process x = foldl1 join_tb (concat [top, new, bottom]) { top = [extract_area 0 0 w f x], f > 0 = []; new = [(if is_Matrix x then to_matrix else id) (newim w number item.expr)]; bottom = [extract_area 0 f w (h - f) x], f < h = []; f = to_real first; w = get_width x; h = get_height x; } } } } Columns_item = class Menuaction "_Columns" "insert columns" { action x = class _result { _vislevel = 3; first = Expression "Insert at column" 0; number = Expression "Insert this many columns" 1; item = Expression "Set new cells to" 0; _result = map_unary process x { process x = foldl1 join_lr (concat [left, new, right]) { left = [extract_area 0 0 f h x], f > 0 = []; new = [(if is_Matrix x then to_matrix else id) (newim number h item.expr)]; right = [extract_area f 0 (w - f) h x], f < w = []; f = to_real first; w = get_width x; h = get_height x; } } } } } Matrix_delete_item = class Menupullright "_Delete" "delete rows or columns from a matrix" { // remove number of items, starting at first delete first number l = take (to_real first) l ++ drop (to_real first + to_real number) l; Rows_item = class Menuaction "_Rows" "delete rows" { action x = class _result { _vislevel = 3; first = Expression "Delete from row" 0; number = Expression "Delete this many rows" 1; _result = map_unary process x { process x = foldl1 join_tb (concat [top, bottom]) { top = [extract_area 0 0 w f x], f > 0 = []; bottom = [extract_area 0 b w (h - b) x], b < h = []; f = to_real first; n = to_real number; b = f + n; w = get_width x; h = get_height x; } } } } Columns_item = class Menuaction "_Columns" "delete columns" { action x = class _result { _vislevel = 3; first = Expression "Delete from column" 0; number = Expression "Delete this many columns" 1; _result = map_unary process x { process x = foldl1 join_lr (concat [left, right]) { left = [extract_area 0 0 f h x], f > 0 = []; right = [extract_area r 0 (w - r) h x], r < w = []; f = to_real first; n = to_real number; r = f + n; w = get_width x; h = get_height x; } } } } } Matrix_join = class Menupullright "_Join" "join two matricies" { Left_right_item = class Menuaction "_Left to Right" "join two matricies left-right" { action a b = map_binary join_lr a b; } Top_bottom_item = class Menuaction "_Top to Bottom" "joiin two matricies top-bottom" { action a b = map_binary join_tb a b; } } Matrix_rotate_item = class Menupullright "_Rotate" "clockwise rotation by fixed angles" { rot90 = Image_transform_item.Rotate_item.Fixed_item.Rot90_item; rot180 = Image_transform_item.Rotate_item.Fixed_item.Rot180_item; rot270 = Image_transform_item.Rotate_item.Fixed_item.Rot270_item; Matrix_rot45_item = class Menuaction "_45 Degrees" "45 degree rotate (square, odd-length-sides only)" { action x = map_unary rot45 x; } } Matrix_flip_item = Image_transform_item.Flip_item; #separator Matrix_invert_item = class Menuaction "In_vert" "calculate inverse matrix" { action x = map_unary (converse power (-1)) x; } Matrix_transpose_item = class Menuaction "_Transpose" "swap rows and columns" { action x = map_unary transpose x; } #separator Matrix_plot_scatter_item = class Menuaction "_Plot Scatter" "plot a scatter graph of a matrix of [x,y1,y2,..] coordinates" { action x = class _result { _check_args = [ [x, "x", check_Matrix] ] ++ super._check_args; _vislevel = 3; auto = Toggle "Auto Range" true; xmin = Expression "X range minimum" 0; xmax = Expression "X range maximum" 1; ymin = Expression "Y range minimum" 0; ymax = Expression "Y range maximum" 1; _result = Plot options ((x2b @ get_image @ to_image) x) { options = [$style => Plot_style.POINT, $format => Plot_format.XYYY] ++ range; range = [], auto = [$xmin => xmin.expr, $xmax => xmax.expr, $ymin => ymin.expr, $ymax => ymax.expr]; // matrix to image makes a 1-band mxn image // we need to put columns into bands x2b im = bandjoin (map extract_col [0 .. w - 1]) { w = get_width im; h = get_height im; b = get_bands im; extract_col x = extract_area x 0 1 h im; } } } } Matrix_plot_item = Hist_plot_item; Matrix_buildlut_item = class Menuaction "_Build LUT From Scatter" "make a lookup table from a matrix of [x,y1,y2..] coordinates" { action x = class _result { _check_args = [ [x, "x", check_Matrix] ] ++ super._check_args; _result = buildlut x; } } nip2-8.7.0/share/nip2/compat/7.16/_convert.def0000644000175000017500000004336513224651032015457 00000000000000 /* Try to make a Matrix ... works for Vector/Image/Real, plus image/real */ to_matrix x = to_matrix x.expr, is_Expression x = x, is_Matrix x = oo_unary_function to_matrix_op x, is_class x = tom x { to_matrix_op = Operator "to_matrix" tom Operator_type.COMPOUND false; tom x = Matrix (itom x), is_image x = Matrix [[x]], is_real x = Matrix [x], is_real_list x = Matrix x, is_matrix x = error (_ "bad arguments to " ++ "to_matrix"); itom i = (im_vips2mask ((double) i)).value, is_image i = error (_ "not image"); } /* Try to make an Image ... works for Vector/Matrix/Real, plus image/real * Special case for Colour ... pull out the colour_space and set Type in the * image. */ to_image x = to_image x.expr, is_Expression x = x, is_Image x = Image (image_set_type (Image_type.colour_spaces.lookup 0 1 x.colour_space) (mtoi [x.value])), is_Colour x = oo_unary_function to_image_op x, is_class x = toi x { to_image_op = Operator "to_image" toi Operator_type.COMPOUND false; toi x = Image x, is_image x = Image (mtoi [[x]]), is_real x = Image (mtoi [x]), is_real_list x = Image (mtoi x), is_matrix x = error (_ "bad arguments to " ++ "to_image"); // [[real]] -> image mtoi m = im_mask2vips (Matrix m), width != 3 = joinup (im_mask2vips (Matrix m)) { width = len m?0; height = len m; joinup i = b1 ++ b2 ++ b3 { b1 = extract_area 0 0 1 height i; b2 = extract_area 1 0 1 height i; b3 = extract_area 2 0 1 height i; } } } /* Try to make a Colour. */ to_colour x = to_colour x.expr, is_Expression x = x, is_Colour x = to_colour (extract_area x.left x.top 1 1 x.image), is_Mark x = oo_unary_function to_colour_op x, is_class x = toc x { to_colour_op = Operator "to_colour" toc Operator_type.COMPOUND false; toc x = Colour (colour_space (get_type x)) (map mean (bandsplit (get_image x))), has_image x && has_type x = Colour "sRGB" [x, x, x], is_real x // since Colour can't do mono = Colour "sRGB" x, is_real_list x && is_list_len 3 x = map toc x, is_matrix x = error (_ "bad arguments to " ++ "to_colour"); colour_space type = table.get_name type, table.has_name type = error (_ "unable to make Colour from " ++ table.get_name type ++ _ " image") { table = Image_type.colour_spaces; } } /* Try to make a real. (not a Real!) */ to_real x = to_real x.expr, is_Expression x = oo_unary_function to_real_op x, is_class x = tor x { to_real_op = Operator "to_real" tor Operator_type.COMPOUND false; tor x = x, is_real x = abs x, is_complex x = 1, is_bool x && x = 0, is_bool x && !x = error (_ "bad arguments to " ++ "to_real"); } /* Try to make a list ... ungroup, basically. We remove the innermost layer of * Groups. */ to_list x = x.value, is_Group x && !contains_Group x.value = Group (map to_list x.value), is_Group x = x; /* Try to make a group. The innermost list objects become Group()'d. */ to_group x = Group x, is_list x && !contains_Group x = Group (map to_group x.value), is_Group x = x; /* Parse a positive integer. */ parse_pint l = foldl acc 0 l { acc sofar ch = sofar * 10 + parse_c ch; /* Turn a char digit to a number. */ parse_c ch = error (_ "not a digit"), !is_digit ch = (int) ch - (int) '0'; } /* Parse an integer, with an optional sign character. */ parse_int l = error (_ "badly formed number"), !is_list_len 2 parts = sign * n { parts = splitpl [member "+-", is_digit] l; n = parse_pint parts?1; sign = 1, parts?0 == [] || parts?0 == "+" = -1; } /* Parse a float. * [+-]?[0-9]*([.][0-9]*)?(e[0-9]+)? */ parse_float l = err, !is_list_len 4 parts = (ipart + fpart) * 10 ** exp { err = error (_ "badly formed number"); parts = splitpl [ member "+-0123456789", member ".0123456789", member "eE", member "+-0123456789" ] l; ipart = parse_int parts?0; fpart = 0, parts?1 == []; = err, parts?1?0 != '.' = parse_pint (tl parts?1) / 10 ** (len parts?1 - 1); exp = 0, parts?2 == [] && parts?3 == [] = err, parts?2 == [] = parse_int parts?3; } /* Parse a time in "hh:mm:ss" into seconds. We could do this in one line :) = (sum @ map2 multiply (iterate (multiply 60) 1) @ reverse @ map parse_pint @ map (subscript (splitpl [is_digit, equal ':', is_digit, equal ':', is_digit] l))) [0,2,4]; but it's totally unreadable. */ parse_time l = error (_ "badly formed time"), !is_list_len 5 parts = s + 60 * m + 60 * 60 * h { parts = splitpl [is_digit, equal ':', is_digit, equal ':', is_digit] l; h = parse_int parts?0; m = parse_int parts?2; s = parse_int parts?4; } /* matrix to convert D65 XYZ to D50 XYZ ... direct conversion, found by * measuring a macbeth chart in D50 and D65 and doing a LMS to get a matrix */ D652D50_direct = Matrix [[ 1.13529, -0.0604663, -0.0606321 ], [ 0.0975399, 0.935024, -0.0256156 ], [ -0.0336428, 0.0414702, 0.994135 ]]; D502D65_direct = D652D50_direct ** -1; /* Convert normalised XYZ to bradford RGB. */ XYZ2RGBbrad = Matrix [[0.8951, 0.2664, -0.1614], [-0.7502, 1.7135, 0.0367], [0.0389, -0.0685, 1.0296]]; /* Convert bradford RGB to normalised XYZ. */ RGBbrad2XYZ = XYZ2RGBbrad ** -1; D93_whitepoint = Vector [89.7400, 100, 130.7700]; D75_whitepoint = Vector [94.9682, 100, 122.5710]; D65_whitepoint = Vector [95.0470, 100, 108.8827]; D55_whitepoint = Vector [95.6831, 100, 92.0871]; D50_whitepoint = Vector [96.4250, 100, 82.4680]; A_whitepoint = Vector [109.8503, 100, 35.5849]; // 2856K B_whitepoint = Vector [99.0720, 100, 85.2230]; // 4874K C_whitepoint = Vector [98.0700, 100, 118.2300]; // 6774K E_whitepoint = Vector [100, 100, 100]; // ill. free D3250_whitepoint = Vector [105.6590, 100, 45.8501]; Whitepoints = Enum [ $D93 => D93_whitepoint, $D75 => D75_whitepoint, $D65 => D65_whitepoint, $D55 => D55_whitepoint, $D50 => D50_whitepoint, $A => A_whitepoint, $B => B_whitepoint, $C => C_whitepoint, $E => E_whitepoint, $D3250 => D3250_whitepoint ]; /* Convert D50 XYZ to D65 using the bradford chromatic adaptation approx. */ im_D502D65 xyz = xyz''' { xyz' = xyz / D50_whitepoint; rgb = recomb XYZ2RGBbrad xyz'; // move white in bradford RGB rgb' = rgb / Vector [0.94, 1.02, 1.33]; xyz'' = recomb RGBbrad2XYZ rgb'; // back to D65 xyz''' = xyz'' * D65_whitepoint; } /* Convert D65 XYZ to D50 using the bradford approx. */ im_D652D50 xyz = xyz''' { xyz' = xyz / D65_whitepoint; rgb = recomb XYZ2RGBbrad xyz'; // move white in bradford RGB rgb' = rgb * Vector [0.94, 1.02, 1.33]; xyz'' = recomb RGBbrad2XYZ rgb'; xyz''' = xyz'' * D50_whitepoint; } /* Convert D50 XYZ to Lab. */ im_D50XYZ2Lab xyz = im_XYZ2Lab_temp xyz D50_whitepoint.value?0 D50_whitepoint.value?1 D50_whitepoint.value?2; im_D50Lab2XYZ lab = im_Lab2XYZ_temp lab D50_whitepoint.value?0 D50_whitepoint.value?1 D50_whitepoint.value?2; /* ... and mono conversions */ im_sRGB2mono in = (image_set_type Image_type.B_W @ clip2fmt (get_header "BandFmt" in) @ recomb (Matrix [[.3, .6, .1]])) in; im_mono2sRGB in = image_set_type Image_type.sRGB (in ++ in ++ in); im_sRGB2Lab = im_XYZ2Lab @ im_sRGB2XYZ; im_Lab2sRGB = im_XYZ2sRGB @ im_Lab2XYZ; // from the 16 bit RGB and GREY formats im_1628 x = im_clip (x >> 8); im_162f x = x / 256; im_8216 x = (im_clip2us x) << 8; im_f216 x = im_clip2us (x * 256); im_RGB162GREY16 in = (image_set_type Image_type.GREY16 @ clip2fmt (get_header "BandFmt" in) @ recomb (Matrix [[.3, .6, .1]])) in; im_GREY162RGB16 in = image_set_type Image_type.RGB16 (in ++ in ++ in); /* apply a func to an image ... make it 1 or 3 bands, and reapply other bands * on the way out. Except if it's LABPACK. */ colour_apply fn x = fn x, b == 1 || b == 3 || c == Image_coding.LABPACK = x'' { b = get_bands x; c = get_coding x; first = extract_bands 0 3 x, b > 3 = extract_bands 0 1 x; tail = extract_bands 3 (b - 3) x, b > 3 = extract_bands 1 (b - 1) x; x' = fn first; x'' = x' ++ clip2fmt (get_format x') tail; } /* Any 1-ary colour op, applied to Vector/Image/Matrix or image */ colour_unary fn x = oo_unary_function colour_op x, is_class x = colour_apply fn x, is_image x = colour_apply fn [x], is_real x = error (_ "bad arguments to " ++ "colour_unary") { // COMPOUND_REWRAP ... signal to the colour class to go to image and // back colour_op = Operator "colour_unary" colour_object Operator_type.COMPOUND_REWRAP false; colour_object x = colour_real_list x, is_real_list x = map colour_real_list x, is_matrix x = colour_apply fn x, is_image x = error (_ "bad arguments to " ++ "colour_unary"); colour_real_list l = (to_matrix (fn (float) (to_image (Vector l)).value)).value?0; } /* Any symmetric 2-ary colour op, applied to Vector/Image/Matrix or image ... * name is op name for error messages etc. */ colour_binary name fn x y = oo_binary_function colour_op x y, is_class x = oo_binary'_function colour_op x y, is_class y = fn x y, is_image x && is_image y = error (_ "bad arguments to " ++ name) { colour_op = Operator name colour_object Operator_type.COMPOUND_REWRAP true; colour_object x y = fn x y, is_image x && is_image y = colour_real_list fn x y, is_real_list x && is_real_list y = map (colour_real_list fn x) y, is_real_list x && is_matrix y = map (colour_real_list (converse fn) y) x, is_matrix x && is_real_list y = map2 (colour_real_list fn) x y, is_matrix x && is_matrix y = error (_ "bad arguments to " ++ name); colour_real_list fn l1 l2 = (to_matrix (fn i1 i2)).value?0 { i1 = (float) (to_image (Vector l1)).value; i2 = (float) (to_image (Vector l2)).value; } } _colour_conversion_table = [ /* Lines are [space-from, space-to, conversion function]. Could do * this as a big array, but table lookup feels safer. */ [B_W, B_W, image_set_type B_W], [B_W, XYZ, im_sRGB2XYZ @ im_mono2sRGB @ im_clip], [B_W, YXY, im_XYZ2Yxy @ im_sRGB2XYZ @ im_mono2sRGB @ im_clip], [B_W, LAB, im_sRGB2Lab @ im_mono2sRGB @ im_clip], [B_W, LCH, im_Lab2LCh @ im_sRGB2Lab @ im_mono2sRGB @ im_clip], [B_W, UCS, im_XYZ2UCS @ im_sRGB2XYZ @ im_mono2sRGB @ im_clip], [B_W, RGB, im_XYZ2disp @ im_sRGB2XYZ @ im_mono2sRGB @ im_clip], [B_W, sRGB, im_mono2sRGB @ im_clip], [B_W, RGB16, image_set_type RGB16 @ im_8216 @ im_mono2sRGB], [B_W, GREY16, image_set_type GREY16 @ im_8216], [B_W, LABQ, im_Lab2LabQ @ im_sRGB2Lab @ im_mono2sRGB @ im_clip], [B_W, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_sRGB2Lab @ im_mono2sRGB @ im_clip], [XYZ, B_W, im_sRGB2mono @ im_XYZ2sRGB @ im_clip2f], [XYZ, XYZ, image_set_type XYZ], [XYZ, YXY, im_XYZ2Yxy @ im_clip2f], [XYZ, LAB, im_XYZ2Lab @ im_clip2f], [XYZ, LCH, im_Lab2LCh @ im_XYZ2Lab], [XYZ, UCS, im_XYZ2UCS @ im_clip2f], [XYZ, RGB, im_XYZ2disp @ im_clip2f], [XYZ, sRGB, im_XYZ2sRGB @ im_clip2f], [XYZ, LABQ, im_Lab2LabQ @ im_XYZ2Lab @ im_clip2f], [XYZ, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_XYZ2Lab @ im_clip2f], [YXY, B_W, im_sRGB2mono @ im_XYZ2sRGB @ im_Yxy2XYZ @ im_clip2f], [YXY, XYZ, im_Yxy2XYZ @ im_clip2f], [YXY, YXY, image_set_type YXY], [YXY, LAB, im_XYZ2Lab @ im_Yxy2XYZ @ im_clip2f], [YXY, LCH, im_Lab2LCh @ im_XYZ2Lab @ im_Yxy2XYZ @ im_clip2f], [YXY, UCS, im_XYZ2UCS @ im_Yxy2XYZ @ im_clip2f], [YXY, RGB, im_XYZ2disp @ im_Yxy2XYZ @ im_clip2f], [YXY, sRGB, im_XYZ2sRGB @ im_Yxy2XYZ @ im_clip2f], [YXY, LABQ, im_Lab2LabQ @ im_XYZ2Lab @ im_Yxy2XYZ @ im_clip2f], [YXY, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_XYZ2Lab @ im_Yxy2XYZ @ im_clip2f], [LAB, B_W, im_sRGB2mono @ im_Lab2sRGB @ im_Lab2XYZ @ im_clip2f], [LAB, XYZ, im_Lab2XYZ @ im_clip2f], [LAB, YXY, im_XYZ2Yxy @ im_Lab2XYZ @ im_clip2f], [LAB, LAB, image_set_type LAB @ im_clip2f], [LAB, LCH, im_Lab2LCh @ im_clip2f], [LAB, UCS, im_Lab2UCS @ im_clip2f], [LAB, RGB, im_Lab2disp @ im_clip2f], [LAB, sRGB, im_Lab2sRGB @ im_clip2f], [LAB, LABQ, im_Lab2LabQ @ im_clip2f], [LAB, LABS, im_Lab2LabS @ im_clip2f], [LCH, B_W, im_sRGB2mono @ im_Lab2sRGB @ im_LCh2Lab @ im_clip2f], [LCH, XYZ, im_Lab2XYZ @ im_LCh2Lab @ im_clip2f], [LCH, YXY, im_XYZ2Yxy @ im_Lab2sRGB @ im_LCh2Lab @ im_clip2f], [LCH, LAB, im_LCh2Lab @ im_clip2f], [LCH, LCH, image_set_type LCH], [LCH, UCS, im_LCh2UCS @ im_clip2f], [LCH, RGB, im_Lab2disp @ im_LCh2Lab @ im_clip2f], [LCH, sRGB, im_Lab2sRGB @ im_LCh2Lab @ im_clip2f], [LCH, LABQ, im_Lab2LabQ @ im_LCh2Lab @ im_clip2f], [LCH, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_LCh2Lab @ im_clip2f], [UCS, B_W, im_sRGB2mono @ im_XYZ2sRGB @ im_UCS2XYZ @ im_clip2f], [UCS, XYZ, im_UCS2XYZ @ im_clip2f], [UCS, YXY, im_XYZ2Yxy @ im_Lab2XYZ @ im_UCS2Lab @ im_clip2f], [UCS, LAB, im_UCS2Lab @ im_clip2f], [UCS, LCH, im_UCS2LCh @ im_clip2f], [UCS, UCS, image_set_type UCS], [UCS, RGB, im_Lab2disp @ im_UCS2Lab @ im_clip2f], [UCS, sRGB, im_Lab2sRGB @ im_UCS2Lab @ im_clip2f], [UCS, LABQ, im_Lab2LabQ @ im_UCS2Lab @ im_clip2f], [UCS, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_UCS2Lab @ im_clip2f], [RGB, B_W, im_sRGB2mono @ im_XYZ2sRGB @ im_disp2XYZ @ im_clip], [RGB, XYZ, im_disp2XYZ @ im_clip], [RGB, YXY, im_XYZ2Yxy @ im_disp2XYZ @ im_clip], [RGB, LAB, im_disp2Lab @ im_clip], [RGB, LCH, im_Lab2LCh @ im_disp2Lab @ im_clip], [RGB, UCS, im_Lab2UCS @ im_disp2Lab @ im_clip], [RGB, RGB, image_set_type RGB], [RGB, sRGB, im_XYZ2sRGB @ im_disp2XYZ @ im_clip], [RGB, RGB16, image_set_type RGB16 @ im_8216], [RGB, GREY16, image_set_type GREY16 @ im_8216 @ im_sRGB2mono], [RGB, LABQ, im_Lab2LabQ @ im_disp2Lab @ im_clip], [RGB, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_disp2Lab @ im_clip], [sRGB, B_W, im_sRGB2mono], [sRGB, XYZ, im_sRGB2XYZ @ im_clip], [sRGB, YXY, im_XYZ2Yxy @ im_sRGB2XYZ @ im_clip], [sRGB, LAB, im_sRGB2Lab @ im_clip], [sRGB, LCH, im_Lab2LCh @ im_sRGB2Lab @ im_clip], [sRGB, UCS, im_XYZ2UCS @ im_sRGB2XYZ @ im_clip], [sRGB, RGB, im_XYZ2disp @ im_sRGB2XYZ @ im_clip], [sRGB, sRGB, image_set_type sRGB], [sRGB, RGB16, image_set_type RGB16 @ im_8216], [sRGB, GREY16, image_set_type GREY16 @ im_8216 @ im_sRGB2mono], [sRGB, LABQ, im_Lab2LabQ @ im_sRGB2Lab @ im_clip], [sRGB, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_sRGB2Lab @ im_clip], [RGB16, B_W, im_1628 @ im_sRGB2mono], [RGB16, RGB, image_set_type RGB @ im_1628], [RGB16, sRGB, image_set_type sRGB @ im_1628], [RGB16, RGB16, image_set_type RGB16], [RGB16, GREY16, im_RGB162GREY16], [GREY16, B_W, image_set_type B_W @ im_1628], [GREY16, RGB, im_mono2sRGB @ im_1628], [GREY16, sRGB, im_mono2sRGB @ im_1628], [GREY16, RGB16, im_GREY162RGB16], [GREY16, GREY16, image_set_type GREY16], [LABQ, B_W, im_sRGB2mono @ im_Lab2sRGB @ im_LabQ2Lab], [LABQ, XYZ, im_Lab2XYZ @ im_LabQ2Lab], [LABQ, YXY, im_XYZ2Yxy @ im_Lab2XYZ @ im_LabQ2Lab], [LABQ, LAB, im_LabQ2Lab], [LABQ, LCH, im_Lab2LCh @ im_LabQ2Lab], [LABQ, UCS, im_Lab2UCS @ im_LabQ2Lab], [LABQ, RGB, im_LabQ2disp], [LABQ, sRGB, im_Lab2sRGB @ im_LabQ2Lab], [LABQ, LABQ, image_set_type LABQ], [LABQ, LABS, im_LabQ2LabS], [LABS, B_W, im_sRGB2mono @ im_Lab2sRGB @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, XYZ, im_Lab2XYZ @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, YXY, im_XYZ2Yxy @ im_Lab2XYZ @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, LAB, im_LabS2Lab], [LABS, LCH, im_Lab2LCh @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, UCS, im_Lab2UCS @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, RGB, im_LabQ2disp @ im_LabS2LabQ @ im_clip2s], [LABS, sRGB, im_XYZ2sRGB @ im_Lab2XYZ @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, LABQ, im_LabS2LabQ @ im_clip2s], [LABS, LABS, image_set_type LABS] ] { /* From Image_type ... repeat here for brevity. Use same ordering as * in Colour menu for consistency. */ B_W = 1; XYZ = 12; YXY = 23; LAB = 13; LCH = 19; UCS = 18; RGB = 17; sRGB = 22; RGB16 = 25; GREY16 = 26; LABQ = 16; LABS = 21; } /* Transform between two colour spaces. */ colour_transform from to in = colour_unary _colour_conversion_table?i?2 in, i >= 0 = error (_ "unable to convert " ++ Image_type.type_names.get_name from ++ _ " to " ++ Image_type.type_names.get_name to) { match x = x?0 == from && x?1 == to; i = index match _colour_conversion_table; } /* Transform to a colour space, assuming the type field in the input is * correct */ colour_transform_to to in = colour_transform (get_type in) to in; /* Given a list of things, try to make them all the same size. Don't change * the format. Don't touch non-image things. */ size_alike l = map enlarge l { max_width = foldr (test_prop has_width get_width) 0 l; max_height = foldr (test_prop has_height get_height) 0 l; test_prop has get x best = best, !has x = max_pair best (get x); enlarge x = embed 0 0 0 max_width max_height x, has_width x = x; } /* Given a list of things, look for 1 band objects and bump them to to n - * band objects, where n is the maximum number of bands. Don't change the * format. Don't touch non-image things. */ bands_alike l = map upband l { max_bands = foldr (test_prop has_bands get_bands) 0 l; test_prop has get x best = best, !has x = max_pair best (get x); upband x = bandjoin (replicate max_bands x), has_bands x && get_bands x == 1 = x; } /* Given a list of things, try to match the formats. Don't touch non-image * objects. */ formats_alike l = map upformat l { max_format = foldr (test_prop has_format get_format) Image_format.UCHAR l; test_prop has get x best = best, !has x = max_pair best (get x); upformat x = clip2fmt max_format x, has_format x = x; } /* String for path separator on this platform. */ path_separator = expand "$SEP"; /* Form a relative pathname. * path_relative ["home", "john"] == "home/john" * path_relative [] == "" */ path_relative l = join_sep path_separator l; /* Form an absolute pathname. * path_absolute ["home", "john"] == "/home/john" * path_absolute [] == "/" * If the first component looks like 'A:', don't add an initial separator. */ path_absolute l = path_relative l, len l?0 == 2 && is_letter l?0?0 && l?0?1 == ':' = path_separator ++ path_relative l; /* Parse a pathname. * path_parse "/home/john" == ["home", "john"] * path_parse "home/john" == ["home", "john"] */ path_parse str = split (equal path_separator?0) str; nip2-8.7.0/share/nip2/compat/7.16/_joe_utilities.def0000644000175000017500000004705113224651032016643 00000000000000/* ******Functions included in start/_NG_utilities.def:****** * * so_balance ref_meanmax im1 im2 mask blur gauss * * nonzero_mean im = no_out * * so_meanmax im = result * * so_calculate ref_meanmax im mask = result * * simple_frame frame im_w im_h ov cs ms bf option = result * * corner_frame frame im_w im_h ov cs ms bf = result * * build_frame r_tl r_tr r_bl r_br r_mt r_mb r_ml r_mr im_w im_h ov bf = result * * complex_frame frame im_w im_h ov cs es ms bf option= result * * complex_edge ra rb t bl d = rc * * frame_lr_min r_l r_r target bw = result * * frame_tb_min r_t r_b target bw = result * * frame_position_image im ref os colour= result * * merge_array bw arr = result * * merge_to_scale im target blend dir = result * * select_ellipse line width = mask * * select_tetragon p1 p2 p3 p4 = mask * * select_polygon pt_list = mask * * perspective_transform to from = trans'' * * sort_pts_clockwise l = l'' * */ /* Called from: * _NG_Extra.def Clone_area_item */ so_balance ref_meanmax im1 im2 mask gauss = result { //ref_meanmax = so_meanmax im1; so_values = so_calculate ref_meanmax im2 mask; im2_cor_a = clip2fmt im2.format im2'', has_member "format" im2 = im2'' {im2'' = im2 * (so_values?0) + (so_values?1);} // Option to convert replacement image to scaled gaussian noise im2_cor = im2_cor_a, gauss == false = clip2fmt im2_cor_a.format gauss_im {gauss_im = im_gaussnoise im2_cor_a.width im2_cor_a.height ref_meanmax?0 (deviation im2_cor_a);} result = im_blend (get_image mask) (get_image im2_cor) (get_image im1); }; //////////////////////////////////////////////////////////////////////////////// /* Calculates the mean of the non zero pixels. * * Called from: * _NG_utilities so_meanmax */ nonzero_mean im = no_out { zero_im = (im == 0); zero_mean = mean zero_im; no_mean = mean im; no_out = no_mean/(1 - (zero_mean/255)); }; //////////////////////////////////////////////////////////////////////////////// /* Calculates the max and nonzero mean of an image * * Called from: * _NG_utilities so_balance * _NG_utilities so_calculate * _NG_Extra.def Clone_area_item * _NG_Extra.def Balance_item.Balance_find_item */ so_meanmax im = result { mean_of_im = nonzero_mean im; adjusted_im = im - mean_of_im; max_of_im = max adjusted_im; result = [mean_of_im, max_of_im]; }; //////////////////////////////////////////////////////////////////////////////// /* Calculates the scale and offset required to match a reference mean and max * * Called from: * _NG_utilities so_balance * _NG_Extra.def Balance_item.Balance_find_item */ so_calculate ref_meanmax im mask = result { im' = if mask then im else 0; im_values = so_meanmax im'; mean_of_ref = ref_meanmax?0; mean_of_im = im_values?0; max_of_ref = ref_meanmax?1; max_of_im = im_values?1; scale = (max_of_ref)/(max_of_im); offset = mean_of_ref - (mean_of_im * scale); result = [ scale, offset ]; }; //////////////////////////////////////////////////////////////////////////////// /* Extends or shortens the central sections of a simple frame to fit round a given image. * * Called from: * _NG_Extra.def Frame_item.Simple_frame_item */ simple_frame frame im_w im_h ov cs ms bf option = result { cs' = (1 - cs); ms' = (0.5 - (ms/2)); ms'' = (1 - cs); //Regions r_tl = Region_relative frame 0 0 cs cs; r_tr = fliplr r_tl, option == true = Region_relative frame cs' 0 cs cs; r_bl = Region_relative frame 0 cs' cs cs; r_br = fliplr r_bl, option == true = Region_relative frame cs' cs' cs cs; r_mt = Region_relative frame ms' 0 ms cs; r_mb = Region_relative frame ms' ms'' ms cs; r_ml = Region_relative frame 0 ms' cs ms; r_mr = fliplr r_ml, option == true = Region_relative frame ms'' ms' cs ms; result = build_frame r_tl r_tr r_bl r_br r_mt r_mb r_ml r_mr im_w im_h ov bf; }; //////////////////////////////////////////////////////////////////////////////// /* Copies and extends a simple frame corner to produce a complete frame to fit round a given image. * * Called from: * _NG_Extra.def Frame_item.Frame_corner_item */ corner_frame frame im_w im_h ov cs ms bf = result { cs' = (1 - cs); ms' = (0.5 - (ms/2)); //Regions r_tl = Region_relative frame 0 0 cs cs; r_tr = fliplr r_tl; r_bl = fliptb r_tl; r_br = fliplr r_bl; r_mt = Region_relative frame ms' 0 ms cs; r_mb = fliptb r_mt; r_ml = Region_relative frame 0 ms' cs ms;; r_mr = fliplr r_ml; result = build_frame r_tl r_tr r_bl r_br r_mt r_mb r_ml r_mr im_w im_h ov bf; }; //////////////////////////////////////////////////////////////////////////////// /* Completes the frame building process for simple_frame and corner_frame. * * _NG_utilities simple_frame * _NG_utilities corner_frame */ build_frame r_tl r_tr r_bl r_br r_mt r_mb r_ml r_mr im_w im_h ov bf = result { //Find pixel thickness of frames section s_width = r_ml.width - mean (im_profile (map_unary fliplr (r_ml.value)?0) 1); s_height = r_mt.height - mean (im_profile (map_unary fliptb (r_mt.value)?0) 0); w_target = im_w + (2 * (s_width - ov)); h_target = im_h + (2 * (s_height - ov)); blend = bf * r_tl.width; cw_target = w_target - (2 * r_tl.width) + (2 * blend), w_target > (2 * r_tl.width) = w_target; ch_target = h_target - (2 * r_tl.height) + (2 * blend), h_target > (2 * r_tl.height) = h_target; //Use regions to produce sections top = merge_to_scale r_mt cw_target blend 0; bottom = merge_to_scale r_mb cw_target blend 0; left = merge_to_scale r_ml ch_target blend 1; right = merge_to_scale r_mr ch_target blend 1; middle = Image (image_new cw_target ch_target left.bands left.format left.coding left.type 0 0 0); //Build sections into full frame. row_1 = frame_lr_min r_tl r_tr w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[r_tl, top, r_tr]]; row_2 = frame_lr_min left right w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[left, middle, right]]; row_3 = frame_lr_min r_bl r_br w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[r_bl, bottom, r_br]]; result = frame_tb_min row_1 row_3 h_target blend, (h_target < (r_tl.height * 2)) = merge_array blend [[row_1], [row_2], [row_3]]; }; //////////////////////////////////////////////////////////////////////////////// /* Extends or shortens the central sections of a frame, preserving any central details on each * edge, to fit round a given image. * * Called from: * _NG_Extra.def Frame_item.Complex_frame_item */ complex_frame frame im_w im_h ov cs es ms bf option= result { cs' = (1 - cs); ms' = (0.5 - (ms/2)); es' = (0.25 - (es/2)); r_tl = Region_relative frame 0 0 cs cs; r_tr = fliplr r_tl, option == true = Region_relative frame cs' 0 cs cs; r_bl = Region_relative frame 0 cs' cs cs; r_br = fliplr r_bl, option == true = Region_relative frame cs' cs' cs cs; r_mt = Region_relative frame ms' 0 ms cs; r_mb = Region_relative frame ms' cs' ms cs; r_ml = Region_relative frame 0 ms' cs ms; r_mr = fliplr r_ml, option == true = Region_relative frame cs' ms' cs ms; r_et = Region_relative frame es' 0 es cs; r_eb = Region_relative frame es' cs' es cs; r_el = Region_relative frame 0 es' cs es; r_er = fliplr r_el, option == true = Region_relative frame cs' es' cs es; //Find pixel thickness of frames section s_width = r_el.width - mean (im_profile (map_unary fliplr (r_el.value)?0) 1); s_height = r_et.height - mean (im_profile (map_unary fliptb (r_et.value)?0) 0); w_target = im_w + (2 * (s_width - ov)); h_target = im_h + (2 * (s_height - ov)); min_size = foldr1 min_pair [r_tl.width, r_tl.height, r_mt.width, r_mt.height, r_et.width, r_et.height]; blend = bf * min_size; cw_target = w_target - (2 * r_tl.width) + (2 * blend); ch_target = h_target - (2 * r_tl.height) + (2 * blend); top = complex_edge r_mt r_et cw_target blend 0; bottom = complex_edge r_mb r_eb cw_target blend 0; left = complex_edge r_ml r_el ch_target blend 1; right = complex_edge r_mr r_er ch_target blend 1; middle = Image (image_new top.width left.height left.bands left.format left.coding left.type 0 0 0); //Build regions into full frame. row_1 = frame_lr_min r_tl r_tr w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[r_tl, top, r_tr]]; row_2 = frame_lr_min left right w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[left, middle, right]]; row_3 = frame_lr_min r_bl r_br w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[r_bl, bottom, r_br]]; result = frame_tb_min row_1 row_3 h_target blend, (h_target < (r_tl.height * 2)) = merge_array blend [[row_1], [row_2], [row_3]]; }; //////////////////////////////////////////////////////////////////////////////// /* Function called by complex frame, used to produce section * * Called from: * _NG_utilities.def complex_frame */ complex_edge ra rb t bl d = rc { e1 = ceil (ra.width - t)/2, d == 0 = 0; e2 = 0, d == 0 = ceil (ra.height - t)/2; e3 = t, d == 0 = ra.width; e4 = ra.height, d == 0 = t; check = ra.width, d == 0; = ra.height; rai = get_image ra; t2 = (t - ra.width + (2 * bl))/2, d == 0 = (t - ra.height + (2 * bl))/2; rc = ra , t <= 0 = Image (im_extract_area rai e1 e2 e3 e4), t <= check = merge_array bl [[rb',ra,rb']], d == 0 = merge_array bl [[rb'],[ra],[rb']] {rb' = merge_to_scale rb t2 bl d;} } ////////////////////////////////////////////////////////////////////////////// /* Blends two images left/right to produce an image a specific width. * * _NG_utilities build_frame * _NG_utilities complex_frame */ frame_lr_min r_l r_r target bw = result { //Calculating the new widh required for each image. no = (target/2 + bw); n_w = no, (r_l.width > no) = r_l.width; //Removing excess from what will be the middle of the final image. n_l = im_extract_area r_l.value 0 0 n_w r_l.height; n_r = im_extract_area r_r.value (r_r.width - n_w) 0 n_w r_l.height; //Merge the two image together with a bw*2 pixel overlap. result = Image (im_lrmerge n_l n_r ((bw*2) - n_w) 0 bw); }; ////////////////////////////////////////////////////////////////////////////// /* Blends two images top/bottom to produce an image a specific width. * * _NG_utilities build_frame * _NG_utilities complex_frame */ frame_tb_min r_t r_b target bw = result { //Calculating the new height required for each image. no = (target/2 + bw); n_h = no, (r_t.height > no) = r_t.height; //Removing excess from what will be the middle of the final image. n_t = im_extract_area r_t.value 0 0 r_t.width n_h; n_b = im_extract_area r_b.value 0 (r_b.height - n_h) r_b.width n_h; //Merge the two image together with a 50 pixel overlap. result = Image (im_tbmerge n_t n_b 0 ((bw*2) -n_h) bw); }; ////////////////////////////////////////////////////////////////////////////// /* Resixe canvas of an image to accomodate a frame and possible mount * * Called from: * _NG_Extra.def Frame_item.Frame_corner_item * _NG_Extra.def Frame_item.Simple_frame_item * _NG_Extra.def Frame_item.Complex_frame_item */ frame_position_image im ref os colour= result { background = image_new ref.width ref.height im.bands im.format im.coding im.type colour 0 0; result = insert_noexpand xp yp im background { xp = (ref.width - im.width)/2; yp = (ref.height - im.height - os)/2; } }; ////////////////////////////////////////////////////////////////////////////// /* Merges an array of images together according to blend width bw * * Called from: * _NG_Utilites.def build_frame * _NG_Utilites.def complex_frame * _NG_Utilites.def complex_edge */ merge_array bw arr = result { merge_lr bw im1 im2 = im3 { bw' = get_header "Xsize" (get_image im1); bw'' = -(bw' - bw); im3 = im_lrmerge (get_image im1) (get_image im2) bw'' 0 bw; } merge_tb bw im1 im2 = im3 { bw' = get_header "Ysize" (get_image im1); bw'' = -(bw' - bw); im3 = im_tbmerge (get_image im1) (get_image im2) 0 bw'' bw; } im_out = (image_set_origin 0 0 @ foldl1 (merge_tb bw) @ map (foldl1 (merge_lr bw))) arr; result = Image im_out; } ////////////////////////////////////////////////////////////////////////////// /* Repeatably top/bottom add clones of im, with a defined overlap, until final height > target * * Called from: * _NG_Utilites.def build_frame * _NG_Utilites.def complex_edge */ merge_to_scale im target blend dir = result { blend' = floor blend; //allow fir lr or tb process var_a = im.width, dir == 0 = im.height; var_w = im.width, dir == 1 = target, target > blend' = blend'; var_h = im.height, dir == 0 = target, target > blend' = blend'; //total numner of copies of im requires, taking overlap into account. no_loops = ceil ((log ((target - blend')/(var_a - blend')))/(log 2)); process im no = result { pr_a = get_header "Xsize" (get_image im), dir == 0 = get_header "Ysize" (get_image im); pr_b = -(pr_a - blend' + 1); im' = im_lrmerge (get_image im) (get_image im) pr_b 0 blend', dir == 0 = im_tbmerge (get_image im) (get_image im) 0 pr_b blend'; no' = no - 1; result = im', no' < 1 = process im' no'; } im_tmp = im.value, var_a > target = process im no_loops; result = Image (im_extract_area (get_image im_tmp) 0 0 var_w var_h); } ////////////////////////////////////////////////////////////////////////////// /* Selects an elispe based on a line and a width * * Called from: * _NG_Extra.def Select_item.Elipse */ select_ellipse line width = mask { im = line.image; //Make a 2 band image whose value equals its coordinates. im_coor = Image (make_xy im.width im.height); //Adjust the values to center tham on (line.left, line.top) im_cent = im_coor - Vector [line.left,line.top]; w = line.width; h = line.height; angle = 270, w == 0 && h < 0 = 90, w == 0 && h >= 0 = 360 + atan (h/w), w > 0 && h < 0 = atan (h/w), w > 0 && h >= 0 = 180 + atan (h/w); a = ( (h ** 2) + (w ** 2) )**0.5; b = a * width; x' = ( (cos angle) * im_cent?0) + ( (sin angle) * im_cent?1); y' = ( (cos angle) * im_cent?1) - ( (sin angle) * im_cent?0); mask = ( (b**2) * (x'**2) ) + ( (a**2) * (y'**2) ) <= (a * b)**2; } ////////////////////////////////////////////////////////////////////////////// /* Selects a tetragon based on four points. * * Called from: * _NG_Extra.def Select_item.Tetragon * _NG_Extra.def Perspective_item */ select_tetragon p1 p2 p3 p4 = mask { //Put points in clockwise order starting at the top left. pt_list = sort_pts_clockwise [p1, p2, p3, p4]; pair_list = [ [ pt_list?0, pt_list?1 ], [ pt_list?1, pt_list?2 ], [ pt_list?2, pt_list?3 ], [ pt_list?3, pt_list?0 ] ]; //Make xy image the same size as p1.image; im_xy = Image (make_xy p1.image.width p1.image.height); white = Image (image_new p1.image.width p1.image.height 1 0 Image_coding.NOCODING 1 255 0 0); mask = foldl process white pair_list; /* Treat each pair of point as a vector going from p1 to p2, * then select all to right of line. This is done for each pair, * the results are all combined to select the area defined by * the four points. */ process im_in pair = im_out { x = (pair?0).left; y = (pair?0).top; x'= (pair?1).left; y'= (pair?1).top; w = x' - x; h = y' - y; m = 0, x == x' = (y-y')/(x-x'); c = 0, x == x' = ((y*x') - (y'*x))/(x' - x); mask= im_xy?1 - (im_xy?0 * m) >= c, w > 0 = im_xy?1 - (im_xy?0 * m) <= c, w < 0 = im_xy?0 <= x, w == 0 && h > 0 = im_xy?0 >= x; im_out = im_in & mask; } } ////////////////////////////////////////////////////////////////////////////// /* Selects a tetragon based on four points. * * Called from: * _NG_Extra.def Select_item.Polygon */ select_polygon pt_list = mask { group_check = is_Group pt_list; pt_l = pt_list.value, group_check = pt_list; im = (pt_l?0).image; im_xy = Image (make_xy im.width im.height); black = Image (image_new im_xy.width im_xy.height 1 0 Image_coding.NOCODING 1 0 0 0); x = im_xy?0; y = im_xy?1; pt_l' = grp_trip pt_l; mask = foldl process black pt_l'; /*Takes a group adds the first two the end and then creates a lists of *lists [[a, b, c], [b, c, d] .... [x, a, b]] */ grp_trip l = l'' { px = take 2 l; l' = join l px; start = [(take 3 l')]; rest = drop 3 l'; process a b = c { x = (last a)?1; x'= (last a)?2; x'' = [[x, x', b]]; c = join a x''; } l'' = foldl process start rest; }; process im_in triplet = im_out { p1 = triplet?0; p2 = triplet?1; p3 = triplet?2; //check for change in x direction between p1-p2 and p2 -p3 dir_1 = sign (p2.left - p1.left); dir_2 = sign (p3.left - p2.left); dir = dir_1 + dir_2; //define min x limit. min_x = p1.left, p1.left < p2.left = p2.left + 1, dir != 0 = p2.left; //define max x limit. max_x = p1.left, p1.left > p2.left = p2.left - 1, dir != 0 = p2.left; //equation of line defined by p1 and p2 m = line_m p1 p2; c = line_c p1 p2; //Every thing below the line im_test = ((y >= (m * x) + c) & (x >= min_x) & (x <= max_x)); im_out = im_in ^ im_test; } line_c p1 p2 = c {m = line_m p1 p2; c = p1.top - (m * p1.left);}; line_m p1 p2 = (p2.top - p1.top)/(p2.left - p1.left), p2.left != p1.left = 0; } ////////////////////////////////////////////////////////////////////////////// /* Selects a tetragon based on four points. * * Called from: * _NG_Extra.def Perspective_match_item * _NG_Extra.def Perspective_item */ perspective_transform to from = trans'' { /* * Tramsformation matrix is calculated on the bases of the following functions: * x' = c0x + c1y + c2xy + c3 * y' = c4x + c5y + c6xy + c7 * * The functions used in vips im_transform works based on the functions: * x = x' + b0 + b2x' + b4y' + b6x'y' * y = y' + b1 + b3x' + b5y' + b7x'y' * * and is applied in the form of the matrix: * * [[b0, b1], * [b2, b3], * [b4, b5], * [b6, b7]] * * Therefore our required calculated matrix will be * * [[ c3 , c7], * [(c0 - 1) , c4], * [ c1 , (c5 - 1)], * [ c2 , c6]] * * to = [x1, y1, x2, y2, x3, y3, x4, y4] * from = [x1', y1', x2', y2', x3', y3', x4', y4'] * trans = [[c0], [c1], [c2], [c3], [c4], [c5], [c6], [c7]] * */ to' = Matrix [[to?0, to?1, ((to?0)*(to?1)), 1, 0, 0, 0, 0], [0, 0, 0, 0, to?0, to?1, ((to?0)*(to?1)), 1], [to?2, to?3, ((to?2)*(to?3)), 1, 0, 0, 0, 0], [0, 0, 0, 0, to?2, to?3, ((to?2)*(to?3)), 1], [to?4, to?5, ((to?4)*(to?5)), 1, 0, 0, 0, 0], [0, 0, 0, 0, to?4, to?5, ((to?4)*(to?5)), 1], [to?6, to?7, ((to?6)*(to?7)), 1, 0, 0, 0, 0], [0, 0, 0, 0, to?6, to?7, ((to?6)*(to?7)), 1]]; from' = Matrix (transpose [from]); to'' = to' ** (-1); trans = to'' * from'; trans' = trans.value; trans''= Matrix [[(trans'?3)?0, (trans'?7)?0 ], [((trans'?0)?0 - 1), (trans'?4)?0 ], [(trans'?1)?0, ((trans'?5)?0 - 1)], [(trans'?2)?0, (trans'?6)?0 ]]; } ////////////////////////////////////////////////////////////////////////////// /* Sort a list of points into clockwise order. * * Called from: * _NG_utilities.def select_tetragon * _NG_Extra.def Perspective_match_item * _NG_Extra.def Perspective_item */ sort_pts_clockwise l = l'' { // sort functions: f_top a b = a.top < b.top; f_left a b = a.left < b.left; f_right a b = a.left > b.left; l' = sortc f_top l; l'_a = take 2 l'; l'_b = drop 2 l'; l''_a = sortc f_left l'_a; l''_b = sortc f_right l'_b; l'' = join l''_a l''_b; } nip2-8.7.0/share/nip2/compat/7.16/Image.def0000644000175000017500000012722413224651032014657 00000000000000Image_new_item = class Menupullright "_New" "make new things" { Image_black_item = class Menuaction "_Image" "make a new image" { format_names = [ "8-bit unsigned int - UCHAR", // 0 "8-bit signed int - CHAR", // 1 "16-bit unsigned int - USHORT", // 2 "16-bit signed int - SHORT", // 3 "32-bit unsigned int - UINT", // 4 "32-bit signed int - INT", // 5 "32-bit float - FLOAT", // 6 "64-bit complex - COMPLEX", // 7 "64-bit float - DOUBLE", // 8 "128-bit complex - DPCOMPLEX" // 9 ]; action = class Image _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; nbands = Expression "Image bands" 1; format_option = Option "Image format" format_names 0; type_option = Option_enum Image_type.type_names "Image type" "B_W"; pixel = Expression "Pixel value" 0; _result = image_new (to_real nwidth) (to_real nheight) (to_real nbands) (to_real format_option) Image_coding.NOCODING type_option.value_thing pixel.expr 0 0; } } Image_new_from_image_item = class Menuaction "_From Image" "make a new image based on image x" { action x = class Image _result { _vislevel = 3; pixel = Expression "Pixel value" 0; _result = image_new x.width x.height x.bands x.format x.coding x.type pixel.expr x.xoffset x.yoffset; } } Image_region_item = class Menupullright "_Region on Image" "make a new region on an image" { Region_item = class Menuaction "_Region" "make a region on an image" { action image = scope.Region_relative image 0.25 0.25 0.5 0.5; } Mark_item = class Menuaction "_Point" "make a point on an image" { action image = scope.Mark_relative image 0.5 0.5; } Arrow_item = class Menuaction "_Arrow" "make an arrow on an image" { action image = scope.Arrow_relative image 0.25 0.25 0.5 0.5; } HGuide_item = class Menuaction "_Horizontal Guide" "make a horizontal guide on an image" { action image = scope.HGuide image 0.5; } VGuide_item = class Menuaction "_Vertical Guide" "make a vertical guide on an image" { action image = scope.VGuide image 0.5; } sep1 = Menuseparator; Move_item = class Menuaction "From Region" "new region on image using existing region as a guide" { action a b = map_binary process a b { process a b = x.Region target x.left x.top x.width x.height, is_Region x = x.Arrow target x.left x.top x.width x.height, is_Arrow x = error "bad arguments to region-from-region" { // prefer image then region compare a b = false, !is_Image a && is_Image b = false, is_Region a && !is_Region b = true; [target, x] = sortc compare [a, b]; } } } } } Image_convert_to_image_item = class Menuaction "Con_vert to Image" "convert anything to an image" { action x = to_image x; } Image_number_format_item = class Menupullright "_Format" "convert numeric format" { U8_item = class Menuaction "_8 bit unsigned" "convert to unsigned 8 bit [0, 255]" { action x = map_unary cast_unsigned_char x; } U16_item = class Menuaction "1_6 bit unsigned" "convert to unsigned 16 bit [0, 65535]" { action x = map_unary cast_unsigned_short x; } U32_item = class Menuaction "_32 bit unsigned" "convert to unsigned 32 bit [0, 4294967295]" { action x = map_unary cast_unsigned_int x; } sep1 = Menuseparator; S8_item = class Menuaction "8 _bit signed" "convert to signed 8 bit [-128, 127]" { action x = map_unary cast_signed_char x; } S16_item = class Menuaction "16 b_it signed" "convert to signed 16 bit [-32768, 32767]" { action x = map_unary cast_signed_short x; } S32_item = class Menuaction "32 bi_t signed" "convert to signed 32 bit [-2147483648, 2147483647]" { action x = map_unary cast_signed_int x; } sep2 = Menuseparator; Float_item = class Menuaction "_Single precision float" "convert to IEEE 32 bit float" { action x = map_unary cast_float x; } Double_item = class Menuaction "_Double precision float" "convert to IEEE 64 bit float" { action x = map_unary cast_double x; } sep3 = Menuseparator; Scmplxitem = class Menuaction "Single _precision complex" "convert to 2 x IEEE 32 bit float" { action x = map_unary cast_complex x; } Dcmplx_item = class Menuaction "Double p_recision complex" "convert to 2 x IEEE 64 bit float" { action x = map_unary cast_double_complex x; } } Image_header_item = class Menupullright "_Header" "do stuff to the image header" { Image_get_item = class Menupullright "_Get" "get header fields" { // the header fields we can get fields = class { type = 0; width = 1; height = 2; format = 3; bands = 4; xres = 5; yres = 6; xoffset = 7; yoffset = 8; coding = 9; field_names = Enum [ $width => width, $height => height, $bands => bands, $format => format, $type => type, $xres => xres, $yres => yres, $xoffset => xoffset, $yoffset => yoffset, $coding => coding ]; field_option name = Option_enum field_names (_ "Field") name; field_funcs = Table [ [type, get_type], [width, get_width], [height, get_height], [format, get_format], [bands, get_bands], [xres, get_xres], [yres, get_yres], [xoffset, get_xoffset], [yoffset, get_yoffset], [coding, get_coding] ]; } get_field field_name x = class _result { _vislevel = 3; field = fields.field_option field_name; _result = map_unary (Real @ fields.field_funcs.lookup 0 1 field.value_thing) x; } Width_item = class Menuaction "_Width" "get width" { action x = get_field "width" x; } Height_item = class Menuaction "_Height" "get height" { action x = get_field "height" x; } Bands_item = class Menuaction "_Bands" "get bands" { action x = get_field "bands" x; } Format_item = class Menuaction "_Format" "get format" { action x = get_field "format" x; } Type_item = class Menuaction "_Type" "get type" { action x = get_field "type" x; } Xres_item = class Menuaction "_Xres" "get X resolution" { action x = get_field "xres" x; } Yres_item = class Menuaction "_Yres" "get Y resolution" { action x = get_field "yres" x; } Xoffset_item = class Menuaction "X_offset" "get X offset" { action x = get_field "xoffset" x; } Yoffset_item = class Menuaction "Yo_ffset" "get Y offset" { action x = get_field "yoffset" x; } Coding_item = class Menuaction "_Coding" "get coding" { action x = get_field "coding" x; } sep1 = Menuseparator; Custom_item = class Menuaction "C_ustom" "get any header field" { action x = class _result { _vislevel = 3; field = String "Field" "Xsize"; parse = Option "Parse" [ "No parsing", "Parse string as integer", "Parse string as real", "Parse string as hh:mm:ss" ] 0; _result = map_unary (wrap @ process @ get_header field.value) x { parse_str parse str = parse (split is_space str)?0; parse_field name cast parse x = cast x, is_number x = parse_str parse x, is_string x = error ("not " ++ name); get_int = parse_field "int" cast_int parse_int; get_float = parse_field "float" cast_float parse_float; get_time = parse_field "hh:mm:ss" cast_int parse_time; wrap x = Real x, is_real x = Vector x, is_real_list x = Image x, is_image x = Bool x, is_bool x = Matrix x, is_matrix x = String "String" x, is_string x = List x, is_list x = x; process = [ id, get_int, get_float, get_time ]?parse; } } } } sep1 = Menuseparator; Image_set_meta_item = class Menuaction "_Set" "set image metadata" { action x = class _result { _vislevel = 3; fname = String "Field" "field-name"; val = Expression "Value" 42; _result = map_unary process x { process image = set_header fname.value val.expr image; } } } Image_edit_header_item = class Menuaction "_Edit" "change advisory header fields of image" { type_names = Image_type.type_names; all_names = sort (map (extract 0) type_names.value); get_prop has get def x = get x, has x = def; action x = class _result { _vislevel = 3; nxres = Expression "Xres" (get_prop has_xres get_xres 1 x); nyres = Expression "Yres" (get_prop has_yres get_yres 1 x); nxoff = Expression "Xoffset" (get_prop has_xoffset get_xoffset 0 x); nyoff = Expression "Yoffset" (get_prop has_yoffset get_yoffset 0 x); type_option = Option_enum Image_type.type_names "Image type" (Image_type.type_names.get_name type) { type = x.type, is_Image x = Image_type.MULTIBAND; } _result = map_unary process x { process image = Image (im_copy_set image.value type_option.value_thing (to_real nxres) (to_real nyres) (to_real nxoff) (to_real nyoff)); } } } } Image_cache_item = class Menuaction "C_ache" "cache calculated image pixels" { action x = class _result { _vislevel = 3; tile_width = Number "Tile width" 32; tile_height = Number "Tile height" 32; max_tiles = Number "Maximum number of tiles to cache" (-1); _result = map_unary process x { process image = cache (to_real tile_width) (to_real tile_height) (to_real max_tiles) image; } } } #separator Image_levels_item = class Menupullright "_Levels" "change image levels" { Scale_item = class Menuaction "_Scale to 0 - 255" "linear transform to fit 0 - 255 range" { action x = map_unary scale x; } Linear_item = class Menuaction "_Linear" "linear transform of image levels" { action x = class _result { _vislevel = 3; scale = Scale "Scale" 0.001 3 1; offset = Scale "Offset" (-128) 128 0; _result = map_unary adj x { adj x // only force back to input type if this is a thing // with a type ... so we work for Colour / Matrix etc. = clip2fmt x.format x', has_member "format" x = x' { x' = x * scale + offset; } } } } Gamma_item = class Menuaction "_Power" "power transform of image levels (gamma)" { action x = class _result { _vislevel = 3; gamma = Scale "Gamma" 0.001 4 1; image_maximum_hint = "You may need to change image_maximum if " ++ "this is not an 8 bit image"; im_mx = Expression "Image maximum" mx { mx = Image_format.maxval x.format, has_format x = 255; } _result = map_unary gam x { gam x = clip2fmt (get_format x) x', has_format x = x' { x' = (im_mx.expr / im_mx.expr ** gamma) * x ** gamma; } } } } Tone_item = class Menuaction "_Tone Curve" "adjust tone curve" { action x = class _result { _vislevel = 3; b = Scale "Black point" 0 100 0; w = Scale "White point" 0 100 100; sp = Scale "Shadow point" 0.1 0.3 0.2; mp = Scale "Mid-tone point" 0.4 0.6 0.5; hp = Scale "Highlight point" 0.7 0.9 0.8; sa = Scale "Shadow adjust" (-15) 15 0; ma = Scale "Mid-tone adjust" (-30) 30 0; ha = Scale "Highlight adjust" (-15) 15 0; curve = tone_build x.format b w sp mp hp sa ma ha; _result = map_unary (hist_map curve) x; } } } Image_transform_item = class Menupullright "_Transform" "transform images" { Rotate_item = class Menupullright "Ro_tate" "rotate image" { Fixed_item = class Menupullright "_Fixed" "clockwise rotation by fixed angles" { rotate_widget default x = class _result { _vislevel = 3; angle = Option "Rotate by" [ "Don't rotate", "90 degrees clockwise", "180 degrees", "90 degrees anticlockwise" ] default; _result = map_unary process x { process in = [ in, rot90 in, rot180 in, rot270 in ] ? angle; } } Rot90_item = class Menuaction "_90 Degrees" "clockwise rotation by 90 degrees" { action x = rotate_widget 1 x; } Rot180_item = class Menuaction "_180 Degrees" "clockwise rotation by 180 degrees" { action x = rotate_widget 2 x; } Rot270_item = class Menuaction "_270 Degrees" "clockwise rotation by 270 degrees" { action x = rotate_widget 3 x; } } Free_item = class Menuaction "_Free" "clockwise rotation by any angle" { action x = class _result { _vislevel = 3; angle = Scale "Angle" (-180) 180 0; _result = map_unary process x { process image = rotate angle image; } } } Straighten_item = class Menuaction "_Straighten" ("smallest rotation that makes an arrow either horizontal " ++ "or vertical") { action x = map_unary straighten x { straighten arrow = rotate angle'' arrow.image { x = arrow.width; y = arrow.height; angle = im (polar (x, y)); angle' = angle - 360, angle > 315 = angle - 180, angle > 135 = angle; angle'' = -angle', angle' >= (-45) && angle' < 45 = 90 - angle'; } } } } Flip_item = class Menupullright "_Flip" "mirror left/right or up/down" { Left_right_item = class Menuaction "_Left Right" "mirror object left/right" { action x = map_unary fliplr x; } Top_bottom_item = class Menuaction "_Top Bottom" "mirror object top/bottom" { action x = map_unary fliptb x; } } Resize_item = class Menupullright "_Resize" "change image size" { _interp = Option_enum Interpolate.names "Interpolation" "Bilinear"; Scale_item = class Menuaction "_Scale" "scale image size by a factor" { action x = class _result { _vislevel = 3; xfactor = Expression "Horizontal scale factor" 1; yfactor = Expression "Vertical scale factor" 1; interp = _interp; _result = map_unary process x { process image = resize xfactor yfactor interp.value_thing image; } } } Size_item = class Menuaction "_Size To" "resize to a fixed size" { action x = class _result { _vislevel = 3; which = Option "Resize axis" [ "Shortest", "Longest", "Horizontal", "Vertical" ] 0; size = Expression "Resize to (pixels)" 128; interp = _interp; _result = map_unary process x { process image = resize fac fac interp.value_thing image { xfac = to_real size / image.width; yfac = to_real size / image.height; max_factor = max_pair xfac yfac; min_factor = min_pair xfac yfac; fac = [max_factor, min_factor, xfac, yfac]?which; } } } } Size_within_item = class Menuaction "Size _Within" "size to fit within a rectangle" { action x = class _result { _vislevel = 3; // the rects we size to fit within _rects = [ [2048, 1536], [1920, 1200], [1600, 1200], [1400, 1050], [1280, 1024], [1024, 768], [800, 600], [640, 480] ]; within = Option "Fit within (pixels)" ( [print w ++ " x " ++ print h :: [w, h] <- _rects] ++ ["Custom"] ) 4; custom_width = Expression "Custom width" 1000; custom_height = Expression "Custom height" 1000; size = Option "Page size" [ "Full page", "Half page", "Quarter page" ] 0; interp = _interp; _result = map_unary process x { xdiv = [1, 2, 2]?size; ydiv = [1, 1, 2]?size; allrect = _rects ++ [ [custom_width.expr, custom_height.expr] ]; [width, height] = allrect?within; process x = resize fac fac interp.value_thing x, fac < 1 = x { xfac = (width / xdiv) / x.width; yfac = (height / ydiv) / x.height; fac = min_pair xfac yfac; } } } } Resize_canvas_item = class Menuaction "_Canvas" "change size of surrounding image" { action x = class _result { _vislevel = 3; // try to guess a sensible size for the new image _guess_size = x.rect, is_Image x = Rect 0 0 100 100; nwidth = Expression "New width (pixels)" _guess_size.width; nheight = Expression "New height (pixels)" _guess_size.height; bgcolour = Expression "Background colour" 0; position = Option "Position" [ "North-west", "North", "North-east", "West", "Centre", "East", "South-west", "South", "South-east", "Specify in pixels" ] 4; left = Expression "Pixels from left" 0; top = Expression "Pixels from top" 0; _result = map_unary process x { process image = insert_noexpand xp yp image background { width = image.width; height = image.height; coding = image.coding; bands = 3, coding == Image_coding.LABPACK = image.bands; format = Image_format.FLOAT, coding == Image_coding.LABPACK = image.format; type = image.type; // placement vectors ... left, centre, right xposv = [0, to_real nwidth / 2 - width / 2, to_real nwidth - width]; yposv = [0, to_real nheight / 2 - height / 2, to_real nheight - height]; xp = left, position == 9 = xposv?((int) (position % 3)); yp = top, position == 9 = yposv?((int) (position / 3)); background = image_new nwidth nheight bands format coding type bgcolour.expr 0 0; } } } } } Image_perspective_item = Perspective_item; Image_rubber_item = class Menupullright "Ru_bber Sheet" "automatically warp images to superposition" { rubber_interp = Option "Interpolation" (map (extract 0) Interpolate.names.value) Interpolate.BILINEAR; rubber_order = Option "Order" ["0", "1", "2", "3"] 1; rubber_wrap = Toggle "Wrap image edges" false; // a transform ... a matrix, plus the size of the image the // matrix was made for Transform matrix image_width image_height = class matrix { // scale a transform ... if it worked for a m by n image, make // it work for a (m * xfac) by (y * yfac) image rescale xfac yfac = Transform (Matrix (map2 (map2 multiply) matrix.value facs)) (image_width * xfac) (image_height * yfac) { facs = [ [xfac, yfac], [1, 1], [1, 1], [1 / xfac, 1 / yfac], [1 / xfac, 1 / yfac], [1 / xfac, 1 / yfac] ]; } } // yuk!!!! fix is_instanceof to not need absolute names is_Transform = is_instanceof "Image_transform_item.Image_rubber_item.Transform"; Find_item = class Menuaction "_Find" ("find a transform which will map sample image onto " ++ "reference") { action reference sample = class _trn { _vislevel = 3; // controls order = rubber_order; interp = rubber_interp; wrap = rubber_wrap; max_err = Expression "Maximum error" 0.3; max_iter = Expression "Maximum iterations" 10; // transform [sample', trn, err] = transform_search max_err max_iter order interp wrap sample reference; transformed_image = Image sample'; _trn = Transform trn reference.width reference.height; final_error = err; } } Apply_item = class Menuaction "_Apply" "apply a transform to an image" { action a b = class _result { _vislevel = 3; // controls interp = rubber_interp; wrap = rubber_wrap; _result = map_binary trans a b { trans a b = transform interp wrap t' i { // get the transform arg first [i, t] = sortc (const is_Transform) [a, b]; t' = t.rescale (i.width / t.image_width) (i.height / t.image_height); } } } } } sep1 = Menuseparator; Match_item = class Menuaction "_Linear Match" "rotate and scale one image to match another" { action x y = class _result { _vislevel = 3; // try to find an image ... for a group, get the first item find_image x = x, is_Image x = find_image x?0, is_list x = find_image x.value, is_class x && has_value x = error "unable to find image"; _a = find_image x; _b = find_image y; ap1 = Mark_relative _a 0.5 0.25; bp1 = Mark_relative _b 0.5 0.25; ap2 = Mark_relative _a 0.5 0.75; bp2 = Mark_relative _b 0.5 0.75; refine = Toggle "Refine selected tie-points" false; lock = Toggle "No resize" false; _result = map_binary process x y { process a b = Image b''' { _prefs = Workspaces.Preferences; window = _prefs.MOSAIC_WINDOW_SIZE; object = _prefs.MOSAIC_OBJECT_SIZE; a' = a.value; b' = b.value; b'' = clip2fmt a.format b'; // return p2 ... if lock is set, return a p2 a standard // distance along the vector joining p1 and p2 norm p1 p2 = Rect left' top' 0 0, lock = p2 { v = (p2.left - p1.left, p2.top - p1.top); // 100000 to give precision since we pass points as // ints to match n = 100000 * sign v; left' = p1.left + re n; top' = p1.top + im n; } ap2'' = norm ap1 ap2; bp2'' = norm bp1 bp2; b''' = im_match_linear_search a' b'' ap1.left ap1.top bp1.left bp1.top ap2''.left ap2''.top bp2''.left bp2''.top object window, // we can't search if lock is on refine && !lock = im_match_linear a' b'' ap1.left ap1.top bp1.left bp1.top ap2''.left ap2''.top bp2''.left bp2''.top; } } } } Image_perspective_match_item = Perspective_match_item; } Image_band_item = class Menupullright "_Band" "manipulate image bands" { // like extract_bands, but return [] for zero band image // makes compose a bit simpler exb b n x = [], to_real n == 0 = extract_bands b n x; Extract_item = class Menuaction "_Extract" "extract bands from image" { action x = class _result { _vislevel = 3; first = Expression "Extract from band" 0; number = Expression "Extract this many bands" 1; _result = map_unary (exb first number) x; } } Insert_item = class Menuaction "_Insert" "insert bands into image" { action x y = class _result { _vislevel = 3; first = Expression "Insert at position" 0; _result = map_binary process x y { process im1 im2 = exb 0 f im1 ++ im2 ++ exb f (b - f) im1 { f = to_real first; b = im1.bands; } } } } Delete_item = class Menuaction "_Delete" "delete bands from image" { action x = class _result { _vislevel = 3; first = Expression "Delete from band" 0; number = Expression "Delete this many bands" 1; _result = map_unary process x { process im = exb 0 f im ++ exb (f + n) (b - (f + n)) im { f = to_real first; n = to_real number; b = im.bands; } } } } Bandwise_item = Image_join_item.Bandwise_item; sep1 = Menuseparator; To_dimension_item = class Menuaction "To D_imension" "convert bands to width or height" { action x = class _result { _vislevel = 3; orientation = Option "Orientation" [ "Horizontal", "Vertical" ] 0; _result = map_unary process x { process im = foldl1 [join_lr, join_tb]?orientation (bandsplit im); } } } To_bands_item = class Menuaction "To B_ands" "turn width or height to bands" { action x = class _result { _vislevel = 3; orientation = Option "Orientation" [ "Horizontal", "Vertical" ] 0; _result = map_unary process x { process im = bandjoin (map extract_column [0 .. im.width - 1]), orientation == 0 = bandjoin (map extract_row [0 .. im.height - 1]) { extract_column n = extract_area n 0 1 im.height im; extract_row n = extract_area 0 n im.width 1 im; } } } } } Image_crop_item = class Menuaction "_Crop" "extract a rectangular area from an image" { action x = class _result { _vislevel = 3; // try to find the image geometry ... don't bother trying to look // inside groups though _geo = x.rect, is_Image x = Rect 0 0 100 100; l = Expression "Crop left" ((int) (_geo.left + _geo.width / 4)); t = Expression "Crop top" ((int) (_geo.top + _geo.height / 4)); w = Expression "Crop width" (max_pair 1 ((int) (_geo.width / 2))); h = Expression "Crop height" (max_pair 1 ((int) (_geo.height / 2))); _result = map_nary (list_5ary extract) [x, l.expr, t.expr, w.expr, h.expr] { extract im l t w h = extract_area left' top' width' height' im { width' = min_pair (to_real w) im.width; height' = min_pair (to_real h) im.height; left' = range 0 (to_real l) (im.width - width'); top' = range 0 (to_real t) (im.height - height'); } } } } Image_insert_item = class Menuaction "_Insert" "insert a small image into a large image" { action a b = insert_position, is_Group a || is_Group b = insert_area { insert_area = class _result { _check_args = [ [a, "a", check_Image], [b, "b", check_Image] ] ++ super._check_args; _vislevel = 3; // sort to get smallest first _pred x y = x.width * x.height < y.width * y.height; [_a', _b'] = sortc _pred [a, b]; place = Area _b' left top width height { // be careful in case b is smaller than a left = max_pair 0 ((_b'.width - _a'.width) / 2); top = max_pair 0 ((_b'.height - _a'.height) / 2); width = min_pair _a'.width _b'.width; height = min_pair _a'.height _b'.height; } _result = insert_noexpand place.left place.top (clip2fmt _b'.format a'') _b' { a'' = extract_area 0 0 place.width place.height _a'; } } insert_position = class _result { _vislevel = 3; position = Option "Position" [ "North-west", "North", "North-east", "West", "Centre", "East", "South-west", "South", "South-east", "Specify in pixels" ] 4; left = Expression "Pixels from left" 0; top = Expression "Pixels from top" 0; _result = map_binary insert a b { insert a b = insert_noexpand left top (clip2fmt b.format a) b, position == 9 = insert_noexpand xp yp (clip2fmt b.format a) b { xr = b.width - a.width; yr = b.height - a.height; xp = [0, xr / 2, xr]?((int) (position % 3)); yp = [0, yr / 2, yr]?((int) (position / 3)); } } } } } Image_select_item = Select_item; Image_join_item = class Menupullright "_Join" "join two or more images together" { Bandwise_item = class Menuaction "_Bandwise" "join two images bandwise" { action a b = join a b; } sep1 = Menuseparator; join_lr shim bg align a b = im2 { w = a.width + b.width + shim; h = max_pair a.height b.height; back = image_new w h a.bands a.format a.coding a.type bg 0 0; ya = [0, max_pair 0 ((b.height - a.height)/2), max_pair 0 (b.height - a.height)]; yb = [0, max_pair 0 ((a.height - b.height)/2), max_pair 0 (a.height - b.height)]; im1 = insert_noexpand 0 ya?align a back; im2 = insert_noexpand (a.width + shim) yb?align b im1; } join_tb shim bg align a b = im2 { w = max_pair a.width b.width; h = a.height + b.height + shim; back = image_new w h a.bands a.format a.coding a.type bg 0 0; xa = [0, max_pair 0 ((b.width - a.width)/2), max_pair 0 (b.width - a.width)]; xb = [0, max_pair 0 ((a.width - b.width)/2), max_pair 0 (a.width - b.width)]; im1 = insert_noexpand xa?align 0 a back; im2 = insert_noexpand xb?align (a.height + shim) b im1; } halign_names = ["Top", "Centre", "Bottom"]; valign_names = ["Left", "Centre", "Right"]; Left_right_item = class Menuaction "_Left to Right" "join two images left-right" { action a b = class _result { _vislevel = 3; shim = Scale "Spacing" 0 100 0; bg_colour = Expression "Background colour" 0; align = Option "Alignment" halign_names 1; _result = map_binary (join_lr shim.value bg_colour.expr align.value) a b; } } Top_bottom_item = class Menuaction "_Top to Bottom" "join two images top-bottom" { action a b = class _result { _vislevel = 3; shim = Scale "Spacing" 0 100 0; bg_colour = Expression "Background colour" 0; align = Option "Alignment" valign_names 1; _result = map_binary (join_tb shim.value bg_colour.expr align.value) a b; } } sep2 = Menuseparator; Array_item = class Menuaction "_Array" "join a list of lists of images into a single image" { action x = class _result { _vislevel = 3; hshim = Scale "Horizontal spacing" (-100) (100) 0; vshim = Scale "Vertical spacing" (-100) (100) 0; bg_colour = Expression "Background colour" 0; halign = Option "Horizontal alignment" valign_names 1; valign = Option "Vertical alignment" halign_names 1; _result = (image_set_origin 0 0 @ foldl1 (join_tb vshim.value bg_colour.expr halign.value) @ map (foldl1 (join_lr hshim.value bg_colour.expr valign.value))) (to_list (to_list x)); } } } Image_tile_item = class Menupullright "Til_e" "tile an image across and down" { tile_widget default_type x = class _result { _vislevel = 3; across = Expression "Tiles across" 2; down = Expression "Tiles down" 2; repeat = Option "Tile type" ["Replicate", "Four-way mirror"] default_type; _result = map_unary process x { process image = tile across down image, repeat == 0 = tile across down image'' { image' = insert image.width 0 (fliplr image) image; image'' = insert 0 image.height (fliptb image') image'; } } } Replicate_item = class Menuaction "_Replicate" "replicate image across and down" { action x = tile_widget 0 x; } Fourway_item = class Menuaction "_Four-way Mirror" "four-way mirror across and down" { action x = tile_widget 1 x; } Chop_item = class Menuaction "_Chop Into Tiles" "slice an image into tiles" { action x = class _result { _vislevel = 3; tile_width = Expression "Tile width" 100; tile_height = Expression "Tile height" 100; hoverlap = Expression "Horizontal overlap" 0; voverlap = Expression "Vertical overlap" 0; _result = map_unary (Group @ map Group @ process) x { process x = imagearray_chop tile_width tile_height hoverlap voverlap x; } } } } #separator Pattern_images_item = class Menupullright "_Patterns" "make a variety of useful patterns" { Grey_item = class Menuaction "Grey _Ramp" "make a smooth grey ramp" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; orientation = Option "Orientation" [ "Horizontal", "Vertical" ] 0; foption = Option "Format" ["8 bit", "float"] 0; _result = Image im { gen = im_grey, foption == 0 = im_fgrey; w = to_real nwidth; h = to_real nheight; im = gen w h, orientation == 0 = rot90 (gen h w); } } } Xy_item = class Menuaction "_XY Image" "make a two band image whose pixel values are their coordinates" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; _result = Image (make_xy nwidth nheight); } } Gaussian_item = class Menuaction "Gaussian _Noise" "make an image of gaussian noise" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; mean = Scale "Mean" 0 255 128; deviation = Scale "Deviation" 0 128 50; _result = Image (im_gaussnoise (to_real nwidth) (to_real nheight) mean.value deviation.value); } } Fractal_item = class Menuaction "_Fractal" "make a fractal image" { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; dimension = Scale "Dimension" 2.001 2.999 2.001; _result = Image (im_fractsurf (to_real nsize) dimension.value); } } Checkerboard_item = class Menuaction "_Checkerboard" "make a checkerboard image" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; hpsize = Expression "Horizontal patch size" 8; vpsize = Expression "Vertical patch size" 8; hpoffset = Expression "Horizontal patch offset" 0; vpoffset = Expression "Vertical patch offset" 0; _result = Image (xstripes ^ ystripes) { pixels = make_xy nwidth nheight; xpixels = pixels?0 + to_real hpoffset; ypixels = pixels?1 + to_real vpoffset; make_stripe pix swidth = pix % (swidth * 2) >= swidth; xstripes = make_stripe xpixels (to_real hpsize); ystripes = make_stripe ypixels (to_real vpsize); } } } Grid_item = class Menuaction "Gri_d" "make a grid" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; hspace = Expression "Horizontal line spacing" 8; vspace = Expression "Vertical line spacing" 8; thick = Expression "Line thickness" 1; hoff = Expression "Horizontal grid offset" 4; voff = Expression "Vertical grid offset" 4; _result = Image (xstripes | ystripes) { pixels = make_xy nwidth nheight; xpixels = pixels?0 + to_real hoff; ypixels = pixels?1 + to_real voff; make_stripe pix swidth = pix % swidth < to_real thick; xstripes = make_stripe xpixels (to_real hspace); ystripes = make_stripe ypixels (to_real vspace); } } } Text_item = class Menuaction "_Text" "make a bitmap of some text" { action = class _result { _vislevel = 3; text = String "Text to paint" "Hello world!"; font = Fontname "Use font" Workspaces.Preferences.PAINTBOX_FONT; wrap = Expression "Wrap text at" 500; align = Option "Alignment" [ "Left", "Centre", "Right" ] 0; dpi = Expression "DPI" 300; _result = Image (im_text text.value font.value (to_real wrap) align.value (to_real dpi)); } } New_CIELAB_slice_item = class Menuaction "CIELAB _Slice" "make a slice through CIELAB space" { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; L = Scale "L value" 0 100 50; _result = Image (lab_slice (to_real nsize) L.value); } } sense_option = Option "Sense" [ "Pass", "Reject" ] 0; build fn size = (Image @ image_set_type Image_type.FOURIER @ rotquad @ fn) (im_create_fmask size size); New_ideal_item = class Menupullright "_Ideal Fourier Mask" "make various ideal Fourier filter masks" { High_low_item = class Menuaction "_High or Low Pass" ("make a mask image for a highpass/lowpass " ++ "ideal Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f sense.value fc.value 0 0 0 0; } } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" ("make a mask image for an ring pass/reject " ++ "ideal Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; rw = Scale "Ring width" 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f (sense.value + 6) fc.value rw.value 0 0 0; } } } Band_item = class Menuaction "_Band Pass or Band Reject" ("make a mask image for a band pass/reject " ++ "ideal Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fcx = Scale "Horizontal frequency cutoff" 0.01 0.99 0.5; fcy = Scale "Vertical frequency cutoff" 0.01 0.99 0.5; r = Scale "Radius" 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f (sense.value + 12) fcx.value fcy.value r.value 0 0; } } } } New_gaussian_item = class Menupullright "_Gaussian Fourier Mask" "make various Gaussian Fourier filter masks" { High_low_item = class Menuaction "_High or Low Pass" ("make a mask image for a highpass/lowpass " ++ "Gaussian Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f (sense.value + 4) fc.value ac.value 0 0 0; } } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" ("make a mask image for an ring pass/reject " ++ "Gaussian Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; rw = Scale "Ring width" 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f (sense.value + 10) fc.value rw.value ac.value 0 0; } } } Band_item = class Menuaction "_Band Pass or Band Reject" ("make a mask image for a band pass/reject " ++ "Gaussian Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fcx = Scale "Horizontal frequency cutoff" 0.01 0.99 0.5; fcy = Scale "Vertical frequency cutoff" 0.01 0.99 0.5; r = Scale "Radius" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f (sense.value + 16) fcx.value fcy.value r.value ac.value 0; } } } } New_butterworth_item = class Menupullright "_Butterworth Fourier Mask" "make various Butterworth Fourier filter masks" { High_low_item = class Menuaction "_High or Low Pass" ("make a mask image for a highpass/lowpass " ++ "Butterworth Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; order = Scale "Order" 1 10 2; _result = build param (to_real nsize) { param f = f (sense.value + 2) order.value fc.value ac.value 0 0; } } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" ("make a mask image for an ring pass/reject " ++ "Butterworth Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; rw = Scale "Ring width" 0.01 0.99 0.5; order = Scale "Order" 1 10 2; _result = build param (to_real nsize) { param f = f (sense.value + 8) order.value fc.value rw.value ac.value 0; } } } Band_item = class Menuaction "_Band Pass or Band Reject" ("make a mask image for a band pass/reject " ++ "Butterworth Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fcx = Scale "Horizontal frequency cutoff" 0.01 0.99 0.5; fcy = Scale "Vertical frequency cutoff" 0.01 0.99 0.5; r = Scale "Radius" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; order = Scale "Order" 1 10 2; _result = build param (to_real nsize) { param f = f (sense.value + 14) order.value fcx.value fcy.value r.value ac.value; } } } } } Test_images_item = class Menupullright "Test I_mages" "make a variety of test images" { Eye_item = class Menuaction "_Spatial Response" "image for testing the eye's spatial response" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; factor = Scale "Factor" 0.001 1 0.2; _result = Image (im_eye (to_real nwidth) (to_real nheight) factor.value); } } Zone_plate = class Menuaction "_Zone Plate" "make a zone plate" { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; _result = Image (im_zone (to_real nsize)); } } Frequency_test_chart_item = class Menuaction "_Frequency Testchart" "make a black/white frequency test pattern" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; sheight = Expression "Strip height (pixels)" 10; waves = Expression "Wavelengths" [64, 32, 16, 8, 4, 2]; _result = imagearray_assemble 0 0 (transpose [strips]) { freq_slice wave = Image (sin (grey / wave) > 0); strips = map freq_slice waves.expr; grey = im_fgrey (to_real nwidth) (to_real sheight) * 360 * (to_real nwidth); } } } CRT_test_chart_item = class Menuaction "CRT _Phosphor Chart" "make an image for measuring phosphor colours" { action = class _result { _vislevel = 3; brightness = Scale "Brightness" 0 255 200; psize = Expression "Patch size (pixels)" 32; _result = Image (imagearray_assemble 0 0 [[green, red], [blue, white]]) { black = image_new (to_real psize) (to_real psize) 1 Image_format.FLOAT Image_coding.NOCODING Image_type.B_W 0 0 0; notblack = black + brightness; green = black ++ notblack ++ black; red = notblack ++ black ++ black; blue = black ++ black ++ notblack; white = notblack ++ notblack ++ notblack; } } } Greyscale_chart_item = class Menuaction "_Greyscale" "make a greyscale" { action = class _result { _vislevel = 3; pwidth = Expression "Patch width" 8; pheight = Expression "Patch height" 8; npatches = Expression "Number of patches" 16; _result = Image (image_set_type Image_type.B_W (clip2fmt Image_format.UCHAR wedge)) { wedge = 255 / (to_real npatches - 1) * (int) (strip?0 / to_real pwidth) { strip = make_xy (to_real pwidth * to_real npatches) pheight; } } } } CMYK_test_chart_item = class Menuaction "_CMYK Wedges" "make a set of CMYK wedges" { action = class _result { _vislevel = 3; pwidth = Expression "Patch width" 8; pheight = Expression "Patch height" 8; npatches = Expression "Number of patches" 16; _result = Image (image_set_type Image_type.CMYK (clip2fmt Image_format.UCHAR strips)) { wedge = 255 / (to_real npatches - 1) * (int) (strip?0 / to_real pwidth) { strip = make_xy (to_real pwidth * to_real npatches) pheight; } black = wedge * 0; C = wedge ++ black ++ black ++ black; M = black ++ wedge ++ black ++ black; Y = black ++ black ++ wedge ++ black; K = black ++ black ++ black ++ wedge; strips = imagearray_assemble 0 0 [[C],[M],[Y],[K]]; } } } Colour_atlas_item = class Menuaction "_Colour Atlas" "make a grid of patches grouped around a colour" { action = class _result { _vislevel = 3; start = Colour_picker "Lab" [50,0,0]; nstep = Expression "Number of steps" 2; ssize = Expression "Step size" 2; _result = Image (colour_transform_to (get_type start) im) { base = colour_transform_to Image_type.LAB start; step = to_real ssize; offset = to_real nstep * step; range c = [c - offset, c - offset + step ... c + offset]; mk_patch b a = image_new 8 8 3 Image_format.FLOAT Image_coding.NOCODING Image_type.LAB (Vector [base?0, a, b]) 0 0; mk_strip b = map (mk_patch b) (range base?1); mk_grid = map mk_strip (range base?2); im = imagearray_assemble 1 1 mk_grid; } } } } nip2-8.7.0/share/nip2/compat/7.16/_list.def0000644000175000017500000002172213224651032014743 00000000000000/* any l: or all the elements of list l together * * any (map (equal 0) list) == true, if any element of list is zero. * any :: [bool] -> bool */ any = foldr logical_or false; /* all l: and all the elements of list l together * * all (map (==0) list) == true, if every element of list is zero. * all :: [bool] -> bool */ all = foldr logical_and true; /* concat l: join a list of lists together * * concat ["abc","def"] == "abcdef". * concat :: [[*]] -> [*] */ concat l = foldr join [] l; /* drop n l: drop the first n elements from list l * * drop 3 "abcd" == "d" * drop :: num -> [*] -> [*] */ drop n l = l, n <= 0 || l == [] = drop (n - 1) (tl l); /* dropwhile fn l: drop while fn is true * * dropwhile is_digit "1234pigs" == "pigs" * dropwhile :: (* -> bool) -> [*] -> [*] */ dropwhile fn l = [], l == [] = dropwhile fn (tl l), fn (hd l) = l; /* extract n l: extract element at index n from list l */ extract = converse subscript; /* filter fn l: return all elements of l for which predicate fn holds * * filter is_digit "1one2two3three" = "123" * filter :: (* -> bool) -> [*] -> [*] */ filter fn l = foldr addif [] l { addif x l = x : l, fn x; = l; } /* foldl fn st l: fold list l from the left with function fn and start st * * Start from the left hand end of the list (unlike foldr, see below). * foldl is less useful (and much slower). * * foldl fn start [a,b .. z] = ((((st fn a) fn b) ..) fn z) * foldl :: (* -> ** -> *) -> * -> [**] -> * */ foldl fn st l = st, l == [] = foldl fn (fn st (hd l)) (tl l); /* foldl1 fn l: like foldl, but use the 1st element as the start value * * foldl1 fn [1,2,3] == ((1 fn 2) fn 3) * foldl1 :: (* -> * -> *) -> [*] -> * */ foldl1 fn l = [], l == [] = foldl fn (hd l) (tl l); /* foldr fn st l: fold list l from the right with function fn and start st * * foldr fn st [a,b..z] = (a fn (b fn (.. (z fn st)))) * foldr :: (* -> ** -> **) -> ** -> [*] -> ** */ foldr fn st l = st, l == [] = fn (hd l) (foldr fn st (tl l)); /* foldrl fn l: like foldr, but use the 1st element as the start value * * foldr1 fn [1,2,3,4] == (2 fn (3 fn (4 fn 1))) * foldr1 :: (* -> * -> *) -> [*] -> * */ foldr1 fn l = [], l == [] = foldr fn (hd l) (tl l); sum = foldr1 add; product = foldr1 multiply; /* Search a list for an element, returning it's index (or -1) * * index (equal 12) [13,12,11] == 1 * index :: (* -> bool) -> [*] -> real */ index fn list = search list 0 { search l n = -1, l == [] = n, fn (hd l) = search (tl l) (n + 1); } /* init l: remove last element of list l * * The dual of tl. * init [1,2,3] == [1,2] * init :: [*] -> [*] */ init l = error "init of []", l == []; = [], tl l == []; = hd l : init (tl l); /* iterate f x: repeatedly apply f to x * * return the infinite list [x, f x, f (f x), ..]. * iterate (multiply 2) 1 == [1, 2, 4, 8, 16, 32, 64 ... ] * iterate :: (* -> *) -> * -> [*] */ iterate f x = x : iterate f (f x); /* join_sep sep l: join a list with a separator * * join_sep ", " (map print [1 .. 4]) == "1, 2, 3, 4" * join_sep :: [*] -> [[*]] -> [*] */ join_sep sep l = foldl1 fn l { fn a b = a ++ sep ++ b; } /* last l: return the last element of list l * * The dual of hd. last [1,2,3] == 3 * last :: [*] -> [*] */ last l = error "last of []", l == [] = hd l, tl l == [] = last (tl l); /* len l: length of list l * (see also is_list_len and friends in predicate.def) * * len :: [*] -> num */ len l = 0, l == [] = 1 + len (tl l); /* limit l: return the first element of l which is equal to its predecessor * * useful for checking for convergence * limit :: [*] -> * */ limit l = error "incorrect use of limit", l == [] || tl l == [] || tl (tl l) == [] = a, a == b = limit (b : x) { a:b:x = l; } /* Turn a function of n args into a function which takes a single arg of an * n-element list. */ list_1ary fn x = fn x?0; list_2ary fn x = fn x?0 x?1; list_3ary fn x = fn x?0 x?1 x?2; list_4ary fn x = fn x?0 x?1 x?2 x?3; list_5ary fn x = fn x?0 x?1 x?2 x?3 x?4; list_6ary fn x = fn x?0 x?1 x?2 x?3 x?4 x?5; list_7ary fn x = fn x?0 x?1 x?2 x?3 x?4 x?5 x?6; /* map fn l: map function fn over list l * * map :: (* -> **) -> [*] -> [**] */ map f l = [], l == []; = f (hd l) : map f (tl l); /* map2 fn l1 l2: map two lists together with fn * * map2 :: (* -> ** -> ***) -> [*] -> [**] -> [***] */ map2 fn l1 l2 = map (list_2ary fn) (zip2 l1 l2); /* map3 fn l1 l2 l3: map three lists together with fn * * map3 :: (* -> ** -> *** -> ****) -> [*] -> [**] -> [***] -> [****] */ map3 fn l1 l2 l3 = map (list_3ary fn) (zip3 l1 l2 l3); /* member l x: true if x is a member of list l * * is_digit == member "0123456789" * member :: [*] -> * -> bool */ member l x = any (map (equal x) l); /* merge b l r: merge two lists based on a bool list * * merge :: [bool] -> [*] -> [*] -> [*] */ merge p l r = [], p == [] || l == [] || r == [] = a : merge z x y, c = b : merge z x y { a:x = l; b:y = r; c:z = p; } /* mkset eq l: remove duplicates from list l using equality function * * mkset :: (* -> bool) -> [*] -> [*] */ mkset eq l = [], l == [] = a : filter (not @ eq a) (mkset eq x) { a:x = l; } /* postfix l r: add r to the end of list l * * The dual of ':'. * postfix :: [*] -> ** -> [*,**] */ postfix l r = l ++ [r]; /* repeat x: make an infinite list of xes * * repeat :: * -> [*] */ repeat x = map (const x) [1..]; /* replicate n x: make n copies of x in a list * * replicate :: num -> * -> [*] */ replicate n x = take n (repeat x); /* reverse l: reverse list l * * reverse :: [*] -> [*] */ reverse l = foldl (converse cons) [] l; /* scan fn st l: apply (fold fn r) to every initial segment of a list * * scan add 0 [1,2,3] == [1,3,6] * scan :: (* -> ** -> *) -> * -> [**] -> [*] */ scan fn = g { g st l = [st], l == [] = st : g (fn st a) x { a:x = l; } } /* sort l: sort list l into ascending order * * sort :: [*] -> [*] */ sort l = sortc less_equal l; /* sortc comp l: sort list l into order using a comparision function * * Uses merge sort (n log n behaviour) * sortc :: (* -> * -> bool) -> [*] -> [*] */ sortc comp l = l, n <= 1 = merge (sortc comp (take n2 l)) (sortc comp (drop n2 l)) { n = len l; n2 = (int) (n / 2); /* merge l1 l2: merge sorted lists l1 and l2 to make a single * sorted list */ merge l1 l2 = l2, l1 == [] = l1, l2 == [] = a : merge x (b : y), comp a b = b : merge (a : x) y { a:x = l1; b:y = l2; } } /* sortpl pl l: sort by a list of predicates * * sortpl :: (* -> bool) -> [*] -> [*] */ sortpl pl l = sortc (test pl) l { /* Comparision function ... put true before false, if equal move on to * the next predicate. */ test pl a b = true, pl == [] = ta, ta != tb = test (tl pl) a b { ta = pl?0 a; tb = pl?0 b; } } /* sortr l: sort list l into descending order * * sortr :: [*] -> [*] */ sortr l = sortc more l; /* split fn l: break a list into sections separated by many fn * * split is_space " hello world " == ["hello", "world"] * split is_space " " == [] * split :: (* -> bool) -> [*] -> [[*]] */ split fn l = [], l == [] || l' == [] = head : split fn tail { nfn = not @ fn; l' = dropwhile fn l; head = takewhile nfn l'; tail = dropwhile nfn l'; } /* splits fn l: break a list into sections separated by a single fn * * split (equal ',') ",,1" == ["", "", "1"] * split :: (* -> bool) -> [*] -> [[*]] */ splits fn l = [], l == [] = head : splits fn tail { fn' = not @ fn; dropif x = [], x == [] = tl x; head = takewhile fn' l; tail = dropif (dropwhile fn' l); } /* splitpl fnl l: split a list up with a list of predicates * * splitpl [is_digit, is_letter, is_digit] "123cat" == ["123", "cat", []] * splitpl :: [* -> bool] -> [*] -> [[*]] */ splitpl fnl l = l, fnl == [] = head : splitpl (tl fnl) tail { head = takewhile (hd fnl) l; tail = dropwhile (hd fnl) l; } /* split_lines n l: split a list into equal length lines * * split_lines 4 "1234567" == ["1234", "567"] * splitl :: int -> [*] -> [[*]] */ split_lines n l = [], l == [] = take n l : split_lines n (drop n l); /* take n l: take the first n elements from list l * take :: num -> [*] -> [*] */ take n l = [], n <= 0 = [], l == [] = hd l : take (n-1) (tl l); /* takewhile fn l: take from the front of a list while predicate fn holds * * takewhile is_digit "123onetwothree" == "123" * takewhile :: (* -> bool) -> [*] -> [*] */ takewhile fn l = [], l == [] = hd l : takewhile fn (tl l), fn (hd l) = []; /* zip2 l1 l2: zip two lists together * * zip2 [1,2] ['a', 'b', 'c'] == [[1,'a'],[2,'b']] * zip2 :: [*] -> [**] -> [[*,**]] */ zip2 l1 l2 = [], l1 == [] || l2 == [] = [hd l1, hd l2] : zip2 (tl l1) (tl l2); /* zip3 l1 l2 l3: zip three lists together * * zip3 [1,2] ['a', 'b', 'c'] [true] == [[1,'a',true]] * zip3 :: [*] -> [**] ->[***] -> [[*,**,***]] */ zip3 l1 l2 l3 = [], l1 == [] || l2 == [] || l3 == [] = [hd l1, hd l2, hd l3] : zip3 (tl l1) (tl l2) (tl l3); nip2-8.7.0/share/nip2/compat/7.16/_Object.def0000644000175000017500000002601313224651032015174 00000000000000/* Lots of little arg checks. Global for convenience. */ check_any = [(const true), _ "any"]; check_bool = [is_bool, _ "boolean"]; check_real = [is_real, _ "real"]; check_ureal = [is_ureal, _ "unsigned real"]; check_preal = [is_preal, _ "positive real"]; check_list = [is_list, _ "list"]; check_real_list = [is_real_list, _ "list of real"]; check_string = [is_string, _ "string"]; check_string_list = [is_string_list, _ "list of string"]; check_int = [is_int, _ "integer"]; check_uint = [is_uint, _ "unsigned integer"]; check_pint = [is_pint, _ "positive integer"]; check_matrix = [is_matrix, _ "rectangular array of real"]; check_matrix_display = [Matrix_display.is_display, _ "0|1|2|3"]; check_image = [is_image, _ "image"]; check_xy_list = [is_xy_list, _ "list of form [[1, 2], [3, 4], [5, 6], ...]"]; check_instance name = [is_instanceof name, name]; check_Image = check_instance "Image"; check_Matrix = [is_Matrix, _ "Matrix"]; check_colour_space = [is_colour_space, join_sep "|" Image_type.colour_spaces.names]; check_rectangular = [is_rectangular, _ "rectangular [[*]]"]; check_Guide = [is_Guide, _ "HGuide|VGuide"]; check_Colour = check_instance (_ "Colour"); check_Mark = check_instance (_ "Mark"); /* Check a set of args to a class. Two members to look at: _check_args and * _check_all. * * - each line in _check_args is [arg, "arg name", [test_fn, "arg type"]] * same number of lines as there are args * * stuff like "arg 2 must be real" * * - each line in _check_all is [test, "description"] * any number of lines * * stuff like "to must be greater than from" * * generate an error dialog with a helpful message on failure. * * Have as a separate function to try to keep the size of _Object down a bit. */ check_args x = error message, badargs != [] || badalls != [] = x { argcheck = x._check_args; allcheck = x._check_all; // indent string indent = " "; // test for a condition in a check line fails test_fail x = ! x?0; // set of failed argcheck indexes badargs = map (extract 1) (filter test_fail (zip2 (map testarg argcheck) [0..])) { testarg x = x?2?0 x?0; } // set of failed allcheck indexes badalls = map (extract 1) (filter test_fail (zip2 (map hd allcheck) [0..])); // the error message message = _ "bad properties for " ++ "\"" ++ x.name ++ "\"\n" ++ argmsg ++ allmsg ++ "\n" ++ _ "where" ++ "\n" ++ arg_types ++ extra; // make the failed argcheck messages ... eg. ""value" should be // real, you passed " etc. argmsg = concat (map fmt badargs) { fmt n = indent ++ "\"" ++ argcheck?n?1 ++ "\"" ++ _ " should be of type " ++ argcheck?n?2?1 ++ ", " ++ _ "you passed" ++ ":\n" ++ indent ++ indent ++ print argcheck?n?0 ++ "\n"; } // make the failed allcheck messages ... eg "condition failed: // x < y" ... don't make a message if any typechecks have // failed, as we'll probably error horribly allmsg = [], badargs != [] = concat (map fmt badalls) ++ _ "you passed" ++ "\n" ++ concat (map fmt_arg argcheck) { fmt n = _ "condition failed" ++ ": " ++ allcheck?n?1 ++ "\n"; fmt_arg l = indent ++ l?1 ++ " = " ++ print l?0 ++ "\n"; } // make arg type notes arg_types = join_sep "\n" (map fmt argcheck) { fmt l = indent ++ l?1 ++ " is of type " ++ l?2?1; } // extra bit at the bottom, if we have any conditions extra = [], allcheck == [] = "\n" ++ _ "and" ++ "\n" ++ all_desc; // make a list of all the allcheck descriptions, with a few // spaces in front all_desc_list = map (join indent @ extract 1) allcheck; // join em up to make a set of condition notes all_desc = join_sep "\n" all_desc_list; } /* Operator overloading stuff. */ Operator_type = class { ARITHMETIC = 1; // eg. add RELATIONAL = 2; // eg. less COMPOUND = 3; // eg. max/mean/etc. COMPOUND_REWRAP = 4; // eg. transpose } Operator op_name fn type symmetric = class { } /* Form the converse of an Operator. */ oo_converse op = Operator (converse_name op.op_name) (converse op.fn) op.type op.symmetric { converse_name x = init x, last x == last "'" = x ++ "'"; } /* Given an operator name, look up the definition. */ oo_binary_lookup op_name = matches?0, matches != [] = error (_ "unknown binary operator" ++ ": " ++ print op_name) { operator_table = [ Operator "add" add Operator_type.ARITHMETIC true, Operator "subtract" subtract Operator_type.ARITHMETIC false, Operator "remainder" remainder Operator_type.ARITHMETIC false, Operator "power" power Operator_type.ARITHMETIC false, Operator "subscript" subscript Operator_type.ARITHMETIC false, Operator "left_shift" left_shift Operator_type.ARITHMETIC false, Operator "right_shift" right_shift Operator_type.ARITHMETIC false, Operator "divide" divide Operator_type.ARITHMETIC false, Operator "join" join Operator_type.ARITHMETIC false, Operator "multiply" multiply Operator_type.ARITHMETIC true, Operator "logical_and" logical_and Operator_type.ARITHMETIC true, Operator "logical_or" logical_or Operator_type.ARITHMETIC true, Operator "bitwise_and" bitwise_and Operator_type.ARITHMETIC true, Operator "bitwise_or" bitwise_or Operator_type.ARITHMETIC true, Operator "eor" eor Operator_type.ARITHMETIC true, Operator "comma" comma Operator_type.ARITHMETIC false, Operator "if_then_else" if_then_else Operator_type.ARITHMETIC false, Operator "equal" equal Operator_type.RELATIONAL true, Operator "not_equal" not_equal Operator_type.RELATIONAL true, Operator "less" less Operator_type.RELATIONAL false, Operator "less_equal" less_equal Operator_type.RELATIONAL false ]; matches = filter test_name operator_table; test_name x = x.op_name == op_name; } /* Given an operator name, look up a function that implements that * operator. */ oo_unary_lookup op_name = matches?0, matches != [] = error (_ "unknown unary operator" ++ ": " ++ print op_name) { operator_table = [ /* Operators. */ Operator "cast_signed_char" cast_signed_char Operator_type.ARITHMETIC false, Operator "cast_unsigned_char" cast_unsigned_char Operator_type.ARITHMETIC false, Operator "cast_signed_short" cast_signed_short Operator_type.ARITHMETIC false, Operator "cast_unsigned_short" cast_unsigned_short Operator_type.ARITHMETIC false, Operator "cast_signed_int" cast_signed_int Operator_type.ARITHMETIC false, Operator "cast_unsigned_int" cast_unsigned_int Operator_type.ARITHMETIC false, Operator "cast_float" cast_float Operator_type.ARITHMETIC false, Operator "cast_double" cast_double Operator_type.ARITHMETIC false, Operator "cast_complex" cast_complex Operator_type.ARITHMETIC false, Operator "cast_double_complex" cast_double_complex Operator_type.ARITHMETIC false, Operator "unary_minus" unary_minus Operator_type.ARITHMETIC false, Operator "negate" negate Operator_type.RELATIONAL false, Operator "complement" complement Operator_type.ARITHMETIC false, Operator "unary_plus" unary_plus Operator_type.ARITHMETIC false, /* Built in projections. */ Operator "re" re Operator_type.ARITHMETIC false, Operator "im" im Operator_type.ARITHMETIC false, Operator "hd" hd Operator_type.ARITHMETIC false, Operator "tl" tl Operator_type.ARITHMETIC false, /* Maths builtins. */ Operator "sin" sin Operator_type.ARITHMETIC false, Operator "cos" cos Operator_type.ARITHMETIC false, Operator "tan" tan Operator_type.ARITHMETIC false, Operator "asin" asin Operator_type.ARITHMETIC false, Operator "acos" acos Operator_type.ARITHMETIC false, Operator "atan" atan Operator_type.ARITHMETIC false, Operator "log" log Operator_type.ARITHMETIC false, Operator "log10" log10 Operator_type.ARITHMETIC false, Operator "exp" exp Operator_type.ARITHMETIC false, Operator "exp10" exp10 Operator_type.ARITHMETIC false, Operator "ceil" ceil Operator_type.ARITHMETIC false, Operator "floor" floor Operator_type.ARITHMETIC false ]; matches = filter test_name operator_table; test_name x = x.op_name == op_name; } /* Find the matching methods in a method table. */ oo_method_lookup table = map (extract 0) (filter (extract 1) table); /* A binary op: a is a class, b may be a class ... eg. "add" a b two obvious ways to find a method: - a.oo_binary_search "add" (+) b - b.oo_binary_search "add'" (converse (+)) a, is_class b if these fail but op is a symmetric operator (eg. a + b == b + a), we can also try reversing the args - a.oo_binary_search "add'" (converse (+)) b - b.oo_binary_search "add" (+) a, is_class b if those fail as well, but this is ==, do pointer equals as a fallback */ oo_binary_function op a b = matches1?0, matches1 != [] = matches2?0, is_class b && matches2 != [] = matches3?0, op.symmetric && matches3 != [] = matches4?0, op.symmetric && is_class b && matches4 != [] = pointer_equal a b, op.op_name == "equal" || op.op_name == "equal'" = not_pointer_equal a b, op.op_name == "not_equal" || op.op_name == "not_equal'" = error (_ "No method found for binary operator." ++ "\n" ++ _ "left" ++ " = " ++ print a ++ "\n" ++ _ "operator" ++ " = " ++ op.op_name ++ "\n" ++ _ "right" ++ " = " ++ print b) { matches1 = oo_method_lookup (a.oo_binary_table op b); matches2 = oo_method_lookup (b.oo_binary_table (oo_converse op) a); matches3 = oo_method_lookup (a.oo_binary_table (oo_converse op) b); matches4 = oo_method_lookup (b.oo_binary_table op a); } /* A binary op: a is not a class, b is a class ... eg. "subtract" a b only one way to find a method: - b.oo_binary_search "subtract'" (converse (-)) a if this fails but op is a symmetric operator (eg. a + b == b + a), we can try reversing the args - b.oo_binary_search "add" (+) a, is_class b if that fails as well, but this is ==, do pointer equals as a fallback */ oo_binary'_function op a b = matches1?0, matches1 != [] = matches2?0, op.symmetric && matches2 != [] = pointer_equal a b, op.op_name == "equal" || op.op_name == "equal'" = not_pointer_equal a b, op.op_name == "not_equal" || op.op_name == "not_equal'" = error (_ "No method found for binary operator." ++ "\n" ++ _ "left" ++ " = " ++ print a ++ "\n" ++ _ "operator" ++ " = " ++ op.op_name ++ "\n" ++ _ "right" ++ " = " ++ print b) { matches1 = oo_method_lookup (b.oo_binary_table (oo_converse op) a); matches2 = oo_method_lookup (b.oo_binary_table op a); } oo_unary_function op x = matches?0, matches != [] = error (_ "No method found for unary operator." ++ "\n" ++ _ "operator" ++ " = " ++ op.op_name ++ "\n" ++ _ "argument" ++ " = " ++ print x) { matches = oo_method_lookup (x.oo_unary_table op); } /* Base class for nip's built-in classes ... base check function, base * operator overload functions. */ _Object = class { check = check_args this; // these should always be defined _check_args = []; _check_all = []; /* Operator overloading stuff. */ oo_binary op x = oo_binary_function (oo_binary_lookup op) this x; oo_binary' op x = oo_binary'_function (oo_binary_lookup op) x this; oo_unary op = oo_unary_function (oo_unary_lookup op) this; oo_binary_table op x = []; oo_unary_table op = []; } nip2-8.7.0/share/nip2/compat/7.16/_predicate.def0000644000175000017500000002672113224651032015734 00000000000000 /* is_colour_space str: is a string one of nip's colour space names */ is_colour_space str = Image_type.colour_spaces.present 0 str; /* is_colour_type n: is a number one of VIPS's colour spaces */ is_colour_type n = Image_type.colour_spaces.present 1 n; /* is_number: is a real or a complex number. */ is_number a = is_real a || is_complex a; /* is_int: is an integer */ is_int a = is_real a && a == (int) a; /* is_uint: is an unsigned integer */ is_uint a = is_int a && a >= 0; /* is_pint: is a positive integer */ is_pint a = is_int a && a > 0; /* is_preal: is a positive real */ is_preal a = is_real a && a > 0; /* is_ureal: is an unsigned real */ is_ureal a = is_real a && a >= 0; /* is_letter c: true if character c is an ASCII letter * * is_letter :: char -> bool */ is_letter c = ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z'); /* is_digit c: true if character c is an ASCII digit * * is_digit :: char->bool */ is_digit x = '0' <= x && x <= '9'; /* A whitespace character. * * is_space :: char->bool */ is_space = member " \n\t"; /* List str starts with section prefix. * * is_prefix "hell" "hello world!" == true * is_prefix :: [*] -> [*] -> bool */ is_prefix prefix str = take (len prefix) str == prefix; /* List str ends with section suffix. * * is_suffix "ld!" "hello world!" == true * is_suffix :: [*] -> [*] -> bool */ is_suffix suffix str = take (len suffix) (reverse str) == reverse suffix; /* List contains seqence. * * is_substr "llo" "hello world!" == true * is_substr :: [*] -> [*] -> bool */ is_substr seq str = any (map (is_prefix seq) (iterate tl str)); /* is_listof p s: true if finite list with p true for every element. */ is_listof p l = is_list l && all (map p l); /* is_string s: true if finite list of char. */ is_string s = is_listof is_char s; /* is_real_list l: is l a list of real numbers ... test each element, * so no infinite lists pls. */ is_real_list l = is_listof is_real l; /* is_string_list l: is l a finite list of finite strings. */ is_string_list l = is_listof is_string l; /* Test list length ... quicker than len x == n for large lists. */ is_list_len n x = true, x == [] && n == 0 = false, x == [] || n == 0 = is_list_len (n - 1) (tl x); is_list_len_more n x = true, x != [] && n == 0 = false, x == [] || n == 0 = is_list_len_more (n - 1) (tl x); is_list_len_more_equal n x = true, n == 0 = false, x == [] = is_list_len_more_equal (n - 1) (tl x); /* is_rectangular l: is l a rectangular data structure */ is_rectangular l = true, !is_list l = true, all (map is_obj l) = true, all (map is_list l) && all (map (not @ is_obj) l) && all (map is_rectangular l) && is_list_len_more 0 l && all (map (is_list_len (len (hd l))) (tl l)) = false { // treat strings as a base type, not [char] is_obj x = !is_list x || is_string x; } /* is_matrix l: is l a list of lists of real numbers, all the same length * * [[]] is the empty matrix, [] is the empty list ... disallow [] */ is_matrix l = l != [] && is_listof is_real_list l && is_rectangular l; /* is_square_matrix l: is l a matrix with width == height */ is_square_matrix l = true, l == [[]] = is_matrix l && is_list_len (len (hd l)) l; /* is_oddmatrix l: is l a matrix with odd-length sides */ is_oddmatrix l = true, l == [[]] = is_matrix l && len l % 2 == 1 && len l?0 % 2 == 1; /* is_odd_square_matrix l: is l a square_matrix with odd-length sides */ is_odd_square_matrix l = is_square_matrix l && len l % 2 == 1; /* Is an item in a column of a table? */ is_incolumn n table x = member (map (extract n) table) x; /* Is HGuide or VGuide. */ is_HGuide x = is_instanceof "HGuide" x; is_VGuide x = is_instanceof "VGuide" x; is_Guide x = is_HGuide x || is_VGuide x; is_Mark x = is_instanceof "Mark" x; is_Group x = is_instanceof "Group" x; is_NULL x = is_instanceof "NULL" x; is_List x = is_instanceof "List" x; is_Image x = is_instanceof "Image" x; is_Region x = is_instanceof "Region" x; is_Real x = is_instanceof "Real" x; is_Matrix x = is_instanceof "Matrix_base" x; is_Vector x = is_instanceof "Vector" x; is_Colour x = is_instanceof "Colour" x; is_Arrow x = is_instanceof "Arrow" x; is_Bool x = is_instanceof "Bool" x; is_Scale x = is_instanceof "Scale" x; is_Rect x = is_instanceof "Rect" x; is_Number x = is_instanceof "Number" x; is_Expression x = is_instanceof "Expression" x; is_String x = is_instanceof "String" x; /* A list of the form [[1,2],[3,4],[5,6]...] */ is_xy_list l = is_list l && all (map xy l) { xy l = is_real_list l && is_list_len 2 l; } // does a nested list structure contain a Group object? contains_Group l = true, is_list l && any (map is_Group l) = any (map contains_Group l), is_list l = false; /* Does an object have a sensible VIPS type? */ has_type x = is_image x || is_Image x || is_Arrow x || is_Colour x; /* Try to get a VIPS image type from an object. */ get_type x = get_type_im x, is_image x = get_type_im x.value, is_Image x = get_type_im x.image.value, is_Arrow x = Image_type.colour_spaces.lookup 0 1 x.colour_space, is_Colour x // slightly odd ... but our display is always 0-255, so it makes sense for // a plain number to be in the same range = Image_type.sRGB, is_real x = error ("get_type: unable to get type from " ++ print x) { // get the type from a VIPS image ... but only if it makes sense with // the rest of the image // we often have Type set wrong, hence the ugly guessing :-( // can have alpha, hence we let bands be one more than you might think get_type_im im = Image_type.LABQ, coding == Image_coding.LABPACK = Image_type.GREY16, type == Image_type.GREY16 && is_bands 1 = Image_type.HISTOGRAM, type == Image_type.HISTOGRAM && (width == 1 || height == 1) = Image_type.B_W, is_bands 1 = Image_type.CMYK, type == Image_type.CMYK && is_bands 4 = type, is_colorimetric && is_bands 3 = Image_type.sRGB, !is_colorimetric && is_bands 3 = Image_type.MULTIBAND, !is_colorimetric && !is_bands 3 = type { type = get_header "Type" im; coding = get_header "Coding" im; bands = get_header "Bands" im; width = get_header "Xsize" im; height = get_header "Ysize" im; // 3-band colorimetric types we allow ... the things which the // Colour/Convert To menu can make, excluding mono. ok_types = [ Image_type.sRGB, Image_type.RGB16, Image_type.LAB, Image_type.LABQ, Image_type.LABS, Image_type.LCH, Image_type.XYZ, Image_type.YXY, Image_type.UCS ]; is_colorimetric = member ok_types type; // is bands n, with an optional alpha (ie. can be n + 1 too) is_bands n = bands == n || bands == n + 1; } } has_format x = has_member "format" x || is_Arrow x || is_image x; get_format x = x.format, has_member "format" x = x.image.format, is_Arrow x = get_header "BandFmt" x, is_image x = error ("get_format: unable to get format from " ++ print x); has_bits x = has_member "bits" x || is_Arrow x || is_image x; get_bits x = x.bits, has_member "bits" x = x.image.bits, is_Arrow x = get_header "Bbits" x, is_image x = error ("get_bits: unable to get bits from " ++ print x); has_bands x = is_image x || has_member "bands" x || is_Arrow x; get_bands x = x.bands, has_member "bands" x = x.image.bands, is_Arrow x = get_header "Bands" x, is_image x = 1, is_real x = len x, is_real_list x = error ("get_bands: unable to get bands from " ++ print x); has_coding x = has_member "coding" x || is_Arrow x || is_image x; get_coding x = x.coding, has_member "coding" x = x.image.coding, is_Arrow x = get_header "Coding" x, is_image x = Image_coding.NOCODING, is_real x = error ("get_coding: unable to get coding from " ++ print x); has_xres x = has_member "xres" x || is_Arrow x || is_image x; get_xres x = x.xres, has_member "xres" x = x.image.xres, is_Arrow x = get_header "Xres" x, is_image x = error ("get_xres: unable to get xres from " ++ print x); has_yres x = has_member "yres" x || is_Arrow x || is_image x; get_yres x = x.yres, has_member "yres" x = x.image.yres, is_Arrow x = get_header "Yres" x, is_image x = error ("get_yres: unable to get yres from " ++ print x); has_xoffset x = has_member "xoffset" x || is_Arrow x || is_image x; get_xoffset x = x.xoffset, has_member "xoffset" x = x.image.xoffset, is_Arrow x = get_header "Xoffset" x, is_image x = error ("get_xoffset: unable to get xoffset from " ++ print x); has_yoffset x = has_member "yoffset" x || is_Arrow x || is_image x; get_yoffset x = x.yoffset, has_member "yoffset" x = x.image.yoffset, is_Arrow x = get_header "Yoffset" x, is_image x = error ("get_yoffset: unable to get yoffset from " ++ print x); has_value = has_member "value"; get_value x = x.value; has_image x = is_image x || is_Image x || is_Arrow x; get_image x = x.value, is_Image x = x.image.value, is_Arrow x = x, is_image x = error ("get_image: unable to get image from " ++ print x); has_number x = is_number x || is_Real x; get_number x = x.value, is_Real x = x, is_number x = error ("get_number: unable to get number from " ++ print x); has_real x = is_real x || is_Real x; get_real x = x.value, is_Real x = x, is_real x = error ("get_real: unable to get real from " ++ print x); has_width x = has_member "width" x || is_image x; get_width x = x.width, has_member "width" x = get_header "Xsize" x, is_image x = error ("get_width: unable to get width from " ++ print x); has_height x = has_member "height" x || is_image x; get_height x = x.height, has_member "height" x = get_header "Ysize" x, is_image x = error ("get_height: unable to get height from " ++ print x); has_left x = has_member "left" x; get_left x = x.left, has_member "left" x = error ("get_left: unable to get left from " ++ print x); has_top x = has_member "top" x; get_top x = x.top, has_member "top" x = error ("get_top: unable to get top from " ++ print x); // like has/get member, but first in a lst of objects has_member_list has objects = filter has objects != []; // need one with the args swapped get_member = converse dot; // get a member from the first of a list of objects to have it get_member_list has get objects = hd members, members != [] = error "unable to get property" { members = map get (filter has objects); } is_hist x = has_image x && (h == 1 || w == 1 || t == Image_type.HISTOGRAM) { im = get_image x; w = get_width im; h = get_height im; t = get_type im; } get_header field x = oo_unary_function get_header_op x, is_class x = get_header_image x, is_image x = error (_ "bad arguments to " ++ "get_header") { get_header_op = Operator "get_header" (get_header field) Operator_type.COMPOUND false; get_header_image im = im_header_int field im, type == itype = im_header_double field im, type == dtype = im_header_string field im, type == stype1 || type == stype2 = error (_ "image has no field " ++ field), type == 0 = error (_ "unknown type for field " ++ field) { type = im_header_get_typeof field im; itype = name2gtype "gint"; dtype = name2gtype "gdouble"; stype1 = name2gtype "VipsRefString"; stype2 = name2gtype "gchararray"; } } get_header_type field x = oo_unary_function get_header_type_op x, is_class x = im_header_get_typeof field x, is_image x = error (_ "bad arguments to " ++ "get_header_type") { get_header_type_op = Operator "get_header_type" (get_header_type field) Operator_type.COMPOUND false; } set_header field value x = oo_unary_function set_header_op x, is_class x = im_copy_set_meta x field value, is_image x = error (_ "bad arguments to " ++ "set_header") { set_header_op = Operator "set_header" (set_header field value) Operator_type.COMPOUND false; } nip2-8.7.0/share/nip2/compat/7.16/Widgets.def0000644000175000017500000000235313224651032015236 00000000000000Widget_slider_item = class Menuaction "_Scale" "make a new scale widget" { icon = "nip-slider-16.png"; action = Scale "untitled scale" 0 255 128; } Widget_toggle_item = class Menuaction "_Toggle" "make a new toggle widget" { action = Toggle "untitled toggle" false; } Widget_option_item = class Menuaction "_Option" "make a new option widget" { action = Option "untitled option" ["option0", "option1"] 0; } Widget_string_item = class Menuaction "St_ring" "make a new string widget" { action = String "Enter a string" "sample text"; } Widget_number_item = class Menuaction "_Number" "make a new number widget" { action = Number "Enter a number" 42; } Widget_expression_item = class Menuaction "_Expression" "make a new expression widget" { action = Expression "Enter an expression" 42; } Widget_pathname_item = class Menuaction "_File Chooser" "make a new file chooser widget" { action = Pathname "Pick a file" "$VIPSHOME/share/$PACKAGE/data/print_test_image.v"; } Widget_font_item = class Menuaction "F_ont Chooser" "make a new font chooser widget" { action = Fontname "Pick a font" Workspaces.Preferences.PAINTBOX_FONT; } Widget_clock_item = class Menuaction "_Clock" "make a new clock widget" { action = Clock 1 1; } nip2-8.7.0/share/nip2/compat/7.16/Colour.def0000644000175000017500000003531513224651032015077 00000000000000 Colour_new_item = class Menupullright (_ "_New") (_ "make a patch of colour") { Widget_colour_item = class Menuaction (_ "_Colour") (_ "make a patch of colour") { action = Colour_picker "Lab" [50,0,0]; } LAB_colour = class Menuaction (_ "CIE Lab _Picker") (_ "pick colour in CIE Lab space") { action = widget "Lab" [50, 0, 0]; // ab_slice size size = 512; // range of values ... +/- 128 for ab range = 256; // map xy in slice image to ab and back xy2ab x = x / (size / range) - 128; ab2xy a = (a + 128) * (size / range); widget space default_value = class Colour space _result { _vislevel = 3; [_L, _a, _b] = default_value; L = Scale "Lightness" 0 100 _L; ab_slice = Image (lab_slice size L.value); point = Mark ab_slice (ab2xy _a) (ab2xy _b); _result = [L.value, xy2ab point.left, xy2ab point.top]; Colour_edit colour_space value = widget colour_space value; } } } Colour_to_colour_item = class Menuaction (_ "Con_vert to Colour") (_ "convert anything to a colour") { action x = to_colour x; } #separator Colour_convert_item = class Menupullright (_ "_Colourspace") (_ "convert to various colour spaces") { spaces = Image_type.image_colour_spaces; conv dest x = class _result { _vislevel = 3; to = Option_enum spaces (_ "Convert to") (spaces.get_name dest); _result = map_unary (colour_transform_to to.value_thing) x; } Mono_item = class Menuaction (_ "_Monochrome") (_ "convert to mono colourspace") { action x = conv Image_type.B_W x; } GREY16_item = class Menuaction (_ "_GREY16") (_ "convert to GREY16 colourspace") { action x = conv Image_type.GREY16 x; } sRGB_item = class Menuaction (_ "_sRGB") (_ "convert to sRGB colourspace") { action x = conv Image_type.sRGB x; } RGB16_item = class Menuaction (_ "_RGB16") (_ "convert to RGB16 colourspace") { action x = conv Image_type.RGB16 x; } Lab_item = class Menuaction (_ "_Lab") (_ "convert to Lab colourspace (float Lab)") { action x = conv Image_type.LAB x; } LabQ_item = class Menuaction (_ "Lab_Q") (_ "convert to LabQ colourspace (32-bit Lab)") { action x = conv Image_type.LABQ x; } LabS_item = class Menuaction (_ "Lab_S") (_ "convert to LabS colourspace (48-bit Lab)") { action x = conv Image_type.LABS x; } LCh_item = class Menuaction (_ "L_Ch") (_ "convert to LCh colourspace") { action x = conv Image_type.LCH x; } XYZ_item = class Menuaction (_ "_XYZ") (_ "convert to XYZ colourspace") { action x = conv Image_type.XYZ x; } Yxy_item = class Menuaction (_ "_Yxy") (_ "convert to Yxy colourspace") { action x = conv Image_type.YXY x; } UCS_item = class Menuaction (_ "_UCS") (_ "convert to UCS colourspace") { action x = conv Image_type.UCS x; } } /* mark objects as being in various colourspaces */ Colour_tag_item = class Menupullright (_ "_Tag As") (_ "tag object as being in various colour spaces") { spaces = Image_type.image_colour_spaces; tag dest x = class _result { _vislevel = 3; to = Option_enum spaces (_ "Tag as") (spaces.get_name dest); _result = map_unary (image_set_type to.value_thing) x; } Mono_item = class Menuaction (_ "_Monochrome") (_ "tag as being in mono colourspace") { action x = tag Image_type.B_W x; } sRGB_item = class Menuaction (_ "_sRGB") (_ "tag as being in sRGB colourspace") { action x = tag Image_type.sRGB x; } RGB16_item = class Menuaction (_ "_RGB16") (_ "tag as being in RGB16 colourspace") { action x = tag Image_type.RGB16 x; } GREY16_item = class Menuaction (_ "_GREY16") (_ "tag as being in GREY16 colourspace") { action x = tag Image_type.GREY16 x; } Lab_item = class Menuaction (_ "_Lab") (_ "tag as being in Lab colourspace (float Lab)") { action x = tag Image_type.LAB x; } LabQ_item = class Menuaction (_ "Lab_Q") (_ "tag as being in LabQ colourspace (32-bit Lab)") { action x = tag Image_type.LABQ x; } LabS_item = class Menuaction (_ "Lab_S") (_ "tag as being in LabS colourspace (48-bit Lab)") { action x = tag Image_type.LABS x; } LCh_item = class Menuaction (_ "L_Ch") (_ "tag as being in LCh colourspace") { action x = tag Image_type.LCH x; } XYZ_item = class Menuaction (_ "_XYZ") (_ "tag as being in XYZ colourspace") { action x = tag Image_type.XYZ x; } Yxy_item = class Menuaction (_ "_Yxy") (_ "tag as being in Yxy colourspace") { action x = tag Image_type.YXY x; } UCS_item = class Menuaction (_ "_UCS") (_ "tag as being in UCS colourspace") { action x = tag Image_type.UCS x; } } Colour_temperature_item = class Menupullright (_ "Colour Te_mperature") (_ "colour temperature conversions") { Whitepoint_item = class Menuaction (_ "_Move Whitepoint") (_ "change whitepoint") { action x = class _result { _vislevel = 3; old_white = Option_enum Whitepoints (_ "Old whitepoint") "D65"; new_white = Option_enum Whitepoints (_ "New whitepoint") "D50"; _result = map_unary process x { process im = im''' { im' = colour_transform_to Image_type.XYZ im; im'' = im' * (new_white.value_thing / old_white.value_thing); im''' = colour_transform_to (get_type im) im''; } } } } D65_to_D50_item = class Menupullright (_ "D_65 to D50") (_ "complex conversion") { XYZ_minimal_item = class Menuaction (_ "_Minimal") (_ "D65 to D50 using the minimal 3x3 matrix in XYZ") { action x = map_unary process x { process im = im''' { im' = colour_transform_to Image_type.XYZ im; im'' = recomb D652D50_direct im'; im''' = colour_transform_to (get_type im) im''; } } } Bradford_item = class Menuaction (_ "_Bradford") (_ "D65 to D50 in Bradford cone space") { action x = map_unary process x { process im = im''' { im' = colour_transform_to Image_type.XYZ im; im'' = im_D652D50 im'; im''' = colour_transform_to (get_type im) im''; } } } } D50_to_D65_item = class Menupullright (_ "D_50 to D65") (_ "complex conversion") { XYZ_minimal_item = class Menuaction (_ "_Minimal") (_ "D50 to D65 using the minimal 3x3 matrix in XYZ") { action x = map_unary process x { process im = im''' { im' = colour_transform_to Image_type.XYZ im; im'' = recomb D502D65_direct im'; im''' = colour_transform_to (get_type im) im''; } } } Bradford_item = class Menuaction (_ "_Bradford") (_ "D60 to D65 in Bradford cone space") { action x = map_unary process x { process im = im''' { im' = colour_transform_to Image_type.XYZ im; im'' = im_D502D65 im'; im''' = colour_transform_to (get_type im) im''; } } } } Lab_to_D50XYZ_item = class Menuaction (_ "_Lab to D50 XYZ") (_ "Lab to XYZ with a D50 whitepoint") { action x = map_unary (colour_unary im_D50Lab2XYZ) x; } D50XYZ_to_Lab_item = class Menuaction (_ "D50 _XYZ to Lab") (_ "XYZ to Lab with a D50 whitepoint") { action x = map_unary (colour_unary im_D50XYZ2Lab) x; } } Colour_icc_item = class Menupullright (_ "_ICC") (_ "transform with ICC profiles") { print_profile = "$VIPSHOME/share/$PACKAGE/data/cmyk.icm"; monitor_profile = "$VIPSHOME/share/$PACKAGE/data/sRGB.icm"; guess_profile image = monitor_profile, has_bands image && get_bands image == 3 = print_profile; render_intents = Option_enum Render_intent.names (_ "Render intent") (_ "Absolute"); Export_item = class Menuaction (_ "_Export") (_ "export from PCS to device space") { action x = class _result { _vislevel = 3; profile = Pathname (_ "Output profile") print_profile; intent = render_intents; depth = Option (_ "Output depth") [_ "8 bit", _ "16 bit"] 0; _result = map_unary process x { process image = icc_export [8, 16]?depth profile.value intent.value_thing lab { lab = colour_transform_to Image_type.LABQ image; } } } } Import_item = class Menuaction (_ "_Import") (_ "import from device space to PCS") { action x = class _result { _vislevel = 3; embedded = Toggle (_ "Use embedded profile if possible") false; profile = Pathname (_ "Default input profile") (guess_profile x); intent = render_intents; _result = map_unary process x { process image = icc_import_embedded intent.value_thing image, get_header_type "icc-profile-data" image != 0 && embedded = icc_import profile.value intent.value_thing image; } } } Transform_item = class Menuaction (_ "_Transform") (_ "transform between two device spaces") { action x = class _result { _vislevel = 3; in_profile = Pathname (_ "Input profile") (guess_profile x); out_profile = Pathname (_ "Output profile") print_profile; intent = render_intents; _result = map_unary process x { process image = icc_transform in_profile.value out_profile.value intent.value_thing image; } } } AC2RC_item = class Menuaction (_ "_Absolute to Relative") (_ "absolute to relative colorimetry using device profile") { action x = class _result { _vislevel = 3; profile = Pathname (_ "Pick a profile") (guess_profile x); _result = map_unary process x { process image = icc_ac2rc profile.value lab { lab = colour_transform_to Image_type.LAB image; } } } } } #separator Colour_dE_item = class Menupullright (_ "_Difference") (_ "calculate colour difference") { /* Apply a converter to an object ... convert image or colour (since * we can guess the colour space we're converting from), don't convert * matrix or vector (since we can't tell ... assume it's in the right * space already). */ apply_cvt cvt x = cvt x, is_Image x || is_Colour x || is_image x = x; diff cvt in1 in2 = abs_vec (apply_cvt cvt in1 - apply_cvt cvt in2); /* Converter to LAB. */ lab_cvt = colour_transform_to Image_type.LAB; /* Converter to UCS ... plain UCS is Ch form, so we go LAB again after * to make sure we get a rectangular coord system. */ ucs_cvt = colour_transform Image_type.LCH Image_type.LAB @ colour_transform_to Image_type.UCS; CIEdE76_item = class Menuaction (_ "CIE dE _76") (_ "calculate CIE dE 1976 for two objects") { action a b = map_binary (diff lab_cvt) a b; } CIEdE00_item = class Menuaction (_ "CIE dE _00") (_ "calculate CIE dE 2000 for two objects") { action a b = map_binary (colour_binary (_ "im_dE00_fromLab") im_dE00_fromLab) a b; } UCS_item = class Menuaction (_ "_CMC(l:l)") (_ "calculate CMC(l:l) for two objects") { action a b = map_binary (diff ucs_cvt) a b; } } Colour_adjust_item = class Menupullright (_ "_Adjust") (_ "alter colours in various ways") { Recombination_item = class Menuaction (_ "_Recombination") (_ "recombine colour with an editable matrix") { action x = class _result { _vislevel = 3; matrix = Matrix_rec (identity_matrix (bands x)) { // try to guess a sensible value for the size of the // matrix bands x = x.bands, is_Image x || is_Colour x = x.width, is_Matrix x = bands x.value?0, is_Group x = x.bands, has_member "bands" x = 3; } _result = map_unary (recomb matrix) x; } } Cast_item = class Menuaction (_ "_Cast") (_ "displace neutral axis in CIE Lab") { action x = class _result { _vislevel = 3; gr = Scale "Green-red" (-20) 20 0; by = Scale "Blue-yellow" (-20) 20 0; _result = map_unary adjust_cast x { adjust_cast in = colour_transform_to (get_type in) in'' { in' = colour_transform_to Image_type.LAB in; in'' = in' + Vector [0, gr.value, by.value]; } } } } HSB_item = class Menuaction (_ "_HSB") (_ "adjust hue-saturation-brightness in LCh") { action x = class _result { _vislevel = 3; h = Scale "Hue" 0 360 0; s = Scale "Saturation" 0.01 5 1; b = Scale "Brightness" 0.01 5 1; _result = map_unary adjust_hsb x { adjust_hsb in = colour_transform_to (get_type in) in'' { in' = colour_transform_to Image_type.LCH in; in'' = in' * Vector [b.value, s.value, 1] + Vector [0, 0, h.value]; } } } } } Colour_similar_item = class Menuaction (_ "_Similar Colour") (_ "find pixels with a similar colour") { action x = class _result { _vislevel = 3; target_colour = Colour_picker "Lab" [50, 0, 0]; t = Scale "dE threshold" 0 100 10; _result = map_unary match x { match in = abs_vec (in' - target) < t { target = colour_transform_to Image_type.LAB target_colour; in' = colour_transform_to Image_type.LAB in; } } } } #separator Colour_chart_to_matrix_item = class Menuaction (_ "_Measure Colour Chart") (_ "measure average pixel values for a colour chart image") { action x = class _result { _vislevel = 3; pacross = Expression (_ "Patches across chart") 6; pdown = Expression (_ "Patches down chart") 4; _result = map_unary chart x { chart in = measure 0 0 in.width in.height (to_real pacross) (to_real pdown) in; } } } Colour_matrix_to_chart_item = class Menuaction (_ "Make Synth_etic Colour Chart") (_ "make a colour chart image from a matrix of measurements") { action x = class _result { _vislevel = 3; pacross = Expression (_ "Patches across chart") 6; pdown = Expression (_ "Patches down chart") 4; pwidth = Expression (_ "Patch width in pixels") 50; pheight = Expression (_ "Patch height in pixels") 50; bwidth = Expression (_ "Border between patches") 0; _result = map_unary build_chart x { build_chart in = Image (imagearray_assemble (to_real bwidth) (to_real bwidth) patch_table) { // patch numbers for row starts rowstart = map (multiply (to_real pacross)) [0 .. to_real pdown - 1]; // assemble patches ... each one a pixel value patches = map (take (to_real pacross)) (map (converse drop in.value) rowstart); // make an n-band constant image from eg. [1,2,3] // we don't know the format .. use sRGB (well, why not?) patch v = image_new (to_real pwidth) (to_real pheight) (len v) Image_format.FLOAT Image_coding.NOCODING Image_type.sRGB (Vector v) 0 0; // make an image for each patch patch_table = map (map patch) patches; } } } } Colour_plot_ab_scatter_item = class Menuaction (_ "_Plot ab Scatter") (_ "plot an ab scatter histogram") { action x = class _result { _vislevel = 3; bins = Expression (_ "Number of bins on each axis") 8; _result = map_unary plot_scatter x { plot_scatter in = Image (bg * (((90 / mx) * hist) ++ blk)) { lab = colour_transform_to Image_type.LAB in.value; ab = (unsigned char) ((lab?1 ++ lab?2) + 128); hist = hist_find_nD bins.expr ab; mx = max hist; bg = lab_slice bins.expr 1; blk = 1 + im_black (to_real bins) (to_real bins) 2; } } } } nip2-8.7.0/share/nip2/compat/7.16/_joe_extra.def0000644000175000017500000003300213224651032015742 00000000000000//////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// Frame_item = class Menupullright "Picture _Frame" "working with images of frames" { //////////////////////////////////////////////////////////////////////////////////// Build_frame_item = class Menupullright "_Build Frame From" "builds a new frame from image a and places it around image b" { //////////////////////////////////////////////////////////////////////////////////// Frame_corner_item = class Menuaction "_Frame Corner" "copies and extends a frame corner, a, to produce a complete frame to fit round a given image, b" { prefs = Workspaces.Preferences; action a b = class _result { _check_args = [ [a, "a", check_Image], [b, "b", check_Image] ] ++ super._check_args; _check_all = [ [a.coding == b.coding && a.bands == b.bands, "a.coding == b.coding && a.bands == b.bands"] ] ++ super._check_all; _vislevel = 3; ppcm = Expression "Number of pixels per cm" 25; /* Given the value of ppcm, distance between the inner edge of the frame * and the outer edge of the image. +ve values mean the frame overlaps * the image. */ overlap = Expression "Size of frame overlap in cm" 0; variables = class { scale_factor = Expression "scale the size of the frame by" 1; /* These sliders define the fraction of the frames width or height is extracted * to produce each of the particular regions. */ corner_section = Scale "Corner section" 0.1 1 0.5; middle_section = Scale "Middle section" 0.1 1 0.2; blend_fraction = Scale "Blend fraction" 0.1 0.9 0.1; } _type = Image_type.colour_spaces.get_name b.type; //If applied the count colour be seen for -ve values of overlap mount_options = class { apply = Toggle "Apply mount options" false; ls = Expression "Lower mount section bigger by (cm)" 0; mount_colour = Colour _type [0, 0, 0]; _los = ls.expr * ppcm.expr; } _cs = variables.corner_section.value; _ms = variables.middle_section.value; _ov = ppcm.expr * overlap.expr; _sf = variables.scale_factor.expr; _bf = variables.blend_fraction.value; //Scale frame image if required. _a = a, _sf == 1; = a, _sf == 0; = Image (resize _sf _sf Interpolate.BILINEAR a.value); _im_w = b.width; _im_h = b.height + mount_options._los, mount_options.apply = b.height; _os = mount_options._los, mount_options.apply = 0; _cl = Vector mount_options.mount_colour.value, mount_options.apply = 0; //Produce scaled and resized frame. frame = corner_frame _a _im_w _im_h _ov _cs _ms _bf; //Resize image canvas and applied mount colour as required. _pos_im = frame_position_image b frame _os _cl; //Wrap frame round image. _result = if (frame == 0) then _pos_im else frame; } } //////////////////////////////////////////////////////////////////////////////////// Simple_frame_item = class Menuaction "_Simple Frame" "extends or shortens the central sections of a simple frame, a, to fit round a given image, b" { prefs = Workspaces.Preferences; action a b = class _result { _check_args = [ [a, "a", check_Image], [b, "b", check_Image] ] ++ super._check_args; _check_all = [ [a.coding == b.coding && a.bands == b.bands, "a.coding == b.coding && a.bands == b.bands"] ] ++ super._check_all; _vislevel = 3; ppcm = Expression "Number of pixels per cm" 25; /* Given the value of ppcm, distance between the inner edge of the frame * and the outer edge of the image. +ve values mean the frame overlaps * the image. */ overlap = Expression "Size of frame overlap in cm" 0; variables = class { scale_factor = Expression "scale the size of the frame by" 1; /* These sliders define the fraction of the frames width or height that * is extracted to produce each of the particular regions. */ corner_section = Scale "Corner section" 0.1 1 0.5; middle_section = Scale "Middle section" 0.1 1 0.2; blend_fraction = Scale "Blend fraction" 0.1 0.9 0.1; option = Toggle "Use mirror of left-side to make right" true; } _type = Image_type.colour_spaces.get_name b.type; //If applied the count colour be seen for -ve values of overlap mount_options = class { apply = Toggle "Apply mount options" false; ls = Expression "Lower mount section bigger by (cm)" 0; mount_colour = Colour _type [0, 0, 0]; _los = ls.expr * ppcm.expr; } _cs = variables.corner_section.value; _ms = variables.middle_section.value; _ov = ppcm.expr * overlap.expr; _sf = variables.scale_factor.expr; _bf = variables.blend_fraction.value; //Scale frame image if required. _a = a, _sf == 1; = a, _sf == 0; = Image (resize _sf _sf Interpolate.BILINEAR a.value); _im_w = b.width; _im_h = b.height + mount_options._los, mount_options.apply = b.height; _os = mount_options._los, mount_options.apply = 0; _cl = Vector mount_options.mount_colour.value, mount_options.apply = 0; //Produce scaled and resized frame. frame = simple_frame _a _im_w _im_h _ov _cs _ms _bf variables.option; //Resize image canvas and applied mount colour as required. _pos_im = frame_position_image b frame _os _cl; //Wrap frame round image. _result = if (frame == 0) then _pos_im else frame; } } //////////////////////////////////////////////////////////////////////////////////// Complex_frame_item = class Menuaction "_Complex Frame" "extends or shortens the central sections of a frame a, preserving any central edge details, to fit image b" { prefs = Workspaces.Preferences; action a b = class _result { _check_args = [ [a, "a", check_Image], [b, "b", check_Image] ] ++ super._check_args; _check_all = [ [a.coding == b.coding && a.bands == b.bands, "a.coding == b.coding && a.bands == b.bands"] ] ++ super._check_all; _vislevel = 3; ppcm = Expression "Number of pixels per cm" 25; /* Given the value of ppcm, distance between the inner edge of the frame * and the outer edge of the image. +ve values mean the frame overlaps * the image. */ overlap = Expression "Size of frame overlap in cm" 0; variables = class { scale_factor = Expression "scale the size of the frame by" 1; /* These sliders define the fraction of the frames width or height is extracted * to produce each of the particular regions. */ corner_section = Scale "Corner section" 0.1 1 0.5; edge_section = Scale "Edge section" 0.1 1 0.2; middle_section = Scale "Middle section" 0.1 1 0.2; blend_fraction = Scale "Blend fraction" 0.1 0.9 0.1; option = Toggle "Use mirror of left-side to make right" true; } _type = Image_type.colour_spaces.get_name b.type; //If applied the count colour be seen for -ve values of overlap mount_options = class { apply = Toggle "Apply mount color" false; ls = Expression "Lower mount section bigger by (cm)" 0; colour = Colour _type [0, 0, 0]; _los = ls.expr * ppcm.expr; } _cs = variables.corner_section.value; _es = variables.edge_section.value; _ms = variables.middle_section.value; _ov = ppcm.expr * overlap.expr; _sf = variables.scale_factor.expr; _bf = variables.blend_fraction.value; _a = a, _sf == 1; = a, _sf == 0; = Image (resize _sf _sf Interpolate.BILINEAR a.value); _im_w = b.width; _im_h = b.height + mount_options._los, mount_options.apply = b.height; _os = mount_options._los, mount_options.apply = 0; _cl = Vector mount_options.colour.value, mount_options.apply = 0; //Produce scaled and resized frame. frame = complex_frame _a _im_w _im_h _ov _cs _es _ms _bf variables.option; //Resize image canvas and applied mount colour as required. _pos_im = frame_position_image b frame _os _cl; //Wrap frame round image. _result = if (frame == 0) then _pos_im else frame; } } } //////////////////////////////////////////////////////////////////////////////////// Straighten_frame_item = class Menuaction "_Straighten Frame" "uses four points to square up distorted images of frames" { action a = Perspective_item.action a; } }; //////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// Select_item = class Menupullright "_Select" "select user defined areas of an image" { prefs = Workspaces.Preferences; /* Option toggle used to define whether the user is replacing a * dark or a light area. */ _control = Option "Make" [ "Selection Brighter", "Selection Darker", "Selection Black", "Selection White", "Background Black", "Background White", "Mask" ] 6; control_selection mask im no = (if mask then im * 1.2 else im * 1), no == 0 = (if mask then im * 0.8 else im * 1), no == 1 = (if mask then 0 else im), no == 2 = (if mask then 255 else im), no == 3 = (if mask then im else 0), no == 4 = (if mask then im else 255), no == 5 = mask; Elipse = class Menuaction "_Ellipse" "use a line/arrow x to define the center point radius and direction of an ellipse" { action x = class _result { _vislevel = 3; control = _control; width = Scale "Width" 0.01 1 0.5; _result = control_selection mask im control { mask = select_ellipse x width.value; im = x.image; } } } Tetragon = class Menuaction "_Tetragon" "selects the convex area defined by four points" { action a b c d = class _result { _vislevel = 3; control = _control; _result = control_selection mask im control { mask = select_tetragon a b c d; im = a.image; } } } Polygon = class Menuaction "_Polygon" "selects a polygon from an ordered group of points" { action pt_list = class _result { _vislevel = 3; control = _control; _result = control_selection mask im control { mask = select_polygon pt_list; im = ((pt_list.value)?0).image; } } } sep1 = Menuseparator; Threshold_item = class Menuaction "Thres_hold" "simple image threshold" { action x = class _result { _vislevel = 3; t = Scale "Threshold" 0 mx (mx / 2) { mx = Image_format.maxval x.format, is_Image x = 255; } _result = map_unary (more t.value) x; } } Threshold_percent_item = class Menuaction "Per_cent Threshold" "threshold at a percentage of pixels" { action x = class _result { _vislevel = 3; t = Scale "Percentage of pixels" 0 100 50; _result = map_unary (more (hist_thresh (t.value / 100) x)) x; } } }; //////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// Perspective_match_item = class Menuaction "_Perspective Match" "rotate, scale and skew one image to match another" { action x y = class _result { _vislevel = 3; // try to find an image ... for a group, get the first item find_image x = x, is_Image x = find_image x?0, is_list x = find_image x.value, is_class x && has_value x = error "unable to find image"; _a = find_image x; _b = find_image y; ap1 = Mark_relative _a 0.1 0.1; ap2 = Mark_relative _a 0.9 0.1; ap3 = Mark_relative _a 0.1 0.9; ap4 = Mark_relative _a 0.9 0.9; bp1 = Mark_relative _b 0.1 0.1; bp2 = Mark_relative _b 0.9 0.1; bp3 = Mark_relative _b 0.1 0.9; bp4 = Mark_relative _b 0.9 0.9; _result = map_binary process x y { f1 = _a.width / _b.width; f2 = _a.height / _b.height; rl = sort_pts_clockwise [ap1, ap2, ap3, ap4]; pl = sort_pts_clockwise [bp1, bp2, bp3, bp4]; to = [ rl?0.left, rl?0.top, rl?1.left, rl?1.top, rl?2.left, rl?2.top, rl?3.left, rl?3.top ]; from = [ pl?0.left * f1, pl?0.top * f2, pl?1.left * f1, pl?1.top * f2, pl?2.left * f1, pl?2.top * f2, pl?3.left * f1, pl?3.top * f2 ]; trans = perspective_transform to from; process a b = transform 1 0 trans b2 { b2 = resize f1 f2 1 b, (f1 >= 1 && f2 >= 1) || (f1 >= 1 && f2 >= 1) = resize f1 1 1 b1 {b1 = resize 1 f2 1 b;} } } } } //////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// Perspective_item = class Menuaction "Pe_rspective Distort" "rotate, scale and skew an image with respect to defined points" { action x = class _result { _vislevel = 3; // try to find an image ... for a group, get the first item find_image x = x, is_Image x = find_image x?0, is_list x = find_image x.value, is_class x && has_value x = error "unable to find image"; _a = find_image x; dir = Option "Select distort direction" [ "Distort to points", "Distort to corners" ] 1; ap1 = Mark_relative _a 0.1 0.1; ap2 = Mark_relative _a 0.9 0.1; ap3 = Mark_relative _a 0.9 0.9; ap4 = Mark_relative _a 0.1 0.9; _result = map_unary process x { trans = [perspective_transform to from, perspective_transform from to]?(dir.value) { rl = sort_pts_clockwise [ap1, ap2, ap3, ap4]; to = [(rl?0).left, (rl?0).top, (rl?1).left, (rl?1).top, (rl?2).left, (rl?2).top, (rl?3).left, (rl?3).top]; from=[0, 0, (_a.width - 1), 0, (_a.width - 1), (_a.height - 1), 0, (_a.height - 1)]; } process a = transform 1 0 trans a; } } }; nip2-8.7.0/share/nip2/compat/7.16/_generate.def0000644000175000017500000000514013224651032015556 00000000000000 /* make an image of size x by y whose pixels are their coordinates. */ make_xy x y = im_make_xy (to_real x) (to_real y); /* make an image with the specified properties ... pixel is (eg.) * Vector [0, 0, 0], or 12. If coding == labq, we ignore bands, format and * type, generate a 3 band float image, and lab2labq it before handing it * back. */ image_new w h b fmt coding type pixel xoff yoff = im'''' { b' = 3, coding == Image_coding.LABPACK = b; fmt' = Image_format.FLOAT, coding == Image_coding.LABPACK = fmt; type' = Image_type.LAB, coding == Image_coding.LABPACK = type; im = im_black (to_real w) (to_real h) (to_real b') + pixel; im' = clip2fmt fmt' im; im'' = im_Lab2LabQ im', coding == Image_coding.LABPACK; = im'; im''' = image_set_type type' im''; im'''' = image_set_origin xoff yoff im'''; } /* generate a slice of LAB space size x size pixels for L* == l */ lab_slice size l = image_set_type Image_type.LAB im { L = image_new size size 1 Image_format.FLOAT Image_coding.NOCODING Image_type.B_W l 0 0; A1 = im_fgrey (to_real size) (to_real size); /* im_fgrey always makes 0-1, so these ranges can be wired in. */ A2 = A1 * 256 - 128; A4 = im_rot90 A2; im = image_set_origin (size / 2) (size / 2) (L ++ A2 ++ A4); } /* Look at Image, try to make a Colour (failing that, a Vector) which is white * for that image type. */ image_white im = colour_transform_to type white_lab, bands == 3 && coding == Image_coding.NOCODING && colour_spaces.present 1 type = white_lab, coding == Image_coding.LABPACK = Vector (replicate bands (max_value.lookup 1 0 format)) { bands = im.bands; type = im.type; format = im.format; coding = im.coding; colour_spaces = Image_type.colour_spaces; // white as LAB white_lab = Colour "Lab" [100, 0, 0]; // maximum value for this numeric type max_value = Table [ [255, Image_format.DPCOMPLEX], [255, Image_format.DOUBLE], [255, Image_format.COMPLEX], [255, Image_format.FLOAT], [2 ** 31 - 1, Image_format.INT], [2 ** 32 - 1, Image_format.UINT], [2 ** 15 - 1, Image_format.SHORT], [2 ** 16 - 1, Image_format.USHORT], [2 ** 7 - 1, Image_format.CHAR], [2 ** 8 - 1, Image_format.UCHAR] ]; } /* Make a seperable gaussian mask. */ matrix_gaussian_blur radius = Matrix_con mask_g_sum 0 [mask_g_line] { mask_g = im_gauss_imask (radius / 3) 0.2; mask_g_line = mask_g.value?(mask_g.height / 2); mask_g_sum = sum mask_g_line; } /* Make a seperable square mask. */ matrix_blur radius = Matrix_con (sum mask_sq_line) 0 [mask_sq_line] { mask_sq_line = replicate (2 * radius - 1) 1; } nip2-8.7.0/share/nip2/compat/7.16/Math.def0000644000175000017500000003104013224651032014514 00000000000000Math_arithmetic_item = class Menupullright "_Arithmetic" "basic arithmetic for objects" { Add_item = class Menuaction "_Add" "add a and b" { action a b = map_binary add a b; } Subtract_item = class Menuaction "_Subtract" "subtract b from a" { action a b = map_binary subtract a b; } Multiply_item = class Menuaction "_Multiply" "multiply a by b" { action a b = map_binary multiply a b; } Divide_item = class Menuaction "_Divide" "divide a by b" { action a b = map_binary divide a b; } Remainder_item = class Menuaction "_Remainder" "remainder after integer division of a by b" { action a b = map_binary remainder a b; } sep1 = Menuseparator; Absolute_value_item = class Menuaction "A_bsolute Value" "absolute value of x" { action x = map_unary abs x; } Absolute_value_vector_item = class Menuaction "Absolute Value _Vector" "like Absolute Value, but treat pixels as vectors" { action x = map_unary abs_vec x; } Sign_item = class Menuaction "S_ign" "unit vector" { action x = map_unary sign x; } Negate_item = class Menuaction "_Negate" "multiply by -1" { action x = map_unary unary_minus x; } } Math_trig_item = class Menupullright "_Trigonometry" "trigonometry operations (all in degrees)" { Sin_item = class Menuaction "_Sine" "calculate sine x" { action x = map_unary sin x; } Cos_item = class Menuaction "_Cosine" "calculate cosine x" { action x = map_unary cos x; } Tan_item = class Menuaction "_Tangent" "calculate tangent x" { action x = map_unary tan x; } sep1 = Menuseparator; Asin_item = class Menuaction "Arc S_ine" "calculate arc sine x" { action x = map_unary asin x; } Acos_item = class Menuaction "Arc C_osine" "calculate arc cosine x" { action x = map_unary acos x; } Atan_item = class Menuaction "Arc T_angent" "calculate arc tangent x" { action x = map_unary atan x; } sep2 = Menuseparator; Rad_item = class Menuaction "_Degrees to Radians" "convert degrees to radians" { action x = map_unary rad x; } Deg_item = class Menuaction "_Radians to Degrees" "convert radians to degrees" { action x = map_unary deg x; } sep3 = Menuseparator; Angle_range_item = class Menuaction "Angle i_n Range" "is angle within t degrees of r, mod 360" { action t r angle = clock (max - angle) < 2*r { max = clock (t + r); clock a = a + 360, a < 0; = a - 360, a >= 360; = a; } } } Math_log_item = class Menupullright "_Log" "logarithms and anti-logs" { Exponential_item = class Menuaction "_Exponential" "calculate e ** x" { action x = map_unary (power e) x; } Log_natural_item = class Menuaction "Natural _Log" "log base e of x" { action x = map_unary log x; } sep1 = Menuseparator; Exponential10_item = class Menuaction "E_xponential base 10" "calculate 10 ** x" { action x = map_unary (power 10) x; } Log10_item = class Menuaction "L_og Base 10" "log base 10 of x" { action x = map_unary log10 x; } sep2 = Menuseparator; Raise_to_power_item = class Menuaction "_Raise to Power" "calculate x ** y" { action x y = map_binary power x y; } } Math_complex_item = class Menupullright "_Complex" "operations on complex numbers and images" { Complex_extract = class Menupullright "_Extract" "extract fields from complex" { Real_item = class Menuaction "_Real" "extract real part of complex" { action in = map_unary re in; } Imaginary_item = class Menuaction "_Imaginary" "extract imaginary part of complex" { action in = map_unary im in; } } Complex_build_item = class Menuaction "_Build" "join a and b to make a complex" { action a b = map_binary comma a b; } sep1 = Menuseparator; Polar_item = class Menuaction "_Polar" "convert real and imag to amplitude and phase" { action a = map_unary polar a; } Rectangular_item = class Menuaction "_Rectagular" ("convert (amplitude, phase) image to rectangular " ++ "coordinates") { action x = map_unary rectangular x; } sep2 = Menuseparator; Conjugate_item = class Menuaction "_Conjugate" "invert imaginary part" { action x = map_unary conj x; } } Math_boolean_item = class Menupullright "_Boolean" "bitwise boolean operations for integer objects" { And_item = class Menuaction "_And" "bitwise and of a and b" { action a b = map_binary bitwise_and a b; } Or_item = class Menuaction "_Or" "bitwise or of a and b" { action a b = map_binary bitwise_or a b; } Eor_item = class Menuaction "E_xclusive Or" "bitwise exclusive or of a and b" { action a b = map_binary eor a b; } Not_item = class Menuaction "_Not" "invert a" { action a = map_unary not a; } sep1 = Menuseparator; Right_shift_item = class Menuaction "Shift _Right" "shift a right by b bits" { action a b = map_binary right_shift a b; } Left_shift_item = class Menuaction "Shift _Left" "shift a left by b bits" { action a b = map_binary left_shift a b; } sep2 = Menuseparator; If_then_else_item = class Menuaction "_If Then Else" "b where a is non-zero, c elsewhere" { action a b c = map_trinary ite a b c { // can't use if_then_else, we need a true trinary ite a b c = if a then b else c; } } Band_or_item = class Menuaction "Band O_r" "or the bands of an image together" { action im = map_unary (foldr1 bitwise_or @ bandsplit) im; } Band_and_item = class Menuaction "Band A_nd" "and the bands of an image together" { action im = map_unary (foldr1 bitwise_and @ bandsplit) im; } } Math_relational_item = class Menupullright "R_elational" "comparison operations" { Equal_item = class Menuaction "_Equal to" "test a equal to b" { action a b = map_binary equal a b; } Not_equal_item = class Menuaction "_Not Equal to" "test a not equal to b" { action a b = map_binary not_equal a b; } sep1 = Menuseparator; More_item = class Menuaction "_More Than" "test a strictly greater than b" { action a b = map_binary more a b; } Less_item = class Menuaction "_Less Than" "test a strictly less than b" { action a b = map_binary less a b; } sep2 = Menuseparator; More_equal_item = class Menuaction "M_ore Than or Equal to" "test a greater than or equal to b" { action a b = map_binary more_equal a b; } Less_equal_item = class Menuaction "L_ess Than or Equal to" "test a less than or equal to b" { action a b = map_binary less_equal a b; } } Math_list_item = class Menupullright "L_ist" "operations on lists" { Head_item = class Menuaction "_Head" "first element in list" { action x = map_unary hd x; } Tail_item = class Menuaction "_Tail" "list without the first element" { action x = map_unary tl x; } Last_item = class Menuaction "_Last" "last element in list" { action x = map_unary last x; } Init_item = class Menuaction "_Init" "list without the last element" { action x = map_unary init x; } sep1 = Menuseparator; Reverse_item = class Menuaction "_Reverse" "reverse order of elements in list" { action x = map_unary reverse x; } Sort_item = class Menuaction "_Sort" "sort list into ascending order" { action x = map_unary sort x; } Make_set_item = class Menuaction "_Make Set" "remove duplicates from list" { action x = map_unary mkset equal x; } Transpose_list_item = class Menuaction "Tr_anspose" "exchange rows and columns in a list of lists" { action x = map_unary transpose x; } Concat_item = class Menuaction "_Concat" "flatten a list of lists into a single list" { action l = map_unary concat l; } sep2 = Menuseparator; Length_item = class Menuaction "L_ength" "find the length of list" { action x = map_unary len x; } Subscript_item = class Menuaction "S_ubscript" "return element n from list (index from zero)" { action n x = map_binary subscript n x; } Take_item = class Menuaction "_Take" "take the first n elements of list x" { action n x = map_binary take n x; } Drop_item = class Menuaction "_Drop" "drop the first n elements of list x" { action n x = map_binary drop n x; } sep3 = Menuseparator; Join_item = class Menuaction "_Join" "join two lists end to end" { action a b = map_binary join a b; } Cons_item = class Menuaction "C_ons" "put element a on the front of list x" { action a x = map_binary cons a x; } Zip_item = class Menuaction "_Zip" "join two lists, pairwise" { action a b = map_binary zip2 a b; } } Math_round_item = class Menupullright "_Round" "various rounding operations" { /* smallest integral value not less than x */ Ceil_item = class Menuaction "_Ceil" "smallest integral value not less than x" { action x = map_unary ceil x; } Floor_item = class Menuaction "_Floor" "largest integral value not greater than x" { action x = map_unary floor x; } Rint_item = class Menuaction "_Round to Nearest" "round to nearest integer" { action x = map_unary rint x; } } Math_fourier_item = class Menupullright "_Fourier" "Fourier transform" { Forward_item = class Menuaction "_Forward" "fourier transform of image" { action a = map_unary (rotquad @ fwfft) a; } Reverse_item = class Menuaction "_Reverse" "inverse fourier transform of image" { action a = map_unary (invfft @ rotquad) a; } Rotate_quadrants_item = class Menuaction "Rotate _Quadrants" "rotate quadrants" { action a = map_unary rotquad a; } } Math_stats_item = class Menupullright "_Statistics" "measure various statistics of objects" { Mean_item = class Menuaction "_Mean" "arithmetic mean value" { action a = map_unary mean a; } Gmean_item = class Menuaction "_Geometric Mean" "geometric mean value" { action a = map_unary meang a; } Zmean_item = class Menuaction "_Zero-excluding Mean" "mean value of non-zero elements" { action a = map_unary meanze a; } Deviation_item = class Menuaction "_Standard Deviation" "standard deviation of object" { action a = map_unary deviation a; } Zdeviation_item = class Menuaction "Z_ero-excluding Standard Deviation" "standard deviation of non-zero elements" { action a = map_unary deviationze a; } Stats_item = class Menuaction "Ma_ny Stats" "calculate many stats in a single pass" { action a = map_unary stats a; } sep1 = Menuseparator; Max_item = class Menuaction "M_aximum" "maximum of object" { action a = map_unary max a; } Min_item = class Menuaction "M_inimum" "minimum of object" { action a = map_unary min a; } Maxpos_item = class Menuaction "_Position of Maximum" "position of maximum in object" { action a = map_unary maxpos a; } Minpos_item = class Menuaction "P_osition of Minimum" "position of minimum in object" { action a = map_unary minpos a; } Gravity_item = class Menuaction "Centre of _Gravity" "position of centre of gravity of histogram" { action a = map_unary gravity a; } sep2 = Menuseparator; Count_set_item = class Menuaction "_Non-zeros" "number of non-zero elements in object" { action a = map_unary cset a { cset i = (mean (i != 0) * i.width * i.height) / 255; } } Count_clear_item = class Menuaction "_Zeros" "number of zero elements in object" { action a = map_unary cclear a { cclear i = (mean (i == 0) * i.width * i.height) / 255; } } Count_edges_item = class Menuaction "_Edges" "count average edges across or down image" { action x = class _result { _vislevel = 3; edge = Option "Count" [ "Horizontal lines", "Vertical lines" ] 0; _result = map_unary process x { process image = Number (edge.labels?edge) (im_cntlines image.value edge.value); } } } sep3 = Menuseparator; Linear_regression_item = class Menuaction "_Linear Regression" "fit a line to a set of points" { action xes yes = linreg xes yes; } Weighted_linear_regression_item = class Menuaction "_Weighted Linear Regression" "fit a line to a set of points and deviations" { action xes yes devs = linregw xes yes devs; } Cluster_item = class Menuaction "_Cluster" "cluster a list of numbers" { action l = class { _vislevel = 2; thresh = Expression "Threshold" 10; [_r, _w] = cluster thresh.expr l; result = _r; weights = _w; } } } Math_base_item = class Menupullright "Bas_e" "convert number bases" { Hexadecimal_item = class Menuaction "_Hexadecimal" "convert to hexadecimal (base 16)" { action a = map_unary (print_base 16) a; } Binary_item = class Menuaction "_Binary" "convert to binary (base 2)" { action a = map_unary (print_base 2) a; } Octal_item = class Menuaction "_Octal" "convert to octal (base 8)" { action a = map_unary (print_base 8) a; } } nip2-8.7.0/share/nip2/compat/7.16/Tasks.def0000644000175000017500000006214713224651032014724 00000000000000Tasks_capture_item = class Menupullright "_Capture" "useful stuff for capturing and preprocessing images" { Csv_import_item = class Menuaction "_CSV Import" "read a file of comma-separated values" { action = class _result { _vislevel = 3; path = Pathname "File to load" "empty"; start_line = Expression "Start at line" 1; rows = Expression "Lines to read (-1 for whole file)" (-1); whitespace = String "Whitespace characters" " \""; separator = String "Separator characters" ",;\t"; _result = Image blank, path.value == "empty" = Image (im_csv2vips filename) { filename = search (expand path.value) ++ ":" ++ "skip:" ++ print (start_line.expr - 1) ++ "," ++ "whi:" ++ escape whitespace.value ++ "," ++ "sep:" ++ escape separator.value ++ "," ++ "line:" ++ print rows.expr; // prefix any ',' with a '\' in the separators line escape x = foldr prefix [] x { prefix x l = '\\' : x : l, x == ',' = x : l; } blank = image_new 1 1 1 Image_format.DOUBLE Image_coding.NOCODING Image_type.B_W 0 0 0; } } } // interpret Analyze header for layout and calibration Analyze7_header_item = class Menuaction "_Interpret Analyze 7 Header" "examine the Analyze header and set layout and value" { action x = x''' { // read bits of header dim n = get_header ("dsr-image_dimension.dim[" ++ print n ++ "]"); dim0 = dim 0 x; dim1 = dim 1 x; dim2 = dim 2 x; dim3 = dim 3 x; dim4 = dim 4 x; dim5 = dim 5 x; dim6 = dim 6 x; dim7 = dim 7 x; glmax = get_header "dsr-image_dimension.glmax" x; cal_max = get_header "dsr-image_dimension.cal_max" x; // oops, now a nop x' = x; // lay out higher dimensions width-ways x'' = grid dim2 dim3 1 x', dim0 == 3 = grid dim2 dim3 dim4 x', dim0 == 4 = grid (dim2 * dim4) dim5 1 (grid dim2 dim3 dim4) x', dim0 == 5 = grid (dim2 * dim4) dim5 dim6 (grid dim2 dim3 dim4) x', dim0 == 6 = grid (dim2 * dim4 * dim6) dim7 1 (grid (dim2 * dim4) dim5 dim6 (grid dim2 dim3 dim4)) x', dim0 == 7 = error (_ "unsupported dimension " ++ dim0); // multiply by scale factor to get kBeq x''' = x'' * (cal_max / glmax); } } Video_item = class Menuaction "Capture _Video Frame" "capture a frame of still video" { // shortcut to prefs prefs = Workspaces.Preferences; action = class _result { _vislevel = 3; device = prefs.VIDEO_DEVICE; channel = Option "Input channel" [ "TV", "Composite 1", "Composite 2", "Composite 3" ] prefs.VIDEO_CHANNEL; b = Scale "Brightness" 0 32767 prefs.VIDEO_BRIGHTNESS; col = Scale "Colour" 0 32767 prefs.VIDEO_COLOUR; con = Scale "Contrast" 0 32767 prefs.VIDEO_CONTRAST; hue = Scale "Hue" 0 32767 prefs.VIDEO_HUE; frames = Scale "Frames to average" 0 100 prefs.VIDEO_FRAMES; mono = Toggle "Monochrome grab" prefs.VIDEO_MONO; crop = Toggle "Crop image" prefs.VIDEO_CROP; // grab, but hide it ... if we let the crop edit _raw_grab = Image (im_video_v4l1 device channel.value b.value col.value con.value hue.value frames.value); edit_crop = Region _raw_grab left top width height { left = prefs.VIDEO_CROP_LEFT; top = prefs.VIDEO_CROP_TOP; width = min_pair prefs.VIDEO_CROP_WIDTH (_raw_grab.width + left); height = min_pair prefs.VIDEO_CROP_HEIGHT (_raw_grab.height + top); } aspect_ratio = Expression "Stretch vertically by" prefs.VIDEO_ASPECT; _result = frame' { frame = edit_crop, crop = _raw_grab; frame' = colour_transform_to Image_type.B_W frame, mono = frame; } } } Smooth_image_item = class Menuaction "_Smooth" "remove small features from image" { action in = class _result { _vislevel = 3; feature = Scale "Minimum feature size" 1 50 20; _result = map_unary (smooth feature.value) in; } } Light_correct_item = class Menuaction "_Flatfield" "use white image w to flatfield image i" { action w i = map_binary wc w i { wc w i = clip2fmt i.format (w' * i) { fac = mean w / max w; w' = fac * (max w / w); } } } Image_rank_item = Filter_rank_item.Image_rank_item; Tilt_item = Filter_tilt_item; sep1 = Menuseparator; White_balance_item = class Menuaction "_White Balance" "use average of small image to set white of large image" { action a b = class _result { _vislevel = 3; white_hint = "Set image white to:"; white = Colour_picker "Lab" [100, 0, 0]; _result = map_binary wb a b { wb a b = colour_transform_to (get_type image) image_xyz' { area x = x.width * x.height; larger x y = area x > area y; [image, patch] = sortc larger [a, b]; to_xyz = colour_transform_to Image_type.XYZ; // white balance in XYZ patch_xyz = to_colour (to_xyz patch); white_xyz = to_xyz white; facs = (mean patch_xyz / mean white_xyz) * (white_xyz / patch_xyz); image_xyz = to_xyz image; image_xyz' = image_xyz * facs; } } } } Gamma_item = Image_levels_item.Gamma_item; Tone_item = Image_levels_item.Tone_item; sep2 = Menuseparator; Crop_item = Image_crop_item; Rotate_item = Image_transform_item.Rotate_item; Flip_item = Image_transform_item.Flip_item; Resize_item = Image_transform_item.Resize_item; Rubber_item = Image_transform_item.Image_rubber_item; sep3 = Menuseparator; ICC_item = Colour_icc_item; Temp_item = Colour_temperature_item; Find_calib_item = class Menuaction "Find _Colour Calibration" "find an RGB -> XYZ transform from an image of a colour chart" { action image = class _result { _check_args = [ [image, "image", check_Image] ] ++ super._check_args; _vislevel = 3; // get macbeth data file to use macbeth = Pathname "Pick a Macbeth data file" "$VIPSHOME/share/$PACKAGE/data/macbeth_lab_d65.mat"; mode = Option "Input LUT" [ "Linear input", "Fit intercept from chart greyscale", "Linearize input from chart greyscale" ] 2; // get max of input image _max_value = Image_format.maxval image.format; // measure chart image _camera = measure 0 0 image.width image.height 6 4 image.value; // load true values _true_Lab = Matrix_file macbeth.value; _true_XYZ = colour_transform Image_type.LAB Image_type.XYZ _true_Lab; // get Ys of greyscale _true_grey_Y = map (extract 1) (drop 18 _true_XYZ.value); // camera greyscale (all bands) _camera_grey = drop 18 _camera.value; // normalise both to 0-1 and combine _camera_grey' = map (map (multiply (1 / _max_value))) _camera_grey; _true_grey_Y' = map (multiply (1 / 100)) _true_grey_Y; _comb = Matrix [[0, 0], [1, 1]], mode == 0 = Matrix [0: intercepts, replicate (_camera.width + 1) 1], mode == 1 = Matrix (map2 cons _true_grey_Y' _camera_grey') { intercepts = [(linreg _true_grey_Y' cam).intercept :: cam <- transpose _camera_grey']; } // make a linearising lut ... zero on left _linear_lut = im_invertlut _comb (_max_value + 1); // and display it // plot from 0 explicitly so we see the effect of mode1 (intercept // from greyscale) linearising_lut = Plot [$ymin => 0] _linear_lut; // map the original image through the lineariser to // get linear 0-1 RGB image _image' = hist_map linearising_lut.value image.value; // remeasure and solve for RGB -> XYZ _camera' = im_measure _image' 0 0 image.width image.height 6 4; _pinv = (transpose _camera' * _camera') ** -1; M = transpose (_pinv * transpose _camera' * _true_XYZ); // convert linear RGB camera to Lab _result = (Image @ colour_transform Image_type.XYZ Image_type.LAB @ cast_float @ recomb M) _image'; // measure again and compute dE76 _camera'' = im_measure _result.value 0 0 image.width image.height 6 4; _dEs = map abs_vec (_camera'' - _true_Lab).value; final_dE76 = mean _dEs; _max_dE = foldr max_pair 0 _dEs; _worst = index (equal _max_dE) _dEs; worst_patch = name _worst ++ " (patch " ++ print (_worst + 1) ++ ", " ++ print _max_dE ++ " dE)" { name i = macbeth_names?i, i >= 0 && i < len macbeth_names = "Unknown"; } } } Apply_calib_item = class Menuaction "_Apply Colour Calibration" "apply an RGB -> LAB transform to an image" { action a b = class (map_binary process a b) { process a b = result, is_instanceof calib_name calib && is_Image image = error (_ "bad arguments to " ++ "Calibrate_image") { // the name of the calib object we need calib_name = "Tasks_capture_item.Find_calib_item.action"; // get the Calibrate_chart arg first [image, calib] = sortc (const (is_instanceof calib_name)) [a, b]; // map the original image through the lineariser to get // linear 0-1 RGB image image' = hist_map calib.linearising_lut image; // convert linear RGB camera to Lab result = colour_transform Image_type.XYZ Image_type.LAB ((float) (recomb calib.M image')); } } } sep4 = Menuseparator; Graph_hist_item = Hist_find_item; Graph_bands_item = class Menuaction "Plot _Bands" "show image bands as a graph" { action x = class _result { _vislevel = 3; style = Option_enum Plot_style.names "Style" "Line"; auto = Toggle "Auto Range" true; ymin = Expression "Y range minimum" 0; ymax = Expression "Y range maximum" 1; _result = Plot options (to_image (bands (image x))).value { options = [$style => style.value] ++ if auto then [] else [$ymin => ymin.expr, $ymax => ymax.expr]; // try to make something image-like from it image x = extract_area x.left x.top 1 1 x.image, is_Mark x = get_image x, has_image x = get_image (to_image x); // get as [[1],[2],[3]] bands x = transpose [map mean (bandsplit x)]; } } } } Tasks_mosaic_item = class Menupullright "_Mosaic" "build image mosaics" { /* Check and group a point list by image. */ mosaic_sort_test l = error "mosaic: not all points", !is_listof is_Mark l = error "mosaic: points not on two images", !is_list_len 2 images = error "mosaic: images do not match in format and coding", !all_equal (map get_format l) || !all_equal (map get_coding l) = error "mosaic: not same number of points on each image", !foldr1 equal (map len l') = l' { // test for all elements of a list equal all_equal l = all (map (equal (hd l)) (tl l)); // all the different images images = mkset pointer_equal (map get_image l); // find all points defined on image test_image image p = (get_image p) === image; find l image = filter (test_image image) l; // group point list by image l' = map (find l) images; } /* Sort a point group to get right before left, and within each group to * get above before below. */ mosaic_sort_lr l = l'' { // sort to get upper point first above a b = a.top < b.top; l' = map (sortc above) l; // sort to get right group before left group right a b = a?0.left > b?0.left; l'' = sortc right l'; } /* Sort a point group to get top before bottom, and within each group to * get left before right. */ mosaic_sort_tb l = l'' { // sort to get upper point first left a b = a.left < b.left; l' = map (sortc left) l; // sort to get right group before left group below a b = a?0.top > b?0.top; l'' = sortc below l'; } /* Put 'em together! Group by image, sort vertically (or horizontally) with * one of the above, transpose to get pairs matched up, and flatten again. */ mosaic_sort fn = concat @ transpose @ fn @ mosaic_sort_test; Mosaic_1point_item = class Menupullright "_One Point" "join two images with a single tie point" { check_ab_args a b = [ [a, "a", check_Mark], [b, "b", check_Mark] ]; // shortcut to prefs prefs = Workspaces.Preferences; search_area = prefs.MOSAIC_WINDOW_SIZE; object_size = prefs.MOSAIC_OBJECT_SIZE; blend_width_widget = Scale "Maximum blend width" 0 100 prefs.MOSAIC_MAX_BLEND_WIDTH; refine_widget = Toggle "Refine selected tie-points" prefs.MOSAIC_REFINE; lr_mos _refine a b = class Image _result { _check_args = check_ab_args a b ++ super._check_args; bw = blend_width_widget; refine = _refine; _result = im_lrmosaic a'.image.value b'.image.value 0 a'.left a'.top b'.left b'.top (object_size / 2) (search_area / 2) 0 bw.value, refine = im_lrmerge a'.image.value b'.image.value (b'.left - a'.left) (b'.top - a'.top) bw.value { [a', b'] = mosaic_sort mosaic_sort_lr [a, b]; } } tb_mos _refine a b = class Image _result { _check_args = check_ab_args a b ++ super._check_args; bw = blend_width_widget; refine = _refine; _result = im_tbmosaic a'.image.value b'.image.value 0 a'.left a'.top b'.left b'.top (object_size / 2) (search_area / 2) 0 bw.value, refine = im_tbmerge a'.image.value b'.image.value (b'.left - a'.left) (b'.top - a'.top) bw.value { [a', b'] = mosaic_sort mosaic_sort_tb [a, b]; } } Left_right_item = class Menuaction "_Left to Right" "join two images left-right with a single tie point" { action a b = lr_mos refine_widget a b; } Top_bottom_item = class Menuaction "_Top to Bottom" "join two images top-bottom with a single tie point" { action a b = tb_mos refine_widget a b; } sep1 = Menuseparator; Left_right_manual_item = class Menuaction "Manual L_eft to Right" "join left-right, no auto-adjust of tie points" { action a b = lr_mos false a b; } Top_bottom_manual_item = class Menuaction "Manual T_op to Bottom" "join top-bottom, no auto-adjust of tie points" { action a b = tb_mos false a b; } } Mosaic_2point_item = class Menupullright "_Two Point" "join two images with two tie points" { check_abcd_args a b c d = [ [a, "a", check_Mark], [b, "b", check_Mark], [c, "c", check_Mark], [d, "d", check_Mark] ]; // shortcut to prefs prefs = Workspaces.Preferences; search_area = prefs.MOSAIC_WINDOW_SIZE; object_size = prefs.MOSAIC_OBJECT_SIZE; blend_width_widget = Scale "Maximum blend width" 0 100 prefs.MOSAIC_MAX_BLEND_WIDTH; refine_widget = Toggle "Refine selected tie-points" prefs.MOSAIC_REFINE; Left_right_item = class Menuaction "_Left to Right" "join two images left-right with a pair of tie points" { action a b c d = class Image _result { _check_args = check_abcd_args a b c d ++ super._check_args; bw = blend_width_widget; refine = refine_widget; _result = im_lrmosaic1 a'.image.value b'.image.value 0 a'.left a'.top b'.left b'.top c'.left c'.top d'.left d'.top (object_size / 2) (search_area / 2) 0 bw.value, refine = im_lrmerge1 a'.image.value b'.image.value a'.left a'.top b'.left b'.top c'.left c'.top d'.left d'.top bw.value { [a', b', c', d'] = mosaic_sort mosaic_sort_lr [a, b, c, d]; } } } Top_bottom_item = class Menuaction "_Top to Bottom" "join two images top-bottom with a pair of tie points" { action a b c d = class Image _result { _check_args = check_abcd_args a b c d ++ super._check_args; bw = blend_width_widget; refine = refine_widget; _result = im_tbmosaic1 a'.image.value b'.image.value 0 a'.left a'.top b'.left b'.top c'.left c'.top d'.left d'.top (object_size / 2) (search_area / 2) 0 bw.value, refine = im_tbmerge1 a'.image.value b'.image.value a'.left a'.top b'.left b'.top c'.left c'.top d'.left d'.top bw.value { [a', b', c', d'] = mosaic_sort mosaic_sort_tb [a, b, c, d]; } } } } sep1 = Menuseparator; Balance_item = class Menuaction "Mosaic _Balance" "disassemble mosaic, scale brightness to match, reassemble" { action x = map_unary balance x { balance x = oo_unary_function balance_op x, is_class x = im_global_balancef x Workspaces.Preferences.MOSAIC_BALANCE_GAMMA, is_image x = error (_ "bad arguments to " ++ "balance") { balance_op = Operator "balance" balance Operator_type.COMPOUND_REWRAP false; } } } //////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// Manual_balance_item = class Menupullright "Manual B_alance" "balance tonality of user defined areas" { prefs = Workspaces.Preferences; //////////////////////////////////////////////////////////////////////////////////// Balance_find_item = class Menuaction "_Find Values" "calculates values required to scale and offset balance user defined areas in a given image" /* Outputs a matrix of scale and offset values. Eg. Values required to balance the secondary * structure in an X-ray image. Takes an X-ray image an 8-bit control mask and a list of * 8-bit reference masks, where the masks are white on a black background. */ { action im_in m_control m_group = class Matrix values{ _vislevel = 1; _control_im = if m_control then im_in else 0; _control_meanmax = so_meanmax _control_im; _group_check = is_Group m_group; _m_list = m_group.value, _group_check = m_group; process m_current mat_in = mat_out {so_values = so_calculate _control_meanmax im_in m_current; mat_out = join [so_values] mat_in;} values = (foldr process [] _m_list); } } //////////////////////////////////////////////////////////////////////////////////// Balance_check_item = class Menuaction "_Check Values" "allows calculated set of scale and offset values to be checked and adjusted if required" /* Outputs adjusted matrix of scale and offset values and scale and offset image maps. * Eg. Check values required to balance the secondary structure in an X-ray image. * Takes an X-ray image an 8-bit control mask and a list of 8-bit reference masks, * where the masks are white on a black background. */ { action im_in m_matrix m_group = class Image value { _vislevel = 3; blur = Scale "Blur" 1 10 1; _blur = (blur.value/2 + 0.5), blur.value > 1 = 1; _group_check = is_Group m_group; _m_list = m_group.value, _group_check = m_group; adjust = Matrix_rec mat_a { no_masks = len _m_list; mat_a = replicate no_masks [0, 0]; } // Apply the user defined adjustments to the inputted matrix of scale and offset values _adjusted = map2 fn_adjust m_matrix.value adjust.value; fn_adjust a b = [(a?0 + b?0), (a?1 + (a?1 * b?1))]; _scaled_ims = map (fn_so_apply im_in) _adjusted; fn_so_apply im so = map_unary adj im {adj im = im * (so?0) + (so?1);} _im_pairs = zip2 _m_list _scaled_ims; // Prepare black images as starting point. //////////// _blank = image_new (_m_list?0).width (_m_list?0).height 1 6 Image_coding.NOCODING 1 0 0 0; _pair_start = [(_blank + 1), _blank]; Build = Toggle "Build Scale and Offset Correction Images" false; Output = class { _vislevel = 1; scale_im = _build?0; offset_im = _build?1; so_values = Matrix _adjusted; _build = [Image so_images?0, Image so_images?1], Build = ["Scale image not built.", "Offset image not built."] { m_list' = transpose [_m_list]; m_all = map2 join m_list' _adjusted; so_images = foldr process_2 _pair_start m_all; } } value = (foldr process_1 im_in_b _im_pairs).value {im_in_b = map_unary cast_float im_in;} process_1 m_current im_start = im_out { bl_mask = convsep (matrix_blur _blur) (get_image m_current?0); blended_im = im_blend bl_mask (m_current?1).value im_start.value; im_out = Image (clip2fmt im_start.format blended_im); } // Process for building scale and offset image. process_2 current p_start = p_out { im_s = if ((current?0) > 128) then current?1 else _blank; im_o = if ((current?0) > 128) then current?2 else _blank; im_s' = convsep (matrix_blur _blur) (im_s != 0); im_o' = convsep (matrix_blur _blur) (im_o != 0); im_s'' = im_blend im_s'.value im_s.value p_start?0; im_o'' = im_blend im_o'.value im_o.value p_start?1; p_out = [im_s'', im_o'']; } } } //////////////////////////////////////////////////////////////////////////////////// Balance_apply_item = class Menuaction "_Apply Values" "apply scale and offset corrections, defined as image maps, to a given image" /* Outputs the balanced image. Eg. Balance the secondary structure in an X-ray image. Takes an * X-ray image an 32-bit float scale image and a 32-bit offset image. */ { action im_in scale_im offset_im = class Image value { _vislevel = 1; xfactor = im_in.width/scale_im.width; yfactor = im_in.height/scale_im.height; _scale_im = resize xfactor yfactor 1 scale_im; _offset_im = resize xfactor yfactor 1 offset_im; value = get_image ( clip2fmt im_in.format ( ( im_in * _scale_im ) + _offset_im ) ); } } } Tilt_item = Filter_tilt_item; sep2 = Menuseparator; Rebuild_item = class Menuaction "_Rebuild" "disassemble mosaic, substitute image files and reassemble" { action x = class _result { _vislevel = 3; old = String "In each filename, replace" "foo"; new = String "With" "bar"; _result = map_unary remosaic x { remosaic image = Image (im_remosaic image.value old.value new.value); } } } sep3 = Menuseparator; Clone_area_item = class Menuaction "_Clone Area" "replace dark or light section of im1 with pixels from im2" { action im1 im2 = class _result { _check_args = [ [im1, "im1", check_Image], [im2, "im2", check_Image] ]; _vislevel = 3; /* Region on first image placed in the top left hand corner, * positioned and size relative to the height and width of im1. */ r1 = Region_relative im1 0.05 0.05 0.05 0.05; /* Mark on second image placed in the top left hand corner, * positioned relative to the height and width of im2. Used to * define _r2, the region from which the section of image is cloned * from. */ p2 = Mark_relative im2 0.05 0.05; _r2 = Region im2 p2.left p2.top r1.width r1.height; mask = [r1 <= Options.sc, r1 >= Options.sc]?(Options.replace); Options = class { _vislevel = 3; pause = Toggle "Pause process" true; /* Option toggle used to define whether the user is * replacing a dark or a light area. */ replace = Option "Replace" [ "A Dark Area", "A Light Area" ] 1; // Used to select the area to be replaced. sc = Scale "Scale cutoff" 0.01 mx (mx / 2) {mx = Image_format.maxval im1.format;} //Allows replacement with scale&offset balanced gaussian noise. balance = Toggle "Balance cloned data to match surroundings." true; //Allows replacement with scale&offset balanced //gaussian noise. process = Toggle "Replace area with Gaussian noise." false; } _result = im1, Options.pause = Image (im_insert im1.value patch r1.left r1.top) { r2 = Region im2 p2.left p2.top r1.width r1.height; ref_meanmax = so_meanmax (if mask then 0 else r1); mask8 = Matrix_mor [[255, 255, 255], [255, 255, 255], [255, 255, 255]]; mask_a = map_unary (dilate mask8) mask; mask_b = convsep (matrix_blur 2) mask_a; patch = so_balance ref_meanmax r1 r2 mask_b Options.process, Options.balance = so_balance ref_meanmax r1 r2 mask_b Options.process, Options.process = im_blend (get_image mask_b) (get_image r2) (get_image r1); } } } } Tasks_frame_item = Frame_item; Tasks_print_item = class Menupullright "_Print" "useful stuff for image output" { Rotate_item = Image_transform_item.Rotate_item; Flip_item = Image_transform_item.Flip_item; Resize_item = Image_transform_item.Resize_item; Tone_item = Image_levels_item.Tone_item; Sharpen_item = class Menuaction "_Sharpen" "unsharp filter tuned for typical inkjet printers" { action x = class _result { _vislevel = 3; target_dpi = Option "Sharpen for print at" [ "400 dpi", "300 dpi", "150 dpi", "75 dpi" ] 1; _result = map_unary process x { process image = sharpen params?0 params?1 params?2 params?3 params?4 params?5 (colour_transform_to Image_type.LABQ image) { // sharpen params for various dpi // just change the size of the area we search param_table = [ [7, 2.5, 40, 20, 0.5, 1.5], [5, 2.5, 40, 20, 0.5, 1.5], [3, 2.5, 40, 20, 0.5, 1.5], [11, 2.5, 40, 20, 0.5, 1.5] ]; params = param_table?target_dpi; } } } } sep1 = Menuseparator; Temp_item = Colour_temperature_item; ICC_item = Colour_icc_item; } nip2-8.7.0/share/nip2/compat/7.16/_types.def0000644000175000017500000007006713224651032015142 00000000000000/* A list of things. Do automatic iteration of unary and binary operators on * us. * List [1, 2] + [2, 3] -> List [3, 5] * hd (List [2, 3]) -> 2 * List [] == [] -> true */ List value = class _Object { _check_args = [ [value, "value", check_list] ] ++ super._check_args; // methods oo_binary_table op x = [ [apply2 op value x', op.op_name == "subscript" || op.op_name == "subscript'" || op.op_name == "equal" || op.op_name == "equal'"], [this.List (apply2 op value x'), op.op_name == "join" || op.op_name == "join'"], [this.List (map2 (apply2 op) value x'), is_list x'], [this.List (map (apply2 op' x) value), true] ] ++ super.oo_binary_table op x { op' = oo_converse op; // strip the List wrapper, if any x' = x.value, is_List x = x; apply2 op x1 x2 = oo_binary_function op x1 x2, is_class x1 = oo_binary'_function op x1 x2, is_class x2 = op.fn x1 x2; }; oo_unary_table op = [ [apply value, op.op_name == "hd" || op.op_name == "tl"], [this.List (map apply value), true] ] ++ super.oo_unary_table op { apply x = oo_unary_function op x, is_class x = op.fn x; } } /* A group of things. Loop the operation over the group. */ Group value = class _Object { _check_args = [ [value, "value", check_list] ] ++ super._check_args; // methods oo_binary_table op x = [ // if_then_else is really a trinary operator [map_trinary ite this x?0 x?1, op.op_name == "if_then_else"], [map_binary op.fn this x, is_Group x], [map_unary (\a op.fn a x) this, true] ] ++ super.oo_binary_table op x; oo_unary_table op = [ [map_unary op.fn this, true] ] ++ super.oo_unary_table op; // we can't call map_trinary directly, since it uses Group and we // don't support mutually recursive top-level functions :-( // copy-paste it here, keep in sync with the version in _stdenv map_nary fn args = fn args, groups == [] = Group (map process [0, 1 .. shortest - 1]) { groups = filter is_Group args; shortest = foldr1 min_pair (map (len @ get_value) groups); process n = NULL, any (map (is_noval n) args) = map_nary fn (map (extract n) args) { extract n arg = arg.value?n, is_Group arg = arg; is_noval n arg = is_Group arg && arg.value?n == NULL; } } // need ite as a true trinary ite a b c = if a then b else c; map_unary fn a = map_nary (list_1ary fn) [a]; map_binary fn a b = map_nary (list_2ary fn) [a, b]; map_trinary fn a b c = map_nary (list_3ary fn) [a, b, c]; } /* Single real number ... eg slider. */ Real value = class _Object { _check_args = [ [value, "value", check_real] ] ++ super._check_args; // methods oo_binary_table op x = [ [this.Real (op.fn this.value x.value), is_Real x && op.type == Operator_type.ARITHMETIC], [this.Real (op.fn this.value x), is_real x && op.type == Operator_type.ARITHMETIC], [op.fn this.value x.value, is_Real x && op.type == Operator_type.RELATIONAL], [op.fn this.value x, !is_class x] ] ++ super.oo_binary_table op x; oo_unary_table op = [ [this.Real (op.fn this.value), op.type == Operator_type.ARITHMETIC], [op.fn this.value, true] ] ++ super.oo_unary_table op; } /* Single bool ... eg Toggle. */ Bool value = class _Object { _check_args = [ [value, "value", check_bool] ] ++ super._check_args; // methods oo_binary_table op x = [ [op.fn this.value x, op.op_name == "if_then_else"], [this.Bool (op.fn this.value x.value), is_Bool x], [this.Bool (op.fn this.value x), is_bool x] ] ++ super.oo_binary_table op x; oo_unary_table op = [ [this.Bool (op.fn this.value), op.type == Operator_type.ARITHMETIC || op.type == Operator_type.RELATIONAL], [op.fn this.value, true] ] ++ super.oo_unary_table op; } /* An editable string. */ String caption value = class _Object { _check_args = [ [caption, "caption", check_string], [value, "value", check_string] ] ++ super._check_args; } /* An editable real number. */ Number caption value = class scope.Real value { _check_args = [ [caption, "caption", check_string] ] ++ super._check_args; Real x = this.Number caption x; } /* An editable expression. */ Expression caption expr = class (if is_class expr then expr else _Object) { _check_args = [ [caption, "caption", check_string], [expr, "expr", check_any] ] ++ super._check_args; } /* A ticking clock. */ Clock interval value = class scope.Real value { _check_args = [ [interval, "interval", check_real] ] ++ super._check_args; Real x = this.Clock interval x; } /* An editable filename. */ Pathname caption value = class _Object { _check_args = [ [caption, "caption", check_string], [value, "value", check_string] ] ++ super._check_args; } /* An editable fontname. */ Fontname caption value = class _Object { _check_args = [ [caption, "caption", check_string], [value, "value", check_string] ] ++ super._check_args; } /* Vector type ... just a finite list of real. Handy for wrapping an * argument to eg. im_lintra_vec. Make it behave like a single pixel image. */ Vector value = class _Object { _check_args = [ [value, "value", check_real_list] ] ++ super._check_args; bands = len value; // methods oo_binary_table op x = [ // Vector ++ Vector means bandwise join [this.Vector (op.fn this.value x.value), is_Vector x && (op.op_name == "join" || op.op_name == "join'")], [this.Vector (op.fn this.value [get_number x]), has_number x && (op.op_name == "join" || op.op_name == "join'")], // Vector ? number means extract element [op.fn this.value (get_real x), has_real x && (op.op_name == "subscript" || op.op_name == "subscript'")], // extra check for lengths equal [this.Vector (map_binaryl op.fn this.value x.value), is_Vector x && len value == len x.value && op.type == Operator_type.ARITHMETIC], [this.Vector (map_binaryl op.fn this.value (get_real x)), has_real x && op.type == Operator_type.ARITHMETIC], // need extra length check [this.Vector (map bool_to_real (map_binaryl op.fn this.value x.value)), is_Vector x && len value == len x.value && op.type == Operator_type.RELATIONAL], [this.Vector (map bool_to_real (map_binaryl op.fn this.value (get_real x))), has_real x && op.type == Operator_type.RELATIONAL], [this.Vector (op.fn this.value x.value), is_Vector x && len value == len x.value && op.type == Operator_type.COMPOUND_REWRAP], [x.Image (vec op'.op_name x.value value), is_Image x], [vec op'.op_name x value, is_image x], [op.fn this.value x, is_real x] ] ++ super.oo_binary_table op x { op' = oo_converse op; }; oo_unary_table op = [ [this.Vector (map_unaryl op.fn this.value), op.type == Operator_type.ARITHMETIC], [this.Vector (map bool_to_real (map_unaryl op.fn this.value)), op.type == Operator_type.RELATIONAL], [this.Vector (op.fn this.value), op.type == Operator_type.COMPOUND_REWRAP], [op.fn this.value, true] ] ++ super.oo_unary_table op; // turn an ip bool (or a number, for Vector) into VIPSs 255/0 bool_to_real x = 255, is_bool x && x = 255, is_number x && x != 0 = 0; } /* A rectangular array of real. */ Matrix_base value = class _Object { _check_args = [ [value, "value", check_matrix] ] ++ super._check_args; // calculate these from value width = len value?0; height = len value; // extract a rectanguar area extract left top width height = this.Matrix_base ((map (take width) @ map (drop left) @ take height @ drop top) value); // methods oo_binary_table op x = [ // mat multiply is special [this.Matrix_base mul.value, is_Matrix x && op.op_name == "multiply"], [this.Matrix_base mul'.value, is_Matrix x && op.op_name == "multiply'"], // mat divide is also special [this.Matrix_base div.value, is_Matrix x && op.op_name == "divide"], [this.Matrix_base div'.value, is_Matrix x && op.op_name == "divide'"], // power -1 means invert [this.Matrix_base inv.value, is_real x && x == -1 && op.op_name == "power"], [this.Matrix_base sq.value, is_real x && x == 2 && op.op_name == "power"], [error "matrix **-1 and **2 only", op.op_name == "power" || op.op_name == "power'"], // matrix op vector ... treat a vector as a 1 row matrix [this.Matrix_base (map (map_binaryl op'.fn x.value) this.value), is_Vector x && op.type == Operator_type.ARITHMETIC], [this.Matrix_base (map_binaryl op.fn this.value x.value), (is_Matrix x || is_Real x) && op.type == Operator_type.ARITHMETIC], [this.Matrix_base (map_binaryl op.fn this.value x), is_real x && op.type == Operator_type.ARITHMETIC], // compound ... don't do iteration [this.Matrix_base (op.fn this.value x.value), (is_Matrix x || is_Real x || is_Vector x) && op.type == Operator_type.COMPOUND_REWRAP] ] ++ super.oo_binary_table op x { mul = im_matmul this x; mul' = im_matmul x this; div = im_matmul this (im_matinv x); div' = im_matmul x (im_matinv this); inv = im_matinv this; sq = im_matmul this this; op' = oo_converse op; } oo_unary_table op = [ [this.Matrix_base (map_unaryl op.fn this.value), op.type == Operator_type.ARITHMETIC], [this.Matrix_base (op.fn this.value), op.type == Operator_type.COMPOUND_REWRAP], [op.fn this.value, true] ] ++ super.oo_unary_table op; } /* How to display a matrix: text, sliders, toggles, or text plus scale/offset. */ Matrix_display = class { text = 0; slider = 1; toggle = 2; text_scale_offset = 3; is_display = member [text, slider, toggle, text_scale_offset]; } /* A matrix as VIPS sees them ... add scale, offset and filename. For nip, add * a display type as well to control how the widget renders. */ Matrix_vips value scale offset filename display = class scope.Matrix_base value { _check_args = [ [scale, "scale", check_real], [offset, "offset", check_real], [filename, "filename", check_string], [display, "display", check_matrix_display] ] ++ super._check_args; Matrix_base x = this.Matrix_vips x scale offset filename display; } /* A plain 'ol matrix which can be passed to VIPS. */ Matrix value = class Matrix_vips value 1 0 "" Matrix_display.text {} /* Specialised constructors ... for convolutions, recombinations and * morphologies. */ Matrix_con scale offset value = class Matrix_vips value scale offset "" Matrix_display.text_scale_offset {}; Matrix_rec value = class Matrix_vips value 1 0 "" Matrix_display.slider {}; Matrix_mor value = class Matrix_vips value 1 0 "" Matrix_display.toggle {}; Matrix_file filename = (im_read_dmask @ expand @ search) filename; /* A CIE colour ... a triple, plus a format (eg XYZ, Lab etc) */ Colour colour_space value = class scope.Vector value { _check_args = [ [colour_space, "colour_space", check_colour_space] ] ++ super._check_args; _check_all = [ [is_list_len 3 value, "len value == 3"] ] ++ super._check_all; Vector x = this.Colour colour_space x; // make a colour-ish thing from an image // back to Colour if we have another 3 band image // to a vector if bands > 1 // to a number otherwise itoc im = this.Colour nip_type (to_matrix im).value?0, bands == 3 = scope.Vector (map mean (bandsplit im)), bands > 1 = mean im { type = get_header "Type" im; bands = get_header "Bands" im; nip_type = Image_type.colour_spaces.lookup 1 0 type; } // methods oo_binary_table op x = [ [itoc (op.fn ((float) (to_image this).value) ((float) (to_image x).value)), // here REWRAP means go via image op.type == Operator_type.COMPOUND_REWRAP] ] ++ super.oo_binary_table op x; oo_unary_table op = [ [itoc (op.fn ((float) (to_image this).value)), op.type == Operator_type.COMPOUND_REWRAP] ] ++ super.oo_unary_table op; } // a subclass with widgets for picking a space and value Colour_picker default_colour default_value = class Colour space.value_name colour.expr { _vislevel = 3; space = Option_enum Image_type.colour_spaces "Colour space" default_colour; colour = Expression "Colour value" default_value; Colour_edit colour_space value = Colour_picker colour_space value; } /* Base scale type. */ Scale caption from to value = class scope.Real value { _check_args = [ [caption, "caption", check_string], [from, "from", check_real], [to, "to", check_real] ] ++ super._check_args; _check_all = [ [from < to, "from < to"] ] ++ super._check_all; Real x = this.Scale caption from to x; // methods oo_binary_table op x = [ [this.Scale caption (op.fn this.from x.from) (op.fn this.to x.to) (op.fn this.value x.value), is_Scale x && op.type == Operator_type.ARITHMETIC], [this.Scale caption (op.fn this.from x) (op.fn this.to x) (op.fn this.value x), is_real x && op.type == Operator_type.ARITHMETIC] ] ++ super.oo_binary_table op x; } /* Base toggle type. */ Toggle caption value = class scope.Bool value { _check_args = [ [caption, "caption", check_string], [value, "value", check_bool] ] ++ super._check_args; Bool x = this.Toggle caption x; } /* Base option type. */ Option caption labels value = class scope.Real value { _check_args = [ [caption, "caption", check_string], [labels, "labels", check_string_list], [value, "value", check_uint] ] ++ super._check_args; } Option_enum enum caption value_name = class Option caption enum.names (index (equal value_name) enum.names) { // corresponding thing value_thing = enum.get_thing value_name; Option_edit caption labels value = this.Option_enum enum caption (enum.names ? value); } /* A rectangle. width and height can be -ve. */ Rect left top width height = class _Object { _check_args = [ [left, "left", check_real], [top, "top", check_real], [width, "width", check_real], [height, "height", check_real] ] ++ super._check_args; // derived right = left + width; bottom = top + height; oo_binary_table op x = [ [equal x, is_Rect x && (op.op_name == "equal" || op.op_name == "equal'")], [!equal x, is_Rect x && (op.op_name == "not_equal" || op.op_name == "not_equal'")], // binops with a complex are the same as (comp op comp) [oo_binary_function op this (Rect (re x) (im x) 0 0), is_complex x], // all others are just pairwise [this.Rect left' top' width' height', is_Rect x && op.type == Operator_type.ARITHMETIC], [this.Rect left'' top'' width'' height'', has_number x && op.type == Operator_type.ARITHMETIC] ] ++ super.oo_binary_table op x { left' = op.fn left x.left; top' = op.fn top x.top; width' = op.fn width x.width; height' = op.fn height x.height; left'' = op.fn left x'; top'' = op.fn top x'; width'' = op.fn width x'; height'' = op.fn height x'; x' = get_number x; } oo_unary_table op = [ // arithmetic uops just map [this.Rect left' top' width' height', op.type == Operator_type.ARITHMETIC], // compound uops are just like ops on complex // do (width, height) so thing like abs(Arrow) work as you'd expect [op.fn (width, height), op.type == Operator_type.COMPOUND] ] ++ super.oo_unary_table op { left' = op.fn left; top' = op.fn top; width' = op.fn width; height' = op.fn height; } // empty? ie. contains no pixels is_empty = width == 0 || height == 0; // normalised version, ie. make width/height +ve and flip the origin nleft = left + width, width < 0 = left; ntop = top + height, height < 0 = top; nwidth = abs width; nheight = abs height; nright = nleft + nwidth; nbottom = ntop + nheight; equal x = left == x.left && top == x.top && width == x.width && height == x.height; // contains a point? includes_point x y = nleft <= x && x <= nright && ntop <= y && y <= nbottom; // contains a rect? just test top left and bottom right points includes_rect r = includes_point r.nleft r.ntop && includes_point r.nright r.nbottom; // bounding box of two rects // if either is empty, can just return the other union r = r, is_empty = this, r.is_empty = Rect left' top' width' height' { left' = min_pair nleft r.nleft; top' = min_pair ntop r.ntop; width' = max_pair nright r.nright - left'; height' = max_pair nbottom r.nbottom - top'; } // intersection of two rects ... empty rect if no intersection intersect r = Rect left' top' width'' height'' { left' = max_pair nleft r.nleft; top' = max_pair ntop r.ntop; width' = min_pair nright r.nright - left'; height' = min_pair nbottom r.nbottom - top'; width'' = width', width > 0 = 0; height'' = height', height > 0 = 0; } // expand/collapse by n pixels margin_adjust n = Rect (left - n) (top - n) (width + 2 * n) (height + 2 * n); } /* Values for Compression field in image. */ Image_compression = class { NONE = 0; NO_COMPRESSION = 0; TCSF_COMPRESSION = 1; JPEG_COMPRESSION = 2; LABPACK_COMPRESSED = 3; RGB_COMPRESSED = 4; LUM_COMPRESSED = 5; } /* Values for Coding field in image. */ Image_coding = class { NONE = 0; NOCODING = 0; COLQUANT = 1; LABPACK = 2; } /* Values for BandFmt field in image. */ Image_format = class { DPCOMPLEX = 9; DOUBLE = 8; COMPLEX = 7; FLOAT = 6; INT = 5; UINT = 4; SHORT = 3; USHORT = 2; CHAR = 1; UCHAR = 0; NOTSET = -1; maxval fmt = [ 255, // UCHAR 127, // CHAR 65535, // USHORT 32767, // SHORT 4294967295, // UINT 2147483647, // INT 255, // FLOAT 255, // COMPLEX 255, // DOUBLE 255 // DPCOMPLEX ] ? fmt, fmt >= 0 && fmt <= DPCOMPLEX = error (_ "bad value for BandFmt"); } /* A lookup table. */ Table value = class _Object { _check_args = [ [value, "value", check_rectangular] ] ++ super._check_args; /* present col x: is there an x in column col */ present col x = member (map (extract col) value) x; /* Look on column from, return matching item in column to. */ lookup from to x = value?n?to, n >= 0 = error (_ "item" ++ " " ++ print x ++ " " ++ _ "not in table") { n = index (equal x) (map (extract from) value); } } /* A two column lookup table with the first column a string and the second a * thing. Used for representing various enums. Option_enum makes a selector * from one of these. */ Enum value = class Table value { _check_args = [ [value, "value", check_enum] ] ++ super._check_args { check_enum = [is_enum, _ "is [[char, *]]"]; is_enum x = is_rectangular x && is_listof is_string (map (extract 0) x); } // handy ... all the names and things as lists names = map (extract 0) value; things = map (extract 1) value; // is a legal name or thing has_name x = this.present 1 x; has_thing x = this.present 0 x; // map things to strings and back get_name x = this.lookup 1 0 x; get_thing x = this.lookup 0 1 x; } /* Type field. */ Image_type = class { MULTIBAND = 0; B_W = 1; LUMINANCE = 2; XRAY = 3; IR = 4; YUV = 5; RED_ONLY = 6; GREEN_ONLY = 7; BLUE_ONLY = 8; POWER_SPECTRUM = 9; HISTOGRAM = 10; LUT = 11; XYZ = 12; LAB = 13; CMC = 14; CMYK = 15; LABQ = 16; RGB = 17; UCS = 18; LCH = 19; LABS = 21; sRGB = 22; YXY = 23; FOURIER = 24; RGB16 = 25; GREY16 = 26; /* Table to get names <-> numbers. */ type_names = Enum [ $MULTIBAND => MULTIBAND, $B_W => B_W, $LUMINANCE => LUMINANCE, $XRAY => XRAY, $IR => IR, $YUV => YUV, $RED_ONLY => RED_ONLY, $GREEN_ONLY => GREEN_ONLY, $BLUE_ONLY => BLUE_ONLY, $POWER_SPECTRUM => POWER_SPECTRUM, $HISTOGRAM => HISTOGRAM, $LUT => LUT, $XYZ => XYZ, $LAB => LAB, $CMC => CMC, $CMYK => CMYK, $LABQ => LABQ, $RGB => RGB, $UCS => UCS, $LCH => LCH, $LABS => LABS, $sRGB => sRGB, $YXY => YXY, $FOURIER => FOURIER, $RGB16 => RGB16, $GREY16 => GREY16 ]; /* Table relating nip's colour space names and VIPS's Type numbers. * Options generated from this, so match the order to the order in the * Colour menu. */ colour_spaces = Enum [ $sRGB => sRGB, $Lab => LAB, $LCh => LCH, $XYZ => XYZ, $Yxy => YXY, $UCS => UCS ]; /* A slightly larger table ... the types of colorimetric image we can * have. Add mono, and the S and Q forms of LAB. */ image_colour_spaces = Enum [ $Mono => B_W, $sRGB => sRGB, $RGB16 => RGB16, $GREY16 => GREY16, $Lab => LAB, $LabQ => LABQ, $LabS => LABS, $LCh => LCH, $XYZ => XYZ, $Yxy => YXY, $UCS => UCS ]; } /* Base image type. Simple layer over vips_image. */ Image value = class _Object { _check_args = [ [value, "value", check_image] ] ++ super._check_args; // fields from VIPS header width = get_width value; height = get_height value; bands = get_bands value; format = get_format value; bits = get_bits value; coding = get_coding value; type = get_type value; xres = get_header "Xres" value; yres = get_header "Yres" value; xoffset = get_header "Xoffset" value; yoffset = get_header "Yoffset" value; filename = get_header "filename" value; // convenience ... the area our pixels occupy, as a rect rect = Rect 0 0 width height; // operator overloading // (op Image Vector) done in Vector class oo_binary_table op x = [ // handle image ++ constant here [wrap join_result_image, (has_real x || is_Vector x) && (op.op_name == "join" || op.op_name == "join'")], // image ++ image is slightly different ... we want to // sizealike, but we must not bandalike [wrap (op.fn (get_image resized?0) (get_image resized?1)), has_image x && (op.op_name == "join" || op.op_name == "join'")], [wrap ite_result_image, op.op_name == "if_then_else"], // arithmetic and reational binops between image resize // and band_alike images to match [wrap (op.fn (get_image rebanded?0) (get_image rebanded?1)), has_image x && (op.type == Operator_type.ARITHMETIC || op.type == Operator_type.RELATIONAL)], // other op types don't resize [wrap (op.fn this.value (get_image x)), has_image x], [wrap (op.fn this.value (get_number x)), has_number x], // if it's not a class on the RHS, handle here ... just apply and // rewrap [wrap (op.fn this.value x), !is_class x] // all other cases handled by other classes ] ++ super.oo_binary_table op x { // wrap the result with this // x can be a non-image, eg. compare "Image v == []" vs. "Image v == // 12" wrap x = x, op.type == Operator_type.COMPOUND || !is_image x = this.Image x; join_result_image = value ++ new_stuff, op.op_name == "join" = new_stuff ++ value { new_stuff = image_new width height new_bands format coding Image_type.B_W x xoffset yoffset; new_bands = get_bands x, has_bands x = 1; } [then_part, else_part] = x; // get things about our output from inputs in this order objects = [then_part, else_part, this]; // properties of our output image target_bands = get_member_list has_bands get_bands objects; target_type = get_member_list has_type get_type objects; // if one of then/else is an image, get the target format from that // otherwise, let the non-image objects set the target target_format = get_member_list has_format get_format x, has_member_list has_format x = []; to_image x = x, is_image x = x.value, is_Image x = clip2fmt target_format im, target_format != [] = im { im = im_black width height target_bands + x; } [if_size, then_size, else_size] = size_alike (value : formats_alike (map to_image x)); ite_result_image = image_set_type target_type (if if_size then then_size else else_size); resized = size_alike [this, x]; rebanded = bands_alike resized; } // FIXME ... yuk ... don't use operator hints, just always rewrap if // we have an image result // forced on us by things like abs: // abs Vector -> real // abs Image -> Image // does not fit well with COMPOUND/whatever scheme oo_unary_table op = [ [this.Image result, is_image result], [result, true] ] ++ super.oo_unary_table op { result = op.fn this.value; } } /* Construct an image from a file. */ Image_file filename = class Image value { _check_args = [ [filename, "filename", check_string] ] ++ super._check_args; value = vips_image filename; } Region image left top width height = class Image value { _check_args = [ [image, "Image", check_Image], [left, "left", check_real], [top, "top", check_real], [width, "width", check_preal], [height, "height", check_preal] ] ++ super._check_args; // a rect for our coordinates // region.rect gets the rect for the extracted image region_rect = Rect left top width height; // we need to always succeed ... value is our enclosing image if we're // out of bounds value = extract_area left top width height image.value, image.rect.includes_rect region_rect = image.value; } Area image left top width height = class scope.Region image left top width height { Region image left top width height = this.Area image left top width height; } Arrow image left top width height = class scope.Rect left top width height { _check_args = [ [image, "Image", check_Image], [left, "left", check_real], [top, "top", check_real], [width, "width", check_real], [height, "height", check_real] ] ++ super._check_args; Rect l t w h = this.Arrow image l t w h; } HGuide image top = class scope.Arrow image image.rect.left top image.width 0 { Arrow image left top width height = this.HGuide image top; } VGuide image left = class scope.Arrow image left image.rect.top 0 image.height { Arrow image left top width height = this.VGuide image left; } Mark image left top = class scope.Arrow image left top 0 0 { Arrow image left top width height = this.Mark image left top; } // convenience functions: ... specify position as [0 .. 1) Region_relative image u v w h = Region image (image.width * u) (image.height * v) (image.width * w) (image.height * h); Area_relative image u v w h = Area image (image.width * u) (image.height * v) (image.width * w) (image.height * h); Arrow_relative image u v w h = Arrow image (image.width * u) (image.height * v) (image.width * w) (image.height * h); VGuide_relative image v = VGuide image (image.height * v); HGuide_relative image u = HGuide image (image.width * u); Mark_relative image u v = Mark image (image.width * u) (image.height * v); Interpolate = class { NEAREST_NEIGHBOUR = 0; BILINEAR = 1; BICUBIC = 2; /* Table to map interpol numbers to descriptive strings */ names = Enum [ [_ "Nearest neighbour", NEAREST_NEIGHBOUR], [_ "Bilinear", BILINEAR], [_ "Bicubic", BICUBIC] ]; } Render_intent = class { PERCEPTUAL = 0; RELATIVE = 1; SATURATION = 2; ABSOLUTE = 3; /* Table to get names <-> numbers. */ names = Enum [ [_ "Perceptual", PERCEPTUAL], [_ "Relative", RELATIVE], [_ "Saturation", SATURATION], [_ "Absolute", ABSOLUTE] ]; } // abstract base class for toolkit menus Menu = class {} // a "----" line in a menu Menuseparator = class Menu {} // abstract base class for items in menus Menuitem label tooltip = class Menu {} Menupullright label tooltip = class Menuitem label tooltip {} Menuaction label tooltip = class Menuitem label tooltip {} /* Plots. */ Plot_style = class { POINT = 0; LINE = 1; SPLINE = 2; BAR = 3; names = Enum [ [_ "Point", POINT], [_ "Line", LINE], [_ "Spline", SPLINE], [_ "Bar", BAR] ]; } Plot_format = class { YYYY = 0; XYYY = 1; XYXY = 2; names = Enum [ [_ "YYYY", YYYY], [_ "XYYY", XYXY], [_ "XYXY", XYXY] ]; } Plot_type = class { /* Lots of Ys (ie. multiple line plots). */ YYYY = 0; /* First column of matrix is X position, others are Ys (ie. multiple XY * line plots, all with the same Xes). */ XYYY = 1; /* Many independent XY plots. */ XYXY = 2; } /* "options" is a list of ["key", value] pairs. */ Plot options value = class scope.Image value { Image value = this.Plot options value; } Plot_matrix options value = class Plot options (to_image value).value { } Plot_histogram value = class scope.Plot [] value { } Plot_xy value = class scope.Plot [$format => Plot_format.XYYY] value { } /* A no-value type. Call it NULL for C-alike fun. Used by Group to indicate * empty slots, for example. */ NULL = class _Object { oo_binary_table op x = [ // the only operation we allow is equality .. use pointer equality, // this lets us test a == NULL and a != NULL [this === x, op.type == Operator_type.RELATIONAL && op.op_name == "equal"], [this !== x, op.type == Operator_type.RELATIONAL && op.op_name == "not_equal"] ] ++ super.oo_binary_table op x; } nip2-8.7.0/share/nip2/compat/7.16/Makefile.am0000644000175000017500000000056513224651032015207 00000000000000startdir = $(pkgdatadir)/compat/7.16 start_DATA = \ Math.def \ Image.def \ Colour.def \ Tasks.def \ Object.def \ Filter.def \ Matrix.def \ Widgets.def \ Histogram.def \ Preferences.ws \ _joe_extra.def \ _joe_utilities.def \ _convert.def \ _generate.def \ _list.def \ _predicate.def \ _stdenv.def \ _Object.def \ _types.def EXTRA_DIST = $(start_DATA) nip2-8.7.0/share/nip2/compat/Makefile.am0000644000175000017500000000013013330327276014610 00000000000000SUBDIRS = 7.8 7.9 7.10 7.12 7.14 7.16 7.24 7.26 7.28 7.38 7.40 8.2 8.3 \ 8.4 8.5 8.6 nip2-8.7.0/share/nip2/compat/8.6/0000755000175000017500000000000013350464161013152 500000000000000nip2-8.7.0/share/nip2/compat/8.6/_stdenv.def0000644000175000017500000020305613330327312015214 00000000000000/* optional args to functions */ get_option options defaults f = error (_ "unknown parameter " ++ f), hits == [] = hits?0 { hits = [v :: [n, v] <- options ++ defaults; n == f]; } /* Various operators as functions. */ logical_and a b = a && b; logical_or a b = a || b; bitwise_and a b = a & b; bitwise_or a b = a | b; eor a b = a ^ b; left_shift a b = a << b; right_shift a b = a >> b; not a = !a; less a b = a < b; more a b = a > b; less_equal a b = a <= b; more_equal a b = a >= b; equal a b = a == b; not_equal a b = a != b; pointer_equal a b = a === b; not_pointer_equal a b = a !== b; add a b = a + b; subtract a b = a - b; multiply a b = a * b; divide a b = a / b; idivide a b = (int) ((int) a / (int) b); power a b = a ** b; square x = x * x; remainder a b = a % b; cons a b = a : b; dot a b = a . ( b ); join a b = a ++ b; // 'difference' is defined in _list subscript a b = a ? b; generate s n f = [s, n .. f]; comma r i = (r, i); compose f g = f @ g; // our only trinary operator is actually a binary operator if_then_else a x = if a then x?0 else x?1; cast_unsigned_char x = (unsigned char) x; cast_signed_char x = (signed char) x; cast_unsigned_short x = (unsigned short) x; cast_signed_short x = (signed short) x; cast_unsigned_int x = (unsigned int) x; cast_signed_int x = (signed int) x; cast_float x = (float) x; cast_double x = (double) x; cast_complex x = (complex) x; cast_double_complex x = (double complex) x; unary_minus x = -x; negate x = !x; complement x = ~x; unary_plus x = +x; // the function we call for "a -> v" expressions mksvpair s v = [s, v], is_string s = error "not str on lhs of ->"; // the vector ops ... im is an image, vec is a real_list vec op_name im vec = im_lintra_vec ones im vec, op_name == "add" || op_name == "add'" = im_lintra_vec ones (-1 * im) vec, op_name == "subtract'" = im_lintra_vec ones im inv, op_name == "subtract" = im_lintra_vec vec im zeros, op_name == "multiply" || op_name == "multiply'" = im_lintra_vec vec (1 / im) zeros, op_name == "divide'" = im_lintra_vec recip im zeros, op_name == "divide" = im_expntra_vec im vec, op_name == "power'" = im_powtra_vec im vec, op_name == "power" = im_remainderconst_vec im vec, op_name == "remainder" = im_andimage_vec im vec, op_name == "bitwise_and" || op_name == "bitwise_and'" = im_orimage_vec im vec, op_name == "bitwise_or" || op_name == "bitwise_or'" = im_eorimage_vec im vec, op_name == "eor" || op_name == "eor'" = im_equal_vec im vec, op_name == "equal" || op_name == "equal'" = im_notequal_vec im vec, op_name == "not_equal" || op_name == "not_equal'" = im_less_vec im vec, op_name == "less" = im_moreeq_vec im vec, op_name == "less'" = im_lesseq_vec im vec, op_name == "less_equal" = im_more_vec im vec, op_name == "less_equal'" = error ("unimplemented vector operation: " ++ op_name) { zeros = replicate (len vec) 0; ones = replicate (len vec) 1; recip = map (divide 1) vec; inv = map (multiply (-1)) vec; } // make a name value pair mknvpair n v = [n, v], is_string n = error "not [char] on LHS of =>"; /* Macbeth chart patch names. */ macbeth_names = [ "Dark skin", "Light skin", "Blue sky", "Foliage", "Blue flower", "Bluish green", "Orange", "Purplish blue", "Moderate red", "Purple", "Yellow green", "Orange yellow", "Blue", "Green", "Red", "Yellow", "Magenta", "Cyan", "White (density 0.05)", "Neutral 8 (density 0.23)", "Neutral 6.5 (density 0.44)", "Neutral 5 (density 0.70)", "Neutral 3.5 (density 1.05)", "Black (density 1.50)" ]; bandsplit x = oo_unary_function bandsplit_op x, is_class x = map (subscript x) [0 .. bands - 1], is_image x = error (_ "bad arguments to " ++ "bandsplit") { bands = get_header "Bands" x; bandsplit_op = Operator "bandsplit" (map Image @ bandsplit) Operator_type.COMPOUND false; } bandjoin l = wrapper joined, has_wrapper = joined, is_listof has_image l = error (_ "bad arguments to " ++ "bandjoin") { has_wrapper = has_member_list (has_member "Image") l; wrapper = get_member_list (has_member "Image") (get_member "Image") l; joined = im_gbandjoin (map get_image l); } bandand x = oo_unary_function bandand_op x, is_class x = foldr1 bitwise_and (bandsplit x), is_image x = error (_ "bad arguments to " ++ "bandand") { bandand_op = Operator "bandand" bandand Operator_type.COMPOUND_REWRAP false; } bandor x = oo_unary_function bandor_op x, is_class x = foldr1 bitwise_or (bandsplit x), is_image x = error (_ "bad arguments to " ++ "bandor") { bandor_op = Operator "bandor" bandor Operator_type.COMPOUND_REWRAP false; } sum x = oo_unary_function sum_op x, is_class x = im_avg x * (get_width x) * (get_height x) * (get_bands x), is_image x = sum_list x, is_list x = error (_ "bad arguments (" ++ print x ++ ") to " ++ "sum") { sum_op = Operator "sum" sum Operator_type.COMPOUND false; // add elements in a nested-list thing sum_list l = foldr acc 0 l { acc x total = total + sum x, is_list x = total + x; } } product x = oo_unary_function product_op x, is_class x = product_list x, is_list x // (product image) doesn't make much sense :( = error (_ "bad arguments (" ++ print x ++ ") to " ++ "product") { product_op = Operator "product" product Operator_type.COMPOUND false; product_list l = foldr prod 1 l { prod x total = total * product x, is_list x = total * x; } } mean x = oo_unary_function mean_op x, is_class x = im_avg x, is_image x = mean_list x, is_list x = error (_ "bad arguments (" ++ print x ++ ") to " ++ "mean") { mean_op = Operator "mean" mean Operator_type.COMPOUND false; mean_list l = sum l / size l; // number of elements in some sort of nested-list thing size l = foldr acc 0 l { acc x total = total + size x, is_list x = total + 1; } } meang x = (appl (power e) @ mean @ appl log) x { appl fn x = map fn x, is_list x = fn x; } skew x = oo_unary_function skew_op x, is_class x = sum ((x - m) ** 3) / ((N - 1) * s ** 3), is_image x = sum ((Group x' - m) ** 3).value / ((N - 1) * s ** 3), is_list x = error (_ "bad arguments (" ++ print x ++ ") to " ++ "skew") { skew_op = Operator "skew" skew Operator_type.COMPOUND false; // squash any large matrix down to a flat list ... much simpler x' = x, is_image x; = flatten x; m = mean x'; s = deviation x'; w = get_width x'; h = get_height x'; b = get_bands x'; N = w * h * b, is_image x' = len x'; } kurtosis x = oo_unary_function kurtosis_op x, is_class x = sum ((x - m) ** 4) / ((N - 1) * s ** 4), is_image x = sum ((Group x' - m) ** 4).value / ((N - 1) * s ** 4), is_list x = error (_ "bad arguments (" ++ print x ++ ") to " ++ "kurtosis") { kurtosis_op = Operator "kurtosis" kurtosis Operator_type.COMPOUND false; // squash any large matrix down to a flat list ... much simpler x' = x, is_image x; = flatten x; m = mean x'; s = deviation x'; w = get_width x'; h = get_height x'; b = get_bands x'; N = len x', is_list x'; = w * h * b; } // zero-excluding mean meanze x = oo_unary_function meanze_op x, is_class x = meanze_image_hist x, is_image x && (fmt == Image_format.UCHAR || fmt == Image_format.USHORT) = meanze_image x, is_image x = meanze_list x, is_list x = error (_ "bad arguments (" ++ print x ++ ") to " ++ "meanze") { fmt = get_format x; meanze_op = Operator "meanze" meanze Operator_type.COMPOUND false; meanze_list l = sum l / size l; // number of non-zero elements in some sort of nested-list thing size l = foldr acc 0 l { acc x total = total + size x, is_list x = total + 1, x != 0; = total; } // add elements in a nested-list thing sum l = foldr acc 0 l { acc x total = total + sum x, is_list x = total + x; } // image mean, for any image type meanze_image i = sum / N { w = get_width i; h = get_height i; b = get_bands i; st = stats i; sum = st.value?0?2; // find non-zero pixels (not zero in all bands) zp = im_notequal_vec i (replicate b 0); // number of non-zero pixels N = b * (mean zp * w * h) / 255; } // image mean for 8 and 16-bit unsigned images // we can use a histogram, yay, and save a pass through the image meanze_image_hist i = sum / N { // histogram, knock out zeros hist = hist_find i; black = image_new 1 1 (get_bands hist) (get_format hist) (get_coding hist) (get_type hist) 0 0 0; histze = insert 0 0 black hist; // matching identity iden = im_identity_ushort (get_bands hist) (get_width hist), (get_width hist) > 256 = im_identity (get_bands hist); // number of non-zero pixels N = mean histze * 256; // sum of pixels sum = mean (hist * iden) * 256; } } deviation x = oo_unary_function deviation_op x, is_class x = im_deviate x, is_image x = deviation_list x, is_real_list x || is_matrix x = error (_ "bad arguments to " ++ "deviation") { deviation_op = Operator "deviation" deviation Operator_type.COMPOUND false; deviation_list l = (abs (s2 - (s * s / n)) / (n - 1)) ** 0.5 { [n, s, s2] = sum_sum2_list l; } // return n, sum, sum of squares for a list of reals sum_sum2_list x = foldr accumulate [0, 0, 0] x { accumulate x sofar = [n + 1, x + s, x * x + s2], is_real x = [n + n', s + s', s2 + s2'], is_list x = error "sum_sum2_list: not real or [real]" { [n, s, s2] = sofar; [n', s', s2'] = sum_sum2_list x; } } } deviationze x = oo_unary_function deviationze_op x, is_class x = deviationze_image x, is_image x = deviationze_list x, is_real_list x || is_matrix x = error (_ "bad arguments to " ++ "deviationze") { deviationze_op = Operator "deviationze" deviationze Operator_type.COMPOUND false; deviationze_list l = (abs (s2 - (s * s / n)) / (n - 1)) ** 0.5 { [n, s, s2] = sum_sum2_list l; } // return number of non-zero elements, sum, sum of squares for a list of // reals sum_sum2_list x = foldr accumulate [0, 0, 0] x { accumulate x sofar = sofar, is_real x && x == 0 = [n + 1, x + s, x * x + s2], is_real x = [n + n', s + s', s2 + s2'], is_list x = error "sum_sum2_list: not real or [real]" { [n, s, s2] = sofar; [n', s', s2'] = sum_sum2_list x; } } deviationze_image i = ((sum2 - sum * sum / N) / (N - 1)) ** 0.5 { w = get_width i; h = get_height i; b = get_bands i; st = stats i; sum = st.value?0?2; sum2 = st.value?0?3; // find non-zero pixels (not zero in all bands) zp = im_notequal_vec i (replicate b 0); // number of non-zero pixels N = b * (mean zp * w * h) / 255; } } // find the centre of gravity of a histogram gravity x = oo_unary_function gravity_op x, is_class x = im_hist_gravity x, is_hist x = gravity_list x, is_list x = error (_ "bad arguments to " ++ "gravity") { gravity_op = Operator "gravity" gravity Operator_type.COMPOUND false; // centre of gravity of a histogram... use the histogram to weight an // identity, then sum, then find the mean element im_hist_gravity h = m { // make horizontal h' = rot270 h, get_width h == 1 = h, get_height h == 1 = error "width or height not 1"; // number of elements w = get_width h'; // matching identity i = im_identity_ushort 1 w, w <= 2 ** 16 - 1 = make_xy w 1 ? 0; // weight identity and sum s = mean (i * h') * w; // sum of original histogram s' = mean h * w; // weighted mean m = s / s'; } gravity_list l = m { w = len l; // matching identity i = [0, 1 .. w - 1]; // weight identity and sum s = sum (map2 multiply i l); // sum of original histogram s' = sum l; // weighted mean m = s / s'; } } project x = oo_unary_function project_op x, is_class x = im_project x, is_image x = error (_ "bad arguments to " ++ "project") { project_op = Operator "project" project Operator_type.COMPOUND false; } abs x = oo_unary_function abs_op x, is_class x = im_abs x, is_image x = abs_cmplx x, is_complex x = abs_num x, is_real x = abs_list x, is_real_list x = abs_list (map abs_list x), is_matrix x = error (_ "bad arguments to " ++ "abs") { abs_op = Operator "abs" abs Operator_type.COMPOUND false; abs_list l = (sum (map square l)) ** 0.5; abs_num n = n, n >= 0 = -n; abs_cmplx c = ((re c)**2 + (im c)**2) ** 0.5; } copy x = oo_unary_function copy_op x, is_class x = im_copy x, is_image x = x { copy_op = Operator "copy" copy Operator_type.COMPOUND_REWRAP false; } // like abs, but treat pixels as vectors ... ie. always get a 1-band image // back ... also treat matricies as lists of vectors // handy for dE from object difference abs_vec x = oo_unary_function abs_vec_op x, is_class x = abs_vec_image x, is_image x = abs_vec_cmplx x, is_complex x = abs_vec_num x, is_real x = abs_vec_list x, is_real_list x = mean (map abs_vec_list x), is_matrix x = error (_ "bad arguments to " ++ "abs_vec") { abs_vec_op = Operator "abs_vec" abs_vec Operator_type.COMPOUND false; abs_vec_list l = (sum (map square l)) ** 0.5; abs_vec_num n = n, n >= 0 = -n; abs_vec_cmplx c = ((re c)**2 + (im c)**2) ** 0.5; abs_vec_image im = (sum (map square (bandsplit im))) ** 0.5; } transpose x = oo_unary_function transpose_op x, is_class x = transpose_image x, is_image x = transpose_list x, is_listof is_list x = error (_ "bad arguments to " ++ "transpose") { transpose_op = Operator "transpose" transpose Operator_type.COMPOUND_REWRAP false; transpose_list l = [], l' == [] = (map hd l') : (transpose_list (map tl l')) { l' = takewhile (not_equal []) l; } transpose_image = im_flipver @ im_rot270; } rot45 x = oo_unary_function rot45_op x, is_class x = error "rot45 image: not implemented", is_image x = error (_ "bad arguments to " ++ "rot45") { rot45_op = Operator "rot45" rot45_object Operator_type.COMPOUND_REWRAP false; rot45_object x = rot45_matrix x, is_odd_square_matrix x = error "rot45 image: not implemented", is_image x = error (_ "bad arguments to " ++ "rot45"); // slow, but what the heck rot45_matrix l = (im_rotate_dmask45 (Matrix l)).value; } // apply an image function to a [[real]] ... matrix is converted to a 1 band // image for processing apply_matrix_as_image fn m = (get_value @ im_vips2mask @ fn @ im_mask2vips @ Matrix) m; // a general image/matrix operation where the mat version is most easily done // by converting mat->image->mat apply_matim_operation name fn x = oo_unary_function class_op x, is_class x = fn x, is_image x = apply_matrix_as_image fn x, is_matrix x = error (_ "bad arguments to " ++ name) { class_op = Operator name (apply_matim_operation name fn) Operator_type.COMPOUND_REWRAP false; } rot90 = apply_matim_operation "rot90" im_rot90; rot180 = apply_matim_operation "rot180" im_rot180; rot270 = apply_matim_operation "rot270" im_rot270; rotquad = apply_matim_operation "rotquad" im_rotquad; fliplr = apply_matim_operation "fliplr" im_fliphor; fliptb = apply_matim_operation "flipud" im_flipver; image_set_type type x = oo_unary_function image_set_type_op x, is_class x = im_copy_set x (to_real type) (get_header "Xres" x) (get_header "Yres" x) (get_header "Xoffset" x) (get_header "Yoffset" x), is_image x = error (_ "bad arguments to " ++ "image_set_type:" ++ print type ++ " " ++ print x) { image_set_type_op = Operator "image_set_type" (image_set_type type) Operator_type.COMPOUND_REWRAP false; } image_set_origin xoff yoff x = oo_unary_function image_set_origin_op x, is_class x = im_copy_set x (get_header "Type" x) (get_header "Xres" x) (get_header "Yres" x) (to_real xoff) (to_real yoff), is_image x = error (_ "bad arguments to " ++ "image_set_origin") { image_set_origin_op = Operator "image_set_origin" (image_set_origin xoff yoff) Operator_type.COMPOUND_REWRAP false; } cache tile_width tile_height max_tiles x = oo_unary_function cache_op x, is_class x = im_tile_cache_random x (to_real tile_width) (to_real tile_height) (to_real max_tiles), is_image x = error (_ "bad arguments to " ++ "cache") { cache_op = Operator "cache" (cache tile_width tile_height max_tiles) Operator_type.COMPOUND_REWRAP false; } tile across down x = oo_unary_function tile_op x, is_class x = im_replicate x (to_real across) (to_real down), is_image x = error (_ "bad arguments to " ++ "tile") { tile_op = Operator "tile" (tile across down) Operator_type.COMPOUND_REWRAP false; } grid tile_height across down x = oo_unary_function grid_op x, is_class x = im_grid x (to_real tile_height) (to_real across) (to_real down), is_image x = error (_ "bad arguments to " ++ "grid") { grid_op = Operator "grid" (grid tile_height across down) Operator_type.COMPOUND_REWRAP false; } max_pair a b = a, a > b = b; min_pair a b = a, a < b = b; range min value max = min_pair max (max_pair min value); max x = oo_unary_function max_op x, is_class x = im_max x, is_image x = max_list x, is_list x = x, is_number x = error (_ "bad arguments to " ++ "max") { max_op = Operator "max" max Operator_type.COMPOUND false; max_list x = error "max []", x == [] = foldr1 max_pair x, is_real_list x = foldr1 max_pair (map max_list x), is_list x = max x; } min x = oo_unary_function min_op x, is_class x = im_min x, is_image x = min_list x, is_list x = x, is_number x = error (_ "bad arguments to " ++ "min") { min_op = Operator "min" min Operator_type.COMPOUND false; min_list x = error "min []", x == [] = foldr1 min_pair x, is_real_list x = foldr1 min_pair (map min_list x), is_list x = min x; } maxpos x = oo_unary_function maxpos_op x, is_class x = im_maxpos x, is_image x = maxpos_matrix x, is_matrix x = maxpos_list x, is_list x = error (_ "bad arguments to " ++ "maxpos") { maxpos_op = Operator "maxpos" maxpos Operator_type.COMPOUND false; maxpos_matrix m = (-1, -1), m == [[]] = (indexes?row, row) { max_value = max (Matrix m); indexes = map (index (equal max_value)) m; row = index (not_equal (-1)) indexes; } maxpos_list l = -1, l == [] = index (equal (max l)) l; } minpos x = oo_unary_function minpos_op x, is_class x = im_minpos x, is_image x = minpos_matrix x, is_matrix x = minpos_list x, is_list x = error (_ "bad arguments to " ++ "minpos") { minpos_op = Operator "minpos" minpos Operator_type.COMPOUND false; minpos_matrix m = (-1, -1), m == [[]] = (indexes?row, row) { min_value = min (Matrix m); indexes = map (index (equal min_value)) m; row = index (not_equal (-1)) indexes; } minpos_list l = -1, l == [] = index (equal (min l)) l; } stats x = oo_unary_function stats_op x, is_class x = im_stats x, is_image x = im_stats (to_image x).value, is_matrix x = error (_ "bad arguments to " ++ "stats") { stats_op = Operator "stats" stats Operator_type.COMPOUND false; } e = 2.7182818284590452354; pi = 3.14159265358979323846; rad d = 2 * pi * (d / 360); deg r = 360 * r / (2 * pi); sign x = oo_unary_function sign_op x, is_class x = im_sign x, is_image x = sign_cmplx x, is_complex x = sign_num x, is_real x = error (_ "bad arguments to " ++ "sign") { sign_op = Operator "sign" sign Operator_type.COMPOUND_REWRAP false; sign_num n = 0, n == 0 = 1, n > 0 = -1; sign_cmplx c = (0, 0), mod == 0 = (re c / mod, im c / mod) { mod = abs c; } } rint x = oo_unary_function rint_op x, is_class x = im_rint x, is_image x = rint_value x, is_number x = error (_ "bad arguments to " ++ "rint") { rint_op = Operator "rint" rint Operator_type.ARITHMETIC false; rint_value x = (int) (x + 0.5), x > 0 = (int) (x - 0.5); } scale x = oo_unary_function scale_op x, is_class x = (unsigned char) x, is_number x = im_scale x, is_image x = scale_list x, is_real_list x || is_matrix x = error (_ "bad arguments to " ++ "scale") { scale_op = Operator "scale" scale Operator_type.COMPOUND_REWRAP false; scale_list l = apply_scale s o l { mn = find_limit min_pair l; mx = find_limit max_pair l; s = 255.0 / (mx - mn); o = -(mn * s); } find_limit fn l = find_limit fn (map (find_limit fn) l), is_listof is_list l = foldr1 fn l; apply_scale s o x = x * s + o, is_number x = map (apply_scale s o) x; } scaleps x = oo_unary_function scale_op x, is_class x = im_scaleps x, is_image x = error (_ "bad arguments to " ++ "scale") { scale_op = Operator "scaleps" scaleps Operator_type.COMPOUND_REWRAP false; } fwfft x = oo_unary_function fwfft_op x, is_class x = im_fwfft x, is_image x = error (_ "bad arguments to " ++ "fwfft") { fwfft_op = Operator "fwfft" fwfft Operator_type.COMPOUND_REWRAP false; } invfft x = oo_unary_function invfft_op x, is_class x = im_invfftr x, is_image x = error (_ "bad arguments to " ++ "invfft") { invfft_op = Operator "invfft" invfft Operator_type.COMPOUND_REWRAP false; } falsecolour x = oo_unary_function falsecolour_op x, is_class x = image_set_type Image_type.sRGB (im_falsecolour x), is_image x = error (_ "bad arguments to " ++ "falsecolour") { falsecolour_op = Operator "falsecolour" falsecolour Operator_type.COMPOUND_REWRAP false; } polar x = oo_unary_function polar_op x, is_class x = im_c2amph x, is_image x = polar_cmplx x, is_complex x = error (_ "bad arguments to " ++ "polar") { polar_op = Operator "polar" polar Operator_type.COMPOUND false; polar_cmplx r = (l, a) { a = 270, x == 0 && y < 0 = 90, x == 0 && y >= 0 = 360 + atan (y / x), x > 0 && y < 0 = atan (y / x), x > 0 && y >= 0 = 180 + atan (y / x); l = (x ** 2 + y ** 2) ** 0.5; x = re r; y = im r; } } rectangular x = oo_unary_function rectangular_op x, is_class x = im_c2rect x, is_image x = rectangular_cmplx x, is_complex x = error (_ "bad arguments to " ++ "rectangular") { rectangular_op = Operator "rectangular" rectangular Operator_type.COMPOUND false; rectangular_cmplx p = (x, y) { l = re p; a = im p; x = l * cos a; y = l * sin a; } } // we can't use colour_unary: that likes 3 band only recomb matrix x = oo_unary_function recomb_op x, is_class x = im_recomb x matrix, is_image x = recomb_real_list x, is_real_list x = map recomb_real_list x, is_matrix x = error (_ "bad arguments to " ++ "recomb") { // COMPOUND_REWRAP ... signal to the colour class to go to image and // back recomb_op = Operator "recomb" (recomb matrix) Operator_type.COMPOUND_REWRAP false; // process [1,2,3 ..] as an image recomb_real_list l = (to_matrix im').value?0 { im = (float) (to_image (Vector l)).value; im' = recomb matrix im; } } extract_area x y w h obj = oo_unary_function extract_area_op obj, is_class obj = im_extract_area obj x' y' w' h', is_image obj = map (extract_range x' w') (extract_range y' h' obj), is_matrix obj = error (_ "bad arguments to " ++ "extract_area") { x' = to_real x; y' = to_real y; w' = to_real w; h' = to_real h; extract_area_op = Operator "extract_area" (extract_area x y w h) Operator_type.COMPOUND_REWRAP false; extract_range from length list = (take length @ drop from) list; } extract_band b obj = subscript obj b; extract_row y obj = oo_unary_function extract_row_op obj, is_class obj = extract_area 0 y' (get_width obj) 1 obj, is_image obj = [obj?y'], is_matrix obj = error (_ "bad arguments to " ++ "extract_row") { y' = to_real y; extract_row_op = Operator "extract_row" (extract_row y) Operator_type.COMPOUND_REWRAP false; } extract_column x obj = oo_unary_function extract_column_op obj, is_class obj = extract_area x' 0 1 height obj, is_image obj = map (\row [row?x']) obj, is_matrix obj = error (_ "bad arguments to " ++ "extract_column") { x' = to_real x; height = get_header "Ysize" obj; extract_column_op = Operator "extract_column" (extract_column x) Operator_type.COMPOUND_REWRAP false; } blend cond in1 in2 = oo_binary_function blend_op cond [in1,in2], is_class cond = im_blend (get_image cond) (get_image in1) (get_image in2), has_image cond && has_image in1 && has_image in2 = error (_ "bad arguments to " ++ "blend" ++ ": " ++ join_sep ", " (map print [cond, in1, in2])) { blend_op = Operator "blend" blend_obj Operator_type.COMPOUND_REWRAP false; blend_obj cond x = blend_result_image { [then_part, else_part] = x; // get things about our output from inputs in this order objects = [then_part, else_part, cond]; // properties of our output image target_width = get_member_list has_width get_width objects; target_height = get_member_list has_height get_height objects; target_bands = get_member_list has_bands get_bands objects; target_format = get_member_list has_format get_format objects; target_type = get_member_list has_type get_type objects; to_image x = to_image_size target_width target_height target_bands target_format x; [then_image, else_image] = map to_image [then_part, else_part]; blend_result_image = image_set_type target_type (im_blend cond then_image else_image); } } // do big first: we want to keep big's class, if possible // eg. big is a Plot, small is a 1x1 Image insert x y small big = oo_binary'_function insert_op small big, is_class big = oo_binary_function insert_op small big, is_class small = im_insert big small (to_real x) (to_real y), is_image small && is_image big = error (_ "bad arguments to " ++ "insert") { insert_op = Operator "insert" (insert x y) Operator_type.COMPOUND_REWRAP false; } insert_noexpand x y small big = oo_binary_function insert_noexpand_op small big, is_class small = oo_binary'_function insert_noexpand_op small big, is_class big = im_insert_noexpand big small (to_real x) (to_real y), is_image small && is_image big = error (_ "bad arguments to " ++ "insert_noexpand") { insert_noexpand_op = Operator "insert_noexpand" (insert_noexpand x y) Operator_type.COMPOUND_REWRAP false; } decode im = oo_unary_function decode_op im, is_class im = decode_im im, is_image im = error (_ "bad arguments to " ++ "decode") { decode_op = Operator "decode" decode Operator_type.COMPOUND_REWRAP false; decode_im im = im_LabQ2Lab im, get_coding im == Image_coding.LABPACK = im_rad2float im, get_coding im == Image_coding.RAD = im; } measure_draw across down measure image = mark { patch_width = image.width / across; sample_width = patch_width * (measure / 100); left_margin = (patch_width - sample_width) / 2; patch_height = image.height / down; sample_height = patch_height * (measure / 100); top_margin = (patch_height - sample_height) / 2; cods = [[x * patch_width + left_margin, y * patch_height + top_margin] :: y <- [0 .. down - 1]; x <- [0 .. across - 1]]; x = map (extract 0) cods; y = map (extract 1) cods; outer = mkim [$pixel => 255] sample_width sample_height 1; inner = mkim [] (sample_width - 4) (sample_height - 4) 1; patch = insert 2 2 inner outer; bg = mkim [] image.width image.height 1; mask = Image (im_insertset bg.value patch.value x y); image' = colour_transform_to Image_type.sRGB image; mark = if mask then Vector [0, 255, 0] else image'; } measure_sample across down measure image = measures { patch_width = image.width / across; sample_width = patch_width * (measure / 100); left_margin = (patch_width - sample_width) / 2; patch_height = image.height / down; sample_height = patch_height * (measure / 100); top_margin = (patch_height - sample_height) / 2; cods = [[x * patch_width + left_margin, y * patch_height + top_margin] :: y <- [0 .. down - 1]; x <- [0 .. across - 1]]; image' = decode image; patches = map (\p extract_area p?0 p?1 sample_width sample_height image') cods; measures = Matrix (map (map mean) (map bandsplit patches)); } extract_bands b n obj = oo_unary_function extract_bands_op obj, is_class obj = im_extract_bands obj (to_real b) (to_real n), is_image obj = error (_ "bad arguments to " ++ "extract_bands") { extract_bands_op = Operator "extract_bands" (extract_bands b n) Operator_type.COMPOUND_REWRAP false; } invert x = oo_unary_function invert_op x, is_class x = im_invert x, is_image x = 255 - x, is_real x = error (_ "bad arguments to " ++ "invert") { invert_op = Operator "invert" invert Operator_type.COMPOUND false; } transform ipol wrap params image = oo_unary_function transform_op image, is_class image = im_transform image (to_matrix params) (to_real ipol) (to_real wrap), is_image image = error (_ "bad arguments to " ++ "transform") { transform_op = Operator "transform" (transform ipol wrap params) Operator_type.COMPOUND_REWRAP false; } transform_search max_error max_iterations order ipol wrap sample reference = oo_binary_function transform_search_op sample reference, is_class sample = oo_binary'_function transform_search_op sample reference, is_class reference = im_transform_search sample reference (to_real max_error) (to_real max_iterations) (to_real order) (to_real ipol) (to_real wrap), is_image sample && is_image reference = error (_ "bad arguments to " ++ "transform_search") { transform_search_op = Operator "transform_search" (transform_search max_error max_iterations order ipol wrap) Operator_type.COMPOUND false; } rotate interp angle image = oo_binary_function rotate_op angle image, is_class angle = oo_binary'_function rotate_op angle image, is_class image = im_affinei_all image interp.value a (-b) b a 0 0, is_real angle && is_image image = error (_ "bad arguments to " ++ "rotate") { rotate_op = Operator "rotate" (rotate interp) Operator_type.COMPOUND_REWRAP false; a = cos angle; b = sin angle; } matrix_binary fn a b = itom (fn (mtoi a) (mtoi b)) { mtoi x = im_mask2vips (Matrix x); itom x = (im_vips2mask x).value; } join_lr a b = oo_binary_function join_lr_op a b, is_class a = oo_binary'_function join_lr_op a b, is_class b = join_im a b, is_image a && is_image b = matrix_binary join_im a b, is_matrix a && is_matrix b = error (_ "bad arguments to " ++ "join_lr") { join_lr_op = Operator "join_lr" join_lr Operator_type.COMPOUND_REWRAP false; join_im a b = insert (get_width a) 0 b a; } join_tb a b = oo_binary_function join_tb_op a b, is_class a = oo_binary'_function join_tb_op a b, is_class b = join_im a b, is_image a && is_image b = matrix_binary join_im a b, is_matrix a && is_matrix b = error (_ "bad arguments to " ++ "join_tb") { join_tb_op = Operator "join_tb" join_tb Operator_type.COMPOUND_REWRAP false; join_im a b = insert 0 (get_height a) b a; } conj x = oo_unary_function conj_op x, is_class x = (re x, -im x), is_complex x || (is_image x && format == Image_format.COMPLEX) || (is_image x && format == Image_format.DPCOMPLEX) // assume it's some sort of real = x { format = get_header "BandFmt" x; conj_op = Operator "conj" conj Operator_type.COMPOUND false; } clip2fmt format image = oo_unary_function clip2fmt_op image, is_class image = im_clip2fmt image (to_real format), is_image image = error (_ "bad arguments to " ++ "clip2fmt") { clip2fmt_op = Operator "clip2fmt" (clip2fmt format) Operator_type.COMPOUND_REWRAP false; } embed type x y w h im = oo_unary_function embed_op im, is_class im = im_embed im (to_real type) (to_real x) (to_real y) (to_real w) (to_real h), is_image im = error (_ "bad arguments to " ++ "embed") { embed_op = Operator "embed" (embed type x y w h) Operator_type.COMPOUND_REWRAP false; } /* Morph a mask with a [[real]] matrix ... turn m2 into an image, morph it * with m1, turn it back to a matrix again. */ _morph_2_masks fn m1 m2 = m'' { // The [[real]] can contain 128 values ... squeeze them out! image = im_mask2vips (Matrix m2) == 255; m2_width = get_width image; m2_height = get_height image; // need to embed m2 in an image large enough for us to be able to // position m1 all around the edges, with a 1 pixel overlap image' = embed 0 (m1.width / 2) (m1.height / 2) (m2_width + (m1.width - 1)) (m2_height + (m1.height - 1)) image; // morph! image'' = fn m1 image'; // back to mask m' = im_vips2mask ((double) image''); // Turn 0 in output to 128 (don't care). m'' = map (map fn) m'.value { fn a = 128, a == 0; = a; } } dilate mask image = oo_unary_function dilate_op image, is_class image = im_dilate image (to_matrix mask), is_image image = error (_ "bad arguments to " ++ "dilate") { dilate_op = Operator "dilate" dilate_object Operator_type.COMPOUND_REWRAP false; dilate_object x = _morph_2_masks dilate mask x, is_matrix x = dilate mask x; } erode mask image = oo_unary_function erode_op image, is_class image = im_erode image (to_matrix mask), is_image image = error (_ "bad arguments to " ++ "erode") { erode_op = Operator "erode" erode_object Operator_type.COMPOUND_REWRAP false; erode_object x = _morph_2_masks erode mask x, is_matrix x = erode mask x; } conv mask image = oo_unary_function conv_op image, is_class image = im_conv image (to_matrix mask), is_image image = error (_ "bad arguments to " ++ "conv" ++ ": " ++ "conv (" ++ print mask ++ ") (" ++ print image ++ ")") { conv_op = Operator "conv" (conv mask) Operator_type.COMPOUND_REWRAP false; } convf mask image = oo_unary_function convf_op image, is_class image = im_conv_f image (to_matrix mask), is_image image = error (_ "bad arguments to " ++ "convf" ++ ": " ++ "convf (" ++ print mask ++ ") (" ++ print image ++ ")") { convf_op = Operator "convf" (convf mask) Operator_type.COMPOUND_REWRAP false; } convsep mask image = oo_unary_function convsep_op image, is_class image = im_convsep image (to_matrix mask), is_image image = error (_ "bad arguments to " ++ "convsep") { convsep_op = Operator "convsep" (convsep mask) Operator_type.COMPOUND_REWRAP false; } aconvsep layers mask image = oo_unary_function aconvsep_op image, is_class image = im_aconvsep image (to_matrix mask) (to_real layers), is_image image = error (_ "bad arguments to " ++ "aconvsep") { aconvsep_op = Operator "aconvsep" (aconvsep layers mask) Operator_type.COMPOUND_REWRAP false; } convsepf mask image = oo_unary_function convsepf_op image, is_class image = im_convsep_f image (to_matrix mask), is_image image = error (_ "bad arguments to " ++ "convsepf") { convsepf_op = Operator "convsepf" (convsepf mask) Operator_type.COMPOUND_REWRAP false; } rank w h n image = oo_unary_function rank_op image, is_class image = im_rank image (to_real w) (to_real h) (to_real n), is_image image = error (_ "bad arguments to " ++ "rank") { rank_op = Operator "rank" (rank w h n) Operator_type.COMPOUND_REWRAP false; } rank_image n x = rlist x.value, is_Group x = rlist x, is_list x = error (_ "bad arguments to " ++ "rank_image") { rlist l = wrapper ranked, has_wrapper = ranked { has_wrapper = has_member_list (has_member "Image") l; wrapper = get_member_list (has_member "Image") (get_member "Image") l; ranked = im_rank_image (map get_image l) (to_real n); } } // find the correlation surface for a small image within a big one correlate small big = oo_binary_function correlate_op small big, is_class small = oo_binary'_function correlate_op small big, is_class big = im_spcor big small, is_image small && is_image big = error (_ "bad arguments to " ++ "correlate") { correlate_op = Operator "correlate" correlate Operator_type.COMPOUND_REWRAP false; } // just sum-of-squares-of-differences correlate_fast small big = oo_binary_function correlate_fast_op small big, is_class small = oo_binary'_function correlate_fast_op small big, is_class big = im_fastcor big small, is_image small && is_image big = error (_ "bad arguments to " ++ "correlate_fast") { correlate_fast_op = Operator "correlate_fast" correlate_fast Operator_type.COMPOUND_REWRAP false; } // set Type, wrap as Plot_hist if it's a class hist_tag x = oo_unary_function hist_tag_op x, is_class x = image_set_type Image_type.HISTOGRAM x, is_image x = error (_ "bad arguments to " ++ "hist_tag") { hist_tag_op = Operator "hist_tag" (Plot_histogram @ hist_tag) Operator_type.COMPOUND false; } hist_find x = oo_unary_function hist_find_op x, is_class x = im_histgr x (-1), is_image x = error (_ "bad arguments to " ++ "hist_find") { hist_find_op = Operator "hist_find" (Plot_histogram @ hist_find) Operator_type.COMPOUND false; } hist_find_nD bins image = oo_unary_function hist_find_nD_op image, is_class image = im_histnD image (to_real bins), is_image image = error (_ "bad arguments to " ++ "hist_find_nD") { hist_find_nD_op = Operator "hist_find_nD" (hist_find_nD bins) Operator_type.COMPOUND_REWRAP false; } hist_find_indexed mode index value = oo_binary_function hist_find_indexed_op index value, is_class index = oo_binary'_function hist_find_indexed_op index value, is_class value = indexed index value, is_image index && is_image value = error (_ "bad arguments to " ++ "hist_find_indexed") { hist_find_indexed_op = Operator "hist_find_indexed" (compose (compose Plot_histogram) (hist_find_indexed mode)) Operator_type.COMPOUND false; indexed index value = out { [out] = vips_call "hist_find_indexed" [value, index] [ "combine" => mode ]; } } hist_entropy x = oo_unary_function hist_entropy_op x, is_class x = entropy x, is_image x = error (_ "bad arguments to " ++ "hist_entropy") { hist_entropy_op = Operator "hist_entropy" hist_entropy Operator_type.COMPOUND_REWRAP false; entropy x = out { [out] = vips_call "hist_entropy" [x] [ ]; } } hist_map hist image = oo_binary_function hist_map_op hist image, is_class hist = oo_binary'_function hist_map_op hist image, is_class image = im_maplut image hist, is_image hist && is_image image = error (_ "bad arguments to " ++ "hist_map") { // can't use rewrap, as we want to always wrap as image hist_map_op = Operator "hist_map" (compose (compose Image) hist_map) Operator_type.COMPOUND false; } hist_cum hist = oo_unary_function hist_cum_op hist, is_class hist = im_histcum hist, is_image hist = error (_ "bad arguments to " ++ "hist_cum") { hist_cum_op = Operator "hist_cum" hist_cum Operator_type.COMPOUND_REWRAP false; } hist_diff hist = oo_unary_function hist_diff_op hist, is_class hist = im_histdiff hist, is_image hist = error (_ "bad arguments to " ++ "hist_diff") { hist_diff_op = Operator "hist_diff" hist_diff Operator_type.COMPOUND_REWRAP false; im_histdiff h = (conv (Matrix [[-1, 1]]) @ clip2fmt (fmt (get_format h))) h { // up the format so it can represent the whole range of // possible values from this mask fmt x = Image_format.SHORT, x == Image_format.UCHAR || x == Image_format.CHAR = Image_format.INT, x == Image_format.USHORT || x == Image_format.SHORT || x == Image_format.UINT = x; } } hist_norm hist = oo_unary_function hist_norm_op hist, is_class hist = im_histnorm hist, is_image hist = error (_ "bad arguments to " ++ "hist_norm") { hist_norm_op = Operator "hist_norm" hist_norm Operator_type.COMPOUND_REWRAP false; } hist_inv hist = oo_unary_function hist_inv_op hist, is_class hist = inv hist, is_image hist = error (_ "bad arguments to " ++ "hist_inv") { hist_inv_op = Operator "hist_inv" hist_inv Operator_type.COMPOUND_REWRAP false; inv im = im_invertlut (to_matrix im''') len { // need a vertical doublemask im' = rot90 im, get_width im > 1 && get_height im == 1 = im, get_width im == 1 && get_height im > 1 = error (_ "not a hist"); len = get_height im'; // values must be scaled to 0 - 1 im'' = im' / (max im'); // add an index column on the left // again, must be in 0-1 y = ((make_xy 1 len)?1) / len; im''' = y ++ im''; } } hist_match in ref = oo_binary_function hist_match_op in ref, is_class in = oo_binary'_function hist_match_op in ref, is_class ref = im_histspec in ref, is_image in && is_image ref = error (_ "bad arguments to " ++ "hist_match") { hist_match_op = Operator "hist_match" hist_match Operator_type.COMPOUND_REWRAP false; } hist_equalize x = hist_map ((hist_norm @ hist_cum @ hist_find) x) x; hist_equalize_local w h l image = oo_unary_function hist_equalize_local_op image, is_class image = out, is_image image = error (_ "bad arguments to " ++ "hist_equalize_local") { hist_equalize_local_op = Operator "hist_equalize_local" (hist_equalize_local w h l) Operator_type.COMPOUND_REWRAP false; [out] = vips_call "hist_local" [image, to_real w, to_real h] [$max_slope => to_real l]; } // find the threshold below which are percent of the image (percent in [0,1]) // eg. hist_thresh 0.1 x == 12, then x < 12 will light up 10% of the pixels hist_thresh percent image = x { // our own normaliser ... we don't want to norm channels separately // norm to [0,1] my_hist_norm h = h / max h; // normalised cumulative hist // we sum the channels before we normalise, because we want to treat them // all the same h = (my_hist_norm @ sum @ bandsplit @ hist_cum @ hist_find) image.value; // threshold that, then use im_profile to search for the x position in the // histogram x = mean (im_profile (h > percent) 1); } /* Sometimes useful, despite plotting now being built in, for making * diagnostic images. */ hist_plot hist = oo_unary_function hist_plot_op hist, is_class hist = im_histplot hist, is_image hist = error (_ "bad arguments to " ++ "hist_plot") { hist_plot_op = Operator "hist_plot" (Image @ hist_plot) Operator_type.COMPOUND false; } zerox d x = oo_unary_function zerox_op x, is_class x = im_zerox x (to_real d), is_image x = error (_ "bad arguments to " ++ "zerox") { zerox_op = Operator "zerox" (zerox d) Operator_type.COMPOUND_REWRAP false; } reduce kernel xshr yshr image = oo_unary_function reduce_op image, is_class image = reduce_im image, is_image image = error (_ "bad arguments to " ++ "reduce") { reduce_op = Operator "reduce" reduce_im Operator_type.COMPOUND_REWRAP false; reduce_im im = out { [out] = vips_call "reduce" [im, xshr, yshr] [$kernel => kernel.value]; } } similarity interpolate scale angle image = oo_unary_function similarity_op image, is_class image = similarity_im image, is_image image = error (_ "bad arguments to " ++ "similarity") { similarity_op = Operator "similarity" similarity_im Operator_type.COMPOUND_REWRAP false; similarity_im im = out { [out] = vips_call "similarity" [im] [ $interpolate => interpolate.value, $scale => scale, $angle => angle ]; } } resize kernel xfac yfac image = oo_unary_function resize_op image, is_class image = resize_im image, is_image image = error (_ "bad arguments to " ++ "resize") { resize_op = Operator "resize" resize_im Operator_type.COMPOUND_REWRAP false; xfac' = to_real xfac; yfac' = to_real yfac; rxfac' = 1 / xfac'; ryfac' = 1 / yfac'; is_nn = kernel.type == Kernel_type.NEAREST_NEIGHBOUR; resize_im im // upscale by integer factor, nearest neighbour = im_zoom im xfac' yfac', is_int xfac' && is_int yfac' && xfac' >= 1 && yfac' >= 1 && is_nn // downscale by integer factor, nearest neighbour = im_subsample im rxfac' ryfac', is_int rxfac' && is_int ryfac' && rxfac' >= 1 && ryfac' >= 1 && is_nn // everything else ... we just pass on to vips_resize() = vips_resize kernel xfac' yfac' im { vips_resize kernel hscale vscale im = out { [out] = vips_call "resize" [im, hscale] [$vscale => vscale, $kernel => kernel.value]; } } } sharpen radius x1 y2 y3 m1 m2 in = oo_unary_function sharpen_op in, is_class in = im_sharpen in (to_real radius) (to_real x1) (to_real y2) (to_real y3) (to_real m1) (to_real m2), is_image in = error (_ "bad arguments to " ++ "sharpen") { sharpen_op = Operator "sharpen" (sharpen radius x1 y2 y3 m1 m2) Operator_type.COMPOUND_REWRAP false; } tone_analyse s m h sa ma ha in = oo_unary_function tone_analyse_op in, is_class in = im_tone_analyse in (to_real s) (to_real m) (to_real h) (to_real sa) (to_real ma) (to_real ha), is_image in = error (_ "bad arguments to " ++ "tone_analyse") { tone_analyse_op = Operator "tone_analyse" (Plot_histogram @ tone_analyse s m h sa ma ha) Operator_type.COMPOUND false; } tone_map hist image = oo_binary_function tone_map_op hist image, is_class hist = oo_binary'_function tone_map_op hist image, is_class image = im_tone_map image hist, is_image hist && is_image image = error (_ "bad arguments to " ++ "tone_map") { tone_map_op = Operator "tone_map" tone_map Operator_type.COMPOUND_REWRAP false; } tone_build fmt b w s m h sa ma ha = (Plot_histogram @ clip2fmt fmt) (im_tone_build_range mx mx (to_real b) (to_real w) (to_real s) (to_real m) (to_real h) (to_real sa) (to_real ma) (to_real ha)) { mx = Image_format.maxval fmt; } icc_export depth profile intent in = oo_unary_function icc_export_op in, is_class in = im_icc_export_depth in (to_real depth) (expand profile) (to_real intent), is_image in = error (_ "bad arguments to " ++ "icc_export") { icc_export_op = Operator "icc_export" (icc_export depth profile intent) Operator_type.COMPOUND_REWRAP false; } icc_import profile intent in = oo_unary_function icc_import_op in, is_class in = im_icc_import in (expand profile) (to_real intent), is_image in = error (_ "bad arguments to " ++ "icc_import") { icc_import_op = Operator "icc_import" (icc_import profile intent) Operator_type.COMPOUND_REWRAP false; } icc_import_embedded intent in = oo_unary_function icc_import_embedded_op in, is_class in = im_icc_import_embedded in (to_real intent), is_image in = error (_ "bad arguments to " ++ "icc_import_embedded") { icc_import_embedded_op = Operator "icc_import_embedded" (icc_import_embedded intent) Operator_type.COMPOUND_REWRAP false; } icc_transform in_profile out_profile intent in = oo_unary_function icc_transform_op in, is_class in = im_icc_transform in (expand in_profile) (expand out_profile) (to_real intent), is_image in = error (_ "bad arguments to " ++ "icc_transform") { icc_transform_op = Operator "icc_transform" (icc_transform in_profile out_profile intent) Operator_type.COMPOUND_REWRAP false; } icc_ac2rc profile in = oo_unary_function icc_ac2rc_op in, is_class in = im_icc_ac2rc in (expand profile), is_image in = error (_ "bad arguments to " ++ "icc_ac2rc") { icc_ac2rc_op = Operator "icc_ac2rc" (icc_ac2rc profile) Operator_type.COMPOUND_REWRAP false; } // Given a xywh rect, flip it around so wh are always positive rect_normalise x y w h = [x', y', w', h'] { x' = x + w, w < 0 = x; y' = y + h, h < 0 = y; w' = abs w; h' = abs h; } draw_flood_blob x y ink image = oo_unary_function draw_flood_blob_op image, is_class image = im_draw_flood_blob image (to_real x) (to_real y) ink, is_image image = error (_ "bad arguments to " ++ "draw_flood_blob") { draw_flood_blob_op = Operator "draw_flood_blob" (draw_flood_blob x y ink) Operator_type.COMPOUND_REWRAP false; } draw_flood x y ink image = oo_unary_function draw_flood_op image, is_class image = im_draw_flood image (to_real x) (to_real y) ink, is_image image = error (_ "bad arguments to " ++ "draw_flood") { draw_flood_op = Operator "draw_flood" (draw_flood x y ink) Operator_type.COMPOUND_REWRAP false; } /* This version of draw_rect uses insert_noexpand and will be fast, even for * huge images. */ draw_rect_width x y w h f t ink image = oo_unary_function draw_rect_width_op image, is_class image = my_draw_rect_width image (to_int x) (to_int y) (to_int w) (to_int h) (to_int f) (to_int t) ink, is_image image = error (_ "bad arguments to " ++ "draw_rect_width") { draw_rect_width_op = Operator "draw_rect_width" (draw_rect_width x y w h f t ink) Operator_type.COMPOUND_REWRAP false; my_draw_rect_width image x y w h f t ink = insert x' y' (block w' h') image, f == 1 = (insert x' y' (block w' t) @ insert (x' + w' - t) y' (block t h') @ insert x' (y' + h' - t) (block w' t) @ insert x' y' (block t h')) image { insert = insert_noexpand; block w h = image_new w h (get_bands image) (get_format image) (get_coding image) (get_type image) ink' 0 0; ink' = Vector ink, is_list ink = ink; [x', y', w', h'] = rect_normalise x y w h; } } /* Default to 1 pixel wide edges. */ draw_rect x y w h f ink image = draw_rect_width x y w h f 1 ink image; /* This version of draw_rect uses the paintbox rect draw operation. It is an * inplace operation and will use bucketloads of memory. */ draw_rect_paintbox x y w h f ink image = oo_unary_function draw_rect_op image, is_class image = im_draw_rect image (to_real x) (to_real y) (to_real w) (to_real h) (to_real f) ink, is_image image = error (_ "bad arguments to " ++ "draw_rect_paintbox") { draw_rect_op = Operator "draw_rect" (draw_rect x y w h f ink) Operator_type.COMPOUND_REWRAP false; } draw_circle x y r f ink image = oo_unary_function draw_circle_op image, is_class image = im_draw_circle image (to_real x) (to_real y) (to_real r) (to_real f) ink, is_image image = error (_ "bad arguments to " ++ "draw_circle") { draw_circle_op = Operator "draw_circle" (draw_circle x y r f ink) Operator_type.COMPOUND_REWRAP false; } draw_line x1 y1 x2 y2 ink image = oo_unary_function draw_line_op image, is_class image = im_draw_line image (to_real x1) (to_real y1) (to_real x2) (to_real y2) ink, is_image image = error (_ "bad arguments to " ++ "draw_line") { draw_line_op = Operator "draw_line" (draw_line x1 y1 x2 y2 ink) Operator_type.COMPOUND_REWRAP false; } print_base base in = oo_unary_function print_base_op in, is_class in = map (print_base base) in, is_list in = print_base_real, is_real in = error (_ "bad arguments to " ++ "print_base") { print_base_op = Operator "print_base" (print_base base) Operator_type.COMPOUND false; print_base_real = error "print_base: bad base", base < 2 || base > 16 = "0", in < 0 || chars == [] = reverse chars { digits = map (\x x % base) (takewhile (not_equal 0) (iterate (\x idivide x base) in)); chars = map tohd digits; tohd x = (char) ((int) '0' + x), x < 10 = (char) ((int) 'A' + (x - 10)); } } /* id x: the identity function * * id :: * -> * */ id x = x; /* const x y: junk y, return x * * (const 3) is the function that always returns 3. * const :: * -> ** -> * */ const x y = x; /* converse fn a b: swap order of args to fn * * converse fn a b == fn b a * converse :: (* -> ** -> ***) -> ** -> * -> *** */ converse fn a b = fn b a; /* fix fn x: find the fixed point of a function */ fix fn x = limit (iterate fn x); /* until pred fn n: apply fn to n until pred succeeds; return that value * * until (more 1000) (multiply 2) 1 = 1024 * until :: (* -> bool) -> (* -> *) -> * -> * */ until pred fn n = n, pred n = until pred fn (fn n); /* Infinite list of primes. */ primes = 1 : (sieve [2 ..]) { sieve l = hd l : sieve (filter (nmultiple (hd l)) (tl l)); nmultiple n x = x / n != (int) (x / n); } /* Map an n-ary function (pass the args as a list) over groups of objects. * The objects can be single objects or groups. If more than one * object is a group, we iterate for the length of the smallest group. * Don't loop over plain lists, since we want (eg.) "mean [1, 2, 3]" to work. * Treat [] as no-value --- ie. if any of the inputs are [] we put [] into the * output and don't apply the function. copy-pasted into _types, keep in sync */ map_nary fn args = fn args, groups == [] = Group (map process [0, 1 .. shortest - 1]) { // find all the group arguments groups = filter is_Group args; // what's the length of the shortest group arg? shortest = foldr1 min_pair (map (len @ get_value) groups); // process index n ... pull that member from each argument // recurse to handle application, so we work for nested groups too process n = NULL, any (map (is_noval n) args) = map_nary fn (map (extract n) args) { extract n arg = arg.value?n, is_Group arg = arg; is_noval n arg = is_Group arg && arg.value?n == NULL; } } /* Map a 1-ary function over an object. */ map_unary fn a = map_nary (list_1ary fn) [a]; /* Map a 2-ary function over a pair of objects. */ map_binary fn a b = map_nary (list_2ary fn) [a, b]; /* Map a 3-ary function over three objects. */ map_trinary fn a b c = map_nary (list_3ary fn) [a, b, c]; /* Map a 4-ary function over three objects. */ map_quaternary fn a b c d = map_nary (list_4ary fn) [a, b, c, d]; /* Same as map_nary, but for lists. Handy for (eg.) implementing arith ops on * vectors and matricies. */ map_nary_list fn args = fn args, lists == [] = map process [0, 1 .. shortest - 1] { // find all the list arguments lists = filter is_list args; // what's the length of the shortest list arg? shortest = foldr1 min_pair (map len lists); // process index n ... pull that member from each argument // recurse to handle application, so we work for nested lists too process n = map_nary_list fn (map (extract n) args) { extract n arg = arg?n, is_list arg = arg; } } map_unaryl fn a = map_nary_list (list_1ary fn) [a]; map_binaryl fn a b = map_nary_list (list_2ary fn) [a, b]; /* Remove features smaller than x pixels across from an image. This used to be * rather complex ... convsep is now good enough to use. */ smooth x image = convsep (matrix_gaussian_blur (to_real x * 2)) image; /* Chop up an image into a list of lists of smaller images. Pad edges with * black. */ imagearray_chop tile_width tile_height hoverlap voverlap i = map chop' [0, vstep .. last_y] { width = get_width i; height = get_height i; bands = get_bands i; format = get_format i; type = get_type i; tile_width' = to_real tile_width; tile_height' = to_real tile_height; hoverlap' = to_real hoverlap; voverlap' = to_real voverlap; /* Unique pixels per tile. */ hstep = tile_width' - hoverlap'; vstep = tile_height' - voverlap'; /* Number of tiles across and down. Remember the case where width == * hstep. */ across = (int) ((width - 1) / hstep) + 1; down = (int) ((height - 1) / vstep) + 1; /* top/left of final tile. */ last_x = hstep * (across - 1); last_y = vstep * (down - 1); /* How much do we need to pad by? */ sx = last_x + tile_width'; sy = last_y + tile_height'; /* Expand image with black to pad size. */ pad = embed 0 0 0 sx sy i; /* Chop up a row. */ chop' y = map chop'' [0, hstep .. last_x] { chop'' x = extract_area x y tile_width' tile_height' pad; } } /* Reassemble image. */ imagearray_assemble hoverlap voverlap il = (image_set_origin 0 0 @ foldl1 tbj @ map (foldl1 lrj)) il { lrj l r = insert (get_width l + hoverlap) 0 r l; tbj t b = insert 0 (get_height t + voverlap) b t; } /* Generate an nxn identity matrix. */ identity_matrix n = error "identity_matrix: n > 0", n < 1 = map line [0 .. n - 1] { line p = take p [0, 0 ..] ++ [1] ++ take (n - p - 1) [0, 0 ..]; } /* Incomplete gamma function Q(a, x) == 1 - P(a, x) FIXME ... this is now a builtin, until we can get a nice List class (requires overloadable ':') gammq a x = error "bad args", x < 0 || a <= 0 = 1 - gamser, x < a + 1 = gammcf { gamser = (gser a x)?0; gammcf = (gcf a x)?0; } */ /* Incomplete gamma function P(a, x) evaluated as series representation. Also * return ln(gamma(a)) ... nr in c, pp 218 */ gser a x = [gamser, gln] { gln = gammln a; gamser = error "bad args", x < 0 = 0, x == 0 = 1 // fix this { // maximum iterations maxit = 100; ap = List [a + 1, a + 2 ...]; xoap = x / ap; del = map product (prefixes xoap.value); /* del = map (multiply (1 / a)) (map product (prefixes xoap)) del = xap = iterate (multiply */ /* Generate all prefixes of a list ... [1,2,3] -> [[1], [1, 2], [1, 2, * 3], [1, 2, 3, 4] ...] */ prefixes l = map (converse take l) [1..]; } } /* ln(gamma(xx)) ... nr in c, pp 214 */ gammln xx = gln { cof = [76.18009172947146, -86.50532032941677, 24.01409824083091, -1.231739572450155, 0.1208650973866179e-2, -0.5395239384953e-5]; y = take 6 (iterate (add 1) (xx + 1)); ser = 1.000000000190015 + sum (map2 divide cof y); tmp = xx + 0.5; tmp' = tmp - ((xx + 0.5) * log tmp); gln = -tmp + log (2.5066282746310005 * ser / xx); } /* make a LUT from a scatter */ buildlut x = Plot_histogram (im_buildlut x), is_Matrix x && x.width > 1 = im_buildlut (Matrix x), is_matrix x && is_list_len_more 1 x?0 = error (_ "bad arguments to " ++ "buildlut"); /* Linear regression. Return a class with the stuff we need in. * from s15.2, p 665 NR in C * * Also calculate R2, see eg.: * https://en.wikipedia.org/wiki/Coefficient_of_determination */ linreg xes yes = obj { obj = class { // in case we ever get shown in the workspace _vislevel = 2; slope = sum [t * y :: [t, y] <- zip2 tes yes] / st2; intercept = (sy - sx * slope) / ss; chi2 = sum [(y - intercept - slope * x) ** 2 :: [x, y] <- zip2 xes yes]; siga = (chi2 / (ss - 2)) ** 0.5 * ((1 + sx ** 2 / (ss * st2)) / ss) ** 0.5; sigb = (chi2 / (ss - 2)) ** 0.5 * (1 / st2) ** 0.5; // for compat with linregw, see below q = 1.0; R2 = 1 - chi2 / sum [(y - my) ** 2 :: y <- yes]; } ss = len xes; sx = sum xes; sy = sum yes; my = sy / ss; sxoss = sx / ss; tes = [x - sxoss :: x <- xes]; st2 = sum [t ** 2 :: t <- tes]; } /* Weighted linear regression. Xes, yes and a list of deviations. */ linregw xes yes devs = obj { obj = class { // in case we ever get shown in the workspace _vislevel = 2; slope = sum [(t * y) / sd :: [t, y, sd] <- zip3 tes yes devs] / st2; intercept = (sy - sx * slope) / ss; chi2 = sum [((y - intercept - slope * x) / sd) ** 2 :: [x, y, sd] <- zip3 xes yes devs]; siga = ((1 + sx * sx / (ss * st2)) / ss) ** 0.5; sigb = (1 / st2) ** 0.5; q = gammq (0.5 * (len xes - 2)) (0.5 * chi2); R2 = 1 - chi2 / sum [(y - my) ** 2 :: y <- yes]; } wt = [sd ** -0.5 :: sd <- devs]; ss = sum wt; sx = sum [x * w :: [x, w] <- zip2 xes wt]; sy = sum [y * w :: [y, w] <- zip2 yes wt]; my = sy / len xes; sxoss = sx / ss; tes = [(x - sxoss) / sd :: [x, sd] <- zip2 xes devs]; st2 = sum [t ** 2 :: t <- tes]; } /* Clustering: pass in a list of points, repeatedly merge the * closest two points until no two points are closer than the threshold. * Return [merged-points, corresponding-weights]. A weight is a list of the * indexes we merged to make that point, ie. len weight == how significant * this point is. * * eg. * cluster 12 [152,154,155,42,159] == * [[155,42],[[1,2,0,4],[3]]] */ cluster thresh points = oo_unary_function cluster_op points, is_class points // can't use [0..len points - 1], in case len points == 0 = merge [points, map (converse cons []) (take (len points) [0 ..])], is_list points = error (_ "bad arguments to " ++ "cluster") { cluster_op = Operator "cluster" (cluster thresh) Operator_type.COMPOUND false; merge x = x, m < 2 || d > thresh = merge [points', weights'] { [points, weights] = x; m = len points; // generate indexes of all possible pairs, avoiding comparing a thing // to itself, and assuming that dist is reflexive // first index is always less than 2nd index // the +1,+2 makes sure we have an increasing generator, otherwise we // can get [3 .. 4] (for example), which will make a decreasing // sequence pairs = [[x, y] :: x <- [0 .. m - 1]; y <- [x + 1, x + 2 .. m - 1]]; // distance function // arg is eg. [3,1], meaning get distance from point 3 to point 1 dist x = abs (points?i - points?j) { [i, j] = x; } // smallest distance, then the two points we merge p = minpos (map dist pairs); d = dist pairs?p; [i, j] = pairs?p; // new point and new weight nw = weights?i ++ weights?j; np = (points?i * len weights?i + points?j * len weights?j) / len nw; // remove element i from a list remove i l = take i l ++ drop (i + 1) l; // remove two old points, add the new merged one // i < j (see "pairs", above) points' = np : remove i (remove j points); weights' = nw : remove i (remove j weights); } } /* Extract the area of an image around an arrow. * Transform the image to make the arrow horizontal, then displace by hd and * vd pxels, then cut out a bit h pixels high centered on the arrow. */ extract_arrow hd vd h arrow = extract_area (re p' + hd) (im p' - h / 2 + vd) (re pv) h im' { // the line as a polar vector pv = polar (arrow.width, arrow.height); a = im pv; // smallest rotation that will make the line horizontal a' = 360 - a, a > 270 = 180 - a, a > 90 = -a; im' = rotate Interpolate_bilinear a' arrow.image; // look at the start and end of the arrow, pick the leftmost p = (arrow.left, arrow.top), arrow.left <= arrow.right = (arrow.right, arrow.bottom); // transform that point to im' space p' = rectangular (polar p + (0, a')) + (im'.xoffset, im'.yoffset); } /* You'd think these would go in _convert, but they are not really colour ops, * so put them here. */ rad2float image = oo_unary_function rad2float_op image, is_class image = im_rad2float image, is_image image = error (_ "bad arguments to " ++ "rad2float") { rad2float_op = Operator "rad2float" rad2float Operator_type.COMPOUND_REWRAP false; } float2rad image = oo_unary_function float2rad_op image, is_class image = im_float2rad image, is_image image = error (_ "bad arguments to " ++ "float2rad") { float2rad_op = Operator "float2rad" float2rad Operator_type.COMPOUND_REWRAP false; } segment x = oo_unary_function segment_op x, is_class x = image', is_image x = error (_ "bad arguments to " ++ "segment") { segment_op = Operator "segment" segment Operator_type.COMPOUND_REWRAP false; [image, nsegs] = im_segment x; image' = im_copy_set_meta image "n-segments" nsegs; } point a b = oo_binary_function point_op a b, is_class a = oo_binary'_function point_op a b, is_class b = im_read_point b x y, is_image b = [b?x?y], is_matrix b = [b?x], is_real_list b && y == 0 = [b?y], is_real_list b && x == 0 = error (_ "bad arguments to " ++ "point") { point_op = Operator "point" (\a\b Vector (point a b)) Operator_type.COMPOUND false; (x, y) = a, is_complex a; = (a?0, a?1), is_real_list a && is_list_len 2 a = error "bad position format"; } /* One image in, one out. */ system_image command x = oo_unary_function system_image_op x, is_class x = system x, is_image x = error (_ "bad arguments to " ++ "system_image") { system_image_op = Operator "system_image" (system_image command) Operator_type.COMPOUND_REWRAP false; system im = image_out { [image_out, log] = im_system_image (get_image im) "%s.tif" "%s.tif" command; } } /* Two images in, one out. */ system_image2 command x1 x2 = oo_binary_function system_image2_op x1 x2, is_class x1 = oo_binary'_function system_image2_op x1 x2, is_class x2 = system x1 x2, is_image x1 && is_image x2 = error (_ "bad arguments to " ++ "system_image2") { system_image2_op = Operator "system_image2" (system_image2 command) Operator_type.COMPOUND_REWRAP false; system x1 x2 = image_out { [image_out] = vips_call "system" [command] [ $in => [x1, x2], $out => true, $out_format => "%s.tif", $in_format => "%s.tif" ]; } } /* Three images in, one out. */ system_image3 command x1 x2 x3 = oo_binary_function system_image2_op x2 x3, is_class x2 = oo_binary'_function system_image2_op x2 x3, is_class x3 = system x1 x2 x3, is_image x1 && is_image x2 && is_image x3 = error (_ "bad arguments to " ++ "system_image3") { system_image2_op = Operator "system_image2" (system_image3 command x1) Operator_type.COMPOUND_REWRAP false; system x1 x2 x3 = image_out { [image_out] = vips_call "system" [command] [ $in => [x1, x2, x3], $out => true, $out_format => "%s.tif", $in_format => "%s.tif" ]; } } /* Zero images in, one out. */ system_image0 command = Image image_out { [image_out] = vips_call "system" [command] [ $out => true, $out_format => "%s.tif" ]; } hough_line w h x = oo_unary_function hough_line_op x, is_class x = hline (to_real w) (to_real h) x, is_image x = error (_ "bad arguments to " ++ "hough_line") { hough_line_op = Operator "hough_line" (hough_line w h) Operator_type.COMPOUND_REWRAP false; hline w h x = pspace { [pspace] = vips_call "hough_line" [x] [ $width => w, $height => h ]; } } hough_circle s mn mx x = oo_unary_function hough_circle_op x, is_class x = hcircle (to_real s) (to_real mn) (to_real mx) x, is_image x = error (_ "bad arguments to " ++ "hough_circle") { hough_circle_op = Operator "hough_circle" (hough_circle s mn mx) Operator_type.COMPOUND_REWRAP false; hcircle s mn mx x = pspace { [pspace] = vips_call "hough_circle" [x] [ $scale => s, $min_radius => mn, $max_radius => mx ]; } } mapim interp ind in = oo_binary_function mapim_op ind in, is_class ind = oo_binary'_function mapim_op ind in, is_class in = mapim_fn ind in, is_image ind && is_image in = error (_ "bad arguments to " ++ "mapim") { mapim_op = Operator "mapim" (mapim interp) Operator_type.COMPOUND_REWRAP false; mapim_fn ind im = out { [out] = vips_call "mapim" [im, ind] [$interpolate => interp]; } } perlin cell width height = Image im { [im] = vips_call "perlin" [to_real width, to_real height] [ $cell_size => to_real cell ]; } worley cell width height = Image im { [im] = vips_call "worley" [to_real width, to_real height] [ $cell_size => to_real cell ]; } gaussnoise width height mean sigma = im { [im] = vips_call "gaussnoise" [to_real width, to_real height] [ $mean => to_real mean, $sigma => to_real sigma ]; } flattenimage bg x = oo_unary_function flatten_op x, is_class x = flt (to_vector bg) x, is_image x = error (_ "bad arguments to " ++ "flattenimage") { flatten_op = Operator "flatten" (flattenimage bg) Operator_type.COMPOUND_REWRAP false; flt bg x = out { [out] = vips_call "flatten" [x] [ $background => bg.value ]; } } premultiply x = oo_unary_function premultiply_op x, is_class x = prem x, is_image x = error (_ "bad arguments to " ++ "premultiply") { premultiply_op = Operator "premultiply" premultiply Operator_type.COMPOUND_REWRAP false; prem x = out { [out] = vips_call "premultiply" [x] [ ]; } } unpremultiply x = oo_unary_function unpremultiply_op x, is_class x = unprem x, is_image x = error (_ "bad arguments to " ++ "unpremultiply") { unpremultiply_op = Operator "unpremultiply" unpremultiply Operator_type.COMPOUND_REWRAP false; unprem x = out { [out] = vips_call "unpremultiply" [x] [ ]; } } hist_entropy x = oo_unary_function hist_entropy_op x, is_class x = entropy x, is_image x = error (_ "bad arguments to " ++ "hist_entropy") { hist_entropy_op = Operator "hist_entropy" hist_entropy Operator_type.COMPOUND_REWRAP false; entropy x = out { [out] = vips_call "hist_entropy" [x] [ ]; } } nip2-8.7.0/share/nip2/compat/8.6/Filter.def0000644000175000017500000011740613330327312015002 00000000000000Filter_conv_item = class Menupullright "_Convolution" "various spatial convolution filters" { /* Some useful masks. */ filter_blur = Matrix_con 9 0 [[1, 1, 1], [1, 1, 1], [1, 1, 1]]; filter_sharp = Matrix_con 8 0 [[-1, -1, -1], [-1, 16, -1], [-1, -1, -1]]; filter_emboss = Matrix_con 1 128 [[-1, 0], [0, 1]]; filter_laplacian = Matrix_con 1 128 [[-1, -1, -1], [-1, 8, -1], [-1, -1, -1]]; filter_sobel = Matrix_con 1 128 [[1, 2, 1], [0, 0, 0], [-1, -2, -1]]; filter_lindet = Matrix_con 1 0 [[1, 1, 1], [-2, -2, -2], [1, 1, 1]]; Blur_item = class Menuaction "_Blur" "3x3 blur of image" { action x = map_unary (conv filter_blur) x; } Sharpen_item = class Menuaction "_Sharpen" "3x3 sharpen of image" { action x = map_unary (conv filter_sharp) x; } Emboss_item = class Menuaction "_Emboss" "1 pixel displace emboss" { action x = map_unary (conv filter_emboss) x; } Laplacian_item = class Menuaction "_Laplacian" "3x3 laplacian edge detect" { action x = map_unary (conv filter_laplacian) x; } Sobel_item = class Menuaction "So_bel" "3x3 Sobel edge detect" { action x = map_unary sobel x { sobel im = abs (a - 128) + abs (b - 128) { a = conv filter_sobel im; b = conv (rot270 filter_sobel) im; } } } /* 3x3 line detect of image diagonals should be scaled down by root(2) I guess Kirk */ Linedet_item = class Menuaction "Li_ne Detect" "3x3 line detect" { action x = map_unary lindet x { lindet im = foldr1 max_pair images { masks = take 4 (iterate rot45 filter_lindet); images = map (converse conv im) masks; } } } Usharp_item = class Menuaction "_Unsharp Mask" "cored sharpen of L only in LAB image" { action x = class _result { _vislevel = 3; size = Option "Radius" [ "3 pixels", "5 pixels", "7 pixels", "9 pixels", "11 pixels", "51 pixels" ] 0; st = Scale "Smoothness threshold" 0 5 2; bm = Scale "Brighten by at most" 1 50 10; dm = Scale "Darken by at most" 1 50 20; fs = Scale "Sharpen flat areas by" 0 5 0.5; js = Scale "Sharpen jaggy areas by" 0 5 1; _result = map_unary process x { process in = Image in''' { in' = colour_transform_to Image_type.LABS in.value; in'' = sharpen [3, 5, 7, 9, 11, 51]?size st bm dm fs js in'; in''' = colour_transform_to (get_type in) in''; } } } } sep1 = Menuseparator; Custom_blur_item = class Menuaction "Custom B_lur / Sharpen" "blur or sharpen with tuneable parameters" { action x = class _result { _vislevel = 3; type = Option "Type" ["Blur", "Sharpen"] 0; r = Scale "Radius" 1 100 1; fac = Scale "Amount" 0 1 1; layers = Scale "Layers" 1 100 10; shape = Option "Mask shape" [ "Square", "Gaussian" ] 0; prec = Option "Precision" ["Int", "Float", "Approximate"] 0; _result = map_unary process x { process in = clip2fmt blur.format proc { mask = matrix_blur r.value, shape.value == 0 = matrix_gaussian_blur r.value; blur = [convsep, convsepf, aconvsep layers]?prec mask in; proc = in + fac * (in - blur), type == 1 = blur * fac + in * (1 - fac); } } } } Custom_conv_item = class Menuaction "Custom C_onvolution" "convolution filter with tuneable parameters" { action x = class _result { _vislevel = 3; matrix = Matrix_con 1 0 [[0, 0, 0], [0, 1, 0], [0, 0, 0]]; separable = Toggle "Seperable convolution" false, matrix.width == 1 || matrix.height == 1 = false; type = Option "Convolution type" ["Int", "Float"] 0; rotate = Option "Rotate" [ "Don't rotate", "4 x 45 degrees", "8 x 45 degrees", "2 x 90 degrees" ] 0; _result = map_unary process x { process in = in.Image in' { conv_fn = im_lindetect, !separable && type == 0 && rotate == 1 = im_compass, !separable && type == 0 && rotate == 2 = im_gradient, !separable && type == 0 && rotate == 3 = im_conv, !separable && type == 0 = im_convsep, separable && type == 0 = im_conv_f, !separable && type == 1 = im_convsep_f, separable && type == 1 = error "boink!"; in' = conv_fn in.value matrix; } } } } } Filter_rank_item = class Menupullright "_Rank" "various rank filters" { Median_item = class Menuaction "_Median" "3x3 median rank filter" { action x = map_unary (rank 3 3 4) x; } Image_rank_item = class Menuaction "_Image Rank" "pixelwise rank a list or group of images" { action x = class _result { _vislevel = 3; select = Expression "Rank" ((int) (guess_size / 2)) { guess_size = len x, is_list x = len x.value, is_Group x = 0; } // can't really iterate over groups ... since we allow a group // argument _result = rank_image select x; } } Custom_rank_item = class Menuaction "Custom _Rank" "rank filter with tuneable parameters" { action x = class _result { _vislevel = 3; window_width = Expression "Window width" 3; window_height = Expression "Window height" 3; select = Expression "Rank" ((int) ((to_real window_width * to_real window_height) / 2)); _result = map_unary process x { process in = rank window_width window_height select in; } } } } Filter_morphology_item = class Menupullright "_Morphology" "various morphological filters" { /* Some useful masks. */ mask8 = Matrix_mor [[255, 255, 255], [255, 255, 255], [255, 255, 255]]; mask4 = Matrix_mor [[128, 255, 128], [255, 255, 255], [128, 255, 128]]; mask1 = Matrix_mor [[0, 0, 0], [0, 255, 0], [0, 0, 0]]; thin = Matrix_mor [[0, 0, 0], [128, 255, 128], [255, 255, 255]]; Threshold_item = Select_item.Threshold_item; sep1 = Menuseparator; Dilate_item = class Menupullright "_Dilate" "morphological dilate" { Dilate8_item = class Menuaction "_8-connected" "dilate with an 8-connected mask" { action x = map_unary (dilate mask8) x; } Dilate4_item = class Menuaction "_4-connected" "dilate with a 4-connected mask" { action x = map_unary (dilate mask4) x; } } Erode_item = class Menupullright "_Erode" "morphological erode" { Erode8_item = class Menuaction "_8-connected" "erode with an 8-connected mask" { action x = map_unary (erode mask8) x; } Erode4_item = class Menuaction "_4-connected" "erode with a 4-connected mask" { action x = map_unary (erode mask4) x; } } Custom_morph_item = class Menuaction "Custom _Morphology" "convolution morphological operator" { action x = class _result { _vislevel = 3; mask = mask4; type = Option "Operation" ["Erode", "Dilate"] 1; apply = Expression "Number of times to apply mask" 1; _result = map_unary morph x { morph image = Image value' { fatmask = (iterate (dilate mask) mask)?(to_real apply - 1); value' = im_erode image.value fatmask, type.value == 0 = im_dilate image.value fatmask; } } } } sep2 = Menuseparator; Open_item = class Menuaction "_Open" "open with an 8-connected mask" { action x = map_unary (dilate mask8 @ erode mask8) x; } Close_item = class Menuaction "_Close" "close with an 8-connected mask" { action x = map_unary (erode mask8 @ dilate mask8) x; } Clean_item = class Menuaction "C_lean" "remove 8-connected isolated points" { action x = map_unary clean x { clean x = x ^ erode mask1 x; } } Thin_item = class Menuaction "_Thin" "thin once" { action x = map_unary thinall x { masks = take 8 (iterate rot45 thin); thin1 m x = x ^ erode m x; thinall x = foldr thin1 x masks; } } } Filter_fourier_item = class Menupullright "_Fourier" "various Fourier filters" { preview_size = 64; sense_option = Option "Sense" [ "Pass", "Reject" ] 0; // make a visualisation image make_vis fn = (Image @ image_set_type Image_type.FOURIER @ rotquad @ fn) (im_create_fmask preview_size preview_size); // make the process function process fn in = (Image @ fn) (im_flt_image_freq in.value); New_ideal_item = class Menupullright "_Ideal" "various ideal Fourier filters" { High_low_item = class Menuaction "_High or Low Pass" "highpass/lowpass ideal Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; // call a freq func with our parameters _params f = f sense.value fc.value 0 0 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" "ring pass/reject ideal Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; rw = Scale "Ring width" 0.01 0.99 0.5; // call a freq func with our parameters _params f = f (sense.value + 6) fc.value rw.value 0 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Band_item = class Menuaction "_Band Pass or Band Reject" "band pass/reject ideal Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fcx = Scale "Horizontal frequency cutoff" 0.01 0.99 0.5; fcy = Scale "Vertical frequency cutoff" 0.01 0.99 0.5; r = Scale "Radius" 0.01 0.99 0.5; // call a freq func with our parameters _params f = f (sense.value + 12) fcx.value fcy.value r.value 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } } New_gaussian_item = class Menupullright "_Gaussian" "various Gaussian Fourier filters" { High_low_item = class Menuaction "_High or Low Pass" "highpass/lowpass Gaussian Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; // call a freq func with our parameters _params f = f (sense.value + 4) fc.value ac.value 0 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" "ring pass/reject Gaussian Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; rw = Scale "Ring width" 0.01 0.99 0.5; // call a freq func with our parameters _params f = f (sense.value + 10) fc.value rw.value ac.value 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Band_item = class Menuaction "_Band Pass or Band Reject" "band pass/reject Gaussian Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fcx = Scale "Horizontal frequency cutoff" 0.01 0.99 0.5; fcy = Scale "Vertical frequency cutoff" 0.01 0.99 0.5; r = Scale "Radius" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; // call a freq func with our parameters _params f = f (sense.value + 16) fcx.value fcy.value r.value ac.value 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } } New_butterworth_item = class Menupullright "_Butterworth" "various Butterworth Fourier filters" { High_low_item = class Menuaction "_High or Low Pass" "highpass/lowpass Butterworth Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; o = Scale "Order" 1 10 2; // call a freq func with our parameters _params f = f (sense.value + 2) o.value fc.value ac.value 0 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" "ring pass/reject Butterworth Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; rw = Scale "Ring width" 0.01 0.99 0.5; o = Scale "Order" 1 10 2; // call a freq func with our parameters _params f = f (sense.value + 8) o.value fc.value rw.value ac.value 0; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } Band_item = class Menuaction "_Band Pass or Band Reject" "band pass/reject Butterworth Fourier filter" { action x = class _result { _vislevel = 3; sense = sense_option; fcx = Scale "Horizontal frequency cutoff" 0.01 0.99 0.5; fcy = Scale "Vertical frequency cutoff" 0.01 0.99 0.5; r = Scale "Radius" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; o = Scale "Order" 1 10 2; // call a freq func with our parameters _params f = f (sense.value + 14) o.value fcx.value fcy.value r.value ac.value; visualize_mask = make_vis _params; _result = map_unary (process _params) x; } } } } Filter_enhance_item = class Menupullright "_Enhance" "various enhancement filters" { Falsecolour_item = class Menuaction "_False Colour" "false colour a mono image" { action x = class _result { _vislevel = 3; o = Scale "Offset" (-255) 255 0; clip = Toggle "Clip colour range" false; _result = map_unary process x { process im = falsecolour mono'' { mono = colour_transform_to Image_type.B_W im; mono' = mono + o; mono'' = (unsigned char) mono', clip = (unsigned char) (mono' & 0xff); } } } } Statistical_diff_item = class Menuaction "_Statistical Difference" "statistical difference of an image" { action x = class _result { _vislevel = 3; wsize = Expression "Window size" 11; tmean = Expression "Target mean" 128; mean_weight = Scale "Mean weight" 0 1 0.8; tdev = Expression "Target deviation" 50; dev_weight = Scale "Deviation weight" 0 1 0.8; border = Toggle "Output image matches input image in size" true; _result = map_unary process x { process in = Image in'' { in' = colour_transform_to Image_type.B_W in.value; fn = im_stdif, border = im_stdif_raw; in'' = fn in' mean_weight.value tmean.expr dev_weight.value tdev.expr wsize.expr wsize.expr; } } } } Hist_equal_item = class Menupullright "_Equalise Histogram" "equalise contrast" { Global_item = class Menuaction "_Global" "equalise contrast globally" { action x = map_unary hist_equalize x; } Local_item = class Menuaction "_Local" "equalise contrast within a roving window" { action x = class _result { _vislevel = 3; window_width = Expression "Window width" 20; window_height = Expression "Window height" 20; max_slope = Scale "Maxium slope" 0 10 0; _result = map_unary process x { process in = hist_equalize_local window_width window_height max_slope in; } } } } } Filter_correlate_item = class Menupullright "Spatial _Correlation" "calculate correlation surfaces" { Correlate_item = class Menuaction "_Correlate" "calculate correlation coefficient" { action a b = map_binary corr a b { corr a b = correlate a b, a.width <= b.width && a.height <= b.height = correlate b a; } } Correlate_fast_item = class Menuaction "_Simple Difference" "calculate sum of squares of differences" { action a b = map_binary corr a b { corr a b = correlate_fast a b, a.width <= b.width && a.height <= b.height = correlate_fast b a; } } } Filter_hough_item = class Menupullright "_Hough Transform" "transform to parameter space" { Line_item = class Menuaction "_Line" "find straight line Hough transform" { action a = class _result { _vislevel = 3; pspace_width = Expression "Parameter space width" 64; pspace_height = Expression "Parameter space height" 64; _result = map_unary line a { line a = hough_line (to_real pspace_width) (to_real pspace_height) a; } } } Circle_item = class Menuaction "_Circle" "find circle Hough transform" { action a = class _result { _vislevel = 3; scale = Expression "Scale down parameter space by" 10; min_radius = Expression "Minimum radius" 10; max_radius = Expression "Maximum radius" 30; _result = map_unary circle a { circle a = hough_circle (to_real scale) (to_real min_radius) (to_real max_radius) a; } } } } Filter_coordinate_item = class Menupullright "_Coordinate Transform" "various coordinate transforms" { // run a function which wants a complex arg on a non-complex two-band // image run_cmplx fn x = re x' ++ im x' { x' = fn (x?0, x?1); } Polar_item = class Menuaction "_Polar" "transform to polar coordinates" { action a = class _result { _vislevel = 3; interp = Interpolate_picker Interpolate_type.BILINEAR; _result = map_unary to_polar a { to_polar im = mapim interp.value map' im { // xy image, origin in the centre, scaled to fit image to // a circle xy = make_xy im.width im.height; xy' = xy - Vector [im.width / 2, im.height / 2]; scale = min [im.width, im.height] / im.width; xy'' = 2 * xy' / scale; // to polar, scale vertical axis to 360 degrees map = run_cmplx polar xy''; map' = map * Vector [1, im.height / 360]; } } } } Rectangular_item = class Menuaction "_Rectangular" "transform to rectangular coordinates" { action a = class _result { _vislevel = 3; interp = Interpolate_picker Interpolate_type.BILINEAR; _result = map_unary to_rect a { to_rect im = mapim interp.value map'' im { // xy image, vertical scaled to 360 degrees xy = make_xy im.width im.height; xy' = xy * Vector [1, 360 / im.height]; // to rect, scale to image rect map = run_cmplx rectangular xy'; scale = min [im.width, im.height] / im.width; map' = map * scale / 2; map'' = map' + Vector [im.width / 2, im.height / 2]; } } } } } #separator Filter_tilt_item = class Menupullright "Ti_lt Brightness" "tilt brightness" { Left_right_item = class Menuaction "_Left to Right" "linear left-right brighten" { action x = class _result { _vislevel = 3; tilt = Scale "Left-right tilt" (-1) 1 0; _result = map_unary tilt_lr x { tilt_lr image = image * scale { ramp = im_fgrey image.width image.height; scale = (ramp - 0.5) * tilt + 1; } } } } Top_bottom_item = class Menuaction "_Top to Bottom" "linear top-bottom brighten" { action x = class _result { _vislevel = 3; tilt = Scale "Top-bottom tilt" (-1) 1 0; _result = map_unary tilt_tb x { tilt_tb image = image * scale { ramp = rot90 (im_fgrey image.height image.width); scale = (ramp - 0.5) * tilt + 1; } } } } sep1 = Menuseparator; Left_right_cos_item = class Menuaction "Cosine Left-_right" "cosine left-right brighten" { action x = class _result { _vislevel = 3; tilt = Scale "Left-right tilt" (-1) 1 0; shift = Scale "Shift by" (-1) 1 0; _result = map_unary tilt_lr x { tilt_lr image = image * scale { ramp = im_fgrey image.width image.height - 0.5 - shift.value; scale = 0.5 * tilt.value * cos (ramp * 180) + 1; } } } } Top_bottom_cos_item = class Menuaction "Cosine Top-_bottom" "cosine top-bottom brighten" { action x = class _result { _vislevel = 3; tilt = Scale "Top-bottom tilt" (-1) 1 0; shift = Scale "Shift by" (-1) 1 0; _result = map_unary tilt_tb x { tilt_tb image = image * scale { ramp = rot90 (im_fgrey image.height image.width) - 0.5 - shift.value; scale = 0.5 * tilt.value * cos (ramp * 180) + 1; } } } } sep2 = Menuseparator; Circular_item = class Menuaction "_Circular" "circular brighten" { action x = class _result { _vislevel = 3; tilt = Scale "Tilt" (-1) 1 0; hshift = Scale "Horizontal shift by" (-1) 1 0; vshift = Scale "Vertical shift by" (-1) 1 0; _result = map_unary tilt_tb x { tilt_tb image = image * scale { hramp = im_fgrey image.width image.height - 0.5 - hshift.value; vramp = rot90 (im_fgrey image.height image.width) - 0.5 - vshift.value; ramp = (hramp ** 2 + vramp ** 2) ** 0.5; scale = 0.5 * tilt.value * cos (ramp * 180) + 1; } } } } } Filter_blend_item = class Menupullright "_Blend" "blend objects together" { Scale_blend_item = class Menuaction "_Scale" "blend two objects together with a scale" { action a b = class _result { _vislevel = 3; p = Scale "Blend position" 0 1 0.5; _result = map_binary process a b { process im1 im2 = im1 * (1 - p.value) + im2 * p.value; } } } Image_blend_item = class Menuaction "_Image" "use an image to blend two objects" { action a b c = class _result { _vislevel = 3; i = Toggle "Invert mask" false; _result = map_trinary process a b c { process a b c = blend condition in1 in2, !i = blend (invert condition) in1 in2 { compare a b // prefer image as the condition = false, !has_image a && has_image b // prefer mono images as the condition = false, has_bands a && has_bands b && get_bands a > 1 && get_bands b == 1 // prefer uchar as the condition = false, has_format a && has_format b && get_format a > Image_format.UCHAR && get_format b == Image_format.UCHAR = true; [condition, in1, in2] = sortc compare [a, b, c]; } } } } Line_blend_item = class Menuaction "_Along Line" "blend between image a and image b along a line" { action a b = class _result { _vislevel = 3; orientation = Option "Orientation" [ "Left to Right", "Top to Bottom" ] 0; blend_position = Scale "Blend position" 0 1 0.5; blend_width = Scale "Blend width" 0 1 0.05; _result = map_binary process a b { process a b = blend (Image condition) b a { output_width = max_pair a.width b.width; output_height = max_pair a.height b.height; range = output_width, orientation == 0 = output_height; blend_position' = floor (range * blend_position.value); blend_width' = 1, blend_width.value == 0 = floor (range * blend_width.value); start = blend_position' - blend_width' / 2; background = (make_xy output_width output_height) >= blend_position'; ramp = im_grey blend_width' output_height, orientation == 0 = rot90 (im_grey blend_width' output_width); condition = insert_noexpand start 0 ramp background?0, orientation == 0 = insert_noexpand 0 start ramp background?1; } } } } Blend_alpha_item = class Menuaction "Blend _Alpha" "blend images with optional alpha channels" { // usage: layerit foreground background // input images must be either 1 or 3 bands, optionally + 1 band // which is used as the alpha channel // rich lott scale_mask im opacity = (unsigned char) (to_real opacity / 255 * im); // to mono intensity = colour_transform_to Image_type.B_W; // All the blend functions // I am grateful to this page // http://www.pegtop.net/delphi/blendmodes/ // for most of the formulae. blend_normal mask opacity fg bg = blend (scale_mask mask opacity) fg bg; blend_iflighter mask opacity fg bg = blend (if fg' > bg' then mask' else 0) fg bg { fg' = intensity fg; bg' = intensity bg; mask' = scale_mask mask opacity ; } blend_ifdarker mask opacity fg bg = blend (if fg' < bg' then mask' else 0) fg bg { fg' = intensity fg ; bg' = intensity bg ; mask' = scale_mask mask opacity ; } blend_multiply mask opacity fg bg = blend (scale_mask mask opacity) fg' bg { fg' = fg / 255 * bg; } blend_add mask opacity fg bg = blend mask fg' bg { fg' = opacity / 255 * fg + bg; } blend_subtract mask opacity fg bg = blend mask fg' bg { fg' = bg - opacity / 255 * fg; } blend_screen mask opacity fg bg = blend mask fg' bg { fg' = 255 - (255 - bg) * (255 - (opacity / 255 * fg)) / 255; } blend_burn mask opacity fg bg = blend mask fg'' bg { // fades to white which has no effect. fg' = (255 - opacity) + opacity * fg / 255; fg'' = 255 - 255 * (255 - bg) / fg'; } blend_softlight mask opacity fg bg = blend mask' fg' bg { mask' = scale_mask mask opacity; fg' = (2 * bg * fg + bg * bg * (1 - 2 * fg / 255)) / 255; } blend_hardlight mask opacity fg bg = blend mask' fg' bg { mask' = scale_mask mask opacity; fg' = 2 / 255 * fg * bg, bg < 129 = 255 - 2 * (255 - bg) * (255 - fg) / 255; } blend_lighten mask opacity fg bg = blend mask' fg' bg { mask' = scale_mask mask opacity; fg' = if bg < fg then fg else bg; } blend_darken mask opacity fg bg = blend mask' fg' bg { mask' = scale_mask mask opacity; fg' = if bg > fg then fg else bg; } blend_dodge mask opacity fg bg = blend mask fg'' bg { // one added to avoid divide by zero fg' = 1 + 255 - (opacity / 255 * fg); fg'' = bg * 255 / fg'; } blend_reflect mask opacity fg bg = blend mask' fg' bg { mask' = scale_mask mask opacity; fg' = bg * bg / (255 - fg); } blend_freeze mask opacity fg bg = blend mask' fg' bg { mask' = scale_mask mask opacity; fg' = 255 - (255 - bg) * (255 - bg) / (1 + fg); } blend_or mask opacity fg bg = bg | (unsigned char) fg' { mask' = scale_mask mask opacity; fg' = fg * mask' / 255; } blend_and mask opacity fg bg = bg & (unsigned char) fg' { mask' = scale_mask mask opacity; fg' = fg * mask' / 255; } // blend types NORMAL = 0; IFLIGHTER = 1; IFDARKER = 2; MULTIPLY = 3; ADD = 4; SUBTRACT = 5; SCREEN = 6; BURN = 7; DODGE = 8; HARDLIGHT = 9; SOFTLIGHT = 10; LIGHTEN = 11; DARKEN = 12; REFLECT = 13; FREEZE = 14; OR = 15; AND = 16; // names we show the user for blend types names = Enum [ _ "Normal" => NORMAL, _ "If Lighter" => IFLIGHTER, _ "If Darker" => IFDARKER, _ "Multiply" => MULTIPLY, _ "Add" => ADD, _ "Subtract" => SUBTRACT, _ "Screen" => SCREEN, _ "Burn" => BURN, _ "Soft Light" => SOFTLIGHT, _ "Hard Light" => HARDLIGHT, _ "Lighten" => LIGHTEN, _ "Darken" => DARKEN, _ "Dodge" => DODGE, _ "Reflect" => REFLECT, _ "Freeze" => FREEZE, _ "Bitwise OR" => OR, _ "Bitwise AND" => AND ]; // functions we call for each blend type actions = Table [ [NORMAL, blend_normal], [IFLIGHTER, blend_iflighter], [IFDARKER, blend_ifdarker], [MULTIPLY, blend_multiply], [ADD, blend_add], [SUBTRACT, blend_subtract], [SCREEN, blend_screen], [BURN, blend_burn], [SOFTLIGHT, blend_softlight], [HARDLIGHT, blend_hardlight], [LIGHTEN, blend_lighten], [DARKEN, blend_darken], [DODGE, blend_dodge], [REFLECT, blend_reflect], [FREEZE, blend_freeze], [OR, blend_or], [AND, blend_and] ]; // make sure im has an alpha channel (set opaque if it hasn't) put_alpha im = im, im.bands == 4 || im.bands == 2 = im ++ 255; // make sure im has no alpha channel lose_alpha im = extract_bands 0 3 im, im.bands == 4 = im?0, im.bands == 2 = im; // does im have al alpha channel? has_alpha im = im.bands == 2 || im.bands == 4; // get the alpha (set opaque if no alpha) get_alpha img = img'?3, img.bands == 4 = img'?1 { img' = put_alpha img; } // add an alpha ... cast the alpha image to match the main image append_alpha im alpha = im ++ clip2fmt im.format alpha; // makes fg the same size as bg, displaced with u, v pixel offset moveit fg bg u v = insert_noexpand u v fg bg' { bg' = image_new bg.width bg.height fg.bands fg.format fg.coding fg.type 0 0 0; } action bg fg = class _value { _vislevel = 3; method = Option_enum "Blend mode" names "Normal"; opacity = Scale "Opacity" 0 255 255; hmove = Scale "Horizontal move by" (-bg.width) (bg.width) 0; vmove = Scale "Vertical move by" (-bg.height) (bg.height) 0; _value = append_alpha blended merged_alpha, has_alpha bg = blended { // displace and resize fg (need to displace alpha too) fg' = moveit (put_alpha fg) bg hmove vmove; // transform to sRGB fg'' = colour_transform_to Image_type.sRGB (lose_alpha fg'); bg' = colour_transform_to Image_type.sRGB (lose_alpha bg); // alphas merged merged_alpha = get_alpha bg | get_alpha fg'; // blend together blended = (actions.lookup 0 1 method.value_thing) (get_alpha fg') opacity.value fg'' bg'; } } } } Filter_overlay_header_item = class Menuaction "_Overlay" "make a colour overlay of two monochrome images" { action a b = class _result { _vislevel = 3; colour = Option "Colour overlay as" [ _ "Green over Red", _ "Blue over Red", _ "Red over Green", _ "Red over Blue", _ "Blue over Green", _ "Green over Blue" ] 0; _result = map_binary overlay a b { overlay a b = image_set_type Image_type.sRGB [(a' ++ b' ++ 0), (a' ++ 0 ++ b'), (b' ++ a' ++ 0), (b' ++ 0 ++ a'), (0 ++ a' ++ b'), (0 ++ b' ++ a')]?colour { a' = colour_transform_to Image_type.B_W a; b' = colour_transform_to Image_type.B_W b; } } } } Filter_colourize_item = class Menuaction "_Colourize" "use a colour image or patch to tint a mono image" { action a b = class _result { _vislevel = 3; tint = Scale "Tint" 0 1 0.6; _result = map_binary tintit a b { tintit a b = colour_transform_to (get_type colour) colourized' { // get the mono thing first [mono, colour] = sortc (const (is_colour_type @ get_type)) [a, b]; colour' = tint * colour_transform_to Image_type.LAB colour; mono' = colour_transform_to Image_type.B_W mono; colourized = (mono' / 2.55) ++ colour'?1 ++ colour'?2; colourized' = image_set_type Image_type.LAB colourized; } } } } Filter_browse_multiband_item = class Menupullright "Bro_wse" "browse though an image, bitwise or bandwise" { Bandwise_item = class Menuaction "B_andwise" "browse through the bands of a multiband image" { action image = class _result { _vislevel = 3; band = Scale "Band" 0 (image.bands - 1) 0; display = Option "Display as" [ _ "Grey", _ "Green over Red", _ "Blue over Red", _ "Red over Green", _ "Red over Blue", _ "Blue over Green", _ "Green over Blue" ] 0; _result = output { down = (int) band.value; up = down + 1; remainder = band.value - down; fade x a = Vector [0], x == 0 = a * x; a = fade remainder image?up; b = fade (1 - remainder) image?down; output = [ a + b, a ++ b ++ 0, a ++ 0 ++ b, b ++ a ++ 0, b ++ 0 ++ a, 0 ++ a ++ b, 0 ++ b ++ a ] ? display; } } } Bitwise_item = class Menuaction "Bi_twise" "browse through the bits of an image" { action x = class _result { _vislevel = 3; bit = Islider "Bit" 0 (nbits - 1) (nbits - 1) { nbits = x.bits, is_Image x = 8; Islider c f t v = class scope.Scale c f t ((int) v) { Scale = Islider; } } _result = map_unary process x { process im = (im & (0x1 << bit.value)) != 0; } } } } #separator Filter_negative_item = class Menuaction "Photographic _Negative" "swap black and white" { action x = map_unary invert x { invert in = clip2fmt in.format (colour_transform_to (get_type in) rgb') { rgb = colour_transform_to Image_type.sRGB in; rgb' = 255 - rgb; } } } Filter_solarize_item = class Menuaction "_Solarise" "invert colours above a threshold" { action x = class _result { _vislevel = 3; kink = Scale "Kink" 0 1 0.5; _result = map_unary process x { process image = hist_map tab'''' image { // max pixel value for this format mx = Image_format.maxval image.format; // make a LUT ... just 8 and 16 bit tab = im_identity_ushort image.bands mx, image.format == Image_format.USHORT = im_identity image.bands; tab' = Image tab; // make basic ^ shape tab'' = tab' * (1 / kink), tab' < mx * kink = (mx - tab') / (1 - kink); tab''' = clip2fmt image.format tab''; // smooth a bit mask = matrix_blur (tab'''.width / 8); tab'''' = convsep mask tab'''; } } } } Filter_diffuse_glow_item = class Menuaction "_Diffuse Glow" "add a halo to highlights" { action x = class _result { _vislevel = 3; r = Scale "Radius" 0 50 5; highlights = Scale "Highlights" 0 100 95; glow = Scale "Glow" 0 1 0.5; colour = Colour_new_item.Widget_colour_item.action; _result = map_unary process x { process image = image' { mono = (unsigned char) (colour_transform_to Image_type.B_W image); thresh = hist_thresh (highlights.value / 100) mono; mask = mono > thresh; blur = convsep (matrix_gaussian_blur r.value) mask; colour' = colour_transform_to image.type colour; image' = image + colour' * glow * (blur / 255); } } } } Filter_drop_shadow_item = class Menuaction "Drop S_hadow" "add a drop shadow to an image" { action x = class _result { _vislevel = 3; sx = Scale "Horizontal shadow" (-50) 50 5; sy = Scale "Vertical shadow" (-50) 50 5; ss = Scale "Shadow softness" 0 20 5; bg_colour = Expression "Background colour" 255; sd_colour = Expression "Shadow colour" 128; alpha = Toggle "Shadow in alpha channel" false; transparent = Toggle "Zero pixels are transparent" false; _result = map_unary shadow x { shadow image = Image final { blur_size = ss.value * 2 + 1; // matrix we blur with to soften shadows blur_matrix = matrix_gaussian_blur blur_size; matrix_size = blur_matrix.width; matrix_radius = (int) (matrix_size / 2) + 1; // position and size of shadow image in input cods // before and after fuzzing shadow_rect = Rect sx.value sy.value image.width image.height; fuzzy_shadow_rect = shadow_rect.margin_adjust matrix_radius; // size and pos of final image, in input cods final_rect = image.rect.union fuzzy_shadow_rect; // hard part of shadow in output cods shadow_rect' = Rect (shadow_rect.left - final_rect.left) (shadow_rect.top - final_rect.top) shadow_rect.width shadow_rect.height; // make the shadow mask ... true for parts which cast // a shadow mask = (foldr1 bitwise_and @ bandsplit) (image.value != 0), transparent = image_new image.width image.height 1 Image_format.UCHAR Image_coding.NOCODING Image_type.B_W 255 0 0; mask' = embed 0 shadow_rect'.left shadow_rect'.top final_rect.width final_rect.height mask; mask'' = convsep blur_matrix mask'; // use mask to fade between bg and shadow colour mk_background colour = image_new final_rect.width final_rect.height image.bands image.format image.coding image.type colour 0 0; bg_image = mk_background bg_colour.expr; shadow_image = mk_background sd_colour.expr; bg = blend mask'' shadow_image bg_image; // make a full size mask fg_mask = embed 0 (image.rect.left - final_rect.left) (image.rect.top - final_rect.top) final_rect.width final_rect.height mask; // wrap up the input image ... put the shadow colour // around it, so if we are outputting a separate // alpha the shadow colour will be set correctly fg = insert (image.rect.left - final_rect.left) (image.rect.top - final_rect.top) image.value shadow_image; final // make a separate alpha = fg ++ mask'', alpha // paste image over shadow = if fg_mask then fg else bg; } } } } Filter_paint_text_item = class Menuaction "_Paint Text" "paint text into an image" { action x = paint_position, is_Group x = paint_area { paint_area = class _result { _check_args = [ [x, "x", check_Image] ]; _vislevel = 3; text = String "Text to paint" "Hello world!"; font = Fontname "Use font" Workspaces.Preferences.PAINTBOX_FONT; align = Option "Alignment" ["Left", "Centre", "Right"] 0; dpi = Expression "DPI" 300; colour = Expression "Text colour" 255; place = Region x (x.width / 4) (x.height / 4) (x.width / 2) (x.height / 2); _result = insert_noexpand place.left place.top (blend txt' fg place) x { fg = image_new place.width place.height x.bands x.format x.coding x.type colour.expr 0 0; txt = Image (im_text text.value font.value place.width align.value (to_real dpi)); bg = im_black place.width place.height 1; txt' = insert_noexpand 0 0 txt bg; } } paint_position = class _result { _vislevel = 3; text = Pattern_images_item.Text_item.action; colour = Expression "Text colour" 255; position = Option "Position" [ _ "North-west", _ "North", _ "North-east", _ "West", _ "Centre", _ "East", _ "South-west", _ "South", _ "South-east", _ "Specify in pixels" ] 4; left = Expression "Pixels from left" 0; top = Expression "Pixels from top" 0; _result = map_unary paint x { paint image = insert_noexpand x' y' place' image { xr = image.width - text.width; yr = image.height - text.height; x = left.expr, position == 9 = [0, xr / 2, xr]?(position % 3); y = top.expr, position == 9 = [0, yr / 2, yr]?(position / 3); x' = range 0 x (image.width - 1); y' = range 0 y (image.height - 1); w' = range 1 text.width (image.width - x'); h' = range 1 text.height (image.height - y'); place = extract_area x' y' w' h' image; text' = insert_noexpand 0 0 text (im_black w' h' 1); fg = image_new w' h' image.bands image.format image.coding image.type colour.expr 0 0; place' = blend text' fg place; } } } } } Autotrace_item = class Menuaction "_Trace" "convert a bitmap to an SVG file" { action x = class _result { _vislevel = 3; despeckle = Scale "Despeckle level" 1 20 1; line = Scale "Line threshold" 1 20 1; center = Toggle "Trace centreline" false; scale = Scale "SVG scale" 0.1 10 1; command = "autotrace %s " ++ join_sep " " [ofmt, ofile, desp, lint, cent] { prog = search_for_error "autotrace"; ofmt = "-output-format svg"; ofile = "-output-file %s"; desp = "-despeckle-level " ++ print despeckle.value; lint = "-line-threshold " ++ print line.value; cent = if center then "-centerline " else ""; } _result = Image output { [output] = vips_call "system" [command] [$in => [x.value], $in_format => "%s.ppm", $out => true, $out_format => "%s.svg[scale=" ++ print scale.value ++ "]" ]; } } } nip2-8.7.0/share/nip2/compat/8.6/Histogram.def0000644000175000017500000001656713330327312015520 00000000000000Hist_new_item = class Menupullright "_New" "new histogram" { Hist_item = class Menuaction "_Identity" "make an identity histogram" { action = class _result { _vislevel = 3; d = Option "Depth" ["8 bit", "16 bit"] 0; _result = Plot [] ([im_identity 1, im_identity_ushort 1 65536]?d); } } Hist_new_from_matrix = Matrix_buildlut_item; Hist_from_image_item = class Menuaction "Ta_g Image As Histogram" "set image Type to Histogram" { action x = hist_tag x; } Tone_item = class Menuaction "_Tone Curve" "make a new tone mapping curve" { action = class _result { _vislevel = 3; d = Option "Depth" ["8 bit", "16 bit"] 0; b = Scale "Black point" 0 100 0; w = Scale "White point" 0 100 100; sp = Scale "Shadow point" 0.1 0.3 0.2; mp = Scale "Mid-tone point" 0.4 0.6 0.5; hp = Scale "Highlight point" 0.7 0.9 0.8; sa = Scale "Shadow adjust" (-15) 15 0; ma = Scale "Mid-tone adjust" (-30) 30 0; ha = Scale "Highlight adjust" (-15) 15 0; _result = tone_build fmt b w sp mp hp sa ma ha { fmt = [Image_format.UCHAR, Image_format.USHORT]?d; } } } } Hist_convert_to_hist_item = class Menuaction "Con_vert to Histogram" "convert anything to a histogram" { action x = hist_tag (to_image x); } Hist_find_item = class Menupullright "_Find" "find a histogram" { Oned_item = class Menuaction "_One Dimension" "for a n-band image, make an n-band 1D histogram" { action x = map_unary hist_find x; } Nd_item = class Menuaction "_Many Dimensions" "for a n-band image, make an n-dimensional histogram" { action x = class _result { _vislevel = 3; // default to something small-ish bins = Expression "Number of bins in each dimension" 8; _result = map_unary process x { process in = hist_find_nD bins in; } } } Indexed_item = class Menuaction "_Indexed" "use a 1-band index image to pick bins for an n-band image" { action x y = class _result { _vislevel = 3; combine = Combine_picker Combine_type.SUM; _result = map_binary map x y { map a b = hist_find_indexed combine.value index im { [im, index] = sortc (const is_index) [a, b]; is_index x = has_image x && b == 1 && (f == Image_format.UCHAR || f == Image_format.USHORT) { im = get_image x; b = get_bands x; f = get_format x; } } } } } } Hist_map_item = class Menuaction "_Map" "map an image through a histogram" { action x y = map_binary map x y { map a b = hist_map hist im { [im, hist] = sortc (const is_hist) [a, b]; } } } Hist_eq_item = Filter_enhance_item.Hist_equal_item; #separator Hist_cum_item = class Menuaction "_Integrate" "form cumulative histogram" { action x = map_unary hist_cum x; } Hist_diff_item = class Menuaction "_Differentiate" "find point-to-point differences (inverse of Integrate)" { action x = map_unary hist_diff x; } Hist_norm_item = class Menuaction "N_ormalise" "normalise a histogram" { action x = map_unary hist_norm x; } Hist_inv_item = class Menuaction "In_vert" "invert a histogram" { action x = map_unary hist_inv x; } Hist_match_item = class Menuaction "Ma_tch" "find LUT which will match first histogram to second" { action in ref = map_binary hist_match in ref; } Hist_zerox_item = class Menuaction "_Zero Crossings" "find zero crossings" { action x = class _result { _vislevel = 3; edge = Option "Direction" [ "Positive-going", "Negative-going" ] 0; _result = map_unary (zerox (if edge == 0 then -1 else 1)) x; } } Hist_entropy_item = class Menuaction "Entropy" "calculate histogram entropy" { action x = hist_entropy x; } #separator Hist_profile_item = class Menuaction "Find _Profile" "search from image edges for non-zero pixels" { action x = class _result { _vislevel = 3; edge = Option "Search from" [ "Top edge down", "Left edge to right", "Bottom edge up", "Right edge to left" ] 2; _result = map_unary profile x { profile image = (Plot_histogram @ hist_tag) [ profilemb 0 image.value, profilemb 1 image.value, profilemb 0 (fliptb image.value), profilemb 1 (fliplr image.value) ]?edge; // im_profile only does 1 band images :-( profilemb d = bandjoin @ map (converse im_profile d) @ bandsplit; } } } Hist_project_item = class Menuaction "Find Pro_jections" "find horizontal and vertical projections" { action x = class { _vislevel = 2; _result = map_unary project x; // extract the result ... could be a group extr n = Plot_histogram _result?n, is_list _result = Group (map (Plot_histogram @ converse subscript n) _result.value); horizontal = extr 0; vertical = extr 1; centre = (gravity horizontal, gravity vertical); } } #separator Hist_graph_item = class Menuaction "P_lot Slice" "plot a slice along a guide or arrow" { action x = class _value { _vislevel = 3; width = Scale "Width" 1 40 1; displace = Scale "Horizontal displace" (-50) 50 0; vdisplace = Scale "Vertical displace" (-50) 50 0; _value = map_unary graph x { graph arrow = hist_tag area' { area = extract_arrow displace.value vdisplace.value width.value arrow; // squish vertically to get an average area' = resize Kernel_linear 1 (1 / width.value) area; } } } } Extract_arrow_item = class Menuaction "Extract _Arrow" "extract the area around an arrow" { action x = class _value { _vislevel = 3; width = Scale "Width" 1 40 1; displace = Scale "Horizontal displace" (-50) 50 0; vdisplace = Scale "Vertical displace" (-50) 50 0; _value = map_unary (extract_arrow displace.value vdisplace.value width.value) x; } } Hist_plot_item = class Menuaction "Plot _Object" "plot an object as a bar, point or line graph" { action x = class _result { _vislevel = 3; caption = Expression "Chart caption" "none"; format = Option_enum "Format" Plot_format.names "YYYY"; style = Option_enum "Style" Plot_style.names "Line"; auto = Toggle "Auto Range" true; xmin = Expression "X range minimum" 0; xmax = Expression "X range maximum" 1; ymin = Expression "Y range minimum" 0; ymax = Expression "Y range maximum" 1; xcaption = Expression "X axis caption" "none"; ycaption = Expression "Y axis caption" "none"; series_captions = Expression "Series captions" ["Band 0"]; _result = Plot options (image x) { options = [$style => style.value, $format => format.value] ++ range ++ captions; range = [], auto = [$xmin => xmin.expr, $xmax => xmax.expr, $ymin => ymin.expr, $ymax => ymax.expr]; captions = concat (map test caption_options) ++ [$series_captions => series_captions.expr] { caption_options = [ $caption => caption.expr, $xcaption => xcaption.expr, $ycaption => ycaption.expr ]; test x = [], value == "none" = [option_name => value] { [option_name, value] = x; } } image x = image (extract_arrow 0 0 1 x), is_Arrow x = get_image x, has_image x = x2b im, b == 1 = im { im = get_image (to_image x); w = get_width im; h = get_height im; b = get_bands im; // matrix to image makes a 1-band mxn image // we need to put columns into bands x2b im = bandjoin (map extract_col [0 .. w - 1]) { extract_col x = extract_area x 0 1 h im; } } } } } nip2-8.7.0/share/nip2/compat/8.6/Object.def0000644000175000017500000000220513330327312014751 00000000000000Object_duplicate_item = class Menuaction "_Duplicate" "take a copy of an object" { action x = map_unary copy x; } #separator Object_list_to_group_item = class Menuaction "_List to Group" "turn a list of objects into a group" { action x = to_group x; } Object_group_to_list_item = class Menuaction "_Group to List" "turn a group into a list of objects" { action x = to_list x; } #separator Object_break_item = class Menuaction "_Break Up Object" "break an object into a list of components" { action x = map_unary break x { break x = bandsplit x, is_Image x = map Vector x.value, is_Matrix x = x.value, is_Vector x || is_Real x = error "Breakup: not Image/Matrix/Vector/Real"; } } Object_assemble_item = class Menuaction "_Assemble Objects" "assemble a list of objects into a single object" { action x = map_unary ass x { ass x = [], x == [] = Vector x, is_real_list x = Matrix x, is_matrix x = bandjoin x, is_listof is_Image x = Vector (map get_value x), is_listof is_Real x = Matrix (map get_value x), is_listof is_Vector x = error "Assemble: not list of Image/Vector/Real/image/real"; } } nip2-8.7.0/share/nip2/compat/8.6/Makefile.in0000644000175000017500000003700213350464104015136 00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = share/nip2/compat/8.6 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(startdir)" DATA = $(start_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BISON = @BISON@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DLLWRAP = @DLLWRAP@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FFTW3_CFLAGS = @FFTW3_CFLAGS@ FFTW3_LIBS = @FFTW3_LIBS@ FGREP = @FGREP@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_LIBS = @GSL_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ IP_CFLAGS = @IP_CFLAGS@ IP_LIBS = @IP_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBGOFFICE_CFLAGS = @LIBGOFFICE_CFLAGS@ LIBGOFFICE_LIBS = @LIBGOFFICE_LIBS@ LIBGSF_CFLAGS = @LIBGSF_CFLAGS@ LIBGSF_LIBS = @LIBGSF_LIBS@ LIBGVC_CFLAGS = @LIBGVC_CFLAGS@ LIBGVC_LIBS = @LIBGVC_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ 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@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ REQUIRED_PACKAGES_CFLAGS = @REQUIRED_PACKAGES_CFLAGS@ REQUIRED_PACKAGES_LIBS = @REQUIRED_PACKAGES_LIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOP_SRCDIR = @TOP_SRCDIR@ UPDATE_DESKTOP_DATABASE = @UPDATE_DESKTOP_DATABASE@ UPDATE_MIME_DATABASE = @UPDATE_MIME_DATABASE@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XDG_OPEN = @XDG_OPEN@ XGETTEXT = @XGETTEXT@ 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@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ startdir = $(pkgdatadir)/compat/8.6 start_DATA = \ Colour.def \ _convert.def \ Filter.def \ _generate.def \ Histogram.def \ Image.def \ _joe_extra.def \ _joe_utilities.def \ _list.def \ _magick.def \ Magick.def \ Math.def \ Matrix.def \ _Object.def \ Object.def \ _predicate.def \ _stdenv.def \ Tasks.def \ _types.def \ Widgets.def EXTRA_DIST = $(start_DATA) all: all-am .SUFFIXES: $(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) --foreign share/nip2/compat/8.6/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign share/nip2/compat/8.6/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): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-startDATA: $(start_DATA) @$(NORMAL_INSTALL) @list='$(start_DATA)'; test -n "$(startdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(startdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(startdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(startdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(startdir)" || exit $$?; \ done uninstall-startDATA: @$(NORMAL_UNINSTALL) @list='$(start_DATA)'; test -n "$(startdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(startdir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: 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 check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(startdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-startDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-startDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-startDATA install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags-am uninstall uninstall-am uninstall-startDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: nip2-8.7.0/share/nip2/compat/8.6/Matrix.def0000644000175000017500000002573113330327312015020 00000000000000 Matrix_build_item = class Menupullright "_New" "make a new matrix of some sort" { Plain_item = class Menuaction "_Plain" "make a new plain matrix widget" { action = Matrix (identity_matrix 3); } Convolution_item = class Menuaction "_Convolution" "make a new convolution matrix widget" { action = Matrix_con 1 0 [[0, 0, 0], [0, 1, 0], [0, 0, 0]]; } Recombination_item = class Menuaction "_Recombination" "make a new recombination matrix widget" { action = Matrix_rec (identity_matrix 3); } Morphology_item = class Menuaction "_Morphology" "make a new morphology matrix widget" { action = Matrix_mor [[0, 0, 0], [0, 255, 0], [0, 0, 0]]; } sep1 = Menuseparator; Matrix_identity_item = class Menuaction "_Identity" "make an identity matrix" { action = identity (identity_matrix 5); identity v = class _result { _vislevel = 3; s = Expression "Size" (len v); _result = Matrix (identity_matrix (to_real s)), to_real s != len v; = Matrix v; Matrix_vips value scale offset filename display = identity value; } } Matrix_series_item = class Menuaction "_Series" "make a series" { action = series (mkseries 0 1 5); mkseries s t e = transpose [[to_real s, to_real s + to_real t .. to_real e]]; series v = class _result { _vislevel = 3; _s = v?0?0; _t = v?1?0 - v?0?0; _e = (last v)?0; s = Expression "Start value" _s; t = Expression "Step by" _t; e = Expression "End value" _e; _result = Matrix (mkseries s t e), to_real s != _s || to_real t != _t || to_real e != _e = Matrix v; Matrix_vips value scale offset filename display = series value; } } Matrix_square_item = class Menuaction "_Square" "make a square matrix" { action = square (mksquare 5); mksquare s = replicate s (take s [1, 1 ..]); square v = class _result { _vislevel = 3; s = Expression "Size" (len v); _result = Matrix_con (sum v) 0 v, len v == to_real s = Matrix_con (sum m) 0 m { m = mksquare (to_real s); } Matrix_vips value scale offset filename display = square value; } } Matrix_circular_item = class Menuaction "_Circular" "make a circular matrix" { action = circle (mkcircle 3); mkcircle r = map2 (map2 pyth) xes yes { line = [-r .. r]; xes = replicate (2 * r + 1) line; yes = transpose xes; pyth a b = 1, (a**2 + b**2) ** 0.5 <= r = 0; } circle v = class _result { _vislevel = 3; r = Expression "Radius" ((len v - 1) / 2); _result = Matrix_con (sum v) 0 v, len v == r.expr * 2 + 1 = Matrix_con (sum m) 0 m { m = mkcircle (to_real r); } Matrix_vips value scale offset filename display = circle value; } } Matrix_gaussian_item = class Menuaction "_Gaussian" "make a gaussian matrix" { action = class _result { _vislevel = 3; s = Scale "Sigma" 0.001 10 1; ma = Scale "Minimum amplitude" 0 1 0.2; integer = Toggle "Integer" false; _result = fn s.value ma.value { fn = im_gauss_imask, integer = im_gauss_dmask; } } } Matrix_laplacian_item = class Menuaction "_Laplacian" "make the Laplacian of a Gaussian matrix" { action = class _result { _vislevel = 3; s = Scale "Sigma" 0.001 10 1.5; ma = Scale "Minimum amplitude" 0 1 0.1; integer = Toggle "Integer" false; _result = fn s.value ma.value { fn = im_log_imask, integer = im_log_dmask; } } } } Matrix_to_matrix_item = class Menuaction "Con_vert to Matrix" "convert anything to a matrix" { action x = to_matrix x; } #separator Matrix_extract_item = class Menupullright "_Extract" "extract rows or columns from a matrix" { Rows_item = class Menuaction "_Rows" "extract rows" { action x = class _result { _vislevel = 3; first = Expression "Extract from row" 0; number = Expression "Extract this many rows" 1; _result = map_unary process x { process x = extract_area 0 first (get_width x) number x; } } } Columns_item = class Menuaction "_Columns" "extract columns" { action x = class _result { _vislevel = 3; first = Expression "Extract from column" 0; number = Expression "Extract this many columns" 1; _result = map_unary process x { process mat = extract_area first 0 number (get_height x) x; } } } Area_item = class Menuaction "_Area" "extract area" { action x = class _result { _vislevel = 3; left = Expression "First column" 0; top = Expression "First row" 0; width = Expression "Number of columns" 1; height = Expression "Number of rows" 1; _result = map_unary process x { process mat = extract_area left top width height x; } } } Diagonal_item = class Menuaction "_Diagonal" "extract diagonal" { action x = class _result { _vislevel = 3; which = Option "Extract" [ "Leading Diagonal", "Trailing Diagonal" ] 0; _result = map_unary process x { process mat = mat.Matrix_base (map2 extr [0..] mat.value), which == 0 = mat.Matrix_base (map2 extr [mat.width - 1, mat.width - 2 .. 0] mat.value); extr n l = [l?n]; } } } } Matrix_insert_item = class Menupullright "_Insert" "insert rows or columns into a matrix" { // make a new 8-bit uchar image of wxh with pixels set to p // use to generate new cells newim w h p = image_new w h 1 Image_format.UCHAR Image_coding.NOCODING Image_type.B_W p 0 0; Rows_item = class Menuaction "_Rows" "insert rows" { action x = class _result { _vislevel = 3; first = Expression "Insert at row" 0; number = Expression "Insert this many rows" 1; item = Expression "Set new cells to" 0; _result = map_unary process x { process x = foldl1 join_tb (concat [top, new, bottom]) { top = [extract_area 0 0 w f x], f > 0 = []; new = [(if is_Matrix x then to_matrix else id) (newim w number item.expr)]; bottom = [extract_area 0 f w (h - f) x], f < h = []; f = to_real first; w = get_width x; h = get_height x; } } } } Columns_item = class Menuaction "_Columns" "insert columns" { action x = class _result { _vislevel = 3; first = Expression "Insert at column" 0; number = Expression "Insert this many columns" 1; item = Expression "Set new cells to" 0; _result = map_unary process x { process x = foldl1 join_lr (concat [left, new, right]) { left = [extract_area 0 0 f h x], f > 0 = []; new = [(if is_Matrix x then to_matrix else id) (newim number h item.expr)]; right = [extract_area f 0 (w - f) h x], f < w = []; f = to_real first; w = get_width x; h = get_height x; } } } } } Matrix_delete_item = class Menupullright "_Delete" "delete rows or columns from a matrix" { // remove number of items, starting at first delete first number l = take (to_real first) l ++ drop (to_real first + to_real number) l; Rows_item = class Menuaction "_Rows" "delete rows" { action x = class _result { _vislevel = 3; first = Expression "Delete from row" 0; number = Expression "Delete this many rows" 1; _result = map_unary process x { process x = foldl1 join_tb (concat [top, bottom]) { top = [extract_area 0 0 w f x], f > 0 = []; bottom = [extract_area 0 b w (h - b) x], b < h = []; f = to_real first; n = to_real number; b = f + n; w = get_width x; h = get_height x; } } } } Columns_item = class Menuaction "_Columns" "delete columns" { action x = class _result { _vislevel = 3; first = Expression "Delete from column" 0; number = Expression "Delete this many columns" 1; _result = map_unary process x { process x = foldl1 join_lr (concat [left, right]) { left = [extract_area 0 0 f h x], f > 0 = []; right = [extract_area r 0 (w - r) h x], r < w = []; f = to_real first; n = to_real number; r = f + n; w = get_width x; h = get_height x; } } } } } Matrix_join = class Menupullright "_Join" "join two matricies" { Left_right_item = class Menuaction "_Left to Right" "join two matricies left-right" { action a b = map_binary join_lr a b; } Top_bottom_item = class Menuaction "_Top to Bottom" "joiin two matricies top-bottom" { action a b = map_binary join_tb a b; } } Matrix_rotate_item = class Menupullright "_Rotate" "clockwise rotation by fixed angles" { rot90 = Image_transform_item.Rotate_item.Fixed_item.Rot90_item; rot180 = Image_transform_item.Rotate_item.Fixed_item.Rot180_item; rot270 = Image_transform_item.Rotate_item.Fixed_item.Rot270_item; Matrix_rot45_item = class Menuaction "_45 Degrees" "45 degree rotate (square, odd-length-sides only)" { action x = map_unary rot45 x; } } Matrix_flip_item = Image_transform_item.Flip_item; Matrix_sort_item = class Menuaction "_Sort" "sort by column or row" { action x = class _result { _vislevel = 3; o = Option (_ "Orientation") [ _ "Sort by column", _ "Sort by row" ] 0; i = Expression (_ "Sort on index") 0; d = Option (_ "Direction") [ _ "Ascending", _ "Descending" ] 0; _result = map_unary sort x { idx = to_real i; pred a b = a?idx <= b?idx, d == 0 = a?idx >= b?idx; sort x = (x.Matrix_base @ sortc pred) x.value, o == 0 = (x.Matrix_base @ transpose @ sortc pred @ transpose) x.value; } } } #separator Matrix_invert_item = class Menuaction "In_vert" "calculate inverse matrix" { action x = map_unary (converse power (-1)) x; } Matrix_transpose_item = class Menuaction "_Transpose" "swap rows and columns" { action x = map_unary transpose x; } #separator Matrix_plot_scatter_item = class Menuaction "_Plot Scatter" "plot a scatter graph of a matrix of [x,y1,y2,..] coordinates" { action x = class _result { _check_args = [ [x, "x", check_Matrix] ]; _vislevel = 3; auto = Toggle "Auto Range" true; xmin = Expression "X range minimum" 0; xmax = Expression "X range maximum" 1; ymin = Expression "Y range minimum" 0; ymax = Expression "Y range maximum" 1; _result = Plot options ((x2b @ get_image @ to_image) x) { options = [$style => Plot_style.POINT, $format => Plot_format.XYYY] ++ range; range = [], auto = [$xmin => xmin.expr, $xmax => xmax.expr, $ymin => ymin.expr, $ymax => ymax.expr]; // matrix to image makes a 1-band mxn image // we need to put columns into bands x2b im = bandjoin (map extract_col [0 .. w - 1]) { w = get_width im; h = get_height im; b = get_bands im; extract_col x = extract_area x 0 1 h im; } } } } Matrix_plot_item = Hist_plot_item; Matrix_buildlut_item = class Menuaction "_Build LUT From Scatter" "make a lookup table from a matrix of [x,y1,y2..] coordinates" { action x = class _result { _check_args = [ [x, "x", check_Matrix] ]; _result = buildlut x; } } nip2-8.7.0/share/nip2/compat/8.6/_convert.def0000644000175000017500000005063113330327312015370 00000000000000 /* Try to make a Matrix ... works for Vector/Image/Real, plus image/real */ to_matrix x = to_matrix x.expr, is_Expression x = x, is_Matrix x = oo_unary_function to_matrix_op x, is_class x = tom x { to_matrix_op = Operator "to_matrix" tom Operator_type.COMPOUND false; tom x = Matrix (itom x), is_image x = Matrix [[x]], is_real x = Matrix [x], is_real_list x = Matrix x, is_matrix x = error (_ "bad arguments to " ++ "to_matrix"); itom i = (im_vips2mask ((double) i)).value, is_image i = error (_ "not image"); } /* Try to make a Vector ... works for Vector/Image/Real, plus image/real */ to_vector x = to_vector x.expr, is_Expression x = x, is_Vector x = oo_unary_function to_vector_op x, is_class x = tov x { to_vector_op = Operator "to_vector" tov Operator_type.COMPOUND false; tov x = Vector (itov x), is_image x = Vector [x], is_real x = Vector x, is_real_list x = Vector x?0, is_matrix x && len x == 1 = Vector (transpose x)?0, is_matrix x && len x?0 == 1 = error (_ "bad arguments to " ++ "to_vector"); itov i = v, is_image i = error (_ "not image") { m = im_vips2mask ((double) i); v = m.value?0, m.height == 1 = (transpose m.value)?0, m.width == 1 = error (_ "image is not 1xN or Nx1"); } } /* Try to make an Image ... works for Vector/Matrix/Real, plus image/real * Special case for Colour ... pull out the colour_space and set Type in the * image. */ to_image x = to_image x.expr, is_Expression x = Image x.value, is_Plot x = x, is_Image x = Image (image_set_type (Image_type.colour_spaces.lookup 0 1 x.colour_space) (mtoi [x.value])), is_Colour x = oo_unary_function to_image_op x, is_class x = toi x { to_image_op = Operator "to_image" toi Operator_type.COMPOUND false; toi x = Image x, is_image x = Image (mtoi [[x]]), is_real x = Image (mtoi [x]), is_real_list x = Image (mtoi x), is_matrix x = error (_ "bad arguments to " ++ "to_image"); // [[real]] -> image mtoi m = im_mask2vips (Matrix m), width != 3 = joinup (im_mask2vips (Matrix m)) { width = len m?0; height = len m; joinup i = b1 ++ b2 ++ b3 { b1 = extract_area 0 0 1 height i; b2 = extract_area 1 0 1 height i; b3 = extract_area 2 0 1 height i; } } } // like to_image, but we do 1x1 pixel + x, then embed it up // always make an unwrapped image for speed ... this gets used by ifthenelse // and stuff like that // format can be NULL, meaning set format from x to_image_size width height bands format x = x, is_image x = x.value, is_Image x = im'' { // we want x to set the target format if we don't have one, so we // can't use image_new im = im_black 1 1 bands + x; im' = clip2fmt format im, format != NULL = im; im'' = embed 1 0 0 width height im'; } /* Try to make a Colour. */ to_colour x = to_colour x.expr, is_Expression x = x, is_Colour x = to_colour (extract_area x.left x.top 1 1 x.image), is_Mark x = oo_unary_function to_colour_op x, is_class x = toc x { to_colour_op = Operator "to_colour" toc Operator_type.COMPOUND false; toc x = Colour (colour_space (get_type x)) (map mean (bandsplit (get_image x))), has_image x && has_type x = Colour "sRGB" [x, x, x], is_real x // since Colour can't do mono = Colour "sRGB" x, is_real_list x && is_list_len 3 x = map toc x, is_matrix x = error (_ "bad arguments to " ++ "to_colour"); colour_space type = table.get_name type, table.has_name type = error (_ "unable to make Colour from " ++ table.get_name type ++ _ " image") { table = Image_type.colour_spaces; } } /* Try to make a real. (not a Real!) */ to_real x = to_real x.expr, is_Expression x = oo_unary_function to_real_op x, is_class x = tor x { to_real_op = Operator "to_real" tor Operator_type.COMPOUND false; tor x = x, is_real x = abs x, is_complex x = 1, is_bool x && x = 0, is_bool x && !x = error (_ "bad arguments to " ++ "to_real"); } to_int x = (int) (to_real x); /* Try to make a list ... ungroup, basically. We remove the innermost layer of * Groups. */ to_list x = x.value, is_Group x && !contains_Group x.value = Group (map to_list x.value), is_Group x = x; /* Try to make a group. The outermost list objects become Group()'d. */ to_group x = Group x, is_list x = Group (map to_group x.value), is_Group x = x; /* Parse a positive integer. */ parse_pint l = foldl acc 0 l { acc sofar ch = sofar * 10 + parse_c ch; /* Turn a char digit to a number. */ parse_c ch = error (_ "not a digit"), !is_digit ch = (int) ch - (int) '0'; } /* Parse an integer, with an optional sign character. */ parse_int l = error (_ "badly formed number"), !is_list_len 2 parts = sign * n { parts = splitpl [member "+-", is_digit] l; n = parse_pint parts?1; sign = 1, parts?0 == [] || parts?0 == "+" = -1; } /* Parse a float. * [+-]?[0-9]*([.][0-9]*)?(e[0-9]+)? */ parse_float l = err, !is_list_len 4 parts = sign * (abs ipart + fpart) * 10 ** exp { err = error (_ "badly formed number"); parts = splitpl [ member "+-0123456789", member ".0123456789", member "eE", member "+-0123456789" ] l; ipart = parse_int parts?0; sign = 1, ipart >= 0 = -1; fpart = 0, parts?1 == []; = err, parts?1?0 != '.' = parse_pint (tl parts?1) / 10 ** (len parts?1 - 1); exp = 0, parts?2 == [] && parts?3 == [] = err, parts?2 == [] = parse_int parts?3; } /* Parse a time in "hh:mm:ss" into seconds. We could do this in one line :) = (sum @ map2 multiply (iterate (multiply 60) 1) @ reverse @ map parse_pint @ map (subscript (splitpl [is_digit, equal ':', is_digit, equal ':', is_digit] l))) [0,2,4]; but it's totally unreadable. */ parse_time l = error (_ "badly formed time"), !is_list_len 5 parts = s + 60 * m + 60 * 60 * h { parts = splitpl [is_digit, equal ':', is_digit, equal ':', is_digit] l; h = parse_int parts?0; m = parse_int parts?2; s = parse_int parts?4; } /* matrix to convert D65 XYZ to D50 XYZ ... direct conversion, found by * measuring a macbeth chart in D50 and D65 and doing a LMS to get a matrix */ D652D50_direct = Matrix [[ 1.13529, -0.0604663, -0.0606321 ], [ 0.0975399, 0.935024, -0.0256156 ], [ -0.0336428, 0.0414702, 0.994135 ]]; D502D65_direct = D652D50_direct ** -1; /* Convert normalised XYZ to bradford RGB. */ XYZ2RGBbrad = Matrix [[0.8951, 0.2664, -0.1614], [-0.7502, 1.7135, 0.0367], [0.0389, -0.0685, 1.0296]]; /* Convert bradford RGB to normalised XYZ. */ RGBbrad2XYZ = XYZ2RGBbrad ** -1; D93_whitepoint = Vector [89.7400, 100, 130.7700]; D75_whitepoint = Vector [94.9682, 100, 122.5710]; D65_whitepoint = Vector [95.0470, 100, 108.8827]; D55_whitepoint = Vector [95.6831, 100, 92.0871]; D50_whitepoint = Vector [96.4250, 100, 82.4680]; A_whitepoint = Vector [109.8503, 100, 35.5849]; // 2856K B_whitepoint = Vector [99.0720, 100, 85.2230]; // 4874K C_whitepoint = Vector [98.0700, 100, 118.2300]; // 6774K E_whitepoint = Vector [100, 100, 100]; // ill. free D3250_whitepoint = Vector [105.6590, 100, 45.8501]; Whitepoints = Enum [ $D93 => D93_whitepoint, $D75 => D75_whitepoint, $D65 => D65_whitepoint, $D55 => D55_whitepoint, $D50 => D50_whitepoint, $A => A_whitepoint, $B => B_whitepoint, $C => C_whitepoint, $E => E_whitepoint, $D3250 => D3250_whitepoint ]; /* Convert D50 XYZ to D65 using the bradford chromatic adaptation approx. */ im_D502D65 xyz = xyz''' { xyz' = xyz / D50_whitepoint; rgb = recomb XYZ2RGBbrad xyz'; // move white in bradford RGB rgb' = rgb / Vector [0.94, 1.02, 1.33]; xyz'' = recomb RGBbrad2XYZ rgb'; // back to D65 xyz''' = xyz'' * D65_whitepoint; } /* Convert D65 XYZ to D50 using the bradford approx. */ im_D652D50 xyz = xyz''' { xyz' = xyz / D65_whitepoint; rgb = recomb XYZ2RGBbrad xyz'; // move white in bradford RGB rgb' = rgb * Vector [0.94, 1.02, 1.33]; xyz'' = recomb RGBbrad2XYZ rgb'; xyz''' = xyz'' * D50_whitepoint; } /* Convert D50 XYZ to Lab. */ im_D50XYZ2Lab xyz = im_XYZ2Lab_temp xyz D50_whitepoint.value?0 D50_whitepoint.value?1 D50_whitepoint.value?2; im_D50Lab2XYZ lab = im_Lab2XYZ_temp lab D50_whitepoint.value?0 D50_whitepoint.value?1 D50_whitepoint.value?2; /* ... and mono conversions */ im_sRGB2mono in = (image_set_type Image_type.B_W @ clip2fmt (get_header "BandFmt" in) @ recomb (Matrix [[.3, .6, .1]])) in; im_mono2sRGB in = image_set_type Image_type.sRGB (in ++ in ++ in); im_sRGB2Lab = im_XYZ2Lab @ im_sRGB2XYZ; im_Lab2sRGB = im_XYZ2sRGB @ im_Lab2XYZ; // from the 16 bit RGB and GREY formats im_1628 x = im_clip (x >> 8); im_162f x = x / 256; im_8216 x = (im_clip2us x) << 8; im_f216 x = im_clip2us (x * 256); im_RGB162GREY16 in = (image_set_type Image_type.GREY16 @ clip2fmt (get_header "BandFmt" in) @ recomb (Matrix [[.3, .6, .1]])) in; im_GREY162RGB16 in = image_set_type Image_type.RGB16 (in ++ in ++ in); /* The vips8 scRGB functions. */ im_sRGB2scRGB in = out { [out] = vips_call "sRGB2scRGB" [in] []; } im_scRGB2sRGB in = out { [out] = vips_call "scRGB2sRGB" [in] []; } im_scRGB2XYZ in = out { [out] = vips_call "scRGB2XYZ" [in] []; } im_XYZ2scRGB in = out { [out] = vips_call "XYZ2scRGB" [in] []; } /* apply a func to an image ... make it 1 or 3 bands, and reapply other bands * on the way out. Except if it's LABPACK. */ colour_apply fn x = fn x, b == 1 || b == 3 || c == Image_coding.LABPACK = x'' { b = get_bands x; c = get_coding x; first = extract_bands 0 3 x, b > 3 = extract_bands 0 1 x; tail = extract_bands 3 (b - 3) x, b > 3 = extract_bands 1 (b - 1) x; x' = fn first; x'' = x' ++ clip2fmt (get_format x') tail; } /* Any 1-ary colour op, applied to Vector/Image/Matrix or image */ colour_unary fn x = oo_unary_function colour_op x, is_class x = colour_apply fn x, is_image x = colour_apply fn [x], is_real x = error (_ "bad arguments to " ++ "colour_unary") { // COMPOUND_REWRAP ... signal to the colour class to go to image and // back colour_op = Operator "colour_unary" colour_object Operator_type.COMPOUND_REWRAP false; colour_object x = colour_real_list x, is_real_list x = map colour_real_list x, is_matrix x = colour_apply fn x, is_image x = error (_ "bad arguments to " ++ "colour_unary"); colour_real_list l = (to_matrix (fn (float) (to_image (Vector l)).value)).value?0; } /* Any symmetric 2-ary colour op, applied to Vector/Image/Matrix or image ... * name is op name for error messages etc. */ colour_binary name fn x y = oo_binary_function colour_op x y, is_class x = oo_binary'_function colour_op x y, is_class y = fn x y, is_image x && is_image y = error (_ "bad arguments to " ++ name) { colour_op = Operator name colour_object Operator_type.COMPOUND_REWRAP true; colour_object x y = fn x y, is_image x && is_image y = colour_real_list fn x y, is_real_list x && is_real_list y = map (colour_real_list fn x) y, is_real_list x && is_matrix y = map (colour_real_list (converse fn) y) x, is_matrix x && is_real_list y = map2 (colour_real_list fn) x y, is_matrix x && is_matrix y = error (_ "bad arguments to " ++ name); colour_real_list fn l1 l2 = (to_matrix (fn i1 i2)).value?0 { i1 = (float) (to_image (Vector l1)).value; i2 = (float) (to_image (Vector l2)).value; } } _colour_conversion_table = [ /* Lines are [space-from, space-to, conversion function]. Could do * this as a big array, but table lookup feels safer. */ [B_W, B_W, image_set_type B_W], [B_W, XYZ, im_sRGB2XYZ @ im_mono2sRGB @ im_clip], [B_W, YXY, im_XYZ2Yxy @ im_sRGB2XYZ @ im_mono2sRGB @ im_clip], [B_W, LAB, im_sRGB2Lab @ im_mono2sRGB @ im_clip], [B_W, LCH, im_Lab2LCh @ im_sRGB2Lab @ im_mono2sRGB @ im_clip], [B_W, UCS, im_XYZ2UCS @ im_sRGB2XYZ @ im_mono2sRGB @ im_clip], [B_W, RGB, im_XYZ2disp @ im_sRGB2XYZ @ im_mono2sRGB @ im_clip], [B_W, sRGB, im_mono2sRGB @ im_clip], [B_W, scRGB, im_sRGB2scRGB @ im_mono2sRGB @ im_clip], [B_W, RGB16, image_set_type RGB16 @ im_8216 @ im_mono2sRGB], [B_W, GREY16, image_set_type GREY16 @ im_8216], [B_W, LABQ, im_Lab2LabQ @ im_sRGB2Lab @ im_mono2sRGB @ im_clip], [B_W, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_sRGB2Lab @ im_mono2sRGB @ im_clip], [XYZ, B_W, im_sRGB2mono @ im_XYZ2sRGB @ im_clip2f], [XYZ, XYZ, image_set_type XYZ], [XYZ, YXY, im_XYZ2Yxy @ im_clip2f], [XYZ, LAB, im_XYZ2Lab @ im_clip2f], [XYZ, LCH, im_Lab2LCh @ im_XYZ2Lab], [XYZ, UCS, im_XYZ2UCS @ im_clip2f], [XYZ, RGB, im_XYZ2disp @ im_clip2f], [XYZ, sRGB, im_XYZ2sRGB @ im_clip2f], [XYZ, scRGB, im_XYZ2scRGB @ im_clip2f], [XYZ, LABQ, im_Lab2LabQ @ im_XYZ2Lab @ im_clip2f], [XYZ, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_XYZ2Lab @ im_clip2f], [YXY, B_W, im_sRGB2mono @ im_XYZ2sRGB @ im_Yxy2XYZ @ im_clip2f], [YXY, XYZ, im_Yxy2XYZ @ im_clip2f], [YXY, YXY, image_set_type YXY], [YXY, LAB, im_XYZ2Lab @ im_Yxy2XYZ @ im_clip2f], [YXY, LCH, im_Lab2LCh @ im_XYZ2Lab @ im_Yxy2XYZ @ im_clip2f], [YXY, UCS, im_XYZ2UCS @ im_Yxy2XYZ @ im_clip2f], [YXY, RGB, im_XYZ2disp @ im_Yxy2XYZ @ im_clip2f], [YXY, sRGB, im_XYZ2sRGB @ im_Yxy2XYZ @ im_clip2f], [YXY, scRGB, im_XYZ2scRGB @ im_Yxy2XYZ @ im_clip2f], [YXY, LABQ, im_Lab2LabQ @ im_XYZ2Lab @ im_Yxy2XYZ @ im_clip2f], [YXY, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_XYZ2Lab @ im_Yxy2XYZ @ im_clip2f], [LAB, B_W, im_sRGB2mono @ im_Lab2sRGB @ im_Lab2XYZ @ im_clip2f], [LAB, XYZ, im_Lab2XYZ @ im_clip2f], [LAB, YXY, im_XYZ2Yxy @ im_Lab2XYZ @ im_clip2f], [LAB, LAB, image_set_type LAB @ im_clip2f], [LAB, LCH, im_Lab2LCh @ im_clip2f], [LAB, UCS, im_Lab2UCS @ im_clip2f], [LAB, RGB, im_Lab2disp @ im_clip2f], [LAB, sRGB, im_Lab2sRGB @ im_clip2f], [LAB, scRGB, im_XYZ2scRGB @ im_Lab2XYZ @ im_clip2f], [LAB, LABQ, im_Lab2LabQ @ im_clip2f], [LAB, LABS, im_Lab2LabS @ im_clip2f], [LCH, B_W, im_sRGB2mono @ im_Lab2sRGB @ im_LCh2Lab @ im_clip2f], [LCH, XYZ, im_Lab2XYZ @ im_LCh2Lab @ im_clip2f], [LCH, YXY, im_XYZ2Yxy @ im_Lab2XYZ @ im_LCh2Lab @ im_clip2f], [LCH, LAB, im_LCh2Lab @ im_clip2f], [LCH, LCH, image_set_type LCH], [LCH, UCS, im_LCh2UCS @ im_clip2f], [LCH, RGB, im_Lab2disp @ im_LCh2Lab @ im_clip2f], [LCH, sRGB, im_Lab2sRGB @ im_LCh2Lab @ im_clip2f], [LCH, scRGB, im_XYZ2scRGB @ im_Lab2XYZ @ im_LCh2Lab @ im_clip2f], [LCH, LABQ, im_Lab2LabQ @ im_LCh2Lab @ im_clip2f], [LCH, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_LCh2Lab @ im_clip2f], [UCS, B_W, im_sRGB2mono @ im_XYZ2sRGB @ im_UCS2XYZ @ im_clip2f], [UCS, XYZ, im_UCS2XYZ @ im_clip2f], [UCS, YXY, im_XYZ2Yxy @ im_Lab2XYZ @ im_UCS2Lab @ im_clip2f], [UCS, LAB, im_UCS2Lab @ im_clip2f], [UCS, LCH, im_UCS2LCh @ im_clip2f], [UCS, UCS, image_set_type UCS], [UCS, RGB, im_Lab2disp @ im_UCS2Lab @ im_clip2f], [UCS, sRGB, im_Lab2sRGB @ im_UCS2Lab @ im_clip2f], [UCS, scRGB, im_XYZ2scRGB @ im_Lab2XYZ @ im_UCS2Lab @ im_clip2f], [UCS, LABQ, im_Lab2LabQ @ im_UCS2Lab @ im_clip2f], [UCS, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_UCS2Lab @ im_clip2f], [RGB, B_W, im_sRGB2mono @ im_XYZ2sRGB @ im_disp2XYZ @ im_clip], [RGB, XYZ, im_disp2XYZ @ im_clip], [RGB, YXY, im_XYZ2Yxy @ im_disp2XYZ @ im_clip], [RGB, LAB, im_disp2Lab @ im_clip], [RGB, LCH, im_Lab2LCh @ im_disp2Lab @ im_clip], [RGB, UCS, im_Lab2UCS @ im_disp2Lab @ im_clip], [RGB, RGB, image_set_type RGB], [RGB, sRGB, im_XYZ2sRGB @ im_disp2XYZ @ im_clip], [RGB, scRGB, im_XYZ2scRGB @ im_disp2XYZ @ im_clip], [RGB, RGB16, image_set_type RGB16 @ im_8216], [RGB, GREY16, image_set_type GREY16 @ im_8216 @ im_sRGB2mono], [RGB, LABQ, im_Lab2LabQ @ im_disp2Lab @ im_clip], [RGB, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_disp2Lab @ im_clip], [sRGB, B_W, im_sRGB2mono], [sRGB, XYZ, im_sRGB2XYZ @ im_clip], [sRGB, YXY, im_XYZ2Yxy @ im_sRGB2XYZ @ im_clip], [sRGB, LAB, im_sRGB2Lab @ im_clip], [sRGB, LCH, im_Lab2LCh @ im_sRGB2Lab @ im_clip], [sRGB, UCS, im_XYZ2UCS @ im_sRGB2XYZ @ im_clip], [sRGB, RGB, im_XYZ2disp @ im_sRGB2XYZ @ im_clip], [sRGB, sRGB, image_set_type sRGB], [sRGB, scRGB, im_sRGB2scRGB @ im_clip], [sRGB, RGB16, image_set_type RGB16 @ im_8216], [sRGB, GREY16, image_set_type GREY16 @ im_8216 @ im_sRGB2mono], [sRGB, LABQ, im_Lab2LabQ @ im_sRGB2Lab @ im_clip], [sRGB, LABS, im_Lab2LabS @ im_sRGB2Lab @ im_clip], [scRGB, B_W, im_sRGB2mono @ im_scRGB2sRGB], [scRGB, XYZ, im_scRGB2XYZ], [scRGB, YXY, im_XYZ2Yxy @ im_scRGB2XYZ], [scRGB, LAB, im_XYZ2Lab @ im_scRGB2XYZ], [scRGB, LCH, im_Lab2LCh @ im_XYZ2Lab @ im_scRGB2XYZ], [scRGB, UCS, im_XYZ2UCS @ im_scRGB2XYZ], [scRGB, RGB, im_XYZ2disp @ im_scRGB2XYZ], [scRGB, sRGB, im_scRGB2sRGB], [scRGB, scRGB, image_set_type scRGB], [scRGB, RGB16, image_set_type RGB16 @ im_8216 @ im_scRGB2sRGB], [scRGB, GREY16, image_set_type GREY16 @ im_8216 @ im_sRGB2mono @ im_scRGB2sRGB], [scRGB, LABQ, im_Lab2LabQ @ im_XYZ2Lab @ im_scRGB2XYZ], [scRGB, LABS, im_Lab2LabS @ im_XYZ2Lab @ im_scRGB2XYZ], [RGB16, B_W, im_1628 @ im_sRGB2mono], [RGB16, RGB, image_set_type RGB @ im_1628], [RGB16, sRGB, image_set_type sRGB @ im_1628], [RGB16, scRGB, im_sRGB2scRGB], [RGB16, RGB16, image_set_type RGB16], [RGB16, GREY16, im_RGB162GREY16], [RGB16, LABS, im_LabQ2LabS @ im_Lab2LabQ @ im_sRGB2Lab], [GREY16, B_W, image_set_type B_W @ im_1628], [GREY16, RGB, im_mono2sRGB @ im_1628], [GREY16, sRGB, im_mono2sRGB @ im_1628], [GREY16, scRGB, im_sRGB2scRGB @ im_mono2sRGB], [GREY16, RGB16, im_GREY162RGB16], [GREY16, GREY16, image_set_type GREY16], [LABQ, B_W, im_sRGB2mono @ im_Lab2sRGB @ im_LabQ2Lab], [LABQ, XYZ, im_Lab2XYZ @ im_LabQ2Lab], [LABQ, YXY, im_XYZ2Yxy @ im_Lab2XYZ @ im_LabQ2Lab], [LABQ, LAB, im_LabQ2Lab], [LABQ, LCH, im_Lab2LCh @ im_LabQ2Lab], [LABQ, UCS, im_Lab2UCS @ im_LabQ2Lab], [LABQ, RGB, im_LabQ2disp], [LABQ, sRGB, im_Lab2sRGB @ im_LabQ2Lab], [LABQ, scRGB, im_XYZ2scRGB @ im_Lab2XYZ @ im_LabQ2Lab], [LABQ, LABQ, image_set_type LABQ], [LABQ, LABS, im_LabQ2LabS], [LABS, B_W, im_sRGB2mono @ im_Lab2sRGB @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, XYZ, im_Lab2XYZ @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, YXY, im_XYZ2Yxy @ im_Lab2XYZ @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, LAB, im_LabS2Lab], [LABS, LCH, im_Lab2LCh @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, UCS, im_Lab2UCS @ im_LabQ2Lab @ im_LabS2LabQ @ im_clip2s], [LABS, RGB, im_LabQ2disp @ im_LabS2LabQ @ im_clip2s], [LABS, sRGB, im_XYZ2sRGB @ im_Lab2XYZ @ im_LabS2Lab @ im_clip2s], [LABS, scRGB, im_XYZ2scRGB @ im_Lab2XYZ @ im_LabS2Lab @ im_clip2s], [LABS, LABQ, im_LabS2LabQ @ im_clip2s], [LABS, LABS, image_set_type LABS] ] { /* From Image_type ... repeat here for brevity. Use same ordering as * in Colour menu for consistency. */ B_W = 1; XYZ = 12; YXY = 23; LAB = 13; LCH = 19; UCS = 18; RGB = 17; sRGB = 22; scRGB = 28; RGB16 = 25; GREY16 = 26; LABQ = 16; LABS = 21; } /* Transform between two colour spaces. */ colour_transform from to in = colour_unary _colour_conversion_table?i?2 in, i >= 0 = error (_ "unable to convert " ++ Image_type.type_names.get_name from ++ _ " to " ++ Image_type.type_names.get_name to) { match x = x?0 == from && x?1 == to; i = index match _colour_conversion_table; } /* Transform to a colour space, assuming the type field in the input is * correct */ colour_transform_to to in = colour_transform (get_type in) to in; /* String for path separator on this platform. */ path_separator = expand "$SEP"; /* Form a relative pathname. * path_relative ["home", "john"] == "home/john" * path_relative [] == "" */ path_relative l = join_sep path_separator l; /* Form an absolute pathname. * path_absolute ["home", "john"] == "/home/john" * path_absolute [] == "/" * If the first component looks like 'A:', don't add an initial separator. */ path_absolute l = path_relative l, len l?0 > 1 && is_letter l?0?0 && l?0?1 == ':' = path_separator ++ path_relative l; /* Parse a pathname. * path_parse "/home/john" == ["home", "john"] * path_parse "home/john" == ["home", "john"] */ path_parse str = split (equal path_separator?0) str; /* Return $PATH, reformatted as [["comp1", "comp2"], ["comp1", "comp2"] ..] */ system_search_path = [vipsbin] ++ map path_parse (split (equal path_sep) (expand "$PATH")) { /* On some platforms we ship vips with a few extra progs. Search * $VIPSHOME/bin first. */ vipsbin = path_parse (expand "$VIPSHOME") ++ ["bin"]; path_sep = ':', expand "$SEP" == "/" = ';'; } /* Search $PATH for the first occurence of name, or "". */ search_for name = hits?0, hits != [] = "" { exe_name = name ++ expand "$EXEEXT"; form_path p = path_absolute (p ++ [exe_name]); paths = map form_path system_search_path; hits = dropwhile (equal []) (map search paths); } /* Search $PATH for the first occurence of name, error on failure. */ search_for_error name = path, path != "" = error (exe_name ++ " not found on your search path. " ++ "Check you have installed the program and it is on your PATH.") { exe_name = name ++ expand "$EXEEXT"; path = search_for name; } nip2-8.7.0/share/nip2/compat/8.6/_joe_utilities.def0000644000175000017500000005054213330327312016561 00000000000000/* ******Functions included in start/_NG_utilities.def:****** * * so_balance ref_meanmax im1 im2 mask blur gauss * * nonzero_mean im = no_out * * so_meanmax im = result * * so_calculate ref_meanmax im mask = result * * simple_frame frame im_w im_h ov cs ms bf option = result * * corner_frame frame im_w im_h ov cs ms bf = result * * build_frame r_tl r_tr r_bl r_br r_mt r_mb r_ml r_mr im_w im_h ov bf = result * * complex_frame frame im_w im_h ov cs es ms bf option= result * * complex_edge ra rb t bl d = rc * * frame_lr_min r_l r_r target bw = result * * frame_tb_min r_t r_b target bw = result * * frame_position_image im ref os colour= result * * merge_array bw arr = result * * merge_to_scale im target blend dir = result * * select_ellipse line width = mask * * select_tetragon p1 p2 p3 p4 = mask * * select_polygon pt_list = mask * * perspective_transform to from = trans'' * * sort_pts_clockwise l = l'' * */ /* Called from: * _NG_Extra.def Clone_area_item */ so_balance ref_meanmax im1 im2 mask gauss = result { //ref_meanmax = so_meanmax im1; so_values = so_calculate ref_meanmax im2 mask; im2_cor_a = clip2fmt im2.format im2'', has_member "format" im2 = im2'' {im2'' = im2 * (so_values?0) + (so_values?1);} // Option to convert replacement image to scaled gaussian noise im2_cor = im2_cor_a, gauss == false = clip2fmt im2_cor_a.format gauss_im {gauss_im = gaussnoise im2_cor_a.width im2_cor_a.height ref_meanmax?0 (deviation im2_cor_a);} result = im_blend (get_image mask) (get_image im2_cor) (get_image im1); }; //////////////////////////////////////////////////////////////////////////////// /* Calculates the mean of the non zero pixels. * * Called from: * _NG_utilities so_meanmax */ nonzero_mean im = no_out { zero_im = (im == 0); zero_mean = mean zero_im; no_mean = mean im; no_out = no_mean/(1 - (zero_mean/255)); }; //////////////////////////////////////////////////////////////////////////////// /* Calculates the max and nonzero mean of an image * * Called from: * _NG_utilities so_balance * _NG_utilities so_calculate * _NG_Extra.def Clone_area_item * _NG_Extra.def Balance_item.Balance_find_item */ so_meanmax im = result { mean_of_im = nonzero_mean im; adjusted_im = im - mean_of_im; max_of_im = max adjusted_im; result = [mean_of_im, max_of_im]; }; //////////////////////////////////////////////////////////////////////////////// /* Calculates the scale and offset required to match a reference mean and max * * Called from: * _NG_utilities so_balance * _NG_Extra.def Balance_item.Balance_find_item */ so_calculate ref_meanmax im mask = result { im' = if mask then im else 0; im_values = so_meanmax im'; mean_of_ref = ref_meanmax?0; mean_of_im = im_values?0; max_of_ref = ref_meanmax?1; max_of_im = im_values?1; scale = (max_of_ref)/(max_of_im); offset = mean_of_ref - (mean_of_im * scale); result = [ scale, offset ]; }; //////////////////////////////////////////////////////////////////////////////// /* Extends or shortens the central sections of a simple frame to fit round a given image. * * Called from: * _NG_Extra.def Frame_item.Simple_frame_item */ simple_frame frame im_w im_h ov cs ms bf option = result { cs' = (1 - cs); ms' = (0.5 - (ms/2)); ms'' = (1 - cs); //Regions r_tl = Region_relative frame 0 0 cs cs; r_tr = fliplr r_tl, option == true = Region_relative frame cs' 0 cs cs; r_bl = Region_relative frame 0 cs' cs cs; r_br = fliplr r_bl, option == true = Region_relative frame cs' cs' cs cs; r_mt = Region_relative frame ms' 0 ms cs; r_mb = Region_relative frame ms' ms'' ms cs; r_ml = Region_relative frame 0 ms' cs ms; r_mr = fliplr r_ml, option == true = Region_relative frame ms'' ms' cs ms; result = build_frame r_tl r_tr r_bl r_br r_mt r_mb r_ml r_mr im_w im_h ov bf; }; //////////////////////////////////////////////////////////////////////////////// /* Copies and extends a simple frame corner to produce a complete frame to fit round a given image. * * Called from: * _NG_Extra.def Frame_item.Frame_corner_item */ corner_frame frame im_w im_h ov cs ms bf = result { cs' = (1 - cs); ms' = (0.5 - (ms/2)); //Regions r_tl = Region_relative frame 0 0 cs cs; r_tr = fliplr r_tl; r_bl = fliptb r_tl; r_br = fliplr r_bl; r_mt = Region_relative frame ms' 0 ms cs; r_mb = fliptb r_mt; r_ml = Region_relative frame 0 ms' cs ms;; r_mr = fliplr r_ml; result = build_frame r_tl r_tr r_bl r_br r_mt r_mb r_ml r_mr im_w im_h ov bf; }; //////////////////////////////////////////////////////////////////////////////// /* Completes the frame building process for simple_frame and corner_frame. * * _NG_utilities simple_frame * _NG_utilities corner_frame */ build_frame r_tl r_tr r_bl r_br r_mt r_mb r_ml r_mr im_w im_h ov bf = result { //Find pixel thickness of frames section s_width = r_ml.width - mean (im_profile (map_unary fliplr (r_ml.value)?0) 1); s_height = r_mt.height - mean (im_profile (map_unary fliptb (r_mt.value)?0) 0); w_target = im_w + (2 * (s_width - ov)); h_target = im_h + (2 * (s_height - ov)); blend = bf * r_tl.width; cw_target = w_target - (2 * r_tl.width) + (2 * blend), w_target > (2 * r_tl.width) = w_target; ch_target = h_target - (2 * r_tl.height) + (2 * blend), h_target > (2 * r_tl.height) = h_target; //Use regions to produce sections top = merge_to_scale r_mt cw_target blend 0; bottom = merge_to_scale r_mb cw_target blend 0; left = merge_to_scale r_ml ch_target blend 1; right = merge_to_scale r_mr ch_target blend 1; middle = Image (image_new cw_target ch_target left.bands left.format left.coding left.type 0 0 0); //Build sections into full frame. row_1 = frame_lr_min r_tl r_tr w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[r_tl, top, r_tr]]; row_2 = frame_lr_min left right w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[left, middle, right]]; row_3 = frame_lr_min r_bl r_br w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[r_bl, bottom, r_br]]; result = frame_tb_min row_1 row_3 h_target blend, (h_target < (r_tl.height * 2)) = merge_array blend [[row_1], [row_2], [row_3]]; }; //////////////////////////////////////////////////////////////////////////////// /* Extends or shortens the central sections of a frame, preserving any central details on each * edge, to fit round a given image. * * Called from: * _NG_Extra.def Frame_item.Complex_frame_item */ complex_frame frame im_w im_h ov cs es ms bf option= result { cs' = (1 - cs); ms' = (0.5 - (ms/2)); es' = (0.25 - (es/2)); r_tl = Region_relative frame 0 0 cs cs; r_tr = fliplr r_tl, option == true = Region_relative frame cs' 0 cs cs; r_bl = Region_relative frame 0 cs' cs cs; r_br = fliplr r_bl, option == true = Region_relative frame cs' cs' cs cs; r_mt = Region_relative frame ms' 0 ms cs; r_mb = Region_relative frame ms' cs' ms cs; r_ml = Region_relative frame 0 ms' cs ms; r_mr = fliplr r_ml, option == true = Region_relative frame cs' ms' cs ms; r_et = Region_relative frame es' 0 es cs; r_eb = Region_relative frame es' cs' es cs; r_el = Region_relative frame 0 es' cs es; r_er = fliplr r_el, option == true = Region_relative frame cs' es' cs es; //Find pixel thickness of frames section s_width = r_el.width - mean (im_profile (map_unary fliplr (r_el.value)?0) 1); s_height = r_et.height - mean (im_profile (map_unary fliptb (r_et.value)?0) 0); w_target = im_w + (2 * (s_width - ov)); h_target = im_h + (2 * (s_height - ov)); min_size = foldr1 min_pair [r_tl.width, r_tl.height, r_mt.width, r_mt.height, r_et.width, r_et.height]; blend = bf * min_size; cw_target = w_target - (2 * r_tl.width) + (2 * blend); ch_target = h_target - (2 * r_tl.height) + (2 * blend); top = complex_edge r_mt r_et cw_target blend 0; bottom = complex_edge r_mb r_eb cw_target blend 0; left = complex_edge r_ml r_el ch_target blend 1; right = complex_edge r_mr r_er ch_target blend 1; middle = Image (image_new top.width left.height left.bands left.format left.coding left.type 0 0 0); //Build regions into full frame. row_1 = frame_lr_min r_tl r_tr w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[r_tl, top, r_tr]]; row_2 = frame_lr_min left right w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[left, middle, right]]; row_3 = frame_lr_min r_bl r_br w_target blend, ( w_target < (r_tl.width * 2)) = merge_array blend [[r_bl, bottom, r_br]]; result = frame_tb_min row_1 row_3 h_target blend, (h_target < (r_tl.height * 2)) = merge_array blend [[row_1], [row_2], [row_3]]; }; //////////////////////////////////////////////////////////////////////////////// /* Function called by complex frame, used to produce section * * Called from: * _NG_utilities.def complex_frame */ complex_edge ra rb t bl d = rc { e1 = ceil (ra.width - t)/2, d == 0 = 0; e2 = 0, d == 0 = ceil (ra.height - t)/2; e3 = t, d == 0 = ra.width; e4 = ra.height, d == 0 = t; check = ra.width, d == 0; = ra.height; rai = get_image ra; t2 = (t - ra.width + (2 * bl))/2, d == 0 = (t - ra.height + (2 * bl))/2; rc = ra , t <= 0 = Image (im_extract_area rai e1 e2 e3 e4), t <= check = merge_array bl [[rb',ra,rb']], d == 0 = merge_array bl [[rb'],[ra],[rb']] {rb' = merge_to_scale rb t2 bl d;} }; ////////////////////////////////////////////////////////////////////////////// /* Blends two images left/right to produce an image a specific width. * * _NG_utilities build_frame * _NG_utilities complex_frame */ frame_lr_min r_l r_r target bw = result { //Calculating the new widh required for each image. no = (target/2 + bw); n_w = no, (r_l.width > no) = r_l.width; //Removing excess from what will be the middle of the final image. n_l = im_extract_area r_l.value 0 0 n_w r_l.height; n_r = im_extract_area r_r.value (r_r.width - n_w) 0 n_w r_l.height; //Merge the two image together with a bw*2 pixel overlap. result = Image (im_lrmerge n_l n_r ((bw*2) - n_w) 0 bw); }; ////////////////////////////////////////////////////////////////////////////// /* Blends two images top/bottom to produce an image a specific width. * * _NG_utilities build_frame * _NG_utilities complex_frame */ frame_tb_min r_t r_b target bw = result { //Calculating the new height required for each image. no = (target/2 + bw); n_h = no, (r_t.height > no) = r_t.height; //Removing excess from what will be the middle of the final image. n_t = im_extract_area r_t.value 0 0 r_t.width n_h; n_b = im_extract_area r_b.value 0 (r_b.height - n_h) r_b.width n_h; //Merge the two image together with a 50 pixel overlap. result = Image (im_tbmerge n_t n_b 0 ((bw*2) -n_h) bw); }; ////////////////////////////////////////////////////////////////////////////// /* Resixe canvas of an image to accomodate a frame and possible mount * * Called from: * _NG_Extra.def Frame_item.Frame_corner_item * _NG_Extra.def Frame_item.Simple_frame_item * _NG_Extra.def Frame_item.Complex_frame_item */ frame_position_image im ref os colour= result { background = image_new ref.width ref.height im.bands im.format im.coding im.type colour 0 0; result = insert_noexpand xp yp im background { xp = (ref.width - im.width)/2; yp = (ref.height - im.height - os)/2; } }; ////////////////////////////////////////////////////////////////////////////// /* Merges an array of images together according to blend width bw * * Called from: * _NG_Utilites.def build_frame * _NG_Utilites.def complex_frame * _NG_Utilites.def complex_edge */ merge_array bw arr = result { merge_lr bw im1 im2 = im3 { bw' = get_header "Xsize" (get_image im1); bw'' = -(bw' - bw); im3 = im_lrmerge (get_image im1) (get_image im2) bw'' 0 bw; } merge_tb bw im1 im2 = im3 { bw' = get_header "Ysize" (get_image im1); bw'' = -(bw' - bw); im3 = im_tbmerge (get_image im1) (get_image im2) 0 bw'' bw; } im_out = (image_set_origin 0 0 @ foldl1 (merge_tb bw) @ map (foldl1 (merge_lr bw))) arr; result = Image im_out; }; ////////////////////////////////////////////////////////////////////////////// /* Repeatably top/bottom add clones of im, with a defined overlap, until final height > target * * Called from: * _NG_Utilites.def build_frame * _NG_Utilites.def complex_edge */ merge_to_scale im target blend dir = result { blend' = floor blend; //allow fir lr or tb process var_a = im.width, dir == 0 = im.height; var_w = im.width, dir == 1 = target, target > blend' = blend'; var_h = im.height, dir == 0 = target, target > blend' = blend'; //total numner of copies of im requires, taking overlap into account. no_loops = ceil ((log ((target - blend')/(var_a - blend')))/(log 2)); process im no = result { pr_a = get_header "Xsize" (get_image im), dir == 0 = get_header "Ysize" (get_image im); pr_b = -(pr_a - blend' + 1); im' = im_lrmerge (get_image im) (get_image im) pr_b 0 blend', dir == 0 = im_tbmerge (get_image im) (get_image im) 0 pr_b blend'; no' = no - 1; result = im', no' < 1 = process im' no'; } im_tmp = im.value, var_a > target = process im no_loops; result = Image (im_extract_area (get_image im_tmp) 0 0 var_w var_h); }; ////////////////////////////////////////////////////////////////////////////// /* Selects an elispe based on a line and a width * * Called from: * _NG_Extra.def Select_item.Elipse */ select_ellipse line width = mask { im = Image (get_image line); //Make a 2 band image whose value equals its coordinates. im_coor = Image (make_xy im.width im.height); //Adjust the values to center tham on (line.left, line.top) im_cent = im_coor - Vector [line.left,line.top]; w = line.width; h = line.height; angle = 270, w == 0 && h < 0 = 90, w == 0 && h >= 0 = 360 + atan (h/w), w > 0 && h < 0 = atan (h/w), w > 0 && h >= 0 = 180 + atan (h/w); a = ( (h ** 2) + (w ** 2) )**0.5; b = a * width; x' = ( (cos angle) * im_cent?0) + ( (sin angle) * im_cent?1); y' = ( (cos angle) * im_cent?1) - ( (sin angle) * im_cent?0); mask = ( (b**2) * (x'**2) ) + ( (a**2) * (y'**2) ) <= (a * b)**2; }; ////////////////////////////////////////////////////////////////////////////// /* Selects a tetragon based on four points. * * Called from: * _NG_Extra.def Select_item.Tetragon * _NG_Extra.def Perspective_item */ select_tetragon p1 p2 p3 p4 = mask { //Put points in clockwise order starting at the top left. pt_list = sort_pts_clockwise [p1, p2, p3, p4]; pair_list = [ [ pt_list?0, pt_list?1 ], [ pt_list?1, pt_list?2 ], [ pt_list?2, pt_list?3 ], [ pt_list?3, pt_list?0 ] ]; //Make xy image the same size as p1.image; im_xy = Image (make_xy p1.image.width p1.image.height); white = Image (image_new p1.image.width p1.image.height 1 0 Image_coding.NOCODING 1 255 0 0); mask = foldl process white pair_list; /* Treat each pair of point as a vector going from p1 to p2, * then select all to right of line. This is done for each pair, * the results are all combined to select the area defined by * the four points. */ process im_in pair = im_out { x = (pair?0).left; y = (pair?0).top; x'= (pair?1).left; y'= (pair?1).top; w = x' - x; h = y' - y; m = 0, x == x' = (y-y')/(x-x'); c = 0, x == x' = ((y*x') - (y'*x))/(x' - x); mask= im_xy?1 - (im_xy?0 * m) >= c, w > 0 = im_xy?1 - (im_xy?0 * m) <= c, w < 0 = im_xy?0 <= x, w == 0 && h > 0 = im_xy?0 >= x; im_out = im_in & mask; } }; ////////////////////////////////////////////////////////////////////////////// /* Selects a tetragon based on four points. * * Called from: * _NG_Extra.def Select_item.Polygon */ select_polygon pt_list = mask { group_check = is_Group pt_list; pt_l = pt_list.value, group_check = pt_list; im = Image (get_image (pt_l?0)); im_xy = Image (make_xy im.width im.height); black = Image (image_new im_xy.width im_xy.height 1 0 Image_coding.NOCODING 1 0 0 0); x = im_xy?0; y = im_xy?1; pt_l' = grp_trip pt_l; mask = foldl process black pt_l'; /*Takes a group adds the first two the end and then creates a lists of *lists [[a, b, c], [b, c, d] .... [x, a, b]] */ grp_trip l = l'' { px = take 2 l; l' = join l px; start = [(take 3 l')]; rest = drop 3 l'; process a b = c { x = (last a)?1; x'= (last a)?2; x'' = [[x, x', b]]; c = join a x''; } l'' = foldl process start rest; }; process im_in triplet = im_out { p1 = triplet?0; p2 = triplet?1; p3 = triplet?2; //check for change in x direction between p1-p2 and p2 -p3 dir_1 = sign (p2.left - p1.left); dir_2 = sign (p3.left - p2.left); dir = dir_1 + dir_2; //define min x limit. min_x = p1.left, p1.left < p2.left = p2.left + 1, dir != 0 = p2.left; //define max x limit. max_x = p1.left, p1.left > p2.left = p2.left - 1, dir != 0 = p2.left; //equation of line defined by p1 and p2 m = line_m p1 p2; c = line_c p1 p2; //Every thing below the line im_test = ((y >= (m * x) + c) & (x >= min_x) & (x <= max_x)); im_out = im_in ^ im_test; } line_c p1 p2 = c {m = line_m p1 p2; c = p1.top - (m * p1.left);}; line_m p1 p2 = (p2.top - p1.top)/(p2.left - p1.left), p2.left != p1.left = 0; }; ////////////////////////////////////////////////////////////////////////////// /* Selects a tetragon based on four points. * * Called from: * _NG_Extra.def Perspective_match_item * _NG_Extra.def Perspective_item */ perspective_transform to from = trans'' { /* * Tramsformation matrix is calculated on the bases of the following functions: * x' = c0x + c1y + c2xy + c3 * y' = c4x + c5y + c6xy + c7 * * The functions used in vips im_transform works based on the functions: * x = x' + b0 + b2x' + b4y' + b6x'y' * y = y' + b1 + b3x' + b5y' + b7x'y' * * and is applied in the form of the matrix: * * [[b0, b1], * [b2, b3], * [b4, b5], * [b6, b7]] * * Therefore our required calculated matrix will be * * [[ c3 , c7], * [(c0 - 1) , c4], * [ c1 , (c5 - 1)], * [ c2 , c6]] * * to = [x1, y1, x2, y2, x3, y3, x4, y4] * from = [x1', y1', x2', y2', x3', y3', x4', y4'] * trans = [[c0], [c1], [c2], [c3], [c4], [c5], [c6], [c7]] * */ to' = Matrix [[to?0, to?1, ((to?0)*(to?1)), 1, 0, 0, 0, 0], [0, 0, 0, 0, to?0, to?1, ((to?0)*(to?1)), 1], [to?2, to?3, ((to?2)*(to?3)), 1, 0, 0, 0, 0], [0, 0, 0, 0, to?2, to?3, ((to?2)*(to?3)), 1], [to?4, to?5, ((to?4)*(to?5)), 1, 0, 0, 0, 0], [0, 0, 0, 0, to?4, to?5, ((to?4)*(to?5)), 1], [to?6, to?7, ((to?6)*(to?7)), 1, 0, 0, 0, 0], [0, 0, 0, 0, to?6, to?7, ((to?6)*(to?7)), 1]]; from' = Matrix (transpose [from]); to'' = to' ** (-1); trans = to'' * from'; trans' = trans.value; trans''= Matrix [[(trans'?3)?0, (trans'?7)?0 ], [((trans'?0)?0 - 1), (trans'?4)?0 ], [(trans'?1)?0, ((trans'?5)?0 - 1)], [(trans'?2)?0, (trans'?6)?0 ]]; }; ////////////////////////////////////////////////////////////////////////////// /* Sort a list of points into clockwise order. * * Called from: * _NG_utilities.def select_tetragon * _NG_Extra.def Perspective_match_item * _NG_Extra.def Perspective_item */ sort_pts_clockwise l = l'' { // sort functions: f_top a b = a.top < b.top; f_left a b = a.left < b.left; f_right a b = a.left > b.left; l' = sortc f_top l; l'_a = take 2 l'; l'_b = drop 2 l'; l''_a = sortc f_left l'_a; l''_b = sortc f_right l'_b; l'' = join l''_a l''_b; }; Mount_options _ctype _ppcm = class { _vislevel = 3; apply = Toggle "Apply mount options" false; ls = Expression "Lower mount section bigger by (cm)" 0; mount_colour = Colour _ctype [0, 0, 0]; _los = ls.expr * _ppcm; }; Frame_variables comp = class { _vislevel = 3; scale_factor = Expression "scale the size of the frame by" 1; /* These sliders define the fraction of the frames width or height is extracted * to produce each of the particular regions. */ corner_section = Scale "Corner section" 0.1 1 0.5; edge_section = Scale "Edge section" 0.1 1 0.2, comp > 0 = "Only required for complex frames"; middle_section = Scale "Middle section" 0.1 1 0.2; blend_fraction = Scale "Blend fraction" 0.1 0.9 0.1; option = Toggle "Use mirror of left-side to make right" true; }; nip2-8.7.0/share/nip2/compat/8.6/Image.def0000644000175000017500000015333713330327312014602 00000000000000Image_new_item = class Menupullright "_New" "make new things" { Image_black_item = class Menuaction "_Image" "make a new image" { format_names = [ "8-bit unsigned int - UCHAR", // 0 "8-bit signed int - CHAR", // 1 "16-bit unsigned int - USHORT", // 2 "16-bit signed int - SHORT", // 3 "32-bit unsigned int - UINT", // 4 "32-bit signed int - INT", // 5 "32-bit float - FLOAT", // 6 "64-bit complex - COMPLEX", // 7 "64-bit float - DOUBLE", // 8 "128-bit complex - DPCOMPLEX" // 9 ]; action = class Image _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; nbands = Expression "Image bands" 1; format_option = Option "Image format" format_names 0; type_option = Option_enum "Image type" Image_type.type_names "B_W"; pixel = Expression "Pixel value" 0; _result = image_new (to_real nwidth) (to_real nheight) (to_real nbands) (to_real format_option) Image_coding.NOCODING type_option.value_thing pixel.expr 0 0; } } Image_new_from_image_item = class Menuaction "_From Image" "make a new image based on image x" { action x = class Image _result { _vislevel = 3; pixel = Expression "Pixel value" 0; _result = image_new x.width x.height x.bands x.format x.coding x.type pixel.expr x.xoffset x.yoffset; } } Image_region_item = class Menupullright "_Region on Image" "make a new region on an image" { Region_item = class Menuaction "_Region" "make a region on an image" { action image = scope.Region_relative image 0.25 0.25 0.5 0.5; } Mark_item = class Menuaction "_Point" "make a point on an image" { action image = scope.Mark_relative image 0.5 0.5; } Arrow_item = class Menuaction "_Arrow" "make an arrow on an image" { action image = scope.Arrow_relative image 0.25 0.25 0.5 0.5; } HGuide_item = class Menuaction "_Horizontal Guide" "make a horizontal guide on an image" { action image = scope.HGuide image 0.5; } VGuide_item = class Menuaction "_Vertical Guide" "make a vertical guide on an image" { action image = scope.VGuide image 0.5; } sep1 = Menuseparator; Move_item = class Menuaction "From Region" "new region on image using existing region as a guide" { action a b = map_binary process a b { process a b = x.Region target x.left x.top x.width x.height, is_Region x = x.Arrow target x.left x.top x.width x.height, is_Arrow x = error "bad arguments to region-from-region" { // prefer image then region compare a b = false, !is_Image a && is_Image b = false, is_Region a && !is_Region b = true; [target, x] = sortc compare [a, b]; } } } } } Image_convert_to_image_item = class Menuaction "Con_vert to Image" "convert anything to an image" { action x = to_image x; } Image_number_format_item = class Menupullright "_Format" "convert numeric format" { U8_item = class Menuaction "_8 bit unsigned" "convert to unsigned 8 bit [0, 255]" { action x = map_unary cast_unsigned_char x; } U16_item = class Menuaction "1_6 bit unsigned" "convert to unsigned 16 bit [0, 65535]" { action x = map_unary cast_unsigned_short x; } U32_item = class Menuaction "_32 bit unsigned" "convert to unsigned 32 bit [0, 4294967295]" { action x = map_unary cast_unsigned_int x; } sep1 = Menuseparator; S8_item = class Menuaction "8 _bit signed" "convert to signed 8 bit [-128, 127]" { action x = map_unary cast_signed_char x; } S16_item = class Menuaction "16 b_it signed" "convert to signed 16 bit [-32768, 32767]" { action x = map_unary cast_signed_short x; } S32_item = class Menuaction "32 bi_t signed" "convert to signed 32 bit [-2147483648, 2147483647]" { action x = map_unary cast_signed_int x; } sep2 = Menuseparator; Float_item = class Menuaction "_Single precision float" "convert to IEEE 32 bit float" { action x = map_unary cast_float x; } Double_item = class Menuaction "_Double precision float" "convert to IEEE 64 bit float" { action x = map_unary cast_double x; } sep3 = Menuseparator; Scmplxitem = class Menuaction "Single _precision complex" "convert to 2 x IEEE 32 bit float" { action x = map_unary cast_complex x; } Dcmplx_item = class Menuaction "Double p_recision complex" "convert to 2 x IEEE 64 bit float" { action x = map_unary cast_double_complex x; } } Image_header_item = class Menupullright "_Header" "do stuff to the image header" { Image_get_item = class Menupullright "_Get" "get header fields" { // the header fields we can get fields = class { type = 0; width = 1; height = 2; format = 3; bands = 4; xres = 5; yres = 6; xoffset = 7; yoffset = 8; coding = 9; field_names = Enum [ $width => width, $height => height, $bands => bands, $format => format, $type => type, $xres => xres, $yres => yres, $xoffset => xoffset, $yoffset => yoffset, $coding => coding ]; field_option name = Option_enum (_ "Field") field_names name; field_funcs = Table [ [type, get_type], [width, get_width], [height, get_height], [format, get_format], [bands, get_bands], [xres, get_xres], [yres, get_yres], [xoffset, get_xoffset], [yoffset, get_yoffset], [coding, get_coding] ]; } get_field field_name x = class _result { _vislevel = 3; field = fields.field_option field_name; _result = map_unary (Real @ fields.field_funcs.lookup 0 1 field.value_thing) x; } Width_item = class Menuaction "_Width" "get width" { action x = get_field "width" x; } Height_item = class Menuaction "_Height" "get height" { action x = get_field "height" x; } Bands_item = class Menuaction "_Bands" "get bands" { action x = get_field "bands" x; } Format_item = class Menuaction "_Format" "get format" { action x = get_field "format" x; } Type_item = class Menuaction "_Type" "get type" { action x = get_field "type" x; } Xres_item = class Menuaction "_Xres" "get X resolution" { action x = get_field "xres" x; } Yres_item = class Menuaction "_Yres" "get Y resolution" { action x = get_field "yres" x; } Xoffset_item = class Menuaction "X_offset" "get X offset" { action x = get_field "xoffset" x; } Yoffset_item = class Menuaction "Yo_ffset" "get Y offset" { action x = get_field "yoffset" x; } Coding_item = class Menuaction "_Coding" "get coding" { action x = get_field "coding" x; } sep1 = Menuseparator; Custom_item = class Menuaction "C_ustom" "get any header field" { action x = class _result { _vislevel = 3; field = String "Field" "Xsize"; parse = Option "Parse" [ "No parsing", "Parse string as integer", "Parse string as real", "Parse string as hh:mm:ss" ] 0; _result = map_unary (wrap @ process @ get_header field.value) x { parse_str parse str = parse (split is_space str)?0; parse_field name cast parse x = cast x, is_number x = parse_str parse x, is_string x = error ("not " ++ name); get_int = parse_field "int" cast_signed_int parse_int; get_float = parse_field "float" cast_float parse_float; get_time = parse_field "hh:mm:ss" cast_signed_int parse_time; wrap x = Real x, is_real x = Vector x, is_real_list x = Image x, is_image x = Bool x, is_bool x = Matrix x, is_matrix x = String "String" x, is_string x = List x, is_list x = x; process = [ id, get_int, get_float, get_time ]?parse; } } } } sep1 = Menuseparator; Image_set_meta_item = class Menuaction "_Set" "set image metadata" { action x = class _result { _vislevel = 3; fname = String "Field" "field-name"; val = Expression "Value" 42; _result = map_unary process x { process image = set_header fname.value val.expr image; } } } Image_edit_header_item = class Menuaction "_Edit" "change advisory header fields of image" { type_names = Image_type.type_names; all_names = sort (map (extract 0) type_names.value); get_prop has get def x = get x, has x = def; action x = class _result { _vislevel = 3; nxres = Expression "Xres" (get_prop has_xres get_xres 1 x); nyres = Expression "Yres" (get_prop has_yres get_yres 1 x); nxoff = Expression "Xoffset" (get_prop has_xoffset get_xoffset 0 x); nyoff = Expression "Yoffset" (get_prop has_yoffset get_yoffset 0 x); type_option = Option_enum "Image type" Image_type.type_names (Image_type.type_names.get_name type) { type = x.type, is_Image x = Image_type.MULTIBAND; } _result = map_unary process x { process image = Image (im_copy_set image.value type_option.value_thing (to_real nxres) (to_real nyres) (to_real nxoff) (to_real nyoff)); } } } } Image_cache_item = class Menuaction "C_ache" "cache calculated image pixels" { action x = class _result { _vislevel = 3; tile_width = Number "Tile width" 128; tile_height = Number "Tile height" 128; max_tiles = Number "Maximum number of tiles to cache" (-1); _result = map_unary process x { process image = cache (to_real tile_width) (to_real tile_height) (to_real max_tiles) image; } } } #separator Image_levels_item = class Menupullright "_Levels" "change image levels" { Scale_item = class Menuaction "_Scale to 0 - 255" "linear transform to fit 0 - 255 range" { action x = map_unary scale x; } Linear_item = class Menuaction "_Linear" "linear transform of image levels" { action x = class _result { _vislevel = 3; scale = Scale "Scale" 0.001 3 1; offset = Scale "Offset" (-128) 128 0; _result = map_unary adj x { adj x // only force back to input type if this is a thing // with a type ... so we work for Colour / Matrix etc. = clip2fmt x.format x', has_member "format" x = x' { x' = x * scale + offset; } } } } Gamma_item = class Menuaction "_Power" "power transform of image levels (gamma)" { action x = class _result { _vislevel = 3; gamma = Scale "Gamma" 0.001 4 1; image_maximum_hint = "You may need to change image_maximum if " ++ "this is not an 8 bit image"; im_mx = Expression "Image maximum" mx { mx = Image_format.maxval x.format, has_format x = 255; } _result = map_unary gam x { gam x = clip2fmt (get_format x) x', has_format x = x' { x' = (im_mx.expr / im_mx.expr ** gamma) * x ** gamma; } } } } Tone_item = class Menuaction "_Tone Curve" "adjust tone curve" { action x = class _result { _vislevel = 3; b = Scale "Black point" 0 100 0; w = Scale "White point" 0 100 100; sp = Scale "Shadow point" 0.1 0.3 0.2; mp = Scale "Mid-tone point" 0.4 0.6 0.5; hp = Scale "Highlight point" 0.7 0.9 0.8; sa = Scale "Shadow adjust" (-15) 15 0; ma = Scale "Mid-tone adjust" (-30) 30 0; ha = Scale "Highlight adjust" (-15) 15 0; curve = tone_build x.format b w sp mp hp sa ma ha; _result = map_unary (hist_map curve) x; } } } Image_transform_item = class Menupullright "_Transform" "transform images" { Rotate_item = class Menupullright "Ro_tate" "rotate image" { Fixed_item = class Menupullright "_Fixed" "clockwise rotation by fixed angles" { rotate_widget default x = class _result { _vislevel = 3; angle = Option "Rotate by" [ "Don't rotate", "90 degrees clockwise", "180 degrees", "90 degrees anticlockwise" ] default; _result = map_unary process x { process = [ // we can't use id here since we want to "declass" // the members of x ... consider if x is a crop class, // for example, we don't want to inherit from crop, we // want to make a new image class rot180 @ rot180, rot90, rot180, rot270 ] ? angle; } } Rot90_item = class Menuaction "_90 Degrees" "clockwise rotation by 90 degrees" { action x = rotate_widget 1 x; } Rot180_item = class Menuaction "_180 Degrees" "clockwise rotation by 180 degrees" { action x = rotate_widget 2 x; } Rot270_item = class Menuaction "_270 Degrees" "clockwise rotation by 270 degrees" { action x = rotate_widget 3 x; } } Free_item = class Menuaction "_Free" "clockwise rotation by any angle" { action x = class _result { _vislevel = 3; angle = Scale "Angle" (-180) 180 0; interp = Interpolate_picker Interpolate_type.BILINEAR; _result = map_unary process x { process image = rotate interp angle image; } } } Straighten_item = class Menuaction "_Straighten" ("smallest rotation that makes an arrow either horizontal " ++ "or vertical") { action x = class _result { _vislevel = 3; interp = Interpolate_picker Interpolate_type.BILINEAR; _result = map_unary straighten x { straighten arrow = rotate interp angle'' arrow.image { x = arrow.width; y = arrow.height; angle = im (polar (x, y)); angle' = angle - 360, angle > 315 = angle - 180, angle > 135 = angle; angle'' = -angle', angle' >= (-45) && angle' < 45 = 90 - angle'; } } } } } Flip_item = class Menupullright "_Flip" "mirror left/right or up/down" { Left_right_item = class Menuaction "_Left Right" "mirror object left/right" { action x = map_unary fliplr x; } Top_bottom_item = class Menuaction "_Top Bottom" "mirror object top/bottom" { action x = map_unary fliptb x; } } Resize_item = class Menupullright "_Resize" "change image size" { Scale_item = class Menuaction "_Scale" "scale image size by a factor" { action x = class _result { _vislevel = 3; xfactor = Expression "Horizontal scale factor" 1; yfactor = Expression "Vertical scale factor" 1; kernel = Kernel_picker Kernel_type.LINEAR; _result = map_unary process x { process image = resize kernel xfactor yfactor image; } } } Size_item = class Menuaction "_Size To" "resize to a fixed size" { action x = class _result { _vislevel = 3; which = Option "Resize axis" [ "Shortest", "Longest", "Horizontal", "Vertical" ] 0; size = Expression "Resize to (pixels)" 128; aspect = Toggle "Break aspect ratio" false; kernel = Kernel_picker Kernel_type.LINEAR; _result = map_unary process x { process image = resize kernel h v image, aspect = resize kernel fac fac image { xfac = to_real size / image.width; yfac = to_real size / image.height; max_factor = [xfac, 1], xfac > yfac = [1, yfac]; min_factor = [xfac, 1], xfac < yfac = [1, yfac]; [h, v] = [ max_factor, min_factor, [xfac, 1], [1, yfac]]?which; fac = h, v == 1 = v; } } } } Size_within_item = class Menuaction "Size _Within" "size to fit within a rectangle" { action x = class _result { _vislevel = 3; // the rects we size to fit within _rects = [ [2048, 1536], [1920, 1200], [1600, 1200], [1400, 1050], [1280, 1024], [1024, 768], [800, 600], [640, 480] ]; within = Option "Fit within (pixels)" ( [print w ++ " x " ++ print h :: [w, h] <- _rects] ++ ["Custom"] ) 4; custom_width = Expression "Custom width" 1000; custom_height = Expression "Custom height" 1000; size = Option "Page size" [ "Full page", "Half page", "Quarter page" ] 0; kernel = Kernel_picker Kernel_type.LINEAR; _result = map_unary process x { xdiv = [1, 2, 2]?size; ydiv = [1, 1, 2]?size; allrect = _rects ++ [ [custom_width.expr, custom_height.expr] ]; [width, height] = allrect?within; process x = resize kernel fac fac x, fac < 1 = x { xfac = (width / xdiv) / x.width; yfac = (height / ydiv) / x.height; fac = min_pair xfac yfac; } } } } Resize_canvas_item = class Menuaction "_Canvas" "change size of surrounding image" { action x = class _result { _vislevel = 3; // try to guess a sensible size for the new image _guess_size = x.rect, is_Image x = Rect 0 0 100 100; nwidth = Expression "New width (pixels)" _guess_size.width; nheight = Expression "New height (pixels)" _guess_size.height; bgcolour = Expression "Background colour" 0; position = Option "Position" [ "North-west", "North", "North-east", "West", "Centre", "East", "South-west", "South", "South-east", "Specify in pixels" ] 4; left = Expression "Pixels from left" 0; top = Expression "Pixels from top" 0; _result = map_unary process x { process image = insert_noexpand xp yp image background { width = image.width; height = image.height; coding = image.coding; bands = 3, coding == Image_coding.LABPACK = image.bands; format = Image_format.FLOAT, coding == Image_coding.LABPACK = image.format; type = image.type; // placement vectors ... left, centre, right xposv = [0, to_real nwidth / 2 - width / 2, to_real nwidth - width]; yposv = [0, to_real nheight / 2 - height / 2, to_real nheight - height]; xp = left, position == 9 = xposv?((int) (position % 3)); yp = top, position == 9 = yposv?((int) (position / 3)); background = image_new nwidth nheight bands format coding type bgcolour.expr 0 0; } } } } } Image_map_item = class Menuaction "_Map" "map an image through a 2D transform image" { action a b = class _result { _vislevel = 3; interp = Interpolate_picker Interpolate_type.BILINEAR; _result = map_binary trans a b { trans a b = mapim interp.value in index { // get the index image first [index, in] = sortc (const is_twocomponent) [a, b]; // is a two-component image, ie. one band complex, or // two-band non-complex is_twocomponent x = is_nonc x || is_c x; is_nonc x = has_bands x && get_bands x == 2 && has_format x && !is_complex_format (get_format x); is_c x = has_bands x && get_bands x == 1 && has_format x && is_complex_format (get_format x); is_complex_format f = f == Image_format.COMPLEX || f == Image_format.DPCOMPLEX; } } } } Image_perspective_item = Perspective_item; Image_rubber_item = class Menupullright "Ru_bber Sheet" "automatically warp images to superposition" { rubber_interp = Option "Interpolation" ["Nearest", "Bilinear"] 1; rubber_order = Option "Order" ["0", "1", "2", "3"] 1; rubber_wrap = Toggle "Wrap image edges" false; // a transform ... a matrix, plus the size of the image the // matrix was made for Transform matrix image_width image_height = class matrix { // scale a transform ... if it worked for a m by n image, make // it work for a (m * xfac) by (y * yfac) image rescale xfac yfac = Transform (Matrix (map2 (map2 multiply) matrix.value facs)) (image_width * xfac) (image_height * yfac) { facs = [ [xfac, yfac], [1, 1], [1, 1], [1 / xfac, 1 / yfac], [1 / xfac, 1 / yfac], [1 / xfac, 1 / yfac] ]; } } // yuk!!!! fix is_instanceof to not need absolute names is_Transform = is_instanceof "Image_transform_item.Image_rubber_item.Transform"; Find_item = class Menuaction "_Find" ("find a transform which will map sample image onto " ++ "reference") { action reference sample = class _trn { _vislevel = 3; // controls order = rubber_order; interp = rubber_interp; wrap = rubber_wrap; max_err = Expression "Maximum error" 0.3; max_iter = Expression "Maximum iterations" 10; // transform [sample', trn, err] = transform_search max_err max_iter order interp wrap sample reference; transformed_image = Image sample'; _trn = Transform trn reference.width reference.height; final_error = err; } } Apply_item = class Menuaction "_Apply" "apply a transform to an image" { action a b = class _result { _vislevel = 3; // controls interp = rubber_interp; wrap = rubber_wrap; _result = map_binary trans a b { trans a b = transform interp wrap t' i { // get the transform arg first [i, t] = sortc (const is_Transform) [a, b]; t' = t.rescale (i.width / t.image_width) (i.height / t.image_height); } } } } } sep1 = Menuseparator; Match_item = class Menuaction "_Linear Match" "rotate and scale one image to match another" { action x y = class _result { _vislevel = 3; // try to find an image ... for a group, get the first item find_image x = x, is_Image x = find_image x?0, is_list x = find_image x.value, is_class x && has_value x = error "unable to find image"; _a = find_image x; _b = find_image y; ap1 = Mark_relative _a 0.5 0.25; bp1 = Mark_relative _b 0.5 0.25; ap2 = Mark_relative _a 0.5 0.75; bp2 = Mark_relative _b 0.5 0.75; refine = Toggle "Refine selected tie-points" false; lock = Toggle "No resize" false; _result = map_binary process x y { process a b = Image b''' { _prefs = Workspaces.Preferences; window = _prefs.MOSAIC_WINDOW_SIZE; object = _prefs.MOSAIC_OBJECT_SIZE; a' = a.value; b' = b.value; b'' = clip2fmt a.format b'; // return p2 ... if lock is set, return a p2 a standard // distance along the vector joining p1 and p2 norm p1 p2 = Rect left' top' 0 0, lock = p2 { v = (p2.left - p1.left, p2.top - p1.top); // 100000 to give precision since we pass points as // ints to match n = 100000 * sign v; left' = p1.left + re n; top' = p1.top + im n; } ap2'' = norm ap1 ap2; bp2'' = norm bp1 bp2; b''' = im_match_linear_search a' b'' ap1.left ap1.top bp1.left bp1.top ap2''.left ap2''.top bp2''.left bp2''.top object window, // we can't search if lock is on refine && !lock = im_match_linear a' b'' ap1.left ap1.top bp1.left bp1.top ap2''.left ap2''.top bp2''.left bp2''.top; } } } } Image_perspective_match_item = Perspective_match_item; } Image_band_item = class Menupullright "_Band" "manipulate image bands" { // like extract_bands, but return [] for zero band image // makes compose a bit simpler exb b n x = [], to_real n == 0 = extract_bands b n x; Extract_item = class Menuaction "_Extract" "extract bands from image" { action x = class _result { _vislevel = 3; first = Expression "Extract from band" 0; number = Expression "Extract this many bands" 1; _result = map_unary (exb first number) x; } } Insert_item = class Menuaction "_Insert" "insert bands into image" { action x y = class _result { _vislevel = 3; first = Expression "Insert at position" 0; _result = map_binary process x y { process im1 im2 = exb 0 f im1 ++ im2 ++ exb f (b - f) im1 { f = to_real first; b = im1.bands; } } } } Delete_item = class Menuaction "_Delete" "delete bands from image" { action x = class _result { _vislevel = 3; first = Expression "Delete from band" 0; number = Expression "Delete this many bands" 1; _result = map_unary process x { process im = exb 0 f im ++ exb (f + n) (b - (f + n)) im { f = to_real first; n = to_real number; b = im.bands; } } } } Bandwise_item = Image_join_item.Bandwise_item; sep1a = Menuseparator; Bandand_item = class Menuaction "Bitwise Band AND" "bitwise AND of image bands" { action x = bandand x; } Bandor_item = class Menuaction "Bitwise Band OR" "bitwise OR of image bands" { action x = bandor x; } sep2 = Menuseparator; To_dimension_item = class Menuaction "To D_imension" "convert bands to width or height" { action x = class _result { _vislevel = 3; orientation = Option "Orientation" [ "Horizontal", "Vertical" ] 0; _result = map_unary process x { process im = foldl1 [join_lr, join_tb]?orientation (bandsplit im); } } } To_bands_item = class Menuaction "To B_ands" "turn width or height to bands" { action x = class _result { _vislevel = 3; orientation = Option "Orientation" [ "Horizontal", "Vertical" ] 0; _result = map_unary process x { process im = bandjoin (map extract_column [0 .. im.width - 1]), orientation == 0 = bandjoin (map extract_row [0 .. im.height - 1]) { extract_column n = extract_area n 0 1 im.height im; extract_row n = extract_area 0 n im.width 1 im; } } } } } Image_alpha_item = class Menupullright "_Alpha" "manipulate image alpha" { Add_item = class Menuaction "_Add" "add alpha" { action x = class _result { _vislevel = 3; opacity = Expression "Opacity (255 == solid)" 255; _result = x ++ to_real opacity; } } Flatten_item = class Menuaction "_Flatten" "flatten alpha out of image" { action x = class _result { _vislevel = 3; bg = Expression "Background" 0; _result = map_unary (flattenimage bg) x; } } Extract_item = class Menuaction "_Extract" "extract alpha" { action x = map_unary exb x { exb x = extract_bands (x.bands - 1) 1 x; } } Drop_item = class Menuaction "_Drop" "drop alpha" { action x = map_unary exb x { exb x = extract_bands 0 (x.bands - 1) x; } } sep1 = Menuseparator; Premultiply_item = class Menuaction "_Premultiply" "premultiply alpha" { action x = premultiply x; } Unpremultiply_item = class Menuaction "_Unpremultiply" "unpremultiply alpha" { action x = unpremultiply x; } sep2 = Menuseparator; Composite2_item = class Menuaction "_Composite two" "composite a pair of images" { action x y = class _result { _vislevel = 3; blend = Option_enum (_ "Blend mode") modes "over" { modes = Blend_type.types; } compositing_space = Option_enum (_ "Compositing space") spaces "sRGB" { spaces = Image_type.image_colour_spaces; } premultiplied = Toggle (_ "Premultiplied") false; _result = Image output { [output] = vips_call "composite" [[y.value, x.value], blend.value] [$compositing_space => compositing_space.value_thing, $premultiplied => premultiplied.value ]; } } } Composite3_item = class Menuaction "_Composite three" "composite three images" { action x y z = class _result { _vislevel = 3; blend1 = Option_enum (_ "Blend mode") modes "over" { modes = Blend_type.types; } blend2 = Option_enum (_ "Blend mode") modes "over" { modes = Blend_type.types; } compositing_space = Option_enum (_ "Compositing space") spaces "sRGB" { spaces = Image_type.image_colour_spaces; } premultiplied = Toggle (_ "Premultiplied") false; _result = Image output { [output] = vips_call "composite" [[z.value, y.value, x.value], [blend1.value, blend2.value]] [$compositing_space => compositing_space.value_thing, $premultiplied => premultiplied.value ]; } } } } Image_crop_item = class Menuaction "_Crop" "extract a rectangular area from an image" { action x = crop x [l, t, w, h] { fields = [ [has_left, get_left, 0], [has_top, get_top, 0], [has_width, get_width, 100], [has_height, get_height, 100] ]; [l, t, w, h] = map get_default fields { get_default line = get x, has x = default { [has, get, default] = line; } } } crop x geo = class _result { _vislevel = 3; l = Expression "Crop left" ((int) (geo?0 + geo?2 / 4)); t = Expression "Crop top" ((int) (geo?1 + geo?3 / 4)); w = Expression "Crop width" (max_pair 1 ((int) (geo?2 / 2))); h = Expression "Crop height" (max_pair 1 ((int) (geo?3 / 2))); _result = map_nary (list_5ary extract) [x, l.expr, t.expr, w.expr, h.expr] { extract im l t w h = extract_area left' top' width' height' im { width' = min_pair (to_real w) im.width; height' = min_pair (to_real h) im.height; left' = range 0 (to_real l) (im.width - width'); top' = range 0 (to_real t) (im.height - height'); } } } } Image_insert_item = class Menuaction "_Insert" "insert a small image into a large image" { action a b = insert_position, is_Group a || is_Group b = insert_area { insert_area = class _result { _check_args = [ [a, "a", check_Image], [b, "b", check_Image] ]; _vislevel = 3; // sort to get smallest first _pred x y = x.width * x.height < y.width * y.height; [_a', _b'] = sortc _pred [a, b]; place = Area _b' left top width height { // be careful in case b is smaller than a left = max_pair 0 ((_b'.width - _a'.width) / 2); top = max_pair 0 ((_b'.height - _a'.height) / 2); width = min_pair _a'.width _b'.width; height = min_pair _a'.height _b'.height; } _result = insert_noexpand place.left place.top (clip2fmt _b'.format a'') _b' { a'' = extract_area 0 0 place.width place.height _a'; } } insert_position = class _result { _vislevel = 3; position = Option "Position" [ "North-west", "North", "North-east", "West", "Centre", "East", "South-west", "South", "South-east", "Specify in pixels" ] 4; left = Expression "Pixels from left" 0; top = Expression "Pixels from top" 0; _result = map_binary insert a b { insert a b = insert_noexpand left top (clip2fmt b.format a) b, position == 9 = insert_noexpand xp yp (clip2fmt b.format a) b { xr = b.width - a.width; yr = b.height - a.height; xp = [0, xr / 2, xr]?((int) (position % 3)); yp = [0, yr / 2, yr]?((int) (position / 3)); } } } } } Image_select_item = Select_item; Image_draw_item = class Menupullright "_Draw" "draw lines, circles, rectangles, floods" { Line_item = class Menuaction "_Line" "draw line on image" { action x = class _result { _vislevel = 3; x1 = Expression "Start x" 0; y1 = Expression "Start y" 0; x2 = Expression "End x" 100; y2 = Expression "End y" 100; i = Expression "Ink" [0]; _result = map_unary line x { line im = draw_line x1 y1 x2 y2 i.expr im; } } } Rect_item = class Menuaction "_Rectangle" "draw rectangle on image" { action x = class _result { _vislevel = 3; rx = Expression "Left" 50; ry = Expression "Top" 50; rw = Expression "Width" 100; rh = Expression "Height" 100; f = Toggle "Fill" true; t = Scale "Line thickness" 1 50 3; i = Expression "Ink" [0]; _result = map_unary rect x { rect im = draw_rect_width rx ry rw rh f t i.expr im; } } } Circle_item = class Menuaction "_Circle" "draw circle on image" { action x = class _result { _vislevel = 3; cx = Expression "Centre x" 100; cy = Expression "Centre y" 100; r = Expression "Radius" 50; f = Toggle "Fill" true; i = Expression "Ink" [0]; _result = map_unary circle x { circle im = draw_circle cx cy r f i.expr im; } } } Flood_item = class Menuaction "_Flood" "flood bounded area of image" { action x = class _result { _vislevel = 3; sx = Expression "Start x" 0; sy = Expression "Start y" 0; e = Option "Flood while" [ "Not equal to ink", "Equal to start point" ] 0; // pick a default ink that won't flood, if we can i = Expression "Ink" default_ink { default_ink = [0], ! has_image x = pixel; pixel = map mean (bandsplit (extract_area sx sy 1 1 im)); im = get_image x; } _result = map_unary flood x { flood im = draw_flood sx sy i.expr im, e == 0 = draw_flood_blob sx sy i.expr im; } } } Draw_scalebar_item = class Menuaction "_Scale" "draw scale bar" { action x = class _result { _vislevel = 3; px = Expression "Left" 50; py = Expression "Top" 50; wid = Expression "Width" 100; thick = Scale "Line thickness" 1 50 3; text = String "Dimension text" "50μm"; font = Fontname "Use font" Workspaces.Preferences.PAINTBOX_FONT; pos = Option "Position Text" ["Above", "Below"] 1; vp = Option "Dimension by" [ "Inner Vertical Edge", "Centre of Vertical", "Outer Vertical Edge" ] 1; dpi = Expression "DPI" 100; ink = Colour "Lab" [50,0,0]; _result = map_unary process x { process im = blend (Image scale) ink' im { // make an ink compatible with the image ink' = colour_transform_to (get_type im) ink; x = to_real px; y = to_real py; w = to_real wid; d = to_real dpi; t = floor thick; bg = image_new (get_width im) (get_height im) (get_bands im) (get_format im) (get_coding im) (get_type im) 0 0 0; draw_block x y w t im = draw_rect_width x y w t true 1 [255] im; label = im_text text.value font.value w 1 d; lw = get_width label; lh = get_height label; ly = [y - lh - t, y + 2 * t]?pos; vx = [ [x - t, x + w], [x - t / 2, x + w - t / 2], [x, x + w - t] ]?vp; scale = (draw_block x y w t @ draw_block vx?0 (y - 2 * t) t (t * 5) @ draw_block vx?1 (y - 2 * t) t (t * 5) @ insert_noexpand (x + w / 2 - lw / 2) ly label) bg; } } } } } Image_join_item = class Menupullright "_Join" "join two or more images together" { Bandwise_item = class Menuaction "_Bandwise Join" "join two images bandwise" { action a b = join a b; } sep1 = Menuseparator; join_lr shim bg align a b = im2 { w = a.width + b.width + shim; h = max_pair a.height b.height; back = image_new w h a.bands a.format a.coding a.type bg 0 0; ya = [0, max_pair 0 ((b.height - a.height)/2), max_pair 0 (b.height - a.height)]; yb = [0, max_pair 0 ((a.height - b.height)/2), max_pair 0 (a.height - b.height)]; im1 = insert_noexpand 0 ya?align a back; im2 = insert_noexpand (a.width + shim) yb?align b im1; } join_tb shim bg align a b = im2 { w = max_pair a.width b.width; h = a.height + b.height + shim; back = image_new w h a.bands a.format a.coding a.type bg 0 0; xa = [0, max_pair 0 ((b.width - a.width)/2), max_pair 0 (b.width - a.width)]; xb = [0, max_pair 0 ((a.width - b.width)/2), max_pair 0 (a.width - b.width)]; im1 = insert_noexpand xa?align 0 a back; im2 = insert_noexpand xb?align (a.height + shim) b im1; } halign_names = ["Top", "Centre", "Bottom"]; valign_names = ["Left", "Centre", "Right"]; Left_right_item = class Menuaction "_Left to Right" "join two images left-right" { action a b = class _result { _vislevel = 3; shim = Scale "Spacing" 0 100 0; bg_colour = Expression "Background colour" 0; align = Option "Alignment" halign_names 1; _result = map_binary (join_lr shim.value bg_colour.expr align.value) a b; } } Top_bottom_item = class Menuaction "_Top to Bottom" "join two images top-bottom" { action a b = class _result { _vislevel = 3; shim = Scale "Spacing" 0 100 0; bg_colour = Expression "Background colour" 0; align = Option "Alignment" valign_names 1; _result = map_binary (join_tb shim.value bg_colour.expr align.value) a b; } } sep2 = Menuseparator; Array_item = class Menuaction "_Array" "join a list of lists of images into a single image" { action x = class _result { _vislevel = 3; hshim = Scale "Horizontal spacing" (-100) (100) 0; vshim = Scale "Vertical spacing" (-100) (100) 0; bg_colour = Expression "Background colour" 0; halign = Option "Horizontal alignment" valign_names 1; valign = Option "Vertical alignment" halign_names 1; // we can't use map_unary since chop-into-tiles returns a group of // groups and we want to be able to reassemble that // TODO: chop-into-tiles should return an array class which // displays as group but does not have the looping behaviour? _result = (image_set_origin 0 0 @ foldl1 (join_tb vshim.value bg_colour.expr halign.value) @ map (foldl1 (join_lr hshim.value bg_colour.expr valign.value))) (to_list (to_list x)); } } ArrayFL_item = class Menuaction "_Array from List" "join a list of images into a single image" { action x = class _result { _vislevel = 3; ncol = Number "Max. Number of Columns" 1; hshim = Scale "Horizontal spacing" (-100) (100) 0; vshim = Scale "Vertical spacing" (-100) (100) 0; bg_colour = Expression "Background colour" 0; halign = Option "Horizontal alignment" valign_names 1; valign = Option "Vertical alignment" halign_names 1; snake = Toggle "Reverse the order of every other row" false; _l = split_lines ncol.value x.value, is_Group x = split_lines ncol.value x; _l' = map2 reverse_if_odd [0..] _l, snake = _l { reverse_if_odd n x = reverse x, n % 2 == 1 = x; } _result = (image_set_origin 0 0 @ foldl1 (join_tb vshim.value bg_colour.expr halign.value) @ map (foldl1 (join_lr hshim.value bg_colour.expr valign.value))) (to_list (to_list _l')); } } } Image_tile_item = class Menupullright "Til_e" "tile an image across and down" { tile_widget default_type x = class _result { _vislevel = 3; across = Expression "Tiles across" 2; down = Expression "Tiles down" 2; repeat = Option "Tile type" ["Replicate", "Four-way mirror"] default_type; _result = map_unary process x { process image = tile across down image, repeat == 0 = tile across down image'' { image' = insert image.width 0 (fliplr image) image; image'' = insert 0 image.height (fliptb image') image'; } } } Replicate_item = class Menuaction "_Replicate" "replicate image across and down" { action x = tile_widget 0 x; } Fourway_item = class Menuaction "_Four-way Mirror" "four-way mirror across and down" { action x = tile_widget 1 x; } Chop_item = class Menuaction "_Chop Into Tiles" "slice an image into tiles" { action x = class _result { _vislevel = 3; tile_width = Expression "Tile width" 100; tile_height = Expression "Tile height" 100; hoverlap = Expression "Horizontal overlap" 0; voverlap = Expression "Vertical overlap" 0; _result = map_unary (Group @ map Group @ process) x { process x = imagearray_chop tile_width tile_height hoverlap voverlap x; } } } } #separator Pattern_images_item = class Menupullright "_Patterns" "make a variety of useful patterns" { Grey_item = class Menuaction "Grey _Ramp" "make a smooth grey ramp" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; orientation = Option "Orientation" [ "Horizontal", "Vertical" ] 0; foption = Option "Format" ["8 bit", "float"] 0; _result = Image im { gen = im_grey, foption == 0 = im_fgrey; w = to_real nwidth; h = to_real nheight; im = gen w h, orientation == 0 = rot90 (gen h w); } } } Xy_item = class Menuaction "_XY Image" "make a two band image whose pixel values are their coordinates" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; _result = Image (make_xy nwidth nheight); } } Noise_item = class Menupullright "_Noise" "various noise generators" { Gaussian_item = class Menuaction "_Gaussian" "make an image of gaussian noise" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; mean = Scale "Mean" 0 255 128; deviation = Scale "Deviation" 0 128 50; _result = Image (gaussnoise nwidth nheight mean.value deviation.value); } } Fractal_item = class Menuaction "_Fractal" "make a fractal noise image" { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; dimension = Scale "Dimension" 2.001 2.999 2.001; _result = Image (im_fractsurf (to_real nsize) dimension.value); } } Perlin_item = class Menuaction "_Perlin" "Perlin noise image" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; cell_size = Expression "Cell size (pixels)" 8; eight = Toggle "Eight bit output" true; _result = 128 * im + 128, eight = im { im = perlin cell_size nwidth nheight; } } } Worley_item = class Menuaction "_Worley" "Worley noise image" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 512; nheight = Expression "Image height (pixels)" 512; cell_size = Expression "Cell size (pixels)" 256; _result = worley cell_size nwidth nheight; } } } Checkerboard_item = class Menuaction "_Checkerboard" "make a checkerboard image" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; hpsize = Expression "Horizontal patch size" 8; vpsize = Expression "Vertical patch size" 8; hpoffset = Expression "Horizontal patch offset" 0; vpoffset = Expression "Vertical patch offset" 0; _result = Image (xstripes ^ ystripes) { pixels = make_xy nwidth nheight; xpixels = pixels?0 + to_real hpoffset; ypixels = pixels?1 + to_real vpoffset; make_stripe pix swidth = pix % (swidth * 2) >= swidth; xstripes = make_stripe xpixels (to_real hpsize); ystripes = make_stripe ypixels (to_real vpsize); } } } Grid_item = class Menuaction "Gri_d" "make a grid" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; hspace = Expression "Horizontal line spacing" 8; vspace = Expression "Vertical line spacing" 8; thick = Expression "Line thickness" 1; hoff = Expression "Horizontal grid offset" 4; voff = Expression "Vertical grid offset" 4; _result = Image (xstripes | ystripes) { pixels = make_xy nwidth nheight; xpixels = pixels?0 + to_real hoff; ypixels = pixels?1 + to_real voff; make_stripe pix swidth = pix % swidth < to_real thick; xstripes = make_stripe xpixels (to_real hspace); ystripes = make_stripe ypixels (to_real vspace); } } } Text_item = class Menuaction "_Text" "make a bitmap of some text" { action = class _result { _vislevel = 3; text = String "Text to paint" "Hello world!"; font = Fontname "Use font" Workspaces.Preferences.PAINTBOX_FONT; wrap = Expression "Wrap text at" 500; align = Option "Alignment" [ "Left", "Centre", "Right" ] 0; dpi = Expression "DPI" 300; _result = Image (im_text text.value font.value (to_real wrap) align.value (to_real dpi)); } } New_CIELAB_slice_item = class Menuaction "CIELAB _Slice" "make a slice through CIELAB space" { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; L = Scale "L value" 0 100 50; _result = Image (lab_slice (to_real nsize) L.value); } } sense_option = Option "Sense" [ "Pass", "Reject" ] 0; build fn size = (Image @ image_set_type Image_type.FOURIER @ rotquad @ fn) (im_create_fmask size size); New_ideal_item = class Menupullright "_Ideal Fourier Mask" "make various ideal Fourier filter masks" { High_low_item = class Menuaction "_High or Low Pass" ("make a mask image for a highpass/lowpass " ++ "ideal Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f sense.value fc.value 0 0 0 0; } } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" ("make a mask image for an ring pass/reject " ++ "ideal Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; rw = Scale "Ring width" 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f (sense.value + 6) fc.value rw.value 0 0 0; } } } Band_item = class Menuaction "_Band Pass or Band Reject" ("make a mask image for a band pass/reject " ++ "ideal Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fcx = Scale "Horizontal frequency cutoff" 0.01 0.99 0.5; fcy = Scale "Vertical frequency cutoff" 0.01 0.99 0.5; r = Scale "Radius" 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f (sense.value + 12) fcx.value fcy.value r.value 0 0; } } } } New_gaussian_item = class Menupullright "_Gaussian Fourier Mask" "make various Gaussian Fourier filter masks" { High_low_item = class Menuaction "_High or Low Pass" ("make a mask image for a highpass/lowpass " ++ "Gaussian Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f (sense.value + 4) fc.value ac.value 0 0 0; } } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" ("make a mask image for an ring pass/reject " ++ "Gaussian Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; rw = Scale "Ring width" 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f (sense.value + 10) fc.value rw.value ac.value 0 0; } } } Band_item = class Menuaction "_Band Pass or Band Reject" ("make a mask image for a band pass/reject " ++ "Gaussian Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fcx = Scale "Horizontal frequency cutoff" 0.01 0.99 0.5; fcy = Scale "Vertical frequency cutoff" 0.01 0.99 0.5; r = Scale "Radius" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; _result = build param (to_real nsize) { param f = f (sense.value + 16) fcx.value fcy.value r.value ac.value 0; } } } } New_butterworth_item = class Menupullright "_Butterworth Fourier Mask" "make various Butterworth Fourier filter masks" { High_low_item = class Menuaction "_High or Low Pass" ("make a mask image for a highpass/lowpass " ++ "Butterworth Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; order = Scale "Order" 1 10 2; _result = build param (to_real nsize) { param f = f (sense.value + 2) order.value fc.value ac.value 0 0; } } } Ring_item = class Menuaction "_Ring Pass or Ring Reject" ("make a mask image for an ring pass/reject " ++ "Butterworth Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fc = Scale "Frequency cutoff" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; rw = Scale "Ring width" 0.01 0.99 0.5; order = Scale "Order" 1 10 2; _result = build param (to_real nsize) { param f = f (sense.value + 8) order.value fc.value rw.value ac.value 0; } } } Band_item = class Menuaction "_Band Pass or Band Reject" ("make a mask image for a band pass/reject " ++ "Butterworth Fourier filter") { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; sense = sense_option; fcx = Scale "Horizontal frequency cutoff" 0.01 0.99 0.5; fcy = Scale "Vertical frequency cutoff" 0.01 0.99 0.5; r = Scale "Radius" 0.01 0.99 0.5; ac = Scale "Amplitude cutoff" 0.01 0.99 0.5; order = Scale "Order" 1 10 2; _result = build param (to_real nsize) { param f = f (sense.value + 14) order.value fcx.value fcy.value r.value ac.value; } } } } } Test_images_item = class Menupullright "Test I_mages" "make a variety of test images" { Eye_item = class Menuaction "_Spatial Response" "image for testing the eye's spatial response" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; nheight = Expression "Image height (pixels)" 64; factor = Scale "Factor" 0.001 1 0.2; _result = Image (im_eye (to_real nwidth) (to_real nheight) factor.value); } } Zone_plate = class Menuaction "_Zone Plate" "make a zone plate" { action = class _result { _vislevel = 3; nsize = Expression "Image size (pixels)" 64; _result = Image (im_zone (to_real nsize)); } } Frequency_test_chart_item = class Menuaction "_Frequency Testchart" "make a black/white frequency test pattern" { action = class _result { _vislevel = 3; nwidth = Expression "Image width (pixels)" 64; sheight = Expression "Strip height (pixels)" 10; waves = Expression "Wavelengths" [64, 32, 16, 8, 4, 2]; _result = imagearray_assemble 0 0 (transpose [strips]) { freq_slice wave = Image (sin (grey / wave) > 0); strips = map freq_slice waves.expr; grey = im_fgrey (to_real nwidth) (to_real sheight) * 360 * (to_real nwidth); } } } CRT_test_chart_item = class Menuaction "CRT _Phosphor Chart" "make an image for measuring phosphor colours" { action = class _result { _vislevel = 3; brightness = Scale "Brightness" 0 255 200; psize = Expression "Patch size (pixels)" 32; _result = Image (imagearray_assemble 0 0 [[green, red], [blue, white]]) { black = image_new (to_real psize) (to_real psize) 1 Image_format.FLOAT Image_coding.NOCODING Image_type.B_W 0 0 0; notblack = black + brightness; green = black ++ notblack ++ black; red = notblack ++ black ++ black; blue = black ++ black ++ notblack; white = notblack ++ notblack ++ notblack; } } } Greyscale_chart_item = class Menuaction "_Greyscale" "make a greyscale" { action = class _result { _vislevel = 3; pwidth = Expression "Patch width" 8; pheight = Expression "Patch height" 8; npatches = Expression "Number of patches" 16; _result = Image (image_set_type Image_type.B_W (clip2fmt Image_format.UCHAR wedge)) { wedge = 255 / (to_real npatches - 1) * (int) (strip?0 / to_real pwidth) { strip = make_xy (to_real pwidth * to_real npatches) pheight; } } } } CMYK_test_chart_item = class Menuaction "_CMYK Wedges" "make a set of CMYK wedges" { action = class _result { _vislevel = 3; pwidth = Expression "Patch width" 8; pheight = Expression "Patch height" 8; npatches = Expression "Number of patches" 16; _result = Image (image_set_type Image_type.CMYK (clip2fmt Image_format.UCHAR strips)) { wedge = 255 / (to_real npatches - 1) * (int) (strip?0 / to_real pwidth) { strip = make_xy (to_real pwidth * to_real npatches) pheight; } black = wedge * 0; C = wedge ++ black ++ black ++ black; M = black ++ wedge ++ black ++ black; Y = black ++ black ++ wedge ++ black; K = black ++ black ++ black ++ wedge; strips = imagearray_assemble 0 0 [[C],[M],[Y],[K]]; } } } Colour_atlas_item = class Menuaction "_Colour Atlas" "make a grid of patches grouped around a colour" { action = class _result { _vislevel = 3; start = Colour_picker "Lab" [50,0,0]; nstep = Expression "Number of steps" 9; ssize = Expression "Step size" 10; psize = Expression "Patch size" 32; sepsize = Expression "Separator size" 4; _result = colour_transform_to (get_type start) blocks''' { size = (to_real nstep * 2 + 1) * to_real psize - to_real sepsize; xy = make_xy size size; xy_grid = (xy % to_real psize) < (to_real psize - to_real sepsize); grid = xy_grid?0 & xy_grid?1; blocks = (int) (to_real ssize * ((int) (xy / to_real psize))); lab_start = colour_transform_to Image_type.LAB start; blocks' = blocks - to_real nstep * to_real ssize + Vector (tl lab_start.value); blocks'' = hd lab_start.value ++ Image blocks'; blocks''' = image_set_type Image_type.LAB blocks'', Image grid = 0; } } } } nip2-8.7.0/share/nip2/compat/8.6/_list.def0000644000175000017500000002310313330327312014655 00000000000000/* any l: or all the elements of list l together * * any (map (equal 0) list) == true, if any element of list is zero. * any :: [bool] -> bool */ any = foldr logical_or false; /* all l: and all the elements of list l together * * all (map (==0) list) == true, if every element of list is zero. * all :: [bool] -> bool */ all = foldr logical_and true; /* concat l: join a list of lists together * * concat ["abc","def"] == "abcdef". * concat :: [[*]] -> [*] */ concat l = foldr join [] l; /* delete eq x l: delete the first x from l * * delete equal 'b' "abcdb" == "acdb" * delete :: (* -> bool) -> * -> [*] -> [*] */ delete eq a l = [], l == [] = y, eq a b = b : delete eq a y { b:y = l; } /* difference eq a b: delete b from a * * difference equal "asdf" "ad" == "sf" * difference :: (* -> bool) -> [*] -> [*] -> [*] */ difference = foldl @ converse @ delete; /* drop n l: drop the first n elements from list l * * drop 3 "abcd" == "d" * drop :: num -> [*] -> [*] */ drop n l = l, n <= 0 || l == [] = drop (n - 1) (tl l); /* dropwhile fn l: drop while fn is true * * dropwhile is_digit "1234pigs" == "pigs" * dropwhile :: (* -> bool) -> [*] -> [*] */ dropwhile fn l = [], l == [] = dropwhile fn x, fn a = l { a:x = l; } /* extract n l: extract element at index n from list l */ extract = converse subscript; /* filter fn l: return all elements of l for which predicate fn holds * * filter is_digit "1one2two3three" = "123" * filter :: (* -> bool) -> [*] -> [*] */ filter fn l = foldr addif [] l { addif x l = x : l, fn x; = l; } /* flatten x: flatten a list of lists of things into a simple list * * flatten :: [[*]] -> [*] */ flatten x = foldr flat [] x, is_list x = x { flat x sofar = foldr flat sofar x, is_list x = x : sofar; } /* foldl fn st l: fold list l from the left with function fn and start st * * Start from the left hand end of the list (unlike foldr, see below). * foldl is less useful (and much slower). * * foldl fn start [a,b .. z] = ((((st fn a) fn b) ..) fn z) * foldl :: (* -> ** -> *) -> * -> [**] -> * */ foldl fn st l = st, l == [] = foldl fn (fn st x) xs { x:xs = l; } /* foldl1 fn l: like foldl, but use the 1st element as the start value * * foldl1 fn [1,2,3] == ((1 fn 2) fn 3) * foldl1 :: (* -> * -> *) -> [*] -> * */ foldl1 fn l = [], l == [] = foldl fn x xs { x:xs = l; } /* foldr fn st l: fold list l from the right with function fn and start st * * foldr fn st [a,b..z] = (a fn (b fn (.. (z fn st)))) * foldr :: (* -> ** -> **) -> ** -> [*] -> ** */ foldr fn st l = st, l == [] = fn x (foldr fn st xs) { x:xs = l; } /* foldr1 fn l: like foldr, but use the last element as the start value * * foldr1 fn [1,2,3,4] == (1 fn (2 fn (3 fn 4))) * foldr1 :: (* -> * -> *) -> [*] -> * */ foldr1 fn l = [], l == [] = x, xs == [] = fn x (foldr1 fn xs) { x:xs = l; } /* Search a list for an element, returning its index (or -1) * * index (equal 12) [13,12,11] == 1 * index :: (* -> bool) -> [*] -> real */ index fn list = search list 0 { search l n = -1, l == [] = n, fn x = search xs (n + 1) { x:xs = l; } } /* init l: remove last element of list l * * The dual of tl. * init [1,2,3] == [1,2] * init :: [*] -> [*] */ init l = error "init of []", l == []; = [], tl l == []; = x : init xs { x:xs = l; } /* iterate f x: repeatedly apply f to x * * return the infinite list [x, f x, f (f x), ..]. * iterate (multiply 2) 1 == [1, 2, 4, 8, 16, 32, 64 ... ] * iterate :: (* -> *) -> * -> [*] */ iterate f x = x : iterate f (f x); /* join_sep sep l: join a list with a separator * * join_sep ", " (map print [1 .. 4]) == "1, 2, 3, 4" * join_sep :: [*] -> [[*]] -> [*] */ join_sep sep l = foldl1 fn l { fn a b = a ++ sep ++ b; } /* last l: return the last element of list l * * The dual of hd. last [1,2,3] == 3 * last :: [*] -> [*] */ last l = error "last of []", l == [] = x, xs == [] = last xs { x:xs = l; } /* len l: length of list l * (see also is_list_len and friends in predicate.def) * * len :: [*] -> num */ len l = 0, l == [] = 1 + len (tl l); /* limit l: return the first element of l which is equal to its predecessor * * useful for checking for convergence * limit :: [*] -> * */ limit l = error "incorrect use of limit", l == [] || tl l == [] || tl (tl l) == [] = a, a == b = limit (b : x) { a:b:x = l; } /* Turn a function of n args into a function which takes a single arg of an * n-element list. */ list_1ary fn x = fn x?0; list_2ary fn x = fn x?0 x?1; list_3ary fn x = fn x?0 x?1 x?2; list_4ary fn x = fn x?0 x?1 x?2 x?3; list_5ary fn x = fn x?0 x?1 x?2 x?3 x?4; list_6ary fn x = fn x?0 x?1 x?2 x?3 x?4 x?5; list_7ary fn x = fn x?0 x?1 x?2 x?3 x?4 x?5 x?6; /* map fn l: map function fn over list l * * map :: (* -> **) -> [*] -> [**] */ map f l = [], l == []; = f (hd l) : map f (tl l); /* map2 fn l1 l2: map two lists together with fn * * map2 :: (* -> ** -> ***) -> [*] -> [**] -> [***] */ map2 fn l1 l2 = map (list_2ary fn) (zip2 l1 l2); /* map3 fn l1 l2 l3: map three lists together with fn * * map3 :: (* -> ** -> *** -> ****) -> [*] -> [**] -> [***] -> [****] */ map3 fn l1 l2 l3 = map (list_3ary fn) (zip3 l1 l2 l3); /* member l x: true if x is a member of list l * * is_digit == member "0123456789" * member :: [*] -> * -> bool */ member l x = any (map (equal x) l); /* merge b l r: merge two lists based on a bool list * * merge :: [bool] -> [*] -> [*] -> [*] */ merge p l r = [], p == [] || l == [] || r == [] = a : merge z x y, c = b : merge z x y { a:x = l; b:y = r; c:z = p; } /* mkset eq l: remove duplicates from list l using equality function * * mkset :: (* -> bool) -> [*] -> [*] */ mkset eq l = [], l == [] = a : filter (not @ eq a) (mkset eq x) { a:x = l; } /* postfix l r: add r to the end of list l * * The dual of ':'. * postfix :: [*] -> ** -> [*,**] */ postfix l r = l ++ [r]; /* repeat x: make an infinite list of xes * * repeat :: * -> [*] */ repeat x = map (const x) [1..]; /* replicate n x: make n copies of x in a list * * replicate :: num -> * -> [*] */ replicate n x = take n (repeat x); /* reverse l: reverse list l * * reverse :: [*] -> [*] */ reverse l = foldl (converse cons) [] l; /* scanl fn st l: apply (foldl fn r) to every initial segment of a list * * scanl add 0 [1,2,3] == [1,3,6] * scanl :: (* -> ** -> *) -> * -> [**] -> [*] */ scanl fn st l = st, l == [] = st' : scanl fn st' xs { x:xs = l; st' = fn st x; } /* sort l: sort list l into ascending order * * sort :: [*] -> [*] */ sort l = sortc less_equal l; /* sortc comp l: sort list l into order using a comparision function * * Uses merge sort (n log n behaviour) * sortc :: (* -> * -> bool) -> [*] -> [*] */ sortc comp l = l, n <= 1 = merge (sortc comp (take n2 l)) (sortc comp (drop n2 l)) { n = len l; n2 = (int) (n / 2); /* merge l1 l2: merge sorted lists l1 and l2 to make a single * sorted list */ merge l1 l2 = l2, l1 == [] = l1, l2 == [] = a : merge x (b : y), comp a b = b : merge (a : x) y { a:x = l1; b:y = l2; } } /* sortpl pl l: sort by a list of predicates * * sortpl :: (* -> bool) -> [*] -> [*] */ sortpl pl l = sortc (test pl) l { /* Comparision function ... put true before false, if equal move on to * the next predicate. */ test pl a b = true, pl == [] = ta, ta != tb = test (tl pl) a b { ta = pl?0 a; tb = pl?0 b; } } /* sortr l: sort list l into descending order * * sortr :: [*] -> [*] */ sortr l = sortc more l; /* split fn l: break a list into sections separated by many fn * * split is_space " hello world " == ["hello", "world"] * split is_space " " == [] * split :: (* -> bool) -> [*] -> [[*]] */ split fn l = [], l == [] || l' == [] = head : split fn tail { nfn = not @ fn; l' = dropwhile fn l; head = takewhile nfn l'; tail = dropwhile nfn l'; } /* splits fn l: break a list into sections separated by a single fn * * split (equal ',') ",,1" == ["", "", "1"] * split :: (* -> bool) -> [*] -> [[*]] */ splits fn l = [], l == [] = head : splits fn tail { fn' = not @ fn; dropif x = [], x == [] = tl x; head = takewhile fn' l; tail = dropif (dropwhile fn' l); } /* splitpl fnl l: split a list up with a list of predicates * * splitpl [is_digit, is_letter, is_digit] "123cat" == ["123", "cat", []] * splitpl :: [* -> bool] -> [*] -> [[*]] */ splitpl fnl l = l, fnl == [] = head : splitpl (tl fnl) tail { head = takewhile (hd fnl) l; tail = dropwhile (hd fnl) l; } /* split_lines n l: split a list into equal length lines * * split_lines 4 "1234567" == ["1234", "567"] * splitl :: int -> [*] -> [[*]] */ split_lines n l = [], l == [] = take n l : split_lines n (drop n l); /* take n l: take the first n elements from list l * take :: num -> [*] -> [*] */ take n l = [], n <= 0 = [], l == [] = hd l : take (n-1) (tl l); /* takewhile fn l: take from the front of a list while predicate fn holds * * takewhile is_digit "123onetwothree" == "123" * takewhile :: (* -> bool) -> [*] -> [*] */ takewhile fn l = [], l == [] = hd l : takewhile fn (tl l), fn (hd l) = []; /* zip2 l1 l2: zip two lists together * * zip2 [1,2] ['a', 'b', 'c'] == [[1,'a'],[2,'b']] * zip2 :: [*] -> [**] -> [[*,**]] */ zip2 l1 l2 = [], l1 == [] || l2 == [] = [hd l1, hd l2] : zip2 (tl l1) (tl l2); /* zip3 l1 l2 l3: zip three lists together * * zip3 [1,2] ['a', 'b', 'c'] [true] == [[1,'a',true]] * zip3 :: [*] -> [**] ->[***] -> [[*,**,***]] */ zip3 l1 l2 l3 = [], l1 == [] || l2 == [] || l3 == [] = [hd l1, hd l2, hd l3] : zip3 (tl l1) (tl l2) (tl l3); nip2-8.7.0/share/nip2/compat/8.6/_magick.def0000644000175000017500000005322113330327312015141 00000000000000/* ImageMagick operations edited by Alan Gibson (aka "snibgo"; snibgo at earthling dot net). 1-Apr-2014 Minor corrections to Geometry_widget and Alpha. Added loads of widgets and Menuactions. Not fully tested. 5-Apr-2014 Many more menu actions. Reorganised Magick menu. 10-Apr-2014 Many more menu actions. 11-Apr-2014 jcupitt Split to separate _magick.def Add 0-ary and 2-ary system Put utility funcs into a Magick class 11-Apr-2014 snibgo Added VirtualPixelBack for cases where background is only relevant when VP=Background 17-Apr-2014 snibgo Many small changes. 2-May-2014 jcupitt Added Magick.version 30-June-2014 Put single-quotes around command exe to help win 1-July-2014 Automatically fall back to gm if we can't find convert 17-July-2014 better GM support Last update: 17-July-2014. For details of ImageMagick operations, see http://www.imagemagick.org/script/command-line-options.php etc. */ /* Put these in a class to avoid filling the main namespace with IM stuff. */ Magick = class { // first gm on path, or "" gm_path = search_for "gm"; // first convert on $PATH, or "" // we check for the convert we ship first convert_path = vips_convert, vips_convert != "" = search_for "convert" { // the convert we ship with the vips binary on some platforms, or "" vips_convert = search (path_absolute convert) { vipshome = path_parse (expand "$VIPSHOME"); convert = vipshome ++ ["bin", "convert" ++ expand "$EXEEXT"]; } } use_gm_pref = Workspaces.Preferences.USE_GRAPHICSMAGICK; // Are we in GM or IM mode? use_gm = true, use_gm_pref && gm_path != "" = false, !use_gm_pref && convert_path != "" = false, convert_path != "" = true, gm_path != "" = error "neither IM nor GM executable found"; command_path = gm_path, use_gm = convert_path; // try to get the version as eg. [6, 7, 7, 10] // GM versions are smaller, typically [1, 3, 18] version = map parse_int (split (member ".-") version_string) { [output] = vips_call "system" ["'" ++ command_path ++ "' -version"] [$log=>true]; version_string = (split (equal ' ') output)?1, use_gm = (split (equal ' ') output)?2; } // make a command-line ... args is a [str] we join with spaces command args = "'" ++ command_path ++ "' " ++ join_sep " " args' { args' = ["convert"] ++ args, use_gm = args; } // capabilities ... different versions support different features, we // turn features on and off based on these // would probably be better to test for caps somehow has_intensity = false, use_gm = version?0 > 6 || version?1 > 7; has_channel = false, use_gm = version?0 > 6 || version?1 > 7; system0 cmd = system_image0 cmd; system cmd x = map_unary (system_image cmd) x; system2 cmd x y = map_binary (system_image2 cmd) x y; system3 cmd x y z = map_trinary (system_image3 cmd) x y z; radius_widget = Scale "Radius" 0 100 10; sigma_widget = Scale "Sigma" 0.1 10 1; angle_widget = Scale "Angle (degrees)" (-360) 360 0; text_widget = String "Text to draw" "AaBbCcDdEe"; gamma_widget = Scale "Gamma" 0 10 1; colors_widget = Scale "Colors" 1 10 3; resize_widget = Scale "Resize (percent)" 0 500 100; fuzz_widget = Scale "Fuzz (percent)" 0 100 0; blur_rad_widget = Scale "Radius (0=auto)" 0 100 0; // a colour with no enclosing quotes ... use this if we know there are // some quotes at an outer level print_colour_nq triple = concat ["#", concat (map fmt triple)] { fmt x = reverse (take 2 (reverse (print_base 16 (x + 256)))); } // we need the quotes because # is the comment character in *nix print_colour triple = "\"" ++ print_colour_nq triple ++ "\""; Foreground triple = class Colour "sRGB" triple { _flag = "-fill " ++ print_colour triple; Colour_edit space triple = this.Foreground triple; } foreground_widget = Foreground [0, 0, 0]; GeneralCol triple = class Colour "sRGB" triple { _flag = print_colour_nq triple; Colour_edit space triple = this.GeneralCol triple; } generalcol_widget = GeneralCol [0, 0, 0]; Background triple = class Colour "sRGB" triple { isNone = Toggle "None (transparent black)" false; _flag = "-background " ++ if isNone then "None" else print_colour triple; Colour_edit space triple = this.Background triple; } background_widget = Background [255, 255, 255]; Bordercol triple = class Colour "sRGB" triple { _flag = "-bordercolor " ++ print_colour triple; Colour_edit space triple = this.Bordercol triple; } bordercol_widget = Bordercol [0, 0, 0]; Mattecol triple = class Colour "sRGB" triple { _flag = "-mattecolor " ++ print_colour triple; Colour_edit space triple = this.Mattecol triple; } mattecol_widget = Mattecol [189, 189, 189]; // FIXME: Undercolour, like many others, can have alpha channel. // How does user input this? With a slider? Undercol triple = class Colour "sRGB" triple { isNone = Toggle "None (transparent black)" true; _flag = if isNone then "" else ("-undercolor " ++ print_colour triple); Colour_edit space triple = this.Undercol triple; } undercol_widget = Undercol [0, 0, 0]; changeCol_widget = class { _vislevel = 3; colour = GeneralCol [0, 0, 0]; fuzz = fuzz_widget; nonMatch = Toggle "change non-matching colours" false; } Alpha alpha = class Option_string "Alpha" [ "On", "Off", "Set", "Opaque", "Transparent", "Extract", "Copy", "Shape", "Remove", "Background" ] alpha { _flag = "-alpha " ++ alpha; Option_edit caption labels value = this.Alpha labels?value; } alpha_widget = Alpha "On"; Antialias value = class Toggle "Antialias" value { _flag = "-antialias", value = "+antialias"; Toggle_edit caption value = this.Antialias value; } antialias_widget = Antialias true; Builtin builtin = class Option_string "Builtin" [ // See http://www.imagemagick.org/script/formats.php "rose:", "logo:", "wizard:", "granite:", "netscape:" ] builtin { _flag = builtin; Option_edit caption labels value = this.Builtin labels?value; } builtin_widget = Builtin "rose:"; channels_widget = class { // FIXME? Can we grey-out alpha when we have no alpha channel, // show CMY(K) instead of RGB(K) etc? // Yes, perhaps we can create different widgets for RGB, RGBA, CMY, CMYK, CMYA, CMYKA. ChanR valueR = class Toggle "Red" valueR { _flag = "R", valueR = ""; Toggle_edit caption valueR = this.ChanR valueR; } channelR = ChanR true; ChanG valueG = class Toggle "Green" valueG { _flag = "G", valueG = ""; Toggle_edit caption valueG = this.ChanG valueG; } channelG = ChanG true; ChanB valueB = class Toggle "Blue" valueB { _flag = "B", valueB = ""; Toggle_edit caption valueB = this.ChanB valueB; } channelB = ChanB true; ChanK valueK = class Toggle "Black" valueK { _flag = "K", valueK = ""; Toggle_edit caption valueK = this.ChanK valueK; } channelK = ChanK true; ChanA valueA = class Toggle "Alpha" valueA { _flag = "A", valueA = ""; Toggle_edit caption valueA = this.ChanA valueA; } channelA = ChanA false; ChanSy valueSy = class Toggle "Sync" valueSy { _flag = ",sync", valueSy = ""; Toggle_edit caption valueSy = this.ChanSy valueSy; } channelSy = ChanSy true; _rgbka = concat [channelR._flag, channelG._flag, channelB._flag, channelK._flag, channelA._flag ]; _flag = "", _rgbka == "" || !has_channel = concat [ "-channel ", _rgbka, channelSy._flag ]; } ch_widget = channels_widget; Colorspace colsp = class Option_string "Colorspace" [ "CIELab", "CMY", "CMYK", "Gray", "HCL", "HCLp", "HSB", "HSI", "HSL", "HSV", "HWB", "Lab", "LCH", "LCHab", "LCHuv", "LMS", "Log", "Luv", "OHTA", "Rec601Luma", "Rec601YCbCr", "Rec709Luma", "Rec709YCbCr", "RGB", "scRGB", "sRGB", "Transparent", "XYZ", "YCbCr", "YDbDr", "YCC", "YIQ", "YPbPr", "YUV" ] colsp { _flag = colsp; Option_edit caption labels value = this.Colorspace labels?value; } colorspace_widget = Colorspace "sRGB"; Compose comp = class Option_string "Compose method" [ "Atop", "Blend", "Blur", "Bumpmap", "ChangeMask", "Clear", "ColorBurn", "ColorDodge", "Colorize", "CopyBlack", "CopyBlue", "CopyCyan", "CopyGreen", "Copy", "CopyMagenta", "CopyOpacity", "CopyRed", "CopyYellow", "Darken", "DarkenIntensity", "DivideDst", "DivideSrc", "Dst", "Difference", "Displace", "Dissolve", "Distort", "DstAtop", "DstIn", "DstOut", "DstOver", "Exclusion", "HardLight", "Hue", "In", "Lighten", "LightenIntensity", "LinearBurn", "LinearDodge", "LinearLight", "Luminize", "Mathematics", "MinusDst", "MinusSrc", "Modulate", "ModulusAdd", "ModulusSubtract", "Multiply", "None", "Out", "Overlay", "Over", "PegtopLight", "PinLight", "Plus", "Replace", "Saturate", "Screen", "SoftLight", "Src", "SrcAtop", "SrcIn", "SrcOut", "SrcOver", "VividLight", "Xor" ] comp { _flag = "-compose " ++ comp; Option_edit caption labels value = this.Compose labels?value; } compose_widget = Compose "Over"; // FIXME: Some compose mehods (Displace, Distort, Mathematics) need a string. // FIXME: we could use a class that does both -compose and -intensity, for methods LightenIntensity, DarkenIntensity, CopyOpacity, CopyBlack coordinate_widget = class { _vislevel = 3; x = Expression "X" 0; y = Expression "Y" 0; _flag = concat [print x.expr, ",", print y.expr]; }; Distort distort = class Option_string "Distort" [ "Affine", "AffineProjection", "ScaleRotateTranslate", "SRT", "Perspective", "PerspectiveProjection", "BilinearForward", "BilinearReverse", "Polynomial", "Arc", "Polar", "DePolar", "Barrel", "BarrelInverse", "Shepards", "Resize" ] distort { _flag = distort; Option_edit caption labels value = this.Distort labels?value; } distort_widget = Distort "SRT"; Dither dither = class Option_string "Dither" [ "None", "FloydSteinberg", "Riemersma" ] dither { _flag = "-dither " ++ dither; Option_edit caption labels value = this.Dither labels?value; } dither_widget = Dither "FloydSteinberg"; Evaluate eval = class Option_string "Evaluate operation" [ "Abs", "Add", "AddModulus", "And", "Cos", "Cosine", "Divide", "Exp", "Exponential", "GaussianNoise", "ImpulseNoise", "LaplacianNoise", "LeftShift", "Log", "Max", "Mean", "Median", "Min", "MultiplicativeNoise", "Multiply", "Or", "PoissonNoise", "Pow", "RightShift", "Set", "Sin", "Sine", "Subtract", "Sum", "Threshold", "ThresholdBlack", "ThresholdWhite", "UniformNoise", "Xor" ] eval { _flag = "-evaluate " ++ eval; Option_edit caption labels value = this.Evaluate labels?value; } evaluate_widget = Evaluate "Add"; Filter filt = class Option_string "Filter" [ "default", "Bartlett", "Blackman", "Bohman", "Box", "Catrom", "Cosine", "Cubic", "Gaussian", "Hamming", "Hann", "Hermite", "Jinc", "Kaiser", "Lagrange", "Lanczos", "Lanczos2", "Lanczos2Sharp", "LanczosRadius", "LanczosSharp", "Mitchell", "Parzen", "Point", "Quadratic", "Robidoux", "RobidouxSharp", "Sinc", "SincFast", "Spline", "Triangle", "Welch" ] filt { _flag = if filt == "default" then "" else "-filter " ++ filt; Option_edit caption labels value = this.Filter labels?value; } filter_widget = Filter "default"; Function func = class Option_string "Function" [ "Polynomial", "Sinusoid", "Arcsin", "Arctan" ] func { _flag = func; Option_edit caption labels value = this.Function labels?value; } function_widget = Function "Polynomial"; // "Polynomial (a[n], a[n-1], ... a[1], a[0])", // "Sinusoid (freq, phase, amp, bias)", // "Arcsin (width, centre, range, bias)", // "Arctan (slope, centre, range, bias)" Gravity gravity = class Option_string "Gravity" [ "None", "Center", "East", "Forget", "NorthEast", "North", "NorthWest", "SouthEast", "South", "SouthWest", "West", "Static" ] gravity { _flag = "-gravity " ++ gravity; Option_edit caption labels value = this.Gravity labels?value; } gravity_widget = Gravity "Center"; ImageType imagetype = class Option_string "Image type" [ "Bilevel", "ColorSeparation", "ColorSeparationAlpha", "ColorSeparationMatte", "Grayscale", "GrayscaleAlpha", "GrayscaleMatte", "Optimize", "Palette", "PaletteBilevelAlpha", "PaletteBilevelMatte", "PaletteAlpha", "PaletteMatte", "TrueColorAlpha", "TrueColorMatte", "TrueColor" ] imagetype { _flag = "-type " ++ imagetype; Option_edit caption labels value = this.ImageType labels?value; } imagetype_widget = ImageType "TrueColor"; Intensity intensity = class Option_string "Intensity (gray conversion)" [ "Average", "Brightness", "Lightness", "MS", "Rec601Luma", "Rec601Luminance", "Rec709Luma", "Rec709Luminance", "RMS" ] intensity { _flag = "-intensity " ++ intensity, has_intensity = ""; Option_edit caption labels value = this.Intensity labels?value; } intensity_widget = Intensity "Rec709Luminance"; Interpolate interp = class Option_string "Interpolate" [ "default", "Average", "Average4", "Average9", "Average16", "Background", "Bilinear", "Blend", "Integer", "Mesh", "Nearest", "NearestNeighbor", "Spline" ] interp { _flag = if interp == "default" then "" else "-interpolate " ++ interp; Option_edit caption labels value = this.Interpolate labels?value; } interpolate_widget = Interpolate "default"; Kernel kernel = class Option_string "Kernel" [ "Unity", "Gaussian", "DoG", "LoG", "Blur", "Comet", "Binomial", "Laplacian", "Sobel", "FreiChen", "Roberts", "Prewitt", "Compass", "Kirsch", "Diamond", "Square", "Rectangle", "Disk", "Octagon", "Plus", "Cross", "Ring", "Peaks", "Edges", "Corners", "Diagonals", "LineEnds", "LineJunctions", "Ridges", "ConvexHull", "ThinSe", "Skeleton", "Chebyshev", "Manhattan", "Octagonal", "Euclidean" // FIXME: custom kernel ] kernel { _flag = kernel; Option_edit caption labels value = this.Kernel labels?value; } kernel_widget = Kernel "Unity"; ModColSp msp = class Option_string "modulate colorspace" [ "HCL", "HCLp", "HSB", "HSI", "HSL", "HSV", "HWB", "LCH" ] msp { _flag = "-set option:modulate:colorspace " ++ msp; Option_edit caption labels value = this.ModColSp labels?value; } ModColSp_widget = ModColSp "HSL"; MorphMeth morph = class Option_string "Method" [ "Correlate", "Convolve", "Dilate", "Erode", "Close", "Open", "DilateIntensity", "ErodeIntensity", "CloseIntensity", "OpenIntensity", "Smooth", "EdgeOut", "EdgeIn", "Edge", "TopHat", "BottomHat", "HitAndMiss", "Thinning", "Thicken", "Distance", "IterativeDistance" ] morph { _flag = morph; Option_edit caption labels value = this.MorphMeth labels?value; } morphmeth_widget = MorphMeth "Dilate"; Noise noise = class Option_string "Noise" [ "Gaussian", "Impulse", "Laplacian", "Multiplicative", "Poisson", "Random", "Uniform" ] noise { _flag = "+noise " ++ noise; Option_edit caption labels value = this.Noise labels?value; } noise_widget = Noise "Gaussian"; Pattern pattern = class Option_string "Noise" [ // See http://www.imagemagick.org/script/formats.php "bricks", "checkerboard", "circles", "crosshatch", "crosshatch30", "crosshatch45", "gray0", "gray5", "gray10", "gray15", "gray20", "gray25", "gray30", "gray35", "gray40", "gray45", "gray50", "gray55", "gray60", "gray65", "gray70", "gray75", "gray80", "gray85", "gray90", "gray95", "gray100", "hexagons", "horizontal", "horizontal2", "horizontal3", "horizontalsaw", "hs_bdiagonal", "hs_cross", "hs_diagcross", "hs_fdiagonal", "hs_horizontal", "hs_vertical", "left30", "left45", "leftshingle", "octagons", "right30", "right45", "rightshingle", "smallfishscales", "vertical", "vertical2", "vertical3", "verticalbricks", "verticalleftshingle", "verticalrightshingle", "verticalsaw" ] pattern { _flag = "pattern:" ++ pattern; Option_edit caption labels value = this.Pattern labels?value; } pattern_widget = Pattern "bricks"; ResizeType resizet = class Option_string "Resize type" [ "resize", "scale", "sample", "adaptive-resize" ] resizet { _flag = resizet; Option_edit caption labels value = this.ResizeType labels?value; } ResizeType_widget = ResizeType "resize"; Size_widget = class { _vislevel = 3; width = Expression "Width (pixels)" 64; height = Expression "Height (pixels)" 64; _flag = "-size " ++ print width.expr ++ "x" ++ print height.expr; }; StatType statt = class Option_string "Statistic type" [ "Gradient", "Maximum", "Mean", "Median", "Minimum", "Mode", "Nonpeak", "StandardDeviation" ] statt { _flag = statt; Option_edit caption labels value = this.StatType labels?value; } StatType_widget = StatType "Mean"; VirtualPixel vp = class Option_string "Virtual pixel" [ "Background", "Black", "CheckerTile", "Dither", "Edge", "Gray", "HorizontalTile", "HorizontalTileEdge", "Mirror", "None", "Random", "Tile", "Transparent", "VerticalTile", "VerticalTileEdge", "White" ] vp { _flag = "-virtual-pixel " ++ vp; _isBackground = (vp == "Background"); Option_edit caption labels value = this.VirtualPixel labels?value; } VirtualPixel_widget = VirtualPixel "Edge"; VirtualPixelBack_widget = class { virtpix = Magick.VirtualPixel_widget; background = Magick.background_widget; _flag = (if virtpix._isBackground then (background._flag ++ " ") else "") ++ virtpix._flag; } Geometry_widget = class { _vislevel = 3; x = Expression "X" 0; y = Expression "Y" 0; hoffset = Expression "Horizontal offset" 0; voffset = Expression "Vertical offset" 0; _flag = concat [print x.expr, "x", print y.expr, format hoffset, format voffset] { // print an offset ... we want '+' in front of +ve strings format offset = concat ["+", print offset.expr], offset.expr >= 0 = print offset.expr; } }; AnnotGeometry_widget = class { _vislevel = 3; shearX = Expression "shear X (degrees)" 0; shearY = Expression "shear Y (degrees)" 0; hoffset = Expression "Horizontal offset" 0; voffset = Expression "Vertical offset" 0; _flag = concat [print shearX.expr, "x", print shearY.expr, format hoffset, format voffset] { // print an offset ... we want '+' in front of +ve strings format offset = concat ["+", print offset.expr], offset.expr >= 0 = print offset.expr; } }; OffsetGeometry_widget = class { _vislevel = 3; hoffset = Expression "Horizontal offset" 0; voffset = Expression "Vertical offset" 0; _flag = concat [format hoffset, format voffset] { // print an offset ... we want '+' in front of +ve strings format offset = concat ["+", print offset.expr], offset.expr >= 0 = print offset.expr; } }; WhxyGeometry_widget = class { _vislevel = 3; x = Expression "Width" 0; y = Expression "Height" 0; hoffset = Expression "Horizontal offset" 0; voffset = Expression "Vertical offset" 0; _flag = concat [print x.expr, "x", print y.expr, format hoffset, format voffset] { // print an offset ... we want '+' in front of +ve strings format offset = concat ["+", print offset.expr], offset.expr >= 0 = print offset.expr; } }; FrameGeometry_widget = class { _vislevel = 3; x = Expression "Width" 0; y = Expression "Height" 0; outbev = Expression "Outer bevel thickness" 0; inbev = Expression "Inner bevel thickness" 0; _flag = concat [print x.expr, "x", print y.expr, format outbev, format inbev] { // print an offset ... we want '+' in front of +ve strings format offset = concat ["+", print offset.expr], offset.expr >= 0 = print offset.expr; } }; Font_widget = class { _vislevel = 3; family = Option_string "Family" [ "Arial", "ArialBlack", "AvantGarde", "BitstreamCharter", "Bookman", "CenturySchoolbook", "ComicSansMS", "Courier", "CourierNew", "DejaVuSans", "DejaVuSansMono", "DejaVuSerif", "Dingbats", "FreeMono", "FreeSans", "FreeSerif", "Garuda", "Georgia", "Helvetica", "HelveticaNarrow", "Impact", "LiberationMono", "LiberationSans", "LiberationSerif", "NewCenturySchlbk", "Palatino", "Purisa", "Symbol", "Times", "TimesNewRoman", "Ubuntu", "Verdana", "Webdings" ] "Arial"; style = Option_string "Style" [ "Any", "Italic", "Normal", "Oblique" ] "Normal"; weight = Scale "Weight" 1 800 400; size = Scale "Point size" 1 100 12; stretch = Option_string "Stretch" [ "Any", "Condensed", "Expanded", "ExtraCondensed", "ExtraExpanded", "Normal", "SemiCondensed", "SemiExpanded", "UltraCondensed", "UltraExpanded" ] "Normal"; _flag = join_sep " " [ "-family", family.item, "-weight", print weight.value, "-pointsize", print size.value, "-style", style.item, "-stretch", stretch.item]; } } nip2-8.7.0/share/nip2/compat/8.6/_Object.def0000644000175000017500000002600513330327312015114 00000000000000/* Lots of little arg checks. Global for convenience. */ check_any = [(const true), _ "any"]; check_bool = [is_bool, _ "boolean"]; check_real = [is_real, _ "real"]; check_ureal = [is_ureal, _ "unsigned real"]; check_preal = [is_preal, _ "positive real"]; check_list = [is_list, _ "list"]; check_real_list = [is_real_list, _ "list of real"]; check_string = [is_string, _ "string"]; check_string_list = [is_string_list, _ "list of string"]; check_int = [is_int, _ "integer"]; check_uint = [is_uint, _ "unsigned integer"]; check_pint = [is_pint, _ "positive integer"]; check_matrix = [is_matrix, _ "rectangular array of real"]; check_matrix_display = [Matrix_display.is_display, _ "0|1|2|3"]; check_image = [is_image, _ "image"]; check_xy_list = [is_xy_list, _ "list of form [[1, 2], [3, 4], [5, 6], ...]"]; check_instance name = [is_instanceof name, name]; check_Image = check_instance "Image"; check_Matrix = [is_Matrix, _ "Matrix"]; check_colour_space = [is_colour_space, join_sep "|" Image_type.colour_spaces.names]; check_rectangular = [is_rectangular, _ "rectangular [[*]]"]; check_Guide = [is_Guide, _ "HGuide|VGuide"]; check_Colour = check_instance (_ "Colour"); check_Mark = check_instance (_ "Mark"); /* Check a set of args to a class. Two members to look at: _check_args and * _check_all. * * - each line in _check_args is [arg, "arg name", [test_fn, "arg type"]] * same number of lines as there are args * * stuff like "arg 2 must be real" * * - each line in _check_all is [test, "description"] * any number of lines * * stuff like "to must be greater than from" * * generate an error dialog with a helpful message on failure. * * Have as a separate function to try to keep the size of _Object down. */ check_args x = error message, badargs != [] || badalls != [] = x { argcheck = x._check_args; allcheck = x._check_all; // indent string indent = " "; // test for a condition in a check line fails test_fail x = ! x?0; // set of failed argcheck indexes badargs = map (extract 1) (filter test_fail (zip2 (map testarg argcheck) [0..])) { testarg x = x?2?0 x?0; } // set of failed allcheck indexes badalls = map (extract 1) (filter test_fail (zip2 (map hd allcheck) [0..])); // the error message message = _ "bad properties for " ++ "\"" ++ x.name ++ "\"\n" ++ argmsg ++ allmsg ++ "\n" ++ _ "where" ++ "\n" ++ arg_types ++ extra; // make the failed argcheck messages ... eg. ""value" should be // real, you passed " etc. argmsg = concat (map fmt badargs) { fmt n = indent ++ "\"" ++ argcheck?n?1 ++ "\"" ++ _ " should be of type " ++ argcheck?n?2?1 ++ ", " ++ _ "you passed" ++ ":\n" ++ indent ++ indent ++ print argcheck?n?0 ++ "\n"; } // make the failed allcheck messages ... eg "condition failed: // x < y" ... don't make a message if any typechecks have // failed, as we'll probably error horribly allmsg = [], badargs != [] = concat (map fmt badalls) ++ _ "you passed" ++ "\n" ++ concat (map fmt_arg argcheck) { fmt n = _ "condition failed" ++ ": " ++ allcheck?n?1 ++ "\n"; fmt_arg l = indent ++ l?1 ++ " = " ++ print l?0 ++ "\n"; } // make arg type notes arg_types = join_sep "\n" (map fmt argcheck) { fmt l = indent ++ l?1 ++ " is of type " ++ l?2?1; } // extra bit at the bottom, if we have any conditions extra = [], allcheck == [] = "\n" ++ _ "and" ++ "\n" ++ all_desc; // make a list of all the allcheck descriptions, with a few // spaces in front all_desc_list = map (join indent @ extract 1) allcheck; // join em up to make a set of condition notes all_desc = join_sep "\n" all_desc_list; } /* Operator overloading stuff. */ Operator_type = class { ARITHMETIC = 1; // eg. add RELATIONAL = 2; // eg. less COMPOUND = 3; // eg. max/mean/etc. COMPOUND_REWRAP = 4; // eg. transpose } Operator op_name fn type symmetric = class { } /* Form the converse of an Operator. */ oo_converse op = Operator (converse_name op.op_name) (converse op.fn) op.type op.symmetric { converse_name x = init x, last x == last "'" = x ++ "'"; } /* Given an operator name, look up the definition. */ oo_binary_lookup op_name = matches?0, matches != [] = error (_ "unknown binary operator" ++ ": " ++ print op_name) { operator_table = [ Operator "add" add Operator_type.ARITHMETIC true, Operator "subtract" subtract Operator_type.ARITHMETIC false, Operator "remainder" remainder Operator_type.ARITHMETIC false, Operator "power" power Operator_type.ARITHMETIC false, Operator "subscript" subscript Operator_type.ARITHMETIC false, Operator "left_shift" left_shift Operator_type.ARITHMETIC false, Operator "right_shift" right_shift Operator_type.ARITHMETIC false, Operator "divide" divide Operator_type.ARITHMETIC false, Operator "join" join Operator_type.ARITHMETIC false, Operator "multiply" multiply Operator_type.ARITHMETIC true, Operator "logical_and" logical_and Operator_type.ARITHMETIC true, Operator "logical_or" logical_or Operator_type.ARITHMETIC true, Operator "bitwise_and" bitwise_and Operator_type.ARITHMETIC true, Operator "bitwise_or" bitwise_or Operator_type.ARITHMETIC true, Operator "eor" eor Operator_type.ARITHMETIC true, Operator "comma" comma Operator_type.ARITHMETIC false, Operator "if_then_else" if_then_else Operator_type.ARITHMETIC false, Operator "equal" equal Operator_type.RELATIONAL true, Operator "not_equal" not_equal Operator_type.RELATIONAL true, Operator "less" less Operator_type.RELATIONAL false, Operator "less_equal" less_equal Operator_type.RELATIONAL false ]; matches = filter test_name operator_table; test_name x = x.op_name == op_name; } /* Given an operator name, look up a function that implements that * operator. */ oo_unary_lookup op_name = matches?0, matches != [] = error (_ "unknown unary operator" ++ ": " ++ print op_name) { operator_table = [ /* Operators. */ Operator "cast_signed_char" cast_signed_char Operator_type.ARITHMETIC false, Operator "cast_unsigned_char" cast_unsigned_char Operator_type.ARITHMETIC false, Operator "cast_signed_short" cast_signed_short Operator_type.ARITHMETIC false, Operator "cast_unsigned_short" cast_unsigned_short Operator_type.ARITHMETIC false, Operator "cast_signed_int" cast_signed_int Operator_type.ARITHMETIC false, Operator "cast_unsigned_int" cast_unsigned_int Operator_type.ARITHMETIC false, Operator "cast_float" cast_float Operator_type.ARITHMETIC false, Operator "cast_double" cast_double Operator_type.ARITHMETIC false, Operator "cast_complex" cast_complex Operator_type.ARITHMETIC false, Operator "cast_double_complex" cast_double_complex Operator_type.ARITHMETIC false, Operator "unary_minus" unary_minus Operator_type.ARITHMETIC false, Operator "negate" negate Operator_type.RELATIONAL false, Operator "complement" complement Operator_type.ARITHMETIC false, Operator "unary_plus" unary_plus Operator_type.ARITHMETIC false, /* Built in projections. */ Operator "re" re Operator_type.ARITHMETIC false, Operator "im" im Operator_type.ARITHMETIC false, Operator "hd" hd Operator_type.ARITHMETIC false, Operator "tl" tl Operator_type.ARITHMETIC false, /* Maths builtins. */ Operator "sin" sin Operator_type.ARITHMETIC false, Operator "cos" cos Operator_type.ARITHMETIC false, Operator "tan" tan Operator_type.ARITHMETIC false, Operator "asin" asin Operator_type.ARITHMETIC false, Operator "acos" acos Operator_type.ARITHMETIC false, Operator "atan" atan Operator_type.ARITHMETIC false, Operator "log" log Operator_type.ARITHMETIC false, Operator "log10" log10 Operator_type.ARITHMETIC false, Operator "exp" exp Operator_type.ARITHMETIC false, Operator "exp10" exp10 Operator_type.ARITHMETIC false, Operator "ceil" ceil Operator_type.ARITHMETIC false, Operator "floor" floor Operator_type.ARITHMETIC false ]; matches = filter test_name operator_table; test_name x = x.op_name == op_name; } /* Find the matching methods in a method table. */ oo_method_lookup table = map (extract 0) (filter (extract 1) table); /* A binary op: a is a class, b may be a class ... eg. "add" a b two obvious ways to find a method: - a.oo_binary_search "add" (+) b - b.oo_binary_search "add'" (converse (+)) a, is_class b if these fail but op is a symmetric operator (eg. a + b == b + a), we can also try reversing the args - a.oo_binary_search "add'" (converse (+)) b - b.oo_binary_search "add" (+) a, is_class b if those fail as well, but this is ==, do pointer equals as a fallback */ oo_binary_function op a b = matches1?0, matches1 != [] = matches2?0, is_class b && matches2 != [] = matches3?0, op.symmetric && matches3 != [] = matches4?0, op.symmetric && is_class b && matches4 != [] = pointer_equal a b, op.op_name == "equal" || op.op_name == "equal'" = not_pointer_equal a b, op.op_name == "not_equal" || op.op_name == "not_equal'" = error (_ "No method found for binary operator." ++ "\n" ++ _ "left" ++ " = " ++ print a ++ "\n" ++ _ "operator" ++ " = " ++ op.op_name ++ "\n" ++ _ "right" ++ " = " ++ print b) { matches1 = oo_method_lookup (a.oo_binary_table op b); matches2 = oo_method_lookup (b.oo_binary_table (oo_converse op) a); matches3 = oo_method_lookup (a.oo_binary_table (oo_converse op) b); matches4 = oo_method_lookup (b.oo_binary_table op a); } /* A binary op: a is not a class, b is a class ... eg. "subtract" a b only one way to find a method: - b.oo_binary_search "subtract'" (converse (-)) a if this fails but op is a symmetric operator (eg. a + b == b + a), we can try reversing the args - b.oo_binary_search "add" (+) a, is_class b if that fails as well, but this is ==, do pointer equals as a fallback */ oo_binary'_function op a b = matches1?0, matches1 != [] = matches2?0, op.symmetric && matches2 != [] = pointer_equal a b, op.op_name == "equal" || op.op_name == "equal'" = not_pointer_equal a b, op.op_name == "not_equal" || op.op_name == "not_equal'" = error (_ "No method found for binary operator." ++ "\n" ++ _ "left" ++ " = " ++ print a ++ "\n" ++ _ "operator" ++ " = " ++ op.op_name ++ "\n" ++ _ "right" ++ " = " ++ print b) { matches1 = oo_method_lookup (b.oo_binary_table (oo_converse op) a); matches2 = oo_method_lookup (b.oo_binary_table op a); } oo_unary_function op x = matches?0, matches != [] = error (_ "No method found for unary operator." ++ "\n" ++ _ "operator" ++ " = " ++ op.op_name ++ "\n" ++ _ "argument" ++ " = " ++ print x) { matches = oo_method_lookup (x.oo_unary_table op); } /* Base class for nip's built-in classes ... base check function, base * operator overload functions. */ _Object = class { check = check_args this; // these should always be defined _check_args = []; _check_all = []; /* Operator overloading stuff. */ oo_binary op x = oo_binary_function (oo_binary_lookup op) this x; oo_binary' op x = oo_binary'_function (oo_binary_lookup op) x this; oo_unary op = oo_unary_function (oo_unary_lookup op) this; oo_binary_table op x = []; oo_unary_table op = []; } nip2-8.7.0/share/nip2/compat/8.6/Magick.def0000644000175000017500000014112713330327312014745 00000000000000/* ImageMagick operations edited by Alan Gibson (aka "snibgo"; snibgo at earthling dot net). 1-Apr-2014 Minor corrections to Geometry_widget and Alpha. Added loads of widgets and Menuactions. Not fully tested. 5-Apr-2014 Many more menu actions. Reorganised Magick menu. 10-Apr-2014 Many more menu actions. 11-Apr-2014 jcupitt Split to separate Magick.def 13-Apr-2014 snibgo Put "new image" items into sub-menu. New class VirtualPixlBack. 17-Apr-2014 snibgo Many small changes. A few new menu options. Created sub-menu for multi-input operations. 3-May-2014 jcupitt Put quotes around ( in shadow to help unix Last update: 17-Apr-2014. For details of ImageMagick operations, see http://www.imagemagick.org/script/command-line-options.php etc. */ // We don't need Noop. /*=== Magick_noop_item = class Menuaction "_Noop" "no operation" { action x = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "\"%s\"" ]; _result = Magick.system command x; } } ===*/ Magick_testPar_item = class Menuaction "_TestPar" "no operation" { action x = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "( +clone ) +append ", "\"%s\"" ]; _result = Magick.system command x; } } /* Removed Read_item and Write_item, much better to use nip2 load/save image. * Plus they can load all libMagick formats anyway. */ // Put "new image" items into sub-menu Magick_NewImageMenu_item = class Menupullright "_New image" "make a new image" { Magick_newcanvas_item = class Menuaction "_Solid colour" "make image of solid colour" { action = class _result { _vislevel = 3; size = Magick.Size_widget; colour = Magick.generalcol_widget; command = Magick.command [ size._flag, "\"canvas:" ++ colour._flag ++ "\"", "\"%s\"" ]; _result = Magick.system0 command; } } Magick_builtin_item = class Menuaction "_Built-in image" "create a built-in image" { action = class _result { _vislevel = 3; builtin = Magick.builtin_widget; command = Magick.command [ builtin._flag, "\"%s\"" ]; _result = Magick.system0 command; } } Magick_gradient_item = class Menuaction "_Gradient" "make a linear gradient between two colours" { action = class _result { _vislevel = 3; size = Magick.Size_widget; topColour = Magick.generalcol_widget; bottomColour = Magick.generalcol_widget; command = Magick.command [ size._flag, concat ["\"gradient:", topColour._flag, "-", bottomColour._flag, "\""], "\"%s\"" ]; _result = Magick.system0 command; } } Magick_hald_item = class Menuaction "_Hald-clut image" "create an identity hald-clut image" { action = class _result { _vislevel = 3; order = Expression "order" 8; command = Magick.command [ "hald:" ++ print order.expr, "\"%s\"" ]; _result = Magick.system0 command; } } Magick_pattern_item = class Menuaction "_Pattern" "create pattern" { action = class _result { _vislevel = 3; size = Magick.Size_widget; pattern = Magick.pattern_widget; command = Magick.command [ size._flag, pattern._flag, "\"%s\"" ]; _result = Magick.system0 command; } } Magick_plasma_item = class Menuaction "_Plasma image" "create plasma image" { action = class _result { _vislevel = 3; size = Magick.Size_widget; // FIXME? ColourA-ColourB. // FIXME? Allow plasma:fractal? command = Magick.command [ size._flag, "plasma:", "\"%s\"" ]; _result = Magick.system0 command; } } Magick_radialgradient_item = class Menuaction "_Radial gradient" "make a radial gradient between two colours" { action = class _result { _vislevel = 3; size = Magick.Size_widget; innerColour = Magick.generalcol_widget; outerColour = Magick.generalcol_widget; command = Magick.command [ size._flag, concat ["\"radial-gradient:", innerColour._flag, "-", outerColour._flag, "\""], "\"%s\"" ]; _result = Magick.system0 command; } } } // end Magick_NewImageMenu_item Magick_MultiMenu_item = class Menupullright "_Multiple inputs" "make an image from multiple images" { Magick_composite_item = class Menuaction "_Composite" "composite two images (without mask)" { action x y = class _result { _vislevel = 3; method = Magick.compose_widget; offsets = Magick.OffsetGeometry_widget; gravity = Magick.gravity_widget; command = Magick.command [ "\"%s\"", "\"%s\"", "-geometry", offsets._flag, gravity._flag, method._flag, "-composite", "\"%s\"" ]; _result = Magick.system2 command x y; } } Magick_compositeMask_item = class Menuaction "_Composite masked" "composite two images (with mask)" { action x y z = class _result { _vislevel = 3; method = Magick.compose_widget; offsets = Magick.OffsetGeometry_widget; gravity = Magick.gravity_widget; command = Magick.command [ "\"%s\"", "\"%s\"", "\"%s\"", "-geometry", offsets._flag, gravity._flag, method._flag, "-composite", "\"%s\"" ]; _result = Magick.system3 command x y z; } } // FIXME: other operations like remap that take another image as arguments are: // mask (pointless?), texture, tile (pointless?) // FIXME: operations that take a filename that isn't an image: // cdl, profile Magick_clut_item = class Menuaction "_Clut" "replace values using second image as colour look-up table" { action x y = class _result { _vislevel = 3; // FIXME: uses -intensity "when mapping greyscale CLUT image to alpha channel if set by -channels" command = Magick.command [ "\"%s\"", "\"%s\"", "-clut", "\"%s\"" ]; _result = Magick.system2 command x y; } } Magick_haldclut_item = class Menuaction "_Hald clut" "replace values using second image as Hald colour look-up table" { action x y = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "\"%s\"", "-hald-clut", "\"%s\"" ]; _result = Magick.system2 command x y; } } // Encipher and decipher: key files can be text or image files. Magick_encipher_item = class Menuaction "_Encipher/Decipher" "encipher or decipher an image image" { action x = class _result { _vislevel = 3; pathname = Pathname "Read key file" ""; isDecipher = Toggle "Decipher" false; command = Magick.command [ "\"%s\"", if pathname.value == "" then "" else ( ( if isDecipher then "-decipher " else "-encipher ") ++ ( "\"" ++ pathname.value ++ "\"" ) ), "\"%s\"" ]; _result = Magick.system command x; } } Magick_profile_item = class Menuaction "_Profile" "assigns/applies an ICC profile" { action x = class _result { _vislevel = 3; pathname1 = Pathname "Read profile file" ""; pathname2 = Pathname "Read profile file" ""; command = Magick.command [ "\"%s\"", if pathname1.value == "" then "" else ( "-profile " ++ "\"" ++ pathname1.value ++ "\""), if pathname2.value == "" then "" else ( "-profile " ++ "\"" ++ pathname2.value ++ "\""), "\"%s\"" ]; _result = Magick.system command x; } } Magick_remap_item = class Menuaction "_Remap" "reduce colours to those in another image" { action x y = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "-remap", "\"%s\"", "\"%s\"" ]; _result = Magick.system2 command x y; } } } // end Magick_MultiMenu_item Magick_image_type_item = class Menuaction "_Image Type" "change image type" { action x = class _result { _vislevel = 3; imagetype = Magick.imagetype_widget; command = Magick.command [ "\"%s\"", imagetype._flag, "\"%s\"" ]; _result = Magick.system command x; } } sep2 = Menuseparator; Magick_alpha_item = class Menuaction "_Alpha" "add/remove alpha channel" { action x = class _result { _vislevel = 3; alpha = Magick.alpha_widget; command = Magick.command [ "\"%s\"", alpha._flag, "\"%s\"" ]; _result = Magick.system command x; } } Magick_annotate_item = class Menuaction "_Annotate" "add text annotation" { action x = class _result { _vislevel = 3; text = Magick.text_widget; font = Magick.Font_widget; geometry = Magick.AnnotGeometry_widget; gravity = Magick.gravity_widget; foreground = Magick.foreground_widget; undercol = Magick.undercol_widget; antialias = Magick.antialias_widget; command = Magick.command [ "\"%s\"", font._flag, antialias._flag, gravity._flag, foreground._flag, undercol._flag, "-annotate", geometry._flag, "\"" ++ text.value ++ "\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_autoGamma_item = class Menuaction "_AutoGamma" "automatic gamma" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; command = Magick.command [ "\"%s\"", channels._flag, "-auto-gamma", "\"%s\"" ]; _result = Magick.system command x; } } Magick_autoLevel_item = class Menuaction "_AutoLevel" "automatic level" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; command = Magick.command [ "\"%s\"", channels._flag, "-auto-level", "\"%s\"" ]; _result = Magick.system command x; } } Magick_blurSharpMenu_item = class Menupullright "_Blur/Sharpen" "blur and sharpen" { Magick_adaptive_blur_item = class Menuaction "_Adaptive Blur" "blur less near edges" { action x = class _result { _vislevel = 3; intensity = Magick.intensity_widget; radius = Magick.blur_rad_widget; sigma = Magick.sigma_widget; channels = Magick.channels_widget; // note: adaptive-blur doesn't regard VP. command = Magick.command [ "\"%s\"", intensity._flag, channels._flag, "-adaptive-blur", print radius.value ++ "x" ++ print sigma.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_blur_item = class Menuaction "_Blur" "blur" { action x = class _result { _vislevel = 3; radius = Magick.blur_rad_widget; sigma = Magick.sigma_widget; channels = Magick.channels_widget; virtpixback = Magick.VirtualPixelBack_widget; command = Magick.command [ "\"%s\"", virtpixback._flag, channels._flag, "-blur", print radius.value ++ "x" ++ print sigma.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_gaussianBlur_item = class Menuaction "_Gaussian Blur" "blur with a Gaussian operator" { action x = class _result { _vislevel = 3; radius = Magick.blur_rad_widget; sigma = Magick.sigma_widget; channels = Magick.channels_widget; virtpixback = Magick.VirtualPixelBack_widget; command = Magick.command [ "\"%s\"", virtpixback._flag, channels._flag, "-gaussian-blur", print radius.value ++ "x" ++ print sigma.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_motionBlur_item = class Menuaction "_Motion Blur" "simulate motion blur" { action x = class _result { _vislevel = 3; radius = Magick.blur_rad_widget; sigma = Magick.sigma_widget; angle = Scale "angle" (-360) 360 0; channels = Magick.ch_widget; virtpixback = Magick.VirtualPixelBack_widget; command = Magick.command [ "\"%s\"", virtpixback._flag, channels._flag, "-motion-blur", print radius.value ++ "x" ++ print sigma.value ++ "+" ++ print angle.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_rotationalBlur_item = class Menuaction "_RotationalBlur" "blur around the centre" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; virtpixback = Magick.VirtualPixelBack_widget; angle = Scale "angle (degrees)" (-360) 360 20; command = Magick.command [ "\"%s\"", virtpixback._flag, channels._flag, "-radial-blur", print angle.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_selectiveBlur_item = class Menuaction "_Selective Blur" "blur where contrast is less than or equal to threshold" { action x = class _result { _vislevel = 3; intensity = Magick.intensity_widget; radius = Magick.blur_rad_widget; sigma = Magick.sigma_widget; threshold = Scale "Threshold (percent)" 0 100 50; channels = Magick.channels_widget; virtpixback = Magick.VirtualPixelBack_widget; command = Magick.command [ "\"%s\"", intensity._flag, virtpixback._flag, channels._flag, "-selective-blur", print radius.value ++ "x" ++ print sigma.value ++ "+" ++ print threshold.value ++ "%%", "\"%s\"" ]; _result = Magick.system command x; } } sep1 = Menuseparator; Magick_adaptive_sharpen_item = class Menuaction "_Adaptive Sharpen" "sharpen more near edges" { action x = class _result { _vislevel = 3; intensity = Magick.intensity_widget; radius = Magick.blur_rad_widget; sigma = Magick.sigma_widget; command = Magick.command [ "\"%s\"", intensity._flag, "-adaptive-sharpen", print radius.value ++ "x" ++ print sigma.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_sharpen_item = class Menuaction "_Sharpen" "sharpen" { action x = class _result { _vislevel = 3; radius = Magick.blur_rad_widget; sigma = Magick.sigma_widget; channels = Magick.channels_widget; virtpixback = Magick.VirtualPixelBack_widget; command = Magick.command [ "\"%s\"", virtpixback._flag, channels._flag, "-sharpen", print radius.value ++ "x" ++ print sigma.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_unsharpen_item = class Menuaction "_Unsharp" "sharpen with unsharp mask" { action x = class _result { _vislevel = 3; radius = Magick.blur_rad_widget; sigma = Magick.sigma_widget; channels = Magick.channels_widget; gain = Scale "Gain" (-10) 10 1; threshold = Scale "Threshold" 0 1 0.05; virtpixback = Magick.VirtualPixelBack_widget; command = Magick.command [ "\"%s\"", virtpixback._flag, channels._flag, "-unsharp", print radius.value ++ "x" ++ print sigma.value ++ "+" ++ print gain.value ++ "+" ++ print threshold.value, "\"%s\"" ]; _result = Magick.system command x; } } } // end BlurSharpMenu_item Magick_border_item = class Menuaction "_Border" "add border of given colour" { action x = class _result { _vislevel = 3; compose = Magick.compose_widget; width = Expression "Width" 3; bordercol = Magick.bordercol_widget; command = Magick.command [ "\"%s\"", compose._flag, bordercol._flag, "-border", print width.expr, "\"%s\"" ]; _result = Magick.system command x; } } Magick_brightCont_item = class Menuaction "_Brightness-contrast" "adjust the brightness and/or contrast" { action x = class _result { _vislevel = 3; bri = Scale "brightness" (-100) 100 0; con = Scale "contrast" (-100) 100 0; channels = Magick.channels_widget; command = Magick.command [ "\"%s\"", channels._flag, "-brightness-contrast", print bri.value ++ "x" ++ print con.value, "\"%s\"" ]; _result = Magick.system command x; } } // Note: canny requires ImageMagick 6.8.9-0 or later. Magick_canny_item = class Menuaction "_Canny" "detect a wide range of edges" { action x = class _result { _vislevel = 3; radius = Magick.blur_rad_widget; sigma = Magick.sigma_widget; lowPc = Scale "lower percent" 0 100 10; highPc = Scale "lower percent" 0 100 10; command = Magick.command [ "\"%s\"", "-canny", concat ["\"", print radius.value ++ "x" ++ print sigma.value ++ "+" ++ print lowPc.value ++ "%%+" ++ print highPc.value ++ "%%" ++ "\"" ], "\"%s\"" ]; _result = Magick.system command x; } } Magick_charcoal_item = class Menuaction "_Charcoal" "simulate a charcoal drawing" { action x = class _result { _vislevel = 3; intensity = Magick.intensity_widget; factor = Scale "factor" 0 50 1; command = Magick.command [ "\"%s\"", intensity._flag, "-charcoal", print factor.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_chop_item = class Menuaction "_Chop" "remove pixels from the interior" { action x = class _result { _vislevel = 3; gravity = Magick.gravity_widget; geometry = Magick.WhxyGeometry_widget; command = Magick.command [ "\"%s\"", gravity._flag, "-chop", geometry._flag, "\"%s\"" ]; _result = Magick.system command x; } } Magick_colorize_item = class Menuaction "_Colorize" "colorize by given amount" { action x = class _result { _vislevel = 3; foreground = Magick.foreground_widget; val = Scale "value" 0 100 100; command = Magick.command [ "\"%s\"", foreground._flag, "-colorize", print val.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_colors_item = class Menuaction "_Colors" "reduce number of colors" { action x = class _result { _vislevel = 3; treedepth = Expression "Treedepth" 8; dither = Magick.dither_widget; quantize = Magick.colorspace_widget; colors = Expression "Colours" 3; command = Magick.command [ "\"%s\"", "-quantize", quantize._flag, "-treedepth", print treedepth.expr, dither._flag, "-colors", print colors.expr, "\"%s\"" ]; _result = Magick.system command x; } } // FIXME: color-matrix? Magick_colorspace_item = class Menuaction "_Colourspace" "convert to arbitrary colourspace" { action x = class _result { _vislevel = 3; colsp = Magick.colorspace_widget; command = Magick.command [ "\"%s\"", "-colorspace", colsp._flag, "\"%s\"" ]; _result = Magick.system command x; } } Magick_colorspaceGray_item = class Menuaction "_Colourspace gray" "convert to gray using given intensity method" { action x = class _result { _vislevel = 3; intensity = Magick.intensity_widget; command = Magick.command [ "\"%s\"", intensity._flag, "-colorspace gray", "\"%s\"" ]; _result = Magick.system command x; } } Magick_contrast_item = class Menuaction "_Contrast" "increase or reduce the contrast" { action x = class _result { _vislevel = 3; isReduce = Toggle "reduce contrast" false; command = Magick.command [ "\"%s\"", (if isReduce then "+" else "-") ++ "contrast", "\"%s\"" ]; _result = Magick.system command x; } } Magick_contrastStretch_item = class Menuaction "_Contrast stretch" "stretches tones, making some black/white" { action x = class _result { _vislevel = 3; intensity = Magick.intensity_widget; channels = Magick.channels_widget; blk = Scale "percent to make black" 0 100 0; wht = Scale "percent to make white" 0 100 0; command = Magick.command [ "\"%s\"", intensity._flag, channels._flag, "-contrast-stretch", "\"" ++ print blk.value ++ "x" ++ print wht.value ++ "%%\"", "\"%s\"" ]; _result = Magick.system command x; } } // FIXME: convolve (bias, kernel) Magick_crop_item = class Menuaction "_Crop" "cut out a rectangular region" { action x = class _result { _vislevel = 3; gravity = Magick.gravity_widget; geometry = Magick.WhxyGeometry_widget; command = Magick.command [ "\"%s\"", gravity._flag, "-crop", geometry._flag, "+repage", "\"%s\"" ]; _result = Magick.system command x; } } Magick_deskew_item = class Menuaction "_Deskew" "straighten the image" { action x = class _result { _vislevel = 3; threshold = Scale "Threshold (percent)" 0 100 80; // FIXME: toggle auto-crop? command = Magick.command [ "\"%s\"", "-deskew", "\"" ++ print threshold.value ++ "%%\"", "+repage", "\"%s\"" ]; _result = Magick.system command x; } } Magick_despeckle_item = class Menuaction "_Despeckle" "reduce the speckles" { action x = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "-despeckle", "\"%s\"" ]; _result = Magick.system command x; } } Magick_distort_item = class Menuaction "_Distort" "distort using a method and arguments" { action x = class _result { _vislevel = 3; virtpixback = Magick.VirtualPixelBack_widget; distort = Magick.distort_widget; args = String "Arguments" "1,0"; isPlus = Toggle "Extend to show entire image" false; command = Magick.command [ "\"%s\"", virtpixback._flag, (if isPlus then "+" else "-") ++ "distort", distort._flag, args.value, "+repage", "\"%s\"" ]; _result = Magick.system command x; } } Magick_draw_item = class Menuaction "_Draw" "annotate with one or more graphic primitives" { action x = class _result { _vislevel = 3; foreground = Magick.foreground_widget; args = String "Arguments" "line 0,0 9,9 rectangle 10,10 20,20"; command = Magick.command [ "\"%s\"", foreground._flag, "-draw", concat ["\"", args.value, "\""], "\"%s\"" ]; _result = Magick.system command x; } } Magick_edge_item = class Menuaction "_Edge" "detect edges" { action x = class _result { _vislevel = 3; rad = Expression "Radius" 3; command = Magick.command [ "\"%s\"", "-edge", print rad.expr, "\"%s\"" ]; _result = Magick.system command x; } } Magick_emboss_item = class Menuaction "_Emboss" "emboss" { action x = class _result { _vislevel = 3; rad = Expression "Radius" 3; command = Magick.command [ "\"%s\"", "-emboss", print rad.expr, "\"%s\"" ]; _result = Magick.system command x; } } Magick_enhance_item = class Menuaction "_Enhance" "enhance a noisy image" { action x = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "-enhance", "\"%s\"" ]; _result = Magick.system command x; } } Magick_equalize_item = class Menuaction "_Equalize" "equalize the histogram" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; command = Magick.command [ "\"%s\"", channels._flag, "-equalize", "\"%s\"" ]; _result = Magick.system command x; } } Magick_evaluate_item = class Menuaction "_Evaluate" "evaluate an expression on each pixel channel" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; operation = Magick.evaluate_widget; val = Expression "value" 5; isPc = Toggle "Value is percent" false; command = Magick.command [ "\"%s\"", channels._flag, operation._flag, print val.expr ++ if isPc then "%%" else "", "\"%s\"" ]; _result = Magick.system command x; } } Magick_extent_item = class Menuaction "_Extent" "set the image size and offset" { action x = class _result { _vislevel = 3; background = Magick.background_widget; compose = Magick.compose_widget; gravity = Magick.gravity_widget; geometry = Magick.WhxyGeometry_widget; command = Magick.command [ "\"%s\"", compose._flag, background._flag, gravity._flag, "-extent", geometry._flag, "\"%s\"" ]; _result = Magick.system command x; } } Magick_FlipFlopMenu_item = class Menupullright "_Flip/flop" "flip/flop/transverse/transpose" { Magick_flip_item = class Menuaction "_Flip vertically" "mirror upside-down" { action x = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "-flip", "\"%s\"" ]; _result = Magick.system command x; } } Magick_flop_item = class Menuaction "_Flop horizontally" "mirror left-right" { action x = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "-flop", "\"%s\"" ]; _result = Magick.system command x; } } Magick_transpose_item = class Menuaction "_Transpose" "mirror along the top-left to bottom-right diagonal" { action x = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "-transpose +repage", "\"%s\"" ]; _result = Magick.system command x; } } Magick_transverse_item = class Menuaction "_Transverse" "mirror along the bottom-left to top-right diagonal" { action x = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "-transverse +repage", "\"%s\"" ]; _result = Magick.system command x; } } } // end Magick_FlipFlopMenu_item Magick_floodfill_item = class Menuaction "_Floodfill" "recolour neighbours that match" { action x = class _result { _vislevel = 3; foreground = Magick.foreground_widget; fuzz = Magick.fuzz_widget; coordinate = Magick.coordinate_widget; // -draw "color x,y floodfill" command = Magick.command [ "\"%s\"", foreground._flag, "-fuzz", "\"" ++ print fuzz.value ++ "%%\"", "-draw \" color", coordinate._flag, "floodfill \"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_frame_item = class Menuaction "_Frame" "surround with border or beveled frame" { action x = class _result { _vislevel = 3; border = Magick.bordercol_widget; compose = Magick.compose_widget; matte = Magick.mattecol_widget; geometry = Magick.FrameGeometry_widget; command = Magick.command [ "\"%s\"", compose._flag, border._flag, matte._flag, "-frame", geometry._flag, "\"%s\"" ]; _result = Magick.system command x; } } Magick_function_item = class Menuaction "_Function" "evaluate a function on each pixel channel" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; function = Magick.function_widget; // FIXME: explain values; use sensible defaults. values = String "values" "0,0,0,0"; command = Magick.command [ "\"%s\"", channels._flag, "-function", function._flag, values.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_fx_item = class Menuaction "_Fx" "apply a mathematical expression" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; interpolate = Magick.interpolate_widget; virtpixback = Magick.VirtualPixelBack_widget; args = String "Expression" "u*1/2"; command = Magick.command [ "\"%s\"", channels._flag, interpolate._flag, virtpixback._flag, "-fx", concat ["\"", args.value, "\""], "\"%s\"" ]; _result = Magick.system command x; } } Magick_gamma_item = class Menuaction "_Gamma" "apply a gamma correction" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; gamma = Magick.gamma_widget; command = Magick.command [ "\"%s\"", channels._flag, "-gamma", print gamma.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_gradient_item = class Menuaction "_Gradient" "apply a linear gradient" { action x = class _result { _vislevel = 3; colourA = Magick.generalcol_widget; colourB = Magick.generalcol_widget; position = Option "colourA is at" [ "top", "bottom", "left", "right", "top-left", "top-right", "bottom-left", "bottom-right"] 0; _baryArg = concat ["0,0,", colourA._flag, " 0,%%[fx:h-1],", colourB._flag], position.value == 0 = concat ["0,0,", colourB._flag, " 0,%%[fx:h-1],", colourA._flag], position.value == 1 = concat ["0,0,", colourA._flag, " %%[fx:w-1],0,", colourB._flag], position.value == 2 = concat ["0,0,", colourB._flag, " %%[fx:w-1],0,", colourA._flag], position.value == 3 = concat ["0,0,", colourA._flag, " %%[fx:w-1],%%[fx:h-1],", colourB._flag], position.value == 4 = concat ["%%[fx:w-1],0,", colourA._flag, " 0,%%[fx:h-1],", colourB._flag], position.value == 5 = concat ["%%[fx:w-1],0,", colourB._flag, " 0,%%[fx:h-1],", colourA._flag], position.value == 6 = concat ["0,0,", colourB._flag, " %%[fx:w-1],%%[fx:h-1],", colourA._flag], position.value == 7 = "dunno"; command = Magick.command [ "\"%s\"", "-sparse-color barycentric \"" ++ _baryArg ++ "\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_gradientCorn_item = class Menuaction "_Gradient corners" "apply a bilinear gradient between the corners" { action x = class _result { _vislevel = 3; colour_top_left = Magick.generalcol_widget; colour_top_right = Magick.generalcol_widget; colour_bottom_left = Magick.generalcol_widget; colour_bottom_right = Magick.generalcol_widget; command = Magick.command [ "\"%s\"", "-sparse-color bilinear \"" ++ "0,0," ++ colour_top_left._flag ++ ",%%[fx:w-1],0" ++ colour_top_right._flag ++ ",0,%%[fx:h-1]" ++ colour_bottom_left._flag ++ ",%%[fx:w-1],%%[fx:h-1]" ++ colour_bottom_right._flag ++ "\"", "+depth", "\"%s\"" ]; _result = Magick.system command x; } } Magick_histogram_item = class Menuaction "_Histogram" "make a histogram image" { action x = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "-define histogram:unique-colors=false histogram:" ++ "\"%s\"" ]; _result = Magick.system command x; } } Magick_implode_item = class Menuaction "_Implode" "implode pixels about the center" { action x = class _result { _vislevel = 3; factor = Scale "factor" 0 20 1; interpolate = Magick.interpolate_widget; // FIXME: virtual-pixel? command = Magick.command [ "\"%s\"", interpolate._flag, "-implode", print factor.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_level_item = class Menuaction "_Level" "adjust the level of channels" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; blk = Scale "black point" (-100) 200 0; wht = Scale "white point" (-100) 200 100; gam = Scale "gamma" 0 30 1; isPc = Toggle "Levels are percent" true; isInv = Toggle "Invert effect" false; command = Magick.command [ "\"%s\"", channels._flag, (if isInv then "+" else "-") ++ "level", "\"" ++ print blk.value ++ "," ++ print wht.value ++ (if isPc then "%%" else "") ++ "," ++ print gam.value ++ "\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_levelCols_item = class Menuaction "_Level colors" "adjust levels to given colours" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; colour_black = Magick.generalcol_widget; colour_white = Magick.generalcol_widget; isInv = Toggle "Invert effect" false; command = Magick.command [ "\"%s\"", channels._flag, (if isInv then "+" else "-") ++ "level-colors", "\"" ++ colour_black._flag ++ "," ++ colour_white._flag ++ "\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_linearStretch_item = class Menuaction "_Linear stretch" "stretches tones, making some black/white" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; blk = Scale "percent to make black" 0 100 0; wht = Scale "percent to make white" 0 100 0; command = Magick.command [ "\"%s\"", channels._flag, "-linear-stretch", "\"" ++ print blk.value ++ "x" ++ print wht.value ++ "%%\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_magnify_item = class Menuaction "_Magnify" "double the size of the image with pixel art scaling" { action x = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "-magnify", "\"%s\"" ]; _result = Magick.system command x; } } Magick_modulate_item = class Menuaction "_Modulate" "modulate brightness, saturation and hue" { action x = class _result { _vislevel = 3; modcolsp = Magick.ModColSp_widget; bright = Scale "brightness" 0 200 100; sat = Scale "saturation" 0 200 100; hue = Scale "hue" 0 200 100; command = Magick.command [ "\"%s\"", modcolsp._flag, "-modulate", print bright.value ++ "," ++ print sat.value ++ "," ++ print hue.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_monochrome_item = class Menuaction "_Monochrome" "transform to black and white" { action x = class _result { _vislevel = 3; // FIXME: also intensity? intensity = Magick.intensity_widget; treedepth = Expression "Treedepth" 8; dither = Magick.dither_widget; command = Magick.command [ "\"%s\"", intensity._flag, dither._flag, "-treedepth", print treedepth.expr, "-monochrome", "\"%s\"" ]; _result = Magick.system command x; } } Magick_morphology_item = class // See http://www.imagemagick.org/Usage/morphology/ Menuaction "_Morphology" "apply a morphological method" { action x = class _result { _vislevel = 3; method = Magick.morphmeth_widget; iter = Expression "Iterations (-1=repeat until done)" 1; kernel = Magick.kernel_widget; // FIXME: custom kernel eg "3x1+2+0:1,0,0" // width x height + offsx + offsy : {w*h values} // each value is 0.0 to 1.0 or "NaN" or "-" // kernel args, mostly float radius,scale. radius=0=default. default scale = 1.0 // but // ring takes: radius1, radius2, scale // rectangle and comet take: width x height + offsx + offsy // blur takes: radius x sigma // FIXME: for now, simply allow any string input. kernel_arg = String "Kernel arguments" ""; channels = Magick.channels_widget; command = Magick.command [ "\"%s\"", channels._flag, "-morphology", method._flag ++ ":" ++ print iter.expr, kernel._flag ++ (if kernel_arg.value == "" then "" else ":") ++ kernel_arg.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_negate_item = class Menuaction "_Negate" "negate" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; command = Magick.command [ "\"%s\"", channels._flag, "-negate", "\"%s\"" ]; _result = Magick.system command x; } } Magick_addNoise_item = class Menuaction "_add Noise" "add noise" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; attenuate = Scale "attenuate" 0 1.0 1.0; noise = Magick.noise_widget; command = Magick.command [ "\"%s\"", channels._flag, "-attenuate", print attenuate.value, noise._flag, "\"%s\"" ]; _result = Magick.system command x; } } Magick_normalize_item = class Menuaction "_Normalize" "normalize" { action x = class _result { _vislevel = 3; intensity = Magick.intensity_widget; channels = Magick.channels_widget; command = Magick.command [ "\"%s\"", intensity._flag, channels._flag, "-normalize", "\"%s\"" ]; _result = Magick.system command x; } } Magick_opaque_item = class Menuaction "_Opaque" "change this colour to the fill colour" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; fill = Magick.foreground_widget; changeColour = Magick.changeCol_widget; command = Magick.command [ "\"%s\"", fill._flag, channels._flag, "-fuzz", "\"" ++ print changeColour.fuzz.value ++ "%%\"", (if changeColour.nonMatch then "+" else "-") ++ "opaque", "\"" ++ changeColour.colour._flag ++ "\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_paint_item = class Menuaction "_Paint" "simulate an oil painting" { action x = class _result { _vislevel = 3; rad = Expression "radius" 10; command = Magick.command [ "\"%s\"", "-paint", print rad.expr, "\"%s\"" ]; _result = Magick.system command x; } } /*=== FIXME Bug; remove for now. Polaroid_item = class Menuaction "_Polaroid" "simulate a polaroid picture" { action x = class _result { _vislevel = 3; angle = Scale "angle" (-90) 90 20; command = Magick.command [ "\"%s\"", "-polaroid", print angle.value, "\"%s\"" ]; _result = Magick.system command x; } } ===*/ Magick_posterize_item = class Menuaction "_Posterize" "reduce to (n) levels per channel" { action x = class _result { _vislevel = 3; levels = Expression "levels" 3; command = Magick.command [ "\"%s\"", "-posterize", print levels.expr, "\"%s\"" ]; _result = Magick.system command x; } } Magick_raise_item = class Menuaction "_Raise" "lighten or darken image edges" { action x = class _result { _vislevel = 3; thk = Expression "Thickness" 3; command = Magick.command [ "\"%s\"", "-raise", print thk.expr, "\"%s\"" ]; _result = Magick.system command x; } } Magick_resize_item = class Menuaction "_Resize" "resize to given width and height" { action x = class _result { _vislevel = 3; filter = Magick.filter_widget; type = Magick.ResizeType_widget; width = Scale "Width" 1 100 10; height = Scale "Height" 1 100 10; isPc = Toggle "Width and height are percent" false; command = Magick.command [ "\"%s\"", filter._flag, "-" ++ type._flag, "\"" ++ print width.value ++ "x" ++ print height.value ++ (if isPc then "%%" else "!") ++ "\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_roll_item = class Menuaction "_Roll" "roll an image horizontally or vertically" { action x = class _result { _vislevel = 3; rollx = Expression "X" 3; rolly = Expression "Y" 3; command = Magick.command [ "\"%s\"", "-roll", (if rollx.expr >= 0 then "+" else "") ++ print rollx.expr ++ (if rolly.expr >= 0 then "+" else "") ++ print rolly.expr, "\"%s\"" ]; _result = Magick.system command x; } } Magick_rotate_item = class Menuaction "_Rotate" "rotate" { action x = class _result { _vislevel = 3; angle = Scale "angle (degrees)" (-360) 360 20; virtpixback = Magick.VirtualPixelBack_widget; command = Magick.command [ "\"%s\"", virtpixback._flag, "+distort", "SRT", print angle.value, "+repage", "\"%s\"" ]; _result = Magick.system command x; } } // FIXME: -segment, but cluster-threshold should be percentage of image area. Magick_sepia_item = class Menuaction "_Sepia tone" "simulate a sepia-toned photo" { action x = class _result { _vislevel = 3; threshold = Scale "Threshold (percent)" 0 100 80; command = Magick.command [ "\"%s\"", "-sepia-tone", "\"" ++ print threshold.value ++ "%%\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_shade_item = class Menuaction "_Shade" "shade with a distant light source" { action x = class _result { _vislevel = 3; azimuth = Scale "Azimuth (degrees)" (-360) 360 0; elevation = Scale "Elevation (degrees)" 0 90 45; command = Magick.command [ "\"%s\"", "-shade", print azimuth.value ++ "x" ++ print elevation.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_shadow_item = class Menuaction "_Shadow" "simulate a shadow" { action x = class _result { _vislevel = 3; shadowCol = Magick.generalcol_widget; opacity = Scale "Opacity (percent)" 0 100 75; sigma = Scale "Sigma" 0 30 2; // FIXME: make offsets a single widget? offsx = Scale "X-offset" (-20) 20 4; offsy = Scale "Y-offset" (-20) 20 4; arePc = Toggle "offsets are percentages" false; // FIXME: raw operation creates page offset, which vips dislikes. // So we take this futher, compositing with source. command = Magick.command [ "\"%s\"", "\"(\" +clone", "-background", "\"" ++ shadowCol._flag ++ "\"", "-shadow", concat [ "\"", print opacity.value, "x", print sigma.value, (if offsx.value >= 0 then "+" else ""), print offsx.value, (if offsy.value >= 0 then "+" else ""), print offsy.value, (if arePc then "%%" else ""), "\"" ], "\")\" +swap -background None -layers merge", "+repage", "\"%s\"" ]; _result = Magick.system command x; } } Magick_shave_item = class Menuaction "_Shave" "shave pixels from the edges" { action x = class _result { _vislevel = 3; width = Scale "Width" 0 50 10; height = Scale "Height" 0 50 10; isPc = Toggle "Width and height are percent" false; command = Magick.command [ "\"%s\"", "-shave", "\"" ++ print width.value ++ "x" ++ print height.value ++ (if isPc then "%%" else "") ++ "\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_shear_item = class Menuaction "_Shear" "shear along the x-axis and/or y-axis" { action x = class _result { _vislevel = 3; shearX = Expression "shear X (degrees)" 0; shearY = Expression "shear Y (degrees)" 0; background = Magick.background_widget; command = Magick.command [ "\"%s\"", background._flag, "-shear", print shearX.expr ++ "x" ++ print shearY.expr, "\"%s\"" ]; _result = Magick.system command x; } } Magick_sigmoid_item = class Menuaction "_Sigmoid" "increase or decrease mid-tone contrast sigmoidally" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; contrast = Scale "contrast" 0 30 3; midpoint = Scale "mid-point (percent)" 0 100 50; isInv = Toggle "Invert effect" false; command = Magick.command [ "\"%s\"", channels._flag, (if isInv then "+" else "-") ++ "sigmoidal-contrast", "\"" ++ print contrast.value ++ "x" ++ print midpoint.value ++ "%%\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_sketch_item = class Menuaction "_Sketch" "simulate a pencil sketch" { action x = class _result { _vislevel = 3; radius = Magick.blur_rad_widget; sigma = Magick.sigma_widget; angle = Scale "angle" (-360) 360 0; command = Magick.command [ "\"%s\"", "-sketch", print radius.value ++ "x" ++ print sigma.value ++ (if angle >= 0 then ("+" ++ print angle.value) else ""), "\"%s\"" ]; _result = Magick.system command x; } } Magick_solarize_item = class Menuaction "_Solarize" "negate all pixels above a threshold level" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; threshold = Scale "Threshold (percent)" 0 100 50; command = Magick.command [ "\"%s\"", channels._flag, "-solarize", "\"" ++ print threshold.value ++ "%%\"", "\"%s\"" ]; _result = Magick.system command x; } } // FIXME: -sparse-color needs abitrary list of {x,y,colour}. Magick_splice_item = class Menuaction "_Splice" "splice a colour into the image" { action x = class _result { _vislevel = 3; background = Magick.background_widget; gravity = Magick.gravity_widget; geometry = Magick.WhxyGeometry_widget; command = Magick.command [ "\"%s\"", background._flag, gravity._flag, "-splice", geometry._flag, "\"%s\"" ]; _result = Magick.system command x; } } Magick_spread_item = class Menuaction "_Spread" "displace pixels by random amount" { action x = class _result { _vislevel = 3; virtpixback = Magick.VirtualPixelBack_widget; amount = Expression "Amount (pixels)" 5; command = Magick.command [ "\"%s\"", virtpixback._flag, "-spread", print amount.expr, "\"%s\"" ]; _result = Magick.system command x; } } Magick_statistic_item = class Menuaction "_Statistic" "replace each pixel with statistic from neighbourhood" { action x = class _result { _vislevel = 3; width = Expression "Width" 5; height = Expression "Height" 5; statisticType = Magick.StatType_widget; command = Magick.command [ "\"%s\"", "-statistic", statisticType._flag, print width.expr ++ "x" ++ print height.expr, "\"%s\"" ]; _result = Magick.system command x; } } Magick_swirl_item = class Menuaction "_Swirl" "swirl around the centre" { action x = class _result { _vislevel = 3; angle = Magick.angle_widget; command = Magick.command [ "\"%s\"", "-swirl", print angle.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_thresholdMenu_item = class Menupullright "_Threshold" "make black or white" { Magick_threshold_item = class Menuaction "_Threshold" "apply black/white threshold" { action x = class _result { _vislevel = 3; intensity = Magick.intensity_widget; channels = Magick.channels_widget; threshold = Scale "Threshold (percent)" 0 100 50; command = Magick.command [ "\"%s\"", intensity._flag, channels._flag, "-threshold", "\"" ++ print threshold.value ++ "%%\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_blackThreshold_item = class Menuaction "_Black threshold" "where below threshold set to black" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; threshold = Scale "Threshold (percent)" 0 100 50; command = Magick.command [ "\"%s\"", channels._flag, "-black-threshold", "\"" ++ print threshold.value ++ "%%\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_whiteThreshold_item = class Menuaction "_White threshold" "where above threshold set to white" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; threshold = Scale "Threshold (percent)" 0 100 50; command = Magick.command [ "\"%s\"", channels._flag, "-white-threshold", "\"" ++ print threshold.value ++ "%%\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_latThreshold_item = class Menuaction "_Local Adaptive Threshold" "where above average plus offset set to white, otherwise black" { action x = class _result { _vislevel = 3; width = Expression "Width" 10; height = Expression "Height" 10; offset = Scale "Offset (percent)" (-100) 100 0; // note: "-lat" doesn't respond to channels command = Magick.command [ "\"%s\"", "-lat", concat ["\"", print width.expr, "x", print height.expr, (if offset.value >= 0 then "+" else ""), print offset.value, "%%\"" ], "\"%s\"" ]; _result = Magick.system command x; } } Magick_randThreshold_item = class Menuaction "_Random Threshold" "between specified limits, apply random threshold" { action x = class _result { _vislevel = 3; channels = Magick.channels_widget; low = Scale "Low threshold" 0 100 10; high = Scale "High threshold" 0 100 90; isPc = Toggle "Thresholds are percent" true; command = Magick.command [ "\"%s\"", channels._flag, "-random-threshold", "\"" ++ print low.value ++ "x" ++ print high.value ++ (if isPc then "%%" else "") ++ "\"", "\"%s\"" ]; _result = Magick.system command x; } } } // end ThresholdMenu_item // Note: alternatives include: // convert in.tif -write mpr:TILE +delete -size 200x200 -background XXXX -tile-offset +30+30 tile:mpr:TILE out.tif Magick_tile_item = class Menuaction "_Tile" "fill given size with tiled image" { action x = class _result { _vislevel = 3; size = Magick.Size_widget; command = Magick.command [ size._flag, "tile:" ++ "\"%s\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_tint_item = class Menuaction "_Tint" "apply a tint" { action x = class _result { _vislevel = 3; foreground = Magick.foreground_widget; amount = Scale "amount (percent)" 0 100 50; command = Magick.command [ "\"%s\"", foreground._flag, "-tint", // snibgo note: although the amount is a percentage, it doesn't need "%" character. print amount.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_transparent_item = class Menuaction "_Transparent" "make this colour transparent" { action x = class _result { _vislevel = 3; changeColour = Magick.changeCol_widget; command = Magick.command [ "\"%s\"", "-fuzz", "\"" ++ print changeColour.fuzz.value ++ "%%\"", (if changeColour.nonMatch then "+" else "-") ++ "transparent", "\"" ++ changeColour.colour._flag ++ "\"", "\"%s\"" ]; _result = Magick.system command x; } } Magick_trim_item = class Menuaction "_Trim" "trims away border" { action x = class _result { _vislevel = 3; fuzz = Magick.fuzz_widget; command = Magick.command [ "\"%s\"", "-fuzz", "\"" ++ print fuzz.value ++ "%%\"", "-trim +repage", "\"%s\"" ]; _result = Magick.system command x; } } Magick_uniqueCols_item = class Menuaction "_Unique colours" "discard all but one of any pixel color" { action x = class _result { _vislevel = 3; command = Magick.command [ "\"%s\"", "-unique-colors", "\"%s\"" ]; _result = Magick.system command x; } } Magick_vignette_item = class Menuaction "_Vignette" "soften the edges in vignette style" { action x = class _result { _vislevel = 3; radius = Magick.blur_rad_widget; sigma = Magick.sigma_widget; rx = Scale "Rolloff x (percent)" 0 100 10; ry = Scale "Rolloff y (percent)" 0 100 10; background = Magick.background_widget; command = Magick.command [ "\"%s\"", background._flag, "-vignette", print radius.value ++ "x" ++ print sigma.value ++ (if rx.value >= 0 then "+" else "") ++ print rx.value ++ (if ry.value >= 0 then "+" else "") ++ print ry.value, "\"%s\"" ]; _result = Magick.system command x; } } Magick_wave_item = class Menuaction "_Wave" "shear the columns into a sine wave" { action x = class _result { _vislevel = 3; amplitude = Scale "Amplitude (pixels)" 0 100 10; wavelength = Scale "Wavelength (pixels)" 0 100 10; command = Magick.command [ "\"%s\"", "-wave", print amplitude.value ++ "x" ++ print wavelength.value, "\"%s\"" ]; _result = Magick.system command x; } } nip2-8.7.0/share/nip2/compat/8.6/_predicate.def0000644000175000017500000003263513330327312015654 00000000000000 /* is_colour_space str: is a string one of nip's colour space names */ is_colour_space str = Image_type.colour_spaces.present 0 str; /* is_colour_type n: is a number one of VIPS's colour spaces */ is_colour_type n = Image_type.colour_spaces.present 1 n; /* is_number: is a real or a complex number. */ is_number a = is_real a || is_complex a; /* is_int: is an integer */ is_int a = is_real a && a == (int) a; /* is_uint: is an unsigned integer */ is_uint a = is_int a && a >= 0; /* is_pint: is a positive integer */ is_pint a = is_int a && a > 0; /* is_preal: is a positive real */ is_preal a = is_real a && a > 0; /* is_ureal: is an unsigned real */ is_ureal a = is_real a && a >= 0; /* is_letter c: true if character c is an ASCII letter * * is_letter :: char -> bool */ is_letter c = ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z'); /* is_digit c: true if character c is an ASCII digit * * is_digit :: char->bool */ is_digit x = '0' <= x && x <= '9'; /* A whitespace character. * * is_space :: char->bool */ is_space = member " \n\t"; /* List str starts with section prefix. * * is_prefix "hell" "hello world!" == true * is_prefix :: [*] -> [*] -> bool */ is_prefix prefix str = take (len prefix) str == prefix; /* List str ends with section suffix. * * is_suffix "ld!" "hello world!" == true * is_suffix :: [*] -> [*] -> bool */ is_suffix suffix str = take (len suffix) (reverse str) == reverse suffix; /* List contains seqence. * * is_substr "llo" "hello world!" == true * is_substr :: [*] -> [*] -> bool */ is_substr seq str = any (map (is_prefix seq) (iterate tl str)); /* is_listof p s: true if finite list with p true for every element. */ is_listof p l = is_list l && all (map p l); /* is_string s: true if finite list of char. */ is_string s = is_listof is_char s; /* is_real_list l: is l a list of real numbers ... test each element, * so no infinite lists pls. */ is_real_list l = is_listof is_real l; /* is_string_list l: is l a finite list of finite strings. */ is_string_list l = is_listof is_string l; /* Test list length ... quicker than len x == n for large lists. */ is_list_len n x = true, x == [] && n == 0 = false, x == [] || n == 0 = is_list_len (n - 1) (tl x); is_list_len_more n x = true, x != [] && n == 0 = false, x == [] || n == 0 = is_list_len_more (n - 1) (tl x); is_list_len_more_equal n x = true, n == 0 = false, x == [] = is_list_len_more_equal (n - 1) (tl x); /* is_rectangular l: is l a rectangular data structure */ is_rectangular l = true, !is_list l = true, all (map is_obj l) = true, all (map is_list l) && all (map (not @ is_obj) l) && all (map is_rectangular l) && is_list_len_more 0 l && all (map (is_list_len (len (hd l))) (tl l)) = false { // treat strings as a base type, not [char] is_obj x = !is_list x || is_string x; } /* is_matrix l: is l a list of lists of real numbers, all the same length * * [[]] is the empty matrix, [] is the empty list ... disallow [] */ is_matrix l = l != [] && is_listof is_real_list l && is_rectangular l; /* is_square_matrix l: is l a matrix with width == height */ is_square_matrix l = true, l == [[]] = is_matrix l && is_list_len (len (hd l)) l; /* is_oddmatrix l: is l a matrix with odd-length sides */ is_oddmatrix l = true, l == [[]] = is_matrix l && len l % 2 == 1 && len l?0 % 2 == 1; /* is_odd_square_matrix l: is l a square_matrix with odd-length sides */ is_odd_square_matrix l = is_square_matrix l && len l % 2 == 1; /* Is an item in a column of a table? */ is_incolumn n table x = member (map (extract n) table) x; /* Is HGuide or VGuide. */ is_HGuide x = is_instanceof "HGuide" x; is_VGuide x = is_instanceof "VGuide" x; is_Guide x = is_HGuide x || is_VGuide x; is_Mark x = is_instanceof "Mark" x; is_Group x = is_instanceof "Group" x; is_NULL x = is_instanceof "NULL" x; is_List x = is_instanceof "List" x; is_Image x = is_instanceof "Image" x; is_Plot x = is_instanceof "Plot" x; is_Region x = is_instanceof "Region" x; is_Real x = is_instanceof "Real" x; is_Matrix x = is_instanceof "Matrix_base" x; is_Vector x = is_instanceof "Vector" x; is_Colour x = is_instanceof "Colour" x; is_Arrow x = is_instanceof "Arrow" x; is_Bool x = is_instanceof "Bool" x; is_Scale x = is_instanceof "Scale" x; is_Rect x = is_instanceof "Rect" x; is_Number x = is_instanceof "Number" x; is_Expression x = is_instanceof "Expression" x; is_String x = is_instanceof "String" x; /* A list of the form [[1,2],[3,4],[5,6]...] */ is_xy_list l = is_list l && all (map xy l) { xy l = is_real_list l && is_list_len 2 l; } // does a nested list structure contain a Group object? contains_Group l = true, is_list l && any (map is_Group l) = any (map contains_Group l), is_list l = false; /* Does an object have a sensible VIPS type? */ has_type x = is_image x || is_Image x || is_Arrow x || is_Colour x; /* Try to get a VIPS image type from an object. */ get_type x = get_type_im x, is_image x = get_type_im x.value, is_Image x = get_type_im x.image.value, is_Arrow x = Image_type.colour_spaces.lookup 0 1 x.colour_space, is_Colour x // slightly odd ... but our display is always 0-255, so it makes sense for // a plain number to be in the same range = Image_type.sRGB, is_real x = oo_unary_function get_type_op x, is_class x = error (_ "bad arguments to " ++ "get_type") { get_type_op = Operator "get_type" get_type Operator_type.COMPOUND false; // get the type from a VIPS image ... but only if it makes sense with // the rest of the image // we often have Type set wrong, hence the ugly guessing :-( // can have alpha, hence we let bands be one more than you might think get_type_im im = Image_type.LABQ, coding == Image_coding.LABPACK = Image_type.scRGB, coding == Image_coding.RAD = Image_type.GREY16, type == Image_type.GREY16 && is_bands 1 = Image_type.HISTOGRAM, type == Image_type.HISTOGRAM && (width == 1 || height == 1) = Image_type.B_W, is_bands 1 = Image_type.CMYK, type == Image_type.CMYK && is_bands 4 = type, is_colorimetric && is_bands 3 = Image_type.sRGB, !is_colorimetric && is_bands 3 = Image_type.MULTIBAND, !is_colorimetric && !is_bands 3 = type { type = get_header "Type" im; coding = get_header "Coding" im; bands = get_header "Bands" im; width = get_header "Xsize" im; height = get_header "Ysize" im; // 3-band colorimetric types we allow ... the things which the // Colour/Convert To menu can make, excluding mono. ok_types = [ Image_type.sRGB, Image_type.scRGB, Image_type.RGB16, Image_type.LAB, Image_type.LABQ, Image_type.LABS, Image_type.LCH, Image_type.XYZ, Image_type.YXY, Image_type.UCS ]; is_colorimetric = member ok_types type; // is bands n, with an optional alpha (ie. can be n + 1 too) is_bands n = bands == n || bands == n + 1; } } has_format x = has_member "format" x || is_Arrow x || is_image x; get_format x = x.format, has_member "format" x = x.image.format, is_Arrow x = get_header "BandFmt" x, is_image x = oo_unary_function get_format_op x, is_class x = error (_ "bad arguments to " ++ "get_format") { get_format_op = Operator "get_format" get_format Operator_type.COMPOUND false; } has_bits x = has_member "bits" x || is_Arrow x || is_image x; get_bits x = x.bits, has_member "bits" x = x.image.bits, is_Arrow x = get_header "Bbits" x, is_image x = oo_unary_function get_bits_op x, is_class x = error (_ "bad arguments to " ++ "get_bits") { get_bits_op = Operator "get_bits" get_format Operator_type.COMPOUND false; } has_bands x = is_image x || has_member "bands" x || is_Arrow x; get_bands x = x.bands, has_member "bands" x = x.image.bands, is_Arrow x = get_header "Bands" x, is_image x = 1, is_real x = len x, is_real_list x = oo_unary_function get_bands_op x, is_class x = error (_ "bad arguments to " ++ "get_bands") { get_bands_op = Operator "get_bands" get_bands Operator_type.COMPOUND false; } has_coding x = has_member "coding" x || is_Arrow x || is_image x; get_coding x = x.coding, has_member "coding" x = x.image.coding, is_Arrow x = get_header "Coding" x, is_image x = Image_coding.NOCODING, is_real x = oo_unary_function get_coding_op x, is_class x = error (_ "bad arguments to " ++ "get_coding") { get_coding_op = Operator "get_coding" get_coding Operator_type.COMPOUND false; } has_xres x = has_member "xres" x || is_Arrow x || is_image x; get_xres x = x.xres, has_member "xres" x = x.image.xres, is_Arrow x = get_header "Xres" x, is_image x = oo_unary_function get_xres_op x, is_class x = error (_ "bad arguments to " ++ "get_xres") { get_xres_op = Operator "get_xres" get_xres Operator_type.COMPOUND false; } has_yres x = has_member "yres" x || is_Arrow x || is_image x; get_yres x = x.yres, has_member "yres" x = x.image.yres, is_Arrow x = get_header "Yres" x, is_image x = oo_unary_function get_yres_op x, is_class x = error (_ "bad arguments to " ++ "get_yres") { get_yres_op = Operator "get_yres" get_yres Operator_type.COMPOUND false; } has_xoffset x = has_member "xoffset" x || is_Arrow x || is_image x; get_xoffset x = x.xoffset, has_member "xoffset" x = x.image.xoffset, is_Arrow x = get_header "Xoffset" x, is_image x = oo_unary_function get_xoffset_op x, is_class x = error (_ "bad arguments to " ++ "get_xoffset") { get_xoffset_op = Operator "get_xoffset" get_xoffset Operator_type.COMPOUND false; } has_yoffset x = has_member "yoffset" x || is_Arrow x || is_image x; get_yoffset x = x.yoffset, has_member "yoffset" x = x.image.yoffset, is_Arrow x = get_header "Yoffset" x, is_image x = oo_unary_function get_yoffset_op x, is_class x = error (_ "bad arguments to " ++ "get_yoffset") { get_yoffset_op = Operator "get_yoffset" get_yoffset Operator_type.COMPOUND false; } has_value = has_member "value"; get_value x = x.value; has_image x = is_image x || is_Image x || is_Arrow x; get_image x = x.value, is_Image x = x.image.value, is_Arrow x = x, is_image x = oo_unary_function get_image_op x, is_class x = error (_ "bad arguments to " ++ "get_image") { get_image_op = Operator "get_image" get_image Operator_type.COMPOUND false; } has_number x = is_number x || is_Real x; get_number x = x.value, is_Real x = x, is_number x = oo_unary_function get_number_op x, is_class x = error (_ "bad arguments to " ++ "get_number") { get_number_op = Operator "get_number" get_number Operator_type.COMPOUND false; } has_real x = is_real x || is_Real x; get_real x = x.value, is_Real x = x, is_real x = oo_unary_function get_real_op x, is_class x = error (_ "bad arguments to " ++ "get_real") { get_real_op = Operator "get_real" get_real Operator_type.COMPOUND false; } has_width x = has_member "width" x || is_image x; get_width x = x.width, has_member "width" x = get_header "Xsize" x, is_image x = oo_unary_function get_width_op x, is_class x = error (_ "bad arguments to " ++ "get_width") { get_width_op = Operator "get_width" get_width Operator_type.COMPOUND false; } has_height x = has_member "height" x || is_image x; get_height x = x.height, has_member "height" x = get_header "Ysize" x, is_image x = oo_unary_function get_height_op x, is_class x = error (_ "bad arguments to " ++ "get_height") { get_height_op = Operator "get_height" get_height Operator_type.COMPOUND false; } has_left x = has_member "left" x; get_left x = x.left, has_member "left" x = oo_unary_function get_left_op x, is_class x = error (_ "bad arguments to " ++ "get_left") { get_left_op = Operator "get_left" get_left Operator_type.COMPOUND false; } has_top x = has_member "top" x; get_top x = x.top, has_member "top" x = oo_unary_function get_top_op x, is_class x = error (_ "bad arguments to " ++ "get_top") { get_top_op = Operator "get_top" get_top Operator_type.COMPOUND false; } // like has/get member, but first in a lst of objects has_member_list has objects = filter has objects != []; // need one with the args swapped get_member = converse dot; // get a member from the first of a list of objects to have it get_member_list has get objects = hd members, members != [] = error "unable to get property" { members = map get (filter has objects); } is_hist x = has_image x && (h == 1 || w == 1 || t == Image_type.HISTOGRAM) { im = get_image x; w = get_width im; h = get_height im; t = get_type im; } get_header field x = oo_unary_function get_header_op x, is_class x = get_header_image x, is_image x = error (_ "bad arguments to " ++ "get_header") { get_header_op = Operator "get_header" (get_header field) Operator_type.COMPOUND false; get_header_image im = im_header_int field im, type == itype = im_header_double field im, type == dtype = im_header_string field im, type == stype1 || type == stype2 = error (_ "image has no field " ++ field), type == 0 = error (_ "unknown type for field " ++ field) { type = im_header_get_typeof field im; itype = name2gtype "gint"; dtype = name2gtype "gdouble"; stype1 = name2gtype "VipsRefString"; stype2 = name2gtype "gchararray"; } } get_header_type field x = oo_unary_function get_header_type_op x, is_class x = im_header_get_typeof field x, is_image x = error (_ "bad arguments to " ++ "get_header_type") { get_header_type_op = Operator "get_header_type" (get_header_type field) Operator_type.COMPOUND false; } set_header field value x = oo_unary_function set_header_op x, is_class x = im_copy_set_meta x field value, is_image x = error (_ "bad arguments to " ++ "set_header") { set_header_op = Operator "set_header" (set_header field value) Operator_type.COMPOUND false; } nip2-8.7.0/share/nip2/compat/8.6/Widgets.def0000644000175000017500000000235313330327312015155 00000000000000Widget_slider_item = class Menuaction "_Scale" "make a new scale widget" { icon = "nip-slider-16.png"; action = Scale "untitled scale" 0 255 128; } Widget_toggle_item = class Menuaction "_Toggle" "make a new toggle widget" { action = Toggle "untitled toggle" false; } Widget_option_item = class Menuaction "_Option" "make a new option widget" { action = Option "untitled option" ["option0", "option1"] 0; } Widget_string_item = class Menuaction "St_ring" "make a new string widget" { action = String "Enter a string" "sample text"; } Widget_number_item = class Menuaction "_Number" "make a new number widget" { action = Number "Enter a number" 42; } Widget_expression_item = class Menuaction "_Expression" "make a new expression widget" { action = Expression "Enter an expression" 42; } Widget_pathname_item = class Menuaction "_File Chooser" "make a new file chooser widget" { action = Pathname "Pick a file" "$VIPSHOME/share/$PACKAGE/data/print_test_image.v"; } Widget_font_item = class Menuaction "F_ont Chooser" "make a new font chooser widget" { action = Fontname "Pick a font" Workspaces.Preferences.PAINTBOX_FONT; } Widget_clock_item = class Menuaction "_Clock" "make a new clock widget" { action = Clock 1 1; } nip2-8.7.0/share/nip2/compat/8.6/Colour.def0000644000175000017500000004032613330327312015014 00000000000000 Colour_new_item = class Menupullright (_ "_New") (_ "make a patch of colour") { Widget_colour_item = class Menuaction (_ "_Colour") (_ "make a patch of colour") { action = Colour_picker "Lab" [50,0,0]; } LAB_colour = class Menuaction (_ "CIE Lab _Picker") (_ "pick colour in CIE Lab space") { action = widget "Lab" [50, 0, 0]; // ab_slice size size = 512; // range of values ... +/- 128 for ab range = 256; // map xy in slice image to ab and back xy2ab x = x / (size / range) - 128; ab2xy a = (a + 128) * (size / range); widget space default_value = class Colour space _result { _vislevel = 3; [_L, _a, _b] = default_value; L = Scale "Lightness" 0 100 _L; ab_slice = Image (lab_slice size L.value); point = Mark ab_slice (ab2xy _a) (ab2xy _b); _result = [L.value, xy2ab point.left, xy2ab point.top]; Colour_edit colour_space value = widget colour_space value; } } CCT_colour = class Menuaction (_ "Colour from CCT") (_ "pick colour by CCT") { action = widget 6500; widget x = class _result { _vislevel = 3; T = Scale "CCT" 1800 25000 x; _result = colour_from_temp (to_real T); Colour_edit space value = widget (temp_from_colour (Colour space value)); } } } Colour_to_colour_item = class Menuaction (_ "Con_vert to Colour") (_ "convert anything to a colour") { action x = to_colour x; } #separator Colour_convert_item = class Menupullright (_ "_Colourspace") (_ "convert to various colour spaces") { spaces = Image_type.image_colour_spaces; conv dest x = class _result { _vislevel = 3; to = Option_enum (_ "Convert to") spaces (spaces.get_name dest); _result = map_unary (colour_transform_to to.value_thing) x; } Mono_item = class Menuaction (_ "_Monochrome") (_ "convert to mono colourspace") { action x = conv Image_type.B_W x; } sRGB_item = class Menuaction (_ "_sRGB") (_ "convert to sRGB colourspace") { action x = conv Image_type.sRGB x; } scRGB_item = class Menuaction (_ "_scRGB") (_ "convert to scRGB colourspace") { action x = conv Image_type.scRGB x; } GREY16_item = class Menuaction (_ "_GREY16") (_ "convert to GREY16 colourspace") { action x = conv Image_type.GREY16 x; } RGB16_item = class Menuaction (_ "_RGB16") (_ "convert to RGB16 colourspace") { action x = conv Image_type.RGB16 x; } Lab_item = class Menuaction (_ "_Lab") (_ "convert to Lab colourspace (float Lab)") { action x = conv Image_type.LAB x; } LabQ_item = class Menuaction (_ "Lab_Q") (_ "convert to LabQ colourspace (32-bit Lab)") { action x = conv Image_type.LABQ x; } LabS_item = class Menuaction (_ "Lab_S") (_ "convert to LabS colourspace (48-bit Lab)") { action x = conv Image_type.LABS x; } LCh_item = class Menuaction (_ "L_Ch") (_ "convert to LCh colourspace") { action x = conv Image_type.LCH x; } XYZ_item = class Menuaction (_ "_XYZ") (_ "convert to XYZ colourspace") { action x = conv Image_type.XYZ x; } Yxy_item = class Menuaction (_ "_Yxy") (_ "convert to Yxy colourspace") { action x = conv Image_type.YXY x; } UCS_item = class Menuaction (_ "_UCS") (_ "convert to UCS colourspace") { action x = conv Image_type.UCS x; } } /* mark objects as being in various colourspaces */ Colour_tag_item = class Menupullright (_ "_Tag As") (_ "tag object as being in various colour spaces") { spaces = Image_type.image_colour_spaces; tag dest x = class _result { _vislevel = 3; to = Option_enum (_ "Tag as") spaces (spaces.get_name dest); _result = map_unary (image_set_type to.value_thing) x; } Mono_item = class Menuaction (_ "_Monochrome") (_ "tag as being in mono colourspace") { action x = tag Image_type.B_W x; } sRGB_item = class Menuaction (_ "_sRGB") (_ "tag as being in sRGB colourspace") { action x = tag Image_type.sRGB x; } scRGB_item = class Menuaction (_ "_scRGB") (_ "tag as being in scRGB colourspace") { action x = tag Image_type.scRGB x; } RGB16_item = class Menuaction (_ "_RGB16") (_ "tag as being in RGB16 colourspace") { action x = tag Image_type.RGB16 x; } GREY16_item = class Menuaction (_ "_GREY16") (_ "tag as being in GREY16 colourspace") { action x = tag Image_type.GREY16 x; } Lab_item = class Menuaction (_ "_Lab") (_ "tag as being in Lab colourspace (float Lab)") { action x = tag Image_type.LAB x; } LabQ_item = class Menuaction (_ "Lab_Q") (_ "tag as being in LabQ colourspace (32-bit Lab)") { action x = tag Image_type.LABQ x; } LabS_item = class Menuaction (_ "Lab_S") (_ "tag as being in LabS colourspace (48-bit Lab)") { action x = tag Image_type.LABS x; } LCh_item = class Menuaction (_ "L_Ch") (_ "tag as being in LCh colourspace") { action x = tag Image_type.LCH x; } XYZ_item = class Menuaction (_ "_XYZ") (_ "tag as being in XYZ colourspace") { action x = tag Image_type.XYZ x; } Yxy_item = class Menuaction (_ "_Yxy") (_ "tag as being in Yxy colourspace") { action x = tag Image_type.YXY x; } UCS_item = class Menuaction (_ "_UCS") (_ "tag as being in UCS colourspace") { action x = tag Image_type.UCS x; } } Colour_temperature_item = class Menupullright (_ "Te_mperature") (_ "colour temperature conversions") { Whitepoint_item = class Menuaction (_ "_Move Whitepoint") (_ "change whitepoint") { action x = class _result { _vislevel = 3; old_white = Option_enum (_ "Old whitepoint") Whitepoints "D65"; new_white = Option_enum (_ "New whitepoint") Whitepoints "D50"; _result = map_unary process x { process im = im''' { im' = colour_transform_to Image_type.XYZ im; im'' = im' * (new_white.value_thing / old_white.value_thing); im''' = colour_transform_to (get_type im) im''; } } } } D65_to_D50_item = class Menupullright (_ "D_65 to D50") (_ "complex conversion") { XYZ_minimal_item = class Menuaction (_ "_Minimal") (_ "D65 to D50 using the minimal 3x3 matrix in XYZ") { action x = map_unary process x { process im = im''' { im' = colour_transform_to Image_type.XYZ im; im'' = recomb D652D50_direct im'; im''' = colour_transform_to (get_type im) im''; } } } Bradford_item = class Menuaction (_ "_Bradford") (_ "D65 to D50 in Bradford cone space") { action x = map_unary process x { process im = im''' { im' = colour_transform_to Image_type.XYZ im; im'' = im_D652D50 im'; im''' = colour_transform_to (get_type im) im''; } } } } D50_to_D65_item = class Menupullright (_ "D_50 to D65") (_ "complex conversion") { XYZ_minimal_item = class Menuaction (_ "_Minimal") (_ "D50 to D65 using the minimal 3x3 matrix in XYZ") { action x = map_unary process x { process im = im''' { im' = colour_transform_to Image_type.XYZ im; im'' = recomb D502D65_direct im'; im''' = colour_transform_to (get_type im) im''; } } } Bradford_item = class Menuaction (_ "_Bradford") (_ "D60 to D65 in Bradford cone space") { action x = map_unary process x { process im = im''' { im' = colour_transform_to Image_type.XYZ im; im'' = im_D502D65 im'; im''' = colour_transform_to (get_type im) im''; } } } } Lab_to_D50XYZ_item = class Menuaction (_ "_Lab to D50 XYZ") (_ "Lab to XYZ with a D50 whitepoint") { action x = map_unary (colour_unary im_D50Lab2XYZ) x; } D50XYZ_to_Lab_item = class Menuaction (_ "D50 _XYZ to Lab") (_ "XYZ to Lab with a D50 whitepoint") { action x = map_unary (colour_unary im_D50XYZ2Lab) x; } sep1 = Menuseparator; CCT_item = class Menuaction (_ "Calculate temperature") (_ "estimate CCT using the McCamy approximation") { action z = map_unary temp_from_colour z; } Colour_item = Colour_new_item.CCT_colour; } Colour_icc_item = class Menupullright (_ "_ICC") (_ "transform with ICC profiles") { print_profile = "$VIPSHOME/share/$PACKAGE/data/cmyk.icm"; monitor_profile = "$VIPSHOME/share/$PACKAGE/data/sRGB.icm"; guess_profile image = print_profile, has_type image && get_type image == Image_type.CMYK && has_bands image && get_bands image >= 4 = monitor_profile; render_intents = Option_enum (_ "Render intent") Render_intent.names (_ "Absolute"); Export_item = class Menuaction (_ "_Export") (_ "export from PCS to device space") { action x = class _result { _vislevel = 3; profile = Pathname (_ "Output profile") print_profile; intent = render_intents; depth = Option (_ "Output depth") [_ "8 bit", _ "16 bit"] 0; _result = map_unary process x { process image = icc_export [8, 16]?depth profile.value intent.value_thing lab { lab = colour_transform_to Image_type.LABQ image; } } } } Import_item = class Menuaction (_ "_Import") (_ "import from device space to PCS") { action x = class _result { _vislevel = 3; embedded = Toggle (_ "Use embedded profile if possible") false; profile = Pathname (_ "Default input profile") (guess_profile x); intent = render_intents; _result = map_unary process x { process image = icc_import_embedded intent.value_thing image, get_header_type "icc-profile-data" image != 0 && embedded = icc_import profile.value intent.value_thing image; } } } Transform_item = class Menuaction (_ "_Transform") (_ "transform between two device spaces") { action x = class _result { _vislevel = 3; in_profile = Pathname (_ "Input profile") (guess_profile x); out_profile = Pathname (_ "Output profile") print_profile; intent = render_intents; _result = map_unary process x { process image = icc_transform in_profile.value out_profile.value intent.value_thing image; } } } AC2RC_item = class Menuaction (_ "_Absolute to Relative") (_ "absolute to relative colorimetry using device profile") { action x = class _result { _vislevel = 3; profile = Pathname (_ "Pick a profile") (guess_profile x); _result = map_unary process x { process image = icc_ac2rc profile.value lab { lab = colour_transform_to Image_type.LAB image; } } } } } Colour_rad_item = class Menupullright (_ "_Radiance") (_ "convert to and from Radiance packed format") { Unpack_item = class Menuaction (_ "Unpack") (_ "unpack Radiance format to float") { action x = map_unary rad2float x; } Pack_item = class Menuaction (_ "Pack") (_ "pack 3-band float to Radiance format") { action x = map_unary float2rad x; } } #separator Colour_dE_item = class Menupullright (_ "_Difference") (_ "calculate colour difference") { /* Apply a converter to an object ... convert image or colour (since * we can guess the colour space we're converting from), don't convert * matrix or vector (since we can't tell ... assume it's in the right * space already). */ apply_cvt cvt x = cvt x, is_Image x || is_Colour x || is_image x = x; diff cvt in1 in2 = abs_vec (apply_cvt cvt in1 - apply_cvt cvt in2); /* Converter to LAB. */ lab_cvt = colour_transform_to Image_type.LAB; /* Converter to UCS ... plain UCS is Ch form, so we go LAB again after * to make sure we get a rectangular coord system. */ ucs_cvt = colour_transform Image_type.LCH Image_type.LAB @ colour_transform_to Image_type.UCS; CIEdE76_item = class Menuaction (_ "CIE dE _76") (_ "calculate CIE dE 1976 for two objects") { action a b = map_binary (diff lab_cvt) a b; } CIEdE00_item = class Menuaction (_ "CIE dE _00") (_ "calculate CIE dE 2000 for two objects") { action a b = map_binary (colour_binary (_ "im_dE00_fromLab") im_dE00_fromLab) a b; } UCS_item = class Menuaction (_ "_CMC(l:l)") (_ "calculate CMC(l:l) for two objects") { action a b = map_binary (diff ucs_cvt) a b; } } Colour_adjust_item = class Menupullright (_ "_Adjust") (_ "alter colours in various ways") { Recombination_item = class Menuaction (_ "_Recombination") (_ "recombine colour with an editable matrix") { action x = class _result { _vislevel = 3; matrix = Matrix_rec (identity_matrix (bands x)) { // try to guess a sensible value for the size of the // matrix bands x = x.bands, is_Image x || is_Colour x = x.width, is_Matrix x = bands x.value?0, is_Group x = x.bands, has_member "bands" x = 3; } _result = map_unary (recomb matrix) x; } } Cast_item = class Menuaction (_ "_Cast") (_ "displace neutral axis in CIE Lab") { action x = class _result { _vislevel = 3; gr = Scale "Green-red" (-20) 20 0; by = Scale "Blue-yellow" (-20) 20 0; _result = map_unary adjust_cast x { adjust_cast in = colour_transform_to (get_type in) in'' { in' = colour_transform_to Image_type.LAB in; in'' = in' + Vector [0, gr.value, by.value]; } } } } HSB_item = class Menuaction (_ "_HSB") (_ "adjust hue-saturation-brightness in LCh") { action x = class _result { _vislevel = 3; h = Scale "Hue" 0 360 0; s = Scale "Saturation" 0.01 5 1; b = Scale "Brightness" 0.01 5 1; _result = map_unary adjust_hsb x { adjust_hsb in = colour_transform_to (get_type in) in'' { in' = colour_transform_to Image_type.LCH in; in'' = in' * Vector [b.value, s.value, 1] + Vector [0, 0, h.value]; } } } } } Colour_similar_item = class Menuaction (_ "_Similar Colour") (_ "find pixels with a similar colour") { action x = class _result { _vislevel = 3; target_colour = Colour_picker "Lab" [50, 0, 0]; t = Scale "dE threshold" 0 100 10; _result = map_unary match x { match in = abs_vec (in' - target) < t { target = colour_transform_to Image_type.LAB target_colour; in' = colour_transform_to Image_type.LAB in; } } } } #separator Colour_chart_to_matrix_item = class Menuaction (_ "_Measure Colour Chart") (_ "measure average pixel values for a colour chart image") { action x = class _result { _vislevel = 3; pacross = Expression (_ "Patches across chart") 6; pdown = Expression (_ "Patches down chart") 4; measure = Scale (_ "Measure area (%)") 1 100 50; // get a representative image from an arg get_image x = get_image x.value?0, is_Group x = x; _im = get_image x; sample = measure_draw (to_real pacross) (to_real pdown) (to_real measure) _im; _result = map_unary chart x { chart in = measure_sample (to_real pacross) (to_real pdown) (to_real measure) in; } } } Colour_matrix_to_chart_item = class Menuaction (_ "Make Synth_etic Colour Chart") (_ "make a colour chart image from a matrix of measurements") { action x = class _result { _vislevel = 3; pacross = Expression (_ "Patches across chart") 6; pdown = Expression (_ "Patches down chart") 4; pwidth = Expression (_ "Patch width in pixels") 50; pheight = Expression (_ "Patch height in pixels") 50; bwidth = Expression (_ "Border between patches") 0; _result = map_unary build_chart x { build_chart in = Image (imagearray_assemble (to_real bwidth) (to_real bwidth) patch_table) { // patch numbers for row starts rowstart = map (multiply (to_real pacross)) [0 .. to_real pdown - 1]; // assemble patches ... each one a pixel value patches = map (take (to_real pacross)) (map (converse drop in.value) rowstart); // make an n-band constant image from eg. [1,2,3] // we don't know the format .. use sRGB (well, why not?) patch v = image_new (to_real pwidth) (to_real pheight) (len v) Image_format.FLOAT Image_coding.NOCODING Image_type.sRGB (Vector v) 0 0; // make an image for each patch patch_table = map (map patch) patches; } } } } Colour_plot_ab_scatter_item = class Menuaction (_ "_Plot ab Scatter") (_ "plot an ab scatter histogram") { action x = class _result { _vislevel = 3; bins = Expression (_ "Number of bins on each axis") 8; _result = map_unary plot_scatter x { plot_scatter in = Image (bg * (((90 / mx) * hist) ++ blk)) { lab = colour_transform_to Image_type.LAB in.value; ab = (unsigned char) ((lab?1 ++ lab?2) + 128); hist = hist_find_nD bins.expr ab; mx = max hist; bg = lab_slice bins.expr 1; blk = 1 + im_black (to_real bins) (to_real bins) 2; } } } } nip2-8.7.0/share/nip2/compat/8.6/_joe_extra.def0000644000175000017500000003225713330327312015674 00000000000000//////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// Frame_item = class Menupullright "Picture _Frame" "working with images of frames" { //////////////////////////////////////////////////////////////////////////////////// Build_frame_item = class Menupullright "_Build Frame From" "builds a new frame from image a and places it around image b" { //////////////////////////////////////////////////////////////////////////////////// Frame_corner_item = class Menuaction "_Frame Corner" "copies and extends a frame corner, a, to produce a complete frame to fit round a given image, b" { prefs = Workspaces.Preferences; action a b = class _result { _check_args = [ [a, "a", check_Image], [b, "b", check_Image] ]; _check_all = [ [a.coding == b.coding && a.bands == b.bands, "a.coding == b.coding && a.bands == b.bands"] ]; _vislevel = 3; ppcm = Expression "Number of pixels per cm" 25; /* Given the value of ppcm, distance between the inner edge of the frame * and the outer edge of the image. +ve values mean the frame overlaps * the image. */ overlap = Expression "Size of frame overlap in cm" 0; variables = Frame_variables 0; _type = Image_type.colour_spaces.get_name b.type; //If applied the count colour be seen for -ve values of overlap mount_options = Mount_options _type ppcm.expr; _cs = variables.corner_section.value; _ms = variables.middle_section.value; _ov = ppcm.expr * overlap.expr; _sf = variables.scale_factor.expr; _bf = variables.blend_fraction.value; //Scale frame image if required. _a = a, _sf == 1; = a, _sf == 0; = Image (resize Kernel_linear _sf _sf a.value); _im_w = b.width; _im_h = b.height + mount_options._los, mount_options.apply = b.height; _os = mount_options._los, mount_options.apply = 0; _cl = Vector mount_options.mount_colour.value, mount_options.apply = 0; //Produce scaled and resized frame. frame = corner_frame _a _im_w _im_h _ov _cs _ms _bf; //Resize image canvas and applied mount colour as required. _pos_im = frame_position_image b frame _os _cl; //Wrap frame round image. _result = if (frame == 0) then _pos_im else frame; } } //////////////////////////////////////////////////////////////////////////////////// Simple_frame_item = class Menuaction "_Simple Frame" "extends or shortens the central sections of a simple frame, a, to fit round a given image, b" { prefs = Workspaces.Preferences; action a b = class _result { _check_args = [ [a, "a", check_Image], [b, "b", check_Image] ]; _check_all = [ [a.coding == b.coding && a.bands == b.bands, "a.coding == b.coding && a.bands == b.bands"] ]; _vislevel = 3; ppcm = Expression "Number of pixels per cm" 25; /* Given the value of ppcm, distance between the inner edge of the frame * and the outer edge of the image. +ve values mean the frame overlaps * the image. */ overlap = Expression "Size of frame overlap in cm" 0; variables = Frame_variables 0; _type = Image_type.colour_spaces.get_name b.type; //If applied the count colour be seen for -ve values of overlap mount_options = Mount_options _type ppcm.expr; _cs = variables.corner_section.value; _ms = variables.middle_section.value; _ov = ppcm.expr * overlap.expr; _sf = variables.scale_factor.expr; _bf = variables.blend_fraction.value; //Scale frame image if required. _a = a, _sf == 1; = a, _sf == 0; = Image (resize Kernel_linear _sf _sf a.value); _im_w = b.width; _im_h = b.height + mount_options._los, mount_options.apply = b.height; _os = mount_options._los, mount_options.apply = 0; _cl = Vector mount_options.mount_colour.value, mount_options.apply = 0; //Produce scaled and resized frame. frame = simple_frame _a _im_w _im_h _ov _cs _ms _bf variables.option; //Resize image canvas and applied mount colour as required. _pos_im = frame_position_image b frame _os _cl; //Wrap frame round image. _result = if (frame == 0) then _pos_im else frame; } } //////////////////////////////////////////////////////////////////////////////////// Complex_frame_item = class Menuaction "_Complex Frame" "extends or shortens the central sections of a frame a, preserving any central edge details, to fit image b" { prefs = Workspaces.Preferences; action a b = class _result { _check_args = [ [a, "a", check_Image], [b, "b", check_Image] ]; _check_all = [ [a.coding == b.coding && a.bands == b.bands, "a.coding == b.coding && a.bands == b.bands"] ]; _vislevel = 3; ppcm = Expression "Number of pixels per cm" 25; /* Given the value of ppcm, distance between the inner edge of the frame * and the outer edge of the image. +ve values mean the frame overlaps * the image. */ overlap = Expression "Size of frame overlap in cm" 0; variables = Frame_variables 1; _type = Image_type.colour_spaces.get_name b.type; //If applied the count colour be seen for -ve values of overlap mount_options = Mount_options _type ppcm.expr; _cs = variables.corner_section.value; _es = variables.edge_section.value; _ms = variables.middle_section.value; _ov = ppcm.expr * overlap.expr; _sf = variables.scale_factor.expr; _bf = variables.blend_fraction.value; _a = a, _sf == 1; = a, _sf == 0; = Image (resize Kernel_linear _sf _sf a.value); _im_w = b.width; _im_h = b.height + mount_options._los, mount_options.apply = b.height; _os = mount_options._los, mount_options.apply = 0; _cl = Vector mount_options.colour.value, mount_options.apply = 0; //Produce scaled and resized frame. frame = complex_frame _a _im_w _im_h _ov _cs _es _ms _bf variables.option; //Resize image canvas and applied mount colour as required. _pos_im = frame_position_image b frame _os _cl; //Wrap frame round image. _result = if (frame == 0) then _pos_im else frame; } } } //////////////////////////////////////////////////////////////////////////////////// Straighten_frame_item = class Menuaction "_Straighten Frame" "uses four points to square up distorted images of frames" { action a = Perspective_item.action a; } }; //////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// Select_item = class Menupullright "_Select" "select user defined areas of an image" { prefs = Workspaces.Preferences; /* Option toggle used to define whether the user is replacing a * dark or a light area. */ _control = Option "Make" [ "Selection Brighter", "Selection Darker", "Selection Black", "Selection White", "Background Black", "Background White", "Mask" ] 4; control_selection mask im no = [ if mask then im * 1.2 else im * 1, if mask then im * 0.8 else im * 1, if mask then 0 else im, if mask then 255 else im, if mask then im else 0, if mask then im else 255, mask ]?no; Rectangle = class Menuaction "_Rectangle" "use an Arrow or Region x to define a rectangle" { action x = class _result { _vislevel = 3; control = _control; _result = control_selection mask im control { im = x.image; mask = Image m { rx = x.region_rect, is_Region x = x; b = image_new im.width im.height 1 0 0 1 0 0 0; w = image_new rx.nwidth rx.nheight 1 0 0 1 255 0 0; m = insert_noexpand rx.nleft rx.ntop w b; } } } } Elipse = class Menuaction "_Ellipse" "use a line/arrow x to define the center point radius and direction of an ellipse" { action x = class _result { _vislevel = 3; control = _control; width = Scale "Width" 0.01 1 0.5; _result = control_selection mask im control { mask = select_ellipse x width.value; im = x.image; } } } Tetragon = class Menuaction "_Tetragon" "selects the convex area defined by four points" { action a b c d = class _result { _vislevel = 3; control = _control; _result = control_selection mask im control { mask = select_tetragon a b c d; im = get_image a; } } } Polygon = class Menuaction "_Polygon" "selects a polygon from an ordered group of points" { action pt_list = class _result { _vislevel = 3; control = _control; _result = control_selection mask im control { mask = select_polygon pt_list; im = get_image ((pt_list.value)?0); } } } sep1 = Menuseparator; Threshold_item = class Menuaction "Thres_hold" "simple image threshold" { action x = class _result { _vislevel = 3; t = Scale "Threshold" 0 mx (mx / 2) { mx = Image_format.maxval x.format, is_Image x = 255; } _result = map_unary (more t.value) x; } } Threshold_percent_item = class Menuaction "Per_cent Threshold" "threshold at a percentage of pixels" { action x = class _result { _vislevel = 3; t = Scale "Percentage of pixels" 0 100 50; _result = map_unary (more (hist_thresh (t.value / 100) x)) x; } } sep2 = Menuseparator; Segment_item = class Menuaction "_Segment" "break image into disjoint regions" { action x = class _result { _vislevel = 3; segments = Expression "Number of disjoint regions" (map_unary (get_header "n-segments") _result); _result = map_unary segment x; } } Fill_item = class Menuaction "_Fill" "fill zero pixels with the nearest non-zero" { action x = class Image _result { _vislevel = 3; distance = Image _distance; [_result, _distance] = vips_call "fill_nearest" [x.value] [ "distance" => true ]; } } fill_nearest x = oo_unary_function nearest_op x, is_class x = near x, is_image x = error (_ "bad arguments to " ++ "fill_nearest") { nearest_op = Operator "fill_nearest" fill_nearest Operator_type.COMPOUND_REWRAP false; near x = [out, distance] { [out, distance] = vips_call "fill_nearest" [x] [ "distance" => true ]; } } }; //////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// Perspective_match_item = class Menuaction "_Perspective Match" "rotate, scale and skew one image to match another" { action x y = class _result { _vislevel = 3; // try to find an image ... for a group, get the first item find_image x = x, is_Image x = find_image x?0, is_list x = find_image x.value, is_class x && has_value x = error "unable to find image"; _a = find_image x; _b = find_image y; ap1 = Mark_relative _a 0.1 0.1; ap2 = Mark_relative _a 0.9 0.1; ap3 = Mark_relative _a 0.1 0.9; ap4 = Mark_relative _a 0.9 0.9; bp1 = Mark_relative _b 0.1 0.1; bp2 = Mark_relative _b 0.9 0.1; bp3 = Mark_relative _b 0.1 0.9; bp4 = Mark_relative _b 0.9 0.9; _result = map_binary process x y { f1 = _a.width / _b.width; f2 = _a.height / _b.height; rl = sort_pts_clockwise [ap1, ap2, ap3, ap4]; pl = sort_pts_clockwise [bp1, bp2, bp3, bp4]; to = [ rl?0.left, rl?0.top, rl?1.left, rl?1.top, rl?2.left, rl?2.top, rl?3.left, rl?3.top ]; from = [ pl?0.left * f1, pl?0.top * f2, pl?1.left * f1, pl?1.top * f2, pl?2.left * f1, pl?2.top * f2, pl?3.left * f1, pl?3.top * f2 ]; trans = perspective_transform to from; process a b = transform 1 0 trans b2 { b2 = resize Kernel_linear f1 f2 b, (f1 >= 1 && f2 >= 1) || (f1 >= 1 && f2 >= 1) = resize Kernel_linear f1 1 b1 {b1 = resize Kernel_linear 1 f2 b;} } } } }; //////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// Perspective_item = class Menuaction "Pe_rspective Distort" "rotate, scale and skew an image with respect to defined points" { action x = class _result { _vislevel = 3; // try to find an image ... for a group, get the first item find_image x = x, is_Image x = find_image x?0, is_list x = find_image x.value, is_class x && has_value x = error "unable to find image"; _a = find_image x; dir = Option "Select distort direction" [ "Distort to points", "Distort to corners" ] 1; ap1 = Mark_relative _a 0.1 0.1; ap2 = Mark_relative _a 0.9 0.1; ap3 = Mark_relative _a 0.9 0.9; ap4 = Mark_relative _a 0.1 0.9; _result = map_unary process x { trans = [perspective_transform to from, perspective_transform from to]?(dir.value) { rl = sort_pts_clockwise [ap1, ap2, ap3, ap4]; to = [(rl?0).left, (rl?0).top, (rl?1).left, (rl?1).top, (rl?2).left, (rl?2).top, (rl?3).left, (rl?3).top]; from=[0, 0, (_a.width - 1), 0, (_a.width - 1), (_a.height - 1), 0, (_a.height - 1)]; } process a = transform 1 0 trans a; } } }; nip2-8.7.0/share/nip2/compat/8.6/_generate.def0000644000175000017500000000755513330327312015511 00000000000000 /* make an image of size x by y whose pixels are their coordinates. */ make_xy x y = im_make_xy (to_real x) (to_real y); /* make an image with the specified properties ... pixel is (eg.) * Vector [0, 0, 0], or 12. If coding == labq, we ignore bands, format and * type, generate a 3 band float image, and lab2labq it before handing it * back. */ image_new w h b fmt coding type pixel xoff yoff = embed 1 0 0 w h im'''' { b' = 3, coding == Image_coding.LABPACK = b; fmt' = Image_format.FLOAT, coding == Image_coding.LABPACK = fmt; type' = Image_type.LAB, coding == Image_coding.LABPACK = type; im = im_black 1 1 (to_real b') + pixel; im' = clip2fmt fmt' im; im'' = im_Lab2LabQ im', coding == Image_coding.LABPACK; = im'; im''' = image_set_type type' im''; im'''' = image_set_origin xoff yoff im'''; } mkim options x y b = Image (image_new x y b (opt $format) (opt $coding) (opt $type) (opt $pixel) (opt $xoffset) (opt $yoffset)) { opt = get_option options [ $format => Image_format.UCHAR, $coding => Image_coding.NOCODING, $type => Image_type.sRGB, $pixel => 0, $xoffset => 0, $yoffset => 0 ]; } /* generate a slice of LAB space size x size pixels for L* == l */ lab_slice size l = image_set_type Image_type.LAB im { L = image_new size size 1 Image_format.FLOAT Image_coding.NOCODING Image_type.B_W l 0 0; A1 = im_fgrey (to_real size) (to_real size); /* im_fgrey always makes 0-1, so these ranges can be wired in. */ A2 = A1 * 256 - 128; A4 = im_rot90 A2; im = image_set_origin (size / 2) (size / 2) (L ++ A2 ++ A4); } /* Look at Image, try to make a Colour (failing that, a Vector) which is white * for that image type. */ image_white im = colour_transform_to type white_lab, bands == 3 && coding == Image_coding.NOCODING && colour_spaces.present 1 type = white_lab, coding == Image_coding.LABPACK = Vector (replicate bands (max_value.lookup 1 0 format)) { bands = im.bands; type = im.type; format = im.format; coding = im.coding; colour_spaces = Image_type.colour_spaces; // white as LAB white_lab = Colour "Lab" [100, 0, 0]; // maximum value for this numeric type max_value = Table [ [255, Image_format.DPCOMPLEX], [255, Image_format.DOUBLE], [255, Image_format.COMPLEX], [255, Image_format.FLOAT], [2 ** 31 - 1, Image_format.INT], [2 ** 32 - 1, Image_format.UINT], [2 ** 15 - 1, Image_format.SHORT], [2 ** 16 - 1, Image_format.USHORT], [2 ** 7 - 1, Image_format.CHAR], [2 ** 8 - 1, Image_format.UCHAR] ]; } /* Make a seperable gaussian mask. */ matrix_gaussian_blur radius = im_gauss_imask_sep (radius / 3) 0.2; /* Make a seperable square mask. */ matrix_blur radius = Matrix_con (sum mask_sq_line) 0 [mask_sq_line] { mask_sq_line = replicate (2 * radius - 1) 1; } /* Make a colour from a temperature. */ colour_from_temp T = error (_ "T out of range"), T < 1667 || T > 25000 = Colour "Yxy" [50, x, y] { // Kim et all approximation // see eg. http://en.wikipedia.org/wiki/Planckian_locus#Approximation x = -0.2661239 * 10 ** 9 / T ** 3 - 0.2343580 * 10 ** 6 / T ** 2 + 0.8776956 * 10 ** 3 / T + 0.179910, T < 4000 = -3.0258469 * 10 ** 9 / T ** 3 + 2.1070379 * 10 ** 6 / T ** 2 + 0.2226347 * 10 ** 3 / T + 0.240390; y = -1.1063814 * x ** 3 - 1.34811020 * x ** 2 + 2.18555832 * x - 0.20219638, T < 2222 = -0.9549476 * x ** 3 - 1.37418593 * x ** 2 + 2.09137015 * x - 0.16748867, T < 4000 = 3.0817580 * x ** 3 - 5.87338670 * x ** 2 + 3.75112997 * x - 0.37001483; } temp_from_colour z = T { c = colour_transform_to Image_type.YXY (to_colour z); x = c.value?1; y = c.value?2; // McCamy's approximation, see eg. // http://en.wikipedia.org/wiki/Color_temperature#Approximation xe = 0.332; ye = 0.1858; n = (x - xe) / (y - ye); T = -449 * n ** 3 + 3525 * n ** 2 - 6823.3 * n + 5520.33; } nip2-8.7.0/share/nip2/compat/8.6/Math.def0000644000175000017500000003162513330327312014444 00000000000000Math_arithmetic_item = class Menupullright "_Arithmetic" "basic arithmetic for objects" { Add_item = class Menuaction "_Add" "add a and b" { action a b = map_binary add a b; } Subtract_item = class Menuaction "_Subtract" "subtract b from a" { action a b = map_binary subtract a b; } Multiply_item = class Menuaction "_Multiply" "multiply a by b" { action a b = map_binary multiply a b; } Divide_item = class Menuaction "_Divide" "divide a by b" { action a b = map_binary divide a b; } Remainder_item = class Menuaction "_Remainder" "remainder after integer division of a by b" { action a b = map_binary remainder a b; } sep1 = Menuseparator; Absolute_value_item = class Menuaction "A_bsolute Value" "absolute value of x" { action x = map_unary abs x; } Absolute_value_vector_item = class Menuaction "Absolute Value _Vector" "like Absolute Value, but treat pixels as vectors" { action x = map_unary abs_vec x; } Sign_item = class Menuaction "S_ign" "unit vector" { action x = map_unary sign x; } Negate_item = class Menuaction "_Negate" "multiply by -1" { action x = map_unary unary_minus x; } } Math_trig_item = class Menupullright "_Trigonometry" "trigonometry operations (all in degrees)" { Sin_item = class Menuaction "_Sine" "calculate sine x" { action x = map_unary sin x; } Cos_item = class Menuaction "_Cosine" "calculate cosine x" { action x = map_unary cos x; } Tan_item = class Menuaction "_Tangent" "calculate tangent x" { action x = map_unary tan x; } sep1 = Menuseparator; Asin_item = class Menuaction "Arc S_ine" "calculate arc sine x" { action x = map_unary asin x; } Acos_item = class Menuaction "Arc C_osine" "calculate arc cosine x" { action x = map_unary acos x; } Atan_item = class Menuaction "Arc T_angent" "calculate arc tangent x" { action x = map_unary atan x; } sep2 = Menuseparator; Rad_item = class Menuaction "_Degrees to Radians" "convert degrees to radians" { action x = map_unary rad x; } Deg_item = class Menuaction "_Radians to Degrees" "convert radians to degrees" { action x = map_unary deg x; } sep3 = Menuseparator; Angle_range_item = class Menuaction "Angle i_n Range" "is angle within t degrees of r, mod 360" { action t r angle = clock (max - angle) < 2*r { max = clock (t + r); clock a = a + 360, a < 0; = a - 360, a >= 360; = a; } } } Math_log_item = class Menupullright "_Log" "logarithms and anti-logs" { Exponential_item = class Menuaction "_Exponential" "calculate e ** x" { action x = map_unary (power e) x; } Log_natural_item = class Menuaction "Natural _Log" "log base e of x" { action x = map_unary log x; } sep1 = Menuseparator; Exponential10_item = class Menuaction "E_xponential base 10" "calculate 10 ** x" { action x = map_unary (power 10) x; } Log10_item = class Menuaction "L_og Base 10" "log base 10 of x" { action x = map_unary log10 x; } sep2 = Menuseparator; Raise_to_power_item = class Menuaction "_Raise to Power" "calculate x ** y" { action x y = map_binary power x y; } } Math_complex_item = class Menupullright "_Complex" "operations on complex numbers and images" { Complex_extract = class Menupullright "_Extract" "extract fields from complex" { Real_item = class Menuaction "_Real" "extract real part of complex" { action in = map_unary re in; } Imaginary_item = class Menuaction "_Imaginary" "extract imaginary part of complex" { action in = map_unary im in; } } Complex_build_item = class Menuaction "_Build" "join a and b to make a complex" { action a b = map_binary comma a b; } sep1 = Menuseparator; Polar_item = class Menuaction "_Polar" "convert real and imag to amplitude and phase" { action a = map_unary polar a; } Rectangular_item = class Menuaction "_Rectagular" ("convert (amplitude, phase) image to rectangular " ++ "coordinates") { action x = map_unary rectangular x; } sep2 = Menuseparator; Conjugate_item = class Menuaction "_Conjugate" "invert imaginary part" { action x = map_unary conj x; } } Math_boolean_item = class Menupullright "_Boolean" "bitwise boolean operations for integer objects" { And_item = class Menuaction "_AND" "bitwise AND of a and b" { action a b = map_binary bitwise_and a b; } Or_item = class Menuaction "_OR" "bitwise OR of a and b" { action a b = map_binary bitwise_or a b; } Eor_item = class Menuaction "_XOR" "bitwise exclusive or of a and b" { action a b = map_binary eor a b; } Not_item = class Menuaction "_NOT" "invert a" { action a = map_unary not a; } sep1 = Menuseparator; Right_shift_item = class Menuaction "Shift _Right" "shift a right by b bits" { action a b = map_binary right_shift a b; } Left_shift_item = class Menuaction "Shift _Left" "shift a left by b bits" { action a b = map_binary left_shift a b; } sep2 = Menuseparator; If_then_else_item = class Menuaction "_If Then Else" "b where a is non-zero, c elsewhere" { action a b c = map_trinary ite a b c { // can't use if_then_else, we need a true trinary ite a b c = if a then b else c; } } Bandand_item = Image_band_item.Bandand_item; Bandor_item = Image_band_item.Bandor_item; } Math_relational_item = class Menupullright "R_elational" "comparison operations" { Equal_item = class Menuaction "_Equal to" "test a equal to b" { action a b = map_binary equal a b; } Not_equal_item = class Menuaction "_Not Equal to" "test a not equal to b" { action a b = map_binary not_equal a b; } sep1 = Menuseparator; More_item = class Menuaction "_More Than" "test a strictly greater than b" { action a b = map_binary more a b; } Less_item = class Menuaction "_Less Than" "test a strictly less than b" { action a b = map_binary less a b; } sep2 = Menuseparator; More_equal_item = class Menuaction "M_ore Than or Equal to" "test a greater than or equal to b" { action a b = map_binary more_equal a b; } Less_equal_item = class Menuaction "L_ess Than or Equal to" "test a less than or equal to b" { action a b = map_binary less_equal a b; } } Math_list_item = class Menupullright "L_ist" "operations on lists" { Head_item = class Menuaction "_Head" "first element in list" { action x = map_unary hd x; } Tail_item = class Menuaction "_Tail" "list without the first element" { action x = map_unary tl x; } Last_item = class Menuaction "_Last" "last element in list" { action x = map_unary last x; } Init_item = class Menuaction "_Init" "list without the last element" { action x = map_unary init x; } sep1 = Menuseparator; Reverse_item = class Menuaction "_Reverse" "reverse order of elements in list" { action x = map_unary reverse x; } Sort_item = class Menuaction "_Sort" "sort list into ascending order" { action x = map_unary sort x; } Make_set_item = class Menuaction "_Make Set" "remove duplicates from list" { action x = map_unary mkset equal x; } Transpose_list_item = class Menuaction "Tr_anspose" "exchange rows and columns in a list of lists" { action x = map_unary transpose x; } Concat_item = class Menuaction "_Concat" "flatten a list of lists into a single list" { action l = map_unary concat l; } sep2 = Menuseparator; Length_item = class Menuaction "L_ength" "find the length of list" { action x = map_unary len x; } Subscript_item = class Menuaction "S_ubscript" "return element n from list (index from zero)" { action n x = map_binary subscript n x; } Take_item = class Menuaction "_Take" "take the first n elements of list x" { action n x = map_binary take n x; } Drop_item = class Menuaction "_Drop" "drop the first n elements of list x" { action n x = map_binary drop n x; } sep3 = Menuseparator; Join_item = class Menuaction "_Join" "join two lists end to end" { action a b = map_binary join a b; } Difference_item = class Menuaction "_Difference" "difference of two lists" { action a b = map_binary difference a b; } Cons_item = class Menuaction "C_ons" "put element a on the front of list x" { action a x = map_binary cons a x; } Zip_item = class Menuaction "_Zip" "join two lists, pairwise" { action a b = map_binary zip2 a b; } } Math_round_item = class Menupullright "_Round" "various rounding operations" { /* smallest integral value not less than x */ Ceil_item = class Menuaction "_Ceil" "smallest integral value not less than x" { action x = map_unary ceil x; } Floor_item = class Menuaction "_Floor" "largest integral value not greater than x" { action x = map_unary floor x; } Rint_item = class Menuaction "_Round to Nearest" "round to nearest integer" { action x = map_unary rint x; } } Math_fourier_item = class Menupullright "_Fourier" "Fourier transform" { Forward_item = class Menuaction "_Forward" "fourier transform of image" { action a = map_unary (rotquad @ fwfft) a; } Reverse_item = class Menuaction "_Reverse" "inverse fourier transform of image" { action a = map_unary (invfft @ rotquad) a; } Rotate_quadrants_item = class Menuaction "Rotate _Quadrants" "rotate quadrants" { action a = map_unary rotquad a; } } Math_stats_item = class Menupullright "_Statistics" "measure various statistics of objects" { Value_item = class Menuaction "_Value" "value of point in object" { action a = class _result { _vislevel = 3; position = Expression "Coordinate" (0, 0); _result = map_binary point position.expr a; } } Mean_item = class Menuaction "_Mean" "arithmetic mean value" { action a = map_unary mean a; } Gmean_item = class Menuaction "_Geometric Mean" "geometric mean value" { action a = map_unary meang a; } Zmean_item = class Menuaction "_Zero-excluding Mean" "mean value of non-zero elements" { action a = map_unary meanze a; } Deviation_item = class Menuaction "_Standard Deviation" "standard deviation of object" { action a = map_unary deviation a; } Zdeviation_item = class Menuaction "Z_ero-excluding Standard Deviation" "standard deviation of non-zero elements" { action a = map_unary deviationze a; } Skew_item = class Menuaction "S_kew" "skew of image or list or vector" { action a = map_unary skew a; } Kurtosis_item = class Menuaction "Kurtosis" "kurtosis of image or list or vector" { action a = map_unary kurtosis a; } Stats_item = class Menuaction "Ma_ny Stats" "calculate many stats in a single pass" { action a = map_unary stats a; } sep1 = Menuseparator; Max_item = class Menuaction "M_aximum" "maximum of object" { action a = map_unary max a; } Min_item = class Menuaction "M_inimum" "minimum of object" { action a = map_unary min a; } Maxpos_item = class Menuaction "_Position of Maximum" "position of maximum in object" { action a = map_unary maxpos a; } Minpos_item = class Menuaction "P_osition of Minimum" "position of minimum in object" { action a = map_unary minpos a; } Gravity_item = class Menuaction "Centre of _Gravity" "position of centre of gravity of histogram" { action a = map_unary gravity a; } sep2 = Menuseparator; Count_set_item = class Menuaction "_Non-zeros" "number of non-zero elements in object" { action a = map_unary cset a { cset i = (mean (i != 0) * i.width * i.height) / 255; } } Count_clear_item = class Menuaction "_Zeros" "number of zero elements in object" { action a = map_unary cclear a { cclear i = (mean (i == 0) * i.width * i.height) / 255; } } Count_edges_item = class Menuaction "_Edges" "count average edges across or down image" { action x = class _result { _vislevel = 3; edge = Option "Count" [ "Horizontal lines", "Vertical lines" ] 0; _result = map_unary process x { process image = Number (edge.labels?edge) (im_cntlines image.value edge.value); } } } sep3 = Menuseparator; Linear_regression_item = class Menuaction "_Linear Regression" "fit a line to a set of points" { action xes yes = linreg xes yes; } Weighted_linear_regression_item = class Menuaction "_Weighted Linear Regression" "fit a line to a set of points and deviations" { action xes yes devs = linregw xes yes devs; } Cluster_item = class Menuaction "_Cluster" "cluster a list of numbers" { action l = class { _vislevel = 3; thresh = Expression "Threshold" 10; [_r, _w] = cluster thresh.expr l; result = _r; weights = _w; } } } Math_base_item = class Menupullright "Bas_e" "convert number bases" { Hexadecimal_item = class Menuaction "_Hexadecimal" "convert to hexadecimal (base 16)" { action a = map_unary (print_base 16) a; } Binary_item = class Menuaction "_Binary" "convert to binary (base 2)" { action a = map_unary (print_base 2) a; } Octal_item = class Menuaction "_Octal" "convert to octal (base 8)" { action a = map_unary (print_base 8) a; } } nip2-8.7.0/share/nip2/compat/8.6/Tasks.def0000644000175000017500000006407313330327312014643 00000000000000Tasks_capture_item = class Menupullright "_Capture" "useful stuff for capturing and preprocessing images" { Csv_import_item = class Menuaction "_CSV Import" "read a file of comma-separated values" { action = class _result { _vislevel = 3; path = Pathname "File to load" "empty"; start_line = Expression "Start at line" 1; rows = Expression "Lines to read (-1 for whole file)" (-1); whitespace = String "Whitespace characters" " \""; separator = String "Separator characters" ",;\t"; _result = Image blank, path.value == "empty" = Image (im_csv2vips filename) { filename = search (expand path.value) ++ ":" ++ "skip:" ++ print (start_line.expr - 1) ++ "," ++ "whi:" ++ escape whitespace.value ++ "," ++ "sep:" ++ escape separator.value ++ "," ++ "line:" ++ print rows.expr; // prefix any ',' with a '\' in the separators line escape x = foldr prefix [] x { prefix x l = '\\' : x : l, x == ',' = x : l; } blank = image_new 1 1 1 Image_format.DOUBLE Image_coding.NOCODING Image_type.B_W 0 0 0; } } } Raw_import_item = class Menuaction "_Raw Import" "read a file of binary values" { action = class _result { _vislevel = 3; path = Pathname "File to load" "empty"; across = Expression "Pixels across" 100; down = Expression "Pixels down" 100; bytes = Expression "Bytes per pixel" 3; skip = Expression "Skip over initial bytes" 0; _result = Image blank, path.value == "empty" = Image (im_binfile path.value across.expr down.expr bytes.expr skip.expr) { blank = image_new 1 1 1 Image_format.DOUBLE Image_coding.NOCODING Image_type.B_W 0 0 0; } } } // interpret Analyze header for layout and calibration Analyze7_header_item = class Menuaction "_Interpret Analyze 7 Header" "examine the Analyze header and set layout and value" { action x = x''' { // read bits of header dim n = get_header ("dsr-image_dimension.dim[" ++ print n ++ "]"); dim0 = dim 0 x; dim1 = dim 1 x; dim2 = dim 2 x; dim3 = dim 3 x; dim4 = dim 4 x; dim5 = dim 5 x; dim6 = dim 6 x; dim7 = dim 7 x; glmax = get_header "dsr-image_dimension.glmax" x; cal_max = get_header "dsr-image_dimension.cal_max" x; // oops, now a nop x' = x; // lay out higher dimensions width-ways x'' = grid dim2 dim3 1 x', dim0 == 3 = grid dim2 dim3 dim4 x', dim0 == 4 = grid (dim2 * dim4) dim5 1 (grid dim2 dim3 dim4) x', dim0 == 5 = grid (dim2 * dim4) dim5 dim6 (grid dim2 dim3 dim4) x', dim0 == 6 = grid (dim2 * dim4 * dim6) dim7 1 (grid (dim2 * dim4) dim5 dim6 (grid dim2 dim3 dim4)) x', dim0 == 7 = error (_ "unsupported dimension " ++ dim0); // multiply by scale factor to get kBeq x''' = x'' * (cal_max / glmax); } } Video_item = class Menuaction "Capture _Video Frame" "capture a frame of still video" { // shortcut to prefs prefs = Workspaces.Preferences; action = class _result { _vislevel = 3; device = prefs.VIDEO_DEVICE; channel = Option "Input channel" [ "TV", "Composite 1", "Composite 2", "Composite 3" ] prefs.VIDEO_CHANNEL; b = Scale "Brightness" 0 32767 prefs.VIDEO_BRIGHTNESS; col = Scale "Colour" 0 32767 prefs.VIDEO_COLOUR; con = Scale "Contrast" 0 32767 prefs.VIDEO_CONTRAST; hue = Scale "Hue" 0 32767 prefs.VIDEO_HUE; frames = Scale "Frames to average" 0 100 prefs.VIDEO_FRAMES; mono = Toggle "Monochrome grab" prefs.VIDEO_MONO; crop = Toggle "Crop image" prefs.VIDEO_CROP; // grab, but hide it ... if we let the crop edit _raw_grab = Image (im_video_v4l1 device channel.value b.value col.value con.value hue.value frames.value); edit_crop = Region _raw_grab left top width height { left = prefs.VIDEO_CROP_LEFT; top = prefs.VIDEO_CROP_TOP; width = min_pair prefs.VIDEO_CROP_WIDTH (_raw_grab.width + left); height = min_pair prefs.VIDEO_CROP_HEIGHT (_raw_grab.height + top); } aspect_ratio = Expression "Stretch vertically by" prefs.VIDEO_ASPECT; _result = frame' { frame = edit_crop, crop = _raw_grab; frame' = colour_transform_to Image_type.B_W frame, mono = frame; } } } Smooth_image_item = class Menuaction "_Smooth" "remove small features from image" { action in = class _result { _vislevel = 3; feature = Scale "Minimum feature size" 1 50 20; _result = map_unary (smooth feature.value) in; } } Light_correct_item = class Menuaction "_Flatfield" "use white image w to flatfield image i" { action w i = map_binary wc w i { wc w i = clip2fmt i.format (w' * i) { fac = mean w / max w; w' = fac * (max w / w); } } } Image_rank_item = Filter_rank_item.Image_rank_item; Tilt_item = Filter_tilt_item; sep1 = Menuseparator; White_balance_item = class Menuaction "_White Balance" "use average of small image to set white of large image" { action a b = class _result { _vislevel = 3; white_hint = "Set image white to:"; white = Colour_picker "Lab" [100, 0, 0]; _result = map_binary wb a b { wb a b = colour_transform_to (get_type image) image_xyz' { area x = x.width * x.height; larger x y = area x > area y; [image, patch] = sortc larger [a, b]; to_xyz = colour_transform_to Image_type.XYZ; // white balance in XYZ patch_xyz = to_colour (to_xyz patch); white_xyz = to_xyz white; facs = (mean patch_xyz / mean white_xyz) * (white_xyz / patch_xyz); image_xyz = to_xyz image; image_xyz' = image_xyz * facs; } } } } Gamma_item = Image_levels_item.Gamma_item; Tone_item = Image_levels_item.Tone_item; sep2 = Menuseparator; Crop_item = Image_crop_item; Rotate_item = Image_transform_item.Rotate_item; Flip_item = Image_transform_item.Flip_item; Resize_item = Image_transform_item.Resize_item; Rubber_item = Image_transform_item.Image_rubber_item; sep3 = Menuseparator; ICC_item = Colour_icc_item; Temp_item = Colour_temperature_item; Find_calib_item = class Menuaction "Find _Colour Calibration" "find an RGB -> XYZ transform from an image of a colour chart" { action image = class _result { _check_args = [ [image, "image", check_Image] ]; _vislevel = 3; measure = Scale (_ "Measure area (%)") 1 100 50; sample = measure_draw 6 4 (to_real measure) image; // get macbeth data file to use macbeth = Pathname "Pick a Macbeth data file" "$VIPSHOME/share/$PACKAGE/data/macbeth_lab_d65.mat"; mode = Option "Input LUT" [ "Linearize from chart greyscale", "Fit intercept from chart greyscale", "Linear input, set brightness from chart", "Linear input" ] 0; // get max of input image _max_value = Image_format.maxval image.format; // measure chart image _camera = measure_sample 6 4 (to_real measure) image; // load true values _true_Lab = Matrix_file macbeth.value; _true_XYZ = colour_transform Image_type.LAB Image_type.XYZ _true_Lab; // get Ys of greyscale _true_grey_Y = map (extract 1) (drop 18 _true_XYZ.value); // camera greyscale (all bands) _camera_grey = drop 18 _camera.value; // normalise both to 0-1 and combine _camera_grey' = map (map (multiply (1 / _max_value))) _camera_grey; _true_grey_Y' = map (multiply (1 / 100)) _true_grey_Y; _comb = Matrix (map2 cons _true_grey_Y' _camera_grey'), mode == 0 = Matrix [0: intercepts, replicate (_camera.width + 1) 1], mode == 1 = Matrix [[0, 0], [1, 1]] { intercepts = [(linreg _true_grey_Y' cam).intercept :: cam <- transpose _camera_grey']; } // make a linearising lut ... zero on left _linear_lut = im_invertlut _comb (_max_value + 1); // and display it // plot from 0 explicitly so we see the effect of mode1 (intercept // from greyscale) linearising_lut = Plot [$ymin => 0] _linear_lut; // map an image though the lineariser linear x = hist_map linearising_lut.value x, mode == 0 || mode == 1 = x; // map the chart measurements though the lineariser _camera' = (to_matrix @ linear @ to_image) _camera; // solve for RGB -> XYZ // normalise: the 2nd row is what makes Y, so divide by that to // get Y in 0-1. _pinv = (transpose _camera' * _camera') ** -1; _full_M = transpose (_pinv * (transpose _camera' * _true_XYZ)); M = _full_M / scale; scale = sum _full_M.value?1; // now turn the camera to LAB and calculate dE76 _camera'' = (to_matrix @ colour_transform Image_type.XYZ Image_type.LAB @ recomb M @ multiply scale @ to_image) _camera'; _dEs = map abs_vec (_camera'' - _true_Lab).value; avg_dE76 = mean _dEs; _max_dE = foldr max_pair 0 _dEs; _worst = index (equal _max_dE) _dEs; worst_patch = name _worst ++ " (patch " ++ print (_worst + 1) ++ ", " ++ print _max_dE ++ " dE)" { name i = macbeth_names?i, i >= 0 && i < len macbeth_names = "Unknown"; } // normalise brightness ... in linear mode, we optionally don't // set the brightness from the Macbeth chart norm x = x * scale, mode != 3 = x; // convert RGB camera to Lab _result = (Image @ colour_transform Image_type.XYZ Image_type.LAB @ norm @ recomb M @ cast_float @ linear) image.value; } } Apply_calib_item = class Menuaction "_Apply Colour Calibration" "apply an RGB -> LAB transform to an image" { action a b = class (map_binary process a b) { process a b = result, is_instanceof calib_name calib && is_Image image = error (_ "bad arguments to " ++ "Calibrate_image") { // the name of the calib object we need calib_name = "Tasks_capture_item.Find_calib_item.action"; // get the Calibrate_chart arg first [image, calib] = sortc (const (is_instanceof calib_name)) [a, b]; result = (Image @ colour_transform Image_type.XYZ Image_type.LAB @ calib.norm @ recomb calib.M @ cast_float @ calib.linear) image.value; } } } sep4 = Menuseparator; Graph_hist_item = Hist_find_item; Graph_bands_item = class Menuaction "Plot _Bands" "show image bands as a graph" { action x = class _result { _vislevel = 3; style = Option_enum "Style" Plot_style.names "Line"; auto = Toggle "Auto Range" true; ymin = Expression "Y range minimum" 0; ymax = Expression "Y range maximum" 1; _result = Plot options (to_image (bands (image x))).value { options = [$style => style.value] ++ if auto then [] else [$ymin => ymin.expr, $ymax => ymax.expr]; // try to make something image-like from it image x = extract_area x.left x.top 1 1 x.image, is_Mark x = get_image x, has_image x = get_image (to_image x); // get as [[1],[2],[3]] bands x = transpose [map mean (bandsplit x)]; } } } } Tasks_mosaic_item = class Menupullright "_Mosaic" "build image mosaics" { /* Check and group a point list by image. */ mosaic_sort_test l = error "mosaic: not all points", !is_listof is_Mark l = error "mosaic: points not on two images", !is_list_len 2 images = error "mosaic: images do not match in format and coding", !all_equal (map get_format l) || !all_equal (map get_coding l) = error "mosaic: not same number of points on each image", !foldr1 equal (map len l') = l' { // test for all elements of a list equal all_equal l = all (map (equal (hd l)) (tl l)); // all the different images images = mkset pointer_equal (map get_image l); // find all points defined on image test_image image p = (get_image p) === image; find l image = filter (test_image image) l; // group point list by image l' = map (find l) images; } /* Sort a point group to get right before left, and within each group to * get above before below. */ mosaic_sort_lr l = l'' { // sort to get upper point first above a b = a.top < b.top; l' = map (sortc above) l; // sort to get right group before left group right a b = a?0.left > b?0.left; l'' = sortc right l'; } /* Sort a point group to get top before bottom, and within each group to * get left before right. */ mosaic_sort_tb l = l'' { // sort to get upper point first left a b = a.left < b.left; l' = map (sortc left) l; // sort to get right group before left group below a b = a?0.top > b?0.top; l'' = sortc below l'; } /* Put 'em together! Group by image, sort vertically (or horizontally) with * one of the above, transpose to get pairs matched up, and flatten again. */ mosaic_sort fn = concat @ transpose @ fn @ mosaic_sort_test; Mosaic_1point_item = class Menupullright "_One Point" "join two images with a single tie point" { check_ab_args a b = [ [a, "a", check_Mark], [b, "b", check_Mark] ]; // shortcut to prefs prefs = Workspaces.Preferences; search_area = prefs.MOSAIC_WINDOW_SIZE; object_size = prefs.MOSAIC_OBJECT_SIZE; blend_width_widget = Scale "Maximum blend width" 0 100 prefs.MOSAIC_MAX_BLEND_WIDTH; refine_widget = Toggle "Refine selected tie-points" prefs.MOSAIC_REFINE; lr_mos _refine a b = class Image _result { _check_args = check_ab_args a b; bw = blend_width_widget; refine = _refine; _result = im_lrmosaic a'.image.value b'.image.value 0 a'.left a'.top b'.left b'.top (object_size / 2) (search_area / 2) 0 bw.value, refine = im_lrmerge a'.image.value b'.image.value (b'.left - a'.left) (b'.top - a'.top) bw.value { [a', b'] = mosaic_sort mosaic_sort_lr [a, b]; } } tb_mos _refine a b = class Image _result { _check_args = check_ab_args a b; bw = blend_width_widget; refine = _refine; _result = im_tbmosaic a'.image.value b'.image.value 0 a'.left a'.top b'.left b'.top (object_size / 2) (search_area / 2) 0 bw.value, refine = im_tbmerge a'.image.value b'.image.value (b'.left - a'.left) (b'.top - a'.top) bw.value { [a', b'] = mosaic_sort mosaic_sort_tb [a, b]; } } Left_right_item = class Menuaction "_Left to Right" "join two images left-right with a single tie point" { action a b = lr_mos refine_widget a b; } Top_bottom_item = class Menuaction "_Top to Bottom" "join two images top-bottom with a single tie point" { action a b = tb_mos refine_widget a b; } sep1 = Menuseparator; Left_right_manual_item = class Menuaction "Manual L_eft to Right" "join left-right, no auto-adjust of tie points" { action a b = lr_mos false a b; } Top_bottom_manual_item = class Menuaction "Manual T_op to Bottom" "join top-bottom, no auto-adjust of tie points" { action a b = tb_mos false a b; } } Mosaic_2point_item = class Menupullright "_Two Point" "join two images with two tie points" { check_abcd_args a b c d = [ [a, "a", check_Mark], [b, "b", check_Mark], [c, "c", check_Mark], [d, "d", check_Mark] ]; // shortcut to prefs prefs = Workspaces.Preferences; search_area = prefs.MOSAIC_WINDOW_SIZE; object_size = prefs.MOSAIC_OBJECT_SIZE; blend_width_widget = Scale "Maximum blend width" 0 100 prefs.MOSAIC_MAX_BLEND_WIDTH; refine_widget = Toggle "Refine selected tie-points" prefs.MOSAIC_REFINE; Left_right_item = class Menuaction "_Left to Right" "join two images left-right with a pair of tie points" { action a b c d = class Image _result { _check_args = check_abcd_args a b c d; bw = blend_width_widget; refine = refine_widget; _result = im_lrmosaic1 a'.image.value b'.image.value 0 a'.left a'.top b'.left b'.top c'.left c'.top d'.left d'.top (object_size / 2) (search_area / 2) 0 bw.value, refine = im_lrmerge1 a'.image.value b'.image.value a'.left a'.top b'.left b'.top c'.left c'.top d'.left d'.top bw.value { [a', b', c', d'] = mosaic_sort mosaic_sort_lr [a, b, c, d]; } } } Top_bottom_item = class Menuaction "_Top to Bottom" "join two images top-bottom with a pair of tie points" { action a b c d = class Image _result { _check_args = check_abcd_args a b c d; bw = blend_width_widget; refine = refine_widget; _result = im_tbmosaic1 a'.image.value b'.image.value 0 a'.left a'.top b'.left b'.top c'.left c'.top d'.left d'.top (object_size / 2) (search_area / 2) 0 bw.value, refine = im_tbmerge1 a'.image.value b'.image.value a'.left a'.top b'.left b'.top c'.left c'.top d'.left d'.top bw.value { [a', b', c', d'] = mosaic_sort mosaic_sort_tb [a, b, c, d]; } } } } sep1 = Menuseparator; Balance_item = class Menuaction "Mosaic _Balance" "disassemble mosaic, scale brightness to match, reassemble" { action x = map_unary balance x { balance x = oo_unary_function balance_op x, is_class x = im_global_balancef x Workspaces.Preferences.MOSAIC_BALANCE_GAMMA, is_image x = error (_ "bad arguments to " ++ "balance") { balance_op = Operator "balance" balance Operator_type.COMPOUND_REWRAP false; } } } //////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// Manual_balance_item = class Menupullright "Manual B_alance" "balance tonality of user defined areas" { prefs = Workspaces.Preferences; //////////////////////////////////////////////////////////////////////////////////// Balance_find_item = class Menuaction "_Find Values" "calculates values required to scale and offset balance user defined areas in a given image" /* Outputs a matrix of scale and offset values. Eg. Values required to balance the secondary * structure in an X-ray image. Takes an X-ray image an 8-bit control mask and a list of * 8-bit reference masks, where the masks are white on a black background. */ { action im_in m_control m_group = class Matrix values{ _vislevel = 1; _control_im = if m_control then im_in else 0; _control_meanmax = so_meanmax _control_im; _group_check = is_Group m_group; _m_list = m_group.value, _group_check = m_group; process m_current mat_in = mat_out {so_values = so_calculate _control_meanmax im_in m_current; mat_out = join [so_values] mat_in;} values = (foldr process [] _m_list); } } //////////////////////////////////////////////////////////////////////////////////// Balance_check_item = class Menuaction "_Check Values" "allows calculated set of scale and offset values to be checked and adjusted if required" /* Outputs adjusted matrix of scale and offset values and scale and offset image maps. * Eg. Check values required to balance the secondary structure in an X-ray image. * Takes an X-ray image an 8-bit control mask and a list of 8-bit reference masks, * where the masks are white on a black background. */ { action im_in m_matrix m_group = class Image value { _vislevel = 3; blur = Scale "Blur" 1 10 1; _blur = (blur.value/2 + 0.5), blur.value > 1 = 1; _group_check = is_Group m_group; _m_list = m_group.value, _group_check = m_group; adjust = Matrix_rec mat_a { no_masks = len _m_list; mat_a = replicate no_masks [0, 0]; } // Apply the user defined adjustments to the inputted matrix of scale and offset values _adjusted = map2 fn_adjust m_matrix.value adjust.value; fn_adjust a b = [(a?0 + b?0), (a?1 + (a?1 * b?1))]; _scaled_ims = map (fn_so_apply im_in) _adjusted; fn_so_apply im so = map_unary adj im {adj im = im * (so?0) + (so?1);} _im_pairs = zip2 _m_list _scaled_ims; // Prepare black images as starting point. //////////// _blank = image_new (_m_list?0).width (_m_list?0).height 1 6 Image_coding.NOCODING 1 0 0 0; _pair_start = [(_blank + 1), _blank]; Build = Toggle "Build Scale and Offset Correction Images" false; Output = class { _vislevel = 1; scale_im = _build?0; offset_im = _build?1; so_values = Matrix _adjusted; _build = [Image so_images?0, Image so_images?1], Build = ["Scale image not built.", "Offset image not built."] { m_list' = transpose [_m_list]; m_all = map2 join m_list' _adjusted; so_images = foldr process_2 _pair_start m_all; } } value = (foldr process_1 im_in_b _im_pairs).value {im_in_b = map_unary cast_float im_in;} process_1 m_current im_start = im_out { bl_mask = convsep (matrix_blur _blur) (get_image m_current?0); blended_im = im_blend bl_mask (m_current?1).value im_start.value; im_out = Image (clip2fmt im_start.format blended_im); } // Process for building scale and offset image. process_2 current p_start = p_out { im_s = if ((current?0) > 128) then current?1 else _blank; im_o = if ((current?0) > 128) then current?2 else _blank; im_s' = convsep (matrix_blur _blur) (im_s != 0); im_o' = convsep (matrix_blur _blur) (im_o != 0); im_s'' = im_blend im_s'.value im_s.value p_start?0; im_o'' = im_blend im_o'.value im_o.value p_start?1; p_out = [im_s'', im_o'']; } } } //////////////////////////////////////////////////////////////////////////////////// Balance_apply_item = class Menuaction "_Apply Values" "apply scale and offset corrections, defined as image maps, to a given image" /* Outputs the balanced image. Eg. Balance the secondary structure in an X-ray image. Takes an * X-ray image an 32-bit float scale image and a 32-bit offset image. */ { action im_in scale_im offset_im = class Image value { _vislevel = 1; xfactor = im_in.width/scale_im.width; yfactor = im_in.height/scale_im.height; _scale_im = resize Kernel_linear xfactor yfactor scale_im; _offset_im = resize Kernel_linear xfactor yfactor offset_im; value = get_image ( clip2fmt im_in.format ( ( im_in * _scale_im ) + _offset_im ) ); } } } Tilt_item = Filter_tilt_item; sep2 = Menuseparator; Rebuild_item = class Menuaction "_Rebuild" "disassemble mosaic, substitute image files and reassemble" { action x = class _result { _vislevel = 3; old = String "In each filename, replace" "foo"; new = String "With" "bar"; _result = map_unary remosaic x { remosaic image = Image (im_remosaic image.value old.value new.value); } } } sep3 = Menuseparator; Clone_area_item = class Menuaction "_Clone Area" "replace dark or light section of im1 with pixels from im2" { action im1 im2 = class _result { _check_args = [ [im1, "im1", check_Image], [im2, "im2", check_Image] ]; _vislevel = 3; /* Region on first image placed in the top left hand corner, * positioned and size relative to the height and width of im1. */ r1 = Region_relative im1 0.05 0.05 0.05 0.05; /* Mark on second image placed in the top left hand corner, * positioned relative to the height and width of im2. Used to * define _r2, the region from which the section of image is cloned * from. */ p2 = Mark_relative im2 0.05 0.05; _r2 = Region im2 p2.left p2.top r1.width r1.height; mask = [r1 <= Options.sc, r1 >= Options.sc]?(Options.replace); Options = class { _vislevel = 3; pause = Toggle "Pause process" true; /* Option toggle used to define whether the user is * replacing a dark or a light area. */ replace = Option "Replace" [ "A Dark Area", "A Light Area" ] 1; // Used to select the area to be replaced. sc = Scale "Scale cutoff" 0.01 mx (mx / 2) {mx = Image_format.maxval im1.format;} //Allows replacement with scale&offset balanced gaussian noise. balance = Toggle "Balance cloned data to match surroundings." true; //Allows replacement with scale&offset balanced //gaussian noise. process = Toggle "Replace area with Gaussian noise." false; } _result = im1, Options.pause = Image (im_insert im1.value patch r1.left r1.top) { r2 = Region im2 p2.left p2.top r1.width r1.height; ref_meanmax = so_meanmax (if mask then 0 else r1); mask8 = Matrix_mor [[255, 255, 255], [255, 255, 255], [255, 255, 255]]; mask_a = map_unary (dilate mask8) mask; mask_b = convsep (matrix_blur 2) mask_a; patch = so_balance ref_meanmax r1 r2 mask_b Options.process, Options.balance = so_balance ref_meanmax r1 r2 mask_b Options.process, Options.process = im_blend (get_image mask_b) (get_image r2) (get_image r1); } } } } Tasks_frame_item = Frame_item; Tasks_print_item = class Menupullright "_Print" "useful stuff for image output" { Rotate_item = Image_transform_item.Rotate_item; Flip_item = Image_transform_item.Flip_item; Resize_item = Image_transform_item.Resize_item; Tone_item = Image_levels_item.Tone_item; Sharpen_item = class Menuaction "_Sharpen" "unsharp filter tuned for typical inkjet printers" { action x = class _result { _vislevel = 3; target_dpi = Option "Sharpen for print at" [ "400 dpi", "300 dpi", "150 dpi", "75 dpi" ] 1; _result = map_unary process x { process image = sharpen params?0 params?1 params?2 params?3 params?4 params?5 (colour_transform_to Image_type.LABQ image) { // sharpen params for various dpi // just change the size of the area we search param_table = [ [7, 2.5, 40, 20, 0.5, 1.5], [5, 2.5, 40, 20, 0.5, 1.5], [3, 2.5, 40, 20, 0.5, 1.5], [11, 2.5, 40, 20, 0.5, 1.5] ]; params = param_table?target_dpi; } } } } sep1 = Menuseparator; Temp_item = Colour_temperature_item; ICC_item = Colour_icc_item; } nip2-8.7.0/share/nip2/compat/8.6/_types.def0000644000175000017500000007526713330327312015070 00000000000000/* A list of things. Do automatic iteration of unary and binary operators on * us. * List [1, 2] + [2, 3] -> List [3, 5] * hd (List [2, 3]) -> 2 * List [] == [] -> true */ List value = class _Object { _check_args = [ [value, "value", check_list] ]; // methods oo_binary_table op x = [ [apply2 op value x', op.op_name == "subscript" || op.op_name == "subscript'" || op.op_name == "equal" || op.op_name == "equal'"], [this.List (apply2 op value x'), op.op_name == "join" || op.op_name == "join'"], [this.List (map2 (apply2 op) value x'), is_list x'], [this.List (map (apply2 op' x) value), true] ] ++ super.oo_binary_table op x { op' = oo_converse op; // strip the List wrapper, if any x' = x.value, is_List x = x; apply2 op x1 x2 = oo_binary_function op x1 x2, is_class x1 = oo_binary'_function op x1 x2, is_class x2 = op.fn x1 x2; }; oo_unary_table op = [ [apply value, op.op_name == "hd" || op.op_name == "tl"], [this.List (map apply value), true] ] ++ super.oo_unary_table op { apply x = oo_unary_function op x, is_class x = op.fn x; } } /* A group of things. Loop the operation over the group. */ Group value = class _Object { _check_args = [ [value, "value", check_list] ]; // methods oo_binary_table op x = [ // if_then_else is really a trinary operator [map_trinary ite this x?0 x?1, op.op_name == "if_then_else"], [map_binary op.fn this x, is_Group x], [map_unary (\a op.fn a x) this, true] ] ++ super.oo_binary_table op x; oo_unary_table op = [ [map_unary op.fn this, true] ] ++ super.oo_unary_table op; // we can't call map_trinary directly, since it uses Group and we // don't support mutually recursive top-level functions :-( // copy-paste it here, keep in sync with the version in _stdenv map_nary fn args = fn args, groups == [] = Group (map process [0, 1 .. shortest - 1]) { groups = filter is_Group args; shortest = foldr1 min_pair (map (len @ get_value) groups); process n = NULL, any (map (is_noval n) args) = map_nary fn (map (extract n) args) { extract n arg = arg.value?n, is_Group arg = arg; is_noval n arg = is_Group arg && arg.value?n == NULL; } } // need ite as a true trinary ite a b c = if a then b else c; map_unary fn a = map_nary (list_1ary fn) [a]; map_binary fn a b = map_nary (list_2ary fn) [a, b]; map_trinary fn a b c = map_nary (list_3ary fn) [a, b, c]; } /* Single real number ... eg slider. */ Real value = class _Object { _check_args = [ [value, "value", check_real] ]; // methods oo_binary_table op x = [ [this.Real (op.fn this.value x.value), is_Real x && op.type == Operator_type.ARITHMETIC], [this.Real (op.fn this.value x), is_real x && op.type == Operator_type.ARITHMETIC], [op.fn this.value x.value, is_Real x && op.type == Operator_type.RELATIONAL], [op.fn this.value x, !is_class x] ] ++ super.oo_binary_table op x; oo_unary_table op = [ [this.Real (op.fn this.value), op.type == Operator_type.ARITHMETIC], [op.fn this.value, true] ] ++ super.oo_unary_table op; } /* Single bool ... eg Toggle. */ Bool value = class _Object { _check_args = [ [value, "value", check_bool] ]; // methods oo_binary_table op x = [ [op.fn this.value x, op.op_name == "if_then_else"], [this.Bool (op.fn this.value x.value), is_Bool x], [this.Bool (op.fn this.value x), is_bool x] ] ++ super.oo_binary_table op x; oo_unary_table op = [ [this.Bool (op.fn this.value), op.type == Operator_type.ARITHMETIC || op.type == Operator_type.RELATIONAL], [op.fn this.value, true] ] ++ super.oo_unary_table op; } /* An editable string. */ String caption value = class _Object { _check_args = [ [caption, "caption", check_string], [value, "value", check_string] ]; } /* An editable real number. */ Number caption value = class scope.Real value { _check_args = [ [caption, "caption", check_string] ]; Real x = this.Number caption x; } /* An editable expression. */ Expression caption expr = class (if is_class expr then expr else _Object) { _check_args = [ [caption, "caption", check_string], [expr, "expr", check_any] ]; } /* A ticking clock. */ Clock interval value = class scope.Real value { _check_args = [ [interval, "interval", check_real] ]; Real x = this.Clock interval x; } /* An editable filename. */ Pathname caption value = class _Object { _check_args = [ [caption, "caption", check_string], [value, "value", check_string] ]; } /* An editable fontname. */ Fontname caption value = class _Object { _check_args = [ [caption, "caption", check_string], [value, "value", check_string] ]; } /* Vector type ... just a finite list of real. Handy for wrapping an * argument to eg. im_lintra_vec. Make it behave like a single pixel image. */ Vector value = class _Object { _check_args = [ [value, "value", check_real_list] ]; bands = len value; // methods oo_binary_table op x = [ // Vector ++ Vector means bandwise join [this.Vector (op.fn this.value x.value), is_Vector x && (op.op_name == "join" || op.op_name == "join'")], [this.Vector (op.fn this.value [get_number x]), has_number x && (op.op_name == "join" || op.op_name == "join'")], // Vector ? number means extract element [op.fn this.value (get_real x), has_real x && (op.op_name == "subscript" || op.op_name == "subscript'")], // extra check for lengths equal [this.Vector (map_binaryl op.fn this.value x.value), is_Vector x && len value == len x.value && op.type == Operator_type.ARITHMETIC], [this.Vector (map_binaryl op.fn this.value (get_real x)), has_real x && op.type == Operator_type.ARITHMETIC], // need extra length check [this.Vector (map bool_to_real (map_binaryl op.fn this.value x.value)), is_Vector x && len value == len x.value && op.type == Operator_type.RELATIONAL], [this.Vector (map bool_to_real (map_binaryl op.fn this.value (get_real x))), has_real x && op.type == Operator_type.RELATIONAL], [this.Vector (op.fn this.value x.value), is_Vector x && len value == len x.value && op.type == Operator_type.COMPOUND_REWRAP], [x.Image (vec op'.op_name x.value value), is_Image x], [vec op'.op_name x value, is_image x], [op.fn this.value x, is_real x] ] ++ super.oo_binary_table op x { op' = oo_converse op; }; oo_unary_table op = [ [this.Vector (map_unaryl op.fn this.value), op.type == Operator_type.ARITHMETIC], [this.Vector (map bool_to_real (map_unaryl op.fn this.value)), op.type == Operator_type.RELATIONAL], [this.Vector (op.fn this.value), op.type == Operator_type.COMPOUND_REWRAP], [op.fn this.value, true] ] ++ super.oo_unary_table op; // turn an ip bool (or a number, for Vector) into VIPSs 255/0 bool_to_real x = 255, is_bool x && x = 255, is_number x && x != 0 = 0; } /* A rectangular array of real. */ Matrix_base value = class _Object { _check_args = [ [value, "value", check_matrix] ]; // calculate these from value width = len value?0; height = len value; // extract a rectanguar area extract left top width height = this.Matrix_base ((map (take width) @ map (drop left) @ take height @ drop top) value); // methods oo_binary_table op x = [ // mat multiply is special [this.Matrix_base mul.value, is_Matrix x && op.op_name == "multiply"], [this.Matrix_base mul'.value, is_Matrix x && op.op_name == "multiply'"], // mat divide is also special [this.Matrix_base div.value, is_Matrix x && op.op_name == "divide"], [this.Matrix_base div'.value, is_Matrix x && op.op_name == "divide'"], // power -1 means invert [this.Matrix_base inv.value, is_real x && x == -1 && op.op_name == "power"], [this.Matrix_base sq.value, is_real x && x == 2 && op.op_name == "power"], [error "matrix **-1 and **2 only", op.op_name == "power" || op.op_name == "power'"], // matrix op vector ... treat a vector as a 1 row matrix [this.Matrix_base (map (map_binaryl op'.fn x.value) this.value), is_Vector x && op.type == Operator_type.ARITHMETIC], [this.Matrix_base (map_binaryl op.fn this.value x.value), (is_Matrix x || is_Real x) && op.type == Operator_type.ARITHMETIC], [this.Matrix_base (map_binaryl op.fn this.value x), is_real x && op.type == Operator_type.ARITHMETIC], // compound ... don't do iteration [this.Matrix_base (op.fn this.value x.value), (is_Matrix x || is_Real x || is_Vector x) && op.type == Operator_type.COMPOUND_REWRAP], [op.fn this.value x, op.type == Operator_type.COMPOUND] ] ++ super.oo_binary_table op x { mul = im_matmul this x; mul' = im_matmul x this; div = im_matmul this (im_matinv x); div' = im_matmul x (im_matinv this); inv = im_matinv this; sq = im_matmul this this; op' = oo_converse op; } oo_unary_table op = [ [this.Matrix_base (map_unaryl op.fn this.value), op.type == Operator_type.ARITHMETIC], [this.Matrix_base (op.fn this.value), op.type == Operator_type.COMPOUND_REWRAP], [op.fn this.value, true] ] ++ super.oo_unary_table op; } /* How to display a matrix: text, sliders, toggles, or text plus scale/offset. */ Matrix_display = class { text = 0; slider = 1; toggle = 2; text_scale_offset = 3; is_display = member [text, slider, toggle, text_scale_offset]; } /* A matrix as VIPS sees them ... add scale, offset and filename. For nip, add * a display type as well to control how the widget renders. */ Matrix_vips value scale offset filename display = class scope.Matrix_base value { _check_args = [ [scale, "scale", check_real], [offset, "offset", check_real], [filename, "filename", check_string], [display, "display", check_matrix_display] ]; Matrix_base x = this.Matrix_vips x scale offset filename display; } /* A plain 'ol matrix which can be passed to VIPS. */ Matrix value = class Matrix_vips value 1 0 "" Matrix_display.text {} /* Specialised constructors ... for convolutions, recombinations and * morphologies. */ Matrix_con scale offset value = class Matrix_vips value scale offset "" Matrix_display.text_scale_offset {}; Matrix_rec value = class Matrix_vips value 1 0 "" Matrix_display.slider {}; Matrix_mor value = class Matrix_vips value 1 0 "" Matrix_display.toggle {}; Matrix_file filename = (im_read_dmask @ expand @ search) filename; /* A CIE colour ... a triple, plus a format (eg XYZ, Lab etc) */ Colour colour_space value = class scope.Vector value { _check_args = [ [colour_space, "colour_space", check_colour_space] ]; _check_all = [ [is_list_len 3 value, "len value == 3"] ]; Vector x = this.Colour colour_space x; // make a colour-ish thing from an image // back to Colour if we have another 3 band image // to a vector if bands > 1 // to a number otherwise itoc im = this.Colour nip_type (to_matrix im).value?0, bands == 3 = scope.Vector (map mean (bandsplit im)), bands > 1 = mean im { type = get_header "Type" im; bands = get_header "Bands" im; nip_type = Image_type.colour_spaces.lookup 1 0 type; } // methods oo_binary_table op x = [ [itoc (op.fn ((float) (to_image this).value) ((float) (to_image x).value)), // here REWRAP means go via image op.type == Operator_type.COMPOUND_REWRAP] ] ++ super.oo_binary_table op x; oo_unary_table op = [ [itoc (op.fn ((float) (to_image this).value)), op.type == Operator_type.COMPOUND_REWRAP] ] ++ super.oo_unary_table op; } // a subclass with widgets for picking a space and value Colour_picker default_colour default_value = class Colour space.item colour.expr { _vislevel = 3; space = Option_enum "Colour space" Image_type.colour_spaces default_colour; colour = Expression "Colour value" default_value; Colour_edit colour_space value = Colour_picker colour_space value; } /* Base scale type. */ Scale caption from to value = class scope.Real value { _check_args = [ [caption, "caption", check_string], [from, "from", check_real], [to, "to", check_real] ]; _check_all = [ [from < to, "from < to"] ]; Real x = this.Scale caption from to x; // methods oo_binary_table op x = [ [this.Scale caption (op.fn this.from x.from) (op.fn this.to x.to) (op.fn this.value x.value), is_Scale x && op.type == Operator_type.ARITHMETIC], [this.Scale caption (op.fn this.from x) (op.fn this.to x) (op.fn this.value x), is_real x && op.type == Operator_type.ARITHMETIC] ] ++ super.oo_binary_table op x; } /* Base toggle type. */ Toggle caption value = class scope.Bool value { _check_args = [ [caption, "caption", check_string], [value, "value", check_bool] ]; Bool x = this.Toggle caption x; } /* Base option type. */ Option caption labels value = class scope.Real value { _check_args = [ [caption, "caption", check_string], [labels, "labels", check_string_list], [value, "value", check_uint] ]; } /* An option whose value is a string rather than a number. */ Option_string caption labels item = class Option caption labels (index (equal item) labels) { Option_edit caption labels value = this.Option_string caption labels (labels?value); } /* Make an option from an enum. */ Option_enum caption enum item = class Option_string caption enum.names item { // corresponding thing value_thing = enum.get_thing item; Option_edit caption labels value = this.Option_enum caption enum (enum.names?value); } /* A rectangle. width and height can be -ve. */ Rect left top width height = class _Object { _check_args = [ [left, "left", check_real], [top, "top", check_real], [width, "width", check_real], [height, "height", check_real] ]; // derived right = left + width; bottom = top + height; oo_binary_table op x = [ [equal x, is_Rect x && (op.op_name == "equal" || op.op_name == "equal'")], [!equal x, is_Rect x && (op.op_name == "not_equal" || op.op_name == "not_equal'")], // binops with a complex are the same as (comp op comp) [oo_binary_function op this (Rect (re x) (im x) 0 0), is_complex x], // all others are just pairwise [this.Rect left' top' width' height', is_Rect x && op.type == Operator_type.ARITHMETIC], [this.Rect left'' top'' width'' height'', has_number x && op.type == Operator_type.ARITHMETIC] ] ++ super.oo_binary_table op x { left' = op.fn left x.left; top' = op.fn top x.top; width' = op.fn width x.width; height' = op.fn height x.height; left'' = op.fn left x'; top'' = op.fn top x'; width'' = op.fn width x'; height'' = op.fn height x'; x' = get_number x; } oo_unary_table op = [ // arithmetic uops just map [this.Rect left' top' width' height', op.type == Operator_type.ARITHMETIC], // compound uops are just like ops on complex // do (width, height) so thing like abs(Arrow) work as you'd expect [op.fn (width, height), op.type == Operator_type.COMPOUND] ] ++ super.oo_unary_table op { left' = op.fn left; top' = op.fn top; width' = op.fn width; height' = op.fn height; } // empty? ie. contains no pixels is_empty = width == 0 || height == 0; // normalised version, ie. make width/height +ve and flip the origin nleft = left + width, width < 0 = left; ntop = top + height, height < 0 = top; nwidth = abs width; nheight = abs height; nright = nleft + nwidth; nbottom = ntop + nheight; equal x = left == x.left && top == x.top && width == x.width && height == x.height; // contains a point? includes_point x y = nleft <= x && x <= nright && ntop <= y && y <= nbottom; // contains a rect? just test top left and bottom right points includes_rect r = includes_point r.nleft r.ntop && includes_point r.nright r.nbottom; // bounding box of two rects // if either is empty, can just return the other union r = r, is_empty = this, r.is_empty = Rect left' top' width' height' { left' = min_pair nleft r.nleft; top' = min_pair ntop r.ntop; width' = max_pair nright r.nright - left'; height' = max_pair nbottom r.nbottom - top'; } // intersection of two rects ... empty rect if no intersection intersect r = Rect left' top' width'' height'' { left' = max_pair nleft r.nleft; top' = max_pair ntop r.ntop; width' = min_pair nright r.nright - left'; height' = min_pair nbottom r.nbottom - top'; width'' = width', width > 0 = 0; height'' = height', height > 0 = 0; } // expand/collapse by n pixels margin_adjust n = Rect (left - n) (top - n) (width + 2 * n) (height + 2 * n); } /* Values for Compression field in image. */ Image_compression = class { NONE = 0; NO_COMPRESSION = 0; TCSF_COMPRESSION = 1; JPEG_COMPRESSION = 2; LABPACK_COMPRESSED = 3; RGB_COMPRESSED = 4; LUM_COMPRESSED = 5; } /* Values for Coding field in image. */ Image_coding = class { NONE = 0; NOCODING = 0; COLQUANT = 1; LABPACK = 2; RAD = 6; } /* Values for BandFmt field in image. */ Image_format = class { DPCOMPLEX = 9; DOUBLE = 8; COMPLEX = 7; FLOAT = 6; INT = 5; UINT = 4; SHORT = 3; USHORT = 2; CHAR = 1; UCHAR = 0; NOTSET = -1; maxval fmt = [ 255, // UCHAR 127, // CHAR 65535, // USHORT 32767, // SHORT 4294967295, // UINT 2147483647, // INT 255, // FLOAT 255, // COMPLEX 255, // DOUBLE 255 // DPCOMPLEX ] ? fmt, fmt >= 0 && fmt <= DPCOMPLEX = error (_ "bad value for BandFmt"); } /* A lookup table. */ Table value = class _Object { _check_args = [ [value, "value", check_rectangular] ]; /* Extract a column. */ column n = map (extract n) value; /* present col x: is there an x in column col */ present col x = member (column col) x; /* Look on column from, return matching item in column to. */ lookup from to x = value?n?to, n >= 0 = error (_ "item" ++ " " ++ print x ++ " " ++ _ "not in table") { n = index (equal x) (column from); } } /* A two column lookup table with the first column a string and the second a * thing. Used for representing various enums. Option_enum makes a selector * from one of these. */ Enum value = class Table value { _check_args = [ [value, "value", check_enum] ] { check_enum = [is_enum, _ "is [[char, *]]"]; is_enum x = is_rectangular x && is_listof is_string (map (extract 0) x); } // handy ... all the names and things as lists names = this.column 0; things = this.column 1; // is a legal name or thing has_name x = this.present 1 x; has_thing x = this.present 0 x; // map things to strings and back get_name x = this.lookup 1 0 x; get_thing x = this.lookup 0 1 x; } /* Type field. */ Image_type = class { MULTIBAND = 0; B_W = 1; HISTOGRAM = 10; XYZ = 12; LAB = 13; CMYK = 15; LABQ = 16; RGB = 17; UCS = 18; LCH = 19; LABS = 21; sRGB = 22; YXY = 23; FOURIER = 24; RGB16 = 25; GREY16 = 26; ARRAY = 27; scRGB = 28; /* Table to get names <-> numbers. */ type_names = Enum [ $MULTIBAND => MULTIBAND, $B_W => B_W, $HISTOGRAM => HISTOGRAM, $XYZ => XYZ, $LAB => LAB, $CMYK => CMYK, $LABQ => LABQ, $RGB => RGB, $UCS => UCS, $LCH => LCH, $LABS => LABS, $sRGB => sRGB, $YXY => YXY, $FOURIER => FOURIER, $RGB16 => RGB16, $GREY16 => GREY16, $ARRAY => ARRAY, $scRGB => scRGB ]; /* Table relating nip's colour space names and VIPS's Type numbers. * Options are generated from this, so match the order to the order in * the Colour menu. */ colour_spaces = Enum [ $sRGB => sRGB, $scRGB => scRGB, $Lab => LAB, $LCh => LCH, $XYZ => XYZ, $Yxy => YXY, $UCS => UCS ]; /* A slightly larger table ... the types of colorimetric image we can * have. Add mono, and the S and Q forms of LAB. */ image_colour_spaces = Enum [ $Mono => B_W, $sRGB => sRGB, $scRGB => scRGB, $RGB16 => RGB16, $GREY16 => GREY16, $Lab => LAB, $LabQ => LABQ, $LabS => LABS, $LCh => LCH, $XYZ => XYZ, $Yxy => YXY, $UCS => UCS ]; } /* Base image type. Simple layer over vips_image. */ Image value = class _Object { _check_args = [ [value, "value", check_image] ]; // fields from VIPS header width = get_width value; height = get_height value; bands = get_bands value; format = get_format value; bits = get_bits value; coding = get_coding value; type = get_type value; xres = get_header "Xres" value; yres = get_header "Yres" value; xoffset = get_header "Xoffset" value; yoffset = get_header "Yoffset" value; filename = get_header "filename" value; // convenience ... the area our pixels occupy, as a rect rect = Rect 0 0 width height; // operator overloading // (op Image Vector) done in Vector class oo_binary_table op x = [ // handle image ++ constant here [wrap join_result_image, (has_real x || is_Vector x) && (op.op_name == "join" || op.op_name == "join'")], [wrap ite_result_image, op.op_name == "if_then_else"], [wrap (op.fn this.value (get_image x)), has_image x], [wrap (op.fn this.value (get_number x)), has_number x], // if it's not a class on the RHS, handle here ... just apply and // rewrap [wrap (op.fn this.value x), !is_class x] // all other cases handled by other classes ] ++ super.oo_binary_table op x { // wrap the result with this // x can be a non-image, eg. compare "Image v == []" vs. // "Image v == 12" wrap x = x, op.type == Operator_type.COMPOUND || !is_image x = this.Image x; join_result_image = value ++ new_stuff, op.op_name == "join" = new_stuff ++ value { new_stuff = image_new width height new_bands format coding Image_type.B_W x xoffset yoffset; new_bands = get_bands x, has_bands x = 1; } [then_part, else_part] = x; // get things about our output from inputs in this order objects = [then_part, else_part, this]; // properties of our output image target_bands = get_member_list has_bands get_bands objects; target_type = get_member_list has_type get_type objects; // if one of then/else is an image, get the target format from that // otherwise, let the non-image objects set the target target_format = get_member_list has_format get_format x, has_member_list has_format x = NULL; to_image x = to_image_size width height target_bands target_format x; [then', else'] = map to_image x; ite_result_image = image_set_type target_type (if value then then' else else'); } // FIXME ... yuk ... don't use operator hints, just always rewrap if // we have an image result // forced on us by things like abs: // abs Vector -> real // abs Image -> Image // does not fit well with COMPOUND/whatever scheme oo_unary_table op = [ [this.Image result, is_image result], [result, true] ] ++ super.oo_unary_table op { result = op.fn this.value; } } /* Construct an image from a file. */ Image_file filename = class Image value { _check_args = [ [filename, "filename", check_string] ]; value = vips_image filename; } Region image left top width height = class Image value { _check_args = [ [image, "Image", check_Image], [left, "left", check_real], [top, "top", check_real], [width, "width", check_preal], [height, "height", check_preal] ]; // a rect for our coordinates // region.rect gets the rect for the extracted image region_rect = Rect left top width height; // we need to always succeed ... value is our enclosing image if we're // out of bounds value = extract_area left top width height image.value, image.rect.includes_rect region_rect = image.value; } Area image left top width height = class scope.Region image left top width height { Region image left top width height = this.Area image left top width height; } Arrow image left top width height = class scope.Rect left top width height { _check_args = [ [image, "Image", check_Image], [left, "left", check_real], [top, "top", check_real], [width, "width", check_real], [height, "height", check_real] ]; Rect l t w h = this.Arrow image l t w h; } HGuide image top = class scope.Arrow image image.rect.left top image.width 0 { Arrow image left top width height = this.HGuide image top; } VGuide image left = class scope.Arrow image left image.rect.top 0 image.height { Arrow image left top width height = this.VGuide image left; } Mark image left top = class scope.Arrow image left top 0 0 { Arrow image left top width height = this.Mark image left top; } // convenience functions: ... specify position as [0 .. 1) Region_relative image u v w h = Region image (image.width * u) (image.height * v) (image.width * w) (image.height * h); Area_relative image u v w h = Area image (image.width * u) (image.height * v) (image.width * w) (image.height * h); Arrow_relative image u v w h = Arrow image (image.width * u) (image.height * v) (image.width * w) (image.height * h); VGuide_relative image v = VGuide image (image.height * v); HGuide_relative image u = HGuide image (image.width * u); Mark_relative image u v = Mark image (image.width * u) (image.height * v); Kernel_type = class { NEAREST_NEIGHBOUR = 0; LINEAR = 1; CUBIC = 2; LANCZOS2 = 3; LANCZOS3 = 4; // Should introspect to get the list of interpolators :-( // We can "dir" on VipsInterpolate to get a list of them, but we // can't get i18n'd descriptions until we have more // introspection stuff in nip2. /* Table to map kernel numbers to descriptive strings */ descriptions = [ _ "Nearest neighbour", _ "Linear", _ "Cubic", _ "Lanczos, two lobes", _ "Lanczos, three lobes" ]; /* And to vips enum nicknames. */ types = [ "nearest", "linear", "cubic", "lanczos2", "lanczos3" ]; } Kernel type = class { value = Kernel_type.types?type; } Kernel_linear = Kernel Kernel_type.LINEAR; Kernel_picker default = class Kernel kernel.value { _vislevel = 2; kernel = Option "Kernel" Kernel_type.descriptions default; } Interpolate_type = class { NEAREST_NEIGHBOUR = 0; BILINEAR = 1; BICUBIC = 2; LBB = 3; NOHALO = 4; VSQBS = 5; // Should introspect to get the list of interpolators :-( // We can "dir" on VipsInterpolate to get a list of them, but we // can't get i18n'd descriptions until we have more // introspection stuff in nip2. /* Table to map interpol numbers to descriptive strings */ descriptions = [ _ "Nearest neighbour", _ "Bilinear", _ "Bicubic", _ "Upsize: reduced halo bicubic (LBB)", _ "Upsharp: reduced halo bicubic with edge sharpening (Nohalo)", _ "Upsmooth: quadratic B-splines with jaggy reduction (VSQBS)" ]; /* And to vips type names. */ types = [ "VipsInterpolateNearest", "VipsInterpolateBilinear", "VipsInterpolateBicubic", "VipsInterpolateLbb", "VipsInterpolateNohalo", "VipsInterpolateVsqbs" ]; } Interpolate type options = class { value = vips_object_new Interpolate_type.types?type [] options; } Interpolate_bilinear = Interpolate Interpolate_type.BILINEAR []; Interpolate_picker default = class Interpolate interp.value [] { _vislevel = 2; interp = Option "Interpolation" Interpolate_type.descriptions default; } Render_intent = class { PERCEPTUAL = 0; RELATIVE = 1; SATURATION = 2; ABSOLUTE = 3; /* Table to get names <-> numbers. */ names = Enum [ _ "Perceptual" => PERCEPTUAL, _ "Relative" => RELATIVE, _ "Saturation" => SATURATION, _ "Absolute" => ABSOLUTE ]; } // abstract base class for toolkit menus Menu = class {} // a "----" line in a menu Menuseparator = class Menu {} // abstract base class for items in menus Menuitem label tooltip = class Menu {} Menupullright label tooltip = class Menuitem label tooltip {} Menuaction label tooltip = class Menuitem label tooltip {} /* Plots. */ Plot_style = class { POINT = 0; LINE = 1; SPLINE = 2; BAR = 3; names = Enum [ _ "Point" => POINT, _ "Line" => LINE, _ "Spline" => SPLINE, _ "Bar" => BAR ]; } Plot_format = class { YYYY = 0; XYYY = 1; XYXY = 2; names = Enum [ _ "YYYY" => YYYY, _ "XYYY" => XYXY, _ "XYXY" => XYXY ]; } Plot_type = class { /* Lots of Ys (ie. multiple line plots). */ YYYY = 0; /* First column of matrix is X position, others are Ys (ie. multiple XY * line plots, all with the same Xes). */ XYYY = 1; /* Many independent XY plots. */ XYXY = 2; } /* "options" is a list of ["key", value] pairs. */ Plot options value = class scope.Image value { Image value = this.Plot options value; to_image dpi = extract_bands 0 3 (graph_export_image (to_real dpi) this); } Plot_matrix options value = class Plot options (to_image value).value { } Plot_histogram value = class scope.Plot [] value { } Plot_xy value = class scope.Plot [$format => Plot_format.XYYY] value { } /* A no-value type. Call it NULL for C-alike fun. Used by Group to indicate * empty slots, for example. */ NULL = class _Object { oo_binary_table op x = [ // the only operation we allow is equality .. use pointer equality, // this lets us test a == NULL and a != NULL [this === x, op.type == Operator_type.RELATIONAL && op.op_name == "equal"], [this !== x, op.type == Operator_type.RELATIONAL && op.op_name == "not_equal"] ] ++ super.oo_binary_table op x; } Blend_type = class { CLEAR = 0; SOURCE = 1; OVER = 2; IN = 3; OUT = 4; ATOP = 5; DEST = 6; DEST_OVER = 7; DEST_IN = 8; DEST_OUT = 9; DEST_ATOP = 10; XOR = 11; ADD = 12; SATURATE = 13; MULTIPLY = 14; SCREEN = 15; OVERLAY = 16; DARKEN = 17; LIGHTEN = 18; COLOUR_DODGE = 19; COLOUR_BURN = 20; HARD_LIGHT = 21; SOFT_LIGHT = 22; DIFFERENCE = 23; EXCLUSION = 24; /* Table to map blend numbers to descriptive strings */ descriptions = [ _ "Clear", _ "Source", _ "Over", _ "In", _ "Out", _ "Atop", _ "Dest", _ "Dest over", _ "Dest in", _ "Dest out", _ "Dest atop", _ "Xor", _ "Add", _ "Saturate", _ "Multiply", _ "Screen", _ "Overlay", _ "Darken", _ "Lighten", _ "Colour dodge", _ "Colour burn", _ "Hard light", _ "Soft light", _ "Difference", _ "Exclusion" ]; /* And to vips enum nicknames. */ types = Enum [ $clear => "clear", $source => "source", $over => "over", $in => "in", $out => "out", $atop => "atop", $dest => "dest", $dest_over => "dest_over", $dest_in => "dest_in", $dest_out => "dest_out", $dest_atop => "dest_atop", $xor => "xor", $add => "add", $saturate => "saturate", $multiply => "multiply", $screen => "screen", $overlay => "overlay", $darken => "darken", $lighten => "lighten", $colour_dodge => "colour_dodge", $colour_burn => "colour_burn", $hard_light => "hard_light", $soft_light => "soft_light", $difference => "difference", $exclusion => "exclusion" ]; } Blend type = class { value = Blend_type.types?type; } Blend_over = Blend Blend_type.OVER; Blend_picker default = class Blend blend.value { _vislevel = 2; blend = Option "Blend" Blend_type.descriptions default; } Combine_type = class { MAX = 0; SUM = 1; MIN = 2; enum = Enum [ _ "Maximum" => MAX, _ "Sum" => SUM, _ "Minimum" => MIN ]; } Combine type = class { value = Combine_type.enum.names?type; } Combine_sum = Combine Combine_type.SUM; Combine_picker default = Option "Combine" Combine_type.enum.names default; nip2-8.7.0/share/nip2/compat/8.6/Makefile.am0000644000175000017500000000057713330327371015136 00000000000000startdir = $(pkgdatadir)/compat/8.6 start_DATA = \ Colour.def \ _convert.def \ Filter.def \ _generate.def \ Histogram.def \ Image.def \ _joe_extra.def \ _joe_utilities.def \ _list.def \ _magick.def \ Magick.def \ Math.def \ Matrix.def \ _Object.def \ Object.def \ _predicate.def \ _stdenv.def \ Tasks.def \ _types.def \ Widgets.def EXTRA_DIST = $(start_DATA) nip2-8.7.0/share/nip2/rc/0000755000175000017500000000000013350464160011757 500000000000000nip2-8.7.0/share/nip2/rc/ipgtkrc0000644000175000017500000000341213224651032013261 00000000000000 # style for parent widgets style "parent_style" { bg[NORMAL] = "#887FA3" bg[PRELIGHT] = "#ADA7C8" bg[ACTIVE] = "#887FA3" bg[SELECTED] = "#887FA3" bg[INSENSITIVE] = "#625B81" } # style for child widgets style "child_style" { bg[NORMAL] = "#7590AE" bg[PRELIGHT] = "#9DB8D2" bg[ACTIVE] = "#7590AE" bg[SELECTED] = "#7590AE" bg[INSENSITIVE] = "#4B6983" } # style for selected widgets style "selected_style" { bg[NORMAL] = "#83A67F" bg[PRELIGHT] = "#C5D2C8" bg[ACTIVE] = "#83A67F" bg[SELECTED] = "#83A67F" bg[INSENSITIVE] = "#5D7555" } # style for unselected column headers style "column_style" { bg[NORMAL] = "#C5D2C8" bg[PRELIGHT] = "#C5D2C8" bg[ACTIVE] = "#C5D2C8" bg[SELECTED] = "#C5D2C8" bg[INSENSITIVE] = "#C5D2C8" } # style for widgets with errors in them style "error_style" { bg[NORMAL] = "#C1665A" bg[PRELIGHT] = "#E0B6AF" bg[ACTIVE] = "#C1665A" bg[SELECTED] = "#C1665A" bg[INSENSITIVE] = "#884631" } # style for dirty widgets (need recalculation) style "dirty_style" { bg[NORMAL] = "#E0C39E" bg[PRELIGHT] = "#EFE0CD" bg[ACTIVE] = "#E0C39E" bg[SELECTED] = "#E0C39E" bg[INSENSITIVE] = "#B39169" } # style for captions ... eg. the line of text under the image thumbnails style "caption_style" { bg[NORMAL] = "#EED680" } widget "*parent_widget*" style "parent_style" widget "*child_widget*" style "child_style" widget "*selected_widget*" style "selected_style" widget "*column_widget*" style "column_style" widget "*error_widget*" style "error_style" widget "*dirty_widget*" style "dirty_style" widget "*caption_widget*" style "caption_style" widget "*centre_widget*" style "child_style" widget "*shadow_widget*" style "column_style" # turn this on here ... no one will find this useful thing unless we turn it # on by default gtk-can-change-accels = 1 nip2-8.7.0/share/nip2/rc/Makefile.in0000644000175000017500000003616713350464104013757 00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = share/nip2/rc ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(rcdir)" DATA = $(rc_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BISON = @BISON@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DLLWRAP = @DLLWRAP@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FFTW3_CFLAGS = @FFTW3_CFLAGS@ FFTW3_LIBS = @FFTW3_LIBS@ FGREP = @FGREP@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_LIBS = @GSL_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ IP_CFLAGS = @IP_CFLAGS@ IP_LIBS = @IP_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBGOFFICE_CFLAGS = @LIBGOFFICE_CFLAGS@ LIBGOFFICE_LIBS = @LIBGOFFICE_LIBS@ LIBGSF_CFLAGS = @LIBGSF_CFLAGS@ LIBGSF_LIBS = @LIBGSF_LIBS@ LIBGVC_CFLAGS = @LIBGVC_CFLAGS@ LIBGVC_LIBS = @LIBGVC_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ 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@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ REQUIRED_PACKAGES_CFLAGS = @REQUIRED_PACKAGES_CFLAGS@ REQUIRED_PACKAGES_LIBS = @REQUIRED_PACKAGES_LIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOP_SRCDIR = @TOP_SRCDIR@ UPDATE_DESKTOP_DATABASE = @UPDATE_DESKTOP_DATABASE@ UPDATE_MIME_DATABASE = @UPDATE_MIME_DATABASE@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XDG_OPEN = @XDG_OPEN@ XGETTEXT = @XGETTEXT@ 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@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ rcdir = $(pkgdatadir)/rc rc_DATA = ipgtkrc EXTRA_DIST = $(rc_DATA) all: all-am .SUFFIXES: $(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) --foreign share/nip2/rc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign share/nip2/rc/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): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-rcDATA: $(rc_DATA) @$(NORMAL_INSTALL) @list='$(rc_DATA)'; test -n "$(rcdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(rcdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(rcdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(rcdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(rcdir)" || exit $$?; \ done uninstall-rcDATA: @$(NORMAL_UNINSTALL) @list='$(rc_DATA)'; test -n "$(rcdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(rcdir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: 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 check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(rcdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-rcDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-rcDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-rcDATA install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags-am uninstall uninstall-am uninstall-rcDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: nip2-8.7.0/share/nip2/rc/Makefile.am0000644000175000017500000000010513224651032013723 00000000000000rcdir = $(pkgdatadir)/rc rc_DATA = ipgtkrc EXTRA_DIST = $(rc_DATA) nip2-8.7.0/share/nip2/Makefile.am0000644000175000017500000000003713224651032013323 00000000000000SUBDIRS = rc data start compat nip2-8.7.0/share/Makefile.am0000644000175000017500000000002013224651032012443 00000000000000SUBDIRS = nip2 nip2-8.7.0/compile0000755000175000017500000001624513350464075010714 00000000000000#! /bin/sh # Wrapper for compilers which do not understand '-c -o'. scriptversion=2012-10-14.11; # UTC # Copyright (C) 1999-2014 Free Software Foundation, Inc. # Written by Tom Tromey . # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . nl=' ' # We need space, tab and new line, in precisely that order. Quoting is # there to prevent tools from complaining about whitespace usage. IFS=" "" $nl" file_conv= # func_file_conv build_file lazy # Convert a $build file to $host form and store it in $file # Currently only supports Windows hosts. If the determined conversion # type is listed in (the comma separated) LAZY, no conversion will # take place. func_file_conv () { file=$1 case $file in / | /[!/]*) # absolute file, and not a UNC file if test -z "$file_conv"; then # lazily determine how to convert abs files case `uname -s` in MINGW*) file_conv=mingw ;; CYGWIN*) file_conv=cygwin ;; *) file_conv=wine ;; esac fi case $file_conv/,$2, in *,$file_conv,*) ;; mingw/*) file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` ;; cygwin/*) file=`cygpath -m "$file" || echo "$file"` ;; wine/*) file=`winepath -w "$file" || echo "$file"` ;; esac ;; esac } # func_cl_dashL linkdir # Make cl look for libraries in LINKDIR func_cl_dashL () { func_file_conv "$1" if test -z "$lib_path"; then lib_path=$file else lib_path="$lib_path;$file" fi linker_opts="$linker_opts -LIBPATH:$file" } # func_cl_dashl library # Do a library search-path lookup for cl func_cl_dashl () { lib=$1 found=no save_IFS=$IFS IFS=';' for dir in $lib_path $LIB do IFS=$save_IFS if $shared && test -f "$dir/$lib.dll.lib"; then found=yes lib=$dir/$lib.dll.lib break fi if test -f "$dir/$lib.lib"; then found=yes lib=$dir/$lib.lib break fi if test -f "$dir/lib$lib.a"; then found=yes lib=$dir/lib$lib.a break fi done IFS=$save_IFS if test "$found" != yes; then lib=$lib.lib fi } # func_cl_wrapper cl arg... # Adjust compile command to suit cl func_cl_wrapper () { # Assume a capable shell lib_path= shared=: linker_opts= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. eat=1 case $2 in *.o | *.[oO][bB][jJ]) func_file_conv "$2" set x "$@" -Fo"$file" shift ;; *) func_file_conv "$2" set x "$@" -Fe"$file" shift ;; esac ;; -I) eat=1 func_file_conv "$2" mingw set x "$@" -I"$file" shift ;; -I*) func_file_conv "${1#-I}" mingw set x "$@" -I"$file" shift ;; -l) eat=1 func_cl_dashl "$2" set x "$@" "$lib" shift ;; -l*) func_cl_dashl "${1#-l}" set x "$@" "$lib" shift ;; -L) eat=1 func_cl_dashL "$2" ;; -L*) func_cl_dashL "${1#-L}" ;; -static) shared=false ;; -Wl,*) arg=${1#-Wl,} save_ifs="$IFS"; IFS=',' for flag in $arg; do IFS="$save_ifs" linker_opts="$linker_opts $flag" done IFS="$save_ifs" ;; -Xlinker) eat=1 linker_opts="$linker_opts $2" ;; -*) set x "$@" "$1" shift ;; *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) func_file_conv "$1" set x "$@" -Tp"$file" shift ;; *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) func_file_conv "$1" mingw set x "$@" "$file" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -n "$linker_opts"; then linker_opts="-link$linker_opts" fi exec "$@" $linker_opts exit 1 } eat= case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: compile [--help] [--version] PROGRAM [ARGS] Wrapper for compilers which do not understand '-c -o'. Remove '-o dest.o' from ARGS, run PROGRAM with the remaining arguments, and rename the output as expected. If you are trying to build a whole package this is not the right script to run: please start by reading the file 'INSTALL'. Report bugs to . EOF exit $? ;; -v | --v*) echo "compile $scriptversion" exit $? ;; cl | *[/\\]cl | cl.exe | *[/\\]cl.exe ) func_cl_wrapper "$@" # Doesn't return... ;; esac ofile= cfile= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. # So we strip '-o arg' only if arg is an object. eat=1 case $2 in *.o | *.obj) ofile=$2 ;; *) set x "$@" -o "$2" shift ;; esac ;; *.c) cfile=$1 set x "$@" "$1" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -z "$ofile" || test -z "$cfile"; then # If no '-o' option was seen then we might have been invoked from a # pattern rule where we don't need one. That is ok -- this is a # normal compilation that the losing compiler can handle. If no # '.c' file was seen then we are probably linking. That is also # ok. exec "$@" fi # Name of file we expect compiler to create. cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` # Create the lock directory. # Note: use '[/\\:.-]' here to ensure that we don't use the same name # that we are using for the .o file. Also, base the name on the expected # object file name, since that is what matters with a parallel build. lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d while true; do if mkdir "$lockdir" >/dev/null 2>&1; then break fi sleep 1 done # FIXME: race condition here if user kills between mkdir and trap. trap "rmdir '$lockdir'; exit 1" 1 2 15 # Run the compile. "$@" ret=$? if test -f "$cofile"; then test "$cofile" = "$ofile" || mv "$cofile" "$ofile" elif test -f "${cofile}bj"; then test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" fi rmdir "$lockdir" exit $ret # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: nip2-8.7.0/m4/0000755000175000017500000000000013350464075007726 500000000000000nip2-8.7.0/m4/glibc21.m40000644000175000017500000000161313350464073011332 00000000000000# glibc21.m4 serial 5 dnl Copyright (C) 2000-2002, 2004, 2008, 2010-2016 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Test for the GNU C Library, version 2.1 or newer, or uClibc. # From Bruno Haible. AC_DEFUN([gl_GLIBC21], [ AC_CACHE_CHECK([whether we are using the GNU C Library >= 2.1 or uClibc], [ac_cv_gnu_library_2_1], [AC_EGREP_CPP([Lucky], [ #include #ifdef __GNU_LIBRARY__ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2) Lucky GNU user #endif #endif #ifdef __UCLIBC__ Lucky user #endif ], [ac_cv_gnu_library_2_1=yes], [ac_cv_gnu_library_2_1=no]) ] ) AC_SUBST([GLIBC21]) GLIBC21="$ac_cv_gnu_library_2_1" ] ) nip2-8.7.0/m4/gettext.m40000644000175000017500000003676313350464073011611 00000000000000# gettext.m4 serial 68 (gettext-0.19.8) dnl Copyright (C) 1995-2014, 2016 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper , 1995-2000. dnl Bruno Haible , 2000-2006, 2008-2010. dnl Macro to add for using GNU gettext. dnl Usage: AM_GNU_GETTEXT([INTLSYMBOL], [NEEDSYMBOL], [INTLDIR]). dnl INTLSYMBOL can be one of 'external', 'no-libtool', 'use-libtool'. The dnl default (if it is not specified or empty) is 'no-libtool'. dnl INTLSYMBOL should be 'external' for packages with no intl directory, dnl and 'no-libtool' or 'use-libtool' for packages with an intl directory. dnl If INTLSYMBOL is 'use-libtool', then a libtool library dnl $(top_builddir)/intl/libintl.la will be created (shared and/or static, dnl depending on --{enable,disable}-{shared,static} and on the presence of dnl AM-DISABLE-SHARED). If INTLSYMBOL is 'no-libtool', a static library dnl $(top_builddir)/intl/libintl.a will be created. dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext dnl implementations (in libc or libintl) without the ngettext() function dnl will be ignored. If NEEDSYMBOL is specified and is dnl 'need-formatstring-macros', then GNU gettext implementations that don't dnl support the ISO C 99 formatstring macros will be ignored. dnl INTLDIR is used to find the intl libraries. If empty, dnl the value '$(top_builddir)/intl/' is used. dnl dnl The result of the configuration is one of three cases: dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled dnl and used. dnl Catalog format: GNU --> install in $(datadir) dnl Catalog extension: .mo after installation, .gmo in source tree dnl 2) GNU gettext has been found in the system's C library. dnl Catalog format: GNU --> install in $(datadir) dnl Catalog extension: .mo after installation, .gmo in source tree dnl 3) No internationalization, always use English msgid. dnl Catalog format: none dnl Catalog extension: none dnl If INTLSYMBOL is 'external', only cases 2 and 3 can occur. dnl The use of .gmo is historical (it was needed to avoid overwriting the dnl GNU format catalogs when building on a platform with an X/Open gettext), dnl but we keep it in order not to force irrelevant filename changes on the dnl maintainers. dnl AC_DEFUN([AM_GNU_GETTEXT], [ dnl Argument checking. ifelse([$1], [], , [ifelse([$1], [external], , [ifelse([$1], [no-libtool], , [ifelse([$1], [use-libtool], , [errprint([ERROR: invalid first argument to AM_GNU_GETTEXT ])])])])]) ifelse(ifelse([$1], [], [old])[]ifelse([$1], [no-libtool], [old]), [old], [AC_DIAGNOSE([obsolete], [Use of AM_GNU_GETTEXT without [external] argument is deprecated.])]) ifelse([$2], [], , [ifelse([$2], [need-ngettext], , [ifelse([$2], [need-formatstring-macros], , [errprint([ERROR: invalid second argument to AM_GNU_GETTEXT ])])])]) define([gt_included_intl], ifelse([$1], [external], ifdef([AM_GNU_GETTEXT_][INTL_SUBDIR], [yes], [no]), [yes])) define([gt_libtool_suffix_prefix], ifelse([$1], [use-libtool], [l], [])) gt_NEEDS_INIT AM_GNU_GETTEXT_NEED([$2]) AC_REQUIRE([AM_PO_SUBDIRS])dnl ifelse(gt_included_intl, yes, [ AC_REQUIRE([AM_INTL_SUBDIR])dnl ]) dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) dnl Sometimes libintl requires libiconv, so first search for libiconv. dnl Ideally we would do this search only after the dnl if test "$USE_NLS" = "yes"; then dnl if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then dnl tests. But if configure.in invokes AM_ICONV after AM_GNU_GETTEXT dnl the configure script would need to contain the same shell code dnl again, outside any 'if'. There are two solutions: dnl - Invoke AM_ICONV_LINKFLAGS_BODY here, outside any 'if'. dnl - Control the expansions in more detail using AC_PROVIDE_IFELSE. dnl Since AC_PROVIDE_IFELSE is only in autoconf >= 2.52 and not dnl documented, we avoid it. ifelse(gt_included_intl, yes, , [ AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) ]) dnl Sometimes, on Mac OS X, libintl requires linking with CoreFoundation. gt_INTL_MACOSX dnl Set USE_NLS. AC_REQUIRE([AM_NLS]) ifelse(gt_included_intl, yes, [ BUILD_INCLUDED_LIBINTL=no USE_INCLUDED_LIBINTL=no ]) LIBINTL= LTLIBINTL= POSUB= dnl Add a version number to the cache macros. case " $gt_needs " in *" need-formatstring-macros "*) gt_api_version=3 ;; *" need-ngettext "*) gt_api_version=2 ;; *) gt_api_version=1 ;; esac gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc" gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl" dnl If we use NLS figure out what method if test "$USE_NLS" = "yes"; then gt_use_preinstalled_gnugettext=no ifelse(gt_included_intl, yes, [ AC_MSG_CHECKING([whether included gettext is requested]) AC_ARG_WITH([included-gettext], [ --with-included-gettext use the GNU gettext library included here], nls_cv_force_use_gnu_gettext=$withval, nls_cv_force_use_gnu_gettext=no) AC_MSG_RESULT([$nls_cv_force_use_gnu_gettext]) nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext" if test "$nls_cv_force_use_gnu_gettext" != "yes"; then ]) dnl User does not insist on using GNU NLS library. Figure out what dnl to use. If GNU gettext is available we use this. Else we have dnl to fall back to GNU NLS library. if test $gt_api_version -ge 3; then gt_revision_test_code=' #ifndef __GNU_GETTEXT_SUPPORTED_REVISION #define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) #endif changequote(,)dnl typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; changequote([,])dnl ' else gt_revision_test_code= fi if test $gt_api_version -ge 2; then gt_expression_test_code=' + * ngettext ("", "", 0)' else gt_expression_test_code= fi AC_CACHE_CHECK([for GNU gettext in libc], [$gt_func_gnugettext_libc], [AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[ #include #ifndef __GNU_GETTEXT_SUPPORTED_REVISION extern int _nl_msg_cat_cntr; extern int *_nl_domain_bindings; #define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_domain_bindings) #else #define __GNU_GETTEXT_SYMBOL_EXPRESSION 0 #endif $gt_revision_test_code ]], [[ bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION ]])], [eval "$gt_func_gnugettext_libc=yes"], [eval "$gt_func_gnugettext_libc=no"])]) if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then dnl Sometimes libintl requires libiconv, so first search for libiconv. ifelse(gt_included_intl, yes, , [ AM_ICONV_LINK ]) dnl Search for libintl and define LIBINTL, LTLIBINTL and INCINTL dnl accordingly. Don't use AC_LIB_LINKFLAGS_BODY([intl],[iconv]) dnl because that would add "-liconv" to LIBINTL and LTLIBINTL dnl even if libiconv doesn't exist. AC_LIB_LINKFLAGS_BODY([intl]) AC_CACHE_CHECK([for GNU gettext in libintl], [$gt_func_gnugettext_libintl], [gt_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $INCINTL" gt_save_LIBS="$LIBS" LIBS="$LIBS $LIBINTL" dnl Now see whether libintl exists and does not depend on libiconv. AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[ #include #ifndef __GNU_GETTEXT_SUPPORTED_REVISION extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias (const char *); #define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_expand_alias ("")) #else #define __GNU_GETTEXT_SYMBOL_EXPRESSION 0 #endif $gt_revision_test_code ]], [[ bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION ]])], [eval "$gt_func_gnugettext_libintl=yes"], [eval "$gt_func_gnugettext_libintl=no"]) dnl Now see whether libintl exists and depends on libiconv. if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then LIBS="$LIBS $LIBICONV" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[ #include #ifndef __GNU_GETTEXT_SUPPORTED_REVISION extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias (const char *); #define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_expand_alias ("")) #else #define __GNU_GETTEXT_SYMBOL_EXPRESSION 0 #endif $gt_revision_test_code ]], [[ bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION ]])], [LIBINTL="$LIBINTL $LIBICONV" LTLIBINTL="$LTLIBINTL $LTLIBICONV" eval "$gt_func_gnugettext_libintl=yes" ]) fi CPPFLAGS="$gt_save_CPPFLAGS" LIBS="$gt_save_LIBS"]) fi dnl If an already present or preinstalled GNU gettext() is found, dnl use it. But if this macro is used in GNU gettext, and GNU dnl gettext is already preinstalled in libintl, we update this dnl libintl. (Cf. the install rule in intl/Makefile.in.) if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \ || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \ && test "$PACKAGE" != gettext-runtime \ && test "$PACKAGE" != gettext-tools; }; then gt_use_preinstalled_gnugettext=yes else dnl Reset the values set by searching for libintl. LIBINTL= LTLIBINTL= INCINTL= fi ifelse(gt_included_intl, yes, [ if test "$gt_use_preinstalled_gnugettext" != "yes"; then dnl GNU gettext is not found in the C library. dnl Fall back on included GNU gettext library. nls_cv_use_gnu_gettext=yes fi fi if test "$nls_cv_use_gnu_gettext" = "yes"; then dnl Mark actions used to generate GNU NLS library. BUILD_INCLUDED_LIBINTL=yes USE_INCLUDED_LIBINTL=yes LIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LIBICONV $LIBTHREAD" LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LTLIBICONV $LTLIBTHREAD" LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'` fi CATOBJEXT= if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then dnl Mark actions to use GNU gettext tools. CATOBJEXT=.gmo fi ]) if test -n "$INTL_MACOSX_LIBS"; then if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then dnl Some extra flags are needed during linking. LIBINTL="$LIBINTL $INTL_MACOSX_LIBS" LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS" fi fi if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then AC_DEFINE([ENABLE_NLS], [1], [Define to 1 if translation of program messages to the user's native language is requested.]) else USE_NLS=no fi fi AC_MSG_CHECKING([whether to use NLS]) AC_MSG_RESULT([$USE_NLS]) if test "$USE_NLS" = "yes"; then AC_MSG_CHECKING([where the gettext function comes from]) if test "$gt_use_preinstalled_gnugettext" = "yes"; then if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then gt_source="external libintl" else gt_source="libc" fi else gt_source="included intl directory" fi AC_MSG_RESULT([$gt_source]) fi if test "$USE_NLS" = "yes"; then if test "$gt_use_preinstalled_gnugettext" = "yes"; then if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then AC_MSG_CHECKING([how to link with libintl]) AC_MSG_RESULT([$LIBINTL]) AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCINTL]) fi dnl For backward compatibility. Some packages may be using this. AC_DEFINE([HAVE_GETTEXT], [1], [Define if the GNU gettext() function is already present or preinstalled.]) AC_DEFINE([HAVE_DCGETTEXT], [1], [Define if the GNU dcgettext() function is already present or preinstalled.]) fi dnl We need to process the po/ directory. POSUB=po fi ifelse(gt_included_intl, yes, [ dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL dnl to 'yes' because some of the testsuite requires it. if test "$PACKAGE" = gettext-runtime || test "$PACKAGE" = gettext-tools; then BUILD_INCLUDED_LIBINTL=yes fi dnl Make all variables we use known to autoconf. AC_SUBST([BUILD_INCLUDED_LIBINTL]) AC_SUBST([USE_INCLUDED_LIBINTL]) AC_SUBST([CATOBJEXT]) dnl For backward compatibility. Some configure.ins may be using this. nls_cv_header_intl= nls_cv_header_libgt= dnl For backward compatibility. Some Makefiles may be using this. DATADIRNAME=share AC_SUBST([DATADIRNAME]) dnl For backward compatibility. Some Makefiles may be using this. INSTOBJEXT=.mo AC_SUBST([INSTOBJEXT]) dnl For backward compatibility. Some Makefiles may be using this. GENCAT=gencat AC_SUBST([GENCAT]) dnl For backward compatibility. Some Makefiles may be using this. INTLOBJS= if test "$USE_INCLUDED_LIBINTL" = yes; then INTLOBJS="\$(GETTOBJS)" fi AC_SUBST([INTLOBJS]) dnl Enable libtool support if the surrounding package wishes it. INTL_LIBTOOL_SUFFIX_PREFIX=gt_libtool_suffix_prefix AC_SUBST([INTL_LIBTOOL_SUFFIX_PREFIX]) ]) dnl For backward compatibility. Some Makefiles may be using this. INTLLIBS="$LIBINTL" AC_SUBST([INTLLIBS]) dnl Make all documented variables known to autoconf. AC_SUBST([LIBINTL]) AC_SUBST([LTLIBINTL]) AC_SUBST([POSUB]) ]) dnl gt_NEEDS_INIT ensures that the gt_needs variable is initialized. m4_define([gt_NEEDS_INIT], [ m4_divert_text([DEFAULTS], [gt_needs=]) m4_define([gt_NEEDS_INIT], []) ]) dnl Usage: AM_GNU_GETTEXT_NEED([NEEDSYMBOL]) AC_DEFUN([AM_GNU_GETTEXT_NEED], [ m4_divert_text([INIT_PREPARE], [gt_needs="$gt_needs $1"]) ]) dnl Usage: AM_GNU_GETTEXT_VERSION([gettext-version]) AC_DEFUN([AM_GNU_GETTEXT_VERSION], []) dnl Usage: AM_GNU_GETTEXT_REQUIRE_VERSION([gettext-version]) AC_DEFUN([AM_GNU_GETTEXT_REQUIRE_VERSION], []) nip2-8.7.0/m4/codeset.m40000644000175000017500000000151213350464073011533 00000000000000# codeset.m4 serial 5 (gettext-0.18.2) dnl Copyright (C) 2000-2002, 2006, 2008-2014, 2016 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. AC_DEFUN([AM_LANGINFO_CODESET], [ AC_CACHE_CHECK([for nl_langinfo and CODESET], [am_cv_langinfo_codeset], [AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include ]], [[char* cs = nl_langinfo(CODESET); return !cs;]])], [am_cv_langinfo_codeset=yes], [am_cv_langinfo_codeset=no]) ]) if test $am_cv_langinfo_codeset = yes; then AC_DEFINE([HAVE_LANGINFO_CODESET], [1], [Define if you have and nl_langinfo(CODESET).]) fi ]) nip2-8.7.0/m4/lt~obsolete.m40000644000175000017500000001377413350464075012476 00000000000000# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- # # Copyright (C) 2004-2005, 2007, 2009, 2011-2015 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])]) nip2-8.7.0/m4/libtool.m40000644000175000017500000112617113350464075011565 00000000000000# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- # # Copyright (C) 1996-2001, 2003-2015 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) 2014 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # 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 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 this program. If not, see . ]) # serial 58 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.62])dnl We use AC_PATH_PROGS_FEATURE_CHECK 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_PREPARE_CC_BASENAME # ----------------------- m4_defun([_LT_PREPARE_CC_BASENAME], [ # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. func_cc_basename () { for cc_temp in @S|@*""; do case $cc_temp in compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; \-*) ;; *) break;; esac done func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` } ])# _LT_PREPARE_CC_BASENAME # _LT_CC_BASENAME(CC) # ------------------- # It would be clearer to call AC_REQUIREs from _LT_PREPARE_CC_BASENAME, # but that macro is also expanded into generated libtool script, which # arranges for $SED and $ECHO to be set by different means. m4_defun([_LT_CC_BASENAME], [m4_require([_LT_PREPARE_CC_BASENAME])dnl AC_REQUIRE([_LT_DECL_SED])dnl AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl func_cc_basename $1 cc_basename=$func_cc_basename_result ]) # _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 m4_require([_LT_CMD_TRUNCATE])dnl _LT_CONFIG_LIBTOOL_INIT([ # See if we are running on zsh, and set the options that 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 set != "${COLLECT_NAMES+set}"; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a '.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld=$lt_cv_prog_gnu_ld old_CC=$CC old_CFLAGS=$CFLAGS # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o _LT_CC_BASENAME([$compiler]) # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then _LT_PATH_MAGIC fi ;; esac # Use C for the default configuration in the libtool script LT_SUPPORTED_TAG([CC]) _LT_LANG_C_CONFIG _LT_LANG_DEFAULT_CONFIG _LT_CONFIG_COMMANDS ])# _LT_SETUP # _LT_PREPARE_SED_QUOTE_VARS # -------------------------- # Define a few sed substitution that help us do robust quoting. m4_defun([_LT_PREPARE_SED_QUOTE_VARS], [# Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\([["`\\]]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ]) # _LT_PROG_LTMAIN # --------------- # Note that this code is called both from 'configure', and 'config.status' # now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, # 'config.status' has no value for ac_aux_dir unless we are using Automake, # so we pass a copy along to make sure it has a sensible value anyway. m4_defun([_LT_PROG_LTMAIN], [m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl _LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) ltmain=$ac_aux_dir/ltmain.sh ])# _LT_PROG_LTMAIN ## ------------------------------------- ## ## Accumulate code for creating libtool. ## ## ------------------------------------- ## # So that we can recreate a full libtool script including additional # tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS # in macros and then make a single call at the end using the 'libtool' # label. # _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) # ---------------------------------------- # Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL_INIT], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_INIT], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_INIT]) # _LT_CONFIG_LIBTOOL([COMMANDS]) # ------------------------------ # Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) # _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) # ----------------------------------------------------- m4_defun([_LT_CONFIG_SAVE_COMMANDS], [_LT_CONFIG_LIBTOOL([$1]) _LT_CONFIG_LIBTOOL_INIT([$2]) ]) # _LT_FORMAT_COMMENT([COMMENT]) # ----------------------------- # Add leading comment marks to the start of each line, and a trailing # full-stop to the whole comment if one is not present already. m4_define([_LT_FORMAT_COMMENT], [m4_ifval([$1], [ m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) )]) ## ------------------------ ## ## FIXME: Eliminate VARNAME ## ## ------------------------ ## # _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) # ------------------------------------------------------------------- # CONFIGNAME is the name given to the value in the libtool script. # VARNAME is the (base) name used in the configure script. # VALUE may be 0, 1 or 2 for a computed quote escaped value based on # VARNAME. Any other value will be used directly. m4_define([_LT_DECL], [lt_if_append_uniq([lt_decl_varnames], [$2], [, ], [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], [m4_ifval([$1], [$1], [$2])]) lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) m4_ifval([$4], [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) lt_dict_add_subkey([lt_decl_dict], [$2], [tagged?], [m4_ifval([$5], [yes], [no])])]) ]) # _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) # -------------------------------------------------------- m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) # lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_tag_varnames], [_lt_decl_filter([tagged?], [yes], $@)]) # _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) # --------------------------------------------------------- m4_define([_lt_decl_filter], [m4_case([$#], [0], [m4_fatal([$0: too few arguments: $#])], [1], [m4_fatal([$0: too few arguments: $#: $1])], [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], [lt_dict_filter([lt_decl_dict], $@)])[]dnl ]) # lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) # -------------------------------------------------- m4_define([lt_decl_quote_varnames], [_lt_decl_filter([value], [1], $@)]) # lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_dquote_varnames], [_lt_decl_filter([value], [2], $@)]) # lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_varnames_tagged], [m4_assert([$# <= 2])dnl _$0(m4_quote(m4_default([$1], [[, ]])), m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) m4_define([_lt_decl_varnames_tagged], [m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) # lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_all_varnames], [_$0(m4_quote(m4_default([$1], [[, ]])), m4_if([$2], [], m4_quote(lt_decl_varnames), m4_quote(m4_shift($@))))[]dnl ]) m4_define([_lt_decl_all_varnames], [lt_join($@, lt_decl_varnames_tagged([$1], lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl ]) # _LT_CONFIG_STATUS_DECLARE([VARNAME]) # ------------------------------------ # Quote a variable value, and forward it to 'config.status' so that its # declaration there will have the same value as in 'configure'. VARNAME # must have a single quote delimited value for this to work. m4_define([_LT_CONFIG_STATUS_DECLARE], [$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) # _LT_CONFIG_STATUS_DECLARATIONS # ------------------------------ # We delimit libtool config variables with single quotes, so when # we write them to config.status, we have to be sure to quote all # embedded single quotes properly. In configure, this macro expands # each variable declared with _LT_DECL (and _LT_TAGDECL) into: # # ='`$ECHO "$" | $SED "$delay_single_quote_subst"`' m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], [m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAGS # ---------------- # Output comment and list of tags supported by the script m4_defun([_LT_LIBTOOL_TAGS], [_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl available_tags='_LT_TAGS'dnl ]) # _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) # ----------------------------------- # Extract the dictionary values for VARNAME (optionally with TAG) and # expand to a commented shell variable setting: # # # Some comment about what VAR is for. # visible_name=$lt_internal_name m4_define([_LT_LIBTOOL_DECLARE], [_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [description])))[]dnl m4_pushdef([_libtool_name], m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), [0], [_libtool_name=[$]$1], [1], [_libtool_name=$lt_[]$1], [2], [_libtool_name=$lt_[]$1], [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl ]) # _LT_LIBTOOL_CONFIG_VARS # ----------------------- # Produce commented declarations of non-tagged libtool config variables # suitable for insertion in the LIBTOOL CONFIG section of the 'libtool' # script. Tagged libtool config variables (even for the LIBTOOL CONFIG # section) are produced by _LT_LIBTOOL_TAG_VARS. m4_defun([_LT_LIBTOOL_CONFIG_VARS], [m4_foreach([_lt_var], m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAG_VARS(TAG) # ------------------------- m4_define([_LT_LIBTOOL_TAG_VARS], [m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) # _LT_TAGVAR(VARNAME, [TAGNAME]) # ------------------------------ m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) # _LT_CONFIG_COMMANDS # ------------------- # Send accumulated output to $CONFIG_STATUS. Thanks to the lists of # variables for single and double quote escaping we saved from calls # to _LT_DECL, we can put quote escaped variables declarations # into 'config.status', and then the shell code to quote escape them in # for loops in 'config.status'. Finally, any additional code accumulated # from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. m4_defun([_LT_CONFIG_COMMANDS], [AC_PROVIDE_IFELSE([LT_OUTPUT], dnl If the libtool generation code has been placed in $CONFIG_LT, dnl instead of duplicating it all over again into config.status, dnl then we will have config.status run $CONFIG_LT later, so it dnl needs to know what name is stored there: [AC_CONFIG_COMMANDS([libtool], [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], dnl If the libtool generation code is destined for config.status, dnl expand the accumulated commands and init code now: [AC_CONFIG_COMMANDS([libtool], [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) ])#_LT_CONFIG_COMMANDS # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], [ # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' _LT_CONFIG_STATUS_DECLARATIONS LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$[]1 _LTECHO_EOF' } # Quote evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_quote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes ;; *) 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\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes ;; *) 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 0 = "$lt_write_fail" && 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 yes = "$silent" && 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 that 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 # Generated automatically by $as_me ($PACKAGE) $VERSION # NOTE: Changes made to this file will be lost: look at ltmain.sh. # Provide generalized library-building support services. # Written by Gordon Matzigkeit, 1996 _LT_COPYING _LT_LIBTOOL_TAGS # Configured defaults for sys_lib_dlsearch_path munging. : \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"} # ### BEGIN LIBTOOL CONFIG _LT_LIBTOOL_CONFIG_VARS _LT_LIBTOOL_TAG_VARS # ### END LIBTOOL CONFIG _LT_EOF cat <<'_LT_EOF' >> "$cfgfile" # ### BEGIN FUNCTIONS SHARED WITH CONFIGURE _LT_PREPARE_MUNGE_PATH_LIST _LT_PREPARE_CC_BASENAME # ### END FUNCTIONS SHARED WITH CONFIGURE _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 set != "${COLLECT_NAMES+set}"; 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) 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' 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 0 = "$_lt_result"; 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 0 = "$_lt_result" && $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 yes = "$lt_cv_apple_cc_single_mod"; then _lt_dar_single_mod='$single_module' fi if test yes = "$lt_cv_ld_exported_symbols_list"; 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 no = "$lt_cv_ld_force_load"; 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 yes = "$lt_cv_ld_force_load"; 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*|nagfor*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test yes = "$_lt_dar_can_shared"; 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 yes != "$lt_cv_apple_cc_single_mod"; 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 set = "${lt_cv_aix_libpath+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 that will find a shell with a builtin # printf (that 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], [AS_HELP_STRING([--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 yes = "$GCC"; 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 where 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 no = "$enable_libtool_lock" || 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 what ABI is being produced by ac_compile, and set mode # options accordingly. 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 what ABI is being produced by ac_compile, and set linker # options accordingly. echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then if test yes = "$lt_cv_prog_gnu_ld"; 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* ;; mips64*-*linux*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then emul=elf case `/usr/bin/file conftest.$ac_objext` in *32-bit*) emul="${emul}32" ;; *64-bit*) emul="${emul}64" ;; esac case `/usr/bin/file conftest.$ac_objext` in *MSB*) emul="${emul}btsmip" ;; *LSB*) emul="${emul}ltsmip" ;; esac case `/usr/bin/file conftest.$ac_objext` in *N32*) emul="${emul}n32" ;; esac LD="${LD-ld} -m $emul" fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. Note that the listed cases only cover the # situations where additional linker options are needed (such as when # doing 32-bit compilation for a host where ld defaults to 64-bit, or # vice versa); the common cases where no linker options are needed do # not appear in the list. 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*) case `/usr/bin/file conftest.o` in *x86-64*) LD="${LD-ld} -m elf32_x86_64" ;; *) LD="${LD-ld} -m elf_i386" ;; esac ;; powerpc64le-*linux*) LD="${LD-ld} -m elf32lppclinux" ;; 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" ;; powerpcle-*linux*) LD="${LD-ld} -m elf64lppc" ;; 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 yes != "$lt_cv_cc_needs_belf"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS=$SAVE_CFLAGS fi ;; *-*solaris*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. 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*|x86_64-*-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 0 -eq "$ac_status"; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a AC_TRY_EVAL([lt_ar_try]) if test 0 -ne "$ac_status"; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a ]) ]) if test no = "$lt_cv_ar_at_file"; 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 bitrig* | 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" ## exclude from sc_useless_quotes_in_assignment # 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 yes = "[$]$2"; 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 yes = "[$]$2"; 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; ;; bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*) # 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" && \ test undefined != "$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 17 != "$i" # 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 yes = "$cross_compiling"; 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 -fvisibility=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 yes != "$enable_dlopen"; 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 ]) ;; tpf*) # Don't try to run any link tests for TPF. We know it's impossible # because TPF is a cross-compiler, and we know how we open DSOs. lt_cv_dlopen=dlopen lt_cv_dlopen_libs= lt_cv_dlopen_self=no ;; *) 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 no = "$lt_cv_dlopen"; then enable_dlopen=no else enable_dlopen=yes fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS=$CPPFLAGS test yes = "$ac_cv_header_dlfcn_h" && 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 yes = "$lt_cv_dlopen_self"; 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 no = "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" && test no != "$need_locks"; 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 no = "$hard_links"; 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 where 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 yes = "$_LT_TAGVAR(hardcode_automatic, $1)"; then # We can hardcode non-existent directories. if test no != "$_LT_TAGVAR(hardcode_direct, $1)" && # 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 no != "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" && test no != "$_LT_TAGVAR(hardcode_minus_L, $1)"; 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 relink = "$_LT_TAGVAR(hardcode_action, $1)" || test yes = "$_LT_TAGVAR(inherit_rpath, $1)"; then # Fast installation is not supported enable_fast_install=no elif test yes = "$shlibpath_overrides_runpath" || test no = "$enable_shared"; 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_PREPARE_MUNGE_PATH_LIST # --------------------------- # Make sure func_munge_path_list() is defined correctly. m4_defun([_LT_PREPARE_MUNGE_PATH_LIST], [[# func_munge_path_list VARIABLE PATH # ----------------------------------- # VARIABLE is name of variable containing _space_ separated list of # directories to be munged by the contents of PATH, which is string # having a format: # "DIR[:DIR]:" # string "DIR[ DIR]" will be prepended to VARIABLE # ":DIR[:DIR]" # string "DIR[ DIR]" will be appended to VARIABLE # "DIRP[:DIRP]::[DIRA:]DIRA" # string "DIRP[ DIRP]" will be prepended to VARIABLE and string # "DIRA[ DIRA]" will be appended to VARIABLE # "DIR[:DIR]" # VARIABLE will be replaced by "DIR[ DIR]" func_munge_path_list () { case x@S|@2 in x) ;; *:) eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'` \@S|@@S|@1\" ;; x:*) eval @S|@1=\"\@S|@@S|@1 `$ECHO @S|@2 | $SED 's/:/ /g'`\" ;; *::*) eval @S|@1=\"\@S|@@S|@1\ `$ECHO @S|@2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" eval @S|@1=\"`$ECHO @S|@2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \@S|@@S|@1\" ;; *) eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'`\" ;; esac } ]])# _LT_PREPARE_PATH_LIST # _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 m4_require([_LT_PREPARE_MUNGE_PATH_LIST])dnl AC_MSG_CHECKING([dynamic linker characteristics]) m4_if([$1], [], [ if test yes = "$GCC"; 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` # ...but if some path component already ends with the multilib dir we assume # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer). case "$lt_multi_os_dir; $lt_search_path_spec " in "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*) lt_multi_os_dir= ;; esac 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" elif test -n "$lt_multi_os_dir"; then 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 AC_ARG_VAR([LT_SYS_LIBRARY_PATH], [User-defined run-time library search path.]) 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 ia64 = "$host_cpu"; 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 # Using Import Files as archive members, it is possible to support # filename-based versioning of shared library archives on AIX. While # this would work for both with and without runtime linking, it will # prevent static linking of such archives. So we do filename-based # shared library versioning with .so extension only, which is used # when both runtime linking and shared linking is enabled. # Unfortunately, runtime linking may impact performance, so we do # not want this to be the default eventually. Also, we use the # versioned .so libs for executables only if there is the -brtl # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. # To allow for filename-based versioning support, we need to create # libNAME.so.V as an archive file, containing: # *) an Import File, referring to the versioned filename of the # archive as well as the shared archive member, telling the # bitwidth (32 or 64) of that shared object, and providing the # list of exported symbols of that shared object, eventually # decorated with the 'weak' keyword # *) the shared object with the F_LOADONLY flag set, to really avoid # it being seen by the linker. # At run time we better use the real file rather than another symlink, # but for link time we create the symlink libNAME.so -> libNAME.so.V case $with_aix_soname,$aix_use_runtimelinking in # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. aix,yes) # traditional libtool dynamic_linker='AIX unversionable lib.so' # 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' ;; aix,no) # traditional AIX only dynamic_linker='AIX lib.a[(]lib.so.V[)]' # 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' ;; svr4,*) # full svr4 only dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)]" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,yes) # both, prefer svr4 dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)], lib.a[(]lib.so.V[)]" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # unpreferred sharedlib libNAME.a needs extra handling postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,no) # both, prefer aix dynamic_linker="AIX lib.a[(]lib.so.V[)], lib.so.V[(]$shared_archive_member_spec.o[)]" library_names_spec='$libname$release.a $libname.a' soname_spec='$libname$release$shared_ext$major' # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' ;; esac 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%'\''`; $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$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' 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 ;; 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=no 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 32 = "$HPUX_IA64_MODE"; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" sys_lib_dlsearch_path_spec=/usr/lib/hpux32 else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" sys_lib_dlsearch_path_spec=/usr/lib/hpux64 fi ;; 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 yes = "$lt_cv_prog_gnu_ld"; 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 ;; linux*android*) version_type=none # Android doesn't support versioned libraries. need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext' soname_spec='$libname$release$shared_ext' finish_cmds= shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # 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 dynamic_linker='Android linker' # Don't embed -rpath directories since the linker doesn't support them. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | 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 # Ideally, we could use ldconfig to report *all* directores which are # searched for libraries, however this is still not possible. Aside from not # being certain /sbin/ldconfig is available, command # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, # even though it is searched at run-time. Try to do the best guess by # appending ld.so.conf contents (and includes) 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* | bitrig*) version_type=sunos sys_lib_dlsearch_path_spec=/usr/lib need_lib_prefix=no if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then need_version=no else need_version=yes fi 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 shlibpath_overrides_runpath=yes ;; os2*) libname_spec='$name' version_type=windows shrext_cmds=.dll need_version=no need_lib_prefix=no # OS/2 can only load a DLL with a base name of 8 characters or less. soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; v=$($ECHO $release$versuffix | tr -d .-); n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); $ECHO $n$v`$shared_ext' library_names_spec='${libname}_dll.$libext' dynamic_linker='OS/2 ld.exe' shlibpath_var=BEGINLIBPATH sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec 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' ;; 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 yes = "$with_gnu_ld"; 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=sco 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 yes = "$with_gnu_ld"; 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 no = "$dynamic_linker" && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test yes = "$GCC"; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec fi if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec fi # remember unaugmented sys_lib_dlsearch_path content for libtool script decls... configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec # ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" # to be used as default LT_SYS_LIBRARY_PATH value in generated libtool configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH _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], [configure_time_dlsearch_path], [2], [Detected run-time system search path for libraries]) _LT_DECL([], [configure_time_lt_sys_library_path], [2], [Explicit LT_SYS_LIBRARY_PATH set during ./configure time]) ])# _LT_SYS_DYNAMIC_LINKER # _LT_PATH_TOOL_PREFIX(TOOL) # -------------------------- # find a file program that 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 that 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 no = "$withval" || with_gnu_ld=yes], [with_gnu_ld=no])dnl ac_prog=ld if test yes = "$GCC"; 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 yes = "$with_gnu_ld"; 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 conftest.i cat conftest.i conftest.i >conftest2.i : ${lt_DD:=$DD} AC_PATH_PROGS_FEATURE_CHECK([lt_DD], [dd], [if "$ac_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then cmp -s conftest.i conftest.out \ && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=: fi]) rm -f conftest.i conftest2.i conftest.out]) ])# _LT_PATH_DD # _LT_CMD_TRUNCATE # ---------------- # find command to truncate a binary pipe m4_defun([_LT_CMD_TRUNCATE], [m4_require([_LT_PATH_DD]) AC_CACHE_CHECK([how to truncate binary pipes], [lt_cv_truncate_bin], [printf 0123456789abcdef0123456789abcdef >conftest.i cat conftest.i conftest.i >conftest2.i lt_cv_truncate_bin= if "$ac_cv_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then cmp -s conftest.i conftest.out \ && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1" fi rm -f conftest.i conftest2.i conftest.out test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q"]) _LT_DECL([lt_truncate_bin], [lt_cv_truncate_bin], [1], [Command to truncate a binary pipe]) ])# _LT_CMD_TRUNCATE # _LT_CHECK_MAGIC_METHOD # ---------------------- # how to check for library dependencies # -- PORTME fill in with the dynamic library characteristics m4_defun([_LT_CHECK_MAGIC_METHOD], [m4_require([_LT_DECL_EGREP]) m4_require([_LT_DECL_OBJDUMP]) AC_CACHE_CHECK([how to recognize dependent libraries], lt_cv_deplibs_check_method, [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 # that 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. if ( 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 ;; 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 | 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* | bitrig*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; 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 ;; os2*) 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 # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty case $build_os in mingw*) lt_bad_file=conftest.nm/nofile ;; *) lt_bad_file=/dev/null ;; esac case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in *$lt_bad_file* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break 2 ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break 2 ;; *) 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 no != "$lt_cv_path_NM"; 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 -headers /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols -headers" ;; *) 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 one 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 yes != "$lt_cv_path_mainfest_tool"; then MANIFEST_TOOL=: fi _LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl ])# _LT_PATH_MANIFEST_TOOL # _LT_DLL_DEF_P([FILE]) # --------------------- # True iff FILE is a Windows DLL '.def' file. # Keep in sync with func_dll_def_p in the libtool script AC_DEFUN([_LT_DLL_DEF_P], [dnl test DEF = "`$SED -n dnl -e '\''s/^[[ ]]*//'\'' dnl Strip leading whitespace -e '\''/^\(;.*\)*$/d'\'' dnl Delete empty lines and comments -e '\''s/^\(EXPORTS\|LIBRARY\)\([[ ]].*\)*$/DEF/p'\'' dnl -e q dnl Only consider the first "real" line $1`" dnl ])# _LT_DLL_DEF_P # 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 yes = "$GCC"; 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 ia64 = "$host_cpu"; 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 if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Gets list of data symbols to import. lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'" # Adjust the below global symbol transforms to fixup imported variables. lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'" lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'" lt_c_name_lib_hook="\ -e 's/^I .* \(lib.*\)$/ {\"\1\", (void *) 0},/p'\ -e 's/^I .* \(.*\)$/ {\"lib\1\", (void *) 0},/p'" else # Disable hooks by default. lt_cv_sys_global_symbol_to_import= lt_cdecl_hook= lt_c_name_hook= lt_c_name_lib_hook= fi # 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"\ $lt_cdecl_hook\ " -e 's/^T .* \(.*\)$/extern int \1();/p'"\ " -e 's/^$symcode$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"\ $lt_c_name_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'" # Transform an extracted symbol line into symbol name with lib prefix and # symbol address. lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\ $lt_c_name_lib_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/ {\"lib\1\", (void *) \&\1},/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, # D for any global variable and I for any imported 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};"\ " /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\ " /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\ " /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\ " {split(\$ 0,a,/\||\r/); split(a[2],s)};"\ " s[1]~/^[@?]/{print f,s[1],s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print f,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 can'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* .* \(.*\)$/ {\"\1\", (void *) \&\1},/" < "$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 yes = "$pipe_works"; 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_import], [lt_cv_sys_global_symbol_to_import], [1], [Transform the output of nm into a list of symbols to manually relocate]) _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_interface], [lt_cv_nm_interface], [1], [The name lister interface]) _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 yes = "$GXX"; 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 ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; 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']) case $host_os in os2*) _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' ;; esac ;; 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 ia64 = "$host_cpu"; 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 ia64 != "$host_cpu"; 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 | 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 yes = "$GCC"; 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 ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; 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']) case $host_os in os2*) _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' ;; esac ;; 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 ia64 = "$host_cpu"; 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 ;; 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' case $cc_basename in 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' ;; esac ;; 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']) case $host_os in os2*) _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' ;; esac ;; 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 | 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' ;; tcc*) # Fabrice Bellard et al's Tiny 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)='-static' ;; 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 that 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 GNU nm, but means don't demangle to AIX nm. # Without the "-l" option, or with the "-B" option, AIX nm treats # weak defined symbols like other global defined symbols, whereas # GNU nm marks them as "W". # While the 'weak' keyword is ignored in the Export File, we need # it in the Import File for the 'aix-soname' feature, so we have # to replace the "-B" option with "-P" for AIX nm. 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) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | 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 yes != "$GCC"; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd* | bitrig*) 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 yes = "$with_gnu_ld"; 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 yes = "$lt_use_gnu_ld_interface"; 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 | $SED -e 's/([^)]\+)\s\+//' 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 ia64 != "$host_cpu"; 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, use it as # is; otherwise, prepend EXPORTS... _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); 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 ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported shrext_cmds=.dll _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' _LT_TAGVAR(enable_shared_with_static_runtimes, $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 linux-dietlibc = "$host_os"; 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 no = "$tmp_diet" 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' ;; nagfor*) # NAGFOR 5.3 tmp_sharedflag='-Wl,-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 yes = "$supports_anon_versioning"; 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 tcc*) _LT_TAGVAR(export_dynamic_flag_spec, $1)='-rdynamic' ;; 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 yes = "$supports_anon_versioning"; 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 cannot *** 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 no = "$_LT_TAGVAR(ld_shlibs, $1)"; 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 yes = "$GCC" && 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 ia64 = "$host_cpu"; 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 GNU nm, but means don't demangle to AIX nm. # Without the "-l" option, or with the "-B" option, AIX nm treats # weak defined symbols like other global defined symbols, whereas # GNU nm marks them as "W". # While the 'weak' keyword is ignored in the Export File, we need # it in the Import File for the 'aix-soname' feature, so we have # to replace the "-B" option with "-P" for AIX nm. 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) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | 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 # have runtime linking enabled, and use it for executables. # For shared libraries, we enable/disable runtime linking # depending on the kind of the shared library created - # when "with_aix_soname,aix_use_runtimelinking" is: # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables # "aix,yes" lib.so shared, rtl:yes, for executables # lib.a static archive # "both,no" lib.so.V(shr.o) shared, rtl:yes # lib.a(lib.so.V) shared, rtl:no, for executables # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a(lib.so.V) shared, rtl:no # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a static archive case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then aix_use_runtimelinking=yes break fi done if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then # With aix-soname=svr4, we create the lib.so.V shared archives only, # so we don't have lib.a shared libs to link our executables. # We have to force runtime linking in this case. aix_use_runtimelinking=yes LDFLAGS="$LDFLAGS -Wl,-brtl" fi ;; 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,' case $with_aix_soname,$aix_use_runtimelinking in aix,*) ;; # traditional, no import file svr4,* | *,yes) # use import file # The Import File defines what to hardcode. _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no ;; esac if test yes = "$GCC"; 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 yes = "$aix_use_runtimelinking"; then shared_flag="$shared_flag "'$wl-G' fi # Need to ensure runtime linking is disabled for the traditional # shared library, or the linker may eventually find shared libraries # /with/ Import File - we do not want to mix them. shared_flag_aix='-shared' shared_flag_svr4='-shared $wl-G' else # not using gcc if test ia64 = "$host_cpu"; 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 yes = "$aix_use_runtimelinking"; then shared_flag='$wl-G' else shared_flag='$wl-bM:SRE' fi shared_flag_aix='$wl-bM:SRE' shared_flag_svr4='$wl-G' 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,yes = "$with_aix_soname,$aix_use_runtimelinking"; 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 -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag else if test ia64 = "$host_cpu"; 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 yes = "$with_gnu_ld"; 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 _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' # -brtl affects multiple linker settings, -berok does not and is overridden later compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`' if test svr4 != "$with_aix_soname"; then # This is similar to how AIX traditionally builds its shared libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' fi if test aix != "$with_aix_soname"; then _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' else # used by -dlpreopen to get the symbols _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV $output_objdir/$realname.d/$soname $output_objdir' fi _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d' 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,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then cp "$export_symbols" "$output_objdir/$soname.def"; echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; else $SED -e '\''s/^/-link -EXPORT:/'\'' < $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 yes = "$GCC"; 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 "x$output_objdir/$soname" = "x$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 "x$output_objdir/$soname" = "x$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 yes,no = "$GCC,$with_gnu_ld"; 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 no = "$with_gnu_ld"; 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 yes,no = "$GCC,$with_gnu_ld"; 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 no = "$with_gnu_ld"; 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 yes = "$GCC"; 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 yes = "$lt_cv_irix_exported_symbol"; 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 _LT_TAGVAR(link_all_deplibs, $1)=no 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 ;; linux*) case $cc_basename in tcc*) # Fabrice Bellard et al's Tiny C Compiler _LT_TAGVAR(ld_shlibs, $1)=yes _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; 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* | bitrig*) 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__`"; 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 _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' 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 shrext_cmds=.dll _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; osf3*) if test yes = "$GCC"; 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 yes = "$GCC"; 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 yes = "$GCC"; 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 yes = "$GCC"; 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 sequent = "$host_vendor"; 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 yes = "$GCC"; 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 CANNOT 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 yes = "$GCC"; 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 sni = "$host_vendor"; 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 no = "$_LT_TAGVAR(ld_shlibs, $1)" && 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 yes,yes = "$GCC,$enable_shared"; then case $_LT_TAGVAR(archive_cmds, $1) in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. AC_CACHE_CHECK([whether -lc should be explicitly linked in], [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), [$RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if AC_TRY_EVAL(ac_compile) 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) _LT_TAGVAR(allow_undefined_flag, $1)= if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) then lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no else lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes fi _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* ]) _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) ;; esac fi ;; esac _LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], [Whether or not to add -lc for building shared libraries]) _LT_TAGDECL([allow_libtool_libs_with_static_runtimes], [enable_shared_with_static_runtimes], [0], [Whether or not to disallow shared libs when runtime libs are static]) _LT_TAGDECL([], [export_dynamic_flag_spec], [1], [Compiler flag to allow reflexive dlopens]) _LT_TAGDECL([], [whole_archive_flag_spec], [1], [Compiler flag to generate shared objects directly from archives]) _LT_TAGDECL([], [compiler_needs_object], [1], [Whether the compiler copes with passing no objects directly]) _LT_TAGDECL([], [old_archive_from_new_cmds], [2], [Create an old-style archive from a shared archive]) _LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], [Create a temporary old-style archive to link instead of a shared archive]) _LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) _LT_TAGDECL([], [archive_expsym_cmds], [2]) _LT_TAGDECL([], [module_cmds], [2], [Commands used to build a loadable module if different from building a shared archive.]) _LT_TAGDECL([], [module_expsym_cmds], [2]) _LT_TAGDECL([], [with_gnu_ld], [1], [Whether we are building with GNU ld or not]) _LT_TAGDECL([], [allow_undefined_flag], [1], [Flag that allows shared libraries with undefined symbols to be built]) _LT_TAGDECL([], [no_undefined_flag], [1], [Flag that enforces no undefined symbols]) _LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], [Flag to hardcode $libdir into a binary during linking. This must work even if $libdir does not exist]) _LT_TAGDECL([], [hardcode_libdir_separator], [1], [Whether we need a single "-rpath" flag with a separated argument]) _LT_TAGDECL([], [hardcode_direct], [0], [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_direct_absolute], [0], [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes DIR into the resulting binary and the resulting library dependency is "absolute", i.e impossible to change by setting $shlibpath_var if the library is relocated]) _LT_TAGDECL([], [hardcode_minus_L], [0], [Set to "yes" if using the -LDIR flag during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_shlibpath_var], [0], [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_automatic], [0], [Set to "yes" if building a shared library automatically hardcodes DIR into the library and all subsequent libraries and executables linked against it]) _LT_TAGDECL([], [inherit_rpath], [0], [Set to yes if linker adds runtime paths of dependent libraries to runtime path list]) _LT_TAGDECL([], [link_all_deplibs], [0], [Whether libtool must link a program against all its dependency libraries]) _LT_TAGDECL([], [always_export_symbols], [0], [Set to "yes" if exported symbols are required]) _LT_TAGDECL([], [export_symbols_cmds], [2], [The commands to list exported symbols]) _LT_TAGDECL([], [exclude_expsyms], [1], [Symbols that should not be listed in the preloaded symbols]) _LT_TAGDECL([], [include_expsyms], [1], [Symbols that must always be exported]) _LT_TAGDECL([], [prelink_cmds], [2], [Commands necessary for linking programs (against libraries) with templates]) _LT_TAGDECL([], [postlink_cmds], [2], [Commands necessary for finishing linking programs]) _LT_TAGDECL([], [file_list_spec], [1], [Specify filename containing input files]) dnl FIXME: Not yet implemented dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], dnl [Compiler flag to generate thread safe objects]) ])# _LT_LINKER_SHLIBS # _LT_LANG_C_CONFIG([TAG]) # ------------------------ # Ensure that the configuration variables for a C compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to 'libtool'. m4_defun([_LT_LANG_C_CONFIG], [m4_require([_LT_DECL_EGREP])dnl lt_save_CC=$CC AC_LANG_PUSH(C) # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' _LT_TAG_COMPILER # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) LT_SYS_DLOPEN_SELF _LT_CMD_STRIPLIB # Report what 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 no = "$can_build_shared" && 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 yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test ia64 != "$host_cpu"; then case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in yes,aix,yes) ;; # shared object as lib.so file only yes,svr4,*) ;; # shared object as lib.so archive member only yes,*) enable_static=no ;; # shared object in lib.a archive as well esac 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 yes = "$enable_shared" || 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 no != "$CXX" && ( (test g++ = "$CXX" && `g++ -v >/dev/null 2>&1` ) || (test g++ != "$CXX"))); 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 yes != "$_lt_caught_CXX_error"; 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 yes = "$GXX"; 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 yes = "$GXX"; 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 yes = "$with_gnu_ld"; 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 ia64 = "$host_cpu"; 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 # have runtime linking enabled, and use it for executables. # For shared libraries, we enable/disable runtime linking # depending on the kind of the shared library created - # when "with_aix_soname,aix_use_runtimelinking" is: # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables # "aix,yes" lib.so shared, rtl:yes, for executables # lib.a static archive # "both,no" lib.so.V(shr.o) shared, rtl:yes # lib.a(lib.so.V) shared, rtl:no, for executables # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a(lib.so.V) shared, rtl:no # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a static archive 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 if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then # With aix-soname=svr4, we create the lib.so.V shared archives only, # so we don't have lib.a shared libs to link our executables. # We have to force runtime linking in this case. aix_use_runtimelinking=yes LDFLAGS="$LDFLAGS -Wl,-brtl" fi ;; 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,' case $with_aix_soname,$aix_use_runtimelinking in aix,*) ;; # no import file svr4,* | *,yes) # use import file # The Import File defines what to hardcode. _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no ;; esac if test yes = "$GXX"; 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 yes = "$aix_use_runtimelinking"; then shared_flag=$shared_flag' $wl-G' fi # Need to ensure runtime linking is disabled for the traditional # shared library, or the linker may eventually find shared libraries # /with/ Import File - we do not want to mix them. shared_flag_aix='-shared' shared_flag_svr4='-shared $wl-G' else # not using gcc if test ia64 = "$host_cpu"; 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 yes = "$aix_use_runtimelinking"; then shared_flag='$wl-G' else shared_flag='$wl-bM:SRE' fi shared_flag_aix='$wl-bM:SRE' shared_flag_svr4='$wl-G' 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,yes = "$with_aix_soname,$aix_use_runtimelinking"; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. # The "-G" linker flag allows undefined symbols. _LT_TAGVAR(no_undefined_flag, $1)='-bernotok' # 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 -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag else if test ia64 = "$host_cpu"; 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 yes = "$with_gnu_ld"; 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 _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' # -brtl affects multiple linker settings, -berok does not and is overridden later compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`' if test svr4 != "$with_aix_soname"; then # This is similar to how AIX traditionally builds its shared # libraries. Need -bnortl late, we may have -brtl in LDFLAGS. _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' fi if test aix != "$with_aix_soname"; then _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' else # used by -dlpreopen to get the symbols _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV $output_objdir/$realname.d/$soname $output_objdir' fi _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d' 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,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then cp "$export_symbols" "$output_objdir/$soname.def"; echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; else $SED -e '\''s/^/-link -EXPORT:/'\'' < $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, use it as # is; otherwise, prepend EXPORTS... _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); 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) ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported shrext_cmds=.dll _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; 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 ;; 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 "x$output_objdir/$soname" = "x$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 yes = "$GXX"; 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 "x$output_objdir/$soname" = "x$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 no = "$with_gnu_ld"; 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 yes = "$GXX"; then if test no = "$with_gnu_ld"; 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 yes = "$GXX"; then if test no = "$with_gnu_ld"; 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 | 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 yes = "$supports_anon_versioning"; 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 ;; openbsd* | bitrig*) 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__`"; 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 yes,no = "$GXX,$with_gnu_ld"; 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 yes,no = "$GXX,$with_gnu_ld"; 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 $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 $wl-h $wl$soname -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 $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 $wl-h $wl$soname -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 CANNOT 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 no = "$_LT_TAGVAR(ld_shlibs, $1)" && 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 yes != "$_lt_caught_CXX_error" 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 @S|@2 in .*) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%\\\\@S|@2\$%%"`;; *) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%@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 x-L = "$p" || test x-R = "$p"; 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 no = "$pre_test_object_deps_done"; 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 no = "$pre_test_object_deps_done"; 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)= ;; 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 no = "$F77"; 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 yes != "$_lt_disable_F77"; 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 no = "$can_build_shared" && 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 yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test ia64 != "$host_cpu"; then case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in yes,aix,yes) ;; # shared object as lib.so file only yes,svr4,*) ;; # shared object as lib.so archive member only yes,*) enable_static=no ;; # shared object in lib.a archive as well esac 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 yes = "$enable_shared" || 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 yes != "$_lt_disable_F77" 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 no = "$FC"; 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 yes != "$_lt_disable_FC"; 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 no = "$can_build_shared" && 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 yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test ia64 != "$host_cpu"; then case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in yes,aix,yes) ;; # shared object as lib.so file only yes,svr4,*) ;; # shared object as lib.so archive member only yes,*) enable_static=no ;; # shared object in lib.a archive as well esac 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 yes = "$enable_shared" || 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 yes != "$_lt_disable_FC" AC_LANG_POP ])# _LT_LANG_FC_CONFIG # _LT_LANG_GCJ_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Java Compiler compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_GCJ_CONFIG], [AC_REQUIRE([LT_PROG_GCJ])dnl AC_LANG_SAVE # Source file extension for Java test sources. ac_ext=java # Object file extension for compiled Java test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="class foo {}" # Code to be used in simple link tests lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GCJ-"gcj"} CFLAGS=$GCJFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)=$LD _LT_CC_BASENAME([$compiler]) # GCJ did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GCJ_CONFIG # _LT_LANG_GO_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Go compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_GO_CONFIG], [AC_REQUIRE([LT_PROG_GO])dnl AC_LANG_SAVE # Source file extension for Go test sources. ac_ext=go # Object file extension for compiled Go test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="package main; func main() { }" # Code to be used in simple link tests lt_simple_link_test_code='package main; func main() { }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GOC-"gccgo"} CFLAGS=$GOFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)=$LD _LT_CC_BASENAME([$compiler]) # Go did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GO_CONFIG # _LT_LANG_RC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for the Windows resource compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_RC_CONFIG], [AC_REQUIRE([LT_PROG_RC])dnl AC_LANG_SAVE # Source file extension for RC test sources. ac_ext=rc # Object file extension for compiled RC test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' # Code to be used in simple link tests lt_simple_link_test_code=$lt_simple_compile_test_code # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC= CC=${RC-"windres"} CFLAGS= compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes if test -n "$compiler"; then : _LT_CONFIG($1) fi GCC=$lt_save_GCC AC_LANG_RESTORE CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_RC_CONFIG # LT_PROG_GCJ # ----------- AC_DEFUN([LT_PROG_GCJ], [m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], [AC_CHECK_TOOL(GCJ, gcj,) test set = "${GCJFLAGS+set}" || 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 10 -lt "$lt_ac_count" && 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], [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_PATH_CONVERSION_FUNCTIONS # ----------------------------- # Determine what 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 nip2-8.7.0/m4/ltversion.m40000644000175000017500000000127313350464075012140 00000000000000# ltversion.m4 -- version numbers -*- Autoconf -*- # # Copyright (C) 2004, 2011-2015 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 4179 ltversion.m4 # This file is part of GNU Libtool m4_define([LT_PACKAGE_VERSION], [2.4.6]) m4_define([LT_PACKAGE_REVISION], [2.4.6]) AC_DEFUN([LTVERSION_VERSION], [macro_version='2.4.6' macro_revision='2.4.6' _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) _LT_DECL(, macro_revision, 0) ]) nip2-8.7.0/m4/progtest.m40000644000175000017500000000602413350464073011757 00000000000000# progtest.m4 serial 7 (gettext-0.18.2) dnl Copyright (C) 1996-2003, 2005, 2008-2016 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper , 1996. AC_PREREQ([2.50]) # Search path for a program which passes the given test. dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR, dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]]) AC_DEFUN([AM_PATH_PROG_WITH_TEST], [ # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which # contains only /bin. Note that ksh looks also at the FPATH variable, # so we have to set that as well for the test. 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 # Find out how to test for executable files. Don't use a zero-byte file, # as systems may use methods other than mode bits to determine executability. cat >conf$$.file <<_ASEOF #! /bin/sh exit 0 _ASEOF chmod +x conf$$.file if test -x conf$$.file >/dev/null 2>&1; then ac_executable_p="test -x" else ac_executable_p="test -f" fi rm -f conf$$.file # Extract the first word of "$2", so it can be a program name with args. set dummy $2; ac_word=[$]2 AC_MSG_CHECKING([for $ac_word]) AC_CACHE_VAL([ac_cv_path_$1], [case "[$]$1" in [[\\/]]* | ?:[[\\/]]*) ac_cv_path_$1="[$]$1" # Let the user override the test with a path. ;; *) ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in ifelse([$5], , $PATH, [$5]); do IFS="$ac_save_IFS" test -z "$ac_dir" && ac_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then echo "$as_me: trying $ac_dir/$ac_word..." >&AS_MESSAGE_LOG_FD if [$3]; then ac_cv_path_$1="$ac_dir/$ac_word$ac_exec_ext" break 2 fi fi done done IFS="$ac_save_IFS" dnl If no 4th arg is given, leave the cache variable unset, dnl so AC_PATH_PROGS will keep looking. ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4" ])dnl ;; esac])dnl $1="$ac_cv_path_$1" if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then AC_MSG_RESULT([$][$1]) else AC_MSG_RESULT([no]) fi AC_SUBST([$1])dnl ]) nip2-8.7.0/m4/iconv.m40000644000175000017500000002207213350464073011227 00000000000000# iconv.m4 serial 19 (gettext-0.18.2) dnl Copyright (C) 2000-2002, 2007-2014, 2016 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. AC_DEFUN([AM_ICONV_LINKFLAGS_BODY], [ dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV dnl accordingly. AC_LIB_LINKFLAGS_BODY([iconv]) ]) AC_DEFUN([AM_ICONV_LINK], [ dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and dnl those with the standalone portable GNU libiconv installed). AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV dnl accordingly. AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) dnl Add $INCICONV to CPPFLAGS before performing the following checks, dnl because if the user has installed libiconv and not disabled its use dnl via --without-libiconv-prefix, he wants to use it. The first dnl AC_LINK_IFELSE will then fail, the second AC_LINK_IFELSE will succeed. am_save_CPPFLAGS="$CPPFLAGS" AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV]) AC_CACHE_CHECK([for iconv], [am_cv_func_iconv], [ am_cv_func_iconv="no, consider installing GNU libiconv" am_cv_lib_iconv=no AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[ #include #include ]], [[iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd);]])], [am_cv_func_iconv=yes]) if test "$am_cv_func_iconv" != yes; then am_save_LIBS="$LIBS" LIBS="$LIBS $LIBICONV" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[ #include #include ]], [[iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd);]])], [am_cv_lib_iconv=yes] [am_cv_func_iconv=yes]) LIBS="$am_save_LIBS" fi ]) if test "$am_cv_func_iconv" = yes; then AC_CACHE_CHECK([for working iconv], [am_cv_func_iconv_works], [ dnl This tests against bugs in AIX 5.1, AIX 6.1..7.1, HP-UX 11.11, dnl Solaris 10. am_save_LIBS="$LIBS" if test $am_cv_lib_iconv = yes; then LIBS="$LIBS $LIBICONV" fi am_cv_func_iconv_works=no for ac_iconv_const in '' 'const'; do AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[ #include #include #ifndef ICONV_CONST # define ICONV_CONST $ac_iconv_const #endif ]], [[int result = 0; /* Test against AIX 5.1 bug: Failures are not distinguishable from successful returns. */ { iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8"); if (cd_utf8_to_88591 != (iconv_t)(-1)) { static ICONV_CONST char input[] = "\342\202\254"; /* EURO SIGN */ char buf[10]; ICONV_CONST char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_utf8_to_88591, &inptr, &inbytesleft, &outptr, &outbytesleft); if (res == 0) result |= 1; iconv_close (cd_utf8_to_88591); } } /* Test against Solaris 10 bug: Failures are not distinguishable from successful returns. */ { iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646"); if (cd_ascii_to_88591 != (iconv_t)(-1)) { static ICONV_CONST char input[] = "\263"; char buf[10]; ICONV_CONST char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_ascii_to_88591, &inptr, &inbytesleft, &outptr, &outbytesleft); if (res == 0) result |= 2; iconv_close (cd_ascii_to_88591); } } /* Test against AIX 6.1..7.1 bug: Buffer overrun. */ { iconv_t cd_88591_to_utf8 = iconv_open ("UTF-8", "ISO-8859-1"); if (cd_88591_to_utf8 != (iconv_t)(-1)) { static ICONV_CONST char input[] = "\304"; static char buf[2] = { (char)0xDE, (char)0xAD }; ICONV_CONST char *inptr = input; size_t inbytesleft = 1; char *outptr = buf; size_t outbytesleft = 1; size_t res = iconv (cd_88591_to_utf8, &inptr, &inbytesleft, &outptr, &outbytesleft); if (res != (size_t)(-1) || outptr - buf > 1 || buf[1] != (char)0xAD) result |= 4; iconv_close (cd_88591_to_utf8); } } #if 0 /* This bug could be worked around by the caller. */ /* Test against HP-UX 11.11 bug: Positive return value instead of 0. */ { iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591"); if (cd_88591_to_utf8 != (iconv_t)(-1)) { static ICONV_CONST char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; char buf[50]; ICONV_CONST char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_88591_to_utf8, &inptr, &inbytesleft, &outptr, &outbytesleft); if ((int)res > 0) result |= 8; iconv_close (cd_88591_to_utf8); } } #endif /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is provided. */ if (/* Try standardized names. */ iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1) /* Try IRIX, OSF/1 names. */ && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1) /* Try AIX names. */ && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1) /* Try HP-UX names. */ && iconv_open ("utf8", "eucJP") == (iconv_t)(-1)) result |= 16; return result; ]])], [am_cv_func_iconv_works=yes], , [case "$host_os" in aix* | hpux*) am_cv_func_iconv_works="guessing no" ;; *) am_cv_func_iconv_works="guessing yes" ;; esac]) test "$am_cv_func_iconv_works" = no || break done LIBS="$am_save_LIBS" ]) case "$am_cv_func_iconv_works" in *no) am_func_iconv=no am_cv_lib_iconv=no ;; *) am_func_iconv=yes ;; esac else am_func_iconv=no am_cv_lib_iconv=no fi if test "$am_func_iconv" = yes; then AC_DEFINE([HAVE_ICONV], [1], [Define if you have the iconv() function and it works.]) fi if test "$am_cv_lib_iconv" = yes; then AC_MSG_CHECKING([how to link with libiconv]) AC_MSG_RESULT([$LIBICONV]) else dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV dnl either. CPPFLAGS="$am_save_CPPFLAGS" LIBICONV= LTLIBICONV= fi AC_SUBST([LIBICONV]) AC_SUBST([LTLIBICONV]) ]) dnl Define AM_ICONV using AC_DEFUN_ONCE for Autoconf >= 2.64, in order to dnl avoid warnings like dnl "warning: AC_REQUIRE: `AM_ICONV' was expanded before it was required". dnl This is tricky because of the way 'aclocal' is implemented: dnl - It requires defining an auxiliary macro whose name ends in AC_DEFUN. dnl Otherwise aclocal's initial scan pass would miss the macro definition. dnl - It requires a line break inside the AC_DEFUN_ONCE and AC_DEFUN expansions. dnl Otherwise aclocal would emit many "Use of uninitialized value $1" dnl warnings. m4_define([gl_iconv_AC_DEFUN], m4_version_prereq([2.64], [[AC_DEFUN_ONCE( [$1], [$2])]], [m4_ifdef([gl_00GNULIB], [[AC_DEFUN_ONCE( [$1], [$2])]], [[AC_DEFUN( [$1], [$2])]])])) gl_iconv_AC_DEFUN([AM_ICONV], [ AM_ICONV_LINK if test "$am_cv_func_iconv" = yes; then AC_MSG_CHECKING([for iconv declaration]) AC_CACHE_VAL([am_cv_proto_iconv], [ AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[ #include #include extern #ifdef __cplusplus "C" #endif #if defined(__STDC__) || defined(_MSC_VER) || defined(__cplusplus) size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); #else size_t iconv(); #endif ]], [[]])], [am_cv_proto_iconv_arg1=""], [am_cv_proto_iconv_arg1="const"]) am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"]) am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'` AC_MSG_RESULT([ $am_cv_proto_iconv]) AC_DEFINE_UNQUOTED([ICONV_CONST], [$am_cv_proto_iconv_arg1], [Define as const if the declaration of iconv() needs const.]) dnl Also substitute ICONV_CONST in the gnulib generated . m4_ifdef([gl_ICONV_H_DEFAULTS], [AC_REQUIRE([gl_ICONV_H_DEFAULTS]) if test -n "$am_cv_proto_iconv_arg1"; then ICONV_CONST="const" fi ]) fi ]) nip2-8.7.0/m4/lcmessage.m40000644000175000017500000000252513350464073012055 00000000000000# lcmessage.m4 serial 7 (gettext-0.18.2) dnl Copyright (C) 1995-2002, 2004-2005, 2008-2014, 2016 Free Software dnl Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper , 1995. # Check whether LC_MESSAGES is available in . AC_DEFUN([gt_LC_MESSAGES], [ AC_CACHE_CHECK([for LC_MESSAGES], [gt_cv_val_LC_MESSAGES], [AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include ]], [[return LC_MESSAGES]])], [gt_cv_val_LC_MESSAGES=yes], [gt_cv_val_LC_MESSAGES=no])]) if test $gt_cv_val_LC_MESSAGES = yes; then AC_DEFINE([HAVE_LC_MESSAGES], [1], [Define if your file defines LC_MESSAGES.]) fi ]) nip2-8.7.0/m4/ltsugar.m40000644000175000017500000001044013350464075011570 00000000000000# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- # # Copyright (C) 2004-2005, 2007-2008, 2011-2015 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 ]) nip2-8.7.0/m4/ltoptions.m40000644000175000017500000003426213350464075012152 00000000000000# Helper functions for option handling. -*- Autoconf -*- # # Copyright (C) 2004-2005, 2007-2009, 2011-2015 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 8 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_UNLESS_OPTIONS([LT_INIT], [aix-soname=aix aix-soname=both aix-soname=svr4], [_LT_WITH_AIX_SONAME([aix])]) ]) ])# _LT_SET_OPTIONS ## --------------------------------- ## ## Macros to handle LT_INIT options. ## ## --------------------------------- ## # _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) # ----------------------------------------- m4_define([_LT_MANGLE_DEFUN], [[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) # LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) # ----------------------------------------------- m4_define([LT_OPTION_DEFINE], [m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl ])# LT_OPTION_DEFINE # dlopen # ------ LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes ]) AU_DEFUN([AC_LIBTOOL_DLOPEN], [_LT_SET_OPTION([LT_INIT], [dlopen]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'dlopen' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) # win32-dll # --------- # Declare package support for building win32 dll's. LT_OPTION_DEFINE([LT_INIT], [win32-dll], [enable_win32_dll=yes case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) AC_CHECK_TOOL(AS, as, false) AC_CHECK_TOOL(DLLTOOL, dlltool, false) AC_CHECK_TOOL(OBJDUMP, objdump, false) ;; esac test -z "$AS" && AS=as _LT_DECL([], [AS], [1], [Assembler program])dnl test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl ])# win32-dll AU_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_REQUIRE([AC_CANONICAL_HOST])dnl _LT_SET_OPTION([LT_INIT], [win32-dll]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'win32-dll' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) # _LT_ENABLE_SHARED([DEFAULT]) # ---------------------------- # implement the --enable-shared flag, and supports the 'shared' and # 'disable-shared' LT_INIT options. # DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. m4_define([_LT_ENABLE_SHARED], [m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([shared], [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS=$lt_save_ifs ;; esac], [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) _LT_DECL([build_libtool_libs], [enable_shared], [0], [Whether or not to build shared libraries]) ])# _LT_ENABLE_SHARED LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) # Old names: AC_DEFUN([AC_ENABLE_SHARED], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) ]) AC_DEFUN([AC_DISABLE_SHARED], [_LT_SET_OPTION([LT_INIT], [disable-shared]) ]) AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_SHARED], []) dnl AC_DEFUN([AM_DISABLE_SHARED], []) # _LT_ENABLE_STATIC([DEFAULT]) # ---------------------------- # implement the --enable-static flag, and support the 'static' and # 'disable-static' LT_INIT options. # DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. m4_define([_LT_ENABLE_STATIC], [m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([static], [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS=$lt_save_ifs ;; esac], [enable_static=]_LT_ENABLE_STATIC_DEFAULT) _LT_DECL([build_old_libs], [enable_static], [0], [Whether or not to build static libraries]) ])# _LT_ENABLE_STATIC LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) # Old names: AC_DEFUN([AC_ENABLE_STATIC], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) ]) AC_DEFUN([AC_DISABLE_STATIC], [_LT_SET_OPTION([LT_INIT], [disable-static]) ]) AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_STATIC], []) dnl AC_DEFUN([AM_DISABLE_STATIC], []) # _LT_ENABLE_FAST_INSTALL([DEFAULT]) # ---------------------------------- # implement the --enable-fast-install flag, and support the 'fast-install' # and 'disable-fast-install' LT_INIT options. # DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. m4_define([_LT_ENABLE_FAST_INSTALL], [m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([fast-install], [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS=$lt_save_ifs ;; esac], [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) _LT_DECL([fast_install], [enable_fast_install], [0], [Whether or not to optimize for fast installation])dnl ])# _LT_ENABLE_FAST_INSTALL LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) # Old names: AU_DEFUN([AC_ENABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'fast-install' option into LT_INIT's first parameter.]) ]) AU_DEFUN([AC_DISABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], [disable-fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'disable-fast-install' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) # _LT_WITH_AIX_SONAME([DEFAULT]) # ---------------------------------- # implement the --with-aix-soname flag, and support the `aix-soname=aix' # and `aix-soname=both' and `aix-soname=svr4' LT_INIT options. DEFAULT # is either `aix', `both' or `svr4'. If omitted, it defaults to `aix'. m4_define([_LT_WITH_AIX_SONAME], [m4_define([_LT_WITH_AIX_SONAME_DEFAULT], [m4_if($1, svr4, svr4, m4_if($1, both, both, aix))])dnl shared_archive_member_spec= case $host,$enable_shared in power*-*-aix[[5-9]]*,yes) AC_MSG_CHECKING([which variant of shared library versioning to provide]) AC_ARG_WITH([aix-soname], [AS_HELP_STRING([--with-aix-soname=aix|svr4|both], [shared library versioning (aka "SONAME") variant to provide on AIX, @<:@default=]_LT_WITH_AIX_SONAME_DEFAULT[@:>@.])], [case $withval in aix|svr4|both) ;; *) AC_MSG_ERROR([Unknown argument to --with-aix-soname]) ;; esac lt_cv_with_aix_soname=$with_aix_soname], [AC_CACHE_VAL([lt_cv_with_aix_soname], [lt_cv_with_aix_soname=]_LT_WITH_AIX_SONAME_DEFAULT) with_aix_soname=$lt_cv_with_aix_soname]) AC_MSG_RESULT([$with_aix_soname]) if test aix != "$with_aix_soname"; then # For the AIX way of multilib, we name the shared archive member # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o', # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File. # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag, # the AIX toolchain works better with OBJECT_MODE set (default 32). if test 64 = "${OBJECT_MODE-32}"; then shared_archive_member_spec=shr_64 else shared_archive_member_spec=shr fi fi ;; *) with_aix_soname=aix ;; esac _LT_DECL([], [shared_archive_member_spec], [0], [Shared archive member basename, for filename based shared library versioning on AIX])dnl ])# _LT_WITH_AIX_SONAME LT_OPTION_DEFINE([LT_INIT], [aix-soname=aix], [_LT_WITH_AIX_SONAME([aix])]) LT_OPTION_DEFINE([LT_INIT], [aix-soname=both], [_LT_WITH_AIX_SONAME([both])]) LT_OPTION_DEFINE([LT_INIT], [aix-soname=svr4], [_LT_WITH_AIX_SONAME([svr4])]) # _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=m4_default([$1], [default])]) _LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl ])# _LT_WITH_PIC LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) # Old name: AU_DEFUN([AC_LIBTOOL_PICMODE], [_LT_SET_OPTION([LT_INIT], [pic-only]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'pic-only' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) ## ----------------- ## ## LTDL_INIT Options ## ## ----------------- ## m4_define([_LTDL_MODE], []) LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], [m4_define([_LTDL_MODE], [nonrecursive])]) LT_OPTION_DEFINE([LTDL_INIT], [recursive], [m4_define([_LTDL_MODE], [recursive])]) LT_OPTION_DEFINE([LTDL_INIT], [subproject], [m4_define([_LTDL_MODE], [subproject])]) m4_define([_LTDL_TYPE], []) LT_OPTION_DEFINE([LTDL_INIT], [installable], [m4_define([_LTDL_TYPE], [installable])]) LT_OPTION_DEFINE([LTDL_INIT], [convenience], [m4_define([_LTDL_TYPE], [convenience])]) nip2-8.7.0/man/0000755000175000017500000000000013350464160010154 500000000000000nip2-8.7.0/man/Makefile.in0000644000175000017500000004626213350464104012151 00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = man ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BISON = @BISON@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DLLWRAP = @DLLWRAP@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FFTW3_CFLAGS = @FFTW3_CFLAGS@ FFTW3_LIBS = @FFTW3_LIBS@ FGREP = @FGREP@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_LIBS = @GSL_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ IP_CFLAGS = @IP_CFLAGS@ IP_LIBS = @IP_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBGOFFICE_CFLAGS = @LIBGOFFICE_CFLAGS@ LIBGOFFICE_LIBS = @LIBGOFFICE_LIBS@ LIBGSF_CFLAGS = @LIBGSF_CFLAGS@ LIBGSF_LIBS = @LIBGSF_LIBS@ LIBGVC_CFLAGS = @LIBGVC_CFLAGS@ LIBGVC_LIBS = @LIBGVC_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ 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@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ REQUIRED_PACKAGES_CFLAGS = @REQUIRED_PACKAGES_CFLAGS@ REQUIRED_PACKAGES_LIBS = @REQUIRED_PACKAGES_LIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOP_SRCDIR = @TOP_SRCDIR@ UPDATE_DESKTOP_DATABASE = @UPDATE_DESKTOP_DATABASE@ UPDATE_MIME_DATABASE = @UPDATE_MIME_DATABASE@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XDG_OPEN = @XDG_OPEN@ XGETTEXT = @XGETTEXT@ 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@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = man1 all: all-recursive .SUFFIXES: $(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) --foreign man/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign man/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): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-libtool cscopelist-am ctags \ ctags-am distclean distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: nip2-8.7.0/man/Makefile.am0000644000175000017500000000001713224651032012122 00000000000000SUBDIRS = man1 nip2-8.7.0/man/man1/0000755000175000017500000000000013350464160011010 500000000000000nip2-8.7.0/man/man1/nip2.10000644000175000017500000000624513224651032011665 00000000000000.TH NIP2 1 "Oct 4 2004" .SH NAME nip2 \- image processing with the VIPS library .SH SYNOPSIS .B nip2 [filename1 ...] .br .B nip2 -s filename [arg1 ...] .br .B nip2 -e expression [arg1 ...] .SH DESCRIPTION .B nip2 (for New Image Processing) is a tool for manipulating images using the VIPS image processing library. There are three principal modes: .B nip2 [filename1 ...] .br start in GUI mode, loading the named files .B nip2 -e expression [arg1 ...] .br .B nip2 --expression=EXPRESSION [arg1 ...] .br start in no-GUI mode; set main = expression, set list argv to ["filename", "arg1", "arg2", ...], set argc to length of list; print the value of symbol "main" to stdout; exit .B nip2 -s filename [arg1 ...] .br .B nip2 --script=FILENAME [arg1 ...] .br start in no-GUI mode; read in filename as a set of definitions, set list argv to ["filename", "arg1", "arg2", ...], set argc to length of list; print the value of symbol "main" to stdout; exit; useful for running nip2 as an interpreter on unix You can use .B -o to direct output to a file rather than stdout. .B -o filename .br .B --output=FILENAME .br the value of main is written to the named file. If main is a list, the filename is incremented between objects. You can use the suffix to specify the format and options to write in Other options provide finer control over startup and shutdown. If you need to do something strange, don't use -e/-s, use these in combination. .B -b .br .B --batch .br batch (ie. non-GUI) mode .B -m .br .B --no-load-menus .br don't load menus, for faster startup .B -a .br .B --no-load-args .br don't load extra command-line arguments .B -w .br .B --stdin-ws .br load stdin as a workspace .B -d .br .B --stdin-def .br load stdin as a set of definitions .B -p .br .B --print-main .br print the value of main on exit. nip2 will check for a top-level symbol called main, and also check each workspace for a main Finally some other options are useful for debugging, timing and for generating strings for internationalisation. .B -V .br .B --verbose .br produce verbose error messages: handy for debugging in batch mode .B -i .br .B --i18n .br output strings from .def files for internationalisation .B -v .br .B --version .br print version information .B -c .br .B --benchmark .br benchmark: no GUI, just start up and shut down .B -t .br .B --time-save .br time saves: after every image save a popup tells you the time the save took in seconds .B -T .br .B --test .br test: start up (including any arg processing), test for any errors, and exit with an error code if any occured. Useful for running automated tests. .B -x PREFIX .br .B --prefix=PREFIX .br set install prefix: start up as if nip2 had been installed to PREFIX. Useful for running automated tests without installing the thing. .SH EXAMPLES nip2 fred.jpg Start nip2, loading fred.jpg. nip2 -e "2 + 2" Prints 4 to stdout. nip2 -e "99 + Image_file argv?1" -o result.png fred.jpg Load argv1 (fred.jpg), add 99, output to result.png. nip2 -e "Matrix [[1,2],[4,5]] ** -1" -o poop.mat Invert the 2x2 matrix and write the result to poop.mat. .SH COPYRIGHT 2008 (c) Imperial College, London nip2-8.7.0/man/man1/Makefile.in0000644000175000017500000004003113350464104012771 00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = man/man1 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } man1dir = $(mandir)/man1 am__installdirs = "$(DESTDIR)$(man1dir)" NROFF = nroff MANS = $(man_MANS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BISON = @BISON@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DLLWRAP = @DLLWRAP@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FFTW3_CFLAGS = @FFTW3_CFLAGS@ FFTW3_LIBS = @FFTW3_LIBS@ FGREP = @FGREP@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_LIBS = @GSL_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ IP_CFLAGS = @IP_CFLAGS@ IP_LIBS = @IP_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBGOFFICE_CFLAGS = @LIBGOFFICE_CFLAGS@ LIBGOFFICE_LIBS = @LIBGOFFICE_LIBS@ LIBGSF_CFLAGS = @LIBGSF_CFLAGS@ LIBGSF_LIBS = @LIBGSF_LIBS@ LIBGVC_CFLAGS = @LIBGVC_CFLAGS@ LIBGVC_LIBS = @LIBGVC_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ 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@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ REQUIRED_PACKAGES_CFLAGS = @REQUIRED_PACKAGES_CFLAGS@ REQUIRED_PACKAGES_LIBS = @REQUIRED_PACKAGES_LIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOP_SRCDIR = @TOP_SRCDIR@ UPDATE_DESKTOP_DATABASE = @UPDATE_DESKTOP_DATABASE@ UPDATE_MIME_DATABASE = @UPDATE_MIME_DATABASE@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XDG_OPEN = @XDG_OPEN@ XGETTEXT = @XGETTEXT@ 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@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ man_MANS = nip2.1 EXTRA_DIST = ${man_MANS} all: all-am .SUFFIXES: $(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) --foreign man/man1/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign man/man1/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): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-man1: $(man_MANS) @$(NORMAL_INSTALL) @list1=''; \ list2='$(man_MANS)'; \ test -n "$(man1dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.1[a-z]*$$/p'; \ fi; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ done; } uninstall-man1: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man1dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.1[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: 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 check: check-am all-am: Makefile $(MANS) installdirs: for dir in "$(DESTDIR)$(man1dir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-man install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-man1 install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-man uninstall-man: uninstall-man1 .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-man1 install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags-am uninstall uninstall-am uninstall-man \ uninstall-man1 .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: nip2-8.7.0/man/man1/Makefile.am0000644000175000017500000000005413224651032012757 00000000000000man_MANS = nip2.1 EXTRA_DIST = ${man_MANS} nip2-8.7.0/config.h.in0000644000175000017500000001671213350464156011360 00000000000000/* config.h.in. Generated from configure.ac by autoheader. */ /* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP systems. This function is required for `alloca.c' support on those systems. */ #undef CRAY_STACKSEG_END /* Define to 1 if using `alloca.c'. */ #undef C_ALLOCA /* always defined to indicate that i18n is enabled */ #undef ENABLE_NLS /* The prefix for our gettext translation domains. */ #undef GETTEXT_PACKAGE /* Define to 1 if you have `alloca', as a function or macro. */ #undef HAVE_ALLOCA /* Define to 1 if you have and it should be used (not on Ultrix). */ #undef HAVE_ALLOCA_H /* Define to 1 if you have the `bind_textdomain_codeset' function. */ #undef HAVE_BIND_TEXTDOMAIN_CODESET /* Define to 1 if you have the Mac OS X function CFLocaleCopyCurrent in the CoreFoundation framework. */ #undef HAVE_CFLOCALECOPYCURRENT /* Define to 1 if you have the Mac OS X function CFPreferencesCopyAppValue in the CoreFoundation framework. */ #undef HAVE_CFPREFERENCESCOPYAPPVALUE /* Define to 1 if you have the `dcgettext' function. */ #undef HAVE_DCGETTEXT /* Define to 1 if you have the header file, and it defines `DIR'. */ #undef HAVE_DIRENT_H /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H /* Define to 1 if you don't have `vprintf' but do have `_doprnt.' */ #undef HAVE_DOPRNT /* define if you have fftw3 installed. */ #undef HAVE_FFTW3 /* using flex, rather than lex */ #undef HAVE_FLEX /* Define to 1 if your system has a working POSIX `fnmatch' function. */ #undef HAVE_FNMATCH /* Define to 1 if you have the header file. */ #undef HAVE_FNMATCH_H /* Define to 1 if you have the `getcwd' function. */ #undef HAVE_GETCWD /* Define to 1 if you have the `geteuid' function. */ #undef HAVE_GETEUID /* Define to 1 if you have the `getpwent' function. */ #undef HAVE_GETPWENT /* Define to 1 if you have the `getpwnam' function. */ #undef HAVE_GETPWNAM /* Define to 1 if you have the `getrlimit' function. */ #undef HAVE_GETRLIMIT /* Define if the GNU gettext() function is already present or preinstalled. */ #undef HAVE_GETTEXT /* Define to 1 if you have the `getwd' function. */ #undef HAVE_GETWD /* define if you have GRegex */ #undef HAVE_GREGEX /* define if you have gsl installed. */ #undef HAVE_GSL /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define if your file defines LC_MESSAGES. */ #undef HAVE_LC_MESSAGES /* define if you have libgoffice installed. */ #undef HAVE_LIBGOFFICE /* define if you have libgsf installed. */ #undef HAVE_LIBGSF /* define if you have libgvc installed. */ #undef HAVE_LIBGVC /* Define to 1 if you have the header file. */ #undef HAVE_LIMITS_H /* Define to 1 if you have the header file. */ #undef HAVE_LOCALE_H /* Define to 1 if you have the header file. */ #undef HAVE_MALLOC_H /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the header file, and it defines `DIR'. */ #undef HAVE_NDIR_H /* Define to 1 if you have the `putenv' function. */ #undef HAVE_PUTENV /* Define to 1 if you have the header file. */ #undef HAVE_PWD_H /* Define to 1 if you have the `regcomp' function. */ #undef HAVE_REGCOMP /* define if you have gdk_window_set_opacity() */ #undef HAVE_SET_OPACITY /* 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 /* have strccpy() in -lgen */ #undef HAVE_STRCCPY /* Define to 1 if you have the `strcspn' function. */ #undef HAVE_STRCSPN /* 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 `strspn' function. */ #undef HAVE_STRSPN /* Define to 1 if you have the `strstr' function. */ #undef HAVE_STRSTR /* Define to 1 if you have the header file, and it defines `DIR'. */ #undef HAVE_SYS_DIR_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_MOUNT_H /* Define to 1 if you have the header file, and it defines `DIR'. */ #undef HAVE_SYS_NDIR_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_PARAM_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_RESOURCE_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STATVFS_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_TIME_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_SYS_VFS_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_WAIT_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define to 1 if you have the `vprintf' function. */ #undef HAVE_VPRINTF /* define if you have xdg-open */ #undef HAVE_XDG_OPEN /* Define to the sub-directory where libtool stores uninstalled libraries. */ #undef LT_OBJDIR /* Major version number */ #undef MAJOR_VERSION /* Micro version number */ #undef MICRO_VERSION /* Minor version number */ #undef MINOR_VERSION /* native Mac OS X */ #undef OS_DARWIN /* native win32 */ #undef OS_WIN32 /* 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 /* If using the C implementation of alloca, define if you know the direction of stack growth for your system; otherwise it will be automatically deduced at runtime. STACK_DIRECTION > 0 => grows toward higher addresses STACK_DIRECTION < 0 => grows toward lower addresses STACK_DIRECTION = 0 => direction of growth unknown */ #undef STACK_DIRECTION /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Define to 1 if your declares `struct tm'. */ #undef TM_IN_SYS_TIME /* define if you have GtkInfoBar */ #undef USE_INFOBAR /* define if you have gtk_notebook_set_action_widget() */ #undef USE_NOTEBOOK_ACTION /* define if you have gtk_notebook_set_group_name() */ #undef USE_NOTEBOOK_GROUP_NAME /* Version number of package */ #undef VERSION /* Define if using the dmalloc debugging malloc package */ #undef WITH_DMALLOC /* path of xdg-open binary */ #undef XDG_OPEN /* Define to 1 if lex declares yyleng to be yy_size_t. */ #undef YYLENG_IS_YY_SIZE_T /* Define to 1 if `lex' declares `yytext' as a `char *' by default, not a `char[]'. */ #undef YYTEXT_POINTER /* Enable large inode numbers on Mac OS X 10.5. */ #ifndef _DARWIN_USE_64_BIT_INODE # define _DARWIN_USE_64_BIT_INODE 1 #endif /* Number of bits in a file offset, on hosts where this is settable. */ #undef _FILE_OFFSET_BITS /* Define for large files, on AIX-style hosts. */ #undef _LARGE_FILES /* Define to empty if `const' does not conform to ANSI C. */ #undef const /* Define to `unsigned int' if does not define. */ #undef size_t nip2-8.7.0/ltmain.sh0000644000175000017500000117147413350464075011165 00000000000000#! /bin/sh ## DO NOT EDIT - This file generated from ./build-aux/ltmain.in ## by inline-source v2014-01-03.01 # libtool (GNU libtool) 2.4.6 # Provide generalized library-building support services. # Written by Gordon Matzigkeit , 1996 # Copyright (C) 1996-2015 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 this program. If not, see . PROGRAM=libtool PACKAGE=libtool VERSION="2.4.6 Debian-2.4.6-2" package_revision=2.4.6 ## ------ ## ## Usage. ## ## ------ ## # Run './libtool --help' for help with using this script from the # command line. ## ------------------------------- ## ## User overridable command paths. ## ## ------------------------------- ## # After configure completes, it has a better idea of some of the # shell tools we need than the defaults used by the functions shared # with bootstrap, so set those here where they can still be over- # ridden by the user, but otherwise take precedence. : ${AUTOCONF="autoconf"} : ${AUTOMAKE="automake"} ## -------------------------- ## ## Source external libraries. ## ## -------------------------- ## # Much of our low-level functionality needs to be sourced from external # libraries, which are installed to $pkgauxdir. # Set a version string for this script. scriptversion=2015-01-20.17; # UTC # General shell script boiler plate, and helper functions. # Written by Gary V. Vaughan, 2004 # Copyright (C) 2004-2015 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. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # 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. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNES 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 . # Please report bugs or propose patches to gary@gnu.org. ## ------ ## ## Usage. ## ## ------ ## # Evaluate this file near the top of your script to gain access to # the functions and variables defined here: # # . `echo "$0" | ${SED-sed} 's|[^/]*$||'`/build-aux/funclib.sh # # If you need to override any of the default environment variable # settings, do that before evaluating this file. ## -------------------- ## ## Shell normalisation. ## ## -------------------- ## # Some shells need a little help to be as Bourne compatible as possible. # Before doing anything else, make sure all that help has been provided! 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 # NLS nuisances: We save the old values in case they are required later. _G_user_locale= _G_safe_locale= for _G_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test set = \"\${$_G_var+set}\"; then save_$_G_var=\$$_G_var $_G_var=C export $_G_var _G_user_locale=\"$_G_var=\\\$save_\$_G_var; \$_G_user_locale\" _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\" fi" done # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Make sure IFS has a sensible default sp=' ' nl=' ' IFS="$sp $nl" # There are apparently some retarded systems that use ';' as a PATH separator! 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 ## ------------------------- ## ## Locate command utilities. ## ## ------------------------- ## # func_executable_p FILE # ---------------------- # Check that FILE is an executable regular file. func_executable_p () { test -f "$1" && test -x "$1" } # func_path_progs PROGS_LIST CHECK_FUNC [PATH] # -------------------------------------------- # Search for either a program that responds to --version with output # containing "GNU", or else returned by CHECK_FUNC otherwise, by # trying all the directories in PATH with each of the elements of # PROGS_LIST. # # CHECK_FUNC should accept the path to a candidate program, and # set $func_check_prog_result if it truncates its output less than # $_G_path_prog_max characters. func_path_progs () { _G_progs_list=$1 _G_check_func=$2 _G_PATH=${3-"$PATH"} _G_path_prog_max=0 _G_path_prog_found=false _G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:} for _G_dir in $_G_PATH; do IFS=$_G_save_IFS test -z "$_G_dir" && _G_dir=. for _G_prog_name in $_G_progs_list; do for _exeext in '' .EXE; do _G_path_prog=$_G_dir/$_G_prog_name$_exeext func_executable_p "$_G_path_prog" || continue case `"$_G_path_prog" --version 2>&1` in *GNU*) func_path_progs_result=$_G_path_prog _G_path_prog_found=: ;; *) $_G_check_func $_G_path_prog func_path_progs_result=$func_check_prog_result ;; esac $_G_path_prog_found && break 3 done done done IFS=$_G_save_IFS test -z "$func_path_progs_result" && { echo "no acceptable sed could be found in \$PATH" >&2 exit 1 } } # We want to be able to use the functions in this file before configure # has figured out where the best binaries are kept, which means we have # to search for them ourselves - except when the results are already set # where we skip the searches. # Unless the user overrides by setting SED, search the path for either GNU # sed, or the sed that truncates its output the least. test -z "$SED" && { _G_sed_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for _G_i in 1 2 3 4 5 6 7; do _G_sed_script=$_G_sed_script$nl$_G_sed_script done echo "$_G_sed_script" 2>/dev/null | sed 99q >conftest.sed _G_sed_script= func_check_prog_sed () { _G_path_prog=$1 _G_count=0 printf 0123456789 >conftest.in while : do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo '' >> conftest.nl "$_G_path_prog" -f conftest.sed conftest.out 2>/dev/null || break diff conftest.out conftest.nl >/dev/null 2>&1 || break _G_count=`expr $_G_count + 1` if test "$_G_count" -gt "$_G_path_prog_max"; then # Best one so far, save it but keep looking for a better one func_check_prog_result=$_G_path_prog _G_path_prog_max=$_G_count fi # 10*(2^10) chars as input seems more than enough test 10 -lt "$_G_count" && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out } func_path_progs "sed gsed" func_check_prog_sed $PATH:/usr/xpg4/bin rm -f conftest.sed SED=$func_path_progs_result } # Unless the user overrides by setting GREP, search the path for either GNU # grep, or the grep that truncates its output the least. test -z "$GREP" && { func_check_prog_grep () { _G_path_prog=$1 _G_count=0 _G_path_prog_max=0 printf 0123456789 >conftest.in while : do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo 'GREP' >> conftest.nl "$_G_path_prog" -e 'GREP$' -e '-(cannot match)-' conftest.out 2>/dev/null || break diff conftest.out conftest.nl >/dev/null 2>&1 || break _G_count=`expr $_G_count + 1` if test "$_G_count" -gt "$_G_path_prog_max"; then # Best one so far, save it but keep looking for a better one func_check_prog_result=$_G_path_prog _G_path_prog_max=$_G_count fi # 10*(2^10) chars as input seems more than enough test 10 -lt "$_G_count" && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out } func_path_progs "grep ggrep" func_check_prog_grep $PATH:/usr/xpg4/bin GREP=$func_path_progs_result } ## ------------------------------- ## ## User overridable command paths. ## ## ------------------------------- ## # All uppercase variable names are used for environment variables. These # variables can be overridden by the user before calling a script that # uses them if a suitable command of that name is not already available # in the command search PATH. : ${CP="cp -f"} : ${ECHO="printf %s\n"} : ${EGREP="$GREP -E"} : ${FGREP="$GREP -F"} : ${LN_S="ln -s"} : ${MAKE="make"} : ${MKDIR="mkdir"} : ${MV="mv -f"} : ${RM="rm -f"} : ${SHELL="${CONFIG_SHELL-/bin/sh}"} ## -------------------- ## ## Useful sed snippets. ## ## -------------------- ## sed_dirname='s|/[^/]*$||' sed_basename='s|^.*/||' # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. sed_quote_subst='s|\([`"$\\]\)|\\\1|g' # Same as above, but do not quote variable references. sed_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 # that contains forward slashes, into one that contains # (escaped) backslashes. A very naive implementation. sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' # Re-'\' parameter expansions in output of sed_double_quote_subst that # were '\'-ed in input to the same. If an odd number of '\' preceded a # '$' in input to sed_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 '$'. _G_bs='\\' _G_bs2='\\\\' _G_bs4='\\\\\\\\' _G_dollar='\$' sed_double_backslash="\ s/$_G_bs4/&\\ /g s/^$_G_bs2$_G_dollar/$_G_bs&/ s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g s/\n//g" ## ----------------- ## ## Global variables. ## ## ----------------- ## # Except for the global variables explicitly listed below, the following # functions in the '^func_' namespace, and the '^require_' namespace # variables initialised in the 'Resource management' section, sourcing # this file will not pollute your global namespace with anything # else. There's no portable way to scope variables in Bourne shell # though, so actually running these functions will sometimes place # results into a variable named after the function, and often use # temporary variables in the '^_G_' namespace. If you are careful to # avoid using those namespaces casually in your sourcing script, things # should continue to work as you expect. And, of course, you can freely # overwrite any of the functions or variables defined here before # calling anything to customize them. 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. # Allow overriding, eg assuming that you follow the convention of # putting '$debug_cmd' at the start of all your functions, you can get # bash to show function call trace with: # # debug_cmd='eval echo "${FUNCNAME[0]} $*" >&2' bash your-script-name debug_cmd=${debug_cmd-":"} exit_cmd=: # By convention, finish your script with: # # exit $exit_status # # so that you can set exit_status to non-zero if you want to indicate # something went wrong during execution without actually bailing out at # the point of failure. exit_status=$EXIT_SUCCESS # 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 # The name of this program. progname=`$ECHO "$progpath" |$SED "$sed_basename"` # Make sure we have an absolute progpath for reexecution: case $progpath in [\\/]*|[A-Za-z]:\\*) ;; *[\\/]*) progdir=`$ECHO "$progpath" |$SED "$sed_dirname"` progdir=`cd "$progdir" && pwd` progpath=$progdir/$progname ;; *) _G_IFS=$IFS IFS=${PATH_SEPARATOR-:} for progdir in $PATH; do IFS=$_G_IFS test -x "$progdir/$progname" && break done IFS=$_G_IFS test -n "$progdir" || progdir=`pwd` progpath=$progdir/$progname ;; esac ## ----------------- ## ## Standard options. ## ## ----------------- ## # The following options affect the operation of the functions defined # below, and should be set appropriately depending on run-time para- # meters passed on the command line. opt_dry_run=false opt_quiet=false opt_verbose=false # Categories 'all' and 'none' are always available. Append any others # you will pass as the first argument to func_warning from your own # code. warning_categories= # By default, display warnings according to 'opt_warning_types'. Set # 'warning_func' to ':' to elide all warnings, or func_fatal_error to # treat the next displayed warning as a fatal error. warning_func=func_warn_and_continue # Set to 'all' to display all warnings, 'none' to suppress all # warnings, or a space delimited list of some subset of # 'warning_categories' to display only the listed warnings. opt_warning_types=all ## -------------------- ## ## Resource management. ## ## -------------------- ## # This section contains definitions for functions that each ensure a # particular resource (a file, or a non-empty configuration variable for # example) is available, and if appropriate to extract default values # from pertinent package files. Call them using their associated # 'require_*' variable to ensure that they are executed, at most, once. # # It's entirely deliberate that calling these functions can set # variables that don't obey the namespace limitations obeyed by the rest # of this file, in order that that they be as useful as possible to # callers. # require_term_colors # ------------------- # Allow display of bold text on terminals that support it. require_term_colors=func_require_term_colors func_require_term_colors () { $debug_cmd test -t 1 && { # COLORTERM and USE_ANSI_COLORS environment variables take # precedence, because most terminfo databases neglect to describe # whether color sequences are supported. test -n "${COLORTERM+set}" && : ${USE_ANSI_COLORS="1"} if test 1 = "$USE_ANSI_COLORS"; then # Standard ANSI escape sequences tc_reset='' tc_bold=''; tc_standout='' tc_red=''; tc_green='' tc_blue=''; tc_cyan='' else # Otherwise trust the terminfo database after all. test -n "`tput sgr0 2>/dev/null`" && { tc_reset=`tput sgr0` test -n "`tput bold 2>/dev/null`" && tc_bold=`tput bold` tc_standout=$tc_bold test -n "`tput smso 2>/dev/null`" && tc_standout=`tput smso` test -n "`tput setaf 1 2>/dev/null`" && tc_red=`tput setaf 1` test -n "`tput setaf 2 2>/dev/null`" && tc_green=`tput setaf 2` test -n "`tput setaf 4 2>/dev/null`" && tc_blue=`tput setaf 4` test -n "`tput setaf 5 2>/dev/null`" && tc_cyan=`tput setaf 5` } fi } require_term_colors=: } ## ----------------- ## ## Function library. ## ## ----------------- ## # This section contains a variety of useful functions to call in your # scripts. Take note of the portable wrappers for features provided by # some modern shells, which will fall back to slower equivalents on # less featureful shells. # func_append VAR VALUE # --------------------- # Append VALUE onto the existing contents of VAR. # We should try to minimise forks, especially on Windows where they are # unreasonably slow, so skip the feature probes when bash or zsh are # being used: if test set = "${BASH_VERSION+set}${ZSH_VERSION+set}"; then : ${_G_HAVE_ARITH_OP="yes"} : ${_G_HAVE_XSI_OPS="yes"} # The += operator was introduced in bash 3.1 case $BASH_VERSION in [12].* | 3.0 | 3.0*) ;; *) : ${_G_HAVE_PLUSEQ_OP="yes"} ;; esac fi # _G_HAVE_PLUSEQ_OP # Can be empty, in which case the shell is probed, "yes" if += is # useable or anything else if it does not work. test -z "$_G_HAVE_PLUSEQ_OP" \ && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \ && _G_HAVE_PLUSEQ_OP=yes if test yes = "$_G_HAVE_PLUSEQ_OP" then # This is an XSI compatible shell, allowing a faster implementation... eval 'func_append () { $debug_cmd eval "$1+=\$2" }' else # ...otherwise fall back to using expr, which is often a shell builtin. func_append () { $debug_cmd eval "$1=\$$1\$2" } fi # func_append_quoted VAR VALUE # ---------------------------- # Quote VALUE and append to the end of shell variable VAR, separated # by a space. if test yes = "$_G_HAVE_PLUSEQ_OP"; then eval 'func_append_quoted () { $debug_cmd func_quote_for_eval "$2" eval "$1+=\\ \$func_quote_for_eval_result" }' else func_append_quoted () { $debug_cmd func_quote_for_eval "$2" eval "$1=\$$1\\ \$func_quote_for_eval_result" } fi # func_append_uniq VAR VALUE # -------------------------- # Append unique VALUE onto the existing contents of VAR, assuming # entries are delimited by the first character of VALUE. For example: # # func_append_uniq options " --another-option option-argument" # # will only append to $options if " --another-option option-argument " # is not already present somewhere in $options already (note spaces at # each end implied by leading space in second argument). func_append_uniq () { $debug_cmd eval _G_current_value='`$ECHO $'$1'`' _G_delim=`expr "$2" : '\(.\)'` case $_G_delim$_G_current_value$_G_delim in *"$2$_G_delim"*) ;; *) func_append "$@" ;; esac } # func_arith TERM... # ------------------ # Set func_arith_result to the result of evaluating TERMs. test -z "$_G_HAVE_ARITH_OP" \ && (eval 'test 2 = $(( 1 + 1 ))') 2>/dev/null \ && _G_HAVE_ARITH_OP=yes if test yes = "$_G_HAVE_ARITH_OP"; then eval 'func_arith () { $debug_cmd func_arith_result=$(( $* )) }' else func_arith () { $debug_cmd func_arith_result=`expr "$@"` } fi # func_basename FILE # ------------------ # Set func_basename_result to FILE with everything up to and including # the last / stripped. if test yes = "$_G_HAVE_XSI_OPS"; then # If this shell supports suffix pattern removal, then use it to avoid # forking. Hide the definitions single quotes in case the shell chokes # on unsupported syntax... _b='func_basename_result=${1##*/}' _d='case $1 in */*) func_dirname_result=${1%/*}$2 ;; * ) func_dirname_result=$3 ;; esac' else # ...otherwise fall back to using sed. _b='func_basename_result=`$ECHO "$1" |$SED "$sed_basename"`' _d='func_dirname_result=`$ECHO "$1" |$SED "$sed_dirname"` if test "X$func_dirname_result" = "X$1"; then func_dirname_result=$3 else func_append func_dirname_result "$2" fi' fi eval 'func_basename () { $debug_cmd '"$_b"' }' # func_dirname FILE APPEND NONDIR_REPLACEMENT # ------------------------------------------- # Compute the dirname of FILE. If nonempty, add APPEND to the result, # otherwise set result to NONDIR_REPLACEMENT. eval 'func_dirname () { $debug_cmd '"$_d"' }' # 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" # For efficiency, we do not delegate to the functions above but instead # duplicate the functionality here. eval 'func_dirname_and_basename () { $debug_cmd '"$_b"' '"$_d"' }' # func_echo ARG... # ---------------- # Echo program name prefixed message. func_echo () { $debug_cmd _G_message=$* func_echo_IFS=$IFS IFS=$nl for _G_line in $_G_message; do IFS=$func_echo_IFS $ECHO "$progname: $_G_line" done IFS=$func_echo_IFS } # func_echo_all ARG... # -------------------- # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } # func_echo_infix_1 INFIX ARG... # ------------------------------ # Echo program name, followed by INFIX on the first line, with any # additional lines not showing INFIX. func_echo_infix_1 () { $debug_cmd $require_term_colors _G_infix=$1; shift _G_indent=$_G_infix _G_prefix="$progname: $_G_infix: " _G_message=$* # Strip color escape sequences before counting printable length for _G_tc in "$tc_reset" "$tc_bold" "$tc_standout" "$tc_red" "$tc_green" "$tc_blue" "$tc_cyan" do test -n "$_G_tc" && { _G_esc_tc=`$ECHO "$_G_tc" | $SED "$sed_make_literal_regex"` _G_indent=`$ECHO "$_G_indent" | $SED "s|$_G_esc_tc||g"` } done _G_indent="$progname: "`echo "$_G_indent" | $SED 's|.| |g'`" " ## exclude from sc_prohibit_nested_quotes func_echo_infix_1_IFS=$IFS IFS=$nl for _G_line in $_G_message; do IFS=$func_echo_infix_1_IFS $ECHO "$_G_prefix$tc_bold$_G_line$tc_reset" >&2 _G_prefix=$_G_indent done IFS=$func_echo_infix_1_IFS } # func_error ARG... # ----------------- # Echo program name prefixed message to standard error. func_error () { $debug_cmd $require_term_colors func_echo_infix_1 " $tc_standout${tc_red}error$tc_reset" "$*" >&2 } # func_fatal_error ARG... # ----------------------- # Echo program name prefixed message to standard error, and exit. func_fatal_error () { $debug_cmd func_error "$*" exit $EXIT_FAILURE } # func_grep EXPRESSION FILENAME # ----------------------------- # Check whether EXPRESSION matches any line of FILENAME, without output. func_grep () { $debug_cmd $GREP "$1" "$2" >/dev/null 2>&1 } # func_len STRING # --------------- # Set func_len_result to the length of STRING. STRING may not # start with a hyphen. test -z "$_G_HAVE_XSI_OPS" \ && (eval 'x=a/b/c; test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ && _G_HAVE_XSI_OPS=yes if test yes = "$_G_HAVE_XSI_OPS"; then eval 'func_len () { $debug_cmd func_len_result=${#1} }' else func_len () { $debug_cmd func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` } fi # func_mkdir_p DIRECTORY-PATH # --------------------------- # Make sure the entire path to DIRECTORY-PATH is available. func_mkdir_p () { $debug_cmd _G_directory_path=$1 _G_dir_list= if test -n "$_G_directory_path" && test : != "$opt_dry_run"; then # Protect directory names starting with '-' case $_G_directory_path in -*) _G_directory_path=./$_G_directory_path ;; esac # While some portion of DIR does not yet exist... while test ! -d "$_G_directory_path"; do # ...make a list in topmost first order. Use a colon delimited # list incase some portion of path contains whitespace. _G_dir_list=$_G_directory_path:$_G_dir_list # If the last portion added has no slash in it, the list is done case $_G_directory_path in */*) ;; *) break ;; esac # ...otherwise throw away the child directory and loop _G_directory_path=`$ECHO "$_G_directory_path" | $SED -e "$sed_dirname"` done _G_dir_list=`$ECHO "$_G_dir_list" | $SED 's|:*$||'` func_mkdir_p_IFS=$IFS; IFS=: for _G_dir in $_G_dir_list; do IFS=$func_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 "$_G_dir" 2>/dev/null || : done IFS=$func_mkdir_p_IFS # Bail out if we (or some other process) failed to create a directory. test -d "$_G_directory_path" || \ func_fatal_error "Failed to create '$1'" fi } # func_mktempdir [BASENAME] # ------------------------- # Make a temporary directory that won't clash with other running # libtool processes, and avoids race conditions if possible. If # given, BASENAME is the basename for that directory. func_mktempdir () { $debug_cmd _G_template=${TMPDIR-/tmp}/${1-$progname} if test : = "$opt_dry_run"; then # Return a directory name, but don't create it in dry-run mode _G_tmpdir=$_G_template-$$ else # If mktemp works, use that first and foremost _G_tmpdir=`mktemp -d "$_G_template-XXXXXXXX" 2>/dev/null` if test ! -d "$_G_tmpdir"; then # Failing that, at least try and use $RANDOM to avoid a race _G_tmpdir=$_G_template-${RANDOM-0}$$ func_mktempdir_umask=`umask` umask 0077 $MKDIR "$_G_tmpdir" umask $func_mktempdir_umask fi # If we're not in dry-run mode, bomb out on failure test -d "$_G_tmpdir" || \ func_fatal_error "cannot create temporary directory '$_G_tmpdir'" fi $ECHO "$_G_tmpdir" } # 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. func_normal_abspath () { $debug_cmd # These SED scripts presuppose an absolute path with a trailing slash. _G_pathcar='s|^/\([^/]*\).*$|\1|' _G_pathcdr='s|^/[^/]*||' _G_removedotparts=':dotsl s|/\./|/|g t dotsl s|/\.$|/|' _G_collapseslashes='s|/\{1,\}|/|g' _G_finalslash='s|/*$|/|' # 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 "$_G_removedotparts" -e "$_G_collapseslashes" -e "$_G_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 "$_G_pathcar"` func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$_G_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_append 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_notquiet ARG... # -------------------- # Echo program name prefixed message only when not in quiet mode. func_notquiet () { $debug_cmd $opt_quiet || 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_relative_path SRCDIR DSTDIR # -------------------------------- # Set func_relative_path_result to the relative path from SRCDIR to DSTDIR. func_relative_path () { $debug_cmd 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 -z "$func_relative_path_tlibdir"; 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 -n "$func_stripname_result"; then func_append func_relative_path_result "/$func_stripname_result" fi # Normalisation. If bindir is libdir, return '.' else relative path. if test -n "$func_relative_path_result"; then func_stripname './' '' "$func_relative_path_result" func_relative_path_result=$func_stripname_result fi test -n "$func_relative_path_result" || func_relative_path_result=. : } # func_quote_for_eval ARG... # -------------------------- # Aesthetically quote ARGs to be evaled later. # This function returns two values: # i) func_quote_for_eval_result # double-quoted, suitable for a subsequent eval # ii) func_quote_for_eval_unquoted_result # has all characters that are still active within double # quotes backslashified. func_quote_for_eval () { $debug_cmd func_quote_for_eval_unquoted_result= func_quote_for_eval_result= while test 0 -lt $#; do case $1 in *[\\\`\"\$]*) _G_unquoted_arg=`printf '%s\n' "$1" |$SED "$sed_quote_subst"` ;; *) _G_unquoted_arg=$1 ;; esac if test -n "$func_quote_for_eval_unquoted_result"; then func_append func_quote_for_eval_unquoted_result " $_G_unquoted_arg" else func_append func_quote_for_eval_unquoted_result "$_G_unquoted_arg" fi case $_G_unquoted_arg in # Double-quote args containing shell metacharacters to delay # word splitting, command substitution and variable expansion # for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") _G_quoted_arg=\"$_G_unquoted_arg\" ;; *) _G_quoted_arg=$_G_unquoted_arg ;; esac if test -n "$func_quote_for_eval_result"; then func_append func_quote_for_eval_result " $_G_quoted_arg" else func_append func_quote_for_eval_result "$_G_quoted_arg" fi shift done } # 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 () { $debug_cmd case $1 in *[\\\`\"]*) _G_arg=`$ECHO "$1" | $SED \ -e "$sed_double_quote_subst" -e "$sed_double_backslash"` ;; *) _G_arg=$1 ;; esac case $_G_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. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") _G_arg=\"$_G_arg\" ;; esac func_quote_for_expand_result=$_G_arg } # func_stripname PREFIX SUFFIX NAME # --------------------------------- # strip PREFIX and SUFFIX from NAME, and store in func_stripname_result. # 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). if test yes = "$_G_HAVE_XSI_OPS"; then eval 'func_stripname () { $debug_cmd # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are # positional parameters, so assign one to ordinary variable first. func_stripname_result=$3 func_stripname_result=${func_stripname_result#"$1"} func_stripname_result=${func_stripname_result%"$2"} }' else func_stripname () { $debug_cmd case $2 in .*) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%\\\\$2\$%%"`;; *) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%$2\$%%"`;; esac } fi # func_show_eval CMD [FAIL_EXP] # ----------------------------- # Unless opt_quiet 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 () { $debug_cmd _G_cmd=$1 _G_fail_exp=${2-':'} func_quote_for_expand "$_G_cmd" eval "func_notquiet $func_quote_for_expand_result" $opt_dry_run || { eval "$_G_cmd" _G_status=$? if test 0 -ne "$_G_status"; then eval "(exit $_G_status); $_G_fail_exp" fi } } # func_show_eval_locale CMD [FAIL_EXP] # ------------------------------------ # Unless opt_quiet 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 () { $debug_cmd _G_cmd=$1 _G_fail_exp=${2-':'} $opt_quiet || { func_quote_for_expand "$_G_cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || { eval "$_G_user_locale $_G_cmd" _G_status=$? eval "$_G_safe_locale" if test 0 -ne "$_G_status"; then eval "(exit $_G_status); $_G_fail_exp" 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 () { $debug_cmd case $1 in [0-9]* | *[!a-zA-Z0-9_]*) func_tr_sh_result=`$ECHO "$1" | $SED -e 's/^\([0-9]\)/_\1/' -e 's/[^a-zA-Z0-9_]/_/g'` ;; * ) func_tr_sh_result=$1 ;; esac } # func_verbose ARG... # ------------------- # Echo program name prefixed message in verbose mode only. func_verbose () { $debug_cmd $opt_verbose && func_echo "$*" : } # func_warn_and_continue ARG... # ----------------------------- # Echo program name prefixed warning message to standard error. func_warn_and_continue () { $debug_cmd $require_term_colors func_echo_infix_1 "${tc_red}warning$tc_reset" "$*" >&2 } # func_warning CATEGORY ARG... # ---------------------------- # Echo program name prefixed warning message to standard error. Warning # messages can be filtered according to CATEGORY, where this function # elides messages where CATEGORY is not listed in the global variable # 'opt_warning_types'. func_warning () { $debug_cmd # CATEGORY must be in the warning_categories list! case " $warning_categories " in *" $1 "*) ;; *) func_internal_error "invalid warning category '$1'" ;; esac _G_category=$1 shift case " $opt_warning_types " in *" $_G_category "*) $warning_func ${1+"$@"} ;; esac } # func_sort_ver VER1 VER2 # ----------------------- # 'sort -V' is not generally available. # Note this deviates from the version comparison in automake # in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a # but this should suffice as we won't be specifying old # version formats or redundant trailing .0 in bootstrap.conf. # If we did want full compatibility then we should probably # use m4_version_compare from autoconf. func_sort_ver () { $debug_cmd printf '%s\n%s\n' "$1" "$2" \ | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n -k 5,5n -k 6,6n -k 7,7n -k 8,8n -k 9,9n } # func_lt_ver PREV CURR # --------------------- # Return true if PREV and CURR are in the correct order according to # func_sort_ver, otherwise false. Use it like this: # # func_lt_ver "$prev_ver" "$proposed_ver" || func_fatal_error "..." func_lt_ver () { $debug_cmd test "x$1" = x`func_sort_ver "$1" "$2" | $SED 1q` } # Local variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" # time-stamp-time-zone: "UTC" # End: #! /bin/sh # Set a version string for this script. scriptversion=2014-01-07.03; # UTC # A portable, pluggable option parser for Bourne shell. # Written by Gary V. Vaughan, 2010 # Copyright (C) 2010-2015 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. # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # Please report bugs or propose patches to gary@gnu.org. ## ------ ## ## Usage. ## ## ------ ## # This file is a library for parsing options in your shell scripts along # with assorted other useful supporting features that you can make use # of too. # # For the simplest scripts you might need only: # # #!/bin/sh # . relative/path/to/funclib.sh # . relative/path/to/options-parser # scriptversion=1.0 # func_options ${1+"$@"} # eval set dummy "$func_options_result"; shift # ...rest of your script... # # In order for the '--version' option to work, you will need to have a # suitably formatted comment like the one at the top of this file # starting with '# Written by ' and ending with '# warranty; '. # # For '-h' and '--help' to work, you will also need a one line # description of your script's purpose in a comment directly above the # '# Written by ' line, like the one at the top of this file. # # The default options also support '--debug', which will turn on shell # execution tracing (see the comment above debug_cmd below for another # use), and '--verbose' and the func_verbose function to allow your script # to display verbose messages only when your user has specified # '--verbose'. # # After sourcing this file, you can plug processing for additional # options by amending the variables from the 'Configuration' section # below, and following the instructions in the 'Option parsing' # section further down. ## -------------- ## ## Configuration. ## ## -------------- ## # You should override these variables in your script after sourcing this # file so that they reflect the customisations you have added to the # option parser. # The usage line for option parsing errors and the start of '-h' and # '--help' output messages. You can embed shell variables for delayed # expansion at the time the message is displayed, but you will need to # quote other shell meta-characters carefully to prevent them being # expanded when the contents are evaled. usage='$progpath [OPTION]...' # Short help message in response to '-h' and '--help'. Add to this or # override it after sourcing this library to reflect the full set of # options your script accepts. usage_message="\ --debug enable verbose shell tracing -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all] -v, --verbose verbosely report processing --version print version information and exit -h, --help print short or long help message and exit " # Additional text appended to 'usage_message' in response to '--help'. long_help_message=" Warning categories include: 'all' show all warnings 'none' turn off all the warnings 'error' warnings are treated as fatal errors" # Help message printed before fatal option parsing errors. fatal_help="Try '\$progname --help' for more information." ## ------------------------- ## ## Hook function management. ## ## ------------------------- ## # This section contains functions for adding, removing, and running hooks # to the main code. A hook is just a named list of of function, that can # be run in order later on. # func_hookable FUNC_NAME # ----------------------- # Declare that FUNC_NAME will run hooks added with # 'func_add_hook FUNC_NAME ...'. func_hookable () { $debug_cmd func_append hookable_fns " $1" } # func_add_hook FUNC_NAME HOOK_FUNC # --------------------------------- # Request that FUNC_NAME call HOOK_FUNC before it returns. FUNC_NAME must # first have been declared "hookable" by a call to 'func_hookable'. func_add_hook () { $debug_cmd case " $hookable_fns " in *" $1 "*) ;; *) func_fatal_error "'$1' does not accept hook functions." ;; esac eval func_append ${1}_hooks '" $2"' } # func_remove_hook FUNC_NAME HOOK_FUNC # ------------------------------------ # Remove HOOK_FUNC from the list of functions called by FUNC_NAME. func_remove_hook () { $debug_cmd eval ${1}_hooks='`$ECHO "\$'$1'_hooks" |$SED "s| '$2'||"`' } # func_run_hooks FUNC_NAME [ARG]... # --------------------------------- # Run all hook functions registered to FUNC_NAME. # It is assumed that the list of hook functions contains nothing more # than a whitespace-delimited list of legal shell function names, and # no effort is wasted trying to catch shell meta-characters or preserve # whitespace. func_run_hooks () { $debug_cmd case " $hookable_fns " in *" $1 "*) ;; *) func_fatal_error "'$1' does not support hook funcions.n" ;; esac eval _G_hook_fns=\$$1_hooks; shift for _G_hook in $_G_hook_fns; do eval $_G_hook '"$@"' # store returned options list back into positional # parameters for next 'cmd' execution. eval _G_hook_result=\$${_G_hook}_result eval set dummy "$_G_hook_result"; shift done func_quote_for_eval ${1+"$@"} func_run_hooks_result=$func_quote_for_eval_result } ## --------------- ## ## Option parsing. ## ## --------------- ## # In order to add your own option parsing hooks, you must accept the # full positional parameter list in your hook function, remove any # options that you action, and then pass back the remaining unprocessed # options in '_result', escaped suitably for # 'eval'. Like this: # # my_options_prep () # { # $debug_cmd # # # Extend the existing usage message. # usage_message=$usage_message' # -s, --silent don'\''t print informational messages # ' # # func_quote_for_eval ${1+"$@"} # my_options_prep_result=$func_quote_for_eval_result # } # func_add_hook func_options_prep my_options_prep # # # my_silent_option () # { # $debug_cmd # # # Note that for efficiency, we parse as many options as we can # # recognise in a loop before passing the remainder back to the # # caller on the first unrecognised argument we encounter. # while test $# -gt 0; do # opt=$1; shift # case $opt in # --silent|-s) opt_silent=: ;; # # Separate non-argument short options: # -s*) func_split_short_opt "$_G_opt" # set dummy "$func_split_short_opt_name" \ # "-$func_split_short_opt_arg" ${1+"$@"} # shift # ;; # *) set dummy "$_G_opt" "$*"; shift; break ;; # esac # done # # func_quote_for_eval ${1+"$@"} # my_silent_option_result=$func_quote_for_eval_result # } # func_add_hook func_parse_options my_silent_option # # # my_option_validation () # { # $debug_cmd # # $opt_silent && $opt_verbose && func_fatal_help "\ # '--silent' and '--verbose' options are mutually exclusive." # # func_quote_for_eval ${1+"$@"} # my_option_validation_result=$func_quote_for_eval_result # } # func_add_hook func_validate_options my_option_validation # # You'll alse need to manually amend $usage_message to reflect the extra # options you parse. It's preferable to append if you can, so that # multiple option parsing hooks can be added safely. # func_options [ARG]... # --------------------- # All the functions called inside func_options are hookable. See the # individual implementations for details. func_hookable func_options func_options () { $debug_cmd func_options_prep ${1+"$@"} eval func_parse_options \ ${func_options_prep_result+"$func_options_prep_result"} eval func_validate_options \ ${func_parse_options_result+"$func_parse_options_result"} eval func_run_hooks func_options \ ${func_validate_options_result+"$func_validate_options_result"} # save modified positional parameters for caller func_options_result=$func_run_hooks_result } # func_options_prep [ARG]... # -------------------------- # All initialisations required before starting the option parse loop. # Note that when calling hook functions, we pass through the list of # positional parameters. If a hook function modifies that list, and # needs to propogate that back to rest of this script, then the complete # modified list must be put in 'func_run_hooks_result' before # returning. func_hookable func_options_prep func_options_prep () { $debug_cmd # Option defaults: opt_verbose=false opt_warning_types= func_run_hooks func_options_prep ${1+"$@"} # save modified positional parameters for caller func_options_prep_result=$func_run_hooks_result } # func_parse_options [ARG]... # --------------------------- # The main option parsing loop. func_hookable func_parse_options func_parse_options () { $debug_cmd func_parse_options_result= # this just eases exit handling while test $# -gt 0; do # Defer to hook functions for initial option parsing, so they # get priority in the event of reusing an option name. func_run_hooks func_parse_options ${1+"$@"} # Adjust func_parse_options positional parameters to match eval set dummy "$func_run_hooks_result"; shift # Break out of the loop if we already parsed every option. test $# -gt 0 || break _G_opt=$1 shift case $_G_opt in --debug|-x) debug_cmd='set -x' func_echo "enabling shell trace mode" $debug_cmd ;; --no-warnings|--no-warning|--no-warn) set dummy --warnings none ${1+"$@"} shift ;; --warnings|--warning|-W) test $# = 0 && func_missing_arg $_G_opt && break case " $warning_categories $1" in *" $1 "*) # trailing space prevents matching last $1 above func_append_uniq opt_warning_types " $1" ;; *all) opt_warning_types=$warning_categories ;; *none) opt_warning_types=none warning_func=: ;; *error) opt_warning_types=$warning_categories warning_func=func_fatal_error ;; *) func_fatal_error \ "unsupported warning category: '$1'" ;; esac shift ;; --verbose|-v) opt_verbose=: ;; --version) func_version ;; -\?|-h) func_usage ;; --help) func_help ;; # Separate optargs to long options (plugins may need this): --*=*) func_split_equals "$_G_opt" set dummy "$func_split_equals_lhs" \ "$func_split_equals_rhs" ${1+"$@"} shift ;; # Separate optargs to short options: -W*) func_split_short_opt "$_G_opt" set dummy "$func_split_short_opt_name" \ "$func_split_short_opt_arg" ${1+"$@"} shift ;; # Separate non-argument short options: -\?*|-h*|-v*|-x*) func_split_short_opt "$_G_opt" set dummy "$func_split_short_opt_name" \ "-$func_split_short_opt_arg" ${1+"$@"} shift ;; --) break ;; -*) func_fatal_help "unrecognised option: '$_G_opt'" ;; *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;; esac done # save modified positional parameters for caller func_quote_for_eval ${1+"$@"} func_parse_options_result=$func_quote_for_eval_result } # func_validate_options [ARG]... # ------------------------------ # Perform any sanity checks on option settings and/or unconsumed # arguments. func_hookable func_validate_options func_validate_options () { $debug_cmd # Display all warnings if -W was not given. test -n "$opt_warning_types" || opt_warning_types=" $warning_categories" func_run_hooks func_validate_options ${1+"$@"} # Bail if the options were screwed! $exit_cmd $EXIT_FAILURE # save modified positional parameters for caller func_validate_options_result=$func_run_hooks_result } ## ----------------- ## ## Helper functions. ## ## ----------------- ## # This section contains the helper functions used by the rest of the # hookable option parser framework in ascii-betical order. # func_fatal_help ARG... # ---------------------- # Echo program name prefixed message to standard error, followed by # a help hint, and exit. func_fatal_help () { $debug_cmd eval \$ECHO \""Usage: $usage"\" eval \$ECHO \""$fatal_help"\" func_error ${1+"$@"} exit $EXIT_FAILURE } # func_help # --------- # Echo long help message to standard output and exit. func_help () { $debug_cmd func_usage_message $ECHO "$long_help_message" exit 0 } # func_missing_arg ARGNAME # ------------------------ # Echo program name prefixed message to standard error and set global # exit_cmd. func_missing_arg () { $debug_cmd func_error "Missing argument for '$1'." exit_cmd=exit } # func_split_equals STRING # ------------------------ # Set func_split_equals_lhs and func_split_equals_rhs shell variables after # splitting STRING at the '=' sign. test -z "$_G_HAVE_XSI_OPS" \ && (eval 'x=a/b/c; test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ && _G_HAVE_XSI_OPS=yes if test yes = "$_G_HAVE_XSI_OPS" then # This is an XSI compatible shell, allowing a faster implementation... eval 'func_split_equals () { $debug_cmd func_split_equals_lhs=${1%%=*} func_split_equals_rhs=${1#*=} test "x$func_split_equals_lhs" = "x$1" \ && func_split_equals_rhs= }' else # ...otherwise fall back to using expr, which is often a shell builtin. func_split_equals () { $debug_cmd func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'` func_split_equals_rhs= test "x$func_split_equals_lhs" = "x$1" \ || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'` } fi #func_split_equals # 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. if test yes = "$_G_HAVE_XSI_OPS" then # This is an XSI compatible shell, allowing a faster implementation... eval 'func_split_short_opt () { $debug_cmd func_split_short_opt_arg=${1#??} func_split_short_opt_name=${1%"$func_split_short_opt_arg"} }' else # ...otherwise fall back to using expr, which is often a shell builtin. func_split_short_opt () { $debug_cmd func_split_short_opt_name=`expr "x$1" : 'x-\(.\)'` func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'` } fi #func_split_short_opt # func_usage # ---------- # Echo short help message to standard output and exit. func_usage () { $debug_cmd func_usage_message $ECHO "Run '$progname --help |${PAGER-more}' for full usage" exit 0 } # func_usage_message # ------------------ # Echo short help message to standard output. func_usage_message () { $debug_cmd eval \$ECHO \""Usage: $usage"\" echo $SED -n 's|^# || /^Written by/{ x;p;x } h /^Written by/q' < "$progpath" echo eval \$ECHO \""$usage_message"\" } # func_version # ------------ # Echo version message to standard output and exit. func_version () { $debug_cmd printf '%s\n' "$progname $scriptversion" $SED -n ' /(C)/!b go :more /\./!{ N s|\n# | | b more } :go /^# Written by /,/# warranty; / { s|^# || s|^# *$|| s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2| p } /^# Written by / { s|^# || p } /^warranty; /q' < "$progpath" exit $? } # Local variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" # time-stamp-time-zone: "UTC" # End: # Set a version string. scriptversion='(GNU libtool) 2.4.6' # func_echo ARG... # ---------------- # Libtool also displays the current mode in messages, so override # funclib.sh func_echo with this custom definition. func_echo () { $debug_cmd _G_message=$* func_echo_IFS=$IFS IFS=$nl for _G_line in $_G_message; do IFS=$func_echo_IFS $ECHO "$progname${opt_mode+: $opt_mode}: $_G_line" done IFS=$func_echo_IFS } # func_warning ARG... # ------------------- # Libtool warnings are not categorized, so override funclib.sh # func_warning with this simpler definition. func_warning () { $debug_cmd $warning_func ${1+"$@"} } ## ---------------- ## ## Options parsing. ## ## ---------------- ## # Hook in the functions to make sure our own options are parsed during # the option parsing loop. usage='$progpath [OPTION]... [MODE-ARG]...' # Short help message in response to '-h'. usage_message="Options: --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 --no-warnings equivalent to '-Wnone' --preserve-dup-deps don't remove duplicate dependency libraries --quiet, --silent don't print informational messages --tag=TAG use configuration variables from tag TAG -v, --verbose print more informational messages than default --version print version information -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all] -h, --help, --help-all print short, long, or detailed help message " # Additional text appended to 'usage_message' in response to '--help'. func_help () { $debug_cmd func_usage_message $ECHO "$long_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) version: $progname $scriptversion Debian-2.4.6-2 automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q` autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q` Report bugs to . GNU libtool home page: . General help using GNU software: ." exit 0 } # func_lo2o OBJECT-NAME # --------------------- # Transform OBJECT-NAME from a '.lo' suffix to the platform specific # object suffix. lo2o=s/\\.lo\$/.$objext/ o2lo=s/\\.$objext\$/.lo/ if test yes = "$_G_HAVE_XSI_OPS"; then eval 'func_lo2o () { case $1 in *.lo) func_lo2o_result=${1%.lo}.$objext ;; * ) func_lo2o_result=$1 ;; esac }' # func_xform LIBOBJ-OR-SOURCE # --------------------------- # Transform LIBOBJ-OR-SOURCE from a '.o' or '.c' (or otherwise) # suffix to a '.lo' libtool-object suffix. eval 'func_xform () { func_xform_result=${1%.*}.lo }' else # ...otherwise fall back to using sed. func_lo2o () { func_lo2o_result=`$ECHO "$1" | $SED "$lo2o"` } func_xform () { func_xform_result=`$ECHO "$1" | $SED 's|\.[^.]*$|.lo|'` } fi # func_fatal_configuration ARG... # ------------------------------- # Echo program name prefixed message to standard error, followed by # a configuration failure hint, and exit. func_fatal_configuration () { func__fatal_error ${1+"$@"} \ "See the $PACKAGE documentation for more information." \ "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 yes = "$build_libtool_libs"; then echo "enable shared libraries" else echo "disable shared libraries" fi if test yes = "$build_old_libs"; 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 } # libtool_options_prep [ARG]... # ----------------------------- # Preparation for options parsed by libtool. libtool_options_prep () { $debug_mode # Option defaults: opt_config=false opt_dlopen= opt_dry_run=false opt_help=false opt_mode= opt_preserve_dup_deps=false opt_quiet=false nonopt= preserve_args= # 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 # Pass back the list of options. func_quote_for_eval ${1+"$@"} libtool_options_prep_result=$func_quote_for_eval_result } func_add_hook func_options_prep libtool_options_prep # libtool_parse_options [ARG]... # --------------------------------- # Provide handling for libtool specific options. libtool_parse_options () { $debug_cmd # Perform our own loop to consume as many options as possible in # each iteration. while test $# -gt 0; do _G_opt=$1 shift case $_G_opt in --dry-run|--dryrun|-n) opt_dry_run=: ;; --config) func_config ;; --dlopen|-dlopen) opt_dlopen="${opt_dlopen+$opt_dlopen }$1" shift ;; --preserve-dup-deps) opt_preserve_dup_deps=: ;; --features) func_features ;; --finish) set dummy --mode finish ${1+"$@"}; shift ;; --help) opt_help=: ;; --help-all) opt_help=': help-all' ;; --mode) test $# = 0 && func_missing_arg $_G_opt && break opt_mode=$1 case $1 in # Valid mode arguments: clean|compile|execute|finish|install|link|relink|uninstall) ;; # Catch anything else as an error *) func_error "invalid argument for $_G_opt" exit_cmd=exit break ;; esac shift ;; --no-silent|--no-quiet) opt_quiet=false func_append preserve_args " $_G_opt" ;; --no-warnings|--no-warning|--no-warn) opt_warning=false func_append preserve_args " $_G_opt" ;; --no-verbose) opt_verbose=false func_append preserve_args " $_G_opt" ;; --silent|--quiet) opt_quiet=: opt_verbose=false func_append preserve_args " $_G_opt" ;; --tag) test $# = 0 && func_missing_arg $_G_opt && break opt_tag=$1 func_append preserve_args " $_G_opt $1" func_enable_tag "$1" shift ;; --verbose|-v) opt_quiet=false opt_verbose=: func_append preserve_args " $_G_opt" ;; # An option not handled by this hook function: *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;; esac done # save modified positional parameters for caller func_quote_for_eval ${1+"$@"} libtool_parse_options_result=$func_quote_for_eval_result } func_add_hook func_parse_options libtool_parse_options # libtool_validate_options [ARG]... # --------------------------------- # Perform any sanity checks on option settings and/or unconsumed # arguments. libtool_validate_options () { # save first non-option argument if test 0 -lt $#; then nonopt=$1 shift fi # preserve --debug test : = "$debug_cmd" || func_append preserve_args " --debug" case $host in # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452 # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788 *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*) # 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 test yes != "$build_libtool_libs" \ && test yes != "$build_old_libs" \ && func_fatal_configuration "not configured to build any kind of library" # Darwin sucks eval std_shrext=\"$shrext_cmds\" # Only execute mode is allowed to have -dlopen flags. if test -n "$opt_dlopen" && test execute != "$opt_mode"; 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." } # Pass back the unparsed argument list func_quote_for_eval ${1+"$@"} libtool_validate_options_result=$func_quote_for_eval_result } func_add_hook func_validate_options libtool_validate_options # Process options as early as possible so that --help and --version # can return quickly. func_options ${1+"$@"} eval set dummy "$func_options_result"; shift ## ----------- ## ## Main. ## ## ----------- ## magic='%%%MAGIC variable%%%' magic_exe='%%%MAGIC EXE variable%%%' # Global variables. 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= # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } # func_generated_by_libtool # True iff stdin has been generated by Libtool. This function is only # a basic sanity check; it will hardly flush out determined imposters. func_generated_by_libtool_p () { $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 } # 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 | func_generated_by_libtool_p } # 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 yes = "$lalib_p" } # 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 () { test -f "$1" && $lt_truncate_bin < "$1" 2>/dev/null | func_generated_by_libtool_p } # 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 () { $debug_cmd save_ifs=$IFS; IFS='~' for cmd in $1; do IFS=$sp$nl eval cmd=\"$cmd\" IFS=$save_ifs 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 () { $debug_cmd 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 () { $debug_cmd 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 yes = "$build_libtool_libs"; then write_lobj=\'$2\' else write_lobj=none fi if test yes = "$build_old_libs"; 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 "$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 () { $debug_cmd # 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 () { $debug_cmd 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 () { $debug_cmd # awkward: cmd appends spaces to result func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | $SED -e 's/[ ]*$//' -e "$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 () { $debug_cmd 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 () { $debug_cmd 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 () { $debug_cmd 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 () { $debug_cmd $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 () { $debug_cmd 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 () { $debug_cmd 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 () { $debug_cmd 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 () { $debug_cmd 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 () { $debug_cmd 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 () { $debug_cmd 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 () { $debug_cmd 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 () { $debug_cmd 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 () { $debug_cmd 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 () { $debug_cmd 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 () { $debug_cmd 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 () { $debug_cmd 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 () { $debug_cmd 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_dll_def_p FILE # True iff FILE is a Windows DLL '.def' file. # Keep in sync with _LT_DLL_DEF_P in libtool.m4 func_dll_def_p () { $debug_cmd func_dll_def_p_tmp=`$SED -n \ -e 's/^[ ]*//' \ -e '/^\(;.*\)*$/d' \ -e 's/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p' \ -e q \ "$1"` test DEF = "$func_dll_def_p_tmp" } # func_mode_compile arg... func_mode_compile () { $debug_cmd # 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 yes = "$build_libtool_libs" \ || func_fatal_configuration "cannot 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 yes = "$build_old_libs"; 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 no = "$pic_mode" && test pass_all != "$deplibs_check_method"; 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 no = "$compiler_c_o"; 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 yes = "$need_locks"; 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 warn = "$need_locks"; 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 yes = "$build_libtool_libs"; then # Without this assignment, base_compile gets emptied. fbsd_hideous_sh_bug=$base_compile if test no != "$pic_mode"; 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 warn = "$need_locks" && 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 yes = "$suppress_opt"; then suppress_output=' >/dev/null 2>&1' fi fi # Only build a position-dependent object if we build old libraries. if test yes = "$build_old_libs"; then if test yes != "$pic_mode"; then # Don't build PIC code command="$base_compile $qsrcfile$pie_flag" else command="$base_compile $qsrcfile $pic_flag" fi if test yes = "$compiler_c_o"; 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 warn = "$need_locks" && 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 no != "$need_locks"; then removelist=$lockfile $RM "$lockfile" fi } exit $EXIT_SUCCESS } $opt_help || { test compile = "$opt_mode" && 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 -os2dllname NAME force a short DLL name on OS/2 (no effect on other OSes) -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 () { $debug_cmd # 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 $opt_dry_run; then # 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 else 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 fi } test execute = "$opt_mode" && func_mode_execute ${1+"$@"} # func_mode_finish arg... func_mode_finish () { $debug_cmd 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_quiet && 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 finish = "$opt_mode" && func_mode_finish ${1+"$@"} # func_mode_install arg... func_mode_install () { $debug_cmd # There may be an optional sh(1) argument at the beginning of # install_prog (especially on Windows NT). if test "$SHELL" = "$nonopt" || test /bin/sh = "$nonopt" || # 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=false 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=: ;; -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-m = "X$prev" && 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=: if $isdir; 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 ;; os2*) 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 yes = "$build_old_libs"; 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=: 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'` if test -n "$libdir" && test ! -f "$libfile"; then func_warning "'$lib' has not been installed in '$libdir'" finalize=false fi done relink_command= func_source "$wrapper" outputname= if test no = "$fast_install" && test -n "$relink_command"; then $opt_dry_run || { if $finalize; 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_quiet || { 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 install = "$opt_mode" && 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 () { $debug_cmd my_outputname=$1 my_originator=$2 my_pic_p=${3-false} my_prefix=`$ECHO "$my_originator" | $SED 's%[^a-zA-Z0-9]%_%g'` my_dlsyms= if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; 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) $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 can'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 #define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) /* External symbol declarations for the compiler. */\ " if test yes = "$dlself"; 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 func_show_eval '$RM "${nlist}I"' if test -n "$global_symbol_to_import"; then eval "$global_symbol_to_import"' < "$nlist"S > "$nlist"I' 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[];\ " if test -s "$nlist"I; then echo >> "$output_objdir/$my_dlsyms" "\ static void lt_syminit(void) { LT_DLSYM_CONST lt_dlsymlist *symbol = lt_${my_prefix}_LTX_preloaded_symbols; for (; symbol->name; ++symbol) {" $SED 's/.*/ if (STREQ (symbol->name, \"&\")) symbol->address = (void *) \&&;/' < "$nlist"I >> "$output_objdir/$my_dlsyms" echo >> "$output_objdir/$my_dlsyms" "\ } }" fi echo >> "$output_objdir/$my_dlsyms" "\ LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[] = { {\"$my_originator\", (void *) 0}," if test -s "$nlist"I; then echo >> "$output_objdir/$my_dlsyms" "\ {\"@INIT@\", (void *) <_syminit}," fi 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" ;; *) $my_pic_p && pic_flag_for_symtable=" $pic_flag" ;; 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" "${nlist}I"' # 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_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 () { $debug_cmd 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 () { $debug_cmd 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_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 () { $debug_cmd 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 case $nm_interface in "MS dumpbin") if func_cygming_ms_implib_p "$1" || func_cygming_gnu_implib_p "$1" then win32_nmres=import else win32_nmres= fi ;; *) 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 } }'` ;; esac 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 () { $debug_cmd 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 () { $debug_cmd 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 that possess that section. Heuristic: eliminate # all those that 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_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 () { $debug_cmd 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 () { $debug_cmd f_ex_an_ar_dir=$1; shift f_ex_an_ar_oldlib=$1 if test yes = "$lock_old_archive_extraction"; 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 yes = "$lock_old_archive_extraction"; 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 () { $debug_cmd 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` func_basename "$darwin_archive" darwin_base_archive=$func_basename_result 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 "$sed_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 where 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) $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/ that is used only on # windows platforms, and (c) all begin with the string "--lt-" # (application programs are unlikely to have options that 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) $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 yes = "$fast_install"; 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 yes = "$shlibpath_overrides_runpath" && 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 #define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) /* 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_platform || defined ... */ #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 #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 (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]; size_t 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 = (size_t) (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 (STREQ (str, pat)) *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 size_t 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) { size_t orig_value_len = strlen (orig_value); size_t 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 #' */ size_t len = strlen (new_value); while ((len > 0) && IS_PATH_SEPARATOR (new_value[len-1])) { new_value[--len] = '\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 () { $debug_cmd case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in *import*) : ;; *) false ;; esac } # func_suncc_cstd_abi # !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!! # Several compiler flags select an ABI that is incompatible with the # Cstd library. Avoid specifying it if any are in CXXFLAGS. func_suncc_cstd_abi () { $debug_cmd case " $compile_command " in *" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*) suncc_use_cstd_abi=no ;; *) suncc_use_cstd_abi=yes ;; esac } # func_mode_link arg... func_mode_link () { $debug_cmd 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 # what 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 that 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= os2dllname= non_pic_objects= precious_files_regex= prefer_static_libs=no preload=false 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 yes != "$build_libtool_libs" \ && func_fatal_configuration "cannot build a shared library" build_old_libs=no break ;; -all-static | -static | -static-libtool-libs) case $arg in -all-static) if test yes = "$build_libtool_libs" && 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) $preload || { # Add the symbol object into the linking commands. func_append compile_command " @SYMFILE@" func_append finalize_command " @SYMFILE@" preload=: } case $arg in *.la | *.lo) ;; # We handle these cases below. force) if test no = "$dlself"; then dlself=needless export_dynamic=yes fi prev= continue ;; self) if test dlprefiles = "$prev"; then dlself=yes elif test dlfiles = "$prev" && test yes != "$dlopen_self"; then dlself=yes else dlself=needless export_dynamic=yes fi prev= continue ;; *) if test dlfiles = "$prev"; 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 ;; mllvm) # Clang does not use LLVM to link, so we can simply discard any # '-mllvm $arg' options when doing the link step. 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 none = "$pic_object" && test none = "$non_pic_object"; 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 none != "$pic_object"; then # Prepend the subdirectory the object is found in. pic_object=$xdir$pic_object if test dlfiles = "$prev"; then if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; 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 dlprefiles = "$prev"; 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 none != "$non_pic_object"; 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 none = "$pic_object"; 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 ;; os2dllname) os2dllname=$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 rpath = "$prev"; 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-export-symbols = "X$arg"; 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-lc = "X$arg" || test X-lm = "X$arg"; 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-lc = "X$arg" && continue ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) # Do not include libc due to us having libc/libc_r. test X-lc = "X$arg" && 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-lc = "X$arg" && continue ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work test X-lc = "X$arg" && continue ;; esac elif test X-lc_r = "X$arg"; then case $host in *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) # Do not include libc_r directly, use -pthread flag. continue ;; esac fi func_append deplibs " $arg" continue ;; -mllvm) prev=mllvm 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 ;; -os2dllname) prev=os2dllname 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 # -fstack-protector* stack protector flags for GCC # @file GCC response files # -tp=* Portland pgcc target processor selection # --sysroot=* for sysroot support # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization # -specs=* GCC specs files # -stdlib=* select c++ std lib with clang # -fsanitize=* Clang/GCC memory and address sanitizer -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*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \ -specs=*|-fsanitize=*) 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 ;; -Z*) if test os2 = "`expr $host : '.*\(os2\)'`"; then # OS/2 uses -Zxxx to specify OS/2-specific options compiler_flags="$compiler_flags $arg" func_append compile_command " $arg" func_append finalize_command " $arg" case $arg in -Zlinker | -Zstack) prev=xcompiler ;; esac continue else # Otherwise treat like 'Some other compiler flag' below func_quote_for_eval "$arg" arg=$func_quote_for_eval_result fi ;; # 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 none = "$pic_object" && test none = "$non_pic_object"; then func_fatal_error "cannot find name of object for '$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir=$func_dirname_result test none = "$pic_object" || { # Prepend the subdirectory the object is found in. pic_object=$xdir$pic_object if test dlfiles = "$prev"; then if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; 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 dlprefiles = "$prev"; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg=$pic_object } # Non-PIC object. if test none != "$non_pic_object"; 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 none = "$pic_object"; 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 dlfiles = "$prev"; then # This library was specified with -dlopen. func_append dlfiles " $func_resolve_sysroot_result" prev= elif test dlprefiles = "$prev"; 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 yes = "$export_dynamic" && 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\" # Definition is injected by LT_CONFIG during libtool generation. func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH" 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 lib = "$linkmode"; 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=false 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 lib,link = "$linkmode,$pass"; 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 lib,link = "$linkmode,$pass" || test prog,scan = "$linkmode,$pass"; then libs=$deplibs deplibs= fi if test prog = "$linkmode"; 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 lib,dlpreopen = "$linkmode,$pass"; 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 dlopen = "$pass"; then # Collect dlpreopened libraries save_deplibs=$deplibs deplibs= fi for deplib in $libs; do lib= found=false case $deplib in -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append compiler_flags " $deplib" if test lib = "$linkmode"; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -l*) if test lib != "$linkmode" && test prog != "$linkmode"; then func_warning "'-l' is ignored for archives/objects" continue fi func_stripname '-l' '' "$deplib" name=$func_stripname_result if test lib = "$linkmode"; 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 .la = "$search_ext"; then found=: else found=false fi break 2 fi done done if $found; then # 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 yes = "$allow_libtool_libs_with_static_runtimes"; 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=false func_dirname "$lib" "" "." ladir=$func_dirname_result lib=$ladir/$old_library if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" fi continue fi fi ;; *) ;; esac fi else # deplib doesn't seem to be a libtool library if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" fi continue fi ;; # -l *.ltframework) if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" if test lib = "$linkmode"; 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 conv = "$pass" && 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 conv = "$pass"; then deplibs="$deplib $deplibs" continue fi if test scan = "$pass"; 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 link = "$pass"; 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 conv = "$pass"; 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=false 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=: fi ;; pass_all) valid_a_lib=: ;; esac if $valid_a_lib; then echo $ECHO "*** Warning: Linking the shared library $output against the" $ECHO "*** static library $deplib is not portable!" deplibs="$deplib $deplibs" else 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." fi ;; esac continue ;; prog) if test link != "$pass"; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi continue ;; esac # linkmode ;; # *.$libext *.lo | *.$objext) if test conv = "$pass"; then deplibs="$deplib $deplibs" elif test prog = "$linkmode"; then if test dlpreopen = "$pass" || test yes != "$dlopen_support" || test no = "$build_libtool_libs"; 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=: continue ;; esac # case $deplib $found || test -f "$lib" \ || func_fatal_error "cannot find the library '$lib' or unhandled argument '$deplib'" # 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 lib,link = "$linkmode,$pass" || test prog,scan = "$linkmode,$pass" || { test prog != "$linkmode" && test lib != "$linkmode"; }; then test -n "$dlopen" && func_append dlfiles " $dlopen" test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" fi if test conv = "$pass"; 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 prog != "$linkmode" && test lib != "$linkmode"; 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 yes = "$prefer_static_libs" || test built,no = "$prefer_static_libs,$installed"; }; 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 dlopen = "$pass"; then test -z "$libdir" \ && func_fatal_error "cannot -dlopen a convenience library: '$lib'" if test -z "$dlname" || test yes != "$dlopen_support" || test no = "$build_libtool_libs" 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 yes = "$installed"; 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 yes = "$hardcode_automatic" && 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 dlpreopen = "$pass"; then if test -z "$libdir" && test prog = "$linkmode"; 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 lib = "$linkmode"; then deplibs="$dir/$old_library $deplibs" elif test prog,link = "$linkmode,$pass"; 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 prog = "$linkmode" && test link != "$pass"; then func_append newlib_search_path " $ladir" deplibs="$lib $deplibs" linkalldeplibs=false if test no != "$link_all_deplibs" || test -z "$library_names" || test no = "$build_libtool_libs"; then linkalldeplibs=: 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 $linkalldeplibs; 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 prog,link = "$linkmode,$pass"; then if test -n "$library_names" && { { test no = "$prefer_static_libs" || test built,yes = "$prefer_static_libs,$installed"; } || 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 $alldeplibs && { test pass_all = "$deplibs_check_method" || { test yes = "$build_libtool_libs" && 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 built = "$use_static_libs" && test yes = "$installed"; then use_static_libs=no fi if test -n "$library_names" && { test no = "$use_static_libs" || test -z "$old_library"; }; then case $host in *cygwin* | *mingw* | *cegcc* | *os2*) # No point in relinking DLLs because paths are not encoded func_append notinst_deplibs " $lib" need_relink=no ;; *) if test no = "$installed"; 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 yes = "$shouldnotlink" && test link = "$pass"; then echo if test prog = "$linkmode"; 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 lib = "$linkmode" && test yes = "$hardcode_into_libs"; 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* | *os2*) 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 prog = "$linkmode" || test relink != "$opt_mode"; then add_shlibpath= add_dir= add= lib_linked=yes case $hardcode_action in immediate | unsupported) if test no = "$hardcode_direct"; 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 cannot # 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 no = "$hardcode_minus_L"; then case $host in *-*-sunos*) add_shlibpath=$dir ;; esac add_dir=-L$dir add=-l$name elif test no = "$hardcode_shlibpath_var"; then add_shlibpath=$dir add=-l$name else lib_linked=no fi ;; relink) if test yes = "$hardcode_direct" && test no = "$hardcode_direct_absolute"; then add=$dir/$linklib elif test yes = "$hardcode_minus_L"; 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 yes = "$hardcode_shlibpath_var"; then add_shlibpath=$dir add=-l$name else lib_linked=no fi ;; *) lib_linked=no ;; esac if test yes != "$lib_linked"; 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 prog = "$linkmode"; 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 yes != "$hardcode_direct" && test yes != "$hardcode_minus_L" && test yes = "$hardcode_shlibpath_var"; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac fi fi fi if test prog = "$linkmode" || test relink = "$opt_mode"; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. if test yes = "$hardcode_direct" && test no = "$hardcode_direct_absolute"; then add=$libdir/$linklib elif test yes = "$hardcode_minus_L"; then add_dir=-L$libdir add=-l$name elif test yes = "$hardcode_shlibpath_var"; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac add=-l$name elif test yes = "$hardcode_automatic"; 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 prog = "$linkmode"; 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 prog = "$linkmode"; 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 unsupported != "$hardcode_direct"; 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 yes = "$build_libtool_libs"; then # Not a shared library if test pass_all != "$deplibs_check_method"; 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 cannot 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 yes = "$module"; 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 no = "$build_old_libs"; 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 lib = "$linkmode"; then if test -n "$dependency_libs" && { test yes != "$hardcode_into_libs" || test yes = "$build_old_libs" || test yes = "$link_static"; }; 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 no = "$link_static" && 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 no != "$link_all_deplibs"; 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 link = "$pass"; then if test prog = "$linkmode"; 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 dlpreopen = "$pass"; then # Link the dlpreopened libraries before other libraries for deplib in $save_deplibs; do deplibs="$deplib $deplibs" done fi if test dlopen != "$pass"; then test conv = "$pass" || { # 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= } if test prog,link = "$linkmode,$pass"; then vars="compile_deplibs finalize_deplibs" else vars=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 # Add Sun CC postdeps if required: test CXX = "$tagname" && { case $host_os in linux*) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 func_suncc_cstd_abi if test no != "$suncc_use_cstd_abi"; then func_append postdeps ' -library=Cstd -library=Crun' fi ;; esac ;; solaris*) func_cc_basename "$CC" case $func_cc_basename_result in CC* | sunCC*) func_suncc_cstd_abi if test no != "$suncc_use_cstd_abi"; then func_append postdeps ' -library=Cstd -library=Crun' fi ;; esac ;; esac } # 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 prog = "$linkmode"; then dlfiles=$newdlfiles fi if test prog = "$linkmode" || test lib = "$linkmode"; then dlprefiles=$newdlprefiles fi case $linkmode in oldlib) if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; 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 no = "$module" \ && func_fatal_help "libtool library '$output' must begin with 'lib'" if test no != "$need_lib_prefix"; 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 pass_all != "$deplibs_check_method"; 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 no = "$dlself" \ || func_warning "'-dlopen self' is ignored for libtool libraries" set dummy $rpath shift test 1 -lt "$#" \ && func_warning "ignoring multiple '-rpath's for a libtool library" install_libdir=$1 oldlibs= if test -z "$rpath"; then if test yes = "$build_libtool_libs"; 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 # that has an extra 1 added just for fun # case $version_type in # correct linux to gnu/linux during the next big refactor darwin|freebsd-elf|linux|osf|windows|none) func_arith $number_major + $number_minor current=$func_arith_result age=$number_minor revision=$number_revision ;; freebsd-aout|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" # On Darwin other compilers case $CC in nagfor*) verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" ;; *) verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" ;; esac ;; freebsd-aout) major=.$current versuffix=.$current.$revision ;; freebsd-elf) func_arith $current - $age major=.$func_arith_result versuffix=$major.$age.$revision ;; irix | nonstopux) if test no = "$lt_irix_increment"; 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 0 -ne "$loop"; 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 0 -ne "$loop"; 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 ;; sco) major=.$current versuffix=.$current ;; sunos) major=.$current versuffix=.$current.$revision ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 file systems. 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 no = "$need_version"; then versuffix= else versuffix=.0.0 fi fi # Remove version info from name if versioning should be avoided if test yes,no = "$avoid_version,$need_version"; then major= versuffix= verstring= fi # Check to see if the archive will have undefined symbols. if test yes = "$allow_undefined"; then if test unsupported = "$allow_undefined_flag"; then if test yes = "$build_old_libs"; then func_warning "undefined symbols not allowed in $host shared libraries; building static only" build_libtool_libs=no else func_fatal_error "can't build $host shared library unless -no-undefined is specified" fi fi else # Don't allow undefined symbols. allow_undefined_flag=$no_undefined_flag fi fi func_generate_dlsyms "$libname" "$libname" : func_append libobjs " $symfileobj" test " " = "$libobjs" && libobjs= if test relink != "$opt_mode"; 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 -n "$precious_files_regex"; 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 yes = "$build_old_libs" && test convenience != "$build_libtool_libs"; 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 yes != "$hardcode_into_libs" || test yes = "$build_old_libs"; 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 yes = "$build_libtool_libs"; 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 yes = "$build_libtool_need_lc"; 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 yes = "$allow_libtool_libs_with_static_runtimes"; 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 yes = "$allow_libtool_libs_with_static_runtimes"; 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 none = "$deplibs_check_method"; 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 yes = "$droppeddeps"; then if test yes = "$module"; 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 no = "$build_old_libs"; 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 no = "$allow_undefined"; 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 no = "$build_old_libs"; 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 yes = "$build_libtool_libs"; then # Remove $wl instances when linking with ld. # FIXME: should test the right _cmds variable. case $archive_cmds in *\$LD\ *) wl= ;; esac if test yes = "$hardcode_into_libs"; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath=$finalize_rpath test relink = "$opt_mode" || 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 relink = "$opt_mode" || 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 func_dll_def_p "$export_symbols" || { # 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 ;; esac # Prepare the list of exported symbols if test -z "$export_symbols"; then if test yes = "$always_export_symbols" || 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 yes = "$try_normal_branch" \ && { 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 : != "$skipped_export"; 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 : != "$skipped_export" && 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 yes = "$compiler_needs_object" && 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 yes = "$thread_safe" && 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 relink = "$opt_mode"; 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 yes = "$module" && 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 : != "$skipped_export" && 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 : != "$skipped_export" && test yes = "$with_gnu_ld"; 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 : != "$skipped_export" && test -n "$file_list_spec"; then output=$output_objdir/$output_la.lnk func_verbose "creating linker input file list: $output" : > $output set x $save_libobjs shift firstobj= if test yes = "$compiler_needs_object"; 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 -z "$objlist" || 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 1 -eq "$k"; 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 ${skipped_export-false} && { 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 } 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_quiet || { 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 relink = "$opt_mode"; 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 ${skipped_export-false} && { 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 } 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 yes = "$module" && 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=$sp$nl eval cmd=\"$cmd\" IFS=$save_ifs $opt_quiet || { 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 relink = "$opt_mode"; 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 relink = "$opt_mode"; 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 yes = "$module" || test yes = "$export_dynamic"; then # On all known operating systems, these are identical. dlname=$soname fi fi ;; obj) if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; 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= # if reload_cmds runs $LD directly, get rid of -Wl from # whole_archive_flag_spec and hope we can get by with turning comma # into space. case $reload_cmds in *\$LD[\ \$]*) wl= ;; esac if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" test -n "$wl" || tmp_whole_archive_flags=`$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` reload_conv_objs=$reload_objs\ $tmp_whole_archive_flags 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 yes = "$build_libtool_libs" || 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 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 test yes = "$build_libtool_libs" || { 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 } if test -n "$pic_flag" || test default != "$pic_mode"; 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" $preload \ && test unknown,unknown,unknown = "$dlopen_support,$dlopen_self,$dlopen_self_static" \ && 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 CXX = "$tagname"; 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 yes = "$build_old_libs"; 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@" false # template prelinking step if test -n "$prelink_cmds"; then func_execute_cmds "$prelink_cmds" 'exit $?' fi wrappers_required=: case $host in *cegcc* | *mingw32ce*) # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. wrappers_required=false ;; *cygwin* | *mingw* ) test yes = "$build_libtool_libs" || wrappers_required=false ;; *) if test no = "$need_relink" || test yes != "$build_libtool_libs"; then wrappers_required=false fi ;; esac $wrappers_required || { # 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 } 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 yes = "$no_install"; 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 case $hardcode_action,$fast_install in relink,*) # 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" ;; *,yes) link_command=$finalize_var$compile_command$finalize_rpath relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` ;; *,no) link_command=$compile_var$compile_command$compile_rpath relink_command=$finalize_var$finalize_command$finalize_rpath ;; *,needless) link_command=$finalize_var$compile_command$finalize_rpath relink_command= ;; esac # 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 case $build_libtool_libs in convenience) oldobjs="$libobjs_save $symfileobj" addlibs=$convenience build_libtool_libs=no ;; module) oldobjs=$libobjs_save addlibs=$old_convenience build_libtool_libs=no ;; *) oldobjs="$old_deplibs $non_pic_objects" $preload && test -f "$symfileobj" \ && func_append oldobjs " $symfileobj" addlibs=$old_convenience ;; esac 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 yes = "$build_libtool_libs"; 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 -z "$oldobjs"; 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 yes = "$build_old_libs" && 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 yes = "$hardcode_automatic"; then relink_command= fi # Only create the output if not a dry run. $opt_dry_run || { for installed in no yes; do if test yes = "$installed"; 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 -n "$bindir"; 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) $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 cannot 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 no,yes = "$installed,$need_relink"; 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 } if test link = "$opt_mode" || test relink = "$opt_mode"; then func_mode_link ${1+"$@"} fi # func_mode_uninstall arg... func_mode_uninstall () { $debug_cmd RM=$nonopt files= rmforce=false 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=: ;; -*) 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 . = "$dir"; then odir=$objdir else odir=$dir/$objdir fi func_basename "$file" name=$func_basename_result test uninstall = "$opt_mode" && odir=$dir # Remember odir for removal later, being careful to avoid duplicates if test clean = "$opt_mode"; 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 $rmforce; 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" '$rmforce || exit_status=1' fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. func_execute_cmds "$old_postuninstall_cmds" '$rmforce || 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 none != "$pic_object"; 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 none != "$non_pic_object"; then func_append rmfiles " $dir/$non_pic_object" fi fi ;; *) if test clean = "$opt_mode"; 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 yes = "$fast_install" && 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 } if test uninstall = "$opt_mode" || test clean = "$opt_mode"; then func_mode_uninstall ${1+"$@"} fi 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 # where 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: nip2-8.7.0/depcomp0000755000175000017500000005601713350464076010715 00000000000000#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2016-01-11.22; # UTC # Copyright (C) 1999-2017 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by 'PROGRAMS ARGS'. object Object file output by 'PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputting dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac # Get the directory component of the given path, and save it in the # global variables '$dir'. Note that this directory component will # be either empty or ending with a '/' character. This is deliberate. set_dir_from () { case $1 in */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; *) dir=;; esac } # Get the suffix-stripped basename of the given path, and save it the # global variable '$base'. set_base_from () { base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` } # If no dependency file was actually created by the compiler invocation, # we still have to create a dummy depfile, to avoid errors with the # Makefile "include basename.Plo" scheme. make_dummy_depfile () { echo "#dummy" > "$depfile" } # Factor out some common post-processing of the generated depfile. # Requires the auxiliary global variable '$tmpdepfile' to be set. aix_post_process_depfile () { # If the compiler actually managed to produce a dependency file, # post-process it. if test -f "$tmpdepfile"; then # Each line is of the form 'foo.o: dependency.h'. # Do two passes, one to just change these to # $object: dependency.h # and one to simply output # dependency.h: # which is needed to avoid the deleted-header problem. { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" } > "$depfile" rm -f "$tmpdepfile" else make_dummy_depfile fi } # A tabulation character. tab=' ' # A newline character. nl=' ' # Character ranges might be problematic outside the C locale. # These definitions help. upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ lower=abcdefghijklmnopqrstuvwxyz digits=0123456789 alpha=${upper}${lower} if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Avoid interferences from the environment. gccflag= dashmflag= # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvisualcpp fi if test "$depmode" = msvc7msys; then # This is just like msvc7 but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvc7 fi if test "$depmode" = xlc; then # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. gccflag=-qmakedep=gcc,-MF depmode=gcc fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. ## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. ## (see the conditional assignment to $gccflag above). ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). Also, it might not be ## supported by the other compilers which use the 'gcc' depmode. ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The second -e expression handles DOS-style file names with drive # letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the "deleted header file" problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. ## Some versions of gcc put a space before the ':'. On the theory ## that the space means something, we add a space to the output as ## well. hp depmode also adds that space, but also prefixes the VPATH ## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like '#:fec' to the end of the # dependency line. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ | tr "$nl" ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" ;; xlc) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts '$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done aix_post_process_depfile ;; tcc) # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 # FIXME: That version still under development at the moment of writing. # Make that this statement remains true also for stable, released # versions. # It will wrap lines (doesn't matter whether long or short) with a # trailing '\', as in: # # foo.o : \ # foo.c \ # foo.h \ # # It will put a trailing '\' even on the last line, and will use leading # spaces rather than leading tabs (at least since its commit 0394caf7 # "Emit spaces for -MD"). "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. # We have to change lines of the first kind to '$object: \'. sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" # And for each line of the second kind, we have to emit a 'dep.h:' # dummy dependency, to avoid the deleted-header problem. sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" rm -f "$tmpdepfile" ;; ## The order of this option in the case statement is important, since the ## shell code in configure will try each of these formats in the order ## listed in this file. A plain '-MD' option would be understood by many ## compilers, so we must ensure this comes after the gcc and icc options. pgcc) # Portland's C compiler understands '-MD'. # Will always output deps to 'file.d' where file is the root name of the # source file under compilation, even if file resides in a subdirectory. # The object file name does not affect the name of the '.d' file. # pgcc 10.2 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using '\' : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... set_dir_from "$object" # Use the source, not the object, to determine the base name, since # that's sadly what pgcc will do too. set_base_from "$source" tmpdepfile=$base.d # For projects that build the same source file twice into different object # files, the pgcc approach of using the *source* file root name can cause # problems in parallel builds. Use a locking strategy to avoid stomping on # the same $tmpdepfile. lockdir=$base.d-lock trap " echo '$0: caught signal, cleaning up...' >&2 rmdir '$lockdir' exit 1 " 1 2 13 15 numtries=100 i=$numtries while test $i -gt 0; do # mkdir is a portable test-and-set. if mkdir "$lockdir" 2>/dev/null; then # This process acquired the lock. "$@" -MD stat=$? # Release the lock. rmdir "$lockdir" break else # If the lock is being held by a different process, wait # until the winning process is done or we timeout. while test -d "$lockdir" && test $i -gt 0; do sleep 1 i=`expr $i - 1` done fi i=`expr $i - 1` done trap - 1 2 13 15 if test $i -le 0; then echo "$0: failed to acquire lock after $numtries attempts" >&2 echo "$0: check lockdir '$lockdir'" >&2 exit 1 fi if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" # Add 'dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in 'foo.d' instead, so we check for that too. # Subdirectories are respected. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then # Libtool generates 2 separate objects for the 2 libraries. These # two compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir$base.o.d # libtool 1.5 tmpdepfile2=$dir.libs/$base.o.d # Likewise. tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d "$@" -MD fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done # Same post-processing that is required for AIX mode. aix_post_process_depfile ;; msvc7) if test "$libtool" = yes; then showIncludes=-Wc,-showIncludes else showIncludes=-showIncludes fi "$@" $showIncludes > "$tmpdepfile" stat=$? grep -v '^Note: including file: ' "$tmpdepfile" if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The first sed program below extracts the file names and escapes # backslashes for cygpath. The second sed program outputs the file # name when reading, but also accumulates all include files in the # hold buffer in order to output them again at the end. This only # works with sed implementations that can handle large buffers. sed < "$tmpdepfile" -n ' /^Note: including file: *\(.*\)/ { s//\1/ s/\\/\\\\/g p }' | $cygpath_u | sort -u | sed -n ' s/ /\\ /g s/\(.*\)/'"$tab"'\1 \\/p s/.\(.*\) \\/\1:/ H $ { s/.*/'"$tab"'/ G p }' >> "$depfile" echo >> "$depfile" # make sure the fragment doesn't end with a backslash rm -f "$tmpdepfile" ;; msvc7msys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for ':' # in the target name. This is to cope with DOS-style filenames: # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. "$@" $dashmflag | sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this sed invocation # correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -arch) eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" # makedepend may prepend the VPATH from the source file name to the object. # No need to regex-escape $object, excess matching of '.' is harmless. sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process the last invocation # correctly. Breaking it into two sed invocations is a workaround. sed '1,2d' "$tmpdepfile" \ | tr ' ' "$nl" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E \ | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" echo "$tab" >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: nip2-8.7.0/proj/0000755000175000017500000000000013224651032010347 500000000000000nip2-8.7.0/proj/src/0000755000175000017500000000000013224651032011136 500000000000000nip2-8.7.0/proj/src/nip.rc0000644000175000017500000000002413224651032012166 00000000000000nip ICON "nip.ico" nip2-8.7.0/proj/src/makefile.msc0000644000175000017500000000723513224651032013346 00000000000000# autogenerated from automake.am with automake.py TOP = ..\.. PRJ_TOP = .. PACKAGE = nip PKG_VER = 7.8.6 !INCLUDE $(TOP)\glib\build\win32\make.msc !IFDEF DEBUG LDFLAGS = $(LDFLAGS) /NODEFAULTLIB:msvcrt !ENDIF top_srcdir = $(PRJ_TOP) top_builddir = $(PRJ_TOP) includedir = $(PRJ_TOP) LT_RELEASE = $(PKG_VER) SUBDIRS = # BITMAPS sub-all: for %d in ($(SUBDIRS)) do nmake -nologo -f makefile.msc sub-one THIS=%d sub-one: cd $(THIS) nmake -nologo -f makefile.msc cd .. YACC = \ @YACC@ -d OBJECTS = \ action.obj \ asynch.obj \ boxes.obj \ browse.obj \ builtin.obj \ class.obj \ colourdisplay.obj \ column.obj \ columnview.obj \ command.obj \ compile.obj \ conversion.obj \ conversionview.obj \ doubleclick.obj \ dump.obj \ expr.obj \ filemodel.obj \ filename.obj \ filenameview.obj \ filesel.obj \ graph.obj \ gtkfilesel2.obj \ gtkmenubar2.obj \ gtkutil.obj \ heap.obj \ heapmodel.obj \ classmodel.obj \ idialog.obj \ iimage.obj \ iimageview.obj \ iregionview.obj \ iregiongroup.obj \ iregiongroupview.obj \ regionview.obj \ iregion.obj \ iarrow.obj \ iarrowview.obj \ imageinfo.obj \ imagedisplay.obj \ imagepresent.obj \ imageview.obj \ iwindow.obj \ led.obj \ link.obj \ main.obj \ mainw.obj \ matrix.obj \ matrixview.obj \ model.obj \ orderitem.obj \ orderlist.obj \ paintboxview.obj \ path.obj \ predicate.obj \ watch.obj \ reduce.obj \ rhs.obj \ rhsview.obj \ row.obj \ rowview.obj \ secret.obj \ slider.obj \ colour.obj \ real.obj \ realview.obj \ option.obj \ tslider.obj \ optionview.obj \ sliderview.obj \ colourview.obj \ spin.obj \ statusview.obj \ subcolumn.obj \ subcolumnview.obj \ symbol.obj \ table.obj \ itext.obj \ itextview.obj \ toggle.obj \ toggleview.obj \ tool.obj \ toolkit.obj \ toolkitgroup.obj \ toolkitgroupview.obj \ toolkitview.obj \ toolview.obj \ trace.obj \ program.obj \ tree.obj \ util.obj \ view.obj \ vips_call.obj \ wild.obj \ workspace.obj \ workspacegroup.obj \ workspacegroupview.obj \ workspaceview.obj \ \ lex.obj \ parse.obj \ ADDONS = \ \ regex.obj \ fnmatch.obj regex.obj : regex.c regex.h $(CC) $(CFLAGS) -GD -c -DREGEX_MALLOC -DHAVE_STRING_H $(PKG_CFLAGS) regex.c $(PACKAGE).res : $(PACKAGE).rc $(PACKAGE).ico rc -r -fo $(PACKAGE).res $(PACKAGE).rc RESOURCE = $(PACKAGE).res EXTRA_DIST = \ doc LDADD = \ @IP_CFLAGS@ @IP_LIBS@ CLEANFILES = \ parse.c \ parse.h \ lex.c \ tags INCLUDES = \ -FI msvc_recommended_pragmas.h \ -DIM_NO_VIPS7_COMPAT \ -I $(PRJ_TOP) -DHAVE_CONFIG_H -I. \ $(VIPS_CFLAGS) \ $(GTK_CFLAGS) -DGTK_ENABLE_BROKEN \ $(LIBXML2_CFLAGS) \ $(DIRENT_CFLAGS) PKG_LINK = \ $(VIPS_LIBS) \ $(GLIB_LIBS) $(GTK_LIBS) \ $(DIRENT_LIBS) \ $(LIBXML2_LIBS) all : \ $(PRJ_TOP)\config.h \ sub-all \ $(PACKAGE).exe # bison --defines --output=parse d:\devel\my-gtk\nip-7.8.6\src\parse.y lex.c : lex.l flex -olex.c lex.l $(PRJ_TOP)\config.h: $(PRJ_TOP)\config.h.win32 copy $(PRJ_TOP)\config.h.win32 $(PRJ_TOP)\config.h RESOURCE = $(PACKAGE).res $(PACKAGE).lib : $(OBJECTS) lib /out:$(PACKAGE).lib $(OBJECTS) $(PACKAGE)-$(PKG_VER).dll : $(OBJECTS) $(PACKAGE).def $(CC) $(CFLAGS) -LD -Fe$(PACKAGE)-$(PKG_VER).dll $(OBJECTS) $(PKG_LINK) user32.lib advapi32.lib wsock32.lib $(LDFLAGS) /def:$(PACKAGE).def $(PACKAGE).exe : $(OBJECTS) $(PACKAGE).res $(CC) $(CFLAGS) -Fe$(PACKAGE).exe $(PACKAGE).res $(OBJECTS) $(PKG_LINK) \ user32.lib advapi32.lib shell32.lib wsock32.lib winspool.lib \ $(LDFLAGS) .c.obj : $(CC) $(CFLAGS) -GD -c $(PKG_CFLAGS) $< nip2-8.7.0/proj/src/nip.ico0000644000175000017500000000137613224651032012347 00000000000000 è( @€€€€€€€€€ÀÀÀ€€€ÿÿÿÿÿÿÿÿÿÿÿÿˆˆˆˆˆˆˆˆˆ3333333387wwwwwww88»»ww·88»°wp88»ww88»pw88»pww80www8ÿwww8ÿÿwwww8ÿðppw8ÿÿ ðw8ÿð ððw8ÿ»w8ÿÿ»°wwww8ÿð8»»wwp·8ÿÿ8»»° ·8ÿð÷8»»»»»»·8ÿð÷8»»»»»»·8ÿÿ÷8»»»»»»·8ÿðÿ÷8ˆˆˆˆˆˆ‡8ðÿ÷333333338ÿÿÿwwwwwwwwwÿÿððððÿÿÿðÿððÿÿÿøÿøÿøÿøÿøÿøÿøÿøÿøÿøÿøÿðÿàÿÀÿÀÿ€ÿþþüøððàÀÿÿÀÿÿ€?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿnip2-8.7.0/proj/README0000644000175000017500000000013313224651032011144 00000000000000sample config and makefiles for building with the MSC toolchain experts only, no support! nip2-8.7.0/proj/config.h.win320000644000175000017500000000673513224651032012661 00000000000000/* config.h.win32. Handcrafted */ /* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP systems. This function is required for `alloca.c' support on those systems. */ #undef CRAY_STACKSEG_END /* Define if using `alloca.c'. */ #undef C_ALLOCA /* Define if you have `alloca', as a function or macro. */ #undef HAVE_ALLOCA /* Define if you have and it should be used (not on Ultrix). */ #undef HAVE_ALLOCA_H /* Define if you have the header file, and it defines `DIR'. */ #define HAVE_DIRENT_H /* Define if you don't have `vprintf' but do have `_doprnt.' */ #undef HAVE_DOPRNT /* using flex, rather than lex */ #define HAVE_FLEX /* Define if your system has a working `fnmatch' function. */ #undef HAVE_FNMATCH /* Define if you have the `getcwd' function. */ #undef HAVE_GETCWD /* Define if you have the `getwd' function. */ #undef HAVE_GETWD /* Define if you have the header file. */ #undef HAVE_LIMITS_H /* Define if you have the header file. */ #undef HAVE_MALLOC_H /* Define if you have the `mkdir' function. */ #define HAVE_MKTEMP 1 /* what a mess, use glib please! */ #define mktemp(s) _mktemp(s) /* have sys/mount.h */ #undef HAVE_MOUNT_H /* Define if you have the header file, and it defines `DIR'. */ #undef HAVE_NDIR_H /* Define if you have the `putenv' function. */ #undef HAVE_PUTENV /* Define if you have the `regcomp' function. */ #undef HAVE_REGCOMP /* have sys/statvfs.h */ #undef HAVE_STATVFS_H /* have strccpy() in -lgen */ #undef HAVE_STRCCPY /* Define if you have the `strcspn' function. */ #undef HAVE_STRCSPN /* Define if you have the `strspn' function. */ #undef HAVE_STRSPN /* Define if you have the `strstr' function. */ #undef HAVE_STRSTR /* Define if you have the header file, and it defines `DIR'. */ #undef HAVE_SYS_DIR_H /* Define if you have the header file, and it defines `DIR'. */ #undef HAVE_SYS_NDIR_H /* Define if you have the header file. */ #undef HAVE_SYS_TIME_H /* Define if you have that is POSIX.1 compatible. */ #undef HAVE_SYS_WAIT_H /* Define if you have the header file. */ #undef HAVE_UNISTD_H /* have sys/vfs.h */ #undef HAVE_VFS_H /* Define if you have the `vprintf' function. */ #undef HAVE_VPRINTF /* Name of package */ #define PACKAGE "nip" /* If using the C implementation of alloca, define if you know the direction of stack growth for your system; otherwise it will be automatically deduced at run-time. STACK_DIRECTION > 0 => grows toward higher addresses STACK_DIRECTION < 0 => grows toward lower addresses STACK_DIRECTION = 0 => direction of growth unknown */ #undef STACK_DIRECTION /* Define if you have the ANSI C header files. */ #undef STDC_HEADERS /* Define if your declares `struct tm'. */ #undef TM_IN_SYS_TIME #define HAVE_WINDOWS_H /* Version number of package */ #define VERSION "7.8.6" /* Define if `lex' declares `yytext' as a `char *' by default, not a `char[]'. */ #undef YYTEXT_POINTER /* Number of bits in a file offset, on hosts where this is settable. */ #undef _FILE_OFFSET_BITS /* Define for large files, on AIX-style hosts. */ #undef _LARGE_FILES /* Define to empty if `const' does not conform to ANSI C. */ #undef const #define HAVE__MKDIR //hacky #define PATH_MAX 512 #define strcasecmp(a,b) g_strcasecmp(a,b) nip2-8.7.0/ChangeLog0000644000175000017500000025101113330331643011070 00000000000000started 8.7.0 22/5/18 - added vips7compat.h include for libvips 8.7 - more output for -V to help debugging CLI mode - revised Text widget - added Canny - Sobel uses the new vips_sobel() operator - add mitchell kernel - add 8.6 compat started 8.6.1 1/5/18 - better enum display in header started 8.6.0 16/8/17 - add scRGB support - improve radiance support - add composite to alpha menu - add Image / Select / Fill - add combine mode to indexed histogram - better compat handling started 8.5.1 22/1/17 - fix a crash bug - make separate Image / Alpha menu, add Add, Extract, Drop started 8.5 24/1/17 - add max_slope to lhist - gaussnoise goes via vips8 now - add snake option to array join [Joe Padfield] - parse_float was broken for numbers starting "0." - add alpha section to Image / Band menu ... Flatten, Premultiply, Unpremultiply, Blend - add Entropy to hist menu started 8.4.1 25/9/16 - simplify nip2-icon.rc build, bgilbert started 8.4 - added Perlin and Worley menu items started 8.3.1 on 19/5/16 - disable debug by default, thanks Benjamin - configure changes to help win64 - improve middle-drag in ws and image view - be more careful about the name of the image file we remove on close - simpler system for positioning new columns - rename boostrap.sh as autogen to help snapcraft started 8.3.0 on 28/3/16 - move path search stuff into _convert from _magick - added autotrace menu item - resize now uses vips_resize() behind the scenes - added Kernel type for picking interpolators started 8.2.1 on 4/12/16 - tiny improvement to idle handling - added R2 to linreg and linregw - fixed vips_call for image array args - changed default unsharp settings to be less brutal and to ban -ve sharpness started 8.2 on 4/11/15 - version bump to match vips - fix icc_import with RGBA images - added mapim and Image / Transform / Map - added Filter / Coordinate Transform ... polar and rect in there started 8.0 on 3/5/15 - version bump for vips-8.0 release - fix a race in Makefile.am, thanks nieder - get rid of run-nip2.sh, mostly useless, thanks nieder started 7.42.1 started 30/12/14 - add fftw3 configure - fix gvc configure started 7.42.0 started 4/11/14 - removed the non-nip2 bits of the test suite, they are in vips now started 7.41.0 8/10/14 - remove greyc stuff started 7.40.5 17/9/14 - improve .desktop file - fix Lch -> Yxy conversion started 7.40.4 19/8/14 - swap the HP printer profile for a freer one - swap lena for a PD sample started 7.40.3 4/7/14 - fix compile with older libvipes, now goes back to at least 7.30 - fix more bash-isms to help freebsd - don't test IM by default, in case it's not installed - get graph display working again with latest libgvc started 7.40.2 30/6/14 - fix quoting in magick commands - auto-fallback to gm if no convert found - use libxml2 pretty-printer started 7.40.1 24/6/14 - update copyright date - larger max size for dialog text - fix popen()pclose() warnings on win started 7.40.0 23/6/14 - version bump started 7.39.0 28/1/14 - add optional libgsf dependency - added export-to-file to plotwindow - added graph_export_image - added .to_image to Plot - added .caption / .xcaption / .ycaption options to Plot - added caption / xcaption / ycaption options to Plot_object - added snibgo's much better ImageMagick menu items - added test_magick.ws to make check - added series_captions option to Plot_object - support imagevec as a vips_call argument - added system2 and system3 - added Magick.version detector - better image cache menu item - added hough_line and hough_circle - removed tear-off menus, gtk+ has deprecated them started 7.38.4 23/6/14 - fix memccpy() in tool.c, thanks khindenburg started 7.38.3 16/5/14 - fix tiny timeout error started 7.38.2 21/1/14 - fix a tiny mem leak started 7.38.1 20/1/14 - fix scRGB display started 7.38.0 18/1/14 - version bump started 7.36.6 9/1/14 - fix some clang warnings - add some brackets to find_colour-calib, seems to help clang builds with optimiser, strangely started 7.36.5 19/12/13 - add "merge into ws" item to rmb tab gutter menu - oops, progress feedback was accidentally disabled - error boxes were accidentally supressed started 7.36.4 18/10/13 - fix bootstrap warnings - use g_mkdir() - better load of workspaces with closed columns started 7.36.2 8/10/13 - add --profile option - fix + button on wsgv started 7.36.1 7/10/13 - better ^Q behaviour, thanks MvGulik started 7.36.0 3/10/13 started 7.35.0 9/8/13 - removed old thing to show API docs (thanks Benjamin) - measure now lets you pick the area to measure, and draws sample patches - new column now goes to right of current column, not alphabetically - detect doubleclick on ws tab label background - tabs can be locked - tabs have error indicators started 7.34.1 28/6/13 - fix build on older gtk, thanks Joe started 7.34.0 7/6/13 - version bump - drag col to far left to insert - fix compat warning text - fix prefs revert to default - reenable scroll-wheel slider change in paintbox and conversionview - insert new columns in alphabetical position started 7.33.0 14/3/13 - add tabs - get_* work on Groups - columns snap to a grid started 7.32.2 12/3/13 - add a test for seq mode started 7.32.1 7/3/13 - remove "fred" from dist - license updates, thanks Benjamin started 7.32.0 22/1/13 - added colour temperature to colour and colour to colour temperature - removed gtksheet, broken on windows, no future on anywhere - added histogram invert - much better Matrix / New items started 7.31 3/9/12 - don't show tooltips for toolkit menu items with submenus (thanks MvGulik) - better definition of foldr1 - better definition of to_group (thanks MvGulik) - better defintion of scan, renamed as scanl - don't clear def browser filter on text buffer ::changed in program window - update program window filter on cursor move started 7.30.2 24/12/12 - small fix for OS X ML started 7.30.1 7/8/12 - update rectangle select (thanks Joe) - group save was broken (thanks John VV) started 7.30.0 20/7/12 - update for new version started 7.29.0 20/6/12 - added skew and kurtosis - added Definition Browser to program window, shows stuff as you program - program window cleanups - Find calib is much faster and handles linear float input better - Find calib optionally leaves brightness untouched - Apply calib handles linear float input better - add a 7.28 compat area started 7.28.5, 8/5/12 - change keybinding for Delete to ctrl+bsp to work around a GTK bug - rewrite filenames on workspace load, file selection and file drag-drop started 7.28.4, 6/5/12 - added bigtiff save option started 7.28.3, 17/4/12 - up max size of user defs, lets you work with larger groups started 7.28.2, 10/4/12 - complex constant divided by real constant was wrong - more self-tests - disable the libvips operation cache, it doesn't know about invalidate and breaks various things started 7.28.1, 12/3/12 - oop, add Array to private Type decoder (thanks MvGulik) - new version of Draw / Scale (thanks Joe) started 7.28.0, 30/1/12 - bump for new stable version - better "make check" - disable asserts and cast checks in production builds - much faster draw_rect - remove background stipple from image display (helps win32) - Draw / Rect lets you adjust line thickness - added Draw / Scale (thanks Joe) - added VipsStats test (thanks Rebecca) started 7.27.0, 23/8/11 - bump for new cycle - add raw load/save test - test fits load/save - better image header display, now on right-click rowview menu - search image header - rmb popup menu on imageview windows - popup menu button widget - added "vips_call" builtin to call any vips8 operation - added Matrix / New / Series - added Matrix / Sort started 7.26.5, 31/12/11 - fix possible security thing in yyerror(), thanks Jay started 7.26.4, 14/9/11 - better error messages for print-main started 7.26.3, 15/8/11 - tidier cancel messages - disable dump.c debug started 7.26.2, 10/8/11 - update threading test for fixed benchmark - fix blocking in progress update (thanks M. v. Gulik) - search returns empty list for file not found rather than throwing an exception - magick_command tries to use $VIPSHOME/bin/convert.exe, if it exists - magick_command tries quotes filenames started 7.26.1, 28/7/11 - much better threading test, based on im_benchmarkn() started 7.26.0, 26/7/11 - version bump started 7.25.0, 7/1/11 - version bump - oop spelling - fix a crash with resizing dirty matrices - minor fix to vips_call error messages - more tests in "make check" - moved vips_cache and vips_call out of the vips_ namespace - added approx. option to blur/sharpen - added Matrix / New Circular / Square / Identity - removed the splash screen, all machines are fast enough now - added EXEEXT env var - better "bad superclass" error - changed order of args for Option_enum - added Option_list - added a simple Magick menu - better compat handling - added a 7.24 compat dir - removed the "already open for read" error on save, too annoying for the small amount of safety it gave you - test pfm load/save - also test cmyk jpeg/tif load/save - allow file modes in filenames, so "nip2 wtc_pyr.tif:2" works - show main window much sooner during workspace load and startup - better progress feedback - added Image / Select / Rectangle - added Image / Draw menu started 7.24.0, 30/11/10 - bump for 7.24 - fix build without graphviz - much faster colour atlas menu item - fix make check, again - fix debug everywhere - fix a va_args problem on Windows started 7.23.0, 2/8/10 - fix a crash in thumbnail preview with large images - doublelick while painting with a rect (eg. text) would crash (thanks M.v.Gulik) - drag multiple workspaces to the mainw could get stuck (thanks M.v.Gulik) - find-again before find would crash (thanks M.v.Gulik) - open multiple ws in file browser would crash - added filemodel_set_window_hint() and filemodel_get_window_hint() to help ^Q display popups on the right window - split vips_call.c to vips_call / vips_cache - added IM_TYPE_RW support to vips_call.c: you can call paintbox operations directly now - gtk_window_present() parents when we show children in iwindow.c - fix a crash with win32 and two PRESS on a window while in rect mode (thanks M.v.Gulik) - fix a crash with duplicate Colour (thanks M.v.Gulik) - fix an occasional crash with ^Q in imageview - added high-quality thumbnail option (thanks Martin) - set lib env var more carefully (thanks Jay) - configure tests for libgvc, the graphviz library - added "Workspace as graph" view option - better "segment" menu item - "value" menu item - rename stuff to avoid name clashes with cfitsio - "make check" runs twice, with and without vector stuff - better infobar behaviour - test_conv.ws tests convolution carefully - nib radius slider replaces the old 1-10 dropdown, nibs above radius 0 are anti-aliased - changes to help rhel5 - oop, could delete vips files accidentally - better file search started 7.22.2, 5/7/10 - show nthreads in space free tooltip - fix win32 button order, again - fix duplicate workspace - added ^Q, for quit nip2, to all windows - rename gtk_entry_*() to gtk_item_entry_*() in gtkitementry.c, thanks Adam started 7.22.1, 13/6/10 - relax tolerances in test_colour.ws, thanks Peter - improve region repaint during drag, thanks Ruven - test relational constants - test load / save in various file formats - test threading system - removed malkovich locale, oops started 7.22.0, 12/5/10 - version bump - gtksheet sizing changes, again - plot window destroy cleanup started 7.21.0, 8/12/09 - 7.16 ws load could fail (thanks Jim) - "make check" tests the example workspaces too - nip2-cli.c improvements (thanks Leo) - leak test improvements - set double-click time from the system - don't copy to file for paintbox, it makes dangling pointers if you use it in complex workspaces - thumbnail updates on paint actions, woo - rect and text tools have a working preview box - safer handling of missing exprs in formula - handle im_invalidate() in paintbox ourselves - much faster and smarter image window repaints, especially with the paintbox active - #CPUs in prefs defaults to zero, meaning autodetect - works without GtkInfoBar - better show/hide behaviour for paned - progress feedback for paintbox open started 7.20.5, 27/11/09 - fixed up GtkInfoBar support - oop, help was rather broken started 7.20.4, 26/11/09 - removed 'browse thumbnails' button from filesel - added 'preview' widget to file open - added some basic GtkInfoBar support started 7.20.3, 25/11/09 - argh, button order error in dialogs on win32 - updated help index - initial window size was too large started 7.20.2, 11/11/09 - make GRegex optional so we can work with older glibs - fix a crash with "-p" and Managedstring started 7.20.1, 11/11/09 - add "convf" operator - default number of CPUs bumped to 4 - plot.c can work with goffice-0.7.15 started 7.20.0, 9/11/09 - version bump - "make dist" fixes started 7.19.0 - remove deprecated use of GtkList in option edit ... needs replacing - dropped in new Joe defs (thanks Joe) - reverse dialog button order on win32 - fix memleak with IMAGEVEC args to VIPS - _check_all etc. no longer chain up, for a slight speed increase - fix crash with "" as LHS for various copy operations, eg. ("" ++ "a") - add test_snip.def to test language features - replace-from-file marks a workspace as modified - Arrow and Mark grab handles improved - "don't attach a profile" option for jpeg save - fixes for gtkdoc merge - set TMPDIR on startup to help im_system() - add RAD as a coding type (thanks Roland) - add Filter / Morphology / Segment menu item - much faster meanze for 8 & 16-bit unsigned images - added a "rotate" option to custom convolution - added Histogram / Find / Indexed - Cache defaults to 128x128 tiles - use libgoffice to display plots - use new gtksheet widget, fall back to treeview if we can't build it - better regexp searching in Program window (now full PCRE) - oop horrible tree_map() bug with uops caused a variety of strangeness - group image save now sets image save options (thanks Joe) - sum and product now work for any object - don't set non-existant properties in vips_object_new - faster constant image maker with im_embed() - added "join image array from list", thanks Joe - phew, label backgrounds are back - added raw import (thanks Jim) started 7.18.0 - bumped version numbers - added 7.16 compat mode - revised manual - added snohalo1 wrapper - dropper did not update inkwell picture - better button colour changes - fix examples started 7.17.2 - added progress.[hc] for a better progress/cancel system (again) - splash screen uses new progress system - added list delete, difference, "--" operator - fixed a bug with startup recomps not happening (it was trying to do them in the background, argh) - buildlut makes Plot, not Image - much faster gaussian mask build for large masks - "Size To" has a "break aspect ratio" option - better error message for "[1, 2] < [3, 4]" - support RAD coding - added Radiance menu started 7.17.0 - merged 7.16 branch back into trunk - bumped version number - manual version number was wrong - removed vips8 link, we've started moving that stuff into vips7 now - patches for ubuntu 8.10 - added yafr interp - rotate etc. now have an interp param - revised "resize" to use new modes - transform menu items have inter options - configure fails if bison is not found - fix the filesel filter after a filename change - nicer message on cancel - new VipsFormat stuff - LEXLIBS->LEXLIB (thanks Adam) - added Managedstring, removed old static string system - caption columns can be null, display "doubleclick to edit .." message if they are - added vipsobject builder from old call8 code - added vips_object_new builtin - moved BufInfo down into vips - added IM_INTERPOLATE to vips_call - added Interpolate class and Interpolate_picker - error window output no longer truncates on symbols with many errors - renamed 'Recover After Crash' as 'Search for Workspace Backups' - better Scale alignment in display - regions and scales default to live dragging - better image display defaults (no ruler, no display bar etc.) - thumbnails are transparent when you drag them - side panes have titlebars and close buttons - block attempts to OK on directories in file dialogs - we have a copyright symbol! nicer 'about' box too - better region label positioning - double images ignored rgb16/grey16 hints - configure dies if flex/lex not found - Managedgobject."property" works - added (dir gtype), (dir gobject) - oops, rank filters were off by one by default started 7.16.3 - fixed cancel system (again) started 7.16.2 - argh, "-o" was broken - oops, some left over code for function overloading in the parser - init builtins earlier, so we can spot accidental redefinition - added a NULL type, Group now uses it to indicate an empty slot - another stab at fixing the order of startup actions started 7.16.1 - better pointer set - fixed a couple of notify snafus - use g_assert() instead of assert() to avoid abort() death branch for 7.16 - bumped version - grey16/rgb16 not always set on colour space conversion - revamped test system - set GValue strings as refstrings - try to transform gvalues we get to strings, if we can - added Joe's shrink within macro - removed the last of the fade stuff for faster repaint - open multiple now makea a group, so we can process more files at once - revamped 'make check', much nicer and more useful - better file type guessing - better progress feedback - revised image write code gives better feedback - better group-save, again - fixed a problem with recalc backtracking started 7.15.0 - fixed segv with making tools for non-toplevels - expand the heap if more than 50% full after a GC (was 70%) - added nip2-cli.c (thanks Leo) - updated README - more HIGgy titlebar text in mainw/program - refactor: IWINDOW_TRUE/_FALSE renamed to _YES/_NO - adjustable panes in image header view - histdif was broken for unsigned image types - fix memleak in compile_lcomp() - better --help text - get rid of intltool - use g_idle_add() instead of GAsyncQueue for render notify - fix a segv in imageview destroy - == did not always find the best method - better time debugging in symbol recalc - added $var for string constants - added s => v syntax - fixed recursive invocation bug in vips_call.c - much better hashing of vips calls - configure shows a summary at the end - syntax change :-( lcomps now use [expr :: generators] to reduce ambiguity the old syntax failed for things like [a || b | a <- [true]; b <- [false]] - added --test, so we can check test_toolkits automatically - added --prefix, so we can run without installing - added "make check" support - got rid of the annoying progress popup, it's back in the status bar now - status bar tells you which sym it is computing - revised busy system does all busy feedback - configure switch to stop update of desktop database (thanks Adam) - vips_call hashing improvements - images are GCd after 60s of inactivity, rather than immediately, giving the call cache a chance to revive them ... speedup in some cases - added a 7.14 compat area - join_lr/_tb args swapped - check_args now does not recurse up a class, instead all _check members have to chain up ... a bit quicker - watch "invalidate" in vips_call.c cache ... so paint actions now decache indirect results as well - added Math / Cluster, though it needs a bit of work - insert now format-alikes - another go at removing refresh flicker ... region dragging flickers a bit instead - added Image / Header / Get / Custom - recurse for save groups of groups - added Image / Cache menu item - merged loadable-formats branch started 7.14.0 - updated docs - added 7.12 compat - check for update-mime-database and friends (thanks Tom) - more leak fixes - updated examples and prefs workspaces - break _Object.def out of _types.def - better "if image then constant else constant" behaviour - fixed segvs with IMAGE lifetime and progress dialogs - use xdg-open to show help pages, if available - fixed segvs with IMAGE lifetime and progress dialogs - fixed segvs with outdated iimage change callbacks - some tweaking of the toolkits menu - fixed another lcomp bug - intercept from greyscale option in find_calib - removed unnecessaary assert() from parser - recomp all on startup even in batch mode fixes some strange bugs - apply calib works for groups of images - renamed Error as iError to help windows - more small windows fixes - more small os x fixes started 7.13.3 - save image was broken, weakrefs were not being updated - wrongly setting vips-7.8 region compat mode on all old WS load - "Close" in ws defs pane menu was not working - removed image window / plot window transient-for behaviour, we lost maximise buttons :( - block ungroup of things larger than 100 elements - allow +/- for zoom in and out shortcuts - mainw rmb menu has open/merge items - merge ws doesn't add extra space - added LHS patterns, eg. "[a, b] = fred 12;" - better spacing in merge ws / load ws - added is_list_len and friends ... faster then len for long lists - compile on demand, saves 25% of startup time - now bison only, we won't work with yacc (will package deps need updating?) - added lcomp patterns, eg. "[x*y|[x,y]<-zip2[1..10][11..20]]" - use LHS patterns in defs - oop, dist typechecking could segv - split trace.c to make log.c, base class for logging windows - added error ... error logging window - added destory_if_destroyed() and done some cleanups - oop, im_and_image etc. refs remaining in compat - disallow const-only LHS patterns, eg. "12 = fred;" started 7.13.2 - remove Application from nip2.desktop.in - revised progress system ... works for "max" now! - fix reporting of parse errors in inner scopes - lcomps now nest correctly ... try "Matrix [[x*y|x<-[1..10]]|y<-[1..10]]" - workspaces loaded from stdin with -w save more sensibly started 7.13.1 - you can type "fred = 12" into a columnview, woo - gah, lcomps had "undefined" set on various members because of trimming off parser temps - more visible arrow dashes - added pane.[hc] - added a left pane to mainw to hold ws-local defs - ws-local defs sort-of work - added workspacedefs.[hc] - print all workspace mains on exit too - renamed lor/land as any/all, in line with Haskell - added INTVEC and DOUBLEVEC output - added greyc filter - added "--set" command-line option - better left/right pane widget - resize tk browser search box with pane - nicer widget colour change ... use "*xx*" in style file rather than setting names and contained names started 7.13.0 - woo, fork for new development version - started cleaning up parse.y - simpler DOT syntax ... A1."poop" works now - added lambdas ... \x x + 1 - added listcomp syntax ... [x | x <- [1..]; x > 12] - recomb was broken for >3 band images (thanks km) - lambdas were not being marked as locals correctly, oops - added listcomp code generator started 7.12.5 - tiny win32 cleanups - nicer formula widget, better view switching - better file filter lookup - oops, min and max only worked for rectangular lists started 7.12.4 - cleaner Makefile.ams - transform was only working for [[real]] :-( (thanks Mikkel) started 7.12.3 - added right click / save for plot widgets - remove .svn dirs from dist started 7.12.2 - added support for TIFF predictor - added Tasks / Capture / Plot Bands started 7.12.1 9/5/07 - custom convolution of Plot no longer loses Plot wrapper - better plot colours - better spacing in plot status bar - added histogram differentiate, zero crossings - better ifthenelse on groups - added "expr.(expr)" form, removed builtin get_member - larger sensitive area for arrow crosshairs - added region-on-image-from-region, again - minpos/maxpos work for lists - Math / List works for Groups - maxpos/minpos return -1 for [] - max/min error for [] - stricter about the empty matrix being [[]] - image/Image ==/!= list was broken - empty groups were broken - remove special case for assemble on groups ... you now need to group->list first - [] as a group member means no-value - better Group insides started 7.12.0 28/4/07 - fix up 7.10 compat mode - more fixes to the convert.sed script - small fixes to 7.12 toolkits for test_toolkits.ws started 7.11.18 10/3/07 - added plotwindow, floatwindow - duplicate plot was broken - floating plots have stuff - gtkplotcanvas.c only swallows motion/buttonpress events it handles - gtkplotcanvas.c no longer tries to do focus handling - plotwindow status bar - added plotmodel.[hc], plotpresent.[hc] - plotview has a caption, displays class name - better captions for real/group/vector in heapmodel - gtk_plot_canvas_destroy() was not unreffing the pixmap (thanks Simon) - added next error stock item - better clock value display - added keep-child-windows-in-front pref (thanks Rachel) - gtkplotcanvas.c has new cursor handling stuff to help nip do cursor changes for middle-drag scrolling - lots of toolkit tweaks - revised the manual - ooop, increment_filename fix, it was putting the number at the start of the filename if there was no number there - better batch mode error messages, added -V flag for verbose messages - oop, variable name from filename was a bit broken - started revising the examples - increment on save and browse thumbnails were broken by gtk-2.10, gah - removed debugging menus - bump for 7.12! w00t started 7.11.17 26/1/07 - snap hdrag of columns to make lining up easier - better CSV import - added zero-excluding mean and deviation to Math - better set-workspace-name on ws load - started a ws background popup menu - grey ramp orientation swaps w/h - better display control bar scale/offset for HDR XYZ/Lab/etc. images - possible fix for intermittent fail to recomp on edit bug - fix for image * group - paste in gtkplot sources (we will probably need to hack it about a little) - added plot/plotview - oop, memleak in icontainer - added a temporary Plot menu for testing - set plot tick step to avoid mad mallocs on large ranges started 7.11.16 21/12/06 - look for release on rulers as well as press - adapt for new Hist system - use im_concurrency_set() - add im_get_option_group() - oop, recursive invocation gah - slightly better error messages - better mainw title bar text - added 'splits' - better trace / profile / leak options - more robust find chart calib - only interpret RGB16 for display for int formats - change im_histgr args - oops, paintbox could set delete-on-close sometimes - custom blur has many more controls - better inter-workspace "depends on ..." messages - chop/assemble image arrays now work on groups of groups, not list of lists so you can process the chopped up image - added 7.11 toolkit_tester, plus a little sed sscript to update old workspaces started 7.11.15 6/12/06 - tiny fixes to startup code started 7.11.14 6/12/06 - Vector arithmetic fix - Vector display class - more Matrix fixes started 7.11.12 8/9/06 - Image Rank no longer rounds up - only obey IM_CONCURRENCY pref in GUI mode - added GVALUE input/output args - added set_header, Set Metadata - use LC_ALL rather then LC_MESSAGES (thanks Simon) - better range == 0 check in conversionview - re-added make-named-column action - better textview reset during background recomp behaviour - added LUT from scatter - added AC_CHECK_TOOL to configure to find tools for cross-compilation. - added map_nary, Crop now loops on all args - test for glibtoolize during configure - added tag image as hist, set type, image->matrix more flexible - added get header field - added Real displayer - reordered Image menu - optionview refresh was a bit broken - ruler resize was a bit broken - map_nary recurses - make image windows children of the mainw ... so they can't pop behind - "mean" can do lists of images etc. - move ->parent from idialog into iwindow - revised to_list behaviour, added to_Group - show save prefs automatically on save - removed broken scroll on focus code in columnview - map_*ary no longer loop over lists ... they often represent compound objects, eg. "mean [1, 2, 3]" - new preferences viewer - kill parent of nested dialog now kills dialog as well - more JPEG save prefs - CSV save prefs started 7.11.11 18/7/06 - small polishes from gtkdisp3 - tweak for im_init_world() changes - better behaviour for scale == 0 in conversionview - better original-filename handling - use im_msb() for GREY16/RGB16 images - csv2vips wrapper update - added parse_time - fontname defaults to "Sans" ... stops a warning on load - set window title less often - update i18n infrastructure started 7.11.10 23/6/06 - sync CVS again - oop, selected closed columns caused kb grab confusion - added call8.[hc].. vips8 interface - new builtins vips_image_new, vips_call - reworked doc build again, seems to work in dapper now - added missing .br to man page - allow '_' in environment variables in "expand" - mainw tooltip reports operation cache size - upped default memoisation cache max to 10000 - better caption for Group objects - oop, mac os x detect was broken - GSL error handler - more work on vips8 interface - add gcc attributes for varargs and noreturn - mac build fixes - keep prefs in ~/Library on mac - vips8 interface done - more tweaking for vips_call for robustness - quick stab at background recomp in workspaces ... some stability problems - tiny Toolitem fixes - "Calculating ..." appears in status bar during a background recomp - is_image builtin says yes to vips8 images too - added Analyze and Vips8 menus - added vips8_get_header builtin - better ifthenelse behaviour for image/constant mixes started 7.11.9 15/5/06 - reverse order of decls in image_name etc. to sensibleify Change Header options - better HIST preserving - bug in complex display control bar (thanks Jean) - use gtk_disable_setlocale() to preserve LC_NUMERIC setting (thanks Peter) - more g_ascii_strtod() and friends for double parse/print - disallow vips funcs with no input args - gtksheet was freeing pixmaps with g_free(), not g_object_unref() - better matrix type guesser - optional link to vips8 for testing - CSV load/save - strict reduction of vips_call arguments prevents GC during argument gather and dangling pointers - oop, problem in Transform in Image.def - added "dir" builtin - always grab focus for bottom entry widget on column select - even more test view reset tweaks - added "objects in workspace" count to main status tooltip - limit number of cursor shape updates started 7.11.8 22/4/06 - added gravity, Find Projections now shows centre - added project - added OpenEXR read support - fewer int/void* tricks to help x64 - call im_existsf() more sanely - better Group caption - don't save/load ->name automatically ... better 7.10 compat - better pointer printing - added support for RGB16 and GREY16 image types - workspace window size is saved in ws file and overrides the global default - some edit dialogs now done with member automation - fixed NO_SPLASH - fixed scroll to row on error, for closed columns started 7.11.7 11/3/06 - allow complex constants of the form "12j", cf. python (also allow i) - optionally display complex as "x + yj" - ifdef'd out some more debugging code .. saved 30kb! - new Managed class abstracts out code for GC/C managed objects - Imageinfo now sits on this - Managedfile object replaces the thing we had for read - split trims trailing fails too - scrapped ELEMENT_IMAGE .. we just have managed objects now - added managedgobject - added experimental Clock class - moved some views into modelview.c - delay showing the hglass for 0.2s - change clock to seconds, subclass off Real - modelview now has a right-button menu - disable tile fade animation for thumbnails - model _get()/_set()/_load()/_save() now automated - sort column jump widget - better scroll-to-column behaviour - column jump is tear-off-able - column jump is sorted by column name and name length - added geometric mean - added sum, product - added linear regression - fixed assert( 0 ) for VIPS operations with an implicit DISPLAY param - added optional dependency on GSL, added gammq builtin - print_base was broken for some argument combinations - shift + mwheel scrolls left-right in workspaces - update thumbnail on falsecolour / type changes in display bar - matrix now uses member automation - main uses GOption command-line parser - make sure we don't clear dirty on rows coontain errors - optionview only rebuilds the menu on change - 7.10 compat defs updated - itextview/clock fixes to make editing members easier - added -o cmdline switch - scrapped print-last mechanism ... printing main from an associated .def file is much better - always set argv, allow save of Image, split save to file and print value - save Matrix as well with -o - added -e option - revised man page - added Find Projections - raised default memoisation cache size and heap size started 7.11.6 18/2/06 - custom morph was broken, grid was broken (thanks Dave) - Matrix_file now uses "search" - reorganised morph menu slightly - added Format / CSV import - better handling of display of very long strings - added lazy (read "filename") builtin - \n was missing in expr_info error report - removed "save successful" info box for great HIG-ness - added is_prefix, is_suffix, is_substr - Pathname widgets add to session path - widgets like Group, Toggle, etc no longer add annoying stuff to tooltips - readded "auto-recalc" menu item - renamed Slider as Scale and added a caption field - oops, string constant "\\" failed - drag from konqueror might work now - added hist_thresh, added threshold items to Image / Levels menu - prettier Scale display, better display of multiline class member formula - added correlate, correlate_fast, Filter / Correlate - added "jump to column" menu item, handy for navigation in large workspaces started 7.11.5 15/2/06 - added "search" builtin - (c) line changed - itextview mouse enter/exit now does help/highlight - itextview insensitive in noedit mode - tweak formula to stop resize with clearlooks theme started 7.11.4 18/11/05 - added tile fade pref for Kirk ... it is a bit slow on win32 - fix compiler crash for [1..2] (thanks Jay) - automatically add an icon to the win32 .exe - added -main_load_args switch ... just a temp hack - better -main printing - added "path_separator" ... either '/' or '\\' depending on platform - better char constant parsing - better char constant display - added path_relative/_absolute/_parse - prefs now switch between / and \ automatically started 7.11.3 26/9/05 - display original filename only for iimage which really were loaded from a file - ppm read uses direct open, rather than converting to vips - fixed used-before-set problem in option ... could cause segvs when displaying rows built from .defs containing errors - added Filter / Blend / Alpha Blend (thanks rich) - added Edit / Info (Ctrl-I) to mainw, some stuff there now, space for more to go in - removed nip2-7.11.ebuild now that nip2 is in gentoo portage - desktop integration binds .v files to nip2 (thanks Ruven) - align cols marks the ws as modified - configure.in magic stolen from pango ... we now automatically disable gobject cast checks in production builds - display formula rather than value if there's a visible graphic - falsecolour and type applied to thumbnails - fix gcc4 warnings - use g_mem_profile() - plot slice can now plot along any arrow - oop, some filters inadvertantly overrode width/height - fix isclass is_class confusion - itextview only shows value for non-class rows ... we assume members / graphic will show the value, so we show the formula - don't apply scale/offset displaybar controls to histograms / fourier images if Interpret Types is on - better initial kb focus for file load/save dialogs - better tooltip for iimageview - tooltips on demand function added - colourdisplay, ... adapted to new dynamic tooltip API - use input-only eventboxes for spinbuttons - better rowview tooltip - oops, buf_appendc() was a bit broken, fixed in vips too started 7.11 (1/6/05) - view image header now shows meta fields too - does INTVEC args to vips - now in CVS - added Analyze format - added name2gtype, gtype2name builtins - added get_header, grid, matrix lr/tb join - slice into tiles was broken for case tile size == image size - removed led.[hc], now uses stock system - always define our own strcasestr - icc import offers to use embedded profile - added 7.10 compat mode - "reset" in display bar resets to workspace default, not to 1/0 - column titlebars reorganised - reenable gtksheet support now gtkextra-2.0 is out - original-filename tracks name loaded at - bumped version to 7.11.2 - oop, fixed a nasty refresh bug - configure now adds LEXLIB to link line - pasted gtksheet code in so we can hack it - added matrix area selects - added Matrix / Extract / Area - slightly better default widget handliing in dialogs started 7.10.11 - docs no longer contain absolute nav links - increment filename on save works again - hide closed columns in NOEDIT mode - install a .desktop file for GNOME (thanks Denis) - group, right click, ungroup, no longer pops a spurious error dialog - new pref lets you not use the crosshair in image display windows ... some desktop themes have very annoying crosshair cursors - call libMagick less to reduce segvs from the file open dialog with broken ImageMagick libs - show args in vips history - fixed a rounding bug in image resize which sometimes made it miss by a pixel started 7.10.10 - fixed crash in vips_call with repeated calls to fns with large image vectors - fixed crash replacing a region with an image - fixed exit if temp area was missing (thanks Denis) started 7.10.9 - allow filenames containing ':' chars - uses im_render_fade() for prettier image display - added CCITTFAX4 compression mode for TIFF save - oops, image save options were being ignored :-( - fix 64-bit compiler warnings - fixed problem with very long filenames - recover-after-crash no longer messes up recent menu - "Jump to" in program window was broken - fixed a crash with very large objects (thanks David) - swap shift/control scroll modifiers to match HIG - rotate matrix works for any size matrix - rotate quadrants works for matrix as well as image - added recalc after reload start stuff - use auto label wrap - firefox is now the default HTML viewer on *nix - limit matrix display size to 10x10 unless we have gtksheet - small startup speedups - destroy views when a column is folded away to save some memory - added Image Rank - band join is much faster at joining many bands - safer empty temp area - added cute column open/close animation - fixed a couple of problems with region dragging in compatibility mode - removed column name dialog (thanks Joe) - program window now lets you collapse the current kit - allow \r in .def files (so we work with DOS edited files) - added Image / Tile / Chop Into Tiles - added 'Open Examples' started 7.10.8 - explicit gthread dependency makes us work even if vips is built without threads - tiny .def fixes - "-time_save" switch turns on image save timer for benchmarking - mainw, trace, imageview, program now use gtkaction / gtkuimanager - mainw and imagewindow 'view' settings now update prefs for you - trace window uses new gtk_text_buffer/view widget - image header uses GtkTextView for history display - program window uses GtkTextView / GtkTreeView - windows remember their size and pane positions - fix a crash for edit defs of live widgets in prog window - removed default file type pref ... now remembers last image and matrix file type - added "Set As Workspace Default" to conversion bar - mnemonics for more popups - fixed a crash if you quit mainw with an image window open (thanks Jay) - new default cursor for imageview windows (thanks Jay) - regions only update when grabbed - now passes distcheck - use g_setenv(), g_mkstemp(), IM_FREE*(), g_set_application_name(), g_set_prgname() - better cursor change layering - better initial toolkitbrowser size - absoluteize & canonicalize VIPSHOME (so we work with a relative path for VIPSHOME) - better time-to-go text - more fixes to help compiles on 64-bit systems - invalidate operation cache on paintbox actions ... makes paint on FFT work again - save settings in APPDIR on win32 rather than a dotfile - added SAVEDIR environment variable started 7.10.7 - tiny build fixes - added "_" builtin function for i18n of toolkit menus - softer 'unpainted' checkerboard (thanks Kirk) - added "-i18n" command-line switch ... outputs constant _() strings and quits - compiled string constants are automatically shared between all defs - (_ "kjh") substituted at compile time - started marking up .defs for i18n - trace_args() was printing backwards started 7.10.6 - uses fftw3 if available started 7.10.5 19 oct 04 - removed "beta" from version - perspective distort works on groups (thanks Joe) - added get_left/get_top - chaneg and tag colourspace now have option boxes - new enum class and option builder cleans up some stuff - fixed crash for display control bar scale on black image (thanks Mikkel) - fixed image windows appearing off screen for workspaces made on large displays being used on small displays (thanks Mikkel) - un-offset regions during create in compatibility mode (thanks Rachel) - fixed a race in vips history memo-isation (thanks Joe) - speedups to vips function call history too started 7.10.4 4 oct 04 - always include formatted html in dist, and install on install - enable line crawl on win32 - prefs now autolayout, so look sensible even with font changes - added Image/Bands/Extract|Insert|Delete - linear match now works for groups - prefs were not always saving automatically - white_balance now takes two args: uses band ratios in small image to fix large image ... makes using one image to fix a group of images much easier - also, works in XYZ, has adjustable white point target - new icon (also used in About) - LabQ and LabS conversions were broken - check for strcasestr in libc - display symbolic names in iimage caption - oops, custom rank menu item was broken - use a dumber sort algorithm for row recomp order ... glib was skipping too many tests - thumbnail convert settings update is smarter - much faster display convert bar - Joe's .defs are in - image blend is smarter about reordering args - small win32 fixes - oops, did not remove all temp files if debugging was turned off started 7.10.3 13 sep 04 - to_real now works for toggle & bool - Rubber menu items were b0rked (thanks Joe) - Rubber scale removed (rubber transforms now automatically rescale) - fixed crash if you gave a number as a superclass (thanks Joe) - win32: block log output to prevent annoying console window appearing - shared model for toolkits menu and toolkitbrowser for big speed-up on main window build and better update behaviour - tk browser columns are reorderable (thanks Joe) - better image type guessing (thanks Joe) - thumbnails now use Type hint (thanks Joe) - added simple number base conversion - compound unary ops on Rect now work on width/height rather than left/top ... so abs(Arrow) now gives the expected result - repaint regionview immediately for better feedback - group save can save unboxed images and will iterate over nested lists - added trace VIPS operations, including cache hits/misses - small menu polishing - better 'revert to defaults' in prefs (thanks Jay) - documentation revised - fixed dependency tracking inside zero-arg hidden classes (thanks Joe) - help system updated started 7.10.2 23 aug 04 - convert bar settings now affect thumbnails too (thanks John VanVliet) - show hglass cursor more often - free rotate is now -180 to 180 (thanks Jay) - added 'toolkit browser' - work on docs - small toolkit fixes - better mainw decoration handling - minor main window menu rearranging started 7.10.1 28 july 04 + top-bottom 2 point mos was broken (thanks Joe) + added aliases for resample and estpar to help compat mode rubber sheet + colour ops on LABQ were broken by the alpha channel stuff + larger default max heap size (thanks Mikkel) + added ebuild (thanks Ruven) + oop, fftw includes missing from IP_CFLAGS + added Expression widget + suppress unneeded textview in NOEDIT mode + better textview layout + indent subcolumns in NOEDIT mode + better regionview text layout + Image/Format reamed to Image/Number Format (thanks Joe) + prelight for rows, expressions and spinbuttons + better row label layout + menus reworked (again) for Expression class + oops, resample renamed as transform_search + win32 build fixes + added "Align Columns To Grid" + better focus handling in imageview (thanks Mikkel) started 7.10.0 21 june 04 + toolkit menu is now built dynamically from heap ... you can write functions that generate menus + menu items can have tooltips, icons and labels + reorganised all menus + added "scope" keyword ... helps remove "root" from toolkits and makes them relocatable + added "solarise" filter for fun + added "diffuse glow" filter for fun + slight improvement to references to non-local members in deeply nested classes + ungroup will now also unpack lists + fixed segv if option menus were rebuilt while posted + added vips function call cache ... memoisation! + added prefs for #cpus and #memoise + gah, had forgotten to add several new widgets to model_base_init(), so they were not loading correctly if used in prefs + put tearoffs back and fixed accels + added empty-temps yesno on startup + -main can output many images correctly + display control bar false colour works on RGB images + regionviews are offset in compatibility mode started 7.9.7 1 jun 04 + enable broken for gtk all the time in program.h (thanks Ruven) + now uses im_text() to paint paintbox text (imageinfo.c:2185) + better zooming from menu items (imageview.c, imagepresent.c, imagepresent.h) + extra recalc on startup to build classes before we load args (main.c) + set_output() was missing an "!" before imageinfo_file (graph.c) + saner startup error logging (main.c) + expr_error_print_all() now goes to a buffer (expr.[hc]) + program.c has an error lister + main.c knows about new error lister + prefs.ws had max_undo broken by precedence change + String now interprets and expands C escape chars (eg. \n) + fixed close program window with selected text crash + fixed edit of row with error itext crash + added tile and Tile (replicate/mirror ... using im_replicate) + leak testing only in DEBUG builds + binary and unary operators now track the function they were called from, for slightly better error messages + Number spots trailing characters + shadow and text paint work on labq + added resize longest axis mode to Shrink_to + fixed up menu dumper + don't track load/save progress in command-line mode (thanks Joe) + arithmetic and relational ops now work on images with a mixed number of bands + UI polish suggestions from Joe are in or noted on the TODO + better update of visible hints in imagedisplay + new menu item system with "action" member lets you have icons, mnenonics and i18n for toolkits + compatibility system for 7.8 workspaces + better recent menu started 7.9.6 8 mar 04 + added Group class + .def files rewritten for Groups, also many enhancements + oops, imageview=>file=>view header was broken + prefs option for 1 bit TIFF write + scale in display control bar was broken (thanks Ruven) + removed on-demand compile, caused strange recomp problems :-( + value display no longer decompiles class args + tracks lineno for tools + better "not defined" error message + better "bad parent class" error message + better error messages from calling VIPS functions + better "link report" error message + relaxed the restriction on superclasses ... you can now have anything as a superclass, including a full constructed multi-arg class + detects redefinition of syms within a single parse action + precedence change: "?" and "." now the same precedence, like C + better "member not found" error message + spots nested comments + visualise image can handle labq hist + case ignored for class names in ws save files + SHIFT-mwheel now zooms in and out, like gimp-2.0; CTRL-mwheel scrolls left-right + autosave does not back up system workspaces (eg. prefs) (thanks Joe) + raised arrow/region create threshold + optionmenu swapped for gtk-2.4's combobox + now gtk 2.4 only, gah! too annoying to have lots of ifdefs + uses GtkFileChooser + oops, String/Number did not implement load/save + much polishing + row.c no longer tries to recomp all rows that ref "this", was causing confusion ... so, much faster, but will change row recomp order in some cases + hmm, trace was a bit broken + auug, instanceof_exact was broken for deeply nested classes, must have been like that forever + fixed a nasty and long-standing bug with shared classes ... we now always copy code rather than trying to cache it + ruler menus now have mm and offset setting + got rid of all xoffset/yoffset stuff, what a pain it was + Rect (and hence Arrow, Point, etc.) now behaves (roughly) like a complex for arithmetic + better select behavior on thumbnail drag + renamed Point as Mark, Point is now a subclass that lets old nip workspaces load + added Fontname widget + colour picker can be pinned up + better image thumbnail in workspace sizing + renamed Filename as Pathname and added a caption + all menus items rewritten for new batch system started 7.9.5 6 feb 04 + Rotate_fixed now has an option menu for the angle + imagearray_chop was broken + image thumbnail drags no longer embed the workspace name (unless they have to) + merge workspace now shows an error dialog on failure + statusview does not display more than 8 bands + workspace saves view mode in files, and mainw knows about it + now uses pkg-config to find vips + splash does not focus "remove" toggle by default + oop, hourglass was broken + better hourglass animation + select/extend select now works on image thumbnails again + PRINT_LAST now done in workspace _dispose() + drag image thumbnail to background to make a new column and put in a link + compile now delayed until value needed ... saves 10% on startup time + value pointers only registered for GC if necessary .. saves another 3% started 7.9.4 9 dec 03 + removed last gtk_timeout*()s + fixed some memleaks + views now _sink() their child views, so even if views don't ever get added to containers (eg. toolview, rowview), they still get freed properly + niprc now sets gtk-can-change-accels ... no one will discover this otherwise + added Custom_blur, dropshadow now uses a gaussian blur + some better error messages + Toolkits=>New items for filename, number, string + usage and About have version info + row delete now asks for confirmation + faster and more comprehensive common subexpression removal ... removed the 'optimise' option, might as well have it on always + better session path behaviour + much better open recent menu + better graphic save/replace scheme ... image filenames now change in a much more sensible way + better iimage/iregion/iarrow caption scheme + can now drag from image thumbnails, cool drag icons + progress feedback on non-vips saves, and you can cancel too (!) + added extract_row, extract_column, extract_band, join_lr join_tb + extract_area now works for matricies too + better ruler tracking at high magnifications + defines HAVE_FFTW so we actually save and load wisdom now + "pos_changed" signal stops all the suprious imageinfo changed signals + "file_changed" signal lets iimage know when files are swapped about + better vips_call error messages + image cache is on mtime as well as filename, so loading changed files gets the new version + auto-reload on file change preference + reorganised main window menus and scrapped "Insert" + done a simple splash screen with some startup feedback started 7.9.3 20 oct 03 + better welcome message + command-line mode with -main/-script/-workspace/-benchmark flags + better middle drag scroll + fixed the annoying race condition in repaint + fixed annoying rounding problems with colour drag + added TRUE/FALSE as synonyms for true/false + better image zoom shortcuts + more HIG-y layout in NOEDIT mode + added String/Number types + windows have icons, yea + fixed browse icons window + message internationalisation done + en_GB translation file + more higgy Stringset class + better help system for dialog boxes + paintbox now has buttons for tool select + cursor shape change in subwindows + load and save accelerators + configurable accelerators on the toolkit menu + more HIGgy dialogs for sliders, regions and matricies + basic "Open Recent" thing on workspace file menu + better keyboard nav for workspaceview + reworked image viewer for more model-view-ness + unified image view state + hmm, row_new_heap had a double paste, wonder how long that's been there ... should be a bit faster at recomps started 7.9.2 (30 sep 03) + toolbar accelerators done + image display, colour display, region display all reworked for gtk2-ness started 7.9.1 + HIG-ified (I hope) + broken into SDI interface + prefs dialog + toolbar in mainw + progress dialogs for image load/save + new error message system + live watch system started 7.9.0 (1 aug 03) + compiles with gtk2! + lots of cleaning up started 7.8.11 (30 jul 03) + better run-nip.sh start script + tiny fix to Calibrate_chart, thanks haida + big LED stolen from mozilla, just one of them now + add "%s" to existsf() calls for filenames with % in, thanks Clare started 7.8.10 (22 may 03) + icc profile JPEG save option + "." now on end of datapath in prefs + fixed a race condition in regionview ... could crash during paint on slow machines + better vector/image ops + D65 <-> D50 conversions improved + added d50 macbeth data file + added "measure" to _stdenv + added "insert", "extract_area" to _stdenv + "recomb" now works on matrix, vector etc. + more use of extract_area + mark_tree() is now iterative, so no stack overflow on large heaps + reduce_spine() is (slightly) less stack-hungry + recomp_row() will not rebuild models for rows with errors ... is this the best way to stop it though? + calib_chart now works on 16 bit images + bumped version to 7.8.10 to match vips ... less confusing + changed doc builds so that we can include formatted documentation in the make dist + fix to drag-n-drop code on winders (thanks Jim) + fix to incorrect error message in file info view + blocked dash crawl on winders, does nothing but flicker + "config" help option (thanks Kirk) + columns resize on close + middle-drag in workspace scrolls + new version of Joe's x-ray stuff + spec/ now has RPM .spec file + added a "run-nip.sh" startup script + moved reload to program window + drag column and workspace gets a + cursor + added "Match" to Image menu + added "Tone_for_print" to Print menu + new macos icon, thanks denis started 7.8.7 (10 feb 03) + added set of relative constructors for point/region/arrow/etc. + used in various places to fix problems with dialogs on images with displaced origins + _vislevel member sets default visibility level + updated widget menu items to set vislevel + added has_member, get_member builtins + add "%s" to everror() calls so we can have "%" in error messages safely + better if-then-else overloading + add "." to the end of the default search path + added "Area", a non-resizeable region + option.c was not initing value edit correctly + better initial size for option edit dialog + added orderlist_scan() + better title for region edit dialog + better row_save_test() means member ordering does not get lost on clone of edited rows + imagedisplay_link() no longer makes conversion for you ... change to iimageview.c _init() in step (removes redundant create/destroy pair) + imageview_new_area() could pick shrink == -1 in some circumstances (thanks Joe) + drag file to imageview or thumbnail does replace-image + Region can now never fail (thanks Clare) + better feedback during paint image creation + better imageview File=>New=>* for images with displaced origins + added Edit_header to Image menu + catch errors from libxml2 + Image == Vector was broken + Overlay has a "lock size" toggle + added Image=>Insert + renamed "Clear edits" as "Reset" + saves/restores fftw wisdom for first fft speedup + snap-to-* on region drag could resize region for zoom != 1 + statusbar gave bad numbers for FFT and histogram images + use im_invfftr() for speedup + better ruler display at high magnification + oops, program=>find was broken + pin-up now part of dialog started 7.8.6 (23 dec 02) + swapped list for hash table in heap set of managed pointers ... startup time fallen from 2.4s to 1s! + much better heap-full reporting + knows about png + patch from Hans Breuer: + paintbox sort-of hacked back in + fixes to file selector on win32 + misc. win32 #include fixes + OK buttons in dialogs now verbs + knows about magick + oops, Colour_chart_from_matrix and New_CRT_test_chart were broken in 7.8.5 + new heap_is*() function style handles eval errors better + paintbox rewritten ... now paint bar + snap to guide added + much smarter region repaint system now does true xor animation + dash lines crawl in the background + Rect/Region/Arrow etc. can now have float args and won't barf on images with strange offsets + default image file format preference + colour temperature conversions sorted out (thanks Haida) + fourier transforms now work with optical transform, rather than having optical built into visualisation (helps paintbox) + removed use of g_mem_chunk() + new colourdisplay class for displaying swatches of flat colour + drag-n-drop colours + tries to detect C stack overflow in reduce_spine() + new trace system reduces C stack usage during reduction + fixed a few memleaks + copy-on-write for member edit slightly reduces overcomputations and makes changes feed forward more gracefully + scale column coordinates with changes in font size + Tilt_brightness now works with n-band images + nativize paths + drag URIs to main window to load files (thanks Hans) + load any file type from command line arguments + small menu fixes + added RPM .spec files to distribution + help launcher for mac os x started 7.8.5 (12 nov 02) + added a bunch of "%s" to allow percent in tooltips + rearranged reduce_spine() to trim stack usage ... should reduce C stack overflow segv on deep recursion + added IR sample images to data dir + added rachel.con IR sharpen matrix + added Join.Array to build an image array + added Rubber stuff to Image + removed auto column switch on row select + added New to imageview window + finished-ish docs + >3 band images now display as RGB, 2 band images as mono ... helps display of imported RGBA/GA tiffs + better update of toolkit menus on tool change with zero-param classes + better positioning in toolkit menus with hidden items + default vid crop fixed + added Overlay to Image menu (thanks Joe) + added Calibrate_chart and Calibrate_image to Capture menu (thanks Joe) + help buttons linked to html manual display + can now load workspaces from win machines on *nix, and vice versa (tries both types of dir separator) + added Joe's Xray menu + present menus and rows in definition order rather than reference dependence order + added Browse_multiband (thanks Joe) + can now pop up help viewer on win32 as well + knows about new im_LabS2Lab() and im_Lab2LabS() funcs + junk Hist on load to lessen balance confusion + more helpful save/replace file dialog titles + longer doubleclick time + sub-menus tear-offable + settable default image window size in prefs + optional auto-popup of new image rows + gtkfilesel2 knows not to select something twice + larger default max heap size + ws save files are prettyprinted and uncompressed by default for greater portability started 7.8.4 (8 nov 02) + fixed recover workspaces (thanks Joe) started 7.8.3 (31 oct 02) + acinclude.m4 fixes for mac os x + set extension on get_filename if none set and not showing All + added Mosaic_force ... no tie-point refining, ever + only save edited sub-trees on workspace save ... shrinks ws files to about 1/3 their previous size + setlocale for numeric conversions to "C" to avoid "," as decimal point madness + escape C sequences in filenames (eg. "\n" etc) + vips functions and builtins now linked via main symbol table, rather than an extra lookup on "undefined" + pseudo-toolkits group VIPS packages and builtins + display help text on pseudo-tools in program window + "go to def" for program window + auto-expand for rows in program window started 7.8.2 (27 oct 02) + set $HOME on win32 + WinMain on win32 for non-cmdline start + -mwindows flag to stop command.com starting for non-command line start on w32 + lots of hacking on gtkfilesel2 for win32 compat + Matrix_file "" + New_mark.Region etc. menu item + more robust row recalc on .def edit + zero-arg local classes of classes sometimes recomped in the wrong order (thanks Joe) started 7.8.1 (18 oct 02) + d'oh, matrix constructors have to be classes for is_instanceof to work + much better change/refresh/scan behaviour for gtk_sheet + uses IM_DIR_SEP* for some win compat + many configure fixes for mingw + use gtk_fixed for workspace layout for gtkwin compat + rename Text -> iText to stop windows breakage + woohoo, fixed the grab problem in regionview + more robust workspace load + polishing started 7.7.23 (23 aug 02) + bug in history tracking + better filename select + OK buttons in multi-select fsbs turn on and off + supress "super" iimages for region/arrow displays + rulers and status bar know about Xoffset/Yoffset + regionview uses IMAGE cods, converts to model cods and back on refresh/update + defs adapted to origin stuff ... including Mosaic! + region create is ctrl-left + save-as-TIFF traps errors + done Plot and Resize, phew ... all menus finished (the ones I did anyway) + added namespaces to XML save file, prettyprint disabled, compression on + tooltips for toolkit menu items + "Name param1 param1: " string automatically prepended to help text + preferences for mainw start window size + menus reorganised to be more logical (I hope) + Separator class for submenus + column save adds enclosing workspace + drag in program window was broken + #dialog back in again, with an edit dialog + "menu item from column" thingy + refcount bug for long image load fixed + iDialog can autopopdown for represented obj destroy + toggle MB free/cells free + use gtk_sheet for text matrix display + configure detects gtk+extra for gtk_sheet + iimage caption displays name of most derived class + relaesed as 7.8.0 ! yea! started 7.7.22 (15 july 02) + started Print menu + added "expand" builtin ... expands environment variables in a string + filesel history fixed + reconstruction from overridden constructor in oo removed ... now just there for edits + done Colour menu, started Morphology + done Morphology menu, started Filter + if_then_else is now an overrideable binop + use (double) for image size calc to avoid int overflow + logical_and and logical_or can be overloaded ... still shortcut for plain types, so not quite like other overloads + done Filter menu, started Freqfilter (will become part of Fourier) + done freqfilter, started Histogram + sliders no longer each have a continuous member ... set with a watch directly from prefs + histogram visualisation + better trace will never evaluate graph unexpectedly + Real widget ... just draws a real number + better row name set system gets less confused + can now edit superclass constructors + better recovery after error in row recomp + better region caption + better scroll to new object for main window + "<", "<=" work on strings + started Image menu + small fixes for large files + image window title bar update fixes + auto select 1st matching file on load if no file specified + rename Patch -> Colour to fix class name / gtk type name confusion + classmodel_class_instance_new() now uses CLASS_new in preference, if defined ... lets you have separate behaviours for _type object creation and OK in edit dialog + Xoffset/Yoffset added to header view + default class == thing, class != thing operations in _Object + class params no longer have subcolumns ... stops O(n**2) increase in complexity with workspace size! + multiple select for for fileselect ... load many images/matricies/etc at once + on load, objects renamed to the filename they were stored in + better workspace scroll on new object started 7.7.21 (21 june 02) + override Pixel constructor in Colour and Generate_colour.widget + rename ... ivector -> iarrow + new op type for colour-through-image operations + better expr->err update on link clean + convolution matrix display now shows scale & offset + Matrix is now the base class, Matrix_vips etc. inherit from that + tags now decompile for better error messages + better graphic rebuilds for sub/super classes + better member-not-found error message + better new column positioning + rotate menu started + convert menu started + segv on CTRL-S on local objects fixed + flash help on row buttons + suppress display of superclasses with a leading '_' + better auto new workspace name + better column rename on ws merge + better scroll-to-visible for columns + row just uses "name" property now ... no "sym" + toolkit list now scrolls down RHS of main window ... no more resize probs + parent/child relationships shown with colour changes in rowview + removing column with an error resets error state properly + x2 speed up for recalc with fancy heap node serial number system, heh + better regionview create/destroy/link fixes occasional bad casts + better auto workspace scroll on load + scrapped .hd/.tl etc., too hard to overload ... builtins now + '' chars are now unsigned, signed chars are numbers in [-128, 127], chars default to unsigned (now unlike int, short) + regions/arrows/etc. now defined on Image, not image + better trace system does not confusingly interleave prints + small filesel fixes + Complex, List, Fourier menus + display control bar knows about fourier images + display control bar menu resets properly + bits of Arithmetic broken out into Log and Trig menus + Filename widget ... should help make an ICC profile chooser started 7.7.20 (17 may 02) + redone configure system ... data files now go in share/nip, not share/vips/nip + fixes to Pixel class and Generate menu + -image is now *-1, not im_invert() + separate '!' and '-' operators for better C-style semantics + better toggle/extend select for thumbnails + Yxy display + ops on Matrix class done + stats menu added + removed matrix size limit + errors -> ierrors to please mac os + keep local edits on reload + oops, classes as parameters were broken + member edit of local classes was broken + class arg checks inherited + view header dialog in imageview + colour menu + nasty bug killed for discovered dynamic references to dirty symbols + Colour widget shows a swatch and lets you gtkcolorsel for edit + rowview menu on subrows too, plus select/extend-select + ceil/floor added as builtins + lots of small polishes started 7.7.19 (10 apr 02) + it's now (c) 2002 :) + better LED spacing + "stop" sign toned down + split Expr to static stuff (Compile: parse/compile logic) and dynamic stuff (called Expr still ... reduce stuff) + Exprs can share Compiles if we know they will have the same code + copy-on-write for edits + 100s of times faster for large workspaces: load ws with 270 images = 7s + oops, temp files now unlinked properly + icon browser refreshes in idle handler, plus better cancel behaviour + destroy callback added to iDialog, popdown_cb memleaks plugged + memleak in model rewrite plugged + all class instances in hierarchy have the same "this" ... simplifies OO stuff a lot + removed heap_gc() from REDUCE_CATCH_START() for big speed up (d'oh) + smarter row dependency finder + leak plugged in get_image_info, plus more informative + reset menu item on graphic edit objects + ooop, added '\'' as a constant + C-style hex constants, better real constants + even fancier operator overloading scheme does builtins too, and is extensible for other user funcs + abs/max/min/etc. can be overloaded + lots of menus done! + newimage dialog removed + classes with supers don't display as pull-rights in toolkits + updated vips.m4 for IRIX + top level dirties now say what they're blocked on in tooltip + cast to int type now behaves as C (no more round to nearest) + reload toolkit works better + smarter image cache dependency tracking fixes occasional segv + _animate() in class build for greater interruptibility + "++" is lazier for list args + image ++ [] allowed + builtins can be overloaded + tidies to reduce/action + dmalloc support + better column/row select behaviour + better event handling in image windows + scroll wheel in image windows + class typecheck delayed until first reference for great speedup + lots of polishing + Mac OS X fixes: - change include order in ip.h for mac os x - test for mount.h, util.c, ip.h changes for space free display on mac os x - file size stuff changes - small include order changes - temp_name() fixes for duff mkstemp() - ignore GDK warnings (eg. locale not known) + changeable max print length, dynamic buffers + Pixel[] class + ontop no longer saved for workspaces + text values display left justified started 7.7.18 (1 mar 02) + load images from command line + new operator overloading system + new check system allows check to be inherited + nasty ii_destroy bug fixed + new trace option for builtin functions + nasty row destroy bug nailed + much better busy/not busy handling, feels smoother + more sensible workspace checkmarking, good speed improvement + more info displayed in image status bar + red error arrow not always unset ... eg failed file load + try to load a damaged (eg. truncated) image file ... wrong err msg + recover ws after crash fixed started 7.7.17 (23 jan 02) + changed appearance order for subcolumn + params and super start with vislevel 0 + '.' now binds more tightly than '\' + '\' renamed to '?' + '&&' and '||' split to separate logical and bitwise operators + removed local function display + better code generated for access to members across nested classes + better preservation of sharing in class browser + decompile makes loop labels + non-row locals link back to enclosing row correctly + inter-row dependencies via non-row locals spotted + user def of default constructor banned + nested classes with implicits refs now work + operator overloading added started 7.7.16 (14 dec 01) + delay GC to once per sec where possible + ruler preferences + rows only reset on enter, not on dirty + graph.c indents prettily for easier debugging + nasty GC bug nailed + trace prefs options + assert() on program forced close fixed, class redef bug fixed, program window tracks filemodel->modified more closely + region clone menu + destroy regionviews on hide + smarter and simpler layout resize + final (I hope) precedence changes ... now just like C + '<<', '>>', '~' and '@' (function compose) added + row recomp refinement ... simpler and faster + oops, menu items all done in imageview + row locals with external refs were not adding to top level dirties correctly + more rigorous backtracking for deducing recomp order + fancy pantsy heapmodel_reset() system for great justice + traced and optimised recomp ... seldom repeats itself now started 7.7.15 (16/11/01) + rename workspace on top level load + added workspace merge + added column merge + clone stuff done + layout sizing done (tho' not very well) + toggle select and range select for rows + junked all old menus (now in scraps) + fancy new view manager only creates views when required ... x2 speed up on workspace load + file browser lets you change the suffix by typing (eg. type "fred.jpg" into save box while files-of-type is VIPS and you save JPEG) + replace and save matrix and image graphics + new Matrix class hierarchy + .nip-x.x.x directory stuff added, "Preferences" workspace loaded on startup + Watch class for getting pref settings quickly in C + removed all .iprc code + region drag now synchronous, so it can't lag + max heap size scales with workspaces loaded + duplicates automatically removed from paths, system files renamed to user directory on auto load + workspaces reorder correctly + new row number layout scheme using on model pos layout + row drag 'n drop reordering + is_class predicate + Abut.Left_right and Add menu items done as trials + syntax changes to become more C-like: and/or/eor/not keywords removed ... now &&/& ||/| ^ ! & (join) becomes ++ and does list cat too ! (region extract) removed ^ (raise to power) becomes ** + precedences changed to be more C-like ... `\` now binds like array subscript started 7.7.14 + oop, about copyright line was wrong + model now has child_add(), child_remove() methods + child_add() child_remove() used for much init and cleanup ... nice! + fewer typed parent/child pointers in models ... getters to cast model parent/child instead + parent_add(), parent_remove() methods in model + XML prettifier does indenting in save files + load/save moved to model from filemodel + text now loaded too, new rhs child add system + forward references in workspace load now work + simplified _build_display() system with _link() method for view subclasses + new iregiongroupview class for managing sets of region displays + more intelligent naming of objects across workspaces + workspace modified set for more actions ... reflected in mainw titlebar + context pointers are back, but inited from _child/parent_add() system + split to nip package + reworks for new package structure + row_recomp() sorts regeneration by row depth + new scan/reset system + Text now derives from Heapmodel, scrapped the last of the model_link() funcs + _refresh_value() -> _update_model()/_update_heap() pair, with ->modified to control behaviour + _stdenv.def changes ... added is_space, split, splitl, split_lines, parse_pint, parse_int, parse_float + program window parses on popdown + gtkutil has set-2-adjustments-at-once convenience function + all tally models (subcolumn downwards) now derive from Heapmodel + Heapmodel -> Heapmodel/Classmodel + all widget models derive from Classmodel + Text now delays parse/compile until recomp + regenerate system now uniform between graphic and text representations + new model_freeze()/model_thaw() system to reduce model_changed() emissions + XML load/save done for all class widgets + only save edited formula ... deduce others + better target symbol naming for region/point/vector/guide create + dialog boxes now have GNOME2 button ordering ... F1 binds to help + old row_change() mechanism ditched ... much simpler and clearer now + all class.c getters renamed + _update_model() -> _update_model()/_new_heap() pair ... faster + ditched base/derived instance vars, new rebuild from base system from new unified model recomp system + ditched remake-from-base system :-( can no longer do islider ... but much cleaner and more intuitive behaviour + tslider is now a proper widget + better jumping region labels during scroll + switch current column on row select + region labels / image window titles change helpfully on workspace switch + fantastically more complicated row_recomp() now deduces recomp order from dependencies + graphic displays only save and restore their settings if they've been edited + text edit resets edits on sub rows + don't make a display or RHS for system rows (eg. this, check, name) + mainw_countdown_animate() now updates display again ... this may cause problems, have to see :-( + tslider has elaborate workaround for slider destroy during changed callback problems started 7.7.12 + added program window + reworked TODO list ... only 140 issues outstanding ... :-( + toolkitgroup now emits "changed" on any tool/toolkit change + find/find-next thing for program + new info mechanism + link report finds undefined symbols + tree view maintains sort order + model_child_add_before() to aid drag and drop reordering + toolview does menu reordering + popups pass down host widget + general "are you sure you want to remove" for models + destroying a tool now destroys associated symbol too + destroying a toolkit destroys all contained tools + destroying a top level row destroys the symbol + symbol/filemodel/model destroy split to finalize as well + stable owns a ref to syms it holds + if destroy a sym, mark all parents as having "not defined" errors + expr_error_set() now zaps compiled code to force recompile ... ensures user fixes problems properly + textview always recompiles lines which you hit return on + better typecheck error messages for widget classes + right button menu on rulers + xml save + load_text and save_text methods in filemodel.c for tool/toolkit load/save started 7.7.11 + added trace window started 7.7.10 + BI_CONS is lazier and faster started 7.7.9 + "print" builtin added + oops, parse_function() was not passing sym down + better checkargs function + x-ray print menu patched, duh started 7.7.8 + browse now uses new image display code + ooops, PPM/PGM/PBM read added + conversion is now refcounted + all old image/region code removed + old window/dialog code removed + paintbox/edit/magic/menu/calibrate/cursor/request/dragdrop also gone for now + last of X11/Motif gone ... # of lines down 20k! + iregion/iregionview added + finally GNUified it + fixed newimage dialog + region redone as subclass of image + ip class names now have initial caps + better iwindow popdown behavious + imagedisplay implements gtk focus model + imageview key navigation: left-right-up-down-in-out, zoom to fit + imagedisplay repaint probs fixed + new expr_value_new()/_destroy() system to track images + regionview added + cursor manager added to iWindow + jumping region labels! + nasty reduce bug nailed ... heap corrupted if super-class constructor failed + class construction errors handled gracefully + rubberbanding regions on imagepresent + point and vector display types added + ivector/ivectorview added + instance vars can be virtualised by heapmodel ... for code sharing between iregion/ivector/etc. ... sort of a lame MI fudge + regionview morphs between display types if unfrozen + Region/Vector/Point/HGuide/VGuide classes added + lists/image-bands index from zero + mark spine stack on GC ... oops, sometimes broke for nested recomp + reduce.c -> reduce.c/action.c + new action_strict() interface handles nested reduce_spine() calls correctly ... allows mutually recursive locals + some reworking of reduce.c ... still not very pretty :-( started 7.7.7 + [] can have whitespace between the [s + conversion.c added ... manages display conversion model and region/thread display stuff + _list.def and _stdenv.def reworked from Miranda 2 stdenv: foldl function args reversed swap renamed as converse foldl1, foldr1, map2, merge, replicate, scan, until added faster sort (merge sort) + option/optionview pasted back in + image/option parts of sym->recomp scrapped + tslider widget ... entry, plus slider + conversionview ... display control bar + tslider does non-linear sliders + now uses 100%, 25%, 400% etc. to show magnification + oops, mono to labq was broken + statusview.[hc] added ... status bar! + iimage now tracks derived image value as well + better file_info display for JPEG/TIFF/PPM in file load + iimage now just has vips_image as class param + matrix/matrixview added, old mask stuff removed + lots of memory leaks removed (thank you memprof) + workspacegroup is a symbol ... workspaces are named root.Workspaces.blah + matrix resize + matrix load + is_string now defined in _stdenv.def, rather than being built in + vips_call knows about new matrix representation + better scanning system for text widgets + better uop/bop error messages with text_decompile() started 7.7.6 + decompile for parameter edit, value displays parameters (tho not secrets) + save/save as/close added to model + new workspace save done + better notebook tabs + new iWindowSusp stuff now allows composition of window funcs + iDialog now allows multiple OK buttons + Save/Don't save/Cancel on filemodel close + nasty nested iDialog problem found and fixed + close all filemodels on quit + tookit.c -> tool/toolview/toolkit/toolkitview; toolkits are filemodels + all sprintf()s gone + empty/load/replace for filemodel done + workspacegroup/workspacegroupview added + toolkitgroup/toolkitgroupview added + model -> view links removed, signals for 'changed' ... bit simpler n nicer + views track parents and children + scan set for auto re-reads of widgets + reset/scrollto now signals too + now called ip2 + gtkdisp imagedisplay/present/asynch code pasted in + "image" builtin renamed as "vips_image" + image class added + iimage/iimageview added ... thumbnail display! + new (smarter) behaviour for spin expand/shrink; affects rhsview visibility as well as subcolumnview visibility + threaded display code patched in + imageview added + image display rulers, magnification, titlebar wired up to menus started 7.7.5 + better centering of dialogs over their parents + oops, silly bug in stable_resolve() + new expr_resolve() sorts out static/dynamic scoping problems + uses mkstemp() for temp image file names + new mark dirty scheme + small destroy bugfixes + better tallyrow_recomp_rethink() code finds the right expr more often + better binding to root for dynamic exprs + expr_resolve() before expr_check() + "super" member is a regular member, not a parameter + about dialog, with easter egg :-) + new code for recomputation of superclasses ... does "this.x" if any supers change, tracks use of params in super construct + warp focus to column bottom on column select + ':' char banned in file names + workspace load/save/save as/close done + workspace tab menu and tooltip + don't mark zombies dirty clean up of front end started + Symbol extends GtkObject, Workspace extends Symbol + Columnset renamed Workspaceview, members moved between it and Workspace + Column split into Column and Columnview + refresh_note() system added + Model class underpins symbol/workspace/column etc. + tallycolumn -> subcolumn/subcolumnview + tallyrow -> row/rowview + tallyitem -> view + tallyrhs -> rhs/rhsview + text -> text/textview + Heapmodel class added to underpin slider/toggle/option/matpanel + slider -> slider/sliderview + toggle -> toggle/toggleview + mono <-> sRGB gammas both ways now started 7.7.4 + reload $VIPSHOME/lib on menu and plugin reload + no longer includes gtkintl.h + better namecaption API + better iwindow/idialog/namecaption build inheritance + cleaned up naming in main.c + gtkfilesel2 now inherits from idialog + filesel now inherits from gtkfilesel2 + browse now inherits from idialog + now builds cleanly on Sun cc + found horrible gtkfilesel2 bug + fileselect removed + toggle/option/matpanel edit uses idialog + secret optimisation supressed for tally display + edit value (rather than source) for class params + edit reset on column after ENTER + asynch/menu bug fixes backported + Histogram.def renaming + -,/,* for realvec started 7.7.3 + secret now in terms of expr + compile now in terms of expr, not sym + bulletproof errors()/verrors() + resolve_names now knows about tally scopes as well as symbol scopes + linked global recompute and tallyrow recompute up + new link object joins up topsyms for recomputation ... saves a search on tallyrow dirty, makes multiple external refs work + better slider edit dialog + new code for '.' operator now records context in heap, so we can spot dynamic dependencies + improved link objects ... better handling of multiple links, more stuff deduced, support for static and dynamic links + dynamic dependency management + class parameter edit + new spin widget for class display open/close + class member visibility table, controlled by spin widget + new im_vipshome() startup code started 7.7.2 + ws error button colour fix + big sym/expr/row relationship reorganisation + better error handling + better tally tooltips + better toolkit flash help, plus flash for sub menus + fixed some input_push/pop() problems + reorganised main menus, better pull-right display rules + automatic.c -> mainw.c ... lots of renaming and tidying up + multiple workspaces linked to symbols, columnsets now make syms local to their workspaces + iwindow/idialog improvements, newcolumn/workspace dialog is now subclassed off idialog + countdown fixes + another nasty tallyrow destroy bug + error message display fixes started 7.7.1 ... 19/10/00 + another nasty destroy bug + class browser looped for some classes containing errors + default constructor now not displayed (unless overridden in an enclosing class) + recomp inside a class instance done + abs in _stdenv.def failed for complex + nasty gcc error in class_member() with -O2 + tallytext rhs handling broken out into tallyrhs ... tallytext is simpler ... now have graphic/klass/text display + new tallyitem_trigger system with better error propogation + fold/unfold button for class instances + button tooltip displays long messages + tally => row rename + recomp/refresh/refresh_value sequences optimised + expr_clone() now works for function members of classes + refresh_value no longer uses _trigger() propogation mechanism + now tracks prhstext ... everything but the function name ... needed for class edit of local functions + class/super now properties of expr, not sym ... classes are expressions, not symbols + displays args to function members of classes + sym_tab tracks insert order, used to order class members in tally + table_find_child handles hidden children started 7.7.0 + default constructors + escape cancel in idialog + 'root.' and 'workspace.' static scope references + recalc dynamic dependencies on link + super-class constructors are blocked from referring to locals (other than params) + class_member_base() stuff sorted out in slider.c ... usually need non-overridden value + display update block mechanism for tally stops widgets updating themselves + slider text value display redone + fixed a couple of nasty destroy bugs + 'Arithmetic.Add' now does sliders! + released as 7.7.0 nip2-8.7.0/install-sh0000755000175000017500000003546313350464075011345 00000000000000#!/bin/sh # install - install a program, script, or datafile scriptversion=2014-09-12.12; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # 'make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. tab=' ' nl=' ' IFS=" $tab$nl" # Set DOITPROG to "echo" to test this script. doit=${DOITPROG-} doit_exec=${doit:-exec} # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_mkdir= # Desired mode of installed file. mode=0755 chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false is_target_a_directory=possibly usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve the last data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -t) is_target_a_directory=always dst_arg=$2 # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac shift;; -T) is_target_a_directory=never;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done # We allow the use of options -d and -T together, by making -d # take the precedence; this is for compatibility with GNU install. if test -n "$dir_arg"; then if test -n "$dst_arg"; then echo "$0: target directory not allowed when installing a directory." >&2 exit 1 fi fi if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call 'install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then if test $# -gt 1 || test "$is_target_a_directory" = always; then if test ! -d "$dst_arg"; then echo "$0: $dst_arg: Is not a directory." >&2 exit 1 fi fi fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names problematic for 'test' and other utilities. case $src in -* | [=\(\)!]) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test "$is_target_a_directory" = never; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else dstdir=`dirname "$dst"` test -d "$dstdir" dstdir_status=$? fi fi obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) # $RANDOM is not portable (e.g. dash); use it when possible to # lower collision chance tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null; exit $ret' 0 # As "mkdir -p" follows symlinks and we work in /tmp possibly; so # create the $tmpdir first (and fail if unsuccessful) to make sure # that nobody tries to guess the $tmpdir name. if (umask $mkdir_umask && $mkdirprog $mkdir_mode "$tmpdir" && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. test_tmpdir="$tmpdir/a" ls_ld_tmpdir=`ls -ld "$test_tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$test_tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; [-=\(\)!]*) prefix='./';; *) prefix='';; esac oIFS=$IFS IFS=/ set -f set fnord $dstdir shift set +f IFS=$oIFS prefixes= for d do test X"$d" = X && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: nip2-8.7.0/doc/0000755000175000017500000000000013330330014010132 500000000000000nip2-8.7.0/doc/pdf/0000755000175000017500000000000013341773367010733 500000000000000nip2-8.7.0/doc/pdf/nipguide.pdf0000644000175000017500000573472613341773367013202 00000000000000%PDF-1.5 %ÐÔÅØ 3 0 obj << /Length 451 /Filter /FlateDecode >> stream xÚu’MÓ0†ïýs#‘¨±åÈ.°P ؈ å`Ånc‘&ÙÄAâß3©½å(Šf,¿ž÷™±Ÿ€Áÿ€â'kM$ÕFƒ’P¡Œ€Ùà >ï( )<ü7Þ5»Wï8¦ gR@s®°†©@sE´†ÆÁ·b/¿7ÔVÀ)QŠËM[i¢i…•®ªvXmÓ1Fj)ù¦Û3A$Ó ÖNê¯%c¬ðóÆ¡ÜsI CÔvUJ¡ìEMj‘c—e÷ëb|™_lÛù>åw¡ïÃpöyë0.~êRþ©d²°îH)÷½Ë‚ûÞÎ>— mgg·ŒCÞ{cKN‹ŸÁ¥å£]‡¬ß_CÄn% ªâjkVÖ¤’ö\hb KøGΫñE)h±¤’OkˆÙ} —©Ïù\Vºð¶ï•R™Æ™ÃÆc÷|Ô^rfŒ>™¯£nNëvDÐÚè)b ‘¸ÝÕz…oIãìÓíÝàuªòš¤øÞ:7¶?²×£·ÙÄNц|OG*éÁÈnF”HobTÍqP•"5>«WÓ…< 4X/~ÈŸÆùb#Ògõ¼.y«¢™ƒSfþyCo›ÝoÍßÉt endstream endobj 11 0 obj << /Length 105 /Filter /FlateDecode >> stream xÚ+T0THbw…< 4µ4×350·0W°01Õ301³0Q(JUHSä2*4Ppçr áÒw32V°Ô³432SIS05Ö316Q073Ö³01VIQˆÖÈÌÔŒ ñ‚kB§]C¸BH© endstream endobj 14 0 obj << /Length 1176 /Filter /FlateDecode >> stream xÚíZMsÛ6½ûWàHˆâÄ1ö$žv¦Ó&UOIŒIl(R©¦þ÷I’(Êò‡<[G6 CÔ{»oß.ùÀ`a¿oAýâJBŽd,AÌ8DLÄ  æà㲸õ¯×“«Ÿ>Pƒv?“9ˆÄÁ¤LfàspSä•Ϋ2ükòK³]A%ˆ¨w# 9¡íNF!ÜêªJóEŽ‚²JL¥gõÆ$´ïƒºíõZä#B¡î$âNš„Š›ª0i’ œ@Ûk²ï¿½¦ˆQ¥ Â"¤Ü°¹8{=7éô[{i©ý`fb$SÝ.UÅÆ„C2€aÄí¼­¦ÔÙ³ÐûHŸ#,j Ù®"GBÜ‘@aH¨$jBލ0ë(ÍÓ5`Û æ~Ó¼0-]FAˆêiU,L²j×VE™¤Ó²þ°â™¢Hì¯ÚX‡V#úÙBÏLT®ÍÌRsñ6ë‡d›Ü[íisÄ9d˜ìë*uºú®,õêkæE:Íç&1!Ž«ÔûYD‘ ,Àxˆkcû9N½Ðþܜٗ®’EóvŠ“‘í'’Ž-é-Ûe—•{ùkIhh ö”?v‹ñfݾÞ5e®)Ïwe¥­rrÎÇÔ:Ž2:ˆrHÀ7ɺÚqµtVb–T‰UŠ2Fy'Œi‡raŒ­ó[ÅʲÍ*Í“*-r+R”ޏîàJOF/;‚ë÷´ZöyZ¬VI>‹l¹ð.¹Èlh«×‹áQã÷ –æž #[#)?ašlf;¶nÓå¤û)‰U€YÏ­Úæ*"û:Aœçèûí #åè7˜ìD:Púu’%ùô8æ\Vï<Ðûxgúß,Øf@vX Q¬תéÄÚ]:£Xêù&k>ÒmÛŠ½•²;Èï‰àP0ÚOî¸øÝzÀ¶"H"/OÄ_ ýy87ýÞ·ëLw{_æzßOz®ÛV7Ÿj7T$P_±+ eÜk´Ø¶Ûµý­Ó½S|ï¬A>+Üï”ò‘õ'Ñ-ï­EÌ€iæX(uf•ʵbi’‹z$(ã1 ŸÃC|‚z˜kSLuYîxåmB()G°‚­NOz,â~ÒsSØ–8¯§¬q<†÷3€'èT”ûáϧ6’-è’ÉQZ^œ‚°ï&CïÖëìΫK±Ö¦ •ݨ­ýÛ–ƒº0~iBBðÉxîÆA×I5]ê¶`cäžån|ôÞ˜®§Z&ù¬WÄj‰gB½£ÂAýkòÍkÃJç7=®ôÊ D±q&±˜wãNWF%«÷ {³÷hÏ^ø í& “åÖÎÕÝÿjÐÏIÎÆà}(âQÛMnî½'U” £T<íáðæÞ=ÿ¹íPtˆyðßÚÔÕ¯¾»Ô3gxúºú•ǘž(yÜåxË©I×Õ.¬ mà£AÞʆ·Â-ȇã`C¼}jî !¢ÔÕÐD8†œª ¿u–W}Ò")š‡ûéÑùîvïS¢|åüW¸×ÄÿÇÖR "Š ŽÝS­išîí~?¹ú 9‹> endstream endobj 18 0 obj << /Length 1432 /Filter /FlateDecode >> stream xÚí\KSÛH¾ûWÌÑ:X™÷㘥 KŠW ïîÍa´È’#ÉYȯßiä‡ìŠÁ S%[ŒÆ®ïëþ¦»§‡/óûdš¦DÈ HÊBH¹¤ ˆÁ5ø4€f ¿ï0*Ts0¾Œ„”P 8 %%`|.†I€ÙðkðyüñÝKƒ)„!çÜLUÛ;=ÏíÈùG˜GèÒ#£ö™Á¡¢´y’#!NôMŒ0ƒÃi 9Ì£¸,“즹7‰³Y˜'"CÌšo´òõ­'!*ÆÜä!²Ó›ç÷ò4ŸÁˆb< ƒ3Ÿøæ.T©-M½Ì:¸0(èHZ܆]j°£æ I«ØPƒ%y³Ôü†xCÄ1ô{RVùM¡'æ éiÙ¢‡êøpZ) òž²O‘›™á-3Ì1s¬«[³Jå•ì%ð3÷¾à§HîߨŒ½Lj„£æôòŸ8ªÌT„zjvCê¡F:jÆ„C]Þ™\QáÙù%ì`“4¡µüFÖ6³ìéi5+LXÀ$õ4ìÂ;ê ÆBœ—:‰‚‘„Ü#¿=äùyâ?K¢ÆèmàÀd(æ%áØþ(À ì5uÚ^$™Y¤ d^ñ·LC·|FD(™#l¨A²¡†»êÙYS2³9úÄÖÌÌ<€R ,ÛAŠf#ŠE(dgYáó²ÙQ®¯çÒ™{QêÃá×±¡q6Ê”7„ç³ô]GäóšÙ‹Ê¨Îškl¹¯â"Ó©»s•Tya‹¦ÒóðL´%±ó‡¬Ò÷¾ž¼Cu죦­ŽèÉÜ9¢< h«VY•ä™Ía˜gâ‘ØãìÛú×þW»a¤Ó™¶XéQØûÅŽIá-)mÑëtÚ¬ÆôžmñAûvCʦúŸ‚®£Ž»¨Gùdš6AÓ2øXQzܼn²÷­.tÔlôÎÁ–Py”eÚEù2ÏӸ͌ÙÿYòw¥¼o)­#œ¨Ó¤¬–q®óp/ÛÏlá¼ ûõ,‹šØr=Që^¬E/Ö¢‹u²èÉrZ‚•·í§á=Ú¶»ŸGFMÊN¥­ˆ£YQÖ¶.©ÍŸFƒì1ûvóH{hÛuÔW˜0íÊþû€Wø3‚ëÊ.]«§®¢Û|…|bº æa ‚6>\Rü²2꣋«6Ĺ,t‘ÄF˜¨ôà?| {¡ü½T—eü*ë’/N•º¤l^”Í;dÛ+[q²ûÊFŸ’2v޵”LÞ8æQƽ¦oë1àÃìÖkT'²…/†½Yo pÒ~œdy±dÅ.«Šµí£0ï¤B^Ì×&?Í#ì$=Ϫ"OÓù>T5O©2#$× l´µx)üÖìc±_~ÊàV³ënŹS¶Ë¬#»PQZO%Ü)[wôa#÷ Ó.÷ yÒ·`\…xÝ,hc§Ó*™$¥kkQBø¤|kL¬/{Ì…Õz)¤þóðì|uKÈøG܃ÿ$Ô»ÝÆíqúånã÷f93 ‹Énþ†ßÌŠÆ64S±±ÙÒPŠUv߇ÐîÊΫÓh–:ã¯î 宼I|·èkñÆ ÞKÿrá*)§©~ð‡'žï%û& Þ§ÕmÛþ’O`1ß›ýX¼W75ºW·ý8›=; endstream endobj 22 0 obj << /Length 1273 /Filter /FlateDecode >> stream xÚíZ[o£F~÷¯˜·‚T&s¿Ù`€uç è2¢Ê’€n^ÁàB(b¨jÉd@fD þÓ´reþ¼ˆ“4Ÿ5'qÞ²”Å3Fš°ÿãðç›W Š( /¥GžµÈÿÖ [ƒ|›ºÉà®9»Kó¤hÏ9—ƒû? ü{XhΫ«æS—×!%KšóÒ…T³´È!‹c_Ô}àŠàŠÜßã4ßASÉàÇæbuWÃXô ¸ ³öm'•=ˆ+¸lÿkYgðÝ:-,fDú|QTqåz*5“p‡·:éGb0l¿? …ÚúÆ¡ BŒõ†¯¹š?kƒ\"·ª¹µX1±pê»è?+ ,{e%æXöÏÝ´pÚUÑ/ÒÙUÕ3®¬ˆœáQ¼SPÚd‡wÝò>¾jkXUók¯¬?—MÊ]Ö O=(‰‡¤^u Ø™–ƒóuù\yB–q¶˜»5- ÕMh; ¾n}nÛÂ}áâä«wúæøo×"Cé[H/äýú€ð îìëšâ±÷sIÔÀÄ‹¥ –ŬŒ³¬_ ²j mJ¸¤_‰ûj?Ô釗rs”„£¬¡¯wÎÔË£Öê 6 <¾¼áñã$ž»>)®°5üâ@ðéû®éÀÊãss_Vµ[¤*‹5×;¤Š†Ôw^Q÷'WÅq7é=K³>R!l H}nÀ pÞ¦Q64ŽCéu­ù”¥ëiC ÍÉòÀŒIë¥rH=ª{õx?wZgÆkÉ®»uõÔØÞ·­öt7ÅBu°Ÿ+¨nÛ\ET@L¶ GºÁw GnRd™Ë¯úoÓĵ¤-J7u¥Ë'~ìª è­#JŠW ½Þ¿»±¾':(»îM’.ó¸ÕNм*‹yÛʉË0RB ™çHìÍ7gK¢[…;ûU•pù ü&†¶ÍÑ€+8ß|j a£ÌÐ-x:>ìðkt,\î# žPƒ%/·|ðê&”?„RÝ jº¹‹£©ÍÅÄ-—ÚZ_ç6’¿f"á%â5üz›¿Àös‘-ŠÜå~Ã’ßO·`®”ky½\Ä^û”\©éP)qF¿)‹T'‹~ÝÛüe*ÙN'nÚœbC™7¾Kçs¿Ý©¸®?‰ÿ{ºyɉB½ak/B¤æ\nFŒêÖ±,þrìs¼ZBý2}ÑÕ~HЍ6`jІµh’.?”À—gˆ`n º[™fˆÁY}Û}}höGnN Á–­Fj§4ÿÂò¤ç¡T¢POòP«°âzý©iå²=[%…Ú笊ª·ê—Gy"¥c¶]‘?‡+r³Ú#û®#i!ã–}Â}}'°æšnûˆ ü3…e÷5#2´FžH,xƒüí†-„ÚË¡Lô endstream endobj 25 0 obj << /Length 102 /Filter /FlateDecode >> stream xÚe‹» €0C÷~EF]®·ïv´à&t7¸:øývr‘„“ {i .±Ñ“e<‚±Äƃ{ņQpéÇ6‹¦W‘¢Syƒò–"H%I—eÁT=G=çá;uY¼%Á¬ endstream endobj 28 0 obj << /Length 521 /Filter /FlateDecode >> stream xÚí•Ënœ0†÷ó^ÂÇ6¾àm¤N¤ª›Jt•vAÀÌX¥˜Ú&Qß¾g:)Ó¤MÕ©4‰"„ìcÆüß¹|Emà¾B="p ­° ªP¨à. ޼A-z¿"àHÐÕa¼,Wëœ#Æ1øST¶¨Ð˜ Ф ˜ê• ºNÞÙÓŒ ’¸vËT³¤ºéLH?•o/Ö,GkÉän ʱæe’b%ç-¦³'C kEöc kÊá({ŸÞì¡íàwÄÁ)lõÃtÖùi·fšØ/ÕfžÞZ“2‘ÜMÖí7Û…Ò N3AÈÙ \ÿË‘@¶UtQ©I—«'‚eŒ‚ê3q*.µëÜèÃPÕ™Rù¹é{F°~Ž:&ŸÀNžŠÝMÊH2ÚnNrÛϹ5öu´®ž’ñW‚E0Ï!H ?²ÓtƒñUt>, :ß¿¬Ü¶¯½©‚í7“=xS›Æô5ÔL™ëg æAâI ò4£¤XßÇûÏ":KˆUßT¾™¬šb6xõî^Íè\÷ÙBIÅ^L/ÙK©—ËäXD>‹ø!˜vì&5Æh;¿ýRMvæGÆÔ,«1ÇBC'©ÍQƒoL¬lo‹\>ó¸äôbŠÿZ×7¾¶¶žŒº«Bصl¡^‹úãÄ–ýøð˜J¥ÊQ–+HÀ³×ýÖÚ…û›rõ#íl° endstream endobj 32 0 obj << /Length 104 /Filter /FlateDecode >> stream xÚ…‹» €0C÷~EF]®·ïvTpº‰›º:øývr•„“ Gé€\b£'Ë>xc‰ ÷†“à"2†_¶I4½ÒˆrH;”×$µT’tYVÌÕ“s®—4~·.‰ü‚g endstream endobj 36 0 obj << /Length 1256 /Filter /FlateDecode >> stream xÚµWKoã6¾ûWèVˆ’õØc \ @wkôÒôÀH´%D–Iînþ}g8¤myd±Eaކäp曟lát‡Ÿ*2¦x–gAž(Æ“4O‚Á›àゃ î¿\/nïâ$œ¥©TÁzäJi–²\È`]…?Õz?™aIÅC±ü{ý+­Jœ&p¢¤€1-¸7ÓÔt[Z0Nz˜L…ËŽßÞId¬È¸_®–«Œ–wÍ^Ò)2 V¤2E)‘3• l…šqÅJ†š†Ãˆ "Õt¨«7KÁC]ânz÷yªçÏÕï¸;½uÌýЗfQyP ˆÜ™‘¬PŠNn›ÇA/ËT…le\…« Vç’t‚±2c³íàÎv6õ8ŠðÑМ§›e”š¥Tá?K¤:ø\)퇧î,’Z|®ÐçfªÉÖ´ èfg­;ä!Þ §öšã MtWÚáøè¤Œ_æ_ núe2]ÅìéÖ#s Ö5^…·‡¦òç9Ö¸o›É±:¿é󡙜œ¦ac ñ™&%Anüp‘œÌ A ‘“\d—(;ÇR±‡ÏjN“ð¥?aM­»‰fÖg0¬ÏñšsÆÅq«×ázB«ßO£Ù=¶†fM·$YœÀl×Gº"gçuS¢ïb.IgYÈp¬ûC‹~,D8]÷®0‰ékßÑto‘Žlø‹øÎÌ@•Ò»¦ªZ+[„£)§·ˆ9ú˜6,q˜ú¡Ñ-}~àŠÆYmæ.C0%Þ"_®˜,a‰Ì½€d’ö÷{Ý‹0…C„ ÐDÂò|n¬ª7{«O4îzkÀkQH,ŸZÎo -"üDF©¾r²àÞ}ü rè"À½9ÈÇq,߃\fmà„lÊ÷¦3ú'.Ù!é’G]Â$™!!º|á3‘K õж.éÌʃ¤ÁâM}TüíÆM¿7žcáâˆZ/¥w5r0™²yà\–$ñ|0#Âz¤©~ì‘c¿3Dí¡vÕo®xå"¿æ(Ç'MX*:$ÚªjF¶hùŠåLÞö½3·ž®X:yÍÒ€‚7M-A ÿ+ ´5\†Cê¡9¤ ¶}!ºÖCUöÞ%ný„—s‚šwAdL4ž¥.ˆòkµî °„‡hÝ”’e~wqîl hßz·LÿÿqóÂAQœÇ9²m)ÆS×»‚‡Ü]VDÊãD°E¹q«lÛ"|ü^IØg­ ´2X¨|¢¾& u•Ú××\ XHlúÒ÷’Ë Å¨Vž…fQ> stream ÿØÿàJFIFÿá°ExifII*JR(i‡Züÿÿ)( üÿÿ)( 0210‘ 0100 ÿÿ ã ÿÛ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ä Bàw¬ëÝJH^Y¥HãA–f8{šä'ø• £•[æou‚F˜\Pæ/­bú×›Ÿ‰z/üýÉÿ€òñ4ÂËÑçêOü“ÿ‰ HóÖ1}kÍÿáeè¿óõ'þÉÿÄÑÿ /FÿŸ©?ðOþ&€=#Ì_Z<Åõ¯7ÿ…•£ÏÔŸø'ÿGü,­þ~¤ÿÀy?øšô1}hóÖ¼ßþVÿ?Rà<ŸüMð²´oùú—ÿäÿâhÒ<Åõ£Ì_ZóøYZ7üýKÿ€òñ4ÂÊÑ¿çæ_ü“ÿ‰ HóÖ1}kÍÿáehßóó/þÉÿÄÑÿ +FÿŸ™ðOþ&€=#Ì_Z<Åõ¯7ÿ…•£ÏÌ¿ø'ÿGü,þ~eÿÀy?øšô1}hóÖ¼ãþNÿ?2ÿà<ŸüMð²tùù—ÿäÿâhÑüÅõ£Ì_ZóøY:?üüËÿ€òñ4ÂÉÑÿçæ_ü“ÿ‰ GóÖ1}kÎ?ádèÿóó/þÉÿÄÑÿ 'GÿŸ™ðOþ&€=Ì_Z<Åõ¯8ÿ…“£ÿÏÌ¿ø'ÿGü,þ~%ÿÀy?øšô1}hóÖ¼ãþFÿ?ÿà4ŸüMð²4ùø—ÿ¤ÿâhÑüÅõ£Ì_ZóøY?üüKÿ€Òÿñ4ÂÈÒ?çâoü—ÿ‰ GóÖ1}kÎ?ádióñ7þKÿÄÑÿ #HÿŸ‰¿ð_þ&€=Ì_Z<Åõ¯8ÿ…‘¤ÏÄßø /ÿGü,#þ~&ÿÀiøšô1}hóÖ¼çþ>‘ÿ?à4¿üMð±ôùø›ÿ¥ÿâhѼÅõ£Ì_ZóŸøXúGüüMÿ€Òÿñ4ÂÇÒ?ç¼ßø /ÿEÀôo1}hóÖ¼çþ>‘ÿ=æÿÀiøš?ácé?óÞoü—ÿ‰¢àz7˜¾´y‹ë^sÿ Iÿžóà4¿üMð±ôŸùï7þKÿÄÑp=Ì_Z<Åõ¯9ÿ…¤ÿÏy¿ð_þ&øXÚOü÷›ÿ¥ÿâh¸æ/­búלÿÂÆÒç¼ßø /ÿGü,m'þ{Íÿ€Òÿñ4\FóÖ1}kÎáci?óÞoü—ÿ‰£þ6“ÿ=æÿÀiøš.£y‹ëG˜¾µç?ð±´Ÿùï7þKÿÄÑÿ Iÿžóà4¿üMѼÅõ£Ì_ZóŸøXúOü÷›ÿ¥ÿâhÿ…¤ÿÏy¿ð_þ&‹èÞbúÑæ/­yÏü,}'þ{Íÿ€Òÿñ4ÂÇÒ?ç¼ßø /ÿEÀôo1}hóÖ¼çþ>‘ÿ=æÿÀiøš?ácéóñ7þKÿÄÑp=Ì_Z<Åõ¯9ÿ…¤ÏÄßø /ÿGü,}#þ~&ÿÀiøšôo1}hóÖ¼çþ>‘ÿ?à4¿üM'ü,#þ~&ÿÀiøšô1}hóÖ¼ãþF‘ÿ?à4¿üMð²4ùø›ÿ¥ÿâhÑüÅõ£Ì_ZóøYGüüMÿ€Òÿñ4ÂÈÒ?çâ_ü—ÿ‰ GóÖ1}kÎ?ádhÿóñ/þKÿÄÑÿ #GÿŸ‰ðOþ&€=Ì_Z<Åõ¯8ÿ…‘£ÿÏÄ¿ø 'ÿGü,þ~eÿÀy?øšô1}hóÖ¼ãþNÿ?2ÿà<ŸüMð²tùù—ÿäÿâhÑüÅõ£Ì_ZóøY:?üüËÿ€òñ4ÂÉÑÿçæ_ü“ÿ‰ GóÖ1}kÎ?ádèÿóó/þÉÿÄÑÿ 'GÿŸ™ðOþ&€=Ì_Z<Åõ¯8ÿ…“£ÿÏÌ¿ø'ÿIÿ +FÿŸ™ðOþ&€=#Ì_Z<Åõ¯7ÿ…•£ÏÌ¿ø'ÿGü,­þ~eÿÀy?øšô1}hóÖ¼ßþVÿ?2ÿà<ŸüMð²´oùú—ÿäÿâhÒ<Åõ£Ì_ZóøYZ7üýKÿ€òñ4ÂÊÑ¿çêOü“ÿ‰ HóÖ1}kÍÿáehßóõ'þÉÿÄÑÿ +FÿŸ©?ðOþ&€=#Ì_Z<Åõ¯7ÿ…•£ÏÔŸø'ÿGü,½þ~¤ÿÀy?øšô1}hóÖ¼ßþ^‹ÿ?Rà<ŸüMâ^‹ÿ?Rà<ŸüMzHp{Ò‚ yÜ_ô"ÀÇ[y?øšêôÍn×R·YígI¢nŒ‡?‡Ö€6¨¦#îú(¢Š*­Ô›šµYz›í‰¨ɾ(ê²²ÙÙ+‘Œîà»qŒÿßYüy¾êë~"J_P´ç “ÿe®3uK6ê7T;«®Ñt¤Ô| $‚ÁnnÓVŒHÉy[FAã;søP•ÄÝŽ_u«¼žÚÃNÔ|cršVŸ0±ò ¼3@4Ý× Æ? G±Ò­|f¤éeµÆœ“ˆbµ3ÇÆãê¼t÷¤µ·õÒãj×þ»™Ân£uwðh2Ùë:½ÍÝž•,P,_¸‡M3Œ7B‘näžô·Zw¯kÞ´µ·‚áãŠâÍÊc8RêPz}hÏ÷Qº½ËOÑo5­yí¬m¤rG‹O9[æ%#yÈ#9ª¶úv“sâëϳéd¼:qž; ‹s¼ã°Œó´Œ{Ð8ë‹›[+K¹,7aŒ$0%‚œ;sU·WYãI&} ÃqcŒ¦9÷[G‰cù—€§§¯ãZ>°Ñotm;V½¶µYy–×`Ä¿½ve–È œš}ñÁn£uz$z›g¨A¤=µÝõŽŸ-ÑB£72–ùVÀì}iiW:׆%½Ò-ì®/Dÿj±X¶! Ó垟J_×çþ@ô8‹m>æîÊòòS š«LK`€Ç¿J«º»ÿ Ïa¬Câ¿·³Ó¬±R 8¼¥À‘¹=y<jœ6ðCã»Û}GAˆEEa†ÚÏΊ1‘²FE¸ÇS×'·c¨Z×ò8ÍÔn¯@‹H{+¿I&¦^Þ[ÅÛ[ÅfZ,6AÄ}A dZFÐ-lj£š+Hq¦ »«mM£ž ¬YûgÆ€þ¿/ó8 Ôn¯F›BÒßđ˛1Ò äv>W”’ÌòóÇûµS@°Žþ}V÷RÐí­o-áɲ]9Šm$‚þFAcÆ:Ð ºÕ­âŲ‹Z"ÂÖ[U1+I püçyPx8ªº…¦—mk –:×Û¦cûÈ~Æñycw1ÁçŽ(ép+¼3Çs¼2,2’#‘”…|uÁïŠuv3Ër>iBßM†ò3ö•šW·2µ¸Ü~`GÜ>þÕ©k Ú¯†ä¶½²´’o춺Kˆl ²œdf}ß3{`ˆô¿-mæp—–6 j÷(]B'‹ Pô>ÕQM?™äÃ$¾Z—- lQÕŽ:s^›ojº„^²»Ñ­î4é4•3^¼'tBF$轸ëÍs~Ô§m_ÓGöXôéåŒfé’zž KüÿPZÛåøœžê7Tºt6w7B;ëÿ°Á´Ÿ;Èiyì6¯?Y³·´>(³´Šà^Ú5ÜIæŒbU,3•<ޤSJîÂoK”wU‹ë+½2í­o`h'P£x##¡"ºßÛØ\èÚóÅ¥ÙZK¦_,1IkŒºŒ6:šÖ½°·Wñ,öú5¥õŵ½©·‚Ko5rAÎ{Þ”¯¥ÿ­®Uµ·õ½7†)®e[Ã$Ò·D‰ 1úÍE5´­Ä2C*õIP«¨<×ku¢ÞZ[èe´™îôôšõ!b¢ß'æG `þ•‰ã;é®õKq%µäQ[À°E-äl’N«œŽrOùÍ Fê7T;¨Ý@n£uCºÔ6ê7T;¨Ý@n£uCºÔ6ê7T;¨Ý@n£uCºÔ6ê7T;¨Ý@n£uCºÔ6ê7T;¨Ý@n£uCºÔ6ê7T;¨Ý@n£uCºÔ6ê7T;¨Ý@n£uCºÔ6ê7T;¨Ý@n£uCºÔ6ê7T;¨Ý@n£uCºÔ6ê7T;¨Ý@n£uCºÔ6ê7T;¨Ý@n£uCºÔ6ê7T;¨Ý@n¤ÝQn¤f;:â€4¬ôËÛôó!DH³€ò¶úw5íæžWÏEØÇÐåIô­ñpâ(ÒØFQTÊàvƨ/§gÓ.à ù X°Ïn w  KKk«éLvñ†#ï18 õ5jïGÔ,á2ºÅ"(˘£ÜT¶S,Z(Ên”6Ó÷Àê:qVṉ/PApdSnqqÕqÔŸzÁn.§H-ã2Hç «Þ¶ÛÂzºÃæ²»cýZËó~£­'‡Z(o¯™0ùcÿwqÏòZÑŠîïíc{ÏöMçc˜ú7¢õÁÀÎü о&P›Œz¾N¥%RmëØår;#©GS†V úWgðãS–×[–Ø9òeŒ±\ñ¸ƒù\߈V.¸ÜÑ©÷¹þ˜«ž ¯ˆPîé]t§Ï.ç›^—²©*}™ôUŒÞd`æ´aèîZ­±Òµ1Š( ô¬[ýK}+\ô¬}[ýK}(Â> Ÿø˜[ÀÿöZã·W_ñþ?í¿àû-q”˜É7U‹]BòÅ™¬ï.-™†Á+!?\TÉÇSNdtÆôeÜ7 ÀŒQíH &þí„àÝÜq8[÷¸é»Ÿ›ñ©WÔ£œNšâÌF$YÜ0AÑsœãÛ¥P¢€/GªêÜÉsýÜsÉ÷åIØ;}XšhÔoEçÛíȺÿžþky1÷³žœU: ÀÍY‚òâÖ>Þâhfÿž‘9VüÇ4çÔ/$»owp×#‘3JÅÇü 9ª¬c‚®?…†åIš¹u¨^_2µååÅË(™åg#é’j5º xyV!ž0ä+ББUè  mv÷bíîîä|ó+È6sÒœu;漆úèÝ/s3yƒ·ÞÎ{Õ"qÔ⊲—wÅ4Iq*Ç6<ÔW IŽFáßñ©×XÔÒU•5+Õ•SËW'÷AÏOn•ŸEoé¾'»Ó¬µXÕ§{›ðƒí^{ #*IÎz’sŽ¢³Q½K³x··+tzÎ%a!ÿg5NŠ<À»&§}5Ò]K}u%Â}Ùžf.¿F'"œumDÝ‹³¨]›6‰Ìï¼MÙÎ*…fâî{¹Œ×3Ë<§«ÊåØþ'š‹u4#”gŘ@ÏLžÔ:PÊvJ¬PqЖ¯fëY†š–}ŒŽÒ «#Éc¡¶®8ÎIVý(ƒZ¼·Ñ¥Òã* ’Q)l|ÀŒp¡Â“þè¦ë½Î·¨5íÐŒHÊlc ‡ëõ4ßõý[BºO \£ »yl4éÖ9æVšÎ7}ʤŒ±\ž{W7Vì5 tç™áTc4/oáX`ãž´tbê¡a¦Ü-„ú›K ú‘ÌkcqE †Ø ]¿6H'\Ô'E²Ó­¦›W’å¶Ý½¢%¡U$¦71,Œ sê*½—ˆn,­ „ÚÚ\f/m$ñ–h 9ùyóÎ#4Û]zx"–‹{k褗Ï)t…€“» r{ö4z_Ö£õþ¿­ Iôïì­#ÄVb_5KVGÆ7+ÊHìpEKã}.;;ùï._>ñÃ[,xØT,H99ãhÁOaX¯^Mý£çˆ¦þÐÇ›½z9R¸Æ1Û¶;Sï0 }â ´ŽÂ3qrc¸’Óí"V»cRWr¡ŒŸ0ä`dw=1X‘kjwWê‘nD¡Áhó ŽÚ8©$×âÁ-®l¬î8¼˜îdFóQ;CqÛ ÔÙò¥Ößçÿ»«ÿ^FÝÍ…­õÕ³^4âm)È‚³`Œ@ëéXš®kogec$ÍktŸÑ€À#AÀ­/ÄH†V¾ŠÙŒZkZD6"nFÕ|LóÇÖ²5V]D@†-àJÅ B&NORI$õ$šÿ×wÿKoë²(ÑEÀ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+¡ðgüŒ)þáþ•ÏWAàÏùcÿpÿJúDÿR¿Jß+DÿR¿Jß*„-Q@éXú·ú–úVÁéXú·ú–úPžéú}ž©ãÈm/m¡¸…íf;e\38æ»_øAü(:èV?÷ê¹-þJE±ÿ§YÿšWc«ëñé:¥…´ÑHÑ],„¼q¼Œ»@ÆA'9¤ðƒøOþ€V?÷êøAü'ÿ@+ûõV®uý:Îæ;{‰¤‰äÛµš eºûv‚} ¬Ãâ«kT³Ô®<¨`1yDBÄ(eÉ,À{œS°áðŸý¬ïÕEsàÏ Ák,ðèv¢RüÀ¬pA¬kºøÑ­â•,¦º2éÄh‚ä¿Nü’ZÒ¾?ñ-ºôÅÿôE€Êÿ„WÿôÒÿð?ð£þ_ÿÐKÿÀ8ÿµè¤3#þ_ÿÐKÿÀ8ÿÂøE|;ÿ@ /ÿãÿ ×¢€2?áðïý4¿üü(ÿ„WÿôÒÿð?ð­z(#þ_ÿÐKÿÀ8ÿÂøE|;ÿ@ /ÿãÿ ×¢€2?áðïý4¿üü(ÿ„WÿôÒÿð?ð­z(#þ_ÿÐKÿÀ8ÿÂøE|;ÿ@ /ÿãÿ ×¢€2?áðïý4¿üü(ÿ„WÿôÒÿð?ð­z(#þ_ÿÐKÿÀ8ÿÂøE|;ÿ@ /ÿãÿ ×¢€2?áðïý4¿üü(ÿ„WÿôÒÿð?ð­z(#þ_ÿÐKÿÀ8ÿÂøE|;ÿ@ /ÿãÿ ×¢€2?áðïý4¿üü(ÿ„WÿôÒÿð?ð­z(#þ_ÿÐKÿÀ8ÿÂøE|;ÿ@ /ÿãÿ ×¢€2?áðïý4¿üü(ÿ„WÿôÒÿð?ð­z(#þ_ÿÐKÿÀ8ÿÂøE|;ÿ@ /ÿãÿ ×¢€2?áðïý4¿üü(ÿ„WÿôÒÿð?ð­z(#þ_ÿÐKÿÀ8ÿÂøE|;ÿ@ /ÿãÿ ×¢€2?áðïý4¿üü(ÿ„WÿôÒÿð?ð­z(#þ_ÿÐKÿÀ8ÿÂøE|;ÿ@ /ÿãÿ ×¢€2?áðïý4¿üü(ÿ„WÿôÒÿð?ð­z(#þ_ÿÐKÿÀ8ÿÂøE|;ÿ@ /ÿãÿ ×¢€2?áðïý4¿üü(ÿ„WÿôÒÿð?ð­z(#þ_ÿÐKÿÀ8ÿÂøE|;ÿ@ /ÿãÿ ×¢€2?áðïý4¿üü(ÿ„WÿôÒÿð?ð­z(#þ_ÿÐKÿÀ8ÿÂøE|;ÿ@ /ÿãÿ ×¢€2?áðïý4¿üü(ÿ„WÿôÒÿð?ð­z(#þ_ÿÐKÿÀ8ÿÂøE|;ÿ@ /ÿãÿ ×¢€2?áðïý4¿üü(ÿ„WÿôÒÿð?ð­z(#þ_ÿÐKÿÀ8ÿÂøE|;ÿ@ /ÿãÿ ×¢€2?áðïý4¿üü(ÿ„WÿôÒÿð?ð­z(#þ_ÿÐKÿÀ8ÿÂøE|;ÿ@ /ÿãÿ ×¢€2?áðïý4¿üü(ÿ„WÿôÒÿð?ð­z(#þ_ÿÐKÿÀ8ÿÂøE|;ÿ@ /ÿãÿ ×¢€2?áðïý4¿üü(ÿ„WÿôÒÿð?ð­z(#þ_ÿÐKÿÀ8ÿÂøE|;ÿ@ /ÿãÿ ×¢€2?áðïý4¿üü(ÿ„WÿôÒÿð?ð­z(#þ_ÿÐKÿÀ8ÿÂøE|;ÿ@ /ÿãÿ ×¢€2?áðïý4¿üü(ÿ„WÿôÒÿð?ð­z(#þ_ÿÐKÿÀ8ÿÂøE|;ÿ@ /ÿãÿ ×¢€2?áðïý4¿üü(ÿ„WÿôÒÿð?ð­z(#þ_ÿÐKÿÀ8ÿÂøE|;ÿ@ /ÿãÿ Ôšhíà’y[lq©wlg “\ýö¡ õä).ÖŠBøó`‰M¼ü¹ãuc^¼hÅÊBl¹ÿ¯‡è¥ÿàáXž&Ñt­6ÞÊk2ÊÖVº ^Žq:p?*ÖÓ5kx K[‰.|ß=ãS$r6A„ùÈ ðWœÕÿLJý~/þ‹zºu#R<ÑîihŸêWé[ã¥`hŸêWé[ã¥hÑE•«©o¥l•«©o¥púÿ‹…ô¶˜è5Õkv×Ë«éz™¼ÂT’‘Q°à`‚Äõï\χ×>;½ —úW¡Ð ¯iZæ¥5â5­ì«3ÄÖÞ]ê¤0¨ÚY]7 Ç!¹Ãv«·¶š¼Z–º¶ºWÚcÔ‘9ŒÈ¨˜iÜ Ýù]mt°Ó³¹Ïjš=Éð|]°óç„[¦ràŽ„ž}5µ}ÿ û¯úâÿú ©ê ïùÝ×ÿÐM6îJVEAöëOùúƒþþ >Ýiÿ?PßÁRQ=Û­?çêûø(ûu§üýAÿOEAöëOùúƒþþ >Ýiÿ?PßÁ@ÑP}ºÓþ~ ÿ¿‚·ZÏÔ÷ðPôTn´ÿŸ¨?ïà£íÖŸóõýü=Û­?çêûø(ûu§üýAÿOEAöëOùúƒþþ >Ýiÿ?PßÁ@ÑP}ºÓþ~ ÿ¿‚·ZÏÔ÷ðPôTn´ÿŸ¨?ïà£íÖŸóõýü=Û­?çêûø(ûu§üýAÿOEAöëOùúƒþþ >Ýiÿ?PßÁ@ÑP}ºÓþ~ ÿ¿‚·ZÏÔ÷ðPôTn´ÿŸ¨?ïà£íÖŸóõýü=Û­?çêûø(ûu§üýAÿOEAöëOùúƒþþ >Ýiÿ?PßÁ@ÑP}ºÓþ~ ÿ¿‚·ZÏÔ÷ðPôTn´ÿŸ¨?ïà£íÖŸóõýü=Û­?çêûø(ûu§üýAÿOEAöëOùúƒþþ >Ýiÿ?PßÁ@ÑP}ºÓþ~ ÿ¿‚·ZÏÔ÷ðPôTn´ÿŸ¨?ïà£íÖŸóõýü=Û­?çêûø(ûu§üýAÿOEAöëOùúƒþþ >Ýiÿ?PßÁ@ÑP}ºÓþ~ ÿ¿‚·ZÏÔ÷ðPôTn´ÿŸ¨?ïà£íÖŸóõýü=Û­?çêûø(ûu§üýAÿOEAöëOùúƒþþ >Ýiÿ?PßÁ@ÑP}ºÓþ~ ÿ¿‚·ZÏÔ÷ðPôTn´ÿŸ¨?ïà£íÖŸóõýü=Û­?çêûø(ûu§üýAÿOEAöëOùúƒþþ >Ýiÿ?PßÁ@ÑP}ºÓþ~ ÿ¿‚·ZÏÔ÷ðPôTn´ÿŸ¨?ïà£íÖŸóõýü=Û­?çêûø(ûu§üýAÿOEAöëOùúƒþþ >Ýiÿ?PßÁ@ÑP}ºÓþ~ ÿ¿‚·ZÏÔ÷ðPôTn´ÿŸ¨?ïà£íÖŸóõýü=Û­?çêûø(ûu§üýAÿOEAöëOùúƒþþ >Ýiÿ?PßÁ@í·Û,.-wìó¢h÷c8È#8ükÕíçÒf…e¸Ža2»± ©_V9ûߥuÿn´ÿŸ¨?ïàª÷'I¼Ûö¯±O·;|ÝŒõÆk—…xÙïщ£ IÒçÔmíïÔiŸ»Ë’HŽNíÝöúw«>2ÿ úü_ýëbôûx–(%µŠ5èˆÊ ~±|[$si¶M«¯Úו9qëJ#F<±¬ièŸêWé[ã¥`hŸêWé[ã¥nÑE•«©o¥l•«©o¥qÞñZôŠOå]îóí\/‡GüU¬}‡þ:jß¿åÇþÚìµ2vWŸ*¹×ï>Ôo>ÕätV^×ÈËÛy¹¼ûQ¼×‘ÑGµòmäzïšþ´y¯ë^EE×È=·‘ë¾kúÑæ¿­y{_ öÞG®ù¯ëGšþµäTQí|ƒÛy»æ¿­kúבQGµòmäzïšþ´y¯ë^EE×È=·‘ë¾kúÑæ¿­y{_ öÞG®ù¯ëGšþµäTQí|ƒÛy»æ¿­kúבQGµòmäzïšþ´y¯ë^EE×È=·‘ë¾kúÑæ¿­y{_ öÞG®ù¯ëGšþµäTQí|ƒÛy»æ¿­kúבQGµòmäzïšþ´y¯ë^sáŸùmàú¯C­#.esHK™\šþ´y¯ëL¢¨±þkúÑæ¿­2Ššþ´y¯ëL¢€æ¿­kúÓ( ù¯ëGšþ´Ê(þkúÑæ¿­2Ššþ´y¯ëL¢€æ¿­kúÓ( ù¯ëGšþ´Ê(þkúÑæ¿­2Ššþ´y¯ëL¢€æ¿­kúÓ( ù¯ëGšþ´Ê(þkúÑæ¿­2Ššþ´y¯ëL¢€æ¿­kúÓ( ù¯ëGšþ´Ê(þkúÑæ¿­2Ššþ´y¯ëL¢€æ¿­kúÓ( ù¯ëGšþ´Ê(þkúÑæ¿­2Ššþ´y¯ëL¢€æ¿­kúÓ( ù¯ëGšþ´Ê(þkúÑæ¿­2Ššþ´y¯ëL¢€æ¿­yͪØÚÜL‘£›¢§Ë…àœ“ÏÌk¿¯5_ùÚÿ×ãÿè XÎMUŠõýŠp‹¡95ª·êw'ú•úVøéX'ú•úVøé[œÂÑE•«©o¥l•«©o¥r~ÿ‘¥ÿÝ?ú UŸËý´ÿÙj·‡?äi÷Oþ‚ÕgÆßòãÿm?öZΧÂÈ©ð—Jˆ\ÀHhÉ=aRÕd³D¸2ƒÇU^ÀÖ ÝNun¥š¯y;[Û–Œ•ˆHÔô,zUЧuf×W1r°Æ ù«n”«yȪö±Ú¯”šE†Už~SË”çvNáÆ)ÛL<•”¦ÈGÊ?1Æ2hÐ4&’à$¾Xä|n!@à~&š×±¬›v¹‚åö¦Í²Ü#…`C‚wc¸¨à²håùº, vÏ?ìôÍ ²±,W%Ì©°˜Õ¶†À8ç<Ñö‡ûi‰P²*Œ‘Ž õçÒ–Ú)aÞ¯°¡bÁ999æš±N“NËå•äNAÆéF¡ºpǺO2Rííqϵ<Üm¹‘ÝŠÇc*}OõÿjÚË·1ùgËB„1#®2GåD¶rH'—çuu䎘àþTô„ðÜ ™—c£(‡àôþU#–Å3À'5´&%bÈ¡ØòCÏây©\1‚0V à‘œ—k÷1—U#‘\®ðyfLG¸ÇoÖ´¬dš[Uy”‚z0Xv$v5Žº5ä‘Ë$²0'jç!ýI>õ­§Eq ’%Ëý‡]£°Ïz¹òÛCIòÛC¢ðÏüŒ6¿ð?ýסמxgþF_øþ€kÐêéliGá (¢´5 (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ óUÿ5·ý}¿þ‚•éUæ©ÿ kúûý+ ÿ?Ðê¥þïSÖ?©ÜhŸêWé[ã¥`hŸêWé[ã¥t‚ÑE•«©o¥l•«©o¥r~ÿ‘¥ÿÝ?ú UŸËý´ÿÙj·‡?äi÷Oþ‚Õܧz™+« JêÇ‘Q^¿Egì|̽™äW¯ÑG±ócæyëôÉdHbyd`¨€³1è£Ùy‡±ó<ŽŠô±«Ï"‡‡FÔ%†U¢î¸fójÝÿÐ QÿÈ_ü]gh÷ü ~§?êßæy¥éÚ·ôÔòÿGö­ßýµü…ÿÅÑh÷üêsþ­þgšQ^—ý«wÿ@-Gÿ!ñtjÝÿÐ QÿÈ_ü]À>§?êßæy¥éÚ·ôÔòÿGö­ßýµü…ÿÅÑh÷üêsþ­þgšQ^—ý«wÿ@-Gÿ!ñtjÝÿÐ QÿÈ_ü]À>§?êßæy¥éÚ·ôÔòÿGö­ßýµü…ÿÅÑh÷üêsþ­þgšQ^—ý«wÿ@-Gÿ!ñtjÝÿÐ QÿÈ_ü]À>§?êßæy¥éÚ·ôÔòÿGö­ßýµü…ÿÅÑh÷üêsþ­þgšQ^—ý«wÿ@-Gÿ!ñtjÝÿÐ QÿÈ_ü]À>§?êßæy¥éÚ·ôÔòÿGö­ßýµü…ÿÅÑh÷üêsþ­þgšQ^—ý«wÿ@-Gÿ!ñtjÝÿÐ QÿÈ_ü]À>§?êßæq~ÿ‘†×þÿ ô:­k¨ §xd·žÚuPÆ)À®q‘‚Aô5f¶‚Ih5MÓ÷XQEc (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ óTÿ5¿ý}¿þ‚•éUæ©ÿ kúûý+ ÿ?Ðê¥þïSÖ?©ÜhŸêWé[ã¥`hŸêWé[ã¥t‚ÑE•«©o¥l•«©o¥r~ÿ‘¥ÿÝ?ú Wrë†ðçü/þéÿÐZ»”ïHc¨¢Šb (¢€ Îñü‹šŸýzÉÿ šÑ¬ïȹ©ÿ׬Ÿú ©ŸÂÍ)|qõA§Í+xŽî#˜“N´uBÇj±yÁ z«Ÿ ô­ªÂÓ¿äj¾ÿ°e—þ‡q[´ÖÄKvQE1Q@Q@Q@Q@Q@Q@Q@Q@Q@·ò4Û׌¿ú2:¹Tîÿäi¶ÿ¯¿ôdUr³†ïÔÖ¦Ñôÿ0¢Š*ÌŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¼Ù?ä oÿ_oÿ ¥zMy²Èßþ¾ßÿAJÂƇÏô:©»Ôõêvú'ú•úVøéX'ú•úVøé] ´QE¥cêßê[é[¥cêßê[é@Ÿ‡?äi÷Oþ‚ÕÜ!Æk‡ðçü/þéÿÐZ»jC$ÈõdzŠŽŠ“#ÔQ‘ê*:(LQUµo·i—VŠáLÑ4alŒf¥¢‡ª³ÚwFl7W6÷ qýƒpnZá’D¹ˆ†T,W¸ã.Ýçš±ý±}ÿ@+¯ûÿÿV¨¨äÌÿò5ö‘þUøÿ™Wûbûþ€W_÷þþ.í‹ïú]ßøøºµE¯ùŸáþBö‘þEøÿ™Wûbûþ€W_÷þþ.í‹ïú]ßøøºµE¯ùŸáþAí#ü‹ñÿ2¯öÅ÷ý®¿ïü?ü]Ûßôºÿ¿ðÿñujŠ9_ó?ÃüƒÚGùãþe_í‹ïú]ßøøº?¶/¿èuÿáÿâêÕr¿æ‡ù´ò/ÇüÊ¿Ûßôºÿ¿ðÿñtl_Ð ëþÿÃÿÅÕª(åÌÿòiä_ù•¶/¿èuÿáÿâèþؾÿ ×ýÿ‡ÿ‹«TQÊÿ™þäÒ?È¿ó*ÿl_Ð ëþÿÃÿÅÑý±}ÿ@+¯ûÿÿV¨£•ÿ3ü?È=¤‘~?æUþؾÿ ×ýÿ‡ÿ‹£ûbûþ€W_÷þþ.­QG+þgø{Hÿ"üÌ«ý±}ÿ@+¯ûÿÿGöÅ÷ý®¿ïü?ü]Z¢ŽWüÏðÿ ö‘þEøÿ™Wûbûþ€W_÷þþ.í‹ïú]ßøøºµE¯ùŸáþAí#ü‹ñÿ2„BæóUóÚµªÇB‘»«3eb~R@(ïëW袪1±3—3 (¢™!EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP^lŸò·ÿ¯·ÿÐR½&¼Ù?ä oÿ_oÿ ¥a?ãCçúT¿ÝêzÇõ;}ýJý+|t¬ ýJý+|t®ƒZ(¢€Ò±õoõ-ô­ƒÒ±õoõ-ô Oßò4¿û§ÿAjí«‰ðçü/þéÿÐZ»jC (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ódÿ5¿ý}¿þ‚•é5æÉÿ kúûý+ ÿ?Ðê¥þïSÖ?©ÛèŸêWé[ã¥`hŸêWé[ã¥t‚ÑE•«©o¥l•«©o¥r~ÿ‘¥ÿÝ?ú Wm\O‡?äi÷Oþ‚ÕÛRQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW›'ü­ÿëíÿô¯I¯6Où[ÿ×Ûÿè)XOøÐùþ‡U/÷zž±ýNßDÿR¿Jß+DÿR¿Jß+ äŠ( ô¬}[ýK}+`ô¬}[ýK}(“ðçü/þéÿÐZ»jâ|9ÿ#Kÿºô®ÚŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¼Ù?ä oÿ_oÿ ¥zMy²Èßþ¾ßÿAJÂƇÏô:©»Ôõêvú'ú•úVøéX'ú•úVøé] ´QE¥cêßê[é[¥cêßê[é@Ÿ‡?äi÷Oþ‚ÕÛWáÏù_ýÓÿ µvÔ†QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEæÉÿ kúûý+ÒkƒÔ4É´­:Ú Ú6f¸g #QÜJÆqn¬_¯ètSœU Ž]¿SªÑ?Ô¯Ò·ÇJÀÑ?Ô¯Ò·ÇJÜæŠ( ô¬}[ýK}+`ô¬}[ýK}(“ðçü/þéÿÐZ»jâ|9ÿ#Kÿºô®ÚŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¹ýÛ/÷Ïô®ž¹ýÛ/÷Ïô  ]ýJý+|t¬ ýJý+|t¦!h¢ŠJÇÕ¿Ô·Ò¶JÇÕ¿Ô·Ò€9?ÈÒÿîŸý«¶®'ßò4¿û§ÿAjí© (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+˜ñݲÿ|ÿJéë˜ñݲÿ|ÿJÕÑ?Ô¯Ò·ÇJÀÑ?Ô¯Ò·ÇJbŠ( ô¬}[ýK}+`ô¬}[ýK}(“ðçü/þéÿÐZ»jâ|9ÿ#Kÿºô®ÚŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¹ŸýÛ/÷Ïô®š¹ŸýÛ?÷Ïô  MýJý+|t¬ ýJý+|t¦!h¢ŠJÇÕ¿Ô·Ò¶JÇÕ¿Ô·Ò€9?ÈÒÿîŸý«¶®'ßò4¿û§ÿAjí© (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+™ñݳÿ|ÿJé«™ñݳÿ|ÿJÔÑ?Ô¯Ò·ÇJÀÑ?Ô¯Ò·ÇJbŠ( ô¬}[ýK}+`ô¬}[ýK}(“ðçü/þéÿÐZ»jâ|9ÿ#Kÿºô®ÚŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¹ŸýÛ?÷Ïô®š¹ŸýÛ?÷Ïô  MýJý+|t¬ ýJý+|t¦!h¢ŠJÇÕ¿Ô·Ò¶JÇÕ¿Ô·Ò€9?ÈÒÿîŸý«¶®'ßò4¿û§ÿAjí© (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+™ñݳÿ|ÿJé«™ñݳÿ|ÿJÔÑ?Ô¯Ò·ÇJÀÑ?Ô¯Ò·ÇJbŠ( ô¬}[ýK}+`ô¬}[ýK}(“ðçü/þéÿÐZ»jâ|9ÿ#Kÿºô®ÚŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¹ŸýÛ?÷Ïô®š¹ŸýÛ?÷Ïô  MýJý+|t¬ ýJý+|t¦!h¢ŠJÇÕ¿Ô·Ò¶JÇÕ¿Ô·Ò€9?ÈÒÿîŸý«¶®'ßò4¿û§ÿAjí© (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+™ñܳÿ|ÿJé«™ñܳÿ|ÿJÔÑ?Ô¯Ò·ÇJÀÑ?Ô¯Ò·ÇJbŠ( ô¬}[ýK}+`ô¬}[ýK}(“ðçü/þéÿÐZ»jâ|9ÿ#Kÿºô®ÚŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¹ŸýË?÷Ïô®š¹Ÿ}Ë?÷Ïô  MýJý+|t¬ ýJý+|t¦!h¢ŠJÇÕ¿Ô·Ò¶JÇÕ¿Ô·Ò€9?ÈÒÿîŸý«¶®'ßò4¿û§ÿAjí© (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+™ñwܳÿ|ÿJé«™ñwܳÿxÿJÔÑ?Ô¯Ò·ÇJÀÑ?Ô¯Ò·ÇJbŠ( ô¬}[ýK}+`ô¬}[ýK}(“ðçü/þéÿÐZ»jâ|9ÿ#Kÿºô®ÚŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¹Ÿ}ËO÷ô®š¹Ÿ}ËO÷ô  MýJý+|t¬ ýJý+|t¦!h¢ŠJÇÕ¿Ô·Ò¶JÇÕ¿Ô·Ò€9?ÈÒÿîŸý«¶®'ßò4¿û§ÿAjí© (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+™ñwÜ´ÿxÿJ髚ñwÜ´ÿxÿJÓÑ?Ô¯Ò·ÇJÀÑ?Ô¯Ò·ÇJbŠ( ô¬}[ýK}+`ô¬}[ýK}(“ðçü/þéÿÐZ»jâ|9ÿ#Kÿºô®ÚŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¹¯}ËO÷ô®–¹¯}ËO÷󧢩_¥oŽ•¢©_¥oŽ”Ä-Q@éXú·ú–úVÁéXú·ú–úP'áÏù_ýÓÿ µvÕÄøsþF—ÿtÿè-]µ!…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@s^.û–Ÿïæ+¥®kÅßrÓýãüÅièŸêWé[ã¥`hŸêWé[ã¥1 EPzV>­þ¥¾•°zV>­þ¥¾”ÉøsþF—ÿtÿè-]µq>ÿ‘¥ÿÝ?ú WmHaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP\׋¾å§ûÇùŠékšñwÜ´ÿxÿ1@z'ú•úVøéX'ú•úVøéLBÑE•«©o¥l•«©o¥qº:–×.ñ!ˆyL £þYä2†ü §ý—'ý rßGÿ‹ª^,ß‹ÿ0úínëî_ärßÙrÐ×'ýôøº?²äÿ¡®OûèÿñuÔÑGÕ©öü_ù‡×kw_rÿ#–þË“þ†¹?ï£ÿÅÑý—'ý rßGÿ‹®¦Š>­O·âÿÌ>»[ºû—ù·ö\Ÿô5Éÿ}þ.ì¹?èk“þú?ü]u4Qõj}¿þaõÚÝ×Ü¿È忲äÿ¡®OûèÿñteÉÿC\Ÿ÷Ñÿâë©¢«Síø¿ó®Öî¾åþG-ý—'ý rßGÿ‹£û.Oúäÿ¾ÿ]M}ZŸoÅÿ˜}v·u÷/ò9oì¹?èk“þú?ü]ÙrÐ×'ýôøºêh£êÔû~/üÃëµ»¯¹‘ËeÉÿC\Ÿ÷ÑÿâèþË“þ†¹?ï£ÿÅ×SEV§Ûñæ]­Ý}ËüŽ[û.Oúäÿ¾ÿGö\Ÿô5Éÿ}þ.ºš(úµ>ß‹ÿ0úínëî_ärßÙrÐ×'ýôøº?²äÿ¡®OûèÿñuÔÑGÕ©öü_ù‡×kw_rÿ#–þË“þ†¹?ï£ÿÅÑý—'ý rßGÿ‹®¦Š>­O·âÿÌ>»[ºû—ù·ö\Ÿô5Éÿ}þ.ì¹?èk“þú?ü]u4Qõj}¿þaõÚÝ×Ü¿È忲äÿ¡®OûèÿñteÉÿC\Ÿ÷Ñÿâë©¢«Síø¿ó®Öî¾åþG-ý—'ý rßGÿ‹­ë{«Hm¢‰ïâ‘‘—.2ĽjÝp¥kÔέz•U¦ÿ¿"·YÏÜ?÷Ø£íÖ_ó÷ýö*z+C·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø®Å2$ðÛÉ ¬ˆ´²œŒžß¥tõ…â¿ùÅÿ_ ü[Ñ?Ô¯Ò·ÇJÀÑ?Ô¯Ò·ÇJbŠ( ô¬}[ýK}+`ô¬}[ýK}(“ð÷üŒ“ÿº?­tÖºšB¢¬ q3,ŠØØ…‚î'·'_ιÿÈÉ?û£úÖŽ¹á뫘ï&³½¸2ܼe¡Ä{p¤t,¹N3×ëK¨úu]bïKó'm7}ŒEwÍç€Ø8TÇ8Ïr+JæYb¶i-à3Ê>ìa‚çñ=+ ö=FMYúuÍ핲¡‹d‘(–Nîà°éØcçÒ´/.µAk}öM?3"¨¶&U>a#“ŒŒm÷<âŽÔ©ÿ Am¨5퉆âËfèÒPêÛþîñÈâ®iÚœ×W—wV‹oq £’ùŠU³Žp9àñŠÉûìºåœZ}ÄWᥒæXË\’Fñ•c‚@ tŒUNšÎþîT±k 9·yC’ã9n cíL] ÛY»¸º¸‹LÓEÔvïåÉ,“ˆ”¸ê«ÁÎ? .µ{Øõìm´èå˜Û}¡üËyÆ>éÍTX5]$jÖ¶-w Ä’M ±LˆÑ—ä† GCÜf©Ï¤]½Ý„÷ÚGö¦Í=a4‘’%ÎIùÈÏ~E%ý}Ïõ멹k­%Öƒ&¨!d¤…£,)@#‚2:Õ-7Ä éßmÔæDWdTXí&R í²_ꣶZ]ì½³xÂÉ*Ëä[‰7•Ú›§åR\é÷RXh‘,Y{iáy†áò…R~ }~ïø"é÷ÿÀ-O¯iÖÑE$³:‰Tº¯’å¶Ž¤¨ÜN¹×4ÛD‰å¹LžbyhÒŸÞƒǿJÊÖ4«—×>ß½ÍÌ2[ˆY-®Ì¤s÷”sëU§Ðf¶»·žÚÊíí¾È°-ïŒRDA'“¸úö¥ý~c:,sÅo4N¯°ee9l¥¨øƒMÒ®sºÊSÌÚ¼˜\ãqÚÖ§³¶ŽÎÂÊÞ(Œ)F[q_•¸Ïz¦Ö7År^ùèÍ`!¸rûÉÆ:ô¡ï -µ5˜´}ªØÙ‹!u¬[nOÍŸ»·ºÓ´ÿiš¤ÞM¥Ã4»<ÀÆY}T0â¹h4{ý?G™î òÖ-­ÜïS‡Ž8>úUí& GRŸB¹›O6–öäù*±˜²Bž~qÛŠv_×Ïü…ý~ üÍ(µÛÄÕ­¬µ /ì«tÉu¸”d†qÇ¡5£o©ÙÝiƒQ†pÖ› ù„Frpyìk G]MµW½Ôôk‘u)dYLИà9  9<àdã$û Ø1M«hrÁ}nl幉ã’! r™Èê8¦:xºY'o/J‘áQ¹¶³q»`8çi}ÞÙâ¯ê:Í彨¼°Ó–òÐAç´ÆäF6ã?(Á$ãžp=ë"ÒÛÄ–/=¼6±•‹;¾Ór¸,~à8ÎÒ‡Ó=ê]GO¿Š=?I‹O¹¼Ò-àQ7“,hfaÀVÜÃåã'r­€¼Ësx’Yô½9¯%’ÕnÝ^QÈÏAÐå<{u¤¼ñ\Pi6z…µ•ÅÌwA6¬a˜/ÌÝÉè2Gq©k«RËK3}¦Í`{s2#BêI\œà˜ƒ‚zw¦Í ÝCà{}&&¹ŒÂ[ $H¬Ø'u¦­øþ¯þµþ¾F޵©Þép=Ä|wñFd•ÞäF@@œ})uil|:ut¤_-$1ØpÄpx8ëU|Io%ü?d:ÔSnèåó‘oÈÏ$0ǨÍ3TÒõÿgûV¡äƮۀÞÀ®NN=Z˜ú¢Ýç‰ô>êKk«£‘íó’åSwMÌÑŸsRZøƒK¼Žåá¹8¶O2Q$N…WîÃHàò+Rѯ®!ñBÇo¸ßEÛüëó‘=xç׺ÍÊÏ©^´xƒûá/¸}ðXãzT·oëÈi^ß×c_Oñ™ªOäÚ\–—fð’Dñ–_P qE¿ˆt««ág Øi‰e_‘‚¹^¡X¬G±5‡¥Ûj:¬š$óX›+{+cûÖ•XÊZ0 (SÀïÎ;qQh>žÊ[+kí>ñÍ›×öh2„eò ÛÆMSVv%;«šÓøžÊm:â}>å3_ÞÏo/•Ë…à…ù½8Í]»×4û´µº™ã‘Ê€ÆÙ“ÐÆÑŸsXŸØÚ‡ü+øôϳÿ¦¹zö”7\ã§½Tñ‘­jWÑù—É$fÕ¢»T†4Ia“Np{QÖÃ:->ú{wWµ‘ŠÙ¢:nLŸ¯5]µÛۛ˘t(^Elæ)f’àD¥ÇU^qø “O³º¶ñ&­<ÿ£]ž9Cª»J‘×=ý*•¤Z¶ƒq{[_ÚOp÷I茅ÎJ°b:ò3Å/òFïÄZfŸ*Á{p!Ÿ`y+8ˆï2‚{œUSXº¶Ôoâ‚Eò¡Òšê?”Ÿ-ƒžãU®lõx'ÕÄbÜ®ªŠC”[ËUóÉùsÞ›/‡ïâ—ȉÑ>Œl ÅÀÛ Î œöÍoë³þ¾ôjÿÂCee§ÙI¨\<ð,¥R&sŒ ¶zô©®¼A¥Ù¤-ÖápždBiK¯÷€@N=ëš“DÔ…Åì–’fÁ-¥·µ¿òdžr+)Ï­NÖÒxvõ.­lU펞°éÛí$õsÊüÜ{S“Wo×õ&7²þ»rø—H†ÞÞv»Ìwù±ùq;’ŸÞ!A {‘ZpÍÄÍ ¬‘H¡‘Ôä0=¯=Òô[Óc¥j)kws šrBÑZÞ›wB `~ò†RÖºÍ&d´ºD‚É¡†ÚÍ%$˼ÆXúô<æ‹tþº‚}®…›MOíZÆ¡aäíûŒïÝûÁ=1Æ1L¾ñ•¦Üýžîè$¡C0Ì…ˆ(÷8¬À5M;ĺ­ÔZ<÷]vÙâ¿ú Ý~Ÿá@·ç'«ÿß¶ÿ <äõûößá^IöÏÿÐ^ëôÿ >Ùâ¿ú Ý~Ÿá@·ç'«ÿß¶ÿ <äõûößá^IöÏÿÐ^ëôÿ >Ùâ¿ú Ý~Ÿá@·ç'«ÿß¶ÿ <äõûößá^IöÏÿÐ^ëôÿ >Ùâ¿ú Ý~Ÿá@·ç'«ÿß¶ÿ <äõûößá^IöÏÿÐ^ëôÿ >Ùâ¿ú Ý~Ÿá@²Î®ÑÜpù9FO¨÷©kÈ~Ùâ¿ú Ý~ŸáGÛÙâ¿ú Ý~Ÿá@½EyÛBë`¼¹š`p푚éôeÄ+ô­ÑÒ³¬!òã¤:SQESC (  3Ù£õ¨¾• ‚Š(ŸØðz ?±àôQ@ö<‚ìx=Pý £ûAEcÁè(þǃÐQEØðz ?±àôQ@ö<‚ìx=Pý £ûAEcÁè(þǃÐQEØðz ?±àôQ@ö<‚ìx=Pý £ûAEcÁè(þǃÐQEØðz ?±àôQ@ö<‚ìx=Pý £ûAEcÁè(þǃÐQEØðz ?±àôQ@ö<‚ìx=Pý £ûAEcÁè(þǃÐQEØðz ?±àôQ@ö<‚ìx=Pý £ûAEcÁè(þǃÐQEØðz ?±àôQ@ö<‚ìx=Pý £ûAEcÁè(þǃÐQEØðz ?±àôQ@ö<‚ìx=Pý £ûAEcÁè(þǃÐQEØðz ?±àôQ@ö<‚ìx=Pý £ûAEcÁè(þǃÐQEØðz ?±àôQ@ö<‚ìx=Pý £ûAEcÁè(þǃÐQEØðz ?±àôQ@ö<‚ìx=P×I„‚®AetŠ(ühqRQEQEÿÙ endstream endobj 40 0 obj << /Length 252 /Filter /FlateDecode >> stream xÚuËnÂ0E÷þŠ»LLÇïxIKš©U Þ!<B"QAªúûu’Ftƒ,k¬™ë;gæ‰cºZp:6x²ì ÂXbã ƒk>'!£Q<<+@Á)‡x€Õd´w>EÄ=VÙÓËô#–‹|¢,g’ò‰uœUeŒ¯ïÕ\Æ<èlºÈS!–³|çÉVÁSð,;[ƺ'–íéKý©þ7— ØšQô¶i¿7çN&Ê(.BöSÉ¢&g vX­ûT›ƒI‡?½²±Š\èþ±·±ïÅ»ëJ’vV]Ò:Œ¬³zW7Ûú:ìC±ô=÷hœøR/Zz endstream endobj 45 0 obj << /Length 2091 /Filter /FlateDecode >> stream xÚ¥XK“Û¸¾Ï¯à-T•I‚dnŽw½Ùä°q­’T*›DA3!ƒäŽçß§ PÒ Ç>¤¦¦Øh4€F??èKÂ’#üÿ” IeSåeQÕURË2/¤ªeâLrH>? X$?½úþiûðþ“ /r¥x™lIÝä¬d‰ªT^3žl÷É¿Ó'}™ŒÛd¼,R¾ùÏö/´JæpÃUE’ÉZ°Ý4<'ë:Ý£øràûO\$MÞ(®p™§’¬,r¦ÂÊS7n2QWiÅ›‡Àþ}ÃÊÔ¸g}™»ö±ƒéäì|<Ñàd7¼LŸÂŒ¥ï<Òžó¤Ê›ªðÊgA Æò¦,I¡»„‹Þ)ÌÀ°JÀU¼Ð6e™¢^‚ãÖnË4ëÐú°aEª[“o²²¬Ò_!©Å’8ø©hxÑÇ Å*úv’x¶3êÒñwš>ù£†‰¼s¶Îµ7“îú‘x~«à`:EQ8ØãLÜg×Ma©ßߺÇ|ñ;“¹`0ò»¨sÑ¿óœm2VEúCAÀáT;»ËÂN\ä “´Ó¯“v¨Š§]V|&d^4UtÄ·¼%£øB¨"ý׆á…fÚ|<ٹ߽ä {6Ó©Ž8Tiß=¢ Âä§î8»@3¸¯w ?SìÞ1Þ¯tÁ¯u2büV”…·=ò ÆóWÝN4×[ûHçîx Ì]}á'œŠ‡@ °4Xmy«Èøö½ô¾áÎ/={g÷‚c4û‘×Z¤š¸1ƒÇ U$ ‘ûÏM}å$G^Ãm.}7Ѽ¬µÃ'½ ‘‚­[gÇñ..F †]ˆ§aO„ÑÞÈ8¯wDtaåYïÃÒcš>£™þ­.¡m´¶ŸÏÞ¤ ¢†LZ²´]H•’Œ®ªO„-Bv÷_Óbéþdk¿í6²À@õ5U‡J©C5Õ.T¾£3&Þí3Ú鮃^§fl¾=UR©0ÙW*¡ÊeÉc,êz³^ ù’ïWvy¶ür1ÃZÖ€ ä’5ØSQ©#z MŸßŠ‚÷†è=ô{ Óè~.K(qzO,¨ìaŠ’ª®óZÕ÷Æö©”¯h 9ŒîÿNHtí×­öÞ`Q Îvœˆ 9‹$”š³žÆw4š°|y‰ I7Fê?œö»ÓüãÉxÇqùFÉ’Ðm¯qÀnWƒ Þø˜0{š÷·ž‰w+®c¼Ôó]üÐH,ø#B < ´y<6‚‹ðÊ\5/^DBÔˆ°°oT"ýÁλ>p[ªHš¬£u‘˜Ï» `Ú ‡9T³¯XÉ;0nƒM°Eá %oÔmëQhôLÊ*ýЃ‰ho8AÆí—ž^ Â꡺®Ù³*r^,UìÇ}7­ÙcsIùZºcÆjxµT/*ˆC •í0AæiŠH˜šþ-6¾Vãh1 uðGï8±@?|åüM4õb]`ƒ°)8þ $Æ ªˆv{…{=Ÿõå`a\:Åsɾ[ó€Æu:Å£ OøÅ–K0å}CwPÂ%«1RÝÔÎØ%«y! *Ó7p£ÉCdûPÁj)ˆ@4r·ˆ0´Qú§îfWÃ-‚dxÕ«B¥c½xV`ŠkÀü£3¨ÚÓZå,àUñÍÞ§òòU tÄŽ½Š±EÝ#GTÒ†ïì¢lü‚þ.XVWêh< ‹ bQ±ÛçIê*¯Š—¾"´H"vdÈ&²,ˆs1Ÿa é:°1nê¼#9€Ð³Å×rÆ ™^ìØ!d¥µ?dw_)Åiø;§ûÙ ä › ’{{¬€*õ3\;Û¯!¹p‡Æß¡7þZû²Oìö¤`Ž­ö ؤ–žH/¢Œ^œØwQà.ªSž½4D1¹¿T$¢d·<¢_϶0‡‰Xt4.¡Øó0÷DS6úŒÃ!R4›ÄÞ¼š"Ýò:_Ð$A‘Â?Y‰rsoÜøf¼éÛR„¾ xЊ,ÿð‰ëcx:|ËJxqþÙúfÜЂÌÇÉõo¾ñè Àt€Ôu5gWž¿@>uÓ‰(jj<©¦HÞ–x|A./—7ÿzùýqûÀüoi,\àRRVª¤=?|yÍyíçoH?U‰†~ƒóíÞ3ßÿ|æÉöáóÃõ÷·¸yvÏ®ÛûŸâîJP,WµJþ®W5÷X€Zû#u¨m‰0†~¹ðá~‚ñÉÿÿYÂ÷V)‚)àáÄIà†ôSð#S¨[Sˆïšâfÿ5[ÞðŒ‘>¦VLÁƒ)~Ž0•¹ùµë°|ËIgXˆ\á,q·Œó?jg` endstream endobj 41 0 obj << /Type /XObject /Subtype /Image /Width 739 /Height 534 /BitsPerComponent 8 /Length 32715 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream ÿØÿàJFIFÿá°ExifII*JR(i‡Züÿÿ)( üÿÿ)( 0210‘ 0100 ÿÿ ã ÿÛ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ä Bàw¬ëÝJH^Y¥HãA–f8{šä'ø• £•[æou‚F˜\Pæ/­bú×›Ÿ‰z/üýÉÿ€òñ4ÂËÑçêOü“ÿ‰ HóÖ1}kÍÿáeè¿óõ'þÉÿÄÑÿ /FÿŸ©?ðOþ&€=#Ì_Z<Åõ¯7ÿ…•£ÏÔŸø'ÿGü,­þ~¤ÿÀy?øšô1}hóÖ¼ßþVÿ?Rà<ŸüMð²´oùú—ÿäÿâhÒ<Åõ£Ì_ZóøYZ7üýKÿ€òñ4ÂÊÑ¿çæ_ü“ÿ‰ HóÖ1}kÍÿáehßóó/þÉÿÄÑÿ +FÿŸ™ðOþ&€=#Ì_Z<Åõ¯7ÿ…•£ÏÌ¿ø'ÿGü,þ~eÿÀy?øšô1}hóÖ¼ãþNÿ?2ÿà<ŸüMð²tùù—ÿäÿâhÑüÅõ£Ì_ZóøY:?üüËÿ€òñ4ÂÉÑÿçæ_ü“ÿ‰ GóÖ1}kÎ?ádèÿóó/þÉÿÄÑÿ 'GÿŸ™ðOþ&€=Ì_Z<Åõ¯8ÿ…“£ÿÏÌ¿ø'ÿGü,þ~%ÿÀy?øšô1}hóÖ¼ãþFÿ?ÿà4ŸüMð²4ùø—ÿ¤ÿâhÑüÅõ£Ì_ZóøY?üüKÿ€Òÿñ4ÂÈÒ?çâoü—ÿ‰ GóÖ1}kÎ?ádióñ7þKÿÄÑÿ #HÿŸ‰¿ð_þ&€=Ì_Z<Åõ¯8ÿ…‘¤ÏÄßø /ÿGü,#þ~&ÿÀiøšô1}hóÖ¼çþ>‘ÿ?à4¿üMð±ôùø›ÿ¥ÿâhѼÅõ£Ì_ZóŸøXúGüüMÿ€Òÿñ4ÂÇÒ?ç¼ßø /ÿEÀôo1}hóÖ¼çþ>‘ÿ=æÿÀiøš?ácé?óÞoü—ÿ‰¢àz7˜¾´y‹ë^sÿ Iÿžóà4¿üMð±ôŸùï7þKÿÄÑp=Ì_Z<Åõ¯9ÿ…¤ÿÏy¿ð_þ&øXÚOü÷›ÿ¥ÿâh¸æ/­búלÿÂÆÒç¼ßø /ÿGü,m'þ{Íÿ€Òÿñ4\FóÖ1}kÎáci?óÞoü—ÿ‰£þ6“ÿ=æÿÀiøš.£y‹ëG˜¾µç?ð±´Ÿùï7þKÿÄÑÿ Iÿžóà4¿üMѼÅõ£Ì_ZóŸøXúOü÷›ÿ¥ÿâhÿ…¤ÿÏy¿ð_þ&‹èÞbúÑæ/­yÏü,}'þ{Íÿ€Òÿñ4ÂÇÒ?ç¼ßø /ÿEÀôo1}hóÖ¼çþ>‘ÿ=æÿÀiøš?ácéóñ7þKÿÄÑp=Ì_Z<Åõ¯9ÿ…¤ÏÄßø /ÿGü,}#þ~&ÿÀiøšôo1}hóÖ¼çþ>‘ÿ?à4¿üM'ü,#þ~&ÿÀiøšô1}hóÖ¼ãþF‘ÿ?à4¿üMð²4ùø›ÿ¥ÿâhÑüÅõ£Ì_ZóøYGüüMÿ€Òÿñ4ÂÈÒ?çâ_ü—ÿ‰ GóÖ1}kÎ?ádhÿóñ/þKÿÄÑÿ #GÿŸ‰ðOþ&€=Ì_Z<Åõ¯8ÿ…‘£ÿÏÄ¿ø 'ÿGü,þ~eÿÀy?øšô1}hóÖ¼ãþNÿ?2ÿà<ŸüMð²tùù—ÿäÿâhÑüÅõ£Ì_ZóøY:?üüËÿ€òñ4ÂÉÑÿçæ_ü“ÿ‰ GóÖ1}kÎ?ádèÿóó/þÉÿÄÑÿ 'GÿŸ™ðOþ&€=Ì_Z<Åõ¯8ÿ…“£ÿÏÌ¿ø'ÿIÿ +FÿŸ™ðOþ&€=#Ì_Z<Åõ¯7ÿ…•£ÏÌ¿ø'ÿGü,­þ~eÿÀy?øšô1}hóÖ¼ßþVÿ?2ÿà<ŸüMð²´oùú—ÿäÿâhÒ<Åõ£Ì_ZóøYZ7üýKÿ€òñ4ÂÊÑ¿çêOü“ÿ‰ HóÖ1}kÍÿáehßóõ'þÉÿÄÑÿ +FÿŸ©?ðOþ&€=#Ì_Z<Åõ¯7ÿ…•£ÏÔŸø'ÿGü,½þ~¤ÿÀy?øšô1}hóÖ¼ßþ^‹ÿ?Rà<ŸüMâ^‹ÿ?Rà<ŸüMzHp{Ò‚ yÜ_ô"ÀÇ[y?øšêôÍn×R·YígI¢nŒ‡?‡Ö€6¨¦#îú(¢Š*­Ô›šµYz›í‰¨ɾ(ê²²ÙÙ+‘Œîà»qŒÿßYüy¾êë~"J_P´ç “ÿe®3uK6ê|qË0Å’×|…¶Åõ8è=ÍVÝ]7†¼U‡esm=¡¸¶T…OÏ$œ…ë‘ÇJç÷Qº»­I‹S³ð½àÓaœIw?ÛmÔƒóy˜=3ÅGb¶:~“¨]¶“§Ý?öáµæá#8á}1Ú‹koë§ù‡Ÿõ×üŽ'u«¾²Ò´ë_ëšzéblc<œsÇZ¡ñœêúyxDtØwD«´!Ë| vÇLPö_×AÛs™ÝFêô[-GÔ´Û}A­íbþѲ[(QbPëçËØü£ž´ÇÓ´øgÕRÇH´¿¾Òm`…-Ì;–W?ë$e¹ŸÞ—þ¿®Ÿx–¿×õý#ÏwU¥Óî[I}P*ý•&ÝÎò3Óé]Âé:l$y_KµWþÅ7²ØÈ›£Šn8Úzj††»áÙ[P·´·ŽMPí¡O*D»Sà××ñ¥ý~6ëð¹ç[¨Ý]‡mãŸZÕ Ô4HVðºÇüKÌÖÖÍ“ò”^(k©|9¡Å›–ϧÀøÛ’Ñ6@ÛætQÓsO}ƒ©ÆÀÍ[Ôl.´›Ö³¼@“ª« ŒŽEwö‰ioáR9¬mòÅ!+qm`mÁ$€på™Ç^Ÿá¡â+T¾¼Ö’ûH·K[}ëV²ùbSn±ª ^¯É8êN&¹Ý.ÛO»’EÔu_ìäP 7Ù^mçÓ x§mZK•·SàŽK›ˆà… Ë+EÄÄà ×ð•¥¥ß,í&Tºµ2H?xŸ,€+JŸ 85·,VZ…¶ƒ©®›gi3kÖDµ‹dn¸Êúñüè]?¯!>¿×õ±ÇÜÁ5Ô¶×1˜ç‰Š:Ò>œQmmsy!ŽÖÚ{‰ÉHcg zà]ûÙÇ ÝÕ§‡í5+•ÖZ–¾nØð Àw“× ÍU%Ô>0Õ¬´kÛ«-.ßË–ëì¬Å‡ËŠ’r[ü1Ikk”Õ¯oë[3‡ŠFŽDdu8epAЃғuiøªþ}GÄwWsÙÍfdÛ¶)«í{œV6ê¨6ê7T;¨Ý@‰·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›u&ê‹u#1Øq×¥g¦^ß§™ "Eœ•°Ó¹¨ïlo4ò¾z.Æ8‡*O¥o‹‡F–Â2Š ÎW¶0 A};>™p—ÈH ņ{u½bZ[]_Jc·Œ1y‰À_©«Wz>¡g •Ö)FXÄÄíà⥲™bÑ@St ÈÁ¶Ÿ¾QÓŠ· ÌIz‚ ƒ"˜Ûpó‹Ž«Ž¤ûÐ qu:Ao’G8U^õ¶ÞÕÖ0}•ÛêÖ_›õýi<:ÑC}|É€GËû»Ž’ÖŒWwkÞ²o;¨ÜÇѽ®p?à\Uñ2„ÜcÐõð˜ u)*“o^Ç(Û‘ÙJ:œ2°ÁÒ»?‡œ¶ºÜ¶ÁÏ“,eŠçÀŒÈšæüDèÚ±uÆæKÿ½ÏôÅ\ðd…|B„pÿJë¥>x©w<Úô½•ISìÏ¢¬fó#5 +GrЭmŽ•©ˆ´QE¥djßê[éZç¥cêßê[é@ñÿÄÂÛþÿ²×ººÿˆñÿmÿÿÙkŒ¤ÆIºÕ8êiÌŽ˜ÞŒ»†á¸‘ê=©n×T¿²FKKû«tc–Xfd õóL×BºœDdóJy‡iïc?{ß­U¢€4YÔâšY£ÔïRYqæH·ñÓqÎOãM·Õu 3!µ¿»€Èræ)Ù7SƒÍQ œ д¾ºŽYeŽêt’`VWY¨cžA÷¢ÖþîÅËÙÝÜ[; †VBGÔªÁ‘ö8*ãøX`þT™  qê‘]¨îîå²LË+9ëóg4Û‹Ë‹É|Û«‰§—ß3—l}MV¢€-%õÔqÇ]N©ù‘ªÈÀ#ÿx ð}Ç4±ßÝÃt×Q]ÜGrÄ“2JÁÉ=rÀ皨N:œQ@Æ¡x³Ë:Þ\ ¥R²H%mÎPÇ9 ûÓVòá-þΗ,ÄžPrpþ,tϽV¢€4W[ÕRi&MRùe—d‹ráŸ2s“øÕë_]Ùx~m2Ù§Šin¾Ònã¸eº^99ÆsšÀ¢€.A¨ÞÚLó[^ÜÁ+ýù"••›êAÉ¥òÝ›µ¾ºG¬âfóü 9ªTPøõmF+™.cÔ.ÒâO¿*ÎáßêÙɪÒM$Ò´²ÈòHÇ,îÄ–>¤žµG(Ί.70ž™=¨txœ¤ˆÈ㪸 ÀзUí ϱýí—e'>GšÞ_¯ÝÎ:Õ Aèihüº¾£=·Ù¦Ôo$·ÀSÎì˜>RqI>«¨]@ ¸Ô.æ„tŽYÙ”~â¨Ñ@êxà’žU†\y‘«¯Ž™=ê=Õb ©­fY­æ’WîÉ•aÛ‚9ñv±¤kwp9<ÔQ+a_ûÀg†÷ëU™1½w Ãp##Ô{Sh¡ƒÅwÖÚ ú|RÜ¥Ä×_ikŹ`çå©îsŒç5™oªê#Zêp4§2§d.}N=OZ£EZ¹½¹½›Î»¹šâ\c|Òlzdš‡uGEIºÕ&ê7TtP›¨ÝQÑ@n£uGEIºÕ&ê7TtP›¨ÝQÑ@n£uGEIºÕ&ê7TtP›¨ÝQÑ@n£uGEIºÕ&ê7TtP›¨ÝQÑ@n£uGEIºÕ&ê7TtP›¨ÝQÑ@n£uGEIºÕ&ê7TtP›¨ÝQÑ@ Ô%pÊ:qŠI¯^ãØÎvŽõJŠ» Û[±1¿ªš–]RiWní™ï’MfÑ@ ¹ì¯›xéÛÐÕöñ›‘÷²OéëXTVU(S¨ï5s¦Ž2½¸Ó•“'–fšFwbYŽI=ësÁ§> O÷ô®rºÈŸîéZ¥mÌÛnìúDÿR¿Jß+DÿR¿Jß*„-Q@éXú·ú–úVÁéXú·ú–úPƒ|CÿûoøþËY~‚ ïïLéhÞ]Œ²#]Ä$c A§ÐÖ§Ä?øÿ¶ÿÿìµËØêéæäĨßhàmàœ+u#ž´ŸPìnD­q>£¶îÀyzlŒ[K·X‘Æáò°1®,ôæ­M¤.¯}f$r°ÛèðÌádD-€PÎv®Išæ,¯å°"%CöˆÜ H'üUèüGyÛ¿•lþU·ÙX:&‹²¸Ï8õ-xÄ“@tÛ ,äq(µur‘¾1¹Níà sóQö¯ýtÚß×SkÄQ¹ñT‹<ª‰,Æ6í|ç¸ÏÄVwŒ#Óá×·šL8.¾_A÷T(+ø“Tîõë«Ã©Rý èÒíR6í'yã¯|Ó5Maõm=¥ª\ y—«—78íØ ”´_×b¯©[:T_èú¡†3y ¨$Ú7Ÿ}3×Nì³XÕkN¿›LÔ!½·Úd‰²Œ«„Ü~µ^B:K 8­ï´KÏÙïZ nn."Uóô%S$ÇûF£Òü/iq§Ù\^Ü4fð±WPD°(b¡™\î~A8\qïY ®]uõr#k—f$vÀ®Ï@ö¶úãÇa•Å•äQ0›„bÑg“‚¬8Ï89¼ÀÔÓü-k}s§w"[O¾|¡”ì•X ã¡-^ÍÖ²5 5,4û¤WG’6ÆCm\qœ’­úQµyo£K¥ÆTA$¢RØùàC…'ýÑMÖ5{oPkÛ¡‘”.ØÆ;×êi¿ëúþ¶…tž¹FvòØiÓ¬6sÌ­5œnû•Ib¹<ö®n­ØjéÏ3¨Æh^Þ Â°ÁÇ=hèÅÕBÃM¸[ õ6–õ#˜ÖÆ(⊠°»~lN>¹¨N‹e§[M6¯%Ëm»{DKBªILnbX9çÔU{/ÜY[A µ´¸6Ì^ÚIã,ÐsòòçœFi¶ºôðE,7ö×ÑI/žRé 'v ä÷ìhôþ¿­GëýZ“éßÙZGˆ¬Ä¾j$–¬ŒnV%”‘ØàŠ—Æú\vwóÞ\<¾}ㆶXñ°"¨ XrsÆÑ‚:žÂ±^¼›ûGÏMý¡7zô*r¥qŒc·lv§Þx†òý/c¸HZ;§Y m8‰Ô¹9à0zä~—õø¿}me ñ!ÔEÍç•5°†D—‹að«èö‡Ã«¨@——R•c#E*m¶Ã` inœîàsLÿ„–å¯/§žÖÒt½ÛçA*6ÂWõïQA­µ­¤ÐÛXYE$±¼Mpªûö7QËmèqÓ8¢ÚÜÊ«zTi.±eˆ®q²°È °È"ªT¶Óµ­Ô7xdPÝ <ÕE٦ɒºilzŠxƒVÍÞ—aÈÀÈîzb±"Ö."Ôî¯Õ"2܉C‚Ñæÿ´qRI®=Å‚[\ÙYÜ £! G ƒZ:_ˆ‘ ­}³´Ö´ˆ4lDܪø>™ç­dj:¬ºˆ 0[Á•Š„Lœž¤’IêI4=ÿ®ïþ–ß×dQ¢Š)€QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEWCàÏùSýÃý+ž®ƒÁŸò0Çþáþ”ô&‰þ¥~•¾:V‰þ¥~•¾:UZ(¢€Ò±õoõ-ô­ƒÒ±õoõ-ô =Óôû=SÇÚ^ÛCq ÚÌv˸4g pxÆ}Ív¿ðƒøPuЬïÕrZü”‹cÿN³ÿ4®ÇW×ãÒuK i¢‘¢ºY xãyvŒ*‚NsHÿáðŸý¬ïÕðƒøOþ€V?÷ê­\ëúuÌv÷IÉ·k4ËtöíúY‡ÅVÖ:þ©g©\yPÀbòˆ…ˆPË’Y€ ÷8§`,ÿÂá?úXÿߪŠçÁž‚ÖYáÐìD¥ùX à‚ X×uñ£[Å*YMt$eÓˆÐ3É~ø$þµ¥|â[t?é‹ÿè&‹•ÿ¯‡è¥ÿàáGü"¾ÿ —ÿ€qÿ…kÑHfGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ©4ÑÛÁ$ò¶ØãRîØÎ&¹ûíBëÈR]¬)…ñæÀ ›yùsÆêƽxÑ‹”„Ùsþ_ÿÐKÿÀ8ÿ±Ýiÿ?PßÁGÛ­?çêûø(z*·ZÏÔ÷ðQöëOùúƒþþ žŠƒíÖŸóõýü}ºÓþ~ ÿ¿‚€'¢ ûu§üýAÿn´ÿŸ¨?ïà  è¨>Ýiÿ?PßÁGÛ­?çêûø(z*·ZÏÔ÷ðQöëOùúƒþþ žŠƒíÖŸóõýü}ºÓþ~ ÿ¿‚€'¢ ûu§üýAÿn´ÿŸ¨?ïà  è¨>Ýiÿ?PßÁGÛ­?çêûø(z*·ZÏÔ÷ðQöëOùúƒþþ žŠƒíÖŸóõýü}ºÓþ~ ÿ¿‚€'¢ ûu§üýAÿn´ÿŸ¨?ïà  è¨>Ýiÿ?PßÁGÛ­?çêûø(z*·ZÏÔ÷ðQöëOùúƒþþ žŠƒíÖŸóõýü}ºÓþ~ ÿ¿‚€'¢ ûu§üýAÿn´ÿŸ¨?ïà  è¨>Ýiÿ?PßÁGÛ­?çêûø(z*·ZÏÔ÷ðQöëOùúƒþþ žŠƒíÖŸóõýü}ºÓþ~ ÿ¿‚€'¢ ûu§üýAÿn´ÿŸ¨?ïà  è¨>Ýiÿ?PßÁGÛ­?çêûø(z*·ZÏÔ÷ðQöëOùúƒþþ žŠƒíÖŸóõýü}ºÓþ~ ÿ¿‚€'¢ ûu§üýAÿn´ÿŸ¨?ïà  è¨>Ýiÿ?PßÁGÛ­?çêûø(z*·ZÏÔ÷ðQöëOùúƒþþ žŠƒíÖŸóõýü}ºÓþ~ ÿ¿‚€'¢ ûu§üýAÿn´ÿŸ¨?ïà  è¨>Ýiÿ?PßÁGÛ­?çêûø(z*·ZÏÔ÷ðQöëOùúƒþþ žŠƒíÖŸóõýü}ºÓþ~ ÿ¿‚€'¢ ûu§üýAÿn´ÿŸ¨?ïà  è¨>Ýiÿ?PßÁGÛ­?çêûø(z*·ZÏÔ÷ðQöëOùúƒþþ žŠƒíÖŸóõýü}ºÓþ~ ÿ¿‚€ Ûo¶X\ZïÙçDÑîÆqFqø×!«ÛÏ¤Í ËqÂevb(AR¾¬s÷¿JëþÝiÿ?PßÁUîN“y·í_bŸnvù»ëŒ×.+ ñ³ß£F“¥Ï¨ÛÛߨÒ/?w–!$‘œ Û»íôïV|eÿ?õø¿úÖÄ3éöñ,PKkkÑ•@übø¶HæÓlš7W_µ¯*r>ãÖ”(FŒyb XÓÑ?Ô¯Ò·ÇJÀÑ?Ô¯Ò·ÇJÜ¢Š(=+VÿRßJØ=+VÿRßJã¼Us¯Þ}¨Þ}«È謽¯‘—¶ò=syö£y¯#¢käÛÈõß5ýhó_Ö¼ŠŠ=¯{o#×|×õ£ÍZò*(ö¾Aí¼]ó_Ö5ýkȨ£Úù¶ò=wÍZ<×õ¯"¢käÛÈõß5ýhó_Ö¼ŠŠ=¯{o#×|×õ£ÍZò*(ö¾Aí¼]ó_Ö5ýkȨ£Úù¶ò=wÍZ<×õ¯"¢käÛÈõß5ýhó_Ö¼ŠŠ=¯{o#×|×õ£ÍZò*(ö¾Aí¼]ó_Ö5ýkȨ£Úù¶ò=wÍZ<×õ¯"¢käÛÈõß5ýhó_Ö¼ŠŠ=¯{o#×|×õ£ÍZò*(ö¾Aí¼]ó_Ö5ýkȨ£Úù¶ò=wÍZ<×õ¯"¢käÛÈõß5ýhó_Ö¼ŠŠ=¯{o#×|×õ£ÍZò*(ö¾Aí¼]ó_Ö5ýkȨ£Úù¶ò=wÍZ<×õ¯"¢käÛÈõß5ýhó_Ö¼ŠŠ=¯{o#×|×õ£ÍZò*(ö¾Aí¼]ó_Ö5ýkȨ£Úù¶ò=wÍZ<×õ®?Á?òýÿlÿöjëkXÊêæ±|Êãü×õ£ÍZeÊæ¿­kúÓ( ù¯ëGšþ´Ê(þkúÑæ¿­2Ššþ´y¯ëL¢€æ¿­kúÓ( ù¯ëGšþ´Ê(þkúÑæ¿­2Ššþ´y¯ëL¢€æ¿­kúÓ( ù¯ëGšþ´Ê(þkúÑæ¿­2Ššþ´y¯ëL¢€æ¿­kúÓ( ù¯ëGšþ´Ê(þkúÑæ¿­2Ššþµçº–§6«ckq2FŽnŠŸ,‚rO?1®þ¼Õäkÿ_ÿ -c95V+×ô:)Â.„ä֪ߩÜhŸêWé[ã¥`hŸêWé[ã¥ns EPzV>­þ¥¾•°zV>­þ¥¾”ÉøsþF—ÿtÿè-V|mÿ.?öÓÿeªÞÿ‘¥ÿÝ?ú UŸËý´ÿÙk:Ÿ "§Àr]*!s £$ô…KU’ÍàÊU{X+u9Õº–j½äíonZ0V!#SбéV*Õ›]\Ä]ÊÃ'är­¸ñÛÛ?%¾¢^d–wæÙ]ÀY*ê;0àÕŒÕ;K6´¸›k–†L0 Ř7C×ð©áµ‚ݘà F_ïÍ7`v,É n|õÀd“è*¢]þúWu‘Qv¢ÆG%ºô…OqŽñ<{KFÄáŽãµvÈ fQ+HA$‘ŠjÖ)ZÄÂñå[xB„ ‚j;«¬C2Å»ÌVTçÓð¤6“ ²†F›ÌÞÀä/Lcð¦ý–àm`bg™@<`v¡$šë| ‰¾9w¬xn£?ýj‘¯#Y6ív‚åÒ˜-$’V“ÌÞùàtÇJlM¿8W@Å.Ùçýž™§ hX*Ò˜ÑÀ8gm«Å;:¡ófm¼g徜~µ$Íh‰CX†îäç¥6+IÊWÄPm=ÏÊ–¡*],„•G1ŒþóoÇ›©,ïÌÝ—Ðÿm1*EQ’1Á>¼úR­äo"¨WÚÇj¾>RiVyùO.SÙ;‡¦Cm0òVR›!(LüÇÉ£@КK€’ùb7‘ñ¸…øšk^ƲmÚä\”Ú›4ËpŽj ݎ⣂ɣ—ç è°%Û<ÿ³Ó4$‚Êı\<—2¦ÂcVÚcãœóGÚí¦%BȪ2F8'ןJ[h¥‡z¾Â…‹ääçšjÅ:M;/–VCI9¥„féÀCé<ÉH ´´uÇ>Ôóq¶æGv+qŒ©õ?×üi«k,FÜÇåŸ- ÄŽ¸É•ÙÉ œ_Õ×’:cƒùSÐzÃp&f]ŽŒ cƒÓùTÕ´&%bÈ¡ØòCÏây©êúŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( «_I4V¬ð©$˜’£¹¹«5SQŠâk7KfûŽ›‡¦{S[ng¶«;ÇÆW~xeóOaŽÞõ´…Š)pcpkŸmò8â’)˜‘¹s€ž„jß@Â5Á˜’2j§ËЩòô:ÿÿË÷ý³ÿÙ«­®KÁ?òýÿlÿöjëkZ ½?…QVXQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEWš¯ü­¿ëíÿô¯J¯5Où[ÿ×Ûÿè)XOøÐùþ‡U/÷zž±ýNãDÿR¿Jß+DÿR¿Jß+ äŠ( ô¬}[ýK}+`ô¬}[ýK}(“ðçü/þéÿÐZ¬øÛþ\í§þËU¼9ÿ#Kÿºô®å;ÔÉ]XRWV<ŠŠõÖ–4dWuVs„à±Æp=x‰ËMØÉÈz’p+?cæeì|Ï"¢½sɺÆ|èWÛË'ŽáM0ÝÿÏÄ÷äÿñt{/0ö>g’Ñ^¬Ëx?åæßþüþ.©jWÖö7* “ìò¢c$¤ŸLþ){/0ö>g›QV?á,ñ+) |E8+$ØÁç (5v-Ä—<ÛÉã9ëoj¬=÷£~Ÿ•BI»Øy™TV¶£¯k/hí§ê×bæ(ËD‚c&9ÆÑ$œ``ŽOá^coñ;Çñ^¼º¬±Ê„nŠ[(Q‡é³<еM=˜ nÎ⊥¥xïű8“Q›qŸËF[8È'  d’Iï[I¯ø±®n#}CÈHU›ˆ¡^pt0ê¤uô¬š’Mò»zÁ/êñº‹š»)QOÿ„ÓÄ }䶤¬e¸Š2Ns·ÐÔ—7×LEã½FÑ c·<Žý¹ž.’Ñßîÿ‚oý7³DT 㿎š8ÿžÿñ5™«üGñ=›Hš¶Ö럳ÄxŸáôª†&œšJÿwü<¾kª6¨¬¿|AñF±¢ÏqªyÒ­Ë o³Ä¸]ªqÂS]?ü%šßüþÿä$ÿ íö>g7±ó3(­?øK5¿ùýÿÈIþÂY­ÿÏïþBOð£Øù‡±ó3(­?øK5¿ùýÿÈIþÂY­ÿÏïþBOð£Øù‡±ó3(­?øK5¿ùýÿÈIþÂY­ÿÏïþBOð£Øù‡±ó3(­?øK5¿ùýÿÈIþÂY­ÿÏïþBOð£Øù‡±ó3(­?øK5¿ùýÿÈIþÂY­ÿÏïþBOð£Øù‡±ó3(­?øK5¿ùýÿÈIþÂY­ÿÏïþBOð£Øù‡±ó3(­?øK5¿ùýÿÈIþÂY­ÿÏïþBOð£Øù‡±ó3(­?øK5¿ùýÿÈIþÂY­ÿÏïþBOð£Øù‡±ó3(­?øK5¿ùýÿÈIþÂY­ÿÏïþBOð£Øù‡±ó3(­?øK5¿ùýÿÈIþÂY­ÿÏïþBOð£Øù‡±ó3(­?øK5¿ùýÿÈIþÂY­ÿÏïþBOð£Øù‡±ó3(­?øK5¿ùýÿÈIþÂY­ÿÏïþBOð£Øù‡±ó3(­?øK5¿ùýÿÈIþÂY­ÿÏïþBOð£Øù‡±ó3(­?øK5¿ùýÿÈIþÂY­ÿÏïþBOð£Øù‡±ó3(­?øK5¿ùýÿÈIþÂY­ÿÏïþBOð£Øù‡±ó3(­?øK5¿ùýÿÈIþÂY­ÿÏïþBOð£Øù‡±ó6¼ÿ/ßöÏÿf®¶³´¹ï´;k›—ß+ïÜØ8b:aZ5¤U•b¬¬QE2‚Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¼Õ?ä oÿ_oÿ ¥zUyªÈßþ¾ßÿAJÂƇÏô:©»Ôõêw'ú•úVøéX'ú•úVøé] ´QE¥cêßê[é[¥cêßê[é@Ÿ‡?äi÷Oþ‚Õܧzá¼9ÿ#Kÿºô®å;ÒÎë>¼Õµ4¼¨€E!E¹&#× ïç¾; Ý"E·…epòŒ3*íî8ÉÅA6³¥ÛLÐÏ©YÅ*ðÈóª°ú‚jv–9 ŠXdÞ2®‡!†áÈ4Ä\w¥˜€ d“ØVƒâ5×~Ò>ÊöÍ »dË }ɃÇlUÛ^Þè²ÙX©ó.Yaw —;s蹬¨ô-CL×tûØo&¾ˆFmgY(ü¸±•#j®pÀzžx¡oý_Ó·õýH±k¯ÝrçNûð¬1 Y†Ó'ÌW…ëŽ:ž¾”ÏK<:$ÒÛ@÷ Í1‚ZFK…’x§ýŠàxºkãú3Y$Aò>ðv$c¯B*mNãì–ñÜìgòY䨽[Èp?*]u×C–k«/¯ªj:UêI&Fˆ(Ý€Ë,ƒÎqŒ1è*3X‹ZÓ–óKΕâ.–âebì3ÆGwéß=wÄçÅ:Α¦ÿ¡Y¶÷Í8—qÚ¡»ª“×®FAÈ8Ÿ ¡ˆ·ˆžñdXŽÏ1.JÆÈà±|ƒ* ŽÁ8ÅLjsÉò½ŠqŒaª×¹ —ˆ$Ôµ'zˆÓ­&F)å¼ñ€Y7s€s`)ê±[¼—Rö©`“gšòŒ@Üçœ+@ÏÌjÕî™ao=”0¼²Fì±ÜFËó “+ûÁ÷†íÎ1ÅX¼ŠæÑ’Ý$gIÛhQäôÚsœ–ÏOj¸JTéJUbÓm¤šÝwL¸Ç[OånmnŸ[lËÞIu[=B(%JŒæÁf;”Œ‚m '^JÓ‚þ-Fâʦk³nÈáÐn';”3 +‰ÈÉàæ³g:^Ÿ£iÒYéåî¡L\ÜH6|äu;ŽàÛÂÿ ަ¹§ñ-Õž­P!eæ’YÐóa¸ã–:qXA:׫)Ê)_–ìºù=üŒªS6¹,Ûv}⺴ͭvÒK›ù0ð4ÉQáò¨ çžg=ê½¼†B.®e’.ë±zçŽ@ÍkIn”M,wO¸ Ð;pFzàÊ5ý›@Uç´ÛŒä:FµàÊmÉÝ~¶¢’²3Þ3«ñêEr0CfW8ÎTõÓ5èøµžÔ·ˆ†PDÛ‘ë×¥p3K)µlÀ–[VuÚÿuÔ3tÇ¥k„wªˆ­¤á Ç†î8ëvßúWg\‡Ã‘̾—Mÿ ¥uõôŽQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEzW…¿äY³ÿÿèmZõ‘áoùlÿàúV½!…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@y²Èßþ¾ßÿAJôšódÿ5¿ý}¿þ‚•„ÿŸèuRÿw©ëÔíôOõ+ô­ñÒ°4Oõ+ô­ñÒºAh¢ŠJÇÕ¿Ô·Ò¶JÇÕ¿Ô·Ò€9?ÈÒÿîŸý«¹NõÃxsþF—ÿtÿè-]Êw¤3VðÅ®­¨AvîÑã‰ÑGúåôúúdzc^U j FÌ*ZŽoºŸõÑ?ô!LE£Ln”óLn”VNµ‡â˜’ÝC!ÄrC:±ÈÞPzñùñ[’u¬Ý^Ù/l…¬™Ù9’6ÁÇ €óƒŽ¾”€ð3G±†Âwû–úl³ÃM"™Pl;ÙŽÍÿ(fÂõÆŒîkŸÙz‚XÜhÚ¥þ®¶û-Ô_¿•k‚Âe@ÜÒp  Jí,zy¼<ºU Ò®-¡1\l"BêÛŠ¦wžp7 xÉgŒðKœmA™ì¡GxmþP‘ üìʼí»}}kÊ4äû½~ãH§%~‡?áø{ÄúÔëâ{8-lì´áä7žÈ  fgb¡}HÃpFô^.Ð$¶¹Ó4 :m?uŽÀI"ƒqù"ÜHÞÌcr‘ÉSŒŒ0åõ|=§è‹ªfÝÅ{qpŠòD£2Íó)Æ2vA9Éàsk©Üù‘Û óngÙ4²KÎÙ .ÜüÁ 9$d9ÈÈ×Ò©8©½?.®ßÖæn8Ón?á¶š¼–Ú¾¤e»º¸D޳­ã! ´mË‚?ƒ `rNj¯ü#z=”^p‰îIÍ1ÞѰlå{s‚2}1Þ¯7ˆö?3Ë!Wy#R22¦Gé’†';rAæ¯Ú¡Õ|1ö¹-¦ŽÞhÕž ràpÙR1Æ0Û²>\“€M*ü’÷ þB¡)ÁÛñÐʲТYKɧ±™£È‡`À2‚@ço±'¿9«‰¦ê pŠ8c!`šD"1¸±l3È$óÐäŠéôë[ 2Ĥ%1!BYÀÞç¯'©${úšÅ¿º¹3-Ì/{å:²›€«ÚÛŽrq׸ªÃÙÁr¯*¯–];áèÛ ÜK¦ÿÐRºÊæ< ‡G¹EH>ÔÄ0 çäOJéëÕGžÂŠ(¦ ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(Ò¼-ÿ"ÍŸüÿCj׬ ȳgÿÿÐÚµé (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+Í“þ@Öÿõöÿú W¤×›'ü­ÿëíÿô¬'üh|ÿCª—û½OXþ§o¢©_¥oŽ•¢©_¥oŽ•Ðr EPzV>­þ¥¾•°zV>­þ¥¾”ÉøsþF—ÿtÿè-]Êw®ßò4¿û§ÿAjîS½!ލæû©ÿ]ÿB%G7ÝOúèŸú¦"Ѧ7Jy¦7J«'ZÊ×&–ßMi¡•b–1+¤Ž@Â' Œê jÉÖ°¼W0·ðÝÜÅU„pNåXd[ÊpGzLg'§øºÊK]Nf–þ6Ü$˜‚žc#ò¨$/ùCcv;Õøõ/ ÇfæIíî®n"lÇ óI Õ Û¹l|Ã$zqâ÷~&ŽÖê&‚h¯"  #+dÁ »HÀãŒý+2}~=Eš”"Ë> ÈØÆIÏ\q\Ê·³ó±¦’zhvÏi ìÙ@Ç0¹ $ðFâC6¸äê3PK™$2ž¸é_L7…üngûV‘¤[Å„ì£$¨<çîžz~5$ðEÔ¦+}7Iš@»ŠÇµŽ=pJâúý=ù_õó5öRÚçÌK$±ãc‘Žƒ°­KOê–€(¸w@1µÉ þyÇá_DÅáOÏpöñišT“§ßB–_¨ê(»ðo…­b¾·¸bpŸÔ€ãI㨽_áþcT¦¶g„ÂYgvu &ÝŽ0^,ÆL^Õ,Qxfø³ÞÝYHGȲ§š«Îr6{ õé^Íÿ÷ƒžÚÒh<-æè°HÒ çvw0#­:óÃ^±Tyü'‹j´’ t+N>nyÇ}¹©úÍ4í×ÝþeZO{3ËtëKû;øµ #^µk€Fâ·™f9ÊJ«¸d}ÒJÚºÔ5/!ÓX¶¿BÏ<ïmÂ30 …VPsÐ6<k¼—þ´¼ŽÙü5FÎ#YÄËÜÝ\þ8ÆkN=GÓ.cŽÞÎÞÚ2ŽìÉ1Œ®Üv‘Ï'·ãYÏ[ëæktò«+]&úa4ZŽ”. bI¼ÝöÌ[vH9– N:2uäµ–Úù¡¸³0¬±0pÃiå3,p±ÎÕÆO,qß½Zi+¢É©ÃkæF 3 22îr;ñKëôí{?ÃüÇìe{\樮môY¬üûU¶Ÿ ŠÀ]`)b ÉçžúSìmô-AæŽS,.ÈñŽõÚÅr@nÇÞ> ì¿ëæ/dûœÍÖ3F;p±ÎQq1å†r=FÆ£†ÓÃ÷>g‘%´¾PÌ›.7løn*´)ö×Ì~Â]ÎZŠé¢´Ñ®fˆ[-¼ðº¹2%Ñ<®8zóéÇ­*[ørHå‘'µhâÿXÂç!>§wþ¿å×Ì=‹îsWT,´hnÃÛ›aÖapvßYÅÙh0ۥįBÿrF¸![èsƒGö…?åwüö2îr´WCom§\hÖ÷âÊ5ó¶¯pÊâÞü•a,ô.Þ7çLî‰n q޹ÍM_Gø˜•úœµÑZ/‡/4ÿ¶£B°…÷ÜcËÏfù¸5b[-e¹•àŽû²µÁ ßCœPñðNÎ/îÿ‚?bßS•¢º§²Ðc—{uª-pG™þï<þ¿ÙúÚþɘ~ÓŒù>yß]¹ÍÚÿ•ÿ_0ö/¹ÊQ]>¡e¦éðùÇMžd³˜ŸîÔÌ?Jeí®“i¦-øµ ùiYp€ÉçŒg4,}7k'¯§ù‡±’9º+¨6Þ¿j2Û}˜¾wÚ~Lúgv(’×ÃÑôs3 ɵÄiôû‰-!+äxön#—`X3€1êy⳵˖¹šá0’Áav†*§nÒqÓp»}šÇýtÿü ?ünšÇýtÿü ?ünˆášiöòc×Ëï_æp—¶·A.¡-¬vp¤0ŽiP ö¸c’ cŸ^qVômE¦¹¸ž+Fò¯/©Þ¤*¬C-•È#+Žzì6kôÓÿð(ÿñº6kôÓÿð(ÿñº§‡n-?Éù‘*-vû×ùœÖ¬·sßC°žâÁ‘„/ó<ÜÃŒûœzRL/&×§Óî$´„¯QãÙ¸Ž]`xÎÇ©çŠé¶kôÓÿð(ÿñº6kôÓÿð(ÿñº……’V¿àÊw}¾õþfÓjîîdùDi#•êÇÛ$ÿŸh·Ì—“Ýé35ìÑ‘‰$‹ËÛü1Œ98ç$‘Ï>º͚Çýtÿü ?ünšÇýtÿü ?ün……—Á†¾_zÿ3”Ó4»« "ûOu±Bcœ7úÒËŒœŒcöÅO=•̺6Ÿcåñ˜–än"€X{ä€8õ®“f±ÿ@]?ÿÿ£f±ÿ@]?ÿÿ¡á¦Ýïø0¶–Ó¯U׿rš­ó\ß}–ØL—Ö«n[xQ†NzŒ7lž*;P[È&‚â í1 ܈ŠG]ã#©Æ:µuû5úéÿøøÝ5úéÿøøÝ5‡šÙþ M_·Þ¿Ìåõë o'¶qk-Ì(’°J"3ÜHãÈϧ‘´yÛAxݤkæ²0ÖfnÙŽ;G×ÔìÖ?è §ÿàQÿãtlÖ?è §ÿàQÿãt–i$žÞL}o§Þ¿Ìâ¤Óo®Ý§[k„·ÊgM϶PÅŽÒFç­jé\ڵʹ֬©çÉ*M¹J¸g,3yî;WA³Xÿ .ŸÿGÿѳXÿ .ŸÿGÿÓ–RVoðbJݾõþg!ú^ÛÀmɆú[´]¥\>3»9|tíQÇ£L,ì#šÍœ&Ÿ$ ¨bNÌ.sìyé]žÍcþ€ºþþ7FÍcþ€ºþþ7Oêóïø??ó kÓï_æpÓiú¥Å¼†ç1"Û\Æ’LÈU‚mß°ã³r;jvmjK–³´UÑ0’#!Ù)fÃ)#Û¯µwû5úéÿøøÝ5úéÿøøÝR¡+À~¢q~_zÿ3Œ¾Ò/Zæy­ãuE¾[…HŒaœyAIÁ\ç×Ò™=‘²¸ŠÊ{•E˜<¼^b6áŒ'b0C]ŽÍcþ€ºþþ7FÍcþ€ºþþ7SõyÚ×ükÚßO½™Ê¦t<+geåbâ3 dÜ8Û"“ÎqÀ›—rÕŒ :j3LÍ‘‘y˜={åx®³f±ÿ@]?ÿÿ£f±ÿ@]?ÿÿ¥õië®þO¨[Óï_æq'NÔŸGÓ­þË4Réò.BõþgŸE¢ÞKgh^+¦†k ‘ 0†Ld|ÁÀä}Óœ¥n"ϦÏ?Ù̾}Ì+Ì2Àª!¯+YþL,ú[ï_æsZݽÓÍ Å„5Ú+*H­–#*áŽH8þxªèwQL·†9$‘oÞV·i³#1Ã'haÿµÚlÖ?è §ÿàQÿãtlÖ?è §ÿàQÿãt£†œU“ü5~ßzÿ3‘0jÖ6÷6–¬þeÁ–+”‘UgÜC ädŽªcH¾ûa+ir² öf{•0/œù{;IþsÞ»­šÇýtÿü ?ünšÇýtÿü ÿítÖkgø0jý¾õþeË?øò‹ñþu5W²¹0Üù2Dí‘pv0í‘ÁêãV+Ѥ­»#ši©;…QVHQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW›'ü­ÿëíÿô¯I¯6Où[ÿ×Ûÿè)XOøÐùþ‡U/÷zž±ýNßDÿR¿Jß+DÿR¿Jß+ äŠ( ô¬}[ýK}+`ô¬}[ýK}(“ðçü/þéÿÐZ»”ï\7‡?äi÷Oþ‚ÕܧzCESQEVwˆ?ä\ÔÿëÖOýÖgxƒþEÍOþ½dÿÐMLþiK㪧ÈÕ}ÿ`Ë/ýâ·k Nÿ‘ªûþÁ–_úÅnÓ[-ØQEÄQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEaißñù«ÿ×ñÿÑQÕú¡§Çæ¯ÿ_ÇÿEGWë: µoîü‚Š(«2 (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ áõm+û"ÆÖßÎówNÏ»nÞÊ1ÔúWq\Ç‹þí—ûçúT¸§%'º)NJ.+gúº'ú•úVøéX'ú•úVøéV@´QE¥cêßê[é[¥cêßê[é@Ÿ‡?äi÷Oþ‚ÕÜ)9®ßò4¿û§ÿAjí© “põ£põ¨è  7Z7ZŽŠ“põª÷¶é}aqhìUf£$uŒT”PõVìîŒèÛX÷%ž”ÒlXÌÞs«:®qŸñËdã&¥û^»ÿ>šgþÉÿÆêåžl×Ú/åE?µë¿óé¦àLŸünµë¿óé¦àLŸün®QG#îÃÚ/å_×̧ö½wþ}4Ïü “ÿÑö½wþ}4Ïü “ÿÕÊ(ä}Ø{Eü«úù”þ×®ÿϦ™ÿ2ñº>×®ÿϦ™ÿ2ñº¹E»h¿•_2ŸÚõßùôÓ?ð&Oþ7GÚõßùôÓ?ð&Oþ7W(£‘÷aíò¯ëæSû^»ÿ>šgþÉÿÆèû^»ÿ>šgþÉÿÆêår>ì=¢þUý|Êk×çÓLÿÀ™?øÝk×çÓLÿÀ™?øÝ\¢ŽG݇´_Ê¿¯™OízïüúiŸø'ÿ£ízïüúiŸø'ÿ«”QÈû°ö‹ùWõó)ý¯]ÿŸM3ÿdÿãt}¯]ÿŸM3ÿdÿãurŠ9vÑ*þ¾e?µë¿óé¦àLŸünµë¿óé¦àLŸün®QG#îÃÚ/å_×̧ö½wþ}4Ïü “ÿÑö½wþ}4Ïü “ÿÕÊ(ä}Ø{Eü«úù”þ×®ÿϦ™ÿ2ñº>×®ÿϦ™ÿ2ñº¹E»h¿•_2ŸÚõßùôÓ?ð&Oþ7GÚõßùôÓ?ð&Oþ7W(£‘÷aíò¯ëæSû^»ÿ>šgþÉÿÆèû^»ÿ>šgþÉÿÆêår>ì=¢þUý|Êk×çÓLÿÀ™?øÝk×çÓLÿÀ™?øÝ\¢ŽG݇´_Ê¿¯™OízïüúiŸø'ÿ£ízïüúiŸø'ÿ«”QÈû°ö‹ùWõó)ý¯]ÿŸM3ÿdÿãt}¯]ÿŸM3ÿdÿãurŠ9vÑ*þ¾e?µë¿óé¦àLŸünµë¿óé¦àLŸün®QG#îÃÚ/å_×̧ö½wþ}4Ïü “ÿÑö½wþ}4Ïü “ÿÕÊ(ä}Ø{Eü«úù”þ×®ÿϦ™ÿ2ñº>×®ÿϦ™ÿ2ñº¹E»h¿•_2ŸÚõßùôÓ?ð&Oþ7GÚõßùôÓ?ð&Oþ7W(£‘÷aíò¯ëæSû^»ÿ>šgþÉÿÆèû^»ÿ>šgþÉÿÆêår>ì=¢þUý|ʶ6²[¤Ï3#Oq1š]™Ú `g° 9«TQT’JÈÎRrwaESQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW1âÿ»eþùþ•Ó×1âÿ»eþùþ”«¢©_¥oŽ•¢©_¥oŽ”Ä-Q@éXú·ú–úVÁéXú·ú–úP'áÏù_ýÓÿ µvÕÄøsþF—ÿtÿè-]µ!…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@s/û¶_ïŸé]=s/û¶_ïŸé@º'ú•úVøéX'ú•úVøéLBÑE•«©o¥l•«©o¥r~ÿ‘¥ÿÝ?ú Wm\O‡?äi÷Oþ‚ÕÛRQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW3âÿ»eþùþ•ÓW3âÿ»gþùþ”©¢©_¥oŽ•¢©_¥oŽ”Ä-Q@éXú·ú–úVÁéXú·ú–úP'áÏù_ýÓÿ µvÕÄøsþF—ÿtÿè-]µ!…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@s>/û¶ïŸé]5s>/û¶ïŸé@š'ú•úVøéX'ú•úVøéLBÑE•«©o¥l•«©o¥r~ÿ‘¥ÿÝ?ú Wm\O‡?äi÷Oþ‚ÕÛRQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW3âÿ»gþùþ•ÓW3âÿ»gþùþ”©¢©_¥oŽ•¢©_¥oŽ”Ä-Q@éXú·ú–úVÁéXú·ú–úP'áÏù_ýÓÿ µvÕÄøsþF—ÿtÿè-]µ!…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@s>/û¶ïŸé]5s>/û¶ïŸé@š'ú•úVøéX'ú•úVøéLBÑE•«©o¥l•«©o¥r~ÿ‘¥ÿÝ?ú Wm\O‡?äi÷Oþ‚ÕÛRQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW3âÿ»gþùþ•ÓW3âÿ»gþùþ”©¢©_¥oŽ•¢©_¥oŽ”Ä-Q@éXú·ú–úVÁéXú·ú–úP'áÏù_ýÓÿ µvÕÄøsþF—ÿtÿè-]µ!…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@s>/û–ïŸé]5s>/û–ïŸé@š'ú•úVøéX'ú•úVøéLBÑE•«©o¥l•«©o¥r~ÿ‘¥ÿÝ?ú Wm\O‡?äi÷Oþ‚ÕÛRQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW3âÿ¹gþùþ•ÓW3âï¹gþùþ”©¢©_¥oŽ•¢©_¥oŽ”Ä-Q@éXú·ú–úVÁéXú·ú–úP'áÏù_ýÓÿ µvÕÄøsþF—ÿtÿè-]µ!…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@s>.û–ïŸé]5s>.û–ïé@š'ú•úVøéX'ú•úVøéLBÑE•«©o¥l•«©o¥r~ÿ‘¥ÿÝ?ú Wm\O‡?äi÷Oþ‚ÕÛRQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW3âï¹iþñþ•ÓW3âï¹iþñþ”©¢©_¥oŽ•¢©_¥oŽ”Ä-Q@éXú·ú–úVÁéXú·ú–úP'áÏù_ýÓÿ µvÕÄøsþF—ÿtÿè-]µ!…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@s>.û–Ÿïé]5s^.û–Ÿïé@z'ú•úVøéX'ú•úVøéLBÑE•«©o¥l•«©o¥r~ÿ‘¥ÿÝ?ú Wm\O‡?äi÷Oþ‚ÕÛRQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW5âï¹iþñþ•Ò×5âï¹iþñþb€4ôOõ+ô­ñÒ°4Oõ+ô­ñÒ˜…¢Š(=+VÿRßJØ=+VÿRßJäü9ÿ#Kÿºô®Ú¸ŸÈÒÿîŸý«¶¤0¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(®kÅßrÓýãüÅtµÍx»îZ¼˜  =ýJý+|t¬ ýJý+|t¦!h¢ŠJÇÕ¿Ô·Ò¶JÇÕ¿Ô·Ò€9?ÈÒÿîŸý«¶®'ßò4¿û§ÿAjí© (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+šñwÜ´ÿxÿ1]-s^.û–Ÿïæ(ODÿR¿Jß+DÿR¿Jß)ˆZ(¢€Ò±õoõ-ô­ƒÒ±õoõ-ô 7GRÚåÞ$1)”Ë<†Pß"´ÿ²äÿ¡®OûèÿñuKÃŇˆ®UX®èÀ$zì|©?çáÿï•ÿ Êt£7ï~¦ô«Ô¤­É?Ìæÿ²äÿ¡®OûèÿñteÉÿC\Ÿ÷Ñÿâë¤ò¤ÿŸ‡ÿ¾Wü(ò¤ÿŸ‡ÿ¾Wü*>­O·âÿÌÓëµ»¯¹‘ÍÿeÉÿC\Ÿ÷ÑÿâèþË“þ†¹?ï£ÿÅ×IåIÿ?ÿ|¯øQåIÿ?ÿ|¯øQõj}¿þaõÚÝ×Ü¿Èæÿ²äÿ¡®OûèÿñteÉÿC\Ÿ÷Ñÿâë¤ò¤ÿŸ‡ÿ¾Wü(ò¤ÿŸ‡ÿ¾Wü(úµ>ß‹ÿ0úínëî_äsÙrÐ×'ýôøº?²äÿ¡®OûèÿñuÒyRÏÃÿß+þyRÏÃÿß+þ}ZŸoÅÿ˜}v·u÷/ò9¿ì¹?èk“þú?ü]ÙrÐ×'ýôøºé<©?çáÿï•ÿ <©?çáÿï•ÿ >­O·âÿÌ>»[ºû—ùßö\Ÿô5Éÿ}þ.ì¹?èk“þú?ü]t…Y?Þ»e°A ì=ªZ>­O·âÿÌ>»[ºû—ù·ö\Ÿô5Éÿ}þ.ì¹?èk“þú?ü]u4Qõj}¿þaõÚÝ×Ü¿È忲äÿ¡®OûèÿñteÉÿC\Ÿ÷Ñÿâë©¢«Síø¿ó®Öî¾åþG-ý—'ý rßGÿ‹£û.Oúäÿ¾ÿ]M}ZŸoÅÿ˜}v·u÷/ò9oì¹?èk“þú?ü]ÙrÐ×'ýôøºêh£êÔû~/üÃëµ»¯¹‘ËeÉÿC\Ÿ÷ÑÿâèþË“þ†¹?ï£ÿÅ×SEV§Ûñæ]­Ý}ËüŽ[û.Oúäÿ¾ÿGö\Ÿô5Éÿ}þ.ºš(úµ>ß‹ÿ0úínëî_ärßÙrÐ×'ýôøº?²äÿ¡®OûèÿñuÔÑGÕ©öü_ù‡×kw_rÿ#–þË“þ†¹?ï£ÿÅÑý—'ý rßGÿ‹®¦Š>­O·âÿÌ>»[ºû—ù·ö\Ÿô5Éÿ}þ.ì¹?èk“þú?ü]u4Qõj}¿þaõÚÝ×Ü¿È忲äÿ¡®OûèÿñteÉÿC\Ÿ÷Ñÿâë©¢«Síø¿ó®Öî¾åþG-ý—'ý rßGÿ‹£û.Oúäÿ¾ÿ]M}ZŸoÅÿ˜}v·u÷/ò9oì¹?èk“þú?ü]ÙrÐ×'ýôøºêh£êÔû~/üÃëµ»¯¹‘ËeÉÿC\Ÿ÷ÑÿâèþË“þ†¹?ï£ÿÅ×SEV§Ûñæ]­Ý}ËüŽ[û.Oúäÿ¾ÿGö\Ÿô5Éÿ}þ.ºš(úµ>ß‹ÿ0úínëî_ärßÙrÐ×'ýôøºÞ·º´†Ú(žþ))rã,@ëÖ­ÑW Q†±ýLêשUZoðKò ûu—üýÃÿ}Š>Ýeÿ?pÿßb§¢´1 ûu—üýÃÿ}Š>Ýeÿ?pÿßb§¢€ ûu—üýÃÿ}Š>Ýeÿ?pÿßb§¢€ ûu—üýÃÿ}Š>Ýeÿ?pÿßb§¢€ ûu—üýÃÿ}Š>Ýeÿ?pÿßb§¢€ ûu—üýÃÿ}Š>Ýeÿ?pÿßb§¢€ ûu—üýÃÿ}Š>Ýeÿ?pÿßb§¢€ ûu—üýÃÿ}Š>Ýeÿ?pÿßb§¢€ ûu—üýÃÿ}Š>Ýeÿ?pÿßb§¢€ ûu—üýÃÿ}Š>Ýeÿ?pÿßb§¢€ ûu—üýÃÿ}Š>Ýeÿ?pÿßb§¢€ ûu—üýÃÿ}Š>Ýeÿ?pÿßb§¢€ ûu—üýÃÿ}Š>Ýeÿ?pÿßb§¢€ ûu—üýÃÿ}Š>Ýeÿ?pÿßb§¢€ ûu—üýÃÿ}Š>Ýeÿ?pÿßb§¢€ ûu—üýÃÿ}Š>Ýeÿ?pÿßb§¢€ ûu—üýÃÿ}Š>Ýeÿ?pÿßb§¢€ ûu—üýÃÿ}Š>Ýeÿ?pÿßb§¢€ ûu—üýÃÿ}Š>Ýeÿ?pÿßb§¢€ ûu—üýÃÿ}Š>Ýeÿ?pÿßb§¢€ ûu—üýÃÿ}Š>Ýeÿ?pÿßb§¢€ ûu—üýÃÿ}ŠçüS"O ¼ºÈˆûK)ÈÉíúWOX^+ÿ\_õð¿ÈнýJý+|t¬ ýJý+|t¦!h¢ŠJÇÕ¿Ô·Ò¶JÇÕ¿Ô·Ò€9?ÈÉ?û£ú×A­k©¤**À×1RÈ­ˆX.â{rxõüëŸð÷üŒ“ÿº?­h랺¹Žòk;Ûƒ-ËÆZG· GBËã=~´º¡wUÖ.ô¿2vÓwØÄW|Þx ƒ•LsŒ÷"´®e–+f’Þ<£îÆ.Ò°¯cÔdÕO§\ÞÙ[*¶I‰dîî †1ž}+BòëT·ßdÓó2*‹beSæ98ÈÆßsÎ(èJŸð‘¼0Þ‹»Õ«FžTr‡dá0ØúäqW4ýN[›Éì®íEµÔ*²Y<ÅelàƒÜÒ¨ZÙ“¤]ZÜè×RÃÉçM{‡õÊ¿`wã&ƒ¤Miwwr¯Ϊ‰Ü4̈¹êÌO$žƒLD¬ÝÜ]\E¦i¢ê;wòä–IÄJ\uUàç…Z½ìzŒv6ÚtrÌm¾ÐþeÎÀ¼ãtæª,®’5 k[»†âI&†X¦DhËòC#¡î3TçÒ.ÞîÂ{í#ûSfž°ÈHÉç$üäg¿"’þ¾çú¿õÔܵ֒ëA“T²ÒBÑ–”È Áj–›âtï¶ês"+²*,v“)†vÙ/õQŠ[-.ö ^Ù¼ad•eò-Ä›„JÀíMÇÓò©.tû©,4H–,½´ð¼ÃpùB©¿?…>¿wütûÿà§×´ëh¢’YDª]WÉrÛGRT î@§\ëšm¢DòÜ‚&O1<´i OïaAãߥekUËëŸoŽÞææ-Ä,–×fR 9ûÊ9õªÓè3[]ÛÏmevößdX ÷Æ)" “ÉÜ}{Rþ¿1@–9â·š'WØ2²œ‚ ¶ RÔ|A¦éW ¹Ýe)æmH^L.q¸íëSÙÛGgaeoFŒ€#-¸¯ÊÜg½Skƒâ¹/|¿ôf°‡Ü9}äãzP÷ÐÚÌ?Ú >ÕllźÈV-·'æÏÝÛŽÝiÚˆ4ÍRo&Òáš]ž`G‰ã,¾ª q\´=þŸ£Ì÷Pyk‚Öîw©Ã‚ÇNý*ö“£©O¡\ͧ›K{ r|Æ•XÌY€¡O¿8íÅ;/ëçþBþ¿þf”ZíâjÖÖZ†—öUºäºÜ Ê2C8ãКѷÔìî´Á¨Ã8kM…ü £98<ö5…£®¦Ú«Þêz5Ⱥ”²,¦hLpGœ…Pžp2q’}…l¦Õ´9`¾·6rÜÄñÉ9Läu9¤öS<],“·—¥Hð¨ÜÛYŒŠ¸ÝÈ °s´¾ïlñWõfòÞÔ^XiËyh óÚcr#qŸ”`’qÏ8õ‘imâKžÞXÊÎÅßiŒ9\ ¿pgiCéžõ.£§ßÅŸ¤Å§ÜÞið(›É–430à+naòñ“޹Ö@^e¹¼I,z^œ×’Éj·n¯(‹dg èrÇž=ºÒ^x®(4›=BÚÊâæ; ŒV0Ìæn€äô?Σ¸‡TµÕŽ©e¥™¾Óf°=¹™¡u$®NpGÌAÁ=;ÓfÐn¡ð=¾“\Æa-†$VlŽ:ÓVüWÿZÿ_#GZÔït¸â >;‹x£2Jïr#  N>”ºŽ´¶>:º@Ò/–’˜ì8b8<uª¾$·’þ²ê)·trùÈ‚7äg’cÔf™ªizÇÿ³‹}«PòcWmÀo`W''‡­ Ì}QnóÄúFŸu%µÕÑŽHöù‡Ér©»¦æhϹ©-|A¥ÞGrðÜœ['™(’'B«‚wa€$py©h××ø¡c·Üo¢mþuùȼsëŠ]fÆågÔ¯Zø,q޽*[·õä4¯o뱯§øƒLÕ'òm.KK³xI"xË/¨ G¸¢ßÄ:UÕð³†ì4IJ¯ÈÁ\¯P¬FÖ#ØšÃÒíµVMy¬M•½•±ýëJ¬e-P)àw縨´Oe-•µöŸxæÍ‰Žëû@´€Â2ùƒŒmã&©«;ÕÍiüOe6q>Ÿr™ˆ¯ïg·—ÊåÂðBüÞœf®Ýëš}ÚZÝLñÈå@c ìÉè ãhϹ¬OìmCþüzgÙÿÓ\ǽ{J®qÓÞªxƒHÖµ «èü‹Ëˆä’3jÑ]ªC ¤‡Œ°ÉÈ'8=¨ëaŸ}=Æ»«ÚÈÀÅlÑ€7&Oך®ÚííÍåÌ:N”/"¶s³Ip"R㪯8üI§ÙÝ[x“VžHÑ®„O¡‡U]¥Hëžþ•JÒ-[A¸½‚ -¯í'¸{ˆ¤ŠtFBç%X1yâ—ù£wâ-3O•`½¸ϰ<ˆœD÷™A =Î*Ž©¬][j7ñA"ùPéMuÊÏ–ÁÏqÀª×6z¼êâ 1nWUE!ŒÊ-å„*ùäŒü¹ïM—Ã÷ñKäD‚hŸF6bàmgƒÎ{f‡·õÙ_z5á!²²Óì¤Ô.žxR©9Æ[ =zT×^ ÒìÒ–ëp¸O2! 4¥×ûÀ 'õÍI¢jBâÎöK É3`–ÒÛÚßù2FÈO9”çÖ§ki<;z—V¶*öÇOX tíö’z¹å~nH=©É«·ëú“Ù]¹|K¤Coo;]æ;ˆüØü¸ÉOï =È­8fŠâæ…ÖH¤PÈêr„Wžéz-é±Òµµ»¹†M9!h­oM»¡°?yC) ë]f“2Z]G¢AdÐÃmf’’eÞc,H}zsEº]A>¿×Bͦ§ö­cP°òvýŒFwîÎýàž˜ã¦_x‡JÓn~ÏwtP¡˜fBÄ{œV`¦â]Vê-{È.„;)¢_º¤†`{ÔWVzµ½Æ°-´Átšª©Ó"ù-°!Wò3òç½'äWS^ÿÄ:^™2ÅupÁÚ?4áy0ŸÞ;AÀ÷4]ø‡K³HK ßhO2!4…—ûØPN=úU?F¹²Õá,<È"Ò’×ÍÈù[Ó¯JÍÒ4½_C[+‘§¦6 k4)2+ÄÊÌA¤ÝjõøÿÀûÉþ¿/ø&ž—âH†´ýCSœ,·@í fs“÷UA'ØUé-Q1[Ï%º¬²ëúXUÁ¦ÆzÓ8îiîÿ®ÿå¨tþ»Ÿ©Ùê°4Ösyˆ¬Q²¥YXv*@ ýE[¬.ÊâÛXÖg–=±\ÏÄrà#PNNAëZÔ†QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE…â¿ùÅÿ]×ùݬ/ÿÈ./úî¿ÈнýJý+|t¬ ýJý+|t¦!h¢ŠJÉÕ17Òµª•ä[Њâô)â)˜ƒ™8÷ö®ÃÎOWÿ¿mþÈj6—vò¼¶’É „`²W9qsâec³Uºê?ÂÏRó“ÕÿïÛ…rz¿ýûoð¯$ûgŠÿè/uú…lñ_ýî¿Oð [ó“ÕÿïÛ…rz¿ýûoð¯$ûgŠÿè/uú…lñ_ýî¿Oð [ó“ÕÿïÛ…rz¿ýûoð¯$ûgŠÿè/uú…lñ_ýî¿Oð [ó“ÕÿïÛ…rz¿ýûoð¯$ûgŠÿè/uú…lñ_ýî¿Oð [ó“ÕÿïÛ…rz¿ýûoð¯$ûgŠÿè/uú…lñ_ýî¿Oð YgWh‚î8|œ£ §Ô{Ôµä?lñ_ýî¿Oð£íž+ÿ ½×éþë’F’ÆÑÈŠñ¸*Êà ƒÔB"ÆŠˆ¡QFT`è+ÈþÙâ¿ú Ý~ŸáGÛÙâ¿ú Ý~ŸáE‚ç®",h¨ŠaUF‚^CöÏÿÐ^ëôÿ >Ùâ¿ú Ý~Ÿá@^¢¼‡íž+ÿ ½×éþ}³Åôºý?ž½EyÛëM ¹_¡#Šò϶x¯þ‚÷_§øQöÏÿÐ^ëôÿ õà€:EyÛÙâ¿ú Ý~Ÿá@½EyÛÙâ¿ú Ý~Ÿá@½EyÛÙâ¿ú Ý~Ÿá@½EyÛÙâ¿ú Ý~Ÿá@½EyÛÙâ¿ú Ý~Ÿá@½EyÛÙâ¿ú Ý~Ÿá@½EyÛ> stream ÿØÿàJFIFÿá°ExifII*JR(i‡Züÿÿ)( üÿÿ)( 0210‘ 0100 ÿÿ g 4ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀ4g"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?÷ú3AªÓÎ#æ€'.4Ì£½pº÷Ä-/GºkWy&¸_½ ¿RHöÎk¾+X“Åïåÿ@±ç¯­zú×’ÂÔ³ÿŸKßÊ?þ.øZ–óé{ùGÿÅÑp=oÏ_Z<õõ¯%ÿ…©gÿ>—Ÿ”ü]ð´ìÿçÒóòÿ‹¢àzמ¾´yëë^Kÿ NÏþ}/?òÿGü-;Oùô¼ÿÈü]Ö¼õõ£Ï_Zò_øZvŸóéyÿÿøº?áiÚÏ¥çþCÿâ踵篭zú×’ÿÂÓ´ÿŸKÏü‡ÿÅÑÿ NÓþ}/?òÿEÀõ¯=}hó×Ö¼—þ§üú^ä?þ.øZvŸóéyÿÿøº.­yëëGž¾µä¿ð´­?çÒóÿ!ÿñtÂÒ´ÿŸKÏü‡ÿÅÒ¸µç¯­zú×’ÿÂÒ´ÿŸKÏü‡ÿÅÑÿ JÓþ}/?òÿEÀõ¯=}hó×Ö¼›þ•§üú^ä?þ.øZVŸóéwÿÿøº.¬ùëëGž¾µäßð´­?çÒïÿ!ÿñtÂÒ´ÿŸK¿Î?þ.‹ë>zúÑ篭y7ü-Oùô»üãÿâèÿ…£iÿ>—œü]Ö|õõ£Ï_ZòoøZ6ŸóéwùÇÿÅÑÿ FÓþ}.ÿ8ÿøº.¬ùëëGž¾µäßð´m?çÒïóÿ‹£þ§üú]þqÿñt\Yó×Ö=}kÉ¿áhÚÏ¥ßçÿGü-_ùô»üãÿâ踳篭zúדÂѵÿŸK¿Î?þ.—þ…¯üú]þqñt\Xó×Ö=}kÉÿáhZÿÏ¥ßçÿGü- _ùô»üâÿâ踱篭zúדÿÂеÿŸK¯Î/þ.øZ¿óéuÿ}EÿÅÑp=cÏ_Z<õõ¯'ÿ…¡kÿ>·_÷Ô_ü]ð´-çÒëþú‹ÿ‹¢àzÇž¾´yëë^Oÿ B×þ}.¿8¿øº?áhZÿÏ¥ßçÿEÀõ=}hó×Ö¼Ÿþ…¯üú]þqñtÂеÿŸK¿Î/þ.‹ëzúÑ篭y7ü- _ùô»üãÿâèÿ…£kÿ>—œü]Ö|õõ£Ï_ZòoøZ6ŸóéwùÇÿÅÑÿ FÓþ}.ÿ8ÿøº.¬ùëëGž¾µäßð´m?çÒïóÿ‹£þ§üú]þqÿñt\Yó×Ö=}kÉ¿áhÚÏ¥ßçÿGü-Oùô»üãÿâ踳篭zúדÂÑ´ÿŸK¿Î?þ.øZVŸóéwùÇÿÅÑp=gÏ_Z<õõ¯&ÿ…¥iÿ>—œü]ð´­?çÒïÿ!ÿñt\Yó×Ö=}kÉ¿áiZÏ¥çþCÿâé?áiZÏ¥çþCÿâ踵篭zú×’ÿÂÒ´ÿŸKÏü‡ÿÅÑÿ JÓþ}/?òÿEÀõ¯=}hó×Ö¼—þ•§üú^ä?þ.øZVŸóéyÿÿøº.­yëëGž¾µä¿ð´í?çÒóÿ!ÿñtÂÓ´ÿŸKÏü‡ÿÅÓ¸µç¯­zú×’ÿÂÓ´ÿŸKÏü‡ÿÅÑÿ NÓþ}/?òÿEÀõ¯=}hó×Ö¼—þ§üú^ä?þ.øZvŸóéyÿÿøº.­yëëGž¾µä¿ð´ìÿçÒóÿ!ÿñtÂÓ³ÿŸKÏÊ?þ.‹ë^zúÑ篭y/ü-K?ùô¼ü£ÿâé?ájYÿÏ¥ïåÿEÀõ¿=}hó—Ö¼“þ¥Ÿüú^þQÿñtáñVÈu³½ü£ÿâ踶$½8kÌ,>)iSN±Ì—6àœo•Whÿ¾X× Z^¤è¬ŒXdr  )äQ@ç \î³yäÆÇ5ÐL~C\?‰å+ó@%ÃÜHóÊŤ‘‹±=ÉäÓwT*ß(úRî©.ê»6—¨[épjrÚºYNÛb˜‘†<öÎGCÔUm:ÎMOR¶±‡ïÏ ŒLžOà9¯N¹:V±.§áÛ]XJßgXml¾ÎÊ!’yx<ç>ÔžŠàµv<æÓL¿¾·¸¸µ´’X-¼Ò @O'>ßj§ººŸ ^ݶ™¯XÉ<¿f‹K–~UcŒœzõ®oNm;íCûSíŸeÚsöMžf{}î1O¨t#±  ’N$šÖ¾ðί§%›\Z0{Dxmf8Ù+{~µRÝÕ|GnÚ"M&Û„6©u·{0#±òõý+·Ôôæìµ›Ëk­.õµ(Uí%¹ó#˜–dàŽ}±šØOKœ\z6§.§6š–„Þ@ Iôù@ëÎpzކ¥èz®¶®ÚmŒ— œ3ª úeˆö¯A¶½Òäñö¯må_,2ï¼ûS¶ÿ”g÷d`gʹÛ[;ŸxLÓôgG¸´•ÍÕ¯š›$•~HÈç¥$î¯äŠk[y³œ}'QTM2K9õØ*ÂØ‰é‚N1ïœRǤjRêçIKG7ኘ2 ‚O9Æ1ß8®ê6Fñ„ôénæþÆR#nÁØHR{‘ƒùûÑeâM6Kë=Q?¶ï'ŠÂhÆ>Trø÷]£?áMtþ¼Ÿùu‡†u½PNl´ö›È”Ã/ïc]®:™‡éU¥ÒoàÖIš.õcòË‚ØÇ*Hî+Ð-tïµéÞ&µGö§üN…¯Ú<Œô9ÝíXZ>šÚ'ˆ5=RëMi–æxíLÂP®ã»²sži'ÕÿZ\mvþµ±Ê_ÀtíB{)¥…åÌlcbT‘×þ• ²éM¨ù°yK0„Ædýá8ÎBú{סøpëøgA’ÌFöÒÜÌÚ‘”&?0äÜúô¬Ø†•ý…r Oì¯øHÔuù|¬üw¥4µ³þµ_æ/5çúÿ‘Áyªsó:óSZD÷×pÛ[áåšExÉ8èwŸð’'ŠìåšÂÝ*;—6FЪ•ÚpTõÈ^yî*[»I,|E7ˆ/¯$¹eŠuŒI‘¶Ï”žO4®·ag²8[í}> ©e¹³qmsögXå%‹ã$€@$™ö¬¿9?¾¿v¾c?…mÚS½¤ñ%Éçq!sšè/5ýF(5IÖTóm5tµ‰ŒK•ˆ‘”éÓ߯½4žß×Oómÿ®¿äyY’@´ 2#Ú½a[_x®= [Ŭ)ŒÙ‡Ø0M›¸ŸåX?÷¯ˆ­Ì»|汈ÈF9o›'Š›èŸqÛVcéz6§­Hé¦Ù½ÁŒø*¡sÓ%ˆ-¿‡u›­BâÂ7vãt±3¢¹bü \ð‡Ÿ^¸¹‘ü×´µ òAÓ·;Pd€:OOÆ·?êÞ"ñN¡u¬ÚIÄ©+ÙÃ"–r#@sá<“ùgtŠ»¶¸°º’Öî†xΨ§êv¥^µ¬óÛÈêo‚Mèr3׊Ùñ.›®ÞÞjz¾¥i©‹Ëß™IUo•Á9é]¼ÃPþÛñCi h‹kAùr~÷=it¸í©ä¾`Ær1ëIæ¡Ü1ëšô¶[5ñÜ,×ZþÊÎß,^ÿ-Ø¤ÔÆ¿öÿ 4fÙµ¦µŸÍi¶=3’8ééþ4_Ÿù úü¿Ìó}Ôø’IæHaF’W`¨Š2Xž€SôöÓþÙÿ_µý›?cÙ¿wo½Æ)¯5¨í´ƒp#–eKsr@€ àséM-R¥Ëš‡‡u%!{í>HVf VAò“ƒõÅI{á}wO­9“ÍEÆåœôV&ºMkEÕ´k-*ÂÁ¥´Ží'–êi ‰É nʯnúæ?G&mˆ/tø4Ï‹ÀËOæ ×,WqÀúæ)]~?äþ¾óš“Ãú¼z„6bâêe-B äîo9çŠÌ'Ž8ペô;¤ºÓìmnÒ+ µ4•-ã¶á£€å˜‚Äá¤až1Ò¸ßi°i„P[´ÀIJñNA’9Ê6021žƒ­hǧC;uª-Ôn D»¨ÝQn£uKºÕê7P»¨ÝQn£uKºÕê7P»¨ÝQn£uKºÕê7P»¨ÝQn£uKºÕê7P»¨ÝQn£uKºÕê7P»¨ÝQn£uKºÕê7P»¨ÝQn£uKº•I¥H¢Rò9¨ïPDË º”!~¼LÐ’ønsZú%“û¡ ŸÿZ±®¢žÎv†pמ9zƒé]–rK-Ì@v"HÿÇ«3V¸ŽKÛBØ;_ýÝÃü Ki \Ï’k„·Ü2¦æüzb©ê:}Μëæ2¼mÂȽ ô>†µ%’ oç‡Í5 L&LrÙìqÔU[©Pi Ý ÊJ)]¸ùÉéیФh7z¬fc2[ÁœuÉcì*}SÃw:u»\Gp—P§/µv²\dñøÕÛy|ÝÞ8‹Ô.×ÛµÇRO±É=~†¦·™­ ˜ÞÇ“$…²®1ØvãÏ©óe‹š“í{Xúe”]4ží^ýKu{7ÃFI|ö(r *+3˜…B&Ÿîà¼Uþ©ë½Ÿîà¼Uþ©èÀp(ÝL¦ù‘ƒ‚ëùÔŒ”œŒhÈ#ô©RÂí÷bÚ_–<î]¿»þ÷=G=EW ä£¥©”„€2HÞ€$Ýš³w¨Ý_%ºÝLd[x„1 mAÛÏãÍR,d©©$†Xvy±<{Ô:ïR7)èFzƒë@ Æ1JRAêúÓ( äcô£w¦Rd½?å=T~U¡±q…6‘D¶óL&‘ÂìG@NqŽøÇZÌ$ dŽzRЕα=Þe¥È‘ylí wÇ''8ýPÈÎqÍ:æÚ{;‡·¹ŒÅ227QQQæ¾_îÊ´"Ö.!ЦÒ#H–Þi„Ò8S½ˆsŒwÆ:Ömü‚r@¤ãÐSh  ='WþÉyiú}àpÛØ<À¸î9«§Å—2ê7·š~™},ÁT-Õ¾õ‰W8û×?Ehjš’ê“G'ö}…žÅÛ²Î-[ÜŒžjŽû£ò¦Ñ@;OP _îÊ›EZ°»±] kkƒ$EqøÛŒr23Z—>,Ônÿµ|ñL"Ìv´'Ý ÏŽkŠ7ö™¨ÿf]yâÎÎèm+å]Åæ'=ñ‘ÍM¬ë—ZäÑ=ÊAp§—G²8×Рˢ€ºÙ4Ê(ØQü#ò¥€¥2Š~G<zЊeýÔn¦Q@ÝFêeýÔn¦Q@ÝFêeýÔn¦Q@ÝFêeýÔn¦Q@ÝFêeýÔn¦Q@ÝFêeýÔn¦Q@ÝFêeýÔn¦Q@ÝFêeýÔ¡È ‚Atj…Æñõ#šˆÌ’Å™R{Õz(äwÒÄ»Q²£ aœ~´Ö¹28i±aUh  5¶$ÂÌê¤dÖ‹R{¥ÚíòÿuFgÑYûn\öÔÙbk*~ÍIòöº½Oá¹ÎûíüëÊkÕ~È6?÷ÛùÖ¨Äö;/õCéE_ê‡ÒŠb'Ÿîà¼Uþ©ë½Ÿîà¼Uþ©èçÚíµ]NK]K‚=rúÔ¶™ú,Pæ7Îî­¼c=Êâj{›Éï>|›ü˜„1ðÔSRõVþºhïýt:¸íã·[ÿŸÃáÛ|ŒÜ’¹ÆIÀöS%Ò4++"¼žÙ&šÉgóŒ³ùÂF]ÊùesÉÏS‘\úkZ„s$«qó¥¿Ù†QH1cHÆÇ­8kš€Óʼn™Ü)EBŽÊ§¨V ²¡¤ÕïýuæÒ×þ´_ägU½2úM3S¶¾‹—‚@øõÁä~#Š©ERvwWÐëæ³A“YÔ¡¸•:{c¨˜nÈÿv<©¥‹E²¸»…î÷0hñÝ2Í4›Y¸$ne_›8QÛµsWíÝ­œó³ÛÚ†¡äÉÉúþ5$zÖ£ Ô1Ü²Ë B`£î¤cc×9©·õò«¸ïÕÿZ¯ò6¤Ó4[Çž-<Å%ÓX´¨–òJɨÙ!w€X‚ M¨xwN²Žk•žÞÞĤ‡{cí„g¿©ÝŽ˜1XÛwãS‡RIR;¨qå¼P¢Çû*î{Toª^Éa%‹Ü3[I7Ú9“Ýž´?ëúùþ?¯ëîüYN·|ƒâí?'sdÿÀ°ª{;Ë>î;«Y<¹£ÎÖÀ8ÈÇCÇCLLè¬-ôØô=wìZ„÷Teµ<äç;Û56·¤è:j_Y í–îÙ@‰ÖYšiêWËŒ‘´ñÇ&¹x.綆â(Ÿj\ ŽQ€w(!±íÈ*Õι¨ÞY‹[™’XÀ ¹¢BøünÇãC:M^ ªøŽþòÍnÚÝàXãy]æà“°ƒÛÖ¹ývÊÚÒ{Imã‚îÙ.'mÆ=ÙsÜqOb*å§Š®¡´Ô ²y—· $ l¥PŸ¼Á8#’ ¬kÛëFé®nå2ÌØp°¥n€W¢Š)€QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEWªü6ÿlï·ó¯*¯Uøkÿ ØÿßoçMìv_ê‡ÒŠ,¿Õ¥ÄO?Ü5Áx«ýS×{?Ü5Áx«ýSП…Š'ƒü?›S)–Ö%,Nß“«ÛŒ~"·¼˜çŒ_÷À®KJ†Y<-àÓnâ19U'hò\dú ?Ï´ðÌ ieæé$;éR4Ù„ƒç»IãïòØ=zÔßúù\}mýnw¾L?óÆ/ûàR¡&±þà®]LiÒÍ«ÙÜNÇIŒ[9…œC6y?ÜlíùŽ:u®ú#¶Ý3Ô ÈïÒ©«\IìP´Õô‹Ö™`(Z$ó=¹C³ûÃrÃÜdRE¬iSY=âÆâ w=Œ‰»wM  -ŸlÖ^pšŒ×·×ö×é<4k³•<¨s÷Cœõ8>Ã¥2Êö÷M°ÔÖßQ¹³…c[8îmÜI¸ä0Û·yAòœ‘ž¸Í!šßÛ:9±‹µ¢2ð¶¬_xê¥îc¦*Ìw6sé¿nµ….b(]Q©göãŸcXKw& –²Žök»›‚&ì&]†ZO/ní  : õ¢þ[[O\Ù[Åv"63‘$Ð2rÎýÀÌI#ŽyÅ`Z´tË, ùŒŒàÆ2)|˜çŒ_÷À®h}SQX,g}UnmþÏr¶"8ÉÌc9óž†Ão¯Ø››IWTþÑ¥¹hŽ-’N…q·åÏéLIés³»–ÎÆÙ®.#c\dˆwNIúU?íØ‹ÅÚÑ x[V/¼uRw1Ó·ÃÂ85[;IæicWŠ,³|ØÆBäàg'â²–îM;A-eì×w7M;ØL » ´ž^ÝÛ@ tëK¸ÍI5&;Hnö4¶ó)t’ '”`uÎÕ;S_]Ñ#[wvEK„WG6Í´+p¥ŽÜ.ÚÅRžÕ_ÃvZm„WFÞâe†V–G䙃Fì’Þ§kÓ‰.áÒå·»]?`’w‚ÒYD˜µÊ_éåµDǧܾ©%Ô kx `B fó1´#<ôÅ:;Q´ŸQÒ帷[‹Ðµ2ìf˜26Üáº{к;O&ùãýð(òaÿž1ß±5†{]jÆøÛÜKÛÍ ˜!iJ³l#* œ|§œW:4IfÒ§Óåk›}lÆ#¾9†ó„=Cgož”¿¯Ìgs8Š y%‹)E-²8Ô³c°ÏzzÅ (>Dc#81ŒŠáõ[I~ש{ n纵”I$–Näà—e$´s“LÔâŽ+÷7¶s=ëÞÚ KƒeHóT7D9ß‘Á9ïMoa_Kç“üñ‹þøy0ÿÏ¿ï\}¾“,v÷°Y¼W²jW"Y„d1ˆù›Kë÷1ž:U /IÔ–ÊïÊi`Ô¾Ã$r ²’,§1™œ«¶s‚={R[ªÜZ¶©%€·O5!Y‹yk· HÊjX<©Ñ˜Ùˆ°ì¸’5àã#Q\ï‡-m¢×.f±Ó'²·6‘# mÚ,ȳÔ|ÇdŒýj¬:(½¿‚+ý=¥·_¾%ˆ•¥R‡ž„Œ*‚þ¿«Y,ÞòKEHŒñ¢ÈËå‰çþùTÞL?óÆ/ûàW¥Ú:_XϨéóItúlÁ<–Ìæ)T¾í̓°ò98ªzf—©GcxÑ4°jBÆHåQe$&YN>c39Wlçzö gäÃÿò‰Hç–°­Ê¥Å½—”¯‘£¹9àòvœujú@ãþ4ú‚-G{¦M¨É§ÄÖïuo’5@JŒãž0>j;íSIÓ§HnÚ(äq»Nà£8ËQž2p*lbñc\%»M‘Õ8/¿8Ï­cj¦âvÔ¤N¼qªéé È9GùÁWþçß'Ž´º/ë¸úµýt7åÕt˜oÅ”†19eOõ¨fûªX  žÀœšžâçOµº¶¶ŸÉI®˜¬*c9$tô®NæÊñ5—Qáswlë ÂZÞuP Èux5©â2}OU³X‘ƒCo4‘M´íICFS'êášjK¨éPOu ’Ö>eò³±9äà{:Ól5M/R•¢¶UóUC˜å¶h›iè@uq\̺N¡êMlïy}¥Ü4þZ–RFØÁp¼\S´û‰¬oŸSœêWVÖú{ d»µòZ<BF ¦ìóž;h^ÖÿäËúÛüΪòâÎÂ5’kvec´y6)ü‘IZe¥ö›{§›øD_f‰y!Ù¤ƒÀŒfµ-ÈÐîÊ9 ̈0«–RÄ àzg?…TÕ¬öø~]ÆÞR^ÍÒ"ä@Kv'?4>£ZØš-oEšÒk¥xÄP•ºÜ« ßw W'=°9íVì®,u ÖÉ(b¬Œ¬:‚¬ØŠçZÕ./oçµÔ-­–ÞÝm» ¼Ôvlª`“‚@Î<öªgJÕ%ÓdtK©Ýß­§˜(kut›FÑ•R1âµGM¨êÚ^”OÛ"‘Wqt±‘ÐvT ~u=åÞŸ§Û-ÅÊÆˆÄ*æbz O°»]ZèV)c=½ª±–â9ü¦1Â±ï— ç¾3SêóH×ÖWKivñi÷gÍ bÁ¢a¹å€,:{úPô̺֋´ãhç£òíË’Þ%UIw$qÞ´c[i¢IcŽÀee@A¡ÇáÓVí!Ô¡Ôf’å­ã¶ŒGÜMÊUÝ<àŽjæ­gýà;[+…3~˪«»~$@ÀùçŠt7okeg=ÔÑD#…Fù@3Kl#žÖ)^Ö8ÙÐ1BŠJäté\|Py’¾›mk-®x†(%ŒÇˆÑCJBUIc©õ©5- .õ û™tã,§Q¶ !ˆ’aÛptûÙíÖëúûÿ;&ùãýð(òaÿž1ß¹£ïXI`Ía°äBñ‹Êb8Šg“üñ‹þøy0ÿÏ¿ïO¢€äÃÿ•M.¼!(›Sv‚H§ ò=Y|ãÈÜ[¿4Íÿû/á¼ØÉ‚ÑG©çóÅ6ãKƒMðæ%Æ£ͬÂàÜL»ÖI˜Û†A9ÜÝzSz6-Ò6?á"Ò¾À/~Õ˜LžW±}ÿÝÙÙöÆjÖŸ¨Új–¿h²˜Kâ¤à‚ê<ƒìk‘²Õ¦Ñt½KY¿ò÷êжÁÐÀò… CQNÒy9À÷­] ÷J²± ºœ7s^]âY¡ù•çqœ3´`qžÂ„‚çGXúž«¢%ÊYj{ƒ©u»4jÇî’ÛJƒÏ5±\wŒïíeìãÔÁ»ˆ©þÌ »í-BìcZ]Púõþ›¢§Ú.¤Šßí*î ÌŽpA’pà* áhrû˜m-¥¸q˜B7ÈÌzd šæ¼Wmªùw—ÓYÛIîc·crCB»Ð‘·a-Ôç œ§Šmµ&îúæÎÑãýÌp‘tÙ„oBÀ.ÎIn§#€8â…ÐG]e¨Gswyd"1KhÊ¥9B2¬=#ð5z¹ûRòxÚv*ªË¦Ä'Ul€åØœ ñ»µttP¢Š(¢Š(Ö«cgwmiqr‰qrÛb‹«1úÞý(ÔuK-&–úáaGqdY@äÖOˆ­á]GDbŒLúŒjÒ˜|k#ÅÖº ײZÚÍaŽÝÍÉ ïR~]„e›©Ï@=9ëþ@ÿOó:;ÿišd’¥Ü—ù\»‹IYü)­iâ[=œ,Aw–n\g'=+ UߨëF•2ª¡òæ5l‚W8Øœí­mRÖÝ&îÚâC2ÂÈî6©š×½Šö^ Òõ ·ºÆžkyˆÑüŸÞ€ÊûŽ)tý{MÕ'0Ú\&ð­&åé¹w¸{ŒŠä#7zÌ×Hõ[+2hCÛÛ´"v`>@wÇ É^MᙼÍwOUÔ—UØ2Xö›NWƒŽ¥ºsÏËõ¦–¿×Ÿù ú^_æwuGQÕìt¡¼•ÉŠ‘´ŒqÔáA8µz°üI¯&¼"h!¹»b‘ËpÛcŒ–võÇw$RcE‰¼E¥Agov×{Ḣ1Fҩ‚xïÇ%¬N ñjöÖö“I"å.„J\ŽŸ{ö¬ 5­7@ðþŸg¦_Ú¿Ú GÔÒ,ËÈÇ¿' êH¹áø¬`Ñ-âÓ®VæÙe`ÛÛ$±È÷&ŸqtQE!…Q@6HÒXÚ9]Êà B)ÔP{K =>3•¤Ñ“’°ÆëV(¢€UQvª…€b–Š(¢Š(¢Š(Uj¨Qè)h¢€ (¢€jïß´nÆ3ŽqKEQEQER2«©VPÊz‚2)h Š( Š( Š(  º†£i¥Úý¦öa ;•7HÉ8)šæŸiGQxÄRÌ‘ÆwŸ—œŒç¶3Y^.‚;È4»9¼ßÅw‘ÉªÝ¶Û [ÛYa3£}¦a•;‘²9#= IâVÓ¾Ñâí¢¿kXöh›8Ûåõ¶wç8掗¶=³îõxlb½šæˆâ´ L…8“=zóÇÖ¸»­>ÖîÞOk«K8^Þlñ0‡vTöäRê'í$2á¼Ï°–Ï|„ÍW.­ ;Ù÷;K]Mîd…M¾·2†9™ Œ}â¬qœñô5~¸½nÇû;RµƒE¶KyFŸxФ(çÂcw¨ïÃöž¸}*ÞÚâá£/PÅ€,i‡Þ8É'éSý~`vW×ÐiÖsrÅbRªHäêE:[Ÿ.î<‰ŸÍ ûÅ\¢`ížÕç¬rxÄp[½­Í”rÛÈ’RûT–ì9æ·‘´ÆÖ´ìO³}”-Öß ›¶®zS·õò°¢¼çMû.í#ìÞgü$ŸjoÎï3nO™æ³ŽºbŸ-•ºYêZºDP‡ZÚ—‡ æªíϦ ¡+ÿ^Ÿæ Ù^äwWú…¦—h÷W× 9w? õ>¦ŠDš$–3”u §AéY^(·†o ê/$Q»Åk+FÌ ”;#Ò£‡û?vŠfê?fo²[pnéǧ_Â’ëýwéýv4T²TLk…ûlˆdX€$íÏaø×'üz‡ýu_ýi¶–Ú­—Š4¶YÚ›‰ÃÍ:]2'00úwôÿ‘ªÿþºýSè#¹²ÿT>”Qeþ¨}(  çû†¸/ªzïgû†¸/ªzÕ²†;Ï [X\ZM,/l¨ÅõÔ1Z©;¤jŸe¹;@eÉ?Z¡f¸Ò,C|´µ‘ˆGdÉ= Ç#׌¯5ÿ L—?è:Íž—uÝÓ þÑý?º1-¥¸ísµûTŸóéqÿ|Qö©?çÒãþø®8øëN}Ù³¿ÎqpG]ßíq÷éýÑ…oiÍ»6wüç8¸#®ïö¸ûÇéÇ÷F<{ŽÇaö©?çÒãþø¨gXîe‚I¬.­ß̈•?+`ŒûðMrã9·fÎûœç :îôn>ñý?º0óã]=Á&ÒønÎqpîïö¸ûÇéÇ÷Fx÷ wÚ¤ÿŸKûâµIÿ>—÷ÅrŸð˜XÉŸôKß›=.XuÝïÇÞ?§÷F'%¶›8²½ù³œ\°ë»Ðÿ´OîŒñîgIö©?çÒãþø£íRÏ¥ÇýñX']…ó›K±»=.˜uÝèxûÇéýчjÏú5Ï9Î.œuÝïÇÞ?§÷Fx÷ 3NÖ$´žæhì2y’³)$œÐÀ«?j“þ}.?ïŠä¯üi§Yj1ØKovÓÍHDw-ò.H瑌îlcû£¦ÕÄw~9±‚=ÿÙÚ”»˜©Xg$Œîçï ˜ý>_îŒ qz&;µIÿ>—÷Åj“þ}.?ïŠóɾ)èé#Ç.™«£ófÁÝþßxþŸÝÅM÷gOÕ~lôŸw·ÇÞ?§÷FÐCûTŸóéqÿ|Qö©?çÒãþø¯=ŠZ1Gs§j¸Î'Ç]Ý>öÓîŒ]²ñþ›©—iú’óƒºàŽNî˜oöÓû£wv3µûTŸóéqÿ|Qö©?çÒãþø®NOÙ}¦h •ñe8b· H'ŽÛ?N?º0Ù¼ibªå¬5s·uÝÓæãïÈtb¬Åtußj“þ}.?ïŠ>Õ'üú\ßæ‡ã„ŃišÂ’H#ÎÆÍŸããï¦÷Fü^ПwüKu~sœMŽ»¿Ûãï§ÝždU™é_j“þ}.?ïŠ>Õ'üú\ßæÏñ{AÁ-§jÀ6s‰±×w£ñ÷ä?º1 ÏÆCúv°D€RluÝŸããïÓû£2VzÚ¤ÿŸKûâµIÿ>—÷ÅyS|oðáÝ3ZÏI@ë»§ÏÇÞ?§÷F7ÇO !!´ÍkæÎvÊ]ßôÓ¼~œtaܱëj“þ}.?ïŠ>Õ'üú\ßä«ñÛÃ3¹Q¦kYlç÷ c;¿é§xþŸÝ´~3øyÃìícœçc®ïöøûÇôþèÀ#Ô>Õ'üú\ß}ªOùô¸ÿ¾+Ìã?‡›9Óµ›=&Ç]ßíñ÷éýщbø¿ \³(°ÕA9Ïï±×w£ñ÷ÓîŒsÒ¾Õ'üú\ß}ªOùô¸ÿ¾+ÏÏÅ ÷fÇSÎq9wµþÑúqýшŸâ¾†dxΟªçœâ|uÏOŸý³ùîŒ)5X✢z/Ú¤ÿŸKûâµIÿ>—÷ÅyÅ·Å­úèÛ¦Ÿª†g “>X°ìü}ãôÀþèÆ³øçN,àÙßòK†wtù¿Ú?LîŒg*ô㤙jŒÞÈì~Õ'üú\ß}ªOùô¸ÿ¾+ÿ„ÛO‘\ýŽû¡$ †wtù¸ûÇéÇ÷F(ÝüLÑíîXê[¤ÝÊÎ@sü\}óÓÐtbV&“ÑH~§c½ûTŸóéqÿ|Qö©?çÒãþø®þ.• 'ìZˆ Ÿùx#®î˜n>ñúqýщO´ÆRÆÎüÎÒë»ý®>ñý?º0}f—ó°©Øí>Õ'üú\ß}ªOùô¸ÿ¾+ŠédÙê6z\×wû_í§Ýiø…¥¾ïô-CæÏK‚:îôn>ñý?º0}jó°©ØíþÕ'üú\ß}ªOùô¸ÿ¾+‰oˆ:[nÍ– 3œâàŽ»¿ÚãïÓû£|AÒÛvlµ»=.ë»§ÍþÑúqýÑ…õª?̧c¶ûTŸóéqÿ|Qö©?çÒãþø®(øÿL}Ù²Ôsœ\×wO›¼OîŒ<øïMpse~7g¥ÁwµÇÞ?N?º0}jó°©Øì¾Õ'üú\ß}ªOùô¸ÿ¾+>8ÓŸwú÷9Î.뻦ý£út`oiÌ6wÜç \0ë»ý®>ñúqýуët˜=…NÇaö©?çÒãþø£íRÏ¥Çýñ\køïMçuøÝœâàŽ»¿Úãï§Ý†ˆšZ/c¨óœ…œŽ»¿ÚãïÓû£Ö¨ÿ0{ ŽãíRÏ¥ÇýñGÚ¤ÿŸKûâ¸øüq§\À%—Ádÿ†œú7xý0?º1#øÊÀç6—¿6z\0ë»ß¼~œtaýjó°©Øë>Õ'üú\ß}ªOùô¸ÿ¾+’>4Óܰ6—£9Î.uÝïÇÞ?þèÓÆ6Íå›k´ÞH,×ETgvNwq÷ä1Ñp,UöƒØÔìuj“þ}.?ïŠ>Õ'üú\ßÈŸiÎ û%÷Íž— :î÷ãï§ÝSã;,>É{Îz\°ë»§ÍÇÞ?§÷FÖ¨ÿ0{ Ž·íRÏ¥ÇýñGÚ¤ÿŸKûâ¹#ã==·fÒ÷œç :î÷ÿhþŸÝSã+, ¥èÎs‹†wtÁÿhý8þèÁõª?̧c¬ûTŸóéqÿ|Qö©?çÒãþø®+þý.F}Žÿ‚AÅÁwtù¿Ú?þ跴›=Cœô¸#®îŸ7ûGòÝ>µGùƒØTìvŸj“þ}.?ïŠ>Õ'üú\߯·4Ö›;ñ»=.ë»Ñ¸ûÇòÝkxûLbÀÙjç8¸#®îŸ7xý8þèÁõª?̧c´ûTŸóéqÿ|Qö©?çÒãþø®,øûL|æÏP³Ÿô‚:îôn>ñúqýѼ{¦6ìÙßóœâàŽ»¿ÚãïÓû£ëT˜=NÇiö©?çÒãþø¬­GLmRGË«-´€,–±í¸îË»žø"°ÇÚcnÍ– 3œâàŽ»¿ÚãïÓû£Þ?Óvlµsœ\×wO›¼~œt`úÍæcS±Ú-Ã"…[9€t¥ûTŸóéqÿ|Wÿ´¢X-C'9ÄäuÝþ×xþCû£ ˆºIÝ›-Gœç‘×wû\}ãôãû£Öi0{ ŽçíRÏ¥ÇýñGÚ¤ÿŸKûâ¸SñI`Oص›=.ë»ý®>ñúqýѾ#é-»6Z9Î.ë»ý®>ñúqýчõŠ_ÌƧcºûTŸóéqÿ|Qö©?çÒãþø®þ$i8$Øê_6~ìäuÝþ×xþŸÝ§sñkB„°’ÃUç9Û6:îéóñ÷ÓîŒ5Z›Ù‹ÙMt=íRÏ¥ÇýñGÚ¤ÿŸKûâ¼Ñþ0èbÚv¯Îs‰±×wû|}ãùîŒQ—㯆U[MÖ»çl uÝÓ÷ŸíÈtcE$ö%Å­ÏYûTŸóéqÿ|Qö©?çÒãþø¯#o>mÙÓ5¾sœJ]ßôÓ¼OîŒ#|zðÃnΙ­óœâP:îÿ¦œ}ãùîŒ2O]7l£&Öp=Ò¹9ñ=áÁu8?îŠÙÓu(õX^âÝ."1Ì€ƒ36rÇ<`ŒaoNWh# ÈÑyþøþB€;{/õCéE_ê‡ÒŠb'Ÿîà¼Uþ©ë½Ÿîà¼Uþ©ènÝâUjÛzYJ3·§+ßÞ£§CŒ!Ód„â)@ô5ëÖëÿ«VÛÒÊQ½9^øöõ:dx’F-¬3ÇzƮȴtÿaŒ&àWzÕ¸ÓAdpWÌü«4˜<ÒårO~µ£ œh0¨3ô¬ 'C&|íŽûHÏçQ æGòͬÇ=þ\:´ƒ<ÇžqÍ MbîÑÆ,Aަl즉YÿÇqZ¦,ö¥Ú–ƒ2ôëK—¸šG–gûÒ;cõ'­t–ýšî)Gð°&©¢è*e=é§gpf׉­t›ÝZï- íöd D¥~]ÍÇê:¢šg†ˆÒO×í-ŸåSßÊ%·Óå+òíxݯöjªT dnÓ­vs¥m¶áF6·Iƒ¢~ø÷{OƒÃö@}žÞè`ç—SšÍòƒòªÖ¶pÈ>Ç­c±µ³G‘äÇtÛqû½zzûT¦ÓC–?žiT‘Ч#òV@B8äûÓ‹\œàSædò¢9>øVæi&[ÉÕ·mª2}™qà} CF²ßw+PJ$Sƒ¸ M–™ŽIëš[•vºžc¯øzm;R6Ð3I®õr1€I'¹íê+žñ£[ÁjBü«•'OàkÖüÓ$ä®yãӉ攨*¡­äËa±¢«î 3Z1òÅU‰oj¼£•fbù~üU‹ݰlóŸJj·š”{ÐÂ6TÕY¾[‡lgþ‚¥¶%¢ÔW$‹Œv+Yb>|/ñ Ú.?¶cãþ[Çÿ¡ ô (ÝJíØƒ^{£øœ'A‰Sø¯Abv Jñ±ß=*;)Ú¬q“Ž}¹®[ZÖ-ÈnªÇùWE~áÁ9'ŒÿÀþ•…w±üK§ÄË”yV23Ô@GëXaÕçcY4•ËP>Bœ1ÈïWDƒnÜ×Os éÉlî–ØeBxsØUtÐl-¢2ß\¤QîۼɅÏÔ€=«»êR¾èåúÕ6s2È p?*(ëÆkRîïÂV»ñ5ÕÓ«m+ þ r—šÌbwû5‹ˆGÝó%¿/ù÷©xb©›Yã9üéç85«cáÙ¯¬aº‚â/&xÖX÷)« ŒŒqÁ©ÃWaw,ÑpGÌ?˜¬²û&ª½7ÔÉP023OQÇ5ut-Aä1¤JØÿ¦«þ4’éw¶g@GІþUŒ°õVñeª{2ÆÏ_ZR1’{úPC eH縥9å«;êQ ƒ$޵›{»Ê8Èö­'Àã©ë6øí^„UCâCZÍOö|x!EZ| +.1ÀëO?yŽsØóMîB#'±§=Çn´Ö#0sÖ–& ‘Îyÿ?•$0aƒÏ¥àqù‰ýiynØéï@ Ïzv€äsL„·–ž`Ãí†zq#Ëc»¾”!3& ª„$óøÓò?ZŽ'ÄK’9òÛ‡¢_Kaý¸Ï½FÌG’­;¯%úÓNÜpr=iÐø'ƒùÓ·‚=½©ŒsÅ <àΩ ’1 g'Ûša9ËšBö3õ ¶GáLCOüM'—žqÆ: 2 î)TÀäz`>œqõ¨dE Œú‘V—héÄS$ ð0=ÅRb*²˜šæ¯ògÚ9ËWIrþ\dŽ+—”—»Èäµ×‡Z܉ìEpvFNêåç²0~½tZ«ì¶a‘ž•ÎLÅܱêNkÓ¢´¹Áˆz¤F})(Í-nsŸ\xIwi—#nïô˜Ž6ç£cü¿Ô7þf‹¿÷‡òï .í2ämÝþ“ÆÜôaì—â:†ÿÌÑwþðþBÎÚËýPúQE—ú¡ô¢˜‰çû†¸/ªzïgû†¸/ªzÛ·_ø•Z¶Þ–RŒíéÊ÷Ç·¨éÐã#Êo¬>̑Ȥúž¿ã^­n¿ñ*µm½,¥ÛÓ•ïoQÓ¡ÆG+¬ifçNd…x§r¯©‡ò¤ãÍ)JÍZA5e=¹ªÊCA⧉±Ö¸Í‰Â”õÁàÒ+ƒNÀϯ҆íÇZ03Rl-Î 4BÿÝ¢ã¨"¥[yci©—O¸=#cøQf@qÁ§‚}úUÔÒfc÷ãÅNºD™!qêi¨Ë°]äc&šñd.E™qÎïá#FÏáVíí÷ƬqŸ¥JÚL¼l•ª¿îB#Ú­Cgä¨P䯦?úõÓkY£7nä+ÈSøT¢Ø×"§h”ãädÕy/RÞcªùÆFõ¢rPWá7hŒ12žG¢‚„­)Ô­Ÿƒ½=Ù¢mBض<Ãÿ|š…^›ÚEº5èiààŠš#Š…î­÷ Ë=>aSÆê¬¤ð¤õìkE4ú™¸²SJž“udU34e¸ÈVÇÊßÁü+À'!á8錊ú^%Rq‘^i«ü/Ô.õËŵK{‰ÞD0Ú¥‰Çãð¥(ó;¢©Ë–éžJzQÿ,Ûð?çó¯Ná8ÛûÝXƒè¶ùú®?Å~ ê1[šx¦‹zKå•䂽O#ÿÀ…U´cÀÙ"¯Tarjòr3TfNœŠ=B€ñíVâ‹Îhí²€¿^ÔÛ‚>Ò£ý‘ÛëK•9ÉÒ’UW”>îƒZŠÑr‘¥ (Nì¡a„×úáC1]ñn¬NëŒHâŽS*¯ÏýãZqiº­ùܶ³¶CIò‚=‹`W,òꘆš:V20[’ßÚĸ2‚qœ!Ïò¬k«Å—S·¼ˆÐ8‘t$#<ú­l[ø:êBMÍÌQ‚2ç>ý?­_›Â–1X\˜Òi®<¢cù¹Üާ×5ÙC&Týç¿õØÂ¦:RÐÆ»ñ>¯¨1„NʲP.9ô|Üúf†µíJC+ZJ¥ßç’àì9õ;¹?‘®¿À$¾dDÌŒTüÒ† ß÷ÑÙkªÅuÓ¡ \ð±…HMÂ+c‚³øy!*×·ê0ܤ œ÷Ž0U<[á‹I·¸´3ó¼·ßó #cn:sº½²|OmöŸ ê1™„ÈJ®IØCãñÛÆµ•8ò´‘ËOUÕNRÒæ€æKÍ2Ò3ËlÍ ;î…tRZ³?ÈB Ĥs×¶=ëϾÝ3R±3Ê¥¡3ÆŠHh!¯ÌŸ•zyHÿz¼Ö}–ñÜA!`Ìà €¸ãžzŸÂ›t¡í™Œ[deÀ w瓹y5 ¸Õ„o$?½|GÌØíéQ®±©Äâ@^QÎw’Aü?úÔX.lÏätA·#©ïïÅ`ÈJ¾Ó…aÔzU»M^æêö™2¶Òxxìõªº¬kç 0Êü?¥yØè{—;°“÷š*JNN:zŠÎºÜÁT·Þâ®»áO\V|ÒuxUþb¼È/xï{&p‹ŸîŠ ~§?\R¸Ë(Çjk‚zÎj.$2A@‘N(Œp{zúê6ž¼â¤ 3ôi&6ƒxV9àqÏjvì©+éÁ4ÃÔ2øQ `Tƒ…ž}ÿZ‹€£‚O¨îRÂB£¢ð:TA\Aæ¡¿b–ï€$SŽâfzdF žžœÔ€å²zTQ¸ÈÍ+9'tâ…½Ê&ÀÇ=~´ÿ^Œ~t€3ÐÓDb:t¦•òi‡%²céFHçª@)Æzri¤`pZ^qœžMàó“ëWa ƒÏ<Ô í“Jh;oƒŒž:–±ÜxaŒT26ØÉ©ä€3‘j‚vÝÍ8êuìÄÆ}k.]½\½“ƒÒ©(ÙãŽkÐ¥DÎo[zÔœ"ärsXŒsš½ªÈZì¯QŠÏ5èÓVŠ<ÚÎóaEw­ ®<$»´Ë‘·wúLGsч±þ_ˆêÿ3EßûÃù w„—v™r6îÿIˆãnz0ö?ËñCæh»ÿx!Hgmeþ¨}(¢ËýPúQLDóýÃ\Š¿Õ=w³ýÃ\Š¿Õ=mÛ¯üJ­[oK)Fvôå{ãÛÔtèq‘‚&Ü̬7£ÉþU½n¿ñ*µm½,¥ÛÓ•ïoQÓ¡ÆGÖÒ6ð‚ªTèP—óµì¦DåYˆïì=êx¼0å¿y:þÈ'ü+ …ĨO§ ÅG²î?hч`O¿+·Ðb®Å£ÙÆs°·ûÇü*øZ\{STãØ\òîW[ eéÿ:Ù¡ùiÿ|Š”¯¥4‚>T.f7qÚšÀÔãŸZfÄÚ(À£4ÏZ,ÕzqˆTaˆïR+P|ªŠTdMÊHÇ\ÕhSZ;×ïù²N}iú}½”Û¢¸·WeäAÇáþy«,€CøVuÍÃÛN«l7]•%ƒ¦[БPà™¼j´hM¤i’–Ýÿ\ÕI|?bÃ÷Rʇý¢ü+>kK»Ó›ýjëä6ä[€8ùK½†H{Ñw¢iɶêÚi“y¯%}¾ãs0ªt¡ÔËÚÌ´úDñE¶ßQ“‡*?CIZ嬙[»9ãÛ€³†Èü@ÉüMr:–m¥Z‰´éìñ@¶Ô-ã>a礋†Ï ãÜâ­ÙøÖÖ=={9 •~_.6WQ×lÿœ÷¨öPZ ö’z3¦ŠçS0»ÓíÞ"p ´Ø züÝJçüw¡ZxŽÁb¶ŸÊÕ,K:C2Ì çf1¸„;õ“qã‹¶âÚ$‹®KÇðéÖ°|ûëéæ™LóË!Ý+ ’sÇ>ƒèÀâš§)iÉk#›¸Ðu+Ò›.F‚—\ïÏ[ƒOpƒ{öšèáðýüŸ|GÞlñøf´`ðÔs4òHAÈÚ6Œzµ× Yo¡Ïô•ÚIàÏø–ø›TÓ<µŽ7\¡‘¾r¾@=r®[ð®ò¼òøÿeøßMÔh±Ìʯ,Íò‚vçÛÀ×¢â¸R哉åfµE.èn(8æÞ³ïµ­3MÞ.ï¡Ó£Ý¹Æz|£'ô¡É-ÎÅÉÚ(òË¥Ðt@eGäRW‘鶬u› Jl¹µp|öï\~/Ô l< ÃÞ­§ŽHȖ͘žãŠÑáj®†J¬;LNNæq†Ü¹çŽ@« ôè8®Q´æû½k!|G¥Ìêî> ÕƒªXÊÈÂò0 Ýoʳ”eÕ Y—™¶¡lŽÂ¨êó„Š(ÏVlqô©F¥fÝ.">û…gjÇtѤLœƒD7‡B‘ô¥ÞU²=x¨í¢`,;c'5/’wrGàkH¥`{-òƒÖ““Ư4›Xgõ¤Ã€H÷¢Ä`zFqýh9#³Qþ"†HÌqǰ¨öp(gÁ'ëJÍ0AúúâšÜvÉ÷§’GåL㡵¨òªýÑœö'‘\[“¶H{‘Jè­L£‘M$âµ/VØXÊè±£ Ýœžƒ“ßÓ5’§&“;TŠ)ÓÇŠ:sHOµqÚ·Ä+[+élí-$¹xdh¥vmŠpqÁ'ž:k™¼ñÞµs÷fŽÝpA çñlœý1EÅcÐõ›¤±´7$¨`B¨fq=¹üþ™¬×´67-t..$äh¾}çИ†x¯?š{ëöW™ç‚á^W,qìM a)åäUúsPæ–ìÖ4§-‘ÓÞxÌße´Qæ=9 ÷¿jÈ:α¨ËäÛ´Ä’6Ån§#cžÞµsj°*²³žs޵ìZsA.o-¬ 2 ‘b@]Ã8ãŒóIÍZæ¡yYžomárý„¯À$‹Îø9÷¶ Ý´ø{½½‘ɤ .Ôç?®ÓVn«ètÆ„æþ,Э´)l.ì­ØÅ÷dY>d,¤»Ý¹ã¦µ£dxÕ¢`Ñ •èGlV·Œl>Ýá«’-ñp¤¶íûÇþø-\Ö…pn4˜ffˆ˜˜•ÇN€zü¥kÔËj^ñg‘šÒ³RFŽ(¥£½SÇ0¼Ole³†`¼¦*@è‡$þ!GãM‚_:—åù”· =Åkj6æïOžRÎèv(le‡+ÏÔ ç4yÄ–ÍA1·@:)äsßÕáæ´ìÔÎêôíØÑ¢Š ˜€RkÆ,ÏÕáZ* F'°<×ÛiWbÿI¶¹.]v+Œ¸á¸ÿxâï/mM¼±yŠìW‘žÔýZÔ`±k9.åW2ö'G=rsžõêà+ª)óè£âwµ÷Vöʦâx¡ p¦G Ÿ¦z×>º?‹õ@L³ $ûë™uíòe¿«¶¿íC3ÞßÍ31 ûµ Ï|“œþ”ëç¸zz'Ä-»9ÿêzf§mväÍ2; ÛHP¤|Þ¹!*Ö_x‡U@4ý1xØÒ¬lø~äò¨ö9Ç­mßxOJ]ö-9Lïh°Ä¹ ¨ Ä‘’8ã“T| wçhMlÅ[JÊ~öÖù²~¤·å^F';œ©Jµ%ªiÐÂÑÄÉFkbƒh^(ÕÇüLõ#OòI™ÔzìOþb­ÚxO‡c\Í5Ã)9"0íÀÉýkª£ó•³|]_µoOêç³OFš´bp>3Ñmtû )l ŠÕÚ&Á%œ‘•äòqµ¿:é¼|/ü' ^ríÙ |¦B€~U#¿ÈV“Å6ŸkðåâèÓÍ ÿ÷æ8÷Úük™ð%Îá§¼Ø ÐÊ‘úèªç#Û`¯{'®êáí'v™ÇŒ‚Œîºž„t{Û¢8n[<žþ¾ýê•Æ“m(Ù" Spw‘ôõ¨æ¾´´œ@áÁpŒÂg!Xƒ€Nî:Ê K»¨ck–(ß.ÖæË-““ÐP}A>µÎBí­˜²¹†HѼ°¬ä `/¿ò5ÍëÏ·_¼íÏû¢º¥7«ížtåh ,ØéÃ×+ÕŸÌÖ/ˆ?½`?é\÷û¿™Ùƒ^û*o®=óÒª]¢KÎ=ª×–¬…±€OëQI à×—g©è3™šÁr~SÖ kî¿¥tÀÈæ«4$ç®;WTk37Ì6Ó“Ð}*#¥#t_Ê·L Ü~´ñlG´Ußr]4sgG>ôÆÒHãœû×Sä6y­!°=>´þ°ÉöhåÓN”ÜcŠêô],Án3Ç’M$VÙ`JŸ¡­›e ƒ냊ʭg5b£Wt*ضKdú{ÓŒ½1øš´£ éïMgr~þ@õ®{"îÊMׯ4ÃÀ¡’GN)/o×½KC¹@Â3÷IÏjO' Œš¾]c´œŽÀSLˆF6=hÌÇàþèÔ÷вÏópÎ)Táx•À„'ÛŸ¥G$ Î÷â­cÕGJ†i/éÖ•ØÊí œíéY×yÁ>Õ~GfŸjͽá&·§¸ÙýëóYÚÌ @F$ãŸÖ´ÐmçjÀÖ%ÌÁa“^¥%y#޳´2ZCKI]‡ž´R¨,ÁGRq@ZøIwi—#nïô˜Ž6ç£cü¿Ô7þf{¯÷‡òï .í2ämÝþ“ÆÜôaì—â:†ÿÌÏuþðþBµ—ú¡ô¢‹/õCéE1Ï÷ p^*ÿTõÞÏ÷ p^*ÿTô·n¿ñ*µm½,¥ÛÓ•ïoQÓ¡ÆGÇww7QÜÛHÑËÊ²×Øöëÿ«VÛÒÊQ½9^øöõ:d|½á¯ Y×ÍpºdÀrj\”JQrvGqáŸÙëv›gd‚ò1óÆO î¾ÞÝ«{LñL:n¨¥ˆ[&ùd'Óû߇ùëW|ðšÚú¤D;!þ,{ÿwùý+g_øS¤jÉ›[‹› ùB6øóêTòï¡D•IZÎÀ•8üZe`XyƒA`;ÖáíDÓÅ”×_E Û¨H,t §lÆjYuìœ<-ŒâT)üëG+neÉ}‰µÝrÈJÀ<®qyûÇ×è?ÏZòwÇzÌílgÉ<4q’ˆ2;÷?‰®›Å1G{jÜ6ñ’é¿  ä;’}Àö®\irÌhÃã%kÏ«QûKI^>GÑåø8O ÍI¥Rú¶¯oOóOÔ.¥º’6/¬¶W>Ç<þuÞøcÄ srt«™¼ÉDeâv?1Æ2¾þ£ØlyõÞ½gllí•PtyOÀ` è>¤&}a¥W¹ÞÑ ù8äãÜ}3Eý§2VFØ÷N_gV\Óï¡éYçñI aANËÀϧoóíT–è 欤¶°8ìGùÿ<šíRLù†‹@Ò—¨P85e °È4Ьy'ì §‰`§Ëºe&ºF{ž?ïVt)FWƒÔþuÞ|HÓ–ãBŠõ@Ýi(É/Œ#áNr[gë^}§¸h wSÓù5•TùNœ3\Ö-ƒEèîk˜î#¸O6Ý×Û"»O_-Æ„m A%¬„mŒw~¤¸ü+£à›£eâY,É.å 0'ðÜ?ÖÅ£){³Rù‘KE&£^4–6ŽTWVF ×˜hJÖZ­þšïæ˜ùÂ’ŒTáO®sôéw7vÖhêâŽÐÒ¸PO§5æzþ§gÿ rêv2ý¦2“*@VÁB¦~Pzd×N§³ªŸC‡MT¥n§EI\áÖõÌ­žK`¶ÓõàÄQý—«_gí—[#n7g§O”q^´ñôã¶§—C(ÄÖÚ&ÅÆ¥gkŸ:æ5 à¨9#ð×"—‘Ùßܼ »3lUùT åzú?è-ü7g Ìóà«ùZÌñœvS[I…Œ®Ýª1ÈîO¾Jà­‰X†£-Qd•0ÔI2“êW²ýÀ#õÚ¸Ïçý*Id9’Bqб$⦤ë]Á҆Șъ#XrO¹®“ÀwkâF´Ì….£e Ÿwrá›è¡‡ü ¹üÓínÿ³µ[KìHVUÙc8f‚Gâ2?Ã2ê˜iE!U‚åÐö®ôR°!ˆ=¨÷¯ÎÏ_ìêzIÁ ™1FNX€wFÿ®lMwæ¸?£øÓLÕ‡— 3`K)䜲?ë›(®¬2öŠt¿™?½jŽœ$ù*¦vXæ’–«]_ÚYcíWPÂX¢G [™ë^4bäì•Ï£º[“:$ŠVDŒ0ÊGwäúmÜúˆ -¤I>Ï þ!ÇöÕy®ÒïÇL¥kn¶ìÌ%DÎàwÎrÀŸÄ×Óä˜|E''8µºžv2¥9$“Ôìm/¤{¯2ä ‚wýî€FxÜÙç}9éšêÆÒ @²Âf¦l»sNxëØöªxz+ô‚êÞèÎ’.åryŠpAß“ƒŒr8ö¨Æwme$ &è˜ÙÏËÏ'®^ßÐ׿èp–ôéTØ«Ç,²¨¼Œnl‚s$}3ÛæüÉ®jüí+à Ąö,MlÛiÚ•¬°|óy^tLñ’¬0®§=N:gŒ~5ƒ6ä¹”öÎEy¹‡Â‘Û‚Z±ªÌ ÉÈëÎ)$,@éKÔdšs®Œ~µå¯3½•ˆn¿Ò˜P’2‡`/r9§`y>ÆÅb¸…O sõ¤0ޤ ý*Ð$1Á¤Ž ÷Å.f*2c®i¸•\;Tgüi¸JçðéO˜,F›WƒUȤAŒ‡ü¨V?tæ¥ÀÆ1ÏçI͇)gÍN€Ÿ ¨üõ N W–ÆóëÀõ=Ï<œÒçaÊXYC­žüT- É©ÌW8þµ_Ÿ˜ž{G3 ¶6Ÿ×4æ%W·>ôŠ2BjÇ8úS»͸;‰{šwÈz5.ÜÆi¥“Ö„:…Rr?Ïœ;7\ÕùÆZΙ°ØÒˆî40ŽÍYú€ÛÁÉÆy­–n:ŠÌÕí$àr+¦›¼žÆ[aõëõ®ZþM÷rÙÇå]-Ä‚8I-÷r~µÉHK9'½zØu»81NÉ!†’”Ñ]'U‹$Ýr§²óUëSLˆÝÜž´ ŸQxIwi—#nïô˜Ž6ç£cü¿Ô7þf{¯÷‡òï .í2ämÝþ“ÆÜôaì—â:†ÿÌÏuþðþB‚ŽÚËýPúQE—ú¡ô¢˜‰çû†¸/ªzïgû†¸/ªzÛ·_ø•Z¶Þ–RŒíéÊ÷Ç·¨éÐã"Ÿ„¼¦øRÍçÝãç¸qÎÙ…\·_ø•Z¶Þ–RŒíéÊ÷Ç·¨éÐã"ä¯%©še•PÛŽ=ÏLúý)Ä$Ú/í¥ÛDN“D’¡Ê:†Sê"žØ@=©²Añ˜å$CÕXd¤œ v9Ûÿh×Řۘ\òLGü:~Uà<=ÿ–±f–¦QÄ%üлQÈ8*<¨Á?ï/ké¹dH!yeuHÑK31ÀP:“_'øëÅ·þ1Ö¦židKØ·¶'å‰LŒãw<Ÿ|g›Œo{F­E¤[9)b¹¸·-“ñ¹›?løG^þȸ”ÈÌct .~\ärG®*χ|%¹ÆK–ˆF@ás𫬸qô{£òëÔ61š¦´Û–¯SÑlµ{]V<+C#c;0ki×oe8dµ„Æx}Ÿ)#òæ¼VÊî{;”x\† 1ƒ^©jæ{H.T »žøöÈ#ð®*Üôí(³¦Ÿ,´hìÆ§~§Ûü+«µÑ#{$–Y¤ŠG]ÀQî r^ÐæŸv§r[ì°Ú­È‘²8Ç ®®_iÿh{8gY/#Ç™o‚$ädÞ#žœŽk¦‹Ÿ-æaUE>X”.üaÁýA«]ëÂ×ìd‡æ>[ž0݇äOã[µñSV“GéxZ¾ÖŒgÝeø‚ÜÜi2´dHüèIü+V™$i4Oƒ(êU‡¨4“³¹­Zj¤S†„î‰}GóŒTQ+E,Iá ޏ#ƒR⾂Œ¹©¦|’M+1:šŽa˜Ï·5#2¯Þ`>µL„=½*+T¦¢ÓdÉ«Xõ¿ Ý}³Âú|»v•‹Ê ¶ãò™>çnÔšhà…¦šDŽ5åØÜšòMó\†9ôÍ:S.^U«@RryÀéW×ÃW7R¬Ú–¡$Ò´œ—lznnJù%‘T«QÉ4¢Þ†°5ªë¡Ø_xÏD²Þ>Ôn$\|–ë¿9ôoº:â¼OâH¼C¤zqAnå–v|¶ÃÁc'osÐV­¾§[`‹q#â”îÏáÓô«Wv‹>5ªG TR0 ãÈàש‡ÈèÑ|÷»G¡O'’W”µ9ä¾ñ±LÚ‹¬Y;X7—»œ¸2z´‘xrbfÜ“‘´úç®Jw‡.|Û) .I…²£*7#žü†5±_I€Ë°‘¥ Sàó,ϫʓ•’eXtë;|yvè;ƒ¸ƒìO5•âH>X.B Á1³óyQú?ç[õŸ¬ÃçisáP´cxfþ9'ë·#ñ®ìMÊ„¡ÐàÁâeT'7}3¼ðÉ©xFÌ–š``œl p ûìÚé[L#ºâ¼³áljKŽöÁŠ™„ê3ƒœmb}F+ÑÄñÈÏ(~âká*baNn2?C…J<ȼºxί0¸{{›éå‡\’3§”“Šô n ËIa[¯$È¥7ªËžàö5Íÿ`Yˆn°÷ˆθ±U•T”¼=7 ¹&%sŽiÆ(ÈçZëáå'tW*ç¶×ùT áE\•¸]¾Ú¹%ÒÇKhÏÆÜLÒ8ÈïWÛEÔ!ÉÜ· ÅÙ—j>h‡=#?Η,ûÊJâç{Ômj§'= h;ŒebfÐ…Aöy×ïÄê\¥³ê˜®»•M¾XdøÑö\÷íëÖ­6Ý£vQšj¼nù'Ý©½·™_ì`uÜ(6ênX­\ C€i»œ³ RæC³*‹@07¹íA·ä·9«A²GB)­–a‚>¾”] R£!ü}=i¥$ÀåsÜÒ®l G·¾sHF?áEЂJqßß&¤”HϦâMLxÀnÔ œ¯õî+™ rųêؾÙúÿõêRŒGÞçÇ\Tx‘>brLsHvñÊ ‚;óULL>•mžGÕ¨[Ëm‘È‹z•Ü~™ÿ©qq v>c#œ$Œ{òO_J•ny4ÍeO‘&™'…üEm£™–vùX^sT-´„L-ÍÙû9vMëƒÓ##9 Æ…'f]ôºgÑwš…Ž¦›[O+ †4R2ƒŒóëÆN3Ï­yÔ^‡WÔ gÔî † >˪ACæ•Æ àq“Ðzaq¸ú—‡´ØX„—’¨k“¸qÓ ÷xç¶kRæ/m¤µ¸Œ<.0ÊN™iYß©“”z?ø£Å¾,þͽðö»sÈ·Zê-ªdØË àÎ0gœŠäbË©±%°rkÝ5› Í Þ[›³2n´”à4¡z ð©Á>£¥ráÑYšY'hb–6Ã2壌.YOÌç·@1ÏÂpåjJÌÊQ’i§¡—ák[+9íbiÒB¬_æ'¸8=:ãJéëŠð•ב©ËlÙQ:p Û—'ÓÕÚ×ÃfД12MèõGÔ`d¥A4¦¼i"4r(dpU•‡¢œÑ^j:Ï?°Sg¨ÜÙ»A+¸äd©#î2Z•‰c6ZìW¸}“(,ÜGÊÀ÷qùÕ‚6õê+öNÅýg÷GÀf´=Ž!¡)i3QË<0ÞH«ßò ö¥(Å^NÇœ“nÈ­§¿ØüFQ¸Iò77Ϩ¯7w÷"¬²½þ°Ík Ýñu 6ÖõSˬ»7·pöÎ+ÍÌóFœ}މÜðqXWJ¼¡Q߯mÎRÃá¶•mµ¯&šíÆw ùh߀çÿ®šÃHÓ´À•œ»w" Ä{·SøÕÚ+åëbëÖþ$Û"0ŒvG–k â$¿*EèóNKoŸbdSZõÄÛF‰4íV‘Ɇ#'ñ“÷“ÃkŸÆ–Râæ;$P둃‚2+ô,ƒí°q¾ëC¿/Š?¼uqE{g rv£ì>'»´/òK¸¤qŽ3÷Æ}0»…mšÇñ1z½ñvTÀÞ#1 rߘlV”÷vö¤‰æD`2TŸ›òë]¸ ‘Œ%;Yþgå¼M„”1ׂ¿1-#ª:‘C£ 2ž„w“?ˆm£ "G”ŽÿtǯéY>&¸b|’‘€r6®ãô$ñúUÕÌpðÒ÷ô<º9N.¦¼¶õþ®.$¶zòFìŠä´ÈÐÀ” ï Š£szf¼½._ÏJ È$ó>aÁ`sÏã^“lèÈݧœ¯B=«àsH¯h§™ú.¿gË-Ðç¸Á@ÏN[­H—.êOÝ4ƈ²ü¸c“×µä ;"±û æ¼{³¾È{O'˜2ÍôÛŠU¹tr (;‡C@U –'ƒÛÿÕKånä9àÕ„˨\t3>ÜpKŸåNþØþô°Ïð 8úÕp€¹²€l(8>ÿÒ‹¢5IÙpËû°§C©˜ÜâÁ<¼Í`ÛºŒà§¯×õ¦ÿz®Fzç'8úg?Ò©NK¨š¹´Ú¼¤¬¶àžá›u'üJœ€l‘?ÝŒåYENâä õúŠUf8fœ|¾ž½ðj½¬û‹•_fÑæ‡ ˆäõ-ž¸õªí ir©+w08ï(~bª¶í„¿’O qžžüqHŸ((q°¯=èö²¿@±,^fwÙ~Åù@!¿¥J<7r§ "õ'¢ûª?\µ »–ßö­ 1år;ð:ÿŸjnµþ( ×¹)Ñ/ ŠCÿתré÷P¶7Îz*æ´R¸Fȸlúš›ûjä ïíEé¾y/¦Ý ÜÖò(ÏWB?¥A$…åWþú­ñ­3ín;©ÍNu¤‘6Km<`¹Áü)rÓaÍ#‹H$ ‚ à UÉRÄp8®Ån´ÇR>ʈ¼#\þdTËF™²á›$n-ý(öq{1ó÷G*g&<~4¯¸•AäWJºFŸ†d»e+Ðexý)DŽL¨¼Nœ|¹çó©öO£”S<ÿp×â¯õO]ìÿp×â¯õO@vëÿ«VÛÒÊQ½9^øöõ:d[†êÐ42+UlÕKuÿ‰U«mée(ÎÞœ¯|{zŽ2<ÆÕ5K8MÞN~ta È?Lçô¨så/1éÚ…Ù²hîðÄBãx^ICÁý ¿¨ëV:M§Ún§UB7 —ßç½yeߌ/¥°6²yRH~V•z_±¯o%»%šw•Q s1éXÔĨ- …÷6õß^ëÒ…RÐYŽ‘) ·¹ÿ?— äE/—´mGEèTMÝ}jUã®s^s­&îÙÙQJȸ¬óHã%‰ÍQ×ôˈì#Ô]J…q`3Œç¯n£ë’*íûÛάŠ|ÈI2 ¡Ã¡çî±àÈäsïŸJ>Òu] eI¥¹7Våbº¸ËìÊü¬•ϦF1šíÃÓs\÷3ÄZ •­Ï}ñN¸8V`O§L`ñøÔˆ&ØêrT6íÞœŒʹËù.´»™!V’-š3œ˜Ê’6‘ÈÜ;ûæ‹-bü¨"ã’vòŠy?…uBWGƒ$ÖäcqmÃlßÓŽN?•Ø|5ðöŸ©oî$cslãËE8Fcêz‘Ð ¬sÆ+„ŽÞóR¿`ÆGu\³c8\ãõ?­zWÂÛv±¾¼ÿHù¤] `ŒØõÖÔÓ½Ç)%È ›J#l= [Xd’*ÈÙpGåT­‘d1ŽG–01œ VŒn¦Ù$ö;}j™Š25&–¦Òøí9ÌW ÁVÇ_fëÓ®HúóÚ¦­ö[as0Ê"¦@{Ø rNN+¥Ö–E@Ñ¡cÕ°:×1â "ßVЙ˜*Hœ¤ÆÆô'œ)é y¾ÅE®»Iq¨íñê£n ÛwœœœO¡äW£+,ˆ6 Œ2¬§ Zò»¨$µ»hfR®C××·Õé¾'µ´Ò-âŸÍ’t6¢Žû½ñŒ`zñÒ¼ãR²„©«µ¡ì`1¦å;-Ϊ–¸«¯ÞJ ÛCŸ¾Àÿ/Ò².oo/úMøÎìùAöcƒá|v#[Y_/ÄÒ¾s†¥³¹Ñø¦êÂêÊ%Žæ¹GÊíùŽÞ„dp9ÁçÒ± Ôfh㷂ܼ¡@e‰rp9¬áÇ,r{×EáK¦ÅÅ›‰Uvôè“ÿ|ξ¢NIAF2ßúì|î? RuyoÊ@šv³x¤¶ R¹Ûn}°9üêí¿… B ÄòJAF=Sùb·¾´My•quj;Éž±µ^‘ÑyŽ‘ir¶öñÆè…Õöoa‚€O<ãaØI¾Øîœu®Ì#­q1EöRâ̆ „ßËÕI>êsQ埩ô|)ŒpÅòIü_×çbï9¤&ƒHk#ôÒ9ÓÍÓ¹}kÐ~߭φ¾ÈJ´•—jŸ˜«ÁÔ–ðà{Ößû߱xžçO.;¨ÎÕ Î¿2óÛ ^¹3 ~× %ÕkþàgT¬áWåþGªQU/uK 5C^^AA*$p cÐu?…rÚÄ­"Ø0³ŽkÇÆTå¡>„·#þù¯š£…­[øqlñ£Ù­ã+!}á=E>UhâóƒÉ>crpþ»¡©‘ˆ3#;ž1ׯ Â¥¸ñ§‰õ@ÃN²Kh̬1+é¹þSø\P´µÉlíµ£b<ƒƒ_e‘áñ(IU[‘O©T玺­ÏˆtÛbAŸÍq–!»?OÖ²'ñtŽÛm-^ ‡$ éùšÍK(W©b:juP£  íÊ´ßQTÍ+KáЩw¨ÞǺíó…ÀgØZÇ–GV*¤;âºÌF^A×;r¸p}x¬eÝœR©)¾i;²ÌØÜIúÓM/ÖœjD>ÁZï|=uæèð`.c]˜^pñÆã^aÇÒxsQµ³Ãqu¶ò6‘Nã:t^¾µÅ§ÏJë¡Õ„§gÔ퇔\,T¾¾{}>y¡˜©U$Çü+Îf‘DeØ9Ï9®ÃÅ2tï,ûÇ }»ÿJá/É[`¹ûÄqíþq^– Ÿ»êÌêÏ•7ØÔ²Ö㸔$¨«!ÀÎx'ÛÓé[%•’ÈA8"¸0~jê¼1së-´Š»Ñr¬;{ÿ?Öº±4#󣚆&S—,·fG‹BâØ¯O›úW5îqù×Câå0j+³˜Â˜œgëX¶ËÃߥtPþ±†#Z¬y溟 í“LHØÄ„ÈW*N+WG’÷dÉiH 8ü¹«hÌúWÂK»L¹w¤Äq·={åøŽ¡§þF{¯÷‡ò§xIwi—#nïô˜Ž6ç£cü¿Ô4ÿÈÏuþðþUdµ—ú¡ô¢‹/õCéE1Ï÷ p^*ÿTõÞÏ÷ p^*ÿTô·n¿ñ*µm½,¥ÛÓ•ïoQÓ¡ÆGÏÏ©\\MËÉ3·<äæ¾·_ø•Z¶Þ–RŒíéÊ÷Ç·¨éÐã#Ï5k‹Xì¼ Š Ê?„cÓê+)ÅJ×-O”âí¡¸¸2gdxÎL²¬gÿ#5¡ca˜“}õ¼‡9eˆ–aúúÖl©,Àɳgcp¾üÖ|ò¢|0#»Ž3SS¥!G$ÏGÒôK+••äšb‹Âœ$ý9ÍK,ÞÓ/´ÁšhFdp7.qЂy=:ø`×1áOÉa2Z^¾ûVlï#,§úŽ+¨ˆxzܶvÍó4Ò¨rÇמ‡žÂ¾k,E ®5/nœ¶üÏFŒ©J<Ò#›ZÒ®´Ý@ÙZÉTs° `Ì‚}ªÏÃO¬Ñǧ\:ˆ§É‹æÇ—7ñGŽƒ?xëÓ“Yºö¶?ḂÞÖ+xÁFã1ÀÆã¯nµçÔÒÖf†VÄs>2…»Ö½Lª¤•)Mß~®æU# •9š~%¿ŒÚhž7šî(öÚêKö„Ú¸Q'I¹ÏÌßÇèŒ]äVS´`“Žùþ•ô«¥ÛüHð‘°»;u{¹dÛµ‰ÆPzê;q^Cuà[í ïuÔsüŒFãPöToª8%x7n‡èºÑ©is ¸|Á»i“ œ’§éÆG·Ö¼‚ÛÃWñí ¹‘Ńì0H¯Tðß„µ´Ä¹ÕƒÙÜÂÀy‡k™b?0çkz·SÎFI'XÅ¥©›iœ™Œàã'=?ýbµã ЫŒ|™`\ë:f™ŽâA¼² /&O|.OéïYïã]6k)¢±¼H®¤\B‚Žq¿î¡<ŽsŒŽ)6ê.f‚ r÷R¤H8ß#ÓšâüCâÝ7N‰ÐGæ+¯ß“*„DZü±ïÅyþ­â›Ôtšk„¹V*ÌìLƒžžƒð YV3:«YÞÀ.md81“†SýänvŸÌp2*V®Èm[VOuª[_-Ô^HÝ$E˜í‚`‚xܪ}:ôëX1f9‚8®•ü4¶­Ì}ªÅË ¡þëÇôààšÃÔ!û%ëÜPêHƒéÄ~èѦðõ!Z{_SžU#UJœF:qŠ>´RÿJû#È5>™uöMf …ðÙ}£ Á$ú çð¨*9F@ÏN+ËÎ({l,¼µ7õÍÊözKÞ«i×&÷M·¹fÜîƒ{Û–1Ó Õ“€ 8 “_œ5gcÍ”\dâúr~$ŒZê°](P%_˜);˜©Á'ð*? Ù¸×tëu?¿°…‹æÏãÓõ¬]Rþ}nÝã³±˜ÅnÞsÈ«¸„Œ°åç¯jÞ9ó^ÚŽ] ԫƪVHvsŒTrOD‰$Ps‚:ŸÊ®hžÔuëHî>×V„ì?1-þÈãó"º‹‡ºM¸ vó]¾Ü0-±3êä~f¶Žù™ún"ÒÔ¡÷ÿ_©Á ÿ2DŽd‘ÜíUÇ$ú3š[¨µm1à¿–;‹\0…—1¿Ë€ßí½ß®kØ­,m,Q’ÒÚ±‘Ï×kÇVFóòo/m"Ì%¿„çÐÅ¿à5º¡­ãb3,F'J’Ó±ÊCáH÷—»¹’G'$(Ç=òNsúV­®•ciƒ¬jAÈb70úÍG¢\}§F¶|Bl#v~ï>çük@u­RIhp6¸ßÅöo$ü••U‰# 6Ðø×gÚ¹ß[tø®YŒ2`àðªÃ’£ñ¤Â;™”ª8¥įê9Ç­;4†-bj ‰dèÙéëÏõ­¬Öf¥·zù$m+žŸç4˜âdfÕ!DI> qMyâ‹ïlQïÿפUU‰Èõô«ÖÖ­{y¼aw¹ nè8'úVDš¤dáwH~•cNº¼’íe¶Y7§Ì.â©â¦MZÌÖœeÍtuGÂòÅýÚ1<’¼óéÍf`rÖWø¶ÈÖŧ‰õP‹ˆ"ºÇrÿã½jÒøÆTvó4ä §…vŸNEy™nzê+dsln—1ÛÜ_y£¢©““Øzß–ÏÄšr¯ŸçFÄQ—,Ç$­X>'¶ºFK­?fòªUNíÊzóÛ?jZxƒL´Ž8ÒöHäªýž9U”`£>ƒ½rÕM­Y£!oµ¸¢24 ±FâdfF@ã¦zôþ”èüEp©—µ‰ýÔ‘]jvÊ-ί¹Aʵäè䜂$9ô늹k5¼¥ÖÊî)(âÜPp?å–3X8mx‰Í£“ŸÅ o'‘6Ÿs‹Ê¤eHà‚àÓ¢ñm‹æ%Ì_ïÇŸäÇùUûÝu)Ö¶´µhоa°ÁñbxÛëUŸÁ— `Mç *W?εTám‚2¾ì|~&Òä%Mà›¢uÇâF*äz®›7Ëõ³7§š¹ü«_ Þ£*2@®Ù¬¿{é*´ž¼fÉÎÝ?֥љWó:Õd|pG¨9þTðFp ü«ƒ}E%”¡‡q S|™Ð…[˘Øtf_ëPè-ïø©ß‚ǧ‡?ΘÊÂ6¥¹ôþ•Ä‹½Qªj2àñóª¶1NM{W¼¿:ÝÈÇ8ÿ€‘IPof„ÝŽÕ ðÙ'¾qMldàô=3\¤~(Ô?ye §ûÉ!_èjÌ^* ¤Mc$|g(á‡ôþTö ¤tE°­·!Æt`9ÀëYøŠÂDÉGž~dÏòÍXMcN“îÞ'¸—ùÖn2]4Ë»£™˜*’z±ÌÒvw<QQ¥Å´˜ò§‰þë‚jG2ùq~´]½ÂÉl ؆àŽp q¸üÇéQ³2® õ>ÿ•@òÉêsHv9¯O¾ê€lª–<ñÏOäk¾;¥ÐVþ¯peÔæ`ÙU;p{``þ¹®NîýD®¾Y'$gwÿZ½ì-qbÝ£nãÃbºF_Q¸™q±cØÃÉÏ_øë\ˆž{‡D¼ž0£šô/ Ù­†‘’Þs9i3Øç­qrµ6—S— ÔMô9ï.Ýb;À?™¬$]€jéšð’îÓ.FÝßé1mÏFÇù~#¨iÿ‘žëýáü©Þ]ÚeÈÛ»ý&#¹èÃØÿ/Äu ?ò3ݼ?•hfvÖ_ê‡ÒŠ,¿Õ¥ÄO?Ü5Áx«ýS×{?Ü5Áx«ýSÐݺÿĪնô²”goNW¾=½GN‡"Évó:ùÎê…‘c;\ã88úŒûW×Vëÿ«VÛÒÊQ½9^øöõ:d|Õâ-KJ½´ŽßOµ–O2Ou´I'•'ñ$çÚ¦ï ì­vÎVc"8>`9 §¨©må¸~—Ð*¹É­]/ÂÚŽºèðÃäÚ‘OâäôÄz×aoàÈô«g. LËòefÜÎáØc==ºÑ)(»HVÐäl­n£•fžæ`‚yÏã^·áx¼ë2ÒË·e¶ö,¡È ŽŸã\#Xý£SMS‡oš\ “Ÿr+Ðô«wN¾0& [”6Ý ðO¿«ÊÇT‹©ö»ü ©'ÊÙÊx©ÙtBççã ûð¯=±†imK ùCçpþï^âu'Caë"Œgxþµ“á- Mi4Þ\Ò¹ÌH‘àrIå?/¯–q§…æ—VSþ#6üâ ÛqÂ÷v+‡v ðç•ôÈç·¡Í{•Å®¡cå´¢kyWr9ÇOps^©i·zúN‘Knä>lü¾Ì8b3‚xìp8®oQñ=Õ­Œ–n²MËæ,RÊå¸9)ŒrË)¯G VêÝ Ä¨ÔŠ¨·ê{ö«ñÚdR˜.’õ£à´yA°H_»ÉÀÉé^Iâ‹Úžª$‚ÅÚÚܘÎ2ÌŸ|ôþœ\ÍÞ‘yªh0êR\K-Ø·óVÙcR?3` Aùx¶ãޏiÓNFìœÖ³Ÿ.ç4)óv™ã•¼ƒû7ZPð¾UfO›ËôÝ»;±êNzsÞ´î¼=6Ÿj·‘Ê/le9I¢ÈdëËqÇLÇë‚9[M.1]–‡}q£â8ÎësОTñƒ×óúûqX<\/foõyZè£ao ÍÓ%Ù‘ü©(mÁHöôÿ<ãhé¿c)€Ë•“<0ö?ç¥kI¥Ù]Û›­=J9<r>ƒüÿJ¯c<‰'Ù$Ù-«ç*ç>ð?Â}ý¹È¯k/£§µŸCÌÆTÿ—q¥Ø²Î¾j;ÚJ|·PÅCœ| ‘ÎÐÁIú}*·ÄMmP[ùq©Š2"·Â€É“Èà*¸Àõßõ'Ó4í#M²³K‹ Vè8*³£î¨$cÜd~tý{O·Ö¼#©X1R$ž2ϱV@K)b; ŸnݨÅbUDí±(ò5sçXÎPtàÔœúÔ0ƒ¹O#Šèt¿ø‹YU{-*o-€a,ƒËRpÍ€ ×¹C7£滕µþ¶9ªa&ê;lbãškaOµzž•ðjVe}gTP9ŠÕI$v÷Cÿ5Üi^ðæªaÓ"–PïnšÄŽüðÐ áÄgSšq„ROçÿÞž EݳÂôíËÄm;G·iŸ>ald§N2ÇjŽ;÷&ºÛO†ZÆ McTX‡ÞXÔ™J“Ôc…_Ã"¬…ÿ„_ã4ñ¿Ém©3myKy¿0 új6a^›^aï%©Óìã9%©ÊiŸü;¦Íh×r)?=ÓoëØ¨Â‘õÐ˧Zͦ˧•-%‰¡hã@F c§­QTßAžMà ¤²¸Õ4KŸ-n-å.Q9;Ù'ÍÜ~5Ûö®7[Œè_àš= D.ä‰0 “÷ùÔ9ú×eIl6ÔW6ñÞZMk1o*hÚ7Úpv°ÁÁú–Šb<·ÂÍ%´·Úm¤sÅ&æLäîû¯Ï *£ñ®’°uº/Ä ”†Þí„ ÎC }3"“Z-{<¶ÓÍe§Üܬ,د–¡‰a·-ƒœ©Ç\¤Ùtš£«Ä“é7Q¾0P‘¹¶Ã•çêF÷V¿fy5Á¦M­Å”v¦Y‘ƒ²íÉl„' q‘×#8ÆzŸjïo¦K©êUµ&G œqÜdgäúr›]A&PÓCÏëSöt3>é6¦@ÎXÕ€ÇRH­­CÃ÷úM°“VšÓMgIZ8e<ŽQ àmùFp“œ°à×+yâývî+t¶Ýg°eŒ[n@7Ç¡ÏUCŒà®IÃxï/dy®'’Gv,ìrKÉ'ÔÖni#UNRf„ú©bU¦ÉéµÀUSqq!Äp9÷aÅ: $†ÜÓk[ˆ”eÎ3‚1XJ²¾‡e,$¦ícqxÒÆ!\‘»oašY4‹¸ß2Ã&:îÁ ­t$Ú…ÈDFbÇÍz&™á¿éBñGÂ…@Úá3×*ãðõªŒœŽÇ‚T_½oCË,|7{u"ªÛ:« Ûœm\§'ÐsøÖKº›I ÛHïæHy@ú mÀ#¹®›]¸Ö‹=½å»ÛnÆô IÕø5™§I>›:¼`˜ÁË/_OÄtê9æ¡É^ÇbÂIÓçI|Š+eæ(HBÙö~'ö-óřʡFÚ»Ô‚Ç¿>ƒåãý¯zé­õK6*`Ò-щù8§ §ÔÜ*ÌÔæ¼l¬êP7Ë…|¸éòð3’p:õ5qQÔÆœdæ½Û °ð†¡pBJ­#¦‡¥d=µÈ!M€}GùÿõRº’H#ƒÁçµiéÓ\Ì’Ç12" "CÉLäö#Ôÿ ®~hKK¤ù­-™VÇK½»“ÊU1ã?4„¨Î=Iü?úãz Hª‚]UÙ:üÐr?õ{F6­ªÆ“ŒlPKg¦2{ðàFHÜñ¶uMm|R¬ 7¡8<SWF×±Ã^ê¯%Ï7¾·’ÊE-(…‘©'Ž0p3ßêj͵þ¯të­ÝôŒí6Õ''dŽO©™!»’9Ê2LžZ¼æ õÇÊyõâµ´‹+ZK8@V/–ÏÈOo›ó8ï‡Kµ•6íq;FŸ2ÔÈø–XÄEÃã¢Ï×v­Åzµ©ònmâ(ÿ–±°?^¢»µ]ÈQUqïëÁà×;­èïwqÂUbFÕobì\A^–/*§N“œe·sMó$Ñ^4>Pó´õfÀå&Ú?‘©ãñuƒ£ìçB…v¾2+ ¼;©"UBƒ¦ì©<ã¡QôD1 lp9$8ÿùþWÐëTÓ:3©ht‘Ç´ÐgÿA¢H´¦2)€}dòÿ™̵Ú3¶“åô\ÿ*®ìÊØ–_f:Iô¸{4v+¢éWªZ ˜Ú7?­M§è–֓ܳB×€¬lˆ'”`['vÓŽÞ+…]¬H'¿åW­5+½<¡\<_~ÐúŽÂ„J ­ÙÆ[T'M¸µ9ù™gYݸ>ê; Í:–"–M×ÖìsåµÜ°: n'œÕâ­aÜ4_(ÜÄB¹ rsnõ4³É5¹• 3¹,Åx-žÃñà J“z&k†Â{Vù’3ÚêËE×¥·r·1*¨.€€w.N2qøU7—í×76<ï ˜Ø ?—ͼqs<ŒÌ˜œx®ãCH¬ô»U…Œ Ã½ÃŒ|Ä’GøL{Šì©Ó…)ÓX¸Ald u†aÔ.÷“xýsIý©¬DŽ^äÈ;îz~•ÑKâ5Ç•sh3ÃE {ry¦6¡áI€€Æ‰¼íUH9úÇç\éEô¿Èå•ÖC™ži ÎYÏ,}IëWAÒ€G’ÛÌç’]‡õ®ŸUðî—•4Ö¨Èè7‚ÎÄŸ¨$Ö%«y‘mcÓk²3Òñg"í¢X4ûo´$qÁq7,j?ý|w®©WKÚ-Z1Ô £ò5§Æ£ â;ÕåI ä}ëžnïR©è´9Ÿi±ŠýO(vãØšàs×­zÇŒ7†eç$`œÿ½ŠòµQ–Ë@àüô®Ì$¯M®Æ8•i¦755“”¾€çxŸCOö:?÷Xèf'Ô¾]ÚeÈÛ»ý&#¹èÃØÿ/Äu ?ò3ݼ?•;ÂK»L¹w¤Äq·={åøŽ¡üŒ÷?ïåVAÚÙªJ(²ÿT>”S<ÿp×â¯õO]ìÿp×â¯õO@vëÿ«VÛÒÊQ½9^øöõ:dy„¼¡›6žX’ä†û³(!H9É÷Æ=±Û“ŸN·_ø•Z¶Þ–RŒíéÊ÷Ç·¨éÐã#Ëc×®¼3$ðZEÄ’¨*²±O¯~œg׊‡>F†ÕÕŽ¢ê×ìˆRÕ™ÈåÓŽŸ¥q:†¶×eàÑöÈÝ$¾õQÿºOSú}zV>·­j:ÔÇûVøIá‹h²ŽAú¶œŸzŽ/^ZÃäÛLñD£j,nEUzФmëÜ(S”Uª½;:fž–—‹ånvùšY›$¹ Ž¿uV· ¼ñ¶˜¤l# žÇê3šÈеÍK]Imf‰¦1aüÀ„°è0t66Ö1°{»Ûep7y>`.>ª9ü?ŸJù¼c«í¨ßK·‹VOCñROvA¡C.ö~é*W¯?¡©|/­Zi6¬Ò](e”“m{ä“Ðg¢Œðr2ÎxÓñµÅÕ…·˜I$lÈH…ÐBžsÿ\ÿë^¾[Fødª®ÿ™ÅZ^ûå":†¿â»I,­­R×OšL32—gÇ;Ks¸ãi*ƒør­‹ƒºtæµ7›å9tAs‘ÇÚ:ޤ„ñ^‘e§[XF€ÁBî=qéì98Q€3Àe™T¨oâ8w¯BñŽFj=YÁj>·ÒT-œ1%½º‹ˆc#åÙ;‰SžsÊóœäóúÿø­á}cHËÚJ<Ó rc“Ïp=ýòkÔ5û=¿ÚLp·˜@8çv?j††æÞì¢;ÖÚ_ аܥIêpO=ñíYÔ¦ªE©ÂNéžäaŠ•Á‚ [¶·2Ê@:šë> ÚèúL±Ék<_lq»ì ÷ÂxöD<¶Áà;®ø“í9†0ãÊ&ëÕ¸2ŸÀ/®|&©Ï[T¶]Í+âe(rÓÑ¿ÀߺñdZkyÖóÁ¾ú·ýÞ»ÏéêE]Ю‹¤a,`]8 ³6Ü€̬{`ñÜâ¸k ïçYî®ãgoYlgŽö«sx’ãGYì4[–ä–hŽ ŸºzŒdÞN8<ûÕœ§V£K²G•M(KÙÅ6ú³Ûncß;•úš–é§Jµ½º¼¶‰æ‰d1#î ž (ùŽ#§jÂÕõ¸/®×Ä>!Yí>Fm7L·Á–U#1‚rà 1‡*Iàq\„šŒúž—ŸØi·Ï,ŸkQ·~áC‡89³‚¼ç•̓Ք¢ÚÑ„þ)ób’K=>à±™ââ7Ž9UFͪÌÙfQÐuäŠËÕµy,vÿmxŽÞ ÄÇ%–޹•qÁ%Û&6¯#ŒóMO]×õë¿>ê_ßy;vÆ¡0™ÇÝP|téŽÂªÃ¢ÝÜí½þ§¥uÒÂT«ªG-\M:_7õØÙË ú4µÀ’)¦¹º ,**A9Û† rÍ»`TÄ^#Ö¡‚ÞØý–Út†ÅEn$rÙå‹““ÉΆ›áÁ(ò˜ígCÛœsŒŽ;þ5×ÛiÉk­ñú½ÁN ðèG?¥i‰Àû9KCžŽ`ª¾XFìà¬|#wu¶K§8?0SÛðí[‰¢izZƒpØŽh$þֺĄ‡ÚW§=j­íºù© ²xÉÀÛs^\´G¯wdQÒí4›•s¡@‡¾ÄÖ¼VP*íTVSü-ȧ[! ‰Sý‘Î*ýµÈ³&CõÆ98ïõý+ ½/kš¥Êír¬Z,G+„|œ€c ÛøN?‘¨.ü6Š®$ÓÙGq#`NÕÖ¨ÜÄ…¢!ò:ÿ³ÁÈüqÍV•Û{=Ã)ð@@vç'ç<ðkWm쎨óCXÉœ­žoa/™ 28ÁqëíùWSŠ¥‚0¢É¸$·ʱ|Cs} ÜoqÍÄ<ÅO½žr3ÏòÍdYjW’NÆxZ(†pP}Çzô(¹J)¥¹Í^¼œ¯RWõ;)u½#S‰WV²óA…`>‡vk‘Ô´«hom)‘âl’ müOéÔñZVóÄ„™c9}ÓøRÌl1˜–Ep~o0/ô§4ö‘¾*~ôu]ºêYÍÍå:©ûìœU8÷ýª_6#-£±räp‡O§céëïböý…Áû1Ø£ŒúÓ¡Ö%Þ©1%:Q“øT(£¦¦?ZQèwy‹ô¹þð~U©k¹TŠÆKE%÷ƒƒþ×dpqõ§Û-¸b,S>íÛ„j¬? *v¹D,#.k9ŵhؘb šrm•¤ÐØ\A"G&Jà©Áö#ùúé.µm^ÊCwp…NØÒ+§Úãœc˜½xÁ¾š‹>!“€Aý*¥ý¼——,«Œm ÐŒàƒžœôéúc:p¨™¥LMŸÏi_‰·¬±³Ë´JY©ldŸ­C-ÕÔŽóðÒ±ÉCÆ:ÿW¢ÚDû˜caÔg ÿ*“~±í‚,È­’ØqÏ~£üi¨OšöÔ×ÛaÜySVû‰bñ4pGûØP0]"¸”gŒ|Î\á¸ßM¶ñDM$Fæ-‚_cî>ÜsÛ$“ü«çKÔK{‰K̨…ˆbGeÁ'Ž8çÓ&‚ZÝyŽÚVdá·G£×¦k¹¥8òÉÜŠT©¯}?Äô¸õ+­ÌÁËÄ¿36â Øò={úŠÍŸ[ÓDÂ'•ŽÓÌË ^™ý+ 4Z$– i “í!YNÁ8ÇrsØqÔÖ4º]ËD³\FÁ8,ŒÛKsÓ‘éê+‹ê´ã{˜TÅMJÔÙèVÿa½OÜ\«€pówëP\Ù¤há¾e9PØÁ⸭/ÿµQ­ñ¶6ÄŒÀì ŽF;ägø~†zhÖÍ)>Išf9ù£ Ç ã§4£AÓÝ™žÕƒätfP?”·(Œ¿¾v:@OÀçõü{Ò-» ¬d ,¹À’ Æ9ãÆ´£‡tÝÜ®l í¶ƒÃ>dÎlš_^6,@Øpvôçœ`œàŸ­`ZÜ®‰w6Ÿ©ÂïÝaŒÁv<‡ô®¢-wÉ—"´¼b3¼u “ÇN¸9ÉÍyþ°—’\µÄîÎäæI=ýý:qô­({iÔ’šJ=K2÷u¹¸ðè—ŧû\FC’ÂxÈv=Iîâi°^¤ú”z}žXÌë 8œÀf¹%yŽÔPØã¥zw¤Ólár, ’á ßq(ùÃp¤FÇ8à¶WŽüóxˆN0n*ùU3:pZ+3gRðü{"7]”p¸ýó(ÜUTdÀ+ux=ùÝœ6Öô‘¥k6ld’Ær²G#¯§8< ž‡§qß"½“Q×­m­¤.§ý"&ç8ä+–ãÙIö¯(ñ ·ÓE”Qeþ¨}(¦"yþá® Å_êž»Ùþá® Å_Ꞁ6í×þ%V­·¥”£;zr½ñíê:t8Èð‹Ïµ¹·º¸]’9àlð:ô㧦½ÞÝâUjÛzYJ3·§+ßÞ£§CŒÔõW¿Õ*§\ð¥e>ˆ¥ÜƒU¾Ó㜴¶ñ’8Ý!Ëü[AÏó¬ÖÖ´ûgHу9߸ÜÕ°kJïG[Ì\Çl²1ù[!~Qž3¸€:Õ$²µŽIQ®-¡xÆJó¹ `ÿßU “·üs»Ô˜kwš’ªGau<û¸’ârÈGºàcþú­Ëx5t &tû(Ú`½ãÔgy£B´·ž/'Ëži'ÀWÛ䘱ƒ‘àúzuö5ÕÁáƒqg,vúsLËÞW‘²}†vŸûç¤h%­ˆ•N‡&‘¨\©.­4‘©ÝJ䢷_ºÇŸ¦+ÚüÅáë$u!„*=A à'ÞòÛÄr#ϳtVv¨‚AÎ9EG9$g®+”ñ/Ä ORµ[H¤û‹¦Þ?0Ævà·R1ÀéÇ­ùSKQ/yž½â/‰z6ŠÏojëx¼‰¾D òùëÀÏ#s¾1¶ñ=‡(©yÿH·ätÜž£Û¨éÏüí£ÚÿjM.n¡·Š%%äšUAú‘ëßß­]Óõ+7_»ms2Ù1h®Ù„jà³p>½r=kU½G ιÐQ¦¦ÞçÒš–¥g¥Y}®þæ8l ÓJß/<Þ¹ÈÔ×’kž2–θÒg¹EþÍÜ•T%d,…UÀ•ܹ##¨ÅyÞ·âÝOÄZƒl™µÍû’á“l0g¯“àvùØn8†k²ðW‡µ»[QzáYTO,aÕL£“ÏÞÀÜõ-]}?Sˆ³°ÖüWpcU™!•÷ùJ女ÃHç–oö˜ã$à â½:×àÄMáÇd- ùFN9=OÔ€q—;…õñ'…¼¥Û>—ÛoîaI$„0ã ¬|§ƒÀö8ÁÍsz‡Äÿ_I˜.#´à„FxÉ}Ç?LTJqZ"Ôt8ísD}Lq2K Ño(# |ýÇä qYí^‰âMgXñ6™$Zš‹™ Û6R:çhRÞAÆ 玬¯µÎJñ×50ºZ»Žm_a§'¯Ö“Œ’0jfy$TWvuA±9 2N É'ñ5QÎxö«$}¼ÞUÊHA*È=+ëëZðfrÒ™#ò&;÷éòäŸV7ü ¾E$œrN°ëýMzßÂßÃá}úÚúÚòx^ExVÞ pøÚä’G`Ÿ‘«OF„}QÍq ´/5Ä©H7;»U¤ž‚¼…¾.ê7ÓþêÅ4ø•ÇÌ/ÉÜ ‚1Î+Ë|M­jj2Ǫj3_Í ¤ÈYW?ÝÏ =…eΛ±¼°ó(Õ{3ßõоÒX¢]½ôª@+f»À÷ÞHR>„×…\ëÒÁq{>Ÿ,úmÜŒÞDsP„œ!Æ:W/ÍÅÓ·–¡T{dÔŒ2Eå‰ ,Fyô§}IT¤ãÍm ókµ 9öàTïâ R]2=?í“%˜ä[‡;2I9#¡9=zô®u$Zéü7¤lkZ¸>HýäØ?À:÷“…È鸙1F7g¢x@[}íÓ×d8;³„þO©=¾öJ‹WA¬ëLÓigò#!Û¿ê?Aë[^"ÕΑ£ºÀÊ.¥!!“žçÐwõ"¹½îEÒãÞ¦—%6囂0G=O#n0Aº2¼JÓöÍ6ºŽÄ”=šv ´Ðå’æK×¶`áˆòÁÚBcŸ±«ïád0]Äsü1¹9ÿ€ñDw·`—ýÓ8ã?^xëÚ–ÛÅ1­×Ù.m\ÜyžXÚU°N0yÇþ\÷¯¥‚Jrþ¿4x”©GxEýúÿ“54kY..&,Y†ÕFã#©8õ8žx«)JgŒÆ¨ÅQ Ïsǯ}½>Þ`°p¬wm ܱ=8úœÕ˜ Þ–™Îaò©%¶á¹<Ó§òõç)JÅœœ D‘üÇ9εâDÉϯZ¿âMÛMŠ×Q´ù`™¶´[³±Àì{ƒƒôük+Ížh|ËxS$àøTÊ[2Hš=.[B6‹÷q«Ü1Æ=n^Ooe<…ÇDÏ&¹©mu»…7*î¾X,NA©mï§Ö¯­¬ï#ù‡É¾1† p `N>¼ ~•j.(•%}F5íÓϹd;@ãŸA]$vîmÑgåð qšŽÛÃËky¹·Måàc õ÷5dN .é Dpé*`gÔŸóÚ¦-Çråil@Æháò‘ʪœ€—Ja›xÚèCdàñÜ~¼~£Š¸á2L Îù1À÷õééQ´AÓ$r:ÑJæn6ØÍ•)ÞÝEÁWÚ ˜5vöÓºBmÛk0 LÀÓî‚k@ £.ìr ÷>Ÿùõ¦^.§©ØKec V¨ÅY¶E¸í^Hnw“žIè>•2Г ’ÖÞÎco)š'…ö”>=Fy$g¶x¦^5­Ô&"í9è¸ä÷Î:ô­Xìâ‚5rïq#©,e…zò3É9ïÍcÏ6ž®D® ygåÀì1é\Ó¥ Êó:)שh•…¼±*ˆÙ. däcÓ$f©Üù!‡+”äã<~$´±Ã’Ö“`€3É_þ·àjœÑI¾I1·Í< ç$µµdî[ÅTJ̆ÖÕç+—‘†9ôô­ht¶¼™cH€lÒY,Qòç?…iÛ¹kØcVÉÏ9횥I^÷ÔÂUÝ­mvó@ŽÒâHæ@pÞP“ïƒMµÔÞ\÷üŒãׯò®“]c%Ôå¾Y¿ÚõãÖ¹}ZÖ/°M&pþ[AëÇ­i]êî‚o¶Œ»yf÷s4lvÂ#ßÄr£o®0Iÿ€Ö»oG $` nå#çÒºÔ†Ýt›y¯¤xÞ8—{.y'§99=‡J¥®hÖÒé¾|S:˜™µ¹ñÐ{ÖtÛJÌìæƒŽ›—í-d—LB£sy@íÕk¢‘bRâ ÉÜH»†G·áXɾ8Üô[[Gäï÷‹’r{{WÐvëÿ«VÛÒÊQ½9^øöõ:d|è÷ÔùŸÛ¥KCfî˜Ñ_¼–2dyˆJ°þò®;ìZÃf— ®~eERqîZêtÙ¥µBÞRyÄ`{ý}ªÚÙÉçG FòÈÀ’dç¯jƬ¥Þ%ÓQr´Ž»á¯ˆÑSLÕU<Ó÷'` ú×ÝxÎMb åÒeØ›Îx×2 Ç ½°;ãŸB:/Ô-Ä3K[‡•ä™WÔóÇã^ ê·Öv+ ç“8Q€É'*} #0ªu'8ÚjÌ'EÞ.èðëXžöëíwŠò”î’LŸÞg<õêOÿ^º9mô€ë«ë6R*© œçøv¨lçŽÝ‡N t¾"Ñc½ºŸì¿è1:†hÑwÜàÇËì}úqŒ}'BŠÖýõNí/æ…qn1†1çó뎽êU"µ›±¶±"»Ót‹í-[[¶²Ó¨¹²±%ÌÑ—Ææ*T(# 9?{ž8+RÕ5FÓŒg²ŠfXm­”Ø$n˜õù‰Çl^—c§iÖ×7:µÕü—ZÌÏ»í· æ2U\…à ä tÇ©¡kš“$’ 7’îiIiå#,I<¶g°éQN­=ÓÐ%Í7®ä^ øY¬I6£Dà‹uïþñïôéÀ®ßX?Ðô›F{pä»ÉÁD€ìI<öZŸ‰á9[2cû®ü+RñT ªÞ}–;™/d‰b†?/pèHé×'çšÚU`å²¹æoo¨' À0œ=pyãšèô/ Ú´)]uj¿`Æzöã¯5—§Á¢êPKs¢ÝÉÌ¥~GëŠÚÖ¼Všµ‘e¢-°,‘åÉÓh™¬UHAjõ4䓨äµ9mÛP6ÖÁ\Fpì9ôü+‚ñU›Yj³Lí‚VÞ .g’°9ØW¡ˆ’7i `n9b:çëPÞ[CynQ•XtädïùW<+KÚyÊ”U?3ÉRå{†n7°h½ÅÂÍÎÕX)ã¹Þ?•t:Ÿ„ã †ÞÒ`Í’|¢H?ψúe¼d€ò}23ü«±M3Ÿ¦÷¬iåZŸ3f¥}Ãwb ¡Ü*ÍŽ¡¬Iq#Ú»™¶’#\Np£S“Ðb¬Ûéi_.ÑÜú¶ýU×húîª%h£)ó".3‘ÐØtõ¦å¦…F ™sl6ÓAÑžíå¾p¦Y¦bT3ÿê­3º¡†x¢»Vvv2 éŸçïQÃ{e|QšS­ þ§›SÒ,˜]®¦' ä>½ãÓyŽS–¬ûêT¨R‚ŒV…´ ©Ò(Ï–m¹û›‡ž½ q¾$;õ‰”.0ª1óÎk¦µÔiÉgv yyá‰eÇA‘ʲõ¹$’öâÚW2,NÊ¥ŽqƒÁö®º^oSç³gìãËN>ëg9kù‡šõ¯hæËL7. Ëtwa³Â …ãñ'ß#Ò¸O èÏ©]¬K•V9fÆv¨êkÕµ+Øt=¥DPÄ%ÇÆ/ÀVUê´Ôc¹æR¦­vr~)Õ"“\2–ŠÑ6¾;™€`1íPj܉µU·¬rÝ}xDZ¬}ÒÚâ)o5wrTg-#w8îF~œšÕ²¿K[³´R4Üì>r¦Ttå-`E}†QRµ (ó/¸ùüÊ:µuvc“–ÇÈ%‡AÛŸ©ÿ>¶mDþ&tÃ@žR’˜(yÊä~÷C‚ ÁT ©Í{oäÀÊ$RAùUr0~~[aÎ'Üsή—c¿½1ƒ©ÀÏ$äþxÉì4ótêSäœyS#…TçÍv]3dUP¡P‚Øê3Ð~YüÅkÙÙ\|Ò¿îÓ8 z‘ëíÏòªz4p4¡dŠïí-óæBs‘Œ‚1ÀÎ{ ×Wy m˜ÙÕÛÆÊ>_Äñð¾ååÜìÄ^V‰—gR½ª•ørá~èìãüõ­¤…ciÇ\“Y—7P@®cg-ÈT ‘’pH=x®úµÛØâ©Ù-Ì錩l å‚´ž}±Y ¿<0íŸJÒ¸Ô‹íˆÄ¨¥·mœóßÓ˜æÚxöùÒFÀp]2 ü9ç­sâ¨TÄOššÑXz±¡OveÇlC©g'õ§ b2²=*6³tfó!`yÂ>Hü85EË 1ä`Ž:W‘V•ZNÒV=NEt͸¥6ÚtHŠQœ–lXdãùÕ{¼3+g–7Êr}*Øxãµ…[tca1©\’Î3MŠÞMNð%ª1Ü:1àzœö+]»‘µ+œ½ô,­¹¦}jM ,dÖ-â¾Ú#làÁ dg×é[ú„¾µÝ¡zä©ù Fòä#<åyǧ=»äUâŸ5·’Úm¼øä3[yªO§+ŸÇùV–»5rV/\ ¦˜•äO–òªç°¼~U‡}âM?BxÚWKÉÀ2 }ø'»zuéŸ_Ã¥¶×¾E™i ºIÙ ±xË~8 ŸÆ²ïÃw¢F³ðt¶òH$y¶aˆÀ%Uˆ÷©öK«5ÎhkŸ‰oRkˆÚ8—å†,óúwU,IL“ÿÖ¥ˆÃÝ]_Bè×[lpòéoÊ‘ÈÙ €õô©µ U®FNÕEäãדúš³u§Þi’3Í ª$»> ôÏ9ü+õ1-ËM7ÌÙ'=˜é\øxIE¹"ëI6¬kAaw"³À‘Çòe|Šǽ,SÉewÔ 'Ù?ÂíÏ®*н[Ër`bw‚«ØƒŽ˜öÍ@ûà…òØ'’€€á[Å™neê³ÝO5ÒHcäîF7øwª‚7ÖV+vp±1ûg'Ïlœ~´³…I<Åᇨ«ú /£.¾Z•ÝÆãÈz÷ü¨©&ö**Ûšzº´Z%÷—ÁHX‚yç_W”6“rÊN<£œý*î²¹Ðõ¤î?è P¾„Í Ð¢’ žý½=ê%OcZsµËš:¬ÚUºü»ž9ï+¤°sö87}ï-w'Ëéß¹´±“¦!Až¤œü믳+¬<. =¸W‘YYØôº¹n'ýÚïÈ9ëØW'âiwêbåU2 ÷ãúWYæEåè{œ×¯:bD\áÞ½¹#ùÒ¦µH])Ê¿ñ+ õhx ý5ãsqšö¹T¶Ÿî Žqþñ9‰MÀ?sÀí^¶ y/C“¬bÊÃ¥ AbÇ“AõÚ÷9#±õ?„—v™r6îÿIˆãnz0ö?ËñBùîÞÊ—ÂK»L¹w¤Äq·={åøŽ¡üŒ÷?Qüª„v¶_ê‡ÒŠ,¿Õ¥ÄO?Ü5Áx«ýS×{?Ü5Áx«ýSÐݺÿĪնô²”goNW¾=½GN‡c¢ªÑDÎç$Çóéõ5îVëÿ«VÛÒÊQ½9^øöõ:dqפdº÷H6¸GÍÀ§çñ9%Z⓱•¤x0EåÝêNX¾#Ž@TŒÉüMtS[Û[DŒ„RAÚ0¹>äŽj½î›5¥²ÜÙÅ:¨MÌÀ¯¦~îZ©¾5h-ã•qqVL.Èè@íSQƽŒÒ”žåõ‚âX§žÖÚÛÎvÿY°mù~ë`ó»’;qõ­5ŸOS籕É=±é’8ÉÅooDw¬ÑBq@¿ýzš’ꦩ¶Ó¹rïÄ-wä7Ø"•™›w˜8Èè=¯Z³¨KbmRêk˜Å˪ ‚FK·`’X÷vÚE#Kyq(E$´ArH®ãÐóŠÃ°ÓnnšP)h9y&Œ„‚w_¦k{õî_<ôg§¶¯!û±;& ‘Û¨΢¹Ðµ+W|k$g†(ÿtžs‚qÁ§ÇrÚÇÛÜÆÌÛ™7œØ O·'Ò’ïÅ7ÓÆD~L¨Ã‰ŒF<û¨$ŸÌ¥gÊ–¨äua&ìô)Gvñì%xRyüª{”Šîè©m»†W#©#§ùô«V×UÍ“,¶m ÑDç Àc€A?‰÷õ“K‹Cº¹RÚ˜%[jªŒ1CßàƒëÇ\q]<öјA§ª+-¤ .L;vð§ùÿ"žÑCc"ùl~sŽqÓ<~ þ5ÓE§ZÜ![T¾@Švo‰ ¾207Œ`àóÓ­`x¶ÞÓOÐÌÂáæFòÕFzäçÐÒœ&§~Rª7 e±ç÷Ò'Ûæ ¶i÷g…¶Lõª°{l¯›u¡l‡yØ »§ ¤qRHÕNdÞéÜ}®º]&êÇ—WPµŒ.6Û{ ޳6áŒö©ú»êzpÎ`¢”Zù§ÃGøR‚±¬÷‘<:rá$ùZé»>‡¨àêFs¥y®cº¼”ÎK³×'“ùš‚ssyxy¤žV!WqÏÐØ{ èe°[ijÒíÎc,¨ò/]«¸—S¿÷=iµÉN:Ø—Šw[~oô·c¨ðFž«¢ÅvcØÒ&2üŽçó¬ÏêO{ªÁ¤G™&*)Îç#ìqÿ¡ìmµh<1§ý½Wlvq·—Ê‚v•Uà‚Hæz~¨F§s¯ê ÒÍq4Œ7ÈÇ-×8?ê? 0ÔÕIó±V›‚åFûÀ-ž(’|¨„{‚ðy$ç¯v=i‚÷€‚رî}óÀÿÄÌó½ÎËXœôu$7§\õÀÆF iéúÜNñÚ˦¢Ï) ‘Ï1i >|nÉAúWØásxa¨òÊ=_*µ9”·&³žKk¹›iTl¤Œ3×!¶œ÷Î;¨­ë9wºF8Pw1ÏQüº‘Ǧkšš9£¸¸‚âI"”ŵHQ RÛ‘UÌÙ8GÉÏMá­.[éR$y§$~U®3ÏN WżeOkk_c¶/a[š#ç'k¼ÝÇãúþuÒézjÁ*L|ù@•¾Uïœ3îGÒ¹ÛxÏ–§n2:U¸Þ@»®Ð9¹iVQw–¥Õ¥)ÆÑv.¾£'™$W«¢ï:0Æ@õÎqXڽȎ?=críò Ý{ŸÀc·­j@–ÊUgqc*¤ž¾ƒüýzž'ŽÒKT‹L–G?yšAÐäp8³úWOÖ¥$´VLÊ8uõÔÄ·P„Hÿ3žHíôã:²·¦zšçÖþXØÇ.23Ü`úWM£Ëg,E^0äLˆOqJžÕëûu¤ç¥Î'I꣩`F^ Š 9UŽq#`0ý+PÉöfÜã¡t Ï<Žqüê±·H°Ò¬„p†üÇ?y¹•XK–1w±×‚„£ÌÚµÈÖE‘•T’¬~aÛQVT.ÝC®ÖÈܧv⦲‰p ¸SŸÏúRj%Ö$•pU[caº2?‘¯6rWØôc «ÜϺ‚ÜíwMì9Îì9ý*ªUG>•vÖf{…(J:ô#·8þµnïJÁæBQ¤', ãÝ0zúÑ [s:”›z*ØÀµ “ÍFÕà“÷G_ò*[mæ¶´‹óü;ŽyÕtéñCˆ#,¾ó~„Q?yhL‹³ k¸„JÒ‘’p¡qÀ÷?Ó5?ؾ͸FÌUÇ9#9ü*X$?gŸšD\ÛŽ9Çéþ5"–“‘Œšî£‡ŠŠvÔã­ZNN%Xâ}å[$¯O\Õ€®Ì HäÞTídÒœ.¢Çœþ”JQŠÐ˜sNv–Æì~*ÒŽ.CÐ~é9úZ–f Ù]âwG ò£ õÁÿ?…aiÞ¼Ô.t&$FÁv ÏnÿÒ»8ô+kaGŸ”‚Ýÿ Ë–M\ô&éCK˜r\$ñ=ÕÓ¤P£„•É9ÏÆ>¢˜²ÛÌnå1I+3ìrd$ëŽO¿n3RêšuœE™u ÃtQXŒÀö<ɶ´‰ÑÖ;ʼnݲÀûõ«žn ݺL¥5Ì–…a7’9šHÖFË0Dz-'ÃÏ"–ÌU–?”;pÇ‘ƒÉÑ®•¢›‘ Ø‘àåÉÝ‘œƒ^má«í½~v‚â[aiã’݈*}‰Ágä éµÝXÐ N—bãåòÊOã®w.ÖcÔPiÔJMPœ`Ÿ2;½.ßBµ’h粈…É"G<ŒŽ£8ǧӧ‘ü@Õ.'ÔíV[uŽÌ+IFR ÜÈœð⶯¾!Ë 6 ÷IJ2ªd.y Ý8=¹à×!âi¼G¥Ãæ3‹«9L¼WÊ“o £©Î=>QŸSDsO±uçA¥«em>â38ç§5è3ëZ|Þ¸µk¸U¥·x—qèJ?xÆâÌÕFOåO™ÕQ6M9f8Ä‘_Ïq®¾m,yj;Bß;+„ Œ<ÌŒ¯©Œœdêk±ðµ’[G6¡7–ˆä¢1~gæÁ=²F»žõÁØE%ƧŒ ²ÈWrÛ@ÎX‡‘éÅzeâ[Zh²Å*•¶Š"Fc=O{×&W´{ž¦6×C—ñ®¿ìpØZ³ø’\ñÏaüÏåXñMs¦XK (~ÍE(@KÜònaŽ›[®N6ãŒç\Ý,ÓÍzáS|‡dJIü=€Èäõ÷çj×HÇË`ŠççE_”ޏ"ºèÅRVG=Iº›ÂÎì¨0]Ø*©ûýk¢´´“í1Ir<¥ò¾S´’˜ü½H\œõä‚W0ÙøªõY¢¼óŸ“Ì]1ƒÆÖÈôÇÒ®Yoºýã†y¬Í¸…×¶1ojÝÔº2µx-Ì· ¬çÌ”í\•õ<÷øWufE¾ŸäBî†fùœ €`¡ÉãÛÐ×3£D#IfwO-WnüãäõGCëVî5Ø €-«,ÓÄëӟϽc&ï Yu:š+p¾l‘ '{“PI|²H±[Ê›!CœŠå¢i/%{©äbø`ãÒ¶´X”Ý—9 o¶sÒ¹äÕùz•¶ô.Ïq(”ÆX©vŽ År¾#ñAÑq ^òUÎÖgø¿Zê5»(g|¸ãj‘õô¯/×Ú CÄÒÌ›•`ÜÜžzúÞJ°œ[•îhxoN×|K5ÌöÆÿí'Ë=µÊÚ¨Ïð!ÜIéÈÍSÕŸUð¶§å[½ý´ø!žäN³w ¿"‚:õœƒ‚­¸·%î÷:§tc¦ŸŸk%û ˆ•‚(—kHûI Ï¡$ã…R{U+?Hë :…‘·çŽEpÍ#²ƒ÷>òãrdœ°j¦·â» îÒÎdx#+»‘üÁó:©Àc“Š£ø˜Tº$pEsm¬Ë;–œy|ÑÍæLÄulž¹3¾3°ë/w]ÌeYÞëc£PÞ&'¨‚FGýjs0Œ çð¨KíàŸ|[gvE@Ã~FG#‘Ú¤iâhC‚óÔä1íšÏ–qwèjå ÇÌ™%ŠÞÌ‡î± ’2@ÏäU‚6ÈÃ8 `Ö=ü±Ö8²ÿ6òpqÓÌþsO‘Ť{Ðìγ©Ž3ü¾˜¯C[[Ižn"–œÈ³4˜€ Üg¥P,3‘‘WÌJñízÔÎFø×¡ÓCƒ®¤pœ¶;f°µû±çÛÛä•}À?ˆ ÿ k^IþÌ®å7Èð þueôÛMGH)ìYÀ}Ã$‚ŸC^V!FU‰êá)Jp³9;DU˳`‚0;}kaJËŸ+,³Ís——K¤_5ž |¹æ¸ÙþGØú÷­Ë;ëhìÁT,ç¸ñmXÀßQ2BmÍÀÚCSòŒ‚O×ÔÖ¦‡¨^Z±Yã¸dp&@ ÷À`Ø Ôwå䚎ÏIŽIŒ×ˆ¢1ó*7 ŸjÚŠÖ ˜CGpUAãbü¼qŽ+*µ|¨Úo¶mÇâ+qníöÛSå ÈfhYý´ô${Ö%÷Нu(ó¦KÆŒRU$?QÁ<ž=*/ìÇ1ì ¹ȨaK2äÊÃiíSr\lU·2ÍtMÉnN gƒÉüqí]"YD¢*ž@ÛòƳ H–FšXŒ­»#¿¯¯ ݳlI0SÆg­ËÑ"¬“*ZÏ \ŽÙÍP+mEðp0¡~a1\*0a°í8ä)‘kºm*)ÕÔŸ-}+Öº"´3NÌ›Ia‡‰Ä‹¼Ÿö¿x»}šKVÙ”'õçýk€Ó‹¯‡%$ñ…9à¿uv^¸ó,›€6¸qÓbû×™ŒýOB—ÂmÌ«ö7(ƒ zôæ¼ïÍà»ýæ98ÍwšÉM"Yvá¼³Ôc±ÿëWTñ€síXÑÖfˆr†ßæçk~jóÝF(þ×q˜Q¿xÜãžµßÄp±3Œçpúo¹!€ýãuõÛ…~û2¬½ÄbMohx0²û†5ˆÙ[wÖóº%Æ}cyr¢*²·}ýz7Ðâ±õ„—v™r6îÿIˆãnz0ö?ËñBù®~¢—ÂK»L¹w¤Äq·={åøŽ¡üŒ×?QVfv¶_ê‡ÒŠ,¿Õ¥ÄO?Ü5Áx«ýS×{?Ü5Áx«ýSÐݺÿĪնô²”goNW¾=½GN‡vöÞb‰$ÈL|©Ó>æ³-×þ%V­·¥”£;zr½ñíê:t8ÈÞÎjA¡FB¨}Râïl¢Þ §dúû~4ûË‘ik$»K•RÁGSŠÃŽI"$3°‘Û,åÆ ÿë¬jTQv ’[ÄêáÃ9q†Üz§JçmZÞ9.ƒ êKsÊä7°άÝ^Ê¥-¢MܤˆÕy8ÏÞ<ôïïõ¬»½OGÒ,Þ9Ĉ„yhåË0ìÄtÉëŸÖ”j_Þ•’AìÛøUÙBÓÆ­Ì wo ˜ôÄeV Û¤*z¸22=úãšèõ›Óm@Ø•þè^Ý9?Ó×ð®×óÝhÄßyf”±‰xXðr8¾™íïVî°emìO5Ž3”9)½YÑ…ÃIÊõ•qöwa¸žìy¬Ÿ+t«°€KpOAï]HÒo/T†>ÆNâ:Ö>¥§$µ­¢¹h3/<ü¿L^*ÂÕrR’²¿SÔ–.8´ÙÔ¦©a ^e¼o0U Ò*€¸9b29ížµ–|_f-ˆº‚á÷1!¼ ®r;ž g¿QL¾¼‹ìfÂÕ]Ÿ1^‹Ž£Ó¶+–ÔGŠIgvmœx}+Ð¯Žœ]¢y¦¥«;ëxl®bK:Uò™ ¸úéï\D Ö$³¸º»U[·Ë$o&ýŒIÉÏpF1žqŒÖdžæ“LÐD;‚O+ ¼ û“Žã[úNª·=¬„™Ì¶së]PÄFv‹Ý¡JŒ’rè!ðµŽÝVæÎéÕºyË6AØ9aqÆ?ýTxÊþ CR‘m£ péåâ*¨9ÏLçhǧ9íίˆ´-Q|[4Ò»,wr²,.N6ÏB2GÞSÛ×sèWƒN°i.§S¹‘·2ÇÉèrkT”žä^ÈÃ²ÛøsQÓRÓuü×¹HGÜßóÏS·{5gÆÒ5ÅÂGjHœ2»ƒ–S¸ø ~9ª4ºÌ÷Ù‚Òyî­ Ê0‚% ‘Žx³.¯µ5˜ÙÖXæ‚Må\ðxÏ'°V®:Ý ý£Àúv«X3O íA-üX¯Ê¤Ã-ôÀ®WÇv1iÚ±ŽÒÜFÊwÎqŸNþ;]¯‡|m¡ÛÃsm+4Iq,$›BÍ•¦ÜuÇLW3âÁý±-ôŠÑI4¢(áH[v1IÛKô¬$Úšy©œ;–'¯^9©í킃pÂä"s»ì¢EüCV\ƒlΠ‚àŽ„zÕÍ2ÒKûØ­cá¥lgÚ;ŸÀdþ×{+“Ë®‡{à-%£óuy—u+ T˜Œp9c±SIñSòâ‹M\|àJçÛ ž¿•vpGk¥é¨‘ü–ð ]Ç’¨'·jñ­Fê]WS’Vûò¶p;и)þö«Ÿc¾º¤¢Cj[bª "˜Øôçq9>ß0« Q‰ÜC…2ñôþt°±•\ $ÛYA‘â¦ûtQ‘$hþf1–¸ÁùOå]ç vm#Å"‡ yjÛweñӈϠ9úöv;pcŒË´ ŠädõztÁ¬Ï isj÷Ïsu¼Á lqÎsìFmI\¶ü}ÒÇžœÿµÅgA:G ‰$ùXïeVãŽä~?­t'ð׈o-ázuÏ‘Èóƒû¬·ÜF{ñɬox?U}NfÔô˱ ~w‰‚n 3ót8½F~”·Z’Ò}M -d¹2tH”}òx?ášè,îbP©ƒƒ¹€êju¶´±‰Z8cÎ2ÇgÖ™ Š,;±“ëXJ׺5„TQ}3JO$±'ó®7[Óoö9,ã’IY‚*"嘓Àu'=+ÒæÒ~Ô¦dtNA={çž* Ê m~ îñ>ëx¢Œ‡sØã±ã=ø­©ûÍ$e6âœ4KÛˆ~K¨Ç!{ƒQ-忣*[AgfèŠIÇù=kè›íJ¾¶yu8­Þ%\¼—J‡Ë^üœãëõ®KFþ̹°ûNš©ä3²¦"(8>˜s§k#8Ö”ôD¾Óeð¾ƒ#ÊD—·CˆÎD8ÎAo^zŒ»×­uVŒ/®|Ø|ˆÉâUŒã¹ëœóŸ^µ€Ñÿ„€ØÎÓŒŒÿŸÊµôÛWµ»~så£n7b®Ôç ^ä§8Êû…YpÀ¬?^\Á¦ 0‰q{ˆžV ,0¶ì’[»ÜàáŽFsV´›Y^àê·:›\Y7ÊP’®®HùJŒö>˜â³5o k·7Ú]ÅŽªò²ùGÊ”©ÎõtbT©Ûõû«€9ÍpQ £7/¸ô*ɤ‘ÎØxjÃQ¸†ÝÉ‚$|—*6PÄœÄ8rH d‘½ü«Ø–š>Ò›x¥@ë ¯Ê·Ïsž y5r [`4¹ê16é®§',$ûØb8-Èf8, p‚¤¼½k ‚°Z[Û@ZEYwn.§æØxÆ1·×+ª¥Ô,ºõíæaN¤´{tî@. ‡\ûsXÅr³Ê\ŒHÌ9Nп1'ÃÔäU Ji¯ï–;h”[Dâ@x/×§ùéW&—ìÚD6ž\+s.q"Œ¾ÒA?1ä¯|tåü̹,t´´7W”‰IPO ç9?pާq-ýÍÍ»·iTÚ1œãŽøÁÅzŒöI}‘1C!°=‡>õæZž‰qa<‘KTd£.rG§Q]0nÚžT­} 6‹ÜCA¾LáL|´ƒ1ë‘]F‰erí'Ÿ¤!TF›pTóÇÓõ®'LŠx\¹ Ž3“ý+¨]WX´Ž0Tί„ùH;ºqÇ$ýi¸ö3ÔÕ¾– .5žxd(N Œ'©É¦{Óæ³·Ô †XÊȇæVSÁÈëÅA5ÀÖôÏ.IM½ÌbEBràqׯà})4}-6G¸K‹€äÆ…éŒ1ŸÇ4¬±çOò(@ÿxfªJ¨§ èËÇçTuMfÿKÔž);›F0†ÂÈŠHW¦~ð8äãÛ‘z;˜îÀYxÈÜ1‘N0wÚà·)j°Ë9 䎸¬­&T:]“¨çÈBFz¼*èn¥ó-Ü8ŽŠsÅs:|-oclêÀ³&F=ãó¢;õ¡Ì¯ \&âGÚ ‚OSòž1]ΉÇf‘òäü߈ãÓÃhV†}Pq»&áœgåé·Ôz ì¼=rM˜Wo0äÐcÐ×—ŒV¿©èÐwŠ.ë³I‘Aùq·ú^ÕÉ8çžãÒkî‚ÀÜï Ÿô¬ÈNW?FáeÕè: Ëx9ð*óMR¸µ×ï"B ÃÖ½96(à¼uúÿõëɼWâkÐHôÙ†_¼hƳµ;‘®¶ùýä(G·a5›f*7Aݽ+óüCó£g§é]ܨãægÔÞ]ÚeÈÛ»ý&#¹èÃØÿ/Äußò3\ýE/„—v™r6îÿIˆãnz0ö?ËñB7üŒ×?QZv¶_ê‡ÒŠ,¿Õ¥ÄO?Ü5Áx«ýS×{?Ü5Áx«ýSÐݺÿĪնô²”goNW¾=½GN‡V:­†¥’Ê­Ïâ:ŠÍ·_ø•Z¶Þ–RŒíéÊ÷Ç·¨éÐã#Çô› OM°y ·Yƒ³]Ä–ÆyÓƒšÊråW)+žÇ­êvöòGm#Æ 8sÆy#<·§|ÖDAît‰0Ì Hñªã¸\íÇ:úùþªÝê÷–^B̰¾7m8Y=·ëÐí!Ôš]Óã„)UP9ÏnõÏsËšC’²25Im4é‚Ûù“ÝoÅÅÖÞ@ÀÈàð1ØzT–öP;rªvô±©é2j–0Û¡Hãv #`ð:ñøâ£‡Â:|R$çK°`,’?*ή¥IùT«Ò§NÝJ~T,Å-°íœ88Î=¿Ò´Òš1æÊA˜}Üä…üI£9.À•#¹h€Â»z€Wßמ9«üî*?kK>g«1«‹“\±ÐåuI¦³Y$–óÜŸ•¼ äÇž>nNÞ¾µÎ{F‰¦5´“Äu) d`;¤¼{דÜË~¾(ŠÕçóÕœ»G1t.@#¦zêEtz†»öýPÛ³"(*…!À ·Îp}O5ÎiÚjjºÛBDÐÉ´„²ã<€OSŽ£Óæ»¿Cx×ráðú]Ou‘c”â8ÛPôôë“×ÞºÛoÚè:~¡«#¬énŽÖ¼ïPUÌ=IÈÇ•ÉÛÁª@Ò$n²ˆŸn÷Àüë¾èk-¼úœèÜ·• zwfÁöÔ}9ñ¦Ge½ª*<²üˆO“Ç?zõ¥¥¾“¤Eo Ž´@a·É$Rr~¹¨ÄVå‡*2¡KÞæg+ã}U­4¸ôðTM'Þ €wöÉü qm›´oprã>ÕkV¾:Ö½4ŒJÆùXùÀQü9ÉÀõ<÷&º&Æ)­ ‰c†7„*ÜËngj’6ðs’AŒ‘[P§É6eZ|Ò8÷ î‘Æà† ìú’qŠ·§ÚH·K, ,A””e,g‘µH-ߌƒùŠêãУ·žYdž)¥û¬¯@¹?{åÀbG"¯è6KqwƈüêTü®0F§^r;zÖ×±’6“û?H¶Žßl1É´–Š&,¹n¸ï·$àžÀWià‹K$°¼º‚-“I YÜ1 ´cœœzjáõ‚{шe¤PfX³…îsÇ8SŽG8æ»Í"çKÒ_"=Aãœ.ö•S䯇†ïØñŠ”í«‹–‰ó¼™#ÈwO™ƒÉÇOn½Z…͉×nQP1—'ñçüâ¯O’r¢02d$mÛëŸN3XÓ\Xßi·Z\05Û\AäÌìX$h냖àîÚs€sÈÎÚë­Üå’{= ˜tOëÈé"^ˆ)‰'ܱ7ÞÁäóÜãò««£i¶ÑyQØ€6aÉ—Ó’xà~U7‡<9c imŠ™ Jìw<êÍþZÙ9Óõ8õéþ~•E¡sçL¶¸àƒóÏvzîõé\¶¯ik¦Þ³È~D*Î0sŸ¨÷ú×quköXæ™æEŠ0Î^FÆÔ9$ñÀ¯ñ׋¤ñ^ª,t„±Ä{À ÊsÇÐrpÔóÀâkÚ;lu/u\šû]¾ñ®«ƒevðéjÀüƒŽŸ‡ 8ˆ‘q!e?{óÓøxÏ>Õ¨ý¿L¸[Æií•1ºhe cqœrK*Ý¿xäÛÎ|Åþãr?*»ö#ª[繎2vÇ#’"€@àt¬ã;{ÇT š³5tùEÿ˜×7\ls( D¬ ¿Ï’Œ0ËdôÀÙ)i‰£’õnS“ ùF Øòvú×µsZ’;&‘PE+ž<,˜#‘xô¬ôÖuXlg²GäÜ©I?tmè@ådyëÓ,BÕIŽ ÊÓIfâ[½_\“\ˤPŽí»8Û’~£#¯Ræ+ûmU$ÔP£NŒoF1ÓŽÜ{Œõ¦h•¶’òÉ,nÎÀÙØsœóô«Z浡 Ko]Ù’U—Ó'ü\©+óu=.K'´.Ú§¹\ ’¸<öãõ®²Xcº€Æ¡”•À#ŒQ^m«,3¤…ClP1“Zx¿QWSŠ(×’¬7>çÿÕZ§cΕ · —K,×OÄ‚v0‚p1ɽ鋪›_ ê‘4;ÒòXc*ÌLzá°yút¨ÛY[™D“À!sÒBr3Ç%O?©¬½~{8ü9©ÛÚLn|ø•KH›K6åcòöèqô¡^åUø,ÑÁÆ ÆŒî'šw—¾&s2)VPœsÏNØÁ縨t땺xí3R9.H {c®°ëS2M"X¤U 6c^yãÿ­]šúÎXõËgüýk»ð¦¤/m ´ºKvýÂ>PºßAŠâZÝa€ÜHàF~ãxÏ^çÛëÒþév—ZS^Ü%ÃHÍ·û 6qוcÿ5X©+ùtÜksy‚ÒY )Pä‚3÷x=êÝ“âÞ&‘<­ä†¢8?0Ï×<ûæ¶ ¼Q¿È€éYV¿f6­¸y†Ye;XqË·Oý)AXÙ)AI íÝÌk3$±8ßµŽ1è{uþ]kKOµ\ÍçLv¨!XŒòOüûVªî´¹‘×fÒ4rd³è9ã½QKÆåü²‘¹Ýõç8â–ǘs·Ñ´7 Œ:€ \ò8={ÔVðÍ+®æuPÜrsПéúÒ]Üy—¬Ì BOÖ•Ÿ”L{R¾¡m ÑåM¶…Ýü×ÞK†Úèñ†ëן|x¬ ëYç¸2‹¹|×àHòƒÓ»c×Òº ›ƒ*¬Ä‘"©^õ”Ö¨ñ8ýâð ÃcœÿõÍj!sI|5‹±j›c¼ Õp$íÎ8Ï_@sÐVžžÓËe2]9ó¢rœŸ¼09ýJǸ³Û«£ñÅÇb;ûsŽsÆjí«¸_+/œH’Uçœ`ôãù ºsëei#¬š5›”üÅ0_¾}ë"Ö1öË/PUÇlJv•­Å{f`–p ÛÓ#Øþ=)m¥C¤Ç½²vt?§ô¡¢nZÐï#žÞp€+ vç“Яã]“oi6¨ AóϯLq\Ž‚|FþÝpÁdS€ÙäŽz}+ªÒÐH®I9 ŒsÎOø×އvNÄ~"TŽÞ§%ŸwäþµŠÊ?Z×ñŠïj ícÀïÆ?­cÄÐ;âRWý¡\ÔSQ7¨õ/Ĥ‰#æaŒýkÇ|l»®ð’îÓ.FÝßé1mÏFÇù~#¨Fÿ‘šãê)|$»´Ë‘·wúLGsч±þ_ˆê¿äf¸úŠC;[/õCéE_ê‡ÒŠb'Ÿîà¼Uþ©ë½Ÿîà¼Uþ©ènÝâUjÛzYJ3·§+ßÞ£§CŒKKWÑ­,#0¯«°'pñéøö¯`·_ø•Z¶Þ–RŒíéÊ÷Ç·¨éÐã#ËnMž´ŠY&*9iC랿ҹ12QHÖš¹£ Ç˜¢&œŒmFÎA¸=ÿúõ×ÚkÑírãï× es Ö”›Ìã ž€ÕKƒyf›éð2EpƵHJÈÝÓŒ–§±$±ÜÀ R£)©ò¸äõ¯2ð¦½5£G¦Î¬KÚÄð'ºIüK5¢‡Ø’!'2ãùWzÆA/xæxi_C¨Tª<žÙ5…®^YD²Au¨Gl¬2A‘Tœvçê?J»¤ê°kIu!]AÁê3Yþ"ðõ¶²°M!džÕüÈÝÏÐät8­äÔãäcg yøfm&q+Ù_Gpf<,pËŒŽTàŽýk¢Ûòjàü5àÉ4íhß¾¢Ò:±%yl÷'<ž¼û×  €yÅZŒ€œ§)7"˜_ÞqÇ&­¦Š­ï cÁ'¥Xé‘Ò¦Åh‘ðÅyqM(¨§´ó èp==êµÔªˆ\œ'4¤ÒWŽ'â6 ÖÚ/‘ «Oqsû¤aÒ<÷'ðüÇ=«†Ñï¯,ôË¿Çd ă>vwlõôö=kªÕg}kV £6–Ä7 X±íÀCø{ÖÚeÕÆ¼n­-VâHT9VÈUÇ*­ŽIÏÍŽ:\ ´œÜVÌëŒWc-àe6hQ.¡R 70à*n…gs&°×Iþ¯g–qÉlœ’=z~u·§øv[¸å»ÔDðÈÎÄÂ͸¨ì7wçûW?‹lt˹m¬–IT! È0ŒH/»¡#ŽÝ¸ÓÞÙÊ¢–½KÆ[[he3f”Æü™IóÆO~x®'Zi$°–ëhe¹¨;HRÇ%°}‡ùæ½ÓóøŠ8ná– ·ƒÌ0R$ÎOVà‚OCéŽÆ·±_ø¦IEk];që$™ùŽN;àsèyÁ§J—³M°©WšÑ-x+L–½•OÊvEëžçòãñ5§ã{ÿ±ibÎ3™.>óÐø{zô5ÓØhÃFÐÓrÜ"Œ´1ÏÌÜôäçÚ¼ïZŽãVÔÌÖð¼°±Æê£$9<ö5„y§SÞØÕò¨Ùœd‘®]¤L‘ ˜ö â½ÎÚ!qs'"”þòFó.XÓ¨ÈÎÐ>îj¼:9‡MŠÞ%fHÐHØì½Ç|øššÞ+¸%T’ÜÈãi$À€Aɉɿ»ÕD™Ç(7ªÎ"·’ÞæXä‘%%À;ɃžIç×/CÖ·-¬â¶æpþd£v\s‘ÁÆ;g·ZÌM.ãW»†µZ‘¹ãAÄŠYG;†FìsžMhkRÍifÒÊ©,w;àª;˜ààµnWVF|¶!Ñô××5©™Iha@@Ú9' ÏR1Œg*Ê ;+Ù®u)/áŽÂÑÙ$>h;GÌ è=sÓ¦+Ê`ñ6³yhÚ‡c‘I“÷žYFÜA.Ê0ATàœåˆm•ØøKÁCNs&¥'Ú'™•¤ˆñ ¿/N2p1“޵²f´yšiµRêýÒÆÞÎK}•Ÿtˆ¤]ßÂ:®HÎIÏ àu=JÝ[@b´O*4Q€WÃëY%¼Š+Õ·©òcÆòpn¿¦íÉÎkAÅΡs¹ÉS8ˆœr2@úš‰U•´ÜžD÷Øô(B¬;AXƒx>ãð©È#y$eD@Y‹ÉÍrK«K¥"(—äÉ"'üÏ=EyŸÄo‰ ­¦é¡ÒÛîɇ$NsÜqò‚?¸Vu¤ Äø—ñ ]vàèºC:ؘ ÏbÙÎ0;õ=±sÀövÚ‘yà y(ùÙ²F==3È?P+šð¶„cþís+r€ö÷®»;E;+Y»›÷~LÎòÀÈ\ä`àO·¦=«žú)¬r³sŒãÿ¯ZVÈÂÙ¤Á € 㞟çÚ«^Ù,wqB?{<ûA#ƒ–8úÖo™= \­]CuxäYF²3•Œ2@çÓ¦?JÝo ÜEa/ÚDlè<ªÁ™I ŽÜ ¿¡h²Ãt·R6|³?/¿={ÿœVõ¥§úw˜Yœg’FIãéJ4×Ä÷ª=–ǜړirMŻʊí€Ê6È@õ#=ÁüEkØêöqÜÊ ±1 ‹=zŽ1ÔôÿëUx 5yÚÒ,llN3Ž Ç¥fGxÚm¼“]ƈ̻òX(ÀÈãðŸÖ²•$åvkí=Ý þ!1í„ÛN­„¹Œc(@g¸êk #v ôï\V·ã{½B팻‹ E$dg9,9ÏÐÇ¥sépu(ïgšI%W Ò3±cøîõZÚ4;²Ö7’<©\õpÀó‘I¼zîãö¯>‡Åß<‘†òYÏîYÙ”mÅ™O~Y¹5ÜZ\Ç{iÌG)"‚?¨¥(r—Nº©êY<çš|k“Èã§ê5Õ®‘®Gj"®*²ih#N¥f]®e ½“žÂ´zóÚ²5ÎáÓC•ÏÿžiËc(©Kc–×4de­ˆBÜ´dpµV²]~(|‹kÉ¡‰A`‚ðF£žˆ ×wm³P·ÃGÈAóBÄ,«žO~Fi&Ól—ätÉ(\$°b±ÏåùT³Z3Ó8›]2÷T¸óïgrw`³¾÷oǟλßjsh7i(ŽIU‘¶ÂsÁúçŠÅŸÊ¶ Š/-ÉÎ2Tþ ’qÇzì4Ù!ž1è|°»»ñÛüúSö’nïaÃÜwLÞºñ|“iækK9<²2Îy`=¯¾xô4iZÍ•ÜA£ö!ùã—Žã§Zçšù4}Dà y–ò @8\ž@ïžÿž”Ú°1K!IA;‡CMÍ-e±U+Tª”Iõ;Áq‰‘Øá†@RãñÔõ§~µN]AͨmÌÇnHaþ}©í43"½ÔLPcv2z~µ˜gß68ÀàñÅD«EìÉ)ßTRšÔO™m`Üä6ø‡PIã¾20=»d×µ¸( Ç'åÅtqÚØKwIÇîº0~ª³éг¼ŒñÍž’´Ÿ÷‡¯ÐúQÍutW-·#†çΈ£+o<Ö‡u`P6X ¶=h¹¸2‘"ÇqµÓ©êk64o´´±Ì›“¸sôÎT]½ŠVŽå¦,¡¾c“éÔW3vŠ—M*9ØrAëÈ'óÚ¶o'šdŠH\:¥vçŸÖ±§Yæ›ÌTÎð>ïÇòéUM;Ь¢Ö„Ödý²ÖdÜ7J ÔpJÞ¶“ÌÒbfžNzŸ¥fiÀA{ì‘‚£Øž3úÖŽ’ª4$P2:ƒ×8b+{œŒnŽßgñ¢î¤¡1îÁÁä5uúMÊ\LUBŒ¦ìnäGø×'¢ÄÓkúdh·F…›$áH<ôæº}Åíµ“ P#òÚ'ï/§«‹ýÓ³ Eâ6 ©$ÝŒ=ë°}É­ËækÙQBƒYfhóÎr{àâ¹h¯q5¼j["eݹd @í^mãH‡ü$×EUˆÊÿ!^k˜ð’îÓ.FÝßé1mÏFÇù~#¨Fÿ‘šãê)|$»´Ë‘·wúLGsч±þ_ˆê¿äf¸úŠE­—ú¡ô¢‹/õCéE1Ï÷ p^*ÿTõÞÏ÷ p^*ÿTô·n¿ñ*µm½,¥ÛÓ•ïoQÓ¡ÆG•øªÅ%‘R ÝK‚"d.:þ•ê–ëÿ«VÛÒÊQ½9^øöõ:dx¾”³Ü¼Ú‚ &”M¸Ëc°®gÙ}ŽŠ 펓A¸ŠÙc7NJ *€àS4íVä\®gž2ULŽON+e®.îäìo èÓ\Ö¢RßT?¼o0±gòÇ }3\P”¥+œªÚV‚¢ÿ\ó& HŸ1ÙÀ˜­ÍF$†ÞIæt\!Ï͸5çZ>¡q.¤ïjÌ›H Tí$sì•mjwšÌb‘•®ÖÜ_Œvüš'I¿vÄ9+ÞåÏ ø–ãJr‹¼$ä¦HÛÏAÛô®­üy§?–N$/ =O=?^+Ía[ø”ÿ H‘ãÎSж#¸1ª´-nãÍ`NÏr+²š©ÊÞ†STê;­ÍØ|j÷:´ÒÀŽÇ• “ƒ‚O§9ãÚºý Å ©Ú &UYù ˆyö?_Ö¼öGK±µkKGÀã¥?Þ8É>Ùý*µK¨-ËÛ¬–›° ÁÜÝûcßž+N~Eds¸©§ý§È 1±ÆxãÖ‹vÖšW˜„'’~ž¿…p:=õæ©d_R¹’+yÔeD9 <Ò±æ=>×l’H&V '–ÅCÆ>^¥K©% ýš¹ßGâû9%Q¤è²FT¯ãÐô=k›ñ­u’ÉËÃn&$d·û ~?óÉó&[uŸeµ¸ ²;ã‚ þ?äU½3J7Q¦£ae4ƒåÈdkg$.3“޽}ik'ÊRP¤]\­}pî°[,1 2I±_ VÛŸ~²|AℵµHgrQÙYÊù©œ¤½y$Ž3Û–Tª¹hJjÁ}ãK¯hWvzeÁŠ{¶]´ß¾@ì[ dÿw€s•­ð³EûN£.¨ñnŽß÷psæÉÿ€©éâ•ÃÜ\\j×åäù§”€ˆƒv §¥z}ÔÚ.g!PoîÎ 1å›=FONxàWEIÊPêQææ‘±ã«ãk¤ùaóö‰hU±·»ÓŒ`À…ch¦’bXZàZ‰pTy=qž{g§SÞ¡—L¼×õ+$y  ‘#Ê«ÆI>¿à¥zn‹ð»L³³ÍsŠ¥®dç$“ŒpyÇà îïTéI§~¥º°V±ËÛÛ®¤RH5þbÁV7Ü[=Oé“Þ´®l ©Kh‰’iGÊÃ%s¸è;gœ}®·]ð¾‚,§¼ÕD¢FæwdÜ8YÎ Úäçæ¼Nc¨¶¦¶šúâ+H¦q*D ó.Ìù@©†ØFÓ»‚JÖ1U.îv^'ñ ž€ñ¯Û¡žå")·8D8•ˆÇÍ÷~Q–ù—vÀCWžÜÿlxÒóOˆr«œr£ œpƒ8ÂŒ±wrÆ™Ó&·½/u<Ñ…|½¢.I Æ1Ï¿é]½—‰ ‡KKwÓT‘ÃY›Ó“š×Ñ®³5VLÁ$`nÏÆIcŽSÆ­bËaÔae‰.#'*¤é\7ˆµ›$tè–8+#ÄvùǺŒuò{ÒQNW°®í¹¡ãµÝÄÖÖ¬¾VâŒÑ¶|Ìq…?Ýã¯~ՃὮîÖîñNΣ#ƒÿÖª:N—q¬ß#‘ŽôÅzt)q ŠÀ‘X§PÉ‘ÿ}1ý?!Tív"½ÝØäTÆŒJc€g¸àTK%ͼ…ŽŸ$ƒ¦"H<÷-Œ~¿…,·«$Œ’Ú^Ûí†bg_˜dsíG1i\ÕKÒå,mßýHùIáØœdžÜñÏô¦\¶ûø® .ce`@üxöÍfÙÞØ´›Ôj†$€~˜ë[Gö• ¹TÇÒ¥^÷F”,Ž‚Ï^¶,¾j–FE‰-l4÷Xçc4«´KŒÔ\õÇåŽk•¨Fêàž JÂÔdŠ")eß· ñ’8ßW;nÆ isvKŸ"Í {XËÊ•`qÛ¯L~ÎøžÖoì ™$ÎçQŒœdLþuÐX-´Ï .>΃ ùqMñ ¡¿Óç†!´°Ê‚{Ž@5:§¨§=léÇ~ô•zöÕRñ‘›ÉpØ`À}ñUŤ¤dÈ?ôÐ,×AD=~•é>³»ŸCÂG•ó °½ë€··¤Q#nÿe©ÿν“Ã6Oi¤Ç²8P>ï··¥eVI+8hI¶×A?²¯V9 m§8ä@8Î*6&0c”*Hù†+¬ƒî°ûÌAù}*¦£oæ¼`D¬ÎN>^rN{qX)¸½NÎER.ýbYݪAõÅT‘7Æ}ëgUÓÒÖÖ9á*rûYr8Î@:~µ‡#†Âþ8¯+‘ΫB B±Än²Dž6Iƒê)‘¤÷W…üé³mžA»·BÕ`Häe‘¤#,s’OõÏZ½ …cæCŽ=>•\–ZÒªæîÌÛ{%ܪ§ÍÔ•>ü÷«©$±2ˆ•˜Ÿîç?¥:BÉ\éLÁgÛƒŽœt5ihgr]bâIVÉØuÉ·vHÇòýiÖ²…Œ¤ G¸ç×8¿ýu4ö¨Ï¸ÈT)éIÏëúP½Z6TÚùâ±n6±i=Êwº•Ò̪Ó¯*ç¾NGó?Î¥ˆ–äžsϽTšÁî^KPÛ@ƒÈÕ=ŒÌJÅp6\tö“e.•ÉZšŠ÷V‡m ¼ÏÞzš.ÅT`‘PyÒ2d·•3 ÜP²í\dq\÷}—n¡‘"ôÇ´É´ùíæË¦9eíõcNr%ܱ›±Ó¯¿Ó¥[²#•ꣂsüDãZ馧¡åU©y»la5Î8>õ · ååÏ Éö­ãeõ¬ì" ;gccŒŒãê3ýkÒ33¼w‡cc•ýûôä×\–†|ýGCÜ9¸—~3¸“Õÿ¯ãW4G‡!Œ˜O6 <ýó×ü÷«VéÓ» ?‰I 7>£éúU;(üŸƒ‚VâfŸ9 ÙÆ:zúçšk@ê17öŽ¡±™b1Çãž½Eu º‚øù“¢’?•‰þ-ÃñÆJâìf{¿^…ùvývžp6ž¿túe܆H¡2¤Ím¿68#v1ž&¹1)¸Èê£dѦÆ[ù‹ã9ç¼f¨¾äSvg?–jìÿ¼¸šBÝXœc§5 „‘Èô÷®(%®uIó6$?,LGMý~zå|hOöü›q‚£¶k¬@Õ›†Î:W#ãWZ ÿsÌ×FÞ¹uû“ðGò¤l‘‚I§ir?*õO4úWÂK»L¹w¤Äq·={åøŽ¡þFk¨¥ð’îÓ.FÝßé1mÏFÇù~#¨Fÿ‘šãê)v¶_ê‡ÒŠ,¿Õ¥ÄO?Ü5Áx«ýS×{?Ü5Áx«ýSÐݺÿĪնô²”goNW¾=½GN‡W¤Íw¦Y½¤vÑ@"Q$¾x/"“ŽŠ¼‘øgùŸT·_ø•Z¶Þ–RŒíéÊ÷Ç·¨éÐã#ÌX™<éËÇ ãæePÓÞ¥ÑutL¯l©+´A=õÍÍìÄ]JU‡Èm”„ 9äðw{uëÒ³.<ý[å‚Õm—Y Ùúœf¬M®^-ºý³`HVØ2ORç­g_=Ë4o!PìBî9ÀÉöü*>¨¡Ô>¶åЛO²{{ œ[޽Í^ŸX·ûKÎÍ`ÕDr°çúÕYaÿFd–bʨ†$¥QKRÖ¡O»$nIÆxïRáÊk*üý,mß_ÜÜǬñà ³ ˟γ%·Ôžw’E''’6ÿõª—ÚV;¤3Å(<ìy?Ð×im{£bÐK’ɵò+÷2r{Dæ|1¨E%ÕÇšpè呃‚p8ìrGå[ú—ï]aTÆâ{œÿú«×láÑoc’Ú\¤q“÷ÉÇŸ^õßß*šY¥gÆ@˜©Ûéíß­g:.mI2áQXêSPû6–±ÆòHEU–ä·à9ëØ çu{›P¢Î»äXJ²F¼dœp['¯^>˜–Å…Ýìàæ9"(ÃvЙï’@=ãš[[,î^˜^8˜nÜNNb1ùºc•Ë94¥m ¿ô™&ŠÞi¬(Â-ÇvÂqʃӠ¤`ŸË?•7O…l4‹kXc_8ãsçn¹ã Àã8·mtDÔb‡y'ËÊ‘ƒÓœuÏü+‚üósèRWÐÔøq`¯¯Á1»’TŠ'2ƒò$‚6#ïŒò¹ïŠô/øÇKð­”’]ʯq³rA»ƒœ8;W†ìIÚB†#ióëU|=áf±°ÀԦ̶ʭ—œ–P © ¦í¥²Ì…~Eei>òõ(uoM¥©œ¸†|¼6å”A?; nrs…Tõãevr¸JîÈrÛx›â}×ö…ýÃiš".øÃ ¯2mééøë]„í*Àæ×Í J' &±å‡EòïÜItãÊXá ó÷w`ýÑž}Ò¼¦êÅ©9\Ö/±Æj±³ÙC)—o ç÷-œç§Ï~zV[x÷r2^¢ݹY‰ vrIô±ÉÍz6›g,°}¢ñÃÍ#n´œÐ{~=k#_×­PÜØGpm „ùwz‚ɰDÌ XÔ€IrFÐJŒž£åÆš•ªû:ÓÌéæpWlñ}eVÖâh¤•0ag‘ ÉÈÏ–2ÍŽÓkŸ[ÝD%Ì–Ò1ˆU#!BOÊ»[ÃTÖcÔ!±’×áÕm­Ëã®OA»–är ñÇO´2…i£ $"'`vÆ1ÇN3œW§S )S§¯vgR©.yœF“w5„a„Ÿ2œû÷Öâk’Fë›r˜êÉ -Ÿn?­uöä¢>Ë\îÎ 3dqŒõ<qQKm¤^ÎÞY¬RÌ ªÇò9?Lö®¯»hîûÂ=cc ¸5E´ HY"Ûò«²a±×‚;Ø×·tXî’;­Øx¶´O®â@ÇçZ²jorÖ–÷YË2H.çŽHÝZÆñÕ_óŒg£kò:TУY|Èu‘—½HǾðj§êM檵¤êؾYB8ù·JÁ Ô gaÚ䩟¨8íéW‡‰„F/>ÚXĈH9ܧ8 `d_j¥Sûßx{Ñ}Å•¶Ô¬îãÓŒ£<ªI’NIÈQüû})nµ;·ýɲž&`rÁwclõ8¥ƒÄ¶.$?hh¶ŒéÔ;gÖ­A®ÚÊÈ>Ó )à‘F}9­.ÞúœòÃÆýO=Õtarïº0êzÛ9ªñxFRWlä !?†EzÊ<$±1£©ÎpAœtÎ1Y³[éñ6V#,Ù4ϯª”žÀà‘çz~—ýŸ|K$hþf²Gqœàr};×qäÒMqØÞ[À0™œuê3øàc½X’Â9[w™"žÌ¬nÙÈ4+-©}Ó‚Ì@Mè8>œb†“Üqœ£ªÐÚ„†'¶2:šK’\‰˜ÆóOL㟭fEuxªq‘Ž…e*O¶ÇëLþØxÑZKµSè¡ñø)'ô¬ù{›J½£hõ*k¯o­p¤L«óX\~uÍM“Æyöí]uÆ©oµCÉå´‡%\n>œãšçäµóß²°† +h;nqËS5 ±ç>ÇùV™Þ¯!YXž8ÿ8¨ŽŸ2/Í€9'üzw«Ég [4ó\!›!{•‰ÎzN€TÄ‘¦Üç®qÏ­oéϦÚé’<±½o—.Ë´/r§×·ã\«‚7à‘ÐŒã¯lÓ`¾wR²34YùÿóúPÐ&o]*,›G’}ɪã¨àb§…þ߸Ãcæ‰a0'™&UW«\’NæËTgÝÌöêìˆÆO,cÈÛžÃëŸóÖC=µåªÅ:Ü8`¹Ç¿çTîï!¸PÄ|€•\³gqéŒäÿÀŽIâ¨ý´‹'v[?)ÿgÒ´•d“3糺6­¬D­äÚê2¿—÷—v[¦xÝœåSÜØŠ/1å.‘ÓžƒŽ;W/< âbŒàéÁ>Õ³§<“]³_daTz€WœgŽäÿ‘\óÃ8É;èSÄI« F8Âúp §<Ò ”fùüO9ê+N-ʰè}{U[(~e,çœôéþqZGCÈí¦ãbÔõ=+œ¥¶žD*9rÎ ƒžsïÒ¶¤»6QI(oOÊÞ¤û:W6D×$%ÙÛs“è=O#ó­h¦›e;v÷FfdÚ0Š2ý ò 2Ýn%ðü±ZŒ?Ú%,[°Þ óïBÑþÏpzá¾ðµt쾓0°RY{qÇ«VÌý)š/ÜFUBy3¸à”ã?¥t¶oö[£rŒ$fQß¹ÈV”#D²× W¶ÒË&Ó²”“.W§PpA#޹ÅE§ÞÁm4òܤ“NNÐù*7c$:ãVî{öü¿¯ZΤ’êtQkf¬>12–âÌIØ6’ÿ€ëÓ¯ãO‚ܽз`Á°O®Aþ\}jÕ­¦¢¦4Š1±°•k[è2Ûî¸pß½ÉÃ!R¼úgõ³FÐý”c-‰gâ'ÖåÒl¥¹šåÉaò¼’z Ià2zWE¨øÝt‹X¡,®õ”%f¸Ž `ˆ´mÎ|ÆüßsÐ7!¹±ž{‚Öå­DØûFÕÿZ*¬x$·N2r7Z Õ¹`DoƒÑŸÖªHòØ™EÞæî•¯è®òÜë)©K{!æhÝd'Ü–çëëךî-õoßC½µú[°þó)Áå˜`óï^6ñ4GkåO½*£ƒJpSøŠŒ¹uG½ZYé6Q%»[ÜFr¦]ÊÙìySÓð«6Ë&‹dò%ý×—$+HÞZ(äásŒuëϹÍ|þ²2ãkzçÒµíüK­[³P€Æ’œð#¦ŽwVg»§‰u_²˜Ñ^B ¤S&0IÈ_lõÅsú注5Å®¡vûÂ\)|¡Â¾à0 ù~@p3’$àc‰Ó¾!ê6бºNF>f\1ü¸ý*{ß ë7¬@‘ÆÝÆ@@ã’8ëÇžüå* K™IGsº¹ñïö ·Ð¼?A©NŸ<ÒíXí" ó>Aì=†8èòØëzŒ1ÂÂ-O#ÈÞBµË1?¾r{±°v§s¬A¡xCì·RÏy­ä9–R<¨*0 1ò™U†@•>µ×hvzI­ˆ :*Ž3Óÿ­éZZMå¼hŸm;d*X( s‚{ÿŸjâžš”žÇLj{7y–¼ÂŠ¡°_ÈÏÖ™0i"$mŽEù’F&½#“ÚöLéÂBœê{Ý ×³¿ ?»Ž%bßf;€ì?Z給Ӯm`–ÖÞâ9Œ ïry2A€P>œõ²Ã µt1‹±f°ô9Œc¿N=*•õ¤î Fíæ•د``^Iî8­0Ø©ÆiÝ3Ô©JœâÓG==²Îæ]*â2~[yQÙÊî%ºzÅTM.ÒX’D¹–ÞåÀeŽò%NH ÇæïÊÿtûWKª^3M­‡—æÜÈTJ²çhLvÉžÇëX3ÚÊçí7m,žw+&þ­Ô“Iúpkè¡WEíÔó%…Œ©6U›G¸³Ü_[[i”Iä 8èðý Moi®¾EªËt€óüÄ=8ÝœgØUS–P­žu 9Á¨àuô­KoY^é‡R‚9­A¶\;ŠœepqßÅl§ _S àê§dÓõ*Úx–ús$hÊœÈx?\ý+AE{E?Þd“ÁþuÛjaFu[Ù•[…¹‘]p:|¬~8¨ïÁ‰Zg³µ™•Í2…\÷ÿU·{zr;¥Z ÙL©ex•iSû™¯ˆ´ÙßgúBÕçð$Õ˜o¬d-*]Bª~ñ“?ž+—´´²Y?Óìïí¢Á&kiEÇä¤gÛ¯ãZ±hÚeéì:ÛÛ‚H ©ÚIvp˸zww›ÛSÓ‚îØÒÜ x$M¯’7È9ëŒUK»[v6[XÜÉòîe8'ùÖφõ3óÄm.ó&Ð¶× #õÆB/ÏúVT×ñHQÞpéÕY‰?‘ëô£­Ð½™ÖMgj°¬î"@:‰#'<ç#½SŸG™æC¡*”·š‚MÃðÛüÍQ‚ãU–âH¢·a^éNÌàà€€» ©P@=qSÙë.sö¦·e·5Ž»~éëÓµZ‘‹¦Ñ[Vv´¹ØPäíl©üùÿ"³…Û îöòà¯G=3ŒÕÍUÑö‹„š9 †VVWŒŽsµÁäc#8*GQD§º7’Ì>P9ÈçÕJjÖ%Ó{Ø–×ÄSZ¬m¦DÀ?½‰”²û`ýNi—Ú·ÛXJ¯µmò„ ãžÎ*E·Š{y›@9 ½Ïn}9çéYב‹i~ÑsÉ`2Ùo˜äqœuÆO$ ÏjµfîCºÐt‹1Æè~CØ ãð¨’3$™”áÇÇÚ–Ö_9¤'l2 m’Û»Œõ?Z"7lº³1bd!ÉãùÇsþE]ɰ.Š9!ìþµ¡§]On†80¬ê ÔžßΨE é;d–Äðî˜=ë»úâš’¼ $Ÿ1~ðŽ\çè;{ÔÉ] ÇAcwpãË”È8#‡¿?ëK%ɹ…ÕhãÏq“îåøÖrkVë°˜îQˆò î0I­}NÞ7Rn-ƒ7Ì«4›XŒvÖrÓ ¬@ïö¸ä»eÜ ÷Èç#€ªRÏ­ãVe‘>Va‚¼ôÏu5¯ªÈa!R‡ÌnßÂ=zû~µÎ[á|ÆH$8ÆMU/…²]î’%Ӥ𠯒5 2‘½¹Æxéë‚Gãô­]5ÜiåR¯,€í=·iR=°ˆ ÙêÜÔvCoÚ´Èxê‘䜓Çâ•VåÚÅ{R¶úÿ˜¶¹È# _Ô5&kˆIÚwn(Ù€Ç9ç=+>[ÀAÃÄÑžq‘´ñVî4ˉ'¶¹,†1løqÐ 3úb²ºšÓr,ÆY²dϺº­ç€_$çšE‡Ë†O”ç UsÜ•M- Ó]Û9+öpQFvï›ë†­‰|kw.‘o§K6ŽÝvÆÎ¬Ì¿LœÝ»W1ŠF\ŒRnú1Ù#Nç_Õ®Š4—²nOºËò°üG5,’Ï+I,Žò1Ë3I?Z©#Éá¨[ÃüJÒ‹Ñm$qÑ¿ ·ÀÆA¬å¹…Ï$©÷aB·Ül®jeã#N·vsÎEiÛY@îJ9ô5Î ÊxíV…áFXXΛ{3hMu;{K%S¾ 28Êõ± vùÉGIPWm¬Ë #‰ÛØzWAiâÀ&Ù0 \W,¡V§Ng_ê2F#¶šÆì’±… þ¾Õíw3–¸ó²y'w× §‰-Oõ‹´à•>¹ëšÚ‡S´ºˆbEÏSYºÒzH¯d–¨Àºx‰2£ ¹ïXWiÅÉ$õ»É!²»VªäÇó¬;Ýþ©¤TÏcœÓUô!ÁØómJXã$zVOÊr+³¿Ñ¦2spA¬É4›…sº¸5× Ñµ®a*otaŸ1 ã<Š Ò!ä)ƵÏk„Tod|ÅÌ{wŒ…<9ûqúVŠQdZh¿á{«Ý3Íýž"7cøÛ²SëŽÞ•ÜkZ¾™¤iŠ÷öÐÝd¾èsŽ;vÏe¬]hñáYp@VéÈïëÏéÇCXZ„÷z•Û\ÝÊÒÊÜn>žƒÐV2£Ï;½•^XYn,š¬Ï%Ó¦w@K` Pz8œ*HYr»½1š«övS‡ÏÔÓBK²d^k¡Å=Œ#'©¹m­jVa×1¢°;V Ƕq[–~?×m˜ïž)ц RDŸ®Ügñ®-n&ÈÏÒ¥2Ô8³eQ3ÐÓâTÒe¯tÈ¥sòþîBª«èþ}ëWIñÖ›qq˜‚êØÈÛ£vsŒ .NsØÚ¼¤N¹ç9«v7íe}my )–Úd™t%X0϶Edé¦õ-NÈö«[ hd•­¬Ùw¹…”`ž€°©å³²ÔÅĨKb^H_#N}«”‹ãeóÿ®ÐìÛý×qÿ³V„ôɥŽû'Èüˆ«öÝHÇÚÇf}OJûzS Ƹ;J/8àôËcýãRǧIci*YÅÝEryÏïê8Ðc‚¿ñÓ\j·j§LFU+ij B£`E¶œcw|“œcÝ·Œµà!U‹M½ –“Èù›G]ÜŸŠÖÂÊQå’º7…h§tìκ [´CêǮHÝù“ŸÇ¬B-Bedp¡9ÀÁ˜Ç]ÝsžÞœæ>#[¡-¨i7Vð/ÈDƒ?ˆQùчǹŒ·ÚÄFFÿU,,­ø²†­qÇ/§ óÆ:[©%nk˜’Yý’O¶5ݤM !nÆÁÊò@ÜſݳPë×Ågkos–óÄ)N?Ú\u<èIã¡®¹/ôÉ¥0Esorò)>L3¤„ûçüö™ìᵈAmgµJà±mQëžÆµ%7-ÖÆÆ86ìÏ,$>ŽzZÛ·¶ŠßKµÅÉ–Rî²BNV3…uÇü\úe«¬:fžˆ Õ¼ry§UÎÕ|dŽ1ôàñPÍ h°»Z•%¹&VÉæ1àglœqëÏ|»'tûΧpAøíÏ #¹Pq±žêIYH$ä /nÞ˜­£-/!(6ìŠâ{8…WØ~îé ã×n:Õ¸'¬ [_H#1$…H8ÎpÈ#ŒôçR}š'*¬¡zϸ­dY¢m¥ž2?.ãÚ®2Mé¡S¦Ò/[ÝÝÚï"à”ä§–ªôÏN¼T±ß˜T„··ät FO©æ­‡GHî_äóÌŠã#±ÁúÔ_aK…†FmщÉ'pHúãŒbµÞ©œRq_dš×W…P4ñȲ©ÊˆpWÿ<~´w¥´²»yù”ä `äñÀúsY÷:vÈáXܮ܇fÎO¡þ!úߎcEp¨Ÿ,¹Ê©°pxê2üûŒVôÔä쌛‡]åÓ¥ˆ›rË!è„óŸO§'ÛM±Q‘29RÙÇáŽ+—òïdš=» :vïíV­§¸³Ÿr. PsÇu=h’”~((=¤lÅ^3"ZG»Ÿ™cõ…i¦‰k ¯˜d1Ì™#c³ŒŽØl÷ö¬;k›ë[mð,‘Æä¾ï+ œuÉJ™|Ct‘dÃo'«˜ÎHü¥dªÇÐÓØIífmE4˘¼d`§” ‡öÀíüªŒVW)9—¼%ÞF' ‚Àtqë×Ò¢Ä)*Èm¶Ã ÏßÜAú;ûÕäÕtéå¦0BÙó$t9éÀrzúñíU*±z¢U íb+PÒx³MM»·3ü»·qåœÿŸJ뤴XcXcËòï=ycŸêÇ¥r\–Sø«O[[**¼|¸2½:ަºÇI¼‹Æ*C[™mÇQž:û“×Ú¹ç+·èi8%êg=ÂM)bp@U ŒŽ´ÈåYFAVû½éYzXy KäÄ•ãüõÖ©Ú¼JûVXÛø\ ÷úVrÑ¢fÌ(²ZJÅw°9 œzW9㟒òÐÿ,Jß‹2ZºFFN[v:tÿë×;ã€ßj´Üyþµã#ZŸÂg$áIñÜSp ‘N3G>ôÒ˜<׬y§Ò^]ÚeÈÛ»ý&#¹èÃØÿ/ÄuÈÍqõxIwi—#nïô˜Ž6ç£cü¿Ô ÿ#5ÇÔT–v–_ê‡ÒŠ,¿Õ¥ÄO?Ü5Áx«ýS×{?Ü5Áx«ýSÐݺÿĪնô²”goNW¾=½GN‡$ŽG¯á_[[¯üJ­[oK)Fvôå{ãÛÔtèq‘òšÀsùTI7±jInKŒö¥+ŽÆ£Y—¹5&ì•…Eš-4Ä#˜§Iç?….Ñêi\v#ÇÖ“ê]žøúŠ6ïEÅb¤èrQaƒÓ®PžÕF検qZE‘%Ô¦G4GBA§ŠCVA*^OGÈ÷欦¡Çï#QTfIÅ1Ýš‹uo ኟqŠ™rT`}k”3!Ê’±©ä1¼³ËÈfÏÖ®ÛëG€d9ôÍsi}2õ`Ãý¡S­úŸ¿â¥Ãº-T}ÖÛø¢êGšÄÐóZö¾2gé ä|ÊpkKˆ`8^*@¹å\ÖÃÁô±´kËÔô¨ˆ’Üðz¨Áýk‰¶ñʺR}rs[Öž/?(c’cЇN¤KNêp­µ¾láPÏ&²¤ÒæQÌ,@=G#üó]ñ41mø9þ!Áüªí­ý¥Áh„ÓrœÓö’ŽäºIìp“[mb zàŠ,݉ùô¯IK :iU¨ÉÆ <~µZûE_:!QH®@˜`d€xç¹=þ‚´UmYœ©¾ˆã¡Ðæ—’€å‰è¯ëKu§ÃlªU÷ÎÃÏùÛjº\Ž-’ÒN|„y\¨Î⼌LưeÑîQÉd21êwdþ´ýªNצû›[î“ÐðªÍ ©ÉP~•Ô\ZÀ/!=7.3YòÚÝ8•J¢aÈÑ—DOšdËw ?˜¨…Õ¾ý¬äC²sޏã¯^õ«.ž’xúVlºiVÜ„PzVÑš0”ZS’+ —iϼ:ŽHš*’G¨Zø§Å_kH¢¹·Ô„KóFžTŠGO˜® üêͧŽïmg»º¹Ñ|›UÞÑ…À Hjò€²2•Bp9;Ͻ]‹ZÕb`[ÙŒ*6ˆ‹eq鎕.ŒYJ»êzíŸÄ]Ò7º´¹Žv8f‰U•}ÁÈ?¥lÇâ_ _bÔbóÍ— €¼³€=kēDzµŠxãB¨Û8=ºúTçÄVSÊw¤Ä¨£]£˜³îIÝSìU¬W¶G±yqêóùš}ÔW~VhH“ޏïü¸©ï4™˜…Ï\|¯òœÓŒþµãQßè³I!cyo¹aí–b+_Oñ«r]Ú$\$y²~@ ¿¬ž[£hâ#±é‡Ã†Ò¤ÃЃSÓžê…ïƒcGuˆXÕ¸ÆïÔñŒýsv¾1Õ£¸ûKjÚUÜB?”\¯•·èSž½súW§èQjúï…`Ô¼»Ie˜¹E!‰×eàÄôöëRáU Ô¦úœ–áKÍ>âk~ e!š"Às݃d‡88Ï5yô‹QrÐ*YÆ y-h¤öN 1ûáô溉cÔ¢ti4«‰PZXʸŒã§]Äò:-g_êvž`I§ûUî6)ç$cùTsÍ+46£RW¹çÚ÷‡õí‹-D |‘Ç!]¡x>  ëÀö®`M5ÍÁWiÊ º¸ùÀÆA=ñÇ^ƒŽƒ¯®Ã$7ö³4J»ÔgÎFßoT ôäý;ò9Í™Wuâ‘æ²(8qן˜`cüâš•ïqµ(Y#Ì ª¢294'¹q¶>¬Ç ÿ^+Ô"ð픳Bíe ´¼áÑXóÏ'×ü÷ªçÁöp²!¸…¡Q„R¥=N9ïÿê§^Œ%RV³G ©<[XÅ:ªàa*•z`᱌ƒÞ­ãe¼†ÝüÉÈܻЩì1ߎúö®‚÷Á“O/ÛÛRBìHe„Ï|“Œqè~•ÊË xƒJóF˜Í-²íDeÁFã×ôíž8+jjËVqÕ³~éŒ5KmÈÿi-å±$IÎr½ÆHÈoÏ>Õy¼ã-­¼,²Ku³ùlPùŒÆÐÅ”dœAôÆš6¡ý ßm´˜!}®mÑ\gÐm8­6Çû;P]BÝæX¬\M#\)]å ¸M¹%‚޼ɮ/d`˺}¨½-?•Ë1óþ® ÙÀ ÐðÝúp8#'FU½E3BüvÆÜôú q\Ýô²Xk¢ÚQí¤ÚÉ,‚$BOÌW<.½28ç5·£‹‚Úêia(»REû¬HàÐ Œ§85œÛG-E$î™'ÚakÓ ‹{[—ຮˆÚ@á~ }}DŠkv w¯îŒr8ã'89ÏܘÅTÖ¬™—í1GbÜÒÏG¸8µrÞÒù1ÊäñþšX¾o9²Ì“†b}3óë^œ°ôä¶<(fšr¿3ÐËÐ4ÿ±xÂ%²(ÉR¹Á ¡é“A-¾rŽE».A\¹8ãêzg½yÜÙúœÈÏæÁ3ÆŸ6@P€‹ž•ÚÛ¸¾ðâ¢\”3‡fêÙ,¨ÿëW‰^›…F}f§¶„eÜÄYV{ÈåŽmÑã­Ö¦™QœPHéíQ\*G±£DR%BàŒvþuM®Ü²g)ów>Øï\îïc¯E¹¯lî–¤F™ ô=1X>6ÿ›n qúVå´£Ëu˜¹ÈÏÓ·ãXþ6“3Ù0L~ï•üª)ÿ%ÏøLãˆã${ÐFŒ‚­I˜óœãQ¤p¤šõO8úCÂK»L¹w¤Äq·={åøŽ où®>¢ .í2ämÝþ“ÆÜôaì—â:¿äf¸úŠ’ÎÒËýPúQE—ú¡ô¢˜‰çû†¸/ªzïgû†¸/ªzÛ·_ø•Z¶Þ–RŒíéÊ÷Ç·¨éÐã#ãî0H¯°m×þ%V­·¥”£;zr½ñíê:t8Èøó€=i `ÏÜÑÏPM&i=iˆ™eeþ/Μ.Àá‡XšcsRâ™JM ¢—+CºftˆT‘M+”uïW.#¥”ƒôª€qZ#& éE/AKŠ`6— ûQ@ SF{KÞ’€œ®Ê~V#èh¤ÅXKé“‚CqVQR0èGÓšÏ#ÖŠN(jLÖY­åèê¿'–G*ÜV&iË,‰÷]—èjy{¤mn‘GΦŠþh_¯=È5üÊ9!¾¢¬.£pèG¸æ¥Âû¢ãQ­™ÒÛøŽxñûÇà÷æ¶ì|ZêÛ\†BA(G PrSù× ³[È>Y}ø©•Jt9±¬tÐÙW—]OS°ñ%²€†1Ý^€VÌ•Óc1žÞ¯YfŒåXôõ«°kP®K’éšÆXytfŠ´êDz{€:ô*Õ”|7É>\qñõ\þUÂZø®x°ˆ¨^lÙxËËÇÎHÝ““Ö²tåÑ¥ã-™«wà· ´%Ø îa‡Ž£‘\ýχ® ,vo^År ü tV^0ÚØ_/ýÐ+]¿ýzL³(_0àtéWVÔ£‡a”J„qæ(cb~•$š¥­ÎÕ“Sr6qŽ3ÏáÇVatQýãrqøý)B—f-ÊpÏ­^XôÉåq ãD áL£°äãëO¸ÒÞ›í–l§¦Ù?¦i^C´šCaƒ¥7‚w@à6yúUÿ°\„ ¨²+wFk8ùÞ·<àÿ꣙ö${”á…™âù‡$ž¼ñÉúVü¾­m~Ÿ-³€c“ÊTÏ^˜ 2}‡5œ¶³#nŒwqùsQŸ4aÉrú‚@éÏ¥ ¥ƒÙögq§|`ñv˜V9ݹŒ>qþÐÁ?kxŸâMÏŒ¼9œšX´àqƒŠìü-wá峚×ZÒ-ÑOÊ0PAê+:ÕŸ.ŠåÒ¤ùµ0¼¹±wî*ÐÕ5Pá¾ßvHpÒ³ } ÅwËájn§ê9PpV9À9ú8Éü*‡òÇ#ì¹ýÅxqŸø¥p}bÛœ†‡Žõ»9¦h.‚chš 6ñŽ6ãõÍiÁñq.4åg?.èå)ÇЃÎ8ëUgð~©`ˆbœ“‚"qÇýõŠ¡.w–Æ\ž…P°üÆE ´•KxëG¹TŒ¤ñr´±£ý’OaÚ´íuÝõ]bÔ G\ó#yj}1¿¥y´–±ê'ÇÞ ²óì–WkXnÕð KÆ~ë0yþUiÆHÎK—¡éWÐÚ\YÍ-¼–¡Hݾ2§œpzú)õè}+›µmy½´–qùbuxÈÉÀ#‚sŒzäÉYt ·Ú4«s<^h’+œôb?å¤|ôê ùÍ*kW±jR ëág÷byw‘ëŸá<ç·zÞQNæ<ïC¬“@Ñu«µ[e•¢vÜÒæFÇ®vº8<àVWü#¶Óy¦JSÊ ö˜ÒL ù›œ2sÊ‚99=3 —Š5[+«‹‚-ç’}»Œ±`dp WžqøJчÆ<Ç›I‡Î”#ÀþXn1ÈÁ$ûæ¡ÕìSÃ'¸Ë¿Ãsn¡]ͦѵSæ%{r:óƒÏ Åa}—P°¼g–hÄ-6|½¤ìôÚØ€3ÙyÊ‚6b×là‘<©ïáBÛŠ»Sœô$ç·o›¬_ŨJ=Gí€2ÒÄŽ=~]Ƶ¥QÅîe<4Z±•¨xvý.Mõ¼w±E öUy­»¶§<àgéÊýžPY/äÄ<eˆ† Ž™û¥¶óü9üksOŽç÷SÚê¦D(R7m8Ïjè£óf‚X¤ ²Q´²±ätéþzWLqÕSµ®pO*¡$¯t¾_žç’ÄÞ Dµ¡DhûÜŒ‘Ó×`+¬ÐQѦ´»¬Ò c%HƇõ­}WF·–Ð=µ¥³KŸšAÞÃG'¯J»e¥¬Ö±K&LÊÄ©'<ƒÆOoʹ«W[÷=4RŠÙíÄbå«y\üØê?NrHöÑ,c+§ŒœÒ²¾UÉ- sƒõ'Ó¼ÆXÜŽ[8þŸáX—Ô¹iý–@ëœ1>õÌx¾Vwµ$ôº›r #ƒ×§ÌxÑ·In¤c¦Ÿñ¢\¿„ÎSzþ´‡ žp}1O* žj&ùzs^©çIøIwi—#nïô˜Ž6ç£cü¿Ô ÿ#5ÇÔQá%ݦ\»¿Òb8ÛžŒ=òüGP7üŒ×QRYÚYªJ(²ÿT>”S<ÿp×â¯õO]ìÿp×â¯õO@vëÿ«VÛÒÊQ½9^øöõ:d|u_bÛ¯üJ­[oK)Fvôå{ãÛÔtèq‘ñÙsÍ$ CÖ”àuéMÎi=iˆ ãŠLÞ‚)Bñ@Æ‘ŠLfŠCë@㚥—Þ{Ruâ¤À>´˜ô ãšB)Æ“½%¸£ñINÆh=(¢Žô¦@ ‚{RíKۥ踣´{P ){QÀ §,²!ù—èi)  I¨N¼0÷:j1Ÿ¿_qÍgQÞ§•™›+so â@¿6ÏâVúV)VGŒü®ËŸCK®c}ZXùRG¸5:jWQ<Æ8õ¬$Ô'^¤0÷e58ÏúÈÈã·5š{¢ãQ­™ÑZxŠhX³ “Ü~~µ±oâ¡C»çÓ8ú×—6Òcëž)ì¸]Êr1šÆXh?#hâ&·Ôô«o’¬0të†~¿jÛøŠ€¨û¹Ã†+ôëÅy nØ–Jµô±¶NyëÚ“£$¬˜Õh½Z=—íºMù£Ž0O>pxïß½Isáý6ö9Z;”ä¨À·ù>•ä0ë7Qà–fŒç§âkZM‚²Hà#ïqõ¬\'Ѫtå³:íOáÊK6öéæ…Xœë€N?ýB¹[¿‡wÉ>ÈÁS´dUHÈ{ãýÓ×Ù/AÉdŽáÁqü~àà? ío< ía{r àûV]ï‚õ%U-$ŒÃÎöçµTkA’éI °³‡·Üc‘ù‡O`O¦:q@sŽƒ<àv«ë¢Íj‹ ÞŸ)F^‡üóP½µÜ*L–çrW‘þ?¥e'w¡Ó­fUV–2¥X©R[#µléÞ/×4Í‚éŒ`îçr·Ô¥dFb22:Ž„SYœŠM'º/ÑýÅvªjVÍݤ‡äoÀt®ŠËƾ¿Zåìä#q'Ê?àC¿á^7å<ƒëÍ/'¯ëaá.ƒRg½2ÇR€­¥ÄS£àpüz㨮W]ð,"{e1"7Ú¤z޼ƙíÉ’ ‡Œçï+ÒºOˆ!µùè\ è&ñì3ÍeõW`ÊçOsGNðD°/™¼§9^ƒÐg>‚´ÓÂwEZC:s®˜?‰ÿëU+âe¼°¼Ò]cŒîw€–UÇFlçtVž'ðæ¨ˆ Ô#‰Û€’ „sï‘ÿ묧÷»aU±ÆÜxkQ…3åE+çc“üqT&Ó/ m²YÍž¹T,?1Åz¯Ø|ÄDQÐüÙŒŒa²;†9#oëÅBœÖå»BQ|Â­ËØõ¾Z˜þ\t¯X}6)ÕƒFœÁ¬û iÎŒ>ÊwÚ1ƒUí_TN‡—ˆ‘BîA‘ú.® Ï“u2d`€ä “]]Ï…m¸&HÉl*ÆÙ'¯PAíþyÅAqàÙA&;¯Ýž“ŸÄçúVªµº‹•ðñf¥`P<±K]»$AÌ`þµvÓÇ·4vñÚÛ3³ž^áƒêrOÔÖn§á‹´tFòîÛçŽ çj“GÐMº–y™1±v¶à=H?çõ®˜8N7ÜÊw‹²6Üe¶Hÿ=iȸÉÇðút¨á_Þ»99, lëštŒÉ†\óp*ºYù²ac;X ±Œàb¹¿’^Û'$''Þ·Lïäð„œò1Ó¥sþ*pëlÁqÁQJ ûXÜ·ü&seºr9ÅFùü}*V®G~µŽœûצyçÒ~]ÚeÈÛ»ý&#¹èÃØÿ/ÄuÈÍ?ÔQá%ݦ\»¿Òb8ÛžŒ=òüGP7üŒÓýEIgieþ¨}(¢ËýPúQLDóýÃ\Š¿Õ=w³ýÃ\Š¿Õ=mÛ¯üJ­[oK)Fvôå{ãÛÔtèq‘ñ¾yë_d[¯üJ­[oK)Fvôå{ãÛÔtèq‘ñ ?•$ yÔŒJh ù§…ϰ£ÜdRÀ§sÚŒhSG àñN 柅 (2)¸©çÖN´Óì8¤éRwëIZi¤§cš ÐÁÔÜsNúR@ Ç4S±F(½èrE/µZNÔ”êLPQŠ1E'µ¥‚=è>””½¨üh)Êî‡*Ì¿CŠJ(Ìw÷Haè¬Gª)À’,z•çô¬ìQJÈwfÊ]ÚÉŒI±‰þ!ŒU¤bË”pà÷ë\Þ)Ê̇*ÅHî)r˜é‡| öÇó;ï,²ºŸòkžP¹Aþ´·ûÜÕ¤ÖŸ2%?îœT8§n¦ä7×0ÚÙã·_Ò´m¼Q} $|Ó9Ì®£k'RSÞ*YƒªÀ àⲕ=ѬkÍu;«?Ü&Ðå\“ëñ­»_£‘Î ŸyKÆq‘MóNFA†²ú²û,Õb™çoã cÚâ9ºØcþ4°ßé7s¼°©Œ‚$!üÏâ }*ždÈ[‹Y¸ˆ™†yàâ§ÙT˜ý¥7ä{Oö%Ê’„Ékå”ýj³xbWe…À`ØÇáœgð¯8³ñÌ8ñê»kã‡Áëϧ5””º£D¢öf½Ç‚„± 1'óýkž»ðl±–u¤žÇÿŠþ†º[?[”*]•F3‚z~×A‰lîÀ˜È'gü(S¶îÂö}$›E½·v ›‘s“´®=»nµA“hýâ²dîÇ¥{ƒ6rNè„dðvñÍW¸ð¶—¨±hî¹ànPxúõªRlZ£ÄÄ9¯CÜR4L3Ð×§ßü4@Åátÿi‘öçñ5Ï_x"úضÉAç…•{}E>p½Ï>yZ9 “,Spê,tÇç[ú³a4Í­²Áªîv#<0Çøqó‡®i/´[¸÷ m‰QŸ™áý dýšXÁ%uGä¡Êçð5Ò§+3šTäѵkâ%°¹O²_^Z“Ë4¹@ô vþetZwÅ ZØÿ¤/c8!¤iN¼óÏ?ýzÒ…>HÕ•ä‡<‘ìL‚@àâ‘6ºW®}Í1€$`ãw¯5"/”JžFyúÖÖÐÊá$kömÌÞäúW3âˆÖ8íÀ'¹Ï­tåöÄàƒ· Ú¹¯ÆV cßšˆ«UËo÷m#™ FOãL ç“ž†£'æ§0R£wéœÒ¾]ÚeÈÛ»ý&#¹èÃØÿ/ÄuÈË?ÔQá%ݦ\»¿Òb8ÛžŒ=òüGP?üŒ³ýEIgieþ¨}(¢ËýPúQLDóýÃ\Š¿Õ=w³}Ã\G‰¡/ñ@¶ëÿ«VÛÒÊQ½9^øöõ:d|‚4 gþÿø ÿá__Y”6Y1@ѸwÚ@f\ÿ ==Go¨…tÍ7åÝa`:g»Ÿá÷oÈtÉÂòXÐuŽúM÷þ?øSƃ¬ÿ «ïüð¯¬WLÓ~]Ö¦q18û¹þvü‡Lœ ¦i¿.ë Ó8˜œ}Üÿ»~C¦NXù?ûXÏUøÿ·wÿ _ì-[éwßø ÿá_W®™¦ü»¬,Lâbq÷sü>íù™8LÓ~]Ö¦q18û¹þvü‡Lœ 'ÿaë²o¿ðÿÂì-`žt«ïüð¯¬LÓ~]Ö¦q18û¹þvü‡Lœ ¦i¿.ë Ó8˜œ}Üÿ»~C¦N …“ÿ°µú_à;ÿ…BÕÿè}ÿ€ïþõ‚éšo˺ÂÀtÎ&'w?Ãîßé“tÍ7åÝa`:g»Ÿá÷oÈtÉÀ>OþÁÕÿè}ÿ€ïþ‡AÕóÆ•}úöð¯¬WLÓ~]Ö¦q18û¹þvü‡Lœ ¦i¿.ë Ó8˜œ}Üÿ»~C¦N …“Æ…«g&ûÿßü)¿Ø:ÇOì«ïü𯬗LÓ~]Ö¦q18û¹þvü‡Lœ ¦i¿.ë Ó8˜œ}Üÿ»~C¦N±òoö±ÿ@›ïüð¤´?æÿ€Ïþõšéšo˺ÂÀtÎ&'w?Ãîßé“tÍ7åÝa`:g»Ÿá÷oÈtÉÀ>NþÄÖ;éÇþÝŸü)ƒ¬Ž²¯¿ðÿ¾²]3MùwXX™ÄÄãîçø}Ûò2p.™¦ü»¬,Lâbq÷sü>íù™8ÇÉÇ@Õ›‘¥_ÿ^ïþßìcþWßøÿá_Y®™¦ü»¬,Lâbq÷sü>íù™8LÓ~]Ö¦q18û¹þvü‡Lœcä¿ì`Ì*ûÿßü)¬ÿ ›ïüð¯­WLÓ~]Ö¦q18û¹þvü‡Lœ ¦i¿.ë Ó8˜œ}Üÿ»~C¦N …’Žƒ¬q"ûÿßü(:±ÿ@›ÿüð¯­WLÓ~]Ö¦q18û¹þvü‡Lœ ¦i¿.ë Ó8˜œ}Üÿ»~C¦N±òOü#úÇýoÿðÿÂì cþÿø ÿá_[.™¦ü»¬,Lâbq÷sü>íù™8LÓ~]Ö¦q18û¹þvü‡Lœ $`k'þaÿø ÿáKý¬Ð"ÿÿŸü+ëeÓ4ß—u…€éœLN>î‡Ý¿!Ó'éšo˺ÂÀtÎ&'w?Ãîßé“‚ácäsáýgþ7ÿø ÿáGü#úÏý/ÿðÿ¾¸]3MùwXX™ÄÄãîçø}Ûò2p.™¦ü»¬,Lâbq÷sü>íù™8.3äøGõŸú_ÿà3ÿ…'ü#úÏý/ÿðÿ¾¹]3MùwXX™ÄÄãîçø}Ûò2p.™¦ü»¬,Lâbq÷sü>íù™8cäoøGõ¯ú_ÿà3ÿ…ðë?ô¿ÿÀgÿ úåtÍ7åÝa`:g»Ÿá÷oÈtÉÀºf›òî°°3‰‰ÇÝÏðû·ä:dà¸Ï‘áÖsÿ ‹ÿüð¥ÿ„Yÿ Eÿþ?øW×+¦i¿.ë Ó8˜œ}Üÿ»~C¦NÓ4ß—u…€éœLN>î‡Ý¿!Ó'Àùþýgþÿø ÿáGü#ú×ý/ÿðÿ¾º]3MùwXX™ÄÄãîçø}Ûò2p.™¦ü»¬,Lâbq÷sü>íù™8.È¿ðë?ô¿ÿÀgÿ ?áÖèÿ€ÏþõÒéšo˺ÂÀtÎ&'w?Ãîßé“tÍ7åÝa`:g»Ÿá÷oÈtÉÁp>Eÿ„Zÿ Eÿþ?øQÿþµÿ@‹ÿü𯮗LÓ~]Ö¦q18û¹þvü‡Lœ ¦i¿.ë Ó8˜œ}Üÿ»~C¦N ò/ü#ú×ý/ÿðÿ“þýhÌ#PÿÀgÿ úítÍ7åÝa`:g»Ÿá÷oÈtÉÀºf›òî°°3‰‰ÇÝÏðû·ä:dà¸%¦•âþãÁ¶sý*u²×‡ßÑo[ßìÎò¯«WLÓ~]Ö¦q18û¹þvü‡Lœ ¦i¿.ë Ó8˜œ}Üÿ»~C¦N »>X];S|ѵ?õìä*“ûSa¹tëÑõ·qý+ê5Ó4ß—u…€éœLN>î‡Ý¿!Ó'éšo˺ÂÀtÎ&'w?Ãîßé“…d;Ÿ.bêàq§^߆ÿ IÕ×®™x~7øWÔk¦i¿.ë Ó8˜œ}Üÿ»~C¦NÓ4ß—u…€éœLN>î‡Ý¿!Ó' •™Ÿ1%†±Êi÷Øé†·cý*ÔQk‘ð,/€ö…ÿ¾“]3MùwXX™ÄÄãîçø}Ûò2p.™¦ü»¬,Lâbq÷sü>íù™8—J/r•Y-Ÿ-¯üEscz{`ÀØþU«m®ëã~—y‘Ô¬.3úW·.™¦ü»¬,Lâbq÷sü>íù™8LÓ~]Ö¦q18û¹þvü‡Lœdð´Ù¢ÄÍWiâmPFCÚÝf…ÿ¶àñ,ιšÖQŸúds]Êéšo˺ÂÀtÎ&'w?Ãîßé“tÍ7åÝa`:g»Ÿá÷oÈtÉÁõkm!¼C{£ˆšãNÔ3ÙûªTÕ)¼7¢]tœÅž»×uz"éšo˺ÂÀtÎ&'w?Ãîßé“tÍ7åÝa`:g»Ÿá÷oÈtÉÃXxõ!Ö}&»ð=¦ßô{¸yÂøÇàx¬;¿^ÄsÃ(ì7€0M{ªéšo˺ÂÀtÎ&'w?Ãîßé“tÍ7åÝa`:g»Ÿá÷oÈtÉÁõuÑW’>v›CÔ"8k)º®ï嚀è×ýìn›ü+éÓ4ß—u…€éœLN>î‡Ý¿!Ó'éšo˺ÂÀtÎ&'w?Ãîß铆¨.ãúÃì|Ûý‘¨»csÿ~[ü*)4}MŽÑ§\’xÏ”ØþUôºéšo˺ÂÀtÎ&'w?Ãîßé“tÍ7åÝa`:g»Ÿá÷oÈtÉÅ*Iu%Öo¡âÚvžÖv©n-¥ ¸ÉÙÉ9ëÿÖþ•hy»– ãŸ-€üÿ:õõÓ4ß—u…€éœLN>î‡Ý¿!Ó'éšo˺ÂÀtÎ&'w?Ãîß铃Ù"9Ù䆆Qû‚¸‡"œ#›w1Iϱ¯Y]3MùwXX™ÄÄãîçø}Ûò2p.™¦ü»¬,Lâbq÷sü>íù™8^Åw´g–¼LQWcO#ÎxšÎêt…-í's²2qù ÷UÓ4ß—u…€éœLN>î‡Ý¿!Ó'éšo˺ÂÀtÎ&'w?Ãîßé“„°ëJûÚ¾Wæ#¤j‡?ñ.¼ÿ¿ þã£ê{0tëÃßýK…}6ºf›òî°°3‰‰ÇÝÏðû·ä:dà]3MùwXX™ÄÄãîçø}Ûò2qÑsS3ÂK»L¹w¤Äq·={åøŽ ùgúŠÙ‚ x"òá‚ÒgGp“nåJž…?Þô<„år‚oñ î9Ò(ì,¿Õ¥¶cŠ)ˆ°ã+X:­—œ„bºÍC$!Ç"€<·QÑn‹.i“ý×"±ŸCÔ³Ååßýþoñ¯_“OG<¨¨Ž•þ@Gý‡©ÿÏíßýþoñ£ûSÿŸÛ¿ûüßã^·ý“÷EÙ1ÿtP’aêóûwÿ›ühþÃÔÿçöïþÿ7ø×­ÿdÇýÑGöLÝäŸØzŸüþÝÿßæÿ?°õ?ùý»ÿ¿Íþ5ëÙ1ÿtQý“÷Ey'ö§ÿ?·÷ù¿Æì=OþnÿïózßöLÝdÇýÑ@Iý‡©ÿÏíßýþoñ£ûSÿŸÛ¿ûüßã^·ý“÷EÙ1ÿtP’aêóûwÿ›ühþÃÔÿçöïþÿ7ø×­ÿdÇýÑGöLÝäŸØzŸüþÝÿßæÿ?°õ?ùý»ÿ¿Íþ5ëÙ1ÿtQý“÷Ey'ö§ÿ?·÷ù¿Æì=OþnÿïózßöLÝdÇýÑ@Iý‡©ÿÏíßýþoñ£ûSÿŸÛ¿ûüßã^·ý“÷EÙ1ÿtP’aêóûwÿ›ühþÃÔÿçöïþÿ7ø×­ÿdÇýÑGöLÝäŸØzŸüþÝÿßæÿ?°õ?ùý»ÿ¿Íþ5ëÙ1ÿtQý“÷Ey'ö§ÿ?·÷ù¿Æì=OþnÿïózßöLÝdÇýÑ@Iý‡©ÿÏíßýþoñ£ûSÿŸÛ¿ûüßã^·ý“÷EÙ1ÿtP’aêóûwÿ›ühþÃÔÿçöïþÿ7ø×­ÿdÇýÑGöLÝäŸØzŸüþÝÿßæÿ?°õ?ùý»ÿ¿Íþ5ëÙ1ÿtQý“÷Ey'ö§ÿ?·÷ù¿Æì=OþnÿïózßöLÝdÇýÑ@Iý‡©ÿÏíßýþoñ£ûSÿŸÛ¿ûüßã^·ý“÷EÙ1ÿtP’aêóûwÿ›ühþÃÔÿçöïþÿ7ø×­ÿdÇýÑGöLÝäŸØzŸüþÝÿßæÿ?°õ?ùý»ÿ¿Íþ5ëÙ1ÿtQý“÷Ey'ö§ÿ?·÷ù¿Æì=OþnÿïózßöLÝdÇýÑ@Iý‡©ÿÏíßýþoñ£ûSÿŸÛ¿ûüßã^·ý“÷EÙ1ÿtP’aêóûwÿ›ühþÃÔÿçöïþÿ7ø×­ÿdÇýÑGöLÝäŸØzŸüþÝÿßæÿ?°õ?ùý»ÿ¿Íþ5ëÙ1ÿtQý“÷Ey'ö§ÿ?·÷ù¿Æì=OþnÿïózßöLÝdÇýÑ@Iý‡©ÿÏíßýþoñ£ûSÿŸÛ¿ûüßã^·ý“÷EÙ1ÿtP’aêóûwÿ›ühþÃÔÿçöïþÿ7ø×­ÿdÇýÑGöLÝäŸØzŸüþÝÿßæÿ?°õ?ùý»ÿ¿Íþ5ëÙ1ÿtQý“÷Ey'ö§ÿ?·÷ù¿Æì=OþnÿïózßöLÝdÇýÑ@Iý‡©ÿÏíßýþoñ£ûSÿŸÛ¿ûüßã^·ý“÷EÙ1ÿtP’aêóûwÿ›ühþÃÔÿçöïþÿ7ø×­ÿdÇýÑGöLÝäŸØzŸüþÝÿßæÿ?°õ?ùý»ÿ¿Íþ5ëÙ1ÿtQý“÷Ey'ö§ÿ?·÷ù¿Æì=OþnÿïózßöLÝdÇýÑ@Iý‡©ÿÏíßýþoñ£ûSÿŸÛ¿ûüßã^·ý“÷EÙ1ÿtP’aêóûwÿ›ühþÃÔÿçöïþÿ7ø×­ÿdÇýÑGöLÝäŸØzŸüþÝÿßæÿQ¡êyÿÛ¿ûüßã^µý“÷EÙ1ÿtPšÙh—¡Æû‹†íHÇú×g¤i¦}Mm¦›Ÿº*ÜVê>Ú¢Š” Q@ EPŠ1EbŒQE£Q@(ÅPŠ1EbŒQE£Q@(ÅPŠ1EbŒQE£Q@(ÅPŠ1EbŒQE£Q@(ÅPŠ1EbŒQE£Q@(ÅPŠ1EbŒQE£Q@(ÅPŠ1EbŒQE£Q@(ÅPŠ1EbŒQE£Q@(ÅPŠ1EbŒQE£Q@(ÅPŠ(¢€ (¢€?ÿÙ endstream endobj 50 0 obj << /Length 2674 /Filter /FlateDecode >> stream xÚÕZKsÛ8¾ûWðHÕŽ`¼H€sóN’ÙÌ&µ³‰÷²3s %Hb…"=$óë·ñiQŒeú²•r`£Ù߇î ?#máï稊0üK2,¤ˆ$Oæ©äQ£¢Môï+ qôóÕßo¯®ßQe(KiÝn¢„!Îx$Ret»Ž~‹úÇͯ·o?-–4Á1E‹e’âøö?· "ã}zóañÇí/ †Fe-†cŽt[UqOݨþdL¸ô1¯y©‡]½½½ú󊘯 G•J9Vû«ßþÀÑú~‰0b™ŒÌÈ}ÄŠÒL¿WFŸ¯ŽŸy®<ÎA¨ÝE$8Fiʦ&a˜ §a’!P&XN áeIr*ƒa0Oö§X–¢Œƒ>Œ"œ%ÖÊÿ\Ð$V ’Ä­…´¨\¹Ï·ÊV×E{_æöá¡XoUwŠ •1Â_EU*¢€Ü@Õ›UWÔÕéÄ\O˜Í233'’΃ª7ÃÙLΘdg.–aè/ÜÀ’!Á‰¢[»HÀ”néþ0æP&ƒøÛ}^¨õ(}úZÿ·®÷C†×®ÜׇÖ1ý¾.ªN5çI6—@²9Øz~€C%Y6˘àHÈÔZºá§MžÍå?^¨õ(?úZùQºó˜aø@€9à9¤Et:ü}——Ë8TÒ,A’¹¥öÓ¡iëÆóp½®uy¨®Kµé®›b»›¯¡”Çw ÔçUS—¥U*·E»ÏC 8ªú‡uѨé˜3φYHz6HŒ¨œç.—1ÁÉna}ÞgÙ¼ZÛÊjC^AÑÀ¢# Y5JU›Cy13f ˜1UÏŒ²6ÓO\,c‚ÆQï'º¦|Mb¼‚ž}=ûÄèj[ªµÏŽëM?a>Kˆ@BÌÓ"I3]ÅÅ2&‘è6—â,ÖëRdeë&ßNÀþ ÚØûÚüª·Eyõ,tgX5 ;.‡D‹Î\î˘@—K„Ý*úxôa§T9è+híiÐ_Ç=çrÕÖ ¨ÎAÄ£ Û`žÎ;A¸\ƪPâ$9Þ÷χúÔ PÔêa=<<Ô3L ž“‡š‚,ÂæA}±Œ ¨)ìUÎFë p~ÎGú›úë©}Û»|ç`ãñÅ N2s)_,ãüÆ=%îÖ Ù¸Ã0xÑíËÇ þ¦—}YìΡƒL€ÿB…GÁï+<ܳò³ß1¦ÝÉI¦ï}(*çýÏ3fR1sÐvŒI²¥xžG¸\Æc0F$³ö'³Ozè ôÙøKuSÈóÌ}©áF™Û3Ügå¸ Ô¬ ÍÕUnö“–’Ü-‹+¹ãºÛɳÜÃÏÝY¼óÜ•A6»Ë8Í)… ÔH<;åãHB4ÿ?!ê+XÉu`¥ÀÔo§¾v£@¾êö]±=4ÁÐìÇÅ’]ß?Ãî¹ÛyÝØTÇe½Éy¶à®ÛQ›EKŽ„Ì)cd,YÆõÉ¢.ŽBÐb)83îh©w*ËUY¬Ü`½¢tyòº¹¨ro¾qÇ#0ùÒÜÌy¸‡±˜ÛtaföA¶ÉÈÅA.ôés3¸i¼ô£Îøºýõµg&nm窮*µêÔÚ>Þ=Ži¡I\•ÒY"èœJau6›Fû&RKVÝÔJÕ´¶n4…N§)´lÅZµNÎ'½«[ŽÍ¬(ÍEŸ.í²¸Ìï`«bZ¬}e¬o´Cd¼WÕÁ~Ø«m|¬¶²Ê@³ûÑ£ºzL…FíkòWýŸɤq†Œ Sѹ–JÙ&}¨À­kêvEµÕßš°ðÁˆµµž~§²-¹-Ê|h w²m¾—&©óÐI<ÔËôìBEOiëySªµñæÂ°gigÖ"l²Ò{QŸˆº÷êf‘º© ®”2« ¥`£¶ø¦f9.YKÖŽßfé_4óéö|ï†zçU³jGæn»ÃFKÙŒ/iŸy°¦ôÛÆ³€†(ø.›.”ÊœRn¥ælPo~lã^µ-XÎõÜÙ IÝêÓxAñÑè0,¬,Ýßw+¦×^/DK¯Lïs€ŠÚËÌ~;²,¼5¦Æ}nn*ä¯=`ÌC¹¶}U¿£¬ë/¶¹­÷jtEf¸•ÂmþÌÓÐÓrôÒH¢ÎYÄ„DL0J`*]( UÓ%XfÚÄx/”$gC‰—¿ìMpK¦H@ÄxŠxÆÆ‚ wÁäcîo„zvN“Øå?GxŸD§"áT‡ˆiLºüa§Œ¶­€/ß5ʵ5Ç•O_‹¶°©ŒÒ/Ž%˜„1ÄÓbÞŒméô¯(Ät–šÊ°ÜŒ%ºÀ#)˜2žpH”HȆoÄ÷4ÖSpÂoó•]òK’%(ä†N8„3VÈ]XÑqÍGî£pQ‡ WÌ©†iÎmqŸí7¾ZðÁ1²éÈ›9â0²ŠLDµž¦"Þ°÷3OÚõçm·nš‚þº"nœkmW{¸[ú©4#y⣞ _Bâj|!ëð’Ò¸§zJ¡:[“YwÕä¥m슽vòz¸14Õ÷ªrV.‰rL¢Å[ПƦV“—–h!°k›ÃòaÔ™@÷TÆÓëÚö ‡®3aPcL‰CÚÍF5Þªò'ÎT:¶aÖ…]V@ìÙÖ_ªÖË ‰Ã‡¤jÎæåí¶T¶­Ugæ3¢hŠ^‰t1Hú€*cë=š/í}¾rMwùêËÖe7¶¶å¡² Ú' ÜèÔªy4n\Û„¤ý˜®“;cVìb¬®8ËCm`yÌ\ .GÕÍZ56,:µ(Fy¯#³ö–LzùPYÕåa_i³‚2fÍ“J7”6;ƒJîߪ:‡mÐéš?‚<É?ýauØ u»Ãþ®Ê‹²·5†}Øú°ÿ¡3Õl×(iöÛõI‰tSßDfèÆ¿âø†°ü©¼=ç ¾Yt3ð†ÐXº/ËL VÙ>¯(4Úìá©‹¥šzz»€†¸®Ë/E׎¸[š!Â&ózD`‚ ný½¿#}*&AÓg‹±Z5æp¡j7 æâýˆð%‘°C„´``¸ñI¢Ô§ºÓ^wDÙv¬Óºöļ[€ÓÕñw$äIØÊþÑy^vª©ò®8:ÖòÑç –æ‡˜ùT ŠÖ––&a…§ ¹a ì±LOÒC²° ‚ªY¸¦T®¢CwþF7t–öA/©v4aH ßý)·DGÞ<ú"N ÍïïËÇA¶{eP<ò ¦¤½³²ˆÉ 1lýF­ÔþN¹£ Љˆ‚Dò%ÉÇí endstream endobj 46 0 obj << /Type /XObject /Subtype /Image /Width 887 /Height 803 /BitsPerComponent 8 /Length 150736 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream ÿØÿàJFIFÿá°ExifII*JR(i‡Züÿÿ)( üÿÿ)( 0210‘ 0100 ÿÿ w #ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀ#w"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?÷ú(¦;mâÀSLª;Ö6¯®ZéV’\Ý̱BXÿžOµp“üWÓw‘µë¯f ƒ?›f€=KÏ_Z<õõ¯%?,ÿçÒ÷òÿ‹¤ÿ…©gÿ>—¿”ü]Öüõõ£Ï_ZòOøZ–óé{ùGÿÅÑÿ RÏþ}/(ÿøº.­ùëëGž¾µäŸðµ,ÿçÒóòÿ‹¥ÿ…©gÿ>—Ÿ”ü]Ö¼õõ£Ï_Zò_øZvóéyùGÿÅÑÿ NÏþ}/?òÿEÀõ¯=}hó×Ö¼—þŸüú^ä?þ.øZvŸóéyÿÿøº.­yëëGž¾µä¿ð´í?çÒóÿ!ÿñtÂÓ´ÿŸKÏü‡ÿÅÑp=kÏ_Z<õõ¯%ÿ…§iÿ>—Ÿùÿ‹£þ§üú^ä?þ.‹ë^zúÑ篭y/ü-;Oùô¼ÿÈü]ð´í?çÒóÿ!ÿñt®­yëëGž¾µä¿ð´í?çÒóÿ!ÿñtÂÓ´ÿŸKÏü‡ÿÅÓ¸µç¯­zú×’ÿÂÓ´ÿŸKÏü‡ÿÅÑÿ JÓþ}/?òÿJàzמ¾´yëë^Kÿ JÓþ}/?òÿGü-+Oùô¼ÿÈü]Ö¼õõ£Ï_Zò_øZVŸóéyÿÿøº?áiZÏ¥çþCÿâ踵篭zú×’ÿÂÒ´ÿŸKÏü‡ÿÅÒÿÂÒ´ÿŸKÏü‡ÿÅÑp=gÏ_Z<õõ¯&ÿ…¥iÿ>—Ÿùÿ‹£þ•§üú]ÿä?þ.‹ë>zúÑ篭y7ü-+Oùô»ÿÈü]ð´­?çÒïóÿ‹¢àzÏž¾´yëë^Mÿ JÓþ}.ÿ8ÿøº?áhÚÏ¥ßçÿEÀõŸ=}hó×Ö¼›þ§üú]þqÿñtÂÑ´ÿŸK¿Î?þ.‹ë>zúÑ篭y7ü-Oùô»üãÿâèÿ…£iÿ>—œü]Ö|õõ£Ï_ZòoøZ6ŸóéwùÇÿÅÑÿ FÓþ}.ÿ8ÿøº.¬ùëëGž¾µäßð´m?çÒïóÿ‹£þ§üú]þqÿñt\Yó×Ö=}kÉ¿áhÚÏ¥ßçÿGü-_ùô»üãÿâ踳篭zúדÂѵÿŸK¿Î?þ.øZ¿óéwùÅÿÅÑp=gÏ_Z<õõ¯'ÿ…¡kÿ>—œ_ü]ð´-çÒïó‹ÿ‹¢àzÇž¾´yëë^Oÿ B×þ}.ÿ8¿øº?áhZÿÏ¥ßçÿEÀõ=}hó×Ö¼Ÿþ…¯üú]~qñtÂеÿŸK¯Î/þ.‹ëzúÑ篭y?ü- _ùôºÿ¾¢ÿâèÿ…¡kÿ>·_÷Ô_ü]Ö<õõ£Ï_ZòøZ¿óëuÿ}EÿÅÑÿ B×þ}.¿ï¨¿øº.¬yëëGž¾µäÿð´-çÒëó‹ÿ‹£þ…¯üú]~qñt\Xó×Ö=}kÉÿáhZÿÏ¥ßçÿGü- _ùô»üâÿâ踱篭zúדÿÂеÿŸK¿Î/þ.øZ¿óéwùÅÿÅÑp=cÏ_Z<õõ¯&ÿ…¡kÿ>—œü]ð´mçÒïóÿ‹¢àzÏž¾´yëë^Mÿ F×þ}.ÿ8ÿøº?áhÚÏ¥ßçÿEÀõŸ=}hó×Ö¼›þ§üú]þqÿñtÂÑ´ÿŸK¿Î?þ.‹ë>zúÑ篭y7ü-Oùô»üãÿâèÿ…£iÿ>—œü]Ö|õõ£Ï_ZòoøZ6ŸóéwùÇÿÅÑÿ FÓþ}.ÿ8ÿøº.¬ùëëGž¾µäßð´m?çÒïóÿ‹£þ§üú]þqÿñt\Yó×Ö=}kÉ¿áhÚÏ¥ßçÿGü-+Oùô»üãÿâ踳篭zúדÂÒ´ÿŸK¿Î?þ.øZVŸóéwÿÿøº.¬ùëëGž¾µäßð´­?çÒïÿ!ÿñtÂÒ´ÿŸKÏü‡ÿÅÑp=gÏ_Z<õõ¯&ÿ…¥iÿ>—Ÿùÿ‹¤ÿ…¥iÿ>—Ÿùÿ‹¢àzמ¾´yëë^Kÿ JÓþ}/?òÿGü-+Oùô¼ÿÈü]Ö¼õõ£Ï_Zò_øZVŸóéyÿÿøº?áiZÏ¥çþCÿâ踵篭zú×’ÿÂÒ´ÿŸKÏü‡ÿÅÑÿ NÓþ}/?òÿEÀõ¯=}hó×Ö¼—þ§üú^ä?þ.øZvŸóéyÿÿøºwÖ¼õõ£Ï_Zò_øZvŸóéyÿÿøº?áiÚÏ¥çþCÿâé\Zó×Ö=}kÉáiÚÏ¥çþCÿâèÿ…§iÿ>—Ÿùÿ‹§p=kÏ_Z<õõ¯%ÿ…§iÿ>—Ÿùÿ‹£þ§üú^ä?þ.‹ë^zúÑ篭y/ü-;Oùô¼ÿÈü]ð´ìÿçÒóÿ!ÿñt\Zó×Ö=}kÉáiÙÿÏ¥çþCÿâèÿ…§gÿ>—Ÿ”ü]Ö¼õõ£Ï_Zò_øZ–óéyùGÿÅÒÂÔ³ÿŸKÏÊ?þ.‹ë~zúÑ篭y'ü-K?ùô½ü£ÿâèÿ…©gÿ>—¿”ü]Öüõõ£Î_ZòOøZ–óé{ùGÿÅÓ—â­ëg{ùGÿÅÑp=lH 8×›é?4«ë¤·>ÙÜáLàO¦A8ük½¶¹ƒ@(¤"ŠZ§y&Ä&®••ª6"jòŠ7òK-…¸cåæG+î6ÿ¡óÝÕÖ|C¶¡kì$ÿÙkŽÝRÆKº¬ØXÝê—‰icOpà•@@à žIUÕÚxZ+}7Ãz†¯w¨9îØYÛ\ZB¿ÄÄ(çœc=±G›ÊÉ ÐÝ=¬‘8ÆÑã,cŽ¼Ô·úuî•2ClöòÉ‘QÈÎÓœšè¼fßgÕ,vüÊês{«KHеq§0ï¡vf/Âæ=…C+hÙ äOûS~ÿ/ÈÎyÆ>n+¥ðz_Þèϧ¾“qu¥Íu“qmp"’0=yc¯ZvÜ›ìsO¦_Çg=Ü–®[ËäJÌ@)'÷J“ŸÒ’m:öÞ;7–Ù‚Þ.ë}¤1p8“Üpy®Ì&Ÿ£x_^†ê«ÛEª*ópÑ—;W’ëÎAëêjÄšŽm«ø.õá[K³Iµˈr\±ë‚G&’Öß×Kéøþv9 Ï ëÚ}™¼»Ó&ŽÜ —ʶÑê@$ÄU1¦ß(ê‚Ùˆ“Ê3d`7¦3ŸÇ®ßJÓ5jºž¯­ÝEý$Ræpÿk-÷@çñ¨ô›ËKOhúv¢Ë†¨ncšFÿ–d7ÊÙö QÐ}N?û#Qû%¥ßÙì÷’yVîYG˜ùÆ1œŽN\¿ð¦½¦YIy{§46ñã{™£ldàpž¤WYw©£X›EÎÇ]‚ÚßóÍTsøÕoèr´Ú…ü^òðáÛRÛ·2|¬ñž(×áþ`—õ÷ÿ‘Ç6ãûõvx’ÕgÌC;ã?(Æ0¸ª¶Ëö»˜ ŽHÃHá;aA''°¯AÓÀ°ñG…¼=€M¬O=ÂÿÓgFn~ŸÖ¨‹Íº+kâ«avo0nvqŒÿJ}¯Bz^§Ÿ^Dlo&¶–H™¢r…ã}ÈHô=ÅCæ¨ n>õé`_yšùðà„ëŸÚŒ%ÎÏ0Cá߯3ýj=: N][NLÚ'inÔÂñ\’Çr¸ûÀç õô©éršÖÞgk£]]éË~²ÛÅ\­ª™œ©g?†0;œÕ+ȾÃ{5¬²ÂÏ”-îRGp{Šëo¿â[ªøSÃêpÖ’C5ÀóÚGƒôηýƘºœÖ¬¨òøˆA!(ä`¹^EU®ôþ¶Béë«ý0)8 ö¤óW8Ü3éšô_ÜÝÄÜ„h´ëø’Ûlj¦$8 BkGP ¥kË[76+ BÛÉãæÎsÖ¦ú_úÚã¶¶þ·±å{«V÷ÃzÞ›aöëÍ6Xm¸Ë±SŒôÈ#ñ±sžÉ=«Ð5_jÚ…®m-íd¹kÅYuÖ•v¨^B(''Î?úÔö¸–ö9«Ÿ ëvzÛî, ZíVó<ØÏ Œ|¡³Üv¢÷ÃZÞb/nôÙ¢·8ùÉSŒôÈ‘øŠé5Ý6Kîÿ_Ò­ôýBŽ;9¢¹ çã»CÓ½.«áý[AðµÍ­½¤—-v«.£xÒ.Õ ÈEäã¹ÇÿX}Akc™½ðÞ·§X‹ÛÍ6Xm¸Ë±SŒôÈ#ñª[ÙIsewt’Û¢Zª³¬’mwÉÇÊ;×e©xwWÐü3=µ«Ü½àI5 וB¨„PNxîßäP²Ón4Åö7{<袷ݱ·Xž¿Át9*“€ÀŸ@iLª }3^µâ» ¬.¦° lGÙwlÊϸù³œõö¦hf‡LM9­Îˆtãö”R›Æ9Ü>ösýi7dßoø?ä [yÿÀÿ3Ê‚HdRî­=HêcÃÚ/ÚþÏö=’}—ËÆüdnÝóš‚VÐÿ²É:Ÿö¦ýþ_‘œóŒ|Ý:S`O¦øXÖ yôûž$m¬ÁÑyÆqó“ô§XxoZÔÒg³Ó¥•as™eB¬:®ƒ‘éZÞ°ÔÅìZ•¾•ewiç*É=Ã.è<²å®JÐÐì/WÅ—z–cg¨éÆùƒ^\º–ˆÉu%ž¸9À¢ÚØ].r¶ú­uóÁa+G2I’†Q–I‘Üj´¶w0YÛÝËK{ÞK–>Þs|bºÍ7RšO]i¶FÞ{Xî§/¦Ë4Ã8 àñÓ9çýVÃN×4—Õâ–æ(a¶[me±© gsuëß½Mô¹VÖǺÕê7U—uª-Ôn¤»¨ÝQn£uKºÕê7P»¨ÝQn£uKºÕê7P»¨ÝQn£uKºÕê7P»¨ÝQn£uKºÕê7P»¨ÝQn£uKºÕê7P»¨ÝQn£uKºÕê7P»¨ÝQn£uKºÕê7P»¨ÝQn£uKºÕê7P»¨ÝQn£uKºÕê7P»¨ÝQn£uKºÕê7P»¨ÝQn£uKºÕê7P»¨ÝQn£uKºÕê7P»¨ÝQn£uKºÕê7P»¨ÝQn£uKºÕê7P»¨ÝQn£uKº¤·†k»…‚ íÏ<=OµVÝZz$ëÓäüÌ« '?Ò€.7†çåo¢2t¡óÿëV$‹4S4.Œ%VÚS9®K8!šæ";ÿãÕ™qqñ2œa@ ÚÁÇób\§#úÖeõ¥ÎŸ7•6FU×ÃÚµ·[5Äï=¿˜Ìà†6åøÚ\àÕ-FMÚUœ$bEŽFõÅ[Ò¼5u¨Û­Ä×)mò›“s0õÇ~5­¡\é(&2¥Å¹82 ÁSî+fæV¸‚#fvž9aPc¸î1Æ?—QľV‡qიÙIgݹÏB¹Á>‚¼Øâæä»^Ö>‚yeM®©^ýcu{ß‚õ.t[&‘‹9…wÔœu¯Ÿ÷W³ø Bt›AÿLÅzˆùãÔ"9QE2Üæ1E0'=+VÿRßJØ=+VÿRßJðˆ'…·üÿe®7uvÿãþÛþÿ²×̪2Ä©¤ÆIºŒŒçúÒDq¿ÉF—ËRïå©mª;œtôùí§¶1‰âhüÄ&‰OCHäg8æ€@éÅ2Š~ê³g¨Ýiï+ÚLbibh\€än£‘ÿתY‘‘‘ÔSâç.!äòÔ»ìRÛTu'½.G £ ti”P†È4¹Ïzeü‚sRZÎ-.á¸X£v‰Ã…q•$àãUpÀ’E†íMh›‘xšú/½áv}®¤§*WÎpãžÕï¾Gr\’qïJ–ÓËo-ÂDÍ %DŽ:.z~x¨©îÁ-¬âÖ7h\,ƒ*H9ÁÆ8¨(¦´O«j7×ELÓ¶æÚ8Ã=€âªqè=)´RJÁ¸î=o\x²îm2kltÛ(çP³=¥·–òÙŽMsôPE'ŠVH/øG¼>›”®ô³!‡AÝÖ¹ðü©´P†ÑÐFü©´P°£øGåZ±ø‚æM-b‚R Ò¤X–\€Íž@>Õ‘Eik:Äúæ¦ú…ÒD³2ª‘¸©'õ«ÖÞ,»²Ó­¥Ž›†/$ÝÇm‰Êô9|õ÷ÅsôQÒÀ<: 7S( ’ í' 6Šy õ£#9ÀÏ­2Š~ê7S( î£u2Š~ê7S( î£u2Š~ê7S( î£u2Š~ê7S( î£u2Š~ê7S( î£u2Š~ê7S( î£u2Š~ê7S( î£u2Š~ê7S( î£u2Š~ê7S( î£u2Š~ê7S( î£u2Š~ê7S( î£u2Š~ê7S( î£u2Š~ê7S( î£u2Š~ê7S( î£u2Š~ê7S( î£u2Š~ê7S( î§,ŒŒIt"¢¢€.Br¸Þ¸^j1H9ÉÏR{ÔPÕÔ&EÚ#Õ†Oó¦}£t›ä,ÍUh  (5I-†Ø˜ìþë ô梺Ô&ºÇ˜Ù ~JŠÏØÁKžÚ›^Ã÷W´xþAVŸî ñJö¯‡ÿò ´ÿ®bµF©[«Qmþ¬QL ¥cêßê[é[¥cêßê[é@ ñþ?í¿àû-Pðd¾F¡¨Kö‰-öió:%ÜÉÓ22Wþ!ÿÇý·üÿe®NÚò{37‘&Ï:&…ø(ÝG4ŸPìtI?ö¬ú‹Íªßj":FI' )Ü8ÀvÈö'Ò®6›k¨^Û=ã †×DŠr²3*±1@X/Í“ž+‘¶¼žÐL “gŠNÊœdsôj-wR†Ki#º*öј¢m«‡øO0ö9©·õ÷ÿ˜×õø‘&¹™¶í¦Ë o3GHÑ£äýÓ A<ûÖUY½¾ŸPœMpcÞhòâXÆ>ŠªÔÐ3 ²GÖ<15„hd»±˜OŽKFä+¨ú6ÃøšÐ¹X&¾Ô4ôf0éZ[CŽFPÎ¥w±Áä-Áàñ\Ω^i7‹wc9†uÁàñL‚öâÔÎa“iž3œ¹N ý×úëkÓúé{DºF…ec 7“Û$ÓX‰üã,þp‘—r…@¾Y\àrsÔäS­ü9§\«Ü¬L\Ø!³PìÒŠœŒ““óFã?xW>5ÍDiâÄÌn¢‰"GeSÔ+YGÐÓ#Ö5­í K—X­&3À¸#ðsúœÐõ¸-,K­ÙÁ§ÜÛÚÄ…eKhÍÆXœÊÃqëÓéY•-ÕÌ×—RÜÜ9’i\»±îOSQQêQ4|ÞÐþÛ}=± q´El%ÝóŒçç\~µ©¥éÓÞß_\É ÃkmeBé¤tCæo,/@q“Ö¸©o'šÒÞÖI3 ¾ï)p>]Ç'ž§‘ޭůêpÝ5Â\þñâX\4jÊÈ HÁÀ¨£ ‘µqŸ¯ 2e’Ø›FK¬KnPX@9Á#8§ßizCßêº]½‡Ùå²¶iã¹YÝ‹mPHubFqÆ9ÅsÇW½-v|ÕíBΫ`:| `cc¥¯x¦ïT¸ºH%hì¦Ú6‘]”Ã0##¡&•™]N~Š(¦ ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¯jøÿ ›Oúæ+ÅkÚ¾ÿÈ&Óþ¹ŠhG©[«Qmþ¬QL ¥cêßê[é[¥cêßê[é@6‚ªß‘YCe?d}è뻃ʘ‹ˉ#PN21ØõÃxþJúrŸÿBŽ­®Šon£Ž÷Oy` ¨>$ˆ¥ô$dƒùRnÃ;?&ùãýð(òaÿž1߸‹m*òÓOaak-µÅÆ‹ûҦ뼿ÉäóW|0,W^¿]>ÎKHVÒñÉ ˆïÌ™$ÉÆ9ïëNÚÿ^ä+éýy™¹¨ê:f”ªoP0$m·/€:“µNõŸf·;w»öíÎ;g4Cªi7±Ëû@Ý…kr¡¶ýí¬W Žø&³îîMçˆbµ»‚í-m$Ge¤®³JG \)P«Ÿ^½x¥½×Û¼FÒÝÛÞÇöVx­#6r…Æ;m,‘© Á9on1øŠÃñŸs&pf–æò9%¢Ä¬DŠX(UÜÜԚζ°—íн•ŒöúiÔC Bɰy¶‘”RÄuŸ­?¯!m«ÙÞÚÅuoO ªÊ ô8"¦òaÿž1ß°<'m¶‚–Ñéígr‘ª\î¶1o œ ÿQšÂÞK¥Åh¶7«=¦qm&ëwÈB±†ÎÓŒCßA£¼òaÿž1ߢQºx~ÆT æ×aÉ<ùôî+’ºÑa·ûm¬VÓ[XÉom&Ø-TiC¶AGÍpºÕSm}-¬ÒeÉm ¶¶I ‚&Œß)®LiS·Ú5 ,¥:Š]Ù˜æòÏ™·lAðzíûùí×4ѧÿÄÖØÍ§]i.¡,“]ˆ†„‡ÚD˜Æ0Tϵ7£þ¼…{«Ç“üñ‹þøa>L_÷Àÿ äü7ê;ˆ]a¹cnÆ2€¸ ¼œ¹ç¥ FµŽ·£j3Ç ±Rò)hÄ–­¥K( øf´fû-¼/4Ëoh2Îê îk†Ð`¼ŽmxÔdû"8š+«O*+pP‚U¶®ãÐ[‚~µÚÚ\Cªé°\ˆ“qÈ©*Œàò29ßu+ÿjhÿÙ#U2Û-‰RÂf@ ÄgµYY,ÚÐ]í„@có7²6ã99qX¶RÂÖó[7œ!›loÌ-ŒÎyýiobž ®•¼ÿi›N „(` mcØœô>ôŸ_ë¸û]‹ëZ,ö“]#Ä"‡fûr¬3÷~R œöÀçµY±º°Ôaim’6TbŽŒ¬;`<Ž¢¹kø®u1}{ …äQm¡ÃBÉ(+!ft^¤¨Šg“üñ‹þøy0ÿÏ¿ïO¢€äÃÿŠg“üñ‹þøy0ÿÏ¿ïO¢€äÃÿŠg“üñ‹þøy0ÿÏ¿ïO¢€äÃÿŠg“üñ‹þøy0ÿÏ¿ïO¢€äÃÿŠg“üñ‹þøy0ÿÏ¿ïO¢€äÃÿ–ÒÕk{Ã_,ÚÒ?úÑ©H[=pB•ÿÇqIoýy¡¡.£§> 4™g‰îe˜Û‘¸•ï¸tžýk$Ká#p4²Xó6FÏGnÂÝG\Ó¯má‡ÆšCÅhÒErÎU@,pœŸST®u­7WñÙÜßÚÁo§Ü±<€I<ã§”øŸaȺ]AìÍKMKÃÚuãi–_g¶v—aX`)“t°w{g5cûLˆ°k†[†s†‰ÕY¿º¤ûf¹KÛiðèšf¡ÒI¨‹‰a[r^ÛçÛ¤ ´ Žçs\Ô-®µÍ=m5µÏâÓä ç0* 9$Ž:SZÚÿÖÂz_úîvUOPÕlt¨Ñï®R#„@ÝY‰ÀMIi}o|&6òoÊпÊFzŽzÖ/Œ­ám ç1FfYaU¨Ü•2ëŠ]PßRΡy¡iëw Q˜M![V`H<;•Rê})u{ýË··Ô£K¤œbì­p |ØUoï}Ɤo¬…„¶2ë_ÙóöÀ­ŽûI­Šà´è%›UÑôÛBë 2V‘¥ŽÜ©B²…i7fù±€Lšïiù‹­‚Š(¤0¢Š(¬úm…ÕÄwVÓOÜ’H•™~„ŒŠµE…T°b •èHéKEQEQE…T°b •èHéKEQE ŒƒÚª@píKEQEQEQE U X( zœrih¢€ (¢€ (¢€ (¢€°Ä#,H­)Ì„(Î1“ëÀˆ¢Ž’(cXãAµQ@J}QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEVïR³°–Ú;©Ö'¹“Ê„~fÆqíøÑs©ZZ]ÚÚÏ8I)‚K2ztãÖ¹ÿØ&­­i|„¨t¸uaÕ( ÃÜ eÉ¡-Þ™¬êðy7‹¬qÿu*Ì?ÞbOÐ kV—õØÚõæò^G?Šín#[ Kßí?%àDarÉÊ–sœ ÓŽj=I´ü^5ù_íñ© ÍÎñš»v³³ÓÞ’ÖÞð?ÌRv¿õßüL¬»­r+KWšk[°EÇÙã‹Ëælñ°gRGJä%²·K=KWH‚êë[Ràpá|Õ]¹ôÁ#ùmẀAqKø‘ÕÑÆCx"šW·Ëôÿ1½/åÿüŽÒÒý®eòÞÆîÜùbBfUÀÉ#nA#wǸ«•ÁëvæÏPÔàÓâh¡K `Él¸+œÛöþÎzT—÷^‡DŽ" 1즹T¸’T- 'i!œ sÀ‘Éæ—Kÿ[‹­¿­Ž¾îú &·Y؃q(†< åˆ$ÐÓ¾Óþœm|‰°#ó<í¿»ë¹þ÷|zWB-äðÕ¯ÚÚ 2ß[!™T˜D8  8L·©ÅkÎÊÚ•ÙÐvcû ý“ÈÞØÛøÓéëk¯õÞÇkEpº/öoöΕýƒ»w’ÿÚXÝÓon¯=j¾eogeáFÞ!ÝÍÛE<«Á•H“!½z¾”[Q_K¶¡ªØéQ£ß\¤"Gº³€šµ$‹O#œ"Ì}®ÆVð¶†ó˜£3,°ªÈTnÊ™õÅ^–m&ß[ši-üv›¤c»ˆCî}étQö:ÞŸª<°ÚNÍ,k¹£xž6ÁèpÀ=Årúü„n¿ëâOý Õ"ê+¯ÜOký© –„5ÆÑ‹|6D`¨ s’qŒü¼š¯¡ÿÈJëþ¾$ÿÐ>ˆ]NúÛýX¢‹oõbаzV>­þ¥¾•°zV>­þ¥¾”Çh SÅ’ÈœˆmQ’rEu1‘j3_%ÒÍ2*I…8m¹Áǯ8ÍsžñTÌ}"#ù×f‹$ÎëUTà³ óŒã!}ªOùô¸ÿ¾(ûTŸóéqÿ|U¿³Oÿ=ãÿ¿GÿŠ£ìÓÿÏxÿïÑÿ⨧ڤÿŸKûâµIÿ>—÷ÅM¹•Þ9Þ€:{þ†¡/¯ Kˆæ‚(ä•Z2Dzr(UŽÊ&ŽÞÂá¤a´œ³IçÜÔßj“þ}.?ìzüýÛÿ߃ÿÅQö=Gþ~íÿïÁÿâ¨?µIÿ>—÷Åj“þ}.?ìzüýÛÿ߃ÿÅQö=Gþ~íÿïÁÿâ¨?µIÿ>—÷ÅVŽ$QšüY݉Qc,ÊNgzrsV¦ŽúÖ&žY ’(ÆçUŒ©ÀêG&¬ VûTŸóéqÿ|Qö©?çÒãþø«4PoµIÿ>—÷Åj“þ}.?EVûTŸóéqÿ|Qö©?çÒãþø«4PoµIÿ>—÷Åj“þ}.?EVûTŸóéqÿ|Qö©?çÒãþø«4PoµIÿ>—÷Åj“þ}.?EVûTŸóéqÿ|Qö©?çÒãþø«4PoµIÿ>—÷Åj“þ}.?EVûTŸóéqÿ|Qö©?çÒãþø«4PoµIÿ>—÷Åj“þ}.?EVûTŸóéqÿ|Qö©?çÒãþø©¤•!Mò0Ué“Q¥ÜNá>tc÷D‘²núd Ð~Õ'üú\ß}ªOùô¸ÿ¾*Í[íRÏ¥ÇýñGÚ¤ÿŸKûâ¬Ñ@¾Õ'üú\ß}ªOùô¸ÿ¾*Í[íRÏ¥ÇýñGÚ¤ÿŸKûâ¬Ñ@¾Õ'üú\ß}ªOùô¸ÿ¾*Í[íRÏ¥ÇýñGÚ¤ÿŸKûâ¬Ñ@¾Õ'üú\ß}ªOùô¸ÿ¾*Í[íRÏ¥ÇýñGÚ¤ÿŸKûâ¬Ñ@¾Õ'üú\ß}ªOùô¸ÿ¾*Í[íRÏ¥ÇýñGÚ¤ÿŸKûâ¬Ñ@¾Õ'üú\ß}ªOùô¸ÿ¾*Í!'rRsù¯ö©?çÒãþø£íRÏ¥ÇýñJ¿jºšd·x£X˜)gRÄœg¦Gb)ÿcÔçîßþüþ*€#ûTŸóéqÿ|Qö©?çÒãþø©>ǨÿÏÝ¿ýø?üUcÔçîßþüþ*€#ûTŸóéqÿ|Qö©?çÒãþø©>ǨÿÏÝ¿ýø?üUcÔGK«cíä‘ÿ³Pj“þ}.?ïŠ>Õ'üú\ß,a F%XzH?¨5%VûTŸóéqÿ|Qö©?çÒãþø«4PoµIÿ>—÷Åj“þ}.?EVûTŸóéqÿ|Qö©?çÒãþø«4PoµIÿ>—÷Åj“þ}.?EVûTŸóéqÿ|Qö©?çÒãþø«4PoµIÿ>—÷Åj“þ}.?EVûTŸóéqÿ|Qö©?çÒãþø«4PoµIÿ>—÷Åj“þ}.?EVûTŸóéqÿ|Qö©?çÒãþø«4PoµIÿ>—÷Åj“þ}.?EVûTŸóéqÿ|Qö©?çÒãþø¥7°p]€à²FÌ£ê@À©ÑÕÔ20e<‚A  ÿj“þ}.?ïŠ>Õ'üú\ßfŠ­ö©?çÒãþø£íRÏ¥ÇýñVh  ßj“þ}.?ïŠ>Õ'üú\ßfŠ­ö©?çÒãþø£íRÏ¥ÇýñVh  ßj“þ}.?ïŠÉ¸Ò¾×x&¹“Uš(”Z¶ß(09qó‚k~Š­ö©?çÒãþø£íRÏ¥ÇýñVh  ßj“þ}.?ïŠ>Õ'üú\ßfŠ­ö©?çÒãþø£íRÏ¥ÇýñVh  ßj“þ}.?ïŠ>Õ'üú\ßfŠ­ö©?çÒãþø£íRÏ¥ÇýñVh  ­vÀ|ÖÓŒú¥rZ/ü„î¿ë»ÿèF»fû§é\VƧuÿ]Ÿùšï-¿ÕŠ(¶ÿV(¦"ÁéXú·ú–úVÁéXú·ú–úP+á¯ù§ÿ®gùì`2yw¾Nß49Ù»¦v.3\w†¿äfŸþ¹Ÿäk«Yš(µB7+’223å¥!™×sèä³oÞªF[÷cÛ8ý8­ëmR—2ŽpxÏQ߯Õ…ö›ÍA2èËÇȃ<ò}‡æh±†I.!+ªŠà³•ÛŒ®rxÏ®M1“ôé‡ý1Oæõ SÝÛxjÚK+?µ\yH3 AÓ©' Ù>ÔçlßÏÿ\#þoV4¡Ðz¿ʥí ÊþÔçÖ|9c¨Ü¤i4ñïuŒ äôÉ&°¥ñV¨ž~¨¶öŸØ_}ÔîóÈÞ#2¸ ~î:µ§£iš®áí'N‰¬šH-Ó9b |çgæé׎µ™/…uGék=§ö,÷ßlv;¼ð7‰ `cn ½ž‡¥^œÞ_ðWéruåþ¼ÿ[¾*ÕÏÕÞÓû ﱺÞyÄf@s·ÝÇAÖ‰|Uª'Ÿª-½§ö$ßcu;¼ò7ˆÌ€çn»Žƒ­øWSq>–³ÚbÏ}öÇc»ÏxÆ6à°ûÙèzQ/…u7ék=§ö,÷ßlv;¼ð7‰ `cn ½ž‡¥(ô¿õ·üêÀï­¿­ÿàW:}SþA7ŸõÁÿôUoïaÓíd¹œŸ-=I$àõ&­jŸò ¼ÿ®ÿ š¯wk ä[ÜF$‰øe=êe{i¹pµ×6Ç?ÿ §üù]ßQñtÂgiÿ>W_÷Ô_ü][ÿ„KDÿŸ7ÿÀ™øª?áÑ?çÍÿð&_þ*¹9q]×õò=|òËðÿ2§ü&vŸóåuÿ}EÿÅÑÿ §üù]ßQñuoþ-þ|ßÿeÿâ¨ÿ„KDÿŸ7ÿÀ™øª9q]×õò|òËðÿ2§ü&vŸóåuÿ}EÿÅÑÿ §üù]ßQñuoþ-þ|ßÿeÿâ¨ÿ„KDÿŸ7ÿÀ™øª9q]×õò|òËðÿ2§ü&vŸóåuÿ}EÿÅÑÿ §üù]ßQñuoþ-þ|ßÿeÿâ¨ÿ„KDÿŸ7ÿÀ™øª9q]×õò|òËðÿ2§ü&vŸóåuÿ}EÿÅÑÿ §üù]ßQñuoþ-þ|ßÿeÿâ¨ÿ„KDÿŸ7ÿÀ™øª9q]×õò|òËðÿ2§ü&vŸóåuÿ}EÿÅÑÿ §üù]ßQñuoþ-þ|ßÿeÿâ¨ÿ„KDÿŸ7ÿÀ™øª9q]×õò|òËðÿ2§ü&vŸóåuÿ}EÿÅÑÿ §üù]ßQñuoþ-þ|ßÿeÿâ¨ÿ„KDÿŸ7ÿÀ™øª9q]×õò|òËðÿ2§ü&vŸóåuÿ}EÿÅÑÿ §üù]ßQñuoþ-þ|ßÿeÿâ¨ÿ„KDÿŸ7ÿÀ™øª9q]×õò|òËðÿ2§ü&vŸóåuÿ}EÿÅÑÿ §üù]ßQñuoþ-þ|ßÿeÿâ¨ÿ„KDÿŸ7ÿÀ™øª9q]×õò|òËðÿ2§ü&vŸóåuÿ}EÿÅÑÿ §üù]ßQñuoþ-þ|ßÿeÿâ¨ÿ„KDÿŸ7ÿÀ™øª9q]×õò|òËðÿ14½n_U@Kþ$*~l¨m'±?_¾»K.íÔ ÑFdS¹[  ðOqYÿÙ6º,âîÆHö2KûÆsɘžOZt÷ò- ÜÏÜÿóé/ýô¿ãW~_ùçýò(ùçœ÷È  _nùô—þú_ñ£íÏÿ>’ÿßKþ5wåÿžqÿß"—þyÇÿ|Š¥öçÿŸIï¥ÿ>Üÿóé/ýô¿ãW~_ùçýò(ùçœ÷È  _nùô—þú_ñ£íÏÿ>’ÿßKþ5wåÿžqÿß"—þyÇÿ|Š¥öçÿŸIï¥ÿ>Üÿóé/ýô¿ãW~_ùçýò(ùçœ÷È  _nùô—þú_ñ£íÏÿ>’ÿßKþ5wåÿžqÿß"—þyÇÿ|Š¥öçÿŸIï¥ÿ>Üÿóé/ýô¿ãW~_ùçýò(ùçœ÷È  _nùô—þú_ñ£íÏÿ>’ÿßKþ5wåÿžqÿß"—þyÇÿ|Š¥öçÿŸIï¥ÿ>Üÿóé/ýô¿ãW~_ùçýò(ùçœ÷È  _nnö²õ_ñ«YËDGBsÿŽšËÿ<ãÿ¾E1¾üSüS7ñéVÖ¡*–Kbe*:œF§SKÖõq«YYk0Ù¨Ô-Ú{slÊà”mÄäá‡#hØGªØkZ|¬U.Iˆ°ê3ŒÕ ]ÄîÞöö]8ÜéörAd#.VI¾Nå õ<з×úßþõq?/ëoø%­SVÕŸ[}+EŽÏÍ‚Ô\Í%ØbI €)'iç·¡­-TMkD³Ô‘ bâ0å ÎÓÜ~5“y¤ë‰©®«§I§ý²{5¶ºŽbâ0À’œn21È­mKMD³ÓQÌ‚Þ0…ÈÆãÜþ'4ÖÚÿ[ÿÀþ®ëËþ ¡EPU±ÄRúm7þŒjÃX†";k™³®ÀzŒ°?¥nZóŸõÚoýÕšÞÑ]Ë" 9ÂÏ"ÀÀ¬jª®Þͯ™Ó‡t~Ù7èSÿ„ÎÓþ|®¿ï¨¿øº?á3´ÿŸ+¯ûê/þ.­ÿÂ%¢Ï›ÿàL¿üUð‰hŸóæÿø/ÿXr⻯ëätóà?–_‡ù•?á3´ÿŸ+¯ûê/þ.øLí?çÊëþú‹ÿ‹«ð‰hŸóæÿø/ÿGü"Z'üù¿þËÿÅQˊsà?–_‡ù•?á3´ÿŸ+¯ûê/þ.øLí?çÊëþú‹ÿ‹«ð‰hŸóæÿø/ÿGü"Z'üù¿þËÿÅQˊsà?–_‡ù•?á3´ÿŸ+¯ûê/þ.øLí?çÊëþú‹ÿ‹«ð‰hŸóæÿø/ÿGü"Z'üù¿þËÿÅQˊsà?–_‡ù•?á3´ÿŸ+¯ûê/þ.øLí?çÊëþú‹ÿ‹«ð‰hŸóæÿø/ÿGü"Z'üù¿þËÿÅQˊsà?–_‡ù•?á3´ÿŸ+¯ûê/þ.øLí?çÊëþú‹ÿ‹«ð‰hŸóæÿø/ÿGü"Z'üù¿þËÿÅQˊsà?–_‡ù•?á3´ÿŸ+¯ûê/þ.øLí?çÊëþú‹ÿ‹«ð‰hŸóæÿø/ÿGü"Z'üù¿þËÿÅQˊsà?–_‡ù•?á3´ÿŸ+¯ûê/þ.øLí?çÊëþú‹ÿ‹«ð‰hŸóæÿø/ÿGü"Z'üù¿þËÿÅQˊsà?–_‡ù•?á3´ÿŸ+¯ûê/þ.øLí?çÊëþú‹ÿ‹«ð‰hŸóæÿø/ÿGü"Z'üù¿þËÿÅQˊsà?–_‡ù•?á3´ÿŸ+¯ûê/þ.£¸ñ„ÛKV·)#! ţœpxlÕÿøD´Oùóü —ÿЍçð–’`AlÉ1S±Œò±Ájj8›ê×õòžÚFWþ¼ÍÏ´ÅlÑÛª…@u:ŸÒ¨Gr`º¼… wD—åÚT•V#“êIüj¨…ßæ†ÐüÊ]†ßÀëVôøÜ æ–5y…eÉj¯?–ë<ðûsÿϤ¿÷Òÿnùô—þú_ñ«¿/üóþù|¿óÎ?ûäP/·?üúKÿ}/øÑöçÿŸIï¥ÿ»òÿÏ8ÿï‘GËÿ<ãÿ¾ERûsÿϤ¿÷Òÿnùô—þú_ñ«¿/üóþù|¿óÎ?ûäP/·?üúKÿ}/øÑöçÿŸIï¥ÿ»òÿÏ8ÿï‘GËÿ<ãÿ¾ERûsÿϤ¿÷Òÿnùô—þú_ñ«¿/üóþù|¿óÎ?ûäP/·?üúKÿ}/øÑöçÿŸIï¥ÿ»òÿÏ8ÿï‘GËÿ<ãÿ¾ERûsÿϤ¿÷Òÿnùô—þú_ñ«¿/üóþù|¿óÎ?ûäP/·?üúKÿ}/øÑöçÿŸIï¥ÿ»òÿÏ8ÿï‘GËÿ<ãÿ¾ERûsÿϤ¿÷Òÿnùô—þú_ñ«¿/üóþù|¿óÎ?ûäP/·?üúKÿ}/øÑöçÿŸIï¥ÿ»òÿÏ8ÿï‘GËÿ<ãÿ¾EC¾l%¶•ê=EqÚ?ü….¿ë³:í[îœ:\Vÿ!K¯úìß΀;ËoõbŠ-¿ÕŠ)ˆ°zV>­þ¥¾•°zV>­þ¥¾”ÊøkþFiÿë™þFº¶Žx¦‘àȲÌŽÅppAöŠä¼=—ÄwY”ú©Áï]CÇm•3Ü–B±l~BÉ7^ÿÏ­¿þ7ÿFëßùõ·ÿÀ†ÿâ*[Ï[ßûå¿øš1mÿ=o?&ÿâhÄÈIg+æHÂòFp3ß©9÷§B·VЬ0ω<%ˆ™ ?•Eöx ~gÚ'Ù×w˜1ü©>Í÷¯&ÿâhÏ™ÿ?ßøßü]eÿüü[à;ñu[ìÑÿzûþùoþ&”[D[o›t¬zb¹üÅXó/ÿçâÛÿÛÿ‹£Ì¿ÿŸ‹oüoþ.«›hCÝ3¡X¶?!Iöhÿ½}ÿ|·ÿ@J·W´Sω¸p•$zd±þU5Sû4c«^þMÿÄÒýš/ÌûDû=|ÁþnЧöhÿ½{ù7ÿGÙ£þõ÷ýòßüM\¢ª h‹món•@ÌW?˜§8ÔdÍpýtÿëPš*¯Ùû÷™ÿ >ÈŸß»üÏøPª*¯Ù#Î<Û} cúQöHó-É#°lÿJµEUû"~ïó?áGÙû÷™ÿ µEUû$[wyóã×ÌÿëQöDþýßæ€-QU~ÈŸß»üÏøQöHó6äBØþ”jŠªÖ‘"–içw2õ©¿fû׿“ñ4rЧöhÿ½}ÿ|·ÿJ-¢-·ÍºV=1\þb€-ÑU ´!Љn™‡P¬[¤û4Þ¾ÿ¾[ÿ‰  • ½¤»ü˜Âo98ÿ==ª³F:µïäßüM/Ù òüÏ´O³×Ìá@èªfû׿“ñ4}š?ï_ß-ÿÄÐÊ* ¶„¶ß6éXô ÅsùŠ ´!Љn™‡P¬[  tU?³Gýëïûå¿øš>Íê׿“ñ4rŠ©öh<¿3íìõóøR}š?ï^þMÿÄÐÊ*ŸÙ£þõ÷ýòßüM(¶ˆ¶ß6éXô ÅsùŠ·ET6І*%ºfB±l~B“ìÑÿzûþùoþ&€.QTþÍê׿“ñ4¿fƒËó>Ñ>Ï_0…[¢©ýš?ï^þMÿÄÑöhÿ½}ÿ|·ÿ@(ª‚Ú"Û|Û¥cÐ3Ïæ(6І*%ºfB±l~B€-ÑTþÍ÷¯¿ï–ÿâhû4c«^þMÿÄÐÊB2Ê}ô"«-¤N¡–yÈ=ÄŸýjŠU³¶Ë{"F˜é@V9¡–G·•Í!œInqŒŒ0ì?Ì¿ÿŸ‹oüoþ.³üÝ7þ‚'þÿð£ÍÓè"ïøÿ Ðó/ÿçâÛÿÛÿ‹£Ì¿ÿŸ‹oüoþ.³üÝ7þ‚'þÿð£ÍÓè"ïøÿ Ðó/ÿçâÛÿÛÿ‹£Ì¿ÿŸ‹oüoþ.¨«éîÁSPfcÐ Ç?¥XûóÚãþþõ¨h¢Äq’IêI9'ó&ŸU¾Åüö¸ÿ¿Ÿýj>Åüö¸ÿ¿Ÿýj³EVûóÚãþþõ¨ûóÚãþþõ¨Í[ìQÿÏkûùÿÖ£ìQÿÏkûùÿÖ  4Uo±Gÿ=®?ïçÿZ±Gÿ=®?ïçÿZ€,ÑU¾Åüö¸ÿ¿Ÿýj>Åüö¸ÿ¿Ÿýj³EVûóÚãþþõ¨ûóÚãþþõ¨ÍÏ뺵‡‡þÏö³~þ~í¾S)ÆÜg9Ǩ¬øN´OîjßøçÿYJ½8¾Y=NyâèÓ—,åfwWÿ Ö‰ýÍ[ÿÿâ«®kH‘K4ó€;™?úÔáV>réW§VþÍÞŪ*ŸÙ£þõïäßüMfû×ß÷Ëñ5¡©rЧöhÿ½{ÿ|·ÿGÙ£þõïýòßüM\¢©ýš?ï^ÿß-ÿÄÑöhÿ½{ÿ|·ÿ@ÉiÓÇ;ÆDû¦§ªfû×ß÷Ëñ4xGÞ’íG«dÌŠ¹EVûóÚãþþõª»>žŒUõVAœ…hÑYžn›ÿAÿÇøQæé¿ô?÷ü…iÑYžn›ÿAÿÇøQæé¿ô?÷ü…iÑYžn›ÿAÿÇøQæé¿ô?÷ü…iÑYžn›ÿAÿÇøQæé¿ô?÷ü…iÑYžn›ÿAÿÇøQæé¿ô?÷ü…iÑYžn›ÿAÿÇøQæé¿ô?÷ü…iÑYžn›ÿAÿÇøQæé¿ô?÷ü…iÑYžn›ÿAÿÇøQæé¿ô?÷ü…iÑYžn›ÿAÿÇøQæé¿ô?÷ü…i7Ý?Jâ´ù \ÿ×fþuÔ$0Ox.åp;‰Ëèÿò¹ÿ®Íüè¼¶ÿV(¢ÛýX¢˜‹¥cêßê[é[¥cêßê[é@¯†¿äfŸþ¹Ÿäkª² ¬¤ŒŸ5ÿô"+•ð×üŒÓÿ×3ütv„—þ»Iÿ¡µ!š_/÷JcK ʱQ#ʧ‚@ÆHÙ˜¯+ñt³¿ˆ¯bµ³73æäÄï¶3û¸à6rkODÓÓKÖ¼<«G4š|í6æ$–Ýsšwcí¥ù~ÓÓþÙnþ|Ö±`$à Ŷoôóÿ_gÿDT>$:Û%£hÓ[FlÜùé¸ÇÔdzŒ¯ zn³§êñÊú}ÜW ˜ßËlíaØÿ1ê5-ö>Î9&¦Xë^gá‡Öeýæ}¤Iê³Å·‡Æ^N§yà‚ B9 s鯛AëæÇÿ¡­-´¢+&‚I‘†Rwò'™wÿ<`ÿ¿Çÿ‰¬÷˜E¦+ÓØœø¬«û+ë‹§ÖQå‹ìò-¨""¨ Ç»fyngð ™gH©4h»Î£îÆpxüª§QÙ—í?ížïçÍTµšxÍŒWNí)¹q—Û»e+¼gh*}ßñ4ÿ·Ÿý¡@Úy ŒÆ°á‹¾ÑœgƒØÎ“Ì»ÿž0ßãÿÄÖMÔÓÉöèí’E¸A¹6îÛ¶"ØÝÆv“Ö¢ŒÝ¥Ì,·Íf2­Á·ÚWkcs»mkÜʲ٬€`‰T`õS¼)ÌSOúÈÿÞ?ÈÕT˜K¥³Óá”ø«.q$_ïýÐÍ" Ë Ã(#k:òIN~ïðš„\Ï #s°ô4ƤßêóÜ2ÿ0(„þïêÍüÍCæ¬ÖÂEèÌ¿ú¥Yvå@Íÿ¡°\*’z ÕÆTñYÍ4®ŒrJÎ1Nµ‘Ú^>ïñfxûF;yŸû&Ožj®Òí§þÓ¨î1-ÔQIþ«°z1¿­/f£›ý^{†_ædqöÏ/ʇÉóq¿É÷ÏOÃ5~#ÿèÝùŠ”ÿÇŰ= ‡ÿAcý*ök=Î.­?ë©ÿУÖ5ˆô«mä™ò#8ÉîI죹þ¤ jïD'¡KÄ^5Ò¼2ëá–IJ‡d„)(§¡9#®SƒÅiÉu î—oynÁá—Ê’'ª±?ˆ?­yÇü!1øÏRMZîyⳑÃÜp»`0 ÿqwÈð#è³G¶™¼#Š&…¢¨u‡ -K'ýžæGÏýôGô¨oõ{M7þ>n¹öÇó4ëÅ©ÿ®²èm^wâMFï8y6ßê)Ö²nËó’W°P@÷Ü}ë:•U5y +³Ð4½j×WG{R̈p[¶i8ŽÌ|¿héÿl÷>j—…t¥Ñt+{mÅäÆçb0I=jÎïøšÛÏþЭŠZߊ›C×ì,§Ó¤{+¨Üo¸£®0‚0 19*k_Z\^Am-µå¡¸%ak˜Â Àäq“ȬÉ-ÏĽx(-'™ãnY2UsÓ©ãô ëYž2¼µ‹R•ogŠ ¾Ah†æàìdûÞi#ìƒS)r«+ž}³ƒŽD‰ƒé–úÓ-æH,%žC„F‘±žOaUy§Ðí¤¹ËŒ&DÎpÛ×"œÒlÐî›vÜ Îï7ËÇÌßÅü?^ÝiˆTñšå6Í'Ͱ Àãåx÷ÏÝÏY±¿˜Co#´†?7kDéòçä öëÐô5Á}¢&n$RIÃîÎîG=óÛÖ¶<+pªÊU`m÷õ±ûݺw¦EÀÔvcåûGOûg»ùóSjš€Ó4énÙ7ˆñò“É“ƒÏ¡ª»¿âiÿo?ûB¨ÝÎ.uÙm¯ŸÊ†[#}ÙxåýÈ y„rN;ãÍkiâÒÚðÝÆöá^IeÜ|ÆfÆÖ 9 1Ž{ ¢ÿ5›ÀÔvcåûGOûg»ùó\w…5­N=nßL¿{–Yá2§ÚNX¯8=I‚Ïå]nïøšÛÏþЩNåÊ<¬ŸUÖ´ýÙnu•‚&q±å@Ò±m¾#xNîUŠ ff•aGÆòp8À9­ëˆ­î6ãGò›z–Úq×ò&¼á­­ÅωíîbŽT7þhW÷ üpA§vIë·¤`Þ’&Õ€þF–Äÿ£ÜÈùÿ¾ˆþ•ë²?ç¬úÒØ¾-Oýu“ÿCjY–â84Ž´g¹ôôðàô¯7‹TŽÞÿí”/>¡4Æ/5",`Ç 3ü¯¯¾yÉ®‹Â²_iBêYÞId;›ºo!1í·ñÍ…À¸¹€$éõU?Ö"4kY$(¥Úi2ÄrpÄÐ jÝ]ÿ×Qÿ -6ÆÚ+Íkiä–U`®T‘¼÷@c¸³–)%Žh8Ë+º°!Jõö#½6ÊòÃQ„Ícsmu;KÀêê¦EyëÁ¯€5‹x£ÙE¬ºJˆ0p¡‡Ónsí[–W:uŸŽ59­¦µ‚ÀX@.]V1)v “Ó;qúSZÿ^W%»_úëc£ŸPÓ-nâ´¸¼´†æ_õpÉ*«¿ÑIɤ—SÒ ½K)¯¬ã»|låPíŸE'&¸_ZO§¦ºÂ-:ïû\"À%˜­ÂI´*ª(S»‘¸r1ÏÖ®øÞ žó$›N"ÞÆÀ ‰J• #çåcŽ>RyàŠõýy ïc·’ÞcdxÑ•†"³¬Ý¤°¶v$³D„“ÜàVš6øÕ°F@8=EbƳ¾ƒÛ2¬æÕDlÝlã?' ã©z¡¸•ÓËŽwa¡¼ˆo³ç=ó¶µá†(áEHÑT(À±e9ðãúuÿÙku?Õ¯ÐRC ‰ýÅü¨ØŸÜ_ÊE1 ØŸÜ_ʉýÅü©ÔPv'÷ò£bq*u݉ýÅü¨ØŸÜ_ÊE7bq*6'÷ò§Q@ ØŸÜ_ʉýÅü©ÔPv'÷ò£bq*u݉ýÅü¨ØŸÜ_ÊE7bq*6'÷ò§Q@·H±ê ±Bù9l g1ÿ¡θÝþB—?õÙ¿v—¿òƒþ¸Kÿ¡G\^ÿ!KŸúìßÎå·ú±EßêÅÀ°zV>­þ¥¾•°zV>­þ¥¾”ÊøkþFiÿë™þF·-Ûå˜g‘<¹ÿ¾Ú°|<æ?Ü0Fr#ûª2OZé&†)ä2=•ØsÔÆY3õÚFi ÁŸC¾kû‹»}rîÜÎAeH <€2c'qɧÙèwj±_Þj·7²CG•cP¡Š“÷Uº:Ö¿ØàÿŸMCþÿKÿÅQö8?çÓPÿ¿ÒÿñT[8ûVü¦ô€íŽ?Ÿ¨Äæ©‹n-ÆŸ0ˆËâ£òÇüðÔïô¿üUMgakaæ}’Ú8DŽ]ö.2Ç’i÷þŽ«žZh°=~p5[ÊóÃQÿ¿òÿñTèÕcH-/ÇC!wÇÓq8 òóM’åOœä2ã(ÂRÊ~ àÔB-iFúÃõäÿÒZ’EY¹´¼V=LeÓ?]¤f›åùá¨ÿßùøª ³»k¸§½¹†S-C Œ Ç,Äœ:ަ¼ýù~׌ÿÛ >)¾RÿÏ GþÿKÿÅT™O³ˆ>Á7”?‡eGqet.åžÊæüâDž"– Œ2pêz ìúÇüþéãÜY?ÿ©<±ÿ<5ûý/ÿG”?熣ÿåÿâ¨þBÙé±[«³“:ÍÕØÈþ„jܧBÛ?ú ªqªÇ Z^3ކBï¦âqS4ìêU¬ç ÿ±@È‹"•qi­ 4^Q_“ÅC¼ÿϽïýôÿãFóÿ>÷¿÷ÓÿJʱ@± ÀÞ ø?ãJd…•¹Û#þj%r¬ì—E‡BÛ› !f-öK OR¡—?•L#Q–åô¥DX×jŒ ¯¼ÿϽïýôÿãFãÿ>÷¿÷ÓÿI¸yùÏv3ÿlñüéòF²Œ8È#œ`Ô^oîü¿±O³Óe7yÿŸ{ßûéÿÆ€%òÖOûúßãJáREàn@£èÃú ‡yÿŸ{ßûéÿÆ•\«û%ÑaжæÇç@\6Û‹2HÎ#Ÿ÷©_è–ºú]]y’@žIoݶ 9#¿_\àÕ©%3FRK)ÙOPR òÇüðÔïô¿üU°X¼2 0AQ^?ú:®yi¢ÀõùÁþ@Õo(Ï GþÿËÿÅS£UŽA ´¼g …ßMÄâ€'³ôfò&”o«'Lð¶Ÿ¥Ü4è4˜ )ÜcAÑG ~EY¹´¼V=Le“?]¤f›åùá¨ÿßùøªÐREQÞ þü¦ïÿ¶þ|S|¥ÿžýþ—ÿŠ©2‚ÜAö ¼¡ü;(…ׇ–oZë±ÝÍ ÆÑ¼ ÷&Î9o~ä*—‰|‰/­n¥¼–ÄûUA å¹q×ÜÖÇ–?熣ÿ¥ÿâ¨ò‡üðÔïü¿üUXºm¶±¦y2Äõéþ@š[RÑÐà6Pïñ·_Àﻂ Z^3ކBï¦âqDв9six¬z˜Ë¦~»HÍXð‚‚1¸Â1ÓòíNŠ(¢`c‰´mP8Îqôª~Pÿžýÿ—ÿŠ£Ê_ùá¨ÿßéøªvðo÷ämû^3ÿl1üø§jz|:¥±†mÀƒ”‘±ÖŒ§ÙÄ`›Êò£òÇüðÔïô¿üUVƒÃÖ¶º%Λ eûDn’LÜ»'¹æ¤±°þÈðýž›çy¦'‰íÛ¿÷€ž>™üª_(Ï GþÿËÿÅS£UŽA ´¼g …ßMÄ╺ŽîÖ'³oôfò&”éóµeKá‹ uU¾a&·ù¿w¿ûû}jôв9six¬z˜Ë¦~»HÍ7ÊóÃQÿ¿òÿñTÄA&ˆ$ñM¶´'*a·0y;8<“œçަ¬ïÿ~Fßµã?öÃÏŠo”¿óÃQÿ¿ÒÿñU&Sìâ°MåáÙJÃm½Ë3Æ—I ¨²E"”taÀŒk/Kð֢ܽƛ§Ak+¬Ñ RG¡ÇÐTþXÿžýþ—ÿŠ£ÊóÃQÿ¿òÿñTÄY¼ôu\òÓEëóƒü¢Í¿Ñ˜ÈšPG§ÎÕj±È$—Œã¡»ã鸜Q"¬Ž\Ú^+¦2韮Ò3@1x'D76Ÿm”‰n±#×ǯ>ä’rI®‚’T(à*Ÿ”?熣ÿåÿâ¨ò—þxj?÷ú_þ*€-[¶ùïr ÀôEõ—O»¶´·xn."†A,‡lŽà± óìj8¥òcXã²Qz”ÿµÉÿ>·÷Á  RçFŠ)"ŽkŽVf‘U-÷‰ÉïëPG†á³k8£Ò’Õ›sB¢0„ç9+Ó9ö¹çÖçþø4}®_ùõ¹ÿ¾ 8>„/ðm;ídm7O0MÝj9!ðÜ×ÂúXô—¼pËc§ÍÖö¹çÖçþø4}®_ùõ¹ÿ¾ ZmVÀ)+yœp© $û:Õ{HÚ++xÜa’%Và oÚåÿŸ[ŸûàÒ}ªOùô¸ÿ¾(ÍEqn—1ß>¡‡U>¢£ûTŸóéqÿ|Qö©?çÒãþø  X]I9Žá± õu82{Oz×UTPªP0íUþÕ'üú\ß}ªOùô¸ÿ¾(Í[íRÏ¥ÇýñGÚ¤ÿŸKûâ€,ÑU¾Õ'üú\ß}ªOùô¸ÿ¾(Í[íRÏ¥ÇýñGÚ¤ÿŸKûâ€,ÑU¾Õ'üú\ß}ªOùô¸ÿ¾(‰ø›ÿ0¿ûkÿ²WŸ×¯ëº-¿ˆ>Ïö¸/ÓÈÝ·Êgv3œƒè+þ-/ûº·þ;ÿÄ×—ˆÂT©UÊ;7/­Z¼§ ¿#Î+Ýî-Å™$çÏû\ü Z_÷uoüwÿ‰®¶ILÑ”’ÊvSÔ­ðt'K››­Ž¬· SÍí:Ûõ÷N°ÔMí…­É_ºg…_LŠI´û+‹xíç±¶–þäRB¬«ô`T^Xÿžýþ—ÿŠ£ÊóÃQÿ¿òÿñUÚz„ÉciK;uA ”*Ä §_~´³YÚÜyž}¤ùªMñÞ Ž@Éüê(Ï GþÿËÿÅQåùá¨ÿßùøª±kimc•gk´yÎÈc3ëQÞiÖ:C{aktS;|øUöç®2*?(Ï GþÿËÿÅQåùá¨ÿßùøªEÒ¤·ŠÞM*Åá‹>\ml…S=p1Ÿj³gkg¦ÄÉkmokK²Ã¢ç¹ j­åùá¨ÿßùøª (x{[çÝ’IOÔƒ@òÝü<" L†Ø(^ùÛZI©ØÔÛu8 }AéU>Õ'üú\ß¿k—þ}nïƒ@ÿµ4ÿùþ¶ÿ¿Ëþ4jiÿóýmÿ—üj§ÚåÿŸ[ŸûàÑö¹çÖçþø4oûSOÿŸëoûü¿ãGö¦Ÿÿ?Öß÷ùƪ}®_ùõ¹ÿ¾ k—þ}nïƒ@ÿµ4ÿùþ¶ÿ¿Ëþ4jiÿóýmÿ—üj§ÚåÿŸ[ŸûàÑö¹çÖçþø4oûSOÿŸëoûü¿ãGö¦Ÿÿ?Öß÷ùƪ}®_ùõ¹ÿ¾ k—þ}nïƒ@ÿµ4ÿùþ¶ÿ¿Ëþ4jiÿóýmÿ—üj§ÚåÿŸ[ŸûàÑö¹çÖçþø4oûSOÿŸëoûü¿ãGö¦Ÿÿ?Öß÷ùƪ}®_ùõ¹ÿ¾ k—þ}nïƒ@ÿµ4ÿùþ¶ÿ¿Ëþ4jiÿóýmÿ—üj§ÚåÿŸ[ŸûàÑö¹çÖçþø4oûSOÿŸëoûü¿ãGö¦Ÿÿ?Öß÷ùƪ}®_ùõ¹ÿ¾ k—þ}nïƒ@ÿµ4ÿùþ¶ÿ¿Ëþ4jiÿóýmÿ—üj§ÚåÿŸ[ŸûàÑö¹çÖçþø4égŠêõ Xã…ÕFX®}~S\~‘ÿ!KŸúìßκǻ||ÖÓŒú­ršGü….ë³:wvßêÅ[«SÁéXú·ú–úVÁéXú·ú–úP+á¯ù§ÿ®gùéííVKHšW¸Þñ‚ÄÌà䃟îãïÃp6€9 ÈÍ?ýs?È×[d»l-—nÜD£qŽl.?!ô) Ò6Ý–›œç¸ë»ß¼OîŒEv–¶¶—WÌÄ$Œ&“åP“€sÑOAº1r²¼Mÿ"¦±ÿ^3è€-S '(lðndÞ>ñúqýÑ…kBÛ³žsœ]H:îü¾ñý?º1Ëê²^]Ïâ+ÄÔnmΖ¶Ž) ¦DaÉuèÙ'ö®®Êsscop˴˹™¡mpÖ…·g<ç8ºuÝù}ãút`kBÛ³žsœ]H:îü¾ñý?º1jŠªÖ…·g<ç8ºuÝù}ãút`kBÛ³žsœ]H:îü¾ñý?º0ëÈõ >Úö ËÄK* 0gßš±@ZжìçœçR»¿/¼OîŒ h[vsÎs‹©]ß—Þ?§÷F-Q@ZжìçœçR»¿/¼OîŒ h[vsÎs‹©]ß—Þ?§÷FoyÌ÷q `Ö²ˆŸ#‚J+ñ퇎jÅUkBÛ³žsœ]H:îü¾ñý?º05¡mÙÏ9Î.¤w~_xþŸÝµEUkBÛ³žsœ]H:îü¾ñý?º05¡mÙÏ9Î.¤w~_xþŸÝr^Fú„Ö@7™QÊÄŽràcßä?¥X  ­h[vsÎs‹©]ß—Þ?§÷F´-»9ç9ÅÔƒ®ïËïÓû£¨  ­h[vsÎs‹©]ß—Þ?§÷F´-»9ç9ÅÔƒ®ïËïÓû£{ÈÓP†È†ó%ŠITÀPûüãõ«U­ nÎyÎqu ë»òûÇôþèÀÖ…·g<ç8ºuÝù}ãútbÕŸt±ÛÇæNåÝcȹ—ï;Ç2cÛŽ›F&kBÛ³žsœ]H:îü¾ñý?º1SÄò ‡þ¿­?ô¢:ǘ½Ÿˆæ¸ÕFª–Ó]"ÚÍÛ}~UYøËgªãš:Ø:\èÚжìçœçR»¿/¼OîŒ h[vsÎs‹©]ß—Þ?§÷F8ù®¯~Áuât%‡Q0­°ù^P”G°§BHÉÏ\Ñ5ÝïØ.¼@/î„°ê>JÛ •å D{ t$ŒœõÍ []¿ÌMÛúõÿ#°kBÛ³žsœ]H:îü¾ñý?º05¡mÙÏ9Î.¤w~_xþŸÝuõäz~Ÿs{(c¼M+„$($ãߊ±@Ê­h[vsÎs‹©]ß—Þ?§÷F´-»9ç9ÅÔƒ®ïËïÓû£¨  ­h[vsÎs‹©]ß—Þ?§÷F´-»9ç9ÅÔƒ®ïËïÓû£ª½äz†Ÿm{eŽâ%•Œ3ïÍ5­ nÎyÎqu ë»òûÇôþèÀÖ…·g<ç8ºuÝù}ãútbÕU­ nÎyÎqu ë»òûÇôþèÀÖ…·g<ç8ºuÝù}ãútbÕW·¼Žæ{¸0kYDO‘Á%øöÃÇ4Ö´-»9ç9ÅÔƒ®ïËïÓû£ZÝœóœâêA×wå÷éýÑ‹TPV´-»9ç9ÅÔƒ®ïËïÓû£ZÝœóœâêA×wå÷éýÑ‹U]/#}Bk ÌŠ(åbG9p1ïòÒ€Ö…·g<ç8ºuÝù}ãút`kBÛ³žsœ]H:îü¾ñý?º1jŠªÖ…·g<ç8ºuÝù}ãútb?µ¥«9L"¨¹”eAÃ(ý1÷F4+&è1ñM€R}‚ëŒàï‚€.5¡mÙÏ9Î.¤w~_xþŸÝжìçœçR»¿/¼OîŒsÞêe¿Š¤šöKÉìÕ^6q…SåáGg·çš­yw{᥆X¯î®ÍÎ<Î.$2*(`럺9<:Qý~ v h[vsÎs‹©]ß—Þ?§÷F´-»9ç9ÅÔƒ®ïËïÓû£}åÝb¿º»7:tó8¸È¨¡ƒ®~èäð8éV#º—ú®³_^^E¨ÆU–O3–EW\ýÑ—ä1Úµ·õ×ü…}/ýtÿ3¨kBÛ³žsœ]H:îü¾ñý?º05¡mÙÏ9Î.¤w~_xþŸÝµE!•ZжìçœçR»¿/¼OîŒ h[vsÎs‹©]ß—Þ?§÷F-U{ëÈôý>æöPͼM+„$($ãߊkZÝœóœâêA×wå÷éýÑ­ nÎyÎqu ë»òûÇôþèŪ(«ZÝœóœâêA×wå÷éýÑ­ nÎyÎqu ë»òûÇôþèŪç¯üqáí2ö[;Ûö†â#‡F·—üw‘î(]­ nÎyÎqu ë»òûÇôþèÀÖ…·g<ç8ºuÝù}ãútatëèµ=6Úú‘b¸dQ"í`Ï#üJ³@ZжìçœçR»¿/¼OîŒ h[vsÎs‹©]ß—Þ?§÷F-Q@ZжìçœçR»¿/¼OîŒ h[vsÎs‹©]ß—Þ?§÷FoyÌ÷q `Ö²ˆŸ#‚J+ñ퇎jÅUkBÛ³žsœ]H:îü¾ñý?º05¡mÙÏ9Î.¤w~_xþŸÝµEgíŽK¹­CŸ9du2Œ+™9Æ:ïéÓ¦5¡mÙÏ9Î.¤w~_xþŸÝ RiüÐZжìçœçR»¿/¼OîŒ h[vsÎs‹©]ß—Þ?§÷F-Q@ZжìçœçR»¿/¼OîŒCÇs%Ìhä¼/åÊÌ£kÝŽž’ÇN?º1¡\áŠ_k›éìíã¾W’HeòÎÑmºôÁ  –´-»9ç9ÅÔƒ®ïËïÓû£ZÝœóœâêA×wå÷éýÑŽJ)u/ì» 7»¼ŽCQ)²9­¶ÒÀê ÛרÖ˜÷w±_Éáõ¿ºòŽ£"äÈL«Dd)¿®r1ž¸4íý}ßæ+ÿ_ùƒZÝœóœâêA×wå÷éýÑ­ nÎyÎqu ë»òûÇôþèÇ÷w±_Éáõ¿ºòŽ£"äÈL«Dd)¿®r1ž¸5³áë™UÖty.&¸[#h¤™·6É;KN={Kúü¿Ìf»ZÝœóœâêA×wå÷éýÑ­ nÎyÎqu ë»òûÇôþèŪ(«ZÝœóœâêA×wå÷éýÑ­ nÎyÎqu ë»òûÇôþèŪ®÷‘¦¡ ‘ æK’©€ 9÷ùÇë@ kBÛ³žsœ]H:îü¾ñý?º05¡mÙÏ9Î.¤w~_xþŸÝµEUkBÛ³žsœ]H:îü¾ñý?º05¡mÙÏ9Î.¤w~_xþŸÝµUï/#±e”1V–8†ÑÎ]Õá–ö µ¡mÙÏ9Î.¤w~_xþŸÝжìçœçR»¿/¼OîŒZ¢€*µ¡mÙÏ9Î.¤w~_xþŸÝжìçœçR»¿/¼OîŒZª÷בéú}Í졚;xšW2HPIǿִ-»9ç9ÅÔƒ®ïËïÓû£ö¤†$1ÎrêA×wOO¼OîŒ[¢€(6Å’V•••å'®ØÁo~Àð¯3¤ÈRçþ»7ó®Û¨ÝŒÜØÏîϸÏä~Ç1¤ÈRçþ»7ó îÛýX¢‹oõbŠb,•«©o¥l•«©o¥r¾ÿ‘šúæ‘®¶ÉvØ[.ݸ‰F6ãØ\~Cè:W%á¯ù§ÿ®gù»¯ùIá˜Ä–vóº¬ÁÌ!‘$s°1R£¦zmAÒΞ«ßYǨi÷6R–Xî"hœ¡Áü×+¦hz|åÎ}§é·˜·Kˆ§:|1°•*v¨FGÖ´ô¸cµƒ]´Dvð\•Š%XÔÁ pYÔ“Þ€3¯|©ß\K+ëpF· «sVn©8^›¿{žœpG²¶ºò¨UÔôÐÀN~?ò5y½æ£2î÷\usY[@u¼ºÿ¿­þ5Ÿµ+”õ /\Óôûk(µk¼KÓÜ’3ûî¼Tÿfñý4ïü¿ÿ¯+ûV¡øû¸ÿ¿­þ4†ö÷þ~î?ïëÕ Ç§Xéz柧ÛYE«X­âX¶žä Ÿßuâ§û7ˆ?è)§à½ÿøõyGÛ¯³ÅåÇýýoñ¬ïxWÑt­BÆúE¹‡fÆ Te€?+‚§‚zŠK°±ì6z^¹eE­`U¥’S»O|åÝœÿËn™cSý›ÄôÓ¿ð^ÿüz¸#FÖ5‹g¸‚ÿb+”"IœàÀúÖ¢øK[þ-F?ûüÿáO¾cnßK×-§»•5k×2‰_:{àŠœ~û¦~µ?Ù¼AÿAM;ÿïÿÇ«<)ª½~§þÚ¿øTáëØ yäŠXâVÏéG3ì4-ô½rÚ{¹SV°-s(•󧾩ÇïºaëSý›ÄôÓ¿ð^ÿüz¹ om-×ê1EÛ÷“üÍS—Å,—Ö-ß|©<Ãù.j=² ¢izâj^ZÃÍ–(âaýžøÂ#¾ëóŸÒ§û7ˆ?è)§à½ÿøõyµâ·Õ/­-ô{›„·÷Ë2–Œ¿Pw9ö­8ïnÊô©ºÏCG¶ò)该ë¨Czuk6(¤‰Gö{ãPœþû¯È?ZŸìÞ ÿ ¦ÿ‚÷ÿãÕçžÔõƒ,ðøŽö[ý_˜äüz¸ëÉuû;ë‹WÕ/Ù •â,·‚T‘‘ÏN+mmrzØ÷ÒõÇÔ!½:µ‡›RD£û=ñ‡(N}×ä­OöoÐSNÿÁ{ÿñêðUº×Ï?Ú:‡ýÿñ§ý¯\,ªuð ëç¿øÑivÜ.4½ræ{I_V° m)•1§¾ (ÉÏïºaÏéSý›ÄôÓ¿ð^ÿüz¼íºÙ¹—RÔJnGžøè3ß×5ØhqjOK5åÔŒß1/+ÄÑ·kÑ\ôKÍ/\½b—V° ²Ç(Û§¾rŽ®?å·L¨¬ùü-­Ý^,×>#Žx–Q2Û=›yAÈàJ ôâ¹;¸ï›V”¥ÕÂǨÚ% g“Ó4¦;æ[«§šßãWÈ÷#,þ Ôç»3nÃMr·Ml–Må4ŠAÉ\òG#8üy§¿ƒõ'¾iεn"iÅËZ‹'òZQÎâ<Üõã8ÏjóŸ.±œò[ê±¼?É;ŒÔp}3\rëñòÔð%ÿÆ¡Þ,¸®cè«í/\Ô4û›)ukÄM•ÓÜqûî¼Ôÿfñý4ïü¿ÿ¯œÆ©®õþ×Ô1ÿ_/þ4‹­ë'?ñ8¿àãþ>_üj9Ëä>û7ˆ?è)§à½ÿøõAc¥ëš~Ÿme­`b·‰bBÚ{’B€}׊ù͵íqf ºÍùÉà}¡ÿƨj^!ס¿‘[Ô‚ð@oÆî‡Ô_fñý4ïü¿ÿ¨,t½sOÓí¬¢Õ¬ Vñ,H[OrHPÏïºñ_,ÿÂO¯gwSünäÿFñ>¿å65ÝOpçþ>äÿ«‰ÆÇÕßfñý4ïü¿ÿ¨,ô½rÊŠ-ZÀ«K$§vžùË»9ÿ–Ý2ƾMoø—9þ«ÿ’Kkâ>}sT?[É?ƙ֟fñý4ïü¿ÿ¨-ô½rÚ{¹SV°-s(•󧾩Çïºaë_2¯‰5ÎúÖ£ÿOþ4ïøHõÌcûgRÿÀ§ÿçÓÿfñý4ïü¿ÿ¨-ô½rÚ{¹SV°-s(•󧾩Çïºaë_3k¿ôÔð)ÿƯÙx‹Ybê×Äg©¹ñ§`¹ô‡Ù¼AÿAM;ÿïÿǪÒõÄÔ&½µ‡›,QÄÃû=ñ„.F?}×ç?¥xJëZ¯ý/?ð!¿Æ£¹Öµa+ªÞƒžÓ¿¡÷¥/u\p÷¤¢}öoÐSNÿÁ{ÿñêô½qõoN­aæÅ‘(þÏ|aÊŸßuùë_<\ëúÊÙåukð}EËç§Ö­ø_]Õ.5 t¸Õ/<Ì6û‡lŒ}k](óXèú³½®}öoÐSNÿÁ{ÿñêô½qõoN­aæÅ‘(þÏ|aÊŸßuùë^]%ýèa'Ûn0p%8þtáy|¯ÿ×sÁ•«“ûJÊiõ9w=!4 YfÔ$mNÂA9Or¸ ·÷Þ•™u¸·š}r¯³£GOfÌ©#!Oõ£Œ7~x×5íî w…$#®=ë”—ZÕF¦QuKÝ»Ëç¶;óŒÕCÝr‡ÔåÜö;OêVÌÆ]jÞìyÙæÉØG꫉G^99¦ûžÅöoÐSNÿÁ{ÿñê‚ûK×5 >æÊ]ZÀEqDåt÷~û¯5ä#RÔ[þ_î³ÿ]›üiÿÚ:†söû£íæ·øÒþÑò‡ÔßsؾÍâú ißø/þ=GÙ¼AÿAM;ÿïÿÇ«Ç~ß©>Ýsÿ›ühþÐÔæúèÿÛfÿ_ÚQþQýJ]Ï[±ÒõÍ?O¶²‹V°1[ı!m=É!@?¾ëÅPÕ<#u¬_ÚÞß]i’Ílr„é<îFyÇÿ^¼×íú†?ãúäÿÛfÿz_êþ_nsß÷­þ4iGùEõ9w=ZÇK×4ý>ÚÊ-ZÀÅoÄ…´÷$… þû¯?Ù¼AÿAM;ÿïÿÇ«ÉF£|Oü}ÜßÖÿ”_Þÿ—÷ôÿ/í8(}N]ÏN³ÒõË((µk­,’Ú{ç.ìçþ[tËŸìÞ ÿ ¦ÿ‚÷ÿãÕå#P½ÿŸ»Œ{ÈÔÓ¨^ÿËŸOõþ4iÇùCêrîz¾—®[Ow*jÖ®e¾t÷À!8ý÷L ýj³xƒþ‚šwþ ßÿW¶¥ÿ?wDg´Íþ5FïVÔº•Ð>‚fùÕ,Æ-Û”>¥.ç²Ûézå´÷r¦­`ZæQ+çO|SßtÂÖ§û7ˆ?è)§à½ÿøõyM•ýçØcw¼¸rQrZFë´{Õ˜ïî™7}ªûøhyŒS·(¾§.ç£&—®&¡5èÕ¬<ÙbŽ&ÙïŒ!r1ûî¿9ý*¬^Öíìîm ×m¢ûDÏ9‘,[z³6ãÞãPk‚×x?éSäpxzþtÄ¿½ÜÙº˜Ü~ðôÀþ¹¥ý¥åÔåÜìáÔ$žyîµÈnçž’MfÙ*YXc€ ”cOZ™<©{¸®u«{·»UI&žÉËá~èJÁçÖ¸“}vOw„y„cõ©nu[©ÝJ»ÂˆŽFç’rI<žzý)ÿiBÏA}NWÜìôÿ jö¡Ô޽ ÍáˆÂÒÜY3„©‰@ãoõ9Íl}›ÄôÓ¿ð^ÿüz¼¿íטÿ©óÿ] *ÞÝ€I»Ÿ·ü´?ãSý§åÔßsÒ.4½ræ{I_V° m)•1§¾ (ÉÏïºaÏéSý›ÄôÓ¿ð^ÿüz¼ÁoîØö©ñœ¬4­}wÇúTüñþ°ÓþÒò‡ÔåÜô{Í/\½b—V° ²Ç(Û§¾rŽ®?å·L¨©þÍâú ißø/þ=^U{©ÝÃjì·SîǼõíÏýýoñ¥ý¥åÔåÜõ{í/\Ô4û›)ukÄM•ÓÜqûî¼Ôÿfñý4ïü¿ÿ¯!}Jû<_ÜßÖÿoöþÞ5 ¯šßãGö”?”>§.ç°}›ÄôÓ¿ð^ÿüz ±ÒõÍ?O¶²‹V°1[ı!m=É!@?¾ëÅy/ö•öp/î¾¾k¿¾oñ êšñÿtG¯žßãOëÑì/ª>ç¨ÿ©µ«v•ç&èÙ?æŽgÍÇŒcíSi^Õ´‹›«˜µ«i§» çÉ=‹1r¥°x”sócŽ0ägYÔÃo®ÿïó#êÚ—Q©]þ·øÓúô{ÕsÜ~Íâú ißø/þ=P>—®>¡ éÕ¬<Ø¢’%ÙïŒ9Bsûî¿ ýkçûí{WŒº­òàv¸qýj„Zþ·åäë?õôÿã[G¤¯b^§kŸK}›ÄôÓ¿ð^ÿüz }/\}BÓ«Xy±E$J?³ßr„ç÷Ý~Aú×Ì÷Þ%×"‰Šë:€=±tÿãXâÏàã^Õ?ð2Oñ­£.cÕØúëìÞ ÿ ¦ÿ‚÷ÿãÕÆ—®\Ïi+êÖ­¥2¦4÷Á%9ý÷L9ý+äŸøJüEùê¿ø'øÒxþƒú¯þIþ5D_}›ÄôÓ¿ð^ÿüz ¼ÒõËØ)uk«,rº{ç(êãþ[tÊŠù×áÞ¿¬Þø‚xîõ{ûˆÅ«0Yn]À;“œד^™ö»Ÿùø—þû4è¿fñý4ïü¿ÿ¨/4½röŠ]ZÀ*Ë£nžùÊ:¸ÿ–Ý2¢¸µÜÿÏÄ¿÷Ù£íw?óñ/ýöhÑ~Íâú ißø/þ=P_izæ¡§ÜÙK«X®"hœ®žà€Àƒßu渵ÜÿÏÄ¿÷Ù£íw?óñ/ýöhÑ~Íâú ißø/þ=GÙ¼AÿAM;ÿïÿǫξ×sÿ?ÿßfµÜÿÏÄ¿÷Ù g¢iö/¤ize„— +Cû¯1WËÞ6åß×{¦p:®‘ÿ!KŸúìßδ<9+6h^BY®[–ùý¡žžÓ§úGü….ë³:îí¿ÕŠ(¶ÿV(¦"ÁéXú·ú–úVÁéXú·ú–úP+á¯ù§ÿ®gùÝ›LTÑ Œ…¡Ý;Y6\• m`}JÂð×üŒÓÿ×3üuV ¶Ú5Û·D1·á»aqù éHe=3HšÒú{ûëÑwy2,[Ö/-U$¹=É$桳ÿYâOúûÿÛhkfXÖhž&,Ô©(ÅN¡ƒî9¬*Ý-SÄPÆÒ2-ÑÁ–V‘¿ãÞ#Ë1$þ&€<†ÊäÀáÝï] [Oõ‘6޼ô®b%ùpÝj´úlS>âk•–u2ß鑱þÔ‘Á_5sùfª6µ§6THÌòÆÇ?Ž1XÐi‘ áEhGnª8QR;‹¡>|¸G«àgõ¤ÿ„f_HºÚVÍnúÜy~fÍŸ?ÝÈÎvã¨ëR ÅièÚÖáÍV[V¸û=”¼Év3íÜ¥G <° ¨î„λáÄ“Ká놙U[íL_M‰]Æ«ck¨[XMp©uu¸Ã-޾Ãñ¬/.ÍqÿO-ÿ ­dÝŪk_Úz­•”¯š¿c® ºãjì9Ënî2 tAè®KG[¨ëún“(ŽöàÆåw±;í_VÚÑîqM×¼»¿ j{^9leÁ!CXz·Šlï,ìì’ö 1¨Ûy²Ï;åDx g«ž@ôÁ5³r¶£Â3¥“+Ú­‹,L­T!½SVNâ¾Çƒ.‹\TƒHN¡kwËç¥< ãÞ¹.ks2ËOXd Ùp)‹ T«Å : ÝnŒl~W•-þ«wg©\EÇÿt€F#¯±•a7‘wö¬j±ªksdŒN‰*ûq·ÿe5ÕNW‰Œ—½rêxŽó©›ð(¿áRÿÂMp:ˆ[ë5ˆÊ@¨aê)»c9dûU\V7ÄÄžÞÝùíÚ´I5³N´û¬›Vçœæ(©ð1ÒÒhÏ»'ìåÙëV<.ûoà$ÿËn¨o·p¸{ã §x{‹¸ô¯ô¯6_Ãgªþ4wà‚ 0>_éK¯ŒŒÒg=j2x9ìx¬éD“6æe'û Ÿø?Ö¹)Æuf<ã~fº©FHlöôÇô¬M®ü[¼é¾)¹#8V#§¸®œ4y¤Ñ2j1¹4-•^OÕ´“Žz×^úœÑám‚:†oñ¬ñá°ò©/–NoPnü×kÁO£9þµM˜m7r~•Uœ³tüë¶O ØÌ>qÑXéYwvÞ±,·ŒªëÁD;˜p¨H©x)÷BúÕ4`ÀÉå‘N«iqÎE¨¹™8g‰Wòç? úV†‰o>µhg¶ Èc*î ä{ŸB+àê­R4Ž"›êIùçÒ’8"´›Ãz¢‚L1ñé"ÿDt}F&ÚÐ9ϧ?ʲú½UöKö}Ja€§ý㜜úæ¥m>ñÒà}PЉ£el20>†²tª-Ó-4H@©¦5ëȧd“íü«+ qÉ8¦?Lúf’‹§4Çí’3ïN |õ¬ÛÕÜ¿ZÓqù}+.õ€ô÷⮟Ä7±½d¥lbVþèò§A„#4؆-£Ç¿ó§òc¦‰nB~é>¼RnÛÏAš{uüÿž*3·œ¯@ùü©2ð½>”¬¸Ä}É‘×"¤o”c¶8Å=Ä0Œp)„¨ô£•z†éÀêi Äxëɧ‘QÀÛà‰ˆ ²ƒÏj—¾qÜP€©©©ù¹ãüúÕdb?ïVuµg†5T*¥ð‰n²àc­9ƒžžÔÆ8üº TÁÎIü BZÅ<»P¶Cc§µK°g©4ÓŒûÐgvyþTå“ÔPÇóÜx”ÐÄ’=hbü£B ÷Í4ç=K’@¦’Öš |ØÏ|S¶¨ žÇ4¹뎽éÀ9Æ;P!B“ÎF=6MÀ𛿑BÔsŽ3´{š¤õ$¨Ë–†:f˜ê6žØö©ˆ$“ÒªÝ>ÈÈÎ*Ö¬f¢ß3wíP*í@;ÑvŤçžy§7žÃ¥z1VŠF2ÖFN †a±Hùô¬6ô­;ùH¸`?»¶³­vÓV‰ÁYÞbJ3EhdvŸ ¿äd¸ÿ¯FÿÐÒ½Z¼§á—üŒ—õæßúW«PEPEPEPuá–Æ‰h7c71»ùÜgò?N⎑ÿ!KŸúìßίxe±¢Z ØÍÃŒnÆ~F÷üÓ¸£¤ÈRçþ»7ó¤3»¶ÿV(¢ÛýX¢˜‹¥cêßê[é[¥cêßê[é@¯†¿äfŸþ¹Ÿäkª°]¶Ñ®Ý¸‚!¸Ç Û È}Jå|5ÿ#4ÿõÌÿ#]U‚í¶víÄ mÆ8nØ\~Cè:Rj°ìÿÖx“þ¾ÿöÚÒ¼Óá¿Ùç=ÊìÎ<‹©!ë뱆zw¬*Ý-SÄPÆÒ2-ÑÁ–V‘¿ãÞ#Ë1$þ&€<ž[3nªÃ¡8éMP=+¥Ô,q§JïÁùÿ‘\êŒV5£fwD‘¨©Up*$8«àŽkA@ÏxçþDÍCþÙÿèÅ®”-ox8ÅYdßÿМ~$'±ÑøcE›þ¾[ÿAZ髯—,0i*ãVÊÖfªZÇü/ÿëÚOý×’ç4}áéšn·r†ÚLr})ݰ:ȵ@¦”Œæ™øSÀ$cš.ŠpA«´†A§Ý î(Ñ;ƒiüyª²+œ®û)¢$æ".}2þ:XÖÔ¥­‰’$L²çwçR¤#¯Ƥ²ux†éW6©A>•¹A g8Í?ËõU¨ðr1‚8©v«  @àR•jÌŽ¿Ê™³ç>ôN[xä?2Ð# ¡Tp*Ó.sëP!¸âÀtK–ÅIåœÓS Õ°™=)ˆò߈¶ok«[^#ìŽæ2¬Rè@$ÿÀYá\ á,œ±8=ÎkÚ>#Xyþ’ä ¬ÑËÀääìÇþ>á^18ÌdsÒ°’´á¬ Dgš@pGµ;RcÖ¬B·0÷«0õª®rÊÙ© È5hÉ——ÉüjEÆ*!ž*T´ÄJ ž•&Üõ¨×§^*tâ€.Z‚£ÀÔÓÜ7=Ç?ˆ¨ p3Šžg+o!Z'ð°‡ÆŒ÷AöIŽyÚqïQè <øí2ŸÔT¯–”rH¨tTe›' +¡Ïn yÖnÇ«&”‘èôSüÀûT¥Õ­cÀ ò}R—ZbwŒ{šóá‚­=moR剧¦ÃgkáÁ¬"u±ñeµåÏÉ#–sîŽ?¨üꄚ…ÄÇ 3cÑxþU[s°'ÔúW£…ËåÌÝýZ¸Å%dD»ñÅ„9[h¦¸ldlSí“ÏéXWž7Ô§ù`X­}Ý£sAäž>ÕKFð¾£®BÓÀÐǾÝÒ?R1‘€ ïßÓÚ|<´ŒæîöiO\F¡1øœçô¯RfõÆš—6‘1g÷mÇùñK@¹›qo™ˆÝ·#pF;óê*µÕœI²¡qÐñŠ×¸7Üž3!•pã¡áÕ‡$ÜOR/š)‘4›OOl¡sûÙ‚cŽ3W$rÎzÕqöÈ9ó}EM5©RØé<”÷§ÿŠce#Aíž´.p¹üªz’¶œŸcІ@Dm“œ(Éõ¥RF{þ”Ö~o'Ò“e$,#±j™›¥E´ãŒ1ãôâœùéLVœž)3„s»Ð~[ÍÇF?¿ýjqq÷OR3JáaAËLRƒ—œ…23¹Û<€qô§&LhÀ`÷œóB(êo‡…ϵWÈή*]C-|:«üê.OÒœöA;ÈÉ÷§ŽIàzTt óRÈ短6ç†À™¤*>ƒÞ—'84ÝÄäz~”І0I{Ó~ñàéJIâ“~´ì†|ŒSH$uéÚ»’QÉÍ&G®GZ¤…q¿7ãM'ž÷© ÎGæi6ãf€AîGÒ¤^JhNXãÒ—v~µ 9þEƒ¥r¾ÿ‘šúæ‘®ªÁvÛF»vâ†6ã7l.?!ô) µXvë•kʆ:¥¶“{• p@àÖy¿¹‰È{p8<VÏ—PÌ6á»t5ZN{;Rœbí%s,êíøöÏü ÿ­L:œX9Áô?Ö®L­Ô3~uZ‰r­2‰?0nâ°öUVÓüŽj/ìþ$Kª@ùÎåíóð _ÀÏ4`w ç[§KÒÝr-”du ßãU¤ÐtÖÏ3 ú0Çò­#–ÜÊ^Í;ÔYÀ•ýÖÖ”N›ò>¢©?†mÉÊ]:ûúÕWðÜÈùŠæ<{äåO÷‹¡ƒêm^YÛê:uŤÙ1MFØêÈ÷Erü/Еr³Þ8õYÿìµ Ö:Äl<»‡Àé‰xüõëmCÄ6­‹‹®øŠ‘ŸÐãô§K¬A«lÌTøq ÆÙ1O'³ÉþU?øH½}>ËʼŠ#,n®ìI_˜¨Á,R+©íËÜ“Ã׫?~<¹ü¶çZñ‹Y”2Ïå>7l”laÏpy _3¶º~Üù€ÀBEXŒ…¿âÿÍáDùf),n%Û›vÅ­îïƒX »9ôª[·<ÔȽ3RAc9_™ c®ãЏ–(±©2³>Nà郟éNÂ+¤`0jÚ!' 3ô©bA‚}O4¦M½øï@(ÏÌ1R»!B‡F)Úî\”…ñî6ÿ:µ#ÞÊ«ÏaŸð¨•H­Ù.q]J;•~èΖ?2iFŒîÝA$ÖŒú\PÙÊчg_˜nƒ¿áŒÖ÷‚®ØÝ[d–ŠPù=6°ÀñV?m…Œ*Ë”N«’¹‡máÍVä©û9‰OñJvãðëúVµ·ƒ2TÝÝñÝ"_äÇü+­¤æ½XáéGddç&e[xwKµ ­¸‘‡¥;³øtý*MbÉnt+»hÔ¨ò·* ÆJÀ©P+K… ‚:ŠÕ¥kaü9»Ì7ö$¨–tå‰\ýØÿ:îkÌ<4ÃFñ¿Ù>äLÒ[n~¥)ÿ}2ÇùרW=»F>µ¯ÜCIKŠ1ZBg#¨éŠñMvÈéúÍõ¢ŽVê¨yOÇiS^Ù^eñËÉ×cºTÂÜ >~ó¯Ê%òëêñ= ¶v«ËÜôé5íîÕ ­`ŸÝÝ´ãð«×g²ÑTšáþßKp²ZÈr-¢dSÎp\7¯ûxüw1ï¶•Týä#óçžùÅ_É)fÏÊA ¨íÎ8¬Ó®Ù@¡ñH­§Ê.w³†#÷`N㞤v¦?’!fKw‘±ò‡ŸŸL*ŽƘŒeûm¶æIèN>ŸçÖ¦±–éµ+&ÕgRÀ(å€ ÿß]}©ú¨k{«y7££‚Û#Ý„ù@ÏcÛ“ÜÕ ¼Ô£u*†WQÐÑ‘ýI¤4G­G¶éÊã#Øÿõë0± §¶k{ÅPymGc¿¯ü¹Ã#Ø^kÂÅéY£ØÃëM #0ãô5R3»P‰~§aVdfwO¥P´mÚÜ[þ‚k*{šÉhu’¸£¨ã¡§9 àö¤?sw~x¬º’¶" r3éüê0¡³Ž3ÞœÎU¡Ü8c´ýyÿ Ž lIÁÇ_|T½ËDÀä®8•ŽI˜æ¹déÍ n3Œ ôëTN]‡qÖ‘× ؃ø‘A·dœw¢EÜäŽAÈö ÿJ[`gדRSo?7\v¤ô4‚@œç?§¤™n~Úùêüþ4$ž¸ç¥U’O2òç8|cÓVbP#Ü•i%¨ÖÀK·zz/ËÝi„•'#9©–äg4ìðqÔ{ŒÓdaïÒ°ãò¦“ǯj,"2¯JðsïNaÓŒƒM{¨€NIö>”6p8çëNÈ ŽÂšÌpyÈëT„&pxÇãN-ž7sQ‘ñ¥U9Çë@ìM€êi„Žçð¤Á?ʘH\ð½HX{ëšnpqÎG­0‘·=½4’ãñªHE[¢2MbÝ>3Î~•©pÙäò‘tÌÛN=+²Œu&nÑí=úâ³uI Û·?xâµ[N8ÀàÖ¯!܉íœW]5yµ Ì£Hii+´à ;P)h³øgÿ#%Çýz7þ†•êµå_ ÿäd¸ÿ¯FÿÐÒ½V€ (¢€ (¢€ (¢€;¯ ¶4KA»¸qØÏÈÞã?‘úwtù \ÿ×fþu{Ã-ÐnÆncv3ò7¸Ïä~Å#þB—?õÙ¿!Ý·ú±EßêÅÄX=+VÿRßJØ=+VÿRßJå|5ÿ#4ÿõÌÿ#]U‚í¶víÄ mÆ8nØ\~Cè:W+á¯ù§ÿ®gùê¬m´k·n ˆcn1ÃvÂãòAÒËU‡gþ³ÄŸõ÷ÿ¶ÐÖ•äwï³ì76Ðc;üûv—>˜Ã®;úÖF”³ªxˆ]K³ £¹âŒ¢Ÿôxº)f#s@ 𛳭Ðr 2GOâ¬íR Ïk’[YAsmm ²V–àDzF—Ù#䱊±à—./²rwÏýõ]m9nL>”ÄOá‹·êÃK¼`ÐÉ/Ë‘"®àG_Çž*ÿ„7 Z+Cå…Ü«ò•Þ¡Ž‘¸|ßnQE÷ŽG­­éÞS«j×f±·ÿY.Æ}»¾Q‚O,Jx\WñUâÚêÇþ¸ÿèä«hÉnuø#¥/"·Ö´XWši>Ôò1L>”Xc ɤæ”ÒgêJ Ñ‘š1IŠ^”àÔÊ;Ðá¾”µ Ÿa‘R?:`8ŠÔ:#ƒRv¦50(y`‚Uia«×»`ü`ð~µ›¨ß p‘žmļFƒùŸj›¥mGÍ®Úé:xûlr»µJK? šÎ“_Ö¯X 7Cx#l~÷P!_ªHúUˆ,ͼ‹pò .‰¤=Ï!GaŒz›Í™Y£ ÷wtÈlò=Àüê£Ê¼ÉäîU â¹2¢÷BeÈüÍdÞÏã[72K™n2Z²ÁzšÕ›VµŠ×,JØÆæ9PÜzõÅe\ø¶ÂÜ©·ye#8Ø €}óëG:ìG(ÝÅ?Úl°f¹' ›-œã`œöšêÞr W•뺜:ì¢k‹8üÑÇšOÎG¦@Ç8çZMRñàH ÝÃD«´!•ˆÇ¦3Í&ÓØ¥zmÆ¿gf[í©^«œ·ä9®cÄ~-‹P´†ÊÎ4ÙÞsÊñ çŒRy¹éÐzšãظU8á²=ñŒÿ1ùÖ•žƒwuJ^8â`Keˆ>€õª¡Fu}Ô)Î4õ“,ÿÂQ¨ÇŽ„`tm¡›õÏò¬‹‹¹n¦3O4’Èz³±?äuâº(<5mi^V‡ÊõýkJÞÂÖÔæ#B:62Gây®ªyr[»ÓÇG¦§…íʃ ¼Œ§Ä`ÄñS^iv¶ž|»vä¨rW=Ïôv]Nj¾¡lnôùíÕw3¡Ø¹ÆXr¹ü@®‡ƒ¦¢í¹‚ÆMÉv9m:ÆÞxLŽˆ%H'×úŠÒŽ¡?»ãQ‚k3E“2Hƒ•dxãüsúVÁóµ¹”šlé¨ß0{Òõ¤¥>•˜ÖEu(ã*ÃzŠ«á9ZÓÄ?g“$Êð|ÙÿÇHüjÝbÝ9°Ö£ºUݱ’p‹ÆìŸ‰Sù×f §%DkOª=.—¥žA ;Îh¯¦~4”¸ jâîÓ…÷ÆÏθf¹jµÜâÌ!xF}Ú)“Ï ´F[‰£†1Õä`ª?Xwž4Ь÷t×.¿Án»³ônþt¥8­ÙæB”çð«›õÇüD³èÖ÷a =¼ÛIì¨ã“ÿ},cñª7¿e;……‚/£ÎŲ?ÝÇækïRñˆ-$çËe˲Å#ÂüØÈã <Šç«‰§êÏG €®¦§m‹ßgë—QÙ’Ûxô2ƒøü½2ëæ³›`%¶7O¥xφ®þÇâk%¶É(…€ï¿åöÜTþì>Qó+åƒFà.99¹ç´q÷‡}Óàåw±'§søV^­x`™cU¼²3—ë·€ïêsètW¬JË5­ÊäÏòä6zõϾkµŠó­Ñ–Fù@#>•к‚>íaj¶‹"6çšÎ¯©¬›±¥oâ;)1—ÀúÕÁ¬YK…®7nçŒv¯7—N9ãõ)$’0O½0‚Ä ^ièo9ç­‡o»»ïŽÔy®sÇúÖ¡á¿j:®“qö{è<¯*]ŠûwHªx`GBGNô˜ÓÔÊÙñ<ÿ…?+šô+Oÿžw¿’ÒÆ¨£ Ý)Íäã1@\âuÅñ§öÄÿØ#BþÌù|Ÿ·‰¼ïº7nÙòýíØÇlw«ÞMpý«þµ°?sìßÙAý÷oó?à8ǽt$ ë·ó?áHYd*çê€35Å?Øóÿ`ãûOåò~ßþ§ï Û¶|ßwv1ßÇø‘éáOü˜¯D3Æ8*Ä~©#{YýJgè-©T®Ž?çÿÿ®7[>/þØŸûûû3åò~ßæùßtnݳåûÙÆ;b»ó«¡×$×;“’U‡¡I2—†F¯þ•ÿ Y²þ³eo÷Ý¿Ìÿ€ãþÕ£­ÿÈ"ì ÿiü¾OÛÿÔýá»vÏ›îçïŠ@)àP3âGoøE?òb½ 'þŸñÚÎSTÖ,4{o>þábCÓ‚IúÉ¢ö3[>2þØŸûûû3åò~ßçyßtnݳåûÛ±ŽØ«ÞþÙÿJÿ„¯ìÁöoì­þû·ùŸðcÞ¹{‰6Ç?c°™Ç#tÌñg#ëŠçï|q¬Ý ˆíЂ…1ŸÄäÀŠWÓ¼S40xrò]!±~Ц#|s÷†wmù³Œãñ^Oÿ Š-^K£?‡ežE.ÙÙ€ôà~u—=ô÷2ožifp1¾W,qõ4ÅŠy:FßʋإöG©Ÿx7Å®ÿß0ÿñUçž$ñ­q¬\ÿ`Ýô¢T·#dßtnÜcàüÙÇ=1U“O”ŸÞH£éÍ6XþÉpŒ˜la†ñO½J”[±n”’»4<%ok}5Úø’JiÖ·:«ûËùŸðcß=«ªÔ|¦]hÓ=ZßQ!LUx„'æ·òÃåÝ|WYjÐIg –ÊÝÑd‰Bã FG¸56*^‰1ÃG©äÃÀ/S“6‚yè^oþ&½b×þ³ÿSar[ûÎÎ}Fìã𥥩ö²4Tb¶8ˆöZìæ{›¥ÿcÚ² þgÚpÁUÇËǘë¯?—¹Á˜Ó´9·;}oû/ûì¶j|¾OÛöù?xnݳæû»±Žø®<Ôÿ#WFy£½{^ÏÍž´òFçüRõÿÈUÈkÛŸÚóÿ`gÿf|¾OÛ÷ùßtnݳåûÛ±ŽØ­,Rô£Ùù°öžHå¼?c¬Þ/‹<ñ tû8Ò6ùk¼ÛüÎp&1èsšèu¿ììyÿ°?´¿´þ_'íþ_“÷†íÛ>o»œc¾+žñL][ÏÉFP€8NrO©ÝÿŽÕ›y|ûxåÜ eˆïúæ¾gPôù ¤dÅUÿPoü‹^ÿWýLù¹º+‡›È\ÞE=sûKûbì²f|¾OÛ÷yßtnݳåûÛ±ŽØ§iqÙysIã!>”[cmÏ9Ýæy¿EÆ=N{U¬ÕMA¢6’Äòª1]ÀÉ#‘üª¡6¤¬Š„µØížçL¹ðˆ>7?n(¥·ËHÌòùÎÀHÇr+ÿŠ÷ó-ÿäzÇÐßqì,$rZ†…«ØêóÂ3c .š ˜Q½ÀùFì‘>lã±]†¦ ÉñgØÉ ·ö^ï}ÛüÏø1ïW(ÅrK)»Ê)ü•$•“gšøš×ÂÚ}•嶆Úêë8HðÅäå\e‰_›î‚AõÅoYß|A¿³µ¼ˆxWd±¬Ñï—#>ø5ƒã›O#_3®H¸‰œpp?ñ®‡Â%÷…í¡—û5ÛDÁ‰ùŽÖu@*û<-omB;£Ç­I´zGüJY—íÄã®S?¯ç\Nµ‹Æ«pº"hri‡Ú’Ègû«’v|¿{v1Û­]•­4á*&FÈU"Y Æ\YÒjGr$[¹¼—?#«™npsÇ_ËéîÌ˾·¿“íð–Ggœ'ÙÆ˜$Ç}ÛÄœw\cýª¿©Ù%žq/†ã‘µFEHûh·z–ÈL›±ŽæªÇq,·ÞDW¬Ìab[nÞœmÁéÁ楒îúÒÍ¥xmç È2ŽPìpAîGzc<ç]»ñ¤š´‘Ý®ç@«ò„Ûq÷Ç^Šºñ'‚ÀÆuóÿ~k?_R_'íßë¾èÝ»gË÷·c±Z­ÈëÍFaf8´Uü½—˜ß Yé n¿á+§î}›û+gû[·ùŸðcÞ¯ëÚwƒÎ‘pt$Öÿµ>_'íþO“÷†íÛ>o»œc¾*¯W´¾[6ÀÓúÃì/d»œ·ön¬‚Ãózï[NøkŸ¹â¿ü—¬ï$ŽÌÖšÈO?ýj>²Åì—s[ÓPêóÿ`¡þÌù|Ÿ·ÿ®û£víŸ/ÞÎ1Ûë ðF™¦#Ý?‰–ë?'Ù¿³Jÿµ¿~ÿø1ïíMX=¶kJڸϿ53Ä»ZÈ$º›ÚÅ®‡ý‹?ü#ãPþÓ˜MþÏ'ï Û¶|ßw8Ç|W&-_6r»Ö|XeÏÉöoì¢=÷ïó?à8Ç¿µXñðØÑî„uOí?—É7Æ?'ï Û¶|ßw8Ç|V{;79ª’ƒŒ“ZF§’³óg3tu¾ŽtïøúíSþ·P|YϯÙ똾={T»@ã_'íû|ïº7nÙòýìã±T¨ ÷ágØ?´5O´ý§ûCìëö_/o•·xó7çœýÌcß=«Ò«Êþ|Gr{}‘¿ô4¯T¦EPEPEPuá–Æ‰h7c71»ùÜgò?N⎑ÿ!KŸúìßίxe±¢Z ØÍÃŒnÆ~F÷üÓ¸£¤ÈRçþ»7ó¤3»¶ÿV(¢ÛýX¢˜‹¥cêßê[é[¥cêßê[é@¯†¿äfŸþ¹Ÿäkª°]¶Ñ®Ý¸‚!¸Ç Û È}Jå|5ÿ#4ÿõÌÿ#]U‚í¶víÄ mÆ8nØ\~Cè:Rj°ìÿÖx“þ¾ÿöÚÒ¼’ý6}†ÚÚ|çŸpÑcÓFÏJÈÒšvO¨£Šctw$RQþF*¤ñì(äM7R¸Ó/æÚBއð>ƽsúõ·ˆm²„%ÒÞCžžãÔ/Ë>4¨IàV†ž÷öq\Úù±Ê‡*Ê?Îj“±.7=Åm·ué]?†õhg §3$C(Oñãðÿ=+„¶¾Õõ=)$6/»7L"€=}¬Fñè·ðËŸ¿ƒØ{ÊUåΣ¡¬0þësv=àõ•â_ Âcáû­íŸcû^Ïßù^fÝ®îäg;q×½?IÖíu. èl•rW9(ÝÔýø÷«7 Ó|=jš­ÏÙì Ç™.Æ}»ŽÑ‚O$•»g5še­ÕÅÔVд³È‘F½YΨÚpkÏ|]®›í@ÙDX[Û¶Œo_ éùûVë*Q¿S³ƒ–*ª¦¶ëèmê~=²·Vûfr?å£üˆ?>Oåø×0~"Ý´‡V¼ÿ ¯θ­b+û‰Ç–¥¡ÇAëLM*im#ˆÛ,Oœ´¥òHôt®h¾xóÎvô=‰aÕ ¾Æ•o7×ô=jÐÉFN[ A#ØçʺûKø¯m–æÖMÑ·àTúØÿž•å1Ç%,R0æ­Ï‡—÷ºŠ²âÙ‘X1èø‚OáF¤å'ª5Í04aGÚE(Év= n¥üä}*¡B·.I>Ç¿øþ4òãµ K¦@Ë)¿…v£æ¬H¨E< A"6ô<Švrhb¸¯‰pŸI´¾ I´”«sÀGÀÉÿ*Æ»qéTõ}9uM"îŶæhŠ©nŠÝU¿Áü(`xt1™¥Ù¼.y«©§Æ9vf?¬øœÅ:I‚0yÈÁµµŠÆ¬¤¶;(F2Z­F$1G÷AñÏçR`ôÆ)1J{VîuZÁŠ«¨G˜CŽªJ·Í6Dó"dõ§grgh´vÞ¾û_‡–&oÞ[HѶIx§Íø tµæßï~ϬÍdĹŽK§#ðÚ^½&´¨¬ÅFW‚ QŠ)j ¯,ñÁK±t›…[GI$FÜ8ßž:kêš®¤$Š5Ê2•tŠ>0x䜟ֲÄ.³4MòÈ Rb:ו‹qÄI(ž-HS´Ö†ìÚ¥¬]È{„ýzU)5©ú¸•G«çü*šÛyb~œT‹/E¥O-KâfñÃ%¸×¼ºœ`É!ʨÖÝÏp¿­Xï@®Èa)Ç¡´iE<2–§ÄöpÞÇ;˜Èdd‚Žùm£ñ¯]†Þ+h„VñG c¢F¡T~¼DÉ5­Ò\À@š6FÇ e9ó½¾ âº¶ŠæÝ‹C2 #'º°È?‘ò9í7 ©ô9++1ô;Ñ^ ˆ•æÞ<‚K[ê.Ö–5‘d'9–3ÐëÒk’øƒd&Ðâ» ZÌ2ÄýÔ~æÞ]và'Ë]_g§Þ]7i&tOÕ¼W’b™HÉî¤d~”úÂðuà»ð̱gšÈéŽT¢²VõyéºUeÑŸQ sE1) -!æ±(ä|j$Óm.²wE)LÙÆI?÷Àcx.ÿìÓÍlÎUZHæûª:¹ÿÇWgâ+oµøvú,‘ˆŒƒ'(w€>»qø×–iÒˆµHPË#yEXeIo”gØ1SøW×duyðî™åãai©w;¶Ôm®ïç—),lÂ91™“+Á=‡Èÿë$‚âqnVÛ´§—“Ü’ßÂ9gÓ’s\ùµHcÚX0,¯‰?¥hYßZOk¦B—+q?œ‹( w«ís–SÈ9æ“hg7«OçëŒì7,ÍOî£ùUA G‘ÜT—n&½¸€KÈÍÈã’MDPtã>¾v¤Ÿ´rO©íÁZ)4ŠÄ’HÉôâ¢i@ÏZwaƤuîF~µ)7¨Ýˆ üÜTeTœç56:ð9ö¥1drsNöЦ O^´¾KØj² ÇL~$Ô†, ~ÑÌž‡ô§mb9늶ÈWɨÌlO8ü©ó1Èlp:tÍI8Çw«SûÜ{bbNr{u£…!8àúâ­G#wÍõæ¡ ³;rsè*HÃrÇò¥Î/ n1´cÚžX°Àê UYYzdþX6 àÒçRbØ$g\Ò©äàUPÙn½*—Åô£œ9K süþ8ü)B’äTgìÏnE.aØ”ÉÁ 1=ñøÔHX·ARƒ—hü¨æ@Ãqê?j¡<`ÿ*0Û²TOZx`z.OÖ†À6íÿëœÒvÎ1øÐ]—±Í(‘P?C`BÄÿ?J¥4ß1éÏéW%rÄà zUd Ô‘ŸjqÜh‹q u¨e$ÇOCV!*)Ê~ž•°wc2íÏSŠ„“†9Á'¦¸`.9íž*´ß*müMwCddõlçµY ]‘ýÑŒVq«oæNíêÕ^½«E]Gy6%*ˆŒQJ'’h¸øh˜Õ®»[·þ„µéÕç_£òõiGalGþ<µè´ÁQ@Q@Q@׆[% ÝŒÜ8ÆìgäoqŸÈý;Š:Gü…në³:½á–Ɖh7c71»ùÜgò?N⎑ÿ![ŸúìßÎÎîÛýX¢‹oõbŠb,•«©o¥l•«©o¥r¾ÿ‘šúæ‘®ªÁvÛF»vâ†6ã7l.?!ô+•ð×üŒÓÿ×3üuV ¶Ú5Û·D1·á»aqù éHeªÃ³ÿYâOúûÿÛhkfWhâwXÚFU$"c,}H>ä ÁÒ¥yÓÄRIo%»›£˜¥*YÑâë´‘ùù«ÃZ,w2!r}³^»áÿ†ÐÝÏÔ±<ª£LúØ}úãðoÛ [¤·En¯p $|‰ìzíñG³JWnå:¼ªÑ*YiöÚ}¸‚ÖŽ1éÔŸR{Öv­á- [ÉÔ4»y\õ.×ÿ¾—õ­Ð(ÛWsw8?áì,“e_NËÉ·ŸæPÝŠ‘‚?\þÊ|WÓïìþê¾tÅûœÊŒ Þ§ãúW±Å>1óŠOR®Ï4}Vb²3«e‡¨®vûÀZeÊ·ÙÚKrxÀ;—CÏëXU§)+nua«û Фnš<u„SŸ+õ©nXY€'#ñð¯ŸÎå短w~ ׯÂežs—pB  óì+ª4Ô#dxøœmLK÷ö=~;ø›f‡N¹ Ù#ƒŠâíõ5ºPch]qØóü©æPï²FÿP+'Z1vlÅRmhvà…@À§ùþ”ä—‹¦jñO“4fŒ|¥ñ‚;ŒôªìWq;`:ŸÇ5ª©j™“ƒ‹³F¬n¬*N*k ÝÚyÍ+FXü˜ã×üúRËáûÕÿSuû8+þ5©™â>2Óÿ³üUx “·Ú“ÉÉ?MÛÀúT’ -Ô÷iü+±ø‘ êZÛjS[ü‘1†I†åI9àú½pº|˜/â+*‘÷NŒ<­+ûÑŸzANí\§ 'zQIFhR –ÒõÈ.Óv#‘d!N .~aøò?öPÊà22²žŒ§ Q^/¨®H9Úk·Ñ¼c¦ZørÑ.¦?i†//ÉHÉ$/ ƒÓî…êzæ·~ô9àÔ&âÎË¥¸+C-…ˆª¼íŸÍGÿXW^$×u2@º™SvBÛ€{ds©ª§‡«QÚ1¸ON VzÞ¡gb»º† ýÑ#…-ôëñ?ŠôCHžÂšf”)Y6ªÀó»·a\’i—21iYP’Kî9õ÷üêÌZT)þ°³žã8§?­zT²\Dµ–‡ \Ò²*YêWvvíml@ÞûÁÛ“œÇä*ÇØu}DþøK°œŸ5°üÿ­MÓ$:ÒEÎÒþ^[©€Oèk±â¸ëNp|¡êe¹} L=¬Žv /âàŸUŒSþ¥a@®Øêÿ6Å_¥®w93Þ¥ƒ¡OáˆÐF€ ãµè¾Í¬3€0àHüê ük²¬[´†qÖ6Ú~‡¿éúÑNV’fY.|;·MLlþ´”ØHh‡·Ÿ¥} _4S>u;«ˆh õ¢˜N2€÷½KÁ7ßnðµ¸f,öÌÖîHÇÝå@ú#%y‹ ÊG¨®³áµé[»û,wÆ'Aü+´íoÄîOûæ¾w?£ÍKt9qÒç¡þQHkã0ª:͉Դ[Ë5@ï,L#Rxߌ¡üøU‹›»{8Ä—W@„à4®gêkóÇz5¡ÄRMrãܧý[}3[Q¥VrNšli7±Ïü<½[Ë-ćE`ÚÇêw'å]Þy¯µÕ$Óµy/tôXC3ùq}à¨ÙÂûàcñ«³]x‹UÏ›5ÉB6O”„zíàÈ×­ˆÈñÜG´§³µýOV9…,=$ª»y«éÚy"êöœrP¶_îŽJÁ½ñæ e¶‚k†„FüO?¥rÐøjS>xÐ÷c²>§ühC¡ØÂè̬?ŠSŸÌ?Jõ0¼Ö³þ¾_æyxŽ'£!¯§ü—>7Õ®¤1ÙÇ9åBG½ñøäʹFó"bP–3Àa÷Xzb+½Ž(âŒ$h¨ƒøTá\¶½—«;þµðøqÿŽçñ¯^¦KGGš—ÌãÂçRÆ×örVìzšiš~­§As 3$Uš=²cåa@$ãƒÈ¨îtÚT“Λp\eVoAÈÆO>ý)>\µ÷… L³½³´qÀÁÊÁ+¬û·;:ú×v{ \úiˉd€å†9¹§YiYjpÜGm–kgh*Ý2?½Ö»`ãªþ´ä²ÜqŽ´®Ê²<–älº”‚޽56ûýkFùbmFä®Ò†g*}F㊌D½Wú×ÏT·;G³‘P'Í ´²#c¹öéVV4 ŽyçiÞO<ãð:GobyÏAK‚GOÒ¯y“ÈýiÝ@öúÑdÀ¢ÙÏ-î1N'ÛÚ®}™;s޹éH`\c#ëšVAr£€jF:µöeÇ'n;æ£òB©ù˜Œ÷äÑdŽîí;æOáÀ÷5 ·Î>c‘íÍ/ÙNq¸Š,!Ïñ ­9YBýáùÿõªAi“‚ÄüŠp¶Ãí Ùú Rå ‘2îýsšEAÀ {qÖ¥û)9c~])E©$a±Žœb—(î{6…LJ´Ïúô‹ÿ@¡YúC¬>°yKHË1ì å´ õø¥“UŠâ=T>ËQ8cjTåÜü»“9÷¯¨§ð¥äx“Ѷw5ÈüEÇü#öù8j_ý꼚½äº„úÔsÿe[^ý™|‹¿/f&æ@>p[®[§jŸâ0sáè6OÚ—§ûYb¿&]â¤y 18'½;r’F0Z€‰Aç ýqýiÛ\žzûŸþ½|òG¬M”>¿‘¥BœsÇãšç}Ži†6'©Ó$ZÆ7€iG õâ Ù'÷¹õÉ⤘ÆIõ9?ãC Åx#=ýë=ùœqô«S+‚*B¯ãN: fw2j9“lgƒúTª®€ S»g ž09'qÕØ {‚áØôŸÖ©Þ˲aÎõ©Üžy''Þ³56eµb>élW©ê‘„¢Ù‚çæ¦Ò“Í%z’v¢Š3V,×uÀ=€ÍWïZ6¤lü|ÇŠíü Õæÿ¯vÿЖ»úà|ÿ!‰ëÝ¿ô%®ú˜QE (¢Š(¢Šî¼2ØÑ-ìfáÆ7c?#{ŒþGéÜQÒ?ä+sÿ]›ùÕï ¶4KA»¸qØÏÈÞã?‘úwtŸù Üÿ×Vþt†wvßêÅ[«S`ô¬}[ýK}+`ô¬}[ýK}(•ð×üŒÓÿ×3üuV ¶Ú5Û·D1·á»aqù é\¯†¿äfŸþ¹Ÿäkª°]¶Ñ®Ý¸‚!¸Ç Û È}JC-VŸúÏ×ßþÛCZW—sZìòtû›ÍÙÏÑ¿]î½}³Ò²4©^tñ’[Énæèæ)J–_ôxºí$~F€5Ü‘LRh¾@2]BôëúœûUØÙd@èÀ©èEWeù÷ަªh1“PYdkqûµ>èÎ>½~¤Õ™#[¸ RÒ(1\ÄýkQðçýWVÒn>Ï{oäùrìWÛºTSà G"ºêÂñ§†á2ð•öƒöϲ}«Ëýÿ•ælÛ"¿ÝÈÎvã¯zC7±F)k/ÄÚ”š7…µMJ¦[kY$Œ7BáNß×=ž7ñŸÆzn¡)ðä6±Ý}•™¥¸Ï1K‚B= ù»c×-lg†`ð±ÛšÑ¹;Îö“{¿,Ää“ܓܚuö ãÇL^¥Æ]\éZÅÑk©ín\’ûôQRHøÏÖ½Óí1Æc§¨Îy_ˆ-àµÔg€qùfªZ]ÙŸ§ê÷6s+£° õEz6™ª6£d“£|Çÿýzò–` Æ9®ßÀ³ÆææÑ y…<ÁÎÛÉ?‚ïüëšµ583zråg`—R/8éÅnø~ÒMZýHÙ`B »·§N¦³tí.}Fò;kt.îÎ}+ԡЗLÑÚЕ÷= ‡ÿ>>žæ°ÃaÓ÷äiZ³Š²/ïŽðF AY7Éœ÷Úw–r0ÆRRTqŒìl¯é\F½âý_J_¶ÆŽv’*¼OÀÊž7¤gžƒ]7…LJõ¸!½[Ûkù& $|¶W†ÃÏÜè+½z:|ÌoI©jºÞ—ý­¤ßC*Žg) ) ¸Æ;€öé^3m(Kˆä=ýz¯Ä?Úiš‚èz*ÚÃ5¿Ïu"Û¡ãˆÆAòxô¢¼¡æ7<Í´3±b…“Øö V¿ âìÓ7)¬èƒ.Ê£ÜÕ;x5+åU·ŠWRq¹W?ïõëFßÂ7Óa®%ŽzŒî`ç\jУüI¤zPöµ>”ÞþŒn9¢˜ÓF:1cíMG–i8£ÜìpªI?J©â©Ç©iã'ŽõcCÔ—Eñ µã‡h‘ˆ!ê¬ þ8Îqê*ý‚üC¨o²4·V¸>XUûߥ3ÄžŸÃÙ¼× 3\o å© ㌞¹Ýè:ññŽþ¯Ì®È©%¶†õ÷ÄuÁ[ $•î>ê¿üUbÍâOkX¤–8Ûµ²lèßx~u©¥iºx²‚á-ÑãV%¾ls×§>•¬8úVÔ2|5=msºŽPšNlãâðÖ¡w!šòuWcó3±w?_ÿ]iÛø^Æ Í$Ç¿;GéÏë[žÔv¯JiÃáG£OB/êq^(Ó㵞³ªÅ‘¼'òa]r‹ˆcWjÌ‹"©ìd:¯â›q.‘æñ˜dSžø?.?2?*­áù|Í%T“˜¤dÉêyÝù|Øü+¯.Zò‡t|_áTmR+úf¡¤Í™Í{'ÇZÄñ,y··˜¸å6×pÎOÓoþ=[dÕ-Z/7Iº\ã—Èû¿6×n?ÃOÚR”|Žœ_eˆ„üÍ„ºÀ‚MGL|6ð·1®qÈù\ôÿ®uêK~„œÄÏøWÎ:-ѳÖm˜Ÿ•ÛÊaýàÜÿ}mü«Ò¡¼•ÚÌŸî±ùæ.½J5,¶?K¡J…Ùè†îÎU×ýáþŸªjOg¦Ï-”M=Љ6œzì:ãÚ¹%ÖnÈÚ'“ŽÇ'õ©\¹ipHã•á\ÿ^ŸSu†‰€4{˜#Pa”c“M’ÚíW償®ô®œküq£{•ÿM:´=e…'r§õ®;S¿S¯œ»%ÂÆ_Ê$Ž¡jï2ÅZ&R+¯kë)clK{b•fÒIÉ„ç¾èÿúôíK»3ìr©>ÿà}§¹SŠ~ôsÓB+§òô™FQÇ#?ÀS›dçaÉõcþ4¹"öswG<8é·è½éùv®tH% by¿Ê¡“C\änÏàiªMí$.eØÁ-Í’: p]ÀîÀã®4˜á¤™\"i­¡ÎË"3ÉÁÒ©ÑŸK}âæ‰“ŒœnÀìæ˜7=²{ÕÛ+RýT1ÉŸVQQGg©Üö2þÈÈ©tª­l;ǹ d0݃éÆ)œ ?N*äɓ$Ÿï.*»]Æ‹¹±ø ÔZktRHr Ú=;Ö¥¦‡qu¤\j‰qA `å·<1ü@Tºyâ»´–Ù"ILX”°9Êxù…2}lè–WÞ³ÈâRe‘d=HN@éóÖ·§I¯zª²1œ¯îÁêwöö)©xNÞÊY$Ž9ìÑ¢ 6 Œã Ô÷š-å´00ù$‘< R‡#§ÐÖT­â HÜ落m" ÿ-K£°ä×?ÿ ö¦zAf©Fçÿ¯UâáI%4Óô8UqÔê¤ð½”—’LfºI8¸’Ð8ò^Aƒ¸Œg¨Á#¥gü@RÚ Æ~Ô½ÝjÆÿ„óTÏú«#ì#|Ÿüz¨k%¼ÖmVÖá-Ð,‚@cV ÜŸZ¶:Œé¸£ZxZ‘š“9í¸ gÚšT‚v’ÓÊ¥u'† \Š_+åÚÁÒ®éÙÎ=¹ÇJÇ×|G¯ÌAg†×øUr¤éÇ~¿JÉXÂ(U\c€®¸›»Gc¦.¯#Çî`k+§Ž`èÊvº·XuÜS¢ºD%×µt^,Ñ.®5YnaE‘ŸÉ“Ç'ß¡÷'=s\ˆ†H˜Ç"³ovJ#'*O ƒùÒű¢LaòÊ}í燧>Æ¢Pœ¨ÆOÔlË[UxnÓLÑ4˜®¾Ð-ÄjæCÁÚà {f£×uûilå·‘šXm“µˆ#Œþë”ð ¥Î»á{FPñ[ƒ™“ ñƒØm#®rsÅwz‡4»YcƒÍ˜tšs½‡Ó<À ·DC”SîÎ×ÃÿiÔ#¿µÑ™´ÔU2«Ç´HŠ ùA;·gŽ2<çÿ޼%k©i®xVcÞ2¸¶¶Œ¯”Ê(W€N2ŽA#ÛÝ ‚J‚Aõ®?X±“A¹mJÔÓ¥?é0“Ÿ(ÿxg¨õ¹çž3ÂC÷ô‘ó¬òÏ5ìÍr®nB$fpls»<çŽüæ¬ ‹Ö½GÅ:N‘ªß¤áÚÖk…§ FXŽAŒ úö àÁà B8µw$Nܵ§ÙÛ>t˜ÊaÆøÍnªÂtšµŒ9Æi²] Í¡#*ÂEäƒÁüó®¤WžxzïìºÕ¹””ùGopÜÃ8?…z|6qGÙâ\–ÒÔúœ¾§=»h/SF8Á ;×’v…qþ2´ÅÌA~YÆøF}È'þù®Â²|Iiö­|^ß.NÇSÿ|–®ìº·±ÄÆ_Ö§>*Ÿ´£(˜v’™í"•‰,W ORGþb¦éYz<£l°ðwžOcø?:Ôé_µájûZ1™ùÝxrTh)i¢—¨®ƒ!VDd|ìpU±èx5ŸáÙ^ßVkirÃ#(¡zO›$¬ ç'ò¯˜å¶úmý¡»Q‹“òGW>¯co÷Hã óÒ²îˆðþÛÿ¯3¨>”iy¨'»·µÈžxã }Òß7åÖ½ùN1W“±ùDa)»E\›ÞŒ€Aààô=ëãÄÑ‚!G”úýÕ?Ÿ?¥f\øŽé¾áŠ9Óž?J⫘ááÖþ‡£G)ÅT×–Þ¿Õ̹Qí.$2@åCz²œùŠôkIc–Þ9#bèêIêAäW›Épn$iY‹;Iï]§‡'I´˜Cm/1œv ÿ¾q_šÅKßsô ½¸®IoccÍ9cÍH5HÌÙH~ƒåS}ô ×­2XØ`•'5àÊ÷=D’[,}HéKÎÊÝrFîZd?ò̯ÔéOnåc¸â¡‰â•Cªlã2§ùU{I­˜¬»µ“§”¯¶0Km\ € é×ùUˆ¼=¤Í ÜÝËw3™¶¬¬Í•û 22O5Î6 Aú‚Gò§4’íDËå‚NÀÃo#“À~B·¥‹œ½ª3%/‡FkM£4îÌo.K7,ZLäŸ_óÞ«Â8«’²Ç¸P?­g£Î Ë'Þ8ÆFoƧ[Ë”8ÉÏ¡5¼¤ýår”RØt¾˜gcœrI>ª£è×HGî ‚w`ί¦©r2a×¹©¿¶§_¼úŠ9à÷ˆÓk©—ýp~ì,HÿžxoåQI¦\F74r¯³ÆEmh3aâB{ÅJš´*r!Ùþé¥jO sHå%µnpÀ°ëƪO+´óÞ»ßí;W8gŒô-‘üé¬t×Á+ “ÿL†Oéš9)½˜ý£8P¤u8üêMÇøpàX®¾M+N“$¿é¡ÖªÿÂ9mÉI¤õaÔRt;2”ÓÝài$0Ç9¦2·PHöõ®‰|8È7JÞ£ÊãHú år’FG¡?ÈÔ{:99üÄC“\¾¥!iXdg Zïït{刈ž:’9¯;½WYðãi$zsßò®Ì56Ú"M=ŠrÍß1\íÒIç¶ô`sÜbºhTË{``—ÏåÏô­Ð„®ÓìEwª¾Ï¡ÏV—´Òçš‘I^‡q¦ZÈ kh‰ÿtVEÖ‹d`‘–ŽªH!\VÑÄFG,°²[3“íHiÄ`šozè9‹0/«FÌŸœ}xª ò.?:ÛðÕ…¾§©½­Æ¡–èY£’~œ…'¢äÉôÇzž¥=Ž“Á:Ä¿õîßú×{\'ƒ#1ë· H8†AÈ?2×wVHQEQEQEÝxe±¢Z ØÍÃŒnÆ~F÷üÓ¸£¤ÿÈVçþº·ó«Þlh–ƒv3p㱟‘½Æ#ôî(é?ò¹ÿ®­üé îí¿ÕŠ(¶ÿV(¦"ÁéXú·ú–úVÁéXú·ú–úP+á¯ù§ÿ®gùê¬m´k·n ˆcn1ÃvÂãòAÒ¹_ ÈÍ?ýs?È×Eíž›cÞÜÁi•3ˆÆpÜrž: C4«Ïýg‰?ëïÿm¡©ÿá&Ð?è9¦ÿà\ãTô«˜/ÄSÚÏð½ÑÛ$NN-âÇZÚŠŽR ÷ÅrV4†d>|EJýâ¿Òº5 mBÖÓ+7\g}GéM4Ö„4ÖåÝ&äMo$Lyì#Û¨ý hŽk‹œ:WˆÄ’I¶)âÄ«Ü`ð :Çñ'$ºf²Ò>Tû¯!ÿ?Ž?:ÎU£vRƒ{‰µÒž†æV±q¶Ïdd•yUààóÛ¯áXpÆóαF ;ªä’x«ÚåÌ.mRQ†ÈS3Œ#Pi—`Õ-/GX'Ixÿdƒý)E'-M£¤Ooøe¥j¾·¼‚õ‚ Èf‹«#Ž?Î;©z!Ô p¡‹’@¡õ¬}5 ò¢‘óŒ;1Ë £k{í^zô«ñÉûÓã~3+¡ÙœÍ»Ü½ö™™C ûàñþT BI·¸@¥ÆÜ?*ùíÿÖ?­Ihñˆž9HÁèqÓñª·ÖˆèÀíeúÔ=Ì+`<;©%“,¥LO’Àn0·'i<œAžÄ˜g¼3Nòò¥ŽG=*ÍÄ’´-nϼ÷¿‹•ÄøÃR»Ó¢ŽÞÞ5š=þxþîH!döܾ¢³’KR✚G¬Á–·wQÊ|¿/…U<…@qõè6_m°‚çą̊ mèø€ú¼¾y<ÉsøWeàÛ³-„¶¬I0¾åÉþì?Oü ¼Lê=QoÔõréòUtï¹Ò×Càïù Ëÿ\þ„µÏþ5Ðx?þBòÿ×ÿ¡-x9wûÔ=OKü z½Ëø»QU6šRꩦIsºG¹3Ê"Ž$ŽKLÓG‹b>²¾óí£ººanIe ÄçF ÷ãÖ¾ã¡óGU^â;˜añ¨$‘Aû\¼wûçµz§ƒ/EÕ…ìgSû{Ãy"ù­(rW?)ã <ãzW”ë>k¯jÓÉuï¦`#Ž7œ‚N0{wé]X|kÂ^Kª8ñ~Ï•:ŽÉ3]Z0q÷cŠ­öÛë¶)± d¬(XëÜŠé­ô :܃åX²Ùúއò­D"ªªðFü+ ùÅjš_ô<׋£áÂþ§#‡µ–->ع2>I£ýqNÕ4!§i«2ÊÓH+»T)ž§¾^õ×f«_Û}·O¸¶ÚäB1ÀÞ9\ÿÀ€5Áõ™¹]‘«šmèr¶>[@"†ãšµÞ³4¹ƒPAV…iÔVV›?[ÊꪸX5é÷sÅ%%dzÃp*zµ­ðÞôÙø–k'rê"¡@ûΟ0?@¾gçYê´W¤ëַꈤIJ§VËøŽ?U)ûj3¥Ý~'‡Ò½8Õ_eþ ÷EAv#h¯ˆãl%xR”£7e¹ÔžM5Ý"Fw`¨£%˜à ânôà`@Zbð£æ?!Áo˜¶1ŸóþqNâ±/À?Jkü¹bON?Ï4Çî¨|³ŠSÀ'#èhé±² CCmA’xëœR( `GÓša@iqþñÅ€7{6<½®>´ð§ ç“HI_©ÇJ>RpAþ”€qUêAÏcHH#‘œ÷Æi•¸ôö¦!`I‹SéEÂÃãeazúñNÜsÓ­ éÔRƒÇ¯®)\,! Tªçž¹æ¢Ž/)JnùzŒ“RF­å(fÜqËc¡“‘ÉW†4ª¸=q÷¿ÆÃ‡òÍ5@n ÷<ÒÇ[ÄR5èé °¹)ààz hrÄaTŸB0iû‰ÿ1‚ò$ÚCq‚*“ìû@%Içœi«0n=?ºE*A…jFË©ppîӌò±Í ˆšå°AÀõÅâC×ràõ=ê2F>lçé‘Ld9ÈsôÎ)ÜV.}¶uJØÿxàPº¥Âò&lûÕ ¿rÞÜ Mï’p0(» GY»ÙµŠ8ÿhsúW›øŠè^kWlP¤¨Âôà ×bÒ°FÜnƒœ×Í7u$§åÜÄý2k³›m±KMÙI 7dË*¡)„Üp 8ïÛÿ¯ZÑ” 㯯È_LLûAì>”ý?QkI“sß™}µzƒ”y–ç4±IK‘­Ù* „1#5VæÜyn8åH¢;”º&·˜‰ê@Ïä ¦ÜÜ¢+3¹UÝ€]Jçé‘\ªR:H4yËðÇëIËïN˜~õ†{Óà!Ÿð¯^ú=µ&j»£áµ8Q”0lŒ~© ±§¹‡Q·uê$õ¨{zG†íßT‘•æ8>ë]Us^™¤ÔåúŠéj ÛZŠV¾EUQEQEw^lh–ƒv3p㱟‘½Æ#ôî(é?ò¹ÿ®­üê÷†[% ÝŒÜ8ÆìgäoqŸÈý;Š:Oü…në«:C;»oõbŠ-¿ÕŠ)ˆ°zV>­þ¥¾•°zV>­þ¥¾”ÊøkþFiÿë™þF¶îá» ÜÃ`¬·fɇË!¶°8]§ð\z Äð×üŒÓÿ×3üm]Ë §‡ä’ââ{Hã·‡/Ôó€ ¨äœ mz•/b‘‡e·ÝZíÔ¢¼ˆ!šû†”€s†RY†=juŸúÏ×ßþÛCU|?-„3êM%üwÈŠ÷/ªWX€%OËò…ûÝ=óRéW0^'ˆ§µž9á{£¶Hœ2œ[Ä8#޵L”yž“%ª¬·‘DJçË9,G¸ôüjªÝ6à›{¢ èè}}«˜›Q•›2ÊÎO'&“í›ÂŒ žùü«6öGMº³¢:•Ä׆âê2N½}ÿ*€²§Ê¸èg%–¡wËkm4ª¢Š×ƒJ»Â™Œ1€¼–”ÐJµ9¢é¸¢÷ÍO†Œ[ûícû_ü·1y›vüÿw#9ÛŽ½ë_MÐb¼“oÚòWæ;#8ÇÔà÷ô­ËS¡ø:â=sU½k{{rCHs Ë ¼*®î¬:gÇ ”ãV1rWºÐÒr¼]Ž7æxÈP7g!ˆÎ Mow¿Ê¼d--¨Û"3˜²8Èç°ž³]LsxnÝ¥Õ™P>e.®xô-ùSoç°Ô|?0³—Ì…ÙcÆJœî7#ŒýjpøØF¤TSß¶†²rŒ%Ì´;íæÆëI·ŸN!¶‘rª€qÇpr+Â~1hé§ø´ÎH¯â3#— ¸ 1ÿ®ŸŸSðûÅIm$qÍ&,¯›'="›?@zýéŽt>5è'VðC_Cë2A8 s埕ÇÓcþå}Hª‘º<¶9j|á+áÀïZ ë£ñŸJÅy0}ëwGe–½Jžý¨HnD c4×°ÛÆ»šW ¸’Mt1èfÆæ?¶Ø´—Ú^ds“è}ÿ £ç »{À¿êeYàkÙ´}FÓW·Y#(áW,‡‡FçߌäúçÒµ…‘œ¤ÍŸ´bÊÜG—‚8ÂÁ¸t\Ž_O¥tv€1fà·VDS&6µW»ÓÔ{gùÖˆ…ˆ 1Ç=xô«næeÅ’3 §vIž˜ôúzS˜f2@ÉÅ>07¡äÿ"}ú :?_ÿW¥AG+­n®¤‚¬ø út¦ødÈÀêÖÁ@7›Ôó‘Ó¶ç^j£S¤_Ütsǹ¥§é°i©:ÀX‰¦yÛv8f9 `t¯ ûA“]×­ÉɃRœŒ­#=Îàçñ¯Oÿ„ÛÂÿô¶ÿ¿ŸýjäRÃÀM­Ýê âšâòF-¸M»÷|£fsž^µ•z3ä³V9±tÕzN1zîb­šêÿ³|#ÿA;ŸûèñføGþ‚—_÷Øÿâ+ƒØËÈñ~£SºûÎRŠêÿ³|#ÿA;ŸûèñføGþ‚—_÷Øÿâ(ö2ò¨Ôî¾óÆïã6:ôã ó7Öù°=†qøUúô [Ã>º•.ou»Èp¢ |åPy'ÇדL@ðŒmñË `=òm:nQLû̃¨Qtêëé©Àçg×¥zü#þÿ õ×ýþOþ7Ht*îm~äS:ñºËØÈú›PZµ/¹ž~j–¢™‰dî§ñ¯JþÆøwÿCßøÿM“ÃÿçŒÄ|Epwà \&síûºÒf¤™Å‹Íp•¨JÞ«±«àËñ{á%wA໳å÷*þ4ëÿèZzŸ3PŽWá ýá'Ó#€~¤V4ð Ñ›X( 2éºÆ´àá³X#ÄÖË·}£ƒê§?Š´ä8y&ŒõÀ<~÷¤©Ï°œ—siU@,šyPË’¹?dÅâ=&AÍü@›Ë&?:·§i6<»ËWúJ 7 -Â÷,`z}i£!€çŸOñ©Wäc‘Gð“ù ŽQÜà´sÞ—8è¤ãÚšU{~§(%y#ð4¬HåÂíÛÙB•#×ëùR§Ï“åȤt,x5!Ü!‡Ó§e‡Ls@Ìã…$¤ôý*P×}!à n>‚¡‰äÞC–À鹨¢À<–WÀ#ž@Ú!9š28ëO“lœ¤çŒŒàûR`aCÄt#ùQ`"çøˆ>¼ŠX°>O`.òÙî=sLF-¸Ic·­<àŽž´¹þ´ÆÀ©_OZj—¡èNåT¬½Iwæ.ò t4N1Å'›†a‚¾ç¡¦ùŸ:‚ ã¨è(‡Žù¤dè2i;}ãJÇ¿½$V»2Û鳱݄ zžêk€ Àé]wŠ®Ù’ NY¹ Ÿ×ÆÊûarzòGµz¸HþïÔÎnÎæ\¤ËpøÀœsŽ*5ã·î”ɯ]++<ÛfφïLšÂOîæùqèÝô­ÿ(þú}¸Û·§ÔW+£Â'Ö­•AùÌb;çùà~5ÙëÈ÷£žcÏ>Äó1I*ñhôpºMRÕr!¶0¤UT]ÒV†G•é3ψӑÚ1 <ÔµçƒHlô_XÜÚêÒ¼·&X͹'r×o\§„¥óv6Ün >üWWNèRVaEUQEQEw^lh–ƒv3p㱟‘½Æ#ôî(é?ò¹ÿ®­üê÷†[% ÝŒÜ8ÆìgäoqŸÈý;Š:Oü…në«:C;»oõbŠ-¿ÕŠ)ˆ°zV>­þ¥¾•°zV>­þ¥¾”ÊøkþFiÿë™þF´u‹)î|5åÛB^XRÚQKlmÅ@ÂààtÀú Îð×üŒÓÿ×3ühë3ØøkýÌ:[@. {Ûi m î éH}5¥™µ]jße¹¶¶©n‚â#;n,NÓÎ@ÏÖ¥³ÿYâOúûÿÛhj(M§x–ëIû]ÍͱµK”7™qR7pp>µ5ŸúÏ×ßþÛCO º³Í›ÁÚDVÿ,nÏÊò9'#¨ãô®vò(-¤J„+È*#ñª“|L‚äm“Çì7øVcx›O¸™Þçí1¡2#cwëÁãð¯¾^¨â¡Z–Í«ùjwR¯zn-kfF¾µ;žúV‡FéýﯵUñ+iú'‡ÖÞÆEn®‰Ç'žŸ(©.âœ[C4ò™<Á” ù8ÉÎ{W5â‰h²Žå[÷ÉÿëWž" ¬¼Íëb%84ÙÍøNø}¢[9Éò%mÜmnÇÛÿ¬=+Ýü5ª&µ¦M£jJ$™a(áÇB~SŸÏüs_4XÈȲȤåXqùצxo]’{x¯múÏ/鿌cß#ƒÓëɯ¨Säž»38ÓUèòý¥±çž0ðeç…µ¹íš9%µÞ|™ñËØtoZ¥¥ÅtŒcØ#LX®xÇ?ç½}Dö_tho1´ºòPå£nêúã§5ÇÝü"™åf·Ô"ÚOã#ˆ5Ò¡Ðó¹šÑž?,RÛ´R “#!׃ÓÒº?­Ì× dïäê(¶gn%PsåžÛ¿ºNx$u Žú„—ª6¥n£w?º-Ç|r+¥Ó>èšt‹<þmäÈw)”áAúëšÒ1ŠÕ²[lÎÐRî{‰ã¹·’/-‚³:mgŽzžºón±ñ«!¸=¿ÎkUñvk¬-€Ô!–çiß Gqo$±…üH?Zç5ÿêF7ò”»l1îÌ1øŸjNZh="ÖO(²Ëò  y$ôéþ{W%¨øÙ’å­íàX]ÞeÁùÏÒ1ÈúœWŸÛüCÕÔ<°M°¨Ée· þñ<ä{cŒô²5MM/n[Q…¼ò’dGÊI‘ׯ$ƒëPÚ)Eõ4µÏêov²owÁùd”åO®|£¨ªRÄž)„‹yÌzŠ–?,ÇýƒØöÚzñƒØæ 79ç6žÞõjßNd?!¡õª¥9r!NÐ32¢³¹®cd•Nßœ`ñëS_Ú<"'lFÜötçÒ»u¹µÖcjXŽíGÉyÀàž¼½zuéYWú5ãøzK¹ e€?î¤p~fžS:šôç„„i5ö‘ÃL¥Q>‡)Hîóÿ&½àÿüw¿õàÿú2:ó•ù%ÁïÅz/Â%Yv‘å7Âåq»$©ùöê@ÿv¯\ê–V„¬÷Q£‚ î#êH¯Î%¤âŽ”dª8E^ůj3\õÇŠ[[fcÙ¤ `ýr?PÚkí‹.ð`MЦþß‹V°ÃT—Czy}io§©¥â†M&Xä’$”$^c`’:àw$d~5ÊZ^,²”-ódcŠíôß…:¥Ïï5+Èm7rUzùÏ ô©¬];LƒLñïö^£Ë w¯œˆÎ?Ú;8ÿjº¡‡Q,Ïw.u0:Ó–¦DS_ßJa´¤ ì†2í^õµgà]rýÃÝì·\™dÜÄ{ŸÈâ½B"¶‰b†(âz$jÀT‚·8GdtVÅÖ¬ïRMœ}‡Ã½2Üy,×oЀ|´?€çÿ®–ÇK°ÓT}ŽÒ1¹?SÔþ5oŠ*îsžD° ÆÒÙ…)œÄ¨§?#ÿ«ðd?…uýsXìüVÒõÏ´DT•àïB2Äý@ÿvµ­n>ÕgÀ]¢TWÛŸ»‘œ~*a½IG¥8 LÒÓ$ê/?äŸØ×Sÿ¡½yŠ!6úÏž™ýò+䎗ðPõÛÄðØIónóûÇÞýº~8Íy¿‹­|Ûn’ÐÈAô Óù…Orú£(0e :‘Kš­fåí—9%~R϶*|Ð!sFi¬ÁT–8¹¨òÎ_'Ñy¢áb¾¢¿:?<‚¶?ýuë‡ zñZwË4{Bàœ“TZm üÛjKHO%Ï ÿ½Å ¬O®*´—ð.y¸îóUSbO•=Ú‹”¢Ù­”…4É.U>ùö汚{™O.@î5¬³J©³3gŒtÇ'òÔ¹v5=Ï]ð¼9£ørÒÆãÃââíw´óyì\‘Éäü»FO¦;Weá&~4ÕÚß÷Ȳ[ƒåªJCæ!N¹Âœ Ç¥xŠ[YÙÄJd˜1-µöO×?…vëãx"ø{k¡Yµå½í¹$Ý[Ì#*ZGl)ݸ|­ÉúŠç’R•ÞÈêP”#hnΟU×|/¨YmítkvfÊžP8ÏLàXo¤è÷ã÷~[ŸökË4éޒ™à8‰±éØã>߇ëDyD†±ÍrÕRæÕ4iÅÇDzao¢jo5ªZ©ò°ë4 Á²N1Á#Ô†I¦óYítÙbc÷Q¥^@Æÿ®¼îÛU¼µ$Åtè[¨PûqÓ¿¥h§‰õØ»i˜ ‚U6óÛ„õ®J´yÞæœt:÷µ´û!- ®9*Ñ\.s×#ä8Çûݪ´š6Œ×0µÔmâbDŒá\}ËÜÕ‚¾*¸—i¹ŽØ…Î6DÊ=çùV”>3‰ÎÙlãEH™‰?†ÏëYû–†rŒ‘a´Ÿ–8uo0´`a lŽs×cÓ¨>£=k–¿Ò„Z¥ÔVáæDs"3Aþè=ItëâË)Làà¬}p{ç5>)Ò£”¬ñÌŽÎØ>XÁ㿦+XFH”ìÎ>KH……oö†ÜþtƒL…†ßCšôA¯ø~`?Ò¢V<á¢oþ&–FÐn°æ[&=·:çò<Õ^]§7tyÈÓŒL|±$~êJÔ±›ø2b¾º\ÿÓBwpèºuÑÃÛ"œýès´¨¤›ÂöEÏ—$¨þ'¤ùº…ãØãRÖc騟éS/ˆu¡ƒþ‹ ÷Œäk¨“Â1|»§ôÞ ÿ*¨þä¹Wñ™¨åOt‡x™+â«Ô˧#T“oô52øÄ(ýîŸ:û¡Vþx©¦ðÝúr©¯b¬¨ªrh×èÄ}ÛýÒ O³ƒû?ˆþeøüa¦ž|~¡¢?Ó5mc¯rk¤Ñü|C¦½çÙ&¼ù¤œÅæl+óýÜŒýÜuk“U'÷kó.œ[»:½YV H‡b,¡pxùyïŽIôòç‚ñ¦åÓ£ç‚è5Ýk2«ýŽ%“ÌEŒŒ“è};qÔž#ÅéæZÇ=ÿQþåÑ×’éþF²þÃiv²\«,-™3þ¯»}=ëcI–}PŠæ!‘œ2ž„wSSxOE·DÈåcˆ’ÛA'Ž{VýÞ›ÀšXVàÛïÚ'–<$¸##=zàôï=Jµ“Š.œ•>Y\ë¼1­C¡ê1K(Žm*ø!<˜d'ùüAîpO'Šõk‹›[F¹º¹† xÆZi\*¨õ,x¯šMõŵ›Z™¤XÕ‰ò”à1¬ÝOÅ -­–p÷·0®ØÍÓ´©ÆD'hÇPyíÅtЫÍ>‚ÆSMûHõ=ËTø«£Û$‡MŠKØÓ†»aå[©Èo¼yÎÁëÊ|OñBÿVg…n^h\ Á ê#%˜8'éX‘é:‰ô¥Ô®/TM#:Ú[¾I”®2胠ç5É –P6ŒW)YØåŒSܹuª]\Db–}°Çò©ú÷ºwÍoè>4¸¶Qe¨§Úì[ |ϼ£ØŽ­sðé¬üI­KmðH¬e]GVÍÕ&úôÞ´»´:¯‡§frwy€*ÝAùtèy®yâY~AnÌ‘€þuþ~Õ{F¸ŸJ–7·Â»YFHnzœŸþ·»$]?Ä‚ÀCx8ïôõÝ™J²©¤^ érjö1,¢³Ô¡D¸U†é8Ž{7øÇÖ¦–Ö[yŒ å²Àj[½:KI¼£… |¤w«ZeÙºuÓï£2ÇÒ2ÎŒOO¡'§NkèðT=”9Þ­îxتÞÒ|‹b+K’`æ:1ÕAÀ<×ð'ÓŽxÍvsé—7úd‹å–¸y’Xà Qæ\g®O?OlV•—…­´ØËJÆRz¶NÓoò{Ö„%žéH;BƒµNFNKsì?,{ÖU±joÝè:x~U©óÏŠ4ßì^Ø¢$b)$jI¬ªäõ ÍvùñUážÄßÈêoŒz:CcªA *4Œ•?V¿ªß¿äg¼óöãþÚGYaq*4jÒ—U§©ÑRç .‡«øœß×ÄŸúªIíVµR[Z¾UBI¹ùùliüO«)§Éo8ó.O”¾ÌG¸½§œR…4 ›v^Hâúœ¥&äìse€$~Ö;цÒAMzî“ðnÚ2²jÚ“Èx&+eÚ3þód‘ø ît¯ hZ) a¦Aƒ¤¬7¸ÿ6HüëÌÄfÕê'Ùy™ÓO »î|夨Þê—ɦØdÉsÆÁ&ÐûA<äààn?wúgÂIÖÕ5AÞ;UÉ#·ÌÃûäÖg‹Q¼'ñEï£VXšt½P‡ætsûÁí–óé^Ê0X0=ƒ^\mkØé{œö›ài„¸<ôº À”´U6Ù!ŠñïŠO¦ø¦×T·"7¹Œ:¿SæÆ@Î=‡—^Ã\_Äí3íÞk”\Ëg*ËÂä•?+§Ìÿ»RÆ·.ZÜÇ{gÔ@ˆæe@ÝB°gð55rÞ½ûW‡݈ßk+GÉÉ*~`Oýô@ÿvºš`âŠ:ñŠ)ˆæ|ycöÏ I*‚^ÚE”$giL6ãþís^¸ót$‘º @vŸ˜ø–…z5Õ´w–sÚM‘ñ´Rc®ÖÐ×’øZIm5‰ì§_.GR­9ó·à7Ôu+¡ØÑš¥u«XY’'ºpTŸÈt¨ìu õy–;()$o$w›–7@m»AÝŒóŽ˜9ÅQ6;›¿ù'ÖõÔÿèo\·-©Òî ¸•ž2Q€,Õý@®ÛS³h~Z[ëz‚Y‘šâ{BNÀÛbç1&=OCßÏîü]á=! 6zdW.¾P.É‘6ßœïv˜y»„dF:Äé­Ë},sšMµÍÍÌpCúù<µwÊ #““Ï@A8Éö½Î”ãª81~äù.pWÚ.Œ±íŽÜÇßtS±oü{#Ë\BÖŽ<¹HÎpÊ0ÚºGMšÞyS •BAd$0úƒT¬t÷ž)ReFȇ 9†çÿÿ9©¨“ZŽœ,Ò¾æ)5Üé1y’9¨çóô§µlÛxf\ƒqu3ˆ”ÈWØô‘5³¥évö“É!<郷<(Îzž™Ûǰô­øìãL¡QßúúÿŸZô2ü¾•hsÉÜÊ´ä§Ë†¹ðõÂ3 Yá‡+â’ëƒÆ?ÏMKR¶sÚî e8d2}Åz$ñ4°µ´®<œ†(G+ƒÕO¯ÊëÚdóÉ ¡—+æ6~qÔ Oý›ØV˜ü®麔úN¤¹­-Jqø“WŒ —¬qÝÕ_?˜«Iã QÍöyrL‘ãÿAÅe6›È=U‡õªí È;M´Àû!5óÎ 3©F,écñŒ§ý}Œ.霅ê 9g‘f tçylrGã\°ñv¨eV‘ât,J¤þ8«ÃU—S'–Þ4DRй-žä“ǵB¤‘t0ò«>RÝÊè’>é`žÝPå`sÆ=ûšã4ϧËç ¶IçÖ­x‚òH-%íf;û×ß ×%;Û'Þ»°ÔbÛ:*Æ8zŠ4µºÔéb¹—WžâàØ•ö‚CÔÿ1I=š¢n‘6¯«¡_çZš±ÑìdI¡i& 'ÈÙ9ÏFSÓ¨øÈ­í›H[dªÈòÉÏä+:­s^äÕ£U/hÕÓ8g²ŠEÊùlLÍE%‹[C½ÜœñßÚ½ íú-Ò=íB‘Ò\ÐÒ.‘¢^ÀJÃŒa³Ú=¹Z˜Ô³ZœU±çŒÄãòÁ©¦[uS’ÄnÈ>¼×Y/„4É#"$’<ŽecŸûèšãàÞá¢þãü«¦-5¡ËˆnÈÑI˜–F$÷Ö¥±Cöä”bŒqÇ5”X†bµ-n_Lf¢mA?Ú¤Œµ¼e½‰~TÇ/ÑÝ“`#»=êšîãp<{ÕëÍnß1ŽŸÞÎ쎨¶yˆl–ËYž(ÀTÝ=+5îϱ®“Æ‘…×ä uPJçÑÆ~6äÍzÔé¦pUVªÑµäÐzÒƒÍQ'iðé³tž‘gõá^‰^mðí±­Ý'÷­Éü™ƽ&ª;-Š(ª$(¢Š(¢Šî¼2ØÑ-ìfáÆ7c?#{ŒþGéÜRÒä+sÿ][ùÕß ¶4KA»¸qØÏÈÞã?‘úw´Ÿù Üÿ×Vþt†wVßêÅ[«S`ô¬}[ýK}+`ô¬}[ýK}(•ð×üŒÓÿ×3üuV ¶Ú5Û·D1·á»aqù é\¯†¿äfŸþ¹Ÿäkª°]¶Ñ®Ý¸‚!¸Ç Û È}JC'–5š'‰‹u*J1SƒèG ûŽkJ·KTñ1´Œ‹tpe•¤oø÷ˆòÌI?‰®†°ìÿÖx“þ¾ÿöÚùïBðN«¬Ç-›K,(#¢78/ë×ß#<‚1]¶ðæËE $„OqÞyåý•þ¦·<z$ó-¹:{އõçñ5ÐêžE½£Ïwu¼ >gv ÔšÖ…MLk>D¥Îl4vêÑ@»†˜œã¸ü{ã¥aëwözl^uã´“¶|¸¾ó9ôWTñ|SÌÖ~„ÌùÃ]J Æ¿@y? éŒÕ[Ú;µ_êP]^¹æIK€>ƒoN~ŸJÃ0~æçE*ñ¼•Œxìn¯oþ¡…cÄPމž‚½I×4ïj‘júµÀ¶²„±’]Œûw£…õ tª_Ø &ËŽ·™"}ì" ŽO>¸®wÇc Ô?íŸþŒZðñ/‰¤¼×æu8¨Á¤w:üŽ÷q¤ªÁÕ9 ÷#¡'Ó®y®ÄÒ¹ž(Ü*;Ž:‘Ó?Óÿ­Ù¤7:¤þlŸt›ÏEàsדëßÒ¹OéñZëp´[Æ HØ0êFæÎzgçvã®k< XÔÆ¶Œê¦©ê7Áò[Ù­ÓJÀÉhãBìF=n٤׺òú3—<–§#ªÖ†>¹ªjÂ=ÒãìûV8ÕÔ³ÈÞ£Õà kTÔZíd HņØú1äg•ûÃÒ½ßEðu¦X…X`¤nK°ôy8${(Qê t±E1,qF‘Æ£ ª0öÓhGmBó{³Ç`ðSèvÑØ ^k«[všTÚ§æ.Ê9ù²:7ǬOø40ëšU¯™ip~"÷nqƒ·®z^@ê}«QT•#»Œ7™i0b¸ä©á¸÷þUŸ£lÒõ+ý*P>ÏþºÔlnÀzGÑj%4ÑQn,ð˜´å‚¿7Bj` Ð~•ê~.ðJ0’þÅvŒe”»õõ_~«î>ïžIlñJc•v¸ê?ÏZñ«Ñœ%®Ç£J¬f¼ÊÉæAçÚ¯6l¨œ:àç¾¥2[›m*Õ®.]OÝ/ßü~ñùòºç‰]‹¶r#ëÜüäF=ÎOB{ùnž*¾#w²<¬v&u_±£ógs7‰låŒÚßE¾TPÛ£u ÿxOåÅS†ÞkèÄö—QO <àí1ß.{ç¡þYÈÏ–­ÕÕìË·1DpŠ2y>¬z±÷9ü«Õ|).Ÿ¥éRÕo­á…[2B[çFVÈÂõlŒŒò1Öºå*“‹šÒ'4c´¤ï#Ñü;¨™4h#iä˜"3Ê3½¸È9ç=óëšÜt‚^ÿÌÄ‹¹Ë<°={W…kÿ¤ÜÖÞ´û$Ÿô‹…#s¼¨ï×w^ÕÀjš¶©©Ê%Ô¯çºrw2RÁ}€Èå|Ëaögøv`/_ö6ƺé'\ð¶£§ªî–XIˆg‘~dü7šò¦ÛËí1˜”–1q<¤+c܆_ûæªQ2GªÑA¢¨€¨/m"¿°¹²˜‘ÄM ã®ÖÐÔôÙ$Hãg‘•FK1ÀÏðòéÞ$ºÓ.–ò¡ãëûØÉ8ϰó+ÒëË|Qwi§üA}KN¹†x Ñܳ¾A'Ô·L±N3÷¿ è¤×uÛùÖ+h,ìbد+´É4±‚>\Œ1 ÏLç4Ga³¯'<`sšÄ¿ñv‰§ƒæ_$®?‚œŸlŽú‘\Æ –zmÁ“ÄzëjWHåE¤{Z(¤+1@Ä0VºvgË~£ƒ–~ éÚ1Qa¦ÙK2 F¸x rÌà*Œ…f`ç…@?ˆáˆëÛ\×uŒéš/Ù¡’CÚ5Ø„óS9/9äW{§kQl5ĺ—Ú£–ùU@„G" L1`Xd‚7J篜©ÿëzÕŽ[È@X.S¾É ÿ*|šŽ¢ÑyRËæÆxÁÃqøÒv{£«©JÑRӱƴ0K!P%Hnþÿ–àjKTŠÙ•Ö‹÷ ý:V¼–0ŸœÀÁÁê¼ÿCP40»æ'a“üëz_]¡-nfIx·WsÛÎ8à¦Oþ·LþJ%ðŸÛ¦·ŠK?í;q*HðBÇs¨`Jå2˸qœ‚xq´Hî ´—Asæ(Ëdû:ŽKMXÌ˶¸@~òHþ çùÓP[µ±ËRªwTå£ÜÐñ¥Óõ§kytÛ‘çÛ3†BªOCãæ^˜Îq‚pN*·²·Ö&ÀQºI?¼z/õôëíT|A¯kšO‡mV[h?³í.üÉOß™QÆÜ)ÎîÁ*9-Ž@Ít6Zd•¦Þ Wàà‚1ÁN+ª1WŠÜºj9{òÛñó0.m+ˆ‹±CŸ”m=°G¸ÅléúÊF,0à‰€ÇL)ó­mŽS…8û¤ŽG\çóª·vúq+%ܼiË#ÇËG ïÖ±…V´5­ÕÕîfÞjö±n슌Üò<®3Ðà™Ï¶ gZ둥ђo2B«µFÐF{Æ=†*­Üd\Í’yŽ·3î'©'¹>½ê¯”½óõ­ªK›ÝègB„cï=Y£sª©ºymÃy-´œ6ÖÈ=8>‡ž§èvôÿ¤è†{ÈN«p·Ôª²‘ïòœŽ•ÊG >ì tõ¥hgÓE»@@'Ê[qP1»n9æ_~8êkl%iÓ÷`ÉÄQ¿¼ž¬î/µ/°Â<–qFH$4ÎÄŽÄ  cêqÒ™ ÍxîÈD€!Ã?QÇà3øœ“çW¨”w.sÏriÐÝ\G6øüÈÈé$mÈü««ç^<²‘¨Jów=I`7DHÁÁÆF3Ï^9ªÒZ‚6:üÛs¹@üH°´fIìd–ì˜Ä$nÆðrwÈǧÌ*…÷ˆïá_Éî‚ÒÛ3•p;®—^þ¸Æ¶IóÞáO »5b«h–r†'£ü«*}¼Á#‚+’\Iƒ·±ç5ÙO"H¥”åðã‘Y»•cÝ#”ùºãïñÓ§=¾™+ŠPœ_îîßc¦Q‹6Ç>Þf|%ÞÅôx÷~ åH|3x# ²DrqÉÇò¾·;(ÍÙqØÂ3ùnö54sÛ³4h첻˓‚åÏàk§ ÊþÕ_"SMnr £ÝÁ,fáV8<Å u`<œžžÕX^=¶±uòùq<ÌÊ€î Èúc5ÞÅNdG,ïÁX‚òï\qšÂñÕ½„BÑö²ÀŽr|¼ùõÿëwÉ]7WØ$õêkEºrç{ê:LšŽ–%òüûV\+ŽDXçîò~œŸ¨åχ™[ pDd÷LŸçUí5[‹FÍµÓÆÄcär2=+\x¶üÂRe†RŒ`2þ#üs]¶œU“=$¨U÷šL¿lФ9â1€OSïZ¶ºž©h÷÷ÓÜD¾c"ˆeE  ÅNNw¾•ÊÙØk¾&¹2YÙÍ2ƒ€àmAí¸ñŸlײi´ÓôëxLQµÔ1*¼  ÌÀÌ;ŒòkÇÌq_WIEûÏÐçÆb"áìâÏ-Ô°¤šÙ%UËc¹.«´í'ÕÂÝFSR¹ÁÎ%oç^‚Ámãç“’8®TdMNä±y­ßÞºèIêF).]6àdÖÕ³â!ž+Ö&œ‚AH‡r9jÜiQŒ= 9½L žå¨œ§UÂÃ5¥j±»mU „½¾jÊU;CdpFy«ö+ˆ‰ÞT ç¾9ô¬¥{XÞ;Üó¯G·XSÿL—ŸÎ¹^†»/ˆªk1€Á¿uÊx8cÍq§Åz¸á#‡üV!¤¥"’¬“®ø{ÿ#ÿõêßúW¥×šü<ÇöüøÿŸVÿÐ’½*®;-Š(¦ ¢Š(¢Š(ºðËcD´±›‡ÝŒüî3ù§qKIÿ­ÏýuoçW|2ØÑ-ìfáÆ7c?#{ŒþGéÜRÒä+sÿ][ùÒÝ[«Qmþ¬QLEƒÒ±õoõ-ô­ƒÒ±õoõ-ô WÃ_ò3Oÿ\Ïò5ÕX.Ûh×nÜAÆÜc†í…Çä>ƒ¥r¾ÿ‘šúæ‘®ªÁvÛF»vâ†6ã7l.?!ô) /4øoöyÏr»3"êHzúìažë#J·KTñ1´Œ‹tpe•¤oø÷ˆòÌI?‰®†°ìÿÖx“þ¾ÿöÚò}Jê]&ê9,æû<å¬ŠÛÆÁ÷®kPi®ÈŸT¾¸½Ÿ9c|«ŸAØ{ šîY¯ì~Þc)Ž>~¥GðÐýjÇÚtåÒ£K›g–V'œ0õ?r»À¸Yï¹·‹:ÆåTpžõÛeòð²1ÜxöyÍŸ’iȉž&šFçêrGý­¬ƒÖ¶ÌÞ·Psø 9§ÏÍÉ÷5¼45Yo£Žä[º°i„`ðOJôG~'¶W»¶ûbY•¾Fì§5ãïâ;ù¥kÛ§Ï*Ø@Þá‰cÿŽÑ/‹5="ÊM[A³k9 ÆË¹Îh·§’r ©ëÇ85Ï•Ãê?4‹MF;kXd»‹~%NÐO”[ô„×aýµõ´SÂé5¤ëòH§#è}==ˆõ¬Ó¾¨¶š'–‘[åù™H<ã?S\•ÕÙ·{]EÆú|ÿfœw16ßЫê¤f Î`ÞÞõÇøžöiõx–XÄòér™£S–WTbŽ}Ôæìî+ßC¯]Ð30ù¡bXžéßñëüº×ŒøëYÑ./šOJ²².®‰ÿB‡¾Cs÷S äž9æk‡ÎXg?(öèy<”vz¯ˆeŠK²Él™[¡BƒÔ"Ôý3IÅ6͆£â–ášËÍ»¼éöéÆÒ½?ÕÆ8ŒqÇ¥PÓl ¸œ½íÉ [/rG|yúþµëúÂ5»ÒÆt"brÀôËuSèqc\•ïƒåÓ5Imn]÷!ã+µ‡±3ô$ š©VT¥ÏSPTœ½ØèÌø×KÒ¬ŒæevQÐ}æ>€æoo濟ÌàtUz µâû> Ö™„@g>¤üˆ¬œ×EltñIiÇ=<$iMÉêÇ1Áâšw94ÖÉê:ÑŒzg=r—K"9#”—Î$ŒŽG¸=ý}«Ô~È‹µóÿ0çoü‹y08œ~êò“$³K &9¥hÊ£.r gž nÝÅ$ìî#Ù§¸†ÖšâXá‰9g‘‚ªýI®WUø“áÝ7)ò^Ê6Û®TÀŽLׇÞê·—Î$¼¼žá”`4ò— }I¬¹õ83qô^Z˜(žî5ÏëÚp¼Ò ±°³!I]Œ®r̤Œdˆs×Þ¤ºM¼“'Šuùu;˜ßpŽ Ž ;ãnÀ.UA"?ºÄ:ùñ¡.›˜¹™mîÁæŸx·ÝéÕ‰ú“V|3¤?ˆuØ ›/n‡ÌŸ= Žß‰Àúdö©•EJ''c¼—]žóNŸOðæ‡*éΦ4ixÌl¬$œW|î<„8Áæ¼Kuâ2ÖÒÚãP¼£ÅËÚ«‡*ü„QÎxAÍzŸ–±4®Ä")fnÀ§úןy_ÚúΩr’§ä¶ÇàüÍFSÄÔ²Û©­jp£M·¹ÃGgq$öñM) )+Œ)ÁÇú Õ˜4wªH˜lýAúbºÓRþîiˆÂ ,CoO¨üsøšÞ…ìã\7` K+gê'ó5ô)BšM«¦xUªÎm¤ì×s˜¶ÐYIØ>讃MÒÔ±(™XÕ·ÇŒ=zŸÿ]Kþ•É^‰Õ|ÈÀ~9ˆŒgñõúñMµñd±¨Y.¥ŒãºïNA5ÉW '+ÄÖ5l­#¤0”s½¿ÇáÁu´rImÌdaȹÿ Rù>L‚EE${œV±åZ¢~µYnîyÝׇ5hÛdî‹€<²“é€súb«.›¨0ÃZ<8^|ѰŸÏï^”ÓÎŽråÔÿ{ŸÖ•š9cU–@:nàœõ?†F8íéμìÛûBv³Gi²Ž+{…_"úÑÈ[ŽÓð «`œ O³ÛH¹yæC*²ÆòÙÈÎê§9ëǹë]´¯Œ¤ð«à‡NŸ¨¤[YU€'Ü8g°#aYJMô9åWó6p×:wÙÚ6 ƒ³N¼gw«þÓ®!Ô’þUÛ hørÅ‘cÛæ<óÓòìBZ»)y¥ëÌfâ^Þ¸ïN¶ÆXÊO‚¼„ãû9÷<ñÖ°©+EÛsJi6Š…äevù”(äã¿ãøÕXÜÍÏ»“•Sèû¿—?ð![w ¥HvŒó×7çøÖ0²’ÝÛÈ’"ŽrÏò}sÏçåa©NœÜ¤zn¬w¹7LsÎ}¿ ŠXâ‘ ™YT¶[Üò8{gíYÜÌú,‹ƒÕOõôüê”òI4­´tàqÆ»Úh©b!Ë 6µ,,°£»>HRÌFI' ò‘ƒÉïÞ²uØ./e³îeŒ/~Ï­]ŠÉc¸Y naÐÕ­ QºÀ†=yíëQËsSQ8œ§4ÕÏ-¹³xRT*IÈôaê=G¸¦GÓÊ"Œ¾3ƒŒð+ÔŽ“vÑŠÕ0ùÎÎ?Ï}-‹3 ßÝfüÖňPT`m85„a¦£nç)‘ ’»gæ*?úÔ .Ö6ÈÃèò.µÔ^Û¥½Ë˜ìš—sE.öÁüü+*=bHcuŽ[b'§˜¿M¸j×–û²njh:»‘|»G‰;f{v žß1~Yük~j~.‰´n¢°‚à|Òù‰3.Ó¸|Š}WxJw…¼1wâKT›íkyo –`8Îá¸÷öü«¾¶°³ðE©×µËèá²³ÆùŠîùUAÏ,: ÓÙÆ+b\›gžÝ[Gd„Ýß;ʧmíIýd`kgMÓNµ,ojò4 ¸$÷äœwÀÛ5ÓkVþðÜk.§9{°2‘ÀÊãéÓu8æÏŠ/õ«—µÓÑ´ë9ÎÖ†ØÒvùØ`‘ÉàqÏ Õh¶#VÏBÔñê¾$ø«uiYصxúž•£’G-çg±ËÍ<³929<ôíMœWš’÷J¿;œ¶Ô·”.xé^¿à=iš$w‚·X•ÿÜþéÓ-ëócµy׆ô«ëPÁ"ƒþò`z¿ÇLçµ{1™’Ï Ù,Ä禹ê'(Ù½×sÆȉãÑâÇ™0O1‰Æ8Û±ú¯k=¥ºÛÙÄAo)¤T IexœŽsùåf…µûé.î›i¸bì£øW¦è{ ÜRRÑm“1BÊ)ô[»w95õynS8QšWÕ½Ï ˜AÔiën†„wñ)w\¢““æ)Q×<äcéV`–ÓP`bX¦åÕUÀÏæ+v§%OÕ-NÀO ·6Ñ•¸ˆ)Ú bP[ûŒç>ƒñCƒötÜ髵òûŽ,6%TŸ%Gdûêv/mm.±Ï*2Ö®Ä[pUTÝŸJä|/¦ÝG¯rÒ/šÀ$lNŽãëœÀ}ë§ftÛU¸bžôýGë_%Vµi®Y¶ì{Ñ¡Fœ¹©¤®>É;'ÌÃ, wÇ—OÃñ­+k½TX­œ-¶ì€·iϯ\{{ÕXCÈÝZP­÷°j视N r½ÙÏR»RqBÖ¤’',Œ8˜Žûo\Â$„gi¹àþUÛêO†ìw Ëæž£ýúå§lL@9ãµ] $*§ÌôNÄÕÄʲÝ\Ë•ˆS·qjXæs€@ö¦+DÇ®Y¶±8Ö}Ã$Re3ÇNk Ôž8É]teÓ’¬Ô¢ìú¡òL9Ýž¤žµFkH.I„’OlT\& ëREt¾rÉóÞ¸»ª"É2árA¸õ­ˆÇ"à]¸˜Æ*¼jŒ»ƒg’yížÕ=º<÷#,äg¨“M§k¶+¤6x–dt`G¡¬›á5¼19”î¡zqÖ·žÊUr¢XI¬ßüMRš2b×k(éÆˆÕÒÉ™òBR¹‰ssØe a½¾•[ëÐU›˜Dn Œn늨Ê[*?:‡«7µgt.sÕ€ øëP¢€NOÞµ-4{½IQm£Äjp]›Œõ$þ=¾µ¬ºu¦:¥¼áäŒâ[‚¿q½ÐóÉýje+]Ñi ^ΊÅjÙæSŠÐ¾ðí­ˆº„¬û@Þˆ§pÏCŽõ~MOýÏËòªy,yNŸŽk Óï×M·ó¯™!UŒùŒÍÉäŸO¯åY§ïj7¶‡žiè\°ëž*ËK;L ™ïYÒ:Þ]ÈmTÇ ÈÍcî.Nà1Z¢Ê)QQÐ62Fj%}X);hRд¶·»ñ Þ“zŽ‚¿k)8g ÂWVÜ€¥I’N1ŠÔ³ñ=­Ý³%éû<ƒ+¸‡ú`qøšÒð储ê+{jˆ³C÷I\õø‚EsSXC¯øŸ^·Ñ­¦µWaÞå6d0 0û@ÏÊïZò¦Eì4ÚÝË™¶y ó½AúUÍ+M’[¤–TÛó†Mt~ÑeÓ,äŠrdglàµ~Ÿãô« ,“,« b~R¾˜è/Ö±tÒw5UV*K2Æ˜ØÆŒ!x¥`‘ƒ#·cä*1Ö{–'f›;æŸû‰¢F’á¶ì{qìh¼•†ËÉ 8”àŠ‚[}Ž<…ÏCVlX“×9éRlܸô­!«”­ʈØe×…=Iö§Cg`ZîãhÎ<¨T—$ž[ ùKQé[bÛÿꎡˆ?áYÏ/!Áõâ­›‚£!usWmŒäÛÕ&“v­a,.HE“8Î;ëùW5¤™ ¬Ž œƒ[zQC¤M3°k8òNHÆ?ÔV—14RÄXd6W×5«ŠqԘɧ£1î¬Ôº}@ïSøvâ{¸® ßî%Øep^ØúÕ<×-÷Œ_jÂD2ß]µ.'%8ì ûs\“ãc¦3JÒ/µëΠpÁÀsŸo¹­~Êê!• “nXÛ +Æ@Åv2ÞºêQAæ#+AæaÊøëéÓõúUOJfÓe\(\‚~Aÿ>¦¦7O•n¯ãÎ1ò¯·±¯> «4 º•ê7uÍ9-1Ë|Ýù§F`'ŒçéS†8À#§‚Ü–aø•R;\}â:úƒŸéX:xˆÚ:ȼ™Iç#øV¶K r_½#ÊafQŒ)àÕfFräg²Š[YšYòÑoN鵄µ5¼Af5Ï ÛÊêñ8!»9®N °o˜Ší$¹k¨ÒÒ5ƒ–9ü‡ùô¨Š*Ü2út®lDå boAFN̹àýRãÂ×ÈUƒDØ ŸOCíþ~×ÅBßSø1­\@Üo¹sÊŸ>:á"²šuc8v©8ü«ºø|5;}V(d†_²²±Þxm8ñxzò—»4:ÔÒÕ¿Ä?ÞéR,²oº„¹1\±%ˆ<•cëßó#©ÎÚZ=™…™C} WÚ—õç®kÞ®õm:÷Ox®íÝ‘”åÊýG#ÔW˜êzóË8µž%·ÎQä$í(ö÷­~e±–’ר‘L¶ö"òúKqi>lÈ88Ú0N}»úRYj¾ ‚çVº˜èþ³Bä²ÊùÈ ŽsQ‘žj¯„žûUŠëY¸óì­Ïü{À›ý|rqžž˜­={Bÿ„‹S¶K­ASH¶âßO¶CF?Þ9Éõb?*R©Nœž¯b5Ø¥â Ý?ÄZ}Ì~‘í"{PY䑆 ž…ŽHÈÊàžsÉ5Ãè –âébû9žè61òÆGf>¾Ãô¯Q¼Óí,ôñgo5­Ž’Ê¢H"bÒJÁ‰q×ñí]…©øwK·† H°î>T@ õª©Îz°qob |>·°òîo€–à•~‚»y^ >ÊYÜmŠ.Ø€ÍP‹ÄV.ÛJÍ»(þ„Õ-w[Ó¦Ó¼Ÿ5Z9+ù€¨Üœt8?…\§t(®ˆå|O¿ðˆ>¡pÅnÚàLTä,HdõÀÜïšã-“í#iQ"0Ã!íô?âøt¾7× ½³ŠÂÊtšÚ"Y‘÷ p28ÇR}ñé\ÿ‡57MÕ"’õd‡pÀúg?¥dµ‘¢‹KS£Ñ4ëK1²þ3\bm¼.½×_êqY>1½³Òçû=¼‹,òÑ„äé¸ûpÈ5Òê~9Ð$´–;-2æá±…,j?Hü«ÏÙRèïhTrè>•j«Z#…6ß¼QŠÙ®m¤Š\ì‘J·â+Ïu‹6ä«‚8 ØÿŸJõe Ž˜#µS¿²Žé VÜ0Êà ãÛò®l=I)4tV‚åMH·¦KµÈÝ?‰®£PðÍGp¯ c )ãò5‡ýŒ¼•”ãÝúõÛ‰œ® Œê*#S•ºH§"C½â¬ÅOâ+Ô>_ÜÝøçPId/ìÇajóbä*€÷Åy—ötJpò’}†+Ô~[Ã/ÌjAþÍpI9ÿ–±Uó\\¶<Ë^²¸¸ñN°ñÆÅôÀ·A÷Ïzê<5¡E¦ØÿiÜ¢½ËŒE»€÷ø«³i—·:þ¢« ÇÝIûÉ2 žÿ*¾žM£É¦NÃ÷,~œðë\Ø™IGCÙÉ)Sž!óî–‚%­¤’4²y»˜’QX~YÅJ·²,m(AÓ «ÚtrEìJ½AfQüØRËs¥é£ *]]c€¬6ôîz~Yú× ›G×^1 »¢J :ͼG@}ð3ÿ>•ƒâ³,šr,qÈÁœ´ŒÜôéÍ0êÞj1O¹ƒ–Á' ÏqéÁ©uMBseku¬«(dp§2ã?˜ ×ed”5«8ÆR¥mµôٴί5jÊ’øö©ï—Ìa)3}ãëZþÑäÔn!¶O—#tŒGÝ^çõñ­g.U©ó”×=š;icÒ~Ñ"%ÙÇ÷Bÿ2r?½V¼a¨ÿghÛ±5ÖPûqó×n¢%­¼PÆ€FŠvp?Jó]nýµŸ0ç†6ò¡\àõ?Ò¸èsU©äuNЈº4Ä^5¼èSu¼hÄ2qÇ}­Èã?ŽÛªn\žLnª­Þ•i§ClÆaç— HÃ3rqž:N¿^R·Œ %pqó‡µÚ[=rË"³~&¾û ‰¯JšJ.KîÔùLNY·Íf0[Hê\«P7;tQêI8©¯+[9&*±œá™OÞb?¹Ž„õ$œړXWžÒ+8½[¥SØ‚û™ONTþ9ª:u¥ÅÅÌ—M¸´‚´ƒ,Ìz±Ïãïɬ±•YÅÝr¥÷ŽŽ0’wæ·cpL>Z¯ÍŒ|ݽêű72¤ççßòÄçonž¤œwý(šÝmÑT£3Hàõê0xǵhXÃb0ÔŒ‚ªöÇÏu|ä×4õg¬¤ÔK–š^íÒ\¤ôQÁ_Óò©ØûW ­Ù­#{vt¸EÈ!^EeÁ̆OZô=¢·,vG+¿4ºšW` XŒsæ7÷ÝrWø?. uú‘)áë2:‰OþÏX/%”´ÈFû€ƒ¸~šÓÒR”¶¹8”ÛŠ[ØÌxvÙË -”‘ŒŒœçY²$…1´{µ_¹Ô–X8ãÆÇs1'#8Çáêi-Ú ¼ÁAþvúÖxÈN¼”i«Ø× Õ¹TÐÇx¿Î¿¥IJ­ÇëWî4ùQöYáOPŒ¹O¯5Z[y }’¡SŒç±ükÊ«‡­OâG¡N½9ìÉ ]¹m­Œg VŽ–íö©%P HÎÔÿõ«2˜ž{s[zd‹æK.Í…›n§nÜWÛIßcI¤Ö‚†v”§š­q±®]£Fä ß_óŠÑÅnDsJ2@Pr*¤0¼óìŒ4…Û çÛôª†º˜Â-;˜—¶Í°¾1zÍ©'·µz hút—is~±²¨óßÝ Èé×¥`<7¥\yWÛœæ,¥¾€Ÿ¯o©«³~m Ý_ÓŸÃof×pÁy)´¸VûÙéô=iñ[K$£exñèsíÇ·­f| {vÅ´ÝãÆC4«nôìzgò­G?´¨É#L¶Wçb0]ÇÙAëC¦¥Ô•#Îu/išZ…¶›í÷ÀüÆ2±Ÿösõ>¾â¹‹o\ñ$»'>L²È½XSøt¯H¼½økrò}ŸL¸g݆{x%@?éYQYZÉw$öí«¹1£òÀ{ž¿…Š:Ü.Ù…¦4§’B ˜Ž3Ø:é#‚+v!W=e‚›d»X2ù\7Ç>Ÿ‡ãVç ¸(±“ž˜ÿ? ®Êtâ’{œµ*I·Éâycwîúb±µ ^j^,Ò5>æ8o£qopg•–9mNâË…, Êôëœ nF D£±AäVÎÍ\Á]=Hço"àÅ)(ѶÓÔóÓµJ— $,²8g_¹ôÿ?Ê™¬xƒL“UÓ¬eãÕ.‘€ŒÂÛfØ ,.Ì€A9/ŒªB†eÊ÷俦IJ6)7 \‚áTãŸÊˆÖ2ƒ$nêjWA‚{v'ƒQ0R1“Þ¼æw¡¾^æãŸJå®õgÔ.Ú–ÕrS3Üž¸öÿ#£¸´Å ÎÆÆ:Ž+Ÿ²ÑåšÀIÖubä)íÇõÍTUÅ)X®–à/ËÇÒ¯é×qØ]F—ÜÛÌâ?0·ú²z1çîäó霎˜6,â¶kÞ8`*ž£sZÏ&Ü“ì9þ”ì¶"ïsª“@¹¼Áiü·V´„œüº~T˽#T‚Ý¡Á–ÑRBÏ㎇º×VÖðÙÁuù‘²‚FóÇNç§SQjGj‹›w78ÂŒô-íÚµöåѯ$í-O66o…$ŒƒÏdš¯-¤7(NAàc‘]^±m6­Úm¡r¤î ;IÁ# dãk‘¹±ž-¢d(Àr¹ ƒëÏÿ«Ò¼¬M%KmŽºsçW¸i¶âÞygU ¨¸<ôÎ@϶yüQyT»ÈË»©=jIoä´´u1f,Ovà3T ¼„Éæ¶qœ2…uQ©£ ŽòfÄZ\·,’L@^1Ú’[h-nZټѶc!÷rלgŸëW–å%Uu}è@ÚGéT›,Çw6àq‚=9«‹îI]õ SI¶’ Á¢$†‰³•_óÎx¬K‰Qà"¾âØlžŸã[w²ýÜ™~8$æ±°"”¨#ýåÅ[–a¶ê×ѬR1 ÈcžÝÿJël­ÒÛOcUUe € `F}ñŠæ,S̸XW€çi tæ»B€:qÀÅag)]%c"óëÖÒ]šÖ@F:|ÉŒþFªë?5„ìIã“Ó5røn×`@ß(´þ;ã¬ýMKXLW9Á >´åÍsZs´lhiEdÒl£Ë¯Ï8®ŠÒFYdŒ|ÛB㯽sº2±¶ ð \±NkkE渘|À„¯/^UedÑÝx¦kE»¨\vàâ­y˜~'ì)¡Ôñ·v&žím¡¶Gó¬#·g-â™ÝÃÎß›>ämÿͳS–™ç {U¯H£PXó¹ÃgÇôªö/û»ŽSù®šKݸ¦ìÎWÇD6™c¯êøWž>v ô_¡þljO;]yüëÎ¥.ƒ¹¯[ü?™Ã‹ø×¡Xgš_áíJ]›‚I€qÒºda¬øyÿ#Çýz·þ†•长ŸYʼ™ ž h¬M ·‰‹ž6–5Ô ÚºÇ=ÊG8²ýíƒßÈ}+r L.E£Èç‘0äôþHÀäöéÖ—-õ#›¡ øfödó®· >UaótëŠÜ‡@±¶I™%’býxúsZvpêK 3©•yeÏÌ®:Ôz˜Ù2ÆÜFpW‚:r;÷¢qŒu“3ŒäÞq4÷¨ÂIâ´0ÀBÔäÀ~œf¹x‹Qðÿ†µSEºž;¸ {nd!öuR6¸ äçxÀ®ªÆÖ;’ËrÙ$†`8È8è:öÍ&¿àøgXc/"÷Kcû€çQI>™¢Ê$†o·ê8䓺8ß×?ÄGnßÊ©YÇ.£w4ó31U3HäõçüH­©Ç¯Dyxì\štúËK.‹ÏÍþ2&ëˆ!$.â'Þ½;ÂúrÙYI;(Ý'!`žž¹úWœ×ž+·±Œ6#u2ŸîíÁ~~ øW´i?kš+8J#màp g°¹ë·& ·g E9>‡=â­atÍc,ÿ¹‘‘Éü³ø‘\Vƒl`IoX|ÑÇò?‰±‚>€†üE?Æ·_lñtö•x¬äh–rÃøŒ~²Ö‹¦iqÀ@’Bç$Ëyǧo˧»²úQ§%)msŸUÎ6E<ª…̹•Î79äúœ“þsL #‘ä™™FC’:tíÏò-U`Y¤Ic @Áãü``wxä ’×nb‰Z{ŒœùÎqŽxPsÓù~ RÄa.¦šõGËNnk8²«Dº”R†! ªdD9o,0Ïè{ÖüRm™J#¨äÿU`º©˜ùêXÆ»„C²ó€Ò°È\‚pIÉjÖì2®èݤ-‘Ï_aîzWÍæØªuª(Ò~êû›=\)S…ç¹ÓC,—ÝØŸ"ç<ž¤ûõëõ«6WsX—tØdc‘!L•0;~™ª¹Žˆ.ò-Ó'©8÷$š¹ `êÀ.G@FExУދ©Úâ¤mi·z¥Üò3•–¼—0FpÎÉ{ûB“Ét‘%?ÀËŒãÁèzýj½¶§ÂI`„/=‡oʪj·6÷>ʲFà®dÆ;089È?wõ®øÎŠr•Î *’”ltZ”…¼-g!P?xÇñŸ½q„̆i.$%|ÒžDl‘À?Sù×]w½¼§†wß¼©mÇ'—}ë…דBŠÅ“»ç¦?ϽE:Ðråé{üŽ—NIsu²Eq$·n 1‘âÿ'5h`cæ’öªqÌ»ÎÒ¥‰šYvF¬íèp+ÙMKàÑyt“_¬³!ÁŽG5râI<;3îõ9Áõ¨#†Do™qõv8<Â7°@2K€£©?•hõº{íª3P&rF;gÖ´Òå¡Ï”ÊÊß— ÿž•‡x¨ÛÇÝ=ªÎ\*ôëƒßÚ¾Y(¹´ö=ýyQe±-ÓŸº:/Ó½hYê—Z|s-´‰ßNÍʯ°Æ3œTVöR¬j­…Ç^huX™°'Ž}*Kb¬Ú2µ;¨ÂVà ’[%‰õ98äÖAð¶œÌŽã¡fbr+¤™˜¦ÑßùUy-Þ ‡óTÊŽúÿŸÆœêgR-ìcÇáÝ.&ùm#9îG5z:Æ6ZFŸî¨>ÓÔdÓÄ2ÀªœàŸQñ£I˜&Ñr+x‚îP¼Ž8íVV4cŒâ«ÚnÁ¹ñÇAZú\rƒ,lÇ‚APIÏaž#ŸÎ¹Ô¥ÊŽ—5ó2¤V³ÈCÄž¡Ûù¿f€,ß|­žÇÿÕƒZ%ðÙeçëQƲ«.GkNÊ÷9ßh2kÚ8ŽÒU‚þÞdº³™Á+Èr¤Žàò9Î+GG—P¹ÑôëRÁìî®-’Y"`ÒG¦Nä€yÁâ´L ½:}jÅÍõ¤,¯©]Ãl–£rO<Á@ÚIã®1ïY:ŠÚ*nú™w Cñõªø-ÀëíWͬ„”¬j:–=¿Ï®+'QÔm´÷ ù²}®~I-Y¿2zã•Uw7\f±b¼}.îKuoÝ1ãž0zgùsÖ¡:œ÷%rØÂü£ÿä×+½:LLÛK“‰#qߨõ† .šû…ô¶VF4‚Ee1îÜT‚Ç_Ç?•g[Þ‡¾‰ÝÑ£pí‘Ę?w¡ãŽxéYrê°M´}”ù˜À%°8©¡F¸ƒÍÜ7÷ö¡YÈV=ûan’Xä†U,Ò–áÑ€xäœö…RÔu> iÝ­dy£_—÷ÁL‰»Ž UÆkŒI%+¹‚AÛ“Á#Bk^òÿÚH_)"¡dUèËò¶2'nwuà ç5Óec7ÝÂ?lSÉ$E†Õ ʾ¿xŒêGf?}®Ø&¶ÚßÃwRGaÁÅr—+ p3Ф(Tù@®‘Þ°/o¥Œy3˜‘‹ÁG|€ èfïrì¬mkÉzZUP©œ…E¨àtôô¬m¹$ó­ûVYiïR6Ñ"& '\c¯áY9wYž~ͦI.@go”Ž£hÉúgS5üÉb&gÜÌG`t>•:é2- I‰ŒgŸsŒg'?B? »íÛ–¤בïÞ§rô"“PyˆÜ£ó¨¸gõ¿á«ìí-m$• ©$zJ»¥¹†ëC‰ñ­ÞŒÂãb¦ÖÌrÆGO¥Y¶Õ¤Õ_Îq¶R t­jöw6FÊhÇÉr¬®£0Aëßµpö±ÝËzb°2ûÅà õ=€®j‰Mr£H&µganÑ­Ú#Ë厹kI|]¥hs ýJg¶±‡&ILLásòŽê@àwô¬[0¤ÆY¦ó%lï~F}€ÇŠËø¡/ýM•ò@„§õ©Ô*éÓpÉ\ê^âòáŽØ%‰É 0ÇëéPÜ[K}q¾5Ü£71õöÍ>‚"y.gU…q÷ÎqÓßÓð«Ë¨Ú@¤K<(ÝÃ8JŠŠìÒ’º¹•o¤Ío"ý ðù#dÐS¯th£çUT`_¥]Kû{›Ÿ–òƒ¾oË×­A-ó³›i# :Ƥc%fÒiÝÚm²Í!G |ÊI ‘þ>Ôš„¦{x#gÙþ¹ñò§±÷öþU¨è Šin$òL€¬H$Çès×§N”È~Á Œqo–A+]²å½Ëp+?_a´¤ÎJêá-®"¸P¯:ÝÆÝ7?ª=ÒÜ“tQdvËôÀîx&´¦ÒÖ+Óp“`—ß´¨ÁÁã5¹iá‰."óZXߘÑzzg¹üÏZÆJ­K8ìkNTé§ÌE¦ÚG.ŸóZ¿œ0^fpçŒg' `tíZ6Ñi`f†ÉLãîG,xAÛüæ°ï5ý/O”ÚÏ©!d$ã ûqì â™©o*ã2)@H8ÎÓÓ¦ã] Otgí´{´Ý*þKÖ¶µµ ëûÁ,ŽFßħj}Õ†•g,–ª÷]‡&YˆTŒä€: É<jùº¼ƒ/#ŽÝNà‘ ?í7_Ã¥S··Žê;ˆÅÔ¥ YNݪw¹9=O^Ôü¬Mj³–ÎÈÅ}E-Ù#Ž ñoÊ›Ëiä®>NäŽIÇÔמîñ˜«Þ¸4«Çb²¨ÓzšvÔåºr*eÀç §=Ôiû¯9c“ŒBEEö©üó¬YRhÎA=Ï5w±¦‡wö˜-ü7¦O,eâYäÚ?8àzáüM'öÅÃÊËM˰³Àçù>¾…tÒ³|6±rıóÿzòíwűè¦Kh%º ­ úœ}=ºûWUŸ+1æ\Éy’C#bFʹ|V¶™¨,Rü’K…†pAHêG§=qß®k€²½½Ô¯# }z. ’‘ØD¶O*_ çðjµ{§Ïoj³^Ç®Y–DY¥J RFݤ!'œŸ[\Š)5èÌ=½wùÄ/[j ‹ep£ïFqùþ5Žgß4Äù•˜tsÓùôéœùãSI¸T»‘®íúä<ÇFê?•zíͦ§¥Ç¨YHZ 9BÌ2yÆ1Ø‚8'¦8¬e¬ãÈÞåÇ IK™"XÒ,Rfa¼.=óžÔÒªÏò†ÇaßôÇô¡[€qùÓÖ&˜ dÿŸÄW‘Üê³/çq8$䟯½ejQ˜ÌWr&7QÈÿëcò4·1ê¦Ó+˜ñœqSÛñ5´¼ºP–d;8 }yëMÆzFRmFH®“æEV Œ€y®ŠÂÚ4¹ÎF>½ê•žˆe¹Šáfvaó1#ŸSì=*½ÇŠmìõ;¨VÊò[8¶íºD-¼€øéµB Ϭá7¼Kœa´‰.le7¬é)q€êÇåŒÖŸö=”Py³n“p8PÄ)ç¯cùþTÈîí®î%·‚hä–&EW”©ç©Æjhö”ÚzqÍ£ZÈ^Æ2ø Š˜Â6— A-%2¨Á+´àõ˜•8â59๥8nA õ­éN-©Õ!$œI›æun¸>”àdŽp:SãÚöÙD‘€G]½›ü©pþ„äõ#55tyrƒ‹³ÞU˜´w4ÁvG=°iìÅ`8íɪ0'ßÚ©Å5f.fž…Óz rj¦­mkªéwuÔQÜ[]²+ £ž;ƒœsÛô‹=²jXŽãƒØWz œyàvR¬æùdrž¶Ÿ¤ÞiÚÌ šD‚ÞÒòHJÅq?wµ²F@ÐmÏ9ªù·3ÊÛ·œ’+»þÓµŽÓ/åHí/ˆ‹Íbq‡î7·mÏAÓ'¹;½>{-BkI@Ybb§9ã¦3ØöõÍqÊíBÅœ@ÄSªúUMC@·»Èᣘôtî}ÇzÒ·T†C½H=sV–-Ÿ˜Þ•›ƒD©¦r %·Í5ËípI\œR”Ø#®ØÓ¡®³WÊ]«•Œ.0+›˜Ä…Í *å6Æ4€í«ÔŠ©ý®à4@±¿„ŒóIô?(ü±VwªC+±à)<ŸÊ²ç·hس c‚ã5µì(ê>áþÙ ìw ghe>½}}«6ãN–êÙÉ@û,`mÎ2ÇãZvå>Ìy?)<ôª7Zƒ€ãäa¶1»9 Ç'9?à8£šMèVô ÔxXù±¯ž¸ì߈ýr+ºÒÖÝ”,È’>VÇ+ô=«ËK:O 4sÆ0¬£¨ëϯ¥tÚ·mIŸìR3°¼/ôÆJ~<ŽI¬æ­°#ÓM•¤Ñ“’ ¨p ÀôÁçñ‘qbá°–M"Ÿ*ƒùâˆ/®>Ƴˆã–ÈžÖe‘?Ýd’?Ï­P—Å6Ñ«8©RUê¿Ò³z”Š×¶1FøžÕ¡sÈ óqYÒ}š(ÙÉO•?ˆu¸¶\ì’«"°†x?—j]>!& ¬Jg!0N~¦¦MDµ›ÜÀ±«4È£À¿•Oý¾ ÇæHì ªsŸlâ’Þß{á£Uû€dÒ´pÚ¸hÂäðGÖ¡8ÞÝFâÒ¸ïÜ›fÚsºWP1É?ª¾ëFŒ»®AΦ)u#çjzz‚pd|c‘Äl¢óE"®ï4(ËzƒÇø×CÕ\"µBxsäÓ­H?p>Túî?Òº}(ªÏ#3\²Œ÷Oô®SÃA¥Ó˜îÚVGB1ì t:=Ù7¶ê mÞëÓƒÁÿ óñKFÎÚ/K 0\a¹$u\ΦwV´b­»#†Ï^{R©WÚ ÙäàqI~¡mÎÉnrx¯== –çŸ\†kÉÏReb=ù5fÉHf‡µP9}Ò6c“øÕ»?˜Hz¼]±V‚FOã1üLŒÞ¸Ü0CÝ÷ýkÌr dý+Ö5|ŸJIãyÀǸ®U‡hW>¸®Ü¬šó0ÅFíĀ硦Ž3[Ò[Y±?+/Ñ«*ò†m±*FA=k±»œª6:?‡Ÿò0\׫èI^—^ið÷?ðOŸùõoý +Òê–ĽŠ(¦ ¢Š(¢Š(ºðËcD´±›‡ÝŒüî3ù§qKJÿ­Ïýu5wÃ-ÐnÆncv3ò7¸Ïä~Å-+þB·?õÔÒÝ[«Qmþ¬QLEƒÒ±õoõ-ô­ƒÒ±õoõ-ô WÃ_ò3Oÿ\Ïò5ÕX.Ûh×nÜAÆÜc†í…Çä>ƒ¥r¾ÿ‘šúæ‘®ªÁvÛF»vâ†6ã7l.?!ô) žWhâwXÚFU$"c,}H>ä ÁÒ¥yÓÄRIo%»›£˜¥*YÑâë´‘ùèkÏýg‰?ëïÿm¡  IãI-ä…ÆQÁSÛŠ£c§GjF$ã/ŽGáM;X­½Üü«†Y3†> ÿž•£R:mOï?øR”båÌÖ¨Í6•“1¯4 :ûým.2D…y篾k—ŸÃ+£^3Û<‡ÍÈTzsœ…z?ØÐžFcíÅG.™g:…–øîIÏçNâåg!™£hUˆ 3…m§ñ£Ão,^+±ƒ{mÄ›“Шüv8#÷ëù×`èŠ2p1ÏÒ°¯õ¦´.ˆ«'\ž‡ÐŒzc¿zŠÞΒ擱0«R¬¬•Î>óÍ{‰fbÈò€®ëÒLzƒÆp;RGuqmaÄC2$óÇýzžûQººÏ/`ªëÖ’ÛX•HIcGÏCŠáxú2|ŒëúD¹‘R{•3ïšDG‚ïϧ¥RÕ~ÒÞœió$2ÜÊËf"_-0~P£ï@8ìO®k·“FƒQxRkM©´I½$#'Žÿ?…]ƒÃºm´±:[¯™; HÈž}€éÇø|‰dõŸ3géž¿¾²/sv!y~lʤ°äçÜç5<Íg ÛßÇ-Ú]MRÚ&¿¡=v€yí]÷ˆ4ÝV)žM5cÚä0AUÇ,æÏlÕÉÛü8‚î9VãQt¹DÚUSN>Rs˦3YÛ™k E[Tsšì—úœ’ÎÈ`>X€;w‡øÏ_Zë®!†)mÞ%%™×bâç¦jæ“J²Ó·Çk-Ä÷q’œ¡E.:œu >½ë/_šf»g¸i0sòþƒÈTT…ä¬Î˜b#d®ÏB¼m&Òéží4§?0xä» ËÓà}±ùVN³­C{ƒI†(c2óZÈ]œ€PÕqR·ïãÕFüOƺÈ @< aXË¥´×“¨I@À$`{ç#ðXxŠîi„qª[+¸Uá°3Ôõúô¬åvÁY-Ϋkc•yH?åšòOøV/Ûï¯$óšFH˨¬@üqÖ³%žíÙ¤1bK¨À?LÖœ1 \c-“Ðdž=søV3—$o%''bŲ´·!ä îÏ~§Ÿå]¶é$<‚¸¬Í.Ù‰YλïW5-Kìh€Ò°ùsÐ`qŸÐúªbÛßsXFÑÔê.â)ðîÅAĬHÿ¹¯šÝ%»¾šYK<®ä±nNs_@ë7s¿Áû[Ÿ0¬ÆRw'ýëŽ? ðhgK{æÉ T㞇œVí»•ÏAð´úo…ì~Ñ䥯§ åÜ|°@;Ÿ^•CÄ~&ÔõÛck$Ñ-¦Ð b7s¸ä’$’F3šÈgu cŒg*==©dRW#Žù¬yäžæœ©œÕÕ¹ ±—æíï^ðÿPŠßÃïm<ØÌd@Ùá6¨ã·''qWˆÒï!Jð¹=«Ô¼á=:÷HMBàΦ)€DÈØØ!°F2GÍë[E9#)IEšöW6÷sF#mñ³Nè3Òº„‚Ë*(îË~³Îm;YF‘ÛC9a± [>§ü[6ê`^È'¨ãüõ®*ú3®‹\·°ß'háò}j"±1çæîHÏSŸ~üÕ‚ 3ŸCPÞ\ZéVW÷«›k07&9w<,cêzûuÇZ懴œ”Q£qJìƒU¹^•%°gónT4Š “åƸþ9€‹“EpòÝMoݳn£ŸÌUŽ/¿0PX•9"8Tm:`Ö]毭ÝÜÇ­Ê¢E–i®#uPÂ6Q‰äwSž‹À¥îb–úù [+(RÚfØ®àT>ÙØ÷÷Z1Q\¨á“mÜÛÐ4¯ììó×{%¼=LcŽ3ïÎO¹ëWÑÐÄãøN?JŽÂÒêûN¹¼YVy\ù’£I·Ì|’ ãŒÀúr>%’}kYì:z¤"$,#d$g8Î8ÎÓî*gNöÕjiJm^Éè\‘¢ãæ#$‚:§çÞ™LŽŒ„ëš«-ߨ­.f¹Ý*²¢·$Ÿ™<~5^Û—ÑÄñ»¬¿yAe “ÉÎ:€:wü³qöRå4”½¤y‰Ñ‹Vk•lm;g“¡÷ÆG¿5±Æ…dF%\SÓ ò+"-%®J”•V<ãç$63ÔõükhYÄ‘‘»BgåÇøû×^º†çz\ûí’8ªL…[ùÖ‚wmÚp@9 ú_%\ä(÷¯MII\óœ\Y–@ÎZ‘#RÒH¨9-ž?!Wn¢‰-Øœ3è{Ö°õ?ÜÛíR䤒k“Z1\vuaéI¾~„óxz=B„¾+,g!69äŒÿúymŠ·„ÕãX#tL7R>½0N3Ѝ5ÈÌIæ-Äg bcÈæw¾§*Hî®t[­^3$ àí;Éõì­f?5GbMŘôÛÿ‰­¿]‹ÝiC»bå—.¤º¾¿ZÛ¸Õlmu k ®.®·c å±×Ø~5¼bšB±ÄÅà]R+¨›Ì±hƒeòÌN>…0O¨<ˆuÝ6kÏ6Ö9"C$‰æ1L’A c¿óôîu fÇL–(®žQ$Á™($”1“„SŽ¢›ªJfðåìЗ´‘:cø2¬?B)ò­Æ´ÐðkôžÍM¼±lnäu¡÷ãŠÍ¸…KSÔ°o^+³¸Ô!‹F—J¼Ž$¸’O1d J-–lºùr2ǚư°‚ä3#-ÁS‚Tô?JNJ*áËv2ÂÆF³î6B?v¾RƒƒîýsVþÏ""F¶ÊˆzóÛÔñþpjyšøÈ‹!%¾g~ˆ;“íӜֵ·Ú$Œ#œzœÖ§‡Ž÷pÛ´×·jóñ*üÇ¡KdwêC.îO Õ}Uü:v8BzrGOê*-ÌåY²NsßýzƒÄùz[ ˜l-õ#ü+Í‹ÔÝ-N$ýÞÜõjÈœ:‚Úz}Gz„ n¤·%K($qôî+·•˜¦®E« $ÈñëÜWäwýEwz¤di3’HwÇù⸷WÛÃ)õÓ…Ù‘ˆèdÝ8@Nßʱd¸—x®¢H ƒ¹ý+:MC"1<ŒŠîRV9M?‡£þ'óÿ׫èI^•\‚,×[Ù”ƒnÃ9ûË]õ\v3–áEUQEQEw^lh–ƒv3p㱟‘½Æ#ôî)i_ò¹ÿ®¦®øe±¢Z ØÍÃŒnÆ~F÷üÓ¸¥¥ÈVçþºšC;«oõbŠ-¿ÕŠ)ˆ°zV>­þ¥¾•°zV>­þ¥¾”ÊøkþFiÿë™þFº(æ–ÒÆ#Œ÷-åD¾T;¨Ãs‡(íŒÏAÛð×üŒÓÿ×3üt°ZÇq§}šdaÛÄŒªJ`ñÀR?!ô) «»=³C¢_ÊŠ1I­› :ƒ‰ºŠ¯¥J󧈤’ÞKw7G1JT²ÿ£Å×i#ò4x>íôëè!EH£Ô.F€ü –Ïýg‰?ëïÿm¡¦ض¶ÎÙ¦_›øPöúûÕ¢hÎhö©%+ œuÇãYf坿Û~È A ¿ÿ[<{ÿ$Õ®ƒ²XF_|¼¾Õ胯ôü3U™ËRÑŽ‹¸ñÓÞ°[JÅXÖʨ€ôÆxÛCÅÈ|./¤º„aÚo/ÌØ#`àíÈÎpGZÞyZ(ËI+£,傸àñY‹ªéº$SxŸZíí£Âù®Œæ8ÉÚ£ å›=8ÝíJ%RV[ åKVgø³Y¾Ò4X¡Ó[¹Ü,r`1T³`ŒtãŸZÄ…à9lØÜß^y÷…J– < ã®æIï^}âíé:ÎË–gŽFR²žI<Còþ¿Zö-3Só. ¤ff]Ç¿§ùô®gâU•íôm½²+Ã$¿'°\ªƒƒ‚FþO{ŠëHÔŠš2”%fgiº•–“¤ÜÝ –^•Ü[î¨P€í\¥u>µup¶‘Ÿ$æyÙ9 'Ø ŸÄžÃìtƒªiÑÜKrín@!@$ç¸Ï·?‘­9õ(4M¦é–,$ºFI®¦ÎòÁUãŽÿþº¸Á7p”º¦šßOÒôË]>ÑþÚñ‹=Çf$)x?ÞœŽÂæíîô`š¤h—O*2.víFzà—VšæKo´É#C¡qƒëVõ}v[íÂæ9â}¢5Ý8PýãÇ'V²Ž–H•¡Œmnö;‰Ê±ÜÆ’ºÊ}qùWµ|8ÍÄ3Þä˜ÞŽ÷PAÏ=É8ÿ€Šò=TéÚ –]‘˜¼õr¹c*à§×?>3gðnµ¦jp¼:,«8†Ün,­çrƒÕsØöïIo¨'øƒ#Oáò™‰Ç¸=GûÊ? ó™Y'hÜò§Ÿ­zÞ· ^kcíH#µ%ÐÝ€BÄûaýõí^;|ެ’2•Ýž çüóYaÞèrÔx`ão^¡ñüêÌVùÖ;wªÍtƒ?L2šÊ¯éö’jpÚE÷å` ž‹î}‡Sì+¥»£ÑÏôbjÍA$ÌQªò€rÇžO8ÉèGÓ¬Ö/“NÒ®n¥#1)ÂŽ2IÀLš·§ÙÛéöÚ¿º õl§IÀxóT_- Ú¡@ivó’F@϶k̾ªzK÷TÎ.îg¸™žF,ìrÌz“Þ¯ymߞ͔¸ýã:‚pO$vÎESŽ##ìxzÒãìn¤€Tá0èF+ÓJÈànìr›h.\ü“D¤…Ïñ`ðúÞôÛ{k‹Æ1CwüÄvÀÉ'ØžzqÍhFÑ9HeP $²¿€qù=+:kén[ÀÎé#bŒmB{p:ŸÖ„#OG´2ÊÈ¡$HÉPËÈÉÁb3ÙG§'k§òåAµY¥eŒŽ¼véþzf¬h:XiðÈ͉6;}O&´¡µ] …Z(A?¼9gØgö‡¥УªÛªé\òÃ;’Áþ|šç#šлɴŽ•Ðx”]Å¥fÌË21ƒ¹ÆÀÇ9Î?*ó÷Šæ4.±–)¹”€Hê¹ÇQ‘ǽz ÆçP·ÃeÉÎÒ98®ƒKµf·2ÝœìÛ“Æý>•†4K4›iʤŽÈ¬\ cœ~UÓ \m,ä(êr1ôúÔMÆÖHp§­Ùȹ!a•G$‚*S8‘G }+AÐ(%pä䯣’×í*¢Î;“ÉüEg¦³ÕhlêKŸƒ–kë!ÿѯ^#y Ý_êk „^dòÈbȘ㡜³wóôÆ1Žùü+šðÖ™Ÿ|º† R&ec þïPÄŽÝGÓ#ÖºiÇžVG=YòG™žNÖ׺DÂÖê)àFLr©Sù¯-õ×›”šUÏ+ü«éŸ²E,þK„c¸wSØÿœ×1ªØØÛkq[+[Eq2oªì rBõ?tþF´t¬õ1U®´ZžWá ÜêWa®ÏØ­žEù²¯sÓ¯ùÅ{ Hš~og§¢-”gníÛ·uÎG©<ç¿ÔÔòÕ[bÆ¥GcMtçmÉär@÷¥NPoF9ú£nÖéoÝc’æBWWE9ÁÈÁÆx­I h‡ÌA¡ÏZ[K â!áÔþuc[³Õ5æ‚ÂXØÙí—d›™A,sߟæk,U8NøW>~U±¯¼Ž>dÏ××>Øêk†ñ¤ÿÛ7ö¶p]F4kFy%%²Lp빩Èã ×i¦é÷¯¢µ”wÅ©ªViIBÙeÜ2A+•ÈäpGZáï4Ý_B¾¯¥²FÃ,È»­K#§å‰~FÃe‰ƒšÃG’7{›Õ݈í, ýòXEl™ C°*3óCnIôä8è1׃«ªÏú5¥»›&Ö6ËD1ºVpYÉÀêä21Ž™8½§C™¥ˆíîD—7æÈy’2~y™G9rv/\/psV&Žíæ“é:7͸r£o'NxÁôã¥ÏÙÅÊ×1öN«ä]J:<úe¥„BXîžæã>oœ Ál”à‘ïÐK)ï´û¦O>?4 ²L€7—€s‚8,Hû(¸½šûLŽ …•-·6Ĉȣ%AönIϯj¹®^vñ[ÇØU"5$g9õÆ?®k(B4é:²Õ¿;ÛÈÚõUOcª^›ù˜š™ŸU»áˆ…>fûÍØ~õÏ¥lé–’&‡w 8$ç‘…ÁÇæ Q²„CCò„õþu4Ì“[4*O˼ƒ¼þ¾=+–3”åvo(¨ÆÈÒ²ºb ²œ’ ­î–bÑ1`ƒtùFÑŸÇ5‘k,6²,“²æDÌkœ³Ü tó1×͸û‚ĺràAZ%ÔÁö)j-‘r—y’î$yi/–@Ç'×=¹¬é¼eÈX­§dæäúŸAô­‹ëUºµd™w’Ç^Ÿ™®òÖ[[™"Æì£ ý*Ôä¶e¨ÆKUvu:o‰"Ô.D7pcò¤)l’xŽ?>N=ªKÛ˕ܰØìÇü@ÍqúzNnã“É !<̧CÇooÒ®_x¯M´“Ëgk‰;–,¤z“ÇåšM9½u"üÝÐêÒçÌ·T€~cÏÌN1éÅW-#ɶ!þÈÉ#ÜþUÆÿÂ|ÀÈ,’}.3ÿ²Õ;âžò·Ú­e¶ü¨Pùˆ£Ôðä \aʬˆ”œÙkÅ÷𖑍izÏÛg}&ö{Ûf˜˜ãVl 0y¹Ç' :fº ŠXãÍŽX$PêÀ‚¬ÎAéŒU,®mõ4*)àœul2°=AÏñƒø×m¤èz5í­™¶³ÊÖØZ˜0È›çvOËõéÏ5-_m˧·ïlZð§Ù†™(µB¨'!³Ý¶®Ms·qjš×öž«ee«æ¯Øçk‚®‚8Ú»rÛ»Œƒ[þ*të­¨~ÔøQœ…àgšè*éß•2«F1›Œv8íSUÒî`±Õ×[}:õ­ @ +o‚T©S»•ŠÙûlíá¾¾€Ç?ØŒ³D;2FJتz´Bmú&û¯o"ŸÅH«ÓSçMRàßê7D*|ìßœÞNÅ6ÆYa›ÌŠB„Xvaè:³{a%̰L¼ ”`1‘šÎhÙ&aìç±÷¬¯vhÖ‡We õúŽxÉ˹;IÏdöûWU¢éa²‘K³ù’—Üý¸vè8®6Â[˜/%Õ$ òÊ£ž­Ž?•kEâkíˆhØŒ¸C’z™G©:³zøMic$ÈÑîAÒ}Õ˜öj¦‹®[k ååèuˆ¶KÝ}Gò«Qݾ³¤L‚6·” Üw/¡íÇøW='…êE3\–$ƒ¸HëÞ’µƒKjt­b¡™Š€3ÓßúÔ3Z¢ŒäŒzSÖÍìt©mḕ¥ B<¸«cƒÏaÇ;t®^?\ÇtmuH“ËVg‹ ) ãp÷ÁéŽüQËÔJæ¼¥à,§’§š?23nÓ“€q@¹†åBÆûˆ÷È#ÿÕKæù;bÁËs¸ôÞ‘±W¹Í]Ç%¶£n·)vÎzŸ‘¿®*À”\å8ýÑ1œpOz“Y*'·br<ݼzGóÅS ¼w6“½‡ä3úU!'f3²(µ¾pVMø<¥kèìL{×iV<`gÿž+#ÃJóTF 2z¤ŸéZúe.bNÇ wVóñ¯?µ‘ßEÞ(í"ùTg8 ãëY~"ÿ0ŒF \c¿'ü+Y$FÈ9ÜyàŽk Ä.¥"ÛÀÞG^8ýzó)îuAå{ûS¡LÈCHïßšXò85,$4˜>ž•轎h•uD'L¿<¢~¼xÊÊçk‘Í{-é ¦_Œ»1ô5âî>c]O´F'dL/nSþ[?âÙa5«…ûÊïŒVy }i úƒ]–G%ÙÞø/Rûf³,^^Ü[–Îìçæ_ozî«Í>ø¨'ÿ¯VÿÐÒ½.®*ȉ;°¢Š)ˆ(¢Š(¢Šî¼2ØÑ-ìfáÆ7c?#{ŒþGéÜRÒ¿ä+sÿ]M]ðËcD´±›‡ÝŒüî3ù§qKJÿ­Ïýu4†wVßêÅ[«S`ô¬}[ýK}+`ô¬}[ýK}(•ð×üŒÓÿ×3ülÞj £è?hŽòˆ Ž(ˆÚ ±* ü£'û£è:V7†¿äfŸþ¹ŸäkbûNþÐðû[ ÙÒ$GeÂÆÈK Œ.G< éIéw÷w÷ºv¡oj³G¼ßc "±;¾NIlŽÙ'"“J¸K¤ñѬŠtp%‰£oø÷ˆr¬ˆ£AŽKíFçYžîÂy%¶E±—ÌI'-ÆI'ÓŽ*[?õž$ÿ¯¿ý¶†›ØKs¡¤$KÔçæ¾øŸ& ¾MÕyóÆÆÛNxÇojߺñ|olé¡ÞF0ïúXÎj(®VO>ÁpÄ ´±‚ U rIÀ\íwüê”óyP¥ÒÝI[Šm•0Áø8ÀävÇZ˱ÔRÔ$k;”Øì$p™b§Ð’#¯úÖô6ñE*ΣtŠ9•ùb~µË R›æ–-Œ[­>êêy¨LöÐ)±1Áb1÷‡Ðt®Câ•ÕÆ¡àMBí§!„["BUóPr;žü×q®Ùßê(Î×M²©cäž¹?ýj¥àN5Ë[3#F𙕠O?…LæÕXÁh®ŽÊ4“£)nÕþE8¼3m'ÌPôëN8M¬Q¢ýÔsMµÕ¾Ó ¼P‰ºIpDh{ŽMj R).e7#ˆA`sÓ$žü äŽsøÓ:ü¯ßeŽ[ÉN}æÚN?*Ó¶¸ÓíÇ­#FÊÄwíZpEK² Ú³5§ÔX4ëXØs4ÇåOßʻéáÝÝjÏ>®!Õ|«DQÖ¼Cg,qÜ©S’áAÉô_Ç¿·Ö¹#~ÆYeŽ gyFÆq×ÓéL¸´šÒáÞêv¹p@Ã.ÀÄöŒŒ“z¹§%•Ω$‘9™ Û÷lzãšã«9ÎZ™¨¤iÙé“J«5ØV›ã?\ Õ{˜P3Hà <ö­õtH™T*™-Ž:ô¹ª6Úνq Ý)†Åò‡ïH{ŸZ‡GÚI(¥Ë¹SAÒŸW½’ø©"âÂsÁþµÔËáàà2\È’\õ}kV(#´c‰ TæEØ_8 ×5èSÁÓ„9^¤)º†ÊÌï]Í(Úª #çù×%ákx¦ÑôÛ]<®Kcˆb þèü”R„,˜Û¹³áOÚMxúÃZ¢:ƒj\ÿ3\÷µ5»6í§ùñÑ$Š»@cÓ§'¡öâ» gS}ÿ³d¶}Ï»kú¹íƒÎ_ÀWŸøªþ9H#I<ÒbN$ŸÄZÖRÙ!ÂÕ˜¶–Öº­ƒ´DDc9žNsÇoîú÷⻄oâ»é¼ƒFÅÔ+>æ?¼Œ‚Zäü?qm™¼Ù‰ÌÎë& N;w×½w¯©Ëw ‰<èü–fáSæ8çîã¯~´›å‘Ý=9Qr¿½ØÂþÀÔu^ÛJÄÃ#6$bçddýÕÉã8ç{W5ñ3NÒâ¶³“O(Eµx €¶g¨ažœ ö/ÆÓ\´–Ò‹{G‹„M¤«/A˜c>˜®6ÿãv£c©I iʹ(XÎÊF àc¾,SQKTΞÇÏëÒ»¿hòH—¡r¡ò3Ûq¨àŸv÷®êºµÎ –Pxz–Iiþ”Ã$œáâ»ÏøMõ"ð’8ÝϯzUªE+7kšR„›ºW8«‹È-tyn ’ª„¶=»}xí^3¨ÝK¨jÌçt“ÈXþ'¥{¾¿ñ’óDºKuÓ¡¸b»›÷¥vóëïúzÖ}ŸÇMRóyÐ….³³OLñÅF”cï'{—Z¤¤¹Z±ä±ÇåBˆ¨:æ¡”£q°«W»KñOÄif—qøoÍ…Ûj”‘˜ŸÀïùUdøÁ¯­/‡vÚ¦I]r{•ê=+¦ç1â(ÙAç=À\ÿJí<-áxn/£ºóíî"‰b" „fÎÔ`Ê9' ‘Àæ½þö©& Ägs…në-§Årš|,ò| ì1‘žI#š/ Xå®-æ>É" ¨Y·pqßœ5ÖxSÂ6öDR_Â’\JL» ¨AÇ õ9ã•Rˆº³Ì#›O†"A#÷…º~>⺭+TÔu=-o‹Efe c-3þ Ž泂8ó¼ 8T ?Çñ¬Ù´Í>SSYC.ÐÃÀÁ›9ê=ºÖË\ê+ÿ-á<ÿÏ&ÿâêªj·îHEÆ9òœ~_5l“µ’1|½Y«èñ<ý‚ ç~ÕÛ‘Ç8œú«š—ºΫ(‘§]>$IwëÎ;{d§sÐøËÇ7þ¶µ’[_´IrHDl ãÉçœôè=Ôѵ½gQÒ-®ï-ⱸ™K5»bƒ'9‘ƒÓŒâ—-Þˆ[}£š‹ÂÓˆB]Þ‡ÀÁhø/õ⦵ðͽ¤N©q+=d ãðWY5ƪðº‡Q¹HÊÆÁ†xÈùºÔRjú‚>ÖxCuÇ–ßüUc(%«5Nû3'Tµ™¼go4Mæ‰IdR Èg=«‡‚ÆHµ&½$‡ÝÑÔ1W žžØÕèÓÞ\^ùbgŒ„mÃjs‚:’}kÊüY­Å Kr7ï¸2¸ž¿1ˆÿa76׳v5¾ÒÐØ×þ!/‡¬^&‰$Ô]~@­ò©þñÏÓ~•Ëø;OºÔu |M«\¸°€LpX‘´·åòø˜®/KŠ}\YîÙL€³­{L¯Ùc_"8åU%vûϵJ’µ›1PŠ~êGû<Â9T†##Ðý)ñlžî(€Ùþët>•PJò§’ã(H#åä} I¤ÛÌúƒ,edTç#$öÀÇ9Á<öÆk:P¼Ó ¶ Íë—Hµ)$€œ"Ž„Ÿ×?‘¥1(ñl7QËHÁY•ºíÙ´¯ð3øŠ[Ë£c§Ë¨â!"6H›'®xÆXœcêk—:¬m#ÈÏ—%‹2õ?‡N¿…o^I%ÃFM¹ô:s&YbbHUgÆ>ŸfXøËSÒex&+sk’cór’"ãý¬†ƒ9>¾‰&¯¤Ü¤fúÚi$„’su÷<÷=«Ôî,Væ/ìS!ŽFS+º·’=69ÇqŽÜžØÂ|¯]ŽªæWF̗ɨëÌ’Yê2ÈŒ«,e¸ÁUE`2 «sòœ9­xubY Q+NåÔ`Åö8o]¦žmҹʧpFæ{ߌ°þÖyg¹‘üå ²1TÀ$zdqÔ‘Ï¡ãÄ©Iò\õ0´×/´*]êæêímbe»™Ç^‡ ?¯ãŠ»nUQB©lŽÇ4ýsÃö°[}«NFWVR˼•ÇÐóœó×׊£ÂKŽ0çZˆ¦•‹ÄF )Ez>Œ“Þ‹é²18Lñ‘Ðþ¤~5¯{jЙ.‘s"DTQœãô¤NVÝT«·ÐäçŸóë] °’I,¸9­"Ï>[êpšž¨úŠ$I¾÷¡JƒF¹OÕžÞä+Ã3lV#£àsʬj¯£)d ¾åçŒqþ•¨)YàDa¹¶àOãS}NÛEÓ²Øgõ1§ZÁokµ^ëvJ™T`t÷'¯û&¼õB”NB¸éµqÜõõê}{WEñD›[³`rÿeÚæ3cñ?*ç™IU™0†>SÓŽGëþq]4õ‰æ²6ôÎ}úÓk#†ÛƒÎæõúÕ˜nI2¡c$[7:‚S•mËèp¥sèÆ¢yG,ìK±ÜKw>µm 3¯ø{ªhúV¯u>¶Ò _³amÒîL}ÜvÜyíß׿Ôîî5KT‹ÁE­…ÐIfÝ›Ì@Ã;•·6±ÆÒ§v9âÑ@w`''«cŽ?¯§¿½oá•ïöl0 ˜æ>m¼Š„!%ØÎHÇ`6©9µrFgÚñ•$äŒÅÛEo«‰°ø¹¼À½ ~bO|1úäúTÊ £¾¼³ræzënž„ä±\ÄúS%–xgŠ$÷Ì%G'¨Ç¿¯áLiͪ˜¤öGšyð?ýGÿ­U¬¤º¹³] ‚F3ƒÔþ•$’Üò^¨ÄÔng¾œEöpì$Æg=†+!ìÂ,¡FÜÖºQlF¥#䤋ÎîÍŸåYÚÓ£ÚÇ3…ŽVl– Ô`þ>Ÿ­Z'ÈÅK¹a¡o9é“þEY“V¼¸1ˆ•Dn^¸Î^†¨ˆÖRïo\-jZ[¯î·d Ã×§êsJã{té#[Io£V¶p|²G)#zã€03€1Œõ¨o'xºdG¾jܯKÑ‘­© ²–&U ƒ‚>aÏNF3HÑŽI2¬çåÇ8þt¾!_’Üãí1cƒýñÿשnd@©À#²¶Áqú”6òNaTPáÈ8êßËÛÖ®"´:„— Çká_>¤ÿ“ù×;á©u-A2ܤÏ¥uay­áUÉr~eëÀÏrâ#»:ðòèn[£Æ$¶9ÁwÓé\þºÎj¥¸³õãšêS9Ú§ò<~þ•Éø…™õM½Aú“þäÒ^õŽöôedÉ ä3ý*DÜ[€¹äU0­ÉqéW,æF‘²P0k¶ç:ZŒº‹:}ñã˜ñž¼÷¯ ‘Ø9äõ¯y•Ùnâaƒ³ c¶ÿZ¼Uo1€ë¯¼Œ±_ f`)¢õÇi§9Æ*2¹í]Ö8®w î<ßÜ.1þˆÇÿJõ ò¯†i·Ä—õèßúWªÐEPEPEPuá–Æ‰h7c71»ùÜgò?Nâ–•ÿ![Ÿúêjï†[% ÝŒÜ8ÆìgäoqŸÈý;ŠZWü…n멤3º¶ÿV(¢ÛýX¢˜‹¥cêßê[é[¥cêßê[é@¯†¿äfŸþ¹Ÿäj߈×o„YYJÂÔN6ãïù²0¸Îxv*§†¿äfŸþ¹Ÿäkbþûû+ÃÍ(·Y_É‚$…†ÕfbT6Œ ž~Qô)1™êzF›ã[¼^ØÚÛIeüʈ­ fÆ9Á;Hü1W´«˜/ÄSÚÏð½ÑÛ$NN-âÇZ4$²Ô.tk‹K y5¹F±‹ËÕ‰+Ø‚=y⥳ÿYâOúûÿÛhiôÜòm;ÃòGc-ÔWogýË RιÀÎAûU/´jö÷óØyë+',Ç/×°9ã®? ¹m¯ÞÚ+[0ϳ#{QïÁ¨´]êÉÍÅìß5ÁùŽ; óêM+¶tFŸÂz]ãYÊœŸ˜Éük¬°Ñ‘•ÚRòÊ0Ì;~5›ipl•llg9­Ë]R)ñ¸…9ÅiJ¤Læ¥Ð’æÁ¯4ãr‚@1ã¸ú×3ã©î<ð÷QÕ49µõ·•åÎcW ´¨­ÃŽ•Û+)ZÃñ7…›Åþ¼ðûßfº*MÁÌÛ¶@ÿw#?wk­B7æêcí%ðô,ë -4;Ù"Žè$dãñ5 T0ÁzA‚>^ƒ€jíby´±[€ì9Ï  ÷Ö¶ûRiÐ7qœâ‹ÍÊÄ+²yŠWrõRGQ\éÐb–f¶[´WSœ½·Žßˆç¥a9ÎéE\Òœ þ'bþµ¡C©Ê»¤ ̸Ø@!±íøÖ ^¾ÓË}•â(ÝP ×vªT•˯GÇ4ŒdàãÔŒTÏ ùº’¦Öˆå­4T–þ@윈Ô|«þ5ÓÛ®J„Œ3qÞ¬Å×è*©EGD);„‹Óå&«Ëµ#òï,>PsŽ*î:S (Ùb0Oq×üñW%tEŠê~ÐHÉü*g‚IÀÕ ;@VåÖ8¤geT$“€½d×*.*Ç™üGÕ’ÖòÞ8¤ÜL-žxRsŽýjŸ„4€t%»ºib†Î,#+²1f$œ‚0 è} aøËV[ñ Çh%½¡;Ë!#‚0FxÇqZ³xšÛQð¢iöV¯°¸‘w°ÁÂí$úpúþ³¥}Í£Ú*ßê0%ôW) ¿”è±4Œ~d½É<œœõ®\Ë3¡µXÑøVg,°ãó­+XÅúÆí$›¶•Æ>îVÖÝçóÂ"ÉÆ*S]N¹Á'h–SE°—ÃÝ}ŸãY°;`þ5N-T·ŽEœ \©q“ë[0Ú=¿‡a³¹Êm q¸rıã¨ûظ«.ÛÛ‹‰[6±gbÿ6:ŸZç©VJV‰T œnÎFÎâXí¯b˜ ]ß1çÓòæ¹{’¯©ÎÅrz2“Àn™öº ¢óÉstĆðAØ3Çà2?Jæ-VIî0±ò>?BO 3õÅtݨݑ-ZGQà3¬KªÈ¬|¥1Ä÷ØOà¼À½«º¼-¬¤º‘¶F€±Çùü×_KÓc°µŽذE›¶{ŸlŸÊ¹ßêIªXÄN\–~ßAèzçðÅ/ÞÔÑ›/r;«{6§«Ku#fI['òÀ€~Ðèöry·$HŒFé%0‡pݵsžpqž«Ó¨ç#D³K­M%KA ênFzg¶yæ»Í:ËÍÓ"Q÷w²;yÎW»mçwÞ^˜ú°VVG=ÉEÓÞÑn¥ŠYnÊŒK$Œ<ÂÜ“Ÿ¾9äúUd³´XL–Ë%›c,8aõ9$v98#ƒïµ¨M¶ñJ±C[ ƒïchÆïöróÜóÉfûLV¦gýݯ–L‚7oÁîyfÏ9äzÕZäºUœ—7±Ú_6 r9GÈ1ÔvÉ9ïÓŒõ7÷³‚I:ÔÓìì¢7&êvȕߌ½y»‰$çœõªË3Æ`ˆ2™~EÛÉgw=v€Xû)¨’Öþ…¿ Ë×wRi‚öI¿vŠÎU#$AÉ,r{0®É|A4IqiÖñ[« ÑÆùm¤óµv€~kÂÚI¶¶k«…h¡(aŠ%\d|¤í‘ô5±¦xz{™>×u˜¡ éó?ÐvúŸþ½MÛ•‘¼!i›ÁVhÿw"¼Rd«)ÿ'ŽkmwO³˜Aoo¤q.ðG<ŽØàõÇQØäóúߌ¼óé~†7/–Óc1£d†'ûÝ=É=mx^8¬ôd’A˜ê«,ž¤pô0:Ø­ý¥•ŽWM7tKr—ƒ%樨^&ß ÊByÉêÜž/}cX•“©b3ùT‘r›/îš¶‹º%PÀÚ©TRºgÈÓÔ‰^Flxf’kQ:£È¸eÉÂñœÕ„B1\÷Œ¼]gá=0Í0ÝH¶·Ï.GR}w?…sÕI«Â÷2|iâkOØ,…–k¹Tùÿ6;gó<Qà’ OÅZœ—“&y¤ËHéÿ#íI¨j+×džêVžY_,Ý=¢^Åá¥Ót;’Ñ2λ& Œ’G_`ãSò/2þ#›Ò4híŒP¯ €ƒÉ=ÏçÚºøîmö…‘^6#ç!r õã'ÿ×Rß Yç&Ù<½›UÏ8,z>˜üÇ~¹l°²LÆHç8=øëÿÖ¥))=ASh½<–ªK½ñÛƒXÍeuYÚDg•}¤ΫIp­œ’1Ðç“ü…NšŒòÄ!Vwº‰’}1øʳ«-¹ ¨ÆËÞTÕ¯nì#µ–f’$˜HKüÌ :õ#æýV·d, ®sÍt:‡ïe‹÷ÖÒ,rƒ†##§µs÷H,æVB³rO {‘éRÛi6\ySj%•»0Hä!u#rOäõéZ©§‹›3=®ß, üÝÀëóÚ¢°½ÓÔGyh’¸ÝºC°l“ŽÙ^1ÓÒ´ôÝVÂHÄ6ù€ á$I'ŸR;úÿJÏÚJöå~¥8+^æG“ ´žHÙPK(l\r}Nÿþ¾]íV2…`w+‚=Á®Ç\±"Ì˶‘²©‚{7aÒ¹1øþ4]½Nì7"‹ÐŽ8Îöw%˜œ—c–?SÞ¶ôý~çM·ò!Š£$³+d“ÜàŽÜ~”8¥/Õi=ÊœãkW¾!ºº·1Çûänd''ŒŸCéY>|¨Œ©#¨nXëŒÿC»'ÚsíWc)I5k"Ôn툮vôàæ*³;µÇžÒ¹—víùä­&çóøÔ0Ëôô$Ìœ£Kiª_ªóµÂƒ’² Äûg®?õ=9P²[½¿ýuN]ÙVpTž¦ÔÓ¨äò07¨é‘Y˜[)›ÊžQ8vç1ÔôþU}/Rfp‹æð¥ˆÀQêO¯5Î_ʬÑ:H޹œäçqê9íÁ5-w<«’Ã%Ë^¼²žxgߦqéÉü+Yº/ FÀ 8Åk}ªF¶@_%¹~P?¿þ¼Ö5ضÔdc…YQá\täö c“ǯ©‹”»”íe 2'Ԛ؀³Æ?6}r s³M4- ±%.HÏ9È {ñÒ¬Eq".ÐÜŽ^ÿýz[k›Ë'™)—Ò¨bÒ’£$àg¶;Sí.D¨I;XsÅ96€Ì[ ?¯j™Jèq™Zx— Çh+Œpl*­sf$G}¤€0ƒ„=zŒun½[’rª6$FWxg¸ÍDdÓÐÕÁ5©‰2Ûý˜!_*xq¼çÿÈe<d}0I[MVêÂî6™pCð} UÔ#_´‚§ä$‚G±÷>ôÄ`)œ•ÈÜ:Ç¿oÌWTgÌŽIFÚ&­x/¬¬äˆü’]C÷°1—нsr!¹##Œþ•ËÛ¹û0†O¸·p`}_ùWKpQ‚€|à ô£Èަn˜L^&ºx,cÈ+œ1ãÔê+«~c-’(ˆo^süëµßŠ%vË$¶8é¹xÿ>•Õ¨%cO!wÚrp=F{ÿõÿçÄÆèéÃ;6t‘3FsÇÏk7(ú”“•FONsýk¤²%íã•”È>«¿"]RvÏ%ºõÍy4¾3¾_s˜äç?ÔUÑO8+UÇ#µR q¸þG¯µO`7]F¯Â’z} t»ÚÆJ×¹:¾lç‚ Ÿåí^'25¹=kÜ¥‰|›ŒH¥väŸóë^+q‰˜q“ÈÑ‚ošHÏð¦P1©=)RÙ9À`ÆàœQMudùqÒ½€é¾&•éÕæ¿KoN 8û3À’½*…Q@Q@Q@׆[% ÝŒÜ8ÆìgäoqŸÈý;ŠZWü…®ë©«¾lh–ƒv3p㱟‘½Æ#ôî)i_ò¹ÿ®¦ÎêÛýX¢‹oõbŠb,•«©o¥l•«©o¥r¾ÿ‘šúæ‘­›Í-µ=ìq¸‚Qá eÈÂñ‘Óè:V7†¿äfŸþ¹Ÿäkª°]¶Ñ®Ý¸‚!¸Ç Û È}JC3l,®íõ ½kY–Ò)<…ˆ\ùqƹbؤç§TZỦâ)ígŽx^èí’' §ñã­t5‡gþ³ÄŸõ÷ÿ¶ÐЕémÄVH.áx˜p¸?(þõ~þÓt`2U'#ð;T%¾&+ç°h!:ãã\þªï&yeØŠ¿)?ùükÈæö—:Òhé¯{S–^0 Î=½ê)5’Öí–ØØëš¯m¯YÝÏäI&3t?ÖšöPßÝ…n~gçükJIšßMN˾$7¶¢9ą̊H õëÇé]ï‰ô¯Z¶£«]}žÎ,o“ËgÆN êGjòy`{+´Ž&pÛ”€‡Þ®|L˜ÉðïR$äáÇüä&»iâ%u3ž¥ncÖ ¿´¹Ç•¢˜ZãŠEl_¶þdâDåÆ?ÏÒªßÛµì­&[ä9.I`yÇ_çžÿZÕӬѴ湚uŽ><µ#’Ý3î9¦³4z4²”°2¿OêAük9¤Ù¤/cÖŽÞc ]§¨°#¸ç?‡ÐV÷…4èþÙæ‹såUC7-’G—õúWðÝ¢Nnd™òÅ—QÆ3Ÿé]­´p­¾ô „ ¨Øã>ý3N0³¹Õˆšî鯃Ê °žÿ"±¼_¦Á¸º‡bíÀA^Oè?1]$(²Ê!·¿Ö¹¯N/®Å¬rŽ!ö60Ø#ñ5RZXQvÔã$¸Ž$+1QµŽx$úúçW´Ð±Ú‡f žmÝô¢m2Ö0e¸Æ3’@çØ{óÞ¹ïêKa¦Hð† £bs¹‰à‘ž+%†²’±?ˆµ£§xš©VÞè'< 0(ßFŠóÀÄgŒŒUr€’¹Î==Å7Â5§½Ï]¥ÆqX¾¿ký( d„ì'Ôv5µŒcŸÂ¹Ú³±ßs+’ ÜÁs×ô©ØàtŠ‚, ‘žjwã<ý*àa[r3Ö¢¸m±©Ôgüj•Ã[Ð mؘG™™Öwf’)`¼ãý“Ðþ?z°Úûÿ¢\nèÃùsÿÖª³DÞbº1IåYzƒW¢¾ŠxÖ+«DŽLÿÇÄ<)ä²ÿAù×<“½Ñ¤ámVÅuðÖ£hÊë"‡Æq6åý?•@Ú=ÂL.§ºGc“¿,ÎO¾E^šæÆ˜ï§3ò#¿š¥}yFsrÍüN<µüA«÷ö9­XÓv›‘‘©AÁI$}OÿXWH4K{”f…‡_º~¾½¿*äôµ–]öî?ݺ:ùa µ¶g®G§­’Jèõ§lÓ.ÚÂänÎ$ÆÇàkE´M>P·hvž œ±¼@×`¼ù6#È<’yä~›©=²É'ìòPu(zàUkndF—±Ò‰b”rÀŽ˜µaï¢Fh·±Ü»æÿëV2Ä»òµ©¼pÉ®dôÌ#TE勦½ÉgûÄ𠉪&}ò[åíWí®Êg¿…O¶W5T´þÎæ(Z™1•g^vývëÇNsÖ³mì]YŒeJgŒŸóþ}ø®‚=a‘YwpF=Ç¡ª³\ZZ8ýƒùvü+G8µ£3ä’èDm­íÕ²þk°ÇÊ ¯o\ù­g_]d ® öÏ~{þt–ƒ›h$ ûÕÙ´Å °‘p¹#ëÒœ Žq´¯,~Sݹ=»þŸJÚ*ÊÆwÔ´ÖR[éÒ8ÃKq¼Ÿá$c€Íl])6ÃéžkU‘^'ŠNœgzõý+§¸]>`ÊÊ0ª21Kîñ)U?gd8=÷…nÉja‘dˆ˜£NvçŒóü«¶6ëâµ/°ÛúÇ5ÔË{k$n¯"8 ¤Œðý?^pÄ;8}.tºS«ivn\œ[Çß;Áô®*âAöéŸ8ü볉•t¤òÜ ±*…#‚@úW +ì@±ÉÅy4´›g|¾B=úô­Ml|£ŽsŸÈÕìA&L`g§E,‚x÷c©ç§jêz­ VSoæ6òäî]¸=Ïùâ¼zäq Ú¼1í^³jà ‚–BybsùýMyuøoµL1Œ1ì=k\Ç"qŸ( è>‚”çxfäÿ´3Nƒ4ñÆs·=«Ó<ã¡ð!ν>@èÍдµèuçÞç^œñÿÍÓýå¯A  ¢Š(¢Š(¢Š(ºðËcD´±›‡ÝŒüî3ù§qKJÿµÏýu5wÃ-ÐnÆncv3ò7¸Ïä~Å-+þB×?õÔÒÝ[«Qmþ¬QLEƒÒ±õoõ-ô­ƒÒ±õoõ-ô WÃ_ò3Oÿ\Ïò5ÕX.Ûh×nÜAÆÜc†í…Çä>ƒ¥r¾ÿ‘šúæ‘®ªÁvÛF»vâ†6ã7l.?!ô) µXvëòê¸Bl•≕rÁO Pƶ§MiÕÕiÇsSÅ71 ŽÙyv ¶GE?Ì ¯¢êº…’†‚y6ƒ‘6TLv¬KÛ™^qq+6Ó±ý=? -õ@Ñ|‘Ëå·¶ñSF•HûÑœ-ÊÎìøúaÿD #v Ðzž+žñŒ®nåŠÑ"ŽD-('?‡Ó¯Ö³EÔ[0œúòMiØYiör KRÙqu6 I³xŒqƒÓŒg“øs]‘MüF‚Jé 5FÊÖkw%ºà{× iºó]Y‰#ÄŸ(ãœçПZ௵‹8 ±B2ù¿ÔzU9uÉâXÞÛtPï”1]Ê9ãŸoÇðªsqVFN<ÌôÉõlI…'¨&”ëP"ˆÜàãžGõ®EÖ¯µ‰Kp°@ï…S“œc‘Ÿ~ÜsPê¶¢=hD×›£’!ûÀv/9Êñí´õþ!QÎã¸ýšØêõo}ãŽÞÍ®sÿ¼ ·§·ùÅeÚø²I',!óa\ù„ŸÀ×5=Ȳu·e©cô>”ù$¾hžt´KxaË3,;‹ u9Î@öÿ ŽfÕÆ”&¹ãK›Ë³jÊb·SûÅÆI_éÓŸË*-F_HšUœÃiy²0b]Ç@¶yü½*å­¹¿š9o´ƒ-³`ï¾2Húu­ù×KÒ!ó!¶–ËÍ‘AE@C’@^ŸËôéUßVcÞ×ЊÚ`’hàeŽÞóË‹ @<“Éõýz¹«qm9Š[+‰út`çÿ[Ð×=¨x– 2+C§_ÄI×íŽL†5 íO›Ž˜ü¹ÓHñÅã[Äóùrɳ÷ƒË­ÓJTãÍhìtp™uIç¼ÙbˆìHI(÷Çó÷úS/`¶ž"’¦åñoˆòÂËFI ·µs+(ÈFÉ9e†â9Çvnëþ%6ò\-°ýü€eYUö¡Î\•'Œ;ŸBxµMøP ãdšëÃR”äDµ;o†zD·z÷öžÐRÓæŒ0OÝàŒqÉö;k×®#ÄB6fŽX uïÀ®EwÐ4xí Û Ý4€^C×Ðpôš·×÷Å•îf1HJîJ¨Á'¯N¬e)V“IèoB +js—ºÎï½ëþú5˜ù?0`'icŒõ>µÓé¾*°`Vc4D£z3¾Ûzu5OÃÏÆY-QòYq½²3žÆ9< Ž z®ðþÊ 5 ajf$î‘Ó¶}N[§aßШÒn) Ub™ÆGsáëÈÒK‹ØÈa„ˆ8F/ž¤g ÷Á?­mÃkoiʤÂnýÈRP…úäãŽ{ý+µ¾ðÔwñªL]ÙpÂC)ʰèA漣ƾMñ ®ˆÓ®§6é&µŠb|¸ð|Ò6!<Ç’xéŠÚܪֹΧÌû%´6ÉruRe¶²…G™ö¡T`.Knã{óÚ¸ŸøÆÙ.$¶Ò¦š×hÛ .gÉ  Ç”¸,rØv¢ä1äßUÔo¥6þd× ü·SJÆ(Xޱ©çpÉÓ» }Ð0XÙ‹Ywùj䟙»‘Ó°<ð‚³,¦ô&²Ò.õ‰PL¤Bì¶RÛq’OvÀ\žädœ×]¥øy´ì˜.#‚`“È8ëÉÇNzV†â‹ K?*m=Д˜˜1n1Ðàc^õ'öŽ‘vêÑ\²;ž"–&Î=7r)*©½Ãصº5,üWâ}:ÝŒÃN¼;IÚ VoBN@Ï0=ºÕ ¯j×ö?eÔô¹aŒÌÐís' Â“Ó9çû£ñ˜ÏoxÂ8ä…ä',ŽzsÇùêzóQ=«”*¨ðCóéüªÝG-Ìý›‰B-wMY'g†N¢)Ñ”Ÿ¯|U£-¥ÒH–³Ûß7–’Ï>¹8ÏQߥ4BFìgZËÕF±²y®­¢ÜFÐ6 ÎsœOóøÃ}Ðã~Œé5A¤x`ÇvâTfãŒç8Àþî'?^à×5›‹û¢Ò× òã?,kÙ@íÿ×úæ-CP++ü¸™‰+$ˆ9ã=ùü)tM*{ÛÅpŠøå·‚Aüˆ5­”uêMÛÓ¡Ã~–âUžHÎÁ–ï€OòßÄÑ**/¢Ö{«K1ØZ£$Ç;qÎ*@?S§Z§5⣨’ÂñIp˜üéšÍI½ÊÑlhàdž˜ïQî]ä‘ògê5kZm¢$wSNŽÝ<ØŒcèsÏùê(w¼†îä’woNN:w-+šSÞGq<(yH P1ÛúŸÊ­]lq)d‘Ø 29ØåO¿Lý+1-¤ þ­™ÈôúþU¡ÕÖ*Åñ÷y$ñÇÚ£©nÊ Œ±¸{›j¦Æ9Á­Ë³Öÿ&rJ·?…bKFxc€}*ÚFI†’L&Hõ¨ääknëGؼè£lK–T;@àãŽÜóøV‘6ävýkK9jŽxÔ§¤+Kã>™ªîdê@üÏ󭛈–â"zÈ"±¦µšþÝ–%ÚÊ3æg¿oÄT4šÐ¸JÏSFTÕèc­eé÷"å J6ÜÇÄ‹ýG·ò­EÆÏZàjÎÌôâÓWD3|¸‘L#jñS::ñLe$rj5)Øe /pôšºÚBÌ@BÈ}ºÕKiÍ…ÎÞ*3ø_µ%ºXÝ™XURzð9ükxFi{»žV"¥êXÄž ­ÙSðØàÕ´6îÄr0~k {±5±.£•Éç8µ îŸnt饃P›³Ðuüë¦v÷÷1çè`nÀê0}é°¬· …QŒýìŒu"–ÒW™ÚÙ·hÊíëqÓúãœÖ´è¥U@ ÀJèvZ±ÝìŒýB1o`bùBåK1pGå] Ãzà =ÇšÊ×cŽ=Fd&TÚDÏMÃŒ‡øÕÍPµ¼qK•;s‚8÷¨¡ë°–æSD£ÄÐ+ª1[$žÿ‡é[ãI‚lª “`îÁ{c;W3ç5׌-¡U@eV=ÁV#?nZKui;b`bsäÇi\Œúò8=ýXT¿6Œè§kjtV¡£Ðdûè¤e[®3ÏlW4HÈ+a&#Et`bÄ`rrÝ¥fù_.r­yp‡¿+Ò•£d‰Š^@ëì)`;¦E|c¿z±!#€AÅB¼øÙÎáÚµM%blïrý±Xe›¨Hç®xéþ{W—ê~ßqÎNóüëÔ6äÍÎ\'9¯1ÔüL.9ÿ–ÉúÖøz’3ůq€8éF8Œi0IãéžqÓxq®Mÿ^Íÿ¡-z pÿÌßõîßú×@ÐQE (¢Š(¢Šî¼2ØÑ-ìfáÆ7c?#{ŒþGéÜRÒÿä-sÿ]M]ðËcD´±›‡ÝŒüî3ù§qKKÿµÏýu4†wVßêÅ[«S`ô¬}[ýK}+`ô¬}[ýK}(•ð×üŒÓÿ×3üuV ¶Ú5Û·D1·á»aqù é\¯†¿äfŸþ¹Ÿäkª°]¶Ñ®Ý¸‚!¸Ç Û È}JC-VŸúÏ×ßþÛC[2ƳDñ1`®¥IF*p}äqÍ`éVéjž"†6‘‘nŽ ²´ÿñY‰'ñ4åÞŠÆÎÙßQ•"iÕî|†^¿Nߨõ¡¨i±Øÿ£Û™¥fÚ‹xÉïÏaQÁ¤ÛZêQ"–Ö8ÂîšMÌ:ç$/oÎ’k+»¥K#5«ÂX?Úœ&äÁèŸÝï\3¢å¥ŽÏh–¬ Ù¼qjÐ%¢2ívfÃŽƒÓ<×)©ZÚE#$e—õn^éQIh±Çz.^?»#Éô9ǽRCgÞ]ÄM!é½sÉöÁéU ;ަn¼[Ôɱ²û5Îr»³ÈÆzöíÍv á»éÐhƒRŽÚâûï2Äe0ìùúduÛŽ½ë`‚6óI!Aû ~jÿ‡¼]¥hž&¶¿Ô?дøf`ÎFä*>UõaV î®]YÒåµ2Í‚YE–œŒðxq'Ò©Þj6Âg«H§ŸÞ`œ~~µ’·Wr^ ˜yJUNý3VMÜ’\yVÖþJgivåœzg'齌.·¸ïí×—÷)j‘¡áp8ü«>KÂ×qÅ+0–O”lzvü+©OÇ%¹RÃ,3Ò¸=bÎêÎô4‹ òŸ*ŽÖr¿¥fÞä{FÝšÐï,4»E´G1«ÈÙù8#óôªz­œ@€ïÚ¸ã±ïPi^"´hUî$1¨@¹= <~t£Q²•¤—Ï ™,¸Éâ¹$§Ît+X½¡¶Ñdù2¶àGBÈ §y©Y$¬ñ}¦à–ð\Ž }28Î,é/¤ŠÙàˆŸ6I Æ?º¼ÇÛšÌt‘õ9lìí%–b2Ò:“&O;øázýOÝ\Ú³/2·Ûn,.C”C.ó¼€ ŽŸ®sßÒ­ê!¹Ôgóã‰C$B6Tï‚NyϯOaÍD¶PDe§2€>f-ÁàgŽ ¯h‹Ìq‚µ¥£µŠ”“:/ øÜXi—z}Ü~~rÖîP|’ÜÈÜsø~Xúlj^è%™žâ(íÑTr?y/$»·^28öúc.+u–y»eûz`T·7Ói[RÈEdeg1)wÉé»Î=ÇJÒ2ÖÌÍ»"¶¥ig¨=Ì Ÿ%Ùwª??6Ž:ç‘Z¾¿?hk4Xðà•b0T““Ï ãÞª¼×z¾^Y¼ÅŽ"åe$…ÀþØñƶ´í>c©Gu”±Ãšed ƒ#,@#'?ŽOÓ“OF(­nhk3G¥=¸³•e¹ÎåÚ€tç¿ëí\¶³­¬öÓyrÃ$—™y Q•yÚOMØçŸ§]Éšz\Ù\@ñÜMåϦ¬;=­«]®Ñ$£b<‚AìýGï é×3Êúm»4MzàI'?*€AÇn±©ÂÅ'b'vç®|=ÓÒ? i÷&#ûhÊ¡9‘¸‘ìI'Û8ì+®‘Ö8ÙÝ•A,Ìpõ®b {LðÖ™­Ûcˆl#RÌø  rN9ú{ò½wÆš÷ÄMQ´OZ áÈ-ÐÂ?¿+ýÙSõcy‡zV9nt~7ø½o§ÄöÚ,œ°ùn‚‚ÒŽŸ¹R1·?òÑ^Ðý¸{o kº†—u¬k—Øéo4r-«“ç\¹ nrIbpÌw6N c¸ðÏ€ôßÞ SZjzÁ!Úâà’¨Ã©Œ–#ûÇžæ¶o-޵¨Gö½ÞLs™ÒÜà…r:·¿¢ó€NzÖ5ªÆœžÃJìˆhš zRÙŤA»Qb„o±/ׯ$“žüÖe߀téÑ6­ .Nä‹0>»çòííìàĉµOðÉÇbO¯ùÍXvéËa#Ï ü+©Œ«Qû±ÐÚ/—fy”~·È:ƒDHýØxÏ,=Çl׿lU¯ê1Ƕo7ÍÃE'\õä€?#Þ½5íáº|,[ix`«`0ý?֨ܺ£bèŽÌcR2Ý€ÀíE:±šj~ëFʤ獵‘\èwð\˜e‰Ѱ 8Î;Ž?ˆt=ÅBŸm²qÜÜ@Ĉå îȯXMÞhI†ÿ–‡ ‘ÇMÀŒvýRít‰&¼– uHÀóÊ+í„ùçH<?Þç°ãë^Ôj*ùêÈäŸïeh+Å­›Ë8yIŽK W¢h¯¤YÀ±ùÈ3Œ—B>½xõïUm|#$³”Šlãæ\çðõêqíZ¶Þ¸”…K˜È ÎTçéÍdñwvJæÊ„-«±~ ‹{û©–B:ùo»ùUåHZÌÀœ‚;“\å߇o­Õ•í™—pPæÉÇ¥S÷ѪˆZu9áˆÆ:ñíR±p“³Zᬮ™Ùí³/¸3&_½ïL}/K¸rÒÚÃ!= -ü¸®B=kRËV‘¶ô ,K“ùMZOÜÄØ–zd,yï»=E]âú‘®—6Û¶M¼Ú¼ÐÈ/™eŽGéPTµ;íõFhWŸÞĈϯj©Š—bî†t'®Ì?#“ùUÄñ¤¬£íôÊ…?V®.wÒW"P‹ZÅ¡· ¯ˆl–“+®Ka•½ÇJ¬%ÔÈ1Ϧ:Æ]K~Yúò3Z¶º‚ÌÌðL²òKpî{UŸ¶™‡ÁçŒúVŽSÙ£%J TÌ5œ±´S»Û»&ÜÝÂbyûØÍG”Ò©´xåXFÀÛÃ(’ýo§ÌY¡ èÆ?*‚[ >tÃÀ­–ù‹(aß×ê:¨Ôå{ Tœ–ã4û¤2É".NUIÆ®)·÷¶é uw…¼7a÷¢r„žÎÀ}3ÒªŸ ÊŠ^;æOW!ÿ.ó¤å;¶cõf=ñ˜ã4`¬Òüå1ÁÏ9ÇúÖ*ZÝFÿê¤ô¯SŸÃ×lÅU¡™˜åÝ”¡ÏèO¾jì;‹id±f'?2È1¡Á­’+’Ç›µ­Ã® rdÿµô=¦¹{"ùdnF?–k°þÍ·–ÜEwo#ªä26äã¯Ë‚ ÊC³*\Â’®?zËó@rxü»(m²’HêÅÔV‚n-ÎÜ $Êß­i$—Þid¶Ö_u ~½Ï5ÌéÞ—ÎóEóºH|(a±k˹UVAÔôÉÏ~æ}Es‰$I)gldå@éùÖŒºœÍ$¾dJÀ¢$œãŒŒ~~ØÑÉÈS“ǹrßYÓî¡ U »1¸c×#ŽÙúõ¤kˆï.ÕpX±·pÁmÃ!±è@ìAÍcOžÍYe#NVD·… h©±Æ@éîk–ñhgÐ5 º5(Ø`ÿ¬^ƒüõ­¹ªª K³"1æ7Pw{z×4©{YݽoEæz†cÇkG?»W\²ñרsÛÓé[V++_¤EŸ&K‰²Ñ©<à(ùþ\í^}pk—¸×WEÓ„¾)µ³þÐ(¢-2ÝH”2f$ù\cóƒ…ë\„þ+ÿ„PˆëWrCn?vÁØ`O¸Žø'¨ÙRP—5ö;’å:MY"ñÖ¿ɺ6ú`AÑyÕ%™”gમâ>DÊår~lÕX ;E·[+µ²ýäŒc– å¿'ŽkNÿ„>~F¬žXÀ #ù ß@gðÇã]%Æ—g Wóí‡ËØ­ ¤Æ1Àêj'Z¢wŽ£…m= EÔlbÎ.áËíùN 63Á>ÄsœsÍkèÖI$Ïy‹¹£g‚õ=3òŽ™××µÒmà‹ËŠ#!Y€,ÃϠéÓÒ³¤ÐdmAní®E€ó7Ý9Ýü=Æ>½k›Q×#Ð>¯ªg©ªãG\ žž¿Ê ¾ïl®mK²oCtŒŽHéë\Së7:aUlÛˆHÖ\»3z “Ÿ¯æ{Õ›Ÿj6cÌâpÌoLõ9ëŽÞ•Ï;X‰Q’Ôׂ;OéDË;É'˜À³üÒÊä€ާ„ZÎÒ´ç¹Õ..fuhË F܇r© {nÉϦszî³™g$‡p߇ä^„¢àmÈç''r+KÂ~(Ó Òb‚îdµ™+y‚íEÀ%±Œ…Q\¸šp“I½WÜU;Å…ÍÍ­¼·w2¤0B»ØãüöîkÏ5/¤ÖöÚ®²»,g‘¿³ìÌi#¾Ë3)c?.3Мæ½z\Ýê’<Ò¾gtÝÉŸ•p½Ó‡\gŽ^Ñfñwˆe×5P#¶Sˆ!å £€‰éÇåß“Zap±ÂÓúÅu¯D ¹¾X‹¬i÷>3ÔnüE© €@ *“òç`ÿeI#wr§Ôãy —M  ""€‘ð=€é¥hk7vÿeò•AL1§  ™°W Ü{UhX[DYƒ¼í–'ñÏ_}Çò•IÔ­kWNËÈÞšIòı\o$ËFA¿·9þ¹õÍ]ß|T4‡ØÈjTŒÀcSŒúcš›~Ì‚A?­qûi¯…j ©Eõ+›=«r’æ|œN1ïUW:pÙ_ÕþÁ/#Äîã‚ÉÊ_ÙÞé§'ÓÌ'§rTÝ1E®Ûø|ÎTDÁƒgêT/ãšöSJØfFtIÀÇB;ã¡'#ýpG5«é¶7’^ÛF"C”@‹òç¶ëÓ¿è+·˜ÑÄÅ·4R§RéFGt—ž2#O>`r ²äsœ”'㯩銂KJÊq³ÜFÀ&@CÀúWMcjl[m…°Ÿ@ùÀ#89o@HÀÀ<ñÍ:X®n.%A"ÊG8a¸ƒÆxõõöëÅL³ q›PÛÔôc‚©(ûí_ÐÈ›UÕ4øm¥¸D+p›ãÞ£æ\ü8#¨ëëIŠdTeª;g¢±_ñ©fšM0y×–É<`1ÃàLøã–îsƒÛŒ÷ÅB”Í,—zEÕ´$Œ=´`¨FÉVä1€ÞÇÓ"»°ø‡R<ÜÈ寅ävPû‹ÿð“Ø€ $ÃŽ¤ddŒãгi®ÙÍ.>Ô€u‚1ùŠæöDsÔ"Œ¡KÛà`‚Iàçc;GoZWÒc†Y’=NÆR„ †]¤w亨ÏN•Õïv¹ÆáÝÌÐÈÁ¢»†@cÚ5Ê>K8ÈäI{ñ\,º¢°-ŵ¼—®Y­ðàrxIÏ9ã’}2`c¨ÙLŠÏ:°çfâ@i]'ª'•Ii#µŽâ9_rŽ¡˜cÿ®?q†)c $qºã2†¸vÖ®àeS ,1ÃÛðô­KOÌ9š(\w矯5^Ò$:õ:±·†G‘-п*ÿ/óüé«Såäd€À¾Ïá×µPOÚýå¤êz)•¿ž*Ôzö—*ô¶GþãÆßÏýi©'³!Óšè[fÔ¢ŒªÏî~{÷ÛøÔF÷U‡ì#ç“ ãþú REqm/ú‹˜dcÆÕpMI³FÄ*ˆ×–e$ƒ‘ÿgŽIü͉i½Êí©‡sÚÈpQFæ€íÏ¥e]ÜYÜHTO•q÷²»{óé[¢Õ.2ÛŽ8úŸzcĤ4dn-É\d·oÆ„Ñ<¬ç͇œ>I˜Ç4ǰhóQ29$óǵhÉa¦Üž@P ´JTŒû®)M¶{‚V{˜:±Iò·æ8ªS%¡–Öö«Iq26Aqµ[µ¥É:ë)%™™&fcÁo#ðúU·²u]áÑÉ8â¹[¬,MÊ8‚Ãñ?iÝkFâ«öó2Û²íøž¾˜÷¬eI¶i$Kw~¶ ˆÏúGa×o½fOxp¾c³á o›jŽ‹Îx+;í!‰9Þàcæç ÀþUJK„•J8 :ŠÖ4ÔUˆ”®Éâ»X u6¿8¿ô¨ÑDˆTžAâ¢%IÚNYW?6:tïúÔØhBœŒö4ìMÇD̓®0TŒŒsÔb·ôX­ähòά§“€#­a7Ì#Ã#366r?Ï«§5½±D 6ìϽMeRØMDR #Þ3ÛÒŸ++J*ˆf¹‹ùXíg ¸‚kNæiE´»ï—Tsšg`°oß„ÁÂí>§5Bú쥊(“æolÿžµWM¿ŠÞRf™œ’ÍÈÎøSÞ0<“œDÀ:;cÛóÍ­KPZQÛœn ’O8ëL|¹qp Ö©’—/à€N1ëê+í‚ÊÁ NÕâºlÅÌ¥±=˳è÷PýßÝ——¿sí]è·kHà©1r‚1À®zâáßA“pˆÈ¶sþ?®…„"Üñß/rŽvæI#Ö4× ˜üÕ cцuz½¼æÆÝ¡b#'‘ïò+“¿O/QÓB•gPp;n^ßu2jO¸_s ¼ôúVU"mJM= _y¶jÒ"€$l¨¨$Aö׃ œÿúª•EÕ‘Ë7<8ü§Ø©PÒLÇæP{\²‡%ÙÒŸ5‹€2cg<楳¸Q{'oÎ2Äp)¢o;‚Ic8äÔÐBž|DËw¬/Ñš[±¯æžmÊ àÿ‘^]¯®ÝfìÖôø‰7E†C*•<õý{t¯6×” jè6>ÿsÍkƒþ#+øf$tïNÔÒ"ãëQ©ÛÉûf½3Î:O ksqôfÿЖ»úà¼ÙÖ§ÇìíÇü k½ h(¢ŠQEQEw^lh–ƒv3p㱟‘½Æ#ôî)iò¹ÿ®¦®øe±¢Z ØÍÃŒnÆ~F÷üÓ¸§¥ÿÈZçþºšC;›oõbŠ-¿ÕŠ)ˆ°zV>­þ¥¾•°zV>­þ¥¾”ÊøkþFiÿë™þFº«ÛmíÛˆ"ÛŒpݰ¸ü‡Ðt®WÃ_ò3Oÿ\Ïò5ÕX.Ûh×nÜAÆÜc†í…Çä>ƒ¥!‰©Úi‚ÜÞL°¬òˆQ›¸‚@'·Ý5gþ³ÄŸõ÷ÿ¶ÐÕxvé¶vʱ(»Y%óµ8$ç$qïMÐ,WL²×l–y§Xn6¬“°g#ìñc$Ó§á@a}"O"+2¸çüñSÇ´‡,ÍÃõª¶ªªZ_˜ù˜Ë9É8š¹`à^‚çäd=yëS&$®Ä¹³@&2ÃÆýj¼—— §JÛ”F"gP¾ÙãëÆ?úÝw5Íføž-£†,9aƒ× ãß­fA¥‰-•.ÕÞvàvÀç4”Ê«Ës•Ò#“PÔ£Kò(!zòÀZÛÖnï¼­ ýí-®ãPñEqpT¨ 0p22G¾sÍRÔ´ù4)ÖòÒàÆ®¥ÆÛYr0@ú‚Z¿¦éQ|BñF™áø/n­–Häæà,¥S&€§rǨéŒÞÆIßTIsjëdVþQ$¸Õ[&7þî}yõàðyÎ)è·6‘]}‹Rm ýä’”÷ã·NÕœŽèáIfa÷”¯ Uõ=×W Fx!6äœz§J™®aÇCt=¬:ÄËY£ó¶3gË OÞ>Øè}EBóùÚ‰–WILc÷I[cÚyÆ=6óÎOzë¡ðÓ[øBÖ裛‰”oFLlã$ð:§½dÛiÐÚ:úHáŒäËàŸø+ø~µÏJ>í¶4²zÜ[H„€Èó•ØŒw'PÞ^F¡C»aù˜sϧóý}MY¼Õ<;®c  .áßp üGõ¬øIôë6"ÇNsÒ¢ç>ùÝ‘ô"­¯ W/YÚê:Ìò=³»ù˜µ2{žÕÕ?ƒÒ v¹ÕõŒ{‹’»7zg!Zà›Åú“îònË·¼¡l•ü¬Û™®µ L×72Ï)’BÌ@éɤ¬–§D*N*Ñzº½Æ…i¸[w1fÜUJ ô ù¸ö¬iµ‰çû³¼kÎØð&zíP_À ŒÚ0ç­8Z2GãÖŽtŒÜ[w#Œ$’—žëq-ÔI÷9m-¥€ÀÇU$`Ôkg`¼ƒëWí¬&L4eXg£){X­ÃÙÉìW·,fT ¹› '¿¦M\ÃFË)‡hÜT«É¯z؇FK±ÎR9ÉÝ“ëŽÕa<-zÄl‚9—³+/¯½g7wtéK‘ûÆ3Ì›ULQl´à‘éÁ•=Ù–tIcÎr±¼ô9éùz×K‚ Bâ8ãQÈ H-ôÇÓÚ´-´:ÊøÿR •ò6–äsßù¨×x8?vÚ…«Êå $gqQ“ø×?we y1©ONI­oœÆM$f#‘Ú­[_\[9x&’91Ã#1T¤”ÆÄc#Ö•gFö«³è5%Üé-|e¯[&ÄÔæns™q!ü dÖåŸÄíR‰s  êNUã’?JàÄŠz0©{qíY¸§º-Iž“´Û‹Åº»ÓæªíX:¯r@8ä÷úÇ¥·ñ6‡}±¹°oÞ¸=:°Çå^%ò“*ÔR\KZÅ–%¾U$žÂ§’;³Ú'kk»Ky?f*\øù:î,zàüÙJá’ÂûW½K{ 4¾Óå"{Ürî×GžzЍ|ª}Y.Ɉ7 úÓùzµ¦j7¾ ·¼¸ºa¹•Hµ·%YäŸWèxŒ6sêp:’®‹ƒm&gYJÛž,û3˧xCB)%½Œ’Ç%¸Ý‰n]Ò¹<”RνÎPŒã‘¹†ãÓô˜£‘¤Þ$T–=¸è3ø!æ:-þ£áÛ¨õY¬GvÂO0'· úžk²µøŸ™îÎeV\f6Wç×_çÅ:±U7&š”v4µK+­0ªÉ’P°U3Óhäú“מ)SV¦73AÔLaÕ_Ï?OÊªÛøÇD–mÏy$aøÄ°œŽøÈçüó]ªé#%­Å«»ýÑŠY~£9ïþsXJ”g¤âtYÃX“¦ o¶Y˜Œ`U8éÉÉ4ø£n*…ˆÎí¼‘Ž?žjì!2ÑF¹ Hv\ü„çyÉ?^k$ÀË4Ó6çß.O3æ‘3xÜG9ü+’®_E+§`§ˆ¨Ýš$º»·³âF )å"lg'ÙFXð0~•SF•5™ã•eÁ ²F3 ÆN:íèFz ÔAhe™Ä®ñÂË´£ÙP8sžsÜÖm¼“èW2[ØJ¥pʰÆY˜õaNúÇT°QöR§MûÏ«ªË™JKC¼XäòË'É&àGý~™æ½g^4¦©ug4hû_y™s8o¶0œž­*†`Ï ÷—ð#=ø§Û6¾ëçXkS\Âú©Épœp¬­•õç<û€×ˆ•aëOðÿ™º!Tg[ˆØ0Î>àó7ö°„î}k¦äôLʶžíhIw©k¶ö¦ÏRÒmoOÒ¤ÞY_ö¿0~° °¹D'@º¶W$a.ÑH#ŽDƒwæÕÐßµ½ÅË‹e+†-–“Éã€3éU¾É çËRÞ¤dÖSÆÙò´™ÑG!Œâ¥ÌãsæÏL‹ÌòâÝ”D‘†XóŒn1³ã9úñTþżÆ-õ >pÙɈÏூ*Þ–Æ79DòÙrŽ=«=.Æk‰m®mR)V¶_aìOOðª…zU4jƬ¦¶<ÐÑoþ­zQq&“pÐã>fÌ€1Ôã·éÁôªísslB• f6eéŠÓ´]JĘ´ýròÊ%ù¿×mUõè2x§'Õ«Œ5RæeÕ6ÊI{m8ôÁ ÙÏpõ¬iÅëcËr•ìÕÎ`ëwÊRòB™Èf!ÉüNMNž(¾Q‚–Ç#È þ§¥_’ÿI»Ü·^¶IÎû97x‹ÛµfÞiÖw<ÖeÒÕT‡ùœrîÛïÆpLüÇ—Ë5Öâ|¯xØ’/ж1Á æõÁn’a潉ei8þáʧ<ŒæãMM­ÌåN/dl&£lÛ\Åó f O¶Ò¡ÔÕ¤¶*ã=0NÿÖ³¤Õu3—>¡,±‘M†‘òž1Ud¸´¹b³Ä–·,FÛ«a±È<`ch6c¹ùºPªEü,ÏÙ4Vû‘]¤FÛ³‚›»ûŸJ³-›Gç„›˜–ñœ~9?Ò¨\=Õ¥ÜË)ó`çæÊ‘A=ˆ ƒÜ‘5‹˜›ýb1ÄG?ÍW´Oq{t-<ñ@K ($8ŒAõ=N:Õ?#ýZ(ü™Ÿ\‚GçŒ~n=p©Üñ¹\ä‚ÀŒúò)âòÂ}Ñɺ%8Ëù`í{‹‘#cûY—q†Ñ›ø€ÁéŽØ¨Ž©3Æë039é#Èä§8üÅRÀ=¨Å+• ®jQÙ‹Hïîc·äùI!U?P PbX’X’{曎1Ö pËÈ?•ŽäåiÏcUËyÁúÔ«x‡ï)J,ÅtH½y©‘Êw?D²Å!áÇÐÔ‚0FG,¤Ëiv@ù†}\†é “n:ã¥em?Zr±SÈ5 š)4e|®{+ZÖ8Н*£Ôq\qœ†]ŒqŽ*åµôÊC)éГҹ§E½ŽˆU‰ÜÅk’WëW¢µ Ô•=Àî?ž+Óµ©mÇ–_œgœVæŸâTœ•Ÿ cŽkžPœ —,È4øîMÒnç!çó§¾—-¸ÛX¿!¢ßU¶w6\zgúV´°Hü¤žy=8¨ö·Ð=™Œ‘΄²GÈãÚ©\H ³°ÃõéϵuŽùä8QœŒŒ~Ï5^}>+¸ÉgBN0Ïù5¢¨’3pw8i€Á8ö5‹zÈã¥v·z`â7`=A®~ÿH¹MÀ8p}Gùçðª„ÕÉ”YÅOO—=êo´“[ÒØÊŽ FÛsÕMUû:åÿ‡Ž‡ÖºãQ3žPfYŒà.?o”v’$ÚÀô=ëTÛN¼SÙFT‘íÖ­M¢Ì¿6d=sõ®ïÂ:d±À—ó óå$@6¦XžÜ½‡©#´vËæ Ùàõ«r/ÜZ+f!$›\|ª1ÐaÉÇ©úS”mZO•ÞLí5 jصÌϹú"ôi ôÿëwé^W¬k7íÌ—7@oÀUUPB ÉÀ'‘Ïó4ÍFîëS»k‹¹LŽF` …Sò[t¥FŒa¯QV¬æì¶%‚]‘î]ûà ?(\‚1Ôœwìx9âÂÀƒUÝœeNô¦©G#Þµ’¹—.æ†O §‡ “œzÕºâ•J· ö¨qhÙM=km[P³M–·÷0'÷b•ÀÖ·ñ¾·nSuÂ䱩ÈôÈ¿ZåÄÈHÏàêFAüKWܵ&wVßîãf3éѺœªÇÏâÏ5ÜéÓÞjº}®¥….Ù1°h³Éë’Àã¿LóÒ¼AXqÍz6…ñ}´}ÏL¸Ñá”Zı$ˆì¥•F#'žjU-´ê4ŽÚüÛ{¤?Â?^vãõ©Yâp²;`í]¬G¹Á®zŒÚK²™´IƒÕn3ÍkZ×â¿„n0'†ò<ö`¬(xGѱª-„3É!¸~:”!p1Ќ祋M·h”ÆÅPp£ÐW­x™ï5««Í[k8%Â¥­ÈU‡!§?{…$îÍ!ñgŠ´ôQqckr¼Ÿ4¡]Þ¡@+“ô^õ›¡5³5U`÷:Ë<ÜjŸ:lÀQABW¨œ cõèj_ì»´M‰rÀ‘Ç™†ýHÉ®b?ˆÉ ‹þ“sk»’ûòÇè¤/ó­{x~u&k¹ í‰á$ž¼ü›½k ˜e?Š)›B¤£ð¶E.—s0 …·±d–B在ç¿EÁ#åàã½VƒI¹0¢ù™$>O–ÅXm9#$uǵt±êºeÔê¶×Ú}ÃIÊ"™§Èy4êxfIâuŽqÛëþ4£f¬•=´ŸS†™õ[D†ÆáH-ÎèŽä]¸q— ?ˆ’zç¿`jž¿5ÄΓìáB¬†"zðÄdúŒú×-­ÛÇöˆÐˆÎäÝ•=sƒú†j;¨ ’Ýd…uç{oJn”'5QÞæ°ÆÎ ÖV<¬JŒÏŸ§Q[z ¤‹qöˆœÅw00Ù烼®IöùsÏ¸Ï ë¡Ò¬R .Ñ.œ ±ùñ+•î@î;÷÷¢çÂzeÔ‘Íq±½³\HÅx9'#’Nxç$žµªµ9j:˜ÇVJÇ'-I•z㎠~ò*ˆË)@ÉÁêk~÷Ã×,ÒÙ_¶åPlžç‚\ôü8¬¯øGuLüñË Û•ð@ÈÍoµ÷oXÙbBåHÏ äìV’Tº†XÙ¢“lr.†#¦à÷c‘ÔŽ :ñi®Ç%9]²‘ <ØçëþƬЇÉvÈaÛŸåV•O@2zôÖUÇV8ëòcž+í±¥ˆ-íÚkY7I“lëóɽ€À«ßF³&–Ú=ʪ²¸ FFOqëÛ¾=n”û=¤±¨-= ”QÆÐˆá[ÔJèèk S’v‚z“]*VWdFÞ…y.Ëͼ*«ËŒcÛ2]BÓ<)Rw#]¥sþÏN:àcëV~Ï©M ¹=jµÅˆÇ_QÅñz2Ý6¶$¸³IºâT=xÈçŸÎ¢élÇäÁ Œõýi4™fŠé­$Ȇpqœý1ùzVÔ1FÍßPòçÁúûV–[Ò“Z´f ¥NDÒÛ8ýM:Úòk}ͼHHþ0p? ÕÖ³3 ¶ò¤™w¹ 0…€á›UãŒ÷'Ö “O¶Id±UQþµðpxÇSß§áV£%ÔÅÕ‹û%˜u÷Hн¤2FN8ÀaƒŽàòyÏsOMvŒÆ,B6‘‚}½úõ®rxnmSÍ ùy gÛØÿ…5Òà4E‚ïu$‘ùÿžÕ´!RWåÖÄ9SêuëÐ\FVTØø(p8 ûçž§ü8æçÄLžbÏÞ1üH®bWºGÊ©>˜­:Ý”>aÁè—)¥ªŒÌß7O¶@îªTóñžqúž} ]±µ’ð•YPƒÏqÇ^ÙÇáXQÞ³[‹V`Ñ“’Ï×ÓگǪÞDŠUƒ€Ts|gõ¨u’Ñš*z¦uv‘Åo—$í!S·çê}qžßJÌ’+&ž@ö‹óÇ!Q•îqéŸcYðxŽdÞÛÀè:…Xþ<ҦťávkY#a’n'ß {UÆ´u×r%‡žšlO.Ÿ°%¼HëWê:äþ&ššcÛ–¸Šë i ¹   ãçü*[=ZÅ× þV8;ÐçóP}=jÜf §d[Ëu…“+!uS¿Óäþ#ùÒ”ãÜ^ÊOt`ëRº$r¬ŠåNT¯lW¤öÛÎ%Peò6ƒ‘=^1^{â[†Ú;ðP*àü¤Ïã]Ë©[è‘[jÝ— ó:u¬%4çkn1h§0{[G2a¸y}?úÕž’¨ˆü‡xÏÍŸéWu=ÐÛXÁ"I¹UÃ*@\¾Z¾ÝÀ©á†#‘T·%ìSÆ(#Ú¤#"“®; À¤‘2¼~(+Nâ±"`â¡Çj½4}j› Ñ36¬0ÓÒWOºÄSqILE¤¿‘~ð *Äwñ‡k6“½O*cRhÛG†Oºàçµ;i8ö5Š8©âXþë·Ò—'b¹Íq$ŠÀƒÒž.3Ä ý+2=BE?:†•XKØï§ÜqRâû¥ÙšÑj“Ç´îã±5§kâ)ýóL×668Ê:Ÿ¡¥ÚÊr féAîi®§w‹'T°~œZ0x¹Üà©Îúךù®ÏéNK‡AH¬g…ƒØÖ8—Ôõ¨µÛ[° LŠs€õü鳺J„HªU¸Ü?N{ôý+ËcÔ^3p}E]ƒ[’ 69 #ŠÉáä¶4U ÷= ìvŒ™Š@¹ìÝj¼ºRIÚã?ýjæmüK*°,êN:‘þ«‰a80ÉþÒ²tå…Ý>¡6‡ À;?–*¡ÑØB09ÚJ†õ‘‘þžÕÐ[x‚ßÌ'ÌCŸÂ¬ØKmšDÇ,¹è1œ’­R›DºiœSé·6èT¯ 3ŒåTf·!ðË´úŠô‰-m¦,Aâ©Ka ¡c„좵Vg:gž›@Go~i† «]„¾L7ÈNzlãŸq¢º’wЌ֊²3ölæNÔ‹Aü«ûæLŽ7wOæ)«¦e¦òŠ’ϯҴR!¤b2G N=ªUÓÛ`o,ëý+®](ãf`®Š‘òŒ}Î*§‚Ý6ÄÛ`~Ts‹”åžÈ*99B¤ œÿž?:ªÐí]Û”Ö¶ä·y›{}»}*»Ú€0s"¬Ñ‘¸ŽŠ•C±VÁnqÅY’ØHÏõªÍnØùr1T˜¥ª³&™Y"Ê¡'¾:Ó%òL¯ä,Ë ˜†qÇ9 ×Ú© .mË*¼ˆ1Ô1¨Öæì‰I'ûØ~~†µF nîgi¢—θ@÷€ 3ì8ÀÔ¶š¥íŒže¼òFÙËØ¡o©R è;Õ9n%*ðO$ PnXî-{Œ~\SWzj ÉJÊ %·(ù‰îq‚N}I©Ó^Òç\\é¡$-œÂÛT÷@É?Vü«›y %ˆWŒg€ß7ê1ü©@F?+«sëþ4¬žèi³ª¤Nì-ïf‹åÜ ©ž™ãj篻w«¶‰¬Û+.—y8G"ÖW\õë·ŽÇ¿cèkˆòHàã±Å8K2)U‘±éš—Mt-U’= ÛÅ~'±ùL²Êá„‘¬§èX‚ZÒ´ø™2ÈÿkÓ,äçÉfÿ2[ùW›A®j6Ðù+píéÈ=öž?JÑ‹ÅsK4?n³¶¹JïˆF±îQØmß­C¢Z­ÜôÈ~"hò…ûEÔ, WêÄåWæñ‹}lm4íiUänMÆô só0Æ3ÛùW“®µ¥³îŸKu ¦5üþmSÅ.…s÷/¦Àé2aO°+¸þx©t<‹U¢{=“iÛØ^E7?)‚a!²qŸåÆqWb°ŸrŸ1ʧ2¸ç±'Ö¼EìaVÙ©k)ÆâXù`qž¤ÿJе—ÅVÑ$–wW¦þeòæ}˜ÆrÀý+?cbý¤{ž¶4ç̬¡IÈÚ0qÇlzÕ Bk ³“·OSõÿ?ZámüqâØî_µ*ðWìà…ú”ùÔËñ*åÃ%æ› Œq‘”ßvM)RKáeBmîÍØm¡¸iùyCNs“ÏP?J¥s¡Y‰r°Égæù’:쎜tæ­éÞ>ðùXá–+Ø ùŠ+ '¨àç…i.·áËé?ÑõK@«“ºpbõþö+7Îìn¥o…˜ÂP¼Ù·½-˜ób yã Æ=Iö¨ãЮìåYÖ#+'(¤ç°Á8ô99Ï~0y®Ý 7+o-›G6f|xaÜddw«Ïo ‘\ÂŽ…˜uþ´½¥¾È¥*–·1ãsiº”—MzÑHn„…ä*ß6r[#ä‡ÿ×[vm éOÔm%˜~íŒLgø‡tÆXàerßpu®üØZ‘™&731éžÃüö«BÇu؆$~VPGu¦«k®Ä8®K[^çž^xb1$†Þè˜Ux,${’S¾{wªwz^™<Œ³Îç@r¡ºwP:gûÿæ½íî­ŠÈ­û¸÷0˜Ç=°FsÎyɪ·Öë,˜žÞÞîB¤þúœã cŸj¦é§¡’…N»G=ÜÓë\N?×!C’FäÈ,3Ôä׿'=ê0þY!Aäc5Ûê¾·¿R±yv³†hÉ)é÷O××Ò±?á¾*ûæ·a@hѰ1‘Ûr3œwç-®e©¢š‹Ñå¸ÛÇ¡¦ÈIUÝÈèE_“DÔã%~ÎòçåVBw¿lsíPµÙ” ‡X·d~ñÁ ú`ASìä_¶‡s?L¶Ý¬ÛȪ ÇœÈä:}AühjvîÚ‚Ao)V•NY¸Ú%³ë€ ÷éW´ËE˜1¶rDrîÊ2NögÖ©—3ëw,Å-äXÒ!óHøÂ(¬p=³íWïÛ±ÏQ^.E»Hü¨îU-·îêÄó{gò›çù— a-®pp¬2 ½åW,5›]F&È "2Æ23IÈè{c¶k ÄRMgx’ÚnŠ6±8ç rzÖºc{ÙœLµ ‘Ȳ;ŽÒES“Éã$qšŽh-œlG àJˆvª‚@ܹ铀GbA3"ñÑ\¬‘»¢csÚNý¤ddqÛ®N23ÍZ‡RPÕîÚE4«o U$ˆäù³êéïíZ§(½ k¹=œ3µÝÄ]y¶èïÚ\œ8=À=Ï\`ûã9«bÆŒ(g‘AÃîl=@¦OãM¶–ÎÁ’Õœù)7Ì™ýç¿$Žç ŠÔ}KN35¬Ïöi‚‚ „yÇõ¿ž&u¦ôw9ªJQ—ºŠÖÖÚoA:I¿>bºÈwHþ-R5¤qÀÞrÃ:í–ð?`NÙÆzsSEio%¾mH™\‘d¸fèrsƒŒÿ“XëwuazDð*D+$LU•€<Ž3íŒà‚À"³Œ¹™Të6˦ÎÍÑ–ÂK`–÷ÀO±íM‚ÂÒݦ>mĤŒ/–BÏRH9vÀÇ©«q¢iÈ#$*]ólÇåó" @NA#?ÝzØ *ž`]Ì@gž?óŠì¡ƒ§(ÞG&74­F|1ÎÐFâI'G݀ᕕzW“qÖ›s¦J!imäYá^I ¼õeê>¼‘Ï5¾Q3mèÃséù{Õi~ÕdØqʲç =ëIà Ö†4sʪK›TqR c¸30žŸJ÷1%Å©›k¥¸}¹ ŒrzõÇç^]ª$7â" 0è  ’}Aí×¥zÙt…\Ü\÷:¨$dg©=?_­yu¢ãQ#Þ^xs.¦~²Èת[iL†$qŽ:÷¬o4ß]y1¬U˜ôç·¡­}~ææòkt€Ã½)X"ªñž§ùõ¬hù™‘r9 úV{&ѲNÉ1ÓY(ŽG\ÿzF#ò'%²ì»!˜py4’H g wɧD¾dŠÁº°ü9¬Ü®µ.Ý[yNH)ùEy÷‰€:¼ÍКï-bÚ BØÁ%¸Åpþ%þ'r¨ãǽ,/ñ¾Eâ?„̧=NôàíÀeÈïŠB¶ ;v8#é^©æ‚ÀäØbGÙ›¨Çñ-w•Áx$ç[›ùwoý k½¤4QE (¢€ (¢€;¯ ¶4KA»¸qØÏÈÞã?‘úwô¿ù \ÿ×CW<2ØÑ-ìfáÆ7c?#{ŒþGéÜSÒÿä-sÿ] !Í·ú±EßêÅÄX=+VÿRßJØ=+VÿRßJå|5ÿ#4ÿõÌÿ#]U‚í¶víÄ mÆ8nØ\~Cè:W+á¯ù§ÿ®gùè—6Útmk»2C帔Àª 6ND|cŽ6¯áÒÍJóÿYâOúûÿÛhiš~µ©ê¶æâÆÓKžå7®¡& qûŽ~½)ºSNÉâ#uqLnŽäŠBê?ÑâèÅTž=…|¸ÉÉ¥‘ɤr@¤Ü@#44˜“h˜L§¨Å?ån†©ä­7­K‚èR›ê]UÁ϶|1áøL|Ek ý¯ìjßûÿ+ÌÙµþîFs·{×<²2ô9Õü9ñŸáïiºž­qök(<ß2]ŒûwDê8PI䎂—+¹\ÊÇ=ž”l_¥1gFî3O‹4]Ðl›b 8 h9¤26Œà‚9¬ùâ*y­æn\0籪“®ñÒ®,ÎHÌ"“·½=—i"‘-ŠÐÌe(cæÁíKL’—´b€ NsKÖŒPAÈ52]LŸ¯5ÒOZ_”{еÔñ >â¦[È›©ÇÖ³OÍÍ%O*)I›!£“¡PcÁàãéXàr 2]LŸ­.^Ãæ]M޼JEã'Q5>ú}EXKÈ_«m>⥧Ԥ×FYŠù“Ýy­+}iá΃õ¬œ$ƒ*Tý) #¨â¢PŒ·F‘©8ìu°ø–@œ°`F9að5äÉ|èyÎ{Ö•¾³"`‰YHÿk¥c*[ª°‘ê‹fM»€aÈÝŸ¥f\i…µ?¶‹-Háã m?9?Rk”·ñ ƒ9‘Xçø‡_ʶl¼H„¨•UÑIù[æ±ãüþu7¨·$^ÆÕý„ð[Ao8‘de<3m Øv$ÿUeËáã žr3ÅhÙkv›JÆ…n‡üâ¶£¼‚eûÊÇ#2¨Ü·³²Øâ[Jº‰²¨¯ƒþx5BâÖXó!e^›Šñùצ`”è¼ŽÕ Úu³BÁçšåÐ\ˆòÉ-²x>ƘmqèxçÚ»Éth®dm‘DÌFI\:­?…ÆÇÇŽgp¼õêý«[¢8g¶i ¤œ`a‡ZÏ—ORÅ”•8ÆTâ» ÏaZ&=Á%Iü?úõ™.Ÿ,G‹ëÑü«XWO©œ©y³é‡hÛ»wCTÚ6Cµ”‚=Eu¦%É9'Û ¶‹ Ó‘Ó"·U{˜º]Žh/9àŠr[Á+¿cAùÖœºC¦L_7±â³^&FÛ"#Z)'±›‹[‹%­Õ© »ˆ†ßµHQÕpyP üzÔÐÍ4-˜¤Ç¨#ÄTæöÞáJÝ[)`0…8çÞ˜Š‚áOÞO ŠxhJ¨C½¹pâ3üªÑÓ ¸Œ=”¤áˆ!Ùsí…ëëП«:è; ˆ¹—’´\z TWà:ôÏ-çHÐ2(b¤+t$pj<`FLSÓrÊÅH<hæ(]zùÕˆg–Ør‡ 9#ñíÓ¨¨·J;³Û‘š1ÎåRO¶1ùQ̬ÒÄÚÄ(íÓº¯!aB ÁØ«cÆlO¼ØÇ–#ëåí¬"à©Ìg#¸=)1:œöÊÓ¸µ:8õûu’m.;ÇòÉ=ÎX>:³ý¥¡8ËÙÜÛ—ü’ Húe”~b¹b©°~sŒr)å¶’ç¹Òj/ Ôš:°úÌ ýÌl§+æ¨Ê÷ÏÈóÿô‡âmKÄ‚|Iq,[¼ÞD³0SÊÆîŸ>z â¼Mã’"UÔ†˜`Ö´3Kk¦˜‘Œ2—ÙÁvÁê{ãœg¦xëRá¡J¤»ŸNÉá½PJío©DèÍò™­Ácý‚¤úrj›iþ"µ@ZÞÖìqÄR˜Xçý– ;âóö™âéq™ì/¯#Š223lÎíÎ_C]†—ñÇÄ»þ kä^î›[ó_ð©xjofR¯$z%æ¥5˜êz^¡oKºWh„¨€u$Æ[¯P+ßÄ:Tr´ÖÚ¥¥Å¼‡2Ç3ù,‡».üdžã¹ú7RøÅ§ëž¾´]6òÞââ„u* )z÷ô¯#e9Ï5ÏRŒ`õ:èÖ“Z£ÚÇ“_Fcv}øˆ)ÐwîGOjÊܧLo$âT}Ì£#«2{õ¯(Ã+n\«â®Ç¬j¨8Ônˆ?ÂÒ³=‰"¦)%kƒÖW=mm’’¾Ö, à®6“×üþnâÆM—‹ Q±”°8ëþ5æ–~>×-¡Jö÷*1´M6ý6•ýkj/‰ŽWihÌ@ÜÑÌPgÝÁþu1RZ¦)F,èî´K+iR½U@>˜éêk6÷ÂZ pÅ=´O Ãg,³1ÝÛbG<ôÇ£­|}£LÊ®×ÜóæGò;m$þê̺ö‹wnž]ý¡E>cy|ñŒÁ==3Z)Kª3•>ÇwàVºÔ¶w+„î*ñôäcϾ}ºœSŽ"W3t4¸êiJ¢i_B'I½ xBÚR0è¡È/÷‡óü'ƒœ=ë+X°U7:”Sï—ˆŒe@PFçžxöë]M·‡äk—IšRêC‰H^=v¥IÆyÜzÇwáEž³J<µæ\¥¹ÉÀÏoÒ³Œ”ek˜F„Ó½Œ²Iwá›HÖHRîу#ºïXyƒ±Á*Ãþ™y-n,šæC¹ˆ@äaY›þG4:µµõÍÔf ÝÈà…\ü¸ÁÊíÀÇÐ{ÕËûf¼Ò7^À:YD9Pùˆe탊¬Àn85h†5¹£RžN(昄Å(f­è´½(´†“¸Í £RE6ŠwzJm´v 1SOáS¥ìÉÑò=ê½% š ©ÏDçÔ°—8ûØö5KRàŠRfæÔ~T‚)<¼t5Š”åX¥N—³§ñîíRåcæFÞQÅO Ì ç =O³“Rìñþ"§[Ëy?o±â¥Çº)K³4cÕgWÉqü«NÛÄ N?OÒ°ÇRö£ËÁÈ猩B[£hÖœNâÛÅ«µfeg9ü+ZßÄêÈœu<~uæ_6r?*‘.%Œýâ+…]ªÄÿ2=nÏ_„˜ ÿŸÂ´—[¦Š_´0XÆ@\éÒ¼iu9”Œê{â®Å®ÊŒ9n8È<â¡Ñ¨¶eª´ä{/ÛtëåÈŸ àþMAu£éÓr’(Éû¤õÍyœ" _æã¯øÖ¿ˆ· Ë©Ï7JÉÅý¨–’ :+ß ÄºL¯»Ì:ž½H5—'†•W”u=ISýjk?Ÿ5c9ÛÛ¦ºÜ-.Q’91€Tc¶)]. àÎ~}0y FªW£##ÜŽÖ³.t'xÈ’1qœ¡Ïå޻Ȯ¬î´®¤·~¹©'Ó¬æCdut?B9íÞµR›Õ8GcÉ'ðúÇ(Èr:˜Øíl{?k.óMkyjHbþ‘@$~Šö%ÒwN"8ΫŒLþ=j Ÿ¹{PáxÀèkU^Kte*1{0ÖÒ#n]Ê{­X‡R½µ!Y¼ÄãÐdqøWw¨xF,3ì’^I#‘ùV-ç…o#/”TayH;àgõ­ã^2ÜÆT¥15].íJßZ´N{Â2¿‘9ýimì4˽æ)™BüÛ^UF#× ~&«O£\ÀÁfã%öü뀮î•MôéÄ"e†O(œ ’¹ôÏà*Ñ8½ˆÕ ¡Ýˆü؇™ ådì~„pj«[ÜFøX\dT1Ëy ŠfÜÏ {ß…\ƒ[½¶d‚)‡s0,Oãœþ½¨q“E]À6:c½+öõyõÁ4g̳·FÀÃ*g?'ó¦Ç¨X2áí£LÎ2Oä?­Œ¯iÝ|µõÀ§,@ƒ÷xòqüêÂ>›'gR:ØüM^‚ÇN¹È†íjäæ@§'° Acì3RâÑ\ñ} ¦€© è˾†§–}ãk(ÆsÔÖ¥Þ™Q> .¤¸‚F{ƒü½ª™µY74RE(öà¯Ð ›p¼„>q1lH™]¸øëP˃ì?íLÖíÁ\úŒ -ã8Ö—;êÎ/c®ð¯†çÖí¦Ž6¬% ›ˆá½ÇROåZw>ÕcbmÜ€¹V?Ö¸í>þïLq%¬òBÝr†ºÍ?â^±ç˺\cOÔõ®±¨äÜY×M(ÆÅ)<9ªB¥åÓ§›r&¨IiäÉåÌ7=EÁü«¾°ø…¢ÜíK›Y-Ù¸% ?¡è?Þ´¼Ñõ ½ž¡ ¹ 2³#·SÁüÍ`åV;£M"û2‘ÐÒýIê¡õ¯]¸ðµ”Êï%„Xó$kŒÿÀ‡'ó¬y¼bì:.ùWÉÿdzKÛÛt©žtlr>õE%£"–ÏÊI®æëÁÒDKEu…CÇ’ŠÍŸÃÚ‚Fì<©œb¡ãˆWÜGOž½Ušé­c :©m­Û s]”1ë7f™âØ.˜Œl{Á»ðVÎ+œhÈ·Ú!–Ç’#Ü1Ç\õë:ÚâÊ µu˜ù±âÀ¤A$òÜWžžõÙsësKš;ÓÛxÎÀË5íÔ#hÝ\º@­ŒýÂ8Èã­P°ñŸ®Éôh›p#10Pé·'¿ñ`ZÛ¿Ø" …WL’XŒššÒÎDRd`rxµÙÅ=EJM]N›­iPë‰2\Ü[[0Ý/Ÿàì»IàŒŽ•³|Þ×fKƒ«ˆÚ1„GF½Ûô®Û‘McŒV^ÚîýM½”lz5ìrÛ-ý¬Ë$¨Ù- àc¾G_ð¨-õ;·‰„ÚLŽÃæ,§h<{×T©$ÐúTɨj1È;ÙÁ¼„Œz`Õ)ÆÚ‰Áô:=b{?)ÃYOk>9ÁúýÇU;Q»°‰áKI$‹±ØÃ¨ÎÏëU_\Ôn­Ë,ã¶ñ€?Æi-5Ù-%(öâEÆ úƒZ©ÅÇ”ÉÁó&t×Zv¦†KÝ:4`àîxƒí=úT÷œúl¢PHÀav\‘ƒƒƒƒÁî;ûV]·‰-?šÞHÉ'  ÀÉÏéZVúþ–ÛäY#I…ÞbõÇ·sJ7½Ó°¥+œþ¥à>+G¸Žêâ€àJŒúp¿z·¦Û­ÜQÙy0¹ˆmWÀèã§ã]sÛê¶ l—`ÉHßv?*m‚ÙÞ¹HðÇÞ1ŽŸÐR«U¨´÷)ÙÝï¶°¦Ú讫Ý÷Wiã׃þA6Ã;c= ÁÇ®;Ž+©Ö‘ ‚1‰?&®v]§”1ïS 9-G5`yÇ’J‚2 ¢ØHÕú†>ÄÔe]åQØ’HÍHIIAãàÓk¡7êhmg˜1€xõö¯?ñ8U`½1ÅwÉ?˜è¬  õÏS\ˆ—þ&Ž G­NøÆ•ÿ„cá° Í1Æüéìäð4ŒÇÖ½SÍ:?ÿÈjaÆ~Ìßú×}^àp?·&=þÌßú× R (¢…Q@Q@׆[% ÝŒÜ8ÆìgäoqŸÈý;Šz_ü…®ë¡«žlh–ƒv3p㱟‘½Æ#ôî)éò¹ÿ®†ÎæÛýX¢‹oõbŠb,•«©o¥l•«©o¥r¾ÿ‘šúæ‘­éÛh ºŽÇʶˆ™¤+ÎW ôÆè:V†¿äfŸþ¹Ÿäjî¿áRaÚÉ$Jœ”WË »G`xÚ:t)1¢O {»ËÝCûOí׎9?ÑÍ¿–£%FÆçœ““Ö§³ÿYâOúûÿÛhk2×T~+¹Ôt«;BÏìqÀòÛ™3uv\àÙÆjö•+Ξ"’Ky-ÜÝÅ)RËþ]¤ÈÓè%¹ò4§Ž(.sžÔ™æÁã4¥¶äšfqH~j7gµ[ÒµÍCÚ”Z®“qö{è7yrìWÛ¸<0#¡#‘U1[~ðÇü&>)³Ð~×ö?µoýÿ—ælÚŒÿw#9ÛŽ½è‰€E'½;Rb€Ži­Õ!æ£<“@) ;µ òE!ëR`ô›q@ ½¥Ðh1Hi{Òb€(´c½4ðiqK×4@ ¥£(1Gz1Îh=hvšn)M%%/Q@ ŠQE¨¤¥Å€’”Ñ@fSH>Õ:^N˜ò=5(µŸÕÒÖ&‹}=2/—€X–ëµò˜­xsܵ=)£`bxÚÃù× žðü™ G+Ð}sv^>×l@ŒÝ¼±ã•­tÚ_ÄërÀjjH%£l~<ñù Áá§„®d÷- Z¬‚1™dñ‚©©ŸÂvF5Tyb#© œÿßU»câïêghX䔂VQù~…jù]bKYUcÕ0&±tê.¥)#…ŸÂm’a»àg†L“øäV|ÞÔbÎß&@:m|ùŒ~µème'Þ+‚OðñŠiµ A8= gühRš±æé·ð©2YËìÝü³U^6„4m×þuë-jvîeÉõæ¡}>'UÊŽyJ«[¢O-]¥zãÚ«´e%fã¥z\ž³–6ñò[`Éükû¶ …Š)T¥%É_Á»UÆ®¢ÐãAϦ2ñœbºoøEåt·»l¨ä:dþ˜ª³x_QVqû’ƒ¡ A?§õ­D…dr·Må(|ãEâ;È÷Z…Ô~Ë+ ÕíKD½‚ÓZ>ÑÐääk)ü?xÆ0m¤ŒHp®ßw® ϵuÑœZÜÊ­âtº.¡¨êˆòÝÜ´–ëò aÔ÷?çÞ´ÀbÄpFzÔÖéedħj&OøÿMh›`Œž_o>¹4üÌ[orH×kƒÐž¦ž2*žÌ?JŠF(¡÷Î *O™T¹éRÓzM‰ü¸ƒ«cæßúf¸¯ÿÈRC]bܯœsü#?ZäüLËý¨ÅGÊÀ(/ß+—WøLÅÁ݃ŒŸNi®0y"œG晑޽3Î:/Èr|>Ìßú× ×àsÿÙÆÿGoý k¿¤4QE (¢€ (¢€;¯ ¶4KA»¸qØÏÈÞã?‘úwô¿ù \ÿ×CW<2ØÑ-ìfáÆ7c?#{ŒþGéÜSÒÿä-sÿ] !Í·ú±EßêÅÄX=+VÿRßJØ=+VÿRßJå|5ÿ#4ÿõÌÿ#Zº•ôú_‡¼ËeU¸1ÛÃõÀVvÚ ^™éÓ éY^ÿ‘šúæ‘­Ù´ÈõMØÈZÐCµ‘pceÉRÑÐÆÐt¤2 .æúÛ]¹Ò/¯>Ù‹t¹ŠfQ°IR¤.Q‘ÇzuŸúÏ×ßþÛCRXé’é÷Zž¡x×—OBÑÛ• äáP$’IîIè*¶•p—Iâ)£YèàKFßñïåX?O –çȰhJn}èæ€ɤž)@ô Bãšë>ëzw‡> iš®­qö{<ß2]ŒûwDê8PIäÒ¹1À¦Oþ¡óíüè'N¼ÒÅ.&—Ž”aÇãMf”ƒƒM"ŽÅ'SKŠv 7n &9§ŒŽÔ£àSjFN21QŽ4w¢•—Ò—PbÔf{PF)9ϵ8®(ǽ7ÐE.=hï@ Æ ìbPá鸧ž@鸠ïF){ÑŠAíGzQFÞ3øPO&”®8ü(â—Ö€ŒSM8Ò@ JE'4´˜"—·½)%.(£­¤¥4P ‚jd½ž>’=ù¨(  ÃQbG™8ô8«)c%“ê+"Š\¨wfúysrޝìM<+º:çF{/'‹dn;‘úÒå1¸ ó(?¥8:纟jÊV•pÇr85f=NÝÈÞ ëÆEK‰JFŠ9âlPƬ›Ë˜àPܶzJÏŽ{y~äŠÄôóS åX¯C„z£ERKf^‡X–&.§ÙiÁâiF3.NsóõÎèSøS;©â±–5X‰-Ï@´ñ«!L±Ï?6søݳñ´yù¥ÙÏ~?úÕ䱌1?OþµL—2Ç­ŸSY<+_ 4Xˆ½Ñî+â˜&a!”îé¹úÝ*ßö¬3®a`R9x\Z¤¨Ùç>¾µzßÄrÆÿëX{?:‡Nªó/šœhŽÓM¹R$b®Ç†R8ð¨ntñnŒê'€0ÆñŒ ÷?^;}kÌ ñd©ÆíÁ»‚GéW£ñLŽ¿;1‡ŸÇŠIµñ p¾Ìëo|93îuŽûáCqüñYRèA]qªÈF$g§~ÄûÔºw‹SËHÃðÓ†ÿ>•Ð[ëðN›]ƒ¯÷$ÒŽhÉ#þÀvc¶HËg,JíQšÉºðÊ™òmXvÜ™ä÷8â½%n­¤#xÛŠhKYAÁ剥5³É&Ðç€%Ãpv:ôçžm.¢´$ŽåE{{èöwMåE(-´u÷¬Û¯ FÌ"7'„;Iü±Zs˪'U³<|/· 7\7”Å“Åz ï„K«+$¬3Ô¨p=¿É¬+¿ ÍŽÐÈ öDù%ÆáG— |ñoǶçÍS%Tþò7ŒûŒÿ*¤ï°]ŠŒää†gthÄGƒ»°Æ>µ¡„q•!‡·5JêÌHÁÁ W +êLâùt&MPyÉÞŸÈùY…¿Sõ*kªÓm/^Ð^i——Q" ¶]TŽ£rÿ ×žÊ’ÇÁbBôç¥ii×Óéß¾‚ÿ`ÈBDŠ2G¿9ëÚ¶•8ÉÊs‹=ËÇ&´aòµ_”*‘#cè§wænÙ|PÓ§p—¶r[º¶§Ì ôÇQ^*÷R\òÒ¤l½2Ïâ?­\ûmõÒˆ®nd‘#ÆÐÒoŽÇ&¹ç…Žæð®Û³GÐvZÖ…©06ÚŒè¾Fÿ?JÔX\ŒÎg8¯šD“# ­ÈéëZÚе3EìÈ=3‘ú×;¡m¹“=í¢*¹ ޹ÿ&¨Myû]>RºF+ÏôÿŠ×¨BßA Êç–ÆÖ?uºÄ]ô¨œ5»¥†T~5“¤×AÜе°Ž-ÛnI.~ñõ'Þ¤¸´g‹åÚ7ŒóZ·úf¡0\ÂÇý™1V^ ªp2 ~?ýzŸfº ™§©çºý·Ù­ä‘²w6Ž£ÐÖ\»öîO <:P?¥{ô§0 :ŒÓrE HaJI=Mc¡ Ú1ïG4­'s@r{ÒÇzq9 •íMÇ­I@Ûƒœçb€#®i§dQÐF0h0qÒ€¾Ô{ѹ½h1ÏJ\sNßÎH‘¹ŠLSM?šoS@ Š0E9ºcE&8¤ïKÞŒPcš:ÒâŒÐRbŠ\vÍGJ)ÄR~‡¥´¸ ŠN);ÒÑßœQÁ¥Çµ”QKŠAF-%˜¥¢€RâŠÅIÌÑð’2@j*(új³¦3µ¾¢¬.­g|l¿CšÈ¥Å.T>fo «iq¶UÏ¿Ο³<Žý s½)é+ÆrŽÊ}Ž*yGÌn²°Ï?‰¦ýÿf¦£p˜Ëö"§]L¿⦗+ÑkpÈê?J‘.$ûUu»·“ûIìF*]ªã(Á‡±ÍKŠêŠRkfZKù—‚G¯Z½µ4`μúÖ.Ögð£ç”Y¬kMm¿‰]8ä{âµíü]"‘ó§Ôg¯ÿZ¼íd ò*UpUÊ·¡ïY<4YªÄ÷=nÛÅñ«ÕÆîrkfÛų Ê ““»Œ~uâ {&Ð dŸþº³«2ŒyŒ>†³• ¯…—Ð{žòž#‰þ÷(w©þÛ¥^*™¢»àŠðÛÝFÀï~«‹œ¬SÇBj¨·Wä{3ןDÑ®•Œca=B·_²¯<jì6:2ƒ‘¼qýkˆ·ñz–]¯ÏükfÈUCI¸g8ÎsSxý¥aò>ŒQð%¸fo'a9ù£<¥s—žž"D3¶ÞË"çz·ŠÒP2vñßš´úÅ¥Ôb7Xäã<ãüý*“]$K‹]ºÒ®b8–Ü7¼mþ5@Ùª±ÈÛÎ0ËŠöÖÒ´›ÅÜTÄXs·îÕ)|Áañ7 oòkU)£6“ÜñãaŽFA"FcZô{¿KHŒnëû¶ÿ9¬+¿ßÀ¤ªîÇ΄~¢‡QõcÑÌm=ºS“Æ Ò—Lº‡>e¬¼£ ÕbŠr ‚GQÞ’‘v¹Tªž ƒíK‡\`ELc 4ÇŽ˜üj¹…ËbHu ›r$e õSŠÝ°ø­XÜŒ«ü/ó ç[Ì ‚2Oj‰€.c6HSɧÉn.fŽÉüOyâGv”/–ƒ ã>÷­^²A岨¯9ôæ¨évñYZ%²ñÝÛËw8>õ|8ˆ±VTŒùsÇ¿ÔÒŒTU¢e)¹;²Û1hàÿžj&¾ÓÇÐtÍD’Gµ\Äô§HÎü…Æz¶yÅ=„K³kõ¬ ”+œä* Ø äç5a00zÀ{sEÀŠBÏ)^›pyéœ×%â”Pî⻕˖ÎîØ®3ÄϺü¯ â³¤Û®*$©3Ÿ`sßò§¡ã?˜¦ž½sJ€ç¯JôÏ<é¼ ÃûrqßìíÏü kÐ+€ð9ι7<›f?øò×Hh(¢ŠQEQEw^lh–ƒv3p㱟‘½Æ#ôî)éŸò¹ÿ®†®xe±¢Z ØÍÃŒnÆ~F÷üÓ¸§¦ÈZçþºC;›oõbŠ-¿ÕŠ)ˆ°zVFª3 }+^³ïãßÇøqHñ4ÞñŸäk~ÚæÞ+HnmЬ*¬Žá@Úl ckÿû§‚7p÷:MëÝ[ g#ÖlÞ8ÖbbŠ7üÒÎñ¯ÑwnžÐmÎs7LnÏnÛþù>†ªÃ½²ê…ïíÙîå2œ°Q„ óÛÊcŸcèk†ÿ…­Ð9?ïïÿcGü, kþÉÿûVøk¢&íÃD]¹Î`AŒnÏoöþù>†•¾艻wö Ûœæã³ÿ 7ýò} 7þµÿ@äÿ¿¿ýð°5¯ú'ýýÿìhÍðÛELîþÅ]¹Î`AŒnÏþ€ß÷Éô47Ã}s¸è£ns˜ŒnÏþ€ß÷Éô4ßøX×ý“þþÿö4ÂÀÖ¿èŸ÷÷ÿ± 7Ã}7n:*íÎs cv-ÿ|ŸCCü6Ñ@`ÿØ  î㳟¦Æÿ¾O¡¦ÿÂÀÖ¿èŸ÷÷ÿ±£þµÿ@äÿ¿¿ý=¾èÈIc¢©\ç0 Æ7gòØß÷Éô47Ã}wn:(Ûœæã³ÿ 7ýò} 3þµÿ@äÿ¿¿ýð°5¯ú'ýýÿìhÍðÛE]Û¿±FÜç0'ÝŸý¿ï“èi[ᾌ›·mÎsqÙÿÐþù>†™ÿ Zÿ rßßþÆøX×ý“þþÿö4æøo£.íÇEsœÀœcvôÿ¾O¡¥o†ú2îÜtQ·;³qÙÿÐþù>†™ÿ Zÿ rßßþÆøX×ý“þþÿö4æøo£.íÇEsœÀœcv-ÿ|ŸCC|7ÑW;ŽŠ6ç98Æìþ[þù>†›ÿ Zÿ rßßþÆøX×ý“þþÿö4æøm¢®íߨ£ns˜ŒnÏ屿ï“èho†ú2nÜtUÛœæÆìþ[þù>†›ÿ Zÿ rßßþÆøX×ý“þþÿö4æøo¢®wmÎsqÙÿÐþù>††øo¢®íÇEsœÀœcvôÿ¾O¡¦ÿÂÀÖ¿èŸ÷÷ÿ±£þµÿ@äÿ¿¿ý9¾h«»wö(Ûœæã³ÿ 7ýò} ðÛEMÛ¿±FÜç0'ÝŸý¿ï“èi¿ð°5¯ú'ýýÿìhÿ…­Ð9?ïïÿc@o†Ú*îÝýŠ6ç98Æìÿè ÿ|ŸCC|6ÑWvïìQ·9Ì Æ7gÿ@oûäúoü, kþÉÿû?á`k_ôOûûÿØÐ›á¶Š¹ÝýŠ6ç98Æìþ[þù>†•¾èÉ»qÑWns˜c³ùloûäúgü, kþÉÿû?á`k_ôOûûÿØÐ›á¶Š»·mÎsqÙü¶7ýò} ðßE\î:(Ûœæã³ÿ 7ýò} 7þµÿ@äÿ¿¿ýð°5¯ú'ýýÿìhÍðÛE]Û¿±FÜç0'ÝŸËcß'ÐÐß ´UÝ»ûmÎsqÙÿÐþù>†›ÿ Zÿ rßßþÆøX×ý“þþÿö4æøm¢®íߨ£ns˜ŒnÏþ€ß÷Éô47Ã]7nþÅsœÀœcv-ÿ|ŸCMÿ…­Ð9?ïïÿcGü, kþÉÿûs|5ÑvïìA·9Ì Æ7gÿ@oûäúᮈ»·b¹Î`N1»?úß'ÐÓá`k_ôOûûÿØÑÿ Zÿ rßßþÆ€ß tEÝ»ûmÎsqÙÿÐþù>††øk¢.íߨƒns˜ŒnÏ屿ï“èi¿ð°5¯ú'ýýÿìhÿ…­Ð9?ïïÿc@o†º"nÝýŠ6ç98Æìÿè ÿ|ŸCC|5ÑvïìQ·9Ì Æ7gÿ@oûäúoü, kþÉÿû?á`k_ôOûûÿØÐ›á®ˆ»·b ¹Î`N1»?úß'ÐÒ7Ã]wn Ûœæã³ùloûäúOøX×ý“þþÿö4ÂÀÖ¿èŸ÷÷ÿ± 7Ã]7nþÄsœÀœcvôÿ¾O¡¡¾è‹ÃDsœÀœcvôÿ¾O¡¦ÿÂÀÖ¿èŸ÷÷ÿ±£þµÿ@äÿ¿¿ý+|5Ñvᢠ¹Î`N1»=¿Øoûäúᮈ»· mÎsqÙíþÃß'ÐÒÂÀÖ¿èŸ÷÷ÿ±£þµÿ@äÿ¿¿ý9¾艻wö Ûœæã³ÿ 7ýò} #|5Ñ;†ˆ6ç98Æìöÿa¿ï“èi?á`k_ôOûûÿØÑÿ Zÿ rßßþÆ€¾h‰»pÑÜç0'Ýžßì7ýò} ð×D]Û†ˆ6ç98Æìöÿa¿ï“èi?á`k_ôOûûÿØÑÿ Zÿ rßßþÆ€¾è‹»pÑÜç0'Ýžßì7ýò} ð×D]Û†ˆ6ç98Æìöí±¿ï“èi?á`k_ôOûûÿØÑÿ Zÿ rßßþÆ€¾hk»pÑÜç0'Ýžßì7ýò} ðÓC]Û†ˆ6ç98Æìöÿa¿ï“èi?á`k_ôOûûÿØÑÿ Zÿ rßßþÆ€¾h‰»pÑÜç0'ݞݶ7ýò} ðÓC]Û†ˆ6ç98Æìöí±¿ï“èi?á`k_ôOûûÿØÑÿ Zÿ rßßþÆ€¾h‰»pÑÜç0'Ýžßì7ýò} ðÓD]Û†ˆ6ç98Æìöÿa¿ï“èi?á`k_ôOûûÿØÑÿ Zÿ rßßþÆ€¾h‹»pÑÜç0'Ýžßì7ýò} ðÓC]Û†ˆ6ç98Æìöí±¿ï“èi?á`k_ôOûûÿØÑÿ Zÿ rßßþÆ€¾hk»pÑÜç0'Ýžßì7ýò} ðÓC]Û†ˆ6ç98Æìöÿa¿ï“èi?á`k_ôOûûÿØÑÿ Zÿ rßßþÆ€¾hk»pÑÜç0'ݞݶ7ýò} ðÓC]Û†ˆ6ç98Æìöÿa¿ï“èi?á`k_ôOûûÿØÑÿ Zÿ rßßþÆ€¾hk»pÑÜç0'Ýžßì7ýò} )øk¢FI?تW9ý cv-ÿ|ŸCMÿ…­Ð9?ïïÿcGü, kþÉÿû•¾iKòins˜—ŒnÏþ€ÿ÷Éô47ý%wn“GsœÄœcvôÿ¾O¡¨¿á`k_ôOûûÿØÑÿ Zÿ rßßþÆ€$o‡ZBîÜú8Ûœæã³ùloûäúáÖ»·>Ž6ç9…8Æìÿè ÿ|ŸCQÿÂÀÖ¿èŸ÷÷ÿ±£þµÿ@äÿ¿¿ýHß´„ݹôuÛœæÆìþ[þù>††øu¤.w>Ž6ç9…8Æìÿè ÿ|ŸCQÿÂÀÖ¿èŸ÷÷ÿ±£þµÿ@äÿ¿¿ýJßô”ݺMmÎsqÙÿÐþù>††øy¤®wI£¹ÎbN1»?–Æÿ¾O¡¨¿á`k_ôOûûÿØÑÿ Zÿ rßßþƋɛáÝ.6ç9‰xÆìþ[þù>†œ|¦¦ìÜiK·9Ìj1Ùü¶7ýò} Wÿ…­Ð9?ïïÿcGü, kþÉÿûVÙpø"Î0A½ÓT.r6ŒnÏ屿ï“èiÇÁ–ñ–'PÓ×nsÀÆìÿè ÿ|ŸCTá`k_ôOûûÿØÑÿ Zÿ rßßþÆŽUØ9ŸsKþ4Œ“ý«f¥sžqŒnÏ~Ûþù>†œ|.Pu‹U œ‚øÆ7g¿mÿ|ŸCYð°5¯ú'ýýÿìhÿ…­Ð9?ïïÿcG*ìϹ®|;,a×-×nsûÂ1ÙïÛcß'ÐÒŸΛ³¯@»sœÊF1»=ÿØoûäúÇÿ…­Ð9?ïïÿcGü, kþÉÿûvÍ9<,ï7W´ùsÍÓ³ßý‡ÿ¾O¡ªóxÎLù÷škmÎw¨8ÆìõôØß÷Éô5Sþµÿ@äÿ¿¿ýð°5¯ú'ýýÿìir®Ãæ}Ë à9wo¸Ò†Üç1¯ÝŸý¿ï“èiáþš»·O¤¹Îc^1»?–Æÿ¾O¡¨?á`k_ôOûûÿØÑÿ Zÿ rßßþÆŽUØ9Ÿrvø¦¦íÓé#ns˜×ŒnÏþ€ß÷Éô4‡údlXϤ«&N|µq»?–Æÿ¾O¡¨?á`k_ôOûûÿØÑÿ Zÿ rßßþÆ‹Ùu¼l›·_éë·9ÈÝŸý¿ï“èi²øÍ^é¤.s½GÝž¾›þù>†ªÂÀÖ¿èŸ÷÷ÿ±£þµÿ@äÿ¿¿ýË£ÁV°†ÿNŒ.rÝŸýÿï“èiÍàè;µ+·9Î8Æìÿèÿ|ŸCT?á`k_ôOûûÿØÑÿ Zÿ rßßþÆ‚åæðmº‚Q°sœãŒnÏ屿ï“èiÇÁð¡$êV+´’sŒnÏ屿ï“èk?þµÿ@äÿ¿¿ýð°5¯ú'ýýÿìiX.h7ƒá·êV#ÝœqÙÏÓcß'ÐÔxO‘™§¹ÒÙ†wE$cvsŸ÷þù>†«ÂÀÖ¿èŸ÷÷ÿ±£þµÿ@äÿ¿¿ý]‡vJß4¤Ýº] c;³ñÙÏÓcß'ÐÒŸ‡ºRnÝ.¸Îìģݜÿß ÿ|ŸCPÿÂÀÖ¿èŸ÷÷ÿ±£þµÿ@äÿ¿¿ý=Iеlläi!»Ó pfDU8È$¸ß÷Éô« áE]Ûµk1·9ËtÆì÷ÿa¿ï“èk7þµÿ@äÿ¿¿ýð°5¯ú'ýýÿìh¤ÞUÝ»V³sœ·LnÏöþù>††ð¢®íÚµ˜Ûœåºcv{ÿ°ß÷Éô5›ÿ Zÿ rßßþÆøX×ý“þþÿö4¤ÞUÝ»V³sœ·LnÏöþù>††ð¢®íÚµ˜Ûœåºcv{ÿ°ß÷Éô5›ÿ Zÿ rßßþÆøX×ý“þþÿö4¤ÞUÝ»V³sœ·LnÏöþù>††ð¢®íÚµ˜Ûœåºcv{ÿ°ß÷Éô5›ÿ Zÿ rßßþÆ”xÿZ'þAÉÿ?ûì´«eÓ­-ì¾Õ®³¹>[ÿ²ãnÕ»7Ý> stream ÿØÿàJFIFÿá°ExifII*JR(i‡Züÿÿ)( üÿÿ)( 0210‘ 0100 ÿÿ ã ÿÛ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ä Bàw¬ëÝJH^Y¥HãA–f8{šä'ø• £•[æou‚F˜\Pæ/­bú×›Ÿ‰z/üýÉÿ€òñ4ÂËÑçêOü“ÿ‰ HóÖ1}kÍÿáeè¿óõ'þÉÿÄÑÿ /FÿŸ©?ðOþ&€=#Ì_Z<Åõ¯7ÿ…•£ÏÔŸø'ÿGü,­þ~¤ÿÀy?øšô1}hóÖ¼ßþVÿ?Rà<ŸüMð²´oùú—ÿäÿâhÒ<Åõ£Ì_ZóøYZ7üýKÿ€òñ4ÂÊÑ¿çæ_ü“ÿ‰ HóÖ1}kÍÿáehßóó/þÉÿÄÑÿ +FÿŸ™ðOþ&€=#Ì_Z<Åõ¯7ÿ…•£ÏÌ¿ø'ÿGü,þ~eÿÀy?øšô1}hóÖ¼ãþNÿ?2ÿà<ŸüMð²tùù—ÿäÿâhÑüÅõ£Ì_ZóøY:?üüËÿ€òñ4ÂÉÑÿçæ_ü“ÿ‰ GóÖ1}kÎ?ádèÿóó/þÉÿÄÑÿ 'GÿŸ™ðOþ&€=Ì_Z<Åõ¯8ÿ…“£ÿÏÌ¿ø'ÿGü,þ~%ÿÀy?øšô1}hóÖ¼ãþFÿ?ÿà4ŸüMð²4ùø—ÿ¤ÿâhÑüÅõ£Ì_ZóøY?üüKÿ€Òÿñ4ÂÈÒ?çâoü—ÿ‰ GóÖ1}kÎ?ádióñ7þKÿÄÑÿ #HÿŸ‰¿ð_þ&€=Ì_Z<Åõ¯8ÿ…‘¤ÏÄßø /ÿGü,#þ~&ÿÀiøšô1}hóÖ¼çþ>‘ÿ?à4¿üMð±ôùø›ÿ¥ÿâhѼÅõ£Ì_ZóŸøXúGüüMÿ€Òÿñ4ÂÇÒ?ç¼ßø /ÿEÀôo1}hóÖ¼çþ>‘ÿ=æÿÀiøš?ácé?óÞoü—ÿ‰¢àz7˜¾´y‹ë^sÿ Iÿžóà4¿üMð±ôŸùï7þKÿÄÑp=Ì_Z<Åõ¯9ÿ…¤ÿÏy¿ð_þ&øXÚOü÷›ÿ¥ÿâh¸æ/­búלÿÂÆÒç¼ßø /ÿGü,m'þ{Íÿ€Òÿñ4\FóÖ1}kÎáci?óÞoü—ÿ‰£þ6“ÿ=æÿÀiøš.£y‹ëG˜¾µç?ð±´Ÿùï7þKÿÄÑÿ Iÿžóà4¿üMѼÅõ£Ì_ZóŸøXúOü÷›ÿ¥ÿâhÿ…¤ÿÏy¿ð_þ&‹èÞbúÑæ/­yÏü,}'þ{Íÿ€Òÿñ4ÂÇÒ?ç¼ßø /ÿEÀôo1}hóÖ¼çþ>‘ÿ=æÿÀiøš?ácéóñ7þKÿÄÑp=Ì_Z<Åõ¯9ÿ…¤ÏÄßø /ÿGü,}#þ~&ÿÀiøšôo1}hóÖ¼çþ>‘ÿ?à4¿üM'ü,#þ~&ÿÀiøšô1}hóÖ¼ãþF‘ÿ?à4¿üMð²4ùø›ÿ¥ÿâhÑüÅõ£Ì_ZóøYGüüMÿ€Òÿñ4ÂÈÒ?çâ_ü—ÿ‰ GóÖ1}kÎ?ádhÿóñ/þKÿÄÑÿ #GÿŸ‰ðOþ&€=Ì_Z<Åõ¯8ÿ…‘£ÿÏÄ¿ø 'ÿGü,þ~eÿÀy?øšô1}hóÖ¼ãþNÿ?2ÿà<ŸüMð²tùù—ÿäÿâhÑüÅõ£Ì_ZóøY:?üüËÿ€òñ4ÂÉÑÿçæ_ü“ÿ‰ GóÖ1}kÎ?ádèÿóó/þÉÿÄÑÿ 'GÿŸ™ðOþ&€=Ì_Z<Åõ¯8ÿ…“£ÿÏÌ¿ø'ÿIÿ +FÿŸ™ðOþ&€=#Ì_Z<Åõ¯7ÿ…•£ÏÌ¿ø'ÿGü,­þ~eÿÀy?øšô1}hóÖ¼ßþVÿ?2ÿà<ŸüMð²´oùú—ÿäÿâhÒ<Åõ£Ì_ZóøYZ7üýKÿ€òñ4ÂÊÑ¿çêOü“ÿ‰ HóÖ1}kÍÿáehßóõ'þÉÿÄÑÿ +FÿŸ©?ðOþ&€=#Ì_Z<Åõ¯7ÿ…•£ÏÔŸø'ÿGü,½þ~¤ÿÀy?øšô1}hóÖ¼ßþ^‹ÿ?Rà<ŸüMâ^‹ÿ?Rà<ŸüMzHp{Ò‚ yÜ_ô"ÀÇ[y?øšêôÍn×R·YígI¢nŒ‡?‡Ö€6¨¦#îú(¢Š*­Ô›šµYz›í‰¨ɾ(ê²²ÙÙ+‘Œîà»qŒÿßYüy¾êë~"J_P´ç “ÿe®3uK6ê|qË0Å’×|…¶Åõ8è=ÍVÝ]7†¼U‡esm=¡¸¶T…OÏ$œ…ë‘ÇJç÷Qº»­I‹S³ð½àÓaœIw?ÛmÔƒóy˜=3ÅGb¶:~“¨]¶“§Ý?öáµæá#8á}1Ú‹koë§ù‡Ÿõ×üŽ'u«¾²Ò´ë_ëšzéblc<œsÇZ¡ñœêúyxDtØwD«´!Ë| vÇLPö_×AÛs™ÝFêô[-GÔ´Û}A­íbþѲ[(QbPëçËØü£ž´ÇÓ´øgÕRÇH´¿¾Òm`…-Ì;–W?ë$e¹ŸÞ—þ¿®Ÿx–¿×õý#ÏwU¥Óî[I}P*ý•&ÝÎò3Óé]Âé:l$y_KµWþÅ7²ØÈ›£Šn8Úzj††»áÙ[P·´·ŽMPí¡O*D»Sà××ñ¥ý~6ëð¹ç[¨Ý]‡mãŸZÕ Ô4HVðºÇüKÌÖÖÍ“ò”^(k©|9¡Å›–ϧÀøÛ’Ñ6@ÛætQÓsO}ƒ©ÆÀÍ[Ôl.´›Ö³¼@“ª« ŒŽEwö‰ioáR9¬mòÅ!+qm`mÁ$€på™Ç^Ÿá¡â+T¾¼Ö’ûH·K[}ëV²ùbSn±ª ^¯É8êN&¹Ý.ÛO»’EÔu_ìäP 7Ù^mçÓ x§mZK•·SàŽK›ˆà… Ë+EÄÄà ×ð•¥¥ß,í&Tºµ2H?xŸ,€+JŸ 85·,VZ…¶ƒ©®›gi3kÖDµ‹dn¸Êúñüè]?¯!>¿×õ±ÇÜÁ5Ô¶×1˜ç‰Š:Ò>œQmmsy!ŽÖÚ{‰ÉHcg zà]ûÙÇ ÝÕ§‡í5+•ÖZ–¾nØð Àw“× ÍU%Ô>0Õ¬´kÛ«-.ßË–ëì¬Å‡ËŠ’r[ü1Ikk”Õ¯oë[3‡ŠFŽDdu8epAЃғuiøªþ}GÄwWsÙÍfdÛ¶)«í{œV6ê¨6ê7T;¨Ý@‰·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›u&ê‹u#1Øq×¥g¦^ß§™ "Eœ•°Ó¹¨ïlo4ò¾z.Æ8‡*O¥o‹‡F–Â2Š ÎW¶0 A};>™p—ÈH ņ{u½bZ[]_Jc·Œ1y‰À_©«Wz>¡g •Ö)FXÄÄíà⥲™bÑ@St ÈÁ¶Ÿ¾QÓŠ· ÌIz‚ ƒ"˜Ûpó‹Ž«Ž¤ûÐ qu:Ao’G8U^õ¶ÞÕÖ0}•ÛêÖ_›õýi<:ÑC}|É€GËû»Ž’ÖŒWwkÞ²o;¨ÜÇѽ®p?à\Uñ2„ÜcÐõð˜ u)*“o^Ç(Û‘ÙJ:œ2°ÁÒ»?‡œ¶ºÜ¶ÁÏ“,eŠçÀŒÈšæüDèÚ±uÆæKÿ½ÏôÅ\ðd…|B„pÿJë¥>x©w<Úô½•ISìÏ¢¬fó#5 +GrЭmŽ•©ˆ´QE¥djßê[éZç¥cêßê[é@ñÿÄÂÛþÿ²×ººÿˆñÿmÿÿÙkŒ¤ÆIºÕ8êiÌŽ˜ÞŒ»†á¸‘ê=©n×T¿²FKKû«tc–Xfd õóL×BºœDdóJy‡iïc?{ß­U¢€4YÔâšY£ÔïRYqæH·ñÓqÎOãM·Õu 3!µ¿»€Èræ)Ù7SƒÍQ œ д¾ºŽYeŽêt’`VWY¨cžA÷¢ÖþîÅËÙÝÜ[; †VBGÔªÁ‘ö8*ãøX`þT™  qê‘]¨îîå²LË+9ëóg4Û‹Ë‹É|Û«‰§—ß3—l}MV¢€-%õÔqÇ]N©ù‘ªÈÀ#ÿx ð}Ç4±ßÝÃt×Q]ÜGrÄ“2JÁÉ=rÀ皨N:œQ@Æ¡x³Ë:Þ\ ¥R²H%mÎPÇ9 ûÓVòá-þΗ,ÄžPrpþ,tϽV¢€4W[ÕRi&MRùe—d‹ráŸ2s“øÕë_]Ùx~m2Ù§Šin¾Ònã¸eº^99ÆsšÀ¢€.A¨ÞÚLó[^ÜÁ+ýù"••›êAÉ¥òÝ›µ¾ºG¬âfóü 9ªTPøõmF+™.cÔ.ÒâO¿*ÎáßêÙɪÒM$Ò´²ÈòHÇ,îÄ–>¤žµG(Ί.70ž™=¨txœ¤ˆÈ㪸 ÀзUí ϱýí—e'>GšÞ_¯ÝÎ:Õ Aèihüº¾£=·Ù¦Ôo$·ÀSÎì˜>RqI>«¨]@ ¸Ô.æ„tŽYÙ”~â¨Ñ@êxà’žU†\y‘«¯Ž™=ê=Õb ©­fY­æ’WîÉ•aÛ‚9ñv±¤kwp9<ÔQ+a_ûÀg†÷ëU™1½w Ãp##Ô{Sh¡ƒÅwÖÚ ú|RÜ¥Ä×_ikŹ`çå©îsŒç5™oªê#Zêp4§2§d.}N=OZ£EZ¹½¹½›Î»¹šâ\c|Òlzdš‡uGEIºÕ&ê7TtP›¨ÝQÑ@n£uGEIºÕ&ê7TtP›¨ÝQÑ@n£uGEIºÕ&ê7TtP›¨ÝQÑ@n£uGEIºÕ&ê7TtP›¨ÝQÑ@n£uGEIºÕ&ê7TtP›¨ÝQÑ@n£uGEIºÕ&ê7TtP›¨ÝQÑ@ Ô%pÊ:qŠI¯^ãØÎvŽõJŠ» Û[±1¿ªš–]RiWní™ï’MfÑ@ ¹ì¯›xéÛÐÕöñ›‘÷²OéëXTVU(S¨ï5s¦Ž2½¸Ó•“'–fšFwbYŽI=ësÁ§> O÷ô®rºÈŸîéZ¥mÌÛnìúDÿR¿Jß+DÿR¿Jß*„-Q@éXú·ú–úVÁéXú·ú–úPƒ|CÿûoøþËY~‚ ïïLéhÞ]Œ²#]Ä$c A§ÐÖ§Ä?øÿ¶ÿÿìµËØêéæäĨßhàmàœ+u#ž´ŸPìnD­q>£¶îÀyzlŒ[K·X‘Æáò°1®,ôæ­M¤.¯}f$r°ÛèðÌádD-€PÎv®Išæ,¯å°"%CöˆÜ H'üUèüGyÛ¿•lþU·ÙX:&‹²¸Ï8õ-xÄ“@tÛ ,äq(µur‘¾1¹Níà sóQö¯ýtÚß×SkÄQ¹ñT‹<ª‰,Æ6í|ç¸ÏÄVwŒ#Óá×·šL8.¾_A÷T(+ø“Tîõë«Ã©Rý èÒíR6í'yã¯|Ó5Maõm=¥ª\ y—«—78íØ ”´_×b¯©[:T_èú¡†3y ¨$Ú7Ÿ}3×Nì³XÕkN¿›LÔ!½·Úd‰²Œ«„Ü~µ^B:K 8­ï´KÏÙïZ nn."Uóô%S$ÇûF£Òü/iq§Ù\^Ü4fð±WPD°(b¡™\î~A8\qïY ®]uõr#k—f$vÀ®Ï@ö¶úãÇa•Å•äQ0›„bÑg“‚¬8Ï89¼ÀÔÓü-k}s§w"[O¾|¡”ì•X ã¡-^ÍÖ²5 5,4û¤WG’6ÆCm\qœ’­úQµyo£K¥ÆTA$¢RØùàC…'ýÑMÖ5{oPkÛ¡‘”.ØÆ;×êi¿ëúþ¶…tž¹FvòØiÓ¬6sÌ­5œnû•Ib¹<ö®n­ØjéÏ3¨Æh^Þ Â°ÁÇ=hèÅÕBÃM¸[ õ6–õ#˜ÖÆ(⊠°»~lN>¹¨N‹e§[M6¯%Ëm»{DKBªILnbX9çÔU{/ÜY[A µ´¸6Ì^ÚIã,ÐsòòçœFi¶ºôðE,7ö×ÑI/žRé 'v ä÷ìhôþ¿­GëýZ“éßÙZGˆ¬Ä¾j$–¬ŒnV%”‘ØàŠ—Æú\vwóÞ\<¾}ㆶXñ°"¨ XrsÆÑ‚:žÂ±^¼›ûGÏMý¡7zô*r¥qŒc·lv§Þx†òý/c¸HZ;§Y m8‰Ô¹9à0zä~—õø¿}me ñ!ÔEÍç•5°†D—‹að«èö‡Ã«¨@——R•c#E*m¶Ã` inœîàsLÿ„–å¯/§žÖÒt½ÛçA*6ÂWõïQA­µ­¤ÐÛXYE$±¼Mpªûö7QËmèqÓ8¢ÚÜÊ«zTi.±eˆ®q²°È °È"ªT¶Óµ­Ô7xdPÝ <ÕE٦ɒºilzŠxƒVÍÞ—aÈÀÈîzb±"Ö."Ôî¯Õ"2܉C‚Ñæÿ´qRI®=Å‚[\ÙYÜ £! G ƒZ:_ˆ‘ ­}³´Ö´ˆ4lDܪø>™ç­dj:¬ºˆ 0[Á•Š„Lœž¤’IêI4=ÿ®ïþ–ß×dQ¢Š)€QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEWCàÏùSýÃý+ž®ƒÁŸò0Çþáþ”ô&‰þ¥~•¾:V‰þ¥~•¾:UZ(¢€Ò±õoõ-ô­ƒÒ±õoõ-ô =Óôû=SÇÚ^ÛCq ÚÌv˸4g pxÆ}Ív¿ðƒøPuЬïÕrZü”‹cÿN³ÿ4®ÇW×ãÒuK i¢‘¢ºY xãyvŒ*‚NsHÿáðŸý¬ïÕðƒøOþ€V?÷ê­\ëúuÌv÷IÉ·k4ËtöíúY‡ÅVÖ:þ©g©\yPÀbòˆ…ˆPË’Y€ ÷8§`,ÿÂá?úXÿߪŠçÁž‚ÖYáÐìD¥ùX à‚ X×uñ£[Å*YMt$eÓˆÐ3É~ø$þµ¥|â[t?é‹ÿè&‹•ÿ¯‡è¥ÿàáGü"¾ÿ —ÿ€qÿ…kÑHfGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ©4ÑÛÁ$ò¶ØãRîØÎ&¹ûíBëÈR]¬)…ñæÀ ›yùsÆêƽxÑ‹”„Ùsþ_ÿÐKÿÀ8ÿ±Ýiÿ?PßÁGÛ­?çêûø(z*·ZÏÔ÷ðQöëOùúƒþþ žŠƒíÖŸóõýü}ºÓþ~ ÿ¿‚€'¢ ûu§üýAÿn´ÿŸ¨?ïà  è¨>Ýiÿ?PßÁGÛ­?çêûø(z*·ZÏÔ÷ðQöëOùúƒþþ žŠƒíÖŸóõýü}ºÓþ~ ÿ¿‚€'¢ ûu§üýAÿn´ÿŸ¨?ïà  è¨>Ýiÿ?PßÁGÛ­?çêûø(z*·ZÏÔ÷ðQöëOùúƒþþ žŠƒíÖŸóõýü}ºÓþ~ ÿ¿‚€'¢ ûu§üýAÿn´ÿŸ¨?ïà  è¨>Ýiÿ?PßÁGÛ­?çêûø(z*·ZÏÔ÷ðQöëOùúƒþþ žŠƒíÖŸóõýü}ºÓþ~ ÿ¿‚€'¢ ûu§üýAÿn´ÿŸ¨?ïà  è¨>Ýiÿ?PßÁGÛ­?çêûø(z*·ZÏÔ÷ðQöëOùúƒþþ žŠƒíÖŸóõýü}ºÓþ~ ÿ¿‚€'¢ ûu§üýAÿn´ÿŸ¨?ïà  è¨>Ýiÿ?PßÁGÛ­?çêûø(z*·ZÏÔ÷ðQöëOùúƒþþ žŠƒíÖŸóõýü}ºÓþ~ ÿ¿‚€'¢ ûu§üýAÿn´ÿŸ¨?ïà  è¨>Ýiÿ?PßÁGÛ­?çêûø(z*·ZÏÔ÷ðQöëOùúƒþþ žŠƒíÖŸóõýü}ºÓþ~ ÿ¿‚€'¢ ûu§üýAÿn´ÿŸ¨?ïà  è¨>Ýiÿ?PßÁGÛ­?çêûø(z*·ZÏÔ÷ðQöëOùúƒþþ žŠƒíÖŸóõýü}ºÓþ~ ÿ¿‚€'¢ ûu§üýAÿn´ÿŸ¨?ïà  è¨>Ýiÿ?PßÁGÛ­?çêûø(z*·ZÏÔ÷ðQöëOùúƒþþ žŠƒíÖŸóõýü}ºÓþ~ ÿ¿‚€ Ûo¶X\ZïÙçDÑîÆqFqø×!«ÛÏ¤Í ËqÂevb(AR¾¬s÷¿JëþÝiÿ?PßÁUîN“y·í_bŸnvù»ëŒ×.+ ñ³ß£F“¥Ï¨ÛÛߨÒ/?w–!$‘œ Û»íôïV|eÿ?õø¿úÖÄ3éöñ,PKkkÑ•@übø¶HæÓlš7W_µ¯*r>ãÖ”(FŒyb XÓÑ?Ô¯Ò·ÇJÀÑ?Ô¯Ò·ÇJÜ¢Š(=+VÿRßJØ=+VÿRßJã¼Us¯Þ}¨Þ}«È謽¯‘—¶ò=syö£y¯#¢käÛÈõß5ýhó_Ö¼ŠŠ=¯{o#×|×õ£ÍZò*(ö¾Aí¼]ó_Ö5ýkȨ£Úù¶ò=wÍZ<×õ¯"¢käÛÈõß5ýhó_Ö¼ŠŠ=¯{o#×|×õ£ÍZò*(ö¾Aí¼]ó_Ö5ýkȨ£Úù¶ò=wÍZ<×õ¯"¢käÛÈõß5ýhó_Ö¼ŠŠ=¯{o#×|×õ£ÍZò*(ö¾Aí¼]ó_Ö5ýkȨ£Úù¶ò=wÍZ<×õ¯"¢käÛÈõß5ýhó_Ö¼ŠŠ=¯{o#×|×õ£ÍZò*(ö¾Aí¼]ó_Ö5ýkȨ£Úù¶ò=wÍZ<×õ¯"¢käÛÈõß5ýhó_Ö¼ŠŠ=¯{o#×|×õ£ÍZò*(ö¾Aí¼]ó_Ö5ýkȨ£Úù¶ò=wÍZ<×õ¯"¢käÛÈõß5ýhó_Ö¼ŠŠ=¯{o#×|×õ£ÍZò*(ö¾Aí¼]ó_Ö5ýkȨ£Úù¶ò=wÍZ<×õ®?Á?òýÿlÿöjëkXÊêæ±|Êãü×õ£ÍZeÊæ¿­kúÓ( ù¯ëGšþ´Ê(þkúÑæ¿­2Ššþ´y¯ëL¢€æ¿­kúÓ( ù¯ëGšþ´Ê(þkúÑæ¿­2Ššþ´y¯ëL¢€æ¿­kúÓ( ù¯ëGšþ´Ê(þkúÑæ¿­2Ššþ´y¯ëL¢€æ¿­kúÓ( ù¯ëGšþ´Ê(þkúÑæ¿­2Ššþµçº–§6«ckq2FŽnŠŸ,‚rO?1®þ¼Õäkÿ_ÿ -c95V+×ô:)Â.„ä֪ߩÜhŸêWé[ã¥`hŸêWé[ã¥ns EPzV>­þ¥¾•°zV>­þ¥¾”ÉøsþF—ÿtÿè-V|mÿ.?öÓÿeªÞÿ‘¥ÿÝ?ú UŸËý´ÿÙk:Ÿ "§Àr]*!s £$ô…KU’Î4¸2ƒÇU^ÀÖ ÝNun¥š¯y;[Û–Œ•ˆHÔô,zUЧuf×W1r°Æ ù«n”«yȪö±Ú¯”šE†Už~SË”çvNáÆ)ÛL<•”¦ÈGÊ?1Æ2hÐ4&’à$¾Xä|n!@à~&š×±¬›v¹‚åö¦Í²Ü#…`C‚wc¸¨à²håùº, vÏ?ìôÍ ²±,W%Ì©°˜Õ¶†À8ç<Ñö‡ûi‰P²*Œ‘Ž õçÒ–Ú)aÞ¯°¡bÁ999æš±N“NËå•äNAÆéF¡ºpǺO2Rííqϵ<Üm¹‘ÝŠÇc*}OõÿjÚË·1ùgËB„1#®2GåD¶rH'—çuu䎘àþTô„ðÜ ™—c£(‡àôþU5Am ‰X²(v<ųøžjz‡¾„0¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(ª×ÒM«<*Iæ d¨î@îjÍTÔb¸šÍÒÙ€~ã¦áéžÔÖã[™íªÎñƱ•ßžF|ÓØc·½m!bŠ\ØäœçÛF¼Ž8¤Š@f$n\à'¡Ú·Ð0C°fdŒš©òô*|½¿Á?òýÿlÿöjëk’ðOü¿Û?ýšºÚÖŸÂoOáAEU–QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEæ«ÿ koúûý+Ò«ÍSþ@Öÿõöÿú Vþ4>¡ÕKýÞ§¬S¸Ñ?Ô¯Ò·ÇJÀÑ?Ô¯Ò·ÇJè9¢Š(=+VÿRßJØ=+VÿRßJäü9ÿ#Kÿºô«>6ÿ—ûiÿ²ÕoÈÒÿîŸý«¹Nõ2WV•Õ"¢½u¥ÝUœá8,qœ^¢GòÓv2r¤œ ÏØù™{3Ȩ¯\òn±Ÿ:öòÉÇã¸SL7óñýù?ü]ËÌ=™ä´W«2Þùy·ÿ¿ÿ‹ªZ…Õõ½Ê£Fgh$û<¨˜Ä ©'Ó?‡J^ËÌ=™æÔUøKaì|ÌÊ+OþÍoþò…ð–kóûÿ“ü(ö>aì|ÌÊ+OþÍoþò…ð–kóûÿ“ü(ö>aì|ÌÊ+OþÍoþò…ð–kóûÿ“ü(ö>aì|ÌÊ+OþÍoþò…ð–kóûÿ“ü(ö>aì|ÌÊ+OþÍoþò…ð–kóûÿ“ü(ö>aì|ÌÊ+OþÍoþò…ð–kóûÿ“ü(ö>aì|ÌÊ+OþÍoþò…ð–kóûÿ“ü(ö>aì|ÌÊ+OþÍoþò…ð–kóûÿ“ü(ö>aì|ÌÊ+OþÍoþò…ð–kóûÿ“ü(ö>aì|ÌÊ+OþÍoþò…ð–kóûÿ“ü(ö>aì|ÌÊ+OþÍoþò…ð–kóûÿ“ü(ö>aì|ÌÊ+OþÍoþò…ð–kóûÿ“ü(ö>aì|ÌÊ+OþÍoþò…ð–kóûÿ“ü(ö>aì|ÌÊ+OþÍoþò…ð–kóûÿ“ü(ö>aì|ÌÊ+OþÍoþò…ð–kóûÿ“ü(ö>aì|ͯÿË÷ý³ÿÙ«­¬íî{íÚæå÷Êû÷6ÎŽƒØViecX«+QL ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¯5Où[ÿ×Ûÿè)^•^jŸò·ÿ¯·ÿÐR°Ÿñ¡óýª_îõ=cúƉþ¥~•¾:V‰þ¥~•¾:WAÈ-Q@éXú·ú–úVÁéXú·ú–úP'áÏù_ýÓÿ µw)Þ¸oÈÒÿîŸý«¹Nô†sºÏ†o5mM/ª cÈQnIˆõÈ;Ç9ïŽÂ·H‘máY\<ã Ê»A;†N2qPM¬évÓ43êVqJ¼2<ê¬> š¥Žh"–'Y#wŒ«¡Èa¸r 1Â)f ($ö… øuß´²½³DCF®Ù2ÂßrAÇàñÛcĶ׷º,¶V*|Ë–X]ÃåÆÇÜú.k*= PÓ5Ý>öɯ¢›YÖEŠ?.,eHÚ«œ0§ž([ÿ_×ôÁíý_Ò,ZëÆ÷\¹Ó¾Å<+ BE–a´Éóáz㎧¯¥3Ēω4¶Ð=ÅÂG3E `–‘„áFäž)ÿb¸.šøÇþŒÖI|¼‰ëЊ›S¸û%¼w;ü–y6/VÄ2Ê—D_õÐåšêçKð«êšŽ•z’E ‘¢ 7`rÅKàóœc z ‡LÖ"Ö´å¼Òãó¥x‹¥¸™X» ñ‘ÀúwÇAO]ñ9ñN…s¤i¿èVD-½ÄóN#eÜv¨nê¤õë‘F2'Âhb-â'¼Y#³ÌK’±²8,_ c`ʨ#€pAÎ1Sœò|¯bœcjµîCeâ 5-IÅÞ¢4ëI‘ŠyD/<``GMÜàãØ z¬Vï%Ô }ªX$Ç™æ¼c79ç Ä3ó§u{¦X[Ïe /,‘»,w²üè$Êþð}á€;sŒqV/"¹´d·IÒvÚD9=6œç%³ÓÚ®•:R•X´Ûi&·]Ó.1ÃÖÄÓù[›[§ÖÛ2÷‡]VÏPŠ E’£y°YŽå# †H ןҴ࿋Q¸²‚)šìßÛ²8t‰Îå ÈÊâA€r2x9¬ÙΗ§èÚt–zy{¨S7 Ÿ9]Nã¸6ð¿Â@ã©®iüKug«FTcYCù¤–tüØn8å‡NœVNµêÊrŠWå…».¾O#*”ãM®K6ÝŸx®­3k]´’æþEŒ< òTG¸|ª€yç…Ïz¯oá‹«™d‹ºì^¹ã3ZãR[¥KÓîƒ4Üž¸#ò§MfÐyí6ã9‘Ÿûèc­x2›rw_í¨¤¬ŒÇ·Œðªüz‘\‡Œ$Ù•Î3•ýGôÍz>-gµmâ!” väzõÇé\ŒÒÊm@Û0%–Õv¿Ýu Ý1éZáê¢+i_øh1Ỏ:Ý·þ€•Ù×!ðäcó/¥Óè)]}}ã…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@•áoùlÿàúV½dx[þE›?øþ†Õ¯HaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP^lŸò·ÿ¯·ÿÐR½&¼Ù?ä oÿ_oÿ ¥a?ãCçúT¿ÝêzÇõ;}ýJý+|t¬ ýJý+|t®ƒZ(¢€Ò±õoõ-ô­ƒÒ±õoõ-ô Oßò4¿û§ÿAjîS½pÞÿ‘¥ÿÝ?ú Wré ÅÕ¼1k«j]»´xâtQþ¹G@}>¾™˜×•BǨD‘€Aó –£›î§ýtOýShÓ¥<Ó¥U“­aø¦$ŸÃ·PÈqάr·”¼~|Väk7W¶KÛ!k&vNd°qÃC <à㯥 <'LÑìa°þÅ%¾›,ðÄÓH¦Tögc³Ê°½q€#;šçö^ –76©«­¾ËuïåZà€0™P7´œ@ûKžo.•h4«‹hLWº¶â©ƒçœ Ã2@Åc<ǧPf{(QÞ”$C?;2¯;Anß_Zçr9>ï_¸Ò)É_¡ÏøCÄ>ñ>µ:øžÎ [;-8y ç²C‚ٙب_R0ܽ‹´ -®tÍN…ÛOÝqopH Ü~H·7³܆$rTã# 9}Biú"êŸÙ·q^Ü\"¼‘(ÀŒ³|ÊqŒ‡NrxàZêw>dvÈ<Û™öM,’Çó¶B… ·?0BNIr2uÆ´ªN*oOË«·õ¹›§N4ÛÅøm¦§o%¶¯©nî®#Q#¬Â+xĈBírààÈ“š«ÿÞeœ"{’G3Lw´l9^ÜàŒŸLw«Íâý€ÌòÈUÞHÔŒŒ©‘úd€¡‰ÎÜy«ö¨u_ }®Ki£·š5gˆ¸6TŒqŒ6ì—$àJ¿$½è?¨Jpvüt2¬´(–Ròiìfhò!Ø0  yÛìIïÎjâiº‚E"ŽÈEX&‘Œn,[Œò <ô9 bº}:ÖÃL±) EŒHP–p7¹ëÉêIžþ¦±oî®LËs Ær˜‡¶Ò~ÿ=˜ƒØdôæ¹gE(ê÷:–2«m[c•»±¸hSì÷ ök|™¤”©!3ÏA–\“‘žAÇ5zÏÃLR^… $Ã(‘qÁbãÀV°ëÀ«PÛµõ¬7R¤§tÆGp©åqÜŸL``~•¢—ϧ^ùN¬¦à*ÆFv¶ãœœuÀ®*°öp\§D+Ê«å—CŽøz6è7Òé¿ô®²¹D!ÑîQdµ1 9ùÒºzõQç°¢Š)ˆ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šô¯ ȳgÿÿÐÚµë#Âßò,ÙÿÀÿô6­zC (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ódÿ5¿ý}¿þ‚•é5æÉÿ kúûý+ ÿ?Ðê¥þïSÖ?©ÛèŸêWé[ã¥`hŸêWé[ã¥t‚ÑE•«©o¥l•«©o¥r~ÿ‘¥ÿÝ?ú Wrë†ðçü/þéÿÐZ»”ïHcª9¾ê×DÿÐ…IQÍ÷Sþº'þ„)ˆ´iÒžiÒ€*ÉÖ²µÉ¥·ÓZheX¥ŒJé#0†B È#úƒZ²u¬/Ì-ü7w1Ua¹VòœÞ“Ééþ.²’Á—S™¥¿· & §˜ÈÄ|ª Æ>PØÝŽõ~=KÃqÙ¹’{{«›ˆ›1È<ÒCuBvçn[0Éžœx½ß‰£µº‰ š+ȈBˆÊÙpC.Ò08ã?JÌŸ_Qfge²Ï‚Br6q’s×W2§mìüìi¤žš³ÚC{öP1Ì.BI<¸Ï`6Wh¹uÛž .J‚3‹ú&‰¦h~ [UR]Q_uÜ4ž^ÿ˜°n^£ƒ“‚sò“Œ 3-†Ÿ=þ™=½Õô­.^QFF©SÈŒm탂ºö¿.l´´·Ôôà’Fãh6ÂFu%I^žÃB¨×ë4”:3wPñ—r`Ó´»X­Ì8Ë µ—dXî7Ó äî\Ïëï¢èÂó|Ñ€BF¹Xä$ýðÀބއ&£°ñG…n×Ë`öeT¿ïOÙ̬A$—ßqÁã¦* ÚËRkh´ÝFÚí%Ù–hY›¨$£á‹NžàÒX‰9Zqkúò.{ü2Wóÿ‚0jº…ï†ä›Ë’nPgŒî‚' žä 㟦á]CûM¸¶º 4…ËÇ2 Œ€œžÝý©5=¤öóZH¶èK¤&Û÷¹ùóÀÇ;€>˜°ÛP»·y,¼§X•¸9(ù±Ÿºp:ã°ãŠÑN-h¬jFNëÔÛ¿»™m<«RѪIæ(Sò«`ÇLŽ8ã¿5jÊG·&UV»ˆ²'bb¿S\ü:©’Ñí%Þ0æ1#+?CÎXdtéŒõ`æ´¬%YLF2Y¹rU³÷SN˜àóÍEX?fù·2¥5í4EoCäè— ’Ò˜óþê×SX>Aò€/d~ [ÕØÕÌ^áESQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEé^ÿ‘fÏþÿ¡µkÖG…¿äY³ÿÿèmZô†QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEæÉÿ kúûý+ÒkÍ“þ@Öÿõöÿú Vþ4>¡ÕKýÞ§¬S·Ñ?Ô¯Ò·ÇJÀÑ?Ô¯Ò·ÇJè9¢Š(=+VÿRßJØ=+VÿRßJäü9ÿ#Kÿºô®å;× áÏù_ýÓÿ µw)ÞÇTs}Ôÿ®‰ÿ¡ ’£›î§ýtOýShÓ¥<Ó€*ÉÖ¹¯œx3T?ôçuÿ¤Ò×K'ZÎÕm⺵K{ˆÖHeiDaÊa}±Rݕƕτî9 zŒÔæI …@'®:WÓ á[™þÕ¤iñDá»(É*9û§žŸI…|u)ŠßMÒf.â±íc\Ò¸¾¿O~Wý|Í}”¶¹óÉ,xØäc ì+RÓÄú¥  .Ð mrH?žqøWÑ1xSÁ3Ü=¼Zf•$é÷ãP¥—ê:Š.üákXƒ¯…í'õ øÒxê/Gø˜Õ)­™áð–YÝ…]CI·cŒ‹1ŸÓ#×µK^¾#ì÷·VRò,©æªóœ¤Ǩ=zW³Â=àç¶´š A9º,4¹ÝÌÆëN¼ðׄ¬U Ä"Ú­$‚Ý Å“›žqßnj~³M;E5÷™V“ÞÌòÝ:ÒþÎþ-CH×­ZอæYŽFr’ªîtƒÒ¶®µ KÈtÖ-¯À³Ï;ÛEpŒÌ!U”ô €šï%ðï…m/#¶ F‘³ˆÖqò÷7A×?Ž1šÓFÑô˘㷳·¶Œ£»2Lc+·äsÉíøÖsÄÆVßúùšÃÝ<ªÊ×I¾˜M£¥ ƒ’o7}³Ý’p¥ƒÓƒŽ„ y-e¶¾hn,Ì+,`L0ÏqÐqžryüpº„ïÒK•¶Óîy’PáÀúœÔ¶:†å‡vŸohñëo&TÀõ©x­mØŸg ó(«÷<÷à ºßP97Òr;ðµ¹[÷v:.Ž[þ%Iß,ÐŒ"’q–ù'×Ô“Á¥[^Ço.›r¨î±¬ù>^ãÐ}ìûg®¨ã¡e£ü?ÌÅÒwzœåИtåÔb²“G»F”°I ŠT…êx:vî) MIäŠ{¬Ù#ósrÛALãvw~8<Óúô;?ÃüÅì_sŸ¢ºkËmÆ e’-ÞP’7gnF@À=ê;ˆ4Ø,£¼]*âh^/5™$Q±qŸ›sŽÞ™¤±ôßGø˜ýŒ»œí¹,š,1Æí¦Ý`Â'” æ= üß^O¬ÝÛè–—V–Ïní-Óm@ŒÇçž?¯Cù_áþböO{œÕÒßZiVOcOšyd Ë,sµq“ËÜwïDÖšJè²jpÚù‘ˆ è Œ»†ÜŽüRúý;^Ïðÿ1û^×9ª+£[}k?>Õm§Ã"°X X‚ryç§~”û} Py£Ë ²ç3Eu£LÑŽÜ,Gs”\LyaœÏQƒÇ±¨á´ðýÏ™äIm/”3&ËÛ¾ŠŸí }Ÿõó°—s–¢ºh­4k™¢Ëo<.®L‰tO+Žž¼úqëJ–þ’9dIíZ8¿Ö0¹ÈO©ÝÅ?¯Ãù_õóbûœÅÕ -Ú°öæØu˜\Ÿ÷ÖqD¶Z 6éq+À¿Ü‘®VúàÑý¡Où_Ýÿ=Œ»œ­ÐÛÛi×5½ø²|í‡kÜ2¸÷¿Ç¥XK=K‡·àyÓ;¢[‚\c®FsCÇÓWÑþæ%E¾§-EtV‹áËÍ?í¨Ð¬!A}÷òóÙ¾n X–ËA†Ùnex#þì­pB·Ðç<|³‹û¿àØ·Ôåh®©ì´Ä%ÞÝDßê‹\æ»Ï?…/ö~‡ö¿²f´ã>Ožwã×nsGö…?å×Ì=‹îr”WO¨Yiº|>qÓg™,æ'û€u'sÒ™{k¤Úi‹~-CDÆ>ZV\`2yãÍ MÚÉëéþaìdŽnŠê ·‡…¯ÚŒ¶ßf'oöŸ“>™ÝŠ$µðôOI-²4 Õ®p\„|ÜÑõúÊþïø!ì_trôWE©Å¢i¨£…®,à«0f 3ž3ŸÂ­E§ès\Io“$ÑýøÖrY~£9}~¯Êÿ¯˜{{\ä讲ãOÐí6}§É‡yÂy“•Ü}O5A[G3”m2é!óͿڲ…÷mÇH猑Mcàö‹ü?ÌN‹[³ Šè|­)îÞ }.êác.I¢?"7q’ÀœwÀ8¨Õ´sqå¶™t‘yæÜ\3|…ÁÆ8rG½å‡ù‡²}ηÂßò,ÙÿÀÿô6­z«¦A¶™0®Ø×vIþ"{ժꌔ¢¤º™µg`¢Š*€(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+Í“þ@Öÿõöÿú W¤×›'ü­ÿëíÿô¬'üh|ÿCª—û½OXþ§o¢©_¥oŽ•¢©_¥oŽ•Ðr EPzV>­þ¥¾•°zV>­þ¥¾”ÉøsþF—ÿtÿè-]Êw®ßò4¿û§ÿAjîS½!ލæËv²¶  ÿJŽâúÖÖ{x'#–á¶D¬ycþ˜õ©er‰•±!FzdœZbomqÿ0«QµõŸüþ[ÿßÅÿwÙ_ÝKŸöUqúƒM6¯ÿ?—’ñ4ÞÙÏí·ýý_ñª³ÉËF u•cß#º¨qŸ\·Oj¶ÐH?åúçòÿ‰¬Ü\Ùh‘28{9ÂHp¯ˆ™@ô?L 9ß"ë _—SŸ“Mºm\Ïäæ#~“gpû‚ ¹Æ½ÅGi¤ÜBö$B#ò§¹,À¯ÊŽ[oó^+Êá Ö¿è/ÿ/þ5¿áí~þ[;…¹ÔnÉ…òd’c€­Ðg9ìzû~˜äXŒ%9I5¶—ìaý© 9(½?Ìé´këx¯,’O"(¬-$Ž{…™ e‹  ñ’ ù°kjûSûu¡Eš;¹ …”ÚÍâKHJù=›ˆåØŒà zžx¬írå®f¸FŒ$°X]‡@ኩ۴œtÜ@ª&þóû\ÿ÷ðÓ~ß{ÿ?sÿßÃþ4–QkU§¨Õtõ.^ÚÜMº„¶±ÙÂÀ9¥@'ÚáŽH$Ž}yÅ[ѵšæâx­ʼ¼ §zª± ¶W Œ®8=ë#í÷¿ó÷?ýü?ãGÛïçîûøÆ›ÁÉŦ×ãýt¨‘ÑjËw=ô1 î, Bñ1óÀmÌ8Ϲǥ$Âòmq}>âKHJù=›ˆåØŒà zžx®{í÷¿ó÷?ýü?ãGÛïçîûøÆ¡`f•®¿dή i޵ww2|¢4Š‘Êõcí’@ÿ€ŠÏ´[æKÉîô™šöhÈÄ’EåíþÆœs’HçŸaXŸo½ÿŸ¹ÿïáÿ>ß{ÿ?sÿßÃþ4, û¯Ä=²74Í.êÃH¾ÓÝD¬P˜ç þ´²ã'#Ç=±SÏes.§Øù|f%¹‡ ù =kœû}ïüýÏÿøÑöûßùûŸþþñ¦ðU¿2kZÝÿsU±¾k›ï²Û ’úÕmËo "#pÉÏQ†í“ÅGs¢ê yÐ\A"}¢&!á;‘Hë¼du8ÇV¬·ÞÿÏÜÿ÷ðÿo½ÿŸ¹ÿïáÿkQm$'V/¡¿¯XKy=³‹YnaD‚Q˜âGÎF}84£ÎÚ Æí#_5‘€Æ³0‹vÌp¹Ú>¸¬·ÞÿÏÜÿ÷ðÿo½ÿŸ¹ÿïáÿKQ$”–ƒöѽìiI¦ß]»N¶× o”ΛŸl¡‹¤Œ9ÏZÕÒ"¹µk›i­YSÏ’T›r•pÎX g óÜv®cí÷¿ó÷?ýü?ãGÛïçîûøƉ`ªIYµø‰UŠ6"±¿KÛx £y0ßKqö€ë´«‡ÀÆwg/Žª8ôi…„sY³„Óä‚á#u IÙ…Î}=+/í÷¿ó÷?ýü?ãGÛïçîûøÆŸÔêw_Ÿù‡µö/M§ê—òœÄ‹msI3 eV ·~ÃŽÍÈì9¨mÙµ©.ZÎÑV4KDÂHŒ‡d¥› ¤Žn¾Õ_í÷¿ó÷?ýü?ãGÛïçîûøÆ©a'm×õ¨Dj_i­s<Öñº¢ß-¤F0Î< ¤à®sëéN‹LžÈÙ\Ee=Ê¢Ì ^/1 ŒpƱ¡¬Ÿ·ÞÿÏÜÿ÷ðÿo½ÿŸ¹ÿïáÿŸ©Ôµ®¿¥aûXÞö7SNº³²ò±q„²nm‘Iç8àMK¹ jÆ5¦fÈȼ̽ò¼V'ÛïçîûøÆ·ÞÿÏÜÿ÷ðÿ/©T×U¯êÖ=§jO£éÖÿeš)tù!"eJîMÙ^àüÀTs¬zØ.fFd 8ònf…dVv ‘‚÷µKí÷¿ó÷?ýü?ãGÛïçîûøÆ«ê“êÐ{X“E¢ÞKgh^+¦†k ‘ 0†Ld|ÁÀä}Óœ¥n"ϦÏ?Ù̾}Ì+Ì2Àª!†«Zê¢K‹¨-d·K™Ô¼Œ¡BcpÜJdœg“ÀªöÚêéWPËm—};É@̙ߺBï/µRû}ïüýÏÿøÑöûßùûŸþþñ«ú¥KY5øôµ‰§u¦ßnºˆXùÿižEÀtùìÈlxÚqŒõ©a7Ú]ä¦)¾Äò`G+¡ùÞA’…rvà³ߥcý¾÷þ~çÿ¿‡ühû}ïüýÏÿøÒúœíf×âÑt:-nÞ鿆â ší•$VË‘•pÇ$­þ¥¾•°zV>­þ¥¾”ÉøsþF—ÿtÿè-]Êw®ßò4¿û§ÿAjîS½!˜Z§…-uk滸½½W *ª2€w*Hçžµ°PÇo B¯.øË|ÓŒ Ö}ç‰ô› ©m®n$IbÆñöyêÎK‹hf%£eÜ¥N Ç‘LE¹æKx$šV jY˜ö’kžðî½wªËq¡l–òí[›u\üÐ?Ý''ï `þ¡â:ãVÒ^ 4Õgfb•‘¼ ¤qøÖcx_ìšµ•í…Íà ÂÝ]É&èXtRÄà† {Rþ¿¯ë¸?ëúþºÏsâ[{;xcþÏJ¾{gtŽ˜ÎÞÛA8Ïrã?ˆí¦½Ñ&µ·MóÍÑÆ™s%dð95LxFMcL¸³šám­ƒÝÊØÈB‚HÇ#ŒûÖì¿ññeÿ]Ïþ‹z¨¾VšÝW½Ï$Ò¾k7hQº·ÓÔ©;TyÒ)Î0@!pzðÇ·á§sàMÃ^)ѼĒòÆô¼.oÙÀœ€-Ê…=yë^®Es>=²’çÂw6åVïOe¾Øà#FrN9åÝ€A?tVÅV¬ïRW2…(A{¨»om¤ ´à ýØâ@ª;ðÊxž?°x§GÕpW*Ú|ÎÜã?ìjyçç<½XíÉÉ-XÒoDt¤×%¬Æ.¼We&žEÔæ'µ¹T`ÞH(>á-‘óqÆ:×yâvi¥´û"K$€Çþ–|Õf Šgn%NNîH!Ec§ëzï“iªjsݶñ±Æ¨¡F`/‰ë]°Õ*Çš+Cž¶&Ë7©Ô[ê°ÝjÙ|‹*F$ &I ÅIù §' ãÕêËÒ4[=-YíáTb6îîG׿LÖ¥rKsªÆáER((¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šô¯ ȳgÿÿÐÚµë#Âßò,ÙÿÀÿô6­zC (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ æÖ~ ø×\»kw–êÍÞ!…L ã|Ì=IïE­•†‡o´¢8Ì™•¶¡}Ý@Î}0qõ§É¬@ÎV(ÙãQ,§i߉àûñž+×—;VÐ÷håTe†W-w²ëäyì—ÝiNÝÇå^+Ó<=xoÁ­zЧPÔV2ØÂƒœîÇÝÜG|°W-á½5]yP§ú2ò‚z.yëíø×_¬ÜÅ©ëÍ“6úyh‹ÉÇ¡ £9=½ëzU±¢Õ×SÆ›öt¥U;v%F‚¹-²è ŽGÊ äqÏ8äõïZús[M¸‚ á/–¾vw0çÛ×ß“ö«i#H­­Ý.‰$É,¡¿Â $dã¯5ÐéÖÊéÓ8Š ã¹‡ÌGltÉë^ög(Ç–;ÇÔñðqnó©fZ¸ŒG¦EˆÂ+ü¡Pg§¯^ÃŽ•B·5˜âŠð²˜Ì˜M˜Æ0}+¼ŠÊ*~îÇu&Üu (¢²5 (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€=+Âßò,ÙÿÀÿô6­zÈð·ü‹6ð?ý «^Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¹ýÛ/÷Ïô®ž¹ýÛ/÷Ïô  ]ýJý+|t¬ ýJý+|t¦!h¢ŠJÇÕ¿Ô·Ò¶JÇÕ¿Ô·Ò€9?ÈÒÿîŸý«¹NõÃxsþF—ÿtÿè-]Êw¤1Õßu?ë¢èB¤¨æû©ÿ]ÿBÄZ4ÆéO4Æé@dëYšÂ—± $ùƒþ¸ÉZru¬_¼±hsÉï5c™“hÉÜ —Æ;Ô½†­}O Õ£[ïMc¼í‰šÝONN@ ‘Œç¶yÍdø’Ìéºôúu»nPI9A¼†UbUã =3Î*ާªKˆ.n4Ù7$Ó4°® 2†9 ws¸t=FAÁ#“5½Þ¥¯øŠ.žc1Œ-Àh¼°¨â:Ž˜'¹¤ £ÍmJ†#Ú¥Íî6s†<;}©Í‰îXb,FNÒ‘œÏ9sŽ«ŸN9Øu»x †ÄÂ×’KÅŒ’’~îdg'ÐÔ^2Õwj©§ÂXÛZ…@T6:3œþäV=Œ¶r4‹>œæàÆD^K€ŠFI,„ÇoL <åIûTìØbRŸ¹Ðì­®£ºhgµXLŽpäNàH;HãiùAÉ'+Ø{«kw†;yá´jåT)Qœõ=zãÞ¸*4±e–éÒ$¶9ù‡ËÆ3ާðÏJÚþÛžâM¶ÃÊyÉ—Èã·_åô­1êT|Õßsž5h«#¨Ôn^æ8ÚD]x%A‡¾O8þµH0©ÈäÜ2ï`NIè 4µ R’¼TU’ (¢˜ÂŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Jð·ü‹6ð?ý «^²<-ÿ"ÍŸüÿCjפ0¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(®cÅÿvËýóý+§®cÅÿvËýóý(WDÿR¿Jß+DÿR¿Jß)ˆZ(¢€Ò±õoõ-ô­ƒÒ±õoõ-ô Oßò4¿û§ÿAjîS½pÞÿ‘¥ÿÝ?ú Wré uG7ÝOúèŸú©*9¾ê×DÿÐ…11ºSÍ1¨¬k+\tLg)E– pòdÎMkH9ªê8€e28 Œ‚<©*$í4|‘â›9ìµ%–h.KyÇ=p{÷=®¯ÃãDð•Þ³pÌu&59ùÆÞÜnm¤ö )¯Z¼¾†Òkâ4{Gµ²*%“xr ð»pzúÕé'Ñb¼[WŠ3\yž€¶0 ì ¯:x«ÁG•áÉ+Ÿ3Ç™.¾ÕvA3“aPÄçpyôôô®‡ÃZZêWO‹s¼*¦ifÃþŠ6‚yèHÚyçݾӢß²,P™‹˜Æ-‰]Àd®í»sÓ5_hÑZ[It-KË´VÇnßï‚U}Û¢Çvƒ!Ñ×Vp×¾Ö¯4iôÍ<‘pë Iä·®ÒAè:`õ<´í;Ã×:l6ãQY“Q7,@ ëÊìÈè Ïa]óÝhiyöFŠ.åLý˜ì à oÛ·'#Œ÷©o[IÓÂ}¢T¾vª[ïc޼('֓Ǧ­Êõ°w½ÑÇ  9ã™f1æ©óÆzÑ]L×Ú7¤fÕéíouq-µÆ™k ñ¢I„Û"•làçhçƒÚ“R6ÖRÚÅŸe$—TyÌ#Qž»Oò¥õõÍË˯È=Ž—¹ÊÑ]>©qg¥ÛBϦ[Ëq!‰ÂŒ€Íœt¹È¢[­8k ¦ÅibÓ yžc"žp«‚Xãœp=é¬uÕÔCØùœÅ×iÑ[]G:Oej'‚f‰öÄ8äõR :VÒ¢¼[Cm€;VذPz az¤Tÿh+Û•Ø>çEt±^é ohn ˆ½ÀM²Ebþ[郴ãèNjÊM¢É|lÒ+s6JãÈùK 60HôÎi¼}¾Ã±ó9+­’;oíx¬ã³µØ"3LÍàg Ôçòª¶×–—±ß<]°[b64¥QdR3¸§hïߊ=5~Pö:Úç9Eo®£húBÞ®™e¹® ¨Žq¸>ÞW߯oeÀ=¢HG+¿*3ùQ,zŽñüQ¿S‰¢º’о²ö0é¶ ±gwp­†ÏÝ]‡8Ǩ¨b¼µ–ñû&µ–g·Š—,ëœåqÀ;X“Ó¥?¯/åüP{3œ¢º’s=ͰѴåš<íÈþ`ÎxR6/'éZ¶¶ú}ݤ7ÚA²T¿»Ï¥)cÔUÜToÔ⨮ïì_óéýûáGØ,¿çÒûö?§ûJÊ?`ûœ%Ýý‚Ëþ} ÿ¿cü(û—üúAÿ~ÇøQý¥å`ûœ%Ýý‚Ëþ} ÿ¿cü(û—üúAÿ~ÇøQý¥å`ûœ%Ýý‚Ëþ} ÿ¿cü(û—üúAÿ~ÇøQý¥å`ûœ%Ýý‚Ëþ} ÿ¿cü(û—üúAÿ~ÇøQý¥å`ûœ%Ýý‚Ëþ} ÿ¿cü(û—üúAÿ~ÇøQý¥å`ûœ%Ýý‚Ëþ} ÿ¿cü(û—üúAÿ~ÇøQý¥å`û—ü-ÿ"ÍŸüÿCjתú|iŸ FŠˆ7aT`MX®øKž*]Ìš³°QEB (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ æ|_÷l¿ß?Òºjæ|_÷lÿß?Ò€54Oõ+ô­ñÒ°4Oõ+ô­ñÒ˜…¢Š(=+VÿRßJØ=+VÿRßJäü9ÿ#Kÿºô®å;× áÏù_ýÓÿ µw)ÞÇTs)1ü£$2¶=pAþ•NÿZ±Óo-­neÛ%ÃaxáG«z ñþM\™™cùN°P}2@ÏëLCÍìXäL=¼—?ҘװzOÿ~ü)ÿb‹´ÄúùÌ?‘¦5”³ÿß÷ÿîá?Ãqÿ€òñ5^lÜ•)‚8ƒHÎèSŒ @?ş¬½¤#ø®?ð"Oþ*±|Iº×ÃúˆŽY rÙÎ…]Ë>S° ž„þu.<Ë—¸Öæç‡ÕÝíè[µ´±Ëk+ •* a¸èH>½}h} VÕeÑ%‚yRgSw*le Ñå~TœW™xbXmüOe$ÅvÈå tÞK0ùqÁ îÛÈǹÆkÖ1ÅxXÿi‚¨©·}=?­‹©]EÙÇúûŒ˜!¼µ½Š@ZÖ Én æ9€Áø9]§–ÆA9ô©¢ÐõjÍ-šZÌdfÂmÝó/7Þ<}k;FØ[^Ù²GoÄG™œFx¬I\?6>•æOvÚÇ­4ÚªƒÇ=ø®WRMÝ>Áw=.ÓH¹´ƒS·7"hî²ñ¼˜ —   gSV¥ÊèB΄W+n#YE`¸Íy9·PG €{‚krÄbÎ1Ç~ŸS[P¦ëÏ–öë·m ªÇÙEKúÔé!еf7käyë:J±Éu$¡€FC—eÈûÙèzVž¬“,®|²Ïm:Jé[Œlw8 Oá\…Üð-´Ü¿ø'/µVµŽ¬é×SkP^I ¤)9DÄÉ( €åç©ä ±ie, $‚)f¸™œNÒ¸Tœzž~µÆQRòöÕ¹¿ø#öÞGIi¥ÜiBâêÞÚÑn®d‰ 6éˆãŒ7>™8,sÇn*þ­mqu“ ­•°!…Óܧ?¥q”SxÝÜ¿ø «[dt7^š[Ž-Fq8‚(Nvl`‡9åIÏÒ¤¸Ñn亙RHZÚâx§y‘*2mÎ9Ú9ÈÆOÍQOêSþÃþ½ªìu?lYÞxàÂ^^³?˜¤‰Sh>Ä•I§ÝϪCqj"‡iPó‰˜3(9(P ¬= 6œp:wõ§ÙhRZê[äU–æŽCu.T¶Oú¯¹üDgô®nŠo'ö¿ø"ö«±Õ_Y4Ú»£VÛCIT*I냌†?•%¦™}§O{47"äËåˆÒr¨0£%l 娥õks~ðGí•ïc©‡N½‚ÒãýÆi®g2¼ÄD €0Ó“Æz äÔš]µæœ¶¶EchJò:ƒ„bÀª/°Žé\•<jÎ_‡üöÞGW¨i×W×ð·“f‘E*H.70 A ¸éסéQÁ£ÝÇw nðýŠÞåîc Ÿ1‹n‘Œ sÎÌQBÀÉ+)~ðAÖO¡×fÓ­5;§_:y¤ic‰ ‹ÓÐÖ­é¶ÆËKµµc–†%B}ÀÅpÔT¼½µnoÃþ{#Ðè¯<¢§û3û߇üýcÈô:+Ï(£û3û߇üúÇ‘ètWžQGög÷¿ø!õ#Ðè¯<¢ìÏï~ðCëG¡Ñ^yEÙŸÞü?à‡Ö, xnðž‚ óÿ€òÕë=7ìWº…ÓKæÉy0“îãb… ¯8Áüé׿vßþº7þŠ’¢Sä7mF·<ß@ñƼ¶ÓnQ­ˆ”3ÆärVåºt×P𦵠›ÈmceݲÞ– eŸê%Q^Ñæ…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@•áoùlÿàúV½dx[þE›?øþ†Õ¯HaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP\Ï‹þíŸûçúWM\Ï‹þíŸûçúP¦‰þ¥~•¾:V‰þ¥~•¾:S´QE¥cêßê[é[¥cêßê[é@Ÿ‡?äi÷Oþ‚Õܧzá¼9ÿ#Kÿºô®å;Ò^çN³¼¸·¸¸$–Ù·DÇøOùý@©¦û©ÿ]ÿB%G7ÝOúèŸú¦"Ѧ7Jy¦7J«'ZÅñ-Ì–zÅÔLHbšDb3‚ ”ƒÏÒ¶¤ëT5ˆ¡ àïý%&“Vc<µïuMMiu‰„.Ë,ih¾@Æ:gïàç¡?­rú¥„Vš˜¢"9cÜŸqÜÍŒóÜ~–Õ­ÊXÙ]« ™"Ó§’Ýå °¹*8Ç\VN©¬h³ÝÃÜ“—‚^E[†+ƒ¸­³œ&O~˜ÁTèÒ£SŠ^†nR“ÔΔ "tã$qŸZæ™J¹wÀÍ^¸¸Ô.®Ù-mn-à$cxøßüŒÓ´¯ êZíãǹ1ª’ÍAëÓ#>˜ÎyÏ4:‘½ŽŠXj“WKAºL²¥êà äv²J ùŒR8è9®¢Ú]QAŠ Û+ÆÁÇïwèEe'‡-t›–µ)t“½4±”* ýÝÏÞÉãuÌ·–v–Ì»ãž_›,Uö†t=yÀà×&œfùR†t×+êt°ÿj¢‘öx.b?t]8òÇZŽ}^k[‡ŠëOuXÆYáHÉ{îžž¾•Ÿáí,ÞêQ*_Mlg] ¬›Œàdg=8õjêÓW‹P+íż*A-=ÁÀ¸üÖˆ¶ŽK2£å F0ätî? òTcó6zœ¹-±GRÔÖkdŽöYdhþx•†J“׿ê3õ5„’­Ì…eó W!˜Ær€@á³êyëV5Kß.{˜íÐ’I°Iö=½I½^vÑm!6n­=áB#0’ÌŒ‚Øá@ÈûØÈéD¥®†‘«8Ç–å‹c ’8E bßuœõ ~‡ô¬k­InäŒË“ÊnÇ®ëÓ†+£·Ñ®ä_0^½´£¨Šïí‚x&®[é f»ã™^P JÍ÷˜÷Æs׃õ>ÂIs4\qÒ½”¿#þÏñ ^Z‰/€FÌvÄ£€Áã ߚ؎I¥Ró†Y¸f @ÉÆHàñŠÕ¼xí@iq½È©‚ÄûtéŸóÅf– I ´ØÅm›½ŒëV”Ò‹èQEls…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@•áoùlÿàúV½dx[þE›?øþ†Õ¯HaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP\Ï‹þíŸûçúWM\Ï‹þíŸûçúP¦‰þ¥~•¾:V‰þ¥~•¾:S´QE¥cêßê[é[¥cêßê[é@Ÿ‡?äi÷Oþ‚Õܧzá¼9ÿ#Kÿºô®å;ÒêŽoºŸõÑ?ô!RTs}Ôÿ®‰ÿ¡ b-ct§šcPY:ÖV¶q¦’1œKÔgþXÉZÒ £{Òßþº7þŠ’¦NÊãJúya¨%•±„B¸Ž =²IãÓõÎ*-Jþk¹óŽ‘ãs·ñã¯rxíÔÖž¡â‹MBö$žÇýGjàùÓåAùHn¼ãîšÔ—[·†ìÀaœªºE$Ê£dnØÂ“œ÷ÆEsC4«­ üÿàXHIݳŽûñ“nà8* ûšµàX#ãVAÁæö'9ǵt£\ï‚à£ÊÐ-ÆÕò˨$΄óŒqUáñ1Ù@å.îÙÖy]c\¢â` “ÅgW1•WyS×úò.u ŒÔµv“C¨OÇ÷#U@£œö_æx튘j\\y××w’¶íøi ¢°P«øÔÖûköëtb\4Jé\(Sg¯|ó¸sŽõb÷RK)"ˆA=ÄòË Ú1“ÉŽýë'Žz.OÇþJŠß˜ÃU¶´¬xÉØqøÓ›Xµ â93Ž2£üjôž$´EGÌÑy"w’5\F„‘–ƒÆ@¥]Ôï¾Ã¦És‡“bSÑŽ~dUË1›÷\7óÿ€Dp±N霵ÕܼR‹:Ãp8ÏNüU&‘åbòcsrpk©V»—Ãïw¼Myd–2ûUrÔ㎞â´mnm6–L»Ä²NäŒàf£ëÜŸcËøžÆýNŠéçñ‚XcŠÆ;ímÜ&üfNí½½}jÞ§u4vöÑÂLSÝL‘@%3Ëã øÕý~WIÃ?øö+¹ÆÑ]·ˆ$“VŽÚWµlò@-ÆDÑí†nyo ê95b-Rô¶ª%´@Öˆ(‘·3åIÁ>§¿Z:Kì~?ðQMÚç+EuZ­.¦Ó†–ÚxÑQ„ÖêBå%$ò8üú ³«Ü^ZZ=Å´–±¤HÎæáXçÁϯéIãÚ—+ãÿ«¦q”WIy¯¼/oÕ¶‘ Yçyby{½9’@«³ßÝG­ZZˆcû,áÿz[,H\ð;­?¯I}Ç·È=’îqÔWi¥ÜK*ÜÁ;ï–ÚvŒ¾Ü0OÌ?*Y5$]Kì)ÒH;ºmÛ$€NH'¡è Oöƒ½¹?øögEuëž]®žZÚòà]„ 0XÆâ}T6F'¬Å­[Ëz¶ëáF‰'*<·uÎTç±íŽ5O%ö?øö+¹ÇQ]Œ÷2ëÎÚUŒGnerɸcµApÇ‚: ¢5=M-5I˜ÚÌ-NÈš8C8ûÙÎ@ÈÈ4,{gñÿ€™ÎQ]<šÛ[éqÎ'‚öY¦ò¢6ð¸Pq“•›€ 8­-:çív1ÍçG19ãBƒ ãI$Ó”±î*îüTSêpÔWS6·dÙ#¤QÄè’I$.Á™°B†U8#’zž•b+ë¦×¤²–ã€AæFÁ²Íóc'°Ôþ¿/äóßþ{Ü㨮ŽÓQ½Ô-¯^ZÇrŠå X É v–ÜÇ è:Ö͕Ƚ°·ºQ4jàzdf”³ãøÿÀFýNŠô:*?´ÿ»øÿÀÕüÏ<¢½Š?´ÿ»øÿÀ«ùžyEziÿwñÿ€Wó<òŠô:(þÓþïãÿ>¯æyåètQý§ýßÇþ}_ÌóÊ+Ðè£ûOû¿üú¿™ç”W¡ÑGöŸ÷øõ2 ȳgÿÿÐÚµê?øò‹ñþu5zP—­þ¥¾•°zV>­þ¥¾”ÉøsþF—ÿtÿè-]Êw®ßò4¿û§ÿAjîS½!ަJ¥Ó À†õ?ÒŸE1 7OŽmfϱOþ*˜nŸþ|î?4ÿâªZ(«O!ÿ—ŸÎ?þ* –)®c D‘†`‚ÌÅJŽ„Œ`šÑªÚרtÛ«°»¼˜šM¾¸©’\®åFí¤ŽNçÃr\çÌ‹-ĉ,N"9…Õ@zôö늼,çVkï"ÝÌŽ¯ šÈ;n‘³•è=k ‚Öêævµû…ºXcšH¢ª¹`¸Ü§º7rx«?Ø·ßô¼ÿ¿Pÿñç¬+[7øŸ‘ÒÜvm~?äqp躸Õám¦M: ™.’5ÎX7†$Œ±à¨úÔëá[Èm’k©#Ýl¶Ó±·Ý½FpWŸ”ò}~•ÖÿbßÐ~óþýCÿÄQý‹}ÿAûÏûõÿMá[ïø˜^7¿2üÈæO†d\C‘RY¡‘G”NÑA޼çg_z±}£ÞOs Õ«µ½ÄJÑîh ŠU±FGp9ÍobßÐ~óþýCÿÄQý‹}ÿAûÏûõÿSõ7{ëøzw(¯´¿ò9dð¬‘ÚÜ@.&³û.Z"H9b_ß%úU›ý]A,â”ΰ۾öXÃ+9 óÁæºì[ïúÞߨøŠ?±o¿è?yÿ~¡ÿâ)ýQÞ÷‡ù‡4™~?äsvÞ’Ñ5¢kƒ ØÎÙ9F+‚w“ž?*±&;è§NÌËû'ÍT Ž1šÜþžÿ ýçýú‡ÿˆ£ûûþƒ÷Ÿ÷êþ"“Á·«¿áþcRŠûKñÿ#ƒÂ7VÙ–ŠÄÉ*y6E#T¯)»œ†=Åhjzuô–Ö²ÇËqm2K€›wã†ÆzpN9®ƒûûþƒ÷Ÿ÷êþ"ì[ïúÞߨøŠoÛ»¿áþb¼R²’üÈÀþÆ»—SK˧yÞDK ULŒdòwqž'ŠI´gmKwœú5ŒíB aHÎ{õ®ƒûûþƒ÷Ÿ÷êþ"ì[ïúÞߨøŠ_S~‡ùš?Ì¿ò9dÐõ[w’á%u'“d·òÔF­“Á-“‚GòÅYÔôkûé­^¬ \Ç-³H¬Ý‰—§8ÿëWAý‹}ÿAûÏûõÿGö-÷ýï?ïÔ?üE?ª;ß[ü¿ÌWŽÜËñÿ#˜½ðõõÛ»‰Ú'žÜ[Üí·$:óÊäü§æn¹ëW$Ò%{»)•$Uµ ùdîÊã¯jÛþžÿ ýçýú‡ÿˆ£ûûþƒ÷Ÿ÷êþ"—ÔߟáþaÍæ_ùŦ›ª¤¾’ðý¢í¥ äˆÂmUúð§Š’ÿAº¾¾·œ•!e`E±óFHžèF+£þžÿ ýçýú‡ÿˆ£ûûþƒ÷Ÿ÷êþ"ŸÔõº¿áþaÍæ_ù¥¯†õ+9í+”e¶`U’ÑŽñ‡'^”ë? -M®’ÞC#H7Y9KdœIž™>8Íu?Ø·ßô¼ÿ¿PÿñbßÐ~óþýCÿÄSxY>¯ð Çù—ãþF é÷‘ë©u´°¤;~éS¹OÓ–•ÚEí–”¶¶îDã$Ìð É%r:ä÷­ïì[ïúÞߨøŠ?±o¿è?yÿ~¡ÿâ*~¥¥µü?Ì9•ïÌ¿ò9q᫱™ç?Û~ÓöŸ;ìçfí»q³=6ñ×>õ5Ž‘¨XÏïÉ;yxß+0 Ø›¿§Z迱o¿è?yÿ~¡ÿâ(þžÿ ýçýú‡ÿˆ¦ðèïø˜sGù—ãþG3qáË™îæe’D¶žXæš$’̘Æ<µsÁéÚ®*í_·m“ýG“³Ë?ÞÎs[?Ø·ßô¼ÿ¿PÿñbßÐ~óþýCÿÄRú›}ÿóhÿ2üÈååÒ5XÞkç&îé`h`Ž8<¡óÉÉ9äNüV•Ž›5–Ÿoj"ˆcTÎÓÎ+[ûûþƒ÷Ÿ÷êþ"ì[ïúÞߨøŠ êÎÿ‡ù‡2½ù—ãþE³ÏÿÏ?üñ“þù5ûûþƒ÷Ÿ÷êþ"ì[ïúÞߨøŠ?³×Ÿáþaο™~?äPû<ÿóÆOûäÑöyÿ猟÷É«ÿØ·ßô¼ÿ¿PÿñbßÐ~óþýCÿÄQýž¼ÿóuüËñÿ"‡Ùçÿž2ß&³Ïÿy¥KˆgpòÚÎд€c Àã· *ÝzTÒPIt9¦š“¸QEd…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@s>/û–ïŸé]5s>.û–ïŸé@š'ú•úVøéX'ú•úVøéLBÑE•«©o¥l•«©o¥r~ÿ‘¥ÿÝ?ú Wrë†ðçü/þéÿÐZ»”ïHc¨¢Šb (¢€ Îñü‹šŸýzÉÿ šÑ¬ïȹ©ÿ׬Ÿú ©ŸÂÍ)|qõC4ïù¯¿ìeÿ¡ÜVíbéðʾ#»˜Æâ'Ó­\©ÚÌr@>£rçê=kjšØ‰nŠ(¦ ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š( NÿÍ_þ¿þŠŽ¯Ö~ÿš¿ýýhVtþjßÝùQVdQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEÌø»îYÿ¾¥tÕÌø»îYÿ¼¥jhŸêWé[ã¥`hŸêWé[ã¥1 EPzV>­þ¥¾•°zV>­þ¥¾”ÉøsþF—ÿtÿè-]º¶+ˆðçü/þéÿÐZ»jC¿ÚþÔÊ(ûý¨ßíL¢€¿Ú™*Ç.û–Ÿïé]5s>.û–Ÿïé@š'ú•úVøéX'ú•úVøéLBÑE•«©o¥l•«©o¥r~ÿ‘¥ÿÝ?ú Wm\O‡?äi÷Oþ‚ÕÛRQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW3âï¹iþñþ•ÓW5âï¹iþñþ”§¢©_¥oŽ•¢©_¥oŽ”Ä-Q@éXú·ú–úVÁéXú·ú–úP'áÏù_ýÓÿ µvÕÄøsþF—ÿtÿè-]µ!…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@s^.û–Ÿïé]-s^.û–Ÿïæ(ODÿR¿Jß+DÿR¿Jß)ˆZ(¢€Ò±õoõ-ô­ƒÒ±õoõ-ô Oßò4¿û§ÿAjí«‰ðçü/þéÿÐZ»jC (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ æ¼]÷-?Þ?ÌWK\׋¾å§ûÇùŠÓÑ?Ô¯Ò·ÇJÀÑ?Ô¯Ò·ÇJbŠ( ô¬}[ýK}+`ô¬}[ýK}(“ðçü/þéÿÐZ»jâ|9ÿ#Kÿºô®ÚŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¹¯}ËO÷óÒ×5âï¹iþñþb€4ôOõ+ô­ñÒ°4Oõ+ô­ñÒ˜…¢Š(=+VÿRßJØ=+VÿRßJãtu-®]âCò˜Gü³Èe ø+Oû.Oúäÿ¾ÿT¼»[ºû—ùßö\Ÿô5Éÿ}þ.ì¹?èk“þú?ü]tžTŸóðÿ÷Êÿ…TŸóðÿ÷Êÿ…V§Ûñæ]­Ý}ËüŽoû.Oúäÿ¾ÿGö\Ÿô5Éÿ}þ.ºO*OùøûåÂ*Oùøûå«Síø¿ó®Öî¾åþG7ý—'ý rßGÿ‹£û.Oúäÿ¾ÿ]'•'üü?ýò¿áG•'üü?ýò¿áGÕ©öü_ù‡×kw_rÿ#›þË“þ†¹?ï£ÿÅÑý—'ý rßGÿ‹®“Ê“þ~þù_ð£Ê“þ~þù_ð£êÔû~/üÃëµ»¯¹‘ÍÿeÉÿC\Ÿ÷ÑÿâèþË“þ†¹?ï£ÿÅ×HU‘£ýë¶[1ОÃÚ¥£êÔû~/üÃëµ»¯¹‘ËeÉÿC\Ÿ÷ÑÿâèþË“þ†¹?ï£ÿÅ×SEV§Ûñæ]­Ý}ËüŽ[û.Oúäÿ¾ÿGö\Ÿô5Éÿ}þ.ºš(úµ>ß‹ÿ0úínëî_ärßÙrÐ×'ýôøº?²äÿ¡®OûèÿñuÔÑGÕ©öü_ù‡×kw_rÿ#–þË“þ†¹?ï£ÿÅÑý—'ý rßGÿ‹®¦Š>­O·âÿÌ>»[ºû—ù·ö\Ÿô5Éÿ}þ.ì¹?èk“þú?ü]u4Qõj}¿þaõÚÝ×Ü¿È忲äÿ¡®OûèÿñteÉÿC\Ÿ÷Ñÿâë©¢«Síø¿ó®Öî¾åþG-ý—'ý rßGÿ‹£û.Oúäÿ¾ÿ]M}ZŸoÅÿ˜}v·u÷/ò9oì¹?èk“þú?ü]ÙrÐ×'ýôøºêh£êÔû~/üÃëµ»¯¹‘ËeÉÿC\Ÿ÷ÑÿâèþË“þ†¹?ï£ÿÅ×SEV§Ûñæ]­Ý}ËüŽ[û.Oúäÿ¾ÿGö\Ÿô5Éÿ}þ.ºš(úµ>ß‹ÿ0úínëî_ärßÙrÐ×'ýôøº?²äÿ¡®OûèÿñuÔÑGÕ©öü_ù‡×kw_rÿ#–þË“þ†¹?ï£ÿÅÑý—'ý rßGÿ‹®¦Š>­O·âÿÌ>»[ºû—ù·ö\Ÿô5Éÿ}þ.ì¹?èk“þú?ü]u4Qõj}¿þaõÚÝ×Ü¿È忲äÿ¡®OûèÿñteÉÿC\Ÿ÷Ñÿâë©¢«Síø¿ó®Öî¾åþG-ý—'ý rßGÿ‹­ë{«Hm¢‰ïâ‘‘—.2ĽjÝp¥kÔέz•U¦ÿ¿"·YÏÜ?÷Ø£íÖ_ó÷ýö*z+C·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø®Å2$ðÛÉ ¬ˆ´²œŒžß¥tõ…â¿ùÅÿ_ ü[Ñ?Ô¯Ò·ÇJÀÑ?Ô¯Ò·ÇJbŠ( ô¬}[ýK}+`ô¬}[ýK}(“ð÷üŒ“ÿº?­tÖºšB¢¬ q3,ŠØØ…‚î'·'_ιÿÈÉ?û£úÖŽ¹á뫘ï&³½¸2ܼe¡Ä{p¤t,¹N3×ëK¨úu]bïKó'm7}ŒEwÍç€Ø8TÇ8Ïr+NâIRÝžDÒòÆ_nÕƒ{£&¬‚}:æöÊÙPŲH”K'wpXtì1ŒóéZ’\ÞmºÙŒê›DJ&LÌùºð1îy£ u(¯ˆÌv×íwfcžÍ‘8¤gÆÐ­ÎHê8«Zv©5ÍÜÖW–Ÿeº‰M‚O1Y p;‚†ºä–š€¶³[â–ÞͤyˆÛ‰;rvãÓ5­§[ÞO¬Ïª^Z›\À°GH®Ø±$®GSÇÒŸõý|Ä ¬ÝÜ]\E¦i¢ê;wòä–IÄJ\uUàç…Z½ìzŒv6ÚtrÌm¾ÐþeÎÀ¼ãtæª,®’5 k[»†âI&†X¦DhËòC#¡î3TçÒ.ÞîÂ{í#ûSfž°ÈHÉç$üäg¿"’þ¾çú¿õÔܵ֒ëA“T²ÒBÑ–”È Áj–›âtï¶ês"+²*,v“)†vÙ/õQŠ[-.ö ^Ù¼ad•eò-Ä›„JÀíMÇÓò©.tû©,4H–,½´ð¼ÃpùB©¿?…>¿wütûÿà§×´ëh¢’YDª]WÉrÛGRT î@§\ëšm¢DòÜ‚&O1<´i OïaAãߥekUËëŸoŽÞææ-Ä,–×fR 9ûÊ9õªÓè3[]ÛÏmevößdX ÷Æ)" “ÉÜ}{Rþ¿1@–9â·š'WØ2²œ‚ ¶ RÔ|A¦éW ¹Ýe)æmH^L.q¸íëSÙÛGgaeoFŒ€#-¸¯ÊÜg½Skƒâ¹/|¿ôf°‡Ü9}äãzP÷ÐÚÌ?Ú >ÕllźÈV-·'æÏÝÛŽÝiÚˆ4ÍRo&Òáš]ž`G‰ã,¾ª q\´=þŸ£Ì÷Pyk‚Öîw©Ã‚ÇNý*ö“£©O¡\ͧ›K{ r|Æ•XÌY€¡O¿8íÅ;/ëçþBþ¿þf”ZíâjÖÖZ†—öUºäºÜ Ê2C8ãКѷÔìî´Á¨Ã8kM…ü £98<ö5…£®¦Ú«Þêz5Ⱥ”²,¦hLpGœ…Pžp2q’}…l¦Õ´9`¾·6rÜÄñÉ9Läu9¤öS<],“·—¥Hð¨ÜÛYŒŠ¸ÝÈ °s´¾ïlñWõfòÞÔ^XiËyh óÚcr#qŸ”`’qÏ8õ‘imâKžÞXÊÎÅßiŒ9\ ¿pgiCéžõ.£§ßÅŸ¤Å§ÜÞið(›É–430à+naòñ“޹Ö@^e¹¼I,z^œ×’Éj·n¯(‹dg èrÇž=ºÒ^x®(4›=BÚÊâæ; ŒV0Ìæn€äô?Σ¸‡TµÕŽ©e¥™¾Óf°=¹™¡u$®NpGÌAÁ=;ÓfÐn¡ð=¾“\Æa-†$VlŽ:ÓVüWÿZÿ_#GZÔït¸â >;‹x£2Jïr#  N>”ºŽ´¶>:º@Ò/–’˜ì8b8<uª¾$·’þ²ê)·trùÈ‚7äg’cÔf™ªizÇÿ³‹}«PòcWmÀo`W''‡­ Ì}QnóÄúFŸu%µÕÑŽHöù‡Ér©»¦æhϹ©-|A¥ÞGrðÜœ['™(’'B«‚wa€$py©h××ø¡c·Üo¢mþuùȼsëŠ]fÆågÔ¯Zø,q޽*[·õä4¯o뱯§øƒLÕ'òm.KK³xI"xË/¨ G¸¢ßÄ:UÕð³†ì4IJ¯ÈÁ\¯P¬FÖ#ØšÃÒíµVMy¬M•½•±ýëJ¬e-P)àw縨´Oe-•µöŸxæÍ‰Žëû@´€Â2ùƒŒmã&©«;ÕÍiüOe6q>Ÿr™ˆ¯ïg·—ÊåÂðBüÞœf®Ýëš}ÚZÝLñÈå@c ìÉè ãhϹ¬OìmCþüzgÙÿÓ\ǽ{J®qÓÞªxƒHÖµ «èü‹Ëˆä’3jÑ]ªC ¤‡Œ°ÉÈ'8=¨ëaŸ}=Æ»«ÚÈÀÅlÑ€7&Oך®ÚííÍåÌ:N”/"¶s³Ip"R㪯8üI§ÙÝ[x“VžHÑ®„O¡‡U]¥Hëžþ•JÒ-[A¸½‚ -¯í'¸{ˆ¤ŠtFBç%X1yâ—ù£wâ-3O•`½¸ϰ<ˆœD÷™A =Î*Ž©¬][j7ñA"ùPéMuÊÏ–ÁÏqÀª×6z¼êâ 1nWUE!ŒÊ-å„*ùäŒü¹ïM—Ã÷ñKäD‚hŸF6bàmgƒÎ{f‡·õÙ_z5á!²²Óì¤Ô.žxR©9Æ[ =zT×^ ÒìÒ–ëp¸O2! 4¥×ûÀ 'õÍI¢jBâÎöK É3`–ÒÛÚßù2FÈO9”çÖ§ki<;z—V¶*öÇOX tíö’z¹å~nH=©É«·ëú“Ù]¹|K¤Coo;]æ;ˆüØü¸ÉOï =È­8fŠâæ…ÖH¤PÈêr„Wžéz-é±Òµµ»¹†M9!h­oM»¡°?yC) ë]f“2Z]G¢AdÐÃmf’’eÞc,H}zsEº]A>¿×Bͦ§ö­cP°òvýŒFwîÎýàž˜ã¦_x‡JÓn~ÏwtP¡˜fBÄ{œV`¦â]Vê-{È.„;)¢_º¤†`{ÔWVzµ½Æ°-´Átšª©Ó"ù-°!Wò3òç½'äWS^ÿÄ:^™2ÅupÁÚ?4áy0ŸÞ;AÀ÷4]ø‡K³HK ßhO2!4…—ûØPN=úU?F¹²Õá,<È"Ò’×ÍÈù[Ó¯JÍÒ4½_C[+‘§¦6 k4)2+ÄÊÌA¤ÝjõøÿÀûÉþ¿/ø&ž—âH†´ýCSœ,·@í fs“÷UA'ØUé-Q1[Ï%º¬²ëúXUÁ¦ÆzÓ8îiîÿ®ÿå¨tþ»Ÿ©Ùê°4Ösyˆ¬Q²¥YXv*@ ýE[¬.ÊâÛXÖg–=±\ÏÄrà#PNNAëZÔ†QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE…â¿ùÅÿ]×ùݬ/ÿÈ./úî¿ÈнýJý+|t¬ ýJý+|t¦!h¢ŠJÉÕ17Òµª•ä[Њâô)â)˜ƒ™8÷ö®ÃÎOWÿ¿mþÈj6—vò¼¶’É „`²W9qsâec³Uºê?ÂÏRó“ÕÿïÛ…rz¿ýûoð¯$ûgŠÿè/uú…lñ_ýî¿Oð [ó“ÕÿïÛ…rz¿ýûoð¯$ûgŠÿè/uú…lñ_ýî¿Oð [ó“ÕÿïÛ…rz¿ýûoð¯$ûgŠÿè/uú…lñ_ýî¿Oð [ó“ÕÿïÛ…rz¿ýûoð¯$ûgŠÿè/uú…lñ_ýî¿Oð [ó“ÕÿïÛ…rz¿ýûoð¯$ûgŠÿè/uú…lñ_ýî¿Oð YgWh‚î8|œ£ §Ô{Ôµä?lñ_ýî¿Oð£íž+ÿ ½×éþë’F’ÆÑÈŠñ¸*Êà ƒÔB"ÆŠˆ¡QFT`è+ÈþÙâ¿ú Ý~ŸáGÛÙâ¿ú Ý~ŸáE‚ç®",h¨ŠaUF‚^CöÏÿÐ^ëôÿ >Ùâ¿ú Ý~Ÿá@^¢¼‡íž+ÿ ½×éþ}³Åôºý?ž½EyÛëM ¹_¡#Šò϶x¯þ‚÷_§øQöÏÿÐ^ëôÿ õà€:EyÛÙâ¿ú Ý~Ÿá@½EyÛÙâ¿ú Ý~Ÿá@½EyÛÙâ¿ú Ý~Ÿá@½EyÛÙâ¿ú Ý~Ÿá@½EyÛÙâ¿ú Ý~Ÿá@½EyÛÙâ¿ú Ý~Ÿá@½EyÛ> stream xÚZY“ÛÆ~ß_Á§LDƒ9¸*²,9rù\­S•²ý’ ‰hôjóëÓ× ®œ”j5¹§§¯{øûB-öð÷õ¢^DðÏfIh£$M©±ad\jm±Ø-~º‹ c´øúÏßÄñ" ³$R‹‡Ý"ÍBeÕ"qIhôâa»ø%¨ËS¼üíáè©Y˜¹ØaO³[ÓP§ïòúœWËUœÙدþñòLJ×÷ði£ —+ë¢àá燥Jƒîß¾üç»{ýp÷û¢½ªqa:c›ãÝ/¿E‹-´}³ˆB¥‹Gêy\‡.ÃqÕâÝÝx˜[¥_!Saªõ¦&LRZá÷»0Îâ8¥’š1µñ•Ÿ¿=ºÅW ¬ùÓG³¯dúÕd~fïÓt:8¦…3d‘0øM¹?·…g–ýb¹Ò* ~îÊz/|ŸÞP¢CYÏ÷û¦Ïûbæzb #”ïöùÌD6„žÒþfilÐ4ÑG ¼šy¥¬£ºÅJƒXÁEÐ ýN 34§¢Íû²©ù³o¤ôíë¦ï›£ô]ÿ»ØôL—õUÇ͹m‹šZ]°iª¥ V¸?ØÓJ©0³–W>ë_#«@ÊŒÖÁK”Á(¨‹%Èá#~¨ m&eU1•ŸNEÞJ—âÔ,‡L§Ú—°:ifùá¼(æÚ_µ9Ì c''¢Ã½—Û¢•ú†K˜êñú.»ãZÇ|/_p¶¨ñ#ŸNÅÜrà]œ(÷î:ÕÄN¬ÚKeƒ=ÜmÇeë#Å'„¾ëæƒÔ\·TÅ®çªfwÑdàPt¢ÙÝlQ„u€,í4Á}ÑŸ[O6Š‚ËÍ{nÂÍcoØXÑžšÊ 4Ñy©q×’Ì`pçpÉçoÂLƒcQŸ™’ݤÁž"eQƒÒwîšcÁÔ©ü€ì*ªŽ¿éª Ü Þn6·¾œN{®úÕ÷]!}¥Ý!$m‚Ñ:4IÊ£èúç]N»Icà5I#V>.aΦ}ßñçŽ$º”"()r»Ù¿‡!$˜¬1+¿Þd·È+ wš÷Båïq¡B¾xUþMFìÏÀÙ¾ÃCF6øÄcµ©è*±2”K™¤ʧæ<+*M[îËšG¤$«¸±P×þªo«U5]ºÑ*‘EGFpËÂ쀪ÓÏË ‹|”tr8¥L–y‘Š6?m:æ¤U@=–õv0*Ð¥ƒ œ;n[“M¢ËŸ:n~¶´6èæ˜ÐXAÚ¿ÍX^‘ µlJƒ¹¦iAãP‡;N]=s°O=cê•CŸ”zk~8†{mª÷eßÍùŽ,Œ’ìyß¡Í0Ý[âøÇÓ¬T–…±²—§ŸÎÄ”ø¦)ëy¼'úùMMfù–¯1csgIp_îýÌÄFƒ#M â” ‘:ãÍ;’÷…¥LhSw©lhú‘¯ Ì쑞ë;ÌB“ ›éåqN S2Ü´8"ž´áÒF\zçIm|¤¡ÕzW(›!í_Z ˹«K;wýÿí(ÅAo¹¿ç]zåŠÅu@ ¸ŽyÄ3ú÷¬?™±IØþO‚4L’A5اHJÜz ¶RœBÁÕ|: 6H ÃZZºjбÚººA1}é±"–+{Á€Ì²/F ÷kÅ,‚){ÈÎÛK2‹`Œ›™ƒg&ÌF)¿Ó8=صCÞñ*Y?´ä¬`¹îдýæÌ¾P[¸¬¶ë_x-Oo/•\ š–Œ™£ð+ˆ>ÿ+˜ÇÍÈåŽÉõ“Œ@À~†jZÆ‹@lQ£÷Àƪ¬ç"âè8Afßœ‰™(x»ã&Ø ø¨½0}ï^r@¬ ]'–çnh"WuÍîj…•^À(F»Y ç®žø®“Z´0 ªºYļ皜‹ªé¹+- žK¨E`~¿'0ñA®äjt±U"©Ö)z®cŸÖMÞn¥Ùß6w"ü…„èô(ûâ(­xoÔØà4,W7"måc …#Χ†1ÈD$€WCp]¦X­phëqàEÏÉÉæv³iŽkÀbŒ¡Ñº“"ŸyÝóëa„ûØød<×;FÔz=uÌ úÎx²þ FÏíUÑsëÔÛRªÄã,#ûñsýtÖn‹í–‘¸1b[81ÝWføøòã©*^0†¥ÓB¸ùõ÷?|÷ú÷â“QË2±øÐ­¨óu5«b,¼È™rÎKÇI¨âÁ¶¼#¶ÜÀ^.þTÜ>ö?¶p^d„Ê€þçà ôWéŸM|WÔÈ>²Iü…‹ÁO¬òÌ@ vSŠ ³¡»ôIo냲ƒïN›Œ¼$Úc 9c,ê7=»%þX öêŠö‹å*‰"á6¶lp›Œó°kF88´Š!Jgu‚#Çê‹×¯Áî¢É9KÂ?PæRyWl·ûf5nŒ[YUè„#9Aosy•[åë‡!«¤c*·°!Ó4–œ=-9«‘äœy¸ham2ÉY%7sV2ýj2ÿÇ9+퀃6a¢\ï\ÎÊýO9«Û_EZPß'‚  ðý§X€˜3­(…%‡¢³l|Lrþ³,ðÞçÔ6»x~óÙ¨¶Sà…ÀØ_¶dãQÂg¦·LÌ‘qJ#޼¯UÁT ±¡ȹ:åuQñ7%½X+°/WÁˆ$  V‚Kíê$®é8L˜ å‰S@ ]¹Äo{þž¨$~æ˜q£‘;.ûùЏP¾Ì—XÀ„%g¶°ªj{ UvdäÁŽ<,SpX'éÂÀ2‡ ªƒnLSðO³÷s¹Éüeˆ‘<ÁeS3R‰†r½÷ý@>J\ÉcÞo¸?Œ{š3¸Õf‰»f{p}ú!VI²!<r ø›üU’IÎ/òþ?‘]bËâP¬ð¥±¶¤ÌÄÁï6mC)P?&y&©EZ•¤r•H¦R)3ÔErHz¤o)ô¦ÒÊ"ìç¸Å› î#nr±×Ø#ͦ‰4LpŽÇ)Îñ¸ØŸ’hŸ†ÆvòP9]P›¦:k¦É«;ù`h¸L Ý¥›³©ÄÁ¬©1Z0€:þµT…Λ3 …ΣBUן}T€ è&Ñ;¥œ š±T)Йùt€“ºÁÆŽV!Ž,4\yËã ÔQʰ;φuCF?8' ]˜X%W£;l$PkÉ=šÔ‚âBìÔ>q/8þ¼‰ZìŲk©½Øõß`*@³§‡pô0,‚Q6ËèÃXßhw©$e1Á÷T÷ùîÏ1JF ›WÇÃ>°²Àˆ²?pS.ˆ¼Øßn|™€Èò˜ókDlK¾oAr¢ðYæÍQêÑ P˜féØôŠ»žÚfßæÇ#>7ˆ|^©U•×û3ØmŒýÎRŸ”™Â9@ÉÀìs 24#–u¡CXž°c$Žj´á’eQ£åæ r Ú‡@Œ| ŒÅŒt.Ô—!&Á)c&2žàÈ¿á%þíÔ’M}Í_ ¾‘ï´ÑS\Ò‹÷%QÔü@“ÈÍ-ßɲl\pñêc$N7>U DÞ9S’—Å8±Ó¾ýá|\×yY…ìh÷;÷shΚ ÊqL°±jꗵϑPP~D8 ʉÿ´JÙ°Þ{MŽtyn;œ ãÎy1"ÒK±Ä´ÖCOLîøgCSu ØUÿ›yHÉô<šˆ#4¸Ï+ýŠ;]lV×AÛb“W›sø3d»:J64KrÉuNW<‰äDv€š¼"„õã7г\’–¤¤Õþz4 ù–ï'öoÉ–ô Ì(W…è¿FŒ}*jé!¥g…á”b·fv1y䇿 /Ð …䣀ضù~/ˆÃÊn•øBå ÄäA”žÍ“ nÄ‘(3^js/OS$^&øƒHÆøm¢ãZ~ZyW•¡íU#¿`Ñ.}°7—w¼þXTÕMÄN‘»×u|%" asR–_´?=˜›Ï]±;WLcØ€J¥Mðs7çæÒBï$ÇSŽÔ˹,—ŽCå­à§£ì*A»”#3hñ/ÑNâ,G;ÆO8zjt7ö©b*=¸øûâTåÙÿZ‡¢À~oÊjþõÕº0¾ö¢d2ÀQ "b|¤fÆ Ys™s1}ÃÀ‡e[F=çŠa6°7—é°àt ÞFªH%•ôU±)ŽkÊkc2)R ɉ1I8B{1Ó뇻ÿÅDÞn endstream endobj 51 0 obj << /Type /XObject /Subtype /Image /Width 739 /Height 534 /BitsPerComponent 8 /Length 54822 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream ÿØÿàJFIFÿá°ExifII*JR(i‡Züÿÿ)( üÿÿ)( 0210‘ 0100 ÿÿ ã ÿÛ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ä Bàw¬ëÝJH^Y¥HãA–f8{šä'ø• £•[æou‚F˜\Pæ/­bú×›Ÿ‰z/üýÉÿ€òñ4ÂËÑçêOü“ÿ‰ HóÖ1}kÍÿáeè¿óõ'þÉÿÄÑÿ /FÿŸ©?ðOþ&€=#Ì_Z<Åõ¯7ÿ…•£ÏÔŸø'ÿGü,­þ~¤ÿÀy?øšô1}hóÖ¼ßþVÿ?Rà<ŸüMð²´oùú—ÿäÿâhÒ<Åõ£Ì_ZóøYZ7üýKÿ€òñ4ÂÊÑ¿çæ_ü“ÿ‰ HóÖ1}kÍÿáehßóó/þÉÿÄÑÿ +FÿŸ™ðOþ&€=#Ì_Z<Åõ¯7ÿ…•£ÏÌ¿ø'ÿGü,þ~eÿÀy?øšô1}hóÖ¼ãþNÿ?2ÿà<ŸüMð²tùù—ÿäÿâhÑüÅõ£Ì_ZóøY:?üüËÿ€òñ4ÂÉÑÿçæ_ü“ÿ‰ GóÖ1}kÎ?ádèÿóó/þÉÿÄÑÿ 'GÿŸ™ðOþ&€=Ì_Z<Åõ¯8ÿ…“£ÿÏÌ¿ø'ÿGü,þ~%ÿÀy?øšô1}hóÖ¼ãþFÿ?ÿà4ŸüMð²4ùø—ÿ¤ÿâhÑüÅõ£Ì_ZóøY?üüKÿ€Òÿñ4ÂÈÒ?çâoü—ÿ‰ GóÖ1}kÎ?ádióñ7þKÿÄÑÿ #HÿŸ‰¿ð_þ&€=Ì_Z<Åõ¯8ÿ…‘¤ÏÄßø /ÿGü,#þ~&ÿÀiøšô1}hóÖ¼çþ>‘ÿ?à4¿üMð±ôùø›ÿ¥ÿâhѼÅõ£Ì_ZóŸøXúGüüMÿ€Òÿñ4ÂÇÒ?ç¼ßø /ÿEÀôo1}hóÖ¼çþ>‘ÿ=æÿÀiøš?ácé?óÞoü—ÿ‰¢àz7˜¾´y‹ë^sÿ Iÿžóà4¿üMð±ôŸùï7þKÿÄÑp=Ì_Z<Åõ¯9ÿ…¤ÿÏy¿ð_þ&øXÚOü÷›ÿ¥ÿâh¸æ/­búלÿÂÆÒç¼ßø /ÿGü,m'þ{Íÿ€Òÿñ4\FóÖ1}kÎáci?óÞoü—ÿ‰£þ6“ÿ=æÿÀiøš.£y‹ëG˜¾µç?ð±´Ÿùï7þKÿÄÑÿ Iÿžóà4¿üMѼÅõ£Ì_ZóŸøXúOü÷›ÿ¥ÿâhÿ…¤ÿÏy¿ð_þ&‹èÞbúÑæ/­yÏü,}'þ{Íÿ€Òÿñ4ÂÇÒ?ç¼ßø /ÿEÀôo1}hóÖ¼çþ>‘ÿ=æÿÀiøš?ácéóñ7þKÿÄÑp=Ì_Z<Åõ¯9ÿ…¤ÏÄßø /ÿGü,}#þ~&ÿÀiøšôo1}hóÖ¼çþ>‘ÿ?à4¿üM'ü,#þ~&ÿÀiøšô1}hóÖ¼ãþF‘ÿ?à4¿üMð²4ùø›ÿ¥ÿâhÑüÅõ£Ì_ZóøYGüüMÿ€Òÿñ4ÂÈÒ?çâ_ü—ÿ‰ GóÖ1}kÎ?ádhÿóñ/þKÿÄÑÿ #GÿŸ‰ðOþ&€=Ì_Z<Åõ¯8ÿ…‘£ÿÏÄ¿ø 'ÿGü,þ~eÿÀy?øšô1}hóÖ¼ãþNÿ?2ÿà<ŸüMð²tùù—ÿäÿâhÑüÅõ£Ì_ZóøY:?üüËÿ€òñ4ÂÉÑÿçæ_ü“ÿ‰ GóÖ1}kÎ?ádèÿóó/þÉÿÄÑÿ 'GÿŸ™ðOþ&€=Ì_Z<Åõ¯8ÿ…“£ÿÏÌ¿ø'ÿIÿ +FÿŸ™ðOþ&€=#Ì_Z<Åõ¯7ÿ…•£ÏÌ¿ø'ÿGü,­þ~eÿÀy?øšô1}hóÖ¼ßþVÿ?2ÿà<ŸüMð²´oùú—ÿäÿâhÒ<Åõ£Ì_ZóøYZ7üýKÿ€òñ4ÂÊÑ¿çêOü“ÿ‰ HóÖ1}kÍÿáehßóõ'þÉÿÄÑÿ +FÿŸ©?ðOþ&€=#Ì_Z<Åõ¯7ÿ…•£ÏÔŸø'ÿGü,½þ~¤ÿÀy?øšô1}hóÖ¼ßþ^‹ÿ?Rà<ŸüMâ^‹ÿ?Rà<ŸüMzHp{Ò‚ yÜ_ô"ÀÇ[y?øšêôÍn×R·YígI¢nŒ‡?‡Ö€6¨¦#îú(¢Š*­Ô›šµYz›í‰¨ɾ(ê²²ÙÙ+‘Œîà»qŒÿßYüy¾êë~"J_P´ç “ÿe®3uK6ê|qË0Å’×|…¶Åõ8è=ÍVÝ]7†¼U‡esm=¡¸¶T…OÏ$œ…ë‘ÇJç÷Qº»­I‹S³ð½àÓaœIw?ÛmÔƒóy˜=3ÅGb¶:~“¨]¶“§Ý?öáµæá#8á}1Ú‹koë§ù‡Ÿõ×üŽ'u«¾²Ò´ë_ëšzéblc<œsÇZ¡ñœêúyxDtØwD«´!Ë| vÇLPö_×AÛs™ÝFêô[-GÔ´Û}A­íbþѲ[(QbPëçËØü£ž´ÇÓ´øgÕRÇH´¿¾Òm`…-Ì;–W?ë$e¹ŸÞ—þ¿®Ÿx–¿×õý#ÏwU¥Óî[I}P*ý•&ÝÎò3Óé]Âé:l$y_KµWþÅ7²ØÈ›£Šn8Úzj††»áÙ[P·´·ŽMPí¡O*D»Sà××ñ¥ý~6ëð¹ç[¨Ý]‡mãŸZÕ Ô4HVðºÇüKÌÖÖÍ“ò”^(k©|9¡Å›–ϧÀøÛ’Ñ6@ÛætQÓsO}ƒ©ÆÀÍ[Ôl.´›Ö³¼@“ª« ŒŽEwö‰ioáR9¬mòÅ!+qm`mÁ$€på™Ç^Ÿá¡â+T¾¼Ö’ûH·K[}ëV²ùbSn±ª ^¯É8êN&¹Ý.ÛO»’EÔu_ìäP 7Ù^mçÓ x§mZK•·SàŽK›ˆà… Ë+EÄÄà ×ð•¥¥ß,í&Tºµ2H?xŸ,€+JŸ 85·,VZ…¶ƒ©®›gi3kÖDµ‹dn¸Êúñüè]?¯!>¿×õ±ÇÜÁ5Ô¶×1˜ç‰Š:Ò>œQmmsy!ŽÖÚ{‰ÉHcg zà]ûÙÇ ÝÕ§‡í5+•ÖZ–¾nØð Àw“× ÍU%Ô>0Õ¬´kÛ«-.ßË–ëì¬Å‡ËŠ’r[ü1Ikk”Õ¯oë[3‡ŠFŽDdu8epAЃғuiøªþ}GÄwWsÙÍfdÛ¶)«í{œV6ê¨6ê7T;¨Ý@‰·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›u&ê‹u#1Øq×¥g¦^ß§™ "Eœ•°Ó¹¨ïlo4ò¾z.Æ8‡*O¥o‹‡F–Â2Š ÎW¶0 A};>™p—ÈH ņ{u½bZ[]_Jc·Œ1y‰À_©«Wz>¡g •Ö)FXÄÄíà⥲™bÑ@St ÈÁ¶Ÿ¾QÓŠ· ÌIz‚ ƒ"˜Ûpó‹Ž«Ž¤ûÐ qu:Ao’G8U^õ¶ÞÕÖ0}•ÛêÖ_›õýi<:ÑC}|É€GËû»Ž’ÖŒWwkÞ²o;¨ÜÇѽ®p?à\Uñ2„ÜcÐõð˜ u)*“o^Ç(Û‘ÙJ:œ2°ÁÒ»?‡œ¶ºÜ¶ÁÏ“,eŠçÀŒÈšæüDèÚ±uÆæKÿ½ÏôÅ\ðd…|B„pÿJë¥>x©w<Úô½•ISìÏ¢¬fó#5 +GrЭmŽ•©ˆ´QE¥djßê[éZç¥cêßê[é@ñÿÄÂÛþÿ²×ººÿˆñÿmÿÿÙkŒ¤ÆIºÕ8êiÌŽ˜ÞŒ»†á¸‘ê=©n×T¿²FKKû«tc–Xfd õóL×BºœDdóJy‡iïc?{ß­U¢€4YÔâšY£ÔïRYqæH·ñÓqÎOãM·Õu 3!µ¿»€Èræ)Ù7SƒÍQ œ д¾ºŽYeŽêt’`VWY¨cžA÷¢ÖþîÅËÙÝÜ[; †VBGÔªÁ‘ö8*ãøX`þT™  qê‘]¨îîå²LË+9ëóg4Û‹Ë‹É|Û«‰§—ß3—l}MV¢€-%õÔqÇ]N©ù‘ªÈÀ#ÿx ð}Ç4±ßÝÃt×Q]ÜGrÄ“2JÁÉ=rÀ皨N:œQ@Æ¡x³Ë:Þ\ ¥R²H%mÎPÇ9 ûÓVòá-þΗ,ÄžPrpþ,tϽV¢€4W[ÕRi&MRùe—d‹ráŸ2s“øÕë_]Ùx~m2Ù§Šin¾Ònã¸eº^99ÆsšÀ¢€.A¨ÞÚLó[^ÜÁ+ýù"••›êAÉ¥òÝ›µ¾ºG¬âfóü 9ªTPøõmF+™.cÔ.ÒâO¿*ÎáßêÙɪÒM$Ò´²ÈòHÇ,îÄ–>¤žµG(Ί.70ž™=¨txœ¤ˆÈ㪸 ÀзUí ϱýí—e'>GšÞ_¯ÝÎ:Õ Aèihüº¾£=·Ù¦Ôo$·ÀSÎì˜>RqI>«¨]@ ¸Ô.æ„tŽYÙ”~â¨Ñ@êxà’žU†\y‘«¯Ž™=ê=Õb ©­fY­æ’WîÉ•aÛ‚9ñv±¤kwp9<ÔQ+a_ûÀg†÷ëU™1½w Ãp##Ô{Sh¡ƒÅwÖÚ ú|RÜ¥Ä×_ikŹ`çå©îsŒç5™oªê#Zêp4§2§d.}N=OZ£EZ¹½¹½›Î»¹šâ\c|Òlzdš‡uGEIºÕ&ê7TtP›¨ÝQÑ@n£uGEIºÕ&ê7TtP›¨ÝQÑ@n£uGEIºÕ&ê7TtP›¨ÝQÑ@n£uGEIºÕ&ê7TtP›¨ÝQÑ@n£uGEIºÕ&ê7TtP›¨ÝQÑ@n£uGEIºÕ&ê7TtP›¨ÝQÑ@ Ô%pÊ:qŠI¯^ãØÎvŽõJŠ» Û[±1¿ªš–]RiWní™ï’MfÑ@ ¹ì¯›xéÛÐÕöñ›‘÷²OéëXTVU(S¨ï5s¦Ž2½¸Ó•“'–fšFwbYŽI=ësÁ§> O÷ô®rºÈŸîéZ¥mÌÛnìúDÿR¿Jß+DÿR¿Jß*„-Q@éXú·ú–úVÁéXú·ú–úPƒ|CÿûoøþËY~‚ ïïLéhÞ]Œ²#]Ä$c A§ÐÖ§Ä?øÿ¶ÿÿìµËØêéæäĨßhàmàœ+u#ž´ŸPìnD­q>£¶îÀyzlŒ[K·X‘Æáò°1®,ôæ­M¤.¯}f$r°ÛèðÌádD-€PÎv®Išæ,¯å°"%CöˆÜ H'üUèüGyÛ¿•lþU·ÙX:&‹²¸Ï8õ-xÄ“@tÛ ,äq(µur‘¾1¹Níà sóQö¯ýtÚß×SkÄQ¹ñT‹<ª‰,Æ6í|ç¸ÏÄVwŒ#Óá×·šL8.¾_A÷T(+ø“Tîõë«Ã©Rý èÒíR6í'yã¯|Ó5Maõm=¥ª\ y—«—78íØ ”´_×b¯©[:T_èú¡†3y ¨$Ú7Ÿ}3×Nì³XÕkN¿›LÔ!½·Úd‰²Œ«„Ü~µ^B:K 8­ï´KÏÙïZ nn."Uóô%S$ÇûF£Òü/iq§Ù\^Ü4fð±WPD°(b¡™\î~A8\qïY ®]uõr#k—f$vÀ®Ï@ö¶úãÇa•Å•äQ0›„bÑg“‚¬8Ï89¼ÀÔÓü-k}s§w"[O¾|¡”ì•X ã¡-^ÍÖ²5 5,4û¤WG’6ÆCm\qœ’­úQµyo£K¥ÆTA$¢RØùàC…'ýÑMÖ5{oPkÛ¡‘”.ØÆ;×êi¿ëúþ¶…tž¹FvòØiÓ¬6sÌ­5œnû•Ib¹<ö®n­ØjéÏ3¨Æh^Þ Â°ÁÇ=hèÅÕBÃM¸[ õ6–õ#˜ÖÆ(⊠°»~lN>¹¨N‹e§[M6¯%Ëm»{DKBªILnbX9çÔU{/ÜY[A µ´¸6Ì^ÚIã,ÐsòòçœFi¶ºôðE,7ö×ÑI/žRé 'v ä÷ìhôþ¿­GëýZ“éßÙZGˆ¬Ä¾j$–¬ŒnV%”‘ØàŠ—Æú\vwóÞ\<¾}ㆶXñ°"¨ XrsÆÑ‚:žÂ±^¼›ûGÏMý¡7zô*r¥qŒc·lv§Þx†òý/c¸HZ;§Y m8‰Ô¹9à0zä~—õø¿}me ñ!ÔEÍç•5°†D—‹að«èö‡Ã«¨@——R•c#E*m¶Ã` inœîàsLÿ„–å¯/§žÖÒt½ÛçA*6ÂWõïQA­µ­¤ÐÛXYE$±¼Mpªûö7QËmèqÓ8¢ÚÜÊ«zTi.±eˆ®q²°È °È"ªT¶Óµ­Ô7xdPÝ <ÕE٦ɒºilzŠxƒVÍÞ—aÈÀÈîzb±"Ö."Ôî¯Õ"2܉C‚Ñæÿ´qRI®=Å‚[\ÙYÜ £! G ƒZ:_ˆ‘ ­}³´Ö´ˆ4lDܪø>™ç­dj:¬ºˆ 0[Á•Š„Lœž¤’IêI4=ÿ®ïþ–ß×dQ¢Š)€QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEWCàÏùSýÃý+ž®ƒÁŸò0Çþáþ”ô&‰þ¥~•¾:V‰þ¥~•¾:UZ(¢€Ò±õoõ-ô­ƒÒ±õoõ-ô =Óôû=SÇÚ^ÛCq ÚÌv˸4g pxÆ}Ív¿ðƒøPuЬïÕrZü”‹cÿN³ÿ4®ÇW×ãÒuK i¢‘¢ºY xãyvŒ*‚NsHÿáðŸý¬ïÕðƒøOþ€V?÷ê­\ëúuÌv÷IÉ·k4ËtöíúY‡ÅVÖ:þ©g©\yPÀbòˆ…ˆPË’Y€ ÷8§`,ÿÂá?úXÿߪŠçÁž‚ÖYáÐìD¥ùX à‚ X×uñ£[Å*YMt$eÓˆÐ3É~ø$þµ¥|â[t?é‹ÿè&‹•ÿ¯‡è¥ÿàáGü"¾ÿ —ÿ€qÿ…kÑHfGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ©4ÑÛÁ$ò¶ØãRîØÎ&¹ûíBëÈR]¬)…ñæÀ ›yùsÆêƽxÑ‹”„Ùsþ_ÿÐKÿÀ8ÿ±Ýiÿ?PßÁGÛ­?çêûø(z*·ZÏÔ÷ðQöëOùúƒþþ žŠƒíÖŸóõýü}ºÓþ~ ÿ¿‚€'¢ ûu§üýAÿn´ÿŸ¨?ïà  è¨>Ýiÿ?PßÁGÛ­?çêûø(z*·ZÏÔ÷ðQöëOùúƒþþ žŠƒíÖŸóõýü}ºÓþ~ ÿ¿‚€'¢ ûu§üýAÿn´ÿŸ¨?ïà  è¨>Ýiÿ?PßÁGÛ­?çêûø(z*·ZÏÔ÷ðQöëOùúƒþþ žŠƒíÖŸóõýü}ºÓþ~ ÿ¿‚€'¢ ûu§üýAÿn´ÿŸ¨?ïà  è¨>Ýiÿ?PßÁGÛ­?çêûø(z*·ZÏÔ÷ðQöëOùúƒþþ žŠƒíÖŸóõýü}ºÓþ~ ÿ¿‚€'¢ ûu§üýAÿn´ÿŸ¨?ïà  è¨>Ýiÿ?PßÁGÛ­?çêûø(z*·ZÏÔ÷ðQöëOùúƒþþ žŠƒíÖŸóõýü}ºÓþ~ ÿ¿‚€'¢ ûu§üýAÿn´ÿŸ¨?ïà  è¨>Ýiÿ?PßÁGÛ­?çêûø(z*·ZÏÔ÷ðQöëOùúƒþþ žŠƒíÖŸóõýü}ºÓþ~ ÿ¿‚€'¢ ûu§üýAÿn´ÿŸ¨?ïà  è¨>Ýiÿ?PßÁGÛ­?çêûø(z*·ZÏÔ÷ðQöëOùúƒþþ žŠƒíÖŸóõýü}ºÓþ~ ÿ¿‚€'¢ ûu§üýAÿn´ÿŸ¨?ïà  è¨>Ýiÿ?PßÁGÛ­?çêûø(z*·ZÏÔ÷ðQöëOùúƒþþ žŠƒíÖŸóõýü}ºÓþ~ ÿ¿‚€'¢ ûu§üýAÿn´ÿŸ¨?ïà  è¨>Ýiÿ?PßÁGÛ­?çêûø(z*·ZÏÔ÷ðQöëOùúƒþþ žŠƒíÖŸóõýü}ºÓþ~ ÿ¿‚€ Ûo¶X\ZïÙçDÑîÆqFqø×!«ÛÏ¤Í ËqÂevb(AR¾¬s÷¿JëþÝiÿ?PßÁUîN“y·í_bŸnvù»ëŒ×.+ ñ³ß£F“¥Ï¨ÛÛߨÒ/?w–!$‘œ Û»íôïV|eÿ?õø¿úÖÄ3éöñ,PKkkÑ•@übø¶HæÓlš7W_µ¯*r>ãÖ”(FŒyb XÓÑ?Ô¯Ò·ÇJÀÑ?Ô¯Ò·ÇJÜ¢Š(=+VÿRßJØ=+VÿRßJã¼:?âµSéƒô¯@® Ãþ*ò}‡þ:k½ ˆ?{æë¹‡ÄéEŸñîë£ÿèF€T ‰Ø¯J˜ÔÒw,kÏ|cñUðìvBÖI%¹Pø•€6!=woÒ»äÿX>µó¿Å Êꌭ‘¤O…H­@‚ÝFÒœœïcÆ9MÙ —ÂûΣñ?_´ð¤Z¤Vö pÓe1IµW’7ç¨ê≵·ŽêÏNa_ßG ž œwê;{׊KPk !’âi`oùd“Žù‰dä‘íŠé5—mÁ°XÉ•º¹?:‡iêÀãïÀã¾ Ey=#+ §­Ž²ïãÖ¬“\­½¶šÈ’’´†sØpG½O§|l×oÙ-´åÜ¥”¤Rq’‡¿$þ™ñ¸n¦PàŠh Š@pÀòAÜ3Žv}ë¬Ò¢{ækˆãKdy$Püá28œœç95ºåå·R÷=“Hñþ±}i,·)c€6"Ç'Ìsƒü]€=ý=jÿü&šŠ¨gK`|7>¿Å^\ºæ![kQù~cò@Æ2½}ç×¥jX0Ki®n]¤]€)'sÓΰœìzØí?á;Õç¯ýòßüUðê¿óÆ×þùoþ*¹Š+Q?ü'z¯üñµÿ¾[ÿŠ£þ½WþxÚÿß-ÿÅW1Etÿðê¿óÆ×þùoþ*øNõ_ùãkÿ|·ÿ\ÅÓÿÂwªÿÏ_ûå¿øª?á;Õç¯ýòßüUsPOÿ Þ«ÿµÇjúŒšu†šÑÍmåDÒÜ ¢s÷‡§­sâ*r$í}KŒy®xƒ|7y.·ú…•Ä0Û‘ ó£)¹ÿ„sއžãŒµ?‰­5M[^ÒÆñmíÎØ± Hà•ÆG''?J÷=x½™’dn ›AòÜqœ¦ãŒuÎN8<ÔÿÛÐ4P´6÷3M.ü@Š®Ã†Ý’Áã¯Ó5Æñrçæpüà¨.NTÏŸ­´Qå†(ôfIIEÎŽUH?x‚ ãF0¿\úFáØå‘íüè"XP´ÝI†v9ÉÇ~¾½¢ëÖÄ›ó˜šÚ)R,d—b䱆©cäïîmçÿ=ŠîrÔWc§_]\ßß[ÜÁB›¶ã†òzgŽß­Is©‹[¸à–Úp’0DŸ c,F@ëžÞ˜¤ó¹?øögEvZ.¡6¥¦Cs=³ÀΊÙ;v¾GUî f6³v–—Mq1ÝÊïæO tŠ<£å+íÉ=ÍRÇJíríçÿ^ÅZ÷0(®«SºÔ­­à–ÒâÉÚR‘¢5»1ÏpCð¸ç¾=jµÏˆ%µÕ Õ&Ž!²%”6>uç -Ó¡æœqÒ–Ñüà ÒKvsÔW<†+ydQ–D,:àVN›«™4Éo.îí¥òÔŽY6ÇÝ ±$ô¥BÌWPüàè[©ËQ]ø‚æ=1¦¸·At×moQ«0çœN9Àçb FW¸Ó¤ûLsÃu¾&òã(ƒ,HáXO_J·Ž’Þü}’îr´Wu}Ÿjg•]†å@©Œ³1À:žæ©ÿiH.¥f»gXCkˆ\³ î-ŒñÏ8À¨YƒjüŸü u9+¬OÃ-­¼ÑÙÞ;ÎÒUÞQz·ÞÆ9県T·º˜]ßZÆT_$‘üN@\©þ¿+Û“ñÿ€/b»œuÕ]j“ÚßYYDoÞ$w3?mÀããqÆ}‡ÔRFî?¥„¦ŠEf‰Ð¨# NóÈ^”þ¿/åüà±]ÎRŠêômJ{ùe\ÛnBÙ¶HY$A¸€I,r0=XÖof±²Ya(¬eT/$eÕžIƒÀ÷¤ó¥ËËøÿÀc¥îq”WRúäŸd·²žÊy¦‰æ3ìo,ª1<–û¥Cqªêé–—ÖOj¦è"¤ÂÎÅÛ¨Üp9=:T±ÏùøöK¹ÎQ]•ÄßÚ7¶s¸sÉclcå`xü ·áŠÐ¬Þegðþ?ð T/ÔóÊ+Ðè¥ý§ýßÇþ}_ÌóÊ+Ðè£ûOû¿üú¿™ç”W¡ÑGöŸ÷øõ3Ï(¯C¢í?îþ?ðêþgžQ^‡EÚÝüàÕüÏ<¢½Š?´ÿ»øÿÀ«ùžyEziÿwñÿ€Wó<òŠô:(þÓþïãÿ>¯æyåètQý§ýßÇþ}_ÌóÊ+Ðè£ûOû¿üú¿™ç”W¡ÑGöŸ÷øõ3Ï(¯C¢í?îþ?ðêþgžQ^‡EÚÝüàÕüÏ<¢½Š?´ÿ»øÿÀ«ùžyEziÿwñÿ€Wó<òŠô:(þÓþïãÿ>¯æyåètQý§ýßÇþ}_ÌóÊ+Ðè£ûOû¿üú¿™ç”W¡ÑGöŸ÷øõ3Ï(¯C¢í?îþ?ðêþgžQ^‡EÚÝüàÕüÏ<¢½Š?´ÿ»øÿÀ«ùžyEziÿwñÿ€Wó<òŠô:(þÓþïãÿ>¯æyåjÃÿ [úüý+®¬¯ǵŸývoä+jßm>N[|É.U{‰þ¥~•¾:V‰þ¥~•¾:Wyˆ´QE¥cêßê[é[¥cêßê[é@Ÿ†ÿäko÷Oþ‚ÕÝ× á¿ùÛýÓÿ µv:Ž¡™c%ÝÁ;pV=€÷4j£ŽG€2y/"î, Ü眑ëTô}ZbÁncRŽÙ"'&6ôÿëúUÈmâI‘dbìñ$p? Stßóç9üSÿЍšáÏü¹\~qÿñU1±³ïiýûáPÉed?åÎßþý/øR&’áYʯü-+&Ð}ðÄþ•Ëk¯¥ÛÝÚ[\ê––íg">Ù¤P[ã'¼ tÍahüGP¿ðÉe> Šð¿¿Ú|_w3¾X f8îaJO õŸrö¶¿×ÞiM´Îù´[;Û°^[Kl. ŰhÖXÓ †\g ¹,{cð¨o"û¶qéÒZý¾8¤Ý¼q"ØŒŸ-¤R@äÏ֗÷ŸoðýÁ21v”å™—åbNNrA9ëÏ5WZt°ÕôÛ÷{xamöÓÈã †—Ÿ@ÉߦO©5òïQMÁ­Uôô uùª(ÉZåë} >à rßF“­´˜;^6,¯#'§µñØÍqëëvw›4¼l¡[dev¨Üq€Ù<šÊ¹ñF—š±K%ÛÅ‚RÚ3&sèGËúö=ø¬? ØÍ<·q[0ÿDœ‘oz„áX|„€6’pyߦ+³OˆŒ§V.+£¶ÿy½iÒ„”!$ßkêwf:2æÆçP€%ÓÌÙ2*Ÿ‰ döÜ*“ÛÚOºKÍzÒY±£®Ô ˆáún9'søV&¹gr-Ú{›T…Ïî¶FÒ¸õëòŽÃùç ¢b¿tû UÓ£>X³jTÕH]ž‰æ™o5ü©¬ÙºpË™Wä!ÿ{ž™íYÐXè–«bðk± ­\6÷»Þ­žå-»'¥q_fÀ©'Þ˜Ð(nA œt¬UI-™« ™é¶·ZhÔ.îcÕ-$3„ùUùvŒzûÕ ôË)µ·JÈ9fù4£Cîá}±\f˜›'#œl=G¸­ZïÂὤ9ù­Ðä¯.IrØë4£Ÿf¶²j–³E 0¥Tv'qÉ÷â©Ú™cÒÒÆ=NÎØB^-ÎO13ò‘ó zçžÕÏÑ[ýAjÜ·òF^Ùö:¨à°‰´Ðš„>UŠTgRXíÚ 9ì3ùÒÝ-½íìO>©nmau‘ B£.:lòçÝk”¢—ÔïÌÛKXì-¯?Ðåê6Âvy 6å!±ÛÀÆp1TÒÊÊg¸—QÔถo/&ò„$®0ÙÎI9ÍstP° m öϱ¾šm”³êѬËtnc’YLI`†lž ÉÈ&ˆ¢† «DH°¼·RLdU+ä` ð>fý+Н©w{_#«ó„ú4v÷…‹]4j&iBÈŒ{åAš4ˆÒH"ÖíÔÉÄÄ€FÐìÅ@ÞRn3ÀkŠ ÛKðAí»£~òÂÖùm¤žÿKyà ƒ}º´EN8Ø\àŒA«WÂÒM ¬íî¬ÖHÕLaQw) 03ÀÈ®ZŠ_QÛÞØ=¯‘ÑMc¥^K ßÛ ¼Æe¸•>ÖØ$ cðA‘éS“j\\êö²G³Ã(R |ÇqÎ=®ZŠ>£ýæÛÈè¤Y7Íxu‹9oVÝá·Ø«©lœ³däojи»WVÛT´ŠQŒ¼€8UŠ2ªRX•ÚœõÆ:娦ð7û_—õÔ=¯‘ÕÚ\Aý©}y-ÄdQƒ*ò‹“ž½ËÊ´>ßeÿ?pßÁþ5ÂQRòè¿´?nûßÛì¿çîûø?Æ·ÙÏÜ÷ðp”Rþ͇ó·}Žïíö_ó÷ýüãGÛì¿çîûø?ƸJ(þ͇ó·}Žïíö_ó÷ýüãGÛì¿çîûø?ƸJ(þ͇ó·}Žïíö_ó÷ýüãGÛì¿çîûø?ƸJ(þ͇ó·}Žïíö_ó÷ýüãGÛì¿çîûø?ƸJ(þ͇ó·}Žïíö_ó÷ýüãGÛì¿çîûø?ƸJ(þ͇ó·}Žïíö_ó÷ýüãGÛì¿çîûø?ƸJ(þ͇ó·}Žïíö_ó÷ýüãGÛì¿çîûø?ƸJ(þ͇ó·}Žïíö_ó÷ýüãGÛì¿çîûø?ƸJ(þ͇ó·}Žïíö_ó÷ýüãGÛì¿çîûø?ƸJ(þ͇ó·}Žïíö_ó÷ýüãGÛì¿çîûø?ƸJ(þ͇ó·}Žïíö_ó÷ýüãGÛì¿çîûø?ƸJ(þ͇ó·}Žïíö_ó÷ýüãGÛì¿çîûø?ƸJ(þ͇ó·}Žïíö_ó÷ýüãGÛì¿çîûø?ƸJ(þ͇ó·}Žïíö_ó÷ýüãGÛì¿çîûø?ƸJ(þ͇ó·}Žïíö_ó÷ýüãGÛì¿çîûø?ƸJ(þ͇ó·}Žïíö_ó÷ýüãGÛì¿çîûø?ƸJ(þ͇ó·}Žïíö_ó÷ýüãGÛì¿çîûø?ƸJ(þ͇ó·}Žïíö_ó÷ýüãGÛì¿çîûø?ƸJ(þ͇ó·}Žïíö_ó÷ýüãGÛì¿çîûø?ƸJ(þ͇ó·}Žïíö_ó÷ýüãGÛì¿çîûø?ƸJ(þ͇ó·}Žïíö_ó÷ýüãGÛì¿çîûø?ƸJ(þ͇ó·}Žïíö_ó÷ýüãGÛì¿çîûø?ƸJ(þ͇ó·}Žïíö_ó÷ýüãGÛì¿çîûø?ƸJ(þ͇ó·}Žïíö_ó÷ýüãYúÜÑMifÑH’(†QÀ®Rµ£t[qÿOoÿ ¥],(ÔO›V7)Î ÛDw:'ú•úVøéX'ú•úVøé]ç8´QE¥cêßê[é[¥cêßê[é@Ÿ†ÿäko÷Oþ‚ÕÚ]YZÞÆ#»¶†áä,±‡úà×á¿ùÛýÓÿ µu:æ¥>“§›¸lÅÊ¡ýà2lÚ¿ÞèrYµÓì¬wý’ÎÞß~7y1„ÝŽ™À«6ŸñîßýÖ>¬\kVÒ\Éd¶ð†Û‰‹ùž¸ùG¦~µ±iÿçý÷ÿÐpÞ ñ*Ûø†[„Õâ‚)ãG³3…7;¿Ö|¹ËmR1î ix¶$6KuÍຜ¥½ªAy$hÎÇ‚B°$ŸA[6º•®Ÿ-™S2ÌÒ<¯0œ¹%²@µXh6ñC¥Äg¸‘tÓ˜w°%¾R£wàØ¥ÒÏúîn¿®Äúu³YÚ[Û<òÎÑ S,¬Yœú’kÇõÿ êú¿ˆäšÒÓý¢·_:G ¿ê#Éõ#ÜÐúW´'úÁõ¬ÿ{úáþ€+ƒ2Ì*à©{ZV»v׿ÿCj1»±ævæ%Αq¨<0 # _?u˜eyVì9É÷¨µM6#a=Ã;ËsY\9”áNì|Üv=±É­ÿIkc­i÷ÎbWxd†f2|Á8eÂç¦C ÔàöÎÏâH"ÚÞiÈ«cbŸÄóúWnSV•l*¯$”Ýîí­ÏJ”0‘¤ÕK'ªó'ŽD’$xÎceN1ÇnJ]W›BñK˜ØùW°êñ‚×û­Ž\÷ïÏlq¯ßÚÄ–ªÈ _(}£8ǧ·¯^ËT¹]JÞiî¤Ûƒ–%¶©ûØëÔ~5ëfXØb0ΜæýOŒÊòÚ¸\Wµ“\»z£Ø5mn \Gèñ*àFÃælc$íê9àc¯~+$ÛY1n®Ž ìR?<ŠYGsÇ9§)@€mŸáWÁʬ¤ï-O¸ŒU‘*ÙÛ>Ó‚“Ó1’OåH4ÕfÝÄzeË/?•!À*õçÖ¤Y ÁÏoZ•? °­jöîrѲŽ3†ŸéE9°yî8¦×½—»Ñ<¼_ñŠ(®Ó˜(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+a?ä oÿ_oÿ ¥cÖÂÈßþ¾ßÿAJç©üh|ÿC®—û½OXþ§o¢©_¥oŽ•¢©_¥oŽ•Ðr EPzV>­þ¥¾•°zV>­þ¥¾”ÉøoþF¶ÿtÿè-]Ñ”«A ÷®Ãò5·û§ÿAjîè‘E$Q"ǪŠ0ôŸiÿçþº?þ„h¢Óþ=ÏýtýІ –§5´€‰?Ö­y6«=ìºÔÖÍ{¨A 1ÛIFþZ2´(8aÉ•ºgß5ë)þ°}kÉüO40ëÚd¨UÙ­Þá¼Ð«òÕãßž##'¥ª£ygE—ws¹€?C¶›©hšzévÏe-¸*™ä †cºO8ÇõéÍ\Òt˜¤Ðæj³A)ó^)<¯LqÛ®rzK/ö’äV½¯®†m+±-51u1·{i¡”.ÿœ cñô«µNÎÛT·yÍɸ³$ùnÇ$œðyädã5r»0qQ¥o3ÏÅÿ(¢Šê9‚Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¶þ@Öÿõöÿú V=l'ü­ÿëíÿô®zŸÆ‡Ïô:é»Ôõêvú'ú•úVøéX'ú•úVøé] ´QE¥cêßê[é[¥cêßê[é@Ÿ†ÿäko÷Oþ‚ÕÝ× á¿ùÛýÓÿ µwtQiÿçþº?þ„h¢Óþ=ÏýtýІ –§5´€‰?Ö­xˆ´íÏËö¹¦šÞh p³‘âÉgŒœžž¿·'úÁõ¯3¾ŽYufŒ9˜ *…ÀòS…9瑞}MoB§$¾ßCôý¤mÍkjbÅ£Gkf"X¸‘r˜R½ûŒŒñÇ¡«¶m’€SzÆ»OËžÝ@9Î:÷­‰lƒ[’"ÁÀ+žI÷êk õݱ X ÄŸóÚ–# Ô9Û ‹Ë‘"åÕեݳ%“Á,CåŸ~sÐ7SéÖ³ã½{DHø`1˜NÂÃÐ ñÆ=jå™2mó<ÛO·NqTõ-6i%f¶‚I??–»°}Hýë‚°‹ŠÔê““šÖÆ-ÍÓIpÂ;xÖ<†Ú듞¹ÍhiìÅþæïæ¹s‘èI?Ò¯ØérÛY‹¿ìJêMŠŽ­a#q’ÇÆãò’:óí,ÿµY®»XÛÊÀÇxãœdŒñÎ)rÊ~êF®¼£ï9õ{D¸† ‹‰6Qµóשç¥gOá{–…Œwb0À¥Á>‡¨é‘Ÿ­uðø~ÎÕÙƒÌFG—æaÄ@ñÇNOÿ®¥–1oHó‘ä–9'g?þª~ÎTìT1“’÷ds66iñA Ì$PŒX|à H œzðrÇŽæåHó4ë¼BÉNÒOù棭á±ÏRnræaEUQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE°Ÿò·ÿ¯·ÿÐR±ëa?ä oÿ_oÿ ¥sÔþ4>¡×KýÞ§¬S·Ñ?Ô¯Ò·ÇJÀÑ?Ô¯Ò·ÇJè9¢Š(=+VÿRßJØ=+VÿRßJäü7ÿ#[ºô®î¸O ÿÈÖßîŸý«» ‹Oø÷?ï¿þ„h¢Óþ=Ïûïÿ¡ÔÔæ¡”RÿX>µçw‘ÞEª%ͽ¼¬~Ï,[¸¯CƒŽsÏnkÑ~ð}k‹Öï%´°Òü«‰`´1»Ã‘öùDð»[¸« õeI'Û.0Rºfeܺլ}ŽáUºÓÐà óùŽ+> F%a¹ê6­hÑð'·“Ë‘÷¯@Àƒ‘‚; ÌÓõ{™õ¦²›¢ëi€81œ7=÷rGÒ‡©+Þ+@T!£1Þ×P*µ¬»T` Ÿòü)Ÿ`½ÿŸIÿïÙÿ é´Û‹Ù5=F ÉcaŒÆ±®‚ Æzšmæ¶,õX¬˜[‘+nš ÇŽžù¤±µåQE{»g7ö ßùôŸþýŸð£ì¿óé?ýû?á]Fƒuyw£ÛÜ^¤až%`èù/‘Ô )ö¬…½¿66·_hºŽ¥’w–|â„‘±1ƒ…ÛíÛ¨ÍW×j]«-앯s;ì¿óé?ýû?áGØ/çÒûö¶Υ¨Mc¢Þ#ÅW/™ve›wP3Ð~µæ«w¸Ð,ÃF"&Vv÷ÆUºàdvàæšÆTnÖBöQµîdý‚÷þ}'ÿ¿gü(ûïüúOÿ~ÏøWq*»DëìrVÆvŸ\w®yuKËK-BQ3_¤r¤6Ò²*—v!Hùp GrÙ"º™`½ÿŸIÿïÙÿ >Á{ÿ>“ÿß³þº——¯£Þù3¸¾·'Ìû\K˜þ\ðƒÆäõäš‘.gh× +0ºÊ•sÁb›Ãc ?)W×§ÙZ‹Ù#žûïüúOÿ~ÏøQö ßùôŸþýŸð®¿T¾:mƒÜˆ¼Í¥F m$ “ƒ€3’qYë©ÊgšDH ­¢Lsx|¥Ÿ$§°ÎqÏáS}F®¢ÑK©ö ßùôŸþýŸð£ì¿óé?ýû?á[Rø™ ´´yí`‚âåZEŽ{¡„çq^§#\U«ÍLÍá±}hJ5 Œž¨\…ðÏéUõڪ׊×@öQîs`½ÿŸIÿïÙÿ >Á{ÿ>“ÿß³þ¿uÜ:•­®§r<ù£e•b@7Jî$œ½Zˆ.çMnXï.n¢V‘¾Ï‰<©/fÛœõ8Ïj>½;]%ߨ{`}‚÷þ}'ÿ¿gü(ûïüúOÿ~ÏøVÏ}ruçÅö˜Œ¶ñ2 Œ #A,NÎq×¥[Ö¯§³‚µžââQ‘Á$€HওÇTRåå@¨Å«ÜåþÁ{ÿ>“ÿß³þ}‚÷þ}'ÿ¿gü+jïP¼ûU•ˉŠÌ÷¯˜lÂü çŒóøõ©µ‹«‹kØ™®n­¬DdÉ,#€Ùݹ[æšÆÔ½¬º÷èÉZç?ö ßùôŸþýŸð£ì¿óé?ýû?á]M”®š½ý«HΘIãÜs´6AL®Ò¨–c4þ5A>§ ö ßùôŸþýŸð£ì¿óé?ýû?á]Ý?ÚSþQûÜá>Á{ÿ>“ÿß³þ}‚÷þ}'ÿ¿gü+»¢í)ÿ({Üá>Á{ÿ>“ÿß³þ}‚÷þ}'ÿ¿gü+»¢í)ÿ({Üá>Á{ÿ>“ÿß³þ}‚÷þ}'ÿ¿gü+»¢í)ÿ({Üá>Á{ÿ>“ÿß³þ}‚÷þ}'ÿ¿gü+»¢í)ÿ({Üá>Á{ÿ>“ÿß³þ}‚÷þ}'ÿ¿gü+»¢í)ÿ({Üá>Á{ÿ>“ÿß³þ}‚÷þ}'ÿ¿gü+»¢í)ÿ({Üá>Á{ÿ>“ÿß³þ}‚÷þ}'ÿ¿gü+»¢í)ÿ({Üá>Á{ÿ>“ÿß³þ}‚÷þ}'ÿ¿gü+»¢í)ÿ({Üá>Á{ÿ>“ÿß³þ}‚÷þ}'ÿ¿gü+»¢í)ÿ({Üá>Á{ÿ>“ÿß³þ}‚÷þ}'ÿ¿gü+»¢í)ÿ({Üá>Á{ÿ>“ÿß³þ}‚÷þ}'ÿ¿gü+»¢í)ÿ({Üá>Á{ÿ>“ÿß³þ}‚÷þ}'ÿ¿gü+»¢í)ÿ({Üá>Á{ÿ>“ÿß³þ}‚÷þ}'ÿ¿gü+»¢í)ÿ({Üá>Á{ÿ>“ÿß³þ}‚÷þ}'ÿ¿gü+»¢í)ÿ({Üá>Á{ÿ>“ÿß³þ}‚÷þ}'ÿ¿gü+»¢í)ÿ({Üá>Á{ÿ>“ÿß³þ}‚÷þ}'ÿ¿gü+»¢í)ÿ({Üá>Á{ÿ>“ÿß³þ}‚÷þ}'ÿ¿gü+»¢í)ÿ({Üá>Á{ÿ>“ÿß³þ}‚÷þ}'ÿ¿gü+»¢í)ÿ({Üá>Á{ÿ>“ÿß³þ}‚÷þ}'ÿ¿gü+»¢í)ÿ({Üá>Á{ÿ>“ÿß³þ}‚÷þ}'ÿ¿gü+»¢í)ÿ({Üá>Á{ÿ>“ÿß³þ}‚÷þ}'ÿ¿gü+»¢í)ÿ({Üá>Á{ÿ>“ÿß³þ}‚÷þ}'ÿ¿gü+»¢í)ÿ({Üá>Á{ÿ>“ÿß³þ}‚÷þ}'ÿ¿gü+»¢í)ÿ({Üá>Á{ÿ>“ÿß³þ Ÿò·ÿ¯·ÿÐRººåþ@Öÿõöÿú V”1.½euk\ÙSPÃÏÕ~§o¢©_¥oŽ•¢©_¥oŽ•êx´QE¥cêßê[é[¥cêßê[é@Ÿ†ÿäko÷Oþ‚ÕÝ× á¿ùÛýÓÿ µuZÞ±‰¦½ÔÄû±¡8ÞÇ ÿ=¨F 3›L®èv±,<É6““ØçšÎðæ½»`dÌbæ#¶dFȱÇüGj×´UòÚL|ìì wáˆÊ€*LzËñºÿìj&ÔÁþ+ü ÿìkXš†G#½ 2Åã\7•Ö)#p.w‘ô]£?pÞ)ñŸƒômut­KV{{­9ã,A#`ùcnHBÊÀðkÑ%E¹C £r7žõò?Å©_‰Z”Žrï«1õ&Ú*Ê­Ur¶Tdâz³øûáû <¿Ïþд Ää`•Ì}9#“Pj_¼'*[5§ˆÙ®b ¦âH¥G*ØÈ @TŽaÐWÏu»áí ãPs}%´ÇOðóyyŒ¿!=;ŒO¨¬c§uy?¿ÈÑU“{Õ<”P\k³oû,Q³¯Ü%•×ä듟¥‹ÇþŽD•üE<³¬Âc,–Òîv TˆÀÀ ¨èÓ5ï ܶ©j²}¨”†PW|j¿Ä‡S»9ìvŒ‚:ùŸŠþj Íä¶+%îÅ ª“$K嬙pL7ÞqÎÜ\­ayÑçwOË_À•U¶â–ǰ'ćéeqhÚÓ<3´Œá­fçy$ŽÞª¯ŽüU¼ï]NçËImå,ªŒ(Ä`c#žçÖ¾w¢ºV i?Ãü†ë7ÐúQ>&x7¼t×äVºmÌE¬ß)Úåýß sW´¹¼ycc{¥Ê¡c`Ñ\Ç#¾ÒTî%rs‚­|»^Ùàù´ÿûiÿ£…‚ÚOúù¬ßCÓâÔt¨o..Vé‹Ï·p(ØF8ªOýŽ÷ÆçûFáU¦´!>Fp0)» éšÁ¢’ÀSNé¿Ãü‡í¤ú6y¥é°yêIáU$F=}sTá{Ó…„úŒ©m²ªÂy‘“¬vä`qÁ‹E?¨Â÷»ü?È^ÙL÷Ú<Ñ[Çö‚‰o"ÈŠˆÀ ½N•Vc£MtóBác’E–HNÇuÆ ùsü#¡ŠÀ¢…€‚ÚOðÿ u›èt±_ÙgÏm>¥+4Í&dUmÈœ$`Ò¡FÒ†žÖ2ê—3AµBŒ)‹iÈ+µ9®zV}FŸwø{gØé ¹Ò!¶¹‰¯¦•îre–E;Û#oe`ÐTmwcö›—cìöq›•·Û´Ç@3ù×?EQ§ÝþäÙö:Xµ 5ÒáµmZq2"†¸T%ØŽ§æS×Þ¨›M ìï j7(U]•yl;? ¦9,r1jÈ¢…‚‚Ù¿ÃüƒÚ¾ÇC$Út¢mbì\Ÿ- ´ã*Fͤp;v©oïôûÍ*KAz|£dgpÁàz€k™¢¨SÓW§§ù¶}Ž¢-KM7k}-É(V*¼äãåÏ_ä*!q¥µòÝM©ÜÏå³4QH¿$d‚8‚x$rMs”Rú…>ïðÿ öÒ6vipÁ"Úêw …á·.áºíƒØu$ñW¯/t«È"F½–7…ƒÇ*)Þ¬3Êx'¨=k˜¢›ÀÁêäÿòlû›¢ÿe>Ÿö¹LnK;•;Ù‹n$¸É>Ô·÷:f£•—S¹HvÉk…qïòçò"¹º(úŒ/{¿ÃüƒÛ>ÇKi¨ØÅ}yu-ÊFíGºä±üjïöî›ÿ??øã…q´T¼¾“Ý¿Ãü†«I—öî›ÿ??øã…ÛºoüüÿãþÆÑKû:—wø{y—öî›ÿ??øã…ÛºoüüÿãþÆÑGöu.ïðÿ öò;/íÝ7þ~ñÆÿ ?·tßùùÿÇü+¢ìê]ßáþAíäv_Ûºoüüÿãþné¿óóÿŽ7øWEÙÔ»¿ÃüƒÛÈì¿·tßùùÿÇü(þÝÓççÿoð®6Š?³©w‡ù·‘Ùné¿óóÿŽ7øQý»¦ÿÏÏþ8ßá\mgRîÿòo#²þÝÓççÿoð£ûwMÿŸŸüq¿Â¸Ú(þÎ¥ÝþäÞGeý»¦ÿÏÏþ8ßáGöî›ÿ??øã…q´QýK»ü?È=¼ŽËûwMÿŸŸüq¿ÂíÝ7þ~ñÆÿ ãh£û:—wø{y—öî›ÿ??øã…ÛºoüüÿãþÆÑGöu.ïðÿ öò;/íÝ7þ~ñÆÿ ?·tßùùÿÇü+¢ìê]ßáþAíäv_Ûºoüüÿãþné¿óóÿŽ7øWEÙÔ»¿ÃüƒÛÈì¿·tßùùÿÇü(þÝÓççÿoð®6Š?³©w‡ù·‘Ùné¿óóÿŽ7øQý»¦ÿÏÏþ8ßá\mgRîÿòo#²þÝÓççÿoð£ûwMÿŸŸüq¿Â¸Ú(þÎ¥ÝþäÞGeý»¦ÿÏÏþ8ßáGöî›ÿ??øã…q´QýK»ü?È=¼ŽËûwMÿŸŸüq¿ÂíÝ7þ~ñÆÿ ãh£û:—wø{y—öî›ÿ??øã…ÛºoüüÿãþÆÑGöu.ïðÿ öò;/íÝ7þ~ñÆÿ ?·tßùùÿÇü+¢ìê]ßáþAíäv_Ûºoüüÿãþné¿óóÿŽ7øWEÙÔ»¿ÃüƒÛÈì¿·tßùùÿÇü(þÝÓççÿoð®6Š?³©w‡ù·‘Ùné¿óóÿŽ7øQý»¦ÿÏÏþ8ßá\mgRîÿòo#²þÝÓççÿoð£ûwMÿŸŸüq¿Â¸Ú(þÎ¥ÝþäÞGeý»¦ÿÏÏþ8ßáGöî›ÿ??øã…q´QýK»ü?È=¼ŽËûwMÿŸŸüq¿Â±Sþ@Öÿõöÿú V=l'ü­ÿëíÿô¢hQ­^·:#QÏRýãú¾‰þ¥~•¾:V‰þ¥~•¾:W p‹EPzV>­þ¥¾•°zV>­þ¥¾”ÉøoþF¶ÿtÿè-]Ýpžÿ‘­¿Ý?ú WQ®Üj6šk\é© ’Fw:H…²ðŽ´§E§ü{Ÿ÷ßÿB5‹á»ýOS²kËô"þàG)eþñËoϽmZǹÿ}ÿô#@}¯êÉ&½sªF×FMEŽÙ#·‘’L¯Ë*2ÞOj/ö®´†ÚÉ5xÆœeï&ň±ùdRx,y£kµ¶Ó­,¬Í¥¼!`%‰RŲX’Ù'“’MdÜx_Gx`‹ì®«^Le'‘XGýÒÁ²G±&¦Ú[úØwÖáá¹VmMuçýëŒ3sŸzù_â·ü”[ÿúáiÿ¤ÑWÖÖ°EkPAÇ`*"Œµ|“ñ[þJ-ÿýp´ÿÒhª›»¸’²±ÉÙÚM{ ¥ºîšgƒÜÿJú_÷>ðÇ…—OÓ¤ŒÏoöŠD0Iw.ÞHÉ,F8Î8€xÿ‚cÒôµ‚òù™/dgr_!€§\Xî=ÏÈ ž{mcP†ïN·1xn’J`2®29ä•ÿ=y1¸⢡Qµmmþc§[•ÝjiùK§Û5Àšd–4ß,Ñ1V”¨ÎæÃ§æÏSêi,u}BÆÑ|Ô‚`CI vòØ;ÌK ®2O^9ã/o%³µ ΪXb2I^îàsƒSÛk—³ oµæm¥ãla?‹ƒß¯J¥º½9}j/Ë͘bq5*Óx¨ô–Þ_}¾ò¾§ðäj¶§Q¶é—WL&†ÞGÉùvŽ0¸'Ðu5æ×ÖZmÓÛ^BÑJ¤ŒAÁ# Žpy¾™Ô53«ébßìñµ8i1ɪ1÷¿Èç§ «è¶Ú«Cuȸ!dÆ3ÇCØð?.kÆXøFÊ+C¿ê’i¶õµóž­áI|Eñ~òY!f²·ŠÍÛ* ÊâÞ³ž£'ñ×Í}ŸëÖ¾iñoõO |KÔ<—Íoh¾Dÿ0OÜDw'÷¯<Žyœm}E+ÛCÐ.l8•$ åchRÛÛŸQù÷¬7ðrOis6™w-œìž\­†1*±û¬£ƒŽ˜ç­XÓèÚ@pAÉÆsׂxj¶àâÏ_N•F¥gØß´¹†î0ð°e=Çz²È—o‰4•€ÏFé÷¸úsùûb#Oo ›I`¶×nY/7ŒóÃr?½×€4,¯£½Š@#u’3¶Hœ|ÊÀÿxS§*om»ô)ÝY²3£.NwäRøtÙ¶‰ØVØI(@½8‘#Øœ‘ìkâ?‰ÎŸ§ †ææ?Ù2R#pzrr;㞇¯øþD­?þÚèÆ¯W/¤Ô]GÔóñu|‹¡ÒQEéAEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPZÐÈúûý+&µ ÿ$õöÿú Ps¢©_¥oŽ•¢©_¥oŽ”´QE¥cêßê[é[¥cêßê[é@Ÿ†ÿäko÷Oþ‚ÕÝ× á¿ùÛýÓÿ µwtQiÿçþº?þ„h¢Óþ=ÏýtýІ –§5´€‰?Ö­|‰ñ[þJ-ÿýp´ÿÒh«ë´ÿX>µò'Åoù(·ÿõÂÓÿI¢ g#os=¤ë=´ÒC2çl‘¹V8#Ú½GÂР±Öâ‹Íb+†Eœu9G7lf¼¦Šm]Yˆú*}9í#ºû<—hÌHŽæ`T|Á·*²ä䕹ÆÒâáYM±Vh­ÙØÆ× ‘´dã€~l ã¡æ¼kž:Õ|+.Ȉº²lµ›jüÙ%9ù¯<Žy½ßÞ,Ñ|Seæi÷!ePÞe¬¡VeŒ•ÉùNGÌ õÎEe*1i»U”Z±ÍÎâI ]D+ià„ˆ Œ6G#“ƒÎOaYþ!¾_[Ü^ÊÓ8a›;” ´™Æ#bO̽óÔœìµìåÝi+ù„®2¹Æz¦;ç€}+À¼Y®&±ªlµw:u¿Ël¬1Øl{•ϯLóšÇÙF¤yëý#¹â½ß?ÃþÉÔ/§Ôõ ïn_tÓ9v9'Ã=‡Aì+Øüÿ"VŸÿm?ôcW‰×¶xþD­?þÚèÆ®¤’VGwÕ%QLŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( µ ÿ$õöÿú VMkAÿ H?ëíÿô çDÿR¿Jß+DÿR¿Jß(h¢ŠJÇÕ¿Ô·Ò¶JÇÕ¿Ô·Ò€9? ÿÈÖßîŸý«»®Ãò5·û§ÿAjîè¢Óþ=ÏýtýÑE§ü{Ÿúèÿú  A-Nj i¬Zð|(½ñ/‰%Õá½òã¸‚ß å)ÆØQz—Ýô¯xOõƒë\F¾ò-ލ.XHð«%´¦7qå€wAßµaˆ«*qN=Y¤"¥{žCÿ /Rÿ —þ@_þ9Gü(½Kþ‚_ùøåzúÏw ÖVŠÐyÉ$öâÓ8 WŒ‡ï»ÔÔÚýÝÆ¡lÍkçI m.P&Fã&6•ÆLŽk‹ëµ·I_3_eÉÿáEê_ôÿÈ ÿÇ*k_‚úÝÊ\ÙëRÛΙÛ,1„eÈÁÁdpHükÕt]jóR¸Í·" ¡2«-¼¨#9RÌ6¾Aê=*î³ܱ@-ÖgŒK™ã‚QŒ˜<ÈÇ8î)¿ãGö¥ÿ>ßøúÿ]]sR— ð¦õ0ˆåkYbL»… ‡Á8Îr9í] "a ‰Ý\|Í•Sôœ~u3ÇVŽé~ ©Aìr?ØZ—üûãëþ4aê?óïÿ¯øÖ­‚Ïgâ)­¥’o&XKįpÓÃ`·ÍÊžGz«%ÝæŸ¨ê÷qù kÄ^ll§{e§8z`æ©c*·em¿àw¥TþÂÔ¿çÛÿ_ñ£û RÿŸoü}Æ®ÝxŠk{«…‰¡¸ˆE3!HZ1œ'kô ã©YÔ-DÐN¶ÒÜ€Â謉ûÆ+óIàŒõçÚ­â;/Ä=œ ïì=Gþ}ÿñõÿ?°µ/ùöÿÇ×üjuºÔ¬nu'>KÈncL–îËù@îØqì:ñÖºheómdd—r œ+qÛÚ”ñÕ£­—ãþcTbÎKû RÿŸoü}Æì-Kþ}¿ñõÿ}ΧyumkÁ—íé[[@ðJ £¤—†GP@8§Û]ÝMao¹¸†»ö…ZGÌÑF’…¹ÃR;‘žµZ­nŸù‹ÙÀ‡û RÿŸoü}Æì-Kþ}¿ñõÿ³©4vÞU•´ÚŒÄ^"Ì‹rÞa6 ,8­høzid‚î)špÐÜXît‘®›¿\ç'ƒÖ¥ãj¨óiý|ÃÙFö1°µ/ùöÿÇ×ühþÂÔ¿çÛÿ_ñ®ÊŠËûF¯eøÿ™~Â'ý…©Ï·þ>¿ãGö¥ÿ>ßøúÿvTQý£W²üÌ=„N7û RÿŸoü}Æì-Kþ}¿ñõÿ쨣ûF¯eøÿ˜{œoö¥ÿ>ßøúÿØZ—üûãëþ5ÙQGö^Ëñÿ0ö8ßì-Kþ}¿ñõÿ?°µ/ùöÿÇ×ük²¢í½—ãþaì"q¿ØZ—üûãëþ4aj_óíÿ¯ø×eEÚ5{/ÇüÃØDã°µ/ùöÿÇ×ühþÂÔ¿çÛÿ_ñ®ÊŠ?´jö_ù‡°‰Æÿaj_óíÿ¯øÑý…©Ï·þ>¿ã]•hÕì¿óaþÂÔ¿çÛÿ_ñ£û RÿŸoü}Æ»*(þÑ«Ù~?æÂ'ý…©Ï·þ>¿ãGö¥ÿ>ßøúÿvTQý£W²üÌ=„N7û RÿŸoü}Æì-Kþ}¿ñõÿ쨣ûF¯eøÿ˜{œoö¥ÿ>ßøúÿØZ—üûãëþ5ÙQGö^Ëñÿ0ö8ßì-Kþ}¿ñõÿ?°µ/ùöÿÇ×ük²¢í½—ãþaì"q¿ØZ—üûãëþ4aj_óíÿ¯ø×eEÚ5{/ÇüÃØDã°µ/ùöÿÇ×ühþÂÔ¿çÛÿ_ñ®ÊŠ?´jö_ù‡°‰Æÿaj_óíÿ¯øÑý…©Ï·þ>¿ã]•hÕì¿óaþÂÔ¿çÛÿ_ñ£û RÿŸoü}Æ»*(þÑ«Ù~?æÂ'ý…©Ï·þ>¿ãGö¥ÿ>ßøúÿvTQý£W²üÌ=„N7û RÿŸoü}Æì-Kþ}¿ñõÿ쨣ûF¯eøÿ˜{œoö¥ÿ>ßøúÿØZ—üûãëþ5ÙQGö^Ëñÿ0ö8ßì-Kþ}¿ñõÿ?°µ/ùöÿÇ×ük²¢í½—ãþaì"q¿ØZ—üûãëþ5m­'³Ò-ã69ºf ñµ=>•ÓÖ^½ÿ¶ŸõÕ¿’×FR­NY$EJJ1º: ýJý+|t¬ ýJý+|t¯HçŠ( ô¬}[ýK}+`ô¬}[ýK}(“ðßümþéÿÐZ»ºá<7ÿ#[ºô®î€ -?ãÜÿ×GÿÐZǹÿ®ÿ¡ÔÔæ –'úÁõ¬xôq}ga3„>\qÉXŒ0Lg©­„ÿX>µM.͆à¸X%¸d¶M±D…™ŽÑYÕ¥ªÒ*2qØ´2÷1Ü7–eYQ·c?ÈUUðì×ÍqË3’ÅI ’zƒŒûâ¥ðÖ­¨ß  Õ-'Še;ÒV·xÑ”Ÿ»Èê?QøÖõ©ýåÉî$ðÚ§úšÃê4—¼¿k#”o À-n`€M ÜFÑ<Òª]ªFÑø ·s¢-ݰ·™d1 |ª%\û‘íÒºŒÑšoM÷ûÃÚÈåÛD‰£·ÉÂ[°h•cp€@àCOŸI>_šŒÞ[‰äa‡CÒº\Ô7wqÙYÏu6|¸ci'dÔýJ–úýàªËcšoÀÒ -¼Ì'ݶLïçœc¦)±xzÚÝ&UBžI!—s{n~œ×Smr—V±\G’ uÏ\‘RJ°‚z§‚¦´×ï¶“Ôä¿áµû,¶åI™ZF3È]ˆ9>wqZµm 5¤Mr3+Ÿ6wþm“øV½«fÊcÖ5$Ÿ¥-½Ìp,öÓG4-÷dƒ)úCÁS{ßïµ’0m<+ŒÞmº"¸R«™]‚)9ƒ£Øb’óÂp_Ïç\¢»íq3¨e8`0rzæºJ†îæ;+9î¥Ï— m#`dà š>§M>k¿¼=¬ž†Þ‚àH$3$‹!+#© ÐA#Ž1R\xqní’Þ`­W÷ŒHèCA÷ÍmÛΗVÑ\G’ uÏ\‘RPð4×}<Ä«Hçmü/ ©ˆÂˆ A“#±ùÈ-’zäɨDŽm‡ü°§Ÿ&Á·§Ëœ=H®šŠ>§O»ûÃÚÈáõoG,QF.í¬í’/ òûÊznÜÌ®6™¥²Ê­shD®’?ïÏ,¸Ú £ò®ŠY5™÷¨m&ÜŒã%³È~U-®§¥^ÜIoi}gq<~8¥Weú€r)¼$—x{G¹ÌG¥éÞ5Ôw–é#Ìé‚z™ÛŸ|S-´m"Îä\AslŽibª]ªN>»žÑ.£µy`[‰²DX`::*m‰ýÅü©}JŸw÷Ú³:v˜n<óuiæù¢mÞyûávÿ|ñQ¾¤I³76À¤"²]2Ìr܃œÛ¥vÛû‹ùQå¡þü¨ú•5ßïjÎV B—&ò¡Ü–;f}ŒOS·îçß“iá84ûç’îþȃD°e‘±ü¬ÍéÛÚº¹Û[ê~VBÌPÀýÚ·ó$Ô1Ä‘ TÏsîj^Ñ\Ò É]˜±èºTVíÞ[˜‹+m{Æl9\dœGAÅMoaio5Ô£Q´f¹;faÆ(­z+7…ƒÜÒëúÿ†1m42ÆV– »_1—iy.šB ,N°¦I¢i2Þ›¹.mZRÊä¦ÚX W;IãµnÑOê±½îÿ]_ðÇ>|=£‘űÞûcmþö8Ï`*yt­.3͸±25‰³?URH'žµ³EUwøŽëúÿ†9õÐ4•‰ã[ØÀvÞÌ5 71Æ9mÙ#³Š–ËJ°°ë0³0;DÀB€?­º(xX½×õÿ `Å¡é0Ȳ-Õ³H®<—Œí±'1ã§4ù4}*XîIìYnI óú°ÇÌ=‘ŠÛ¢ªÇ{¿Äw_×ü1ÏÂ;£ye>Õ2 ý¹÷îîÝ»¡#­Z³ÓôûÚ;k»5 Û˜›ÌÇÔ“’OÖµè¡ábômþ"ºþ¿áŠ;`ÿŸû?ûü(ÛüÿÙÿßáW¨¨ú•1óvÁÿ?ö÷øQ¶ùÿ³ÿ¿Â¯QGÔ©‡1Glóÿgÿ…`ÿŸû?ûü*õ}J˜svÁÿ?ö÷øQ¶ùÿ³ÿ¿Â¯QGÔ©‡1Glóÿgÿ…`ÿŸû?ûü*õ}J˜svÁÿ?ö÷øQ¶ùÿ³ÿ¿Â¯QGÔ©‡1Glóÿgÿ…`ÿŸû?ûü*õ}J˜svÁÿ?ö÷øQ¶ùÿ³ÿ¿Â¯QGÔ©‡1Glóÿgÿ…`ÿŸû?ûü*õ}J˜svÁÿ?ö÷øQ¶ùÿ³ÿ¿Â¯QGÔ©‡1Glóÿgÿ…`ÿŸû?ûü*õ}J˜svÁÿ?ö÷øQ¶ùÿ³ÿ¿Â¯S^æèÀ’yjŠÛ<ä?#ùSX*lNi+•6Áÿ?ö÷øQ¶ùÿ³ÿ¿Â®\@öA$óÚhKo0 ÊOð|éÔ< 4¨žÅ°ÏýŸýþmƒþìÿïð«ÔRú•1óvÁÿ?ö÷øQ¶ùÿ³ÿ¿Â¯QGÔ©‡1Glóÿgÿ…`ÿŸû?ûü*õ}J˜svÁÿ?ö÷øQ¶ùÿ³ÿ¿Â¯QGÔ©‡1Glóÿgÿ…`ÿŸû?ûü*õ}J˜svÁÿ?ö÷øQ¶ùÿ³ÿ¿Â¯QGÔ©‡1Glóÿgÿ…`ÿŸû?ûü*õ}J˜svÁÿ?ö÷øQ¶ùÿ³ÿ¿Â¯QGÔ©‡1Glóÿgÿ…dø€ ¶´Ù4R4üѶáÛŠé+Åê¬ÿë¡þ•µ4)Ï™Õw‰³¢©_¥oŽ•¢©_¥oŽ•Ús EPzV>­þ¥¾•°zV>­þ¥¾”ÉøoþF¶ÿtÿè-]Ýpžÿ‘­¿Ý?ú Ww@Ÿñîë£ÿèFŠ-?ãÜÿ×GÿÐHj jsPKH“ý`úÓtÏùÙÿ×ÿÐE9?Ö­R]Íá˜Æãì÷_gC›C íAàô f­CjØ–ïþ»ý+ ÃÛ³ù·:µÄÂ1”Ž #E$ƒËª8ì=zúV¼-‰ïW<ùÀãÛËOð4Ä;VÔ"Óô›»ÉD13°Œáˆ·½qVš†¡k&­2DÚK]D­~×EdÀ}†GÛ0Þ¥YC) Ž RƒHÓ-D¢ßM³„J¥dÀ«¼zEOq®‡0÷wÚ$6³Z^Þ\½Ö“4íÌÍ0óQQƒ.ìãïä‚(£[}^îõnô‹©'ó.ŒŠÌpBç Ôô»GµŒª˜¢‰%Š2Éåƒå‚:nÕ¥øelµC¨Nö/–ѪÛY¬ w¸¶ ,xé½[þ»ÿ˜––þ»óÞß]ÝiÚ}¼û-Æ—±íÔ×{ž nUmØÀã§=ë·Ñšìi6‹,r݈”K$g*çÔµR]'NšÚ;itëI îDð)Uú0*ìF;xÀcŠ5à€ !TÝî$­c ^½– [[[,u|©oÅø+–#$ … zúVMÓé6úî› ÎÙòÊ9¶†L.nÖa€Ø=Šºë+hžÊÂIaFš—c2‚ÈJ€p{TóYÚܸyí¡•‚²è…o¼9ì{Žõ6Ñùÿ_™WÕyCÜ_hÚÏiyyr÷ZL× ÌÍ0óQQƒ.ìãïãb‰mõ{«Õ»Ò.¥›Ì¹2+0EÁ œ/SÐ ïΪbŠåŠ32y`ù@ŽƒÛǵbé^[TêZI(£U¶²[u;ˆÜ[–<þ´Þ­ÿ]ÿÌQÒß×c{«ë»­;O·Ÿe¸Òâ–=ºƒZïsÁ;•[v08éÏzéôx¥W¶kíOÎÔEš¬°G81°ÏúÀ¸'¦ê».¥Ïm´ºmœ–ñ«‰àR©ôÀ©ã´¶ŠQ,v𤋈:  è¹ôö¦Þ·þº‰++] ¨¢ŠC+ÛÈbçþ¸GüÞ¹{£·Ž´yÐØO¬ÑÚÃdH„¦I~NõùHþ k¥Yb¶Õ&’âDŠ9!EVs€H-‘“õœ^Óæy¬£Ò­¥~á£7ÔŽ´–áÐã¬^ù|o£]ê:=ôzÏÚ<çsP¸]ª˜sò ú’pI¯Iªy¤É¯æx}r¯ò/¹œöoˆçßþÿöÊ?³|CÿÛiÿ?PÿßÁGÕáüÏï®UþE÷3þÍñüñ»ÿÀßþÙGöoˆçßþÿöÊì>Ûiÿ?PÿßÁGÛm?çêûø(ú¼?™ýáõʿȾæqÿÙ¾!ÿž7øÿÛ(þÍñüñ»ÿÀßþÙ]‡Ûm?çêûø(ûm§üýCÿW‡ó?¼>¹WùÜÎ?û7Ä?óÆïÿûeÙ¾!ÿž7øÿÛ+°ûm§üýCÿm´ÿŸ¨ïà£êðþg÷‡×*ÿ"û™Çÿfø‡þxÝÿàoÿl£û7Ä?óÆïÿûevm´ÿŸ¨ïà£í¶Ÿóõýü}^Ìþðúå_ä_s8ÿìßÿÏ¿ü ÿí”fø‡þxÝÿàoÿl®Ãí¶Ÿóõýü}¶Óþ~¡ÿ¿‚«ÃùŸÞ\«ü‹îgý›âùãwÿ¿ý²ìßÿÏ¿ü ÿí•Ø}¶Óþ~¡ÿ¿‚¶ÚÏÔ?÷ðQõx3ûÃë•‘}Ìãÿ³|Cÿ¯æx}r¯ò/¹œöoˆçßþÿöÊ?³|CÿÛiÿ?PÿßÁGÕáüÏï®UþE÷3þÍñüñ»ÿÀßþÙGöoˆçßþÿöÊì>Ûiÿ?PÿßÁGÛm?çêûø(ú¼?™ýáõʿȾæqÿÙ¾!ÿž7øÿÛ(þÍñüñ»ÿÀßþÙ]‡Ûm?çêûø(ûm§üýCÿW‡ó?¼>¹WùÜÎ?û7Ä?óÆïÿûeÙ¾!ÿž7øÿÛ+°ûm§üýCÿm´ÿŸ¨ïà£êðþg÷‡×*ÿ"û™Çÿfø‡þxÝÿàoÿl£û7Ä?óÆïÿûevm´ÿŸ¨ïà£í¶Ÿóõýü}^Ìþðúå_ä_s8ÿìßÿÏ¿ü ÿí”fø‡þxÝÿàoÿl®Ãí¶Ÿóõýü}¶Óþ~¡ÿ¿‚«ÃùŸÞ\«ü‹îgý›âùãwÿ¿ý²ìßÿÏ¿ü ÿí•Ø}¶Óþ~¡ÿ¿‚¶ÚÏÔ?÷ðQõx3ûÃë•‘}Ìãÿ³|CÿÕ­*p§.noÄÃZ¥hr¸%良Ø1¢bw4±ulÿËEﹿ7û<ÿÏVÿ¿¯Um¥†FÝ\Â0~HüÀp}O=jÿÛm?çêûø+yN/©Ë sKb/ìóÿ=[þþ½Ùçþz·ýýz—í¶Ÿóõýü}¶Óþ~¡ÿ¿‚§š=Ëä—b/ìóÿ=[þþ½Ùçþz·ýýz—í¶Ÿóõýü}¶Óþ~¡ÿ¿‚Žh÷Iv"þÏ?óÕ¿ïëÑýžç«ßש~Ûiÿ?PÿßÁGÛm?çêûø(æpä—b/ìóÿ=[þþ½Ùçþz·ýýz—í¶Ÿóõýü}¶Óþ~¡ÿ¿‚Žh÷Iv"þÏ?óÕ¿ïëÑýžç«ßש~Ûiÿ?PÿßÁGÛm?çêûø(æpä—b/ìóÿ=[þþ½Ùçþz·ýýz—í¶Ÿóõýü}¶Óþ~¡ÿ¿‚Žh÷Iv"þÏ?óÕ¿ïëÑýžç«ßש~Ûiÿ?PÿßÁGÛm?çêûø(æpä—b/ìóÿ=[þþ½Ùçþz·ýýz—í¶Ÿóõýü}¶Óþ~¡ÿ¿‚Žh÷Iv"þÏ?óÕ¿ïëÖGˆaò-­qlÊNKéë[Ÿm´ÿŸ¨ïà¬_KÐZ4R+¯˜FTävªƒWÐάZލÛÑ?Ô¯Ò·ÇJÀÑ?Ô¯Ò·ÇJÜæŠ( ô¬}[ýK}+`ô¬}[ýK}(“ðßümþéÿÐZ»ºá<7ÿ#[ºô®î€ -?ãÜÿ×GÿÐZǹÿ®ÿ¡ÔÔæ –'úÁõ¦éŸò ³ÿ® ÿ Šr¬Z¦‚ñ¼7éæ!tmFÒ’NÑÏôúP3RªÍn·3±’ê0β´~øÊòk'ÃZf¯¥  ¾– m˜ïB³3º¹<õQÁëõúÖý¯ß¹ÿ®£ÿ@Zb)ÿf?ý4ÿÀé¨þÌI?ð:jj±¥Íú\µ¼ZlÌ­p½gæÁøõ¨/±¦ÚÛÇqq¨ÚE¿êä’eU¡'’MkK†á-äÔ¬Òw¤m:†lôÀÎNhV7©f‰ Ž»“ù`SÕ÷(e9d˜k)oí¬¬lMÌ›<ó1ü¤îv(C'ÖŒŸZJ­g}o~³5»ÊоF0ÊpEZÉõ£'Ö’Š(¢«ßÝ‹ :æñ¸‚&¨8ÎqúPݵ¯¡bІÒà]ÙArh–5“nsŒŒâ˜/­Î¤Úxcö…ˆLWm$€sõ›VvwW,ÑPZÜý¤J|‰¡òähÿz»wcø‡ªžÆ§¤0¢Š(¨Ñ¦•wÅì= ¾3ïÀ5%EÄvúDSÊÛbŽîÞ€.I í¹ÿžpÿßÃÿÄѶçþyÅÿÿYö>)Ò5ˆ ·¹6UÝË‘yƒùw¨ÝÇhÍA¶çþyÅÿÿFÛŸùçýü?üMOš3@m¹ÿžqßÃÿÄѶçþyÅÿÿSæŒÐnçœ_÷ðÿñ4m¹ÿžqßÃÿÄÔù£4ÛŸùçýü?üMnçœ_÷ðÿñ5>hÍA¶çþyÅÿÿFÛŸùçýü?üMOš3@m¹ÿžqßÃÿÄѶçþyÅÿÿSæŒÐnçœ_÷ðÿñ4m¹ÿžqßÃÿÄÔù£4ÛŸùçýü?üMnçœ_÷ðÿñ5>hÍA¶çþyÅÿÿFÛŸùçýü?üMOš3@m¹ÿžqßÃÿÄѶçþyÅÿÿSæŒÐnçœ_÷ðÿñ4m¹ÿžqßÃÿÄÔù£4ÛŸùçýü?üMnçœ_÷ðÿñ5>hÍA¶çþyÅÿÿFÛŸùçýü?üMOš3@m¹ÿžqßÃÿÄѶçþyÅÿÿSæŒÐnçœ_÷ðÿñ4m¹ÿžqßÃÿÄÔù£4ÛŸùçýü?üMnçœ_÷ðÿñ5>hÍA¶çþyÅÿÿFÛŸùçýü?üMOš3@m¹ÿžqßÃÿÄѶçþyÅÿÿSæŒÐnçœ_÷ðÿñ4m¹ÿžqßÃÿÄÔù£4ÛŸùçýü?üMnçœ_÷ðÿñ5>hÍA¶çþyÅÿÿ\¿Œ…³óAÞ~ëgÓØW_šäükÏØ¿Þ?Ò'ú•úVøéX'ú•úVøéL¢Š(=+VÿRßJØ=+VÿRßJäü7ÿ#[ºô®î¸O ÿÈÖßîŸý«» ‹Oø÷?õÑÿô#EŸñîë£ÿèF€$5µ9¨%¤Iþ°}iºgü‚lÿë‚è"œŸëÖ© >ßUðÌw+º9-Ð{ƒ´`q@ÍZm¯ßºÿ®£ÿ@Zç¼1á„ÐüÙçò^íòãM¡P1îzŸËµoÚŸÞ]×Qÿ -1†µaw7ü%-'q<¶ž^ØÉóÛ»sŽø¤ñ“r÷ú¹²°Ç%•³â(ð$t˜±±m£§^•ÜfŒÑ}ë¡Åk‚mFëIÔí­õ8,à2¤‹2ÆÌÊu93Í.Ÿ£¬ú“ äÖª×r;][ì1—ÁåB€¹9ÀÀ®Ó4f„ì¨IÖ|QdúUÅô“ÇD"¶.¡¼¬[¢óƒ“Šít˜g¶Òl ¹}÷À‰#g9` Ö–+k{»›¨£Û5ÉS+n'vÑÇAÇ¥Yš. §gÿ6ÿõÍ•OY²éöú®€–w+º9!Qî÷á &‡æÏ?’÷o”m €ñsÔþ]¨rÙ±-ßývúW­YÝMÿ 8KIœO%¡“æ·8õÇzê¡l]ÝÇŸœÈUØ£?˜5)Wô4-ÆqÞ!ÓnûV6V.c’ÎÙñx:LI±m£§^”ýq¦Ôn´­JÞ J 8 ¨ë2ÆÌÊu93ÍuÛ_û¦¯èiä´ý- ¿Ð|˜næµVº‘ÚêßaBø<¨P'8Zþx±â{7Ò®/d¸Ž$ˆEn]CyX·Eç'ÛmCPCaW1ÄVk‚¦VÉ;¶Œ;qéC×A­5%Òk}*Ê —ߘ$b¦³[H?á"ŽÖ8SĆk¦ƒäÄÅO*A뎘®þŠVÒÞVü¿È:ßÎÿŸùže¦An,/®lõ;/54ÉDöÖЙ§ÜÜiwVR™¤Žúòh#â5³žN n‚Ÿ¦Å­ká}EêŠãrK–VÚ0§ž¸+¼Úþ†¯èh¸X•cEDPª aNój ¯èhÚþ†ù´yµ×ô4mC@ù´yµ×ô4mC@ù´yµ×ô4mC@ù´yµ×ô4mC@ù´yµ×ô4mC@ù´yµ×ô4mC@ù´yµ×ô4mC@ù´yµ×ô4mC@ù´yµ×ô4mC@ù´yµ×ô4mC@ù´yµ×ô4mC@ù´yµ×ô4mC@ù´yµ×ô4mC@ù´yµ×ô4mC@ù´yµ×ô4mC@ù´yµ×ô4mC@ù´yµ×ô4mC@ù´yµ×ô4mC@ù´yµ×ô4mC@ùµËxÅ· 3þÑþ•ÑmC\ß‹A g‘ügúP3WDÿR¿Jß+DÿR¿Jß)ˆZ(¢€Ò±õoõ-ô­ƒÒ±õoõ-ô OÃò5·û§ÿAjîë„ðßümþéÿÐZ»º(´ÿsÿ]ÿB4Qiÿçþº?þ„hCPKSš‚Z@DŸëÖ›¦È&Ïþ¸'þ‚)Éþ°}iºgü‚lÿë‚è"–ªS‰nÿë°ÿЦªÖçÞ×aÿ¢Ò˜‹E¨ÝP–£u &ÝFê‡u¨mÔånj¾ê|mó †ÃþAÖßõÉ?«[Oÿm¯ýqOä)a¾¶žòâÒ97Om·Í]¤mÜ29èxô¦æ¶‚à<1Ê@êEý™§ÿÏ·ýù_𥿾ƒM´k«–+•R@Ï$€?R*ÍUþÌÓÿçÆÛþü¯øQý™§ÿÏ·ýù_ð«TP_ìÍ?þ|m¿ïÊÿ…ÙšüøÛß•ÿ µTnu%¶Õ¬l EšìHCç…Øýs@¦Ÿe‡ŽÎÝNC,Jý*Íàf«X_A©XÅylÅ¡”e ÈéÒ€,ÑEQP^\ý’Õ§M>Ò— îs“Žãšž€ *Ž™©.¤·eb1ýžåíÎNwïW¨¢Š¯k}m{çýžMþD­ Ÿ)\uõë@(ª×wÖöMn³±Sq(†< åˆ$ÐÕš(¢Š* l­'}óZÃ#yãþµ=Q’u´¿(îÂãÌÏ,Wü(OìÍ?þ|m¿ïÊÿ…ÙšüøÛß•ÿ –êæ+;I®§b±B†G g št3%ÄÍÊH¡”ŸB2(ìÍ?þ|m¿ïÊÿ…ÙšüøÛß•ÿ µU¥¾·‚úÚÍØ‰î´kŽ¡qž@ ý™§ÿÏ·ýù_ð£û3OÿŸoûò¿áV¨  ¿ÙšüøÛß•ÿ ?³4ÿùñ¶ÿ¿+þj«ß_[i–RÞ]ÉåÁË¶ÒØç&€ý™§ÿÏ·ýù_ð£û3OÿŸoûò¿áTíüI¤ÝÄw,¯FiX^7:°VPHú µoªÙ]\E3n–[qr‹±†c'¹ý:Ñ`ý™§ÿÏ·ýù_ð£û3OÿŸoûò¿áMŸU²¶¹’Þi¶Ë¹¹eÚN#¸§ZgöÖý“¨.•¬¤Û¶Uƒ¸…ž§Ýè_ìÍ?þ|m¿ïÊÿ…ÙšüøÛß•ÿ §uâ].Îö[9d®" dH­e“nFFJ©bóX°°KV»¸‹¹8w©˜ôÇŽ1@fiÿóãmÿ~Wü(þÌÓÿçÆÛþü¯øTZ–³c¤´ y$ŠÓ’#Xáy°2x@MK§êVz¥¹žÊq,aŠ·aÔyØÐý™§ÿÏ·ýù_ð£û3OÿŸoûò¿áV¨  ¿ÙšüøÛß•ÿ ?³4ÿùñ¶ÿ¿+þjŠ«ý™§ÿÏ·ýù_ð£û3OÿŸoûò¿áV¨  ¿ÙšüøÛß•ÿ ?³4ÿùñ¶ÿ¿+þjŠ«ý™§ÿÏ·ýù_ð£û3OÿŸoûò¿áV¨  ¿ÙšüøÛß•ÿ ?³4ÿùñ¶ÿ¿+þjŠ«ý™§ÿÏ·ýù_ð£û3OÿŸoûò¿áV¨  ¿ÙšüøÛß•ÿ ?³4ÿùñ¶ÿ¿+þjŠ«ý™§ÿÏ·ýù_ð£û3OÿŸoûò¿áV¨  ¿ÙšüøÛß•ÿ ?³4ÿùñ¶ÿ¿+þjŠ«ý™§ÿÏ·ýù_ð£û3OÿŸoûò¿áV¨  ¿ÙšüøÛß•ÿ ?³4ÿùñ¶ÿ¿+þjŠ«ý™§ÿÏ·ýù_ð£û3OÿŸoûò¿áV¨  ¿ÙšüøÛß•ÿ ?³4ÿùñ¶ÿ¿+þjŠ«ý™§ÿÏ·ýù_ð£û3OÿŸoûò¿áV¨  ¿ÙšüøÛß•ÿ ç_óìÇP³ÿ„¿gþÍËó³åùüù8ßÓý)l%¹· M~%ݲåËÇ#÷jÄÿP:×wE;ÿ_ùæÞºŠãÅZtößÙðKsÿjµ´FY#8ÈäòAïÎi–ki. ÒÒ(õ”U[åŠ3ça÷†Õ½}i%ä+w·6„6wÛìÜ}¾ea¨Â=æIÝjº…ב:ϘÄeÏ÷Pq͵ò ®r3›ì-|idMmölgËß¹wìÏðç8ÎkRVÒG‹oˆ|±0x¿³þÑ»6õ}·oÎ{ô®ÎŠó›ðë÷j MþÓ-ˆ?$W$ðdóÑO@~ Ô~·óu;&Ô¬áÕãwk¨<‡[™Nåv.AÁÛŽ+Ò¨¡h¿¯ëú@õ¹ÌxÂÒÛßGoÝ\+yÓó?Îzžõ‡$]$¶ó ’|LVDnŒ6ô>ÕètS¾·þ·Oô–þ¶kõ<ÞþÒÊÒ[›9bA£Ùë03Äãtq#CÏ—s}9§k‚ÆmRÕMƆl€³k˜í÷î;¶íe ØÆ§Jôj)tþ»X?¯Æça¥[ÝxŠÂÞýÓRúLoÒ/ ÞaÀsÎ1ÍcNÚa:±€øI¦âÐÇŸ8ü㎫Œç¶3^ŸTôý:9n,íçÎ÷ ¼ƒ†n `t§}®÷ŸwåcŒÖÿ³¿µ5¯íÍÿlؿٟ{8ÙÇ“âߜ㞪i/.´ýLO{žõ´˜Oü¶‘I.£ßÖ»š*z]šýGý~_äy–˜i5«}:K cŸHf0éѲ “̓íô©®ŸMo Ø ÚGj'‡ûL¤$ª‡ýj©ØÏ?Zôz)ÿ_Åý~9ÏÛÅÓZê·v²Mº5´Œ¤Q ª‚ÍÇ~½Iª¾,M8kš,ÚÄp¶ž¢tvs±UÛœð:WAa-ï—åjWv{sŸ³ù7×r·éŠu…œ–q²KuxXä5ÆÌ¯°Ú«@lqš”B=NmÝÙ5É!žƒå ¸ó‡ýòŠàU›3iŸñ6òÿ„jn-<¼ùÇçu\g=±šôt˜ãÕP–æââl2IJ²í…IÉ ƒ““ÇZ“OÓ¡Ó–àBÎÞ|ïpÛÈ8fêJŸ×§èÿ_‰ÁëÐý£Äz”Zý“0ŒYKu ³*íÂÁÔ œðOá[~,½‚o jÖksæ\Ú$Bà„#i%Nyã§=ë­¢…µƒ­Ï9žå.u+‰m5gÖ“û2á%™‘@¶r0PùˆÆ1ž*Ο©ØéZÖ‘-ýÜVѶƒ«JÛA;‡ÞÑM;^¿æ-ýtÿ#ŠÕ.a¼Öï.-¥Ia“Ãò²:†ûVN£g>•á[´Œ¶Ÿ~¶†hÇHe܇xöl`ûà÷5étP¿¯6ÿPzÿ^I~‡q{oiãMkÏñ Òw-¾~óä?ßSÓÛÖ~·>)ÔožÆÚÚöÆ+²E+Üù`;ìë„lŸ¹éÒ»ª)çoïµ[Ÿ Ë Å¨¡¹†c2U‘käcß½køC~uO¶¿üMÖo *œ…÷J€AëÖºj)ߨºX(¢Š@QEQEQEQEQEQEQEQEQEQEQEQEQEQEËxÇ¥ŸûÇúWS\·ŒzYÿ¼¥ihŸêWé[ã¥`hŸêWé[ã¥-Q@éXú·ú–úVÁéXú·ú–úP'á¿ùÛýÓÿ µwuÂxoþF¶ÿtÿè-]ÝZǹÿ®ÿ¡(´ÿsÿ]ÿB4!¨%©ÍA- "OõƒëMÓ?ägÿ\ÿAäÿX>´Ý3þA6õÁ?ô@ËU ÖÎûØ0|cr;!ǦA丆I¤…%¥‹b+Éž™³RSWû>ïÜÿàTŸüUÙðÿ~çÿ¤ÿâªÕWû>ïÜÿàTŸüUÙðÿ~çÿ¤ÿâªÕWû>ïÜÿàTŸüU'öu¹ûÞsŽ»dÙOÔƒSGs ³M r«K E”$dgð©h¢Š(¢«_êºe©¹»—ˈ¹ÚX’x’O°§ÚÜÅyl—ïòÜdoþ*ÀøŠšŠ( Š* ËÈ,-ZæåÊD¤ÁKu8zšžŠŠ;˜%šXc•ZHH(<¡##?…K@Q@GûkJûa³þÓ²ûPm¦=wçÓnsš½@Úa7FÔJ¾xO0ÇžBçǦjZ(¨ ¹†ä9‚UFæ6*s†GÔT´QP^^Aaj×7.R%  [©ÀàsÔÓ£¹‚Y¥†9U¤„"ƒÊ23øP´QEQYï¯hÑ\›i5kœ6Ã\ `Þ˜Îs@QEQP\ÞAha¹S4‚(ð¤åAÇNMOEEÌ7!̬‚71±Sœ0ê>¢¥ Š( Š)“K¼Òº¤q©gf8 RhôUiu XÝÞ_–åÖ8ˆRÁ‹ Ž>¦¬ÐE“@]/­$³7‰uZ…,g€§wL T6šÞ“?“g©Ù\KŒì†á]±ë€hõQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@rÞ1égþñþ•Ô×-ã–ïé@Z'ú•úVøéX'ú•úVøé@ EPzV>­þ¥¾•°zV>­þ¥¾”ÉøoþF¶ÿtÿè-]Ýpžÿ‘­¿Ý?ú Ww@ŸñîßýÑE§ü{Ÿ÷ßÿB4!¨%«¡RÿX>´Ý3þA6õÁ?ôOQ‡úÓ4Î4«?úàŸú g¬O5½×‹$‚i!“ý CÆÅXgƒ‚:ph½±žÞó]‚-_U ed—Vù¼rUÈ|ä“– àäu®ÒK 9L¦KHÍ·ÍÝ;öýÝ޸힔洶w•ÞÞ&iG!( uçå>£“ǹ¡í \âuÍVâòÕVØÎ—é«vò%û[¨Ü  Ì9SÁíÞ¬µÜš®¥mo¨ÏiÓ#ºQæ,İ 08Ïzé®t}2ñb[­:ÎqÛ–mƒÐdp*޵ Éª¬QÅ%ŒpF»BO`³í>©–xö4ß[[ÿ_!/ëðþ¾gk¨jÚ’iv­tøm5fVmA­ZG,AmÁX¾08éÏ9®ûHk¤Z ùc–èD²Fr®}AÀëPÃáý14«M:{Hn µ@‘‹ˆÕú¼Ž´Ùìµq)•µª€#…¬K”tÈÐS}D–ÆM…½»ø×[–[‰£™$€¤kpÈ® @r€á¿j•…À´ðPÕ®®u ™îñzê4›FÒN#9««M2ÞG‚æöÞÒâþ%\ýœýœä¯çS}ŠÐY›1kوǓå˜ôÛÒ—K àÚ÷R¶Ñ¼Cl÷3FÖòÛùEovŒ9\)ôÍ^º·Ô-¯µ-"ÃT¸ m ¸®®˜²“#Q!Ë.à¸ïƒÒºˆt}2ÞÝíáÓlâ‚B Æ*«Ð Iq§XÞ76VóïPæÄ­¹AÈ#40èqwÁ©izmª›èÌZÊA0–í¤‘i'l¡‰#‘‚åZ‘«x€iW:¥å”BXŠÝ²<¬X†frrÛ@ßšé#Ó¬a†(b²·H¢}ñ¢Ä¡Q½@ÇÞ‹½>ËPU[Û;{•C•D)õ_…ƒúünqÖ—7šÌ^†êöéån ­ Lî1+ƒÈÁüišÐºßâ[ˆµ+øŸMŠ&¶ܰQû¼œ®pÙ÷Üh ‘HaŒ¼@ˆÛhÊÁÁíM{+Iáíaap›t`ù€ Þ¼zÐü:JËcâ‰låÔöòØ¥ÆÛ™Œ¥_yòºU¯Ï5·†îe‚WŠ@Ñáãb¤fE‘íZVŒêÒÙ›x/ YÞ ø\ç=³U`°Ôdbš¥åí©Â,Jdç ä»>”ï·õÔ[ö0@|g®LóÌ“Æð´q-Ã"¿î‡T Èî fønmkPšÃQ7iûǵ#ê û‡9AÀ©ÇCÛœ×m.e5ÜwrÙÛÉsÜ™âRëôldSWKÓÒôÞ¥…ªÝœæq ‡9ÿk¤†Î ››oO&­ªgQšXî@¼|0 ì6óòò£îâº? ßyvW÷·¥Ì7òÚÂ÷|îùW'ï6?+e,m#XU-`U€–ˆ,`ÉÈ%}:žž´}‚ÏôH8—λIýþŸ{ß­ ëËþ=¯_ø_–Ó|A °µk)uI#–öG,Öàíömè89ÝZ—³.5³s­\Ú6› }‘cŸ`#Ë $#£å²9ÈãÙ‹;QÑ‹hDs’Ò¨A‰ êXwϽC&“§LÐ4º}«´KB§Ë ^8ü)t·õ°ÛÖç+nPñMÆ£,Ö³¾‘ ¥c¸hrûÉ àŒŒž† “U¹—_µ½³3Çlú—Ù$_³‡ê¤yÂŒŒƒœþuÚ]iÖWÍ]ÙÛÜ4G1™bW(}FGÒ4Ã{öÓ§Z¼îóü…ߟ]ØÍUõOúÞÿð ¶úéoø''§‘eaâ;ûi¦mB›²yìS#|¼ã=óбáeÕòÞé¯[9­‹J­¨µÉv8!ÕJ ÁŽ}«¨uŠÞ›Ñgn.ÈÁœD¾a›±š®ÚDË4šU½•äg çœœ€TŸÎ’Óî×ï*ø¶y­¼7s,¼R#2(·¤èºÌwIä2Bþ& tÑøgÞÉ•Nzc5ÝÇmo ¸·Š’ò•\£*m/O²ŽHí,-`IÖ,Pª‡ú€9  o C¨Ãwrg¸G³xÐÇÛÚ핹ÉÜÊcn*ψ§š 4q¯™¨Ä±ˆÜ¤6AõÕa´‘iM ,tÙ‘…˜`ÞÊËϾimloKçU¹³½Áâ gå˜ØK·?•>¨]ÌiäYXxŽþÚi›P†æì¤{Èä/8Ï|â ±}^=:âý/Õ­ÛM–F?ÚMpÌûr®  ÙƒœÇ>ÕÛ:ÅoMè³·d`Î"_0MØÍG¦@Ó4:uœm2•”¤ €õ ÈúÔÛKyX«ë;œ•®,º–™jÚ¶­äÝ馿AöÙ3æ œƒœóž:t­Ï êÞw‡4ù/nU®ä‰Ž†ùv ¹Àæ¶ÖÝ$ŽE‚ ñ§–ŒeW”Ãǰ¦Çag„ÇiŒ,»}3ßMïoërRîqZ>§w.½§\Áç­ž¡Î"—Pk‚Ø—*F#>Àž¸§ÚâÿÁ·º”Ú•ÍÅýÅ”þlàìFÚr¢<àméÓ5ÖÁ¤i–·FêßN´Šá³™cUÎzòié¦iñÞ=âXÛ-Ó‚a‡lõËc&¥««ÎZ=–ZO‡þÃ}pâ{Ëq.nÞL‚‡åäœ/·J§wqö-KU:­ÄzµóC ˜› €áU }róœgž+²‡HÓ-€iÖ‘ — ¯Î:7¯=ií¦Ø½êÞ½•»]/ 9‰K£c5WÖÿ×Oò%++]ÌäuoµMuâk¥Ô/ “N†9-Ò+†TSåî9N’;ŠÕñ£8ðÜ1@’=棲H±»ær¹ d(c×Ò·ÎÕüýÖзÚ&Êæ c ëÇÓ­»<.`ˆ¼9ò˜ Ìy;}8ãŠ^^Ÿð~ñõ¹Ëø^E±Õo´ca=•´Š.m`¸Û¼,€mfÝƒ×ø[Ð"ŽÿUÔu’ŠJÖ– 48b?Þ|þVó[ÂóÇ;ÃM!$* (=@=Fp(‚m¢AqF !#P£$äð=è¿_ëú°_×Ì’Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¹oô³ÿxÿ1]MrÞ1égþñþb€4´Oõ+ô­ñÒ°4Oõ+ô­ñÒ€Š( ô¬}[ýK}+`ô¬}[ýK}(“ðßümþéÿÐZ»ºá<7ÿ#[ºô®î€ ŒÄÁ‰Ži#ÝÉ ‚3øƒRQ@æ?òù7ýòŸüM4Á1ÿ—éÿï˜ÿøšžŠ¨ÖM"”–îyðÊv.GÔ(?­K-ŵª¨–XâÀ @©ªµ‚+Þ_;(f…Ž@ا™4ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ç|W<7Ú<2¤Š‚PägŠí6'÷ò®KÆ ±àÉéõ€¿¢©_¥oŽ•¢©_¥oŽ”ÀZ(¢€Ò±õoõ-ô­ƒÒ±õoõ-ô OÃò5·û§ÿAjîë„ðßümþéÿÐZ»º(¢Š(¢Š* 7þ>uúî?ô©ê¥µÄ—W‚æháó$žcÜ6Æ}Á  J*§ö¦Ÿÿ?Öß÷ùÆíM?þ­¿ïòÿ[¢ªjiÿóýmÿ—ühþÔÓÿçúÛþÿ/øÐº*§ö¦Ÿÿ?Öß÷ùÆíM?þ­¿ïòÿ[¢ªjiÿóýmÿ—ühþÔÓÿçúÛþÿ/øÐº*§ö¦Ÿÿ?Öß÷ùÆíM?þ­¿ïòÿ[¢ªjiÿóýmÿ—ühþÔÓÿçúÛþÿ/øÐº*§ö¦Ÿÿ?Öß÷ùÆíM?þ­¿ïòÿ[¢ªjiÿóýmÿ—ühþÔÓÿçúÛþÿ/øÐº*§ö¦Ÿÿ?Öß÷ùÆíM?þ­¿ïòÿ[¢ªjiÿóýmÿ—ühþÔÓÿçúÛþÿ/øÐº*§ö¦Ÿÿ?Öß÷ùÆíM?þ­¿ïòÿ[¢ªjiÿóýmÿ—ühþÔÓÿçúÛþÿ/øÐº*§ö¦Ÿÿ?Öß÷ùÆíM?þ­¿ïòÿ[¢ªjiÿóýmÿ—ühþÔÓÿçúÛþÿ/øÐº*§ö¦Ÿÿ?Öß÷ùÆíM?þ­¿ïòÿ[¢ªjiÿóýmÿ—ühþÔÓÿçúÛþÿ/øÐº*§ö¦Ÿÿ?Öß÷ùÆíM?þ­¿ïòÿ[¢ªjiÿóýmÿ—ühþÔÓÿçúÛþÿ/øÐº*§ö¦Ÿÿ?Öß÷ùÆíM?þ­¿ïòÿ[¢ªjiÿóýmÿ—ühþÔÓÿçúÛþÿ/øÐº*§ö¦Ÿÿ?Öß÷ùÆíM?þ­¿ïòÿ[¢ªjiÿóýmÿ—ühþÔÓÿçúÛþÿ/øÐº*§ö¦Ÿÿ?Öß÷ùÆíM?þ­¿ïòÿ[¢ªjiÿóýmÿ—ühþÔÓÿçúÛþÿ/øÐº*§ö¦Ÿÿ?Öß÷ùÆíM?þ­¿ïòÿ[¢ªjiÿóýmÿ—ühþÔÓÿçúÛþÿ/øÐº*§ö¦Ÿÿ?Öß÷ùÆíM?þ­¿ïòÿ[¢ªjiÿóýmÿ—ühþÔÓÿçúÛþÿ/øÐº*§ö¦Ÿÿ?Öß÷ùÆíM?þ­¿ïòÿ[¢ªjiÿóýmÿ—ühþÔÓÿçúÛþÿ/øÐº*§ö¦Ÿÿ?Öß÷ùÆíM?þ­¿ïòÿ[¢ªjiÿóýmÿ—ühþÔÓÿçúÛþÿ/øÐº*§ö¦Ÿÿ?Öß÷ùÆíM?þ­¿ïòÿ[¢ªjiÿóýmÿ—ühþÔÓÿçúÛþÿ/øÐº*§ö¦Ÿÿ?Öß÷ùÆíM?þ­¿ïòÿ[¢ªjiÿóýmÿ—ühþÔÓÿçúÛþÿ/øÐº*§ö¦Ÿÿ?Öß÷ùÆíM?þ­¿ïòÿ[¢ªjiÿóýmÿ—ühþÔÓÿçúÛþÿ/øÐº*§ö¦Ÿÿ?Öß÷ùÆíM?þ­¿ïòÿ[®GÆÝlþ§ùŠèÿµ4ÿùþ¶ÿ¿Ëþ5ÌxÂxnÑà–9T1£Èô  -ýJý+|t¬ ýJý+|t ¢Š(=+VÿRßJØ=+VÿRßJäü9ÿ#Sÿºô®ß'Ô×áÏù_ýÓÿ µvÔ†.O©£'ÔÒQ@ “êhÉõ4”Päúš7SIE.æþñüèÜßÞ?%»›ûÇó£sxþt”PîoïÎÍýãùÒQ@ ¹¿¼:77÷çIE.æþñüèÜßÞ?%»›ûÇó£sxþt”PîoïÎÍýãùÒQ@ ¹¿¼:77÷çIE.æþñüèÜßÞ?%»›ûÇó£sxþt”PîoïÎÍýãùÒQ@ ¹¿¼:77÷çIE.æþñüèÜßÞ?%»›ûÇó£sxþt”PîoïÎÍýãùÒQ@ ¹¿¼:77÷çIE.æþñüèÜßÞ?%»›ûÇó£sxþt”PîoïÎÍýãùÒQ@ ¹¿¼:77÷çIE.æþñüèÜßÞ?%»›ûÇó£sxþt”PîoïÎÍýãùÒQ@ ¹¿¼:77÷çIE.æþñüèÜßÞ?%»›ûÇó£sxþt”PîoïÎÍýãùÒQ@ ¹¿¼:77÷çIE.æþñüèÜßÞ?%»›ûÇó£sxþt”PîoïÎÍýãùÒQ@ ¹¿¼:77÷çIE.æþñüèÜßÞ?%»›ûÇó£sxþt”PîoïÎÍýãùÒQ@ ¹¿¼:77÷çIE.æþñüèÜßÞ?%»›ûÇó£sxþt”PîoïÎÍýãùÒQ@ ¹¿¼:æ|^IKLœüÇùŠékšñwÜ´ÿxÿ1@z'ú•úVøéX'ú•úVøéLBÑE•«©o¥l•«©o¥r~ÿ‘¥ÿÝ?ú Wm\O‡?äi÷Oþ‚ÕÛRQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW5âï¹iþñþbºZæ¼]÷-?Þ?ÌPž‰þ¥~•¾:V‰þ¥~•¾:S´QE¥cêßê[é[¥cêßê[é@‡ØGâY¥n,}gó"¯ÿeÉÿC\Ÿ÷Ñÿâê—‡‹\ª±]Ñ€HõØùRÏÃÿß+þ”鯵*Ó¥~N¾Iþg7ý—'ý rßGÿ‹£û.Oúäÿ¾ÿ]'•'üü?ýò¿áG•'üü?ýò¿áQõj}¿þf¿]­Ý}ËüŽoû.Oúäÿ¾ÿGö\Ÿô5Éÿ}þ.ºO*OùøûåÂ*Oùøûå«Síø¿ó®Öî¾åþG7ý—'ý rßGÿ‹£û.Oúäÿ¾ÿ]'•'üü?ýò¿áG•'üü?ýò¿áGÕ©öü_ù‡×kw_rÿ#›þË“þ†¹?ï£ÿÅÑý—'ý rßGÿ‹®“Ê“þ~þù_ð£Ê“þ~þù_ð£êÔû~/üÃëµ»¯¹‘ÍÿeÉÿC\Ÿ÷ÑÿâèþË“þ†¹?ï£ÿÅ×IåIÿ?ÿ|¯øQåIÿ?ÿ|¯øQõj}¿þaõÚÝ×Ü¿Èæÿ²äÿ¡®OûèÿñteÉÿC\Ÿ÷Ñÿâë¤*ÈÑþõÛ-‚èOaíRÑõj}¿þaõÚÝ×Ü¿È忲äÿ¡®OûèÿñteÉÿC\Ÿ÷Ñÿâë©¢«Síø¿ó®Öî¾åþG-ý—'ý rßGÿ‹£û.Oúäÿ¾ÿ]M}ZŸoÅÿ˜}v·u÷/ò9oì¹?èk“þú?ü]ÙrÐ×'ýôøºêh£êÔû~/üÃëµ»¯¹‘ËeÉÿC\Ÿ÷ÑÿâèþË“þ†¹?ï£ÿÅ×SEV§Ûñæ]­Ý}ËüŽ[û.Oúäÿ¾ÿGö\Ÿô5Éÿ}þ.ºš(úµ>ß‹ÿ0úínëî_ärßÙrÐ×'ýôøº?²äÿ¡®OûèÿñuÔÑGÕ©öü_ù‡×kw_rÿ#–þË“þ†¹?ï£ÿÅÑý—'ý rßGÿ‹®¦Š>­O·âÿÌ>»[ºû—ù·ö\Ÿô5Éÿ}þ.ì¹?èk“þú?ü]u4Qõj}¿þaõÚÝ×Ü¿È忲äÿ¡®OûèÿñteÉÿC\Ÿ÷Ñÿâë©¢«Síø¿ó®Öî¾åþG-ý—'ý rßGÿ‹£û.Oúäÿ¾ÿ]M}ZŸoÅÿ˜}v·u÷/ò9oì¹?èk“þú?ü]t_n²ÿŸ¸ï±SÑW Q‡ÂeV´êÛŸ§’_‘Û¬¿çîûìQöë/ùû‡þû=¡‘Û¬¿çîûìQöë/ùû‡þû=Û¬¿çîûìQöë/ùû‡þû=Û¬¿çîûìQöë/ùû‡þû=Û¬¿çîûìQöë/ùû‡þû=Û¬¿çîûìQöë/ùû‡þû=Û¬¿çîûìQöë/ùû‡þû=Û¬¿çîûìQöë/ùû‡þû=Û¬¿çîûìQöë/ùû‡þû=Û¬¿çîûìQöë/ùû‡þû=Û¬¿çîûìQöë/ùû‡þû=Û¬¿çîûìQöë/ùû‡þû=Û¬¿çîûìQöë/ùû‡þû=Û¬¿çîûìQöë/ùû‡þû=Û¬¿çîûìQöë/ùû‡þû=Û¬¿çîûìQöë/ùû‡þû=Û¬¿çîûìQöë/ùû‡þû=Û¬¿çîûìQöë/ùû‡þû=Û¬¿çîûìQöë/ùû‡þû=Û¬¿çîûìQöë/ùû‡þû=Û¬¿çîûìQöë/ùû‡þû=Û¬¿çîûìQöë/ùû‡þû=Û¬¿çîûìQöë/ùû‡þû=Û¬¿çîûìQöë/ùû‡þû=Û¬¿çîûìQöë/ùû‡þû=Û¬¿çîûìW?â™xmä…ÖDGÚYNFOoÒºzÂñ_ü‚âÿ¯…þF€-èŸêWé[ã¥`hŸêWé[ã¥1 EPzV>­þ¥¾•°zV>­þ¥¾”Éø{þFIÿÝÖº k]M!QV¸™Š–EllBÁwۓǯç\ÿ‡¿ädŸýÑýkG\ðõÕÌw“YÞÜn^2Ðâ=¸R:\€'ëõ¥Ô} º®±w¥ù“¶›¾Æ"»æóÀl ªcœg¹§q$©nÏ"i@ùc/·?jÁ½Q“VA>s{el¨bÙ$J%“»¸,:vÆyô­I.o6ÝìÆuM¢%&f|Ýx÷<ÑÐ:•ìõ{«¥¾‹ì ·¶ŒªbYÃ#ddað?*]/T’úk»{‹QÅ«*¸I<Å9lË›¥ÙÝéÿÚä˜-¥"ÓÖd$žw7]«GíSè|öwW’‹/°YË·Ë´óa†w63Çö¦"FÖnî.®"Ó4Ñu»ùrK$â%.:ªðs‹­^ö=F;m:9f6ßh2ç`^qºsU WI…µ­‹]Ãq$“C,S"4eù!ƒÐ÷ªséowa=ö‘ý©³OXd $d‰s’~r3ß‘I_sýGßúênZëIu ÉªYi!hËÊdàŒŽµKMñ:wÛu9‘Ù;I”‚Ã;Fì—ú¨Å-–—{…¯lÞ0²J²ùâMÂ%`v¦ãéùT—:}Ô–$K^Úx^a¸|¡TƒßŸÂŸ_»þº}ÿð SëÚu´QI,΢U.«ä¹m£©*@÷ S®uÍ6Ñ"ynA'˜žZ4„§÷° ñïÒ²µ*åõÏ·Çoss –âKk³©œýåúÕiô­®íç¶²»{o², {ã‘Iäî‡>½©_˜Î Kñ[Í«ÆìYNA[¨kÚÉѬ–X­ZîâGÙº6ÒüyÁ蠟¬ÙÛGgaeoFŒ€#-¸¯ÊÜg½eßiZ†¥â1r.¦²·µƒdF#s#9ùÎ60Žƒ½}m©f÷^Š .ÎòÖ/´›×Hí×~ÀÅÆF[°Ç±©tQõ!t“[}žâÖo&To\à†ÀÈÁ…s ê‘h§J{c{gm|$dDk˜Í´t†=8J¿¡Zê:Tr¬zcGkqx [=–¶Œ™ÉÉ-ÎÐOZjÚÿ]¿à‰ÿ_‰q+²Š}4ź{KÕ”‰a݆ÌqµTž§ž8Å[»ñ•c0†æëcíVaå¹Bä 'ü •ªé÷–×ÑØ&òñŒ *+ål«N;tÎy¦ÞèWO«_Í6{wm¨b–ú‡’ä Èë¼u¥ØGJÚæž5?ìï9Úèc*»ÈÈË´qêj?i÷IoovL’#ߢÈGP¬Àü G¥éÓYk´­Ëy¼‘ ,BÇ´÷Ïç\Þ…£ªèz%¨°0Û[\‹ƒvÒ© ˜áTÙ=9½;jª_i0ß›)/œ8ŒüŒQ\ôRøÚ±9¨mõg]W[K–?f²1l b&Oy¬kV:~¡¡Çb¯ ÝÓJ/¼Õ ˆÏ¸å~öáÐ`c§5=þ›­%æ´Ö°^CÇ,rª3º~ëOzKoëÈ}K×¾(³‹D¹ÔlÉŸìò$rFÈèÊY€åHÝÐç§5nOi±ZGs,²¢JÅ#V·HäuÂmÜ*æS@Ô¥ÓõÀ–—=ËÁ$Þ] ]Ìx$ÜÝq“W5{KT¸Óµ?ìÛ¸ÚßÌŽKHïDRíla•ѱۡ4ÄtÖw¶ú…¢]ZJ²Âÿu‡ä~‡Ú©êþ›¥Ü,sºÊSÌÚ¼˜\ã'h8ZMÞ ;MX„/hÎÍ#E<þc†'’['$õëY·—0xؽ•ƒ_–Ó@+¨˜ýáç,@Å'½¿­‡ÒÿÖæËj‰%þš–÷6ïÚ;Žš@ ¡¼çðª·~#³{-@X\.mà•ÃX eøñ´àöÍgéÚõ›hI"©Ésç²0ÄfN@ÈÇ”YÚjÖþ›A“K9ŽÖHc¹I“d§/îç¸üh–ÎÃŽèմ׬þĆêéDÑÚ¥ÅÁÚv aÔœ`Øuö¥Oé/iqsö¢±Û`Ê'FPz¤ç·×2¾Õ`ЧÑâ@ñL±Ü¬­ WY”©hÝÉ0Î:v<ÚÅÖ“~bÒïa¾”Bƒíwârê² çséÖ©Ù¿ëúþ®B½—õýHéN­š=Æ£n²`ÞGÕFÕ­=.ÛQÕdÑ'šÄÙ[Ù[Þ´ªÆRÑ…Bž~qÛŠ<ÿ®£×àn[ø‡Kº¾pݘ–Uù+•êˆÚÄ{LÕõk› Û ;K$¹žì¸Q$þR®ÕÉçkVƒáùìe²·½Ó¯$k6-Ïöh2ÃËðH8ÆÞ2j}jÆ÷U“F»ºÐÊÂe7^to·# Ë­·-Eâ¢ñ'™c²q¨%„¨& ªÌ3¹X˜`Ž0? ÓÒõ?í#z<Ÿ/ì·Oo÷³»n9éÇ^•ËÛøQAEb--µ ¸ŽÈL­ä"ƒ½³œryÂæ´t¿í].÷Q‰´[‰¢¸¾y’dš »8.oJ¿¯—ü×ãÿ[Ï K9îŸ$‚Gì%#|³´:ÿ³úÖöä2_é°[ªÍ üRJ“+ð…=1Îw~¬_ìMG-þ×^Ÿ}Õqóuý:ûTÑø~êÏÆ6×VÀ($ϳ y2>2ô$gއ4-•ÿ­êßOëWú´moTÕâ†ét›x¬äfa¼%ÀŒíòýºf¤"Œø—û'ìíåc`ºÝò™‚î1ãvóœûV‡ô¹´ˆa2xIšþ6rnÖH2rNwç¡Å8ø_W] 'ó6¢²ý»ì»bÙççq]ûsܯÞÇá@?#^ç^Ô«ge¥Gr–J#µ×–͸g »HíÜŠÕÓ¯âÔôÛ{è§Œ:† ƹ›Ï ]jÚ†µ<’\Ùý¦(D.V`§puVà ñÏ©ÅtšJÊšMªMf¶r$aZ ªÆcÒ€{è\¢Š)QEQEQEQEQEQEQEQEQEQEQEVŠÿäýw_äkv°¼Wÿ ¸¿ëºÿ#@ôOõ+ô­ñÒ°4Oõ+ô­ñÒ˜…¢Š(=+'T\ÄßJÖªW‘oB(‹ÐP§ˆ¦b6dàßÚ»9=_þý·øW!¨Ú]ÛÊòÚK$2‚Èpq\åÅω•ŽÍVè¨ÿ C=KÎOWÿ¿mþyÉêÿ÷í¿Â¼“íž+ÿ ½×éþ}³Åôºý?€=oÎOWÿ¿mþyÉêÿ÷í¿Â¼“íž+ÿ ½×éþ}³Åôºý?€=oÎOWÿ¿mþyÉêÿ÷í¿Â¼“íž+ÿ ½×éþ}³Åôºý?€=oÎOWÿ¿mþyÉêÿ÷í¿Â¼“íž+ÿ ½×éþ}³Åôºý?€=oÎOWÿ¿mþyÉêÿ÷í¿Â¼“íž+ÿ ½×éþ}³Åôºý?€=e]¢ ¸áòrŒ06ŸQïR×ý³Åôºý?¶x¯þ‚÷_§øP¯Q^CöÏÿÐ^ëôÿ >Ùâ¿ú Ý~Ÿá@½EyÛÙâ¿ú Ý~Ÿá@½EyÛÙâ¿ú Ý~Ÿá@¯•¤6†Ò+Xc¶ ¯’±€˜=FÞ•*"ÆŠˆ¡QFT`è+ÈþÙâ¿ú Ý~ŸáGÛ> stream ÿØÿàJFIFÿá°ExifII*JR(i‡Züÿÿ)( üÿÿ)( 0210‘ 0100 ÿÿ È -ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀ-È"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?÷úBÀPdzo¯RÞ6v`ª£$“ÐPÖW½DowãZ·Å;É.tËxE¸8Y&‹ûàÖ²ÏÄq»Yÿß—ÿâé\xûjxQöÔþð¯ÿ…®zYÿߦÿâèÿ…®zYÿß–ÿâè¸õöÔþð£í©ýá^ ÿ \ÿ§?ûòßü]ð±µÏútÿ¿-ÿÅÑp=ëí©ýáGÛSû¼þ6·ÿNŸ÷å¿øº?ábëôéÿ~[ÿ‹¢à{×ÛSû¶§÷…x7ü,]oþ?ïËñtÂÅÖÿéÓþü·ÿEÀ÷Ÿ¶§÷…mOï ðoøXºßý:ß–ÿâèÿ…‹­ÿÓ§ýùoþ.‹ï?mOï >ÚŸÞàßð±u¿útÿ¿-ÿÅÑÿ [ÿ§Oûòßü]Þ~ÚŸÞ}µ?¼+Á¿ábëôéÿ~[ÿ‹£þ.·ÿNŸ÷å¿øº.¼ýµ?¼(ûjxWƒÂÅÖ¿éÓþü·ÿGü,]kþ?ïËñt\yûjxQöÔþð¯ÿ…‹­Ó§ýùoþ.øXº×ý:ß–ÿâè¸óöÔþð£í©ýá^ ÿ Zÿ§Oûòßü]ð±u¯[Oûòßü]Þ~ÚŸÞ}µ?¼+Á¿ábë^¶¿÷å¿øº?ábë^¶¿÷á¿øº.¼ýµ?¼(ûjxWƒÿÂÅÖ½mïÃñtÂÅÖ½mïÃñt\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿâèÿ…‹¬úÚÿ߆ÿâè¸ñöÔþð£í©ýá^ÿ Yõµÿ¿ ÿÅÑÿ Yõµÿ¿ ÿÅÑp=ãí©ýáGÛSû¼þ.³ëkÿ~ÿŽQÿ Yõµÿ¿ ÿÇ(¸ñöÔþð£í©ýá^ÿ Yõµÿ¿ ÿÇ(ÿ…‹¬úÚÿ߆ÿã”\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿã”ÂÅÖ}mïÃñÊ.¼}µ?¼(ûjxWƒÿÂÅÖ}mïÃñÊ?ábë¶¿÷á¿øåÞ>ÚŸÞ}µ?¼+ÁÿábëÞµÿ¿ ÿÇ)ábëÞµÿ¿ ÿÇ(¸ïöÔþð£í©ýá^ÿ Xþõ·ýøoþ9Gü,]cûÖß÷á¿øåÝþÚŸÞ}µ?¼+Â?ábëÞ¶ÿ¿ ÿÇ(ÿ…‹¬zÛþü7ÿ¢à{¿ÛSû¶§÷…xGü,]cûÖß÷á¿øåð±uï[߆ÿã”\wûjxQöÔþð¯ÿ…‹¬z×þü7ÿ£þ.±ëkÿ~ÿŽQp=ãí©ýáGÛSû¼þ.³ëkÿ~ÿŽQÿ Yõµÿ¿ ÿÇ(¸ñöÔþð£í©ýá^ÿ Yõµÿ¿ ÿÇ(ÿ…‹¬úÚÿ߆ÿã”\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿã”ÂÅÖ}mïÃñÊ.¼}µ?¼(ûjxWƒÿÂÅÖ}mïÃñÊ?ábë>¶¿÷á¿øº.¼}µ?¼(ûjxWƒÿÂÅÖ}mïÃñtÂÅÖ}mïÃñt\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿâèÿ…‹­zÚÿ߆ÿâè¸ñöÔþð£í©ýá^ÿ Zõµÿ¿ ÿÅÒÂÅÖ½mïÃñt\yûjxQöÔþð¯ÿ…‹­zÚÿß–ÿâèÿ…‹­zÚß–ÿâè¸óöÔþð£í©ýá^ ÿ Zÿ§Oûòßü]ð±u¯útÿ¿-ÿÅÑp=çí©ýáGÛSû¼þ.µÿNŸ÷å¿øº?ábë_ôéÿ~[ÿ‹¢à{ÏÛSû¶§÷…x7ü,]kþ?ïËñtÂÅÖÿéÓþü·ÿEÀ÷Ÿ¶§÷…mOï ðoøXºßý:ß–ÿâèÿ…‹­ÿÓ§ýùoþ.‹ï?mOï >ÚŸÞàßð±u¿útÿ¿-ÿÅÑÿ [ÿ§Oûòßü]Þ~ÚŸÞ}µ?¼+Á¿ábëôéÿ~[ÿ‹£þ.·ÿNŸ÷å¿øº.¼ýµ?¼(ûjxWƒÂÅÖÿéÓþü·ÿIÿ [ÿ§Oûòßü]Þ¾ÚŸÞ}µ?¼+Áábëôéÿ~[ÿ‹£þ6¹ÿNŸ÷å¿øº.½}µ?¼(ûjxW‚ÿÂÆ×?éÓþü·ÿGü,msÒÏþü·ÿEÀ÷¯¶§÷…(¼CÜW‚ÂÆ×=,ÿïËñtáñ#]^Ö÷åÿøº.¿,êÝêPÀ׌xâ|ò_GoªCÇ! &ˆ }Á'|ñ^±it%PA¦…€äQ@Ìp¦¸/^еÛÈ?ñÓ]ÝÉÄf¼ËÇŽ²¯Gý1ähÇ7Qº¡ÝFê‘—¬-$Ôoc´…âY$$)•Â/Lã'¿aïZÚ§„õ ?RžÎÙ†&Š:+,kŒ³)n:ð2I¬ {©­.c¸·‘£š6ÜŽ½T×Cáÿ*j³¾µw3Cqbö^qÌJqƒÉ:/3:=S•ìR;Ff¿Rö :þ𧯎)ú†«ésÁ 턱IpvÄWÞ}RFyé],:þ‡c­ø`E¨´öšd2Ç5ÇÙÝ9e |¸Ï_­f.µf|?¦Ú-ûAuª×Ä,ÞTg8p1ƒÉÎÜÑ×úïoËPþ¿…φõ«;»[K‹Iî‰XSÍC¼Ž£†ÀëßùCï>€©<ûu®ši6~+ÒŸOW}ÅdƃºLî`‘ªú§ˆì­î4Óc}myioz.šÞ 8Ûm#ÜðÄ‚i­lÊòøJïN𾣩j–²ÛÏEöu2)3a²>½ñX1X]Ïa5ôP¶…Ö90ùYº g<ý+§Õõm û]Z¤·7:­Äsˆ^ÙÐņÉÿ­Yþ Öì4»»¨uR~ÃpŠÇ [÷ˆÁ“€½%»¿õ¢þ½Aí¡B] U¯K'V²(.õ% ýÑÁù³ŸáÍ;Qðö³¤Ú%ÕþŸ,99*@>ø'Ž+£¾ñŤÖzeÌqî¾{¨çÔ)ð£$`çƒÇLT¶·¢Ç¦k‹a=ìúÄÉ!ŠH¸ »’~ñíÇ £úü¿àB-#ÁºÖtøµ›`²¹v]ÂTÜHF`8$»éX“éðÇÆÕÄW2˜í¾aºR8\î?\bº'ñ”ß`ÖEÏú 7”ü~è¯ÝÆî¾Õ_Y×4ýfóKÕ£¿{+ødXæAºÆªr² Æ1þÎúïªFfÏárÚòÚÒm=–âëp†?5 | žÆ®*-GAÕô™aŽþÆHZfÛYX1ôÈ$gñ®ÏO¿Ñoüi¢Kc$W‰yMÕÌÍIû¶Á*ßÅïY7:¦a§Úéê]R©ýªäù DèP×ðëÍ upïýw0õ/ë:D÷öB²¶Ä!•ÁoO”ž}©×^Öì¾Íö6T7M²Ü¥ºãh$Ä éõh–ÖVÉc<-Q.Ö {n1Øä[Þ©¦¯ é¾0ÄVúœ·¾tîÒÛ›VW…]HÎãÃc `v¡9ýSEÕ4SÔlÞßÌÎÂYX{©#>ÕŸººOjöw6ÙéúµÍ¿žf1A§o,ã'ø‰ÉÎcìù:L–Ùšd›Ã´ÉmºuÏ£çŒvâ’/h~¹×ìõm3Ú)óKüD€0¨¬|9¬êMp¶v-1¶Ç( Úèå† ÔþÔ4ÔÓ5/RºkHïãŒ$â#(RŒN ŽyÍiøkRðæ™Ùn ŽêÝâêk”Ëè‚c=ý©ÛRz´ß Üê¾¹¸´¶šMNß Â]P*…²äúÕ-'×zž°úl²Ee$LSpÀ$à¹Ë@?>kmõT²Õm.µY,–mXÞÄâÙܲ`c¯JÌ»ñ÷Ä(u“º+5¹‰·2’Ûq'·J#«Wþ´C{;Z³þÜØê7Ve÷˜&x·ã¶’3ŽÝ*¾ê³ª^E?ˆ// Û,/tò¦õ;]K’28>”jš·ö£ÄßÙÚu—–Å¿”?Þ俥^Êã{²ðð¾ºÚ`Ô—MÙ˜üÑ t9Lg;s»ö§K'HšÆ+™®ïÞTJ;ðó‘Àç5¹eâm&WE™îÈŠÛHû,çÊs‰1÷qŽyî8©<#©ZO7„´øåÝuk-Ñ™6‘´2±ãð5VÕÿ]Ééëc™½Ð5=*æÞ-RÜÙ,ìM#AêIRzuÇZ³©höš2ê¶´z…·Ÿöy¢*øÏÌ=êö£{¡Ã¤[è1j’ÝDú—Ú..>ÎÈ N„rIêxÏzgН4k«(¢Òu”kKl }=,äN¿yË·ºòi_B­gc—ÝFê‡u©ˆ›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Uí/O„®Ò»$ðvõcè+/ujiWkr[±ÆöÜ9ÆxóøP¼º™$ebBøáÖçÜþµsðØË.¡ö"B¸bº€óë[>d|á¤wi˜ÈœVd7Àj¯txI̞ÌÒaÑ#‰•ãº}™ 6Ù8Ç^ƒmdjsYÞ,L«'1çœ`ûÖ‰’Sk4 BD›ðÆCŸ˜“Óo¿­V¼½ß}nè7}·ýNAÇéC½´muszËÃú5²$WÌgºe,G˜T uÀàzšËÖt«kh÷N•žÕÈXçnz{Š¿?“ªB›¦Í¿ÞÉlc©éŒœŒsÐñjëWØÓͫȯ3íÜTc€AÎ;tåQÄT•D¯«ÝGŠÁÐ >T’Z>æêúÃwfkX‰9%E|纽ïÂ,M¤?îŠõÑóGÊŠ)°ýÁE0uþ¬×˜xóþAwŸõÉÿ‘¯OºÿVkÌxD_ïà”êÖ{DWQùNQ\Àü¬)à÷Töú{\i——Ë*„µ1‚¸ÉmäŽá@wT]Ok2Ím4Ê¿vHœ«ÜȨ)8 úÒÐË’I$’y$÷¤ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(C+–„“KçAQQ@ ˜  zqJ³”èò¨¨  w"P”'®Ö#?‘¨ÚRÄ’zÔtR²½ÇÌÚµôº½ûÂñéû¢¾¯ 0ÿ GþLÃÿÅÒŠ·áø[ü†õüÿŸõr꿈`ñ=ßÛ-5;™9 "lË{ÇÏ9ã·ÐõËø‚ÞK]vînÍÜi›ï1 ›“ÈÎ=Emÿ±ñ‡ý?òfþ.øV>0ÿ GþLÃÿÅЕ­ä6ïs’®¢k»Ko hbçL‚ð³\m2K"mùÇMŒ?Z—þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.˜°Ñ¶¥©IiÿÚÒÈÁœÊ“,~PÜ#.¬»žøïÖ²¯ä{Û?°Ékp«lòÁ#!ÛÎpÉÈ'½Cÿ ÇÆôÿɘøº_øV>0ÿ GþLÃÿÅÐÕÝÁhqu>²ºš·ö"ÚŸ³y¸Ø%Ú»<¿Cž¸íœ×œWq¨øƺ¦¡-äú2,’X%Ä@tÇj©ÿ ÇÆôÿɘøºIK•Öÿ±ñ‡ý?òfþ.øV>0ÿ GþLÃÿÅÓ’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*÷ÿǤ?îŠòßøV>0ÿ GþLÃÿÅשxCþ=!ÿtSB=¸(¢¸(¦.¿ÕšóÈ.óþ¹?ò5é÷_êÍy‡ŽÆtÛ±ë#@•bØÓ-qÿ<“ù ŸÌ>Õ‡©Hñø.åãfG]=вœ|¾ Õ$Ô/ôß [My¨X¬òˆÖû,œ®q°9go¦>”€éžácÛ½•w£'>”ÿ0ûWu«ÞkZF—2, y²°hÝc,¡°ÛN ‡šßÓïõ+¹u-.åí¡Ô-B¸†2c*à•m„ç#ŒÓ¶Ÿ×—ù‡_ë»G@“Ú©GÿWc·š?ô¬¿ IrÚ}â]]Ku$WÓÇæÊrHVÀöAÅjEÿ7õÔè CKERQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEɦŽÞ '•¶Ç—vÆpÉ5ZÛSµºŸÈŒÌ$Ú\,nÿë ÿЭUSÊO3ư²ÈÁ†é#åû§Ò€%¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ¤2J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠÏÕô‹[Û+Æ[y/$…‚HÑ®íÛp¿1ü+FÑ.ŸS/ªéÈmÄNM²A¸•ÇžÀó]V.ÿç•¿ýþoþ"Œ]ÿÏ+ûüßüEa<<'57º%Å0EoÅIkÑBø ã|#Ŭ_îŠëä–x|ÑGå¼É!%G® Šä|'Äýn†wÐ}ÁE}ÁE0uþ¬×x¤n8õ8¯EºÿVkÏ|H3qõqü躲ÿ}¯ýqOýTõ—üƒíëŠè"§ ¯ü~Çÿ\ßù­X5]ãö?úæÿÍjÁ Ÿ¥UnµiúUVëH ëßøø—þ¹Eüå®N×CšßÂÓ[âsy%£Äb{†d AàÛGá]ÄH¯¨ÎC".ÏñIJÓiɋԈ]b*2Twÿ>‡Ð×l4êMÊ.Û~Ш¢µG«i·RMc< 3,P¼RG‹pÝ·‘æ§¡¡ªW:²F‰{%«Ù¥±XÞ éŒä1qŽã•î>•éÃ(‰A¤m ”pOòÿì迾ï„ÿâj#„ª•®‡í"rÖÓÉ3]Cå8Ž|Ï”ôõ8ü+šµÐoLAöw¶i,¤‚W’Pèò1È1€NÕÎN0½GéßÙÑ}¿ï„ÿâhþ΋ûíÿ|'ÿS HÞÍÛ.ÇšækK¡›¤l°¢]²º>æ?) d`dõïOmêâÆ{X­~ÃÅÈ’5 ¹µP£,œH<ŽkÒ?³¢þûß ÿÄÑý÷ÛþøOþ&«ê•{¯Çúè%R+¡æWšMõÌi»M"Ah°D ™UbpÇ–ùáH7~3[ÆÚyu«y¥Pa··;Xƒ+:ðþ=]öl_ßoûá?øšbAÊð¼q±P6À2ÀÒ–£êº÷ê ¬WCж[¹5¹'¼°¸Â³Go&øÌq§÷±»v[œp=j®½¥Ý^^É$v²MºÜG Ç* ÷|ÀHÜ¿wŒ7CÇ5ègƒþxÇÿ|Š>Ïüñþù– ¢’’kOQºÉ¦ŽTÒä{ š5Äîñ;DÓ’§k«ªÇjô>•U4Ûɵ¼6¿gG»Y %Ô”Q.ヌ’G=«ÐþÏüñþù}žùãýò(X*‰[™_ðÂö±ìqšW0i1YÜÚ´/b-Å•„˜ÈÁ<}qX£LÔžÉ-Å”ÛéÓÚ‡ó¬¬ÁBíç#;{^›öx?çŒ÷È£ìðÏÿï‘M`ª&ÝÖ¾£ö«CÏ®ô©âwû$¯[ÀÙÝüÄf9ˆxªWVz‡Ùf»Ô%Û;¼ÇDWÙ36ÖÁÀ%Jç¶MzwÙàÿž1ÿß" ºÛÀ]mãf,AP9'õ4Ö¢ê…í#ØóÍ9dÕnì6Û`þÑrÊFÑÜ‚ ŸBi²h×ñ´2$SlŽ[‘å@aÜß*G˜ ãCÏÖ½û:ìÿËK!íöröj?³nÿç­—þþ*ªT¾´]O>¸Ò.­­åŠÞÆK¤›O[TÝ${á 7ÞɘtôéZ×VsȺPDÏ‘0i9(òØ~<‘]_ömßüõ²ÿÀcÿÅQý›wÿ=l¿ðÿñU/QîÐý¬O>þüm6Ò ¤£MšÞC¸pìh8ëÈ5%õ¦¡xöWBÒæ/*7‰áà/ómù†ü©Ôï³nÿç­—þþ*‘mÞÞxÒå-¤YIUhãÛ‚8 ç°4þ©R÷mÃÿËÚÄó-UH†[o/ÎiôÕ¶…XüÔ#pÆ27g#îç‘Ò¯¶tÚ¬†Uºh&š)ƒBÐ…B¡xmÄô?Zô³Áÿ~÷]Às]ÏÙàÿž1ÿß"³ÁÿÏüñþùfÏùƒÛ®Æ¿öx?çŒ÷È£ìðÏÿï‘Gölÿ˜=ºì`Q[ÿgƒþxÇÿ|Š>ÏüñþùfÏùƒÛ®Æ¿öx?çŒ÷È£ìðÏÿï‘Gölÿ˜=ºì`Q[ÿgƒþxÇÿ|Š>ÏüñþùfÏùƒÛ®Æ¿öx?çŒ÷È£ìðÏÿï‘Gölÿ˜=ºì`Q[ÿgƒþxÇÿ|Š>ÏüñþùfÏùƒÛ®Æ¿öx?çŒ÷È£ìðÏÿï‘Gölÿ˜=ºì`Q[ÿgƒþxÇÿ|Š>ÏüñþùfÏùƒÛ®Æ¼`€LQ€;í[í|±³þzy'gýõŒ~´fËùƒÛ®ÆU¼ €Œˆ£#ýÑKöx?çŒ÷È£û6ÌÝv0(­ÿ³Áÿ࢈>ࢺLÆ]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@Õ—üƒíëŠè"§¨,¿äkÿ\SÿA=5ãö?úæÿÍjÁªëÿ±ÿ×7þkV Dý*«u«OÒª·Z@Goÿ!)ÿë„_ú•—?„m®5&ÔQ¿[ƒ 2´)ù:˜­Kù Oÿ\"ÿФªRø³F†w†K™Dˆþ[/Ù¥8lãv˜’\Z×Sÿ 5[&©Nß¿³>²Ÿýõ)“ž´€£©kÑéSªÜØÞ}˜•V»ES8ù·uÇj­âË[ ˸ÊúXì›™âY" 2 ù·tç€k[ðµî¥{(ŽÂqq$oÅø–Ø.ܪ€¤cƒÜu5©u£\ÎÔ1£xŽsâo²cþË2E¸çwÚîǦÜqõ-ÿŠ­¬/.à{+éRÌ)¹ž(Ô¤A†A?6zsÀ5š|ÃAXÖöãûQq8su'“öŒîݳ8Æïj»>…{<^!ÜðÔàTŒ8Ví9ã¦}3Å/OëüÇ»&ÔÎbLFä =I#S\þºÒhñjÚ}µå„²ßÛª½«³‰„žXOݨS¿ LV½Ç„î¯`Ôay X¯"·eÜ – z8õ£¿õêJ¾—þ¶5#ñ,N— Ún¢—0fµ0ƒ)W8 ±uÏ<`ÖÝszv‘}¦ÚÜ=¦—¡Y^¶ÅSýŒ¹ù·| ôè9æºJc ©©Dz×x¿ô1VꦥÿÉÿ]âÿÐÅ (x¯X¿Ñ-~Ùow¥C¡Äw‹Î㉆‘ì~”ÝwÄ·Zvˆ’ZÙ«j’ÚµÏÙå'l*«¹™ñØt÷$qg^¶Ö/c’ÖÎ×JšÖXб½wÊ“NФ0Ǹ¬ÛŸ[Ë¡ýn®Ž ºx³‹©bY6© ¹TàŒ“Á¯zNö×øVºþ»5„ïu§ZÜ8剂ô€x«KH±:n‘id]œÃ¡f‘œ“ŽynqéíWjångb#{+…S¾ÿ]cÿ]Ïþ‹z¹Tï¿×Xÿ×sÿ¢Þ¤¢†­­Ûh뜲;É© c'’qß½eÂmgÿ>W÷Ô_ü]mjMŽª¨·°y›T†e#ñR Pÿ„CCÿŸ7ÿÀ™øªæ¨±^ãV;(Ë¡ûÔïåÿTÿ„ÚÏþ|®ÿ憎øº?á6³ÿŸ+¿ûê/þ.­ÿÂ!¡ÿÏ›ÿàL¿üUðˆhóæÿø/ÿQˊ‘¯>ùeø™Sþk?ùò»ÿ¾¢ÿâèÿ„ÚÏþ|®ÿ憎øº·ÿ†‡ÿ>oÿ2ÿñTÂ!¡ÿÏ›ÿàL¿üU¸®ëúù>ùeø™Sþk?ùò»ÿ¾¢ÿâèÿ„ÚÏþ|®ÿ憎øº·ÿ†‡ÿ>oÿ2ÿñTÂ!¡ÿÏ›ÿàL¿üU¸®ëúù>ùeø™Sþk?ùò»ÿ¾¢ÿâèÿ„ÚÏþ|®ÿ憎øº·ÿ†‡ÿ>oÿ2ÿñTÂ!¡ÿÏ›ÿàL¿üU¸®ëúù>ùeø™Sþk?ùò»ÿ¾¢ÿâèÿ„ÚÏþ|®ÿ憎øº·ÿ†‡ÿ>oÿ2ÿñTÂ!¡ÿÏ›ÿàL¿üU¸®ëúù>ùeø™Sþk?ùò»ÿ¾¢ÿâèÿ„ÚÏþ|®ÿ憎øº·ÿ†‡ÿ>oÿ2ÿñTÂ!¡ÿÏ›ÿàL¿üU¸®ëúù>ùeø™Sþk?ùò»ÿ¾¢ÿâèÿ„ÚÏþ|®ÿ憎øº·ÿ†‡ÿ>oÿ2ÿñTÂ!¡ÿÏ›ÿàL¿üU¸®ëúù>ùeø™Sþk?ùò»ÿ¾¢ÿâèÿ„ÚÏþ|®ÿ憎øº·ÿ†‡ÿ>oÿ2ÿñTÂ!¡ÿÏ›ÿàL¿üU¸®ëúù>ùeø™Sþk?ùò»ÿ¾¢ÿâèÿ„ÚÏþ|®ÿ憎øº·ÿ†‡ÿ>oÿ2ÿñTÂ!¡ÿÏ›ÿàL¿üU¸®ëúù>ùeø™Sþk?ùò»ÿ¾¢ÿâèÿ„ÚÏþ|®ÿ憎øº·ÿ†‡ÿ>oÿ2ÿñTÂ!¡ÿÏ›ÿàL¿üU¸®ëúù>ùeø™Sþk?ùò»ÿ¾¢ÿâèÿ„ÚÏþ|®ÿ憎øº·ÿ†‡ÿ>oÿ2ÿñTÂ!¡ÿÏ›ÿàL¿üU¸®ëúù>ùeø™Sþk?ùò»ÿ¾¢ÿâèÿ„ÚÏþ|®ÿ憎øº·ÿ†‡ÿ>oÿ2ÿñTÂ!¡ÿÏ›ÿàL¿üU¸®ëúù>ùeø™Sþk?ùò»ÿ¾¢ÿâèÿ„ÚÏþ|®ÿ憎øº·ÿ†‡ÿ>oÿ2ÿñTÂ!¡ÿÏ›ÿàL¿üU¸®ëúù>ùeø™Sþk?ùò»ÿ¾¢ÿâèÿ„ÚÏþ|®ÿ憎øº·ÿ†‡ÿ>oÿ2ÿñTÂ!¡ÿÏ›ÿàL¿üU¸®ëúù>ùeø™Sþk?ùò»ÿ¾¢ÿâèÿ„ÚÏþ|®ÿ憎øº·ÿ†‡ÿ>oÿ2ÿñTÂ!¡ÿÏ›ÿàL¿üU¸®ëúù>ùeø™Sþk?ùò»ÿ¾¢ÿâèÿ„ÚÏþ|®ÿ憎øº·ÿ†‡ÿ>oÿ2ÿñTÂ!¡ÿÏ›ÿàL¿üU¸®ëúù>ùeø™Sþk?ùò»ÿ¾¢ÿâèÿ„ÚÏþ|®ÿ憎øº·ÿ†‡ÿ>oÿ2ÿñTÂ!¡ÿÏ›ÿàL¿üU¸®ëúù>ùeø™Lø¦ÛQxlÒÖá ÒÆ„¹Lm,2žFEtFí ÿg tÇÞ_OLçô¬i<-§[…žÆÙ–æ'WBgç0XŽ@Å?ûIvççÝ»w6sé·8Ïá[ÒUýæþG-wIË÷)ÛÌšÎù¢…¢òºÇ,‘©qµ\€9>€ ±ý¢ßóé7æ¿ãOÓíÚM³Fžc;ÈFÆæ-Œûf­mOùçýò+C—ö‹ϤߚÿÚ-ÿ>“~kþ5wjÏ8ÿï‘FÔÿžqÿß"˜¿´[þ}&ü×ühþÑoùô›ó_ñ«»SþyÇÿ|Š6§üóþùKûE¿çÒoÍÆíÿŸI¿5ÿ»µ?çœ÷È£jÏ8ÿï‘@¿´[þ}&ü×ühþÑoùô›ó_ñ«»SþyÇÿ|Š6§üóþùKûE¿çÒoÍÆíÿŸI¿5ÿ»µ?çœ÷È£jÏ8ÿï‘@¿´[þ}&ü×ühþÑoùô›ó_ñ«»SþyÇÿ|Š6§üóþùKûE¿çÒoÍÆíÿŸI¿5ÿ»µ?çœ÷È£jÏ8ÿï‘@—w¦[+„6ò&bo™Šàp} sžû£ë]n¢ª4Ûœ"å7!G¥r^û£ë@ÜpQDpQ@ ºÿVkÏ|Eÿ1×EþuèW_êÍyãæ/úè¿Î€;«/ùÚÿ×ÿÐEOPYÈ>×þ¸§þ‚*zjÿÇìõÍÿšÕƒU×þ?cÿ®oüÖ¬‰úUVëVŸ¥Un´€ŽßþBSÿ׿ô)*tµ¨õWŒý¡ÏÊOf#Ô‡üMoÿ!)ÿë„_ú•JYÁ®¦˜Àœü¯6~TsÑO×ôÈõá¥wŽ"’ Äû“Ü#?Bj4ÄÿÇ…ÏçÿV¥ž(É!]ðØ8ãÿJ—ì–ßóïýð(?Í›þ|.¿8ÿøº<Ù¿çÂëóÿ‹­²[ϼ?÷À£ì–ßóïýð)ŸæÍÿ>_œü]lßóáuùÇÿÅÖ‡Ù-¿çÞûàQöKoù÷‡þøŸæÌ?åÂëóÿ‹©mc”Ë-Äɱœ*ªdgÇËžÕoì–ßóïýð*%QÄ‘/Ü ¬¦r1úSJ+YÁ®¦˜Àœü¯6~TsÑO×ôÈõãVQ¹áŒ’GÃ`ã¤ÿJ–Š_²[ϼ_÷À£ì¶ßóíýð((¥û%·üûÅÿ| >Émÿ>ñ߀¢¸€\Eå’WÀŽÄƒùŠ›ì¶ßóíýð(û%·üûÅÿ| ƒ7ÿóñmÿ€íÿÅÑ›ÿùø¶ÿÀvÿâéUDW2D¿p*°™ÈÇÓŠ–€!Íÿüü[à;ñtfÿþ~-¿ð¿øºšŠ‡7ÿóñmÿ€íÿÅÒ¦’d’âT/%FPF2rNx'ó©è Š( Š( Š( Š( ЉQfºtnDE!OBI=*›ì–ßóïýð((¥û-·üûEÿ| >Émÿ>ñ߀Š_²[ϼ_÷À£ì–ßóïýð((¥û%·üûÅÿ| >Émÿ>ñ߀Š_²[ϼ_÷À£ì–ßóïýð((¥û%·üûÅÿ| >Émÿ>ñ߀Š_²[ϼ_÷À£ì–ßóïýð((¥û%·üûÅÿ| >Émÿ>ñ߀Š_²[ϼ_÷À£ì–ßóïýð((¥û%·üûÅÿ| >Émÿ>ñ߀Š_²[ϼ_÷À£ì–ßóïýð((¥û%·üûÅÿ| >Émÿ>ñ߀Š_²[ϼ_÷À£ì–ßóïýð((¥û%·üûÅÿ| >Émÿ>ñ߀ û¿ÚþÕå;Ýþ{ûÕ²[ϼ_÷À£ì–ßóïýð((¥û%·üûÅÿ| >Émÿ>ñ߀Š_²[ϼ_÷À£ì–ßóïýð((¥û%·üûÅÿ| >Émÿ>ñ߀Š_²[ϼ_÷À£ì–ßóïýð((¥û%·üûÅÿ| >Émÿ>ñ߀Š_²[ϼ_÷À£ì–ßóïýð((¥û%·üûÅÿ| >Émÿ>ñ߀Š_²[ϼ_÷À£ì–ßóïýð(®£ÿ ÛŸúäßʹ }Ñõ®»Q·4Û–HcV6PJä|1÷GÖ€;¸>࢈>ࢀuþ¬×žø‹þ>bÿ®‹üëЮ¿ÕšóßÇÌ_õÑwV_òµÿ®)ÿ Šž ²ÿ}¯ýqOýTôÕÿØÿë›ÿ5««¯ü~Çÿ\ßù­X4ôª­Ö­?JªÝi¿ü„§ÿ®èRS_CÒ$‘¤}*ʼnff·BIõ'ëù Oÿ\"ÿФ¬;Ÿ_Á­,hÈ×ÂÆ>ÔFõ=îtÆIôÁ¦Jü\Zÿ×Cÿ 5gxŽUŠMtË¿Q‰Füü‡ ó Ï×#Ú¯ÈOÚ-3×Ì?úRjt:‹Z™šEû4ëp›eÎÈéÍ uꃣ9Öñ&±\Þ”±m:ßQûÄÄ»w„Üv3–b›¥jZ…ž½©\OÖ·WL"(Æ_”ð–ÀÛkaü9fö6fIü»‹¿µ¹ 2x|:eGøÒGáËXîo\]kÂí5›2˜X¸Ãcw?\Réçoòÿ‚|¯þð [?jŒ“¼ö©" ).U’ÎxV'QŒÒ 6}F:t«RëìF;¾š×:…ÄQÆD.5u'‘¿,F=E^·ðâAg=›jzŒÖ²ÀЦ‘XF¤cå;s=Iªúî‰5ÖŸ¤YY4Ê–·Q•UÑHÜ ã=;~Z_îüõ m÷þZômRòâöÿNÔRwfP™-òDpJ $#&´þ?äÿ®IüÚ«iz<WÚfžââáƒM=ÃwÀÀ Uƒÿ! ë’7¤GÐô‰$iJ±gbY™­Ð’}IÅY”ââÓþºŸý«œ¹ñUüÑÒÆŒp\,cíDoSѾçLdŸLè. Ùg¯šô[Ð̱I¤n†9wj1¨ßŸá¾a‚9úä{VSx“W®oJX¶o¨}¢â]»Ân »Ë1[š…”ZƒZ™YÇÙ§YÓa,3€xéÍR}Ñìnm “ùw_krd>ðØtÊŠŸõ·ü——õ¿ü?JÔïìlõÝFââ)¬-n®˜DQŒ¿)à-€=¶Ó,ü]©²NóÚ¤ˆ,ä¹VKIáXFB3H0ÙõéÒ´£Ðm£¹»qqrm®Ë´ÖlÊbbà qŒóõ¦Ûè)œöm©j[K@"–Ea‘”íÎ@õ&—O—è>¿2 uv #NßNkBx£Œˆ\$jêO#~XŒzŠÒѵKË‹Ûý;QHÝ™Bd·ÈIÁ €rAà‚2k7[Ò&ºÓô›+7™RÚæ"Ò£ªº"©ÔzZ©mâ™f6w2é™{(ŠÞçΉ9ÚY1ò†Çž£4ÖñUÊO4¥ìèo~Æ÷ã.p]Û6ôÉéÖÞ–gm.¦Òé–R‰mí¼¡Ÿ?0\ñÀè3RÉá­úeåŸÚñö›ï¶oòþïί·çîã>ý)«_úòÿ‚m?­ÿàÖs\̳›O³••˜zÇLúv«5ZΘVaswö‚Ò³!òÂlCÑxë^õfBÓçôÊ?æõÇk:õäî¯Õ¯mc´Ž6‚+{:±*IÜvsêºÕljõÆ/æõ‰q£ê#W¾¾°Õb¶‚0èö¾a]£ƒ¸ýÁ¤ÆŒùµy¯l.ZWaq&€gs Æa sª8΋>Õn×VR#0žO#CK’¾ÈØÿg{½ŸÂ‹o Aj \Èam<ÙWæå‹Ï®XñŠTðäž[‰oûi¿Ùå„8ã' Þ‡§ëM½íý|_æ„–×þ¾òd°xºH‚¶«§ 8ä³kÈž9üÐÈ å\6zýiºG"Õ/…¡ŠÕ^Hx¼›Ô›Œ¬˜!çÜuçŠuχb»[(眴VörZ:…Ápê œç»ïÖ£B»}2ãN½ÔÖ{imÌ RØG"‚1’Ù98ö>¶þ·ÿ€ ú_úÛþû/%ÃjË ±–ÎØÜÿ¢^,èê3‘¸†ã¡ë_G¿¼Ô,–æîÎ+Q"«Æ©?›•#<ü£ÛšÀ‡ÃW®šçP…ÚkdžM§”Or7ŸÊ·ìãû%½¶ýþLkìc8Î(Òßןüþ¿/ø&†ê7U_0Ñæ@ZÝFê«æ<Ã@·Qºªù†0ЭÔnª¾a£Ì4kuª¯˜hó ZÝFê«æ<Ã@·Qºªù†0ЭÔnª¾a£Ì4kuª¯˜hó ZÝFê«æ<Ã@·Qºªù†0ЭÔnª¾a£Ì4kuª¯˜hó ZÝFê«æ<Ã@·Qºªù†0ЭÔnª¾a£Ì4kuª¯˜hó ZÝFê«æ<Ã@·Qºªù†0Щé—_õÉ¿•qþû£ë]MóçO¸ôÉ¿•rÞû£ë@ÜpQDpQL]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@Õ—üƒíëŠè"§¨,¿äkÿ\SÿA=5ãö?úæÿÍjÁªëÿ±ÿ×7þkV Dý*«u«OÒª·Z@Goÿ!)ÿë„_ú•dÁg1¡•T¨}¿0¨Ï§«[ÿÈJúáþ…%]¦2ÿÇͧýu?úU¢j¤ç6õÔÿè·©‹RLÑš‹u¨\Ñš‹u¨\ÕùˆËÿ\cþoR¨AÎ¥7ýqÿBzy‚#:ÎcC*©Pû~`QŸN2æ™Q£`²FÛÔ‘‘ЂàMOE0)}ÿ>ÖÿøßüE&/çÚßÿ[ÿˆ«ÔP^ÿϵ¿þ·ÿF/çÚßÿ[ÿˆ«ÔP^ÿϵ¿þ·ÿF/¿çÚßÿ[ÿˆ«ÔPkX$G’iÊù²`ay £8ïÔœûÕš( Š( Š( Š( Š( Š( Š(  ³C0¸3Á±‹ FG;AÁ$€qÔö¨ñ}ÿ>ÖÿøßüE^¢€(â÷þ}­ÿð%¿øŠ1{ÿ>ÖÿøßüE^¢€(â÷þ}­ÿð%¿øŠ1{ÿ>ÖÿøßüE^¢€(â÷þ}­ÿð%¿øŠ1{ÿ>ÖÿøßüE^¢€(â÷þ}­ÿð%¿øŠ1{ÿ>ÖÿøßüE^¢€(â÷þ}­ÿð%¿øŠ1{ÿ>ÖÿøßüE^¢€(â÷þ}­ÿð%¿øŠ1{ÿ>ÖÿøßüE^¢€(â÷þ}­ÿð%¿øŠ1{ÿ>ÖÿøßüE^¢€(â÷þ}­ÿð%¿øŠ1{ÿ>ÖÿøßüE^¢€(â÷þ}­ÿð%¿øŠ1{ÿ>ÖÿøßüE^¢€(â÷þ}­ÿð%¿øŠ1{ÿ>ÖÿøßüE^¢€(â÷þ}­ÿð%¿øŠ1{ÿ>ÖÿøßüE^¢€(â÷þ}­ÿð%¿øŠ1{ÿ>ÖÿøßüE^¢€(â÷þ}­ÿð%¿øŠ1{ÿ>ÖÿøßüE^¢€(â÷þ}­ÿð%¿øŠ1{ÿ>ÖÿøßüE^¢€(â÷þ}­ÿð%¿øŠ1{ÿ>ÖÿøßüE^¢€(â÷þ}­ÿð%¿øŠ1{ÿ>ÖÿøßüE^¢€(â÷þ}­ÿð%¿øŠ1{ÿ>ÖÿøßüE^¢€(â÷þ}­ÿð%¿øŠ1{ÿ>ÖÿøßüE^¢€(â÷þ}­ÿð%¿øŠ1{ÿ>ÖÿøßüE^¢€(â÷þ}­ÿð%¿øŠ1{ÿ>ÖÿøßüE^¢€(â÷þ}­ÿð%¿øŠ1{ÿ>ÖÿøßüE^¢€(â÷þ}­ÿð%¿øŠ1{ÿ>ÖÿøßüE^¢€2îÅר®<È!Tò›%f,zÛó®sÃt}k®Ôäsÿ\›ùW#áº>´ÝÁ÷A÷˯õf¼÷Ä_ñóýt_ç^…uþ¬×žø‹þ>bÿ®‹ü躲ÿ}¯ýqOýTõ—üƒíëŠè"§ ¯ü~Çÿ\ßù­X5]ãö?úæÿÍjÁ Ÿ¥UnµiúUVëHíÿä%?ýp‹ÿB’®Õ+ù Oÿ\"ÿФ«´À­rqqgÿ]þ‹z{75ßúû/úìô[Ò1æßK¾¡Í dÛèßPæŒÐᩱœêS×ÿô'¦K Î¥7ýp‹ÿB’€)x‚úæÄiŸf“g2| îF'#š¢Þ*¹Iæ‘ô±ý ïØÞà\eÃn »fÞ™#½kjÚ_ö ²w•ök¨î~îíÛsòõÎzÕ <5¿L¼³û^>Ó}öÍþ_ÝùÕöã<ýÜgߥ5çýmÿRÛOëø]+[¾Ž-^êþ8ÛO´¹¸ýÿ›ó…C„ێ÷TV~:‚å¥W‚ß"Õî£÷‰1!J¾ÈØ>ã¯òü&Öã ž9Ô:ö›v4ÍÒÉØËowó„;ÂR7•ôü{õ©¿áûE¥ø¾¾y¯/Y®#ŒGå˜ùM«“Œy'5NÚÛ¿ùº_úܯ­\˧jÚ}õ—دO’xöMæ+¦$68ÈÇz.¼DÚ…§Jc´‘ ¢; ¯D26pŠAÜV“ÓN÷sjz‡Ú®'µ6ŠñÂ"Xã=p¹<“ÎsÚ©Ëá ¦÷z¤"W²[)žK=á‘s‚£xÚpyäƒK§õçÿ­.¿®ßðIµõüQVG=œº|s”–_/fç?0œœcŽ* ¼wi¤ð·6ér-YÚ‰·giaR ÷Î{â¯ÿÂ?såÕŽ¢°I ªZKæAæ NA0Úzúõ¢ÛA¹°¿–K=B5²–s;ÛÉj',÷ }Ž3OKùkùÿ‘:Ûîü¿ÌÞ< æ,|Wqp–W7ZX‚Âö_&Òà9 I ¹vŒdŽÄÕõñ¬Ž#z¨,v‚Útà~$¯±<9áûù´/ûJí–ÚÚC:Yo-Æ;w19 g8ÀíIn>…¸5ï²Û]yp\\ÜÉ©Ék2O»suáˆùN9ǽWÖ5y4ýcC»Õ!ÌÈ0Ã)—{mP¡x$ôïWßÂù·G|ÑÜý½ï ˜F–Íü%Iù† ¦sÚ–ïÃM«=›kQ]ù *º­¿–8cæ;HÆsÏáBÛúíþcëýw+j0m:Hm§µ´†õ óåŠâýbTRH ™ŽcÞ¦·ñ<ÚÍ”Zfž³-ŪÝ3K?—± mÆœ‘øSWÃ7ÐË Ì:À7‰Ùä–{Q –0I]˸|Ã?x}+J %âÖWR’à;ým™D{A!·ëÇÓõ¦¼ÿ­ÿà ÿ_‡üJúæßÄZ-¬Rm‚äÍæ®ÐwmLŽzŽ}*ŽŸâ«›³c%Æ– ´¿vŽ –ãyÜvŒgièMk^ékÕ´ëï;gØüÏ“nwï]½sÆ?¥oá¯#NÒ->×»û:ãÎÝåãÌáÆ1ž>ÿ¿J@ö3´ŸÞÚø=um^Ú%Œ•gùæbÛ@ ¨ ÛœšXüsYß¹¶·–{DÂZÞ,ѸvÚ>p8 õüêÌ^”hÒéj^eˆæØ,d„‡Ü¤¶HlaSO ß^é767º”24¥ ɧ—·kän9Î=©îÀ.u½RÚKS¤@××fLD/>ETç~ÎùéŠoü%!´õu°ê tlþÆ\ J9 ¿M¸ç>©ºýž¡sâì$04b}Ó´TL¨Àa‘×ê)G…¶éê¢ýÆ ·f÷ížXæSÁù:mÇÏNô¿¯Çü€¡®k^x{T¶žØÙßZI’5“xÚΤ2¶Aç°éWõ¿ õ#š;F„” þ˜«7Ìq‘0ZI<,÷6’]êKÛò…î ª›(2xõç'š‚÷Âr^mÔ¡Hï^9.ZnbÊ|­¸mhàçÓ[ ,Yê:›ø£V¶òâ–ˆy¶˜Œ… wsêEUÓ¼uk¨j6°,vâ¹8Y.ÕåAx‡*=Olâµq¹qm|©ou³í6ïíÅFß•²6äc±ªúvs   ~&ÓmÕŠAö=Óç ¶;|¹4—ŸõýÃò4uÉåµÐ5ˆ¤±[Hèñ H5™i®_Ák¤JÊ$[ÇX|èî à”ʱR1zžMRÏX†]5­u8Öé"ÒXM€AæeÀük3S±½µðÛiwϨ\²ªÙ=µ™S¦  9äàphÚÿ Þß2Ãx¦ê[´¶²ÒÒi%¹žŒ—>Z°‹›;N9$cÛ­,Þ1‚ßIûLÖâ¡tlÚÞi•%œÈx ŽsúU9´=BÒçÃvÖ3ä·Ž:èÀeMì ’Ã#ï÷xøP9cûsý¼]›ßµ˜Á̧ƒòtÛŽ1žèþ¿þ¿¯À·áý~-v’«Ëo/—'“8š3À «Œd`úõÉßx—Q·mZeÕnVk[ÇŠcb Œ“`ÛÔä—®ÂM!…_S‹ÌYÃÊÑZG¹‚Çïg5™'†5º¼:ÊEe3Ë,bÐq†Ëc ë¶Ž¿×—ü­¿¯2ž©¯j0Gâ&†ä/ÙÕ ÚªÁ7ýìqÎ}ó[~(¾¹Ó¼5wwi'—è>µk^ÿ‘®úòýJ«áŽƒëXQzÏ×ôGV%%vþ_ÕÜpQDpQ[œ£.¿ÕšóßÇÌ_õÑz×ú³^{â/øù‹þº/ó êËþAö¿õÅ?ôSÔ_òµÿ®)ÿ Šž€¿ñûýsæµ`ÕuÿØÿë›ÿ5«€"~•UºÕ§éU[­ #·ÿ”ÿõÂ/ý J»T­ÿä%?ýp‹ÿB’®Ó½ÜR8‰â¼O¼)8ÝÁR3ôcP%?òásùÇÿÅÕú(?|¿óáuùÇÿÅѾ_ùð¹üãÿâëBŠÏß/üø\þqÿñto—þ|.¿8ÿøºÐ¢€3Ä’ùpºüãÿâêkHåóe¸™<¶p¨©HQœgg,z{Uª(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(’׿äkƒþ¼ŸÿA’ªøc úÕ­{þF¸?ëÉÿô*¯†z~5ÏCyúþˆëÅ|4ÿÃú³»ƒî (ƒî + äuþ¬×žø‹þ>bÿ®‹üëЮ¿ÕšóßÇÌ_õÑwV_òµÿ®)ÿ Šž ²ÿ}¯ýqOýTôÕÿØÿë›ÿ5««¯ü~§ýsæµ`ÐOÒª¿Z´ý*³Ži¿ü„§ÿ®èRTÞ¥6š4ó Æßh½ŠÝ÷‚p­œ‘ƒÖ§ƒþBsÿ׿ô)* oM›Rx…£_³ÞÅpûÉUÎ@ÀëMn½Pû”'ñ¬J§NÔ^(î ¯œ‘©F—8Ú>lòxÉUë=v;Û{·ŽÊñn-l¶Žª%ÉŒ|ÛNAãšÎoݵ…ÄdäÕ…ð;Ž6 ±Óï`ozMK×·o­4SŸmx5,À0Œ Èø±Ž3Á¡mýyÁ¿×™v?Y}Šöâæ+‹F²`³C2 àœmÀRAÎF0j4ñ]¢ý¨]ÙÞÙ=¼K)Iã]̬v®Ð¬rIÅb7†šÇIÖ%¹:v˜’¼D-Ë4Q4d[*¼xïUc´¸ñ•æ¬^K"†ÖÒkbÒÂ]dgÁ,ïp:G_ë°º]ÎÇMÖbÔn&¶k[›K˜U]¡¹Pkg 0H#ƒßµAâVãIM=­ iÌ÷k Æ€e*Ç ’xMSÓ¡³ðÔRÜêvº&’$+ÉjûCžN e_Ëš[û‹oEnt=FÆâêÆá.Br§b¹# žqGTËrx„G{Ó/ÞæX„ͬy‰KmËøëèMI6»¶§Å•ä+4žTW,«å;ã ‘œ Tvš}÷öøÕ.þÎ¥¬„‘;6yn2ÿõVð÷öÌ7/Ÿ'—ö£zÎÿhdÉ!1·d½Ž:P·Wþµÿ {;Z™¬|Yh.Þ&³½Xçì­vc_(Iœ`á·c$ ãÕ«r=FîX­ìîÌ1»ÆnЍˆ²œ>mÝxéYÒøvíô‹ûA$eÆ¥ö´%ŽyŠø)tøoKÔPO*Ee#ß)aGÏŒqÜŠ‰ÓšÞIãfQŒ•Á'¡ n·¨ê6úž™a§5ª=á—sÜFÎ"îà+-Ac ]ÚÿÂ;ºH Ómž)pOÌJxädwÅ%îs­O£Ë¬Ea0¶óMÌJ£]¡‡8ã­SK —˜–ž)1Û]B5’æÚìZ(²…à àóÈ'Œi5•Яn­-åŠöÒXÒKk„×s(èAàç~½²µK{m•,o>Ó§‡ÏÝ †ŽLöŽdôô§Ïá½BþËV–êkhõ ãEsEˆåA$rs“Žý)_—ü5äÕçŽÉ.¨³3`Qu¹ùñ¡&³n`1Á$Vψc¶hâþο–é¢óžÚ$Fx“8Ë|Ûzç€I8â³›Ã×ÆÍ¤¶šÕ§]Uµ73lu=ˆô™©øjîÿQ‹T–ÇH»¸kq Ö÷EŒjA$26Ò{àäsGEýtÿ0ëýwÿ"ìþ.³O$ÛZ^Þ¬–¢ïu¼jvÇœdî`“Si¾&µÔ®àmnàûLFky'Œ™F2Wž„*+} Xu/´"ZÃöhµE÷p1÷yúûTv:ݯü#»¤€6Ùâ—üÄ Q·ŽFG|Sþ¿?øý~_ðEñ.¹q¥^i¶ðÜØZ¥ÓH{ÐJ&ÕteëÓ­¾#>l„ RâTó|í1ÊX÷mÉ-!îpMHúV¡{¢Þ_›3%§œn-ÛNåÂí}3š´šd‰âfÔTÆ-͘·>öí峌cúз±ž(³Ží¢6÷mn³‹w¼XÇ’²¤ç=HïDž(³Ží¢6÷mn³‹w¼XÇ’²¤ç=HÆ3Þ²íü"muydþÎÒ.íåº3ù÷ Dñ†9 |¤6C‘I„¾É«M)Ó´{»i.MÇÚ.‰ã w>R¡È¤º_úÛþ>¶þ¿­Àô5ÈÁâKµMÊŽãQKÈçi6ÅJÛÁÆà£¯­k'Št dX£ÖlZG;UDë’Onµ—oáÝRÂÏE{W³’ïO£¤®Â7Wô`¤ä`v  ßÚØË25¥ä«lª÷REe·gæç®9;sÅE}âë; îPÙÞÍ ¨FžâÕ’0à Ÿ›'@k>ó“K¬\ßÿgè÷ßkØÒ-àlÄáB‡iÊœt8«Wž¹žÅ [ ÔaHà &ÔÛóqÀúfŽ€·4´Ýr-Fî[Ckuiq,ž]ÊY 0Á#Zv­¬dÇæ½…åÄ*…ä–VÔœ°?5ZM2ù5™5f·ÝýŸöxÄ…±æ$÷ZÊ×|5¨ê× <‘i×m-˜„¥Ãº­¼œåãù[9Ï|4?/ëp^ÖÆÍ׈màš-í®¯¦š!8ŽÕ+èıõÍW³×.æñ¡§µŒï-IP n@Ç~[9Éì Bš.©§][]éÍg,¢Ê;Iâ¸fE;:2°÷<SÁ§j–šõÕÜ_c{kß-§ ì6UÚv¸`xêE7åýHZ‘YøŽ(ôm:Wû]ýÕÞÿ)#…Y6“’T 9Ï¥Nþ)³]6+Ä·º•¤¸û/ÙÕ•eçå ãÖ¨ZøwRÓ¬ô™md´{ë–'I„r#œŸ˜ ‚0;zÓãðÝàŠÚIf®Ž¨5 ¹8#jq“ޏÏ4uþ»ÿú]¿ÌÙÒµhuXæ)ðKž\°Î¡]ó‚GBA¬±â9ω¾Èaû,Èmãßh »›qÇÔUÛ=:êÎÿYºS Éác óqÇ#¶x¬Sà– Æ··Ú‹‰Ã›©<Ÿ´gví™Æ7{Rëëúÿ€ ¾ ¿×4Ò¯e6žâyRky-œ»9õa êsŽ®…7ùkæm/»oLûV\ÚuÍÖ»§_Lbòm`“ä Ió›#Ž€n÷éZÔt¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(’׿äkƒþ¼ŸÿA’ªøg§ãVµïùàÿ¯'ÿÐdª¾éø×= çëú#¯ðÓÿêÎî¸(¢¸(®ƒe×ú³^{â/øù‹þº/ó¯BºÿVkÏ|Eÿ1×EþtÝYÈ>×þ¸§þ‚*z‚ËþAö¿õÅ?ôU Ö¬n5i´ÈåÍÌK’1Á=À=Èã?_®.3ys¤»Y”)S´dŒãœ~ã{¤ß÷åÿšÀÉ2E¸ª•,ÅzœcÖžl¡õ›þÿ?øÐm{'ÿÀy?øš®¡þíÇþIÿÄÔíegÿÀ‰?øª­aþõÇþÉÿÅR´W{™®•c@Ã…,sŽß{ô«•ÃøÝ4lÎΩq£1É–A‚{ò§ó®˜íExMîÔW„ןüMÿ˜_ýµÿÙ(ëj+àš(ïj+æOøkM²Ñ&“Ä1»7ê¤1d0!ÈçV9É+“Ó¡ZårIìÇsH yuëøü=Õ¤¿fº“fB0`­&ÑÛiߎœÓt-]®µ{۪ŪCQÊ—)³#q ©Ùòö§zÑ·ðèÒ§¾“H–8®QÁö}É‹œ¸‡QŽ:g4iºGö|—\5ÍåÁlÌ¡FEU2x÷§ý_˜_×äeø²Æ]BLŠÃÉl¹ c÷Ãú×!ÿÝçüôƒþú?á]·ˆµ=?J>¥r-áa  œ·ïŽ8ö³!»³½¶Y¬§óÔ¾Ó…Æß®y¿1I5µÆã;s[Nç;ÿÍî2$€ÿÀøT ¢Ë‘§¹¶#g•ÈP:uÅnëzÔZ‚\ÍÊeE!.A#$ô/¿Ò¸KÅš¥ï˜`†+D+À|ŠG¡éÏOþ½Q[„c)l8´é§¬r@ê­µfVUã<àçô¯4ø›ÿ0¿ûkÿ²W«ÛxcNÔ"‚òîæëP(erª9P0W8gë“^Qñ7þaö×ÿd¤¤›Ð©Ó”-sÏë¢ð¾ˆo¤{ûˆRK8Fc}ÃÍv…#Œ¨ù¹8éAÅcXXÜjW‘ÚZ iŸ8€’r}&½5ï4í;NµÓãi­`´ŒlŽéi™¹gܼÇ;º7µVHÕlt¯â _³ÈP´S€Di2ÇŽ1Ÿz ¶ƒO‰˜#$1î¢ò8ÉeÇ ž¼s\ž¡x’Ú……·äz ‡JYîoÒ;‰cŽo•ö>>\ûtÍwÒÇÆ’“©«f”ëæ^Ísrò¾žgO¨ü#mwöúÕÊ Fï7|ÅÑ÷r“È#Œžy-׊ñûë ­6äÛÞBÑJ8$ƒÜÁ¯¢à½–Û{ýžE*Ê‚xççšÇÖ4 ]FØÅsÏjÌ[œƒÛ8åOZù¸æWjñÓúØõ¾¥¦Œð:÷ïȳ¥ל?ú¯)ñ‚ï4€óÛn¹´PYŽèÆ{ŽãǾ@¯Vð÷ü‹:WýyÃÿ  ô©ÔEÍsŠp”¤iQEd…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Z'ü„ýs—ÿEµoxg§ãX:'ü„ýs—ÿEµoxg§ã\ô7Ÿ¯è޼WÃOü?«;¨>࢈>ࢺA—_êÍyãæ/úè¿Î½ ëýY¯=ñü|Åÿ]ùÐueÿ û_úâŸú¦G§YŨK·S(Wu ‘ùJ}—üƒíëŠè"§ ¯ü~Çÿ\ßù­X5]ãö?úæÿÍjÁ Ÿ¥UnµiúUVëH8ø¿t,ü4ò+ºÌe¶Xv¨ ±ó³œ‘·qs=Íy÷†da‘¹qÈh`;Ž+‚ø›ÿ0¿ûkÿ²W[yyö¶¿Ùûe3F²…>`O$žOÊOnÃð‡UD:Þ•¨k §˜ðÆîy~B§h²® ?‡c^Œ“qå©oy;ßñùØã©7íç.h«[úC¼ á&Ð4v½¾…×P»÷È»Zòp ŽCŽ;2§=Oön—ªZ¾Ÿ: |nUl ç¡×9Ï׿5ZÆòãV³3ù¦X\ÿ oUÁ9Ûƒþ÷?Z»mj‹l²6Â@;Açÿ.?È£EC——f·' U»ótgqðüÉesm{´B»ü¸“¼a±üKê{}«+O´]>U7³ÏæµÅQû­-V„©Ô³š´‹ZuüîÞEìJ²ì‘Nb}T÷ê?>ܳnAz®2ï‘é\ÿ’,l<Ç”Mb'p •>hú䃑ÎpqÐà㑚µ¤mK ‰UíKí†è6á·¨{0dœzŸSâÕ£(»£±èùCÄ7VZV‡6¡$‰±Ë ¸ Î~ê\‘Øp'€MM£Ü5Þ‰aráCËmŒ %Aâ¼›Ç>$:ÞªÖÖÎÂÆÝˆU Èã È1ÛOñ“^©áïùt¯úó‡ÿ@ëà¨{8sKvyXš¼ò²ÙTQEvœÁEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP–‰ÿ!ÿ\åÿÑm[Þþµƒ¢È@×9ô[V÷†­sÐÞ~¿¢:ñ_ ?ðþ¬î û‚Š û‚Šè9]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@Õ—üƒíëŠè"§¨,¿äkÿ\SÿA=5ãö?úæÿÍjÁªëÿ±ÿ×7þkV Dý*«u«OÒª·Z@qž=ÕŽ ´æ35¼“Á Ìm–&[ÊÀ‚ ã¨ÁéëÍyŽ‘ ø*ú-@øÅ¹ÃGo ¬·K)(áI ÔsÎjôÿcìy*óB0êr' y·öNŸ‰‡Ø >s«¹(3‘œ`ÿSÀÀ¡6›e;4‘ÑKñóRÓÑ´kA Nv‰ä!ÏLÀ”ƒÛ¾ ywB¾´°W¼iË9‚F—†ßÉüz¼çéZÖñ¥ª²À ¤ÔŸééW¦Õ/nl"±žo6Ö3X¤PÊv}Ðr>`1Ðç=ó]X\G±jm{Éÿ_yÏZ—?ºž‡¦­Âß,öðO(·l¾L{ÊÆ>óA‚y8¬ß‰2ɺD±HÑÈ+#¡ÁR6AìkÔ£ñ¥‰±íÒÌ«!·[H„e[9vã'?Zò¯‰¿ó ÿ¶¿û%V7õª¾ÑÆÚXT(*J׸ž ñôZcOk­‡–;‰LßkÛæ8‘°¾NHÀÎF[ ðIãÖƒ%Í¢O¦ÍDT²O‰"6ÒmÎCçWÌÕÐxWÅú…/ÖkR²Ûûëi0UÔã88;OÊ9ƒ9W¢ú1kf{³“NAme܉ä Üàv·¶>À¨ÛL¹IÚAmåÅ4Çx‡æ1ÜP:g·¥Yð—ŒtoÚ7“ ŽôF Ť¹Ýç¨oâ\ž£ýœ€HÒùkåÉAÔŽßZ<¼ï©—·’—*èyÞ¥ðIîíEÃGŒ¼r¦3Ãc¾yŽ}kˆñ׊ ¸¶X4ù™g¼mòp‘·ñ<÷Î2:^¡âÍvÏÃzD·³nfêâVÚ]Éù@ÏAœž9ÀcƒŠùÂêê{Û¹n®d2O+w=ɬé/u¦·ýÙâ/R÷ïȳ¥ל?ú¯¯~ð÷ü‹:WýyÃÿ  Øå4¨¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠÐÑüL×þ¹Kÿ¢Úº ZçôOù /ýr—ÿEµtþ´¬6ÛÜî û‚Š û‚Šbuþ¬×žø‹þ>bÿ®‹üëЮ¿ÕšóßÇÌ_õÑwV_òµÿ®)ÿ Šž ²ÿ}¯ýqOýTôÕÿØÿë›ÿ5««¯ü~Çÿ\ßù­X4ôª­Ö­?JªÝiÈøáí0£'tûZ¸O"Oîþµë¿ññ/ýr‹ùËXVº¸>ƒRº\4ˆ¤¤Kœ±8G¹"¸ëbÝ)r¨ßn½ÍcO™^ç äIýßÖ"Oîþµ×ßë3Km YÅs Ã]‹ycÛšŸ!n7œ€9É5oNÔng¾¹´–ÚR°2¯žvàV!°ß{$ýÑŠÏëÒJü¿ü½’½®p¾DŸÝýkñׇu]gì`µó¼¯3ïq¸êG¡¯iMa’óQKˆm­›…ÆÕˆ?6ây=¥X±Õ#½™¡6óŲ̂$ :€YOF'üE'’Wäüà±]Ï—¿áñ7ý?ò<üUð€ø›þŸù?þ*¾‰Ä7-~bó¬e?lk² "`¡±¿ïƒ“À«É­$k°%ÕÜí4ʱ¢ `°{´p2NOO%ö?øì—s渼â¨&I¡°xåƒ#¥Ìa”ŽA7½;AÕüWq V ±d˜µìSD7 Šsê2¾ÙMw‡Ä[o Ç“s%ƒYGqò*þèl³sž€tÏJгԦ¹Õ/-M³a*λvࢶ[9ç°Å)c¥fœ?øö)½Ïñ¶‹âoëŽ`³’[ [c$уƒÇ–Î g¶85ÍÂâoúäxÿøªú“S¸¸µÓæšÖ–TR@vÚ£9?áT¯uy­ô8nb$¼šéÎÜíÜÄ÷Ú?Àw©Ž=µ¤?ø{ msæø@|Mÿ@Ïüÿ^¿£[Ëi¡éöÓ®Éb¶Ž7\ƒ† õØ\ë7ªŽöÑÛ•¶´K©Ãƒ—Ý“µpxáO'=©Òëw>t³Ä›&Žæ1}¿09Àxã<ô«úì¿“ñÿ€O²V½ÎjŠë_^ˆý¦(-æ’WoLóü\cÍWÒõKÍR;…‚æÊB‹%Äq1ŒÉ(WvrÇ^”¾½+]Ãñÿ€?b¯kœÕÔY]ê·zcÜ ¬W÷­åÊÑ0SãvÝÝÈõéÍXµÔn&ð÷öƒ[ƒ?’Ò“8r3ŒwÁÆGÖ‡kìþ?ðQ¿S¢º]/ÄΓÉyybmÐ!1Ÿ-70'aÜO#¿~‚•5Ã¥|“Ç4–©4j“¢©Ž0ȸÉÎzž¸=iývwk“ñÿæ/d­{œÍÓG¬Î/á‚(f»Ià6×c…ã,Ñ“îx­Y/#Šö+VVó$ä0¸Ïþ„*^`רüà QO©ÂQ]Kø–ÙbIVÖíâ6ërŠ6Î |ÙìzfŸu­&Ëô†;¶±±’åBwœ“‚;cޟקüŸüö+¹ÉÑ]lšìËåù3*4qË2*íF|`‘ÏÌ:ŒÓ¢×`–ð@mî#F•áIÜ.ÆtÎ@ÁÈèzÒ—×åkò~?ðØ®ç!Eu±x†ÎEgxç†/%§Id@X׫. =ÇÍ6ÃSž÷Zš&‚{xVÙc™TK7ÍÁ=€ëùSúôµ¼?øìWs”¢º•ÖÖ°Cwy#Ë8Q`ÿîiÐkMs©,PÛ¼¶më*í7å²Àãtõ£ëÒß“ñÿ€Åw9J+­‡Ä6rwŽxbòZt–Tdz²à“ÜuóH¾ €,Æk[¸5G "®çJ®ÐòHÆ(úôÿ“ñÿ€Åw9:+®:ôB ~ÉtgóþÎmð»ÃíÝýí¸Ç9Íi#Á¹É äÁÇ|åRó·‡ãÿj‚}O?¢ºÝQ¸¾’ò+,´2ÄÑ‘žQ‰#ëÞ¡Óµ¶iž ¸§ù®å†;‚«å’¶¯=9SÇKUÉ·Ÿü{½ÎbŠëe×âƒÎYìîã–0¤FÁ3 fÚ á±×ÔŠ_íè<’MµÈ¸yfÚ¾fünÇ]¿wœç¾¿/äüà±]ÎFŠèôýyÜyrÛÜËq,óm‰BDWÇ9`8ÈèI­«»¨ì¬æº›>\H]°2p(–>Qvpü࢟S‚¢º;ívh¤²PÖúrN²÷à»·ÚàsŸ^Ôèu›ÛÈ,b·†»¹9yÕãxFG^µ_]•¯ÉøÿÀò²]ÎjŠèïõkË,àšûLå—žT"<®0.0yõ5§¤^¾£¥Áu"*4€ð¹ÁÁ##=Ž2>´¥j<ܺzÿÀ¢¯kœMètVÚÝüàêþgžQ^‡EÚÝüàÕüÏ<¢½Š?´ÿ»øÿÀ«ùžyEziÿwñÿ€Wó<òŠô:(þÓþïãÿ>¯æyåètQý§ýßÇþ}_ÌóÊ+Ðè£ûOû¿üú¿™ç”W¡ÑGöŸ÷øõ3Ï(¯C¢í?îþ?ðêþgžQ^‡EÚÝüàÕüÏ<¢½Š?´ÿ»øÿÀ«ùžyEziÿwñÿ€Wó<òŠô:(þÓþïãÿ>¯æyåètQý§ýßÇþ}_ÌóÊ+Ðè£ûOû¿üú¿™ç”W¡ÑGöŸ÷øõ3Ï(¯C¢í?îþ?ðêþg¢ÈQ딿ú-« ð×õ5¤ßê¥ÿ®Oÿ šÍð×õ5Û†¯í¢åkT‡#±ÝA÷A÷Ð@˯õf¼÷Ä_ñóýt_ç^…uþ¬×žø‹þ>bÿ®‹ü躲ÿ}¯ýqOýTõ—üƒíëŠè"§ ¯ü~Çÿ\ßù­X5]ãö?úæÿÍjÁ Ÿ¥UnµiúUVëH HÒ]J¨¥•g¼µÌ¯…¯ßI]2æâ9m‘W`DT‚ ËGŒs]¿ü„§ÿ®èRU)üMgºšcsò¼ÙùQÏE?_Ó#׎j˜^yó^ßð #RÊÖ0íü7, l<¨chn<óök?)_ä+ŒdóÏZ³‘{oª\\Æíä\òB`$î !³ÀàqŠê%žÉ!d|68ÚOô©¾Émÿ>ñß²x÷—äWµò8©¼=s4÷À»‹KÕýì^IÜh\«gŽƒŒ’ÇF½‚í®®å{‰¼¡ •€ÆAÏLœ’zŸn•Øý–Ûþ}áÿ¾e¶ÿŸxïGÔU­Íø öÞG<72…tg[„»{”—É<bYÏ ‚GëU.ô=NÉãŸO†â[ó’D*T,»3¯CŽAíÒ½ ì¶ßóïýð(û-·üûÃÿ| ko´×Èàm|/tºcA+:É.ž–mˆ‰ @l·¿ÞéíS>‹ªÚ›Ùl% Ιðr$ÙÀ‚ vÍohŠY T ’P ohê`”Œ‚Eww/Á«n‡75…Äör@É&^2…¶ãÅP¸ðÊÝXÅ ‹r%ŠÜÀ²ÆÒ'rŒŽÁ®×ì¶ßóïýð(û-¯üûÃÿ| •—¥´˜ý»ìpsxVá¢A<Ñ$–ëmqº"æDèIÊžHÏ=}ªI|5;ܾǑ,å–9¥ƒÉÉfLc žʹ=;We,I°˜” v(Ê£ü¤ç…KUõ/ï~Dû^–8Y<-ékNÛ|¢3æ°o^ØÇ¿µEiá»Ë'·1LÅÝ-æV·'ÌU'sòŸ˜ú×qE/¨ÿ{ðAí¼?ƒÁÿd²¹·û4RFð4Hb³ÎAõ|àŸÀ{ÔøwUÕÙÕatßQźÎQ‹e”3)>¼óÀ¯G¨/eh,g™>òFXgØU}S«½§‘È[ønXØyPÆÐÜyçìÖ~R¿ÈWÉçžµrÞÏTû«6ápÏ!FòòK¼ gѦ• "´“\³‘Éó™sø/öE·÷îð!ÿÆ¡à·ÕklŽ^ÇH¼·¹žêéÚ{‰‚©)B®pÉõ=ê¢øjð͉n­VáîR$·*ÁØ’2Ù9žÀv®Ïû"Ûû÷?øÿãGöE·÷îð!ÿÆŸÔu¿7àƒÛy ¿‚çƒ9tÎØ×tv…¶H.wÌqŒñWçðåËÜËu ’GpnxØÂX!„ ŒòϧZëÿ²-¿¿sÿþ5Öibhd›ýb#+ÈXÌ¿×?…7ƒmÝËòj»\¾½šËìï2Ò¼¯'ØÎåflæ3»ä#ך҂ÇSk cœ;3íf‹rª–;AãÖQIàSVrü*Öw±ÂYøRKyÒIxƒÍÌ)nR<8Q…\£åéÏSO_ ÞE ¯‘q*ÜZnXehK,ÿ ó€9+¸¢›Á_y~=¯‘Á'†5¤ŽxîWí ò»³Ù–Fó1œ.ñŒmõ5¥¦ié¶BÜ,’ììÞ^ÐKNè9é]]¥æVrü*¶ÖÆÙçÿž2ß&³Ïÿbÿ®‹üëЮ¿ÕšóßÇÌ_õÑwV_òµÿ®)ÿ Šž ²ÿ}¯ýqOýTôÕÿØÿë›ÿ5««¯ü~Çÿ\ßù­X4ôª­Ö­?JªÝi¿ü„§ÿ®èRS_CÒ$‘¤}*ʼnff·BIõ'ëù Oÿ\"ÿФ¬;Ÿ_Á­,hÈ×ÂÆ>ÔFõ=îtÆIôÁ¦G)Åŧýu?úU¢Â©\'²Ï_4ÿè·§³óH ;‡­‡­UßFúµ¸zÒ3á Q¸ÀõªÛé‰R2FGQÚ†3—\»Õ|=¬­ì֑ζR²H&€í<6ãóp¨cÕu=;F;+ˆ.4‰%‡ÊG\lA•|±ÎCA¨¾€½Ä—7×·RÍlÖ¾dΙHÛ¨]ªâsR\h6—1Û£É8ZÉh»XrŽ¡ID¬›õÏÌWŒö¬”º‹Y¹Ðô» ýJ £¸šfk‡[‚Ѱ_-œ’à Ç<ö«¨Ô4É5¡òõ;냭« ÝœuÜ­T cgom=ݬ¶ŽïÔR;sçy%vyȤ‹á»›*â©Þy,ï&µ?Þ‘QˆROsŒ}«~©éZ]¶§ÇgjËRX´¹‰Ë3ä’M\ª`SRÿEÿ®ðÿèÅ«uOR?è¨;™âÇýüZ@fx‹U›HÓEÄ1«á 8%P`òqôÇÔŠä¿á9¿ÿžö?÷äÿñÊô:\ŸZç«J¤åxÎÇ] ôiÆÓ§ÌûÜó¿øNoÿç½ýù?ürøNoÿç½ýù?ür½'ÖŒŸZÏêõ¿ççáÿÛëxùò¾ÿøÿÂsÿ=ìïÉÿã”Âsÿ=ìïÉÿã•è™>´dúÑõzßóóðÿ‚[ÃÿÏ•÷ÿÀ<ïþ›ÿùïcÿ~Oÿ£þ›ÿùïcÿ~Oÿ¯DÉõ£'Ö«ÖÿŸŸ‡üúÞþ|¯¿þçðœßÿÏ{ûòøåðœßÿÏ{ûòøåz&O­>´}^·üüü?à‡Öðÿóå}ÿð;ÿ„æÿþ{Øÿß“ÿÇ(ÿ„æÿþ{Øÿß“ÿÇ+Ñ2}hÉõ£êõ¿ççáÿ>·‡ÿŸ+ïÿ€yßü'7ÿóÞÇþüŸþ9Gü'7ÿóÞÇþüŸþ9^‰“ëFO­W­ÿ??ø!õ¼?üù_üÎÿá9¿ÿžö?÷äÿñÊ?á9¿ÿžö?÷äÿñÊôLŸZ2}hú½oùùøÁ­áÿçÊûÿàwÿ Íÿü÷±ÿ¿'ÿŽQÿ Íÿü÷±ÿ¿'ÿŽW¢dúÑ“ëGÕëÏÏÃþ}oÿ>Wßÿó¿øNoÿç½ýù?ürøNoÿç½ýù?ür½'ÖŒŸZ>¯[þ~~ðCëxùò¾ÿøÿÂsÿ=ìïÉÿã”Âsÿ=ìïÉÿã•è™>´dúÑõzßóóðÿ‚[ÃÿÏ•÷ÿÀ<ïþ›ÿùïcÿ~Oÿ£þ›óÇŸcÿ~Oÿ¯DÉõ¤9#4}^·üüü?à‡Öðÿóå}ÿð «K¶‹I°Úè3gvßîV_ëC½Ãk}˜¯ü{Ç»([øŸÐŠ­)ŸIÙ—0à$L™ÉÇE>ÿδtûY!/q1ÄÒ¨R ðª2@úòk¬óÆçRõOûðøª3©z§ýø?üUhdúÑ“ëLF~u/Tÿ¿ÿŠ£:—ª߃ÿÅV†O­>´ŸKÕ?ïÁÿâ¨Î¥êŸ÷àÿñU¡“ëFO­gçRõOûðøª3©z§ýø?üUhdúÑ“ë@ùÔ½Sþüþ*Œê^©ÿ~ÿZ>´dúÐ~u/Tÿ¿ÿŠ£:—ª߃ÿÅV†O­>´ŸKÕ?ïÁÿâ¨Î¥êŸ÷àÿñU¡“ëFO­dݛ߱ÜyÅ|¿)³ˆˆì{æ¹ï u?ïëu³nyÿ–Mü«’ð×Sþñ ê¸(¢¸( ]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@Õ—üƒíëŠè"§¨,¿äkÿ\SÿA=5ãö?úæÿÍjÁªëÿ±ÿ×7þkV Dý*«u«OÒª·Z@Goÿ!)ÿë„_ú•dÁg1¡•T¨}¿0¨Ï§«[ÿÈJúáþ…%aÝx‡S‹Ä!#Ó/MŒùo‹I sÝÁÇAéÜgÚ˜Ôk$@´†2¹\v=?¤~5[gþZÆíÊOþ*­ÉÌöñ“§üô§^ê0Xa9`n&X#Ú3óã?•QÅßüõÿ¤ÿâ¨Åßüõÿ¤ÿâ«_4f»ÿž±ÿàŸüU»ÿž±ÿàŸüUkæŒÐF.ÿç¬ø'ÿF.ÿç¬ø'ÿW/µ(4ö¶nÍÌë{F~cœgÛƒVóL Œ]ÿÏXÿð Oþ*Œ^ÏXÿð Oþ*µóFi™o=È’yƒ¼cäEˆÆ{à’IíWi·Xóm0®}¶±þ‚LŠ( ŠcKH‘´Šó±Iå±×½>€ (¢€ (¢€ (¦¤‰*ÕÐôe9€EÉ%Ž̒Ȩƒ«1À>Š( Š( €À‚2Pih  âÊ0­:Ð-Ä€  Åc‹þz\ÿàLŸüUX¢€+ýŽ/ùésÿ2ñT}Ž/ùésÿ2ñUbНö8¿ç¥ÏþÉÿÅS’Ò$pÿ¼f^žd®ø÷‰æ¦¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ fŠ( Š( Š( Š( Š( Š( Š( Š(  Úüƒnë“*ä¼5Ôÿ¼k­Ôäsÿ\›ùW%á®§ýã@ÔpQDpQ@ ºÿVkÏ|Eÿ1×EþuèW_êÍyãæ/úè¿Î€;«/ùÚÿ×ÿÐEOPYÈ>×þ¸§þ‚*zjÿÇìõÍÿšÕƒU×þ?cÿ®oüÖ¬‰úUVëVŸ¥Un´€ŽßþBSÿ׿ô)*íR·ÿ”ÿõÂ/ý Jçî¢ñGü$"ÒùEœ§ÌYÄ1;©ù~ðè=r­0:yN.m?ë©ÿаüf‰<:DO3­©D ‘¾Æ^¡í[7lö\ç÷§ŸûfôËËkkèL7vðÜEœì™®~†—T3ŸT»Óìµë{-Ji­m¥·Hîä“Íh7$Îs´óœfµtB¶¾+¼²ƒQ¹»¶QKûû–›Y ’qiIezcÙØ%½¢•Â1ŒõÊ XÖ¹Ó{‹+Û(næÚŒc° A“€Šã’NI$Ó[ÿ]„Ö†‡Š¯%†>º{K{›µ†ââ6ÚÈ„€ßÒϽQ¿Ù¡¤é+ªÝŧÍç3Ïö¶2Hë‚©æ“‘Ôœgµi[ÚÞɱj×6—Ð8Ç–¶›ã—lÔ¿ÙzoؾÅýŸiöLîò<•ÙŸ]¸Å 9q{$ÖºzÍt×[kâ.dl™#à–ï‚HÏ|Snõ ±jZ©Õ®cÕ-¯šlÄÄG€áV3Fܼçç"ºö´´{UµkXÝq¶#(1Ó¦µ‹Þ­ãÙÛµÒ𳘔¸ú63M?ëîÿ/ÄõøÿŸàsúŽ«4Åñµì‘KºÉl¦R Tç˜êÎŒ²_øŽú[‹ÛÂ-ßʉncù£Éʃ†Éõ­[½7O¿‘$¼°µ¹tVšr¿BEXŠ(b‘äŽÑäÆöU¶O| 4Mtß¼´ÿ®Çÿ@zæ¼Y,ãVÑmãþÐx¦i¼Èlgòð€Žw/N½k ³-Ÿýv?ú-ê¶«¢ÇªOiqö»«YíKä·*Ì0s¹HéHhæôÍnâËL¿Š{æ‚â+Á0ê1¼ó"2‚„9rpÄ`ž;œU›o^]é0yP@u ¯šÉ +¤yPIr§æhû§œÕïøDl¶owßló„ÿmóA›pR£’6ãi#ÅH¾³sZ=ÍÛ¹¹7b丬§øùcš~¾_§üz[ÿÀ1|CªO¢jzæ¦ašt >Φ4bB…1;G#$œ Ö¹Ôµx¥ÓtØÅ‘Ô®‘å’R­äÆ«Œàg,~`:_j³ÿõ¼¯l÷—W7­Ê Ü;Ä€Œ1ŠÎÔt&´²ÓⱋS¹–и†x."YbCü9|\``‚x^ßÄ:ÕÛÙÙÄ,î[‹˜d•¢r˜„ã!wÏÖ­]k:ËÜj"Â;#˜ MçÌϰ9 ƒòŒÉÏ4¾ðÛÙÁgs|òý²n% æÿZy qÉŒ æ­ßøfÖþêyþÕyn.T%ÌvòYÀù² éÆA;ÿ]ÁyŒ²×žÿTX£´šlw©wå‰<ã²ìüC®j¢Í,†Ÿ²iËy'°,X£ 08ês[7¾¶¹š  ¹¹±–|…{VQ˜ÿºC0>”í;ÃÖzd°ÉÌLV‚ÑC°#`9ÏN¼ÿõ¨~_Öÿðúü¿à™V¾"Ôµ³m—¤ ÖIu;\†p7(R;©çô§xvùtχv÷Ò©aolò2¯|p*ÒøNÒmÒòöÖ[h|<.¡Þ<ç •*yö­ MÒÏE]$+Kj#1)Ée9ÎqZÎßÖà·W1¥Õuëkk?9tæ¹Ô$HíãEp± çwÍ€;“T5ÍJîãCÖ4íA ûU¤–äÉ!$Gu €I ðA5°<)µ[y5-FHâ*Öûå]Öì½ ¹Î8ù³ÅIÿ½“i×¶“Mu3ÞÓ\ÈãÍb¸ÚrbŸ[‡©VóYÕžïSdV~F˜š.7n™¶ï!H /rAæ¬YkϪ,QÆ‚ÚM6;ÔÈ;òÄŒqŒKwá{k¹eÞßEçÆ±Ý,R… eøëŽ2¸©/|;ms4Assc,0ù ö¬£1ÿt†`}*z]Ÿüþ¿/ø&V™¯ë¼útP}†-Š]Î^'lå¶•\0ÇNù®’Ïí»fûoÙóæ·•äîÿWü;³ü^¸â©é¾´Òç‚[w˜˜mVÑC°#`läñ×5rÎÓìk0ûEÄþd­&f}Ûsü+裰ªÓóüÿÈ_×áþeš(¢Ì_­çü#·²Ùß=£E’3F¹vIáç¿_Lu¨5nþ´»¿Ôo­ãHT·Ù¦(Ò¹#æcž€Iï[7֑ߨ\YÊYcž6‰Š`ãߚϿðôW˧{wnlÕ4%9;vä†R3næ——êWÏô9ë™uX4ÝÛQ–úI%ó>Ó ¤…nX•$®Ê1»rGZÞðÌ×~†IçyŸ|‹™Ö @Wÿh ïN›Ãë:Û;êwâîÛpKµdmnªFͤp?‡µ]Ó4Ø4«?³ÀÒ8.Ò<’6æwc’Äú“UÜ]‹”QE!…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@µùÜÿ×&þUÉxo©ÿxÿ:ëuùÜÿ×&þUÉxo©ÿxÿ:î û‚Š û‚Še×ú³^{â/øù‹þº/ó¯BºÿVkÏ|Eÿ1×EþtÝYÈ>×þ¸§þ‚*z‚ËþAö¿õÅ?ôSÐWþ?cÿ®oüÖ¬®¿ñûýsæµ`ÐOÒª·Z´ý*«u¤vÿòŸþ¸Eÿ¡IWj•¿ü„§ÿ®èRV×lí¼B,KEöU>\³ådöÝ ÷öåÑ]BÒ¢28Y"mêXqЃŸÀš¨nfÏݲÿÀ³ÿÄUÙ@y-цQäÁ¸R˜s8é@¿h—û¶_øøŠ>Ñ/÷l¿ð,ÿñµš3H _´KýÛ/ü ?üEh—û¶_øøŠÚÍ  _´KýÛ/ü ?üEh—û¶_øøŠÙÝUmµK¸àx.¢apÂ7`È\ÉÅ0(}¢_îÙàYÿâ(ûDßݲÿÀ³ÿÄVÖhÍ 2 In'IdhBE’©›òÄc$àv'Œw«ÔË{w ÎPŸQ´Ÿè)ôÀ(¦4±¬‰H¡ß;Tž[p;Ó袊(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š( œ ž”TR€ÒÀŒ2­&=ð¤ÿ0(ûM¿ü÷‹þû}ªßþ{Åÿ}йœt£4OíVÿóÞ/ûìQö«ùïýö*æhÍSûU¿ü÷‹þû}ªßþ{Åÿ}йš3@þÕoÿ=âÿ¾Åj·ÿžñßb®fŒÐ?µ[ÿÏx¿ï±GÚ­ÿç¼_÷Ø«™£4OíVÿóÞ/ûìQö«ùïýö*æhÍSûU¿ü÷‹þû}ªßþ{Åÿ}йš3@þÕoÿ=âÿ¾Åj·ÿžñßb®fŒÐ?µ[ÿÏx¿ï±GÚ­ÿç¼_÷Ø«™£4OíVÿóÞ/ûìQö«ùïýö*æhÍSûU¿ü÷‹þû}ªßþ{Åÿ}йš3@þÕoÿ=âÿ¾Åj·ÿžñßb®fŒÐ?µ[ÿÏx¿ï±GÚ­ÿç¼_÷Ø«™£4OíVÿóÞ/ûìQö«ùïýö*æhÍSûU¿ü÷‹þû}ªßþ{Åÿ}йš3@þÕoÿ=âÿ¾Åj·ÿžñßb®fŒÐ?µ[ÿÏx¿ï±GÚ­ÿç¼_÷Ø«™£4OíVÿóÞ/ûìQö«ùïýö*æhÍSûU¿ü÷‹þû}ªßþ{Åÿ}йš3@þÕoÿ=âÿ¾Åj·ÿžñßb®fŒÐ?µ[ÿÏx¿ï±GÚ­ÿç¼_÷Ø«™£4OíVÿóÞ/ûìQö«ùïýö*æhÍSûU¿ü÷‹þû}ªßþ{Åÿ}йš3@wóÂú}ʤ±³›0'¥rÞêÞ?λ-PÿĪëþ¹7ò®7Ã}OûÇùÐuÜQÜP.¿ÕšóßÇÌ_õÑz×ú³^{â/øù‹þº/ó êËþAö¿õÅ?ôSÔ_òµÿ®)ÿ Šž€¿ñûýsæµ`ÕuÿØÿë›ÿ5«€"~•UºÕ§éU[­ #·ÿ”ÿõÂ/ý J»T­ÿä%?ýp‹ÿB’¹û­_Äqx€iqAd|ÆÝ†#ËîÄïíßߢ˜<§6ŸõÔÿè VKZ§pHžË=|Óÿ¢ÞžÎsH Ç­Ç­UÞhÞhÖñëHÒª#36FIô[y ¶Ad¢†3–Òõûéõû$^ͧ_Ç+F×PEùFT¦Ï›þðôªþ»x-|-„(ðÝ·Œ2?µ¹gáí*Âî;›kgI" #yP7]ª[hüIm¢éÖrC%½¶Æ¤h¾v! ýì ãÓ íO¥—õ¸Œ[=[X–=T“SÝ¥s±­ÙrlnÈÚ9Ï­N­¬yz%ýΤnaÔn -ÚQAR 6÷ÏZm·†&þÛ¶¼’ÞÎÖyš`¶÷¾ö ¸À*uÉÅoŤØEogAˆ¬äó`]íò7<õçï¾´+]§¯õ®¦Ó~òÓþ»ýëñv²Ñê+io«Ea-”?l!çù#’2 ‘î+©³-Ÿýw?ú-é–ºMµ­ÅåÆYnåódipqÀG†bÍ{£¯øfö˜§·¸‘~…Õ]'W»:F‹a¥ÛZAqw²f@æ(‘ž7n$’;úÖij¶k3 ×)ö9¤–0àHrÉÓîþ¾õCPÐE•†Ÿo¨M-™qöÓÄ’ n ïÂ}1ØSlH‚ëWoggÓÒî[‹˜d‘ârŸ¹8È]Àóõ§Eâ-^õ´ûKt²†òina¤GxÃBpJ€Ààûš³áï ½œw7Ï/Û!–âP¾`oõ§Ç1ÈÀÎjõ·‡m-oaºI'2E4ó(f&S–ÏoëO×úbþ¾Z˜ö#Öd}ÍäV?e¹¼k'Žpèà²îÜNÊôÇ~µñ…ôºŒŸfµó-c»û1…m&iCmg°`äãÐuÍn'‡mÚÚ$ûmï âÃ%Ë3`ñÓ,ƈü?¾ ÷V·×¶é$¾t–ѺùNýÉIï‚).—þ¶ÿ‚7åýoÿÈjñµÍéK&Ó­õ±´AK·xMÁ·c9aÆ*Mõ™WXxnm^5¼¹HRtrÁÃ|¹`ßwØ-i¿‡mÆæÐÉ?—qwö·!†CïÇL¨ÿjøv8®/$·Ô/àŽì»<1H¡UØ`ºü¹¿\gµ o—ùÁ¿Ïüÿà°y¾D~~Ï;hó<¼íÝŽqžq𒣂/"âÞòlP»ä9fÀêOsRS{‚ (¢Q@Q@C)Åͧýu?úTÕZäââÏþ»ýô•â ››cKÑ º’Ò+¿6I¦„íªò©í’zõÀ¨5;¿øDìb[i¼¸X£7o%Ç—Á$àeÈÀ<Ò´5m.ßVH„Í,RÂûážÛ$mÓ ý;*›ø~9í 7Z…ýÉXç’E…v¨©íÍ.ƒ(¯Šui,‘éïÒÕ'šÚXãue'xF!¸Æ1žÝj CWÕ®d¶²imáÔ-µxái"Wò¤VŒ°%wgò3Û­mc+Ãl—7×—-or.RIYw(çÒ¢ºðí¥Ü—2™®c–yã¸Fà4nŠãÐwÏZkúü?à‹úüÿà“QÖN»•¶–Ô\O+@ä7Ï´…þ_ÄšÌ>2¾—Q“ìÖ¢KXîþÌa[IÚFPÛYÄ€l98ôs[6º\v×ëz×7Ü qn^VS¹wÉÀäý=ªô8íõºµ½½·I%ó¤¶×ÊwîH*HÏ|BÝ]È[Z™Ðo´oµWy£y¤­ãÖãÖªï4o4kxõ£xõª»ÍÍZÞ=hÞ=j®óFó@·Z7Z«¼Ñ¼Ð­ãÖãÖªï4o4kxõ£xõª»ÍÍZÞ=hÞ=j®óFó@·Z7Z«¼Ñ¼Ð­ãÖãÖªï4o4kxõ£xõª»ÍÍZÞ=hÞ=j®óFó@·Z7Z«¼Ñ¼Ð­ãÖãÖªï4o4kxõ£xõª»ÍÍZÞ=hÞ=j®óFó@·Z7Z«¼Ñ¼Ð­ãÖãÖªï4o4kxõ£xõª»ÍÍZÞ=hÞ=j®óFó@¤Àé—#þ™7ò®GÃ}OûÇù×O|ÄØ\údßʹŸ ýãþñþtÜÁ÷A÷Àe×ú³^{â/øù‹þº/ó¯BºÿVkÏ|Eÿ1×EþtÝYÈ>×þ¸§þ‚*z‚ËþAö¿õÅ?ôSÐWþ?cÿ®oüÖ¬®¿ñûýsæµ`ÐOÒª·Z´ý*«u¤vÿòŸþ¸Eÿ¡IWqÎj•¿ü„§ÿ®èRUÚ`EqžŠ”tmÈñÿõ?ƒÈ½ÿŸ‹oüoþ.®Q@¾Ï{ÿ?¿øßü]g½ÿŸ‹_üoþ.®Ñ@¾Ï{ÿ?¿øßü]g½ÿŸ‹_üoþ.®Ñ@¾Ï{ÿ?¿øßü]g½ÿŸ‹_üoþ.®Ñ@¾Ï{ÿ?¿øßü]/‘{ÿ?¿øßü]\¢€*Åk/ž³\L²b¢mPOSÉ9=ºÕª( Š( Š( Š( Š( ŠkÈ‘íÞ껎ÕÉÆO¥:€ (¢€ (¢€ (¢€ Šâ=(èÛ‘‡cÿê$~5-OȽÿŸ‹oüoþ.“ì÷¿óñkÿ€íÿÅÕÚ(—Ùïçâ×ÿÛÿ‹£ì÷¿óñkÿ€íÿÅÕÚ(—Ùïçâ×ÿÛÿ‹£ì÷¿óñkÿ€íÿÅÕÚ(—Ùïçâ×ÿÛÿ‹£ì÷¿óñkÿ€íÿÅÕÚ(—Ùïçâ×ÿÛÿ‹£ì÷¿óñkÿ€íÿÅÕÚ(—Ùïçâ×ÿÛÿ‹£ì÷¿óñkÿ€íÿÅÕÚ(—Ùïçâ×ÿÛÿ‹£ì÷¿óñkÿ€íÿÅÕÚ(—Ùïçâ×ÿÛÿ‹£ì÷¿óñkÿ€íÿÅÕÚ(—Ùïçâ×ÿÛÿ‹£ì÷¿óñkÿ€íÿÅÕÚ(—Ùïçâ×ÿÛÿ‹£ì÷¿óñkÿ€íÿÅÕÚ(—Ùïçâ×ÿÛÿ‹£ì÷¿óñkÿ€íÿÅÕÚ(—Ùïçâ×ÿÛÿ‹£ì÷¿óñkÿ€íÿÅÕÚ(—Ùïçâ×ÿÛÿ‹£ì÷¿óñkÿ€íÿÅÕÚ(—Ùïçâ×ÿÛÿ‹£ì÷¿óñkÿ€íÿÅÕÚ(—Ùïçâ×ÿÛÿ‹£ì÷¿óñkÿ€íÿÅÕÚ(—Ùïçâ×ÿÛÿ‹£ì÷¿óñkÿ€íÿÅÕÚ(—Ùïçâ×ÿÛÿ‹£ì÷¿óñkÿ€íÿÅÕÚ(—Ùïçâ×ÿÛÿ‹£ì÷¿óñkÿ€íÿÅÕÚ(—Ùïçâ×ÿÛÿ‹£ì÷¿óñkÿ€íÿÅÕÚ(—Ùïçâ×ÿÛÿ‹£ì÷¿óñkÿ€íÿÅÕÚ(—Ùïçâ×ÿÛÿ‹£ì÷¿óñkÿ€íÿÅÕÚ(—Ùïçâ×ÿÛÿ‹£ì÷¿óñkÿ€íÿÅÕÚ(—Ùïçâ×ÿÛÿ‹£ì÷¿óñkÿ€íÿÅÕÚ(2ò¥²¸i&DÙ )è{—?Ê¹ß ýãþñþuÖj?ò ¹ÿ®Mü«“ðßÞ?ïç@ÌpQDpQ@ ºÿVkÏ|Eÿ1×EþuèW_êÍyãæ/úè¿Î€;«/ùÚÿ×ÿÐEOPYÈ>×þ¸§þ‚*zjÿÇìõÍÿšÕƒU×þ?cÿ®oüÖ¬‰úUWëVŸ¥VqÍ "·ÿ”ÿõÂ/ý JÏñ5ÄÐ.“äË${õ(Qö1”“qÔ{VŒòŸþ¸Eÿ¡IF¡¦Ã© a3H¿g¸K„Ø@Ë/@r:S[¯T>ç3qâu~ÑqéßeMGì ï`¡É ƒÉ`}jìZõÜ6ú¼Z”ÖP\Ø2(c)ƒ€WäÎìóŒÍ^>´ki`2O¶KÑzNááƒc§ÝÈþô—~³¼kç’IÕï)‘À1´xÚWŽç4-¿¯/ø!×úóÿ€cÛx¾çû;SyaŽk›YbŠ"±IÈdÀ\«üË‚yý(¼ñ6©¢É}¢–sË ¼RÅöhÝAi Ä€FxçÚ¯Oá¸bÓu í{©Íy°¿™*#’Ÿwi@#¯áT4Ï Ü^Üj2ë yä\A·S£Ì6±mÙ…Á#O4uþ»˜º]ÍëWÚÝ͵Ü9XÑ].Òh³Wlœä`r9©¼C*ÄúFèc—~£ùùæ#Ÿ®Gµ= »Ñ­Ù¢mKXw`6I,AyìÌÕ ¿íMfûMGѧ³‚Úén$šy¢nF''"ŸUòGóüˆgñ&¨–ך´PZ*Òá¡hÛwœê­µœàsœ vëL¼ÕäÓgñ%Õ­µ¿Ÿ [ìï,ËsÛ=±ZSxRÊk™\Ïv¶ÓMçËf²&GÎrF3É¥MuáË;Ïí2IÇÛÚ&—k<¼coÜç4–Úÿ[¨Í/QÔ±u¥êbÕæŠ%¶VUebF ±8 ¯­!•b}#t1Ë¿QFüü‡ ó Ï×#Ú¥¼·k-Eõ[k;›Ë™b[vŠ)#Pmß9ϯ§—.·$nÓo,E¤ëqyb`ì21ò³qϵ §õ×üƒ¿õÓüÌ/Q¿±³×u‰ã–ÆÖêé„EËòžrØÛm2ÓÅš›$ï=ªH‚ÎK…d´ž%‰Ôd#>£:VÜ~¶ŽæíÅÅɶ».ÓY³)…‹Œ1Æ3Ï×Û$sÙ¶¥¨Mm, ŠY„jF>S·9ÔšZÛä=/ó2 ÕüK5Ý¥¨m$=Ý™»ŽO&L(r„oäüÜúñ[Ú¤Ú¾‡k~ñˆÞdË 9ÁǶEhÖðÝÙÜ«Ê^ÖØÚ $`©ÛÉã¯Ê?ZeއŸ”p]]ˆ­Õc2 ²nççsŽÞ•NÚÿ]ÿà¯Ô«á+©fð¥µÅÌÒK'ï <ŒYˆÝϰ¬½'Å×ú•å›}”5¥Û±-& à•fŒ8Æ:÷­m3ÃCJò’ _QkhØ‘níC’IäÎ2}j]?Ãñisk}z¶ªX¥™‘LKžÃåÝŽx¥Öãgoiw‚§ÖKUººdýúDÂbLã;ßÌ=€è–kv¶à_K“äå Œ¢ã·˜þµDxzÈxwû´Ík·hbÀ8ù·:ƒíLó/ô•[h¬õ-Xcq¸y ?Ýä§O§zwèc.õ MüJš]‰´Ž5¶<ñ³’7íÀà }y¬Ë}^kX."±´·[»­b[h÷Ùž¥ß’Oð1øV啯Ú/ÿµç¶¸µºh>Î`•Ñ€PÛ³ò’3øÕ KAŠ-6U¶·¼¹•ïMâ˜fHäŠCÕ”¶Lõ¥¶ÿÖ¿ä]¿­?ÌÄÔïõk¹¡³¬¾Ùg¬Ar¤L#;£, RÄ÷õ©oõ]ZâK{&’ÞûmZ8ZHÕü©£. ]ÙÇ<Œö«š/†ço:ëT{••¯’î5’Ty>DÚ7•yç…öæ´®ü3gw%Ô¦{˜æžâ;‘$nE"(PWAß=M5¦ÿÖßðE¿õëÿÖ·­º —æçhÔª“ì $~f¸½vêDO‹eH'Žk0&BÛ›%~÷?‡â·ÍÞ¡§âÖ='PÔ0º3@ óË/Ó éHÚ ¶£o~÷QÜBúŒÍ:Âí+‘‘€zžiyumwQÒZÆÆG¶’öç{´ÑÙÌ舸ÿ–hY‰äw¡‹Ä:ÍêévðAokutÓ«µÌmÄxÃ*’¬žzV¤¾ŽxmüÍFý®­Ùš+Íê%PÃx]¤t"¬&¸°¸–êæy¬„VR_]ØðÆ(^`aXxYi÷7‘Xý–æñ¬ž8Uã‚Ë»q8#+ÓúÖæ¹¨6ÀH—0A+¸D3Bòî>†cô¨Óö‰mm’}¶÷†ñ a’å™°xé–?ãIqáè®c﯄©r×1N%âbÚ¹mÁ#:^_ðC¯õçÿɶñUåÞ“•Pšù¬²ºG•—*~`6ºyÍ;PmmuÝyh·N—%È…ü–.2›óŸÆ´ÂÖcNkG¹»w7&ì\—U”ÿ ?,sNŸÃ‹q±“TÔ>ÕlÌÑ݇A 0WîíÇáGõø˜“jí¥Þkó-¤/rk•,¾kº…²N'·oZµÍON–ö×QKI."±{Èd·VT`¼`I=qÎyÏj¿'‡,¦Kõ¦”_Ä¥˜ `ð}i‘xjÙïÏ»¼ºšênÓÎê]c9ùW×=:õÍúû¿ÌjÝJºV±ª¶£cm© 7KûSq Û#!B6’¬ŽxaÈÇJÏñv²Ñê+io«Ea-”?l!çù#’2 ‘î+¤G·ŽçOœ<»ì`h"Œ` çŽ¿(éŠu®“mkqyq†–[¹|Ù\pQÇ@7¾Ÿ×bc¶¦n£sa¨èVÚ¬ºåµ£F$Qk1¤,Ë󞯭[Ðí¿‡m›Vý¥#-+HFà2HÜ}@Æ}ê£xFÛÊ´Ž ûëu´šI¡´garxÃ!8î3WæÒ~Ӣͦ\_]̳)GŠ ž£!@éÇJOga®—9_øŒO⥓VŠâ=X>ËA8cjTåÐ~]ÉœûÔ3ê7‹¬K!º¿W]QaK•ýbÈÊ2ôÎ2¹#ïµØ^è–w¶°ÀTÃäH’Äð€ Œd§ÐÕ7ð¥›Ìùº¼¯?ÚÌH<¦}Û³Óv3Î3jkuåÿþ=Sþ»ÿÀ7h¢Š@QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEVÔäsÿ\›ùW'ῼÞ?κÍGþA·?õÉ¿•r~ûÇýãü蹃î (ƒî (—_êÍyãæ/úè¿Î½ ëýY¯=ñü|Åÿ]ùÐueÿ û_úâŸú©ê /ùÚÿ×ÿÐEO@ pâE’=»”†èAÆ ÍsÿæTiË,MÓ3ž„×1ῼÞ?΀;˜>࢈>ࢀuþ¬×žø‹þ>bÿ®‹üëЮ¿ÕšóßÇÌ_õÑwV_òµÿ®)ÿ Šž ²ÿ}¯ýqOýTôQEQEVëþ?tÿúîô­:̺ÿÍ?þ»Ÿý«N€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€)ê¿ò ºÿ®Mü«ðßÞ?ïç]–«ÿ «¯úäßʸß}æÿxÿ:î`û‚Š û‚Še×ú³^{â/øù‹þº/ó¯BºÿVkÏ|Eÿ1×EþtÜY±£þ˜§þ‚*mçÚ«ÚÇ·ýqOýTÔ†;yö£yö¦Ñ@Þ}¨Þ}©´PH«2íuuAõt¨¾Ë÷î?ð&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þ*¦¢€)^@‰cpÁæ$DßzwaÐö'Îxsï7ûÇù×Qÿ ûŸúäßʹ}öÿxÿ:î`û‚Š û‚Šbuþ¬×žø‹þ>bÿ®‹üëЮ¿ÕšóßÇÌ_õÑvÖŸñãmÿ\SÿA5Ciÿ6ßõÅ?ôSRQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE^ÿþA÷?õÉ¿•rþûíþñþuÔ_ÿÈ>çþ¹7ò®_ß}¿Þ?΀;˜>࢈>࢘†]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@ óëI  Óm!š³G¹œ€Cc‘÷‡µCö¯Ð2×þúü]i,j‰s…¸eâ—ì­ÿ<ßÿž°•&ÝùŸõò:aˆQŠ\‘ù™ŸjñWý-ï¡ÿÅÑö¯Ð2×þúü]iý•¿ç›ÿàSÑöVÿžoÿOKØ?ç‡ùõ¥ÿ>ã÷?ó3>Õâ¯úZÿßCÿ‹£í^*ÿ e¯ýô?øºÓû+Ï7ÿÀ§£ì­ÿ<ßÿž`ÿþäZ_óî?sÿ33í^*ÿ e¯ýô?øº>Õâ¯úZÿßCÿ‹­?²·üóü z>ÊßóÍÿð)èöùßáþAõ¥ÿ>ã÷?ó3>Õâ¯úZÿßCÿ‹£í^*ÿ e¯ýô?øºÓû+Ï7ÿÀ§£ì­ÿ<ßÿž`ÿþäZ_óî?sÿ33í^*ÿ e¯ýô?øº>Õâ¯úZÿßCÿ‹­?²·üóü zrÙ–8ØÃëu%Áÿ;ü?È>´¿çÜ~çþfWÚ¼Uÿ@Ë_ûèñt}«Å_ô µÿ¾‡ÿZñÚÃ$Hù˜nãÏñ§}ŠïMÿßühöùßáþAõ¥ÿ>ã÷?ó1¾Õâ¯úZÿßCÿ‹£í^*ÿ e¯ýô?øºÙû?Þ›þÿ¿øÑö(½7ýÿñ£Ø?ç‡ùÖ—üûÜÿÌÆûWŠ¿èkÿ}þ.µx«þ–¿÷ÐÿâëgìPÿzoûþÿãGØ¡þôß÷ýÿÆ`ÿþäZ_óî?sÿ3í^*ÿ e¯ýô?øº>Õâ¯úZÿßCÿ‹­Ÿ±Cýé¿ïûÿb‡ûÓß÷ÿ=ƒþwø}iϸýÏüÌoµx«þ–¿÷ÐÿâèûWŠ¿èkÿ}þ.¶~Å÷¦ÿ¿ïþ4}ŠïMÿßühöùßáþAõ¥ÿ>ã÷?ó1¾Õâ¯úZÿßCÿ‹£í^*ÿ e¯ýô?øºÙû?Þ›þÿ¿øÑö(½7ýÿñ£Ø?ç‡ùÖ—üûÜÿÌÆûWŠ¿èkÿ}þ.µx«þ–¿÷ÐÿâëgìPÿzoûþÿãGØ¡þôß÷ýÿÆ`ÿþäZ_óî?sÿ3í^*ÿ e¯ýô?øº>Õâ¯úZÿßCÿ‹­Ÿ±Cýé¿ïûÿb‡ûÓß÷ÿ=ƒþwø}iϸýÏüÌoµx«þ–¿÷ÐÿâèûWŠ¿èkÿ}þ.¶~Å÷¦ÿ¿ïþ4}ŠïMÿßühöùßáþAõ¥ÿ>ã÷?ó1¾Õâ¯úZÿßCÿ‹£í^*ÿ e¯ýô?øºÙû?Þ›þÿ¿øÑö(½7ýÿñ£Ø?ç‡ùÖ—üûÜÿÌϰŸÄ^Æ·¶6ñ[œïta‘ÁÇñøí[;O¥Vû?Þ›þÿ¿øÑö(½7ýÿñ­!UkßÔÆ¥Nwt’ô,í>”m>•[ìPÿzoûþÿãGØ¡þôß÷ýÿƬ̳´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ]@§Ü×6¥rÞûíþñþuÔ­œ!ýã`ç +0ü‰®[ß}¿Þ?΀;˜>࢈>࢘†]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@µ± i$MS]K{¶%Ðx<ÃdFbÌ;OáPjv×·šU¼‰ˆÌ¾zI)zw §ã¦kÃX}GÔ&¹‚™µ #‰|ï—y= aF:úv¤¿¯ÀoúüN¦Êþ×Q·óí%G’¤à‚ê<ƒìjí½?íâÈÎVrÛhØ)o@Äm'Û5GG¼Ó-,Á]F™nîH’X¾ei˜gÀÀã>•KX¾·¹Ö,VÚÿíSCt€éárÎFÐIäãŠ}RFΆçR³³¹··žuI®[dI‚KÃùÒÞßÚéÖþ}ÜËy êO ’}…rº¾©§ks=¥´’K¨¦ÉÉÎÀjcg'“ÎkO]ai¬iZʱ²€È²8RDLÀmbnÏlÒ[\}l^]Mk)îü÷X`ǘ^R¹éò‘“ùSìµ› Bv‚Þfó•w䉣lzá€$W9­ëIªéÜvÒÅ%¤ÂRhùÉ-ósÓŒ “M'ñU¼–Ú“jËöwI%*¸·‚€/ÌxÆ3Å5¸=æÕ“ûLØEmq3¦ß6HÕvE»¦âHúð hW;eckqâ­bâkx¤š‡Ë‘”O“±íYÙy^k»BÞNŸ*).éæ|ÙÇ'Œ÷¥Ðæ•~øú× )£jré7ö²ÆË’]Uï™±¼œ•ÎpAâ¶|'º]\Ëge4 ¨ 8™Ÿ›$uúS°®t6ÿñíûƒùU{ VÇT›+…˜A)†L6°ê9þ}*Ž·}-‡†Ë[ÇÜÊ[Y ¿–søV&›Þ®YGqcµ­Ý¸´ÄW]ò %IÊ® ‡|ñI_×õ¸ßõý[·ˆt«»ÑiÖ防§îØ+•êˆÚÄ{ZuçÃíÚ$+v. wÓ a¬²’zü½>n»¸í]>´úšßfÚÀ`ÿ8íY3Ïüõù³úPM‹ÛÛ}:ÎK»¹<¸#ÆæÚN2qÐsÔÕŠå¼Hf>¸7›±7}  “;ÇPŸ/åXúõ…­Ìž,¼– ×6‘DÐKÑ£"<ü§·4=jz Åypè:¶ 4û b:H¸kXó‰1Ç©ËÒd‘n5eÑf±g}(ȱé¨Ê‹.N2 ŸŸo¥×çþ@¿¯ÃüÏI¢¼ÍOVãÃEMùÓ.|Ò™óL»WóÎìç­ix>ÞØêQOk©Y[b.-màt‘‰Ç2îvùïŒòiÛ_ëÏü…}?¯/ó;ëè4ëF¹¹b±)U$ òHõ"¬ÖŒâó|+v eÐÙÔ ü¡Ô·@k"k]SÔô+[(m&ÓÜ“J<²ÁW°ã4–£;Z+ͼSsö•ÈDÓìîìä…-‹£}¦Q•9²^HÆCW5>ÖêëÅ—“BæÒÞÞnnOnE. {ífÛk1ÞjSZ[Ú]:Bæ9.B¨‰\ •É9'·Êyö–þ(¶¹v´Ônî^blý¦Ô”+Ôlîzu<š±a§©ÓüGekö°¹ºHg<Ìöѵ߯éþbZÛÎß©ÚÑ\.‹ý›ý³¥`îÝä¿ö–7tÛÇ›ŸãßëÏZ«ŸiÃg»Kt[›¢y@ù¤pê{Ó°'sÑ(¯?¾Ð4¸¯¼C vq¤vúz\@«!‰2Ëè~Uéé]®—+ͤYK#w‰îJŠKUë¯ù¯õåþdW:¼béîbž(­ÙÊÉò¹|·y Ю]‹Í_tZ3¨ù@RÜ}¨õ¶ÓdM+û:M>=t¢FhKÛ p6ï ËþÖ 8ÍzÀÛév·xzÊæx5;'7N˜CåíÀ I8^@äÔ:m…µ•¶}o˯íw¶3n%š-ò.Ò{ŒùS¶©]…}.wާi¤Û¬÷’2#¸vÆÎK€Òiú½Ž¨$ûûÚ"ˆÈÈéž™VʰYœçhíc9Ƕi­y¡Åá{8l-´Ã ÒF—’Mb…öº@1ÎF9#“GO»óaý~Gow}“[¬ìA¸”CrÄèjÍyœ"ÞO Zý­ ¸Ó-õ²•I„C‚“„ËzœUlXͩڃ>ˆl€³kˆYàݸîÛµ”Æ0*×ápëýw±è•Ÿs«Áf.žæ)âŠÝ‘L¬Ÿ+—Àq×’§hÑ<-œOuö²°¨óðG˜1ÁçÚ¹v/5|X eÐIhΠgåKqô‹YØKTw”WŸëm¦ÈšWötš|zéDŒÐ—¶àmÞ—ý¬qšu¾—kq7‡¬®gƒS²sté„>^Ü“…äM \.wÕOQÕ-4›tžòFDw®ØÙÉcРšáôÛ k+múÞ=—_ÚïlfÜK4[ä]¤÷ò­ÝéÚX-•Ó+G«ÅH©Ìn †>„RZÚÝÿËüÇÞÿÖÿät6•¶¥½·µ›Ä'5n¹KJYµÝËS¸}J'ûC‘pˆ ¸PNõ­Û$ž Ô-ïïlìFØÖÂK˜]™hæ!³ž ü)èôW›k6æmvúWR³µ“dbÎ{¨°FZ;³‘‚ ôh•–W}îlc'ÖŽ—ÊGW‚2‚x§€ÉuöXĉíÉcøN hWž]ÇlÖ=ìhöQø…ÚãzåU9ol‘I­‹µ;PgÓ Ñ mq <·Ûv²€ØÆåK¢þº\ov¿­ìz%Á"Ú÷QŠ×PuÔD:(hç`FNã‡äcž´h6ÐYÝxbêòå¾²Ý0'3ŠÙoSœóïNß×ßþBþ¿/ó;Ê+Œñ«§êPéÀ=¬.VG[ÍB&1©\  epÇ'©+:ÚX¥Ñ|6ÚÛ—Ò|©D­&Lf@qÿlgâÎì_@u&° ~б Šã¤~ Ó­®~Ò%>DÐùr4½\nÇñU=qÒ'Š,æ¹KO°5‚-‹º‚›ÖCÂ^EA.?³î~Ñ¿û;ûv_¶íÏú¾~ö?‡vÜûSþ¿ úü.wôW\ˆ…âÓsýŠÒ[‹}¹òË_3gû=:qœ×A¤ÙÛé^-¾²±‰`µk8¦0§ s‚@íåE¿¯•Âú7­®¡ma5Â¥ÕÖã d¶:ûÆ¢¿×,tÉ|»£pÝùŽÖYª©«‘»‹TÖ¿´õ[+(%_5~Ç;\t1ÆÕØs–ÝÜdØÕuÖ´}&Þ݈MbDWÁäD¼ƒò[¯ë®ÃÙÿ]7: ;¸/ìâ»¶rðL¡ÑŠ•È=ðy©é4TE ª0è- KÌ(¢ŠQEQEQEQEQEQEQEQEÇøsï·ûÇù×a\‡>û¼w0}ÁE}ÁE1 ¹ÿVkÏüD§íŸúh?zã(k×lËüÀdƒšèíU¾ËÊ~èíRíoîŸÊ¼þïÅ·öÌ@Ò,ßð"¨ê ÿÈÏþú?áHg§íoîŸÊ­ýÓùW˜Â}©ÐÏþú?áGü'Ú—ýlÿï£þéû[û§ò£ktþUæðŸj_ô³ÿ¾øQÿ ö¥ÿ@?ûèÿ…z~Öþéü¨ÚßÝ?•y‡ü'Ú—ýlÿï£þÂ}©ÐÏþú?á@Ÿµ¿º*6·÷Oå^aÿ ö¥ÿ@?ûèÿ…ðŸj_ô³ÿ¾øP§íoîŸÊ•U·_JòÿøOµ/úÙÿßGü(ÿ„ûRÿ  Ÿýô€=*ßþ=¢ÿp*’¼Ð|EÕÀhÖà€HßáKÿ Xÿ =¿ýüoð J¢¼×þ6±ÿ@{ûøßáGü,mcþ€öÿ÷ñ¿Â€=*Šó_øXÚÇýíÿïã…ð±µúÛÿ߯ÿ ôªl‰æDè“p#rõãÞ¼ßþ6±ÿ@{ûøßáGü,mcþ€öÿ÷ñ¿Â€;k-;Ká{5íåíÂÆcG¹u;HTp9ëÅ^»îmš$¹šÙ›–»—žÛ¥yßü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…w6Zdö“ù’j÷÷K‚<¹ü­¿_•ýkF¼×þ6±ÿ@{ûøßáGü,mcþ€öÿ÷ñ¿Â€=*Šó_øXÚÇýíÿïã…ð±µúÛÿ߯ÿ ôª+Íáckô·ÿ¿þÂÆÖ?èoÿü(Ò¨¯5ÿ…¬Ðßþþ7øQÿ Xÿ =¿ýüoð J¬Ë­*âæååMkQ·VÆ"‡ÊÚ¼vÝ?­qð±µúÛÿ߯ÿ ?áckô·ÿ¿þèÐDÐÀ‘´ÒLÊ0d“›Üàù ’¼×þ6±ÿ@{ûøßáGü,mcþ€öÿ÷ñ¿Â€=*Šó_øXÚÇýíÿïã…ð±µúÛÿ߯ÿ ôª+Íáckô·ÿ¿þÂÆÖ?èoÿü(Ò¨¯5ÿ…¬Ðßþþ7øQÿ Xÿ =¿ýüoð J¢¼×þ6±ÿ@{ûøßáGü,mcþ€öÿ÷ñ¿Â€;{­*âæååMkQ·VÆ"‡ÊÚ¼vÝ?­_‚&†¦’fQƒ$˜ÜÞçÈWœÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéU“.s,Ï"ëÚœa˜‰äí_a˜ÉÇÔ×ÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@’£j€X±=M-y¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð¥_ˆºÃcÛûhßá@“\‡WßïçUlücªÝ …ºgÝmhv†5ŽhÓÁ÷è†QLa‘T.¬Ä äV!Ð-q Ç!'`ª§ÃQ“÷å]ŽÀ{Q寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùR FÜ•v>ZúQ寥svÚDFV͵¨ˆ ¶Ôà  )h ÿÙ endstream endobj 61 0 obj << /Length 4362 /Filter /FlateDecode >> stream xÚ­Z[“ã¶±~ß_¡7sN­h 2o›µlê8>±Çu*•ä#B#z(QKRO~ýéxÑP;IåÔÔ¡&ˆK£ñõ× |Þ¨Í#üÿasÚ$ðg ÛÄån“§6NÒ,O7ßì7y—@Ådó‡w¿¿÷õwÚlЏÈt¶¹ßo¬‰S“n\æà¹¹¯6‹>þñÃÿÜûãÝVÛ$ÒñÝÖfItÿóýÊ£~üôá¿ïþqÿ'hFo\\¸Da3i’ÆXL¸‰S}ÖRkÞ™‚Ú4Tú¾<]Ê«½ûöþÝçwŠf¡¦!™8KÓÍîøîoÿH6¼ûÓ&‰M‘ož©æq“Zg~×l~z7MóÖsì!‹•Ê6Ö©8Ï5öðù]lcrª0+Ò+§4+غ üúÓ1ß|ÓBŸyÕúVšßÎÚ­x•¨Ø¦0–4‰“D³J¾«/šw¿»Ûº?ˆhhÛæ©øÇC×Þi=÷¾#^Ov³MóX%n³56Ö¹,n»‡¯3½´—KIô|]´ÝS.wþ=ÊLô벑ï^¸î¡–þ«;k£žqôCY•CÓGÔ|abëRþâ¯w §xÑçY´ƒÖ©P6}‹%˜i…JEÙ€ªÆB}êëÊ÷ü•†õÚ‡_ünèA öÂǦÞ=MŸÑˆCï8^˽W¼LØi’Fw:‰.ÃÐÊï“GUÿ6ð/T>Û“—žŸ¼\XêèƒÇº=áà]NCÝÈ燵…Ñ ˜R¦ƒÊŸëj8¬¬Ë6Ô[Œ–~m­]ìô¸‘¾~< kK0T„jÁ^a¬ÆFåùìËî.M"°9ca]Dô}Zé³Hâ làYhû80£Ep‘ÙsÑ3ˆˆåùœÿ»Àÿ¡À8@íðJÂW~xöþ´Êæ;œ)jf¤ßLKóPæ36 ¨ÂóË„€eEaUß? ¸·¨ÚꤧeG‚\òcRŸÉ–㣨}¾‘± ËÆ:¿]víÔÁvI1°QÒ ¯‡¿¤ø„%ù"­VB°ýUÞÄçySUʸe` =‡ >c«0á”ØWÞx¥SèsÒü-Š™ÅV¹/1Ã,NÓ‘òýñüî€û:µ4lZ) òÃXË‘A¥ß—;ÜO—s¿Ö;0\mÍ<¨Î;JàÝcM;ˆlçöZ QÍàN„£UA¼v(Ï=×Ú– G°ò‹ØšOï=õá }UÿÆ5?ð£=­oÂGá5©[æ¨tœû ó‚MGl‚#M|à´¨@6<ûá²ÇÍ)?1‚ÃçzòGÁ"ãÝß)P8gûuïÌhŠÈ™ Ót”KW¨˜ n$í¯’^0c ŸÍ±í ‚4n!À‹¯0±9Ôg̬عDÙ­ ‘¬‰/m¥ѱ•¨bþiÄÇW„t%&KÙdÒÀ 3¤6¸Xb—4«Ôè4pY¼|õ‡öÒT\f@ u§¢Õðáà›3“S^r~hÒ.çô.&Æô.V’¡A‰ì^/Ã_ñ[Âxrì»ê¸_ÎÈ\š‘bMXRa…’Òô áS ­ä9QÒÅë’Ë¡«CGnXiû´F\k¡7R“`9JýÖ™§é—ñH)3/ Œ9°KWs“ʺ¹©gr²&P’?œ´‚YÔýÚKTœèìßš…ùÒ,¶ÐÞér¹Ý²Zm\V>ªæùP#€œÎŸ}‰y“N€Æ¯O(&ó¡.¥è. ¦:°þdðwHÿ^Èw·¤å!é0Þ=‡¹ Y¼ˆäå ‘TÈN‰Šõ©|Y½I1¦§ËARß:pm­ñç( ƒÀr)ÏgO™Í™„k› Íí4>ez!M=ÁÛ˜jKBª ¦X¨zž7´ØsÅË9泆¶Ù—ýŽ ŒF¿ b&G´’°åqîíÃ8lÅ QXN>œYˉ(cB¨…bâÝÀeðò=—Z©6fdñ‡œd@=N~âÞzÿ…€É¾iüȈ1¯;^cK™Ø¦©aåbD\˜…yXöS>¶{¿Ÿr†É°Û¢J/ÆØK*(œo ]€2Ô¡8T1ÏìX¢Ia³ò¤ 4œË1M,Sá~¨’¹+^ïeSèv–M‘ Ò/ ”È ãñ‹åi»RÀ ˆNYïÖÀy›%À“-Á¦-Š@øèD!Q`;ö0Ìéó=éÞ0¤ÖM%5K©TŸö°ßŠ¥Ýõ`ÐnÛÕGÈÃ…ó§”âà ·~S™Á%T(%äÙµGyOÿZ63í¿tj‘Έ}š;ˆ|8sƒÈÑ\9—@χD4¹ äNüZ)~îÃZU~(!¶©¤ç<>ºégÂÉnjo$ès0_÷vô¤§TÄ:[¥ ~àÂÜDßrdÍ’¬‹­™‡DÀ氚Θ) ž¢–ü»ªV}c²~áW:4!JšйiüÚÑ/“}z}{vP CÄ !Eb¾t{CïéîßXh9Íc§•Ü-‘Tù Zé5ƒPÔåÿ/ÝfyœgŲ[ÞÜë4R§ó„“IlôM{yho àSZ,ÌOX5y`ø æ–kB1`.Y#,_X™$vvD6u^SD ‰Ë6¦Ðq@ù­NƒS§¦\À\VSü¼f»ÍªpsÛM'Mñ~ƒ™ ÖÀ<% œÏ&zR´Æ €hÚ²éæ•³ìÛF_›Ì7ñ€H›v<„ü™GÀEù`^ÍÒò4 Ïâë1p#xþ=RI£ÇƒHøJÒkìS0ÚM–eºÕ@ &’>¢\²C.Œõ¬€™n>| Nœª\·s7¥z³5¦=¸› ̉ò(çŸâCxÑRM ¿tG«’,ܱ–wʼnÙ$ÙR -$™ óà-ûC½Ÿ~®¾]!ÓMÙï™×Ž;”¿^Ù``ÁSœG€½zR—ö ÄÙ;’,è¥óDãPZòƒ)?½e’o…a4îØl¶ X«µð3 EÂçÜ£œ(Á9Q ºñ¶‰ öÒÛö‚©P7Nýg `×!@¹ÞèÀܧTå˜Ç”£ºÚµ—Ó™ÓÛ³£@ z•¹ׇ$úÉËž^Þ™Ëoqwswóõ:°Àyðÿ*Gå:þÀ2Þjvü%ìÓ„?µ\8·}Íáêͨ’Æéh9AP 3 ¡Ä.À–{ã”Dé$VÉh{»JÇ*þåü¸¾FE2R0ÆÂÙ(Æý…?¦3ñ­²@Ý’âuŠGgÅdSøc`äÃÅ‚ÈÉ Êɾá.üq³+P= xÒ™ðS,L£š:X=® ë˜jN9À³"GÃå1iN¿ÈTR¹B„‚éŒ:f8û~Æ¥ xöõ»EaXhïté‹,E¥3ã2ãä}×óË^>`1ÅJrJuSźò,¢‰‘ÆR‰ïº̇J`]Èò@áŸ-^zÀ†y!7\E>ºŠz•Æ©µó£‰µ¸xÇH“Ú•Frº3+Ä—¢zŽ5q€‚S³¹œÇ›¢)%]a"ÎÔäR:•ãngÂM/'Ç–(:ÖUEâÒ1·ìæ÷5%æ…ª´Zô-­–3·.šÍã¦< ¾îK¤+ä׺¯Ù8)&‰¤v> stream ÿØÿàJFIFÿá°ExifII*JR(i‡Züÿÿ)( üÿÿ)( 0210‘ 0100 ÿÿ È -ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀ-È"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?÷úBÀPdzo¯RÞ6v`ª£$“ÐPÖW½DowãZ·Å;É.tËxE¸8Y&‹ûàÖ²ÏÄq»Yÿß—ÿâé\xûjxQöÔþð¯ÿ…®zYÿߦÿâèÿ…®zYÿß–ÿâè¸õöÔþð£í©ýá^ ÿ \ÿ§?ûòßü]ð±µÏútÿ¿-ÿÅÑp=ëí©ýáGÛSû¼þ6·ÿNŸ÷å¿øº?ábëôéÿ~[ÿ‹¢à{×ÛSû¶§÷…x7ü,]oþ?ïËñtÂÅÖÿéÓþü·ÿEÀ÷Ÿ¶§÷…mOï ðoøXºßý:ß–ÿâèÿ…‹­ÿÓ§ýùoþ.‹ï?mOï >ÚŸÞàßð±u¿útÿ¿-ÿÅÑÿ [ÿ§Oûòßü]Þ~ÚŸÞ}µ?¼+Á¿ábëôéÿ~[ÿ‹£þ.·ÿNŸ÷å¿øº.¼ýµ?¼(ûjxWƒÂÅÖ¿éÓþü·ÿGü,]kþ?ïËñt\yûjxQöÔþð¯ÿ…‹­Ó§ýùoþ.øXº×ý:ß–ÿâè¸óöÔþð£í©ýá^ ÿ Zÿ§Oûòßü]ð±u¯[Oûòßü]Þ~ÚŸÞ}µ?¼+Á¿ábë^¶¿÷å¿øº?ábë^¶¿÷á¿øº.¼ýµ?¼(ûjxWƒÿÂÅÖ½mïÃñtÂÅÖ½mïÃñt\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿâèÿ…‹¬úÚÿ߆ÿâè¸ñöÔþð£í©ýá^ÿ Yõµÿ¿ ÿÅÑÿ Yõµÿ¿ ÿÅÑp=ãí©ýáGÛSû¼þ.³ëkÿ~ÿŽQÿ Yõµÿ¿ ÿÇ(¸ñöÔþð£í©ýá^ÿ Yõµÿ¿ ÿÇ(ÿ…‹¬úÚÿ߆ÿã”\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿã”ÂÅÖ}mïÃñÊ.¼}µ?¼(ûjxWƒÿÂÅÖ}mïÃñÊ?ábë¶¿÷á¿øåÞ>ÚŸÞ}µ?¼+ÁÿábëÞµÿ¿ ÿÇ)ábëÞµÿ¿ ÿÇ(¸ïöÔþð£í©ýá^ÿ Xþõ·ýøoþ9Gü,]cûÖß÷á¿øåÝþÚŸÞ}µ?¼+Â?ábëÞ¶ÿ¿ ÿÇ(ÿ…‹¬zÛþü7ÿ¢à{¿ÛSû¶§÷…xGü,]cûÖß÷á¿øåð±uï[߆ÿã”\wûjxQöÔþð¯ÿ…‹¬z×þü7ÿ£þ.±ëkÿ~ÿŽQp=ãí©ýáGÛSû¼þ.³ëkÿ~ÿŽQÿ Yõµÿ¿ ÿÇ(¸ñöÔþð£í©ýá^ÿ Yõµÿ¿ ÿÇ(ÿ…‹¬úÚÿ߆ÿã”\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿã”ÂÅÖ}mïÃñÊ.¼}µ?¼(ûjxWƒÿÂÅÖ}mïÃñÊ?ábë>¶¿÷á¿øº.¼}µ?¼(ûjxWƒÿÂÅÖ}mïÃñtÂÅÖ}mïÃñt\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿâèÿ…‹­zÚÿ߆ÿâè¸ñöÔþð£í©ýá^ÿ Zõµÿ¿ ÿÅÒÂÅÖ½mïÃñt\yûjxQöÔþð¯ÿ…‹­zÚÿß–ÿâèÿ…‹­zÚß–ÿâè¸óöÔþð£í©ýá^ ÿ Zÿ§Oûòßü]ð±u¯útÿ¿-ÿÅÑp=çí©ýáGÛSû¼þ.µÿNŸ÷å¿øº?ábë_ôéÿ~[ÿ‹¢à{ÏÛSû¶§÷…x7ü,]kþ?ïËñtÂÅÖÿéÓþü·ÿEÀ÷Ÿ¶§÷…mOï ðoøXºßý:ß–ÿâèÿ…‹­ÿÓ§ýùoþ.‹ï?mOï >ÚŸÞàßð±u¿útÿ¿-ÿÅÑÿ [ÿ§Oûòßü]Þ~ÚŸÞ}µ?¼+Á¿ábëôéÿ~[ÿ‹£þ.·ÿNŸ÷å¿øº.¼ýµ?¼(ûjxWƒÂÅÖÿéÓþü·ÿIÿ [ÿ§Oûòßü]Þ¾ÚŸÞ}µ?¼+Áábëôéÿ~[ÿ‹£þ6¹ÿNŸ÷å¿øº.½}µ?¼(ûjxW‚ÿÂÆ×?éÓþü·ÿGü,msÒÏþü·ÿEÀ÷¯¶§÷…(¼CÜW‚ÂÆ×=,ÿïËñtáñ#]^Ö÷åÿøº.¿,êÝêPÀ׌xâ|ò_GoªCÇ! &ˆ }Á'|ñ^±it%PA¦…€äQ@Ìp¦¸/^еÛÈ?ñÓ]ÝÉÄf¼ËÇŽ²¯Gý1ähÇ7Qº¡ÝFê‘—¬-$Ôoc´…âY$$)•Â/Lã'¿aïZÚ§„õ ?RžÎÙ†&Š:+,kŒ³)n:ð2I¬ {©­.c¸·‘£š6ÜŽ½T×Cáÿ*j³¾µw3Cqbö^qÌJqƒÉ:/3:=S•ìR;Ff¿Rö :þ𧯎)ú†«ésÁ 턱IpvÄWÞ}RFyé],:þ‡c­ø`E¨´öšd2Ç5ÇÙÝ9e |¸Ï_­f.µf|?¦Ú-ûAuª×Ä,ÞTg8p1ƒÉÎÜÑ×úïoËPþ¿…φõ«;»[K‹Iî‰XSÍC¼Ž£†ÀëßùCï>€©<ûu®ši6~+ÒŸOW}ÅdƃºLî`‘ªú§ˆì­î4Óc}myioz.šÞ 8Ûm#ÜðÄ‚i­lÊòøJïN𾣩j–²ÛÏEöu2)3a²>½ñX1X]Ïa5ôP¶…Ö90ùYº g<ý+§Õõm û]Z¤·7:­Äsˆ^ÙÐņÉÿ­Yþ Öì4»»¨uR~ÃpŠÇ [÷ˆÁ“€½%»¿õ¢þ½Aí¡B] U¯K'V²(.õ% ýÑÁù³ŸáÍ;Qðö³¤Ú%ÕþŸ,99*@>ø'Ž+£¾ñŤÖzeÌqî¾{¨çÔ)ð£$`çƒÇLT¶·¢Ç¦k‹a=ìúÄÉ!ŠH¸ »’~ñíÇ £úü¿àB-#ÁºÖtøµ›`²¹v]ÂTÜHF`8$»éX“éðÇÆÕÄW2˜í¾aºR8\î?\bº'ñ”ß`ÖEÏú 7”ü~è¯ÝÆî¾Õ_Y×4ýfóKÕ£¿{+ødXæAºÆªr² Æ1þÎúïªFfÏárÚòÚÒm=–âëp†?5 | žÆ®*-GAÕô™aŽþÆHZfÛYX1ôÈ$gñ®ÏO¿Ñoüi¢Kc$W‰yMÕÌÍIû¶Á*ßÅïY7:¦a§Úéê]R©ýªäù DèP×ðëÍ upïýw0õ/ë:D÷öB²¶Ä!•ÁoO”ž}©×^Öì¾Íö6T7M²Ü¥ºãh$Ä éõh–ÖVÉc<-Q.Ö {n1Øä[Þ©¦¯ é¾0ÄVúœ·¾tîÒÛ›VW…]HÎãÃc `v¡9ýSEÕ4SÔlÞßÌÎÂYX{©#>ÕŸººOjöw6ÙéúµÍ¿žf1A§o,ã'ø‰ÉÎcìù:L–Ùšd›Ã´ÉmºuÏ£çŒvâ’/h~¹×ìõm3Ú)óKüD€0¨¬|9¬êMp¶v-1¶Ç( Úèå† ÔþÔ4ÔÓ5/RºkHïãŒ$â#(RŒN ŽyÍiøkRðæ™Ùn ŽêÝâêk”Ëè‚c=ý©ÛRz´ß Üê¾¹¸´¶šMNß Â]P*…²äúÕ-'×zž°úl²Ee$LSpÀ$à¹Ë@?>kmõT²Õm.µY,–mXÞÄâÙܲ`c¯JÌ»ñ÷Ä(u“º+5¹‰·2’Ûq'·J#«Wþ´C{;Z³þÜØê7Ve÷˜&x·ã¶’3ŽÝ*¾ê³ª^E?ˆ// Û,/tò¦õ;]K’28>”jš·ö£ÄßÙÚu—–Å¿”?Þ俥^Êã{²ðð¾ºÚ`Ô—MÙ˜üÑ t9Lg;s»ö§K'HšÆ+™®ïÞTJ;ðó‘Àç5¹eâm&WE™îÈŠÛHû,çÊs‰1÷qŽyî8©<#©ZO7„´øåÝuk-Ñ™6‘´2±ãð5VÕÿ]Ééëc™½Ð5=*æÞ-RÜÙ,ìM#AêIRzuÇZ³©höš2ê¶´z…·Ÿöy¢*øÏÌ=êö£{¡Ã¤[è1j’ÝDú—Ú..>ÎÈ N„rIêxÏzgН4k«(¢Òu”kKl }=,äN¿yË·ºòi_B­gc—ÝFê‡u©ˆ›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Uí/O„®Ò»$ðvõcè+/ujiWkr[±ÆöÜ9ÆxóøP¼º™$ebBøáÖçÜþµsðØË.¡ö"B¸bº€óë[>d|á¤wi˜ÈœVd7Àj¯txI̞ÌÒaÑ#‰•ãº}™ 6Ù8Ç^ƒmdjsYÞ,L«'1çœ`ûÖ‰’Sk4 BD›ðÆCŸ˜“Óo¿­V¼½ß}nè7}·ýNAÇéC½´muszËÃú5²$WÌgºe,G˜T uÀàzšËÖt«kh÷N•žÕÈXçnz{Š¿?“ªB›¦Í¿ÞÉlc©éŒœŒsÐñjëWØÓͫȯ3íÜTc€AÎ;tåQÄT•D¯«ÝGŠÁÐ >T’Z>æêúÃwfkX‰9%E|纽ïÂ,M¤?îŠõÑóGÊŠ)°ýÁE0uþ¬×˜xóþAwŸõÉÿ‘¯OºÿVkÌï)÷»iÁã9'½GºÔû«Yìe]Gå9Ep ò° §ƒÜSÛéíq¦^_,ªÔÆ ã%·’8?…UÝRAu=¬Ë5´ÒC*ýÙ"r¬;pG"  ¤à0'ëK@.I$’Iä“Þ“u6Švê7Sh n£u6Švê7Sh n£u6Švê7Sh n£u6Švê7Sh n£u6Švê7Sh n£u6Švê7Sh n£u6Švê7Sh n£u6Švê7Sh n£u6Švê7Sh n£u6Švê7Sh n£u6Švê7Sh n£u6Švê7Sh  ¬xbXzM/œ}EEH&`0è Å*ÎS _Ê¢¢€,-܈IBPž»XŒþF£iKIëQÑJÊ÷3j×Ðvê÷ïǤ?îŠùþ¾€ð‡üzCþèªDüpQDpQL]«5æ<ÿ]çýräkÓî¿ÕšóÈ.óþ¹?ò4â]«¨ñ•Õ©Öîàlp±¥ dÞ~EþÛ}ºQÿ ëÅ™!ti¤ˆÃó Gü+¯Ðãó_ñ©£¬!–OÆ ³¶ªõØ>ñü2*Ïåiױç^M¤º µ›ÎF¶ˆdmd±³ÉÍcÿºñwýî?5ÿ?á]x»þ€wšÿ+i`O[œ½ox,gÅúx »,ÜzüV¿á]x¸Ìãó_ñ©ᯋ¤@é¤åO´ÅÿÅÓÕ²Óž×\±š÷ÃË¥E™7›Í1¼Û—»Ìf0žõzFÖ~É£ sÏ?Û*SÏûÅ0œQœÖü+Ð#ÿ&aÿâèÿ…cãúäÌ?ü]×ãq½¯+Kê¢j±iqæ.©3\%»|² e€þ q5Öÿ±ñ‡ý?òfþ.øV>0ÿ GþLÃÿÅÒQ°Û¹ËA4–×Ï’6Œ;r uÚÇ‘c§^jöÌ€ë¡D(§˜ÓïL?ï°éš‹þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.›ÕXKGsFÈCý­hYY®†‰ÙB:£™0>á`@m»±ÇëL’iµY´{›+›K«ÛëÙÉ,·ÆÎB¯9]¹ÆqTáXøÃþù3ÿGü+Ð#ÿ&aÿâèë÷þ7ÿ0Z/»ð·ùõ9mMºÕmZ0°[¶YÀÆ,×]oü+Ð#ÿ&aÿâèÿ…cãúäÌ?ü]ïýLJ»©ÿ„·Pû>Ïí§Åö-ØÿYåÇ÷sü[wcÞ©±ñ‡ý?òfþ.øV>0ÿ GþLÃÿÅÐ.·.SD:Ћû_Ë›ÌûF3»Èó}÷zöÆi²=ê.“'ˆIMEu41´ø8ÝŸöwc÷ÅTÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹¡_}Á«šÖ‰ µµìW{a½þטYÉ0ÌqÌPfž‡ ³,L¶–VGP,“E¯ƒ9”òUÜIüéŸð¬|aÿ@ü™‡ÿ‹£þŒ?èÿ“0ÿñt¢­ø~ÿ!½Æÿçý\º¯âñ®©¨Ky>Œ‹$¤ q1Æ_Úª±ñ‡ý?òfþ.’AÒÇ%Eu¿ð¬|aÿ@ü™‡ÿ‹£þŒ?èÿ“0ÿñtÀ䨮·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ J½ÿÂñéû¢¼·þŒ?èÿ“0ÿñuê^ÿHÝÐ@ƒî (ƒî )€Ë¯õf¼ÃÇŸò ¼ÿ®Oüz}×ú³^aã±6ìzÄßÈÐ¥X¶4Ë\Ï$þB§óµaêR<~ ¹xÙ‘×Ob¬§/¨5I5 ý7ÃVÓ^j+<¢5…¾Ë#ç+œlYÛé¥ :g¸Xöïe]ÇhÉÆO¥?Ì>ÕÀ]j÷šÖ‘¥Ì‹^E¬¬š7XË(l6Ó†¡æ·ôûýJî]KK¹{hu P…n!Œ˜Ê¸%[a9ÈÁã4í§õåþa×úîÑÐ$öªQÿÇÕØíæýk/ÂR\¶Ÿx—WRÝIôñù²œ’°=‡ÐqZ‘ÇÍßýuúÐÁÑE†QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE2i£·‚Iåm±Æ¥Ý±œ2MV¶Ôín§ò#3 6— $@ 7ž£ó¬][P»šmCOW… Ç’rY°Ñ©';€þ#ÛµWûtËv—0:+ªºbH‹‚©ìß”WW0„*¨têMÙ×Wàÿøó‡ýÑü«ªÒnå½Ó’y¶y…äC°×+œ}=k•ð‡üzCþè¯B2RJK¨Ï@ƒî (ƒî *€e×ú³^gãQºÎqêŒ?Jô˯õf¼ÛÅãtRPEwÛÇu£Eo2îŠ[eG_PW³G…b@u=EšÙÃÛÌdMðáJá~\‚G Ö½—üƒíëŠè"§  øE-¾À-¾Ý{æ ¿¶}§ryžo¯ÝÛøb¯izD_žé,ÓÏpÁ¦žv î@ÀÎÐhQ@4ý:69ÒvNó¶òÎH)bÿ›¿úè?ô«UTÅr“Ìñ¬,²0aºBù@þéô  h¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ) ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€3õ}"ÖöÊñ–ÆÞKÉ!`’4k»vÜ/Ì ÅÑ´K§ÔËêºrq…ln%qÀ'°<×U‹¿ùåoÿ›ÿˆ£óÊßþÿ7ÿXO ÍMî‰qA [ıAEôDP ~¸ßñkû¢ºù%žß4Qùcï2HIQë‚¢¹ ñA[¡ôpQDpQL]«5ç^)Ž=N+Ñn¿Õšóß ÜF=\:äkÿ\SÿA=Aeÿ û_úâŸú©è«ÿ±ÿ×7þkV W_øýþ¹¿óZ°h'éU[­Z~•UºÒ:÷þ>%ÿ®Q9k“µÐæ·ð´ÖøœÞIhñžá™x¶ÑøWq+ê3‡PÃÈ‹‚3üRR´Úr_ÇbÆu"XŠŒ•ÿÏ¡ô5Å[ :“r‹¶ß´*(­QÄêÚmÔ“XÏLË/‘ÀbÜ7mäy€©èAèj•Îp¬‘¢^ÉjöilV7ƒzc9 \c¸å{¥zD°Æ "Eih%ü…?û:/ïŸûá?øšˆá*¥k¡ûHœµ´òL×PùED#GcŸ3å==N? æ­tÓÐ}íšK) •ä”:<Œr `µs“Œ/QÅzwöt_ßoûá?øš?³¢þûß ÿÄÔÇR7³Cö˱æ‡D¹šÒèE¦Çi,è…—l®¹ÊH={ÓÛEº¸±žÖ+_°Åqr$C.mT(˧’ãšôì迾ß÷Âñ4gEýöÿ¾ÿ‰ªú¥^ëñþº TŠèy•æ“}snÓHZ,&UXœ1å†~d8RÍߌÖñ¶ž]jÞiTmíÎÖ`ÊÇ޼ÿW_ý›÷ÛþøOþ&˜F²¼/lT ° ƒŸð4¥ƒ¨ú®½ú‚«Ðâ­–îMnIï,.0¬ÑÛɾ3iýìnݖǧZ«¯iwW—²I¬“n·Âñʨ#}ÄŸ07/Ýã ÐñÍzÙàÿž1ÿß"³ÁÿÏüñþùÞ¤·kñóÿ0ö±[g£é¶÷ikK˜^Ø0šIîDˆT‚0‹¹¶äã ^+­­ÿ³ÁÿàNW$q¸ò;VíΡ¬Áqc¥«X>¡r$‘¦18‰#Lì“–ïPCErðø’ó6Âæ¦ Ö…rT6Ü£!Ï’½sÖ«Ùøºîú$X­âûLº‘~h6ïש@yéžÔ_—ù‡õùÿ‘ØQ\¦â‹†Ó¯ïuµY-`id°Ž'ŽhˆÏ ¸ò;d*½§‹56IÞ{T‘œ— Éi£:PgEfè“j7:|w:ƒÚ³L‹" xÙ‚3ƒ–9>üV•6¬ì$î®QE!…Q@Q@Q@Q@Q@Q@Q@æþ<ž÷Hñž§¢rW÷Pîæu;znùç·¦ÀSÞjþ ½Ô§Ô>`¿½‡<Íž‡¯lsÛ× ö£ÿ ÛŸúäßʸÿ ñ ì5ùÜÿ×&þUÈx_„ÞA÷A÷˯õf¼÷Ä_ñóýt_ç^…uþ¬×žø‹þ>bÿ®‹ü躲ÿ}¯ýqOýTõ—üƒíëŠè"§ ¯ü~Çÿ\ßù­X5]ãö?úæÿÍjÁ Ÿ¥UnµiúUVëHíÿä%?ýp‹ÿB’²çðµÆ¤Úƒj7ëpÒ +Gò‘Г éŠÔ·ÿ”ÿõÂ/ý J¥/‹4hgxd¹”Hå²ýšS†Î1÷i«!Åŧýu?úU¢j”íûû3ë)ÿÑoR™9ëH :–½•:­ÍçÙ‰Uk´U1!cŸ›w\vª×þ,µ°¼»ì¯¥ŽÌ)¹ž(Õ’ à Ÿ›wNx°5¿ ^êW÷²ˆì'Fñ\\;‰m‚íʨ F8=ÇSZ—Z5ÌãÄAd„i±Ò~R#ÛóqÇ>™£¥ÇÖÅÍCÅ––\*ZÞ^-´b[‡¶E+ ‘‘’Ì9Ç88ª¶ºòA¨k×WsÈlàû9‰0IÐ(õ$Ž=Ms:ܲiêÖ×–2ÉnªöÎÎ&ya>@ݦ+ZãÃ7°j0¼°¯"·eÜ – z8õ§ßúõ%_Kÿ[.›­Å¨ÜOlÖ·V—0ª»Cr 1VÎm$ÁïVIÿ‰„£þ™'ózÅðþ˜tÓ3É¥éVR8 › üþr£ò浤7—>VÓ'ÙÓf㜾3íC1Ljç>&û!†?ì³!´[Žw} .ìzmÇQRßøªÚÂòî²¾•,›™âJDdóg§<Y§Á,4on?µ‡7Ry?hÎíÛ3Œnö«³èW³ÅâÏ}NHÀc…aÓž:gÓoÿ2ÿñU¸®ëúùóà?–_‡ù•?á6³ÿŸ+¿ûê/þ.øM¬ÿçÊïþú‹ÿ‹«ðˆhóæÿø/ÿGü"üù¿þËÿÅQˊsà?–_‡ù•?á6³ÿŸ+¿ûê/þ.øM¬ÿçÊïþú‹ÿ‹«ðˆhóæÿø/ÿGü"üù¿þËÿÅQˊsà?–_‡ù•?á6³ÿŸ+¿ûê/þ.øM¬ÿçÊïþú‹ÿ‹«ðˆhóæÿø/ÿGü"üù¿þËÿÅQˊsà?–_‡ù•?á6³ÿŸ+¿ûê/þ.øM¬ÿçÊïþú‹ÿ‹«ðˆhóæÿø/ÿGü"üù¿þËÿÅQˊsà?–_‡ù•?á6³ÿŸ+¿ûê/þ.øM¬ÿçÊïþú‹ÿ‹«ðˆhóæÿø/ÿGü"üù¿þËÿÅQˊsà?–_‡ù•?á6³ÿŸ+¿ûê/þ.øM¬ÿçÊïþú‹ÿ‹«ðˆhóæÿø/ÿGü"üù¿þËÿÅQˊsà?–_‡ù•?á6³ÿŸ+¿ûê/þ.øM¬ÿçÊïþú‹ÿ‹«ðˆhóæÿø/ÿGü"üù¿þËÿÅQˊsà?–_‡ù•?á6³ÿŸ+¿ûê/þ.øM¬ÿçÊïþú‹ÿ‹«ðˆhóæÿø/ÿGü"üù¿þËÿÅQˊsà?–_‡ùšZuòj61ÝÆŽ‹&p¯ŒŒ;;zÓu6N8f‘D3¤ë°–CGJ–ÎÎ T¶¶B¦v©bØÉÉä’zšžº£{.mÎ òó>]¿CÿÃ6·÷SÏö«Ëqr¡.c·*ÎÇÍON28§ÞxvÚâXf·¸º°–(|€öŽ˜û)È#·qëZôUd¯‡lboṴ̀gîòv7Pà  ç=ûûÔv^²°{)-ä$´FŒ>á™Q‰;_Ž@'#¦+jŠÂ>µ[+ x.ï-ÞÇ“Émÿ>ðÿß²[ϼ?÷À¤›7üø]~qÿñty³Ï…×çÿZd¶ÿŸxïGÙ-¿çÞûàP›0ÿ— ¯Î?þ.¥µŽS,·&Æpª©HQœgg,z{U¿²[ϼ?÷À¨•DWD¿p*°™ÈÇéL (¬YüMgºšcsò¼ÙùQÏE?_Ó#×YFç†2HY ƒŽ6“ý(Z)~Émÿ>ñß²ÛÏ´?÷À ¢—ì–ßóïýð(û%·üûÅÿ| JŠâq–I^C;ræ*o²ÛÏ´?÷À£ì–ßóïýð( ßÿÏÅ·þ·ÿFoÿçâÛÿÛÿ‹¥U\ÉýÀªÀzg#N*Z‡7ÿóñmÿ€íÿÅÑ›ÿùø¶ÿÀvÿâêj(ßÿÏÅ·þ·ÿH"šI’K‰Qü¼” @ ÉÉ9àŸÎ§¢€ (¢€ (¢€ (¢€ (¢€ *%EšéÒA¹…= $õüªo²[ϼ?÷À ¢—ì¶ßóíýð(û%·üûÅÿ| J)~Émÿ>ñß²[ϼ_÷À ¢—ì–ßóïýð(û%·üûÅÿ| J)~Émÿ>ñß²[ϼ_÷À ¢—ì–ßóïýð(û%·üûÅÿ| J(Ø©ò¢…QÐEQEQEQEQEAyw …œ×w²P»·°®~ ê7rK=–‘;ØÂO™"[B×$:ž;íVǽu,Óî5O ßZZ Ü2«¢çаm¿ŽÜ~5ÂxgÇN‹ác¦ÞC:]Û†£ýóÏ_CëœWM(^ Å]ÜÎO[6z‡­Ûë¶?h€®F7lŽFAŒ‚AÀ÷‚+N¼ËáEý¼’j™•f”+GfPÎX¯® ˜ü¨¯M¬ªÅFm"¢ÛZ™Z¬—ZL.¡£’ðB2r2> ´`–Â{»›H‘ ÖÅD«åcná‘ÉU»½Õa’Þ¶—K eS’¦¤çß. V‡Ùàÿž1ÿß"¹/‡WÓêZMõåÓïž[˜ŒŒn?eƒšìi¸¤ì%6ÕîGöx?çŒ÷È£ìðÏÿï‘RQJÈ9Ÿr?³ÁÿèúÖâ©ñý}?þ‰Ž°ü1÷GÖ¢ŸÂi[ãû¿#»ƒî (ƒî +C!—_êÍyãæ/úè¿Î½ ëýY¯=ñü|Åÿ]ùÐueÿ û_úâŸú©ê /ùÚÿ×ÿÐEO@ _øýþ¹¿óZ°jºÿÇìõÍÿšÕƒ@?JªÝjÓôª­ÖÛÿÈJúáþ…%5ô="IGÒ¬YØ–fkt$ŸRqN·ÿ”ÿõÂ/ý JùñUý¾´t±£#\ÛûQÔôo¹Ó'Ó˜+ñqkÿ]þ€Õâ9V)4}ÐG.ýF%óò7Ì0G?\j¿!?h´Ï_0ÿè I¨iÐê-jfiìÓ­Âl e—8#§4-תŒç[ÄšÄmszRÅ´ë}GìoGíÞpmØÎXqŠn•©j6zö¥qS·9Ôš]>_ úüÈ%ÖuØ4:w}9®u âŽ2!p‘«©<ùb1ê+KFÕ/./oôíE ve ’ß!$G‚É‚ɬÝoHšëOÒl¬ÞeKk˜‹JŽªèŠ¤nñž¿ ÑÒôÈt³;¬ÓÜOpÁ¥žv ï€8@VšÛúØtþ»š$ÿÄÂoúãózåtßêO¥i -RúúøÏËÊ!P#cè§¶;WL‡v£7ýpÿBzÈÓ¼3ýžt“ö¿3û¼cñÍ$QžÞ#Ôou #ìªCsŤÓlPñγƒœqÎjM[Æðiw·æ+f6ЦàIx±¾HÉ©rÓÒ§>ž"¸³Ô„7Q\ÜN®öû×l§%Jî8ç=ºTÏáûÈõ¯,µ(ák†å%µ+:€7/Ì6’¸£°‰-õË›ÝfkKKÞÖ–áçÚpë¸a6œñî*Šî.ÊæëKX^ËäÃ:\!‰!w.ÑŒ‘Øš×´Ó>É©ê7¾nÿ¶Î͸ٵvõÏ9®sÞ¿›IÒÿ´®Ùm­¤3¥‘¶òÜ8c·s’sŒÔÖáн?Ф‹ík¦³éVÓ˜%ºó€`AŲ́=óž–·oo­xše1·”`*&—ËOõ}Ûh÷Å: É/Ú-RdÒ®g3Ëkä‚Ä“¹”>xR{c<žiÚ…~Ý> ë{å¥á…öC’"6ž¼©ÀÊŸÎ’ÛúòS6ïÅ“^øwR–ÏÉŠòÒhSu½ÂÍuèàwƒÇ«%õÊë:DwЛyeYÉH.ËE…PrÃhÝíÓõü"’ÍiªGw¨#M~c>dþZÆcû¤)cž@ïWSFº–öÂîþþ;‰mD ì·òÇcŽ1|ûQéýh"¥·Še˜ÙÜ˦4Zeì¢+{Ÿ8$çidÇÊrzŒÓ[ÅW)<Ò>–?³¡½ûÜ Œ¸mÁwlÛÓ$w§[xZXM´º›K¦YJ%·¶ò@`Fv†|üÁsÇ ÍK'†·é—–kÇÚo¾Ù¿Ëû¿:¾ÜgŸ»Œûô¦­ëËþ=´þ·ÿ€kYÍs2Ìnm>ÌVVT`}è:?3éÚ¬Õk8naY…ÍßÚ JÌ‡Ë ±Eã®={Õš@E ÿOœÓ(ÿ›×¬ë×kº¼#V½µŽÒ8Ú­ìêÄ©'qØqÏ« ëU±¨\׿›Ö%ƨ^úúÃUŠØ^ãÚù…vŒà;÷“3æÕæ½°¹i]…ÄšÌ7„1Îv¨ã9þ,ûU»]XYHŒÂy< .Jùÿ#cýœ}î>ö -¼)ª4)s!…´ódA_›–,_>¹cÆ)SÃ’yn%¿í¦ÿg–㌜67zŸ­6÷·õñš[_úøÉ’Áâé" Ú®œ,ã’ͯ"xçóC"€X•pØaëõ¦é4‹T¾†+Uy iâòoRn2²`|‡Ÿqמ)×>Šíl£žrÑ[ÙÉhêê‚sž>ï¿ZŽ= íôË:÷SYí¥·0)KaŠÆKdäãØPúÛúßþ+éëoø#ì¼d— ¨G,6Æ[;csþ‰x³£¨ÎFàŽ„w­}þóP²[›»8­DН¤þnTŒóòŒnk \nºkBi¬M’y6žPU=ÈÜr*ß³ì–6öÛ÷ù1¬{±Œàc8£K^ðúü¿àš¨ÝU|ÃG˜ikuª¯˜hó X<šJj 5/–}E0E?Ë>¢,úŠeÿ,úŠ<³ê(”Sü³ê(òϨ QOòϨ£Ë>¢€T®4}.îä\Üé¶sN:K$ Ì?3ZYõygÔP€åaðk⨼Akö‹yãf³Äà@ÎÊÊX®3œ1è@Ï8®žŸåŸQG–}Ecë$E.›rÿ,6÷[å|p‹±×'Û$V~“y£YK¨\^ëö7—7îR6ªí '·©ç5ÔygÔRìoïγå’m§¹ªœ\R’ÛÏþ0­õÙÛKmm6“¼¹ó"ˆ"«çƒ852k~ŠQ$wºrH±ˆƒ)PB‹ŸOn•¯±¿¼?:67÷‡çNÓî¾ïø!z]Ÿßÿç´½GÚL—ßgÕl™ÖTŠ2¨±qíúgžÝ}«Cþ} þ‚ÖŸ÷ôVŽÆþðüèØßÞŸu÷Á Òìþÿøwü$úý­?ïè£þ} þ‚ÖŸ÷ôVŽÆþðüèØßÞŸu÷Á Òìþÿøwü$úý­?ïè£þ} þ‚ÖŸ÷ôVŽÆþðüèØßÞŸu÷Á Òìþÿøwü$úý­?ïè£þ} þ‚ÖŸ÷ôVŽÆþðüèØßÞŸu÷Á Òìþÿøwü$úý­?ïè£þ} þ‚ÖŸ÷ôVŽÆþðüèØßÞŸu÷Á Òìþÿøwü$úý­?ïè£þ} þ‚ÖŸ÷ôVŽÆþðüèØßÞŸu÷Á Òìþÿøwü$úý­?ïè£þ} þ‚ÖŸ÷ôVŽÆþðüèØßÞŸu÷Á Òìþÿøwü$úý­?ïè£þ} þ‚ÖŸ÷ôVŽÆþðüèØßÞŸu÷Á Òìþÿø?ótíféy†æg’&þòùj¹Ä©¬O }Ñõ®‡XÔá‚gÓd3MnάÚ¯9þÚ¹ï }Ñõ¢µ“Ø*ó_™«_oC»ƒî (ƒî *̆]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@Õ—üƒíëŠè"§¨,¿äkÿ\SÿA=5ãö?úæÿÍjÁªëÿ±ÿ×7þkV Dý*«u«OÒª·Z@Goÿ!)ÿë„_ú•dÁg1¡™T¨}¿0¨Ï§«[ÿÈJúáþ…%]¦2ÿÇͧýu?úU¢j¤ç6õÔÿè·©‹RLÑš‹u¨\Ñš‹u¨\ÕùˆËÿ\cþoR¨AÎ¥7ýqÿBzy‚#:ÎcC*©Pû~`QŸN2æ™Q£`²FÛÔ‘‘ЂàMOE0)}ÿ>ÖÿøßüE&/çÚßÿ[ÿˆ«ÔP^ÿϵ¿þ·ÿF/çÚßÿ[ÿˆ«ÔP^ÿϵ¿þ·ÿF/¿çÚßÿ[ÿˆ«ÔPkX$G’iÊù²`ay £8ïÔœûÕš( Š( Š( Š( Š( Š( Š(  ³C0¸3Á±‹ FG;AÁ$€qÔö¨ñ}ÿ>ÖÿøßüE^¢€(â÷þ}­ÿð%¿øŠ1{ÿ>ÖÿøßüE^¢€(â÷þ}­ÿð%¿øŠ1{ÿ>ÖÿøßüE^¢€(â÷þ}­ÿð%¿øŠ1{ÿ>ÖÿøßüE^¢€(â÷þ}­ÿð%¿øŠ1{ÿ>ÖÿøßüE^¢€(â÷þ}­ÿð%¿øŠ1{ÿ>ÖÿøßüE^¢€ÿ)|ÅU~á[püð?•X-ŒÔU“âYnÿ±g‚Á®nH·FE'ËÞp\ã '>ÔŸÑ>â-t\›O0}žO-¼ÅÆáÙ—žTö4ë½NµŽïpK=¬M,–ñʦ@dü¹È®rÛNÕ´}rÆBmå·šßì/ö;gAPLlÙfàŒñ÷ª6_ \hm¥ÜÅ©ý–hÞV·;$rÍæãq9ëCÙØú^#´»¶³žÂk[•ždŠ@.· ã¾Xw­^mRÅ/VÉïm–í¹X ªý9®KÌ’ûMÐR:öµ½ƒÎYm™6á'‘Ƚ*Ý•ÇØµ-(éWjw7Æho9L ¯æt]«Æ3ž8ªk[yÿ—ù’¯eës¹›YÓ-®ÖÒ}FÒ+–À¼ê®sÓå'5supú–™%Èñy{'•¦<‚b$»¿ƒŽN};×YfÏö3!üµÝ»®qÎi ¹ºÕê7R]Ôn¨·Qº€%ÝFê‹u¨]Ôn¨·Qº€%ÝFê‹u¨]Ôn¨·Qº€%ÝFê‹u¨]Ôn¨·Qº€%ÝFê‹u¨]Ôn¨·Qº€%ÝFê‹u¨]Ôn¨·Qº€%ÝFê‹u¨”ñÏ‹-ÿëÉÿô*Ÿ†>èúÕ­xçÅPדÿè2U_ }Ñõ¬(o?_Ñx¯†ŸøVwp}ÁE}ÁEtƒ.¿ÕšóßÇÌ_õÑz×ú³^{â/øù‹þº/ó êËþAö¿õÅ?ôSÔ_òµÿ®)ÿ Šž€¿ñûýsæµ`ÕuÿØÿë›ÿ5«€"~•UºÕ§éU[­ #·ÿ”ÿõÂ/ý J»T­ÿä%?ýp‹ÿB’®ÓµÉÅÅŸýv?ú-éìÜÔwëì¿ë±ÿÑoHÇš@;}.ú‡4f“o£}Cš3@†¦Æs©Mÿ\#ÿО˜ ,':”ßõÂ/ý J¥â 뛦}šMžuüPÉòƒ¹œŽj‹xªå'šGÒÇöt7¿c{q— ¸.í›zdŽõ­«iÚ‚ÈyÞWÙ®£¹û»·mÏËÔc9ëT$ðÖý2òÏíxûM÷Û7ùwçWÛŒó÷qŸ~”ןõ·üKm?­ÿàt­nú8µ{«øãm>Òæã÷þoÎ n:wÝQYøê –•^ |‹WºŒ[Þ$Ä„*ø#`û޼ñWÓÃ’+j6í|L¾iKcÎÇ8|ôÏ=(ƒA¿]:âÂçTŠxd¶kxØZuÈÀf!¾cašZÛåøKüÿ7ñ£—iu&“–öhâ·ˆ^dàY¶qÓ¦ ;þ‘ù¾±xolÙ­’@ûËð›[Œ‚xä sPëÚmØÓ4;K'c-½Ü#ÎïHÞWÓñïÖ¦ÿ„[í—âúùæ¼½df¸Ž1–cå6®N0yäœÕ;knÿäJéër½þµs.«i÷Ö_b¼]>IãÙ7˜®˜ Ø ã#èºñhZ)ŽÒD6ˆì&½ÈØQÂ)qüEZOM;ÝÍ©êj¸žÔÚ+ljcŒõÂäòO9Ïj§/„.š?Ýê‰^Él¦y,÷†EÎ ãiÁç’ .Ÿ×Ÿü´ºþ»Á%þ×ÔgñDQXEöréñÎRY|½›œüà rqŽ8¨&ñݤZ“ÀÜۥȵf7j&Ý¥„]Jƒß9ÿýÌ–wV:ŠÁ$6©i/™˜$E9|ÃiëëÖ‹mæÂþY,õÖÊYÌïo%¨vœ°WÜ0 ö8Í=/å¯çþDëo»òÿ3xð+˜±ñ]ÅÂY\Ýib Ù|˜gK€ä1$.åÚ1’;W×ÄV²8ŒYê ±Ú iÓø’¼ Äðç‡ïæÒt¿í+¶[ki édm¼·íÜÄäœãµ%¸úà×¾ËmuåÁqss&§%¬É>íÍ׆#ä@8çõ_XÕäÓõïT„[0 à ¦]íµB…àd“Ðc½_ æÞAóGsö÷¾‚a>[7ð•'æ$™Ïj[¿ 6¬öm¬]Ewä,ªê¶þXpà˜í#Ï?… oë·ù¯õÜ­¨xÁ´é!¶žÖÒփϖ+‹õ‰QI (b>f8<zšßÄój76QišzÌ·«tÍ,þ^Ä-· rGáM_ ßC,70ëÞ$?g’YíD‚XÁ%w.áó ýàyô­(4—‹Y]JK€ïö5¶eí†Ü[¯OÖšóþ·ÿ€'ý~ðHu+ë›h¶±I¶ “7š»Aݵ29ê9ôª:Š®nÍŒ—X‚ÒýÚ8&[çp @eÚ1§¡5­{¥ý¯VÓ¯¼íŸcó>M¹ß½võÏüj•¿†¼;H´û^ïìë;w—3‡Æxûþý)ØÎÒ|K{kàõÕµxch–0RUŸç™‹m‚ 'nricñÌmg~æÚÞYí7 kx³FáÛhùÀàƒÔcó«1xRQ£K¤M©y–#›`°’r’Ù!°}…M>ƒ}{¤ÜØÞêPÈÒ”+$Vž^ݬ‘¸ç8ö§»¹ÖõKi,mN‘_]™1¼ùPû;ç¦)¿ð”†ÓÕÖÂC¨5ѳûp1(ä‚ý6ãœúv¦ëöz…ψtW°Àщ÷NÐQ2£†G_¨¥Û§ª‹÷‚ݛ߶yc™Oäé·c=;Òþ¿ò†¹¬MyáíRÚ{cg}i$HÖMãk:ÊØžÃ¥_ÖüP4KÔŽhíP7úb¬ß1ÆDD|À}i$ð³ÜØjIw¨/oʸX‚ªl  TÉàcלžj ß\]Éy·R…#½xä¸ i¹‹(Qò¶á´£ƒœsMn€±g¨êoâZÛËŠ[ ]æÚb0N)ÝÏ©WNñÕ®¡¨ÚÀ±Ûˆnähád»W” â¨8õ=³ŠÔ5ÄZåÅýµò¥½ÖÏ´Û¼·~VÈÛ‘ŽÆ«éÚ5΂€-ø›M·V)Ø÷Lœ(prØíòäÒ^×õÿÈÑ×'–×@Ôn r’Åm#£Ä) Öe¦¹®’u+(‘oaó£¸/‚S*ÄlHÆ=êy5K=btÖµÔã[¤h‹Ia4j™—ñ¬ÍNÆö×Ãm¥ÜO>¡rÊ«döÖeLn˜(X‚@ä“Á£küƒ{|Ë â›©nÒÚËKI¤–æxb2\ùjÂ,nlí8ä‘n´³xÆ }'í3[ˆn…ѳky¦TT”rs!à.9ÏéTæÐõ KŸ ÛXÌc’Þ9ü룕7²‚K ¼sÜUãá@tåíÏöñvo~Öc2žÉÓn8Æzw£úüCúþ¿߇õøµØnJ¬K-¼¾\žLâhÏ‚®1‘ƒè;×'}â]Fݵi—U¹Y­o(mˆh ‚0MƒoS’\b»lu4†}N/1g+EhI>æ ½œÖdžÔ ê6ðë)•üÏ,±‹@dÆ-Žƒ®Ú:ÿ^_ðF¶þ¼Êz¦½¨Áˆš¿dKVƒj«ß÷±Ç9÷Ínø–êkOÜMo!ŽQ±C/P €qøY÷>Im5Kho<¤½Š“1nò„C¸Ýœ{Sõ-;T“B¿ŽÿS·DbEò­ d!¹ùÎsŒTÖø%ÊiBÞÒî¿B÷†æ’}ÚI¤y$mùgbIùsW —“ö ûê?þ.¨x[þEËOøþ†Õ©¨_5“ZŽ'óîæN±í<ŒýãÇÝšŠÓ¢+¥iÛ»üÈ·ÜÏ…ÇýõÿFûùð¸ÿ¾£ÿâêwÕ4øïÖÁïíVñ†VݦQ!ú.sP®­]j tÖÖöö{33\¯Fù‡ð~=zÖ¦o¸ÿŸ ûê?þ.÷óáqÿ}GÿÅÕ‹-JÇSˆËa{owœ‚Uék6Ëź=Ü—‘I}mm5¤ÒE$SΊÀ!Álg…Ïz,­÷óáqÿ}GÿÅѾãþ|.?ï¨ÿøº¸ní„Í ¸ˆJ±ù¬›ÆàŸÞ#ÓƒÍW}kJˆÛ‰5;$7 4§QæƒÐ¯?7á@ï¸ÿŸ ûê?þ.÷óáqÿ}GÿÅÔº­óiÚt—IR2ebS–ï_Ç¥%Æ·¥Z]‹KNÊ“ŒC%«œôùIÍG¾ãþ|.?ï¨ÿøº7ÜÏ…ÇýõÿSÚjºuürÉgkp‘q#C2¸O©Š,uM?SWk û[µC†0L²>ø÷Ôü]î?çÂãþúÿ‹©mµ.öåí­u+9î;¢Šuf\uÈ"–ÛVÓoeµÔ-'0­L­åÿ½ƒÇã@ï¸ÿŸ ûê?þ.÷óáqÿ}GÿÅÕ‹-NÃSG{ ëkµCµš V@§ÐàñYZGŠ,ïï/,î.­ »Šò[xíÌÀHê§í'<Ñml.]ßqÿ>÷Ôü]î?çÂãþúÿ‹©¥Õ´Ø/’Æ]BÒ;ÇÆËw™Dž˜\äÓgÖ´«[ų¸Ôìáºl†IÕ\禜Ð{î?çÂãþúÿ‹£}Çüø\ßQÿñu½â ÂâI®íRé`ya‚i•R NO#µOg«ZÜX,òÜÛÆén“Ü/˜?rwe¹àuäúPwÜÏ…ÇýõÿFûùð¸ÿ¾£ÿâé5=f ?6)-e™•^8¤ºH·¡eƒß0çÜõbMWN†ù,e¿µKÇû–í2‰è¹É¢Ár ÷óáqÿ}GÿÅѾãþ|.?ï¨ÿøºµM=/ÖÁïíVñ†VÜÌ¢B=—9«t›¾ãþ|.?ï¨ÿøº7ÜÏ…ÇýõÿZTPnûùð¸ÿ¾£ÿâèßqÿ>÷Ôü]iQ@»î?çÂãþúÿ‹£}Çüø\ßQÿñu¥Efï¸ÿŸ ûê?þ.÷óáqÿ}GÿÅÖ•›¾ãþ|.?ï¨ÿøº7ÜÏ…ÇýõÿZTP ¬>(ƒÌ…â?c•ÊçîÉèMCᎃëW|Gÿ#m¿ýy?ò’©xc ú×= çëú#¯ðÓÿêÎî¸(¢¸(®ƒe×ú³^{â/øù‹þº/ó¯BºÿVkÏ|Eÿ1×EþtÝYÈ>×þ¸§þ‚*z‚ËþAö¿õÅ?ôSÐWþ?cÿ®oüÖ¬®¿ñûýsæµ`ÐOÒª·Z´ý*«u¤vÿòŸþ¸Eÿ¡IWj•¿ü„§ÿ®èRUÚ`W»ŠG<@‰÷…'¸*F~Œj$§þ\.8ÿøº¿Egï—þ|.¿8ÿøº7Ëÿ>?œü]hQ@ûåÿŸ ŸÎ?þ.òÿÏ…×çÿZPx’Qÿ._œü]Mi¾l·'–Î2 3ŒãŒåOjµEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEOVÿ5÷ý{Éÿ š¹Tõoù_×¼Ÿú ©ŸÂÍ)|qõE? ȹiÿÿÐÚ™âßõºý…¡ÿÐZŸáoù-?àúUÙìtëNßQž’æÜb"ÎÛS¯!s·<žqšŒ?ðàý ŧ«ýN*óN¹û«£êMZëPià¾X @É!—¢í^1œñ€9«Zæ›{2ø°%œòyòÙy[b'Í ·vÞ9ÆqÒ»Ÿ´§£Qö”ôjÕh¿¯/ò0ësÊÅ­|u4V¦+i´ørëÔy¿~…€Ç¾1Yzuš=Ã÷¶q½íÍË­ÇÙØÄc“D˜ÆyéœäWaö”ôj>ÒžJÚ[ɯÆáÖþîV<½¬Ic#,ÁÇ$NõÜý¥=´§£Q'{ù„}Ûy•Ý¥ýŽ»u¥iùè€F<¬Fó+)è ÁéXÖZ~©y«µ¹ÔL·1„Kwb-16NaTg¯8ÏZôo´§£S%–¢x\£©Vãƒî 'þÿÌŸ‡áoò<âá£w§éº^™s¦Ý®wI­Ì8r¨ Fžã#š±¥h¶·VÏöèõðÐéÏm$ §¤@#’1挌]v›£éUÃ\Z[Ëç²l2Ë3ÊÁzíØ=…j}¥=›×úõÿ1%oëÓüŽ{Â_¶[Ï ÆÎ‹ms=™µ–AƒÈ@Î8ù°3𿮬¦šÏZÒcÑo¥uª<¶÷&Ô¬h7‚²y¤``x9¯FûJz5iOF§}oýtÿ!ô±çž-M^úêþÕá¿ù&„Ù%¶ž$ŽUIf—i*AÝÝqŽù«ú®‘-×ü&Åô÷•¦·ìÄÂI‘„?ÁÇ$6:w®Óí)èÔ}¥=§ìØiÙÜóÛëYía×ÒûG¼»¸Ô­ZÏ«MÜ…òÛ”!òyÀç5>«¢ê &›³4:¥ŒZ}ùPr†,ÞŸ)‘~¤Wwö”ôj>ÒžMëýzÿ™)Y[úéþGšVŸBÔÍÁžÊ84ÛUòÉicŽPÍ"Žà¼ÿ²knåg°ñ“Jµ¼™îîcûdsؓݠl¤Ó'$t®Ãí)èÔ}¥=õC<ê c«ÝYêm¬#ɪ¨ÞÞÉÃ#yÛ .†1Ž•éuÚSѨûJz5%¢H:ÜšŠ‡í)èÔ}¥=€&¢¡ûJz5iOF  ¨¨~ÒžGÚSѨj*´§£Qö”ôjšŠ‡í)èÔ}¥=€9/ÿÈÛoÿ^Oü¤ª^è>µo_Iâ»r3ÿN9ÿvJ©ážŸsÐÞ~¿¢:ñ_ ?ðþ¬îàû‚Š û‚Šè9]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@Õ—üƒíëŠè"§¨,¿äkÿ\SÿA=5ãö?úæÿÍjÁªëÿ©ÿ\ßù­X4ôª¯Ö­?J¬ãš@Eoÿ!)ÿë„_ú•·©M¦<±·Ú/b·}àœ+g$`õ©àÿœÿõÂ/ý Jƒ[ÓfÔ†ž!h×ì÷±\>òFUs0:Ó[¯T>å ückÒ©ÓµŠ;ƒkç$jQ¥Î6›<ž2@zÏ]ŽöÞíã²¼[‹FÛ-£ª‰r@#6Óx泛÷maq™ù5a|ã‚EltûØÛÞ“RðåíÛëMð§Û^K0 #r>@lcŒðh[^_ðC¯õæ]ÄÖ_b½¸¹ŠâѬ˜,Ð̃x'ps‘Œn¹­ˆÇÒõÊ‘AH÷ÊXdóãw"¢OZ1c&¨Ãs'’H”,H6=Ç##‘SÜè×Xh+ÄÆxd”’pB)oýñUo<;wqc­À’@þí'ˆ–8 yÝÇ_ôÏjzsyÃÁ'[/ë¿ü¦®NãÄ7VÑ+Áç^ÕÚÑ£1"¶Ð ÚŸ0à’+V_h6ó<3kI,lUѦPTŽ óYáëãfÒ[MjÓ®ªÚ„™¶:žŠÄ ƒ‚zIo~ŸðWéq½¼ÿà?Ôѹñ vÍ_Ù×òÝ4^sÛDˆÏgo›o\ð 'TøºÍ<“mi{z²Z‹½Öñ©Ûq“¹üMRÔü5w¨ÅªKc¤]Ü5¸†k{¢Æ5 ’i=ðr9«Öú°ê_hDµ†ìÑj"‹ +î$àcîóõö¥­¾ÿ×þÿ¯Ëþ .›âk]JîÖî´Äf·’xÀY”c%pIèAÁ›­ê:¾§¦XiÍjxeÜ÷³…»¸ ËPXèv¿ðŽî’tÛgŠ\óFÞ9ñI{ \ëSèòëXL-¼Ós†(ņhaÎ8ëTÒè%æ%§ŠLv×cPd¹¶»Š,apäx<ò ãšMGÅ%t+Û«Kyb½´–4’ÚáuÜÊ:ƒx9ÅA…¯l­RÞÆ[eKÏ´éáó÷H!£“ý£†==)óøoP¿²Õ¥ºšÚ=BøÄQcÜÑF"9PIœœäã¿J_×åÿ y5yã²Kƒ£j,ÌÄD]@î~|cèI¬Û»]hÒiö³]ÚßG+˜ãU|¡q÷˜‚Ny¨µMVÕžÎâòÛKœÂ$W²’i -œaó³–=W½2×Ú¦c¢5£Y=Þž²£Ç#²ÆË'£'Ž;P¼ÀÒ½ñ=­Œ³#Z^J¶Ê¯u$Q†[pF~nzã“·ÓšÞIãfQŒ•Á'¡ ŠßB–Kí–°Ãýš-DQd}Äœ }Þ~¾ÕŽwkÿîé 'M¶x¥Á?1(mã‘‘ßÿ¯Ïþ_—ü|K®\iWšm¼76©tÒžô‰µAzôëE¯ˆÏ›¡T¸•<ß;LEò–=ÛrKH{ƒœR>•¨^ßè·—æÌÉiç…‹vÓ¹p»ALæ­&™"x™µ1‹sf-½»ylãÇ>´-ÁìA'Š,ã»h½Û[¬âÝï1䬄ãi9ÏR@Æ{Ñ'Š,ã»h½Û[¬âÝï1䬄ãi9ÏRqŒ÷¬»›]^Y?³´‹»ynŒþ}‘™£ -Í-7\‹Q»–ÐÚÝZ\F‹'—r€BH 0HÆGÖ«kÙ1ù¯ayq ¡y%U„`u',ä V“L¾MfMFÙ­÷gýž1!ly‰à}ßÖ²µß j:µÃO$ZuÛKf!)pî«o'9xþVÎsßÍËúÜŸõ±³uâx&‚ {k«é¦ˆN#µ@JÆz1,@ýsYwZåÜ÷ZöžÖ3¼ÂÊt[Žü¶s“Ø™4]SNº¶»ÓšÎYE”v“ÅpÌŠvte` îx"£¾ÓõK9µ{ȾÆö·¶á§ ì6XÊ£`p:‘J¥¹_Ïúû‹¥~xü ȹiÿÿÐÚ©ø—X}>pá"–õ"˜ì.vs€9Ï¥\ð·ü‹–Ÿð?ý ªŸ‰­o.!Ó¥²µk—µ½Žv‰]T²€s‚Ä óëYÐþ>_¡®+øÕ=eú“§‰4™4Ùõ»Åµ»m˜´l¬‡Ž ¸GïCø“KŽÊ+·šUŽW)µ¼‚GaÔöî?•sך.­¨Ùkwod ¸¿{q§š¥‚ÆÃ,ÌÜžz€Uÿè÷wšŽ›¨[Cqp¶Ë$rAovmä!ñó+:mä3šÕœæ›ø‹KM>ñ<’[LHG† $é×!T‘Œs*¥Îº¿Úº)¶ºˆé×qM+ÉÆ ª‚ON¦²fÒ5 {{²°Ô’È™^æÒD,þkC4…þa× 7SÞ¨·ƒu íÃö3«Û›Xçó›z¿–Ä‚†~pHär(³“TŠ] ]NÒUy ,rM…À‚W±Çn£¥T›Åe„6ÂþëKn³Ÿ& vŸâáNÕÏ®)eMGPð•Ô6k¡%´‘‘Ô©m¤§8Áê3Ó<Õ=ö=F9dƒ-IÞ§÷€ò½^”=/ýtðtþº¯ø&žŸâ='Tºû5×™)O1AÔ:ú©`zŒÓíuí:òý¬b™Åȼ¹ax÷pJ–6=³X–6¥ø\´!ÆÎH§%ÔùlcP^y³Ò¨é:.´ÚÞ›q¨[ß `Že¹¹šõeٗƾQžÛGjo{ ltqx£Gšý,¢»/3ÈbR"}Œã9PøÚO¿j}·ˆô›»ñeØiز¯îØ+•ûÁ\¬G &¸è>×ðÎ…5ª/Ù®È[˜gGYBÇ ÜîN@Á«ÞðäöXÚßé×®lœ˜îÿ´KA ±È$co43¤›T[mbky§-â³ûK®Çó ¶~îÜj£x»LšÂökLÓ[ZµÈŠHž"êr7(È÷ëPkMíÖ­©O £›HkhÛzŒÈYˆ^O¸ç¥V¿Ð/ï"Ó"X‚ìÒ§µ•Ë #º Pyçzg¥/³ýyÿ’ûÊÓ›úòÿ‚jÛxŸN—F]Jy$·ˆæÁ"|Ì Am¹Í^Óµ[-Z–Êo1Q¶8*Q‘½XÔW8öºÅÖ•¥;i&+­*häû<“ÆEÀTí 9±øV–‡g{ý©©ê·¶ßdkÃ¥¹p쪀ÌW#'=‰à §k²Uì®Tñ‹­4ûyಹݱÆ@…—PAlmðNkAµÈ-nµO¶Ý[¥½™ˆaQ÷®áѸÃOsךN³}£C¦ˆ®/¾ÓâLB´¡ÈpÄ6G#€sÅ_ºÒ'{½~IôÙ.àº{v…"™cvØ£,¤°ÚTŒòGJ_gúòSJmr9!±šÒUHî.Öö˜%Flç!A†ã‚F)Òø—H‡Q62^8qù¢¹è¥ñ´bs\Ü‹©G¨ïçeÞ9¤G˜D±¼¯Žy±Í>çEÕΨè1Ø+ÁyvÓ ÿ9B¢;ï%—ïn:sM_‡ùƒþ¿}õÈm.5V½ºm¬ŒyÙïMÃø¸ÁÉØÞ7òܲ2²¿÷J»w#Œf«Ú] sauÝx–Ò­Ä«e;@ Ä`‚x¬itymímµ }:hnaÔâK{ëá#Ï„)÷Ë0 ƒÆOðÕ[¯5­Zîî+2‚=j $C*6ÅH@<ƒ‚FGž´Ö¯îý?ÌOo¿õ:¹|K¤C¨›/œ8ŒüŒQ\ôRøÚ±9¦Þø£GÓïd´º»håo˜|—).ÕüM`\躹ӵ;x/.Úaç(TG}ä²ýíàÀÇNjíæ}*x±R ßo·T¶Ë¯ïˆ¯¯úâ§¥ÊëcdëºwöŸöp™Þ䬱ÂìªHÈ ÀmSŽy5£\pÓµ[}bÖM>ÆæÕ‹ÅöÉÄf ( Jd¶ì éÖ»¢S (¢ÂŠ( _Yÿ‘¢úóýJƒÃ=?ŸYÿ‘¢úóýJƒÃ=?硼ýDuâ¾áýYÝÁ÷A÷Ðr ºÿVkÏ|Eÿ1×EþuèW_êÍyãæ/úè¿Î€;«/ùÚÿ×ÿÐEOPYÈ>×þ¸§þ‚*´ÕÆ­6™¹¹‰rF8'¸¹gëõÀÆo.t—k2…*vŒ‘œsœoaô›þü¿øSX&H·R¥˜¯SŒqúÓÍ”>³ßçÿ¯`#¤ÿø'ÿP5Ô?ݸÿÀi?øš¬ ¬ÿø'ÿP5¬?Þ¸ÿÀ™?øª@Šïs5Ã#"²¬h`¥ŽqÛï~•r¸³¦-™ÙÕ.#tf9 2È0O~TþuÀÓݨ¯ ¢€=ÚŠðšóÿ‰¿ó ÿ¶¿û%}mE|E}íE|Éà_ i¶Z$ÒxƒF7fýT†1¬†9|êÇ9%rzt+\§ˆüöow{¡³Þipd¾÷_> 0ÝÛ€¤'VäŸ%Dâº7³ù–éÔNÎ,ûŠø&ŠØƒïj+àš÷ïȳ¥ל?ú x¢¼fŠöj+Æh f¢¼fŠöj+Æh f¢¼fŠöj+Æh f¢¼fŠöj+Æh f¢¼fŠöj+Æh f¢¼fŠöj+Æh f¢¼fŠöj+Æh fªz·ü¯¿ëÞOý×’Ò¼>µ3øY¥/Ž>¨ôß ȹiÿÿÐÚ¶~ËþßéXÞÿ‘rÓþÿ¡µ[ÖïšÉôÀ·ÃçÞÇ òâWÞ?)Ü~PqÔsQCøp^H¼WñçêËßeÿoô£ì¿íþ•?Œl º• µëZC0·šùbäÈ'9à €{ÓgñZmλ5Ì×3Ãb`JBƒfõs–É#ïc¯™‡‘·ö_öÿJ>ËþßéTt­zRêâÑ­.ì®íÕ]àºE µ³†IpG^ÕgâùÒÛX¸¾Ó.ÞÞÂâuûD Í‘¶1‚û‹cÛÓ}—ý¿Ò²ÿ·úVtž'ÓbÔ®,YÛÍ‚ËíÎØ|¿cž½ÿTŸÆÖ+˜–”É =ËEo³+.á¿æëŽH]Ä ?¯ëîëúûÍï²ÿ·úR}—ý¿Ò³õíMm¼6ú…½ÛćËdžÖC†eˆ þµSSñ•ž—wy –„ÑÙ77Ƭ‘ùƒ= »í¼=¦Ù\<ö–VLÿzH­ÕY¾¤rjïÙÛý+;Mñ:ÕÅ©±½µº†!7‘pŠÐä\1‘Ž¢›kâ{Y¥»†îÖïN–Ö´H—j£÷\üà«0 `÷Íiý—ý¿Ò²ÿ·úV%·Œì¦{+û(¤·{˜çºU4³ 1aÁ(Æv${«[ë$[f»®bΉq’¸$ç‘ÁÁç¥mý—ý¿Ò²ÿ·úTV¤Úœ +i÷–c¢ä .ÎFÖoÖ¹3Å­g6¦º½ûÛG©Ë½òÔà îTœäëŒ õ¢ÚØ:\ë~ËþßéGÙÛý+?Tñ zE­ՅïÙK"µâ"±ÀÏÍ»©íïUuZi×·–ïa¨MCuq jÑÂdó#œ@m¤Z½âÞ40›¤]‹1ˆUô ×?ÙÛý+œñŠÒÚÇT·Ó­¯®n-íYÞâÚ5)nY RÄ‘Î0xŠžßÅ6¶ºdÆðOæÙiÑ^LÄÞ+)åyäåHçâŽÿ]È;]¿ÌÜû/û¥eÿoô®wXñeªiéöY®by­c¼Yâ…$ÙHª @ÉÝÀúVšx‚9µ™tÛ{É̱ÏpŠžTLT6 ,B:Ö‚åÿ²ÿ·úQö_öÿJÈ—ÅÖ1^4_f¼kd¸¯z±!%'IÎz23Þ·ét¸y.ô‹[ø<‹Èa¸ˆœùsDsô4¶Ú]½œ ¬qA ýØâŒ* zНö_öÿJ>ËþßéV(  ÿeÿoô£ì¿íþ•bНö_öÿJ>ËþßéV(  ÿeÿoô£ì¿íþ•bŠâuèü¿À3Ÿô'?øì•WÃ=?»â?ùmÿëÉÿ”•KÃ=?硼ýDuâ¾áýYÝÁ÷A÷Ðr ºÿVkÏ|Eÿ1×EþuèW_êÍyãæ/úè¿Î€;«!:ØÓÿÐEfÁá]Úæ;ˆm¥Yc}êßi”á½yjѳ8Ó­ˆâàwùEbÚøÂÖîþ;(ôûñ;ÈcÚËÊG\üùw ãõ?ë›ÿ5ª>"¾¸´ÓÒ+& }w*ÛÛ’3µ›«c¾Ð ~yãö?úæÿÍk?Tðý¶±©Û\_ˆî-mãu[Y#ܥ؜’{€1ÜÒ]zþ?OpÅF¥i/Ù®¤ÙŒ+I´vÚwã§4Ý Wk­^öÀj±jÅr¥ÊlÈÜH*v|½éÞ´mü:4©ï¤Ò%†Î+”@°}ŸrG"ç.aÔ`cŽ™Ín‘ýŸ%ÅÄ× sypG›3(QÑUG ž=éÿ_׿×õù~,±—P„Å"°ò[.HýðþµÈÂ7yÿ= ÿ¾øWmâ-OO҃ϩ\‹xXBˆ'-ûãŽ=¬Ènìïm–k)üõ/´áq·ëžGoÌRMmq¸ÎÜÖÓ¹ÎÿÂ3{Œ‰ ?ð#þh²Æ$iîm HÆYårq[ºÞµ`—3Dò™dFˆ@ËHÉ=Ëïô®#Rñf©{æ!ŠÑ ðß"‘èzsÓÿ¯C”VáÊ[#N-:iä+:«mgY••xÏ89ý+Í>&ÿÌ/þÚÿì•êöÞÓµ ¼»¹ºÔÄ \ª€ÁNT Îúä×”|Mÿ˜_ýµÿÙ))&ô*tå \óúè¼/¢éþâ’Θßpó]áHã*>nN:dqXÖ7•äv–¨gÎ`$œŸ@ ¯M{Í;NÓ­tøÚkX-##ºBfnYÆ7/±ÎîÀíU§R5[+ø‚×ìò-àL‡±Ç#ŒgÞ H- ÓâfÉ {„¨¼Ž2YqÈ'¯×'¨^$¶¡amÁ¹$‚¡Ò–{›Ä´ŽâXã›å}—>Ý3]ô±ñ¤¤êFêÆ¥:ù—³\ܼ¯§™Óê?Û]ðí¾µcrƒQ»ÍÄŸ1t}Ü…$òã'žKuâ¼~úÂëM¹6÷´R€  ÷pkè¸/e‚¶Þÿg‘J²£`ž9Çùæ±õ×Q¶1\ijڳVç öÎ9SÖ¾n9•Ú¼tþ¶=o©i£<½ûÃßò,é_õçþ€+Ê|Aà»Í <öÛ®mcº1žã¸Çqï+Õ¼=ÿ"Εÿ^pÿè½*u#QsEÜâœ%iTQEY!EPEPEPEPEPEPEPEPEPEPEPEPEPJ>ðúÒR¼>µ3øY¥/Ž>¨ôß ȹiÿÿÐÚ ñMÄ3júï?´#¸0¯,#Pùr;zŸÂßò.ZÀÿô6­o´¿¢ÔPþ’/üj‹Íœ½Ç…µgµ¾Ñ¢žÈh÷—-;ÊÛ¼ôW}îq´óœ6FéSj~½¼øŠ[p5¶hw3|¢=»·qíÆ3]Ú_ÑhûKú-j´0*E¥Îž,¸ÕKGäIe¸PNíÊìÄãÆwª:n‹¨ÙÜêVs-”ÚEìóL[{ ‡™ÕJíÛŒçœþ³ö—ôZ>Òþ‹E´°_¡Ã‡ú“iE&¡]™¼›‰FïžÏj¦ÁÇÞÚŠ}3žkbó@Ö ºÕF‘-ˆµÕyŸhÜØ•Ãh9ï]Ú_ÑhûKú-]Ái±—ªxyçðrhvR 1¤1£ÌH#)çöZ©¨øjòò/,rÀ­$˜ü¥cÚwqÇ>™­ÿ´¿¢Ñö—ôZ·¿PZlbj^½¼Ô.ç‚í-üí+ìI"“½$ÜNî9õÍcÚx.H§%í¾™§[O¦5£›wÉÎL¹G8úýk³ûKú-iE£úüÿ̟קùyj'ñn­o§Ëuaso™qo%Öžîáw„P[ cŒíô5»¢ø^ãMŠPú'‡Vu·1$ð«1<|ãgʤuµtßiE£í/è´_Ÿù‰+_×c#Âú%î%ë\}žÞÞb†+ižH¡À;Š–Èà+.o ksÁ©iFKÓ/ï^âIƒ¹˜#0%BíÛž1ß…uiE£í/è´u¸Î7^ðUþ§¨ßJ‘i· s$O ÍÔŽ&µUÛ•@Œ|¤õxæµîü;wp£á+‹Ë㸉c·‰-ï”ç÷Ñ)WqýäïÙt_iE£í/è´ï­Åm-ýZ„~¾GÕm Í»Ë<‘GhI`#¶ŽMê§Ž¼·OjÐÔ4 Fïİ_ÛÅah±LŒ÷‘M žXÇXÝ…`zrNoý¥ý´¿¢Òì>ç)mà£g­M/ö^‰{m5Û\‹‹”"â ͸¨ùHlàäWmU>Òþ‹GÚ_Ñhé`ërÝSí/è´}¥ý€-ÑU>Òþ‹GÚ_ÑhÝSí/è´}¥ý€-ÑU>Òþ‹GÚ_ÑhÝSí/è´}¥ý€9ÿÈÛoÿ^Oü¤ª~éøÕvC'Š 'ñæã÷dªþéø×= çëú#¯ðÓÿêÎê¸(¢¸(®ƒe×ú³^{â/øù‹þº/ó¯BºÿVkÏ|Eÿ1×EþtÝYÈ>×þ¸§þ‚)‘éÖqjßÇ-ÔÊäHä~CÒŸeÿ û_úâŸú©è«ÿ±ÿ×7þkV W_øýþ¹¿óZ°h'éU[­Z~•UºÒÎ>/Ý ? <Šî³m–ª,|ìç$`mÜAäs^}ájšmäÜE.м²2•“Î<¹Ýö{çµzOÅ]MgÃwØZyNc<ª¯œ üs׌ׇèkü$úD–Ïv÷q¹’BÄ!9$m$w'#¡äT¸Ýé£5Ueʠߺºt=»ÄqE/„îíïnVÒìZµÛÄòªºle1®÷˜¨Îr Œž<ÚÒ‹ØÕíí¥pFsŒ/¿'óï^Ó¬èúf¯£ˆï-ZD ýc39 O,Ø9ÈÉ‚såÚN«cl·3ý–(ffŠ)¾VXÏ `òHçÔô®LÂu(Ñ禮ÿ®ÆØ.YTqnÉŽ¶×5k9tÔX¡’1ù™dn\rÚãŠà¾&ÿÌ/þÚÿì•ÖÞ^A}­¯ö~ÙLÑ…l¡O˜É'“ò“Û°ü!ÕF‘·¥jÄ Ciæ<1†;ž_©Ú,«‚OáØ×£†¤Üyj[ÞN÷ü~v8êMûyÅKš*ÖþïøI´ ¯o¡uÔ.ãýä2.Ö†<œ(#dž#ŽÀŒ©ÏSý›¥ê–¯§Î¨•[9èAõÎsõïÍV±¼¸Õ¬Ìþi–?ÂÛÕpNvàÿ½ÏÖ®ÛZ¢Û,°ÐyÀ?Ëò(ÇQPååÙ­ÉÂÕnüÝÅ\|?2Y\ßÛ^í®ÿ.$çolúžÃŸjÊÓíO•MìóùRXW Æ äñ¸^µÙ@Z‰aÈ“r± Wq éú籪 a=ô -eòÓ).J)îJ€wuë­qT~ëKcÕ¡*u,æ­"Ö;·‘{¬‡;$S˜§_U=úÏ· lÇ#FÛd«Œ‚;äzW?ä‹1åX‰Ü%Oš>¹ äsœt88äf­A©RÂâU{Rûaº ¸mêžÌ'§ÔøµhÊ.èìz>Pñ Õ–•¡Í¨I"lAòÂî3Ÿº£×$vIàSh÷ w¢X\¸PòÛG#è Px¯&ñω·ªµµ³°±·bC‚²8È2 vǓǴ”£ï­LþiKãª=7Âßò.ZÀÿô6ªúõж}(fqæßÇî¦ÙÔ7Þàî^:qš±áoù-?àúVwˆ[½SF³‚ÚwhïæIDGËDPÙËôÏN:óQ‡þ>Eâ¿SÖ_©þ,–/´Ý¦˜Ï¤ÛN`šïÎ µ˜GŽTùƒÅ2ë^eLj.ç6­noqò1pÚ1òuç®ióøNY~Óhš›&“s9žkO$$¶æQ&xR{`žO5-÷…þÛý­‹½ŸÚªÏ—åãßœãÛªÛ_ëc¥/X¹»Ôntëû³»†4”›ÍGF$¸#¬{-{X†Ë[¼’Î;»k;›ö®B.Ì`ù®4Íž ›Uó³æ[%¿•·¦ÖfÎsþ×Lvª¶:ÅõæÛä}:êY&{Wƒæ ý~}Ý3Î1øÑþOóó_‘^_ÚG©\ÚùdÇŸöï;w :•é×OãPÂW{$RÉm¢4«i Ix>ÐÆÌÊ +óû5]|Ó-ìÛP•š;Ÿ1å)Ìà/”yéµTgÛ8­ ï ÜÍu}%†¨lá¿P.£ò’Bíʤ¯J—õýmòçý[üÉ5ÝN#áC¨ÂÓ˜d:4ùNC2ã ƒŽ¾žÕSTñ]ÖŸs©ˆt‘qk¦ª5Ä¿iØøeÏÊ»yÀ÷¥¨èQ^xxhðIäD«#mÝ´!q‘ýÜU{Ï }®=u~׳ûV5Lùyò°›s׿õíCë`KŽÓõÛ™ï®,otô´¹ŽÜ\ÆàHŽ„‘Ëm9ñTì ŒÖÍ%Å‹Z·Ï´ó³`u+£ÓôVÆ…µxe —› ¬§³1 ó~C4?ëñÿ€%çýmÿ³¢jSê¶_j– hѰc6÷^xaŽçhÁöæ¹ËOE¡éºŒó•w—Xš„³×9þ'<*€5¹¡èO¥]_]Ís³^. ·òcAçnO'<œóÅT—ÂEÒãËÔ noõ³ù ˜d# ?:œž8ëG_ëºOë³2u\kZLpéû#¹:Œv’‹kÜ«©¾I”pL‘Í[‚÷WÓõøìq¼ië4éq~Ì"Ì–ó ~|t­GÐîîa²—ðÉ-µâÜîŠ×Ë ·Ž:õÉúSï´[™µ¨õ;+õ¶“Éû<É$jÈ›· |ÓÏ=zS_×Ýþ`ÿ¯¿üŠ÷^)ŽK‹;}-uI.Z@.¢lœ° Îã kɧ]k“Ï˵¹·Q›z³º€nIúõâµ'ÑÒ]cO¿Ö!h%Z§ßÞëž1JÍÕôš jæY®^dQm i"hñ´¨ÝȥР¯kÚŒºN§cs§­Ô1A:ùW^``Ò…ÆvŒ­O¬ø—R‹LÔ-ÚÐXêvâ dâDtyðÛF:xª¶š>¥â­RKÛ‰’9`‚ç–ÄÛ’RBç³g98ëÇJÞÕ¼0ºµÕìÍvÑ}¢Ö8*d£#— מHãÛ­>Âïývÿ‚kÙIw-°kÛx ›')ÆEÇo˜ªÿ*±Ul"¼†Ø%õÔw3dþò8|¡M¹?έR (¢€ (¢€ (¢€ (¢€ (¢€9}gþFˆ?ëÍÿô* ÿZ›Yÿ‘¢úóýJ‡Ã?Ö¹èo?_Ñx¯†ŸøVwP}ÁE}ÁEtƒ.¿ÕšóßÇÌ_õÑz×ú³^{â/øù‹þº/ó êËþAö¿õÅ?ôSÔ_òµÿ®)ÿ Šž€¿ñûýsæµ`ÕuÿØÿë›ÿ5«€"~•UºÕ§éU[­ 8ÏêÇG†ÚsšÞIà†æ6Ë-Æå`AqÔ`ôõæ¼ÎÇHÐ|} |b‚Ü᣷…V[‚¥””p¤…ê 9çµzޱö<•Fù¡u 9ކ¼Ûû'OÄÃìP9ÕÜ”ÈÎ0‡©à`P›M²šHè¥øy©ièÚ5 †';Dòç¦H`GÊAíßƒŽ¼Ž»¡_ZXG«Þ4ŽeœÁ#KÃoäþ=^sô­kxÒÕY`@†Òê?Ïôô«Ój—·6XÏ7›kŒ¬R(e;>è90èsžù®¬.#ص6½äÿ¯¼ç­KŸÝOCˆÓVáo–{x'”[6_&=åcy Á<œVoÄ™d‚]"X¤häF•‘Ðà© ö5êQøRŠÄØÆöéfUÛ­¤B2­œ»qƒ“Ÿ­yWÄßù…ÿÛ_ý’«ŠúÕ_hãm,*%kÜOxú-1§µÖÃËĦoµíóHØ _'$`g#-x$ñëA’æÑ'Óf‰¢*Y'ŠD‘i¶ç!€ÈŒs‚+æjè<+âýG—ë5©Ym‰ýõ´˜*êqœ§åAœŽ+ŠQ}˜µ³=ÙƒI§ ¶²‰îD‡rnp;[Û`Ôm¦\¤í ¶òâšc¼Cón¨3ÛÒ¬øKÆ:7ŒmÉGz#âÒ\îsÔ7ñ.OQþÎ@$ é|µòŒŠä êGo­^wÔËÛÉK•t<ïRŽø$÷v¢á£Æ^9SÀá±ß<ŽG>µÄxëÅP\[,|̳ÞG¶ù8HÛøž{ç¯Pñf»gá½"[Ù·3õq+m.äü g ÎOà1ÁÅ|áuu=íÜ·W2'•‹»žäÖt—ºÓ[þ‡lñ Ç—© {÷‡¿äYÒ¿ëÎýW€×¿x{þE+þ¼áÿÐlršTQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEzo…?äZ´ÿÿèm[ÞDÝýM`øOþE›Oøþ†ÔÿL±I¢n‚)wêq ó7|„†ù†çë‘íB[ n÷lÛò#þïêhò#þïêk¸ñN¬–·ÚÌVöGG³¹h&Ý纣ìw £œáprZeöµ&—qâ›»;[aqÚ…w |Âê£/óvÏlPµ²ò#þïêhò#þïêkHÔõ6ÖîôXZ<ÑAÄsZ£"²1eÁV$‚ ú÷¬=6÷_ƒLñõ´ö³Çowva‚hœ•níàmÀÀ£ü®çc¶ò#þïêhò#þïêk—Çjš…ÈX£kôϵÇ/9yB‡Ù×û®‡ñ¥_xŽæ+×¶·Ó•´ÈPݤ¡ó,¦0쩃ò;¹¡é¸-mn§_äGýßÔÑäGýßÔ×7â-N¿ÿi-²Mé«ÙÆÐŒí ñŸ^ÕOZñ.¹gs®Iežm4„Þ9‘÷Êw0l } MÁk±Øyÿwõ4yÿwõ5ÎY뺅¾£ye¬É`¾]½ŽædE\C†cÓäÎÓüo0}L^ù71ÚX›Ô–ÞÖ[}ê vÉœöÃŽhþ¿¯¸7þ¿®çiäGýßÔÑäGýßÔ×/Š5­"XeÖ"°ky¬'¼Z£‡Ë v–,Cgv3QØx¿[ŸÍΚ.Ù¬Þâ%†Êâ’(FZA‡Îx+Ž9=?¯_òïý]Î×Èû¿©£Èû¿©¬o jÓjörÉq{eq"0 –мM Ç*êìH?•bèúž£aeâRæâ)´ëK˶òLlfùO9lÛhzoÚàµÛ½ŽÏÈû¿©£Èû¿©®nËZÖ`Ô´Û}b+§˜~Ê]W~ÖÜNî3ÈÇ#¥QÓ¼Q­5¦—ª_Ç`Ú~¡p-Â@޲ÂYŠ©$± 29àu§ml.uî–ñíÞUw«¹±“è=éþDÝýMq~'ÕÓT\z^õº‡V„wk,h‡ÇP7CV$ñV¡§[j¶÷ööÓjVOD`Ü‘Mç! ’W9äô¤µWþº˜=¿®§YäGýßÔÑäGýßÔשk½µ¦±¥êfÛí?ÙRÝÛÜYA€ CA‚yöª÷²kÉ¢xouý¯Ú&½€Fé ªí11ăÌËþb…¯áø»ÓñüÎãÈû¿©£Èû¿©®R]sÄ-&¤¶‰¦È4•äÈŽ¿h}›ÈA¸ì#“»šKj××p¦Š¶Iék¨ÿ¥Æì['„ùXcëÍëýwýß×õêužDÝýMDÝýMrº'ˆõk«Ý#íñÙm^Õ§ƒìêáâ*¶±$†àõt®º›Vw#ò#þïêhò#þïêjJ) Èû¿©£Èû¿©©( üˆÿ»úš<ˆÿ»úš’ŠÈû¿©£Èû¿©©( +Ä©âËp£ìOÿ ÉU|5ýjçˆÿäm·ÿ¯'þRU? Z硼ýDuâ¾áýYÝA÷A÷Ðr ºÿVkÏ|Eÿ1×EþuèW_êÍyãæ/úè¿Î€;«/ùÚÿ×ÿÐEOPYÈ>×þ¸§þ‚*zjÿÇìõÍÿšÕƒU×þ?cÿ®oüÖ¬‰úUVëVŸ¥Un´€ä|pŒö˜Q“ºý­\'‘'÷Zõ‹ßøø—þ¹Eüå¬+]\Á©].DRR%ÎXœ£Ü‘\u±n”¹To·^汧̯s„ò$þïëG‘'÷Zëïõ™¥¶…,⹆á®Å¼±íÍO·ŽÎ@䌷§j73ß\ÚKm)XWÏ;ð+Øo½’~èÅgõé%~_Çþ^É^×8_"OîþµÇøëú®³ö°ZùÞW™¿÷ЏÎÜu#Ð×´¦°Éy¨¥Ä ¶ÖÍÂãjŠÄ›q<žƒÒ¬Xê‘ÞÌЛyíæT@,§£ þ"“ÇÉ+ò~?ðØ®çËßð€ø›þŸù?þ*ø@|Mÿ@Ïüÿ_DÇâ–¿1yÖ2Ÿ¶5¿Ù0PØß÷AÉàUäÖ’5ØêîvšeXÑ0Ø=ÀÚ8''Ч’ûüöK¹ó\^ñT$ÐØ&ÿ gþGÿН_Ñ­å´Ðôûi×d±[G®AÃŒzì.u›ÕG{híÊÛZ%ÔáÁËîÉÚ¸0HçæÆiÑk°Kx 6÷£Jð¤îc:g `ät=@éKëòµù?øìWs¢ºØ¼Cg"³¼sÃ’Ó¤² ,kÕ—žã‚æ›a©Ï{­MA=¼+lŽ±Ìª %›æàžÀuü©ýzZÞüö+¹ÊQ]JëkØ!»¼‘圈€¨°ˆ Œw4è5¦¹Ô–(mÞ[G¶Žu•v›‹rÙ`q€:zÑõéoÉøÿÀb»œ¥ÖÃâ9;Ç<1y-:K*²F½YpIî:€y¤_@c5­Ü £„‘Ws‡%Wh y$c}zÉøÿÀb»œ×z!?dº3ùÿg6ø]áöîþöÜcœæ´‰‘à܃d…rŒàã¾ò©y‹[Ãñÿ€5A>§ŸÑ]n¨Ü_IyÇ–Z bh‰ÈÏ(Ä‘õïPéÚÛ4ÏÜSü×rÃÁUòÉ ÛWƒžƒƩ㥪äÛÏþ½ŠÞç1Eu²ëñAç,öwqËR#`™3mpØëêE/öôI&Úä\ ¼³m_3~7c®ß»ÎsŠ__—ò~?ðØ®ç#Etz~¼î<¹mîe¸–y¶Ä¡"+㜰dt$ÖÕÝÔvVs]MŸ.$.Ø8K(»8~?ðQO©ÁQ]ö»4RY(k}9'Y {ðÝÛŒmp9ϯjt:Ííä1[à ]܉¼Œjˆq¼ ##¯Z¯®Ê×äüày Ù.ç5EtwúµåŒ–pM}¦@ò‰KÏ*W<úšÓÒ/_QÒຑ@x\àà‘‘žÇZRǵn]=à QWµÍ ÿȳiÿÿÐÚŸ®Ú_j:®‘‡ìÖ×Kw-ÓH¡FÐÃ`\î$ävǽOh Ã*¤ú˜K¼‹µK-â@c\,~c„MïÌzž§Ú»©Ïš1Ÿ£1’µÑFXOu+››Õ´šaq5ŠÊIrF3Éö©¯³£C­[×íË™5ð„KŽÂMSS‘`‘$¶™åO2Ü Âí!qÓ˜ÓóûíùÑæ?÷Ûó  ©¼k9¶§©©¸ŒGw²e_µÇÏ…ëŽ2»x­Ðlã¿7qïŒýŒYÔ€‹9ëøÔžcÿ}¿:<Çþû~tZ×ÖvŸÙ\“Ÿì¨Z70ù”¨S»ŽNlVÅf%âI4Çp­,Xó_%222;dSÚb‹¹¤*=Kb†î…CÌï·çG˜ÿßo΀/ÑT<Çþû~tyýöüèý˜—‰$ÒC´±cÌE|”ÈÈÈí‘Ryýöüèý“w¨Eal×7S˜áRbO8©?˜ÿßo΀9¿ÿÈÛoÿ^Oü¤ª~þ¦¦Ö‰oÀI'ý úÿ»%Cá¯êkž†óõý׊øiÿ…~lî û‚Š û‚Šè9]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@Õ—üƒíëŠè"§¨,¿äkÿ\SÿA=5ãö?úæÿÍjÁªëÿ±ÿ×7þkV Dý*«u«OÒª·Z@PºF’êUE,|¨¸=å®e|-~úJé—7ËlŠ»² ‚¤NX‚8äcšìmÿä%?ýp‹ÿB’©Oâk85ÔÓŸ•æÏÊŽz)úþ™¼sTÂóÏšöÿ€i–V±‡oá¹`KaåCCq石YùJÿ!\c'žzÕ˜t‹Û}Râæ7o"à‡’'pP¹ žŒWQ(ÜðÆI #á°qÆÒ¥MöKoù÷‹þø“À§¼¿"½¯‘ÅMáë™§¾ÜZ^¯ïbòNàÛBå[¢­noÁ¶ò8á¹”+£:Ü%Ûܤ¾Ià3ÈFy?Z©w¡êvOú|7Üoœ’!R¡dmØ!zrn•è_e¶ÿŸxïGÙm¿çÞûàSX+} ö¾Gká{¥Ó YÖItô³lDHRe½þ÷Oj™ô]VÔÞËa)tÈGƒ‘ @ †Îàk¶k{DRÍ  d’€([{GPË ¤d€‚(x+»¹~[t9¹¬.'³’I2ñ”-°÷Î*…džVêÆ(d[‘,Væ–6‘8 ¤dp v¿e¶ÿŸxïGÙmçÞûàT¬½-¤Çíßcƒ›Â· Š æ‰$·[kÑ2 ÏBNTòFyëíRKá©Þåö<‰g,±Í,NK2clð>UÈÁéÚ»)bH%„Ä¡±FUå'8ü*Z¯©{ò'Úô±ÂÉáiä{‰iÄ—i$w,#?:‘…g½º÷õ©`Ð/“írK17À WŠØ¢ àíÉÉç×ò®ÖŠ_Qº·7à‡íµ½Ž2ó@ºŸJ¶°·>Tpì ë"¨û¤8Î;ö«éwwZT¶w[‹KFÒC @ã€IþuÕÑKê ý U­Ðã¬4;«{™nnOŸ,‘¤»·1¨UÎ8ÉÉç­Aqá»Ë‹«Ÿß2Ú]H’K·;ŽÐ£³À;Gjî(§õoÍø öºZǾ½†xç¶™’T–f%í˲6â¸Èä`sŸÂ¬ßè÷—7\Û;Ab©8#Ÿ”üÇÖ»Š)}Gûß‚mäyüû%•Ϳ٢’7¢C˜Žr«çþÞ ‡Ãº®¨.Ϋ ¦øâŽ-Ð.rŒ[,¡™HÉõçžz=A{+Ac<É÷’2Ã>«ê\…í<ŽBßÃrÀ–Ãʆ6†ãÏ?f³ò•þB¸ÆO<õ«–öz§ØåY· †y 7—ŠXíàc8®4¨Y¤šåœŽOœËŸÀ)²-¿¿sÿþ5¥¼†«[drö:Eå½Ì÷WNÓÜLIH js€O©ïUÃW†lKpíj·r‘%¹VÄ‘–ÉÈöµvÙßß¹ÿÀ‡ÿ?²-¿¿sÿþ4þ£­ù¿ÛÈàmü<˦vÆ»£´(Ͳ@ùs¸îcŒgŠ¿?‡.^æ[¨d’;ƒp³ÆÆÁŒ!gF}:×_ý‘mýûŸüñ¨æ³K“C$ßë^BÀ†`½þ¹ü)¼nî_{UØâåð­ìÖ_gy–•åy>Æw+3g1ß!¼Ö”:›XKà™ÙŸk4[•T±ÚÏ®²ŠOš³—àV³½ŽÏÂ’[Î’KûÄnaKr‘áÂŒ*äí/Nzšzønò(m|‹‰VâÓrÃ+BXygøgœ9Èé]ÅÞ ûËðAí|Ž <1¨Å$sÇr¿hW•ݞ̲7™ŒáwŒco©­-3H—M²ádïgfòö‚X’pAÏJêè¥,2³—àU¶¶+Ù+%¢+Ï{šÃñÄI£„ÙûÍF$mÈ­Á Ó#ƒî9®’¹ý[M¼Ôµ=7i,mg[—bÇÌgPÀ(Æ9çð®ÚqäQk~Rw»õ0.u­`iÚŽ½ú$wm°òT«¢>¾öãÔ`ã§íOV½´oËk"E,/j±8‰2»Âƒž>n½óŠß—ÃZDÚ¾’ÌˉÎÁÇF)¤û‘šš}N¹û_o»í…†ò˜ÛÐñŒ•Km­…ÔÏÒn5 Þi7·Íz‰mÄSzù×rœ펵¥­]ß>³§i6W_cûJK,—5vÂcåPÀŒÝÁàU«éW/lïkµ­PG ŠGj |¿)>£¤ØêÑÆ—°ïòÛtl®ÈÈ}C)~‡þdœf¡syªéö¶7W9šß][CskûÀ ÛH+žFF1‘[>+­¼4/3LÈñ#*©oÞ¯8Pä+Z= LŠÖÖÚ;UXmeÄ¡ˆÃŒüÄç$òzç5föÊÛQ³–Òî!,Œ:FGÔr)ÞËúò_ë»9››­Y¯¼I–¨n!{o/li¿iP[à3c8ÜqT¯î[SÓ´dS»k„ÕÖ7šh9¡}ò”Û·##·zê[@Ó.Å ûFÏ5–y›`ÂüÁ²0cÏzþ­#û5¬ ¦mÚ_8æWÞdþöüîÝïœÒ[ýß t2uk­SJ¿€Ýj7‘iQÄ»ï"·‰÷I¸çÍ~UÆ9P^kGÄW÷VɧÛYL°K}t°}¡”7–6–$Á?.}iÒø[HœF³A4‰…÷R•`Fá» Ï÷³WïôëMNÐÚÞB²ÂH;I ‚:G Q@V¹w|Ú'ˆt‹Ë¿´µ©·Ûs媳,Œ>VmÈÁíÈ#Šéo-åÒü+¨r×2%¼®X£Âp ª…#ð©£ðæ•-‚Úÿ£ÌâIA‘‹;,Äî'Ôö«÷ñ]ÛKm:îŠT(ë’2¤`ŒŠOTÒz¦ÎA®õk»‹k[=LÙ*héwˆàƒ>qÈ+Àö¥Ñµ}P\è“^êh·Õmg¡D²ª·ÊTdŽHç5ÓG¤XÅ0™ ËqjöÿT:/_×­6-O„Xˆíð,c1[ìv)Éç€:橽[_Öÿð Kkÿ[Á93ÄòkÖ`K}>›}ÒD×PE!Få1ìù±ïJe®¯¬¼­.¥¾JãkY¤)±£°±¸‘´sŸZ謼1¤i×qÝZÛ:Ia3ÈÉn»T±UübÚøJq¯ZÞÉmei´í8[k‰_{GÜ`:äã4»XofVÐuŸêrØßˆ.^Ö豕8Ѓ´£ó îóÀ­? _ßIy%¦±wr5//{ZË,`g£e2ò$ŸZÒ·ðæ•ix×VöïŒX•Iœ&[© »h'>”ý?AӴˆ¸µ†O9“g™,ï+Îp “ì(@ÎwUÕolßÄòZÈ‘KÚ¬N"L®à “ÇÍ×¾qT|G>£ ž«¤]ê v«­ÄW #¦é‚v€§îäq]”úsö¿:ßwÛ 4ÿ; å1·¡ã)nô]:úK‰.m–V¸„A.æ8d1ž9$äsGoëúÔ‘{&©¡¦èêÒ‰.VY¤½’Ì›SEBçæëŽ‚­ø{R¸¹´¾KéVY,n¤·iÕv‰€w`p;Š•ü3¤Ée£ÛÈÑÄæHÙ®$2# »püêí–Ÿi§Y­¥¤  Ÿsœõ$žI>¦€9M'^¿ŸÄV(&¾›MÔW‰®àŠ1ò€ÊcÙócÞ•s^¿Ôl5xåšêæÏFX×3ÛÀ’€ûŽD»*¸Ç w95£eá#N¼ŽêÖÙÒHƒÁžFXÃuÚ¥Š¯à*Kÿ麥Àšò%lWÏ#r7 m­øŠ;sÕ5kË6ñ<–²¤rBö«‚$ÈÞxùº÷Í%þµ«èSj62_ ÙVïoq§;¸R³Gq,À*’r]ðÙÉíŒbµî|5¤ÝΓËnâeEÌŽy™G@ÅXnüsGaw2µFwñ«H›رeÎpvÉ‘Lð×õ5.³ÿ#Dõæÿú •†ºŸ÷aG⟯èŽÌOÃOü+óguÜQÜVç ˯õf¼÷Ä_ñóýt_ç^…uþ¬×žø‹þ>bÿ®‹ü躲ÿ}¯ýqOýTõ—üƒíëŠè"§ ¯ü~Çÿ\ßù­X5]ãö?úæÿÍjÁ Ÿ¥UnµiúUVëHíÿä%?ýp‹ÿB’šú‘$#éV,ìK35ºO©8§[ÿÈJúáþ…%aÜøªþ hécFF¸.1ö¢7©èßs¦2O¦ 0:9N.-?ë©ÿЭJà‘=–zù§ÿE½=Ÿš@YÜ=hÜ=j®ú7ЭÃÖ‘ŸJÄ­VßHÌJ‘’2:ŽÔ1œ¼zåÞ«áíeof´Žu²µ’Dé4iá·˜{€C«¨ÙèÑØê1Ù\Aq¤I,>R:ãb «åŽrr­Eðäî$¹¾½º–kfµó&tÊFÝBíP?š’ãA´¹ŽÝIÀ‚ÖKEÚÔu Iã®Pö×ø·_×b—öƬ ­–––*iivDèìm‹†u9©têw7šWÛ’Ïìú¥»M¬"m¬I!¸=@*ä:=´7 :¼Å–ÌY€HÆÀsžÎ)-´K[S¥ì’cý›Eæ0*æã“ÛM«·ýuÿ€JZ%ýtÿ‚k]7ï-?ë±ÿй=TOm­ÝÝj÷¬ZvPÛOg9Xa\ ùмç9ä‚0{WO;f[?úìô[Ö~£áÕÔÞa>©¨‹i¸’Õ%Qãîîû•¹E½gY7ú¨ÓÖÁ­´äG)*¾ùMÇ ò5±â··±·»°žØ3Ú £m-´²¹R22PáQ’1N>’ïZÕžk›Ë[,vò¨Y&<=;¿{á{[¹¡º»²n-¤[fP¯Î §¦O#i¿/ëúПõ·ü­j:ôšRZÄM¢]Ë%Ò³€;T#ž9ªWz´ÚdÞ#¹‚ÞÛí05²ï!±!e,7vÏÅkOá»wki-îï,ç‚n&·u ñŽŠÛ”ƒëÒ‰ü7ir—Ë$×í¦#+n\æû¤±¹ò%dØÀw®~b¼gµd¥ÔZÍ·¥Ø_êPXMÄÓ3\:Ü‚ùlä–f9ç°í]F¡¦I¨Å—©ßX”mYìã®åj Þ°[;{iîíe´wx®¢”yÛŸ;É,;³ÎE$ _ÝÜÜéWÝNóÉgy5¨™þôŠŒB’{œ`í[õOJÒí´}>;;PþZ’ŤmÌìNY˜÷$’jåSªš—üz/ýw‡ÿF-[ªz‘ÿEAÜÏ?ïâÒ3ÄZ¬ÚFš.!X—YÁ*ƒ“¦>¤W%ÿ Íÿü÷±ÿ¿'ÿŽW¡Òäú×=ZU'+Æv:èW£N6>gÞçÿÂsÿ=ìïÉÿã”Âsÿ=ìïÉÿã•è™>´dúÖW­ÿ??ø&ß[ÃÿÏ•÷ÿÀ<ïþ›ÿùïcÿ~Oÿ£þ›ÿùïcÿ~Oÿ¯DÉõ£'Ö«ÖÿŸŸ‡üúÞþ|¯¿þ›¡_I©hÖ÷r´lònÉp¼1 ŸOZÒº¾·²0 ‰ åÇ…'.sÀã¡äñIY>'¸žÞMC4‘ùšœQ¾Æ#rÙSŽ£ÚºàšJ-ßdpM¦å$¬µfýW†úÞâîæÖ) MlTJ»HÛ¸drF•ç×šÏØ5]`ëQêÖºƒAŠÎDxHÌ]róœgœƒÅZ×5 èÓÅ¢;ˈŒOf±l”ƒ`»¶ÿw9=)­Uÿ®ŸæO[ýÌhÉ6›âÛý%o.î->ÇÊ ©šVF,êpÍ“ƒ´qšÀ“Xº›Ävwö-s¬š¯Ø¥ê,áÀ,¬>ÎFÔ ûsBÕ¥ßüì—ù\î®5;{mJÎÂMþuØs@ ÏçRXß[ê6qÝÚ¹x$ÉV*W88è@=«Z`ž6ðáf)tOS±x®r9u+Ÿ èÚ„—·SÛÅÏu wío<Ÿ7 ¶ÐÊHŠ:_úê= ]@o  ™>Ð#³óÎ3LÔÕÂGö Sƶ—Mwu 2hÐÍûSÂÒ0Ÿ›nê2zÖŸ‰&yuíLšú{+ •™¤’LM#¨SxäucÁçÚÛçúŠÿ×ÈÝÔu+M*ÐÝ^ÍåD.v–$“€’O k6)¥ NI$KC™áua–Ú2„nûW ,’êze¤÷—Ñxˆ[Av%+$‘€Ø;×I‡¥t¾*ó4¯N,înQâh•e3³Iƒ"ƒ—''‚GZªÿÖËüÆ÷·õ»_¡ÒÑ^uây$þ-¼TÔ “LŠ'¶XnYc_Ýî9Lí9>¢®‹Æðæ©©$·š…ÕŠé"õ’iÚWW AØÌr2?Sëåp·õ÷™ÜQ^meªjúlÚ¸ˆÈÊ4ƒ{ošƒ^áÁ Ìê28¦Í{q¥=¥Î—¬^j3O¤\ܸ–èʯ"ª`™ÂòOJoM®¿ämýtÿ3Òè¯:Ñ¢×®-šâßW†8®4÷&YuFºýélJrôâ·|!t»¯tù¾Ø/­¼³8žôÝ)Üž‡Œ zS¶¶î®t—Ö÷Âco!q ­ åJáרäsõS§º‚ÔÄ'™#3H#Œ1Ææ=÷à×5ÕåÕ©·kûÄY|JöÌÑÎÈâ.~@Àä: ©¨« ±¤ÝßÝÉig¯@‘Ï-à QØó3»«psži-mòý?ÌoKüÿ ÿ‘éÔWv"ŸÄK¤Ï¬ÞZiÐiâh;ÖF™·ÌÒg-´Á=ù«šF¹*ü=Ƥe˜Åo#³ Úò¢– ÃЕçÞ•ô¿õýh {MÃxNêýƒS·¶»Kûˆå‹Î͸†å£]£*Òó’3Î ]®Ÿæ+ÿ_ùž#ÿ‘¶ßþ¼ŸùITü5Ôÿ¼jçˆÿäm·ÿ¯'þRU? u?ï硼ýDvb¾á_›;¨>࢈>ࢺA—_êÍyãæ/úè¿Î½ ëýY¯=ñü|Åÿ]ùÐueÿ û_úâŸú©ê /ùÚÿ×ÿÐEO@ _øýþ¹¿óZ°jºÿÇìõÍÿšÕƒ@?JªÝjÓôª­ÖÛÿÈJúáþ…%Y0DgYÌheU*oÌê3éÀªÖÿòŸþ¸Eÿ¡IXw^!ÔâñHôËÆÓc>[âÒB\÷pqÐzwö¦EuÉ-!Œ£nWOÇ©VÅÙÿ–±Ÿûr“ÿŠ«rs=°ìdéÿcý)׺ŒØNX‰–öŒüÇ8Ïå@qwÿ=cÿÀ)?øª1wÿ=cÿÀ)?øª×ͤF.ÿç¬ø'ÿF.ÿç¬ø'ÿZù£4‘‹¿ùëþIÿÅQ‹¿ùëþIÿÅUËíJ =­„Û³s:ÁÑŸ˜çöàÕ¼Ó#óÖ?ü“ÿŠ£ŸóÖ?ü“ÿŠ­|Ñš@f[ÄÏr$ž`ïùb1žø$’{UÚmÖ<ÛcßÌ+Ÿm¬ §S¢Š(¢˜ÒÆ’$m"‡|ìRyluÀïO Š( Š( Š)©"Jãut=NA QE2Ic†3$²* êÌpã@¢Š(¢Š(¤ 0 ŒƒÔZ(¸²„ +N t q èqGØâÿž—?ø'ÿV(  ÿc‹þz\ÿàLŸüUc‹þz\ÿàLŸüUX¢€+ýŽ/ùésÿ2ñTä´‰?ï—§™+¾=Àby©¨ Š( Š( Š( ³õ--µ=SOžKô[;9DâÝcùž@¾zsÓºÖ…gÜÝcû<óy²ˆÿt¹ÙŸânx^:ÑÔ:OÒä¿[÷³³kÅ[†‰LƒèØÍ:K=>o;Ͷµ<©—tj|¿ww®1ÆzT5^£-ÕÄg<’£ÌuÂI‘Ÿ”çœt4¤#µ-r; C(qPrzã$ñïUN‘£ÿ·:ÀÞgwÚ<”ó3ë»ÍP™¡³¹hšx •¢mñ™1Fõè}ê¬Ú.‰q1O¦iòÇ|¤x„yäíqøRÑ@]iÚ]ñ„ÝÙÙÜNb2įåÿ»‘ÇáR^ZØê/`·¹„œ˜æEuÏÐñUꆙ©¦§Ó¤l‚ÞæKs“œ”8&€5…¥€†E½°Š l]±‘ШìGµ>xín¡0Ü$3DØÊH)ÁÈàûÖ>©&±¥AmÌ Ç$`‘ý*Y¯íà¿¶²v"{íã¨\gŸÄSAí4ùEÀ’ÞÙÅÈpȧÍ`þ÷sN0Y™ŒÆ( ¦?(¹Q’ŸÝϧµV¢ o¤izzÌtË;¤R¦H`EúgÏ=«#Fð¬Zv³ý©qqbó¬m-’Û/ÌAfl1,Üþ¼VÅy€‘hÚ$-;E¦éñ›…+1Xy€õ Ç#ëSYXéÚdF+ [[XØä¤¬`Ÿ\ Ëš|é^QÜ-…Ç™ž1»n1Wèo±iãèÖ¼MçݯúÏïÿ½ïÖ’k 6á'Ií-%K‚ Êñ« H³×¾•K¤hÓÚÃk6a%¼?ê¢xP¤î‚0? »ûŸ+Êýß—»xÆ=1éT¨ YiZF™#Éaachî0Í)aî@æì½'ûCûCì6_mÿŸŸ%<ÏO½ŒÓh  ¾Å§Œ£Zñ7ž?v¿ë?¿þ÷¿Z©ªi‘ÞÙÏ«XÁ-Ã+LÓÚ¬Ë.0ë‘»€9'µUÖu5Ñô¹oš#(FQ°gsþµ~Ž€ghžÓô»›{itnfJ¢Ù#ˆP±ò SžsZréšL÷É}5”—i³¼Hd\tÑM¢€-];KžÞKy¬ìä‚W2IÄ¥]ÏV ŒïU/4kvÑÛNÓN²‰›-Y¬‘0î `¨9â¬Q@ú†lt› »i¾ËsöÉ<ÉÑmÒ8OXÆ@ëZöV–tE½µ¬9ÝåÀŠ‹Ÿ\ ‚Šç×þ¸§þ‚*zjÿÇìõÍÿšÕƒU×þ?cÿ®oüÖ¬‰úUVëVŸ¥Un´€ŽßþBSÿ׿ô)*íR·ÿ”ÿõÂ/ý Jçî¢ñGü$"ÒùEœ§ÌYÄ1;©ù~ðè=r­0:yN.m?ë©ÿаüf‰<:DO3­©D ‘¾Æ^¡í[7lö\ç÷§ŸûfôËËkkèL7vðÜEœì™®~†—T3ŸT»Óìµë{-Ji­m¥·Hîä“Íh7$Îs´óœfµtB¶¾+¼²ƒQ¹»¶QKûû–›Y ’qiIezcÙØ%½¢•Â1ŒõÊ XÖ¹Ó{‹+Û(næÚŒc° A“€Šã’NI$Ó[ÿ]„Ö†‡Š¯%†>º{K{›µ†ââ6ÚÈ„€ßÒϽQ¿Ù¡¤é+ªÝŧÍç3Ïö¶2Hë‚©æ“‘Ôœgµi[ÚÞɱj×6—Ð8Ç–¶›ã—lÔ¿ÙzoؾÅýŸiöLîò<•ÙŸ]¸Å 9q{$ÖºzÍt×[kâ.dl™#à–ï‚HÏ|Snõ ±jZ©Õ®cÕ-¯šlÄÄG€áV3Fܼçç"ºö´´{UµkXÝq¶#(1Ó¦µ‹Þ­ãÙÛµÒ𳘔¸ú63M?ëîÿ/ÄõøÿŸàsúŽ«4Åñµì‘KºÉl¦R Tç˜êÎŒ²_øŽú[‹ÛÂ-ßʉncù£Éʃ†Éõ­[½7O¿‘$¼°µ¹tVšr¿BEXŠ(b‘äŽÑäÆöU¶O| 4Mtß¼´ÿ®Çÿ@zæ¼Y,ãVÑmãþÐx¦i¼Èlgòð€Žw/N½k ³-Ÿýv?ú-ê¶«¢ÇªOiqö»«YíKä·*Ì0s¹HéHhæôÍnâËL¿Š{æ‚â+Á0ê1¼ó"2‚„9rpÄ`ž;œU›o^]é0yP@u ¯šÉ +¤yPIr§æhû§œÕïøDl¶owßló„ÿmóA›pR£’6ãi#ÅH¾³sZ=ÍÛ¹¹7b丬§øùcš~¾_§üz[ÿÀ1|CªO¢jzæ¦ašt >Φ4bB…1;G#$œ Ö¹Ôµx¥ÓtØÅ‘Ô®‘å’R­äÆ«Œàg,~`:_j³ÿõ¼¯l÷—W7­Ê Ü;Ä€Œ1ŠÎÔt&´²ÓⱋS¹–и†x."YbCü9|\``‚x^ßÄ:ÕÛÙÙÄ,î[‹˜d•¢r˜„ã!wÏÖ­]k:ËÜj"Â;#˜ MçÌϰ9 ƒòŒÉÏ4¾ðÛÙÁgs|òý²n% æÿZy qÉŒ æ­ßøfÖþêyþÕyn.T%ÌvòYÀù² éÆA;ÿ]ÁyŒ²×žÿTX£´šlw©wå‰<ã²ìüC®j¢Í,†Ÿ²iËy'°,X£ 08ês[7¾¶¹š  ¹¹±–|…{VQ˜ÿºC0>”í;ÃÖzd°ÉÌLV‚ÑC°#`9ÏN¼ÿõ¨~_Öÿðúü¿à™V¾"Ôµ³m—¤ ÖIu;\†p7(R;©çô§xvùtχv÷Ò©aolò2¯|p*ÒøNÒmÒòöÖ[h|<.¡Þ<ç •*yö­ MÒÏE]$+Kj#1)Ée9ÎqZÎßÖà·W1¥Õuëkk?9tæ¹Ô$HíãEp± çwÍ€;“T5ÍJîãCÖ4íA ûU¤–äÉ!$Gu €I ðA5°<)µ[y5-FHâ*Öûå]Öì½ ¹Î8ù³ÅIÿ½“i×¶“Mu3ÞÓ\ÈãÍb¸ÚrbŸ[‡©VóYÕžïSdV~F˜š.7n™¶ï!H /rAæ¬YkϪ,QÆ‚ÚM6;ÔÈ;òÄŒqŒKwá{k¹eÞßEçÆ±Ý,R… eøëŽ2¸©/|;ms4Assc,0ù ö¬£1ÿt†`}*z]Ÿüþ¿/ø&V™¯ë¼útP}†-Š]Î^'lå¶•\0ÇNù®’Ïí»fûoÙóæ·•äîÿWü;³ü^¸â©é¾´Òç‚[w˜˜mVÑC°#`läñ×5rÎÓìk0ûEÄþd­&f}Ûsü+裰ªÓóüÿÈ_×áþeš(¢Ì_­çü#·²Ùß=£E’3F¹vIáç¿_Lu¨5nþ´»¿Ôo­ãHT·Ù¦(Ò¹#æcž€Iï[7֑ߨ\YÊYcž6‰Š`ãߚϿðôW˧{wnlÕ4%9;vä†R3næ——êWÏô9ë™uX4ÝÛQ–úI%ó>Ó ¤…nX•$®Ê1»rGZÞðÌ×~†IçyŸ|‹™Ö @Wÿh ïN›Ãë:Û;êwâîÛpKµdmnªFͤp?‡µ]Ó4Ø4«?³ÀÒ8.Ò<’6æwc’Äú“UÜ]‹”QE!…Q@Q@Q@rþ)ÿY¡ÿØR/äÕÔV]æ€/µ+KÉ圭«oŽÜ:ˆ÷ò‘Œ’2{ãÚ…ºaÑž}}ölj>o™ÿ gÛÙ>÷›·xòöÓ={uÍ[×FSÅÊßÅ%’¶;ƒ´ôo"Oîþ¢"Oîþ¢…¢·õÐ:Üäô{+m'Æ7ö-½£ÙC9…8@ûÝI¶@•sR^Ç?‹­.c]>ÒûûWÉ’Ñ…ÓGÊ–vÎ ÆÜr9¯Qò$þïê(ò$þïê(Z4ûŸôì×ò·üŒñ¥Å·Ÿce{œ–ò‰íZŒlñ#  >c“É#¥cé¶Ñjö¾·Ô‘náhnw,¿2¶Ðžzàcé~DŸÝýEDŸÝýE @<¾!j‹c°Y´ kËÈ”“²¾"ìà3ÇJé< ¶ÃF¾ûß²›ùÌ%yR›¸ÇµužDŸÝýEDŸÝýE oŸùžQ &˜¶úÒ‚ÿo ¿ô¯+;Ä[›™è¸Ç^øÅtž.Mî‡>³-§(®1«•]¹Ï¡Åv~DŸÝýEDŸÝýEÖç›jÇHký`êÛ¼ó#³³Ë|œüçôí[>"'áÖÛìý¥¢g÷bÈú×aäIýßÔQäIýßÔQý_¨máÝ&+ÿÔi¾ź®@†B$Ë þò¯OJ¯âkè®ìàŠõtèe]-'ŠêõÉ,ŒV"ÚÀ€sÉÉW¨ùwõywõ­¥¿®¿çø­ÿ®Ÿåøž_«ûJÎP$šìh_PŽ3‰e‹~\)õõHÈT’Ú_ê÷bmGO²¶’(¿²æž%bØ0`eu Cg#ü8¯Wò$þïê(ò$þïê*›×úþ¿§Ü•ý_×NÇ)âÛ…¶Ñ¬à»ŠÒh¦™cš{ÈËCì ÷#‘ÉëQøØèiÑKw“$ |½¼³$ü¼ñÉ®¿È“û¿¨£È“û¿¨¥ßÌ}¼8ÒÇû ëì¥á06³yÞf~Ñæàç¯lãºb¤Ðÿ²ÿ¶ôŸøG·nò$þÓÆî›xósü{ýyëڽȓû¿¨£È“û¿¨£úüÀòÍ3CÓf³ð¼òYÆÏ{q*]ÿ-ÆÙoþö ޾”ûŸ±ÛèQÚ^þÌ·ñ BRL•X†ã´ÿ²3^¡äIýßÔU;ýu´3y‹ök…¸MŒYs€sÛšÿ×uþ@õþ¼Ÿùž{qäÄGI Ú"Inöû2c2™v²0g5¸‘ßx‡Pû~¥ch²¬GOžæfT|аuîÎx'§jõ/"Oîþ¢"Oîþ¢€<ßVU]yæËÉ£Äð®²Ë€’LÊØô!lzô0AޱRùwõywõt°ÑRywõywõ'‘'÷QG‘'÷Q@ÑRywõywõÉë?ò4Aÿ^oÿ ÉPøo©ÿxÿ:Ÿ[FO@`ýÿô* õ?ïç\ô7Ÿ¯è޼WÃOü+óguÜQÜWAÈ2ëýY¯=ñü|Åÿ]ùס]«5ç¾"ÿ˜¿ë¢ÿ:äkÿ\SÿA=Aeÿ û_úâŸú©è«ÿ±ÿ×7þkV W_øýþ¹¿óZ°h'éU[­Z~•UºÒ;ù Oÿ\"ÿФ«µJßþBSÿ׿ô)+ëÆ¶vÞ!%¢û*Ÿ.Y‹ò²{ûûrÀ计iQ,‘6õ,8èAÏàMT73gîÙàYÿâ*ì <–èÃ(ò`\)?Ì ¹œt  _´KýÛ/ü ?üEh—û¶_øøŠÚͤ/Ú%þí—þŸþ"´KýÛ/ü ?üEmfŒÐ/Ú%þí—þŸþ"´KýÛ/ü ?üElڥÜp<Q0¸ a°d®äâ˜>Ñ/÷l¿ð,ÿñ}¢oîÙàYÿâ+k4fP$·¤²4!"ÉTŠMùb1’p;Æ;ÕêeÈ =»†g(O¨ÚOôú`SXÖD¤PïªO-ޏéôQEQEQEQEQEQEQEPNOJ*)@i`FV“øR˜}¦ßþ{Åÿ}Š>Õoÿ=âÿ¾Å\Î:Qš§ö«ùïýö(ûU¿ü÷‹þûs4f€)ýªßþ{Åÿ}Š>Õoÿ=âÿ¾Å\Í  j·ÿžñßbµ[ÿÏx¿ï±W3FhŸÚ­ÿç¼_÷Ø£íVÿóÞ/ûìUÌÑš§ö«ùïýö(ûU¿ü÷‹þûs4f€+«+¨d`Êzr)š…óY5 Xâ>áa>dëÐsÈÏÞ<}ÑÉ©ŸïÂñoúÝþÂÐÿè-BÝ/5ù‡GèÍ—Õ4øïÖÁïíVñ†VݦQ!ú.sP®­]j tÖÖöö{33\¯Fù‡ð~=z×y§\ýƒUÑÎu&­u¨4ð_,ǃ dËÑv¯ÎxÀÕ­sM½™|XÎy<ùl¼­±æ…Û»oã8éBÕ^AÔílµ+N#-…í½Üjp^ V@¦A¬Û/è÷r^E%õµ´Ö“I‘O:+‡±ž=ê+µñÕüÑZ˜­¦Óáˬ{QäýúøÅeéÖBhõÿÞØ]Æ÷·7.·gcŽNAcç¦s‘GŸ“üÃü×ävîØLЛˆ„«šÉ¼n ýâ=8<ÕwÖ´¨¸“S²CrAºuh= óó~æíaâIà£XÜ­ýäØòÆTæ8öªùÄv]áÛ>Œ+NóM].mvÊ]æü^ÁV/ ¿˜» ‚2ßòÏ ÉÀç4=?¯ë¥k¿õýjuÞ#Õ$Ñt9¯¡$xÙ+ç3…íõ©UEºÔäÛÁžÂfk•<2ä–ÁøõëXºîÿ ílŠIu{ 0y‹ÌÎÈÈ[§ƒõªv {?‰$¼µÔRÖáìä…à¶f“* ‚iÝ‚F|Óz_úì Tûïi6Vv—Ÿl·šÎæä[‹ˆæC Ë6qжúî‘Û´š­Š-ÈÌ® Gû<üß…qò¶«u¢Ø]Ýé³Ê¶:ºÉû»3³@0ÃÔ·#Û8©5¹d]F-[G±ÔN¡, Ù¦ÓY¡•+1Êa’s‘Û Ñþ ¿Ëõ;‹‹ˆ- yîfŽPe¤‘‚ªrzUS­iK`/Χf,ÉÀ¸3¯–O¦ìâ°üqcy{§iò[¥Ã%µâM:[ƲI°2¨À† qƒÒ±£ÑÃCe=´zÈŸZŠ{yf!#Am铎´–®ß×Oóüôþ½Ná5]9ì ú_Úµ˜7e1øqT4]~-kRÕ!¶x&¶´xÖ9¡8“rn<Ž8 +··¼>$ÑÊîû©®¤·¹òDÊã+ûÜ`uÆ3š]*ÜÝkz Ùh·ZjéðH—o5¿”0P(Œãù¹ÈÈã9æ…­½Þ—õ×Ìëïu+ 5Q¯¯m­UÎÔ3ʨú žj;ÍkJÓÚ5½ÔìíšA”N¨XzŒžk’ñ>Ÿuÿ `¾—ûGì2؈ìlÒä£n%••‘Èȹ©tÍ8u¸ k[‰ìcÑ{¸yÎóò·ÝŽÔº_úëþ_ˆ?ëðÿ3ª¼Õtý>$’òþÖÙ$ÿVÓL¨ûdóUü;ª¾·áû=JHÖ6 C9#úW¢ÚÜiCL¼Õô{Û˜[IKT jÓ=»«1ed°È+Î;bºÏÛMgàí2Þâ‚Tˆî×k/$àŽÕVßúî+›ÔQE!…Q@Q@Q@Q@Q@gˆÿäm·ÿ¯'þRU? õ?ïçW࢈>ࢺA—_êÍyãæ/úè¿Î½ ëýY¯=ñü|Åÿ]ùÐueÿ û_úâŸú©ê /ùÚÿ×ÿÐEO@ _øýþ¹¿óZ°jºÿÇìõÍÿšÕƒ@?JªÝjÓôª­ÖÛÿÈJúáþ…%]ªVÿòŸþ¸Eÿ¡I\ýÖ¯â8¼@4¸ ²>cnŠC‘å÷bwöïïQLžS‹›Oúêô«%‡­S¸$Oež¾iÿÑoOg9¤ãÖãÖªï4o4kxõ¤iU™› £$ú ­¼Ð[ ‚2QCËizýôúý’ ¯fӯ㕣k¨"Œ|£*SgÍŒxzU]¼¾Bxn‹Š[ŽF ‡Zܳðö•aw͵³¤‘ƒ<Œ¨®Õ-´~¤¶Ñtë9!’ÞÛc@Ò4_;…þöqƒéÐv§ÒËúÜF-ž­¬K‡ªI©î‹R¹ØÖ‹ l ¹67dmçÖ'VÖ<½þçR70ê7 –í (‡ ©P{ç­6ÛÃmÛ^Iogk ¼Í0[{‰_{GÜ`:äâ·âÒl"·³ ÄVry°.öùžzó÷_Z¿®ÀÓ×ú×SFé¿yiÿ]þ€õÈx»Yhõ´·Õ¢°–ʶóˆü÷ÏÉÉÈ÷ÔÎÙ–Ïþ»ŸýôË]&ÚÖâòã ,·rù²4¸8࣎€ C1f½‹Q×ü3{ÌSÛÜH¿BŠj®“«Ý#E°Òí­ ¸»ŽY3 sHÏ·Iýkb YÛ5™†k”ûÒKp$9dé÷_z¡¨h"ÊÃN‡O·Ô&–̸Š{iâIP7PwáH>˜ì)¶$Aˆu«·³³ˆiéw-ÅÌ2Hñ9OÜœd.àyúÓ¢ñ¯zÚ}¥ºYCy4·0ÎÒ#¼a¡8%@`p}ÍYð÷†ÞÎ ;›ç—íËq(_07úÓÈcŽHä`g5zÛö–·°Ý$“™"šy”3 )ËgŽƒ·õ§ëý1_-L{ë2 >æò+²ÜÞ5“Ç ¸tpYwn'ezc¿ZŒøÂú]FO³Zù–±Ýý˜Â¶“4Œ¡¶³‰Ø0rqè:æ·ö‰mm’}¶÷†ñ a’å™°xé–?ãD~ŠßP{«[ëÛt’_:KhÝ|§~䂤Œ÷Á—Kÿ[Áòþ·ÿ€d?ˆµxÚæô¥“iÖú‡ØÚ Ž%Û¼&àÛ±œ°ã&‚úÌ«¬<76¯Þ\¤):9`á¾\°o»ì´ßöcshdŸË¸»û[Ã!÷‡Àã¦T5|;W’[êðGv]ž¤Pªì0]~\ƒß®3Ú…·Ëü¿àƒßçþð X<ß"??g´yž^vîÇ8Ï8ÍIQÁ‘qoy6(]ò³`u'¹©)½ÁQHŠ( Š( ¡”âæÓþºŸýªj­rqqgÿ]þ‹zÊñÍÍÆ±¥èÐ]Iiß›$ÓBvÈUùTöÉ=zàTßü"v1-´÷WRÞ\,Q›·’ãËà’p2ä`éZ¶—o«$Bf–)a}ðÏ í’6é~Mü?ö†­BþáÄ‹,sÉ"‡‰‡B»TÔöæ—A”WÅ:´–H‹ t÷éj“Ím,qº²“¼#ÜcÏnµ¡«ê×2[Y4¶ðêÚ¼p´‘+ùR+FX»³ŽyíÖ¶¿±•á¶K›ëË–·¹)$¬»‹€ séQ]xvÒîK™L×1Ë<ñÜ #p7E ñè;ç­5ý~ðEý~ðɨë']ƒJŠ[Ëj.'• rçÚBÿ/âMf_K¨ÉökQ%¬wf0­¤í#(m¬â@6 œz¹­›].;kõ½k›‰î¸·/+)Ü»‹dàr~žÕ zvúƒÝZÞÞÛ¤’ùÒ[Fëå;÷$$g¾¡n¿®¿ä­¿­?Ìè7Z7Z«¼Ñ¼ÒÖñëFñëUwš7šµ¼zѼzÕ]ææ€,““š§=Žs©Ûê3Àò\ÛŒDYÛjuä.vç“Î3VPå¬RùìšÄ$°GçÝ$'ÍV;…ÛѸêx¦º·ö”ôj>Òž\ô¾%Ò!ÔMŒ—€NF~F(®z)|mØœÓ_\†ÒãUkÛ¨ÚÈÇ‘¾ôÜ?‹Œ“ÆßÆ0ò:?´§£Qö”ôjÅÓu­?W2­œÌÏ DxÚ7\ôʰ×—iâû'‰¼YmŔң°‚GMˆq»p\gÛ9 »í)èÔ}¥=±ÛV±KÉ-áDñÁö—\#ɳӵR—ź#%ö±,ÀùNB£}Ö|ö±@/ÚSѨûJz5sž%ÔgÓ¼=5í£¨‘Z0­€Ã êèhmr [­Sí·VéofbT}ë¸tn0Ä“À_ç@ÚSѨûJz5rº‡Šm­,ì¯"Ši ¸»íº ׂIWqéÓfOiqKM,ÞlÈcÒ– N`(3ýìPCö”ôj>ÒžU+þ_›&¼+0—È%¡pžg÷w‘·>Ù í)èÔ}¥=°¯5í:Âõ-.¦x¤rª¡}™n/£>æ¡mrKU¯n [k#vFûÓpþ.0rOh£ûJz5iOF¬+M{N½™!†YJ«,FJ©Ÿ™GBGçP\x“NþÉŽòÚò,\Ç#[;ÆåX¢–$€2ÁÏøÐôW«±Ò}¥=´§£W8bÿ®‹ü躲ÿ}¯ýqOýTõ—üƒíëŠè"§ ¯ü~Çÿ\ßù­X5]ãö?úæÿÍjÁ Ÿ¥UnµiúUVëHíÿä%?ýp‹ÿB’®ãœÕ+ù Oÿ\"ÿФ«´ÀŠâ=(èÛ‘‡cÿê$~5‘{ÿ?ßøßü]\¢€)}ž÷þ~-ð¿øº>Ï{ÿ?¿øßü]]¢€)}ž÷þ~-ð¿øº>Ï{ÿ?¿øßü]]¢€)}ž÷þ~-ð¿øº>Ï{ÿ?¿øßü]]¢€)}ž÷þ~-ð¿øº_"÷þ~-ð¿øº¹EUŠÖ_=f¸™d(ÅDÚ ž§’r{u«TQ@Q@Q@Q@Q@ב#Û½Õw«“ŒŸJuQEQEQEÄz(QÑ·#ÇÿÔHüjZ(Ÿ‘{ÿ?ßøßü]'Ùïçâ×ÿÛÿ‹«´P/³ÞÿÏůþ·ÿGÙïçâ×ÿÛÿ‹«´P/³ÞÿÏůþ·ÿGÙïçâ×ÿÛÿ‹«´P/³ÞÿÏůþ·ÿGÙïçâ×ÿÛÿ‹«´P/³ÞÿÏůþ·ÿGÙïçâ×ÿÛÿ‹«´P/³ÞÿÏůþ·ÿGÙïçâ×ÿÛÿ‹«´P"WX‚ÈÊÎ:”R£ò$ÿ:æáˇrF:ô"³ôý6ò6Õ´‹Í=šÆöyåk*+'b¹ÝžHéŠì~ËþßéGÙÛý(¶–þ»‡ŸõØòÿøE¼A%”sȈ5 ÿÐ.qiµS~sÉÊîÇ_šµîtÍSNŸX·°ÓîßREÉç*HŒG‡’£sÞ»Ÿ²ÿ·úQö_öÿJ»‚Óc“Õt[¦ð:é6¸žæaUËmó =OLíïU¦Ò®&›\šëIšx¯Ùâ†9Ñ*£$6á‚§Ütâ»_²ÿ·úQö_öÿJmÞà´ÐàŽŸâ 4›Ig‚K‰ìõ%¸† ¦Îh@#k8ùKrO_Æ¥Ö-µk«˜¯´Ý*òÓShÕ|ñu–còJ»Žà9<yà×qö_öÿJ>ËþßéKúýưԞ÷QÔmLRÍÒ?46DŒP1ãc#¹®285-VÃ\Ñí´âa¸Õ% zÒ HÆðIÛÄŒqø×¥ý—ý¿Ò£‹M†Ü8…c{—}ˆæ=IÇR}h[ßúè-ýu<ÿÄZ6¹¨]_Eä^ÜÅ$‘GŠñc†4Ia“Ç8n¢­êÚ£sÿ “o»í’Z´:á6îêxÆZî¾ËþßéGÙÛý(ZÉx³JÔ/£´¸Ò•MäEál°\E"ícÏ¡Úßðȋ—Öïª[$*lmí'‹LPãæi†Xuãcœu¯Dû/û¥eÿoô¥mÇ}¼Ž ûKÕbŽÅ´Ë ˜µ8íaˆÝÇs‹Ž©*óÏ@O<f£á룭êRËa{i¨l$Zê¸P¬®›Ô0ã¯=q^ö_öÿJ>ËþßéTÝÝÉJÊÅ8£XaHaQB€Np>¬ý—ý¿Ò²ÿ·úRЭEYû/û¥eÿoô  ÔUŸ²ÿ·úQö_öÿJ­EYû/û¥eÿoô  ÔUŸ²ÿ·úQö_öÿJ­EYû/û¥eÿoô  ÔUŸ²ÿ·úQö_öÿJ㵟ù ÿ¯7ÿÐd¨¼7÷ûÇùÕz?/Åp çý Ïþ;%WðßÞ?ïç\ô7Ÿ¯è޼WÃOü+ógsÜQÜWAÈ2ëýY¯=ñü|Åÿ]ùס]«5ç¾"ÿ˜¿ë¢ÿ:äkÿ\SÿA=Aeÿ û_úâŸú©è«ÿ±ÿ×7þkV W_øýþ¹¿óZ°h'éU_­Z~•YÇ4€ŠßþBSÿ׿ô)+?Ä×@ºO“,‘ïÔ¡GØÄnRNAÇQíZ0ÈNúáþ…%†›¤-„Í"ýžá.a,½ÈéMn½PûœÍLjuÕûEÄ §}•5°*Ù/Eé;†w† ŽŸw {ûÒ]ørÎñ¯žI'W¼x¤fGÆÑãi^8Œu•5ׇ,ï?´<É'ohš]¬8òñ¼{sœÒ[kýl>£4½GP:ÅÖ—©‹Wš(Rt–ÙYU•‰*Äà‚¾´x†U‰ôÐÇ.ýF5óò7Ì0G?\j–òݬµÕm¬îo.e‰mÚ(¤@PY·|äw>¾œT~\ºÜ}»M¼±“­Äe剃°ÈÇÊÍÇ>Ô.Ÿ×_òÿ×Oó24½FþÆÏ]Ôn'Ž[[«¦c/ÊxË`m´ËOjl“¼ö©" 9.’Òx–'QŒdlúŒté[qørÚ;›·&Úì»Mf̦.0ÇÏ?\Smü8YÏfÚ–¡5´°4)dV©ùNÜäRikoô¿ÌʃWñ,×v–¡´÷vfî9<™0 mÊ¿“ósëÅohz“jú­ûÆ#y“,€äÙE£[Ãwgr¯){[cj€‘‚§o'Ž¿(ýi–::|vQÁuv"´WUŒÈ6É»ŸœÎ;zU;kýwÿ€J¿R¯„®¥›Â–×3I,Ÿ¼,ò1f ;w>²ôŸ_êW–möPÖ—lFÄ´˜4+‚UšB60àgëÞµ´Ï +ÊH5}E­£bE»´eI$“8Éõ©tÿÅ¥Ì ­õêÚ©b–fE1.{—v9àf—[œU½¥Ü ŸXY-Vêé“÷é ‰3Œï}ÿ0öW¢Y­ÚÛ},O“–‚2‹ŽÜcúÕáë!áßìBÓ5®Ý¡‹ãæÜ@êµ3Ì¿ÒUm¢³ÔµaÆáæ€ÿw’>éß yŒ»Ô57ñ*iv&Ò8ÖØ\HóÆÎHß· 1õæ³-õy­`¸ŠÆÒÝnm£Ü[fz—~I<ÀÇá[–V¿h¿þמÚâÖé û9‚WFCnÏÊHÏãT5-(´ÙVÚÞòæW½7Ša™#’)VRØ0sÖ–ÛÿZÿ=vþ´ÿ3S¿Õ®æ†Îv²ûež±qÊ‘0ŒîŒ°%KßÖ¥¿Õuk‰-ìšKxoíµhái#Wò¤VŒ¸%wgò3Ú®h¾¼ë­QîVV¾K¸ÖIQäùhÞTmçžÛšÒ»ðÍÜ—R™îcš{ˆîD‘¸ ˆ¡A^=|õ4Ö›ÿ[ÁÿׯüZÜN¶è.^7˜£RªO°$‘ùšâõÛ©éç4íAµµ×t8å¢Ý:\—"òX¸ÊoÎÐ_ Y9­æíÜÜ›±r\ VSü@€ü±Í:-ÄvÆMSPûU³3Gv€0Á_»·…×áþ`fM«¶—y¯Ì¶½Ê=¬JT²ù®ênÉ8žÝ½jv×5=:[Û]E-$¸ŠÅï!’ÝYQ‚ðU$õÇ9ç=ªüž²™/ÖvšQ|#–`(VƒÀ9õ¦Eá«dK¿>îòêk¨ »O;©uŒçå\\ôë×4?ëîÿ1«u*éZƪڶ¤,Ý/íMÄ/lŒ…ÚJ°f9á‡#+?ÅÚËG¨­¥¾­„¶Pý°‡œGç¾~HŽHÈ 6G¸®’=Þ;>pòï± ˆ0U‚ƒž:ü£¦)ÖºMµ­ÅåÆYnåódipqÀGÞú]‰ŽÚ™ºÍ†£¡[j²ê7–Ö‘E¬Æ6°/ÌNx¾µoB7¶þ¶mZCö”Œ´­!€É#qõ÷ªáo*Ò8/ï­ÖÒi&„FÑ…Éã „`dã¸Í_›IûN‹6™q}w2Ì¥v($*zŒ…§)=†º\å|?â1?ˆ"–MZ+ˆõ`û-á©S”Aùw&sïPϨÞ.±,†êý]uE….VCö5‹#(ËÓ8Êä¼z×a{¢YÞÚÃS‘"KÂd(r1~ŸCTß–o3æêðZ¼ÿh{1 ò™÷nÏMØÏ8Î=©­×—üø õOúïÿÝ¢Š)QEU-nù¬ŸL q,>}ìpŸ.%}àƒòÇåG5v°\ŽÃÞ…ºõAÑú2yücaÔ¨m¯ZÒ…¼×Ë0G&@Á9Ï€HÞ›?ˆ¢ÓnuÙ®f¹žòR7¨ÀCœ¶I{¬û jÏk}£E=Ñï.Zw•·yè®ûÝãiç8lŒÒ¦Ôü-{x5ñ¶àjlÐîfùD{wnãÛŒf…¶¿ÖßðC©¯¥kÐê—WiwewnªïÒ(m­œ0ÚH#‚:ö¬{?ΖÚÅÅö™vöö¯Ú Xöl±ŒÜ[Ø­ˆ´¹ÓÅ—©hü‰,£· ݹ]˜œcÃõGMÑu;JÎe²›H½ži‹oa0ó:©]»qœóŸÂò}Ãü×Ýoó-Éâ}6-JâżØ,¾Üí·Ëö9ëßñIümb±ù‰a©L‘À“Ü´P†û2²îþn¸ä…Ü@¬!ðÿRm2¤Ô k³7“q(ÝóÙíTØ8ûÛQO¦sÍl^hÄZ¨Ò%±º¢3íƒ@Û m‚G=è~_×õúó6µjÓMÑV}ó[V_$.€¸Ér+OÛÂ×+.‹¬#Ú(’åL(L(ypø#ƒ÷rxvË\žÙõÅ2 ê-^±i!óu ®dˆ†;TH0»¸üñš4=cM¼µ¾ÓÆY¾ÁÌ7.è§fHeeR{ž¤¿Ëò­†ü¼ÿ5ú\²Ù$Ë0†Äf!‚›e;Ï\ç§J×ïäñö—=•ÌÑ[˜T\Œ÷FùŸ0ç'øA¶~šÞûD¹K]>É,ÅǦBf@ÛòŒôç8¢]ðëÚ‹˜l.´­LÄnc¸f»iBÀàH§°¯|A¦±—åÝÃÄ&o³ªD-·,Y‡LÕ(Òþ‹\ž£â‹»+ÍIaÒEÅ®š¨÷2ý¤+í+¸•]¼à{Š—Äz•å´DºfÖ{›ØÓc>Á"•c‚pp8¨§ûKú-iE®^ëÄòéÿoŽöÁR{[5ºTŽrâRI] íÄÎ?ˆqQMã8"Š)RÑåG²Žëä˜4Œ8ñޤ“ÎF1Gõùÿ_—ùoÚ_ÑhûKú-`iºÕÄú›éº€²»‰Ð$ÂTtÎq‘ŽõCUñ]ÖŸs©ˆt‘qk¦ª5Ä¿iØØaŸ•vóî(®ûKú-iE®wO×ng¾¸±½ÓÒÒæ;qs[":G-´`äsÅe½å޳bÖ+Ë[¸ŽKKµ¹N8"‡ -Nßí/è´}¥ý¹%×õKMOšçM‚K«¹"‚[³‡,¹ÜͳåéÐO}`Ùë3I¨G, /í3F—H”9Âín>÷áŠmYÿ]®$î¯ýocªûKú-iE®?QÖ5ðÝÅíæ›%”'Êh¼‹ÜJC:ŽH_”ò29î)šÏŽm´BêÙc·Y…3ù·‰‡#8Ë>ž”¶×c³ûKú-iE®jÛÄr_k²iö¶°´Ql/$·;$*ÊrÇ´î^zäw¦kš†§kâÛOŽ9„é9’%òÕ¶…Á-µ=¨¨ûKú-iE®^óÄ—q\^Gi¤›¨ìMÛ‹€›I]ÅPó9íDþ$¹–ö }#MKá-šÞn{Ÿ+äc€Êr~¸ £í/è´}¥ý°,üO¥]ÙÚJ÷ÛKv?wò*È[;Jã<ÀŽ+Âúõíž‹¤¥ýû̦¼عfÛ¹1À'ŒäÑ`;ï´¿¢Ñö—ôZäçñd±}¦í4Æ}&Ús×~p m¬ÂÒþ‹\dÞ+խ侊]?2Â!=À[àG–A §Éó•¸8éÖº›yÒæÚ+ˆó²T¹ô#"€-}¥ý´¿¢Ô4PßiE£í/èµ 7Ú_ÑhûKú-CE3PŸN¹R Mü«•ðßÞ?ïç]5÷üx\×&þUÌøoï÷󠿏(¢¸( ]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@Õ—üƒíëŠè"§¨,¿äkÿ\SÿA=QEQEUºÿÝ?þ»Ÿý«N³.¿ãóOÿ®çÿ@jÓ Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( $ûæ¹O,·z¦g´îÑÞ%Ì’ˆ–ˆ¡³—éžœu溹>ù§ùÿwõ4uL:Xã'ðœ²ý¦Ñ56M&æs<ÖžH,ImÌ¢Lð¤öÁ<žj[ï ý·û[{?´ÿUŸ/ËÇ¿9Ƕ+®ò#þïêhò#þïêhZË\xwÏèûVßíX„êóåa6g¯ÍëÚ¤Ô´G¾Ól †ïȸ²’9a˜Ç¼nQŽW# ‚xÍt¾DÝýMDÝýM×Ü'{á§Ô®´»«»ÝÓÚßâÚ· ¸0R2p*žý=ê´ ·ŠÃRµk¹XÝÌ$Š@ p­º5^¹ Ù?v¾DÝýMDÝýMs:n‹s¦ú–£~/nÌ")‰3“…ÉäœdçµE{῵¦º¿kÙý«§ú¼ùXM¹ëózö®¯Èû¿©£Èû¿©£Èšœ®¡á¤Ônnd’é•.4óbÊ«È'vsïÓZ×Â’‰®^þþÖkbÞ×ÉÂ×ïŸÊ»?"?îþ¦"?îþ¦ëóÿ6×åþHä"ðíëZéð^j©8±¸Žh™mv¨¤m?1ä篷Jµ{áøu JææâRa¸±6O\$¶ìûúWKäGýßÔÑäGýßÔÐõßúè OëæqÒxwQºÑ¥Ó/5”š#XŸì›]v°?1 †8è=jYü?tšµÍö¨Çl.Š™âšÔL (Æå;†Ó€zë<ˆÿ»úšdkm6ï)‘ö±VÚÙÁA÷¢àrÚ‡‡®5-ZÚæ{è½´Ë4H– J»‡ÌÝО¼{U_GžþîÊöÎôZ]Ú®0A\AÎk¤ò#þïêhò#þïêh»ðÕä³Ý½¦®m’ýo[†ÞÁv–CŸ‘Çz§6¨E☣Òn>Ão–,Ïmæ¡Ãœ.r>`0zþÞyÿwõ4yÿwõ4Oëúèaiz=¶—¦[Ù ó|y ™‰$·âI5aá+›t±¶ºÕEÅ…Œ¾t0%·–KJïmÇ Ð]œ‰o ”ª êÌØŸäEýßÔÑÖáÒÇ?„å—í6‰©²i73™æ´òAbKneg…'¶ äóWWE¹ƒ^ŸP´¿XàºØn-Þ ÅŠ£knxÇcÒºo"?îþ¦"?îþ¦€8ˆ¼#w œ©¬œ¾m‹ aºÉáŽì8ÃŒ –O Isa¨%Ö£æÞß¼M-À‡jªÆAUTσÜõ®ËÈû¿©¦2[¬‰ùÚ¥¹luÀ rëAûMÞ«?Úvý¾Ímvùyòñ¿æëÏßéÇJÒ²¶û…½®ýþLKìc8Î+SÈû¿©£Èû¿©¡h×õ÷¨«¾DÝýMDÝýMR¢®ùÿwõ4ÉÚ-žc"o`«¹±¸žÃÔÐZ*ï‘÷SG‘÷S@wßñáqÿ\›ùW3ῼÞ?κýN$].è…Áò›¿µrûÍþñþtÜÁ÷A÷˯õf¼÷Ä_ñóýt_ç^…uþ¬×žø‹þ>bÿ®‹ü踳b,-Gý1OýTÛϵW´ÿoúâŸú©© vóíFóíM¢€¼ûQ¼ûSh ‘VeÚêê9 ƒêéQ}–?ïÜàLŸüUMECöXÿ¿qÿ2ñT}–?ïÜàLŸüUMECöXÿ¿qÿ2ñT}–?ïÜàLŸüUMECöXÿ¿qÿ2ñT}–?ïÜàLŸüUMECöXÿ¿qÿ2ñT}–?ïÜàLŸüUMECöXÿ¿qÿ2ñT}–?ïÜàLŸüUMECöXÿ¿qÿ2ñT}–?ïÜàLŸüUMECöXÿ¿qÿ2ñT}–?ïÜàLŸüUMECöXÿ¿qÿ2ñT}–?ïÜàLŸüUMECöXÿ¿qÿ2ñT}–?ïÜàLŸüUMECöXÿ¿qÿ2ñT}–?ïÜàLŸüUMECöXÿ¿qÿ2ñT}–?ïÜàLŸüUMECöXÿ¿qÿ2ñT}–?ïÜàLŸüUMECöXÿ¿qÿ2ñT}–?ïÜàLŸüUMECöXÿ¿qÿ2ñT}–?ïÜàLŸüUMECöXÿ¿qÿ2ñT}–?ïÜàLŸüUMECöXÿ¿qÿ2ñT}–?ïÜàLŸüUMECöXÿ¿qÿ2ñT}–?ïÜàLŸüUMECöXÿ¿qÿ2ñT}–?ïÜàLŸüUMECöXÿ¿qÿ2ñT}–?ïÜàLŸüUMECöXÿ¿qÿ2ñT}–?ïÜàLŸüUMECöXÿ¿qÿ2ñT}–?ïÜàLŸüUME:% PXݘ±üÏ5™âi–)4MÐE.ýN$fïß0Áýr=«U~謭zÎûQÕtx ´?f·º[¹®šE 6†çq'#¶=é­×ªÙú3.ãÅ:²Zßk1[ÙÎå x›wžê±Ü6vŽs…ÁÈi—ÚÔš]ÇŠnìím…ÄjÜ1ó ªŒ¿ÍÛ=±Z³ø:Â{©\ÜÞ­¤Ó ‰¬VP ’Lƒ’1žH€@'µMyá{+ßí?2[ý¢Ñ4»Y~S6í㎃9Í m­ƒ¨Í#SÔÛ[»Ò5ahóEwÍjŒŠÈÅ—X’+ëÞ°ôÛÝ~ 3ÄWÖÓÚϽÝÙ† ¢vrU¸··bºÔÒàMj]T4ž|–ënT‘·j±`qŒç,{Õ[?Ãa©ÜÝÛÞ^,W4²ZS v¶6îç¯\{Q¯àÿ0ÿ5ù™…/ŽÕ5 ±FÖ1éŸkŽ^rò…³¯÷]ãJ¾ ñÌW¯mo§+i¡»ICæYLaÙSäwsVÓÀ:*iÖÖ#í/>Ö¤¸Én› Ç)Œ.=æ­j>´Ônî.Ýõ¨»P—Q[J.² q• â‡åý[|yÿ_×êUñ§ ߀ÿ´–Ù&Št‚UŠlã èFvxϯj§­x—\³¹×$²O6šBFïÈûå »Ž6>†º=CE´Ôtc¥>ømp€HB@ÐU{¯ Yݦ°²K8²*Oµ‡Êíxã\Ñ.¶ô¹FÏ]Ô-õË-fKòì…ìw0«"*ä‚3˜ ÖvŸãyƒêb÷ɹŽÒÄÞ¤¶ö²ÛïPH+¶Lç¶s] ç†ì/î'–àÊâ{/°ºnLyÎzg<õÍT‡Â°[©çº¾Õ$–ÌÚywNœÇ×h*«×ÔÐÿÏõ·è ü¿Kþ¦d¾(Ö´‰a—XŠÁ­æ°žðEjŽ?,)ÚX± ØÎGaâýn7:h»f³{ˆ–+ˆBH i9à®:täS4 ÞϬE&£úi°YËl!Ô.b˜°}£jùÂêÇ'Šèl|8l ’µUá1yQ$’£y#±S³9‹Cþ¿øWëýmÿo†5iµ{9d¸½²¸‘Kh^&„ã•uv$ʹ¨5é4-6üÁ{‹­zx#-È©É%Š ,Øð?Jët -*æêèÝÝ]Ý]mÏrÊX…ÎÑ…U žÝê¬ÞÓåŽé<û´óîþØŒ’`›»FqÆ{ƒ‘G[ÿ[¡ô·õ³9}STÔµýÞÊâ$ŸVŠÜÉ%¬ÑCsRÜÆå_#=ºÕÛxu-/ÅIeg=Œ[ii$Ñ%¬†,y¯Ÿ.0ÿ)ÿ¾«¡ÿ„z9 ´ŽëP¾»kk¥ºI&dÜXœ(yèúÓ¯ô¯µXu(ïo,î£Êf¶uDÎí¬OôÁç­5§õåoÌ«úïÈË»ñ=Õõö›g¡yhnšPò_ÚJ»v*· vÝzUiµ·Ò/|G:ÙÁ%ÜrZD¥ /#¨UÝ’p=‡OS]=ΗÖ«e¨;È&³ÕHÚw€xö¬ÍWÃÖ²ÛkýžâòM@FÏJ¨w J1ÆÒ1œ“ÔRè3â}KYm7WÒu&°y#·¶¸ŽKh-8\Ìs÷zñSx‡XÖ¢Óµ].òKU¼…-g†æÑ]«Ì‚¥‰êCÈ=ª]3—šÆ¥.²ú„pÜC (.gŠIÿvåó˜ÆÐ3ŽOZèµ/ Xj³ÝÍrÓKgàm ÅÕ—Œ†þƒŠ{[úôëµÿQogÖ4ÿ Þ\–´¹Ô`‰äA,‘¶@Ú\žžõ‡/ŽÕ5 ±FÖ1éŸkŽ^rò…³¯÷]ã]M…‹YZ}ž[˛ÒL·%Köù@ü+ <¢¦mb>Ða‚óíjKŒ–é°œr˜ÂãÐiuþ¿¯?×õý[œî£}|t¯»G¦¤­§ù²Á¼nvÙ~nƒ$`c޵©¬G­øqEΞu ]~ðÛ¸‹nÕþ ùÎ?Ú­Ë¿ X^TLÓ‘©ù~n … SŽóžiÖþŽ+«©ïïnç³ó<¹'d%·€;TtÇÇãNúÿ]„G¤k’^x~âöûìöÓZ¼ÑNÀŸ)Z6 ·<íã5Ÿá¯ÜêšÕÆrðNÝn"žYmÁ°FÙ2ObV²xvÅt›í1üÙ-¯d–IC·9’Àó¼tSéX[ê׉,ÒMuù†B(›A¨ë\ï‡>û¼C¡ÜÁ÷A÷˯õf¼÷Ä_ñóýt_ç^…uþ¬×žø‹þ>bÿ®‹üè¶´ÿoúâŸú©ªOøñ¶ÿ®)ÿ ŠšÂŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š(  -â@c\,~c„MïÌzž§Ú¬¯ÝÎxŽâH$ÑÂlýæ£6äVà†é‘Á÷Ó[¤.æ÷˜ÿßoΣKÄ’i!ŽáZX±æ"¾JdddvÈ®*çZÖ¨ëÑߢAgvЋ%Jº#ì!›ïn=F:qNÔõkÛFñ<¶²$RÂö«ˆ“+¼(9ãæëß8¡joæ?÷Ûó¤Y‹gl„ààáºç´›BßÄ7šMíó^¢[GqÏ£ÌÊTí»ž•¦[êcMñÖŸ©M«ywäÛùq²o yRÜýqÍ~W/3ºóûíùÑæ?÷Ûó®_Oö©îãe:siÿ¸ÝlWÛœz8ö5`^ëÓÇ©ÿÄÙmäÒa@ê`B'“ËÌù)'n;Ðôßúþ¿T [[©ÙÏx–°™n.(†2ò>Ð2p9>õ'˜ÿßoι}oS–o&¤‘¢I4pI±Ð8]Ì™`AëYÚÞ§­G?ˆn,õCzTq¼py²¾Ssn$nüˆ¡«n ]ŽçÌï·çG˜ÿßoιu[½'Q¾·Ôõ7¸µM<^‰ÚW‹’@t#"¨Úø“T±“TBòxàÓì"ö£rA#»ãi㮣úüÿȿקùç˜ÿßoÎ1ÿ¾ßp—:¾³¢<:—ÛÖm:{¶‡ÉDEtU )Qœ|Ýɧé×Þ,™Ò‰„Önè÷qÀˆ³`Ùå±%NOÞö懧õëþBNÿ×§ùǘÿßoΑf-²ƒƒ†èkÃ7ÒÜ¥Äw—’ÞÂWΆî‰âÈí°TààäôëXºT·:f›â=Y.¥’;{»ÇeSa`IÎvîýhz_ÒãZýçuæ?÷Ûó£Ìï·ç\•¥î­cªi^jK§–_%SÊeMùB½W·9=9ª:v¯¬Å§èúµÆ¦n¢¿º[y-^P¡˜¨(T‘Œóž3NÚØ/¥ÎÖâþ;SžãËó¤G’~f=üªo1ÿ¾ßq^#»»Ô†› Ú^i².© ¤ó,mž•›=;Žâ’ã]Õ4¸5›).’îâÒKt†êHÂàL@ùÂà|½xÆx¤µ_×—ùƒÑÿ^gjee™©&Î@ReáºÝk‰Õ.u8õòøß£éܤ­£¡R¤(ƒœŽ3ÁëQ_Y].‹á¨ÛU¹w–ö¦8³òÛ…pà@еü?oПås½óûíùÑæ?÷Ûó®.[­jY5³ä®Š™lnfòÒp0qò㡤—TÕµkÈÏP}=[I[í‹ >\ž‡p'LR¾—þ¶oô _wù¯˜ÿßoÎ1ÿ¾ßqš©ªµæ…%Ýù¹‡VµyZ# …«|¥FHäŽsRëÚÖ¡¦jW¶±L7]Y¡ÓÁUùfß°ŽœòèyÏzo@ZêuSÞ%¬&[‹…Š!Œ¼´ œO½£¦iž“ûA¦³½íÚÕâ@#Îò °º¯rzÖŸŠµ‹»if‹L¸¾6¶ÆâHíà‰ã¦Bø8;O sCÐö:ÿ1ÿ¾ßG-â@c\,~c„MïÌzž§Ú±¯®õKŸ Çw¥ ûl±E&Õ m Á8'ã5Ú«Me¤”¼–êOíd‚cyl‰,g•+´#Ž@ïÖ½îQ_K§˜ÿßoÎ1ÿ¾ßp²jºÌi{ªL´Ú¯Ù~ÆaM˜©÷±»?6sžÔ—Z¾±-Ö¯¥äC¢-ÍaB¥D¢2Yˆ-“’x#µ%­¿®ßæ6íë¿ùd·ñ^é×¾Dþ`‹Ì‰ñžG#ð®ß}¿Þ?Ϋi·Íkíº¦áw«ÞDÍýÐ#wþj*χ>û¼$ÿOÊãjßæw0}ÁE}ÁE1 ºÿVkÏ|Eÿ1×EþuèW_êÍyãæ/úè¿Î€:çÖ’A¦ÚC4?fs9†Ç#ïj‡í^*ÿ e¯ýô?øºÒX<Õ,$ç pÊ?!Å/Ù[þy¿þ=a*M»ó?ëätã¹"þÿó3>Õâ¯úZÿßCÿ‹£í^*ÿ e¯ýô?øºÓû+Ï7ÿÀ§£ì­ÿ<ßÿž—°Îÿò+ëKþ}Çîæf}«Å_ô µÿ¾‡ÿGÚ¼Uÿ@Ë_ûèñu§öVÿžoÿOGÙ[þy¿þ=Áÿ;ü?È>´¿çÜ~çþfgÚ¼Uÿ@Ë_ûèñt}«Å_ô µÿ¾‡ÿZeoùæÿøô}•¿ç›ÿàSÑìó¿ÃüƒëKþ}Çîæf}«Å_ô µÿ¾‡ÿGÚ¼Uÿ@Ë_ûèñu§öVÿžoÿOGÙ[þy¿þ=Áÿ;ü?È>´¿çÜ~çþfgÚ¼Uÿ@Ë_ûèñufÂI{ÞØÛÅns½Ñ†GÄ{ãµZû+Ï7ÿÀ§§-™cŒ>·RSTZwæ×ÈRÄ&šäŠûÿÌ»´úQ´úUHía’$|Ì7qç¿øÓ¾Å÷¦ÿ¿ïþ5±ÌYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿ\Q\¼¾ºœÆfÖæ“Ëpé½ Úán½n}ŠïMÿßühû?Þ›þÿ¿øÔNœgncZU§Jü|“üÎm¼ÙßQ Ï •˜Á’Î:1ùºûÔ’x*I|ï3UwóŠ™wDO˜W¦ï›œvÍtb‡ûÓß÷ÿ>Å÷¦ÿ¿ïþ5ŸÕ©öü_ùšýv·u÷/ò0Ç„®…Á¸ÜÂvP†M‡qPrwg'zd^ š ^XµwŽI»ºDAf=I;¹5¿ö(½7ýÿñ£ìPÿzoûþÿãGÕ©öü_ù‡×kw_rÿ#šE…!ê"ŽO9[üªÿÞw ïÖ¬Çà‹YnžmJ᯷¨ 2—ÇMÄ7Ì?)Èæ·>Å÷¦ÿ¿ïþ4}ŠïMÿßüiÆ„"î—âÉž*¬âã&¬ü—ùæ—kdÖw1‡·m¹@Jô Ž„w¡›@Óîýe‡p¿P·?30ߎ=1S}ŠïMÿßühû?Þ›þÿ¿øÖÇ9Ú…ÄÒM4 #ÉoögÜI s´ŒãúÕk? iz{Jö°·™$^I3K$Ãg÷pìxö«¿b‡ûÓß÷ÿ>Å÷¦ÿ¿ïþ4‰cà›;b+ØD1Û¼?gòØÏßvp1´9«¶¾Òl’T·†XÒXÌl‚âM¡Oe°¿ðUï±Cýé¿ïûÿb‡ûÓß÷ÿb;B±ÒŒ¦Ò6W˜ƒ#É#È펙f$àzf™‡4ص ¯’³ÍŸ4 c’0ILíÉñV~Å÷¦ÿ¿ïþ4}ŠïMÿßühOO𾕥Îg³¶òåØQYŸbÿuC´{ ¥¡ø'MÑ’ÙÈ7Pn+3³í“Ê¡bªpq‘[?b‡ûÓß÷ÿ>Å÷¦ÿ¿ïþ4î+ Ô´k=^Ý`½F‘Ä‹µÙ °èAR<Ô6þÒí´ùì#µCm9&e—2Ý™‰$û“V~Å÷¦ÿ¿ïþ4}ŠïMÿßüi ­cá½3NIÖÞßýzì”Êí#:ôÚKqÏN•øCFM=¬E»›vep­<„¡_ºT–Êãý’+CìPÿzoûþÿãGØ¡þôß÷ýÿÆÒø7DŸa–Ñœª9šOAÈó|ãýìÕó¤ZÆ»ò‡œÐ}œ°$~ï9ÛŒã­;ìPÿzoûþÿãGØ¡þôß÷ýÿÆ‘C Ø[ý‡Ê‡oØ#1Û|Ìv)מëš}Þe}siss É5£™ cŸ‘ˆÆzóøÓ¾Å÷¦ÿ¿ïþ4}ŠïMÿßüiÜV*ÿÂ3¥ [»aj¢+ɼùÔ3 ïsœärŠt¾Ó¥ÕRh˜]€t•Ô6:nP@l{ƒV>Å÷¦ÿ¿ïþ4}ŠïMÿßüi ‚?éÐÛYÛ¤ŠÊO6Ýw·ÈÜóן¼zç­G©xcKÕ§óîáv”Çå3G3ÆY?ºÛdrx5oìPÿzoûþÿãGØ¡þôß÷ýÿÆ€>kq§­ƒ«‹u ª±ÈÈ@^˜e öõªðøgK·‚(c·ÂÅp.T™˜ËÓqbrÇêMZû?Þ›þÿ¿øÑö(½7ýÿñ§}n+t oéÏk5³A˜gŸí2.öù¤ÜvsêÇJÊÔüi¨Ý}¡] ‘®y jø}¬+¿nãŒn*ksìPÿzoûþÿãGØ¡þôß÷ýÿÆ•ÂÅIô{++{ûˆ! $û¥~IÊ‘¸p ¶3X^ûíþñþuÔ­œ!ýã`ç +0ü‰®[ß}¿Þ?ÎÌpQDpQLC.¿ÕšóßÇÌ_õÑz×ú³^{â/øù‹þº/ó ÚØ…´Œ’ &©®¿¥½Ûè<aˆ2#1f€'ð¨5;kÛÍ*Þ DŠDf_=$”ǽ?»SŒñÓ5a¬>£ê\ÁLÚ„‘ľw˼ž„0£};R_×à7ý~'Sek¨Ûùö’‰#ÉRpAuAö5öÞŸöñdg+9m€4l· b6“횣£Þi––`®£ Ì·w$I,_2´Ì3Œà`qŸJ¥¬_[Üë+mö©¡º@t𹃂ç#h$òqÅ>© £fÐ×´Ó~,¾Óûòæ1”`¥¿ºsíš±{k§[ù÷s,Qä('©>€IöÏÏ«XjšêÚÏ{o Wlm 4ç”øŸn¶u֚Ε¨Ü+( ‹#…$DÌÖ vàŒöÍ.ˆ}K˯é­e=ßžë ó ÂêW=>R2*}–³a¨NÐ[ÌÞr®ã‘4m\0Šç5½i5]#[ŽÚX¤´‚8JM9%¾nzqRi³¤þ*·’ÛRmY~Îé$¥Wã‚0PùÆx¦·±¼Ú²i›­®&tÛæÉ®È·tÜI^­ çl¬mni—jã~yÝœõ­/ÛÛJ)íu+"ëlEÅ­¼’18æ]Îß0=ñžM;kýyÿ¯§õåþgc}}h×7,V%*¤žI~¤UšÁñœ^o…nÁŒº:Ÿ”:–ãè dMk êzž…ke ¤Úc’b‰G–X*öf’ÔgkEy·ŠnaþÒ¹š}Ýœ¥±to´Ê2§1¶@ ÉÁèjæ±§ÚÝ]x²òhC\ÚAÛÍÑ¢"-À©íÈ£¥Áoc½¬Ûmf;ÍJkK{K§H\Ç%ÈU+’¹'$öàb¹O>ÒßÅ×.ÖšÝË MŸ´Ú’€ezÏN§“V,4õ:ˆïì­cþÖ7I ᙞÀ6»õý?ÌK[yÛõ;Z+…ѳ¶t¯ìÛ¼—þÒÆî›xósü{ýyëUcÓí#øl÷in‹ss´O(4ƒÎOzvîz%ç÷Ú—÷ˆaŽÎ4ŽßOKˆr2&Y}ʽ=+µÒåy´‹)dbÎð#1=ÉQIj¯ýuÿ!õþ¼¿ÌŠçW‚Ì]=ÌSÅ»"™Y>W/€6ã¯$ZÁë±y«âÀc.‚KFu?( [ 5¶Úl‰¥gI§Ç î”HÍ {a.ÝáYÚÁ' @¢¸}.ÖâoY\ϧdæéÓ|½¸ ' Èš‡M°¶²¶Ñï­ãÙuý®öÆmijE¾EÚOq€?*vÕ/ë°¯¥ÎãQÔí4›užòFDw®ØÙÉcРšM?W±ÕŸcŸ{D@‘3Ó*ÀùV‰oSPµÓΟ:bÕâ‡t‘±U‘IÈ#‚@ö?dÞ@I®ý¶F:žØC T(Ì?ÌÑŒ–Î ƒÎE%ý~ç÷ éýyÿ_3½º¹ŠÎÒk™˜¬P¡‘ÈÀ& ©<ÍÊH¡”ŸB3\"Eg;êñxmwiÏ¥ºÈ°çË3œíý¬g8öÍ5¯48¼/g …¶˜ašHÒòI¢ÌP¾ÂwH9ÈÇ$rhé÷~l?¯Èíîï ²kuˆ7ˆcÀÎX‚@ý Y¯3„[Éá«_µ´e¾¶C2©0ˆp@ p™oSб­‹µ;PgÓ Ñ mq <·Ûv²€ØÆåOúü.®ö=³îux,ÅÓÜÅ€Ñk; jŽòŠóým´ÙJþΓOAÝ(‘šöÂ\ »Â²ÿµ‚N3N·Òín&ðõ•ÌðjvNn0‡ËÛ€@’p¼É¡+…Îú©ê:¥¦“n“ÞHÈŽâ5Û9,z\>›amem£ß[Dzëû]íŒÛ‰f‹|‹´žã~U±â[¸u;K²ºehõx i9Á à0ÁÇЊK[[¿ù˜ûßúßüކÃR¶Ô£w¶ó¶¡Áó`xäàf­×#©iK6»¢Yjw©Dÿhr.áW ãéÞ±µ»d“Ä…½ýíˆÛØIs ³"mÂÁÀ6sÁ?…0=ŠómfÜÍ®ßCªêVv²lŒYÏu–hËBÁÀvr0Oá^²ÂŠï½Â€ÍŒdúÑÒâ¹HêðFPOð.¾Ë‘1½¹ Œ ÁÁ­ ó˸íšÂG½Ê?»\o\ª§#-í’)5±c6§j út!²Í®!gƒvã»nÖPÁü©t_×Kî×õ½D¢¸1¤[^ê1Z꺈‡E ìÉÜp㜃ŒsÖÚ ;¯ ]@ž\·ÖR¦æb[-êsž}éÛúûÿÈ_×åþgyEqž#ÕtýJ8§µ…ÊÈëy¨DÆ5+´ ®äõ#¥g[Kº/†Û[rúO•(•¤ÉŒÈ#ßíŒãYbËælÿg§N3šè4›;}+Å·ÖV1,­gÆáCîpH²ü¨·õò¸_CfãU±µÔ-¬&¸TººÜaŒƒ–Ç_aøÔWú厙/—tnÛ¿1ÚË"õU#µr7qjš×öž«ee«æ¯Øçk‚®‚8Ú»rÛ»Œƒ[® šÖ¤ÛÛ± ¬HŠø<ˆ‚—~CoãKuýuØ{?ë¦çAgwýœWvÎ^ ”:1R¹¾5=""ÆŠˆ¡UF¥¡‰y…Q@Š( Š( Š( Š( Š( Š( Š( Š( ¸ÿ}öÿxÿ:ì+ðçßo÷󠿏(¢¸(¦!—?êÍyÿˆ”ý¢3ÿMó¯Cœe qú환 s@ª·ÙbùOݪ]­ýÓùWŸÝø¶þÙˆE›þUãÝDùÙÿßGü) ôý­ýÓùQµ¿º*óøOµ/úÙÿßGü(ÿ„ûRÿ  Ÿýô€=?ktþTmoîŸÊ¼ÃþíKþ€6÷Ñÿ ?á>Ô¿ègÿ}ð OÚßÝ?•[û§ò¯0ÿ„ûRÿ  ŸýôÂøOµ/úÙÿßGü(Óö·÷OåFÖþéü«Ì?á>Ô¿ègÿ}ð£þíKþ€6÷Ñÿ ôý­ýÓùRª¶áÁëé^_ÿ ö¥ÿ@?ûèÿ…ðŸj_ô³ÿ¾øP¥[ÿÇ´_îåRWšˆº¸ ÜÐ ü)áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•M‘<Ȳnn^£Ü{×›ÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øPme¡Çi|/f½¼½¸XÌh÷.§b’ *Î=x«×p=ͳD—3[3c÷róÛp#ô¯;ÿ…¬Ðßþþ7øQÿ Xÿ =¿ýüoð æËLžÒ2M^þépG—?•·ëò ?­hךÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéU™u¥\\ܼ©­j6êØÄPù[WŽÛ£'õ®#þ6±ÿ@{ûøßáGü,mcþ€öÿ÷ñ¿Â€=š6šI™F ’cs{œ?!RWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øPou¥\\ܼ©­j6êØÄPù[WŽÛ£'õ«ðDÐÀ‘´ÒLÊ0d“›Üàù óŸøXÚÇýíÿïã…ð±µúÛÿ߯ÿ ôª+Íáckô·ÿ¿þÂÆÖ?èoÿü(Ò¨¯5ÿ…¬Ðßþþ7øQÿ Xÿ =¿ýüoð J¢¼×þ6±ÿ@{ûøßáGü,mcþ€öÿ÷ñ¿Â€=*²eÑ®e™ä]{SŒ3<«ì38úšâÿáckô·ÿ¿þÂÆÖ?èoÿü(ÒTmP  c'©¥¯5ÿ…¬Ðßþþ7øQÿ Xÿ =¿ýüoð J¢¼×þ6±ÿ@{ûøßáGü,mcþ€öÿ÷ñ¿Â€=*Šó_øXÚÇýíÿïã…ð±µúÛÿ߯ÿ ôª+Íáckô·ÿ¿þÂÆÖ?èoÿü(Ò¨¯5ÿ…¬Ðßþþ7øQÿ Xÿ =¿ýüoð J¢¼×þ6±ÿ@{ûøßáGü,mcþ€öÿ÷ñ¿Â€=*Šó_øXÚÇýíÿïã…ð±µúÛÿ߯ÿ ôª+Íáckô·ÿ¿þÂÆÖ?èoÿü(Ò¨¯5ÿ…¬Ðßþþ7øQÿ Xÿ =¿ýüoð J¢¼×þ6±ÿ@{ûøßáGü,mcþ€öÿ÷ñ¿Â€=*Šó_øXÚÇýíÿïã…ð±µúÛÿ߯ÿ ôª+Íáckô·ÿ¿þÂÆÖ?èoÿü(Ò¨¯5ÿ…¬Ðßþþ7øQÿ Xÿ =¿ýüoð J¢¼×þ6±ÿ@{ûøßáGü,mcþ€öÿ÷ñ¿Â€=*Šó_øXÚÇýíÿïã…ð±µúÛÿ߯ÿ ôª+Íáckô·ÿ¿þ«ñXcì{qÿmü(Òk‘ðêáÛýãüê­ŸŒu[¢°·Lû±­­ÐÆ ‘Í:x>ࢊ)€¬2*…Õ˜”ŠÑ¤ å®4ä$ìTøj2~àü«±Øj<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*Qá¨Áûƒò®ÇË_J<µô nÛCHˆÂŠÙ¶µVÂÚœE-ÿÙ endstream endobj 67 0 obj << /Length 3011 /Filter /FlateDecode >> stream xÚ­YY“Û6~Ÿ_Á§ Ue1^û–ÄÇ:e'Ž­lj+É%QmŠ”yd<ûë÷ënP¤4œïÖÖÔ@G£¯[ŸåìñÿÊ©a{¡'±“˜ÐóM”§ÉóËFßyuóýêæÛ—Z;±—ƾrV;'I=*'ŽbÏÎjëüîVÅI/þ\ýÎÀI½4Òq*¬,ÃLo³ªÏÊÅR§¡ÝþñݻՋ÷膾«½Å2Œ|wõëj¡÷ç÷¯¿{CëݼXÝ|¾Q|V5nx‘1ÎæxóûŸ¾³ÅÜŽïiâÜ2çÑ1¡ö¢”¾+7ãej‡Rå%Aà„1ÚDÓŸo¼À‚„&$OÅJ‹Ãxüöõ1už×Øó—{«/íòËÉú"Þ ¡iåÅq䄯÷|_‹ì^û¾Éa%_,å»oêl[T{îv¾ÍާÒÒÅ1Ûç-‹ò) -D~%/N#+•¤©\wBò”RôLNä¡ü'2ÙaF &õBHËøÚKU8'Ô ä}žmï¬8ji?ÖE5{gùP`œ›'ƒ _wøLGî&«,QŸr¡n‹î Ô±h[H•éz'm’–÷E›­ëÞ®¥|iOÅ—… ݼl¡î¯ÝÕ"ñ]æÝãB¹õ’NŠÓ-•òÒÐ^µÍŠ ø’'fâv¡øËÀèáe¢ÞçàjÆwŸa(2î¦,6Ÿd¶®¬‘NÍY…‰—@ÒÖJa€K×å§¢kglZƒx¿Y.òT”^.–µŸfW‚§®µÔ*ñÂÔ\ÊãmÍ™Y0öâ@?¶`èý¹¢w÷Ýj-éf– àÁóÔ’j`x“ï:Y”Õíûb˜[Ø@iãóž¨ï‡Üjô¥v+ßc½X*?™¤ /À±øÛwx^vA¸E—IBínóüd+iE}0ÕÉóÊè1¯zËg¿üng»-ïQÈJ§n[Ï=_çòqŠ8x” ×=d´S¬Ý6_ üÅVÑPlàÁCÝt›¾#+‰âÂhÚç€ý»wu/LlŸDtyÖKÄb;é`‹ÞY¹Éîe`âA ÖwÒ²ÕˆXÑ«+i­Æî¶îº|+tYTv4ë®ØºúäÍ™ô‡|SW£„ÌÜ,kÛb_]^‡;ŸÈøsX×Y³µ,›M^BŠ]ÍòÀs“G¹Ø=’ÝÇÅ‚t¸:(ÒŠÃqìþ”-`·ûEˆKå2O*Íí!ŸûT¨¬b©øîí¡@š¹;Ë®‹*ë ~ ˆô@°cÌ*»GWÏ oiÝĸ¬†ÔRœOÿðCDzD‡7ÿ•Ωb÷‡®)—odöÈFÎä:—µöu½Û›VœñÁÆÓIpJ8¸ÔO÷F&¸òpé“.‰â§ÖŒ¯<\‹‡Kñpît> ¤©ÈËEûSMvz‹¯#¼×!¯¦N€Fc~N±\Äf­âK*øã+€–øL”ÕPÎR0º«7½ýž]ãô‹c6 ÝÕl8ÞÚã[çåÓôII>L+bâ6“¦„Ô–Õôµ êZ ™à骬ýn@z½X*·Ÿ³bA(ð¬ÎDÁzpoÔY7ræ–å˳Òna„Ê=Ñ%ˆìN†3iÄ2ÙÆ¨ËH‡>>ÌÚ5íØŠJ©Í¤9eƒ"ÖvB°*–ÉòÀ^ƒúm±XwW¬ò2D}Å˪…ÆýA° šÅ>aêùéY·ÿYääönçâWêÅæ)ËóÃá{\±ÀéÄæIPE¤ç埉iàætaܦ»c Š[ü¡u ÊÊ 6|l®ÂŒÞ8‰¬“Ï™5›ƒ ®ë/BPÈ¢IËIÈ‚‡KÝÕðá¨Kôå….a–•~î5ŠöT²FÑ6dÄm 5y™q•=dP.‡ÀK‡€Ìž×ýºÌ—ÄgVÍGŠ@Sà¿­‡¼ˆï*ceöþ×l(`UÈË´@·¾>¢ôz’ ©³!»Ár²Ãýl(ˆ#AeRÏÄf.R¾M‡~„ka?ž "ÿŠ<WÀ•ð¶‚Qê£õ‰í]ka¥N%ÀÖÕ7”§w2_æÌ‰#ÄH¾-ìЀüÖIwm±ÙCZ϶ÍwÅû²#-0pŒdM‹É˜.cqà‡Ö­„~~ 7öâ™tù8ôE•³@IÐÂU¶ž‡'Ý€ KlÎc +}öX2óY’_›Š¼kpc[“W›|ÎA°«ä«ó·ð E9JBþ&ÍÙ ­³fnª«ŒùÓsD!R0Ê94Z%s¤Xó¢ꆰ涓!òÜ“)ä½¼p sC‚è1ÆüõžnØç#)ea³¡u¢ÈjÐÃAÐ+ ™:f[K±#"BNbðg¤KPšr5Ë1w~ÈÔ„ãÑ3øh´o*a…ÃÈ1³XDæÙµb@rèì0KB&ú–’ûÏìÿ7¹°új…ù?&ÃW…„Óe>ü=§zÎbL ¿e®•À8ÕÉ¥òýÆqÑhFýßÐy‡§6p8kzû¾(;aaIÓøí¡.óaŒ;#ëzÒ šjsËÎQã!%¤çwB4"B¸“ôs°až}  I[1l¥ñuÞÝæ¹´Ê€ˆŒÉ2`{8²nNÿ¦šd¤ì„a X¥ê¶è,ë×›÷_ Eλ·º—Y¥|ÿ‹¿,sjêõ,Ê*%€#ã,‹óI(ÇFöxb$g³<¹¶­…”\³ŒõpêXjW‡c‚ÇÂØ‘Çúl*´]eÇÆœ†ç‹]rZ«¯Ê´žÄ{ñˆ÷²2#?4³PÂ…ÍIzuU}Z% 噫B%ó’á†Ðûì\£I¬äˆbÄeÙH7;e UK¦Y+P€ýÌ–€b—ñ)솙ܦÌNs‡vSެý€W&î+º/%&jGE§¬¨šQnzÂy–1“¦%È@Ã|ßÎ>ùǾí!ˆ‰–À‚MWS8Ѷ$A-nX FÛR 2¹>,Êh«1ÄÉS5ëæóÁ“lÛ«»`TqQƒw˜ø§•x‡ òm-'L¥,€V@FȾĔh¼ä´šÆ'Ép%sÙ®£øBäñ¬¯³~i-jH  ñë×6ŸÓÛÈD?m‰§Ã'âG…^v¸A!õA6‰P6ø»™dÇxþø%W•| y”°íO«^èpä·ÆbŒ§buyy›^Ó±ª¢íOK›V2°o²mÏF5bµ§lc¥ŒDDß1N'˜O´RºsxØÞlR‹DZ6ë×Lâ™ó£¾´•·ë/¯ÒÇŸtâô†ûj¹oº¿F¥«ÀkØëÍ€Hß Æ¨°¡âótþöRŽTé:ª¡´bˆHn}/†MÎÂk¸v¨ ááWÔHñ6 ‡r"ýq]eE)])Y¦¶Þ1„ÝÇq×¥pØ|÷À%Ám<ᄬÚÕò‡ð 0 ³°ùœöá5¡#Û2o ==ZÎXj¿\¦«¢sÈaÿ7D•7Û¹sòOaØ N‘Úõc…ÍÔÛsˆÊ§ð°Š MÝï63·‚ÂÖàÛçJ‘ëûw¸þá8Uç, ®†{„“ß?’ƒT%¾ôØ„Ýx)e.µ>•úËò„霢©Î¤.û\¨@I+¶ mÙõœJ`h›wP¦V:V›¤¨œ¢jòó—ÇLJ%ðWZ½ÍVÔäÇvW‘î}ß3ž{8öPd#äI¥´V:³&^h¢§Âès+` N@6u¹ò:³Cèù£dÚ!œfÊ€ó°C{ê³çFÇêÀà(Šé+7yèçOÅÄÉþëî¼,&3iNR0ç-³ßÉØ®¯XчNÖ>Ü’àÂE …,FÁ~¡ŠpT*±±ây¾ÉëÜZ>ŽùÜÆ +;»ƒøb¥«›ÿB‘qÒ endstream endobj 58 0 obj << /Type /XObject /Subtype /Image /Width 712 /Height 557 /BitsPerComponent 8 /Length 53711 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream ÿØÿàJFIFÿá°ExifII*JR(i‡Züÿÿ)( üÿÿ)( 0210‘ 0100 ÿÿ È -ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀ-È"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?÷úBÀPdzo¯RÞ6v`ª£$“ÐPÖW½DowãZ·Å;É.tËxE¸8Y&‹ûàÖ²ÏÄq»Yÿß—ÿâé\xûjxQöÔþð¯ÿ…®zYÿߦÿâèÿ…®zYÿß–ÿâè¸õöÔþð£í©ýá^ ÿ \ÿ§?ûòßü]ð±µÏútÿ¿-ÿÅÑp=ëí©ýáGÛSû¼þ6·ÿNŸ÷å¿øº?ábëôéÿ~[ÿ‹¢à{×ÛSû¶§÷…x7ü,]oþ?ïËñtÂÅÖÿéÓþü·ÿEÀ÷Ÿ¶§÷…mOï ðoøXºßý:ß–ÿâèÿ…‹­ÿÓ§ýùoþ.‹ï?mOï >ÚŸÞàßð±u¿útÿ¿-ÿÅÑÿ [ÿ§Oûòßü]Þ~ÚŸÞ}µ?¼+Á¿ábëôéÿ~[ÿ‹£þ.·ÿNŸ÷å¿øº.¼ýµ?¼(ûjxWƒÂÅÖ¿éÓþü·ÿGü,]kþ?ïËñt\yûjxQöÔþð¯ÿ…‹­Ó§ýùoþ.øXº×ý:ß–ÿâè¸óöÔþð£í©ýá^ ÿ Zÿ§Oûòßü]ð±u¯[Oûòßü]Þ~ÚŸÞ}µ?¼+Á¿ábë^¶¿÷å¿øº?ábë^¶¿÷á¿øº.¼ýµ?¼(ûjxWƒÿÂÅÖ½mïÃñtÂÅÖ½mïÃñt\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿâèÿ…‹¬úÚÿ߆ÿâè¸ñöÔþð£í©ýá^ÿ Yõµÿ¿ ÿÅÑÿ Yõµÿ¿ ÿÅÑp=ãí©ýáGÛSû¼þ.³ëkÿ~ÿŽQÿ Yõµÿ¿ ÿÇ(¸ñöÔþð£í©ýá^ÿ Yõµÿ¿ ÿÇ(ÿ…‹¬úÚÿ߆ÿã”\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿã”ÂÅÖ}mïÃñÊ.¼}µ?¼(ûjxWƒÿÂÅÖ}mïÃñÊ?ábë¶¿÷á¿øåÞ>ÚŸÞ}µ?¼+ÁÿábëÞµÿ¿ ÿÇ)ábëÞµÿ¿ ÿÇ(¸ïöÔþð£í©ýá^ÿ Xþõ·ýøoþ9Gü,]cûÖß÷á¿øåÝþÚŸÞ}µ?¼+Â?ábëÞ¶ÿ¿ ÿÇ(ÿ…‹¬zÛþü7ÿ¢à{¿ÛSû¶§÷…xGü,]cûÖß÷á¿øåð±uï[߆ÿã”\wûjxQöÔþð¯ÿ…‹¬z×þü7ÿ£þ.±ëkÿ~ÿŽQp=ãí©ýáGÛSû¼þ.³ëkÿ~ÿŽQÿ Yõµÿ¿ ÿÇ(¸ñöÔþð£í©ýá^ÿ Yõµÿ¿ ÿÇ(ÿ…‹¬úÚÿ߆ÿã”\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿã”ÂÅÖ}mïÃñÊ.¼}µ?¼(ûjxWƒÿÂÅÖ}mïÃñÊ?ábë>¶¿÷á¿øº.¼}µ?¼(ûjxWƒÿÂÅÖ}mïÃñtÂÅÖ}mïÃñt\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿâèÿ…‹­zÚÿ߆ÿâè¸ñöÔþð£í©ýá^ÿ Zõµÿ¿ ÿÅÒÂÅÖ½mïÃñt\yûjxQöÔþð¯ÿ…‹­zÚÿß–ÿâèÿ…‹­zÚß–ÿâè¸óöÔþð£í©ýá^ ÿ Zÿ§Oûòßü]ð±u¯útÿ¿-ÿÅÑp=çí©ýáGÛSû¼þ.µÿNŸ÷å¿øº?ábë_ôéÿ~[ÿ‹¢à{ÏÛSû¶§÷…x7ü,]kþ?ïËñtÂÅÖÿéÓþü·ÿEÀ÷Ÿ¶§÷…mOï ðoøXºßý:ß–ÿâèÿ…‹­ÿÓ§ýùoþ.‹ï?mOï >ÚŸÞàßð±u¿útÿ¿-ÿÅÑÿ [ÿ§Oûòßü]Þ~ÚŸÞ}µ?¼+Á¿ábëôéÿ~[ÿ‹£þ.·ÿNŸ÷å¿øº.¼ýµ?¼(ûjxWƒÂÅÖÿéÓþü·ÿIÿ [ÿ§Oûòßü]Þ¾ÚŸÞ}µ?¼+Áábëôéÿ~[ÿ‹£þ6¹ÿNŸ÷å¿øº.½}µ?¼(ûjxW‚ÿÂÆ×?éÓþü·ÿGü,msÒÏþü·ÿEÀ÷¯¶§÷…(¼CÜW‚ÂÆ×=,ÿïËñtáñ#]^Ö÷åÿøº.¿,êÝêPÀ׌xâ|ò_GoªCÇ! &ˆ }Á'|ñ^±it%PA¦…€äQ@Ìp¦¸/^еÛÈ?ñÓ]ÝÉÄf¼ËÇŽ²¯Gý1ähÇ7Qº¡ÝFê‘—¬-$Ôoc´…âY$$)•Â/Lã'¿aïZÚ§„õ ?RžÎÙ†&Š:+,kŒ³)n:ð2I¬ {©­.c¸·‘£š6ÜŽ½T×Cáÿ*j³¾µw3Cqbö^qÌJqƒÉ:/3:=S•ìR;Ff¿Rö :þ𧯎)ú†«ésÁ 턱IpvÄWÞ}RFyé],:þ‡c­ø`E¨´öšd2Ç5ÇÙÝ9e |¸Ï_­f.µf|?¦Ú-ûAuª×Ä,ÞTg8p1ƒÉÎÜÑ×úïoËPþ¿…φõ«;»[K‹Iî‰XSÍC¼Ž£†ÀëßùCï>€©<ûu®ši6~+ÒŸOW}ÅdƃºLî`‘ªú§ˆì­î4Óc}myioz.šÞ 8Ûm#ÜðÄ‚i­lÊòøJïN𾣩j–²ÛÏEöu2)3a²>½ñX1X]Ïa5ôP¶…Ö90ùYº g<ý+§Õõm û]Z¤·7:­Äsˆ^ÙÐņÉÿ­Yþ Öì4»»¨uR~ÃpŠÇ [÷ˆÁ“€½%»¿õ¢þ½Aí¡B] U¯K'V²(.õ% ýÑÁù³ŸáÍ;Qðö³¤Ú%ÕþŸ,99*@>ø'Ž+£¾ñŤÖzeÌqî¾{¨çÔ)ð£$`çƒÇLT¶·¢Ç¦k‹a=ìúÄÉ!ŠH¸ »’~ñíÇ £úü¿àB-#ÁºÖtøµ›`²¹v]ÂTÜHF`8$»éX“éðÇÆÕÄW2˜í¾aºR8\î?\bº'ñ”ß`ÖEÏú 7”ü~è¯ÝÆî¾Õ_Y×4ýfóKÕ£¿{+ødXæAºÆªr² Æ1þÎúïªFfÏárÚòÚÒm=–âëp†?5 | žÆ®*-GAÕô™aŽþÆHZfÛYX1ôÈ$gñ®ÏO¿Ñoüi¢Kc$W‰yMÕÌÍIû¶Á*ßÅïY7:¦a§Úéê]R©ýªäù DèP×ðëÍ upïýw0õ/ë:D÷öB²¶Ä!•ÁoO”ž}©×^Öì¾Íö6T7M²Ü¥ºãh$Ä éõh–ÖVÉc<-Q.Ö {n1Øä[Þ©¦¯ é¾0ÄVúœ·¾tîÒÛ›VW…]HÎãÃc `v¡9ýSEÕ4SÔlÞßÌÎÂYX{©#>ÕŸººOjöw6ÙéúµÍ¿žf1A§o,ã'ø‰ÉÎcìù:L–Ùšd›Ã´ÉmºuÏ£çŒvâ’/h~¹×ìõm3Ú)óKüD€0¨¬|9¬êMp¶v-1¶Ç( Úèå† ÔþÔ4ÔÓ5/RºkHïãŒ$â#(RŒN ŽyÍiøkRðæ™Ùn ŽêÝâêk”Ëè‚c=ý©ÛRz´ß Üê¾¹¸´¶šMNß Â]P*…²äúÕ-'×zž°úl²Ee$LSpÀ$à¹Ë@?>kmõT²Õm.µY,–mXÞÄâÙܲ`c¯JÌ»ñ÷Ä(u“º+5¹‰·2’Ûq'·J#«Wþ´C{;Z³þÜØê7Ve÷˜&x·ã¶’3ŽÝ*¾ê³ª^E?ˆ// Û,/tò¦õ;]K’28>”jš·ö£ÄßÙÚu—–Å¿”?Þ俥^Êã{²ðð¾ºÚ`Ô—MÙ˜üÑ t9Lg;s»ö§K'HšÆ+™®ïÞTJ;ðó‘Àç5¹eâm&WE™îÈŠÛHû,çÊs‰1÷qŽyî8©<#©ZO7„´øåÝuk-Ñ™6‘´2±ãð5VÕÿ]Ééëc™½Ð5=*æÞ-RÜÙ,ìM#AêIRzuÇZ³©höš2ê¶´z…·Ÿöy¢*øÏÌ=êö£{¡Ã¤[è1j’ÝDú—Ú..>ÎÈ N„rIêxÏzgН4k«(¢Òu”kKl }=,äN¿yË·ºòi_B­gc—ÝFê‡u©ˆ›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Uí/O„®Ò»$ðvõcè+/ujiWkr[±ÆöÜ9ÆxóøP¼º™$ebBøáÖçÜþµsðØË.¡ö"B¸bº€óë[>d|á¤wi˜ÈœVd7Àj¯txI̞ÌÒaÑ#‰•ãº}™ 6Ù8Ç^ƒmdjsYÞ,L«'1çœ`ûÖ‰’Sk4 BD›ðÆCŸ˜“Óo¿­V¼½ß}nè7}·ýNAÇéC½´muszËÃú5²$WÌgºe,G˜T uÀàzšËÖt«kh÷N•žÕÈXçnz{Š¿?“ªB›¦Í¿ÞÉlc©éŒœŒsÐñjëWØÓͫȯ3íÜTc€AÎ;tåQÄT•D¯«ÝGŠÁÐ >T’Z>æêúÃwfkX‰9%E|纽ïÂ,M¤?îŠõÑóGÊŠ)°ýÁE0uþ¬×˜xóþAwŸõÉÿ‘¯OºÿVkÌxD_ïà”êÖ{DWQùNQ\Àü¬)à÷Töú{\i——Ë*„µ1‚¸ÉmäŽá@wT]Ok2Ím4Ê¿vHœ«ÜȨ)8 úÒÐË’I$’y$÷¤ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(C+–„“KçAQQ@ ˜  zqJ³”èò¨¨  w"P”'®Ö#?‘¨ÚRÄ’zÔtR²½ÇÌÚµôº½ûÂñéû¢¾¯ 0ÿ GþLÃÿÅÒŠ·áø[ü†õüÿŸõr꿈`ñ=ßÛ-5;™9 "lË{ÇÏ9ã·ÐõËø‚ÞK]vînÍÜi›ï1 ›“ÈÎ=Emÿ±ñ‡ý?òfþ.øV>0ÿ GþLÃÿÅЕ­ä6ïs’®¢k»Ko hbçL‚ð³\m2K"mùÇMŒ?Z—þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.˜°Ñ¶¥©IiÿÚÒÈÁœÊ“,~PÜ#.¬»žøïÖ²¯ä{Û?°Ékp«lòÁ#!ÛÎpÉÈ'½Cÿ ÇÆôÿɘøº_øV>0ÿ GþLÃÿÅÐÕÝÁhqu>²ºš·ö"ÚŸ³y¸Ø%Ú»<¿Cž¸íœ×œWq¨øƺ¦¡-äú2,’X%Ä@tÇj©ÿ ÇÆôÿɘøºIK•Öÿ±ñ‡ý?òfþ.øV>0ÿ GþLÃÿÅÓ’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*÷ÿǤ?îŠòßøV>0ÿ GþLÃÿÅשxCþ=!ÿtSB=¸(¢¸(¦.¿ÕšóÈ.óþ¹?ò5é÷_êÍy‡ŽÆtÛ±ë#@•bØÓ-qÿ<“ù ŸÌ>Õ‡©Hñø.åãfG]=вœ|¾ Õ$Ô/ôß [My¨X¬òˆÖû,œ®q°9go¦>”€éžácÛ½•w£'>”ÿ0ûWu«ÞkZF—2, y²°hÝc,¡°ÛN ‡šßÓïõ+¹u-.åí¡Ô-B¸†2c*à•m„ç#ŒÓ¶Ÿ×—ù‡_ë»G@“Ú©GÿWc·š?ô¬¿ IrÚ}â]]Ku$WÓÇæÊrHVÀöAÅjEÿ7õÔè CKERQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEɦŽÞ '•¶Ç—vÆpÉ5ZÛSµºŸÈŒÌ$Ú\,nÿë ÿЭUSÊO3ư²ÈÁ†é#åû§Ò€%¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ¤2J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠÏÕô‹[Û+Æ[y/$…‚HÑ®íÛp¿1ü+FÑ.ŸS/ªéÈmÄNM²A¸•ÇžÀó]V.ÿç•¿ýþoþ"Œ]ÿÏ+ûüßüEa<<'57º%Å0EoÅIkÑBø ã|#Ŭ_îŠëä–x|ÑGå¼É!%G® Šä|'Äýn†wÐ}ÁE}ÁE0uþ¬×x¤n8õ8¯EºÿVkÏ|H3qõqü躲ÿ}¯ýqOýTõ—üƒíëŠè"§ ¯ü~Çÿ\ßù­X5]ãö?úæÿÍjÁ Ÿ¥UnµiúUVëH;Ç—[YšY#VxRN}é^c6³c<†4¹¸” œ|ýçø€¯Dø•l.´èïÈž öâqŸÖ¼eôˆb¼’Þ‡œ>Ó×?ðä)®ºÝŠÍÁ²Kü í\þy¥µ×nu5û5¡ŠÎ¥·¡ÞÇž{Â°Ž–¶–ò;`Q@gð:ŸéZ:-½¶ž‚Sù³µ|Ôd^œu  d¶TCšÑ—És(ì}O©úŠ¡*K·÷(oõhó<ð+Fá•c10„bI˜™ì>œVDÁ\³p§%Ò0Â4÷\p~”YndbÛáÉ\ˆ¤PQ²z–ÇÞtš^–Ö–&3ò™ ¼ø<·¢çYÚT÷w^yDãw Óù=½«¦L”Ræ-‘ÇW=8 v¤¬€v`wcÎ? S·Àä¹ä“ÜãùSçÙ£ ˧¾ÞíøÓ, û\ŒÑ/îþîïAКնWDbU–¹¾µ ÷!–Ü´eRNÞ åƵu»ôÓô×*²¯bqØŒt®ÂÉs­Ý\8tDà{° ÚŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š(  þB‹ÿ\¥ÿÑm[¾â$…¢ÈQ딿ú-«{Âü  ò¸(¢¸( ]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@Õ—üƒíëŠè"§¨,¿äkÿ\SÿA=5ãö?úæÿÍjÁªëÿ±ÿ×6ªÕ‚('éU_­[pqÒ«ºœô¤;â-5uU’ÝÜ"……²W=åÖ¹u𒻸”o|‚Ûy÷Ý]­ù>uÁLXâï?Qù×à:K¡p÷ÇËûpóX¼°ß„þ ôyØŠÕcQÆËNΈF.7h©sá=¡ž «øãŠA'™”PØ ¼–ö5rßÁÖpijA}ˆ¶ä0É]½s÷±ŠŽ CO°]Fx§Šæ7º-帟zï1ŽK±<sϵkY\iz~‹¹»†â ’L2º©Ëãc'¥aä/þ½ð‹ÿÓçþBÿëÖ`Õ¤“OŠ8ïd70is›…óô•Bà°ëœçûÕ‹2×ív«©É F&ßsrÜÌ|Âw(` qÓµ7[·—à»Ø9aØœxv3pÐ Óæ*‡#È8ÁÈçIÿ¿ý>ä/þ½fÿiÏ%¼¯—0À-áÜL­!Eó]ÕŽsò½éƒO†d¹›ìÖڅ̶m¨¬k"]9%|ÄÎq»ÞŸ¶Äkïmä…ËÅÿøEÿéóÿ!õê9ü;µ¼“Ë}¶8Ô»+8d÷¬û‹Ë´†ÚnÙmR[˜ŒÒÝ´*ø@Ò'8Ï®9¥Õ&±I«¨2ìà`h¦)òÛ¹Ü~ï×¥ ¶#O{ðCä…íbëh(„›ã‰ˆ ˆ ÉÆ}xàw§Éᤊ6’KõDQ–fRsW.¤’(ôeGd2«€q¸yNp?*ÁÿH:<`\\Î×Ú\ï"I+I—pTq÷¦8Šïí~ ÏËÈ!¦† ð¸#"÷ ÿÓ/þ½/ü"ÿôùÿ¿úõŸ{yÁ`¶Wßñ/u}ó>¡"'Ë€dÃÔü¼åMÔ¯&†ÕÆ¡©ôEw)Ô£îs¨›ÇImK«[g@6í!»žô{zû©þ9 ºZÿ‘kþú|ÿÈ_ýz?áÿ§Ïü…ÿ׬ëy¯­ì-f¶¸¹šâëN–R²HÒfEÚAPIÁùŠÓÑ'I5Îòk»?!YÞY ›eÏ@OCŽ«ÛŽ¯ˆI¾oÁ$; ÿ„_þŸ?òÿ^øEÿéóÿ!õë¡¢±úíæü~ÊŽ{þú|ÿÈ_ýz?áÿ§Ïü…ÿ×®†Š>»_ù¿ÊŽ{þú|ÿÈ_ýz?áÿ§Ïü…ÿ×®†Š>»_ù¿ÊŽ{þú|ÿÈ_ýz?áÿ§Ïü…ÿ×®†Š>»_ù¿ÊŽ{þú|ÿÈ_ýz?áÿ§Ïü…ÿ×®†Š>»_ù¿ÊŽ{þú|ÿÈ_ýz?áÿ§Ïü…ÿ×®†Š>»_ù¿ÊŽ{þú|ÿÈ_ýz?áÿ§Ïü…ÿ×®†Š>»_ù¿ÊŽ{þú|ÿÈ_ýz?áÿ§Ïü…ÿ×®†Š>»_ù¿ÊŽ{þú|ÿÈ_ýz?áÿ§Ïü…ÿ×®†Š>»_ù¿ÊŽ{þú|ÿÈ_ýz?áÿ§Ïü…ÿ×®†Š>»_ù¿ÊŽ{þú|ÿÈ_ýz?áÿ§Ïü…ÿ×®†Š>»_ù¿ÊŽ{þú|ÿÈ_ýz?áÿ§Ïü…ÿ×®†Š>»_ù¿ÊŽ{þú|ÿÈ_ýz?áÿ§Ïü…ÿ×®†Š>»_ù¿ÊŽ{þú|ÿÈ_ýz?áÿ§Ïü…ÿ×®†Š>»_ù¿ÊŽ{þú|ÿÈ_ýz?áÿ§Ïü…ÿ×®†Š>»_ù¿ÊŽ{þú|ÿÈ_ýz?áÿ§Ïü…ÿ×®†Š>»_ù¿ÊŽ{þú|ÿÈ_ýz?áÿ§Ïü…ÿ×®†Š>»_ù¿ÊŽ{þú|ÿÈ_ýz?áÿ§Ïü…ÿ×®†Š>»_ù¿ÊŽ{þú|ÿÈ_ýz?áÿ§Ïü…ÿ×®†Š>»_ù¿ÊŒ[=ìSµÇÚwìŠO—ËÆr„zûÔÞû£ëZmþª_úäÿú ¬Ï }Ñõ¯OVui¹MÝÜç«dwp}ÁE}ÁEv ºÿVkÏ|Eÿ1×EþuèW_êÍyãæ/úè¿Î€;«/ùÚÿ×ÿÐEOPYgû:Û|”ÿÐEs¶:_ˆàñj3ÏfÑÌvÍÎäy}‚Go^}h¤› µrr cóÚ£6·ÝÿÉÉ?§_øýOúæÿÍišž£•§M{q¸Çäª ³€Ü“€>´€®Ö—?ÜÿÉé¢kkîåBoð© Õìî´dÕVO.Õ£ó IÁAÜ7¡ƒôªöZ—ö€w[K¨#Øó O0àg#ñ€Åñ>°Ú6вAh¢ä,±“¸œ£Àäû¿^¾•ÉEã=BDýžÜFßtìcÇ¿Í[gŠÚÎÚy£g.m‹`ãoó\"ÚË$’ÿg•Äçt¹Ûžàb± sw’»)NKDΑüg|¸ÄV¤gÃcÿB¨“Æš¤Œa´úÄç“V麅º’Vp²ž}zÓìÄísµ‘@üoÆ~€ÔýVòÚO¹ÚræHÂãÄ·úœ‰æ[Z;l»ó%T`yåCí?CZ0ø²ú î–¶©æœ¬M̘ÆOÍÓ€+Œµ¸’ÝÒ9B,©û¶ÁãÐçמ•ÑYQPÜ[8\ãòíGÕ©ZÜ¡í%ÜЗƚ´GkCjNã’ rzðÜÖeçÄM~ÖäÂ,ìç?êÜ|½Ïßý* â”]«"2BøIãè*…íªÍqïˆÙ PªìÇsÖ—Õhÿ({I÷'Š~%†é–m.ÌC¸íÄ2n#é¿úV‡¾"ëz®¡$VVpªÆ\mF œ€3—=r³ZËsª€#@Ã(ϯçÒµô;y#»if6#Ä8ãŽÞ”}Vò‡´Ÿs¸ÿ„–÷þyAÿ|Ÿñ£þ[ßùåýòƱ¨£ê´”=¤û›?ð’ÞÿÏ(?ï“þ4ÂK{ÿ< ÿ¾OøÖ5}Vò‡´Ÿsgþ[ßùåýòÆøIoç”÷ÉÿÆ¢ªÑþPö“îlÿÂK{ÿ< ÿ¾OøÑÿ -ïüòƒþù?ãXÔQõZ?ÊÒ}ÍYõû«ˆZ)#ˆ+uØ]àC)–šÌ¶Q´pA Û˜±vf>¤–$þ5›E?«Rµ¹CÚK¹³ÿ -ïüòƒþù?ãGü$·¿óÊûäÿcQKê´”=¤û›?ð’ÞÿÏ(?ï“þ4ÂK{ÿ< ÿ¾OøÖ5}Vò‡´Ÿsgþ[ßùåýòƪ]êo|á®!Gc`’EFêñFŠk I;¨‡´—sgþ[Ïùåoÿ|Ÿñ¦>¿q$‘»ÛÛ3FK!*~SŒg¯¡5“E/ªÑþPö’îlÿÂK{ÿ< ÿ¾OøÑÿ -ïüòƒþù?ãXÔQõZ?ÊÒ}ÍŸøIoç”÷Éÿ?á%½ÿžPß'ükŠ>«GùCÚO¹°|IxÊAŠÜ‚0~VÿH¼Cs IP[$h¡UBœ:µ‘EU£ü¡í%ÜÙÿ„–÷þyAÿ|Ÿñ£þ[ßùåýòƱ¨£ê´”=¤û›?ð’ÞÿÏ(?ï“þ4ÂK{ÿ< ÿ¾OøÖ5}Vò‡´Ÿsgþ[ßùåýòÆøIoç”÷ÉÿÆ¢ªÑþPö“îlÿÂK{ÿ< ÿ¾OøÑÿ -ïüòƒþù?ãXÔQõZ?ÊÒ}ÍŸøIoç”÷Éÿ?á%½ÿžPß'ükŠ>«GùCÚO¹³ÿ -ïüòƒþù?ãGü$·¿óÊûäÿcQGÕhÿ({I÷6á%½ÿžPß'ühÿ„–÷þyAÿ|Ÿñ¬j(ú­åi>æÏü$·¿óÊûäÿð’ÞÿÏ(?ï“þ5EU£ü¡í'ÜÙÿ„–÷þyAÿ|Ÿñ£þ[ßùåýòƱ¨£ê´”=¤û›?ð’ÞÿÏ(?ï“þ4ÂK{ÿ< ÿ¾OøÖ5}Vò‡´Ÿsgþ[ßùåýòÆøIoç”÷ÉÿÆ¢ªÑþPö“îlÿÂK{ÿ< ÿ¾OøÑÿ -ïüòƒþù?ãXÔQõZ?ÊÒ}ÍŸøIoç”÷Éÿ?á%½ÿžPß'ükŠ>«GùCÚO¹³ÿ -ïüòƒþù?ãGü$·¿óÊûäÿcQGÕhÿ({I÷6á%½ÿžPß'ühÿ„–÷þyAÿ|Ÿñ¬j(ú­åi>æÏü$·¿óÊûäÿð’ÞÿÏ(?ï“þ5EU£ü¡í'ÜÙÿ„–÷þyAÿ|Ÿñ£þ[ßùåýòƱ¨£ê´”=¤û›?ð’ÞÿÏ(?ï“þ4ÂK{ÿ< ÿ¾OøÖ5}Vò‡´Ÿsgþ[ßùåýòÆøIoç”÷ÉÿÆ¢ªÑþPö“îlÿÂK{ÿ< ÿ¾OøÑÿ -ïüòƒþù?ãXÔQõZ?ÊÒ}ÍŸøIoç”÷Éÿ?á%½ÿžPß'ükŠ>«GùCÚO¹ÑéúåÍåÑ‚HáñI’ ç„cëíW<1÷GÖ°4Où /ýr—ÿEµoøcî­k q¦­b\›Üîàû‚Š û‚б ºÿVkÏ|Eÿ1×EþuèW_êÍyãæ/úè¿Î€;«/ùÚÿ×ÿÐEOUìÀm:Ø0 ÷ùEsV>¶´×Ú숚Î3æAߘ?¹ô¿N@:øÔCcæ @>ÇáX"ƒQÔuM6ÊÉU#‰Ü³O •º—b,¢íQŒc¦À  ÂÑ+2öOþ½=ÉBâ¡o~•½’ë ç!:ç?ãQM0dÎxëùÐ.ö2^j³5Ê&æ$Þ…{óÇò5,š-Ê([yFGÜ#¡üMk^: Už1Ò˜ŸC’?‘©æˆË‰!pŒž=ýs@"ßUŠ'D–Y°(ƒëx¬ùÍô+¶K¶@Ý‘Æ@ÿ¾xÕHê-©1Œ¤m#†Çø:Ï»/qn[¥¸vP8õË5Ýã’¦ë>èTSÜð¢´<',ÓêÒÉ$’²O3Œò¹ zvªwqȯ,eä'Ýc’}0y?ãZ~E}jîT9Hâ '•c𠮊( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š(  þB‹ÿ\¥ÿÑm[þû£ëX'ü…þ¹Kÿ¢Ú·ü1÷GÖ€;¸>࢈>ࢀuþ¬×žø‹þ>bÿ®‹üëЮ¿ÕšóßÇÌ_õÑwV_òµÿ®)ÿ Šž ²ÿ}¯ýqOýTôÕÿØÿë›ÿ5««¯ü~Çÿ\ßù­X4ôª­Ö­?JªÝiÀüQŽI47XÝ—æ„§¨Û?ʼïFÒÒÒ5ór€ç“ÜפüKÜ4Êãƒs陫‰SŃasŒçÿ­L ¼ß !FpG¯?áWÚÜi–ÏÍÏVl70™FWp$ŽÀÖê b2 »”Œ{Š«¬náq„ 3šŠ8Ìs˜J…¹ý¿Z|‘l™rØ^ƒ#Û¡«7¿cÆê&¸r~ö{P6ž­ç_>2êË˲çWa)¤Â<‡U+–~ws“ø~U¬ñ¶£~§Ï+(¹P§õŒ›ÙíÁe*Á[œãGùï@[Æai³°ÇÏî}…RŽØXI/šâFHò¬26Œž:úŠÖ½–8™æe1Îk3XhÒÎYŠ£H±°V8ÈÏÿ®€9IZKJÌ“ó|Àc¶G§~3ZžM—WyR ;öÀàŽÝkNv¸¹i›8@2I=N>™­? ³I©Îä¥dÇâãüþÖÑEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE¡¢ÈQ딿ú-«Ãt}kDÿ¢ÿ×)ô[Vÿ†>èúÐwÜQÜP.¿ÕšóßÇÌ_õÑz×ú³^{â/øù‹þº/ó êËþAö¿õÅ?ôSÔ_òµÿ®)ÿ Šž€¿ñûýsæµ`ÕuÿØÿë›ÿ5«€"~•UºÕ§éU[­ 8o‰y: ÈD<ÿ뫃ŠXÞÚØ†-•ä〸¯CøŸK–2»òxõâjó-«¤Éª@~-'êOéõü(žÖuÛ‹ï&8cž`“Îg•v–#8zsY×zíæ« VÐÚMåÊv’üßáVî¼7¨eà«}ÏœzzuÇéIþ£á¸`I>Ç!eÂJÀ† Ûžÿ•> Þ5¬hè¶Ù;K> ö®ŸNÓtý>-¶Ä4ã‰<Ÿþµr3êÚµãäÍÆ>P‰¼|ÿž•³áx&+5ÓÈìŒJòÙç®}¨¢¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(KDûDþ\¿ú-«wÃÖ°´Oùúç/þ‹jÝðÇAõ¬(¶ÜïßüެLRTì·êÎî¸(¢¸(­ÎQ—_êÍyãæ/úè¿Î½ ëýY¯=ñü|Åÿ]ùÐueÿ û_úâŸú©ê /ùÚÿ×ÿÐEO@ _øýþ¹¿óZ°j°!o",@A>¹^?CVH Ÿ¥U~µq”‘UÚ6ÏJ@`kvj.ñLX*¬,6ã9Ì£¿Ö°ÓÂzlm¹<Ålç+´úô®’ô™$¹hˆ;V8÷v7’? ¸¨­öBš}Êß,ßœÀ~‘ž‡¡¯3R¢ªÔee§âtSŒynÑ+éº<&ê'7auÂG¿q`€ªIüª{oè÷Éuo#˜›çWG¶~ïµCb––Ñê[,o ²žd¬òÆãä ( Aæ´4_2 6ÖÊâÚQ¹dÛº>|¡ñÀb¤}y¬'ZªZIôü‹QTW±Ò´«Ûw6W“I ¹F(ÃnG^ÜÓáðý¤Ñ~׫ØåyÁê:µ.žZÂ+æ{i¶µëlTŒ’Tíéïè+‹I.í…å«ÝÀf¾!/>hÁÀߟzZ²nÒÒ¸8Åt6O„´ÒA"BG¿áRÂ5g‚<ÛŒœná\åôA¥Èu{i¦a§âز<—Ë}ìgkcgÌ}:×cev—lJ®ܬnHࡸüÅ)Õ­u;‚ŒµŒ(4Íéå’'¼cmÒ ƒ†)ƒÈè éQ®…á½J)d—[õŸiŒ!ŽáÔ1Þ­é®ö×’‹hõ§¤,î“ÂÀ¬›²d9ùºdt©4kuk½A– ±ÊP¯Û·³Œîûÿ6ß»Œû✫ÔI¾f‘ìV±ðƃsiÅ&ÉFDUœ|´—ZN‰§Ü<·¼€ Œ•Æp70\ÄÓZÊíü9coo±_‰˜Å)R<Ÿ™‰fã€W#ò)/&Ðí­ ±Ô#ºD„o°HñŸºFFIn½GZj­NoÚöÿ‚1¶Ã®,´k[‘Ó_«—TÈr…A¸&Þþ´ôÓt‰/˜¸ºó…t*v’¸8ö5¥4R\ë¶ÂHÛȶˆË»)£ŸP7~uQ‡Ú+e³ºY­t¹à|ÂÀ!@ q†Î1š±q¥EÚíã‚[{I ÊÃlÒ!3g(£žÜ=*½¥Uöÿ«‡,{LJ¬ÍÃEþ–PÞa+´ç<:ñúÔŸðYÏYÿï¡þŠ`¼’ÞWþÏ{xþÏ ¼PÆP2 ŸpQÔ¼íëÎ(µ´µ½á·±?`šî… *ªåHànÇQÔÑí*ëïì+G±µÿÕ—üõŸþúáPÝhV–“\¼—%"Fv Ë’ÏVMŅȆÚ) sc·(#{Wœ/Ïû³±H8ÛœqOÔtöÍí½ÍþtõŽÖAnÌVP$¨ÉV9^O§ZJº{ãåö4ÿ°¬Š@ËöÆÊ•ùÉã§oÆq éÖ¶ò\M<ëj]Û àOAS^C+.Œ7&9Ô¾;G”ã'Ó’+ =X´¸RÚÉãšãL™.B»äÂíÝþ×-מ´£Z£ûÖ¿ä 1ÓChxnÉ”0–|‘óð¥ÿ„jËþzÏÿ}ð¬{ëDš³XtõWBús°¸c•>¸n­C«Û­½Œ£QŽ{µM5VÚf…ŽÉl’9Øßw“éÖš©UÛßbQc{þ«/ùë?ýô?ÂøF¬¿ç¬ÿ÷Ðÿ É’Âê]t¼ÅÑŒ±5¼ÂÍä!\¨6¸G~õ£¦$|Í$¶…nï/fŒIå€Ì»™$ó· ÇáS*µRº˜ÔcØŽãIÒ-&‚ï%Igp‘!a–>í-΋§ÛIlŽ÷$ÜKå. ðv–çöM^Ö-Ì­bñÂ]Öî2Ì«’œûT"‚9£°3Û=ź]•#'˱‡*$dŠQÄTv÷˜Ü"¯§Aá²ÿž³ÿßCü(ÿ„jËþzÏÿ}ð¬«kƒ¦}œé§ììÓ½·›hó<##b…S”'’ éÀ«N™„ײZHo’âÔÇ.ÿnØÃàõÇÞÏnµ~Ò¯ó’Ô{®t]>ÕíÕÞä™å. ðpOµ[ù‹öpìcÂ5eÿ=gÿ¾‡øQÿÕ—üõŸþúá[4QõªßÌÎŒoøF¬¿ç¬ÿ÷Ðÿ ?á²ÿž³ÿßCü+fŠ>µ[ùƒÙñÿÕ—üõŸþúáGü#V_óÖûè…lÑGÖ«0{8v1¿á²ÿž³ÿßCü(ÿ„jËþzÏÿ}ð­š(úÕoægÆ7ü#V_óÖûè…ðYÏYÿï¡þ³EZ­üÁìáØÆÿ„jËþzÏÿ}ð£þ«/ùë?ýô?¶h£ëU¿˜=œ;ßðYÏYÿï¡þÂ5eÿ=gÿ¾‡øVÍ}j·ó³‡cþ«/ùë?ýô?ÂøF¬¿ç¬ÿ÷Ðÿ Ù¢­Vþ`öpìcÂ5eÿ=gÿ¾‡øQÿÕ—üõŸþúá[4QõªßÌÎŒoøF¬¿ç¬ÿ÷Ðÿ ?á²ÿž³ÿßCü+fŠ>µ[ùƒÙñÿÕ—üõŸþúáGü#V_óÖûè…lÑGÖ«0{8v1¿á²ÿž³ÿßCü(ÿ„jËþzÏÿ}ð­š(úÕoægÆ7ü#V_óÖûè…ðYÏYÿï¡þ³EZ­üÁìáØÆÿ„jËþzÏÿ}ð£þ«/ùë?ýô?¶h£ëU¿˜=œ;ßðYÏYÿï¡þÂ5eÿ=gÿ¾‡øVÍ}j·ó³‡cþ«/ùë?ýô?ÂøF¬¿ç¬ÿ÷Ðÿ Ù¢­Vþ`öpìcÂ5eÿ=gÿ¾‡øQÿÕ—üõŸþúá[4QõªßÌÎŒoøF¬¿ç¬ÿ÷Ðÿ ?á²ÿž³ÿßCü+fŠ>µ[ùƒÙñÏGcŸ­ÇLì¦ÞFùÈ';J»áŽƒëLºÿ‘†/úõ“ÿAz†z~5ê`$åM·½ÿÈ1ªÜ‰/êÎî¸(¢¸(®ã„e×ú³^{â/øù‹þº/ó¯BºÿVkÏ|Eÿ1×EþtÝYÈ>×þ¸§þ‚*Q,fVˆ:™Ê à‘øÊ¢²Ïöu¶:ù)ÿ Šçì¼1i­ÿj6°’JìLÃìÄyЇïð:cÓ€:)råaTV. ùú;þ¢¢:gµŸãmÿÙU…ÿÔÿ®oüÖ Öu1¤é’ÝùFgX¡Gc…P}É€‰´±ýÛüÿìªÓWûšþöT¶Ú´Ú–ƒý•¢5ÃŒ5¼²ìØàá”¶ÓÈ öíTtbóQ¾½·¸°Šµ`$WUg#%yUä gëO­€ÈñÆ«¨iš +cåÁp—H­±WkFQÈ 7NWô5凯Þ/‚w]ù€çb¬Q=3ÅzwÄV°‚J¼ ¸õÄþâ¼µ­ekée’m§ªsÃ`qƒýk9R§'yE?‘JMlÇAã1ièºF2ê–ñóÿŽÕíž(œy·ºœi'÷ Ç¡kSŠ4°Øá ò”PY=yÏ~™© XmãÙ#:€70YHÉì6ž? ^—ò¯¹<»5ωµ‡·+ö€þw8ÙJ÷$éYcÅ:µ³ñ·Ìq´ˆŸáÀÓÓÚ©ÊÛØ™@Ù‘~½ þµBqÌeCÐ#6ÇûÀô4{_ʾàç—siuÝ_RÔm÷ÜÚÏ2ã÷­kïÁ+‘ð®š-PÚÍöŒÛ²#O»Ó=:“\v™·¶’}ÌZ|…v6Üòß^‚¶•ü¸W#,0Y@êß´{ʾàç—sZOjÑ—?jÎ:/–½OEéøÔ)â=a¤1ý°089'ð¬yžV¹TUftáTŒnsÕ¾‚´ìmÉ3'Ï ù™»ç¾(ö¿•}È9åÜÚ½×nlí7ÉvªprÅWü+’Ð|q­jzÝÌM}¾Ùc,‹ä Ç Þõ•ãMpDz†Ts/-ƒÈWÁ18¸šLa xúœþ½—ò¯¹<»ž‹ý»©ÏÏþ8¿áGöî¥ÿ??øâÿ…gQG°¥ü«îAÏ.æöî¥ÿ??øâÿ…Ûº—üüÿã‹þE—ò¯¹<»š?Ûº—üüÿã‹þnê_óóÿŽ/øVu{ _ʾäòîhÿnê_óóÿŽ/øQý»©ÏÏþ8¿áYÔQì)*ûs˹vmZòæ†yX›ï#ÄŒÔI©wkŠÝã†1Ñ#…À §EÆ•­Ê¾àç—sGûwRÿŸŸüqÂíÝKþ~ñÅÿ ΢aKùW܃ž]ÍíÝKþ~ñÅÿ ?·u/ùùÿÇü+:Š=…/å_ryw4·u/ùùÿÇü*¼×Ó\ΓΰK*}ÉÝ—èHâ«QB£Im÷<»š?Ûº—üüÿã‹þ‡[Ô Î –¼~•ŸE—ò¯¹<»š?Ûº—üüÿã‹þnê_óóÿŽ/øVu{ _ʾäòîhÿnê_óóÿŽ/øQý»©ÏÏþ8¿áYÔQì)*ûs˹ uÍDŒŽ?ëšÿ…[ÔT.€kþŸE—ò¯¹<»š?Ûº—üüÿã‹þnê_óóÿŽ/øVu{ _ʾäòîhÿnê_óóÿŽ/øQý»©ÏÏþ8¿áYÔQì)*ûs˹£ý»©ÏÏþ8¿áGöî¥ÿ??øâÿ…gQG°¥ü«îAÏ.æöî¥ÿ??øâÿ…Ûº—üüÿã‹þE—ò¯¹<»š?Ûº—üüÿã‹þnê_óóÿŽ/øVu{ _ʾäòîhÿnê_óóÿŽ/øQý»©ÏÏþ8¿áYÔQì)*ûs˹£ý»©ÏÏþ8¿áGöî¥ÿ??øâÿ…gQG°¥ü«îAÏ.æöî¥ÿ??øâÿ…Ûº—üüÿã‹þE—ò¯¹<»š?Ûº—üüÿã‹þnê_óóÿŽ/øVu{ _ʾäòîhÿnê_óóÿŽ/øQý»©ÏÏþ8¿áYÔQì)*ûs˹£ý»©ÏÏþ8¿áGöî¥ÿ??øâÿ…gQG°¥ü«îAÏ.æöî¥ÿ??øâÿ…Ûº—üüÿã‹þE—ò¯¹<»š?Ûº—üüÿã‹þnê_óóÿŽ/øVu{ _ʾäòîhÿnê_óóÿŽ/øQý»©ÏÏþ8¿áYÔQì)*ûs˹£ý»©ÏÏþ8¿áGöî¥ÿ??øâÿ…gQG°¥ü«îAÏ.æöî¥ÿ??øâÿ…Ûº—üüÿã‹þE—ò¯¹<»š?Ûº—üüÿã‹þnê_óóÿŽ/øVu{ _ʾäòîhÿnê_óóÿŽ/øQý»©ÏÏþ8¿áYÔQì)*ûs˹£ý»©ÏÏþ8¿áGöî¥ÿ??øâÿ…gQG°¥ü«îAÏ.æöî¥ÿ??øâÿ…Ûº—üüÿã‹þE—ò¯¹<»š?Ûº—üüÿã‹þnê_óóÿŽ/øVu{ _ʾäòîlé·sÞj‹$ï½ÄR¨8éõ­o ôük Dÿ€ÿ®rÿè¶­ß ôük<:IÍ.ÿ¢:qNêŸøVwp}ÁE}ÁEtœƒ.¿ÕšóßÇÌ_õÑz×ú³^{â/øù‹þº/ó æÌ…Ó­‰ Oo”T ®iH±ÇªØ»±Un’O`3V,¿äkÿ\SÿA“iák;MrMEX”ûÑ@GËŸ¼ÃúÙ>ØÛ_øýþ¹¿óZÈ×4Ëý[VÓãŠi-m-·\5Ä{™z"…`{9#Ó½k¯ü~Çÿ\ßù­X4Ìi:n££]ê±3Iwo6.a™ö)iH!Ô…À€s€95&a.¡ÛCp¸º`d¸äÈÇsr:òkyúUVëHâZ»i@!p|È>à$ž'ô5äs)Ýä¹eœo cñ5ì¾>î4æD Г¸gt÷¯ ¸…àÂc A‚™ÉþF˜ö𘮥3¢©@K‰íƒîkBÞ)¶Ç*òÈwVÎ3܃ӎý©,àI­çr˾yöÌWŒúæ­K <2B[Ìfg™€øu`à:Y`YÀ_c¯Ï,‘¥xèõü;}j›E%Ôehü×"2ˆ»BB§¡=r)ð¸13ÈpOÌŒƒÎ8'54¡q lËó¹ÎÜà¼÷  5h’Cº8€Pà…ÿRÂͽT2Eçž›R~Pˆ²Í媟¼uÇA]¢Ã~ Iõ?á@XÚ,‰iŸ«éUµ}RßL°’âY’3€„}ãíIy¨Ãi–œ² <2‚s\µÜ7#¾F™˜ÛFv¤}?@v6—^"ÕúpVÙ-Èú^‰e§­¤ "Dvìc¥O§é°ÚÛ¦FÀ«·,Íá ƒõÿ9  ”QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEihŸòõÎ_ýջសahŸòõÎ_ýջសsÐÞ~¿¢:ñ_ ?ðþ¬îàû‚Š û‚Šè9]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@Õ—üƒíëŠè"§¨,¿äkÿ\SÿA=5ãö?úæÿÍjÁªëÿ±ÿ×7þkV Dý*«u«OÒª·Z@r>:”æÌÀàâ?ò5y‡›PÝ’[É#pÆAëÔñÏ•z§ÄÉL: ä6ܘ«É­eT†iÚEW=vq×Ô☠²oÜÙC½S;¤'ÌÚqÏ^Þµ °<к©&I‡–§å`«‚sÆ givÍ$k)~a6‡ëíÓ·­j<7lÀ$¾ðG˜"àc@Aj·Sª:«$*®<’=xë[é¢Ú\Á°À3ü$pG½« ˜í%Ù7ÚmñŒAÁ'Ž{f·ôÑ!„ʳù‘?ìÝýé@qi/i«J²»1 òz©<Ÿ¯o¯\^ÇonË&õ 8e?*·ª‘EvØV‰ü¹7õÁ¬Y-[Vî¹6Ö*pÎÍ’øêô÷çé@vºéinÁÄjÀžçô­ûib†1äÙNüõpqïW´ûM*Â’) HóóHÄ~¤Öf¥â°Ò¥Žb’gêǃÜdöæ€4cÔR6t–) }»€cwãVMÌSDR6RU¹ÁÎ8ÿëÓt‹¸õ]->Ô©#ùcx#¯\þ¹ªIሴ}NKÛvýÌ©³iê§9Ǹã­[¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(KDÿ€ÿ®rÿè¶­ï ôükDÿ€ÿ®rÿè¶­ï ôükž†óõý׊øiÿ‡õguÜQÜWAÈ2ëýY¯=ñü|Åÿ]ùס]«5ç¾"ÿ˜¿ë¢ÿ:äkÿ\SÿA=Aeÿ û_úâŸú©è«ÿ±ÿ×7þkV W_øýþ¹¿óZ°h'éU[­Z~•UºÒ…ø“es¨iÑÛÛD$&h p…Ÿ“øâ¸#áèãhúçy*Œyú×wñ6ök)d‚c4Ð!`¹à‰ëÊÌ÷¹c,ó†X {céLßOm>hÖ;X" ¿(*£V¼‘AÂö?¬é‘AfîYwž00TúÚ¶îfT@8×§Fö4væ5lxgÏ€‰yf6󃪑ÁCÔ:¥q~Œ29低)ÕɦŸzÚzqÓ‚ImåK¦ËŒ <ãø€ë^V*rUZRkn§M4¹v!¥\›¶µ°kÈà‘QZÚ}Ûò¡‰É`8Î:Õ»k-"ëM[èm$hÙ Ënã¶3Ö¡Š Œj2O¢<±]ʧìÌÑ€€düÛz\Õ‹Ô4í*(Ÿ›"Ç#*ùÃs”'¯éÅsÊ¬í¤ŸN¾Zõ-Eu_¦•}$ÑgÏo4$oŠf €FAáˆÁç½'Ùô8£ßyö[|Èñ®ë¾iÇ\Ž}Gj~ž×6vsÏ=„âå™^y&’%Ø‘†8UŽ8÷¬›i[í–sCh׉+^²¢²Êd\7Ì@ÇøÕ)ÔmÚNÞ¾B´m·àlÜYh6 ËÛÂ$û†K‚»¾™<Õ¡é¤d[ñÿ]ük”½‰ôk9-®)®.tÿ"8ÖUßËü 1˜—'åé]…Ä’™âh F¬OßùA'ó8ü*jJ¬UÔÛù(·fŒ»Km:ñ$’="ébPÛdi$*q…ÉíÜ lèòÇtÒØÏnÖÄ RBK ŒŒmcœûsO±¶¹·Ô%¸ƒM–ÖÜBÛ­Úu>l™ˆ^üñœÔú5œ–÷W“ /°ÛË·e¶å?0ÎæÂ’xè{Q*²IûÏïÿ‚«±•®‹{iopÄäˆÒY ±#9Ï^ Cwh‰/ØešÙ° Ä2nEÉÇ?>O>€ÓdÒ/.<;m¦”ò¥2–iƒ À 0zž¦’òÒîëJ·³þÆ s`E:ÈmÜn;€à= 5R\ßµûôûÁÅ[oÀ}Ü:uÔp¾vË$‹J’)V'ÛÌÝÇ9ã±§­¶—ý¤¶2i·;îòävù_o\a‰ˆ}í¦—\‚i6öð‘ÌŒpxöQÿUCk<þ †í4ãkå–\Oߦ …$žp~lc*´ÚÖOnïüÁÅv ¿G°•£{ åòãÊѱ"$ÉŽXz™¸¢uf£¤Ýôê *û~?³´MŠÿ¹ÚèdSçœXsӑϽG¯‡¥·{ˆå¶x#ûò-ÎU~§vf 3R{$´kSo§OjÌB²³ ·œŒíî\»Ò¤k‰ßì’¼mogtWó˜än ddu⛜—ü¼˜Y)4vz<²9D·kuˆJ&[¢r #8Ï޹õô¤ò|6mÏÚ-<€ÛL¿jùséØÍfÝYêešïPX—lPîó_dÌÛ[•+žÙ5&œ²j·Föm°h‰9e#hƒnAƒÏ¡4ù§fùÞžbÓ±¥%–ƒº\Hð$÷dk‚¾‡85§‡¦Y¼ò¬!„lñ£Ü23Ï5FMþ6†DŠm‘Ër<¨ ;‚»åHó\cèyúÓî4‹«kyb·±’é&ÓÖÕ7IøH ÷²@#æ=:P§-?xþñÙ_cA´Ý8%£}’?ß°tì¸Ê“Ç?1ã§ãÚ¢xü<-nn"0Ü-²‘`Ÿ{¦ïj·ug<‹¥Lù“‘ò-‡ãÉ“ý‡xÚm¤IF›5¼‡páØ.Ðq×jcVOy¿¿ÔVšVEºó­„ v‰ ÏËŸLîÆjK‹-Ð!¹x!÷ —w}2yªWÖš…ãÙ] K˜¼¨Þ'†7€¿Í·æò¤pGPk;UDÒ!–ÛËóš}5m¡G–?5Ü1ŒÙÈû¹ätªŒ§&’›ûÅeÕiú\%»y+;Œ¤fr‡°ÎM$Z~‡<òA†I£ûñ¤ä²ýFr+=´k¦Õd2­ÓA4ÑL„* Ãnø+ü'¡úÖ…ŸN Û÷7³C• f qŸAǽL§4´›oÔi.Ä7–Ú-•͵¼–Ò4—B g¹9Àj6ºN›öfšX¦›Ëib¡Ö9$ŸöqøÕýRÚ[‘gå&ï.ê90£©¨µ˜'“ì2Ãj×>EÈ‘ãR ‘µ‡ˆHïSÓv¼ŸÞ7­—B -ßøûØZoüûãíþ5£Eaíêÿ3ûÙ|‘ìgai¿óíÿ·øÑý…¦ÿÏ·þ>ßãZ4Qíêÿ3ûØrG±ý…¦ÿÏ·þ>ßãGö›ÿ>ßøûhÑG·«üÏïaÉÆwö›ÿ>ßøûØZoüûãíþ5£EÞ¯ó?½‡${ߨZoüûãíþ4ai¿óíÿ·øÖ{z¿Ìþö‘ìgai¿óíÿ·øÑý…¦ÿÏ·þ>ßãZ4Qíêÿ3ûØrG±ý…¦ÿÏ·þ>ßãGö›ÿ>ßøûhÑG·«üÏïaÉÆwö›ÿ>ßøûØZoüûãíþ5£EÞ¯ó?½‡${ߨZoüûãíþ4ai¿óíÿ·øÖ{z¿Ìþö‘ìgai¿óíÿ·øÑý…¦ÿÏ·þ>ßãZ4Qíêÿ3ûØrG±ý…¦ÿÏ·þ>ßãGö›ÿ>ßøûhÑG·«üÏïaÉÆwö›ÿ>ßøûØZoüûãíþ5£EÞ¯ó?½‡${ߨZoüûãíþ4ai¿óíÿ·øÖ{z¿Ìþö‘ìgai¿óíÿ·øÑý…¦ÿÏ·þ>ßãZ4Qíêÿ3ûØrG±ý…¦ÿÏ·þ>ßãGö›ÿ>ßøûhÑG·«üÏïaÉÆwö›ÿ>ßøûØZoüûãíþ5£EÞ¯ó?½‡${ߨZoüûãíþ4ai¿óíÿ·øÖ{z¿Ìþö‘ìgai¿óíÿ·øÑý…¦ÿÏ·þ>ßãZ4Qíêÿ3ûØrG±ý…¦ÿÏ·þ>ßãGö›ÿ>ßøûhÑG·«üÏïaÉÅ(´«+c$°ÃµÖ'ÁÞÇøHîj ZÒoõRÿ×'ÿÐMføkú×­—ÉÊ›rw×üŽjû£ºƒî (ƒî +¼Äe×ú³^{â/øù‹þº/ó¯BºÿVkÏ|Eÿ1×EþtÝYÈ>×þ¸§þ‚)úÖ[él’tk˜”;Æ*Oóî=E-—:u·8ýÊsÿ‹kákMI/ÓP¿iÕË’ÍÎOPß' ÐëïyR$`¥bØÎÇOÌS«ÏÜÿ’ñ4¨Ä]*çå(Ä¡_ñ5S^Ô¥Ó4Ö’ÝK¹]a¶ú4Œp3ŽÝϰ43Z¸ñûqù'ÿQ42ù~¹ü£ÿâ+%¼G8ð„Ú¡¶Syo˜ç„gjH­µ³Ôí~•‹«Ý_Þ]ÛÏ%ÊB¨Ëug‘nÏËÉ<Œס(5û›ˆì„-).’£ å,¥_Ç|©ý+Í.5+øõÃöâ£DÇožØÈ=†kÒ¼K+˜<²ß"G¡>n¯,Ö·E}i&r<í¼œ2†î=EKŒ^­ìÓ·ÕnĬí{tÑÐÊ}1ÜúâŸ.³|#3%ÔÆ4ù›çnÅP–ED·³ŒÁ›ã5YÚæq"|Ë4nàlã§ý){8v ³ª·Ôe”Åþ•)V]ÙNZ¸oeIvù²àö.süë–Òï'+*vu~nµ~Ü%¼- ’(Ê‘ž½†3Ï{8v ³MîÝm¼Çº‘@wàæ³ç¿¸ùÒÞêáØÞ99ÏšÈÔ.–Úp×{ÚVòàçüÿZ–Þ[Lî·¼l§²OqŸoǽ΂ì˼OG$’Ûësˆ¹93>88À$Ÿä3Yð_x¶Îéî.µ)nbeÐÝ2…Qß¿Zè'y&G\+#¶ç`„’}˜ªÎÂKT…ä Ûv<„€Y@8÷ægÁvQ—ÇZ´ÐhÂðXÌ[çžµ6‡®ê×zŒ‹>£1UˆáfÆr9ëY1øvKKèä·¤Œ¶IXÓžµÒ[4&@±Pª@\屟ÇgÁvi}¾÷þ~çÿ¿‡ühû}ïüýÏÿøÕz(öpìe·ÞÿÏÜÿ÷ðÿo½ÿŸ¹ÿïáÿ¯E΂ì±öûßùûŸþþñ£í÷¿ó÷?ýü?ãUè£Ùð]–>ß{ÿ?sÿßÃþ4}¾÷þ~çÿ¿‡üj½{8v ²ÇÛïçîûøÆ·ÞÿÏÜÿ÷ðÿW¢gÁvXû}ïüýÏÿøÑöûßùûŸþþñªôQìáØ.Ëo½ÿŸ¹ÿïáÿ>ß{ÿ?sÿßÃþ5^Š=œ;Ùcí÷¿ó÷?ýü?ãGÛïçîûøÆ«ÑG³‡`»,}¾÷þ~çÿ¿‡ühû}ïüýÏÿøÕz(öpìe·ÞÿÏÜÿ÷ðÿo½ÿŸ¹ÿïáÿ¯E΂ì±öûßùûŸþþñ£í÷¿ó÷?ýü?ãUè£Ùð]–>ß{ÿ?sÿßÃþ4}¾÷þ~çÿ¿‡üj½{8v ²ÇÛïçîûøÆ·ÞÿÏÜÿ÷ðÿW¢gÁvXû}ïüýÏÿøÑöûßùûŸþþñªôQìáØ.Ëo½ÿŸ¹ÿïáÿ>ß{ÿ?sÿßÃþ5^Š=œ;Ùcí÷¿ó÷?ýü?ãGÛïçîûøÆ«ÑG³‡`»,}¾÷þ~çÿ¿‡ühû}ïüýÏÿøÕz(öpìe·ÞÿÏÜÿ÷ðÿo½ÿŸ¹ÿïáÿ¯E΂ì±öûßùûŸþþñ£í÷¿ó÷?ýü?ãUè£Ùð]–>ß{ÿ?sÿßÃþ4}¾÷þ~çÿ¿‡üj½{8v ²ÇÛïçîûøÆ·ÞÿÏÜÿ÷ðÿW¢gÁvXû}ïüýÏÿøÑöûßùûŸþþñªôQìáØ.Ëo½ÿŸ¹ÿïáÿ>ß{ÿ?sÿßÃþ5^Š=œ;Ùcí÷¿ó÷?ýü?ãGÛïçîûøÆ«ÑG³‡`»,}¾÷þ~çÿ¿‡ühû}ïüýÏÿøÕz(öpìe·ÞÿÏÜÿ÷ðÿo½ÿŸ¹ÿïáÿ¯E΂ì±öûßùûŸþþñ£í÷¿ó÷?ýü?ãUè£Ùð]–>ß{ÿ?sÿßÃþ4}¾÷þ~çÿ¿‡üj½{8v ²ÇÛïçîûøÆ·ÞÿÏÜÿ÷ðÿW¢gÁvXû}ïüýÏÿøÑöûßùûŸþþñªôQìáØ.Ëo½ÿŸ¹ÿïáÿ>ß{ÿ?sÿßÃþ5^Š=œ;Ùcí÷¿ó÷?ýü?ãGÛïçîûøÆ«ÑG³‡`»,}¾÷þ~çÿ¿‡ühû}ïüýÏÿøÕz(öpìf¶‘ys.¢K‰ RåYÉ÷m[^þ¦¹ýþB‹ÿ\¥ÿÑm]†¿©ªI-‚÷;¨>࢈>࢘†]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@Í™ÆlNx: ÿ¬Ø­Q˧Iwr­„P³dyŽÙ9x­M:ÀÈí.¤Ò"Ø2¶[õ«¹ŽK·ŽYcòËon2r:{TvšLÜn³µbû žýût®‚ÎÅ- D»:a@ÑEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE¡¢ÈQ딿ú-« ð×õ5ÏèŸò_úå/þ‹jè<5Ôÿ¼hºƒî (ƒî (—_êÍyãæ/úè¿Î½ ëýY¯=ñü|Åÿ]ùÐueÿ û_úâŸú©ê /ùÚÿ×ÿÐEO@ _øýþ¹¿óZ°jºÿÇìõÍÿšÕƒ@?JªÝjÓôª­Öï‰Y—îŒçÉÏÓ÷ÕÉÝä®AÅu~&.1´ã˜r}¿}\Ô‹˜ÊŸá¦¬XrËiÑÃ#!ÁüG¡éSif ËvUP’•êGQÓÿ­Z·‹ Êð; ž¯zæ®­î4E’ò/Þ¹ó#QÈÏ~¼Ð-CPŸN»kym–x”æ2¯µ±’8'éT^ù®eT‡M‘¥à!¸rÝqŽ3WÃ{|<µ{Ÿ“jÈ{1ú6þ(+û°³¿ÂÀþT5¿†]åXîüæšL´²6öÆÚÔ²ŽæþÈX³ul`~Õ¼²$ۤʈ£\dœf«¾©«µ‰ç>NühÐé‹ãÆ¶ÃæÜ#åÆ1õÇåYÒĦñþÈfÉ ¹ùS=O½i}žæõ‹ÜÉåÆF6%XUŠÚÝ–ÀêHš¥caäy yJšR ìÈÝÔ¯zÎÔO/æbyíùV^‘w¬½ÍâˆÑ o.3÷±¹y#ðýh ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(CDÿ¢ÿ×)ô[WAá®§ýã\þ‰ÿ!Eÿ®Rÿè¶®ƒÃ]OûÆ€;¨>࢈>ࢀuþ¬×žø‹þ>bÿ®‹üëЮ¿ÕšóßÇÌ_õÑwV_òµÿ®)ÿ Šž ²ÿ}¯ýqOýTôÕÿØÿë›ÿ5««¯ü~Çÿ\ßù­X4ôª­Ö­?JªýiÌø©€Øñ<#ôœÿJãç¾2#¬QÈü•à`tîk©ñ¬1Ψ_Ë’Uz‘‰ÁÇç\­´QDÄù™ Îô¦7­Ë¨Bë<¨‚ÞS‡ ˧­Gc})³dk[©c9ÃÁ#•Ú0ЫI_BF)<¸T¯ë¸yu­…Ô™1Á1·~ZH9ÉÛÇN+SK°Õ­î±Ú¢/ËùÏxœõëÍvÊ!GâiäÄ>bÃN aÁ¦\Ϋö¹Ô€wyhxúÖÔǬQñ´t”Ç!™¡æ\œ|ž+ PÕo0a†Êá¤RvÜ"GÒ€6®õX-­‹ùŠY>ôlp~Ÿýz宼A}9:TooÃ$:-Î¥0›RrX÷R>µ½ö K@$Ž=ΧªýæúÐZ5­¬Ÿi¹êæS•`A,Þ•½oeörf—æ¸|ÍØî§ëSÛZÇæ‰v‰sòŒð£ÐR»œàacêh¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(CDÿ¢ÿ×)ô[WAá®§ýã\þ‰ÿ!Eÿ®Rÿè¶®ƒÃ]OûÆ€;¨>࢈>ࢀuþ¬×žø‹þ>bÿ®‹üëЮ¿ÕšóßÇÌ_õÑwV_òµÿ®)ÿ Šž ²ÿ}¯ýqOýTôÕÿÔÿ®oüÖ¬ªÍåÎ’ífP¥NÑ’3ŽqøSì>“ß—ÿ {ôªÎ9§µìtŸÿäÿâjº‡û·ø 'ÿH íF¦žE–4‘Dq:‚:ËX+w¡¼3L#‡É‡ïHmˆSÎ>S· ÏfºÈÚdšVFD“lK»‚@ÞsŽß{ô®a4­DééîmGÙ|³o*³å½qÆqÎ ¯#ÿzîí±ÕM{£-ï´ùF£1²‹É·‘R5û6ÇbTa€9$àp*æœ-/´¨¯[M†2èXÄXŒvéÏJ¯‹us<×7sý–ffAháÀ!6s½9îzU"Æ÷N³¶µ’X弯'æ?(\1ׯ5Ï9+hõÓ¯‘ikª¥›MF´¸­Ìs4[·äã§^•Û4˜ý&+vf–UQ £7Ø9Ç=*Ô6×V^¼~S<—&`ãòg€3»àø¬{hu%»´¸µ´®ß;£ ¯"•Î ‘Îõ¡>fÝôõò¡¥q{ ÛGÈ2¼~h1Û™>Oï à{šÐ6L¡…¥¹d~ì…r·ºuî—k%¥¬fêK«?!ñ˜ –ä0R |ç†# æº‹&º-:O¢FÁ!#« £$þ9…*—Jñ“ûÁofŒí9ÓPŠY—KÓÄK¸&Ù1  €.qêiš}Ý¥äoý—læÝ‚ÿ¢í™d8ΰ9ý*[}:ù5/Ì0J hÕ!f"V$\í1èzš±§YÜÇ{w{v ŽIÂ/—Q·<’@É9ôì)ÊjÏ_Ä,W³¹Ón,-nn, ¶7,QQ0 à°ìj Ûûhíg‡O³šÞà€„’>N>D+óuÏQO} k &gŒD\™ÙI'nâÀ.G\㟭-Õ†«w¥®"Ø”hÂI6æÊàýå]¸Î0zŒjQæ½ú÷è ; zM¥ì®a$sÊ#B$Ãã'nÌp=i{c®f¾›e’¬Á£uvP1‚ë´mÎxäÕóg#k1Ý»)Š+sc<†', ?Z¬ï®ukk‹…µŽfvFÙÁr9<ž@©U4ÕôîÁ¢¦§yi§ÜIivÒˆaÊXª¤‘òŒÇŽœvçš±«‹M;M7kgoÃÆèAáœÀç8& Öt[BíämdŽ6™ˆkfé€yäwtsV/ôXä´”ÙÃn·’ß¡y_!p$ò¶ý÷ïÆìmÛ»§=*„Ú=üV²\\\ fHâ+€òÉ+8,0@Î3Á8©4ëKëëƒ}<+oþž'ØÛ†PC³€Ê_P*´³|Ïk¯y¡%¬W8 rçfËrÌq×å ‘ŽüqÞ Ôïô‹–8mä”Û™¢ n\Ž Ú8R{œT2øzëzM#È’Î|±s$ ¤¸|ÉÎF"Ÿq¢]Å ±éél{5µxå•ÿw€Ø*Ø%‡Ìx8éI8éï?¼zßbëÇh‰bÆÞÍ î†ƒ;²¤àc¡ã¿UWÔôF³¹žÚÚ)ZpncÞ£º–^G¸ÏZ¿sa,£N Éþ‹(wÉ<€Œ¼~$ViðýÃéö–Í,@Åa-«°$üÌ8äpiFQ{ÉÿWžšZóEŽÚ9å¶XÄ™ÚfÁÎIÛ·v®1EÍæ…hˆÒ¤^?4íÌŸ'÷ŽÐp=Ï^ëIÔnÚÒæE€\@Gܱ«)ÛÎõƒ•é‚*Ž©gsa¶Ö¾gÚ¬VØÄV‘¸ >Ò?ˆýâ;ÕFÍ¥Ìþñj–¨Ù{;µµhíĬT¨ÈºØÀ'°&¤¶:UÜòôlÑ®~ÌBä®>†³ÿ°%þÒyYVkydŽV u,{B¸¿+}ÐFqWm ¼°òáDÖkÉd•†NÈØ³Ns´w¨m[I;ú_ª~ö–W6)$ʱ™j3ê{ŸjMYìôß±±³€Ç,þ[âßyÆÖ<Î@ìjæ£i%صòÊ*á%mǨqïLÕmnn>É% …¤·ŸÍÛ+• 6²ã ïzRŒö»üFã½»ÞïCK4»0Æ`lëjÍ·wa~\wÎ(k½ nűŽ0²®~Ìve€*7íÛ’ïÞ¨\hZ›Û°Y£c9•æ‰n$…¾0APK0x9« ¡Ü­”ðù‘y­äS“Ò1=ºü‡…]ãüÏï%ߢæ÷L]BÖÎÚÚÝä{Ÿ&Söc´|¤rf´nâÓ,­šââÚp î9'€2y"³×J¿†hcgkH.Þé_s íÇnÜc«uÏáVæ·¼Ô´HeŽ+¦0É"òJº±ý K–Ö–ž£¶¯B/ô‰Òâ{¾ÀÑ”þé%@ØóR­Æˆ÷¦Ñc·3n)þ£å,J†Æ öÎi’i¼³8x°÷ñÝOÝP Ž~SQ&x%ŠÝž±Et×JàŸ0’K#·\ôíG4™ýágÛúÔ–ÚóB»Ýå$,fRd·( ¬ (È÷-”š> \[A 2Jµ¾ÃƒÐá€È>½*‰ðôòØYÚÉ,kåXÉm#)'æ`¸#ŽGÊ}*õïöƒ^ß}\@ D‰g%‰ ~]½MjÎÒx+ö.}‚Ëþ} ÿ¿cü(û—üúAÿ~ÇøUŠ+i>åÙþÁeÿ>ß±þ}‚Ëþ} ÿ¿cü*Å{I÷ "¿Ø,¿çÒûö?°YϤ÷ì…X¢i>ádWû—üúAÿ~ÇøQö /ùôƒþýð«Qí'Ü,Šÿ`²ÿŸH?ïØÿ >Áeÿ>ß±þbŠ=¤û…‘_ì_óéýûáGØ,¿çÒûö?¬QG´Ÿp²+ý‚Ëþ} ÿ¿cü(û—üúAÿ~ÇøUŠ(ö“îE°YϤ÷ì…`²ÿŸH?ïØÿ ±EÒ}Âȯö /ùôƒþýð£ì_óéýûáV(£ÚO¸YþÁeÿ>ß±þ}‚Ëþ} ÿ¿cü*Å{I÷ "¿Ø,¿çÒûö?°YϤ÷ì…X¢i>ádWû—üúAÿ~ÇøQö /ùôƒþýð«Qí'Ü,Šÿ`²ÿŸH?ïØÿ >Áeÿ>ß±þbŠ=¤û…‘_ì_óéýûáGØ,¿çÒûö?¬QG´Ÿp²+ý‚Ëþ} ÿ¿cü(û—üúAÿ~ÇøUŠ(ö“îE°YϤ÷ì…`²ÿŸH?ïØÿ ±EÒ}Âȯö /ùôƒþýð£ì_óéýûáV(£ÚO¸YþÁeÿ>ß±þ}‚Ëþ} ÿ¿cü*Å{I÷ "¿Ø,¿çÒûö?°YϤ÷ì…X¢i>ád@¶vÑ,¼(â'Ã*GÊjŸ†úŸ÷ó­&ÿU/ýrýÖo†úŸ÷ó¯c/mÓwïþG-uiÔpQDpQ]æ#.¿ÕšóßÇÌ_õÑz×ú³^{â/øù‹þº/ó êËþAö¿õÅ?ôU Ö¬n5i´ÈåÍÌK’1Á=À=Èã?_®,Ù éÖÃþ˜§þ‚+6 èö×1ÜCm*ËïVûL§ ëËP«$ÉâªT³êqŽ?Zy²‡ÖoûüÿãH¿ñúŸõÍÿšÕ_\Zi链»•míÉÚÍÕ±ßh¿ @[k(ë?þIÿÅT k÷®?ð&Oþ*°eׯãðt÷ TjV’ýšêM™Á‚´›Gm§~:sMеvºÕïl«© QG*\¦ÌÄ‚§gËØ釩‹5[M «Ÿ:=1$…e“Œ÷å?#\ Î¥ª]³3ÈØã#È®AÅw¾1ÓÓRµxœ¸Ûäºìÿ|9öæ¹{KƒÉ•ÓÍ,v–`Äa×ð  _éòý™®YÙ£~ŽqÉç>µÓ\N±Æ«¸ä2? æ4ËÕ´ºWŒ€…?xXm.ON;ž¼ûUmOÄ‹&;€l(É9Íi]_®3œäǹÀ¨ô;¦¹Ögp±F70ã$“ü«”¶›Q¾·’k{r0¹i¸ c¯ojÝðsKhú¤—[›0Œ©?¥tĽËÏÉSOrN©®uUÞØ"¸WÎ#9Ç·á[v2æ å8?¸ù‰É9ýxü+šº€NØŠâH¤Lmxþ­Û½eÞÏ«X[³ÜCosüÍjsŒçüõ«ú}Ì kiq j‘\¸€%¸n'×'ðɬ]h_M¥Ï4“Iá@=r1ßhðë›Ï ù*¬ŠåÞ›‡ äwÿ è®t+}VÙe`a¾O”J½ÈãÖ²Òò褖ŠRX™X>ðÆ2?ÏzßÓï<ØD»pæÛŒ`çtìÙ·OSíýòá7ÎÞ€1h¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠÐÑ?ä(¿õÊ_ýÕÐxo©ÿxÿ:çôOù /ýr—ÿEµtêÞ?΀;¨>࢈>ࢀuþ¬×žø‹þ>bÿ®‹üëЮ¿ÕšóßÇÌ_õÑw6gu±œ@œÿ(¬[_ZÝßÇeŸ~'y {YcùH럟 õ·eÿ û_úâŸú¦G§YŨK·S(Wu ‘ùJ°¿ñûýs浟ªx~ÛXÔí®/Äw¶ñº­¬‘îRìGÎI=€ÀîkAãö?úæÿÍjÁ¤=oáÑ¥O}&‘,6q\¢ƒìû’99p£tÎhÓtìù..&¸k›Ë‚<Ù™BŒŠª8dñï[Òª·Zåa‚AG8?ΫZ,’^(*pñHƒ<Îàz³S_m{$U8$óÇòGò4EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP†‰ÿ!Eÿ®Rÿè¶®ƒÃ}OûÇù×?¢ÈQ딿ú-«¡ðßÞ?ïç@ÌpQDpQ@ ºÿVkÏ|Eÿ1×EþuèW_êÍyãæ/úè¿Î€;«/ùÚÿ×ÿÐEOPYÈ>×þ¸§þ‚*zjÿÇìõÍÿšÕƒU×þ?cÿ®oüÖ¬‰úUVëVŸ¥Un´€ÄÖí£¹¬ƒ!D,¯2ÖuËG»Hä,h=:VüKóÏ*D<¸‚³ôÝûÜ*ó­GV¿ñ,Öêl¬”bI˜ä¾=ùëL bÿ®‹ü躲ÿ}¯ýqOýTõ—üƒíëŠè"§ ¯ü~Çÿ\ßù­X5]ãö?úæÿÍjÁ Ÿ¥UnµiúUWëHgÅvÝǶ}»PÂãwL;¯çX–‚ä ÞŽÿW÷Ï©úvüë¦ñ ·RMËí÷=‰Ï2ñÅaÝêvØ&êp>B0=zSýêB<÷£CˆÓ~OðËÁŽÓÜK!3Ý+—'ª  OçÐUûŸ2æø±LAÛÈÈŸ©æ«Em/Ê£•Ÿ}Ð1´~†€6 »X|3}!ùUC2©ÿk ýk[¦‡Ä–†3û¥HÝm¤ ¡º’Ý­IMüG*çØTsYLíÈ×Iyr1øƒ@ž-¹2y…ÙQÏ$ãã\Nšñ&¦öòp²áÃŒqŸÇ­t·ÐÞ\Ã[©ðMdˤjywð£OîUÜ0Gö=hWÑd‚ý¶Èf2+ŽA\ŽÕF4†Ú/2{vIŒlâXúN1í^€tëk£Ý@Ø”`¡ëÁéK©è–2ÀÑ•XjãvÜã¨ïœ¥`²}"k„a4q®ÙG·äMo鬺|¨ÊÊ®¸ìsüë:çIžÛÃÒØØî–]¤)$.àÝTöëVt{k›h‘gˆG˜P? üÀc·ã@”QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEhhŸò_úå/þ‹jè|7÷ûÇù×=¢ÈQ딿ú-«¡ðßÞ?ïç@ÌpQDpQ@ ºÿVkÏ|Eÿ1×EþuèW_êÍyãæ/úè¿Î€;«/ùÚÿ×ÿÐEOPYÈ>×þ¸§þ‚*zjÿÇìõÍÿšÕƒU›rJ’ªïÚ •Î:~T¦é¿çÒÍ?øª{Ž*³ŽiÍrçþ\®?4ÿâª&šCÿ.7?œü] (^.%$à¢þrÖë°µ›Þk¥·ù|§*?}¸àlÏ'@ë]ͬÒÇ,’Ds!TŽHP®;åsÉáËá§ ¹v†-Ÿfao‡Œ¡wá±ØW‘‹‚u]×oø'U7hèV·Ög-¨¼°J®“$P[I´6æ@@Ê’9$œäàUí2îæûDŠå–s"›¹\TqxfY$–mA¥žw”J’ „&Î6¶z{÷§ZèÖ:rYÛ\ÌŠ±ºîh™ÎæèÃ'Œzw®yA5¢×N±i»ê&—yw=Åå½ÑÍ»*‰`RªÄŒ•Á'‘õïP¦¶±b1 Ýä¯,À*"6ñsV-t}VÇN6é"˜)äÚ',ç9-ëÇ'5‡­ý¢Öx¢6¯ºéÜÉ™³Ìpʤ8î ST“mÛOøæÐµ7‰-40Ü\ ‡Ï)GîÓž[q‡Ž¼×V‡B2+˜¿ðÞ©mZép\8ž×ìóHñ©SË|Ç, Ÿ˜ô ×¥tVvzŒop'W1ïî¨P==rjjQV¼F¥®¦^•©]_›€×6‚U ‹q +Çó¥²ÜŒÀQ¦ê—·I|SMnÁP*4ò3ʾJ~ýªÔz&§ö¶»žã}ÂÂÑBRÔª $HÜwqRØé–÷3Ý];Oq0U% 1¨UÎ>§½9CGeøÀ ”­uÀº=­ö ¢1+‘ãÿWÉœœãŒgÔÔZ޳uomky*C1_ÝO n9 ràíN~j´|5$š\tÆG¶G-*ˆˆóFI¯$}qI6ªOb¶2^³[ü¹Iµ>c¯ûÛ°0 Áõ¦¡kÛ¯g·Ü »XeõÎ¥¥k Z2\I@Û•Ë1møý:‘H5¸üB–˜Z)˜b'B `Œ18sÏ!zVˆÒfþÔ¥d!`òQ<³òó’sïùT?ØÚ„ºŒ77S"Ùá‰-ÊH#ælœàÐ •5];fn·®O§^y1›tÄBDY&á·cb`Œž½G>­«Ç Œ¦Òâ7º†X„‘DÊΠȠ‚; Ôº—‡n¯§ã‘¢Kˆ+ÛïùA'å9O'×·jÿFšóO6Ñ«Äû‘–CnUƒ Ž3ÓÖš‚÷tõÝÞ¥¬¤ÒC[‹i…Ç•$.ŠNJ3 òFÈ=¾µ>¨Í¨éq]\Z¼,Ñ«ví|ŒåpÄãëƒLO Ý”º¸•ä¸óÄÎËU # P2p>lç&­izEîŸf-%vž(ÀH±Rª;““ïÅ)Árû«];üÁ=u*zÔZÃpR`’Ú½ÐùFB(ƒÏ_˜S?á!a•¦µº†Hü¿Ü¸]ͼáH!Šò}H¨—ÂwžI·{–hRÖ[XGÙˆdWÇ,w|ØÀì*äú Ô’Í"mÌ–ñÀRkc"¥‰ÈÈÎwSöpìÿÿäÌõ„·žW¸[˜öÁ}‘I ÎÊ*NX‘Œg=èþߌ!ÆðN'yMûŠïþöÜcÞ«?….­¬¤òÍÄÓ,qˆÄqU’FqÍŒ ØÁ=Z“NеIdû^ ßlXÈì€Ä^¦«ÙFÍÛó3'þß·h!x­îf–]ÿ¸D×aÃg$ƒÇ_¦j¾£â]:W°Žy¤6†á^4‰H;Y·èxäðx§\xAæØûcyRYœ}¢ÏÍLHÛˆÚHäqÈ5%׆nÝm$Âkam2‹\¡Qœ§æ>¢’§ 4ˆùÉå»1Ǧ––E3ÈíPwŒpsÐqÚ¨¿‰Qôùæ†Öx¤¯sž£lª£¨ÚÇÔppy­Yôy¦#/Ùdþ¬ØF\{}ìÕ/øE¤k;kgyJÃi%©""  7{coNzÒŒ#Õ~¿ð7 æÖ¼¨¡ó,.þÑ*³ u_hÆ[†Æ9óíLŸÄV±B%Š‹”òØT~î3ÐÄz:ñMºð½Ýê[=Ñ‚{ˆ ilwÆÊqÕ uã¨5WVÐuP2ÑÀ¸µÒ•D@ ãp+÷@ÕQ¥ÖŸ…ÌÑ¡&¹mוåNÈ#y•FÈݱµO9î:ŒŒÔözˆ½šdŽÚuŽ'dó_nÖe8 `篨SþB5Cx ÷²»‰¬„Ž €>GÈ+Ðv<Õ˜tBÐÃÌmu$Ó“2¸íïÜŽ}ª%I[ÝZüƤú‘êw×Vw6I ´3N±É#·#' ¿¿ó¦ë7³Ù5ƒB’Iæ\„xã YÆÆ8ÀêqÒ¯_isÞ q¶DògY¿Õ“½©š–“yx-ša– ¼Õg„¸?)\‘ýïZQ†×_˜ÛÞÏ¡Qµ¸þÂnÒÎîDBË2*®èJõÜ Ó4Óâ asåˆ. ñÆn¯–À*;¿ˆvïU®|=Ä@4‚IÌ2›‹O1Ÿ2®FÒ1€rx«KቖÖhÉûÉa“>IãË1×¾ÏÃ5~ΟÜÉr} ÷ÓËg ¬SˆZìÂó•_-ð*9ÏQ׺֥ýêiöq";€UBÆâX€É©êðåìw˜æckÃ\¤&Üî wdoÏL±íøÕ–Òoï4h-®Ëý¤žYy•ƒ=1Ré­,´ù›VU‡ÄKp±=•ä9›Èg‘W ! pǯŒŽzÔ‰®[½Ø‡ÉœFÒ˜Và¨òÚAœ¨9Ïb3Œdu§¿‡æy%|È7Þ%Ö<£ÆÐ£o_özûÔiụÍ!²Žv¸H<˜9$òÙäIÆ?=œ_Gø…ßõóÿ€Goâ;Y£2I Å´f¸G™Wƒ#i>£ƒƒÍZ±Õ#½™¡6óŲ̂$ :€YOF'üEWÿ„UÞÎÖÚV•’I-›X6ß›Û}êÍŽ{Û]]Ê÷yB+Œ*ƒž™9$õ>Ý(•8ÙÙ?Ä™vŠ“ìóÿÏ?ï“GÙçÿž2ß&±ösì]Ñ'Ùçÿž2ß&³ÏÿÁtGEIöyÿ猟÷É£ìóÿÏ?ï“G³Ÿ`º#¢¤û<ÿóÆOûäÑöyÿ猟÷É£Ùϰ]ÑR}žùã'ýòhû<ÿóÆOûäÑìçØ.ˆè©>Ï?üñ“þù4}žùã'ýòhösìDtTŸgŸþxÉÿ|š>Ï?üñ“þù4{9ö ¢:*O³ÏÿÁtGEIöyÿ猟÷É£ìóÿÏ?ï“G³Ÿ`º#¢¤û<ÿóÆOûäÑöyÿ猟÷É£Ùϰ]ÑR}žùã'ýòhû<ÿóÆOûäÑìçØ.ˆè©>Ï?üñ“þù4}žùã'ýòhösìDtTŸgŸþxÉÿ|š>Ï?üñ“þù4{9ö ¢:*O³ÏÿÁtDßê¥ÿ®Oÿ šÎðßÞ?ïçZ²C*A34n‰ù*ºk+Ãxÿ¼{zj›¿ò9k»Èî`û‚Š û‚Šï1uþ¬×žø‹þ>bÿ®‹üëЮ¿ÕšóßÇÌ_õÑwV_òµÿ®)ÿ Šž ²ÿ}¯ýqOýTôQEQEŸª\M´··q—SˆD…wlY‰Çs…ýjk ‹ØšXçþ¹7ò®_ß}¿Þ?κ‹ÿùÜÿ×&þUËøsï·ûÇùÐsÜQÜS˯õf¼÷Ä_ñóýt_ç^…uþ¬×žø‹þ>bÿ®‹ü衞}i!´m¤3Cöh÷3lr>ðö¨~Õâ¯úZÿßCÿ‹­%ƒÍQ"Â@np· £òRý•¿ç›ÿàSÖ¤Û¿3þ¾GL1 1K’/ïÿ33í^*ÿ e¯ýô?øº>Õâ¯úZÿßCÿ‹­?²·üóü z>ÊßóÍÿð)é{üïðÿ"¾´¿çÜ~çþfgÚ¼Uÿ@Ë_ûèñt}«Å_ô µÿ¾‡ÿZeoùæÿøô}•¿ç›ÿàSÑìó¿ÃüƒëKþ}Çîæf}«Å_ô µÿ¾‡ÿGÚ¼Uÿ@Ë_ûèñu§öVÿžoÿOGÙ[þy¿þ=Áÿ;ü?È>´¿çÜ~çþfgÚ¼Uÿ@Ë_ûèñt}«Å_ô µÿ¾‡ÿZeoùæÿøô}•¿ç›ÿàSÑìó¿ÃüƒëKþ}Çîæf}«Å_ô µÿ¾‡ÿGÚ¼Uÿ@Ë_ûèñu§öVÿžoÿON[2Ç}n¤£Ø?ç‡ùÖ—üûÜÿÌÊûWŠ¿èkÿ}þ.µx«þ–¿÷Ðÿâë^;Xd‰3 Àyïþ4ï±Cýé¿ïûÿÁÿ;ü?È>´¿çÜ~çþf7Ú¼Uÿ@Ë_ûèñt}«Å_ô µÿ¾‡ÿ[?b‡ûÓß÷ÿ>Å÷¦ÿ¿ïþ4{üïðÿ úÒÿŸqûŸù˜ßjñWý-ï¡ÿÅÑö¯Ð2×þúü]lýŠïMÿßühû?Þ›þÿ¿øÑìó¿ÃüƒëKþ}Çîæc}«Å_ô µÿ¾‡ÿGÚ¼Uÿ@Ë_ûèñu³ö(½7ýÿñ£ìPÿzoûþÿãG°Îÿò­/ù÷¹ÿ™ö¯Ð2×þúü]jñWý-ï¡ÿÅÖÏØ¡þôß÷ýÿƱCýé¿ïûÿÁÿ;ü?È>´¿çÜ~çþf7Ú¼Uÿ@Ë_ûèñt}«Å_ô µÿ¾‡ÿ[?b‡ûÓß÷ÿ>Å÷¦ÿ¿ïþ4{üïðÿ úÒÿŸqûŸù˜ßjñWý-ï¡ÿÅÑö¯Ð2×þúü]lýŠïMÿßühû?Þ›þÿ¿øÑìó¿ÃüƒëKþ}Çîæc}«Å_ô µÿ¾‡ÿGÚ¼Uÿ@Ë_ûèñu³ö(½7ýÿñ£ìPÿzoûþÿãG°Îÿò­/ù÷¹ÿ™ö¯Ð2×þúü]jñWý-ï¡ÿÅÖÏØ¡þôß÷ýÿƱCýé¿ïûÿÁÿ;ü?È>´¿çÜ~çþf7Ú¼Uÿ@Ë_ûèñt}«Å_ô µÿ¾‡ÿ[?b‡ûÓß÷ÿ>Å÷¦ÿ¿ïþ4{üïðÿ úÒÿŸqûŸù”ôÉu¹nYu8a‡a!‘%²8ûǶkWiôªßb‡ûÓß÷ÿ>Å÷¦ÿ¿ïþ5¬#Ê­{˜TŸ<¯d½ ;O¥O¥Vû?Þ›þÿ¿øÑö(½7ýÿñª ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ]@§Ü×6¥rÞûíþñþuÔ­œ!ýã`ç +0ü‰®[ß}¿Þ?΀;˜>࢈>࢘†]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@µ± i$MS]K{¶%Ðx<ÃdFbÌ;OáPjv×·šU¼‰ˆÌ¾zI)zw §ã¦kÃX}GÔ&¹‚™µ #‰|ï—y= aF:úv¤¿¯ÀoúüN¦Êþ×Q·óí%G’¤à‚ê<ƒìjí½?íâÈÎVrÛhØ)o@Äm'Û5GG¼Ó-,Á]F™nîH’X¾ei˜gÀÀã>•KX¾·¹Ö,VÚÿíSCt€éárÎFÐIäãŠ}RFÍ¿í½?íâÈÎVrÛhØ)o@Äm'Û5=íý®oçÝ̱G ž¤ú9'ØW;¬_[Üë+mö©¡º@t𹃂ç#h$òqÅ[×XZk:V£p¬l 2,Ž‘0XÛ‚3Û4–Ãê^]Mk)îü÷X`ǘ^R¹éò‘“ùSìµ› Bv‚Þfó•w䉣lzá€$W9­ëIªéÜvÒÅ%¤ÂRhùÉ-ósÓŒ “M'ñU¼–Ú“jËöwI%*¸·‚€/ÌxÆ3Å5¸=æÕ“ûLØEmq3¦ß6HÕvE»¦âHúð hW;eckqâ­bâkx¤š‡Ë‘”O“±íYÙy^k»BÞNŸ*).éæ|ÙÇ'Œ÷¥Ðæ•~øú× )£jré7ö²ÆË’]Uï™±¼œ•ÎpAâ¶|'º]\Ëge4 ¨ 8™Ÿ›$uúS°®t6ÿñíûƒùU}?U±ÕæÊáfJa“®:ŽŸJ£­ßKaá²Ößñ÷2¤ãÖG¯åœþ‹¥Åw kÖ1ÜYAikw´ýÕÁ—t¨ V9EÁ#pïž)-¯ëúcz/ëúÿ†:ˆu[Fk.RK¨4±§;8äôÏ·Z¹\í¥¼6Þ9¹H"Ž$:r6ÔP£&WÉâ­>¦·ÀY¶°#Ø?ãÎ;VLóÿ=~lþ”tAÕ£zIšY]R4™˜à;“Y–>#Òõ+•‚Òáäw¡0HªÀz1Pàk?]¶½½ðL±ùwS\aHæTÈ¡Áe!>\•kÇæüüŽIÛštPÙÜË«Aᥠ§I¥ºÈ°çË3œíý¬g8öÍK‚;Ú+Îî5KMA-Ày-ô[•™W†‰¶' ;ƒùTþ:oö®ýƒ·q¶oíBã`ÆñÓvîúÓ¶¿×Ÿù ú_úéþgSqª\G¯Á¦Aiá3É+ÌSb† ÀÚryõrÊößQ´K«Y<È_;[iÁ ðyê e?üQÿØ5¿ô`®cJ²¶Ômü/ky Onßl-Œ©!Ž8¡-õÕÿÞïúèz%çzm…µ•¶}o˯íw¶3n%š-ò.Ò{ŒùTr^G?Šín#[ Kßí?%àDarÉÊ–sœ ÓŽhZÛÏþù‰éë¿ù‘Eyž¤Ú~/ü¯öøÔÐGæçx‹Í]»?ÙÙéïOŽÜÜx‚u¼Ô¬ìõA¨f#,ö‚¾@¼…xÀäçšK[]¿Ìµÿ®ÿäzMcÛø….âyíôëùmÄI–5ÄŸ6ÒTnÎ\8®~éúWž[iöpxÖîXRækˆ|ÉUgÿHOzàö;m3R]In™c)ä\½¹ÉÎJœf¯šó›ç”i×ÐT‰5·kÑ$lʱ6J—U ”'ë¤ð…¼PÙ]5µý­Õ´“eÑ ÅÀʨ,ÜwëÜе_wä¿ÌoGýy“Ùx§O¼‚YØMo P%üê Å€èO?)ý)öÞ'Ó®-EÃý¢Ý|Õ‹î„3/n‡×§<â­XéGE¹Žóe­«"«ËP•äÄçÒ°¬žoZjÚ,š„z•ªÂ¾F¡ùÎp§)e Šêî/­­g¶‚i6Ërå"P¤– ztàu5BOi1[[\‰;¢Â. œ¯ÞùB“Æ=+#÷3kú Ô®¢d:|eÚÃéýiL(üMcé«tÖþRCûï6´Ñ—QËg€AýiØØŸiOûwÛWÈó<®·ïþîÌnÝíŒÓã×´émâfq³‹tß ©2‹‚‡y¤Yi¶íw«ëÙ®ÅÂÞ"Õ$ ´§pÆÞ>læ³®õ½gM´F¹ #Ö!Š ø"Ú%Îð­‘N;Ž(Z»z~ÿõ;w½·Žú;&“FÒª`òª@'=;ŠÎOèp![õ%ŸËY67–[ÐI¤þ5©éš‡öé¶œ÷—é7KJ¨›I(8Ø£õ¤ºÖt»ŸØêj-ÓOòϘ’c+Ž<秤¶¿õ»ÿ ëoë¡×®¥fúœšjΦò8Ä­B“€} Fu‹¹¼·7#ͲŒKp¡IòÔ‚Aéè:kw±ë†£o\j:oÙ¢žf_+÷‰øîÏÔ HìdÓnµ¸Á»»Ñe¸¹oY7GÐnÀö‡§ãù\#­¾_äβÃÄv§*Gh× ]w+5¤¨¤zîeõ©­5¼¿¾¶Ž6ÛhëIžŠî }rþ×4ûM&—Ä¢èÅdÙŸ(lÚ€6¨n#“Q]XBž±—R¼µ¶š{ƒy*^äÌî l~Gÿ|Ž 9+7ýuÕmΤ–Ú¥•‰Œ³]‰`x]€ëWk„H¬uɼ0“é‘GjÉs‹b2ƒF@È8È㡪/< §Ã¦]¥ˆ³K»´ŽãQV’8‚>#œ2z OMæzMçÚm¼z­·„­õ[¨š+Ë'Ì­·…<õã¥C­Û$ž Ô-ïïlìFØÖÂK˜]™hæ!³ž ü)µga-®z=J=BÚ9$´’ã}Í´ ,ß!)ÏÍéÎ’=fÂU±dŸ"ümò7ÏÆïN8õÅ Ú­Šê‰¦›”7®…Ä#–Ú;œtüj[›Ÿ³˜G‘4¾l‚?Ý.vgø›Ñ}ëöÞ|i¤•VúößQð­íݬždZÊU¶‘Ÿ”އžÔOÝOÈ!ï[ÌÓ·ž;«h®!mÑJѰFAš’¸tÛ=RæÎ+Ød@Ð7ð6~ðô>ôíÞ+ ÝÛE¶{Û ÉRs9¬ zœ÷÷ª’I¿ë¿ù =¿®ßæw´Wœh7I?‰ì.-?³àžæ)ÍÅ­ª2¼g\žH=ð;ÔV-§ùú R¿ð›Â/L™ó·l|†ÏðçíŒb¤ÜôÊdÓGo“ÊÛcK³À šó¿ [ùº¥Œ“jVêÑÈæê!ÖæSƒ¹\— ŽàíÇÛkÿò.êõë/þ‚iKHܨë+ÙëŸlŠWLÔ)œ*;ƸÚA!μwç‘ÅO¤j+«iP_,f5˜œ‘‚Gô®diöv6ž6–±@f¹äòÐ.öò“ަ±7—Ðô§–Þ;ŒñÜýªx’`~Q"†\wÆN3VÕ›^d'{z‘yt–63ÝȬÉm#$“zÍ_iÿb¹ºM p:ÆC§Ììʬ€NN zÒxjÖ8ü??lŠúÝËìtS³a'å’vŽœ“Å7Ä6ºXÓÝÝ.œt’+”Âì””œŒ9íÅKÐ¥©b×ÄIjwM Ý9Ž8ç…Ñ·…ÜTä`~¶jÅΩegqäO6Ù|—œ¨Rqýæ8ÿrË-ö½áÛÖÇws§\‰l¯"M‹pPÈ9åN8§ZÊ5/]ñÆXî-Z `ÃDŠr-ù Íÿ[iø„ui[ÿ‘»qâm*ØÀ$žRg„OŽÞI ŒôcµNÖ–_iÚÛÜ›ÕxîsäùHÒ3ã®A{xdþÂsOcpè/5fëMÓt­ç]k-EZií•BÈ\åÁS‘ŒãŒç޵RVæÄµþ¼Ž’-bÆf³T˜î¼ÝäÛF[¨ãø©£h·7í:¬–ñ‰e pI< ü«7Wºí߆åyÚÎv’éVxczªà:«ƒ€Àwõ¨uM6ù®üAl.'Ôfû-¬„:ª´ˆ$bÈ€9öç5,}?®çWiâ}úæ;x/3$Ÿê÷Æè$ÿu˜ß5vÛR³¼ºº¶·^kV 2`‚„ŒŽ¿Ò¹}kXÓõû m;I“Ͼkˆ†·ÚÀ–n>LG5F}FõcH‡Î»’þâÖDõS€ŒÝaŸ¡4ÿ¯ËüÅý~äu¯â --¯nMØ0ØÉå\2£ÇzŽ™©,5‹=JGKo´nA“æÛIÇÕÔf¸[û(ôÅ|nBÄ–®\õf ncîHÍmÿÂAkm¤ßÉmâ«]‡“ò²¬NÕÀEY—­!›¨¦§òÇ,qÎð«÷öœÙÈü(’léžYÞ-ÅÆüñÛq\Ž»§Xé:f“ÍÍ‹›8}Ž÷;.[qèùÎÞ©šÂÃ]ñ&÷OŽŽÊ9ˆ—<{Gõø?òŸ×uþgkEy]íú^hQß}†9cÓ‘]^«4’¿#llà £œ“’8®ŠÒÒ WÄvQ…n4ˆ¥_4gkîå¾´í¯õçþB¾—þº™ÙU)õ‡U´ÓÄlòÜ#ÈH<"®9?‰¸8íÍLj'[ÍJÎÏT†b2Àÿh(äÛÀ(WŒŽNy­¹‰½Oê¹ùc·{8²).GÕÉð›ér­­Žªy|‹y%òÞMŠ[dc,Øõ¥†O6äØé½Clq†\ö#Ö¼ú{m.Ú×ì0¬óE¸7 œ ¢Hõäóï]VŸ«ØÚévÐM>Ù!ÓÒæA±ŽØÂãwÛ§Z¦­ë¿ùíývÿ3j¸ÿ}öÿxÿ:é Õ,®n’Ú·Lð-®Ò38$~k›ðçßo÷󠿏(¢¸( \ÿ«5çþ"SöˆÏý4νq”5Çë¶eþ`2AÍtvªße‹å?tv©v·÷Oå^wâÛûf ioøTuägÿ}ð¤3Óö·÷OåFÖþéü«Ì?á>Ô¿ègÿ}ð£þíKþ€6÷Ñÿ ôý­ýÓùQµ¿º*óøOµ/úÙÿßGü(ÿ„ûRÿ  Ÿýô€=?ktþTmoîŸÊ¼ÃþíKþ€6÷Ñÿ ?á>Ô¿ègÿ}ð OÚßÝ?•[û§ò¯0ÿ„ûRÿ  ŸýôÂøOµ/úÙÿßGü(Óö·÷OåJªÛ‡¯¥yü'Ú—ýlÿï£þÂ}©ÐÏþú?á@•oÿѸ?•I^h>"êà4kp@$oð¥ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þè—–É{e=¬…„sFѱ^ ƒŠ[hÖÖt$¤HKuÀæ¼ëþ6±ÿ@{ûøßáGü,mcþ€öÿ÷ñ¿Â€;«%fÖ!ÔÖêâ¢Ê)Í®›·a²¤õˆ­ ó_øXÚÇýíÿïã…ð±µúÛÿ߯ÿ <€ôª+Íáckô·ÿ¿þÂÆÖ?èoÿü(³¸ÐîðMs}4"Q(µg_(09qó‚k\ò=+Íáckô·ÿ¿þÂÆÖ?èoÿü(é`;4ÑnRUs¯êŽ«y8>Çô­zó_øXÚÇýíÿïã…ð±µúÛÿ߯ÿ ôª+Íáckô·ÿ¿þÂÆÖ?èoÿü(Òª KH,mÄɲ ÌÁrO$’zû“^yÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@þ§§EªØ=œí"Å!]û€ ã§CŒj¶y¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•T.ô˜¯u[¹§œ­³oŽÀG¿Œdž}qí\'ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…wöt:p¸³·Ÿ;ÎÛÈ8fêJ©¨èKªHâ}Bùm¤dµÔFã¸?.î{àŠâÿáckô·ÿ¿þÂÆÖ?èoÿü(Ò6(Ë ¸qQÚÚÃci­´b8bPˆ çWÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Yh·ñ]Ü_ß]˜¼1Îë²6 Œ€ª2pHç5ÆÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP£Í–dx‹)Ó—ÜdŸ¨¬ëm&âÞá%}oQTäÇ/•µ¾¸ŒÖ¸ŸøXÚÇýíÿïã…ð±µúÛÿ߯ÿ ôª+Íáckô·ÿ¿þÂÆÖ?èoÿü(Ò©²F²Äñ¸Ê8*ÃÔóøXÚÇýíÿïã…ð±µúÛÿ߯ÿ ,=ÞÞ+Kh­à]±DrNš’¼×þ6±ÿ@{ûøßáGü,mcþ€öÿ÷ñ¿Â˜•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã… =*Šó_øXÚÇýíÿïã…ð±µúÛÿ߯ÿ ôª+Íáckô·ÿ¿þÂÆÖ?èoÿü(Òª¥ö m¼æ}¶ó,êªF—8ÝÇ@N~ Wÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þé$d’=ÅUÓtøt­>+8 ²GŸ™ÎY‰9$ŸRI5ÀÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð¥_ˆºÃcÛûhßá@“\‡WßïçUlücªÝ …ºgÝmhv†5ŽhÓÁ÷è†QLa‘T.¬Ä äV!Ð-q Ç!'`ª§ÃQ“÷å]ŽÀ{Q寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùR FÜ•v>ZúQ寥svÚDFV͵¨ˆ ¶Ôà  )h ÿÙ endstream endobj 63 0 obj << /Type /XObject /Subtype /Image /Width 1137 /Height 465 /BitsPerComponent 8 /Length 78025 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream ÿØÿàJFIFÿá°ExifII*JR(i‡Züÿÿ)( üÿÿ)( 0210‘ 0100 ÿÿ q ÑÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀÑq"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?÷úBqJxRæàF¤“@™@ïL7 ;ךx‡âe¶›}%¬ u,d‰~ÄS霟°â­ÓÌ1ý¼Ÿþ"•ÀöŸµ'­jOZñOøZW_ôÿOÿGü-+¯úGÿ'ÿˆ¢à{_Ú“Öµ'­x§ü-+¯úGÿ'ÿˆ£þ•×ý£ÿÀ“ÿÄQp=¯íIëGÚ“Ö¼Sþ•×ý£ÿÀ“ÿÄQÿ FëþÑÿàIÿâ(¸×ö¤õ£íIë^)ÿ FëþÑÿàIÿâ(ÿ…£uÿ@èÿð$ÿñ\kûRzÑö¤õ¯ÿ…£uÿ@øÿð$ÿñÂѺÿ |øøŠ.µý©=hûRz׊ÿÂѺÿ |øøŠ?áhÝÐ>?ü ?üEÚ¾Ôž´}©=kÅáhÝÐ>?ü ?üEð´n¿èþŸþ"‹í_jOZ>Ôžµâ¿ð´nèþŸþ"øZ7?ô‹ÿOÿEÀö¯µ'­jOZñ_øZ7?óáþ·ÿGü- Ÿùð‹ÿ[ÿˆ¢à{WÚ“Öµ'­x¯ü- Ÿùð‹ÿ[ÿˆ£þ…ÏüøEÿ-ÿÄQp=«íIëGÚ“Ö¼Wþ…ÏüøEÿ-ÿÄQÿ Bçþ|"ÿÀ–ÿâ(¸Õö¤õ£íIë^-ÿ Bçþ|"ÿÀ–ÿâ(ÿ…¡sÿ>àKñº.´ý©=hûRz׋ÂйÿŸ¿ð%¿øÝð´.çÆ/ü oþ7EÀöŸµ'­jOZñoøZ?óãþ·ÿ£þ…ÏüøÅÿ-ÿÆè¸Óö¤õ£íIë^-ÿ Bçþ|aÿÀ–ÿãtÂϹÿŸð%¿øÝÚ~Ôž´}©=kÅ¿ágÜÿÏŒ?øßünøY÷?óåþ7ÿ¢à{OÚ“Öµ'­x·ü,ûŸùò‡ÿÿÑÿ >çþ|aÿÀ†ÿãt\iûRzÑö¤õ¯ÿ…Ÿsÿ>0ÿàKñº?ágÜÿÏŒ?øßün‹í?jOZ>Ôžµâßð´.çÆ/ü oþ7Gü- Ÿùñ‹ÿ[ÿÑp=§íIëGÚ“Ö¼[þ…ÏüøÅÿ-ÿÆèÿ…¡sÿ>1àKñº.´ý©=hûRz׋ÂйÿŸ¿ð%¿øÝð´.çÂ/ü oþ"‹í?jOZ>Ôžµâ¿ð´.çÂ/ü oþ"øZ?óáþ·ÿEÀö¯µ'­jOZñ_øZ?óáþ·ÿGü- Ÿùð‹ÿ[ÿˆ¢à{WÚ“Öµ'­x¯ü- Ÿùð‹ÿ[ÿˆ£þÏüøEÿ-ÿÄQp=«íIëGÚ“Ö¼WþÏýâÿÀ“ÿÄQÿ FçþñàIÿâ(¸Õö¤õ£íIë^+ÿ FëþñÿàIÿâ(ÿ…£uÿ@øÿð$ÿñ\jûRzÑö¤õ¯ÿ…£uÿ@øÿð$ÿñÂѺÿ |øøŠ.µ}©=hûRz׊ÂѺÿ |øøŠ?áhÝÐ>?ü ?üEÚþÔž´}©=kÅ?áhÝÐ>?ü ?üEð´n¿èþŸþ"‹íjOZ>ÔžµâŸð´n¿èþŸþ"øZW_ôÿOÿEÀö¿µ'­jOZñOøZW_ôÿOÿGü-+¯úGÿ'ÿˆ¢à{_Ú“Öµ'­x§ü-+¯úGÿ'ÿˆ£þ•×ý£ÿÀ“ÿÄQp=¬\¯­=fSÞ¼H|Sºó Oü ?üE^°ø°¾z­æžÑÆN Ç6ò=ðTQp=Œ04µ‘¦êq^ÛÇ42ŽE ¬:kUNE0Eexƒ^´ðî‘>£xO—áWï9<=ɯºøÓ®<Ìml,"‹?*ÈØr*÷\Ñšð?ø\¾$ÿŸm3þýIÿÅÑÿ —ÄŸóí¦ß©?øºWß3FkÀÿárø“þ}´Ïûõ'ÿGü._϶™ÿ~¤ÿâè¸ùš3^ÿ —ÄŸóí¦ß©?øº?árø“þ}´Ïûõ'ÿEÀ÷ÌÑšð?ø\¾$ÿŸm3þýIÿÅÑÿ —ÄŸóí¦ß™?øº.¾fŒ×ÿÂåñ'üûiŸ÷æOþ.ø\¾$ÿŸm3þüÉÿÅÑp=ó4f¼þ/‰?çÛLÿ¿2ñtÂåñ'üûiŸ÷æOþ.‹ï™£5àð¹|Iÿ>Úgýù“ÿ‹£þ/‰?çÛLÿ¿2ñt\|ͯÿ…Ëâ?ùöÓ?ïÌŸü]ð¹|Gÿ>Úgýù“ÿ‹¢à{æhÍxü._ÿ϶™ÿ~dÿâèÿ…Ëâ?ùöÓ?ïÌŸü]ß3FkÀÿárøþ}´Ïûó'ÿGü._ÿ϶™ÿ~dÿâè¸ùš3^ÿ —Äóí¦ß™?øº?árøþ}´Ïûó'ÿEÀ÷ÌÑšð?ø\¾#ÿŸm3þüÉÿÇ(ÿ…Ëâ?ùöÓ?ïÌŸür‹ï™£5àð¹|Gÿ>Úgýù“ÿŽQÿ —Äóí¦ß™?øåß3FkÀÿárøþ}´Ïûó'ÿ£þ/ˆÿçÛLÿ¿2ñÊ.¾fŒ×ÿÂåñüûiŸ÷æOþ9Gü._ÿ϶™ÿ~dÿã”\|ͯÿ…Ëâ?ùöÓ?ïÌŸürø\¾#ÿŸm7þüÉÿÇ(¸ùš3^ÿ —Äóí¦ÿß™?øåð¹|Gÿ>Úoýù“ÿŽQp=ó4f¼þ/ˆÿçÛMÿ¿2ñÊ?árøþ}´Ïûó'ÿ¢à{æhÍxü._ÿ϶™ÿ~dÿã”ÂåñüûiŸ÷æOþ9EÀ÷ÌÑšð?ø\¾#ÿŸm3þüÉÿÇ(ÿ…Ëâ?ùöÓ?ïÌŸür‹ï™£5àð¹|Gÿ>Úgýù“ÿŽQÿ —Äóí¦ß™?øåß3FkÀÿárøþ}´Ïûó'ÿ£þ/ˆÿçÛLÿ¿2ñt\|ͯÿ…Ëâ?ùöÓ?ïÌŸü]ð¹|Gÿ>Úgýù“ÿ‹¢à{æhÍxü._ÿ϶™ÿ~dÿâèÿ…Ëâ?ùöÓ?ïÌŸü]ß3FkÀÿárøþ}´Ïûó'ÿGü._ÿ϶™ÿ~dÿâè¸ùš3^ÿ —Äóí¦ß™?øº?árø“þ}´Ïûó'ÿEÀ÷ÌÑšð?ø\¾$ÿŸm3þüÉÿÅÑÿ —ÄŸóí¦ß™?øº.¾fŒ×ÿÂåñ'üûiŸ÷æOþ.ø\¾$ÿŸm3þüÉÿÅÑp=ó4f¼þ/‰?çÛLÿ¿2ñtÂåñ'üûiŸ÷æOþ.‹ï™£5àð¹|Iÿ>Úgýù“ÿ‹£þ/‰?çÛLÿ¿Rñt\|ͯÿ…ËâOùöÓ?ïÔŸü]ð¹|Iÿ>Úgýú“ÿ‹¢à{æhÍxü._϶™ÿ~¤ÿâèÿ…ËâOùöÓ?ïÔŸü]ß3FkÀÿárø“þ}´Ïûõ'ÿGü.oÏ®™ÿ~dÿâè¸ùEy‡ƒ>*ÿmêQéš­´v÷E,Dìfþé$NkÓ•· Óh¢Šl‡ \ιyåFÜ×I1ù pÞ(¬O@ æ3üìrÍÉ>¤õ£uB­ò¥.ê‘’î­{¯ê6z ¾³2ÇöYÈ êpXcqÏqYšt^jVÖÓÏÉ Y%‘‚ª.y$ž¯D—\ðΩ}ªé‚êæî`û:I;ƶ©åƒ°¡ÎG<Œõ¤öÐç'¦xbûV¶Im®´ñ$¡ŒVÒ\4›s«ƒèzâ± A{WaáËKKêÚ¶·1dCwv©ödä9cê{Ï–³žÒËQsfºŒ+¹Lipц9ûÁ×’?ži½ì¢I'š8bBòHÁW«pt7¾½³šÆwhd¹e‰ÃH‘+gØ,ON V,w &½ÚrǦ©™,ÅÖ1Év#<ò+«ñU¼ ¢¦¥~ºtì’«Ã&Ÿ.EÂwr?]Þ¢Ž‰°êуmáíBë^›F_%.`ßæ4ŒDj©Î3Ž˜ã¸¨Æ‰vÖ«$+ëƒoçp8Éãùý+ªÕµí,è7:Í­Ä_Û:­´v³B¬7EŒ‡b:€@ò¬Èoìdž|/ º€K¤d• ƒtk¿;˜v愵³òüÁíuýiþe{ïêv0ÜÈ.4û¶µ¸ŠÒã|‘VR£á‹Í*Ñæ»¼ÓRTPÏh.s:ƒÓäÇ¿­kx‹Åvpê:½¾an²^*mAn žj‘ÉQÑV5 ,®4Ç×uMPºHqeqfù¹/Ø>ã§_|Ôý›ŽÚØåîtk»_ìÏ1á?ÚH¯Ö< Üq×¶jÄ~ÔåÖî´˜Ä-5¯3Ëæb$%ˆsé]¾&´´´ð½¼vú=æØ#Y¤¸ŒHöç#<çä#¯>”³jº]Þ·â­6MF"Ôü¿"ð6è² pXqƒëõª{ýâ_åøœÞ«áëÝ&Ò;Ç–ÖêÍÛ`¸³›Ìw¡8ÒjžÔ´ƒb.Þ h|¢[$ãå9æä~}kNõìt?Ýhë©Új—· !û#ïŽ%\s»Ôãüâ·õ/éPj—qLñÞGh±Ï¦¼GzyÂ=¤dqŒ~ ÒÛúûÃúÿ#™> ÕW]:;Ëf—ßí%ÚV„Î:íÎƳuM3û/ÊÎ¥¦^y™ÿŸ7f1÷¸Îxúîlu«¼I§^Ï©Xï} G3Ï2íç;_ž<޵Žú?ö¿ˆ´¨O ™Ïšš+p~f.>ƒûÓ¶¶Ö¬:_úÙ÷þ¼³’ÎVk»©í–æH ·fhCtÏä)Öþ»ºðýÆ£ W2\CwövµŽÌÐK9Î:WC¤kÿÚ Öç–öÆ ¹Oxm¥ò×!Ll=Qß5 êöÚn‹y›¬±s­««´ø–H°2ÍÝ—=OCB×çþhŸ/ò9{;˹+[;™äO¼ÄÎËõqK •íÄÏ WRÍߎ8Y™~  ŠîïIoø†êßSµK‡xͱkö·‚A¸ïB7çŒõ¥ÕuË4¹ñlö:œ)4ÐÛ$‚pØ 6ÂN;â•ô¸í­ŽØßd˜ØÝc%dÀÛPŽ œ`­ZÑô£«Æko¥»O,¥7ð:.29?^ÕÝGâKi4[;«[Ý5¤ŠÌÇqíô‘»>>oÝý×$ç’3ÏZåÿd|þ”Ý[@¹²×îô»(®o¾Ü´P–8*H\ã­uÄ)®[jÚëPiWgQ,“LaÀUPÃéœSÍþ•?Š5ûÈ5Ku¸c¶2_½¼2£qÞ„nÆ:fÿ¯@Øãì4GR¶¿–Úg±ÛæA±Œ¬X‘…P:Œôª°éú…ÁAaw)ˆ•G¶Â:†Ààýk½ºÕ¬nµŸAg¬ÚZMy ¿ÙîÍÆÈË ù‡˜?*§á)ìl!‘äÕí~Ü·ÿ¿3ê/oêé‚„ó÷ºÒZƒþ¾ã•Ðô©5½Z+”C¸3<¬»„j£$‘‘ôëÞ«Kgsiû=ÏØËb;†…•gƒžœúfºégƒO´ñ>» #‹ë¶³µd<2³nr=ˆïíZ~!ñ¤úMôÚ}Þ—-­Å¨ˆ[É{ ™x ùAr1Ò‡µÿ®ãK[öï4Eö¯5£óBy ¸§÷€Ævûô Ù_- »6WBÔò'0·–àXÅvQßÚÂ4#¬[ HÙ—[ƒ"lT-Ÿ³ù™êGlûUÛ+í"ÓÃrC©jÖòilŒ“_¹—Î#îˆIÚÐQ-/ýwÖß×c‚M3R’4ëÖ…ñ¶E·r­ž˜8Á¦=äwBÕìîRåºBаsô\f»ëÁº\+«Åºè[È ³0ìØÎþœûRê+e¤iºö­c}%ßÛ6XÛÌò™HÌ€9å€}¨Ù\V»±Í·‡5ÐçÖJ*éñ°Øò|­*–Àe^xäu#Û5º·t»èSÁZý´·H&‘­Ä1<ƒsù;Aäí\Ù‘HÆáùÓ·½`ésB{ ûhD×pÂzI, ª1M[K·µk¤´¸keûÓ,LQ~­Œ ôÏ]¥…Þ´÷ú½»ÚO§ˆaÓ|âÒ Œ7—ü>¹µOMÖìU4‹á®[[é––>MÖ˜Òï&Ò#þ,’9ö÷¥Ñÿ]ÿ¯˜vþ»_#Š“I”iz}ä-$ò^<а%»äm8àôoÃ¥Dºe÷ö…µŒÖÓ[Oq"ǹ£É'ò3Ž}+°Ð5]:|'æ^ÛB ší¥W™G”6ÝÙäƒý+\¾ì·Úæ\ö8ÿÇh’³°–¨Ã¾µšÂäÃ#nã*ËчùíZPèö‘F¿Ú:‡“+ ùjê»~¤õªú¥Ú½å±ëäÍùƒÓõ­vÂååTiãP 2Ž…r=i ËÔtÿ²"Oop.-œà8<ƒèqüêþ‹áñ¹¼ºx!c„TûÍïÏAP^\cNh\a䔤‚GÏ»··ó­+y…Þ‹ (#%Qc;ÿ€Ž3Ç9GNÜŠæÅU•8¦º³Ð˰ð­Q©ëe{wªxj+kwŸOº’o,eâ—±êÇåŠçwfº¸em´­++¨%Œ¿Å'ûÞý½:c+ŽhÓŠœ%YTNúÛ©Y–EÁZýgøozÇA‚&lìfé¸×§ÀÛ£ÍxçÇ?Ù±öÛùׯZÂ>•Üy‡›üf˜ŸZÆñsÿ|=x–kÙ~2ø’Zÿ×Úÿè^3šLb榵®®c ¾ƒ¹¨3W´ë«{Hî$o•—bGÈÈ=y)Õ¯Ùn„/((@a(=ñR]Ø}–Þ9Ö1¶á£1ŸÈõ%ÍÍå­²ónÑ6¼¾×=þ”]ÝBtõ¶[§»“ÌÜ$t+´c§<Ðvjݢܳ¼²íâÈùäg¦8¨Rëe³Cö{vÎxÑåÆ}jÖ“æ‚݈$l¬›ƒýiˆ`±ÓÅp’l(á”÷Ï·Ò‘l‰¶‚f”)ž_-nxé»­Yûm¬É–Ù—d¸\ž¤ Šêî¿¶“ö[}¡I  “óÒ’4Õ3ÝÇ%Ð-±¹ü²søfœºC¼‰²áŒÈ% z¿/\óR.£oÎ¥(Úâ`<µt$?ÔWKç¹¹Gšëì¢5Äf(É íÚ„#´Š{è­à»,ŸòÓË#{íMŠÐÊ·dJÙ”“òçw'ߎ•}ïí?´ìæó7˜Áó§òÊï8㎴Ïíwš è®g,®„B6}}Ó­@šz#–æí-üÑ”R…‰§Ò–=.WÔ¾Äòm»·¸ëÚžóXßAoö‰Þ aAÄeƒ鎔ÿí(þi¾dŒ[¢È$“Û§ãLmt©®ng„°ŒÃ÷ŽÜäö6+( ŒwW¢‘Šä–ä} [ƒZC=¯š j¹3¾3¼íÀ„{P°»Žt…àa$Ÿqrâ¤:F¢ en~òÿ^¢\X9Ya.]’€dqŠ‚ è;ÒbþSœÐ;{»¥f‚p§ä NMI ¨6·¯*²Ë\Æ <æ®GäM¦\´—áep…»qÇZdº…µÄºˆfhÖtP·9+ëõ  IcvöÿhXÅŒîã§Ó­ es%¹¸HI„KäzžkEu8 ´.³$3ÅÍ­o¼œÍØT6³Z¾ž¶÷2 NŽ/$îF'Œ7J`A{å/‰e—d`° Ôšeõ¡²™#2¬›>åsüþµ.¬Ê“Gh‡)oO«u&›{ ¼’Ü[+ÊRÝU‚¡È#­ ‚Þk©<¸»ã8?t¶—0롃 ¬÷W®~˜«ºL%ÄþtrD†ÝÆæB=?:rjÖ²Ø$nÓGnt›JŸ›ÐJ¦ÖÏ w0¼bG  ç'±éšyÓ.dže¶…Ý#r™fPŸò©þÕioE;Ì¢äLò2´zc©¢{ëw†`’Íx%_”ýß^”À¯m§Mt·!r%‡Ë I>¤ñÒª0dvFe$ïZ¯yi5΢1H®ví“Ë'§·ZÍû4¬I†)e$+¬g =i4:}åÄ>t03ÇýàG?†sL¸³¹µ*'…“ÝèsùUë{Èm×NI‘ ’C((r çª?·B–ÐK&Såå[· Å.êe]MU’Ø\¦•¨<w‰VÖB…}sŒcÞ¤e]Ôn«i£Þ¸såªìµûYÜã˜øäc<óÐÕ~ê7S)ðÃ-Ä«I,­Â¤hYÐM©òÜÍ8ŒK4’×daܶÅôè=©‘Å,ϲ¤•ðNØÐ±À'Ði÷³Úù^zlócYSæ*zN´ÍÔn¦Q@ÝFêe>(¥žUФ–Fû©côš7Qº„ŠYÞ8¤uŒnvT$ Î2Oa’>´Ê~ê7T×ö3i·²Ú\mób8m§#¦zÕj~êµcª]é¯+ÙÍå4Ñ4.ÁA%QÈ8úŽj•íÔ»©”P÷Qº™E?uZ¼Ôîõ·K©¼Å¶ˆCÚ"ƒ€?3ÍR¢€º­XêwzkÌösyM4M ‡hmÈÝG ú}j•íÕnÇT»Ó^W³›Êi¢h]‚‚J£qõÕ*(Û©wS( î£u2Š»6§w>Ÿoa,Ùµ¶,ÑF¥¹' dþ9ª»©”P÷Qº™E?uX°Ôn´»Øï,¥ò®"ÎÇÚ#¡5RŠ‘¤.Řå˜äŸzMÔÊ(ûªÔÚÜú}½„³fÖØ³EP–䜓øæ©Q@Ý[òxçÄrÂо¢ n¥X}š!xþås´PÝCS»Õoîúo:vÚ ªî¦Q@ÝFêeLÖ/´k£s§Î!™¡mŠü0ÀŽÂ¦Õ|Gªëij7Buˆ’ƒÊDÁ=~êŠÊ¢€ºÔÊ(û¨ÝL¢€º­[êwv–wVM²  «:…8 gªTP÷Qº™E?u©”P÷T¢î`¸óZ¯EL%·ëJ—/ÄnÊ=3š‚ŠŸí¾æË7©5"^¼O¾"ÈÇ©VëúUJ)4š³dâù¢ìËSßMq2FltÉéø* ÔÊ(ŒTU’°ç9MóIÝž­ðÜçNýöþuì6ŸêGÒ¼wá·üƒcÿ}¿{Ÿú‘ô« òÿŒŸò¶ÿ¯µÿмb½Ÿã'ü-¿ëíô¯³²¹Ôo#´´‹ÍžS„MÁsÆz’jL(­4[»y¢K©,­ÖLâG¼‰Ô`gŒÄz:ÔW:{ZéÖW"²Ý‡!@û»[o&•ÆS¢Ý?JZ(ëS­ÃX½êÅ›dFÎ|¬A œóƒÎ1ÅI›<±A< ½´ìè“Ï T%FHî{œc'RŠBÀúѽpNáÁ怊L‚HÈÈëK@7Ù.>Åöß(ý›Íò|ÍÃïã8ÆsÓÛOk=¬PK<{tó"bÀî\•ÏŽAë@ÑVôûÔVí’UQmnÓœŒîùÕ=ËœnôÍ-Q@2;"£;_º¤ð>ƒµ6Š(¢Š(§$‡Ùte8#ñ¦Ñ@Q@29EBìQ~ê“Àú mPŒŽÈ¨ÎÅWî©< íM¢Š(¢ŠUfV ¬UÈ àŠ™˜³1f'$“’i( Š( Š( yåù{Ûfs·û³cÔæ›Eó4¥v™¯¦ãŠePÖYade€â™š(  º?ü†ì?ëâ?ýWÕZoü{¯Ò¾UÒ?ä5aÿ_ÿèB¾ªÓãÝ~”Ћ´QE0"Ÿîà¼Uþ©ë½Ÿîà¼Uþ©èçÚêµÙìSOÒRU¾ûIÓ"Øb¸Uø±•(I÷äV,z±4I,ZMóÆê]m܆AÇ"¦—Dñ Û<Ý/S“b„MÖòª:ÇÚ¥ê­ýuÞÿ×Cv+h¡­¼†O F€nc´–8ê}éóÁ£iÚe¬S[4‘O§‰w¦ž®Í#.w ÷ämnØÀïXk¥ø%IRÇWY<´q €ªãAÇ©Ñéþ*†Ñí"´ÖRÙóºŽPž¹\`Òj÷þ»ÿ˜GK]ùu=Ô¶7°]Âq,2,Š}ÁÍ[ÿ„w[ÿ 6¡ÿ€¯þÂ;­ÿÐPÿÀWÿ ¤ìî \è5xô{}SV·bÕGcì’|òß#äüjK=/O{ø™í£Ìz*\¬in$ß'cFó‚N çñX¢øŠXb†M3Tx¢Ï–…S''dÓ†“âUš)†Ÿ« bcq ›€pM¿¯“ÿ;‡›þµ_äk´½ZîK;5ûeÅ‹cf°n™x(€¹PTàòj}KKÓm¬îu- 6öÖ`~PC]×i/ž¹¬Y4ÿMx—’Ùë2]&6ÌÑJ]qÓ ŒŠˆè¾"0™ªKù†?"M¥ºnÆ:ûÑoëúõüƒúþ¾ïÌÈ­ßcþí?vq¹³÷ªÂ;­ÿÐPÿÀWÿ ’Ä6ò¬°izœR/Ýt·‘Hú)‰£NÁ´—ÐõÑc ôOöTÜפƒrt ‹Í\ñ:6ž—Ö jß»Eû+¦ž¨TäaÌûÉpÃ=G~1ŠÀMÄ$‰—©¢È»]VÞ@g8a¤ê’†‰PžÇ>¢²¥ÐüAq+K6•©É#œ³½¼„“îH¥`2¨­/øGu¿újø ÿáGü#ºßýµüð¦m¥ÿî·ÿ@mCÿ_ü(ÿ„w[ÿ 6¡ÿ€¯þ›EiÂ;­ÿÐPÿÀWÿ ?áÖÿè ¨à+ÿ…fÑZ_ðŽëôÔ?ðÿÂøGu¿újø ÿá@´V—ü#ºßýµüð£þÝoþ€Ú‡þ¿øPm¥ÿî·ÿ@mCÿ_ü(ÿ„w[ÿ 6¡ÿ€¯þ›EiÂ;­ÿÐPÿÀWÿ ?áÖÿè ¨à+ÿ…fÑZ_ðŽëôÔ?ðÿÂøGu¿újø ÿá@´V—ü#ºßýµüð£þÝoþ€Ú‡þ¿øPm¥ÿî·ÿ@mCÿ_ü(ÿ„w[ÿ 6¡ÿ€¯þ›EiÂ;­ÿÐPÿÀWÿ ?áÖÿè ¨à+ÿ…fÑZ_ðŽëôÔ?ðÿÂøGu¿újø ÿá@´V—ü#ºßýµüð£þÝoþ€Ú‡þ¿øPm¥ÿî·ÿ@mCÿ_ü(ÿ„w[ÿ 6¡ÿ€¯þ›EiÂ;­ÿÐPÿÀWÿ ?áÖÿè ¨à+ÿ…fÑZ_ðŽëôÔ?ðÿÂøGu¿újø ÿá@´V—ü#ºßýµüð£þÝoþ€Ú‡þ¿øPm¥ÿî·ÿ@mCÿ_ü(ÿ„w[ÿ 6¡ÿ€¯þ›EiÂ;­ÿÐPÿÀWÿ ?áÖÿè ¨à+ÿ…fÑZ_ðŽëôÔ?ðÿÂøGu¿újø ÿá@´V—ü#ºßýµüð£þÝoþ€Ú‡þ¿øPm¥ÿî·ÿ@mCÿ_ü(ÿ„w[ÿ 6¡ÿ€¯þ›EiÂ;­ÿÐPÿÀWÿ ?áÖÿè ¨à+ÿ…fÑZ_ðŽëôÔ?ðÿÂøGu¿újø ÿá@´V—ü#ºßýµüð£þÝoþ€Ú‡þ¿øPm¥ÿî·ÿ@mCÿ_ü(ÿ„w[ÿ 6¡ÿ€¯þè äûíüëØ¬ÿÔ¥yÃÛyí-0É Êçtr)VädjõÛ?õ#éT#Ëþ2ÈÛþ¾×ÿ@zó_<[§’27¿#Wª|SÓ®õk;L×2Þ‘†v#ry'¯8ÿ…mâÿúËÿ#ÿâ©0èEáë›[ŸY›m:<$»¼©$}ß»n»Ù¿JÑÒÙáðÄ·AÝ Ìyb‰rÅ$J‘‘Чÿ ÛÅÿô—þþGÿÅQÿ ÛÅÿô—þþGÿÅR°Æø®{—·´†ûOÔ!¸Fr·ò«ÈëÇÊ ¢åAéש®^º¯øVÞ/ÿ ,¿÷ò?þ*øVÞ/ÿ ,¿÷ò?þ*„†ÙGÃn.&ºÑä`Q‹ËLœ0;£?÷ÐÛÿ­›Y/éÚTL-: %z4ž[™ýôHúU?á[x¿þ€²ÿßÈÿøª?á[x¿þ€²ÿßÈÿøª¸–†®‡)·ðö.Ÿc{x Èo¢µ™]·&RŒJíÆ9ïQi–‹ag®ÎªSNdгdíò}p'ýñYÿð­¼_ÿ@YïäüUð­¼_ÿ@YïäüUWý_äo@4¿±hªêæÑ]äe䑳ÿ ®zº¯øVÞ/ÿ ,¿÷ò?þ*øVÞ/ÿ ,¿÷ò?þ*„€ŽÆâÞÛÀò5ÅŒWŠu Hî +®Q­Ë9-f¸Ó$ŽÔC1ÑßìpÃ.Iç7Üi7|ØÝŒçÛµcÿ¶ñýeÿ¿‘ÿñT¶ñýeÿ¿‘ÿñTûÿ], OëÎæŒ’Ow{o5…ݽñÒ$Oô·Všàî ®N3Vá]H.”³«Â:tÔ7BLy#ä9>Ïœc¾qXð­¼_ÿ@YïäüU[¾ð//͹—Caä@.ÙeT`gæëR֟ןù‚zÿ^_äqG¯WUÿ ÛÅÿô—þþGÿÅQÿ ÛÅÿô—þþGÿÅS•¢º¯øVÞ/ÿ ,¿÷ò?þ*øVÞ/ÿ ,¿÷ò?þ*€9Z+ªÿ…mâÿúËÿ#ÿâ¨ÿ…mâÿúËÿ#ÿ⨕¢º¯øVÞ/ÿ ,¿÷ò?þ*øVÞ/ÿ ,¿÷ò?þ*€9Z+ªÿ…mâÿúËÿ#ÿâ¨ÿ…mâÿúËÿ#ÿ⨕¢º¯øVÞ/ÿ ,¿÷ò?þ*øVÞ/ÿ ,¿÷ò?þ*€9Z+ªÿ…mâÿúËÿ#ÿâ¨ÿ…mâÿúËÿ#ÿ⨕¢º¯øVÞ/ÿ ,¿÷ò?þ*øVÞ/ÿ ,¿÷ò?þ*€9Z+ªÿ…mâÿúËÿ#ÿâ¨ÿ…mâÿúËÿ#ÿ⨕¢º¯øVÞ/ÿ ,¿÷ò?þ*øVÞ/ÿ ,¿÷ò?þ*€9Z+ªÿ…mâÿúËÿ#ÿâ¨ÿ…mâÿúËÿ#ÿ⨕¢º¯øVÞ/ÿ ,¿÷ò?þ*øVÞ/ÿ ,¿÷ò?þ*€9Z+ªÿ…mâÿúËÿ#ÿâ¨ÿ…mâÿúËÿ#ÿ⨕¢º¯øVÞ/ÿ ,¿÷ò?þ*øVÞ/ÿ ,¿÷ò?þ*€9Z+ªÿ…mâÿúËÿ#ÿâ¨ÿ…mâÿúËÿ#ÿ⨕¢º¯øVÞ/ÿ ,¿÷ò?þ*øVÞ/ÿ ,¿÷ò?þ*€9Z+ªÿ…mâÿúËÿ#ÿâ¨ÿ…mâÿúËÿ#ÿ⨕¢º¯øVÞ/ÿ ,¿÷ò?þ*øVÞ/ÿ ,¿÷ò?þ*€9Z+ªÿ…mâÿúËÿ#ÿâ¨ÿ…mâÿúËÿ#ÿ⨕¢º¯øVÞ/ÿ ,¿÷ò?þ*øVÞ/ÿ ,¿÷ò?þ*€9Z+ªÿ…mâÿúËÿ#ÿâ¨ÿ…mâÿúËÿ#ÿ⨕¢º¯øVÞ/ÿ ,¿÷ò?þ*øVÞ/ÿ ,¿÷ò?þ*€9Z+ªÿ…mâÿúËÿ#ÿâ¨ÿ…mâÿúËÿ#ÿ⨕¢º¯øVÞ/ÿ ,¿÷ò?þ*øVÞ/ÿ ,¿÷ò?þ*€9Z+ªÿ…mâÿúËÿ#ÿâ¨ÿ…mâÿúËÿ#ÿ⨕¢º¯øVÞ/ÿ ,¿÷ò?þ*øVÞ/ÿ ,¿÷ò?þ*€0tù Xÿ×Äú¯ªôßø÷_¥|ïià/Ø_ÛÜÝiO0ʲHÆTùTIûÕôF›ÿëô¦„]¢Š)ÿp×â¯õO]ìÿp×â¯õO@Þº†ÏÀš4×Á ÙE¹äpª8îM[ÔüCc¦éx׶͘šHΫç`g {çÛ5ƒ¦Ú\Màï ÜAmö¯²E¯o¸ãË+‘» y#¥?V°Ô'kéâÒo·Ø uO2 Öì7prØÁÜÊOJž…-ÍÅ×íÎ¥k§þøÜÜGæp§b|»°[¦qØSõmnßF·Y®L͹‚ªÄ…‰ä õ8ªòØÜ6¥¢Ê#Ê[$‚VÜ>RPõçÒ›«Ã{©ø~ê´1Ü3íHÌŠw(q†Îp2qTírc¶¦•åÛÚÛ‰Wa%Ñq$¾Xù˜§¿<çŠlZ­”÷oi ý¼—)ð¤Ê]q×*Ecx–é¶EbÑ2Ü[x&V©`¯ÊIéÍeXÚ]ê.±EdbK}Râc|]:opU@;²sŽF1Kúü‡ý~g]©esu%¬öòÜG÷âIƒ:ý@9ÝKRþÍ·IZ)çg‘bHá+¹™ŽÞ ~µÄi—‘-°·³I›JÓ¦I ¼Èë+å1‚¤X©?0“ÅuúÄBçOE—K’û,Ê¥N:‚̽>´?ëï-æµ%•‚ÝͦßmÚÍ")Œ´@woŸ‘4\x‚ÒÚ[‰Þõ”Dn…@?_jÈ{Óá¸tûí!õ99§CäòvÌA$á“Å]¸ÓïŸLÑ¡sçÜ[O Ï&î»GÌÜõçñ¦·ù¡tù3XßÛ‚WíqnyDyƒ;ñ½zûU5ã=ÍÅ·Ø/£¹Š/4Bû3"çiÈþ"+6].ûþ±¬¥¢´JÂ'xË.Ò<î¸Ü3·vçéRé–wÛójK:lRBVd.„Ï&àCa  òy;©!²Ý·ˆå¯#]3PY­v‰bÜ€r3ŽNHàŠµ¦ê±êv¯JIK0S!fa´×îþµ¡ø~î”Yínm#û+Es ºÿXåƒÖÌkÇoQÅMªiWiww¶›%ìW:zÚ¤²Î§c|—.ÛˆùÈñGoë¸wþ»÷^"¶Óç)},PÄn /ž¸Rcß—Î6zcžÞµ¤nâ"n Ž"ùÇÎqž=xñ\ŸöF¥gr.Vٮ̱ÊdPÒ¨·’73»<:V¾± Ü˦Þ[Ú´²ZÜ žÜ:† £)“·#w®8¦"ìúÎjŠ÷•¬JÌÈ­$ê °8 dõƒO—T´†x ’úža˜£i€i>ƒ9?…sºn‘yö›Yn¬ö&/LˆìŒWÍ”2ƒ‚Aã=3Uì´½VÈig³.VÞnݤ‰¡d\äÛ†N ñëK ÎuËH¬­§¾½´µ7 C])RÙn7}ELukz,Ž¡n.H<åÞxÏÝÎkÏïÒMMkK¨#–îëHKXâGæFãp )9`K»žEth×’%ó `d{ëY¢;—;PDõãZŸ_븙Ñ.£j÷f·µÒ ͔ԮsTÆ¿m.·™mq îÉ#Jc˜1ˆ®Þ¹ïéXV¼‹U"çí»c¹žx§FƒÊù÷uãÍÎäqשt]6úÞûJI´ß³¥…¬<áЬ¤íÁ\Üí':Ò^`Í×Ö ¶k“{umm2Är£$¨<çO==9¦Oâ:ÚæÒo"U»Fxf2¨°T`6y'pÆ=ë.M&ñõÃp`©,û‹/Üû3Œÿ{Œu¨-4ÝCM½µ¸M=¦Ž9nÐň $’†FäŒyéBéýtt«¨Ú½ãY­ä-t£sB%Àõ+œÓbÕl®.d¶†þÞIãÉ’$™K&:ä‘\½†y¨EÏÛvÇq<ñN•óîÆxós†Æ9uÆ+&Æ7ÕâH³Ž$’×KžÙî!™6v(Ê’FpOÌëÅêw‰¬iòZÉtš•³[Äq$¢u(‡ÐœàUˆ.£º'·e‰ÆVHßr°ö#­rhw’YNímz.^KUd¸{}¥#1+å0zòx®žÎéî'¼ˆÛ˜’Þ_-ŸõŸ($Ž98ïÒ˜ˆôínßT¸»†ØÍþŒÊ¬Î…CdgåÏ$qÖ£ƒ_¶“V»Óe¸†ˆeXã¦åÊ+d/_âÇ~”YZO¹ª\ºb)ü¯-²>mªAãµbßéW÷º¼zvRòêRôºUS'ÝTãŽýi-ÆÎ‘ukšxWP·2À ™˺0:–ãñ¤ƒV±¹¶’æßP·–þü±Ì¬«õ àW!¤ëÚ…ÍÃOo30‚î$; Xˆq„ Ÿž3»½^Ô´;É®nd‚Ù 6‡Ë,™¢‘™þ

kx`·hmìÞëÌf$‚q–(ƒå~¸¡yÿ[ÿÀßOëcoMÖQ{ˆ¼‹‹y­Ø,‘M·###•$=é$ÖíãÖ¢Ò³+\¼m!*2¨b}OaYzM­Ý„××6úAµ·â d%Aƒœ<Ÿ)*8#€yÛêj8tMV×_µºûM½Ä"Iå•ŹWùÀÀ$ÈsÀ8 @kqoo^Íío-fùª· ôÎ20O~Çž”ÉüEm×çŠeb@ Jì¡€^}$ã5SBK漞ëRÓna¼™~i]âhÑAùcM®N9ÎHäç=…S—D¿ƒÄ޹inDŠ"œm¸‹b_ö[+Áã§ÙÅ=?¯_òõøÕ®£Ö¡±º°X£¸ó<‰Vpìvs–\| sïŠ}Ö¯…ÝÀº¸E†(£r«³‚ìTtÎr@š«eeªÅ­\Þ]Ag/šÌ©7Ú_tq „òð;ór~€V6£©y%ìÂÌ›…[8Ž#qH“–m¹(6).ƒ}NŒx‡K6fëí'`“Ê*bq&ÿîìÆì÷Æ*Ýõ¾£j.m\¼D•Ë!R8 †‚ï\½îŸ¨ZMý·2Ä׿jY¼ ,±í”Á*…³‚Ní¾‚®øsûR( K‹EŠ)Úââlƒ”f—(£8ê <ŒñÚš.ZâMz]: {fHB4%ÉWÃdü¨çzŠdZÜâ#¤Éov³††ã{ Á‘6™ÏšRÒ¯5NÝü‹á†t•nƒ>¨p3ÈÎ=¬5½nÖêé,â†Ñ£h]šI ¨ 9Ét‡AÁùÁªºeÖ’·76DY4øà·· Ïó¡sŒœ¿0ç9ëÒQzš­ûišt·Kk-Ë"’#¿¦Çö&¸a6õ>Sì À]øÛ’ã=éÉ®iÒjÅ.3>â˜ØÛK’¡ñ´°ô5—ÿåÂZÝÁ±‘%Õ´±–';bƒž:ü‡ó‰¡êI­ÚÆÚíïÔ·šä–`…qËuÏ t£Oëä-lt3{w”C$ÅFDq ³{ ÆOÉ6—§\Eb>Ó!Ž8d›j©‰ÜàÊzZº{ÝK§[É{GtÑ©•¢±ɬ”ÑîbðÔ:kZé÷r«Ëu“Ëœm9##Ž>´=†]x ÑR[kp¡ž9R{¡¤‚ªväqÓ5´nãŽÃí“æÄ~c‡à ÆNk=÷MÐbÒ´ø¬n£‰šà”˜äª¤’~^;sSâ]6.[¢¶°EI¢#ÍgCÎàÀ®Þ×½À,õ»ÝGLk›M/÷Ëpñy3Nh_âcƒƒìëRÇ® |0úÈ·#d)„·uÎFïL޵˜t^ .âÖŹ7,¾t¾Qh%C$|ÆxõÆ+VâÆâïÃWki¤·xR8¤-d¼í;PöÓúÐúÿZ•Lj¼Û;ÛÛ{_6ÒÒݤi|Ì ”^9ÇBÝó‰4ífâçPû å”vó5¸¸Cþj•Î9Ê©ŸOÆ©Â;um§ÞiÖ2¶WVŽžK±Ä2•ÆSºs’;GZ­i¢jAšúÒÃOµ–;F-¬Ù™n$ãi•~O4ô¿õæ%{/ë·ü¡ÕoÛLÓ¥º[YnY‘xÉã<“Àõöå”v¶ó]J-ÌÖÿh#h·8Á#=:ûU›È$ºÓ'·D²ÂÉ“Ð1ùV&£áë­FÃN´i¡l¢WVq3¨z¸9ÏsK¿õÜ}¿®Å÷Ö±­ZX-œÞ]Ê3 ‡ùTaw`É>½1SêÅ––ñ%Ô’”1UŽ¸Éƒ€295¶77†—w!‰M²¿œªÄòÊËÇ#>¸ªš¼z—ü$tÚ}¼R”·Y§fT\˜ñ– yã§|`E›ÍSsé‰a*8¼“w˜>aå(ÜÄ~ƒþPè…w ™±·~~Ë/)ýáòò¿ít÷ªÚ“5¥ã¤ÁŠÙÛ-´NTª»1ß#.{d¨ÿ€š[_ÝCmeÉ0i’Y¾ ÁvÛ‚8éòŸð¡éýzÿÀûÁký_Ò4/ÕÈL¾Wƒ¼7pßê­g¶’Sè¹ÛŸÀk°mÅBÁ#84º\}LÖ×lƽ޾cܺ3Uùë‚),µûCU¸ÓíZI$7¼›p‡’0|ÛzÀµÑu?_ÑÃÏoqyï,éjà’Ø,\ï#svéÓ¡­”‚QãIî Oä=I´í,$cŒôÎ;S]>b{2[sûB飇M½¬¹a(H?Ç»éZµÇÙ©M~Ô麭´Iõ.VE‡ãvì—Þº]3P‹UÓa¾…$H¦”Hlg‰¥Ð}E¿½û AksrÌÁDv鹉üH{’+9|QdÖàAu曃j-<±çy£¸Î:sœãêojZv›æY[Ë4ò8Lp´¾^z¹UçÀ¬ai§ 6DÖh.|á:Ù¸¸iˆ9}¬¼ƒ’Ç f¼zúÜZ<ÖúuôÒÅ/“5²ª "lgæÜÀcäÔU8üT&ζÃl·‚Òá§Ú 1ൈ#qóÆ}ª®Ÿoªišµ©IÌ·÷LÒê´¼(TÜž3€8§k §ø.×I‹™¤’SÕ¤.¥›ëÃ1¦·û…Óï:º(¢ÂŠ( Š(  »Í~ÆËSµÓ¤{›‡5ÈL‚AcÐt>þÔ^kö6Z®œí#ÜÜ8@±®Bd ƒ¡÷ö¨uø&šãF1Dî#Ôܪ“µv?'Ðr9£_‚i®4cNâ=AÊ©;Wcò}#šk§¯ù õôÿ2MK_‹K˜‹‹ß³©P÷K1&xç=ûZÕÉx³ý8k{MRKøJµ¿—v|‚ ç÷d×<ŽÕÖ&í‹¿±Î:f’Øoqh¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+?ZÖmt?í·›üê‡`É8ÏÓ½hV‰-d¼T+ËÛãi@RÀ I>ƒ¥Pu]vÇH†ÖK‡fS$1À%‹wëÐw5fMNÂų–úÙ.ŸaiT;g¦9®2÷ú”:Ué™MÇØÑaÓR0]¼± |?‹Wè¾ôž']NöæöÝ¡½eˆÚ%½ˆt‘ARY¤ÚJww\bšÕ¡jvwz¦Ÿ`è——ÖÖÌÿtM2¡o¦O4Ùu}2 •¶—Q´ŽwÆØžu sÓ9®CÄØÿÂL÷š}ÄÆîßýå 2* K¹†Éçiï¥Éq§ø½‹ÈÒÙÅä%ØCüQß·ÍO˜qœc<úfºm~)&ðî¥HÒHö²*¢Œ–%Nê_Ãëb—ÅbÌw¶ò Þ¢=ÂoŠ7`†2p;ã<â©Ùkö:†«q§Ú´’Ioy6á$`ø#·ôÛcGIŠk ^ãÈÂÏä‚ ÂŒ†cÊç§¾*8à˜xÖyÌOä=I´í-æ1ÆzgªÚ÷­êBo–þ† ò5êõÕô®æÏýHúWŸò5_ÿ×Aÿ Šî,ÿÔ¥!œî®3âMú^gÿ!IWþ{Éc QmkyÉ,î~P=0'ê*¶¨3â ú]gÿz,ÿÑø­ P“QÒÖK…U¹ÚÂô!*qìqŸÆ°m<>¶m®Í”ºnŸbï*Å-á3FUE'×éZ~RÚd÷„··rÜÆ÷¾Sø€ãM_×Þ'ý_q»ERQEQEŒÁ±€3ÀÉü«#K×_T}EOš´eUIˆW“+¸dãøã¥lV-­Ýž©®ÝýœºÎñ¼ G™¶0ëÇ#ÐPøŠhîo-õ-?ìÒ[Zý¨ù3 Nxè0ÜtýiÚ^¿=íì×V oö›ss$âPP÷¸OÌ=G½fA¤êOua§ Mi"yQ¼éÉʹT$ sÏSž”x{E¸°Õ š)ôÈØÅrádóÛ#iŒÇ'ÏJkÏúßþŸ—õ·ü°¢Š) (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠÆ_Ãÿ SèO +D‰6îŽILcƒž¾¾”–>#‚û[Ôtô…‚Y c6r$9!€ìF>¹ªzííþ±pŒ-§i –ÆrAÃ"`’8åÏcQÿ`j|̺Y F”Ð%Ã0æ}û²G\’IÎ(þ¿ ÿÀrË\Óµ™`ƒÂ¡äYbx™T÷ÀqÇ^•)Ñ®]–+²vÆÒîh]U‘~ó+Ãíšç`Ð5 ™u<–‹>˜ÖÆ[ÛÁ9ó ÎA p¿—Ò¡žKÝOPµ°:x†x´«˜Â¤ñº±*Š1´ð28ÝŠõøÿ/ëðÿ3¥_é·v·FÊéDÑ[´àO ˆ6÷°@,¿îæ©^x’ê=GO²¡ke¸’o²Í0lœaU9QÔ彪-CEÔ'ƒOX­òÑiSÛÉó¨Ã² Uëê=*ÝÛëV×ö$Òã·fÜ$ ’:þ½*¬¯ýyÿÀ&ï—úòÿ‚Mˆm`³iﮡ9¹’ÄHKb6…ÁbÃàcð©®|C¦ÙÁ ÷Ì‘J›ÕþÍ!}[ òÿÀ±X6úF«§]Á¨¥Ú+›½ÖâU RWʺ’qžŽ õž·©´§ìWÍo5žÈííïR/*S»>gÌŽW¹*:"–ÿ×sbAo¯¦$r4r[¬É,Q¼™,Ä`íާŠ|ZäZ^]_][ˆ ºxFŽ1ƒ€¸#,ßîð{VlZž™©ØÝG`×Htèí%ÊŠbe9ÉÜFG'¦zT'EÔ£‰®#¶Y&ƒW’õ iy±G 89ôª²þ½ÈZÚÿÖßæn/ˆt·Óf¿X·¶ÊLl#p<Ž1Þ¥Óµ‹TÊ,æfxˆóãhÙsÓ*Àkœ»ÑõMBÓYºk?"{ç·Ú™°XØe˜ƒ·'žý­¨¬®Å—7¦<[=”qÈåñ#zGõø@mw#‡IS…‘¾Ñ Ú¤¨ :·^¼­LúÕ±³¸¸µIî̘8#%¼ÀpG8üú{ÔW¶Wø—J»HóN²>GÊX.8êz»k-ÌñÏö›O³•‘’1æÞƒ£qÓ>©=‡ÔÊ:ö¿ƒÅÿ“äùð–ò÷nÛ׌ñšßÓãÝ~•ÍYÙOaàhm.£ò犮¹'¸âº]7þ=×éT÷ÐKbíQH§û†¸/ªzïgû†¸/ªzÙÓ"’ ÚÚ½¢Mnöá3Œ0#‘ŠÑCu*-ª…PhàVm²Ft«’8ä g+AÓ>„އ‚FFpܬ¾5PHmÍ·ç9s»=¿ÛoûèúšC;ß2óþ}—þþŠ<ËÏùö_ûú+ˆÿ„¹d [H³;³œŒç;³Û¾öÿ¾©¡¼Z¬Ní"ÌîÎ쎠îÏoöÛþú>¦€;r÷l6¨Aàƒ"ÓbÄ‘Eeq  ¨® (ÄÉâõÚÅ´‹6Îs‘×;³Ûý¶ÿ¾©ªéã‘;º̃œ“Îs»=»ïoûèúšô2óþ}—þþŠ<ËÏùö_ûú+†0YU‹hög9ÎFsÙíþÛßGÔÒ¿‹'~‘fwgvG\îÏnûÛþú>¦€;2óþ}—þþŠŠXešxf’Æ6’Lld)#¸Ãâàá‰ÑìÛ9ÎG\îÏoöÛþú>¦ƒâõ`Ûô‹2[9ÈÎs»=¿Ûoûèúšî<ËÏùö_ûú(ó/?çÙïè®O©»G´lç9{;³Ûý¶ÿ¾©ª³xûk8} ͳœäõÎìöÿm¿ï£êhÑ|ËÏùö_ûú(ó/?çÙïè® ?%ÄeÛF´ù³¸œçv{¶ß÷Ñõ5/ü%ë!;´‹C¸åsœîÏoöÛþú>¦€;2óþ}—þþŠ<ËÏùö_ûú+‡>0W,H´%³œŽ¹Ýžßí·ýô}M<ø±6í*ÌîÎr¹Îwg·ûmÿ}S@¯™yÿ>ËÿEeçüû/ýýÃIã$ƒ£Ù¶ìç#®wg·ûmÿ}SO>-[v‘fsœäuÎìöÿm¿ï£êh¶ó/?çÙïè£Ì¼ÿŸeÿ¿¢¸‰¦¤OÃ8bt›2NrÎs»=¿Ûoûèúšï|ËÏùö_ûú(ó/?çÙïè¯8—â †‡ûÍÉ$O\îÏnûÛþú>¦´¿á,I/¥Y’ÙÜ ç9ÝŸý ¿ï£êhµó/?çÙïè£Ì¼ÿŸeÿ¿¢¸fñŠ1mÚE›g9ÈÎs»=¿ÛoûèúšükV-£Ú6AÎG\îÏoöÛþú>¦€;ß2óþ}—þþŠ<ËÏùö_ûú+Í¥øY è¶ÉÎ{çv{¶ß÷Ñõ5“'ÅøÌÍü#–oœä™:çv‡ý¶ÿ¾© _ó/?çÙïè£Ì¼ÿŸeÿ¿¢¼º/‰Ér¤ŸÚe³¸Îs»?ÃþÛßGÔÓ›âNòÃþëGÎs–ëÙþöÛþú>¦€=?̼ÿŸeÿ¿¢2óþ}—þþŠóeø„f8oÚÙÝ–Îs»?ÃþÛßGÔÕ±ãC*’Ú%™-œƒÎs»=¿Ûoûèúšï¼ËÏùö_ûú(ó/?çÙïè® øÑ¶ýÌî'9Îwg·ûmÿ}SWSıλ¿³,Ûvwe3œîÏþ†ß÷Ñõ4×ù—Ÿóì¿÷ôQæ^ϲÿßÑ\ÃkJÀîÓ¬Ûvs˜úçvô6ÿ¾©¥:ʾíÚu™È9Êg9ÝŸý ¿ï£êh¦ó/?çÙïè£Ì¼ÿŸeÿ¿¢¹¶ÕûO³%³œÇ×;³ùïoûèúš_íe“;¬,ÎìîÌyë»?úßGÔÐGæ^ϲÿßÑG™yÿ>ËÿEsçRG5•›'wîÏþ†ß÷Ñõ4I_vë3œç1uÎìÿèmÿ}S@™yÿ>ËÿEeçüû/ýý‚×á•‹XÙÙÎbëÙü÷·ýô}MFúª’Á¬,Élç1g9ÝŸý ¿ï£êh¢ó/?çÙïè£Ì¼ÿŸeÿ¿¢¹‰u  oÓ¬È9ÉÙœçv=íÿ}SJu¤pÛ¬,Ûvs˜óœîÏþ†ß÷Ñõ4Óy—Ÿóì¿÷ôQæ^ϲÿßÑ\ÈÖ’]Û¬,Îìç1ç9ÝŸý ¿ï£êjfÔÑÃcfÛ³œÅ×;³ùïoûèúš½y¡Ã¨\›‹­<ÊÇSvÛ2¶ŸÄV–û±ÿ.«ÿs²jƒÖl9Ì}s»?úßGÔÒ6¬¬¶Ÿfwg99Îìÿèmÿ}S@™yÿ>ËÿEeçüû/ýýζ¨¯»6mœç1õÎìþ{Ûþú>¦™ý®²-§Ùœç99Îìÿèmÿ}S@/™yÿ>ËÿEeçüû/ýýÌK­¦vŸfÛ³œÇ×;³ÿ¡·ýô}M#kˆû³§Y¶ìç1õÎìÿèmÿ}S@G™yÿ>ËÿEeçüû/ýý˶¹gvŸfwœÇœçvô6ÿ¾©¨¦ñcvtÛGÝœå:çvô6ÿ¾© ·Ì¼ÿŸeÿ¿¢2óþ}—þþŠãÛÄ›ƒ¤Ú6ìç)×;³ÿ¡·ýô}M)ñ}Û´›29Êç9ÝŸý ¿ï£êh¯ó/?çÙïè ËvM¨ü$¸çñ);³¤Y¶ìç+×;³Ûý¶ÿ¾©­-#QþÓÉ-µ´-ð”h×iË9ÎNáÏÌß]džΠ¹¤Ô_RãMÊ.KdPLÿÂOxHÁ.¹Ÿ(®âÏýHúWÿ3Eßûãù í¬ÿÔ¥Y™…©†:Þ³„ù\ôÎÖ­# Ó:¹6Å—;Xƒ‘ŸN*•ðιcí0þF¥Õ®æµò|©6nÎxÓÖË;o祿þ=þm½ÿž–ÿø÷øVZj-ÿ-Ïýò¿áH÷÷jØóÎ?Ý_ð  ]—¿óÒßÿÿ 6ÞÿÏKü{ü+ê—™#ÏÇÕøRNï#÷Çþù_ð  ·¿óÒßÿÿ 6ÞÿÏKü{ü+µKÕ?ë»ÿu†ÕoGI¿ñÕÿ ÚhïJ³Û#yý)V;ÅPªöÀ€<~•Ïfûv Àý…Û7ÙÿZ?ï‘þÐm½ÿž–ÿø÷øQ¶÷þz[ÿãßá\óë—j3çûä…W>$½â@à€:·¿óÒßÿÿ 6ÞÿÏKü{ü+“>$ÔqòºŸø ø—Rù×þøÖm½ÿž–ÿø÷øQ¶÷þz[ÿãßá\ˆñ.¨GÞOûàSÄÚ¸ècÿ¾v;o祿þ=þm½ÿž–ÿø÷øW|I¬õ ?ë?þ-\d‹ðŒP]¶÷þz[ÿãßáFÛßùéoÿ…r'Äš˜ëcÿ¾Äš¡þ4Ïû‚€:í·¿óÒßÿÿ 6ÞÿÏKü{ü+’>$Ô€æDðTçñ~­;#õŒPs¶÷þz[ÿãßáFÛßùéoÿ…p'ÆzÀvè3ÿ\ê¯ü'ºÏ›³u¿ýúÿëФm½ÿž–ÿø÷øQ¶÷þz[ÿãßá^ÿ ¦µ‚wAÿ~¿úõRãÇÚì?wìÇëÿ^€=/mïüô·ÿǿ·¿óÒßÿÿ ò9~'x†3÷m?ïÑÿ‰þ)øŒ±lŽé‘ÿö·¿óÒßÿÿ 6ÞÿÏKü{ü+Ǔ⧈N7¥Ÿáÿ™~(ëdà‹`?ë—ÿ^€=omïüô·ÿǿ·¿óÒßÿÿ ó8>!ë¦I·þ¹ÿõê«üJ×EÏ–ŸeÛܘøÐ«m½ÿž–ÿø÷øQ¶÷þz[ÿãßá^a/Ä.6‹Rïÿ^ˆþ x…ŽZ¤GühÓöÞÿÏKü{ü(Û{ÿ=-ÿñïð¯-ˆž I6â×õÈÿLÿuÅÚ@· õýßÿ^€=3mïüô·ÿǿ·¿óÒßÿÿ óˆü«7_'þýÔËã½Hÿ_÷î€=mïüô·ÿǿ·¿óÒßÿÿ óÙ?@ß|A´”‡ëÿõm·¿óÒßÿÿ 6ÞÿÏKü{ü+Ǜ⟈TE˜ÿ¶GüjH>)ëŒq/ÙÒ#þ4ë»o祿þ=þm½ÿž–ÿø÷øWœ[øÿTž=Ûàÿ¾)'øªÄ¤‰-Éôòÿúôèï܈ÈílÊÃH$ùUk=)týßbµÓ­·ýï&›¾¸ç6¿|Crø)l=|¯þ½h7ut,ðnôРm½ÿž–ÿø÷øQ¶÷þz[ÿãßá^u™:´ÿ®t÷ñž­W‡þýÐ{¶÷þz[ÿãßáFÛßùéoÿ…ymïÄíFÐqÛˬGøÃâ-ß»ŽËñÿ:öÝ·¿óÒßÿÿ 6ÞÿÏKü{ü+ÄGÅ?ë‰ÿâªÌ_|Häe,†}"?üU{.Ûßùéoÿ…o祿þ=þå)ñ#Ä, ?dÿ¿Güj9>&øZûdÆ€=kmïüô·ÿǿ·¿óÒßÿÿ òx¾&kÌß?ÙöˆÿiÛøëUº!±+ëÏëS9rÅÉô*œæ ºèw:˜ºþϘJb)·øsZÚoü{¯Ò²e•çðäRÈw<#1Æ2H­m7þ=×éUuqIr»2íQL’)þá® Å_êž»Ùþá® Å_Ꞁ6íÛþ%V«»­”§ºò½³ïèzõÁòy¾ú“Ú½bÝ¿âUj»ºÙJq»¯+Û>þ‡¯Qœ(¹R¸úÒCdË/!GSR»àóÅR·bϜ՗ÉR)ˆ¯s1Û´u4ÛXŠ®{Ô«n0Y¹4ÙŽÀhXÏP9©’¤ž*(c`„ûSØ14@å²§­9'­2$IêI§¯ÌÙÏ äZ§(ˆ«ò•PGz¦È7b¼â€È€¬2jøy76úBÇŽµ±ÆLСÚ@íVà+Ç^Ù~\œg¤±íƒÔ4’/–yíÚ© zqVãù¢ Ò©OÜÍgßK´•­Kj›àÁïT/݄ʧ­lØÇû€q@—VˆAÏZüìŽñ÷O#Ñß1ŠA…ïÖ²uQæZ’GNx  :z ‰ZVŠÙgùvŽ•™¢¯ÈÜu8Åk´'±@‚q×5Ÿu7–XÅ\‘„)“Ú°ïo–ï@ØŽž2k׿¯jòyß.RÎ"„`}èªÓ"Uƒ=XŽnZé¿&æϨ¬ýܲo~×A,ê! „P)jŠŠrÁÇéLŠvY6¿CW¾] ŠÌœì¹õ£¥¿Í´þU•¨¸I”w«zS™%êrô©#Ôq‚g§­J¤u(X`þµ9TŽýzÐ0Ã=MLvã¹ TàsÖ¤2:úu¥Ø>ñ"Œq‚~”üä{u¨Xa¸t©Ëm]ǵ]¤ðy …ßË‘ô¨e´;~R=*Êʃ9éC¶Tcïï@RÎLå[4²NÑ|¬æ®ÆÄ’*½ìlø _ZcMòx¢9X|Ýê£ÛIá¿Z|r0àŒ»» @5 É‚I94×{™…fy’M! p=¨Ô×£“NŽe\㤵µ C±šÐ …ÂtÍTK q“ïD¶è»WÕøãéšY¡Î(Ÿ” ô¦¼8«€ŒãšäF3@¡S[ž;ûæÛûèwcøÏGóüC.×bGLÖ—†jßÛ}ÎqÕϸþèyêÿ?Èë¡ü¾‹óCæh»ÿx!]­Ÿú‘ô®+þf{¿÷‡òÚÙÿ©Jè9 {ßù Ù×aü3Ä™VÝWý£ü©÷¿ò²ÿ®Ãù~®B¼ú7ô¤3 hW'ë@ºÜDZµxᓞEeMnÍ#2äS)›-õ©„ŠÈ¬äóŽàHõ« á”m'ñ  e•w.j)e¸Nêà¡ ÎM2šc–4 vg;©V]¹àw«°A0*B¥›¥R6@ ±ëMŠÊäV›ÄÛP X³ÆO¡4OÊSqU¥‹oAZ¥Ôä=ñUg`Ãs@c\šIWhþUb!†óå8#Ú€,ÛÃ"¯\ d ›‚3Îi†îHR?KIÖ9Iœ@Û@FI¤ [iâ•0¤Ó“ä›4^òÜ"îÏZt*$ˆ)4ýJQ¾Õ„„Œþ< -4ß§Õ¸‰0XqVVÞ5Œý(N,€Œñ\ž¶Îá˜d–äWoy€ø ÍsúÕºˆ1e <>Í-¸‘ÁÉ®Œcebép{5Žjô³œ§4jº³„(î+&ÝÄNçŸZv­o-áQÉ«š}“A§°aÉ ||—dþU¡k0Ëèj¬ñì¸5˜£74~ô…“r¨*zÖ=ÎØ¤\p§šÖ„±üÖ¤¬g!AÀ  iÔRx5«öXÞ"ë€G5ÆÇté ZÜ‹R}›3Áï@Ôå[“IÚ.TŒ°¦GŸ¼z‚ET@»Ec‘×ëYwHO¥hÇ ²œã ž¦¬µ¨› ŒãÚ€)i÷W0§ f¶-Í“t„âŸo¦*€O®"$hp(hþEÊ®=1S¥rÕŸ5ÜP ´œÖ5î¸~ê1ÛŠè來˜–é\¼ŠBLŠÂ¸Ôeœ²†Ý*æ…3>­ÉÁÝÿ š«<‹+ u5E¶1jp7o›ÿA5•áKÑ›áUùžÝÿ2µ¿ý{Gÿ ŠÙÓãÝ~•ÿ2µ¿ý{Gÿ ŠÙÓãÝ~•TþE_ú²íQVfE?Ü5Áx«ýS×{?Ü5Áx«ýSÐÝ»ĪÕwu²”ãw^W¶}ý^£8>Mvw6¯Y·oø•Z®î¶RœnëÊöÏ¿¡ëÔgÉq¹·~tØ–‡æ8*ÙÉâ¨Âå'ÛØÖ–ÒSLCp1ÜU_sÒ´œ*¼Ñè(hdFŒ`ô òªTŒnÜž*9]îÚ€,›µ yâ¬ZJ²dƒÅV6 BsŒâ£±-Æ<f€5ZÜd³r}*µâ…·<œ{Õ©$>Y=ê)›€2´Õù·qô­ èAÀöªðĨ‡Ó4ùfUP?”w0ç§Z’IAæªIàu'š&‚s@<­$¸?Z¿g§´Šé±B‰*åA5«Â"Ž™ ¤K (–NM2W/ íH‹ô4d-†'š“Ê$f¦H™Ü+B;UäãŠËKvÛ“ÓëP? Ž«Vâ@ˆTȬã 2(ö±ä®涘 c ªvð$qgÖ¬¼ƒÉ!IÍWiÖ$'uP g”°ôäVøô«ÑŒ cž•Z49uYSŽLP¾üc1%9 (SÐc€iÅGÍœPgÆì`⣓¦)X4šs´Ö€)íŒÖ—†NÏí›oïàÝã#Ô?Àô5vp@«~m­¨Øýü;±ÿ-¸þèyêÿ?Èë¡ü¾‹óC?æg»ÿx!]­Ÿú‘ô®+þf{¯÷‡òÚÙÿ©Jè9 {ßù Ù×aüß[øô¢÷þCv_õØ#OÕ—t–ÿFþ”†g¨Ú ÔG‚H»U‡<}*¹l£ ☊NÀz¦÷g­Z”sYwnZ`; ’(ÚæM瑚ÓHBà T6±ì‡#<ñV“s@D9çµNš…~QR‚G£Š~ã÷}y5]Ž‘ߊ°GSžµZ”äPlÄŽ‡ŽµU¾RzÕÝħ¦j„6qžhº‚XvŠpRüN $1Šs Žô—s‚àcžÕ$H¤ŒzÔs'qVdqÓ½C4Y\*¬ UŽGµ]–l)»U=èµÀù+\)bO>õ­w'ËŒà×?w/-Œæ€3d^g®kVÕ¶qY5š½ #ô­p²aÜŠà’ëä–ë]ˆ˜Úï­U–ÂdÜÍR´…Rì0ëíWoâÌC½Y†ÑcpBæ@*®(”½€yYÇ"¨ÂÞS.:µµv¹€’+"87) ûPå„\°¢ïNÈÂu5NÝä‚\H«¿oW˜p(¶qËm2ƒŸé[0°‘‰õªwÇååÝKlì¿J—Tb žh±BЬ€ôëUõY³oÓŒRiù‘ùdàém$TdúV’È3ÈÍs¡šÕ5VÒVI•_8ô5Úß$nï‘È®bîfÊ® ’Î(æ¶ Ôm¦),2k/JÔÍ´žSƒ´ž¦º5Ôí•w;)úÐpilß;aV®ù0Û¦@²µÙÄ›Tôì+˜¿ñT³åbbu—š”0ñ½zgÏÞëÇiµÏ©çù™‰õÍe¹  y<ç%Ž=ê Üî”rì Ø5 `•úQ ›Ø jè•9ÍB±†êè´{„–òŸäkœtmüƒZÚ2ê°þ×þ‚k*ÿ—£7Âÿ«ó=ÏþekúöÿA³¦ÿǺý+þekúöÿA³¦ÿǺý*©ü(Š¿õeÚ(¢¬ÌЏk‚ñWú§®ö¸k‚ñWú§  »vÿ‰Uªîëe)Æî¼¯lûú½Fp|©¶¨~ê¶íÿ«UÝÖÊSÝy^Ù÷ô=zŒàø³ÞøcÒ’.^.ÏÞ%[ŠC,*sÚª3¬¶Äö¨mn iƒÒ˜@øpsQMp"'¸@¹ÉÏj¡pÞtêwesÒ€,HÂuSн¶¹ª6êòI¤ÒµÔýÐ:¼æª}˜¤Û³ZÙAŠˆ‚ßË4á´ŠV%cqÁõíDÈæ3ë@yŸ!ÇåP2<‹Žù©à$næ´â¶PÇ8  Ø,™±qWű võx«‚ ƒ°Á©UÑxÇ'­cd•³É©#gîãð«odcŠ­#˜Ò€?½çšÐ·LäžÝj¤(^Q޵§°GÆ{ÐLŠ$^OJ‘' ¹G"©K‡ŸŽƒ­"n`Yþy8äT«8ÏÝÏZO”7Z'¯Jš06ŠÅÖ Ü1É5™ †Õ°NljOºp£¨¬ÛÈC!'¯ozÑ‚u’ ÄóTï óŠÊ¶¿ky¶¾qž•>¡9ò÷/B(i˜G±;ÒÇ– ¿áMÒâ3á˜t­9à¥s·Jd“<Ò2í‹gsÖ¬¼[d$‘Н8(¤ž¸  [°L›œfµtГYî¸V= ®–‘cŽ(ãªÎ,V‘ÆsŽÕ@JP“ºžš¢í%Î1ë@o"[ÄXà3\Ö£¬4òâû¾Ýê;ýFK̤ÙÞ™§Ú!pÎAÁâ€&ÓtÓ!J=+¢Š]ˆQà gÚ£µ ‘‚>•qp†Ðö  3H<°Àà÷­-*ãzàœœVF¤6©`qƒùÓôyNãŠëÕÿv1Öœ ùy959òÆÈ©7~}¨X¼ŽsJ„†çò¦ä°÷éNUÁºšxmØ9Ï׊„üÌ:S“sMœ`ãšp‰ñ»¨©ÑB©àf’0IëÇjqÀÇ4°=þ•“Ú!Á>´Ø—rƒƒ@Ù²ÿ…T¿6§ŽýkBB?/éM’4–2§¥di)—b{ ÚÚ¨,íVÙ䞘«€üŽ>”jX‚¬F…è1R8Î}è¢LGÎAëžµÆ:Ó™Êcë@ à x¦´2qœ b)3Þ±î—ý/€k{ N1ҫϧùÒ«©äPÖð…·QíJSÓô« °€zŠAÅF±³c.vðEH Žâ¢rKrhI'ô¦•Ü>”¬vç4Ä&Näõâ€åáxc‚1P² U»GÊÃ=*Ï+ùâ€#’E;xšìzbšHi@Å+"…?5gÜ€®QSE2ìTwJ¥)ö¨¡h÷IÀª³Ë°žX¹‘aýMd\\oSèh­Ä®ï€p½fÏ “Ù«êÛŽ[ ¤xÔ.O~”•µöã©§­ï–6?­y[[$uªZ…¸ ²Œ¹ ÂIÕ†*ÊÈ…€ŠäVâXóÅhÛj‰œâ€:uÈ<ÖEåÉ2<šoöŠºŒ2j“>é7õ »•|’;žÕ…‰Ÿø@¦Üáäàu§|±ÇÍÅ>ÚØI; g5«I9XÀë[̽¦ÑéUtØCLò7#4H[Is’:UûB[ƒÖ®<*sŽ• ²aØÐ}Qp¨Fj•Š˜ØÇ5sRpY¨cBT0õ  ÈÜHƒØR`àŒU¡aåõÅL‡¦[Š´—,˜Ï"«LÛ‰dÏzq]Áˆn*8(x @“sW‘sp9ô¨Tf]«ÈjìqZ±j˜Uç½7T”¦*X„¨<˜d'Šä/KrxïÖ¡‘Bžõ4ñ¸'ßš¿ýœ^×w¨â€"Ñ’IñšÛ² 2“RèºxŠG4é0³8‘@WMþÃ'­Q1n¼^:VƒÆd»Þ–ñ'ãÐf©¥­„Ñ›¯Ì\\J¤üÇŠô)&²ØG$W©èÒ$ÍÇÒ€9iÛæl‘H¸,¸V„Ö2¤2žj8!D“÷v-ÇÐÐL%'ÐÕi¢Ü lã5¤ü»œU®¥U‰°{q@Ö¢zùc…<Ö½þm—,xÉ Í¹rj5·+o¦€,¥ÓÈNÜŠ‰—Ηk=©"Œ¤Dç¿'  §Û {#©«:,nû˜Ž1Þ®GdLŒšp™ ŒGÁ>Ôø2·Õ°#$õ¬ëEJ¬Fµ_¸# P6­>ЩžI©4wÚù9Ågêr‰.À§Öµ4È]ôÒA0!FýUmdœƒXi8LŒþ54:‚3„Ü   RNA=1Jß'5\K¸ž*Lœ‚(eî3OU Û Ê’$ùI-Î)êWqôé@ ®•ÇoZz’zœæ¡;Xœu© †y=iÊBNÔŠC=é!²q¸t ¥Vf>”ø¸À#8ëOeb;cüûÔ{¶“ÔÐÂÑ…$ŒØ‘K|£ŸZ‹~Ï”°€HÈíé@ Ò¢½J¸p @ø.TÒ¦VÚ}(ÁWqÇ¥!^@ô4™þ/z–<’Ié@T/z<”ð3L,[#¥A(ù ᣰê?6ßßÀ3»òÐñÔ?Àô1ÊzúÔžm§Q;±ûøwc¬‡Ü>}CÏWøùþG]àÕô_šÿ3=×ûÃù ílÿÔ¥q_ó3ݼ?•v¶êGÒºC÷þCv_õØ#Rjßz÷[úTw¿ò²ÿ®Ãù~®pÐýúRž¨?:V\´¬ ¼S#‚iˆ‚4`Ù8«q”æ ÇrZ7‚p¼Š–F\ã4ÂÁ~´ÇœJ$VTõ*Üí`$PÐÚ3áßÞ‹hüÛœöSVí|‚S¿-¨Û±?ÅÎh® ìJÆ¥Z´‹e·¡êjš¤Ýûfµ#Ú#oNÔSy穱ä}iÌ¿+61LŒä·   ׈K «6‘«E´f¢ºnTMY²$?+@"eã¥#£Ê“[‰n²*îTï§ÄcÀ€9x®^5*ääQo0’è€ßJ·ªiÆß.§ŠÆ°}º‡ã@"&“Öµ-‰òù¬õpI©ùPSŠ¿æ ¬{VÙLçµYûO™ôªÀÇÔP Ú¯ŸŽ:Ö”RfÝS•(/qÈèkNY»m…ƒ§8ª¥<ÉÛœWcLF8"©†Åï<ÐRY¬R©Ï9ªzª"‘Î:Ö¥î|áYZ°;¨ÖŸóB¹=)/á %søT:1/òsÁ­Kø¶íjç¯4¡, ØúWÁpþ€ô¯W ^ÕÌkš*O™p{Я½sÓÛšµ.™<$§NHÛpÅN¿2‚Tª”TP³Jµæ&Ü(ù¨Ý¶É5ªÖ_&åŠÁ†GW£Ö·»”„§­ÞÞ*B>uÏ_¥Wƒ€¥ZÚx=ǽ È cJ€Ã½”ž ñV ã<Šj°Ï^”åŽGëR p?1IêzSL˜)çµ#ãq$ Ð zT[ؾ95:(ÈúPÔãÖ¦VåÅG»jð=éÊÁœ}(p@§68é¾lUyäÚüœ@ÏŒdžjdž[oöÝßÀ3»\ûçø‡Q¿fb±šÛð“oxY°L–àœã«ŸqüÿÐóÕþ$>‘×Cø5}æ…ÿ™žëýáü«µ³ÿR>•Åùî¿ÞÊ»[?õ#é]!{ÿ!»/úì?‘£[m¦þ÷ô¢÷þCv_õØ#M׎>Ïÿþ”†V\¸Ricvi±6à)êϽ1º“žhŽ ‹œ“š{ÏZÝŠqQ»ŽÔ“e‡¬Ê?‹“ך®ò0í@‚ÑéOÜ3ŸÊ›ÍÉéÚ§Rª§½ `MHÎqPùÜœŠ°¤Ð¥~㩪“òۉ㠧Í7˸ Íe^]í„ ß1ô  Œ¢&ûã¯z†æýO5†éu7;Î3Jö“”¶N({¡,ÄîâªÜ͹YsU.bš)03Š©ö³»šÕ±q³ëEÝ„_/Jçíg 1ðkb9ÿtA  Õuºó|µqLR[`ã =*KÈ’tÁ¨¡ÓþQ†ü3@ ²³Û6åéZ02â§¶€&S.Øq@°aŽ1œv®~Zä©þõnê’°WÅfZZ;6à>jémû6Ý£ïT5+TòË(¦Û]˜ ŽLã8çµZ¸‘Zß9Èö  K4bû[×¥kNâ(H˜³íò%.«É2 äw  ôô; #“ZË`EA ~^¨ÚcÌКuÀ*« žÕbS¸ñP}Ñ·½B\I)õ£ná|¹5—$Êy'š¿eºÚhj ¨'±õ­$ËGÞ³­OZ)&¥TÔaó ŽÕÆE•¨sÇÍ]˱–6È®Bù|»ÝÀt  wíM‹×ÛH$9¢Ö&¹;ˆâ·¬­Ö4ÀÐd²1¡féUgq±—­tÅTÒ°n¤acÆhÓ3zçµZ·`'APã2g¹ëRCOc@>1n1Ð £ ¶c5p¾ÛR=«6Ìïº$úÐÛãªÔaaP; µ9ÅÁ®?уx t åº“ŠÓÔÊ£­cèÌ žƒ5¹v€Â­CcI*¾£ÈÛpÉ5¥¦±…A«“f€0b´Žhpéœ×=©h9x†}…vpÂD@ööªw`‡f€<æKY-˜«øö¤çh©æ»kÝ&;¥ ´#µr·Zt¶³0ÁÀ Û¦dmC «Ú@îÇz°Žûƒq@Fa‡j.¼ÂX T ºY>oΤx±Ž>´ÙüÅ$šO³asŽ}ª^QIÅX·xÝ@n˜æ€*$®¸ð)òJ„sɧ\PÛJÍRÍ'^(Á,§ƒŠè<5.ûÈÃ}áŸäk[6Àqk[@Âê°/›§û¦²¯ü)z3|/ñáê¿3ÝæU·ÿ¯hÿô[:oü{¯Ò±¿æU·ÿ¯hÿô[:oü{¯ÒªŸÂˆ«ñ¿V]¢Š*Ìȧû†¸/ªzïgû†¸/ªzÛ·oø•Z®î¶RœnëÊöÏ¿¡ëÔgÇ™ä¹pq^Ãnßñ*µ]Ýl¥8ÝוíŸCרΔ§Èß"ÒCc>Ïå®çÆGjbÞ,nGj{Å,ÍÉ84äÒw»4ÄA6¡,çjƒŒzS!±žvŸÆ¶àÓaA’*䢀2Doâc½Hš\IœŠÖ•É|GJŒ+Iœæ€!ŠÞîV0p qҘѴjG¥Všcžô$Ž\äT†EÁã­g¼Ä¨#=)ñ©qŸé@¾§œb˜e x<Šžy¨0°Ò€&‰T•$u5uˆ ·<Õ`€HÅ,³ Ûƒ“Š«æpyïWbvOZ«k;623ZkQ’q@3qéR¹ê;Õyc- *zw§†%€Á'Ú€,C“À t©$ÝTI#àƒÁ÷ªóÈD8Ï&€(6én ïšÐŒÙ@ëUíÓqêkI™Çq‘ÈéP2É«2ĈÀН|â´›¨Üˆ¡<`Õ8ÉxAõVêèÞ\„ŒÖ‚ÆBú-eM £™­X´ÕÂIÅXTÜH#5JòÄ«_¯¨n‘—pn>•ÆÞA¬S,¶äçÕ!m«žƒ½8§#Ž~´áØÍR{¡‘ósÚª™.]^(m@Û–jgœˆkûI£;%Q›õqÁï@æåwÖ.§~ÊìŠy5·e xÅP‡ý.ïq&€-[Ã…Þüšê|*Ûc¾;¶þúÜgv:¹ã¨þèp0+Ô ßð£*õƒm[~wc«ŸqüÿÐóÕþ$>‘×Cø5}æ€ÿÈÏuþðþUÚÙÿ©JâüŒ÷_ïå]­Ÿú‘ô®ƒÇ½ÿÝ—ývÈÓµ [ƒþ×ô¦ÞÿÈnËþ»äj¿Š'ò!·|÷aü© ‰6ŽTñN.»H±-µhÛ‡8«Ive[šb-;2N{P[ Ã¥V`ì?=AÅšp_’?*R8ã£ÝƒÔ †K¡C0çÖ€'R@BNjí$eò°Fkž’¹¾!FÐmÏaW-#2L\ô©'€BGÞ&¥AäÃŒu  %”EÉô¬À^æéXt¯‹v—ç”qŽ$eTáT |©Ç¥TÏ Hç¥]gëÒ h†ÂOÖ€#Ó¢/7ãZRE²ížµ[M]³.{šÒ½ŒùA‡QÏ><µ±«QÌ6t¬Ëy÷ǃœŽ*ÜRB(àeòÏk•ÖmÆTu5чÌE»VÀóîÔ™  :r…{qZK&ÔÎj¢C±Æ: |® ;—}¿˜ª¬!-¹E_†2×ôªø…Ävƒ±=(¦=ÝñNŒæe>õ§ú“ž¸«Çœ:Ü<À[†ëžôéóöšUV6ËŽx§ÎÙž’ìæô  ÝXäqšßºCœÖ=ƒrWÔÖ­ñ>MXÓšVÁÓ4¦>o=1Kª1Ž:Ð CƒY·ÿë*õ³ƒk>ì8g¹  Šbë‚+"DI.`”œ—*¥k’zæ«Ée&ìtÇ¥Fèѯ=E[ÀqŠ–;rrS§j¥«‘޾•¥o0ˆ|ØÅUšAÎ8¨âˆ)ÉêkV[ˆLXɪB'Ì2>”±Î@+Î+WC„ÿkÁ(éógþù5’±•<Ž+[Bsý«ç‚[ø ¬«ÿ ^Œß üxz¯Ì÷3ÿ"¬õíþ‚+gMÿuúV1ÿ‘VúöÿA³¦ÿǺý*©ü(Š¿õeÚ(¢¬ÌЏk‚ñWú§®ö¸k‚ñWú§  »vÿ‰Uªîëe)Æî¼¯lûú½Fp|Чé\c¾MhÛÜ ˆËƒXÝøŠ6;U­éd±“ž(vÔïã5fXÆßº1Yú;‚XÎkjEMs·«†—šÎ¼€[¨ÆNêß–æ‚G5CP‡ÌžÝ1@ôbZÐcÒ¯–1ŽO^+?IÄ6‡'½K,ÙÉ'è(šn~^OsQ—fRªñ‡y z ¾ê"„`÷  [ÌÅ ©í + Sf3^°SÀⵡŒ¤\š¨ÖêÄ rjÊéêéÇR…²zûÕÍÊç=¹ jëNLXžõµe,pÛ€„gÚ²µ+¡4Šª3Vôø ¨3À  +±y;b«Z™$¸%Tã=j̬È×5cMˆs’( NàÃn×Ò¨XÚ™Á’N„ñZ:¤xøž*•„æÞ#àc 4%ü‰kîÏ$S4YÚBÊsT¯]®¦ùÛš×Òí„1F   7€-»ÇÄnÝxÞí]v³r°Ø·\û×lû®sês@J^‹{uPFXb¡†6»“|„‘U æ`HÈ®‹O´Ùb8 ·ƒËN¿­,ˆ«óTò¸ÿŸÊ«È7«s@¦ŒÉ’§*šÝËm&Ÿ¥il(€÷ªqùÙÀù‡µmiÚ’J:€kGíX=2+ˆ°œÇu´qÍuñ èÚ€.­Üc¯5Vîôʦ(=Íw á!ºÚäWÿÃ::}Û<ÛGÿóûx¥_™ŽE[ÞÛ†:Wqÿþ—Œ}—úèßãH<;¥Ÿ²ÿäFÿóû•!Ý×Ö²d·ùùs]¿‰ôëKl-¢ÙæoÝóœcÔû×+2nV#Š£=Ê´Dg“VtxüÀ[+:òÝ£PÙ5£ ¸BÀž(Õë:( yÏjèü"v[]üØýå¸Îì£ùþ¡æµwdtº_ 6-îÛvÜÉoÎqÕÏGóüCÏWøùþG]àÕô_šägºÿx*ílÿÔ¥qGþF{¯÷‡ò®ÖÏýHúWAÈcÞÿÈnËþ»äk?Ƙû%®¾•h^ÿÈnËþ»äj‡Œ“}­¨ÿlÿ*C89’HþtÎ*[-E‘ðÇð5$à¨Æ8¬›˜ü¶ó¦#´Žð< ®E*Þmê?ÆÑ¦ócÃW®ˆŠ2sš»%òùHçó¬ò¯<»Û'Ú ´C.]»t«Ûö(ÛÖ€ÅÚÐ:Óe® Î:Õw¸ù<´-¸Æy  püû£àÕe¹(¬ž+©Ðqý½lÞÿÐMwã–cͽæ¶®sgÔ ôš(ÈÁÄM3Œ‘ë\¦¥©†¹õ¯¡ëľ!Z<Þ2¾`¼~ïŸûf´ºLËrÝÍm˜¿vFy®sDC@{WHÙØÔÉë1à°àÖ%¼LîGnÕÐêã†McÚñ>ÜZ± ÍÊžjâ]ÿÏOJ`ùYˆw)q E ^\îN”ØD—U¾í]m7篵hXZ${Iôô  :]’@žcŽMY”)“Ž•mJ•4»|ÏÆ«Þp¿…U³ ]ò+fü–·\w¬+2MÑ'Ö¶nŸ|@(¶,€Q«8 $RÙ†j=O(+\ˆ‡=j¥ÁÌÃq«`D8æ©Ý!óAé@buö$Uùî¦iL¯ r3‘U ¹v1ŠÒko12dÏm"9Ö·adwªlèÒ‘@)çÚ©¨Y®ÞZßò¤ÈÝ–v©Ç¥¤€3ÅW’IPà“^…‘Å‚£8¬CCU“ £4ËÁ3–ùóÍjBûS¡¦Í§\|¸\ïU g­]iAçÚ®h fߟïè&±Ô±õ5µáø[ûR ànÿÐMe_øRôfø_ãÃÕ~g»ù`ÿ¯hÿô[:oü{¯Ò±üа×´ú­7þ=×éUOáDUøß«.ÑEfdSýÃ\Š¿Õ=w³ýÃ\Š¿Õ=mÛ·üJ­Ww[)N7uå{gßÐõê3ƒçMr¯E·oø•Z®î¶RœnëÊöÏ¿¡ëÔgÇg¼#¦i!³NKí§ÕYï¥aÉâ¨Ç3ÌySZ²SäÁ4ÄW’æPGÌj´¤¶9É5|XË; -_·ÐÇ àP6SN܃ZÖÚfR˜­´†(m^GµFN["€"[c\ã¯ZlQ(cÇCVH8ëÔTH0HîhèÀ?E+«·Vç>´ÔC¼ŽÕ0·o¼O¿ZP«rpOLUȇSÆqTdËK€zU¨ª’Xãë@oÔt^¦›§Eó’zÑrs(ä÷«Åc'zÐf€šÍžãtÛWµK<ä¨çŒtª°Gç\œŠ…Ä’¸pzUÕÌqÓҞѪ0ã¥G3y¤ é@«-À%{æ´Ü…ŒàqU£·T`W$çlgš¨ÇZ!”«õ#ª=Ê®Ãòö¥. ´ÍZàŠ«\Ë\‰r{f¯ß]ç8x®O\Ô<”*&€0µ‹÷ší°Ä€k§ð¬ÆXç®#O.Ny<×yáh„` ô  í6_.å‡Nk¢F.¦¹]ưIâ· ¹W@ö ¹qç uôªwD=ªÌªLÀÕ[⎴ rˆ ð)Ã-’xV"6œô«+"ïû¢€4m¢|ÃéÅgj·{c(­É÷«_€:V3ƒpüô tä&Flò{×Cn?u“ÍbÛ©ˆã­n@¤ÛçµDßÏ?Z¯¨LUDjy#šœýóŠ£&$¾\óøP¢Ó7ĺâ­Z¸…Ox:$`dp9…4¡îØ);GJ½,… ö­}5”Úê+;È&Äœv§ÚÊéÀhFa’p2*”¶)!$Œ.rpzÓÚE##·½VƒLDûÇ<ô©.%HT`ã©%½XÁÁÅs·ú‹JÄ+dÐíïžÞR‘Ч§ÚîqÅFÈÒL¬ã¿5¹h©#!EÀ€5ôÛUÛÓ§ZÔŽ_.=ê½²˜á${S.¦[ª§§\PÃ…ß5I/0\`g-ýÂÚA¹†Oó¬4ÔÒïtDG#=袬À¤1 ý diw8œ©9­À7J03šçnÀƒPA5ÑÙ^±äž‚±5Øü··Ÿ¥Wµ»e´*I  %• …æ•‚ÆŠY˜ö’kúåÖ©,ðßÛ¥¼»VâÝW?4÷IÏñ `þs^ÓçÕt¶±…ÑgU™™ˆ>V~p0:‘ÇãTWÃfËX±¿°¸¼­ÑN·W2Iº":.âpC=©/?ëúÿ1½¿¯ëúD¶zÅô¾!»±»´ŽÚ­ÄÑüû†â¹8àtéÏ×µR±ñ¥+i·—PZ®©Jc…Sw›A(X“ƒ;ŒŽµª4ÙˆæÔÁ%šÛíÉÝÌOlcÖ²¬|;¨ÄÚmÔöͧi²™!dÝæÉ€B``Äç¨]/ýjÿA>¿×Oó+øêašjÌÿÙkžŠ0ýzV×Ä'¸¹Ò"¶ŠIfc6ØãRÌxBpÒ± ŽhXÇqÅ(2:•#ê 0(ß[þíЃŠÊÒeÙpQ­Ë¦ùÛ¯Jæ$Öïqh¬eYc5¿áC²+ß›oïmÆwcøÈõÏð=)kz­ó]_…\yW¬h2Ûó»\ûçÏ¡èyêÿ?Èë¡ü¾‹óBŸùîÞÊ»K?õ#é\Yÿ‘žçýáü«´³ÿR>•Ðr÷¿ò²ÿ®Ãù¡ã„6öŒ{ÈGéWïä7eÿ]‡ò5‰ñ ¶iÖl;L•!œð@[±ªw°ƒnàŽqVlfk‚9§Okw$S—£\ùn8çšØ»ŸÍ+Ï&¹hå1]°ÞÍkÛNe»ROJèc·òbE^¤TNåWêÄ3©ÎÑXëq·R—ÎíÜPüïÝÏ5Æûi€ü¦´ ¶Ü›ÇJ£©í|ǰ  ß ¿›«Û7³è&·|W©-Ž¿ÛÎKÙD ;HÊSË6OB{‘Yz6‘q¢k–¶×3A$Ž®Øˆ±ÀÁõßò®–m2 õHoå.òCDˆpPn “ŒuഘѕáÍB]SAšÞB9ní]­ÐÄ¡±÷_ƒóeH=zæé´{øšþI.Ròx’âuÞFíà~µ`ÒííµK‹øK£ÜF‰$cÜᱎ¼ã­;OÓ¡Ó£!ga4ï;o á˜äÒŸù üÌÏ =Ãi÷iuu-Ì‘_O›)É 6°ú+œñ5ªKâ –eÉ;ô]¶Ÿ§C§G:BÎÂiÞvÞAÃ1É¥q¾$™S^¹ãôG`1Å"`TóN¸r‹Œö¦=êqœÕ9æiA$ñØP]ûïÏ­g¢ì5[¾põYÎè }hÌ{å$Ö®¶•¶11»­-„iÛ$k¢!Œb€9»y›˜¤'5¯ ±1Žpk6ò—¡”`[Vèv/^E@c8,Ä}h¸Ú«Á9õ5d¡c¯~+>ùÊ;ž(6Œ÷,y85nU&U‰jkX¼›c+}i‘|îò¶8äPá@Mžk&WÞ­×°©æ¼îHÁ$úUHíÜ˺N§Ö€')»-ëQ3äl*vÂä @iY@x<šmËmLˆý*¾¢BÀ84í+©9Åk:w¬=0œg k£gŒ´¼—¨ßÚ†€œôuÜ5 ™!+Ó΀9¹ea LÓ#˜(]ÝiúŒg^IÍg…geç4½öÖ1…SZ–ÈbcÔúV­¼—½oZØÈ¨wt Ût…˜ƒïXzœƒ%é]%ÉòÔ€0®^å¼×bzŠÙ—xÜyÑÚÆ>Èk’¶-öÂL×]Ùb=hÌ1/Ù¹¬Õ™°:w­(›6Ì¥P™Ú€Ã2Šn¡ ÉÈ©Hýè©5 ºãµbÚ/úAö5§qŸ%HV}©i`0k^쨅F;PÌp{þ Ù U»0]Q_Bw© í”íÉÆ*¥ã8ëI"?gÚjÊ»_߀zÐÔeƒ%A¬–³"ãr©À5ÑYG‹p=ª²ª­ÁÜ8ÍRD ÐÖt÷-„÷ö®±¬ãx …çÆêhñJØ\еk©ò ±-ú<ÊsŠÃµA*ÀQ4à9Ív6wñ ¸5%ÜðI2ž q¶Òn9f+õ«RK†]²ç>ô¯ H¸QúV[Z¢€3Qý¢Sü|zd†W䊙4èdÏ88éZ:Lk äh<óøÄO ¯\zÖžr%Õ"SÔîþF²¯ü)z3|/ñáê¿3Ûüа×´ú­7þ=×éXÇþEX?ëÚ?ýVΛÿëôª§ð¢*üoÕ—h¢Š³2)þá® Å_êž»Ùþá® Å_Ꞁ6íÛþ%V«»­”§ºò½³ïèzõÁò§³0ȯ_·oø•Z®î¶RœnëÊöÏ¿¡ëÔgƒ6¿8À¤†Ì›k u«éb™ŒÕå·Ú§Îð8¦"(âX×idlŒ•nHö§Aõªo×ü(/½ëŸJŒDí!ô«Q&欨ݳ@š'Òš!l’:Š·äñÇ¥œš‚(ög ç4²L~<ŠF•~`1š¥3å±ùЄBOz”’ˆpxÅAo’¬Fh}Äã¶h´G̹ç§z¹IÍA៎jݼ8 Ÿ^ô0ƒpËci!M“œqVLƒ ‘U…fbzŠmÄ…Uºf–Ö±ëïUØ™e ŒÖ¤hœf€!l$DŒÝꔲeBœÖ‘@bÆG§ST®‘cP}h 7oΫ\Ï€x­I#öàͼ`¤óÚ€(ßÜùQ>œäשÞ}®èã8­¿jLPÆ3šæcs@mX ù~õw~‡Íb@Îpq•I1Æ»ï ̈¬9ÅiÞÁ´îšŽÆä¤»I­¢vÆzšÊ¼¶{y8phaæR çšÏ»`A,{Õ(¯Šœ9'=3Nšq1P§­I<¦>•]æ&@£#ªiÇZ“M´óÈv(Š2빇¥$XÀ==+LD‰…+øU+ÙbÁP=ºPx ±cZö¬Ìb²ât õvÊE0 s†ÈœFÛÌãŠÓr½V¸„1Ýš¥w,‚R¨Çi¦Ã ùˆ85©mb³ŽG5¢Ö*–äªäZžÒ5’ÍSª«ÄmØçîÕÍ5† šµq•8ü¨¥@äÁèiÍ·ž=*;»7Œ=xâ©–˜ &€ ÔÝ£†k"Þn&T’kv->[É¿zN­iýšÞÇnP5Æö[@[ˆ©´¸rCJ±ªIæÅÇCÒ§ÒãU€m8  sN#·8㳬e˳uÕûè¿Ñ›œtÅsV÷mk!Sœnâ€5µ»µZ¼7lW)Ÿ-´†yX’jÝ›X ¤lÏáYm;ÜÀ?J—O$Ý(Ív6ÑíbI+Ól ²Êü[fs'­aø…؆ãòªBël²ïNÕî7¶Lö§Á1ûÖäv'µzâxÿJ|b Î}Qøª}ÇŽ´Ëd ö÷„D_þ*¼÷O‡Î‰NOóZ²[,Ö¥ v4ÖÃã½.uܰÝî‹ÿÅTéâûeX¡¶½šVû±Çf=ø×™­´ðÈcŒqšÙÒ}>ñ/‡œ‚îÆT¯õ ‹SÖuý#P¹°Ô--­|õw¸·*¼xP1žr+4Ãq©^ÜÞZ[\K ’± ±Žø8ïÍZh®|Gyogwpù™[ËoÊOAŒô§‹»d±³ŸÇ+eÌ`<ÁÏ-sÚŠIk#¬¨Ñ¸êޏ#ð5Æêw/$¸ðx®Z¼yç‘ä9v%›dšåæVyƒŽ€Ð‹k™aÚ¯‘Þ½;Á¯þ…rÛ±—¶çv:·Ô?Àô<,6Ésl ›Ýx4¬n¶keÎì=GóçÐô<õ‰ŸäuÐþ _Eù¢Sÿ#=ÏûÃùWigþ¤}+‹?ò3Üÿ¼?•v–êGÒºC÷þCv_õØ#X_óý™eï9ÿÐMnÞÿÈnËþ»äkÇñll”ÏbJC9= nˆ“VïRÌ…9=ê+dÑm“Tµ‚®iˆÄŠ3-ëZÖ‹²ä‚:VM£Ÿ´7\浬¤ó/pÔ§ãà’MgÛ¼`æ·mág¦zU[í<³ù‘.z&)ËqéV5¯^Åm5Ü·V»"* ’}‡ËÖ¨[iÒIƒ+qéZ­ðåË;1Ë3“ëÉ  zv¡yâ wí‘EAYŠí'àr~oj½«kZŽ”U$û».ì*¹ÀüqþEA«ÙÚé÷†ÞÖ m[ ÇwÌx9'û¢¹]NQgœûP÷ßµ[vÄVöGýäþ*¢OˆÚëEæK=£þ.¹9ÔÏ6÷­:%1ùoŽ8ÅtÐ|AÔ¥\˜,óìÿÅV]ýìúì·“„W“8Éö¬»=á2®:-@Û*àŠ•“÷ªÓ\ˆ8aøÓ彄ŒƒÍg\Möƒµ‘@’n¥ÝŽ3ZúmŽçÎåMÓôÖeRF>µÑÚÙˆÔ™ï@wöí¢AÒ®Ú^G, d+FêÅf‡iäÖ+é­ œ é@O±ç šÕ@F{`Vuµ“³ZÖ(sÏɨã©÷¬i‹Ox¨zgšÓ¸¬E½=jŒEšI›> Ð×oò$+ÁÆ VœU‰x$sŠš3Ü裎i§ zÃ9ÇJK[hÐä€M6ly¬F8íVD}v“š«*Ħ€*œóM…H|‘OÜ“RÆNN1Šš$êÇòªZÁÚ…=+ZÙâ²õS¾ãô  zkã*{ûÖä2*‘ú×>Šb•YFk¤™Œ5O3«±Àü4êxÎEØr9¦”p(X&YüRAi寻†MM,aæ©ÍY—å(Å]²ER1[M H{g“jvªñšuÕà‘ßÚ€+_Þ) €ô‰*DXõ4û©‰ جé'ªç4ëQæ^Œõ-]tÊ#·AÐb¹M-sz¤×I¨Kˆ”g€(d—bãZÝÄ“µF[–¥4hÓî‘•¸÷  ìŸSj@›0 2B>ÓøÔÚƒfÔé@J~ÒsÀÏjÙ¾_ô`GP+&Ìævç½l\dÅŒv ô™‰GZn§(ùqÚŸ§ »ÈÕkðXäó@-&W€zÖf¢™œ{Uy.^ÙFÓŠ‚mMX§˜:ž´±ktðÆ¡³Œu¨]׿<ž*Å»[ÜÛ®×*ÈÖFqÒ€:+ddë’EszŒ¦ea×Ú¯Øjl±ì`{ÔWò#È$\P!ÒA È9Ö<ðM§zÍvVŽ>e#4˘#‘C2ޏäP? °™@eíÖ«\ÙµÙÛ·üJ­Ww[)N7uå{gßÐõê3ƒÆÂ8$úÒCe ˜‹8éQùÀÀ§2.À: ¡$™$Æ)ˆ’â`W sôªÝW­1‰C–ª÷‰ ‚O4£æ¬QޝÃ\LvôúV<×u.Õo–¶,"Ùœâ€.Æ0qÅU¸—*ÀjYä(¸P•‘s@ E‚rMG!²A¿&vã“À¨dtärhXYBäp3Oc×iëT£”g¡õ«p:ÊØäÐÇóç5`ª£9íAUàb¢ˆ’Ã<ŽÔs'žµFrÉ!ÉÎ}*ÒÈy•^D2Î28ö €€÷«êø‹5H+nò‹ ±¸yc‘éÖ³5×$Å9¦‘PÏOZƺ¸ )\ÐÏÕjÂÕîÕ–nÕ§q0X·ZáõëÝ唃À  kËŸ´\ 4Ñ&ÔÀûßJ„°“Ô±ï–$Ð]Èn¦»Ì^VS1Þ¸yHÜk¤ð¥ëEz‹øs@—ÌÊ=êÅí¡1ŽzÕ8¦jÖó7('Ò€9½2D pFj„e |ئ»yÕX6áÆ0kîÁ&FÀäÐ,÷&i’5Î u:\"+e'Ó¥r+ C~ªÀ䵨Á X—o¥>fœŠÉ»£ØUéœþ>µVt$c™ ‹·'¯Z·dAÊöÍe«€ÅGjѱa»Îhóœu4ôMãži¤)eÉ*.  V F@¢@1gô¬¨œ =kF&Þ¸èŒyW…Nq[Yy¬‹ˆ|¹„§8Ñ‚]Ñ®Óòš ÙÏJìhàzÔáÏsÞ’YÒ€+H«n»€‘pZæààü¾Ôûˇ’Až3Wmí|¸w0ç‹p ÆÊJ»£ÿ«Çq֢إ^ÂV·¸Á8ó@—#|Dó\å݉uÜEt²äär¾k=€~lóÞ€0#Ò¥’2Ø­-;GÛóH:~µyÛÆ3éS­Ìqä–PID˜¬Ë‰Àn‚Ÿyæ) x®~òìç`9'­;ìæû„nsZpéûí `ЇíWÊ–FãŽjì ì?*JfŒ,pEtp.åÁ#«”ÔKk¥™ç£k«)ŒsÈë@íV,zÒF 8ôÍfh‚™Ï_z`Ô'iç¥o¥ãØÜ,ñm(l3Œ‚?­fj‡#¾]سRk5¯Y³¹º£w.ôå²(•ýÎrÄäž”ÛFCd“QEj÷W‘×Cø5}æ‰üŒ÷?Qü«´³ÿR>•ÅŸùî~£ùWigþ¤}+ ä1ïä7eÿ]‡ò5SÅŠ löf? «w¿ò²ÿ®ÃùÏñ¤â ;g=݇éHgu*§~kòQ,Š:ç­:òè·ÌN=*µ’½ÅÀ8ê{Ó~ÚÀ!`sëRËnmæ.1Z7 A`8¦J¦{n0p(RÑÖXÔƒÚ¯lR:×c¨Ifæ9åÏSZë«)È  RaÈ©7ª¦ ¬C¨g$Q=ó¶ cJÓ¸¼³“–bKÔŸS\¾¡yæ3ð*ÔÓ‰®zVKÀ×PHÏjm”ç*qWÁ9.£¿j¶šx‚ J㊱cl$²è; >Ñû¹(¼Ó!+¸ c­E7ú Ù=ªWïÛœPRØ $A"µí4HÐeºúb®ZYy`95¦ˆG6ŠŠ>_–¦ÙÁ4XÚzL—‚?n[îæ›ä©3O Î2¡‰õ ÙB/ ¨e'>•r\ãý+6îR€ž¤J£|åˆA’ I2yaq‚G˜k‰ËÉÈÒÞL²\…QÂöÍKgÈ7óT¦eÃoz´÷$ÃåD>lTÙ7˜O½Þ€-Hã'5M‡˜s“ÍYŸo#¦*V’OIÓXzô©á7µG(Üãh©bt  ‹„=úÖ4¿½½jÎ|»wbOJʇ$îühfˆù ޽éaŸldÈàU„Q'Êj„èÖòîÇu°ì(š}¶í€xô¨m§GM6â}±:c4Mdß(nzÔï(ó@&«+,k¹°3ÍVkÄsÇ­nyÇb…<Õy]qޤuªë6SŠt0I(fìh”ÊJ¿÷}j¥ˆŒÜ2àUí]ÖÚ×#ŠÄÑ.®¥,qÁÅhÚ’ºÇunjLHíXVŠõNsÎMijÁAà §s&-ˆ¦Y+÷™"£¹9‹=©†eXv÷  Ë[4Ýy­AÇÙÈö®gGm÷x žk¥¾Qö|wÅbéÉ›®}kvà(B=cic7dg¡­›¼?J‚Ê@ Œã5ëÁsEš–v šmðÀÍQ¾¶Þªë\Σm$#g¥vG ¨:Ö~±l$eùy KžhŠüíÚºËk›{ »Û‘Ç5mb©o½”täb²î®;¢±¿vi G…#8Ȫ­jUsÖ°­ubUÜŒqÖ¶#Ô”¡ƒ@‰L2§­+^.1ŠŠ{›«ÒY"¡u4¡ev¢Ø.à R»D’\ž}êŒI#÷©š …äç€6ì-àò: Ñx!6H¬eÔžÙ6ЍׯéÊ3r{PÞb:2ÅZÓmÄx“¹ÍP‚Ñ¢|“krÝDqßµe_øRôfø_ãÃÕ~g¤ù ÿ¯dÿÐEmi¿ñî¿JÅ?ò*Aÿ^Éÿ ŠÚÓãÝ~•TþE_ú²íQVfE?Ü5Áx«ýS×{?Ü5Áx«ýSÐÝ»ĪÕwu²”ãw^W¶}ý^£8ö}…†qÍGœJy&¡—&7à{Ñ+NQY—·&Ød’Egù„ÝàtÍkØ’z×;f^K¢{g­oÛîSïšÕÜ*E'9ªäcšž'ÎN&Rx­xzÚ²NFÒµm˜Á4·Qùûâ«YÊFèûŽ•y›'o¶k(þâìí'“@Ó{ÔWÓyQ7®1ÅMg$ð>•Ÿ©6çUò lâ2J‡¯;„¶bjµ¬B8PÔ~Tjm¶äýê«ašG'š‚úÀÄåÕxëW´…áhÍÊ›O"€0¬îK.FãµO,Løª÷ö N‚ª&¡4XÜ2=h[‹wF'‘Už6#“VMüNóóvç¥W{Ä–AÓoÓ­gÍæQçÖ‹ §œoϾkfd˜â8øõ­Ë==-ñ‘ŸZ­ogöH95†‹Ù äÒº}NDŠ «ÔŽkÎÄÊåÀë@í-’þÔù…I¬{ÍHŠ}ÓèkZ2l®B’BØhÖXppsÞ€8¸‘ƒ îBÕØÄ@rùâ¶.´a"åx‰6™4o€¦€ ¸•TqUA–ä„I­8tye ²’+zÃIKp Q»WIÓ–÷H£qö§ê‘aã²" “­Ü'•±ya@ ÌpÚŽrqŽ+wÂoû‹ÆÎÜËoüXê玣ùóèzÊGžo-›µw^Äq^€Ø[qØþ2=GóüCÏWøùþG]àÕô_šÿÈÍsõÊ»K?õ#é\Yÿ‘šçê+´³ÿR>•Ðr÷¿ò²ÿ®ÃùÇñø'N´Ú2|ÓÇá[¿ò²ÿ®ÃùÏñš³ZÚ>aþT†y™²’gË¥tZn”#Œ6ß›jËK/†“: V¾Å†< ñíLG1¬ä"®yéN°b¬ˆÃå÷©'ŒÝÝmì YšËÉ‹v9€RÒ#¸]ñ€b¹ç´’ÞLp+¯Ó§Fõù¬bœäý(”Ib ÒK4xÊæµ.ô@ )œÔè’Èy\zÄ_6Y0 òkIÒÚ/ÞL¹¥i¤$• (Æ0(…Úî¶l&8¬ëÅ‚ ÷³Ò´u¥ŽU ’0+”In°ààš›R•îvÞ+CHˆyG‘QßÌrjî•Ȉë@ЯÊ:Sœ§Šd-•ÍHíõÇJX•‚çøM2TÈ=EHŸwƒPLXçž(Ø!88¢?R9¦¬€“ð£xó“õ ÌÅy=ëSÝí­+—sX²1¸¹<@la³.Àç˜ìe•œüV•üž]ºÆ?*¤Š¢D¥Z·ƒÉ\°ëÍXÈ<ô¥pV<ŽM,Q–S‘š«*‚z†c¶,b­Î 0^˜ôª·Ê\¨5H‹‡f˜b5.6(4¡.È‚Ž¦«Â»aïPÝ9šçjœÒ®"%µId÷§\[,°¶@Å:<þ”“ò0[Ú€0ši&Tœwª··ª¤y­ÄNz×5ÍyfyÙAÏ¡ ÜÝI1ÀÎ*{9¥çUÛM)r7üÄv­Ë{UBøP6Ö?*îíÖ´|´‚ëÚ¬ÃÌ285[SusÐPâk¼·–¸ÍciìT³giéNÖçY.XƒÐÕK,çss@.”ß¿Ü{U»·Ý)À5Ÿ¥I¹ÉÇJµ<»¤8Jæ}¬_JdóAç‘Ö«Ýɾç`§ÚFâB89 ƒÃp;qç&ºMPˆ u¬Í˜è+KWoÜ~”“¦.n›ëZ7…£'­RÑ¢&áŽzµ¡~¹Ïá@tó™t¢ú1¸ äÓ¬S÷ÍŠuâm•H$úÐtº(íA2êBç–%ië¶ ! ‚öÌè+™Ô´´JòÆ~jë­p"~9ÅW·E’Rï@kq ͤ¤M»hïI¡2K•c´û׍߸~ÞîØ œb¸MGÃ’YÉò.FsŠuž©ƒ–àÖÜ hÇÍœú×%¼ñLr§”ø'ž9äàsŠï4û•Y‰<ƒ[‚xgx®ÛP1º†f¯%ù¯œžy  ÿì?=ØïÈì)!ÑÚr\tïQÁ¨²U¿ ÔÓj¥“ð lêàtíT,›óã$šÓ<‘YWþ½¾øðõ_™èGþEH?ëÙ?ô[Zoü{¯Ò±[þEH?ëÙ?ô[Zoü{¯ÒªŸÂˆ«ñ¿V]¢Š*Ìȧû†¸/ªzïgû†¸/ªzÛ·oø•Z®î¶RœnëÊöÏ¿¡ëÔgÈ/¯Ÿ%W'Šõûvÿ‰Uªîëe)Æî¼¯lûú½Fp|“ÈEž´ÙŸ‘Ó$žj`ªŠ3×®jâD¾_N*³ÂÓLª â˜†*yÍ…÷­ë(<¥äsïO°Ó$Ü®¨Dê ËÀϧ. n:Õ|ãö ä±§¼Ab$ ñÖ€0yéÎ 8ô  ×u,1CdFOSQœdqQÊ[g€'Ó!ó&f`0+d&3Ígé`¬LO>•¤Gî‰Ï4IÈÞI©L¡!>¤T8ó@ÈéLÿY"¨4vÒ< ÏÞžñ &ã ©b# @ÈQ€ëÒ€(Él „ƒŽ3Y× ‘œUÛ«€ŠGñ£gaÓ½„‚Ó!Fà2kÏ5­H«¸9Îk¨ñª‘ÀÁÏó¯3¿ºk‰I$óï@呤”±'ššÑñ"€qÍUÚœ3Æ ÎhÆ£1–}»²¥ULc½5·ËjDô4vÒ/1€9­«KGŒ†åÍRÒaJû×Y-·“àb€.æ¯<¯JHžKaßéÚTže£¡íWŒJ#®TŠH5l«p{f§‚D2k>âÈà˜²}«5n¦¶˜ƒ»ôÒ^01ñõª›°…ŽqM[¤š ÙíY·e”ÄŸ{4$·{¤eRMUkW˜’ÍÅ]³°,A í­ #XdP=¯—>ÜãŠÑ dsÒ©ÜîŠméVä$0úP±Á]ƬÂNàETŒåW½[ˆ‚À*¼ÁHëSZËóÍD±ñ»ÖšŸ$ùÇ|P¡ÉfÄKïÔÐ3è—óèôhî=}ëbL qïþE8F9&€im„«.(M ñÖœü‘Ò€1ub&ŒóïV´ø±àT:¬@"°\ Õ=€¶Ï¥fëu`9«º|¦XP“Y:µÐšå‚©>•§¥È=èW ç¥3Ë Ç*9§€XŽ8=sRíù¿Æ€5DùBƒŸJGe 8úÑ+ˆ€,BÖ=ÝëNÌ‘çÒ€{¨lŒäúŠ« “] ¾pzÔö¶Îé+b8•>UP#ya%¬ûâØxAˆµºbØ&K|œã«ŸqüÿÐÀÖ¢yNE\ðØ¶¢¶…žÎìËB=GóçÐô<õ‰ŸäuÐþ _Eù¡§þFkŸ¨®ÒÏýHúWßò3\ýEv–êGÒºC÷þCv_õØ#I® v¶gò¥½ÿÝ—ývÈÓõ¿Ñ¿¥!”<°#U+–Ú‘WÁyVâ1°šb1,TÂN:Öþß³6{ ϶ýÝñwÍI¬\²ÀyÍTÒå"ãhã'Šß\ޏ®sK‰¼ñœòk¤PBŒõ ¶‘R.zâå…JŠWTS’1ŠV-üë.îøà¢M%Íé‘¶F2¦ÛiæS¹óÉÏ4µ›ÜI¹òG½G©ék´ycŸQ] [P`öéLx°É ZÞÎW` o¬ ¼-ãAž3L§šŽô§cpÇjb±8íDr2{ö ®xüj¼„õ$j“·Í2e Œ†tÇ­ß’{zTŠP ÎxHqë@/¤Ú¸çb©ÛÂDFSÖŸ!‘ÕdšuÆbµ œ@Op7RKG³ÍA˹/W¢±‘À–\ã°  ‹ …ÎEL–™"ˆ6ôÛ¦Á ©;wµBéÙøíéWd9\šÎ•›wLšl X…>µ5ë…µb4°ŒØíY÷2¼Òy}…6Á ®­m ªv@œf¯H~ZU Ï¥U-ƒR³ñÒ«îù©  mNB°²çæ5FÊ×`ÜMYÕ2÷{š`Œ¬Jõ  ;%ÉÎ{Öä/ËÇ5“gØÔšÚ„áAê1Ò€&•Öòzâ¹^ë;Ú´µK¬(Ü×­Ý•µrNsÐP!){– pMjXÂ>ϸž@éXNwÊ+rÑɇoJÙÒfÆ*P7»Ï4ë Ó‘ÍKeJç¥]פ:ÖæŸ§ï”¶ß” Ï·‹ÍÔéÍtö8†2Á  * ²”qSk÷ºXË“MÖ²S§j§¡¦]Ž;ÕÍ@`gÍqlb“Y“ é@ Ói ÀÇz¿=°‘wÒ³´ÉBÆIïZ¦SöWb(~Ù˜Ô,áÏÔÔSKî9éLˆ6Å΀4í܈œãÚ£²ßß4¶ò³·^ ¹8ëšéU¶^¹ªZ”1Ë:¦ÑS@í¸ª—s—» P¾Ðâ~BŽkOùmŸvGý^â3D±+ÆÅp’Ù¬s(+ŸJ†}._õ‰ž+¦»²%ƒ*皪ñH€‚>”n“³ÇcVÃùGSVR€4}“ªâ€4´ÈØa¿:Ò•B”Çz¯aX·b¤•¿Ò#\úñøVUÿ…/Fo…þ<=Wæz+È©ý{'þ‚+kMÿuúV+È©ý{'þ‚+kMÿuúUSøQ~7êË´QEY™ÿp×â¯õO]ìÿp×â¯õO@víÿ«UÝÖÊSÝy^Ù÷ô=zŒàù4¬@-úW¬Û·üJ­Ww[)N7uå{gßÐõê3ƒåqÛ¼äc8Í$6Èf€prkFÊÕU²Wñ©­,„1?Z³€ÄJêDx R7òGJ·6?Ú¨/4H'·Zp晜?¯4.ìóÒ€8`IïM•Ç—Î 2wû w=i’œF>cÈ  éç¨÷3¸4É÷‡ŸÖ§±ŒÍ(±f BW#8«DxúUkxÜsÆ}jY”·ÔÐuÓm”NimÜ),z犊QæÊ@<޵ ‘¼|äàq@Ñî(®M<¸HTŽd¶^xª:Œæ61ƒ@&”Ë;x¢îq‰Ï½61ó‡o»Y~!»Xál7á@f½~M¤þÍ““šµ}7›;æªPNLç mOlA 1Žzç5.Ñi$V\5=¨I$HÜgž´¿áèŽÕnæºÃ›íÖ³´›†,ŸOjèc’}1@l!8<Ö´p†'>ÕDâ+V̉ ò  æ!ƒÖ²®ìüýçŽõ¼c9>˜ªÌª‘dŽ´əͳ2Š—H„\Ü4ÛÖ—WwÕ"q×ÜÐîÁÜ U[·p¢­|¡¾cœôªw.¥À€2.F.Ï S¤|í$ñŠ.ˆ2îÅUÝ‚GlФG$b¯ÁòàYÖÙÚ3éZ0öö  bq‘ŠI€ S¢!”’(˜¿Z»ežÕ&ý ŸQU-œ4}y銰åõï@n‹n#Š¿dy8¡ãÞ…@íŒÕ{IÂHb äP“¦X(ÃÂÒ£‚zÒ³àŽhEn æ þ^?Q&XûSdä =((çTÀLc?AQ¹Æ=3R+f>¼ýh„’Ü‚Nâ£nJíÎjd¯4£gšwR8=;Ñ·•§Ö¥ñÁÉúÐÈL°°ÆF8¬Ušku1€q]3#dƒŽ*ŒÖBG'§Ò€1aµaÎk µ¶X!µ €v«Å‚FNF(WÛ·Z†æå!sõR}E#B©Ë ¡}8<â€âin¤ t«–v>^ õ«6ÖKäŽEZ@÷ÈÔ÷F3Ò¥Îp(à(÷æ” jÞ“ÛÒŸáó²}SæÇúL#;±ÿ-õÏð= s·œS¼<Ø—S;¶ææØë!÷ÏŸCÐóÕþ$>‘×Cø5}æˆÛþFkŸ¨®ÒÏýHúWßò3\}Ev–êGÒºC÷þCv_õØ#OÕ¿Ö[ýúS/ä7eÿ]‡ò5.©2 ú7ô¤386Fhdã®sOLd“ŒVÀ ðqÅ1õý»¤¢TÎES $òaú{×O,+ ÁàZ®¶#…ŠGƒßÖ®¸#>ônXò tª7WêÉ4jiV8ˆ-Ö±gšIÛjçΚÆk¹Fs·=+ZÖÄD›˜s@,ìvüÌ:Ö€#hÀ©23ŒRýÕc‘õ y|“œâšcÜFM.2§æ  ?tæ€áj¼#x?•I"¹=~• !”· é@2aHÅD˜F<Z‘݉ÉàTNÀŒ-.Wå>• Ën'TI^iZ ëøPh”yY'U<ÀYŽ~QW …]‡®{U ¡·(€äš¯y·M)ä~•ZúàÉ1_áª[Ú1èH¬Éí±ç-@4ëv”ù˜zVÄåô㊩§CˆÔ³)`A ÛÊfïLfóf ô¨]Äd.iabvy&€tª?ˆb³_ïñW®Y[Ž¸â¨ª±$c½=œ¤ƒƒŠ£išä“ÍIrÇ_Ó­Œp†#“@îÃ*¶8ïVD«$`©íK©'ú3zö¬+y¥‚L1;s@L7cëQ2æ‹y|îsгnPK†s7H^ðäsS¤2*ÕÒ¡¾rpi®Þ€~tnUSW Áç’’0 ç¥ffù‰úÐZŒ»'Œθ}~U0`~µÑj—;Aù¸é\v¬áÀÀúæ€3`@Ó Ç=ù­û{m±ŒÿJµɒ9º­?lʉך׆¶ ‘ÐQn ˜1WoŠÅF9Æ*­ªâÑØã  zU·©;ÖåÕ¹†^œU?D>ÔìGCÅojh !±Ò€I;÷|¼ ~´aoQQhì1MjC€´&•-×gkmºéT~5­§.-ùÖ¦Áµã@‘½­²Ê ãóVãÔVK&ç³ík¸cÍÝ;Û«ÐÐóJdpƒMiIÛT'ŒŠÆÒŸt#ŠéuöZ¯| eš/Ùúu¨6¬WcT¶«[àœ7½Er Ü‚~´µýÙoöAÉ °VÀ€6lßrŠÐ‹ïŒÖM›ð6ç¥j#p i!íO“‚ ߟZ±ØÈë@ ‚M²€NGÒµ œã­dJ>Fx­8$  ð}hl(M£YÒGåÜ {µ}˜mu5FèCë@b—,9À=ªrr5—g6[æ?tÖ²Ä*Ž5;²E<œ/¥< þb¢f{t  gò©Ôa8g.>•6æh#çütÔè@^pjœüÝ=qÿ×§yÝÖ€$Þ7ôøäϦ*¨aÈEÎ sš¸œóGñuªò³†š÷‹y'é@f-rÌbÝj &R>™¦Oq-Ã`úTÖ–å¹9 ­lžBóïšÜ´‚8Ç ‚ ŒF‡ÖŸ ÆsÓÖ€% 䯗`Þ8§«‚`zioœb€DÂñëM ‘Á¥y21M^¼÷ s€:Røxì—Sù¶ÿ¤Â3»òÐQüùô=„(ðûb}PîÛ›˜Fwc¬‡Ü?Àô<õ‰ŸäuÐþ _Eù¢6ÿ‘šãê+´³ÿR>•Å·üŒ×Q]¥Ÿú‘ô®ƒÇ½ÿÝ—ývÈÓõv Ðç¸aü©—¿ò²ÿ®Ãù5ÆÚ`?ïJC3üà1|¦{ö¬é¸«"`"sŠb'.8çŸzFœ"“1TšäGËU ï^bQIÅ-åö]‘æ¡·´yß{ðsS[Yù¹Ål$b5 Gml‘ñ…úæ¬HéP–lðêu}ã¨À aWšFÚ±c®h•Æ”¨éŠfïj\ŽôÃvÁõ¥ÎÙÈâ€DTpyä‘Ò¬;¼‘Lb>ðë@]ˆÂÏJRŸ/J”_éÍ2SÉÁàÐ6 ä~ÖlàâžOîT·ZªX3íŠ@CeÈ$Õ(CKrÄô©/&xÐF˜õÍ>ÜZ’ØÝŠ«y(’éa^ƒ®).È(=@Ù}O9••W9'“@,ÑNsŠl²nË>”èãÙj«ê*áp1Ígd´í»<ÕȺqÚ«É0–ùh ѸÅ2Y#yj˜å›nµ:äùV¥qÉ  eÝ5à‰®‚3²08À¬kÏÚˆäúÖÂ.f€+^é€*‰¶V‹rkBåACíTZCåÒ€)«ý–|ŒÑy{µ¿vƨê—KIÀ¬cw#äý(sí;Écœã°¦¼¥€Æy¬Û}î¤å°*lHp4¤Œk1ç¦*[‰w¦ÄGj‚ÖÚGe,8õ5;¸‰› q@¶¶Jþìzu®Bi >Ö=+¤Öî„’IŽÿ¥rŽrN~÷­Y€`“ë]w‡á>da‡SšãP × xr#åÄ̽¨KT!`T5 ²n´aØÒêïóÖ‹93 \s@4Yà æ®jŽV ”Í1@ozv¬WËÞ€HPc5[Y,Ó(ÏwI\Ûät&¡¾ˆÉt(튱.zb¹ÍAÀÔ Ç~õÕFDøq\†¢CêGžé@%ÿr¼Ön«iæÛ4ˆ â¬Îà@0qŠ´‰æi¤uÈ >ÊY-gÜë]:ŸÛPÄ{tæ«¥Š¢ÈÅzVTrˆ¦&6èy ª+2Ð/8oj§?˜µ†qÞ®iS¼Ñ€àù«ÒÚG 9Ðg"É;â¨]ÇåÜdtõ¥xfµ”?/z†âQ!>=hMÆló»µGióE׊jóh@=©–=ÔúÐÉR#Ž´ûVÄ\猢EÆ:A•ù  š„ß.Ú§b¦I÷uû€ìOAOÓFSpãÚ€.ÌþZ“YìN«÷oäjýÜ„&MeØúªž gùÊ¿ð¥èÍð¿Ç‡ªüÏaoù ÿ¯dÿÐEmi¿ñî¿JÅoùàÿ¯dÿÐEmißñî¿Jª "¯ÆýYvŠ(«3"Ÿîà¼Uþ©ë½Ÿîà¼Uþ©ènÝ¿âUj»ºÙJq»¯+Û>þ‡¯QœjC¸7S]-»ĪÕwu²”ãw^W¶}ý^£8<›Ê@ÛÎzRCbðzTYlM<°ïŽ•ý¿Zb#8¥ >ñ¨ €¶jþ£´CÍ&£~îÔå³U`!cœÖz#<ÅÜžMkÛF \tþt! <æ›7Þ žµ-æ˜ÅV™€UsO„¼¾aç³!"³tÔo(°´KRJ‚R|€ÜTЄ±×¥hÈÔGÛ5ЄP¸ÿëP%„Џ?2b`iÙFâQ‹I.îÔ >nX’+F>ƒ8¤·‡b#éXšö¦?)N ëÍr'Õ7†P~‚¸ÆbNyÍ_Õ®þÓvprT(¼žÆ—ó¥ëJAÇzUéš`ó’)›H8ô«VV-µ­ür€¬ÀM¼p£#Iî.Ç,:Vy2Ü嘴ª­r~ím}”E@:zPT¶Ë¹´¶ìr}èÓ8=–3ò‚:Ô$ #=©èêˆwsžhËo T¾m²jGvßôˆFwc¬‡Ü?Àô5–lÌ@göMHîÛ›ˆFwc¬‡Ü?Àô<õ‰ŸäuÐþ _Eù¡ÿ#5ÇÔWigþ¤}+‹où®>¢»K?õ#é]!{ÿ!»/úì?‘¦ëøÄéóJuïü†ì¿ë°þF›¯0_³“Œ|Ý C1¤ ÀÅG$êˆ2y^êùyUäûUXã’|ž´Ä9Œ—3е²Å‡zš8ÒdÓ$G˜ã(Ì2+ŒUÅuü*„0íZ˜nQì(f•FqÚ£YT‚*ÜãµFÄu€,™A fœ_© bâ­y˜<úPÒAÓËëMóÂòŽj´o `Š— px71òiwÍ#)Ïã@¤<÷¨†G8ÅOÝ,{Õ[‡ÆHÍI•À”5²ùÏçTõ7ÝS8«w; Tìâ23ÌüûšHÝbœëWZP[ ÓµeÝ’‡<æ®Á tŽ,¤â±ï&òQ‰â¶OÎ@ç…­Á#¯  ^æðÍ)ç§zÒÐI-É5F.wFk¥³´àb€&¶²O/G5zÀä*kx•HœT“: Èë@¯eaTv¬Nï˶'8,:ÖÝÈi 7é\ž¿|•éŠÂ¹‘$”ïrj„Ê ’:{S\œn'­G¸ì&€,Úîˆzæ½;EVryž’¾eÔïW­iQ×›« U;I ’OJµ­gÇJŽ‘cïÖ€7t×8‹Öócõ"§»§z’î ¤ŽŽhÆ•…¶Ç šŽVÝ| õèj[l$#ŽÕJ&óu:í4©#~äñŒ ãn¶ Ol×etvÛ±Çjã‹nº'Þ€'¸QårqŠÝ±‰³qžÕÎÜ2¸'“]EŒ"+¼NWÖ€2íb´±‘Á®gSÒ層E%OZítØšì=jÆ¡j“ÂèÊ:q@{e«4s·šéìu´‘@b=ÍpÚÕ”¶W.%sš¥ü±ŒŠõñ$7I€Ã•¨iaNäl÷ÍiÌ¢UF$ƒÞº“vÉÉ÷  Õ–{a‚2¢§²¸ó%`8ÍZTŽHET’Õí›Ì‘׌ÐÔ(S©95$ Æ¥ˆíTmoÄ¥°¬ßN {Gã@W¯æ6Ñ÷ªí”{T{ ¨°™¦ó;V„8ŽØŠ£y&X©è**2nŒ¹¨®¤%Û5MP沯ü)z3|/ñáê¿3ÔÛþE8?ëÙ?ô[Zwü{¯Ò±[þE8ëÙ?ô[Zwü{¯ÒªŸÂˆ«ñ¿V]¢Š*Ìȧû†¸/ªzïgû†¸/ªzÛ·oø•Z®î¶RœnëÊöÏ¿¡ëÔgŠ$±ÆOJímÛþ%V«»­”§ºò½³ïèzõÁâãÇ9ëI ŠÈJ“ÐTeFOó«ŽêŠrxÅbß^­³)ˆ†úóa*„äÕE×ÌsÍF±´¤ÎsÖ¦™pQuë@F É´zVݼf(b* ;P£yúâ´$Aå7  i\´§ž*&äP;œRÊwÈNZ±gk”È  ‹eòm€#µ à)•M)Ú€Þ¨œ´…yÎxæ€-FúŠ­ypÙ8­Ûu®k.î?-‰ü¨‹ÈÓÈ µop¸áz© •]éÒsÐsNY b£HúSLN?*$}iQSŸÖ˜döõ©Ä¨ƒ¨ ‰àqÛ4Ö|7½1Ü+çQ@r\ƧïéL7±ã¦jìùÝ!ëÎjȵ‹fBÐ>Ú¡U;‹œ¶ÞýêÌè¡@ LŠ 1(y•!ëÉJk«œœm^ôýL€QóÒ¬À‹ok¸õÆMV¿”)XÔqÒ¦ÀŠÏž¤qQÛÂ.&2È8íž•¡rtâ€*Y.ûÝÀp mM˜*–Ÿn#»õ©®\mÇZÍǘFsQª'Àõ’ ,ÄvéN„•ùyÅ&3žµeCgÞ¡Œå˜äTZ„þM¡3@ï3Ý]žrl»möÚ±t”Þ °®‚6 ¹4‘¨/îsŽ”š]Îå(Ç¿J·rÆÐ8¬VW´¹Èàg4Òªí«Y™LЬ&¢­lÄžkñÚfÜOë@íÐî&·íT²G'ŠÈµdó¶±³çÆà(e}€óÏ­gÞÝö À¨&»ÜJ¡$çµU»…ŠovÚ¾”CPÔK†þ*äµ+“<ƒн¬Mó„þ5+=y l°nàT'pƒ'¥)bßZY\ù „q@Z{îSµêÚ@8$öç~³ó.ãÁšô‹%Ø$¨â€15SºïN{Ô‘Æb{棽ÿÞûÕ¹HЃ@ÚX³O¾ Ì¢'rzÓ/˜°j²V {U5ãž:Õ‰†}*¦šÛÓ4«zBÛOjâùkÒGL×]«>Ë^:×!7Mž0h…šKÑ0®ÎÝY,¹=«˜²ƒÍ½ßŒŒ×\Ê©ÆC¦3’zÕÉWëY¶¬v¾µl±ÙÖ€9}{O;G5Äͧ˜¦+Œ}{׫¼S‚øÖ³£¬ªÌ‹Èéí@Uƒ´S…=ZêRpcÉ<‘\ø¶h¦ee ŽžõrÖ|¸VíÖ€4ÅôÑ‚?J·©º"²dÔQAë¸7>”M`ÐG»­^‚™D±K$®ÜíYÖ× lHF=*õ–n.{š·j…ât6Ãõ«Ò DÂŽk:ù€ ½è&eÜÁ@­k4ÙÖb¦ùÆ=kQ_F:süe_øRôfø_ãÃÕ~g¦7üŠpÿײè"¶´ïø÷_¥b¿üŠpÿתè"¶´ïø÷_¥U?…Wã~¬»EU™‘O÷ p^*ÿTõÞÏ÷ p^*ÿTô·nßñ*µ]Ýl¥8ÝוíŸCרÎ+:6ww¶íÿ«UÝÖÊSÝy^Ù÷ô=zŒàùÍõÈ`pi!²µî¢ÁÝÏozÌ…ÚR]¹&Ÿ*nnjkUR¹#ŒSä—R1Žõ%º´òþtž^öw­;[uŽ0}¨Ä*B{u¢ðì¶ È©â\Ÿ_JmÌ"@  ÂŽ"]I>æ¯XÿÇÁ>8 D¡±Æ8¥±yë@—#1àVX eÜJ¹qq½Îj²£/óœÐ§¸;1ß•™s)vÛž*ìèJqTe#© AG ŠuõÒAmÀSÙÄ1íã5ÌëW™m¹ŸjÀÖîpŽsËWÊKqëë[××ÎÄôÐË¢Tvól}ºâ°'ñ…®Î¤ÖUÇ‹`Ý”È?Jï$¹SÇçY×— ]„šä£ñ,Sœ±8­Ë}FÊhAY>ôñ(ï˜Ù†ù<Œ±â¹/à[†Áç®jÜz„,6™>´Ò›—¹jð6$bNH÷¬Xu8­Ô*‘õ­ÛfÞHÆdï“@ílJœÖ¤P€¸³¡Ôíü´_άN $úТŸ8È |£óU¾ßa‡8¹®Tš—ƒÈÆ Dƒ,yïL’qÈT^vÁ»=hi$ Á;ÔO>'Š‹ÌœšI¤H×’ÏJÀPÄùSVþ0&¨Ëvdbˆ9úSí­Cä¹&€$û|…‰É#°©ÓL~QŒÔ‹l‹Œ/JœF†ÎhªÚK!ùš¬Å§ P_ž}jÓ`/{Ô˜À:Pq["0 +KÃmµõ#»oúD9Çü´>ãùþ¡¤‡-øUß6Ù5#»nn!ÝŽ²qüÿÐóÕþ$>‘×Cø5}憷üŒ×Q]Ÿú‘ô®1¿äf¸úŠììÿÔ¥t†=ïü†ì¿ë°þF¬Œ´ð/éM½ÿÝ—ývÈÕoÞGe´’6ÐY—?—øRT§»švr ì=k. jÞ@s ©R‡iÆ)ˆ³#)nÝi²²yªfî2AȦ›•n¸  ̇oZªîÅÎ1ÍO!$㊡-ÁÀAÁ  zROZ‰¦–WÊ«bŸ °R rjòÄ0(’G,„nൂƒ“È5)/^*cƒ?¥F¶Q"– ó}J°(ÛÏ”åP9暀¾9àPÅx÷¦<Ê©ÁäRÊv',*šnš@A@¼Ë”UúU‚›mf_¿5ûÆ€* ×W›ÇE«WR’«ïÅ$1 q»Ú \És¸Í]vX-V?â"¨Eùº““Í%Ìû®&¬Y€ïZ±8àÖdÒ1‘ÇnÕzWÁ9j‡š “@“prM[A„Î*«’Îvã5,~`Ž(Â[‡­]>Aȹ$-Ù±Î+žx ÌXò3šÑÒ†Ë@1[^Ym£b²´à<°:ó[fÅ 1º¨_Û,ªr:V}ÀœVv£?—nÒ€P1-ß“)ˆœ˜,³(#¦+ Iç\3žK6k¨··ó#P; Ã’ ]ª[q=jô7.ß18­„ÓÎŽJÕŽÜF½:PU–œ‘9gúóX¾"¸XÕ•N+¥º”E1â¼ÛÄz–B äÐ ÷mÙcÈV|™1\)õªò©Ý½h däŠpùŠ»…­iÉf-㈟½Ö€:  ÚžàW§èÄûšá<<ç$f»Ý1pŒI  k•ÍógŒÔóPzQܨkÇ#Ö’åJÛçž”»¤¦aÎjðosלTší 0|÷€ï@Ü ©žx_K_ô¢sš±pìäœôªÚbþüâ€'Ö˜ÏJäD€Îç×¥uâ‘i\”M5öÂsÎh«Ò!Ù±NI­™Û1ÛŽ+2&û;,dpZÑf@í@lTî~õbW5›6EÇzK¤*Œùâ€.ÂwFyô©d·YÈ<öªš{“±?•i!,:þ4ÆkZ_’Lˆ¼šçx°:žø¯J¿·ÂU€þ‡¯QœŒç®;ÒCcÜü U¨ÛŒ`b¨ÈÜ‚: ½jLŠÎsLDÖ±³K“Ðt­tQÐô^(•qýïj²€äzЈ€^sK#ddu¤VzÓKúP[€#‰ª o• :ší€‹j vÛô  "_2PǧJ‘—3Ú’Ô„\ž½©Ò:‘Ÿ¥%ØØªª*¬%Ž;Õ’ZFºTSH¨§8À  :”¾L Ù<õ®#WÔ8_Y…mk:€ I9Qúןêw‚òä•Î3À ZMÀ“ž{Ôx!zg5;[²D¤ô"¢’6Xà ÐcÖ”ÌюiA*{о“l7‰Á«7’á<·Uk+¼@W~*ÌGíZ„IŽï@‡áŠ®ýXsšêUã%Bð3Ö³m-ÓËÃc…©D›8ãÖ€5#¸ 3Œz çüMt‰lÃ<°À«âFD.GÌO¹½ZÞ[ùÀfÀ 6Ga8Ûœƒž+Z-Zí-ö‚Üm[ø~äPë¹»šµq¥¤?.Áœu 5î/.$ÞKñÖ®Ø\J§nÁ­Èlâ†6 9=8¦Eo¯# Šf?‘t 8×akpޣޙ®FâpàÓ๞Ԓ¤â€:K™Ï¨¸ˆg¯jÇWmV<Ö¼¬±îè(ÐJ0ã­U¸¹PH¦yÞ\²vÅcÍ#OpBŒÐ¯®„ § ëŠç®lÖ`r ðk«ŠÁ (?J©¨Z®Ì…â€8ßìÇgÆãZ–š°å›43,oœœf®Úݰèh'ðÒ3¤Þ§¥9¼ê2[óZ°É4Ç)óm«SÞL~W'Í`ÛøL0Û¹³ëVW±G÷¤ žÙ­Ky\}sNšá›<Ð=÷…ÖAGÊžõ‘†n.$ù "»=ä‡c>E]´¼†ÎØPd>¢€8¹¼!uoæ` íTN¨D þ»Rñîˆ#¯¥U™ÙÀï@±Ñu6Q&ÖÇ®ië¥^í?1ë]uåãF"S¶›’¶ 8ûùé@\ÝÂ̬_µ,Þ›ÉÔǺɑ9=qWím-ôþ]GÍÒ€9•“Spó)§R¿ï3qךéÖd21|ô¡ì­¦|€¸#$P9ˆ®ã$îj·Œî£ Em.‹`Ë‚ÏN*¥ç†­ÌfEQŒPIãF,O5b?}Òq¶±†]÷l$/­TŸÃòC®Os@’øÎ4f¢/G{/Í&¸1¤^·kµ‹~9E#é–š¡À ¤šÓ†öN~uä‹£lÌ\)ÃW¾‹—ìé2:ü¬½J…K+ɬ<[s mrHÏ9­ëoÆ-ŒÐ Àôªd]Ñ-rþ1´˜cx·iâ I”"œûÐÏ–7Þ§ðÓmmDîÛûøwc¬‡Ü?Àô9o©Æñ€Ž9éZ^|%ónÆfƒØêçÜ>}CÏWøùþG]àÕô_š¿äf¸úŠììÿÔ¥qÿ#5ÇÔWggþ¤}+ ä1ïä7eÿ]‡ò5ÊüZ2ÄÃßiíé´×U{ÿ!»/úì?‘¬y`³ópóO…!ž"×·ð.rãă9fâ»kk8Á²çÑàyJí\zŠb1‡Š.–üêuñlª¼¹ãÞ¤¹Ñ-ÀP[Ú³ÿáór Ðáâ©fuÞNßJÛ³ñ5º…~µ……™?†n ÁSh¸‹ÄV¯˜ Õ¶Õí¦Àμ’m6þ3ò†Àô¦Ç6¡hÙÃâ€=¡gCÈjœž>÷5äpø¢þä>E]¶ñÜêG˜‡Zõ8• iûTò®ÏÇÖÇ_—ךÕOZ]'É2äûМ®^_-NA=kFÖÜ"†îk*ÊXäœ*œ÷¶ã}ªG­Vºp»‰'ŠÎ¶Cut\•zTš„Á›Ë\n>õ5º‹klúŒš¥©6ɦ=(…|¸wzbwtXŽ«Wj©OP/3^Mi`D€k>ÉO$¹àš½#æ5É &›v@4ÈâRLÓ~Mädfž˜-9 Œ1eìxÍ<—\ŒúUÈSj’}©©LÝ@—÷e¿t£¯Z}•¾c;»ÔðçÍm$;p08“¿fº*x­”ÚëÝEdê(ÃŽ=jÝŒ»àÇ\P¬J‚;W9¯ÝµdS[×åÂÍéÍr7…¯î ¯AÖ€(XDò:œpk´³ùŒvÁ¬û+‰W€³m±  q®?Y' ½*f)|ò@ïX×—k’N  ­SÛ²ô8õ¯0¾ºóî™Íox‡UÈêO…sK"Îh>zÿZ•£Ýã¥*.ù?wڬΪ–ço4šmºK2‚¼Š½©€6©è8¨t%Ý+98«Z– ã¨Ímø^4òåcÔ+±Ó_005Åx}¾VŠí´åU´f<“@r|÷MƒÐÕ™¡ÐîÇ5[ Ý7;«Fñ´ü(}5ŽÑñ×L˜çø©Ú_oŒý*–ò Ï4±rA³ÏµSÓ×·1Ùàôã½UÓ3jn¸Ñæ¹½2Úatn@<èõ•܈§œš~Ÿ­©FMÊ·— 0§Ãpð1ŽN‡¡ÍbÆïiªs†5µ:,Ђ§æÇè#Û+ÉØžÕ%Úo¶!sÍfÁtГö­$˜KGN”–I²¬H'Òµ‹¯›î`3­[™¼˜6ç&€ žffÚ:Õ'ÌB¸ëQ³±Éõ©-¥Ã`Ð&¥¢"?œ§&ªA*ˆÞ=½8®žæmêc' ×={n!¸VQ×®([8Éž0Aä×aÉç¥sºN·Ål5Ð`ç¥fj³‡˜¨' ´Œ»U§f’à÷É­5S°$t}.é¶þrÒ-‘æ¨*ù×c#ŒÖÓ DïYWþ½¾øðõ_™ß¿üŠpÿתè"¶´ïø÷_¥b¿üŠpÿתè"¶´ïø÷_¥U?…Wã~¬»EU™‘O÷ p^*ÿTõÞÏ÷ p^*ÿTô·nßñ*µ]Ýl¥8ÝוíŸCרÎ6`+×íÛþ%V«»­”§ºò½³ïèzõÁñäa9é!±“‚äóZºdM·yª8 àZÙ·Œ­¸QéLDñ¹f'ùU¸ÀÆsÍS‚$ÞÀ‚€H‚:ŠlR+ÌÅ6\¨aÒ¥ÓÑDm#JžrŠ€ŽÂ¹­ZýQ^â¶5…X[çzíùPħ4“¬jRhÁ;M`¡Ì£4ë‰|Òwf¢FÁÏ4¬%WB­ÎÓŒ(óªë(XŠœóUó“ÍJpy§ ¬qȪù8¥RzäÐÛI68SÖ¶´Øß$˜;I®mde“qÖŽ§, y8íí@Ž%@AÁÆM8ÜAàG½p²kï€9¨ÿ´î¤$!ûÐq-ü/’¸8è+êù–e`8³â{©±ŒŒU“k$–šÒš¸œ6:QO©É*–=i!ÓŸä4«§1ë@’\LÌ»YZ„LåIëZiá$UÉ@X (‰‡q]Õa¬Ì¨\Òõe8âµm@dÀÀ fm6Hœœ𥵽’Ú]™ã5¿z…~ëžÔ-Z52GÓ-Ìù”x=jæ‘g摇zç#¸rà7CÖ»m l´CÅO<($w¬»õVLbµç“q5“¨Êc ú÷ >Ô]–íÔòŸÎ¥² î>gɰ?â`DZ«6c«Ž nYo¶Î ÁkMtÉopÙ8ïY0Êí³§_!NôµéÈ̇ڵ.žv„ v¬ÿ.`¤ÍfOjñÜ "®[ÚM€xÔÍä\oε‚0E!ºPTðHÈNÞ”–©½q"’3È«—˃Ðz}±ÝÊ(8á…X…ü)&Š9Ï#µ_DBÀ²u«c…£áyí@ûØ&@Ý‘Sý„.ÒŽ+TÁ ü¬8÷«)oo:Î1Ò€0Ò%ŒòÝ:fq08‘·ûV¬ºL'$1éÞ³NŽZsó|ŸZ¨dq ('5^ÌÇzzÖÓi ls»3PfÝCœ `O\P"´°­I!KxarG¢»;?õ#é\cÈÍqõÙÙÿ©JØæ1ïä7eÿ]‡ò5ãügÚdg÷§ùVÅïü†ì¿ë°þF©ø¹í­„ƒ#scëHgš5ʪ2yéP« mÜXÛHp§&›nbQÆqÍ1ß–Í>r&´#EF ·Ö‰ðøqº&Æ*´š=«–4n ‘Œö¨ʾ µU£½·$ ã½SšI”’ÈÜЪÚÅ#äâ. ‹‚«Y)v釱quWE œÐO¡@ÙÄc#Ú¨KáèN[Ë•kŬE¿cpMhE,ÌGÓ4ç·Þg˜ò£µRõ¸&7b}«Ô"cƒP‹tä”4çÖwºµ„ƒ%ð+oþ›¨0’?Zß{]( Å`]è‘ÜI‚ƒfÇÆPË>ùO>õ¸Þ)µžßÊIFãêk‡¸ðò#¿.+"M2ñ$Ìlxé@Í¥K ƒ~õË õ¨ï¦Y¥!Ï®+Êmu­JÇ Å°8­›:1iI$úÐo »a•qÅLacã¥`iÞ%…Ô–a’{×C¡ éò2œûÐ 3äƒN€0˜®;Õ¹ç<ŒS Œy»‡4ù@†2Í®^îäË#sÍoëWk¾Îäb¹ˆOÚn€ó@zRˆ»µrFõæŸ ,p¨íŠ…ˆ2cuT¼Œf-ÉÇZ«¥Ió°'гª·‘kíŠÅ‚ì[BÎ}(æ»|?->ñëŠÍÓÕU7¼Õ“<Ó^\äƒÚ¯Û‰}(sÍU^MIøæ9¬5Ï4‚ ‰s„lzХƭ¿<×;ªjLP¨ì2j̶Ï;Ïë›Õ¦¡üÍ@ÝôÆ[‚Ç5\1PJŒÓåëÙ>”©‡åë@ ŠSÏcSÌO‘j®‘Û¸«©™Æ3ÅE¥Ý5¼àtµç&PŠÅ[9 —æ«nÌ`@Ãó4»¡p[ÍwV9ûJâü<ƒcšï-£Ùd1È"€1J¥ÇÞ«ú“m´ãQT›ÑŸZ~®øUPJ±¥ŸôvëU.Wdǃ֬i£Àš’åCì8  ®nš¹ì*¶”ÃÍ'5-üª¶Ê¤Ž˜ÅG¥m,Æ€«¸Ü˜æ–ÉØÇŒqUõVkE®YDDGž(2öÙ¦œºœQÚß4/åÊÙÖµ ‹|Ïè+]¶÷–€4.@<ÈúJKK¼|‡µSÓ®²»XñO|™C àó@Jÿ2Ÿzžf2`Š¡i/˜Sõ­-™x  »wðCÍ0Õ4qn$sHÖd)mÜâ€*ÊÃ'?fO š|uÅ[¸ °äž•— n“ïw ‹K…sO½¾•–r”À&ë@öɾp<Õûé•bô5BÑÊÊOTwSf`Ó45ˆß>ÿzÑšPdDïUlb#hǹ¨®§ò¯±¹ã5X¹S’]S5¡% ±”¶M~g¨?üŠPÿתè"¶´ïø÷_¥cÜ'•á„9Ûn«Ÿ\(­;þ=×éUh¤É¨Ó“h»EUE?Ü5Áx«ýS×{?Ü5Áx«ýSÐÝ»ĪÕwu²”ãw^W¶}ý^£8>E*„cœW®Û·üJ­Ww[)N7uå{gßÐõê3ƒäkÄ¡i!±ñæ ÖºbÌ ãšÇ‚ß÷ÁL×Cú±LCÇô©r Ž”åA¸cÒœÀŒŒPR^œƒŠY°ª)Òvýi’“¥gÜH†:Õ‹CÜúU–òçã¦) ØT1š’á÷ÏÁà º’¬VDžáY©÷K­gꚉŠßb·&€S¿ü ð5çºÕàšFNÀûV½î¡åÆÙnOl×#w0’RF}h9•^òØKjW©´PñÁ°ŒhEã̃êú;xÜ8  n"p@éYr¢s´š¥q®™[jŒ.8ÍR7r¹%b€u ‹p_ŒUë[‚P+Ö²åiŽK†ö¨c2ï+@wv†b1žõ=™0ª«ªG,Š:w©>ÐÀ©ïßÚ€7c "«/5 fAÀÏ5•mvU¹5»g,Sýì}Pufl‘ùÓâLJÚûNx*´ö«  l®Û±ÈÏZ…–D `‘ëšÓ‚³‘ïRCî]¹  ´»d úUå¼ dP`\“°’(ò‘—n"€kyPƒÄUylíØŽ÷©šNÚ C³€­ ¡ÛÉó dûUtfÞv1âµCȇ~”•ÏÌ1@o¦Ê¸Ëfª­µÄs’k}Ýþ^§@»¤"€2⼺ˆô8©—X3øV×ötL§wR}6.Ùæ€*.±pz×wà»…›I¹‘Xö¨— ãø—¼=}yô=.”qò¥v¿á6š-â’W7±ulu*1Ô?Àô [þFiþ¢»;?õ#é\cÈË?ÔWggþ¤}(÷þCv_õØ#TüZ…ൠ×{!Woä7eÿ]‡ò5ˆÓÌ[aèXÿ*C8Ç´rÄŽ½ê2’#Mn4X<Ι-¨šb3a’dä •.Èn^œTÛv55’=¥ˆù¨)§‰ÊŒÔ)¸.* “2õ8©XéÖ€!¹Ó-ålmÀõN].ÝNV¯É,‘°ED×Èy  –Ò’)SÒ”ÙO¥‡ã[®eÉàV’¤nƒ¡ DËwŒ3cÞª]ÂpT°ë§šÚ7ª¾€¢€1GˆŽ×\»Õ»®F 5º.r£5ZM)¢ànÀïš–ù“a ŒššÎ· à#Ò²e¶œ°Ã6cVc»¸‰ í%Æ‹¹RŸjÌ»ðâʧ5¦5.åH4­|$PyÍr§Ož…Õ‹}BîÈàƒé[À,¼‘Jlb”Bš­kâ9Xù?ZÚ¶Ö‘—–ÚE`\é{˜“œñŠ£™âM¤Ù  ­SPûL¹ •óVt8WvüNrk*ÂÙ®» [šY û:PÓŒ&ª`b|ñÅ[—;~µ—)t”ž¤Ð-jë|â rZøÝ3ˆ×¡«ï‹¢3–=}ª{;LâVü(Övˆ2¹$óWš0ÀQVá„ø«vöãq$P M1Za•âµç‚(-° Š|#läqY:æ¦"„àž(š×urƒ\íÁ¸˜±ät«z¶¢÷+O5E• ž¾´žW/йNE6¹f ƒŽ+RÛlqk³& r{ÖµÇî!†9½«3ÄV¢[?9 Vµª$žzg5Vèùöï ^ â€8‹k’íô­¦“Í…Y°@®_P¬.sZ–7AÕTž kÁ0…”€q[v·a”ñÖ°HÂŒw©mnŒr={s@*æÎ3ײm=ù¨ ¹ÚIçÞ‘œA  ýM×Ê#88¬;Eă-ÆkWUFÇ¥dBŒ¥wph²´a±ztíT5IAmµfÁ‚Û)`zV}ü§nÔ¶k„f<ÔQÆàwç½KÛjÄTv$›¬õ  •AôÀ¬I›Ì»ÆzšÝœ•·f8àV¾÷Ô@Á{ÿ"ïý±ʵtïø÷_¥e^ÿÈ»ÿlGò­];þ=×éI »ESÿp×â¯õO]ìÿp× â•&'  ›vÿ‰Uªîëe)Æî¼¯lûú½Fp|±cý+Õ->›iŸ™ìåÂîÆNW¶ï~¸=zŒàò0x3V÷2Â~’RBÚ°“üêÜd*òz Óÿ„kRòöùIŸ÷ÅÃZ¦Üãξ)ˆÏÎ2*PK/AWWÚ\ÓðqJ¾ÔÃgbcÓx  §9=:T>Ô Ú>Õ #OûìTSøWS•TŒwÅ^Mó;ry¨íHG¿é]4¾Ö6úÉRXø#W¶lÈþÌ”‡<‹$tâ¸^ÿË.Aät¯X¼ð^§qTH#»×!}ðƒÄR1Y…>³ð '¸¹y›’y5]`’Bv£7Ò½n?‚úÒà³Z3cþzŸð­+_…ZűœzKÿÖ %²ðõÝË|ÈTzšß³ð¤qÒ±'Ú½=<¬ [ÂOþµMÿ§€1á%pöö1Dª>•i¬Œùb»ð.¨§;b?öÒ¥ÿ„3V €ÿßÊæm-•B†âº;kh,’:u&”x7Y…ƒþþU¸¼/«¤;b'ÚJûв­AŒ>•ÐÿÂ'©’KGÿŠhð†¦;"ÿ¾Åae ކ¯ÁpÊ@ç>•¥ÿ¦¤G)ýö)çÂú–83þø  ßj~oçM$àéV—à<¤gþ*äzòõ+ÿ}ŠÌ +ÖšÑü†¶±/qþ¤gýñLmP#Rÿßb€0OqÖ¥Œy5¨|?¨äâ$ÿ¾Å4øwS$~ê?ûìP;©B$Œž8®QQÀaœƒÎ+Õ._ÒºáàÍK¼qgýñLojÙùR×JåšÖ=¿tUi,T±ÆWØw®Èx/VîŸûiCx/UcÿßÊᤵxy4°Ü´;[&»Y|¬:`$÷“ÿ­U_áþ°Ê@[|ÿ×OþµA§j‚áó»ÔUË’¡3“Þ›iàmzÕË(¶ü%ÿëUÉ<'¯:‹|öýåV‚xÊXdjh>aUÇ‚<@ ;­òé¯ÿZ¦‡Áþ!…²¦ßñ“ÿ­@‘nT ¢Í— ã5°ž×vâDƒð“ÿ­H|-«—}|Êçšá …ý*5Øú:Ý> ÕŒ…Œpßu$^Ô•ÁtÅa‡Rp:ý)­m¸ôÏá]?ü"·ƒ……ÿ|Uˆ¼;y`¹ÿxP–¹†?Jž;Y”†×Z<7zŸ%yÿlRKáÝD®ØáÛ.(Ÿ¡/Î{Tr«ÃÒºðƪã‘þ)¯áç\“?ïŠÇ[”$aF>•ÒøZE:}Ó)Ú>ÓÎqüCÜ?Àô4¿á¿ …3ïŠØÑtÛ­&Êd¹Ú…爩WëóŽ£òÏ>Р(¿üŒ³ýEvvêGÒ¸Öñ,çÜWeiþ¤})‘{ÿ!»/úì?‘ªþ&mã¶v鹇ò«¿ò²ÿ®ÃùgˆtY5¨ Š9V?-‹ÀóÅ!œòê<¼·çWKÄê`F;U_øAîÁÊ߯>ªjX¼!¨ÄxÔbǦÃLE+Ÿ•ÈŠ£råJZé?á½ Ÿ¡¨dð…Ì„´Äö4Î’8ÏZ•w8ú×@ž™q™¢l}­Â=8üOøP7öF“8¨ÍƒùÄmÕÇ¡ÜGŸžŸsþëqo2}ÏøP.,02x#¥HcXâÂ7ÍÞº ¼?w*àOþáP¯…îTsqõëþÌÊfA‘OY¤d×OÿÔØÇ™üOøR?†%dÛæDÔÿ…s àÏóž*ÿ“ F~PsW›Á×÷-ÌKøR§…nÐcíQ~F€1Ò‚£'¶)óèÖÞYù{VÊxrõµBVN‹vWi–Ìÿ…p¢F*3Ò²f²x¤#iJôèô ”÷’}ÏøToá™$3Bþ夘W“ÏLS­åÁ[ ú×yqàžBâæ$öÁ5_þÍÈl®¡ÿ¶f€9Ù‡Ùí÷“ka™ËmûÝ+½ŸÀÓÆ±N£þ™Ÿñ§Åà ãÛºòÛÓä"€9«+C¡À‘ÞªÀÆ+à×xßÿ€ç$¹ò²YÆ>µÁx›X21Tn¿Zõ;‡wó‚?µb_ûdƹ뿂7wnYµø‡ý»þ*€<2ò?4“’q^½ÿ 2ëËÚ5臿ÙÿM_W ŒëñÓ±ÿâ¨ʬÓ/÷~Z³xÂ@„­zÄ_'ˆq¬Äíÿ⪭ßÀË›¦É×¢_o³ÿ³P˜ZvRÄëVï$òâ$Õèü»„¾!‹þOÿW%ø-u5¸‰µÈ²;ýœÿñTã627Û‰#ŠØŒù¬K W¡Ãðâ¼Ïíø·ÙÿWãø5q8Öbçþ˜ñ 3Jcå"ƒò滨¸²þíOkð®êÚ0ŸÚ°¶sä‘ýkq<t–â/µÄp1¦€8hGúQôÍ=ÆûÁè+«_\‰wýº/¦ÃJž¹I¼Ï·D}¶Ââ>ÜU[fÌäû×^þ ¹uÀ»„ÀMC.crßmˆçý“@…÷3žjåºì·^œŠè$ð̸ßÅÿ|·ƒn#@¿iˆàc¡ "(ËßäŒóZZ‘+ ƒøWC‚na”ÉöÈX“Ÿºi÷> ¹¹`MÔ öI  KF?fgéPHs9ãÕAák˜WoŸ CUäðeÌ’oû\CÛ€<»Å¶Êe«Û­sv¼Rí~€ñ^Ǩü6ºÔÚQ&?Õ“ýk!¾ ܳ†þÙˆéÿÁµ˜KÇÞöBØaÔ{WQoð²òÜ‚5xŽ;y'üjò|;¹LãPˆçþ™šäí®¸Úx"§ó·äÏ­tð®n¼ÍãQ„{ygüjÄ~ºCÿПø *ÿæNõ˜ÈUFG=«Ñäð ÌŸòûýðj»ü8¹|ÄÂÿlÏøÐ;§KºÔ5Fäî¸rzWmmðþêÜý¡À¦¿ÃË—$ý¾Ø4ÇÙlA=itÐZ~=k±‡· O·D=ö}§€n-N~ÛÀ wRvKb0zV=Š“qœW ]x"êå6ý¶%ÿ€“P[|?¸·}ßn‰û„PQ{ÿ"ïý±ʵtïø÷_¥fj(bО6ÆV §´ôïø÷_¥$2íQLDrŒ©®K_´2ÆØØ0Ȭû»A(Úgýú“ÿ‹£þ/‰?çÛLÿ¿Rñt\|ͯÿ…ËâOùöÓ?ïÔŸü]ð¹|Iÿ>Úgýú“ÿ‹¢à{æhÍxü._϶™ÿ~¤ÿâèÿ…ËâOùöÓ?ïÌŸü]ß3FkÀÿárø“þ}´Ïûó'ÿGü._϶™ÿ~dÿâè¸ùš3^ÿ —ÄŸóí¦ß™?øº?árø“þ}´Ïûó'ÿEÀ÷ÌÑšð?ø\¾$ÿŸm3þüÉÿÅÑÿ —ÄŸóí¦ß™?øº.¾fŒ×ÿÂåñüûiŸ÷æOþ.ø\¾#ÿŸm3þüÉÿÅÑp=ó4f¼þ/ˆÿçÛLÿ¿2ñtÂåñüûiŸ÷æOþ.‹ï™£5àð¹|Gÿ>Úgýù“ÿ‹£þ/ˆÿçÛLÿ¿2ñt\|ͯÿ…Ëâ?ùöÓ?ïÌŸü]ð¹|Gÿ>Úgýù“ÿ‹¢à{æhÍxü._ÿ϶™ÿ~dÿã”ÂåñüûiŸ÷æOþ9EÀ÷ÌÑšð?ø\¾#ÿŸm3þüÉÿÇ(ÿ…Ëâ?ùöÓ?ïÌŸür‹ï™£5àð¹|Gÿ>Úgýù“ÿŽQÿ —Äóí¦ß™?øåß3FkÀÿárøþ}´Ïûó'ÿ£þ/ˆÿçÛLÿ¿2ñÊ.¾fŒ×ÿÂåñüûiŸ÷æOþ9Gü._ÿ϶›ÿ~dÿã”\|ͯÿ…Ëâ?ùöÓïÌŸürø\¾#ÿŸm7þüÉÿÇ(¸ùš3^ÿ —Äóí¦ÿß™?øåð¹|Gÿ>Úgýù“ÿŽQp=ó4f¼þ/ˆÿçÛLÿ¿2ñÊ?árøþ}´Ïûó'ÿ¢à{æhÍxü._ÿ϶™ÿ~dÿã”ÂåñüûiŸ÷æOþ9EÀ÷ÌÑšð?ø\¾#ÿŸm3þüÉÿÇ(ÿ…Ëâ?ùöÓ?ïÌŸür‹ï™£5àð¹|Gÿ>Úgýù“ÿŽQÿ —Äóí¦ß™?øº.¾fŒ×ÿÂåñüûiŸ÷æOþ.ø\¾#ÿŸm3þüÉÿÅÑp=ó4f¼þ/ˆÿçÛLÿ¿2ñtÂåñüûiŸ÷æOþ.‹ï™£5àð¹|Gÿ>Úgýù“ÿ‹£þ/ˆÿçÛLÿ¿2ñt\|ͯÿ…Ëâ?ùöÓ?ïÌŸü]ð¹|Iÿ>Úgýù“ÿ‹¢à{æhÍxü._϶™ÿ~dÿâèÿ…ËâOùöÓ?ïÌŸü]ß3FkÀÿárø“þ}´Ïûó'ÿGü._϶™ÿ~dÿâè¸ùš3^ÿ —ÄŸóí¦ß™?øº?árø“þ}´Ïûó'ÿEÀ÷ÌÑšð?ø\¾$ÿŸm3þüÉÿÅÑÿ —ÄŸóí¦ß©?øº.¾fŒ×ÿÂåñ'üûiŸ÷êOþ.ø\¾$ÿŸm3þýIÿÅÑp=ó4f¼þ/‰?çÛLÿ¿RñtÂåñ'üûiŸ÷êOþ.‹ï™£5àð¹|Iÿ>Úgýú“ÿ‹£þ7‰?ç×Lÿ¿2ñt\|¢¼ÃÁŸ¶õ(ôÍVÚ;{‰Ž"–"v3tƒ’§5éÊÛ†i€´QERú_*5n²õs‹fúPÊ#Ë#Hä³¹,Ä÷'­74”TŒ\Õ©,gŠÊ;¶ å?LG¡"«Â‹,ñÆî¨¬À31À½n5æŸs5Í¿™",‰å†r¢1·¡t6ßNšê0ÑÉæÎØÚL;cÐU:Ô°Ž(m ñÝZ­ãä6P<±Ó zÖ|MSŸ:!: ¢B Ÿ\Š:€Å ìFYŽÍ^›Kš'… ±… °ùö8ÏçUUÃ^+ÀÜo7>B}I­J4‚yź^³gxþñÖ˜£±žK×´‰Å‰Ú1ß8¤’˜`”+3ùiÉÎsŽxéZW7¶ÆÊK¨ä_µÜƱºÊÿxãüöªË4COÓ“ÌMÉpY†á•ê}(“iW¤¾ L}b|²ýF6}>[h‹Ë-¸`1yŸ8ϵY¾Ô¢Yî’Ö /Êó‰ nÝ…>v†K)MåÍœò„ýÓÄxOlûRèLé-eìûФɂxϯ"é× y%²„/ßmß*\ÕÖÔ"Š-9;YpŠCùóÅ+ÜÛËw©@Ó¢-ÆÝ’ç+;ŸJ¡sc5¬K+4RDN‘>åÏ¥%Åů“æ(>pÊm9ü>¼Õ‰Œ6šL¶¢â)å™Ã(îUßð«·¥²\ʬVUˆ+Û•äoÛŒdPyÒ®EïÙKB$ù™,vã늂âßìûÒ-åÝŸõ2nÇ׊؆îÔ-æ{ˆrlö¹wÝž†ª_µ_Û!m?io˜YžÃ“š«5Œ±4H¡å‘ã2"S=¸¥ŽÂY,^tYÒ_,ƨIg>µzÖ÷Ͼ»vš†Vï”ÆÛGB¤SEÔvö’­½ÙÏÛ_ Ë’}Ee¤RÊÅcŠGaÔ*’GåJ°Í#”HdfUP’>¢µÄ–ÇQ¾•.#Jùyœ¢7ò4·7‘ 5G†á:DZ‘ðXޏ=èɘ#9†MªpͰàsRZÛŸ4—òÒ(˳mÏá[ ¨Fm"’9­Ë,[]&™”“Ž~^‡>µšÑ´ :=Ûçþ¿ýzªÐÏ’ QOñ2?:’KGO$G¾V–1&ÕŒäÖµn¯c’]A>Ò[,oÇozu¤‰,Ј¦@˧•,î:úP*[ÊÓˆJùn{Kòcëš}Õœ–ŠŽÏÇ&v¼M¹N:óW®<›–°¶žö't æÎ  n=M:[qu}ms[5ª68¤ÜBõ$ýq@¥°š6‰<Žè•#'f}i.l¤†ö[hVIŒxåP“ÈÏAZ?n‘αݥ´¦ãxg} ŸéJf¶}Fúd¹ŒHvùe¦1£ ò:Ð\6sÜG;F„˜q¹0wú Tkï»d¶Ó†Ú„àûúVÔ—0Éw¨¤WqDÒ¬{%ó0¹~j‹LxaVfºÎüûî ©_QýïÆ€3líšòéa 9%ˆÎÐ;ÔmŠžg—'”OË!BükM ‹Q¼B)Š";‚rqøU›ëèžÚf‚[vŽHÂìi›xú'@h¦'“6à¾L›ŠîaÎ=~žôy3¼Ó ž_÷ö¿ŸJÕYâþÊûÚ£ûAˆû†Î|½Õ,3ZÅ`È·1”kb ¼ä¶ütØx0F0·8‚R‡£ÎãM1J²yf)‡¢;¿*Ú†ù­]* ²Ã3?øþ´–³‰ït‚eJćvXpqšaÐÉ[y>Ó2£Äd`¿:y8Ï4³[²^Ko¼…¨Ú¹'´¦¸Ha·Ž{´¸•n„›‘÷ìAê¥>‹hïµóáÝ1 žaU#®7”€ÆÈdòÄndþàS»ò©­­$¸¼[fÌMÉbê~PrEh-ãYŸÌ³¹ØÍç¬=Ÿ®‰Ä6°^ÜÃ3KæârÛ»|Ü÷ãùPap,Þïh)-Á`Nªæ®[̃I½¤˜Ç±Krp{  Ypyú;Ã4há•ôfBçH#”Æd9Œup§hük ¿”C-ášé OÔ·ß–ÝŽÞßZŠÞî-fûdio;$·-Ë6?»Þ lßg‚T,í)`!ãýé¢Þo>8^6ä`ª$R½N+RÆæM3t±¦Ç”°,ÐsŒúTfñZÒÑæŸ|‘Ýî9l°OçŠ}@¡qm5¬¦9P©€H 6;Œõ¨ÑFÛ3·¢©'ô«z©ÍÛIö¸çØ” &íƒÐŽÔi3¤3ÎÆUCöw Kcž1zH ío:«3A*…ûÄÆ@_JjE,€˜âw Ôª’×· ­%˜–íJf†“Þþõ…Â}ŽÌ%ìvþC–™¶—ÏãÅ02cŠYsåE$˜ë±Kcò¥XfhÌ‹ Œƒ«$Ƶí.a“í*ÓÅ ³ÌÎ11ŽE÷¸ö§é“Z[Å [¨ÀËy‚YŠ‘é„èiŽðlµ†}ùóIvŒ^ôÇŠXÙU⑾èe#?LÖ­­Õ´1i¦GLFònÉL“‚E%¼,užâò;¨áV”²K¿túsÛÚ˜®,ä†ííãÝ; ¶!àþ§YXKw8B’$|æM‡ŽÕfÞäÜX΋v–×/7˜Ìï³p#¦jì7QùÖòhB°ÅI#2cssÈþ´ºÅÅ´—€DŠX³g‡­A<²*F¥ŽêÖ›*GÚÉ PÖÌ3c$öõYãC‹:38$ªŸ™1ëLòdûAƒ1R=1Ö® 9vó#nõ* 'Qxr~ð zÐ1±$ùÎ=°¼~”žàdO Á&Æ9ô#½Y[8Ô>pŒFvîûé\Â;[ô«D²Ì]QYF ‘ïê}è2âÜÄ¢D}ñž¤¶³2 wrªzzšžèì±eqµŽÿ{4å~žªIÀ^OÝ#¿õ f±òдn[o%OZ§šÕ… ´2H89/ݾ¾ý«&€>ƒøSròx.͉ØÒ(Ϧó]÷jó„§þ);úé'þ„kÒݪ埦'Ö±ƒÁ¼\ÿß^%šö_Œ‡þ$–¿õö¿ú׌擹©­`k«˜àC‚ǯ îj Õí:êÞÒ;‰$åeØ‘ò2^GJ@Gukö[¡ Ê JO|T—ve·ŽuŸÌGm¸hÌgò=EIssgykl¼Û´M°¯/„õÏ¥wP=m–éîäó7  íéÏ4š·ch·,ï,‚;x€2>yéŽ*ºÙlÐýžÝ³ŸÞ4yqŸCšµ¤ù†à¤7b +&àÿZb,CÅtñ\$† 8e=óíô¤["m ™¥ g—ËEÛž:nëV~Ûk²e…@¶eÙ.ç©¢º»ïí„$ý–ßhRAè$ãüô¤†ÅM5L÷qÉt#Kln,œþ§.ï"l¸Fã2 Bžƒ¯Ë×<Ô‹¨ÛÇs©J6¸˜-] õãUÒùînQæºû(qŠ2Bû`v¡Èí"žú+x.Ä‹'ü´òÈÇ^ÄûSb´2­Ùöe$ü¹ÝÉ÷ã¥_{ûOí;9¼Íæ0|éü²»Î8ã­3û]æ‚ú+™Ë+¡Ÿ_Aôë@&ž‚å¹»K4e¡bG©ô¥K•õ/±<níànzö§¼Ö7Ð[ý¢w‚XPFq`Àzc¥?ûJ¿šo™#Æ(² $öéøÓ]*k›™á,#0ýã·9=‡ãMŠÊcÕÅèdb y%¹CVàÖÏk惮LïŒï;pZßÅ› ¨YØŸÜÈ$ãµ (ÙÚ¥Õé‹Í& Í ùG|©¯gr¶ÆçÉaåYˆÎ;q×ô«Cm¶™u2Éæ5ÌžR>Ý»—«vÍÜZI¦å”O: X±VObݦj:\¶ŽÏnm€9 þu[ì7fûH…Œ8ݸÓ×Í^ŸP¶{‹öY Y Ÿ)å±ô§Å{a£ÙšÜ¡O$î.{–¤§^4+0·ccisžœg4Ë‹K›M¿hˆÇ»¦H þUu5"»Óæu†˜ ãúÑpézðYÛψòäª[˜öûûñš`Cý#Ámä«Éq2™ d±çüi±XJ5­nc‘ äáHÉ=NÕi¯¡¥Û3mˆ@ÐG€OL8üi-ï­Ò]-žBÂC´ü¹vçð¤HôëÉâ2Ãæa[ˆ]G  õ?\gëKýŸq-ÔðÛE$‚&*r@ÇÔôÍ^šúÈGE*[¥— @ª?ME-ÝÜw6òNЫ\VO,°aèGZ©kj²ý¥æ,©ÛHÎî€P4ëß)$û;írž2síÖ¦œ-¦‘Hw‰ „ãAÓ~µdßYi.£ç¾ü`1œ¯áº{Ðk6Kkä™ NólÁaŒb¢¼±k(àf•$2ƒÂr=ûÔ—RÚ.š–Ö÷f󌄘ÊàcÞ™$ÖóZéð4…D{„¤)ùA?­@±ÆmÞFUÁÂÅ´’Þùè*[[A:—rBgô£ì)gs‰ Î[nC÷r9ôÔÖ.’[yY!—°88Îh—O‰”ùyVíÏJÞÙ§˜¡ùBýãZ»R\³;œŸçT¬§Ss.xóF—ë@û=£(H3€kwü1UÙÖçÉêIàûVšÇ7–‘•L.ÜDZÞÕR[„Š89TùIøÐ¢ÒÕl²Œ±-ŒZ­soäe9ºgµ]žÛí²(Ê`gŸQPê2©Aläãµ.†æ?i®§n¢ ÿÀ…}Sg&øT×Êz9ÿ‰Ý‡ý|Çÿ¡ ú£NÿuúSB.ÑEÀ+/XÿfúV¥eëñìßJù>ŒÑWSGÕd¶)¥j]âUµ¡_\ã÷©K4f¯&záÏ–«²×ígsŽc㑌óÏCThÍ¢Ÿ 2ÜJ±A’ÊÜ*F…˜ýäÐ3Ngv ™¶Œ œàz Xâ–gÙ RJø'lhXà “è4û‹Yí|¯=6y±¬©ó•=§Z‡4fŠ(Í¢ŸRÏ*Å RK#}Ô 1úÍ34fž‘K";ÇޱÎÊ„„ÆIì2@çÖ™@hÍY¿±›M½–Òão›Ãm93Ö«Pš’倱‰ö–R¤àt5Qš( 4fŠ(©%žY„bGÜ#]ª0áQÑ@jH§–Æ'ÚYJ7ä£šŽŠ*Hg–Æ'ÚYJ“ÐÔtPFh¢€ Ñš(  y^ágÌq’Up8ÏZ4Q@hÍPš’ä·™e‰¶È½ÇçQÑ@ I$“ÔÒfŠ(ÍHÓÊðÇ >cŒ’«ÆzÔtPW[W¿d*n2¤`-z~UJŠ’yå¹”Ë3ïs€NþUh¢€ Ñš(  mîfµÉìr1œÇãO¸¾¹» '—x^GÊ?!Uè 4fŠ(Í¢Š3R$òÇ‘£á$8ÀçfŒÑE£4Q@jqyph”ãè3ùÔPI'$äžõ4wSD»QÈ„üê(ÒHò¶çbÇÞ–9¤„æ6+L¢€$–âY±æ9 vè*<ÑE{×ÂOùàÿ®’èF½$ýÚóo„Ÿò)Áÿ]$ÿÐzIûµB<ã'ü-¿ëíô¯¯gøÉÿ Koúû_ýëÇìì®uÈí-"óg”áp\ñž¤Ú“ +FMîÞh’êK+u“8‘ï"uçc1ƒŽµΞֺu•ãH¬·aÈP>îÖÛÉ¥q”è¤7BÒ–€ :ÔëgpÖ/z±fÙ$³†+Hg<àóŒqRC¦Ï,PO#Com;:$óÈ Q’;žàgÉÅT¢°€~´o\¸`py ¢“ ’22:ÒÐEMöK±}·Ê?fó|Ÿ3pûøÎ1œôöÅÚÏkÏÄ<Ș°;—%sÁãzÐ4U½>Áµ»d•T[[´ç#;€ `~uOrç†}3@ EPŒŽÈ¨ÎÅWî©< íM¢Š(¢Š)É#ÆáãvFNüi´PEPŒŽQP»_º¤ð>‚›Eã#²*3±UûªOè;Sh¢€ (¢€Y•ƒ+`r8"†ff,ÌY‰É$äšJ(¢Š(¢Š(Þcù~^öÙœíÏõÅ6Š(¥Ve`ÊÅX‚¤¢€™™‹3brI9&²DÛ¢‘ãlc(Ä~Ê(f»ºo½s9ãÈÇΡ¢Š(¢Š*Tº¹‰Gq2(è«!~¬ììY˜³I'$ÒQEQEQE9¤wÆ÷fÚ07àz mPEPJ  GqIE9ä’O¾ìØõ9¦ÑE<Í)]¦G+é¸â™Eõ–DYG 8¦fŠ(îÿ!»úøÿBõV›ÿëô¯•tù X×Äú¯ª´ßø÷_¥4"íQL²õøöo¥jV^±ÿÍô “ëª×g±M?IIVûí'L‹aŠáV?âÆT¡'ß‘X±è:ÄÑ$±i7Ϩeu·rAŠš]Ä3lót½NMŠ7[Èv¨èj—ª·õÔk{ÿ] Ø­¢„N¶ð"<<$a¹ŽÒXã©÷§Ï§i–±MlÒE>ž%Þšz»4Œ¹Ü'ß‘µ»c c½a®—ât•%K]dDòÑÄ2«Œm v§G§øªG´ŠÓYKgÎèV9B6zåqƒI«ßúïþa-ýt_äaÔöwRØÞÁw İȲ)÷5oþÝoþ€Ú‡þ¿øQÿî·ÿ@mCÿ_ü*“³¸5s ÔmãÑíõMZÜm‹TQ²IóÉÿ|“ñ©,ô½=ïâg¶1è©r±¥¸“|œeŒyÎ 8'œwÅ`>‹â)aŠ4ÍQâ‹>Z4Lœœ q“NO‰Vh¦~¬%ˆÄ2n@:qÀ6þ¾OüîoúÕ‘¬"Òõk¹,lì×í—,šÁºdmà¢våASƒÉ©õ-/M¶³¹Ô`¶€ÛÛZ5ùA tMÿ]¤¾zæ±dÓüU5â^Kg¬Ét˜Û3E)uÇL62*#¢øˆÀ`:f¨a/æü‰6–é»ëïE¿¯ë×òëúû¿3"·|øK´ýÙÆæÎ?Üj©ÿî·ÿ@mCÿ_ü*HtOÛʲÁ¥êqH¿uÒÞE#è@¦&;Ò_C×EŒ7Ñ?ÙSs\N’ yÉÐ*/5sÄPèÚz_X-«~í쮚z¡S‘‡3ï%à õøÆ+4?D’$z^¦‹"íu[yaœàñÈÈð©›OñSÙ '´ÖZÔt€Ç)AÿÆ(cGA©Gåj>&¼0\Ï [ù~}ºÌ[© ÀŽxæ¹ßÚÃowhñÛ­¬—‘Í5º Üç áÈã¶kBÏþ«;+¸SNÖ|ù„J“ªJ%BxgúŠÊ—CñÄ­,ÚV§$ŽrÎöòO¹"•€Ê¢´¿áÖÿè ¨à+ÿ…ðŽëôÔ?ðÿ˜´V—ü#ºßýµüð£þÝoþ€Ú‡þ¿øPm¥ÿî·ÿ@mCÿ_ü(ÿ„w[ÿ 6¡ÿ€¯þ›EiÂ;­ÿÐPÿÀWÿ ?áÖÿè ¨à+ÿ…fÑZ_ðŽëôÔ?ðÿÂøGu¿újø ÿá@´V—ü#ºßýµüð£þÝoþ€Ú‡þ¿øPm¥ÿî·ÿ@mCÿ_ü(ÿ„w[ÿ 6¡ÿ€¯þ›EiÂ;­ÿÐPÿÀWÿ ?áÖÿè ¨à+ÿ…fÑZ_ðŽëôÔ?ðÿÂøGu¿újø ÿá@´V—ü#ºßýµüð£þÝoþ€Ú‡þ¿øPm¥ÿî·ÿ@mCÿ_ü(ÿ„w[ÿ 6¡ÿ€¯þ›EiÂ;­ÿÐPÿÀWÿ ?áÖÿè ¨à+ÿ…fÑZ_ðŽëôÔ?ðÿÂøGu¿újø ÿá@´V—ü#ºßýµüð£þÝoþ€Ú‡þ¿øPm¥ÿî·ÿ@mCÿ_ü(ÿ„w[ÿ 6¡ÿ€¯þ›EiÂ;­ÿÐPÿÀWÿ ?áÖÿè ¨à+ÿ…fÑZ_ðŽëôÔ?ðÿÂøGu¿újø ÿá@´V—ü#ºßýµüð£þÝoþ€Ú‡þ¿øPm¥ÿî·ÿ@mCÿ_ü(ÿ„w[ÿ 6¡ÿ€¯þ›EiÂ;­ÿÐPÿÀWÿ ?áÖÿè ¨à+ÿ…fÑZ_ðŽëôÔ?ðÿÂøGu¿újø ÿá@´V—ü#ºßýµüð£þÝoþ€Ú‡þ¿øPm¥ÿî·ÿ@mCÿ_ü(ÿ„w[ÿ 6¡ÿ€¯þ›EiÂ;­ÿÐPÿÀWÿ ?áÖÿè ¨à+ÿ…fÑZ_ðŽëôÔ?ðÿÂøGu¿újø ÿá@´V—ü#ºßýµüð£þÝoþ€Ú‡þ¿øP´|#ÿ‘Núé'þ„kÒOݯ:øWo=§†£‚æ!™d}ÑÈ¥Xdç}«ÑOݪä?ä mÿ_kÿ =y¯ƒH-ÓÉ›_‘«Õ>)é×zµŒ&k™oHû¹<“Ž€×œ¶ñýeÿ¿‘ÿñT˜t"ðõͭω¬Í¶ ž]ÞT’>ïÝ·]ìߥhé lðøb[ n†æ<±D¹b€’%HÈÅSÿ…mâÿúËÿ#ÿâ¨ÿ…mâÿúËÿ#ÿâ©Xc|W=ËÛÚC}§êÜ#9[‹ùUäuãåQr ôëÔ×/]Wü+oÿÐ_ûùÿGü+oÿÐ_ûùÿBCl£á·]hò0 ¨Åå¦N˜ÑŸûèmÿVͬ‹‹ôí*& ½O-̇þú$}ªŸð­¼_ÿ@YïäüUð­¼_ÿ@YïäüU \KCWC”Ûø{N—O±½¼Pd7ÑZÌŠ®Û)F%vãŒ÷¨´‹ËE°³×gU)§²hY²Hvù>¸G“þø¬ÿøVÞ/ÿ ,¿÷ò?þ*øVÞ/ÿ ,¿÷ò?þ*‡«þ¿¯ò·Š _Ø´Uush®ò2ò ÈÙÿÐW=]Wü+oÿÐ_ûùÿGü+oÿÐ_ûùÿB@GcqomàyâÆ+Å:$wP•×(ÀÖ圖³\i’Gj!˜èïö8a— $ó›î4›¾lnÆsíÚ±ÿá[x¿þ€²ÿßÈÿøª?á[x¿þ€²ÿßÈÿøª}ÿ®–§õçsFI'»¿½·šÂîÞøé'ú[«MpwáW'Ž™À«p®¤JYÕ¿á:j¡&<‘òŸgÎ1ß8¬?øVÞ/ÿ ,¿÷ò?þ*­ßxÆ—æÜË¡°ò Hlˆ2ª03óu©kOëÏüÁ=¯/ò8£×Š+ªÿ…mâÿúËÿ#ÿâ¨ÿ…mâÿúËÿ#ÿâ©ÊÑ]Wü+oÿÐ_ûùÿGü+oÿÐ_ûùÿ@­Õ¶ñýeÿ¿‘ÿñT¶ñýeÿ¿‘ÿñTÊÑ]Wü+oÿÐ_ûùÿGü+oÿÐ_ûùÿ@­Õ¶ñýeÿ¿‘ÿñT¶ñýeÿ¿‘ÿñTÊÑ]Wü+oÿÐ_ûùÿGü+oÿÐ_ûùÿ@­Õ¶ñýeÿ¿‘ÿñT¶ñýeÿ¿‘ÿñTÊÑ]Wü+oÿÐ_ûùÿGü+oÿÐ_ûùÿ@­Õ¶ñýeÿ¿‘ÿñT¶ñýeÿ¿‘ÿñTÊÑ]Wü+oÿÐ_ûùÿGü+oÿÐ_ûùÿ@­Õ¶ñýeÿ¿‘ÿñT¶ñýeÿ¿‘ÿñTÊÑ]Wü+oÿÐ_ûùÿGü+oÿÐ_ûùÿ@­Õ¶ñýeÿ¿‘ÿñT¶ñýeÿ¿‘ÿñTÊÑ]Wü+oÿÐ_ûùÿGü+oÿÐ_ûùÿ@­Õ¶ñýeÿ¿‘ÿñT¶ñýeÿ¿‘ÿñTÊÑ]Wü+oÿÐ_ûùÿGü+oÿÐ_ûùÿ@­Õ¶ñýeÿ¿‘ÿñT¶ñýeÿ¿‘ÿñTÊÑ]Wü+oÿÐ_ûùÿGü+oÿÐ_ûùÿ@­Õ¶ñýeÿ¿‘ÿñT¶ñýeÿ¿‘ÿñTÊÑ]Wü+oÿÐ_ûùÿGü+oÿÐ_ûùÿ@­Õ¶ñýeÿ¿‘ÿñT¶ñýeÿ¿‘ÿñTÊÑ]Wü+oÿÐ_ûùÿGü+oÿÐ_ûùÿ@­Õ¶ñýeÿ¿‘ÿñT¶ñýeÿ¿‘ÿñTÊÑ]Wü+oÿÐ_ûùÿGü+oÿÐ_ûùÿ@­Õ¶ñýeÿ¿‘ÿñT¶ñýeÿ¿‘ÿñTÊÑ]Wü+oÿÐ_ûùÿGü+oÿÐ_ûùÿ@:Gü†¬ëâ?ýWÕzoü{¯Ò¾w´ð‰ì/íîn´§ŠeY$c*|ª$ýêú#MÿuúSB.ÑEÀ+/XÿfúV¥eëñìßJÇð½Ô6~Ѧ¸¸ŽVÊ-Ï#…QÇrjÞ§â7L{ƽ¶lÄÒ@¦u_;8Sß>Ù¬6ÒâoxVâ oµ}’(å{}ÀY\؃É)úµ†¡;_OÓ}¾À[ªy‘·a»ƒ–Æà~RzTô)nn.¿nu+]?÷Ææâ?3…;åÝ‚Ý3ŽÂŸ«kvú5ºÍrfmÌV$,O }ç©ÅW–Æáµ-QRÙ$¶áò’€¯>”Ý^ÝOÃ÷P-¡ŽáŸjFdS¹CŒ6s3Чk“µ4¯.ÞÖÜJ» .‹‰%òÇÌÀu=ùàwñõ®#HÔ¼‰m…½šLÚV2HmæGY_)Œ$‚ÅIù€<ž+¯Ö":z,º\—Ù`ÆäU*qÔeéõ¡ÿ_x!o5©,¬îm6ûnÖiLe¢»|øü‰¢ãÄ–ÒØÄLî÷¬¢ ˆpt,zúûVCØÞŸ çßi©ÈÁÈ :'“°b 7 ž*íÆŸ|úf Ÿ>âÚx^y7uÚ>fç¯?5¿Í §ÉšÆþÜ¿k‹p“Ê#Ìߌíë×Ú¨Á¯în-¾Á}ÌQy¢Ù™8H|GñY²éwßð•e-¢Vù;ÆYv‘çuÆá¸ë·?J—L³¸þß›PYÓb’³!t&y7Hàg“ÉÝI –í¼@÷-yéš‚Ík·|DÄKäC‘œrrGU­7USµyãY¢òähäIpzƒ‚Aü ¬û k›-ÍŹ»¸w–âÜ2e‹·#,vœ.^‚áû‹+ ”kqh’LÏojX0H/uÉÀ8£¸iÞ!‡R¸HR¨¼ØŒÐ< ™²à“ÜuóK.¿mm­¶uq ¹òRHÚY‚™ 3  ¿wõ¬ Ã÷pÜ¢ÏksiÙZ+™×úÇ,v¶c\î8zŽ*mSJ»K»¸í´Ù/b¹ÓÖÕ%–u;3ä¹vÜGÌ@'Š;]ÿõØ×ºñ¶Ÿ9Kéb†#p Y|õ“ü¾q³Óöõ­#wp€LqÎ>sŒñëÀ'Šäÿ²5+;‘r¶Ív`½ŽP«"†•E¸Œ‘¸Ùà‘Òµõˆnæ]6òÞÕ¥’ÖàLöáÔ1H¹½qÅ1gÖtëTW¸Ô­bVfEi'UÁ'¨<|º¥¤3Å—Ð$ó ÅLIôÉü+Ót‹Ï´ÚËug±1zdGdb¾l¡”隯e¥ê¶CKû=œér¶ðÃví$M "ç ŒîÜ2pWZ]tk®ZEem=õí¥©¸PÊéJ“þËq»ê*c«X‹Ñdu qtzAç.óÆ~îs^~’hºkZ]A·wZBZÇš?27IËX}Üò+ ›F¼‘/˜[#ßZÍܹڂ ǯÚÔúÿ]ÄΉuW¼k5¼…®nhD ¸¥sš¦5ûiu¸tËkˆgvISÁŒEvð@õÏJ°ðýäZ©?mÛÌóÅ:4WÏ»¯npØÇ#ޏÅK¢é·Ö÷ÚRM¦ý,-dç…e'n àîçi<Ö’ón¾±³\›Û«kh¡F${•%Aç8ÚyééÍ2éÖ×6Ëy­Ú3Ã1•Dm‚£³É;†1ïYri7®ƒ0IgÜY~à·ÙœgûÜc­Ai¦êmí­Âií4qËv†(ä@Q$”27$ `tëÏJOë 3¥]FÕïÍo!k¥š(.©\曫eqs%´7öòOL‘$ÊY1× Šåì4 ȵB.~Û¶;‰çŠth<¯Ÿv3Ç›œ61Èã®1Y61¾¯zEœq$–º\öÏq Èñ³±@T’3‚~`^(S¼McO’ÖK¤Ô­šÞ#‰%©D>„ç¬AuÔ =¼ë,N2²Fû•‡±k‹C¼’ÊwkkÑròZ«%ÃÛí)‰_(€3דÅtöwOq=äFÜÄ–òùhäÿ¬ùA$ qÉÇ~”ÄG§kvú¥ÅÜ6ÆoôfUft*#?.y#޵ý´šµÞ›-Ä0ÜC*Çm0ß.Q[!zÿ;ô¢ÊÒxuÍRåÓOåym‘ómR«ÿJ¿¸½ÔíãÓ²——PÊ—¥Ð,jª™8Îì‚§wëIn6t‹«X´Óº…¹–LÈ&]ÑÔ°Ï$µÍ´—6ú…¼°G÷åŽee_©¹ ý'^Ô.n{y™„q!ÝÄCŒ L|üñÝêö¥¡ÞMss$ÈÈa´>Y`͌̇ðÀÉâ€fÖ—­Å«Oz¶ÒG$6ò*,ÑJdʆÎGñøU‹ZÆÎt‚ëP·‚WXå™U˜{y¬M6KËMNy$Òä€j7c΄ƫ,vW{Òkš=ÕôºÁŽÜH'ÓÒrËÌœã“ÇUäÑý~¿¯¼Ý‡T³¹¶{˜/ –Ý3¾T˜2®:äƒQkN[5¼mNÔZ³m™×a>›³ŒÖþ‰w,º›CnŒ’=¬©`o,å”úd9ã¥6-&ú}V;÷±ûí|ôLµn->úÛS½ò…´–7²y’3HË$g`R C}ÑÜb“xšÞëY·µ²-4- Ò;\nÙ·€rzf®èú£jÖóÊö¯lÑNИä`[ŒrqÀ<ôæ³t­Rµ½Ó…É´6Ú}»ÁÄí¾@v€J•Â𾦮ÚXßXÅyä›v’{Ö™w–ÀF#9ÀûØÛ8§§õëþBþ¿µÔzÔ67V wg‘*ÎŽÎrË”î}ñOºÕà°»¸W°ÅnUbvp]ŠŽ™ÎH3Ul¬µXµ«›Ë¨,åóY•&ûKîŽ/áPž^b~nOÐ ÆÔaÕ/$½˜Y“p«gÄn#irÍ·#%#æÅ%Ðo©ÑéfÌÝ}¤ìyELN$ßýݘݞøÅ[±¾·ÔmEÍ«—ˆ’¹d*AÀAë—½Óõ I¿¶æXš÷íK ·%–=¢2˜%P¶pIÝ·ÐUßjE qh±E;\\MrŒÒågA'‘ž;SBeÓ«\I¯K§AolÉF‘ä¹*ølŸ•àQL‹[‘¼Dt™-áÎÖpÐÜot2&ѳ9ã“QêZU棩ۿ‘c0Î’­ÐbgÂà•nyÝÐô§µ†£w­ÚÝ]%œPÚ3´m ³I `T•G9#')!±ÖºúK&¥ö‹Y­b±ÚY¤fR ݵr@ãëô§^k‘Gi<öok0€¨•çœÃ‚2>}¤wQHÚ}ìWz½Í»Aæ]$b0œ)U#-ǽTÓtGA°{=lîmÃîŒ\Hc8#æjâä{qŠ’]zïû^<“ –U¸¹hÊúcÛ³Û§oZKï]iÐØÉ=„ ×!Bnÿz ¢íùÈÏ<ŠH´„Ѭ4ö–±Ý îÈ]»ËìQèhì*}vÇQÕ-ä°…,ŬÊM+·™Ï%T. ôäsO¯ÌE[Rm:;q+,×cW“ËMÄó6:ÇœS´½GûKL[¿+Ê$²”ݸ¬Tà÷â«ëºdÚ½²D–ó¬2‡’Þä‘Ãaˆ¡ ô<Š‹Jðô¶–æîÞÚK¸ ùN«»ÈRÄ„F<àSѱ[OñU½î…ç´ñÃz¶†áÄH`rG2ƒ×i5~Ã[ŽóRº°1H$‚‡Xœ£‚ŠÙÝ«÷ºšÃ_ ê³éqYܽ”bÖÆ[h R3yŒë·seFÑŽÃ?¥léöÖ¥ÓbÝìîYdfÞÂDa¦íÁ(9ÈúUiqU²Îß6<™’ >Söݣ§}ËÏNj¼A¦MzÖ‰pÂPΟ4NªY~ð FÒFCÚ³¯t]FKë‘nmM¥ÕÜ.Ò;+¡Œ¦@Hl„ÇZzhWJ– ´ aÔ'º`IÁGó0:uùÆ]?¯/ø#-¦»mvÖ†Ò|G4Þ^f·‘|ÀQ˜l$~îsÈÀúQ‰t™ZP—MˆãyK˜\!EûÅ[`=‰¬›oj 4>cA¤S‰Ö;‡”F<·S°²‚2Y~^ƒ›i§êzŒcNû8Hmtɬã¸x¥ˆ9m¡r8^vîô_€_‰ÕÅâ.kiîË"@KÆËŸ»ò°ç¶=¨ÿ„ƒLûÚþÐÞ_™äíòŸÌßýݘݞøÇJÍÕ<7q¨K;¬Ñ¦è-Ö?”ï‰Ù¹+‚È"’=î ¹‚+x¯âº3”’îYÒ\¦Îdq¸CŒ ©jË[{½ûR/Bœ#¼O´*eûÝ#­Xÿ„ƒNKų’à‰÷*ä¾Íì~6‚r0 Ï5R-ðøgQ±˜À·W†á†Ç%ÈI$qž¸¦K Ý<7¨$‡3ÝÛΙ'…ŒGœñ×ä8ü)­þàÿƒÿ³iâKIíîæ¸Y-ÖÖY#vxßaÚånœt<â¦ÿ„ƒLû»ûCÄžVÓù›ÿ»³·{c5•7‡õ ´ë½<½ºÂnÕ¼«+«–2ù›X6÷VÏz‚ãL¸Òí-ïÒØ È®üæf¸»æ2œ¶ÒãŽûH–Ú©´Þ$Ò’Ò+“pþ\¥•@‚BùS†ù6îï‘ÅL5«»‚Ù&i%ž5‘<¨×cg X8=H®b×@Ôní-/Ú!Îû’öíu5¿Ë$›‡Îƒpè8#¿8"µWLºÒVææÂ‹&Ÿöá™þt.q“‚Wæç=zQê/CSU¿m3N–éme¹dRDqã'ŒòO{Ô7šœ‘xbmR$Q"Ú…Fä³p¦jÕä]i“Û‚¢YadÉè üª¤úl³x^M,: šÌÁ»'ní›sëŒÑÑÿ]Ê[¯ë°–ž °ºµ’T’RТ´‘ýž@à„&ÝÄÄMi)S‰eß´%¼ŒÃaÃnP¹\dg VlÚ.µtdºi­­îD1À‘Á;€È­¹³&ÐÊOLÅ;Gðõå•äw´ ´–A;ÊG˜P¹€-÷NI¦É["Þ±âk-?M’hgÎÖÍ<*‘¼€Œ|¬ÛG OsŠ×‚C%´R¶d qô®PxoUµÓÚÕ¬äk9,§ódeT0 ¤)Èùk¡ÓþÙ¶æ˜Ñ#‰„p0.¡$óýìút¤úØ;]¿à”‡‹ôB»…ÌØÛ¿?e—”þðùy_öº{Õ»Í{L°hÖâä鿍ÎyŠƒµ}ÎfZø~êk(ÞH ƒL’ÍðN ¶ÜÇO”ÿ…Fú§ &;W´cqaœæfo¨#rà|ßxðqÐsGõùÿÀûÇý~_ðMg×ôØïþÄ× &Þ±çÊ}˜«¿rAg½95Í:M@Ø¥ÆgÜSi`2T>6–€æ²ÿá¸K[¸#–2$º¶–2ÄçlB0sÇ_þb‘4=B)"€µ»XÛ]½â:–ó\’Ì®09n¹ä”iý|…­Ž‚æconòˆd˜¨ÈŽ!–oaXÉâ9&Òô눬GÚoä1Ç “mU#q;œÙO@kWO{©tëy/cHîš52¢tV#95’š=Ì^‡Mk]>îUc¹n²bbs§$dqÇÖ‡ Ð˯´"jKmn3Ç*Ot#!ÔUNÓ¼’:f¶ÜqØ}²|ÃÌpüÉÍcG£^éº ZVŸÂq3\ƒs’T‚2OËÇnjc¢ÜK¦Ã¥ËtVÖ¡ 4Dy¬èyÜÛÂú÷£¸ž·{¨ési¥þùn/&iÂm üLpp}€=jXõÁ/†Yälå0–î¹ÈÝé‘Ö³ƒ«Á¥ÜZÃx·&âñ¥—ΗÊ-ä¨d‚xϸÅjÜXÜ]øjâÀÃmm4–ï G…£L‚ ã§jÚZß_ëR¸ñ›g{{okæÚZ[´/™€ò’‹Ç8è[±ãžq&¬Ü\êa¼²ŽÞf·bŸÍR¹Ç9U óéøÕ/øGn­´ûÍ:ÆXVÊêÑÓÉv8†R¸Êq÷NrGcÈëU­4MCH3_ZXiö²ÇhÑ¥µ›3-Äœm/ò àƒïÉæž—þ¼Ä¯eývÿ‚t:­ûišt·Kk-Ë"’#^Wý®žõ[AÒf´¼t˜1[;e¶‰Ê•Wf;äeÏl•ðKkáû¨m¬£y & 2K7Á8.ÛpG>Sþ=?¯_øx-¯ëúF…爴½>@—,¹eܱ;ª¡8 YAw5bÃS´ÔÖCk#1‰¶º¼m)ÆFU€=+O^=Ôd¥Òâ³RXãzîÉ™®›_ŠI¼;©E4’=¬Š¨£%‰S€z—ðßúØ¥ñX³í¼‚ß÷¨p›âØaŒœøÏ8ªvZýŽ¡ªÜiö­$’@›ÞM¸Cɾíǽ6ØÇÒbšÂW¸ò0³ù ˆ0£!˜ò¹é8&5žsù'ODm;KyŒqž™Çj¶½ëz›å¿¡6‘ÿ!ïúíÿ²­t'î×?¤ÿÈBóþ»A]û´†r:¸Ï‰4CéyŸü…%\KùîSøÒê>†­õߨ­qo=à  ¹˜Ÿåõ< É&/áý?RK<Í|ëP@Û8ËãÁç¼Ã*Gµr ¢jð†éZ|–bc«]ÙùŠ ˆ ;Cgvž£8Æhÿ€½¦¾g}5ü?d{ Sª¿˜¹À#inÎáÆÏ©´=Yõ‹9g’Ñ­^9Þ¸b6œsŽþÕ‡§xjæ[iQÞãK·[Áskn®’´/;²OÍ–œTšRßø{÷^mÔš†¨êÙw1“å^àdŽ? kúüöþ¼Î®²5wì­•ˆ²žAs*Äg#liHäýãÇAø‘Zõ“­Ù\]Ϥ´ï_,²rÔ Ã<õ䎔–èofG¯x†=cT·k™Ø©hÕ¶„BÁw1ì2p=:[Öµ= 4©¥ÛÜ@]cˆý°¬’3` åžr}}ê—ˆ<3wuôö7÷&k©"fƒm²ã— ÆzýkJæÂêç^ÒÚ@ÒZYÄò4¬Wæ›W wÁcÀÅ  1ú~¡rúÅîx:*OßùæÜ`úÀŒ÷È­jÁ´ÿKñýÌ|Åkj–¬ÝŒ…‹‘ø ¿oQÑP¢Š(¢Š(‚!b g“ùVF—¯®¢ú›i-šY2‚g8b¥wn+ü«§\\éÉ`,mZ dFóØímþ·<àóÒµ4Ë+‹}oY¸–=±\ËDÙp€~œŽõZ^¢»5¨¢ŠC (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€1—Ä0ÿÂTúÂÊÂ"M»†c’Sààg¯¯¥%ˆà¾Öõ=!`–HÍœ‰H`;®j…Þ{{¬\# iÚh%±œpȘ$Î9`sØÔ؆Ÿ3.–B‘¥4 pÌ9Ÿ~ì‘×$’sŠ?¯Âÿðܲ×4íA¦X'`ð¨yXž&U=ðàq×¥AŠtk—eŠì±´»šUd_¼ÊÅpÀ{f¹Ø4 Bæ]DÏå¢Ï¦5±–öðN|ÂsC/åô¨g’÷SÔ-lž!ž-*æ0©µllî.-R{³¦ŽÉo0Î?>žõ핾%Ò®Ò<ÁS¬‘ò– Ž:ž†®ÚËs|%¼½Û¶õãeçüû/ýýy—Ÿóì¿÷ôW¾>¹e'ì1ø§\‚3cýöh°ó/?çÙï訥†Y§†i,ci $ÆÆAò’0Hü+”ÿ„òè‚EŒ_÷Ù¤ÿ„öçÙDûæ€;2óþ}—þþŠ<ËÏùö_ûú+‹oˆ*úGÓç<ÕY>&]ÆÄ..?é©ÿ ï¼ËÏùö_ûú(ó/?çÙïè®&ˆwG¿ìmæ¦<¸'þ<¢éýã@‡™yÿ>ËÿEeçüû/ýýÇÜgb‹?ïxñÍÆ?ãÎ/ûèÐ]æ^ϲÿßÑG™yÿ>ËÿEq­ãë•81ø§\’Тÿ¾uþeçüû/ýýy—Ÿóì¿÷ôW Þ;¹PØ¢çý³@ñÝÇ{8GüÐ_æ^ϲÿßÑG™yÿ>ËÿEqwgr,¢£šm·Ä Û“…Ó"öÐÿ…vÞeçüû/ýýy—Ÿóì¿÷ôW>ž'»* [B¹÷&¡ŸÆœ h˜ýH ›Ì¼ÿŸeÿ¿¢2óþ}—þþŠå¿á3¹ïiæiéã ™k|šé¼ËÏùö_ûú(ó/?çÙïè¬&ñ%Ò©c]3ÆÆ¢ONÀþâ sÓšè¼ËÏùö_ûú(ó/?çÙïè®RoÜDOú$Gíoü&÷&2âÎ#í¸Ð[æ^ϲÿßÑG™yÿ>ËÿEp²üGº‰€:l_÷ðÿ…IÄIdpçÓy Û̼ÿŸeÿ¿¢2óþ}—þþŠó÷øŸp·Jé±1Î3æŸð­%ñÕÁ@M¤@žÛuÞeçüû/ýýy—Ÿóì¿÷ôW|}p ÿB‹þû4Æø‡8R~ÃOïší|ËÏùö_ûú(ó/?çÙïè¯=“⤑«§ÅÁÿž‡ü+)¾6N&1®‹÷ûAÿâhÕüËÏùö_ûú(ó/?çÙïè¯5ƒâÝÄêÒbÓÍ?áO?î²Béûl€=̼ÿŸeÿ¿¢2óþ}—þþŠóÔø¡xä숆é©ÿ ¸¿¯sý>žaÿ í¼ËÏùö_ûú(ó/?çÙïè®+þÆy±‹¯÷Í]ÆsÊ¡–Ú.}Íueçüû/ýýy—Ÿóì¿÷ôW?ÿ EÎ?ãÞ/Ö”xžäç0B8÷  ÿ2óþ}—þþŠ<ËÏùö_ûú+ þKœÜE“õÿQâ;“ÝCï×Ö€7<ËÏùö_ûú(ó/?çÙïè¬qâ ‚îâÉ>‡üi¿sÏîáüøÐÏ™yÿ>ËÿEeçüû/ýý‘ý»u·>T_‘ÿŒøŠàyQgèÆ€6üËÏùö_ûú(ó/?çÙïè®}üOt„æÞ,zŒÒNGú¨_ñ  ÿ2óþ}—þþŠ<ËÏùö_ûú+LCóÿÝó/?çÙïè£Ì¼ÿŸeÿ¿¢°Å ÿSüÿÆ›ÿ UÇüð‹õ ‡Ì¼ÿŸeÿ¿¢2óþ}—þþŠç¿á*ŸÜÃÓÞ¢“ƧKxç@7™yÿ>ËÿEeçüû/ýýËŸÝã"Ê3øš?á0¼ÿŸ(±þñ £Ì¼ÿŸeÿ¿¢ƒ-Ø6£ðå[ÆWƒþ\¢?ð#ZþÖn5vºóãEv„¾zäûT¹¤Ô_RãMÊ.KdYÒsöë¢F “‘éÀ®€ýÚÁÓ?ãþçþºA[ÇîÕ™œ¶¦ëzvÌnåsÓ;Z´Œ7LêäÛ\íbF}8ªWÃ:å´Ãù—V»š×Éò¤Ù»9àOZC,í½ÿž–ÿø÷øQ¶÷þz[ÿãßáYi¨\·ü·?÷Êÿ…#ßÝ«cÏ8ÿu€5vÞÿÏKü{ü(Ù{ÿ=-ÿñïð¬Sª^d?TáJu;¼ßûå€6vÞÿÏKü{ü(Û{ÿ=-ÿñïð¬FÕ/Tÿ®ïýÕÿ U½&ÿÇWü(omïüô·ÿǿ·¿óÒßÿÿ çÆ³}»`~ˆ?Âí›ìÿ­÷Èÿ ßXn“; ²î98dúô¥Û{ÿ=-ÿñïð®yõ˵óÇýò?«Ÿ^€q ?ð@NÛßùéoÿ…o祿þ=þÉŸj8ù]OüP|K© üëÿ| ë6ÞÿÏKü{ü(Û{ÿ=-ÿñïð®Dx—T#ï'ýð)âm\t1ÿ߀;·¿óÒßÿÿ 6ÞÿÏKü{ü+Ž>$Öz†‹õΟÿ ®2EøF(®Û{ÿ=-ÿñïð£mïüô·ÿǿ¹âMLõ±ÿßâMPÿgýÁ@vÛßùéoÿ…o祿þ=þÉj@s"øªsø¿VŒúÆ(¹Û{ÿ=-ÿñïð£mïüô·ÿǿ¸ã=`G»tÿ®uWþÝgÍÙºßþýõèÒ6ÞÿÏKü{ü(Û{ÿ=-ÿñïð¯?ÿ„ÓZÁ; ÿ¿_ýz©qãív»öcõÿ¯@—¶÷þz[ÿãßáFÛßùéoÿ…y¿¼Cû¶Ÿ÷èÿDÿüFضG?ôÈÿ{Ûßùéoÿ…o祿þ=þãÉñSÄ'ÒÏðˆÿL¿u²pE°õËÿ¯@·¶÷þz[ÿãßáFÛßùéoÿ…yœõ‰S$Ûƒÿ\ÿúõUþ%k¢çËO²íîLGühÕ¶ÞÿÏKü{ü(Û{ÿ=-ÿñïð¯0—âˆE©w‹ÿ¯D®b%¼ý±Πo‰> ÚJ Cõˆÿz¶Ûßùéoÿ…o祿þ=þãÍñOÄ*H"ÌÛ#þ5$õÆ8—ìƒéÿõÝ·¿óÒßÿÿ 6ÞÿÏKü{ü+Î-üªOíðß“ü@ÕbRD–äúyýzôwŠîDdv¶ea‚¤üªµž”º~ï±ZéÖÛþ÷“Íß\ ó›_ˆ>!¹|¶ ž¾Wÿ^´ƺºG–x7zèÐ6ÞÿÏKü{ü(Û{ÿ=-ÿñïð¯?‡ÆºÌZ ×:{øÏV«Ãÿ~è½Û{ÿ=-ÿñïð£mïüô·ÿǿ¼¶÷âv£h 8íåÖ#üañïÝÇexŽ{nÛßùéoÿ…o祿þ=þâ#â÷‰ˆÈŽÃõÄÿñUf/о$r2–C>‘þ*€=—mïüô·ÿǿ·¿óÒßÿÿ ò”ø‘⟲ߣþ5Ÿ|@€-ý²?ã@µ¶÷þz[ÿãßáFÛßùéoÿ…y<_5æoŸì€{DÆ´íüuªÝ‚X•uŒgõ©œ¹bäúNsP]t;L]gÌ%1Ûü9­m7þ=×éY2Êóør)d;žH˜ã$ Ö¶›ÿëôª‹º¸¤¹]™vŠ(¦HV^±ÿÍô­JËÖ?ãÙ¾”NÓþE¸ÿëÝ¿­yß}Ií^¿iÿ"ÜõîßÖ¼†åJãëI “,¼…MJï€ÏJÝ‹>sV_%H¦"½ÌÇnÑÔÓmb*¹ïR­¸ÁfäÓf;U  c=@æ¤rJ’x¨¡‚íO`Ä Ð–Êž´æž´È!'©&ž¿3g¢³ôKrɽø ]³¨„*@¥ª( )È¥2)ÙdÚý ^ùv‚(2s²ä{ÖŽ–ÿ6ÓùVV¢á&QÞ­éNd”h¨UÈÒ¤`ŒQÆAžžµ*‘Ôt a€?úÔåR;õë@à õ50UÛŽæ€!SÏZ@ÈëéÖ—`ûÄŠ1Æ úPó‘íÖ¡a†àqÒ§-µwzÕvoÁæ€~w.GÒ¡–Ð`íùHô«+* ä¥ÙQŒg¿½QK93•lÒÉ;Eò°#š»Hª÷±³à(}h7Ê@9âˆåaówªm$g†ýiñÈÂ0hîì)Ô+& $äÓ\É ÓØ0äÐ>>K²*е˜eƒt5Vxö\€LQ›š¿zBɹT=kçlR.8SÍk@ÂXŽþk RV3 àP…´ê ©<Õû,ouÀ#šãcºt­nE©>Í™à÷  jr­É¤‚í*FXS#ÏÞ= A"ªHH?€ ]¢±Èëõ¬»ƒ$G§Ò´c†YNq…ÏSVZÔM…Æqí@´û«S3[‰æÉºBqO·Ó@'W484"åW˜©‰R¹jÏšî(ZNk÷\?uíÅtr_CLKt®wR×ÞE! ¦Ea\j2ÎYC*]Àdó@5ÃLŘ’iÈ»šD WbEÈÍ$0ão5?—å~bÝ_vi—i ÛÅMÐtÙÒ¬yE&±˜¼ošÐ´½Ú¸sÍn•sB™ŸV€dàîÿÐMUžE•†:š¿¢Ûµ8·Íÿ šÊ¿ð¥èÍð¿Ç‡ªüÏnÿ™Zßþ½£ÿÐElé¿ñî¿JÆÿ™Zßþ½£ÿÐElé¿ñî¿Jª "¯ÆýYvŠ(«3 ËÖ?ãÙ¾•©YzÇü{7Ò€)ÚÈ·ý{·õ¯»;›×°ZÈ·ý{·õ¯ÆæÝùÒCbZ˜àt«g'Š£ ”ŸocZ[HP}M1 ÀÇqTe|MÏJÒpªóD   ¡‘1ƒÐT3ʨ R2=»rx¨åw¸j²nÔ)犱i*É’XØ Î3ŠŽÄ´SðqšÕkq’ÍÉôª×ŠÜð:qïV¤ùd÷¨¤lÊÓWæÜAÇÒ¶ƒ¡Ú«Ã¢LÓå™U@ü:PÜÞjI$Uš¨e'ÔžhHšB ÍDò´’â<ýjýžžÒ(w¦Å $«•Ö¬wŠ:f€‘,(¢Y:4É\¼ƒµ V/ÐжžjO(qš™"gp­íTG“Ž(--ÛnOO­@ü‚:v­[‰!P"³Œ,@È ÚÇ’¸•‡­©)€&´l®í”ÉÅ>õCö¬ËÔnëIÛ ƒœš£tFÌh¾k´`ý~µ¬ìyÀªRmÎýU íîãåÄr}hž¥xªvÉïŽÕÊÞK#Jv“ŠÖ¸÷1|äÕD²ýásœPL¶ÀÀXŸš›kk˜ÐdœÖ•ÈNÓ€?Z—A°i.¼ÆÇç@УGFœqÍY+vÁhº"Ú"Ê9è+*#4’19æ€4|Ï1ò;V¤[ŒyôNÖÑ›nEiJ˸æ€9}ZBn6îäV·‡Tà±5ÎÝËçÝ1íÚº-.9bJ€:•ˆÀëRFÙþU•æHqWà“sü½3@Ò<ùÔ‡!@3M¸õ¤'ç#P8Æ3œþÕûÇ’FÎqþE1 $f€+µAã>•Ù”5JÑîu4Öã>´RçvÃäŽÕa³·ž´«¤ cµ0+;zPán}:Óß’1ND ˜$f˜H®zw gáŽIãéTæ!£Ü:Š·9RHgÞ¨Üï@fžK‚¨‘Ö­ÚÚì^x&¨Y®ù³éÍlGœ‘ŒûБXwãÒ¯F01ŽzUhÐäÕeN8=1@ûñŒPÄ”ä(¡OAާ6q@Ÿ±ƒŠŽN˜¥`|ÐiÎÐZ§´r3[> âmH´Ÿû5glàZ^ÿOýôþm\õ‰ŸäuÐþ _Eù£gLÿëŸúè­ã÷kLÿëŸúè­ã÷k ä9»ßù Ù×aüß[øô¢÷þCv_õØ#OÕ—t–ÿFþ”†g¨Ú ÔG‚H»U‡<}*¹l£ ☊NÀz¦÷g­Z”sYwnZ`; ’(ÚæM瑚ÓHBà T6±ì‡#<ñV“s@D9çµNš…~QR‚G£Š~ã÷}y5]Ž‘ߊ°GSžµZ”äPlÄŽ‡ŽµU¾RzÕÝħ¦j„6qžhº‚XvŠpRüN $1Šs Žô—s‚àcžÕ$H¤ŒzÔs'qVdqÓ½C4Y\*¬ UŽGµ]–l)»U=èµÀù+\)bO>õ­w'ËŒà×?w/-Œæ€3d^g®kVÕ¶qY5š½ #ô­p²aÜŠà’ëä–ë]ˆ˜Úï­U–ÂdÜÍR´…Rì0ëíWoâÌC½Y†ÑcpBæ@*®(”½€yYÇ"¨ÂÞS.:µµv¹€’+"87) ûPå„\°¢ïNÈÂu5NÝä‚\H«¿oW˜p(¶qËm2ƒŸé[0°‘‰õªwÇååÝKlì¿J—Tb žh±BЬ€ôëUõY³oÓŒRiù‘ùdàém$TdúV’È3ÈÍs¡šÕ5VÒVI•_8ô5Úß$nï‘È®bîfÊ® ’Î(æ¶ Ôm¦),2k/JÔÍ´žSƒ´ž¦º5Ôí•w;)úÐpilß;aV®ù0Û¦@²µÙÄ›Tôì+˜¿ñT³åbbu—š”0ñ½zgÏÞëÇiµÏ©çù™‰õÍe¹  y<ç%Ž=ê Üî”rì Ø5 `•úQ ›Ø jè•9ÍB±†êè´{„–òŸäkœtmüƒZÚ2ê°þ×þ‚k*ÿ—£7Âÿ«ó=ÏþekúöÿA³¦ÿǺý+þekúöÿA³¦ÿǺý*©ü(Š¿õeÚ(¢¬Ì+/XÿfúV¥eëñìßJ§iÿ"ÜõîßÖ¼¶¨~ë–Ÿò-Çÿ^íýkÃÞðïÔÙrñv~ñ*ÜRaSžÕQe¶'µCkpcL”ÄjÀ ƒšŠkÉ8¨ÅÂÎN{U †ó§S»+ž”bFªœUè-° õÍQ·W’Lí •®§î€x Ðíç5SìÅ&ÝšÐvÊ TDþY ÷ ¤R±+¤ ޝj&G1ŸZ‹Ìù?*‘ä\wÍOy#w5§²€9ÅfÁdÍŒƒŠ¾-ˆS·¨ëÅ\† J®‹Æ9=h£$­žMIƒ?w…[x³#Ui,À”™ýèÇ<Ö…ºg$öëU!BòŒu­=‚8€Î3Þ€dQ"ðzzT‰8mÊ9J\<ütip“ÐÏóÉÇ"¥XÆ~îzÒ|¡¸©â Œ™ ™W€?*­3„MMtWÍggÍœ¯oJ#ˆ´›˜w«Ñ.Ö‘áòÑ=zTÑ´P.±੎I¬Èd6­‚p+cR}Ó…EfÞB ={{ÐŒ¬‘'š§xAœVUµû[͵óŒô©õ Ï—¹z@LÂ=‰Þ–8<°]ÿ n—Ÿ Ã¥iÏœ}(ºS$˜Éæ‘—l[;žµeâÛ!$ŒUyÁE$õÅbÝ‚dØ„ã5« €°$šÏpE±èMt°Ä‹”p1@Vp¨@©b´Ž3œvªR„ÔôÕi.qZÓyÞ"Çšæµa§ÇÝöïQßê2^e ÎÎôÍ>Ñ †r6›¦™’Pqé]RìBˆ§c>Õ¨LŒô«‹€¬6€µQšA冽iiW×äâ²5!µKŒΟ£ÊwP^¯û±Ž´àOËÉɨ!Ï–3þEI»óí@ ÀäsšT$7?•7%‡¿Jr®ÝÔ ÐÃnÁÎ~¼T'æcùÒœœ€sšhãЄOÝENŠO4‘‚O^;SŽ9 Ý€ïô¨ø<žÔé õ¦Ä»”®Í—ü*¥üyµý) Í‘±•-úTýÌR±çÖ†N3LE" ¦{Ö=Òÿ¥àp oaIÆ:Uyôÿ:Uu<ŠšÞ¶ê=©Jz~•`DQB¨#8 Ö6lb¥ÎÞ©QÜTNInM)$à”Ò»‡Ò•ŽÜ昄ÉÀ<ž¼P¼¼/ pF*@£Ô ³·hùXg¥@ÙåÕ Í#¾é8Vyv“À«2,#ß©¬‹‹ê} U¸•Ýð÷¬Ùárs»5}[qËt…ÉïÒ€2¶¾Üu4õ½òÆÇàÕ¯+kd޵KP·Qƒ@!¸I:°ÅYY°ñ\ŠÜKx­mQ1óœPN²¹šÈ¼¹&B§“MþÑWB†MRgÝ&ãž´·r¯’GsÚ ‚0±3ÿÛœ<œ´âO–"ù¸ Û[ #gaÁ¬æµi'+ky€·´Ú=*®›ižFäf€) i#nrGJ¿hKpzÕÇ…NqÒ¡¶L;¯ª/îÍR±S8æ®jN ! hJ†´¹‰{ BŒ‚*´,<¾¸©ôËq@’å“äUi›q,ƒ9ïN+¸1 ÅGÅÈn`*ò.bÎ>• ŒËµy­]Ž"#Àë@-S ¼÷¦ê’ôÅK€b±µ“ „ñ@…ã nOúÔ2(@p3Þ¦ž"·ûóWÿ³‹ÚîõPZ2I"¾3[vA¢fRj]OCÈæ&gr(*é¿Òdõª&-׃+ÇJÐxÌ—`ûÒÞ"¤ü`ÌÕ4¡°š1óu⹋‹‰TŸ˜ñ^‘å$Ö[äŠãu=D™¸úP-#;|Í’)—ŠÐšÆXT†SÍG(’~ó  …òÔduæ•0Ïè=êË4KèI¬ÝÀ³cð  ¯åFÀšh“ qÏ¥WPI]ÝjÈL·#'±õˆÉàžþè4T±–\(ôNÑ·§¥»¸ h·]ç'½]ŽÑJå‡JÉ*XŒ ™#R‡»U›˜_êúÚ³ÙXá±@s´:Ó¢¸—* Tq7˜Ø<{ÕÈ­vÇš¹‹'^µ¥¢°:œ`õù±ùÇ,#<Ê´4'/¬Àq½ÿ šÊ¿ð¥èÍð¿Ç‡ªüÏuÿ™Zßþ½£ÿÐElé¿ñî¿JÆÿ™Vßþ½£ÿÐElé¿ñî¿Jª "¯ÆýYvŠ(«3 ËÖ?ãÙ¾•©YzÇü{7Ò€)ÚÈ·ý{·õ¯»²`Kæ½²ÓþE¸ÿëÝ¿­yÜÊÀI ˜¢y=œâ§„nNGñndcаˆQqŽ£ž)ˆªÊüût©¡L`ŸÊ¦ÚÜqšQ·8ÚF(hçAÀ«QȸÆ:ÕDHØÍÛÖ¥ò°Âhú¦P“ÓëB¤­V\Î*xb¶I4𱃒j“»„íÞ¬‹\¶ it í¡Ë.kR Ã𪮅T’eÉÏ,û·1Ò‘@IG­0Ì ÅWw&`Aâ€'¸—hã®*Œ`¼¥ˆ<ô©Èóõ§ÛÀL„v(Ŭ,dU¹{mì½iÌdqD,I9ž´^HBüÊ:õ¦£``š­Ë° qù¦Sæ%hhÇsN,UsÆ})‘)$“KpÄFNF}¨­ää|½ÍKc~}§ëTÖ7žrXzÒ‚EA´·,¸ßƒØR)ýÙ¨eŸ÷ªœŽjI—lMcLÛï¥2ìvŽ1E»ù·yÇz³uTœsë@Æ¥в¯ÞšˆÈ×6ê™9õ«wndFc™e²úP時Ni×;úSZR°ªJ®>v-ÇÐÐL%'ÐÕi¢Ü lã5¤ü»œU®¥U‰°{q@Ö¢zùc…<Ö½þm—,xÉ Í¹rj5·+o¦€,¥ÓÈNÜŠ‰—Ηk=©"Œ¤Dç¿'  §Û {#©«:,nû˜Ž1Þ®GdLŒšp™ ŒGÁ>Ôø2·Õ°#$õ¬ëEJ¬Fµ_¸# P6­>ЩžI©4wÚù9Ågêr‰.À§Öµ4È]ôÒA0!FýUmdœƒXi8LŒþ54:‚3„Ü   RNA=1Jß'5\K¸ž*Lœ‚(eî3OU Û Ê’$ùI-Î)êWqôé@ ®•ÇoZz’zœæ¡;Xœu© †y=iÊBNÔŠC=é!²q¸t ¥Vf>”ø¸À#8ëOeb;cüûÔ{¶“ÔÐÂÑ…$ŒØ‘K|£ŸZ‹~Ï”°€HÈíé@ Ò¢½J¸p @ø.TÒ¦VÚ}(ÁWqÇ¥!^@ô4™þ/z–<’Ié@T/z<”ð3L,[#¥A(ù ¬ø?‹OýäþmU%=}j߃ÿ×êï'ójç«üH|ÿ#®‡ðjú/Í:güÜÿ×Cü…o»X:güÜÿ×Oè+xýÚè9n÷þCv_õØ#Rjßz÷[úTw¿ò²ÿ®Ãù~®pÐýúRž¨?:V\´¬ ¼S#‚iˆ‚4`Ù8«q”æ ÇrZ7‚p¼Š–F\ã4ÂÁ~´ÇœJ$VTõ*Üí`$PÐÚ3áßÞ‹hüÛœöSVí|‚S¿-¨Û±?ÅÎh® ìJÆ¥Z´‹e·¡êjš¤Ýûfµ#Ú#oNÔSy穱ä}iÌ¿+61LŒä·   ׈K «6‘«E´f¢ºnTMY²$?+@"eã¥#£Ê“[‰n²*îTï§ÄcÀ€9x®^5*ääQo0’è€ßJ·ªiÆß.§ŠÆ°}º‡ã@"&“Öµ-‰òù¬õpI©ùPSŠ¿æ ¬{VÙLçµYûO™ôªÀÇÔP Ú¯ŸŽ:Ö”RfÝS•(/qÈèkNY»m…ƒ§8ª¥<ÉÛœWcLF8"©†Åï<ÐRY¬R©Ï9ªzª"‘Î:Ö¥î|áYZ°;¨ÖŸóB¹=)/á %søT:1/òsÁ­Kø¶íjç¯4¡, ØúWÁpþ€ô¯W ^ÕÌkš*O™p{Я½sÓÛšµ.™<$§NHÛpÅN¿2‚Tª”TP³Jµæ&Ü(ù¨Ý¶É5ªÖ_&åŠÁ†GW£Ö·»”„§­ÔëžsZîZ欥òï˜ÁFž9r¤gš“ÌQ‚F)`A^:TLwg¦²í#®(ð¾ðvñRó®zý*¼ý*ÖÓÁî=ènAúTì¤õаWäSU†zô ,|r?Z‘ üéŠOSÒšdÀùO=¨‰ f€AÒ¢ÞÅðAÉ©ÑFGÒ€ °Çµ2°.*=ÛWïNV ãé@‚=8¨™±ÀïHíób«Ï&×äà Ž|c$óZÿ]©¼ŸÍ«™ÔoÙ˜¬Dfº/ä­öî¿»Ïþ=\õ‰ŸäuÐþ _Eù£wLÿûŸúéýo»X:güÜÿ×Oè+xýÚè9n÷þCv_õØ#F¶ÛLýïéEïü†ì¿ë°þF›¯}Ÿþý) ¬¹p¤Ò(ÆìÓbmÀSÔŸzb!u'<ÑA9'4÷ ž´ºâ£w©&Ë)Y”'¯5]ä`3Ú€£Òž3¸g?•6?›“ÓµN¥UOzÀš9œâ¡ó¹93aI JýÇSU'å·ÇAOšo—p#šÊ¼»Û¾cé@DM÷Ç^õ Íú*žk Òênwœf•í'( lœP÷BY‰ÝÅU¹›r²æª\Å4R`gSígv$4«bãf;Ö‹»¾^•ÏÚÎb àÖÄsþèƒ@7ªëuæ8ùj☤¶ÁÆzT—‘$éƒQC§ü£ øf€eg¶mËÒ´.`dÅOmL8¦]°$â€0/`Ãc8í\üµÉSýêÝÕ%` ®3ŠÌ´´vmÀ|ÔÒÚöm»F1Þ¨jV©å–P3M¶»0™ÆqÏjµq"µ¾s‘í@–hÅö·¯JÖÄP=0gÛäJ\3V. ’eAÈï@éèvG&´/–ÀŠ‚ü¼Q´Æ9™¡4ë€UV>=ªÄ§qâ û£oz„¸’Sê+FÝÂ8ùrk.I”òO5~"Ëu´ÐÔPOcëZI–½gZž´RL'J©¨Ãæ@A«ŒŠ+Pçš»—c,m‘\…òùw»€é@î'Ú›®)¶I;sE¬MrwÅoY[¬i€9  ÉdcBÍÒªÎãc.+Z銩¥`ÝHÂ2ÇŒÐ;¦f$õÏjµnÀN‚¡ÆdÏsÖ¤†2.žÆ€:|bÜc FlÆjá}¶¤{Vm™ßtIõ  · 5Æ3T5¨Â vjs‹‚* \£<ñ@è;AËu'§©•GZÇј=krí„Z†Æ’<z¯<„CŒòhƒn–àžù­À”µ^Ý0w¦´‘Ù‘@ wŽ•!\‘г,HŒª÷Î!P@ë@ºÈŠÆ SŒ—„QUn®åÈ@xÍh,a/¢ÐTк9‘zÕ‹MPŒ$œU…MÄ‚3T¯,J±eúñ@†éwãéP\`äÅ2ËnNsÇLÕ¶ù°sÁ  _j)ò&r?J‘b–r 'še°” ©­¸¢DÀí@"´®â9¦;|à9ëV®¥Ú;Õ68<ZÎÔ6žíX¾H2ÇÖåÖ8ÍSoŒ¶>aÒ€+4 «/Nõz<²îçZF8ØG5$s4K‚¼{P‰|Â]”ÉõÀ,qXó\¸™•äÖœ—’À‘ë@ý¶wœ’£µh$ æXqй–±IŒsJÑo˜(<(Õ„@Êo'Ú¶3wtFÞ!‚Iuªwº’¬Ê$çšÚ™ÕmwÅV´a+½©¬Ù®å»ÚBcš»gµWä?X¹1°$õÊLjï˜gjê%”,dñҸט}¹Û?Å@¥¼ì!ë“RÛÝv'š¥dÊbRMAut‘IÁÁ ’Y26ÓßqÐv¬M>èã%ŽÚ¸÷`ù  èªQÓµL)s}î”~p’HqÍf_iáÓåàâ®À~s“‘SL›â€8†•íæ ç ×Aav“B2ÜãšÈÕáU—uS´¸h›ƒÅuNÁþå;,Nk> ddÊ‘VDŽHüè[~Åù±š¥4€ä“š«=á ßžC@/¶ÇsVô»\¡cÞª[Â÷W#9µL’OJ± S×ð  ®Ù¸{q\ö¯|Y6¯ZÕ¼!#=qÜ×-978À9 Û³î•Æ;äÖ½À¸Œ¸5­ßˆ¡#cµZÑ.–K0Iâ€7mNñž3VeŒmû£Ÿ£¸%<涤PTÐ;q¸hÙy¬ëȺŒdî­ùah$sT5|ÈùíÓoF%­=*ùcäõâ³ôœChr{Բ͜’~‚€ ¦çåä÷5ve Нw±É «î¢(AÆzŹÜÌPšžÚ°Õ6c5ë<+ZÊEÉ  n¬@Ç&¬®ž®œqÅ(Q»'¯½\Ü©sÛšæ®´áʼnï[VRÇ ¸F}«+RºHª£5oO€Êƒ< л“¶*µ©’K‚UN3Ö¬ÊÁ,ˆsV4Ø€€79"€ Ôî 6á}}*…©œ$èO£ª@gÈâ©XNmâ1¾:@_È–±~ìòE3E¤,§5JõÚêo¹­}.ØC$`š³xÛ±§4ԥ跷Ue†*ck¹7ÈIZfŒŠè´ûM‘–#Š[x<´ëúÒÈŠ¿5O) €ùüª¼ƒz·4JhÌ™*y©­Ü¶Òa‰úV–ˆz¡wœ˜{PÖ©$£¨´~ÕƒÓ"¸‹ Ìw[G×_Þ½¨êÝÆ0úóUnïLªbˆóÜ×pÞÒ­§þEñ¡<3£§Ý³Çý´ñ ?·ŠUù˜äU½í¸a€ã¥wðéxÇÙxÿ®þ4ƒÃºP9û/þDoñ ?¹Q"Ý}k!ÖK˜—5ÛøŸN´°ÂÚ-žfýß19Æ=O½r³&åb8  3Ü«DFy5gG̱ҳ¯-Ú5 ‘ƒZ: „, â€-^³¢€§œö®«À£ z=û5rz;²:]oŽVôúˆÿöjç«üH|ÿ#®‡ðjú/ͺ_üÝ×Oè+xýÚÁÒÿãþëþºA[Çî×AÈsw¿ò²ÿ®ÃùÏñ¦>ÉkŸïŸåZ¿ò²ÿ®Ãù¡ã$ßkj?Û?ÊÎd’?3Š–ËQd|1ü I8*1Ž+&æ?-¼À)ˆí#¼+‘J·›zƱ´i¼ØðÄÕë¢"Œœæ€.É|~R9üë<«Ï.öÉö¨-Ë—nÝ*öýŠ6õ ±v´´ÙA+‚s޵]î~O­ p®1žh…Ü?>èø5YnJ+#çŠêto[÷¿ô]Åxå˜óoG¹­«œÅõ½&Šò0qLã$z×)©ja®FÁÀ=kèzñ/ˆV7Œ¯˜/»çþÙ­.“2Ü€7s[f/Ý‘žkœÑÄPÕÒ6v5rzÌx,85‰o;‘Ûµt:¸á‡SXö¼O·Ö€,B³D2§§Z¸—óÓÒ˜>VbÅFJ\HF(——;†¥6%ÆÕo»W[MÄyëíZ‰Ò}=(Ηd'˜ã“Ve dã¥[R<{T2àþ4›zÆ([žqT¬ãë!ïRßÉæL#úÔ¢1ŽOX§ŸsÎ0´øáó.öðTU›{p#f"’Óh‘òpE>ïb[•ÀÍgÅÉcÎjÍÉ '\H¿ê˜ôô  †0Òdp=*Iã4äŒÄ s¡Üt€ 7>•´Ð³Ç‚3Åeé ûÞ™­±’§( ·ÛNN8«I:{ƒéšS+œŒäUh.GŒb€4šÛÌLY3ÛHŽ@õ­ØgAê›:4¤`PJE¹ðÀfªjk·Ö·ü…i2GweªEqéi ŒñUä’T8$סA¤Fñ`¨Î+'PÐÕd¨ÍrðLå¾|óZ¾ÔÀèi³iÆ.W;ÕHë@ZPcÆ9ö«šgY·çûßú ¬u,G=Mmx~þÔ‚B8¿ôYWþ½¾øðõ_™îÇþEX?ëÚ?ýVΛÿëô¬cÿ"¬õíþ‚+gMÿuúUSøQ~7êË´QEY˜V^±ÿÍô­JËÖ?ãÙ¾”NÓþE¸ÿëÝ¿­y›\€kÓ-?ä[þ½Ûú׋OxGLÒCfœ—ÛNª³ßJÓÅQŽg˜ò§µd§É‚2iˆ¯%Ì ˜ÕiIls’jø±–vZ¿o¡ŽAÀ  (l¦¹µ­´Ì¥1[i Q Ú¼jŒœ¶ED¶0ƹÇ^´Ø¢PÇŽ†¬qר¨`‘ÜÐÑ€~:ŠWWn­Î}i¨‡yªanßxŸ~´¡Väàž˜«‘§Œâ¨É–—ô«P)U$±ÇÖ€*ߨè½M7N‹ç$õ¢äæPÉïV-ŠÇOô Ì5›=Æé¶¯j–yÉQÏéU`ι9 ‰%pàô««˜ $ã§¥=£TaÇJŽfóHAÒ€!…V[€J÷Íi¹ Àâ«Gn¨À®*IÎØÏ4QŽ´C)WêF;T{•]‡åíJ\*=hšµÀV&¹–¸äöÍ_¾º29Îp:ñ\ž¹¨y(TMakï5Ûa‰×OáYŒ°Î1\8Fž\œòy®óÂÑÁAé@Úl¾]Ëœ×DŒ]Mr»Œ7`“ÅoAr®€)í@ rãÎëéTîˆ({U™T™ª·Ä(#hä àS†[$ð*¬Dm9éVVEÞ3÷EhÛDù‡ÓŠÎÕnöÆQ[“ïV&¿,'t¬gáùé@éÈLŒÙä÷®†Ü~ë'šÅ·SÇZÜI·Ïjˆ¿ž~µ_P˜ªˆÔòG59ûçFLI|¹çð E¦oˆ;uÅZµq 2ž20*ðtHÀÈàr+ iCݰRvŽ”zY AíZúk)µÔVwM‰8íOµ•Ò-€ÐŒÃ$àdU)lRBI5:\äàõ§´ŠFGoz­˜‰÷ŽyéR\J¨ÁÆ;RKz±ƒ‚3Šçoõ•ˆVÉ 5Ûß=¼¥#OOµÜ㊑¤™YÇ~krÑRFB‹€ké¶«·§Nµ©¾\$0{Õ{e1ÂHö¦]L·;UON¸ ./‡ #¾j’_:`¸ÀÎ*[û…´ƒs ŸçXi©¥Þèˆ ŽF{ÐD'Y€ HbúÈÒîq9Rr3[€n”`g4ÎÝ  ‚k£²½cÉ=bk±ùno?J¯kvËhT“@@K*A Í+³1ì$Ö‡uË­RYá¿·Kyv­Åº®~hâÁü*潧Ϫémc ¢,Ϋ33|¬üà`u#ƨ¯†Í–±caq;y[¢n®d“tDt]Äà† {R^×õþc{_×ô‰lõ‹é|Cwcwi´[‰£ù÷; ÅrqÀéÓŸ¯j¥câ-JVÓo. µ];R”Ç ¦ï6<‚P±' vkTi²ͨ3!‚K5·Û“»!˜žØÆ­eXøwQ‰´Û;©í›NÓe2Bɻ͓„ ÀÀ=‰Î;Pº_úÕþ‚}®ŸæWñÔÂ94Ôþÿ™ÿ²×=aúô­¯ˆ0Oqs¤Em’ÌÆm±Æ¥˜ð„à¥cAбŽâ'ŠP>du*GÔ`Q¾·ýÛ =•¤Ë²à£3[—Mó·^•ÌH ­ÞâÐXʲÆk¦ðHÁ¿ž_þÍ\m­ê´KÍv^ `Æý‡CåŸý ¹êÿ?Èë¡ü¾‹óFæ—ÿ÷_õÓú Þ?v°t¿øÿºÿ®ŸÐVñûµÐrÝïü†ì¿ë°þF¨xÆa ½£òúUûßù Ù×aüb|Cmšu›ÓåHg<ìjì Û¸#œU›ƒÚàŽiÓÆÝÉÄeè×>[€N9æ¶.çóJÆ3É®Z9LWl÷³ZöÓ™nÔ“Ò€:íü˜‘W©Ó„ùUÀz± êdó´V:ÜE-Ô¥ó»w°ï;÷sÍEq¾ÚA ?)­(-·&ñÒ¨ê{D_1Áì(wÃ/æêöÍìßú ­ßêKc§Eoöij’öQÎÒò”ò͓ЅäV^¤\hšå­µÌÐI#«¶",p0}@÷ü«¥›L‚}RùK¼ÄÑ"ˆ$ãx­&4exsP—TÐf·‡PŽ[»Wkct1(l}×àüÙR^¹£Ã†úmþ&¿’K”¼ž$¸w‘†À;x€À­X4»{mRâþè÷¢IÆÃ·8lc¯8ëNÓôètèçHYØM;ÎÛÈ8f9 `t§þBÿ33ÂpÚ}Ú]]Ks$WÓÇæÊrH ì>ƒŠç•R;w2î“©õ  ÊnËzÔLùJ°¹ PA@P^&›rÛ`cS"?J¯¨°à ;JêNqZÅëL'ÇCZèÙã­/%Àª7ö¡ '=]wCp¦HJôãó nYXBS4Èæ wZ~£Ù×’sYáYÙyÍo}µŒaTÖ¥„ò˜õ>•‡ko#ãåï[Ö¶2*Ý(6Ý!f ûÖ§ É@:WIr|µ +—¹o5ØÞ€"¶eÞ7Etv±²ä­‹}°ƒÓ5×DvXZ³ Könk5F&lëJ&ͳéT#æv 0Ì¢›¨F‚2r*R?z*MHn¸í@¶‹þ}iÜgÉRŸjGÚX ×»*!QŽÔ³ÿ…A¨6HnÌFTWÐêh;e;rqŠ©xàNzÒHÙöÚ²®×÷à´u Y`ÉPk%¬È¸Üªp tVQâÜj¬ª«pw3@‘ô5=ËE!=ý«¬k8ÞáyÅqºšâqÛ4Z#æ\óÓ½\È$Œæ pÏÇ5nÞϯz˜A¸e±Ž´¦ÉÎ8«&AŒȪ‚B³1=E6âBªÝ3KkÈXõ÷ªìL²FkR4 Î3@¶"FnõJY2¡NkH 1c#Ó©ªWH±¨>´@·çU®gÀÀ<Ö¤‘ûp fÞ0Ryí@oî|¨‹ŸNrk€Ôï>×tqœV߈5&(cÍs ±È9  ¶¬|¿z»¿ Cæ± g¸8ʤ˜Çã]÷„æDV œâ€4ï`ÚwÍGcrR]¤ÖˆQ;c=Me^[=¼œ 84°ó)PsÍgݰ –=ê”WÅN“ž™§M8˜¨SÖ€$SJ®ó Q‘ŽÕ4Œc‡­I¦Úyä;”EuÜÃRˆ’,`ž•¦"D•ü*•ì±`¨Ý(<X±­{V f1Yq:z»e"˜ йÃd Î#mæqÅi¹Þ«\BîÀÍR»–A)Tc´Óa…üÀÄÔ¶±YÇ#šÑkKrUrG­OiÉf©ŽÕUâ6ìs÷jæšÃMZ¸€J„~TˆÒ ràô4æÛŽO•Ý›ÆH¼qTËL“@jnÑ‚Ã5‘o ·ªI5»Ÿ-äß½'Ö´þÍoc· (ãNû- -‚ÄTÚ\9!¥XÕ$óbã¡éSéqªÀ6ŒœP¹§ÛœqYÖ2åÙº‚jýô_èÍÎ:b¹«{¶µ©Î7q@ÚݿڭH^¶+”‹O–ÚC<¬IµnͬR6gð¬¶î `¥K§’n”æ»hö±$Ž•Îé¶Ye~­³9ŒÇÖ€0üBìCqùU!u¶Ù÷§j÷Û¦{Sà˜ý‡kr;Ú€=q<¥>1ç>¨¿üU>ãÇZe²{{¢/ÿ^{§ÃçD§'Žù­Y-–kRŽ;ëañÞ—:îXnÀ÷Eÿâªtñ}Œ²¬PÛ^Í+}ØãŒ3ükÌÖÚxd1Æ8Ílé >Ÿx—ˆÃÎ@Áw ã*WúÐE©ë ºþ‘¨\Øj–Ö¾z»Ü[• ^<(Ï9ša¸Ô¯no--®%†IX†X‰Ç|wæ­4W>#¼·³»¸|̭僷å' ÆzSÅÝÆŒ²XÙψ㕲æ0 àç–€9íE$µ‘ÖThÜuG\øãu;—’\x‘×Cø5}掃Kÿû¯úéýo»X:_üÝ×Oè+xýÚè9n÷þCv_õØ#X_óý™eï9ÿÐMnÞÿÈnËþ»äkÇñll”ÏbJC9= nˆ“VïRÌ…9=ê+dÑm“Tµ‚®iˆÄŠ3-ëZÖ‹²ä‚:VM£Ÿ´7\浬¤ó/pÔ§ãà’MgÛ¼`æ·mág¦zU[í<³ù‘.z&)ËqéV5¯^Åm5Ü·V»"* ’}‡ËÖ¨[iÒIƒ+qéZ­ðåË;1Ë3“ëÉ  zv¡yâ wí‘EAYŠí'àr~oj½«kZŽ”U$û».ì*¹ÀüqþEA«ÙÚé÷†ÞÖ m[ ÇwÌx9'û¢¹]NQgœûP÷ßµ[vÄVöGýäþ*¢OˆÚëEæK=£þ.¹9ÔÏ6÷­:%1ùoŽ8ÅtÐ|AÔ¥\˜,óìÿÅV]ýìúì·“„W“8Éö¬»=á2®:-@Û*àŠ•“÷ªÓ\ˆ8aøÓ彄ŒƒÍg\Möƒµ‘@’n¥ÝŽ3ZúmŽçÎåMÓôÖeRF>µÑÚÙˆÔ™ï@wöí¢AÒ®Ú^G, d+FêÅf‡iäÖ+é­ œ é@O±ç šÕ@F{`Vuµ“³ZÖ(sÏɨã©÷¬i‹Ox¨zgšÓ¸¬E½=jŒEšI›> Ð×oò$+ÁÆ VœU‰x$sŠš3Ü裎i§ zÃ9ÇJK[hÐä€M6ly¬F8íVD}v“š«*Ħ€*œóM…H|‘OÜ“RÆNN1Šš$êÇòªZÁÚ…=+ZÙâ²õS¾ãô  zkã*{ûÖä2*‘ú×>Šb•YFk¤™Œ5O3«±Àü4êxÎEØr9¦”p(X&YüRAi寻†MM,aæ©ÍY—å(Å]²ER1[M H{g“jvªñšuÕà‘ßÚ€+_Þ) €ô‰*DXõ4û©‰ جé'ªç4ëQæ^Œõ-]tÊ#·AÐb¹M-sz¤×I¨Kˆ”g€(d—bãZÝÄ“µF[–¥4hÓî‘•¸÷  ìŸSj@›0 2B>ÓøÔÚƒfÔé@J~ÒsÀÏjÙ¾_ô`GP+&Ìævç½l\dÅŒv ô™‰GZn§(ùqÚŸ§ »ÈÕkðXäó@-&W€zÖf¢™œ{Uy.^ÙFÓŠ‚mMX§˜:ž´±ktðÆ¡³Œu¨]׿<ž*Å»[ÜÛ®×*ÈÖFqÒ€:+ddë’EszŒ¦ea×Ú¯Øjl±ì`{ÔWò#È$\P!ÒA È9Ö<ðM§zÍvVŽ>e#4˘#‘C2ޏäP? °™@eíÖ«\ÙµÝZÈ·ý{·õ®Á'Ö’-ÄYÇJˆ·Î59‘vÐU $É 1LD—¸SŸ¥Vê¸=iŒJµW¸¼HTy  5bŒsøÕx®âc·§Ò±æ¼{©v«|µ±aÈ”àçp¦1ƒŽ*­Ä¹VóRÏ!EÀª„¬‹šb.’j9-’=ø©3·žC# '#“@ÂÊ#š{»OZ¥£=­[ÖVÇ&€$†?Ÿ9«íUÏj ¨D–äv  ™< õª3–INséV–CÈôªò!–q‘ǵ,½_WÄYª@Ø©[w”XPÃËNµ™¨Î¹ )Í4Š€>zzÖ5ÕÀiJæ€~¬{V¯v¨„³v­;‰‚Ä}º×¯^ï, äc^\ý¢àI¦‰6¦ÞúT „œî¥ˆ|±&€îCu5Ûø.bò²œŽõÃÊFã]'…/Z+Ô_Úô¸FfQïV/m éŒsÖ©Å0óTƒøÖ·™¹A>”ÈÝé’ c‚3T#-äîÀõ5ÛΪÁ·1ƒX—v 26&€1g¹3L‘®pk©Òá[)>+‘XZõV õ®Æ Ä»}(ó6äVM؎¯HÌçñõª³ (Ù#  Èd]¹=zÕ»"W¶k-\*;V‹ Üs@œã©§¢oóM!K.H©QpàpZµ2­‹?¥eDàHAëZ16õÀï@`“ʼ*sŠÚÈxð3Íd\CåÌ%9ÀàÖŒîvŸ”ÐÐnÎzTc@GÖ§{žô’È0>”ZE[uܬ‹‚×7åö§Þ\<’Ôñš»okåù‡8  [€^6P:UÝý^;޵Àí(ªöµ½Æ À'šÜ¹â'šç.ìK®äê+¥'#ÝóYìkógžô•,‘–ÅiiÚ>ßšAÓõ«ÈèÞ1ŸJnc$°â€H’$Åf\Nl tûËÿ1HSÅs÷—g;É=hßg7Ü#sšÓ‡OßhcäSü?j¾T²0çsW``'aùPzS4lac‚+£w. í\¦ ²[],È8Ï8­]YLcžGZßh±cÖ’5Ǧk3ûDÎzûÓ A;O=(}/Æág‹h‘C`‘œdýk3PÔ8yòîŘú“Y­zÍÍÐÕ¹w§-‘@¯îs–'$ô¦Ú20Ã$šŠ+Wº¹ãœt­7Óü˜†G4Èäh#8ô¯Dð#nŽñ½DGÿB®94ó-®}k±ð"ìŽñ}CÿB®z¿Ä‡Ïò:询üÑ¿¥ÿÇý×ýtþ‚·Ý¬/þ?î¿ë¯ô¼~ít‡7{ÿ!»/úì?‘ªž,PÐ[g³1ý[½ÿÝ—ývÈÖ'YÛ9îì?JC8û©U;óX—’‰dQ×=i×—E¾bqéU¬•î.ÇSÞ˜‹öÖ“ŸZ–[so0™qŠÑ½#Å2U3Ûqƒ@–Ž²Æ¤Õ{b‘Ö¸ëBK71È¿.zš×]YHÎEj@ÅI½U0MbC9 Љï°KzPÅàœœ³Xž¤úšåõ Ï1˜çV¦œH¥sÒ²^¸˜*‚F{Pl¤o8¹Sо ÉuûU´ÓÄWU‹a$m”ï@ØIöÝÉEæ™ ]Àcj)¿ÐnÉíR¼ïxFÜâ€2–ÀI ¯i¢Fƒ-×ÓrÒËˑɭ4B8 ¡´TQòüµ6ÎÀ©¢ÆÓКd¸øÐ{rßw4ß%H$šxVqEŒO­FÊxýC)8ô«’çÏéY·r”õ zPç,B jI“ȳ Œ8¨ìÃ\N^N@æ–òe’ä*޶h[8vA¿š¥3(¾{Õ§¹&*!ób †É¼Àò}îôhºG9ªl<ÜžjÌûy1P*°Œ’x  N˜rÃ×¥Où½ª9FçEK8¥\\$yïÖ±¥ýìì}ëVsåÛ»zVT9'wã@ 4GÉuïK ûc ŽG¬"‰>ST'F·—v8  ¨å€ÏaDÓí·lÇ¥Cm:8Èêi·í‰Ó  k&ùCsÖ§yGš5YYc]Ížj³^#ž=hsÎ;)æ«ÊëŒu#­WY²œS¡‚IC7c@¦RUÿ»ëU,Dfá—â¯jî¶Ö¸V&‰p­u)cŽ(FÔ•Ô†8«sR`"@j´P÷ªsžrkKP”n P;™1lE2Èù_¼ÉÉÌYíL3*÷½nZÜ ¦ëÍhê>ÎGµs:;o»Àló]-ò³ã¾(NLÝsë[·Bè+K»#= lÝà©úPR\g¨/X š,Ô³±Óo€hõ¶õPZæui#ù8+²8eAÖ³õ‹a#/ËÍsú\óDWçlÕÖ[\ÛÝÞÜŽ9¬ëkK}죧#—up‘ÝŒíüh´{HZ<)ÆEUkR«žµ…k«ê®äc޵±¤¥,ŒJap}=iZðÈ¡qŒTPÈ“Ü|ØÅ^’É ©  +µÁwj•Ú$’äóïTbI‡½LÐ\/'8·ao‘Ðf‹Á²@Åc.¤öÉ´UF¾7NQ›“Ú€&óÑ*Ö›n#ÄÎj„䜃[–ê#ˆý«*ÿ—£7Âÿ«ó= ÿÈ©ý{'þ‚+kMÿuúV)ÿ‘RúöOýVÖ›ÿëôª§ð¢*üoÕ—h¢Š³0¬½cþ=›éZ•—¬dz}(§ü‹qÿ×»ZàíäÊ çž+¼´ÿ‘n?ú÷oë^{æ¤qžqÛ“I –&›ЦfD'^ãRDˆ95ÎÜ^O<ÅFvšb4u=]GËIúÖ3Mq;¡$ãÞ›,,¸ÜO5¡ehÎWƒÇc@¬b-(\r+¦‹åñTlí# ÕÐç¥ArÄœUHØÀt«“¯ÈyɪB&ÚÜäаq­E:äc’*HÈB §Ns“Æq@®ê˜ µ­¥ån+ÏÒ²oW¨®ŽÕDvàÈö §9tëtÊL˜ƒ;Õ‹r@â€+Ü)½>ÓnÜóLŸ÷Ò sŽÔÒY`ym)拉U`õª%™e g§zŠâlFH'ÅÉeÚ£Ÿ­d\e~cWÆd9þ‚²µIÕÌÐ&³¨4Qà63Ö¸Çv¸¸#qëÞ´u«¿2VL’+6ÕI“+ÉÏzuÄ[»TQRO5oP‰£ [‚Ý«=yÏZWÁnüÖ¦….ËøÏ½f2ü ŒÕý"6q¹nhÓlæýà šè¢pÈ>•Èar)ú×CgpÃrE]—yÏZ¤WqÞ¥y·P¤€±‹«Á¶áqÍhÆäF€zSï`GØXgÔyÁÀô ’jrcqž½±àõ™{r`†I$P˜MÞLÖ½‰ ç¡Ís¶eäº'¶zÖý¾å>ù  ]¤Rs* nF9©â|àPàbe'Š×‡ «$äa½+VÙŒ@ u™¾*µœ¤n¸éW™²vûf²î.ÎÒy4}7±ÍE}7•zãTÐ6rOéYú“nuP*†Î#$¡ØqZó¸Kf&«ZÄ#…GåF¡&ÛnOÞ  ¶ ¤ry¨/¬ N]W޵{H^ÖŒÑ,©´ò( Îä°òän;TòÄÏ€1Н`ð±dè*¢jEÃ#Ö€%¸·ta‚yYãb95dßÄàï?7nzUw¼Id6ý:Ð|ÞiN}h°ÑÚyÆüûæ¶`†IŽ#ZܳÓÒßõ  Ööd€àc“Xaˆ½®H+§ÔäH Ú½Hæ±ììL®\´nÒÙ/íO˜TšÇ¼Ñ䨧Ý>†µ£&Êä)$!­†e‡=苉0Þä-]ŒD/ž+bëF.WX“i“Fø h ‰UGTnHHÔšÓ‡G–R )"·¬4”·•±@t9`tŠ7j~©1["  qY:ÝÂy[–±\Ç ¨ç'âºOßno_,ÿèUçöR<óylØ«Ð|›õ–?ô*ç«üH|ÿ#®‡ðjú/Íš_üÝ×_è+xýÚÀÒÿãþëþºÿA[çî×AÈsw¿ò²ÿ®ÃùÇñø'N´Ú2|ÓÇá[¿ò²ÿ®ÃùÏñš³ZÚ>aþT†y™²’gË¥tZn”#Œ6ß›jËK/†“: V¾Å†< ñíLG1¬ä"®yéN°b¬ˆÃå÷©'ŒÝÝmì YšËÉ‹v9€RÒ#¸]ñ€b¹ç´’ÞLp+¯Ó§Fõù¬bœäý(”Ib ÒK4xÊæµ.ô@ )œÔè’Èy\zÄ_6Y0 òkIÒÚ/ÞL¹¥i¤$• (Æ0(…Úî¶l&8¬ëÅ‚ ÷³Ò´u¥ŽU ’0+”In°ààš›R•îvÞ+CHˆyG‘QßÌrjî•Ȉë@ЯÊ:Sœ§Šd-•ÍHíõÇJX•‚çøM2TÈ=EHŸwƒPLXçž(Ø!88¢?R9¦¬€“ð£xó“õ ÌÅy=ëSÝí­+—sX²1¸¹<@la³.Àç˜ìe•œüV•üž]ºÆ?*¤Š¢D¥Z·ƒÉ\°ëÍXÈ<ô¥pV<ŽM,Q–S‘š«*‚z†c¶,b­Î 0^˜ôª·Ê\¨5H‹‡f˜b5.6(4¡.È‚Ž¦«Â»aïPÝ9šçjœÒ®"%µId÷§\[,°¶@Å:<þ”“ò0[Ú€0ši&Tœwª··ª¤y­ÄNz×5ÍyfyÙAÏ¡ ÜÝI1ÀÎ*{9¥çUÛM)r7üÄv­Ë{UBøP6Ö?*îíÖ´|´‚ëÚ¬ÃÌ285[SusÐPâk¼·–¸ÍciìT³giéNÖçY.XƒÐÕK,çss@.”ß¿Ü{U»·Ý)À5Ÿ¥I¹ÉÇJµ<»¤8Jæ}¬_JdóAç‘Ö«Ýɾç`§ÚFâB89 ƒÃp;qç&ºMPˆ u¬Í˜è+KWoÜ~”“¦.n›ëZ7…£'­RÑ¢&áŽzµ¡~¹Ïá@tó™t¢ú1¸ äÓ¬S÷ÍŠuâm•H$úÐtº(íA2êBç–%ië¶ ! ‚öÌè+™Ô´´JòÆ~jë­p"~9ÅW·E’Rï@kq ͤ¤M»hïI¡2K•c´û׍߸~ÞîØ œb¸MGÃ’YÉò.FsŠuž©ƒ–àÖÜ hÇÍœú×%¼ñLr§”ø'ž9äàsŠï4û•Y‰<ƒ[‚xgx®ÛP1º†f¯%ù¯œžy  ÿì?=ØïÈì)!ÑÚr\tïQÁ¨²U¿ ÔÓj¥“ð lêàtíT,›óã$šÓ<‘YWþ½¾øðõ_™èGþEH?ëÙ?ô[Zoü{¯Ò±[þEH?ëÙ?ô[Zoü{¯ÒªŸÂˆ«ñ¿V]¢Š*̲õøöo¥jV^±ÿÍô  vŸò-Çÿ^íýkÆo¯Ÿ%W'ŠökOùãÿ¯vþµã¾B($õ¤†ÌøÄŽ™$óSTQž½sW%òúqUžšeUÄ1SÎl(ϽoYAå/#Ÿz}†˜±&æp( @'Phv^xÍ9pKqÖ«àïçµ%=â  gŽ´ƒÈ§NqÇ¥f»©aŠ"2zšŒã#ŠŽRÛ84>™™33[ á1žk?KbbxÉô­"?tNy  NFòMJe õ" ™ÇšGJgúÉA  ¶‘àn~ô÷ˆI7K R@âˆÀØÌ^”FK`d$qšÎ¸°EŒâ®Ý\R?ˆÕˆÃ;èœ$™ 7“^y­jE]ÁÎs]GˆuTŽFyýÓ\JI'Ÿz¯,$¥‰<ÔÖ‰Žj¨>Ôáž0Ns@5Œ³íݽ*ªcé­¸¶XóR ç¡  ¶‘yŒÍmZZ”ûÝ@ãdg'ÔUXlšèeóƒÖ§µ°.wI[Ä©ò¨€9Ë -gß®ßÀ¤˜ï ëˆóÿUµÊr+OÁè#¸ÔÐtWAù®z¿Ä‡Ïò:询üѱ¥ÿÇý×ýuþ‚·Ïݬ /þ?î¿ë¯ô¾~ít‡7{ÿ!»/úì?‘¤×;[3‚ÇùRÞÿÈnËþ»äiú¿ßƒèßÒÊX€*•Ëm H«à‚¼Š«qØ@Í1–* á'kFÿoÙ›=…gÛ~îø‚;æ¤Ö.Y`¼æ€*ir‘q´q“Åo®G\W9¥ÄÞxÎy5Ò(!FzÐ[H© =qNòÂ¥E+ª)ÉÅ+Hþu—w|pQ &’æôÈÛ#ŒÓm´ó)Üùäçš‚ÚÍî$Üù#Þ£ÔôµÚ<±Ï¨®…-„(0{t¦<ØdÐ-og+°·Ö ^ñ Ï¦HSÍG €úS±¸cµ1XÆœv¢9 =ûP× ¼~5^Bz’µIÛŽæ™2€FC:cÖŒoÉ=½*E(g< ¤8õ  —Òm\s€1Tíá"#)ëO¿ÈêŠ2M:ã1Z„Î  '¸Ž@©%#ÙŒf åÆÜ—«ÑXÈàK.qØPňPBç"¦ËL‘DH z mÓ`T‰;Z¡tìüvô«²®MgJÍ»¦M6,BŸZšõÂÚ±šXFlv¬û™^i<¾Â€`†WŒÖ¶Î„Õ; N3W¤?-*…gÒªÈ Á©YøéU÷|‡ÔÐ6§!XYsó£ek°n&¬ê™{½Í0FV%ŒúÐ’äç=ër—åãšÉ³ƒljMmBp õé@Jëy=q\Ưuˆ‰íZZ¥ÖnkÖîÊÚ¹'9è(¿”½Ë8&µ,agÜO t¬';å¹hä÷¥léH3c(݉çšu iÈæ¥2ŒG¥sÒ®ëÒksOÓ÷Ê[oÊgÛÅæêtæº{CFàÐŽ•YÊ8©µŒŽ{Š],eɦëY)ÓµSÐÓ.Çêæ 03Šfˆ¸ˆ¶1I¬É†t éÀ´„àc½_žØH»€éYÚd¡c$÷­S)û+±‹¿lÌjpçêj)¥Æ÷œô¦Db¿ç@vîDNqíQÙ?ïˆïš[yÙÛŒŠ¯„\œuÍtªÛ¯\Õ-JåSh© vÜ ŒUK¹ËÝŒ†€(_hq?!G5'‡ü¶ÎÏÆ»#þ¯q¢X•ãŒb€8IlÖ9”Ï¥C>—/úÄÏÓ]ÙÁ•sÍUx¤@AJÇ·I‚Ù㱫a‹|£©«) H@š ¾ÉÕq@Zdl0ßiJ¡Jc½W°Œ¬[±RJßé®}xü+*ÿ—£7Âÿ«ó=¿äTƒþ½“ÿAµ¦ÿǺý+¿äTƒþ½“ÿAµ¦ÿǺý*©ü(Š¿õeÚ(¢¬Ì+/XÿfúV¥eëñìßJ§iÿ"ÜõîßÖ¼~V ý+Ø-?ä[þ½Ûú×’Gnó‘Œã4Ø[!šÁÉ­+UVÉ_Ʀ´²ÄxýjÌ nS+©àHßÉ*ÜØXÿj \¾@ÐI žÝiÀcšfpþ¼Ð»³ÏJá'½6W_84ÉßîÜõ¦Jqù"€3¤ož£ÜÎàdÓ$oÞZžÆ34£¾:ÐÅš \Œâ­6uãéU­à#qÏõ©fPßS@×M¶PA9¥·p¤±ëž*)G›)ò:Ô2Fñó“ÅoG¸¢¹4òá |PZ9’Ùyâ¨ê3˜ØÆ PšS,ìI⋹Ä'<ôØÇξíeø†íc…°ß…qšõøy6“øW6NNjÕôÞlìsš©@93œ€iµlX#·ZÎÒlV²?jè#LBIôÅR°„@HàóZÑÂ<œûUV+ZÍ–Hü¨¹ˆ`õ¬«»??yÇ#½n”äúb«0T‹$u PÎm™äTºD"æá¤nÞ´º¼+»x?‡YDN:ûšÞØ#ÛŠ«váÎU¬¨o˜ç=*ÌŠ\("äbèò:GÎÒO¤º`eÎ*¶ü;f€5"9#~— ζû£>•£ {PŠ18ÈÅ$À )b`ÊI³`¯Ö€.ÄÙEçµI¿h'ÔUKiGמ˜«|½Aï@n‹n#Š¿dy8¤t…G¦3PZNCÎEi:e€Œ0<-*H¤õ¡¤ÁЪÜÍA;ü¼~4¢PXûSd`@ÇOJF@Ê9Ç0SÏÐTNÀcÓ5*¸1õçë@ $–ä*p¸ÇJí'5:`¯'õ <Óº‘ÁéÞ“*O­Jcƒ“õ  W™aaŒŒqX«4ÖêcâºVSœ}*”ÖbG'§Ò€1aµaÎk µ¶X! µ¨€v«ÅÂFyúЗ۷Z†æå!sõR}I#M©Ë ÏŒË}8<â€q4·R:UË;/úÕ›k5rG"­€{Šdjû£éRŒg8™P£ßšQZE½'·¥[ð˜Åî¬?é¢ÿ7ª›‚óV|$ÀÞj§þš/ózç«üH|ÿ#®‡ðjú/Íú_üÝ×_è+|ýÚçô²>ßuÿ] ­òFÚè9r÷þCv_õØ#OÕ¿Ö[ýúTw¤mÙ×aüKª0ó!ÉìßÒÌðÙ¡“޹Í=É$Œ”x8☎~þÝÒQ*g"©…’y0ý=릖$`ð­W[‘Ê€#°±Hð{úÕÒ·gÞ“zG[¥QºÔäš·4«DëX³Í$íµsçLf–îQ’vç¥kZÙ“su  ¶v;~fk@G‘´`T›†qFB«­7ËäœçÓâ2hÈ*~j ƒ÷Nh¸@Z¯ÞåO|¹=~•;”¶z”3&ŒTI„cÀõ©BNO¡wahÙ_”úT7-¸œqR•äÒ´a×ð  Ñ(ò²Oªy€³ü¢­ª» ç=ª…Ö(™É4 æÝ4§9úUkëƒ$Å„V¨ Bx EeÏoˆÄ‡9j³§[´§ÌÀëÒ¶$o.§UM: SRÌ7 6ÞP7zc7›1¥BòÈ\Ñ Û³É4—J£ø†+5þÿzåÕ¸ëŽ*Š©$z{9H FÒ#5É'š’åø(*þoåÂŽMSºC ªØã½Y¬‘‚§µ.¤¿èÍŽ½« Þi “ NÜÐÓ ØÀúÔGŒ€¹¤·—Îç8«Vå¸aùÐ3t…ïG5:AÓ b­]7Î@c· \„…UAÔÕÃ0A€yÅd$¥H9Á©YË|Äýh=F]À“Æç\>¿*˜0?ZèµK¬óqÒ¸íYÀ õÍfÀ¦AŽ{ó[ööÛcþ.•ƒj“$r uvfTN¼õ  xa+b à˜Ù€ãvð,V*1ÛVÔbÑØã  zU·©;ÖåÕ¹†^œU/F>ÔìGCÅojj¦Øé@ÒNýß/Ÿ­X@ÛÔTZ;€ŒGZMfS€´&•-×gkmºéT~5­§.-ùÖ¦Áµã@‘½­²Ê ãóVãÔVK&ç³ík¸cÍÝ;Û«ÐÐóJdpƒMiIÛT'ŒŠÆÒŸt#ŠéuöZ¯| eš/Ùúu¨6¬WcT¶«[àœ7½Er Ü‚~´µýÙ£#¿µRž¦§‰°yÎ hÝ,sÄp£Ñáó/ÀcòƒÍBÇlGnrzVž™lmÂÈã ÔÙÛ0„.|]¢ÂA5Æ´Í1Üç ôSÈéMÂq?ï‘Jàtú•Ò­®AúÔÚN¦†×ºW%„þâß"“û‰ÿ|Š.k.¦2~qŠ«6¤…'§Jå>Oî'ýò(ù?¸Ÿ÷È¢àm]]$é´š‡H¹K"gY'÷þù|ŸÜOûàQp:è&ìîéÒ¨Í|’HÍ`üŸÜOûàQòÿq?ïEÀ½u¨Fƒžj²^«­Eòÿq?ïGËýÄÿ¾fÒùH5z+Ô É®cåþâß—û‰ÿ| .jš‚tÍ9ïÓoÞ®#+ýÈÿïK•þä÷À¢àvÐêj²`·¢ºŒey#­yÆWþyÇÿ| 2¿óÎ?ûàQp=$j1„ÚŠÏ’õàK»ƒ×šá²¿óÎ?ûàQ•ÿžqÿß‹èq꫸|صLu$#ïW›eçœ÷À£+ÿ<ãÿ¾øQp=5ÎIýiçSM½@¯5ÊÿÏ8ÿïþeçœ÷Àÿ .¤ÿiF@Éü*eÔP/W˜eçœ÷Àÿ 7/üóþýð¢àzqÔ“vr?*uHÂò¼«rÿÏ8ÿïØÿ 7/üóþýð¢ã=SûZ<ðÔøõtß÷†+Ê7/üóþýð£rÿÏ8ÿïØÿ .#Ö¦ ç?Z_í8÷}êòmËÿ<ãÿ¿cü(Ü¿óÎ?ûö¿áEÆzĺ²"äÈ?:ɹ׼̤mÅyîåÿžqÿßµÿ ]Ëÿ<âÿ¿kþ\öÚPä;·×5³k}CŒyNåÿžqßµÿ 7/üó‹þý¯øQp=tꉜîàÒÿhǸr+Èw¯üó‹þý¯øQ¼Ï8¿ïÚÿ…×ßR@¼0ëH54#‡ä;Çüó‹þý¯øQ¼Ï8¿ïÚÿ…×Fª‡Ã?†5XãºÔ²Ã—_æÕã{Çüó‹þý¯øQ¼Ï8¿ïÚÿ…g(óIK±¤*rÂQïþw=ßMÕã[Û“¸s'ô¶u¸¶ýñ_6ïóÎ/ûö¿áFñÿ<âÿ¿kþw3=ÎïWŒëgpâQü?TÖcÝÌ:0þUá;Çüó‹þý/øQ¼Ï8¿ïÒÿ…Ù¶£ Õ)Ö#)÷†{WŠùƒþyÅÿ~—ü(óüó‹þý/øS¸ÒuˆøùÆ}é·‚wŠñ}ãþyÅÿ~—ü(Þ?çœ_÷é‹êWzú–eGªð܉Ÿ{°çÖ¼×xÿžqߥÿ 7ùçýû_ð¢à{ ½ìñ•üêÉÕP¼?:ñ]ãþyÅÿ~×ü(Þ?çœ_÷í‹ícUˆH¤mZ¯Þ?çœ_÷íÂãþyÅÿ~×ü(¸Çý¯¨üéF«r­xÞñÿ<âÿ¿kþo_ùçýû_ð¢à{+êqpÃ󨦀òÃ$Wï_ùçýû_ð£rÿÏ8¿ïÚÿ…ÖÛVN#Òƒ©&޵䛗þyÅÿ~×ü(Ü¿óÎ?ûö¿áEÀõÆÕc2Ô¬G³‡¼rÿÏ8ÿïÚÿ…—þyÇÿ~×ü(¸¨5HÛ,O5R-Ed¸bÄb¼ÛrÿÏ8ÿïØÿ 7/üóþýð¢àz=Þª’\,JÃÐÓnµ(Ùî ó­Ëÿ<ãÿ¿cü(Ü¿óÎ?ûö?‹ˆõ=V4¶>i²êÈÙ`Ãé^a¹çœ÷ì…_ùçýð?‹Œï¢­3nµn=E1ÔWœeçœ÷Àÿ 2¿óÎ?ûà…ÞÍ|0›ØDw,+„ÊÿÏ8ÿïþeçœ÷À¢àu‚øKwÜ[‘êhˆá^o•ÿžqÿߌ¯üóþø\þóRGL*‘¸‰£ÁÆkÊÿÏ8ÿïFWþyÇÿ| .Vš‚ÛÍØÍZÈ û·®S+ýÈÿïI•þä÷À¢àt_Úªä±<ãµ5õÀ Ø®åþä÷À£åþâߋҥú. 7>•,ú’ºìB9Êü¿ÜOûàQòÿq?ïEÀ›W»÷`öë\¬×Ÿi< é>_î'ýð(ù?¸Ÿ÷À¢às°H“ë]F‡ W@Þ¹¨r¥‚ˆÔ±èM,¨Ðcεh³Ó̇n1EÀèµäò3PÁt¦Õ—=k¼`dÆŸ÷À©)/5­cþù‡ ùâ‹Ôé7 àŽµsQÔ—ÉÀ#Âù‘ÿÏ5ÿ¾M ´÷™!±–TY ,â'+ E½Ž×I¼M‡š5KŸ6UŒW òdŠ8  â­YÜ´Wù ¯jwIÓÆl—'ŒW=¨88ïÞ·lfBŽØ®wQ`ú^éL ÿ¹^k7U´ómšDPqVgp 8ÅZDó4Ò:äPe,–³î õ®ŠOí¨b=ºsUÒÅQdb½+*9DSt<ÐU™hœ7µSŸÌGÚÃ8ïW4©ÞhÀp|Õém#Žh³‘d‹ñT.ãòî2:zÒ¼3ZÈJ—½Cq(Ÿ´¦ã6yÝÚ£´ù¢ëÅ5y´ ÔËê}h䈩ÇZ}«b.sŠFQ"ã Êü€PMBo—mS±S$û:ýÀv' §é£)¸qí@f-I¬‹v'Uˆ{·ò5~îB&²ì }UOP3üe_øRôfø_ãÃÕ~g°·üŠײè"¶´ßø÷_¥b·üŠpײè"¶´ïø÷_¥U?…Wã~¬»EU™…eëñìßJÔ¬½cþ=›é@í?ä[þ½Ûú×'!Ü©®²ÓþE¸ÿëÝ¿­q)o9éI ˆxSÁéQe²A4òþ:T[öýiˆ\Œâ”(ûÆ 2rÙªwúŽÐQ4šø»S–ÍU€†ŽsYèŒóry5¯m%qÓùЄ$óšlßx6zÔ·˜cZfTPÍ>òù‡œV̆< ŠÍÓQ¼¢ÀÑ,H=( IòrSBÇ^•£ WQlÔSBBãÿ­@–*àþtɈQ€y§d!ˆUF-$»»P€ù¸bvH­ú â’Þˆ\¥bkÚ˜Hü¥8'¯4ÈxŸTÞAú ã‰9ç5V»ûMÙÁÈ^P ò{_Δ­)èW¦jAƒÎH¦m tãÒ­YX´ò`Ø4©¡ØEzû¤=Fk^ùÞA…éSéZRÙB[vxâ™~!$þ´˜­ò/Òº¡ À£uHÉ×s°T™ŽçÒ½WðÄxjâÆ1£¾Ó`Žáï|œ ‚rdPøù€¦{{WŸX_>Ÿ¨[ÞGrI‰e©#¦@#ùÖµ¿5¸5I/ÍÛMæÝo3»C†í³wv¡íoëÈ÷4|1•u¢ë1˧ o¢°šaq+TÇÝØ¸àóׯ7„ÞÒ[)QÑ´Ó¥[«}ªþxÉ•˜çj£g†ä Ó5ÌiÚÅÆ–/EºBEå»[ȵ®ÞzýsZ6~/¹´ÑàÒÛLÒn­¡bÊ.­ÙÎâIÉù€Ï>”?ÓüÀ¡§iךÅïÙ4ëvšb *oU;G¹ SnmfÓu´¿…£’'hÕÁ ppÈνR–A4®åC1mŠ0«“КBw·ºv“¨ÿÂ$¶V go},‰(2:‡Qó?Rzý3Å^JÒüB× 6ÖÃìš[+Û&Ã,E¶Þ­ï\4šõä–še¸1Æ4ÒÍo$`†É`Ù$’#ÐUíCÆz¦¡i¶Ö×lÂášÖ†IGGs““OOÇõ_ ¿¯Ìé¥C»‚þæëI¶³ƒHÔ’m£*e‹vÒx÷õ§Ç§iwÛ5;+;+É!G…`··òฉ(6°åNXôéé\–¯âÍCY´û,ÑZAIæÊ-¡Øfï?'&£‡Ä÷ößÙë À‘Ø«¬q„;_~CòH>ÞØ©¶Ÿ×b¯ý|Êú…Þ™sä^ÃåJÊ$*ÊzW‚>•WuO©j³j“Å$©KK QB¤" èI=ÏRj–êMºÕê7SmÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€:] Çidnv“,„å•K0ã{f´ò;¸Þ £‘£aÈ’&Qù‘Ö¹{-@Û/–Ù)œŒv«rêÛ—‚ÍÛ#Rtkx—Q¤þÎv¦{œ‘ŸÒµ“Q½6ðÜ<°•“fäÃ;½ý+›·¸{YLƒ-»ï_z²/-•)Û‚{àc§â˜½¼ž"Š A/ï à’?¿­t·:ä–/‘íu V çaÙyŒúuÆxÕ¸•®¾Ò$R ŽÃ¿Ï­k¦¯lÈæX¶3²)MÛ‡¡#¨äןŒ„Ü“JëÈörÊ´£ EÉFWÝö$ñDqȰÞáDå¼¹ ÿ‚~˜®z7Ĩ}ÅXÔõ/¶EbOº¾þµF6ýâýEtá£8ÓJ{œXùÓyJžÇ£iÓméÅdN¥¯óÛ5£§¶Û<ãµgÝrIõ®“ˆ³p£Êäã»cÿfã=«¸epO&º‹DVxœ¯­eÚÄ'ic#ƒ\Χ¥Ëc;HŠJžµÚé°5ØzÕBÕ'…Ñ”tâ€<öËVhço5ÓØëi"€Ä{šáµ«)l®\Jç5J+ùbëâHn“†++PÒÂÈÙî+šÒ5™DªŒI½u&í3““ï@«,öÃeEOeqæJÀqš´©Š©%«Û7™#¯  ¨P§RrjIAKÚ¨Ú߉J+`5Y¾œöÆ€0¯_Ìm£ïUÛ(ö¨öQa3Mæv­q±FòL±SÐT:TdÝ;sQ]HK¶jþš  =Íe_øRôfø_ãÃÕ~g©·üŠpײè"¶´ïø÷_¥b·üŠpÿײè"¶´ïø÷_¥U?…Wã~¬»EU™…eëñìßJÔ¬½cþ=›é@í?ä[þ½Ûú×IcŒž•ÞZÈ·ý{·õ®´¿sh¶ /8"¹ÝLÉ®—S¹igP£kœÔ l’(4f’º{ŸZÚé6·CN×.|ë5¸{ˆ ù1±ÎAýÑÀÏ&¥è®5½Žg4fºK}.[Ÿ:Ò?ØßiLHÒ|Ä®æ7=µPÃ×R[«‰íï¸KFùÍÜ1ÐŒç¨nßׯù×úôÿ3+4f’­i±ZÏ©[C{$‘ÛI Y2('äÇÒšWÐMÛR¶hÍlC¡½Õa¿y#MÌgjz±†h—D–[‹h¢ŽÞÙMŠ\Ë+NÅq˹#‚r8òF*o×úëþC¶¶þº™š3Z“x~î(e'µž·+$R1Æ_a+•ò1K/‡5%Ê!Bl¾Ý’Ç,g>÷lz÷§ý_p_×ÞefŒÒV–¦Ç«ë–¶´Š“ ‹¸RxÈ>ž”š3[Pøjõ4ÍJïP²¿´°«Æe£Wbê¸;—ž “¤^_Å}|ïo Hªì˜$ Œü½)ÌÍNj’H<ç>½Y ‹T,bi¯Bg<明³H‡djÅ9&¶glÄWn8¬È›ì챑ÀkE˜9­¤¿Ãä°9#¹”vYÕp}kMMÁÕp=hI—8•ÓhvÃË2°®~(¼ç‡9®ÒÂ’…$Pw%TX’qƒšÙÔä)­aľlÙô ÛÀR]í÷ia}ú‚ûgùU«’±E€yÅW±MÒZÊ¿ð¥èÍð¿Ç‡ªüÏRùáÿ¯TÿÐEmißñî¿JÅùáÿ¯TÿÐEmißñî¿Jª "¯ÆýYvŠ(«3 ËÖ?ãÙ¾•©YzÇü{7Ò€)ÚÈ·ý{·õ¯’ç{Œ öOùãÿ¯vþµâñ€õÇzHl{Ÿ” µ;qŒ UGAW­I‘@ÎiˆšÖ6irz•®Š:‚«Å®?½íVPZ± ÎidlŒŽ´ŠÃaã¯ZiJ«pq5Amò¡oçS]°c­DÛ~”$KæJôéR2æ`{RZ‹“×µ:GP23ô »@5EUƒä±Çz²KHÀ·JŠiçGR—É›#'žµÄjú‚Ç ò 0­­gP‰'*?ZóýNð^\’¹Æx I¸sÏz/Læ§kvH”ž„TRFËaš¬zÒ€Xqš1Í(%Oz×Òm†ñ#€85fòCü'–à ­ewˆ àïÅYˆý«P‰1À=è£ðü"ÑUß«s]J¼d¨^zÖm¥ºyxlpµ(“gœzЗž@eÆ=q-l;‘Åt¯#,EÈùjâuøäº—æn{¼PnøUar“ÜÃ5¾–$ ¸x¾mö‘žêÍö¨ÞX¢´¸iÀòÞxgIî$ðówô ÁÅ]ðõ´>Ó-®”w°D ÛÏ#¥\ºÐ´Ëù…ÄÑ;1URRwEuS•Ü€l{æ’Ülæõféì¯#¿ Ás¥¢[¸¢Î€0bq #t Š¼Þ Ô~ËcxÆÒ +Ò=Ç’ó$C#j1V8ÎXðÆ+Tø{LišW†Iˆ9’âGÛ†åŽÑ¸Å$ÞÓ&Þ»³¼kq"£ë” Ž˜Ç_SBÑ,ê·a£Þ^DªÏ*†èHŒ×;6¹®Z5Ñ™´éÒ8f“d.¦DrF\í#žsí[?`Ô®Qíõ ËìåFIbŽÍãfR1€ÞiÇåV&Ò,g‰`Ü'"“ça¹T’£¯É  ‹Ívþïn"ŽÛì63¤£†ódÈRJœàcxÀÁÎ;S¿uÞÇ{qme21Á%¤ŒØßµXß½Ï.0N+^}N¸¾²Ûî›*Çç`¬Wî–Pv±‰ žÒæyXe‘ßøžæF)óù o“ËŽ”€¾&“å½¹´‰æ¶‚ð¼L|²˜Â·(FAÉ®«OÿgΡ%³ÈܳÆÊc§,sõãéU­ô=*ȇe®$•¤$IÛ·Nv޾”‹¤ÏaÅ£ÜÇn„åÅÒËsô ™Ð=:S‘â ©âÔncµ1Á8K,Nn;§#k`Œ¯·O4íOÄ¥…ãYà \ÏoÍ/•e3‰‹…]…¼¾«ÏãZçF†î´Ö+‰æEŽY"Vˆ2«\ Ä©õ9¡ô :C 4sï‰v,‹s(r¹Îƒe†{i!™7ºÞ®·w?fûÁÔ6¡&‰ËæEC¸Àp_¦;u­mþâîÚä]ˆ¼ûiÞh ØÁIÆMNúU”+492Ì“¿ÌܺciëÛhã§ŸÙ6^fÿ$†óÆC·ú»IëéÛ¥?¯/ø!ý~ð&ÛXÕßٟj”êqùð\w, 1Ϫà¨ú­mnj/l ¶"ÛOŠîcp™wv©c…?1Ï^•¿iom¼P(Ž(¼”îU?»“ÏaÞªÍáÍ*â8KRV„*®3è­ƒófÍÿ®ÿðúüŒÕñâòV»’ V‡Ì·ÀäÈ6ݼ6Þr˜ÏR~k«È#»†š Т_³I ÚavÈG9‚9È ÖôþÓ.¦yn yK6<Îȹ;PªqÆ@[èm´‹"C#H² CË<’6à¥G,Äô$c¥‚Cº¿Ô,£¾º6ˆÖHb‰rΉÃc _ÅjMç¶½–ÛÊe-å`ù€Æzô©×FߨòGhî~a0’hÀäáSÌP¼ú~U0±šêÆKmZX.•ÈÿSB00@ûìzZc3µ]WS·Ô.ã²û'•if·N³#“%òxN¸=j³ø’öHî5"·}´‘G$ró_xBH9ÀÆñÆqÚ´/<7g¨êÒ^Þ‘‡ÉÈ0¬ÄîÚÀ0;ºŽ*ĺ›=êÝÉl  ©áØ+û¤¨;XŽÄƒŠKÌOÈ÷ԯÚT´Óc±·i&¼v2Dì—( »$þ•.‘¨ßêºÔwÍVÒiöóI£?,_;Nàñ×8·“eë4pm‘L¤ìÖ0gïÜôíPÊ/!í#òg¶ˆEù’`÷CÃx±4.Ÿ×øú‡ˆ%éjí r´@»dŽeQžäg#Þ±!Õõ;E¼½’T¹S}$Fbvt&rƒq KÙBƒÆ+mtûëŸÝê—V—6ùW ³Äw«S»Ìn„tÅ8èc¬Û’·D™PÊû Îr8S‘œ€hþ¿!™ëš¼ÐÁŠ(®%½û:Ï=œ±£§–_pŠ·luíOÒu½R{»%½[CÓÏ£+#ÄH'%ŽAÚ{ qÖ¶"Ò,áH$¯äKçFeä!°W9bIàž©¤ØÆa)<—‘ãùÛ†|î={äÓ…ª^ϧëÚ„öÂ?8ÛZF¾`%Fùr@ œgÖºkq:À‚åãy€ùÚ4*¤ûI™ªð韺ÿF?º#_Þ¿ÝF  óÎgŸSO¹‡W{†k[û(¡8Ú’Y³°ú°”gò¥ÒÃësk:Ü÷q$/§¤WsÚǾ-—»“‡²úc54楨G§Ãh–°ÝÏ ²Êò«2/–ÁP<“ëÀõ­ˆô«8ŒL°á¢™çC¹¸‘ó¸õï¸ñïPËáý2khmÚÝ‚BXÆRWF]Ç-óyÅeZxŽòêæÁåHm-.~w…äHI Á9Îk_\Šöm-ÒÀ¿š] Ü#²n‚±èHÎQM“@Ó¤1¨…TD‹+ˆ×oÝ>^v’=H©`Ò­áÑ¡Ò÷H`Ž%+##=Ô‚? u9«VÔµ.öÞÙovÛjr^m›Ë ¥“ÍV9ä‘÷½³SÞÉouá˜gµmB9Ë›h¯¦V—Ù‡*ÿ6=Iàq[¢Øì’†Þ3¹V ^"®T‚zžüÓÓI±Ž XÜ,V¯æB ‘µ°yëÏS×=sG÷zæ‹}§hèñÏö”Xâžv%•”üæNrÙ1Žx¥–;›/Úî–álîĈ?Òž@ï·pàÁ\þ¯q¤ØÝ¼ï<ÚeEv,Ùœ®~\xÇ4È4[ {ãz‘H×6IÂg®Ðąϰz‹ÐËÒìDšÎ¢a»¿û$ öP¯{,›¤ 30ÜÇe@ǽ?ÿi·Ô5;·—tm‘Æ÷ 8T`@"FùŽJž­tÓ­c¶žÝ#+ìï À–c–9ÎGáÒ›a¥Úi¢O²ÆÁ¥ »É#H펙f$ŸÎ„3–´¾¼ôs;Þa$9㨨ˆµom,«om’X®®L,jèû@À`P¸ä•³m¡iÖ» p¹d›Ï $Îí¿nÜ’Ä“òñÍ6oi³§–ðËå—whÖâEW,Û›r†Ã{ŠHoúþ¾ãÓT¼’Ac§Ego+Íw#I"3&Ô—oÝ bH':ÔGĺ´¶_k…,•!Óc¾š7‰}Û²ªC|¼/pzÖ–©á˜ï!Š;7Š×d’H\¬ŒÙs–ÚË"‘“ž9ÕjßÃú|d1´ŠmÍÙ˜‚ñ¨8¼y´-¿¯ë°uþ»™Rxšõõ‡‚ÖѤ·†xát[Y]˜0R[ÌQ±vîèzàôâ¡–úûR¿Ò®ŸìÉeý¦ñGFó2‹"ä¶qÎô溢؛å¼È“¹1Ìè Ê piƒ@ÓWPË,âC(Ä®y-³;sÉ禺 ÞÌÌÕµ)¬5[Ãk ¸œAj«,ŠOß™“œ:ã­V¸ÔuiîílþÑo ä:—ò$oåH¦q”ÞqÆî£5Ñ\iVWS<ÓCºG†;ˆÈFÞ½f9¨îtM>ïÍó`mÒʳ3$®¼(PÀ‚ œ qŠHo¯õÐÆ—Äz€Ödµ†ÛΊÞxíåT´™‹î YÃŒ¢»898zS“_ÔæÞà­°°žî[eŒ#@@ÿ1mØä¡ãúÖ¿ö%€¼KµŽU™vå’y>ѸÃ÷³YÑx\.¾5'¸O-%y’‘Ôn`F[.TœÈPI  ûOê3XÜ^5˜0ý†K¨ÏÙfceÎÜ>Aê¸è~µÓéæìÙ£^É“79†2‹ƒÛ›ùÕh¼?¦ÃÄ1à †á7‹Ï¦ÓÔ*îÂÿÀ@©áÓã‡RšõX—’„/eU,Gþ„iˆÎƒíQøÊhå½–X^ÏÌHNGóã€:ŸsÍRÔçÔ-|I¨]Xµ® Ó£’Dï¤8·¿'?Jé>ÉÛ~Ù³ý#Ëò·äýÜçéÖ©ßh:v¥sö‹¨Ü ±3ªº‚H  €Ã$ðAëK¢þ»«ù~†Lž'“ûNÍ`x¥¶Ò7‹ìÒnˆ²næ\ìÏO—Á¨!ñF£„w—ÑÚÊ“ØIyÀŒ…JíùX–9ûÞ:t­ÖÐ4Ö¾ûaĻĘYœ!p0 ;IÇ|T‰£ié‹e)-o³mŒ©Éç;GZ?¯ëæ%¹“¥}¿þ«£¨Ilò›Hû:2¨ߎIÏ×ô«ZÅþ£ýµ¦žmU¤‚i™®#gf܆Îî¼ý(ÿ„_MDÛ Ê™x™‹LòecmÊ£q8ì+N[+y®RâHó*#F­’0­ÃñÚ({iæ5¾§7‰¯¡³’æö+y´ï·Ä°+!ì6IÏQÏø§]k𵇛mp,ží’"’8ßb‡FC)lœg9ÈϵmÇ£ØF¨«l¥Rß쪬K+û¤ÏNüÔ0øwK‚'-˜«²1/+±ùå$”ô¿õývOëËþ š5ÍLJtⶇPûgÙ„ÛE+ÌÝ·vsŽ1»¯zÕѯ濵—í Ïï†<íb§¨Ï8\nÎPÝ:WO¤\½Êá¦YšHšE p2qÛš«'†t¹|½ÑN<¸„eÔ«”œ7Ì9=sVm4«{;Ù.!A Œ*"nÀ÷Õ?ëóõùñ}²?ÏÞÉ$rYù‘Äà ßÀëõ<ý*-W¾×Vú$6¯mû‡’!¼™A9u‘³Œçœús¶öVò]5Ë!óš# pÄ™Î8>½úÔvÚ]•œ±Éo£„@»XýÀrç§žO­.–þºïuýlSð̲Éá«Y&šI¥ÃæI,Øb95Ÿ§x†ûeŒúŸÙ>Ï{ló¡… [T1 –9=xéÒºk8,íÚÝ<¸—;W$ã'=þµƒƒlàÒÍ%8İÉ;l¦AuU,Bn~´u`Uµ¹Õ-m¬Ò×ìÉs÷óˆÙ¹Ê¼0Ç yéÒŸˆõ%°šâå-X¶˜uhÊî6Xç¨äc¿ÒIeo-Äs¼y’8Ú49# ØÈÇü~U\èšq€Bmÿv-M ÛýQþ¾ÝzûÑý~ðyÿ[Á0f×5ËFº36"ZG Òl…ÔÈŽHÀˤ`óÎ}«®ªSi3‰Ä°nÆ‘Ió°ÜªIQ׌dÕÚbAERQEQEQEQEV/‹äRÕëÖOýÖÕcx³þE=Sþ½¤ÿÐMx¹?èö¨´»i…ɹðjP7[ÆzètØmÚ2iˆXå[ÀËSá¸xÇ'CÐæ±cw´ÕH9ÃÚhASócŠtí•äìOj’í7Û¹æ³`ºhIûV’L%‹#§JK$ÙV$éZŠE׊͉w0ÇÖ­ÌÞLs“@O33mj¿“æ!\õ¨ÙØäúÔ–Òá°hRÑÎ Ó“U •DoÞœ ×Os6õ1“kž½·Ü+(ë×-œdÏ òk°‡äsÒ¹Ý' Ûˆâ¶è°sÒ€35YÃÌTPZF@ÝŽ ªÓ³Ip{äÖš©ŽØ: ξ—tÛ ¹iÈóT|뱑Æki" w¬«ÿ ^Œß üxz¯ÌïßþE8ëÕ?ô[Zwü{¯Ò±_þE8ëÕ?ô[Zwü{¯ÒªŸÂˆ«ñ¿V]¢Š*̲õøöo¥jV^±ÿÍô  vŸò-Çÿ^íýkÆ[°ìÖŸò-Çÿ^íýkÅÐy„äw¤†ÆNg“Íjé‘6Ýä`b¨à3ýkfÞ2¶áG¥1Æå˜ŸåVãÏ5Nñ…€\ÚXI}à:;vE»‚8§ƒqÀÞ‡ cÓñ®tj\b9\çÒ—A½Î&ËÄi©x¯MuxEµÀ™Í'\Ø\÷Øä€zp:æ­é®ÖÀ]cûR™§™ ’K²öιb(r ØÒº ´ÛYµ[âvËl \wxöªh0¥ü7wíã@I….$R±’1FN æŽÂ9û/¦¥â½6uÕá×dK4papßc’éÀëšîj„úm´×ö×ÃåšÙ\FNàÏíFo=–“moyrn.Q?y+9mÍÔòy"Ÿ@ê_®kPŽ}Wijéÿnºµ‚ÚÍe_³Jc-#3 ’:·§Nk¤Ü¿Þejz¶¥r·?k¹µœFai-¤ ] ÎÓxýG­K…¢_M>¡ ßÈ}©YIÉÚ<lß_vu‰k¤ˆu¨%UŽ; _"Ñd’ØÜOÐ(mn_ïΩ¾ßÖ¢BÑI¹¼?:7/÷‡çHbÑI¹¼?:7/÷‡ç@ E&åþðüèÜ¿ÞsÚñ¾‡XÑåKùÚKÄˆÛÆ»CeX’ÍÔôp>µ_Ķ>mݬ·º„7·óS쪑¢Œ»… ŽôêEo^ØÁ%£Ë#k86‘ËF·&‘ì “V‡QiË- .FЂN1œü£½ õ¿Èã¼Aywo¨jj—:‘±Eöym¤o*ܑɘ¿Þ9 òúWwn‰pl¨;—¡÷{á»[Û‹©íä v¹†$Øç ‘ÇVÌkQ¬iµQUôŽ‚ê>ŠMËýáùѹ¼?:-›—ûÃó£rÿx~t´Rn_ïÎËýáùÐÑI¹¼?:7/÷‡ç@ E&åþðüèÜ¿Þ-›—ûÃó£rÿx~t´Rn_ïÎËýáùÐÑI¹¼?:7/÷‡ç@ E&åþðüèÜ¿Þ-›—ûÃó£rÿx~t´Rn_ïÎËýáùÐÑI¹¼?:7/÷‡ç@ E&åþðüèÜ¿Þ-›—ûÃó£rÿx~t´Rn_ïÎËýáùÐÑI¹¼?:7/÷‡ç@ E&åþðüèÜ¿Þ-›—ûÃó£rÿx~t´Rn_ïÎËýáùÐÑI¹¼?:7/÷‡ç@ E&åþðüèÜ¿Þ-›—ûÃó£rÿx~t´Rn_ïÎËýáùÐÑI¹¼?:7/÷‡ç@ E&åþðüèÜ¿Þ-›—ûÃó£rÿx~t´Rn_ïÎËýáùÐÑI¹¼?:7/÷‡ç@ E&åþðüèÜ¿Þ-qóê×v^5ºš[†þÊŒCm*3|±³‚Uý8Sþðô®¿rÿx~ušÚ-„’j&uó“P+çG!~U ü¿:Àѵ‹¹u½Fòîë˲žÌ\Û$¤ìŠ5fPÄ{Œ1úÓì¼_(}@]ùWÛYý­$‚ÞX7Wg=°G³w é÷“;Ë»kÚ3° 哟®¯‡míÍÌÓ]]ê/%©¶òî]9®ÐB¯_SGOëÏþuþ¼¿à”$×µ»ŒßG`Ë5”×H‘+ƒE)bß7Þê¨æÖµ5²hµ8¬fŽóM–æ/%Ú ”`XäÝAŸáë»­A~Ø/ಎÎ[e[«˜¤q¿ ³<:±'¥oÜhW1Û£Í0ZÉj»XrŽ¡I„‚©µ¿óŸåù5í~÷G…n¬Zî8 ³@-f“~;‚¤ì–Í2;½BûÅpÉeÏ<‰"ftçïeHÏÌyu©dðý±žÖx/n­¥·m÷BëûÈÇ![ þ˜<Ò[ëýoÿom?­¿à™Vú´¶°\Eckn·W:¼¶Ñîݳ=K·9<ÀÇáR\ø‹Q±±Õbž+VÔ,L[]¤Yã9ç#=«FOØÉk4>têdº7k*¸‡ºœ<õ¦Â5dÖVÒÜÜÊ÷n=ÄŽ¦G*A^q€1€(^~_§ü½ÿ®ìv—¨jWºÓ5!lÒÅ N’Û+*²±#XœWÖ«Üè|k§‡¿‘í§Šr¶ê»Qv…Ƽy<ŸÀ Ö[V“R7$ \»T’=óóôMcú­ûHÂ[eu@ÚCã9ü…  ˆd‡UžÊâ7º‚Öc+yRÀ…È‹· Æüwä{VÍ-ÏÂÆ–y^Y^ÅËI#nf8=I®žÒÕmReûTóy²4™šMÅsü+裰¬}VÂ3À×vîÏ6®ª\‚Ä`õÆ)-¾áõ<†6\u¿§»€ÇÍFÃÌqÚº>2!<ñLFuí³M9u8"£µ¾h_Ë•²­kAùŸÐV»l-î7-h\:y‘õ”–—xùj§§]ev±âŸ:ù2†Áæ€6•þe>õ<ÌdÁBÒ_0§ëZ[2ñ@vïà‡ša!ªhâÜH摬ÈRÛ¹ÅU•†N:ÌžA4øëŠ·paÉ=+.Ý'Þï@— ,>æŸz #}*;,ä?5)€LÖ€3í“|ày«÷Ó*Ä#èj…£•”ž8¨î¦2ÌÀ¦hk¾}þõ£4 È‰ÞªØÄFÑsQ]Oå^+c;sÆk:±r§$º¦kBJc)lšüÏPù¡ÿ¯TÿÐEmißñî¿JǸO+à s¶ÝW>¸Q[wü{¯Òª ÑI“Q§&ÑvŠ(ª +/XÿfúV¥eëñìßJ§iÿ"ÜõîßÖ¼nUÇ8¯d´ÿ‘n?ú÷oë^8¼J’`Èk¡†,Â9¬x-ÿ|ôÍt0ÿ«Ä1 qÏJ‘×*éNT†=)ÌÈÅU …éÈ8¥›  â'aßÖ™(ù0zP}Ęc­X´=Ï¥Q¹o.~:bÝ…@  .|ü«©*ÅdIàþšŸt±úÖ~©¨˜­ö+rh5;ñ/Ês^{­^ ¤dìµkÞê\m–äöÍr7s %$gÖ€ c“Å Á¤ëÒ•œ€:б»ŒÓHÁ­m*Y0H?…HtyÁ$'õ  ¡ÈÍO´Œr±–ãµuZ7…\=É?L×_i¡ÛAÈ£_L‘@ey?+ bµ­<#w)Á õÅw«fˆÄ(Áž*äví··µrxF8ÀiM\_Çʦs]j@ŒMhÃe@BŒÐ‡ð™Ú*ÄÕ-<¤+·šõ9mÕbÀ®#Ä6¸,ÀP®éñĺM‚‹xžV·.L“(Çlž¥yÆÉë€l7Ùþm±Y¸ÍÛ ýìvö_ÌõÀÌví*Õwc6R»ºò½³ïèzõÁòy¹uñ¤3×ìÿ6ج\fí†~ö;{/æzàdo³üÛb²=q›¶ûØíì¿™ëŸ.BòiÄÎz:,==¾ÏómŠÈõÆnØgïc·²þg®Fû?Ͷ+#×»aŸ½ŽÞËùž¸ò©ä ÍR´\¹sÞ‹Ïbo³üÛb²=q›¶ûØí쿙둾ÏómŠÈõÆnØgïc·²þg®|ª/ºE=ð9¨°\õ&û?Ͷ+#×»aŸ½ŽÞËùž¸ìÿ6ج\fí†~ö;{/æzàgËSk©ïIÓÒ‹ÏSo³üÛb²=q›¶ûØí쿙둾ÏómŠÈõÆnØgïc·²þg®|ùÈÉç­gOÜÄqE‚ç´·Ùþm±Y¸ÍÛ ýìvö_ÌõÀÈßgù¶Ådzã7l3÷±ÛÙ3×>AdäÂWž*êœs“Ò‹ÏRo³üÛb²=q›¶ûØí쿙둾ÏómŠÈõÆnØgïc·²þg®|¨?=ñS+’8úÑ`¹éíö›lVG®3vÃ?{½—ó=p27Ùþm±Y¸ÍÛ ýìvö_ÌõÀÏ”ÈFỊ0ÄÑ`¹éíö›lVG®3vÃ?{½—ó=p27Ùþm±Y¸ÍÛ ýìvö_ÌõÀÏ—Ë€£Ú¡k‘ ž¬ßgù¶Ådzã7l3÷±ÛÙ3×#}ŸæÛ‘ëŒÝ°ÏÞÇoeüÏ\ ù4Â[´ÂÊ­éÚPS™(°\ôæû?Ͷ+#×»aŸ½ŽÞËùž¸ìÿ6ج\fí†~ö;{/æzàgŽO-åÀÛY÷r°\ôû?Ͷ+#×»aŸ½ŽÞËùž¸ìÿ6ج\fí†~ö;{/æzàgÎË(ƒÖ§€eÕ&‹Îõ¾ÏómŠÈõÆnØgïc·²þg®Fû?Ͷ+#×»aŸ½ŽÞËùž¸ådÊ8ôÇF7uvëE‚çpßgù¶Ådzã7l3÷±ÛÙ3×#}ŸæÛ‘ëŒÝ°ÏÞÇoeüÏ\ ùÅáÆâN)±¯™n{Ñ`¹é-ö›lVG®3vÃ?{½—ó=p27Ùþm±Y¸ÍÛ ýìvö_ÌõÀÏ‘]Z8;”*¼w¯)'Ò‹Ïeo³üÛb²=q›¶ûØí쿙둾ÏómŠÈõÆnØgïc·²þg®|AU®o‹W9®€9H€ÏN1E‚ç§·Ùþm±Y¸ÍÛ ýìvö_ÌõÀÈßgù¶Ådzã7l3÷±ÛÙ3×>V`[8ªÒ¹U ·8¢Ás×[ìÿ6ج\fí†~ö;{/æzàdo³üÛb²=q›¶ûØí쿙럼»x¢s¿©®a¥gº$œÑ`¹õ}ŸæÛ‘ëŒÝ°ÏÞÇoeüÏ\ ö›lVG®3vÃ?{½—ó=p3óîš$]N«‘شēҋÏvo³üÛb²=q›¶ûØí쿙둾ÏómŠÈõÆnØgïc·²þg®|Z7'·jÐŽ ŒQ`¹ë-ö›lVG®3vÃ?{½—ó=p27Ùþm±Y¸ÍÛ ýìvö_ÌõÀÏ’1).Üû浬f3(RyX.z+}ŸæÛ‘ëŒÝ°ÏÞÇoeüÏ\ ö›lVG®3vÃ?{½—ó=p3ÈmÈ=c8$cÒ‹α¾ÏómŠÈõÆnØgïc·²þg®Fû?Ͷ+#×»aŸ½ŽÞËùž¸åŠaGæE*žÝ8¢Ás¨o³üÛb²=q›¶ûØí쿙둾ÏómŠÈõÆnØgïc·²þg®yÅb@ç€{R¨äÑ`¹Ñ7Ùþm±Y¸ÍÛ ýìvö_ÌõÀÈßgù¶Ådzã7l3÷±ÛÙ3×8$ ¸ïÒ e;±œwÅ +}ŸæÛ‘ëŒÝ°ÏÞÇoeüÏ\ ö›lVG®3vÃ?{½—ó=p3ɼ;É1‘Ÿj‰šHÇÌ¿• ‹}ŸæÛ‘ëŒÝ°ÏÞÇoeüÏ\ ö›lVG®3vÃ?{½—ó=p3ÅÅpC`ƒW|á·“E‚çNßgù¶Ådzã7l3÷±ÛÙ3×#}ŸæÛ‘ëŒÝ°ÏÞÇoeüÏ\ òîêFzÍ5Y[Œ€=h°\ê›ìÿ6ج\fí†~ö;{/æzàdo³üÛb²=q›¶ûØíì¿™ëžc#i$ÔHG Æ‹α¾ÏómŠÈõÆnØgïc·²þg®Fû?Ͷ+#×»aŸ½ŽÞËùž¸ä œõÍZI—×ðõ¢Ás¥o³üÛb²=q›¶ûØí쿙둾ÏómŠÈõÆnØgïc·²þg®yŸ8(È$ÔRË#ãjÑ`¹Õ·Ùþm±Y¸ÍÛ ýìvö_ÌõÀÈßgù¶Ådzã7l3÷±ÛÙ3×<Šá°{S $ŸJ,;&û?Ͷ+#×»aŸ½ŽÞËùž¸ìÿ6ج\fí†~ö;{/æzàgˆhÉà·J_#pûÇX.vÍö›lVG®3vÃ?{½—ó=p27Ùþm±Y¸ÍÛ ýìvö_ÌõÀÏ ¶ É‚zñNû$jç#"‹Îá¾ÏómŠÈõÆnØgïc·²þg®Fû?Ͷ+#×»aŸ½ŽÞËùž¸â|•^ƒÚ˜W-ÈÅ Ë}ŸæÛ‘ëŒÝ°ÏÞÇoeüÏ\ ö›lVG®3vÃ?{½—ó=p3ÅÇv A;6Óü¨°\ïìÿ6ج\fí†~ö;{/æzàdo³üÛb²=q›¶ûØíì¿™ëŸ0xó &ªÞ•N;â‹ÏYo³üÛb²=q›¶ûØí쿙둾ÏómŠÈõÆnØgïc·²þg®|ŽÒu,q\T“UúQ`¹ë ö›lVG®3vÃ?{½—ó=p27Ùþm±Y¸ÍÛ ýìvö_ÌõÀφÝF gÚ³^7GçœÑ`¹ô#}ŸæÛ‘ëŒÝ°ÏÞÇoeüÏ\ ö›lVG®3vÃ?{½—ó=p3ó—•’HÎsÒ§S*gŠ,>†o³üÛb²=q›¶ûØí쿙둾ÏómŠÈõÆnØgïc·²þg®~†åÑðÄñÞ´g¼ß‚Kv¢ÁsÛÛìÿ6ج\fí†~ö;{/æzàdo³üÛb²=q›¶ûØíì¿™ëŸ Ó““žõ9³VlþX.{k}ŸæÛ‘ëŒÝ°ÏÞÇoeüÏ\ ö›lVG®3vÃ?{½—ó=p3âæ×7´F9qÓ4X.{k}ŸæÛ‘ëŒÝ°ÏÞÇoeüÏ\ ö›lVG®3vÃ?{½—ó=p3âþ\‘HpN XK‰TOãE‚ç°7Ùþm±Y¸ÍÛ ýìvö_ÌõÀÈßgù¶Ådzã7l3÷±ÛÙ3×>MËHv·J«¨ ýºÑ`¹ìR=¬jÌRÄ(Î ^0ÅŒñÇð~g®ik‘Ät-E’$Uû+2:;0`wc’1ÐÁ=~„øÎƒ:R$à3îãð&½Šõ⓸m½tÈÆvõù[¾=ýO^ƒ99óþó“ÊæÞÍ{SÎß‚<†ß縈z ìm6ÇÒ¸Ý//r3]„¿¹}Åj`I 9½«3ÄV¢[?9 Vµª$žzg5Vèùöï ^ â€8‹k’íô­¦“Í…Y°@®_P¬.sZ–7AÕTž kÁ0…”€q[v·a”ñÖ°HÂŒw©mnŒr={s@*æÎ3ײm=ù¨ ¹ÚIçÞ‘œA  ýM×Ê#88¬;Eă-ÆkWUFÇ¥dBŒ¥wph²´a±ztíT5IAmµfÁ‚Û)`zV}ü§nÔ¶k„f<ÔQÆàwç½KÛjÄTv$›¬õ  •AôÀ¬I›Ì»ÆzšÝœ•·f8àV¾÷Ô@Á{ÿ"ïý±ʵtïø÷_¥e^ÿÈ»ÿlGò­];þ=×éI »ESV^±ÿÍô­JËÖ?ãÙ¾”NÓþE¸ÿëÝ¿­y*ÆúW®X£IáèQFY  ~k‰ƒÁš´o¹–ô’ÊЄŸçVã!W“ÐVŸü#Z——·ÊLÿ¾(Õ6àÇsýñLF|nq‘R‚Yz º¾Ô‚àÆŸƒŠUðö¦;›Åe9ÉéÒ ™ö¡ÖÑðÞ¨X‘ßb¢ŸÂºœ¨B¤`û¸ *òo™Û“ÍGhB=ÿJé¥ð&°á° çÖJ’ÇÁ½³fD€öd  9äX¡#§Äê÷þYr#¥zÅç‚õ;ˆÊ¢D Þ¹ ï„ º‘ˆ’Ì)õ˜ÿ…y=ÅËÌܓɪë’µ¾•ëqüÖ—šÑ›óÔÿ…iZü*Ö-ˆÀ´ãÒ_þµy-—‡®î[æB£ÔÖýŸ…#Œ†•‰>Õééà ``²Ûþõªoø@õ<ˆ¿ (‡·±Š%P‘ô«M`gËØ/uE9Ûÿ¶•/ü!š°\‡þþP3ilª7ÑÛ[@±d‘Ó©4£ÁºÈ<,÷ò­Åá}]!ØË>ÒPÜP¬…ýj¤`0yô®‡þ=L’Z8ü SG„50ÙÙýö(«)t5~ †R9ô­/øE5"9Hÿï±O>Ô±ÄiŸ÷ÅR’èygwó®S\}èǮѼ1ª(;’?ûìW7®éPÄÛ£þ(Ò-Ûþ%V«»­”§ºò½³ïèzõÁòyø þëíÿ«UÝÖÊSÝy^Ù÷ô=zŒàùEáRCbÆû¤œ žGùIÍTµëÍZlLEGV˜àJ BœŠœ .1ùUY›thX›vI©€\ |Q÷ÖGN”¾w7T§àS€?\Sá;‰õ ä^æ©0f,Ý€õ«Ò+»^• ñ°zZ«dù^•¦˜dÖ>ž¥—=kqce^NqÍ0GÆ*\aGj„¹Èuô©˜úÐYFeÅL?v3ÚªÈê’dš@$¸ .q@ ¹œ³|¼ÒÚXËq"–5~ÛOƒIùVˆÛàqž(°Á´}2}qN.'5]J™ˆ=hfœúàUyW“Í(ˇŠdƒ'¯Z–ßÉæ¯ÅÔßÜsŠ¥lÜÛ׊Ø)ˆ‡¥!Üñd0éTÙ¼¡ëVãeT Ö|Ó¯Q@·ò ç­hYG˜Ee_.nTÅnبò@Çn´Fäpp­aë/’:ô8­ÝF°aëYz„$ڰ£.åZÔ`sÏj£¢ÄvcOé[…Æyõ  ‰fúS>Á!bøÔ–.N:VÌûó@ñé’¦7µGá¯n½\xNá¶õÓ#Û×ånø÷õ=z äùŒ6jºÄ3€r7"+Ô.£Ýáy¸Æí6%Ý·ý–ïS× ÎO?ü¿~‹óg_ü¯ñ?ÉC£!k•#§zë/ÉX™áï Nq ¹Œ“Ø©®ž_ÜÜí&êm¤×AÈcZ1û0ã?J‚C™Ï®ª \»|øHú¯'ƒ.d“ÚâØ4åÞ-¶S(u^Ýk›°â—kôŠö=GáµÖ þÒ‰01þ¬ŸëY ðnåœ7öÌ@HøÐ ¬ÂX>ð§²Ã£Úº‹…—–ä«ÄqÛÉ?ãW“áÝÊg„G?ôÌÐ'muÆÓÁ?¿ }k£ÿ…suæoŒ#ÛË?ãV#ðÒøþ„ÿÀ qWÿ2w¬ÆBª29í^'€ndÿ—ØïƒUßáÅËãþ&ûfÆ€9Ý:]Ö 1ª7'uÓһko‡÷Vàí›þE5þ\¹'íðóþÁ 8¶Ëb ëK¦‚Óñë]‹ü=¸hÂ}º!ï°Óí<qjsöØ›þEsº“²[ƒÒ±ìT›Œâ½ëÁW)·í±/üš‚ÛáýÅ»îûtLÜ"€:‹ßùíˆþU«§Ǻý+3QC„ñ¶2±8ö§§Ǻý)!—h¢Šb ÎÕ#/éZ4É#0h‹MfïO‚;o²†®ÐAëGü$÷óçú×M&—œ•Ïìxº(°çü$÷óçúÑÿ =ßüùþµÑÿcÃýÑGö­ð“ÝÿÏŸë]ö­ð“ÝÿÏŸë]ö­ð“ÝÿÏŸë]ö­ð“ÝÿÏŸë]ö­ð“ÝÿÏŸë]ö9Ï–§Ëý¨J|H ô¬ë¡˜H保¼ ÅP¼%AäÐ銱çOsr!RÄÕ¦FXŸ ª¬ïw&[§\P}õÛÏ!ÇÝ0+HšyÎTýkníUX…˜"UˆÉŽ{PDðùpì=Ç¥G¦Aö‹Õ;A«O·!‡Ì}«KÃi1m˜#Ú€6<€áTT?Ú»*öàUËèšH@SŒóU-´¶ÝÍ>g9<æ¶cˆ$še½²Æ `TŽ !PÜ〠sÚœ»îØ}«oBuŠ0OzæâI.î PNO5ÖÙÚǸÝÔÖ€6’Uuбs‚{Ö™­È`x­[)„ß?^ô°˜ céA<ã¿^´Ä8Lö£#vyæ€Ço^qüéŠùo\Ò9$zþ4‘¸ Ð)c"ŒÓ]‚JŸ‚F9¨\òGá@à I–Ç=Æhf p`xëOŽKq@K„?ç§™*“;F1Pœù‡ZŠàXãJB|‡Ïj·&Kÿõªöå¶'P¿{0 Ïo¶!UUùG²ôÕß!úVÂņÉïÍIRØÇéZÑ`(ÅfÀ@nƒŠÐ ~t`zä9¨Îvc¹æœœzôÀ  ß{€y*9W ×ß´öSæuâ‰1“œÐA7B0x§ù$ ¹ã<ÔÂ2Ì@-J£Î(´«²3ëëT£¤'<Ž•~á›g'FC°  J>_^õVxÕÇ{U¿'zÔªò{ÐQÏŸy·$ñŸ¥]–u@rN+öíNH<öâ€(ݸu+T­ÜõÆzzÓžpòrsI Ä„ ó@²99ÀªÚä&ò  jíþ.jE‘ºÀ²·’2ÊËž+rÂT!–¦DBÜŽjÂ퉓øP%ôy—ŠÀ¿M²ƒÉ®Šé¼É?ZÆÔc&Eï@!”BNîí[†BGST%· 'ð¦šÚ®y  æÊ+‡$E> m\üÄÕ KöˆÂ¬ Œóo>”·¢±îd ¨Læ®ÃƒÅbê–ðuÀ ••”vÏJÕ´¸¾+O™e‡iŽõiKBÙíõ …X²ã={Uk© Æj¥½îOÍœS®˜Q]!ÉlëóÍ?*?¶uù柕vÙ°ÿtQý›÷EqÿÛ:ÇüóOÊícþy§å]‡öl?ÝfÃýÑ@öαÿ<Óò£ûgXÿžiùWaý›÷EÙ°ÿtPý³¬Ï4ü¨þÙÖ?çš~UØfÃýÑGöl?ÝÇÿlëóÍ?*?¶uù柕vÙ°ÿtQý›÷EqÿÛ:ÇüóOÊícþy§å]‡öl?ÝfÃýÑ@öαÿ<Óò£ûgXÿžiùWaý›÷EÙ°ÿtPý³¬Ï4ü¨þÙÖ?çš~UØfÃýÑGöl?ÝʥΧ¨FÐM±QÆËšël¤*¥ c…aT(À QEQEQEQEQEQEQEQEQEQEQEQEQEQEÿp×â¯õO]ìÿp×â¯õO@víÿ«UÝÖÊSÝy^Ù÷ô=zŒàù#Ü© žkÖíÛþ%V«»­”§ºò½³ïèzõÁñ ’Hä<ñI š—Ċ8æg0h€=j’]©µ!8¨â$/ËÖ˜€sÏ8ª7w%\FO»`1Ÿ­1CK $ó@§ÌU Éîk^4UU­P·¶T;‰Î}êúF}(W@T‹ÃÒ¦9eÆ(T$žzÐq’?J%`±ÔÂ"[ùSnQ0Wƒ@2 £œÔñØ–ê8úQnŸ0V¼H¸§j« š qmƒ)ÏNÔ²0N9æ‘™Àè(Œ–ÿ½lSÜ Ç5~@ªKÏf2OÇjx]ÒŒžõ§ lŒ±ü*¥´½éZ±P uë@¥•’`9'´±Ü|ÇqëQ14³§4¨bç@d.ùj±pûÙ¨W.Õ*6Îã­>åÈ_þ½PžbͰub§ºŸœÕ[hÚY‹”"DÇ^jÜk…–eûª1Í*&}(/UE.ƒV5Ê4'rV¥ãù—›j½Ò€„3Ö€e||¼óL½˜ 9úÖ,ûífV…'ƒSÞ\ -•†I44Y¹*Jºð˜Ð…õ5‹#ÉSZ,N?çdMòò:S$Æ?Ùu×s sU.W ªjÅ™D·8>µ»§Ù›gö#Ò±nˆ‚HÉëšèa»Cj¸êGZ»˸g «‹*Áö¬F¹^yÅTkÙbÊÆK@:–¨–ЕxŒ\Ú‰¯çËs×Úœñ³)’å‰=«š[o$(ЦŸd(P9õ­·8bÏϦj­Éì V’ýÒGNô›væ N} [Ò.9 ÕR@">æ²ø Â6Ý©s€=Z­ ƒ`úêaÉàûP˜ü¾Ýh^£ƒÅ3 uïOYN1@ ¿äçµlžüR†Üy¨¤çŽEH¡`Ž{š“ Å$`ŽHæÃƒÓÚ€!œž*5É´é9')Ñ&9ë@š"œJ†îöÄÏZ±7©É§Æ¥Ç^´—¥[²—âµ¶’vŒT‰jS8#Ü P„6sÇ­%¼D603Z T'8÷ÍTˆ‘'j¸IÙÐcÚ€N7qFpçÖ‘9È#zSdÞ1Ž{Ðò2Sô¤|Ò•pŠ .XûR9V‚ò:P-•aƒP‰XãƒÇZ–FÚ§žæ¢ˆþï,zžô×n1ŠÍ.cŸZRÈ ÀÇë=˜‘@rå ¨_äC“ÍY2¨$Ž+æì¼…T眚ŽîRHLü¿ZÎdrFrjYÉ-׊DäÛ½gËn¹È@Å7®r:U÷tyvÍ4 ç¥c›æ…°ý*ü‚²àYº„JÙ`k-$to“`@Î+*Ò0.\{ÐÔ%`¶ôª²;;Í=²È=½i±Äćë@li8^j9¡ ãkJ8r˜_Ï5™|®§ÊÜI>ôƒwž†R:t°´©oÇŠÒ–ÜÂö¦µ¨[SíÏZ©nÜlÓ£y¥±Ò…u ±G&›å²ºœ¹  ²YKs‘O°kM´[8‹ÈFM <‚¡vŒc4ÝÒLʼãÒ€.EóÆÞséZ’f4ǵV°·e`OZšìˆòÎxèWrfzúU­-Y[#?ZÉžo´Ü³gŒñ[Úv#‡'®(fȓҮ$á‡QÍsrê+ ‘œŸjŠ×W-pCÐzÐZX`c­*¶ÓŒÖl7ÑÉŒ6jê8p1ÍYC»¯Z 3 œþ4›Žõ,13Ϧ(€¸“;«N%,¹85šª|âs‘õ«ÈÄ.ÅKŒ6çJTŒ*<³ ƒRF¤òO^9 .Àz”Ù6ìãŽÙ© åzŒMCÐ’ÇŠ­3 ïëP‚¡'½:WO˜•êh}  s:©$p*¼q£1bzT÷Šˆ3À«5.Bdû怨Î!€í'qàVu¯+½ºç©¨µ ¼ÙÔvÍZxp(Sæ$ŸÆ²î¯š c%zÛ»xâÞ8®rÜ gfÇã¥2ÖrnAòk^`²Eœçµdjvì$F@~µOðÇ¥fÝÆŸ¥dÈ2dt®‚îf%F­a]Fw7­HïÄ29Å$èë÷±ìi¶‰ä :zæµgÒÚ%2NEAod7òsVn£Há˜É9ª w%«ílâ­E)¹[’´r8…½·=qž*•´~eÉr:Õbúoݪ }¬f8zrOé@\ƒåUlqڮάÁT‚*œçhÏLP€ÈÅRT"f#ïf®+îÀsUcC$Œs@qÃçFz>Ç&p&¬X¡dá{óZ°mÜFswvnJj„·‘O8滉!ò¤‘\~¹mä*¸ñ@ôVó[ŠõWþ)Çm½tøFvõá»ãßÔõè3“äþc÷Oùâ½bUÿŠu›o]>½xnø÷õ=z äóÿË÷è¿6uÿÌ*ÿü‘†¿Ô§Ò»(¾è®7Ã_êSé]”_tWAÈ>Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( §û†¸/ªzïgû†¸/ªzÛ·oø•Z®î¶RœnëÊöÏ¿¡ëÔgÈÌ Àë^¹nßñ*µ]Ýl¥8ÝוíŸCרΓÜ](o—“I ™—&xÛrç5µÄ€ ù-R²´Äg¥Y‚(ÃsŒÓøÌÒrAÇaS• eÎ1Í,×pÀ¸\g•%ëÊØæ€4Ä1¡9æªK«¬l Õ6ŠiF"šš\Îy€-M¬Ë(Ú§BKÛ’xf5©†HÝÆkA4x‘G±  Ko´Ï÷™­«KVSûÆ$ýju†(Ø(P=ê}¤dç§½IÒ¸=*´Œ¡ˆšcHÁ¶óÍ l6Oó Û­9PÈÞ”*3¿¯5}cL@ Š%HòzŠX31íUÍÇï;’¼@<òÇ ŠtC““íL_’lzŠ˜¨@PÊ þB¦H†ÂÝñQÇ‚s€}jgm°(¤²í™ªaZiuË‹‚Ólv¬Û.ÖRßZ¢Du»šM¡¤9©_è*²±F'§4Ù‡ï}1Mšà4 ¹=*+·Û3~Õ@NLLz¯§M‹×ý+p¸+Ö¹TÁv_·S[°Ý$јP\®W¿<Ö`È”‘ß½kHAÇ5Ÿu_Š‘ñšº…NHªpÈ‘ 'Œu¢[Üüª   3L!œp+= yd3I’OJ•!’wV|àU– qþ4rJ¶ÝØ«\϶ßn쟭ZÔa<•<šÃt‘Ž $Э½ÇµoE·^ÜÖ%´- à°äô­˜¥Úzf€51´!1Î=)c³U9¥VŽéAê3NmB$ã9=(Z0džœÖ6µx¸dCÉ⢓YRDjpƳ^)'º9$ûÐ6Ñß­ko•ÀŽ!€3O´± Q€;ŸZÜKDÚ£Ÿ_JÄyÚK““SE¤® ƒózÖÃÚ…‹9¤ˆäm"€0eI,È#8Íl麇š 3|ÔÛèXXcœqXs´7`zï#sý*t å³ùVd цö©á¸ :ñ@Šô'Šav “ÀÅær}3K ù6÷ Û·<Õ‚>e<â«Ä¤׊´0xÅ!ç9¤U”çpxüª%s““ŠJô”0žŸJƒÎUš2ÍÔ}hE`Òt«q¯Ê3Û¾*‚E‰ç¦œ(Æ =“ZwEíŠcãÓA á¨mç8:ÕyäõàŠRI`T€>µ{p±a˜çšK«¨ Èb1YßÚñ+§ñôªò±¾“Ÿ»H–1y9ë@]ê,ãŽ*˜¼B¥æ´îtøöœuÅ`ÜX8aï@²d†ô5§m8eZçg‹).jí…Ðp4±{‘ ç‚+Ÿ­n¶€J÷â·ØÎ{ÕWUiA`3é@É ·ô­;[uŠ3Å6£' Õ¶aD­fܪòÍs¶Ð›Fw]%Ó|¬pkš¸„¼Ùj4¦Ìqïé].àÊ\ŠÈ$[o\îÇAtð6Ù9Q@j°&ïJ–Àˆ·µE{p³°U<|$DŒAí@„Ír8¦˜XÏJ§aw9ïWh…²}…Hî;f¨\Î1ÐñE¬­!e©Î¸ëÖ€+ÎþT8Š[WÝÎy­$üÇ–jÅ´áb=(Ý«3¨ÃøÖÔ ÄŽZۉ¶ý mC‘^´shëž•…®[‰!=ëbDfQÍTÔ¢&Ôý(žÑmúÿ*õyWþ)Öm½tøFvõá»ãßÔõè3“äÚj•ÔÐgŽsùõ™þ)Öm½tøFvõá»ãßÔõè3“Ïÿ/ߢüÙ×ÿ0«üOòD~ÿRŸJì¢û¢¸ß ©O¥vQ}Ñ] ú(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€"Ÿîà¼Uþ©ë½Ÿîà¼Uþ©ènÝ¿âUj»ºÙJq»¯+Û>þ‡¯Qœ#†ØoF÷¯\·oø•Z®î¶RœnëÊöÏ¿¡ëÔgËL89cI Í4h¥#_j¥™Ùò óZÉl *êZª‘òÓ‰<­–ÝZvšR \ýkAvªàbˆÜc§z ¼qQ”UÎÑúT„ù“õ©a€@•±• «g¯Ö¬JÄ sMH˜°'¡  #R»}ªË¹ãÐÔ2ŒfªÍpÅ€'Ú€=ËëZ1Ç¥A§E¸—ný+E”¢ñ@¦}³)=*v`ÇÚ¢yq,9¤•›¿…\ˆ"‚Aý)’Ì'ÛÖ›•E'ô5Vi7"¨éÖ€ †?2ROLÖˆ‰‹)J­ìUøÜSØPN$ ;S& ³rÛp­fj×J‘žžô—ªÎ?Õ£rh……Aô¬ÛrÓÝsÀ=ëcx9Ç@1@¤·YAª–ÒN Àâ¶â@ǯ\Ù‰NÅg¦¤XmbAîMM4êaÈoÖ¨\Ù…þ_t‘DTç~{™8ÎÞÕ­obÔ@f Z‹(ôÇ4Ùaæ©7$1éRÜI¼å@ämÊŸÃBô:n®šå™a'Ú¸·•ãóüTÚÛñØÒ‰š ž*­ÀKpÌ@ÀÏ5Bæñ¦›l\ó@M•àqïVZeÚw¥sö2:.yÏ­X{™I Ž(a.÷1—æk“–îHŸ*HïSÛë˜<ŠèÝÎ{~DTQ¾âxϵW‚a.I#Ò¬!U'š•zœ^jlñÍB‹òïL¹¸H!Üzö  !Óp㊟íq Áa’1Ö°!¼iß ÁïW–ÿ²h\\FTmaœT]ŸJƤ„“ÞµQuçG½k¾¡ž@ÔV5Üíuså‚HúÑu;$Ôš`ÅØgÒ€.¤^\`¾´ÙfKt$°ãš.d)–ÝAYwåFy Ça@Pó"Ý·Ôh¡†qÅd[Þ‚L/ØñZÖÉÕí¢%GÍÖ¹Èg{yÁì v—è<¢qÉ®.õvNxÀÍtpêH†Z“r7;¹úW7k6Â3µ³ DàØ"€4í˜/séK=Ð~•D’¼©öªO9óÀ-ï@n&7¬È"’æà¼Ož_´H3·¹õ­Í.ÈCšËÛŽhH­ÆÅB+7QÓ%Ö¶7Iíõª:ŒäFTHàP4–ìÎqдbÛ„MiÚÀ‚ °ù5 !yÙÎp(h”C®3T¦ifcnzÕÈà7/‚sÙÔ(cœúÐ6vþB’zšK„ùr)è[fìMVøïš©0c´Ù°ˆ}œñÍgΣp‡ZÕÓHò¹uÛ]°ÎÈÝÍ[¶N¥R¼B’yŠü*X¥Þ³Ò€4·75Ü™‰²xÅCæÊ§<Ó/¤XÐ=ŒGûLÉØgùW©H¿ñN³më§Â3·¯ ßþ§¯AœŸ9° tɯF‘âfÛ×O„go^¾=ýO^ƒ9<ÿòýú/Íó ¿Äÿ$Gá¯õ)ô®Ê/º+ð×ú”úWeÝÐr¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š()þá® Å_êž»Ùþá® Å_Ꞁ6íÛþ%V«»­”§ºò½³ïèzõÁó}¹Á¯H·oø•Z®î¶RœnëÊöÏ¿¡ëÔg€ÂŽ;RCbÛÄ¡”zÕ÷Š1ÏOjÎ „ô¦Üêª:iˆµ,cnEW;ˆük:M_#šÍŸQýÞ”¼×ñDya‘Uß_T%sRNò·š– 9“ÔГêòLØäf¤…š^µZcðv‘Ž•jÞÝ•<ó@ím0êHý*äøQŽqô¨ãl0À¢iU»f€TïéJc<Ò+dޏYTNzPY\lª»C¾Þ Mx dž”˾lã@‘(‰ŠYŸýu7–ÕIÊ«Š­2áò*œåGÒ™s>ï•~•=®$t –L§ŒSàŒ\â«0y'ÀèN:Ö˜M‘b€*–<Õ˜É ÇéTó´1ïššÞQ¤žhK»‡òùãú×-©NÒÈ“Î+ Ôd lœ×.ZrÌs@ »‘,mwƒ†"¬és™m‰ÉÈëÚ¸i¼°sƒZþ¹i-KH ›M4ŒsZRÅòûÖ.‘&ÙYIÀÍo“¹O4…,-æ:¡©Å”R¹8ëŠÝÊjä`¡Í?DæÓ‘ÓŠ¹, /nMP´“ɶ :š\äPÓy²ä‘S~MÇ€i–öÛ›¿©5-ìéøé@Óºý¤¦=êýº¯”p1Y²ù÷Nì¼g5½ Ê1@lËŽ8~4<‘ÚªŒîÀéïN¸ºò`ç®8  íP$n ’j[k‰ éYÒ¤·.‚Ek鱪FIš±³e³HÝOÝ>Ð92¶}i.$ÿE+êkKNOôPyàPv²¬"z{S4¥ìù ÔÖ•Ô "•oLVI·–Û"1•4¯rÇçÛŠ—D…×,sƒÚ K9.$ÜÀ“[PÆ-cUüè5Ú3tã½pѶû²{n®‡Ä7ÛmŒ`ò}뙲ViCb€7 øTNýkONµ,3Þ °²Þ#šèm-Ñ!8#uFF cô5 Ï…8íRܾѓÐ{UU$ã#š‡ÔïÍ»ˆÂÁüµ±"¨@­TxK’phš^ êûÖø%¹ÉõÍqˆ µþÖõ®ÂÖU{pÞԲݴdý*%v¹%œñéT¤2\Þí€yæµv€àw  -Ò4ÎÜdU´œÿeÉ*Â8o˜š“ÎdpéÖ€.KÎq×½dÜÁÃ0Îjô7"QÔgÒ‡Œ¸$ –ႄ9Æ+kFPÐ0Ï'¥fj*DNùjÞ‰r¥6ŒäЗ«™TŒÊ×$’(‹Óš×¼‰¤ŒŒɼ‚iÈ9 NÒyRó“’kºÓœ=¾Xr+þÆhäŒó]œ¥c*x  ¯ö˜Eq:”cÍ®Òõ—Ëǵr7ÊZRsÍ2Å늲 ÆÖ™gŸ$‚jGgTY$ž´†æETò]æžkFÓfq0 ûÕñ •”~ išifR@ǽt ”MƒN„cŒûUÓ*È£úgh«.ÏNµs™®‚þ•­y.ȉéY–i¾BÇÖ€/ÉÐ:Ð#òíˆ+Éjr†I¶ŸZ–ò,Ä VmÚ´ زÿ`¢€æÝ¬™cµF£ í@1Þ•? œïN‰718ÅX*ЏÀÏA@]Õ`}jÌå>*©\É»¨«(ʨxÁúP[ÆÞÀv©,#Ø vªÒ?8•ZV(˜SÏ­\š`©€y¬¶-%ÁïVÀûRZÁ¶á‹z„Zà‘õ©§ÂEµzšš\ ¶zT©™·ƒÖ€l޲†`:»+~çw­q¸À¨g—t@튭’ÄöÇZ$ƒÅDY·“Ò›4û#ÛÜÐ}RëÌùwf¹‹ë±mݱZWRr[qöÍq:ýéy|µ4y;\\³rrx®ÏÂ(¸œâ¹ XÌp+ºðÒü ñ@–¯å]ã=Mtq8 “ßšæî#hçÜ8­ +¿3µX‹Lù÷tnÅ0:Õ„\£ï©B)MÇ–ÃûÆ€6Ã,ryÇ5¨Ü4çhéÓ3Jò©äúÔQ[± µWÓÔ);±šÞƒˆ:V8P$;zf¶­ñö\㚇8sToÍp±Œb®·ßæ³÷“|3ÛÞ€5áµE„.qYí?‘)ŒuïRͪB9Y‚V–ä±ÎMi²kº´´ùÂ[Œž”‘Ûï°éÉ^ñòœñÚ€4˜¬œ“Md·Z¨¬ÈÇ“Çjq™°F2hØ(ƒ°k+PÔ¸¨o/š<ƒÒ¹ùny99ôíup;‚x­ ;#¦îsUVЄãsÍjiÀ» òqÖ€7ôô„žŸÊ¥¹³Fá‹R.Øàù»Õ(n Ì„1àt å¶³3pÝ2+9ÈŽ=ѶH9«ùxm Nñ\­•܆å”d#’h«±ºûCí'‘WÈýçÿ^¹½>R·=zšê O6@OašçuXÌWAóúÕë;üYšƒÄ%@8'zË·sä3Šêô•$<¤ò}MiÉ›{O0òǧ5‡e+GŒžzÕÍRåÍœAIÊÐ:¼Øf9ÏZ¿CfLsYšt’LÁ¥'½ a ½ZÄ ä^mä5»6‚y$q\Üóù—Y¡ë[öŒL*z`PKõS¸ç¥\®Ù@Ç5µx@r[¡ËÜÍ»<÷ Í\:ôëQT6{ŠÇ¶Õ¢QßlßoZ¹µ9$íLù'Tä¼m¼Uf¸wÇ¥rîÊ©ük a¾^zÖ´çjì+·¼„¯®hCÉPZÜÓìw°f}MT³±>S;O5©¥Ü6ï+Ó Í3PÓ‚©‘Gj‹O1‚¿jÚ¹ã#Ú²ôûb—gÐТ¤mÐT€lR§¢äójlB’xïŒPN ÅÆÑŒ“ÅK "+lÿ*8£ûMîÈ=áÜëtÇ"€#¶M¡¤={R^\GD 4Û©6D±/Þöªëc$ëæHOW¶v`IéíSHp¿-H‘ùqœjŠRq@ K“Ž•eAcÓŠŠBç¿j¹%ß΀2¯[ý!G8­{Y1ÀéÞ°oOúO>µ¯lv¡IäPî þtÐ^G$ñNå ëPn;°N=è3UU»G5‰#(9®žâ%d®0+”º9»ÛÔv  &àɨ"öçùõ©þ)Öm½tøFvõá»ãßÔõè3“äºD/Qˆ#¯ò5ëR/üSÌÛzéðŒíëÃwÇ¿©ëÐg'Ÿþ_¿Eù³¯þaWøŸäˆü5þ¥>•ÙE÷Eq¾ÿRŸJì¢û¢ºAôQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEE?Ü5Áx«ýS×{?Ü5Áx«ýSÐÝ»ĪÕwu²”ãw^W¶}ý^£8>gö ÚôËvÿ‰Uªîëe)Æî¼¯lûú½Fpx°ªÏÓI ”¡´ÚµYTж"sÍ'–ƒÅ1˜Š®xÅBýy«³²ªt樱ÈÈý(¨™8ç*EµòjHTÐó©¨"€ñ/AÖ‘aRH=éàmëßšlÎI Œ 8àuëUf˜ë@•Ÿ'±¨%^;Pˆ9Í:IR1ÏO¥Gnp¤7zVO -ÐùÌäô«QçÔÔPœÞ®Å…U8÷æ€-‚§Î1UЯž}*BA&©³…‘ðh.q*z¹[!Î*ŒQïmíÞµSV;c©hz{ôFXØwâµ?åŸAëÐUöÚ wší·ž+>êcβï–ã¥ej72Gµ%Ž„ÂEiºzݶÓR Øüj;ë²N£Ò€*j±Ç°DŽ8£I€ùa±Ž*;Ö/<‘Ö®éG| @^Kvçµei÷*IÉ!³ÍnÞŒÀÊ:b¹ˆž 7@'4½xÑÍ V`GÖ¹Ù– ±.¨¨ÚI\™ãRYÙIpqÉ€¦ÆÍt‡×Å"¦O޵Ÿmf-£á~oZ&˜$u  }vE|€y'±¨áŽ3b>ðàæªj.ÒŒõ«1E"؆ÁÍlÛdB3¥]¿µy­¡åG"«é£B29­ÈÔ4xžô…§Ïå ²pA­o:K… œ¼R *3q¸ôúV½¼1F˜UµbO¦”u`9#šÓŽ3+ô«Ò ôÎ{U{™EÎ0(SŸjœu=ë”d] ò Åmj3—‘Žì/ÖªAgº/4q@Ú½¾$@JŽÕnÚe¸Àèjä ıU®´ÆR$„óí@ x¸¨$ gÖªµÅÌCkqëPIqq)àP2Ê_ËÝÆzúU›;Mçîæ¥²ÒåšPÏ]-¦ž#ÇËøÐ6öаÇ'Ú²n"’Òç(§­u«A¾õZâÑ&+׊Å]C|2œôæ¦ÓòÒEL4£»€1WàµX=2hŒò0*•óªÂÇ&®É×éY7¾œF¹ç­-ˆòbiÑžVíÈ©.ˆŽ…r HP%“$w  Q¦âÒ7<Õ§p!+ÇÒ¢µlÅŒr*yc?š€3寍š=ã©dÀRG=ê(Ø•>”7—æ-ÇZ°‘”äŠU}äëO—ä¹ô¨áLá¿:²89éT®FeJœŒsøRCšRÀtã4Øòª¬ù›b#õ¨ü¶ó1RIó@ ûJùc÷éY×EØÔó²F™V$ò“.ìñ@Hûc'¹®S]Ô hÁO8­{ûä†&ÉúW©ß©ˆç¯4E™ärí’)Cï;FH¤`R<~”AÝ 2Q†®ÃÁs$w;K}áŽkŽ’Ç­lør_.ý9ã4êð&SÚ´¤c¬iÌ’žkqrPsÚ€3nô¸Ø6уŒ×?sc$™Fq]|¹ÚJþŸ"\œÐ$ŒÒÝÇ»8Î+µ³+p½8®VòÜZß«Á=+¡ŠoÝ.}(iäŸJι£~çd°ÏJ†gÌl@çé@ñ;Æ}ªý‘mÜ÷¬3•'­iØŸ›“ÆhA÷db¥ƒƒ×ëLç ŽÞÕ*œ8í@ o›ŽÕ¢1YÄMŽÆµ ^N}¨<†Žôžy­¨Û(7ŸJ£y ½zõ¤´—|C'‘Ö€-§8¤pÒ¡ŒàzÒO&Ä,OAš©{xˆ›GÞ&©Ã™ŒQm77>Ù­¿)b·8ì(ž’=Þ`#8©t‰ÕXÆxô©!ŒË,€ æ©ÞÖã!qƒ@ò®alçŠÉ{u–2ãéZ p· }áÖ«Î6¨Úph´6¬D úÕû[x¢(÷ª tÑ· úÓ_QŽô~òu:þu{„lwâ‹‹¢P³µd0–ò`ª§…ji6íw¿zeWž•­o |Ñ‘‘OÑ­ µ«îÈô¨#ŸmÛ©ZdR­öÂ>V•gÊ*§hàÓ Bjr~PxéÚ€ qƒLùqŒ“Jy“hç½9‘p8æ€c¯ÍÔcÚ¬*ª¡oJ¯6Ï•R™Â©$Œ{ÕK(L“¼¬IQÞ¢¾mÓòsè*öÚǃ‚G­T#μè§böd‚=£¸ÅPŠb™aÇõ«+jf!å9nÔ_OÝóT³ÈK€pz²#FqÆj³¡w G€!•~OsÚª® ñô«³œ/Jª±Œ϶(Ô$)ÇÓ5 ?tzÔ¶ø?þª§¨¶éUsÇzŠç'±¦\FCoPjtB zÔæ!$%Hç4E$2`çÚ¬Œìãñ¬Û„’Î\…8Ï¥YK2Oáé@jéÜOlQ =ê9¥ß(,Ý+>çQäO^´³a!7AO|ŸÒ½=×þ)æm½tøFvõá»ãßÔõè3“äZ<Í& ™éƒü«×]âžfÛ×O„go^¾=ýO^ƒ9<ÿòýú/Íó ¿Äÿ$Eá¯õ)ô®Ê/º+ð×ú”úWeÝÐr¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š()þá® Å_êž»Ùþá® Å_Ꞁ6íÛþ%V«»­”§ºò½³ïèzõÁáàÊF2O×qnßñ*µ]Ýl¥8ÝוíŸCרΚÜê+ ‘ëÍ$6hÍ ÚIlëX×:ºBYTäÕ)57š2 U!o½üÆÏ¥1Þ^KtrÄãÒ‹{pìœç½K, ão­}:ÍHŽ=è]>ÐïÞÃÒ¶Ôíz dQª©Ê:s@§ù»U$`f´%;òµ‘òG ïéDé‡ÎxÅ!%‡}ÊxÀ  ç˰Py­í:¸%ºÖ=¬&k‘ŽÕÐFÅŒœPp¦¶LF*¼„³â¬EòB}…Ay÷ÀSÉ¥†O) ‚9¥‰ Ã’y’ÂV@"Ý!ϧzeÍÎbÁ⢑ Ìr V¸/å㜚¯)ÜqœÆ³¯ˆ8ëZ‹ $^ctú×/¬_€ìAàP»{ÆÕ=+ƒçŸ,xÏz›P¹7 ri¶Š»†ãÔЯ0;õꢱëWõGŒDì9¬ôõ ³Á9«ú3}3œÕt„Êæ´ôÛAªÄüÀÐw ÞC£dà×Io.èö®X®ëß®?JѱÔŒ#Ÿþ½mÊãmU\ÏãMY©!©‘d<Ð-RÙ¥xÊŽõ2ª ž‚¬^ ${U]ù9 3ªç=…U–år;RÍ:äçµcßNgʨ t  qL$¼'Þ·,Ø/Ó5…i—9f=kn28#4¤$TÈAúÕ0Ù#½X‡ïMZà:‘ÅkAʃYl¤/OƯZËò4nU ÓY–ïåÜ:6@­ß9ô™q‘p±4¡©ôªzœ˜] õô« .AäÖmûAé@°‡j#®^I²Õ°~•»«*€uªúŒã˯^ôºRî,MX¾±Yr›Ý) Ǹ÷­" c?Ò€9T‘ì¤ä}jò\Á6E]Ô,VU$(ÏZÄ:LäåÏ­Zž4åF@ëU%Tíi†èÎЭ¡¦ÇivòdçÜ‘@5‚9Ë·•¥¥é`8mœv¯Yi!¤5²°lP@ÅR¸ˆ[À[n8®i!i.]zèu‚ás×€)šuš” Ã$Ðz\Â50¸ý*KÍ.)ÐÈgéP_£[]+/ù­h%§Žhš6RZ¾Bóô©êU#Ÿ¥uKr `f¡“HŽVê€9y[ƒ€5¡§èŒçt£Šè¡Ò ‰AÇOZ¶"XÔv  ‘ÛùJ#ŒíQYZÈìr܃šÖººŽ#95|²ßd€vö ûL·ˆIéëYÍŠë’I©¬ek9ÊHNjÄq››½Ý³@6Êqœc"´@`}*¢¡]ŠJ´ …>üPY@qR qÀÈ_j{ýÌäs@’­ É¥u éìj"ðGN”íÌNë@q´uÅR–M¬ÜñSù„žžÂ²¯¦Â;š­}¢û ŽZ±©JÌ*~¸¤±ÄA¸$UrÍ5Ã8\ލÖ°«ÈKt¯«Ù ;9«Mi2}(¬€1Ö Á2c¸­@±äúU$|9'OZ¡!Ý6; jðqI39úõô§Ã–8#§4$d $šÌ-çÞdúիɼ¥+݆* rK‘ÍO´ù˜ô«Š1ØÔì¦*rp¹#ðõ  ·~Sœœ{VÄÂØ¶2mÍ"㟭sº¼Èª ’h6[©$sÉÁ¢ÞÆK‰3ƒŽ™«¶pFÈÆq[Ö°©Q´~§­¼Šã¨ýjôç_ø§™¶õÓáÛ׆ïS× ÎO‘Fb1]ïüSŶõÓáÛ׆ïS× ÎO?ü¿~‹óg_ü¯ñ?ÉxkýJ}+²‹îŠã|5þ¥>•ÙE÷Etƒè¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠŠ¸k‚ñWú§®ö¸k‚ñWú§  »vÿ‰Uªîëe)Æî¼¯lûú½Fp|nhd¸bI W²[·üJ­Ww[)N7uå{gßÐõê3ƒåBåAâ’)Åkµ4ÙX¡ =*ú Ã3N¶°3ʺ b!±±’vÜ·"€GòеI\ hå¿Zz©öýj#!,;w©'¿j`MÍ“õ …É©fÀ„’;S8 ô¥˜î‹€2ر#4’Ê¢<Mv بäu .?J¿¤¢ïÅiÿ9â©ié² ­_'÷x  2pøÏ^i$”í;ñQÎäJ3ÓéKß&OA@VÑíˆëNE,ìät¤I^„Sâ-õ>ôVWUÜØ VSfy7™ÏZuåÎ\ƽGŸ&Ù¤Î3Ò€"Õn–ÞÔ©#Àæ¼·Y½ß+„'®‡Äz³º”Ýœû× ,…ß&€Ô椆_)Ãuæ¡üéë󆉼ًúÒ =9¡£ñüªAEÜsŠÐÓ¢,ナé#²X¢Wa†<Ö^…™ v'ÖÜE¾*: šÇiåzãµ8Ú™^\TZB²ÆèÙäúV¯–YÈï@"Y­˜äŸpj{mMLœ’½]–"êM`ÞY¤.„‘šÞüÈÿ £-ÂÅ 9ç§Z­áòŠ1ä §ûË“û¹  SÍžLœóÚ¯-ˆUÉ'Ú®ÛY¬8$sëN»ùŠÁ¬W¡1Ö®1 Ý*¥Êƒ|ŒjyXnô  ªrŽ*ÌC‘ßéT£oº ]ƒ%ù  E]ÀœJ¯<‡‘ÍOùAÎsíOÄš­m!+ƒÁE2h<ÙsŠŠG1Hvsš»mó $ž(¤îÖñ|‰øŠÉD’{œ0''¿jéåˆd #·8 Ö*!þhœÒÈȦIò)ç­2à,â™n˜ˆ3éI.JüªxÀŽ™ÐO‚ /CG”ùWô©$äßéR¨#ñ …6õ>Qžâ…?ýjq"€155`w¯­]ÓÀ0©Å7S‡|9ÊÔwI± ph¦¶ÄLîG¥[Ò°Ð)cžØ¬‹˜ä¹¸f H'Ö·tÛVH7  ûØ{UÔ^9^¶°'¯½[vFqÍ1‹eGJ¥{x#ƒÏJŽî÷XðO¨íPÁfóÎh²Ç%Ì™`*Ö†Ú8¢µbb‡^zô©Ó’`\ibâbË×5rÊÃÈ`Z´£Û¸ü¼ŠI&Æ(¬ƒJ™Ž‚8¤|¶¨ÀN¸õ  [CÆiŽsÆ Ï8õ¥ÚÅGf…\–ö  ø@84Œ›rqC8YAü:RË1Ù×­5Îޏ¬Y{vž­e"6~ÀdÕ+(üÇi˜ñ@ të½H¢ÝÑcË~5ò‡¸'®*Õ¯Ú\$¥¤½Á~Õv8˜NN1RM A€£T¨1=3@&lœgT%8'œ ¶êYÎjÆH#ñ  .›"¬Â<´ÉÀ'¥@‘ùÏ^‚ŸxB[àP~¡'r»yã5§mXGò¬è!ó·\{Ö¬›þZ˜ ¯Æ™4Ÿ»#µ+}슂LœPWyyô®fr&»²GJé.²"f=…sð¦f,FNhÄl „·l¹ ŒV=´ Üî+Àï[Ð ­Å[lç××\ëÿùm½l!Û׆ïS× ÎO+~ën ìâŸ-·­„#;zðÝñïêzôÉçÿ—ïÑ~lëÿ˜Uþ'ù"/ ©O¥vQ}Ñ\o†¿Ô§Ò»(¾è®ƒ}Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@O÷ p^*ÿTõÞÏ÷ p^*ÿTô·nßñ*µ]Ýl¥8ÝוíŸCרÎ’È7 £<ñ^µnßñ*µ]Ýl¥8ÝוíŸCרÎZØ|»œRCd¬aÀæ´í¡G­N‘*G€4Ø 2ã°¦"Ä‹òsUCž‚­Îß&ÐUP@aÆM'^;ôÍ80< i¹=‡zP]ÔÉ[`£•óáéQK0wd•4“ˈǰ  ùçïIó%úT !g'¥¥@YË0éÒ€4-\€WmXweNœþF’&‹ƒ„ÈÅe]±2TisåñƒÏ&ž„É3dqž)ÓÛåIž´« +[‚:ÔWB(œdÒXœ[ Ý»Öf¡/›;mè(¨ËÍדPj÷E©@qVÂÐ?C×5Ëø–ÿ²†öâ€8Ý^饜€ÜVW5$Ò™$,{Ôtu§¢Œç4ÏήÚB“u8  åp:œTñÆòF9ÍIwhaŽV8/W®h¨Ðm#:×UÇŸlÕ=> # F8­”÷J)†áÁ9àÐJ95^õò¨ïVØ€¾jµ¤b{‘žƒ­^´¶ l3Þ³å—ì7<ž ®€Ç…â°uK:l{b€,$ë(Þ§õ¥8*Hêk)Kc´ýÞµ©‡„€{ÐW6²=«·aÚ²-­Í‘[r]©µxwe½f£Z|AcaW ” ±#waY¥×~3È÷©áúb€.,ûä ]ó¯üSå¶õ°„go^¾=ýO^ƒ9>rŒî8ûœçò5èοñO–ÛÖ½xnø÷õ=z äóÿË÷è¿6uÿÌ*ÿü‘†¿Ô§Ò»(¾è®7Ã_êSé]”_tWAÈ>Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( §û†¸/ªzïgû†¸/ªzÛ·oø•Z®î¶RœnëÊöÏ¿¡ëÔg–ò¶ÇÀ溛vÿ‰Uªîëe)Æî¼¯lûú½Fpy¹8\.x¤†Êl¤*F;S|ÁƒLDre› qZL ƒJÃqö¤ïã8 lã5¨]#Ú§$ôrîàEsX…>Ñ)v$Ðí™ÉÜÇž´ë¦8Àô¤Œì~œ lï™y  j›œ{šèm#0BêEdÛGæÝ tÍn¼Nàô9ÂÁÉü*¥Ä8ãšdŽDC“š¦ŒÏ&[·=hq\qÏÖ‰G`:ŠL S$”…äw 2­ïT`PîK:ô©æ;ÿúÔñ—nNy4CX¹ö¤‚FynµxÒÈFîjìè…Àäw«läž‚«J›×Š[iw•Á« ÀêkÝÚÊ2x5µƒ©é@X‚çò¦·ñ§;pqô5«õ ¯LŠœ 2jÆF0.9ŒP² ÈoÔT›ˆÝ3QŒyúÓÏ+ß(Þs’}éÐHY‰J®äç8=) ¤‡$ý(ëJ«Ô{Ó·¼MT•ÆÜ‘T&½b¥Sñ4vóPDPsô¬•InŸ'$f¤†#3eÅkZŠë 4‡·âkn ÐçÖ¨GÉ v«@õã­YÛ–ë“I»Ñ(Àüj=ù|ç¥:\±ÎF=E†‘·voÖžÇ̓@Œd>”É#ã9¦‰ž‚0–ã·$àæ£HÎY‰éS;|ÄwÅ&ì'׊`Ì=}©²3+vÅ"àÉÉàšŽâl1œÐdbÄc½V½lªÆ,jl…ˆ³G5Ÿ ¬·Lì:sš´Ñ,ÉïZ£hûQº“Vn_ÏuzcŸ#ùnU2H  ‘·]®$kRyHÀëTl-˜8•ùç5rSžG¯­SºRë´ ­Ê0j̤O¥TÎsõ  rcbç­ShäÆ;Õ—?ºž)ÐDq¹J¡©â(•G§4šZy±â›x|ùO=*Õ”cÊÔh±è+>UÌã=kAœr=j…ÑÉ 8Á g ÊÀžEe®¡äoûU««‘±é‘Šå®g2¾w  /mÛý©ërwø¬¸­åy¨­E³*ŒsŠts&ó¸þµr\–*0>µ¾™#H20½]hRJŽ´ËxÏÚFëÏò5é,¿ñO–ÛÖ½xnø÷õ=z äù|WÔ­¡-ËnãþkÔâŸ-·­„#;zðÝñïêzôÉçÿ—ïÑ~lëÿ˜Uþ'ù"/ ©O¥vQ}Ñ\o†¿Ô§Ò»(¾è®ƒ}Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@O÷ p^*ÿTõÞÏ÷ p^*ÿTô·nßñ*µ]Ýl¥8ÝוíŸCרÎ0î6’IçšéíÛþ%V«»­”§ºò½³ïèzõÁã]Á´Ë¶@zôâ€*®~PNO½C<Ù“e\ÏÊFi‰âs×Ú€n…=4𥨶³`OQW ¬Äûd× â [ïü©Ú€9oÞ&ò÷g<šÀÆj[‰šy™Û<š‹?ZëKŒzÒ ûÓ²QÓéñ—s…RM(@Wž+gD²K‰Läu£áˆ¤L–O®k¤d:”§Alb‹nÌzTöåb˜n\ýhô#)Uµ«•·±c‘*Ú2ãxõÇøŠøÏ8I<ã6€|䕨u殬!ÕÆ9©´‹Qo§)Ç$g59¸ç­Q¶¸žÒgÉã?¥j¥úÊ£8V÷¨^Í$ÎæÎj”öíù 8æ€7¢`W æ«\¶ÖúúÖUµô°8ˆ©î¯Hw/~ÔÛË–'ÊN§Ò¥‡OÛvûÇšJ‡Ï›Ìq»»"  cô  ‹¬-¾1Ã¥d3|Ãߊݼ å7øW9$ƒ£œâ€5t÷Ãã𭘾c·ð®ZÆ|Í‚MtöCpœÐŒ5[é´ñPFÁÅLÙ8Áüh·pã ¼»àÔî—Žj”±²¶áÛšÖÎG\ÓD™>˜íU œ¸žœT  4RõJ?˜ ^²›Ì@Ù¤žÑa«>Òo*à¡$ Ðñ@§)%3žzTjá›§èiò0EÉ ¨'žÞµXʱ9Ý‚j)õŠQy>ÕEVk©3ÏÖ€,M4“¶Õ •4Ÿ géÖ¯“ËŸ¥JÛ˜c ë@ ¤rlEÏj»Ü䊪*Äw«XR  QN:ÏLÔæFÀªK…àš˜>;õ  šãåÏqK›óÓÖ *XŽ:÷§ÆëÖ€'!CúÔŠ¬æïUƒñ÷±L‘‡ŽÔaï3Ð ŠM¸àv¨ –ëõ©AÉ÷í@çæŽ9¤}Û3À‘Áb=;Ó¥l&  ¦M‡·>õå,IíÓëHß<…Aê)ì5äv  ë‹¶rQ{žjÊİZ=qš­&k¢àp KtæICèh8ŽÈd™¿ †Æ6]ì½Ny©µ1Ú*Ré$ùdžÆ€4HÄ{*Ì’â@Åwdz»u&Õ#=+‹)È8Ͻ,Ò±^zSC  S$bÃ' §ªg¹  1¡# Ššk˜ííX S"ÃòvŒzÖ;ÏöÉð:t Ä„Æò7äSí's¹=EZ•BDˆæ²¦;¢ À4®#'§J­:î ÍXÉ*6ž¡ ÝSÞ€8jì®Q{VmŠ™äyQÖ¶õ{XÖb¥sšfŸj¨xéé@­!ÅlEnÎ*(#XÔ Ÿ¥]Y&8ŒBFN0@ÍaLì\¶xÎqëWonÁÈÏ5ƒ{xQg9ÎÿÚ¡9Éý×´2ÿÅ>[o[Fvõá»ãßÔõè3“óþƒ;OãBN@/ÿ 5}Ëÿùm½l!Û׆ïS× ÎO?ü¿~‹óg_ü¯ñ?ÉxkýJ}+²‹îŠã|5þ¥>•ÙE÷Etƒè¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠŠ¸k‚ñWú§®ö¸k‚ñWú§  »vÿ‰Uªîëe)Æî¼¯lûú½Fpx¥Ž{Wknßñ*µ]Ýl¥8ÝוíŸCרÎ'XÛõ¤†Ë;ÓëTn¤XÔçôû›ô2jÁšìܳ(éÓ4Ä2êv¸|ŒíÍ?TAqÉéKj9§8Ìe ÖÙ¤“qûµ³åùpAM¶ˆ,cÉ©æ; f=që@s²žô¡–tù¤Æù1Ï&¯ØÆ¦ä{u  _,GŽÕYä9 gÞ­Ü `Vw˜¢|™  áH€1êk:è–ÎkYåO$1×­e^Ê¥ ¨Á>”BšMíÐV…¬1r*œKòŽüÕ÷q ¹'Ž3@šÝúÃnêå:Ýášo,1Àë]^»xXHXð3Šà&rò3òh<}hÆ}iHÅ%Õ$c‚j0I8æ­AfÆ  °!T`â»Û#L­r’®&T9Åw^Š;(Õ¹Áõ “Q¥Jqœbª*z÷¤¸iwã†éÅM »FÁ™x ¿¸¶ŒÇÓŠáí3ª‚znë[ž,½Ù‰Õ/ ÚæRìsžh®x¼›Ž1X K1lžµ¹ª\ùpù!rHãŠÁC´¨n2x  (ÑÕw‡ŽiñB$s¸g¿Z·l‰%ºƒéÖ†Œ/ â€2¯ma à|þµÎÜnŠ’z×Xñ`ÚçµHñ8!N3Ö€: 0-ƒâ¯Ü7̓ŸNÕ‡´Ø¡8)oi¥e^JbFs\äò3#šßœ†F$dgšÁº &éÖ€>ðë×9­‹+÷€€Ä‘T-ö¥…jµ‚Ë*pØÍoÚ^Ç2qÛÞ®ÆûÿqjóYJ3ŸozétÛ¥¸Œ׸  ePzõªó¯¦ˆ’XÔÉþá+Ö€3UŒSàôïZž„éY.ŒrÄsVíeùvž½1@%“å$V,»„Ň­jHr™É¬ë²#Áæ€4moVH€cózTÛ˜?ÎEpc”œšÝI löõ  fBFãÒ¤I ëÏãTf#„`äúU#}4Ÿ*dPÓ^G5JkçŸåLU¡¶–cóG©­[kA¸ŒŸz©mfd;œþu­+€ƒµ=¬ÔªÃ s@ íËŸÆŒ)ǽ<ŽNO™¨”çž =”Œuö¦ä“Ž)1ÁÝC0¨  ânNãÓ½XOŸ$tÍgC/ÎÅëW£-ÔfA¶<þ œçúÔ'PGÈç^(&€-|ÝùúTÊʪAa“Ó5˜n'~Uzý)¦‰±¸í:Є—ÊŠUH r@¨ÔÎ~TÇó¢ÚÍU¾aŸZº‘…¨zÐM÷ ÃØæ£’YrC~ZÒ—œôª%K¾áÒ€ %ówœU{©šI }úV£°… ö¬»0'»iN0 \ÖÔã®*¥œm-Á‘‡ÉëV.ÜË*DZuÄ‚ÒÛ`ûÞ´GU”–Ø:ö«zt~T=êŒQ™¦ÞÜ÷­"â8Aô^ö@ € e‡$œŒÀâ­ÜÌ'±öªÁw€G¦:PˆÆ;sOAÀ8¦”e‹ zch'ŒP-^àÇvwStØpâ³uüëåŒFkvÕ6ª/µXš3°7¾+QFIwŽ‚ºrAªŒöÂTaë@ §Ü¤±mb8µjæU‰3œw®wsÙÍ·ž½j[CÏÚ¹à{Ð×ûEÁ5fÊÌ }*Œò¢e†j{=Q"]¤s@¬ÁW“œqUæ»MQ—SFB/4°ÚË(ó_…ÇJ¡sv Î+”Ô5ÞÀ±Æk ÕçŠ È£f¸¹¥ó7ÈrFhSÂLÅvg9'~?¢ÙâŸ-·­„#;zðÝñïêzôÉù¿ÁͻŶGþºè _H2ÿÄ€¶Þ¶ŒíëÃwÇ¿©ëÐg'Ÿþ_¿Eù³¯þaWøŸäˆ¼5þ¥>•ÙE÷Eq¾ÿRŸJì¢û¢ºAôQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEE?Ü5Áx«ýS×{?Ü5Áx«ýSÐÝ»ĪÕwu²”ãw^W¶}ý^£8<Û,Y#õ®þÝ¿âUj»ºÙJq»¯+Û>þ‡¯Qœ/¹œ¹Án´ÙFêW½ZKXÜu§>6Tö˵<☆m(ă֮ØÛnaïÍEP?:׉v  Ö€$‰AÛô¦_+ÂÖ¬Â2y§JƒŸÆ€0ã„«ãtTö9óKsÖ¦d،ǩ¨ìøÍi]:ˆk5 žO®;T¬Í$3‘Ö”¨Y6Š%b©ÜJÍ•‹IÈëZ“à Ü:ÕQ¥É^{q@B#Üp+/XÔ qìR:Uë©¶#€q\Ž­u¼<…€ 8  =bvP}ëš)É$t«ó]»–9Ȫ'æÐLFi™úÒž´|@³ Û¶·Û>¢³ôës4ëÁÛÔÖÍÄ‹•ì(£^jÈÎMz%¶ž< œ(ÁÅsžµf½Ðší¡Ý ãûÜP(–Ývg#Ú™s~VÖ¯À°Û€'9¬-xù6ÎGašãu‹ï´^Ôg×MḶۇ#õ® ÌÈ/ÎZ»+ vÖÞÍ@ê4½¨mgUàž•‘©®ÈÕÓªÖEߊÜ‚£# §Å¬}°0eäŠét»Ÿ6¹è9«ê¸“ô®_FºÛ9N@Ï­u0óϵS`L™=*•բά€Uû‡ÃŽzÓS•Ü3Ö€$Ò•¢µTn¨¯œ–Æj{vùâ«\I$ó@÷ ¾I®~é—xö­ÍFP°aHé\]ð¸Ée'ϨjÓÛ­tvw²¯Ì?:òó4ã€ïWìîoÔ‚¦BJôkÔ‚XÌ7 ÈÓuT´º(\c¸ÏZ奻ԙÛpåYå.÷–Ãç4ìÖúŒL»ƒŽjµ#wa^=Φ#L¸víWbLP§\MNVi½Ž 2Xc§Zàî5 TG—gÕ—.¥|íƒ#ШI«îᦹ–d çŠóHuȹ%½k[xºâ(ö²–ÅtÆfì _ŽöE‡jšà$ñ1}§š±‰¤_›Ë4ßÚÜ#ŒIÔúÖ½¬•Ü9Íywü%NW<0­?´Hç¥z„*çq6¨çò¯6‹ÇAO"¬¯ŽÐãÖ€;òWx¥Ûž„\<^3…Û“Æ´£ñ]«™~4Ò— 9 *$9¬?øH­¥ÏÌ8÷§ fÝÀQ"ƒõ  Yq%MFá¶à•J=BÖ ŠçUŽÈÈ'Ú€-´ž^FüŸ­K Ï*ðp+>ÍY·¹ãÓ5¿nqž(²'øÒ­AnªÛqœÔØžsž”¨0ääP¬gn=ûSË)`sÒ™¸nãŠ|„¶0¹èÙr@_Ò‰$Fe#\²þ•Ny·¾Ô³@yWÀúu§º•qR[CˆË½i“8PN}è2úw+åýqKn‚7Œç½$æiHãéI<Ÿ/–>”ëFS3ÊÇ…¨§¸2±$3Å8§“jNy"©[‘‡±  ;xÂE¸õ4Ë¢YöÅz deAŸJ{–ÙÓŠŽ8ÕÎO€-9 Œ=*µô†ÞßvzÔáû§¥gjr‡uLçŒÐ<*^ø?5ÕZ¯Ì þ‡¯QœRÎÿ6ƽ†Ý¿âUj»ºÙJq»¯+Û>þ‡¯QœkÞ’Îr mÈÍgJq×®x­=wN´Ä\¶ƒcnÇ^õ ‡ž;ÔIØéV#\ý(tÈRsÿפc‘‚iŒóÖ£cøƒ@Ýó #ŒÔ gðæŸtw.3Þ£'lAyЋEÜw~9§°Ã†=j(ØÆƒÐõ ³I…¯½-Ì‚R~•\¦ÞGZ²`ò“Íg_\y(Ä‘ž´«ÝžRã'ŠóývùÃAÏ©­}kS\?χô®1äi¦Ë194¼ìÏ9÷¤b´hW`äj a_$gƒ@ç“NLt9¥+ƒJc#hsM F@yÇZ[…3M@çqæ³ì˜íÛ¸…=«FÀnÔÓvN=h®Ó­Z“Ëì+b9˜XóïPB|¤éÔb?SŒö=¨ÚOó“ޙɮ_Ä×ìàENzâ·¤P‰å‚1ߚø0ý¡w`äÐ'‘us `„)éW¿±%Hˆ.qŠêÁ…%cv¦ÞKl[(F1@•¾‡½‰ Šš×Mx°ÊHÁ­6¿Š?•rëIë¯Bhk8aØç5¿c«¡ùdù@â³&]ä`Sdµ*»—© çŽBXÔªÌƹ$¸ž7ÆI·,5%tØçùи¤ÚΤÖeÝë JŽt×"9_úU;[v»¸bG §¹sŒóúU+«&„üÙæº¶´òUBqÚ¨j6ß»ç“@ŠÃ™ÊÖ½Ÿ8¬[»Ÿ*]¹9ÏZ’Ö틽t˜·fL€qW&ŠÁTl@N=+/OxæÝç)ÅKppøIã@í–×9)ÅM)†06*íúU( ¿xÀ*WÌLZ¼×6à…‡µ3Nðý´©çLÙ¨“ÌÛÌmŸ¥<\ÎbØ‚Ž¢€UµÓíÔG*GsY ¥ØÉ°ýïÒ¬Ï/˜û*H"]êwG"€ “@Óa€o\=FºE¨Œ¶Ð×rò'%É©35‰·^I=hŸŸEÝÌ'#¶)tÿ 5Ã’îTÕÐ[X<|5YœH›D#oûÐ(Ð-É(’;Õ9´V*½{VÆé‘² äÕ¥–Léž1@°Ð/v’¹5Zm2þÜänã޻Ȯ$l>´û¥ŒÅµÔÇZóƒq}<¸#ë@Ôï ïw®ÜYÚˆÚFLŸ¥QšÊ ŽU<(›þß»Ûò³ ³g¯ÜBᘒka<9n[%kJ? ÚˆÃ8ôÍS³ñl›†G¶mük´óYŸð‹B²¾ÀBô¥>ÊüŒ}:PceâÛiÔm½ù­x5›W?ëWžÙï^ZúÜ „cøS$²ÔÐe]ì)w§!ÁZ¼¯Q‚+Äc¿Õ­íÏïV`ñåì ²@Äuæ€=vît µ@¨ìb ÛÛžž•ÀÙøæ œ}¡q‘¥uÚOˆ¬'Œ"ŽüšéˆãéX—²³0‰O^µjmRÛÊ%dýj›,Óù¬Aç𾍶ÖxïŠÉ·ˆËpÍŽ[Ô¦À)ëSÚÃåÀ ïÍfê2m¸Àiš|cËO'ÚIüר£ŒÓâÂ*(ë‡u$g+UpXä¯jšv#vEWYw&Hühf!£éŒñO€ÄczX“xäç54’¬1–8 Ë»³£u Ú³m¡k‰²Ç=êK©|é‰õ­K;UŽÇŠŠhwZ¶ªØNb—Ël`Ö³áSÐÖÙ‚ë8À&€7]²€sT.¥òÐAVâ>lA‡¥`kwÄ<ôÅs·Ê÷š€ÆMmiVf˜ŒSl,bGqæ¶¢U\ b€-ÚÆ{ô5mƒF€ûÓ-™7dcµW¼½R<Ð×%#c¿§½yŸˆµ'–R«Îk¤×õ22+`wæ¼îæíæ“'œŒÆÜüéÑ!2Í49#çlçÞ­[: Ç\ž”­áT âË/_Ÿÿ@jú-—þ$¶õ°„go^¾=ýO^ƒ9?:øeÃxÂÃÿ–ŸúWÑL¿ñ -·­„#;zðÝñïêzôÉçÿ—ïÑ~lëÿ˜Uþ'ù" ©O¥vQ}Ñ\o†¿Ô§Ò»(¾è®ƒ}Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@O÷ p^*ÿTõÞÏ÷ p^*ÿTô·nßñ*µ]Ýl¥8ÝוíŸCרγlžkØ-Ûþ%V«»­”§ºò½³ïèzõÁò,~´Ø’Ç¿š×±b·ÝŽqY±¡iJ݆/Ý8¦!°’FHäšÐ@Bõý*¢*A:Ôî ®(7 Éèi›IôSÎO$õ¡Ô€(…Ù#Þœ m i.q;f¥¶P[9í@ wÂ{RY«Ë)|ð)— öõnÑLv¥³ïžh/%)'°®#ZÔ±Xàuæº=VçldnÎkÎuùŽ ’zõ  MJäÍ!aŸÎ©Fpù¤rsÔÓFGLÐøæo-›ôªÒN\` S ¼Q÷ ùœS’L7z‹§*ž”<.n¿¥Ïmæ‡$†^MsE0xÍX€K»äV'Ú€=µˆ×iÜ1Œš†_&yp1\ªX^ÎFâ®Å¢\;×q@í­îgÎê¡pæYÜŸzµk£°¡5 šHÆOÒ€3b{‚›rp)¤;)^k¢‹L@¹ M'Ølý(œŽÁçq¸ž;Öši‹ aËdŠÒ[`¼…¢XKF@äÐO,P*üVªé–ª¦"IëZVG#¨õ  ë»AÎ0qÅaKºÚmÇŽõÖßG•ÈëXwñ$¶Ä–  öº>sÏjé4X@ŒµqÛº–S]¾“ k$Ú;P뀡@“zBÜV”»‹ŠÉÕÔ¢ô ?ÕFÝBA×5fÄ2•,ÇoJ­ªÈ¯zXgÞ¬Ú8x4½henMtÙÝåöæ¹H']œÖ­„¿#4ÓŸ!F b¼ H**¼dȘ`G½N¶bBf€äÛÇ(¬ñ:í$Z³Ø/íTÑ?)ÅfJ‘Í>qŠ¿¢(ÛÁö¬ÙGwÇjÙŠD–!ÍWžÎ!$Œž•­¨N7éUïHåë•=*íˆ(-÷JË¼àæ•­g#q_­[XJíÁ÷«I‚¸'Ú€2 ¬ÎÑŸJí$«ÉèjÄŒCü§ó©­çu<ó@éÒ3޼Õ)e•äÚÑ’Ã¥u/8 ñš¨/3yO˜úŠÂhÛníLµEŒ±Èük©X “ Ø xéN}ÕÀ#<ñ@PÍó‘šÒžTxU‘€Pú ²©ɥOpÇ€&ŠéF#žµ­k=»€?:æ’ÆìJܨéÍYUž6 ÆzvÑK,¼c& ’Åzʱ¾Ñp9ÃÜÓí5i¹ó;M\—IYT€¼+& ÂT“­ôÕãe98;í–òõƒ¯­r7B¡—*zqUŽwb Ịֻ̈Ž$SøÔq,ˆÐ5æ« ¹Èð­ O^Ú&+¥m)B É¬{Ý&'"=ƒ&€&±ñ”W7JÓðG½uéâ[9mþG\ãÖ¼æ ²Ç½TƒëU>Á}jÜ"€=9%ŽHÚFpKʯ$ʬ:ŠòÈõ[Ø £nÀõ­û:º«Ö€;;›aŒ¯PÂ<¢¹Ïze¾µoqÌÀÆ3S¬ÑòEOaW“ÁªÌÌ BëZi:E;°Er:¥ûK;{àPí£iî‚úWI.0;YZ4PHG&µ'}«· %›žy¬U‡˜ }+b \æ¤þeéÚr«Ö€4Öð[Øîfè+––ïíWža$Œô¥¾¹’lB¤•h¶Óp}hVТž÷Xþ!øUO³º m9õ©àÓ¦¹àf€ 56 ´1ÅQ¸¾r¤äç­kË£o9 t¬Iã€ì94ÌëWf7a›­sŸ6x5£sæÊÎrFx¬õùÜc"€HÙ@lŸ¥MlÛˆÏj.™å@¬ÈÍmxUâ¯ÓÛž|ÏýÕôq_ønÛÖ½xnø÷õ=z äüÕk†Å$Ê™ÚèÅXvê+雤 ¥M„}Ž \tÝÆvþ™?Aœœ¹?yÏåcj½Š§çÁ|5þ¥>•ÙE÷Eq¾ÿRŸJì¢û¢µ0EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPSýÃ\Š¿Õ=w³ýÃ\Š¿Õ=mÛ·üJ­Ww[)N7uå{gßÐõê3ƒäq€Üu¯\·oø•Z®î¶RœnëÊöÏ¿¡ëÔgɼ¢%tô¤†ÇB¤ÎõÒÁò€¬»h27ãV´'äšbW‘ǽ=‡ËƒÔR£riÌâ€+:€¾Äæ›1Ì|jIH¨å#fzP\Ì|ͬjÄ2ˆSq=½j…ä£Î$v⫬æ^3Ò€.–2ÈÌ~”û‹å·²#5<¸Ix2:â°Šåöúš×ŠU0õê*‹79í@ú¥˜’×pŠÕÐYE’©Ž)óÄ4ºd àw4y°$àv¬½h·`1Z¬Ê²ŒÒ±õ»„ØGzó‹øÏÚŽäÔ¶Ùû¼ñVµDÛ0oZ§áÎhsLµó_.x®—N…Ø=»W7§Ý(3ƒZö·f'Ô‹uY>^*ð )8õ¬Èî—ÊV$qT¯õghʧ€6.ï!AÔg+"MA ;³X¨ÓO/ Iïš½˜Ì2îs@îe…ܲ¯>´^ˆØ.ÓV%Ò°p¬yêi‰£AÜI  üØæ\:óÚHÈ ØßìçQÅDðÈ„1@6× à+ûÕå¶2ð§'Ú¹¸¤dnâµì5"„К¸Ú{‚>ZoÑžŸlÃ*H›ó}*”ÈÝŒ  ‰$rM#؆Ë¢´ …BqéOŽNIë@Ÿc“<7㊜E"(ašÐ{b¹ÉàûÔ8ÚNEWŽY‘NãùÔOyÈàf­HÙã8õª+dÉö  °N‡Š°Jœm5J8FüñøSü—!½è%…I?(Å$ztR¡Ú¸4äÈ%³ÏrÝŒxsÍfÉ¢·EÕ t©#c¯¥u’HóÆ{T C#ሠ:K{¸FQßéšm½íÜmûёӥv2ÚÛ´d’9ª£NŽA”LÐBê Œ>EW†â9¯C0=kV}@8ïTÿ°æ2)æ€4L°È˜ùXvÅWð°ù€ëTe±º·=ÅFÍrŒ2Ih/tØfÎ:ô¬§Ò?ºOçZžs“ó¼b§Y‘@ëZÞ[ýÒÛE\·Ô&…°îA÷­±åH íÁªWÚjæg§A@}eÌ[22G85R!$³ü9äÕUµs*žäô­çµÛ¡¨oOâÐñšuÁP¤ûT:Tžlxî*[„ÈlÐ9.VG`1‘\ËÊIbs–­›ÆXáb{tµe\MϯJ’ÂÓ{—a[IÎÞô¶ða€P0+@D VKMã$u­[+u†<à cmŠ!œsQÍx”àPv½|£ŒŠó [Qiܨ`I=«kÄÚ¹veW$ƒ\‚1;¥~sÒ€!™HƒëZŽ=vœÕ‰X¸ùªÕ¼c 6äÍ5"Ü70à ®ªÌÌrsž+NY"òÚ 1Ú¢²´%˜‘Çj’%x¢\ž¦¾–»_ø–NÛzÚD3·¯ÞïS× ÎOÍ„žTÚ¾—»_ø–NÛzÚD3·¯ÞïS× ÎJcEO ©O¥vQ}Ñ\o†¿Ô§Ò»(¾è¦!ôQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEE?Ü5Áx«ýS×{7Ü5Äxšñ?©…ÒmpØ¥$ÇB9Æï×ê3ƒæPÄÍ'̤q^›nUô›TÝ©·xäŠIY3»§#>˜éœƒØÖmKù¶Ù[¸Í܃?{½—ó=p3”ÝO±o™½5E¯Þ7ò±ÈÆQ!Æå$ûÓÖU @uÇNµÕ¶‹¥üÛl­\fîAŸ½ŽÞËùž¸EÒþm¶VÇ®3w ÏÞÇoeüÏ\ Åëö_{ÿ#Ka{Ëî_ærÉ*å×?Z‘'ˆq¹:é[EÒþm¶VÇ®3w ÏÞÇoeüÏ\ ¢é6Û+c×»gïc·²þg®K×ì¾÷þAl/y}ËüÎU¥MÄnW¸“å8 ž¼WdÚ.—óm²¶=q›¹~ö;{/æzàdmKù¶Ù[¸Í܃?{½—ó=p2^¿e÷¿ò a{Ëî_æyÌRÈ !ÿ€š}…³äF\xb½-´]/æÛelzã7r ýìvö_ÌõÀÈÚ.—óm²¶=q›¹~ö;{/æzàd½~ËïäÂ÷—Ü¿ÌóËÄ”DÞ^Xã·5Áêöš¤ÅÖ; ¦Ñ1þ•ïí¢é6Û+c×»gïc·²þg®FÑt¿›m•±ëŒÝÈ3÷±ÛÙ3×%ëö_{ÿ ¶¼¾åþg̣ú´Œ?â_t;å¢oð«Öž»> Ó?ôÌ×Ñ¢é6Û+c×»gïc·²þg®FÑt¿›m•±ëŒÝÈ3÷±ÛÙ3×%ëö_{ÿ ¶¼¾åþg‰ÙøRfÈv>¥MkG§”l…‡ÑkÕ›EÒþm¶VÇ®3w ÏÞÇoeüÏ\ ¢é6Û+c×»gïc·²þg®K×ì¾÷þAl/y}ËüÏ/K93‚Œ? ²-ÞPçé^ŽÚ.—óm²¶=q›¹~ö;{/æzàdmKù¶Ù[¸Í܃?{½—ó=p2^¿e÷¿ò a{Ëî_æyô(b#F=«b à°ô±Þº–Ñt¿›m•±ëŒÝÈ3÷±ÛÙ3×#hº_Í¶ÊØõÆnäûØíì¿™ë’õû/½ÿ[ Þ_rÿ3‹žW™ ~5Y†®õ´]/æÛelzã7r ýìvö_ÌõÀÈÚ.—óm²¶=q›¹~ö;{/æzàd½~ËïäÂ÷—Ü¿ÌâÓ"¦V ü\zf»Ñt¿›m•±ëŒÝÈ3÷±ÛÙ3×#hº_Í¶ÊØõÆnäûØíì¿™ë’õû/½ÿ[ Þ_rÿ3“=§ã#ç•?ï¡]+hº_Í¶ÊØõÆnäûØí쿙둴]/æÛelzã7r ýìvö_ÌõÀÉzý—ÞÿÈ-…ï/¹™‚$„fŒ÷…#Ëßõ©ÿ} ßmKù¶Ù[¸Í܃?{½—ó=p26‹¥üÛl­\fîAŸ½ŽÞËùž¸/_²ûßù°½å÷/ó9rÑäæUüéÞz.ô?tÍ¢é6Û+c×»gïc·²þg®FÑt¿›m•±ëŒÝÈ3÷±ÛÙ3×%ëö_{ÿ ¶¼¾åþgvUâl'Ú¸íNÊæGfŽ ˆ6¡5ìM¢é6Û+c×»gïc·²þg®FÑt¿›m•±ëŒÝÈ3÷±ÛÙ3×%ëö_{ÿ ¶¼¾åþgÚ}³fÉ,îÜÄÜþ•¤–òd*AŸöMz“hº_Í¶ÊØõÆnäûØí쿙둴]/æÛelzã7r ýìvö_ÌõÀÉzý—ÞÿÈ-…ï/¹™æ¢ ‚ùRÙÄñ³FQ^’Ú.—óm²¶=q›¹~ö;{/æzàdmKù¶Ù[¸Í܃?{½—ó=p2^¿e÷¿ò a{Ëî_æyÍÖð2±»qÙI®vâÎòêë›i¶õÜc5í ¢é6Û+c×»gïc·²þg®FÑt¿›m•±ëŒÝÈ3÷±ÛÙ3×%ëö_{ÿ ¶¼¾åþgƒëZãÄ 6ò»²„×;ý…ªí,tëÜçþx·øWÓM¢é6Û+c×»gïc·²þg®FÑt¿›m•±ëŒÝÈ3÷±ÛÙ3×%ëö_{ÿ ¶¼¾åþgͶúF¨Œ?â_z¯’ßá[¶vº‚ü²Y\ãÞ&ÿ ÷VÑt¿›m•±ëŒÝÈ3÷±ÛÙ3×#hº_Í¶ÊØõÆnäûØíì¿™ë’õû/½ÿ[ Þ_rÿ3Çâ·»7A6Þ˰ԟÙÓLÀÉ…=¶×®6‹¥üÛl­\fîAŸ½ŽÞËùž¸EÒþm¶VÇ®3w ÏÞÇoeüÏ\ —¯Ù}ïü‚Ø^òû—ùžgœ±àª`ãÒ§ì0kÑ[EÒþm¶VÇ®3w ÏÞÇoeüÏ\ ¢é6Û+c×»gïc·²þg®K×ì¾÷þAl/y}ËüÏ96ÎN{R¬.½å^ŠÚ.—óm²¶=q›¹~ö;{/æzàdmKù¶Ù[¸Í܃?{½—ó=p2^¿e÷¿ò a{Ëî_æyÙˆÀCùSݲp§ø¯GmKù¶Ù[¸Í܃?{½—ó=p26‹¥üÛl­\fîAŸ½ŽÞËùž¸/_²ûßù°½å÷/ó<ÊâÇpÊ£gØU3gp«òÆü²kÖ[EÒþm¶VÇ®3w ÏÞÇoeüÏ\ ¢é6Û+c×»gïc·²þg®K×ì¾÷þAl/y}ËüÏ8Ò¤¸‰±2ÈõSZ³ÝoN7Þ»&Ñt¿›m•±ëŒÝÈ3÷±ÛÙ3×#hº_Í¶ÊØõÆnäûØíì¿™ë’õû/½ÿ[ Þ_rÿ3„‹Q• _&Lt)«Vډ݇—ßi®Å´]/æÛelzã7r ýìvö_ÌõÀÈÚ.—óm²¶=q›¹~ö;{/æzàd½~ËïäÂ÷—Ü¿ÌæZê7CóÆ©1Ãä´×fÚ.—óm²¶=q›¹~ö;{/æzàdmKù¶Ù[¸Í܃?{½—ó=p2^¿e÷¿ò a{Ëî_æpKç ÛJ¡Ëúg¹®ù´]/æÛelzã7r ýìvö_ÌõÀÈÚ.—óm²¶=q›¹~ö;{/æzàd½~ËïäÂ÷—Ü¿Ìã Œ‡ËʸôÍkí <ÏqÓx­ÖÑt¿›m•±ëŒÝÈ3÷±ÛÙ3×#hº_Í¶ÊØõÆnäûØíì¿™ë’õû/½ÿ[ Þ_rÿ38­óŸ§ßèVM×§n~ö3òû/æzàd¸w£ÍµÊqÍiJNÖÏJëÿ²t´,cÓ´ðyÁóHÏÞÇðû/æzàeï§éä0VM×§n~ö?‡Ù3×%Àò«ÙÄŽb_Z’ÆÜF èMzchº8feÒôÒÜà™'ïcø}—ó=p2ã¥iƒvÝ;O=q™ˆÏÞÇðû/æzàd¸,8S×8÷«àê1]™ÒôÁ»nŸ`zã3Ÿ½áö_ÌõÀÈú^˜wcO°n¸ÌÇŸ½áö_ÌõÀÉp8k‹´Æ ýkžÖ5q³*7ãž•ë¤iGwüKtæëÒž~ö?‡Ù3×1Káí @ChÚTƒœon¿{Ãì¿™ë’à|Íwp×7'ŸZð¨uí_L7…<5’WÃú)<ã8ûØþeüÏ\ £øSÃD’a–éEÑ; 浬®’A·w'Ö¾ƒo x`–#ú#uÆ@çïcø=—ó=p2áá_ FI‹Ãú(ÆvôÞÇðqÑ3×%Àù¯V'qRzzWÔwkÿÉ›o[H†võûÝñïêzôÉ£'…ü8å‰Ð4g<ãv9ûØþeüÏ\ ß¾Ùö+¢<  !#†8RØþzÜõ?ROÃ_êSé]”_tW%áØÊ¼W[ÝÄ>Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( 8ÊÖ«eç!®„óPÉqÈ -Ôt[¢ÇËšdÿuȬgÐõ,ñywÿ›ük×äÓÑÏ**#¥F„P‘ÿaêóûwÿ›ühþÃÔÿçöïþÿ7ø×­ÿdÇýÑGöLÝäŸØzŸüþÝÿßæÿ?°õ?ùý»ÿ¿Íþ5ëÙ1ÿtQý“÷Ey'ö§ÿ?·÷ù¿Æì=OþnÿïózßöLÝdÇýÑ@Iý‡©ÿÏíßýþoñ£ûSÿŸÛ¿ûüßã^·ý“÷EÙ1ÿtP’aêóûwÿ›ühþÃÔÿçöïþÿ7ø×­ÿdÇýÑGöLÝäŸØzŸüþÝÿßæÿ?°õ?ùý»ÿ¿Íþ5ëÙ1ÿtQý“÷Ey'ö§ÿ?·÷ù¿Æì=OþnÿïózßöLÝdÇýÑ@Iý‡©ÿÏíßýþoñ£ûSÿŸÛ¿ûüßã^·ý“÷EÙ1ÿtP’aêóûwÿ›ühþÃÔÿçöïþÿ7ø×­ÿdÇýÑGöLÝäŸØzŸüþÝÿßæÿ?°õ?ùý»ÿ¿Íþ5ëÙ1ÿtQý“÷Ey'ö§ÿ?·÷ù¿Æì=OþnÿïózßöLÝdÇýÑ@Iý‡©ÿÏíßýþoñ£ûSÿŸÛ¿ûüßã^·ý“÷EÙ1ÿtP’aêóûwÿ›ühþÃÔÿçöïþÿ7ø×­ÿdÇýÑGöLÝäŸØzŸüþÝÿßæÿ?°õ?ùý»ÿ¿Íþ5ëÙ1ÿtQý“÷Ey'ö§ÿ?·÷ù¿Æì=OþnÿïózßöLÝdÇýÑ@Iý‡©ÿÏíßýþoñ£ûSÿŸÛ¿ûüßã^·ý“÷EÙ1ÿtP’aêóûwÿ›ühþÃÔÿçöïþÿ7ø×­ÿdÇýÑGöLÝäŸØzŸüþÝÿßæÿ?°õ?ùý»ÿ¿Íþ5ëÙ1ÿtQý“÷Ey'ö§ÿ?·÷ù¿Æì=OþnÿïózßöLÝdÇýÑ@Iý‡©ÿÏíßýþoñ£ûSÿŸÛ¿ûüßã^·ý“÷EÙ1ÿtP’aêóûwÿ›ühþÃÔÿçöïþÿ7ø×­ÿdÇýÑGöLÝäŸØzŸüþÝÿßæÿ?°õ?ùý»ÿ¿Íþ5ëÙ1ÿtQý“÷Ey'ö§ÿ?·÷ù¿Æì=OþnÿïózßöLÝdÇýÑ@Iý‡©ÿÏíßýþoñ£ûSÿŸÛ¿ûüßã^·ý“÷EÙ1ÿtP’aêóûwÿ›ühþÃÔÿçöïþÿ7ø×­ÿdÇýÑGöLÝäŸØzŸüþÝÿßæÿ?°õ?ùý»ÿ¿Íþ5ëÙ1ÿtQý“÷Ey'ö§ÿ?·÷ù¿Æì=OþnÿïózßöLÝdÇýÑ@Iý‡©ÿÏíßýþoñ£ûSÿŸÛ¿ûüßã^·ý“÷EÙ1ÿtP’aêóûwÿ›ühþÃÔÿçöïþÿ7ø×­ÿdÇýÑGöLÝäŸØzŸüþÝÿßæÿ?°õ?ùý»ÿ¿Íþ5ëÙ1ÿtQý“÷Ey'ö§ÿ?·÷ù¿Æì=OþnÿïózßöLÝdÇýÑ@Iý‡©ÿÏíßýþoñ£ûSÿŸÛ¿ûüßã^·ý“÷EÙ1ÿtP’aêóûwÿ›ühþÃÔÿçöïþÿ7ø×­ÿdÇýÑGöLÝäŸØzŸüþÝÿßæÿ?°õ?ùý»ÿ¿Íþ5ëÙ1ÿtQý“÷Ey'ö§ÿ?·÷ù¿Æì=OþnÿïózßöLÝdÇýÑ@Iý‡©ÿÏíßýþoñ£ûSÿŸÛ¿ûüßã^·ý“÷EÙ1ÿtP’aêóûwÿ›ühþÃÔÿçöïþÿ7ø×­ÿdÇýÑGöLÝäŸØzŸüþÝÿßæÿ?°õ?ùý»ÿ¿Íþ5ëÙ1ÿtQý“÷Ey'ö§ÿ?·÷ù¿Æì=OþnÿïózßöLÝdÇýÑ@Iý‡©ÿÏíßýþoñ£ûSÿŸÛ¿ûüßã^·ý“÷EÙ1ÿtP’aêóûwÿ›ühþÃÔÿçöïþÿ7ø×­ÿdÇýÑGöLÝäŸØzŸüþÝÿßæÿ?°õ?ùý»ÿ¿Íþ5ëÙ1ÿtQý“÷Ey'ö§ÿ?·÷ù¿Æì=OþnÿïózßöLÝdÇýÑ@Iý‡©ÿÏíßýþoñ£ûSÿŸÛ¿ûüßã^·ý“÷EÙ1ÿtP’aêóûwÿ›ühþÃÔÿçöïþÿ7ø×­ÿdÇýÑGöLÝäñèz–îo.ÏÖfÿÞÓ4k€ÃÍ’Wÿy‰®ìiQá> stream xÚZYsã6~÷¯Ð[¤Ú†¸xdkf'3ɤrNœÚÚJò@K´ÌŠTxÄ3µµÿ}ûHІl'år© ‚ Ðèþúë_ÉÕþ¿\Õ«þl–%i²J‘‰S³j‹ÕíêÇ«:F«/¯þy}õò­Ò«Ld±ŠW×·+«…Ñf•Ä ü®®÷«_Ö¯¿zõÃõ›÷›­²ÑZ‰ÍÖÆÑúúçëL×ß¿÷ê›Ío×_Ã0j•ˆ,‰$c"#PŒxˆº<)×kþ2 ´Æwú6¯‡¼ÂnWo®¯~¿’´ 9MI‹Ø˜ÕîxõËoÑj÷¾^EBgéêžzWÆ*gø\µúéjZæ¥ßñ ±2^Å*Q”á~¿*¶‘¦3‘n¥ÒÒ…±±o|ùî(Õê‹^úãƒá·nüíì5/#)l¬V6M…T)ëämyÚ«^ÊÏ7[-£õmshó㱬åË(QêÕúvcìº-ö¤Ø¥sØJ›ÏnµGÃvUÞuE‡;Ÿ¦ëwýgk×ÌÄèõëéB­‹´ë§¶èº²©¹C÷©îó,ÿÙèØàz°wÓrkÝáŽä«S5t8U˜ÞVJ‘YË“ÈO§¶ùXó¾¨>m¶ÞúmÙæõ>ùUÞ}Ø€VŠªâ·C½ëiÆ7ƒ0û(¹8|×qZq¶¾É»rÇ"-œÅ®n7 †…g o²…G|0}TŒ}ÌËš¥û²Þ7øš{¾.±G­óù|pö0wVr¾†›–ŸíŠ–-æ¶qB‡#¡tšY5Ty}òCAëâé¨ È8÷¯ÊÝè+“5hôáâµi2z: ‚ŠÖMS}(û. •ŠxÔÔËrˆLûûoöeo6òÉaZ&þ¹24Oè,Ÿ³Ez¹E¸rÞ"”æ[¤d¼î·!&‰Ôç;rjNÐ+‹×ƒûíï Î÷ÎÆ…kô•®(x–ÒœÍ2Ù„­CêF<$:½¶›%¥Üäc)´ÊÎ'ÏÖ£åz_ôyYu|Aƒh0It6là%pƒ[CéjºÍ‡Žþ-Þ­ƒýåºÀ@[äÞ¢ ‹ý§Sñùt3ÉL+0˜Rq2g}/7Û8‚•ì÷,ô÷î`[F˜P-‡±q”âŸþùÿ8¼@ñ¿ô´›;¯!vH3Ïr#ýÍ øwïß³'ÝêÿØiç°°.®¯É×Õ°o¿F‘ª w™óNr#×®qûȱaDd,¢$E‘¥KGÂêÌw¼¿kºÂÝÔ]ß» ÉùH,l’œë£Ï¼qBà_ý=^5|‘·H2ñ¨ûîEÈ©a 9N2Ì.6ÂEh©ÐÇŒþtö'­|ˆƒ©HB ôaqÝ0ßcq¼6Ñú…[7˜]žíæEÍ«X¨tœšK©¬õ}^°#Üß•»;Ë.HÊHë( €E©'”Ü')ë|ý]†ü´9趨2áiX‡tÇð;ŒÛÚa% +ùb†“±Å•›TMcŒ LVeÂÄãlß–U¦¡25%è ǸäkWt‚[2ÚIœ²?òj3@Ÿeˆ8Žæ°„D$*{šD=¾Õ­S°†ƒ§ÎÖŸš›)÷/8¢žòa à.eOÍaÍñ„Zr­üœ³„xµñÂŽ‡Ó8”ÔÂ]QEÚB$DáÖqÿðâŒâ¤ÀÎîš¡Úó½zºa×UÓ|8‹/ª’ÆFµ$ÈÑ «º…N‘vÊÆ'é&ß9‰4¿ˆ@ ¸GàêöéM”ŽþöÀp•TˆÉø@ùñE=8ƒÑÀ–ε}_bÜÕZ­ïò P¢?rܹÈ)BáÕPï‹6˜aÓé³ [&Òh´ÁË .â; u_öU8VXHÐìÌC¬ik´æ­áuC dÌ‚Ýîå‰ lSNv ^æù@lŠðþkÉù’K e_YºÿRˆF=#þa œØ¬ICÒñMÁvŒ09_ ,Ôóc3tÎz+à>jPz Ðý34yZ\#-äX›ª/OãÅC0²ªÔ›wª=­é¡uf’ðâ‚4™©Y+ü±kФ”‰’Gæ|>››æ# ä†îÎH®edéNÓ÷ nc¬ô–ãBDÚH·îšj8Öe¾¼©ý}ÑmÍò%jž™g8z<1 ´?·÷àjñÀGhÕc>˨€P™ô9–— =:“£ëäFh„‘…Ô ž½FÇܽ¾Apîšó¶óìÕ,zWÅ­3iØŒ4KÏWE…3íÌŽ˜öp}VŠä¹ëË’QùM½si Í ^ÁŽ0O«˜zu.ß¹ B·¦YÿÙ·c>öŸ¡ëC"j‹˜h̼¢&n P3KT!ê&>?i—w…Ï‘ðÒˆùaH6>*0±S QøG( Ab|~,zT»¿üœ~#^PQ‰â5¿ÅFçI)" Ö„W? ¹‰ÈêbDö……Ô[j<˜u[îw1,™6ñIÊNx¦ÏhP†=CšÎã/´ýr^ n* ÃЉêZ¬È ¢Ý"9c,AêǤʀÝÇ"™ïûÈJFt™ÄÖ¢yݣ̜K±³Õ'™I6,Þ½â4ÒTÀ¼dQ è["I¦®÷Å©ŽQïJÌÝ´ÆxÛߘÔãm_ŒzÁñÙÊÐó½ÒýæU×ð£4~Ìâ/ý¾¹+¬* °M¤HSå*¸:Ò¤îh5éV"—Èm2¯àê‹\ÿ‚íì K¸@»€¯YƒU^,à*WÀý6äbáJnlÿz)×dÀ<´™vŒó=S*OèÊ=NPeó-SÀ !ÀÞñ¦öÝ{Î* mGSl»m) C[ñÆÅìhÉÞ•pÜ4ó%ý° í oé ×|ó‰óÉ­»À’ëÌ„}ÿ½ÿeøP³Béb°Ú>§8¢¸ömÞ¥•æ P1o”=RS-×ÿÞH¬F ÜÌ¥‰ú3,JôÜDø‹”®J¹Š…î—ÇSU„ò.–çx]$™\$€HÙŸL±Œ1¥÷ìZ`aû½]³‘Æ¥ -ÕëÝF`ç}ÔèMdËhÙØb3Ùã£Ø—t„‘«æ¶¼-‘Ó’Øó½vp÷úò°µ5Iæá[é¬ r1Œº±rÜÓ>ì.7·]KGQPpQE)i<…\æóF¤2},|$óüÎmLOó„Á}(Æ}C«ÓäünòÝüÂKÎÊ-4:Çß[_ Å*û“9àh µßQ:IÇêéb>1ÄÞøÑòÆÌqшTqìgƒãŽt9Iƒ@ (ÌÕTÂVSûûÆ0kŸ˜‰H•½Ä½U¨Vq~ԡ̺Šðäíè#´š‰)Z š1T>§>*ñ™±@ƒF‹£SÕGQ[Çê']pšzψͼöE/pÒøaµ8xXüËHû'k2ûhaÌ ¥ÆÂØ¿Ê=L24–B=œŸ )Õé”(ŠçŠD<˧à*gæÛÑÔrO³r|zÆá(‹5 Òþºo«íÏDñ»ˆ"G¢ºiòvÏ]€“µýnè¹Ïm¬·h,¤Ë³3­`ÁNÜ0¬"›Œ;÷Åp‚ÝǺ[@ÙZ(™ÍòÉ“õQr?xPɤ0ÑòÈÊ»5RrYÐXÎŽ©…NòŠŽ`áÒå'(^°7à’Ú<×à0óÊC!-ÄàÔæ9…¦L$iöÔHú/”w] ئÉBuߟ *]K:î3:ò%lùH2œ$sÓü˜evÄÉ‚gfí'~×¾Íb0ØÌçÙØŽ‘Ð¸Ã5Ÿ¼ØE)…Ü1ð<ªm†zO‰Œäœ[9'Dižò5»G>#$iÌM$ÿ8lC$hÎ5K#Æî”¤ì!`§þ¬‹¾%ã𻂼u€<—tkOÝáBA¬Á„ÌS ©T¦õÜÛè; 3çkZÄËΔ ×L–£ù\óÈÚöe@âqŽÏuÀÖjÔ ÷ç¡)•@¾~>J¤Á÷EU¹Ï9ØhñË z!j£.¸8”ñü îLZvutŽùÞÝFÍDB™©Š"a&ºó*Haµ±&^]`Ù8`ü}KL‡4%Çq¬Ì¦á[ ÿòy JŽ3g4‡n„lI… W½?=p 2”ϸÙi„ª§“OµwíKŽšÏ‚¨žË'9«ž}ŒÒðˆUCîM>È^)‹NˆÍã*‰Ä˜–(®ž'>`°ç[§¦+ùÃ(lç<ši3)ûN$úA#æòî(aü…Vmʱð³Ëé ƒJ9|ƒbî…éd;x’˽€awþĪعLw + @×Áz^ªCïá¸6ÏH"ìü®Ï‘_gN0,¤UŸØƒàz×ìÝOC•Cìr̶ÀË4~ä?7á82ógW• ~0ûŠìÙ´…KÊMIÚű"C£ôXf¦Wl* L¦2ïÜÑAÞ .ÛyvQ÷áïU =)†·dë{-R~þ&a¶Å—Ë#fB×»œâ˜õÁ &=T…o¢º´Úüt|¸â”X˵{7ƒæ±B›ˆYCŒ‹I`d ÆKW•i¹—edaX&±1 nJ¾‚Ícª"ÚÛäI°¦¢¸?¸Ç‘ç àò\HqGoG/ÕKèhü,ì&:IžFC“„j-ôY¦ÆSÏ €!Dä3¡&kz†J°P‹©—+YzŠŽ«§‰xñÊmJ'Àç§wEͧké,ØB–Iˆ$6` lŒ?œ‚†²>QªˆÇ6cì…ö™òé 'X ;ÍÅê¯Ñ‰ˆ5x9ð™ºbtJ ƒðÜfé‹bçNˆ‡G29øÍõÕÿ‘Èì endstream endobj 68 0 obj << /Type /XObject /Subtype /Image /Width 815 /Height 456 /BitsPerComponent 8 /Length 29832 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream ÿØÿàJFIFÿá°ExifII*JR(i‡Züÿÿ)( üÿÿ)( 0210‘ 0100 ÿÿ / ÈÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀÈ/"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?÷òqQ¼¡{ÒLûTšá|kâÿøGìU¢Q%Ì­¶%nƒÔŸaýEvoz‹üB¢:ŒÞóô¾:ñ¬XêL¹ì±Gù©5ü&Zùÿ˜œŸ÷î?þ&•ÀúûF?ï ?´cþð¯žá1×ÿè'/ýûÿ‰£þþ‚rÿ߸ÿøš.ÐßÚ1ÿxQý£÷…|óÿ Ž¿ÿA9ïÜüMð˜ëÿô—þýÇÿÄÑp>†þÑûÂíÿ¼+çŸøLuÿú Ëÿ~ãÿâhÿ„Ç^ÿ œ¿÷î?þ&‹ô7öŒÞhÇýá_<ÿÂc¯ÐN_û÷ÿGü&:÷ýåÿ¿qÿñ4\¡¿´cþð£ûF?ï ùçþ{þ‚rÿ߸ÿøš?á1׿è%/ýûÿˆ¢à} ý£÷…Ú1ÿxWÏ?ð˜ëßô—þýÇÿÄQÿ ޽ÿA)ïÜüEèoíÿ¼(þÑû¾yÿ„Ç^ÿ ”¿÷ÄüEð˜ëßô—þøÿˆ¢à} ý£÷…Ú1ÿxWÏ_ð™kßô—þøÿˆ£þ-{þ‚Rÿßÿñ\¡´cþð£ûF?ï ùëþ-wþ‚RÿßÿñÂe®ÿÐJ_ûâ?þ"‹ô/öŒÞhÇýá_=Âe®ÿÐJ_ûâ?þ"øLµßú Kÿ|GÿÄQp>…þÑûÂíÿ¼+ç¯øLµßú Kÿ|GÿÄQÿ –»ÿA)¿ïˆÿøŠ.пÚ1ÿxQý£÷…|õÿ –»ÿA)¿ïˆÿøŠ?á2×è%7ýñÿEÀúûF?ï ?´cþ𯞿á2×è%7ýñÿGü&Zïý¦ÿ¾#ÿâ(¸BÿhÇýáGöŒÞó×ü&Zïý¦ÿ¾#ÿâ(ÿ„Ë]ÿ ”ß÷ÄüEè_íÿ¼(þÑû¾zÿ„Ë\ÿ ”ß÷ÄüEð™kŸô›þøÿˆ¢à} ý£÷…Ú1ÿxWÏ_ð™kŸô›þøÿˆ£þ-sþ‚3ßÿñ\¡´cþð£ûF?ï ùïþ-sþ‚3ßñÂe®ÐFoûâ/þ"‹ô'öŒÞhÇýá_=ÿÂe®ÐFoûâ/þ"øLµÏúÍÿ|EÿÄQp>„þÑûÂíÿ¼+ç¿øLµÏúÍÿ|ÅÿÄQÿ –¹ÿA¿ï˜¿øŠ.ПÚ1ÿxQý£÷…|÷ÿ –¹ÿA¿ï˜¿øŠ?á2×?è#7ýóÿEÀúûF?ï ?´cþð¯žÿá2×?è#7ýóÿGü&Zßýgÿ¾bÿâ(¸BhÇýáGöŒÞóßü&Zßýgÿ¾bÿâ(ÿ„Ë[ÿ Œÿ÷Ì_üEèOíÿ¼(þÑû¾{ÿ„Ë[ÿ Œÿ÷Ì_üEð™kôŸþù‹ÿˆ¢à} ý£÷…Ú1ÿxWÏð™kôŸþù‹ÿˆ£þ-oþ‚3ÿß1ñ\¡?´cþð£ûF?ï ùïþ-oþ‚3ÿß1ñÂe­ÿÐFûæ/þ"‹ô'öŒÞhÇýá_=ÿÂe­ÿÐFûæ/þ"øLµ¿úÏÿ|ÅÿÄQp>„þÑûÂíÿ¼+ç¿øLµ¿úÏÿ|ÅÿÄQÿ –¹ÿA¿ï˜¿øŠ.ПÚ1ÿxQý£÷…|÷ÿ –¹ÿA¿ï˜¿øŠ?á2×?è#7ýóÿEÀúûF?ï ?´cþð¯žÿá2×?è#7ýóÿGü&Zçýfÿ¾bÿâ(¸BhÇýáGöŒÞóßü&Zçýfÿ¾"ÿâ(ÿ„Ë\ÿ Œß÷Ä_üEèOíÿ¼(þÑû¾{ÿ„Ë\ÿ Œß÷Ä_üEð™kŸô›þø‹ÿˆ¢à} ý£÷…Ú1ÿxWÏ_ð™kŸô›þøÿˆ£þ-sþ‚3ßÿñ\¡´cþð£ûF?ï ùëþ-sþ‚SßÿñÂe®ÐJoûâ?þ"‹ô/öŒÞhÇýá_=Âe®ÿÐJoûâ?þ"øLµßú Mÿ|GÿÄQp>…þÑûÂíÿ¼+ç¯øLµßú Mÿ|GÿÄQÿ –»ÿA)¿ïˆÿøŠ.пÚ1ÿxQý£÷…|õÿ –»ÿA)¿ïˆÿøŠ?á2×è%7ýñÿEÀúûF?ï ?´cþ𯞿á2×è%7ýñÿGü&Zïý¥ÿ¾#ÿâ(¸BÿhÇýáGöŒÞó×ü&Zïý¥ÿ¾#ÿâ(ÿ„Ë]ÿ ”¿÷ÄüEè_íÿ¼(þÑû¾zÿ„Ë]ÿ ”¿÷ÄüEð™kßô—þøÿˆ¢à} ý£÷…Ú1ÿxWÏ_ð™kßô—þøÿˆ£þ-{þ‚Rÿßÿñ\¡´cþð£ûF?ï ùçþ{þ‚RÿßÿñÂc¯ÐJ_ûâ?þ"‹ô7öŒÞhÇýá_<ÿÂc¯ÐJ_û÷ÿGü&:÷ý¥ÿ¿qÿñ\¡¿´cþð£ûF?ï ùçþ{þ‚Rÿ߸ÿøš?á1׿è'/ýûÿ‰¢à} ý£÷…Ú1ÿxWÏ?ð˜ëßô—þýÇÿÄÑÿ ޽ÿA9ïÜüMèoíÿ¼(þÑû¾yÿ„Ç^ÿ œ¿÷î?þ&“þ=wþ‚’ßÿñ4\¡ÿ´cþð£ûF?ï ùãþ=wþ‚’ßÿñ4Âg®ÿÐROûâ?þ&‹ô?öŒÞhÇýá_<Âg®ÿÐROû÷ÿGü&zïýþøÿ‰¢à}5Ïñ ™.•ºùÈxÏ_íªIÿ~ãÿâkKKø‹­Y]#]L.àÏÎ¬Š§Å@çëEÀú \5>±4N;ëh§‰·G"‡SêÈ­•9À£&ÈÍxÄ»ƒ-ýˆÏÝÿì•í:©ýË}+Â~ ·üL-¾ÿ²Ò`r›¨ÝQn£u!W†¼/¿ey;^šUQQŽ‚ ùNáß(犱£èþÔ4û餸Ö<Ë|ÙÚ/(#Ÿõ`Œöþ,W!ı#–Däír9ävúŸÎµ´MjßLÓµ›y£•žú×ÈŒ )ç–ÉsÛ4>¶ìø<-6¨>Õ¦K39KEÔ§Tšr!B‚ Î}*¶ŸáFü\3=­œvòùI{7–¾g÷ÁÉ«š_‰´”Ó´¸u[KÇŸJ•¤µkfP¯–݇ÏN@éD^(Óµ [ËMzÖèÃ5齌ٲîV<;ºŒwëEµþ¼¿à‡OëúìÚ'ÙtŸ¦£j¢öÁ!òÉ9ØYŽHúŒUOÃ&m?Lº³ŽÞÖÝt¸î.®&b¨\ú ,{*)¼ck}s¯›ÛI– N$HÄ, FSîç>½êwñžu£Úè×¶·/`–) •DÞ“¯GO›‘õ#üV¶þ¼Æ­ëÈMÖZ¿‡„Ѽ_o’áeš9‰f )^«2? ÜÜjòéö·ÚtþTFy.ã1F€àîlpGqŽõkLñu¶›máôóI&›,í6@ÖLýÞz€{â ²Õ´=7Ä {c6¹ooåœ2y>nòÙ ƒò”ÇcÎi½ÅÓúîcßAö+© ûEµÆÌ~öÚMñ¶Fx8®Ãijµ{-+I†Þ]JGEf7¬fl©$´DmUã9Ïá\¿ˆõKM_ZžòÊ×ìиa rÄ>Õ¯qâøGŽ“_µ·•¡UT1K…b6mn„¥ dr¥ï…µ6µÄ¶wQÜÎ-Ò[Y÷¢ÊN6±ÀÁªÚÎ6‡:Á=åŒòœ‡KY¼ÃáÆ?¡­Wñ.g–“kz¶qj };\”2¤|ªÆ0;šÁÖ¯ãÔµ»ëØUÖ;‰šEWÀ` ï‚i_ôþ¾ð |3}kv×;îÕ A?ïä@Ls×Ö©øWQÒ줺–K9Ò :ÛOæ4 zãõ¤½ñ$R]èV‘IæivñFâPvCž0O𫺗Š4£c©¦“iyΩ*Ér×,¥ » ŽO$õõ¦ÄŠ×>Õmle¹v´2Cš[DŸ3ÄŸÞdÇñ§ë^ƒMÑôëøoàÍŤsIo4£Îfn¥º3ëØÕÛ¯ér5þ¥ÚëÖ¿f—{©_â'Á¬½WYÒµ]Å$†ö=RÎÙ-©O!•OSüYÆzw¤ïý|ÿàþ¿ø&‘TòÀ}jþ™¦\jÏr¶Í›{w¸0‘•\gži4ÏêÚ=¼Ði÷†¦9‘DhÛŽ1ü@ö©¼5¬Á¢ê=Ô2KkqnöÒ¬D ØägŒñL  ðÖ¡q6•mn[TF’ ¹ 2wqÇášžO \Ú_é‘ÜÜ[Og{r°}¢Êo1AÜ ‘ÁëÛµ^OéÚÎ5­½ù²Ò¢’3æ„2¾å t8ýEgÇâX Ñôûhá•®-53{ó`#/P3œçð£¯õßü…Óúíþf‚xbÖ߯öúSOk}m,²¨….ˆt ¤!UÊ·ÓÐÕk¯ Û§…­uhï †YmðÜςေ ¿1ã¿­H¾#Эügm¯Zé`É$·1Ê#?3)fL“ÔÕIuÍ&ûÃQi×°ß-Õ£Ìö¯M¼’7çž¾•:òù•¥ÿ¯2Æ«¢ eðí¦™j>Ñ{aŒÆ÷9%‰>ÕFûÃwö_fd’Òö;™|ˆä³›Ì_3û„à`Ö„1¶¶¹Ð/c´˜ÝiÐ}še,6ÿäIgá-Bö1$w:z+ÊÑ[™.vý¥”àù\|Ã=ø¦iž½Ôi¤–ÒÎÞ ü‰òo,Ï(895§£xÒÚ×@¶Ó.äÕ-šØ¶Étæ÷€œáƒúgµR°ñ.›>­Å},Mxo#žÙ“ÌÞx;ƒpsýi­$.„.´·Ó¼U}iiŠÊAÐeÿ3X»ªÿ‰5hµ¯Ýê0FñÅ1R«&7 (ãéY{ª#{+”÷Зuª-Ônª.ê7T[¨Ý@î£uEºÔ.ê7T[¨Ý@î£uEºÔ.ê7T[¨Ý@î£uEºÔ.ê7T[¨Ý@î£uEºÔ.ê7T[¨Ý@î£uEºÔ.ê7T[¨Ý@î£uEºÔ.ê7T[¨Ý@î£uEºÔ.ê7T[¨Ý@î£uEºÔ.ê7T[¨Ý@î£uEºÔ.ê7T[¨Ý@î£uEºÔ.ê7T[¨Ý@î£uEºÔ.ê7T[¨Ý@î£uEºÔ.ê7T[¨Ý@î£uEºÔ.ê7T[¨Ý@Z]š_]1"À,ÁoAüë¡k-1£òÍŒ!}Bá¿>µÌi×¢ÖgÜp®'ÐŽŸÌÖŸ›dŠAn¤r"Œ~4€ÏŸN1ê¢Î7ʹõ {Ÿ¦å[qC§Á¾ô³q°…ia$àâ#×µaI|_QK¥ª|£ÔŽsüÍhEtI’HgkØhÉÇxzPMVÒ£†îÔ2A0Ï–Ç;3ü¿•t:~¥éV±5õ²O<„yWr!=½í“Ô×7w:Ë6ˆÛ–1Ë{ñ­¸¯aÔ¡T™Žïùkq¸úUïÅqã%(Å[n§«•S§9ÉJÎ]/ø‹«éú}Öž÷útŒ©"ޤÔÖ¹Õ¿¨_Çmc%ªJÒ3©L3dªž9?Ny®ouVR”–Ý ó8S…T¡½µ·sÝ< tN‰d¹éŠôHPW–x¿âUiþà¯P¶ÿV+´óLý[ýK}+Áþ!_ÛÀÿöZ÷[ýK}+Á¾!ÿÇý·üÿe¡Æî£u\Òô¹uYåŠ)­áBÓ<“³U^¿uIïéR6•<Ê5.p4¡¬â–Q@ÃeWhçïrKÐkS?u«GPÒZÚ{-„·Ý[G0E]͹†pëTg·žÖf†æ `•zÇ*aõšfê7RV–‰%æœ÷í}ckn³y9¸i-Œðµfî£uY]6î{‰ ²‰ïš.KÚFò.=~è }@«º®ŠšuÞ§šgû"®`$>ïï0á?´“ºÕ¡«è—ú%ÓCw¡CafòØG'ùXŽk:€uªÔztòésêј`‘c‘rw®ìàãÇuëÚ§¶Ñ¥–+9æ“Ë‚í¤ùq´²|ƒ“°™ã9ì}(;uªhlo.a’k{K‰¢‹ýd‘ÄÌ©õ `~4ÑkrÏ YËH»ãQeן˜ r8<Ž84ê7R˜¤X–VÄnHW*B±È¡ÆF~¢›@ ºÕ¥e¢I{§½ó^ÙZÀ³srî 63ÆÔnÞµÞ‘{g{£Be–U ‘ûÁ*ž…ê8?•@RÝFêÕÓô›Ë›ÛY`¹†æÞÙ¦Hv Œ.Ò3Îj„–7‘\ý–K;”¸Æ|–…ƒãÎÜg &€!ÝFêw“)dÉå»lWØv³qÀ=Ï#zšëO¾±ÙöË+«mÿwÏ…“wÓ f€+î£u%ZƒOžæÆîò3ŠÐ!1!ŽãŽy÷[uªËió®Ÿo{ò4W¼1ª’_r…Ïÿhcš¹§èwë0é÷ðÜÙ™ß÷‘l,0t⇠[¨ÝVbÓu íšæ ¹m×;¦Hc®X UZ]Ôn¤¢€u©( ÝFêJ(wQº’Š]Ôn¤¢€u©( ÝFêJ(wQº’Š]Ôn¤¢€u©( ÝFêJ(wQº’Š]Ôn¤¢€u©( ÝFêJ(wQº’Š]Ôn¤¢€u©( ÝFêJ(wQº’Š]Ôn¤¢€u©( ÝFêJ(wQº’Š]Ôn¤¢€u©( ÝFêJ(wQº’Š]Ôn¤¢€u©( ÝFêJ(Û¨ ƒœ ý)´PüÖõ¤/“’ü)´P‚f^‡ô Ìí÷°~ TtP‹“ôô¤ÝIE{WÃÿùÚ¸+Ô­¿ÕŠò߇ÿò ´ÿ®b½JÛýXªŸ«©o¥x7Ä?øÿ¶ÿÿìµï:·ú–úW‘k^¾ñwˆ¢°°–Þ9c†I‰˜.ÐÈ;ÏÌ(`qž¼ŽÆãQ–G€ìù•`¥]ˆ\7 ŸNõ&™©$ïªIp,íËéÒF‹I ±Ü¤ (ž¾õÕÂ’ñ/üÿi?÷öOþ7Gü)/ÿÏö“ÿdÿãu-_î·çþcZ}÷ü¿Èͳ¿±[«wiíÏ£-¬fIŠ” ¹R2ÈëéX"º–i­`’;$ðìO²\ÆÝÄà¹fÉä÷â»øR^%ÿŸí'þþÉÿÆèÿ…%â_ùþÒïìŸün†®ïýuÿ0NÊß×Oò<Öº½Vo ÍošQ¸ûps Ðãg—Œ/{Šßÿ…%â_ùþÒïìŸünøR^%ÿŸí'þþÉÿÆéô°ºÜç‘%—F›M‚þÂÖõ/ZâUK˜âŠEe]¥\Ÿ)åŒñSkW¶³·ŠLwPÉçˈ‡ÌÁ9+ëøVßü)/ÿÏö“ÿdÿãtÂ’ñ/üÿi?÷öOþ7JÚßúéþC¾–9_*Üj²ê0ÝÛÏmrÁ£Î×åy:¯§"¹úô¯øR^%ÿŸí'þþÉÿÆèÿ…%â_ùþÒïìŸün„¬8ßÜ·“XÝJ±ÚßÄmäw8T'”sô`Ó5­ý¢xÂÎî#=´r–[¶[=>g$þ"·?áIx—þ´Ÿûû'ÿ£þ—‰çûIÿ¿²ñº¿õýw¡™¥jQÇ¢éOd4ÓubÒ4‹wxðbŃUÁ ã*='\´µÓmõY^/·X3ÛÇoÝã‘Ãd@ £Û"µÿáIx—þ´Ÿûû'ÿ£þ—‰çûIÿ¿²ñº}@ä¼LöÍk¦X\¥Å­š6%CììXŸÈ¨ÿ€ÖzWü)/ÿÏö“ÿdÿãtÂ’ñ/üÿi?÷öOþ7I+g/an·þ’Î;»8§[ñ)K‹”‹åòñ‘¸Œóé[–›j`Ò¾Óm<éòÀ.]Ý"2¼›Êï0\ewq×Ò´?áIx—þ´Ÿûû'ÿ£þ—‰çûIÿ¿²ñº¿õå`Z^w3!¿‘領’]:ÑÓK’ÞÝá½Þ™,S+;s׿È/­l¯tkËøfšÝ'Iî#1#Y »‡P3“ŒšÖÿ…%â_ùþÒïìŸünøR^%ÿŸí'þþÉÿÆèµ÷þ·ÿ0¿õ÷‘—¦½¶‹™Õý—š·W.$†u•b-¢9+œ|Ã?…gêöóÛxJÍ.. ¹v¿™·Ãp&q?ˆÏƺ‹ƒ>)µ¸Iâ¾ÑĈr»Ø~F2 X¿øMãKËZ–É! F‹ž¸UˆŸ¥ \iÛúõÿ3ÊkBÔÃCÖÎmZgXDq\"Èçç ÙžœWWÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿÑbLÝ3]´1è“^(Z+‹ V–%tjÙcÁ÷ñíD€¶Õ´»[“¥Ál3,–÷­8Ré·æfvÚ Ç§sZ_ð¤¼Kÿ?ÚOýý“ÿÑÿ KÄ¿óý¤ÿßÙ?øÝ \iØÌ´‚â-3÷ ©ÚÙ¥´²™YîBœ y*?ŒôÎk’Ô¥†ãT»šÙ6A$ÎÑ®1…$?*ôi~ø²kh-¤Ôt–ŠÜ0‰|Çùwž|¾yõ¨áIx—þ´Ÿûû'ÿ¢Ày­è·?|Ekk5ÃÞée"Fv ,™ ñòUk„Úö¡eÔWzj£çäpx$sÚ•Õùz•Êùyºé_ð¤¼Kÿ?ÚOýý“ÿÑÿ KÄ¿óý¤ÿßÙ?øÝQ'šÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿÐAðÿþA6Ÿî õ+oõb¼ÛÁö2é‰ö ™[Wh\¡%K) ã=¸¯I¶ÿV)ˆÏÕ¿Ô·Ò¼òÛY‰îu#n×+_-[i;î-Ó‚ÞÏá^‡«©o¥p4÷Š®tû™$Ž,X³Dpß,ð8Áú­z‡â-3Ä6í-„ûš< aq¶H‰ìËÛëÐö4ýoY‹D±YÞ)'–Y ¥‘º(ÏëØRéšM†h-tûXàˆrBŽXú±<“îj‡‰ô»½BÚÎãOòÚòÂé.¢ŽFÚ²`TžÙóëŠ}¶¯7æ™m ~a˜^ G¸?(Áüê üQew¡ê·UÎë›Kg—d‘22¤©*àuÆ SÕSYñqhú+ØH†9£ûEÄn²²:¶ÏœŒdþU ÚV­®^ê7×N/¥Éc RL®Ò3î% GsžOJR½ŸõývmtjÂO§Øiš|šÑ[‹›u—dq4Œ~PY¶ $zô­õ>Yl¢Žé$kØÚKr€‘"¨GÇZæ,ìõ½.îÓSFk§“MŽÎkaq¼/89'iSžÇ<)–Ú­¢Úø~æU½žÇÏÑJ©1Ýò §’8«v»þ»ÿÀ"7²7§ñ^‹o;Ý9ß,ªÇo#³ìh‡KøH®5[‰ÿr°[ ê“«Ÿ«~ +£·õývûÎCJ4D‘‚Ä*€ 1$ãÔž¦±üCªË¦Ån°]ÚÁ,Î@[É;0'lqÍïé[U›©hÑê7V·kuqkum¸G4r±¸ÊÀƒÛµ ÏÛø¾öïG·0[À5õ§©’7Hà ’å £;O9ã5JßU¿Ñ®|Wwu¼×Ë=¬H"ÊÆìʪ§’Ì22{ó[ñxBÆ9íæós^Õ¸2,sâõàƒÔÒÇá+!§ÅÍÝÑÔ™y&uÜ@ Wj€¤`ŸõùÁ¿×Ÿü?JþÒnWSkW”iiµí‘‘HóøX’sÞºóœqÖ±ôÿÇc«KªI{ww$k†Lm#U@ë[º%ýnÅÕ¿ëdr:k²x£ZŠãTµ–&ˆ4ep0bæR߆ɿš¾8Ž Sv¨5H¡¹vù{âf\uÈÎܞƷDHµ¹u;{Û¨}¦x¡ŽR£ÊHãû¤t¬ûŸi7S]K!¸ÝswÛáÆ'ðŽ>éËdwÜhßOëúê=Š’ëÚô¯¨-¤Zz.Þ7¹Y‘Ï!M쩆ùÎîµÓiש¨é–·Ñ©T¸…eU=@`?ZËÔ|-k¨]ÜÜ ËÛ_µÆ#ºKiVu ÙRGR+fc¶·ŽP$Q¨DQÐ01v9ßË©[èm>õ-¶Ëså±s™ 0uÀää`äqÅVñZê1é:P–[[‹Ïí[}Œ‘4Q“»Œ‚ÌZèõ]2 cMšÆä¸ŠP2ѶH ‚¨ ­.†·6–°^_ÝܵµÊ\¤²ya‹)ÈjÃ>ô–ëÕ~ƒÿ'ù´GS»ŸVÓ®šÑo¬U'Š&òØ:nRP¶xç#w>¢ªè7ÒÅámJëɶYíç»$BŒ¨îŽß6ÒÄŒ‘’3Þµ†Œ‘Ýj7V÷w\_lß"l%6 ¡”Žž ÕM?Ã+aiwký«qot%ßÂ’Ì ÆrO|sÒ“½» ZêýÊ:Wˆ5W¹Ñ¿´–ÌŪZ4ê¶ñ²´Lª­‚KÀƒè1ïUmüM®M‹¨¬ŸªÝ¬IGóbŒ† –Ý‚H_Azè"Ð-!“Iu’btÈZA#æR¡Nî98¦+™‡Ã7gYÓ¢†ÛP·Ó¬oZáVââ&…W ¯ÏÉ?ÇÐgzsi·éò'^_?ø„Þ"¾Ä²XÏ5•…ºÎ‘·Vòn¹R%%È@rHäWWX·¾Pº/u©_ÉleY™tò·)ìdØ­ª•°ÞáEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPžéŸòÔ¿ëöýÕÝ[«ÂéŸòÔ¿ëöýÕÝ[«Ÿ«©o¥ržñ]L},dù:êõoõ-ô¯>MZãCÔu JÚ8äš+u@’gißq žžÄЬÑX^ñM¯Š,ä–&†X[dÈë•VöqÃ?P)ž.Öî4=:Ökim!i®ã¥»Ç¶rÇ ½1ë@ÉÇ®\=½Œ¯­Ø],Ú„vâM.ÈÙ”}Ò6;ŽGUñ£cnò*ËxÒx‚[O,`¿•󩸀:¦š_×Ýþ`ö¿õ×üŽîŠÃ»ñ³¤I~tϳy1­­ôw2ã* ƒŒ¼ŠÅ—Âúª$æÚ[6’=_ûJ×Ìf³ÈøoS‚3]•-6þ¶ÿ$_ë×üÙÅê¾½ÔµHuy´ýòå­„ÚÝ–hÔ†$4o°žä¯5«§hRÙkÑ_,v°[¦œ¶¾D\9c´cîóõö­ú(ZmýW¯õýv (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€)kò¿ÿ¯i?ôXþÿ‘v×þÿ¡µlkò¿ÿ¯i?ôXþÿ‘v×þÿ¡µs¿ã¯Gù£­º¿ñ/É“7Š7j–vº.§vm%K$"›Š†ãt€ô#µj]êš}†>Û}mjvoÄó*|¹<ž™ gÞ¹­3Ãÿiñ¿utÚ•¸kåh¼«©aIFœáH ÎFy銽w`gñövö¬ñAa0YJeQ˦9è3úÖëU?ò¹ÉßúêjϬévÖ‘]Ï©YÅm7ú¹¤UèÄàÓîu+;E»º½¶‚Ù±¶ieUCž˜bq\¦¿a<>+ŠýŽ£‰²ò#}>Õ. o¸– n@`G v梋MM1¼;r¶ºÆ›j.$Öû扜åXÆ‹ÀûÀaxt¦µ@tú&°šÔSGªCu%º•}áœnëBYc‚&–i8ÐeØ£Ô“\ç‚-ÞßK¾ e-šI¨Ï$PËB¶WƒÛ£âG¼Mé¬-Ö{Œ(có8Ü7¿Ä@ɹ=—¢üný_æ[²Ô¬58ÚK Ûk´S†h%Y>„ƒV«‰ðìCÆ×9Ôfµ}=SívbÜ3‡û N€÷ëÚ»jצ&…â{nÞ/ßÛCy&ÿôO=Z@Šçqž•·^g¤ÙÎúV‘¦Ç£^[ßê™'’Õ‘V1#ÛÈÇ+òã9ç¦+Ó(épz;Èj¾“PÕ'»¾q#guÖ˜ÒHxÇÌÂAŸÊºm:ÔÙiÖöÅ`SÛoÈÆ?º¹8Ù4-ƒ©%Íͽœ =ÔñA rÒJáU~¤ñY×ÚÐ]]SIû£JÎÄ]mBª 8eVÉã§ëT|Um+Üè÷¦ÒKË;;£%Ä&öÁBÂÿÒAÀç¿j·.Í[úŠYZMO¨«4v+Œ•`âGjNü­¢•¹’eë]B9ôˆ5ŠA¬Í½Æ$ã¦zÒÙjvœm%…õµÒ)Ã4«€} ¹´½¼“ÀB;->ãí¶ÐE ÁufÀ‚6†*¬“$c *ž‹mp|[{;NâÎM0!žæÌ[ï`ÿu@Däq‘ž}*¥ñ4¼ÈùSg]k«é—×[Új6—G÷ã†uv_¨"„ÕôÉ/Í‚j6x3›uLƒþœ×-áeº´Ôíì-b¼“J†Ù—̾ÓͼFÔ…ßžsØÔzb\XkðZé_If÷RÉqîžP@q.“`ùŽË Pú3¹¬­kV—L6Q[Ú­ÍÍåÇ‘<¾Zƒµ˜–l1 zZµËø‚&‡Å>»’áÞºhE»à"1‰ðà€î1É#ž¥ÕFt븨ÜlrÈ–Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(€±ãÄý}Ëÿ¡šíí¿ÕŠâlÿäaÔëêOý×mmþ¬P~­þ¥¾•çòjwZïœzQµþµðÿ_‡üÖ:¦¬þ.Öm|¨fÓ­äˆyö4 ÄíP‡vO<‘M´ñ„Ó›+©´¦‡J¿˜Cmuç†bNB(lqÉê3Џº ÔýÆ¡k¨ª[]ìûU´–ûË•]¿+îr1žJ§iàù 6V³j­6“a0šÚ×È ÀŒ” &~`¹ãÐdšKÿ]ÿà~ ÿ¯ëóü]xÆæ#5Ͷ&Ó »[G¹{ŒÎ\!*›N@cŒ’:½§k׺åøM6²´šX<÷ºÃ3§ûx×5Êêzmó^M¤im~mgÔ’áá—Na~ð;°œ»r Æ í]Røf3£kl·LÉ©M4Œè»LbNÓœ~´—ÃêúÁµoêÚÿÀ(XøÝ.N§°Z™¬m ßúòÜ#¨ÎA`£kdt#½2ëS\[Û/‡aóîm~×þÐZ1Œäùy ó/Ç=jH<tñîõ8$iôã`žE—”Oñ¼äþU¥o }ŸQÓnþÓ»ìV-g·ËÆüìù³ž>çNzõ§ý~ðúü¿à—4mR=kGµÔbF'MÛªž„¡Í^¬íJþÄÑm´ï;ÎòAfݹËÓ'Ö´i»_@AER¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(–±ÿ Kÿúö“ÿA5áùmàúVƱÿ Kÿúö“ÿA5áùmàúW;þ:ôš:×û«ÿü™ÒÑEÐrËø¦é/md‚g{X¢‘¦´†üÚJÇŒ8aŒ‚0HÔ)ªý¦çÁóÚÏt¶wbL‰œî“÷D¨~pÇ#=ýhZ×Q^sö»H¤#S¼I®]ž –Så¬NB†î‚¡àk›¹' q{sr'Ó-nÛÏ”¾$báˆÏ@p8qB×ðüUÁéýyØí¨ªº‰˜i×ßÏó¶ŸgdÏû!þ\ýx®oI—[mRtÞ"0äîûT6+Oâ1üß• {Úç]EæÚþ­wßk{ÜÄ–·ÂßÌ›S`¬Á²­¸R¤z{еv—=&Š+–ñöµioØ-aòMÕ°ó¾ØÑ¹&U „?)èNzÁé@MV¼¿¶°›™<±4Ë)9và)l¤»–ÕZúÞ+yÉ9Ž)Œª=>b«ü«œñîÃ¥é‚K†·Cª[†™[iA»¨=¾´uKÍ~`ºüÎ®Šæ|;$‘kÚÖ›Ü÷VVÞKFóÌehÝ”–Mä’z)ÁeÁ<õã¥Þ+Ö4)5uHìne‚Úaû,R -$… –$3Ç'Òëõ·¢¹¯ kº†§{uk{e‰Hîc³šÝ9vËÎF òjéh¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(–±ÿ Kÿúö“ÿA5áùmàúVƱÿ Kÿúö“ÿA5áùmàúW;þ:ôš:×û«ÿü™ÒÕkèµ wš%uUšXHpÝ~Sjç/þË£øöÂé )öûib›ìñi$ …YÕFH#qäŠÔðÏü‚§ÿ°…÷þ•K] kœl\¾ÒtÝL¡¿Óí.Ê}Ã<+&ߦGû:ÆöÙm®ìíç·\±+(ÇNÅY¢€*E¥éðª,V6Ñ„s"……FÖ#‡ ô© ²´µ ÛÚà ¬@Ç\"ç Ça“ïSÑ@Q@P›CÒn.^â}.ÊY߇•íÑ™¾¤Œš¿EŒŠã¡†AÁäRÑ@Csgm{ŽêÞã ,¨:õ5^ÒÂÓO·ò,­`µ‡$ùpFsë€1PéM¶‹§%•®ó–bîrÎÌI,O©&¯Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ŸüŒ:ý}Iÿ¡ím¿ÕŠâ¬ÿäaÔëêOý×kmþ¬P~­þ¥¾•ÎøDñ%ð äÏûº-[ýK}+ð‡üŒ·ßõÃÿfÝUKJƒU‚w‘~Ër—)°–^€ä9«ÔP+xbÉ­e·2Ül–ü_±Ü¹ó‡ÀãîäzKÏ Xß> òÉp¯|ñHÌŽâÆÆN8#óšÛ¢ëúûƒÌæ.<+:^ª$kýZ{ІA$±¤ŒSîí`T޹ö¬í'·7÷Z¤ºâ^ýžêÞ+t[ˈÞq±‹nÌCjà‘Ž§#&»pêY”0%zŒô¨lï-ïíRêÖU– 3µ×¡ÁÇô£Ì:X­¥é’i« “S¾¾ÝŒ¶BTMª?\Ö…PEPEPEPEPEPEPEPEPEPEP-cþ@—ÿõí'þ‚kÃò.ÚÿÀÿô6­cþ@—ÿõí'þ‚kÃò.ÚÿÀÿô6®wüuèÿ4u¯÷Wþ%ù2ØÓ¯fñbês‹xímížU$fwÞÊK0*ãn0 úÔ¾†X4Ù’XÞ67׎©«\ÈTý PkVŠèéc“­ÂŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š(  ÏþFGþ¾¤ÿÐv¶ßêÅqVŸò0ê?õõ'þ„kµ¶ÿV(?VÿRßJó›è..,õ˜­bšYŠÛíH.qqãô¯FÕ¿Ô·Ò¹ïÿÈË}ÿ\?öa@þ¶ñ¶˜WÄÈùJšT_Gqæ}ɪÞ?·ký&ÃOIž»Ô!ˆHW’ÙM¹®®«]ØZß=³ÜŽ­¥EóµÀ <ÖŽ«äÜó]sX½×t¸¼ÂжˆñK¨0äJ/ÓŸñZØñ/‰/¬¯®gÒç¿’;bŽæ1o ¶ŠåY›g >îqÅu÷š]•ýťͺ473*åKž9$`çùUß èº…Ü—WŽe”©“dò"ÈW,ªÀ1AéM=UÂÆV•mq/Žc¬n«ÜžµÚË i³j˪4 /PdIc¦åÆ{ƒKƒ¦Ãmem¶"±—Í·]íò7#9Ï?xõÏZK§ÈSFŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š(  ZÇü/ÿëÚOýÖ?†?ä]µÿÿèm[Çü/ÿëÚOýÖ?†?ä]µÿÿèm\ïøëÑþhë_î¯üKògKEWAÈQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEpVŸò0ê?õõ'þ„kµ¶ÿV+Š´ÿ‘‡Qÿ¯©?ô#]­·ú±@ú·ú–úW3ákˆm|A}-Ä©b]îÁFK€O© ~5Ójßê[é^{>u«A¬YYÀ'žD€¬d€ ãc’xÆ Z¨®.`´ŒIs™41ÊçQdRISo‚®lqíÒšÖÞ_3Ð"º‚iæ‚)‘å€*’„ŒŒþÓo¯­ôëGººr¡˜)ld€8ž¤W+¦Û[?uù¦ºš)ã’ÜÇܲ+ƒ  7 õ²¢k¨¾¾²5-E¯® ow»r÷à|£8^8ã-mòÑè®\¿¹·ñoØ¢Ôn“IžHMüªÍþˆç;_9A&tÎxÝ]õ%ª¸u°QEQEQEQEQEQEQEQEQEQEKXÿ%ÿý{Iÿ šÇðÇü‹¶¿ð?ý «cXÿ%ÿý{Iÿ šÇðÇü‹¶¿ð?ý «ÿz?ÍkýÕÿ‰~Léh¢Šè9Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š(  ÓþFCþ¾¤ÿÐv¶ßêÅqVŸò0êõõ'þ„kµ¶ÿV(?VÿRßJç¼ÿ#-÷ýpÿÙ…t:·ú–úW' j6šN±¨ÞßL°Û$*­#…Ý"¨Î=È D¨å·‚v¦†9 O¾2êÆÆ23Ðòy÷¥ŠXç‰%†D’7•Ñ =Aj;ÛÛm:ÒK»Éã‚Þ1—’C€(÷ðÝ@ð\CиÃG"†VúƒU.tM&öénn´»)îe–ÝÆ:`‘š¯§xŸHÕnMµ¥Ù3…Þ"–'‰™}T8â¬hº¢kZE¾£ML Ç$`‘ý(YtÍ>âö;Ù¬m¤º‹ˆçxTº}ŒŠ_ìû/± /±Ûý”tƒÊ]s÷q޼ÒÚ]›±16óÁåJÑþù6ïÇñ/<©ìjÅVm>Éâž'³·hîtÈbR%Ñ£YäHYZRv³£ãÙMwš·ú–úW=àÿùo¿ë‡þÌ(k¾‡Âö2CÔ×JÛä,vÆý„è¿©=ɨ&×t$Ñ&rÚ]‰î"RV¶0*ÍØ¶@ÇZæ¼:šRÛh ¤ÿ„€^¥ù9Þ!ÜÞ`—Ñvã÷Æ+Öé“Fe‚HÖGˆº•&7.{Œ‚3õ-sÌu´b^íuK/øH¦ûcÎeŽ&óvîÛ²d~Ÿðô];S²Õ­êÂæ;ˆ€èsƒè}±æ Ö5fÒ-ÄÿÙ×—ˆ3ý”!ØÎNæ_Ó5á­7ÖïŒMæKƒ4òÒJGBOôsUF“G½DRÎÖòU$í< ™6“h¨¤ÚL˱ñu…Í’^ÞG.•k*«C.£$Q¬Á†FÜ9í뎵§u«i¶6ñÜ]ê–ðËþ®IfTWúpk›ûR×Aðå£C{§ØBܽ½€¸™$ !B­´›'olqTa±žËÂÚæ J=ZÖ ’sN¤û’&>\ápr¸õ«–úµ±Ùp/ˆÞÅÚ³M<^ËcøÈëœmÀÎjÜÚÖ•mäyúœ_hþu_4…ryü+…Öô­kTÖm/ýÖ— —6%O•pÁË4‡qÔAÀÈÅ]×%•uu}&ÇQmFkh—ì³iÌðÈ›‰ÌGî˜dää} ¿®¬?¯Á݃$ ŒJZC (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ «7úÖ«UVoõ­@¨¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠàíäbÔ?ëæOý×imþ¬Wkÿ#¡ÿ_2èF»Koõb€3õoõ-ô®{Áÿò2ß×ý˜WC«©o¥qºf¡s¥^j÷Ö–_m’ mæ3ae 3ƒƒÈ8Ç8 J¢¹? xÂïÅW ý•½´ N—F@XôP /nOÚ.™L-¼Š°»Ÿ1—r¨I"½`¡³0N?ˆPc¥é6:-¡µÓíÒL!UþóŸðöÕŸâ‹ Ë»k ‹DóØÞGr .È €Oá»úV‡ÛŸþx¯ý÷ÿÖ£íÏÿ±y¨µüºkÛyºÌF'š6d‰"ØXíb:Ž€æŸ¨èZ°Õ¯u k/8&«oyBTS2,!œ’zã¥unùâ¿÷ßÿZ·?üñ_ûïÿ­BvÛúÛü‚ß×ßþg;y¤êZ¾£}pöfÑnôV´I¶JY¾S´žÄŽ*9mu»ÍGWѤ†ãL»Þ&¸ŒùªªUŠØïžpk¦ûsÿÏÿ¾ÿúÔ}¹ÿçŠÿßýj·õçÔ¿õåoÐãmü-q§qm{¦ßÞZÍ~×)q¦R÷‚ñ2ŸE9À¢÷F×"Ó5  ,ÜÅsö¨ïRxÕB´¢BX†ÈÁž+²ûsÿÏÿ¾ÿúÔ}¹ÿçŠÿßýj–òÿþ@Õÿ¯ë¹vŠ¥öçÿž+ÿ}ÿõ¨ûsÿÏÿ¾ÿúÔvŠ¥öçÿž+ÿ}ÿõ¨ûsÿÏÿ¾ÿúÔvŠ¥öçÿž+ÿ}ÿõ¨ûsÿÏÿ¾ÿúÔvŠ¥öçÿž+ÿ}ÿõ¨ûsÿÏÿ¾ÿúÔvŠ¥öçÿž+ÿ}ÿõ¨ûsÿÏÿ¾ÿúÔvŠ¥öçÿž+ÿ}ÿõ¨ûsÿÏÿ¾ÿúÔvŠ¥öçÿž+ÿ}ÿõ¨ûsÿÏÿ¾ÿúÔvŠ¥öçÿž+ÿ}ÿõ¨ûsÿÏÿ¾ÿúÔvŠ¥öçÿž+ÿ}ÿõ¨ûsÿÏÿ¾ÿúÔvŠ¥öçÿž+ÿ}ÿõ¨ûsÿÏÿ¾ÿúÔvªÍþµ©Ÿnùâ¿÷ßÿZ¹“ç {š@^¢Š)€QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEÁÚÿÈŨ×ËÿèF»Koõb¸»_ùµúùý×imþ¬P~­þ¥¾•Êxxã^¼ÿ®Cù×W«©o¥r: Æ»yÿ\Çó ³uªÔn¤2büWá¿ßkR[™µ} ZGpÖ1£} $w—®~íu¥¸¬o é/£èpYÎ!kˆË’ñò>f$r@= aÐKoZ\i³jOg}Œc)<¨¸˜îÚbI'Œ)ÃÅö)ãÞ[ÞYIhŠïÄc{+)P¤ƒ“Ç^µš|/,þMâhDé†x÷Þ22;†? <ºUÕ¹Óô2éŒo¶ XF 7åWŒÇ=èö—®]j>1ž -¯làKqotªã!†ÒGN:ö®£us:eެ|C.«ª $-h¶Ê–²;ç ['rŒuéÍt©ô_×Qu×DMºÕê7R6ê7T;¨Ý@n£uCºÔ6ê7T;¨Ý@n£uCºÔ6ê7T;¨Ý@n£uCºÔ6ê7T;¨Ý@n£uCºÔ6ê7T;¨Ý@n«1Æ*†ê»nsþ?΀4袊b (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€8;_ùµúùý×imþ¬Wkÿ#¡ÿ_/ÿ¡í-¿ÕŠÏÕ¿Ô·Ò¹ ۭψoQË!Ïï éõoõ-ô¯?“SºÑâÕﬥX§! î¡€ „øWO«©o¥sÞÿ‘–ûþ¸ì€;šÍ×ô®h·œ`y0c˜.ã© ­Ž3‚iQCW“¿ð-µî“¤Ø-ÛÅö’ɸCƒ"·;8'Ôã•äkˆÝÕ cœÊy9êkBM6]~h¯§‡RÑ/mƒG¤Ð³:6 Ԍמ*{ ÙiÿÙ~T· tÕ•b.Àîó>ñn9ü1Bóþ¿­ÉÕQȺþŽâ{WºÔ¯¥†Ýã•-K ˆ:´ýÝÝFq»GÏúî'åýv7¨¢ŠQEQEQEQEQEQEQEQEQEQEVoõ­Vª¬ßëZ€-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEÁÛÈŨ×Ëÿ:í-¿ÕŠâí¿äbÔ?ëåÿv–ßêÅgêßê[é\ï„?äe¾ÿ®û0®‹VÿRßJó›è..,õ˜­bšYŠÛíH.qqãô ^¢¹ß[xŠÛL+â ˆä|%Í*/£¸áÓ>ä×E@Îø›Qšmlln5¾˜<‹ŒHÌ‹€Ky¿(‘ÜÆ´Öõj×Ã¥ûXËíq,P£11ôÀ`ÀdеµvÍ$±‹ˆŒàJ¡ÆS=7Ù÷¤–òÞ¨-d•Vy÷õm£'JàŸ5¿ÙÑC‚àr€õÇ=)-Zóµÿ¯ëC¿¨ÞxcŠI^TX㻳¹=±\:J{‹ {·‚A­ü…Š Ƶ‹1o0>2xè0zÒé±]A¢øªù/äò’æûmᓸåw¡8ö¥}/åËüÇmmçoÏüŽö9XÖHÝ]VSAèA§Wk{ªj·ÖZ]®£ýœ‘ipÝI$PFÍ+>F`T(ÛØw+±PU3n `±ïTÕ™)ÜZ(¢ÂŠ( Š( Š( Š( Š( Š( Š( ªÍþµªÕU›ýkPª(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€8Koùõúùç]·ú±\e·üŒz‡ý|¿ó®ÎÛýX  ý[ýK}+žðüŒ·ßõÃÿfÐêßê[é\Ï…®!µñô·¤QˆUw».>¤øÐ}T55dòÿ²í¬¦Î|ϵ\¥om¨ÚXH[Ï»bqòNOnµn€3§Ð´Û‘~&µYøQr‰møÀôÅ6×Ãúm”–²C ›íK˜ZIä®ðrÌs^ªÝÕõ½‘€\HPÏ(†<)9sœ'Š«m®Ø\‡Ä¾^Û¶³N7ʽBú÷ü¨^_×õp~×õ`ƒAÓ-®¢¹ŠÛlÑI,¨Þc4§.qžÿ§lPº˜A Ûb8.MÜcÌo–RKëÏ,xéÍZûu¹ÔM‡˜~Ò"óŠm?s8Îq޽³š±G`2[ÃZKj‡RΗLâFhç‘Øt,ŠÁXýA¤o i wurmXIv¬³…žEGÜ6±(nHïŒÖ½“yá"ù-–{VÍ´~T/Ϫwr°b8èMjF‹kd*€£'< uQEQEQEQEQEQEQEQEUY¿ÖµZª³­jµEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP mÿ#¡ÿ_/üë³¶ÿV+Œ¶ÿ‘Pÿ¯—þuÙÛ«Ÿ«©o¥yìúuÖ­±egžy±’`'ŽIã½ VÿRßJç¼ÿ#-÷ýpÿÙ…køCAÔ40Ûê›] ¤#”€uXüÄ}p=®ŠŠ¡¨ÁªMåÿfßÛZã;üëS6ïLa×ýhŸñU´W~*ðì3ÝOm[’d†s}ÕãpÁ•¯u…“6¥4–VúÿÙ–í¥ÿ[Ûø†ã·'®u©£Û/Ä+§j¥[1æÄ* ú3?>üUö°³{/±=¤ i·oc}w£töÇZ—NÔìµkEº°¹Žâà:àúCìy«TON±–Æ'Iu»ÒÍ÷;2¾Ãb¨Å\¨.ïm4ø ÷·PÛB “HAúž* µ.ÚÚ™õ+8 ›ýT¯:ªÉþé'ð  ÕGRÓ¤Ô1¥{bP“ºÕÏc¹XU{ÍYà×ô›Ö7Šõ&f“<ŠÇ×5n=SOšùìb¿µ{´ûð,Êd_ªç"‹š^™o¤X%¥¶ò™ÙämÌìÄ–f=É$š¹UŽ¡d"yMå¸$ò™üÕ¾q´œðr@Ç\Ó#Õ´ÙoÚÂ=BÕï;­Öe2 uÊç4rŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( ªÍþµªÕU›ýkPª(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€8Kùõúøç]·ú±\e¿üŒz‡ý|?ó®ÎÛýX  ý[ýK}+ˆ³Ñ›_¸Õ4Õ¸û9–8›ÍÛ»nÉ‘úÀk·Õ¿Ô·Ò¹ïø©o¿ë‡þÌ(¢Ð<5¦ørÝ㱉¼ÉpfžCºIHèIþƒµèªŽiªùj7?»Îß&êXzúìažèļZö©Ma=õ…²Ì²G FVØ.ר9=p8ÍQºhâñ j×-íÖŸ>ž!‚4²gxX1,­2»‘Ûšê´í.ÛK‰ãµ3ívÜ|ë‰&9ö.Ä®Q`8 7JÔ´áá?>Öqå-ÌnKý›Ìæ0ØèÀÏAŠ­§i÷ÓAÒ“Fº·Ôì/V[«Æ€¬xïa/GÞ@Içž•éS¾·þ»‡CÎo"¼‚ÓPÑN™~óͬ­ÔRÇlÏFfGÎð00È8é]'…lžßû^IíZ)$Ôçtgid$`‚zƒë]–‹úòÿ zÿ^¿æQEQEQEQEQEQEQEQEQEQEVoõ­Vª¬ßëZ€-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEÂ[ÿÈǨ×Ãÿ:ìí¿ÕŠãmÇüTz‡ý|?ó®ÊÛýX  z’n‰«Ž·Ô¿á¾¼½ò<÷1ª,[ÂË®pO.O=qŽõÞ\E½H®cSÑÄùùhúxßí¼š”P±1È~eö8Èü/ü'ÿ Í·æ¸› «±;?J­ÿrÿÏ?Ò€;ÿøN<3ÿA›oÌÿ…ðœxgþƒ6ß™ÿ à?á_ùçúQÿrÿÏ?Ò€;ÿøN<3ÿA›oÌÿ…ðœxgþƒ6ß™ÿ à?á_ùçúQÿrÿÏ?Ò€;ÿøN<3ÿA›oÌÿ…ðœxgþƒ6ß™ÿ à?á_ùçúQÿrÿÏ?Ò€;»hf—ìÚÕÚ6/Í-·v8Î9ÆhƒÇû<hÖ¬¼í£ÌòÉÛ»ã<ã5¿óÏô£þåÿž¥wÿðœxgþƒ6ß™ÿ ?á8ðÏým¿3þÀ¿óÏô£þåÿž¥wÿðœxgþƒ6ß™ÿ ?á8ðÏým¿3þÀ¿óÏô£þåÿž¥wÿðœxgþƒ6ß™ÿ ?á8ðÏým¿3þÀ¿óÏô£þåÿž¥wÿðœxgþƒ6ß™ÿ ?á8ðÏým¿3þÀ¿óÏô£þåÿž¥wÿðœxgþƒ6ß™ÿ ?á8ðÏým¿3þÀ¿óÏô£þåÿž¥wÿðœxgþƒ6ß™ÿ ?á8ðÏým¿3þÀ¿óÏô£þåÿž¥wÿðœxgþƒ6ß™ÿ ?á8ðÏým¿3þÀ¿óÏô£þåÿž¥wÿðœxgþƒ6ß™ÿ ?á8ðÏým¿3þÀ¿óÏô£þåÿž¥wÿðœxgþƒ6ß™ÿ ?á8ðÏým¿3þÀ¿óÏô£þåÿž¥wÿðœxgþƒ6ß™ÿ ¯/Œü6Ò5‹l½\Gü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð©SÆá58[ýÐÇúWž/ƒÔõ¥iØø`DÀìý(ZÅV}Zêâ3º9&fSŽ ž+®·AYu‡£ŠÛp(Äf¢h»QEDlÐöŸbOîŠ( ìIýÑGØ“û¢Š(ûtQö$þ袊>ÄŸÝ}‰?º(¢€±'÷EbOîŠ( ìIýÑGØ“û¢Š(ûtQö$þ袊>ÄŸÝ}‰?º(¢€±'÷EbOîŠ( ìIýÑGØ“û¢Š(ûtQö$þ袊>ÄŸÝ}‰?º(¢€±'÷EbOîŠ( ìIýÑGØ“û¢Š(ûtQö$þ袊>ÄŸÝ}‰?º(¢€±'÷EbOîŠ( ìIýÑGØ“û¢Š(ûtQö$þ袊>ÄŸÝ}‰?º(¢€±'÷EbOîŠ( ìIýÑGØ“û¢Š(ûtQö$þ袊>ÄŸÝ}‰?º(¢€±'÷EbOîŠ( ìIýÑGØ“û¢Š(ûtQö$þ袊>ÄŸÝ}‰?º(¢€±'÷EbOîŠ( ìIýÑGØ“û¢Š(ûtQö$þ袊>ÄŸÝ}‰?º(¢€±'÷EbOîŠ( ìIýÑGØ“û¢Š(ûtQö$þ袊>ÄŸÝ}‰?º(¢€±'÷EbOîŠ( ìIýÑGØ“û¢Š(ûtQö$þ袊>ÄŸÝ}‰?º(¢€±'÷EbOîŠ( ìIýÑGØ“û¢Š(ûtQö$þ袊>ÄŸÝ}‰?º(¢€±'÷EbOîŠ( ìIýÑGØ“û¢Š(ûtQö$þ袊>ÄŸÝ}‰?º(¢€±'÷E9mPv¢Š™c Ú¤¢ŠÿÙ endstream endobj 69 0 obj << /Type /XObject /Subtype /Image /Width 712 /Height 557 /BitsPerComponent 8 /Length 28145 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream ÿØÿàJFIFÿá°ExifII*JR(i‡Züÿÿ)( üÿÿ)( 0210‘ 0100 ÿÿ È -ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀ-È"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?÷úBÀPdzo¯RÞ6v`ª£$“ÐPÖW½DowãZ·Å;É.tËxE¸8Y&‹ûàÖ²ÏÄq»Yÿß—ÿâé\xûjxQöÔþð¯ÿ…®zYÿߦÿâèÿ…®zYÿß–ÿâè¸õöÔþð£í©ýá^ ÿ \ÿ§?ûòßü]ð±µÏútÿ¿-ÿÅÑp=ëí©ýáGÛSû¼þ6·ÿNŸ÷å¿øº?ábëôéÿ~[ÿ‹¢à{×ÛSû¶§÷…x7ü,]oþ?ïËñtÂÅÖÿéÓþü·ÿEÀ÷Ÿ¶§÷…mOï ðoøXºßý:ß–ÿâèÿ…‹­ÿÓ§ýùoþ.‹ï?mOï >ÚŸÞàßð±u¿útÿ¿-ÿÅÑÿ [ÿ§Oûòßü]Þ~ÚŸÞ}µ?¼+Á¿ábëôéÿ~[ÿ‹£þ.·ÿNŸ÷å¿øº.¼ýµ?¼(ûjxWƒÂÅÖ¿éÓþü·ÿGü,]kþ?ïËñt\yûjxQöÔþð¯ÿ…‹­Ó§ýùoþ.øXº×ý:ß–ÿâè¸óöÔþð£í©ýá^ ÿ Zÿ§Oûòßü]ð±u¯[Oûòßü]Þ~ÚŸÞ}µ?¼+Á¿ábë^¶¿÷å¿øº?ábë^¶¿÷á¿øº.¼ýµ?¼(ûjxWƒÿÂÅÖ½mïÃñtÂÅÖ½mïÃñt\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿâèÿ…‹¬úÚÿ߆ÿâè¸ñöÔþð£í©ýá^ÿ Yõµÿ¿ ÿÅÑÿ Yõµÿ¿ ÿÅÑp=ãí©ýáGÛSû¼þ.³ëkÿ~ÿŽQÿ Yõµÿ¿ ÿÇ(¸ñöÔþð£í©ýá^ÿ Yõµÿ¿ ÿÇ(ÿ…‹¬úÚÿ߆ÿã”\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿã”ÂÅÖ}mïÃñÊ.¼}µ?¼(ûjxWƒÿÂÅÖ}mïÃñÊ?ábë¶¿÷á¿øåÞ>ÚŸÞ}µ?¼+ÁÿábëÞµÿ¿ ÿÇ)ábëÞµÿ¿ ÿÇ(¸ïöÔþð£í©ýá^ÿ Xþõ·ýøoþ9Gü,]cûÖß÷á¿øåÝþÚŸÞ}µ?¼+Â?ábëÞ¶ÿ¿ ÿÇ(ÿ…‹¬zÛþü7ÿ¢à{¿ÛSû¶§÷…xGü,]cûÖß÷á¿øåð±uï[߆ÿã”\wûjxQöÔþð¯ÿ…‹¬z×þü7ÿ£þ.±ëkÿ~ÿŽQp=ãí©ýáGÛSû¼þ.³ëkÿ~ÿŽQÿ Yõµÿ¿ ÿÇ(¸ñöÔþð£í©ýá^ÿ Yõµÿ¿ ÿÇ(ÿ…‹¬úÚÿ߆ÿã”\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿã”ÂÅÖ}mïÃñÊ.¼}µ?¼(ûjxWƒÿÂÅÖ}mïÃñÊ?ábë>¶¿÷á¿øº.¼}µ?¼(ûjxWƒÿÂÅÖ}mïÃñtÂÅÖ}mïÃñt\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿâèÿ…‹­zÚÿ߆ÿâè¸ñöÔþð£í©ýá^ÿ Zõµÿ¿ ÿÅÒÂÅÖ½mïÃñt\yûjxQöÔþð¯ÿ…‹­zÚÿß–ÿâèÿ…‹­zÚß–ÿâè¸óöÔþð£í©ýá^ ÿ Zÿ§Oûòßü]ð±u¯útÿ¿-ÿÅÑp=çí©ýáGÛSû¼þ.µÿNŸ÷å¿øº?ábë_ôéÿ~[ÿ‹¢à{ÏÛSû¶§÷…x7ü,]kþ?ïËñtÂÅÖÿéÓþü·ÿEÀ÷Ÿ¶§÷…mOï ðoøXºßý:ß–ÿâèÿ…‹­ÿÓ§ýùoþ.‹ï?mOï >ÚŸÞàßð±u¿útÿ¿-ÿÅÑÿ [ÿ§Oûòßü]Þ~ÚŸÞ}µ?¼+Á¿ábëôéÿ~[ÿ‹£þ.·ÿNŸ÷å¿øº.¼ýµ?¼(ûjxWƒÂÅÖÿéÓþü·ÿIÿ [ÿ§Oûòßü]Þ¾ÚŸÞ}µ?¼+Áábëôéÿ~[ÿ‹£þ6¹ÿNŸ÷å¿øº.½}µ?¼(ûjxW‚ÿÂÆ×?éÓþü·ÿGü,msÒÏþü·ÿEÀ÷¯¶§÷…(¼CÜW‚ÂÆ×=,ÿïËñtáñ#]^Ö÷åÿøº.¿,êÝêPÀ׌xâ|ò_GoªCÇ! &ˆ }Á'|ñ^±it%PA¦…€äQ@Ìp¦¸/^еÛÈ?ñÓ]ÝÉÄf¼ËÇŽ²¯Gý1ähÇ7Qº¡ÝFê‘—¬-$Ôoc´…âY$$)•Â/Lã'¿aïZÚ§„õ ?RžÎÙ†&Š:+,kŒ³)n:ð2I¬ {©­.c¸·‘£š6ÜŽ½T×Cáÿ*j³¾µw3Cqbö^qÌJqƒÉ:/3:=S•ìR;Ff¿Rö :þ𧯎)ú†«ésÁ 턱IpvÄWÞ}RFyé],:þ‡c­ø`E¨´öšd2Ç5ÇÙÝ9e |¸Ï_­f.µf|?¦Ú-ûAuª×Ä,ÞTg8p1ƒÉÎÜÑ×úïoËPþ¿…φõ«;»[K‹Iî‰XSÍC¼Ž£†ÀëßùCï>€©<ûu®ši6~+ÒŸOW}ÅdƃºLî`‘ªú§ˆì­î4Óc}myioz.šÞ 8Ûm#ÜðÄ‚i­lÊòøJïN𾣩j–²ÛÏEöu2)3a²>½ñX1X]Ïa5ôP¶…Ö90ùYº g<ý+§Õõm û]Z¤·7:­Äsˆ^ÙÐņÉÿ­Yþ Öì4»»¨uR~ÃpŠÇ [÷ˆÁ“€½%»¿õ¢þ½Aí¡B] U¯K'V²(.õ% ýÑÁù³ŸáÍ;Qðö³¤Ú%ÕþŸ,99*@>ø'Ž+£¾ñŤÖzeÌqî¾{¨çÔ)ð£$`çƒÇLT¶·¢Ç¦k‹a=ìúÄÉ!ŠH¸ »’~ñíÇ £úü¿àB-#ÁºÖtøµ›`²¹v]ÂTÜHF`8$»éX“éðÇÆÕÄW2˜í¾aºR8\î?\bº'ñ”ß`ÖEÏú 7”ü~è¯ÝÆî¾Õ_Y×4ýfóKÕ£¿{+ødXæAºÆªr² Æ1þÎúïªFfÏárÚòÚÒm=–âëp†?5 | žÆ®*-GAÕô™aŽþÆHZfÛYX1ôÈ$gñ®ÏO¿Ñoüi¢Kc$W‰yMÕÌÍIû¶Á*ßÅïY7:¦a§Úéê]R©ýªäù DèP×ðëÍ upïýw0õ/ë:D÷öB²¶Ä!•ÁoO”ž}©×^Öì¾Íö6T7M²Ü¥ºãh$Ä éõh–ÖVÉc<-Q.Ö {n1Øä[Þ©¦¯ é¾0ÄVúœ·¾tîÒÛ›VW…]HÎãÃc `v¡9ýSEÕ4SÔlÞßÌÎÂYX{©#>ÕŸººOjöw6ÙéúµÍ¿žf1A§o,ã'ø‰ÉÎcìù:L–Ùšd›Ã´ÉmºuÏ£çŒvâ’/h~¹×ìõm3Ú)óKüD€0¨¬|9¬êMp¶v-1¶Ç( Úèå† ÔþÔ4ÔÓ5/RºkHïãŒ$â#(RŒN ŽyÍiøkRðæ™Ùn ŽêÝâêk”Ëè‚c=ý©ÛRz´ß Üê¾¹¸´¶šMNß Â]P*…²äúÕ-'×zž°úl²Ee$LSpÀ$à¹Ë@?>kmõT²Õm.µY,–mXÞÄâÙܲ`c¯JÌ»ñ÷Ä(u“º+5¹‰·2’Ûq'·J#«Wþ´C{;Z³þÜØê7Ve÷˜&x·ã¶’3ŽÝ*¾ê³ª^E?ˆ// Û,/tò¦õ;]K’28>”jš·ö£ÄßÙÚu—–Å¿”?Þ俥^Êã{²ðð¾ºÚ`Ô—MÙ˜üÑ t9Lg;s»ö§K'HšÆ+™®ïÞTJ;ðó‘Àç5¹eâm&WE™îÈŠÛHû,çÊs‰1÷qŽyî8©<#©ZO7„´øåÝuk-Ñ™6‘´2±ãð5VÕÿ]Ééëc™½Ð5=*æÞ-RÜÙ,ìM#AêIRzuÇZ³©höš2ê¶´z…·Ÿöy¢*øÏÌ=êö£{¡Ã¤[è1j’ÝDú—Ú..>ÎÈ N„rIêxÏzgН4k«(¢Òu”kKl }=,äN¿yË·ºòi_B­gc—ÝFê‡u©ˆ›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Uí/O„®Ò»$ðvõcè+/ujiWkr[±ÆöÜ9ÆxóøP¼º™$ebBøáÖçÜþµsðØË.¡ö"B¸bº€óë[>d|á¤wi˜ÈœVd7Àj¯txI̞ÌÒaÑ#‰•ãº}™ 6Ù8Ç^ƒmdjsYÞ,L«'1çœ`ûÖ‰’Sk4 BD›ðÆCŸ˜“Óo¿­V¼½ß}nè7}·ýNAÇéC½´muszËÃú5²$WÌgºe,G˜T uÀàzšËÖt«kh÷N•žÕÈXçnz{Š¿?“ªB›¦Í¿ÞÉlc©éŒœŒsÐñjëWØÓͫȯ3íÜTc€AÎ;tåQÄT•D¯«ÝGŠÁÐ >T’Z>æêúÃwfkX‰9%E|纽ïÂ,M¤?îŠõÑóGÊŠ)°ýÁE0uþ¬×˜xóþAwŸõÉÿ‘¯OºÿVkÌxD_ïà”êÖ{DWQùNQ\Àü¬)à÷Töú{\i——Ë*„µ1‚¸ÉmäŽá@wT]Ok2Ím4Ê¿vHœ«ÜȨ)8 úÒÐË’I$’y$÷¤ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(C+–„“KçAQQ@ ˜  zqJ³”èò¨¨  w"P”'®Ö#?‘¨ÚRÄ’zÔtR²½ÇÌÚµôº½ûÂñéû¢¾¯ 0ÿ GþLÃÿÅЕ­ä6ïs’®¢k»Ko hbçL‚ð³\m2K"mùÇMŒ?Z—þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.˜°Ñ¶¥©IiÿÚÒÈÁœÊ“,~PÜ#.¬»žøïÖ²¯ä{Û?°Ékp«lòÁ#!ÛÎpÉÈ'½Cÿ ÇÆôÿɘøº_øV>0ÿ GþLÃÿÅÐÕÝÁhqu>²ºš·ö"ÚŸ³y¸Ø%Ú»<¿Cž¸íœ×œWq¨øƺ¦¡-äú2,’X%Ä@tÇj©ÿ ÇÆôÿɘøºIK•Öÿ±ñ‡ý?òfþ.øV>0ÿ GþLÃÿÅÓ’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*÷ÿǤ?îŠòßøV>0ÿ GþLÃÿÅשxCþ=!ÿtSB=¸(¢¸(¦.¿ÕšóÈ.óþ¹?ò5é÷_êÍy‡ŽÆtÛ±ë#@•bØÓ-qÿ<“ù ŸÌ>Õ‡©Hñø.åãfG]=вœ|¾ Õ$Ô/ôß [My¨X¬òˆÖû,œ®q°9go¦>”€éžácÛ½•w£'>”ÿ0ûWu«ÞkZF—2, y²°hÝc,¡°ÛN ‡šßÓïõ+¹u-.åí¡Ô-B¸†2c*à•m„ç#ŒÓ¶Ÿ×—ù‡_ë»G@“Ú©GÿWc·š?ô¬¿ IrÚ}â]]Ku$WÓÇæÊrHVÀöAÅjEÿ7õÔè CKERQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEɦŽÞ '•¶Ç—vÆpÉ5ZÛSµºŸÈŒÌ$Ú\,nÿë ÿЭUSÊO3ư²ÈÁ†é#åû§Ò€%¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ¤2J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠÏÕô‹[Û+Æ[y/$…‚HÑ®íÛp¿1ü+FÑ.ŸS/ªéÈmÄNM²A¸•ÇžÀó]V.ÿç•¿ýþoþ"Œ]ÿÏ+ûüßüEa<<'57º%Å0EoÅIkÑBø ã|#Ŭ_îŠëä–x|ÑGå¼É!%G® Šä|'Äýn†wÐ}ÁE}ÁE0uþ¬×x¤n8õ8¯EºÿVkÏ|H3qõqüèuüMe§¬6²ÅpÎÇ’Šåõ÷¦Âe§Ï¯ûåøªæ5¿ù ŸúãþŠZήwQ¦a*’M£¸ÿ„ËNÿž7_÷ÊÿñTÂe§Ï¯ûåøªáè¥í$/k#¸ÿ„ËNÿž7_÷ÊÿñTÂe§Ï¯ûåøªáè£ÚH=¬Žãþ-;þxÝß+ÿÅQÿ –ÿœÔ‘ÃEÊ. ¹Žs“D0ljv©bØÏrriÝZÃm †Xôo?ÂøÈüª¼óHe‘ü´‰7»’}†~•n¡–ÖŸt‰’F$d{úЭpMu)Û™|¥ˆKåŒI#àKd÷© º‘ðò*ÀÆ:“ÿÖaí ‘dɧ‘ïëD¶LÛ2qŽ ÛLw]JCÍšHYæ(ÑýŸ‚ßýaBܱÛq"äÅo¸Rßþ¯Ö®5»¾æ'rÇ2:{A³3 %—i÷ùs"’Üϼ®]Ñc,wG°ìz}ÂÌ–oæM½¤…N8ïVRÚ$F@¤« ÌOó¦‹HDf=¤© à±=?WAtWyš9%òÂü¥!#¡?þ±I{æElÝæ.ã p98ÇÒ­›hJ:Ê»nnO'Ö…·‰ §(IRXœgëG2 ¡-Ùš5ä »æzè*¤-$6~xrZvÊ¡±àúÕä‰#Bˆ¸RIÇÖ£p,F0‡aÇOJ.„šJ.¤…åó¨9 ž8¨šæH^f•Ø–=£k/nzúU¸áŽ*‹€y<äŸÆ˜¶.ï“;†Ó¹‹qéÍCº*¥Å¬’;3"ÆXîh Ø òjͤ-olªòÂŽzÓ–Ö£ J°Á Äÿ:|q$I±AÛîIþt6º ´PO2==¦wLr¨@À,xíRÆ…¯%9Dˆ*`ƒ“ÛßµL–"…T8 ÄàŽ”áo™¥ w·^NáÒ‡$7$PŽwH¡E,­6éY•  ì?¿ld6êfÎþs‘ƒŒñŸÂšlà(‹°€Ÿw AŽjeT(è ¦&Ó*jІɋɳi §ËvïX :ÈV'p«Ñ‡Þƒ×hÿ?•t·V±^@b”eO Ž úН&‘g$Bc!c<8'×'ÞªIY— ¤¬Ë‘€#P¤•`“œ­uþ ÿ—ïûgÿ³W"ª¨¡TP0èuÞ ÿ—ïûgÿ³R§ñ ŸÄ޶Š(®ƒ¨(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šåu¿ù`ÿ¯7ÿÐdªþû£ëV5¿ù`ÿ¯7ÿÐdªþû£ëXPÞ~¿¢:±_ ?ð¯ÍÜpQDpQ] ˯õf¼÷Ä_ñóýt_ç^…uþ¬×žø‹þ>bÿ®‹üèíç…ïu’îmÖ9!‹Ùâ5‡µAÿV¥ÿ=í?ï¶ÿâk´²ÿ}¯ýqOýVe¯‰¬îµ¹4Ômùc˜Ÿ–GyGÓõÁôç?g©œ[¹Ï©Ï{Oûí¿øš?á Ô¿ç½§ýößüMvì‚[„‰ùB¬ÄzãŸÎžl­?çÖûö(öq²‰Âÿ©Ï{Oûí¿øš?á Ô¿ç½§ýößüMvÏceøó·ÿ¿Kþ]쬿çÊÛþý/øQìâÊ'#ÿV¥ÿ=í?ï¶ÿâhÿ„+RÿžöŸ÷Ûñ5ÔŘ%šÚ6+î™F~æö*@ü³øÖŸÙ-€ÿQ÷* üÍÎ!ì¢pð…j_óÞÓþûoþ&øBµ/ùïiÿ}·ÿ]çÙm¿çÞûàQöKoù÷‡þø{8‡²‰Áÿ©Ï{Oûí¿øš?á Ô¿ç½§ýößüMwŸe¶ÿŸxïQ\Á VÒKkÆ¥AŽœàûQìâÊ'ÿV¥ÿ=í?ï¶ÿâhÿ„+RÿžöŸ÷Ûñ5ÝÑG²ˆ{(œ'ü!Z—ü÷´ÿ¾Ûÿ‰£þ­Kþ{ÚßmÿÄ×wEÊ!ì¢pŸð…j_óÞÓþûoþ&øBµ/ùïiÿ}·ÿ]Ý{(‡²‰Â©Ï{Oûí¿øš?á Ô¿ç½§ýößüMwtQì¢Ê' ÿV¥ÿ=í?ï¶ÿâhÿ„+RÿžöŸ÷Ûñ5ÝÑG²ˆ{(œ'ü!Z—ü÷´ÿ¾Ûÿ‰£þ­Kþ{ÚßmÿÄ×wEÊ!ì¢pŸð…j_óÞÓþûoþ&øBµ/ùïiÿ}·ÿ]Ý{(‡²‰Â©Ï{Oûí¿øš?á Ô¿ç½§ýößüMwtQì¢Ê' ÿV¥ÿ=í?ï¶ÿâkoÃÚ%ÎöŸ´•oqªÃ¨J]ä†&Š8Ûâ lc9à½)‰áÝF]SÃó[èÅ-Ý£µ±»”>>ëð~l©¯\ÓIÁÀ#z×C\Ü:v·ˆ.5 `Ó®¾Èd{— ?ÝUòÈõ<ò{àS[‡C¤¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¦¿ju5ûP(¢ŠC (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€9]oþF˜?ëÍÿô*¿†>èúÕoþF˜?ëÍÿô*¿†>èúÖ7Ÿ¯èެWÃOü+ógwÜQÜWAÈ2ëýY¯=ñü|Åÿ]ùס]«5ç¾"ÿ˜¿ë¢ÿ:äkÿ\SÿAõ‚%æXÐJà+8^X€ŸÄÓ,¿äkÿ\SÿA=5ãö?úæÿÍjÁªëÿ±ÿ×7þkV Dý*«u«OÒª·Z@T–7’ê-w:Å…Î3¶Gl~•)»<¥È=ÇÙ¤?ÉqM Vú}§Å ƒé—qŸÖ´~É´¤úù¬?‘ fwÚ¢þíÏþËÿÄÑö¨¿»sÿ€²ÿñ5£öH}eÿ¿­þ4}’/Yïë3þÕ÷nð_þ&™4¿i·’Þæ/*”ËBè‚I`:VŸÙ!õ“þþ·øÔw¬<ѳƒ–Ã9`@íÉ  (¢Š`QEQEQEQEQEQEQE×íN¦¿jeQHaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP+­ÿÈÓýy¿þƒ%WðÇÝZ±­ÿÈÓýy¿þƒ%WðÇÝZ†óõýÕŠøiÿ…~lîàû‚Š û‚Šè9]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@Õ—üƒíëŠè"§¨,¿äkÿ\SÿA=5ãö?úæÿÍjÁªëÿ±ÿ×7þkV Dý*«u«OÒª·Z@Uc‹é?ݶÿÑ­[Ö4§’}-ôsV›IÍKš3UüÚ<Úä4ýz÷J]Zâ{6›§*Ér.>xÁ`8LrG» Öÿ‰uÉÿ¦-üsᛉMݳê£û6êèÜKn¶øvÉ®ýÝ8ôÍt7¯ÿÛ¿h_ÿA4ú/ë =Ùf°îµ»ËRÚÞçMUµ¹ŸÈŠd¸ äœà”ÇN=N+r¹MNÂ÷QÖí§ƒE6—0\)þÒ3§1)äaNã¸d`ŒsBÝFutQEQEQEQEQEQEQE×íN¦¿jeQHaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP+­ÿÈÓýy¿þƒ%WðÇAõ«ßü0×›ÿè2U tZ†óõýÕŠøiÿ…~lîàû‚Š û‚Šè9]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@Õ—üƒíëŠè"§¨,¿äkÿ\SÿA=5ãö?úæÿÍjÁªëÿ±ÿ×7þkV Dý*«u«OÒª·Z@S˜1¹œª–)»£$…‘ÉÇà*VÔ,ÉæòÜF•A4+”¿œ¨Œ0¨Ï©wùÕÿ³>>k™3ß@þT Îû}—üÿZÿßåÿ>ßeÿ?Ö¿÷ùÆ´~ÌçæoÉøš>Ìßóó7ä¿üM3¾ßeÿ?Ö¿÷ùÆ™qwö²ÛÛÏÒ̆5XÜ1ÉÉÇ@:æµ>ÌçæoÉøšdѽ¼M0™œ ÜÊàr;ãs@É(¢Šb (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ kö§S_µ2Š(¤0¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(•Öÿäiƒþ¼ßÿA’«øc úÕoþF˜?ëÍÿô*¿†z~5… çëú#«ðÓÿ üÙÝÁ÷A÷Ðr ºÿVkÏ|Eÿ1×EþuèW_êÍyãæ/úè¿Î€;«/ùÚÿ×ÿÐEOPYÈ>×þ¸§þ‚*zjÿÇìõÍÿšÕƒU×þ?cÿ®oüÖ¬‰úUVëVŸ¥Un´€ªN/¤ÿvÛÿFµ\ÕuH4‹»¸2T Ë31îIJC‹Ù>–¿ú5ª}^).ôé`ŽÚÖä¾Šè‘ óœü¨cuÔŠ+7¹²»¶{«‘l‘Êr±‚pÄcƒÐš‚óÅ6–’OÙ®¦–”µòâU%Ý—pÛ–=ñXñøSHŠ1sº¶¾vÑ4$Q¨ò÷»'œqž”±èZœ×fîé¬ÒWÔ¢¼tŠFe‘ìÀ%FOà)­ÿ¯/ø"þ¿?øäñ¥£2iÚ”1Ç0‚yd‰BÁ! Øl÷ŒŽEo^Ÿø—Üÿ×&þF¹›ÍîâÇ[$€5ýÚO,pDyÝÇ_ôÏjè/_þ%·õÅÿôBØ:–+%uß3TšÆ 6úa«³ ËR@nî‡jÖ®:ù×ô{MZ÷¼Cpåd[i¶ã°ü£‚9éBÜÇcEPEPEPEPEPEPEPM~Ôêkö QE†QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQErºßü0×›ÿè2U ôüjÆ·ÿ#Lõæÿú •_Ã=?†óõýÕŠøiÿ…~lîàû‚Š û‚Šè9]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@Õ—üƒíëŠè"§¨,¿äkÿ\SÿA=5ãö?úæÿÍjÁªëÿ±ÿ×7þkV Dý*«u«OÒª·Z@R¸;n&sÑÙØú+ jùËËÈ<‚*?ä%?ýp‹ÿB’žtÛbÍelIêLKþíýÓFÇþéü©¿ÙšüøÛß•ÿ ?³4ÿùñ¶ÿ¿+þíýÓP_6Í>t?zT1 õfT¿ÙšüøÛß•ÿ |V6>øm`Çñ$`Ò€'¢Š)€QEQEQEQEQEQEQES_µ:šý¨”QE!…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@®·ÿ#Lõæÿú •_Ã=?éµ xZÚyÚÌË ¨Üþ'ó®gÃ=?Μ9\¼ÝÍ«USQK¢·æwp}ÁE}ÁEj`2ëýY¯=ñü|Åÿ]ùס]«5ç¾"ÿ˜¿ë¢ÿ:äkÿ\SÿA=Aeÿ û_úâŸú©è«ÿ±ÿ×7þkV W_øýþ¹¿óZ°h'éU[­Z~•UúÒ;ù Oÿ\"ÿФ¥ÔµK=&Ý'½‘‘Äk¶6rXô(&’ù Oÿ\"ÿФ¬FòÛi1Ç3Bí©ÀE•<ò~bŸd>æÕ†§m©ÆïmçmCƒæÀñÀ8«uÉø‚ÁŦ•gw& “jq‡óÑrß)#JÊñ-½¾¹¥ËØYé)fØ]Àï ¾ã»n×P¯¸Ïn”_…Åý~6=œk?NÕà¿Ñ#ÕXy2yû g9?…qòÃaíŒ~%»[»ÓZÜΉäÉÜO<>ݸÏ5»áIâ±ð%•ÄĤ0Û´ŒHè “ü¨{7ýuºFޝiº¬ÒCgpZXÔ;#Æñ¶ÓЀÀd{Ž)/Ç´uAÜ쨤BJ)eÚHäzRÐEPEPEPEPEPEPM~Ôêkö QE†QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW¿ÿ}Ïýroå\·†z~5ÔßÿÈ>çþ¹7ò®[Ã=?î û‚Š û‚Šbuþ¬×žø‹þ>bÿ®‹üëЮ¿ÕšóßÇÌ_õÑwV_òµÿ®)ÿ Šž ²ÿ}¯ýqOýTôÕÿØÿë›ÕjÁ]ãY :‚üj3n‡øçÿ¿ïþ4aÁÇJ®êsÒÚFå¥Çþ?øÓMŒGþZ\ÿàLŸüU #·çR¸ÁÎ!‰O±Ëœ~D~uv«I%®™lÒ;,Qç$“’Äþ¤ŸÎ©ÿÂCcýÛÏü›ÿ‰¤çèÙq§9kÙ«EeÂCcýËÏü›ÿ‰£þî^àßüM/kè¯aWù_ÜjÑY_ðØÿróÿ¦ÿâhÿ„†Çû—Ÿø7ÿGµ‡t¯ò¿¸Õ¢²¿á!±þåçþMÿÄÑÿ ÷/?ð oþ&kè=…_åq«EeÂCcýËÏü›ÿ‰£þî^àßüMÖÐ{ ¿ÊþãVŠÊÿ„†Çû—Ÿø7ÿGü$6?ܼÿÀ)¿øš=¬; ö•ýÆ­•ÿ ÷/?ð oþ&øHl¹yÿ€Sñ4{XwAì*ÿ+ûZ++þî^àßüMðØÿróÿ¦ÿâhö°îƒØUþW÷´VWü$6?ܼÿÀ)¿øš?á!±þåçþMÿÄÑíaݰ«ü¯î5h¬¯øHl¹yÿ€Sñ4ÂCcýËÏü›ÿ‰£ÚúaWù_ÜjÑY_ðØÿróÿ¦ÿâhÿ„†Çû—Ÿø7ÿGµ‡t¯ò¿¸Õ¦¿jÌÿ„†ÃºÞàßüM]†æ»tžg ?#MN2Ù“*s޲M¢Š)’QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW¿ÿ}Ïýroå\·†­u7ÿò¹ÿ®Mü«–ðÏõ ê¸(¢¸(¦!—_êÍyãæ/úè¿Î½ ëýY¯=ñü|Åÿ]ùÐueÿ û_úâŸú©ê /ùÚÿ×ÿÐEO@Q@Q@z¯üè÷Ûöœ•oBºšóO–[‡Þëyu8åIäEz*øUMWþB/ý~ÿí)*_ ÿÈ*û_éTµø¤k?‚?×SbŠ(«2 (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ÂÓ¿ãïV…ñÀÿ¶qŸæMnÖÿš¿ýýg/‰Ãà—õÔ¿EU™…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ïÿäsÿ\›ùW-á¯ë]Mÿüƒîë“*å¼5ýhºƒî (ƒî )ˆe×ú³^{â/øù‹þº/ó¯BºÿVkÏ|Eÿ1×EþtÝYÈ>×þ¸§þ‚*z©iÿ6ßõÅ?ôSR-ÄKEEERÕ£“̰¹HÞEµ¹ódXÆæÛ±—ßï*+NËO·xbµÕYZif%ìe't’4ü=2ÇÕ¥EfâïtÍTãd¤¯b¿ü$6ßóç©ÿà¿üMðÛÏž§ÿ€ÿñ5bŠ->ÿ€sSþ_Çþ_þoùóÔÿð_þ&øHm¿çÏSÿÀ øš±EŸÀ9©ÿ/ãÿ¯ÿ ·üùêø/ÿGü$6ßóç©ÿà¿üMX¢‹O¿àÔÿ—ñÿ€Wÿ„†Ûþ|õ?ü—ÿ‰£þoùóÔÿð_þ&¬QE§ßðjËøÿÀ+ÿÂCmÿ>zŸþKÿÄÑÿ ·üùêø/ÿV(¢Óïø5?åüàÿá!¶ÿŸ=Oÿ%ÿâhÿ„†Ûþ|õ?ü—ÿ‰«Qi÷üšŸòþ?ð ÿðÛÏž§ÿ€ÿñ4ÂCmÿ>zŸþKÿÄÕŠ(´ûþÍOùøøHm¿çÏSÿÀ øš?á!¶ÿŸ=Oÿ%ÿâjÅZ}ÿæ§ü¿ü¿ü$6ßóç©ÿà¿üMðÛÏž§ÿ€ÿñ5bŠ->ÿ€sSþ_Çþ_þoùóÔÿð_þ&øHm¿çÏSÿÀ øš±EŸÀ9©ÿ/ãÿ¯ÿ ·üùêø/ÿPé±Éþ™s$oº¹i‘a‚íU‰Ûœ{Õê(Qw»`ç5k…QVfQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW¿ÿ}Ïýroå\·†¿©®¦ÿþA÷?õÉ¿•rÞþ¦€;¨>࢈>࢘†]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@µ§üxÛ×ÿÐEMPÚÇ·ýqOýTÔ†QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW¿ÿ}Ïýroå\·†¿©®¦ÿþA÷?õÉ¿•rÞêÞ4ÝA÷A÷Ä2ëýY¯=ñü|Åÿ]ùס]«5ç¾"ÿ˜¿ë¢ÿ:í­?ãÆÛþ¸§þ‚*j†Óþçþ¹7ò®[Ã}OûÇù×Sÿ ûŸúäßʹo õ?ïç@ÔpQDpQLC.¿ÕšóßÇÌ_õÑz×ú³^{â/øù‹þº/ó ÚÓþçþ¹7ò®[Ã}OûÇù×Sÿ ûŸúäßʹo õ?ïç@ÔpQDpQLC.¿ÕšóßÇÌ_õÑz×ú³^{â/øù‹þº/ó ÚÓþçþ¹7ò®[Ã}OûÇù×Sÿ ûŸúäßʹ ýãþñþtÜÁ÷A÷Ä2ëýY¯=ñü|Åÿ]ùס]«5ç¾"ÿ˜¿ë¢ÿ:í­?ãÆÛþ¸§þ‚*j†Óþbÿ®‹üëЮ¿ÕšóßÇÌ_õÑvÖŸñãmÿ\SÿA5Ciÿ6ßõÅ?ôSRQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE^ÿþA÷?õÉ¿•rþûÍþñþuÔ_ÿÈ>çþ¹7ò®_ß}¿Þ?΀;˜>࢈>࢘†]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@µ§üxÛ×ÿÐEMPÚÇ·ýqOýTÔ†QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW¿ÿ}Ïýroå\¿‡>û¼uÿò¹ÿ®Mü«—ðçßo÷󠿏(¢¸(¦!—_êÍyãæ/úè¿Î½ ëýY¯=ñü|Åÿ]ùÐMq.«…Òí¢Ÿ0¯™æc ¸þ!ïU>Õâ¯úZÿßCÿ‹­%ƒÍQ"Â@np· £òRý•¿ç›ÿàSÖ¤äïÌ×õètº„yyõ¿ù™ŸjñWý-ï¡ÿÅÑö¯Ð2×þúü]iý•¿ç›ÿàSÑöVÿžoÿOKØ?ç‡ùõ¥ÿ>ã÷?ó3>Õâ¯úZÿßCÿ‹£í^*ÿ e¯ýô?øºÓû+Ï7ÿÀ§£ì­ÿ<ßÿž`ÿþäZ_óî?sÿ33í^*ÿ e¯ýô?øº>Õâ¯úZÿßCÿ‹­?²·üóü z>ÊßóÍÿð)èöùßáþAõ¥ÿ>ã÷?ó3>Õâ¯úZÿßCÿ‹£í^*ÿ e¯ýô?øºÓû+Ï7ÿÀ§£ì­ÿ<ßÿž`ÿþäZ_óî?sÿ33í^*ÿ e¯ýô?øº>Õâ¯úZÿßCÿ‹­?²·üóü zrÙ–8ØÃëu%Áÿ;ü?È>´¿çÜ~çþfWÚ¼Uÿ@Ë_ûèñt}«Å_ô µÿ¾‡ÿZñÚÃ$Hù˜nãÏñ§}ŠïMÿßühöùßáþAõ¥ÿ>ã÷?ó1¾Õâ¯úZÿßCÿ‹£í^*ÿ e¯ýô?øºÙû?Þ›þÿ¿øÑö(½7ýÿñ£Ø?ç‡ùÖ—üûÜÿÌÆûWŠ¿èkÿ}þ.µx«þ–¿÷ÐÿâëgìPÿzoûþÿãGØ¡þôß÷ýÿÆ`ÿþäZ_óî?sÿ3í^*ÿ e¯ýô?øº>Õâ¯úZÿßCÿ‹­Ÿ±Cýé¿ïûÿb‡ûÓß÷ÿ=ƒþwø}iϸýÏüÌoµx«þ–¿÷ÐÿâèûWŠ¿èkÿ}þ.¶~Å÷¦ÿ¿ïþ4}ŠïMÿßühöùßáþAõ¥ÿ>ã÷?ó1¾Õâ¯úZÿßCÿ‹£í^*ÿ e¯ýô?øºÙû?Þ›þÿ¿øÑö(½7ýÿñ£Ø?ç‡ùÖ—üûÜÿÌÆûWŠ¿èkÿ}þ.µx«þ–¿÷ÐÿâëgìPÿzoûþÿãGØ¡þôß÷ýÿÆ`ÿþäZ_óî?sÿ3í^*ÿ e¯ýô?øº>Õâ¯úZÿßCÿ‹­Ÿ±Cýé¿ïûÿb‡ûÓß÷ÿ=ƒþwø}iϸýÏüÌoµx«þ–¿÷ÐÿâèûWŠ¿èkÿ}þ.¶~Å÷¦ÿ¿ïþ4}ŠïMÿßühöùßáþAõ¥ÿ>ã÷?ó1¾Õâ¯úZÿßCÿ‹£í^*ÿ e¯ýô?øºÙû?Þ›þÿ¿øÑö(½7ýÿñ£Ø?ç‡ùÖ—üûÜÿÌÆûWŠ¿èkÿ}þ.µx«þ–¿÷ÐÿâëgìPÿzoûþÿãGØ¡þôß÷ýÿÆ`ÿþäZ_óî?sÿ3í^*ÿ e¯ýô?øº>Õâ¯úZÿßCÿ‹­Ÿ±Cýé¿ïûÿb‡ûÓß÷ÿ=ƒþwø}iϸýÏüÌoµx«þ–¿÷ÐÿâèûWŠ¿èkÿ}þ.¶~Å÷¦ÿ¿ïþ4}ŠïMÿßühöùßáþAõ¥ÿ>ã÷?ó1¾Õâ¯úZÿßCÿ‹£í^*ÿ e¯ýô?øºÙû?Þ›þÿ¿øÑö(½7ýÿñ£Ø?ç‡ùÖ—üûÜÿÌÆûWŠ¿èkÿ}þ.µx«þ–¿÷ÐÿâëgìPÿzoûþÿãGØ¡þôß÷ýÿÆ`ÿþäZ_óî?sÿ3í^*ÿ e¯ýô?øº>Õâ¯úZÿßCÿ‹­Ÿ±Cýé¿ïûÿb‡ûÓß÷ÿ=ƒþwø}iϸýÏüÌoµx«þ–¿÷ÐÿâèûWŠ¿èkÿ}þ.¶~Å÷¦ÿ¿ïþ4}ŠïMÿßühöùßáþAõ¥ÿ>ã÷?ó+éRjÒù¿Úv±CŒy~Y=sŸ˜ûVŽÓéU¾Å÷¦ÿ¿ïþ4}ŠïMÿßükXÇ•Z÷9ç.ysZÞ…§Ò§Ò«}ŠïMÿßühû?Þ›þÿ¿øÕYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿ. Óî?ë›Ò¹o}öÿxÿ:êVÎÀþñ°s†•˜~D×-áϾßïç@ÌpQDpQLC.¿ÕšóßÇÌ_õÑz×ú³^{â/øù‹þº/ó ÚØ…´Œ’ &©®¿¥½Ûè<aˆ2#1f€'ð¨5;kÛÍ*Þ DŠDf_=$”ǽ?»SŒñÓ5a¬>£ê\ÁLÚ„‘ľw˼ž„0£};R_×à7ý~'Sek¨Ûùö’‰#ÉRpAuAö5\kÚi¿_iýùsÊ0RßÝ ¹öÍRÑï4ËK0WQ†æ[»’$–/™ZfÀÆp08Ï¥TŸV°Õ5ÕµžöÞ,®ØÚ@i‡N;('ñ>Ý_Qt¹³ý¹¦ý»ìivÿ/î6ÝÿÝÝ»½³šžöþ×N·óîæX£ÈPOR}“ì+“¼·‘®ÿ²4ëØ®ï„òÄ %íþpíº@ØŽç«®°´Öt­FáXÙ@dY)"&`6±·g¶i-ú²òëúkYOwçºÃ<Âðº•ÏO”ŒŸÊŸe¬Øj´ó7œ«¸Ç$Mc× "¹ÍoZMWHÖã¶–)- Ž“GÎIo›žœ`Tšlé?Š­ä¶Ô›V_³ºI)UŸàŒ~cÆ1ž)­Áìo6¬ŸÚfÂ+k‰6ù²F«²-Ý7G×€kB¹Û+[k[Å$д>\Œ ²|jȆËÊð]ØÂòp<ùQIwO3æÎ9,çð¬].+½^±ŽâÊ K[¸§î® »¥@J±Ê. ‡|ñIký_ÓÑ_×ü1ÔCªØÜê3XAr’]@¡¥9Ø Ç'¦}ºÕÊçm`‚×Ç+ QÄŸÙÈÅQBŒ™\“YÞ#ÕtýJ8§µ…ÊÈëy¨DÆ5+´ ®äõ#¥þº‡V¿­ŽÎŠæü7-Äžµq$Ï8‚´[KœÝü€1ž)twÕPQtÚÑ‹iÏÚâµXóîcù©µ­…}._»ñ•cyöK›¿.PU[÷lUIè€Ú¹ÈêEjW#âcO¼ÔŸA»¿¶´µŒ#ݼÒi?ˆF¹õÀ$öwã­R¬ ©HÈ#Ò’Úã{ØZ(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ãü9÷Ûýãüë°®?ß}¿Þ?΀;˜>࢈>࢘†\ÿ«5çþ"SöˆÏý4νq”5Çë¶eþ`2AÍtvªße‹å?tv©v·÷Oå^wâÛûf ioøTuägÿ}ð¤3Óö·÷OåFÖþéü«Ì?á>Ô¿ègÿ}ð£þíKþ€6÷Ñÿ ôý­ýÓùQµ¿º*óøOµ/úÙÿßGü(ÿ„ûRÿ  Ÿýô€=?ktþTmoîŸÊ¼ÃþíKþ€6÷Ñÿ ?á>Ô¿ègÿ}ð OÚßÝ?•[û§ò¯0ÿ„ûRÿ  ŸýôÂøOµ/úÙÿßGü(Óö·÷OåJªÛ‡¯¥yü'Ú—ýlÿï£þÂ}©ÐÏþú?á@•oÿѸ?•I^h>"êà4kp@$oð¥ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ Uø‹¬1Çö=¸ÿ¶þé5ÈøupíþñþuVÏÆ:­ÑØ[¦}ØÖÖ‡hcPHæ<pQNˆaEÀVBêÌJEhÒ r× rv ª|5?p~UØìµZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•(ðÔ`ýÁùWc寥ZúP7m¡¤DaElÛZˆ€À«aíN À¢–ŠÿÙ endstream endobj 79 0 obj << /Length 3254 /Filter /FlateDecode >> stream xÚ¥ZYãÆ~Ÿ_Aä%TbqûnÒ†|­³F;IØF@Iœ½”(“ÔŽAþ{ªººIŠÓšYÀ ºÙw×ùUµ~Mxrÿ_'Ç„ÁŸ.l¦™Ím’+1er•tUr—|Ã` K¾¾ùüöæÕk!›–ñäö.É‹ŒkžXc3%“Û]òcz¬Obõóí70R&EVap$‡Õµ‚eÜ ¿•ÇsÙ¬Ö¢ÐB§_üå³ïn¿ú>5KE¶ZkÃÒÛÜ®xž~ûÛÏþŠëÝ|u{óë wgåÓÆ23J%ÛÃÍ?³d}ß$,“Ež<¸‘‡Di‘™ç5ÉÛ›é2×ʰCÁ³\ÊD[(s;üz“I&eî̪®ËrAdÔ64¾zsà*ù²…M¿²üÚ¯¿žm@ô½ š–Ði­XƘ â½®ïÏ]¨ÅåÇ«µä,}»-›ÊS~Î#«³ÜŒ”½R:íª#éòî‹Ý×¶5ÉZŠLrÏÞ‡ºihë~(»ªçÓ®êã=}µÇ­?Ý¡íª w¢EaA‘±‚ú¢)û¾êa é¶î«®èã®kTkhöCiH‰d<ýº¥ÖM¹}GµÁ·À ·ó:lͳBkÚûÔµ÷] kK)àFÇ]»1|X~w©qAìo¢rÎ2ÁÍHÕz$ýûLÆU½Š¬c2P¹0àïÕJ08Fd¡éö¡ë€âÀ:mÛÄõ0Ÿô‰…wÜ6UÙQu¤ÁQ 8”«vµçù²acyÜQexñÒ¨Á`ñË þá“—Z  Ãn÷5ÜAÁî»ê'°ÇÊ–TøKºjÙ4¤ãOäVfjI¤ZTl¥Åía_o÷´¬×N¿‰Sϧ[¬¹,2 ½¸ãÜî<ÝŽ‰ñHN±s0¨€OWE¦gÖìŠÞéL˜çÔEg|¼ßw]»­ú>²ŒÈáãÁPÄ•Bý@[¥F›£ÐjQ‰ºã*‡24-Õ„„@í¿¤*LŒ_p&æìê˜TaaS?t>º>:{h?›Õé¦gW¡±½[tnÛæ|8"ràÁЧdqŒ¿Æ‘® €6 {»/¸·Á,­V\§¿Ú>´ï}åP6U×Ó¨Ÿ˜f¿œû!v} þÝŽ¬ 𹵆Á‚¹%L°ã¸gy¿Ò)ñ…ŽHV΀!ׯßÄx+7?7gþÜœ§§ÜF5ÐÑ¡£ì©ý¡r^‘ÓebE6zdd¹Ü`Ò4¤‘UL¦@pü˜Md8Œ/é0Š 3œ4„;³-`S»'†˜Q,LþPðö2'¶ByAlßûJ>U7CøMl¦:Æ›7tßž<“,ÒM,ú|_„27 €4œhÉÜ¢ÄF¼@¨ÂÆ Î³¦é¢ny‘þ{=mÏ´å–ö¶iÙô-5µ§ÊŸç|¢>ï(Ÿ0ZŒ%ÖQ$rµ`ܱêâÊ#½`âTúª¢ ¢Þùú•Íì0©Ës„+aGŠ ûrëÖ}da |Ék€ÑU£„£«ÂÏ=áB¼Q€€w¹°ΫˆBÎd(‹qš9Üï7ù,fc3žÕãUX¸«úSëˆZx”X(4†ûÈ6¹Á?Àì€7bü¥µ+ØI ®ÐŽ%Fèè$“tz[yl½ˆTŒZ¸¼@ÝW¢31Ó¸ÿÍš–`-7íy ª`X‚¨ïÐ ÜU]uô]¥O ØÏáç6{ühêw+ŽŽ ‚$l Fûòz³ f€ )g"¢ô_àŠ+<Í{4H¨8L~‰…M;ïuÝÇPÒ1ú‹!4ùÚÞc½lÎÕG1j0“V_‹qsˆ“FNo÷Õö]yðø“—Ñ3ð­ Rp lÒºRGlE¨TÒÁlÿ=™FŒ»üôö¸hcÑû¦þT­cÆv[#û0¢òìÃ8ˆK²BØìΆ%ž ¡ P¾{Eîrçç”TÌä?«¦: ìÌOafÑÞßbeb"|ìêþÔ”ôá]‰T@·aÉ>ÌäswùãJëÔuñ‰žYŒopšàX•œëf‡³”‡-Ø1¿‰rh Ìx¤²iÛwÎÞaw°×Ø1.AÞ1²ù] ò«ŒM·U78˜‚#PR†\è8Œœpy85 ±kÐvõN‰ÜâØ†xV´¹0Ê-*æÛaëõ ‚yÌG>‹6­PxŽp1ÙNÂcO‚ Ì;¼d]Ù„«&}‰»¹ö¹·DÍD­€HQ,ðÑËé5€Û¹¥›°ù(˜Ìéö}Ì£ã½& 6zËËä¨4ÊÁ\Í`¢x6;*àkÊ>MðJ!Äʸ”…¥¦$PxåÊÎ lÈÞQ‰.K´ÏÁ(+nÒc;PGHkìÀ )]¸¼4o[ps°¶#íÔ—Ç¡³f/PËLäÅ> 8ÈZ¸ÍÄÜ‚ÃTÖ瞦àÃYÊeBLq𠃚Á¶tT q´û˜ìÌx¨w÷ÕàÃbg= ìϧµë«é̸L$œEœ× Ï)¸Â!2¬Ña à L»ŠÔᑚzpæÛ¡ž0Xã;Züò°¬«wξ`û®ºCš”çfð ·È,_„ß3†»("„¯yØÂÒ<ä"¡Õ»-Œu ²ânqú·`ÒZð`PÑÄüá~ÂÒs kHÔÒ3(ÔàÚ¦Ú—H-º/¶)—Â>+@ék¸‚&›_võ(ÅS¢5dÜ—ûit`~!i*ŸŠA ðÆèôI>ÞŠð&ÄU¤{PŒ·ÇJ!Ú0ÜF¹£f ˆÝ”#•õ¡¼÷« &žûxb Œ¯/$òÀ¿Á0±ÈHÄ2z6Sz´=ßb°Õi5E9>;¢Eî•%d­,ïMïk¢ZìÂ;íÚó¦©Ö>™‚­­_`LŸ ^(ê°?6DznüÞ’ Ü‚ÄX +Ã2¢%iîÈ’¡ðøaG*k?ϳo].¾v“u¯/†®‰çVwÜ4ÂMu7PÓ¡E޹F²Ãà.]~šñ‡Æ¦i?lt gõý~˜ çâÁf:¢†„©²Ï1®'$аŽP…Fq¥kNëà´5¡‡›åÆ'ÇXT ήÅÌ ÍðîüÒÇJ§Â&Rã†öwùXÅÁæ°36½w‹×EV¹)…µ,ýç›ïÞ"j)P®»r¨‘}Øá#¨ÎƒŸCÁ"T¼Ä»êÑûQ«\ȰÏAIÌÏrÅ!4Ò7Jåoh¥M `÷©ík<Ëò+TìÚÓ|Rî]Œ…AülÔ<<:'AÞm47VðŒ ý!‚ÌÈFŒ5‹ÂRºÊ2ö$¨‹LL¯o9#‹ëŒO‹·]ô&“-ûÁìqSˆváÅ×öÚ{ŠçwU×ÔÕlZ ^è,—/(—馗l ´ k/õm†§r¼¸L㎔ÀžQÕ÷€ÂV!~—¦2“`p%&øjª‘ó(×Ýi áb%5ºÇMj ã~iÝ{vŽ>ºëÃz|MÔ|ñ\‰š€-¾qXA ÕHï5)ýܽYÁ ˜Ü€†éQÜðÈ£8Â(ÿ(nxüQ|¡¦×ç&`œ›Ôè™'ñb&ñ¡ë¼ð$Τ™§C‡ªû 7ìµÛ‚™L|ɾ|Ç&^¼a“­¢:zÝu‡ŽòâMÛ‡‘ãÜ—Þ´ÉØ¸ê{Ê>ÿ¢ÝïÃk¹_‹¢ WýÃÛS¹Aü}2*8c¾Æ>‰eîfÛ~®ù§þݼÌfC6þãÚùÐy”€íaOþLž›¦’G™ÇîÅwuú½ÌeøÊ•gf0SÒþº$+?/‚rz‹ýЇ挲¶ôÜ/@3gÏý¹0rÊ$.ß.LÆÍèèœEe^H½xâÇU!Ú\Ó c–?U“û×€†\ðý D§rŒÂ}Œ’]h¾° ‘†O<÷ÞáËj;‹õãÖW) (*,X\¬îàÿÿ —( endstream endobj 70 0 obj << /Type /XObject /Subtype /Image /Width 712 /Height 557 /BitsPerComponent 8 /Length 41487 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream ÿØÿàJFIFÿá°ExifII*JR(i‡Züÿÿ)( üÿÿ)( 0210‘ 0100 ÿÿ È -ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀ-È"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?÷úBÀPdzo¯RÞ6v`ª£$“ÐPÖW½DowãZ·Å;É.tËxE¸8Y&‹ûàÖ²ÏÄq»Yÿß—ÿâé\xûjxQöÔþð¯ÿ…®zYÿߦÿâèÿ…®zYÿß–ÿâè¸õöÔþð£í©ýá^ ÿ \ÿ§?ûòßü]ð±µÏútÿ¿-ÿÅÑp=ëí©ýáGÛSû¼þ6·ÿNŸ÷å¿øº?ábëôéÿ~[ÿ‹¢à{×ÛSû¶§÷…x7ü,]oþ?ïËñtÂÅÖÿéÓþü·ÿEÀ÷Ÿ¶§÷…mOï ðoøXºßý:ß–ÿâèÿ…‹­ÿÓ§ýùoþ.‹ï?mOï >ÚŸÞàßð±u¿útÿ¿-ÿÅÑÿ [ÿ§Oûòßü]Þ~ÚŸÞ}µ?¼+Á¿ábëôéÿ~[ÿ‹£þ.·ÿNŸ÷å¿øº.¼ýµ?¼(ûjxWƒÂÅÖ¿éÓþü·ÿGü,]kþ?ïËñt\yûjxQöÔþð¯ÿ…‹­Ó§ýùoþ.øXº×ý:ß–ÿâè¸óöÔþð£í©ýá^ ÿ Zÿ§Oûòßü]ð±u¯[Oûòßü]Þ~ÚŸÞ}µ?¼+Á¿ábë^¶¿÷å¿øº?ábë^¶¿÷á¿øº.¼ýµ?¼(ûjxWƒÿÂÅÖ½mïÃñtÂÅÖ½mïÃñt\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿâèÿ…‹¬úÚÿ߆ÿâè¸ñöÔþð£í©ýá^ÿ Yõµÿ¿ ÿÅÑÿ Yõµÿ¿ ÿÅÑp=ãí©ýáGÛSû¼þ.³ëkÿ~ÿŽQÿ Yõµÿ¿ ÿÇ(¸ñöÔþð£í©ýá^ÿ Yõµÿ¿ ÿÇ(ÿ…‹¬úÚÿ߆ÿã”\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿã”ÂÅÖ}mïÃñÊ.¼}µ?¼(ûjxWƒÿÂÅÖ}mïÃñÊ?ábë¶¿÷á¿øåÞ>ÚŸÞ}µ?¼+ÁÿábëÞµÿ¿ ÿÇ)ábëÞµÿ¿ ÿÇ(¸ïöÔþð£í©ýá^ÿ Xþõ·ýøoþ9Gü,]cûÖß÷á¿øåÝþÚŸÞ}µ?¼+Â?ábëÞ¶ÿ¿ ÿÇ(ÿ…‹¬zÛþü7ÿ¢à{¿ÛSû¶§÷…xGü,]cûÖß÷á¿øåð±uï[߆ÿã”\wûjxQöÔþð¯ÿ…‹¬z×þü7ÿ£þ.±ëkÿ~ÿŽQp=ãí©ýáGÛSû¼þ.³ëkÿ~ÿŽQÿ Yõµÿ¿ ÿÇ(¸ñöÔþð£í©ýá^ÿ Yõµÿ¿ ÿÇ(ÿ…‹¬úÚÿ߆ÿã”\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿã”ÂÅÖ}mïÃñÊ.¼}µ?¼(ûjxWƒÿÂÅÖ}mïÃñÊ?ábë>¶¿÷á¿øº.¼}µ?¼(ûjxWƒÿÂÅÖ}mïÃñtÂÅÖ}mïÃñt\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿâèÿ…‹­zÚÿ߆ÿâè¸ñöÔþð£í©ýá^ÿ Zõµÿ¿ ÿÅÒÂÅÖ½mïÃñt\yûjxQöÔþð¯ÿ…‹­zÚÿß–ÿâèÿ…‹­zÚß–ÿâè¸óöÔþð£í©ýá^ ÿ Zÿ§Oûòßü]ð±u¯útÿ¿-ÿÅÑp=çí©ýáGÛSû¼þ.µÿNŸ÷å¿øº?ábë_ôéÿ~[ÿ‹¢à{ÏÛSû¶§÷…x7ü,]kþ?ïËñtÂÅÖÿéÓþü·ÿEÀ÷Ÿ¶§÷…mOï ðoøXºßý:ß–ÿâèÿ…‹­ÿÓ§ýùoþ.‹ï?mOï >ÚŸÞàßð±u¿útÿ¿-ÿÅÑÿ [ÿ§Oûòßü]Þ~ÚŸÞ}µ?¼+Á¿ábëôéÿ~[ÿ‹£þ.·ÿNŸ÷å¿øº.¼ýµ?¼(ûjxWƒÂÅÖÿéÓþü·ÿIÿ [ÿ§Oûòßü]Þ¾ÚŸÞ}µ?¼+Áábëôéÿ~[ÿ‹£þ6¹ÿNŸ÷å¿øº.½}µ?¼(ûjxW‚ÿÂÆ×?éÓþü·ÿGü,msÒÏþü·ÿEÀ÷¯¶§÷…(¼CÜW‚ÂÆ×=,ÿïËñtáñ#]^Ö÷åÿøº.¿,êÝêPÀ׌xâ|ò_GoªCÇ! &ˆ }Á'|ñ^±it%PA¦…€äQ@Ìp¦¸/^еÛÈ?ñÓ]ÝÉÄf¼ËÇŽ²¯Gý1ähÇ7Qº¡ÝFê‘—¬-$Ôoc´…âY$$)•Â/Lã'¿aïZÚ§„õ ?RžÎÙ†&Š:+,kŒ³)n:ð2I¬ {©­.c¸·‘£š6ÜŽ½T×Cáÿ*j³¾µw3Cqbö^qÌJqƒÉ:/3:=S•ìR;Ff¿Rö :þ𧯎)ú†«ésÁ 턱IpvÄWÞ}RFyé],:þ‡c­ø`E¨´öšd2Ç5ÇÙÝ9e |¸Ï_­f.µf|?¦Ú-ûAuª×Ä,ÞTg8p1ƒÉÎÜÑ×úïoËPþ¿…φõ«;»[K‹Iî‰XSÍC¼Ž£†ÀëßùCï>€©<ûu®ši6~+ÒŸOW}ÅdƃºLî`‘ªú§ˆì­î4Óc}myioz.šÞ 8Ûm#ÜðÄ‚i­lÊòøJïN𾣩j–²ÛÏEöu2)3a²>½ñX1X]Ïa5ôP¶…Ö90ùYº g<ý+§Õõm û]Z¤·7:­Äsˆ^ÙÐņÉÿ­Yþ Öì4»»¨uR~ÃpŠÇ [÷ˆÁ“€½%»¿õ¢þ½Aí¡B] U¯K'V²(.õ% ýÑÁù³ŸáÍ;Qðö³¤Ú%ÕþŸ,99*@>ø'Ž+£¾ñŤÖzeÌqî¾{¨çÔ)ð£$`çƒÇLT¶·¢Ç¦k‹a=ìúÄÉ!ŠH¸ »’~ñíÇ £úü¿àB-#ÁºÖtøµ›`²¹v]ÂTÜHF`8$»éX“éðÇÆÕÄW2˜í¾aºR8\î?\bº'ñ”ß`ÖEÏú 7”ü~è¯ÝÆî¾Õ_Y×4ýfóKÕ£¿{+ødXæAºÆªr² Æ1þÎúïªFfÏárÚòÚÒm=–âëp†?5 | žÆ®*-GAÕô™aŽþÆHZfÛYX1ôÈ$gñ®ÏO¿Ñoüi¢Kc$W‰yMÕÌÍIû¶Á*ßÅïY7:¦a§Úéê]R©ýªäù DèP×ðëÍ upïýw0õ/ë:D÷öB²¶Ä!•ÁoO”ž}©×^Öì¾Íö6T7M²Ü¥ºãh$Ä éõh–ÖVÉc<-Q.Ö {n1Øä[Þ©¦¯ é¾0ÄVúœ·¾tîÒÛ›VW…]HÎãÃc `v¡9ýSEÕ4SÔlÞßÌÎÂYX{©#>ÕŸººOjöw6ÙéúµÍ¿žf1A§o,ã'ø‰ÉÎcìù:L–Ùšd›Ã´ÉmºuÏ£çŒvâ’/h~¹×ìõm3Ú)óKüD€0¨¬|9¬êMp¶v-1¶Ç( Úèå† ÔþÔ4ÔÓ5/RºkHïãŒ$â#(RŒN ŽyÍiøkRðæ™Ùn ŽêÝâêk”Ëè‚c=ý©ÛRz´ß Üê¾¹¸´¶šMNß Â]P*…²äúÕ-'×zž°úl²Ee$LSpÀ$à¹Ë@?>kmõT²Õm.µY,–mXÞÄâÙܲ`c¯JÌ»ñ÷Ä(u“º+5¹‰·2’Ûq'·J#«Wþ´C{;Z³þÜØê7Ve÷˜&x·ã¶’3ŽÝ*¾ê³ª^E?ˆ// Û,/tò¦õ;]K’28>”jš·ö£ÄßÙÚu—–Å¿”?Þ俥^Êã{²ðð¾ºÚ`Ô—MÙ˜üÑ t9Lg;s»ö§K'HšÆ+™®ïÞTJ;ðó‘Àç5¹eâm&WE™îÈŠÛHû,çÊs‰1÷qŽyî8©<#©ZO7„´øåÝuk-Ñ™6‘´2±ãð5VÕÿ]Ééëc™½Ð5=*æÞ-RÜÙ,ìM#AêIRzuÇZ³©höš2ê¶´z…·Ÿöy¢*øÏÌ=êö£{¡Ã¤[è1j’ÝDú—Ú..>ÎÈ N„rIêxÏzgН4k«(¢Òu”kKl }=,äN¿yË·ºòi_B­gc—ÝFê‡u©ˆ›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Uí/O„®Ò»$ðvõcè+/ujiWkr[±ÆöÜ9ÆxóøP¼º™$ebBøáÖçÜþµsðØË.¡ö"B¸bº€óë[>d|á¤wi˜ÈœVd7Àj¯txI̞ÌÒaÑ#‰•ãº}™ 6Ù8Ç^ƒmdjsYÞ,L«'1çœ`ûÖ‰’Sk4 BD›ðÆCŸ˜“Óo¿­V¼½ß}nè7}·ýNAÇéC½´muszËÃú5²$WÌgºe,G˜T uÀàzšËÖt«kh÷N•žÕÈXçnz{Š¿?“ªB›¦Í¿ÞÉlc©éŒœŒsÐñjëWØÓͫȯ3íÜTc€AÎ;tåQÄT•D¯«ÝGŠÁÐ >T’Z>æêúÃwfkX‰9%E|纽ïÂ,M¤?îŠõÑóGÊŠ)°ýÁE0uþ¬×˜xóþAwŸõÉÿ‘¯OºÿVkÌxD_ïà”êÖ{DWQùNQ\Àü¬)à÷Töú{\i——Ë*„µ1‚¸ÉmäŽá@wT]Ok2Ím4Ê¿vHœ«ÜȨ)8 úÒÐË’I$’y$÷¤ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(C+–„“KçAQQ@ ˜  zqJ³”èò¨¨  w"P”'®Ö#?‘¨ÚRÄ’zÔtR²½ÇÌÚµôº½ûÂñéû¢¾¯ 0ÿ GþLÃÿÅÒŠ·áø[ü†õüÿŸõr꿈`ñ=ßÛ-5;™9 "lË{ÇÏ9ã·ÐõËø‚ÞK]vînÍÜi›ï1 ›“ÈÎ=Emÿ±ñ‡ý?òfþ.øV>0ÿ GþLÃÿÅЕ­ä6ïs’®¢k»Ko hbçL‚ð³\m2K"mùÇMŒ?Z—þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.˜°Ñ¶¥©IiÿÚÒÈÁœÊ“,~PÜ#.¬»žøïÖ²¯ä{Û?°Ékp«lòÁ#!ÛÎpÉÈ'½Cÿ ÇÆôÿɘøº_øV>0ÿ GþLÃÿÅÐÕÝÁhqu>²ºš·ö"ÚŸ³y¸Ø%Ú»<¿Cž¸íœ×œWq¨øƺ¦¡-äú2,’X%Ä@tÇj©ÿ ÇÆôÿɘøºIK•Öÿ±ñ‡ý?òfþ.øV>0ÿ GþLÃÿÅÓ’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*÷ÿǤ?îŠòßøV>0ÿ GþLÃÿÅשxCþ=!ÿtSB=¸(¢¸(¦.¿ÕšóÈ.óþ¹?ò5é÷_êÍy‡ŽÆtÛ±ë#@•bØÓ-qÿ<“ù ŸÌ>Õ‡©Hñø.åãfG]=вœ|¾ Õ$Ô/ôß [My¨X¬òˆÖû,œ®q°9go¦>”€éžácÛ½•w£'>”ÿ0ûWu«ÞkZF—2, y²°hÝc,¡°ÛN ‡šßÓïõ+¹u-.åí¡Ô-B¸†2c*à•m„ç#ŒÓ¶Ÿ×—ù‡_ë»G@“Ú©GÿWc·š?ô¬¿ IrÚ}â]]Ku$WÓÇæÊrHVÀöAÅjEÿ7õÔè CKERQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEɦŽÞ '•¶Ç—vÆpÉ5ZÛSµºŸÈŒÌ$Ú\,nÿë ÿЭUSÊO3ư²ÈÁ†é#åû§Ò€%¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ¤2J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠÏÕô‹[Û+Æ[y/$…‚HÑ®íÛp¿1ü+FÑ.ŸS/ªéÈmÄNM²A¸•ÇžÀó]V.ÿç•¿ýþoþ"Œ]ÿÏ+ûüßüEa<<'57º%Å0EoÅIkÑBø ã|#Ŭ_îŠëä–x|ÑGå¼É!%G® Šä|'Äýn†wÐ}ÁE}ÁE0uþ¬×x¤n8õ8¯EºÿVkÏ|H3qõqüèuüMe§¬6²ÅpÎÇ’Šåõ÷¦Âe§Ï¯ûåøªæ5¿ù ŸúãþŠZήwQ¦a*’M£¸ÿ„ËNÿž7_÷ÊÿñTÂe§Ï¯ûåøªáè¥í$/k#¸ÿ„ËNÿž7_÷ÊÿñTÂe§Ï¯ûåøªáè£ÚH=¬Žãþ-;þxÝß+ÿÅQÿ –ÿ•£\—‚åûþÙÿìÕÖÖÐwWfðwØQEEQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@®·ÿ#Lõæÿú •W¼D‚­kò4Áÿ^oÿ ÉU¼/ †óõýÕŠøiÿ…~lï û‚Š û‚Šè9]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@µ¿ù ŸúãþŠZË™Ú8™‘7‘ÎÜã5©­ÿÈLÿ×ôRÖurKâ9%ñ2µ­Ó\–ýÐTÄ<út«4Šª£ p)i;t·CT”Mtb 6ë½ #7ï;göþu¥КÅ.R6}ÊÅÆséÍI1Ä\¢àÈÛ˜ç94C p!H—j–-Œ÷'&Õ¬6бHeŒ;Fñ“ü/ŒÊ«Ï4†YËH“{°'ØgéVêma™÷H™$`òFG¿­ ××R¹—ÊX„¾PHÄ’>$¶Oz’ ©!¬Üc©?ýaVÒ Lêyþ´Ki͹Ó'à‘‘M´ÇuÔ¤<Ù¤…žb;Ùð8-ÿÖ-Ë·.LVûˆõ-ÿêýjãYÛ»îhòp,pqÓ#¡§´;32YvŸqO™2)-Ìñ«ÊåÝ2Çt{nÀw§Ü,ÉfþdÛÚ@(P$ãŽõe-¢Dd J°Á Äÿ:h´„FcÚJ’ Óñ¥tEw™£’_,/ÊRò:ÿë—¾dVÁ]Þbî8Ú“Œ}*Ù¶„£¡L«¶æäò}h[x¡ r„•%‰Æ~´s ºÝ™ ó^@Û¾a· ‚ªBÒCgç‡%§lª0 ­^H’4(‹…$œ}j1gÄcvpXñôô¢èI¡4¢êH^_0*ƒ’Á9㊉®d…æi]@YcÚ6²ö篥[ŽáR¨¸“ÎIüi‹iîù3¸m;˜·œÑt;¢ª\\*É#³2,eŽèö€Ý€Ï&¬ÚBÖöʯ!l(àÇ­9maXÚ0¤« ÌOó§ÇD›¾äŸçCk ›Eó#ÓÚ`çtÇ*„ ÇŽÕ,hZòY”H‚¦8=½ûTÉi(UC€Á€,NéNñ šP§{uäàþ(rCrEçtŠRÊÓn•™P±žÃñ«öÆCn¦lïç98Ïü)¦Îˆ» ÷pÄøæ¦PBŽ€`PÚbm1h¢Š‘Q@Q@Q@Q@Q@Q@Q@Q@SÕ ““fÒN3–ì1Þ®T7V±^@b”eO Ž úгìÎigY Äîz0ûÂ0zíçò®¦0j’  s‘õªrirA&23ÁS‚}r}êꪢ…P@À s’–ÅÎJ[w‚åûþÙÿìÕÖ×%àŸù~ÿ¶û5uµ­?„ޟ‚Š(«,(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šåu¿ù`ÿ¯7ÿÐdªþû£ëV5¿ù`ÿ¯7ÿÐdªþû£ëXPÞ~¿¢:±_ ?ð¯ÍÜpQDpQ] ˯õf¼÷Ä_ñóýt_ç^…uþ¬×žø‹þ>bÿ®‹üèíç…ïu’îmÖ9!‹Ùâ5‡µAÿV¥ÿ=í?ï¶ÿâk´²ÿ}¯ýqOýVe¯‰¬îµ¹4Ômùc˜Ÿ–GyGÓõÁôç?g©œ[¹Ï©Ï{Oûí¿øš?á Ô¿ç½§ýößüMvì‚[„‰ùB¬ÄzãŸÎžl­?çÖûö(öq²‰Âÿ©Ï{Oûí¿øš?á Ô¿ç½§ýößüMvÏceøó·ÿ¿Kþ]쬿çÊÛþý/øQìâÊ'#ÿV¥ÿ=í?ï¶ÿâhÿ„+RÿžöŸ÷Ûñ5ÔŘ%šÚ6+î™F~æö*@ü³øÖŸÙ-€ÿQ÷* üÍÎ!ì¢pð…j_óÞÓþûoþ&øBµ/ùïiÿ}·ÿ]çÙm¿çÞûàQöKoù÷‡þø{8‡²‰Áÿ©Ï{Oûí¿øš?á Ô¿ç½§ýößüMwŸe¶ÿŸxïQ\Á VÒKkÆ¥AŽœàûQìâÊ'ÿV¥ÿ=í?ï¶ÿâhÿ„+RÿžöŸ÷Ûñ5ÝÑG²ˆ{(œ'ü!Z—ü÷´ÿ¾Ûÿ‰£þ­Kþ{ÚßmÿÄ×wEÊ!ì¢pŸð…j_óÞÓþûoþ&øBµ/ùïiÿ}·ÿ]Ý{(‡²‰Â©Ï{Oûí¿øš?á Ô¿ç½§ýößüMwtQì¢Ê' ÿV¥ÿ=í?ï¶ÿâhÿ„+RÿžöŸ÷Ûñ5ÝÑG²ˆ{(œ'ü!Z—ü÷´ÿ¾Ûÿ‰£þ­Kþ{ÚßmÿÄ×wEÊ!ì¢pŸð…j_óÞÓþûoþ&øBµ/ùïiÿ}·ÿ]Ý{(‡²‰Â©Ï{Oûí¿øš?á Ô¿ç½§ýößüMwtQì¢Ê' ÿV¥ÿ=í?ï¶ÿâhÿ„+RÿžöŸ÷Ûñ5ÝÑG²ˆ{(œ'ü!Z—ü÷´ÿ¾Ûÿ‰£þ­Kþ{ÚßmÿÄ×wEÊ!ì¢pŸð…j_óÞÓþûoþ&øBµ/ùïiÿ}·ÿ]Ý{(‡²‰Â©Ï{Oûí¿øš?á Ô¿ç½§ýößüMwtQì¢Ê' ÿV¥ÿ=í?ï¶ÿâhÿ„+RÿžöŸ÷Ûñ5ÝÑG²ˆ{(œ'ü!Z—ü÷´ÿ¾Ûÿ‰£þ­Kþ{ÚßmÿÄ×wEÊ!ì¢pŸð…j_óÞÓþûoþ&øBµ/ùïiÿ}·ÿ]Ý{(‡²‰Â©Ï{Oûí¿øš?á Ô¿ç½§ýößüMwtQì¢Ê' ÿV¥ÿ=í?ï¶ÿâhÿ„+RÿžöŸ÷Ûñ5ÝÑG²ˆ{(œ'ü!Z—ü÷´ÿ¾Ûÿ‰£þ­Kþ{ÚßmÿÄ×wEÊ!ì¢sþÑ.t´ý¡âo7nß,“Ó=r­mÓßµ2©++#H«+ ¢Š)Œ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šåu¿ù`ÿ¯7ÿÐdªþû£ëV5¿ù`ÿ¯7ÿÐdªþû£ëXPÞ~¿¢:±_ ?ð¯ÍÜpQDpQ] ˯õf¼÷Ä_ñóýt_ç^…uþ¬×žø‹þ>bÿ®‹ü躲éÖÀŒƒ è"«Ç¡é1H²G¥Ù$ˆC+-ºèAÅOgŸìëlO˜ÿ²+ž²ñUõÞ²4ãªL®D£í$ùj:±ù:tÇ®Etëÿ©ÿ\ßù­cø»S[6+o¶¥”·Òˆᤠå)åß'¡ =È­…ÿØÿë›ÿ5¨gÒ­î5Xu K¼ÄÑG` ÜA-Œg<×¥ 1<;¨Ëªx~kxu¥»´v¶7c‡ÇÝ~Í• õëšg…ä¸k Ĺº–æH¯§Í”äØ}³•ok©Üê—G¸HÆ6¹ÃcÏ8ëPYiðéÉ:BÎÂiÞvÞAÃ1É¥;ë òóŽ/¤ÿvÛÿFµlX²œ^IôµÿÑÍZM'4€Ÿ4f«y”y†€9ÍÅsi:ƒ,ÚÍ-Ín-¥g]Ä™ìSƒ®–õ¿â]té‹#\ý÷†mo§¹¶ÞÃÓ¬“Á®Éq‚r¤º:Ò¶o_þ%·õÅÿôBØ:–«ž¾Ôõ;T³¥„–—WBÝ!Œ?œççÉ88$cZèk›‡NÖãñÆ¡,uÀwÙ rᡇûª¾Yž§žO| kpèt”QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE5ûS)ïÚ™HaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP+­ÿÈÓýy¿þƒ%WðÇÝZ±­ÿÈÓýy¿þƒ%WðÇÝZ†óõýÕŠøiÿ…~lîàû‚Š û‚Šè9]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@Õ—üƒíëŠè"ž°D³¼Ë \g ËÐøše—üƒíëŠè"§ ¯ü~Çÿ\ßù­X5]ãö?úæÿÍjÁ Ÿ¥UnµiúUVëH ’Æò]Oå®çX p¹ÆvÈíÒ¥7q甹¸û4‡ù.)¡ŠßO´à˜¡P}2î3úÖÙ"–”Ÿ_5‡ò4 ÎûT_ݹÿÀYøš>Õ÷nð_þ&´~ɬ¿÷õ¿Æ²Eë/ýýoñ FÚ¢þíÏþËÿÄÓ&—í6ò[ÃÅåR™h]‚0I,JÓû$>²ßÖÿŽâ‚š6pcRØg,¹4%QLŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¿je=ûS) (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šåu¿ù`ÿ¯7ÿÐdªþû£ëV5¿ù`ÿ¯7ÿÐdªþû£ëXPÞ~¿¢:±_ ?ð¯ÍÜpQDpQ] ˯õf¼÷Ä_ñóýt_ç^…uþ¬×žø‹þ>bÿ®‹ü躲ÿ}¯ýqOýTõ—üƒíëŠè"§ ¯ü~Çÿ\ßù­X5]ãö?úæÿÍjÁ Ÿ¥UnµiúUVëH ¬q}'û¶ßú5«`šÆ”âòO¥¯þŽjÓi9  sFj¿›G›@†Ÿ¯^éK«\O`fÓcÔåY.EÇÏ, Ž@ÈïøWazßñ.¹?ôÅ¿‘®aü3q)»¶}TfÝ]‰mÖßÙ •ß»§™®†õÿâ[wí ÿè&ŸEýt»,ÖÖ»{c¨AÖ“²Ê{‘mâáY˺JÐýsí[µË*ê’ø‘k©¢†R–e&‡Ë‰:/’ÇžÙÞ…¸=ަŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¿je=ûS) (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šåu¿ù`ÿ¯7ÿÐdªþè>µc[ÿ‘¦úóýJ¯áŽƒëXPÞ~¿¢:±_ ?ð¯ÍÜpQDpQ] ˯õf¼÷Ä_ñóýt_ç^…uþ¬×žø‹þ>bÿ®‹ü躲ÿ}¯ýqOýTõ—üƒíëŠè"§ ¯ü~Çÿ\ßù­X5]ãö?úæÿÍjÁ Ÿ¥UnµiúUVëH s73•RÅ#·rd²98üJÚ…™<Þ[ƒèÒ¨#ð&…r—󕱆õ.à:¿ögÇÍs&{à(Ê™ßo²ÿŸë_ûü¿ãGÛì¿çú×þÿ/øÖÙüüÍù/ÿGÙ›þ~fü—ÿ‰ FwÛì¿çú×þÿ/øÓ..àžÖ[{yâšYÆ«†9#8è\Ö§ÙüüÍù/ÿLš7·‰¦3„™\G|`h%QLAEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_µ2žý©”†QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQErºßü0×›ÿè2U tZ±­ÿÈÓýy¿þƒ%WðÏOư¡¼ýDub¾á_›;¸>࢈>ࢺA—_êÍyãæ/úè¿Î½ ëýY¯=ñü|Åÿ]ùÐueÿ û_úâŸú©ê /ùÚÿ×ÿÐEO@ _øýþ¹¿óZ°jºÿÇìõÍÿšÕƒ@?JªÝjÓôª­ÖIÅôŸîÛè֫𮩑`÷wF@Ê#ff =É"©Hq{'Ò×ÿFµO«Å%Þ,ÛZÜ—À1]#ažs€• cº‘Ef÷6WvÏur-’9BnV NŒpzP^x¦ÒÒIâû5ÔÒÃr–¾\J¤»²îrÀc¾+?êqéF.`V×ÂîÚ&‘äŠ5^â7cóŽ3Ò–= SšìÝÝ5šJú”WŽ‘HÌ¡=˜¨Éü5¿õåÿ_×çÿ¼ž4´bÆM;R†8æO,‘(X$$ žã‘‘È­ëÓÿûŸúäßÈ×3y ÝÜXëp$¿»Iâ%ލ;¸ëò™í]ëÿĶïþ¸¿þ‚h[RÅeßëÖz~¥g§Éæ=ÅÓ„Ur9ÁcØw8>•©\N£¢kP_ÚÍŵǪ,ìâÑˠø‡ÆÕtâ-Ò³;j(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ý©”÷íL¤0¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(Ö,.dÖÒõcͼv®¬û‡köëÜV†z~5Õ_ÿÈ>çþ¹7ò®WÃ=?˜AE»uÔÒ¥G5ú+ÜpQDpQVd2ëýY¯=ñü|Åÿ]ùס]«5ç¾"ÿ˜¿ë¢ÿ:äkÿ\SÿA=Aeÿ û_úâŸú©è«ÿ±ÿ×7þkV W_øýþ¹¿óZ°h'éU[­Z~•UºÒ•ÁÛq3žˆ–ÎÇÐ X“ùWÎ\n^AäPÁÿ!)ÿë„_ú”󦨳k+bORb_ð lîš6?÷OåMþÌÓÿçÆÛþü¯øQý™§ÿÏ·ýù_ð lîš‚ù¶ió¡ûÒ¡«0À¥þÌÓÿçÆÛþü¯øSâ±´÷Ãkn?‰#þ”=QLŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¿je=ûS) (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š¯ÿ ûŸúäßʹ_ ôükª¿ÿ}Ïýroå\¯†z~4ÝÁ÷A÷Ä2ëýY¯=ñü|Åÿ]ùס]«5ç¾"ÿ˜¿ë¢ÿ:äkÿ\SÿA=Aeÿ û_úâŸú©è«ÿ±ÿ×7þkV W_øýþ¹¿óZ°h'éU[­Z~•UúÒ;ù Oÿ\"ÿФ¥ÔµK=&Ý'½‘‘Äk¶6rXô(&’ù Oÿ\"ÿФ¬FòÛi1Ç3Bí©ÀE•<ò~bŸd>æÕ†§m©ÆïmçmCƒæÀñÀ8«uÉø‚ÁŦ•gw& “jq‡óÑrß)#JÊñ-½¾¹¥ËØYé)fØ]Àï ¾ã»n×P¯¸Ïn”_…Åý~6=œk?NÕà¿Ñ#ÕXy2yû g9?…qòÃaíŒ~%»[»ÓZÜΉäÉÜO<>ݸÏ5»áIâ±ð%•ÄĤ0Û´ŒHè “ü¨{7ýuºFޝiº¬ÒCgpZXÔ;#Æñ¶ÓЀÀd{Ž)/Ç´uAÜ쨤BJ)eÚHäzRÐEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_µ2žý©”†QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW¿ÿ}Ïýroå\·†z~5ÔßÿÈ>çþ¹7ò®[Ã=?î û‚Š û‚Šbuþ¬×žø‹þ>bÿ®‹üëЮ¿ÕšóßÇÌ_õÑwV_òµÿ®)ÿ Šž ²ÿ}¯ýqOýTôÕÿØÿë›ÕjÁRl1Hörr cóÚ˜m'=þÉþiÁÇJ®êsÒ˜l¥?ÞÿÀÉi§Oöü – ·çR¸ÁÎ!‰O±Ëœ~D~uv ¶Dˆ˜4šV¹«%Ì"ÞæÖæØ¨– ” Êd c\ݕΫáØ5˜¥³kÆVûU·Ù`pŽÒ™ùˆÃrFIÁ&´|3$X¹‘Öñï¦"K™î-$„9èîå€ãÖ˜Æ?éòÿ×$þoQ­õ£Ç ‹u$çlL$HyáOsÁééFwjúaózâ´øîÖéRiש>ŸvÆg6íåm H;‡~ôís°·ÕôÛ¹Ú mBÒyÑÅ2³ z€sY¶þ+²¿ÑõŒ–ÒJ¡KÛItˆÑå¶üÇ'oã×¥béúTñiqc"\ÃvÞiòˆtB²gwñ×Ú¡Ž+ƒàGÑÿ³oVúßb¸6͇ÄÃî¶0ÜsÇj¤µuQø‚Áõ‹­)çŽ+¸YUc’E .åÝòŒäÓ4½vÛjº„Öö‹(;‹ÈÉdŸj¥j^Çź¢ÏerËzÑ4¤Ða6œ°ápGzçcÓõôíI Ô!ŽÄÏ âU’Dr~WÊÛ—õúÒè{.¥c¢ÝÍ{m³clÏ*„9é†'WCÕ†±os:ù~\wRBnªp>õÍE¦.št{Õ´¿½Óâk†xä¶ýìO!7”qÃp«_°4zUñ{Y­ãšòy#‰â1¶Æ<|§Qßúì¿®æÅ¶¥ay4ÚÞÛO,_ë)U™> )‰¬i’,ìš•› q™ŠÎ§Ëÿ{ž?äl-¯Í†¡¤i±] ?°º[ÍwhmäŽCÀMÄ ã“Î8õ5oí²§†ŒVuku q$ˆö'å\€Û21!$œÐ¾©¯Co Ë©éÓ[ݪ:(d:X)åO½h\j66“ÇÍí¼3Kþ®9%Ugúy® X^Í¥x¢†þq,–òFg´òd—n a®O‡5&§¦Éq¬ê†ôj«i¨¬f#kd²å6µ‰FhÈ9=ºç­0;Ô¸†Y¥Š9£y"À‘)‘‘‘Ú¤¬ý?ÈK«¨c³–9#¬—2Dí/7ñ`p}+BS¶¸ŠÐj·3¸Ha“{±ì¢5$ÕÊËnM×’Öç¸`Â8¤û®ÞPÀ>ƦNÊèqWz³ñ\’ùCMÔb™íÍͼrÆŠncî|ØÏ#†*yë Ýkû*M'Q´¸òLÄÎ"Ú8(팞ž¸5ÎøRÆkmzÉ­¡ÕÚÞ; Ãj‘2ù, ±©ÎBä`A[þ¶˜KT»†H®¯nßå• ²Ä‡dc¶àUv×ïüɾ‡AERVuŸú‡ÿ®óèÆ­δ‚AÿM¦ÿÑ@K­éPHÑË©ZFêpU¦PGášoü$7ýl¿ïúÿsÿðƒÌ¤ˆµ}±º ¹$rdûâøB.¿è2?ðÿñÊãu1?ÉøžŠ£ƒ¶µ_ÜÿÈè?á Ñ¿è+eÿ×ühÿ„ƒFÿ ­—ýÿ_ñ®þ‹¯ú ü?ürøB.¿è2?ðÿñÊ=¦'ù?ö8/ùúþçþGAÿ ÿA[/ûþ¿ãIÿ ù ÙßõÿÀÿ„"ëþƒ#ÿÿ£þ› ?ä2ý»þ.i‰þOÄ=Ž þ~¿¹ÿ‘¿n–SYÁsz!y'A&fÁÆFp¹éŒö§%Ì6WrÚÉ0X¬‘ùÐŒsé·õªvsÿľÚ&‘£x¢Taód ᇥOjóR¸•·lX£MËÓp.HýGç]gž\þѲÿŸ¨ï±Gö—üýCÿ}Š“ì°úÉùð£ì°úÉùð¦"?í/ùú‡þûhÙÏÔ?÷Ø©>ˬŸ˜ÿ >ˬŸ˜ÿ ûFËþ~¡ÿ¾ÅÚ6_óõýö*O²Ãë'æ?²Ãë'æ?€#þѲÿŸ¨ï±Gö—üýCÿ}Š“ì°úÉùð£ì°úÉùð ÿ´l¿çêûìQý£eÿ?Pÿßb¤û,>²~cü(û,>²~cü(?í ?ùú‡þûaX2†R<‚*?²Ãë'æ?žˆ± Eû£¥Ú™O~ÔÊC (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€+ßÿÈ>çþ¹7ò®[Ã_Öº›ÿùÜÿ×&þUËxkúÐuÜQÜS˯õf¼÷Ä_ñóýt_ç^…uþ¬×žø‹þ>bÿ®‹üè¹³´ë`@ À€ƒßåÍXø"ÚÓ_k²"k8Ï™[~`þçÐvü=9鬿äkÿ\SÿA‰}k-ô¶I:5ÌJã•§ù÷¢€#ºq Ü3¿tf줕#>ƒå<ÔGP²ÿŸëoûü¿ãW\³J‘#m, Æp?ÄSþÌçæoÉøš@gý¾Ëþ­ïòÿP²ÿŸë_ûü¿ãZf?óó7ä¿üMeoùù›ò_þ&€*Z8¸ºšá9ˆ¢F­Ùˆ,I£æëìjåF…ÖW…Îâ 0lc çü ILŠ( Š( Š( Š( Š( Š( «De´¸¸anó,ÎÙF>P0wéVj k«™æŽÙ¢a`¬Î¥‰8Ï@Gb(ÇÛ¥ÿ }ÏýõÿGÛ¥ÿ }ÏýõÿQ}—RÿŸ«oûðøª>Ë©ÏÕ·ýø?üUKöéèsÿ}GÿÅÑöéèsÿ}GÿÅÔ_eÔ¿çêÛþüþ*²ê_óõmÿ~ÿ@ýº_úÜÿßQÿñtËhÚ(¾7–glt˜¶?ZoÙµ!ÿ/6ÇÛÉaÿ³Síå3B­’¬=$Ô–Š( Š( Š(  ûÝ-.¥YRCž¨ûÃü}êì0ÇKJ`O¢€ (¢€ (¢€ (¢€ *»ÞÁ”Ë»/ÞÆÏ·ë´T±KÈ7 §¸4ú(¢€ (¢€ý©”÷íL¤0¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(½ÿüƒîë“*å¼5ýMu7ÿò¹ÿ®Mü«–ð×õ4ÝA÷A÷Ä2ëýY¯=ñü|Åÿ]ùס]«5ç¾"ÿ˜¿ë¢ÿ:ӭ¹ÇîSŸø¬[_ÛZjI~š…ûN®\–hþrz†ù9¶lÎ4ëbsÄ ÐgøEfÁâ½âxáŠæF’G؃ìÒŒŸO»@ ÿÄÂ!ÿLŸù¥W×u)4Ý1¤·D’îWXm£~# ûw>ÀÔ®ØÔ¡ÿ®2èIY:¾“&¯ªÙ¼Óƒ ¦#iú|¾Ð¡ý^³añ¤özeÒÇ8MFO. TeNüÜð>SÓ5}NíFaÿL#ÿО¹›?êöí¥ÙÈöMa§\´±Êü×\0®ÜóuÏj@ö/Øø²Öúkdw°GtYmçš5ÊÃ<x=@éYöÞ&¼»ðö…Ä7Vr‡í)n¯™üŠ_ùâ¬Úøvî+Bµy /asçJCÃ—Ž¿0늮žÖ?á—Bv±0ÆTA0wÜÀHæxãОj–àÍ mnîOêZsYM,óM·ÓmníDˆöɸ@êäg  ü ço­hhuÞcr.Ìââæ[‚±1(»Žq’?•ÿ®ÁÛúî!‚þÎKß²Ý[Ù$fU¹T# î0Äôç)lõÃ{k-ÌzV¢±ªz"™é´nÿбXöÞ»‘õîÒÆÒòÕák{)]Ñ¿å¦Ö)€sžj{/_¿ÐäÓ®žÁ ˆÂI’bm¬ WCƒ‚zÐ55LJµ¶K«+ËYbI#”tÜëýÒF=hj&µÓî'ˆÛ]ζªæX# 3ódƒÓœx¬X¼#x4Íf‡O²{Ö…¡†Ý™£C'h<‘ØT—~š]bâüéÚ=ïÚÂ4‹x0¸P§cm;”ã¡Å0:kk庸¸‰`V¸•Ó (aœ¡ïŽõjªÚ¥Üw¤«l¶‹´[³¸ s»oÿ2ÿñTÂ!¡ÿÏ›ÿàL¿üU¸®ëúù>ùeø™Sþk?ùò»ÿ¾¢ÿâèÿ„ÚÏþ|®ÿ憎øº·ÿ†‡ÿ>oÿ2ÿñTÂ!¡ÿÏ›ÿàL¿üU¸®ëúù>ùeø™Sþk?ùò»ÿ¾¢ÿâèÿ„ÚÏþ|®ÿ憎øº·ÿ†‡ÿ>oÿ2ÿñTÂ!¡ÿÏ›ÿàL¿üU¸®ëúù>ùeø™Sþk?ùò»ÿ¾¢ÿâèÿ„ÚÏþ|®ÿ憎øº·ÿ†‡ÿ>oÿ2ÿñTÂ!¡ÿÏ›ÿàL¿üU¸®ëúù>ùeø™Sþk?ùò»ÿ¾¢ÿâèÿ„ÚÏþ|®ÿ憎øº·ÿ†‡ÿ>oÿ2ÿñTÂ!¡ÿÏ›ÿàL¿üU¸®ëúù>ùeø™Sþk?ùò»ÿ¾¢ÿâèÿ„ÚÏþ|®ÿ憎øº·ÿ†‡ÿ>oÿ2ÿñThxâÍóÿ_2ÿñTr⻯ëäøå—õó.Y^$U›0ù¤‰]Žõ\±“óÜÓ^ëìڬ軫ƒ„ 1, 䎡GåT¡¬¡ŽÒ}ÊðF«Ã²‚Æá‚28«ºr4ÓËxè<¹#DMÃ’cŸ¡ÝúWYç’h·üúMù¯øÑý¢ßóé7æ¿ãWv§üóþùmOùçýò)ˆ¥ý¢ßóé7æ¿ãW#q,jàèiv§üóþù¿Aí@ ~ÔÊ{ö¦RQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE^ÿþA÷?õÉ¿•rÞþ¦º›ÿùÜÿ×&þUËxk©ÿxÐuÜQÜS˯õf¼÷Ä_ñóýt_ç^…uþ¬×žø‹þ>bÿ®‹ü躲ÿ}¯ýqOýU84mbmR8ÈžQÓ?*“ÔØž3ÿ×5rËþAö¿õÅ?ôY–¾&³ºÖäÓP·åŽb~Y}åO×Ó ˜åE_œü]lÃþ\.¿8ÿøº´ö6Xÿ;ûô¿áUÞÊËþ|­¿ïÒÿ…!µŽS,·&Æpª©HQœgg,z{Uª¥f<›©íП("H«ýÜ–o—?]¦ ¢¢”nxc$…‘ðØ8ãi?Ò¦û%·üûÅÿ| J)~Ëmÿ>ðÿß²[ϼ?÷À ¢—ì¶¿óïýð*+ˆcVX‘c`ê§hÀ 9üèJ(¢€ (¢€ (¢€ ®!š)d’ÞdO4†q$eùÆ20ðbЇ7ÿóñmÿ€íÿÅÑ›ÿùø¶ÿÀvÿâêj(ßÿÏÅ·þ·ÿFoÿçâÛÿÛÿ‹©¨ sÿ?6ßøßü]:„Á'$ž¤“’2jJ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š( ‹8.öyñ‡Ør3þz{TôQ@Q@Q@ ~ÔÊ{ö¦RQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE^ÿþA÷?õÉ¿•rÞêÞ5ÔßÿÈ>çþ¹7ò®[Ã]OûÆ€;¨>࢈>࢘†]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@ÕN¶dSÿA^=IŠE’=.É$BYmÐGB*{<ÿg[`|„À'ý‘\õ—Н®õ‘¦Rer%i'ËQÕÉÓ¦=r(§_øýOúæÿÍkÅÚšØé±[}µ,¥¾”@· O)O.ù=PqîEl/ü~Çÿ\ßù­C>•oqªÃ¨J]ä†&Š8Ûâ lc9à½)ÍiÞ)‚ÛÂw‘]Ëa)µ3 A6p»8ùRO×Ò ð¶¢nµMZuxïä Šc”2  Ý°‚qüù®™4‹h5+›ø÷¹H¸Øvç Œuçj4Ø-/¯.âÝæ].06Œ qNýX ÿ”ÿõÂ/ý J»T­ÿä%?ýp‹ÿB’®Ð2œ\Ú×Sÿ 5[&©\\Yÿ×Sÿ¢Þ¥i9¤ù£5[Ì£Ì4ÎMâ¹añ±Ïksi-×ÙJÇm(h؃Ö\”bä éoOú0ÿ®±ÿèk\úøbÕ.ã•ooDÜý­-w¯”$$’~îìd“Œ÷­«·Í°ÿ®ÑèÅ¡mærèÌ$ àw®oÚΥ­mº’}1`ù¼ÛXÃùðp“Œúü¢ºFÝ´íÆìqž™®d躭þµg{}›mörÛå´gi&HØr£ Îzž”CFÃ^Sv6¶7­lº(¢9qýß›'=Ž5NïÄ~›ªÀ¶×–Ööo:¬ê¡±ƒ†R¬GQëPÚèÚݾ‰.†.-Õ`x`»ÜL0¹\cŽä5TÓü#s·Åí´ë%¸ÓÚӎϹ‰ûí•Ö‡­×—ùhÓþº‰â´²±„ÛÞ_]½¢O"[ fUÀù˜’'>çž*ÝÕÕÆ¥ ¥Ö‰0ó&òÞ' }ÒÃw þÎkŸŸÂWrËew-ž“{ÔÔðî©gqí£Ù½Ä7wRˆåvThæ9…$0À튒÷×·±ëDËn’_,B¼`}î:dvíBØ:“K©]Kâ LW6qÌ·dÉÚ«‚v±­Okâ‹;«¨#[{´‚å™-¦` œç 8ÈǺn«{}¥ß]-’KlÒ¤ÑÇ#²˜Ý@Ê’ îèF=ꆉá¥ORéÚD°Ã¸-ê©sŒ¸Ï©Ý@ yâv½ºÒE„±ÚÍ~±ý©,S. sœ;œV業G§\Áj¶·7W3«:EnªNÕÆIÜ@î;Ö%¿‡õˆWJ°y,^ÃN¹Yc˜3‰Y®Ügž¹íZ$Ò®uXcŽÞÒÊR¡ŠË<Ï·fBªOê(éóýuþ¼Éïuè­.bµK+Ë«¹#óL襣N™bXÏ{Q¨kɦHŸi°½ä kªcŒ±ÀÝónêFxª?ÙÅìÖSÚÝ\4¶¹LȦHpTrNF+7Xð–¡©^]ÊÑiÓµÃÆé<ò?™m·nUÒ1Áî:óO¯õýlœZÀ²Õ|C-ìò€Fƒ-È8QêIüÍ>MbëS¶¹´Ó¡¹±Ôâ1?—rˆË,2Ã’¤`0õªÚ§…®5µ”2À ¾É`IY#Ç ½ œzÕßé ¦™žM/J²‘€Pl3óùÊËšH*^]ézåîª|É-ÌÒáp3f(8ãîãúÕM7WÕ§gi«Eh>ÝM·Ü6Á(Ù'<0äc¡â¶5+$Ô´Ë«ª\DÑ’:ŒŒf±ôí#T:Þ­-¡û "ܱÞ[»d p£ž§šÿןü{^_ðE×õ-gIW½…lÍa`æi‹0¤“ÀÁ¨ïõ»´ñ)Òà¿Ó,À†7Qx…žVbÀ…ïL^´ëí;Z—Ä_oH4û›xT Hç¹tò›3`FÀ±èxSN×´ícY¶ŸNXôÕ³B™¤wi#õ!vàzŠA‘ßëwiâS¥A¥Ú n¢ížVbÀ…ïL^µ{Ä:¬ÚM„RÄ! $é š|ùp†þ6ÇnÝGQÍT×tÍ_U´›Ltÿ°Ê¡<ù™ÚTõ!và·¡Ü*Ö¹¥\ßÙÚ%³Âïm2Jb¹Ï—0­Œúç¡ä(ÿ1‹âÉm´‹›‹¨àžT»û,[ò®€r>ñÀç8Ý÷N3Zú¢ú•“Ë%ͼÒ,…XCÇåð>VWù³õéX‰ákõçìíîÅòÞÃmï!]¥s€~`I$§¥hXiº½¥ÍÅë5Ú/n‘îP(‘*íÂ[ÉS^ÖßðAÿ_ü„ž(¾´ ²ÛòÚ}ˆîûK©#÷ƒœcn˜À<Ó¥ñ.¢žv¤°ÚÿdCyöVS»Î#xC 9Ƙè:Ôsx_P–æDÿ@1½ð»ÇwÚPnhÇA·;ºv©eðÖ¢Âm5fµþÈšóíLÇwœðæ01ŒsÐô¥—þ¶ÿƒýX%ÖßÖÿðIâ‹áªÉ -‘ß-§ØŽï´º’?x9Æ1–éŒÍYƒ[»ºñ-Þž—ú\)o:¢ÛÈŒg•v+>qêGÝ=*¤ÞÔ%¹‘?Ð o|.ÅñÝö”Ú1ÐmÎîªö§¦jú½ÜNº|Vp]$ë23´ØVÈIÆ ÉïDz_úÛþ>¿×øÒj÷éâ«]5¬ãŠÎd”¬¬ûÊ9}ÑÏ~O·}Ê̻ӦŸÄmú²­c™\wáqŽ=iÑÐ:…Q@ ~ÔÊ{ö¦RQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE^ÿþA÷?õÉ¿•rÞêÞ5ÔßÿÈ>çþ¹7ò®[Ã]OûÆ€;¨>࢈>࢘†]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@Õ—üƒíëŠè"ž°D³¼Ë \g ËÐøše—üƒíëŠè"§ ¯ü~Çÿ\ßù­X5]ãö?úæÿÍjÁ Ÿ¥UnµiúUVëHíÿä%?ýp‹ÿB’®Õ+ù Oÿ\"ÿФ«´À­x¯û‰Q ùRn*:U—ûë?…@nâ'îÜÿà4ŸüM\”’ÑF¬WÌm¥‡P0Oô©>ɬ¿÷õ¿Æ€3¾Õ÷nð_þ&µEýÛŸü—ÿ‰­²Cë/ýýoñ£ì‘zËÿ[üiŸö¨¿»sÿ€²ÿñ4!º1ÃrãÌWwx™…`ßÄIÆ8­²Cë'ýýoñ¨æˆ[…’6|nUef,'þ´%QLŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¿je=ûS) (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š¯ÿ ûŸúäßʹo õ?ïç]Mÿüƒîë“*å¼7Ôÿ¼wP}ÁE}ÁE1 ºÿVkÏ|Eÿ1×EþuèW_êÍyãæ/úè¿Î€;«/ùÚÿ×ÿÐEOPYÈ>×þ¸§þ‚*zjÿÇìõÍÿšÕƒU×þ?cÿ®oüÖ¬‰úUVëVŸ¥Un´€ŽßþBSÿ׿ô)*íR·ÿ”ÿõÂ/ý J»L¤8¹´ÿ®§ÿ@j´MR¸8¸³ÿ®§ÿE½Ldæf‚~SôªþmLŒPÀä<1¯^ÚhÚR_XŸ±ÜJ`K±q½‹–m»“xÎMv§ý×Xÿô5®bÇÃ%•µÖ¨'±²—Ά·ØKJîmÇ8'°Ñ]¾m‡ýv‹ÿF-6IÙ‚#1èN+E×/µ•†ét´‹N˜IÐgÇl ^3铊ÜbB’N8µÈA¦ßÉ®[ÜZhÏ£¡f7Ž.¤À©؄峃¸€iCzÛ_Ónîe··åxƒnd…Ê|½@|m$zUgñ¥Æ•©É§Ìßjµ¶ivK ÆËò’ב‘ô¬ý>ß]±ðëè‘Xù7[¼p_,¨cfÚqÀŸqÖ©YèZœ×ƒÉiyŸ¥µ¨kÛÅœ´¤ž„3a/¥ª]¿Ìkuýv:øHl¬´ë5 ‚'žÝe*‘3œ`e° às×¥XÔ/n?±ÅÞ’±ÜÈæ3••˜dðºI®^MRWÒi÷’a¬¶ö·þD‘²ÎC…e9õâºí.Ò;.ÚÖZãŒ>òžÙïVívüÈW²*éú¤Œa·Ô•`½žIÄQ*0܈Ä·iëÎx¦Ïâm"ÝžåÎùd‰BA#±d8q…RxõéPëv·Ëªéš•©»6¾jIȨÅ\XÁ‚k3HÑõ(µ6êâЩq{4ªdRcœ¨8<Ÿ¦jQLйñe”3é†-ÓÚ^¬¬%†7‘—f8تOSÏb›¨x‘´ø5KäÌ–X•]D˜ÎìŽO9}5›“«i×–×ñéæãɼ¼cJŠÆ9[*À“ŽÝ3žj]CEÔ¯c×Ý-‚½Ñ¶–iç1…%rŒdж¸u4[[kkHŠÔÈ-n„þ`–‰@1ÀGZµoâ-*êøYCvbYWä`®W¨V#kè ¬ûˆu+ýSH¿m6Kq š)£i²+¨ø$Ç@sYš†ç´{;Ký>õ¡cØÔ Aœc/H=6ñ“@t4o¼Yjú†Ÿi§\ù-êÁ)ò[a\6à®FÒrBkcPÖ,t¶‰.åpòçbGÈÌSµA8×1k¦k[èšTšf"Ó®•ÚífMŽŠd.wdäqŠÔñ-ÅÃA-•Ü—‘«ˆ®mn38áƒNFJ6_?Ñ_ëÌн×tí<Â.g`ó.øãHܯ®ÕîE%ο§YÝGoq4‘¼›B³@û2Ý}»A>æ²E¶³aªÃª5Ô%šÆ;{…†DFI’HÜ@*Ký«7^ÒuÍJ{Äk[Ù’W‰­¼»ÅHbQ´²ºnŽCs†íO­„oÛë=S\[ÙÒ;;V`PS''¿4’ëëy§Ü>‰þ‘w Æau`€ÉRÆ2AéÅejþÔo§×cŠ ìÛÏžnÐÍ2‡2“޵¥áý?ȹ¸»›N¾µ¸dXËÝß} º‚NÞØŸn´ÙnÛRžæÿUˆ@`i™‚©»Fm§÷PãU´Ï\]_Ak}¦›&º„Ïl|á&õÈnÖƒŽ~µ¡«ØOF½± ÜBñ†=‰±´ûMVóXÓ®µ fš}»Çþµ_Í‘‚‚W ßž”-ÿ¯?øÿ¯À³¬ë—º?™pÚO™§ÂWÌŸí •Lã=ȧÜëÿÛRiÖ|(RWy®ŒXÜXFÏݪ:¢jwø3h÷7zm¶×!šY$ê]Ã8'oaŒgŸJĺuƨÒGoáõ7…TA©™cC 뜃¿å9àš@4®u{ñ­I§Xiöó˜¡IdynŒXÜX`Ÿ»Wï绂Ü5•º˜° ¢5Ô± &¹ßé—:Žø ÐVKݪ°ê¾lhc?ÞÎwŒð5­¯6ªšJÇ¥Äó\»*;ÆÈ¬‰üL»Èô÷4t¥$ñS6ž_û9¿´>ØlE¨”eýü}Üsœ~=¾»{uopé9Ôm§ÍlnUÈÜ~9Rè3íTMºþÌÓÞÇH–Ú]6èL¶ÓÍiÁRî F㸜“Ö£{m~+mJúÚÅã½Ô®c(匼ª…Ý’B—à÷ duÅ×åÿ?¯Ïþ»¢jÍ«[NÒ[iíçh&xpqчQÈì*u{û­bîÒÛO·kkY–)&{¢­Ê«aé»Ö›¦› k{] xLEšâ2ÁO-)*͸ç¨ÎNk;RÓ.oµ˜eµÐVÎâ;¥vÔüØÁhÔó÷NæÜ¼`ŒsGUýv†œ:½ýÖ±wim§Ûµµ¬Ë“=ÑVåU‰ °ôÝëMºÖï,uKk{5VÖæ")’à3’s‚S8õ8¬íKL¹¾Öa–×A[;ˆî•ÛSóc£SÏÝ;›rñ‚1Í;S°½Ôu»iàÑM¥Ì ´ŒéÌJyS¸î#к\RõÖ»{c¨AÖ“²Ê{‘mâáY˺JÐýsí[µË*ê’ø‘k©¢†R–e&‡Ë‰:/’ÇžÙÞºšÀ÷ (¢€ý©”÷íL¤0¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(½ÿüƒîë“*å¼7Ôÿ¼u7ÿò¹ÿ®Mü«–ðßSþñþtÝA÷A÷Ä2ëýY¯=ñü|Åÿ]ùס]«5ç¾"ÿ˜¿ë¢ÿ:äkÿ\SÿA=Aeÿ û_úâŸú©è«ÿ±ÿ×7þkV W_øýþ¹¿óZ°h'éU[­Z~•UºÒ;ù Oÿ\"ÿФ«µJßþBSÿ׿ô)*V¾µKøìZtR!uˆžJŽÿçÐú`6ô”6ó`”Š]Ïœ¬¹üȨMý–ãúÛþÿ/øÕÉYDBHÛA=¸'ù Ù›þ~eü—ü(;íö_óýkÿ—ühû}—üÿZÿßåÿÑû1ÿŸ™¿%ÿâhû1ÿŸ™¿%ÿâiöû/ùþµÿ¿Ëþ4s ×—¼©3™–Á‚…`Äœt鯴¾ÌçæoÉøšdˆöû_Íi°V FN¹ ’Š(¦ ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ ¹™ã1GS$¯±wt“øIömKþ~­¿ïÁÿâ¨Å_캗üý[߃ÿÅQö]Kþ~­¿ïÁÿâ¨Å_캗üý[߃ÿÅQö]Kþ~­¿ïÁÿâ¨Å^&¸Šãȹ1³2FŒ~¢¬PEPEPE·pÂû f|gdh]€úMOEG ñN¤ÆÙÇt ûŽ¢¤ Š( Š( ¿je=ûS) (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š¯ÿ ûŸúäßʹo õ?ïç]Mÿüƒîë“*åü7÷ûÇùÐsÜQÜS˯õf¼÷Ä_ñóýt_ç^…uþ¬×žø‹þ>bÿ®‹ü躲ÿ}¯ýqOýTõ—üƒíëŠè"§ ¯ü~Çÿ\ßù­X5]ãö?úæÿÍjÁ Ÿ¥UnµiúUVëHíÿä%?ýp‹ÿB’²çðµÆ¤Úƒj7ëpdVå# 'AÓ©oÿ!)ÿë„_ú•J_hÐÎðÉs(‘Ëeû4§ œcîÓRC‹‹Oúêô¨õ]^) ß óËq/• 0€YÛñ’à¦;~þÌúÊô[Õ zÖ]BÈA•Ø/–K·dЩU$Lh´ºÌj°µ–ÚâïÝ@¹M˜ÈlÏ=³Tdñm¨1,67×2Ë4ФQ*n&#†<°ôæ³SFÕí­´‰ãº‚âþÃÌVûøw`·9Åf…}k{auq%¶èfºšU˜ŒÊrä ãßú‹¡£cã ;é­TY_à Ԇ§š ¨dÊ› ðGLdu­›ÓþŒ?ë¬ú×1ƒv– Ýo©µãÇ »`q× ?ƺ·Í°ÿ®ÑèÅ¥Ð:‘NªÉ§m“ÎKqp[nÒHÇ^¼VWü&Ζím§j&kau¶ДŒœdå‡W÷Ô_ü][ÿ„CCÿŸ7ÿÀ™øª?áÐÿçÍÿð&_þ*¹ùq]×õò;9ðË/ÃüÊŸð›YÿÏ•ßýõÿGü&Öóåwÿ}EÿÅÕ¿øD4?ùóü —ÿŠ£þ þ|ßÿeÿâ¨åÅw_×È9ðË/ÃüÊŸð›YÿÏ•ßýõÿZz]ú6–·…Hóåv;™AûÄ ’qÀp{UøD4?ùóü —ÿЦB’‚Ä«,jXÄC°K9'ÁÍkIVO÷|Œ+¼;KئŸ™vâëÊÔmåH™üè\°R¼í+ƒœãÇó©?´[þ}&ü×üj½ŽëËÔºÚ 1#Æ s¸’½3×zûÖ®Ôÿžqÿß"¶9Š_Ú-ÿ>“~kþ4h·üúMù¯øÕÝ©ÿ<ãÿ¾ESþyÇÿ|Šb)h·üúMù¯øÕÈÜK¸:]©ÿ<ãÿ¾E/Ð`{P_µ2žý©”†QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW¿ÿ}Ïýroå\¿†þñÿxÿ:ê/ÿäsÿ\›ùW/ῼÞ?΀;˜>࢈>࢘†]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@Õ—üƒíëŠè"§¨,¿äkÿ\SÿA=5ãö?úæÿÍjÁªëÿ±ÿ×7þkV Dý*«u«OÒª·Z@Goÿ!)ÿë„_ú• º ŒÚÔz«Æ~ЋŒgå'³êCþ¦·ÿ”ÿõÂ/ý J»L ÷qHâ)"¼O¼)8ÝÁR3ô&¡3LOüx\þqÿñuzŠ¡æÍÿ>_œü]lßóáuùÇÿÅÕú(‡›7üø]~qÿñt=ËG·’ë»HW'ižàUú(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š()áóLl­²HÛz62Æ9ø&“7ÿóñmÿ€íÿÅÔÔP9¿ÿŸ‹oüoþ.ŒßÿÏÅ·þ·ÿSQ@æÿþ~-¿ð¿øº3ÿ?ßøßü]MEB‘Hgó§‘^@»bmg'ŒŸAßµMEQEQET76°ÝÅåN›—9ôÁúÔÔP*ª EPª€)h¢€ (¢€ (¢€ý©”÷íL¤0¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(½ÿüƒîë“*åü7÷ûÇù×Qÿ ûŸúäßʹ ýãþñþtÜÁ÷A÷Ä2ëýY¯=ñü|Åÿ]ùס]«5ç¾"ÿ˜¿ë¢ÿ:äkÿ\SÿA=Aeÿ û_úâŸú©è«ÿ±ÿ×7þkV W_øýOúæÿÍjÁ Ÿ¥U~µiúUgÒ+ù Oÿ\"ÿФª(ÕçѬ-¦·’Ö#5ÒBÒÝc[9c†1ëWàÿœÿõÂ/ý J¯®i’ê‹`±À·½ŽáÄ„ò«œÁçš}‡Ü£ˆ¾Í§­ÍÅÕ®ªe¸[xF”ƒ—#;NéÏâ*ÕLj£·1Gý-ËEç=´H¥âLã-óc®x“Š“VÒÞôéßgò£׉pàñ•çy¬ÍsÃ/}­.§ž›zL‚ü£ÊÁ[’Å×áþbþ¿ò.Kâ›2-ŽÝóÜ@.-£¬g£6â1ÏëÁâŸáK¹¯¼/ass#I4ˆK3õ<žµP躅…ìWºLZz3Z­¼Ö®Y#]¤Pª’9cÁ5¦“¨Xø1t¸&€_¬ É’XçœãÀÔ:v§u©hâ1o únŽe—>\r)Ãg8à‘ÏLSumM_U²y¦hì­•Üfxä2œr¸À »¿z¯g¢ßè×:‰ÓdŠh.vH‰y<ŒÂ^¹°Nžy*z_×À?¯ëúîKáÍbçU7©3Ú\%¼îÏ>T¹ džGCÉ»Xz.•yk©_j‚Ö).‚/‘i’ƒn~bHcŸAÐVå0 (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ý©”÷íL¤0¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(½ÿüƒîë“*åü7÷ûÇù×Qÿ ûŸúäßʹ ýãþñþtÜÁ÷A÷Ä2ëýY¯=ñü|Åÿ]ùס]«5ç¾"ÿ˜¿ë¢ÿ:äkÿ\SÿA=Aeÿ û_úâŸú©è6o.t—k2…*vŒ‘œsœoaô›þü¿øS¨ šö:Oÿ€òñ5]CýÛü“ÿ‰«”P;Ew¹šá‘‘YV4 0HRÇ8í÷¿J¹Tµ¹m…¼P*4÷2ˆ£Þp à’N=¨"‹[ Å©in¡™ Kw`I 3¿¨ ƒî*ìì•Í;«¶‘©Eg}“Äóý§à+ÿñt}“Äóý§à+ÿñts¾Ì~Í2þ¾FöOÏöÿ€¯ÿÅÑöOÏöÿ€¯ÿÅÑÎû0ökù—õò4h¬ï²xƒþ´ïüþ.²xƒþ´ïüþ.ŽwÙ‡³_Ì¿¯‘£Eg}“Äóý§à+ÿñt}“Äóý§à+ÿñts¾Ì=šþeý|+;ìž ÿŸí;ÿ_ÿ‹£ìž ÿŸí;ÿ_ÿ‹£öaì×ó/ëähÑYßdñüÿißø ÿü]dñüÿißø ÿü]ï³f¿™_#FŠÎû'ˆ?çûNÿÀWÿâèû'ˆ?çûNÿÀWÿâèç}˜{5üËúù4VwÙÉâùþÓ¿ðÿøº9ßfÍ2þ¾FöOÏöÿ€¯ÿÅÑöOÏöÿ€¯ÿÅÑÎû0ökù—õò4h¬ï²xƒþ´ïüþ.²xƒþ´ïüþ.ŽwÙ‡³_Ì¿¯‘£Eg}“Äóý§à+ÿñt}“Äóý§à+ÿñts¾Ì=šþeý|+;ìž ÿŸí;ÿ_ÿ‹£ìž ÿŸí;ÿ_ÿ‹£öaì×ó/ëähÑYßdñüÿißø ÿü]dñüÿißø ÿü]ï³f¿™_#FŠÎû'ˆ?çûNÿÀWÿâèû'ˆ?çûNÿÀWÿâèç}˜{5üËúù4VwÙÉâùþÓ¿ðÿøº9ßfÍ2þ¾FöOÏöÿ€¯ÿÅÑöOÏöÿ€¯ÿÅÑÎû0ökù—õò4h¬ï²xƒþ´ïüþ.²xƒþ´ïüþ.ŽwÙ‡³_Ì¿¯‘£Eg}“Äóý§à+ÿñtŸdñüÿißø ÿü]ï³d¿™_#AûS*µ•Ô—1Ê“ª¬öò˜eØ~R@#Ø‚ Y¦šjè‰EÅÙ…QLAEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP{ÿùÜÿ×&þUËøoï÷ó®¢ÿþA÷?õÉ¿•rþûÍþñþtÜÁ÷A÷Ä2ëýY¯=ñü|Åÿ]ùס]«5ç¾"ÿ˜¿ë¢ÿ:äkÿ\SÿA=Aeÿ û_úâŸú©è¢Š(¢Š(/Uÿ†‹ÿ_¿ûJJ—Ã?ò ŸþÂßúU-EªÿÈCEÿ¯ßý¥%KáŸùOÿa ïý*–¢?gðGúêlQEfAEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPÿš¿ýý_ªwü~jÿõüôTu~³§ð›VøþïÈ(¢Š³ ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(½ÿüƒîë“*åü9÷›ýãü먿ÿ}Ïýroå\¿‡>û¼w0}ÁE}ÁE1 ºÿVkÏ|Eÿ1×EþuèW_êÍyãæ/úè¿Î€;›6ÂÔÓÿÐEM¼{ÕkOøñ¶ÿ®)ÿ ŠšÇïôoôÊ(ûǽǽ2Š‚ú×ík$†) “ÍŠM»‚¶äw$~5Íoþ‚¶¿øøå^¢¥Á7rãRQVýüÊ;5¿ú Úÿà ÿã”lÖÿè+kÿ€'ÿŽUê){5ç÷²½¬»/¹‘Gf·ÿA[_ü?üršßýmðÿñʽEÍyýì=¬»/¹‘Gf·ÿA[_ü?üršßýmðÿñʽEÍyýì=¬»/¹‘Gf·ÿA[_ü?üršßýmðÿñʽEÍyýì=¬»/¹‘Gf·ÿA[_ü?üršßýmðÿñʽEÍyýì=¬»/¹‘Gf·ÿA[_ü?üršßýmðÿñʽEÍyýì=¬»/¹‘Gf·ÿA[_ü?üršßýmðÿñʽEÍyýì=¬»/¹‘Gf·ÿA[_ü?üršßýmðÿñʽEÍyýì=¬»/¹‘Gf·ÿA[_ü?üršßýmðÿñʽEÍyýì=¬»/¹‘Gf·ÿA[_ü?üršßýmðÿñʽEÍyýì=¬»/¹‘Gf·ÿA[_ü?üršßýmðÿñʽEÍyýì=¬»/¹‘Gf·ÿA[_ü?üršßýmðÿñʽEÍyýì=¬»/¹‘Gf·ÿA[_ü?üršßýmðÿñʽEÍyýì=¬»/¹‘Gf·ÿA[_ü?üršßýmðÿñʽEÍyýì=¬»/¹‘Gf·ÿA[_ü?üršßýmðÿñʽEÍyýì=¬»/¹‘Gf·ÿA[_ü?üršßýmðÿñʽEÍyýì=¬»/¹‘Gf·ÿA[_ü?üršßýmðÿñʽEÍyýì=¬»/¹‘Gf·ÿA[_ü?üršßýmðÿñʽEÍyýì=¬»/¹‘Gf·ÿA[_ü?üršßýmðÿñʽEÍyýì=¬»/¹‘Gf·ÿA[_ü?üršßýmðÿñʽEÍyýì=¬»/¹‘^Î×ì‘>é ³K!–Y6íÜÇØ`j±EI$¬Œå''vQE1Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ïÿäsÿ\›ùW/áϾßïç]Eÿüƒîë“*åü9÷Ûýãü蹃î (ƒî )ˆe×ú³^{â/øù‹þº/ó¯BºÿVkÏ|Eÿ1×EþtÓ\KªÇa`t»h§Ì+æy‡®?ˆ{ÕOµx«þ–¿÷ÐÿâëI`óTH°œ-Ã(ü‡¿eoùæÿøõ„©9;ó5ýz0®¡^DýoþfgÚ¼Uÿ@Ë_ûèñt}«Å_ô µÿ¾‡ÿZeoùæÿøô}•¿ç›ÿàSÒöùßáþE}iϸýÏüÌϵx«þ–¿÷ÐÿâèûWŠ¿èkÿ}þ.´þÊßóÍÿð)èû+Ï7ÿÀ§£Ø?ç‡ùÖ—üûÜÿÌÌûWŠ¿èkÿ}þ.µx«þ–¿÷ÐÿâëOì­ÿ<ßÿž²·üóü z=ƒþwø}iϸýÏüÌϵx«þ–¿÷ÐÿâèûWŠ¿èkÿ}þ.´þÊßóÍÿð)èû+Ï7ÿÀ§£Ø?ç‡ùÖ—üûÜÿÌÌûWŠ¿èkÿ}þ.µx«þ–¿÷ÐÿâëOì­ÿ<ßÿžœ¶eŽ60úÝIG°Îÿò­/ù÷¹ÿ™•ö¯Ð2×þúü]jñWý-ï¡ÿÅÖ¼v°É>f€8óßüißb‡ûÓß÷ÿ=ƒþwø}iϸýÏüÌoµx«þ–¿÷ÐÿâèûWŠ¿èkÿ}þ.¶~Å÷¦ÿ¿ïþ4}ŠïMÿßühöùßáþAõ¥ÿ>ã÷?ó1¾Õâ¯úZÿßCÿ‹£í^*ÿ e¯ýô?øºÙû?Þ›þÿ¿øÑö(½7ýÿñ£Ø?ç‡ùÖ—üûÜÿÌÆûWŠ¿èkÿ}þ.µx«þ–¿÷ÐÿâëgìPÿzoûþÿãGØ¡þôß÷ýÿÆ`ÿþäZ_óî?sÿ3í^*ÿ e¯ýô?øº>Õâ¯úZÿßCÿ‹­Ÿ±Cýé¿ïûÿb‡ûÓß÷ÿ=ƒþwø}iϸýÏüÌoµx«þ–¿÷ÐÿâèûWŠ¿èkÿ}þ.¶~Å÷¦ÿ¿ïþ4}ŠïMÿßühöùßáþAõ¥ÿ>ã÷?ó1¾Õâ¯úZÿßCÿ‹£í^*ÿ e¯ýô?øºÙû?Þ›þÿ¿øÑö(½7ýÿñ£Ø?ç‡ùÖ—üûÜÿÌÆûWŠ¿èkÿ}þ.µx«þ–¿÷ÐÿâëgìPÿzoûþÿãGØ¡þôß÷ýÿÆ`ÿþäZ_óî?sÿ3í^*ÿ e¯ýô?øº>Õâ¯úZÿßCÿ‹­Ÿ±Cýé¿ïûÿb‡ûÓß÷ÿ=ƒþwø}iϸýÏüÌoµx«þ–¿÷ÐÿâèûWŠ¿èkÿ}þ.¶~Å÷¦ÿ¿ïþ4}ŠïMÿßühöùßáþAõ¥ÿ>ã÷?ó1¾Õâ¯úZÿßCÿ‹£í^*ÿ e¯ýô?øºÙû?Þ›þÿ¿øÑö(½7ýÿñ£Ø?ç‡ùÖ—üûÜÿÌÆûWŠ¿èkÿ}þ.µx«þ–¿÷ÐÿâëgìPÿzoûþÿãGØ¡þôß÷ýÿÆ`ÿþäZ_óî?sÿ3í^*ÿ e¯ýô?øº>Õâ¯úZÿßCÿ‹­Ÿ±Cýé¿ïûÿb‡ûÓß÷ÿ=ƒþwø}iϸýÏüÌoµx«þ–¿÷ÐÿâèûWŠ¿èkÿ}þ.¶~Å÷¦ÿ¿ïþ4}ŠïMÿßühöùßáþAõ¥ÿ>ã÷?ó1¾Õâ¯úZÿßCÿ‹­*MZ_7ûNÖ(q/Ë ç®sój±ö(½7ýÿñ£ìPÿzoûþÿãUN.üÍÿ^„κœyyô¿ù–vŸJ6ŸJ­ö(½7ýÿñ£ìPÿzoûþÿãZœå§Ò§Ò«}ŠïMÿßühû?Þ›þÿ¿øÐ§Ò§Ò«}ŠïMÿßühû?Þ›þÿ¿øÐ§Ò§Ò«}ŠïMÿßühû?Þ›þÿ¿øÐ§Ò§Ò«}ŠïMÿßühû?Þ›þÿ¿øÐ§Ò§Ò«}ŠïMÿßühû?Þ›þÿ¿øÐ§Ò§Ò«}ŠïMÿßühû?Þ›þÿ¿øÐ§Ò§Ò«}ŠïMÿßühû?Þ›þÿ¿øÐ§Ò§Ò«}ŠïMÿßühû?Þ›þÿ¿øÐ§Ò§Ò«}ŠïMÿßühû?Þ›þÿ¿øÐ§Ò§Ò«}ŠïMÿßühû?Þ›þÿ¿øÐ§Ò§Ò«}ŠïMÿßühû?Þ›þÿ¿øÐ§Ò§Ò«}ŠïMÿßühû?Þ›þÿ¿øÐ§Ò§Ò«}ŠïMÿßühû?Þ›þÿ¿øÐ§Ò§Ò«}ŠïMÿßühû?Þ›þÿ¿øÐ§Ò§Ò«}ŠïMÿßühû?Þ›þÿ¿øÐ§Ò§Ò«}ŠïMÿßühû?Þ›þÿ¿øÐ§Ò§Ò«}ŠïMÿßühû?Þ›þÿ¿øÐ§Ò§Ò«}ŠïMÿßühû?Þ›þÿ¿øÐ§Ò§Ò«}ŠïMÿßühû?Þ›þÿ¿øÐ§Ò§Ò«}ŠïMÿßühû?Þ›þÿ¿øÐê>ãþ¹°ý+–ðçßo÷ó®¥lá ï8iY‡äMrÞûíþñþtÜÁ÷A÷Ä2ëýY¯=ñü|Åÿ]ùס]«5ç¾"ÿ˜¿ë¢ÿ:í­ˆ[HÉ €’jšëú[Øý±.ƒÁæƒ"3aØ2 ƒS¶½¼Ò­à´H¤FeóÒIL{Óû¹õ8Ï3XÖÃèÚ>¡5ÌDͨIKç|»ÉèI 1×Óµ%ý~×âu6Wöº¿Ÿi(’<•'GPAäcPméÿoFr³–ØFÁKz#i>Ùª:=æ™if ê0ÜËwrD’Åó+LÃ8ÎôªZÅõ½Î±b¶×ÿjš¤O 8.p26‚O'Sêº6m {M7âËí?¿.cF [û¡±·>Ù«·öºu¿Ÿw2ÅB‚z“èäŸa\üúµ†©®­¬÷¶ðÁep6ÆÒóL:qÙA?‰öëg]ai¬éZ±²€È²8RDLÀmbnÏlÒè‡Ô¼ºþšÖSÝùî°Á0¼.¥sÓå#'ò§Ùk6„í¼Íç*î1ÉFØõÃH®s[Ö“UÒ5¸í¥ŠKH#„¤Ñó’[æç§&›:Oâ«y-µ&Õ—ìî’JUqn8#_˜ñŒgŠkp{Í«'ö™°ŠÚâgM¾l‘ªì‹wMÄ‘õàЮvÊÆÖãÅZÅÄÖñI4-—#(,Ÿ'cÚ²!²ò¼×v0…¼œ>TR]ÓÌù³ŽOïK Í*ýñõ®@SFÔåÒoíe–!$6ºª ß3cy9+œàƒÅløN tº¹–ÎþÊhP4q2"7?6 Hëô§a\èmÿãÚ/÷òªú~«cª Í•ÂÌ ”Ã&\uÿ>•G[¾–ÃÃe­¿ãîeH-Ǭ…_Ë9ü+MŠ÷@ÖìãšÆÞÖÞîÜZ.äÈT¡c±pHÜ;æ’þ¿¯ëq¿ëúþ¶:—Õ,£Õ#Óá~Û" ;GsØ~5r¸[KmVËÅ?Û,íMÄÆáæ.‹ “ƒ};ŠÚÖŸS[à,ÛXìñç«&yÿž¿6J: 6/ï­´Ë)/.äòàˆí´¶9Ç@ ïPØjöš“º[}£(2|Ûi"u¬?ùÍðþçÏ7b‰¸Î¨$ÎñÔ'ËŸ¥'ˆìîm|)|·:•ÅèÄš‘®Ñ½Ab޹ïNÁÐêè®Äöú|šU´qÙÚhù”Ê&ž!nõV_ö°IÆj·Ùí-íteÔïc½ÐwNLЬ HòÕ²OÊ>`2qÒ¦›¨¦¤—,‘²yÉÎJœf”j¶'V:X¸_¶ˆ¼ãvgÏOíbx9í-ôKù`e[%½ã`~_,>˜¬uT²O¶Ÿçíí7Ú™ä·fÍ<¼Qš}¾Bïó;¿iV7Ÿd¹»òåU¿vÅTž˜ «œŽ¤V›º¢3»U$ô¹ w\Ó5 ã¢Üj¶¶aR[©%+HQ3ëÁ'ÐàuâÿЧ–M2 6È,“ê.!Uß´ñ¹Îpp6‚3ƒÖ—AésRËV±ÔtѨÚ\ m0ÇÌ GN¼žÔÍ?[ÓõI¤†Òvicš7‰ãl‡ #ÜV“s6®_[jÐY[ÝEö¸’)Lˆ¥Y9Ú½¶œcÖ›£]Euã絿þÔ†KRãhž*œäœc?/&ŸQt:ú(¢ÂŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¸ÿ}öÿxÿ:ì+ðçßo÷󠿏(¢¸(¦!—?êÍyÿˆ”ý¢3ÿMó¯Cœe qú환 s@ª·ÙbùOݪ]­ýÓùWŸÝø¶þÙˆE›þUãÝDùÙÿßGü) ôý­ýÓùQµ¿º*óøOµ/úÙÿßGü(ÿ„ûRÿ  Ÿýô€=?ktþTmoîŸÊ¼ÃþíKþ€6÷Ñÿ ?á>Ô¿ègÿ}ð OÚßÝ?•[û§ò¯0ÿ„ûRÿ  ŸýôÂøOµ/úÙÿßGü(Óö·÷OåFÖþéü«Ì?á>Ô¿ègÿ}ð£þíKþ€6÷Ñÿ ôý­ýÓùRª¶áÁëé^_ÿ ö¥ÿ@?ûèÿ…ðŸj_ô³ÿ¾øP¥[ÿÇ´_îåRWšˆº¸ ÜÐ ü)áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿Â•~"ë qýn?í£…zMr>\;¼U³ñŽ«t@6éŸv5µ¡ÚÔ9 GOÜS¢QE0†EPº³ƒ‘Z4„@µÆƒ„‚ªŸ FOÜ•v;íG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åJ<5?p~UØùkéG–¾”ÍÛhiQ[6Ö¢ 0*Ø@;S€€0(¥¢€?ÿÙ endstream endobj 75 0 obj << /Type /XObject /Subtype /Image /Width 712 /Height 557 /BitsPerComponent 8 /Length 34138 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream ÿØÿàJFIFÿá°ExifII*JR(i‡Züÿÿ)( üÿÿ)( 0210‘ 0100 ÿÿ È -ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀ-È"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?÷úBÀPdzo¯RÞ6v`ª£$“ÐPÖW½DowãZ·Å;É.tËxE¸8Y&‹ûàÖ²ÏÄq»Yÿß—ÿâé\xûjxQöÔþð¯ÿ…®zYÿߦÿâèÿ…®zYÿß–ÿâè¸õöÔþð£í©ýá^ ÿ \ÿ§?ûòßü]ð±µÏútÿ¿-ÿÅÑp=ëí©ýáGÛSû¼þ6·ÿNŸ÷å¿øº?ábëôéÿ~[ÿ‹¢à{×ÛSû¶§÷…x7ü,]oþ?ïËñtÂÅÖÿéÓþü·ÿEÀ÷Ÿ¶§÷…mOï ðoøXºßý:ß–ÿâèÿ…‹­ÿÓ§ýùoþ.‹ï?mOï >ÚŸÞàßð±u¿útÿ¿-ÿÅÑÿ [ÿ§Oûòßü]Þ~ÚŸÞ}µ?¼+Á¿ábëôéÿ~[ÿ‹£þ.·ÿNŸ÷å¿øº.¼ýµ?¼(ûjxWƒÂÅÖ¿éÓþü·ÿGü,]kþ?ïËñt\yûjxQöÔþð¯ÿ…‹­Ó§ýùoþ.øXº×ý:ß–ÿâè¸óöÔþð£í©ýá^ ÿ Zÿ§Oûòßü]ð±u¯[Oûòßü]Þ~ÚŸÞ}µ?¼+Á¿ábë^¶¿÷å¿øº?ábë^¶¿÷á¿øº.¼ýµ?¼(ûjxWƒÿÂÅÖ½mïÃñtÂÅÖ½mïÃñt\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿâèÿ…‹¬úÚÿ߆ÿâè¸ñöÔþð£í©ýá^ÿ Yõµÿ¿ ÿÅÑÿ Yõµÿ¿ ÿÅÑp=ãí©ýáGÛSû¼þ.³ëkÿ~ÿŽQÿ Yõµÿ¿ ÿÇ(¸ñöÔþð£í©ýá^ÿ Yõµÿ¿ ÿÇ(ÿ…‹¬úÚÿ߆ÿã”\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿã”ÂÅÖ}mïÃñÊ.¼}µ?¼(ûjxWƒÿÂÅÖ}mïÃñÊ?ábë¶¿÷á¿øåÞ>ÚŸÞ}µ?¼+ÁÿábëÞµÿ¿ ÿÇ)ábëÞµÿ¿ ÿÇ(¸ïöÔþð£í©ýá^ÿ Xþõ·ýøoþ9Gü,]cûÖß÷á¿øåÝþÚŸÞ}µ?¼+Â?ábëÞ¶ÿ¿ ÿÇ(ÿ…‹¬zÛþü7ÿ¢à{¿ÛSû¶§÷…xGü,]cûÖß÷á¿øåð±uï[߆ÿã”\wûjxQöÔþð¯ÿ…‹¬z×þü7ÿ£þ.±ëkÿ~ÿŽQp=ãí©ýáGÛSû¼þ.³ëkÿ~ÿŽQÿ Yõµÿ¿ ÿÇ(¸ñöÔþð£í©ýá^ÿ Yõµÿ¿ ÿÇ(ÿ…‹¬úÚÿ߆ÿã”\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿã”ÂÅÖ}mïÃñÊ.¼}µ?¼(ûjxWƒÿÂÅÖ}mïÃñÊ?ábë>¶¿÷á¿øº.¼}µ?¼(ûjxWƒÿÂÅÖ}mïÃñtÂÅÖ}mïÃñt\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿâèÿ…‹­zÚÿ߆ÿâè¸ñöÔþð£í©ýá^ÿ Zõµÿ¿ ÿÅÒÂÅÖ½mïÃñt\yûjxQöÔþð¯ÿ…‹­zÚÿß–ÿâèÿ…‹­zÚß–ÿâè¸óöÔþð£í©ýá^ ÿ Zÿ§Oûòßü]ð±u¯útÿ¿-ÿÅÑp=çí©ýáGÛSû¼þ.µÿNŸ÷å¿øº?ábë_ôéÿ~[ÿ‹¢à{ÏÛSû¶§÷…x7ü,]kþ?ïËñtÂÅÖÿéÓþü·ÿEÀ÷Ÿ¶§÷…mOï ðoøXºßý:ß–ÿâèÿ…‹­ÿÓ§ýùoþ.‹ï?mOï >ÚŸÞàßð±u¿útÿ¿-ÿÅÑÿ [ÿ§Oûòßü]Þ~ÚŸÞ}µ?¼+Á¿ábëôéÿ~[ÿ‹£þ.·ÿNŸ÷å¿øº.¼ýµ?¼(ûjxWƒÂÅÖÿéÓþü·ÿIÿ [ÿ§Oûòßü]Þ¾ÚŸÞ}µ?¼+Áábëôéÿ~[ÿ‹£þ6¹ÿNŸ÷å¿øº.½}µ?¼(ûjxW‚ÿÂÆ×?éÓþü·ÿGü,msÒÏþü·ÿEÀ÷¯¶§÷…(¼CÜW‚ÂÆ×=,ÿïËñtáñ#]^Ö÷åÿøº.¿,êÝêPÀ׌xâ|ò_GoªCÇ! &ˆ }Á'|ñ^±it%PA¦…€äQ@Ìp¦¸/^еÛÈ?ñÓ]ÝÉÄf¼ËÇŽ²¯Gý1ähÇ7Qº¡ÝFê‘—¬-$Ôoc´…âY$$)•Â/Lã'¿aïZÚ§„õ ?RžÎÙ†&Š:+,kŒ³)n:ð2I¬ {©­.c¸·‘£š6ÜŽ½T×Cáÿ*j³¾µw3Cqbö^qÌJqƒÉ:/3:=S•ìR;Ff¿Rö :þ𧯎)ú†«ésÁ 턱IpvÄWÞ}RFyé],:þ‡c­ø`E¨´öšd2Ç5ÇÙÝ9e |¸Ï_­f.µf|?¦Ú-ûAuª×Ä,ÞTg8p1ƒÉÎÜÑ×úïoËPþ¿…φõ«;»[K‹Iî‰XSÍC¼Ž£†ÀëßùCï>€©<ûu®ši6~+ÒŸOW}ÅdƃºLî`‘ªú§ˆì­î4Óc}myioz.šÞ 8Ûm#ÜðÄ‚i­lÊòøJïN𾣩j–²ÛÏEöu2)3a²>½ñX1X]Ïa5ôP¶…Ö90ùYº g<ý+§Õõm û]Z¤·7:­Äsˆ^ÙÐņÉÿ­Yþ Öì4»»¨uR~ÃpŠÇ [÷ˆÁ“€½%»¿õ¢þ½Aí¡B] U¯K'V²(.õ% ýÑÁù³ŸáÍ;Qðö³¤Ú%ÕþŸ,99*@>ø'Ž+£¾ñŤÖzeÌqî¾{¨çÔ)ð£$`çƒÇLT¶·¢Ç¦k‹a=ìúÄÉ!ŠH¸ »’~ñíÇ £úü¿àB-#ÁºÖtøµ›`²¹v]ÂTÜHF`8$»éX“éðÇÆÕÄW2˜í¾aºR8\î?\bº'ñ”ß`ÖEÏú 7”ü~è¯ÝÆî¾Õ_Y×4ýfóKÕ£¿{+ødXæAºÆªr² Æ1þÎúïªFfÏárÚòÚÒm=–âëp†?5 | žÆ®*-GAÕô™aŽþÆHZfÛYX1ôÈ$gñ®ÏO¿Ñoüi¢Kc$W‰yMÕÌÍIû¶Á*ßÅïY7:¦a§Úéê]R©ýªäù DèP×ðëÍ upïýw0õ/ë:D÷öB²¶Ä!•ÁoO”ž}©×^Öì¾Íö6T7M²Ü¥ºãh$Ä éõh–ÖVÉc<-Q.Ö {n1Øä[Þ©¦¯ é¾0ÄVúœ·¾tîÒÛ›VW…]HÎãÃc `v¡9ýSEÕ4SÔlÞßÌÎÂYX{©#>ÕŸººOjöw6ÙéúµÍ¿žf1A§o,ã'ø‰ÉÎcìù:L–Ùšd›Ã´ÉmºuÏ£çŒvâ’/h~¹×ìõm3Ú)óKüD€0¨¬|9¬êMp¶v-1¶Ç( Úèå† ÔþÔ4ÔÓ5/RºkHïãŒ$â#(RŒN ŽyÍiøkRðæ™Ùn ŽêÝâêk”Ëè‚c=ý©ÛRz´ß Üê¾¹¸´¶šMNß Â]P*…²äúÕ-'×zž°úl²Ee$LSpÀ$à¹Ë@?>kmõT²Õm.µY,–mXÞÄâÙܲ`c¯JÌ»ñ÷Ä(u“º+5¹‰·2’Ûq'·J#«Wþ´C{;Z³þÜØê7Ve÷˜&x·ã¶’3ŽÝ*¾ê³ª^E?ˆ// Û,/tò¦õ;]K’28>”jš·ö£ÄßÙÚu—–Å¿”?Þ俥^Êã{²ðð¾ºÚ`Ô—MÙ˜üÑ t9Lg;s»ö§K'HšÆ+™®ïÞTJ;ðó‘Àç5¹eâm&WE™îÈŠÛHû,çÊs‰1÷qŽyî8©<#©ZO7„´øåÝuk-Ñ™6‘´2±ãð5VÕÿ]Ééëc™½Ð5=*æÞ-RÜÙ,ìM#AêIRzuÇZ³©höš2ê¶´z…·Ÿöy¢*øÏÌ=êö£{¡Ã¤[è1j’ÝDú—Ú..>ÎÈ N„rIêxÏzgН4k«(¢Òu”kKl }=,äN¿yË·ºòi_B­gc—ÝFê‡u©ˆ›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Uí/O„®Ò»$ðvõcè+/ujiWkr[±ÆöÜ9ÆxóøP¼º™$ebBøáÖçÜþµsðØË.¡ö"B¸bº€óë[>d|á¤wi˜ÈœVd7Àj¯txI̞ÌÒaÑ#‰•ãº}™ 6Ù8Ç^ƒmdjsYÞ,L«'1çœ`ûÖ‰’Sk4 BD›ðÆCŸ˜“Óo¿­V¼½ß}nè7}·ýNAÇéC½´muszËÃú5²$WÌgºe,G˜T uÀàzšËÖt«kh÷N•žÕÈXçnz{Š¿?“ªB›¦Í¿ÞÉlc©éŒœŒsÐñjëWØÓͫȯ3íÜTc€AÎ;tåQÄT•D¯«ÝGŠÁÐ >T’Z>æêúÃwfkX‰9%E|纽ïÂ,M¤?îŠõÑóGÊŠ)°ýÁE0uþ¬×˜xóþAwŸõÉÿ‘¯OºÿVkÌxD_ïà”êÖ{DWQùNQ\Àü¬)à÷Töú{\i——Ë*„µ1‚¸ÉmäŽá@wT]Ok2Ím4Ê¿vHœ«ÜȨ)8 úÒÐË’I$’y$÷¤ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(C+–„“KçAQQ@ ˜  zqJ³”èò¨¨  w"P”'®Ö#?‘¨ÚRÄ’zÔtR²½ÇÌÚµôº½ûÂñéû¢¾¯ 0ÿ GþLÃÿÅÒŠ·áø[ü†õüÿŸõr꿈`ñ=ßÛ-5;™9 "lË{ÇÏ9ã·ÐõËø‚ÞK]vînÍÜi›ï1 ›“ÈÎ=Emÿ±ñ‡ý?òfþ.øV>0ÿ GþLÃÿÅЕ­ä6ïs’®¢k»Ko hbçL‚ð³\m2K"mùÇMŒ?Z—þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.˜°Ñ¶¥©IiÿÚÒÈÁœÊ“,~PÜ#.¬»žøïÖ²¯ä{Û?°Ékp«lòÁ#!ÛÎpÉÈ'½Cÿ ÇÆôÿɘøº_øV>0ÿ GþLÃÿÅÐÕÝÁhqu>²ºš·ö"ÚŸ³y¸Ø%Ú»<¿Cž¸íœ×œWq¨øƺ¦¡-äú2,’X%Ä@tÇj©ÿ ÇÆôÿɘøºIK•Öÿ±ñ‡ý?òfþ.øV>0ÿ GþLÃÿÅÓ’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*÷ÿǤ?îŠòßøV>0ÿ GþLÃÿÅשxCþ=!ÿtSB=¸(¢¸(¦.¿ÕšóÈ.óþ¹?ò5é÷_êÍy‡ŽÆtÛ±ë#@•bØÓ-qÿ<“ù ŸÌ>Õ‡©Hñø.åãfG]=вœ|¾ Õ$Ô/ôß [My¨X¬òˆÖû,œ®q°9go¦>”€éžácÛ½•w£'>”ÿ0ûWu«ÞkZF—2, y²°hÝc,¡°ÛN ‡šßÓïõ+¹u-.åí¡Ô-B¸†2c*à•m„ç#ŒÓ¶Ÿ×—ù‡_ë»G@“Ú©GÿWc·š?ô¬¿ IrÚ}â]]Ku$WÓÇæÊrHVÀöAÅjEÿ7õÔè CKERQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEɦŽÞ '•¶Ç—vÆpÉ5ZÛSµºŸÈŒÌ$Ú\,nÿë ÿЭUSÊO3ư²ÈÁ†é#åû§Ò€%¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ¤2J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠÏÕô‹[Û+Æ[y/$…‚HÑ®íÛp¿1ü+FÑ.ŸS/ªéÈmÄNM²A¸•ÇžÀó]V.ÿç•¿ýþoþ"Œ]ÿÏ+ûüßüEa<<'57º%Å0EoÅIkÑBø ã|#Ŭ_îŠëä–x|ÑGå¼É!%G® Šä|'Äýn†wÐ}ÁE}ÁE0uþ¬×x¤n8õ8¯EºÿVkÏ|H3qõqü躲ÿ}¯ýqOýTõ—üƒíëŠè"§ ¯ü~Çÿ\ßù­X5]ãö?úæÿÍjÁ Ÿ¥UnµiúUVëHíÿä%?ýp‹ÿB’®Õ+ù Oÿ\"ÿФ©ZúÕ/ã±iÐ]H…Ö"y*;ÿŸCèi€ÛÒPÛÍ‚R)w>p ²çó"¡7öYÿëoûü¿ãW%f #möàŸä)ÿfoùù—ò_ð  ï·ÙÏõ¯ýþ_ñ£íö_óýkÿ—ükGìÇþ~fü—ÿ‰£ìÇþ~fü—ÿ‰¤wÛì¿çú×þÿ/øÒ=Ì7^\ò¤ÎdF>[ ƒqÓ¦?Òû1ÿŸ™¿%ÿâi’#Ûí5¤BÁX08`äP2J(¢˜‚Š( Š( Š( Š( Š( Š( Š‚ægŒÅAL’¾ÅÝÐpNOà 'Ùµ/ùú¶ÿ¿ÿŠ  U²ê_óõmÿ~ÿGÙu/ùú¶ÿ¿ÿŠ  U²ê_óõmÿ~ÿGÙu/ùú¶ÿ¿ÿŠ  Uxšâ+"äÆÌÈ]0@ Aúб@Q@Q@Q@Q@Q@×1@B»Ç¢*–côš!¹ŠrB1Ü:«)VPy  h¢Š(¢Škô¦Sߥ2Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š(  ÷ÿò¹ÿ®Mü«“博²ÿþA÷?õÉ¿•ržáw}ÁE}ÁE1 ºÿVkÏ|Eÿ1×EþuèW_êÍyãæ/úè¿Î€;«/ùÚÿ×ÿÐEOPYÈ>×þ¸§þ‚*zjÿÇìõÍÿšÕƒU×þ?cÿ®oüÖ¬‰úUVëVŸ¥Un´€ŽßþBSÿ׿ô)+.Û\jM¨6£~·A ehþR:òt1Z–ÿòŸþ¸Eÿ¡IT¥ñf ï —2‰ü¶_³JpÙÆ>í05$8¸´ÿ®§ÿ@jUÕáÒ’ ðÏ<·ùPðO êiÓ·ïìϬ§ÿE½P×­eÔ,„ÙÙ]‚ùd»v@= •RA¤Æ‹K¬Çö« Ym®!žñÑ$ ”ÙŒ†Á<óÛ5FOÚƒÃc}s,³M E¦âb8cËNk54m^ÚÛHž;¨./ì<Åapï±Ñÿ‡v q€#œQ¦hWÖ·¶W[n†k©¥Xو̧ .@Î=ñO¨º6>0³¾šÕE•ü0ÝHaŠy¢ †Aœ¡ù²tÆGZÙ½?èÃþºÇÿ¡­sh7iaa’ Öú›^1 pP»¶pÃük¡»|ÛúíþŒZ]©ÔᬚvÙ<ä·°6í$ŒuëÅeÂalénÖÚv¡rf¶[a HÉÆNXsÇAš—RÓu!­ OL6ŽÏlm¥ŠåÙ7n ƒÏ'ŒU}÷Z]Å«Í,.±i«hÛ ÉpÄç‘ÓŸþµ?¯?ø×úòÿ‚,~&’ã]‚;Y¯,g²ŽáP˹ÈËnaÆA“Uî¿wä¿à’Åâ µéEk}kk4S9ûBY€ ´Œ<kZë\ŽßTtVwwS„Y$òq± Y‡¡éž•Ÿg¥kM«é·‹XyVIx÷K¸’¥p½=M"ÑoõK˜ÞÎ+(d@wÆWIáç'WæÄMÛK ^ÎåùµØ“Tm> ;»¹cÛç4¥!ÝÓq$vç'M®Çm©Ågqey Í'•Ë*ùNøÈ†$g¨YtíVÃY»¹ÓÍœÖ×®’J·ÈѰP¤®Ö@ð÷öÌ7/Ÿ'—ö£zÎÿhdÉ!1·d½Ž:R[«ìËÚv¹öK=BkÆžáÿµ%·‚$¹ùQGÓ>Õ¡mân€ c|&"ÚhL@´ Fw> qŽA=kóÂ7WV÷1±²” E¯­Ò`Y$ äcާf´ôÝ6÷M¶mtý"Éžà„·Ý´ÇŽ í\¿Ôb…çåúÁ¾ž¯üvŠ(  ·_ñû§ÿ×sÿ 5eø£Ä×:HòtØ"žxŒorÒçd1»…:±ÉÀö$ûê]ÇîŸÿ]Ïþ€Õâ/AªÛÞ=¤×Þ]K’fòU‰Š•ä¨8ÎÕÀãÒ…¸tâMwRÑ.á0ͦH’º$V.í3ä€ÛlqŸî‘êE/‰uied°ŸLqq2Akm-¬#»v,$’N8“_Ñu^ÒM&(ôÑ`꨷SÉ$“Æ2ÀÁn8;«FãIžãÄzmëÈicU‰Þem 61º¿zÑïò×Ì*_vÑÆ{âEJãþBvÿõÂ_ý :ÌÕ|Ck¤Î°I²ÊWyXñÀè ,@ì*Ó¸ÿ¿ýp—ÿBŽ©êªJ²^[y’(ÚHÈqéò‘šÎ§?/¹¹­MO÷··‘‘ÿ µŸüù]ÿßQñtÂmgÿ>W÷Ô_ü][ÿ„CCÿŸ7ÿÀ™øª?áÐÿçÍÿð&_þ*¹ùq]×õò;9ðË/ÃüÊŸð›YÿÏ•ßýõÿGü&Öóåwÿ}EÿÅÕ¿øD4?ùóü —ÿŠ£þ þ|ßÿeÿâ¨åÅw_×È9ðË/ÃüÊŸð›YÿÏ•ßýõÿGü&Öóåwÿ}EÿÅÕ¿øD4?ùóü —ÿŠ£þ þ|ßÿeÿâ¨åÅw_×È9ðË/ÃüÊŸð›YÿÏ•ßýõÿGü&Öóåwÿ}EÿÅÕ¿øD4?ùóü —ÿŠ£þ þ|ßÿeÿâ¨åÅw_×È9ðË/ÃüÊŸð›YÿÏ•ßýõÿGü&Öóåwÿ}EÿÅÕ¿øD4?ùóü —ÿŠ£þ þ|ßÿeÿâ¨åÅw_×È9ðË/ÃüÉtR;È.õ(2„ÙA xÎqÔ“×½KyvÙ\Æ…™¤1¥I+µŽ3œuPzÕ(í£ÐÙíâFKYdß1ÁÚ³œñž½êh¯¯ (¹ŠÞBîÌK íaŽs“ófº£{.mÎòó>]‹Ú-ÿ>“~kþ4h·üúMù¯øÕÝ©ÿ<ãÿ¾ESþyÇÿ|Š¢ _Ú-ÿ>“~kþ5j DÑï WœÝE?jÏ8ÿï‘K€8è5úS)ïÒ™HaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP{ÿùÜÿ×&þUÊøcî­uWÿò¹ÿ®Mü«•ðÇÝZîàû‚Š û‚Šbuþ¬×žø‹þ>bÿ®‹üëЮ¿ÕšóßÇÌ_õÑwV_òµÿ®)ÿ Šž ²ÿ}¯ýqOýTôÕÿØÿë›ÿ5««¯ü~Çÿ\ßù­X4ôª­Ö­?JªÝi¿ü„§ÿ®èRT2è63kQê¯ûB.1Ÿ”žÌG¨ø šßþBSÿ׿ô)*í0+ÝÅ#ˆ¤ˆñ>ð¤ãwHÏК„Í1?ñásùÇÿÅÕê(‡›7üø]~qÿñty³Ï…×çÿWè  lßóáuùÇÿÅÐD÷-fÞHc®í!\¤R{Wè Š( Š( Š( Š( Š( Š( Š( §‡Í1²¶É#mèØÈäwàšLßÿÏÅ·þ·ÿSQ@æÿþ~-¿ð¿øº3ÿ?ßøßü]MEC›ÿùø¶ÿÀvÿâèÍÿüü[à;ñu5 E!ŸÎžEyì]‰´œž2}~Õ5PEPEPEPEPEP&†;ˆZ)T20ÁˆaŽÞ%Š% Š0§Ñ@Q@Q@ ~”Ê{ô¦RQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE^ÿþA÷?õÉ¿•r¾û£ë]Uÿüƒîë“*å|1÷GÖ€;¸>࢈>࢘†]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@Õ—üƒíëŠè"§¨,¿äkÿ\SÿA=5ãö?úæÿÍjÁªëÿ©ÿ\ßù­X4ôª¯Ö­?J¬ãš@Eoÿ!)ÿë„_ú•Cżú5…´ÖòZÄfºHZ[ Lq«g,pæ=jüòŸþ¸Eÿ¡IUõÍ2]Ql#÷±Ü8žUs8<óO°û”bñÙ´õ¹¸ºµÕL· oÒrägiÝ!üEZ¸ñvæ(ÿ³¯å¹h¼ç¶‰¼Iœe¾luÏ’qRjÚ[Þ;ìþTbÚñ.2 ã¯5™®xeïµ¥Ôâ³ÓoI€Bð_ƒ´`’X+`òA£úü?Ì_×ãþEÉ|SfE¸³·»¾{ˆÂ¥´`•ŒôfÜF9ãxèú×Uÿ ûŸúäßʹ_ }Ñõ î¸(¢¸(¦!—_êÍyãæ/úè¿Î½ ëýY¯=ñü|Åÿ]ùÐueÿ û_úâŸú©ê /ùÚÿ×ÿÐEVƒZ±¸Õ¦Ó#—71.HÇ÷÷#Œý~¸¸ÍåÎ’ífP¥NÑ’3ŽqøSì>“ß—ÿ k$ÉâªT³êqŽ?Zy²‡Öoûüÿã@µìtŸÿäÿâjº‡û·ø 'ÿSµ”uŸÿ$ÿ⪵‡û×ø'ÿHÑ]îf¸ddVU ±Î;}ïÒ®U;Ft¸šÙQUјä€Û† ïʟήS¢£”’ÑF¬WÌm¥‡P0Oô©>ɬ¿÷õ¿Æ€ (û$>²ÿßÖÿ>ɬ¿÷õ¿Æ€ (û$^²ÿßÖÿ>ɬ¿÷õ¿Æ€ (û$^²ÿßÖÿ>ɬ¿÷õ¿Æ€ )ÑvŸ-äWìK±‘4Ødó`ŽLcz†ÇÔP袊(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Škô¦Sߥ2Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š(  ÷ÿò¹ÿ®Mü«•ðÇÝZê¯ÿäsÿ\›ùW+áº>´ÝÁ÷A÷Ä2ëýY¯=ñü|Åÿ]ùס]«5ç¾"ÿ˜¿ë¢ÿ:tëaÿLSÿA›…t{k˜î!¶•e÷«}¦S†õå«FÌãN¶ ˆßå‹kã [»øì£ÓïÄï!k,)sóäÞ€:ÿÔÿ®oüÖ¨øŠúâÓOH¬˜-õÜ«onHÎÖn­Žû@-øUåÿØÿë›ÿ5¬ýSÃöÚÆ§mq~#¸µ·Õmdr—b>rIìÇsH èõ]Fß:îmbÍ$Äqî&eà0\wá€Çz4±r³ƒªÜÞÊ›D‘ÜÀ°¼'ݧŸJžeÏ|ú<ñXÅr‰ˆVÜ2FëÕ€Èê8#Ž™Í7NÒf´¾º¾¼¼Ww ¨YbòÑUs€'ÔòI¦”òŸþ¸Eÿ¡IW*•¿ü„§ÿ®èRUÚŠC‹›Oúêô«DÕ+ƒ‹‹?úêô[ÔÆNi6hÍWóhóhÆhÍWóhóhÆk Ä^#mO*ÎDØ]–kÕ…Î;"wÄV¯›\ö¯áùµ û‹«kè k›o³J²Ûy¿/<©Ü Ÿ˜úö¤ïÐjÝN–Öá.­¡¸;%@ëŸB2* #› sÿL—ù M>!igmjp†5v1œ f“O9ÓmOý1Oä*ݯ¡*öÔÍ×üEˆ±ª[µÔìT´jÛB!`»Øó“ëùãn¹?øbòê+ùìoîŒ×RDÍ"ÚB²ã— ÆzýkªY"DgiTì,}N8ü©-†÷EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_¥2žý)”†QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW¿ÿ}Ïýroå\¯†:­uWÿò¹ÿ®Mü«•ðÇAõ î¸(¢¸(¦!—_êÍyãæ/úè¿Î½ ëýY¯=ñü|Åÿ]ùÐueÿ û_úâŸú¦G§YŨK·S(Wu ‘ùJ}—üƒíëŠè"§ ¯ü~Çÿ\ßù­X5]ãö?úæÿÍjÁ Ÿ¥UnµiúUVëHíÿä%?ýp‹ÿB’®Õ+ù Oÿ\"ÿФ«´À«zJy°JE.çÀÎV\þdT&þË?ñýmÿ—üjäŒÀ¢!¤m ‘œpOòÿ³7üüËù/øPwÛì¿çú×þÿ/øÑöû/ùþµÿ¿Ëþ5£öfÿŸ™¿%ÿâhû3ÏÌß’ÿñ4€Îû}—üÿZÿßåÿ>ßeÿ?Ö¿÷ùÆ´~Ìßóó7ä¿üMfoùù›ò_þ&€3¾ßeÿ?Ö¿÷ùÆ·ÙÏõ¯ýþ_ñ­³7üüÍù/ÿGÙüüÍù/ÿ@ÿÚV‰Ê\Å+öHä Ì}nÎ&‚ÆÞ'ûɩǨ©ÚP¤Ç;³Âàþ@Q‰bI”0üi€ê(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ý)”÷éL¤0¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(UÕ|«Ó¦y9ó­ÝüÍÝ8n1ö}{Ö7†:­XÖÿäiƒþ¼ßÿA’«øg§ãYR““•ú?ò7ÄB0Påê¯ø³»ƒî (ƒî +cœe×ú³^{â/øù‹þº/ó¯BºÿVkÏ|Eÿ1×EþtÝYÈ>×þ¸§þ‚*z‚ËþAö¿õÅ?ôSÐWþ?cÿ®oüÖ¬®¿ñûýsæµ`ÐOÒª·Z´ý*«u¤vÿòŸþ¸Eÿ¡IWj•¿ü„§ÿ®èRUÚ`E!Åͯýu?úU¢jœç6õÔÿè·©Œ”6hÍAæÑæÒ|ÑšƒÍ£Í  ó\“x’];Ä:Ú\[_ÜÚ[ù-º .̱<ƒïÀ5ÓyµÌ^iz×öެö/b Ô•¤™ß|XM¤… †üÅô·S¬‚hî!ŽhœÏ©µ„:míÜ©ÊæÕ HÜëýÓZÕÈx•»žM:ÓW]kb$3Û,‚'Ç*çË*2sŸzëSw–»ñ¿v:f…°Þ㨢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Škô¦Sߥ2Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( W[ÿ‘¦úóýJ¯ážŸXÖÿäiƒþ¼ßÿA’«øg§ãXPÞ~¿¢:±_ ?ð¯ÍÜpQDpQ] ˯õf¼÷Ä_ñóýt_ç^…uþ¬×žø‹þ>bÿ®‹ü躲ÿ}¯ýqOýTõ—üƒíëŠè"§ ¯ü~Çÿ\ßù­X5]ãö?úæÿÍjÁ Ÿ¥UnµiúUVëHíÿä%?ýp‹ÿB’®Õ+ù Oÿ\"ÿФ«fXÄ¢"ê$`X&y u8ôä~tÀ­zÂ9-dc„Y¾f=Q€ýH© ±ìiòŸ” PÌçh Óñüªÿضýíìð $ØÿÝ4lîŸÊ£þÅ·ÿŸ{üãGö-¿üûØÿà(ÿI±ÿº*6?÷OåQÿbÛÿϽþñ£ûßþ}ìðI±ÿº*6?÷MGý‹oÿ>ö?ø ?Æì[ù÷±ÿÀQþ4#J-Ñ¥”íE$ÑbŸmŒ:Ä¡‡¡S• %ŽÚ̺ò6Àþ=je‘¦eXvò¡Ë0èN? b%¢“ɸÿžÑߣÿÅRy7óÚ/ûôøªuß&ãþ{Eÿ~ÿKä\Ïh¿ïÑÿâ¨h¨Át—Ê—i$nVQ€G~?RPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_¥2žý)”†QEQEQEQEQEQEQEQEQEQEQEQEQEQEQErºßü0×›ÿè2U ôüjÆ·ÿ#Lõæÿú •_Ã=?†óõýÕŠøiÿ…~lîàû‚Š û‚Šè9]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@Õ—üƒíëŠè"§¨,¿äkÿ\SÿA=5ãö?úæÿÍjÁªëÿ±ÿ×7þkV Dý*«u«OÒª·Z@Goÿ!)ÿë„_ú•‹sá‹ùõÏíUÖ&W1öbv þ¿ÓÏ®Mm[ÿÈJúáþ…%1õÝ"7d}VÅ]NM§Z`\oøø¶ÿ®‡ÿ@j¹T؃=© Èô«tµOQÕ,ô¨R[ÉJ+¸D ŒìíèA$ðz ·XÞ#´7vp„°ºº’9wÆÖ³¬RBØ#pf`;ãý)0.G«ÙK%¤k+ .Õžx™KÆì‚8ÆG\UYüQ£Û¢;ܹß,ªÇŽÅáÆIà÷éXâÏÄ&‡©\[}¶öÐL“²"¹Gû§' X¹è:â²âRÒµMßL’K©noæû*Íà®A6väëO¨—öþ—ý”º˜¼ChÇj¸’ÙÆÐ¸ÎìñŒf¢>(ÑŇÛ~Ö|Ÿ7ÈÇ’ûÄŸÝ)·p>Ø®n j“éi0º:£j gÉ‚•Û´H¤a±ÎsŒæ¬&…1ŽÊk}6îÞ_í8î.Õà™Êª‘¸±vöü–øù^AÑõÈùзÿ”ÿõÂ/ý J»Lßþ>-¿ë¡ÿЭUI?ãâ×þºýªÞh¢“4¹ £x!’hæx‘¥>[•“=p{f¤Í Š3Fhkͱ.3ɵ„ø¿øŠØk*8RâÖÕe¤X”†P¨#ûÑš˜“FMGý˜þ’àtÔf?¤Ÿø5!’dÐ ¨ÿ³ÒOüšìÇô“ÿ¦ Ý»R„« ™öË&?‘üªåV¶…-äxü²’7ÌX¹rãýãÉÅY¦ ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¯Ò™O~”ÊC (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€9]oþF˜?ëÍÿô* ÿZŸ[ÿ‘¦úóýJƒÃ?Ö°¡¼ýDub¾á_›;¨>࢈>ࢺA—_êÍyãæ/úè¿Î½ ëýY¯=ñü|Åÿ]ùÐueÿ û_úâŸú©ê /ùÚÿ×ÿÐEO@ _øýþ¹¿óZ°jºÿÇìõÍÿšÕƒ@?JªÝjÓôª­ÖÛÿÈJúáþ…%]ªVÿòŸþ¸Eÿ¡IWiŸñókÿ]Oþ€ÕhÕIãæÓþºŸýªÙ ŠJ)´RQ@ E%áÖ³ôÃÂÿ×´?û5_k7Mlcþ½aÿÙèLš3Q'˜(—ˆ5VÑ´YïÑÌeàrÀZµg¨ÙjÏeyorªpÆUÀ>‡±¼a—~»†^w%–‹¸°¤àw૤µx¦]JÖÂ{+1f o: ™÷d§ 22Gzh×:9úlõÍÿšQ,±ÁË4‹h 3¹ÀP:’OAL•³oÿ\¤þiUõ«T¾Ño,ä¸[už#•†BîãÔzúÒ{ ²ÔôýKØo­®¶c‘2¾ÜôÎn°4BgÔo´¹ÍœÍh‘°¸´RªÁ³ò²äá†={Öý1Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ ~”Ê{ô¦RQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEÊëò4Áÿ^oÿ ÉPxkúÕýbÂæMm/V<ÛÇjêϸpv¿n½ÅPð×õ¬h¦œ¯ßüŽœL“TìöêÎê¸(¢¸(­ÎQ—_êÍyãæ/úè¿Î½ ëýY¯=ñü|Åÿ]ùÐueÿ û_úâŸú©ê /ùÚÿ×ÿÐEO@ _øýþ¹¿óZ°jºÿÇìõÍÿšÕƒ@?JªÝjÓôª­ÖÛÿÈJúáþ…%]ªVÿòŸþ¸Eÿ¡IWi ¿ñóiÿ]Oþ€ÕhÕY¿ãæÏþºŸýêÉ4€(¤Í ¢“4f€ŠLÑšrõ¬›‚?ëÒýžµ”óY0²ZY²V!@h±œ`uÏúТƓq¨~Ëwÿ=¯(?²ÝÏkßÊð dÛ(cP}–ëþ{^þP…eºÿž×¿”á@Σn?錟Í*yíẠ¸†9¢q†ŽE §ê Ck Ç,…šVœ¸ËŒã¶1Æ:ô«TÄAicia•gk´yÎÈc3ô=PEPEPEPEPEPEPEPEPEPEPEPEPEP_¥2žý)”†QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW¿ÿ}Ïýroå\·†¿©®¦ÿþA÷?õÉ¿•rÞþ¦€;¨>࢈>࢘†]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@Õ—üƒíëŠè"§¨,¿äkÿ\SÿA=5ãö?úæÿÍjÁªëÿ±ÿ×7þkV Dý*«u«OÒª·Z@Goÿ!)ÿë„_ú•v©[ÿÈJúáþ…%]¦ÿÇÍŸýu?ú-êrj½Çü|Yÿ×Sÿ¢Þ¦cHͦfŒÐóFi™£4üÑšfhÍJ§æªzIýÚ׬?û5ZCó ¥¥6?ëÒýš€5 £5Áø¶[Mz;éÚÎúd‰tëŒùŸxá¡Æ~céŽp9¹¨[XIâÛ{¹Dß[+[+ñæþënÔäc_KŽÚØô<Ñšó NÂÖæÛÄ×sB Õ¥¬ o/GˆˆùOnk¡Ñí-´¿ËmcÁo6œ“×þ¸§þ‚*z‚ËþAö¿õÅ?ôSÐWþ?cÿ®oüÖ¬®¿ñûýsæµ`ÐOÒª·Z´ý*«u¤vÿòŸþ¸Eÿ¡IWj•¿ü„§ÿ®èRUÚ`W¹ÿ‹?úìô[ÓØóQÜÿÇÅŸýv?ú-éXóHͦfŒÐ1ù£4ÌÑš~hÍ34f€'Œü³ôÖ§ýyÁÿ³ÕèÎ*•¥³½¤ÐÊ#“ìè§rîVã##¦O~ô´\Òo¦y¿óñkÿ€íÿÅÒ}ž÷þ~-ð¿øºI¾”=Eö{ßùøµÿÀvÿâé|‹ßùøµÿÀvÿâèų¨Ûÿלu-Í´wvÏo.ÿ-Æc²À©~£‚ÙÒVšiD’‘´m]ª£ØdõïÏaViˆ«a§Yé–þE” d–!z±=I'’}ÍZ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Škô¦Sߥ2Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š(  ÷ÿò¹ÿ®Mü«–ð×Sþñ®¦ÿþA÷?õÉ¿•rÞêÞ4ÝA÷A÷Ä2ëýY¯=ñü|Åÿ]ùס]«5ç¾"ÿ˜¿ë¢ÿ:äkÿ\SÿA=Aeÿ û_úâŸú©è«ÿ±ÿ×7þkV W_øýþ¹¿óZ°h'éU[­Z~•UºÒ;ù Oÿ\"ÿФ«µJßþBSÿ׿ô)*í0*ÝÇÅ—ýv?ú-ècÍëì¿ë±ÿÑoLsÍ!†hÍ34f€š3LÍ æŒÓ3@4bóŠn›ÿ »OúâŸú¢óŠ4ßùYÿ×ÿÐE-Q\=ÛMsâíZ‹\¹Š%ƒbØ^’<¯9bõükfßPÔeׯm"kd±°‰<Äw•Ã&îvúƒO¥Àߦ¼‰Ýí\œdú ã´¯__ÝÚJmwYÝ3|‰i0hW«4„laÇ8Ç^õ÷ú®¬<=¨Ü 8ìn5Þ‘XÊ£kmÜÙÁãÐ »HSº¤fTRÌB¨$œ+Ä´šj@–÷Vñ\JNÔ–ÚIË€9ÂÆsé“UަÚÏÃûA£¼ÖR–QœÆ{dRoFû +´»²º†R ‘AàŠZå4]KS³mËP’[ÞÛâ·VVŒªÃdœäwçµuuMYØ”î®QE!…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ ~”Ê{ô¦RQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE^ÿþA÷?õÉ¿•rÞêÞ5ÔßÿÈ>çþ¹7ò®[Ã]OûÆ€;¨>࢈>࢘†]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@Õ—üƒíëŠè"§¨,¿äkÿ\SÿA=5ãö?úæÿÍjÁªëÿ±ÿ×7þkV Dý*«u«OÒª·Z@Goÿ!)ÿë„_ú•v©[ÿÈJúáþ…%]¦KÏõö_õØÿè·¦?Zžê•‘¼M½K:søTÌòçîYàYÿâ) \0i¾|¿Ý²ÿÀ³ÿÄQçËýÛ/ü ?üE;ŒoŸ/÷l¿ð,ÿñyòÿvËÿÏÿ@Á¥æ™çËýÛ/ü ?üE|¿Ü²ÿÀ³ÿÄP˜Ö ]3þAVõÁ?ôU„—þî3i7Öà¹_p»F:І%‚âN*ýÅ+[é°ÛjW·èÒnöyˆÚ68÷¢ßM†ÚþöñÌ—… ˆÚ6®ÑŽ=*åÀÈÓü?™06××¢ÕK³gSç°ùwcž™ªðøNÒ ‹vŽòø[[MçÃhdS7=>]ØäñœVý™©h±ê7P]-ÕÕ¥Ì*Ȳ۲‚U±•!p;v§[h¶Öºö:¼­nbh‹3 ä6sÈÏ'µhÑGKõ¹§xnÞÂꇼ¼¼’Þ?*´º‘žЪpÉÉ­š(¢àQEQEQEQEQEQEQEQEQEQEQEQEQE5úS)ïÒ™HaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP{ÿùÜÿ×&þUËxo©ÿxÿ:êoÿäsÿ\›ùW-á¾§ýãü躃î (ƒî )ˆe×ú³^{â/øù‹þº/ó¯BºÿVkÏ|Eÿ1×EþtÝYÈ>×þ¸§þ‚*z‚ËþAö¿õÅ?ôSÐWþ?cÿ®oüÖ¬®¿ñûýsæµ`ÐOÒª·Z´ý*«u¤vÿòŸþ¸Eÿ¡IWj•¿ü„§ÿ®èRUÚ`E( ,Ã*Ò`ƒß Oó®g*”§6ŸõÔÿè Y¾&¼¼·‡OŠÊèÛ=Õê@Òª+Rpž=(êþhÍp÷šÞ­§Øk–z³\Ø´Uß”¡¶È@Ã(r9íÜqW®åÕ!¿ÓtXõy— ,²^¼1ïÚ›pŠ»vçæëŽ‚€:¬Ô1^A5ÄðG*´°%QÕIü+Žö¨ö±éâê5»:£iæøD1´)mÁznÇ隦×7ú7ü$ó-ûMsÅ ûCÆ€•!ÈoBGJ¿×§ùƒÓOëúÐô<Òq¹€ÉÀÉêk×|A§jwñ[È›ÚßÊ ¬o$¬…ÏrÇíL׬¯¢‡G†mby¦}N=·(•£ù  ·ó…­¿® úÿ].vR"L…eMU¶s%¬.Ç%‘I?…KlÇ$ï;¨Á•‚ÇÔ…~B ±9Óíý2_ä(z+™ñ$Ú­[«=P DŽÛOêDÇ# “ótÉÈ#U}KRÕä›[¹²¼[xt…€Ä¬'`Ûq<ƒŒQqÛ¡×QPÚÎ.¬à¸Q,jàzdf¦¦Õ´%;«…QHaEPEPEPEPEPEPEPEPEPEPEPEPEPEP_¥2žý)”†QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW¿ÿ}Ïýroå\·†úŸ÷ó®¦ÿþA÷?õÉ¿•rÞêÞ?΀;¨>࢈>࢘†]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@Õ—üƒíëŠè"§¨,¿äkÿ\SÿA=5ãö?úæÿÍjÁªëÿ±ÿ×7þkV Dý*«u«OÒª·Z@Goÿ!)ÿë„_ú•v©[ÿÈJúáþ…%]¦{ƒ‹‹?úìô[Ö_ˆ´£­Åe +åEv“J ²’ €G9çÚµ.â‘ÄRDxŸxRq»‚¤gèMBf˜ÿË…ÏçÿHe8ô-.->[µýÄÎ$”³° ‚XÇ ïSêuž«iyÿ-·#+²2PÊA©<Ù¿çÂëóÿ‹£Í›þ|.¿8ÿøº®t]0écM6iö@wòxlçvsÙç9Í2ßBÓ-­n­’Ø´W_ëIJ<†N1ÉbOJ·æÍÿ>_œü]lßóáuùÇÿÅÐé6ÑÜF–¥Öâ1¢i^]Ê:œœ{P<;¥}…¬Ú ^u|=ÄŒU‡B¬[+b*÷›7üø]~qÿñty³Ï…×çÿ@‰ì¡ŠÒíá #A… åâI$þ4šyΙjéŠ!P™nˆÄVR«ž#&ÑîpÄþ•nÞom äF=ð1L KR}z]RÛS¶BшâIì̾R÷ D‹Ôòxôô¦jšî{æmíõU½ˆB¾ÒP“ò¼ tTPcb‰#A„E £Ð uPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_¥2žý)”†QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW¿ÿ}Ïýroå\·†úŸ÷ó®¦ÿþA÷?õÉ¿•rþûÇýãü蹃î (ƒî )ˆe×ú³^{â/øù‹þº/ó¯BºÿVkÏ|Eÿ1×EþtÝYÈ>×þ¸§þ‚*z‚ËþAö¿õÅ?ôSÐWþ?cÿ®oüÖ¬®¿ñûýsæµ`ÐOÒª·Z´ý*«õ¤vÿòŸþ¸Eÿ¡IWj•¿ü„§ÿ®èRUÚ`W1§kÓß^جҘŒ³ÝÇåE(â&À,IÈ sÇSéK-¥ò<½+TarX[bb½Büüt'æÇJ騪Z^§­gö˜HðíÇ*ítu8*G­eGâî|Mmeo gN”L¾{gt3·¶ÐN3܃éÉÖÀtTW=¯kséúµ•”WºušÏŽÓ_)#*TuääþU½™äGæ²<›FæA…'¹'ñ4-UÀ}Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ ~”Ê{ô¦RQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE^ÿþA÷?õÉ¿•rþûÇýãü먿ÿ}Ïýroå\¿†þñÿxÿ:î`û‚Š û‚Šbuþ¬×žø‹þ>bÿ®‹üëЮ¿ÕšóßÇÌ_õÑwV_òµÿ®)ÿ Šž ²ÿ}¯ýqOýTôÕÿÔÿ®oüÖ¬ªÍåÎ’ífP¥NÑ’3ŽqøSì>“ß—ÿ {ôªÎ9§µìtŸÿäÿâjº‡û·ø 'ÿHƒþBsÿ׿ô)(ÔN¨©Ó#³vÉÞ·.È1ÛAþT¶Šïs5Ã#"²¬h`¥ŽqÛï~•r˜Æá»»;*i'…ÚÝ®d¸+‘—”çå€úÒØøvîÚÏ@‰ä€¶3É)V8`Êàmãý¡×ÓQ@ZF—-ŒZ„s²0¹»–eòÉá[ =0k:?Ai¬iw6s\­µš¸1½ä­Œ´($Œpr8Þºj(Z“¬Ã«\ÆööPiÒ[ËGû[¸ ŸöBò*Ö•btÍ&ÒÄÊe6ð¬{ÈÆì f®Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ ~”Ê{ô¦RQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE^ÿþA÷?õÉ¿•rþûÇýãü먿ÿ}Ïýroå\¿†þñÿxÿ:î`û‚Š û‚Šbuþ¬×žø‹þ>bÿ®‹üëЮ¿ÕšóßÇÌ_õÑwV_òµÿ®)ÿ Šž ²ÿ}¯ýqOýTôQEQEKQ»–Ø[Å£Os(Š=ç  $ãØ‚(µ¹Ð¼Z––ê”·v”Ã;ú‚>âWþB/ý~ÿí)*_ ÿÈ*û_éTµ•¹¤îÍïÉÒÜoÙû¼w0}ÁE}ÁE1 ºÿVkÏ|Eÿ1×EþuèW_êÍyãæ/úè¿Î€;kOøñ¶ÿ®)ÿ Šš¡´ÿoúâŸú©© (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š¯ÿ ûŸúäßʹ}öÿxÿ:ê/ÿäsÿ\›ùW/áϾßïç@ÌpQDpQLC.¿ÕšóßÇÌ_õÑz×ú³^{â/øù‹þº/ó šâ]V; ¥ÛE>a_3Ì8ÆqüCÞª}«Å_ô µÿ¾‡ÿZKš¢E„€ÜánGä8¥û+Ï7ÿÀ§¬%IÉß™¯ëÐé…uòò'ëó3>Õâ¯úZÿßCÿ‹£í^*ÿ e¯ýô?øºÓû+Ï7ÿÀ§£ì­ÿ<ßÿž—°Îÿò+ëKþ}Çîæf}«Å_ô µÿ¾‡ÿGÚ¼Uÿ@Ë_ûèñu§öVÿžoÿOGÙ[þy¿þ=Áÿ;ü?È>´¿çÜ~çþfgÚ¼Uÿ@Ë_ûèñt}«Å_ô µÿ¾‡ÿZeoùæÿøô}•¿ç›ÿàSÑìó¿ÃüƒëKþ}Çîæf}«Å_ô µÿ¾‡ÿGÚ¼Uÿ@Ë_ûèñu§öVÿžoÿOGÙ[þy¿þ=Áÿ;ü?È>´¿çÜ~çþfgÚ¼Uÿ@Ë_ûèñt}«Å_ô µÿ¾‡ÿZeoùæÿøôå³,q±‡ÖêJ=ƒþwø}iϸýÏü̯µx«þ–¿÷ÐÿâèûWŠ¿èkÿ}þ.µãµ†H‘ó0ÜÇžÿãNû?Þ›þÿ¿øÑìó¿ÃüƒëKþ}Çîæc}«Å_ô µÿ¾‡ÿGÚ¼Uÿ@Ë_ûèñu³ö(½7ýÿñ£ìPÿzoûþÿãG°Îÿò­/ù÷¹ÿ™ö¯Ð2×þúü]jñWý-ï¡ÿÅÖÏØ¡þôß÷ýÿƱCýé¿ïûÿÁÿ;ü?È>´¿çÜ~çþf7Ú¼Uÿ@Ë_ûèñt}«Å_ô µÿ¾‡ÿ[?b‡ûÓß÷ÿ>Å÷¦ÿ¿ïþ4{üïðÿ úÒÿŸqûŸù˜ßjñWý-ï¡ÿÅÑö¯Ð2×þúü]lýŠïMÿßühû?Þ›þÿ¿øÑìó¿ÃüƒëKþ}Çîæc}«Å_ô µÿ¾‡ÿGÚ¼Uÿ@Ë_ûèñu³ö(½7ýÿñ£ìPÿzoûþÿãG°Îÿò­/ù÷¹ÿ™ö¯Ð2×þúü]jñWý-ï¡ÿÅÖÏØ¡þôß÷ýÿƱCýé¿ïûÿÁÿ;ü?È>´¿çÜ~çþf7Ú¼Uÿ@Ë_ûèñt}«Å_ô µÿ¾‡ÿ[?b‡ûÓß÷ÿ>Å÷¦ÿ¿ïþ4{üïðÿ úÒÿŸqûŸù˜ßjñWý-ï¡ÿÅÑö¯Ð2×þúü]lýŠïMÿßühû?Þ›þÿ¿øÑìó¿ÃüƒëKþ}Çîæc}«Å_ô µÿ¾‡ÿGÚ¼Uÿ@Ë_ûèñu³ö(½7ýÿñ£ìPÿzoûþÿãG°Îÿò­/ù÷¹ÿ™ö¯Ð2×þúü]jñWý-ï¡ÿÅÖÏØ¡þôß÷ýÿƱCýé¿ïûÿÁÿ;ü?È>´¿çÜ~çþf7Ú¼Uÿ@Ë_ûèñt}«Å_ô µÿ¾‡ÿ[?b‡ûÓß÷ÿ>Å÷¦ÿ¿ïþ4{üïðÿ úÒÿŸqûŸù˜ßjñWý-ï¡ÿÅÑö¯Ð2×þúü]lýŠïMÿßühû?Þ›þÿ¿øÑìó¿ÃüƒëKþ}Çîæc}«Å_ô µÿ¾‡ÿGÚ¼Uÿ@Ë_ûèñu³ö(½7ýÿñ£ìPÿzoûþÿãG°Îÿò­/ù÷¹ÿ™_J“V—ÍþÓµŠcËòÈ9ëœüÇÚ´vŸJ­ö(½7ýÿñ£ìPÿzoûþÿãZÆ<ª×¹Ï9sËšÖô,í>”m>•[ìPÿzoûþÿãGØ¡þôß÷ýÿƨ’ÎÓéFÓéU¾Å÷¦ÿ¿ïþ4}ŠïMÿßühÎÓéFÓéU¾Å÷¦ÿ¿ïþ4}ŠïMÿßühÎÓéFÓéU¾Å÷¦ÿ¿ïþ4}ŠïMÿßühÎÓéFÓéU¾Å÷¦ÿ¿ïþ4}ŠïMÿßühÎÓéFÓéU¾Å÷¦ÿ¿ïþ4}ŠïMÿßühÎÓéFÓéU¾Å÷¦ÿ¿ïþ4}ŠïMÿßühÎÓéFÓéU¾Å÷¦ÿ¿ïþ4}ŠïMÿßühÎÓéFÓéU¾Å÷¦ÿ¿ïþ4}ŠïMÿßühÎÓéFÓéU¾Å÷¦ÿ¿ïþ4}ŠïMÿßühÎÓéFÓéU¾Å÷¦ÿ¿ïþ4}ŠïMÿßühÎÓéFÓéU¾Å÷¦ÿ¿ïþ4}ŠïMÿßühÎÓéFÓéU¾Å÷¦ÿ¿ïþ4}ŠïMÿßühÎÓéFÓéU¾Å÷¦ÿ¿ïþ4}ŠïMÿßühÎÓéFÓéU¾Å÷¦ÿ¿ïþ4}ŠïMÿßühÎÓéFÓéU¾Å÷¦ÿ¿ïþ4}ŠïMÿßühÎÓéFÓéU¾Å÷¦ÿ¿ïþ4}ŠïMÿßühÎÓéFÓéU¾Å÷¦ÿ¿ïþ4}ŠïMÿßühÎÓéFÓéU¾Å÷¦ÿ¿ïþ4}ŠïMÿßühÎÓéFÓéU¾Å÷¦ÿ¿ïþ4}ŠïMÿßühÎÓéFÓéU¾Å÷¦ÿ¿ïþ4}ŠïMÿßühuFŸqÿ\Ø~•Ëxsï·ûÇù×R¶p†÷ƒœ4¬Ãò&¹o}öÿxÿ:î`û‚Š û‚Šbuþ¬×žø‹þ>bÿ®‹üëЮ¿ÕšóßÇÌ_õÑvÖÄ-¤d@I5Muý-ì~Ø—Aàó A‘‹0ì?…A©Û^ÞiVðZ$R#2ùé$¦=éýÜ€zœgŽ™¬k aômPšæ"fÔ$Ž%ó¾]äô$…ëéÚ’þ¿¿ëñ:›+û]FßÏ´”IJ“‚#¨ ò±¨?¶ôÿ·‹#9YËl£`¥½´ŸlÕóL´³une»¹"Ibù•¦aœ gŒúU-búÞçX±[kÿµM Ò§…È8A'“Ž)õH]6†½¦›ñeöŸß—1Œ£-ýÐØÛŸlÕ‹Ûû]:ßÏ»™b!A=IôrO°®~}ZÃT×VÖ{Ûx`²¸ciy¦8ì ŸÄûu³®°´Öt­FáXÙ@dY)"&`6±·g¶itCê^]Mk)îü÷X`ǘ^R¹éò‘“ùSìµ› Bv‚Þfó•w䉣lzá€$W9­ëIªéÜvÒÅ%¤ÂRhùÉ-ósÓŒ “M'ñU¼–Ú“jËöwI%*¸·‚€/ÌxÆ3Å5¸=æÕ“ûLØEmq3¦ß6HÕvE»¦âHúð hW;eckqâ­bâkx¤š‡Ë‘”O“±íYÙy^k»BÞNŸ*).éæ|ÙÇ'Œ÷¥Ðæ•~øú× )£jré7ö²ÆË’]Uï™±¼œ•ÎpAâ¶|'º]\Ëge4 ¨ 8™Ÿ›$uúS°®t6ÿñíûƒùU}?U±ÕæÊáfJa“®:ŽŸJ£­ßKaá²Ößñ÷2¤ãÖG¯åœþ‹¥Åw kÖ1ÜYAikw´ýÕÁ—t¨ V9EÁ#pïž)/ëúþ·Ñ_×ü1Ñ[kÚ}åëZ[¼ï"»FOÙ¥rÞWocÞ´«ŒÓ¯àµ×-­4mUïíg–Wº·dVû8;˜¶à ¯ÍÆ=iž'»Òµ { Oí–SB©#Eizc¸è;‡ÀàõéGDlvÔWÚ­Ž¹ýðûµÞ’‰ÀW IB}@"°¬NŠIMÉ  blðÛÏOCÆ¿¯¿ü…ëîÿ3Óè¯7»ûchþþÔ‘#±+/˜×ñ<‘ç?ºó@eço©ëךµm¦ZÜMáë+‹ˆ5;'7N˜Cåã‚ O È&‹ÎúŠå0˜ÿh§Í§5‹­5)–êåm­§±‚ÊMŠ÷ 9Röì!ˆ^#©õ¤ôWÕØê¢•'…%ŒîGPÊqŒƒÈ§Õ ¥mÄÍÇ'™U}çàvö«õRVmt˜QE†QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEÇøsï·ûÇù×a\‡>û¼w0}ÁE}ÁE1 ¹ÿVkÏüD§íŸúh?zã(k×lËüÀdƒšèíU¾ËÊ~èíRíoîŸÊ¼þïÅ·öÌ@Ò,ßð"¨ê ÿÈÏþú?áHg§íoîŸÊ­ýÓùW˜Â}©ÐÏþú?áGü'Ú—ýlÿï£þéû[û§ò£ktþUæðŸj_ô³ÿ¾øQÿ ö¥ÿ@?ûèÿ…z~Öþéü¨ÚßÝ?•y‡ü'Ú—ýlÿï£þÂ}©ÐÏþú?á@Ÿµ¿º*6·÷Oå^aÿ ö¥ÿ@?ûèÿ…ðŸj_ô³ÿ¾øP§íoîŸÊ•U·_JòÿøOµ/úÙÿßGü(ÿ„ûRÿ  Ÿýô€=*ßþ=¢ÿp*’¼Ð|EÕÀhÖà€HßáKÿ Xÿ =¿ýüoð J¢¼×þ6±ÿ@{ûøßáGü,mcþ€öÿ÷ñ¿Â€=*ª :«KsùÆÜ»wnÏLç>õÀÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð¥_ˆºÃcÛûhßá@“\‡WßïçUlücªÝ …ºgÝmhv†5ŽhÓÁ÷è†QLa‘T.¬Ä äV!Ð-q Ç!'`ª§ÃQ“÷å]ŽÀ{Q寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùR FÜ•v>ZúQ寥svÚDFV͵¨ˆ ¶Ôà  )h ÿÙ endstream endobj 83 0 obj << /Length 2158 /Filter /FlateDecode >> stream xÚ­Xmoã6þž_¡o‘q1Ã7½µè‡íËnwÑ»¶ÛôáW,™¶u‘%¯$'k÷ßo†CI–-;»H¤Ijf8|fø ?zÂ[Áÿ¯ô8üIÄÅ‘ë€qÆÚ«·ô~½â°{o®¾½»º}-•—°$”¡w·ôÅ´Ò^FÐzw ïÿ»_ýr÷ÃûÙ\Ü—l6Bîßý~7±ÿóû·¯~šýy÷ÄH/bIÄŠÑ\3ìrQæ[éV*`` »EÿLË]Zಫî®>^ » 1˜¤X¨µ—m®þø“{ ˜{çq¦’Ø{²+7ž$ ü®ð~»¶y®í5„LˆÐ "ÁâX¢†WLq¥b»à k§"!ÉÁAÔ Þ¾Ý€€ï+Púë‰ø¹“??PpêyÁ%“"öÍç’|ò:_íjÓ¹^_ÍæJ€÷g1÷ŸfЫhnSu« ¿Ê«²±®<Þ³7W1‹á°æJ2’šU3€À¹R¡ß˜Âd-õ÷Õ®¦^Û©S*)±³ÿáÏŠ<{ ŸUé>Z›nžËºi»Ysƒ¶ys»{o.K‚€LiÖù²;Y2 ¬,l­,ì4&«Êhô;-Ôt J,=(ÀvTyÛL S&Lôà¼0Í“nÁ®ló¶0‹)A1§]’4‡ƒgAŒ]ñ®ÊË©¨Ñ,Q'âQ'ÊU´¦.Ó6ǃ|ÄÓ1Å~ž¸ŸËÈÿïÎz_ç¥ ï@Ȇªßð9帰Wn]BóöáQôóÞP»:0§¤!>@ôS^n qÄTO-ÝnMZÏ‚ƒõç-îc3‡#:ñw[úMȅ΢NW4E(‡¡¦È¦¦~[ÑdcZ7ЯڦY^®¬9|lǽiŸ y½ DqÆ@{7 šÈ7éÊ4èDžøo*¼OmDãwÕHPDë§ô>æäz4^ÑËÊvb÷)ŒÐ§v óBá†!×P§¨Ò…5 ÂÐ1õž:è«Õ™=CfAë”_-©uæªÃŒe÷ÈûÔŠ³ZCê5k:ê¦û>w½¬H×µÚO³™ðç#;Œ[Ѓj¤òï¥|4Úvó©ì…,ì}~r “ärvÂèr Þv§u,&`àåÏs!XDøÙR~2KÌEAD¨ Bÿ}¾Z·‚5°Á'yCa'!F"=%8U}PH‚ö×aŸ–YÞÅ%¥ºÉ+œŠ­ ‚ŠÐZŽ ý{&0|¨pb…M›îqß‘šÜ\çQü\v*`𥠰XxÐ8JmE©D^D†`@Õ‡ì`É,lÃÒ5ì !à (JüoM–îCãp1Õ¦?p»qÛU–: –‘§Î¦PHPˆÞn&¹ʶs®bÄ::—¿:B‰Aè€(­ž ÂDö¦•Æ,Ðs¤ZôíĆdø>oÚ›C—s‘XÌûíd×fIÜȪsi2+˜<æ¶}í±ÛšÚÞ}]’Ž.9Dýx€&¥TDŒ¸Ž÷:ÝÜ9: ‡×!0–>L±Xð[t|¡\"h"ìî*ºw…-#g¸?akùÑF-Í×¶Ød9lÖ «Oø!„©-•Ðà Ï~ã¾íKM\†y³-Ò=ý¨J¬ÏÃÐ} ýOû)Ê“™²íx¶U“c}q3b»uºÈwÍQYÙ1á6­;n\®p_ÎÁýÈĹÜΰû‰š=555é“ETq"ûçk×Ù__à„··4¹2ŽYÖö ˪®0Š,÷¬œmöQ ;ÛÊâ³O…] Y¢¿^ ú×Z½ôÙ0:ûlØ)¸ün¨0à’àâ»aèÞ ±~ ‡ÃD*ÿ©ÿ”·ëÉç3°":y8yHsFL±}päÚØ€ñ!X|ºqH*€ Ç ØÝi=,¯Ýò—=‹=ßtb˜@ûôûñùfâ`Ö‰C\¸¥Ô]sìN²-3O£êRD]Ÿ¯nþ:«®‹ŒGc‰‚}c³Áዊå¥È:´S¶¥yêâˆrÒ”€ÝÉ1îÜj¾ùLú¼3É&³ÞöÃ]N˜‘N,jÜV=¬vƒÒóUä…©ƒ 8"…J0ŒØaÔÕ}#¸•§â„©áIò{“™Í}÷P!¡¶‰†ôi<â endstream endobj 76 0 obj << /Type /XObject /Subtype /Image /Width 712 /Height 557 /BitsPerComponent 8 /Length 42589 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream ÿØÿàJFIFÿá°ExifII*JR(i‡Züÿÿ)( üÿÿ)( 0210‘ 0100 ÿÿ È -ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀ-È"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?÷úBÀPdzo¯RÞ6v`ª£$“ÐPÖW½DowãZ·Å;É.tËxE¸8Y&‹ûàÖ²ÏÄq»Yÿß—ÿâé\xûjxQöÔþð¯ÿ…®zYÿߦÿâèÿ…®zYÿß–ÿâè¸õöÔþð£í©ýá^ ÿ \ÿ§?ûòßü]ð±µÏútÿ¿-ÿÅÑp=ëí©ýáGÛSû¼þ6·ÿNŸ÷å¿øº?ábëôéÿ~[ÿ‹¢à{×ÛSû¶§÷…x7ü,]oþ?ïËñtÂÅÖÿéÓþü·ÿEÀ÷Ÿ¶§÷…mOï ðoøXºßý:ß–ÿâèÿ…‹­ÿÓ§ýùoþ.‹ï?mOï >ÚŸÞàßð±u¿útÿ¿-ÿÅÑÿ [ÿ§Oûòßü]Þ~ÚŸÞ}µ?¼+Á¿ábëôéÿ~[ÿ‹£þ.·ÿNŸ÷å¿øº.¼ýµ?¼(ûjxWƒÂÅÖ¿éÓþü·ÿGü,]kþ?ïËñt\yûjxQöÔþð¯ÿ…‹­Ó§ýùoþ.øXº×ý:ß–ÿâè¸óöÔþð£í©ýá^ ÿ Zÿ§Oûòßü]ð±u¯[Oûòßü]Þ~ÚŸÞ}µ?¼+Á¿ábë^¶¿÷å¿øº?ábë^¶¿÷á¿øº.¼ýµ?¼(ûjxWƒÿÂÅÖ½mïÃñtÂÅÖ½mïÃñt\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿâèÿ…‹¬úÚÿ߆ÿâè¸ñöÔþð£í©ýá^ÿ Yõµÿ¿ ÿÅÑÿ Yõµÿ¿ ÿÅÑp=ãí©ýáGÛSû¼þ.³ëkÿ~ÿŽQÿ Yõµÿ¿ ÿÇ(¸ñöÔþð£í©ýá^ÿ Yõµÿ¿ ÿÇ(ÿ…‹¬úÚÿ߆ÿã”\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿã”ÂÅÖ}mïÃñÊ.¼}µ?¼(ûjxWƒÿÂÅÖ}mïÃñÊ?ábë¶¿÷á¿øåÞ>ÚŸÞ}µ?¼+ÁÿábëÞµÿ¿ ÿÇ)ábëÞµÿ¿ ÿÇ(¸ïöÔþð£í©ýá^ÿ Xþõ·ýøoþ9Gü,]cûÖß÷á¿øåÝþÚŸÞ}µ?¼+Â?ábëÞ¶ÿ¿ ÿÇ(ÿ…‹¬zÛþü7ÿ¢à{¿ÛSû¶§÷…xGü,]cûÖß÷á¿øåð±uï[߆ÿã”\wûjxQöÔþð¯ÿ…‹¬z×þü7ÿ£þ.±ëkÿ~ÿŽQp=ãí©ýáGÛSû¼þ.³ëkÿ~ÿŽQÿ Yõµÿ¿ ÿÇ(¸ñöÔþð£í©ýá^ÿ Yõµÿ¿ ÿÇ(ÿ…‹¬úÚÿ߆ÿã”\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿã”ÂÅÖ}mïÃñÊ.¼}µ?¼(ûjxWƒÿÂÅÖ}mïÃñÊ?ábë>¶¿÷á¿øº.¼}µ?¼(ûjxWƒÿÂÅÖ}mïÃñtÂÅÖ}mïÃñt\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿâèÿ…‹­zÚÿ߆ÿâè¸ñöÔþð£í©ýá^ÿ Zõµÿ¿ ÿÅÒÂÅÖ½mïÃñt\yûjxQöÔþð¯ÿ…‹­zÚÿß–ÿâèÿ…‹­zÚß–ÿâè¸óöÔþð£í©ýá^ ÿ Zÿ§Oûòßü]ð±u¯útÿ¿-ÿÅÑp=çí©ýáGÛSû¼þ.µÿNŸ÷å¿øº?ábë_ôéÿ~[ÿ‹¢à{ÏÛSû¶§÷…x7ü,]kþ?ïËñtÂÅÖÿéÓþü·ÿEÀ÷Ÿ¶§÷…mOï ðoøXºßý:ß–ÿâèÿ…‹­ÿÓ§ýùoþ.‹ï?mOï >ÚŸÞàßð±u¿útÿ¿-ÿÅÑÿ [ÿ§Oûòßü]Þ~ÚŸÞ}µ?¼+Á¿ábëôéÿ~[ÿ‹£þ.·ÿNŸ÷å¿øº.¼ýµ?¼(ûjxWƒÂÅÖÿéÓþü·ÿIÿ [ÿ§Oûòßü]Þ¾ÚŸÞ}µ?¼+Áábëôéÿ~[ÿ‹£þ6¹ÿNŸ÷å¿øº.½}µ?¼(ûjxW‚ÿÂÆ×?éÓþü·ÿGü,msÒÏþü·ÿEÀ÷¯¶§÷…(¼CÜW‚ÂÆ×=,ÿïËñtáñ#]^Ö÷åÿøº.¿,êÝêPÀ׌xâ|ò_GoªCÇ! &ˆ }Á'|ñ^±it%PA¦…€äQ@Ìp¦¸/^еÛÈ?ñÓ]ÝÉÄf¼ËÇŽ²¯Gý1ähÇ7Qº¡ÝFê‘—¬-$Ôoc´…âY$$)•Â/Lã'¿aïZÚ§„õ ?RžÎÙ†&Š:+,kŒ³)n:ð2I¬ {©­.c¸·‘£š6ÜŽ½T×Cáÿ*j³¾µw3Cqbö^qÌJqƒÉ:/3:=S•ìR;Ff¿Rö :þ𧯎)ú†«ésÁ 턱IpvÄWÞ}RFyé],:þ‡c­ø`E¨´öšd2Ç5ÇÙÝ9e |¸Ï_­f.µf|?¦Ú-ûAuª×Ä,ÞTg8p1ƒÉÎÜÑ×úïoËPþ¿…φõ«;»[K‹Iî‰XSÍC¼Ž£†ÀëßùCï>€©<ûu®ši6~+ÒŸOW}ÅdƃºLî`‘ªú§ˆì­î4Óc}myioz.šÞ 8Ûm#ÜðÄ‚i­lÊòøJïN𾣩j–²ÛÏEöu2)3a²>½ñX1X]Ïa5ôP¶…Ö90ùYº g<ý+§Õõm û]Z¤·7:­Äsˆ^ÙÐņÉÿ­Yþ Öì4»»¨uR~ÃpŠÇ [÷ˆÁ“€½%»¿õ¢þ½Aí¡B] U¯K'V²(.õ% ýÑÁù³ŸáÍ;Qðö³¤Ú%ÕþŸ,99*@>ø'Ž+£¾ñŤÖzeÌqî¾{¨çÔ)ð£$`çƒÇLT¶·¢Ç¦k‹a=ìúÄÉ!ŠH¸ »’~ñíÇ £úü¿àB-#ÁºÖtøµ›`²¹v]ÂTÜHF`8$»éX“éðÇÆÕÄW2˜í¾aºR8\î?\bº'ñ”ß`ÖEÏú 7”ü~è¯ÝÆî¾Õ_Y×4ýfóKÕ£¿{+ødXæAºÆªr² Æ1þÎúïªFfÏárÚòÚÒm=–âëp†?5 | žÆ®*-GAÕô™aŽþÆHZfÛYX1ôÈ$gñ®ÏO¿Ñoüi¢Kc$W‰yMÕÌÍIû¶Á*ßÅïY7:¦a§Úéê]R©ýªäù DèP×ðëÍ upïýw0õ/ë:D÷öB²¶Ä!•ÁoO”ž}©×^Öì¾Íö6T7M²Ü¥ºãh$Ä éõh–ÖVÉc<-Q.Ö {n1Øä[Þ©¦¯ é¾0ÄVúœ·¾tîÒÛ›VW…]HÎãÃc `v¡9ýSEÕ4SÔlÞßÌÎÂYX{©#>ÕŸººOjöw6ÙéúµÍ¿žf1A§o,ã'ø‰ÉÎcìù:L–Ùšd›Ã´ÉmºuÏ£çŒvâ’/h~¹×ìõm3Ú)óKüD€0¨¬|9¬êMp¶v-1¶Ç( Úèå† ÔþÔ4ÔÓ5/RºkHïãŒ$â#(RŒN ŽyÍiøkRðæ™Ùn ŽêÝâêk”Ëè‚c=ý©ÛRz´ß Üê¾¹¸´¶šMNß Â]P*…²äúÕ-'×zž°úl²Ee$LSpÀ$à¹Ë@?>kmõT²Õm.µY,–mXÞÄâÙܲ`c¯JÌ»ñ÷Ä(u“º+5¹‰·2’Ûq'·J#«Wþ´C{;Z³þÜØê7Ve÷˜&x·ã¶’3ŽÝ*¾ê³ª^E?ˆ// Û,/tò¦õ;]K’28>”jš·ö£ÄßÙÚu—–Å¿”?Þ俥^Êã{²ðð¾ºÚ`Ô—MÙ˜üÑ t9Lg;s»ö§K'HšÆ+™®ïÞTJ;ðó‘Àç5¹eâm&WE™îÈŠÛHû,çÊs‰1÷qŽyî8©<#©ZO7„´øåÝuk-Ñ™6‘´2±ãð5VÕÿ]Ééëc™½Ð5=*æÞ-RÜÙ,ìM#AêIRzuÇZ³©höš2ê¶´z…·Ÿöy¢*øÏÌ=êö£{¡Ã¤[è1j’ÝDú—Ú..>ÎÈ N„rIêxÏzgН4k«(¢Òu”kKl }=,äN¿yË·ºòi_B­gc—ÝFê‡u©ˆ›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Uí/O„®Ò»$ðvõcè+/ujiWkr[±ÆöÜ9ÆxóøP¼º™$ebBøáÖçÜþµsðØË.¡ö"B¸bº€óë[>d|á¤wi˜ÈœVd7Àj¯txI̞ÌÒaÑ#‰•ãº}™ 6Ù8Ç^ƒmdjsYÞ,L«'1çœ`ûÖ‰’Sk4 BD›ðÆCŸ˜“Óo¿­V¼½ß}nè7}·ýNAÇéC½´muszËÃú5²$WÌgºe,G˜T uÀàzšËÖt«kh÷N•žÕÈXçnz{Š¿?“ªB›¦Í¿ÞÉlc©éŒœŒsÐñjëWØÓͫȯ3íÜTc€AÎ;tåQÄT•D¯«ÝGŠÁÐ >T’Z>æêúÃwfkX‰9%E|纽ïÂ,M¤?îŠõÑóGÊŠ)°ýÁE0uþ¬×˜xóþAwŸõÉÿ‘¯OºÿVkÌxD_ïà”êÖ{DWQùNQ\Àü¬)à÷Töú{\i——Ë*„µ1‚¸ÉmäŽá@wT]Ok2Ím4Ê¿vHœ«ÜȨ)8 úÒÐË’I$’y$÷¤ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(C+–„“KçAQQ@ ˜  zqJ³”èò¨¨  w"P”'®Ö#?‘¨ÚRÄ’zÔtR²½ÇÌÚµôº½ûÂñéû¢¾¯ 0ÿ GþLÃÿÅÒŠ·áø[ü†õüÿŸõr꿈`ñ=ßÛ-5;™9 "lË{ÇÏ9ã·ÐõËø‚ÞK]vînÍÜi›ï1 ›“ÈÎ=Emÿ±ñ‡ý?òfþ.øV>0ÿ GþLÃÿÅЕ­ä6ïs’®¢k»Ko hbçL‚ð³\m2K"mùÇMŒ?Z—þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.˜°Ñ¶¥©IiÿÚÒÈÁœÊ“,~PÜ#.¬»žøïÖ²¯ä{Û?°Ékp«lòÁ#!ÛÎpÉÈ'½Cÿ ÇÆôÿɘøº_øV>0ÿ GþLÃÿÅÐÕÝÁhqu>²ºš·ö"ÚŸ³y¸Ø%Ú»<¿Cž¸íœ×œWq¨øƺ¦¡-äú2,’X%Ä@tÇj©ÿ ÇÆôÿɘøºIK•Öÿ±ñ‡ý?òfþ.øV>0ÿ GþLÃÿÅÓ’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*÷ÿǤ?îŠòßøV>0ÿ GþLÃÿÅשxCþ=!ÿtSB=¸(¢¸(¦.¿ÕšóÈ.óþ¹?ò5é÷_êÍy‡ŽÆtÛ±ë#@•bØÓ-qÿ<“ù ŸÌ>Õ‡©Hñø.åãfG]=вœ|¾ Õ$Ô/ôß [My¨X¬òˆÖû,œ®q°9go¦>”€éžácÛ½•w£'>”ÿ0ûWu«ÞkZF—2, y²°hÝc,¡°ÛN ‡šßÓïõ+¹u-.åí¡Ô-B¸†2c*à•m„ç#ŒÓ¶Ÿ×—ù‡_ë»G@“Ú©GÿWc·š?ô¬¿ IrÚ}â]]Ku$WÓÇæÊrHVÀöAÅjEÿ7õÔè CKERQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEɦŽÞ '•¶Ç—vÆpÉ5ZÛSµºŸÈŒÌ$Ú\,nÿë ÿЭUSÊO3ư²ÈÁ†é#åû§Ò€%¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ¤2J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠÏÕô‹[Û+Æ[y/$…‚HÑ®íÛp¿1ü+FÑ.ŸS/ªéÈmÄNM²A¸•ÇžÀó]V.ÿç•¿ýþoþ"Œ]ÿÏ+ûüßüEa<<'57º%Å0EoÅIkÑBø ã|#Ŭ_îŠëä–x|ÑGå¼É!%G® Šä|'Äýn†wÐ}ÁE}ÁE0uþ¬×x¤n8õ8¯EºÿVkÏ|H3qõqü謊þ(m­ãerD1ôû£ÞŸý©÷$ü‡øÖL’!òÀuÊŰÏC±N?QQâßxóJ— íœf¤‡&mÿjAýÉ?!þ4jAýÉ?!þ5‘EfkÿjAýÉ?!þ4jAýÉ?!þ5‘EfkÿjAýÉ?!þ4jAýÉ?!þ5‘EfkÿjAýÉ?!þ4jAýÉ?!þ5‘EfkÿjAýÉ?!þ4jAýÉ?!þ5‘EfkÿjAýÉ?!þ4jAýÉ?!þ5‘EfkÿjAýÉ?!þ4jAýÉ?!þ5‘EfkÿjAýÉ?!þ4jAýÉ?!þ5‘EfkÿjAýÉ?!þ4jAýÉ?!þ5‘EfkÿjAýÉ?!þ4jAýÉ?!þ5‘EfkÿjAýÉ?!þ4jAýÉ?!þ5‘EfkÿjAýÉ?!þ4jAýÉ?!þ5‘EfkÿjAýÉ?!þ4jAýÉ?!þ5‘LIcwtIž2¨9+žyô¢áÌͯíH?¹'ä?Æ•5(^E@²eˆ bE4SÆ$†D‘ 2Ž85bßþ>bÿ|:.Ì߬X[\ËÅrZ7(HUÆAÇ­oW˜j¿ò½ÿ¯‰?ô#S98ì$â´:ßøL´ïùãuÿ|¯ÿGü&Zwüñºÿ¾WÿŠ®ŠËÚHËÚÈî?á2Ó¿ç×ýò¿üUð™ißóÆëþù_þ*¸z(ö’k#¸ÿ„ËNÿž7_÷ÊÿñTÂe§Ï¯ûåøªáè£ÚH=¬Žãþ-;þxÝß+ÿÅQÿ –ÿbÿ|:©¿^aªÿÈb÷þ¾$ÿÐz}y†«ÿ!‹ßúø“ÿB5]…[df^\=¬T‹ÌüÃv0=zmÛÞFÒ4"4ΆÎï^­ÁäR*ª(UT ;V:XÃK \ܰ;¥üÉm);Ÿ?~ÇAŽßZé*›évnìí;Ûs í´Ÿ¦qN.ÅFV$k’°E$pË0pÉŒŽù"¬P`QI’fÎòÜÅŸ3lrIåª9䓸sO1ÏY¯˜#Ú>aœsúÕ‘gÉæùƒn1À?JUµ…%ó>l“Ôàè: ®dUÑ\ÜJafVÁyö'œCQo‘^[”“ææãüjà³€Iæùƒn1àý(ŽÒŸz'Ì3Œ’qôÏJ.‚è©ç²t᧘¨`¥°«Æp:ô§¬×V2Né$*Žë‚ ’EY62•)ÆíÜ0}½)ZÚ'‰ce%Tä|Ç ýzÑtEy¾ÓoÈdÚZBH Àéõ¦C,²¬HŒ¥ +0Q3ÇãÒ­›hˆ\©ùAPwàõ¤{X]QJpƒ † õ]ÑNâI#¼…ne\yŒ8RÇœ}*ÅÞä±dÜYØÉîO)¶…ƒ‚™nO t§I K–ã+ÇsüèºÐ.´+*c‘øõ§Ì‡tGw¹,Y7–vÂ8ÉÉÇo­4†Š[x —Q—%”pã·©« rEåºåxã'·½ o0!y ·$“ÅMÅuc<+9äó7…ÀÀ,>†Ÿ$ó$ŽÜ¸ò°ª«Crx­ 8#C°àãqãž”¦Ú#/›´‡ÎN€ ®d>dMETQEQEQEQEQEQEQEQEQEQEQEÙ´NŠ©0>´êFUu*À2‘‚B(•3¬e¢W ¹ÂãåÓpÿ?•o銔“~âYL1ê1ÛéMH³Ž b’²K‘éƒíV-mb³€EÂŽI=Iõ5¤æš²4œÓVF¦‘ÿ!%ÿ®Rÿè¶­¯ }Ñõ¬]#þBKÿ\¥ÿÑm[^û£ëS…û^¿¢=ÿÃ¥þù³»ƒî (ƒî +¨æuþ¬×žø‹þ>bÿ®‹üëЮ¿ÕšóßÇÌ_õÑtë§M<J¬Zñ’s÷µÙß‹ó?áZv_òµÿ®)ÿ Šž•…ÊŒ_ì‹ïÅùŸð£û"ãûñ~gü+jŠ,.Tbÿd\~/Ìÿ…Ùß‹ó?á[TQ`åF/öEÇ÷âüÏøQý‘qýø¿3þµETbÿd\~/Ìÿ…Ùß‹ó?á[TQ`åF/öEÇ÷âüÏøQý‘qýø¿3þµETbÿd\~/Ìÿ…Ùß‹ó?á[TQ`åF/öEÇ÷âüÏøQý‘qýø¿3þµETbÿd\~/Ìÿ…Ùß‹ó?á[TQ`åF/öEÇ÷âüÏøQý‘qýø¿3þµETbÿd\~/Ìÿ…Ùß‹ó?á[TQ`åF/öEÇ÷âüÏøQý‘qýø¿3þµETbÿd\~/Ìÿ…Ùß‹ó?á[TQ`åF/öEÇ÷âüÏøQý‘qýø¿3þµETbÿd\~/Ìÿ…>-.xåG/8'ü+^ô4X|¨Ž¸ûßê7פÖÁ%•C3g矖» y`©¹ˆ I='-ÂQRÜá¿á Ô¿ç½§ýößüMð…j_óÞÓþûoþ&º-#Ä–šÅÝżJÈÑœÄ[þZ§MÃñíèAïÆ¨'¹d”nDE!OBI=}zTû(‘ì¢qð…j_óÞÓþûoþ&øBµ/ùïiÿ}·ÿ]Ѳ´ÿŸX?ïØ¨žÆËþ|íÿïÒÿ…Î!ì¢q_ð…j_óÞÓþûoþ&©]è"Âa 毤ÛJWpI®v1ŒàŽœÊ»–±²<}’î±…#èG"¼â\Ž|Ch‹2Úù{RiW?^(öqN'Aýh[oü$:}>Ú?Â¥]7ûšÞŽßK ¥yU»4·$ð3Œúöô®«Cƒ{FÐ~îà@* àútî@ü)Q‹v!Á%s±ÿ„nOú éŸ÷ÿÿ­Gü#rÐOLÿ¿çü)|º_.º~§O¹‡?ßøFäÿ ž™ÿÿúÕÐ@$_IÓÏÿZ¥òý«àbæQèçùÖUpЂÐÒ•¦õF×öÿ Æ“ÿ?ýj?°‡ý4Ÿü ÿëV ²‰·²‰½ý„?è1¤ÿàOÿZì!ÿA'ÿúÕƒEÊ!ì¢oaú i?øÿÖ£ûÐcIÿÀŸþµ`ÑG²ˆ{(›ßØCþƒOþÿõ¨þÂôÒð'ÿ­X4Qì¢Ê&÷öÿ Æ“ÿ?ýj?°‡ý4Ÿü ÿëV {(‡²‰½ý„?è1¤ÿàOÿZì!ÿA'ÿúÕƒEÊ!ì¢oaú i?øÿÖ£ûÐcIÿÀŸþµ`ÑG²ˆ{(›ßØCþƒOþÿõ¨þÂôÒð'ÿ­X4Qì¢Ê&÷öÿ Æ“ÿ?ýj?°‡ý4Ÿü ÿëV {(‡²‰½ý„?è1¤ÿàOÿZì!ÿA'ÿúÕƒEÊ!ì¢oaú i?øÿÖ£ûÐcIÿÀŸþµ`ÑG²ˆ{(›ßØCþƒOþÿõ¨þÂôÒð'ÿ­X4Qì¢Ê&÷öÿ Æ“ÿ?ýj?°‡ý4Ÿü ÿëV {(‡²‰½ý„?è1¤ÿàOÿZì!ÿA'ÿúÕƒEÊ!ì¢oaú i?øÿÖ£ûÐcIÿÀŸþµ`ÑG²ˆ{(›ßØCþƒOþÿõ¨þÂôÒð'ÿ­X4Qì¢Ê&÷öÿ Æ“ÿ?ýj?°‡ý4Ÿü ÿëV {(‡²‰½ý„?è1¤ÿàOÿZì!ÿA'ÿúÕƒEÊ!ì¢oaú i?øÿÖ£ûÐcIÿÀŸþµ`ÑG²ˆ{(›ßØCþƒOþÿõ¨þÂôÒð'ÿ­X4Qì¢Ê&õ¥§Øõ„Œ\ÛÜf t½GÈÜg׊ÑðÇÝZÂÑ?ä ?뜿ú-«wÃt}k,:³šóý݉V5ýßÕÜpQDpQ]'(˯õf¼÷Ä_ñóýt_ç^…uþ¬×žø‹þ>bÿ®‹ü躲ÿ}¯ýqOýTõ—üƒíëŠè"§ Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ô4´‡¡ éÏsBÑJ‹$n¸dqÃЊm¼±Ú»Á–URR2ÛwLàâàÑôËY–k}:ÒWî¼p*°ú*Ü?ñõ7û‰üÚ¹ÍÅZΠm†–±,`™Ÿí˜L°sžÙìk£‡þ>æÿ®iüÚ˜Ÿˆd¸“ÅÑÚ…Õ¦„X<:çÊ!¼Ìn?:ƒÇþ•UnµK¿‡×3.«47V«8™ŠfeÛ»–8ÃŒ°öõ®›RÐûS]B=BöÎáaò ¶d“9çržþ”ÅÐ,íôK.6›Ê¹Wó¥gÝ#³ýæ$÷¥ömýnUýëÿ[ÓÝŸN´wbÌС$œ’p+Èþ$(oA‘ÿ,_ÿJ&¯a†·†(P’±¨@O\ŠñïˆÅG‰ ùŒßþž&¢m]²b’9%QÌO'Úº=áa¾RD ËI ä@éúqX"ÙæS˜t«vvÖ–šÅ‘‚%FSvçæ9’3ôé]™}?kYuZþLš–ŒβûR¾K’±Ü$k· mV“Üf«§ˆ/áœÁ(#aÓøÇ­.¬ZKÀø Byëø~U›&$l‹< ªƵ©%®(óÛ³7£×.*[B6ç,Nz÷z÷ÏЫ#™di±-€r9÷¬¥²£'o¥i)Ê‚I$ާ­g‰œ%’Ôê -Q\g@QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE¥¢È@×9ô[Vï†>èúÖ‰ÿ!ÿ\åÿÑm[¾û£ë\ô7Ÿ¯è޼WÃOü?«;¸>࢈>ࢺA—_êÍyãæ/úè¿Î½ ëýY¯=ñü|Åÿ]ùÐueÿ û_úâŸú©ê /ùÚÿ×ÿÐEO@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@!èiiC@Ôƒ ¨êAÐR‘ÁM#G#HÛœªãqÆ2}N§Cÿs×4þmN¦Ãÿs×4þmL ÍC/J˜Ô2ô¤s÷«Ä>+Å,ZýÈ+²XåŒ Ø9Yä'¯ûÃõ¯o?z¼SâscÄ ã÷ÿ¥SJì±Í7¤j³YÊèÓÛLйaY•нñÇ¥\ºœiº­¤’²Å^ƒÍ ôàóéÆÏzÄ2Ù<Œà¥©9 ŽYr àúzÿŸZé¡)R•Ṍýõfwúî«g ÄË ó›ÈVFGderÏ#Xêš\ò*C#+…ådpH#¯Aïú×å¹Ê–2G\‘V[²F7n=0Nj%w+½Ì½’N÷;è¦×ä•àkAyQô¯;Ž BL*À*Çœçäúžß_zïlǧZ£ Ä€Ó ¨™Ñ–ÅŠ(¢ °¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(KDÿ€ÿ®rÿè¶­ß }Ñõ¬-þBþ¹Ëÿ¢Ú·|1÷GÖ¹èo?_Ñx¯†ŸøVwp}ÁE}ÁEtƒ.¿ÕšóßÇÌ_õÑz×ú³^{â/øù‹þº/ó êËþAö¿õÅ?ôSÔ_òµÿ®)ÿ Šž€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ CÐÒÒ†€#©AQÔƒ ¤Óaÿ¹¿ëš6§Saÿ¹¿ëš6¦æ¡—¥LjzR¹ûÕáŸLßð”[ˆÓ?èïÎéâj÷3÷«Å¾&)Bйø=ÿÒ&¦…-?Hnrê¿NjöŸe\³¹hÚEÞ ñŒóǦ;Uû}Vy·Èʳʱ\ “ÁàsíVÚÏÏ·XKÈàfPÉ€¤1ü±ù×F¿³­v1–¨·­Åhìïmnª GhݸòN:÷è? …™°£Ûð«,bQ…#SQªG»n9Æs[VµZí§£1cQŽ“œz܃þ=ãÿp*ÆÌ`á ~ýzÚ‡˜#ÿt*1P¡%MÝõ6¢ÇÑEÂnQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEihŸòõÎ_ýջᎃëYÞ±û@¼»ó6ý–3òíÎíÊïlV†:­cJ..WêÿÈè¯8ÍC—¢·âÎî¸(¢¸(­Žq—_êÍyãæ/úè¿Î½ ëýY¯=ñü|Åÿ]ùÐueÿ û_úâŸú©ê /ùÚÿ×ÿÐEO@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@!èiiC@Ôƒ ¨êAÐRi°ÿÇÜßõÍ?›S© ÿ¹ÜOæÔÀ˜Ô2t©E% +½^[ã ÜkÄWv¢H˜HKŒùòž¿z‘5s:Ýä¶:{ËS3NÑG¿ f”ì3šÆ½GÝ+—©;3ÍWÁ÷ÂO0ý ¿¯ÙZ– ÝÃ8˜Å;7;Fs]ÃÜˤä\_½ô¬bSª!PÎpÚ½9ïéÖ6´Éq-´6¾eÀ¹ñ©“hcå‡$œpϯJâXÚ—¼b¿¯_SOa¬â¤ðÍÛ’ËÒ1ôˆÑ†nW>d.Oý2`v1ë·¬QCbxÍ(hÌøE¶ÒwmÉçâ´´û¿·éÖ÷{6yчۜã#¦iË0«\P¾­M³Ï×Ó¯K[ŸÆ6«©§^"*‹KŽ?Õµt«­9†îñ­@°·ó?{æ|îPp˜é{þOPÕnšo=¹´¸ß‹åͼ2Tœ Ä{õ4þ¿ZNÎ(=„#ªf?Ø/çÒûö°^ÿϤÿ÷ìÿ…tK®»L¬lñdóµºOæ|ÅÁ#•ÇFsøSOˆBÙ[Ü›n%²’ïh~›B½9Îî¾Õ?]«ü¥{ísŸûïüúOÿ~ÏøQö ßùôŸþýŸð­ÛÏÉaºÜÁkÄêΫ%àD 1üeG'=1øÔ7úô×zTçN·-›´<6Ã`qŒ–àútëMc*¿²¾ðöQîd}‚÷þ}'ÿ¿gü(ûïüúOÿ~ÏøWO=Ç••»Ìc,ª¹Y óå±çûÃŽŸáTâñ+-´w7¶^L@ÓÂÑËæ 2TŒ }G½ Uí*QÓSì¿óé?ýû?áGØ/çÒûöº› Fææò[[«4·‘"IFټ̆$`ü£å÷¨u«›¸&€E%Ä6ż°[ùÌch# לvê)}~§7+б¯sœûïüúOÿ~ÏøQö ßùôŸþýŸð­yîï®ô­:êÞúk{›ÕR$HÊn#,Çr“€2zö«w²^Á«Z$7Í!–Aº×Ë\€ùœœd}sŒ1Oë³½¬º÷è/e\ç~Á{ÿ>“ÿß³þ}‚÷þ}'ÿ¿gü+¦·Õå¹Ôg°K]—n2–•GðqÎî¾Ø5Ÿ-õÕ…òÜ^¤sÅréç$`QƒÀ?'4¾½Qo?b»œïØ/çÒûö°^ÿϤÿ÷ìÿ…k%î¦údR §xZé—íQ[†”õ‚#“½9ÅFšííŤP$ÒM+M¾X¢Pû#m»‚¹‘×§µ:k’Éw[1öInÝ&2üÅ”6NÜtÊ‘×ð§õÚ¶¿*ûÃÙG¹Îý‚÷þ}'ÿ¿gü(ûïüúOÿ~ÏøVä>%an./,Ä0½«ÝDÉ.òʸÈ#‘ëMƒÅ1Í ø†&Ë–÷+*¹íPXzú{ÑõÊßÉø‹ÙC¹‹ö ßùôŸþýŸð£ì¿óé?ýû?á]‘=Ô׺¨»Q¤¨k)uQåƒÁÀúôªPëóEaÃdeŠ+4º•¤¹%œôÊüÇå=H£ëµ/eÓ¯qû(÷2~Á{ÿ>“ÿß³þ}‚÷þ}'ÿ¿gü+y5{ˆgÕ§™Qì-NàÛðê<µlÛƒÉê[½Goâ˜æ†säÄóGåìK{••\¹Ú °=}=èúå^‘]?{(÷1~Á{ÿ>“ÿß³þ}‚÷þ}'ÿ¿gü+ro5¬r-ݼÜ-À€¹Äy(%ÊŒ {u§Ûëò_-˜³µŠGŸÌݺ㠾[pÁNî¼tÍ\­kò¯¼=”{˜`½ÿŸIÿïÙÿ >Á{ÿ>“ÿß³þÚÝ,k †ILpÑ…-ønã?Z¡¡Ý\ÜØÌ.ŒñLñ‘"…uoËœxã‘P³ ¸¹YhW°WÜæ~Á{ÿ>“ÿß³þ}‚÷þ}'ÿ¿gü+_EÕî—O±ŠökrñNÓîÞTdïÈùxç<Óâñ+Ü. ki®>а*ïtG([;Âÿ²F1Z•—សvѨêAIÿZ™I$ô;¸>࢈>ࢵ$e×ú³^{â/øù‹þº/ó¯BºÿVkÏ|Eÿ1×EþtÝYÈ>×þ¸§þ‚*z‚ËþAö¿õÅ?ôSÐEPEPEPEPEPEPEPEPEPEPEPEPEPHzZCÐÐu è*:YfŽÞÝæ™ÂE–fn€¦TR9ÌÊc€¬$m£¾9üMsÚ‹íõJkFÆX–¶Ã于 ú7|z}+£‰U¯°ÎÄ]¹í’sü…0 :Ÿ½ŸãsÿØÔM©ïXþ7ýj“Q»Þ?ÚÛjɧ†<ô¼þ›FkñF¥¢iÅ4Z臚0’Ùv;PpwdûW_#y€£€Êx Œƒ^+ñ$”ñŸ%¼»R‹žxY¥ô³«IU+)IÇTk¶«á†3}«\¼™Þ5@òÄÀ  ¸"1È#99¦\jº ¶fµÕ¥žìÎ'ͺ6V ·‚±ÓŒm¯>pÀ£;®âyZ–)ãG1dÉŒc·¬>§ÕþäR¬û¿Û좲¶úª›äiYçˡöHÿTÁ†qØtã£câìì­ì­d´ž8bD$’ÆÍÇR¾QÇ9ï^}»Ä±Žâyã×Ü ×ƒx™"Û»#~ïLÆ×ô¦ðt壸{Y#µGÑÀMüÿf¸ ¾Ô©òòß{.ïS×ð¨Œz3Å*Í©ÝM#ª(šAó VÜ¡p¸ëÏ ç¾kǵ ;Ü9ÎGèú ’œ²øFÞóü?ÈQ®ÞèßC¢¥ÒËöéÚ5”̶ä-d9Ëcn{“Œã'¥B°hŠÔ®š#–ñÆÃˆ‘ñ¿&{ d慌êPþgø‘^Õö:K«*á ‘5 íæ…J$°©Ý´ã åH#ÛµCxt›Ì“©ÝDï‘+F¼ÊœðÙB;ž@kŠKÕþäÙö7%¸´kûVKìÚÅ'š|ÍåP*¸œ“žµVÎßL‡MŽ+»÷º•-š÷ÓpÁÚBϩɛEWÔák]þäÕö4,ÎÆš[Y„¯ä !™ÈDbÄnrGO©5¯}¦j¤Ô'Žé•عÇЊæ(¥,½ßáþ@ª´u {£›‹Y…Á_²«,h¨BŒ€:c°}j?Nœ·Ñê÷Q´¥wÆ#R¤/Eå ¯CÜ×;EJÀSîÿòlûh¶÷kt—’ù᜻•9—wfùy˜¤šMk+»_·L‰u)•ÙWI*F8èA®zŠQ…ïÌÿòlû!¼²6†Ýµ»Ã–Ϙ#UlcîŒF†}ê9‰äÛGoy5©¶R‘¼*w?xÊsž¾¹æ¹ú(úŒ;¿ÃüƒÛ>ÇK%ƈúdzzܼpÆË(­¹JA޹éö7Ú]”‹éf–gß$²¡ÜÇŠà‚¹z)}B­wø{gØÞû;¡3j72 ™§H~Ev$“‚zž¤ÒÛ"Ò[g·Ônc0݉UI 6WÜôÇZÀ¢ŸÔ¡üÏðÿ ö¯±Ðj/¤j2;Fâ$^L¾Jÿ¬Nx9Sêy<Óž]E¸Sw(Ë­…<ÛŒ|½>Aú×;E §3ü?È=³} ÙWG¸¹3Üjw2¿7 pøA‘•sU#0 a&ûhŽÆ)Þu„3>Y coÞ'ïíY´SX(%k¿ÃüÕlßBû=¼s#ǻۅe?263œ/_”tÅ;ÍÒÞÊK[Vêá©Va£*r •AÈ899é\õ¾£æ‡ù¶}ŽšÆóK±3±ÔgžIØ3É2rpu@è=*¼k¡Çk%¸¼›d–‚Ð’§;î~ï_˜ÿ…`ÑGÔaüÏðÿ öϱÐÑš[†7ÓùW ²h6òíÏÝÈ8¡*;‰¬[LšØjSÝ1ÚcóÉB…NA ±ç޹ ô¬:(úŒ;¿ÃüƒÚ¾Æ­šÙùµö§'ÚÞãÏY¢ÉhÈP£`€‡ô­¼ÓD°NÚ„ÒÏnŠò!ù·`’p£û£¦+™¢œ°0}_áþ@ª´tÑjk¥Ehú¬âdE pŠK’:Ÿ™O_zu•ö“cŠ·’Jò¹y$•X³±ÉÀ Ú¹z*^›¾¯_Oòm#a-t!oäK¨ÝOÂÐÆ²õJzíÂŽ}Îjh²"¸[‰5+™åYV]Ò *¥@ùP a`ÑTðQiþäÕö7›ûåhu˜&Y$q,kó|í¹—• Œã¨íMÛ¤ˆ- É‚ÛiHŠ|¥”ävg9ô"°è£êPþgø{WØébÔ,×K†ÕµiÄÈŠáP—b:Ÿ™O_z‚Õ4U‘EÌ’,°˜d!!fbxQÉ,}½«Š_Q†º½}?È=³7˜é8·hõK¸§†!ÎéèÙBåQ$ZD>_Ùõ{Ø6B!&5užr‡œ“ÓE?©CùŸáþAí_c½Ñå±:嵃æ+xƒÀÁÇ^½*†z~5„¿ä¬ÿ×%þORøg§ã]éªqåFrww;¸>࢈>ࢴ˯õf¼÷Ä_ñóýt_ç^…uþ¬×žø‹þ>bÿ®‹ü躲ÿ}¯ýqOýTõ—üƒíëŠè"§ Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ô4´‡¡ êAÐTtOç}•þÌcí>Y»»gâÓaÿ©¿ÜOæÕÌhƽ©êRÃw´PÛ’·BÊCöPK}séQ]ð;[ŸËëTì—L E¯m%å̶ͭÉhÌ[2î?»^H`0Ç ãšì5/麥ÒÝ]E)SËÄ‘¹ÎÆõª—ÑÞ hE«D–»Œ>LÒFT·Þ9V“êi-­ýn7«¿õ°ÝÆãMÑ--.¤ß4k†;‹c’BäõqøW–|IÛÿ $õ¾?ïüÕëÖ¶‘XÀ°CælRHó%iýôÄŸÖ¼“â4aµøI$~åú×y©ß[ŠÚ`“ Ù©c ±pJòÇzhŒ[{PˆUv«¨Pwm Ï\óÏ®i0E¸7´ŠÈA^µ4ô–9UdLƒ¹‹ÿkå§åY–ºC˜òAÁõã5³nbC¶œ“Óõþ”£¬¬SZYÙ¯ÄfA·=03Æ{qWk*Íd“T‘— Í»©Ï~8?j׫šSTêB+¤WêcO`¢Š+Ì4 (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€:¯ È7Yÿ®Küž¥ðÏOÆ¢ð—üƒuŸúä¿Éê_ ôüh»ƒî (ƒî (—_êÍyãæ/úè¿Î½ ëýY¯=ñü|Åÿ]ùÐueÿ û_úâŸú©ê /ùÚÿ×ÿÐEO@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@!èiiC@Ôƒ ¨êAÐRqM‡þ>æÿ®iüÚM‡þ>æÿ®iüÚ˜š†^•1¨eéH çïW|E\ø‚Ÿùbýÿé¼µì'ïW|E`jqåß½|ÔS7“ó²nEç’âúÿ•LH8äûÔ3ìkr§oY°ö9ôÊœUÚB&‚ú&ü‰f*p¬:Ùíÿê­Ëk¯9e µÄm°•=Níõ®n/ê.c•­¼¹Sæ2óìO\{RÜé×°ÏòDb—gɆ\Œc‚Aõ檔_´VW7qƒœ¬tv3“{UÂL§×ëÇùïZõÌh1º€LH?1ÚNqòãú éëÑÍj{JÊV¶‹s– ×IÜ(¢Šó (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€:¯ È7Yÿ®Küž¦ðÏOÆ¡ð—üƒuŸúä¿Éêo ôühºƒî (ƒî (—_êÍyãæ/úè¿Î½ ëýY¯=ñü|Åÿ]ùÐueÿ û_úâŸú©ê·Û¾ÅmäÁGä¦ JTŸ”vÚj_ø™ÿÏ­·ýÿ?üMY¢«ÄÏþ}m¿ïùÿâhÿ‰ŸüúÛßóÿÄК*%wgŽhü¹S”Œ„ÀþU5QEQEQEQEQEQES%š(|²$kýçl "š)Ó|R$‹ýä`E>Š( Š( Š( Š( ô4´‡¡ êAÐTu è)´ØãîoúæŸÍ©ÔØãîoúæŸÍ©9¨eéS†^”€®~õx÷ÄQ~úã'oúo-{ ûÕå<²žç[‰ãŒ²ˆä >|¾´˜ÎÆ2pÝé†6ØØ8#­DÒ®s†„ã=w/øÓ¤Ñ§À(3ìH¦›Bh±¥–2no,YÏÍ»†‚¸¨õpª¾ç<09?Aý [Ñ–òÅZ³¢$¹Vóº œ¯R x{“Ö«êV—WE 6àÌX£ž1ß¾Oå^ ÁcS½£½újŒêEû+•t¿ùÀFqƒ×žÆº:ݰ¹‚ö9$‹jŒ‚A˜­º×7œ'Z. 5e·«#šŽ¡EW”nQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEu^ÿn³ÿ\—ù=MáŸëPøKþAºÏýr_äõ7†­wP}ÁE}ÁE2ëýY¯=ñü|Åÿ]ùס]«5ç¾"ÿ˜¿ë¢ÿ:é½w¦O¤ÚϦ©²»1[Åp—¹r€óÞ€äg'¦qSê~(ŽÃ\²Òáµ{‡žtŠyíX7WЛü½Û¶óÓ8©­&»¸ŽãíVfe•Ò1æ‡ót~:gÓµQðΙá]:Êò?.ⶺn'¸â…þ@Z?òŸþ¸Eÿ¡ITïuý:ÂàÁ<íæ€ Tœ®ÐqWü…gÿ®èRVF£áKJõîž{¨¤|n2à1žTó€áYÕuw¿™µIË÷­¥ä;þÍ#þzÏÿ€²ÿñ4ÂY¤ÏYÿð_þ&© §ÿÏíÿýõÿGü ºüþßÿßQÿñÏ͊쎾LóKðÿ"ïü%šGüõŸÿeÿâhÿ„³Hÿž³ÿà,¿üMRÿ„OÿŸÛÿûê?þ"øAtÿùý¿ÿ¾£ÿâ(æÅvAÉ€þi~ä]ÿ„³Hÿž³ÿà,¿üMð–ióÖü—ÿ‰ª_ð‚éÿóûÿ}GÿÄQÿ.Ÿÿ?·ÿ÷ÔüEØ®È90Í/Ãü‹¿ð–ióÖü—ÿ‰£þÍ#þzÏÿ€²ÿñ5Kþ]?þoÿï¨ÿøŠ?áÓÿçöÿþúÿˆ£›Ù&ù¥ø‘wþÍ#þzÏÿ€²ÿñ4ÂY¤ÏYÿð_þ&© §ÿÏíÿýõÿGü ºüþßÿßQÿñsb» äÀ4¿ò.ÿÂY¤ÏYÿð_þ&øK4ùë?þËÿÄÕ/øAtÿùý¿ÿ¾£ÿâ(ÿ„OÿŸÛÿûê?þ"ŽlWd˜æ—áþF®›{o~×èEY<¸É·Ú¤áHÈäŸÒŸw¿ãSÁªOco¨Ì‰såÇ,PEÛ™dIà“‚Ä¯Ì¤NqÇZµ³¨Ipy(·2Üù1Í-¼‘#.Íå¶6±Ï^õÄñuú%ý|Í}œ ïì-Kþ}¿ñõÿ?°µ/ùöÿÇ×üjÓkRŲêæ$š®òÈ¥s岎2NïÖ¦¸Õõ+/2 Å£\2Dñ:#l¤C Ù8Îs‘Ÿj>·_²þ¾aìàgÿaj_óíÿ¯øÑý…©Ï·þ>¿ã]Ÿ{q'Ûb»™mdØZ!\m œuõ5–uûøl£»š;cͬ—"Ê]À1ÏÍ‘Ücš•®Ý’_ùÙ@¥ý…©Ï·þ>¿ãGö¥ÿ>ßøúÿoi··’^Íiz`gXc™^*lŒIäõ¬º¹ŽðÜgPP5&çy‹Aåï+·fãŽÀ|£žô㌬ÛZ_1:pµÃû RÿŸoü}Æì-Kþ}¿ñõÿÛ‹í â™K©$‰íK¬GSç€:ŸsQëZÌštê!’7ØËîØ-ŒïSµ;ãpç–6³i$µõ£{ô2?°µ/ùöÿÇ×ühþÃÔçßÿ_ñ­½ ï%Žåç¸I!ûLÊŠPï\HÖ,r=*¢¬×n¯wËÁ;M*™Á#Ê…éÓ?‰£ëÕnÖŸù‚£gÿaj_óíÿ¯øÑý…©Ï·þ>¿ãZ—]]ønÚ[w•®VÝXtñd•êHûÇØñTnµ;›…ã2KgŠ]LVs’nÏ?(=ž2=j–2³Úß×Ì^Î6L‡û RÿŸoü}Æì-Kþ}¿ñõÿìÄ‘«¯FŠÃ·»“NºÖ¥½»’x­Õ$ù°¤áGAYÇYßE§¯ù•ìc¡—ý…©Ï·þ>¿ãGö£ÿ>ÿøúÿIc¯¬ê—j0\Iº"Š'4fÚp‚}‰¤³¹ß`—"ü^Om©‡ •v G†È8¯Ö«­ÒûŸù‘ìákŒþÂÔ¿çÛÿ_ñ£û RÿŸoü}ƺ»Ù'†Êy-¢ógT&8ó÷Ž8‡£%Íݱ2Ú ù™­Ý<’6pQ›#¯<út¬ãŽ­%{/ÇüÊtbŠØZ—üûãëþ4aj_óíÿ¯øÕßí½F=: ¥XYîç)ném!ýÞÒw˜Á,IÁÀ¡«É©\·†î/¥€Åqr¦6L•Î+rÀ8>´Þ2ºè¿óJ ØÄþÃÔçßÿ_ñ£û RÿŸoü}Æ®]ZyvÖWWBù‘|¥ŽR¨/#Áóœç8š[«ûŸí‰å•\ØÚO8Žà¡ ÁNâ |ã,8' RÆU{[úù‹ÙÆ×)aj_óíÿ¯øÑý…©Ï·þ>¿ãVí®.>Óiznfg¸¿–Ýá.JÀz6ž½k¡º„Ïk$`°,8Û!ŒçýáÈúЉcªÅ¤ÒüÌjŒYÉÿaj_óíÿ¯øÑý…©Ï·þ>¿ãZ]\é7v²<Íuop˰ݺ㡠昌rFj¤wš…Í–›e ¼’²Jn Oå3Ø)PàÔõœu\«åý+÷²‰ö£ÿ>ÿøúÿØZ—üûãëþ5©§\G.©i=¸uŠöÇ{+¶NP¨žç F{àVõg<}X½—õó£q¿ØZ—üûãëþ4aj_óíÿ¯ø×eEOö^Ëñÿ2½„N7û RÿŸoü}Æì-Kþ}¿ñõÿ쨣ûF¯eøÿ˜{œoö¥ÿ>ßøúÿØZ—üûãëþ5ÙQGö^Ëñÿ0ö8ßì-Kþ}¿ñõÿ?°µ/ùöÿÇ×ük²¢í½—ãþaì"q¿ØZ—üûãëþ4aj_óíÿ¯ø×eEÚ5{/ÇüÃØDã°µ/ùöÿÇ×ühþÂÔ¿çÛÿ_ñ®ÊŠ?´jö_ù‡°‰Æÿaj_óíÿ¯øÑý…©Ï·þ>¿ã]•hÕì¿óaþÂÔ¿çÛÿ_ñ£û RÿŸoü}Æ»*(þÑ«Ù~?æÂ&w‡,nl´Ý_íìßíùÎz}i¾þµ·üƒoÿë—ô5‰á¯ë^ž£«MN[³žqQ•‘ÝA÷A÷¹.¿ÕšóßÇÌ_õÑz×ú³^{â/øù‹þº/ó ÞÒk¤±¶XàB˜-1S÷Gm§ùÔßh¾ÿŸkoüoþ"™eÿ û_úâŸú©è?´_ϵ·þ7ÿGÚ/¿çÚÛÿÿˆ©( bI ÒO6Á#…]¨I qÉ=OjšŠ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(«Xîà1J8êê§ÔQkk¤(‡I=XúššŠ(¢Š(¢Š(¢Š(¢Š)CKHzޤGK,¢ w”«°E-µ³vu4€’¡•¼§$›\¸Ø[wà9®A×5KÍJhu >æ¥%àf¶uü HÁãœúçÚºH@ûd§¸qù·øS¹º¸þ÷þIÉþ5]\ÿÿ$eÿ±{¬išt‹ö£ijî2«<Ê„P ¨îõm>ÖÞ;‹‹ûX¡“îI$ʪßBN *½Ô ó„^íöWù'ñ¬oKcl°ÚO³BcYÃù9çšée•UãpèÃ*Êrõ¸O¯úLjIX£I@ã8ŽœùQì¡Wݞ•G̈n5mk‹±=”ìïˆf8m¼ŽŒŒðzÕ]GPÓF¬Kr»ä#ͺR§‘Ãyã±®}JäÜJìùg}ÄcŒÓÿ¶dqɃ¯©>¾æ¹þ¡ô¿Þs}n½ú­…þgd‰,7´bE- 7˜rÃŽAÇ|ôëDz·‡ £[+½®U‰f,~C•/:W%«lÑ·›Ë鵎;ûýiésm)]¬Ž„ÒúœnÛ¿ÞRÅÔ¶§woâ 1ZYâ‚à4íºC€wÿ{Ð ª—bP¶W•6‰[¨Q»åýœV ¾ß!v¸uìýKI`©-¯÷Š´šLé[Ó#¸3¥¼âSÆ[î‚H{ÜÕAs¡ “?Ù.Ëy†]­#ßœîØ_nsÏJÆ¢…‚¦¶¿ÞÖGKý»¦ý¯í^DþvÏ/vÝÎqØëU®ï´[Ùüéí®‹¶¹@À€ÁXÁõ¬:),%ª¿Þ?k&tú®“ks,ðÛÝ#ÊIq»*IêvîÀ>àS!Õlb{Õ+;[Ý6óÀ6’0Üîèzþu…E?©RóûÃÛHܸ¿Ñ®aŠ-îü¸—bªHÊ6ú8Èã¾h¸½ÐîŒ~m”ø<°å?º@` ûŠÃ¢©Óîþñ{Vt6ÚÍ…´÷Rª\¸;eWŒ(P>‚¤MwMŽâYÒ Ä“mÞØãüUÍQKê4¼Çí¤t±ëºlSÍ2A8’l8à`¥T—QÓžXvG:D·æDÚ˜ý¹ÝÀÏ?€¬Z)¬%®¡íe±½oªé°YËlRé–WwvRK1c‚#¯j„Í ÝÎ郫«3HŘ67e‹äçhïÚ±è£êt÷WûÅídmý³E6ßgh/ž=ÁÇ™3³) ±|¯àEX]kMK3käÝ4EJçy õÉ,I®rŠ “ÞÿxÕY-H§Òü¸MÇÛžâ(„>lR¼EŒ…qëVe¿Ñf¼[©-. À©Îxb½ ]Ø$v$qXTSx:mÞïï´fâßèÉx÷ik:ÎÙ;º€HÁ!w`Ü“K¥¥Ç¥E§˜îÌ1¢ *v1Ç|«? ¢—Ô©ùýáídmý³E¢Ùmï0åò’²±cÔ–¸þ&‰/49m¡·6w 9òü³°®zò{óÏzÄ¢©Óîþðö²7mõK/ÂÇ0D…`†5@G'ø»ñù »ÿ -—üòŸþùã\­ž“ÞãU¤Ž«þ[/ùå?ýò?ÆøIl¿ç”ÿ÷Èÿåh¥õ !í¦u_ð’ÙÏ)ÿï‘þ4ÂKeÿ<§ÿ¾Gø×+EP¢ÚgUÿ -—üòŸþùãGü$¶_óÊûär´Qõ !í¦u_ð’ÙÏ)ÿï‘þ4ÂKeÿ<§ÿ¾Gø×+EP¢ÚgUÿ -—üòŸþùãGü$¶_óÊûär´Qõ !í¦u_ð’ÙÏ)ÿï‘þ4ÂKeÿ<§ÿ¾Gø×+EP¢ÚgUÿ -—üòŸþùãGü$¶_óÊûär´Qõ !í¦u_ð’ÙÏ)ÿï‘þ4ÂKeÿ<§ÿ¾Gø×+EP¢Úg¦jpê:n§ä¬‹åÄ3¼Ô7¡öªþ¦¡ð—üƒuŸúä¿Éêo S]4éÆœTc±““»;¨>࢈>ࢴ$e×ú³^{â/øù‹þº/ó¯BºÿVkÏ|Eÿ1×EþtÐiúäÓji¥Ak[x¡ó^K¯†[rÇ´îã9æ¬Yk7Zü«i§«XE3B÷O>ÒYxm©´äÆr*¬š úœÚeÔ×­½·“4H¶ß½Rª8ó7t'¨Ç|TöÚÕ•Üâ×R §Ï+JöÏæ¹`¯¸`ÏC@2O xi2ÇhÕÊ5µâÌA^Π§ZÉÓ¦ÿq?›W1 /‰%ÔåþÔ»”[Û’Œ­`LÝŠ íÇ9úZéáÿ¹¿ëš6¦+¬¥ÃøéE¼ö0·öYË^DdR<ÎÀ2óU4á6¶‚M=.`¸ž4šuDÿ>Y¸SžÝ=ë°¾Ò4ÍFE’ûN´ºtVžr $T7zF™sPÜiÖ’ÅýÚI²§ÐÅ.–þ·¸Û»¿õµŒ_4gÃiác/Cn UÈ,§å'${WžøûUµÓ|Jâf¹Ý6Ÿ*IŠ!oµHS%y'ŸáÀë^¼‘¤J±ÆŠˆ£ ª0öàß[dãýÿô¢j´îÉkKÌW±[ìÛ:œÄ>÷9>äóù~0’id[œ Ü.å¾=MdÈÉ&”8ÍiÌdé£j2ñ´­ö­ÃøVI#aœ}Ïñ§Ægkp#’'›ŽV6qùŸÖ²ePA'éOFJ|Âöhô=!Y4¨Æç&¯V_‡X>…láÝÿ¡Ô¬^æË`¢Š) (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šê¼%ÿ Ýgþ¹/òz›Ã_ÔÔ>ÿn³ÿ\—ù=Má®§ýã@ÔpQDpQ@ ºÿVkÏ|Eÿ1×EþuèW_êÍyãæ/úè¿Î€;«/ùÚÿ×ÿÐEOPYÈ>×þ¸§þ‚*z(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š)CKHzޤGR‚ M‡þ>æÿ®iüÚM‡þ>æÿ®iüÚ˜š†^•1¨eéH çïW€ü_ø®Û?óêÿúQ5{ñûÕã_4”¿ñ-´Œ®qo*|¹Æï´I··ûÝë|5V©ÉÅ'dy1âœzV›ZÜ”UÔš’¿»B¤ü¼Úœ£ÊìÌ}¢3U9§\÷­Øô‡’ õûuõ4&á¾o—éR¹Eí—Ã@Úã§Ïÿ¡šÖªZD^F— ~›¿ô#Wk7¹¼uAERQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEÕxKþAºÏýr_äõ7†ºŸ÷Cá/ùë?õÉ“ÔÞêÞ4ÝA÷A÷˯õf¼÷Ä_ñóýt_ç^…uþ¬×žø‹þ>bÿ®‹üè¨Ñ5n®n¬ž#´ŽÜ$ŠOͺ%b¸þDVÍPÓ>Ò#PðÀ¶æŒnŽK¹Ø3¸mzO•~€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ CÐÒÒ†€#©AQÔƒ ¤Óaÿ¹¿ëš6§Saÿ¹¿ëš6¦æ¡—¥LjzR¹ûÕÂkÖ«s¬+ šyb(@„òœðyÝŸ½^⻉#¿·EU(Ù²;ùÒ9 óÅzbn½—fEO„àä·Š;©Ð{g¡ç>ßÒí\qøSäf‘p£ zTäH )<òvž˜?׆%Þ¬½N;jNˆdäƒÇâ*2Øo_|ѹ¹À•3'ßšÊ(£rÄæÎ3õþf¬Um?þ·Zí]}Áìà3þ«ßùëýôÂøF¯ç¬÷Ñÿ §l^ëKÑìbxâ·1Lì·1¾É …#*HÁ'®8ïŠ.&‚þÒâêxÖ‹KŽk4&;¹O|…•iõŠ×ßðó±<.Â5{ÿ=`ÿ¾øQÿÕïüõƒþú?á]%´ÂX—S*%PrUˆÓ­`iv–öº„š|ö–35Ä2Jn"PZE/ʸ#ý¡ß’ÆVw×o"½”-r/øF¯ç¬÷Ñÿ kxzådHÚâÔ;çj—9luÇØG¡¼bF6ˆâwõfÏ¿µJ¸‚ØÂ‘[¤¶zŒ*²[¡U¶ÐN ';XƒÉ­>³[¿áéþböqì/ü#W¿óÖûèÿ…0øzåeXŨ‘*…ÎHH÷ÑÝM$º}ÃXKNªÊŒX8ÁúÁ‡Ssp‘Ï{qŠ+´I4qy‘2ˆÏWnlñ×<ÖpÅ×—T7Joü#W¿óÖûèÿ…ð^ÿÏX?ï£þ¯{«Zé¶­$÷%íÎÕ;"EÒ@ä*n8ïëŽk@\j á{©®T­ÜqJT¹8ÎÒv’3ŒgéË]u@©Á»qøzædßų¦HÜ®Hààö§ÿÂ5{ÿ=`ÿ¾øSï4ë;ˆl,m¡Sx!Œ¤ùÿxÁ8=‰ä u>¬_é¶7ž"´ìyª>Õ4ÞXÞvà Ýׯ?ð[«}ûôíó³¯b§ü#W¿óÖûèÿ…ð^ÿÏX?ï£þ–SÉý²·wÞgšö[eR§Í€(l`çayÀ{9­½Fù£ÒšâÏ3—À¡C(8Ý…É uãÒ”±uÓJûù Rƒ¹‹ÿÕïüõƒþú?áGü#W¿óÖûèÿ…E`tÿì[˜§·šíVùÄqO•ÏL†'©9éÔãfëM†-ÏN¹….ï™Y V$ªÉlö Ç=xëTñU“µÿø"TâÈWÃ×/#Æ·¥Ó”9Êç¦x§Â5{ÿ=`ÿ¾øVŒ15®»g˜df±e•ÏWØË´Ÿûé¿:٬厬­gø R‹Üåá½ÿž°ßGü(ÿ„j÷þzÁÿ}𮪊¯Ö+ØÀåá½ÿž°ßGü(ÿ„j÷þzÁÿ}𮪊>¿X=ŒWþ«ßùëýôÂøF¯ç¬÷Ñÿ ꨣëõƒØÀåá½ÿž°ßGü(ÿ„j÷þzÁÿ}𮪊>¿X=ŒWþ«ßùëýôÂøF¯ç¬÷Ñÿ ꨣëõƒØÀåá½ÿž°ßGü(ÿ„j÷þzÁÿ}𮪊>¿X=ŒWþ«ßùëýôÂøF¯ç¬÷Ñÿ ꨣëõƒØÀåá½ÿž°ßGü(ÿ„j÷þzÁÿ}𮪊>¿X=Œ Z™6¦ê¾sFÞdC =zz‡Ã}OûÇùÖÜò ¿ÿ®_ÐÖ'†úŸ÷ó¯W RU))Kø'5H¨ÊÈî û‚Š û‚Šè e×ú³^{â/øù‹þº/ó¯BºÿVkÏ|Eÿ1×EþtÝYÈ>×þ¸§þ‚*z‚ËþAö¿õÅ?ôSÐEPEPEPEPEPEPEPEPEPEPEPEPEPHzZCÐÐu è*:t€Zcǹƒ+²8ãrã§ãO¢˜æ?òù7ýòŸüM4Á1ÿ—Ùÿï˜ÿøšžŠªm$nöàŽã?P¹ª×ºm£Â‹+D"€Epr>õ§U]VMbÙ]C(ŠFŒŒåFSùÔT§ŠÒdÓº2ÓI‘žòÍ™×c– K/¡ç‘Éâª\hš$Úy²ŠþÖÚÛŠCX'ÝXúWg±?¸¿•û‹ùV+ El¿þeûYw8û'EÓí¢†ëlD+6Ýß1Ëwã'°â¤‹MÐᣊ{ãfʨ€ ‘ž¹®³bq*6'÷ò¡á)7v¿þaí$s+˜Žî—öªÎrämŽ1“Ï<P®›¡£LË=‚™Áˆ<À½Ï?u›û‹ùQ±?¸¿•/©Ñíø¿ók.ç2°ik!‘oíC• XmÎAœôäÕuÒ´º7K.ž·äÊ#@äúç­uÛû‹ùQ±?¸¿•S¢º~/üÃÚÈæ|3Íó~ßkæmÛ¿åÎ:ã9éPϦèwR¤·ØM"}בŠý Ù§G·âÿÌ=¬»œ¸µÒVßìâöÐC·o–íǦ3ŒUs¤èÀÛ,WöÐÃnæD† ª…°@$Û&» ‰ýÅü¨ØŸÜ_ÊšÁÑ]?þaídrqiúDV¯möëg…Ù™ÕÈ`ʼn'9<òi£JÐ%dÓ„@Ø#M¸8ÈǾå]vÄþâþTlOî/åGÕ(öü_ù‡µ‘Ȧ“áøíÞÝ$Ó– ^5‰±÷ M®“ ¸·ŠöÒ8@À…Ó×Q±?¸¿•û‹ùRx:/uø¿óVHâ“@ð÷‘SÏctb]ˆ÷£°QÐdö|A¦ L¢þÔHT)q·8sÓšé¶'÷ò£bq*o Iî¿þ`ªI§Ø4o´=Àº²[‡]­0UGûÙÍ>Ú×L´µŠÞFŽ$£pè?ê6'÷ò£bq*_S£µ¿þaíeÜäæÓt;ˆÌsÏa*ó º# ßÞÁ=}ê7Ñ|;$1ÂçLh£ÎÄ0¡ ž¸³]†ÄþâþTlOî/åMa).Ÿ‹ÿ0ö²94Ý&Þé§R€f5‰m /eñÖ­í°ÿ œ˜ÿèö'÷ò£bq*OEî¿þaíeÜç6ØÐNÌl?è'æ?ƺ=‰ýÅü¨ØŸÜ_Ê—Ô¨/âÿÌ=¬ûœæÛú Áùñ£m‡ýàüÇø×G±?¸¿•û‹ùQõ*Ëø¿ók>ç9¶Ãþ‚p~cühÛaÿA8?1þ5ÑìOî/åFÄþâþT}J‡òþ/üÃÚϹÎm°ÿ œ˜ÿ6ØÐNÌt{û‹ùQ±?¸¿•R¡ü¿‹ÿ0ö³îs›l?è'æ?ƶôƒóã]ÄþâþTlOî/åGÔ¨/âÿÌ=¬ûœæÛú Áùñ£m‡ýàüÇø×G±?¸¿•û‹ùQõ*Ëø¿ók>ç9¶Ãþ‚p~cühÛaÿA8?1þ5ÑìOî/åFÄþâþT}J‡òþ/üÃÚϹÎm°ÿ œ˜ÿ6ØÐNÌt{û‹ùQ±?¸¿•R¡ü¿‹ÿ0ö³îa‰t»Æ†á&VŒò½° sþêÞ?κmY6—b…ó-%/Œà®3ÿ}ιŸ õ?ïç]áG–;Ûz³ºƒî (ƒî *Ä2ëýY¯=ñü|Åÿ]ùס]«5ç¾"ÿ˜¿ë¢ÿ:äkÿ\SÿA=Aeÿ û_úâŸú©è¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¤= -!èh:tH: @-QLŠ( «ÌjÛþ¸IüÒ¬ÕI] Ôíç•‚D#t.ÇTŒžÝ jQU?µ4ÿùþ¶ÿ¿Ëþ4jiÿóýmÿ—ühÝSûSOÿŸëoûü¿ãGö¦Ÿÿ?Öß÷ùÆ€-ÑU?µ4ÿùþ¶ÿ¿Ëþ4jiÿóýmÿ—ühÝSûSOÿŸëoûü¿ãGö¦Ÿÿ?Öß÷ùÆ€-ÑU?µ4ÿùþ¶ÿ¿Ëþ4jiÿóýmÿ—ühÝSûSOÿŸëoûü¿ãGö¦Ÿÿ?Öß÷ùÆ€-ÑU?µ4ÿùþ¶ÿ¿Ëþ4jiÿóýmÿ—ühÝSûSOÿŸëoûü¿ãGö¦Ÿÿ?Öß÷ùÆ€-ÑU?µ4ÿùþ¶ÿ¿Ëþ4jiÿóýmÿ—ühÝSûSOÿŸëoûü¿ãGö¦Ÿÿ?Öß÷ùÆ€-ÑU?µ4ÿùþ¶ÿ¿Ëþ4jiÿóýmÿ—ühÝSûSOÿŸëoûü¿ãGö¦Ÿÿ?Öß÷ùÆ€-ÑU?µ4ÿùþ¶ÿ¿Ëþ4jiÿóýmÿ—ühÝSûSOÿŸëoûü¿ãGö¦Ÿÿ?Öß÷ùÆ€-ÑU?µ4ÿùþ¶ÿ¿Ëþ4jiÿóýmÿ—ühÝSûSOÿŸëoûü¿ãGö¦Ÿÿ?Öß÷ùÆ€-ÑU?µ4ÿùþ¶ÿ¿Ëþ4jiÿóýmÿ—ühÝSûSOÿŸëoûü¿ãGö¦Ÿÿ?Öß÷ùÆ€-ÑU?µ4ÿùþ¶ÿ¿Ëþ4jiÿóýmÿ—ühÝSûSOÿŸëoûü¿ãGö¦Ÿÿ?Öß÷ùÆ€-ÑU?µ4ÿùþ¶ÿ¿Ëþ4jiÿóýmÿ—ühÝSûSOÿŸëoûü¿ãGö¦Ÿÿ?Öß÷ùÆ€-ÑU?µ4ÿùþ¶ÿ¿Ëþ4jiÿóýmÿ—ühž³ÔÿפÿÍ+—ðßSþñþuÒjSÅt²É‹,qÚʬèr2Åp3ëòšç<7÷ûÇùÒ¹ƒî (ƒî )€Ë¯õf¼÷Ä_ñóýt_ç^…uþ¬×žø‹þ>bÿ®‹üè«ÒuXî§}9 œ=¤—”°–@@爭U4è#ŠÎ'D¥Ž7r?ˆìUÏäåV袊(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¤= -!èh:\ŸZJ) \ŸSFO©¤¢€'ÔÑ“êi( Éõ4dúšJ(w7÷çFæþñüé( ÜßÞ?›ûÇ󤢀sxþtnoïÎ’Š]Íýãùѹ¿¼:J(w7÷çFæþñüé( ÜßÞ?›ûÇ󤢀sxþtnoïÎ’Š]Íýãùѹ¿¼:J(w7÷çFæþñüé( ÜßÞ?›ûÇ󤢀sxþtnoïÎ’Š]Íýãùѹ¿¼:J(w7÷çFæþñüé( ÜßÞ?›ûÇ󤢀sxþtnoïÎ’Š]Íýãùѹ¿¼:J(w7÷çFæþñüé( ÜßÞ?›ûÇ󤢀sxþtnoïÎ’Š]Íýãùѹ¿¼:J(w7÷çFæþñüé( ÜßÞ?›ûÇ󤢀sxþtnoïÎ’Š‚ü“§ÜäŸõMü«–ðßÞ?ïç]Eÿüƒîë“*åü7÷ûÇùÐsÜQÜS˯õf¼÷Ä_ñóýt_ç^…uþ¬×žø‹þ>bÿ®‹ü躲ÿ}¯ýqOýTõ—üƒíëŠè"§ Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ô4´‡¡ 袊C (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€+ßÿÈ>çþ¹7ò®_Ãxÿ¼uÿò¹ÿ®Mü«—ðßÞ?ïç@ÌpQDpQLC.¿ÕšóßÇÌ_õÑz×ú³^{â/øù‹þº/ó êËþAö¿õÅ?ôSמßivww:ܓþH´˜."bNc“Ëa¹}Ƚ=+¢mr8ô»MÖ šhºk}§2¾¸Ç'>ô¯¥ÿ®¿ä;koë§ùV¿¾ƒM´k«–+•R@Ï$€?R+Ït‰$:²è“X3É¥=5fÉ ±ùùëÇn*{¤ðü¾ ¼M%#’àG Þ(Ë…u-æÎ~ösUý_p¿¯ËüÎö[Ÿ.î<‰ŸÎ |Ä\¢`ížÕ=qÈÚ[kzöÙ¾ÊëgÙÀ »bç¥di¿eݤ}—Ìÿ„—ícíùÝæmÉó|ÏöqÓ·LQÕ ésÒ(¯:–ÊÙ,õ-a" ¨Ã­íKÃ…óQvçÓŒW¢Ò[_úÙ?Ô:´QEQEQEQEQEQEQEQEQEQE‡¡¥¤= GERQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE^ÿþA÷?õÉ¿•rþûÇýãü먿ÿ}Ïýroå\¿†þñÿxÿ:î`û‚Š û‚Šbuþ¬×žø‹þ>bÿ®‹üëЮ¿ÕšóßÇÌ_õÑwV_òµÿ®)ÿ Šž¨[O:YÛ*YO"ˆS¥p~Qêj_µ\ÿÐ6çóOþ*€-QU~Õsÿ@ÛŸÍ?øª>Õsÿ@ÛŸÍ?øªµEEâ`À£ÆêpÈãT´QEQEQEQEQEQEQEQEQEQEQER†–ô4QHaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP{ÿùÜÿ×&þUËøoï÷ó®¢ÿþA÷?õÉ¿•rþûÍþñþtÜÁ÷A÷Ä2ëýY¯=ñü|Åÿ]ùס]«5ç¾"ÿ˜¿ë¢ÿ:é`ñE¥›ZÙOkz±¨†¼ò‡²:)U'9çróŒdõ«Sx–]R++>þšo"+§|§sÐw=‰®Sk­KMþƒM¼ó'–ÕÖçÉ>HŒ,LÎ_ #k uÈ&·¿Qñ„¶Z¹¿µ»@L𸴃‡›äÎÒpWæéNÊëúì+»?ë¹ÛÑE†P?òŸþ¸Eÿ¡IQÝjvNêöÞ# I R:ÿÈVúáþ…%`j¾}CR–òDÀeÆå0ïä8;‡túÖue5Á]›P9JÕedjÂA£ÐVËþÿ¯øÑÿ ÿA[/ûþ¿ã\ÿü!_ôø øåð„]Ðdà1ÿã•Ïí1?Éø~Çÿ?_ÜÿÈè?á Ñ¿è+eÿ×ühÿ„ƒFÿ ­—ýÿ_ñ®þ‹¯ú ü?ürøB.¿è2?ðÿñÊ=¦'ù?ö8/ùúþçþGAÿ ÿA[/ûþ¿ãGü$7ýl¿ïúÿsÿð„]Ðdà1ÿã”ÂuÿA‘ÿ€ÇÿŽQí1?Éø‡±ÁÏ×÷?ò:øH4oú Ùßõÿ?á Ñ¿è+eÿ×ükŸÿ„"ëþƒ#ÿÿ£þ‹¯ú ü?üri‰þOÄ=Ž þ~¿¹ÿ‘ÐÂA£ÐVËþÿ¯øÑÿ ÿA[/ûþ¿ã\ÿü!_ôø øåð„]Ðdà1ÿã”{LOò~!ìp_óõýÏüŽƒþ þ‚¶_÷ýÆøH4oú Ùßõÿçÿáºÿ ÈÿÀcÿÇ(ÿ„"ëþƒ#ÿÿ£Úb“ñc‚ÿŸ¯îätðhßô²ÿ¿ëþ4ÂA£ÐVËþÿ¯ø×?ÿE×ýGþþ9Gü!_ôø øåÓüŸˆ{üýsÿ# ÿ„ƒFÿ ­—ýÿ_ñ£þ þ‚¶_÷ýƹÿøB.¿è2?ðÿñÊ?áºÿ ÈÿÀcÿÇ(ö˜ŸäüCØà¿çëûŸù«¨Yj—‘Û[^E4aI<™Aè@àðïÒp¶PÚMud!GL‡ÉÀÜ8luÎZÇÓô‰|?¨¬’Þ}¡&‰7”P+eHxõÁüªõäÿñ/¹‰diX™|Ù$‚cë]rq¼Õ™ÇV0ŒÚ¦î1¨Ùãþ>¡ÿ¾ÅÚ6_óõýö)âÖ£™:zð¥û,>²~cü+C"?í/ùú‡þûhÙÏÔ?÷Ø©>ˬŸ˜ÿ >ˬŸ˜ÿ X®!œ¨øë´çóÐÓâbÉ»$c“O= GERQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE^ÿþA÷?õÉ¿•rþûÍþñþuÔ_ÿÈ>çþ¹7ò®_ß}¿Þ?΀;˜>࢈>࢘†]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@½ÛÅal‚Îy…>e)ƒòV§ût¿ô¹ÿ¾£ÿâê;/ùÚÿ×ÿÐEO@ ût¿ô¹ÿ¾£ÿâèût¿ô¹ÿ¾£ÿâéôP $¹–âHÌ{ÕQQˆ$ÉÉÆGV=êz( Š( Š( Š( Š( Š( Š( Š( Š( M sÄÑJ¡‘†5JËKKYL¯!•ÇX}Ñþ>õ¡EQEQE‡¡¥¤= GERQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE^ÿþA÷?õÉ¿•rþûíþñþuÔ_ÿÈ>çþ¹7ò®_ß}¿Þ?΀;˜>࢈>࢘†]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@•´Ó¬:tq[ hG›/˜–BŒ|½ò*.nuìŸ>ÖÇý0íż®¼|ÀqÓ'­D°yª$XH Îá”~CŠ_²·üóü zW§PݼñÙÌöÑ gTcdà3cžÙ5Kì­ÿ<ßÿž²·üóü zài^Þ&™JPPsµ±È©+3ì­ÿ<ßÿž²·üóü zw:«<·‹¨ZÇ ö®Ï”°nyÉÍVû+Ï7ÿÀ§£ì­ÿ<ßÿž•ÆMªK¨El­¦ÁÓo–C€ž£¾+#í¾+ÿ e§ýô?øºÑû+Ï7ÿÀ§£ì­ÿ<ßÿž²7'~f¿¯Czu”#gýoþfwÛ|Wÿ@ËOûèñt}·Åô ´ÿ¾‡ÿZ?eoùæÿøôå³,q±‡ÖêJŸbÿþä_ÖWüûÜÿÌÌûoŠÿèiÿ}þ.¶ø¯þ–Ÿ÷ÐÿâëV;Xd‰3 Àyïþ4ï±Cýé¿ïûÿÅÿ;ü?È>³ù÷¹ÿ™‘ößÿÐ2Óþúü]mñ_ý-?ï¡ÿÅÖ¿Ø¡þôß÷ýÿƱCýé¿ïûÿÅÿ;ü?È>³ù÷¹ÿ™‘ößÿÐ2Óþúü]mñ_ý-?ï¡ÿÅÖ¿Ø¡þôß÷ýÿƱCýé¿ïûÿÅÿ;ü?È>³ù÷¹ÿ™‘ößÿÐ2Óþúü]mñ_ý-?ï¡ÿÅÖ¿Ø¡þôß÷ýÿƱCýé¿ïûÿÅÿ;ü?È>³ù÷¹ÿ™‘ößÿÐ2Óþúü]mñ_ý-?ï¡ÿÅÖ¿Ø¡þôß÷ýÿƱCýé¿ïûÿÅÿ;ü?È>³ù÷¹ÿ™‘ößÿÐ2Óþúü]mñ_ý-?ï¡ÿÅÖ¿Ø¡þôß÷ýÿƱCýé¿ïûÿÅÿ;ü?È>³ù÷¹ÿ™‘ößÿÐ2Óþúü]mñ_ý-?ï¡ÿÅÖ¿Ø¡þôß÷ýÿƱCýé¿ïûÿÅÿ;ü?È>³ù÷¹ÿ™‘ößÿÐ2Óþúü]mñ_ý-?ï¡ÿÅÖ¿Ø¡þôß÷ýÿƱCýé¿ïûÿÅÿ;ü?È>³ù÷¹ÿ™‘ößÿÐ2Óþúü]lñ_ý-?ï¡ÿÅÖ¿Ø¡þôß÷ýÿƱCýé¿ïûÿÅÿ;ü?È>²¿çÜ~çþf7Ú¼Uÿ@Ë_ûèñt}«Å_ô µÿ¾‡ÿ[?b‡ûÓß÷ÿ>Å÷¦ÿ¿ïþ4{üïðÿ úÒÿŸqûŸù˜ßjñWý-ï¡ÿÅÑö¯Ð2×þúü]lýŠïMÿßühû?Þ›þÿ¿øÑìó¿ÃüƒëKþ}Çîæc}«Å_ô µÿ¾‡ÿGÚ¼Uÿ@Ë_ûèñu³ö(½7ýÿñ£ìPÿzoûþÿãG°Îÿò­/ù÷¹ÿ™ö¯Ð2×þúü]jñWý-ï¡ÿÅÖÏØ¡þôß÷ýÿƱCýé¿ïûÿÁÿ;ü?È>´¿çÜ~çþf7Ú¼Uÿ@Ë_ûèñuµ`o$²¯bH®w¢'Ïlw¤û?Þ›þÿ¿øÑö(½7ýÿñ«…7~fýLêVSVQKÒÿæYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿhbYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿ. Óî?ë›Ò¹o}öÿxÿ:êVÎÀþñ°s†•˜~D×-áϾßïç@ÌpQDpQLC.¿ÕšóßÇÌ_õÑz×ú³^{â/øù‹þº/ó ÚØ…´Œ’ &©®¿¥½Ûè<aˆ2#1f€'ð¨5;kÛÍ*Þ DŠDf_=$”ǽ?»SŒñÓ5a¬>£ê\ÁLÚ„‘ľw˼ž„0£};R_×à7ý~'Sek¨Ûùö’‰#ÉRpAuAö5öÞŸöñdg+9m€4l· b6“횣£Þi––`®£ Ì·w$I,_2´Ì3Œà`qŸJ¥¬_[Üë+mö©¡º@t𹃂ç#h$òqÅ>© £fÐ×´Ó~,¾Óûòæ1”`¥¿ºsíš±{k§[ù÷s,Qä('©>€IöÏÏ«XjšêÚÏ{o Wlm 4ç”øŸn¶u֚Ε¨Ü+( ‹#…$DÌÖ vàŒöÍ.ˆ}K˯é­e=ßžë ó ÂêW=>R2*}–³a¨NÐ[ÌÞr®ã‘4m\0Šç5½i5]#[ŽÚX¤´‚8JM9%¾nzqRi³¤þ*·’ÛRmY~Îé$¥Wã‚0PùÆx¦·±¼Ú²i›­®&tÛæÉ®È·tÜI^­ çl¬mnæT‚ÜzÈøUü³ŸÂ±t¸®ô zÆ;‹(--nàŸº¸2î•*Ç(¸$nóÅ%¯õýLoEý_ðÇQ«cs¨ÍaÊIu†–4ç`'ž™öëW+µ‚ _\¬1Gg#E 2erNgxUÓõ(tàFžÖ+#­æ¡Ô®Ð2¸c“ÔŽ”tOúêZþ¶;:+›ðÜ·xÕÄ“<â Ñm.pHwðNÆx¥ÑßTmAEÓkF-§?kŠÕcϹæ¦Ö¶ô¹~ïÄZUçÙ.nü¹AUoݱU' fjç#©©\ˆu>óR}îþÚÒÖ0vóH¤þ!çדØqߎµJ²‚¤# JKkïah¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+ðçßo÷ó®Â¸ÿ}öÿxÿ:î`û‚Š û‚Šbsþ¬×Ÿø‰OÚ#?ôÐ:ô9ÆP×®Ù—ù€É4ÑÚ«}–/”ýÑÚ¥ÚßÝ?•yýß‹o혤Y¿àEP>=ÔAÿ ŸýôÂÏOÚßÝ?•[û§ò¯0ÿ„ûRÿ  ŸýôÂøOµ/úÙÿßGü(Óö·÷OåFÖþéü«Ì?á>Ô¿ègÿ}ð£þíKþ€6÷Ñÿ ôý­ýÓùQµ¿º*óøOµ/úÙÿßGü(ÿ„ûRÿ  Ÿýô€=?ktþTmoîŸÊ¼ÃþíKþ€6÷Ñÿ ?á>Ô¿ègÿ}ð OÚßÝ?•*«n¾•åÿðŸj_ô³ÿ¾øQÿ ö¥ÿ@?ûèÿ…zU¿ü{EþàþU%y ø‹«€Ñ­À‘¿Â—þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü)Wâ.°ÇØöãþÚ7øP¤×#áÕ÷ûÇùÕ[?ê·Dan™÷c[Z¡A#štð}ÁE:!…SXdU «1(9£H@4Ë\h1ÈIØ*©ðÔdýÁùWc°Ôyké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~T£ÃQƒ÷å]–¾”yké@ݶ†‘…³mj"­„µ8(ŠZ(ÿÙ endstream endobj 80 0 obj << /Type /XObject /Subtype /Image /Width 712 /Height 557 /BitsPerComponent 8 /Length 50425 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream ÿØÿàJFIFÿá°ExifII*JR(i‡Züÿÿ)( üÿÿ)( 0210‘ 0100 ÿÿ È -ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀ-È"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?÷úBÀPdzo¯RÞ6v`ª£$“ÐPÖW½DowãZ·Å;É.tËxE¸8Y&‹ûàÖ²ÏÄq»Yÿß—ÿâé\xûjxQöÔþð¯ÿ…®zYÿߦÿâèÿ…®zYÿß–ÿâè¸õöÔþð£í©ýá^ ÿ \ÿ§?ûòßü]ð±µÏútÿ¿-ÿÅÑp=ëí©ýáGÛSû¼þ6·ÿNŸ÷å¿øº?ábëôéÿ~[ÿ‹¢à{×ÛSû¶§÷…x7ü,]oþ?ïËñtÂÅÖÿéÓþü·ÿEÀ÷Ÿ¶§÷…mOï ðoøXºßý:ß–ÿâèÿ…‹­ÿÓ§ýùoþ.‹ï?mOï >ÚŸÞàßð±u¿útÿ¿-ÿÅÑÿ [ÿ§Oûòßü]Þ~ÚŸÞ}µ?¼+Á¿ábëôéÿ~[ÿ‹£þ.·ÿNŸ÷å¿øº.¼ýµ?¼(ûjxWƒÂÅÖ¿éÓþü·ÿGü,]kþ?ïËñt\yûjxQöÔþð¯ÿ…‹­Ó§ýùoþ.øXº×ý:ß–ÿâè¸óöÔþð£í©ýá^ ÿ Zÿ§Oûòßü]ð±u¯[Oûòßü]Þ~ÚŸÞ}µ?¼+Á¿ábë^¶¿÷å¿øº?ábë^¶¿÷á¿øº.¼ýµ?¼(ûjxWƒÿÂÅÖ½mïÃñtÂÅÖ½mïÃñt\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿâèÿ…‹¬úÚÿ߆ÿâè¸ñöÔþð£í©ýá^ÿ Yõµÿ¿ ÿÅÑÿ Yõµÿ¿ ÿÅÑp=ãí©ýáGÛSû¼þ.³ëkÿ~ÿŽQÿ Yõµÿ¿ ÿÇ(¸ñöÔþð£í©ýá^ÿ Yõµÿ¿ ÿÇ(ÿ…‹¬úÚÿ߆ÿã”\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿã”ÂÅÖ}mïÃñÊ.¼}µ?¼(ûjxWƒÿÂÅÖ}mïÃñÊ?ábë¶¿÷á¿øåÞ>ÚŸÞ}µ?¼+ÁÿábëÞµÿ¿ ÿÇ)ábëÞµÿ¿ ÿÇ(¸ïöÔþð£í©ýá^ÿ Xþõ·ýøoþ9Gü,]cûÖß÷á¿øåÝþÚŸÞ}µ?¼+Â?ábëÞ¶ÿ¿ ÿÇ(ÿ…‹¬zÛþü7ÿ¢à{¿ÛSû¶§÷…xGü,]cûÖß÷á¿øåð±uï[߆ÿã”\wûjxQöÔþð¯ÿ…‹¬z×þü7ÿ£þ.±ëkÿ~ÿŽQp=ãí©ýáGÛSû¼þ.³ëkÿ~ÿŽQÿ Yõµÿ¿ ÿÇ(¸ñöÔþð£í©ýá^ÿ Yõµÿ¿ ÿÇ(ÿ…‹¬úÚÿ߆ÿã”\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿã”ÂÅÖ}mïÃñÊ.¼}µ?¼(ûjxWƒÿÂÅÖ}mïÃñÊ?ábë>¶¿÷á¿øº.¼}µ?¼(ûjxWƒÿÂÅÖ}mïÃñtÂÅÖ}mïÃñt\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿâèÿ…‹­zÚÿ߆ÿâè¸ñöÔþð£í©ýá^ÿ Zõµÿ¿ ÿÅÒÂÅÖ½mïÃñt\yûjxQöÔþð¯ÿ…‹­zÚÿß–ÿâèÿ…‹­zÚß–ÿâè¸óöÔþð£í©ýá^ ÿ Zÿ§Oûòßü]ð±u¯útÿ¿-ÿÅÑp=çí©ýáGÛSû¼þ.µÿNŸ÷å¿øº?ábë_ôéÿ~[ÿ‹¢à{ÏÛSû¶§÷…x7ü,]kþ?ïËñtÂÅÖÿéÓþü·ÿEÀ÷Ÿ¶§÷…mOï ðoøXºßý:ß–ÿâèÿ…‹­ÿÓ§ýùoþ.‹ï?mOï >ÚŸÞàßð±u¿útÿ¿-ÿÅÑÿ [ÿ§Oûòßü]Þ~ÚŸÞ}µ?¼+Á¿ábëôéÿ~[ÿ‹£þ.·ÿNŸ÷å¿øº.¼ýµ?¼(ûjxWƒÂÅÖÿéÓþü·ÿIÿ [ÿ§Oûòßü]Þ¾ÚŸÞ}µ?¼+Áábëôéÿ~[ÿ‹£þ6¹ÿNŸ÷å¿øº.½}µ?¼(ûjxW‚ÿÂÆ×?éÓþü·ÿGü,msÒÏþü·ÿEÀ÷¯¶§÷…(¼CÜW‚ÂÆ×=,ÿïËñtáñ#]^Ö÷åÿøº.¿,êÝêPÀ׌xâ|ò_GoªCÇ! &ˆ }Á'|ñ^±it%PA¦…€äQ@Ìp¦¸/^еÛÈ?ñÓ]ÝÉÄf¼ËÇŽ²¯Gý1ähÇ7Qº¡ÝFê‘—¬-$Ôoc´…âY$$)•Â/Lã'¿aïZÚ§„õ ?RžÎÙ†&Š:+,kŒ³)n:ð2I¬ {©­.c¸·‘£š6ÜŽ½T×Cáÿ*j³¾µw3Cqbö^qÌJqƒÉ:/3:=S•ìR;Ff¿Rö :þ𧯎)ú†«ésÁ 턱IpvÄWÞ}RFyé],:þ‡c­ø`E¨´öšd2Ç5ÇÙÝ9e |¸Ï_­f.µf|?¦Ú-ûAuª×Ä,ÞTg8p1ƒÉÎÜÑ×úïoËPþ¿…φõ«;»[K‹Iî‰XSÍC¼Ž£†ÀëßùCï>€©<ûu®ši6~+ÒŸOW}ÅdƃºLî`‘ªú§ˆì­î4Óc}myioz.šÞ 8Ûm#ÜðÄ‚i­lÊòøJïN𾣩j–²ÛÏEöu2)3a²>½ñX1X]Ïa5ôP¶…Ö90ùYº g<ý+§Õõm û]Z¤·7:­Äsˆ^ÙÐņÉÿ­Yþ Öì4»»¨uR~ÃpŠÇ [÷ˆÁ“€½%»¿õ¢þ½Aí¡B] U¯K'V²(.õ% ýÑÁù³ŸáÍ;Qðö³¤Ú%ÕþŸ,99*@>ø'Ž+£¾ñŤÖzeÌqî¾{¨çÔ)ð£$`çƒÇLT¶·¢Ç¦k‹a=ìúÄÉ!ŠH¸ »’~ñíÇ £úü¿àB-#ÁºÖtøµ›`²¹v]ÂTÜHF`8$»éX“éðÇÆÕÄW2˜í¾aºR8\î?\bº'ñ”ß`ÖEÏú 7”ü~è¯ÝÆî¾Õ_Y×4ýfóKÕ£¿{+ødXæAºÆªr² Æ1þÎúïªFfÏárÚòÚÒm=–âëp†?5 | žÆ®*-GAÕô™aŽþÆHZfÛYX1ôÈ$gñ®ÏO¿Ñoüi¢Kc$W‰yMÕÌÍIû¶Á*ßÅïY7:¦a§Úéê]R©ýªäù DèP×ðëÍ upïýw0õ/ë:D÷öB²¶Ä!•ÁoO”ž}©×^Öì¾Íö6T7M²Ü¥ºãh$Ä éõh–ÖVÉc<-Q.Ö {n1Øä[Þ©¦¯ é¾0ÄVúœ·¾tîÒÛ›VW…]HÎãÃc `v¡9ýSEÕ4SÔlÞßÌÎÂYX{©#>ÕŸººOjöw6ÙéúµÍ¿žf1A§o,ã'ø‰ÉÎcìù:L–Ùšd›Ã´ÉmºuÏ£çŒvâ’/h~¹×ìõm3Ú)óKüD€0¨¬|9¬êMp¶v-1¶Ç( Úèå† ÔþÔ4ÔÓ5/RºkHïãŒ$â#(RŒN ŽyÍiøkRðæ™Ùn ŽêÝâêk”Ëè‚c=ý©ÛRz´ß Üê¾¹¸´¶šMNß Â]P*…²äúÕ-'×zž°úl²Ee$LSpÀ$à¹Ë@?>kmõT²Õm.µY,–mXÞÄâÙܲ`c¯JÌ»ñ÷Ä(u“º+5¹‰·2’Ûq'·J#«Wþ´C{;Z³þÜØê7Ve÷˜&x·ã¶’3ŽÝ*¾ê³ª^E?ˆ// Û,/tò¦õ;]K’28>”jš·ö£ÄßÙÚu—–Å¿”?Þ俥^Êã{²ðð¾ºÚ`Ô—MÙ˜üÑ t9Lg;s»ö§K'HšÆ+™®ïÞTJ;ðó‘Àç5¹eâm&WE™îÈŠÛHû,çÊs‰1÷qŽyî8©<#©ZO7„´øåÝuk-Ñ™6‘´2±ãð5VÕÿ]Ééëc™½Ð5=*æÞ-RÜÙ,ìM#AêIRzuÇZ³©höš2ê¶´z…·Ÿöy¢*øÏÌ=êö£{¡Ã¤[è1j’ÝDú—Ú..>ÎÈ N„rIêxÏzgН4k«(¢Òu”kKl }=,äN¿yË·ºòi_B­gc—ÝFê‡u©ˆ›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Uí/O„®Ò»$ðvõcè+/ujiWkr[±ÆöÜ9ÆxóøP¼º™$ebBøáÖçÜþµsðØË.¡ö"B¸bº€óë[>d|á¤wi˜ÈœVd7Àj¯txI̞ÌÒaÑ#‰•ãº}™ 6Ù8Ç^ƒmdjsYÞ,L«'1çœ`ûÖ‰’Sk4 BD›ðÆCŸ˜“Óo¿­V¼½ß}nè7}·ýNAÇéC½´muszËÃú5²$WÌgºe,G˜T uÀàzšËÖt«kh÷N•žÕÈXçnz{Š¿?“ªB›¦Í¿ÞÉlc©éŒœŒsÐñjëWØÓͫȯ3íÜTc€AÎ;tåQÄT•D¯«ÝGŠÁÐ >T’Z>æêúÃwfkX‰9%E|纽ïÂ,M¤?îŠõÑóGÊŠ)°ýÁE0uþ¬×˜xóþAwŸõÉÿ‘¯OºÿVkÌxD_ïà”êÖ{DWQùNQ\Àü¬)à÷Töú{\i——Ë*„µ1‚¸ÉmäŽá@wT]Ok2Ím4Ê¿vHœ«ÜȨ)8 úÒÐË’I$’y$÷¤ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(C+–„“KçAQQ@ ˜  zqJ³”èò¨¨  w"P”'®Ö#?‘¨ÚRÄ’zÔtR²½ÇÌÚµôº½ûÂñéû¢¾¯ 0ÿ GþLÃÿÅÒŠ·áø[ü†õüÿŸõr꿈`ñ=ßÛ-5;™9 "lË{ÇÏ9ã·ÐõËø‚ÞK]vînÍÜi›ï1 ›“ÈÎ=Emÿ±ñ‡ý?òfþ.øV>0ÿ GþLÃÿÅЕ­ä6ïs’®¢k»Ko hbçL‚ð³\m2K"mùÇMŒ?Z—þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.˜°Ñ¶¥©IiÿÚÒÈÁœÊ“,~PÜ#.¬»žøïÖ²¯ä{Û?°Ékp«lòÁ#!ÛÎpÉÈ'½Cÿ ÇÆôÿɘøº_øV>0ÿ GþLÃÿÅÐÕÝÁhqu>²ºš·ö"ÚŸ³y¸Ø%Ú»<¿Cž¸íœ×œWq¨øƺ¦¡-äú2,’X%Ä@tÇj©ÿ ÇÆôÿɘøºIK•Öÿ±ñ‡ý?òfþ.øV>0ÿ GþLÃÿÅÓ’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*÷ÿǤ?îŠòßøV>0ÿ GþLÃÿÅשxCþ=!ÿtSB=¸(¢¸(¦.¿ÕšóÈ.óþ¹?ò5é÷_êÍy‡ŽÆtÛ±ë#@•bØÓ-qÿ<“ù ŸÌ>Õ‡©Hñø.åãfG]=вœ|¾ Õ$Ô/ôß [My¨X¬òˆÖû,œ®q°9go¦>”€éžácÛ½•w£'>”ÿ0ûWu«ÞkZF—2, y²°hÝc,¡°ÛN ‡šßÓïõ+¹u-.åí¡Ô-B¸†2c*à•m„ç#ŒÓ¶Ÿ×—ù‡_ë»G@“Ú©GÿWc·š?ô¬¿ IrÚ}â]]Ku$WÓÇæÊrHVÀöAÅjEÿ7õÔè CKERQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEɦŽÞ '•¶Ç—vÆpÉ5ZÛSµºŸÈŒÌ$Ú\,nÿë ÿЭUSÊO3ư²ÈÁ†é#åû§Ò€%¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ¤2J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠÏÕô‹[Û+Æ[y/$…‚HÑ®íÛp¿1ü+FÑ.ŸS/ªéÈmÄNM²A¸•ÇžÀó]V.ÿç•¿ýþoþ"Œ]ÿÏ+ûüßüEa<<'57º%Å0EoÅIkÑBø ã|#Ŭ_îŠëä–x|ÑGå¼É!%G® Šä|'Äýn†wÐ}ÁE}ÁE0uþ¬×x¤n8õ8¯EºÿVkÏ|H3qõqü躲ÿ}¯ýqOýTõ—üƒíëŠè"§ Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ô4´‡¡ êAÐTt²Ê ·yJ»RÛQK1Ç`SH *[Êq"IµÈÛ…·~šçôsT¼Ô¦‡PÓîaŠR^kgQÀÄŒ9Ï®}«¤„¶J{ˆ×›…0+›«ï䜟ãQµÕÏ÷ÿòF_ñ«ºÆ™§H±ßj6–®ã*³Ì¨HõšeÖ«akl—ß[EŸrY%UVúpiQœ"÷o°Ê¸÷É8rÞ,ñ‘¢]C¥]ÛÜ\¤ÖÁþUWWVf$°äOã]¢L²ªÉ«£ «)È#Ôñ‰?'ˆ­BŒl¶e_`'”úTT¥‹–E)8ê‹£ÄÞ€MiÚ‰F¼Çó>\ä™9çŒS.d[‚†%±Æx?ׯlÏTB csÔŒ;ri¼-7£i$vI}£¬²ÏöKfH¹>[å7mÉõÅF— A,"Î䤡CrÍ…9P¶@¦‚¿ºeP­†ÜNO'?—ô©j§€§o¯˜£ZLÜKí;ßµ­À›q~¹PÄ`°]Øß¨Òm ›lî±$oS!*¾ðQ¿ ŸlV=ŸÔé÷y^ÖFýÖ§¤^,Bk{¬Åþ­‘Š2ýXÖ£º¼Ñ/B ín‰Xü­Ë!RSû¤†‡×5‰E Mm¼=¬w½°7ðÏž8£5£ ’Π9/Àô¢±}"ÆÈD°Ï,ÞA„É(Þ¸=p¥ðî+6ŠT§kjÑî[´[_:K™Fˆ¨B…·¤c×ßè+ZóVÒoÂ-ս̈§; Ÿª†Ã~9®zŠ%„§'wpU:F×4Ǹ†v·ŸÌ„2Æp>Pqž7c°ªæÿG7¯x"¿Yƒ1IÝUˆ ¨|ž•‡EJÁR[_ﵑ¿§£Ã$RGk:¼Lì­ß/÷²wsŸoJIukiíÞÖçËžO6@¬T–È9ÈlŽ@éX4Sú•=õûÃÚÈÜ7úCZ›gPx™·÷ÄöÆKçÝ)n5 æa{IÕ!ÊýÙAŒ``@Çj¢©SóûÃÚÈèeÕô™¬…›ÚMöp„ Ð:cŒ`t¥´Ö4»Ù-à¹Ûs3ìÇÔ³1'¥s´Rú+[_¼=¬¸ï4H®ÍÒÚ\ù»ÙÆç,ªÍÔ…-€NO P—º$R[¼v·HÖè#Œ«‘òŽ€á¾aõÍbQOêtû¿¼^ÖFåõö‹¨¸{›[¦m… G)¹Oð¬2==µ=Ä¡­g"YG÷eÆÓ÷»m•`QGÔ©í¯Þ?k#hÝèm+Hö×nìAÌ’3c Œ¿  tª‰-ˆÖEû´¡F•bŽ2£qdæB¹ç¨PMP¢šÂAuxVÍåÔtTŽÅœÅ!‰¡E<€ŒŽ[žƒ­2;Ý;Ym~ÍtðJd’Bã¦71ÇáŠÄ¢—Ô©÷x{Yž«¤Ø,‚Þ ¡æÎ]Ë–8ÇVbzTk}¢$ ÙÎ#x» õŒgï{žzÖ}JŸŸÞ?k#tßè¦áç6·Ý68Ýò¸Æ9]Øïﵑ£e&•œ°]-ÍÃK7œÏÊ•`IrÃ×vjújº\~S$7[áFHÝÛy±žKsÐu®~ŠrÁÓ–÷ûÁU’7bÔ´¸ô¨´óÙ†4TNÆ8ï•`GáRÚk:]Œ{{…BKüʼnêI-’}Ís´Rx*O{ýáídkÃ7‡áGE²¸exÌX‘Ë€‡ª®æ;GÓ$š%»¬‰mv]\HIÎà¥G,ç±#+ŠS¦ú¿¼=«6å¼Ñ%@­ir6ÈÒ+#•`ÌrØ`ÀŒúgß´èa mviæ1Aއnü=H¬j)}NŸw÷‡µ‘»¥¦G¥Ã§”¼ò¢EPÈÛã¾U¥·Ô4[\ù6sÑùmŸ›räžrÜòÄç¯5ƒER§ç÷‡µ‘µ%Þ‡$0Dm.€·]‘29WUôÜ8üj6—@"0-o$~P 3.W$àáùäž¾µ“E?©Ã»ûÃÚ³­±Õì¥Qem‘¨…Õh  !ãƒíG…x‰ahŸò_úå/þ‹jÞð¿+ZT£IZ$ÊN[äpQDpQZ’2ëýY¯=ñü|Åÿ]ùס]«5ç¾"ÿ˜¿ë¢ÿ:äkÿ\SÿA=Aeÿ û_úâŸú©è¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¤= -!èh:t¤’ÚºE1†FR@*{ %¦ÃÿS¸ŸÍ«˜ÐÄ’êrÿj]Ê-íÉFVŠ0&nÅHPvãœý­tðÿÇÜßõÍ?›S•ÖRáüt¢Þ{[û,å¯"2)g`y¬ÍòÎÓÃpÀ,íîï…ÔöößtÇ#n%N>XýqÓ滋í#LÔdY/´ëK§A…iàW zEAy£éwPÅÆ›g4pŒD’@¬{8ü)-­ýoq½]ÿ­¬RдåÒt{k%”Kå–^„’IÇ Éâ¼·âA_‹#þX?áûù«×­­-¬¢X-mâ‚IÄT~¼â2+kðîòÅûÿÓy©ß[ŠÚbŒ©lá‰ã,f6Œ6Ü™_^©k‘òñþñ¤Â®HG9 p_§?ý¥&·-*°}¤œŠÕ°†HePv2|Äúä¶Gá×ô¬Ë6‘˜üªØ#ñÇƶ TV-´¨Rp}sôþ´£¬’)«!RbÚ†ß1Êî?.xÈsøUú˳äÔ¤“~ÄUÎÑÎþ߇cøV¥zÙ¬*B+¤WêcO`¢Š+Ë4 (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€44Où /ýr—ÿEµoøcî­ahƒþ&þ¹Ëÿ¢Ú·|1÷GÖ³„ù›òv5©IÁE¾ªçwÜQÜV†C.¿ÕšóßÇÌ_õÑz×ú³^{â/øù‹þº/ó êËþAö¿õÅ?ôSÔ_òµÿ®)ÿ Šž€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ CÐÒÒ†€#©AQÔƒ ¤Óaÿ¹¿ëš6§Saÿ¹¿ëš6¦æ¡—¥LjzR¹ûÕãßTBO_%ûÓykØOÞ¯øŒÀx‚úâý¿é¼Ô ä5+ƒÊ¢Í¸ónÜcnq¸ûóš—#jŽbN0A+œ{ãÔuJ¨«´…°êPɺ%ÝÃ!çpãÓž¾µ¹k©E$’EçǼ"1ÁaÎ$d‘Y0xjêTFià-drB¸ÇQ޾´ÛÝæ¦xÌŒ¹]Œp„íÓ¥UKÚ.Usf©rÙ殌Ψo!|afSž\gðí[5Ëèi$w,—;‰Áã¡®¢½ Öre)+h´9¡mlîQEy……Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Z'ü„ýs—ÿEµnøcî­ahŸòõÎ_ýÕ»áº>µÏCyúþˆëÅ|4ÿÃú³»ƒî (ƒî + äuþ¬×žø‹þ>bÿ®‹üëЮ¿ÕšóßÇÌ_õÑwV_òµÿ®)ÿ Šž©ZÁzöVÍ Ä …0­$|£¾áRý—RÿŸ«oûðøª±EWû.¥ÿ?Vß÷àÿñT}—RÿŸ«oûðøª±EAÌ$’ †T·'Bp}ºž€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ *)®b€…v%DU,Çè4Csä„c¸uVR¬> ó@ÑEQEQEQER†–ô4H: ޤ ›ü}Íÿ\Óùµ:›ü}Íÿ\Óùµ0'5 ½*cPËÒÏÞ¯ø‰Î¿\y2èùkØÞ¯,ñΟ-Þµ¡9ÌH?ëåö¤Æpe“ŒþX¦þFˆèúÖ‰ÿ!ÿ\åÿÑm[¾û£ë\ô7Ÿ¯è޼WÃOü?«;¸>࢈>ࢺA—_êÍyãæ/úè¿Î½ ëýY¯=ñü|Åÿ]ùÐÑׯ¬5m#OŽm:â+¡}‘}¦4)“!;ˆÚ?Â8ïš³©øšæ zÊÆÂ¤¶7‰kw<™ùY”°DÇVd“ÀÈHnt}OYþËRš|66íëršãå•h “‘ÇŽÔš­¦¸³–Æ{¸‚_ ©‘¯¦ AÜXªç‰=F;óDz_¿ùÁÖÝ¿ÏþÑê3ÝÛY<–Vj¸à,f@ƒêIè¶OµUðÖ§>³á»Få#I®#Þë!AÉé’MZ³æ9ÅÿÙ·[Éò7cËþÙþ/\qU|5¦M£xrÇN¸hÚh#ÚÍ%IÉé(@Lä+?ýp‹ÿB’²uYé×jÐÏ4‰þ^БœeˆìGOZÖ?òŸþ¸Eÿ¡ITo|;¥j&âæ×t¬,²ºg»HÍgUTqýÞþfÔ%/Þ§o#3þk?ùò»ÿ¾¢ÿâèÿ„ÚÏþ|®ÿ憎øº·ÿ†‡ÿ>oÿ2ÿñTÂ!¡ÿÏ›ÿàL¿üUsò⻯ëäuóà?–_‡ù•?á6³ÿŸ+¿ûê/þ.øM¬ÿçÊïþú‹ÿ‹«ðˆhóæÿø/ÿGü"üù¿þËÿÅQˊsà?–_‡ù•?á6³ÿŸ+¿ûê/þ.øM¬ÿçÊïþú‹ÿ‹«ðˆhóæÿø/ÿGü"üù¿þËÿÅQˊsà?–_‡ù•?á6³ÿŸ+¿ûê/þ.øM¬ÿçÊïþú‹ÿ‹«ðˆhóæÿø/ÿGü"üù¿þËÿÅQˊsà?–_‡ù•?á6³ÿŸ+¿ûê/þ.øM¬ÿçÊïþú‹ÿ‹«ðˆhóæÿø/ÿGü"üù¿þËÿÅQˊsà?–_‡ù•?á6³ÿŸ+¿ûê/þ.øM¬ÿçÊïþú‹ÿ‹«ðˆhóæÿø/ÿGü"üù¿þËÿÅQˊsà?–_‡ù’é¤w]ê6Pe²‚*ñœã©'¯z–òì²¹ 3Hc!J’Wkg8ê õªQÛG¡³ÛÄŒ–²É¾2$cƒ´ g9ã={ÔÐ3_^@Qs¼…ݘ–ÚÃç'æÍuFö\Ûœ3åæ|»ÿ´[þ}&ü×ühþÑoùô›ó_ñ«»SþyÇÿ|Š6§üóþùD¿´[þ}&ü×ühþÑoùô›ó_ñ«»SþyÇÿ|Š6§üóþùKûE¿çÒoÍÆíÿŸI¿5ÿ»µ?çœ÷È£jÏ8ÿï‘@¿´[þ}&ü×ühþÑoùô›ó_ñ«»SþyÇÿ|Š6§üóþù½×žÅLO8lsùœô4 (調AŠCÐÐu è*:t€ZHãîo÷ùµ-$ñ÷/û‰üÚ˜†N•9¨d€¬~õqÚÞ‘q¨]¬±Æ°ÄNPŠqÞéA&õ2¿á½ÿž°ßGü(ÿ„j÷þzÁÿ}ðªñÜO¥Áª¼ñYȲõ„†XÃyƒvÕä7°ùyïWV÷UX¡·¸–K>ïÊK™DF@› r”Ý‘ü«…âkôh×’ŠçÃ×+*Än-DŒ T.r@ê@Ǹ§ÿÂ5{ÿ=`ÿ¾øS?µï`„Je/W¸fEËùn“€;uÆ3R\j7öÞeºj_h/'¦c/ R ’2Nô}cµ×ôÃ’Â5{ÿ=`ÿ¾øQÿÕïüõƒþú?áZÚeÅÈmBÞyÃZ˵$*˜VàžqÀ¬_í‹ø¬#º«;ÜÙM?–#\@ʹÀÎàîÏ5+ˆnɯëQû8Â5{ÿ=`ÿ¾øQÿÕïüõƒþú?áZzd×i¨Íiqt×*-ã™]ÑU†âÀ”—ҹѓwöÏ²ÛÆªÊ×I'ïØÛ·#:ž;UGY»]}ĸB×±þ«ßùëýôÂøF¯ç¬÷Ñÿ ЊÝañtŽF2Y–;Ü>qÀ…A®ê“ÚÜg%ÆûuG•#1ífÇÌ[æçîÔ¬]y4“ZùéA^ý ßð^ÏX?ï£þÅðõËJѭű‘,¡ÎFzdcÚ´¼<ŒíÍÔŒ ÔãÈ;v§ï‘»ó'­W[u»Ñµ‡‘äWk‰Ë”r¤…ʨ$vÀ}r²m7ø¥AÿÕïüõƒþú?áGü#W¿óÖûèÿ…X½±ŠûÂöÊÆÐJ–ªÈ×)¸(Ø2G#§<ãÒ³¯.¤¹Hæq ¶¶Ó£º×€¿˜NsÎ@ÈÀ òzsUMg×ð'’6NÅŸøF¯ç¬÷Ñÿ ?á½ÿž°ßGü+¥†xçS±—zãz’„Œàúõÿ‰mö¹$k=袂 RK»¶ÓÀÿY¬mw}vò+ÙCK¿á½ÿž°ßGü)­áë•‘#k‹Pïª\å±×Tz}ä–£Wh–îk·h‹;ZËÌ0[i\àuÇ ¤²1G¥æ<¼²ìi‘•Žç s¸’³Zýbº{öéÜžHZäÿð^ÿÏX?ï£þÃáë••b7¢Fª9 u cÜWGu4’é÷ a,M:«*1`T8ãèkMÍÂG=íÄf(®>Ñ$ÑÅæDÊ#<]¸³Ç\óYÃ^]QN”ßøF¯ç¬÷Ñÿ ?á½ÿž°ßGü)^÷VµÓmZIîKÛªvD$Š=¤ÈTÜqß×Ö€¸ÔÂ÷S\©[¸â”©;rq¤í$gÎ;Ó–*ºêSƒv2ãðõÌɾ+‹gL‘¹\‘ÁÁíOÿ„j÷þzÁÿ}ð§ÞiÖwØXÛB¦ðCIóÿñ‚>p{Èê}…Gy<£[¹º˜[Ì–·0á,mùÓœ–=Ýê*–*«z?ÃäO$m{ ÿÕïüõƒþú?áGü#W¿óÖûèÿ…Gh#ÖwJGö„ºŒñNsóÆÿ”û‡­t—ÚúÁh%‚UùKáѽ;ò3ïQ¿X=ŒWþ«ßùëýôÂøF¯ç¬÷Ñÿ ꨣëõƒØÀåá½ÿž°ßGü(ÿ„j÷þzÁÿ}𮪊>¿X=ŒWþ«ßùëýôÂøF¯ç¬÷Ñÿ ꨣëõƒØÀåá½ÿž°ßGü(ÿ„j÷þzÁÿ}𮪊>¿X=ŒWþ«ßùëýôÂøF¯ç¬÷Ñÿ ꨣëõƒØÀåá½ÿž°ßGü(ÿ„j÷þzÁÿ}𮪊>¿X=ŒbÊÆ]?VH¥df0Èß!$ccéZ~û£ëLºÿ‘†/úõ“ÿAz†>èúס›œžíÿñªÞÍ/åýYÝÁ÷A÷Úq ºÿVkÏ|Eÿ1×EþuèW_êÍyãæ/úè¿Î€;kCwöo*h<”ÀhKº;îÊ¥Íÿüü[à;ñt–_òµÿ®)ÿ Šž€!Íÿüü[à;ñtfÿþ~-¿ð¿øºš™±Í’'WCÑ”äÆ€L²I,®WÀ%Whg ŸSß½KEQEQEQEQEQEQEÉ¡ŽâŠU Œ0A¢c·‰b‰B¢Œ)ôPEPEPEPEPHzZCÐÐu è*:Y]ã·wŽ#+ª’±©±ôÉâT2ñ"ì2y¸àGŒãßÉ-0b,„bàŸ˜å¹ ÆHè=©±ø–ÆÌqhvé°vT Ãp®k‘‹V]Œf´Ïfã­Hš…´˜Ýˆøôâ§êTîÜ£ø¿ó.8ªÖßò;ˆ¹ÛšÈ¢©Ñ]?þcö²7ÿá$Íó³×ÌÛ·~þq×ÇJ†}bÊêT–ãG·šDû¯&Ö+ô%x¬j),²ü_ù‡µŸsn=vÚ+‰.#ÒâIäáäV›êväÓ"Öâ†k§d¥É ñ´€®q‚~ïp~•E?©Ñíø°ö³îlM¬Y\¬k>o(‹ˆÃímŸL¯ùµË[–§Ò¡•¢9Œ¹ Pûex¬J(úß‹ÿ0ö²7!×â‚IäK#ºwÞäËÔàO@)ëâHÖG‘tõøÜÁùltÉÇ5E/©Pþ_ҵŸs}|I;ºØ(wÆæËc¦xæ«Ë¬A,ÐÉö¢)LÛ@¹Ü~^O5‘E5ƒ¢º~,=¬û›1kVñZ½·ör¼.Ìί&àʼn'9^y4Ѫéë’º%°ˆ»]¸8ÈÆÞø•dQGÕ(öü_ù‡µ—sY5M:;w·MÕ`åãP¡Xû¸5<~ ‚qo›p8 ¦Ö<ºü_ù‚«%ÔÐK½7ÈŠ)ôx.ŒK±ãk°QÐd¯AVÛ\µ{„¸}*ž1„”YG±Û‘X”SxJOuø¿ó´‘µý¹l'{…ÒâYÝv´ªÀ9]¹¦®³j,Å´Ä’Ù ŽG 2 óXôRúß‹ÿ1ûYw6V°’ÕmŸE¶kt9XŽÒŠ}†ÜS¦Öí. X&Ò`’ÆØÜ‚«Ž˜kŠ>©G·âÿÌ=¬˜õÈã½’ëìŒ]ÑcÊ0Š3Àù}MYÿ„£þœÿò/ÿZ¹Ú)<¼Ö}΋þúsÿÈ¿ýj?á(ÿ§?ü‹ÿÖ®vŠ>¥CùÖ}΋þúsÿÈ¿ýj?á(ÿ§?ü‹ÿÖ®vŠ>¥CùÖ}΋þúsÿÈ¿ýj?á(ÿ§?ü‹ÿÖ®vŠ>¥CùÖ}΋þúsÿÈ¿ýj?á(ÿ§?ü‹ÿÖ®vŠ>¥CùÖ}΋þúsÿÈ¿ýj?á(ÿ§?ü‹ÿÖ®vŠ>¥CùÖ}΋þúsÿÈ¿ýj?á(ÿ§?ü‹ÿÖ®vŠ>¥CùÖ}΋þúsÿÈ¿ýj?á(ÿ§?ü‹ÿÖ®vŠ>¥CùÖ}΋þúsÿÈ¿ýj?á(ÿ§?ü‹ÿÖ®vŠ>¥CùÖ}Íûkÿíe&ò¼¼A"ãv§½hxc úÖ‰ÿ!ÿ\åÿÑm[¾è>´a ¡ÍíѶڦßòþ¬îàû‚Š û‚Šê8Æ]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@6ºÕÚë6út²ÚZÛˆá,ñ>ûc”|…È$Œ`ž*Þ›©jz¥Ü×}Ž2‡‡k«4¯°[9y0x¥] ;ÿ°ÜÜ^ÞgÝùÔ~9â«éz…½—„þÏsª7̸›ì÷ŒZáwgÌÃËgü1]ù¨eéK¥¿­î7«¿õµŽoÂ;‡†í¡òÂîU;JïPǃÈÜ9ükÍ>#j–úw‰ñ%”s¼ÖFÁ` ¹‚W8ãktÁ;úð+ÙÏÞ¯øºá|UmŸùö~ÿôñ5T^¤µ¥ŽV+Øm¼±’0§;R5QŸnãóϽ(¸‚I¤˜ÈÊŸË8ÀôÏ|ÖVðFIýiÂEÿ&µæ3äFÄfÚYàäð1$’pà¥>7ÜGÛùœ|ÿ"Ÿü{ëY+8^?­<\¨?vŸ8¹EÑÆ4¨ðønòyâ¯V_‡>ƒlþïýÖ¥b÷5[QHaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP–‰ÿ!ÿ\åÿÑm[¾è>µ…¢È@×9ô[Vï†z~5ÏCyúþˆëÅ|4ÿÃú³»ƒî (ƒî + äuþ¬×žø‹þ>bÿ®‹üëЮ¿ÕšóßÇÌ_õÑwV_òµÿ®)ÿ Šž ²ÿ}¯ýqOýTôQEQEQEQEQEQEQEQEQEQEQEQEQER†–ô4H: ޤ ›ü}Íÿ\Óùµ:›ü}Íÿ\Óùµ0'5 ½*cPËÒÏÞ¯ø¿øJí²3þŠÿúQ5{ñûÕä?4•Ôbÿ®‹üëЮ¿ÕšóßÇÌ_õÑtúÍì·WpÌ¿èÇn-ßnLJX{€H9÷#µmU9.–(ÞIãkv‚/*5ˆ†O”g-¸îÉö÷«ÔQEQEQEQEQEQEQEQEQEQEQEQEQER†–ô4H: ޤ ›ü}Íÿ\Óùµ:›ü}Íÿ\Óùµ0'5 ½*cPËÒÏÞ®_·ŠmOt¨"Ha•˜¨Y<ùÁAúWt~õyï‹'’=FYª»¹'ÏÄúõâ½ ±7^˳"§Âpò¬bâL~cÊò?¯Ö˜ÅA3éO—‰¤AŠÌ×j¶Üäž9?׆!Þ¬½N;jN­û§9È#üþ5$œz⌷<žj2ppp=k(¢Ë›(Ï×ùš³Utÿøññþf­T½Î¸ü((¢ŠEQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@'ü…þ¹Kÿ¢Ú·ü3Óñ¬ þB‹ÿ\¥ÿÑm[þéøÐwÜQÜP.¿ÕšóßÇÌ_õÑz×ú³^{â/øù‹þº/ó êËþAö¿õÅ?ôSÔ_òµÿ®)ÿ Šž€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ CÐÒÒ†€#©AQÔƒ ¤ÒCÿrÿ¸ŸÍ©i!ÿ¹}ãOæÔÀ˜Ô2TäTN¥ *Ÿ½\~»¦Ãpæî{Ô¶Š3"³HÑûçä’G­vENkñFæÐ¤1²å®F##›œƒî+ Då®WmQ¤oS2ÛA¶¼ÌµÕ"ž<ãtJgê¦ÿ„_þŸ?òÿ^³îöÐk΋~Zæ1¡ƒ8Þ>ñ<‘jr\ʶµþÎ’ókÍovÒ˜“fv™H øç¶qšàu«½T¿þF¼ê‹MáØÖt„ÞŸ1ÁeAÆ3Îp:Š“þú|ÿÈ_ýzΆúìÚ«XÜÍ9_y$È_~×P‡Ÿ¼@éšë1MŸ¨]OhË’S33$(ê RrOj=¶#noÁw·`å‡cGþú|ÿÈ_ýz?áÿ§Ïü…ÿ׫zQ–)u;Q,²­¼ÀEæ¹vÆ­Ç“É=kŸ[ùÅ“=½õÌ—fÊg½FŸ&@¹ ÀTGˆ“v—à½JöpìjÿÂ/ÿOŸù ÿ¯USH±’èÚ¦³l×b]¥ÁxÝšÑÒƒÛj³Ú‰ç–mÀM+HU‰`pX“ŽÏùù»ò~Ók+G«3‹DCçÿ¬<ç'œôµQ¯]¶¹¿þD¸Â×±­ÿä~w“ý žnÝÛ6 ØéœnéOÿ„_þŸ?òÿ^¬Em -wŠ0­-¡gaÕŽñÖ³¼I©5½òÇ ñ,nŒ×m|·EŒ$éÎ}jc‰¯)$¥¿’)Ó‚½ÖÄÑøn9T´wêबyÁuõ¦& “Í _åáÇ™ûž##œã¥Yð÷Ù’{ØÄÍöÁq1’™ŽÕ2Âp2äj²­Ì¶WPÅm,þf¡(º2ÙžÌèÚ:ô4}f½Úæü½œ; ý…mö_µjÃö|gÍÀÙ\îÅ#è¶qù;õxÏÿU¸æ»ósøUœfè¦ægÓí#Iˆ‘–6Q #o]æìwô§Ý\-®dÔ£ uy¦F¶êS¤ù²ª=rTãééZ{j÷ø¿þBå‡cSþú|ÿÈ_ýz¦º^œí*¦·jÍ-(I@:“óqzé-.Exwîš ©7†ÚãÁ¢]*ßµ­äW¶b7º/11oºÄps“ïÅeUvå·’ÿ"½œ,жº=éai¬[Üå¼­¯·ë†¡4‹9$#ÕcÈå¢n€É\ƒ€qÚ‰Õî<7y¨ÊofRîƒ%`m™?‰¡nk‘Î."‡P-'UUÞ2»±´q–µiõŠÏíytÿ/2\"º¿áÿ§Ïü…ÿרÛñ¬é ½>c‚Ê<ƒŒ gœàu­wsÖ“vö÷‚ ¡ãóØ#eÈ'ŸB:×;oªB6fœZÅ ÇœÉxò¬„y2>rz=ED18‰_ÞüNœCCþú|ÿÈ_ýzOøEÿéóÿ!õë7í/‹j>rMu›£öö"*HC(ÜÊ3·'×Ó5¯ ]\·Úâ_&_*H¥29Ûó7ÀÎ;S•|DUùºÛd( ¥c94Í=Ä'ûb3ÿªWP¥ùǶM,šfÏÙ¤×-R|…ò˜¨lžƒ³OÔntÇ‚ÏLi­-Ò[xÝæ•ÕHˆ}йêN=9>•©tó]´µ81AºqýæÎÔÿÙÔ oYo'×¢ÿ!(E­»í @— nÚœk;Œ¬e@fÃvMKÿ¿ý>ä/þ½SÓî%ƒZe%”\Û2.V!»kç±€¸ÉÇ8­»Û©®´o?KW˜Îc&‚“Ë Ärqš™âqisoä¿È¥Núï£YE M&±n‘+gl :‚wuö¢]Ê£–mbÞ8äûŽû@¡-ÍEe}o¥h÷ìÖ _»_ù¿ÊŽ{þú|ÿÈ_ýz?áÿ§Ïü…ÿ×®†Š>»_ù¿ÊŽ{þú|ÿÈ_ýz?áÿ§Ïü…ÿ×®†Š>»_ù¿ÊŽ{þú|ÿÈ_ýz?áÿ§Ïü…ÿ×®†Š>»_ù¿ÊŽ{þú|ÿÈ_ýz?áÿ§Ïü…ÿ×®†Š>»_ù¿ÊŽ{þú|ÿÈ_ýz?áÿ§Ïü…ÿ×®†Š>»_ù¿ÊŽ{þú|ÿÈ_ýz?áÿ§Ïü…ÿ×®†Š>»_ù¿ÊŒ[=ìSµÇÚwìŠO—ËÆr„zûÔþéøÖ“ª—þ¹?þ‚k7Ã=?ôðUgV›”ÝÝÎz±QvGuÜQÜWa˯õf¼÷Ä_ñóýt_ç^…uþ¬×žø‹þ>bÿ®‹ü躲ÿ}¯ýqOýTõ—üƒíëŠè"§ Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ô4´‡¡ êAÐTt²™E»˜4ÛNÀä…'¶HÏ€’¡•|É$e¤9WhúŽýUÏè:^½§jSK{qm4´Áff;û2‚ LzcÒºXãî_÷ùµ0+[ŸîÿääŸáQµ­Ï÷?òz_ð¨õ%ަº|z}íåÃCç‘l¨v¦q“¹‡JEñ„Ú)ÕCº[Œ«+¡¥6õÝž1ëK¥Çä#ÛLݘ;¯Ûå9öÁ?pÞ5ñ…Þ‘¬ÙÛiðÚýíOßFÙS½—0Æ6ô®çLÔ¢Õ´è/ I9—r¬€÷šòO‰H[ÄPð!|óÿOÒ8ÍrÉ\9šÕ>"êÅö¬'ÜÆã?øõ,þ3Ô¯cËmϽ˜žHÎGº¸5Ç’ÕŠ¨\íã¯ÿ^­®FI ‘žµÕ¨§¤FªO¹ÕXxÎöÚ×bÛØÅjÌkúç$–'Ü“ë[x²ñ¶†™¶‚ãñù¿©®.Ȇãr° †VêzVœìc¶>ùa·§®¯bkZ*Uª(¨Ý±N¤ãÎ[TøÝâ;MZòÚ,Å ïŠBÛC3‰1œzUOø^Þ'ÿŸ #þüËÿÇ+‚ñ ‚_ê² aï&n3Ýϯ5›YË E6¹QJ¤í¹éÿð½¼Oÿ>Gýù—ÿŽW¯¿ˆn£[œ¥¾a±ÇÞP{û×Ê5ïZÞ§b4È¿Ó`ýû¹›æ~F3ׯҴ†fœLkV©£:sâëÐŒÂ;S@ßãQ'ŒuIØÅi„˜¢€­’6#{Õp^lʬê̤ƒÀ>”èu„G 0dvÞA9òò¨ú.‘G"­]^ò;ù«GùCÚK¹³ÿ -ïüòƒþù?ãQK®O4ÐË$3ÂK' €HÆqŸLþu—E5…¢¾È{Iw5¢×î dVöȹ-€§©9'¯©§ÿÂK{ÿ< ÿ¾OøÖ5¾«GùCÚK¹³ÿ -ïüòƒþù?ãGü$·„`Åoÿ|Ÿñ¬j(ú­åi>楶»qinC p«†8zT¿ð’ÞÿÏ(?ï“þ5E7…¢õqi.æÁñ%ã)+rÁù[üi"ñ Ì1$QAl‘¢…U pè:ÖE¾«GùCÚK¹³ÿ -ïüòƒþù?ãGü$·¿óÊûäÿcQGÕhÿ({I÷5\ž;™nV<ÙB«1 xÀëÇSùÔ¿ð’ÞÿÏ(?ï“þ5E?ªÑd=¤»›?ð’ÞÿÏ(?ï“þ4ÂK{ÿ< ÿ¾OøÖ5¾«GùCÚO¹³ÿ -ïüòƒþù?ãGü$·¿óÊûäÿcQGÕhÿ({I÷6á%½ÿžPß'ühÿ„–÷þyAÿ|Ÿñ¬j(ú­åi>æÏü$·¿óÊûäÿð’ÞÿÏ(?ï“þ5EU£ü¡í'ÜÙÿ„–÷þyAÿ|Ÿñ£þ[ßùåýòƱ¨£ê´”=¤û›?ð’ÞÿÏ(?ï“þ4ÂK{ÿ< ÿ¾OøÖ5}Vò‡´Ÿsgþ[ßùåýòÆøIoç”÷ÉÿÆ¢ªÑþPö“îlÿÂK{ÿ< ÿ¾OøÑÿ -ïüòƒþù?ãXÔQõZ?ÊÒ}ÎO×.o.ŒGGŠL•<#_j»áŸë\þ‰ÿ!Eÿ®Rÿè¶®ƒÃ?Öµ…8ÓVб.MîwP}ÁE}ÁEX†]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@Õ—üƒíëŠè"§¨,¿äkÿ\SÿA=QEQEQEQEQEQEQEQEQEQEQEQEQE‡¡¥¤= GR‚£¢{x®­^ÞtŠUÔ÷Óaÿ¹¿ëš6®c@ð|ZF§-ܦ) ¶»Pª{·û]¿?^:xãîoúæŸÍ©ÉøŠÝá/Žâæ ]­MŒI§,ÙßægÇíØñUtÍ Wm6̤‘ZÃi<Ïmo{n]Š“ò3…eùÀ-××'šïMC/J],7«þ½kÂ]ÚøjÎ+Õ *ƒ„òÊ<O_ʼçâ:×áÁy/ÿ¥W±Ÿ½^;ñIñ8b’üúï56îÄqåNÌÀ1N2‰œ·p“ŸÖ“dŸßoÓü*/´Cî啃.IùNG?Nxô¤îضYƒ§æ/‚0IÛ¶¯_:’±•f# ^¤ŸOʨXÞ$²²,‘H…AR­É<ƒý?:±râ;øç9 ˜,¾3ôçüäש’Æø‡'Ñ2kh‘ãÞ's'‹5—8Ë_Nxéþ±«*´u÷Y࢈>ࢀuþ¬×žø‹þ>bÿ®‹üëЮ¿ÕšóßÇÌ_õÑu:>¥5ÕÌÖFÐ$¢ãÌÎöhÕŠíÇw=ElU{U°· Z$'Üíú ±@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@!èiiC@Ôƒ ¨êAÐRi°ÿÇÜßõÍ?›S©°ÿÇÜßõÍ?›SsPËÒ¦5 ½)\ýêñ߈»á!‡8Ï’ý¿éâZö#÷«Çþ"ÈÁ§’ýÿé¼´ ãX u:⢚ÖK¿š/,yc$¶¸±ãÓ­O°éŽi†1· -Œ ®NIè;äôã“Ó½kF<òQî+òê[´ðåóC2™a…ŸqÛ!'“èT?úÝ*¬Í iK¹@ÛÉž•Ö²2\%†Tb»Ñ™J‚?Ù?§â+—RXò6œœש”aãRnJúˆÄMG•õ<¯WÿÕ÷ý|Iÿ¡§Wuù _ÿ×ÄŸúªUåÕþ$½YQØ+± »øJã«Ø®ôÇK%HáT€9Bùò@Çáº0¸gZ’ Ž4){tÅKå²õR;r+q4ù\àFÊr@« ¦;d1 ;þ5ƒ²2ö¨ÁòÙN6vî*æ• VÌí ÓÿB».Ž„#NHc üêK+¢º€)ÏãB’h9Ý΢Š(¬Ž¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(CDÿ¢ÿ×)ô[WAá¯êkŸÑ?ä(¿õÊ_ýÕÐxkúšî û‚Š û‚Še×ú³^{â/øù‹þº/ó¯BºÿVkÏ|Eÿ1×EþtÝYÈ>×þ¸§þ‚*z‚ËþAö¿õÅ?ôSÐEPEPEPEPEPEPEPEPEPEPEPEPEPHzZCÐÐu è*:t€Zl?ñ÷7ýsOæÔêl?ñ÷7ýsOæÔÀœÔ2ô©C/J@W?z¾{øÉâ;ÍÅÖ¶öé#Z»Ÿ1I973ŽÄzWЇïWÍÿô­FûÆv’ÚX]\F,ÙKÅ 8í3ñ:ò(ħ޵4?ñïfG¡Fÿ⩲xßQôk%Ï\#G¦ YŸðkôÔ?ðÿÂøGµ¿úêø ÿáN/•Ýn'©»Äm^8¢ìÖL`–WËý~劦¡ÿ€ÏþÂ=­ÿÐPÿÀgÿ ÚŽ"­ºrµÅ(©üH¥s;]]Mpà•˰^€“ž**Òÿ„{[ÿ >¡ÿ€ÏþÂ=­ÿÐPÿÀgÿ É¶ÝØÌÚúKT†!¥äÃÜÄ Hpy#žçóÿü#Úßýõüð¯t¼2ºÜbI_Ì*Ý Ï^3íî+ÒÀ5ìêÝÛOó1ª®Œ p~î*(Žd—ßú«ÞrîŸ=² F–×Aœ´L6~P}þ•ç=ÌXù;N1òùR[–ûL\ÿþtm>?ÕIÿ|štL.c&)J9¦¶ÍÚ(¢ ì (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€44Où /ýr—ÿEµtþ¦¹ýþB‹ÿ\¥ÿÑm]†ºŸ÷wP}ÁE}ÁE2ëýY¯=ñü|Åÿ]ùס]«5ç¾"ÿ˜¿ë¢ÿ:ë¡Õ´Û[[Xn5 He1Æ»$™U³´`ž¸#ó­&eU,Ä$“ÀÅM¥ß\s`dèðo+;Ü#Œ)Ç'îôö­¶ßÅ¡ý–ÚÆáïãÓVTicýÛI· 'ïgµ+éë¯ùÚÛúéþfµž£c¨+5•í½Ê¡ÃeW }ðj÷‰t»;›¤»‚ä[2¬© ÊÅ70^yã“ßÒ¹K;FöïTh ÿ›>’aÝYý” rp£  õëÏ֮ݽð„¶6:-ݽÄÂZµ)»c©*§sÁèNi‹úüŽ‘5ˆ..¬ÒÊ[[˜.<ÏßGr§@á@ûÝyÇJž=JÆ[dzŽöÝî“ïB²©uú®r+ G}K\Ñn­lî¡…åXËnÑì%F q“Ó=k"ÂÆsk¢é©¤ÜA¨Ù]¬—Mì$èÛóÐzóÒŸTƒ¥ÎÈjúk^ý‰u CwœyeߟM¹Í\®}.vѵ'2¯í¡4GÊ;öùÉó/Æ3Ϧk¹¤¶¿õ²­Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@!èiiC@Ôƒ ¨êAÐRi°ÿÇÜßõÍ?›S©°ÿÇÜßõÍ?›SsPËÒ¦5 ½)\ýêæ5"ßPœK+ʬUùkŸOzéÏÞ¬르„ÊñÍ"ù²‚!Œ»­~ÚåÆNQ§x=Mi$å©‹o¡é·HÏ ó²«´dä 2œÊúŠQáë3pÑ¥€7˜Jí9Ï޼~µš¶²Þ]BÂâk'’æCˆ»+;å çîçèOjŒé÷¯jb¹·šBÖö¨Á”¶@œ’¤÷!HÍp{J¿ÎkËÆ×ü#V_óÖûè…Q¾±Ñôâ~Õ-ò¨]ÅÖuÝ•oO)¤ÞÜY­¼‘Á5ØKdUÂÝ$³Ý;Õ­N).¯,-¼¶6æS,ÌË„PO» …^ª’NNÅrFÛoa¢Çx–w8™°Çž€¸ö戴ýkÓf—W>Ì*@luÃÁDZ¤¼·¸77¶Km3=Õì3Ç2¡(lÉ-аðyéVc¸šÛ½ÜJ¶åã·ŒÚÉ´ñ†rÛvœŒ€3ÓÜÕ{j–¿3Ø\‘½¬KÿÕ—üõŸþúáYâÓBkSr——2EæK’è.OÔT6Z~¢ ¹`dyã_³™”Eo»˜w;[õÿf§¶›PÓ4»¥&)$¼dÉG˜F§ø¶…¨ÇsÇJ~Ö¯óÜ9cØImt(­b¹kË“ ªY¿©8S€;ç¥Y—EÒ ´7R]L Úx`A¦09Í2âU¶Òm,,ã½[yƒ,³ý’Vt_â%vä3pHÇSVµXžX­ —Ë-ª¨ÂDPçÀ ê:v©uê]{ÏV ìW´Ñô»èšKyîX+m`Ãk)ô ¨ ýh´ÑtûȤ’7º$xˆb¹%XƒÛÚ¤Ú]H·..¯!Cs¼K$*²N»Wï+/Æð+>ÚËn¤¦ ã¾òÉ-Á…•L%˜ãy`A4ýµMW;XÚö.ÛèúuÃù[îã˜F²4R`2†Èãz³ÿÕ—üõŸþúáYš=šÛÞiï{§ÈÏö(cŠF·-å8-N>CÈ늟]Y£ŸRŵĢîÀC†&œàà}áÉâ‰U«ÏʦÁF6Õ?á²ÿž³ÿßCü*9¼=g {ÇÚää ¨TžN3Èè:Õ+5Íåà´st—vÞL¡혌6÷~ö{uªòZH—Q[YÉ*É:H× jé >z¥ˆùÆ2A§µ]½ÿëOóQ¶ÆÏü#V_óÖûè…ðYÏYÿï¡þqÇ­Z ­¥‹_Ê^vŒáãÚû@~˜ÆÞ3Æ:R[éWVÚ}·Ø-žÞê}6U™•J“/Ë·wû_{óÖiWùÿ­È|±½¬lÿÂ5eÿ=gÿ¾‡øUxt]>{›¨î·[°VÉ\T7{Öl|ÃM»0G.Æ0ù¶±ÙÉo¹U²øÜÇsÈ8ëŠÖÐ Š)u&¶´’ÚÚITÄ EŸ… ¹¥*Õb›çnßðF-­YÍH~×a’ ¾Ç’- MšY£ŽyËÂÁ$ýßB+4™&ÓY¦±Ï“€˜Îä”8^á¾ïNzUÉ-eûF®RÍÆ¥<{­®|“ÓÊQ3SxȦêÔ»÷ÿ­F:hhÿÂ5eÿ=gÿ¾‡øQÿÕ—üõŸþúáX°ØJšeÛB’ˆØÂ&¶ŽÎK|¨oŸ˜îb¹qP˜ðÝ >Ô¥‚j d€Ú1|¡Ö T‘»Ž õu÷ßõoó£Øè?á²ÿž³ÿßCü*9ô>ÚšIn¶/]£qü‚’j¥®–­&–—1›h£¸qæÛ2,d²•[%p2Np+h_Ã>—¾UÏ“4a‚Æ„È{.NyíQ*õ“ÒM”¡º3-4}.ú5½Åà %N~Rê*?Z[-O¾²†ê7¹T™¨b¹úñV4^K‘åÌ4ìÐ Á rÙç®zóŒVŸk%­­»XéS,ñZH.ÖHZ5™°0§ o9ôÏZ¯mQÝ)½Ë47á²ÿž³ÿßCü(ÿ„jËþzÜßCü+ ÏNiçXd²Ýbב¹ˆY<1ãÊ|üœ íç¦jqeå‹t¾±ž}:.Qa4›ÿÝ£’6䃌Óu*§nv$£Ø½e¢é÷öPÝF÷*’®à®@üªÇü#V_óÖûè…bÙÚµ£i2›)%!‰)­XˆW',²c@<ƒ×¶õ‡Vðê͉Ò)‚Hª 2œd9£Ò”êÕRÒn×cµE »Æ"{‹± O0„œ*䌒¨@´·6-ªDÒ]Ü7œ»£1œz€ªN=êœv:Ñ‘íQôç!#„,nDòá+‘ƒŽÝW­HÓ¯ »bÒ[(áEXYÞ¤¬ nç#œvªuj/¶Ûþ¿®¢å]¿­&·Ð +æ\Þ|щx…›j2ØO—¡ëŠÐOØKÈ“ÌÈÀ`ÊA½+f¿¸œOrugžÄ#}–о[{ü§å;x#¸ë]>’’ǤYÇ<+ « «F½Ò¦¥j±ÔŸõòŒ[µ¿­ _ðYÏYÿï¡þÂ5eÿ=gÿ¾‡øV͇֫1~ÎŒoøF¬¿ç¬ÿ÷Ðÿ ?á²ÿž³ÿßCü+fŠ>µ[ùƒÙñÿÕ—üõŸþúáGü#V_óÖûè…lÑGÖ«0{8v1¿á²ÿž³ÿßCü(ÿ„jËþzÏÿ}ð­š(úÕoægÆ7ü#V_óÖûè…ðYÏYÿï¡þ³EZ­üÁìáØÌ¶Ðí¬äiã’bé˜ F9B==èð×Sþñ­&ÿU/ýrýÖo†ºŸ÷z¸’©M¹;êsVŠOCºƒî (ƒî +´Èe×ú³^{â/øù‹þº/ó¯BºÿVkÏ|Eÿ1×EþtÝYÈ>×þ¸§þ‚*z£möï±[y0@Ñù)‚Ò•'å¶š—þ&óëmÿÏÿ@hªßñ3ÿŸ[oûþøš?âgÿ>¶ß÷üÿñ4fІ ]Ùãš?.TÆå#¡ð?•M@Q@Q@Q@Q@Q@Q@Q@Q@„…’I¨¡º·¸$C™8©¬üO£ßÝ%µ½Ù2HH|N‹!B³ð&ŸÕé*ûs˹{ìßóËÿ4}‚ÛþyãÆ«wO]Mtæ™Òå›b‡…ÕY±œ#i8ô4néÇR:rNÏr§k*DìªØÎ€Ú;G°¥ü«îAÏ.å°[Ï/üxÑö oùåÿʃÄÖpéVW7÷HÒ]nÙö[yX>Óθ÷«Oâ=&=> ãx­ÁÛDfg=ÀP 0r1Å—ò¯¹<»–þÁmÿ<¿ñãGØ-¿ç—þL%/Îö^¥Êù\£'ŸÆºj^•¯Ê¾äò½®`M¤És C>™g,M÷‘çfê ÓìtÛ8#ke°ŽÔǃåDp¸=ÇÐþU¹Tü…gÿ®èRSöínU÷<»™­ä¹" 5‘2F用o¦â!P°€Àá¿øš¢šÍ•µ¼3JÞ`‰ TœŽ;àQÿ &™ÿ=&ÿÀy?øšäµ¶üCØÔéþòþÖÿŸð%¿øš6·üøÃÿ-ÿÄÕøI4Ïùé7þÉÿÄÑÿ &™ÿ=&ÿÀy?øš-CËðcWùâZ’h¡ Koj„ô vÃ?øíH e¸¹oþ&­é¯Zm¼¾[ž5’FXËHçÞ©Ï,6ZŒ°ª°‘e ˆH–§Oº?3[<<½—Ü¿ÈæDÝ­ø¿ó¡# ×Ãñ4*8\7ÿMû|>’ÿߦÿ >ߤ¿÷é¿Â§ØÃ²û—ùuÛñæ?kÏŒ?øßüM[þ|aÿÀ–ÿâiŸo‡Ò_ûôßáGÛáô—þý7øQìaÙ}Ëü‚ë·âÿÌ~ÖÿŸð%¿øš6·üøÃÿ-ÿÄÓ>ߤ¿÷é¿Â·Ãé/ýúoð£ØÃ²û—ù×oÅÿ˜ý­ÿ>0ÿàKñ4moùñ‡ÿ[ÿ‰¦}¾IïÓ…o‡Ò_ûôßáG±‡e÷/ò ®ß‹ÿ1û[þ|aÿÀ–ÿâhÚßóãþ·ÿLû|>’ÿߦÿ >ߤ¿÷é¿ÂcËî_ä]¿þcö·üøÃÿ-ÿÄѵ¿çÆü oþ&™öø}%ÿ¿Mþ}¾IïÓ…Æ—Ü¿È.»~/üÇíoùñ‡ÿ[ÿ‰£kÏŒ?øßüM3íðúKÿ~›ü(û|>’ÿߦÿ =Œ;/¹]vü_ùÚßóãþ·ÿFÖÿŸð%¿øšgÛáô—þý7øQöø}%ÿ¿Mþ{v_rÿ ºíø¿óu"ÚlÚEîŸæY™ˆùOb¢±|5Ôÿ¼kfk¸¥·™I“õŒ÷Oµcxk©ÿxÖô¢¢¬Œ*îwP}ÁE}ÁEjd2ëýY¯=ñü|Åÿ]ùס]«5ç¾"ÿ˜¿ë¢ÿ:è‰.tÔ·imý™‚ÞKß×÷n?ð_þ&’ÑÜoUcž¹ÒuÖæ¸H3 j°\†Þ¿qbÚÍŒúöëCé7çN¸ˆAûÆÖ–íFõÿWæ«nëèk¡û\_ݸÿÀYøš>×÷n?ð_þ&…§õéþBzÿ^¿æUÓm®-õýfêHöÃrИ›p;¶¦G>µ£¸ÿhN@ÜD3×—¨Ü_ݹÿÀYøš–Ó|“ÍpÈÈŒªˆ`¥ŽqÛïwô g7m§ßzÚê×Em!7³^0¸CêTñ± ÉÎâ¬ýßQÕt-Ôiæ‘poU!‚³*ƒ»'§ w®þ£†m¡X`‰"‰~êF¡T}¦´ÅI¤kwͳÝ[ÞJÑj^Ú>Ø¿g‚p[¸ >îzóZÚD:–“usbÚsMm5Ô“-är \–ù”ÙÇ×GE Eoë§ù×_ë¯ùœŽ¢ê§Ãžu¾ß±Çp'ùÔì-÷zsíU£Óu "þßQ6©)ŽêóýΈÆ9\2º’qÛHà×oU¯4ëE/¬íîUNTO¸Û"Ž·Sð…ÕÜ–A–Ç6÷7·RI/œ¸‹ç8þ,œŒŽ8®®›QÃÇ*F£ ª0ô@Vÿ˜Õ·ýp“ù¥Y¨%ŠAsÌ!ÑYv¹ qÜŽƒµU¿°¹›Åš=ìqn··†áe}Àm,oÉÎJæî<9ªy¥&›Gqª Øõ?1”†@ç#;÷Œ01ÏZì~Ñ}ÿ>ÖßøßüEh¾ÿŸkoüoþ"…£OúÞàõVþ»SO¹›Ærê7bÖÞÍaµbÀ噉ã9ÖÝRûE÷üû[àCñ}¢ûþ}­¿ð!¿øŠ:X<˵@ÿÈVúáþ…%;íßóímÿ ÿÄSbI ÒO6Á#…]¨I qÉ=OjåO†ìïâ†åæ¸Þ$Ü#eÁ;@Ï öò¦ÿÂeÿ?wŸ÷Òñ5Ð}Žæ²Æ>î÷*Tzphò/¿ç•¿ýþoþ"¸¾¯±Ôôþ·WìÏOSŸÿ„>Ëþ~ï?ï¤ÿâhÿ„>˵ÕçýôŸüMtE÷üò·ÿ¿ÍÿÄQä_Ï+ûüßüEW§ü¡õÊßÏø¢¬ÑýŽ yÇï ce*§?ˆJ|D]ÞËpWt~ZÆ­ž¤'˜§\éw7L¬ñ@pJÎÃpô?'J°¶×¨¡V ` `3qÿŽWC•ÖÇ`“½ÿ<˜¿çŸêhòbÿž©§yßóÊßþÿ7ÿG‘}ÿ<­ÿïóñ#M;þ#|˜¿çŸêhòbÿž©§yßóÊßþÿ7ÿG‘}ÿ<­ÿïóñ|ƒNÿˆß&/ùçúš<˜¿çŸêiÞE÷üò·ÿ¿ÍÿÄQä_Ï+ûüßüE Ó¿â7É‹þyþ¦&/ùçúšw‘}ÿ<­ÿïóñyßóÊßþÿ7ÿGÈ4ïøòbÿž©£É‹þyþ¦ä_Ï+ûüßüEE÷üò·ÿ¿ÍÿÄQò ;þ#|˜¿çŸêhòbÿž©§yßóÊßþÿ7ÿG‘}ÿ<­ÿïóñ|ƒNÿˆß&/ùçúš<˜¿çŸêiÞE÷üò·ÿ¿ÍÿÄQä_Ï+ûüßüE Ó¿â7É‹þyþ¦&/ùçúšw‘}ÿ<­ÿïóñyßóÊßþÿ7ÿGÈ4ïøÜÇÚNU0|¦ç'ÐÖ†úŸ÷ó­û˜®ÖÒs$p„ò›%e$ô=¶ŠÀðßSþñþu¬60«¹ÝA÷A÷fc.¿ÕšóßÇÌ_õÑz×ú³^{â/øù‹þº/ó ÞÒk¤±¶XàB˜-1S÷Gm§ùÔßh¾ÿŸkoüoþ"™eÿ û_úâŸú©è?´_ϵ·þ7ÿGÚ/¿çÚÛÿÿˆ©( bI ÒO6Á#…]¨I qÉ=OjšŠ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(UÔ«(e#ÁVÏN‚É£ Y¸ŽJAíVè Š( Š( ô4´‡¡ êAÐTu è)´ØãîoúæŸÍ©ÔØãîoúæŸÍ©9¨eéS†^”€®~õ&ŸÿÏÿ]æÿÑJ~õ&ŸÿÏÿ]æÿÑ@ËU_:å£,ʈ¡ˆSŒäžÿ…IQÂÓ§ôÊ?æôÄIöH}eÿ¿­þ4}’YïëeÞx†;íFÞæ‹if.Ñ÷ÿ­^C c‚¿QY×þ1}3ìwkiÌ‘4‘}¹|ô/Œâ2£põJ ô:_²Eë/ýýoñ£ìúËÿ[ük•m]´WÄ·†30ŽkD—Û÷•W®®kCVñTEÍìw–ÖÑÌHòîP/<@äžþÔµöH}eÿ¿­þ5òBX°U ¤õÁÏ¥dè(Z»¹´)l³À‹&mn–â6VÈûÀ G#•ªOüL%ôÉ?›Ð´RHrIíY«›ÈôAk¨màfGp§”à…ãæçŽ3“Å_¢°luëíKK’æÛGo´%ËÀmä¸UÛ·ø™±ÇÐKi®ÞßióIm¤î½‚å­¥€Ü(EaÔïÇ#§AžzP홢êͪÛNòÛiíçh&xpqœ0ê9«>ÃÅ2^\YÓü»+ù;i„᜕üÉ—îžçñ@ƒ­ë£GÖ4¸¥r¶·_3lM# mÀPOSØTòëMmascwnÐÜÝ,;¤G;ºå@«qü\ô¯Ebé!‹S»»´h¥Žh.$ˆb'(Bg~ݹ>™«²jö1 âóàX(kŸ‘¾A·w§wŠiVë÷˜\e‚ÇCÓu[ŸÄË~ÖZFŸöébd™ÞaFeFpIb9Æ(#SQÿmÏýroå\—†úŸ÷ó­mKXž(¬ìî,DS_G6ñçò¶!n |ÙãÓ­døo©ÿxÿ:¡ÝA÷A÷˯õf¼÷Ä_ñóýt_ç^…uþ¬×žø‹þ>bÿ®‹üè©PhgÒmHUf€îGGÞÛcSò‘Çç?…d?‹ÚóÂo¨Z#Áv¾Y`оÅÌxfP­Ç¦jñ³º¹Õ4”€ýžÚW“pþ(“Ï\²“KÖƒeЛM+5¸T¾rlŸl€äd⚣¾ñ•¦Üýžîëd€lFÌ…È(>øªšÿ‰ìt›[¸Öçý:;v‘biœ¥Š‚ëŠÆ½ÐnäÕ¯ç›M¾»µÔB1K}CÉòþ@¬’.ðqÔf¦¾Òõ;í»{4ÞA©D7I‘Z#åˆðÛÈÈàŒ÷©w°ÖçBºœ6Ú…ü¢41#;`õ`8rI' ¤:iÔ$™â¶ ³2Âèź`)‰öÅW¼°/áˆlæ±’íÒ8Ôárã•bF#={V8Óué4ëIç§žÊÿφÞâT2<[Jíg_—xÜH?Lš©|L˜ß•¯â :;ï®|—b ‹IKduÊíÈú‘PK¬µ,æI,¯c™ËÁTÁí֨ꫭjg7ö}üV H&´·¼H¥ÝÆÖ,:ð½UÓ4=JÎßÛíŽmVxîJ¥£tlçðiyŒßƒÄZUÕ÷Øà»9,©ò0W+Ô+µˆôÔ:ö±w!œp/ÙãpU~r\2òO@ó¬Oøv{¬m¯´ëÇ6LLw_Ú ÈÈ$co5ÚÐÖ»{c¨AÖ“²Ê{‘mâáY˺JÐýsíPIâ§K‰$s.+¡h÷žhÈ|…ÎÌr¡Ž3ŸÂ¢UÕ%ñ#Ý_h×SE ¥,ÊM—t2_%=²½U—EÕZÚãC[E6Sßý£í¾jác2 íûÛ³‘ÓôG¥ÿ­¿àƒëoëøµÖ»{c¨AÖ“²Ê{‘mâáY˺JÐýsíW5­Iô­;í1À³ÈeŽ$¤Ø v 2Ø8ëéX꺤¾${«íêh¡”¥™I¡òâN†B ä±ç¶@àw­Ù.n´ù’ëÃëv¢r‚٥Ĉ:Ió`~‘GEý_×`ê6óW¿Óôswu§Û‹“4qG ]VÞÁA.Pc¯¡éSý«WC¥Û›­ø­æSo÷‹”– béúeÍžwÆ‚·óÝo‹L2Æâð?¼výàNÀϺu…^E&‰ç[ÜÜšj̇Ɉ¨eˆ^H'h8£úü€¿g®Þj[Ïk¥oºŽá­ä„Ü(E+Õ·ã•ú ûU­VmZÚv’ØÛÏo;A,[ÀˎÆG#Ò° ²×tßÜÃabðµÅÞa¶Ždf´€»ib9œÞÕ¿¡Eö}8[2{ŒiÙÉä±*Í’NrIÎh¬:íêë¶7úWÙVì?ëp$9Q’òñèM?JÕïõIÝ—O·KšX¼ïµçcÎ͘äïU uFÕž÷TÑ®…Ô¥‘f3Bc·9  9<àdã$û Ž 2æ_Ú^Ûè+¤ˆ™Úêa,é‚6á ÝÉ-Œb…ÐSOJÕïõIÝ—O·KšX¼ïµçcÎ͘äïTšÎ§¨iÈòÚébê¢2Ë#\¬x9 0I8çÞ²-ôË™|Gi{o¡.’"gk©Ä‘ÿ¤Ûµ ÝÉ-Œb¬øŠ=Jîú UÓn.ô ›çX%L¯ž·°;{œuàzÒè‡Õ“ßk×piQêvšjÏfmÅô·"&U#8'⟪øŽ;EŽý-äžY¢óa¶û¬À.ãŸî€:ŸþµT×a›R±ŽÙü2÷@ǹ7Où`Ž»²õ\ÕkÏ ê3é-!Õ.[RþÎû+ªˆÊÊvœŒº’7§#b23zÏѵëÜ_Äl¦µû+ª7 Á—p%‡¯N¿N”í!oí!µ°¸ž8­TµÓH™2t)µGaުŤ\M{♤·†ü ŠhØnÇ”‘×9ê*¥»·õ©1Ù\[OGT»²²³Þ±AæÃ3˵g;ŠñÁÂäcwéL¶×5iµiôçÒ-–XmüÖhïK*“÷U–0N®éPéšöâu¸7³ÍeŠÂ¥Ò%†8L*‚9ý{UÿØÜ[Cyq{Ë»»©%pX.v Èÿd-/ëñüÈ‹OÖµvM2ëL‚/*,²Ãve “ò©“‚~‚·CY±¸¶†òâö=—wwRJà°8\íA‘þÈZ×= u#©AQÔƒ ¤Óaÿ¹¿ëš6§Saÿ¹¿ëš6¦æ¡—¥LjzR¹ûÔšü{?ýw›ÿF5)ûÔšü{?ýw›ÿF5-UtljõÊ?æõb¨Í*[_I$Ì#ŽH‘C±Â‚¥² í÷…15Ý-nâÎW¡ò\ùÑ’ ŒúU/z¡¨øZ[Ë›ó¡P_H’LjÁ]¿u÷ ”pAï[fþËþ­ïòÿ'Ûì¿çú×þÿ/øÒZ νðêÞͪ–»d‹PH÷(A˜äLmpsì8ÇãPIá‰ïäšž¦'šââI!·ò¼³VÆæÉÉ­·ÙÏõ¯ýþ_ñ£íö_óýkÿ—ühÒྵ}¶ö’pÅmäãëóþ•i[:”ßõÆ?ý ê°¿²ÿŸëoûü¿ãRZ8žêk„æ"‰·f ±$z›ö4ÄC®h–úõŠÚÜI**¸‘J`ŒŽ™RaìAV[mfÛ×ÖÑiî„L–†Þ?'9àìq[´R¶ú¦s·ú,ÖÚ^Žºl"Y4¹QÖÁ|Å U€'€pÄóÞ¨½¶¿¶¥}mbñÞêW1ƒrÆ^UBîÉ!Kð{2:â» )ï?ëôÐäæÓ./|:š,DÖ0K(I¤žXÝ‘>óI•fË“ÐõÉÍKi ]O¢Úi×SIfÚtÿ¹–ÜFDÊ¿qÊþpGÞô®žŠã!Ó¼C¥h÷ñ[}¢æææýÈmІH‰9‘~èÜGcÐ㊴ëªZølZé5Õ¬¾hBhZ@‡—äëÔç'5ÔÑ@u¹—¡Ä`Ó>ΚlÖ2B¬ò#³“ÉbU›$“ÎNk—Ó<9ý‹¶œö·QÉ!½¿[•+p¬íªA'iè1Šï(£­Ã¥ŽZóHºÓ5=2ïN¶¼Ôc€ÌdY.÷8Þª ÓŽ™¨"Ðõ/&Úi Uš]d_M H…0F3ÜôÎ;šì(¡;;ÿ[ÜÖ04H5 :þúÒk6Ó]Ëp—k*mÀW;³Û¦+;YÓµd›^ŽÓNk¸µXRD™Ê`›`ÄqÐñšì(£¥¾C¾·9'Ñ/ÍŸ‰#û8-ykp ëó°‡ixç׃OÕ Õí¤Óì®mX¼_k˜ÜF`™€ÙL“»€:u®ºŠwÖäÛKdÚMý´&ëȤ‡Y’ñ yU|ä`@Á'¹ÈÎ:UK(¯5Vêî+B‚=f $C*6ÅH@<ƒ‚FGžµÛÝYÚßCäÞ[Cqs²d¹úu½µ½œ ´AýØâ@ª>€RZ]­þCzÿ]ïþgªøwQ¹¾¾ºŠe„W1Æ—SL¢µÊ¶s×)ÿØW mõž›qÜ7Ërö÷—žkÎû嘃ÆOj쨡iýz_×Þ`è6÷ßÚzµõå“Ú ¹#1Æò#¶œí$u÷¬õÑuåæß¦º×gç_õG?7_Ó¯µuÔSNÎÿ×Oò–þº¯Ô㯴mLjw—Ööžh]J ¸ã*™QbØÉÀ9'®:Q©éz…α¬të×I­D2[[_ùDÁ‰!° úñ]¼¿­¬×ãsŒki<9z—V¶ öÇNX tŠöûI=\ò¿7$Õ—¥è—¦ÃIÔRÒòætØáh­oM¼ˆA,ÞPÊCz×yw¥i×ò$—–·Ÿu¦…\¯Ð‘ÅZ _Ÿù‡õù‘ÎéšKéÚÌSÇj`±‹LX@iC`劓œœý+KMÔ¦Ôtu³+,±ßÌ>ƒq¨ÇçZ4Qp9}MºÄRßÇ¥dÚÉ DeF3ÈXÛP1Ï=Nj+ÛM^-K][]+í1êH‰ÆdTLG´îîü®¶Š-¥†ÎUÐõ…¶KÒöòÑ4å·ˆZ݈BÊœ]ÀñÜô€žiˆ·ERkýš›Ú¸‰bK8ÈgPÜr@ÿk¥:ÏTÓõâÊúÖä§ÞL¯·ëƒÅ[¢°îüK®¡ui›¨]5¢«Löè…T0ÈêÀž=-ω­á´Šî +ûËi!m¼9UCÜ–#Ÿa“í@XÛ¢³¯u«K- êçÌ–×ËYÊ3Æ0 ¢ µñ Sݽ¤ÖÖ—"&™"ž5ÌŠ:í*ÄÈã=è3bŠÊÓõد爐{;»;”ŒJ#¹E“8Ü ’:þ5«@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@µùÜÿ×&þUÉøoï÷ó®³QÿmÏýroå\Ÿ†þñÿxÿ:î`û‚Š û‚Še×ú³^{â/øù‹þº/ó¯BºÿVkÏ|Eÿ1×EþtÖÃå2ÕV&Áó“2«!TS€[¯n•›'Œm'ðãêZ|I:lÝlÒñîp¿0#­+Å,Úׇ¤Ž LpÁ*É&ôcžœôúƒX±Ãr|.4Ëžµ ænÀI¶P~Fèü ñMyÛ\j66“ÇÍí¼3Kþ®9%UgúyªšÖ¹g£YO$·VÉr°¼‘C,¡ZB œŸÂ¹-OM’ãYÕ èÕVÓQXÌFÖÉeÊlkŒÑr{uÏZ›S´{'×á¸Ó.ï^ú[KˆíŒÙ=¡X€vÀžp9ÍK½†·;/c:\7×/(Ñ,ŽÌØUÈ©íDz„¶M{õ³Ú®s:Ê¥?ÚÎ++P³ŠoAmyØÛ9Ñ$G]¤¸9ÁŒÆjwºE¤÷š|“Ái¨‰%¶1½Ä!Hb=ÃqßnqU/‰¤LoʙԶ·¤¥ª]>©d¶ò©1¸@Œ}Î ¨®uS³¥ÙÄ#’Ô•Ì€ç…PF;sšÅÕ¯®.—Ùmoítçy¯›¾Pü`yl¤…9nvöªzE•õµ¿…ZK[•ò’â ˆæ"ÿp°þÇáKÌg`š•Œ·rZEyo%Ôc/ Ê¥×ê¹È¬ý]—X¬–ÛñÍ“&ï¼\c é³õ®gÃzD‘\é°_V;Ë)ðmC»çË»dçšô ÃÙ%û[˜nŒ+8¶k±òVSü$ç=HÆ3Þ¯jZ‘ÓÄ{l/o󅵌6îI Ï&¹)­/³î¼<,.ŒÓjFe¹Ÿ+Ê2‰7—èëšÞñ.¡wi½µ¤WCí,VK›{g˜À€r@P~cÐgŽý©}”ÿ®ÕŽoÚ:ÆòÚÚêè^ÈcŠ(•Cî‰31´çš–ë]û%­¤²i·Æk©LQÛ(Ìyùöã OZ˸‹G]O‹û;Wò!-äyN’ÆÀXíÃry<šP¿‡ì½i«M:I#Âöë!ž1’¹ˆä6ÓüóMõ¨ŠñžÀÝKkq XÂêAŽØRr~„Ö}¯‰mfžx.m®ì$†pVíæ1Õ† ééÖ›¢Mmá>¡Ì·¬Ž±¸Ý3 $  u}¸ük¥×4íPÜAzºÅõ›Æ<ë9bŠÇ«2Ôò{ŸaCëa®—7,¼Okzå>É}˜ ÄK4<Ïî€OQÁÁäqRéÚôW÷ïböw–w+š±ÝFºg'¿nµ‰ ÅÕæ¥§ßÿeßBš]”¾rI VyTyh?‹îžG*Mût—:¥õž¤ú›ÀXÇöQcyFXN}òÆž—þ¼ÿ¯é¯ckQÖFŸyoh–7wsÎ"¥¸NHÌ¿ÞËÍwì“Z@4Ûéî.biD1÷ ]¹Ý—ø‡Bk7_kK•‚w±Ö…ïÙÉ‚K8åîv±S´ÜUmA i¶ ªZjͬ¥˜}9dù\J½@Èn*vþ½J6õ téÐ$Òiz„‰åy²£FòG}ß7Qè3M¾ñ6pGqýÜ œËo*¨yÉ$ŽÜàdûVFªÒ\ørÚÃW¶Õ¤¾kei ŒnU¤#X¯ÊyêŠeýÞ ltÝ&úÚò8äµV¿šÎÑäÏ1.ÀB“ÎOaÓ­7Õ]Dº]޶Úâ+»h®`mÑJѽA¥¨,ÌFÊ"&Š€$mB£§‘ô5=7¾‚[QHaEPHzZCÐÐu è*:t€ZHãîo÷ùµ-6"ñÁ EÛžø-Ÿæ)9¨d©È¨ÝIíH ‡ïRiÿñìÿõÞoýÔ÷]€³p£’OS4îl÷ó‡’G\Ž¡ˆ?‘ Äñ]ä“é—ÚE¾5ÍÄ>\oÄKqËôïœVeí£Ú\kpÝéò_B‰k$PyŠ@Œ.ÂßÁ†Éçœ×qE œTÚn¡ÜG,RÍ ð÷ÙÚERÁåʃÜûu«vZ|–úχ¦ŽÑ£Û§IìxÁÄxV8ëœð}몢ªý®¿æM¿¯»üŽT³‰¼I­Û]m¢¸ŽˆØ,ÛdÂA)òŸø9§Ô£Ñô½P´½†&¶Íä¶–!Ûœ‡–¤)#©ì:u®êŠE\æüKÚü q ¬øhGÄÊáC/q@1šÍÓâ0ø’;û Ma­’ÚEº{ô‘™‡V?3çÎ{+¶¢Ž·Kž‹¿Š§¼´¶ÔRÒ[r'}B6S¿vUSÍŒÈû½+¬¢Š:X:Ü(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š­¨ÿÈ6çþ¹7ò®OÃxÿ¼ušüƒnë“*äü7÷ûÇùÐsÜQÜP.¿ÕšóßÇÌ_õÑz×ú³^{â/øù‹þº/ó êËþAö¿õÅ?ôSÔ_òµÿ®)ÿ Šž€ (¢€ (¦M*à Êç ŠXŸa@¢ª«j.¡’Ò¤d˜ƒøáM/üLÿçÖÛþÿŸþ&€,ÑU¿âgÿ>¶ß÷üÿñ4ÄÏþ}m¿ïùÿâhÍ[þ&óëmÿÏÿIæÝÄéö›xÒ6`»ã“v éž~(ÕQ@Q@Q@Q@Q@RHu&€І«{‚D3Å!B88üªj(¢Š)CKHzޤGR‚ MxÒEÚè¬=fE0 6v§­´?÷ìR 3ÖÒûö?¬Q@†Ÿd¬YÛ‚:ÿ…>{ DòHÿudœTÕ[þcVßõÂO攟j¹ÿ mÏæŸüUj¹ÿ mÏæŸüUiÑ@Ÿj¹ÿ mÏæŸüUj¹ÿ mÏæŸüUiÑ@Ÿj¹ÿ mÏæŸüUj¹ÿ mÏæŸüUiÑ@Ÿj¹ÿ mÏæŸüUj¹ÿ mÏæŸüUiÑ@Ÿj¹ÿ mÏæŸüUj¹ÿ mÏæŸüUiÑ@Ÿj¹ÿ mÏæŸüUj¹ÿ mÏæŸüUiÑ@Ÿj¹ÿ mÏæŸüUj¹ÿ mÏæŸüUiÑ@Ÿj¹ÿ mÏæŸüUj¹ÿ mÏæŸüUiÑ@Ÿj¹ÿ mÏæŸüUj¹ÿ mÏæŸüUiÑ@Ÿj¹ÿ mÏæŸüUj¹ÿ mÏæŸüUiÑ@Ÿj¹ÿ mÏæŸüUj¹ÿ mÏæŸüUiÑ@Ÿj¹ÿ mÏæŸüUj¹ÿ mÏæŸüUiÑ@Ÿj¹ÿ mÏæŸüUj¹ÿ mÏæŸüUiÑ@Ÿj¹ÿ mÏæŸüUj¹ÿ mÏæŸüUiÑ@Ÿj¹ÿ mÏæŸüUj¹ÿ mÏæŸüUiÑ@Ÿj¹ÿ mÏæŸüUj¹ÿ mÏæŸüUiÑ@Ÿj¹ÿ mÏæŸüUj¹ÿ mÏæŸüUiÑ@Ÿj¹ÿ mÏæŸüUj¹ÿ mÏæŸüUiÑ@Ÿj¹ÿ mÏæŸüUj¹ÿ mÏæŸüUiÑ@Ÿj¹ÿ mÏæŸüUj¹ÿ mÏæŸüUiÑ@Ÿj¹ÿ mÏæŸüUj¹ÿ mÏæŸüUiÑ@Ÿj¹ÿ mÏæŸüUj¹ÿ mÏæŸüUiÑ@Ÿj¹ÿ mÏæŸüUj¹ÿ mÏæŸüUiÑ@·³Îö7 öSƦ&˱\=s~ûÇýãüë²Õäuÿ\›ùWῼÞ?΀;˜>࢈>ࢀuþ¬×žø‹þ>bÿ®‹üëЮ¿ÕšóßÇÌ_õÑuRkVM…ŸÛd’0Ð#n;ªŒY”¿Ž)£T“þ‡´2§Ø—O9ãÞFséXzÖ«ÞÄ©7—6riÉ1Úݬ!%*r\]Àå}z*I¼?¨LÂ,,sè¿ayCÝH=GR{f’ÚÿÖÌo·õºÿ‚mAâá'xï>Xb3±hsêË‘óuÍjC4wG¦¬^!¾¿Ð­5m;Láš6’QuwäùX÷Á‡ž8Ç­^ðö©>µ¢Á¨\Y C6Y#oÊgålàuôïX?ØšÇü pèÎ¥§šUŽUòmÚL•Üq»l-v‹*"…U:Ußúþ¿áÉì:ªj_ñè¿õÞýµnªj_ñè¿õÞý´†C{}m§Ûù÷RˆãÎÁ$Ÿ@&³?á,Ò?ç¬ÿø /ÿWu]*ßWµX.E ÛÕã 2œÜБӽbÿ §ÿÏíÿýõÿ\õ]u/Ý¥c®„p®?½m?"ïü%šGüõŸÿeÿâhÿ„³Hÿž³ÿà,¿üMRÿ„OÿŸÛÿûê?þ"øAtÿùý¿ÿ¾£ÿâ+>lWdmÉ€þi~ä]ÿ„³Hÿž³ÿà,¿üMð–ióÖü—ÿ‰ª_ð‚éÿóûÿ}GÿÄQÿ.Ÿÿ?·ÿ÷ÔüEØ®È90Í/Ãü‹¿ð–ióÖü—ÿ‰£þÍ#þzÏÿ€²ÿñ5Kþ]?þoÿï¨ÿøŠ?áÓÿçöÿþúÿˆ£›Ù&ù¥ø‘wþÍ#þzÏÿ€²ÿñ4ÂY¤ÏYÿð_þ&© §ÿÏíÿýõÿGü ºüþßÿßQÿñsb» äÀ4¿ò.ÿÂY¤ÏYÿð_þ&mªÙkŒpÂ^Hã¤e’&@X ÷€ÏSúUøAtÿùý¿ÿ¾£ÿâ)Ðh°øzì\Á-Ä‘IÚR§iÊ‘Ð8?¥]7ˆæ÷Ò±Xá³nþfÆ£,oa4êŒ$·C"3FT‚qÈéÆ 8jVøé7ýùoð¬Ë‰í&¶·\ËqFªFI½ëlAb÷Ñ®ƒŒƒûJßÒoûòßáGö•¿¤ß÷å¿Â¬yÿÏ!ÿ}<ˆçÿ¾1 ‚ê+‚BnÈêJÿ:”ô4‹hrˆýiOC@Ôƒ ¨ê@F4€Z)2=E¢˜ E&G¨£#ÔPÕoù[× ?šUŒQUå—°Ý"#!E qÈɵiQT¾ß'üø\ßQÿñt}¾Oùð¸ÿ¾£ÿâèíKíòÏ…ÇýõÿGÛäÿŸ ûê?þ.€.ÑT¾ß'üø\ßQÿñt}¾Oùð¸ÿ¾£ÿâèíKíòÏ…ÇýõÿGÛäÿŸ ûê?þ.€.ÑT¾ß'üø\ßQÿñt}¾Oùð¸ÿ¾£ÿâèíKíòÏ…ÇýõÿGÛäÿŸ ûê?þ.€.ÑT¾ß'üø\ßQÿñt}¾Oùð¸ÿ¾£ÿâèíKíòÏ…ÇýõÿGÛäÿŸ ûê?þ.€.ÑT¾ß'üø\ßQÿñt}¾Oùð¸ÿ¾£ÿâèíKíòÏ…ÇýõÿGÛäÿŸ ûê?þ.€.ÑT¾ß'üø\ßQÿñt}¾Oùð¸ÿ¾£ÿâèíKíòÏ…ÇýõÿGÛäÿŸ ûê?þ.€.ÑT¾ß'üø\ßQÿñt}¾Oùð¸ÿ¾£ÿâèíKíòÏ…ÇýõÿGÛäÿŸ ûê?þ.€.ÑT¾ß'üø\ßQÿñt}¾Oùð¸ÿ¾£ÿâèíKíòÏ…ÇýõÿGÛäÿŸ ûê?þ.€.ÑT¾ß'üø\ßQÿñt}¾Oùð¸ÿ¾£ÿâèíKíòÏ…ÇýõÿGÛäÿŸ ûê?þ.€.ÑT¾ß'üø\ßQÿñt}¾Oùð¸ÿ¾£ÿâèíKíòÏ…ÇýõÿGÛäÿŸ ûê?þ.€.ÑT¾ß'üø\ßQÿñt}¾Oùð¸ÿ¾£ÿâèíKíòÏ…ÇýõÿGÛäÿŸ ûê?þ.€.ÑT¾ß'üø\ßQÿñt}¾Oùð¸ÿ¾£ÿâèu_ù]×&þUÆøoï÷ó®¦þñåÓ®PÚM17Ì̘{15Ëxsï7ûÇùÒ¹ƒî (ƒî )€Ë¯õf¼÷Ä_ñóýt_ç^…uþ¬×žø‹þ>bÿ®‹ü躲ÿ}¯ýqOýTõ—üƒíëŠè"§ Š( ¢¸„\[K $ ©#¶jZ(žùT/‘lØÝç°Ïá°ãó§}¢ûþ}­¿ð!¿øŠ’Šíßóímÿ ÿÄQö‹ïùö¶ÿÀ†ÿâ*J(?´_ϵ·þ7ÿQÉö«‰4pǺ¹Ù!rvœÊŒrX¢€ (¢€ (¢€ (¢€ (¢€ (¢€ FUu*ÊHÁpE-RÏN‚É£ Y¸ŽJAíV袀 (¢€ CÐÒÒ†€#¢Š) (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š¯ÿ ûŸúäßʹ}æÿxÿ:ê/ÿäsÿ\›ùW/áϾßïç@ÌpQDpQLC.¿ÕšóßÇÌ_õÑz×ú³^{â/øù‹þº/ó êËþAö¿õÅ?ôSÔ_òµÿ®)ÿ Šž€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ CÐÒÒ†€#¢Š) (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š¯ÿ ûŸúäßʹ}öÿxÿ:ê/ÿäsÿ\›ùW/áϾßïç@ÌpQDpQLC.¿ÕšóßÇÌ_õÑz×ú³^{â/øù‹þº/ó êă§Úãþx§þ‚*zËX<Õ,$ç pÊ?!Å/Ù[þy¿þ=!štVgÙ[þy¿þ=eoùæÿøô\ :+3ì­ÿ<ßÿž²·üóü z.™öVÿžoÿOGÙ[þy¿þ=mR]B+em6æ›x ²¸<õñYmñ_ý-?ï¡ÿÅÖÙ[þy¿þ=eoùæÿøõ”é¹;ó5ýzÓ¬¡8'ëó3¾Ûâ¿úZßCÿ‹£í¾+ÿ e§ýô?øºÑû+Ï7ÿÀ§§-™cŒ>·RTûüïðÿ"þ²¿çÜ~çþfgÛ|Wÿ@ËOûèñt}·Åô ´ÿ¾‡ÿZ±ÚÃ$Hù˜nãÏñ§}ŠïMÿßühö/ùßáþAõ˜ÿϸýÏü̶ø¯þ–Ÿ÷ÐÿâèûoŠÿèiÿ}þ.µþÅ÷¦ÿ¿ïþ4}ŠïMÿßühö/ùßáþAõ˜ÿϸýÏü̶ø¯þ–Ÿ÷ÐÿâèûoŠÿèiÿ}þ.µþÅ÷¦ÿ¿ïþ4}ŠïMÿßühö/ùßáþAõ˜ÿϸýÏü̶ø¯þ–Ÿ÷ÐÿâèûoŠÿèiÿ}þ.µþÅ÷¦ÿ¿ïþ4}ŠïMÿßühö/ùßáþAõ˜ÿϸýÏü̶ø¯þ–Ÿ÷ÐÿâèûoŠÿèiÿ}þ.µþÅ÷¦ÿ¿ïþ4}ŠïMÿßühö/ùßáþAõ˜ÿϸýÏü̶ø¯þ–Ÿ÷ÐÿâèûoŠÿèiÿ}þ.µþÅ÷¦ÿ¿ïþ4}ŠïMÿßühö/ùßáþAõ˜ÿϸýÏü̶ø¯þ–Ÿ÷ÐÿâèûoŠÿèiÿ}þ.µþÅ÷¦ÿ¿ïþ4}ŠïMÿßühö/ùßáþAõ˜ÿϸýÏü̶ø¯þ–Ÿ÷ÐÿâèûoŠÿèiÿ}þ.µþÅ÷¦ÿ¿ïþ4}ŠïMÿßühö/ùßáþAõ˜ÿϸýÏü̶ø¯þ–Ÿ÷ÐÿâèûgŠÿèiÿ}þ.µþÅ÷¦ÿ¿ïþ4}ŠïMÿßühö/ùßáþAõ•ÿ>ã÷?ó1¾Õâ¯úZÿßCÿ‹£í^*ÿ e¯ýô?øºÙû?Þ›þÿ¿øÑö(½7ýÿñ£Ø?ç‡ùÖ—üûÜÿÌÆûWŠ¿èkÿ}þ.µx«þ–¿÷ÐÿâëgìPÿzoûþÿãGØ¡þôß÷ýÿÆ`ÿþäZ_óî?sÿ3í^*ÿ e¯ýô?øº>Õâ¯úZÿßCÿ‹­Ÿ±Cýé¿ïûÿb‡ûÓß÷ÿ=ƒþwø}iϸýÏüÌoµx«þ–¿÷ÐÿâèûWŠ¿èkÿ}þ.¶~Å÷¦ÿ¿ïþ4}ŠïMÿßühöùßáþAõ¥ÿ>ã÷?ó2­î•[ìPÿzoûþÿãGØ¡þôß÷ýÿÆ´„9z·êcV¢›ºŠ^…§Ò§Ò«}ŠïMÿßühû?Þ›þÿ¿øÕ™–vŸJ6ŸJ­ö(½7ýÿñ£ìPÿzoûþÿã@vŸJ6ŸJ­ö(½7ýÿñ£ìPÿzoûþÿã@vŸJ6ŸJ­ö(½7ýÿñ£ìPÿzoûþÿã@vŸJ6ŸJ­ö(½7ýÿñ£ìPÿzoûþÿã@vŸJ6ŸJ­ö(½7ýÿñ£ìPÿzoûþÿã@vŸJ6ŸJ­ö(½7ýÿñ£ìPÿzoûþÿã@vŸJ6ŸJ­ö(½7ýÿñ£ìPÿzoûþÿã@vŸJ6ŸJ­ö(½7ýÿñ£ìPÿzoûþÿã@vŸJ6ŸJ­ö(½7ýÿñ£ìPÿzoûþÿã@vŸJ6ŸJ­ö(½7ýÿñ£ìPÿzoûþÿã@vŸJ6ŸJ­ö(½7ýÿñ£ìPÿzoûþÿã@vŸJ6ŸJ­ö(½7ýÿñ£ìPÿzoûþÿã@vŸJ6ŸJ­ö(½7ýÿñ£ìPÿzoûþÿã@vŸJ6ŸJ­ö(½7ýÿñ£ìPÿzoûþÿã@vŸJ6ŸJ­ö(½7ýÿñ£ìPÿzoûþÿã@vŸJ6ŸJ­ö(½7ýÿñ£ìPÿzoûþÿã@vŸJ6ŸJ­ö(½7ýÿñ£ìPÿzoûþÿã@vŸJ6ŸJ­ö(½7ýÿñ£ìPÿzoûþÿã@vŸJ6ŸJ­ö(½7ýÿñ£ìPÿzoûþÿã@vŸJ6ŸJ­ö(½7ýÿñ£ìPÿzoûþÿã@vŸJ6ŸJ­ö(½7ýÿñ£ìPÿzoûþÿã@ ¨4ûúæÃô®[ß}¿Þ?κ•³„0?¼lá¥f‘5Ëxsï·ûÇùÐsÜQÜS˯õf¼÷Ä_ñóýt_ç^…uþ¬×žø‹þ>bÿ®‹üè¶¶!m#$€Iªk¯éocöĺ˜b ˆÌY‡`Éü* NÚöóJ·‚Ñ"‘—ÏI%1ïOîäÔã\Œ ²|jȆËÊð]ØÂòp<ùQIwO3æÎ9×þd1 ÆÁKá¤ûg5_B}E®%ûiÕJíù~Û²®sÛÊç?^+2çZÓu-Íý¬ú}ÈÛÈ“Î:qÙA?‰öµºBèÙºÚöž5°;\#„`–Ò²«‚íކ״ñ¨½€yÚá#¶••X€@,hàŽõÏ]_Ác¯7öFªóÞ\Þ ¹ÓŠ+ƒÑY¸]Ë…É8â‹«ø,uæþÈÕ^{Ë›Ô:qEpz+7 ¹p£9'RZÛúì7¥ÎΊ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¸ÿ}öÿxÿ:ì+ðçßo÷󠿏(¢¸(¦!—?êÍyÿˆ”ý¢3ÿMó¯Cœe qú환 s@ª·ÙbùOݪ]­ýÓùWŸÝø¶þÙˆE›þUãÝDùÙÿßGü) ôý­ýÓùQµ¿º*óøOµ/úÙÿßGü(ÿ„ûRÿ  Ÿýô€=?ktþTmoîŸÊ¼ÃþíKþ€6÷Ñÿ ?á>Ô¿ègÿ}ð OÚßÝ?•[û§ò¯0ÿ„ûRÿ  ŸýôÂøOµ/úÙÿßGü(Óö·÷OåFÖþéü«Ì?á>Ô¿ègÿ}ð£þíKþ€6÷Ñÿ ôý­ýÓùRª¶áÁëé^_ÿ ö¥ÿ@?ûèÿ…ðŸj_ô³ÿ¾øP¥[ÿÇ´_îåRWšˆº¸ ÜÐ ü)áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿Â•~"ë qýn?í£…zMr>\;¼U³ñŽ«t@6éŸv5µ¡ÚÔ9 GOÜS¢QE0†EPº³ƒ‘Z4„@µÆƒ„‚ªŸ FOÜ•v;íG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åJ<5?p~UØùkéG–¾”ÍÛhiQ[6Ö¢ 0*Ø@;S€€0(¥¢€?ÿÙ endstream endobj 86 0 obj << /Length 2975 /Filter /FlateDecode >> stream xÚ•YYÜÆ~÷¯˜—@ Có>ò¦‘¡ Žx!'°¸gسC‹Ç˜‡VûïóÕÑœáŠk#V¬®®¾ê®š_wáîßìº]€i™ûiù®HR?H²"Ù vwÞýë«„Áî›/¾~øêëwq²‹?Ë¢t÷pÞ¥¦á.Ë3¿£ÝCµûÑûËÅ\';ìQxñþ¿“U‰ÓBZìI‰±,x;޶=6u÷(kêî<˜až­Óö£©O#íµÜæëwQ¼+ý2‹2Ú“¡Ý!Mü"Íeßïÿù=Ö‰w1#±gd|5§æÑÊ ?Ë÷Y¥Äýh-u¤Ç<¤+ÒwÅÓ•2é¡ô6Ž8Jh·N –êçkcjRYÂ\ú}”zOJØË,Œ¢]î—yÀ&&Â9¢«¯‘RÝUXøQéh܆7ÐûÈÅôð“,\ë„S÷°L¼ç~& ö Ç}x¬Ÿ‘÷N•0K=Kzõ$„ãüˆÕ“®ûÖ tÀcæ&°uÓºú×ÙŠ,Ù…‰'`®x 8÷“H=Eì‡Ø+ïý¾ÇqÿKî`“(öÓBöø¶'ˆ“ÈkÁò™ b?Ó|TèdZh¿Îÿ¤Á<Îb†2Û4t6Áö.PÕ‡-Å?ÁUa5n%![‹:a´Ü¬ŽƒÜ{ÛL16¢œnŽ#6NÛ˜©&MúDÓÛ`îéb ã 8V(&ÂÑŒ0ÂS¸OŽDçÉ(AdäÓ poœÆ¼I#Mš rzD°8<N¾U8<º(É¢Õ´‡[¿uäÏ`è飪ð^ÜÿZõ§i­{/¿»Il‘'»„ÊV—®QôB]¡e¤±„g¯é;¢h‰d@™fìw¯»4s´Ó“eãÃ$)Ó«Ê*Ü$UMCÖIÎãã}…zrý8 ²!Õëì¨Ä,ðûET£Ø¦zU²´em]+z!²AJÕ-O%hI2h ç„ðG d2ôÖë/“ ŽEšñ1à(Ã|¤Àìû_#Dò9éü|¥ä6ÍÄ®6^×XSί©Ó“ÏÕLPeJ;µön1ÝiÝzðo¡Z\_D®"dÿYÜjÀ(E& †,3ס‡m¶£L=qFHxV`ªÚE7vê4Å\”ø!¬K­žê•fÕqœéQ„rŒ%¬ú6`)oœQ„Ô(@°Y3X˜`ŪŒ ˆf3EÐ$'ÈîK£Î²+ÄŽߣÒÝ¥(÷Ó'NL¥ZѸ™ž.©Ç]ŃѺ ±JNîJA¾¼+£éI¹”‚K1ø½¦¥+5_åûL²âôÃéó8ÙvÙwUÂñä±nû­ÖþFï<Úé€7‹ÊûuïI!ò˜åå ÅOÞ(„—ÉAVfûë¤Gk>»Eì¸ntñ¢L¬2D!”X3ɘãØŒwa‡zQWbmØèÖqy×ú4ÍÒç‰=èN§ (e!׆­%pÈJ4:_Oúe#×Xxqøêê1 £çèRºès3®; h3 ¾½s›£LVó „…ëx2×͇ÓÃÈf‘Ü6!mkµÿ‚ÁÕ¨ïp·™ztœ;Ò¼ô¾;R¾Ê±¤ŸÇ¥Õg1LtºÈb#ŸÑõk/‹á~\4Äq•Œ¯`4wµ"ò˜,ΈRv%çZœ X GBUÃP¹1°Ä¾Q‡Sƒ‘ã5ù‹I„È.ýÜTóÆ!åXµìøžH.LõË Q"’¡Š@ºËŒ@RÙQ¯‘nðé­eo¢½A‰ËO®i)ˆ»Â­smN7wÇê’¾?Ë´T°=¤#~†T‘–0/}ÌÓå¶U”#ñ‹ˆ#z¢¶?qúe¨#™ ë€PWx®õRaQêŠ×u¥Šc ÕŽ·dÔ¸2ã³@¢$<ÈÅRœ˜m-¥+É鮨1aX,‹œqå«Uëµ¶'ŽÕš*eÜê»^u50jûW³leŽB¡‘>¾‹ôÒ[ê.Ì5ö<Ä=me2ƒÜ¾*i†vÚøò¨œ(ƒ? yOær—|É‘îfó[V¤V'.Bˆ²šõ¸ÖëÆÎˆhp¤q.‘=Îõ±î“¹†Zj„Tkˆáµöœï%JÂöšzïjI5@:ôÚÞ¸m ÑB’Ãk½ú¹ãÖ@¡+ÜB:Jý ¤_¦ ø…QκmÎ+²’kîW¡ÅI4ZyÂè9›£uÿ~™º‰ÓÅrºI}û¡³\à’ûà-Çù¢–=Èfmq­§¥ùßiîðlèÐ'iymÆô(CÕë~_Ú“<+Ûÿ!ý;޹¥÷÷º›?“1 ä¯“³×!€cÄQÂ~ÒSVõÁÎ,gÙou÷‹Ì/£ô÷ºû¹_$ËOHÜ4·Œ‚ÄϳlÍ.ºB¥žO½w m0ñ–îºÜe”ÔyæSß"Ù®åw¤pqy˜ù”4êÿ³)gž7[¯ìÅ’Ä%”‰þTŒ8ã.[¿u”Þ™ÿþOI™8"e8í?J8r·&¹ukxF9†©'áÚò*IÞEªÈçZ,œÕ߯œù‡ò¦âÕ¢M?(—×|PÍ€÷q  ¨œLŠœÿüyã©iäÅ"wRþu‡' ¡=ôš8ðCJÛ.\Qýõá«ÿðù* endstream endobj 91 0 obj << /Length 4553 /Filter /FlateDecode >> stream xÚ•Z[“Û¶~ß_¡—N©/C/yÉl\;ÝN“¸öN:´II¬)RáÅkÿûžHJK9Íììðð„œÛwðÛFmðÿæÙðg²Ä7A’&›42~Åi´éÊÍ~ó»:›î¾ºûæm¨7™ŸÅa¼yÚoŒö#m’8çæ©Øüê½þëû§7ï·÷¡ <íoïMx>¼ùñû¿?þôózûþáý›¿ðÛ?xx|ýaûŸ§¿Áøá&ñ³$P8~D>’ÝTçPz-g¡`æ&r~´Íhkìv÷æéî·;EËSó\µGÑ&?ÝýúŸ`S@Ûß6¯³tóL=O›È„~œáwõæÃÝõú—óscêÀO³Œÿ‡²)»­ <˜Ä=´zŸª¢l‘4^nÏÃØ•+kHa¡0´¬¡j¶÷:SÞp,Wv%L ¯v}ßuå~«¯ìÊ&/û•±£ØGJú?WMÑnCã=oc㽂‰…‰÷|¬ò#~º¹W&óƒD¡üÌþ(·8£@{»Ÿ¡gsø­¾,„û…¹}Y—ùP5‡•Y+•úFObzSTÚ,c?‰×雕qŒŸ¤æ,úGÓÆî»öÄS–­…e¦±ŸéåzOD°²ó¡Ÿý¾:¦`>ë» æ™Ø{‚ß¾³Ì+`ö¨)c=0£/ܾÄ¢•‚Wê˜zo«ê õѾâ™GŸEW‚jAN!üÜÙJ¦”†ÁBØ#Û gßvL GáüÕŽç³Ý'ï^?2áôU^º‚)Û4ƒàò·ûc;ÖÛ4ê >ó£m¥0mÏÏ®üm¬º²ðiÜ9 #Ñ)Å#ý „®Qà}iG&ŽvÞ§­2ž4Á^!¡¼ñ<õí˜Â©âª#§’kúhŒ¯²IÕž¶*Ä~\S¢‚þºVªxÒ²×7Íü^eÚ”¹Ü¸µ# ’ëaE‰÷ û“0н·ÛÈxìlNk?—€_6Ó(~†^Þ•v ¡*Ï2«)YG‰' ùíî¿°{¸•—N" Éñ]¬â¹ªk”oìÙó¹´Ð[PcGÒ£¦ŽÕ‰ÕIT\cœ“Xõ ‘Y‘ ©­ï×4p<5`bq ØÄ4ì–¨pÁoòƒÜÐ0±Æx.ìà:’Gƒg{.ñg×?ÆÖ“êiiÄ«–åǧŠ÷G ÆÂP´$j€ÁäÓsŽU>ˆ¼×CwµÔXT‚Méß ,“`~Ý¿¡‘¿Ôª|S<9§·U½¦5Êøúw”=Œ'/ø¾Ìm5«T’z´/‡ŸA”Ï`âÊEoÙpó¿¶ ´ãÊ~œê"óÔv¥óåÜúÚKt˜x¤Ãß‚ëUèòª~“~ÞùŸ…he>%5â@d<À8×A‹ßx-ú$vL]mÏ=s»êp”žÕþj¬+_MÃ3±üêÜšÂÙ£B‹Dï¨ák”>/^z°´c;ë›VâáñXŽBOá‘B~ªÚ±ç‡ÎîPÜí™Ôù4Y$,;²ký;ñ²YQAßx;Ðãƒ+êD%m׎ »ùoÞ‚¿˜•FФBM8î]Na;d°f #çÙ¥ëËA¼…²_ÿ<¢~S̬Ž£(||?·`c»Z¢+ɸy '—®‡²=•CW媫~ûªÚF†°ûU4ø»×q,[ONNCü'Ý–sJæ3C³£ž=w+@cB”næ h¼–ŸE{5~Sæ«37b;tc ÚJQÖ5«EBèmìÀji¦­E¢+ëÊî€Í`%Nï±é‡ÒâT#°«çr5ò‡CÙãD§sALªµcˆˆ»ÊÑó«Ã DWÐt:Ódàu'Ÿç] q~xí+F±1°§g€¬ž•œMRºÍòãÞ–¶xâî/ÆèTvHåˆÛýšú—B!i£‹–@’¤_‚0R¶pîƒáOZn¨Sùiàƒ­Y¦H%¡ 7áÕïè„ñö9Ê÷¿l!ǪŠ*§Åá8=7àÆ7½ûÀÚw|Òï sÀ§(0’–g€Çl¯Äld„ .2÷Å×W[éÜî³öÐò+B ¡A}ª‚›þ èƒyÒ÷\•,þÇ$(ÛùȬ³=³ð´,±ûØË+Áê¨=âáÁµ[r<àêÁ´ ½ïË}ËŠäÉÎ*vaœ.J*¡ËüãU³C3+ºäbU¸ÑªçL€ù”&Á„P)dxéÊ#¥Vrúö0‡²¹w9¡ñ]=gÆßs É(2Y²È写S߀Â2NösuOߢµ^]î…P¾‚÷|Éx®Šá¸&¾$N ¢Bd-%ìªØ3IŒDBQ&Ö—üÊyröDöÞôâÚá$ìÊwÛ,ôþÎ/}uXu·­ÉPÙœ1‚òÛÉ A)<Å»ïKA·À"»…§Ë`R¯ÿ^÷Ä ö'ó꾕¦r˜ç¥2\Mëƒ%!3ÎÀ®©DäGsŠS³oÂ`,¾Í5A™­½P-?¦|_\HÆbÒÕ ‰ºm?2E‰&_cÔkìo»2qÐÔ”}Ab`!Ãà¸! aôÔ´ÜÆ`)“Øn™±Ÿr#à«ÏëÁ¶î'aï’vˆ ?.åÒ<¬Žaʨ$ž °ÝS¼º™ .ÃÐòÐUÌY íÉ9Ò8ôu”^úÿ3{¤@0ýÐYÙZx+ ÂMHR¸[ö¼P#x·‡-¨XÕôÃEÇÄi¹ZºA{§ÄEñ/¤Êå7Š›ÏèoÎʰ×Ç]…¢É|>KZ«\~ ÙV ¾2K¾®þ\ò¼­BoœQs1L2’ÐS¦ÁL×OÀç£ ·"žÂ©Æ~rÀ}®w‰¶ ÕüK ÓMIðXä™´³!l“P ¬]û™ NS¡ ,v¶l_ ÂÕG©¼­Ìá™­G’…á]YrÙC‘‰q$tIRx©Ði.Ù@#—lx,+_îÖZJô[!—tñ‰V{Ÿ×UþQ|¾„×¶f&ì:ÍH®Ajçnô…ó`Øu‚6V° 7S(^(RÌeÓåÊçà‚tYè-$þ¶‚XÍ9%`©K0– ‹Ǥ“xÆÐoWkŠà5Âÿ£@œèE…«aôSãÐ:?‘*?Q/ŠÒC•ÓÌ €(”.¾8 Ú¶ïì‰Ó¬Ì éâ»<¥‚_.ÈÁ=l æ}+걨Çh§èZ{§Ò2 D.›Ó^M{ÅQ€Èb”ÃãHÂÀ/]±¦¤‰Q‚ÆÄ*10ƒÇ¹Êçº(é<{ÌÛSW© 'ÞÇfª¼E’`Iõ¾úm”JÇtÞãž›P+_Cp1Iæk“JÎàÊEÅ%•âeƒ+熢¤ H&µÔÂiuËo&»úѵN‘LçÇE Õ F¶˜„h“IéàVöÄ~ þØq’¾‘<Ä.y0˜¶­-"B<Æ‘Æ{+ÕPãŠPYÄ5s) 0\’©¤rÉ^aóXø³[y aпS…ð_C¬áÊŽ6.x«? Ès,¹8) Öi0óäÀH~Ô¯Vv8ÙϦ3G~㣰@Òª¶åÇ©í-Õ}¦=&è X´DŠTÀv•0Ÿ«ûÛ)žšóÖâéñí 4£›#lFڶ̨]ÆË¯¯ƒp1¤PT<¤ÏEz»2XŸçä OŒÊŽð¥XÖõ—qg JäˆêÁ oÏM-{þŒ0‚°E¼¨´kÅQ¹4íj0ÈùåñÝfuãnGòWX&. ˆû\f’*ªˆßÒ3,°2‘ò$ WÞÇ)ïƒ  ¤‘³,à;º—æ±|EÓÆ¥ áú¹)>Ì BéA(vö@ˆ(ô ç÷#Žj§,F ò:!oVs˜Þ!8*æ?RÙG±~%|Ö›€ÎWÂG¡Å„ÃdJǹo$N €ãDC­,$‹6O7¦4Øaè• xY¾»’€ÊćE8U3Ô<Æ<|“TÆhÀÐÁR××ÌFA$æ#s]rÆ&>Ü­@Ÿ„Ärºø éM&²AB+¶Ú¦ø‚Á‹8Ó6ÍtS“#§äËbòÕañÍPò¾„9Á„M˜HºjÂÔ—ϘÍÍ/ªê† ,E¾±‹Ý'S:²v&vl)V%Îÿ¢#%%‰Ow|K'¤©÷P€ÙGîLx:‘ói…áÒ:‘²_VCˆ‹•¯8rÈA*ˆ¦:1ÁwXxøtùuâGï<õ£ƒ¤Š¶”oy>·ÖY Ǿ¦z©€d^1Î\)ê‚1‘p—“”i¦øøaqaâ"¡BàQžVwÀ)H]ÚâRe¤@¨e¤»‡(—p¤¿qË LèäŠsD‚Uå§{üºbjÉzúº“wG¹x="G Vr]oPˆéÔRåI®lì™96 'Öp[gOƒ†/rë‚õõ&˜ÌâÅ)%o¯ÃíR$Î\횆qGJ¤r"üN·ÜEêÙ2{¾ù‡#¯"Ê)`¬ùô‡nWÈñ¬´àóйCì‡[Ow!R sîBw1X:xwCüc@9îúŽÐñ(¦1”±%œÜ´LΰÏtȃ¢cw=¤ä,´ =ZtêŠÅ‰yY“ººêˆÕ3¾¯@¾‚Mj;¼â:ïµ´«”êcè”ÃÝ–aÚb¢+q@:ÞÊËÕÒœ\uSWÁ3rµh©±¤Ä^ØXôÜÈ‘ºÒî"Å>&R/JÕÓ¡…»‚竟 ;$øh²¼ŠÌṤ|ƸXÃ÷ò¦ÁÚÛIn×B•B©Å«u×Z¹m†Ó>Ï%ühJdî½þx}5‡ê ›&vîxºfˆ\+  z‰FÇ\!§ Éf#ZsO¹¤phÛ‚=£[©òòkž’k RmtÅÆÖÞÊ͉%ææóh¹!8ùô¹ÆT^Ëì¨Âª§cj=gÊTŸ¡Ì¸î؃ß^ô…’ÍHnÖEST}Å\WrZ Ò¼„4†ŸìLñõ<¾sÄ”iÜRÃä]Ò˜$‰—¬±táî¥NÓø…O^–…!¦H=˜®°¥’”(ªåltšùz®]ý<á‰s&ØbÈò“‹±Þ<Ýý±° endstream endobj 94 0 obj << /Length 3527 /Filter /FlateDecode >> stream xÚ½ÙŽÛÈñ}¾‚y #š}ñpžl¯½™E¼‡g°A°^ª%1+‘4çïSG7EIÛÙl‚Á ‹ÕwÝU­¶ðÿmPü™, M”¤IjF:NuÐÚ`ütÁÀ(øöêåÝÕ³7RI˜%‘î6Aš…ˆ ‰“P«ànü²¨ÊF.½ûFª ³XÆ8RÀêFÃ24èm^ ù~¹©HäâÕ__üx÷úÝr%M´PáreâhñâööõÛ—»ùþ[Æß|ÿæÝ‹w¯¿á¯·?ܾ¸yu‹]½¾»úp%èâx"ÆZÅáê—_£` }ßQ¨²4x ‘‡@ÆÎÛ·WÇ[>Õúd—Íâ Îd˜)ƒ[|¸‚M“ØÐˆ H]B%}©H{ì³›ƒHƒojØö§‹ V~‡Õd ¦ý”¢RˆPÄ:ˆcFÆ0aߔۡµž’âùr¥D´xg‹úp°ÕÚ®¹ëc¹¶5ƒMk7¶µUáfu¶ïËjÛiÏi¬„”a$T°RÐj·k½¹™\ô;ë€áž µ(òŠQÅ.¯¶®;ï¸-{n–pȼ=8ôЀ h•,^ºñß ®yÙªî-žNµ:dþþ»²ØñEÖyŸ3Tò­í.ê¶µ]SW޽#Ãdâ6fñè&äíºûíE´G„BÞïn§27êê¢Ìû²vˆ‡²ß1DDAà}ɶëù㸠~á&×xgA4ATÙa/r7¾®×tˆ•?ÅäÖÀMºªq×Áåó{†ˆþЖK±@:ðq ÚÇzhýŒr}ºF RÓzÜÎMìŠ|ïÀ¼?á@|Á7é)Vä^Pï-ƒ‡|mC6JO„6‘I¨RgdnüM?MwéÂΘ<\ æÊî‡Æ9t”!Y±qŠ€àCY­ë¥Ö-c³¸v‹M­]–†FfÞ†Ý-…„Kt¿u3ûJªÄø¡Ïf‹ÃTöð]bî fZê/-dÎZi£?ÓåHhDœÚ&§bóf©Ë¤{‡¹½AÕ ø·ôµ—'';K¢¥Y¡ívL¿Ž?ûõbm»²µnp=wKuù(øõÀžMA]Ù³$çù'bvGZ%Ø•º,–$ÕˆãÙ Wx7ê%LÎ͇ÁvN_'SÛvu…¾ ±hWsv†-&˜)•¤‹¿/Óˆn(Úš(”8ó¸Ý7›aÏHÒ.@›‘3~S·‡ÜMèw™,‹¼·Ý¼±³lÁj•õ*ˆCÝåeÁ°CŽz(ð¤†nÚúÀÝï¥L®n #õ)?Ì¡ÙÛ95W/Ì(‘°§ MøqN¶#ÝÔä=§fi¹éwËáÀŠÛÖ©«›ÕZ/0*ß$Î,5ÚU³€ÜLA$2[ôZؙߓøLz:ë;7d·ÿXÖCç–æ#ºiOk[9wfFFd=²ì¸í† n€T(J[¹5r„u¦Ýçè)•ÈÀÖ<"/v%mÔ,\¿ì®Y·ò9³Ý±g¹Õct˜©Q¤.vç‡5XTëæå~fŸŒRîÁñÔÕvV‚:ØÉ9ƒÑ!{îO]º³{¼”•wÚù¾·mêá|øxØî+|È«‰ãàËæ4êyöFLç{^NüÉ{°©gSN$!u zC[‹E¤öY¶¨¬£.âÖ`&‹¾nùÓia¶°9ºTD59ܼå5Û'¢âyeÛ̱6ߣéI5;ýÔ[Y¼N¥Ê™ÌŽñ¼1$ùÈoÌ_ï#•U±Ö#*Ÿãïe(uÆíÜó·\ÚâT¿½vL ®9ü“VLrˆ¡C£³ßÁ¥Ÿo~¼…ĨβÄýW'BÔÐ0ÆË&âJ7 FóU¹Ï!²êQá€/÷èæ†ž{ÏãJàËÍ,Z*“,q ` š“‚Ý®6à9ÖŒgŒ­Š¢öÀÖ †Sx7³‡?¿é/7Üò€W,~c¬´97ÌÍí°Ï[F ß0_ré$º¡QºŸ Ñ×åѬ {bpâ]^€ŠwŠÑU5à¢Jò—ÐÃæ1qajr}úª+7,ÿTvsÚ€û~"Ãx.‹>f¾p0wG&ò>ª¨÷áêPfÿ·âø¥€ë!k&Q9 ¢ ïÅ($b À0B;RMì²m[·wíÑZÂhþBÞc‹¼ŸaÕ‘´J(—+(àõ‘.ˆ÷tÁž ]¸3ï¸bö?E5uו÷>Ê;Ûú%Ïð ±e· ÀÑQwçÚŠÛ=pR”Æ æ  e’8þ*ô°ÕÜ–îìhPÓ㥠37Q9h‰¤gxrø¢8æ•}Lj†’wÃg§3>ÃŒT’ÄÉl¤,ð/€R1Q»ØjËtjŠMêmômó’lŽR^˜ev±4¹ûÍo{âŠ';ÂWíºéªT2¸ôâ—ºôÓÊ 0vCX®ò¡¯A(ÜC”² ¨O‹ L:î@Ú`¼G!ÄÉáD"Â4·ú4ÔjÈׯ˜V…’÷­+—‡%q¨"qG“FMš5u²²h¡›;­.«ò0wòˆ{Û?XëLqOPõä~õY' RìÊðÅO©ŒÓ"Àäm= ,#îk°¤¦T/,Æx:øÞàB¤:0¦Ë7•·æœúüìv$Yˆa¿f8/ P$¢$eIøžýŽmùû‚ ˆ„¸¡òPÙ=Çd8]<ØùŠ–T"T2 t’„:NùP­/˜¡«Î¸†‚J~¾!7ÜÆ·MÉîeßñ7J“'~Ëèp˜¥ÄÐ ª=~½†ˆ0ŠÕïÐdªt¢d4GEA‰:CddaØÆæX\ÀhäšÙKÅ*èá‚ y`ˆvnâÚV«9s×—›G61±÷øˆèK»j@{×O‚#(s§•®›ö†öcIÞdVÒ+—ÞÕt2HÞXöÉ1`D>&Kn ymH~s°yåÓ¼ªÒt|—Îlz),&:&¹.N‰\%nblQù&ù /)‰ñØ( ä·Qù4F… ¿ è„”¯ê–šâh­!ÊÀrpir¾@–…¿Ób/-Ð:.ìàm&ÂÛ@™rœñ&–/U–gq­‡­Álçklådâ*±Iä2KW©-zßÍ” ª«ÕP•èÚËþ‘qDÄdrYt¾u5'zƒc\œù³fÓblœ¹4¬èÁë<1\É…¸0d3T…«Å™'J6¥óZ1kuñÜt' ‰Ëj®¦MK(O=©¤a$G¥æ\1q©Òþ‘¿Üm̹i P´T¥ò§ Œ‡¼S’†"IÏ£¢Ã4pµ/½Äöu½Ÿ•ÏèR2õ’i yå9BÄN6Ã#)¦1H¼Pa¦g<`ÿr¬Æ±(Ï¿‡´†DŒU±¯;;Cl0·:J¾Dì ~™$J* DNîŒcš!z¦¸ 䡌ÏÈÞâSoÛ>˜ þÖÍYélU_°ƒX¥@¯·#ý.cÓÂé!"&5ü„•ºù˜€¥%óÁ~t,¼eÙ¤He̾™ê_¤C“Œ”*Ö3ÄLC-b?"dÿ<† TðpeGª0rñv3ž‹Ý´x̱•a–žÕ¸ñA ¬®Î:¡~àríz®Ø‡&U«äÍ.·s¢'Aâ¢ñaÌwé7uï+íꃜ`åÎ,Ah#}æ]¡ãÚéÛccŸÏ/ÏÞ€Nœ¸T:ÉQ%$ÍMÿg0]ÀD`µí“wpÕ-X :©±ãÓ,ý?ˆ°éF¨wO(TÓFí¤XñÁÈpžÀ"N ~©¶/·»þò=¬BTdÂD}öAWÂ×ñ9÷ò±ÚfÀR\Êx*9/óÄŽ™H)?E€ÑÅàDÆŽ9ºT>nÇŒ<`¶åI5zèe@ùSœD¯ØE®ìØ¥Fç´rå3èó*©¸8—ÄÑlÍ £ÂjÁ+ŠëÄ8د«ÅDÕµtJ§ýC-•¢5?UÒüšÛ -/ž*ÈÖË$ß6(dÞ Ùi¶¸𦿧‘Øí (»ÈŽÌôíh=Žn¢•ç2|öìG "˜ws>! 9±-^ËýÄàϳϱÆqYLÎß<UI&t0Ñ ¬ÍSf@ ž‹v]]ÀVàí¾Ê¼A$*ÒbÆÌ‘ù§—CBú<¡ éqüš¿ÐSÆPfñÑâq2‹v¨Å5H) ‚ ƒ{Í€/önÍäÅàÉW}ª¯D†w„BÞ _²YHoݘœ›ñ9?:ëFrŠjNBêÈŒê/z×Oë®ò%…%~TÍ„·/ÊýªQ÷”D`¼"“cíG@ìyR~ÅÑO„RD¡Ý/¤—žAÅ@³@$&ŒøOÔÛ‚ü ZJùeƒO¿ú0™OMz°¤1§§0f"øTÀ'¦¹éÜÇLJ “K3Æ]X`™7i_e æ¨ ÄK@ád¢ÅãZ•1`¤$-e´üã¬Oò¹ @¤*•ýÐ@Sàòåù?cðÒ“Ø`ò)e¢0S eC"u«}c H”­Kÿ¥«×ZKð4ãRB¬×ý7S ô endstream endobj 88 0 obj << /Type /XObject /Subtype /Image /Width 1370 /Height 304 /BitsPerComponent 8 /ColorSpace /DeviceRGB /Length 30883 /Filter/FlateDecode /DecodeParms<> >> stream xœìÝw\çð'²‡do·€{cÝ[qýŠ–jÄ-â®8PA÷ÂU«¶jëhµX­Ö…[hÝÖ… (2dƒ’Üýþ! ¥Â%ðy¿îåëòÜsO¾‡x&ß{‹¦i  'ó5Ó!@ua3Ô4¤ê¤ê¤ê¤ê¤ê¤ê¤ê¤à3³àÛ[ðí«v´j’N¬éèÝÔÊÚá¿·,^u„  !€OA•twµàÛo|U([\ðj›ß¾ûðRŠ &ÌÚþ$-ÿÇ¿ÿÉÎHeàí´Òð)ØzÑó½ !{æ]’->?o!¤åüH=6ÉÎH­á¯å÷ŠE„ž >o³5!5éø4n_m°Õå¾½2ÿy©HR"*}z%«Û`ÛW.D¡ýÛwöinÝÀ¹IÇAQ‡*6FÅn ëÚÚÛº³»÷³7þþ¡o-:¶n^ïæVÖNnÞÝfFÿ"¢•ÇcÁ·§iºÂûª>WR'n×’v͛ԷqV¥Šn\Ó£·uç&‡î¹ùN±šìËÃÓ»Yðí¿ùþ±¤üþî@ ¾}ûéGÔ¿)@Í@:> G×nû—N”¨`æÁdIIâsóE”Ë—ìu9r•Ÿìë¿toQ‹À[ÿ}j›îÙi²Glýõòï…Ýæ?K~º'ÈzoÄÄa[Ë¿<ß[?*(ê þðU¯RÿÙ8ÂàÀšéƒ×ÝWô¾ôa~¥ç†%zÆÞºŸõ6éS¯=ô®ÝO—⯞’þ"!ìëi9‹¥ä3Õ¨u'Fºý¶ÐoÏ£¼œ‡ß÷[|ÖÄuÄ™uÃ?õMªK’M““ùZÕ!AÁugÏÿ±Lz¤>ùŽM(ÿ†žgóé_Ÿ>îd¬K‘<—|3æév)OpìY¢¯‰.!D¥‡¿ôè ×kùe'ž'v2Ö Ó­ìZóL:¦=;Làîz£ ìüË$/®°ø¾µKžq›´çÇ”Æ#ûŽêϕԼ–œÔPŸ[iSŠûqIIMêqiªÄÒÆƒÅâ¼KO–b±uÞ½}©Ø‚ ÷z'¯Ñ¯¹‘'ÅÇîþÑÑ”÷ Õ½à“ñŒ;¬mÏ/Í=ñ,/÷éš?rK­ÛGJrr®”B:ü{ˆgÜVöèíB!!d°»«ßÞÊ®5!¤¬à¦äPB‘Ò´—¢S¯1!¤¬èÎG†W鹪r•jRKa±õ !4-–9¢ü3Ϭöײ¢÷Š„n_E#š騊›&BÎ>sjöÏ„›ú*­ÖÞX—ü› „ nÉmg¤K¹˜”$é矑*yÞNñ2Ð!„<|/"„ß?&„èzdlÿåÜ*`³X„–Ñ„"|ÿì¡â7¿}¹÷¹AƒÞý<ýnìñÔ¢ê à“ Uah7nº‹qfBؼ¿²L\&Ú*­1»#!$dæŽÔ| àÍö¹ކv „ûCz‘°ì}ÞÝ+¿Íòï.9´lŒ!döÆs¥ÂÒs›¾%„´\ü‘±ý—s«À×D—¦©è+É¢²¼#+fJË)ỉýçóí§6í8µÞ‚U4cÀôL!+1(@:ªhÒÆÁ´¸´TLûm TU§aྗŒ5¸»³UÆ-z¾ï±Yöhã‰ûDN6NØîãáæÔÌwÞ¶s-c$‡Ú,><(ï`¨½½ç´Ã…þ³ÖœÓâ#û/çVÁ¶}amÜøÿ×­IÇÿ%6^!-?4ÝïôÛâÑ[íß ^½}Ooõ>ý\¿iXY4¦åÔL%Ú½ê¤ê¤ê¤ê¤ê.& ¨ÅÌ­ì˜4zÔ9HÔ9HÔ9HÔ9HÔ9HÔ9HÔ9HÔ9Úš°àÛ[ðí?ã)Uh@KqÕ ^ï\½îçÓWž§f‰hÓú6›žüq[²$ÙŠìŒT¦­§2 *yþ¿ãÞ-Ü´éëÞ­ê‘âGñ—ر©&ƒû¼ðE L‡ x<žìK•逸9ã/¦÷ØrfæP'B!¦>]ût,S…ŠÝ²d;اoòŒøÎƒÇÎ^=£Ÿdìä9öéõÓn:ø0%ÏÂÙkÖÚ]ãÛY~ÌY¿¬øfîæ£‰Yï³Þ&B^Ù6ä‹Å14³nÛÓ/jM¨£*fQéËÆn_äˆ9ç^<õ6àB„ï9¹örÌo¼HhãèLd’l_¼bׯÏÓ -œ›L]\±%•AZtlý·kœ~ñ¶ÀØÆyÀèéÑ¡C¹,?Ãk¢öürïEš®…Û¸¹‘a£[KÊU]TùÏmCHØ–C÷’ÞY» Z°*¸»ô©ØG@®¿€â¡Š?LÕP{¥½N‰¿y%3ã-Ó0ƒÃæXÔ·jÝ®³³«»l¹ÊtÀê3o!ßö³SUáÁæÑ_¯¸êùuô³Cïî;téÄDî¿Li,­z×î×Kñù·7´±1ìëñO|ÌYa‰ž±·î[ê—ç{Ü!öê–VΦÿüÕí›Íƒ³=îý8DUH\=—M½mGǦ,<œtz¼;!$ùèâRŠvíªWáJŸìë¿ô¼C¿¹·.L°&ÙÛBF|ä¥Ý[?*(ê¶×ô¯æv»°fDÀšéÏY®§B›+óÏ®o†.:×à‹é—M¶ãdïžKÈṨ‰gu~=gÍÊÞ2rù’±):ŽwÏÎHU:X€ÅR÷^ö‡YéO öyó:åÚ¥sýý¾tpñàp¸,¢â1@í%¦DÏß;sò¨.gkç -g©êBßÀÆA@ÑioSyÿ~ß”> –œ2ÈÃõZ~ى牌uÅÂt+»Ö<“ŽiÏKkÆ%%5©Ç¥©K‹ó.=ùcκ–œÔP_i’BlÁwâê9e¼ºBT¤ŸyÔ¡ù,}K¿Ô‡!S›yÎ*Ùþàéˆúú²§ ót»”'8ö,Ñ×D—"È¿ÒÀÃÿc.m€»ë‚²ó/“¼ ¸ÂâûÖ.ýyÆmÒžS wˆ‡Û•|Áá§/zšòª¹(¹¨x¦]Òžþ¨ô’-øö,¶Î»·/eÿ‚d{Èþ0Õ\ÔbæV*3û•ÊÉ|ý#`ÄñŸ÷wï=ØÑÅ“¦)𦙀1ïÆ'ÜŠó -QÙ; I=îßEÂ;ÅÂvF:’éj‰Û…BBÈ`wWiIYÁM¹!,¶>!„¦Åy–l. óæÁ•{o=JÊ{_&¹}‹¯Ô_a=«á¡nK£ŸÛŸ1œuòPæ{3Ðõõåª]/(#„t0Ö•¼ä·•=ª&È„"!!¤i=.!D§^cBHYÑ¥‘Ü*,#„t1‘ÏTzQrQÉý|¨ë ûìô'PûdgfØ:ºP”¹¨ãlì³Ë-Q™ø¶¿ý°Ÿ^.ÝûèÌt/¥Úé^É\LJj^OÝòÿå¬Qþ‹î £~¹ÐΕKå×·mö1÷ññëDüq[Ô7ÖBˆß†1ŠuÚë^Î\/(+_pë#ƒô2Љ/,{ø^äeÀ¾LÑ5ôVu¥qù‚¸|\ï€J/J.*]ãvª®”ÍbÑ´°Œ&º,"|ÿÊŸHeP[Ñ4ÍasÅb!Ó0ŒËáÊ}÷Tùl¹óš}}]Œ"GÌØxäEz¾˜¦rÓžÈVˆí@ þö‡ô"aÙû¼»W~›åß½Ò>é,MBŒ8âÂ_V¯´q «ÖË;šè¾úuñ‚_^ñL;¯ô±TÆìŽ„™;Ró‚‚7ÛCæ~dËÆxBfoD5k!ÄwÎI¹K‰Ïþ05®¯‰.MSÑW’EeyGVÌTÿc©Ú߀Vc±X„Ð4EaÆ 6«Âü)*sxNûã®ü¸eã¡¿X7ï½®gdâÖÄ»Ióò‡á'î?¢¹zïv%D߬Y›.A1•Þ‘?é¬#û¾Y°uZ6óù._N_IȨ»ë묞ݼcXÂCB:¬ ×Q6_LÃÀ}? ÃVìÚÙªá:3‡F36“SC?&È6‹EÑsb†Úo*6æ;ûÏZ·nN ¥Q4œðÝqÝÕQ»ul²Y×ÒuÜܨ¼¨=KÇönÿðUŽ¡µë„¥{£&xHÊ·…ô·åtŸÆnäß ¶í ݼñÝöÙzŽ™±‚?5?•ªý}h5›EÓ4MSLÀ0š¦Xì _UN%5OÕüˆU†©¡ŽÛ³}mÈÂU²R¦`XaAþ¾ëÇO •–`áy¨µØ,¬,Ì«ghÊt„(Ü‘í&»ò€ÒPƒðµ4ÜÇÎ5àî|‡g±Øºõ 8¸µ÷í=iæ„Æ¦ºUh ÿ‚,‹Ð4Á*ƒP#ÞæªüeÃ/!0ŽF:4ƒäk¼°´èuâ?¿ÿ¼§W«~nÇv3×c:.¨UØl6M¾‡ãðKŒ£ a³+ŒÀ``’Žž¡s“ÖS–Åü:ÍhÚøßËKiáðÉ>ò÷Ÿ°ò­P,*}ÙÈÙ'I –ž(*}ÙȹM’@,,@Sïw-šØÂ³a·Ö3·Æ©jJÚFÔ,Ÿ¨ä… ß3±T\±¤Ib©ØÀÈLRB‹ VMlkeeåØbbÔé'Óeß/ßÄÉΤ¾cϯ–¤••7B‹òVOîlcmnã9tÚ†1²P-X˜;4Póñaïîn•ìßY="ê¡ýÁK ¯ŸÆ 7»4pÚ®žËæÞS÷'Jë?ß;ËdØzgGZrkÙ°um]JHºs¢yÆvUMÕäEãÊ?ûJÆ `Ãö96®žkL?Ãà½Ï¤%ÏvM6µÍ•Ç–þ²]›ß÷»Œ¶Wž¼Jþû¸íÙÒò¿VXyßþèÇï^Å2ÿ³Ïij’ò¸Ù}w½öúóáË×N5KÚÑ}îUÆ/[­ÜäÒXh 6ÓØ…-øöòBh‘e÷wo“!ƒÜ]§Ä?îmÊ#„ˆJí¥'/Í>åÖ~ß˧?ë²M•hè³ án'c]iS½Ý\§Ç?êoVa¸Ò¦ªïº@ÓÜ»ubÈ¡ „é@ V)ywÒÁ{÷›”“’ÛQ/džažv1æ›äB|mmæ=LîkÆ#„”æþaáø¥¤¼ÍŒå墒–Îyé× !X/xôªŸ¤~N¬MÓõ¹i¸SÁgVXPpä‡ÿqS¤%˜;4BYñ=®ž‹dÿv‘ðš§›ôäi†žEÿyößλµ¾mýôk R}Vt2®0õà½"aù©”6u›Í"¶ Ÿ›žå …޳gÝÌÜÜÞ*-nVJ«Õy’_3ÉŸw‹Êº™–—ðL|¥å7‹Ê®8ÚHÛa±X’òÅÂ/¤õM{ ‹Çã—>;úß[¢Ò îïYnéUþÈÂÛ@'üî“Ö†:ruü7l¸wýõ¹›gý1÷ä ¹£^†:ò’ÇnRªš‚:+ @5ùj»‹¯wlþkцi¿/8³úÃïMB¼ u/æ–ö‘<íÏ»$-÷1Ðx’ÜÖP&•IÓ„f:2õ/è4Å/-|~ ƒ0w0ITVœô8~Û²à! 6îî')ŒnñMPôý”1%L{r{yðI¹E“ù]òvo»µñ¨á¤16rM-í1{Bô“Œ"aqæÁ_©oŠ`*ÁºýA šX4 óÍ‹Ù|#ú'Ãi_7¿-ÿÒufÐÆäþ€DÍ¥JKK?²¦žž^µFPÇÕ\:€ÅfïܼºÒjAÓæÖ@0Ÿ…ß>;#•é(>Y ¦X,BÈ’¨ÅC999‡š2eʲyÁ’j_û –©¹ÕVØ*¾ç'''·oß~êÔ©—.]RSR”àç鿯·÷lÝËó‰ûժ䠖©éÞr úöíûüùó¨¨(__ß˧«êPš}Ñ·û¬ÁË¢ã¶t²Ô§’ÝÞ¿u>ü{5G ÚM 0€Fàñx²/k.Àf—÷D(**244”ìÏž=ûÉ“'‘‘‘sçΕ«&'6hžã²#acÜ$/ݼº†ïê*Ù·àÛ\è¶'6)³0+=…察3uçÉëĸó »VO6æ°$Õ̾p×ïé¥:íîÛ0]R.!*}Ù¬ÑðߟÄ;ó82%ÿûýÉVN’´¸píÌÀí'o•é[ ÿ-<°|ÆúCÞ³[õ½{û|!DU$jJÚë”ø›W23Þ238lŽE}«Öí:;»ºË–×t˜˜¨¨¨‹/:99]¹re÷îݽzõš?¾\5EþÎÚ¶ßIU㋞º‹Kp0Õ'„\]è÷]ZïÓ ;­éôèÀýù\l/©6/ÞæäÍ»Ö$cíÄ–´‹[ÑVÚWÏesoƒ©ûOzHJžïe2l½4;@¹±Äo_Vï?ï}oM§¯Ÿ4RZ~gõˆ¨‡m^Jp5.ýañ—§µIˆé©>¨o^§\»t®¿ß—.—E4nš*€ê&¦ÄÏß=sò¨.gkç -gÕØ3j›½iM8ßÙkòäÉ/^>|ø?ÿüóðáCIeó‚§ÏYLS”âé|k‡´ôŽâB,øöç_&y”§6º»ºÌùëŸ>¦}Ñ[RžwιՖ´'dÛ)Í>åÖ~ß˧?ë²M•hè³ án'c]é“ü^n®¡ ÿmáÏžã$åƒÜ]§Ä——‹Jí¥'W @1·²«ò¹9™¯?c$Œ8þóþî½;ºxÒ4EÓ4Óá0æáÝø„[q~#¤%58X€Å&„B&Ož,IHwd«‰‰’t€»>çQ±¨¹ò€½dÊ‹º™”ˆà™tO’ò•–w)+’kDÏ¢ÿ<ûoçÝÎZß¶~úµ©>+:ëÊV¸_$”i¡³´üv‘ðš§›ô¥´ƒƒšH dgfØ:ºP”¹¨ãlì³Ë-©ÁÁÿN ÉLš4‰¢¤šXÉé3½-ÃO$õwSr¬¢&ÜËù‚^’gòq:M¤‡.å ÊŸí\Ñ5h®x®ÿ¦‘m÷®¿>wó¬?æž\!w´¹¡ŽLËW¥åÞ:áwŸ´6ÔùøH Ð4ÍasÅb!Ó|÷n]hÝe@™àý§žÈåpå£59•à‡žþ’ŒÀ¡C‡ÜÜä¿ÞËV“5`gdDÛ‘dí„-õÄIâ÷o[µl§’•– qœ:eÛÉ­“­IúÚ ….Ã6HÍ™¼ÅsÛT’±nÒB×Q›ϵh2¿K^Ãm·xG '=³1oy¤Ë¤)Û~Û:Ùšdl˜²PZÜ" (úÇU›Øe<»³gCxXL¬úH0• @ `±X„ÐJÇ¢h¯*ÜÖhŠ’›ª¯&§¬°d@ppð!C*­&¥gÙãÒÙµaK7u›#`;xú|5u•Òš¢Ž ÒÛ§q!1ê0è›ØˆÒCQ-ß nÛ,½T§ýÀÀØem•Í^Ѿí°õÓþ¸£x¬Cø±13}›oÕ³¼‚üù¤Ü;ôçða“†ø&¦Y¹û|Qi$PXlMÓ4tÔ*U¸­Ñ4ÅbWHÔÜT‚zõŒÖ,ŸWiµ9aQ¥ï «#<€:S B·gûÚ…«„e¥Lðy<üëJë.JŠó?õÄ‚ü};ן*-©Ñ…ç.^]coZ‡©Ü=žÔbl‹XÔ2¹¹¹„3335uØL ().¨±÷ 2K>i‘z†¦ï‹ò˜Ž´InnnÿC!§~ûUMF@î–¨| ~­„¬?€†(JŽ ðótsãÛ{¶îå¿ùÄ}¦#‚Z‹ÅbšVÜ _žŸ2²£ ߨ¢AóÎC×ý[i5F¶÷…¹’z†¦U8½ž¡©dcüB°aÃV-›„LInNNÿCòróòróú’›“£âÜ:œMPš}Ñ·û ó^Sâþ~”öòî¡Õ³bç3ÔZl6›&Dn{ÿîÏ‚-ú†Ü|ò*'íÅÑõS2N„(Vc|#U:«¸0·¸0·jçbÆMó7Rñæ“›ÛÐÐæÍšÝ»›pïnBófÍúš“›«ô\6»Bé¨Q±Aó— ÓoÌãèè»yu ßõaåà«{Â;z7µjàâÝ}ô‰å³ ¦Ý =ÀÕÉ¥¾G—a!÷ Ë×·àÛ+­¯ªœÐÂá“}5ä;4î?aå[¡X1< ¾}õ];Ô<¥ƒ~;Ã12vÙØ^ÖÆ<Ž®¾{Ëî‘û/IÑ¢¼ÕS†;ÛX›Ûx¶¡@\þÙÛÀÈìrÌ¢vM=Ì̬=Z÷ßs3ó¯Wvñò47ã{¶úkR¡´Úo‘“9ØšZ9÷Ÿ¸FzºªfSþØÒ³u3 3K»F¿Ý}Mڈ쟒B¡Ë¾_4¾‰“I}Çž_-I+Sò u §7j䈭[6r¹\.—»uËÆQ#GðxzJ+£w0iÃßYK†:©::ó–éÞ37Þ¾z°þKƒé#"%…>#Öt™¾îþóço_ÜšÞ2uô×'Ô×WU~gõˆ¨‡ö/%¼~7ÜìÒÀiªå A“”ö­ØcvM|ÖòáNJ;ÓÆÍî»ëµ×Ÿ_¾~pªYÒŽîs¯J{çN½f¸÷lü»Œ;-Cúwùæ¬ÎŽS·²2^nkÜ?BZ-ô¦mìçiÿüÙúíÞžó¯«ovÐWáW~™þðÜ.Ë+?ô¦éâ‚BHqANqAy¿ß¿VXyßþèÇï^Å2ÿ³Ïij•t'f¼K36lتc“ø÷e=}½éS'³ÿÅf±¦O\O_Oé¹r通[hjž.4È·vHKOá(;dÁ·¿ù*É]K¡ÅEõíZ¼{›(W‡æ4p÷KO¾¤¦¾ªòAî®Sâ÷6åBD¥‰v‚ғά,P«Ü»ubÈ¡ D¶ÐÄÄ"'?[é/açÖ ½êgÆ#„”æÄÚ4]Ÿ›vžb`lþwF¦§~ù/•¡™ÃŒLò—…F–žE¹i’jG_½í+9=÷tƒ¦ësÞœUÓl×Ö]Vì èÝÁÝÖBƒ±¹$ Ý‘ècg3ãA²¤qQÉ K瀼ôëª.\î\¨5ݹֺˀ÷…¹ŸzbaAÁ‘büÇM‘– wÔ(w}Σb‘Ê£zå˱8†4U&Ù÷÷‘Ñ{¸8¹XðíëÛµ•&©¯¯ªüv‘ÐßÓÍ‚ooÁ·ç;úŠJž¾Ë Åf³ˆÂèY}îƒb¡ÒµŠ…_˜ò$û<ÓžÂâ‡ÒÁºúÜò}Ž!!ÄýÃK#Z\*­ÖMzºÉeÅ÷Ô7{ü÷íégv êÔ̺Q—ˆ_“¤ÈíH¶›EeÃm ŒÍ ŒÍMømD%OÕ.f|„36lتc#ÿ—”lÚ²MLQ’—bŠÚ´e[qI‰Òs%·ÄwÈj¾T0ÓÛ2üDò'â?r~ëÉ«ã>ÎJOÍ|OÓTÕÞÚÛ@çLâËìŒTÉö.=¥jí€Qº²Àì––‹&)íIÛÌ@çbn©d¿4AÓ½så:ë*}IÈ…§_Ô5h¡¾YóCvþôÛã—¯/ï X=ñK¹Öä‚÷1Ð=ÿæmQ~¶d+Ì{WIwbÆ»4cÆ­:6‰_ JJ~úéç©Ófˆ„B‘P8uÚŒŸ~úYPR¢ô\ÌL°3òeØÈˆƒ3 Ë(aIâݸ%AýÔŸR(¢ô ëée<Ûâ_å·ŽnñMPôý”1%L{r{yðÅ:˜J°–Q:•àÀ½k Z~àÏŒB%,yqçâ·c¿ æ43hcRž $7iõ¸Ù®#—|ê;†®OÊ”æ&GO˜íæ¿X}³Ý‚"ã_d‰(›E‘Ïs9ëq.¤K_®žê0vÕÝWÙbªìÍãKÇ÷øÔØ ö133ûíÄñû÷xù´ñòisÿþƒßN733SZé`’žeKg×fœÞÔÙ«ß¹ùÈЭf}W©?åç¡?…Ž´màҲ奈æËªüÖÞ¡?‡·)˜4Ä×ÖγÏÄÕF}"ªÜh 6KÉBƒzõ{_»¼ùí©µm:›Ú¸ ™¶Á|À:É¡ÎëNÔ¿Õ­±³]“>ÙŽûcM'iï\¹ÎºJ_B¢[§öóvµnôŠˀ?":¨ovMwÙ#:YX:ô9¶ìÀ1¹Ö¶Në3ÖÇÕÐÄBòÒgÞ‰•íòûµ³´tì>>¨_´ÒÎÀ†&†&ä߯;6cÆíónDádjfvòÄqSSSS““'Ž›š™©:—ͪÀT‚µ™N%P“ŽÜõõ¤ùe¥ïkæíŒL- óÞÕÌ{@ÝôϽ­» (ÊÏ–+ÏÍÍ%„¨ê@),(ˆ=öý0ÿ@i ·šB`œÒÁµšD€ @]t€”Ü-½ Öb³X„¦iªŠ«Q|ª‚œÌ{/¨Ëªp«¡iŠtÔ,‹¦)Š3ÀçT…ÛE‰Ñ;j ”é4§Çt‡ÅfÑ4tÔn¼s³ÞTáDš¢Xl¤ áñô^¾xvãÚ匷iLÇÀ›cÉç·ïØÕÅ̓éX4—Í¡ÄbJŒtÔu"‘ËæÈ– ÚíuÊ«KçÏöêïgïäÂáà÷ê±X”šüòì©ãºº<;G¦ÃÐ8¦æõÓR^˜˜Y0à órLÍëË–àëh·ëW.ô2ªq3o¦`Œ™¹¥‰©Ùé‡GŽÇt,Ç£©÷ƒ¿®7öjcjQŸƒEµ N*/;+ñéý¦-;È–#Ú-+#ÝÆÖžé(fç蜕‘ÎtšÈ’ߨE›OæçR4æü€ºˆÍb™˜5jÑÆÂ’/[Žth7š¦0F€ÃáÒøž ‚£k#G×FLGÀ¼’âÙ—øÚÅF¯?Bp?PMîã/HhýG ~%Åßýõ]g¯&–Ö5Ô0vÅ•3ê,Üà“h}: Rk'¬ésö]z Ó@µ`áã/!÷CøDÕ›(JŽ ðótsãÛ{¶îå¿ùÄýj};¥Žf•ÌhÓ@²_iWÐ:,¶üÇ_Ö¿‰€)Š÷C5ª1Pš}Ñ·û ó^Sâþ~”öòî¡Õ³bçWßÛ©’#×Ã'¤ÚK±s,MÓ4M3 ƒ0X>I5¦bƒæ9.;6¦;ߘÇÑÑwóê¾ëwÉ! ¾ýçµiÞ¤¾µ!„å¯ ùª¡«kWïQ¡[ Ä´´ÚïÑ!^žžÖŽM‡NÛ(-WŽŸìÓ¨!ß¡qÿ +ß Åäßî|{É&Ý—ž„þÚSgHà~ %”jÔÆôÏ@¹j\Y`ÃßYÛö;©:ºè©Ë±¸S}BÈÕ…~ߥõ>°ÓšNÑo‘ÏÕÈö’jóâmNÞ¼kM2ÖN1`I»¸mU5xgõˆ¨‡m^Jp5.ýañ—§µIˆé™‘jÁ·ÏÎH•ԑ݇ÚOÃ$p?âñô^¾xvãÚ匷iLÅÀas,ùüö»º¸y0€zÕ˜x^"nb ²ý]kÆ;ü{t鱤è¿f8›òqž»{ŶV+Id¬äPôI¹ÓœÛZE'T5¸d÷ƒµñ?54åbøÕò˜‚éYiÈh;Ì û!€Ôë”W—ΟíÕßÏÞÉ…Ãaf]m±X”šüòì©ãºº<;GFbP¯ïîúœGÅ¢æ*2^2åŠEÝLx’}žI7añ$é!_i¹q—²â 5ow»HxÍÓMúŸŠê6&† „à~ ãú• ý†ŒjÜÌ›Ù0ÌÌ-MLÍNŸ8”_Ñ5h®¦o3‰/³3R%›Ò•‘#¨}ðw û!€TVFº­FÌeç蜕‘ÎtÊUc:`ÀÎÈ—a##^Ì,,£„%‰wã–õSZsÉÇÙS¶%ç Jó^E-t¶@zhÎä-ÉyA^ʺI ]G-PzºDDp‹o‚¢ï§äˆ)aÚ“Û˃(Öqâq.½-–-ÁT‚Úce$p?¢iŠ©1r8.MSLG \5¦ô,{\:»6ãô¦Î^øÎÍG†n5ë»JiÍNQÇÇXÆ÷öiìâ3øNƒ¯b#:HEµ|3¸m3‡}oYøÇ.S9 !Ä;ôçð6“†øÚÚyö™¸Ú¨O„b“{¶oŠ@m¢8“6‹Å’<"“îÔXY@J£þ9hT0²ª7ojìÚmãnŠårø±¹fs7œ»QI }C×õ ]§æ->4Åâ9tf¤š÷ê8oçóyê"­£ø…Ÿ¦Õ.H PKÕÍ(Ö ¥4ª³ŒFÀˆÄçOo^»œ^¥•>8lN}>¿]Ç®®îžŸ=0ЈnTU†©³$jåýßö¡j4*;¦QÁÔ¼Ô”WqÎ îïäæÉåèBž<¾ïѰ‰ú³ž=yÔ°qsBˆX,JJ|zòèº<={,Òñ¹¡óh7ü ¡E÷C ¾½d³´v°u÷î0ïZF‰ÒšUÎ```Ǫ˜{rnïè^­Lôu,ì{™ÿ¨H()x*Ưs3CžŽ¡¹í#gÞÎ)ŸÁšÐ¢!~6ÆzzÆ6ÃfíKúÔreÁÔ5×ãÎàâÑ˜ÍæP4EÑMSb±HýFÓ”¤2‹Ívqo4ôc¯Ç/*,dújjî€P)tÀЮûá¿ÿÅSEÙi¿¿È¿Ï¢WwÖ2Ô"rÿü¢¯~;{ë–_|ôE™‡#Gûv Ϻ»œ2|Ýùób¶wmiÁ-9½=¨wÛÙ¹Ï7B^¶ð|ƒ+‰9öTRh.Ã~èöë·*”+ †"”V÷O@sdefØÚ;ÒÔ‡95iŠ‹D„›—OµóíGh–âMѲ§ØÚ9defÊ:®¡áñôd_²ð•´ÚñC»‡5ÍÔÜ‚é@˜D‰ÅßmYî÷åÅCæVvUn6'óõJ%¹!´(¿¾C«wiÏ%‡.ôÛ›”Y˜•ž"­I‰ò¢¦í:/Ô·´ìPÔxI¹ßþDDà¼-??ÏxoÛ¨ýÒ1ƒÝŒd»¨©F!´ðÀòë]xSÌnÕkôîíómt8„Ôs;ƒÃ¿»ó2½ž•û˜Ë—Žm§ªPñr@ìÞ¶68d‰±‰©â!J”££ç É•Óâ|.ÏVR>×ÞX÷|Ê SBHÞ³EŽ=„ù)QU(—X½4dÂäP¹·¸ðàg¼^MÖÛ2iþ² “Á=ûç¡“‹+!„ÃáBÄb±âNòËDFMeÏZµdVii™u…Ó@¡ –Ê•htï€J™[Xe¿KG:ê¸Ìô׿VLGQtqNÚûÃLœ¤E‹žº‹Kp0Õ—­wýÛa‡ ^¼wÀŠdlž:BöÐÌ[¦ÏÜp5g_ÙòõˆÈÁw"²3R¿¢+V#„ÜY="êaÛ£—\KXüåÀimbzB†F|úX'÷ÒÌû×/$䘪BÐLj:Ëd\4õ˜&W(.+8¿gŠ¥Ï|ÉËCY%W$ûFŽï3;U…rõÁ´ë7º — uØñ+eŸóBhš’ôü©t‡¦)¹³Ø,Vÿõõ+üïïØ‘#Š…H€vkêÕ:þÊY===['6‡Ãt85‹ß¾I¾v>Ö«u‡Êkk Ùø\ží¶››¥/w­ï` ÿùdéѤµMr4åâ0cKd”ç×ÒC‡6Mv×ãBºŽ[WÖ‚%+ «ª¶d÷ƒµñ?54åbøÕò˜‚éI1æ°²S^¾Î´rkà9}Mù×~¥…c5’ªç‡ùÏŽôzjÿ£ÅÊ:õÜŽ&î””¼-Ûê–¨àèÚŠËÒªV®>˜úƼO¼,­D±Ù-— Åb!ä^|\›.}%ïwhš–;‹Ífs9\.ƒ>'¤@»YZÙ4oÙöö•3y9TÅ "@]Àf³MÍ›z·¶´²a:–O ý -(|wáÐâi£¶ »R¾°—B.€ò°XÔÙ¤ü»ϸ£ì!É—|B‹cHSeªÞQiµÛEÂkžÆxK¿¶ýt|ã¢5ß œ‘§ç2%|眎ª A3)]h#ãÆÎÎý×.½z³¿u=Ùrš¦E%¹§c‚º,Ì}¶b­Ë~S&väq!â²7Ý’šŸZ®&Bˆ¥ÒP'¼c³TõhÓ¹7¡i±H¤¸£¤w›Åáê ðy!ÚMßÀØÙ½©³{ÓÊ«Ôv%ÅL‡ðÉxF–}ÆGå-õ!džšjM ¸WóÝMy„AÁµJ›ýÈÁ¥Þ:áwŸ´6”ÿpiÞbà¶B?¿~ ³ÿØ9/ª*ͤø ðÏ‘°.Žo¼~Ó¿±™b}®¾Ù€i1sìÙ@ù²~½]¯ %s¾ÚUÏêKIµO-WŒÄÞ]ÛÿË5h‹Á¶l¹‡v4E‹ÅBBHa~ޤDq‡¦hJ>À>~ôgÌðy!ÚM?û€” èÝŃ‹ëÕï§¾ÚÒ¡NS§Åü¶%˜Oglšº°ÒfxœKo‹}m ÔW‹ný㪉MìŒ2žÝÙ³!<,&–ÒkJt䬱-œMÙ,B-©¬´`*A$7\ÿÂú±ƒ#ž¾w³¿“‘lyû€Åë·ô´.ÍJ:ºq¢©gùœA+}Û_0úüZ:yþðß•7«V®4Bˆ¾ñŸƒ?ãõh²˜uËDB!GfT/M—¯,ðìÑß­;÷ÊÏy§¸CÓV‹Å:\îÌyKŒM¸†ZDîÛÒPÓ¤sèè7jýŞؕêëwŒ<:rjP—fÄõ¬Mø–u>D}ý“{Žmß4§D¤þ‹ºwèÏáÃ& ñML/²r÷ù&¤|ÞUÝtæîy/%ŸïâµxÏj A3±ØlÙ—Ýgí#„ p6––¼ˆ­uÙ[ÎÕîÚ£7zæví{¸p#\rÔý«ã+ÿÑÍÅ,—˜õŸqü+·ª•+ †àaÔ1–VÖéi¯l윤%MIæhÕ©§dÅЦdçÈx›jie-()ærÐ;àsÂBƒµ™.4ø•æžqi»/íÙ!¦ÍupïÖ€àyJ¬y[¢ø›ÂtŒIO{}íÒ™¾}¬8p8lBHâó'ææ•üóÌÉÉsuoH‹©ô´”qgÛuêafa©¯_Oý‰ðIÐ;´À°¥?n a&LÛ2}‰ã õL‡MÕì}ŒÐ¨`jžu»¶¾¸{ûJ^N–˜¢!Ç«dF@@xí‚!„Ãf›š×oÙ®³©™¹®.&àüÌ-0Óöéà6ÍRßë´é=ú—ÈvL‡M£&Ó¨`açàbjV¿Ê§³X,›¥«Ëã`YñÏ éÐÃÙŽ´ƒâì} Ò¨`˜bhdTy%¨qòS›h5—K‰ÅLGA!”XÌáâñh(¤ V1·°Ê~—Ît„’™þÚÜŠé(”C:j•¦^­ã¯œ}“’È`J,~“’wöצ^­™Š@=t^í&”2€¦àñô˜@#XZÙ4oÙöö•3y9EU~B5`³ÙƦæM½[[ZÙ0@¥XÙ©LÇðŸ¼|ñìÆµËoÓ˜€6Ç’Ïoß±«‹›‡Ò æVvUn<'óu•Ï`¾1Ó!TPR\ÀtJ wh·×)¯.?Û«¿Ÿ½“ ‡ƒßg¨sÄbQjò˳§Žëêòì™@#àë7ÀÇÀ×'Ðnׯ\è7dTãfÞLÀ3sKS³Ó'=ŽéX@k`*AÐnYé6¶öLGÀ0;Gç¬ ˜G´Ò ÝhšÂ‡KÓÌÌ—Z éÐn,6~‡Áý>«‚vc³XL‡ p?Ò´uˆ±(h&¤@»±ðñ€‚û!€ Oñuˆ+]€qÕ›(JŽ [¼á÷ë÷ó‡F-¦ÌŸ6¸ùç} ¾}vFêçm´‹-ÿñ7÷þñÉ!+N_@›7š¶bÇŠqí  †)Þê,MX‡‹€€æ«ÆûciöEßî³/‹ŽÛÒÉRŸJzt{ÿÖùdðïÕ÷ŽPÉuŽ}Ÿþ«W×Es¾ßÛ’•÷,fY0ÇTl5 ƒ¤4db, ®§Š šç¸ìHؘî|cGGßÍ«kø®ò\€ßþóÚ4oRßÚB‹ò×…|ÕÐÕµ«÷¨Ð­bZZí÷è/OOkǦC§m”–KYðí%JvªÖ”ô\ÐFrSgÿßÔ6ûNOÜÖDŸklÓxn rPW`*A)ÍY‡‹€€&«ÆþÎZ2ÔIÕÑEO]ŽÆ%d¥§B®.ôû.­Ù鄇‰ñÇ›&ïí·è¦´Ú¼x›_nÞMºÛ2ã‡KnË5"&‘*/På¦@KÉ= [•Ùëéê†|cžy§á!ÏKDLPÃÐ;@JsÖ!Æ"  Éª1ð¼DÜÄ@åxךñ¦ú’ý¥Ç’¢wÌp6Ó×7wž»{EâÏ+¥ÕÊËÍœæìŒxq8¢Ò7­BS˜z@«ÉMõô½hóSsO3 Òî0>ÛmÀ÷ ÅPÓ0• €”Fu–Ѩ`dUcÞÔ]Ÿó¨XÔ\EFÀK¦üQ±¨› O²Ï3é&,ž$=ä+-7îRVTé›~Ʀ@+°+Ne­Ë9¶yн>—û)[ 5íLȦb¨IìZ=• f†O¢Qe4*ÐF‰ÏŸÞ¼v9½JK¥pØœú|~»Ž]]Ý=Vc:`¦·eø‰ä£þn•ÖlbÀ½œ/èeÊ#„ ât šH]Êô./¿¢k dU¹‡!ÿ¥)ÐFr¿cøõd X„à?`¨+Ð;@J£þ9hT0 uRS^Å]87h¸¿“›'—£Cyòø¾GÃ&êÏzöäQÃÆÍ !b±()ñéÉ£?êòôìV9©ÆÎKvF¾ qðbfa%,I¼·$¨ŸÒšK†8Ξ²-9OPš÷*:h¡Ë°ÒCs&oIÎòRÖMZè:jâ¹N<Î¥·Åÿ¥)L%¨Õä2îQ½üfìx/(+x3ÃϦkåLjízY”àç鿯·÷lÝËó‰ûLGµŠÜº›OÅøunfÈÓ14·ýbäÌÛ9Iù“s{G÷je¢¯kdaßkÌüGEÂòÓ+ÒÑs6•{ÿø—Ý}LõuLl›/Ú{£ÒúŠÁ|’ëq燌 pñhÌfs(š¢hЦ)±X¤~£iJR™Åf»¸7ú¿±×ãÎÊ5^½ô,{\:»6lé¦ÎarlOŸ¯¦®RZ³SÔñ1¡Szû4.$F}ÑAz(ªå›Ám›¥—ê´»¬­â¹'÷Û¾iN‰HÒ‡ð¿4ÚHn<žËÿ~ ½7ºãìŒ2½¶}Ç^<ÀT`5L‹Æ'c)b¨nrÙ±áënÌŸ³½kK nÉéíA½ÛÎÎ}¾™â}õÛÙ[·üâ£/Ê<9Ú·SxÖÝ儚þ°Õ³½}üî|+ÙWµž±ªúJƒ!„¥Ÿój VËḚ̂µw¤©“’Ò-‰!7/ŸjçÛÐ,Åš¢eO±µsÈÊÌ” ‰‘lã,M‰÷ bÌamupïÖ€àyÆ&¦LÀ°-Q üÇMQ,7·²«r›9™¯ÿCD*ÖæÐÐƒÇÆ(NH‹ò×Ï™ºóäõbÜyÈ„]«'sXDæÿñJ+HH_Zðí.ôÛ›”Y(YÏ ê‚ÝÛÖ‡,Qúñ€çsy¶bQ‘\9%ÊÑÑs+§©÷Ý­#’Þ´3Ò%„üàkwbÖµ#ƒä{Ûªª/±ziȄɡr5.<ø©uSoˤùËÖÉ–<ûç¡“‹+!„ÃáBÄb±âNòËDFMeÏZµdÖØÀé†FÒ± @•Õ>žÝ7üµm¿“ÒCWú}—ÖûtÂNk:=:pD¿E>W#ÛRE‹žº‹K®guª±3Ⲃó{¦XúÌW<”q=ÒÔcš\á«“c“:ÇH¿Û¯JÈœñtuCþ¤"në¾_ï=°Æ]Ÿ«¦¾ú`Úõý‘—u;~¥ìs~BMS’Þ’?•îÐ4%w–Ò{Ò Ý0=€„ÝÕ,E¼ôXRô_3œMy„8Ïݽb[«•$2ö“*(Úµf¼ƒÌÛ¡k@] ôŸƒ¤P§žÛÑÄr‡òŸé1ôÔþG JiQèÄ3QöI ¤ë[±²bBútÐäõù jê« †Rߘ÷ñWuÅfS´\:€‹E„{ñqmºô”¼WÜ¡iZî,¶²A…øŒÿaãÿþÚJ»¦Î¨>Zt?T³±šƒ?²‚"/©¨Å”v–¡iZT’{:&8 ËÂÜg¤å7vvî¿véÕ›ý­ëÉÖO»<éšËÊcVú•¨_ÏX±¾š`!–FH@åÞ±Yªz´éܛдX$RÜQÒ;@Ù½ÿA‚vãp¹”XÌt £ÄbWkþOW³±šƒÕWÐã° Å´‡E•¾¨Þ §ê˜½»¶Wvd°-›’KP´X,$„æçHJwhЦäÓÚÖ; RæVÙïÒMÍ-˜€I™é¯Í-¬˜Žâc ØÑvdY;a`GK=qÒ£øýÛV-Ûù;!dÉÇ©S¶Ü:Ùš¤¯ Zè2lƒÜ¹ª*ŒáLùîJ̸N✗»Ã¾Qóî˜J°.ë,Ó>`ñºÁ-=­K³’ŽnœhêY>GÀ…õcG<=|ïf'#¹²þžw””ëf"[ÕkÈŒ¿¯ž`Åz·sv…õŒ•ÖW !DßÀøÏÁU¾:¨SbÖ- …’9%hº|egþnݹW~Î;Åš®°²€X,ÖárõêÊ5Žth·¦^­ã¯œÕÓÓ³±ubËü#¨#(±øí›äkçc½Zw¨¼¶fP³±šƒÕWøöèêqó\§Õ³r55‚üúe^h¹u7· 0œ=ªÝµGoôÌíÚ÷qáF¸¤¼û¬}„ÎÆÒšobk]6!d­ÿ®1ûÿ‘kVÍzÆJë+ †RR\PÅ €ºÇÒÊ:=í•“´„¢)ÉÜ­:õ”Ì# ¸CÑ”ìÜoS-­¬%Å\à ^hàc¤§¥<}t§ /G®? @]Àf³MÍ=›x[7pPZA¨nµ±ªE@>FzÚëk—ÎtðícÝÀÃaBŸ?17¯äþ–““çêÞ"Séi)7âζëÔÃÌÂR_¿Â$)èÚMßÀØÙ½©³{ÓÊ«Ôvxä ¡QënjT0 u¬صíôÅÝÛWòr²ÄE„<žŽú³áµ :„›mj^¿e»Î¦f溺ò3˜"Ú Ÿ}@ŽF­»©QÁ€6²sp15«_åÓY,‹ÍÒÕåqÆV#µŠF­»©QÁ€–24’Ÿñô³P²Ø€öÒœuˆµkP¨k€ZE²1ÓQ¢m‹€@]ƒtÔ*’uˆß¤$2ØG€‹ß¤$Æýµ©Wk¦bP— V±´²iÞ²íí+g\‡X²hSïÖ–V6ŒP)VvF*Ó1@u1·²«ò¹9™¯?c$5FßÀ˜é*ÀBH ™Ð;j|ýø˜; ÎAïÐnA)Ó!h Oé@k ÚÇÓ{ùâÙk—3Þ¦1 8lŽ%Ÿß¾cW7¦cm‚th·×)¯.?Û«¿Ÿ½“ ‡ƒßg¨sÄbQjò˳§Žëêòì™´¾>v»~åB¿!£7óf:Ƙ™[š˜š>qxäèqLÇ 4m,!ò€fB:´[VFº­=ÓQ0ÌÎÑ9+#é(4…&Œ%Ä@Ð|H€v£i c8.MSLG )4a,!ò€æÃ÷(Ðn,6Ë ÷C2–y@ÃÕÅ|å}ËU•ƒ&c³XL‡ p?Òœ±„Èš¬6§ðõ¾.`áã/!÷Cš3–y@“Uo: (9.$ÀÏÓÍoïÙº—ÿæ÷«õíädg¤ª¯€|A-ÀbWøøËªHGÏAö¨èý?¦Ž²Ÿ˜Õ×Ð"r÷C€ºL£ÆÎhT0²ª1oZš}Ñ·û¬ÁË¢ã¶t²Ô§’ÝÞ¿u>ü{õ½#ÔArciš–î?ÛÛÇïη²GÏÍj9çøóE­>²>€Á`)úç QÁÔY‰ÏŸÞ¼v9½J«pØœú|~»Ž]]Ý=?{`̪Æt@lÐ<ÇeGÂÆ¸I^ºyu ßÕU²oÁ·?¸Ð?lOlRfaVz -Ê_?gêÎ“× ˆqç!v­žlÌaIª˜3|á®ßÓKuÚ Ü·aº¤\êžîï?n¡G9¸ì¶ÿ’6„’ì_Ý:üúæé÷|{IZ\¸vfàö“·Êô­…Kcþ)íGpuOø¼-??ÏxoÛ¨ýÒ1ƒÝŒ¤•+íkŒP•q§©÷ÁsþÚÔVZR’ù«ÿQ‹ç™Þõ}T}í‚'R5vF£‚¨›RS^Å]87h¸¿“›'—£Cyòø¾GÃ&êÏzöäQÃÆÍ !b±()ñéÉ£?êòôìk×B!ÕøÑaÃßYK†:©:ºè©ËѸ„¬ôBÈÕ…~ߥ5;ð01þxÓä½ýÝ”V›oóËÍ»Iwc[fü0`Ém¹F¦úò¸žI)+¸ºgê;!EɸzÈÆ7H¶Ú%~û²ZýyïŸg75¸]þøWòõ>;#Uö{þÌ[¦{ÏÜxûêÁú/ ¦ˆüo?¨ ª2î¯NŽMêÓÎHWZ²ÍoRß=?Zê(ÿW¬ ]´ë äçNøÇýaam"7væÉ¹½£{µ2Ñ×5²°ï5fþ£"ay5UciÑÎ?c==c›a³v‰¥ }j¹²` æ];?dT€‹Gc6›CÑES4M‰Å"õMS’Ê,6ÛŽÑÐÿ½w¾¨°é«ùœª±wÀóq•íïZ3ÞáߣK%Eÿ5ÃÙ”GˆóÜÝ+¶µZI"c%‡¢wH澓ίÖ*‚¬8!ÛH£žÍ¹G:¼<¡çX4;.ýûî þŽyÞemCÙjK¿ŒN˜&i'4&b­§Êµ^mšì®Ç%„t·®8¬!’rt ÐXÊ3î´(t♨û¤ïî._–Ò'GU~J¡>€ÖÑ¢'NÕM.;æ}õÛÙ[·üâ£/Ê<9Ú·SxÖÝåDõ˜Á†-<ßàJbŽ=•ڣ˰ºý:Æ­ åJƒ!„¥ÕsÝ \Vf†­½#M}˜×“¦h±HD¹yùT;ß~„f)îÐ-{Š­CVf† L #Ðaà>OOöe5¦Üõ9ŠEÍUd¼dÊ‹º™ðÊã3é&,ž$=ä+-7îRV\á™?!ÄÌ}–ðù7„ ܸùÙæ+¦9DºÏÚüBø“»©lµûEB™v:«‹Y¯<*ǦÊ*½F`[YÆ=íò¤k.+YéKKf Z3çdWÅGeÅúZGéýP3©N¨füà‰ˆ@¹}ŠãþäF#¦Ý]:gѯ׈¸ÚößüýêF:„Ôs;ƒÃ¿»ó2½ž•û˜Ë—Žm§t!† j/¹±3ÿØóï®mÀŠãã£Y.[AnÌàÎo/ŸOiT¿!M¢ŽMr챋Œ‰ªB¹Ò`!<žÞÀ…?ï%€½-)6›MQ2}zhJ,BÚuíKhZ,)îÐ4%{ ‹Å"„Ú»c³åßå„.X*WR這ޖá'’ú»UZ³‰÷r¾ —)"(ˆÓ1ø0ŠãR¾ wyù]ƒær'²u¬&›%}và4oÌv×áß7ŠMtze1Ѫb‡ðæ†:2í_•–kï_$H)ýK\ðSè…hÙ’©…ÄÛr±ÌY²ëh-úOmÃßYÛö;)=tu¡ßwi½O'ì´¦Ó£Gô[äs5²½äÐÌ[¦ÏÜp5g_ÙòõˆÈÁw"²3R¿±/zêr,.ÁÁTŸâ3bMôºuáß»òÄ¿® ýõ‰‡Ç‡B†F|úX'÷ÒÌû×/$ä˜Ò¦@{©;“q=ÒÔcš\¡Ü˜ÁCY%WË'2r |ŸÙ™¨*”«¦]¿ÑU¸4¨vüJÙçüD’‰!’?•îÐ4%w›Åê?p ¾¾V>D&tJoŸÆ…Ĩàob#:HEµ|3¸m³ôRöc—)™õÝqˆöâ°ˆþv„'¿¥…sûµÛN®N‡ðccfú6ß$ªg=$xùóIùÆÉ=ǶošS"Âÿ÷ÚK±ÞZÿ]cöÿóñ-ü¿½ûŽkâüãþ$a/Y²÷pâE°Š£Îº«¨Ôj«T'"ŠTpŠ¢"®Z[­‹jk­ÕŸJÁb]u/•%"Š(#Éýþ8Œ1¹„€†$äó~õÕ×å¹çžû>Qï¹{ò<ÏÕ6?€rR¡7 H™N(eþ Œú„g#]Þ?}ñæóÿ=zõ®ŠÂbUE{S¬Þî3½DÇeJTrØÀµL4 sg Î'ûõ[r&£¿•žpºøœA+-ö³Jž£6‡«|ÆÑ²©[º”`!æ†è¨'El–¤ÑüúŠâq¹â £Ø,ކ&ºdeäÚ=aWwñt‘Ço¶†Éœ„ÝsJø*4þ«Ðx)§ÐmüMQÞ7ô¶¦~«Ü¼ñ³°4ŒælØ;gCuúúÕé“ï‡KŒJø#ú ”–xûŠ;ÅÒ K~• B“¤L'”2‘ôZŒ˜Ûoýþu~-Lôu(n¾…7nÚfàÆŸBÝ?·Ë/`\ØÀÓ5ªEüOóöþ…]&¤$œËha"²K|Îà¨Æz[—.kbL)}¼EÏbTÝÒ%CÛ±eSÝjµ5Ø–ÍéàSôÚ¥¯ªŸÄ7(>Åí`§Ø×Ú ùvÈ› - W*t=”2PÊüAFÒçý•rùºúFzZo îm_6IÞ{Jl̬qmœÙ,B%©(LT]"sgN­78úî¯×2ú;Šädœ3´¼[Gÿy'ã¨ì¹þIÝ–gÔ-1Bˆ®¾Ñÿ&¨/Iñ‘ܪ*‡#H¡¨ê7 Ü»yÙÛ¯÷«â"ñ ŠúèÍ<OSCcFøC#žeü®ìµðGt€jkHsŸB…®‡R¦J™?ÈHú¼¿}›C¿ ±ðII#kWÿÉ‘d¾¢»fx`¯k9¯,]Ú.Úö‹,Ej™;ÓcÖNBÈg#AJ^ÏJ‹M$Ìt“²üòðî.&/‰Iÿ Ñ)cÜê–Î »y3·°ÊÏ}lmç$HáS|zí€ö{Ñëˆoð)¾ðÚyOÌ-¬*Þ•ipT¦Á­ m¨´ý»’FM˜mÔÈ¸æ¬ Úæ¸ÃÇ0üÞhj!º¤ŽìŠ Ÿ~BD ³{dž±“•äö qå¼€ñS€ZËÏ}z6õØÝúZÙ8p8lBÈÃûwLMk¸D—¸º7#„ðxüüÜœóiÇ};÷413×ÕÕ“~  ÁèPm >Ws>€Ïãq4ЦTSª¹3J €z²²±óéüåÕ‹é%ÅÏy|>!¤¢¢J[»†+*ªÎžÒ$„pØlcÓÆí|ýŒMLµ´Ô" ¸uÕfjfñ¢(ߨÔLÑ(RaþSS3 EG ,”jîŒR ¶ì\ŒM×ùp‹Åb³´´´… hЪͣ­wfúqk['vÃúÇ >—÷,ûìÉ#m½k˜f >ÄWïS ¥ @Š.& èÕfnaݺÏÅôc¯KŠE^ Øl¶‘±©‡§·¹…µ¢cPÊ3—y@™áòªMWßÈÙÝÃÙÝCÑ(–+ )Ï\BLäe†îPm¸÷Ê0—y@ù¡;e˜Kˆ‰< üX/ ž(:S »:[\øô3FPotõÂG0˜”F@ƒ‚ÇoY°Ô7t¨t¨t¨,% JEE¹¢Cøˆ¶¶Ž¢C`€îPmÊÖÞ(9hÚÚ:Ü;öŸ‚¼\EÅÀasÌ--;vêêâÖDQ1H‡îPmÊÐÞ(9Ä=ÍyœzòxïþCí\8ÅÜîòxÜ'ÙŽÿ™¢¥¥mçਤCw¨6ehïâÎ¥Ÿê7dd‹VžŠ ÃÄÔ¼‘±É_‡8^±‘0Âã¨6%iï"žä[ÛÚ+: B±st~^¯è(˜áÍ Ú”§½P Pª`@=¼7ãì?ùuZ:Ãæ4¶´ôíÔÕÕ½©ø^•ï0³´QðD™ ¹B @Ãõ@€¥Lÿ”*P9Or§:1È?ÀÉ­©G“rçÖõ&ÍZJ?êÞ›ÍZ´&„ðxܬ‡w?ð‹–¶Ž½Ø’Ãj÷K‚™%æ™7(hbh*t=dl‹Ñ@ÃgÄbôÏáÆŸICýZhk˜Ú~9bÆÅâ :ýΉ½Û7ÒÕ24³ï=zîÍ7UÕ‡LSÇAPÔËë)£zxëj6²m½`Çùó‹P+çÒN9Ö¥I 6›Ã§ø|ŠOQ|+ý?ŠâÓ™Yl¶‹{ó¯¿w.íä›ÒR‘Âå;:àMvÚÂEkž»^RÁqhÞn씹S·–ëkTç_þ1j@9‰4±"wÃE1¦khÛW•çBÅMž5bñ¶£/‰Iÿ Qûâ'rä/€¼à‘@@d°Œüù¹áI›º¶3Óx÷צ >>³_Þ_O{fþì ‰¿yér  ìÖ9êùÕ¥DèþroGß¡WæÓÛoóµíº ìÇIGÚ±Jî%EN"ãÓ¤äg †RQQþ9k ÚóÂ[{GŠÿa… ŠOñ¸\BHÆ?úvëG(–øŧ„±µsx^XPQYa@ … —cw@ù‹ÓÝzÌ›–ØÙ\—ŸuóâOæ’ÁGåwFPCâM¬p“̘(ÜN?Ø5,â¤MúÃb{~VhÏ.Ã~î~h´›ü¢Ÿ3Y@¤ÿýÃGªj×ÒéköœzVÆnß;p릹֚ÆCD–Ò¸srçûMÓ·¾žcKÈzBÈ­¿·½O·»,åûXB– HñßN ûwk–ý1å›;φ r$„Ýs’ÒDÎ+’Ÿ1Bˆ¶¶ÎÀˆÝu¬¨™>æ|6›Íçó)Åçñª!¾]¿"ÅãqÅ7(Š/|‹Å"„¯­¥-R¸»Ž…;Fî_øþáÊ­mר-]ém3KûÝ ·É*,}žŸCq_­ IþýÜkbä7d–UÁFmW˜Ä–£ùåšMܹv.â̶¨ðÄ}÷ ÞÚ6ï¸dsÒ`7CB$Þ4îøÜ’•Ó‚¶ü™Y¥k58(rÏÊïwâÒ#éÿ ²áæCÔvé,‘v:yþéI'sš7Ö#¤åʃ“{n!£WÊ!L¹kðK ^Y5|å Ÿ©—\Ê^4jàÔ—’z):(PR’zÇx•¯On›bî5W|WÁ¹ã&SEÿ>.Ë/É×P‹þ¸âRáô»«šYîÊz£áýÕ·;v­v×Õ’_z0¾ýe¬¨3væráßù ÝÀåBèÿ3nP_ä(Æk‘»Ö^~¾ñ''I{Üu9˜vÉÁX—r&bèöÜ>]J¶¢òc'ï·ÀëLLG:[x¦õïW­HAÜÃ,öM[æ#^ÔŒ Æ»w5e§ïœùíð˜ÁW¢‰ 7 çæûµtàék»,HÁúáÒ |QðÿÊIü¯µ™AÞk®¥S‹!cgÄÏ«óñí±H;½çù»3ŽÕf '¾-ô#Ý ’Tkt@V X¼õ¿¸Ì½ÍŒµ 1³4i^ó Bª[v4Ð ‚q) :QSÏíÀÃd‘]¯îíïùõŸ?ݼôQ*Å ýáØÊÿ# ÈÝ·Üõw›œ¸[hÁzž4³o÷-Ÿžœ %¿”`!D¦Çg³ù”HwÅãq !×2Ó:té[ñî­øEQ"G±™~6cwÀýw¼–úËß²ú{‡÷{—ÌŠýwº³±6!Îs¶.ÛØ~9‰9BïŠÝL§;…%GolM–/jϺ`w BH×ññe ÛM¤Þ4TŸô@VÜ¿“µ q˜ž³²é·Ò ‡›eÀ¸XÅ«|rûüªiÞ9fÿmé/´[´Î«äÙjU5åhÙò*ëòöe BK ¦6´Æ‚‹oªÎ6ý0ŸKµê õŒÍ´”EQÜw/ÿJš4¶KÄË{kéç“ýúÇ-9“ÑßJO8î?“Ϻ,?h¡+H±Òâ\?Å^Wƒû)~ 5ö#d‚”üR‚!„˜¢;jVÄfIÐÁ¯¡(—+¾Á0:€éZ$Çîw]ÎÍ2nk =m…Òo–q»7ª¾ j7ê^U6Y°«› ݨKeYó‰tª‹bq (~%½]ãMÃ2®ß‡Â;ÕX ('Æ¿Ö,Ž–ƒG×5Õ3H¶äÒ™Úuö³Jž£6‡«|ÆÑ²©‡˜äAÒ#‡ÊÑá°Jy”!‡Eá–?¤{êkF]½ãm ©¸Ð@eHê-ÒÐ505éu˜!ÕÝ·÷/ì2!%á\F@ ‘Ì‹Çî =+œ2ÚRO¨`!,éù¥³c˦šê@Û²ù"Ý|Š^; ôU1"¾Añ)¾hw@ýŽ˜áiu8û@@Í ³µÔ×øçUEocmBHÅë4Mý/QL}Uѧ:=]K¿o%¨ñ¦¡¥¾Æ™W=ª ?[cøB9IýsaSWø³x;=ª±Þ–ǥ˚BJoѳ%—(ä¯Á´S£-õ§lOOß™WühëÂïéѓڌ ŠýeÅ-í î]Ù¶6jaRõXBLè"sg:Ž]?oR»¦Våϳ$ü`Ü´z€SkÆ Ž¾û뵌þN†"%<¿~@;è¥[#áĉ+{™¾ùèª ¬¢äÙC­»FKÏÏ !DWßè “ê\;P+Iñ‘ܪ*çà Ð(ªúÍ÷n^ööëýª¸H|ƒ¢>z³ÇÓÔÐÐÑ3)\ŽÝ’c¢}FD“¸ ;™ëð²nfþ´qEd2Ûq ™²ñ÷ ÁV$?.(Âe؇á[aÁ‰M7†X“‚øÉ®#×É~v)7 ´%_;…LMú#q’%U°.$¢Æ´9©yeݬõ)¸ùP"M¬Ïèqó&uhnSšs-~ú×â»Ûé åÝ:úÏ <ç@eÏõOê¶<£žâøÜTkí)æX5~b¸Ë¢\= ç‘!ÑäPuG­g辨„…“‡t{˜ÿÆÂÝë»™ÌSùˆØÊš‰ fô={󙎩]Ç>ÃO¢Ó{ÌÚIàl$È™WÁ³ÒbBâ¶Œþé¶H±.ßì ½èë8» RÇç«q§+ØÅ˜Ÿ1BÈ»²×u¬¨s «üÜÇÖvN‚>ŧ×hß¹½Ž€øŸâ ¯P÷Äܪâ]™†ÁG=rìÐ1ï™z3Kãë1_ψ‘±@Pg"ƒeÚ˜szÄñlŒ/'¦­¸SÌ”Ìþ6fÏ· %åg VÚùø¥Ÿüó‹n}­l86!„¼Ñ`QÁS:ø¡øŸGáñøù¹9çÓŽûvîÉæˆÞ*°”¹­·ŸßË_sñÙ™{oO=œ >¯Ý;6ŒnÔÈXÑ(XâÊy㧈§›ZØÕ¹Ìâ§5gP>¿îÜ8:hŽ’Ül\ñÍ·ÁŠŽTØÓœGÿ]¾PRüœÇçB**ª´µkXIG‡Ãf›6nѶ}ãÆÖÚ:ºÂ“ˆ\G(¿aK~Y:ܤ*7qÚbÇAkÔEƒY: àáz  T?È+U0 Šì\ŒM×ùp‹Åb³´´´Eúˆšw̰½;¸C«'o5;ô ü-ÆWÑá@] ‰ áz  TKi(U0 ¢ EW<ý,”º;@Þ3ü&F]š%×S€¼¡‰ áz ÀÑÐàóxŠŽ‚Bø<GC©ï·@©Ì²CŒ”§½P {òH[ï/jÎ  Ì-¬[·ó¹˜~ìuI1ŸÏ¯ù9`³ÙFƦžÞæÖ  FJý¢AYäçæÜ½yEí=€ÑM[zZÙ80fÀ‹A éê):„¼+{­è ;T›²µ÷ ÄøÈî`„É ÚÐÝPXJ@í ;@í ;@í ;@í ;@íàÍÐÀUT”+:ÓÖÖIAw4pÚÚ:Ü;öŸ‚¼\EÇP8l޹¥eÇN]]ÜšˆïEw4pOs§ž<Þ»ÿP{'7À .x<î“ìGÇÿLÑÒÒ¶spÙ‹«!4pçÒOõ2²E+OEPßLLÍ›üuø×ãEva)Ahàžä[ÛÚ+: Űst~^/žŽî€ÏìúÚ!ö*äÔf–*ÐÈ ‚T‰h a (>æ€Úâp4(Š/žŽËb Ì,í_<‘13¿ªèû„; WöÊ5$%Q«oF~°P0€€øŠÁ@c±ñ¨5ÆË Ü»înêuÙ{щ?'¸Ëû\äs<£Š”P«ÒòÒæ–yDö0Ö–½üºE¥ŸòÍÈ 5'}Å`µUífѿۿþ>îv~iQ~Ž,é XlKÑ!(ãePÎÝwÁêëóö…®þ6’ûýÏ ý:|vÕ¿_,‹Qtê €š“¾b0ÈOÜ„Õý’þ—îk+c:( Ý Þ/ƒò}|zq#ú¢þÈý¾Ssõ6.¹Q¼¬•)þäDò¤¨íWåëY¸ž¾tÉ8_Bˆ™¥ý®0ÿˆ-GóË5;š¸sí4#‹B¨ª]K§¯ÙsêY»}ïÀ­›æZkr!ÿíÖE3÷ÿóœg8bfÜÚ)]èéèôÿÅ0³´ß°pÛ‘¬ÂÒçù9¥¹W—„-8töÖk®FsŸþë\ÕÆPS¼ÁÏ ÷Õš°äßϽ&F~C&lY\ž_²JC›4|¯&cùÂQ1VVü(ñºÓg<³-*¾,_tEÃÎËç^[½ ’"„Š_>{ͽØEÞÒO*›$ŒÁÈøõšyÌ ÐûgFj!¤¢äTÈI£›J?, @$¯¬ä6î}½jô_ïÄw‰¼€FøÅ4é[£ºz{ZÛºµòóÿñbÑ•_W÷ìèecëÒº[ÀÙo‡Ù¶iS+G¯§&¼æ½꣪vE{5oféТÿ„åyU~íMUÏFµ[B¹­þ‡çÆ¢Ëûötqr1³´ol׆[ž%ýØ›eÜî‚ðu¯*»)žÇË@óâû¶MJ5¥D%©²"$ÕÝ]§º(Ç€âWŠìÕ1ën/üâsBHþÙyO¼–u6Ò’~RáØ$a Fö¯7lÓˆC!‹«(r8$¢Ýâõæšµû;‰Ö€¦Š×CŽ–ÝŽ½AÓ‡Ì˯Ŵ33 7ÿ‘ö4ûZâwæs†ö :¥•˜’ú$ûƺÑS‡Å ²ÕjÈ!ùx°ž0Æá’͉§×82QöJI ^Ò KI!É2àQ<ÔOf(¥úçæûµô‹Ó×îÜËØëpy¡àX)ÅÖ–5ÇxdÉi.Å}ÕѽýŠ«7»5Ò¢S*^¥»´]tóþ)ã+ R÷Ïíò Ø‘Ÿ}šÐ3Õï>èc¬M©(ùŸsûõ¹B¾rsºzÇÛ@tæy_7×é™·¾2ùhs+I ùŠLœëíæÚoýþ1~-Lôu(n¾…7½W¤ÁQ=\]Âÿ½Ý»:¼Níò9ž>žÇ—ßêÝXäË®¦¤òi’*+rcÝEŠbœ(øâft‡‰Ï͉ðnÑâ÷ÌÑÖúRN*R‚¤Èƒ‘ôõ Ž*œܶEÙœ§–üïÖíý†b+2H·i튩áËŒ×ê(€†gyDÈäsÅÓM-ìê\fqáÓOˆ¨‚† 5j@4gÞñùs3ADÒÏgg5ÑÕ „P¼7æ6Í3gѽáïMc{Ï¢ÜûDô¦â„sûDú¦b»ë”Ì[t:·ü¡]ó ü¬“tþ“²;Á{¸º„ý{»/]ÔËcNíéIò…Ó¥˯*¶qšŸ*{¥$ßËÕÅoqb@O_7Sé_µôI"µüÅŸnw>º»O‹E(~ù€f^ó.]íl¤U‡oU¸ú=]]æþ{»gõÖ)›¦ßÒÑJ*¶nv$­™8}¡ø ‹Å”PqQ¡ã'ÍI”×/ ÏNÏyé:GÐ@Ñnä·ÀõåŒÓ¹„ÞSbÿ}XÄåóØ,BȇKpXpbvIEEINüäבóèÄèIm¾ нžSÌãWåÞ¹¸tÒ:=2°Éì ±w ÞT•î^6†NtÒæ¤æ•Éa)—¯«o`¤§õ¦àÞú™‚tI%,â8{ÊÆì’Šò’DZA.Ãæ‰çù"¬Ý¹¨Ó‚ŒÕ”¡¤ÊŠÅXwY˜µœÛ¥dëÆ  &Ó}RN*BRäŒÁHúz™°®ïwdæò«ãkÛ@°P0À{ª{=ì:¯ëïÁÉ·JdÌO?6BX"22ŽW.ÈV«!‡Dò€8Y†J!ãÈDY*%)xG#ÖªFŒ¡~â0CIÕ¿QÆõûð‡ÕI_Æ!“2bcAPoŒ—Ayu¬Oû:n¨Hâð¸A©áI„Ý5çö²±k2$ìТm¿2¬l÷l°O+‡6_]0 8éC'z†î‹êðzòn¶vMûþ°Ê°oõšœÖ,ÛßÏ˱̀KfAtbBp¯‰=d™Q¶osèÞж6.í¾š\Ð:R.©„Î+SF›göñjáâ5øŠÍ˜#Ñ_ˆ—iÓu…þE'K*èŒÕ”¡¤ÊŠÅXwÙ°Ew\2l͘ÄÑ5žT„¤Èƒ‘ôõ2ÒÐ':¦=7®) Æ…‚i’¹sbG`ïötµ Íì{ž{óÍûù7yæPk##ëa³¶ðjÌ LW V ,Ž~ÜáëF?«ü09\‡Ã*}?§[þ Ŧ¾ªnŽ+^§ké·¦·=õ5=|DœQðDÒˆBa-õ5þùPTš¦~Ë:C 1×;xUæ[ÏóŸ>ͬír’‚7m3pãϮ޾wbC`ÜÔq⊴‰²ÔHR¨ëFü>s!dý¬¿ç¬é#=0Ël©¯qæCÞ¢g1Jz~¥‚§P]~£.MŒ’ë)Øøêñ2(ÇѲ¼í¯>Ëù¼$Eµi˜wßµ7ê9u&{ë.¸Q>µf\‡àÿýx-# åGÏöAË»%ùÏ»ýümYá­¹þIÝ–O”ž@©ài@ ކŸÇ«9@CÄçñ8 CTx²€rv|·mṎ́ࢪڽIê¬ ÷˜µóMQÆg#Ö{ù•|Bˆû˜”å_æww11uý²°GtÊ7éù”Šª¿Y@®LÍ,^å+: Å(Ìjjf!ž®Œ·2>ç+çÒƒÚÆÝcZ¼™uíM=à§>&œÎ˜¢(+-6!„°4~Xû[~iEEi~Êš Ž„?äP&˜, …G[ïÌôãÏrbŒ¨>÷,çaÚñCm½Å÷bí€Ï¯×"Ÿe‹2H÷¡ŠD-`é,®‡R˜[X·nçs1ýØë’b>£ü@]°Ùl#cSOos kñ½òí8;3bËÑürÍŽƒ&î\;͈ÃZÚÙ£pù‰õ]«C©,½Ø²íœS·OÚ¿Á=4€þ¿à÷ÿ3Û¢Â÷Ý/xkÛ¼ã’ÍIƒÝ é`±oÚ2Ÿà¤±mFF®¹‘¤Á"„³g5 Ý"è „¼(x"þü<ã‚ñîcç]MÙé;g~;6óösM¶È"¿Òg<Îr×Ñ „P¼7íÚå=ÎÖËÕÅoqb@O_7SI‘œÏÎj¢[]‚¹Mó ´÷,ʽÏx^úc7×i™7û›èˆ”É!„â•YØ·{ž{ç¿@EÊž­þc¦›š):EâóxÛ—5A|—©…]‹-.|ú A€R“ïŠhÝiÓÚF]*Ë®ÓÛa›F Y\E‘Ã!í¯é `D?uBXŠ_)²woJBþñíþ=|œ<û¬þã1c t_]‚h¼rég¿ö¦ªg#ñtIQU–þ«ià)½Lø\°P0‘¼b0€$òíH}UAoT¼N×ÒoMo7n¿xfÚ„=I¡ív¸ˆUÛÙ¦mnüùÀÕÛ÷NlŒ›:®ÎÑêpX¥¼êÅç¹åém 4O½¯ˆ,Jîî1rQç0 V°P0¨9é+H"ßµ‚›n ±&ñ“#\G®{ŸÌ^¸¾Ÿ‡ÿòÉg 9 OþNڜԼ²nÖú2ž¥÷”ؘYãÚ8³Y„ªÆü’Œ¶ÔŸ²==i|g^ñ£­ ¿¤G6ùnB¬óÆé®o÷¯ X°Kz9'¢.t˜»PðK Ê 5'}Å`IäÛ°²Ý³Á>­òË5;œx$ÒçÃYõ‰ŽiÏÍJî5®£Gñ;®ŒOÑ+ºk†öº–óÊÒ¥í¢m¿Ô9ÚùVŸî²(WÏÂydH494ŠNï°øà´…Óýý¼ŠùÆß„ÆH-¤¢$5â–ÁåÎVuj `±4—”bó¯ÿfIüÒ¦þO-oIüóÛþ÷ŒVŠ€,%Ôwÿú¹ý£Þd]Û¨7"Ⱥ€‘|' ˆ3³tÔ·l¶âàAô(J}w`Q=…“ï‹@ ¡;@í ;@íh|ʂàŠê{)Aqååå2æÔÑÑ‘k$jÝ x,6;yýª³M#¿Ì,íUâHª'(9t€â±X,BÈâ•IRòD†O¢³À§ÃR‚ xlÙžó¥d«(¹µ",Èdz•“CÓvýgì:uÿóÐР;OÆŸý%e«,ý·¿ïÈ"‡>?ÿùÏÓ§o]8ºp|çKÉ?|Öt€â±Ù2Ý“HÊv"8D/toìÔaî6Ælޱ¥oOÿ„_OÑ{Í,íÿNïкec+BHiîÕÐÀ®N.íšt6óZi• œ£±3Û6mjåèñõÔ„×n®Ó2oö7щ±‘jJ‰A–* rw’y‹þ6¸åíšåg”ò§*oÅc³d›,ÀbóCw€».çz×Ë úÆFÐ È ÜPtyÿôÅ›Ïÿ÷èÕ»*BKèÔÝiÓÚF]*Ë‚c ¤ !,Ž!„~¦?R¼rzûf·» ¨FÝ«Ê&U8?¿Rzþkoªz6ú¨/@J!"Õ”ƒ,U¸ø¦êlS7Á!x§@ÃÉ x,ÙÖ”-´ƒÅâ_îÊx®€s½ƒWeÞ¸õ<ÿIáÓLŠúпúª‚Þ¨x®¥ßZÆŵÔ×øçCQišú-ë–¿­æ©÷éòŽA„§¾æ±‡^<¡ÿ+ÊÏ©[ ´ÐŠÇfs>%ÛW›ã_®>3aÿÝÜbEU¾}u-í¤BJ¹|]}#=­7÷ÖÏ Þœ˜]RQQ’?9Âuä¼ZUAØâ!޳§lÌ.©(/yá2¬†¢$å l2{Bì‚7Ue…»—‘k "¢'µù.(özN1_•{çâÒIju8(?t€â±d›, )›¶q§gwÞÿã›^¬¬Ý={ÌM:ÿó ÆÌû6‡î akãÒî«É­#…w­l÷l°O+‡6_]0 8éSÛZt^™2Ú<³W ¯ÁWlƉþ¢nù;,>8­Y¶¿Ÿ—c›—̘'/|®Dx†î‹êðzòn¶vMûþ°Ê°ot­凥€Y}.%¨£g¸zixÙ®,[Zñ4xèfõÙ «o$cÎwe¯å €šÀ›@ñðPϰv€ÚAw€ÚAw€ÚAw€ÚAw€ÚAw€ÚAw€ÚAw€ÚAw€ÚAw€Úù?:+!Ð endstream endobj 97 0 obj << /Length 4360 /Filter /FlateDecode >> stream xÚµZ[sÜÆ±~ׯؗSY¦´ðÜøMq$¹ìÄÇâË©8•€» Ñ.°°¦™_Ÿ¾Ì €åT¬¤TÔô4fçÚ—¯{æÓJ®îàïÛU»ðÏ–yfE^ä«ÂØLW˜U_¯nWÿ÷J@C±úöÕ®_}õNéU™•N¹ÕõíÊêÌh³Ê]åêz·úËú›ÿ}óãõÛŸ®6ÊŠµÎ®6Ö‰õ›Þþð‡ïßÿé[æ¿ÿÓ»ŸÞüôö\ûáÏÞ¼ÿæÃÕ_¯¿ƒþÕ*ÏÊ\Hìß“!)¸ï¶9)ßj> 3·&4ú¡jÏÕ›½z{ýêÓ+IË“Ó\uæŒYm¯þòW±ÚÁ·ïV"Óe±º§–Ç•±*s%þî°úðê¹õC_ºt«\‹¬(KÿýíÕFk³÷u_#©×f]qýÐ\ïn™Ñ«;ßäg!Ô¡˜?vÌÜv}_oGÏÜ7C`Ÿ;\éjCsZm¤ÌJky"ǺjqƒK VÁqà°ÈNM{—agùúÝ•´ë®Ïm5Ö‡‡+gׯ±¹Z?tgn¿ ž‡š{ºo»mÕó$Ärüí¾ê«íX÷0[%y1JÂ&ÜÜÀ~(»þ¥‘˜wh†Ñ7£ÉɰÌk«c=À;{N™L[ÇÃúîxÿçjã„€åÜíÇ¿ÅSCÖ]_?d¿0½«Fš±,e¦ <¶,‘¤~~O_,¨@±š±á§#AiÜ(ÎËîÏcMqQ`üß';T*3 b (‡ƒ}|ÀšòGƒ‡Â_ï÷ÍvÏä0V=œdbZgªÔ³)¤4Yg°¤Ð¦jwÜiÝîsY¸Ì '}ߌûĈJdJD³\¯ËTøþ»Ìà2cðH`+‚Mûÿ+)AkP „ôRÇÈZÖHdõvß6ŸÎáCÇì( ÈÜ5·(r·`Ú‘¿ŸhÓè+ˆÿS zØC#£×Çn¨š-Ó´z¢.;H]87¨¡¦¢iQ™B+7ûêJ‰I]€Sqá1¥áÕáPïR[›(ãÖÞ]Á‰õƒLË]‘YÏý¶Ãe:´t58…~ ëeÖ}‡«¼ç/MË¥ßö†LWîEÈñZÜb-k²R•Ÿ»"›å“ôÎW¤Ò+ÊÁ#Ë‘¤xÉêm×îp–Rú3@Ñ"ƒÎRÒ]üÂËPÓµ~úšœOß¡ÆÛ·ñ'Øq…„ë¿eÒä̦IV!%ÊLIËVM§­šŽJI?þYjƒ¼2ø1˜½<™Ï™ŒšMFý–ÉÐ9HàÙØ8 Æš[‚•ÊìÕF ê˜Ä•,Öx4íï8ªdÓroÆÎí›Ú¾„g6¡Ø÷Ì 7Ùõ.Íúöܲ@Í.ÆZHl ´/!§"+Ëh"ÁžíxÂÐù©¯AtžÉ¸ؼño0£•ংÈóSð«&å @ßÅdš¯¯$(R5|RŠn´Ô7ý*Ñ™=ˆšöMuÏ}è//>»£w‡jDkQviõ.E4`RÁg¬ßðЇzd‚ n¢»iv@Üx+$•Ì ya…X°é4ÀW#—d ®äšœ/q›@ÝGŸ§¨RÈ &î¤{ád„ƬtYÈ/;ÃNÆ®œ|á`.|DÒŒò…©kèPäÿ‘¹•)h¿œ»ú/Î=w™µú?2÷¼ ̽œ»NÏ}‘Ù• ;±HžLÌSj) Ãaî_¸±€4z¹”6½€"ZM+aUÍmj³D?”Ü(„¬QÑ0®(+RNË÷#rëúÄÜ)¯ŸÚóñ†3—ð…Âê¨ÃȉÉI )9ùúɬÍÏŠ¡öVTšùzÊL»hª~M¬à ŠÐ£NåóÆ-—'Ÿ6¶k©aIÈËz—ªM°/@µ5yJíc;mç9eÃ+c¨ Ö:Bk7Ãcç*º–’~óí.†(Tò7ŒI(·QÃÅ(ZÔ§ /;Hæ AÌ­ÍeQÈ„4Z“ XªÐàŒË/’Fð˜  »R¶üBƒ++²"¿p$´ õxhÀ´©\Bi¾d°m˜|ž´0ÿÖ"ȳÔã6›r!Ï€s!F€ÿáÐ:vA,•O…¼†úxsˆi†,@øtåãÑÉfW¦‡Rùz<]ßT®í«‰Š‹Á§Á¨ʘÅv<‘®=™0¡å¿Ù|THKs “:@Bê—t<âg…›‰[Öµ!ywç7ÑeÁĸ¼Xš»üÚµ“³µk'ÖwÛvýb¯®ª¦=ÔÂeG(oªðבxÒžÝFä Xä–ìêNk`›ÌQì9—©%ûÕ”u òØ´>¹qÏÀgþSž»z“L;7;ŸÐë}0"X!ÓfU؃:Ä¡\†¨Òj²É˜m¶çCÕÓ¶XÊcLèÝ%qu‚¦6P« )P/zÊ•ÍÁäÛ<8™/:¹ ¤¢äLWÖËi ºSí)‚”Š£(¨u@óAL1ÆöUK›¡løE8×Ä¢»êÛ€Þ¥Ðë጖FÊ”öœFÞ}³÷(`Zð•¨uþ„¡Ý䎱Ɖ‡Äõ!MQ©Ò[ v5KÜù@÷%ÀáÔºâKN(î÷ÝÁ7æ$xÿq8U[rGxeʽ&Æ{"P7§ÇôGP4Œ²p*:Lå±Z[¼p‹ÎÝï krÈÒ§{|+ˆ¨#`û±çqðRg[§F›O$»©…nd!˜mÀ¿™ß ˆt–nvÅ@f&<@ÿã<ŒLq‹öw¨MžåEÑÅ+±xÑLáyïÍgåoÍE²æù´‰É„°Ï¥M\frsq´É»©Ò¸ÏîçψŒÔë¯ÐŒ7m*]QÌìˆ_ž޾® CÄ®¿¯oG¦ÐâaIÄ@€dÏ®iCξ@q‘?ƺÚaÒ¡ÈÑ#ÐÝfîbFgà*œžoí¡Ò\gaÒ§'ལ§XÉ¸Âø.¥s  `½Z’Ñ‘'`’‡œ?Ò ”mwÁ ç0ð:[˜!+飅‹á9=¥L¾æ²À+Ûóyì™âiÂçÙ‹‚þPæ¿E3Öq«áHiNä±u2EÌw>Ê+Á÷³¨¤ÑlqíRO¦³|âgX¨UˆÄ òêUÒ™QŽB‡ö\Ž]‡WÊ:÷sdn»vÔà@KEbT©0ó8ðOqé‰k…qéÖ/ÝrXÕî.УçA×ç6µB`ò>³M}Þ²1{Ñþ-²]sû÷ôMD^ñuCÇiuÁ©5ßç"c8ßlNͯ4ÿ³ÀFÔý©;T>sj­Ä¼!ý¬â&}4—ÇY ¸ ´ B…誔ÞÒ"ÅA R|'øhÊ%õŒ/K|ÖÀïJŽâ Ù©œ’·Å—ÒS÷=% Ëœ3`PV7j'’oH‘ˆ‹E%6³‹*`ËMÿsŸ#CN{⎠22Ç$ —"HgØr.ïêîX=¡ ¨îš`jÜbJ´˜j Bž‰¦ŸÒ-žuPšÀ;>ž0}œ]÷!Ф;7IÉÚÒ°¥£ÐSÞ}òb1ž† ša3–·}Õó½`H3†¸_ç!‰Ÿèlü=XOd)¸rn}$XG&&-0§êŠðNˆøv+dÝ  ‰4KÄô-Z> ñ¬QCÁÈ,ÉQoýU˜%‚à€Öª– /uàïèE)ïŒ_ù––,üþé\íúªÑ&’o£ƒty DBPˆõP3ÓO¨Ð÷à[$7²qN†·Ix4„äÁç2Û˜ôVŽŸ!Sî²÷Ô…üåpêé@)Û9¿>Ur¦Í“ É_΀u´ôXæ6{©A¦~i†Tàóµý …EŒ:—þAp ÊÇ_ç@ãGæû—>nÂøÛ[.ãûy¬$£žSßÝõ^¹á=Vñèù+|âÜ~£Û ä´Ûúk¹<<ù-<„úxЦúL¼+Ízhþé©ðÜ=~Š’öe2Ì_ÏG³„µÆsý­ŒYßuÉH—³6þ)?>Ñ×Í Uø»½_;cü4ó?n4>·û%QŒb9˃ìhºøÄK=ÇÓÇ*ü:€mŸöOn,ZˆÔmx¦§gÅà0S›ÌD^>w‹c³éúôØìv‡ÔÛzñ<u|‚¯§¤»îtÞJ»9àÑÂ!ÜÞW§ˆõÃê\‚b†î=I¾â×e«MQdBÛÔ'’qÞ$ Aù'¤ÌM½Å‡5sm'm%h»¢—x²Ü±ä÷»º(çPïð{¯¦Ðº´ o¯_ý èõ5¤ endstream endobj 100 0 obj << /Length 4538 /Filter /FlateDecode >> stream xÚµ;Û’Û6–ïýÚ§¡¶,† À[ÞlÇÎv*{쮩™JòÀ– ×©!©Ø½_¿ç’’ îÎÔn¹\:8q98÷ƒþ×B-àÿ‹fÁ¿¤ÈÂ$Êòl‘›$ŒLš›EgÛÅßn"-~¼yswóÝû8^da‘Ejq·]äE¨µÈÒ,4zq·Yü4Õ!^þ~÷ŒÔ‹",Ò8Å‘ fO LCƒ~)›cY/W*WY¼ý¯×ïÞ}Z®â$ t¸\%i¼þüùÝ/o~¾ý댿ýëûO¯?½û[¿|øüúöíg\èæÝÝÍ¿nBM;ÒajÌb½¿ùõ÷h±¾ŸQ¨‹|ñ•Fî&‰Ã´ÀïêÅ盳Sj³P&Ô&çÇÔQ˜A‡öEQð¦¬Ëf]5¼µagØ·}Y­=´ˆ«8‹B(ösõe©¢€¾Ê‚²ïíþ¾~\¦Ið Pé8ußÏ˃ªgtÓvû²†¯[‡v_¼8.§TX$ /W6d?”USÛ¾‚ë, þ¹T°‹öˆ:Ø—<ªo÷v¨ö¶çæ®\ÆQðÇR%´ayèÚûÚÚ2©0_<åÅ«}ù äá­»¹ºGnÕe·Tyð`_q»íø·±v#lº’G­uÛuv=TmÓOìàîñ»÷Ê̈N^‡Æä¼™ß"•}rrOiDzïÊõn¹2qüýöãg†ä4þEq-ð®ì(ùíûv]•ƒÝÈ€ªÚN®ØsEp ¶Ûð%ëL8JçA{°]IG厶aü°+Æ8ú²¯šµìÀ¨¯Èg°9Ï’u[np{:΃m×îfdÓèŸàˆ5žÇüQÙeœÀü¡`i?Y&IÐ3޾ò1Ñ.Ô÷ò»®«õatƒGeAš«Ÿ,U1*•¿ã"ØGû  b7ð;ÏTIƒdË€[¡bün.gÊD…Ù¸tÕð.KùåkÀc®TbÂl‚·]‡š{@õöÀM=·jg,.YølùcSEjÒÓ|ùø J¤ÌþðÝ·oßÂ?<ìç 'Gå7)ãËeUf™r#÷mçÖÛ•²NÛªkÛÁ³xZŠÜd <-b ƒ÷¥UÆì¨UJfQÄÛð *r Æ3ãÀãÝ(ØXGn´Ó¬ï"ûãýŠ$9 ™`ƒ¤=7»TjC˜§œ•a¨f¹›t2Ú†‡e€%~uÝV?Àd CN©C;o#žäOr·cëƒnAV£åäfãéž’KK-KO’`˜BøË«™Éι ÊN0C÷ÈÂføZðWô€L×€§âYsÝ6¢?ñŸ˜óFË>eäWl²W± Ó2ÊÊ@*Ÿ ×#Ðc?°w£R9¿ÊfzÑdèŽ&#`ËìíÞk÷˜ÄqÁŽþÒ—lù×yol¿îª\L/ƒþ9QÐ(f:&dúHNÐ$¢ÈÉ0q‘1À;˘ãÛ­ÝIÈ;@%ÿlGݱYùÖßt$À¸–“0Ìøš÷Åqâ‡a{æcÝQïJâ£31Ç"‡•âužyµˆ!ùDÎkC'fÿ¾T]í«¡?5ØéÜ`gà÷´õ—[¿EI„VEgDsØ1Ö‘açÿÃHŘªç_Ò]4Â{>úL6&z#š‰Ÿ»»-ö]@ƒaaeÀ¡²kûÿ,k¤Ì‹\¶…ÐÜ1ªåÕºì6ìªLœ‡Tâà€E‡h½>‚j@ktJwë!«A­ ‰1—JÄoF,ûKÌ*0}ÌÙTÛGn̬ǟc¸9ŸyÙæóñph{òÝâ‘0hõÁª–* .ËŒY—{ÐŒ ÷vX¡|Ò€•=;ü^ö½9®Ñ¯0‘“>†¿î*Šu"‘:îÉCº` o‰l°¯æY…µ‚Ε8ȹÃÛ"Bn×ó¹½9ÊPbyø–Õ1Bmúïx ]+!œ÷󌣰sâ(b™6Võ<Ú²k½<Ôá›vð›«ý¡¶ƒ¥°»ˆÀÜ·¸ßï&Ä`/ŸÇÕEäì1@Žã¼pö³¡/¢ N%ÚàÕò‹3¹ÁâË"–šÁM%'ëlÃW®À•·ÃWk?ënQ0ÀÁåBO—½qô†ÝQÀ’ë¤Åšœ%n‹‘;=S²žEïq3°³ vÞ¢ËM>?ÙR:Z1zø4ÏÉRˆƒxÄŸêrĬKŒ6 —ÞãÎìezN-Ä)Ö’ÐÇrЀO.m!"5Ø=€Ñ´³o0„½NÞXk"%B†Í `DID ‚Y2lŒ½ â$jÑ'ËÑÚdx%F˜©›kɺÐ1|ZP؆u6œf XÇžƒ×Ï‹6v]ÕÕPYùÖi/¸”(3g.U…†K)»öH–3ŠœŸ¡ƒ0' ãÆàleÀ‚Ì’«ÐÇÊ•SÖç\yñ&ëÞ®Öm-f8 &,ù ö¥÷t#t%yJ–­=g6|Þ‡œ%Á|o_Q¼q5€9o•ÿXuàyâÔ9Þ–ÝZ¾¤¹ ÚòØŒ=Š'2 @™¾eÓÚŠ­¥Ì™3ºžÔ°‚Ë5Wgªž¼W|¸ÞKnѪçU]‘»!âêÅhiÞº\‚sÄÎöiQÊ`¢D15˜¦xª*CkªI]VÜL… Èyjâ0ÏŠ“Ýž-Z€Ã‰þ/-ÐgÈO•äb³¹BÏ8LÒQ‹²‡ÂaÒ*Žò0ƒO/}i‰—¶®êSml)ñµÔoNÌ6&VAn ô)G FF1qÌ€8t*:ô°éÚŽAãèуñ¹ +ßâÏø :Ο2!(½ÄÄÅÙ‹§á-qr•U|\bâ¢j†ÞÏñiôììù™×KN~¯z &Tyþ¬(A¤÷"·áeÄÌ_DÌ´xjžU >iRßMdÍó§ÉjÀ šgœ1m ÿ‹ÿ?í?L¾GÈúýÎe¤Š¹#ŽÍ±ZDµa¾œ—䌗»v(Ë ‰.@ÁÂG‚Ë#W¬v2FMQ‰¤‘ð{nba&ä"ËݨQç- ;7C‹¿ÂÜçÂÈc™ÅlbZ=ÊyÓ³O9kúM>̧ô¨/ÉÑ~°>Ö”ʹ®„`Áe@]o%¾Úîæ—k@<_í•7÷2à€ã\ØA_rÖyLÜpƒÊPꚥShÚI>>4ŽLê}Ðçãsž!'UõÚÞå&8`¡£üô(cnËU")ÊP®´•’½¥`VòÃ(KبìêÀ²$ùVþµTo'#€D¾jf“Òâ10¦T•ž¼K­GÏSx:hŽ{Û¹ÑÃãÁ~ÏÉD•®î+9ü|i÷˜¡ˆX”.ŒÍ´Àœ¯¥å‘Aöwb#»ãœ54…¯§)¼®Ðhù†È`†>—¾Ó:LcãB…DB…lÙo®£Soü'>b-÷_¼ü€.Oºllò¸‡¶ĩĠ¨Æ¹›O3¿\“²Aî3ZêGøÊ¤r¨ ÓATƒèNÇI Òùmø×ÕoÄœÝqàe8HQ·:rÇ’ ®±íE&ÉŒD]’ ‚Øæº`ø×ÈÏëƒ$W2÷”牦hð´{@Ýݾ‡ý½÷WPÅÁOßýˆÜK®(üWƒ‚R>Ä~.@"‰D¿ EE!ªŸràY‡d4·7ËÍ©ydËßÀ'R‚EuR00Æ&£Öùæ3n¡™™ ãSpŸ•f¡[«bãõ uš‹ b9‰Ûëöx¨¥t9݃8"DŠ·]vÜKÊ0ûªÙ|ï_2çM¾ºT .»7½çÊÔ¤h°1–‚³‹ ‘x=í*—IÄ¿‡ò@|‹ólyø•jG¿+;ªòk¹p ª Êk]À>‡¨a"w(´dy¼Å§7Üá}w£R09ùè½½¯êÁûF&† ¬x2å•B\4x ‹‘`–¡>®\š°sm<\çù‹§]¯YÞàí±§‡$ÈRgk_™¢J•eóWÎ)â¢þš ‡ WfÇg ÄðCW}cXÙCÛ86Rœ™ wok¬D\"NÃhzÍôÉêrm¹¦(O·²Ä•=¯-ÔÜÆ†ú¡=r0}y`¦µ{NˆÞ®[Îdc"(ÏB¿&#b;ÿîõ³lÊ¡ô?Ø2Ó£’M…›ñS±<Õ¿2ÐéÁSîJEì¤H†r_÷ c]þ´Qžžù2¶ü[ŽÃ¤ÿVº à}I»ˆN P2;=ùZ| ;~°ÜÅ×3ø|ñüÝx-N^° ›Ÿ‡g¼t"¢&L²t™U†í®b ½ÎÅ[<ôº–üàûÛš‹Kºÿ“jØÞø°˜1¾¥,sF*ËÜniý±›,—'fƒð)L°}Ñpængëpí•dð€1§:IAšºg3¨÷¥j•⛺#?¬%cÁ5S÷FA~€ÿ¤-dÉì>¥ì\ãSõéÞº‚0 Üôœyp£Ç xÜ3_hà§;ú²^3zS½›SzA$´ºjÕ¨†w’ÇôN§+{2›y쪸ñ¬8f¥‹ ¸àZù´”69‰:LJÆ:;EÐ׿ŠÔÙAz`»9ëì×|!šyàˆïBˆò0Ÿ¸÷Ö½Õ¼” ý\Q%R³¢ fÿ8X÷þùr]¼|¾ª™¥Ë¢ì\U•>ƒ #5çj|™9 ¿yA`Æ c&Ï›žD´¡!Ùljy! àù“ zÀ¶ß—¯¸:ì'úJ¶vúøè:éÓçH5eAž§<6O_:ÇÍH¢Ç5Ǧ8°˜aQCŸJïûª!å!«”/¾—åBñKXˆ#ΡDXU%ùŽð™éôŒÛ¯âÂ@` ¦¢ŒGpËš ¥(ô ‡€åWd ¿P $ ìI†µuê¡•²HÌ9t2ï½<[KEÞ,Ë¡B½—’aØ´í§Kr‚v|½CsñŠÿ‚CÝtœ@˜8bˆ_ˆgA> stream xÚuMo‚@†ïû+æ§³ßì)¦X {3¬bÓDH5iú÷»@‰½˜Íföã7Ï;WàðvPXÚYÔd ‰ÒHÊ$ n œáQälîÙÓJHpèŒ0àÏ %*©À*øì¢ÅsºõYÏ„¦Hb<Ó†¢´®³rþRlòñ½Ø¬ª´Ê–ã­|­ÓbQÇ{¿þ,:K¼÷W¤°?ÒèÝ}~‰?Õ ȵšDå¡û>\zË<»2>ÄãwV‰F)8¶l·'8…¿5J—ÀÏ lAiÆõ}¨Ù=ÿ£úp.\p”fÄâ¦G™8”ÒM°ËæØ´ïÍm„ nðÉ9ø¿í]h endstream endobj 108 0 obj << /Length 3576 /Filter /FlateDecode >> stream xÚZY“ã¶~÷¯Ð[¨Ê“‡óä8YÇyrìIWœŽD˜¥H…¤v=þõé $¥ÁÌl¥¦¦4@>¾n追y„ÿo7ÝFÁŸ/óÔ«¼È7…ó©rYá6C½9lþö…‚jóí³ò÷_|ùÞºQi–¿¹?lŠ2Õ^o²÷c½gêÔ3õ¡ævÅÍËŸ•Ü5LpØ©ÚÕÜ7ж°÷„‹k–Þóê¸×t{çm±Øš,ñXäIßqó\=Ö\3žË}=î†æ¡¹9¥¿™ê“КŽ'Á>bŸ1›<-s¸·ÞÈýVÃû¾ýÐL£ _3Í”)|®xð©î.p1¹Mªnϕ庠‘q»Ç’w5«¹DîbIÛ¦!Cÿ8T'æÑ/vµ¿SÓ=Âq ´U÷xa~@‹Ø+\Ì•[q: †¹Íóü•åâX<¢ºº‘Œé2õCSµwãôÔÖ,ˆpÁC¿¿ì¦¦ïÒY(µK­ËŒ°Õ ”šçp)œX+¥’ïN̘äcSâÚ§¦Û÷(.Ÿ",‡©@Ú•/xª÷ÍãeÀý+‚¦D@Ô, P³\ŒÇ~k|òiŒ\½Ö>Õ ¨r›]s6‘åaÊæA¿ÛzŸŒ}Õ¶\a1À àC5ŒÒº jօݼ?˜Ð¤EYò„ß`ug“§þ•óP±s{`[Y„5‘3_ñååU?Äøœ±³2ü>2K3¿žGóÆøèXc}u&ù€·_oµOžújØs÷¡ß]F®Ò ËÄÔ"OÁä]±T.ÄÇL0×"îé·¾?1 -RH1MP? œ›_q uËt˜dàŽS¶MÆôdÝbV ÕÙâ%á$i¦åt2Ó:ùþ…ûÈTªJØÔGøc«óÚ}h•‡aw1ë¹7,µpˆNp™˜Tmuò¸uIÕ@¥{Ä뺕ΞK™× °FîGDwñ(÷¥×¹îà–ˆVçOY«Šçû ÎžË³X—›õQÕÐ2THåÐge–ÏŠD–œ«q¼,Tž-›¼,”â;¡Öt1¹àÙ"¾(¼‹R¿s[ Øh¼ÿÀØ)ú Pª¼ ·qÚžËj¿çJôJš-H|‡®h¼ À¬ rÊ`'¸Æ4 س’v=$íXÁ¸Lj@@d8UÙU¨?TWzŬCÂW8 äXµŸÖ+ÄDN›dóÌÜxn«'¦íz É[îÁ¥Á;¼[ŒhŽ˜‘0üôÐÿÊIZÌóõÄmr¿@.-à³ÏòÝý,ãµ1N§¦(7Îxˆ@óuتCتa-XïXlÀ}Á„¯‹_¡/£_/1ýœóA¶ES>Îþl¢[ÙÂÅ>a´š(7 ³;oD"Zë· D¾øL¨Ç2dsºs(XH-*éF‰pæ Iúgu×ÜfˆUa¨°’@…ãf^ "H»cÕØpa¨,WãÄ-Stdè:Š9±ƒ6¶þ.6‚_Q÷6—€’»Ü&÷ä D@ {w¤U±9¶ÍžiP"(¼&“FÑØZ(S˜ìq ú×DÕùõ’´ÄýÛÉ´ Jz.I $ûti§æÜ6õžÛáðlaDu}Çx&¶úC ëãºÞφ„-^fœ0ºˆå˜ú Üðbϰ²â´˜”&ƒcDç[,!ðí+¾9¶5WǶ!Giu8ŒøˆßVíEæÑ&^XB@j&.å°1¸uuôÜI„Û’ã[’3 +%F@âCß'cË€k¼’Qlǯ~_ $÷7ÔÕxôŒ×¾Õ¦Ö¬Ò|&3"á )»–Â7¤‰‡73JÐsæ ˆkp…m.õòU5 ³^g‚D²!ÆP/dmÆx2˜ $Ìî ©³{žÙ=ÅŸ–ŸaðônŸûóÈÓbtaÙ´a“á‚e Æ!¿s©ÕþY¤F·‹¬_<*4—Ž‚¹ž_ŒÉ%N­Åé…T4=Í`*š3´\žç<7ì7Æ?¿ÚwU[ÇçûÀ’s8ƒIMð˜_3‘ü«Ð07ó/›t(â|ÍÌó‘›m=É#ò:öæ3JšÃ2ârâæHÁ‘†*pŠpCÇÔŠ ë<Pé3ú‚\™£Ë1þ]óì!_QI0 ûg8Ľ²É× ò…wÿ,-òÙØþ¼Õ#û—&ÌÖÇ‚ª8Úd(6ÎY®3÷©¨½*ÓŒœÚµY&ÉT¨¼lg=ÏL¦æ¾|=ýé$þv25×oM6³ï{Tì ×ÏmdáüëÉSgŠ·s ù’aû:2ß*.f¥Z’ØwºÐ01Y«àöän:¿õçû/þ¸ìÇ endstream endobj 114 0 obj << /Length 3769 /Filter /FlateDecode >> stream xÚZYsÜ6~ׯ˜7ª<4ðLž²Žä8UqKÉÖV’ªåÌ`$ÆrÌ#²òë·/ðÇN¶\.6>¾nèãJ­îáÿ›U¹òá_˜Æ^èÇI¼J‚Ðóƒ( Vµ]V?]ø0Ð_½¹ø×ÝÅ«kmV©—F:ZÝV¡ñ¬â(†ïên¿úuýú»onî®Þ_ntè¯ïrFþúýÕõÕû«w¯¯.¿ûæÐ«ØKc_áxHúüû2?i5^IÁîÂÀ ú!+»¬ÀaWw/A û1^«Ýñâ×ßýÕú¾_ùžI“Õ#<®‚P{QŠ¿+V·ÃÏ}Ý 0s§«Xiχé`…°3£B0"©+Nø‡¡v¼Wo*]}[Áš?=›}#ÓoFó?—ºV¾çëx%¾§UÂ"¹Îï»Ú:±«¯.7Fùë»aíóæTdOÜØUe[W7¶YM‚ü’Üî¶«`#JE«0áFN±‰EŽ¢•$žfѨЌġý³âp l†ž‹#Q)Ü}â‹ÂÐÿLDmÙ-ŠeµÑ‰ÁoLà™$âùwq°n+ùÒZÄ81Qf=y¹¯.u¸~¼ŒÂ5XŠIôú?—pæuÕñ]V2Ñ5vöëS–—-“rƒ°=˜—†!ï ·bâh½§o¸nò㩰̳û¼m˜l¥›fFF~Ìî…ÜÚ¼¼çn‘™ÝÃF£$YßZ»´èTò†‰ªäï‰&FJ¥ýšnf0žÒ"Ê?ä´K_Ë–€Ã"I’6¾Zç 3þ¼TáÚÖOÜ*òcÞÚýK¼ñpËö••ÑÙ¥öå7²Èã%Jœ¶³qûDèP=’t}°Y Çk@Žá°uÓÂR:Mi)ÂW„» óö)è„•ŸdDþ‰ö“§¸)Ð…¬èìË%ÁZìå}—x¸—î8Ÿ¯Ë5n.Tf}=UÍ]<,€?¡Šaí9mö!ý(úñ.ärUWç'Õ ‹uV6‡ª>b3$G6M_§GÄÚów‘À«:!ø–±Ófoéð·¬t_<¡¡ ¼aŸ$oß§«-_\â–™QlµV%3þí±BMAz† óH‹¬Ò@»Ž›¥À‰^òåñ}k·\ƒ-VRÛ][ñ÷¡*ölŒ0@ÒÑò¬9¾nk¢ ¢/‰æqÏ3`ËÍ0$ƒ<Î…ÉNX…=´Ì:Vˆ9Ónm”gt¼ ÒÈ‹Œš‡9€YGéótÂYôÄ.äÑHZ<4ÛRb‚]¤{ðŽˆªrš‘—Ä™mÑè‘”£5ôòQ⣙ŒNñ5ÞC(:8h䜀Æy8€å%PŽ7k¢~ ‘ ÙPn 0n£±+/'¿‚U ~ÿ륕٦ZÄRÀeñ}ª†A°L8Õ\i!Šä _Ò–Í®€¤…¥žê¹Ô£‘Ô1w&©ÍeörÀ”ùncà•ÉoÑÉ7ã;> .O}ç0pr>O¸”šï©Î;<ÄX«° ±ÜÖùN2`l廯ºma7x)£cÏgô ã?x hµ§R©Â¾¥\܈&ÁQ )<:~%'7¤/Ù‡öÃùðH ÙÿHN8ÆóÓ°Á5D°“Ç%dh¼´/õb¡B§¸Wò7Ú`\¼¤\_ÑQ!¥F>ùì’â{‡tMË,’(“,8èeýG–è?2þCô?®ÖåËóš%}0‰ÇÉ.ð³éD±ç«þÌM–ã{AbF’1‘¡[ÄEúu‹%ø:3fk3î ¢»ñbàD.Ã’r4\øÏͼŒÓ@ÊG.2tn{%)¡úVë_`TÉÚÕ|‡ð³áà‚® ãCJÏü¾èK]NÓÎ[{¤º„­Æv×.m$2^0$¸ïíÆy°’ø`*ÔSA à¹ßç{†ä7ò{-@aü°ÆêÀÄýÅ"¼àXE܆‡I½Yû¼‘]ÉìóM=qÑȰMH2NÄÈ ¨=dIÐL¡ @È‹”x¥Db ³(ÒUŠ}-Do‡Gˆç%gä”<ßž|€Òö^òVjùšQè³¼$š×l&o”¸BÄŒ¤8_Ež‰‰êYMÐ9öDQ$«„ìŸ#)ýâÃÈ=ž¼ºVÁø!+öâ(q»ü´t/Ðý€ÀÓ<5—¾`©=XXÎ O$øa.@v©80I ]-ç,ªl/§r~DÅ1YåDSÉšŸ²¢ºÇòR þüçfɾc°ïôoØwÁ¥FÃsò»³¾/Q™±Nà>Gp' æižJ%|)gÿ'3EøÓûdª]’Mqï¢,õ3ßJ€D¢ø0x&×È™¿ ¼bÉpõʇ¤š¤$•ŒF8IÚ §†‰ Ç*å‰~,1{ÅT!RàZ|ÓA¢%A>Ù=líH±J7Ü`@‚Ô•W†KHꘕ``ô’çM°ÕV wš(/£ÿKoqÎcF ÿ<Âo‚È_ƒ1«ÌÚÑc{kâXy¡šyP,8b6&¹Zz>Z„€õeµ6ê j @Õ øñdËet…Zq•2qÙgêÄ$31¼\’x vöE‰C¼ÐÜPàÑ> ”yñ€’/¬vòÅg‚X÷bÈbÅE[ó5HT¸îQipLpj¥åQ9ø¨¼‰âÀÁ‡y¼©Ph#û`ú!›^U!UâVJÆZ xqïÀ_Mjd´sSøC«ß8ìé ê(çžÎ21Bxpgýó—öcWu‹†wE?Îü]Q5är€Ÿ˜ùqŸÇnã…ÁÌwO_ȵŸ’Ü,Ý?st8Eñ©´Õ0…J(áììŽ½êž ‘ɹ÷-·uã‡.…C4”µÙ7Hw|,ç6­Å`„ߴ޹›·AäÛƒ;äxÔ<ýàç÷fä0­Ä<Ì)×ÎpÃðŽÙ@Žï<¼«ØË³Ÿ÷9MÙ€æ¦M´ÜÇ“d€¶òtš:ùÏè Q_õ&IøÝ˜À Ɖ ÿ­ r\äàq–™¼&²*ÉÏC˜9UÓë/ÕC¨—ã‚/ ÿŽWÁñÁ­Á¬îvÄm›xúTÓ—›ôè1†7/še:ýcŽ1À]6¶É@á+'×½»¢•¿'‘?ià”ô˜µX€‹ŸG`À/oon—4»÷q0˜É4k©‘úz#\.Í ±Ûuø×ôç,ÑððŽ}M¶ç »"^0¼a/láп›ƒw§SUÓ³±üþ›¨Àð8Œ'•æÄUšSþH±iOà ÿ9¨£`„ùù ¿wo¯¯/®=@óû›«7BÞ¼sÔwß¾êõí/S:³â›ýðêæ ü¿ù¡‡Ç w:®G®B D×tâWG07Æ-Žm ,¤£C€|Æ÷T"eh•ÐFL’zÆôiÆ·vg‡<í«x2×ÕÝÅÿß endstream endobj 104 0 obj << /Type /XObject /Subtype /Image /Width 781 /Height 52 /BitsPerComponent 8 /Length 9476 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream ÿØÿàJFIFÿá°ExifII*JR(i‡Züÿÿ)( üÿÿ)( 0210‘ 0100 ÿÿ   4ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀ4 "ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?÷©þá® Å_êž»Ùþá® Å_Ꞁ4-â´¾ð®Ÿq#ÆMºaÔrŒ9VààÖÂ_À±¨iK0ÛŒŸZfþNƒgÉÀˆ ç5 ìŒíAìd9þT†eÇý“ ÛÝÅm\¿ß™aÛêØÉ¤Š= ¶»†ÎÞ;—Îé’³êÀfµ¶]úEÿOÿLv¸…wÊ£`êQÉÇ¿A@¨4¨®%¹ŠÞ®ey’¾§4iÆÃKÓ ²·wò¡@ªXdŸsïW¦¸•eHaS$® ¶©'ñcUÿžÿ÷üÿñ4ö…·÷Ïýòj1sb. áWÎ+°É³æ+œã=qžÕg¯üð·ÿ¿çÿ‰£¯üð·ÿ¿çÿ‰  ’\Y³É*mK†Ëó„y`; ÷œâ¢Ó>Å¥éÐÙÃ#²Æ9f»’ÇÜ’OãZÕç…¿ýÿ?üMÕç…¿ýÿ?üMEý¡mýóÿ|š?´-¿¾ï“SC4ÌÏÊc•1• ‘ƒÐƒøÊ¥ÜßÞ?Tþжþùÿ¾MÚßß?÷É«{›ûÇó£sxþtSûBÛûçþù4h[|ÿß&­îoïÎÍýãùÐ .lf1™U\ÆÛвgkzCÉæ–k«ˆŒSªË •tÜGÞ¯noïÎÍýãùÐ .lf1™U\ÆÛвgkzCÉæ¤þжþùÿ¾M[ÜßÞ?›ûÇó  s`’K""+ÊA‘„x/“ߎ*DÑìÞÎÒÞÝŸï´0-õÀæµw7÷çFæþñüèÚl|ó>ÕóŠì2lù¶ç8Ï\gµAxš>£³íÖ–÷[3³Ï€>ÜõÆG«¹¿¼:77÷ç@‘* 3g ¼1Ú° €„£hæ’o웑žÚ D?êƒÂgû¹~©¹¿¼:77÷ç@?´-¿¾ï“Gö…·÷ÏýòjÞæþñüèÜßÞ?Tþжþùÿ¾MÚßß?÷É«{›ûÇó¨^ö¤És¹è¬àÊ€"þжþùÿ¾MÚßß?÷É«{›ûÇó£sxþtSûBÛûçþù4h[|ÿß&­îoïÎÍýãùÐOí oïŸûäÑý¡mýóÿ|š·¹¿¼:77÷ç@?´-¿¾ï“Gö…·÷ÏýòjÞæþñüèÜßÞ?Tþжþùÿ¾MÚßß?÷É«{›ûÇó£sxþtSûBÛûçþù4h[|ÿß&­îoïÎÍýãùÐOí oïŸûäÑý¡mýóÿ|š·¹¿¼:77÷ç@?´-¿¾ï“Gö…·÷ÏýòjÞæþñüèÜßÞ?Tþжþùÿ¾MÚßß?÷É«{›ûÇó£sxþtSûBÛûçþù4h[|ÿß&­3°ÇÌy`:úš…î'iÌÉæHsn} ÓùÊ€#þжþùÿ¾MÚßß?÷É©qªÿÏ ûþøš1ªÿÏ ûþøš‹ûBÛûçþù4h[|ÿß&¥Æ«ÿ<-ÿïùÿâhÆ«ÿ<-ÿïùÿâh/í oïŸûäÑý¡mýóÿ|š“¯üð·ÿ¿çÿ‰§Ã3È­¼‘k®sƒÿê þ4ö…·÷Ïýòhþжþùÿ¾M[ÜßÞ?›ûÇó  ŸÚßß?÷É£ûBÛûçþù5osxþtnoï΀*h[|ÿß&í oïŸûäÕ½Íýãùѹ¿¼:©ý¡mýóÿ|š?´-¿¾ï“V÷7÷çFæþñüè§ö…·÷Ïýòhþжþùÿ¾M[ÜßÞ?›ûÇó  ŸÚßß?÷É£ûBÛûçþù5osxþtnoï΀*h[|ÿß&í oïŸûäÕ½Íýãùѹ¿¼:©ý¡mýóÿ|š?´-¿¾ï“V÷7÷çFæþñüè§ö…·÷Ïýòhþжþùÿ¾M[ÜßÞ?›ûÇó  ŸÚßß?÷É£ûBÛûçþù5/Û`ó¼Ÿ´ÇæôÙ¼gò©·7÷ç@?´-¿¾ï“Gö…·÷ÏýòjÞæþñüèÜßÞ?Tþжþùÿ¾MF—61É$‘ª¤’deÈ=øâ¯îoïÎÍýãùÐ{O§¼ÞsÆ.Ãó[iê¹ôöªðC¤X¬§Oµµ´–E#ÌŠØ/ç€3ô­Íýãùѹ¿¼:ätíÊ×Q{Û¹-&sEåÛØƒcqa“¸œcŸ~+qÛK x!`ˆcPѵÁQÇ€8ö­-Íýãùѹ¿¼:ÏI´è¤Gi" Œ2Ç‚t\ã§µE"é[µ¼¶–ï9v K’HÆ3žõ«¹¿¼:77÷ç@ÒÚh3ÇsiÖr$#ljöÊB@â¤4{¡¸´·›ÉÿUæ@Ëÿw#µw7÷çFæþñüè4¶–ÐË ‚ÌZD1 ®ORF9&šƒHŽÏì‰kÛg>JÂuÏÝÆ:Ö¦æþñüèÜßÞ?P6"s8Udòþb£3מ(k›™&eV–0B9L²ƒ×¶p*þæþñüèÜßÞ?PŠâÂÜ8…0ì]ÂGÌz“ޤúÕ Z[EðõÕµª$h°°XÑ6¨=àVöæþñüë3Äèw„õò›ŸÂ€2¼5þ¥>•ÙG÷q¾ÿRŸJì£û‚˜†Ï÷ p^*ÿTõÞÏ÷ p^*ÿTôÑØh¶Xÿô`§ëW—0ºEUd08,}3Û}ÿQYœhvý¨¿ô`§jÚˆ†Ao%¤w²n!Ï~{`úR&Óõt{aç¸,­ÃºñóA“Œûf®]J’i—#Sà¡®bc²m’’XFã‘Ê€9'ÐzŠÕ·g ã98d•”‚ó9?1“þCVÿõÂOæµxˆÁ¢>à,©#}ªA± @ -÷‡<¯iÓþCVÿõÂOæµý…ÌÞ,Ñïc‹u½¼7 +îi`›xÎNpzP·M®kH·€Çl×7W3,ðÛ½ÎO-Ø 'Ú²Œ-¤ŠM1†®—kgö!0!¤eÜ“wo9ÇcÅ;W·ÕµíocÓB\麖+s:Ÿ´D\†è¤†$ÓÖ[èZÌ·RxƒìJ·ßÚ1Ý%™rbXÌ[K}ÝÄzã Í ÏúÛþ?/ëø‘ñƒ¥´‘I¦0ÕÒílþÄ&4Œ»cîíç8ìx­MYmP]Ãqjm/låò§ƒÌ 0!°2 ô̾…¬Ëu'ˆ>Ä«}ý£ÒX—&%ŒÅ´·ÝÜA'®: Öï‡loc¼ÕuKûqm6¡2²ÛïcD@«¸Ž2pOõ¡yÿ[Áþ¿øÙ?ä+?ýp‹ÿB’¨Þkºu„æ æo4 •HÙÈúízOù Ïÿ\"ÿФ¬}CÂÖZãÝ<×1HøÜ"eÁ c<©ç~U•W4¿w¿™½IË÷­¥ä;þ­'þzÏÿ€²ñ4ÂU¤ÿÏYÿðOþ&©ÿ§ÿÏå÷ýõÿGü!üþ_ßQÿñÏÍŠìŽÎLóKðÿ"çü%ZOüõŸÿdÿâhÿ„«Iÿž³ÿà,ŸüMSÿ„#OÿŸËïûê?þ"øB4ÿùü¾ÿ¾£ÿâ(æÅvAÉ€þi~ä\ÿ„«Iÿž³ÿà,ŸüMð•i?óÖü“ÿ‰ªð„iÿóù}ÿ}GÿÄQÿFŸÿ?—ß÷ÔüEØ®È90Í/Ãü‹Ÿð•i?óÖü“ÿ‰£þ­'þzÏÿ€²ñ5Oþ?þ/¿ï¨ÿøŠ?áÓÿçòûþúÿˆ£›Ù&ù¥ø‘sþ­'þzÏÿ€²ñ4ÂU¤ÿÏYÿðOþ&©ÿ§ÿÏå÷ýõÿGü!üþ_ßQÿñsb» äÀ4¿ò.ÂU¤ÿÏYÿðOþ&øJ´Ÿùë?þÉÿÄÕ?øB4ÿùü¾ÿ¾£ÿâ(ÿ„#OÿŸËïûê?þ"ŽlWd˜æ—áþEÏøJ´Ÿùë?þÉÿÄÑÿ V“ÿ=gÿÀY?øš§ÿFŸÿ?—ß÷ÔüEð„iÿóù}ÿ}GÿÄQ͊샓üÒü?ȹÿ V“ÿ=gÿÀY?øš?á*Òç¬ÿø 'ÿTÿáÓÿçòûþúÿˆ£þ?þ/¿ï¨ÿøŠ9±]r`?š_‡ùÜx§N6ÒùÍçl;3m ±Ç%q[±ˆ-£Ë<Ý–Üœc?ZåçðUªA#Auxó%Ù0O`~N•¨o!•¼ÖûËê«•Ç®FGç[Òuýâ_#–º¢šö-µæK ÔV³\ÛbM‘I„Ú…° †ÇSøTßÚÿvoûòßáQéÊ%77G•š@ÈI#*W?˜5wˇþyûèÖ¦oí»7ýùoð£ûBîÍÿ~[ü*Ï—üò÷ѣˇþyûèÐoí»7ýùoð£ûBîÍÿ~[ü*Ï—üò÷ѣˇþyûèÐoí»7ýùoð£ûBîÍÿ~[ü*Ï—üò÷ѣˇþyûèÐoí»7ýùoð£ûBîÍÿ~[ü*Ï—üò÷ѣˇþyûèÐoí»7ýùoð£ûBîÍÿ~[ü*Ï—üò÷ѣˇþyûèÐoí»7ýùoð£ûBîÍÿ~[ü*Ï—üò÷ѣˇþyûèÐoí»7ýùoð£ûBîÍÿ~[ü*Ï—üò÷ѣˇþyûèÐoí»7ýùoð£ûBîÍÿ~[ü*Ï—üò÷ѣˇþyûèÐw‡Du9”ÌS-]Zè“€ ŒŸÍêF 0/ˆ¨­ÐI©Þ!èÖèæôí š‹ä¼¹±yt¶ƒMÔdh¬îŒÁ‹°É”0SŽO¾+CYÖ¦Óî¬ìl¬¾Ùw¼ÇKå¨U³3`àrCÉ®wOÑu¯+CÒn¬V+]4݉”‰Â…Qów ä c½h^E¬É{¤kɤfêå†âÁn°WÆ ¹Â’ ŽãƒTíý~ˆµ6tMY5­4]Z GŠh\‚c‘IV\޼޵£X¾Óntí2Szª—WW2ÝK6ávÎÜ÷ÀÀÍmSbAY‰ÿw¿õØè´­:ÌOøû½ÿ®ÃÿE¥!™÷"Ó-§xdË¡Ãyp»€}2 Šþ­'þzÏÿ€²ñ5׃ì.ndŸíq™¹TuÚ 98Ê“×'­EÿFŸÿ?—ß÷ÔüErJX›è‘èF.UÍ)\¹ÿ V“ÿ=gÿÀY?øš?á*Òç¬ÿø 'ÿTÿáÓÿçòûþúÿˆ£þ?þ/¿ï¨ÿøŠžlWdW&ù¥ø‘sþ­'þzÏÿ€²ñ4ÂU¤ÿÏYÿðOþ&©ÿ§ÿÏå÷ýõÿGü!üþ_ßQÿñsb» äÀ4¿ò.ÂU¤ÿÏYÿðOþ&øJ´Ÿùë?þÉÿÄÕ?øB4ÿùü¾ÿ¾£ÿâ(ÿ„#OÿŸËïûê?þ"ŽlWd˜æ—áþEÏøJ´Ÿùë?þÉÿÄÑÿ V“ÿ=gÿÀY?øš§ÿFŸÿ?—ß÷ÔüEð„iÿóù}ÿ}GÿÄQ͊샓üÒü?ȹÿ V“ÿ=gÿÀY?øš?á*Òç¬ÿø 'ÿTÿáÓÿçòûþúÿˆ£þ?þ/¿ï¨ÿøŠ9±]r`?š_‡ù?á*Òç¬ÿø 'ÿGü%ZOüõŸÿdÿâjŸü!üþ_ßQÿñ§ÿÏå÷ýõÿG6+²LóKðÿ"çü%ZOüõŸÿdÿâhÿ„«Iÿž³ÿà,ŸüMSÿ„#OÿŸËïûê?þ"øB4ÿùü¾ÿ¾£ÿâ(æÅvAÉ€þi~ä\ÿ„«Iÿž³ÿà,ŸüM1üCayåÛ[Ë7™4‰0:pXÉf«Â§ÿÏå÷ýõÿH|)o`ñÝÛOw,°È±Ù 0'¢ƒÓ5Q–&ë™+8à¹_,¥~ŸÕŽ”‹sÙ<Ýc|£³óÆ+>Öú4„Äþk¤xò#c¬@ç‚£ûdññ‘œgvùã?­YÓ¡Ô™¡Ã¼’IÉ áœ‘ŸÀ×QÀ;ûBîÍÿ~[ü(þЇû³ß–ÿ ³åÃÿ<‡ýôhòáÿžCþú4[ûBîÍÿ~[ü(þЇû³ß–ÿ ³åÃÿ<‡ýôhòáÿžCþú4[ûBîÍÿ~[ü(þЇû³ß–ÿ ³åÃÿ<‡ýôhòáÿžCþú4[ûBîÍÿ~[ü(þЇû³ß–ÿ ³åÃÿ<‡ýôhòáÿžCþú4[ûBîÍÿ~[ü(þЇû³ß–ÿ ³åÃÿ<‡ýôhòáÿžCþú4[ûBîÍÿ~[ü(þЇû³ß–ÿ ³åÃÿ<‡ýôhòáÿžCþú4[ûBîÍÿ~[ü(þЇû³ß–ÿ ³åÃÿ<‡ýôhòáÿžCþú4[ûBîÍÿ~[ü(þЇû³ß–ÿ ³åÃÿ<‡ýôhòáÿžCþú4[ûBIGÖ&ÿ ¯®œèwdt1åZ>\?óÈßF³õÞ4;°–•døkýJ}+²î ã|5þ¥>•ÙG÷1 Ÿîà¼Uþ©ë½Ÿîà¼Uþ©è¢²¥ÐmDdo ®»ºe[#?•K#y™4Ù]±‚v›tª–Oåi¶™»t/e".p½N?ýrR*Ã;.ìÝ\ñœâÑMߟÝ?§÷†PÉ Îq>äã§1ñÿÒLÓÜÂÖëk,B@UžB˜ zôbsŠc;.ìÝ\ñœâÑMߟÝ?§÷†Fv]Ùº¹ã9Å£›¿?ºOï €Zt‘n£¹ˆ#:+.×$;€qÐv©~×{ÿ>ÖßøßüEPgeÝ›«ž3œZ1é»óû§ôþðÈÎË»7W•ÙG÷q¾ÿRŸJì£û‚˜†Ï÷ p^*ÿTôQ@ºl¬—𵤬y=C éœíŸNù×¢ŠC ÏK™&×îlmbœÈbÌò)úaëEwÉOGÿ¿þ4y)èÿ÷ñ¿ÆŠ(òSÑÿïãJz?ýüoñ¢Š<”ôûøßãG’žÿüh¢€%=þþ7øÑä§£ÿ߯ÿ( ÉOGÿ¿þ4y)èÿ÷ñ¿ÆŠ(òSÑÿïãRÖ&þÏÑ/ïb]Ò[ÛI*‘È%T‘žzqE»ä§£ÿ߯ÿ<”ôûøßãE <”ôûøßãG’žÿüh¢€%=þþ7øÑä§£ÿ߯ÿ( ÉOGÿ¿þ4y)èÿ÷ñ¿ÆŠ(òSÑÿïãJz?ýüoñ¢Š<”ôûøßãG’žÿüh¢€)E6ýnêȯîⶆU"GÉ.Òƒžz|ƒõ«¾Jz?ýüoñ¢ŠJz?ýüoñ£ÉOGÿ¿þ4Q@ÃÉOGÿ¿þ4y)èÿ÷ñ¿ÆŠ(òSÑÿïãJz?ýüoñ¢Š<”ôûøßãG’žÿüh¢€%=þþ7øÑä§£ÿ߯ÿ(  ZÄßÙú%ýìKºK{i%@ò9ª’3ÏN*ï’žÿüh¢’žÿühòSÑÿïãP0òSÑÿïãJz?ýüoñ¢Š<”ôûøßãG’žÿüh¢€%=þþ7øÑä§£ÿ߯ÿ( ÉOGÿ¿þ4y)èÿ÷ñ¿ÆŠ(òSÑÿïãRŠmúÝÕ‘_ÝÅm ªD’]¥<ôùëE»ä§£ÿ߯ÿ<”ôûøßãE <”ôûøßãG’žÿüh¢€%=þþ7øÑä§£ÿ߯ÿ( ÉOGÿ¿þ4y)èÿ÷ñ¿ÆŠ(òSÑÿïãJz?ýüoñ¢Š<”ôûøßãTµ‰¿³ôKûØ—t–öÒJär U$gžœQE.ù)èÿ÷ñ¿Æ%=þþ7øÑE%=þþ7øÑä§£ÿ߯ÿ( ÉOGÿ¿þ4y)èÿ÷ñ¿ÆŠ(òSÑÿïãJz?ýüoñ¢Š<”ôûøßãG’žÿüh¢€%=þþ7øÑä§£ÿ߯ÿ(  QM¿[º²+û¸­¡•H‘òK´ çžŸ ýjï’žÿüh¢’žÿühòSÑÿïãP0òSÑÿïãJz?ýüoñ¢Š<”ôûøßãG’žÿüh¢€%=þþ7øÑä§£ÿ߯ÿ( ÉOGÿ¿þ4y)èÿ÷ñ¿ÆŠ(–±7ö~‰{î’ÞÚIP<ŽA*¤ŒóÓŠ»ä§£ÿ߯ÿ( DS Ž"è\2Œýò™ª:Ôcû&öâxžmÇ®3üG©úwÉE3¼5þ¥>•ÙG÷SÿÙ endstream endobj 105 0 obj << /Type /XObject /Subtype /Image /Width 251 /Height 204 /BitsPerComponent 8 /Length 11192 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream ÿØÿàJFIF``ÿÛC  !"$"$ÿÛCÿÀÌû"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?úÃÄ_ñìÿJñý8ñcEcÑnÿã^Áâ/øö¥y—Mñ?N×r`ÃÔƒüé0G™sgãéõ‹S Xê6kà/†Ib'Ë`;‚¬ÀúmÐ3!R ¯#j…ͦnÍ·P[î¨g$ý95Ýþ|æÿ¿3ÒébºÜ©oá‹{? Øèn·ªXEeÄÇç0ç†Ü…Hçû¾”Ë? ZÙi6ZÞ­o=ÕÇÚ.¯Ötk™ßÌÈ@| `ŒUíº'üùÍÿ~g©­¬ô{…&e;NpGÔ‘Eïp1φ…¾c Þ=•­¾£öË÷7.eº[!Û«–r¹ÜqìuÓûëùÖ<ÿØqLÑ}ŽY]B’É´ú¹Å3~‹ÿ@Ëïü¸ÿ wŠ7þŽÞkÖ¾'Ö´û›¸ãŽE·krp«æDÄ ’qž¤ÓµïÛërÊ·þ"ÖžÆ`¢{¸`” ¼Ž@`M\ߢÿÐ2ûÿn?Âú/ý/¿ðãü) ©â ZërÈ—zö°š|ÁV]:„KwPÚ~Màr Ôš•<^+ÕõËï&?5"³±;-ãÉÉô,ÌÇ€>ýþ—ßø qþ4%æK˜—»Éè£êO„ì+{Óûëùѽ?¾¿UþËÓ¿çÑï·ÿ?²ôßùô_ûíÿÆ–·§÷×ó£z}:«ý—¦ÿÏ¢ÿßoþ4eé¿óè¿÷ÛÿZÞŸß_Ϋj––Zž›s§^ªËmsE*nÆåa‚2='ö^›ÿ>‹ÿ}¿øÑý—¦ÿÏ¢ÿßoþ45};þŸà. …›PÕ5=g˵{8Rþde†':€ª¹$ lœµ'‡<¦è·ð^ KQ¿{[smf·“«­¬GTÂŽ»Te²pÍneé¿óè¿÷ÛÿÙzoüú/ýöÿãNïëúÕýìVV±kz}:Æñ6e®Igp÷·V7¶.Ïmwi"¬±îaóRê5û/MÿŸEÿ¾ßühþËÓçÑï·ÿC0“Â6ÖÚM¾¦kúÆš"y$–kyã2\<‡.òF‰ÉÈâµ¼9¤éú‘™`ÎbŒ³–Mï#³gf=X’IúÔÿÙzoüú/ýöÿãGö^›ÿ>‹ÿ}¿øÓkz}:͵Òl­üE{®¬ò=Õä@ÊÌ "FX€£.IÉ=ªÇö^›ÿ>‹ÿ}¿øÑý—¦ÿÏ¢ÿßoþ4†TÖ´=3U–Â[‘¬nÖî?/hÜêÙ#æ>ŸZÕÞŸß_Ϊÿeé¿óè¿÷ÛÿÙzoüú/ýöÿãGK™kz}:7§÷×óª¿Ùzoüú/ýöÿãGö^›ÿ>‹ÿ}¿øÐ­éýõüèÞŸß_Ϊÿeé¿óè¿÷ÛÿÙzoüú/ýöÿã@ø‹þ=Ÿé^Q ÿÉP±úŸæ+ÕüEÿÏô¯)Ðä¨XýOóÙ(ô¬ƒâ rÚ23Û-&üª½~ÎÞóìëÚì9£6;ôüO“¾ßOÿ^ÿèr×=¬­‹ÜK-µü+&æ €ÎŸ˜©ÎWÕ¸=ÈÁæ’;xå‚X–Hö28 ¬:z¦åF·Àûiwc¾<~[ç\œw³A#Å ÞXŠ3µ·tWã:vþ÷¾z +´jÖ2ídße+íaÈËEÁ¦ÀÔð¬±A¡Ï<Ò$q¥ÍÃ;»·$Ÿj³á¯hÞ%ÓßPЯ㾴Yž4`í.‡ ‚G#ÜdÆ©ørÒÖûóÚ^ÛCuo-ÍÂÉÈy­Á‚+•øs«i^ð§‰5 Ne´±‡Ä·Ñ–XÙ‚î¸Ø *‚z:SŽ­¯/Õ/ÔRÑ'çoÁ¿ÐéµÿøWAÕ“JÕµt·ºeFeò¤uˆ1™T¬`ž…ÈÍÿŽ|)¡jɥ꺺[Ý2£0òÖ%s…2:©XÁ= ‘šóOj6:=ÇÄÍVGþÒñHt˜|¶f¾ l±"GóŽÙÍQÔ®aðæ‘ãÏ ø„;kZÕ„ §Eå–{òlÒ±à|ÅdVÈíœÒOKù}þKÍußÐv÷’þ—Ÿ£=g_ñÏ…4-Y4½WWK{¦TfSºÄ®p¦GU+'¡r3]t*À2°Á¢¼R¹‡ÃšG<7âí­kV&–YïɳHBÇó‘[#¶s^Ýáë{‹MNµ»m×Úŧ9Ë…þµvV×õn¤)7m7ÿùô2ô"[CÓÙŽIµˆ“ÿkz}:Ê·¶šóÁ°Z[Ü5´ÓiÉL½cc‡Ó­y£|0ñ 1%<8Ä÷grOÔ˜IüÍpbkÕ¥ogO›æz˜,% 麵T-Ý^ç°oOï¯çFôþúþuãßð«üAÿ<¼5ù·ÿ£þˆ?ç—†¿6ÿã5ËõìOüøü»û/ÿAKîÿ‚{ôþúþtoOï¯ç^=ÿ ¿ÄóËÃ_›ñš?áWøƒþyxkóoþ3G×±?óáýÿðû/ÿAKîÿ‚{ôþúþtoOï¯ç^=ÿ ¿ÄóËÃ_›ñš?áWøƒþyxkóoþ3G×±?óáýÿðû/ÿAKîÿ‚{ôþúþtoOï¯ç^=ÿ ¿ÄóËÃ_›ñš?áWøƒþyxkóoþ3G×±?óáýÿðû/ÿAKîÿ‚{ôþúþtoOï¯ç^=ÿ ¿ÄóËÃ_›ñš?áWøƒþyxkóoþ3G×±?óáýÿðû/ÿAKîÿ‚{ôþúþtoOï¯ç^=ÿ ¿ÄóËÃ_›ñš?áWøƒþyxkóoþ3G×±?óáýÿðû/ÿAKîÿ‚{ôþúþtoOï¯ç^=ÿ ¿ÄóËÃ_›ñš?áWøƒþyxkóoþ3G×±?óáýÿðû/ÿAKîÿ‚{ôþúþtoOï¯ç^=ÿ ¿ÄóËÃ_›ñš?áWøƒþyxkóoþ3G×±?óáýÿðû/ÿAKîÿ‚{ôþúþtoOï¯ç^=ÿ ¿ÄóËÃ_›ñš?áWøƒþyxkóoþ3G×±?óáýÿðû/ÿAKîÿ‚z÷ˆ¿ãÙþ•å:ü• ©þb½[Ä_ñìÿJòmºüK´hÔ;€ÅW8ÉÈÀ¯YŸ>Ž÷Z•lµ·º¹a¼¶È‹+ eg$Û‡Ï^k6ŒoâMjÁóO9pAcï´yÿë×M£F×éu-ð•e[†M©pÀ(`|§{û6×þž?ð"Oþ*‘G³šüOnF<£z¸çç9#ƒÇ¹öÆö‡2_k ujÂ[h-Þ3*œ£3²Ðà!Î:dV¯öm¯ý<àDŸüUÙ¶¿ôñÿñTº%äze¤–·q]‡ûD²¬’++9`rŠG|cÚ¯ÿnXÿÏ;ÿüÏÿÄVöm¯ý<àDŸüUÙ¶¿ôñÿñT\V4?·,çÿþ çÿâ(þܱÿžwÿø/Ÿÿˆ¬ÿìÛ_úxÿÀ‰?øª?³méãÿ$ÿâ©Ý…íËùçÿ‚ùÿøŠlšå®Æò ¿’L|«ö—qì2Êú’Qþ͵ÿ§ü“ÿŠ£û6×þž?ð"Oþ*‹°±&™Zé¶¶ÎAx`HØŽ™Uÿ*±Tÿ³méãÿ$ÿâ¨þ͵ÿ§ü“ÿФ2åOû6×þž?ð"Oþ*ìÛ_úxÿÀ‰?øª¹ESþ͵ÿ§ü“ÿŠ£û6×þž?ð"Oþ*€.QTÿ³méãÿ$ÿâ¨þ͵ÿ§ü“ÿŠ  ”U?ìÛ_úxÿÀ‰?øª?³méãÿ$ÿâ¨åOû6×þž?ð"Oþ*ìÛ_úxÿÀ‰?øª¹ESþ͵ÿ§ü“ÿŠ£û6×þž?ð"Oþ*€.QTÿ³méãÿ$ÿâ¨þ͵ÿ§ü“ÿŠ  ”U?ìÛ_úxÿÀ‰?øª£¬ÆÖ k-ˆ•¥k…M¯pÄ0 ä|ǵEQóµOúGÿ þ4yÚ§ý£ÿÀ…ÿ³â/øö¥yNƒÿ%BÇ꘯Vñü{?Ò¼§Aÿ’¡cõ?ÌSd£Ñü=÷/ëíÿ’Ö¥eø{î^ÿ×Ûÿ%­JEp—>&ñߎ5é·Ÿö3—¢²4÷ŠÊ¼{Y@Q’¹¹8®î¼§âMæ§®µþ„t˜ÓÌ) ëèÚŒ“[Áxö[”f¬®ãµ pèv·~*·‹_}ÏKÔõ;ˆ6 ¹-"C¶þW{3/8ç “ŽÔ]øª-~ßJ¾Ò5[Xîgû=½óÇ·–B rÃ88Ê‘YZ^“â-7X¹Õ4'°¼°ÕÄÜ.¥æÛϬj…€ØI%T¬ƒ‘XkðóWÿ„¢ÛPš 'YþÐ:£Í'Û^-ÌD%J€qN6æIí×ðÿƒb[|­õÿ€ÿ¯êæ·‡üSýŸ¦k:¤——ÒŸ\YYÁï–C»ä p<“]/†uû]v+¯*ÚîÎæÒo&æÖéËà0ÎÒAAƒšâõ‡š…õô6“r«®¶­eÒ3Å0pCÅ2ãÉÁ\ö8®¯Àú/ö.4o¢hšD²Ë¹¢Ò²c`’QI={Qµì¿%ÿúÝËâÓ»üßü ¢Š) (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+7]%û o»i»LኞÜsZUç_´Už£¨|/º±Ò,ZúúâêÞ8`‡ÞLª:0:äð1“Ò3Ñ5Híl康yU¡C! +8`H “ØV«®½ü–Â`˜äŸPõªþѵo ü ¶ÑuËß¶j6š|«4¡‹ÌÔ(!AôZÃñt»|Ct¹é³ÿ@Z#¼ñü{?Ò¼§Aÿ’¡cõ?ÌW«x‹þ=Ÿé^Q¡>'ÙÓ'ùŠlHô}Ëßúû䵩Y~ ¥é?éoü–µ)Q^_­ø‡Pÿ…ƒ­éSx£ZÒímÛìÑiú:Ý‚] bÍäHG8ÆHïG[´¹êWs㑦ø¶ÏÃ×±éÓ-ÅÂÚ¤±jh÷AÊä4–áPHÆA8Èâ±´¯ÉáÝ/T”Û¥Ô·~)º´ˆÜÝyÆI$†Ú>\Iš×úóKõÓúòoô=BŠãéÛ‚3žzô®EŸS¸±jÖXÜ– à É@ìw_åBÕ\/­¿®åÚ(¢ÂŠ( Š( Š( Š( Š( ²üBv¥‘ÿ§´þMZ•â£"ÛZR7µ¦ä(§ƒÔ€qùPíj_øê_õé/þ€kÎ|s.ßÞ.zlÿл«„Ô/!kYã³¶‚A¶fŽå¤bÔŠGÏéUu_ iZ–¡-íÄÒ‰$Æà¬¸àéíCmø‹þ=Ÿé^O£"Ëñ.Ò'G ¬=A õdzý+Êtù*?SüÅ6J=ÃG ‘Ä›nß$ãëZÕ—áï¹{ÿ_oü–µ)ÄÙÿji~0×õXü/®Þ&¢Ð¢ùmdªJT0-r†ÎyU#¸®ÚŠ`yý·Ã먵iZtèucª­»éàÜy…™Š4ÁðFXÿ 8ÀÏ <%ªZÛêÖÚn·f¶úûÝ´Wš`¸Uóp'1Óšì(¤´Vþº’·þºÿ›8H>µ–•¢E¥ëFßQÒË̶‹$N’¶çŒÅ¸a3 0ÛÍuúcËá÷Òµ™`¿3Dñ\´py)"¶A2qÁÇSZtSz¦˜-5G# økÄZJÛX-Öm„H'Ó”ÎÑ”8Ž3³5WMðͳi¶ { J¹6V&Ô,”“¼»¾uRxAàdœWqEw¸¬­c‰›À’¼6úÛÁ1ÕŽ­a/ÙƒY˜êÜâD9#/¯zsøíšN·¯¬Iw©kYšò(B/+ ‘äà)䜒y®ÒŠ]-ýtÿ$>·þ»œ ç€uMMu9uŸÃsu}omn%‡Nò•|Á•óI$Ž£é]õS¾–‚Š(¤0¢Š(¢Š(¢Š(¢Š(¢Š(¬,-kh·|£v›·6CÞ¶+ñõíÖ¤Û]YYÛ‘{ EG½™¶Œ±æÉ8<N×v/ýŸBô¶ÿ¿çÿŠ£ìú¥·ýÿ?üUWð—ˆçÖ…ýµå›éúŽqä]ÛyÞj©*Y\¹JAÀ=x­Ýïýöüè°\ƒÄ_ñìÿJòþJ…Ôÿ1^­â/øö¥yNƒÿ%BÇ꘡‰áï¹{ÿ_oü–³µ/øgK×o´mWQK ›;5¼sqò#Äs’‡øˆÇ sÏ­}Ëßúû䵉<+áßKg.»£Úêe'™nf\ì?Ô ©È8Š3¼y¬x†å¼Mx.4ý.XÊiš{|¬ñ’Ÿ0þó`m_á^¹'Ž[ñ&«¢ë:»¶—íÈiËk˳CmbŒç'Î+Ò뉸ðŒú®­âíKhíìµc3[j&IOÃËýÛ@¡29oðx´Õ¯¨#žñÆ¿âxt}sBÔ§°MFÞ;«k»’$d’ä!VRä‚ œá¹µlø¯ÅZJÒ'–Â}RûΑî¡Ó.e†(£Ûÿ,#g‘˜–;€ê}mëþÒu»«û‹Ù.·_YGg Ž@¡9 ŠëÆC†lç$p8¨n¼Õµ—Ÿ¯ko¨YHïo©yÑ‹”dá6  ž”tµþ»ÌOx§SMÊÒÊÇNÔ5 .Òg¾´ŸËÄäd£€à‚7r=ê}OÄ^1¶¿˜šhPÅ$±M¡îKEæ0W„îU»fºH<7ßi׎¡yu¥¬Ë³º—Í1|(ã®n]êÞ0ñ5Õþ£«Xiº‡ÙÑc´¹Rí-®`°ç#‚§‡åý?ë ãæX‡ÄúÞµâ-6Ë@þͶ³¹ÒbÕ${ÈG*ÔŽç?JÇ?u‰õɾÁ§ ‹u3bm“M»yö<¢u_%prvœð:ƒÅw6~ÓìõÄÕ­„‘I‚Ø$*G”±+nÎ{uéÚ¨ÛxBÞÏZ—QÓµ^Æ)î~Õ=Œ3'ÙåòĆBÃwp¬3ONeÛ_ÏOÃúêMŸ}?-+᜚õÅî¹-Æ¡k.ššÍäiÂí:‘&Û´woã]Õ`i>·ÒõÛ½NËSÔ£Šîgž["s+¹ÀÛ¸Œãv3Ú·ét^ˆ}_« (¢ÂŠ( Š( Š( Š( Š( Š( ¸ŸŒò\Áá{«K BkmZÆà[[F^Iwä(’p¦»jã¾/ë²xgÁç\ŠÝn^Öê"fÚsmëÿ F'ü@‘j:hÞ"²¸Õ®QÒ×ûòCqÆw2Å·qÁ'‘Ínè~6Š]Æ][J×­õ¶®âÃ÷¥#”¨Þ«û³ÀlÉúšòñûAjþe«_ü oþ&—þPÿ¡j×ÿ›ÿ‰§pH÷Ÿdzý+Êtù*?SüÅz·ˆ¿ãÙþ•å:ü• ©þb†$z?‡¾åïý}¿òZÔ¬¿}Ëßúû䵩H ¢ŠñøÖûVð•Ö¸-íí \Â}“1˜¹`è3ƒ¹AÆ =(nÃJç·Q^FÚ¿Œ —Kðµ¥Þ£suk¢Csqw§Gm;Ï# “pê ¼•ä“Ôw¿¨ë~/³m.ÿÄ“^è:oØ¢7’ØÚÃp‘Üî"A6C²&6à¯'&ªÚÛÎߟù¥§Ëü¿ÌôÚjº3²+©eûÀGÖ¼»Ä~#ñï‰õË/ A¨°ÒLQÁ´¯ÎчýóJáœàlg$ñZ¶Ô.¾$xžôêWV*’Ù´ö(‘2HM²ðÌÊX`ñò°éJ*ú»‡ERQEQEQEQEQEQEQEQEW›þÒ?òJoëæßÿF­zEyÇíÿ$®óþ¾mÿôbÐÀùyE;´Ts÷ˆ¿ãÙþ•å:ü• ©þb½[Ä_ñìÿJòþJ…Ôÿ1Z2Qèþû—¿õöÿÉkR²ü=÷/ëíÿ’Ö¥"‚¹9<;®¦±ªêz–ö‘U˜M¤Ï)xÔEoô ¤…8$*çÒºÊÍÔµýM¼ŽÏQÖôÛ;™) ÅÒFíŸEb £}Ä´ðˆÚ6e©ÛG,ú|m3ÙÉqlQ ±H•¤ Œ ¥ÈãŒÍKÁžÔ^{iq2ÃD±Ùü¦Dû¡Ð>×ÿžõÐÕ{{ÛK‹«›X.#’{R¢xÕ²c,2ôÈæ˜Œ_ÂÕu!©]ÙH.öi`¹–ê:òÙwèÙ©n<1¢MâךÒEÔT(2Çq$aöçnõV øÏ­BöÏOµk»û»{Kt 4³ÈNIã’@«‘‘BÓ` *Û«[+Y.ïna¶·ˆn’Yœ" õ$ðJ AE!‹ECowkq,ñ[ÜÃ4–ïą̊áŒm€v°8=ˆ©¨¢³¯u‹K=kOÒ%}£P˜v®W€['·QZ4À(¢Š@QET÷––’^_]AkmÌ“M DAêXð*¶‘­èÚ»i½† ï›[””/×i8  (¬ĺ6³}qg¦\Ëpö僸¶DJ¤,…B1”š×¢ŠÏñ¯i¡i2êwÞg‘"·–¹l³}XP…^ÞöÒâêâÖ ˆäžØ¨ž5l˜Ë €}29«+Î?hÿù%w¿õóoÿ£½¼ãöÿ’U{ÿ_6ÿú1i=†|ÀM&h#4›}ë ŽÇÜ~"ÿgúW”è?òT,~§ùŠõodzý+Êtù*?SüÅt²èþû—¿õöÿÉkR²ü=÷/ëíÿ’Ö¥"‚¼ÇűÁámS_ñT2èz­´Å%Ôl/6‹„(qœõ/^„f½:²î|9áë­HjW:—=ð!…Ì–‘´ Ž‡qýhëpèy†¿âmwÅší¾›¨ ²Ž§‰u§²+ÆHЈØL ãŽ1ÇZÜ𭼟¼Iq¨ßO¡–l!†úHâ›u˜Ãd2JíµM DÕgŠ}SFÓ¯¥‡ýSÜÛ$Œø,? }Τ\êPêwUŒ×Ð Cs%º4±ÿºÄd~œ]‰jûœ7ÄÙWZñ%†E¿Öl-àkÝFÞÏËÎX2BÌtÎö뜪ñYö7zþ³ðúÂÍ.§¶Ô´‹ãi©Ú½÷Øî.V58Q*“µŠ˜ßƒƒÈÎ9¯PŠÒÖ+©®â¶†;‰Â‰¥XÀy6Œ.ãÔã'éTïü= joÛô=2ïÎI/Ÿh½ÀÚ²9 q“Ú’Ñ[ú½ÿËBž®ÿÖßç©…¦ |-šÚÈÞù¶s[¶Je™XnC¹òwÀó“œWŸØkº†«o¤øÍ%™m|+ooo}Î$yÛ¼Žûaúƒ^×ko­¼vÖ°E®ÔŽ4 ª=PŦi°ÚOgŸiµÃ;O ¡%/÷‹.0Ä÷ÏZw´œ—õ¿á«´Iÿ_Õ‘åv—w+á;@_Ï¦Úø£ÄrMwyìxíܸˆþ Â8×wmÜQ«êz…†‡ã=3L×oî¬ì&³K[Öºi&‰¥eÄ&ÎN’H݌ת¾§¾š4ǰµkìÆ1lf1lTPèº<:gö\:M„vì«n‚,ç9ÙŒuôëB²Ó§é¦Ÿ‡ã÷šÞÿÖíþ§™üI‡SðÞ©á¡áß·jQÅ|Áîg{©‘J&÷_1²åFHLŒ‘йâ!#xwBÔ´sPÔô8-$šå#ÖÚîè”IX¯Í˜ÉQÎ;^“-¥¬·PÝKm Ïa ¬€¼{†iê3ŽqÖ³®|/ᛨãŽçúDɳƲYFÁŽY€#‚O$÷4íýyÿ_Ò³_×õý~wá¯.ìµÿXÅ'ˆõm7J“ñÞÛyz‹Û1fsó¾n`¸Î슥ˆ5 oÂÞÓî ìú­ô7%Äz³é«$q>Á#:X°*ÁB‘É=+·Ô¼¤ê~+Ö§ic}X-¤v—‹"¡X8-:ãük_SÑtmRÚ;]OI°¾‚/õq\[$ˆœc€ÀMê¾ÿÍÿÀþ¶KG÷~Kþõ¿˜húΣ­i>°Öµ»»mBÞå®® ¹0Éq,L#óFÈÜÇ-¶¥ñdÚ´¾/¶ðÞ©LlaÒVkg}~K7šBì¬æUGiJ€¿)8ç'9¯I›CÑgÒ“J›HÓäÓÓ-^Ù +Ž˜B0?*Žïþ»°‚ÂëBÒç³·ÿQo-¤m_î©…ÕßÏüÿ Z/ëúÔã~ .¤Ÿ']jâ ›õµ€\M nIÌL°8Ï^‚›ã6ÓÆ~o­£k¢íŒÂ×nógå·˜$Ûü9ÛŒ÷Æ+±×ô(5mi pö6ƒ ÑÁo£ RXÝ6ô<²¼;àˆt…“LÖïmâÞX!±°…&ýÖòí”àû}¦ÝÝüî HØâ~Üx³X¹Ò5ÇÔâ>t²hÇ.¶òo\01­©Œ,L‡Ãgå9'9©<&l¼?ðvfIuy¤½ßÊMRXÑZIÊ)B[l#$e” צšhqj­«E£iɨ¶w]­ª Žx9|gõ©†™¦0éƒO´J›o%|¢ É1Œ~›ÒËúò§¶«¯ØxgƳ_]Ãý™uc,Lº¤—onÈÒ<…b¸zGJµñCS77~"†-@Íc™§J¨³n‰XÞ°À$“èzv›¡hše¬Öºn§Y[Ïþº+{d$ã0PãÖ£²ðׇ,mî-¬´ *Ú •Ûàñü{?Ò¼§Aÿ’¡cõ?ÌW«x‹þ=Ÿé^S ÿÉP±úŸæ+©˜£Ñü?Ÿ.ûíoÎ3ÙkGl¿óÙ?ïÑÿâ«;Ãßr÷þ¾ßù-jR(fÙç²ߣÿÅQ¶_ùìŸ÷èÿñTú(›eÿžÉÿ~ÿFÙç²ߣÿÅSè m—þ{'ýú?üUeÿžÉÿ~ÿO¢€¶_ùìŸ÷èÿñTm—þ{'ýú?üU>ŠfÙç²ߣÿÅQ¶_ùìŸ÷èÿñTú(›eÿžÉÿ~ÿFÙç²ߣÿÅSè m—þ{'ýú?üUeÿžÉÿ~ÿO¢€¶_ùìŸ÷èÿñTm—þ{'ýú?üU>ŠfÙç²ߣÿÅQ¶_ùìŸ÷èÿñTú(›eÿžÉÿ~ÿFÙç²ߣÿÅSè m—þ{'ýú?üUeÿžÉÿ~ÿO¢€¶_ùìŸ÷èÿñTm—þ{'ýú?üU>ŠfÙç²ߣÿÅWþѹÿ…Uy’ ûE¾qÿ]½¼ãöãá]çý|ÛÿèŤö|ÇEdfŒVV.çÛÞ"ÿgúW”è?òT,~§ùŠõodzý+Êtù*?SüÅnÌ‘èþû—¿õöÿÉkR²ü=÷/ëíÿ’Ö¥"‚¸‰ïè¯Äó.Ü’’Fl|»¸óÅA࿈¶Þ!×aÒ^ßOŠK›f¹·6š¤wd#)(@<·ÃŽGž)öÞ{OS¿×õ;k×Ô4÷°™lì tc’Ïó±wçŠÕ𖇬èåb¿×mµ+X¡Bž!”c.áÈcŽsÖ…këýoÿú[Á::(¢ÂŠ( Š( Š( Š( Š( Š( Š( Š( ¼ãö8øWxéæßÿF-z=ywíKÿ$oRÿ¯‹oý´=€ùµ[#¥}ë‘GÁw©¼ßöZÎÁsôÄ_ñìÿJòþJ…Ôÿ1^­â/øö¥yNƒÿ%BÇ꘭Y(ìÛR¿Ònn­ãÑ.¯w»Î­¨ÈùF9ïÒ³ô_j:¤òD¾ñ §–¹w»ˆD¡³÷A?xû®G½vgþ?Sþ¸¿þ„•Ã|sñ¦©à_ ZêúE½œóÍ~–Ì·HÌ¡Lr1 +)ÎPwõ¤Š4"ñÔº½Î–¾¾óíàŠwÌ‹²4Џ÷ÌMúW}û@è–w³ÚMáoÌ‚Fñåc*p‹Ú¦ýŸƒÿ†Šðÿý :çþBÿâéíáðqÿλÿ¿øºùøQÜP>‚ÿ†ŠÐ?èY×?òÿAý¢¼?ÿBιÿ¿øºðHÔÏ´V€æY×?òÿKÿ  г®ä/þ.¾OëJýhb¹ïÿðÑý :çþBÿâèÿ†ˆÐ?èY×?òÿ^(¤‚ç¿ÿÃDèô,ëŸù ÿ‹£þ'@Á?ðŒëŸù ÿ‹¯ŸÚžŸñí'Ðÿ*»s¸ý¥ü5«øg^ÜÃ#/þ.¦öðì´«áwjç?ê¿øºù§Sÿ\?Üþ¦µ|=ÿ k÷ÛÿA4;ü¿´Ÿ†Ê×°:ñÿ\Åš¼u Yhšµ¤óI¬“ˆö|Žƒ†' =«Ì#ÿwü•%¯ú–úÔ0±’’r>^þµ.ÿjм)*DÿÙ endstream endobj 118 0 obj << /Length 2731 /Filter /FlateDecode >> stream xÚYݓ۶¿¿‚o¥fN0¾IúͱïRg¦Mb_Óé¤y€$êÄZ"’òÙÿ}w±)J¼³Ûñx. öë·»¸?‘<Âÿ“:áðÏ3<˳$׆qms´e²M~½á°‘'?Þüðpóê^Ê$cEÆEò°Mò‚ #’ÌfL«äa“üžÖÕQ.þxø vª¤`…•w àn4°ñ›þæê“Û/–2Ïr•¾ýë›_î>À§á©f‹¥±<ýpw÷áîïoïÙÍÝÃÍŸ7Â_TŒ§*fµNÖ‡›ßÿàÉÖ~J8SEž<ù‡DÉl¿Û'oFIžã EÁta“L¦”Áþ¼ /üú8ó yÎIƒ2Ò^½?H‘¼kàÄ_¯x/óåwÒì¹¾¤5ÌÈ"±¹bçÕv_=žÚ2êI½^,•àéÃ.Ž®ª{š®\ëõö-ãú÷2c¹R‰ÑœY¡‚ðRd$Þ8ó Ö*ÞØséå³ÒGöË3þ×âƒ}Y¡òÄðœeJ͉¯ƒø?Ëšh›Êí›ÇY¹“¥–,·2Y*É8à\½&ý Œ¸N 2ÇÙ¶i®ïnñ€,­z¢nJ8iÓÑÇ®YH“>ÑÇ׿ÔŸ?‘qÆmþ¹ÈÈ÷.ê7í\‡{@Oy^^À4Êõ««2ʺnês.Q!6ùÕ½Ògì—æÒИÄçýÁ=EVõ%i.xL®h0ªâ vè@r úîŽ{÷5|9šº\¤¯ît8¸ökXÚÒØïâj¹$agÚš©¬ûrÝ—›pI¼ïmðòý©£™£a¾.ò4 ÔïN‡Uíª=#Þ(¸›ÖÑî1\À-$O?£Jð!?w´¶Ì E¤·~é[GŸÛÒõ`×sÆ·àÞù€xïëu[ÊÚûR–¢íöQzô«mßoq‡rÎ[`ªTä:Š˜ ú¹ÞRt«'"=‰àê ª³!Ý;?LVM¿£]I6À8³^nÛ—í¨]9½9èFi3Õíµ~dά•ߎ ÃmÜôTí÷ÄÛõ}y8âÍ5¸Sˆ› ¼µÎW¼Ã!$Zˆ´ [É$ŠÎ˜€h½²‚OH*½GIš~§tðw8îÑ-•±iµ¥ÀšL} )¨e♞´vû=ÜeÆ}rã}"ˆ¾…0ç\°Ï3JRŠI™Å·$ŒÕ噺°Œ·\7*1Ù·ÌdrˆÌâÛf²ã ‚™àã©§CÂiù¹WŸŸ’Y&G„!aå¼°–eÃFHwÍ(ÅRÁ™P‚Vúǹ¿Ÿ­š/ c3Oß<.À™ªñˆð¶ÄñÔ•ÛÓ>ж4z³ãö§…²Þ_‡Oõ·Eˆº€ʺ²­Ê€n-#öuŒtÐ. ókˆP°ãÛ"Ä<,,–‚s~ŽïGŽÍºìºª~$ÚSUo¼çÓŒ†©”Lò"éÊ04éBúëfli‘•ø–Ç@‰iûËÂ^ëƒCÄÂY„àHí™°DølMDAˆ.õTãé•‚| @ç~ P爊űۼõšöSwtkÙº÷å¶_î@Ÿ²™±6.æTeŽò<@Ö®¦ Ü„ GÀziÞ¥a÷S[õeØêúæ@óM‰þ[W}ÕÔí„rer~ðúÑq'R!ICÞ•s±˜s&Gàù­*ÑWŸæS‘ÑCuój<˜ÑûŸ Å=~‚°ÃM2™¾›t}LÕ¾ü î-B`zC ,cðçÚ­wÑl2/‚=pæÕSë#¡ošý',÷ðcÕGÈDÂó*@0×ß§³¢Ð/ëÌšAÚ‡…FáVß×u1ñ¸ªW½>S‚G3 YäÅ„ÖÓºá]ë Æ ÇÃ:g^?\èPm6ˆœH<4ƒ4]¡´§¾oê°¿¡±[· ¦üé`£™‚áÂ=U‘]ø2Øz×6GZv4 ™æx8Ž>|Š˜rÕ„ûLœ®ÜúÓcÛœ¼ƒ€¢·-ÆB¯í=ä ˜CçàÔ¢2i›‡vĈÆ6ýÎõ´F?dÔ+@a6s‚¡‚·®÷Õú¼\0’<0¹ÔF nÂ=$ª™ó î;Å\€&ò9èx,¡”6PÿŸÞQI5T¢  "¥ÖQqZ㳩_Ê„žkÕ³Ícà¿<;àºwTÐâœÚ Èbb®u4s»¶,ú{ò–¾Ê[†Ç¼vL¾s‰×»õK¾lá^ ã[W­lDSlKμúÙÞM2•™ö "ÞuB(lCç¸÷ˆ$_^!Ñ¡+{úöµ‰']ëúÚx?sQ@÷nÕaø‚Ì&® €ê]ò—£¶=fÀG< aC¬»„Ìæ<û—Žî/Ç¡Î(Õ:†“ë'{$^µ†H÷ õ™±.cã;¡•€[«"½Ë¿õìCÛ†¬8½ñ‹$ÔÑVeÿTRe§æñÏJPë‹ã¯Ýl‰Z”…&D*tÈn`´MÙ}êAÏWGñËÑÎAF¤M.¦ÔZ¥ÿèÊùŠøˆÿkÝ»/sA&™Ÿᮂ½ó9K›¡£ÀË"Ûñ²øÕ–Û²-ë5Ìø=¨PBL~÷Ò»H!˜h‚Ý,ã6æÛB¢A_ˆ' ¨¢.ÞBDŠAèºÎ_EDHCH^ŸÚÖ7Ûž ghžú”ÀáÔÐw5rŠŒ|qXm¨AU~^t6¡Z7ûÓ¡ÞÔøî_§Íê?ÐøâÓ®ZïhZº8[•»iŸ Dô®lçœk_ ¡ÏѬ{ ~*©ð ëäð0Y…|™BGmˆä†´-ö¶ÙGa¯jiPË}ÅŠ ¼a¶õï—]Ux7¢¢Ÿ¡ì¿÷¥Ì{DF¿³aUÆ—UÒóKhñÁE~ÆjS«,þÐÏÑkpôÞá£wŒ;C‘f€[–_v5žTq$F0Náã8ÃãÔa²ÇÉâø1¸‰ßÒÎVI€¡¨?_Ã|„„†¯W‚Z"é”ã§jÉó±ªz*›„–ö4Ÿ@€àh€[/çõ¢H;Âƈ5±¶²Ý€4Æ—Õƒ—ʨôc¬Ùʵ…ÕLçÃS—‚ rèo ¹f‚¸7uˆG›³BdÓ+‡änô?»Û}µïœw›ªÓßè3åÓ‹^Ç™ÎL¼-4 µ‰u÷ +ËFÆ3çÿb#³‚©`ôÑ« ýZâõáÌMH»|L!9(ÎfSÔºÊo`×g¤´KïùùEæAËçÊŸ„k¡ÎÆý¬hºšõ¢àÜnJabw,ÌUÏ/e¸ ¬Êñmùrkø9bÌ3o=ÚæP"¹ÖGŸ¥FÝO.ê/$a :b­T€7“ýlþŒýDžyŸ ÆAW™±à2n›+ýs4®ÂóØ-5ÃØGý\Ô¤M¡VéæâÚE:Ô„Ñ4³MÀFïÞ¡p¸ìy³ãKÂ7ž΋ ¤þ#¡ <ÝAÞ¤ÏÜmðÈ£ÏÒL@|°c1?mDo/ÒÊð Wöñ!øIlš®†z …fSN 4€þ!Däáåí]¹.+ïÛMDæ/¬¡†ÊF\Å„4cÿÿár- endstream endobj 110 0 obj << /Type /XObject /Subtype /Image /Width 880 /Height 52 /BitsPerComponent 8 /Length 11114 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream ÿØÿàJFIFÿá°ExifII*JR(i‡Züÿÿ)( üÿÿ)( 0210‘ 0100 ÿÿ p 4ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀ4p"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?öíGýSWaÿ#…¿×úŠíµõM\Ešïñl ’7ddu(²–9–s4²…ds€pI u=©»¯çÖßÿÿˆ¦I ¼L§¹ÜFp'ò™‹oùë{ÿ|·ÿHdÛ¯çÖßÿÿˆ¥Š)š>}ŠBìDF,r@É8»T¶ÿž·¿÷Ëñ5"[Á"o[‰Ê÷>gO¯4Iql-æc,[l‘ ““ÈaÞŸæ_ÿÏÅ·þ·ÿU…¼Dd=á¡ñÚ>Í÷¯¿ï–ÿâhÏ™ÿ?ßøßü]eÿüü[à;ñu[ìðä-Ú“Óq+ŸÌRµ´*Û|ë’Ýp­“ù@<Ëÿùø¶ÿÀvÿâé¯J›˜#¬Ã.•Wû4Þ¾ÿ¾[ÿ‰£ìÑÿzûþùoþ&€-F‹i *(U€Sª¢ÛBÊXO>\ÉŒ~”‚Þ"2ðƒÐ€H?øí\¢©ýš?ï_ß-ÿÄÑöxr–íIé¸•Ïæ(å[ìQ“5ÇýüÿëR HÈÈ’ìPOøPª*¯Ùû÷™ÿ >É@2ÜŒôËcúPª*©´Œy×$úÉþT}‘?¿wùŸð  TU_²'÷îÿ3þ HˆÏŸqúéÿÖ  TUQi]‘ê ÿ >ÈŸß»üÏøPª*¯Ù#È[‘ž™lJSg™§wó?úÔfЦ-â#!ï=ƒÿŽÑöhÿ½}ÿ|·ÿ@(ªg‡ nÔž›‰\þb•­¡VÛç\–ë…lŸÈ ·ESû4Þ¾ÿ¾[ÿ‰£ìÑÿzûþùoþ&€%ŽÒg’tŒ -´,¥„óàu̘ÇéH-â#!ï=ƒÿŽÐÊ*ŸÙ£þõ÷ýòßüMg‡p[µ'¦âW?˜  ”UF¶…[or[®² )>Í÷¯¿ï–ÿâhåOìÑÿzûþùoþ&•m¡e,'Ÿ®dÆ?J·ESñ÷„„AÿÇhû4Þ¾ÿ¾[ÿ‰  ”U?³Ã ·jOMÄ®1JÖЫmó®Ku¶Oä[¢©ýš?ï_ß-ÿÄÑöhÿ½}ÿ|·ÿ@(ª‹m )a<øs&1úR xˆÈ{ÂB ÿã´rЧöhÿ½}ÿ|·ÿGÙáÈ[µ'¦âW?˜  ”UF¶…[or[®² )>Í÷¯¿ï–ÿâhåOìÑÿzûþùoþ&œ¶±8ÊÏpGûÿýj²Ã8ö`#Q˜äKƒ<*;(VÞ›§qêj´ÑÚ[ãλ–<ôÝ(Ò¢ótßúŸûþ?€4<Ëÿùø¶ÿÀvÿâèó/ÿçâÛÿÛÿ‹¬ÿ7Mÿ ‰ÿ¿ãü(ótßúŸûþ?€4<Ëÿùø¶ÿÀvÿâèó/ÿçâÛÿÛÿ‹¬ÿ7Mÿ ‰ÿ¿ãü)Dºq8‰'þ»ð  þeÿüü[à;ñt‘FcY·;¶÷lc'§NÜ? ˆYÆFD×ÿ®Ÿýj>Åüö¸ÿ¿Ÿýj³EVûóÚãþþõ¨ûóÚãþþõ¨Í[ìQÿÏkûùÿÖ£ìQÿÏkûùÿÖ  4Uo±Gÿ=®?ïçÿZ±Gÿ=®?ïçÿZ€,ÑU¾Åüö¸ÿ¿Ÿýj>Åüö¸ÿ¿Ÿýj³EVûóÚãþþõ¨ûóÚãþþõ¨Í[ìQÿÏkûùÿÖ®wÆ^%Òü£Ã©êcR–nº­±VmÅY²w1…=ý(«¢¼sþσ¿çÓÄ÷Ä?ürø_>ÿŸOÿßÿñÊö:+/K–×VѬµH$»H.íÒáŽu 3ŒŒàúÕoxAè@$üv€.QTþÍ÷¯¿ï–ÿâhû4Þ½ÿ¾[ÿ‰  ”U?³Gýëßûå¿øš>Í÷¯ï–ÿâhåCqiÖÏ:0ûFÏOj‡ìÑÿz÷þùoþ&³Gýëïûå¿øš¹ES6ñ’÷€z@øíÙ/vi€þ”Ï7Mÿ ‰ÿ¿ãü(NŠÌótßúŸûþ?Â7Mÿ ‰ÿ¿ãü(NŠÌótßúŸûþ?Â7Mÿ ‰ÿ¿ãü(NŠÌótßúŸûþ?Â7Mÿ ‰ÿ¿ãü(NŠÌótßúŸûþ?Â7Mÿ ‰ÿ¿ãü(NŠÌótßúŸûþ?Â7Mÿ ‰ÿ¿ãü(NŠÌótßúŸûþ?Â7Mÿ ‰ÿ¿ãü(NŠÌótßúŸûþ?Â7Mÿ ‰ÿ¿ãü(NŠÌótßúŸûþ?Â7Mÿ ‰ÿ¿ãü(NŠÌótßúŸûþ?Â¥Š;k€|‹ÉŽ»eÌÌÑwþðþB»{/õcé\BŒxšèdœ0äývö_êÇÒ˜ˆµõM\M‡üŽÿ_ê+¶ÔÕ5q6ò8[ý¨ ¾ åÖyÃÏû«þ5oåÇÝý+:'Ååçýtú× ã©åþ×-­EÍÑ´S Ž Õ?k¾’ÃC’$¼§÷ƒ‚¹äCðã9 “ksjúðÑõ êBê"â+r¨XƒËC…È`FHnAèÄzö>ÁpHé0ú‘QÛH±‹¹€Éö§úšeÓ±Ò® ˜ßä6ìtÎÓU§—ÊÓ5wþèsÿ–mÑäA1ñš<ù¯a ¹$-‚xÈëúÞÞ÷V€ê‹æX!ÌqÈ#1y¸á¹û¤c¶j+ÖZ\pî˜Û `[a>Íëb¼uÏ^i­wxÃ7“‘ë—#ù ¹$î%òâEw3nm Ó±ô?•P»oôãÿnÿú4ÔWóÌn/¢¶`³ý• dã†>n:ñÔ´€Òó.ÿç¿ýþ?üMGq/›§Ýn]¯6áœà‘Ïäký0_›ÉËý9  ‰ˆò$öRJЏ€ô2 ?B¢‹ c2€níËSîN?úíþ†´£šÆñŠ4ÿ À’^w“%!‹nòSó’:Š·¨êPé¶­<¹=•«·`?Ï$ð+Îoü6þ?½ûSÏ%²«î.®Šr"ŒB[.{ž…YÚäß[k«Zk¾þÓ²bÖóBÎ…†##Ü*µf~{“ßÌÿ_ñ5J>ÓGðÛéö1ùvÐ[º¢ç=‰$û““øÕ«FÃÝÿ×oý‘*FIy¨Á`¨Ó¶7g€É5SLñ–¯+GhÌûFXã\®¿ªÚ½ü×®›Î¶·flÙ$ØW©%”¶{aj÷€4vÒ<>;³ÜÜaäf\¥DjÆRp[¡ÛK›÷xûc.8o'#×.GòKÄÞ$—ï§?ös\ÚÜÜy3Ì% ä d6ÜýšµvßéÇþÝÿôi®{ÆÒK6¯á›8^Pó)9$"1ÏNÜúrTö«ªž0±ó#ómo­íäF·Ãå¦âp2 Ü2xäVÍéÂàõÄlÃêEq~6º±‚T¤Ad ùZg[æýàÆ:… ]ƶtk›©üñXL-œÝXpÇÜŒJWmÆÅ™ùîO0üuÄÕAâM,Çæ ¥+´¿òg¶ôÛ×=ºãžœÕ‹FÃÝÿ×oý‘+{¸‰.fFãqcqæägßü\ñŸZ¡äZÝ„÷ik¬fvuQå8§^qŒsÁèyÆqM»À¼aŽÉÈõË‘ü…rº ÂoÛ DŠWÏÛ’#oñãŽ;uí]=Û§ûwÿѦîîE¥œ÷,¥„Q´…GSœU \‹\²yãP¨bpGÔƒÁéÞ©êÓùº´7Lb±’=Á»Lù?!=°8ï“é\† '¶ÔŒzlÒ¶£,í"­£• x2® õã<ÐÆ•Þ§¤_c쎑³¨Ë3óÜžþ`øêÿ‰¬k2ë>¹¹™‹:¬‰¸õ8^þüÖ°šXmµ‚1,ÈÄÇ8ÜÂ5 gÜÐÕÇ(¸¶™¥â8tÍfÏO–?øø*<ÍÄ`± qŒu^äus[[«…½K[Ý&+¹nb‘ÚQ%ÙvªeÇðã8Ço痡뺞¯c Kw%…ìÅ 7.X²ð8É'Œ‚©7`Œy´;Û¼ ÆἜ\¹ÈUGR´Òld½¾™a¶‹ä`p2p:{š©vßéÇþÝÿôi«w1AuŠxÖHÉk Œƒ‘úŠb9ßøY~ *j,Â3 òßäÿ/Ñ]H’é³H¤2ùEÔ¦A¯"ð”³übñ|3G°\. lW ŒwW¬ÝlJ¹D*ÀÀÛå4&ìÏÏr{ù€ã«þ&§–háŒÉ#„EêÌpU´l=ßývÿÙ¸OR[}fîëS·{·†Q¼QÂdhò~]‹êTäŸn£Qp= d ŽþµNL ù@ã1£®XAXÔþçR‘¥i.|¸[øv\ã×æÜ öö­×9Ôeÿ®1ÿèO@ ¦¢=Õó²©a(PHä  ãõ5=¥þ›~Ò­Ý¥ËDvÈ!‘\¡ô8éXz¯Ú?áñ/ÙwyþT›6õÏ”:{Ö]”ºU¿ˆ|=6™%´vé¥J×/P« ´¹íóg¯½5«·õ×ü„ÿ¯ÃüÎÂòûNÓ‚ë«[Q!Ú†y7Až¦‹Ëý7OXÚöîÒÙd8C4Š Éæ¹‹ÇÓfñ­Ôš›Û=£hêÖí1 o0©TŠâbpyc6^]ûCÿÈaÿaHÿôT´óEQLGÙÞÿ’{áz>È¡D®¢îúÖÂ:òæxÆù¤¹úšå¼ qð÷Ãõãcÿ ÇWµû»¿Ó®b½µ‚òØÈaŠé7¤€€Ër8ätϽ!›V·¶·ÐùÖ—0ÜEœo‰Ã®~¢§ÍpÇ^Ú\X=¢­ßÛ–×vŸrbŽW+»>`^ääÍQ—RÔ`Ñ|Mgö¹#’Í¡ò.Úwˆ¾2<Âúg÷ÛúÛüÅäz>hÍrKq§ë gg©N‚ëN™Ì—S´‹ªT+üÄíûÇ `{S¼=sömM¬.–ð^4—¿k¨A°ÉÊœž˜-¯_òëúûΖîþÓOˆK{u´dã|Òú“DÚ…½ ºšêíˆLòBC“Åfx“ìòxwP3$lVÚR…À8;L÷ªÖ÷Úm¯„´ûCÊx¢·‹hewíÞçÒèþCìoZÞÚßÂ&³¹†â"p¿˜ª‘q €pÜ`ŠÎðå£Gs©Kvò_º¿Ùc ˆ•Fìq¼õ?—jЄæ묿úSbDÚDiý“jÛsÆŽ:’2M]ØŸÜ_ʪéò³ÿ®+üªå7bq*6'÷ò§Q@ ØŸÜ_ʉýÅü©ÔPv'÷ò£bq*u݉ýÅü¨ØŸÜ_ÊE7bq*6'÷ò§Q@ ØŸÜ_ʉýÅü©ÔPv'÷ò£bq*u݉ýÅü¨ØŸÜ_ÊE7bq*¥}%ŤСY¤d$£c~`~U~©jël¿ë¹ÿÑo@WüÍïä+¶²ÿV>•ÄÿÌÑwþðþB»k/õcé@j?ꚸ›ù-þ¿ÔWm¨ÿªjâ,Ûo‹`lÆNSÒ€:Pؾ¾çÌSm‹Yú5ÝÖ¤omõ{›WòÄacŽç8ž¼õ­¹ãŽåƒÉeu¼ nMÈqéEEö8?çÓPÿ¿ÒÿñT†b&v÷¶“ÞëWwkk!–8äH•w+Ÿ•èǽlïi²6©¶ö“úißcƒþ}5ûý/ÿSÄ )a?–ÙÜ »=rO_Æ€.³ÕHl-mîæº†Ú8çœæWUÁsÓ'Ö¢ò—µ¾ ¢Ë ðÝG”?熣ÿåÿâ¨ÍóãMºÉëîHÀ0GÂj6Ò ¤µ×<•1¨ÿ‰cEusizåN@‘ÝÀ>¸$ŒÓåÄϽ¬îƒã“rzd@-¾±Û¡hÊ8 %›?R²OÐ •ôòÆo®à’$u“dífS‘’]¸Æ: ”?熣ÿåÿâ¨ò‡üðÔïü¿üU:ê@nälŒ'ÙƒOÞ’B -å¥ÃÝ}¦Òx┠ı”G”äd÷îic+-ØÏ±³¸2»=rO_Æ£ò—µ¾ ¢Ë ðÝ@ýŸXÿŸÍ;ÿ_ÿT†ÜÙé7¾d¾dÓ+³¾1¹ÊíÃ…{w£ÊóÃQÿ¿òÿñT«+«›K×*rŽîõÁ$f€.ÎpŠO:èB‡Pà« ƒÔTFáØlç õ*=ǵµèö ãúÐË ,^X_ö¦´i¤ªƒh(Ýú’*=çþ}ïï§ÿá6—mƒ‘»sùšpÍ:œŸ‘íµhHÖ5!FëÎj”¹Üm.Aé•OéI¼ÿϽïýôÿã@ÇÆ0ƒ™#4œð¾VO§ÎMG¼ÿϽïýôÿãNYJ¡Aeqƒ×(N~¾´4ˆ²)GSÔS<„õ“þþ·øÔ[kkÑìÇõ£yÿŸ{ßûéÿÆ€%uX­%Uàlldç“ÿ×4^°#DI=†õ¨ƒá6—mƒ‘»sùš{NÎ¥ZÎvR0AN¢€+êšL¬‡›d[¿vµ_8ëß·b;ÕÈ£H"H¡c`èSò—µ¾ ¢Ë ðÝG”?熣ÿåÿ⨸X³|øÓn²zÄÀ{’0çKnØšñsÏœ=¶'ø¬±¢º¹´½r§ Hîà\FiòâgÞÖwAñɹ=2  è¼/a­& êó;3:$‡rÄX–m£¶I$ÖâðU(Ï GþÿËÿÅQåùá¨ÿßùøªuÔƒír6FìÁ§ïI?¡©ëž]_RÓo–îkY¬¥f/ùj0FÖõŸÌÕèÊÇ D¶3ìlî „îÏ\“×ñ¨ü¥ío¨è²Èü7P_‹¼'‹l¬÷RÛ€hÔ†Æzÿº+bHŦ‡,³¶ÜÆ©ÛúÔ~Pÿžýÿ—ÿŠ¥XÑ]\Ú^¹S•;¸×‘š³nØšñsÏœ=¶'øO³A¿g‹Æ6™Î?>j)q3ïk; øÆä܇™T~Pÿžýÿ—ÿŠ  ‹jáÄHwÉê«u 7r6FìÁ§ïI?¡›åùá¨ÿßùøª’2±ÂÑ-Œû;ƒ!;³×$õüh[ëXoíÞÞá7Æã‘Óàö>õCHЭ´1£2M4—šc¹Ûêjo){[êz,²? ÔyCþxj?÷þ_þ*€(éZ0ðï†n¬EÁœ#+´’Ãc'ØVÅ»bkÅÏ>p8öØŸàj²ÆŠêæÒõÊœ#»€}pI§Ë‰Ÿ{YÝÆ7&ä8ôÈ"’VÐm¶îʆ¬u+Ô¹—Ì_˜4‘£a%#¦áßç §j: ßêZMÚÍä:FqL‡uã «>Pÿžýÿ—ÿŠ£ÊóÃQÿ¿òÿñTÚ¸&Ö¨uÔ€ÝÈÙO³>Ÿ½$þ„¼ÌsTã+-ØÏ±³¸2»=rO_Æ£ò—µ¾ ¢Ë ðÝ@Š–~Ðôý@_ÙéVÐ] âHã yëÓêkRùñ¦Ýdõ‰€÷$`ΫyCþxj?÷þ_þ*•cEusizåN@‘ÝÀ>¸$ŒÐ›vÄ׋ž|àqí±?ÀÖ,¾Ò.®æ¸½·7¯,†Aöœ8Œž»xã°ú:Z’âgÞÖwAñɹ=2¨ü¡ÿ<5ûÿ/ÿ@-- ±!¶…"T`NFݨώqj}Ž\ãò#óª¾Pÿžýÿ—ÿŠ©¡!6Gep9$©$ŸRO$Ж—Z\^ ™£‡Ì2yŒpÚ÷› ~·K„4¨’ã>z D¹ë»{¯zwÚ¤òëqÿ|Qö¹çÖçþø4\¯‡¯!†¥ÒçŠyI(–—÷Åj“þ}.?EVûTŸóéqÿ|Qö©?çÒãþø  4UoµIÿ>—÷Åj“þ}.?EVûTŸóéqÿ|Qö©?çÒãþø  5ä¿´?üˆöÿEK^£ö©?çÒãþø®wÆ^²ñÆ™©Å©E WáZØ*¶à¬¸;”ŒaoJøæŠú;þ…¿ç·ˆÿïä_üjøP^ÿžÞ#ÿ¿‘ñªb;ß ¿|2Ä€‰$öc­ÛÛ+Kô yior€ä,Ñ+øTôËXô½ÏJŠÖêK{[t¶C*e™UBØÏÿ){[êz,²? Ô†Kýcö/±ý†Ûì¿óÃÉ_/þùÆ)M°Ž…,-V)‹…`:dcœv¨ü¡ÿ<5ûÿ/ÿG”?熣ÿåÿâ¨Ô–ðÌûå‚)aM΀§ªóØàqíQZiöZxaeemm¿ïyªnúàsQyCþxj?÷þ_þ*(Ï GþÿËÿÅP÷vV·ñïm ¹Nà³Äë‚*ì](Zý—û*ÇìåüÏ'ìɳv1»n1œw£ÊóÃQÿ¿òÿñTyCþxj?÷þ_þ*€'±Óìtâßb±¶µßþD*›±Ó84ëC¾ÕØrYH> »`Õc C[ê Pfƒøn« pÈ¡VÎp `Pšuõ¥¾o ÷PÅ,q…ty@ô5gûSOÿŸëoûü¿ãU>×'üúÜßµËÿ>·?÷Á  Úšüÿ[ßåÿ?µ4ÿùþ¶ÿ¿Ëþ5SírÿÏ­Ïýðhû\¿óësÿ|·ý©§ÿÏõ·ýþ_ñ£ûSOÿŸëoûü¿ãU>×/üúÜÿßµËÿ>·?÷Á  Úšüÿ[ßåÿ?µ4ÿùþ¶ÿ¿Ëþ5SírÿÏ­Ïýðhû\¿óësÿ|·ý©§ÿÏõ·ýþ_ñ£ûSOÿŸëoûü¿ãU>×/üúÜÿßµËÿ>·?÷Á  Úšüÿ[ßåÿ?µ4ÿùþ¶ÿ¿Ëþ5SírÿÏ­Ïýðhû\¿óësÿ|·ý©§ÿÏõ·ýþ_ñ£ûSOÿŸëoûü¿ãU>×/üúÜÿßµËÿ>·?÷Á  Úšüÿ[ßåÿ?µ4ÿùþ¶ÿ¿Ëþ5SírÿÏ­Ïýðhû\¿óësÿ|·ý©§ÿÏõ·ýþ_ñ£ûSOÿŸëoûü¿ãU>×/üúÜÿßµËÿ>·?÷Á  Úšüÿ[ßåÿ¯quÜö«o4syrs 60çì)Ÿk—þ}nïƒH׎ZÚàu Sþf‹¿÷‡òÛY«JâçÄ×Ge‡è+·²ÿV>”ÄE¨ÿªjâl?äp·úÿQEÙ UÜY¥™˜±l™X ´3œîl‹iíÃMÆ1™ÜôÛïÏݯ÷ŽJ) Ò5Û†›Œc3¹é·ßŸº?_ï‹iíÃMÆ1™ÜôÛïÏݯ÷ŽJ([H×nn1ŒÎç¦ß~~èý¼r-¤k· 7ÆgsÓo¿?t~¿Þ9( m#]¸i¸Æ3;ž›}ùû£õþñȶ‘®Ü4ÜcÏM¾üýÑúÿx䢀´vá¦ãÌîzm÷çî×ûÇ"ÚF»pÓqŒfw=6ûó÷Gëýã’ŠÒ5Û†›Œc3¹é·ßŸº?_ï‹iíÃMÆ1™ÜôÛïÏݯ÷ŽJ([H×nn1ŒÎç¦ß~~èý¼r-¤k· 7ÆgsÓo¿?t~¿Þ9( m#]¸i¸Æ3;ž›}ùû£õþñȶ‘®Ü4ÜcÏM¾üýÑúÿx䢀´vá¦ãÌîzm÷çî×ûÇ"ÚF»pÓqŒfw=6ûó÷Gëýã’ŠÒ5Û†›Œc3¹é·ßŸº?_ï‹iíÃMÆ1™ÜôÛïÏݯ÷ŽJ([H×nn1ŒÎç¦ß~~èý¼r-¤k· 7ÆgsÓo¿?t~¿Þ9( m#]¸i¸Æ3;ž›}ùû£õþñȶ‘®Ü4ÜcÏM¾üýÑúÿx䢀´vá¦ãÌîzm÷çî×ûÇ"ÚF»pÓqŒfw=6ûó÷Gëýã’ŠÒ5Û†›Œc3¹é·ßŸº?_ï‹iíÃMÆ1™ÜôÛïÏݯ÷ŽJ([H×nn1ŒÎç¦ß~~èý¼r-¤k· 7ÆgsÓo¿?t~¿Þ9( m#]¸i¸Æ3;ž›}ùû£õþñȶ‘®Ü4ÜcÏM¾üýÑúÿx䢀´vá¦ãÌîzm÷çî×ûÇ"ÚF»pÓqŒfw=6ûó÷Gëýã’ŠÒ5Û†›Œc3¹é·ßŸº?_ï‹iíÃMÆ1™ÜôÛïÏݯ÷ŽJ([H×nn1ŒÎç¦ß~~èý¼r-¤k· 7ÆgsÓo¿?t~¿Þ9( m#]¸i¸Æ3;ž›}ùû£õþñȶ‘®Ü4ÜcÏM¾üýÑúÿx䢀´vá¦ãÌîzm÷çî×ûÇ"ÚF»pÓqŒfw=6ûó÷Gëýã’ŠÒ5Û†›Œc3¹é·ßŸº?_ï‹iíÃMÆ1™ÜôÛïÏݯ÷ŽJ([H×nn1ŒÎç¦ß~~èý¼r-¤k· 7ÆgsÓo¿?t~¿Þ9( m#]¸i¸Æ3;ž›}ùû£õþñȶ‘®Ü4ÜcÏM¾üýÑúÿx䢀´vá¦ãÌîzm÷çî×ûÇ"ÚF»pÓqŒfw=6ûó÷Gëýã’ŠÒ5Û†›Œc3¹é·ßŸº?_ï‹iíÃMÆ1™ÜôÛïÏݯ÷ŽJ([H×nn1ŒÎç¦ß~~èý¼r-¤k· 7ÆgsÓo¿?t~¿Þ9( m#]¸i¸Æ3;ž›}ùû£õþñȶ‘®Ü4ÜcÏM¾üýÑúÿx䢀´vá¦ãÌîzm÷çî×ûÇ"ÚF»pÓqŒfw=6ûó÷Gëýã’ŠÒ5Û†›Œc3¹é·ßŸº?_ï‹iíÃMÆ1™ÜôÛïÏݯ÷ŽJ([H×nn1ŒÎç¦ß~~èý¼r-¤k· 7ÆgsÓo¿?t~¿Þ9( m#]¸i¸Æ3;ž›}ùû£õþñȶ‘®Ü4ÜcÏM¾üýÑúÿx䢀´vá¦ãÌîzm÷çî×ûÇ"ÚF»pÓqŒfw=6ûó÷Gëýã’ŠÒ5Û†›Œc3¹é·ßŸº?_ï‹iíÃMÆ1™ÜôÛïÏݯ÷ŽJ([H×nn1ŒÎç¦ß~~èý¼r-¤k· 7ÆgsÓo¿?t~¿Þ9( m#]¸i¸Æ3;ž›}ùû£õþñȶ‘®Ü4ÜcÏM¾üýÑúÿx䢀´vá¦ãÌîzm÷çî×ûÇ"ÚF»pÓqŒfw=6ûó÷Gëýã’ŠÒ5Û†›Œc3¹é·ßŸº?_ï‹iíÃMÆ1™ÜôÛïÏݯ÷ŽJ([H×nn1ŒÎç¦ß~~èý¼r-¤k· 7ÆgsÓo¿?t~¿Þ9( m#]¸i¸Æ3;ž›}ùû£õþñȶ‘®Ü4ÜcÏM¾üýÑúÿx䢀´vá¦ãÌîzm÷çî×ûÇ"ÚF»pÓqŒfw=6ûó÷Gëýã’ŠÒ5Û†›Œc3¹é·ßŸº?_ï‹iíÃMÆ1™ÜôÛïÏݯ÷ŽJ([H×nn1ŒÎç¦ß~~èý¼r-¤k· 7ÆgsÓo¿?t~¿Þ9( m#]¸i¸Æ3;ž›}ùû£õþñȶ‘®Ü4ÜcÏM¾üýÑúÿx䢀´vá¦ãÌîzm÷çî×ûÇ"ÚF»pÓqŒfw=6ûó÷Gëýã’ŠÒ5Û†›Œc3¹é·ßŸº?_ï‹iíÃMÆ1™ÜôÛïÏݯ÷ŽJ([H×nn1ŒÎç¦ß~~èý¼r-¤k· 7ÆgsÓo¿?t~¿Þ9( m#]¸i¸Æ3;ž›}ùû£õþñȶ‘®Ü4ÜcÏM¾üýÑúÿx䢀´vá¦ãÌîzm÷çî×ûÇ"ÚF»pÓqŒfw=6ûó÷Gëýã’ŠÒ5Û†›Œc3¹é·ßŸº?_ï‹iíÃMÆ1™ÜôÛïÏݯ÷ŽJ([H×nn1ŒÎç¦ß~~èý¼r-¤k· 7ÆgsÓo¿?t~¿Þ9( m#]¸i¸Æ3;ž›}ùû£õþñȶ‘®Ü4ÜcÏM¾üýÑúÿx䢀´vá¦ãÌîzm÷çî×ûÇ5¯líã’3)>t1üó9á¤Oñzçœî9( oþf‹¿÷‡òÛY«J(¦#ÿÙ endstream endobj 111 0 obj << /Type /XObject /Subtype /Image /Width 663 /Height 556 /BitsPerComponent 8 /Length 57776 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream ÿØÿàJFIFÿá°ExifII*JR(i‡Züÿÿ)( üÿÿ)( 0210‘ 0100 ÿÿ — ,ÿÛ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`(cXºÆ¯›g5Ìî(”»@(U®{Ôfñq^'ñOSšv6vÖñCŸ”JØ|0éTOÄ}pö³ÿ¿/ÿÅÒ¸óöÔþð£í©ýá^ ÿ \ô³ÿ¿-ÿÅÑÿ \ô³ÿ¿-ÿÅÑp=ëí©ýáGÛSû¼þ6¹ÿNŸ÷å¿øº?áckôéÿ~[ÿ‹¢à{×ÛSû¶§÷…x/ü,]oþ?ïËñt¿ð±u¿útÿ¿-ÿÅÑp=çí©ýáGÛSû¼þ.·ÿNŸ÷å¿øº?ábëôéÿ~[ÿ‹¢à{ÏÛSû¶§÷…x7ü,]oþ?ïËñtÂÅÖÿéÓþü·ÿEÀ÷Ÿ¶§÷…mOï ðoøXºßý:ß–ÿâèÿ…‹­ÿÓ§ýùoþ.‹ï?mOï >ÚŸÞàßð±u¿útÿ¿-ÿÅÑÿ Zÿ§Oûòßü]Þ~ÚŸÞ}µ?¼+Á¿ábë_ôéÿ~[ÿ‹£þ.µÿNŸ÷å¿øº.¼ýµ?¼(ûjxWƒÂÅÖ¿éÓþü·ÿGü,]kÖÓþü·ÿEÀ÷Ÿ¶§÷…mOï ðoøXº×­§ýùoþ.øXº×­¯ýøoþ.‹ï?mOï >ÚŸÞàÿð±u¯[_ûðßü]ð±u¯[_ûðßü]Þ>ÚŸÞ}µ?¼+Áÿábë>¶¿÷á¿øº?ábë>¶¿÷á¿øº.¼}µ?¼(ûjxWƒÿÂÅÖ}mïÃñtÂÅÖ}mïÃñt\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿã”ÂÅÖ}mïÃñÊ.¼}µ?¼(ûjxWƒÿÂÅÖ}mïÃñÊ?ábë>¶¿÷á¿øåÞ>ÚŸÞ}µ?¼+Áÿábë>¶¿÷á¿øåð±uŸ[_ûðßür‹ïmOï >ÚŸÞàÿð±uŸ[_ûðßürøXºÇ÷­ïÃñÊ.¼}µ?¼(ûjxW„ÂÅÖ?½kÿ~ÿŽQÿ Xþõ·ýøoþ9EÀ÷¶§÷…mOï ðøXºÇ÷­¿ïÃñÊ?ábëÞ¶ÿ¿ ÿÇ(¸ïöÔþð£í©ýá^ÿ Xþõ·ýøoþ9Gü,]cûÖß÷á¿øåÝþÚŸÞ}µ?¼+Â?ábëÞµÿ¿ ÿÇ)?ábëÞµÿ¿ ÿÇ(¸ñöÔþð£í©ýá^ÿ Yõµÿ¿ ÿÇ(ÿ…‹¬úÚÿ߆ÿã”\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿã”ÂÅÖ}mïÃñÊ.¼}µ?¼(ûjxWƒÿÂÅÖ}mïÃñÊ?ábë>¶¿÷á¿øåÞ>ÚŸÞ}µ?¼+Áÿábë>¶¿÷á¿øåð±uŸ[_ûðßü]Þ>ÚŸÞ}µ?¼+Áÿábë>¶¿÷á¿øº?ábë>¶¿÷á¿øº.¼}µ?¼(ûjxWƒÿÂÅÖ}mïÃñtÂÅÖ½mïÃñt\xûjxQöÔþð¯ÿ…‹­zÚÿ߆ÿâé?ábë^¶¿÷á¿øº.¼ýµ?¼(ûjxWƒÂÅÖ½m?ïËñtÂÅÖ½m?ïËñt\yûjxQöÔþð¯ÿ…‹­Ó§ýùoþ.øXº×ý:ß–ÿâè¸óöÔþð£í©ýá^ ÿ Zÿ§Oûòßü]ð±u¯útÿ¿-ÿÅÑp=çí©ýáGÛSû¼þ.·ÿNŸ÷å¿øº?ábëôéÿ~[ÿ‹¢à{ÏÛSû¶§÷…x7ü,]oþ?ïËñtÂÅÖÿéÓþü·ÿEÀ÷Ÿ¶§÷…mOï ðoøXºßý:ß–ÿâèÿ…‹­ÿÓ§ýùoþ.‹ï?mOï >ÚŸÞàßð±u¿útÿ¿-ÿÅÑÿ [ÿ§Oûòßü]Þ~ÚŸÞ}µ?¼+Áábëôéÿ~[ÿ‹£þ6·ÿNŸ÷å¿øº.½}µ?¼(ûjxW‚ÿÂÆ×?éÓþü·ÿGü,msÒÏþü·ÿEÀ÷¯¶§÷…(¼CÜW‚ÂÆ×=,ÿïËñt£â>¸;Yÿß—ÿâè¸ü· ÝêPÀׇé_¯cºEÔmáh Ã4*T¨õÁ'?N+×tûôº…$Ã#€ÊAàƒL Z)äQ@Ü6Ô5æ.Ïü#×QƒÕ“ÿCZô»ÃˆÍyÄg?ÙSö“ÿBæ¨ÝPî£uHÍmI¸×5inȘS$’Hp± êÆ´n¼7öeÍþ“¬Á©Çiƒp‹ DÈ?¼'p÷ªžÖ­´JczŽÖwVïm7—÷•[Ê´…þƒ hÚœ^£6¥w [´KwÎî§žÔ=´þ˜-Ìåð¾ºújê)¦JÖŒž`‘YI+Œçh;º{Tz‡õZÕî¬4ùg ÁP ô#wášíMö—£Â9«Þê$ði*©g Æ`T¿ÐrzJÎѼO¥ÿ`Ø[OwŸyc#²<ºy¹s”#•<Ð÷×P[/ë¡Îi¾Öuˆ¤—O°y’7Øçz&Óæ#žk:â9mf’ãh匕ta‚í]zõ«x~hf¹ÿM“Y„,l2œe‡öÎk7ÅwöÚŸ‰¯ï,¤ó-æpQ¶•ÏÊà€zƒKªþ»Ÿà?ëó55iZ!hn¼J¢óÉ¥¸ÓßæÈȃ3ëV/|3ggˆú^û`x|æ\åúçoÚ›âÏ\ßÌöZf¢_K’ÝÓÉ-˜e—u\Ô¼I¢ß]øŠ/¶:Ãk Ã0…ˆ/û¤`“ÆzPïgo1G¥ü¿Cœ‡ÃºÍƘu(téžÌ)o0ÈH\î#Ü ÊÝ]ì^-Ó_J±š+è,u K1oå˦™™ˆÂÈ>è5硸¦÷h×&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÕgO³:…×–\¤j7;¸ôõCu_Ò®ÖÞiŽ€r}FÆ€7[DÒ™6•[þz ?¯¥sÓXË¡ö C;0Ý¿ùô­Ð.r9æg?ÌÖd×ÁµXîG)É‘Üs“úÒN=7H€¥K›‰W‡uY03ÆÑŽþõ—©ØGkåÍo#Ik0Êê;àþ£Ë«Êè!u‘ƒd#ø@ì§Ò¨_M¾Ò <‚Èâ: .?­miš™ ¶¨ZIæû±o*Ç“ЇWѬRÑï4©dD‰"-¸`¨ïV Âj¶€1e@>lŽqžÇ=ÿ/Z†öélô§¶i–ŒÅ í#è;Šòcˆ¨ê%}o±ôµ0tì¹m~oëúès»«Ü| vϡة9ÄJ?JðÕìÞrt«O÷{ù£Ô¡9AE2ÛýX¢˜ˆïÕšò/ˆ1I=ŒÃÉ,ŽŠˆƒ,ĸ:šõÛßõgé^m®ÿÈoLÿ°…·þŽJòŸøEüEÿ@Sÿäÿ ?áñýuOü“ü+éÚ)XgÌ_ð‹ø‹þ€:§þÉþÂ/â/úêŸø'øWÓ´Q`>g›@ñMÀŒO¤k2ˆ”$bKi[bŽ€dp=…Eÿ¿ˆ¿èªàŸá_NÑ@1Â/â/úêŸø'øQÿ¿ˆ¿èªàŸá_NÑE€ù‹þÐTÿÀ9?ÂøEüEÿ@Sÿäÿ úvŠ,Ì_ð‹ø‹þ€:§þÉþÂ/â/úêŸø'øWÓ´Q`>bÿ„_Ä_ôÕ?ðOð£þÐTÿÀ9?¾¢‹óü"þ"ÿ ©ÿ€r…ð‹ø‹þ€:§þÉþôíX˜¿áñýuOü“ü(ÿ„_Ä_ôÕ?ðOð¯§h¢À|Åÿ¿ˆ¿èªàŸáGü"þ"ÿ ©ÿ€r…};Eæ/øEüEÿ@Sÿäÿ ?áñýuOü“ü+éÚ(°1Â/â/úêŸø'øQÿ¿ˆ¿èªàŸá_NÑE€ù‹þÐTÿÀ9?ÂøEüEÿ@Sÿäÿ úvŠ,Ì_ð‹ø‹þ€:§þÉþÂ/â/úêŸø'øWÓ´Q`>bÿ„_Ä_ôÕ?ðOð£þÐTÿÀ9?¾¢‹óü"þ"ÿ ©ÿ€r…ð‹ø‹þ€:§þÉþôíX˜¿áñýuOü“ü(ÿ„_Ä_ôÕ?ðOð¯§h¢À|Åÿ¿ˆ¿èªàŸáGü"þ"ÿ ©ÿ€r…};Eæ/øEüEÿ@Sÿäÿ ?áñýuOü“ü+éÚ(°1Â/â/úêŸø'øQÿ¿ˆ¿èªàŸá_NÑE€ù‹þÐTÿÀ9?ÂøEüEÿ@Sÿäÿ úvŠ,Ì_ð‹ø‹þ€:§þÉþÂ/â/úêŸø'øWÓ´Q`>bÿ„_Ä_ôÕ?ðOð£þÐTÿÀ9?¾¢‹óü"þ"ÿ ©ÿ€r…ð‹ø‹þ€:§þÉþôíX˜¿áñýuOü“ü(ÿ„_Ä_ôÕ?ðOð¯§h¢À|Åÿ¿ˆ¿èªàŸáGü"þ"ÿ ©ÿ€r…};Eæ/øEüEÿ@Sÿäÿ ?áñýuOü“ü+éÚ(°1Â/â/úêŸø'øQÿ¿ˆ¿èªàŸá_NÑE€ù‹þÐTÿÀ9?ÂøEüEÿ@Sÿäÿ úvŠ,Ì_ð‹ø‹þ€:§þÉþÂ/â/úêŸø'øWÓ´Q`>bÿ„_Ä_ôÕ?ðOð£þÐTÿÀ9?¾¢‹óü"þ"ÿ ©ÿ€r…ð‹ø‹þ€:§þÉþôíX˜¿áñýuOü“ü(ÿ„_Ä_ôÕ?ðOð¯§h¢À|Åÿ¿ˆ¿èªàŸáGü"þ"ÿ ©ÿ€r…};Eæ/øEüEÿ@Sÿäÿ ?áñýuOü“ü+éÚ(°1Â/â/úêŸø'øQÿ¿ˆ¿èªàŸá_NÑE€ù“þ¯ƒ¡jÄzIqü¨ÿ„oÄôÔÿðOð¯¦è ™†üH8] UQè-%Ò•|7â59ÔÿðO蓱 ™Ç‡üJ­¹tQ[Õm%ôÇð߉$$¶…ª’z“i!'ô¯¦è¥Ê¯qó;Zú1Â/â/úêŸø'øWªx) °‚£xåvº:ᔎ ô5é5Åi?òÔ?ëòoýÔÐŽîÛýX¢‹oõbŠb#½ÿV~•æÚïü†ôÏû[èä¯I½ÿV~•æÚïü†ôÏû[èä G¦³ʈ»º ãñ§RFÓãÿ®OüÖÅò®¹ýü?üMMÏ÷!ÿ¿‡ÿ‰«Y®fïÆÿošÚÂX%Ͳy²»ÿ¸<Üòã“WÐ"›vFÑ/„•–û¥NAö§S%›Ï‚ÆmŒžcÚÃrŒp}éô€k1ܨ‹¹Û Î?w•sýÈïáÿâi±Ÿôøÿë“ÿ5«¹  †+3åÆ}„‡?Ê£ïØ#RÌý¦1×?J¾= gZôïûÿÿ£&ò®¹ýü?üMUÏ÷!ÿ¿‡ÿ‰ªïª²–'ìh0[­ŒB±\ão¨=éŸðÙ‚»ð °RÞ|G8ÏN)s.å(Éì‹~UÏ÷"ÿ¿‡ÿ‰£Ê¹þä_÷ðÿñ4éõ [u·i%n$Xâ* fŽÞý*Îi’Tò®¹ýü?üMUÏ÷!ÿ¿‡ÿ‰¢ßQ‚æúîÎ2Þm©Q&G0ÈÇáVóL MæÄWÍE Ç•²3ïÀ¨MÄŽì°Ä)Áfl ûpjÝñÿEÿ¶‘ÿèb©X¶_úë'þ†i w™uÿ>ñÿßÓÿÄÑæ]ÿϼ÷ôÿñ5g̨¡½·¸2'ŠSl#†ØÞ‡µGæ]ϼ÷ôÿñ4©;ù‚9£ØÍ÷H9Û æ¬y•Zá³=¯ýu?úPŠ(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ â´Ÿù êõù7þŒjík‰Òä3¨×äßú1¨¼¶ÿV(¢ÛýX¢˜ˆïÕŸ¥y¶»ÿ!½3þÂßú9+ÒoÕŸ¥y¶¶3®iŸö¶ÿÑÉ@Q©Æ£ýq“ÿBJ’ cJ/úá'þ„”†r|Cªé:?•§Å$PKòÏ|­ƒþê÷R½Øtääcü:ð9´1ëZÚùr0ÖÉþPƒ¨w¾‹Û©ç§r4xÈ™n.nn–IÚ`³°! 9 0ôÎHõ«im ˆÁ>­ÍLyµæX»lµ§ýv?úÓª½Ã~òÍé±ãþÙ½Xª58Ôcÿ®2èIUõá©M¥ÈšT«Æyϯp§±÷þ]jV8Ôbÿ®èIR9  ÿ ,°ørÞ9ÒDI.å—;‡ï[®jÍ£§ûxÿÑ¢¬+Õ+FÿLSØý§ÿF­rþ$ÖL3YDÛY€b@?½›Óé\‡‰uhçŽIoÄ©pX²9o“‡öâ½#QðÆ™©\ý¢á&2›ge’xú±?‰ª‡Á#ÝÓoÆðn¤ù±Ó<ן[ RsrM¾†§MFqmú/ó&º¼š=#Ã-Ï›qn²lb7)C}Gµd]êbÔµSªÜ¦©m|ÐÃf&"< ±˜ú6åç8Ï9Ð\éâëOÅÀŽÊÉ•ÒÝcÉ, …Ë“ÐÓºÕƱ³{ż{;vºQ…œÄ¥Çѱšô ¬•ÿ­¿Èòfù¤Úþ·ÿ3•Ô s¨x¯P†òîÚæÒ(¥‹É•w,Yù—£tÇ4^Íwyÿ øÔo –ÆÚ)­Ö†XÕ¼­ç)¤ê+­kkwó·[BÞxÄÙŒ0co^8æ²Úí•~ËÙ”,£Ëcn9ãžÔtT>IÌúL¶79…Ž=K-Tµ|G/ýv—ÿCj³tBÙª( ±~ñj¹ù%ôÞ_ý ¨—[ *É\á´Ïkém¥ê·ZŒw6÷׿ekCnªPdÊÓӽ"k—šrjÉd`†{­q­Vf‰@Œâ8Ÿ­jøoÁ¶ZË7üÿÜßñfŠ­öY¿çþãþø‹ÿˆ£ì³ÏýÇýñÿVh  ße›þî?øŠ>Ë7üÿÜßÿñfЬ¶Ÿ½W–yf(r¡ö€® þ5ºj<­$sÍs–íÁ>¸ ÕÚ(?û-¿çþëòÿˆ£û-¿çþëòÿˆ­ (?û-¿çþëòÿˆ©mì ¼Ö–Y¤ Òcåð­Ñ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@qZWü†µúû›ÿC5ÚצÈnÿþ¾¥ÿÐÍwVßêÅ[«Sïú³ô®ôgÄšpÿ§¨Ïþ<+¿½ÿV~•ÁÜ øŸOÿ¯…þtÝTqC דy±G&#LoPqËT”ØN.çÿ®iüÞɾÅgÿ>°ß±MŽßO—w—³íb­µàŽ û×i·w3X]ksêÍs‰|Ã+ÛlómÅþLmþï9­‹ Léº^«"]A¯«Îˆf…åÜwt„3zSþ¿/óÓúõÿ#¯ûŸüúÁÿ~Åb³ÿŸX?ïØ®VÛÅ··zLTFkæ²BÊé@$¹Só´}ÓÎx©umRÒMŒ­l÷×>c´ÑÚM$h‹ùf„±'#¾)ÒýŠÏþ}`ÿ¿b±YÿϬ÷ìW þ+Õ>Ãe4C`²4©=ÕÕ´¦%*@_—åe 9+¯†_2ßz>år}ÓÇQíL.b³ÿŸX?ïØ£ìVóëýû&ê7R?±YÿϬ÷ìQö+?ùõƒþýŠ“u¨?±YÿϬ÷ìQö+?ùõƒþýŠ“u¨?±YÿϬ÷ìUhÑ#žå#EE *Œò-]ÝT×›‹Ÿúè?ô cìí-¥€¼–ñ;$Ë2OÎj°ÙÿϬ÷ìSlN-?í¤Ÿú¯?±×µ;/\ÿh^K"Þ[\µ•ác¾9îËuÏSõ…+ž…ö?ùõƒþýŠ>Ãgÿ>°ß±\¶­â[+L´k{»g¸[%žH%¶–g~:–CòƒËµ5Ö¿«\ÞG”¶Q©ÓVø‹¤v-“÷AVúóM«_Ëþù ;¥ývÿ3£û ŸüúÁÿ~Åa³ÿŸX?ïØ®oIñ¥5ΖڂYý—SµyâòƒDUCmbI ÁêéU´_êwÖMö@ÖwŽFÄ´ZÁ*Í)p3ŒuïEµ°¯¥Î·ì6óëýû}†Ïþ}`ÿ¿b§È£"}†Ïþ}`ÿ¿b°ÙÿϬ÷ìTùdPa³ÿŸX?ïØ£ì6óëýû>EØlÿçÖûö(û ŸüúÁÿ~ÅO‘FEAö?ùõƒþýŠ>Ãgÿ>°ß±SäQ‘@}†Ïþ}`ÿ¿b°ÙÿϬ÷ìTùdPa³ÿŸX?ïØ£ì6óëýû>EØlÿçÖûö(û ŸüúÁÿ~ÅO‘A<`žÀœPa³ÿŸX?ïØ¨î,­ÚR-a! ˆÇ¥`Yx¶þïZYÑ’9ÕÈ”}¨Ÿ-GV?'N˜çœŠénHû,ßî7ò }ŠÏþ}`ÿ¿b“ìVóëýûŸâ$ÔfÑn#ÒÝ–è•ÆÆ Åw ÁIà2®fæòÆêQ§Ûæž6„ÍgªË#²eÀ|Ý\«Å P;o±YÿϬ÷ìQö+?ùõƒþýŠÀÔ5=fZéöRØJ³1ãkwß #ï30|džËÉúÎ>2¾—Q“ìÖ¢KXîþÌa[IÚFPÛYÄ€l98ôsIjC°ûŸüúÁÿ~Åb³ÿŸX?ïØ©7Qº€#ûŸüúÁÿ~Åb³ÿŸX?ïØ©7Qº€+Ïgh-å"ÚBô©~Ågÿ>°ß±IpßèÒÿ¸•dø¾êko j[ÊñLP"HŒC)f GCÍF·Ø¬ÿçÖûö(ûŸüúÁÿ~Åpšž»©ÍáÉ4ˆn=j•n¦BC"D»Œƒ7‚˜ÿxúVÈÖµ;Û‹{-(Z‰”wSMtߨ G<œþÄt_b³ÿŸX?ïØ¦¥µ„›¶AlÛISµàúW7‰ïµ8t¸tø-á¼¼YZSq¹Ò!ÚØ‚ÙcÇ"²´ù¤ŠÒu ¼Ó7ˆX€ÁU²ß2óùg4%woëtè¯ýlÙÝýŠÏþ}`ÿ¿b±YÿϬ÷ìWŸýšGƒÄúÌñX܈žê0&…Ì¥Upxq…Ç`Ö®]x¾ö ¦·ÓíQ–Ê8Á‹ì³ÊfbŠ« *œìÒ_åøƒÞÞ¿Ùµ­’)f¶·U$”P¡m,™C-µ¹R2pkÖõ}STÓõȬRÖKKb³}¡XÈìÑî `€¸uÏ5Óé ÿkú÷ÿAû…öþ»~Ågÿ>°ß±QÏgh-å"ÚBô«ª;†ÿF—ýÃü©VÓþ< ÿ®küªj†Óþ< ÿ®küªj…iâAª]ÚZÙI$pÁçE.ð<ÿ˜®Ùž~œÖ­õ¯Ûl'µódˆL… ‘œ2‚1‘ï\嶉©ézÜ—pÜOw:• 8…°'l*Œ‡<}hë¯õ tÓúÔÒÓõ›©õgÓoôáiqäyé²q*²ç'?þº~µ©Þép=Ä|wñFd•ÞäF@@œ}+7F²¼š;„Õ4ëènî×7ŸhŒr:"lrÊ£œcß<šv±¦`ºjh“ê‘*–Ži®Ô˜Üç’ÎÛ†=Fh{Ü·¨ëwvºrjÚjÍkä äinL£Àœ{Šdþ"æHtí5®¤û*ÝH$”E±;@àåŽ:Õ=FÆömÓN½Ñޝ2[®n|ôP²ãåˆaë3Qßè×ÒXÙEöInuAj!“PKÆAï¿kqžqË4>¶þ·éëbûxŽk–ÓWK²Žäß[µÀóî<­Š6ñ¶OÍúSïuËÈ.’Ê×LW‹oö‰ãV5Î0¯ÌI«>ûE[}"ÓJ_®ª ¶ÇpÏn„åŽåõÊæ’?ZÑç‚ê;í)¤Óã¶Ÿ*‘"d†Ëc*w÷ã¥Ëúßþ+ÿ_"åçŠâƒI³Ô-¬®.cºÀµc Á~fèOA“üêÞµ©Þép=Ä|wñFd•ÞäF@@œ}+:mêÛé05ÌfØ`"EfÁ8ã­Xñ%¼—ðýèQM»£—ÎD¿#<ã4K˸ãæ-ψ¦2Û¦½ÜÍj.äG”Eå¡è9,yãÛ­\]V;ŸVÙÕ­ÌÈÒ©!xÏÌoÇq¿›¨ß›«vfŠð: WwQÂí#ØŠÛþÍ·þõÇþÉÿÅQý›oýëü “ÿŠ©s¢½ÍœvÍ«ê*ª¬ŽÊñî”»²ŸË£iVVpÚÀ»a…h Î?öm¿÷®?ð&Oþ*ìÛï\àLŸüU&ê7Qý›oýëü “ÿЦÇcg4aâ–gCÑ–êBþ=Hn£u/öm¿÷®?ð&Oþ*ìÛï\àLŸüU&ê7RÿfÛÿzãÿdÿâ¨þÍ·þõÇþÉÿÅPn¨#æk÷Çþ€µcû6ßû×ø'ÿUâ‰ašæ4-´H1¹‹º½Ï4 –ÌâÛôÒOý ÖkøgN—ÃM ËæIhC|ÌFðKÈ8ÆAe*îã“ÛÝ;A‹JM­ýòÚ©b–fE1.{—v9àf²ùïsÿ ÿž÷?ø'øÑw¸yÛ¨ÝY; ÿž÷?ø'øÑ²ùïsÿkn£udìƒþ{ÜÿàDŸãFÈ?ç½ÏþIþ4­ºÕ“²ùïsÿ ÿž÷?ø'øÐ¶ê7VNÈ?ç½ÏþIþ4lƒþ{ÜÿàDŸã@Û¨ÝY; ÿž÷?ø'øÑ²ùïsÿkn£udìƒþ{ÜÿàDŸãFÈ?ç½ÏþIþ4­ºÕ“²ùïsÿ ÿž÷?ø'øÐ¶ê7VNÈ?ç½ÏþIþ4lƒþ{ÜÿàDŸã@KK;α •ÀVp£,@Oâh¸oôiÜ?ʳvAÿ=îð"Oñ¨çX¼„Oq‡¬òz}håý¹¼·xEÌö䜉 `®0{dúVAðµ¤Ý-ÍåíÌ×AIå‘K…Fܪ0¡@Ï·zÛû%Ÿüô¸ÿÀ‰øª>Égÿ=.?ð"_þ*?ð…Õ®5u[ød¸e2"˜Š£yB@öÏsNAŠßP{«[ëÛt’_:KhÝ|§~䂤Œ÷Á©öK?ùéqÿÿñT}’Ïþz\àD¿üU @$ÝFêì–óÒãÿ%ÿâ¨û%Ÿüô¸ÿÀ‰øª“uª?²YÿÏKü—ÿŠ£ì–óÒãÿ%ÿ⨙¿q'û§ùT­„:­“ÙÎᳫ„ò°aÔâŸ=­˜·”‰.2ÿËÄžŸZ“ì–óÒãÿ%ÿ⨬Ú]”Ò]Ê`Užê&YWï2àŒ~µJ_ Û2Ú˜//mf··Âh$Pïè*AõΫ_ì–óÒãÿ%ÿâª6ÓíMÂJ.ïH1 ‡ÚÄã“ß#ØÏ9¢Ã¹/‡,M¥”ï=£Y šî~÷$sß ÒAá»H- „Ü\Èb¼ûo˜ì»žNsœ1Ï`+[ì–óÒãÿ%ÿâ¨û%Ÿüô¸ÿÀ‰øªzÞâò3ÿ°í³u2o*ýäyNá¸ë·Ë9¨dðì?k76·×Ör:"Köy vŒÀ©çdb´£ÓíRIY®ï$ÙTk‡ÄcÀÆ;ó“ÍIöK?ùéqÿÿñT¨ønÚþ{™VòòÐÝ'—r¶î¡fÇÌO8ã#¶ m­â‚<ì.zà QöK?ùéqÿÿñT}’Ïþz\àD¿üUIº£™¿q'û§ùQöK?ùéqÿÿñT;"2\z´KÿÅR;Oøòƒþ¹¯ò©ªOøòƒþ¹¯òªºÆ±o¢Z%ÍÊJèòÀŒrA=Èô¤ÚJìv¹¡Es+ã1ºAwÿ|/ÿOÿ„×Mÿž7_÷ÊÿñUŸ·§Ü®Iv::+›ÿ„ÛLÿž7_÷ÂÿñT‡Ç`ÿ–7÷ÂÿñT{z}Ã’]Ž–Šæá9Ó?çßýð¿üU'ü'Z_üð»ÿ¾ÿŠ¥õŠ_Ì’ìtôW1ÿ Ö—ÿ<.ÿï…ÿâ¨ÿ„ëKÿž÷ÂÿñT}b—ó$»=ÌÂu¥ÿÏ¿ûáøª?á:Ó?ç…ßýð¿üUX¥üÁÉ.ÇOPÜÙÛ^¢¥Õ¼3¢°uYP0 :žõÏÂu¥ÿÏ ¿ûáøª_øNt¿ùáwÿ|/ÿGÖ)0rK±Ñy‰üÿ)<í»<Í£vÜçëŒö¨¯4ë-AUolíîUNTM¸Û"°¿á9Ó?ç…ßýð¿üUðœéŸóÂïþø_þ*Ÿ·§Ü9%Øé#Ž8cXâEHÔaUF€S«–oékÖÞóþø_þ*´4Ùës­¢!Þ(ØŸZ¨ÔŒÝ¢ÄâÖæÍqÖò¿ÿ¯™?ô#]qÖò¿ÿ¯™?ô#V#·¶ÿV(¢ÛýX¢˜ˆïÕŸ¥p“ÿÈϧÿ×q]Ýïú³ô®ùôÿúî(¹®ÅÍ:xcZk|îñÇüóÞwÿ㻫 ¢ÙC]Ü+A‰¿/N2å’`ÕÕ?ðu·†dð<Ò_}…æ‘[í†}¥·s×?§¶*Ï‹™g´Ô“{=¼M¦ãÎ~|gß˯]|*ðåÍá¸OµÛ©90à øeIØTôêžñ¤wšv¡ hd8š9¼ò¥[xÚÀ9 G#¹Îõ*BÏ–îÿ ;«ô4üKêëksvú·ö"Û.b™;™ÕHfÆ1œ`ñPj>/’ ›k T™’\ýªkYî¼ÐÙ 1È'i%äk Ôô7Ô§2.±©Ú+&ÆŠÚD Ãþ¤ƒîªÏá †ÂæóN–Öl’ÚÈ4c­¸0<óœgšæ[[úëÿ·¿õäcê¾2¼¶Òmná6ö×miö™´û‹I¥{ŸêÇe…h sTÔ5»;=;ìpÃ-„wÒ5ÄlìC66¬1Ç~jÅÿ„ ¿‘¥þÒÔmå–ØZÜ<2&gAœoܤg“ÈÇZ»i¡ZÙ_ÅyÊdŠÍl•Y]ŠrN¿çJ××úßþžß×—ü†—©êÚÅåÅÄ"Ê*‰-öº3M&ÂT¶C¿0à`ñ\ÿ„u=WMÒœdóÒªXêÚ½® éöR\°¿Ü£Z˜ç–8A#S) H '$cÖªÿ×_òÑÛúØôÊ+ˆƒRñÌšN‘u+i·—hy.LQ´dmÂå3õÆ)5S][MÆké^ %žIí ·i%vba!U òó´gžÔÜRn]û7 ØÎ3Î+‰[¿jZµŒ—í¤Ü®”·3G1H ÛÊœî Çüj¦‰q{âØên’ÊitXe”@ˆD‡ÍlNÓÞšWןù »/ëËüÎîÖöÚôJm¥ehdÇðºõ…O\…ýÖ–“^G.Û1ââ¼] ‚Žv†Éb½+¥ðÍõÖ§cs}q.ø¥»—ì£haVÚ½9ÚNO­%ª¿—è¿ÌoGýyÿ‘µEPYÿòõuÿ]þ€µ¡Yÿòõuÿ]þ€´ž-|å|„*d~ýãGölóÊûçÿ­QO Œ‚êî£Í;V$ʪ2WýãUŽ AýÓ´kýß´îýZ2ZÊu¡i3HRœÕâ³(0¡z)~Ìþ«PéwÏteŠB¬ÑàïVÎA-€~QÈ’ß]Óî盧·™äš2ÊÅa}€¯Q¿r=3W©.h“(¸;HŸìÏê´}™ýV±4-vêöÓC73Ûù—©3H­n}§¸ùF;çð¦ßxºÑõ:ÏM¹ó[å‚Sä¶Â¸mÁ\¤ä„ÕÛ[ÒæïÙŸÕhû3ú­U“ÄzLZØì üÁýÛz)|m ìNjKmsO¼¿{+yžI²±X_`+ÔoÆÜLÒo³?ªÑögõZ·ETû3ú­fU«tPO³?ªÑögõZ·ETû3ú­fU«tPO³?ªÑögõZ·ETû3ú­fU«tPO³?ªÑögõZ·ETû3ú­Gqlÿf—•û‡ùUúŽãþ=¥ÿpÿ*µögõZ>Ìþ«Vè  ŸfU£ìÏêµnŠ©ögõZ>Ìþ«Vè  ŸfU£ìÏêµnŠ¡slÿe—•û‡ùTŸfU©®ãÖo÷ùT•Åíµ°k y;0]0‰@õ,Aãè æ€ìÏêµ^M¯ ½‘® VX˜±ùCc¤Ö®Æÿž¯ùð£cÏWü‡øPXt›(.–æ8H™mŰrìv@äú÷ëT„ôB–j->Æž\9äFTÎv’ìsZûþz¿ä?Âÿ=_òá@þ±áÖšÊúÓK¶´5Bßm’yå$cz üW+fÓO·³ÒáÓ¢L[E…W?Â*}ÿ=_òáFÆÿž¯ù𣥃̡ƒ¦CvØM;þ=G˜ß»ão¯<ù«zu­„—/mƹ”Í1ÜNç y‡©Àt®-Lkb·QK ‘HÃ}Ö9çóê;M/YŠßCÒdÒñ›v®×‰2ynŠd.wdäqZì>ÕþÇëGÚ¿Øýkkës±ÆÁá©áÔ®-ï4ûÛ»ioÊO¢R ï¢.9SèqZ:•·‰CÙÙ\ÙiÏ$t“\FñHNpѨ%”–äôx®‹í_ì~´}«ýÖ’ÒÀõ,QUþÕþÇëGÚ¿ØýhÅ_í_ì~´}«ýÖ€,QUþÕþÇëGÚ¿ØýhÅ_í_ì~´}«ýÖ€,QUþÕþÇëGÚ¿ØýhÅ_í_ì~´}«ýÖ€,QUþÕþÇëGÚ¿ØýhÅGqÿÒÿ¸•Gö¯ö?ZŠâëý_“øjÞ¢«ý«ýÖµ±úЊ*¿Ú¿ØýhûWû­X¢«ý«ýÖµ±úЊ*¿Ú¿ØýhûWû­>çþ=fÿq¿•eø™õuÒvhÖòKq,ŠŽÑ²+Çû̻ȱÀç©Ïj¹suþ‹7Éü¿µKö¯ö?Zçá·ò¼6,¿ášXRL;™`v“¹’åIÏ\œçšÂþÍ»ƒOB–ØYŬj[£±YCýžÕ@iG;O¾»ßµ±úÔLÐ=Â\5´fxÔªH@Ü ã dùQÖáÒÆ.¥kªéþ#—UÓ4ñ~—6klÑ –3£1Vùˆ~cœsÇCYMà[Ëyvú¥È¾]5­L1¬F7',TRT¶Jln5µ}¿ÎP# ”©_½»91ß5×FÐC$²Em<ͺFPsŒdœrpü*_µ±úÕ_[ÿ[Ü›ioëk¦«¤ÝêäÙøu,®¢»IVÄ¥£SÏÝ;ÛrŒa†9®Î«ý«ýÖµ±úÒZ+­ËCVÒ`ÖmVÞáäTW dœÜZŸí_ì~´}«ýÖ”¢¤¬ö*”$¥©NÓþ< ÿ®kü«ŸñÏü!ÿ¯…ÿÐZº Oøòƒþ¹¯ò®{ÇG$?õò¿ú V8áH¨|HóãŠB³Iœ×„u‰ÅƒÅ&hÔ†“4›¹  “hÅB­OÅá78QÔœ ¹¥i¿ÙÞ%7OæªÈeI[ ŒcHÈë‘ÍÏ Ù}¯P»(HXc$d¿P1ôçò«ž#Xl®ÝâœÃ˜<ÓÜŽEw<ñ1îkzO—æL•ÇYØÛ>­wuÎË,ŠX¤˜†28ÁÇÝàñÉëÐÔñLḧ²ÆLLdpHfÚ…luw=xϰ2xvay#^’Â9æwˆ´€å zu g³ùYÖZ3*³¤“*ÛÆ@HéÓw_O^³9®sHEØäGÁ÷éqÞ¦¼VbP>1¹ÎÒ@ÏNpp=¸Ï& SÅCVfOG`=+­ð'ü…eÿ¯vÿЖ¹3ÒºÏÈV_ú÷oý k³üGéþFUv=¸ëùßÿ×ËÿèF»ã¬?ä;ÿ_/ÿ¡õLNÞÛýX¢‹oõbŠb#½ÿV~•ÂOÿ#>Ÿÿ]Åww¿êÏÒ¸IÿägÓÿ븠æª\*¹™C+5° Œ‚ ½*ÝW•Ú- ²ùµq’BN3ì) 导Ei¦Û$Ò­µ»²‚Ú&GlŒãåqŸÇŠ¿áï%ýü ov³Eqò”`ä© ÍüNpzgé\E×…¼Ew,RˤÎ^P¿,GyprÝ2=úÖσ|9¬Xx’›­9à·äwqà•#hÚÄ‘ÏÿXW™Nx‡5tísÚ©‡Âª-©.kwGi>­§ˆç†âñÒÞ?í/D¾Z€äßÙÀéŒS4ïÚê7pÛ;ë7¸ŒËl×Q¨ä•Á=ˆ888íY6öÞ$ñn±i ÛàþÉûòÇÈŽBíòçûÀsйe¢ë3êZmƯ-ˆLÄ?e,LÎ˳snhÆxäõ¯Qmýwðïýv_ðJ~ñ[O¦é–Ú•½òÏt]#¼™Ç3dž$Ô•£¦øÊÏQ¸´ŒXßÛÅxÌ–×Æ¢9YsbAàã tªÖž½·Ñü=fÒÛ™4Û³<Ä3a— /ŸœuÇz,ü1{o¤xvÑå·2i·~|Ä3a— /ŸœuÇz}~Óòþ·:Ê(¢ÂŠ( Š( ³ÿåêëþºýkB³ÿåêëþºýhvDÝ¡†]»ð&MÊ •8úTÞörÞ?hÑÐ~K ºÈ¹û,æÖ–BĘÏúäcÔú)®!´ï·ÞÓ®þ¿ã^~.u£%ìÓg¥ƒ£F¤©$µêÑÝé·^{Íš$XÀ`@ ŸåŽzV~—â gmDÞÛH–ö³Ì¿jDAô?6ìãÚ¢ð–¡j—olÐ6 À“ÙèO­*hWÞ^«§HÖÇN¾y¤†o5 ƒ¦Ü`à÷ÍtáÜÝ4罟ærâ¡ÕqƒººÛÐóÏ­7«kúéÿ6·õßþv×Qñ[m2ÜÛI¨Gd.îå» Fç'¨R1ÐŒöpi“x¾i×F{{­;OKûg™Þü À¨Ø0ëÎK~U§©iz¢k/©éiæMl-åK¢À UÁPrFãÇQPU°Ð­ôm>=:âÙmü©ñœÇ9;BG9ÆEëýuÿý\:ÿ^_ðKíÝÜZ}œ3ªßßO"XFzFPIÀÚ¹ê(“XÔ#ñe¦˜öQÅe4r•™ßsÈP)È'Û½ Çn¿ ©”Í…d–«!zg±ü/ýõ[7šl×"Ó5hÄV±ÌŽ ;‰p¸Çìš}~ÿëõùˆÍ¼ÖõÚX™téÒæmŸeˆ7Ú#ŒƒûÂsŒ sÀú×M\Ö¥¤êú½õºÏ› ­½ÒΗ³´ûU²@Rz“Ô×KIl7¸QEËOøòƒþ¹¯ò®sLJõò¿ú WGiÿP×5þUÎx÷þ@P×Êÿè-XWþ.<ðfMÏj]ÀWŠÑÖ!£ÆS<ášVlSHæ•dh$Qaæ‰dòSqŽWôXÓq'ôÉ džiCRïZkp°ÿí­FÖêÚÎÍ£0¸vþwÏQôª·âïŲéÐNRÊИon㸠9=Çn;ðyÏO{ÙšÄÈ¥QÄŽƒî‚T{dð*߇¾×&‚-n¦Ž8í¥"Dë¶=Œ y‡!O#q<óÈä tÆ ATêO5ß)èVó,lÖv©XÀI6žTô?^˜­[ÄFO*Hªã¯Vþ|ʳmî +±#w‘eâ0W Îy=03Ôò1œÕÁ(¹sò³(?) Cœ vž‹Çn¿AÏ'³Vl×›S Y·>Çܦ&dÎv‚àŽ{ã?ÓŒUë]¦£n!O9bi 6–%¾«×òüsÒ¸É[>[yÉù¿½ïT¾MK7qq]oä-/ý{·þ„µÇ,œòk°ð!Ϋ)ÿ§vÿЖ»0+÷ÓüŽz¿ èÇXÈvûþ¾_ÿB5Ø×aÿ!ëïúùýר`vößêÅ[«Sïú³ô®ùôÿúî+»½ÿV~•ÂOÿ#>Ÿÿ]Åw4Ë77Jꈱǖc€9nôµÎxÊæKO jw¹ŽHþÊU‡cçŽhI·dRWvGMý«§Ïý¯ýþ_ñ§Åg<‚8nà‘ÏEI?¯¼×µÅÕç·´Õ® FÃ5º«ò9AëžÂµ<9¨jóx·J‡P¾y£3>¢¯>L¼ð=ªýT®Ñ»ÂÔQçèz¥Ëêrê—~2J´Õ¥°€iæàùPÆåŸÌÛÎõ78ù­Kvó.è¥/L«*Äò[6'(àH»€ž0zûɸբ•üˉC¿MÏDþe+ž®&¤oK:ªñ:_³'«QödõjÉðõêܵÌQÈZ(°(ÚX±8ÚU ']¿Ž-bëPŽ6Ó¬înÒ<ßÞC„یc¾êÖHÔ2ØÎ¥9S—+Üé~Ìž­GÙ“Õ«”´ñô™„–б[Gº-/áˆQ’¬|ƒÓ‘מ)ú–¿¨Ëàéõ8#¶‚Bðù-ot&V ê-´c®:².ufOV£ìÉêÔÛ).å¶ {odå"˜È¸íó_åX÷򢯿‚𕞖nJyØŒáðc†ãïgð£`Z›_fOV£ìÉêÕ‡§ø’æk«8u-5lÖú#-´‰qæ«awo”8ç¸àóQ[x®ææm>_ì­šv¡?“op×9áˆcÞ е°¯¥Î‡ìÉêÔ}™=Z¦¢È~Ìž­GÙ“Õªj(³'«QödõjšŠ‡ìÉêÔ}™=Z¦¢€!û2zµfOV©¨ ~Ìž­GÙ“Õªj(³'«TWÉöiyo¸•[¨î?ãÚ_÷ò  ÿfOV£ìÉêÕ5Ù“Õ¨û2zµMECödõj>Ìž­SQ@ý™=Z³'«TÔPK›dû,Ü·Ü?Ê¥û2zµ-ÏüzÍþã*‡RûØŸû7ìâäðã;Tw8“íÇÖ“v_³'«QödõjãÄ:šü?Ò59.öMq$iuv°«4jÌAeL`œàc¯CSéž&™<1¬êSÝ‹øl¥‘-® y°(yÛÐgƒŠoKù_¨-mæuŸfOV£ìÉêÕÆYÇ­¬Ðhš¡´–ÏOK›‰ÌK+K4ŒÜÙÂä7Nyê*)|I{a¢j^^é–SÚI%Üö–buYAP%jýóš?¯Ïüƒúþ¾ó¸û2zµfOV®w^®´í#J¶¼ißRš57 @/ îù\@Ç5>{íbéöRËnšmÄS”Š5˶À¸,Äq÷ºÌö-­€ßû2zµfOV®WTÔõ 7Åz}²jÒH·w!ZÖkUHV"Ý—/Çq'Ò» ×½ˆ~Ìž­GÙ“Õªj(.Óþ< ÿ®kü«šø€q¡[Ÿúz_ý르ÿ(?ëšÿ*æ>!+6ƒndý©ô¬k —‰yž3M,M5N<⃀ppzZò”5²j,Ô eöŽ[Àëò)OËÃ)Zb’§ÏJ:‚@'i„€y8 .sJ$8⣑Ò4.쪊2K=iŸi„ÁçùÑù8Ýænq래¢ÁrΧ>£­^J± f# 8 9=sêN~ƒûÄŒû(.ôB["Zs¿ÉYU_xá”H7·<ÊqŽkSÃz¶—©jWRo‘£ÁXNÖÂã±ÌL8ÈgXÔó©]_JË šePl·¡;¶Žû¶³º®Ì~†œÇí 6{¢€,Q¿›‘(ùyê¸#æôç5»¦Y݈‰¹v‘Ê@A»’8#ÓxãóÖ¹¤Õl ÄÓ:Ý¥V»‚Ò À+nÝ‘ŽG ¸'pqÐ/Š,&† ¤‘Ãá‚ã€yã““Î=OzžTÓ¸îÅÕœEÛ}¸%²1»©ã ÷ê}+‡¹`“H€Œ+ÁÈ®¶ÿ^Óu=wXË¿Þv$–cõ$š¿E;è×èQE Ïÿ—«¯úè?ô­ Ïÿ—«¯úè?ô  -ZÊò÷Ot²™7°ùܯI•úàÿpƸÃà¯g­™úÌøšï…ËÆíùŒKÈB¤eÎ7sÐQHÚŠ£m’avQ°þG¹êáiÖiÌë¡«B.0±™á PÑã»:ƒB^b›DN[g®@õ©cðÔŠÚ•³_ÒïÚW’ØÃó†|Ø“=3ÏJÒK¦‘C$”ô+‚)|ù?½ú Ö8Ó$v1«VUfç-Ê~‘ªØÀ𶯠¡bòàsd”öf!¾oÈf©/ƒ‹Ùê±Ü_'Ÿ¨ؽµ°‰åX&㓞¤žq[ž|ŸÞý|ŸÞýY‘KûR]%VßR7w×nólôÙJc°ùwxõ¬K£>±}­^ÛØ^ÇöC['ŸnÑ´’Ç ¬2{vï]GŸ'÷¿AGŸ'÷¿AI«ÿ_!§oëæbh¾¼eÓ.õ[ï?ì–Û`·þW–Y;¹%ˆvïÅcXX_6«£Ø[5óéÚ}ËJëOh|¤ À0œ?ÞÀÀú×içÉýïÐQçÉýïÐU7y\›{¶.ÑT¼ù?½ú <ù?½ú C.ÑT¼ù?½ú <ù?½ú »ERóäþ÷è(óäþ÷è(íKÏ“ûß £Ï“ûß   ´U/>Oï~‚>Oï~‚€.ÑT¼ù?½ú <ù?½ú »QÜÇ´¿îåU¼ù?½ú Žây>Í/Íü°ô ŠŠ¥çÉýïÐQçÉýïÐPÚ*—Ÿ'÷¿AGŸ'÷¿A@hª^|ŸÞý|ŸÞý]¢©yò{ôyò{ôbçþ=fÿq¿•HFTQY÷3ÉöY~oà=‡¥IçÉýïÐP:øMâðö•§Ã¨l¹Ó$ÃpaÜ¥†áó&ycßñ¬é¼=vº­­´ò½Ù¾½×ó¤\AaQ±1“Œ°^¤“ƒ]OŸ'÷¿AGŸ'÷¿AEõ¿õýh€ÏÕt «­OûGMÔþÁröÿf˜˜¡Ó9`IÁç¯Jü?m¦[išF¬–vq[ˆ Éh%sêÁ· ÷V’]´‹º9U×$epE;Ï“ûß ¥m,nahz9µñ QËe¤ÙGchÒ©a8gp{ôA‘èkbëJûN»§ê~vß±Ç*y{3¿~Þsž1·Ó½=îÚ$/$ªˆ9,ØS¾Ñ'÷¿AUqX˽Ð5Nî1}¬#éñÜ­ÂÛÇhÉVܪ_qà:N+¡ª^|ŸÞý|ŸÞý.–™vŠ¥çÉýïÐQçÉýïÐPŸñåýs_åX>6ÿ4?õð¿ú Võ§üyAÿ\×ùV¿ä ý|/þ‚Ô†pTQE1Q@Q@Q@Q@Q@Q@tž ÿÌßõîßú×7]'‚ä37ý{·þ„´Þ×aÿ!ëïúøý×c\uü‡¯¿ëáÿô#Hgomþ¬QE·ú±E1Þÿ«?Já'ÿ‘ŸOÿ®â»»ßõgé\$ÿò3éÿõÜPsT5Ùg¨X£_͘Z¿YzͅêštÑCvñÂcyFP¶‚:´†VŠ&1«´Fi9SŸaÛùÒéÛâñ!ÊèÊsƒŒ‘ÿŽŠçí¼3ãø#ú–‘6bù@+GCð÷Šàñ µî¯{¦µ¤!ÉKq—bT¨ò׎s×µ1ˆäžOÃhY¸·þÎ2ymÙ„†ó1¸üèu¦jŒ‘I©[ gVwó.dgœ[äfÜAÇâsÞºïì¨?·F¯¾O´ o³mÈÙ·vìãÎ}ê+­ ÒóP¸¼˜ÈÍqfl¤MÀ)Œ’OlçŸZV÷mëúÿ™W÷¯éú‘ÊÍâ›»´í.Á#YMŠy$’Ò{€r0ªC#¡ùäkfúãXÖ|—t3Yê3ÆŽÐîòäQ‘½T°ù[Ÿn”óáu[FƒRÔmîm û0ºŠDó$Œ…|©SŽÜfµ.tö¸ÓVÌ_]ÂÀ(ûDN¹óŒsߊ©;Ýùþ¤EZÇ'³¥^Oe&¤óÚË ^ÚjÒI$Â[ Ë“é“Hùj}SÅZœ77ÿb†ßì6÷QÛ§†IDY{»* AÆ1““W%І—o{:A}®ÝÞÆ-åûDñ†1àñÎÕ Éè3Ïz4 ˧xbÏMݵÂ$ÓÛ:–wläêr9ÇN–ÿ×õ¥¿1ÿ_×Ì¡}{©Þk>m?S±y'‚åšTÞÞLä(p~Ÿ7Ôz¿Œµ+]NúÖÆÞ9Nž]>Åq)¸r¡Š« +»<ûs[ÁÖ)eaµÝí¬–,íÌ2/™—É|îRIÏO¦*I¼/ßµí¾§¨ÙÏ*¢ÎmäP'Ú0 R3Ž21@º§ŠuÈY¹²†ÄZiqE+Ãqù²@Än …#èk[HÕuF×fÒµQfïöTºŠ[TdK*CÈ súU‹¯ Yݦ°²KpªŠ“íaò…]£oqëšµ“zÀÔÃÉç‹ak´‘·hmÙéœçÞ…¿—üó°=¿¯/ø%úÏÿ—«¯úè?ô­ Ïÿ—«¯úè?ô  +™L2Jêì‡æ•Šœã‘õ¬—ñ /[™‰ö¹“ÿŠ­VÆkûi¢‚T™ØeÔ°âU~ÄwAù×+ÿ%ÿmR/ûòøªóñtëÊIÒ=,°êÛJÎý™Ñh—Éy=×–_j„'s³rKdòMeiš…õ•¦·¨\O¶6×7,"(Æ_”ðnÆ=±Z^Ð¥Ñ#¸ó®–w˜¯*›@>çÖ¤O[GsvââäÛÝ—i­ cŒgŸ­táã8ÓJ{Ùþg.)Óu_³Ö7_‘eâ}Zo3ýí$ڼѬV³DÀ!.0ÙÏc§JŠÿW»½ðäÂþÕ®VXWý7‰¢%×*êÍ»ùdVõž„l¡xcÕuˆÇ寝"Ÿ(v*vç#ß5ðÅ£ÛßGssws%èQ,Òº‡~î6€=+~¿×sœÔ³[µ·öHd›'- e¸,OëXw¨¿ÌV—1GØ£:LŒàþñ³´>üÕ¿2ûJU·ŠÏQÕF7‡–sýÞJÿ.ôÓ¦NæMþݦ]ª™HÉtÎpØÜ1ŸCži­ÓKíû=æœö°Ç"mu¡u*Ì’ “óÙ9 dvZm§Øtøm¶@žXÆØ#(ƒžÊIÇçTLJ­ßÞOÅñ¾ûÃýaíÓîóõ÷­jKk[!½]ÿ­ØQEQEQEQEQEQETsÿǼ¿îåRTsÿǼ¿îå@´QEQEQEQEGqÿÒÿ¸•C¨CsqfñÚ]ý–Sÿ-DaÈð÷9úT×ñí/û‡ùSÈÈ#Ö“ØÂ}¾øü?Ñ%ûUÔ’Ï,i7•!ûDêIÊ£uÝߨàEMa¬Íeá½r6éÚÞvŠÖ Æ-Ÿÿ]Åw5Î-¦žBŒÿ,Jq’K0HMIUfûò¿mÿ£i »öâ‡÷ÖwQƒÐìÿ 5$q\;¤~`d•xÙq÷€ô5æ­¬ÙD‘©HXùjÕƒœ¨>•{ú¤~#²Š(bRKœª~ãzW qñ”Ô-¹ß,¾qƒŸmOCéPZ^[ßÚÇuk*˃(ëÐö®Q¹ÔõI¤Yj'OŠÞÍnÒw”³2ó‚¼àgžµƒ¤êÁàÍÂÊçP[ùa’@–0E#2«`–ó~P2Gpy®þ—þºÿ‘çõ±è…”0RÀ1è3É¥¯:‚êûÄ7^º{É,®æ·»ß41¡9Aáƒ(Î=*ψüEaw<ºmÖ¡2XI W+öx~Ï’W!˜áòCòð2)Û[ ú\ï(¢ŠC (¢€ (¢€ Ïÿ—«¯úè?ô­ Ïÿ—«¯úè?ô  Q¶ËKfšGi[ · |¤zŠÈâ[9ѽ<‚ÿªä~µ™©H‘ÀZLl˃žœÜF+˜}vÈtŠÿ¶KþÉˆÅÆ‹I£®†U¢å½ˆÃ4{ÑF2G)‚8<zŠr¬M¡1Á®sÂw±ÞÍ|ÑÆˆcEûþ•›¥Ës¦iž#Õ’îY#·»¼qfU6œçnïÖ¶£UT‡?•ÌkRt§È÷ÓñW;o-?¸¿•#,H»˜"S\f}âÉ‘Ý!¸˜Mfîw‹6Mž[Täýïnj®§{5߃õ{›ëǾŠ[6;«xãx ‘pFѵÁ óÒ¶¶¶1¿S¾òÓû‹ùQå§÷ò¨l šÚØG=ä·rO›*¢±ö€?JçµÍvïDÔ¯–I7E-›b…Gúå;JŽ2rY>ô˜Ö§Oå§÷ò£ËOî/åQY%Ävéu/›p±¨–L¹±ÉÀã­OMè$î7ËOî/åG–ŸÜ_ÊE!òÓû‹ùQå§÷ò§Q@ òÓû‹ùQå§÷ò§Q@ òÓû‹ùQå§÷ò§Q@ òÓû‹ùQå§÷ò§Q@ òÓû‹ùQå§÷ò§Q@ òÓû‹ùTW§Ù¥ùîÞÕ=GqÿÒÿ¸•iùiýÅü¨òÓû‹ùS¨ ùiýÅü¨òÓû‹ùS¨ ùiýÅü¨òÓû‹ùS¨ ùiýÅü¨òÓû‹ùS¨ .cO²Íò/ÜnÞÕ/–ŸÜ_Ê™sÿ³¸ßʡԬ¿´,^ÜÜÜ[«}æ·}ŒG¦z€}°}é7epEŸ-?¸¿•Zq*ótV—ᯆ­c_=æž$ŒÅVèÄ£7a€I'?w¡©¬o¤Ñü9â €ÙÞ‹Ï"ßO ¹mÞUUŒ!s¿Œc'Ž)¾©tÿþ`º]ÿÈîí.-/­–âÕ£–$+¨àààþ ÔþZq*á°,.5ñ¡ß§›e§ixÙˆ‹0i?ÞùG=³TáÓ¯u¿hÍÞg«¥µ„‹$’íg$®eXµ;ã¯Z·þºÿ-]¿®Ÿæw÷sÚXZ½ÍÓG1Œ³°àv©ü´?À¿•q÷Vºì~Ó¬"òì®Bß<[@Ù@R;|åàj[Ë!oñH¹77´ð\ü’>R0`*ŽSî}iÛ[zþ¾‡Wå§÷ò£ËOî/å\?ˆ´Ø´ï隤z|vð›ØüýBI™™ÉPŒ§!$ÉúWuIj®7½†ùiýÅü¨òÓû‹ùS¨  »Oøòƒþ¹¯ò¬Èúø_ý«zÓþ< ÿ®kü«Æßò‡þ¾ÿAjC8*(¢˜‚Š( Š( Š( Š( Š( Š( ºOÿÈfoú÷oý k›®“Á?ò›þ½ÛÿBZïk±ÿõ÷ý|?ó5ØWcÿ!ëïúøæi í­¿ÕŠ(¶ÿV(¦";ßõgé\$ÿò3éÿõÜWw{þ¬ý+„ŸþF}?þ»Šîj5€\ÍqvO–& ¸È!˜Ž¾â¤¨¼ö·–y± RØgeëƒëHg0ÿ ,‚uKî:ü5Cð%–‡©¥üw·sÉ!VB»yì= jn8ÏïM£úcxŒG×vÚšÏX´½œÀŽ«(…2£ëÓkãÖ£A;¤®uK‰”\e'aºž¦ëE-í»4±©,r¼Nê7!ÙÅA/…4Ym--¾ÈÉš•·1O$o=@u`Ø?ZÙ'5SLÔmõm:ëRÆ †P°ÁÆqÓ𮃣/…titûK´a¡& “Hsœ8`Üäçži—>Ðîçi¦´rͳx[‰UdÛ¥”0 F$•­%Ô\Ãló"Ï0cdòÁzà{dTÔy€QEQEQEVü½]×Aÿ -hV[–W;I¼"/ü éÒ€3o´¥ÕlžžHs#Ñ€OúÀÝÁÿøVö_ô½÷ÇøW@Y¼çE0¨ÌŽÏ4›àuÁî£k¥¶´–ÏïÔdãÄÒ±©J”Ýæ‘ÑF½zjÔÛH]öþŽe†âyšb 4¤qŒãÔÔÉ i‘ê_%±OŸ4y±É$¦väŽø¨­î¢¹V1º’§ ¡#’;éSVŒb­ŒªNs“”Þ¤6¾Òl’T·‚XÒXÌl‚æM¡Oe°¿ðRÅá­&+K«Qj^;°þl¯#82ÌIã·ÞúKÈmà¸$B×#ßÎ8Éæ¬ÝêV_Û/m­üÄó¥TÞ}²y Ó´V´×ooÜB±bµ³Š/ùe ‘Œ e‰àv´e°¶šþÞöH·\[«¬O¸¡±»Œàç­fê…¾™b÷— |¥Ú>Q’I rI+\B“ÇÍÍ %#,0Hñ@ Ñÿ´Eû[<— !•|ÉätWþðBÅA÷¶+)®!IÒš5š@JFX`::œT”£EgQ@ ´ÿ(?ëšÿ*Áñ·ü¡ÿ¯…ÿÐZ·­?ãÊúæ¿Ê°|mÿ hëáô¤3‚¢Š)ˆ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+¤ðOü†fÿ¯vÿЖ¹ºé<ÿ!™¿ëÝ¿ô% ö¸ûù_×Ãÿ3]…qö?ò¾ÿ¯‡þfÎÚÛýX¢‹oõbŠb#½ÿV~•ÂOÿ#>Ÿÿ]Åww¿êÏÒ¸IÿägÓÿ븠æªÍ÷äÿ~ÛÿFÕªdp%Ä÷HÒ‘Ÿ•ˆ †b#ÜRçMâe…#Dwâ4Ç8þWü7®I¨x–ÊÄ®\àœÿË6­ÖøwáÆ96óžßñðÿãW4¯èš5êÞYÛȳ¨!YævÆFâ¼È`ë*ŠNJÉžµL^ÓqŒ]Úòÿ3;Vc}ã¦ÞjwV6‘؉ H. g,CÃíxéÍai×E¼%áÍ&p×3Á,¨é¨µšíVÁ˨%Ì8Áõ¯B¾Ó,58Ö;ûk´S•YâY>ÀŠŽ}Jº´ŠÒãL³–Ú/õpɲ'Ð^ŸK]O#­ÎÖC¬˪ÞN$jóÇrг2àH9!“ĺ½ÂÝÞ\iOr‡L–ÞVÔÙU³´ñpCrN3øWw.¥Ïe”Úmœ–‘œ¤”_¢‘LŸAÑîgŽyô«eŒI$·Fe Ž1U}n+hhQE†QEQEšÈ¯us»‘euo½ÆÐGr@S·Œ qÓ-¢Ú¾Ì¸Û”6 Œ.1ךۥ¿¯êƧͬµÕ¦›qs Ù} ïÔØ™‰o˜+ÛÀÛÐU»×Ô,ÒûV¼’{xm£‹+ÃWÏ2móãc]Þ—k¨"¥íŒ7*§*&„8Û"£}ÂY¢šM2ÙåˆÚÝI@:qÆ(Ð9ŽôS¼·þã~TyoýÆü¨´S¼·þã~TyoýÆü¨´S¼·þã~TyoýÆü¨´S¼·þã~TyoýÆü¨´S¼·þã~TyoýÆü¨´S¼·þã~TyoýÆü¨´S¼·þã~TyoýÆü¨µÿñï/û‡ùTÞ[ÿq¿*Žâ7û<¿#}ÃÛÚ€4è§yoýÆü¨òßûùPh§yoýÆü¨òßûùPh§yoýÆü¨òßûùPh§yoýÆü¨òßûùP7ñí/û‡ùW?âß/ÌÑ>Ó·ì_Ú)çïû¿u¶îöÝ·ñÅtW¿ÙeùîÞÔOh—P<ë4N0ÑÈ›•‡¸=hͯ|¦¾¿ŽÉ¡X[[ƒìÅñöq02nõñb¬Ãw-¶‘â TòWSº¿[`ÖÇ÷;åU§¡ ÉÏ9»¯ì‹?°ý‡û:±ôû?<¿ûçªMáÈEö-¼QÛZسȶ°ÀZFCqÀÀ-Û½ tÖßäïýuÿ3ítË/Ëi~°‹HttŽÜO¡0“﹬{HgÓü?g¬Ý­…ÄRiKnÐßJcePX®ß•·n c'½ïKµÔ ÛnBÈ&„>Óê28¥“Kµšæ+™layâŽV„Aè2(Ýkýoþ`´×—ùu„7Áá]è6ûxöé[¨E?ð"?ïš½wammñI¹Š,Oq É•Ë[09è ãšÛµÑÞßX¿Ô¤v’Kˆ‹³Z(û½yä“Û­\kDyãíÕ¥Œ’Ë(=p{gõ¿¯ãý![KÅÝ…µ·Ä &æ(±=Ä7&W,IlÀç ƒŽk©¦µ¢<ñÎöêÒÆI e”¸=³RyoýÆü©t°ÆÑNòßûùQå¿÷ò ­?ãÊúæ¿Ê°|mÿ hëáô­ëOøòƒþ¹¯ò¬Èúø_ý© ਢŠb (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ é<ÿ!™¿ëÝ¿ô%®nºOÿÈfoú÷oý h½®>ÇþC×ßõðÿÌ×a\}ü‡¯¿ëáÿ™¤3¶¶ÿV(¢ÛýX¢˜ˆïÕŸ¥p“ÿÈϧÿ×q]Ýïú³ô®ùôÿúî(¹¦DñGqpóH#EŽ<±m rÝéõVo¿'ûößú6ËÐÏgpÅ`ºIX “n#ò5?”¾¯ÿ}Ÿñ®&ma§Š?µÏæ|¡°ñÄ@$gŒ¡©t=N6Öà‚Þ\ ÉWEHÀ`ªÄ}Õæ¹cŒ¤ä£Õ/QE˱ØùKêÿ÷Ùÿ<¥õûìÿsZœº¥ßŒ£Ò­5il y¸>T1¹gó6ó½OôÅVƒÅw¶-w¥ÞÀ·Ú´ik“û¥¸Þ›ÕŽs³ zôâºÖ¿×¿3•éýy\ë¼¥õûìÿRú¿ýöƹÃâámg¨COx/¬Z4kXäy†N#ØØœr0jw×u5°Ž•^^-²¬w~fÐÊNâvF1Ö€7<¥õûìÿRú¿ýöƹ«ïËmusko¦¬óÅŒa®6gŒ>âv gê¨ñ¥ükq-Ö„±[ÙÝ-­ã­àf˜® ®Ñ¹pêzƒÏJ»[š§õýv:ÿ)}_þû?ãG”¾¯ÿ}Ÿñ®G[ñý®‘©]Ú¬VÒ ¦ãͽHd9ÄhF\€}½:Ô·Þ1¹‚}Eí4uc§Ç·}«cìdß•B¼à{Š:\:Øê|¥õûìÿRú¿ýöƹ7XÕ.|Q«Å1Üi±4$3MµâVˆ7Êì“ÜŠ¹á¯Oâvºû%¼6¤|….Ä’Ÿºêlolš,+›~Rú¿ýöƨ‹«‘ÿMþ€µ£Yÿòõuÿ]þ€´ ÏiÚ,/š‘&effˆÉÿ-€ õjiÔYIG÷¼™£ý67óªZ¼âÚÑ¥=·ës®%¼NÇîà}Mpâ±n„’HïÂ`ž".Hô«+Õ»VY$O¼¥Xq’ â­W#à›ö¿{÷c¢1ÿ¡ÖêÝÚÝϧ@²ô;§ÕFÑÃÄÄ2¨üQÿ®Œ=_k'¥Î|McQ÷ù‰5ý¼öÖNÄOr£\u ŒóøŠ³^fÐiíq£êúì1}†þk«‰å2‹¼/”=Å­0ú'ü%M®Ì'K3çg•´cËíÙÎ9é[¤s¶w4QE!…Q@Q@Q@Q@Q@Q@Q@GqÿÒÿ¸•IQÜÇ´¿îå@´QEQEQEQEEsÿ³¸ßÊ¢Ôu+=*ͮ理 ÄI'9$ú –çþ=fÿq¿•sÞ0anÚ-üÀýŽÏPYn „RŒ¡Ï°$sÚ€/éH}P]“h’˜ˆœº¹!v”ÆàrGÏ5nËTµÔ-æ2Ä„†3Àð‘“Àqï\J¾•~ºö£w¨½Ž“u¨@Ö·hB†’4S½K)ܽHÁÅ+ë7Ú—…îìEÓ]Ûá§Ù^ù^Yž&sàÕßÈ´jößüíú°õþ·:ñž’šeíìj.ÐËEGòÁûä(8\`äð3V¯üO¤i©Üݱ‰VHáyaèÅ”¹¬Ë› x²Yµ Ac.—½³•%IFlÆ=È+Þ³^h,~ØhÚ†¶ÚMëYî0läVÎ#ÁöÂhoF×õ¿ùÞÏúØíµ]b3JáM»"B‘‘™YØûäSÛYÓ—WJ7qý¾D2傎¤ã§ãŒ×3hÒjº‡†¬%µÂÊÍoî-À8öì9ç‚Xàÿv®_ÛA´7†ãyb»içòqÔÓ¶¶õü?àÜWÓî4¿á%ÒFªºk\²]3˜Ô<.ªÎ?„9]¤ûZÕÂx‡S´¼ñ˜–Z ½¸·¾[IB@ ‚NX•ã¥wt–ªã{Ø(¢ŠË´ÿ(?ëšÿ*Áñ·ü¡ÿ¯…ÿÐZ·­?ãÊúæ¿Ê°|mÿ hëáô¤3‚¢Š)ˆ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+¤ðOü†fÿ¯vÿЖ¹ºé<ÿ!™¿ëÝ¿ô% ö¸ûù_×Ãÿ3]…qö?ò¾ÿ¯‡þt†vÖßêÅ[«Sïú³ô®ùôÿúî+»½ÿV~•ÂOÿ#>Ÿÿ]Åw5Å$ÒN±.¢ŽÚ属}*zdsGoqq$„… áI9,À O&Ï9—Àž'v5Ÿ «ÌíØýßjÖð·„5½3^‚öý­â9K1%Hé´z×mý§h§÷’4#±ž6Œ¡`3SAuos»Èž)võòÜ6?*åŽ Œd¤–§tó*󃃵ž›ºž…¨\ké«éÚ¤V’‹SlË-¯œ îÝ‘ó®çUσPZoMFoí_µ Ã~è™@ÛÊp6í%vúw®žŠëþ¿_Ìàzÿ_#™>ûM–¢5 Aç¾¾hÝ®£ŒGå˜ùbäà3É9É©.¼?©êzE{¬Æ÷–÷ qks¦Á/÷—qÝœœò:×EEr°øFàÏö›ÍQ&¹mF;çd¶Ø§bl ãŽ;äý*{¿ ýªÏY·ûnßí+¤¹ÝågËÚc¯?s¯k£¦G4Snò¤GÚÅ[k‚:ƒïBþ¿òAý~æÌ ]¦±u¦jQÛ ²­qÖ¢`YFÝÊw §ãŠ}φ¾Ð<@>×·û^‹ýWúœG³=~o^Õ¿EÒÁ{;œõ¯‡o4ýYîìµDŽÒ%¸…í·—(»AVÜ6äcŒ”ºW‡.-5éu‹Ûè'¸’$‹{Aaw?ÌÛ›Žæ·¼Èüß+zù˜Ý³<ã×”êwÖâ¶– Ïÿ—«¯úè?ô­ Ïÿ—«¯úè?ô¤3:[{ÈÈc™DòºgøT>ðáë¥YŸûb?Ÿ#ªÎþc̱ƒ#]ÄùŠ£ïqüU\ߺyŠÿÓT‰æ$QúVS•4ýãX*¶÷ ÖVšn›%•´6êÇ,"nO¾5kÏûß¡¬›[“9tt!Ó’xÁœt')Eý™EqwV“ÊV Î6|ƒÅ\ZkÝØ‰©'ïnjùñÿ{ô4yñÿ{ô5J¹›/ B)¦‚#:ª«_ “öå—/¨$ð;Õu±=.v~|Þý |Þý sºv°·×ÓÝ´VñZÝIöm«µN2I«GTÓ…—ÛMý¯ÙIÇŸç.Ïûë8  >?ï~†>?ï~†³¡ž+˜Rh%Ibq•t`ÊÃØŠ’€.ùñÿ{ô4yñÿ{ô5JŠ»çÇýïÐÑçÇýïÐÕ*(ïŸ÷¿CGŸ÷¿CT¨  ¾|Þý |Þý R¢€.ùñÿ{ô4yñÿ{ô5JŠ»çÇýïÐÑçÇýïÐÕ*(ïŸ÷¿CQ\OÙ¥ù¿€ö>•^£Ÿþ=åÿpÿ*è¼øÿ½ú<øÿ½ú¥E]óãþ÷èhóãþ÷èj•wÏûß¡£Ïûß¡ªTPß>?ï~†>?ï~†©Q@.gì³|ßÀÝ¥KçÇýïÐÖuÇü{KþáþU¡}ö q(´ººf`«´{˜ŸÄ€¹ PÇŸ÷¿CTnl­.µK-BYd2Y‡ò}̰±Îq9îk xªÌèòê mvLWÙí¶(•e,. c«ø­ }DÉc-ÝÍÅŠÅ’Ës³;@É?+0ÇãÚµ#kÏûß¡£Ïûß¡®6/…°³’}>ê[»‹stÖöˆÅxfɱÇ\ç¯ßx“N±ÐÓWy[i?ï~†>?ï~†¹©¼E¶¥Å…ô),ÞDw/ùLç ÈlóØ‘ŠØ£Ì ¾|Þý |Þý R¢€iÿP×5þUƒãoùCÿ_ ÿ µoZÇ”õÍ•`øÛþ@Ðÿ×Âÿè-HgESQEQEQEQEQEQEWIàŸù Íÿ^íÿ¡-suÒx'þC3×»èK@íqö_ò¾ÿ¯‡þuØWeÿ!ëïúøçHgmmþ¬QE·ú±E1Þÿ«?Já'ÿ‘ŸOÿ®â»»ßõgé\$ÿò3éÿõÜPsUfûò¿mÿ£jÕCä5ij¢8G ©a‘•va‘Ç¥!œ‰×Dh‚K¹‹ROÚ’@?Þ«:°—~ µ$”´…ƒn™Û #O­g¿Ã+÷ f… ?ÑÏ@1ýïjÓðçnt]f+ûN9ÄA±BW$‚:–>µåS¥ŠU{_¹ìTžÙ¾YknÏü‹:³ê~<ŽÂKëø-—L3µºxFÿ3;HϵFjšmÝÞƒ«}x—ñÚÚ\Ýt ñùŸ¼ÛÅ@=0OÐê^MCUMJ=JþÊå`û96¬€2n݃¹¿¥F|#¦ 3ìHnÄÿiûP”™üïùé¼ç'·eÁ<ût­øD,ÂêÞk‹É¦º•&’ñävô ¡Ü 1íD~²û6£ åÕåñÔ6yÒ\:‡Ê”©E\Áϵ×õøˆ“ëv^,Ôî.£µ¼¾‹F VˆÈ‰…ÃsšÞðÆ­6¯g,—¶W#Ém ÄМr®®ÄƒùRZx]-n.n[VÔ纚Ü[‰æ‘ Æ€ämœž§5gIТҮn®ÝÕÝÕÖÑ,÷,¥ˆ\íUPÉíÞšíýnÄ÷¿õ²5k?þ^®¿ë ÿд+?þ^®¿ë ÿÐÎcZ»K+yævUÃ7ËÄÓ'ð®üPÇþZªþ5êB×ÎWÈB¦Gá¿Þ4fÇÿ<¡ÿ¾úÕljÂ{vŸ5Žü.2"ã(_çÿä¼|oÍô»÷å®sþõW‚ÎåÌþ«@ÑS}™ýV³?ªÐ4TßfU£ìÏê´ 7ÙŸÕhû3ú­CQÏÿòÿ¸•Zû3ú­Gqlÿf—•û‡ùPú*o³?ªÑögõZ†Š›ìÏê´}™ýV€!¢¦û3ú­fU h©¾Ìþ«GÙŸÕh­Çü{KþáþU›â-FïMÒüË+ig¸’E‰Lp´¾^z¹Uæp+bæÙþË/+÷ò©>Ìþ«@dQi#ÃmÖ:½ÄFà<ÌmfŽy%Îï3ê#ÀíYÌ×óh¥KöÕ‹S¿ö‚ðŸ<[à4…³Ï@øÏ<Œ×¢}™ýV«É£Ã5ô²"µÄ Ë?(lgއ4uþ¿¯/@9‹ã6‹âY¯—Oººµ¸±HZÄd(èÌB:¯N+ø_Z¶ðÌeg·iaÓjöí##0%Âqó…ÎJô³?ªÑögõZVÒß×_ó£¿õÓüŽ+OŽâóXѬ®Š“¥Ù‹‰‚¡P%q²0A$‚ãZz„?‹ôYÒ)(á¹ RUI ŒžÙÁ­¨4xm®nnbEY®X4ϸ’Ä ½8Xû3ú­SwwþµVV8}cuþ¿c%ž«öëk¤Í‹Q8vù¾Lí'~n•ÙTßfU£ìÏê´–Ö[ÑS}™ýV³?ªÐkOøòƒþ¹¯ò¬Èúø_ý«zÓþ< ÿ®kü«Æßò‡þ¾ÿAjC8*(¢˜‚Š( Š( Š( Š( Š( Š( ºOÿÈfoú÷oý k›®“Á?ò›þ½ÛÿBZïk²ÿõ÷ý|?ó®Â¸û/ù_×Ãÿ:C;koõbŠ-¿ÕŠ)ˆŽ÷ýYúW ?üŒúýwÝÞÿ«?Já'ÿ‘ŸOÿ®â€;š¥<¦§aæV5 ‚IbqÜÕÚλ?éÑöàÿÑ”†LÒÜG6ÞõèA/ÿ H—>c²¸VP WÞ‡8ëC\Ck6Q$jR>ZŸõ`ç*¥M¥j°]k6‘Å HK7*€¸Þ•Á|e5 nwË/œ`çÛÈíw·üô“þþñ¨Þî(玺Û,¹òãiˆgÇ\ óŠåõ)õ[ÏÿfYj¯aX‹Œ¤1¾çÞWÀñôÅQ°× ÜÌ‘o–;±.ÈÁÜÈ1•$eAÆx=û×Kÿ]ÈàëcºÞßóÒOûøÆíÿ=$ÿ¿‡ükÒnuíKÃí­E¨¬—6ï%½—”‚(ØýÑ»‰òqš¹áF[˜î »½¼šö¾t7p$OGm€Sƒƒ“Ó­è#¦ÞßóÒOûøÆíÿ=$ÿ¿‡üjÔn dÛÛþzIÿøÑ½¿ç¤Ÿ÷ðÿCºÔ6öÿž’ßÃþ4ooùé'ýü?ãPî£uM½¿ç¤Ÿ÷ðÿ§-9$ŸÞu'?µê’ÌçÏ?ôÓÿeZã=2”G%Êˉî8î#=øç^øiãtfÒ– …#79“È\>÷5q•Ýšâ”.ž¬ôÿx‡SÖõréwÃl¶æÜlU჆<å{ô­­GÄ‘Ùk6zlVÍpóL±M l,+ŸRpN=9ôÎ/€t=OLºÕ/5+&´k¤…&‘ü†BOÈÄ­K¨xRùn­$²Õ/¤.¦VXwÙ`Jäã€'ŽÜTÅj“¶mZwzõõ†£wZG—e=ȶŽà\«9c÷I@>éÇ®}«Rþk¸-÷YZ%ÔÛ€Øóy`RØ?ʹå]V_½Ýþ‹u4PÊc²)4>\IÐÈA|–<öÈõzçL]>ÒàAey«-ÑÛ5¼×{ÆÞz [hôý)t¢Yë÷ºŽ”÷šW™wÃ[É ¹PŠW«y˜å~ƒ>Ô¶~#k.ææM6à\Û\5´–Ð~ô—û­À#‘ÉÆ;ÖE½Ž¿¦xzæ>Áák‹¼ÃkèÍgvÒÄ.r ojßСò4¿³.™=‚ÆH <ˆìäòX•fÉ$œ’sšof"Ÿü$ÎÞµÖ£±S-ËF‰nÓm»„}§×=*áºÖþÄ$U™¹ó1å}¸íÙ½»ËëžØük2ÃO¸²ðU……抺„ˆ¡e´fŒÉ9ùŽÓŽ;ÔVn­aáb;[O³O;;XÙ •¼€T7ghç-€p3Cë`] "ñ]ãè“ê ¥ÄnÖÖ[¼¤Ä¸BÁö IìzV¯Úõ‘`d:U±»ß Þe6ÿx¹A¦ A>Ÿ‡m´èôuÔá‰R3lL|€>÷ÎBžGëYšnŸ{§è·°Ë¡™­®®ILYão&" –!y  àf‡×úì ¡§§øŽçP»‹ì¢ÖW†eæ Êqò°ûÙ8޼TÚ°úÕ”×Yµ£Ç;Âbw FÓŽqÐûsõ¬M7Â÷RéÆ)å›K‰/MÍ¥¬.’ù Œ;ƒ/ÞË`dx©ô+-_CŠäL’^ EÙšI"O."Ió~QÎxÊþ@S[ü¿Ëþžß?ó.§ˆ­­­nn5 ¨¶%ëÚ§‘ Œr:)$·®=*Õ¾¿¥ÜéóßÇx‚ÚDÌࡌŽÌÔW$Ò-’\[Cö–>&vÀó>÷Bx­ ÍR¿´Ö¯ç·ŠÎk©-Þ+Y¥R„ƒó°Ê‚Ý;ãŠKkú~KüÆ÷·õ»ÿ#¥Óuí7WšHlæv’5É$/Úz˜ Ž:ŠÒ®KC½›Qñ®£<¶fØÇc l†T“{žJÓ­u´tVQE (¢€ Žãþ=¥ÿpÿ*’£¸ÿiÜ?Ê€.ß^Á§YKwtû!‰rÇ>Àäô¨xwZ}vÂk‰,žÍ⸒¸fN9Çûsõ§ëZ7öÌvÊ/n-ZÞa2´*–ã!ÔƒŒç§\V?‡´ýkBŽå%Ž[ïµjnÌd’$òâ$Ÿ7å$ñ•ü€¡nïýleoësA¼DGŠ`ÑFŸpT‘¾Õ Ø„ …–ûÞײxÄðør]4OIÜþSº¶<•%ÈÇ qžœsO¿°¹›Åš=ìqn··†áe}Àm,oÉÎJ‡[ÑäÕuý)¤·ØG Ê\Ãè g'#wJ: êÇê~'ƒNñ—£ˆio˜ïpØ®Òxç%Hކ³.¼g{m§yýéÚuË[Ë(½C·*…0zôÝUãð–¡eoc#MöûäÔ ’Y²‹xÁEžÊI>¤šÌ»ð½Ü’ëh|*——w’Ëk©âO(66¶Co<à õøÁü×þé(ÁÑ\g 22)ÕœSCcoľlɬ’}€äþ&§¦÷%m©ÏüzÍþã*ƒR¸½¶¶ ab/'f ±¦(¥ˆ<}<Ô÷?ñë7ûü«/ÄÏ«®“³F·’[‰dTv‘^8ÏÞeÞ@-Ž=N{T²‘—‰šçIºº“K¹V· k-­¿ï‰cî°À#‘ÉÆ;Õ;Ä^xR=zx¾Í§t-»`Ï8éKáø~Ϥý•t«9c$*O";HO%Ë#6I$䓜×2l®`ð‡ü-s—sy"Çq`vÄ„¼œŽ9/ü ›]=»úšø¦÷Iðæy§Ïswråò×dp‡pf=Ü9'høÄG@†']>â転–A¶8Ã0\³ž'€2OëKâ½>çQðô––qy’™a`›‚𲫼t—Åv:—‡äµ´‹Ì™¦…‚î…•XòN:OKüÿj;Äz•ÆŸaYûmÝÄvðn±äãÙC£oâˆ4Q§Ü•$oµH6!(!GVûÞ×µwÿ‰§:Á¤[o?õÚ^ä€ÿßUjþÂæoh÷±ÅºÞÞ…•÷´°M¼g'8=)/??ëúî6Ayâý?S·ŠïF1Ø\] Xîʳ–oºÆ0>éÇ÷³í] r º¼Þ)’óPÐ®ç† Lv%'ƒÊ‰:H.±ç¶@àw®¾…°=Š(  »Oøòƒþ¹¯ò¬Èúø_ý«zÓþ< ÿ®kü«Æßò‡þ¾ÿAjC8*(¢˜‚Š( Š( Š( Š( Š( Š( ºOÿÈfoú÷oý k›®“Á?ò›þ½ÛÿBZïk²ÿõ÷ý|?ó®Â¸û/ù_×Ãÿ:C;koõbŠ-¿ÕŠ)ˆŽ÷ýYúW ?üŒúýwÝÞÿ«?Já'ÿ‘ŸOÿ®â€;šÌ¾®ˆQ‚£+ pC:ûŠÓ¥´ÿÙÿëš6¤3ÏÀ¶®A:×€ÀíW4Ÿ [i7éx·—3:_n9ì=ëÑ(¬V’wQW:e¯(¸¹;w¨øf [ÄŸo½í…˜€*Nñ¾íäœí##×ð­DÒì"’Éã¶D6HÉn#R ÇAÞ» +~–9zÜácðÖ‘³I»Åç‘ÜH©óu!Cmú€ XÓt› $Êlâeyˆ2<’¼ŽØé–bN¦k²¢•€ç7Ѿº:(°æú7×GEœßFúèè¢Às›êÕÊÌé§þÊ+f³ÿåêëþºýhÌ]xœé÷“Ú‹1&Éæóvç'=6ŸZ‹þ6ÿ zÿßÿþƹÿÈÑëw{ç¡¬È ÅÄéXã$p+Æ©‹¬ª8©uò=¨SÁÆ1SƒnË¿Uêvð™·ý×þÿÿö4Âfßô_ûÿÿØ× ŒÅƒGjÚ¶Ó#m6{‰äu˜Bf†5î¡€Ë{ñô©Ž++Ú[z1Â`¥>]›ÿ3_þ6ÿ zÿßÿþÆøLÛþëÿÿûÇ·µ°º±¸hÚåf‚1¤}» ãåÇQœñÍT²H¤¹Tš+‰wp©71üAþTþ³ˆº\Ûú‘k„iû›y¿ó:?øLÛþëÿÿû?á3oú¯ýÿÿìk&æÆÖÛVÛ.¦VE"ñæ«§ƒÈúTÒi6Ñ^Ü+<æ-ÄÏǘ ÇÊOLŒòqUíñ?Íù‘UÁiîÿ3Cþ6ÿ zÿßÿþÆøLÛþëÿÿûÏ‹I·šúÜGö‡·žÝ§Ty™ü¹Æ#Ó½B–6ÏupdŠêÚ h·Ë„ È3‘Ú‡_·—åþAõLò~/Ó¹­ÿ ›Ð=ïÿÿcGü&mÿ@õÿ¿ÿýcÏch“ZÈ.$ŽÎâ=àºîpA ¯‘׊I¬ííõÉìŠ\̈åb#{Ý¿¥/¬b?›òÿ!¬ íÏüÍŸøLÛþëÿÿûd¾/Y¢x¥Òã’7Yl†¨#o"¨Ë¤ÛC}8y&ð@&‘8óœ ‡¶rG5KQµŠÜ[ÍlÎ`¸z 1¹H$qבD±ˆ­eù0x94”wó~½ÍTñ%¤pC hvË $ÆGB£g“Ò¤ŸÅ‘Ý@ð\i1MŒ4rK¹X{‚¼Ökim4è‰ä[ªÚ¬îÌìWOÏ=DÚMÏÚ ‚6ŠQ8-¨ß!©ÉéŒ懈ÄíÁÖü¿‹ÿ3NÏÄ–º|F+-ÚÚ2rR3뀕gþ6ÿ zÿßÿþư.ôö´·ŽqqñHÅDIÁÈäQT·TKˆNÎ_‘qËð’WQü_ùgü&mÿ@õÿ¿ÿýð™·ý×þÿÿö5Éî£u/®×þoÁý›…þ_Åÿ™ÖÂfßô_ûÿÿØÑÿ ›Ð=ïÿÿc\žê7QõÚÿÍø þÍÂÿ/âÿÌë?á3oú¯ýÿÿìj9¼d̓û=yR?×û»\¾êlû§ÿtÓXÚÿÍø!<· o‡ñævßðŸ7ýÿ?û ?á>oú/þöÉZµ¯˜MßœPDOÔôüOªÚÅer‰ 9G‰dÛ&7&FpqÞŸÖëòós~_äOÔ0œÜ¼Ÿ‹ÿ3¦ÿ„ù¿è¿øÿØQÿ óÐ1ð#ÿ°¬h4ɬ..;´òc9Hi@ß©ëÐSt15(®ËHRHÕD^ŒäðתúÆ!´”·ôÿ"“r…­æÿÌè?á>oú/þöÂ|ßô _üÿì+×KYt{»É]–HÆaAüX 1>Ãp«ðè6ò%°0ß4 +] £$gž:­R­‰kòÿ"e†ÀÆ÷ŽÞoüÍøO›þ‹ÿý…ðŸ7ýÿ?û âÉÁ#9£ucõÚÿÍø#£û7 ü¿‹ÿ3°ŸÇŒÖò/öbŒ©ññíþíIÿ óÐ1ð#ÿ°®&FýÓÿºjÍ«Zù„ÝùÅàD@$ýOOÈÓXÊïí~_äK˰«ì~/üηþæÿ bÿàGÿaQ·b{„¸moú/þö‹ ®Ÿ¨êwAe1F7˜by`ªH$žãëU´«+ké$Iî#²F‹Ë¤äž€qGÖqÖ–þ‚úž &Ü6õÿ3~?Å ’É <ͺFY°\ã'g'¤ÿ„ù¿è¿øÿØW5¥Å=ÅÄêxYÊž… ?2?*p³¶:,·kpÏ::+ \*†Ï=OO­/¬â-~oÈo„Nܺ¾¿3£ÿ„ù¿è¿øÿØQÿ óÐ1ð#ÿ°®~ÞÖÂêÆá£k•š|Æ‘öì'—FsÇ5—º”±uão{òÿ"£€ÂJë“o7þgiÿ óÐ1ð#ÿ°£þæÿ bÿàGÿa\^ê7Týv¿ó~¿ìÜ/òþ/üÏT´ÿ(?ëšÿ*Áñ·ü¡ÿ¯…ÿÐZ·­?ãÊúæ¿Ê°|mÿ hëáô¯tùS‚¢Š)ˆ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+¤ðOü†fÿ¯vÿЖ¹ºé<ÿ!™¿ëÝ¿ô% ö¸û/ùß×Ãÿ:ì+²ÿý÷ý|?ó¤3¶¶ÿV(¢ÛýX¢˜ˆïÕŸ¥p“ÿÈϧÿ×q]Ýïú³ô®ùôÿúî(¹¥´ÿÙÿëš6¤¥´ÿÙÿëš6¤2íQLAEPEPEPEPEPYÿòõuÿ]þ€µ¡Yÿòõuÿ]þ€´åþ%W}vì!¿…eÛ ˆn£“x Œ…?{¡öïõ½ Ùj73]M-ÂÉ$Œ pHî=ª?øB´ïùïwÿ}¯ÿ^ELg7$–­žÔ17óÞö_‚±ÄHÛ®ç‘T,nÙUGÖ¶müC*Ãp—Âåíü¤an™ãÉÇ#ßµo§Ï{¿ûíøš?á Ó¿ç½ßýö¿üMLpxˆÞÇBÆà¹T5²òùœüךséqZÇ-Ü[s …H’ORwg‡ ®º¼‘F§wvÉ>YL9SÇbG¥uð…ißóÞïþû_þ&øB´ïùïwÿ}¯ÿMá+·{!¬Ã –ïî9ë«ûÛ¨¼Æ»Ha„F²­#zžG®:úSåÕ`–þ kØc‚ʘ2¾=y뎧¥o§Ï{¿ûíøš?á Ó¿ç½ßýö¿üM?ªâ<»‹ëØM®ÎvóSƒT¾W»k”‚8Äq•ÄÇv$Œ“ÍNúÕ«Íä²NÖ†Ô[3±Cƒ¸7§¶zw­¿øB´ïùïwÿ}¯ÿGü!Zwü÷»ÿ¾×ÿ‰£êØ-EõÜ’»²Øåµ ègû46Ë ·¶MŠdÆæ$’IÇNMIswe{¬]]J×1Ã#C‚Àû‚Gó®—þ­;þ{ÝÿßkÿÄÑÿVÿ=îÿïµÿâj~©]½R-fU³ðæ#ëV²Nbt­ZÔ[³±Sƒ¸7§¶zw¨'¹´½1ZEÑHaòí€sÈ[9aèrxÕѧÏ{¿ûíøš?á Ó¿ç½ßýö¿üMSÂâ%½ˆXì$~ʺ[»˜n ”‰(LR6ä}ERµÔ¢7–V–vóÍi$d6’oqà{jÙÿ„+Nÿž÷÷Úÿñ4§Ï{¿ûíøš§‡¯{¤¾ÿ;±˜[YÉ¿—•Œ]f¬t›;Uó•üÙ$):…pQ’8Vêíÿá Ó¿ç½ßýö¿üMð…ißóÞïþû_þ&³ž ´¥{~&Ô³,<#fÛùFê7WoÿVÿ=îÿïµÿâhÿ„+Nÿž÷÷Úÿñ5P¬iý«†îþãˆÝFêíÿá Ó¿ç½ßýö¿üMð…ißóÞïþû_þ&¨Ví\7w÷Fêdû§úî¿á Ó¿ç½ßýö¿üM2éËo# îòŸ¾¾ŸîÓú…a<× mßÜs:UÍ¥µÙšíd`¨|½ˆØHÎ(ž[fšFžòft,®èªL™ïÉãvŸð€é_óñ{ÿ}¯ÿGü :Wüü^ÿßkÿÄÕ}Nµ­dCÌpÜÜ×qÄÉ{Ò ³Œ0a+K)#‚pãè3ùÒÚß­¶s ïI$nŒ: ¹?ÔWkÿ•ÿ?¿÷Úÿñ4Â¥ÏÅïýö¿üMS¯{‡öŽÖ×{íçs–}x\Ïs$ñlY-ZH‡‰Î“SǬië5Ñ{Ñ5´HžR ÅÚÎp~•ÑÂ¥ÏÅïýö¿üMð€é_óñ{ÿ}¯ÿT°Ø‹ßOëþÍã0v²º8 eófy6…ÞŰ: Ó7W¡Â¥ÏÅïýö¿üMð€é_óñ{ÿ}¯ÿY}B±Ñý«†îþãΤoÝ?ÐÖŽ•simvf»Y*/bÃö$3Šì'ð–¶ò°¸¼ÈB~úú»RÂ¥ÏÅïýö¿üMTpU¢î’&YžI¦Þ¾G y,2]y±O<ÛŽçy+ŸbkX]¤·z¶³e\‡w{ñú ƺ?ø@t¯ùø½ÿ¾×ÿ‰£þ+þ~/ïµÿâj£„¬º"%˜ad’»ûºiþG¦^Ge{çH¯–ë…ë–Ró£L¼ŽÊ÷Î1_-× ×,¤ç]·ü :Wüü^ÿßkÿÄÑÿ•ÿ?¿÷Úÿñ5+][m –c…•îÞºlr2Ÿ²xzúIy!•¿Ü^õ-ùUxo#Jºµ!¼Éd”Ž€.ìçóÛÂ¥ÏÅïýö¿üMð€é_óñ{ÿ}¯ÿMàëÞé f8[Y·½ö9I¯4çÒⵎ[¸¶&çA ‘$ž¤îÎ;8‘º½ þ+þ~/ïµÿâhÿ„JÿŸ‹ßûíøšRÁV“½á™a¡¢oî<÷u«Ð¿áÒ¿çâ÷þû_þ&ø@t¯ùø½ÿ¾×ÿ‰©ú…bÿµpÝßÜkZÇ”õÍ•`øÛþ@Ðÿ×Âÿè-[ÖŸñåýs_åX>6ÿ4?õð¿ú W¶|ÁÁQEÄQEQEQEQEQEQEÒx'þC3×»èK\Ýtž ÿÌßõîßúÐ{\…—ü‡ï¿ëáÿuõÈYÈ~ûþ¾ùÒÚÛ«Qmþ¬QLDw¿êÏÒ¸IÿägÓÿ븮î÷ýYúW ?üŒúýwÜÒÚÇìÿõÍ?›RRÚÇìÿõÍ?›RvŠ(¦ ¢Š(¢Š(¢Š(¢Š(¢Š(¬ÿùzºÿ®ƒÿ@ZЬÿùzºÿ®ƒÿ@ZóoŠs½¿‡£–ßVÔtûÅyͿخZ/5÷•€?0ýGç^k©_j6Òjø€¬VÊÑí 8ŸæÌ{‘À¯hñ7…î|KºÛêZd›w›jfݹ†1‡\co¿ZæåøY«HŽŸð“Ú(uÚq¤çÆSB¢üMi­5 [SÔ/RxàxEäæCúÌ–8ÈØOONÕÑj:åüšÕŠØH±éË~¶“9@LîC žq‚G$ävæøëÁI|—ôº¢\Äjð˜Ä!7tË·]ÃÓ¥hj ѯnm§K 8dŽäO+ u&QÎTž:“žý(î¯ýj7³±£>­c¯X$Z¨¹7W86g@«ñ6ï¼6ñÉ8'ŒsWîõ;]BÊãû7ZD{cºg³U¸tñ· χ¥W·ÐµK]fîþ=VÕ¾Ó(fYqéo0`íÔ“ŠÔ½´¹x@Ón!³›vYÚßÌ =Êÿ:]Ôåm¼S~žöÛɯšÎÕ„`; œ3  ·åíÓ53êÚƒøvè[]j-¨Ãus†³C4 YKa0#i$›¯Z¹ÿ“5›—Ô\êMx/~Ö" @ 0™û»F1ŸÆ§·Ðõ H®¦‡UûFîa,×k” .С7pø³Oúü¿à‹úüÿà[\›¯Í=¯ˆnåòä&K±¡™09O, Áú©<ÖU§ˆ5K½Ò¯PÜÝêMiÛD¡Ö5·4}áOwµk¡j6· o«'Ûî®<ùî$µ ò…Ú0ÀÀóÅAÿ›GfÔœêmx/E؈$ ·3÷vñŒþ4uû¿@é÷þ¤6ÚõåˆÔ¬.ßí×ö× ³g2(e äÐgí"]gQÑ®ÖãWH.`¾–).RÝ8E=Ô犷má[&Šàêé§qq7,“@îÚ^pêj‹x"8t›› >æ U¹¼ûD¸µÊ¼yȈ€Ã*>½8Ç4—ùÁëóÿ€;LׯS@’{†ûtÒ]5¾žáfìgåbu$Œ Õß ]ßÝØ]ÿi\,÷ÞK t@ƒ p·×š™tE¼³úâØê!1g±Pct³~uNÇËáûyŸNmÑ®Úêe‚Ð1’.Hˆ“Çb9ôú»ÿ[ÁM?­ÿà£ñ–v· ok-ÔÒêïgOuÆïPÛNÕナ³ÿ X·³ÔþÂH/l™í’A'˜dâ=ÆAµµ\—†bÔ®4¬lÝ g ÷†hÑU¾ßý5ÿ¿/þ}¾úkÿ~_ü)ˆ³EVû|ô×þü¿øQöø?é¯ýùð  4Uo·ÁÿMïËÿ…oƒþšÿß—ÿ ³EVû|ô×þü¿øQöø?é¯ýùð  4Uo·ÁÿMïËÿ…oƒþšÿß—ÿ ³EVû|ô×þü¿øQöø?é¯ýùð  5Ÿÿ/W_õÐè Sý¾úkÿ~_ü*´l$šâE ¤nR¹ùTt?JC3ÅФO5W?ï_·ù­tŒeÝT{œS>ÓüöþúGíÃþ{§æ(ûpÿžéùнö˜?ç´÷Уí0Ïhÿï¡@~Ü?çº~b·ù«ßiƒþ{Gÿ} >ÓüöþúGíÃþ{§æ(ûpÿžéùнö˜?ç´÷Уí0Ïhÿï¡@~Ü?çº~b·ù«ßiƒþ{Gÿ} >ÓüöþúGíÃþ{§æ(ûpÿžéùнö˜?ç´÷Уí0Ïhÿï¡@~Ü?çº~b·ù«ßiƒþ{Gÿ} >ÓüöþúGíÃþ{§æ(ûpÿžéùнö˜?ç´÷Уí0Ïhÿï¡@~Ü?çº~b·ù«ßiƒþ{Gÿ} >ÓüöþúGíÃþ{§æ(ûpÿžéùнö˜?ç´÷Уí0Ïhÿï¡@~Ü?çº~b·ù«ßiƒþ{Gÿ} >ÓüöþúGíÃþ{§æ*9ïw[ÈÈIR0ô­/´Áÿ=£ÿ¾…iƒþ{Gÿ} _í(ÿçê/ûèQý¥üýEÿ} O´Áÿ=£ÿ¾…iƒþ{Gÿ} _í(ÿçê/ûèQý¥üýEÿ} O´Áÿ=£ÿ¾…iƒþ{Gÿ} _í(ÿçê/ûèQý¥üýEÿ} O´Áÿ=£ÿ¾…iƒþ{Gÿ} _í(ÿçê/ûèQý¥üýEÿ} O´Áÿ=£ÿ¾…iƒþ{Gÿ} dú‚5¼ \ÄIB =*Oí(ÿçê/ûèR}¦ùíýô(ûLóÚ?ûèPÿiGÿ?QßBí(ÿçê/ûèR}¦ùíýô(ûLóÚ?ûèPÿiGÿ?QßBí(ÿçê/ûèR}¦ùíýô(ûLóÚ?ûèPÿiGÿ?QßBí(ÿçê/ûèR}¦ùíýô(ûLóÚ?ûèPÿiGÿ?QßBí(ÿçê/ûèR}¦ùíýô(ûLóÚ?ûèPÿiGÿ?QßBí(ÿçê/ûèR}¦ùíýô(ûLóÚ?ûèPZÇ”õÍ•`øÛþ@Ðÿ×Âÿè-[ÿiƒþ{Gÿ} >ÓüöþúätW®}¦ùíýô(ûLóÚ?ûèP#Èè¯\ûLóÚ?ûèQö˜?ç´÷Р#¢½sí0Ïhÿï¡GÚ`ÿžÑÿßB€<ŽŠõÏ´Áÿ=£ÿ¾…iƒþ{Gÿ} ò:+×>Óüöþú}¦ùíýô(Èè¯\ûLóÚ?ûèQö˜?ç´÷Р#¢½sí0Ïhÿï¡GÚ`ÿžÑÿßB€<ŽºOÿÈfoú÷oý k¸ûLóÚ?ûèT€†‚=Ź /ùß×Ãÿ:ëë³ÿý÷ý|?ó ÖÛýX¢‹oõbŠb#½ÿV~•ÂOÿ#>Ÿÿ]Åww¿êÏÒ¸IÿägÓÿ븠æŠ(¤0¢‘›hÎ ú Š9 $s–ôé@QEQUÿc²ý’é°HÊÇ~•4yè[Ê’<bEÁ  h¢Š(¢Š(¢Š(¢Š[0¦YÜ€Y\(>ƒh?ÔÕ¼Õ+6ù®¿ë°ÿг5Û©aÕtŠi%¼e‘Uˆ<§8>£ .# Í¯0Ò/nî,,f°»ÖçÕšçù†W·ÙæÛ‹ü˜ÛýÞsZkK{­j^|zôá5'%·¾) jÀ+æ|)âš×úôÿ0z^¿äwù£5ÆZ#ëÍ©êÚ¥õ¼×2Á6³´B5‚Í·–'“Îjæ¿yn|ö˜‚Þ@Ë !ŸwïuÃsßµ _Ãñ§Oš3\f¯â=bÒãY’Í,M®–‘»G*>ù.ㆠ¡«–šåô÷vz´–+åÙ‹´¸‰YW$Á‰é޹¥p:|Ñšâ¬|g(}D^®#¶³7‰$ÒÁ¸A\IœöÃ)Òx—VÓ$ŠMV;&‚[)®ÄvÊáÓ`S´±bïuÀ§·õëþL?¯ëï;<Ñšätj:†¥½Õº´3Bdó"´ž! |¬dlƒÁéÒ« 9/üq©ÝH,åŽËÉ.!gt2|³¸äõÁ¡è S´ó£ó¼Ÿ1<Ý»¶nç¸ô§æ¼ãEÕ"²xõ3n‘LJÖ_&,àaØàd“ù“Z^+Ö&ós`.™­xÖIá ˆËH0ÙÏc§JŸ×¯ùõù™Ûæ›æ§™åî]øÎÜó\V‡uiuKY$žòÎy€ÉoÄÑr®®ÄƒùV]´—s¯ˆuKC›átmâ?0ùq¹z’ǯ|Ðôª;,ÑšÁðÀÕ"Ò„Z¼¥çŒùc*rBñ»qb[=rqô¬hõ‹›KY×O‚Ò)î5·µÜêì¼ç.Fì“Çbmýtÿ0éë¯ù¾hÍr2x¢öÆÛR‚öÞÞ]BÑâHü’V9|Ó„<ä¯=G=)ðê^!:•Þ˜í¥½ÔvñOˆäDÃ9 ÌIáNÐêóFk Ä£S—Hhô™v\H|¾“†ã;ƒ¸Îr3Ó¡«<—­¤Dú‰ÿIa–_/fßlnlýsÍ+î®hÍpºf¯~4­ÏKŠÆÙ¯b|ÄwDs€7ƒÎ{šž][éx’Þ%ÔEñ±}ˆòF ŨÜFÞp9÷ïMÿ_žhÍqpø«R’Õaû$fú[Ák²A,18+»~×ù¸Œg¨ëWtíO\º¼º´éÍ%ÚG3ª:ˆ c´düÜŽ§_—ùŠçOš3\×ŠŽ´Ð@4w;·îusòßx0ÆvíÇ9ÝŽ:Õ«ùe—ow²yE›´¢±ÚIC=8?&ôl¤®Ò6óFk‹UÕ¥žÇNÒ—O„ 6;“çÆì9ãhà sšŠM%––máXno†BðÉp±ygkacù›æèx¦Õ™+S³óSÌò÷.ügnyÇ®)Ù®#ûN{¦Ðu‰íÚÞïí­e(ØÈ$· €À6 U`Jì·Z: —4f¢Þ=hÞ=i.hÍE¼zѼzй£5ñëFñë@æŒÔ[Ç­Ç­Kš3Qo´o´.hÍE¼zѼzй£5ñëFñë@æŒÔ[Ç­Ç­Kš3Qo´o´.hÍE¼zѼzй£5ñëFñë@æŒÔ[Ç­Ç­Kš3Qo´o´.hÍE¼zÔ7bymdŽÖá`™†V~ß|df˜óTYU/eERŠø¤°?ÈStÈ.­,– ËÑw"ð%òö;g““ïJç:ŒŸõÅ?›ÒõÈYÿÈ~ûþ¾ù×_\…Ÿü‡ï¿ëáÿ;[oõbŠ-¿ÕŠ)ˆŽ÷ýYúW ?üŒúýwÝÞÿ«?Já'ÿ‘ŸOÿ®â€;š(¢Â‘T.qÜæ–Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š‚Ù±%çýwú-+2-4Ô¢½žþúí¡,ÐÇq )a‚@pHäšÒx%¼J¨_•в“Ó<ƒŒ~Tß.÷þ{Úÿà;ñt—a“§ÇenÒ4Q– ¹òI=õ¬åð醿ækmcR·4ïmÝÇ®2„öõ­_*÷þ{Úÿà;ñtyW¿óÞ×ÿÛÿ‹£­À˺ðÜÜ\Ííõ—Ú¿ãá-¤P²œ`’HÆ*ÌÚ=´ÚzAiVÙJ°Ý„ ŽHöªß•{ÿ=íð¿øº<«ßùïkÿ€íÿÅѰnt;[¤Õä˜ I&ÚÃåvü¼qÇ®in´;;Ùæ–1¼ëO±ºnÀ)œç¦søÕß*÷þ{Úÿà;ñtyW¿óÞ×ÿÛÿ‹  ¨¼= ¹¸šk‹ÍEäµ6Þ]˧1õÚ0£¯©¬/A»›T[md·_\G)!ð6®ÎØIÏJêü«ßùïkÿ€íÿÅÑå^ÿÏ{_üoþ.ëúûÀ©¦iGK8MBúxU6$3Ȭ¨;c ·$ÔÐXEííÒ´†K;`$`m]£zT¾Uïü÷µÿÀvÿâèò¯罯þ·ÿC×pØË·ðÅ…¸CN顳dvKìÜ{ž˜©lôV²…áUÔš#—¼Š|¡Ø©Ûœ|Õÿ*÷þ{Úÿà;ñtyW¿óÞ×ÿÛÿ‹  ºn•›=ÅÁ¹¹¹¹¸Ú$švRÄ.p>P=©šuœö¶¢T)³ºqp§<¬„aÆ=üM]ò¯罯þ·ÿG•{ÿ=íð¿øºŽþ'ž8äI.C@þhŽ y¤ò6x úW0ú¥s§@®’[Í.®o$J»àCžsÈ$qÓ={×Wå^ÿÏ{_üoþ.*÷þ{Úÿà;ñt-?¯ë°_×ÞcÏ [Ť_ÄRëPžè†•ä™D²ÆÜ7v㎂²­4=ji¯nZâòÚI’Qîn¦¯¹Îbßœ×[å^ÿÏ{_üoþ.*÷þ{Úÿà;ñt-ÄÕÕ‰÷𡍤Áã½€]M$ Áma•QeÝónÀ8ê9«Uïü÷µÿÀvÿâèò¯罯þ·ÿ@ÎVjBÓMnm#›ÏšÚE 0sÎGC[ðØÿf-–û€Ë7ÚÏ™ûï7ûû½ cµiyW¿óÞ×ÿÛÿ‹£Ê½ÿžö¿øßü]6ÀÇÔ´©?²R"ÚŽ£óXšõ­Ü¶×of·73\ÛQn&U‰3ŸÞqÏ<ã'«Sʽÿžö¿øßü]Uïü÷µÿÀvÿâèjãNÇ:Þ»“Y·oµÝZÁš–ækYK0nFŸÿ]Åw4QUïo`Óí$¹¸}± ç$žÀ䞤2ÅŒž"Žm.ÒúÛNÔ.åK,qD (we‚ί麄®Ÿí±c pAê"€-QY6úüRêqØÍc{k$ÁŒ-<`,»zããŽyÅ$ ŠMJ;ì¯m$”1…î#dÛÉÁãŽyÅkÑX¶^&´½¹‚%·ºŠ+’ÂÚâXÀŽr9ùNsÐ2qÅIc®h\´pé·¢‘â7,#å ø÷c#(ZŠÄ³ñE•íäP$7IìÉos$`E3.rç=Ž2qÅOe¯Øê­ÆŸjÒI$ ½äÛ„<‘€{àŽÜ{Ð¥‘o¯Å.¥ŒÖW¶’JÂ×€²í댎9矊,¯o"!ºHçfK{™#)™s§9ìq3Ž(nŠ©=ãC¨Z[Œ¬áÉf˜+.Ð yn½ºR[êÚuåÃ[Ûj³Ì¿z8¦Vaõæ€.QU&Õtë{¥µžþÖ+†ÆØžeW9é€NjÝVU޹ý¡tÑæވVGˆÜ°ŒG”$ãÝŒŒt¥²×ìu RãOµi$’ÞòlÂHÀ=ðGn=èRŠÇ¶ñ3ê1YKe}jó†0=ÄAV]¼œrH8ç e¯Š,î® AÔp\3,R JTps‘À=@Î(nŠ/­$ò<»¨_Ïö@|À9%} ¡o¯Å.§„ÖW¶²LÂÓÆË·®0N8çœPµ˜Úí˜×£Ñ×Ì{—FbÊ¿"`‚}pAÅ%–¿c¨j—}«I$&÷“fòFï‚;qï@”V=·ˆ¡ŸQŠÊ[+ëWœ1î" ²íäã’AÇ8 TšŽ¹Ÿt-VÖêî(ÌÑÛ %8ÜrG~Þ:P¥Ÿ6«ðüšµ®%Œ[ãφ܌úRiZÅž«kÁum,ÞZ¼±Å(b„Ž„‘øÑÜ + þ‹HO:ƒAköÕ‰ Ê4I³¶þÎ{VÃÜÁˆ¼ñ¨•‚ÆK¼ž@¦€%¢ªÏ©Ø[,­=í´KÉ*¨F# ž9¤:®œ,¾Úoí~ÉœyþrìÏûÙÅ[¢¨IêÉ-Ú  ºWa*νgåÇøt§WN7¿bö¦ë8ò<åߟ÷sš·ES·Õ´Ûˆ·¶Ô-g™~ôqL¬ÃêÍ>=FÆk·´ŠòÝîSﲩuú®r(Í‹¨xŠÖÚúÎÊÞâÖk‰®– b‚ñ‚ $¨9íÞ¯ÏxÐê–Á#+8rY¦ Ë´ž[¯n”y‡‘nЧo«i·s´Ú…¬ó %£Šefö5[Hñ¬Ù ‹{˜Cß$FU/Ïñxé@´UkmFÊòšÖòÞx“ïŸuºdâK‰š2#ÚŠÀmn»#§¾k¸¢’Ч1=×Û|Cáë"x7Çr|©Ók¯Ê#µ`è«ý¡¥è0Zi× umt%{¶€¢,a›v£dq]ÈÒìÆ¦Ú”MÓ&Íììv¯(' Ðt5-••¾Ÿi­¬~\1‚rN9ÏSÍ4ÆpZŠ›ÛK­>ãí“j©(ºò $ˆfR§Ìè8Âã9®ãOÔbÔRááIaà;À™N =3P7‡ô׿¯¼ÂO0o™Ùz„-´´"†(d1¤k’ÛQ@'$þ$æ’Úß×OòÞÿ×S“²B¾ µþǵÕm i$kÔ¹YN@sÛ±÷}ëU ”xÒ{ƒù'ODm;K ã>¸í[TP´°Þ·9=.õµ-gí·öz„w¼vÉe*Çÿyœ®70sÀà{åiwV÷Ú[‹MIn!–W»†X[ìІ ¸ÅÆ3œÚNA>¦½Šêqž±º°ÖÍäö¥µú9·Œ+d7(Ãøwõí‚1éR(’÷Åv·º}®§âE¹kØ\Eã`~‡p_¹Áç5×Ñ@w8Ë]XÓõý<ö÷'žòΖ® -‚ÅÎò77n:ÙH%4žàÄþIÓÑ›NÒÂF8Ï®;VÕï°¬ršMéÔµµ½Ô-5§ã´…ì¥XàNìX®70sÇAï‰m^msÌš-M-Í“EúllÎÎIʾÐN1ŒgŽMvRc95ÒõY<,<Û™¢“û=£:|QG³w–@w ôൕ]j:#Úé—6‚ÆÙ–êY­Ì;²€·ÍϧÙÑM½_Ÿüó´Há,mî4û? Ý\é÷oº\G4qÀÎè\ü¤ Ç•»â$šKM6ö i¥[[¸î$Lɳ/RFEê3„6÷†¢÷Kav —Y‚P&·e;-¥Š‘2:š}Þš‘^ênÐ^À©ökfePþH¶C.r¿q]ź[úéþBþ¿?ó9+eÔï/Ù?;…ŽWÅŸéÀÛ[Új’_ÂU­ü¸˜Û³ä_?» ¹äv«ž)ŠG´Ó$kY.VØ¥™!ˆÈv€rv€Ië] –ƒ8­ºŒpëzŽ›§Íöá{œÄ’|ë·¥Pû ÜÚ_ˆvC}:ÜKlÑ™ìü§“wW¦:ãµz%Ó°N½£ÜÍ©jkedÆm-™ÑjÎRRY3жÞ1î)Ë ¾¥ªêSeß[ØI¦$dhŽã£œÙ®ÒŠ]-ýj×åþG%¥jÓév²^[ܽ” [ÊÖžDÒî;pPã8$sœÖ‰ Šk[ií‹,3y½µ±œ£`™9$Q[2ÃÊXÒE P@ ä¨4ú ´8··Õõ9|9,‰5„ëö6H »p¤« ¸cƒëU“JÔ ¶2Ik=Ö¡c©­ÕÑÿ‰´€Éœ …#å ã½w´S¾·þ·¸t±Ê]jWÚ´×[YßGdtÙYí2ÓÃ$ã=8¬*ÊOµh-ei«‹«}¢å¯–O&4Ù‡ æt=†Ïå^ƒE Oë×üÁꂊ(¤EPEPEPEPEPEPEPEPEPEP\…Ÿü‡ï¿ë»:ëë³ÿý÷ýwoç@­·ú±EßêÅÄG{þ¬ý+„ŸþF}?þ»ŠîïÕŸ¥p“ÿÈϧÿ×q@ÍQHaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP\…Ÿü‡ï¿ë»:ëë³ÿý÷ýwoç@­·ú±EßêÅÄG{þ¬ý+„ŸþF}?þ»ŠîïÕŸ¥p“ÿÈϧÿ×q@ÍU[òâÝ©’hã%z€ÎÇàM!–¨¦bYzÝà\¿üUC"Öþ{hÚCŽ9;— ’àòI?Â(Í‘«ê÷6¶v–QÜÏx\(’)Wjä󵪬^"’fHdŠ+;¨ïRÖx¥&@w.á±—¹Á8sBÔ‡CEdÿÂM¤}¿ì_j"o7Éæ' æw~6çÛ5z[Ûxo ´’LO8f6Ÿ˜.3ÏAÔPŠ+&é6èŒ÷.wÈñ(H$v,‡ 0ªO½*õ•õ¶£j—V“,°¾pËíÔCí@(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šh$¾\{As3s€zqø“ìÓÿÏxÿïÑÿâ©–Çý6qÿLãþoVËP"¿Ù§ÿžñÿߣÿÅQöiÿç´÷èÿñUc5®j¿ØÚ=Æ¡äùÞH_ÝîÛœ°p}igìÓÿÏhÿïÑÿâ¨û4ÿóÚ?ûôøª­« +í6ÛÊó>Û1‹vülÂ3gçîã·ZŽiWW¿c‚ì4ä²§ÈÁ\¯P¬FÖ#ÐH ¿fŸþ{Gÿ~ÿGÙ§ÿžÑÿߣÿÅV—â˜#ðöu«Nßi»´E9m¤ç €ô­ÛB×R´K«9–h_8eöê¡ö§`ìÓÿÏxÿïÑÿâ¨û4ÿóÞ?ûôøª±š7P7C"¬…Y_…eç®1ùÑ#ìLã' êIÀ§^š×ÞSÿ 5E9ÂÇÿ]cÿÐÅ!“ iṉ̃ƒéå“úæ—ìÓÿÏxÿïÑÿâªÁ4›©ˆƒìÓÿÏhÿïÑÿâ¨û4ÿóÚ?ûôøªË»×®µ%Ó´­;í³Àª× óˆ£w*3‚KΩ®/ tù¢Úä,ÿä?}ÿ]Ûù×_\…Ÿü‡ï¿ë»:î<³µ¶ÿV(¢ÛýX¢˜ˆïÕŸ¥p“ÿÈϧÿ×q]Ýïú³ô®ùôÿúî(¹¨.Ô´q¥¶KN?ʧ¢É?´`þìÿø'ÿUƒ ¯eUÂ4h€º•$‚äðyþ!RÑ@î.©¬éËm”Í$3™r¸‚'Ò™yáøí£Ó¢Ó-¾Xõ¹šMÌ@,Ç,zzšè¨¦´©ÉM¢ê ¢j6ëo™¥ÕEÄk½yO5[vsÇñÖ´u«kѪiš•©»6¾bIº£p9ˆ;Ö忯ÂÁÕ³Ž=GLÔôw}5ä¹’âúo³,©¸+G9ÛœZé¼;csiow-Ük ×wOpaV 僀Gñ“Žæµ^hæx‘¥;¨,¹ëƒÛ5%1QHaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPP¶Ûûúåóz˜ËUdÅrÓ$fUt ʤ$‚2@þ#M7Ï×çÿ@<ßzÇñM¤ú§†ï,­£Ë(P¨X üÀžO«ž|ŸóãuùÇÿÅÑçÉÿ>7_œü]´1.|1eoªéW:^›moäÌæy!UBÆÃñ䎕KAÐf±’ÊÚúÂíÍ›×ö‰h2„Eò ÛÆMu|ŸóãuùÇÿÅÑçÉÿ>7_œü]±Ç@ºŽ?†íÛOi®mþÔžRLƒzñóN:‡º_ZÜÙÛÞKv‹ ×—OraV # €Gñ“Žæ¬±*JÚdÍ$yØäDYs×§ùòÏ×çÿNã.y¾ô jŸŸ'üøÝ~qÿñtyòÏ×çÿH ®Ÿ/iÿ]þ€ôÛ£ˆã?ôÚ/ý j5ó®."f…¡Š"[ç*Y›v'ŒÞ¥¹¥€ª¼2ºîé• ŒþTe¥æ›æÕCq/{Œÿ²ÑãÿB¤óäÿŸ¯Î?þ.€2Z=KI×o¯lì~ßm±ÝdI"u]¿Æ@ €;ñT5ÛmsS2–³¼0MfQ-í¯’1§v|Ï™C‚ ÷#¯ÒùòÏ×çÿGŸ'üøÝ~qÿñtZêÀ´w2tí:îßV·šXÀ‰4¨íY·ƒûÀÜŒg?JÎÑôý_BûÈÓÍÓ}-f…'Ex™YˆRîǵtþ|ŸóãuùÇÿÅÑçÉÿ>7_œü]6îïýuÿ1[úû¿ÈåïtK™5}Bi´ûËË]@#2[ê>HO++®õ 8ê3[:]ņ¿©¿“‹K„„Å pq±6•#9ÏÍ_óäÿŸ¯Î?þ.>OùñºüãÿâèNÁbç›OI2¨yòÏ×çÿA¸¹*DVS+ž#&ÑîpÄþ”†>ÀçN¶?ôÉ?®:éÿÒ§ÿ®òÿèÆ®Ö„ñÂDhßË_è·Ëy+Cž7‘J2‚7H!ˆîMrâ¡)Ar£»R¨ÜÝ´2üÊ_2¬ÿcjô›þû‹ÿ‹£ûRÿ |ß÷Ü_ü]p{¿ÊzÿY¡üÈÆ/l¦¸öËsÒ´¨DÉBÇ%X1g<ŒñTÌw6W¶,#ÝI,òȱ¸P°H°8éï]/ö6¥ÿ@ù¿ï¸¿øº?±uŒé’:10’>‡~Emj·õc–NƒÚ{må©ÏK§]MHT †¼ûQ…'ÙÆ í ƒœç©M‹”‰ãµxd+,¾mØ•ˆU#9,}†Íncj_ô›þû‹ÿ‹£ûRÿ |ß÷Ü_ü];ÖþP¶÷çþ¿¦fñ_^ÌàlÑî8EéÈïV<ʵý©Ð>oûî/þ.ìmKþóßqñuŒ©U“¿)¼+Ђ²’ëøêVß[þlÜ]{Eþ…%dÿcêô›þû‹ÿ‹­ýNžÊ9¥¹$—h䪹ÆqÆrǧµo†¥8Ô»G66½)Òå‹»6+´ÿý÷ýwoç]}rŸò¾ÿ®íüëÑ9խئ[¿ü …S?µ€äoÿü) ôª+Íáckô·ÿ¿þÂÆÖ?èoÿü(Ò¨¯5ÿ…¬Ðßþþ7øQÿ Xÿ =¿ýüoð J¢¼×þ6±ÿ@{ûøßáGü,mcþ€öÿ÷ñ¿Â€=*Šó_øXÚÇýíÿïã…ð±µúÛÿ߯ÿ ôª+Íáckô·ÿ¿þÂÆÖ?èoÿü(Ò¨¯5ÿ…¬Ðßþþ7øQÿ Xÿ =¿ýüoð J¢¼×þ6±ÿ@{ûøßáGü,mcþ€öÿ÷ñ¿Â€=*Šó_øXÚÇýíÿïã…ð±µúÛÿ߯ÿ ôª+Íáckô·ÿ¿þÂÆÖ?èoÿü(Ò¨¯5ÿ…¬Ðßþþ7øQÿ Xÿ =¿ýüoð J¢¼×þ6±ÿ@{ûøßáGü,mcþ€öÿ÷ñ¿Â€=*Šó_øXÚÇýíÿïã…ð±µúÛÿ߯ÿ ôª+Íáckô·ÿ¿þÂÆÖ?èoÿü(Ò¨¯5ÿ…¬Ðßþþ7øQÿ Xÿ =¿ýüoð J¢¼×þ6±ÿ@{ûøßáGü,mcþ€öÿ÷ñ¿Â€=*Šó_øXÚÇýíÿïã…ð±µúÛÿ߯ÿ ôª+Íáckô·ÿ¿þÂÆÖ?èoÿü(Ò¨¯5ÿ…¬Ðßþþ7øQÿ Xÿ =¿ýüoð J¢¼×þ6±ÿ@{ûøßáGü,mcþ€öÿ÷ñ¿Â€=*Šó_øXÚÇýíÿïã…ð±µúÛÿ߯ÿ ôª+Íáckô·ÿ¿þÂÆÖ?èoÿü(Ò¨¯5ÿ…¬Ðßþþ7øQÿ Xÿ =¿ýüoð J¢¼×þ6±ÿ@{ûøßáGü,mcþ€öÿ÷ñ¿Â€=*Šó_øXÚÇýíÿïã…ð±µúÛÿ߯ÿ ôª+Íáckô·ÿ¿þÂÆÖ?èoÿü(Ò¨¯5ÿ…¬Ðßþþ7øQÿ Xÿ =¿ýüoð J¢¼×þ6±ÿ@{ûøßáGü,mcþ€öÿ÷ñ¿Â€=*Šó_øXÚÇýíÿïã…ð±µúÛÿ߯ÿ ôª+Íáckô·ÿ¿þÂÆÖ?èoÿü(Ò¨¯5ÿ…¬Ðßþþ7øQÿ Xÿ =¿ýüoð J¢¼×þ6±ÿ@{ûøßáGü,mcþ€öÿ÷ñ¿Â€=*Šó_øXÚÇýíÿïã…ð±µúÛÿ߯ÿ ôª+Íáckô·ÿ¿þÂÆÖ?èoÿü(Ò¨¯5ÿ…¬Ðßþþ7øQÿ Xÿ =¿ýüoð J¢¼×þ6±ÿ@{ûøßáGü,mcþ€öÿ÷ñ¿Â€=*Šó_øXÚÇýíÿïã…ð±µúÛÿ߯ÿ ôª+Íáckô·ÿ¿þÂÆÖ?èoÿü(Ò¨¯5ÿ…¬Ðßþþ7øRˆºÁ?ò·ÿ¿þé5ÉY¯üO¯Oý7oçTm> stream ÿØÿàJFIFÿá°ExifII*JR(i‡Züÿÿ)( üÿÿ)( 0210‘ 0100 ÿÿ Ê ,ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀ,Ê"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?÷ú3EA4¡šÈ0Ü(ï\Oмuiáò±2´×.2±!Æ©=…qñZ副–ƒþÞÿEÀö´§­jOZñOøZW_ô Oü ?üEð´®¿èþŸþ"•Àö¿µ'­jOZñOøZW_ôÿOÿGü-+¯úGÿ'ÿˆ¢à{_Ú“Öµ'­x§ü-+¯úGÿ'ÿˆ£þ•×ý£ÿÀ“ÿÄQp=¯íIëGÚ“Ö¼Sþ•×ý£ÿÀ“ÿÄQÿ FëþÑÿàIÿâ(¸×ö¤õ£íIë^)ÿ FëþÑÿàIÿâ(ÿ…£uÿ@èÿð$ÿñ\kûRzÑö¤õ¯ÿ…£uÿ@èÿð$ÿñÂѺÿ |øøŠ.µý©=hûRz׊ÂѺÿ |øøŠ_øZ7_ôÿOÿEÀö¯µ'­jOZñ_øZ7_ôÿOÿGü-¯úÇÿ'ÿˆ¢à{WÚ“Öµ'­x¯ü-¯úÇÿ'ÿˆ£þ×ýãÿÀ“ÿÄQp=«íIëGÚ“Ö¼WþÏýãÿÀ“ÿÄQÿ FçþñàIÿâ(¸Õö¤õ£íIë^+ÿ FçþñàIÿâ(ÿ…£sÿ>àKñ\jûRzÑö¤õ¯ÿ…¡sÿ>àKñÂйÿŸ¿ð%¿øŠ.µ}©=hûRz׊ÿÂйÿŸ¿ð%¿øŠ?áh\ÿÏ„_øßüEÚ¾Ôž´}©=kÅáh\ÿÏ„_øßüEð´.çÂ/ü oþ"‹í_jOZ>Ôžµâ¿ð´.çÂ/ü oþ"—þ…ÏüøEÿ-ÿÄQp=§íIëGÚ“Ö¼[þ…ÏüøÅÿ-ÿÆèÿ…¡sÿ>1àKñº.´ý©=hûRz׋ÂйÿŸ¿ð%¿øÝð´.çÆ/ü oþ7EÀöŸµ'­jOZñoøZ?óãþ·ÿ£þ…ÏüøÅÿ-ÿÆè¸Óö¤õ£íIë^-ÿ >çþ|aÿÀ–ÿãtÂϹÿŸð%¿øÝÚ~Ôž´}©=kÅ¿ágÜÿÏŒ?øßünøY÷?óãþ7ÿ¢à{OÚ“Öµ'­x·ü,ûŸùò‡ÿÿÑÿ >çþ|¡ÿÀ†ÿãt\iûRzÑö¤õ¯ÿ…Ÿsÿ>0ÿàCñº?ágÜÿÏŒ?øßün‹í?jOZ>Ôžµâßð³îçÆü oþ7Gü- Ÿùñ‡ÿ[ÿÑp=§íIëGÚ“Ö¼[þ…ÏüøÅÿ-ÿÆèÿ…¡sÿ>1àKñº.´ý©=hûRz׋ÂйÿŸ¿ð%¿øÝð´.çÆ/ü oþ7EÀöŸµ'­jOZñoøZ?óãþ·ÿ£þ…ÏüøÅÿ-ÿÆè¸Óö¤õ£íIë^-ÿ Bçþ|"ÿÀ–ÿâ)?áh\ÿÏ„_øßüEÚ¾Ôž´}©=kÅáh\ÿÏ„_øßüEð´.çÂ/ü oþ"‹í_jOZ>Ôžµâ¿ð´.çÂ/ü oþ"øZ?óáþ·ÿEÀö¯µ'­jOZñ_øZ?óáþ·ÿGü- Ÿùð‹ÿ[ÿˆ¢à{WÚ“Öµ'­x¯ü-Ÿùð‹ÿ[ÿˆ£þÏýâÿÀ“ÿÄQp=«íIëGÚ“Ö¼WþÏýâÿÀ“ÿÄQÿ FëþñÿàIÿâ(¸Õö¤õ£íIë^+ÿ FëþñÿàIÿâ(ÿ…£uÿ@øÿð$ÿñ\jûRzÑö¤õ¯ÿ…£uÿ@øÿð$ÿñÂѺÿ |øøŠ.µ}©=hûRz׊ÿÂѺÿ |øøŠOøZ7_ôÿOÿEÀö¿µ'­jOZñOøZ7_ôÿOÿGü-¯úGÿ'ÿˆ¢à{_Ú“Öµ'­x§ü-¯úGÿ'ÿˆ£þ×ý£ÿÀ“ÿÄQp=¯íIëGÚ“Ö¼Sþ×ý£ÿÀ“ÿÄQÿ JëþÑÿàIÿâ(¸×ö¤õ£íIë^)ÿ JëþÑÿàIÿâ(ÿ…¥uÿ@èÿð$ÿñ\kûRzÑö¤õ¯ÿ…¥uÿ@èÿð$ÿñÂÒºÿ tøøŠ.µý©=hûJú׊ÂÒºÿ tøøŠÅ;¡ÿ0ÔÿÀ“ÿÄQp=¸N§½<05ãßd~™ˆû˜çÜT:ô­\¶Õ¬¢º¶“|R ƒý½07è¦#núCÒ²5K.&9­vé\Ö¼äBßJð¯\´þ+¾vlà¢a±©5‡º¯øóâÃþÒÿè"²÷T±’î­‡ðÖ¯Ž5F´al~l`î €wž1·wÏ·…º´äñ üš"é bû… äsŸ^pO¥BöW±¼ÈöWJЮùU¡`c_VùG¹§>üZý¬Ø]‹lnóü†Ù]ØÆ+»Õ/´¹£ñ«¯`ë¨iéVâaç ŒëE†½j—º%³ê°­ö7—q\,I·£ à7ny¤ô_ןù×úôÿ?Àࢳ½žÝî!³¹’ÎùRd\uËA²½[AvÖWBÔŒ‰Ì-åÿßXÅuºEÝ´Þû¥ªÚ[Ã2˜Eµó%ÆI?#Ä8p—ִ쯴‹O É :¥«[É¥²žý̾qtBNÕAD´¸-lpa¾û@¶û מWx‹Èmå}vã8÷¦¥¥Ü–­t–— l¿ze‰Š«c»üA`< º‘¸OíÈ쎘±nö’0øëÂ÷õâ´í¼Adº „¶ZZýžËÉšÖîöH›p0•óêGãMéë¿ü¼¶þ¿®¿qÃèºEÖ³Cp`yV9'Žë=Éè?P\ÙI¯q§Û¤·G;ij>ÒG}+²ðæ§núFƒå¶š,'v½·žãÉó”¶AŸŽÇÖ¹+H[x²}JÙÈïšxÙO 7’?(·¼—õÐ>Íÿ®¥Qkt@"Öàƒ/’‰¹“û>÷·Z‘4ûù Á,.ØÂq(XùgѸùô¯í¿ ÇxÐ «v‚:²H$_šbX˜Ç?{qÖ³4r;Ë &u×­´Ù-®äŸQ†YLfpÏ»ü|dcßÚ’þ¿¯¼õý}Ç me{z¬Ö–WW ¿xà 8\ŠÒÔt­WL‹qw-å’Ý2Gb™ê8µ«u¯@¾Õ›L¾6²Ï¬4±Ç¾\†"½p;J×—WÓ/<3m£Å©[ZÞÉ¥F>Õç(\¯X¿‡?Q×ð'Kÿ[ÚÛúÞÇäöïq Ì&wʳ"ã®X Sa~-~ÖlnŶ3ç˜ËÇ®ìbºÝ*îÚ_-KU´¶†(¥0‹kæIòIù!Ãü¾µ¹otº|>½»Ömíôèô•YI1Ý>PãônÜõâ›Òÿ×q/ëð<Ú;é­šæ++©-×;¦HYc®X Smí/.ÑÞÖÒâuN]¡‰œ/ÔÅwþ¿Òl,4ùWS¶ˆ)»ŠëPxÌyÎБgkœâ²âºKï YÙéšý¦•-³ÌnbšäÁçn9RûÜqŠOK‚9D´»’Õ®’Òá­—ïL±1Aõl`T«Ò­¼Adº „¶ZZýžËÉšÖîöH›p0•óêGã^u¦ÜÙÛ] /¬>ÝÒ<Ÿ=¢ç±Ü¼ñMîÐt¸¶I{{¤ED“ȱ)c€  ûsVµ QÓuc=¤æRå#+blwN>aô¦Ú_ÙÅâk[è­¥œwQÉäù†_-Aù'¡5Ô]9FÙvHÄ1ÎÞrx=«¡—VÓäñ%ÝÓ_ÚŸ;@1´žrá¦8ùsŸ½íÖ‡§õäÅ_õåþgö ñiö³av-±Ÿ8ÀÛ1ë»­=3ÃÚµ²Kmu§‰% b·’ä ¤Ûœí\C×Û[Ý.Ÿ‡ïnõ›{}:=%DÖRLwO” b>Ûž¼W=áËk+=µ+=WHƒYœ²F/.Õ>ÊœŒ…ä—#×±üÛê ¡Ç’A ‚8 ö¤ÝL”æt.®UˆÞ‡pl ÷ôÝÔ’î£uEºÔ.ê7T[¨Ý@î£uEºÔ.ê7T[¨Ý@î£uEºÔ.ê7T[¨Ý@î£uEºÔ.ê7T[¨Ý@î£uEºÔ.ê7T[¨Ý@î£uEºÔ.ê7T[¨Ý@î£uEºÔ.ê7T[¨Ý@î£uEºÔ.ê7T[¨Ý@î£uEºÔ.ê7T[¨Ý@î£uEºÔ.ê7T[¨Ý@î£uEºÔ.êUß#¬qÎä*SPî©ì§X/¡•¾ê““éGõ¦ô^€F>Ñy)”Ž|¬ñþ•‘©XI§LÉæDù(ãÀZÙi7±o´ÌŸì®ÜÍMfë7[xà YÁÝ“×#úÒöšTŸQ½û8e0ROò¨ïôÈà·7VWbæ8~A+øŽ ^[Ã$°Ï3¯–Ë… c%}Hô5ÍÖÛKÂêWÎ$*±œ¨^ÄúPZ.ˆu0Ó\\˜-ãpå˜úñ­[ß Û¬,tûÙZeÌAÝì“p¯£›`‘»&åd“F}¹ý*Åš›#I*È0 ™³¸:“òŽÜ÷çžO—WR3jût>‡ —Ѷ¯u«íýÜ®ãÜ{ƒ^ðÂñ’ÊxK|¢|õ¼ÆæQ-ÔÒ¨ÀyÀô滿‡@˜ÓAü…z±>~I&Ò=ÊÑ÷ «UŸ§œÄµ¡TH×ûµËøƒýCý+¨»\¿ˆ?Ô?Ò€>|ñ!Lj.ÿÞ_ýV^êÒñ/üŒ7UÿÐETµÓ5 äg³Óï.QN ·y>„¨5# ÝFê·‘~ïf‰žàZ/ÈD‡?0ë×Vx^Þy!“ãbƒ‘ph7Qº™E?uªÒhÚ´¶ââ=+Px î­¬…HõÎ1z†ÊÎ}Bí-mÕL®€ÇKÐuªeÓ¯-Ý-ÝÅÀsB°\îàr1ƒÖ«P÷Qº™O’aeŠHètÞ…w/b3Ô{кÕ/Ø.ÄÎÖÒ$qg2 „û¤‚AõªôýÔn¦Q@ÝV¯5;»ô¶K©¼Å¶ˆCÚÔŸÇš¥Z#@ÖÙC S Œ‚,äçÿ  ;¨ÝLé׊(û¨ÝW­ôKÛ£d#¦¬_&wgŽ:©kk=íÂÁn›å`H]Áz žI  n£u ±Å¯¬r‚cb0ƒ^i”ýÔn¦SãŠYwyQI&Å.Û¶ÕIÇAï@ê7P"”ÄÒˆ¤1+i œàÓ'juµ¼—wPÛE2gXÓ'$àQ`ºÔ³ÂöóÉ ˜ßlŒƒƒQеÔ…ÛÍNîý-’êo1m¢Â6µAÀçñæªî¦Q@ÝFêeýÔn¦Q@ÝFêeýÔn¦Q@ÝFêeýÔn¦Q@ÝFêeýÔn¦Q@ÝFêeýÔn¦Q@ÝFêeýÔn¦Q@ÝFêeýÔn¦Q@ÝFêeýÔn¦Q@ÝFêeýÔn¦Q@ÝFêeýÔn¦Q@ÝFêeýÔn¦Q@ÝFêe:]J‹µd`=)<îI ’z’j(u¸xÉòØ®zàÐ× ç.KÓ& ¢€--áG€£êاM¨O:í’FaèqÈTè©p‹|ÍjZ«8ÅÁIÙô¸ýÕè Î|ïúéýyåzÃ^“ÿ×Oè*Ѹéßê–´k;NÿTµ£LC_î×/âõô®¡þírþ ÿPÿJùëÄ¿ò0ÝýWÿA¥§Ëi‚$7‹vÈu Ù¦XÛ>_rU¸ü)šÆ‹ªêZÝìÖ:eíÔJáKÁ:ƒµN2^GçUáñ?‘äbêþNíþ_ÙeÛ»Î1Œã½KÙ¯ëpêŸõ±¡¤Ãlm´ë¸âÃmK&M˜R°?ËÚ®Åkcmk¨_ÜBí9!“~ž·[rÖeÛ’OÍ׎Ն<9â„hÚÀˆ>ðŸe—hn™Æ:ûÕˆ´¿As%ÌV:üsÉ÷åHf ßSŒš-¯õåþC_×ãþf>¦m[Tº61É©‘ŒQÈ0ʹèy=*¥l?†§ŠOøE|Eÿ@ Sÿäÿ ²«5uǵn’¯¢g:\{•b{R„Ÿ~GáZR‹ OJµµÓ­´úy•®Í¸iÌ,X‰:Œ6Wàb±þX–Þ?íØcA´D¾r…˜íPAŠ-­šÚµˆ lîŠ5•Tç®@â“W¿Ÿüóéo/øχàŠ M åKÍÄ Ì„ ÷½9®Röig¸2KP±äŠ…ï•UѦëê! e©ÌXŠOÝœçåãŽyâ‹­;ij®ìõ;‰HÁyb‘ÛR)õ*º­.Äx“F³¶fôéöÌßݵ˜·ü†ÿ¾…b W'J¾'þ½ßü*Ü>ñDO#GÖ#!GÙk(ܧ¨8j`[¸¸‡Y´ñ¥$1†ó`±PLI¸€íò€8ô­~=Lûm’Ùîò• ©r¯93M¼™†zŒö¬%ð߉Ò'‰4]]c“ÐZÊc¦F9ÅNÚ?Œ^ÈY>®µ¨é‚bƒþŒRJË@êmÍáë;„½†ÖÖ/´j¤\i˜P6F¹Uô;?¹\¦ºmN·t¶QÇ´oåÆ#P ç\dûšºš‹cx]4½m^Û yAŒsÂñÀäôõ¨?áñýuOü“ü(¶ºMLŠèašSà™³3ø˜Æ3¸ð<¶ª¿ðŠø‹þ€§þÉþñῈ EÕü’ÛÌe—in™Æ:óO§õÜ]MËÛµësiVðØÙÚ´–÷k ŒdêÛóÐ’9ã¥-­…±½Ó´Ã¥Û¾Ÿqd³KxaÌ™(YœKÕv¶F3Ž0G5&‹âùmÒM3\{dû°´”_¢ã…Ñ|^–mfºf¸¶¬rЈ%à8ÅM´þ¼ÿ¯×õø_3kDP_Â…‰˜ï¸ÇÞþ•^=6Ìx£MµK;itÆ·v·˜Æí#cîHå·º~î1îs"Ðü[iZ^·#UKy@RF pHâˆô/±¬ZV¶‹c[y@BÃŽ8ÈëC@O}<©àý5µ†XY&#[«²‘.p‚W·B(ñ 0ÜX¦¡a´6o$D-3DÅr›8À<äûPÅ¢ø¾ Wµ‡L×#·åâH%ßP -Þãð‚óM×nB}Ñ4>ߦGÚsõÐxLÂ.uCp®ÐÿfϼFÁXŒ„‚ü Vÿ„WÄ_ôÕ?ðOð§Åá¿Á¿ÊÑux÷©FÙk(ܧ¨ÐLBã!yŽ}0kÄ–vö »¶¶M‘)ËÎ|²T¹ö$¶Ò/Ŧ5´Z^¼“½Á™îV9ƒ8*iã'§­c·…üFÌY´-T±9$ÚIÏéP•¿¯$Swþ¼ÙEkÿÂ+â/újŸø'øQÿ¯ˆ¿èªàŸáT#"Š×ÿ„WÄ_ôÕ?ðOð£þ_ÐTÿÀ9?€2(­øE|Eÿ@ Sÿäÿ ?áñý5Oü“ü("Š×ÿ„WÄ_ôÕ?ðOð£þ_ÐTÿÀ9?€2(­øE|Eÿ@ Sÿäÿ ?áñý5Oü“ü("Š×ÿ„WÄ_ôÕ?ðOð£þ_ÐTÿÀ9?€2(­øE|Eÿ@ Sÿäÿ ?áñý5Oü“ü("Š×ÿ„WÄ_ôÕ?ðOð£þ_ÐTÿÀ9?€2(­øE|Eÿ@ Sÿäÿ ?áñý5Oü“ü("Š×ÿ„WÄ_ôÕ?ðOð£þ_ÐTÿÀ9?€2(­øE|Eÿ@ Sÿäÿ ?áñý5Oü“ü("Š×ÿ„WÄ_ôÕ?ðOð£þ_ÐTÿÀ9?€2(­øE|Eÿ@ Sÿäÿ ?áñý5Oü“ü("Š×ÿ„WÄ_ôÕ?ðOð£þ_ÐTÿÀ9?€2(­øE|Eÿ@ Sÿäÿ ?áñý5Oü“ü("Š×ÿ„WÄ_ôÕ?ðOð£þ_ÐTÿÀ9?€2(­øE|Eÿ@ Sÿäÿ ?áñý5Oü“ü("Š×ÿ„WÄ_ôÕ?ðOð£þ_ÐTÿÀ9?€2(­øE|Eÿ@ Sÿäÿ ?áñý5Oü“ü("Š×ÿ„WÄ_ôÕ?ðOð£þ_ÐTÿÀ9?€2(­øE|Eÿ@ Sÿäÿ ?áñý5Oü“ü("Š×ÿ„WÄ_ôÕ?ðOð£þ_ÐTÿÀ9?€2(­øE|Eÿ@ Sÿäÿ ?áñý5Oü“ü("Š×ÿ„WÄ_ôÕ?ðOð£þ_ÐTÿÀ9?€2(­øE|Eÿ@ Sÿäÿ ?áñý5Oü“ü("Š×ÿ„WÄ_ôÕ?ðOð£þ_ÐTÿÀ9?€2(­øE|Eÿ@ Sÿäÿ ?áñý5Oü“ü("½ á¯ü·ÿ®ƒù å?áñý5Oü“ü+³ðŸ{¦Í,7Ö—²³ Ÿ­q:ÝΣ{á­CL¶óMÌs·ÙäŸË^–ôç±­x/îu½2SçJ¹·¢¹Ê¬¦2½@'åîHéÚ›V Ü`ô5BÔbQÑduÐ ÈU ÞÞ^é²Ëw7ÚNéos°!ž x|9ç§\f¯Û«“þ»Kÿ¡µ 5QHaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPU&Õ4ûyŒSß[E(ê2©5«¨> ,¬­,žXûùY³œîúW;=Ì—0êÌq½Þï•\²®cT8ÝÏJãÅc#CN¢o±Ø×®ÈáýzGÿ¡½léÚÌ··ÂÚKh£Ìm hæ/÷JŒTz±µÏù#ÿ¯Hÿô7®šu#R<ÐwA{nþ©kF³´ïõKZ5  »\¿ˆ?Ô?Òº‡ûµËøƒýCý(Àçe¾«ïvþCZÚ7Ðj÷SÀÐk½…Ë1„.Þ0{w‹àèæ{kñ M!ûNNF>QêG¡®Ÿn¡ÿ>Ïÿ}Çþ4†aiž¹³Ôm'–;1ä+‡ž7c$å†2ÙO´Ñu••ËÚ­­¬¢]Ñ33ÈA$ äûÖÖÝCþ}ŸþûühÛ¨ϳÿßqÿ;Å”’ëWjÈ#$Vòwcü©×­›y ý©ûuùöûî?ñ¨¥¶½‘}•òÁ‡ßNêG÷½ésZÓWÒî,ZV‹ÌÁYd«8ïÈ—qáýFæ{KÉ5Kv¾·Y;Yf6VÇðoÈ Ôm$×îd†É!”+Cù›ƒ„à|½E!Øëh®=üQý§a¬Ù¶Kˆl^e{KÁ:ã}àØ«Z·v«¥Xê:ÙþÕn ¼Ë8“yU†N9ïõ¦—õ÷ÿŸõø™ÓQ\æ¡.¥uâÄÓmu9l &såÅ–mûyܧŒzU3âÙt˜ï-5C×¶×)n’oÇ(uܬÄä'Ï^œu£¥ÿ­ì{]ξŠá¯üM>³¥G †ÈîN£¬¿f¼Ê° ·É2Žé29«2jòèRÝy¶÷Mme Zý¥BZFQË.sêÇ·âëð¸_ŽÂŠäµ/\ BÚþÊ[;«u†LZÝýôy‚¯´È Œ:·e¨j’ø§VµX£–ʈny¶´@Æ Ú¡NìŸR(¢¢¹];_‘t}*+;I®ï/FD¸¹É ­ó3É·ÜÇz™üS'ö|rE§fõ¯~ÂöÒL$œŸ¾ÈÆqÞ :J+–›Åò[ÀÉ>žÞ¥Øµxä¹%%w†2mèG¶sÅtv²K-¬rOE+ ²$›Àú6*šŠ( Š( Šóx‡]ð犤’i’[yP˜"'ûdC߿ӫà+ÍcR[ËëÛŸ6ÎG!òÞ`ë´ ãŒ.rÙÓœõ§Ó­cÿÂQ¤Ïáÿ¿oþÂQ¤Ïáÿ¿oþçtW?µg?¶‘èŸð”ióøïÛÿ…ð”ióøïÛÿ…yÝ{VÚG¢ÂQ¤Ïáÿ¿oþÂQ¤Ïáÿ¿oþçtQíX{i‰ÿ F‘ÿ?‡þý¿øQÿ F‘ÿ?‡þý¿øWÐH$àQíXý¬Dÿ„£HÿŸÃÿ~ßü(ÿ„£HÿŸÃÿ~ßü+ÎÁÈÈ¢k!{i‰ÿ F‘ÿ?‡þý¿øQÿ F‘ÿ?‡þý¿øWdgô£ ’22:Š=¬‡ídz/ü%GüþûöÿáGü%Güþûöÿá^wHH^¤ÜÑídÖG¢ÿÂQ¤Ïáÿ¿oþÂQ¤Ïáÿ¿oþçt…€ ==èö²k#Ñá(Ò?çðÿß·ÿ ?á(Ò?çðÿß·ÿ óº(ö¬^ÚG¢ÂQ¤Ïáÿ¿oþÂQ¤Ïáÿ¿oþçtQíX{i‰ÿ F‘ÿ?‡þý¿øQÿ F‘ÿ?‡þý¿øWÑGµaí¤z'ü%GüþûöÿáGü%Güþûöÿá^wEÕÚÈôOøJ4ùü?÷íÿÂøJ4ùü?÷íÿ¼èÀA¡´{Yµ‘èŸð”ióøïÛÿ…ð”ióøïÛÿ…yÝ{V/m#Ñ?á(Ò?çðÿß·ÿ ?á(Ò?çðÿß·ÿ óº(ö¬=´Dÿ„£HÿŸÃÿ~ßü(ÿ„£HÿŸÃÿ~ßü+Îè£Ú°öÒ=þ#þýûð£þ#þýûð¯;¢jÃÛHôOøJ4ùü?÷íÿÂøJ4ùü?÷íÿ¼îŠ=«m#Ñ?á(Ò?çðÿß·ÿ ©¤êFÿÅwžMÌ’ZyE$íä€zsšá«£ðWü†fÿ¯vÿЖ³Fåçþgn|þÑ5ö_æŽòŠ­}o=Í¿—o{-›îÏ™#za¥rzN¯©Á¤Û_Ý_\jW7s½¬e"K‡` eP@ ¤ž¿Jì2ó;Z+ž>(û=¥ù¾±xolÙ­£Iæ8M­OŽj½þµs.«i÷Ö_b¼]>IãÙ7˜®˜ Ø ã#é7d4®ìu4W š¸Ó5»Uçžm‚ÝO2È[§·©=€­-[R¸·»Ô™aº‹FiÆÙ÷DŒ è¥FH#ïzvª’·ãø_ü…ÆßæuVn‡su¥Ã-üDí•1ÌdÞ ŽOʸ>Ü×aâ}E¢ÓîV¸–iîÄRÛÏd#€!r%Ú£8éóž1CVvw1èÔV>#™Î£q-ŠE¦Ø<©%ÇŸ—%:á6ÿZKo^5ż7šI¶kÈšKOô€ûÊÛå8ç¸ëKÌ~GAEs–¾.‚æçF‡È*u(ZRwäB@ÎÓÇ9!‡o»PZx¾{û«k{}:%yãó—Ï»ò÷F\¨(6Ç$qŒŽh·@:ª+•Öáë˜.ì§Ô5!v,c1ÛGR®FÒÇæ%Ž8ì=«oÎ_îMÿ~›ü(!`§z“ÓzÏæ)ßúþ½Ddj-ôúÚj–”V² o³²Émæ‚7nÈù†çUŸÂHÖ™ÒDÜ‹³zè¬L€måzmÛÆßJé*6™ŠüÌèU-Êëõ ÿ¯‘ú%ÕÌ6bòú)%¶¼[Ñ[ya‚‚6ãqÇ^¹?JVð×ö¥Íäßkò¾Ó0ãËÝ·d…óÔg9ÅmùËýÉ¿ïÓ…rÿroûôßáEÃúýLM_Ã_Ú·7s}¯ÊûE¼PãËÝ·d…óÔg9ÅN4{˜5Ùõ [õŽ­†âƒqb£+nxÇcÒµ<åþäß÷é¿Â9¹7ýúoð  ¼--¥–š¶š•{`såus–VLý;ö§Çá€[¼g/Åüó4c÷¯‚À?(è\b·<åþäß÷é¿Â9¹7ýúoð¢úÜ i´+¯?Q–Úöûtªî“Úù«´ M¤néœÕÝK]H‚Áe2ˆ³ó·©'ØsÀì*à ;Ôž›Ð®1RPEPEP{ðüjž)¸¿Ô/¤žÆQ¸E’7M¹Â;~^æç„|#qá«»Ù$Ôhe;bˆp6ŽŒßívã·×Ž®Š)ÖŸL~´äu ÅÊÛíÜŽCq•ÇøÔÔÙ#IP£Œ©ê+ZúœjÝFÁ0ž=ꬣl¡ÔÞÉ׊BMXH§‘í^B¤Bà шô¨~ÜË»I gm«ÕBžû²{U¡¬(Ù£¡SÏëQý‰6ýù7îßædnÎ1鎔] 4W{‰g·Ø îyB+¨ 0êOó«/$v/–B6‚£ž9턉2ɹC‚3ü©ÒÀ³B#fa‚`yÈïEÐ]6õkx%Øç%² :õëœTæþÏ–RÀ‰³°`än8残uÝ‚ËƘ,Aäù’É\tÇ]h¯%á…šLºB·,çÐüëF Áf2,’.ã–PF üªzM¡;t (¢‚Š( Š( Š( Š( º?Èfoú÷oý kœ®Á_ò›þ½ÛÿBZ‰|põÿ3¿ÿ/?Âÿ4w•Ï'…ü½ÖÎ;æK›K†¹‚äG÷X³Ï# Açò®†Šï ç…þÑi~/¯žkÛÆFkˆã å˜ùM«“€<“žiÉáɧ{¹µ=CíWÚ›Exá,qž¸\žIç9í[ôP9wðj\ˆšòóÌ–%¶ŠXâØÑº¶VE98#Ž?Çuü>×7Í{yæ´ÚØ¥ÙÍÙ$—œué[t›€êGçC×úþ»‚Óúþ»ú=îŸf-®ï’ì"ªFË–BŽ~c“ïÅbEáÏìØô›a_LY7˜£´Øî7ïÚ\±ïèu{—ûÃó£rÿx~tï­Ã¥Œ›}(ôýJÊy ÐßÍ,…ÚTIÛ©éëPXè1_Z\j™¼HÉl¢ÜŒc“¹±Ça׊ÝܿޗûÃó¤)7ã{}F8¯äŠK™„°H#æØ-µyç—O½íVµ_ ɨÚC§Çw:|Hˆ±›Pò&Þèû†Ó€9Á®‡rÿx~tn_ïÎ… Sh)ª\^éÚ‚[‹­¦xæ¶Ê1¹NჀ=jõž™öMSP½ó·}°ÆvmÆÍ«·®yÍ_ܿޗûÃ󠢓rÿx~tn_ï΀ŠMËýáùѹ¼?:Z)7/÷‡çFåþðüèh¤Ü¿Þ—ûÃó  hÓëºÖ6÷Mo+aþÇð·û'üç¥rW €±´û%ùKåaö™_%\ÉQØŽÞ½ëÑw/÷‡çFåþðüèD`·Š#+ÊQ™$9fÀê}ë‹Õ¿än“ýÕþUÛ‚B q·ü²º¿Ê€; ;ýRÖgißê–´h¯÷k—ñú‡úWPÿv¹¨¥PðüƒnAègˆ¡r+¥ÔõQdÂ4ɀİÈPs¯C\Ï„Ž4Éÿëæýk{WšÁc¹’Hå ¹^5$õÁºJ@_²¿K¸ýÆ µ”žøÏ¼O¾#ìÒ6aì@È®\_–0Ë‚r9bpã=}ÞÕ­ï&…y¿8U”)'9?Èä~ÀÓ¦ZÈ‘ÚI,Œª¡ä,Ìp y'è)õ•~ßñKjõÊçù½);+Ž*í"õž³¦j2ìuK—Q’°N®@ü ]Ípš>›‡îæ¶±´‚Ê$‘dŠBóJ xü (9É=*{›«oYu ÃwqµfšYÚE‰L»YÕI!p¹è;UIYØ”îzhÍp¯q¤Þjpiw×ñG¦5ÈÌg1ÊËóŸ˜díöâ’òäé¾›PÓµk›»™£ˆ¼ÒÝ€gœÐqéÅ/ëúû‡ý~_æwy£upq[k†Æþ8u(¢ŠEˆÄSyØ6ï˜ J‚¡—×¥;ÏŸPÐÖ->k¸^Öð¥ÔêI&%|“ÜÈéŽ(³¾#ìÒ6aì@È¥¬}:þ ï ´öÆãËò$_ô‡Þà®A²sÈ<äÖÅFפéMÍ %#,0HñRW1wcmmãÝ*æ(ñ5Ä7W,IlÀç ƒŽjOJÒkzVŸ5ìÖvS‰YÞLM#¨Sxäu'ƒÎ(ìÍ›+ø5 ,D3<¸cæSƒK¨Zé–¦æî_. BçibIàI>¸¹¹Óô‚Îáü¹µÉ`’w¸(Jdõ—®Hv;ûÕ‹›;ö´±¶Ô.KBúÄB*õå’5*r¦\+g<Žüеµ¼¿˜m{ùþÿ#³´Õ-/eò y<Ï(Kµât!I ˜àñÖ¥¼¼‚ÂÕ®n\¤J@,·SÀç©®/_šçO›Sµ¶½¼Hâ±¶ØMó)i˜¸œäŽ3Ö›«Éw£6­cm¨^´BÞÚxÚ[†wšm¬“œ:fšÖÂÛúôÿ3¸Žæ f–åV’Š(HÈÏáN~µÎèñÇÿ §ˆ$28—÷ Gæ¥LkómÎ ÈÆqê+¢~´†yßü"ÚÏüùÿäTÿ?áÖçÏÿ"§ø×¢»¬hÎìÌNµKJÕìõ›wšÍÉTrŒ`CB9—²‰—²‰ÃÿÂ-¬ÿÏŸþEOñ£þmgþ|ÿò*zEö‰$ÞÎhUb¹à’9ïN6PúÍÿßühöH=”O:ÿ„[YÿŸ?üŠŸãGü"ÚÏüùÿäTÿô³€wŸÿ$ÿ⪴ˆýÙ.Tö"áÎ?H£ÙD~Ê' ÿ¶³ÿ>ù?ÆøEµŸùóÿÈ©þ5ÌüMäñ£HA‘m<¶ u+,«ŸÒ¸èù»ö“ÈÿZjŒ{’é£ÕÿáÖçÏÿ"§øÑÿ¶³ÿ>ù?ƹvŒw߯r çëÏcåÖÐÂFJ÷2¢íaŸð‹k?óçÿ‘Sühÿ„[YÿŸ?üŠŸãRyt†:¿¨Çùˆç]¿ø?áÖçÏÿ"§øÑÿ¶³ÿ>ù?Ʊ..eíŸçQ×3£ìtªI«›ÿð‹k?óçÿ‘Sühÿ„[YÿŸ?üŠŸãXRöQeþmgþ|ÿò*ð‹k?óçÿ‘SükŠ=”CÙDßÿ„[YÿŸ?üŠŸãGü"ÚÏüùÿäTÿÀ¢eöQ7ÿáÖçÏÿ"§øÑÿ¶³ÿ>ù?ư(£ÙD=”MÿøEµŸùóÿÈ©þ4Â-¬ÿÏŸþEOñ¬ (öQeþmgþ|ÿò*ð‹k?óçÿ‘SükŠ=”CÙDßÿ„[YÿŸ?üŠŸãGü"ÚÏüùÿäTÿÀ¢eöQ7ÿáÖçÏÿ"§øÑÿ¶³ÿ>ù?ư(£ÙD=”MÿøEµŸùóÿÈ©þ4Â-¬ÿÏŸþEOñ¬ (öQeþmgþ|ÿò*ð‹k?óçÿ‘SükŠ=”CÙDßÿ„[YÿŸ?üŠŸãGü"ÚÏüùÿäTÿÀ¢eöQ7ÿáÖçÏÿ"§øÖ…-f²ñͽÂl•-ÎåÈ8ÉSÛë\}u>ÿ¼¿õîßúÖU`£(5ßôgn *£_Êÿ4wµÌø‡ÆÚ~ƒr-H3\ñ”áI€Xœs€qÅtÕåw6º'ÄýIõÂ#ÎÐK ù@fܧ>˜ÀÏû8¯BŒ®Ú½º²oCµÐ|_c®?’¸ŠrJ…Ü~ð*Celdá”dr3ƒŽŠ¼›UÖôëï‰:|ú}Ô~[<1Ë>p¬D€õïÆW>¯Žõë4ªÁFÚZý,FáOÒ°4½;FºÑ´ûÍRi.oO™rA2HÜíýô­öû‡é\¨¸’ßÃ~ìýåÕ¼m¾5n ·Lƒƒî9®iEJ¤SþµGD$ãJR‹³ÿ€ÍïøF4/úÚß¡Q¦áÉf–ôû–,yˆª¥“###¶Es·Zæ´4ÍKÄ1ê–öW éÆ*è°†lnzŒtàÓµ]búɼW-¤‰ °=¢Äâܻ‚O7S÷³Šj”øWõa{z·øŸÞÍ‹ÝB³»Ó þÅ´¶\7lf"’Lôçý^1ïíW?áпèiÿ~…sFçQ¶ñΕ£ß_µú$ësÒDˆëºÞéJ€÷sÓ½wt{(vAíêÿ3ûÌŸøF4/úÚß¡Gü#ým?ïЭj(öPìƒÛÕþg÷™?ðŒh_ô ´ÿ¿BøF4/úÚß¡ZÔQì¡Ù·«üÏï2áпèiÿ~…ðŒh_ô ´ÿ¿Bµ¨£ÙC²oWùŸÞdÿÂ1¡Ð&Óþý ?áпèiÿ~…kQG²‡dÞ¯ó?¼Éÿ„cBÿ M§ýúÂ1¡Ð&Óþý Ö¢eÈ=½_æy“ÿÆ…ÿ@›Oûô(ÿ„cBÿ M§ýú­EÊ{z¿Ìþó'þ þ6Ÿ÷èQÿÆ…ÿ@›Oûô+ZŠ=”; öõ™ýç?-…¦‘«i¿`-ÖæI"•#áXÙ‡2 Ž~µÏjßò6Éþêÿ*êµù è¿õñ'þ‰’¹][þF×ÿu•($›K¿è‡U¶¢ÞöýYØißê–´k;NÿTµ£Z»\¿ˆ?Ô?Òº‡ûµËøƒýCý(7ÂÇn‘tç¢O±ôBIü®ŠëOŠúA+—?.ÓÆ=k'ÀjÎ쑸6­±‹.¥-ˆµ¶{¸ãȾNp¬Hœc'ŒçŠ@C.—o4¾cÁóg,G¾¾½)n‘-´É¡E8Ô¬À€âjI-ôH¯á±{Ko´ÌŒéƒ9UÆI `G_Z¹eï†ÒÜ ô¦Õ p²Á5»ª¾%”I ðÌÄdÄZÞZúT3XZ\g¶ŠR:@ØüèªCåF±ÇDPUWÐéLŽÖ8 Gn‰yj€.QŽ”·vu¬A¤$ÿ:®È`RÜ3Î8Éö?öF›ÿ>ß÷é€*Zéöö(RÎÎdc’°Äë€)°éVvÏ+Á§ÛDÓ JcT¸ÿkŸÆ®ÿdi¿óámÿ~—ü(:FšM…·ýú_ð¤rhšlvò[¦•f°JA’5¶@®GLŒ`Ò¶§½¢Z>™hÖÈw,&ÝJ)õ Œ ±cm¢jv1^ZZ[Io(Üä‘ô#5cû#MÿŸ oûô¿áL WI¶—,Ʊ«FbŠ4P£$`+F’-:Êß ¤¸þ$@éQj×öÚ>œ÷·ÈÑ#*‘'æ`£©Í9 …æŽf‰XÁåAe®làSn­-¯ 0ÝÛÃq9)*Sø»å¯¥QÕµmËí3E,›¤H’8€.îÄQ’SÜŠbi¶1Ù$²¶[SÖ‰Bø1I—§ÛÂÁakQ¿˜ˆª…ïÞ®Z±¸¶Idµ–ÙØs¥K/×i#ò&¦ò×Ò€(KcipÎÓZÁ#:…rñ‚Xz€yMcipÎÓZÁ#:…bñ‚Xz€yúÕÿ-}(ò×Ò€)ýšßí_jò"ûFÏ/ÍØ7íÎvç®2:SŸ­O"…\Þ ~´í”…£ÚÜ«<2pÊ®Aªº~ƒ§iS¼Öp¼r:íbfwÈú1"¬j7˦ØKvðÍ2D2˱ÜòGJ¡£øŽßZ¸’+{K¤¨f’@›Fz †<šØ¶û×õÓÿeZç¼Mªêp]¬A]ö‘Ûµ*|`àF3жž¿-t6ßzãþºì«Xíá=6æþö÷T··¿šâ@Èf„)€g>„ç¾i ÄéðÌšŽ-º³´þl€¶nàTt'ëÇ×¥\±•æ±¶–C—x•˜ú’T@6þ¸ÑÖèÝ%Š'1ó6p1žvƒŽÙÅ]¶‡ìöÐÁ»w–Š›±Œàbžš‹]ø’¼Eoœÿ©~ÿôñ5rIF qÆHõ®¿â6?á%‡“þ¡øÿ·‰«•0É$lIÈéS̯aÛ©Ñh¬-š¡¾`X‚G8b¿NWùúܼÕï!¹1Å@’$ ÏR=+°µŽÏS²Ž)¦xÉÌ¥Ê,3Ž8ÿë×KªàÝ«GÕã ŸoóÞ½b©ác6µÿ‚q×jîÅ„ñÉÌöjÊF«mäuëŸj··ç©e³eP3½äz€yú‘ù×10 ʤ ƒƒõô¥ îÜÍÛ稥8}¥¡”Z5¥2g}¥w18=E2‘yEéÓ°Å-yҵݎõ°QE†QEQEQEQEQEQEQEQEQEQEÔøþBòÿ×»èK\µu>ÿ¼¿õîßú×=}áëú3¯ µOð¿ÍífêÚ•®Æ‰©YG>ϸÇ*Ëôa‚?:Ó Xd _-½?ZéM§trZç ­|/ѯì–=3þ%—)&ÌOUufù‡ãÇé]v™i%†“gg-ÃÜÉoDó¿Þ”ª€Xòy8Ï^õsËoOÖ-½?Zm݆Ãr¶VW†Ÿá´3ZEgbcžRÒ4Ȇ͸À<’sÇJë|¶ôýjœÚ&q+K6›g,÷àF'êH¬äŸ2’èi G•Â]àÿ™Z_ø~}Hê[Â×A+~ù‚3ŽŒS;KR3S\i:5×Û|ä¾ÚѵÇïˆÞSz1ÓÂ=¤ÿÐ"ÃÿÓü(ÿ„{Iÿ E‡þ§øQïùÔ»¿ëæA}¥Ú\kún­À·òþùÚS–ŒE2…¦wKžÜgž‚¶~Ñüöþú›ÿö“ÿ@‹üOð£þí'þøŸáG¿ä¥Ýÿ_3KíÏhÿï¡GÚ ÿžÑÿßB³áÒèaÿ€éþÂ=¤ÿÐ"ÃÿÓü(÷ü‚Ô»¿ëæi}¢ùíýô(ûDóÚ?ûèVoü#ÚOý,?ð?ÂøG´ŸúXà:…ÿZ—wý|Í/´Aÿ=£ÿ¾…hƒþ{Gÿ} Íÿ„{Iÿ E‡þ§øQÿö“ÿ@‹üOð£ßò Rîÿ¯™¥öˆ?ç´÷УíÏhÿï¡Y¿ði?ô°ÿÀtÿ ?áÒèaÿ€éþ{þAj]ßõó4¾Ñüöþú}¢ùíýô+7þí'þøŸáGü#ÚOý,?ð?ÂÈ-K»þ¾f—Ú ÿžÑÿßB´Aÿ=£ÿ¾…fÿÂ=¤ÿÐ"ÃÿÓü(ÿ„{Iÿ E‡þ§øQïù©w×ÌÒûDóÚ?ûèQöˆ?ç´÷Ð¬ßøG´ŸúXà:…ði?ô°ÿÀtÿ =ÿ µ.ïúù‘êr$ÚÆŽ‘:»,²;9ÂùL2ñ®cVÿ‘µÿÝ_å]•¶™kdXÚYÛÛ–ûÞTj™úâ¸í[H?Ù_åDSWo¨§$ì—Oó¹×éßê–´k;NÿTµ£Vf5þírþ ÿPÿJêî×/âõô  ^¼‡Oѵ+ˇ٠Ìvôq5µá›YaÓ¦Ôï—eî ææpßòÍqò'ü@\Ö7ƒ--ï´ËÛ{¨–XYÔ”n‡ Ägñ»)àŠæÞKyN| ’…Ô@¢Š(’ýÑõªÏÖ¬Ë÷GÖ«?ZyŒj­†i¦@`³aŒ±r«êjÕ–ßzãþºì«S†Ûï\×Oý•jc@ËU¿Š¬ËU¿Š#ñQg‹Ä–sª7—$2 aÏ+<¤üxVou§ß½½ÌoçÛ»G*¬g¡èk¤ø wø‚Ú7•a‘•[ žPHü‡å\dÒ™îyþy]÷’ÌNI'¹&©Bú‰ÎÚRH¶šÍ¨* e%¤n9¯9är1ƒÏEnë×–ö—–‘‹7ÆTnWàãzu¯=Õ.'•"iäUÊ€ÌN3Îâ3TÅüþarîÌÀ.wd×Ð A]u+ÎtÔÇ4©s_SѼûBÊm®Ë¼ñ°çÓ¯4ðNÞp{óÅyôwró0¼súœU¨®ïWåH¦ÜÊÇå$ôíéšÁ+!·=~èúRÕ{ ßÙÖÛó¿ÊMÙ99ÀïÞ¬VGHQEQEQEQEQEQEQEQEQEQEQEWSàù Ëÿ^íÿ¡-rÕÔøþBòÿ×»èK\õ÷‡¯èμ.Õ?Âÿ4z /ãU.5{]F×OžáRîè1†2[yè?±œ óÛÈõ]oûOU±±·•|ÕûÃÜ•t1ÆÕØs–ÝÜdÞúêrÛCÑóU`Ômînî­bbeµ*%Æ ÃëÅq7z†‘ªjÖ—ÚæÏì©ìKA>|¡)'x=··¯¾*{/ìh¼k¨=ÜvÂîSX<‰ó2ù`|„ûƒÒ™7;;¿¶ZG9‚h7ç÷s®×^qÈ«¯2´6¿Ø¾þ×ÿ6ÉüíùòüÝß&ÿo½ŒñšB—Z=•³£I¥K®µIs†ƒžvç8ÏlQmmýoaì¯ýmsÒsFk—ðÌQØê:兺촂å<˜â=Ñ«=I8®uKš3Qn£u %ͨ·Qº€%ͨ·Qº€%ͨ·Qº€%ͨ·Qº€%ͨ·Qº€%ͨ·Qº€%ͨ·Qº€%ÍpZ¿üÒ}w«†Õ¿äm÷WùPa§ªZѬí;ýRÖ0ÿv¹¨¥u÷k—ñú‡úP>`¶WŒÄ '·-W¼4§R¸¼ñ ÿ¦‘¨?Ãn¤íÿ¾Ž[ñ•‹á}?ûW@Ô¬Lï NB;§ÞÚY·é‘‘Ÿzí$¶ÿ‰{ZÛ?ÙÿuåÆÈ¿êøÀ {Rîÿ¯ëþüŒM3þ'>%»Õ››[-Öv~…³û׈ ÿ>µÑÕ]7OƒJÓmì-Á@=O©>äòjÕ?!yœmîq7Äklj÷±æÂY*Bv1Q˜Ïß'Ž´íGPÕ®µ xYêa‹H‰#£‰˜¦ò\°'oo—ù®¬-›QM@Çþ”‘VMÇ„$1Ó¨KQðÖ‘ªÜ›‹ËRò²r²º tW @qìÙ¥öRõüÇu{™7Ú¾§{…Í•À²mQ³?îÕð¦ø‡PG®zWIeo5µ¸Š{ÉnÜ|ÙUˆô;¥6]:Òy­&’^Í‹@A !*Tð8èHæ­U=݉[# Æ0I?„µO.êk}–²³yAðü§rž¶½bkv³Û|.ºß=Ñ{XŠyëÙ÷xxúäû×k4QÏ Ã*ŽE*êÃ!àƒY±øoKJ—Lò¦{)@ —R¸t Y‰QÀà`R]~EuO·ü†™q©[xž}&óPkÈÚÉnQÚ$Cn*@ÚGB3“îiþ{©k¶×Osö{¤E–HãW ÄólU¯§JÖ}2ÒK×¼1°¹x>ÎdYO—œà`ñÏqϽT°ðÞ¦Þ=Ý·ÛÎw9’þyœc,¬ä1Æ ô/ëïÿ"mý|Œ[ KTƒ_Hu««ÛfžâHà‡ìÑ›YW’dPX6ÑŸ˜ŽA⻠ɃÃzU½ú^¤4ÈÅÓ̸‘Õõ*ŒÅTòzZÔ-†÷8írÂæoh¥5kØÜ•¤'ÊÀL…Ýëßv}±Vµëë´Ô!Óì/5#ty²Ggo1Àgip ­lê:=–ªak¸ä/-‘Lñ:0pÈAõÞ§_MÓÅ/š‘ù[ÒâDfOî±V‡³f—KÆý¾ûÄÁwi—w pTE$„ ädãÜ ÷®£Ã7÷wqj׳ ‰loÛÏ Í+@à›qN heeiö2°Ù6Á&‘LEºCg?«COÓ­4«AkeŠ KcqbI9$“’Iõ'5]Xt_×rÕQHK÷GÖ«?Z³/ÝZ¬ýhôQE%·Þ¸ÿ®Ÿû*ÔÆ¡¶û×õÓÿeZ˜Ð2Õoâ«2Õo⤆üU‘—ÅʈÌ~ÎçÿOWŸiaÂúšô‰ˆïâ(vªŸÜ?'þ¾&®bÏI»ºÞÐA,Éî‘£Œ‘ÿy±Ðu櫚ÈÍîP³Ó–îâ(î™ ;…lŽŠNÏ¥tzå’3¼++ „•.G¾Ƕ?QURÊ¥¶ r²3ų̈OɆ#òÏãW¦€nnŸZôUxËìúÜÆ[• 0®ÜA q„,EU>UÇ\bž#R@ßÀçR€€®[îž õÿ?çšXjå­YY±³~Ïzíʤ¨àÿQ?º?•I\·3¶ÇbØ(¢Š‘…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@u>ÿ¼¿õîßú×-]Oÿä//ý{·þ„µÏ_xzþŒëÂíSü/óGkqs,„™Æ~X™‡æ¨¾Ý¤ÿø'ÿV$ûÃéYÚ>¤šÆ•üq´k0$+‘‚Gô®‹…Ÿ·Cé?þÉÿÄÑöè}'ÿÀy?øš–Š‹íÐúOÿ€òñ4}ºIÿðOþ&™v,4ë›ÆBâšB ã;FqúRÙÜ Ë{»DѬ›sœdgï·Cé?þÉÿÄÑöè}'ÿÀy?øšd7F[«ˆ>Ï:y%G˜ë„“#?)Ï8èjÅEöè}'ÿÀy?øš>ݤÿø'ÿRÑ@}ºIÿðOþ&·Cé?þÉÿÄÔµåѳµiżóí yp.ç9 p?оݤÿø'ÿGÛ¡ôŸÿäÿâjZ­ý½ÍåÕ¬LL¶¥VQŒ`°Ü>¼PŸn‡Òü“ÿ‰£íÐúOÿ€òñ5-Û¡ôŸÿäÿâhût>“ÿà<ŸüMgZë‹t®ÉgpÁoZÌùjiS‚íèµ­G˜}ºIÿðOþ&·Cé?þÉÿÄÓl®~ÙiÁ‚h7ç÷s®×^qȤ¹º6Æöyæóeþés³?ÄÜð¼u¢À?íÐúOÿ€òñ4}ºIÿðOþ&¥ªÖWöú‚ÌÖìXC3BùéÁ'Û¡ôŸÿäÿâhût>“ÿà<ŸüMKEdkÚ†ÝàÀ÷Ëòía¦>aßÎ3´š½³»v¶ˆ³’NÑÍtž&ÿ‘zëþÿ¡Šæ¿æ'iÿ^±è¹×ñÚòýYÔÒúªÞ’;½;ýRÖgißê–´k åÿv¹¨¥u÷k—ñú‡úP^ÿK¿÷‡ójëëðüz]ÿ¼?›W_@Q@Q@Q@Q@Q@Q@Q@Q@Q@ —î­V~µf_º>µYúÐ袊Ko½qÿ]?öU©Em÷®?ë§þʵ) eªßÅVd_5 <âs¨kÐM α:üăŸ>SØW>Ú>¡$í4³Äìä³e˜äž¹ãšõ^ôéö/:ÇæIç:F™Ææi™@Ïa“UÝå„fMJKidU[hÊY‚ó¹ŽFHç¥pTÅòÍ®_-ÿàª)«Üó[mæ+Ÿ9åL¶wícßÓZš]2ᘲN¹ôašôiµ«x^XÄSI*L XÑAi¨—œc©ÇCQ~Š#¥Ô“ÈÒ(·U]ãaÃóm~ô–a;iÇþ<4^ìóØô¹y2LìüqO],޲³}OÿZ½:Îê;ë(n¢ #™¨aƒƒëUWYÃù3‹[pûîH^WïÎãß¶8¡fsÕr~?ðõHïs‹vF«ýÐ:º[ÍqžÕ–(®-.³*‚Ñ´Š¹$zQV×\·k¡“8ŒÊa[‚£Ëgʃœö#8ÆGZ:V¿'ãÿµEw8ú+¯:õ¨µ†à¤Á%µ{¡òŒ„P ž¿0¡õµHâ&ÂóΔ3,!}£näwÏ=)}~_ÉøÿÀb»œ…Ój> EÓ¥{çšChnãAˆ”ƒµ›q‡ŽOŠ»-ÙŽ=4´²)ž@§jƒ¸ìcƒžƒŽÔþ¿$®áøÿÀb»œeÕÁâ;IcË Å´MMÌ£"òHÚOnǬØê«}<[›yLLnVÈ`ŸCדÇÉoÇþ{Üâ讯YÕ%°ž’[[u‘Œ÷@ìÈÆ`ŽN}{t5Æ©¨K¦YßX½ªý©cÁ,,ä»´p=:Mc¤Ò|»ùÿÀE.§7Eu·—š…¥ýªÿ¢¼ʱ‚·˜F9lçqŽêXu˜n.žÒ(f71ïó# ˜é¸ç€Ùõüé}}Úêüö+¹ÆÑ]mî£}etLvÐÝEpÑ(%™ uèIçÚ©vílIÒ2nÚÜݲ·’óã= ~÷^ôÖ:MÛ—ñÿ€Åw9ê+|ø˜µ³F#3ÌÒ)tåŒÎ €¹$1õëZWº‹[h_o…¢˜ìVó;0HËã9ÚÎ3ÐPñÒZ8~?ðQO©ÇQ]^›­Å,×—v`yæ(fGØ“àT{œu=*-?[c+ÁwãuܰÇpU|²C6Õàç8ä~4DŸÝýEDŸÝýEUÿ¯¿üÉkúû¿Èó­|dx½OF’ÍO¸;A¨ïü;¤Åâ8b²#·Ó£¸·UÈÈD™dÂ~Uéé^“äIýßÔQäIýßÔTµ§õؤÏ.ñ5ôWvpEzºt2®–“ÅuzŒd–F+m`@9ääŽ*åܶ_Ø¿‰Ø5›iQµ¿Ú3å4Çïç±|mÆ ô_"Oîþ¢³µ- ãQpWQ¿´]»Y-¤@{åIÜMëë¿ù‰-¿®ßäy„`Me£ NæÎ=´µòþ’/3qÝ‚@|mÁ<ã¥ušÜ/Ãt‰îþÖU hÁ`óœö®ºÏL[ (m-¢Ù(9À7‘'÷QNúüÄ–Çœë:u¥Ýߌ/&„5Õœ½´Ù!âaàTöäTúaÓ‹oeÔRÜj“­¼–O2 ͘€%Ôâ»ÿ"Oîþ¢"Oîþ¢Þ§—éŸdÝ£}—Ìÿ„Ÿíký¡ÞfÜŸ7Ìÿc3ÇLWAâÁiý«¥`gEľvüù^nÏ3Û±ž3]‡‘'÷QG‘'÷Q@g§-²éšØöýø‘Œ%yRŸ61íW4™,,üe$5ž¥=̳3]GŸ´[u%dê6ÿ hȆ»›'êO­Yò$þïê)ÞÎÿÖ÷ ×õÚÇ™Ícl–Zž²‘Ôa×6¥ÈáÂùÈ»sé‚F+[Âë¤A®ê‘KºkFúv LDäzíÅvÞDŸÝýEDŸÝýE%§õéþ@õþ½Ìä,´ûk¿ë·RÛÇ-Õ±ƒìò8ÉŒ˜ûzs\ç†-̺•”’jvPëQ¼sÖæSƒ¹dbäîÜp1^¥äIýßÔQäKýßÔPSÇfm,Øé$•>!7öÿ3>vvI¸6{gíÓÑÿÌNÓþ½bÿÐhøƒÃf :[ëBþìÀCB“È›#,B’¨$à‘ÎzÖwüÄí?ëÖ/ýW:ÿx~‹ógcÿt_â’;½;ýRÖgißê–´k ãÿv¹¨¥u÷k—ñú‡úP„õ+M'I¼º½”Ç•pFc–faA<’+¢ÓüQ£ê’´V—eÝcih]>U8o¼£x#¨ï\†‰eq¢I´~c­ý´¬2fÜÇŸ@ hZèZÕ¼ë-¼K Ë¥åÈΤ+Ë(h‰ž gÛ½J{üÿ!ö:;iš•×Ù­§“Î*]RX$ˆºŽ¥w¨Ü93Ie¬%î»yc€-¼JÆ)-¥Ž@K0-–YN8+èy®kMѵ_øI4[Ù¬µKx¥RÞ߉²ì€eT9gР­VÔÇŒnoßA¾KYí¢·ÒÛ¥]Éb¤íÙ>ÕvÕѳA¼U£%Ü–Ítþds‹y‘&ÄàgÛµs‘Œžkf¸»½R“Añ ²[f{½Oí.õùÓtg9ÏtõçŠí)t_×A½ÙŸ{¯hútþEö­ck6ysÜ¢6=pNjÍ¥í®¡n·W0ÜÀÄ$2S޼Ž+?RÑ®¯®¼èu‹›EÚ—8úåÑëWtûY,¬Ö n¤ºpI2Ȉ¤þý(@Å¿šê G’ÎÔ]N1¶&”Fü •gizåέáxuk};7‚VÔN:†+÷Èqž•¥{<Öö,’]È1ˆbeVn{ {õ®_ÿۺG‚ÚÓû_í U>TR\E¶fg'‚à óœ{Qѱ«¥k—7ZµÆ•¨iëgy +8Ïç#£3»jrV¬–×2MÅ+ÀÛ%T`J63ƒèkÂð^B÷¨iwq^ÎÜ^\I óXpB;P:Ÿ‰æÖ…yíæ®ÐéÑ[GوΘÍË(˜ð9åïÒŸ‘&ÕQHaEPEPEP%û£ëUŸ­Y—î­V~´ú(¢€#Wx$ˆšEs»å# àäzR›¦ÿŸIÏâŸüU>Š®\ÿË•ÇçÿQe?vÆ|öÜÑøüÇùUÊ(œÕ´w½²û,›÷0ó ‘¹&òùCXòxgPºye»º/3F‰ÇjSiWÞ ŽyÕØ7s|öÑÌaXãW, rHïô©?³fÿ •ÏýòŸüMqË Í'%-ý UM,ÑÃ\è:¤µÒ n/þÔ'S ¸U& »ŒŒµžj²èºå¥­µÄV³6¡ºs H‘”,»_n„ãžµè_Ù³ÐJçþùOþ&ìÙ¿è%sÿ|§ÿI`Õ­À=©ÇXE©éšu­‘ѯ®‘HŒaXàgœÒœ¾»ò.¬ÚG6aòLz$œ>qŒ“Ûñ®¿û6oú \ÿß)ÿÄÑý›7ý®ï”ÿâj^^éUhâäðÍõÊÈ÷7O%ÎÔH¤[mª8Êç’Hä~"xnégEidk8ç7 ‘ƒ¼’ylýÜ’qÆ»ìÙ¿è%sÿ|§ÿGölßô¹ÿ¾Sÿ‰§õ.œß‚käpëá;Ï$Û½Ë4)k-¬#ìÄ2+ã–;¾l`vgSðÓê k'•–Ý qkç#Œü¤Žxƒ]ölßô¹ÿ¾Sÿ‰£û6oú \ÿß)ÿÄÑõ'{ó~Aí|Ž2ëÃ7n޶’ a5°¶™E®P¨Î €FÓóQNŸJÔÚþÊ?&Ymá”J$( •Û×$’sœb»ìÙ¿è%sÿ|§ÿGölßô¹ÿ¾Sÿ‰¥õ.òü{_#€µð¶¡&‘ Z—˜þU«E¼Qd,¸9lǰè)öZgˆšyî¦â•Ä)h•[b¹.H ãHëø ï?³fÿ •ÏýòŸüMÙ³ÐJçþùOþ&©á/{¿À^Ðç5 6þò&d·Gd+ g ÿtç }ðiŸØn³iæ8äHl•‚E哜®Ðsì3ù×Mý›7ý®ï”ÿâhþÍ›þ‚W?÷Êñ5šÀ$¬¤W¶¿C“:.¤5™/’XʰT %«3"ª­¼“Îqé×[x~æÛQ7ÂIZiK}£1H¿ÂÏxñõ®³û6oú \ÿß)ÿÄÑý›7ý®ï”ÿâj¾£Ó›ðBöÞG'.xl/­á–Hžêc'™ä“´epìÎGZ‘4ÍZ=<[Ç,1:â²`ª˜è¹çß8ö®£û6oú \ÿß)ÿÄÑý›7ý®ï”ÿâi}AZÜß‚¶Öö8ÿøF®-ãµû’Ã5ººy’ÂdÞå‰äg54žè‘i±yÈ! ²Fw*AŽã#‘]Wölßô¹ÿ¾Sÿ‰£û6oú \ÿß)ÿÄÓú÷Ÿà/käs:~qhn$œ¦¸—Ìr°Pp “Žž¦ªGá»Áp<ÙÙíRåîR·*ÛÉ$e²r=€®Çû6oú \ÿß)ÿÄÑý›7ý®ï”ÿâhú^oÈ=·K}—‡otùmž ›ÀJ­nO˜’çå<ŸZ]SÃ×—ÒÎðLÐ}¢ßìó·/•çr0~cë]ölßô¹ÿ¾Sÿ‰£û6oú \ÿß)ÿÄÑõ-y¹µôAíºXä¤ðìÒ%ÒîyóÅ7ú£òìÙÇ^s³õªóxZêâò[‰$T.TâR›¶È® üÇqùqž:ší³fÿ •ÏýòŸüMÙ³ÐJçþùOþ&…‚¶Òü¿®ítµŽ W¼1­´É§As%À2F¹ËàÄ‘–<Z¶|*ïgkk+JÑÃi%«b" Û϶6û×eý›7ý®ï”ÿâhþÍ›þ‚W?÷Êñ4Þÿkúþ˜{]ocŠ‡Â’Ge,\ÈY&µ±Pä;¹úU¿ÅqŠ®ãºuyÅ¿ÌË@yL|¤œqï]Wölßô¹ÿ¾Sÿ‰¬ >6‡ÇZ„m#HE¸ùÛЪ6œüÊŒñ÷G&œºÖ”×ÿ`]NÌÞgg¯™ŸM¹Íq–Ú]êÚXȶÁ¾ q[ygtyepg'·Qq¤\6…ª8Ó¥7c^ÂD'~ß9>uã8ÛžGlÓJÿ×§ùþ-?¯_ò:½WÄZ~‹¨YZßͺ݉ Í,Šˆ»à’zœñW§§˜$œ_[cqÉæ®ÕcŒ)9àò8÷ƒâA%·ˆtMM¬®n­`Ç(·€ÌÊ]WiÚ2qòžk\ÐoµMfëM··ž=7UT½y¶•HˆWiô%„GÆ•ÿ¯ëÈê]BÊÜÌ&¼·ŒÀ¡å*-Np['€py>”ëKË[ûqqgs Ä-ÒH\:ŸÄq^zš~§{c½¨éW $šŒs]Xùy“É kò½†Ëã¾k¢ðÄ6¯­j1ÙMecvñy0͉™•pï°ò¹àsÉÅ;_p8µËe¶º¸Ô&´³†—€H×hTã¦OIþéäSâ×ôiå†(µ{ $ŸýR%Ê'û£<þÈf]ºÆ¯c9_øIÚr GW??O»ïÒ£¿Ðä]/ÄâßKq+j‘Mm²¸åÉÈÎîG½%­¿®ßçø èôþ·ÿ#¸—VÓ`¾Ku Hï-Þe6zas“I{«éšk¢_j6–®ÿqgP·Ó'šàü\š½õÞ¡lÐ_€³Bl£¶Óđʠ©,Òí%H;»®1ß4ï)Ó¿á.’ûL¹¯m³kw¹•[v–s “Î:æ•ýÛ-lww®i40Üê°Ë7ú¤’eV“ýÐO?…,š® òXËj—÷-Úe7Ñs“^ss£L÷×é¨k‹MBocb— È# T±Fd äõœõ­‡†}/Å)ý•õÃÜOÞ-Í‘1 ʳà@ŒœžÂªÚØ”î®ok!‡FÕôËk©-ය™'ž@6G'ŽsZêš|6+}-ý¬vmŒ\4Ê#9éógÏø|¯hWÒé÷7v¶þx“ȶiÊPíPOãYE«éú#=µ•Í¥¥æ«$Æ(íDÓ[[°àˆ°@%†qƒÝ)tþ»”vÏ«é±X-üš¢Y¿Ý¸i”F~œR¦«§=¿KûV³&àL¦1ÿÎ+Ó´»³¥XÆÖ—’Gÿ œyö¦6òˆ?;&Ñ´dúÍK¤\ŪßÌš\ÓiÐjðÝ=´qq2y3"ô|9ÜzÑý~_çø úüÿËñ:]3ÅzŽ£¨Ä·V†ÖÞX¢‚t˜™s€s‚sÀµÞþÊ%¸i.àAmƒ9iò²27sòñÏ5à 2mVÛÅ3ÙX\Zù²Áqd&¶hY¤‰VýåÇãTSIÕï/#’[”‹ÄR¬·ÊêÑ–)7*·÷I õ¦µvþ¿­Ã¥Îî rÛì·W7ÓZZAÃCæ5Ú2ž“ýÓÈ«jÚl6 .¡h–o· 2ˆÛ=0ÙÅqO§mÓï$º‡R‚hõ¹î-d·²iÈ$¦Ó¹'ŸÈŠP‡Y½ƒÃÚ¥í­Ý°fYÒÆÑdxÙˆþK«c € ]ßZ]>ïÈ:ýÿ™èPÍÄ)4¤±8ʺ0eaêëO¬_ ØC§èQÅ]˜ÞG” ¸„N 1$lmÉ­mS`Œ_ÿȱyÿÿÐÖ¸ßù‰Ú׬_ú®ËÅ¿ò,^À?ô5®7þbvŸõëþ€+™¼?Eù³­ÿº/ñ?ÉÞþ©kF³´ïõKZ5Ðr »\¿ˆ?Ô?Òº‡ûµËøƒýCý(/Ç¥ßûÃùµuõÈx þ=.ÿÞÍ«¯ Š( Š( Š( Š( Š( Š( Š( Š( Š( K÷GÖ«?Z³/ÝZ¬ýhôQEQEQEWµÿÍÏýpù½hÖu¯ü†në„ÍëF€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ å-¿ä j_õî¿Ê:êë”¶ÿ’©׺ÿ(ëž¾ðõý×…Ú§ø_æËÈ-ï,䳺YLR}ጇï)tìiö‚ÖÆÒ+[X|¨"P‘¢ŽÔÙx?…`[xŽÒ-ÒûP»„µÁ*†Ú)˜A<*`¹àzWAÈtÿiOF£í)èÕÎM®Á5¶ŸsawnÐÝ],;¤G;³œ¨î·ÅÀç4ÂS£hvDÂo#˜\'™ýÝûvçÛ4Ñý¥=´§£W5«ø‚=TÓífŠFŠée%ãäeÚ0¨ 9ÍNþ Ò㵸¹’ëdVÒ¬3G8À Œÿþt½ö”ôj>ÒžXWzö™b÷ st#kp†AµŽ7çh“ƒÀÉ©´íVËV…å²›ÌTmŽ ”doFVƒõ¯ö”ôj>Òž\ÂxŠÚÚÖæãPº‹b^½ªyÈÇ#¢•Á%½p1éIŒtåHÒõ²î#ËA"…rp‰\)Ïcƒ@=£í)èÕ‘¡èÚÙ¹¼¶šW8܆ymŽ™Œ6ӸІó^Ó¬/RÒêgŠG*¡šÙ–àøÚ3îj=GĺN“;AytVEMî©ɱ}[h;G×yÐ ˜ÀÀVü©~Òž\õ߉´{–+‹À¬U\‘0En…È ?íb¥:îý§ýœ&w¹)ÂìªHÈ ÀmSŽy4¹ö”ôj>Òž\íýýÄ$Ò,£` ¹YÌ£ªç·Zu¿‰4›«ñeØy‰e_ݰW+÷‚¹X@MtiOF£í)èÕç–þ6»}&ïV’(šÈÙn¶³+d ü®ps…ÖC©Úͧ½ðiÝ34мdÔí`éGK‡[ÿiOF£í)èÕËŸ[]Gg-…ˆæºHI¸¶•7†á2£“ŽJ–çÅ=¥ëZKv|åuöÄì¨Ç¢³TGÐGö”ôj>Òž\n•âËi/¯,µ .u¿’ÞÂÁ »ñ·>ÙÍ\ÑüE©ywhÑKð\KÄNPªg~ݹ>™¡jMΛí)èÔ}¥=ªQ@|U:¿†îÔ“³¯ûë\—üÄí?ëÖ/ýWKâoù®¿àú®kþbvŸõëþ€+¼?Eù³­ÿº/ñ?ÉÞþ©kF³´ïõKZ5Ðr »\¿ˆ?Ô?Òº‡ûµËøƒýCý(/Ç¥ßûÃùµuõÈx þ=.ÿÞÍ«¯ Š( Š( Š( Š( Š( Š( Š( Š( Š( K÷GÖ«?Z³/ÝZ¬ýhwûQ¿Ú™E!ßíFÿjeýþÔoö¦Q@ x·KæÇ$É¥“CE&Ëùÿ¹ü£ÿâ*J(=—óÿsùGÿÄQ²ãþî(ÿøŠ’ŠeÇüÿÜþQÿñl¸ÿŸûŸÊ?þ"¤¢€#Ùqÿ?÷?”üE.?çþçòÿˆ©( ö\ÏýÏåÿFËùÿ¹ü£ÿâ*J(=—óÿsùGÿÄQ²ãþî(ÿøŠ’ŠeÇüÿÜþQÿñl¸ÿŸûŸÊ?þ"¤¢€#Ùqÿ?÷?”üE.?çþçòÿˆ©( ö\ÏýÏåÿFËùÿ¹ü£ÿâ*J(=—óÿsùGÿÄQ²ãþî(ÿøŠ’ŠeÇüÿÜþQÿñl¸ÿŸûŸÊ?þ"¤¢€#Ùqÿ?÷?”üE.?çþçòÿˆ©( ö\ÏýÏåÿFËùÿ¹ü£ÿâ*J(=—óÿsùGÿÄQ²ãþî(ÿøŠ’ŠeÇüÿÜþQÿñl¸ÿŸûŸÊ?þ"¤¢€#Ùqÿ?÷?”üE>%”1ßs4£uÂcëŠZru ®]cFw`ª’ÇW¡Ùß&áÝ^ÎÓíŸg†hÞÜ:£‘²K3Çr85è:}¾£nÐÝEз ¨[¿ ñR%ŠGÇTEUUÀÐSÃE¡jf+iä·Tš]h_Ë È…0F3О„ã¹§M¡ê/¡jVëo™¦Õ…ÌK½yÍFÝœñÀ'k¹û/û¥eÿoô¦¿¯Oò®ÿÖÿærúåµòëV§efo¨•$…$Tl8 ±‚={ÖV­á‹Í[Z‘Z š]ôK5Ð.2“"2¨Ç¼§#û•Þý—ý¿Ò²ÿ·úR·õý}àyí¶ƒ­ }NêÚ95t¿[©m¼Á‡UO,(n™ÇÌ3ÜÖæ‡g{ý©©ê·¶ßdkÃ¥¹p쪀ÌW#'=‰à é¾ËþßéGÙÛý)ßúþ½Ç º¢<¼Ûôךðüëþ¤çæëïÓ¯µ-þ‡¨M¦øŠí²÷wñÍn7¨Ü E“׎UºúWsö_öÿJ>ËþßéIiýz=]ÿ®¿æy߈ô}sQ»¿‹ì÷·1K$FÑ¢¼XáÒCÆXdä1Ψ¨üHn´ˆ|PE´wjî­Â+D|½›YX‚zdc9ÍzGÙÛý*”ÞÓn/òk+I.—f{u.1Ó y¥m,4õ¹ÂIá˵¼ºy´ëÛëKø¢ÊÛj˜Œ#,‰½C:óéZSiº…·ˆ"“H±ºµC,bæf¹F‚hÀå -¿€:rk¶û/û¥eÿoôª¾·%++Ö¯aw>½£ÞA™ >tsà ç®1ÛšÂðÿ†ç±–ÆÖÿM½sdÄÇwý¢Z €@eˆ¾A ãxɯBû/û¥eÿoô¤7©Ã®…¨Ÿ‡I¥ù*·Ñ€â&q‚V]øÈã?Zµy¥Ï«é×·’[_ÚßIo$Ih÷¹Œ’…FUX§9þµ×}—ý¿Ò²ÿ·úPõ¸Ó³¹ÉÝéw’éž…!Ì–—<ãpùP†=yçÒ¹ÍSízm…Î’Ö©,w²KÔs§;§VÚS;·œ‚½?ì¿íþ•I|=¦¥ñ¾[+E»'&qn¢BÞëNþõüïù‘6÷mýuÿ3“›CÔ_BÔ­Öß3M« ˜—zóš»9ã€N:Õý CM¿¿³šÁ´×rÜ¥ÚÊ›pç Îì玘®«ì¿íþ”}—ý¿Ò’Óúôÿ!½¯_ó+QV~ËþßéGÙÛý(Äßò/]À?ô1\×üÄí?ëÖ/ýWWâ›}ž»mÙÆÎßí­rŸó´ÿ¯X¿ô\ëýáú/ÍoýщþHîôïõKZ5§ªZÑ®ƒkýÚåüAþ¡þ•Ô?Ý®_Äêé@x þ=.ÿÞÍ«¯®CÀ_ñéwþðþm]}QEQEQEQEQEQEQEQEQE2_º>µYúÕ™~èúÕgë@ ¢Š) (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š)ÉÖ›NN´b?õf¹»Å…¦JÿmÔ®ïwùQÇ,²m'$¨mªçÓÖ·.om´ë nï'H-ãåäs€;W èÚ—ö‡µ;ÞÚÁ*˜.÷"Éž §…#ƒOúüÄlKâ8.í´Û‹Yîm¼ÝEmeˆÀ¥Ãó˜Ü1ùzu=1œÒŸÙ­ëÂÖ7ëoߨÚðƾH—;pHmÀdœcš©…¯„6²K=»]¶®5+­»‚Úœdàc®3ÏJt¾½“DÔ¬„¶þeΩöÔ%›<Õ|:áOøÓ^ÖßðB^_Öÿð šæ»w¥ëºM¥½”·qÝ$ÆH  æ¡q‚Ì£œóE׌4ëû«¨î"7 o22®íÏ´‚0Ø# ^ÆŸ®išŒú¦›©éfÕ®,üÕ1\³"º¸üÊ `v¬ýGÂjž wÂ,g·òÝrK̨Ȭ8é‡=yùV—õý|€Ð½ñ]…ÕͳGs,Ð4Q„‰d¨œòØ9À½[Òu¨5´"CqmslÁ&·¸P²FHÈÎ ЂEs–žÕ-ô‹iòÚ]n ÑxemÞT„/–ñ6cœp}kkDÒ¯m¯õ SR{¶^˜ÔÇnIŽ4@B€HžI'ŸõùÁN?Çgis4ßm¾sª=”QG jû» ù€ `üÄ‚{ÓcñÕ›2iš¤E8·¸–XT-¼„€á‰î9ŽG5ø^ôlýí¿Ë®6¢~fÿVsÇO½ÏNžô·Þ½¹Óõût–Ü6£{Ä$±Âªˆó»ŽÈzgµ%ÒÿÖßð~á½ôþ·ÿ€jjž!H¸Uº°¾û)dV¼DC8ù·u#½ê¾«âëM.âê!e}yö8Ä—Om•HÏÌY‡8ç'‡¯ø+PÕ5+ù–=6ánd⹺‘Ķ¡våP#)=GÞ9ª>,¸}.oÙÙÞéòÉªÄ YÊÎ.CÏݪ©ß¦ .žc[MçŒ,m\Zß\EoÉs4Kua‘¿$œ *Ä>#†ëV’ÂÒÊòàDÊ’ÜÆ©åFYC ’ÀžèZç$ðL£Q’ñtÍP[¨â2. ¤<.¨í![ ã8ãšÑ½ðíüþ!¶¼´ƒO²Ž c&ê \M$J9(V§$àUu!6ÕËzæ»w¥ëºM¥½”·qÝ$ÆH  æ¡q‚Ì£œóKâÛK‰á6Wóý™K·‚ ËlÏÏórqοחü×ãÿд×ï%ñN©¦5„ÒÛÛ¼j“Äla£ wå<žÀÕ-Æ/‡m¯µ=:íe˜„ˆÄˆEÌ„5OAüXéWáÒµK^ÝÚýŽK ó›ÍvYc(»NÐ R+&ßÃí¾af²éÙÒgó¬¥ÞçÍûÃl‹·åùXò æ’ÿ/ø kŸئ—}y5µä2X²¤ö’FÊ[xÎ9 âªÉã›xZåeÑu„{E\©… …!Îp~îOŠ‚ëÂÚ¦¡a¬Ku-¢ê:‹ÁòFÍåD‘0 n#$Ÿ›œ¢¯ÞèW7úìé$!5 =-bœ‡L–ã§Î:g½'t¯ýl5b_J“øJæXØ4n±²°î ©¹ù‰Z׬_ú®£[¶{?}–B¥á†دBC(8®_þbVŸõëþ€+e‰víú³¥_êjÿÌÿ$wzwú¥­ÎÓ¿Õ-hÖç(×ûµËøƒýCý+¨»\¿ˆ?Ô?Ò€"ðüz]ÿ¼?›W_\‡€¿ãÒïýáüÚºú(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šd¿t}j³õ«2ýÑõªÏÖ€ERQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQES“­6œhÆf€¯4ŸiE¨æëøW!¦ø†UÑ´˜l­&¼½¼Y#¸ºÉUFù™ä+îã½1ŸÚ_ÑhûKú-rëâö =ž›{…ÕÒxR}»H:ãg#¥+x²å'šGÒ‡öt7¿b{s— ¸.í›zdŽô%ëÓüÁéýzÿ‘×}¥ý´¿¢Ö&»«¾j“"Ù̓ö»Án½;OµT¸ÕSWðÞ§´k5Œ®yS´ƒÈ÷i7dßa¥v—s¦ûKú-iE®*ÛW{£º]KähirQ%ʶ={½š]K_ÔeðtúœÛA!x|–·º+uÚ1× SVvþ·±)Ý]®vŸiE£í/èµ’u lô‰¯õH#¶0#I"C)”<«“øV}ˆ®¥½´·Ô4³d/QžÕÄâMØаmlsÜuæÎ›í/è´}¥ý¸ÏFòØêwÆWû@b®×®ê~sÀˆ¨TÆ;Ul¯ *w½ÁóÒþ‹\Œ07÷vPiöq¿Ú­’ç77"µ‰A´ï#=;V†½uögÒ36þ8ÿu6Ρ¾÷rñӌӶ¿‡è'ñDìþ»RÏý k•ÿ˜•§ý{Eÿ  ±ªë—Ú…–¡ih¶1\›f¹ûOÌìÛÐ^õ_þbVŸõíþ€+™ä¿S­ÿº¯ñ?ÉÞþ©kF³´ïõKZ5Ðr »\¿ˆ?Ô?Òº‡ûµËøƒýCý(/Ç¥ßûÃùµuõÈx þ=.ÿÞÍ«¯ Š( Š( Š( Š( Š( Š( Š( Š( Š( K÷GÖ«?Z–ì$€29.T~b«!5 ‚=C–}M:Š(¤0¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(§'Zm5ȱ$ê\¨ëê(-Fålíd¸hæ"ýÈc29ç(ä×)¤øróûE™.Ÿ©ÚFà‹Ì\ä£.G·q‚+·¶Ž9! pÞáËÎ¥ò#þïêiˆäcð°K{`×­%Âjþyš1ûçÁÊ1€:ãédðÇ™¥ÞÙ}³i¿ûfÿ+îþñ_n3ÏÝÆ}úW[äGýßÔÑäGýßÔп¯Oò@õßúßüÙÌkÚ†£i¨ZÝÇͲ^7üÝyûý8éY×~š^mu¢g°KŒÖžnUA_˜<žçµvþDÝýMDÝýM+_ù…ÿ¯»ü‘çú­œÚ=Í´š|×ÂäY-«˜´æ¹IU~îpFÆÎy'Ó´¯ ß[iÚdðÞ%ž¡’[Ü$° ‘€9†$ò wÞDÝýMDÝýM?ëóÿ1[úþ½CYðåÞµo¬Ú…ºÛ]ÿè@Èudmß!?CŠÑÔô¿í#`|ï/ì—Iq÷woÚÇ^:õ­ï"?îþ¦"?îþ¦œ^£¥fxwTw™çÝ›Ÿ»»œ|½yÇ­eÿÌJÓþ½¢ÿÐuþ+‰ÃWd.Éßýµ®CþbVŸõíþ€µÎ¿ŽýÖÿÝWøŸäŽïNÿTµ£YÚwú¥­è9¿Ý®_Äêé]CýÚåüAþ¡þ”€¿ãÒïýáüÚºúä<ÿ—ïæÕ×ÐEPEPEPEPEPEPEPEPEP%û£ëUŸïU™~èúÕgë@ ¢Š) (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š)É÷©´äë@ý[W£kW‡EÐtí"ÖÊÞæò9¥&@í(ƒ…ݸ’X­u÷3Moa,¶ö¯u2ýØQ•Kþ,@‰¬ 3ÂXðæ‘ow<öš’±Yí$£/’Ë’#œƒÒŸõùˆ§6·-ôZr_YÛËmqlåÁbÀ$:rB89ÆOZWñ>µ]_´v ¦[jax‚8›nð›ÃnÆrÀã³…l!µ´d¸&Þð^™YÁyeç%Éç=±Û¥9ü1e&Ÿwde¸òîo>Øä2ä>ðøtÊzkÏúÛþKËúßþ‰u™4¸íÒÚòÖ™KŽkYnÀá#;½2z ¨ú³kŸ .µ'ŒFóéóAœÆyÆEjjš ZݽâÞ]Ù]À¬‰5«(%[RXÀíÚg¡ZYx|hªe’×Êh˜ÈÃsÎr@¦¥«Å®£NÒLæ­/¥´»­4øînâðìrÇÛä ðqŒûgÞ ÔµËÝCÀ÷× ©Y½ÒMâÖ)!hI‘2²+1lþYÑÛxbÞЫÅ}}ç-±YK®å@ă÷~ðéŸn•ð}”–º„Www·rߪ,×:‰NSnÕ`óÒ®NîÿÖí’•’þº"ä÷×Z?‡î¯õG†â[hžVû4f5`@™Žֵ̲˜5-6ßWŠÄÇ©Ææj]W~ÖÜNî3ÈÇ#¥lÛéHšd–w7ñÊdk¢¥™HÁhöª:w…­tûÈnZòúí­ã1[-Ô¡„ x!p8däã½O_ëúì>†7ÃÝ6Q§bàY¼·Šå¦HXNÇyÎ÷,w:)‘k7vv— ¦ÛÙC=ο%žéÙ9Î\Ù'ŽÄjë42KƒO·i(A d ±É'œëTG…ì†ßÞÜ|º‰ÔGÌ¿ëxé÷yé×Þž—òÿ‚¿@{>ÿð€Þ'ñ¬W×7Qéo›x–·)r1O l/89èy«#ñ|Ú6¢ËoqiCØuªú³«i~ƒR¹–ÞóÌTŽÖ2Œ®dy61ËŒ‘Ð é ðÅ•½Ž—f²ÜôÙüøIeË6a¸ä|ç¦;Tx>Æ>çNk«Ùl&%´’ °|ÛB0 ôÉ8£¿õ uþ¿®Â隦¨šóhúºÚ<Ímö˜f´VU*k)V$ä9Ï9íY¾#ñ|Ú6¢Ëoqi­{¤XÁ5œi‡˜$ÓÉÊ–é‚w²¦ uÏ5Dß‹oÃ21±¼yâ¸auí£ >çÌF|æ·u /áHãÔ.ì™[;튵YúÕ™~èúÕgë@ ¢Š) (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š)ÉÖ›NN´’;)áˆìj.ÒêšÞáe‰¾ëÆû”ý©&ëøW ¥jz柠iö÷If÷‘O,·À™Qq´ŸNÔÄvòÞ$15ÂÇæ8DÞøÜÇ ê}ªO1ÿ¾ßqW½–+8.dŠi­õÁfóù+‰Tw`‚¹‘ŽAÅ2MWY/uQ©–‚ÛUû/ØÌ)±£ó>ö7gæÎsÚšWþ½?Ì›ÿ[ÿ‘Ýyýöüèóûíù×=â;ù¡’ÚÊÊ{ô½”4Š–PÅ#\O™ò€ óF“®4þ ‹XÔdò˜@Ï3ªt+NÞyã8¥}¶:1ÿ¾ßcÿ}¿:àí5í^5Xg{Æé­yn÷ÐDŽdt‚½:ŒÒ¶·«è°Áqs|u¹Òå» $(†9U° •;»óÇZšÿ]ɇõù™ÚÉWPÛ=ÆÙ¦ cBNX/_Ë"·ÇöÓgöô›åäçnqŸÎ¸ëxo×Å>žûT7¦{yÜ%P•Rví#žùéSê·—^\w¨¥Õ5mZò³ÔOVÒVûb—'¡Ü ÇÓ¯¥ÿ­›ýß×Ýþgkæ?÷Ûó£Ìï·ç\^‰ªêÆëC’îÿí0êÖ+DТ\*°ÚTdŽHç5«k1éú>­q©ý¦+û¥·’ÕáE Š‚…@9Ï9ã5VÖß×a_K›ÚíüW¾¿ò'óRŸáÕ×#ð®þbVõíþ€µVkæµÑïíÕ7 ½nâ&oî—þj*×üÄlÿëÚ/ýk™;×ÿ·Wù[ ¿ÄÿC»Ó¿Õ-hÖvþ©kFºA¯÷k—ñú‡úWPÿv¹¨¥Eà/øô»ÿx6®¾¹Ç¥ßûÃùµuôQEQEQEQEQEQEQEQEQEÉ~èúÕgëVeû£ëUŸ­6Š(¤0¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(§'Zm9:ÐmDÝ i>ĽÎß‘fr©œ÷ úV-—…íÃÖn ¢wµÆÍW9ÉVRu=úWWO½Gc}o¨ÙÇwjåà“%X©\àã¡ö¦#= LŠÖÖÚ;UXmeÄ¡ˆÃŒüÄç$òzç4­¡éÏk5³[æçûL‹½¾i7Ýœú€qÒ¶n¯­ìŒâB†yD1áIËœàp8èyl¯!$û±&·( ^ËÃFyÕ­³¤‘ƒ<Œ±†ëµK_ÀTÚŽ‡§j²Ç-Ü ÒÆI#•ãpQ¹8ö®ŠŠåï<1£ß̲ÜÙïp‚2DŽ¡ÔtÃ÷³W›hoïÉsAörÁˆýÞs·ÇZÑ•¹ÕÛL¾Ò° ‚1ÆÂÅzúäUº:ÏÅ£X@,|¨6ý†3·ÎÇby๬ø>ÏH¶´’æ’þ ÇÌ»¢±'•V8¨»z(¸t±Ækº]•¦¨Ï$žDšC’A}Ànð œc5ÿ1?úö‹ÿ@Zì|[ÿ"ÅçüÿCZã¿æ#gÿ^Ñè \ëøïÑ~lëî«üOòGu§ªZѬí;ýRÖtƒ_î×/âõô®¡þírþ ÿPÿJ‹À_ñéwþðþm]}rÿK¿÷‡ójë袊(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(’ýÑõªÏÖ¬Ë÷GÖ«?ZmQHaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPNN´Úru  ÿ«5çº}õÕþŸá‹;íRêÞÚî;‡šán I+£|©æg#‚O'mw7K<–2ÇiuµÃ}ÉdÌ ÿÈÏçU,t-6×ÃöÚ=ÂC{o €EÂ+‡=I ñÔšb9kmRõ­,c[ùç‚/ H®|úx@<3¾3‘žûje¼ŠÛQÖ×S¿ûE¶·öuˆÜ±„Åæªl1“·cÛ5Þ‹K ‹{a Ø»c#¡QØjCg§´RDm­LrIæº× ùÎâ;œ€s×"šÓúôÿ'÷ƒ×úõÿ?ÀæüQoosâßGuq5¼E.‡™ÃBÙÚ„ ÊAìxÍcë·º­µæ¥ é÷·êêHï,d2³BΠç8Ý?í§½w—¶z~¥†úÚÖê wž5uל-ì–hæÛ‰bCnw"| ö=©_¯çøçï®\êØÔcÔn-tBþ1*HWËc%ŠŸá-!Û»¯ÑxbyWÖ´èïf½±´x¼™¦”ÊÊ̹dÞylpyäf·–œ,Mˆµµ„`ò×Ë99?/N¼Ó­-ì¬-Žœ6öð¯HáUE€âŸõù_1%­Ô°a ã/â§ŽPŽFå9;[¿§Í5‡ŠÍ¾§ssq-ì³}’h¯KÀTdìhrQŒàò:×RltÓ3Lm- ­ ”¿–»‹€Ùõði–ú^“iv÷vÖ6PÜÉóG +¶zå€É¥ÒßÖÉ~ƒz»ÿ[·úœG‡ìþÅý—ªI ü¨¬·Îq'ÌŠ2DdŒŒÆk¦ð½ôW:EÂ@—bkYž)cº¹3°p$$îŒsW[DÐÜÎ[KÓ˜ÜÌMº7œüÜsÏ<Õ«[{+ u·³†ÞÞé*Gà8¡ë08 ϯjSéÚ›^ÇûÉíˆú“>ეl œt=¹ÎhÑå¾¶±ð欺•üóßÝ<OrÒF଄aIÂPtÅw)¦i1ß›ô±²[ÆÎn$õù±š‘lôôŠ’ÚÕc·ÂÛžTv<žG© ;žuk‹ë j³ê·W7óêiöˆà”°ùQEÛŒtÍt>(··¹ño‡£º¸šÞ"—CÌŠá¡líBå ö¸4ï§õÚÁÖç©\ù÷ž {vêÄé‘!²HîJ¾Xa#ùi–Èç=1Zšö¯©Ûü;MI‘}$0[îù[ʇ=ÜyÁÇ^Õ»>™¤ÜÉ—6R¼ZH‘Œ`tÚHãð«nb‘£# lE.–þ¿§Ô:ÿ_Ö‡]méþÕåþÐ)lé“åêu,ldˆªOOn*MbêûÃÓjöš•ë[ýšÚo6âc3Û”¤Œ¬Ù8 3ÏNµÚC£h¶ÐKnŸ2d EW äÁÁ«-›Ló4P]<·r£s'?)=Ç'z¡Éèv–ö~>¸Kkë‹ÈÛK¼ÉîLçýctbOñ]¥P²Ó41¬,l­þù‚$Œ·×š»æ'÷×ó§Ñ!uoúØuß1?¾¿b}:C1ü[ÿ"ÅçüÿCZã¿æ#gÿ^Ñè ]‹O†o`OÉßýµ®Cþb6õíþ€µÎ¿Þ¢üÙÖÿÝøŸäŽëNÿTµ£YÚwú¥­è9¿Ý®_Äêé]CýÚåüAþ¡þ”€¿ãÒïýáüÚºúä<ÿ—ïæÕ×ÐEPEPEPEPEPEPEPEPEP%û£ëUŸ­Y—î­V~´Ú(¢ÂŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( œi´äë@ —ï~VÊçí–‘Ü&ƒ~w:íuçг7¥y•§Ù±<5ý±ÿ ]“ùÛóåy»¾O3Û±ž3LG¡ÜÝcû<óy²ˆÿt¹ÙŸânx^:ÕŠóËmß`Ó<¿3ìÛãì>fsäàãçnwcÛÖ6Ée©ë)]Fsj\Ž/œ‹·>˜$bšWþ½?̟ׯùü×öð_ÛY;=ÈvqÔ.3Ïâ*Ír.Mî‡>³-§(®1«•]¹Ï¡Åcë6“˨^è:vR-SËÔ ‘Ê¡Ÿüy"ÿ¾©_úþ¼µÑè¯4iέgý¿w©¦ÞßEÒàŒ[Æ„|ØçošN}«¢ð—ÙþÝ«eÈ|fÛŸ/~ßÞlÏðç8ÎiÛúû€Ò´×EØ¥Ãl¾k3倨ÛümÓ Zäàf¼ñDënN&Äå™ Tý©ô—±´ñ”@lõ)îe˜µÌyûE·RVN£oðƒÇn)t_×DÿPz7ýuävz}ý¾§cí«‚Q”$c#8éVkÍ4«}¼-™º´Óµ ·Îé†dû²ô%IàóÐ×CácO‹HEû=µœoxma6ŠÍ îFw'=xàóOw luTWãÒÆ»¡.µäý€‰÷‰þæv®3Y?kH|2bx “HŸSxífÔž(`ÆUˆà•Ü\‘ÔsKúül3¿¹º6Æöyæóeþés³?ÄÜð¼u«æºSçGÓfŠXcñÈZù{>b6dŸ—“ŽMiiþ²Ö,¼Fïo½šîæ¸#.£°Ï 8£¥ÿ®Ÿæ.¿×ŸùÅW†èËuqÙçO$¨óp’dgå9ç y›jº”àëk¡ï þÇHñ÷fÚ0ß÷ðÈ? Ñ}:ÒÞ/iò_Gem²ŒK ù0¨¸Vä|§<Ž´_×ÊÏæ úþ¾ÿ¸ô:+Ínn~Óá(ÒÖÒÏO‹QòîžÝKi#ÇßÀÚLeŠçžÝÅt¾ ·† ¦µÔm.ídŸtkgH¡8U›Žýq’hïývÿ1-Q@Š(  ŸȽuÿÿÐÅsó³ÿ¯h¿ô®“Äßò/]À?ô1\ßüÄlÿëÚ/ýk¼?Eù³­ÿº/ñ?ÉÖþ©kF³´ïõKZ5Ðr »\¿ˆ?Ô?Òº‡ûµËøƒýCý(/Ç¥ßûÃùµuõÈx þ=.ÿÞÍ«¯ Š( Š( Š( Š( Š( Š( Š( Š( Š( K÷GÖ«?Z³/ÝZ¬ýh´QE!…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@9:ÓiÉÖ€!¾²–úÖHcžkrãl%C¯Óp#ô¨ôí%4½> hȆ»›'êO­iG­gÚëvÇE‹RÔ&´²ó–7Hу’8“€zS?‘'÷QG‘'÷QLºÕ8¬e¶6÷]N± >Ъ6œüÊŒñ÷G&œºÖ”×ÿ`]NÌÞgg¯™ŸM¹Í/‘'÷QG‘'÷QUµ_iú.¡ek4vëv$+4²*"ì‚IêsÅ\žž`’q}laÄo'š»UŽ0¤çƒÈãÜP<‰?»úŠ<‰?»úŠ’]BÊÜÌ&¼·ŒÀ¡å*-Np['€py>”ëKË[ûqqgs Ä-ÒH\:ŸÄq@ùwõywõšþËÛI«Ø%Äyß\ eÇ\ŒäT±jÚlö/}¡k%šguÂL¦5Ç\¶p(<‰?»úŠ‚ãKK©måšïo'™-÷[gç‚zÔwþ&Ó,ô)uˆ®b»´•YíåV\– ×8ã<ÔÍâ-íµ=mФÆå1@làš‚ãF[NÎýüÁ- q 6àŸÊ®ywõË]Mn.ï£>BÁl–U¸VÜwe”}ÏǨæ¡}~ÎU¶}:æÊõ%¹[wd¼@ ž:în>èäÑäeŸ"Oîþ¢"Oîþ¢œÚ¦ž—ë`÷ö«xÃ+nfQ!˜К®-ûXGj÷‹Ë[¬ÊdUÎh¾DŸÝýEDŸÝýEW¬‡Åo¤ùiå-¹ßÎì—+§!×´³ky<Ö÷"ÍçX%WdràñÞ‹ép¶¶$ò$þïê(ò$þïê+³ñí¬–^Þ (-縎hoÒ_+r–̧!tÉ®›ûBËì"ûí–ÿc+¸\yƒËÇ®ìã5`#ò$þïê(ò$þïê*õËk«Ë(ìf´»·¹ó3-ÿ‘bóþÿ¡­qßó³ÿ¯h¿ô®uþðýæÎ·þè¿Äÿ$wZwú¥­ÎÓ¿Õ-h×AÈ5þírþ ÿPÿJêî×/âõô ¼ÿ—ïæÕ××!à/øô»ÿx6®¾€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€/ÝZ¬ýjÌ¿t}j³õ ÑE†QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEäëM§'Z°ŸêÚ¼çG…âÒ<+©Íc=í…´w $pÄehÝ›å}ƒ“ÀaÀã5ÝÞAoyg%ÒÊb“ïäd8ÿyH#§cO´¶6‘ZÚÃåA„p v¦#жÒïVÒÆE°ž%ñ»ŠÛË; „ƒË(ûƒ98íº‹"á´-QÆ)»ðž!;öùÉó¯ÆÜò;f»¿´§£Qö”ôjiÛúôÿ zÿ^¿æs¾$[x‡DÔÚÊæêÖŸ4ÓIsö»Ç'rJ@Þ»sÁë]ÚSѨûJz5 K_ÖÀõ¹Éø‚ÃP¸ñ úÚC07š+ÛC:©Ø²†' ßÃF3X¶:A—M¹pšÐ¾·Òf·[yôô…åÆÀÉïä `šôo´§£Qö”ôjVÒß×_óõ¿õÓüŽOT²šxre°š_±Oo-Ä1BZ@¡ ŸrH'§ZgˆtûíCÃw—0\êÃq嘴é- cÍC÷BàÔô®¿í)èÔ}¥=©»»ùÜ”¬’0uKOŠt'¶·eŠ8îƒÈ‘ü±–E$p2k”²Í|+¥O¥Ý[jjí½¹ +l“,$èûºðkÒ~ÒžYše~·±[Ln;Yä—fzí Ä/áŠ]¯Q½UŽkMÑî Ñ|"ãO–;¨o[Î>I2ËÜdòõö­Ÿ³Úè°éWv×vŠVV–Ý•æ?uñ†õà×Gö”ôj>ÒžNûƒîeø·þE‹Ïøþ†µÇÌFÏþ½¢ÿкÏN¯á»µäìëþú×'ÿ1 ?úö‹ÿ@Zæÿ˜‡è¿6u¿÷Eþ'ù#ºÓ¿Õ-hÖvþ©kFºA¯÷k—ñú‡úWPÿv¹¨¥Eà/øô»ÿx6®¾¹Ç¥ßûÃùµuôQEQEQEQEQEQEQEQEQEÉ~èúÕgëVeû£ëUŸ­6Š(¤0¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(§'Zm9:Ðeàþmâ;H´KKíBîתh¤>að©‚çé[—.±£;°U Éc€+‚Ðìï“Gðî¯giöϳÃ4onQŠÈÙ ¥ˆã¹b:YµØ&¶Óîl.íÚ«¥‡tˆçvs•}Öãø¸æ£O[[ZÜÜjQlK×µO"ätR0Io\ zVLZ¦b¶žKuI¥Ö…ü°¬€ˆSc= èN;šUÐõåæß¦¼×‡ç_õ'?7_~}©¯ëÿ%ÿ‚úüà&ŸªÙj¶Ïqe7šˆÅ*Êè*À~¢²tXê:e½ÕÀ–ÚIYc Á&ÀÌÛT+ƒ“ÜqV´» ‹mc\žXöCu\q<…A8¶ƒ´|Vö&£ÿ ê=+ìÿé ®bÞ½¥ ×8éÏZ¹:ž“â FhtÖ½¶¿’9±ÌŠÑ¡H`Ädq‘Œõ§ÖÀËpë¶ñYÞ]_]Ûˆ »{pbGÏpFYÿÝÈ=©ßð“èÿbk&3/“´Bþg™Œíòñ»8çé\õ߆õ)¬ee…Ì‘k^¤)så4±œ•Ôü§#$tæ¥: cHº¨.žäKÿ!k„`»DÚB:qŒôíK§ÝúÁ¿ßúÿÀ:;½V8´ Vi8eWVBÛA8 ŒŽÅU¶ñ>.Œº”òIoÍ‚Dù˜2‚þÛsšd6:¥çƒf±ÔN¡5¼‘$nÈ]ÅxÎÎ8Îk5íu‹­+JvÒLWZTÑÉöy'Œ‹€©ÚA r7cð£«ùEó6“ÄzKé“ê"ïÐ6ÙKFÁñÁB7Èãê]7[Óõf•,ç-$Xó#xÚ7\ô%X|W!®Ú_.‹â ZîÓìÏvöË©‘Y€G,FFI=‰ÀµàÓoµ}rmBþÎm6±ý•Q.Gšä¾âÛ£<ŒsÉ£úü—Qñ,ZOŠ>Ç{+%¡²<¿y 0>•£s¯év–V÷’]©†çAZC'ùUA'AX²iú†‹¯­ÖŸ§ÜêVÿaò{µ.Ì-ó4’9÷¨-4OE‡EºŠÙ/f³IÒ{xä 5·e `|¤cœdQÓúîÁïývF¦¡â«;k >úØý¦Öêè@Z5feá³ò€XWÆiÅVÉ®EbÐÜySZ¬ñÈ-¥-–r¸e •ulVQÑ5XìRôZ+]ÿkÿhµ’J¹ FÝ¡Žv9ôÎjìÑꫯǪ¦“+¥Í¶–%ž0ð0rrrØ#±=(þ¿óý}ÿä3\ñ“y§ÜØÛ݇œ°UÄlʰÜñµˆÁÈôªó³ÿ¯h¿ô¨.lµk/ Ùéwb,{üׂe+ åTªýàNáœß­Oÿ1 ?úö‹ÿ@Zç_ïÑ~lëî‹üOòGu§ªZѬí;ýRÖtƒ_î×/âõô®¡þírþ ÿPÿJ‹À_ñéwþðþm]}rÿK¿÷‡ójë袊(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(’ýÑõªÏÖ¬Ë÷GÖ«?ZmQHaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPNN´Úru Üiöú…»ÃusBÜ4r unüƒÅH–)keQaUWASGþ¬×7c☢дÉ_íº•Ýîÿ*8àE–M¤ä• µ@ãœúzÓÐ}—ý¿Ò²ÿ·úV¾#‚îÛM¸µžæÛÍÔVÖXŒ \?9×§Q“ÓÍ)ñšÞ¼-c~¶ñÝý¯ kä‰s·†ÜHÆ9£úü¿ÌŸ×¯ùeÿoô£ì¿íþ•®k·z^»¤Ú[ÙKwÒLdоaÚ,Ê1ÉÏ4]xÃN±±¿ººŽâ!cp–ó#*îÜûH# ‚0ÀõìhZÿ_ 6>ËþßéGÙÛý+*÷Åv7W6Í̳@ÑF$ e’@J¢sË`dçõoIÖ ÕþЉ ŵͳšÞáBÉ##8$GB kì¿íþ”}—ý¿Ò°#ñžãäsB×úþ»ƒÐè~ËþßéGÙÛý+?Tñ zE­Յ÷ÙK"µâ"±ÀÏÍ»©íïUõ_ZiwQ +ëϱÆ$º{hÔ¬ F~bÌ9Ç88  ²ÿ·úQö_öÿJƼñ…£Ë‹[눭ãY.f‚ Én¬27äƒÓ’X‡ÄpÝjÒXZY^\™R[˜Õ<¨Ë(a’XÁëG¯ÔÑû/û¥eÿoô¬Rîx|]¡[¤ÌL—&T†Ú«Œý2i¶ž.²¼»·‰-¯ §d¶»’0!€' sž@8ÈÇ Øû/û¥eÿoô®ÛÅèðÝÞ» »m̾LRCƒ`˜B§y8ÏßÀÍv˪ªé3jv—‹ 4 Û Tdœ+ÛÖ•Øu°ùôØnb1\,rÆq”‘ƒ‘Á÷©>ËþßéXOâ6»·Ó. CNŽæö(“͆&3«) }óµO¯QéOºñ•µÄ¨¶WóÛÃp¶ÒÝÅùI!`»rX‚@8º]?ÌWëýZeÿoô£ì¿íþ•Éé>+{k«øu+{çƒûVKhï6)†<°„îÜ9ÀéŽzÖ—‡µëÍNòþÞâÂm^M ](AÔl÷·nÿ€â’×î¿åþcz~_Ÿù_eÿoô£ì¿íþ•‘{âý7O´Ôn.Vt[ ”¶•v®K6Üç•ÃÛ¡â£Ô¼EjðiðÍs‘ÞA®£¤žb± ’r8\’FF:е°wâ›}ž»mÙÆÎßí­r¿ó³ÿ¯h¿ô­”ñ.¡u¥x„5Ämh×i äacËhûÛ·ÀqX«<—7ÖSÊXÉ-´NÅú䢓ŸzÍCßöžKõfίº¿ÑÞþ©kF³´ïõKZ5¡ˆ×ûµËøƒýCý+¨»\¿ˆ?Ô?Ò€"ðüz]ÿ¼?›W_\‡€¿ãÒïýáüÚºú(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šd¿t}j³õ«2ýÑõªÏÖ€ERQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQES“­6œhnom´í>k»ÉÒ xÆ^G8·ó5Çh:6¥ýáíNÀ@·¶°J¦ ½È²G#g¨©áHà×dfhøzóIö—ôZb9ȼ-|!µ’YíÚíµq©]mÜpFÔã'qžzS¥ðÅìš&¥d%·ó.uO¶¡,Ø æ«àñ× ƺ´¿¢Ñö—ôZiÛoëoò@õßúßüÙ›®išŒú¦›©éfÕ®,üÕ1\³"º¸üÊ `v¬ýGÂjž wÂ,g·òÝrK̨Ȭ8é‡=yùVº/´¿¢Ñö—ôZV œ­§„5K}"ÚG¼¶—[‚ô^[w•! å…Y5Xk9YÅÂÈcÙûµU;òôÁ®ÿí/è´}¥ý•´°ï­Î:OÊ5/LÑuºŽ#"ê CÂêNÒ²3Ž9­ßßÏâkËH4û(à–2n •ÄÒD£˜Ù…`zrNtiE£í/èµWÖä¥eb†­¤\ÞëzMü ËS*L’ IT€yè:Äð÷ƒDº‚94½X­Ëywê…nHçi#n7v'uu_iE£í/è´†Î}|/v|š ž¼@d1îoàp⦹ðáÕ,.îoôí2=nX$†;ˆK8\¡Qó•¿¥m}¥ý´¿¢Ðõ½ÆŒ«­ ê};@·Y!§ÜA,¤“†¤¼ryïŠãµI%·’ØÞi÷‹>ª“Ußí1æevãäî$q^ö—ôZ>Òþ‹Nþõþ—ùeËoë¯ùœô¾½“DÔ¬„¶þeΩöÔ%›<Õ|:áO·½\ÑtÍSIÔ¯¢?c“M¸¹’ådÞÂe/ÎݸÆ3žsøV¯Ú_ÑhûKú-%§õéþCzÿ^¿æsú·„Tñ!»yclðâæÏ*«¢0í®Z¯aáF ;OWVó_Ç©%åÔ ¶UJ¼uÚ®;×Qö—ôZ>Òþ‹BÓoë[ƒ×ëKòh:Ä0kztmbö:ƒ\K­#‰¤t®Ò0 ëž«{g³Õííd*^R6+Ъ?*ï>Òþ‹\^¬wx¥‰ê@? £m?­úûλNÿTµ£YÚwú¥­kýÚåüAþ¡þ•Ô?Ý®_Äêé@x þ=.ÿÞÍ«¯®CÀ_ñéwþðþm]}QEQEQEQEQEQEQEQEQE2_º>µYúÕ™~èúÕgë@ ¢Š) (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š)ÉÖ›NN´ÉºþÈi¾!•tm&+I¯/oFHî.²UQ¾fy û€8ï]N£r¶v²\4sH~ä1™óŽrk”Ò|9yýƒ¢Ì—OÔí#p Åæ ®rQ—#Û¸Áÿ¯ÌDÒëâö =ž›{…ÕÒxR}»H:ãg#¥+x²å'šGÒ‡öt7¿b{s— ¸.í›zdŽõ<~ olõ¤¸M@_Ï3F?|ø €ùF0\c½,žó4»Û/¶cí7ÿlßå}ßÞ+íÆyû¸Ï¿JjÝ­¿àƒòþ·ÿ€7\Ô5;_èöÚ|qÌ'IÌÉ/–­´. m¬xÉíQj0ež¥-Í–&±¸ŽKêà6àvú=?„Ö†¯£Ïwe{gz-.í „w‡ÍVW ®G ç5^ëÂÑ^ë‘jWÀ·ò¦„&VÃ(sÏãþÔ¿¯ëò;ÏyÓÚ[Ø›™X ƒl¡D²º— œ|¡TO=zUí#W’þ{»K«O²^ÚóbyŠU†U•°2=‡J̶ðpµÑ`´MFC}ÏÚ’ôÆ ß£+žFß—ü«OHÒ$°žîîêïíw·e|ÙD~Z…Q…U\œÏsÖŸõùÁ"=~K;[†·µ–êiuw³'ºãw¨m§jñÂàâxÂú5ž[b‚Òåm®ÝnÃØ•ÁQ´n_™OPyéWG†1·ý3îê‡QÿU럓¯¿_Ò‹¯ }¦ÓWƒí›´nRãw•Ÿ/hA޼ýμu¤º_úÛþ=ôþ·ÿ€3\ñPÐï’)¢³x @ß骳áŽ2"#æëIªx¢âÒ]DXé‚î6=÷R½Ç”Û»j§qÇ=ºÔ:—ƒæ½¹¿hu¢·¿’9fGµ8+·î¾áòŽ=ë3Äöw‰q«[éFû~¥Ya{I¹]¹ä*q€sž”ºyn]Ô¼}mcq4k » xÑçÞ$R|Ê¡röô­oÉ}®É§ÚÚÂÑE°¼’Üì«(mËÓ¹yë‘Þ¢O ]Û]µÍ†£¹#Kl&RÊ¡w)Ü6œëRê¸Ôµkk™ï öÓ,Ñ"Z*íþ3wBzñíU¥ÉW°ÍsPÔí|C£ÛiñÇ0'2C$¾Z¶Ð¸%¶±ã'µž$»Šâò;M$ÝG`ªnÜ\ÚJî*€œÏj·«èóßÝÙ^ÙÞ‹K»BááóU•Æ+‘è9ÍS»ðÕä³Ý½¦®m’ýo[†ÞÁv–CŸ‘ÇzlWQgñ%Ì·°[éj_ lÖósÜù_#>S“õÅY³ñ>•wgi+ÞCm-ØýÜÈ«!lí+Œòw8¬™´mB/Å“qöxt´f{o5ás‘óƒ×ð­ý/G¶ÒôË{$o’ï$³1$–üI&›µ´þµbþ¿rþׯlô]%/ìØîe0%à¸ÞÅË6ÝÉŽ^oêÖò_E.™ažà-ð#Ë SäùÊÜtëV$ð¤—6‚]j>míûÄÒÜvª¬dULð8=ÏZ¹u ý¦ïUŸí;~ßf¶»|¼ùxßóuçïôã¥'¶ƒVêI¨ëIc¤A©$>m¼b[nÄrAÅbêŸò3Ÿ þB·¥Ò"ŸÃ§G™÷Fm…¹p0~î7cõ®jx$µÕííæœÏ,P¢<Ä`ÈB¨-ŽÙëMïe°–Êçm§ªZѬí;ýRÖ5þírþ ÿPÿJêî×/âõô ¼ÿ—ïæÕ××!à/øô»ÿx6®¾€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€/ÝZ¬ýjÌ¿t}j³õ ÑE†QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEäëM§'Z™"Ga“õ§yÿwõ4Gþ­«‰Ñµ«Ã¢è:v‘keosyÒ“ vŠFÁÂîÜI,?‹Ö˜ŽÛÈû¿©£Èû¿©®6mn[è´ä¾³¶7–ÚâÙ˂ŀHtä„psŒž´¯â}j6º¿hìL¶ÔþÂñq6Ýá7†ÝŒåÆ(Zÿ^ŸæMÿ­ÿÈë™m’T‰™GÎÅ-‚ØëÞŸäGýßÔ×=­8OøyÛ¢ÅvOý𵕢ø×QÕo¬_ìa¬¯]†Ä²ZÁ*Í+-‡cêh¶ò#þïêhò#þïêkÊí¬ï-üq­¬¶‹wv鋈áuœ“p3½÷üÃØÅv·^!“J´¹·¾aq©Ã“”É–±ÜOïPôW`•Ý‘¿äGýßÔÑäGýßÔ×!=æ£-†uªÇ§Ü5Ö¡nÑ¢‘A‘Žys–½=©·^(Ö|‹NÖ+Ó!¿b9QÚY?z#fÈ`’p0zS¶¶þº˜®­ë¯ùr%¼›¼²¯µŠ¶ÖΡ÷§ùÿwõ5ÀiÚž«£jÞ§ØäÓ?·)bda0ß"®àÙLJükcÂOªMuª¼·pÉbºÊ,mA ÇÏ»}¶ÒZýßåþcz}öüÿÈéüˆÿ»úš<ˆÿ»úš¯«]¾Ÿ£ÞÞFªÏoÊªÝ U'ò®Y®ÐišµÕ½Òµ)ÖâwrB31;[¶@êjî¡â»Qg)³ºû4é*Æ å„ä19áPg<»šC:"?îþ¦˜©nÎè¥K¦7(nW=3é\¯Œ/ï4ko"ÞÜêwƒX+::D ‚ÅÊœ £îžsÞ²®%º¶‡Åï©Ågu:ÜY‡TWX›„ãváë×­4¯ýz˜_×Üz7‘÷SG‘÷S\åçˆï-ãñK$p¤Ä¯TüÄÅ¿æçž}1ÅEoâ;ù|GÌ–V07—å$ð¾û Pc}Ár #n â’ÕØ6:"?îþ¦¸]`⦠Çò§á'Õ&ºÕ^[¸d±]Få6Œ †ãçݾÛk7Yÿ‘­ÿÏaGfZ:Í;ýRÖgißê–´h¯÷k—ñú‡úWPÿv¹¨¥Cà"¥ÞH0þm]~åþðüë‡ð Î–þY™dó[-ÞÏã[ØŸþ{^þQÿ…!›[—ûÃó£rÿx~u‹‰ÿçµïåøQ‰ÿçµïåøQp±µ¹¼?:7/÷‡çX¸Ÿþ{^þQÿ…Ÿþ{^þQÿ… [—ûÃó£rÿx~u‹‰ÿçµïåøQ‰ÿçµïåøQp±µ¹¼?:7/÷‡çX¸Ÿþ{^þQÿ…Ÿþ{^þQÿ… [—ûÃó£rÿx~u‹‰ÿçµïåøQ¶ùí{ùGþ\,mn_ïÎËýáùÖBÅ31Sur¤yòúújÙåÿŸÛüsÿ‰ F¦åþðüèÜ¿Þeýž_ùý¸ÿÇ?øš>Ï/üþÜãŸüMjn_ïÎËýáùÖ_ÙåÿŸÛüsÿ‰£ìòÿÏíÇþ9ÿÄЦåþðüèÜ¿Þeýž_ùý¸ÿÇ?øš>Ï/üþÜãŸüMhÈA^<Ö­ª]ØÝ,Vú\÷hP1xó€rxáO§ëW>Ï/üþÜãŸüMg—þn?ñÏþ&¦iµdìiNQŒ¯%tbÿÂC©нwÿñÂC©нwÿñµöyçöãÿÿâhû<¿óûqÿŽñ5—³©üÿ‚7öÔçÒûßù˜¿ðê_ô/]ÿãßüEðê_ô/]ÿãßüEm}ž_ùý¸ÿÇ?øš>Ï/üþÜãŸüMΧóþ=µùô¾÷þf/ü$:—ý ×ø÷ÿGü$:—ý ×ø÷ÿ[_g—þn?ñÏþ&³Ëÿ?·øçÿG³©üÿ‚mGþ}/½ÿ™‹ÿ ¥ÿBõßþ=ÿÄVŽ•¨\ßù¿hÓ¦´Ù¾f~lç¦@éÖ¬ýž_ùý¸ÿÇ?øš>Ï/üþÜãŸüMTa4îå’&uiJ6Œ}îË>†ŒCUþÏ/üþÜãŸüMg—þn?ñÏþ&µ9Ë>†ŒCUþÏ/üþÜãŸüMg—þn?ñÏþ&€,`ú0} Wû<¿óûqÿŽñ4}ž_ùý¸ÿÇ?øš±ƒèhÁô5_ìòÿÏíÇþ9ÿÄÑöyçöãÿÿâhÆ¡£ÐÕ³Ëÿ?·øçÿGÙåÿŸÛüsÿ‰  >†ŒCUþÏ/üþÜãŸüMg—þn?ñÏþ&€,`ú0} Wû<¿óûqÿŽñ4}ž_ùý¸ÿÇ?øš±ƒèhÁô5_ìòÿÏíÇþ9ÿÄÑöyçöãÿÿâhÆ¡£ÐÕ³Ëÿ?·øçÿGÙåÿŸÛüsÿ‰  >†ŒCUþÏ/üþÜãŸüMg—þn?ñÏþ&€,`ú0} Wû<¿óûqÿŽñ4}ž_ùý¸ÿÇ?øš±ƒèhÁô5_ìòÿÏíÇþ9ÿÄÑöyçöãÿÿâhÆ¡£ÐÕ³Ëÿ?·øçÿGÙåÿŸÛüsÿ‰  >†ŒCUþÏ/üþÜãŸüMg—þn?ñÏþ&€,`úU=*·ÙåÿŸÛüsÿ‰£ìòÿÏíÇþ9ÿÄÐmNrK…:eìÁ³ ²($¶O?töÅsÑxSY…,V+Ëhþûìå@ßxd.H>‡5Õ}ž_ùý¸ÿÇ?øš>Ï/üþÜãŸüMc**N÷yÑ KŒyyc÷#–ºÌQGÝÚâ;¯¶)fbLÜüä•É<÷ȧ7†5·´žÕ®í 3Ü}ªEÉù¤ÜvvärÇJéþÏ/üþÜãŸüMg—þn?ñÏþ&—°_Ìþ÷ýt+ëmýˆÿà(®šKÝ2ëR¹ê,ì$€€®‚¤È#ã­&™áø4™ÔÚj‚Ú)b–-"˜S9à|»±Ïv*ÏÙåÿŸÛüsÿ‰£ìòÿÏíÇþ9ÿÄÖÑVV9¤ù›eqáíÓD‹OÔ®o-//n¥kBëäùŒ9o»¸zõǵMöyçöãÿÿâhû<¿óûqÿŽñ4€†ÇL”xUtNê[‰¤·h®'Y‰`s‚Üñž3è(“@Ó§6^p–D´µ{EˆÚñ¸U;¸äáGLw©¾Ï/üþÜãŸüMg—þn?ñÏþ&›w¦›á»=:ò¦»¿¼{hÌvËu(qž\Ø““ŽôjÞµÕ.æ¹×ör\AöyþÌè©ÎVþñä`óVþÏ/üþÜãŸüMg—þn?ñÏþ&“×q­6)ÝxjÒsi%½íý”öÖâÕf¶u ñqò¶å ôÏJŽ? ØÛý„ÙÞê¯in-ƒÅ"æXÁÎ×ÊyôÁäÖ‡ÙåÿŸÛüsÿ‰£ìòÿÏíÇþ9ÿÄÓ¿QX¡ká=:ÖêÝÖâúKkiLÖöRJ 0¿<¨ÆxÉÀ$Ú¯êú]¾°–ûæ¹·šÚ_6íØFÁdr  Ñöyçöãÿÿâhû<¿óûqÿŽñ4†P_ éãL{7¹½’Fº7‚躉’cü@¨~Xæ©ßxQΕmky5ÍÍüм÷Ò €Œ½ L­mýž_ùý¸ÿÇ?øš>Ï/üþÜãŸüM;ŠÅ WÂÖz­ÍÔßm¿´ûdB+¤¶t :¸2žpq‘Š’ÛÜÝÁ,ú†¡%¼$±ÚO(2ciáwvÎ7b­ýž_ùý¸ÿÇ?øš>Ï/üþÜãŸüM% XŠËEƒOÕ./m¯/V;‰W´Þ¦íÕ±Ùï×ÕÍë>*sþz ê~Ï/üþÜãŸüMsZÌK¿l$˜rXõ'qæ€:;ýRÖgißê–´i€×ûµËøƒýCý+¨»\¿ˆ?Ô?Ò€*ø3þ<&ÿ®‡ù×DפéM™Á+a¹€ê@ï\߃‰]6r±Äßš¥j×CÄúmÅî›t—“ùÞc9Œ¨\ *áÊ£óÉ8æ’ÕØoc­‡P²¹à‚îÞY“ïÆ’eú€x¥º½´±@÷wPÛ«,?aXÅk¨ë^ÚE ½—™,€)™ @À9úŸ×JúH®ìCÚÜØ*Y€‘1ß#ùÐö¥ã<+¥A]ÆBÃn=sÓõeu ¤2‘AÈ"¸è­m/>¸x·-´3lùÉRë¸nÀ#<Ž8­Ù¾Ð<*ÆÓ?hûîöõݳŒ{Ðô¿-ZE¿í=<Ý}—íÖßiÎ<Ÿ5wçéœÓN­¦‹£lu Apo”f]ùôÆsšÃ±»Ò,t=-í ·›Ì’(¸+½]ˆÜZƼŠY4ßq`–âòRÉ4¼l`á_8ô)æ›V~Ÿð?Ì«úóÿ#¹¼½·ÓíÌ÷Ryq‚8$’z$û }½ÄwP$ÑoØüèPþD+\ {a¢dKÍw Àr®¹SÜr +Z™[Žjχÿ±A°k!fÌ#R¹Û¼ÉŽsßvsžôÞùÑÖX×ìŽÜy¿5é²/ü´ý8ë\µôâ×FÔ—U¸ŸP¼»Xî-Zl¦ ;ÔGÑvc¨ôç­"È‹åå”mñ+nÉéØÍ ]Ûúݘž×þ¶äwÔWo>µ¨ê·3Ct‘Í cÙ& È«¶66`å{ç'9ÏjK»¹¥µ¼ÔdÕn£¾‡S[t¶K‚ˆˆ%U °¯99ëIko?øæ Úÿ×ò;ú+·ŸZÔu[™¡ºHæƒP1ì“PdU[ 0r½ó“œçµwQ\CpÉ–961GØÀíaÔt>Ôt¸úØ ž˜D°J’ÆÙÃÆÁÇEI\߃g|)jŠèe\&á’|ƬkéÅ®©.«q>¡yv±ÜZ´ÙLw¨¢ìÇQéÏZvÖÀô;Ú­¨_Á¦Ù½ÕÁa•hÉÉ ÔŠã$’ê8/õuÔ/|û}_ÉXÌìb1ùŠ»JtÆöÍVÕÛô­RîëQ¹û\:€ˆZ Ê¢ •B/¡ÈÁÉ¡koë·ù‰»_úïþG¢Ñ\^§pÓßk¯s«ÜX¾žŠmcŽo-q³vò¿Ç–Èç#ŒS€»Öµkh®®ïmIÒRá’Úv‹l¥¹$ÏÐÒþ¿ÿAÿ_—ù••á«É¯ü5§Ý\6ù¤K·÷­jÓjÎÂNêáERQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW-¯ÈÃkÿ\öc]MrÚ÷üŒ6¿õÇÿf4Óißê–´k;NÿTµ£LC_î×1â˜_é]Ct¬b$L1@^ ±˜ÓCüë£hbyRVD+®zàöÍq6ÚÒèIYÍ).[tr•ãÒ£ˆöèpt»óôŸÿ¯Hg_‹¥[̳C¦YÅ*ò UaøN“JÓ¦†8eÓí^(ó±*¿AŽ+‹ÿ…—mÿ@­Cþÿÿõèÿ…—mÿ@­Cþÿÿõè¼0B`0ÂWahÛ·Ó1OUTPª¨ +€ÿ…—mÿ@­Cþÿÿõèÿ…—mÿ@­CþÿÿõèµþÊÓ¾Õö¯°Zý£;¼ß%wç×8Í#ic\›–Ó­ äî2˜v}sŒæ¸¿øYvßô Ô?ïÿÿ^øYvßô Ô?ïÿÿ^€;Ù!Šmžlhû:îPv°î= L^Ÿå§›·g™´nÛ×ô® þ]·ýµûÿÿ×£þ]·ýµûÿÿ× ÞM:Æ[¥º’ÎÝîeh”¸Ç¡Æh“N±–én¤³·{…ÆÙZ%.1èqšâ?áeÛÐ+Pÿ¿ÿýz?áeÛÐ+Pÿ¿ÿýzïåá¿ëšÿ6¨Í¡‰â6°ÝüÇSÃ>s¸Žç ׿-T’4‹ÒO´€ÿ3Nÿ…Ÿoÿ@{¿ûéh§Ôô ]F;x¼¸cŠ;±s*y ¬§ |õ9«cKÓʼn±¢ÐõƒÉ_,󟻌u®7þ}¿ýîÿ北þ}¿ýîÿ北Ⱥ-H‚9#‡K²$ÆõKt°r2ç¯2«)V© Ž®þ}¿ýîÿ北þ}¿ýîÿ怒ÎÓLÓìÚÎÆÚÙŸïbT-õÀæ¡mGk“rÚM‰œ¾ó)·MÛ³œçÎ{×%ÿ >ßþ€÷÷ÒÑÿ >ßþ€÷÷ÒÐhtû&½¦ÒÜÝ9ŒoÓv3R´¼É3D,`„r ²ƒ×¶p+†ÿ…Ÿoÿ@{¿ûéhÿ…Ÿoÿ@{¿ûéh²JÓ¢¼7‘ØZ¥ÓLË ‡$õù±šà†Ic•⤋>[²‚S<Ù®þ}¿ýîÿ北þ}¿ýîÿ怒Ù,m#XU-`U€–ˆÀ“Júu==j†§ Zê1ÛÇåÃQÝ‹™SÉf89 =óÔæ¹øYöÿô»ÿ¾–øYöÿô»ÿ¾–€;h,­-m¾Íok 0sû¨ã ¼õàqPÅ£éC$0éÖqÅ!Ñ P¬G 5ÇÿÂÏ·ÿ =ßýô´ÂÏ·ÿ =ßýô´Ü´¼ÑÌñ#Kv9PJç®lÕx46ÚèÝ[éö‘\æXáUsž¼šã¿ágÛÿÐïþúZ?ágÛÿÐïþúZî ¶‚ÙY`†8•˜»Ô(,z“Žõ\i`¼û`Ó­Ösç~}wc5ÇÿÂÏ·ÿ =ßýô´ÂÏ·ÿ =ßýô´ÚG§XÅx÷qÙÛ¥Ëýé–%ßVÆM§XËæù–vïç0i7D§y ã’+‹ÿ…Ÿoÿ@{¿ûéhÿ…Ÿoÿ@{¿ûéh²“KÓæ¼[Élmžé1¶f…K®:a±šÇ¾ð±ÔµUººžÐIJ¬€%’‰ˆRS.IÆ@ì+þ}¿ýîÿ北þ}¿ýîÿ怒ÊM3Ošño%±¶{¤ÆÙš.1Ó ŒÑa§Ã§C,p–>lÏ3³œ’ÌrÃð®7þ}¿ýîÿ北þ}¿ýîÿ怒¶ G·¸[ˆt«çS¹dKt ¨ f§N±Šñîã³·K—ûÓ,J¾­ŒšâÿágÛÿÐïþúZ?ágÛÿÐïþúZí¡‰â6°ÝüÇSÃ>s¸Žç ÔSé:mÕÊÜÜiö²Ü.6Ë$*Ì1ÓŒ×ÿ >ßþ€÷÷ÒÑÿ >ßþ€÷÷ÒÐiq§XÝÍ×6vóKÜy"Vdú8©|ˆ|ó?•œSa“hÝ·9Æ}=«†ÿ…Ÿoÿ@{¿ûéhÿ…Ÿoÿ@{¿ûéhº†­áH`‰"‰Bª`)õÁÂÏ·ÿ =ßýô´ÂÏ·ÿ =ßýô´ÞÑ\ü,ûúÝÿßKGü,ûúÝÿßK@íÁÂÏ·ÿ =ßýô´ÂÏ·ÿ =ßýô´ÞÑ\ü,ûúÝÿßKGü,ûúÝÿßK@íÁÂÏ·ÿ =ßýô´ÂÏ·ÿ =ßýô´ÞÑ\ü,ûúÝÿßKGü,ûúÝÿßK@íÁÂÏ·ÿ =ßýô´ÂÏ·ÿ =ßýô´ÞÑ\ü,ûúÝÿßKGü,ûúÝÿßK@íÁÂÏ·ÿ =ßýô´ÂÏ·ÿ =ßýô´ÞÑ\ü,ûúÝÿßKGü,ûúÝÿßK@íÁÂÏ·ÿ =ßýô´ÂÏ·ÿ =ßýô´ÞÑ\ü,ûúÝÿßKGü,ûúÝÿßK@íÁÂÏ·ÿ =ßýô´ÂÏ·ÿ =ßýô´ÞÑ\ü,ûúÝÿßKGü,ûúÝÿßK@íÁÂÏ·ÿ =ßýô´ÂÏ·ÿ =ßýô´ÞÑ\ü,ûúÝÿßKGü,ûúÝÿßK@íÁÂÏ·ÿ =ßýô´ÂÏ·ÿ =ßýô´ÞÑ\ü,ûúÝÿßKGü,ûúÝÿßK@íÁÂÏ·ÿ =ßýô´ÂÏ·ÿ =ßýô´ÞÑ\ü,ûúÝÿßKGü,ûúÝÿßK@írúèψ-¿ëþÌjŒ?bœ€ºMÈÏ«­Z[¦ÖuT ´¶{“ýh©Ó¿Õ-hÕ+$Ûv˜€ôª— ŒUºB(—½ÑVbrµ’þÜ•weö¦yké@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@dD`vVí–š°ãµÄkéO $i´b¤¢ŠÿÙ endstream endobj 122 0 obj << /Length 3735 /Filter /FlateDecode >> stream xÚZK“ܶ¾ï¯˜Ê%œŠ†"‚Wå K+;®ØqäÍ!eùÀá`vhqÈ1Éñjÿ}ú¾Ä]I)ÕŠMÁÆ×Ý_7æM¸¹‡¿ï6õ&€&K|$i²I#ãQœF›ÖnŽ›ß00Ø|wóíÝÍË·Jo2?‹U¼¹;nŒö#m’8ëæî°ùÕ{ýý«ŸïnßmwÊ^äow&¼w·ooßÝþôúvûÛÝ0‡Ú$~–!ΑbÀÏ×åEɨé›BX‰Ü óúšW8ìæöîæ›>!×£ý8Š6Åùæ×ß‚Íú~ؾÎÒÍØvM#*äöyâ»Gx,T£2?R™ýreBÍFл­N? ÍâcÚí´W~\ÛƒÀO¢Áx^°m›–ÒúÇü|©¬Û¿£‹"ÅOý¨’Ð{l®,t¶"«L ¶ÜØÈ(Pm'M‚X± K| õ¾[ÝÜŒ+QÆ×ŸC\êƒy¸A%ƒ öòË…@¤ ,/ï¹qØzéh¸™í öMß7gVK^&ž-ôh·0êðD^ÙÛs'bÍWš±/¹iªëYF¼LpjhšëOÜ€t@`Í61ÕQ̯f Ib¯¶¨Õ¼}äÛ÷J%(%^ÿ° €Ü,‹C·~½:ŽpëOk  ý(ŽŸmìpD2à•À²?m_+êÌW™ynBrñBñ¯‡µ½ü0ɦHÏŒ =M¦H­‡Òͽ€ª·m `wð7MyäYØàS¾ûæ‘ÜÒYg¢¼ŽÙŠÑ\ÈqéÄëš³e‰]WÇ7¼ÀKN§Þ­M úã‚fzÚn¾2¼Ÿrs:53¬ÃbéÁÔŒýlÑ´Dè–…AOÂØûÅZVwÍ¢râ逆5ßÐùÚ×Ή…€“h¾TZZŽB‚\àÜÀbå½ê¸´cÎ *Ëi»$Hb×µ“¶KÑ ­ Û'O´kÅáX…ÎXVÈJêú ¸ ÌáA¡²Æñz(»K•?ò C¥“­.Çk%+¨¶€/ATl|-làìvÆçûæŠ ÑC8qnˆ"N©¨®r¿Ø-㯾ž÷ ÈòúÀA£*Käâ 2‡m˜z÷WP—ܘic„¹0œæ4iF±Äd ›RpM?áX<Û·ôâ]ÛCÇË~Šw%”-x€©+–¥K^ÛJÅ Ë& °š@àHF»dxÇ\W³è¨9«€ûü~k<àxèNBåíqsq˰¯§¥‘Tp¼{/Ú«Dáv ¹ïƒ@cHSJyUىĞ „"¯Y°yWÅSÚÛ·ò½öÉVî¶@öxŸa(±>’x[á‰ÎæmqZÃɾùˆ«TÐ…ò esq_a©ª"“Äqs%Äèðú·—ù ±öà3ùzÓ\W)Ü8΂@^.W4hi#=…óôð_Þ[7îÿDh¾ç ÞXüÀºäoz›qæÇq:Çf¤Á&8M¦´ÐÄÛK»X9Ž>È‹Å_Dp8½Âª`4¸Љ(0òH‚Oˆ è»4ÖÞÏmsßægé#$¡ðЖôBO¶%ÉYåC@ÃŽ²–n4¥ïØw:3€6ÞôÝ%/,í<Ç êp%¸ÈU,àÊÏdˆ¼§8åÞð‡‡è ®ªãV€Ë!J}3¯/Jpþº5HyÒ «ÐQðèÕ܃³·ÜTy}ÿòõð{K~Á €IaÏထfjŽ;e´ Jtçlšs¦uÏ2»~…C ná·‘ˆ¡Uø®E¤šS%m2`CÇž%¤Êx… Z–ÀV/MË„nÉcÈcµàáyВľ)àg)É+ž—€´rŸä …Ž$³‰ â=³¯9* ïˆZÁ0@^íå0¡l!6íãjNûÀÐ?¹6Ó1pžnîâ:x‹Àb¢R¼e•r4&ãYfz@ž‹[µs¾™aÍWÆÈ÷¶r,¹ç6þôNF6LñyŠ¥Fa8xI½”eŸ5ÆÌãܧ¼ã9­¥Ù)ª!ɧrõ°;Êi[É™o…àžçK,òª¸V­0dB´üï6D?E)±–0‹‚ì;ÊâÓ@ªÊ3i'áô;í* }cÃÏ­=©?÷ÌÖ~¸æ±–[ÇÑ´ô©F+ï5o«VÑÀOðNK&yxg,¡¼ÏÝX.mvò‚ÙrœwHíOBLGFÌ'Z¦RØ5æEQï¯òŽ}þ,e… #3*Êz¢Ð)J-³žH˜ .ëQcÖí.3ˆ”ƒùè ^Ä¢‡²>ˆ‚$éV!èˆëf:( ŠÂÇ„n`œÅŠ(‹‘4e-½à¥ÍTot1‘=qUJ#éÜП3Y£àiÕl ´òcÈ™†Ô3ÜîÂÈåk*¿¬ ¬O~ˆãwç‹€ou¹ˆdì0q*µÈ”€v3Ûôåu"…¥•lL’ùÚ$ÓÅŒ˜}–\)ÑCQå6§r/Z‰›dòŽ(ä|Á9)H§n Êå‰ ú f—ÆÃeªèª·¬ÐúH’|½Ÿpzº{8Ùz1àœOä2‘«¯iW6Û†Þ*–ˆE® _ôìmYÙu§ÓÏTb1ß“?YôVOÔõÏ#;ºRd_i’±hHN±>ÞZÇ/•‰½š g„{ôÚ æ;˜|±@¶T¨/•ó™sã2Æû2ŒWr¦ÖÓ—}e¿È'ÆOÕ`GoÚ—¤,Z ¼ØÄ„›Äc£$ù=Q&¸?Ùê ã/êâ|k6A.…e®¨5ª™ù°™Ü2 °¡oYKÝ™›bµ– ,w(v avÉ4 ²oH´w3JójgÏöåz]ŸôžÈ²Q ¼Âu¤LnllÎg*šãMÞ÷àÇG“ç&c«ÕWÂc XÁ÷M…µMÈ$'ªÎ\šÛòþÔs› ¦Ð:ÝCìâk<ÓÅûЧ6#ç*Œ E\f Â'ÈX  &ÊÆ³2Ò³TõI¬Eõ®OÊ™°-•í¹‰#*öPö‹ádÉ\+D†êJÙÁ§El.g”(È“R6Þðj&½£§Ähôõ4__K~f;1јb—wÜ”ómš…ɹ‘¢pêH#¶Œ+ɲY=‚»åX0øt ñt FèѼsJ’*r^«j¬¦Hµ¹_dÕ#H†BÛ8ì4PÕjE xfÔ­§¿©o²ä« ò1¾+‘ŠY,É.¶(…§$,K!ãÊÜÁ`§|V{Ò0ÞãQyà÷ü@™£üb®?uáG„ Ù3×h¢Ï8óO‘jýÏÁ…q¡H+R^9áHoˆ 4Îßéaê'fÁ€ptDZZÎ'^äUæ‚5GWiï?u•îñ†¯'®Sót«Ä‡ =½p)@uÏEÐV[Λ”KÎØ><–¹ÇR9Rćšž»8Ž!¯¶Ý•²1¿_;áÆõ˜L|ý^ß~¼pY«ëÆc„ºç¢É“Ñ:Öëöwä°±«€Ç Éó]ë˜Ñs÷þQÂsYÀòˆýñÂg'Ú¸#2¡Ðëøylçâ3Ó ŸÎ··Ð¶o>Ò¯b"ï-Îõ‡qÂU-Óå qNTÁICT†måα¤„ØŠõ>ôKíøT}e}Xóm<Ì1´w¶¿¶õzêòò-¤VóÌ ”Šxê„Lëo|QkŸõ*œ U°¶ ¿üøÈý- ‰„íÞ‡:ª«¼Ëïkû—µÙ-"ÇÿÝÍÿD¾g}cXÅó˜Y~ 093æ†é1Ü€÷æÌòŒ)À½dA ‚_»N zxÂiBï'Ì”«µª žýeáçö¨hþ³•%œ´‘”ó…W¥²TÆ3:Ò~Áöî\AЧ\ #rò­§¦³CÂîr_&XÏçç ‚•ã牔äçïäpo}ÃàCã4«·é˜@h0Œ“xá”ø¶¸œ›èUÐæÎ¾¡dÈ“¾þ æmWÝ®+[¥l©qm—¼íÑÐð]©q¿FÂZó‘¯Î÷k'ôgÙ•{Wì¦ý¡îªZ[¸VËiPuŪ.¸—µèp ÝîeC8Z9ñj¼-ìT:Æ›E!Zr¾\òrõÌœ–#‹}9aÕôIíä> stream xÚ•ZYsÛF~ׯàÛ‚U!<μ%¶ìdksÙªÝÚJò’#k`0²þýö5¸ YI¹dô4sôôñuÿØèÍü½ÛÔÿâ< c•fé&‹âPEImZ·¹ßür£ £Ú¼»ùöîæÕ[c6i˜§Joîî7YêXoÒ$ #»¹;n~ êòb¶¿ßýzÚMæ‰I°§†ÑㆡN?õµ¨¶;“¥™ ^÷ÍÏw·ï¡« ·»8QÁûÛ··ïo|}‹ƒÝÜÞÝüq£i¡zœÕ†Imç›_W›#¼ûçF…6Ï6Ôó¼‰b&9~Wm>ÜŒ;yîégÐ ‚ÌÚM’é0×§øã&´*Uõ˜ôÊÆ:Lcþ87žÿêû³‰6o˜ø—ϦØù9v“IXÂ3¹i*“n’X…JDü¶|¸¶Î‹+ùz»³Z¯›ó¥©]Ýwü¦¹çgÁÇ-ôiÚÝ¥8È·m³51¼@/%ë s2 BÎyâïaH›EÁSsEÂÇæº¯Ü®r÷ýîP•‡Ìnjîן~&z[gaï·F×¾oê¯De¦Ê¥` ¸ˆø%ÅRÚëÕcYVé<.͉$¸^˜QpóÏÒÑR\ËìFžÇ²¨šî³o>1óžß&¼äü‰ÕÕáJ`}4ùl™(v›XÙ;~ïI€j'QÆb„7,ÆÄ£üÖä  #5ØÎsrÈÂ$Mç‚ÀI:W¹CÏóô§¢—…G VÙbéÃ)™$ ŠúˆHÆù!ˆã"» ¶Ì“ï:ØžÚ²i{ØU4y¨<:­cqÄî|éŸ`“¢¦ÖdAY3‹% ÄL•¿È´ìåo¨qÝØÂu¯Ì8Yz$'cr¿t ^÷mµ{áx´ ³,{ùx”6óãÁ úæá¡rLÓzwr@`w¹¬5áú’ì*µ¬c©œ'qJ–Š’¥^ÉÒ‰"À‡à'æßQƒŽ ôêù|8• ‰©µ“£Á3@ĵ׉‰o¡F)=è‘Ñ‘ @êÐT×óêdx¢&2^V@ zŠ˜‡†TèqRhž[øï‡oü©s‹Wg‚½Û­­£t®F¡‚±åfÞrÓàØÌz,ûóÄò32kfMÝÎæ© ë–p8õ®6SA¿ÕÁIè¦=’„3ñïi>Ý pKè\3Yð$ <2šgžß5Õ‘ßùËÕ°¬4 _>œz&Ï͵î¸!n“§4:£I¡ ﯕ|æê+έ۰ؾ€¨\?›=™În¢aJ «$Ò2Ýl5úbøÏs ~ÌmÐî™?¬è¾iª¾¼pƒ´keÿÅåâŠv£=Mãã«·6š˜5…071=SÓôí»¶¸œÊÃâ»™;ˆ¸ôÁgZYïáìp¦ÿÀù;f‘‡š¥° ~ª¢ëP·-fŒ}–ÃR/ö/Ù…ÅrˆÑ9Ó³¬»¾¨-D‚'böDܯxÃ<,c_r†0“¡“ß%Žù ¢£-×á¶Lœ Ni1áN+8Mæ ô­ì& #3èPj‚Ô쑳,¸ìCÒ ŠøÉvš±BûÜÆÑõEY¹#/;uV õp(¢O—ª¨Iß.~pç½k»/ÚEÚ$ŸÙ…ñˆ1\.8s ~°vIÛÄ>òj8¡…guI'*Ì­yA{w:KB»Ô8Q¦t¦L)+S êpÝï$Ö»*»7X€- yfa…«qøºÆ‚*]îûÌ ”·ýµ­g1Y:¤gˆ¨ìE»¿šwÛÜîSÿ¥ã4òÂAžoËbñ‚´i)²qͬ\h\жg~Ý´gú†ZÝiÜ╵oÉPDYÌh碛š°ÊÙ„•G&ê3Ï‹¬©¹"Lû^¾á ¦ò`ˆpÐztåô¦Êh¬a ƒúK1¿ãFßðÓoY¸ìiHÁÏתàÆ#x©’Yðàjˆˆwkaµèa¢D#RÓÝY•ÿÝjD×W~{ X„;–½ÿÔ11®!òéè&»µm¿w£&Òîýy˜ƒúÚº™q¤ù³oªÞµèqp¬¬£ EšÉ”Vƒ‘µCNôoLýç»Ë¸‡q<¸W+C3Ö‰ïðáÔ nƒ·[«(„ž15A¡|>G Ú þœqÿ$L˜Ä MÝ;Bž|eŽ÷‰=F<ä¡위Nví¨÷ÿ‰tÜàs‰c?Â*Ä•aÕÐålCÞǺ30 ·8ƒŸhNþ¶ž‚ûæÊ%·‡„5ûr´ÎC•Ì#R1/’â`_>>´Í·‰/xJ¦Ñ¸±tŽÇð Z&‹Ÿç™Kp£8'ÅçhÄ¥‘ã, Ô;æÑ¬ã»|‘›å6%‚_M¿–ˆôÀéäâÖó ²]Û”Šy=” B¨¿ƒ [ÓŸšë1¼Ìh Ù€;µ*l³` —¤ökÕêà™ß»CQÀ1õkúuë<=,ÏÑ9Y‰,) ¬DmÀÐY¶H}<)+!„Ü'QJ±H¼Áö­O£©ßTJùò¾5Ï'î4­Sœ¾wk¡»¹¢Ù«T  Lr8ÈaDíܱc²ž]%c7Á:·%äØÌØû€²#x_ìÙ¡ÄÉ!£yY ÙºŠPVw*/ÝEx@#ÀbI[Â×EnÝ(#`õäZ:}ñ¤–ªQ­’ÜOñÔq‹‹3@ú¡op5L–gJª¼´ xŽJ.«Æð²g8]<ö²TÿõÌç€eD)˜:k¥¥*¯çnióë.!~ðÅ2ôÜ\ÌÑ21ÓRƒÑ²ùÚ÷mø)[žî÷ƒMÚnòÎ(^äŠ{*ãb‡#œ]p1rG`ŒÏíì°6dblÆ{ @´ÿy¦IË3ë§úì.ñ8|çÇŒ³H` r9UCžàÏgƒ/žG.Ç6ý&ñ–üÒ?;é'~jÂ…ÈÇ«0Mâ—*%i˜DÉ¢`Sšó…â$ #½¨ä#ÒÃɽ±!¨,’$ã«1îÐk¯#@ýb.i"åÖA ×D|­Ž‘z•Ž›û¢åNú‰ Z¥¼ët†ÊW“¡Ìt£¾¬øÊR,«;´MU¹ãp†ÈftÝÑçÍòÕ#¸<>pôöcr°W,oÌ•¢Ä²·ˆ&W.þ'°¼íÄwƒécƒkÆH÷ «Ê(¹%â@r¶@,kñXK‚À}Ç"ÍEáY;tR¢8bKsc9E(w/óÒÑŒ/ÛµÐU6}65¶Q¯Þ¬‰óøåûÀx¨€ƒyu3Ø H¹é½ƒòP›EzÚ7t|àÏÜpåC rçŽITä¢ãɶvðÄo éÁÂ5™ëB1Åm|EÜêêI TÞEÅÑ{Ðõa"W,¿¨²9»ª£³µ™h–áí^‡@?˜òtqÌc(…ÔP£ÂƱXÜËðÚ¯÷JnM¤èݺŽo_#‘Sb «’.R#K‘Òú;F$àé¦ûÚñ¥UuyÈeÒÁkÈè{¾ã²A"¯æ§T÷²šŸG!¯Ü; ¦c ~ªûâÓj¨”#ãêÿWÜ,Í—åÆû…¨°m>iôŽÐ!°^¯Âû¡J´ù‘€üo‹žŠ–˜L{LìE0žAçâât®ϋ̂YõkâÌjî™7ºzꈑÙt@,vkÞb ‰·X ]½Õ/µÖjˆQ˜$ƒK} úeecB ½Ö Þ³†YjÿêÏcF)øÀëÍÎè–±Ýìzámóàè:Ÿ®@éúðÇ)ü%û*80Æ_‰ A…®¿’øóÊNm}qï™$í¦wüDŸ&”pž‰XÖTNÿjÄ2 B;‚0R­‰Ú$až¿ Ñm>¿S”Ö8̆²L2\+³ÿ‰|e ‹§‘›^4ÌvcÅ»•oXDÕÜiø‰‰*Õvt•kî…ãÛ É×ÇþW AXÀ Ã'çòÓä'ý†ê¦^…¯CïÏ/¡î!çr>ã:_É2¡±Ó;@í‘d d§ù’Oó4k§˜áMª~9 ›dq5Œ£>¶e/ó¸=®AÎxüã$=Ñx >.O×u>‘@B‹f«¹-—U õ›R¦¢{!8ˆ²>´!/C¼D¦Êý|J§xek »Ä> stream ÿØÿàJFIF``ÿÛC  !"$"$ÿÛCÿÀÕ"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?û)þé®7Æßñé'Ò»'û¦¸ßǤŸJä¾ ÿÈ{Vÿq¿ô(ëÔ«Ë~ ÿÈ{Vÿq¿ô(ëÔ© ]'&ÓÚëITÞk€f´€¤Nwo$„?ûAT¾½é¬ÀúUK„'µQ}>üÿË<ÿÜZàìµ^K áÖ/ü­\ý–ÄñÛ ê ൑=ÉRüIñ¯=ø%­§´ÍCX 4˜Zä$\Å ä®Ç~Ãå= ÷®ñ“ìRGs¨Yo'öŒ·#ž¬€3Ôr:Õé´[YfyZIƒ;8#þæf8jµÔ}š½¯ÖÛ«Щ_˜ñ¨Ý$¨ÊÊvþPeû§ÊÎÌŒuÇ^i¶^ÑlîÒæ½m¤BHê×§Lr®åOâ*'”ÖšŽ›z[§á§âÇ Lb÷<ÂæûJ]Ãû?Äw³i’^*ê—Ÿo‘ä„yl@g'1áAÆÜg¶k1õ I VsÏrëmªE¤Ï.]çQå´x'ïœ+c<°\ó^ïý…iÿ='ÿ¾‡øQý…iÿ='ÿ¾‡øSYv%}„ý_—§ô´·§¦¿á¯©4Q]I¡kZŽ¡¦A¤÷S½ÃÊbqp¾`Üyqd: Õ§Ô¶µ7Ž×W¹—N¹×Ò’ÒñÔÅžâªèAxÉõÍ{Gö§üôŸþúáGö§üôŸþúáGöv'ùý}<¼ƒÛC¿áåý3Ä﮵aãy,F« œÝÛ¥”wZ¤‘ùÐmMÀC°¬Å¾q¸¶AôÇ1}¦üI¦›ýR嵘õÉ|Û.,p…”#,YÆÝ»Nð9Éæ½Çû ÓþzOÿ}ð£û ÓþzOÿ}ð¡eؤ—¸¶¶ÿð?àëSw×ø'Œx³\=õÕ¦«q%ŽŸ"ÉÏT{¦WaŒ%x$`àUVÔð^(uËÖð¿ö”q¶£ö§fT0³2‰ó»g˜nÏ#5ë²x ÃÒKu,‘\É%Ô‘É3=Ã1&6Ü€÷T7!F^9«ZŸ„´ÍFÜ[ÜÍ~¨6`ºx[?ï!ðÍ\rÚÑJ*?Šòüt`ñm»žuðÿVµ›MŠÐêݼ×7†Ñä‘åg†9Šƒ¼ç £““Xþ%´oøIþÁ¥j6÷7ºµÝͰ¶ß5°f\Ê»S€ÊIÝÖ½gOð^…`!û$2FaFŽ6Ý– ̹#$’$òMM¨é–6v­;5ËòUYrÌNw$ Ëû/ ®¤ýÚïuÓÓüÇõˆ8ò³€…SQñÅÔ²…0hð,q‚8󥾡6þóz×=¥ê~Õ$Õ5¨õ[;(“O{x ±¸U¸Žl™HCűµ{q݈¯YþÂÕO"Æ=÷ŸÒ:?°µoùò¶ÿÀãÿƪc•â’øz%¿ßÓ©ONûžS¦$ú·„uˇ›T†?2kiÕÆY‰•A#’ÚÝè*]oSÓ­<%¡é×2éÖ÷:‚ÃÅë"Ç~Zù–ëÔa{œvרÿajßóåmÿÇÿQý…«Ï•·þþ5Uý›Šr»Šµïkù[·õ°•zi+=Uÿ~GxÆÊÖ-?ìú­kus¨épÙ[Ú~Ñ$Ñ®BHŒ¬6˜’äã=©÷·7zŒ¯fþÑíCsi­“ÂŒ.mˆ@åI]àe$«äW¯ajßóåmÿÇÿRÁ¥lÆíæÎ×(¬Šäž¨NåŽk¡ø{ýŸÞ­n.åþÓ[릞ÕîœìC3a;TAÈ9¯Sþ´ÿž“ÿßCü(þ´ÿž“ÿßCü*ªe¸©ÅÇ•kç龚‘ÔÕµíÐñ»=jOí]?H“S—ûA5Ë¿>ݦ>aƒlÌ™\äÇ‚˜íÓÒ¨ér^Ã¥i²^[¶©¡ÜMqqwtò¤R¯—‰âvcyû¸•{—ö§üôŸþúáGö§üôŸþúáGön%m÷úùyßä?oN÷¿õ{žo­ßµ¶4indš -@)[ù/bžTXJ¼nü¸ŽŠFÔ uÔ Ñ|E¨^Ûtàòý¾Gty.JɆ'(Jà¸Ç ¯tŸÃ¶3Bð¼—;]J¶Ù6œBGÔU-#ÁZ&”Ò½§Û<ɱæI5ËM#œÏ–ÀÉÀÎ95ªËëÚüšúï­õ%Ö…¬™ãúÕæ¥§%æýËiÖÚÂE,×7òFÑÂÖáöµÀ ê»ÈùºóŒR ¹RÏFMÄ&=&Hî[í¶šƒìw<”{€œ!nN7ç5íŸØVŸóÒûè…ØVŸóÒûè…gý‰²\Šýïåkí¿[•íéßê÷ÿ€yŸ4ö¿ ´i-æ–'Ýf»Õˆb­<`ò=A úƒPؽâj6—ãP¿’K­ròÊX¤¹wˆÄ<í !;W^Ëý…iÿ='ÿ¾‡øQý…iÿ='ÿ¾‡øT¼·ù½Õ«o~ý6^’¾ßðO³¼ŽÏÀš;÷µšàåpÑì9‘‡#aàî¬c¼2Å=ä–Ë¢ÌÎÉà ˜ùd¹b6œ(#>æ½Ûû ÓþzOÿ}ð£û ÓþzOÿ}ð¥O.ÅS‚*ÓÏþþczro_êÍ-o¬éº ¾­üVͯIª;ù7r­(²Ë(Œ®1Ón8¬v[Rû'ÛôÛ‡‡Ä¯*éÑD~Ú~~mÛŽgqùFTžkèì+Oùé?ýô?Âì+Oùé?ýô?ª~&:ò+úúyiùùŠU©É5Ã×üÇèÿò ·ÿèF­RE[[ÇeŠ®p[¯'4µïaàéÑ„%ºI~$Ú”›AEVÄš¯÷Mq¾6ÿI>•Ù?Ý5ÆøÛþ=$úUr_ÿä=«¸ßúuÔ|HÒ|C®i)¥è³YCÄý±¦ãgNÈ¥Q¸=úp1Ü×/ð_þCÚ·ûÿ¡G^¥Iàë}vÓB†ÓÄ2ÚÏyÈ&‚V1Ý,YTîìxçï[ZQÆ“gÿ\ÿA•¬ÂßÃðÎc’Aª¾ÈÔ³69'򠓨 _C'þ !¼p| <ÿ·ˆ<ß3`òK`ìÿ¬ÚCck;Å~4µÐnäKÝ#Z6p² õí·‹v0I,€ÈÉU WþñÔ~‹ÄäXµú_ÿo°—í¥ÛïA¿ÌÆ|£åíÙØ¼ÖŸufÕ¼FºN§¥ké [$SȰiýºC‡̈B¢q¸u-Áà´¶O~¿×Þ¾AÞÛ_ðÏÈìµÖÝ jx9ÊoýªýΩcmªÙésO²òõdkxö1Þüé­0oj,ØÊ@#ýYíÚ³ümc¬/ˆôiiÕöˆ§´I’9%U”¹ TpHàÒ[ê¢ÕïŽ|1grM¨JÞmÄÖȱYÍ+´œH¢ùO|cÞ³õ/ˆZE½æ‚öÆKÝ7VŽá…Í´ÌèbÛÇ–ˆ[© ä cšÆð†üA¹¡j7ÚaµH¯u[›„iãc Ü6ck“þÎqPYø{ÄÚ6©c­[èm~mu]QÚÒ;˜‘Ì7˜äR̰È$zS]/Ûú@ü»ÿž¿‡ânø‡Æ²iž ¾e¼‹M{0–é©2 ¶ƒæd`Ÿ› (Ï<Ôòx¡ïÖäÐ'±[Vº·ºî¡i!IQUeʱR'Úžß×—ùµ§øËÃZ†°4›MLItÌéîdÊÉ÷•$+±ÈÁÈRO°µ¿ˆZlšÖ¥è7ââ[]-.XZÈbdÃï !]„‚ùIÅbxÁ7š|šf—¬èš¼¦3˜u®4–`…`²$L©!±˜<⟥h^*‚ËžŸÃÛmô-J9dÔ£ºˆÃ4H®Ýæ;†FÞ¹æˆÛ™_ºû¯øz W´½äÿ«÷ˆ|I£è/o§s*Kq¸Ã6òO#…Æâ5fÀÈÉÆ9¨µ¯h:9µ[ûÉ[¤ó!†+ie•“Œ¶ÄRÀ ŽHV?Ľ6úñí.tTŸT‚9µöŸ{ n[+‰F 0ßw¥S[/é#¶ñé ®Ü]hðÙßGkr1ŒUïxC^Õnü_µ¸jFÊîÒ´„Wx6î…°w¡;x`03×"ŸKÿ]?àúô¿×õþ]Nª/xZM:îÿûIã†Í£[-¬±É˜@Bce†'ƒŒWK^á« CJMCZµðv³ý®é =G^ <{òv»HáBäžpO§5èßõý]„‚³"øÌøBÖÞTÐïõ#,±£ü×›øûÃZˆ5«]CRð5Ƶ¦¶m Óã¿‚ ´ùÙŽòÇÌ A]ƒ(ͧæ»ïÙjÚoƒ4‹ ván5+{TŽâE9€õã8éžøÍR³Mùþ¯ô·ôÈÖé[/ÖæÝeëŸñ÷¤ÿ×ãè‰kR²õÏøûÒëñ¿ôD´Š)kÚŚϕæ’#UFwlu¨$þUÿ Âÿóó{ÿ‚ëþ"®x»Âšw‰–ßí³]Á%¾à’[º†Ãc*w+Õ=; ç¿áThôÖÿïä?üj¸+Ϧý”bãæzØJyk¤ž"RRòµ¿#Wþ…ÿçæ÷ÿ×üEð°¼/ÿ?7¿ø.¸ÿâ++þF‡ÿAmoþþCÿƨÿ…Q¡ÿÐ[[ÿ¿ÿñªÃÚf_ËÇüΟe’ÿ<ÿò5áax_þ~oð]qÿÄQÿ Âÿóó{ÿ‚ëþ"²¿áThôÖÿïä?üjøUýµ¿ûùÿ£Úf_ËÇüÃÙd¿Ï?Ãü_øX^ÿŸ›ßü\ñÂÂð¿üüÞÿàºãÿˆ¬¯øUýµ¿ûùÿ£þF‡ÿAmoþþCÿƨö™—òÇñÿ0öY/óÏðÿ#Wþ…ÿçæ÷ÿ×üEð°¼/ÿ?7¿ø.¸ÿâ++þF‡ÿAmoþþCÿƨÿ…Q¡ÿÐ[[ÿ¿ÿñª=¦eü±üÌ=–Küóü?ÈÕÿ……áùù½ÿÁuÇÿAøƒá|qs{Ÿû\ñ•ÿ £Cÿ ¶·ÿ!ÿãT…: ¶´OoÞCÿƨçÌ¿–?ù‡²É¿ž‡ùW‡§‚-Òí¡‘æ½…g™ÒrÌÊ ÎÐxçê½µÒõ«» ’,w‘D̘º°ùGäêMeióE›k§ß!ÙBºBU‚€~ú·ÔV–„£PÕ.õ !ßnÐE nI™ZBØõ8õÍz‡„]þÛ²þíßþÉþmÙvïÿdÿ ½ö[Où÷÷Ûe´ÿŸqÿ}·øÓÔZ¶ì¿»wÿ€²…Ûv_Ý»ÿÀY?¯}–Óþ}ÇýößãGÙm?çÜßmþ4j¶ì¿»wÿ€²…Ûv_Ý»ÿÀY?¯}–Óþ}ÇýößãGÙm?çÜßmþ4j¶ì¿»wÿ€²…Ûv_Ý»ÿÀY?¯}–Óþ}ÇýößãGÙm?çÜßmþ4j¶ì¿»wÿ€²…Ûv_Ý»ÿÀY?¯}–Óþ}ÇýößãGÙm?çÜßmþ4j¿¶ì¿»wÿ€²…_†Dš%–3”ai¿e´ÿŸqÿ}·øÔˆªŠ*Ž€SÉ»Tu$ݪ:Lh(¢ŠC5_îšã|mÿ’}+²ºkñ·üzIôª$ä¾ ÿÈ{Vÿq¿ô(ë¥ø™àø|W¥Æb[uÔ­Iki&\¡ÏTnÊ}{ s_ÿä=«¸ßúuêTž ð埅ô´ÛERùß<¡ù²­Ðv°·4¯ùÙÿ×ÿÐE%.•ÿ ›?úàŸú¦­T®zÕÖªW=i“®ÿÈSÿ¯9¿ô[Víak¿òÔÿëÎoýÕ»BTS\A iã=7¸Î¥¦hʆ '*<Çš@ÍÜ…vP?1ý¾Çþ-ÿïêÿo±ÿŸËûú¿ãZ{¨Ý@Ÿo±ÿŸËûú¿ãGÛìçòßþþ¯øÖžêŠ[»h­å¸–âá„,Œà,`rKàc¾i\ ?o±ÿŸËûú¿ãGÛìçòßþþ¯øÖŒÅ<)4¤±H¡‘Ѳ¬§AE?u03ö͘*ÝÛ’z «iÂH…C+pA³4ïøö)’DrÉäöWe fŠ( ªê–¦òÓÊWêé"27+öÈjŠƒíºÇýôÿüþ5GÛuúéÿøÿüj§¢€ ûn±ÿ@ý?ÿŸÿQöÝcþúþ?ÿ©è >Û¬Ð?OÿÀçÿãU-õÝݼ·‘[@–Ì΋ Í!f*W$•\½zöÇ6è Š( Š( Š( Š( Š( Š(  Ý_E²ÔäŠIë¡Ád8.¿Ý>ßäV„H‘F±ÆŠˆ UzS¨ Š( Š( Š( Š( Š( Š( æíQÔ“v¨é1 ¢Š) Õºkñ·üzIô®Éþé®7Æßñé'Ò¨“’ø/ÿ!í[ýÆÿУ¯R¯-ø/ÿ!í[ýÆÿУ¯R¤€)t¯ùÙÿ×ÿÐE%.•ÿ ›?úàŸú¦­T®zÕÖªW=i“®ÿÈSÿ¯9¿ô[Víak¿òÔÿëÎoýÕ»BT:+ 7ý|Oÿ£ž¦¬ý&LX7?òõqÿ£Þ†#œð–¡­ë·ú†»s¯µž›g¨\Z®›´EJBÅ ‘ÙKî$nà€8¬_ x¿Y¹ñ®•Ýkz&³ Ä–òjvЩ£BbÃíÁÆ$ ƒ]3x_@þÝ}i,ž+ÙÌ‘¢¹‘FÆ7Í?ÏüÿÇSñ·¨éÚ›­®†h6×ÒͤNó<™P¡YJª.ÞB€yU,|OâOAàû{}`èójkz/'µ·ŠMíÚŠÀ+OÐ×I«xOú¤6q^X1pùÑÀ$8Íjig6òŸúzŸÿF½WÑllt¸å†Â%'¸’âA¼¶é$bÎܓԒqÒ¥ÑNm%?ô÷sÿ£ž•ïaÚ×þ½ M¯ãÆû'ú5o¼ï3®]“fܳœç¿Jåìþ êúšiãEð´WsÝi+ªKš—•å¡b»ùgsdwÚ+kÄžÔ/|A»¢ki¥ÞýÙÎ&³ûDrÅ»pùw© <ç¿J‡Â^ ]îÎuÔÀµÑ“KÚaÚ[k—ó3¸ã®6þ´•íýzßûhÞïåú_õ24¯kz׌ì_B´ŠçK¼Ð ¼k{«Ÿ Â^V Ãû˜Œd:Õ+ÿjðÛÄÚ!¸’wñ„–/åöå•B¹(a1Ç0 c©­mÀZ†ˆÚDÚ?ˆã‚âËO]>奰óâ%}à…Þ66Iç-×¥OuàI_Nš+mgȼþÜ}fÚàÚ†XÜdÝóŒ:޽ªôM_i?ËúØZ×Ùkóþ·)M¬K¦|B½Õ5´[Tµð¸¹¹†Œ¨›frv’qÀëPè¿tË©¦[ølatùuk-N;Æ ’E@<¹0FH<óÅl^ø.mKQ7š¶®·&çI“KÔ;_-gFbÁ“æ>YŸïf¥øGP]&ëE×5¸5M2k6´šx‚m¤mËHî8ôQÏ5òÛÉþrÿ€Vœ×ôü£ÿöֵýOâ/„äÔô_ì‹iío%‰øLdêaÇn½kZñeÕ¯Œáð͆™k=ÃÛ¥Ã=Õø¶Ü¬Åqìc# ¤‘Æ29æ Ñ|¬[kúV£ªø™5(t˜%‚Ö?°¤!ÕW28r€£¢Š—Ǿ¾ñZ‹95{;}4ì&6Ó„³£’ñJ\lnœí8«vº¶ßðÿÖ„«ÙßëúÔšOêW>'ºÑô= /¢ÓÞ8ï,là6Ô]Œ\… Ÿº95GPñâiþ5¶ðýÕ¾–ÑÝ] XÚ U$¹F*J—·Ú ©#ÜqÅ\“Âú¥§ˆîõm_K¯Ú7¾¶žÌN²:(]Èw©BT~ðã8¬˜>ÜÁª[¼zå¿ölÁÕ–Ó‡Ú …™Š™ƒŒ®Xõ\ãµLwöëøÁ·â7³¶ý?øü Ý/ÅÖþÐõ»»ÃÒÜx¢êÖÙg¹XcÜ[?4 œóì uŸü]oâË[æŽ;h籸ò&·ks eCITÀƒè ‚+2ëáûIà‡Zhdm\êÖ}™XÚÌÀ‡VâD9<|¼½ë§ðõž¥edÑê—ö·× å¼Ë{?³¨\ »›ßœ÷¢;kÙ~KþKâÓ»üßüJŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( æíQÔ“v¨é1 ¢Š) Õºkñ·üzIô®Éþé®7Æßñé'Ò¨“’ø/ÿ!í[ýÆÿУ¯R¯-ø/ÿ!í[ýÆÿУ¯R¤€)t¯ùÙÿ×ÿÐE%.•ÿ ›?úàŸú¦­T®zÕÖªW=i“®ÿÈSÿ¯9¿ô[Víak¿òÔÿëÎoýÕ»BV:­å‘–a5ÜM3ÉÀÈÅÈ`켂Ǧxô­ŠƒO¶·º‰î.bIœË"0n Ê€éÓõ FwŸuÿ@MGþúƒÿŽÒy÷_ôÔï¨?øímgéÿóákÿ~Wü(þÏÓÿçÂ×þý/øQaÜÅóî¿è ¨ÿßPñÚ<û¯úê?÷Ôüv¶¿³ôÿùðµÿ¿Kþgéÿóákÿ~—ü( ˜¾}×ýuûêþ;GŸuÿ@MGþúƒÿŽÖ×ö~Ÿÿ>¿÷éÂìý?þ|-ïÊÿ…sí7 š%þîÛ¤€ û‘!8ü ^Ò­äµ±X¦eiK<’齨³cÛ,qVÛNÓØ`Y[¯ºÆ¡Š­`ÌÖä;)#Ǹõ;\®O¿±ES¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(9»Tu$ݪ:Lh(¢ŠC5_îšã|mÿ’}+²ºkñ·üzIôª$ä¾ ÿÈ{Vÿq¿ô(ëÔ«Ë~ ÿÈ{Vÿq¿ô(ëÔ© ]+þA6õÁ?ôIK¥È&Ïþ¸'þ‚)+U+žµuª•ÏZ@dë¿òÔÿëÎoýÕ»XZïü€u?úó›ÿEµnІŠßè ÿ_ÿèשj†‘&,þ¾n?ôsÐ#Ww4nª&nhóyý¶•q¬üdÖõ †—q’ö‚!yjòË1o>K $’NÓš—Mñ·‰G€ŸÅ·ðé­Û$:}œI,¯7”¾dŒì ä‚p£½u~—mc¬êº¬RLÓêf#2±WËMƒouÉ5F i àµð”ž|úz¡PÎøûÃP0Á¹0(Ù[úóîå |Yâ-çVÓ5øt«‹Û}]RÒk$‘"q «3AÛÈ<ƒÐb³ì|KñëSÓtÁ'…„º––u(&6“í@»—ÍÉ?¼_›#¿­iàëâԾ٩꺕֡fld»»™ZXà ü‰… 9$ôÉ=sWí4 mKL¿I®LºvžÖ‚˵£b™-ÇÞýØä`uâëÿJÿíAù_ÿl_ðºþ#ð–›­KÛËué#S® Vúdµ¦Á)ÿ§™ÿôkÕ/ iv¾Ñ-t{)&’ pÁR œ±nHu>•kF9µ”ÿÓÝÇþŽzm¦Ý„•‘Îx]ñøžOøb3ϵ±·2ß«²ÌÊ‘¨B'kÇ qÁ­¯ëQø‹Âúv·FyÆNv7F\÷ÁV/ˆô/ÇâyêÀY\Å|Ϊ6³2H¥É˜8ŽEmx;EþÓ´Hå3 83!ÞÝY±Û$“D~­_éoêàþ/ë²ýoýXÖ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(9»Tu$ݪ:Lh(¢ŠC5_îšã|mÿ’}+²ºkñ·üzIôª$ä¾ ÿÈ{Vÿq¿ô(ëÔ«Ë~ ÿÈ{Vÿq¿ô(ëÔ© ]+þA6õÁ?ôIK¥È&Ïþ¸'þ‚)+U+žµuª•ÏZ@dë¿òÔÿëÎoýÕ»XZïü€u?úó›ÿEµnІ‰ÆÀKmsÎ<ùdâåWWvàS‚7cÒ¶ê(ñyä—c¢¢HP(V+ü$dœfÚßÜÔ?ð_qÿÄRh[rÿÿ÷üEmÿgÚúÜàLŸüUÙö¾·ø'ÿE‡sûBÛû—ÿø/¸ÿâ(þжþåÿþ î?øŠÛþϵõ¸ÿÀ™?øª?³í}n?ð&Oþ*€1?´-¿¹ÿ‚ûþ"·ÛsPÿÁ}Çÿ[Ùö¾·ø'ÿGö}¯­ÇþÉÿÅQ`¹Š5+uåaÔ»(°œí’€~dUí °Qp¡%y$•Ôí.ìûsß±øUÆÓ­Èùd¹CمÜ~‘PYHòA™.®ñ±©V+ŸÇ=QLAEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPsv¨êI»Tt˜ÐQE†j¿Ý5ÆøÛþ=$úWdÿt×ãoøô“éTIÉ|ÿö­þãèQשW–üÿö­þãèQשR@ºWü‚lÿë‚è"’—JÿMŸýpOýSVªW=jëU+ž´€É×ä©ÿלßú-«v°µßùêõç7þ‹jÝ¡ *=¿Ðý|Oÿ£^¤ªZD¸°oúù¸ÿÑÏC©»š7U#?=hóèîê7U/>>çÄí_YÒÓÃÿØ›âëXІI|´™ HJ3íb 9ô£Pñf·§‹§øníalÅåì#Qòá·RÅUD†<»1VÀÚ:rEMã=]~ÊÍm¯þÁycyå´æ!*«®F27Œd}k6óÚÛê0ë6>'ŠÓXkAiy?öxx®1e"2ÿ#)cƒ¸õäß?ÓüÆÖºvýÈê|%®Ûx@´Ö-#’(îÌr `ãÚªüD‡_Ôu{=:?ßj~y·‰isms&ï–'ó$Så€2@ûÙ¦AoŽ,¥Ötè!›á°Õd{_Ý4·¨ÖN‡q|®0èÉö¥wkÿ]¯øqÙ^ß×OëþÒÖüG­ÙêÚVc¡XÝj7¶’ÜÌ’êF(áòÌ`¨o)‹òü•ÒÚ4ïkÝDÎÈ ‘¤›Õ€Ø÷ÀúWžkš¡'…´½Uð\~,¿ƒNXŽ ×)Šl`ò"òÜ “õ®ÓÂvwú†4ËRëíWÖö±Çq6âw¸P ÉäóÜõª¶þ¿æMöþ»”QE!…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ÍÚ£©&íQÒcAERªÿt×ãoøô“é]“ýÓ\o¿ãÒO¥Q'%ð_þCÚ·ûÿ¡G^¥^[ð_þCÚ·ûÿ¡G^¥IRé_ò ³ÿ® ÿ ŠJ]+þA6õÁ?ôL Z©\õ«­T®zÒ']ÿ§ÿ^sè¶­ÚÂ×ä©ÿלßú-«v„0¬(/mlR[[ë˜m$[‰œyò¯#8*Iäa‡ÐÖíCm·åûKÃvDXÕsò’ $ƒÜdÿki9ÿÆÿIþ4ŸÚÚOý4ïü Oñ­Ï°¿üÿÝ~Qÿñ}…ÿçþëòÿˆ¢Ã¹‡ý­¤ÿÐcNÿÀ¤ÿ?µ´Ÿú ißøŸã[Ÿaú]~Qÿñ}…ÿè!uùGÿÄP0ÿµ´Ÿú ißøŸãGö¶“ÿA;ÿ“üksì/ÿA ¯Ê?þ"°¿üÿÝ~QÿñÌQ¬é ókX6;-Â1?@IöwCIN ,mK,³la†Pò3€}f®5Œ¸ù5 Ý·*øáGó¦ZJÒÂÔ+†d`:nRTãÛ"€%¢Š)ˆ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠŽnÕI7jŽ“ (¢ÍWû¦¸ßǤŸJìŸîšã|mÿ’}*‰9/‚ÿòÕ¿Üoý :õ*òß‚ÿòÕ¿Üoý :õ*H—JÿMŸýpOýRRé_ò ³ÿ® ÿ Š`JÕJç­]j¥sÖ:ïü€u?úó›ÿEµnÖ»ÿ Oþ¼æÿÑm[´!…G¢·ú ÿ¯‰ÿôkÔ•OG— ÿ_7ú9è§»š7US?=i<úćÇTº]¥òÛÞƒuª-mÊ'š³‰pÝ€ÒÄçîóíO³ñt3xt;½#VÓ.fI^ÕîãŒGp#Æí…¹Á Ås±x>í> ÜëBú%ÒÉwol ù‘ÞɉäéŒlŽz±¬x TÒ)ÒâþÞYZêýv‡2 ççn§–«^ß§ù¯¹ï§õý/ÅÃO¼9á{R[»­GV‚æE°Ã÷OÎâNz0ÆéÚ´ÇÚY†?²iú¥íÜ·—ÙÁ¤h¬Ž2áB:³£¹Årúg„¼K¤iÞ{ô™µ K˜¢Id‘b¸·›ûÌ”qÇ@ÃŽµFo‡Z”ö¶·–ÞÔu {ÛÙå²¼ö’%Ì›È Spe a¶úñU'y_§ü?Zßשê>×,üA¤¦£d&D.ñ¼S&É"‘«£ÄEiÌŸúyŸÿF½RðuŠé$cLÓ4×™íôà|…b‡*¤ñŒœ ·£œÚÊéêãÿG=q-Œ¿xÃFð²ÛIçy®V( {Îqìª ’G Éâ“Å^)O±ß¡ëz„qÂgšk+`ñƒ9%™—'‚p¹8íU~,Z]^ø&âÞÎÚk™Õ«âBì@¸Œ“Ï}…füKÔîäÔ-ü6lõ¤Òn`2j–t× éœ} jv–çsBôää-mçÓúý V¾»š—ôÛvµK OY’æÈ_„°…X¥¹é#oeö,px­íQ´Õô«]RÂO6Öê%–'ÁV•æ3°ŠëZ´¸w‰ì4Ÿì?³YK£Yʳ†f9Še ¹@P»UÀ\–ÉÍwÞ‹PƒÁZ<¥¤V—‘ÚF’Á…XÈÆŒp8©Y¦ÿ­ßù"z¥ýl¿à›”QE!…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ÍÚ£©&íQÒcAERªÿt×ãoøô“é]“ýÓ\o¿ãÒO¥Q'%ð_þCÚ·ûÿ¡G^¥^[ð_þCÚ·ûÿ¡G^¥IRé_ò ³ÿ® ÿ ŠJ]+þA6õÁ?ôL Z©\õ«­T®zÒ']ÿ§ÿ^sè¶­ÚÂ×ä©ÿלßú-«qˆPI É'µbÖN’Ù‚{p{ÔûÓ¨iY—óV´àš+ˆ#ž RX¤PÈèÁ•”ò#¨ªSiÐêÎÒËi`èŒQZâÜJăƒéGá@‡˜åÏÜ?•'—/÷åQÂ1cÿ>:7þ WÿФÿ„fÇþ|toü/ÿ@ɼ¹¸*<¹¸*‡þ›ùñÑ¿ð\¿üUðŒØÿÏŽÿ‚åÿâ¨o._îÊ._îÊ¡ÿ„fÇþ|toü/ÿKÿÅüøèßø._þ*€'ù¢S$Ÿ"(Ë3põ&£Ðý7ÍÁ 4ÓJ™Ê<¬ÊA¦Â5h„:XhŇ }€/?\œ~U~Ú_:&Ò§$2Ÿá àÌ’Š(¦ ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(9»Tu$ݪ:Lh(¢ŠC5_îšã|mÿ’}+²ºkñ·üzIôª$ä¾ ÿÈ{Vÿq¿ô(ëÔ«Ë~ ÿÈ{Vÿq¿ô(ëÔ© ]+þA6õÁ?ôIK¥È&Ïþ¸'þ‚)+U+žµuª•ÏZ@dë¿òÔÿëÎoýÔïh÷ºö‡&—gª.œ& Næ!xû§ ¸Ïsž™éºïü€u?úó›ÿEµhꚦ™¥Ä’êz¥ŒnÛUî&XÃ@XŒšÌøvûÃ:lºuÆ®—öÛ÷Û¢Û¼œýåvÈ'œvÉõã¡Ñ[ýÿ×Äÿú5êž—¬é©iz­ñAmp’lÏLí' K£I‹ÿ¯›ýô1[¹ªZÞ¯§èºlºŽ§r¶ö±`3[’@ $’I© Ã5‡ãˆ"Ô|9=¤ºDú°fFö÷ ¹ tve Ê@ ät¤ÛE¸“¬]Go&‰y»ÏÿXH’ÛùÉ<¼íŠžåü2>%j¯ã¯%n„¶çCûn|±ÅÿSÛ™»v9éÚˆëoŸõêÒç©Q^­gãZûGŸÿ û]¿³~ÿŸ³ÍO—ÛÉòúÿÞÏ57ŒÂ'Æ>5"hÆ®ÛeÝö…“Èà@WÛñÀüi_Ýæþº~:•ozßÖöûo¨on`²³žòæO.#i$|µTdœz ñ?Ç}6±£Çã[Ý*ÎÕ´BÉ«ÚÉ-¿Úùó°RD /ÝÁ98éŽk´{ëKo‡W^—ZþÔÔ¡ðãÜŒN¾t%VLœŽqÓ$÷¢~ìd×Kþÿ+ú ô¢Ÿ[~6ÿ3kBñdž5«Ø,ì5 <û„2[¥Å¤Öæe9O1ü¹âºJñ5´¸ð ñå‘ÒE¢>”ö–æ<^6ÇÌÌÝP¶ à3 `qY¿ mLšæ—ws®évþ&·’i5 !g*j7'koŽWiHeèAÙŽ«’Q“]¯ýŸË¹ ¶¯ý_ð{îN>••àým•Ù?Ý5ÆøÛþ=$úUr_ÿä=«¸ßúuêUå¿ÿä=«¸ßúuêT.•ÿ ›?úàŸú¤¥Ò¿ägÿ\ÿAÀ•ª•ÏZºÕJç­ 2ußùêõç7þ‹jµâmÏÄ4Úeà!$å$_½ºëîøwªºïü€u?úó›ÿEµnІaø+ÖÞÑ–Ê) ÷wÜÜ2á¦\v ‡âj})óe"‚ [»€Ã=?|çùÕªW:e¤ó4Ì'ŽFÆæ†âH‹cŒ3øÐ!¤¶z2Þ†›ýiÿ=µüÏÿÅÑýiÿ=µüÏÿÅÑaÜv[ÐÔ76Ö÷F#smæ±yˆcŽŒ¹èFO"¤þÇ´ÿžÚþ gÿâèþÇ´ÿžÚþ gÿâè°\v[ÐÑ–ô4ßì{Oùí¨ÿàÆþ.ì{Oùí¨ÿàÆþ.‹Écf 3Qè Oiå^æáÔú©™È?B4ÖÑl™J¼—î§‚­9z_V„h‘ƱƊˆ U€ uQLAYšn‹ka­jš´2LÓêmL®AUòÓ`ÚÈã®I­:(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(9»Tu$ݪ:Lh(¢ŠC5_îšã|mÿ’}+²ºkñ·üzIôª$ä¾ ÿÈ{Vÿq¿ô(ëÔ«Ë~ ÿÈ{Vÿq¿ô(ëÔ© ]+þA6õÁ?ôIK¥È&Ïþ¸'þ‚)+U+žµuª•Ïz@dë¿òÔÿëÎoýÕ»XZïü€u?úó›ÿ@5»B ²»´¾ƒíWP\ù—̆@ë•$0Èã ‚¡£ªéÚp¶^C¤pcÝ™ I÷Ø ù˜ Œà£Ö¼~úÒïP¿ÖþÙÜKk4ú¼Úšœ­Ye ûÌÊ¿YÒµ«¯ÇâO-µÖ“ᯰ1RU¡»!Þ`PTªsô¥w›Êÿ…ÿ=Ô}î_?Öß–§¯Z\ÃugÜ Z£#m#*FAÁäqëU¼=«Yëº5¶­`\Û\)hˮӀHéøWEq6³¯izN±âKNµ_ÛÝÀ-ïšÝ®æl‰œ_h òç6H5•á;‰%ð×€|?>±w¦iw–·RM=½Á‚Iä†È¼Ñ‚¹ ÍÁí­%6¼ÿÏüŒã+¤ü¿DÿSÚj¼×¶ÞÛÙKs\܆0Ä[æ. ;ã#?Zñ(õrhôßU¹¸±›TÔâÏ­IlóˆdÄQý¤+¿Ý$àrØëÇ:M§_K­x.ÏÅzÃîÚJ—Vš¬Šå>C×c3ÆvóSlûÿïÐö:Bp ô¦À`ŒFåÐ( Å·1ÁÉëõ¯8Юn´¿›Mvöþö}N{Ÿìûˆ5F’Ô „Oo#eQŒ€A#®M'½‡Òç]¢ø«GÕmô¹må•N¨²5¢KýBS¼eC8F|`£…õ#µIo}iqwsiÌrOjTO¶Z2Ã*í‘ÍsŸ®î¬¼}ses5´ë$d…Ê0ÌÈçHük Dµ³oŠž-»šöê+Èeµx-ÒúH’lÛ€7F,œ‚9Ž—Ößæ="Šñ¯†×>.Ö.´}yõH¿},‡QŽ]mäÞ¸`c[CX™Ãgå9'9ªú­ý퇂ï'ñ7‰7k·WߪꒀáRW]œþï1÷1Æh°w=¶Šâ¾ê¾F“{c«jæVµÖ®4ëIo'Y‚¶Q77.øãÔâ¹)õûûéÚ¾”×¶ö2ø€é³¬ÚÓÈ$²0û!c\‚=9¦µ’K­¿š¢mô¿áòg±MfO¯èðèC\kä}8íÄñ+H§,ch$òqÅqþ q¬ë:¦©ªë×ë©Zê—ɧ-óG Q¡+˜A÷.,sÅrš‹Kø53XÔ#ÔYaYu)XBEÐV ›±RÐ=(޶ó·âvn¢¼«Äׯu¬xÆmGÅ7ú,š$(Út0]˜P)„8•“¤»Ÿ+†ÈùqŒÓÕu?x–ÂÛSÕ51›Âñ^¼67²[l¸g!˜…#8ô9)Ý_úÙ¿Ðvþ¾i~§©Q\ïÃMJïWð‰©_ËæÝOf,˜ÆöÆ üqšèª¤¬Ú%;«…QHaEPEPEPEPEPEPEPEPEPEPsv¨êI»Tt˜ÐQE†j¿Ý5ÆøÛþ=$úWdÿt×ãoøô“éTIÉ|ÿö­þãèQשW–üÿö­þãèQשR@ºWü‚lÿë‚è"’«‹y‚òâÎB(BÓrœSû­S¸R{ŒÁvæ+v?àñYÝ·üÆ/ïÜ?ünuå#AÔ¸ëg0ÿÇ mÖsi~iQw}uw°o.A© ägb‚F{*k½KO´}—W¶ð1í$Oë@Ç­’ê¨-ºÞbGRzÔ_Ûº/ý¬¿ïúÿÛº/ý¬¿ïúÿjZ‰©ZCg¨èÚuå´a¸¶I< ªÀÇ¥fx§Ã'SÒ-´­7ûÒÎ͵ޒ—PØ÷(\sÓÖ´ÿ·t_ú Yßõÿ?·t_ú Yßõÿ ´2ü;àÍLðªx~òÖ×T·ó^yEŪÞGbĈñµFOt­ü;áùô¸´©ô-2]>˜­^Ò6‰ª¡OAÞŸý»¢ÿÐZËþÿ¯øÑý»¢ÿÐZËþÿ¯øÓnâJÆTÚ_ŒVg[h¶Öˆ‚¡³ÓøW"àÐV–›áýÂõõ ]LƒP”:ê DŽI ûİäóÉ4ÿíÝþ‚Ö_÷ýÆíÝþ‚Ö_÷ýÆ‹…‡ÛhúE´é=¾—c ¨ï"Šg•üóOûäQåEÿ<Óþùú(žT_óÍ?ï‘G•üóOûäSè yQÏ4ÿ¾ET_óÍ?ï‘O¢€åEÿ<ÓþùyQÏ4ÿ¾E>Šg•üóOûäQåEÿ<Óþùú(žT_óÍ?ï‘G•üóOûäSè yQÏ4ÿ¾ET_óÍ?ï‘O¢€åEÿ<ÓþùyQÏ4ÿ¾E>Šg•üóOûäQåEÿ<Óþùú(žT_óÍ?ï‘G•üóOûäSè yQÏ4ÿ¾ET_óÍ?ï‘O¢€åEÿ<ÓþùyQÏ4ÿ¾E>Šg•üóOûäQåEÿ<Óþùú(žT_óÍ?ï‘G•üóOûäSè yQÏ4ÿ¾ET_óÍ?ï‘O¢€åEÿ<ÓþùyQÏ4ÿ¾E>Šg•üóOûäQåEÿ<Óþùú(žT_óÍ?ï‘G•üóOûäSè yQÏ4ÿ¾ET_óÍ?ï‘O¢€åEÿ<ÓþùyQÏ4ÿ¾E>Šg•üóOûäPaˆŒ÷E>ŠÀ´EŠëQ‚5 WxDAŠ68ï1?Y¨!ÿ–«ÿ_cÿDCSÒQE†ÿÙ endstream endobj 128 0 obj << /Length 4467 /Filter /FlateDecode >> stream xÚ­[ݓ㶑Ÿ¿Bo¦ªV I€ ™7ßîØY_œóy'—ºrò@IЈŠ”ùqãùﯿ@Šhg|¹ÚšÐA Ñ¿îÆþºŠWð÷ýªYEð/-²0²<[å: #mr½êìê°úÏ»F«ïïþíáîß%jU„…IÌêá°JU¨•^e&ƒßÕÃ~õKðñOßþôpÿóz“¤Q Ãõ&5Qðóýw÷?ßÿåãýú?ÀÉ* ‹,Šq雿ßTçDF]~)†Õ¥Ú ú±lƲÆaw÷w¿ÞÅ´…x^ Ö«Ýéî—D«=<ûa…ªÈWÏ4ò´Òišß«W_î®öSÄqX¤ir¹I…yQðt¨Ât½‰£( î»nçAÛñže³¯«æÑ³‰hµ‰sèÉ$Ÿ0C‘eƒ¿:h·ÿ´»iUÿ/íØñÓçuÁGžús¹³üðXöËl×µ“þ¥ÑÁuì:NƒßÊÓ¹¶p]´Ú!¯¤‚•$E„_ƒF^eg™2t/¸n·üðŸ-®Ž(¼(îT§òÑö<¤• ÷0s’ÛÙfw^ζ‡ÕÅÞ• G s+•`‹Ž-ØnÊQU°]'Q0C+ß«º–ÇNhÝ ©åßþØâržyŠáX‹5·†Šø_œHìÚf(«Fž0Ç£™ãHÚsƒVN¶­‡ễ7=¾Ø‚‡¼!”¨yÕØ£×±!ŸÆæÉö=0?d™[Š/L›¡rÓ¢ä‘ÜË'>\š¢¹U öÔs³iøw×Öã xpS¶³Y´U”²@aãT>¡¨Xî•üóq›ƒZû¥HE&èÛ“…ÃÀ%⃱·‡±þP7œÙõ ígú ïI~bh•¾mskû¿‡¶®™ó—€ù½LÙöÜÿ‘l3`Õt–¿“0M„q¸òË&eÎ;v¤J”\¥zæPë¶}âVSíàl7ÄåSW>òÐçj8òcÖ ÕöÀ'¡NÕ’3§vÄ¥ë$_èŽN@[¦ÓDD¹G"«Rç×zßòƒÎn|gÑv{‹û2±“)j6üË«6±ì *RËýÞ=>Á! ò6|Ò£±lßÎuI“ÇYðÌÒ¶dHâï¥jÎãÀ´¿GQbë}Ï=þ6ŒpogË·}[˜,DùTÁ§vÜÖv³««\¢bbl¢œÎªh:_|8TC-ämÙÉÀ–Ÿáî=Ÿ¡=Úú š ")Ó¤òö¥‰àÏ…ÓT&L´Lõ-ñ75¤‹ð#læjþ‚­f탶R 2»e,:Ûìê¶·2cåµg{âž² ~ÛöQK|§$p¡2˜Î"wÛdðÄD4Lî=Ÿ9ÀFÁŸA=6{R —º…y½æaW=Åz€€íì•>oœ®%Q˜*ùlâUú/¶F­z Tv#ŸÁÍ*9à"øè$¦ÈƒÏl½€ú#xIØÑȽÏhº<˜)ÊB£&duèi‰)do&w∌ÛÄJ‡jéŽQ¸6,žb-?ˆù³–?ë‹Of&TF¹/þæY”Ár¸èŒbñ0b·ÏàǸ å•åQ˜T[ˆïùè$M&?©‚öl¦g¦”ÜIr¬’”uûȶíoL|>V»#Ó ]‰G¤ØŠŠ®jÐÕÞL(ùG ¦—$Özè–‚ÏÙù ™ÒÐùq¬*32;¶È'ï<Õž™RÓGþµÔÖL?77ÎáA ÆXïy’­WÀ¡v³‚¼G”WÀ°~³NÓHTÀ@5³<þ{#¿A©Æóħ[Ë¿gÜó€ßDZ~ûµ„7Éá2´—oùBfOÙxÆ3Ö‚V€¨—)d–€ðëXù7ŽÓМ#vxjV ‰"üm³ÿ‡¯t–­ïÞi"¼J–Kæµ¥€¾Ç~àV_¾xÖáŠä'_û¿± bZí1-Œ€yÇGò›ópÈ®*ÂÙÐ#™vÃi¹&5¨åbµèXkÄ,:Kƒû=±:Ò· yì¹)@†0 àC8ñÇ®<&èlãsü{1Ý& ¾j—”!!x¿]ÒX¬”6„¥7bÀl$ØJmâi°àéç3ÎÎ{@"ì– òýì‡ÏˆݾP:ð\@;쬅 ø8ž™ÀlÂ' 6e©|â‚#:ÊÁ#øG×B\è07Slý°ŽA¯XA|@ãÆ/üž‰Ñ¸YY42éùuFñ´šÊ»âN$~ÖMó8«£ †ƒRÈÊDàå¢(f%>õ;« ó¶“D}WÕÖÇ` /dnÏ7Á€hrN?±í÷;;ðÊÙuTÔb/ŸsLž›ìm¹Ô$-÷<-§°E2%M÷È"0€ϸmz€jÔÜes@ ûrJ£0‰®<5x][®ÕÝD¹9€"ñ€ÊB5³öÿÓ0›á–ÿ€›óIåÿbÊ?û5ÅúÝMØÂÏmæ— ÷Hi¦¤`[V\†ŠÐ¹Ò&5½æìMDœóx.fB_‰Q~~d•~›ŸÚ˜¯³A黸 𭉌 zfKÒ0žqñÆèËÌ«a¾MB[ÛÁÖ/.ÆIí^A©™ù”³w¨# ò3Îò*˜½î[&Qšfν%’{ãyzn’ŽàkH[ÇÁ“7m‰°ÖldC&x´7J9R@3ü0fJ‹âO#î¼VcG¹ôÍÎë‚ XKë[Ê©ÅϸWü¶d©Ë®›½ -Ç-Û3xB¯/P`k‡gk›Åˆþ¦)øÒž¬«Ÿ\‡^,IQ ×m¹w%Î.a‹¼+숲øX™ÁøÚoÉ£H½í*•™´¶Àe‰¯O¢(Tê*°ϘGFÛŒêïkY¯q5£ª˜.K6Úå¢Uð_ŸúÂ$@9 {¡ 6µÜ–½792•ÚT–¼*µ- ”J«°È‹•Ñ€oÿJ…2Þ\ŸäÚëÂkˆ¯rš)rÅWÌÓÁçANv¨v~b’ÏL*Ëe8Ë”$¿³D°N–жv¿ìþõ>À’bPüÿ±m0Û‘-72ÔÂv¬îlÊ% +Å”$ülÔ•ç“òÊ]1‡±Ù9ÌŸ‡s—ù‡Æ¥Ð@—RÕiNÁޫߒbê ¦&ü 3þ„FoÝ&2L|êe@)dJÞ–üC¶Œ l{r)¢R‚×yŸüœŠU˜Ï©ç?Ùúì[wx5ÿº×Ðz1 Á¿VòÖ_sËZÈ<×ïÜIô(•ÍPŠRÂb$Ò0¿ŽE¯²{ ÜU®ËÉýéâRQ ˜Ì¥R,²<¼·;1 ñdDbgD !FÞ?­1¡ëõ2xü@ÕL£ãÖ³Ýb# ¶R™è­Ä÷•æÁDZÃj:xRÉzQ<_‰Óš® p·mêž -”7±Ì ¥ Ž”\pˆÙ ´.Í!t9ü#&3 âèka’0‡SJ…"zù—lA¬i*p˜ï6vù%>ñÉ-9Ÿ×ùôz7€þB£!èIÓ8þWv“€qŠÀtãT*N¦ »O®U˜Ìø— ¥‹ûÒâÒ× l(ƒÉ¨Îº„!4Ï"‹´J~%Ò|eÉ †6éÙÃZámÛ@ä‘2@éê*Fºº®Âùœ9CÓ‘ÑÂk-Ry:Ë}±”{_Œ‡yž¾ Ü€±·.w4eØsCS,,ëâ–…CNeÿÔ_åSÊ9ãò:e—ù[št$·C0ÿ)¸iÏÇ–ŠI„º¥c}ÄSÂ'œç)øwüZž PÏ®¥ü":ÄcÙ•;ŽÁ¡[:zÓÜËGµL’Yâr ' n¥ŒÕïL«%¿5cÐ=çPó8¨ö¶”VÏ¿’Ûú/0æ…é=w¶ç[EЭ«ËàЇ º/ü:x¯&¯¥²LÛ‘˜¤ÐŒspv~ùöwqaŠn¡ÈÈ“T†¡¹µü è…k'ܹ€ñÅ[–¸ZÒ›u bf} gŒ¦j8… ­ø—±(<:µ<ª žœ¿x{¾Ç"š$ZüÙe °Ù/‡Hh2ÉÒÍ€bâ´âú*4tp\VòàQQÀìÐQâ°EîGÍ)§žGPfò–f°SúA£—»d@ª\ 1o{øZvqãÍæ‰`¾# xb5/‹I€_«IBødQñh‡¶ ý¸`‹¢m‰Õ¹+MçXr.;²š¹ó9 ÂÂ׈ޔ»®í]›r¨ù2¡Ñ‡>­ðoœd–MŽôBÄ'¬FÂåÇN|ºÌ˜¼ÞjMu*>«ë™§sÏM¾¦ÍLEW9E9ؤp9˜œ×¶Ì’¾œ¶m}Son2Ÿs‚Ÿ,ß=΃‹ÉñIá…Bº‰!¯»î¤¦›t‘ñÌrEIº€Ø‘oäë‹Î¨C ñØ­ê‰)HFé‚Ôo¤zÃÙŠ‚&}ºªÓ”.Æ!ªäg¤Î³}ñçXçˆÿOuœ´³ûq·™í+ˆ%Ç™+X¸:ëî¹@4Ÿ9M0öm7pÛ½76`hÛš½¢ñÜ×x¯rS½÷.ƒ³cuÕ;/ï®Zî[_\°ì½…`˜ReI•+»ËÀÛÓ >°áëKråÐvÞRƒ. æzGi"Ó«@±+ÿàG–ëñðï³%¦\Pèu.ùã‰æž**Ë‚ïÿú^–Ë%¤Ñ^´•AxKú…I’:{ZöQVw{T^÷œ¤ Í÷””üs…<éI#Cäz1´ºQt7#œ9ÕÖ-ç;¶µÌÃeCM6È—9¤Д✛2ÉÓ3 ‚„·s_f |É´˜DŠ6Ø";hZ&üÔ%]:x´òÝþ`È ¯j#·M@C'?˶3 £+ܾ¼7 ¼c&®~º%uK&ã¶•ÿ¾»üeU‘Ü‚ýÚØF`娋L--øg2t9t%­I‚‘xj÷¾ÅE¨Lü6Ïóym $”bN·¡ñ%Ó@й/Ò+„€3ˮ͠Vô=˜1’Írþ¯;7ßàÑ <æû4Li,8ç1È¿¸j@ÓÒYs›œ(Œñ_䪚~àœÃš\nÞ áTîŽÀHÄåqænÙÅ¢çñåx7¥ï«m-/ó0N8®ï)Ì—°àéIíÉêrpÒv‘q¿rÉÕläWË"ër¿Ø`˜dÜVòצúI—FðgËä®óü á-l9]Ò@%ós5þm­qçû‹âv4É>ÚÚë[u®Ê áCç’%HHfW*YžíÇ'»³§­ã_ÅÙb®û‡»ÿ7 endstream endobj 131 0 obj << /Length 3482 /Filter /FlateDecode >> stream xÚ½ZëÛÆÿ~…zýP*9­¹Oî&0ŠÔ=§š"ÏŠ«PuÇZ"’òÙ(ú¿wfgùÒQ§CÆygÜÇÌìo«_f|vßΊY ÿ´K˜Ž›Ì¬Ò,VƪY•Í6³¿_Ä00ž}{ñ§›‹¯…˜%Ì%1ŸÝlfÖ1®ù,1 Srv³žÝFE¾ó÷7ßÁH9sÌap$‡Ùµ‚iü ïÓânç a+£Wù懛롪ãH±ùB›8úñúõõ×{u“]\ß\ürÁýFy¿ªdF©Ùjwqû>ž­¡ï»Y̤³³?r7SZ0ãð»íìíÅS'q0'—³DÆÌ:÷äQDÌbÉۣܧõ|¡œ‹šû*Ë´Ñ.Í jܕ묦ÆrCMå>«Ò&/ jÞTå® ÃÕf k99[pΜִ̪ÜíÒb½ØæEö•gI{–¯•$†ïÈïø0Ñ@–Ù$iðÏ8Û¬Hw§±R Æ*±íX)uÅx'c‘æd·ÈÛ&­šÀÍ!ãg:qí¨ÓÚc¡! BæŠ$‰¾}÷†äòj“жeºÎ‹;jï8ê,ãÖæè|!µŽÒjÎmtwØeES‡¦P‹j8¶:z»|§‰Viá—‰Ç ,aZáx”ïÒ»¬†ýɘGsGeõ¡Þ§«Ð(@_š*_åÝ ¦,·ò¦­Â.q&ÕåÔ:eÁžRˆ> jz«’Ÿ’‹h‘M臰LéŽßÙ§}•ÕµWY¼¢iu7¥(¨_©(f¬( ›8/h,‹ráe4Éš¤*àž^úx_å|,ôÂ÷ÄÇ9ˆ,ÝBî!)ØðÀ @žít5›‹8‚CÏe…ƒ?ÖI…·ŒŽk”‹nÚE·y=¥íJ2k:F~œÒvÄ¢îÆå5ÍXg ›ÛúÇ:Д$še&Èy MÁxo/7A}/¯.Q”—WŒ½ŸÚ†ähú>©d‰dÚ¸“ZVŸÕ²…žÔ2í˜ÉoG %Œ×2,[-C: ŠJxTeéšo1f|^Lh àFOì1“eC;Y{¸Q2J±^侎¶Ëu†“9šÆt*ãIåÕPåýÆ•eRœÒàŸwËr;¡ª:›Þ©ª7i“À,’á%àÊ&t pò·@',IÄ™[†Á ï€i‚ê;–“ú›H˜û6‚†ÿIïqNÎ`o\epþ1çˆæ„騛Oꌈ`ŽN8)㎱‹rj p‰’Ë=¹ ~Ê’Ê:C£€Tyhö‡†,E]‚’èî³*ÈÞÂjJŒYQÂÆ*•Ó°EÜ5Qõ °)Þä¼Ùt½uè> ’ë²øÚ̦­RùË!oü`;I›)£õ¹&´Š,[£íÖ®oóœ:‰îPÞØâÕ÷Œ­«²hªrK=¨ÇØx_úƒOð›'°®Sç] #:…[f÷)s®Á´Àë`ÌÑ=zÈ›{ØTxi±ð:*$]ZlÜö¤—dý™ýýEéYý;p öà2µ)÷ë¬IómÍ:L¤]ˆÖé³ÌØ _Å4ãÀÿÔã]MîÀ#Úq”ÖЖ£0'¸Ò²,‘–&¼™Td`™³Ý5^LÍãÀ¹{¤Ç¸.Þh,‰ÁÕç°Ã´TkÐà.14!qôGzfà@¬|Jwûí‘7<°O#HXº¾#ëd€G‹ŒÊËPÿ’ q9Í™ý‚o8Šï¼nÖp5ÙsvŸÛ—s£½Aòg„3ª#‚þ‘_†J*Áe;l¶Géc}Sekö¯ýÝÙ3ý\hïÙòÖ#þȱÃ-Ôñ4œsÝÙ°'Ö†õã`2Ž&,1Qº¦ãȹÐôP„„]YÓí‘Bc9¥‘ fÛûqU¶Üƒ>ððævì™Ø(LÉù´çó„†á7g$ù=ºúŸ¨r{˯Äû«[u¥ß{C7Ê1)Ðp±Dq|ñEè÷E΋c‰ïËrÏvi3q Àb°Ôf$ç7Å\u° Ê{¼/ñI€ö.™D€ðÒ9ú¢N¸Sp¡Yw‹»Kرç^Ùc# œqAŽ-Ú¡‰Â-¨‰¨‰&ÏiØIÈÑ4Ø–·Ñèµ Z€´ºcšlצð÷:V)ï‹eI]¸DEA–™*tþ¸v9n9cúýy û u!ßniÁ§É·8ì–Y°Ž±N_µøìzÞᑇ¥)Œ ÎCCŒ-‰Ÿ:¼sé©Nõ€&…QÝi•qð¦pB1eZ™'=2Ç’>Tñdž ×y•­º¨ÌÂ;˼Ö9Õ;i@{Îy 0ØqÿÁ0Âúƒ— RKßjX€Ÿ†© Йh=åcõÒhò6ª >V¸ÂÿÜ¥{¢Ð|Ô÷•i;††ÿHòø*˜ã˜JƨÔñûI“Ç…ÍëÕùI¤©à=f¦Ïa>×Î!’`4†—œGþ<Ø"ˆ0‘l[TLC¼ãFtÛzQP_=¼^ó žÿðXñÊ:HœÒOOà²QØ lfÏɤ¬Ñ§&¦a>fB‰ñtúÄtÒ1%ì9;;öuÁŠ ¦R'½Ã+;¼Éäû朣 f,äP¼Go݉ø Bvez´¨§Ý^!¹½¶ q\±ƒÅÇkÀá0‹r6dq=laî'Liw…·ÚÐÐqÁbFmц³0÷®² #ü?37FhÉàhÔ«*KÑúkã1 B+¤¥O§`µ"jƒ9Ï ¶Vò°«!´i¨–­ó¦ ­Òí6›º…Svw‰Ñ,@âÝ}“M¥) ¢Wq—Áø1Í P“çÅák ±bã÷¿{q¨«˼x1€¼º…aÜåãÌIÐáñÆ_Ò‡«-̱Ù5TË „D‘ºFZR3M¼¹¡›8\cÐ^#³àkŒ]õ2,.ƒ;&øôþ²ªB¹x8?Ô€'_ wJ´_hŒÇ`õ°ÿ2¨ÜðüÁÚÿû$g†S¿|*ìùzÊô 6>Þ§U ´7ƒ¯Å×{ süç\fu|Ä^ÿ+ïÄ.¢lÆÜFMÞeà1= Ä.¸U÷åц†L ) ®yà‹X 8MM7§®?×ྶN´†ÈÞÙñaßÕ'"|Õ§÷îsïP~j€ç¼Ìi|:ÈQòf´m³L.œ©|C]±a”Urч"¤vü¨¼ñ™)}ŸVè@Ú€]ë±×º™„µBæx º:4é²í÷©œ)ƒ–0ÝçV÷`JÐ*óèËOXÆgáÇ ?  N L€ß@Þú’‰>ÚãgžÖ³†2_˜[SOdx° ¾ìÙ¾‚œla5iìLùgz|ÙiðÏ~Ô´µ_ž·Yˆê_ݧ{´9¾b¨ ÈŒ‡<¶Èƒðù0$B>l8¾õŸñ꼫ÒÝbA9vÞAP†GÛ´¸;À RNI¸Ï bGøœ*;ð`òý6ÏB'ùÕʈ(×Ó§:÷0´ÏIÍ0¬2:Z~¦’´°Du“m ãpÕõaEî‹Ñçø·G ¨Õ5ïK ÎŒ çÑÕÔâAÁ´ì(á MÝ5R[¸Ëh™®>„î’zÃ0 Žç.|Ð&lM³M½M‚RäEºÐOêùð³‹e\µCQçwE¶F«Å&.ä„Oò„‡ÔùaMú),E‘Ô9Ýÿ„â"7]¼ Cê ä´®)&Á^Ï(kzDÂ1‡½¿ÖßhiÌ}›'ð9©£ |^w'”‹îJ’® †Jo(€Ö´âqïra%„¨w©×ì|| »îC¸)¡€m\¶þ7ø¢-ý ƒS‘ð0{"ðy?÷Hé{ºß-àþ®·#ûŽé×éô‡\â(*¹js m:Ø{éž oÁb>ÊfnÛSÉp©™ì#9Š è½hø\gȯkó’B˜ðÖzœD GÃÉÔ¸î4qzJ4ÜÆ=Š ÎCel .ÐîÙ érYy%ýˆª±¦Î.„ºs!/'öORn˜™¥ù¶™OnÃrhœCžC³X=‚ìÂÕ"ÅXݬzuL ésB× ŠÑïBÏÆ£?ýzÃ[zéxôö°ß—uvãPÛåѼ9jÉúŒn“Õ {¨§3¿¢Ýü{=ÈBPU­'‚m'#0÷ª_ë>%wrïB·ð†¤ZP†•Ž^p¹5>ŠÖ`ÊÜxÀÊçÆ5ñ8¢éØ–;dÞôè äOÝïV˜ò ©ôY;ߦV0“¡=qû×v0"mc}âÇAb|~Öùµ ¼]pG¹`Þ‰$Ž„# ý EPÌÆrð²­¥!˜ÄÝ/3ÊV6IÌ”žJüÁÀ.2ÀJ•  ÷jʲWÕ§Ÿ8oï“SÒ &§[Gt·üð·/Pí~û2öo!\ìóZ“úJ/(%™¨HiLÍY5|‡îUJnÒÓég™PÏKŒ\ô0¾ðó‡„n¡K4cý¶¡¦ž´}ÅÌ•Ûã‡l»§Ÿ0†çô#cp4B4ÿçl•a<¼’Ä<ñ³*ÀؤÏd 9šëúæâ¿Ú¸Ta endstream endobj 136 0 obj << /Length 1014 /Filter /FlateDecode >> stream xÚVÛnÛF}×W,òb7{¿ðƒ›Ê®¤GEâ  $ÊbË[H*Nþ¾³\’²ämÒ†ÁáröÌÌΙ³úˆ(z€ÿT!Òj,‰6!1ÊÔfh‡~]p$èfñýjñêšqd±UL¡ÕIŽH+ O´Ú¢÷Ñë¯~Y-ïâ„I 'R‘èny½¼[þôzX½ †4¶šP‡!ˆÀÎ$~•7lôz‰BvRLNoÓêÎm±\->.èP=æÃ±mÊÅûmáÛD0·=ž%’aeݾ½[œÕ”b+%{Z$'ØXëXb'”ýÜï³Ö×[ÖÛ¬ dOPB VÆo¾ŠNXÔe½7êݸÓè Ñ:«vVÓƒ•×Uç=ŠiË—úà2ÿìC3‚ùl†oC6`Rç߯ŒD‰KnHg¨ÏçÓeÅE©¦ÑuLeT€ä:ÊÜËç´lŠìeœ(b£¼¿ˆ¥„L‡ï›º,ëÊÛ}íŸ1%QZõ§«íatKC {êö¯®I7™?I;œhZ¹$¾ø·{BX‘uxŽ÷èÝ¡iêÎAXˆ½ uÿœÀ|NäÄ­¦­7Y×¹¨ø1ÔLá˜3»uºí|À´òñò2}sÈ«@¼„Š@îW4Ëb-ô zÀ¸‰š¬ÝÕmé‚rhE]fÞÏ«÷® íüa{Ødã†Ô?Ú¬;½·óÒó"ñáNÒr¥ñªÃãùã+zyëðÇ./2ïöb×f[ügóðââ |šuŠ[¦yuÄ&ÿ0%VûïS@ÿ6mòyÚr «}ÁôäEá,u}Úöf)‚)3ßê–ÆÌT†¹À×i¿Ù{ô{"Iž¹ ƒÛ¨ªýâÍo·°N½³Ó³£¯ï1¹Ä†Ï¬HÖ¡‚P“5OU´Ù»hnÎ &;A‚öKý¯Õ‚ÃLqót„z³O«à\q…™Qǹ $ƒ{z–'°LkŸ,XnìÇ+À-{Á|é§› Ž  Ÿ‰ùxu¼.uÛ'×ÿÙ€PùõÈ #Ss¦PpààfbV®y Ÿc2‹‰ž¿Bh0Í܉¤ ^RÏm8ÒÕpz¢D) ¿öA%–0™ÃnæE…‹9ŸûñC¶ÉÊõô#‡ªO á'ØßÜ&‚Õ endstream endobj 139 0 obj << /Length 2975 /Filter /FlateDecode >> stream xÚYYsܸ~÷¯˜·PU˜À+o¶ìU9oU6JÅv6œ!FÇäòXYÿ>}àpDÉñ–KF£qèókÌï›hs7›f¿8OE¦YºÉt,BdzÓ›ÍaóW!L 77OÚw·¯Þü¤ôF†"Id¼¹=l²\Dq´IÒDd‘ÜÜ–›ÿ×Ç¢Mµ•qÄWÿ½ý¯Ò¾áªp³Õ9,P¼à㩸3<½ë¯¢,h÷fªæŽy'ÓLnãòæ'©6¹È™Øíb-²8åínÕpµU* öî$J…cöS30ç÷©Úß×Ì};Ýyd<>·”›TäiHÇŽ’DäZÁ÷ø;W‘ ƒ¶­ï«q°ÓÏ%s‘æ~6ÞBà¬Í6Ê‘ªˆHäqÌãÿ4 F³ø°“pÓ6Üv$(¤TÄmuàö±˜x¸ŠÂ hFî-¶2˜šÒôÃxÁPI§—Ÿ?¶W2†Å[©º>±=ñŠÞ0ñÐWãhžðk‡moü—i–geÉŒSëvh<gî×ÎÂGi`ïH€>`× Ö>ød@Ü^eNöÌx×ó²ÁYÚ_ÃP6%ÓÃ8pÖ5Aº‚oKi§†öä?80Í—bßžN¨Œóõ©FG׳Ñ2Uæ4üõÂ~ÁfCÙÚsH)’4sÆ•K¼ßXu/Ú¾ÊÎMòãí7ck@¢7x2Ëê™:µŠÉ®­ë àuWQüÿ1'eò^áµ³]FÙR_°õ_P÷xw€”É”cXÏ}ò3æ”fØ÷U7VdÑ0†¶€Çbd© üêšy”­Ä‹ò„C柶¨2»ê†#ËÔa\yA : (+Ð/W\Œ¤™§ÁžÄ`j³GÁæÐhQVnEÍÚÝo0ax 7Q:Ø×(€•€a+Ns÷±%óÓ8¥p ?éÍÊ>pá Br¾”Ó ´n-.¡¹ûýðˆ2§°'W(þ†©O±9Áqó˜`ã€MÐNìÊ LÌÅ~kéÞÈi´åœÉ;Ž÷p+BëDÍÅè^îÇ­àmóh7zìÌ‹f „Ö©Ò[ëâZI>)dŸQ0pîÌúBÛßs —5h!–IwƒÅ6#H%b)—bšMO¦›O‘ ÃfÏ”c;Ü4Ói¾¬CÔ²L“à@±<Ì·âÔÕæõšù ÆVæ@ìÛš‚ÒeÅÔô¦ÙÛñ eèÜØ#0ËíG_ù&]äµU¾ â}Ñ pꓵ\‹±¯¾1}è[;ø÷·ï–ùó—¯ÂÃH ¥!Êž[†Òà56àÆ2j†apÍ×|ê8!‡h¹ÀÚ¦I¦È,-—í"ë7Ü¢ûêdà{ä$|óaM&,²3ÿ¸?š;”@¡µ ‰c°£­„°óvÁŸ2YÙåu0B# zV-F^쀮¶‹C$|P ¬Œò<èêÉR7cqÇÄP<`CÚc šql1Û élæÛ©.™ÞÙqÎE€©¶k¢èz3”ÄÜbàûú‹¡Û7töMÂ-)xÂùJ .Ð^üÀZÒÊ xÍÐ{c±I ä,E¤Ê¦ ÊE£RmC+±ÚŽ)ï)8¾÷ööäʬtô éÜ'"9µLy–õÈpì­4ëþÁPT¥Ž[`û6hÙ°ßÚת¦´šLÈÂtšïÛiW›mmãÖeƒ0!ÛÆ¶àÆIik€Hâ±ivgüügål›Í´H—UQ·wb%®¹¦êäZ2ÍDf.®Ñ*D¤œs**{0Ìv ½Í]jö[qK ôà4B¦ÅÖöL„é…7Õ$ø”#ªŒr 0:«“4 9t‰§f¨•00j˜†\Æ¥@¼Ob&Ð Æ#{4X6ÛŽÊâqÕ©êêî8¢1[¿Úz-N?¿°àÿûÈÈ?¡\mY ]]<º*FS'™§šºøþsZJ¡œÓNKWqû칺 Âx-«2›Ý/·ÍEK7sœÁ„;“ƒd` ÃzGS””Ã2F2ΰ8TQ½“!§R¨(y¦¸R:c'Ðùyj#6á) 8JÜ!sÄÉnÔ‹ÇÜV¿Ü¬Æ+›íÝ¥ÒÐ)Ëú³έÚO=¤òq ¥‚[ÅIö XÇ^”oæ¯Rð†.çù©Œ-I·‘’P]\ÂÅÃôÛ¶~ÀN]5–½3µ¯a*Ø Õü¸0A´MQÕKÜèÚÔ‘€´5"F—ãWR±Ð]óSÛ´ë²È•šaöÓmü{ˆyóˇ/Q²²$ªb7Í–ïO^&„J½aƒ9¬îÁ(Š<ð·a„’9…€>M;2§7s™Þµf‘ÌE–^wµC4)NVûmV‚'ú %mPöÑìø|Ÿe6ßGà´O{×%H°äÞ¾m Op)#Ñ‘Ãå—ך—®<¶§Ê='{ûë¸dð¿™þ$üÆg&FQKë˜FQÈPãÈO½Ü¾úÆdmB endstream endobj 142 0 obj << /Length 3840 /Filter /FlateDecode >> stream xÚÅ[[sÛ¶~÷¯ÐË™#©X^ò–8×N“¦±3srÚ>Ðm±¡H•¤â¸¿¾»X¤hš‰DÏœi:A »X|ûíbAÿ5óg7ðÿ«Y1cðŸŠCO±0 g‘T“A$gU:»žýzÆàE6{uöìòìÇ—\Ìb/x0»¼ž)áI!gaÂuv¹žý6?ýôýå‹‹%Wl®¼ÅRlþæíÓ…dóW/¨ûý¼ûåüÅÅÅ›w¯¨ïí‹w/\þ"ø,ôâù(B2éa“ÑðE¶ãæ­®">(¯¤}émRì“_;{qyö×™¯gè·ê /r¶Úžýö›­áÙO3æ‰8šÝê7·3©¸Äø»|vqÖšà¡k+Ãg`=ÎBɼ cB„Œ=)'d`Á¢DcƒÀë¾+50Fè1Ÿ0Æýuö}á1úî±X‘•ß%Ûô¾}ÅÈÈ!Vžôù¡Ø— _ÍËj›4÷…sx1–#œ‹È‹yOø»²Iëûr.ê$[wÇ0Ÿ¸æ-n‹'‚Ï<„LßÑcÐBtÀϽPúÆÅË¢߉bÁ×ûK‘]]%ÅšZ‘éÈÆðøú8p=‚J\]•ŽׄEuàš ®2=1‘¸Žc\!¼Ç»þœ\@ëD©ƒÐêJ„ÖrlËðê8Xªc”ñãÐàû naÒªÎJ_Ëë^ =c¶Ê»´Z¥»·³„Í2/÷Å߇Á9œ“€eÀ Ë#‰Ìwô#àT¸VÊó×tž(v]±´}ÝW§äz¡”Ãè-²Ï ŸÍÓú g^ ¸­¬îOTxüs³Ù]O“ƒõ$HXKéI>‘scÖ2òXK¹#¨>Qê ª;R'DóGÐÈAºk‡ÿ¢Õ?xÒ™ü¢' É!z ¢a5d0­Îxü#ˆÇ”%§óÍ¢O”:ˆè®Ô³ˆG0‚ƒóN„émÖlL&QæIe“ˆ²ZgE2ZËœ‚ ‡ÍI¸2ØU¾˜†Í£ÇÁ&—ž!™ÿ~úß2O”9ˆÌV扸|e.»Ê8Uê~æú}™ê„Åu ›2yJM$À£Ç™Ï=_ßÿôõnf'J„YWê‰@{uкê\”۴ɶ©‰²û:½Þç½$AŽÚð6ì°F7aÅò&¡†§âÀ Ø4z;~Œä1æù1ÙüãùH.yªÐAàu„ž†»ÇÐÆá®£Íëìf“ßÌ@m{¿^•ÛþþýíùïL±üÉ .þ÷Vç`ÁbržZLJ&9>|øÎX&Dð‹È,ò"‚Œù*Oíwþ“¡³<„?êä¿tÈ÷ûõ³%÷™ùr¶Äs]@ŽþÝó?U"žÔ,pkã3ÓSÒõ¹bÔÈ û¯V )–?O QÜ`Ëü0kÒmmßl½?O6[š¡O(,…ʇl.ÝîÒ ÷3I³¯Ò+„Ü a­°M‹½di°w«½³~µúl6-ÖÁØÍÆÃ‘gK3ØÒW]?xšÙJ id¥g]ãÌ9¯Kê×Êê3õSÚ‰ýUš'M¦tÕ‹žã:UÀæMu·d®(ØšÁÔcQ·û¶‚õ¡ø(`#¨ì;è*›ß¤EZ%9z3Þ&Wu™Ã’í›–^ÂâàÒ’—ÂÁð)þ ~ƒhÚ¾xýæK2ž/…üpEÁ_ÐCKÙ ãîû= ˜­^%èØL sm%KÖ±`¶¢žl›Ü˜‡Wwæ'¤“q Ò6]g‰Ù#l²&µ›X]ïÀs~| !¸5ÇÒÕ¹‚käö£Ÿ V˜D¯ýaïC úàÛÞÊÐys¢Ý&%ˆÓкn+Ršzâ5=Çî&5?C3àÕx¸|äÉÂéÌ̯µŸl3Íùp¯+³€Û]UÞT‰vgèEnß×{v˜m´ˆ6 Qﯗ°6ò ”ñ¯C8ƒøë;x›u5¼á …C?Æ–lê³Ý–…‹Tµ­Jd¦Âüú¹ù$k·)=—Ýf¡æÚûŒÛól/Ýþ3mLC…hÍÌô\Óg8ºmDB+¡ËIK0¦Û„ð )R?G¨ (OîJ½}‡¡ÔŽK4kVQß.ûª™$¯‘²™?cx^Ó:Â;FGè1\ˆ¿#Öƒ–a–¾à}±sÄØ é嘠Ûñþñ<»ÖÀJ«tÀKº Œì:ê:OòÕøS³M0×’TY¹GJÊ%¼øp]ããk#C÷=Ôv!«Ã)ZøHÛ{{ðeв…Ù“’fµ±9·=¥è¦Ù.€t;É!7ÓÓõŸûº3½0t$r¾IŠín¼•m¸&í£–*±‡¢a þ¾+JPŠ;Êÿ‚w]eEb)^a&shÈÏrüUzòذ¼Ï›l—gÚžLÎÓdµ¡–CÝjýᚘ«avl6›ªÜߘŸ%tÙ:Å´´ƒ sþê AeÐ2!³÷µ=ÎÝKë¬Þå:±ZòH¢ƒF‘î›JŸOÁMò53Ïõ$àúóÓgÔÐYÙ.KCž× ™¯/ž ö(tñ!O›Úy¥Á#AÈ`³ÇC:Äšb¿J1ŽWã‡x½È P$&S3YÛx¤Ì*hÉ›qt©ü¶Á{TSšè{š6Mf¥0ßÔ—Ú(A.ö”èEú®gÚ|0é¸÷ s+ãGùïÛ4©1?íÚƒÚm%?fŸ(‚-†ã¾KMá2‚$+¡@bnqÞGdo·\°Ïš0m Ün„½4l±TaKº š5ÔÄ nÞ¨ÒlÖnözq±ã¦ÊÖÔB;µƒ¤ƒ¤þkŸTim³lÉ2HÛJë`#ÁR­9 ¦äMñ.à;DúùÞü¡aǽJ‹F¯€ æŠý ¡YÛÀô†:wˆ,‡0mØ^5½’PøŠ¢AhMÛé6½f’k{Èmô6á‡f$Û€ß8h¿ãþŒÒÈçwˆjÃñÖâK*‹/iðuïãeà:λ¶„°5¨¢»„.+çÄ ­€´Ùïñ¼ÁKVÚ €q¬Öj­gó@BÒœßçúóÀRrE׋U©î(ãÌÃ/ú-W ëQèkU‹çœîÖ ü"™ûÁýóÒ-Îßs¹4äó÷ö9"`ÞæâÞ× Ý(×Ro˜Ÿ>û1·Sã« F4PDC‹Hz1\µB8Ø3Øî½Ìrc¬ž—XТÚ6sÄÖ ÄÜîzx‚s3oÁæ ›ÈèZˆ¾£$\LB²[VCžc~«qS¥®Ò¥éÙÅ9æïe½)ÍV¾†E\8?x²µ…ÿöâËBÀºä{›¶<²˜û¼GÉœYÛ@k“è.ˆCi»É×é>u5/}·²Â¹n²p³8 Ò)ˆfüÀÞx,}•ƒÂ@h\Ík¬À$Õ.-LGºÖ\ o¯Ó¨Üv7+8y Ú°Ë÷uÏÔå®Å° œ‡S°%Ó6Ã+HD,-ÕTEš·dKd?ãÖå0ª `}DYûÊÀ‘°Scûê<»Ù4¸ÙÓï–¶ÒTH/Wøåš÷í2ÓÇ¢Ö´ HÐ`À·õçQ Ú,r½¢ÆŸÞ`Edšƒè ††KE¥tý _ „HÚk€¹mgµu›Sшì_;U÷óòæîÁZEA¬SÔ2_­}M 3ƒX¡“QzÀÖ™5¾¨ÏhÃsô&FÊ=؃¶Aˆ4ð}W7ćÚGÌþï´*©‹üJùú$b°JŠ)—Å‚!úx^”Å’¡L©[„…Çàÿíi›ã±òêOH<Ê^ß&ƒÒ°2Dì"C“ŠA², ÒÂô›ç ·M2šû¦›´ çÿ¡ †Φa~P^ Gõzè_—Å¿>ÄÖå ´9Æb²…,ÕzÀD¬{=@ÅÖp[Hµ uå/§Ç•aŠŒ*òX؃‹>SQüÀñ—P¸Gí¦¯Ù …VÀ…Vpié·5»\’þ øþÜ z±ÕCxF˜¸°Ùã²`·N°hKÈð´Yô£‰6Ø7|šÃ£ endstream endobj 145 0 obj << /Length 4129 /Filter /FlateDecode >> stream xÚ¥ZYsÜ6~ׯ˜·¥ª<4qðÚ}²Ùq*>6’·*•Í5ÃÑ0æ–•_¿}à!j$eK¥"b4úúº®Äêþß­ªUaûa'ñ*Ñ¡è(Ñ«&_íVÿ> ``°zwöúêìå[)W±ŸÆX]íVIê‹P¬â(öµZ]mW¿yUq”ç¿_ý#Õ*õÓHF8RÀ졆ihЇ¬ê³ò|-…Hcïͯ>_]ü¯aà…þù:Œïý‡Wç:ðÞ]p÷ç_ðíÓ›‹ËË÷ßq߇‹_.q­³‹«³?ÏÑ!†M)?Òzµ9œýö{°Ú·ŸV¯ÒduK#+J?JñwåêòlNèdûAêq´ŠUà'iÊT\ís؈”Þƒ@6mÇ/û¬Üq«¦§ò:;îW=·Ê¢íZn¶ÅáXšySoM3«¶üëm±Fack!ü4 yñ2ëpd¢½ú˜7YWÔUû:Réé5à) ‘¬oÏEàewøz›ºªòMw.¼| §­…2¤ÀÐ6ß,.WÓ\pè†äݾ¨nˆ´µÀÝÆáô<»}ò¢@ú7YÅ6Ϛ͞۶¯8d797izlÔ× ÷¨oor8ÂuJïlù>Y–‘Õ¼nÙ¸´]±ih …‹ôÔAi?Iœ&_঑Ž3±£ˆF)$A_uÜd­Ù«úÃuÞp'© £sÈðüðÝ«[ùÒý-1™KEÛF^(åeÇc‰6R‘t¸“ ¼¿u"ýDêûêµD\à‹XŸ&NÂPk}β ¹zF ç3†¾Î‚PA:â¯Ô†¿RÇlD©ö˜¿±òig`°ïƼ»®¿³ä…ÂS£…Ó¨\RBÎG•òï°™ÀÒé˳¯-7‹ŠŸ?vFryk+¸8ÊŠÅ\^®s0|Fº»&«Zx=ÈaÏu¶ùj¾Õülrë|höçkþEµÏªM~Ró_Nô>žê}ìôÞ9wÐt{ÔÐó …wÞ®ÎÃì÷Ü…U陨H0N°œaÇ#PqêýPìv(Ky“’f”Ä‘NîŽYÛ¢–+-]JKï!ÛUî®Ñø/oV¼í4õÕT ÁZ4£A›:`~Ë}È1|²Ý}Ý›ñÀqXâ†ÎßÛÁeÑ@pž ²’g8òþX³LŽ#3¯€„Ä»ÉÍçCžUsGÂP¦ Põ|º<ÂIãÄ{S7M^ÒL§$*+­L}.Y/b>ÚCVâŒAàÄ?vüC¯;î:‚,®µ€2‡~ N`rX0¢`U`<‹jÄvЫâ†ß-Ñæ|°ÄkÓ3þÄ~bõ3­‹øÑ¨FªxÓð4ÌJ5íÀ¨;í90Küh0ü—F£”Œï袎¢å•ÙøAãÐo¬Ÿ 5 3”±#4ÙvÖÏöU¶'ìžI1gÞ>KNžýÝ/¿¾àÚ<*] 4þóþó%Ž«¨6e¿%……·Œ›úˆÛ¾ã7´CJ{7ï7Ü*M\±Ö0}:Ã×MF’&V-RôûÜÃŽìNàSǰÅõП˜åpÈ¥,‰Ç®©F?÷Ek5³êÿ {¨‘U]´Îê;MͫҨ3|{¾¦^eÇjúº)nö]•·íIF~§#Ë¢j–? ÁbwW×eË] ¾nÿèÁˆ!Øoðp‚ÊPÏ9àvGÀó*@ËÀt‘‚ aA1}Åèîç! 7îhû†Å]âZ§‰÷…Ù4fF4 d8dkÐÑ»s/qKîíØÔ``íóÏýu™s¬òÐAËxŒnx8Ä;Á høÂPk¾Ô`Ò ¹ªTXTŠòÂv“ ±û¢ÙòÑÃBéÌ0ÚøŠ°aÍOŒu›ºt€¡wÍþÌüÀX5h‘ zÁ膔um ñ@³h&‰4 #L€Gf{hº–;­À_ þôúbÊÈîg:Ôí¢Û„Á`Æî8d%ÖÞ™¹0Ê}›ÆÆŒ}ª(a1ŠõE:¶‹ü‘tZg ØrHöÊðÞ‘¿ÿÞ™ÑÆÅI h ͗â Côí”ñ¡°bm†M~€‡éBtÆá‰ÑE˜ªGþ°ÀÕ¹ ùÁy}ï–ÒeÚW.ƒCS0c%›yw›çà †dbS—ªAOÀ‰Ì$ýÄá&~è¨yCó,!iôÑŽŠ9žéíµ¡'bLíXƒ7•ž†´¯Êš=޼Ÿ‹j1I# L³sokv—)»ËÔ+ó]÷’L-¿S’ž]}|y]wº%|gã¹Íùí:·¾“&Ÿªð7l"âoËOßò¦ÌðèîNÆ$Ú"=`é%HlÆ–lG_RbpÂ2í^uUoöàŸÍdÅÁÆ)Ú*º&qEÒú—µŠb¶'÷9 2©âø1)K†TÒ’”E¾–ÉTµ8Ñ"…Ò¬¸KyAå’t™¯c¥Mª-JÀ,±»6ô¦˜!ŸrÛš*Œ7{€8U?ŸÏ¬eÅ_àÑ‘q'X B§b'Ò_È”*”¸¬z—ÊX…(›ƒu7~Â_ú᯾Ö3r)—¶V‰ƒ` cñcò’ô• ƒ¡ã¾ €]2^ûéiãÊ¿Éu˜$™&›hD3W1åãü9ã«„_ê@®Bð9*4ê5å:HßnÛÓi@Ünêçºþj*¦°`̤¤p]Ø:‘+åèÀä–‡×;[Tàç’¢¼ˆ%áµ K÷5 &;î‹ {Æù `úo†y`›bt»Ž=±ï þÇm8p¥ZŒQ¶ ¢!ž¦X qLªT‚‰¦öˆó//ÌÚ$ ÿ”¹B‹µûú¸n»»r1…JT¡7Ö ¯cÕ{«µÁ@¡¯Pk!8çRD³X‚à[ Ca«GŠTbËBкiêþhzG½3*‡n°Ú2VS6>C—Òï™Ùb Î8’.¨”··^L/¥ìÞYÖ‡J{ 6Cr³ÉMÞæŒUa­a^0« òàÆ#=sž%H}zÀit $>àÜr;Qî{ȸÀ~´ÒSÃpw\20ÀKÄDf$anZx©ä$Ñۉ甜Tä‹p’¢H@Öƒ¹JÏñ¿9* €É/Û“ûgom$·øNo¥ZT¸Î?CAȺYÈ<Œ€—ª?€Ì\Ïb£;d4ÒíZ3Ìð…Ш+R)h±pr{Ìze&ì«¶¸©(‡’bqr9&1ûÑlÜ“!”Q2 ?R\q{2Ö¾Ôz`­”ÚUEÚ†Ò^•›d(öiGîv¤R&^’Õ’Úˆ4,²âÈÏ@rpãr–w)ñ¦È‚Øä † 5¨ãsµ÷K»àÁfQðà‘­§nö,t°®ÉÅÞxH(¥¨ïu` žeœ{½WŒ[(E¾u4¯û¢4Fíç/W(ÌÍA×å†c±ûO»z옂(FBɯfZ¡í÷ƒÉ_®ÍdSõl@ïˆö:/ß&³¬Å§ÃàŠÇ1¶ ~2Ëïÿ‚³‹sw2°ŽjÀó.ä7aŒ£÷JfVöù¢)_‡à¥˜œ3ÛÆŒR½©aÔÌZ~>EZÒÖPá7_)å¤M¦*tÞ»ì§M׃?7âdf˜•}†lŸ¹x0böî\^fz\¦˜Ö³Y{oPXUÀ‡¶6*?J3¯Ñ£T¢0Å,L1¦‡(û›¾qö/@¤=á´ilëqЃ©óÆÄ¼Ê4†2UÈ“úóhh1nt›á´ L†lÃ+æ´- `*‡ªJB9ß wä9|<Ê€á¸k® î9‹—$â^òi­’j›RIL‡Xœ›Q&¹à_U %°r<$+ª%ƒhß~_OÈÁ•÷ƒK†¸D«YË "ƒ†éĶÉôAË9c|MVÉøÁb±é¾E±³S"B qè)Kf `¬¶/¬=V~¨fPê‚…|a)]{d)‹IÑ$4Uƒ®­æÕ;[†åPc„DÜø'ÈlˆÕï™Ì¢Ç:%²`3¤K(~ÀMDø4b‚4b"Aã'—D¨ãˆeë…oÑHÔé aÑta8 Òæî í»á“³ÎSÍvC뾃m<_·/þì©"u2°Œýx·ùn“ c»xìÝ”õ5—Íc6GÅ7d¢©sb|AöÍ¢ÊÇ~¢–#Ï Çüì R4µ¥‹+Ì‚QÉ$ ¢‚Ø”°ÅÆ6ääï5?Ç5Ì€tU XñCo ˜`ªý$œ€b(µbdr2˜A¯&—¯!~ËÑsCü©!êvÕCþeÆ¿˜ŠØC0ØÉïegñÛ³ÎÚf¸9G1\t{ðÐ1EâÇ%ÝXc€9(e $Ðàk\Ôä›]»21\<Á’ȉh(ˆÉÄõ> stream xÚ­Z[sÛ6~÷¯Ð>…š‰h @²3û¦IšNÓvc·»nh ²ØP¤ÊK÷×ï¹$EÓJÙÉ8A8×ïèÏU¸º…¿7«jÀ?•ƾ â$^%‘òƒH'Ѫ1«Ýê_L Vo.¾¾¾¸|-ä*õS-ôêz·RÒd´Šu íêz»úÍ{ù틟®_½_o„ <å¯7JÞÛw/ÖQà½yÅäŸÞãèÇ—¯®®Þþð†iï^ýðóÕú÷ëï` ±Šý4B\" "»¾*ŽÂΚn$„Í«ÈMz—U}Vâ´‹W×^„tÂpÜ®ôu­òÃÅo¿«-<ûnø2MVw4ó°Š”ðuŠï•««‹ àaäËH‹)dà'iÊP~´Þ„A'?d·faÃÁj#¼ò ×û¢]o$på`ªž{·MÝ-µ>š&늺²ã»}‘ï¹›å½U¹^WczÅaz\W C?UšW„mµ>±Èíòu¤&ŒÇJ_ÀÑhþf*ïnöÆÉ™Dè‹(…ðaž z7•Y ü dŽ¿ ôDù"Ý—Þ›[89¼’â± å+ˆ6JR÷æáì+›P~¤–9Šßkè°¸êsxE&^Ö45¿¤•gi·}±5ØU^Ý`ÁzÍK©¸Ílkº‘òÞvÏÖJy-?éÛþT@vY‰Â l?k ƒ+$! i S2&|,øTn"mè™Fp¤-Ó^vM¹¸ö¶ÉnÏ*Ç&– *‚2ÖôaMн´ÐAø?NxÇЂÄP·hž9§G¿=Xüõ˜Ô +¤àAëË#f²Îݺïlg7Ì‘Þwû¢úÌÑìò'G{]7‡¬;·i ìK…ÛôÕ]Ñ¡¢g»1Ý!iÁ Ûî|DieMQ÷-ŽÉ‹MüüöìB¼=ë>¾5Ù¸~n{â?%(,ù hó}V!ë¤Uf¤‘ |ÊEeìä½íX>cwÏ+Ó‹EeMJøA¬NÝ̓ãÞ¡ü²ûö jfû2ËñÝýY‰ŸŒG&ï Å˳|OÞ Õ¬5@sZƒ]ð––úþÅ;Ÿ{?·†_è†ÏBÛfk¢F>;,›ªScDÞ˜¶/;{~ÒKh3nʺºå^^Ž}GÎþé&ø= í£)Û³ÌI}Üùe†á(›W—ÔëÝgŠÐ„½í”ät˜î•¢âg™mõò›Ô£ø”Y×ëP —Gõ bïeºe­eÉßGÊÇHAò‰µÝt8"bÙZ²J»Gæ+ø¶·Ñ1¥4$œÜDÝ3)Û²ÜØuNöúGßv3«vº„³•¾èö'boMwªm A¥iŸ.ùë5xö&«Úª$¸«s §Q©~L’%H& 8€ hêƒéÈ=ÈNmf=‡§\բކ¤“# e颢Yаê4¢ûûÌdI)„öC5‘Ë…@‘ÊU×3*n÷©¾'õØ`ø‡X¯VtØóhX;²m‹ƒÕ¥TûAgÑžj”zÿ T@qc0’¯?ò#ŠÛH(Í®cÚ?â'Î3ÉÝÕr¤çê!ŠÔÀz¢ˆ‘E„p)kP§6ûº)þª« 5= Ô3ÀÊÞtEíTÖ“uÿ½7ɱ­A'/‹üwëjAf1x-­ÿŽðågd¯ã/ý¢*¥òóéIª‡ôä®(K>gS[•ãÐÄÌRè€)ByÅà_vsÏ$û,ôÚ@Fƒ. ÉÙ¡î«Î½žÙÞˆdbM¼ŠÍöäùQ œ(:®Æá™QöKÎ~fëߤ5àÂ$d ˆ•|;d•cR×X>Öu j[ì²’˜‹ œS[ØŸ=þÆ.°­¥·&¯ (c¿æÖrˆzvš[û9™:tnÜ7zÈۊñnÍvÑ ¾!#ûAêfóÏc]TŒ¢„1>`‡ƒ=ˆeô.Øß™¬ë›ËÍ?ÿó¢Em”ÊñõuQvŒç†‰‘ç-I„Ä9FƒLAÊl Qû~é«©¯’Ü×ÍÒþÀâÿ´¿Á4_ÖeÝóÄöÐ܇½È‹µæ]o“±EêLË$I| sq¸àpÎëËúTæJœ¤ô®öÆt »ƒT5 õ Ø (Tîú’û;2Ç 0ˆOyr SÖc§—Å:áÈT–¾-Z{2»Ì©YÔ #ÒŒ…÷+ 0>I!äÉ#ÒYòÛŸŽ]€Q-xÈÄÓ!²ÆŸg {n6¥w¦1UnxJÆßøúa2‹¬¸å‡g0[ZwÕRa ]°µ¾rº,6mÆ…õ]½X[TÝ ©Œ$‹jÛò ã¦#¨†0†¶žC]ޓܣLÎFÈQFÁCéÐÉ9„ˆ@x7T$Ò)¡¥|/°_D„‘ÃË ä`Ͳó˜­ü‚ªO Æ) ÿ'¦”µ*ìò™RL^SÖÂ"ÁsЄ ‡Ò`üDUëŗ¼Ê#øòIøùk«CæL@ÏÁö^}‚íåÝeQµó.·rb¡ù¯ÿ väfü7C9ˆÆÜœ²®á}SLåœÆ*è,±$å]0%€—Bž°àý€ÞñNdÚ"w!âÔü©w•i²«L"™\ ÐlÞ=ªÁᣌYK¦ác…VXJ'‰+„ƒ§·…pè9Øž}f ÝÐk ûYì»@ˆý#‹9¿s8è±p¥–hˆ9,]Á}šsðù{îZ°t^è-:[='í'‘œÕ©±O ×bvq0 NŒ&„PxÌÚn˜ÍáÂe} µ”ä ýt$9(íå¦êêÇ•vã‘_ ªJ @Þµ{uØ$Nu›Äûi•ŒžÚÌ„3›§]Å:mv°½ª?NÂ>mZçgµÞ[K£´’&Q¥\jPmªî-ÄëÁŠÓ2:ú¼Šsæ)¦:ã\)bØ9,ù YPZÙ;)³É@[—îns Âó¶¡C¹v¬=¡°A? ƒÈ¡¥8 ”cÆÆCŽPK«RŽñt;‚X—wŸ©½Fz|âðÍyrSÇ–5ެöõX—÷·t¹…#â9´Ä¶xtE2 0t ÛZ«’3˜ºséhK»,}k„¶Àêâ Œú»šKÜg.ÀäX[ ºq¬º`û¾¾‰U:š ’©ðÔ[Cð†F¨×wEkžÛåGÑ,`a%è²ÁêרvANp¼´•j)ÿH¥/†°ù¢áÈ£›h>ø(qÉY"½CM–$>ñW :îvŸsŒ€NO¼Kø* tß`Dí‹rËä1ušÇ+¯/°¡µFœÒ-]òž¿ |ÏįѤXüØ¥Ž£Œw“hº{& ºbÛOBƒ |Íïá`—5è—bD¤-1ÄU{QƒŸ-ûŒƒNh+b~@Bq„eøWp˜ÃK®18"©ŸþTd` (,¤û­ˆ²¿y—uûG*"´v‰j[äœÅà…Ö&øÓˆÂ&üõ7O‚Ä覨`{ºë¤É»“x³XÛøÂ*b­6<–d:mAm·¶Ã ßiqŸÓ>Âztן°À0‰Í¨îæùXÂFmô{P«&T'1#ñÑo1pLuq[˜ èA¢øØ:B <²ö%mä’t¯ÕÚï ZlÌÒÚõ •+ðºì³¿  üØ•¼_4E·?ˆƒnLjÝðý`^Ì<ùšBöM[—}gØè~AÕ†X·Ï»úì’Ä×cÁ@|Œwør Y”3 3Fðt€\> stream xÚZ[sœF~ׯ˜·eªvô Ø7Y‘§¢lÖR²›JòÀ0HCÄÀËʯßséæ&<¶S*UŸ¾ÐtŸëwó~®àÿͪZð§“È×AG«Xi?P&V«&_ݯþsÀÂ`õæâÕÝÅ7¯…XE~áêî~'~¨ÃUd"_ÉÕÝnõ›WG±þãî{X)W‰Ÿape»kÛТ›´:¥åz#Â0‰¼«ï.º»~]xÚ_o´ ¼·7—kxo®yø§wØû÷ÕõííÛßðØÍõ?ßâ».®ï.Þ_„tp8”ôR«ìpñÛÁjs߯_&ñê‰VVJ ß$ø\¹º½˜_t||·§ ü8IøÝ>_‡Ú{ÆÃD^Z–Lló}º÷'s+*nñ"Úô`©§ux©ÝäTíòf¾ô±¨€'R†Þey¨Ûo ÇÜ„¡ŸhÍg¡·ãzLJá]~hy ßîæX2pµ‘dºý‚øDèaâòêÄ[>übÁ÷¨›G¯í+i×Y‘·>z¡Frzø¼ÔFãÕ÷غËÃ=ÿÑNó&튺j¹ÏïÆåiÙÖv¬?=Qñ|qHìzóZ速Bú”Žô#‰öiöÄœ%BÅŽ%wtâXy¿hè>й¯O SVHÒGŒØ²n „Fz&ä=¸¦çµÑt® „À…ª$=¥±ÏFŠôÐä9÷›ºK;KƒW_‡^ɺ*ŸípJE~µYóûúA˜Ö¯NÜE½Ûmʼzpý¶ØåíßúÔ_œã¼ñµè#ìmq8–ãC~Üð5íÀÞžxwçgwŸx³ŸÊÚz°[ðÔ]Þœ;žJ|M] Á÷Ywe»©eAl²º<*sAé§}Ž ¥{«""ñ%œy@èyÜíѽÀÈÿì†8$~åùcÝà(º(l5øÎvxdA5À5PDo'¶µÜ¡y¿·¼PÁ©˜(€ÔÔÒŽÚP»@¥Û?ó¬[@M *Nxiv³D+bl„q]éwxÒ٬ܧ;«jnë-Þé{_ZºÀ€£(#´‹2€ÌÀX¬:ZÌ }P­ÞÛ–nùU(êÛà‡,ewöIõH=àÏ«úˆ æ EL¾[~7x#Ðp¯m;)lÒÃì$.ªò `éç‰ï¬2 Âd¦ŒeÚ¶”¢À{˃Ào…`bGI6 ôÈP°›r“õÁ11ê!ø\; ÷—Ï=àû2ý{ ƒS‹S/±{’@:Òó®8¼L†$^±ŽV¬\}.Ðr¡—ÉžÖ!âÅ­¤1ÎŽk ×ÄS¸œ;$AßpÑg¼-„'öCÑÎ0Ù›³,„+g”K+º½S.Òu’“ôJØ‘HE,nó¥ä(R¾Ž’Ï%G¯z!|³°‹öUÒ3€n² _á˜K|L‹ á”oØi0´R V¥¦æýék€ÿŠÂþט/,¦è*8{÷ìw¡ã,qCø¡J¦‘&±¾ÜÄÞ6Í1q0qŽ”$\\T·n1ÏÔ †3].7ˆ^Ä„v¥zR²¡aë¼ÕF߃ƒÝ"I† mÊ Ÿ©nŸvK4±¯u/ŸOW9dlÜ"JPY\19;zzêjð²Œe-í0æ['\“s'ßÕ¬µö¾£¼7õÈÖòó‘Û!V}ÊdŒ8Oñ€ˆ "wNR#6Ae²kíŽÓ¦!¨0ñnk;Æ< Ì,¥=œÊ®Øl9N„ ïËä6Ïê¶JyÌJ-ŒYìІýÃÉ8ëŸûÛËQîÕ…Xö)&ã˜Ýè=·,ެ«Š ‰´1SÊB˜Õ_ÒŸ8ñ¹öð»u9’Ÿ¥+‡-:7‚‰¡ÍÝ›ô…éeU´³0^0FejóelI?LäÛÄÛÜ­ÀTícûÅðF'®>¤cˆ“Ç<íÜpqÊa˜¸oêÖpöfØ„ÎäyZ¬|Yµ”üQ-%Ä}kæ4´ÏLmŸy²£Ë¸Iw„Ba…«'à &ÀB<†J<°M|Ä[L>ÀqØ”=–Uj®I° î>S@aU2SÜ×½«ºäŸ = gô8‘¾ÊޤÇJ¸HCTÍmf÷&Úîm§ìȱ`™¿!–ú«µ÷m“¢ÈÍžAO%ý±bà*;ì”Hv ý7i¶˜Ansú.ÑY‚QÆ»Úç›Tcçö)&J8dž±O†Œ t>,Ïåˆçyîâª]>Ñ_à%žN&/?ðÔyEPèdª—Çcé~Jô7•!ö£©.ô>K#8‚¿èxv“¹kÒªÅÅêB ¨jþµ.-³Ä]̘%2S¬·Br@úÒb?E m³ZTsÛ'×R§] Ð{†Hèi^F?íq_„„E8w$\ñîÍ+&^ú+Uò«2U 7²<2T¶r3e8jQË„ò÷qÉl–R÷Â$šv¦—õ?‘ Ç¦…¤e% …¿7Õò†pÖð×U2ô#)‡’°%¤›ºM‹ì ªGŽeÿ«%$+nÝ/1¤«,iiKF@ìŠ6;µ-V†g@ëÒ²´…XY|Q.רCƒ}ûï²rš*û´9œ}HÂr$×Ð@aþeQ‘åø« ~@LD¯V ˜5äu"™ìu}wñèÑoý endstream endobj 157 0 obj << /Length 2361 /Filter /FlateDecode >> stream xÚX[sÛ¶~÷¯ày*5¡ðòè¸NN2ÇmN¬ÌôLÛˆ‚,Ƽ¨¼ÄUýÙÅ%+ž¤ãñXÜ{ùöƒþ xðÿoƒ&ˆàOå)SQš¥A&‹d’É 3Á6øïU£àíÕëÕÕoDä,OD¬¶Š™Œe&)|ƒÕ&ø-¼ù÷õ‡ÕíÇÅR¨(Tl±TI¾»»^È(|{Kâ±÷ËÍíýý»Ÿß’ìîöçO÷‹?Vïá¤,O#ŽGÈH2lF´}Sî…›5W„ƒòJúIwºu…Ó®nWW^q{C~T7f‰”AQ_ýöGl`ì}±8Ï‚';³¤,Éq]Ü_Mpb ©fzú½ãˆeyNzüÒ¸\š…ð¾mÙ V'¿ÉÙ¤`q¤üÞÃtX,òpxZpX,,ký`z¨ÌvXvåÃn ~ÛÑœ¡Ý/×í0´5ÉŸÊa‡Ðcq,9g¹RtŽ^,c‡}Yï+ƒmnúJeÛ ÿ"pŽîiÌMßÛËXIÛÈèbG«£=0:=k€KÄ2×xágØÅl¨ý{¤¢vošA[Ø/¥Y>ÑÀSÙlZê'*|Â$ o†®ZZk\:µ¨Êâgfy¸éô®á¤ |÷m_âMá|î& ;« Ú¥Ôl©Q·½.‹K®" G°?š/5W¸F$Yì¬]© ½mÛÕ=õL¥×- Û¹ Ei–{3Ó‰óÚæóصi†W”>}KßC;vNb*S¸³ Ûné«éS´uMC<Ü=ŒÝEmZl° ijì4^ïË‚«Ðdpg¯]ßàØ_ºØ´eÊ2åñ<ÍyÆDªf Œ1ï’ø,ODƲ8õSI‘®‡‹¢¦)øÕÉ¼Æ pf¦Ž!/ÀMB+SnÈ”q.NÍìœç)¬ë¼=yž„ºÙЀËYÉØ›íX‘ðɆJ1ÆHèT=PoSn/†ëïQ$бrÖ¦|gg¸q‚<°Ë…‚ìŽYª„³ò`÷ =Õ~ñ(ñ¦ý SDå6çáƒ7±’úwÃUÕú U¹O(´È´ÜYCá€ÍðŽÚOË ’xÆÏq¢Æt„©©œ  )gAÔµƒM”Ñö ì m —li¬¨ÿTV•ßlßµè¿RËé/Bˆ’@À’8‘*üß‚# 4Ø \ˆp?AÅØVŒ6ïç"*/¸Þ^õû}ýZWº)ÌKŽSrrìëÎhÔ5%ßÂljöºCX‘œûT®ËÆøùSòwÎ/`å_VR‘K¹b‰8séŒ]ÞCh‰T9cƒ`æ”®Ò{íìñ˜Ú¨O”8Ü£%k`é{·W{ɦàÅb‡a›G.VÀpÿ¾7õº2Ö¹ €R9ù¨:—È‹ÝcOÝ­]h”õò"$Ûº,¡=íÀ”<ÜQï/Q²6 ãf,0’PNWCùú@’¯×LÆþ_ |‡ï0ÜUŠØÿÃBÏŠU`h=£©*< ;‹G8fªÞÙ ¹Ce_/á}‰‘fËFÕêÝ ;%"W±±vQi;”¶Ø UuYy9Ph ªKPUý`.âbW¶£«E5øüû2%~VW,(~Cæ$Šñ8÷™síâOÀ.tShÌû–¸q*µ ±[`K0|kÝ?¢àwª<Š .Ïh†èiyµ‘ŒŒ–~rµå60±Ñ™šÒÈyŽÞiÇ–þA ùhæËjó"´Hx-dÞ@Ÿ0¤D–€u0£l«¥¯Çl{üªÐF' ÈHаF‚/–Áʸ-ÖºÇ$±ãÉ8èñ<)`ðÄ56jÈD½1Ô±ž‘X4Zð^·P*DƒFA¢]K¡ˆ+½¾ÐFH¤Öe”:µ‡»XN¥^y„!f4Ç4Ø%"ˆúqÝå0»ÀQwËK¥ ýJû;b¦k{’%wp àþãoªÖ?\®a£ CÊ"5Ѷ{K9gg€Ža´tâÎ@³qr*1@ÃÉÃêXMzê[§¹X!ÊL-¾P93•$`£3ûJN ¦«©EãdÔ°Ü®Z<»àÞ¹JXj¶¾­°å#éHU°¢€¶>Cít[:lA›eè…s*£›±^«¥ÎH¶™aA¹X+·êýºì´k•çó‰xË#ñ†xŒÃíØ8"‹=z“`¦a¬zé‘Ã@'[®-•˜Θéù5îæ˙ɲ´,З›“âŸÌê< ´ÍÙŒ÷Žê¾:Âä<]šl ηu/÷›@!Õ·ÚÑ*4†ª=¸&ß¡C ÜïîkœQÍ9#2Ó“›Äî&ò8¡7EK¶8ÒÙ3î³'\€Ô؆¯/c3ù‘[àÄ/®t÷Žw‡øQ h{sbÓA°¹t¢cPð„¯ d°í ›#{òÏ<–Ìòtågèœà&€î_³ªNæŠIø‹ ǽñ»vâv–…óÅÜR+üjšÕW%Ñ…Ó'J÷xž€·‡ý8š1z Æ2 µâUc@UxÜØýËX O¿(ŠÂe/îÏüúM(~á­ :‰ˆÉ<¥=Þ ¦>bÂsP·ÅãTümEHÐàŸIºÅ“ΊÂÜOï!bÎb‘*ÍÐÄã=¤¿Gç”ÏÕ†}’½¨5$œ¯a{ÀjÝM:êffá³+î;ºÍ‹e Í×àNûîð§¥—XL²d¢y~dƒ²ÚÄâøÐ…ši³T±ôϜܻÅô9)„Ä_–KyN®gÉüü7ð†È'ß”Õ@‘{þûHÄòãïˆ?^ØHÁÜé1xgÚ ¨ÙVÄAžo*%˜3ÿæM?5@=ÑFà0|Q$@½ô>ßW)&ãIÙa¤ßÁhbg( p† xmkGeóøÙ ³è€ºùm¤Ç}O™=°žÕ"‹Â‰Ýà/jP ¿¼øNHħéù;ç‚Àƒçøê¤÷žÿ †ì!Ø*ÆÎ×Kì–Žå‚yb%N/ÿŸë× o›CY²Cë˜W™O•ƒc•¨5ôýƒö! 0S”ºª4lIÍ%Ö‰?Czš¦(Ï‘#ÀG¨¢Š8ã¹Ó1ŽìNqÀq|=ýd c+«õ•ˆxz²Ùíêêÿfƒ] endstream endobj 160 0 obj << /Length 2946 /Filter /FlateDecode >> stream xÚYÝÛ¸¿¿Â}Š Ä\’"õ w‡æöÐK‘m‹"—­M¯Ù•%Ÿ$g³ýë;¤lÙÚlîlH)r83ü͇[¨Å=üý´hþÙ2VæE¾(ŒÒd…Ytn±]üã; åâ§«ö‡ÛïnÞ¦f¡¥È2m·ÛEQ eÕ"Ë3Q(½¸Ý,>&?îªÃàºåJ[™dËO·富€Ó~%+SÂ)ð¾[ª"iï»j¿÷Í=~1žyóVëE.Ê\Æ/­…ÍùËÆ4 ÓE)ÊLg¸J¢ÈRXL‹|³®×/Wi¡’  ¾Y*›<1±®þzÛc³|ÛT5¯;t'¾ÂÒf…G.VᔕR¢´–Ϻ?V÷N,WVþg©”LÚ#|gT²®ìÈäØ;¦ø CËí}} 3ÿz÷þÓüöc"p²v}ï—*a¡0ÎÏŽ¬ãEÓ¶½wÃõÀ#n®Û¶Ýžû¶sÜ[·ûCí×Õà6H(“¡êz8JÌô} ÒÑR%í[æÎ5œ++-……ȯë*¬",Ú¶~@Áàî{×{> BF‘öØùap S}ÃÄaçÃ:ÐNP©Èd"M-©Jq»s¨“ÚäW)u×<è]”Žþ{Œt°œuçïÂ'xSèdà³èJS9¸Y™¸ %eÎÁk:IéËŒˆŒ0ºˆ `’6iÑž$0­¹óTÅc¾Áo>Ýò|PÛb•X3e~bùªÌ’GßlÚ¥¶Éã2³`+]ê3#W¥%Û¾¶¥3!O7x΀‡Ó£}µ´ >ø‚{þ²T3D7E³ÇvÝ6C×Ö8€kƒ]“¡w¼Ä7ZÛ%ܦZ»7ËU¦eÐ6LÖ¾yàîÜðèÀgžÅã®Â'ma÷êppô}Óûã‰jF<¥Z©—¤SkG+‰O=lÚlø¤O;@ê]P±RZäY>åw@”¦{b Ź@ô¡]·ˆ”Ÿñ?×!>„ÉkSV^¼-¿Ù–3¡4oacÆžIÅè:”©Çßû©ÈÀk­²B˜´7ËR&?·Uà¤BwªÐh?£fÝ G Ä4Pgôïkf”¤sÞ‹J*…vâ~¨ºm ,“ãÛ‚1Æ5°Ù3©B0E½J 2°qPš†)×àÉ"¸å¥*ôWie\´Òy vØqoÎô¬FŽ ‹ÛÎÝ ^onã"‡v𠸮à8Å»fCKn;Äú&L"­ˆf„ïmÛÎÇ»d™0yyž¾gw$sÚ!•ÚuÇ’.Õ°Cˆ-Îá'ØçÂâõØ1‘Å{½ÃÜ‹¦cu ŠÛ‚í7à€Ñ¹ë2ùá‰gPdÇzxÍ~š÷‡©¸?tiêá¥zÁÞðˆ{´‚·ÇWõoð-£Ax]xÏŠÎM<'¢TŸxf@4˜Ac´¿ì–ór|ÉûêžOÏ‘>áÒ£Kf„…/'ÒÛµ{Ô·6t‹×Ø-³Ô&töí‡{ïg=H옗yÖ¥šá\0p 8ƒÑ}€moh~ÈÕŠP¨3È®Pu\BÀÒsÀc 7Ânï¶QŽb˜Ü„`&?é¨gÏÖŒÏ6Š ÷Õ>|ߌ½¶™,ŠÖð\<‚fˆVªè:s0g4Ä´ù˾H¦£/zô$"@§¶©QÂޘƜè¢X çÛ†b"pñ·ºÁ‚½«šˆR”ò"²&k‘›Äo¹%‡}»ñ[<ÙbTä˜ØnçìHj‘¥æE"¸éÝ‚‚£¯‡;G3ƨРǒÑÁaF盋¬¼p¾ÿ‡ÐÜŒØfгŽ£ˆ#¦<3dˆÀP“9Á¸l{ŽÎóV¯Ð´ÈµÀw53è‚Ñ™1ŸM8œíûèêƒçG¼ÖÊO¸«‹èŠÑ ‡!©.eÒ¹­âæó#-¶1=£ž ¾ÝY)ŸI9æ¬þ­¯Ý¼–sø6hùfÎ;ŠÌŽ ~98r:¹]*Po`z&ÂÉ…9Ejh̺Gh#Ö}¿ è„—g¯Âl˜Eøe@Îyñ0B¨—'-s½Š›Q°8`É™tQ°×Œ½ªmØŠÝ=8-?Ÿt†3^Ï¥°¬Ì^Æ0Ð)–¤)ÚÉþ,ìDÁyád[o¸sº! îÜ–óYÍáÒ8Î"ÑA¬“šK¨ ¨AÁ(çWË`TÃSp¥+"1Õ!ýgr"!ºu_°.bç<•j-t–Ÿ¼Hª ?l‹âáñ}Ë… ô§#p‰»0µ9M !é'LZÆÜÔ[×alr5§ð³jˆµc0}7ð²rý M9zš`Ľ«îФ©ì›WXx‘ªfàtikCQÅÚSJ›ƒš²‹ˆò¾Ó"ÊßÒCÔøÒáiïïy«´Ž&‘À"ÇŒøˆ <ôÉæ´ÞÏfŒì­Èßžœýµc‰L²£áٰ·©yTTY) ­¾%ä‹k"$…J¸/u‘eOXóZ×~ý0o VŽ)ßs`lDYد1,Pv ÆÚÈÁâ»S<ÂC^wx…n$ ´÷¾Yaš†ý»öK¸¹V˜Øë¬`rèÂCW“‹f›:w—g~÷ïQp©2‰ é):Ù'&a…‚|øm(snú*˜¾•ÇÚã0~Ðqï<ƒ|ýlX8‰W¨@r$;ÞŒÊJ]»çG³0;fƒG+H F}.LÈhÔýåo¼Õ1gô|ñB~gˆö‚..£+”Tß~ ™«NÅ c¿:¢æÚ}5ø5dOºÙ„µ=eDÔs{¿nk|ç8„µC%„¼DÃi—ÙTµ1÷åìõîPuÕ@Ø—M´ÝøLmÅ G`q+cŸĉO!,}Æ×“· ƒ(),x”¦j€Â‚ÆQ&?š-ø—h­×c±KÜ*â¨Ý(·b.lý¾î1i‚X,>dÆ|RCÙ Õ&R)‰ vǘf²ÔZ”&ÍqJЉ!ž‰µÌdÍóª$a\s?n)˜­Vam)/>–©Ò|`Ÿ÷û§bu8£%o½»ª÷ë`ßmˆTˆ‡vZ2BJݶßÚsÑË÷ož sL>eIÁÈ–nnÀ|à Ÿ ­°×ûý¡všÓÔ– †¸èÏÜ(=éó8'L‹<^‡»áz6PϪŸ0‡‡Ì—35zbeÖëÙ“çyܵdŒ°ïg„劓³#Kc€¡Œú2KmŽû;úé«°pU Þ•%%^³¡¼*G»¹™á-§:;êH…å¼ kÚ{°¼‹C…œzÐ-{ÁPAíYa.¶rôLÊvdbÜa°^E! (OJÿà·\9û±êÃJžÇb % GßïÜæ5Óúv®¤*­HOu„·Kc“y­âÒ 8šÕz!ä)ø|^éF±ÕcÒ\žê18Øø-Š”ê~“Æ_ØAa|Vm„Wóø tj7@OAèãÏÁÌΩ(&ƒÙÐH•ɱÙÀ` q:ŠTÅ€O´`ɹAÿ·c;ð‚ðC,$1vhg± Ó¼þ:(¹ÊáSØ’oÝ4:Ê¡üñA(Å¿C)bèÔn;p*ÚçSî·cU÷Üïý}¨'Ì&íx^jìp*D™?‚XÑ ^3þÜÐUŸ&ôQé0©ÒO/£Ó “fSÞÜ~â ¾¿x²×½³51O·$²ˆ+Á§ÏÛ?<<à}9A¹fbÛ3|ü:# y€—V|ƪJ¥‚ Œó?vZÈÓâwü@T>÷ûPZp»F²qCåë~š¹ÜáÏ«¦R¨Bñ¶©š,úËíwÿµw³ endstream endobj 163 0 obj << /Length 3225 /Filter /FlateDecode >> stream xÚµZ[Û¸~Ÿ_!ä¥r+¼ˆÕm ¤Ù$͹4™¶(v÷A–å±6²äÕe'ƒ¢ÿ½çð²$Ë“iv‹ yH“Ô¹|çÂùÙãÞ üåUƒ*‰Åb{:T #zMîí¼¿]1XȼWW¹¾zúRH/ ’HDÞõÎS2eèÅQ ­w½õ¾÷ŸÿõÙûëVk¡˜«µŠ˜ÿþÃ*dþ»Wž½yóúí«Õ×ßÁN‹ƒ$fw Y`—Ñ.UqvÕø<wT¡[ô&­ú´ÄeW/®¯~¾âæCøéV2ˆÂÐËWßÿȼ-Ì}ç±@&Ú»5+^¨D%ø»Òûxuß—Â^2‰¼X²@' ÿ²¯²®¨«–>öÞQ§K?­8ósÓ&=ä]Þ´0Wug¸öéË0´6]o-x #E=Åz ˜{kÄðQ†þØÐ9y#ú³Õ:bÌßÙûÑè¶èöÔ;Ý(0¬ík s÷x8S›­åø*ô 5´fê§â@û§Ôl¨ùÓ„øûÉœñ%Y3˃ˆv¿ÞÀg©„¿Í`LT¹¦ØðÑÇ"1KË2ß.èa ãÄ©ÞyAÍ€Zº5·û"ÛÓ¶N²öèîG5]à˜®-o¤ŠpÌÇqÐ ùiµ¥Îí¾nsêþ²ÊOËÞ »´Û[BÛ¨Sïf3Ã5p@Â¥«°éðü'°ŠÇþ±ìq–ïÁFEƒó~Ą̊„eÅÓÇ ÜŠÁ2”[_¶Àõ(£aÍã§v,;¯²’7L±Ñþ¡/»b]•%gõáWUá¾ yò½#û •"ûÄÎ>] üæ m)p0Ÿ( @Š!6Å;[ïá‹Öm±Í‘u~ž‚6Йd©1O7•±ÿ3 T:›£Ôeäoîh"¥áMŸ6[¢äx…ÏÇ&o[¸8HF²È…óíD¢Ö(ÒÐ ˆ¶íÌîÐß5õÁRë#v4tˆ°©»ÎM’⪽ݯش Ü¥ K° PûXËE[ð$)ñ¹ Ö2áDÜ5ð å+'ö§‚8|A–öm>?èdî†\S;•,®³?PcóÂ!‘‘a¤AïäÌNöi‡œ—sq‚<˜ù¯w4[ÕÔZVa×ê•v(€ ÷[0 .Ë1DZ ¬E”ÜØe'AÄQó¯°¨LL¡w®@,¬û&oƒ‡x¨0ÿ”WÕÝ ø·4»“õ¡xrSø³]Å[R:·‡|ÈêÞ-ÂV®íÜùŽSjNÚ(8îq>,`\Î8‡ªz·p 8=ŒøÌáQ#d†öÃÁ'ÂÏÁË]rARYó‡ŽsA2œ¸ ˜)ìÒPØñŽ–‘f\’Tä’¤:Í/´^‚,{É…Ù_rimuCíM“ƒí4ßÀ( AÒvùŽ–›C`ŽodGD°âŠÈ°í‚äËèú‚ÇD£¶˜ñQ¤ïhPÓ4íˆ4¸1^NHËF˜e2S†I‰CU˜ &áL;ÚpÉ=Óö µ–¼ªÃ ›žY›çä߼ɉ°«Ë²F‘Þ¢k03vEzÚEøUØ Óp‰mYgY“—›]‹.QFÒ¹kÄÀûEEmÖ7åvÁ*›4Ë[L´ð?.‚aœ©™†€óƒw¨ûҼɭök7„žÞù¶)º.· N‹ÿ†Hg´à>t‹–Ñíìw@´åðüßï:œ±ªsyÏÿ|9n[wh®,ÜjâßÕ=uªÜ( yØ´ù¡Xguiâx$ïÈž¡kâ.Ó#åÓ¦g9Ö¥ðI©³!)Åð+èŽrií;M¾3‡A[k(ݾ¨nˆRTÃŒiójñ|4óT·6«ùënÁVúí0Utm^îÎÍÝrï_+ŽðÞÓâÌ*óbˆZqB±[cŒ°ÎËv)¨q ²¦çSUÎHÚÕ4Yݦ¿Û‰"YµBdQÿ8ä~¦5ÑŒé=:X#ËÒîѹÒ:?‚EëËâºCìC¬“ÞTù£/:v5uì§0ˆ‘f]i³yðÅ(ªƒ”Ãfùõ×`È„;_ #ž\`Þe0¸Ä—…O”Hð$±e‚VÅÕ¥(¼ K˜—J›ª@§­! )&€`?i[ Õá”ñÃЂßZ úD?tÂä;MÜÝžls1Öyú'$[ÇcY'Éî…¦¨&¨0‚½öˆnŠf`ŠýÔîÒ#2þ<¸˜ø½ÄoÆøe¤C‡c™?XGD øV5ÍÝÄt†ÒŠ5ywEÀ}œÕs˜ A\xë²³eÖÑ£ÔôÓ<ËXƒË6Æ1$ yœä'µ•«S•%‰y7ª¤uBˆ¦È·B[‚ôÂÔ1EYɘåqƒ,ËS¡¼h.Ê-mV\ƒ&a)Á!Ù¶KoLÐ‚Žæ7‘¯M AcS/ ˜ß#Yõ Ér1ˆË´ Õ0'{E^B’šž•3„r{’-V9u†Š¢ /·Äpá, ¹-ŒÐxÐí–æ’F»`\t¦$:tÆ©¦È>Ñì&ÏjB Û’ÍMA »ëíîdÕH- ÈB­cSgQÕuÍmn¡ ôsTùf¯>/D›±[1íVW®þ{cmAê`AdkpÚ"J¦–q©þJê“ábe+L ¤R2—¢ìÖ¨ÅHÇêa’˜4×+ îdSÚapêÔpœ5û’Ä—ÍBƦhhíȇºµn3™Á©† 2»t¤‘åÙÝ"à]J‡:‡¦æ/¦o#ÈàeÈàI¥Ï¸è6ÿÝJ ¾bA}ë87p씸.|¯rß;-Vֽͬ¢Œ<âŒÇ³ŸL˜Eá·µ­ç1µ OÐtÔuÁ7‹ÀØìXt&±€A™w‚pQÌŒ¥&~ÕX½5óFKñÇmîj5l^¤1Š$e䎻è«mÞ@ј"´TXTØ´˜š`Ô¬C:~YÕÝbvB—.Öc´c,ùf ¢"ˆSùñõqàìÕM&Ì!eA~~ß«häèÍÞÚ&N,ÆÖp'.¸“åbm\Þ)BÁ(í>½KÒAÈn!²á‘ü Õxߌò“Ü†ÊØPKõ*b>Ð Æ[6:»¥I+T˜ •(ƒ9à¨q¯b»uEŒMPu­ËÙÍ l«q¨й3Ö›å_d’ÍD¿šEã—Q­‡ íÞbÿ¯ß$RYlšÔxp­Ýƒ†>ãÒ ïεsÎô¢7ÓM.Kö€éðáÊ9yžðâ“ H8;>)éÿÀ¤We½1HÅ-‹²èîh0ކax¿mróh;ÎéqùAEž^PüOhïc¿¤ˆú‡뀭­ö€ûï8UÃûoi. ‡‚Âóº¬û¡?Ȩ{.•X°oª~dÄð…:6[Å.×6éÜrm]œ¢_c `€±3\€OŒCâʧ ³´E'c6\Ê,ÀÏÌ`h;¦ Ø;\g®35ÇužLqE³c.¡¢¼-pýÿißÏA9!l2a’`òLoâY8†ß_Pßf>À÷»#ðAÊ=dØéim¯^R&ˆ ðY„;ÉøW) p‚[ÅnÓ¡wGóÁówoÞ¿ûûÛo® ±Ð£“+è\n2½Â‡ÿüðìý‚BË0HôÜÎÃÊ5‡ea¬çÑ¥²Ñå KšgË‚r€sœÅ`Rߟ¡è@*uzº-³¾´ï Ò:&)ù¸J€tt\H¦¢*›Uˆ¶¹£5}kk±´­ø›S'Zb•€4w+Ç2oŒ=ÂÀÔz¡mûÌ䃧?0Ï0Kû,·«÷¶Cw\ âN 8aWKêµ§6a”E›ÎŽZûtËÒÖöPû°ÂW¬/ý}‡­ªqS1àÀ©Ì…¤”šl_™JÝêšZ÷ÌSGñ"ÑÜŠ»-茅³â6_`”DrÁu`1B º›¤J¥ÔI åð÷$ßæYNOˆ^bA`]ÿpWž® endstream endobj 166 0 obj << /Length 2725 /Filter /FlateDecode >> stream xÚÝœ]sÛ6†ïý+x)]Å÷ÇÞ¥iêÝN“í&¾KsA˲­‰t(9iþý‚ ‘1 8ÞÎx§ÓÊN™ÃÃ÷}tp‚øRâÎþ{YT¶ÿ£ÀJ«Bs0—šͺ¸-þsí¸¸¼øùêâ§_)-2 “âê¶ÐA %⬸º)>-ªÍ]~¾úÍÉ ƒŒ¤²=’Øè‚Û0ÝAïÊê±Ü._Qi˜X¼ùçë?®Þ~°¿ ¼hùJH¼øãÃ’ãÅ¿/?¼~÷î_ï/Ûo¯.¾\.]r<7C’óbµ»øô7öÿýV`ÄŒ.¾uGî .(’¦ý{ÛâãÅñzbŸÇs{a†R3Ä…Í_¦@AþÆÉþRЭ¶å¾ÿñ¾\R¼øÚæ·vr¼¦0Š<Š Ž<ŠÊpXcIf`8'LjãÌ4¢­]bK½;|wEáºìµÛ¢ò®8S™Y™§ùq]6«{ÎmÝôx»Ë«¥Æ‹ö º_¯¿‹_œ.€%ž.­Ž j{-Íad$Lj“A%¢Š8É;(è â)2š%S‹µíPã\dæäbœä‡õá±é‡¶Ãýzä|÷S}!%ÊÀÏÈTÏ×Vuˆý À145Dœ,Âì‡r¦­›¦6O1"“êM^‚A¬Æ~<Ô™o›C_v\Öýеߗw'(Ê—ÞCq¯ó_˜ ÒcÄ À¤ÕÜéû`…´ænªC݃}¾‡ÎÍ/À8Á7ö‹ýJÓ·Ó‡ºï¡ͦº‹º~°fžóßjÄawÐÉ!¢î ƒÆÃ÷Éð⯇²º ¸Oí…žR2³ 10Ió­KÑ}ù›¦®vëªçáë’ŠEÙlÊëí“Û¬3ˆä{ã ØëQq ,É1âˆ(m/¬×÷®ß àa¯›$<2S ò1ÎñTOú'Æt Ò{@ö9ÚiBÙ&R[ƒ¤mèŒH½ižÄö„]$ld©ÙŸ@c|î«%‹¦¬öÛò°žWòuô@@Üô<0ê:…Àˆœžü=ÏTrŒxQ ©a²}œ¹±öqÖhN×Ó³37š#ÁøçÜõâuŒ#bؼ&'SŽ ¥ãÜ®–ÊŽlÃd¡/a>å0¨ƒ=© HgíìÖ®äqÎ8AíÓ óœÙ=ð98Ÿóº®·¡^zò é4f™j1§Á¬Íx]ÆŸc@ö (q µÓ XÐ’cÄA£iFg€Æl+{¦˜Ïm|ΦŸèù4”Ró@ËT#Ú8µhMpjj  `¯§ „ˆ£ŒpÛÁ K gÌV ­æ3{«Ž•|ÆÆçtÏ ƒ&FræÓµL5‚ŒS‹0æ3C–ï®g ˆC [/ðv/9F2l?èœB†[GŸ§Ï¹²·áÓ˜™³O™j!§ƒ¬Ï8ÌÀ^‘Ž2nìñ°'öÉ!¢Œqc›z9£qcÛqù,…lrÎmû(>ÀEt^Eˆ°Ib†|ƒ„¬ÑáøRq «bé1â„Y€0™QÅÚ)y–*69çªÞ=lÝ„jxy€¡óÚÿ\Q‚¨3Œ3—8.ñ0q³=r `sR"®`È¥†ˆ§l_/ä âìT˜0’òÜ(§æŽK™‚+öqSÅxB¬öÄpéˆc†#[)œ"Ê3öè0[_‡æê ·Íýß4C0Üf÷A™z…p›ö¦ÞŸàôÀ‡›¦ˆiXKNÛÕ]e°À1$¤yÖ§þnà2 7V¬[÷^Vwë*>²B÷ܨqà)ܾ â.5D;Å…—‘UY½õËæ.O° vcÅ^7«~ñÛÉz—ï¸çÃNhÛë]rŒ8x’Ziú…¦ed„5ˆ'÷_dG—«X¼±dž¼Õ™±`»‡„Ž£K$`kõ“CÄÙkWçá~ö¼Œ ¶aL^6{y‚Ñ+æÑ;œpóM÷èA¸qä1nÛ&à}ErŒ8{LwûT¸é‰ú.Üç‘ãÓó¿s¼åÏE^¦^AôÆ‚½/Í0÷ß«FàºgDŽƒ¯}SÖ½¥ÇˆÃG­?Ã~+Á!ŸÛõ»òeW¾LÉ‚ü5û¹Ü÷ÏS­tç!¸ï!ä $V[¬€É1â¶ ý8™¼)^oû‡ßLÉ‚N5›¼¬éß ¨Û×õ¾ØrB‚DS$5I«Šé1â@bЬi Õ‘uïϾä¿\Ù‚PŽuêa•*aH9*­DŠÃÊdzŒ(•ÔtïÇ;S×›mxšsù¢'fr ñ8VìCý8¼Ùüø'`¹'„#Oq¤4°&Lj“§Ü«ùbÌê:ºŽœ½è!:W´ }cÕFøÝ¸ú ⾇DƒPR¤Û©¤ÇˆC(»·ÿÝF=ån÷%ä´±ú±'›ôXÙÉŒ-{r“ š?Êö}ÝìÊíf¿¾Öaºu>Ã{Ò—öjú—èo£-lLñl€ŒõlHÛ#Ì^/ît˜"N—àVÞ¾uùºy­2¶£‰¦;”ßœ°”1=é¼×¦ç¼âŸ©Jãq†¿×Ãz%—«#¶©w³6€ØíÁ…ã˜c à»é1âÔµëðñ¯™Þ„ç9KÚþ#7Á ã ô^»%îûÉ> gv}€8à9¹èA`4i»±é.DZ±Ù¼ìðpOîž?_"YgþÑ›;怷ûgÎÎÈ×í‚ØÇÍö0Ý}g8\ÝŠm\\¼¢”vÒ½Òv¨Ã»+·1e‰b¢Ú Ý"QEýc^Æ&¡­·ÿ‹u© endstream endobj 169 0 obj << /Length 3972 /Filter /FlateDecode >> stream xÚ­Zë“Û¶ÿ~…ú¡ [0|zÆI]Çq“iâ4¾éL'ΘP¤BR±o¦|w±tºs2ŸXûüí‚¿-Äâþ¿YÔ ÿ¢,aOÒd‘†ãaœ†‹V/6‹_q˜Èo®þq}õìk©Ëb/®7‹H±P…‹$Nàwq½^ü¼úçË®_ÿ¸\Ɉ1[®¢˜?ü¸ yðöÍ/¿ûî›ïß,¾þ(ÉE²„ ¤òa“•ºÜK;kú>{ŒB7黼>äN»z}}õÛ•0㮋ÃpQì®~ú™/ÖðìÛg*KÌÌÝ"Œ$‹3\W-Þ]=䤊³4ËèýʪZ®”Šƒ¿QÐêõ¡Ðk¬õRDÁÇžzï¥L<çœ3¡ä¥s§,ä©›4¾N/xðÿäwÛ¦é–"ÐÔíúmõ /Vˆá—eQDq× 1•ýÖ4’ Ò›~×týSè‚ìšC¯[ìÓ´}ÞÚV³¡ùvaЩ÷­îº²©iì=ç²ízfv`Ž5ÿ׸¦iIiˆ@¾ÛWú)MÝ•kmŸ÷Û²£ÖZ#áºìáEÏ8ºßg_‡É„+ûn j z÷&/ú¦-•«˜ó 6{´››mòÅt‚T ôf%Xf>]8?¢ÿžG¼¦æŠ~ ‰§Ž¸ùùÂ>!‰©ˆ¥±ÛL<ÛŒð( l*ËÔü/kPJ™†ÁV·ú³eÈÂTÛf)#РSÍŒc¦Ôe{LÓl®—øDÇ?yuÈ{Mï"1g*â± ‚UÄŽðf©@Á «À’§L‰d.œµ¨>Ë$ ”g»2d\%ŽêÃ4Æ®¹Oe”çꋳº£Žä:[ÀŽÒ´3Õ ¥ØQš½ôLÑ?uVÿÔ©þÍw´òáÞ•:™üã\ˆÎqá‚âæ%=5ÅþDÓ•§ ð°/, Õ)û䧱ϊþ1¬ÞäU÷(þ]Ð"?ÿ.,ò±iøISuÞxB3öØ?Ÿ›ñ÷ñLà5¶à;‚³ž0ä,ŠÓË®PŠ¿¬ue2?r†e}‹ã1ÆÐ|§!¬Úy©q|s¨ ŒheXÂ’$›k¡îKôs™4NßaOy«i¸Öz­×Uƒ›¥äÁ¡§']Onfw[˜ßtÌ Œªó9æ,b‚.Ü‚s­èÇŒDÆb1À›ÒžI‚OD6—XSWx Ÿ„Œ]B]DÇݰÀ£c°0²[5Íé·ÍávK¤é˜¡à€±¦. …Ò`§"³;z K’1`/Ëé·4^5}G-Ô|ÖêâÐv3yâcdcçš–Ì}þM#p 5d]]Oö 27I,´g÷Cã»C±¥ñÝ÷F#3b Ž#¥¦Ö4bÔÚèØ–·™ø@OÓšÄOd ±øfb#´ÍŽZ8n¢¸Ñâ80›6§Ã§ ‡ý½l›l¶§)¸=zXäû•ïø!(y1Y§kÜímËœÂè·a¼Sq4Ó =©­ºnÀ/pc̃½~3ÞJchîOó\Ù¸dùHÉŒ/꫺Éoª»‡gÆêBfl~læ Ôׇéü$«¾Œ¸ÞiëÔE8Š1KÅàÓ?zÈ„,”‹YÌ"¬J BÑïž¼i¨Ó1¹bsNpf΋†Ö½†NayUžÃPwçÜ)D6yìÐûü#›±ÕW€ÂD5‚•÷ Rœõ'WwŠÀÙ%æä11Hæ%‡ðš$ÇÞn bðƳTà¤ßïÊÚu’ÈùWÔ‹$´1ÁjÕF·Œ£5CAꀩ1œŒ¸Ÿ<=>.;Y©° KF”¦i:0”|lh€hU[Ìî¢ÁI}È(ø^×k«·¢©ìi˜|o‚XzP˲*C½-³ÙZQÝôóÅ8i7˜7nÈÊp ¨Æ‚ä›öÎÖbBžOÜ&xÔ¼+qo8¸nèWÿvÈ]XU†©ì x*)òž4øÆ»é.B‡”ÐŒ€€Ý?ùZRÛœQ€)U¶$:¬Ý4Ú+,r0+!Í£Vné¿zjÍ„v0 xâeÌGàÏF;¨ n—›ì-‚”` À “‘•‚àv½L]pÄÊ»¤Fî\$´TD¿èë:û¦ªòÅ?²æ“Š54/êý¬Ó ÄÝŒ¦0ošúÿ…ÆDù2LqÔ‚WÃ#þÆ:3®Ž*Ú`¼ðV> !y­m½zzÔ×å™lüa¡­ƒYÌcçQÜrÅdpº®H"’£3®PŒµLye¹b˜7‹ÅÀ¼$8üås!"Žyˆã)mûFƒ­jŸY$ 5Úr³‚ó×+m+EÇøì{Hÿ,¿:­?& ÷ñT 1Œ Hù§0ê_ƒ#QÙhrØž¤úí 9¸lÜ1ô]òòÔ§É1¤~Y|9gÏÒ|€u.€Ðœ©]Ñ)'¸tžvŽf†#”`ƒ`¶ðj ª›á¶;’С]IÉHBšT/€}Ɖ©Ý̼u RÛØ7 >´B”"ÿfÅï\<Þù\DÆž>ê2Ï1ö¤àÚ3ˆèË ª@\ÓEU›¾`¦jçw*ø0)_¯};EœËƒù» gB%¢¡„5fxØÃ8Ût¥ÍsžRœ9£ÈÁ0{pŽ])ÍéDÆ"qT:èDr/ÃÇœáÓ,ûÚ_ãIX<Ý7¥É¤ÕjéjnØš8 èåû}Uù¤þ'çnÞA¾%%Z¨ÆÈ‰=ãqÜv ¡ÈnzU Ð6FèRÊ´‹*ï:Öš_tá­¯ãl©¯i]Q…ÞŒÁÍwÍD›cò5¸¹âÒV~)w³ƦE<ˆ-{ŸôÄÝçú ƒ(1vÆNד݌×f—wÄÅ´€9MÀ†äÄ´çŠÌ8{£·9–Ñ/‡ŠìI kþé†d"‰µ6€ 1wÞ¬j¨ÓíuajHØÁl¹*û;;OCòÜ‹Ì8ãƒ{ñâÅ™ob¢!  zè¤l„nñ“,’ a®ä “Óâ2U¨ÌÆ©e¢86ŒµjÛŽGUœXÓҦˆ¢âxru‡Ã­îmíæÇ›˜ž>t8hÿ¥Í_haý!4Ÿè”fƒàØ[,qß°ÚÑSS ¢§¦¦Úozp€2XjnЬª¥9’Ùû2È¢È;LJšN§7‡ê¨Š‰ÅsÊó Ö>bgZÉ6ÓÝŨ½Ãry—tö¡OÉÑK [*ʪæÔÚJM%×[<€ÊÝW^ç1a¦³«<©ÌU~.…Y«IÅa¨>ìnLn m[<ÝÙUfŽ‹‡¼¥‹`åüih.Nª†û|‹Þ;÷¨°D’¨(xi> ˬ1ªLô™ gs› †¿V"ffGãq¸º){jC¸W ^‰ ¾õ Ö'%ⱈ{ˆxüw)Ðüô˜ªgÐ0ר µÂ›não°5–ë±—ƒ:lw«|¾IAPÊ䃒Ej€O¼A=Ó/Ba#HZù®<Càsï•xèògÞ÷˱lî’7‰žd—cˆn‰Aù¦w͉®Z]“‘•®ÌEìü+3ú ‚ÌŽJ›—^õÍjO·¸tá#ω"S×Ï}œˆ ›²)wA„Z\ eVìO•àü›!ÝŒ 3Ÿ"LjE<œñ’Ò¿ôT’Ä«“iœ=Šˆo+Ù4¤ù¨øÜ ?-5~ÖàªãÒÞ¨40Ô(;Û©š[¼·¥ÎDFØ='#HÒñË¿yó=ð Gç™Á«xúíÁÿ¼²d"s‚÷Rp1̳Q¥âg&¶L-Ì–‰Ôé·`ݶܠ÷Ð5e’ä÷˜P8M–BqF—£ËZ˜F3:£‰Jgr§ý™Ø„C›š4éCg“pÙû”éDS͘ÆrÖ6šž~ çÙ°2{þ17œ¥òÁ‘€rúôŠ*—S¸û¶Ç{êU”¤³p$›|¹e&˜Œ À+{í‚AØLmÚÓdm¬]û@1 }>@gJLi|¿ü“d8kÑø>ró†\>˜„n?®æIz‰È¾ò3çьҿLåÌb–*ùp*gN„¾7{0p…~ÅØ ÜÿY]˜…&£ñê{¿¬cž>–wOR€;….+¿ecëœ]O@ V2*ŸÜä˜á™òÂëÜ|±YA÷i><‚ÑÓì8Š‚ù-&^?)–à÷ù Ϧ*4æ­RˆŸ£ýJÚ&@Yû^__ýa`²A endstream endobj 172 0 obj << /Length 2501 /Filter /FlateDecode >> stream xÚ½œ[sÛ6Çßý)؇våvŒâ²3Ý4o3ÍeïSÓF¦îÈ”"ÉM3Ó¿ P` <œN&“ئÏÿÿ.„ø)cÙ­ý{™5µTaˆ¢&7Y.¡Rç2ÛTÙ"ûϵÒìòì§ë³ï_pžRʲëE–„)–mˆÙõMö묩×üü·ë—öJ‘¤Ð\·W2]IfÑ«²¹/—ç\BÍžþûÉÛëçWöKEgšœ_(Mgo¯Î%½¹¼zòêÕϯ/ÛgϯÏ>±}ºì¨-ˆ–2›ßýúÍnìÏ^f”ˆ"Ï>ﯼˤâDíï-³wgÇöœú÷¨ÁTAh!2mlúÜ@"‚q’SÓ‰D‚hE„áP{9#…RchFh®FÄ8˜Ö³ÂºEu›On¯+޼YW›r·Ú<ìgnÃ) ÃÒ¼Å@³¾ô“ív5¯Ë]}ÎÕì÷z÷%’ƒQ$·Ú“ä3’Ë¢ŸÃ³j;ßÔë]½jªKmÛZ‹1Pû}FÌ$‹JÊ ‹É1ŽE¥‰¦ê`F½°¥Àä³ÝǪ9ü¯Zn+€Ì‘‰DÉ ¹ªo?î§Ðõ4†º?/.Ú¶_웽¯ŠóU³Ýmîç;€N„¥ŽN ,iáÐVr ,)‰vÝúã{n €ÑHÙ(Fì/Õ‚h UQ ú✩Ùjswà§)ïªïo l¹¼wL­Ëzà„0Òá„AÁãÄí(OsNÉ1ö=,MlÌíTÂuñŸ0ÊÐ4…¬§©'»º­çû)›%gqƒpÌqƒñÜsc»Ž)ã&9P†8%Fºò›olFjF± 4¨™BÕSª†Ð”Í @ Â/G ÆqO µS«Ym’cÔМ˜ÜÝÿ¨AäÝ102ï(aÞ/î›ù~^í&2wëÕ¶>~ã=Ut[U‡%#“a͵Q8~ÍøGdU)‰ä¹¿ÀN ˆvªñCÜ­성B Ñ…@ <@UÂ%®l¥Ç8=Ü©B“œ»50ÚÔŒ–­ž&\·&‘uÌödªwŸk?÷†F;ŒalP–{llxŽ«[é1Nï,X$¬?nxÏÈ™@¶#'” g YON(Û#§jçàÌ—÷ÛÃÞFûåc BØé ÂᡲÙ¬EÉ1N†ÊpR0wƒS¨±šQ¢BÍ¢¦õD…²=¢ÀIÆ1Ç Æó€&ûSJi n*=Ÿ¦¿ð#@ßHÑ(}¡è}SÈzúBÙçŸîý~·ÐCøåÐÃ8î©iŸ\pÜæSz €™ëã¾#¿‚ AäÝ02ï(AÞ¯W;7˜=’D[ = BX3¢ä ®MTW? ™w,ŒÌ<ÊB˜ùÛUÝìªMˆ9 0fz 8#Œ!g3É1 ¸$ÆWDÞ#óŽâpÌ»C“Z&írT`í¨ v¢%‘s•v·CãÈJ €eóRûµ—d[ãT£S•Pu`ª2ª‡±¯ºÝ:î>–ÀS\„]<„ßÙn6PÜD%= m‘¡*&wÏÀØÜ£„¹ÿ¿ÔN©L˜öA¹ë i7$n”ã4!2ω]Yž£bRï™z ^ê—›ªì-¸P`Úá@À˜èA0vü)¥"9‚ÑDæìT*¹w$ŒÌ=JB˜ûCFU D$ƒHÚGµ¨yŒl×ýHÐRCœiI7Ç! žËŒTŽÍezÊð\f UÏæÕ={Ûõ8ôƒðÌч0Ýs#sk“ Gq¬9]…®éwŒL? B˜þáÚ£H@4á€ñ1`AäYˆ„&\àʦǀÉY~pä;€¤‘šÑ"j¡)d=|¡ì“››>‹qÊA‡ñÚóÂ%áÈxz €nH®Ýyø €DÞù#óŽšæýîþÃnSÎüG´ÀùñÎûßnp†ó?9à?S¶wÜMô-àÿHÍh½5êŲ™PöÕýrW¯—õ¼ á—£㸧¦Ý7ÐȪ‘cß•ŒEMH*ìuîîƒUˆ¼;ÆåG Ìû™ûÇÑÆ<€h÷®l¤Ç8]6Da¯+ܽôõi0y{Ææ —÷UuWÖÍ_W—‹n‰}ó(40; ²Õ£Ñn(\mH ‘SB¥[| 1R36¢ô4áeYOSO6<@ÜìSÝž«ÙÀø‚qÏ1„ñß3dôŠ"ËKrŒÓg9…ÎmÌnCE‡ò0©wLŒK=ÎD˜ú›¦úǹR³íñ@ñ²º«`mŒic¦Â.ì•Ä퓤NJŠÒ„ w§}¬k1‰w8ŒL<ŠC˜øËU=x’\¢y1tÜ„ÉÕɃä>HŽé,džϚ¤Dáž%‡J”„wÿ^+bDÚh£ÒŽs¦ý¬^´ó—Eµ©šy5DœvzÊ“>º0ž¸ñæ€CÀâyã9ÑYÛ’cµMpÂ9Ü‚ÁäÝ72ï(raÞÿmÊÍ—wus¿@4Ã1€1ÐCÀ,Ǹ3wÉ!8%\›Á][DÖ㲎f°^‚þoƒ³awŸJb8²$Çü§9Ì?¨¶•Úaö:ÑÇ—’쾬])ÿK<[»J/ÅKˆ>è`ÙQšÂ>¸>Ïé¬mãaÞ\nwá§TÖ›j;°4G4ÎQ†AÄaÆ NŒAQ–â4d¼ÐÄNGÝV/°×;R3¶0ïi¼¢b YÇR_¶ì>’²[¹ µjçGŸ+àƒMïaÌ÷üä”ä wÌ!=@Png‚ÔÝ¢?!òîh™w‡0ï_j_Lž¾yýnpr¬l‹Äß39Æt›cŒ‡Nç$G®ÇÒcÌS‘7œHpv».çÀÛuÆêFKW¨ ï)N"ëY eûŸG/×x`…±ÏA„ÀCÔ~B yh8=P¹4%Ò¼ý'ÐHÍ(@¡æ@SÈz€z²]±ktì'OƒÏö>eSÅC`â`Å€æa•’ÈóËé1XÛÃMþ0`©…5Ô€u Yk(ûtYúñëÍêÕ|7Ī­•FëV;…ª¤¨" q¨b0 P5Iggû/Ä콡(öï,ávÕ˜ ,¼ÊËÊ¿á’ÿYgÊö¯ïÕG½EsåÞÙ¸õÕÈŸ`î¿®þGóMUnëæÖ£PÍ«›ýFfkΩafÌPb'þÙE¡ˆ4Ê¿,q^Ý}ðœ²ýéÊLÚ˜#Bõb[þèSÔ½ endstream endobj 176 0 obj << /Length 3291 /Filter /FlateDecode >> stream xÚ¥Zësã¶ÿî¿BÍLsT"1ă/·÷árM/—É«9÷CÇçéÐd±‘HIÅçNþøîàC†lç:™‹–Àb,v»XøÃLÌnàß›Y5‹à¿8OÃ8J³t–é8Œt’éYcf›Ù?Î"`Œfoξ¾8ûêïRÍò0Od2»ØÌbj¥gi’Âïìb=» ^ûêç‹o~™/eI8_ÆIüüË\GÁOo~yõÃo|3¿ºø$ÉYæi$P’ŽtˆdÄRªòVZ®ñ|ÖkÇôCQв}sqöáLÐFİ*&ZÏVû³Ë«h¶†¾ïfQ¨òlvGœû™Že˜ä8n7{wöØNA–Ê“Yª¢0Ësžÿ_s!¢ >Ì—*ÖÁª¨PÁ¡5ÜÒÝßšåªh»–¿kËИbׂf)‚o빌ƒ;ƒÿÿm.âÀ4¨ªpfQÐm ¶ÝóøÆ,q³³%-k¶"Ìã˜×²/J”© ÑËë²CZï£HÕEWV7ü}[—U‡²EB²©±)ªÃcË–›Úr»»gzµ+ooÍ:¤©£é¬¯as,\Âvkß¹j:{b‡ª-o*³ÆýäA»­›ùvÛyŽ:NB¤nàmS¯+ÓòLþŒv*ûrÇݶ†3 U‰H„Bˆé²7M±êʺãYÊÔR4SÛ¢eâÚ˜Š©ÖPŸÂýQÃMS/Ì‚¢ZsÛݶ\m}"Tk:?ü_ï̾å“v6&C ˜pdïq–°½#q×”a’Íõc±6«rÚÅÆê°¿«æAuÕvE…Ÿ *:yŽNÞgÞÑÇÍÆc$R…y!3€çóHI˜,9TÚ KÂ$”s0(EZ]¬j0yó‘?Ðs=Ó¡&óP i­Ÿ†ÐŽa; v:Á5ˆ 9hZn.ÃDSÀ1£Éç`ü¿ÎA™¦[mKô4ìF§3{Su'¼íb@•±T$nLešbGþªr°¿jmY6d@4æ¶1-Hfg…ÆšUWã"qX köÙk]7`%E‡î“‰ò6b‘ƒÝ’;ëšfÁÞLc»7]¹ZàÇA[»aÆ7•5~<‚zcoasè¬-—öwWîË^QccÍ<‡£r56=•K«>hGóíÐÙ©µåÆîO§æF6`ÛcªÓ ¼Úî€ck)„c O>ÆM×;öÔ[n)¸KȆç½íç°Í}á5‰Á%e,Ù%‘°.VØÔ‡†)TºhÖü5œ³ºÉ*d,Vãȃê2J çÎó¾ôø à>,Ò2,<2 Ɉz†¥Ï¹A‚~LÂRŠ,ÌR5UÉQ* ‚Ô#ÎÃWÞ¥H‘8Љ@ü—è ek–]½¼µau,Oª-¡Ö}Lû·R@&Ï<gÀUÑÜ3Y‘qßÌã€Üƒ{ÆÛº‡.»rH,Øl³4LåQ<<±\HyDúPæQöl+Á c|SjœZÁú9µ‚(hgÈÍò¬—òò¥/q”a¬{¨+Kˆ(ƒ3pø•˜cí —`Gï¡õzFÉIL…õA öåGÛ2F"làCA¦zˆÁ’$È€Ç r·„"}}4nuÅDÛ1Eù&“”Ã`çdMÐÀkâ0 Aë8ø'¡Hnµ#ó$تÕÒ‡C Рa6dq/¨æaœö¾Up:’"pó^J¹÷0çå–…¶ A‚wØaºg» ÷Võ@ñÎ1²ì‹›Òú¦Cò©÷×÷{œ°Ä9àCN¹FœæƒO þ›@d m›é/ùGóX+ý{2e÷èy"UNÊa *¤“êØõ)¡ “cîñ’Ý"…ô ‡óxæpåËÐ"›œ%Cr¦$gÛÏàõéôLØ `4hšzBFËñ_Úô•â¿ä„”z[Hav–¡ŸÜö¹ ò Éy0dY½hûp¨!ƒ ñR•Œ}ØØg‡ã¶²×lã~#Íex—àw’Ÿ Üq¨’ÞMÞK-> Ö%  ñAnª(JФ¤©7>dÉòÒ1R?[ÊK¿ˆÑnØ´QÍ4iy-ß ó©µ@¦rØþêÝë·o¹ Òi8Ä8¶p¾La™Ÿ *Ú¸)[P‡¦ÂöŒŒ>i=Àg{-Ê:nŒ_’#áäo˜,»ƒy"ÎP:M1™\Rÿð¤HYÑHö¢m~]O† » ­,SXi?Ï×HpŸ`‡É\ˆÂÆÞÂ×kþ1íª¸5­e­ù·¿±›Wuµäû&ìOõY!z ʪñÅ«ShLâSh3o2ù ¹ý÷º¼ÁÚ2}´cìÈÎý×—“îÏ?Ÿ|ºÞù Ÿ1TænWVæh5ï…ÒÕ‹ÇP~t×Ç(]×;ÃW˜çb<Íõpa£¦=cÜÇD§±#܇¢õ¦Y(†Ü¤ƒtâà[d(邞ÈbE!›¹7ݵ'¤Å¹šÔ5N\v¾v;UY<øXËß|Å‚+t»ÄO„$å|F‘'Œ’^pJzýyeÂËn#8€ Èpe¶ú -Vz:òHìßÕ7åŠ'JÇ·MüÙ¬€G/yÒßsþtây|Ï€2ùÜÁ¼U"w  mäÜÛr·ë)š¹È‚›ÃžA Z(aÏýT+³¶«O WGu“×?ýø—Ë9²ŠDðýÛw?s ¸iŠý.N~°±+¸zÚ27¹$–Í;³w-kn*ø›v/±ÓòbºÚšªåHµ5,çqë)†/¤ìã™ì'‡¡ëµ±")»¸ÚNÕy ¸„ŒZ2Ðc¥·Âç?.ØU¥úâMªC=ã±TÙ ?K 3µ÷UW`ñG+.Ýc£5^gMdQiðÊâ*.=náÈÆ Š=`_T©‡Ö¢·PËF¥}dݵd1r\Ç®ë{'q¿/=QàãŠ÷™tånàX̱idûáÀæ—£úûù'ÀªçྈºòÊ·`ê\è ƒê$Š |R,AyVØÄda²…P ¡¯¬WyìÄ—Å—r¡úêay zpšsuNËò¬úR^_>| í,Ów/¦@+%¤VMT6TÚ™¿ÖT6^cùìPîÖÃù´Ó“ŠñðÁØÄ}}ø”s¼a(¢ǰ /]Ä‹d‘.²E¾@O˜Nå `pºÈýŽ,¢EÃŒ‚f˜-…Yc˜]Á*Ä•?=Â÷}:u¬Ì[áÆ²9ìŽT6¾¸t@Ÿßs¼ÜFÓd ™éoèÐŒƒu²ò¬³p÷€ãyò8¸}ÚÝ=”Ñ+t-–b±”‹¥šˆy\ÇoûñS‹³K mÉ"”ŒO1¤d («k|v¦`˜'¬ó“ï6èEïŒõv¡Ç/§)|ë˽%Z-û»ofÖ—*÷ŠâôUæ.ˆŸRÙ3ø†…å~W²Z2Méñíª1ph‡¿ Ø•ÆùJU¶Ÿn¶v~>­‡-­ÀqþeÒõçÉsŒ3öçÑÌ­aš ‰uJe1‘Ùr–JHE*ËC¥ú ø7³2ü'4¸9‰t"ù›‹³ÿݵ endstream endobj 179 0 obj << /Length 3192 /Filter /FlateDecode >> stream xÚ­ZësÛÆÿ®¿ãIÇdC ¸;<ÓºŽÚ&®3q›:šÎtd}€È# #©}wo÷@€lÙÉxä;ìî±Ïß.øÁÎþ^9•ãÿ0½Ð“ØI‚Ðóƒ( œF;[ç_>LôW¹ºøÃ÷R:±—ƾp®¶N’z"NÅ^ œ«s½¨òƒ\Þ\ý3•“zi$#œ)`õ0€e̤7YuÌŠ¥+£T…‹¿þýò§«ïÞÂcè/"o醑¿øéí2ðÿ|õöòÍ›×ÿx…K^|wuñáB˜ãŠÓÞÊ‹‚ÀY—×7¾³±ßSiâÜ™™¥„Ò‹R|¯p~¾8¿Ïð”vMå{IšÒY¯öy‹G‹ëúXl°›,n5‘1%kùÖáp=¸5ôøÖ—EAsïéåö¸^Šp±'b·Ï:¢ßÁn›W´rW޼ våkáy7û+顲³²jƒsWúð¶t\!¼4 iðžØO›ú 'ûEW¢Ta/º¢ùöô¸BOÒÔ)ò–Çê­]]Âê¸ì`(Õ±¼ÕMëña‹$ð?K!`…ãÒ b¹XgvÄbŸ-¥ÏkÑŒÀà Ӻ4€»cÛê2_×E]¹­>dMÖi拹ãx× §ù;ß—p¸¥‰Ôp:ÉBgë=‘êJÉœ )·LÐ9p¡á©ÙéJÞucöôÇÛ½óC¿Èÿ»È£ÇR—Ê‹ýвDùþâO.µC%Ê+L½8î•v`aazÕ5õæ¸Î«b< Ò+#;¢ý‚ý¬É³ÛBÓ0ÜM”$‚Ñ⇬ët<UlîÒj¾††' ¼àt‰Ç'†aÛ ‘—ÒzµY7‚Mvš(*ÁÛ¬ðú)žË g4vhô&_ƒlO‡ùcÝ0ñØóÜ$¯¿£FRóâµþ9­‚tq·ÏQU°‹ªTtF™”µ¤÷ZÑÒsWsk'zÛãy—ÑQ­aåYЄ&ÿ¼hp×`¼Y¨ë}V!Oq¬¬MÔ&;ä›âa…hä*ñmM#Ûš2^â>+ÝYû9úã»­Óµí™À¤ð(94”×ýŠXý@œÄî7f1‡w˜’ÖÐÔÍy…³±{»é:·¤9…àSˆ^×üÅ.gèŠèskãT9³„/ÑÓÕ>eê ^ê«1/OŽH䢰SiôÊØ#ÿlëìf¯«6¯«–hF¡e¥ÑôdÔdNè¸LAºAj¹ÉºŒzm××ݱÑàê]çú§¡>õQôéKµæÚxt“)z&/¶¨ä÷C9 è½Z™vB‡„o…uϵ«.ü0óÞ„„¬. Ï}—2ðLÆ'æY——ºu;tÁ³Ö=²ˆXÈÐ9¶š:ì™Ý2ëÖ{ãñ•ø˜‹ò|ù)'Œœ4îSWv¿ïLNšX'BŠg¼3ú©EQ×ì‹Ú`Ñ¢´ÀÐ pÄF^ &!A:¹L|k)YÉÈDP¹(½ÊMÄß_«€ón‹»é5fÎAüôÀ• û¿ÒuÍùOûº$ãK_"ÿýµUùˆ’+DîŒîr]­5†)Ÿá¹¯Ìä=à¯5ÇC —Ù €BÂ]“ƒâV³®–/êVo8ü1šÜÔGƒW°ÿáXwºýi>Ën×ÏÆQÿúyö|õüþÖϧÄ'œv¿2eË”i¼Øh„‘œQÞÑØ¦™ ¸ËªŽ¦3„À}ÖR‡6 ¶¨ås‚`]"„0E¡–š1´CJEÖ=Ô†n‰èº#‚Aõ*J‡ #¡§ØÂv;Vî”Qm`ÆÚÀ ™„Ÿe [j¸o}Ø/ ZDZº*ØjðéÀ3O€l"Tž=ŽüjB‰—öy Ä5dø=ø€ Pƒ°“Zà FD<_0¾Â{„¯ýñX‰žÚ3>ð0Ÿ¶/F*]o;›C³oûÔ«Õc“¨]^W§„̦Z°X*Ç(~ ±±Ï ©Ô@ccŠM˜_Ê`¾‡¬OÅQÓÈ!ËšÊrjìã[‹Ò•Ú½x'ãxêÞÒ“¢ŸUÀù[‘¥{äyXi–a¸ð>GfVd ú#±?³=ÿ×ÏpÎ3ë^å”+8S„˨y–WȬà$!•FµÔͦÁòŽºêŠz>’‹ƒ†Kz«å—0lkÁZ ´I•š§zÊëÛ÷zm…?á-.ÏSv㑱þ¨Ë¬6õ9¶Q-³æ´u|‚óY…N§ž c[ÍX¡›¤¨WЗ+u3Ã`‘xBò[oò{ò @€‡ƒ1èšC›QÃÃ9ºÚðÃShMUZ¸êöØö«‘Ç‚N»7  ¶š7}L¡M1þ«óÞxä¨_cvÁìÁØL»Ã<”|;<™íax×Ôǃ]Ç4­îhÈäw@Øä d ÿAâíjt¶ÈºßÞnO˜r]þÑv:ÛpÕfú8Åä3𠬬1±øìzÒÄ Ò3Gû#c„HFˆü6 HÎ &“A˜ÈöX‘T3ü~ †D×ÌGéÌ'¬MöÐ> eÇeÇeÇ =¡Ã)•ÀêÝÆfBøhÜVgŽÇø{Ê! ×ªGß/§¹}šÀ5ÁÉ,L[vˆ­ˆU§è†%É1ˆ*t©+6ømS—#U0ŸbGïNŽâ©qÑXkÒÛ8Ú59З¶¤2r²bÊИì¥6z ÀÙ<.ú‹A”“)G9èYb‡Ð•L¬ËÒû:çY'1âÓœUèõź¯¿ž<–òÓ±ÍÖõù~hÝÆiðÙçTÇg…¸®Þiª<š´ºÚ¸]íBã}ލâ QÁ5(«pÝœ…E3sÅC—BòÈ¢,ÖÀYTdë_±HØÛä[t‚[Ý`nAÓfûyŒcýS9Üu§@éÚ¸„KR–š‚Cé1‡ð’³‚a9È\™ódYí¸ü]W*ã««j#¹Ï/ci™Ú Äu?-­x•¬Ò¾b¸¡æ´ &öY·ÿmøðú•-ïoÕúä0ôÎ눥þ=¿b²>É>:ŒNðA-ÞÄ}L¹pK³-ö0oœxå ôÉ篸 %ŒSe;8K ¹ðj†®:Ÿ‘q‹ŸJÝ'C!doT;åW&s!^gèI-¯¬ð9“ÅR+©Ê‚Qrbi:±€„}Ð%bVY[" .ƒ›O|hðCç}’ñN¨`²Ü(B@¸ÑØ÷˜R{VÞn24Ÿß¨Ì7Tñ2;œjx´ûQõîëAqãq¥×~[ì¸ ?Ûc‰”1€H#.§"‰îÞÕ ‰efU©å±èr ˆÔw¤Ø‹³zyÍã’äÐî¬îl;öÊ3þâSL~˜fòµô¼ð E*+ƒÛxºè䥩š‚ŒX¦S—€V4= 49 â¹,@—T}½àÛ©àà{q0Î@û4Ó€Ëae Vâ¥çŸY²9[×ø¡pg"ÇHw¦RêØ“~o¿ÛIûÑÙ§áóU"qý‡¸Ý íYö$eƒŒEAŸŒå¹=)Üî‘ùZ“ÅQžø-5»Ó$ù±ðžÂW|¾ò²ÏLž»®(sTzÊ.è1£¦¨Í÷S·­ ÚŸ ~=Ãà­¿þégêÑ&bGÿí´MˆD¬ øËNø_ƒdÐö’èdL›w"½HöYÅ/ù¡}ü³‹PÄ`‰#Uh¾Ò~äwžN¿ºxüë‘Púæ¤f)i5¡¿ý#/¦^}<¸Åd7ÅŠŠ9YW'ÛØ!Ø’ U-‰FÁ<sz&X>†ðç*_]Mr4RÀ‚M¾ž¹š„ zJ93W"5?ÆÀ¶¿%=Ò7Ô 0-–¦¨T"T4“Æ»IâÅRãõ¾À ål:B\Gù÷KS_ Æ=c»^çJ4áÉø4h÷9'þÎ<¡•ENNh¾&šž>We…O°v¡;>Õ^ ³á¡¬s°`^)/Rg¥P‡|s¥‰ù¸T"Ôôcûà ò÷;˜xhêÛìÖTíúz’?1Ì 6Ô´¶x®`§ðXâIûŠÁlþµ¶40–@<0×jÞ=ǨÔÒÓ­&f6ï¸íöM}Üí탦Î>ß!öíË$g'ûµÇ“ Âô“JÇÓ‘ÒÓtÝ1¨!è”?‘Hšù7½Öô“T>é S*v‚@‚f÷F¤âÑZàÁþ‘6‰B endstream endobj 182 0 obj << /Length 3094 /Filter /FlateDecode >> stream xÚÍZë·ÿ~ÅÆ’U*Ñ|íË@P¸il'¨[7¹¢(œû°’¨ÓæV»Ê>|¹þõáp_ÒêîjhaØ‘\’3üÍ“þÕÞ-ü}ë‡?A±€GqäÅ:`\‡±ö*ãí¼¿_q˜È½·Wº¾zùF*/aI(CïzçŠi¥½(Œ õ®·ÞGÿÛw¯?\÷ãb%î‡l± Bîøq¡¹ÿ··?¾~ÿþû¿¾]Ü\ÿ+I/bIÄ®¤¹fHrZ¥ÈŽÒÍï'àŒî&½O‹6ÍqÚÕw×W¿^ ˈN¥X¨µ·9\}¼áÞÆ~ð8SIìÝÛ™O’… ~—{?]p KÍ”å˜UÅYœ$t€E‹•àœûÉê¦&žÓbKDµ±o6mUge1à ÷VR2­cZìM[l˜ ­´ˆücUÞVéá·ØûyZܶ魩i|[RwQ6Ô±O’ûŸ"ð }ZÈÀO«l…»ã~B°$h¿t›z GpæºÎn‹ƒ)`)É…_VÔf©R<Ü£L”ÿ¯…€ÙeK£›´@>ßì3ƒ{u›ãh³wDÌÜÌ?Ù™M'¹¶¶¼"ùK[7Dås’í¤ÊìºV¤°¶d<´öõÞT¸}¤K(¿¹_àá©÷fu×ee7€ÎrGm¿>Í(‘+b­¢ öP  ÜÊžbÕY é?s.+ËIÄý¬¦v“æùBøfë0Œª÷!=Qç¸QšÅaÒÍ{§@ÙÀÚaâ;ÂRyf¶ô£)iª[£“@VqlWžÞ’CE,I<ЦԠ? G¬nÛ ÝÞ0¡°˜¸feíý>³'Ò©ÜÌ¢Õ8ݧkc ¢š*-ê]YÌÖ"¢×ã®}ùFGgš§’°õbŽwµÓåz¹¹¡ß|ã:»Ñt9½>ù ž_šnËŒÂÝ)@ Ù”m¥:\Ú^À%Q(wÁ»ñv±E<Í‚IÄhíz¤ìÊ|;(3©ô€( )b$Á‰Ñ ÌÓe"emÓV"LÅ»1†½n:êunˆ&›”·îçúÚ_ʬ°øÁÇ4«ÜºÀû îÆ%„¦¼5`m*úuŸ5{g/¨éÄØˆ¸ÑºI+‡¬þhŸ"”n5‚[ºCQŒõ(éà… :!O„ý3x:jÆ]ë¡«[t<¼úÅøï º'Åõ¦<ÉÙ‹‡v‚¾±GO4 yÔƒo¡Àö¢ˆf¼zlwt3S·pÖ¸má+×ÕtGqøª=R[e·ûÆ™1ž áñT˜M¹ÊÍ®A£Íuï”3’ °Ztmš—·eëºGèQâ2·V×T|Ên>ÇnȨŸIVÎ !áôÜŽ}ÇdVãÞ’Æ–yÛŒ­€A+k’c@­›¸6›´­ ý 3; „õ‹éþHœ¿Ñ9òžÕÝ’Ü^ C_ø‡Öšp ê¼´vß*$Ì Ã}ÙæŽ^7H1 üSf[ã³ KˆKfÝÄ.lä î@Ðj  Ÿ &“Dv÷9c²5è´­-ßYçb¬°È^Û´ÚÑIG­«´zp&§tÆè¡l_=ǘ€´¯3)/-çp?,‚XÖö=XŒÐõŸù±üµÃ@æñ´ò“q–‹Ø±T§Jv“•€Pº‹z¿îw9úQ,âÒÁ.Ú¼ÎÙÞ,»™S'|3‡†o¦«£ÕÚoÝ÷%–<Æhz“§?Ó:þT.O®Û`ø[z8æfÙ€ˆÃ¾sÍœ‘!ã°³ª›“gw¨”¦ƒhV?lBk04É…(å‘nüä ¿‚±à4(RK½ –á2ZÆ7—•q,µG=AÄ¢@ýÿ¨d„ÖØ )º ’ê‚JªG¢‚©râ¢Úã™.gÔ0~|Këès Ãì2àˆ¢àè²)@[ý„âŸÛQœó‰";ÇçïhBäSÆÄ¦)¿³1±‘Öå3Ù”ÿµ]y^ 6Q¿Ï·.ŠÁ½^ŠŽ{ÓÂ/›\Øiš¶(ÁpD SA4„¬ïS° ‡´É0\{X@D±œLÄá˜ú™ªTÓH!éâ' eå¨uZg"ËãP:ÑJ'”i'ç‘•S’È¿¯²ÆÌÖȘ”Oø‡˜é°¥3·`cªCM$åS§ C܆ϒDÀdØŸa‰Át2 5a&ÀÎWXkg*¢°Çö^I2_M¤Ö{Ç#ó<, â'¤°€÷géLo&’Ø•ÎXý£€¬½n*HØ­gâѤnÄãÓºLèŠY<êŠg1EÂÐá&>Я=ù3#~V^r¼·ÅÖTÖûáM‰_¥”C&2¨ïljÄAÇçmI[œC)ŽäJJE6KÂÕ³á{\õÃñ®HÉ:S®˜¢é±¿o¾ZL ’hJW¥ |ÊZ`0¥ß›ò°ÎŠÔedÐ1{Ù"”LŠàI]ª¯Ž8Ïwºh†TÏ´ýZÙ®+¡€ºD'Ü÷–Ûf7ëÜÅ'€‡ój¦UŠ´D©”ù]Öœ—¼À[D‰‚*#ãÔ¼Ñ*oªéYV°Ü®„&ʹòæ§<ƒƒŽzkêЀ2ÔtT´exS¶‹Ê«8t(ÑM"Õõ4] 5 ­ëËkˆîTH•×Õ±*7¦¦j1vv± –dÃ@¢¼68d«¿Ý‡Æ-’s îõ"æ¶*“’Й"ÂV< =¬‰R léØÿvo6wÔGµ ê²­6޶‰­ѸÊÁiÀ¶Å,Fž>;À\¥™£îÅ!î^Ò;äíCÃðXpŽb÷ÒÐÁéÒã Xâ°Çz§¢hV&O*ä½–ÓpVÏA!bч9w¶Âu2ö'1¸«}Út+».[ 1ÈÓ‡ÚÙ³Dž–«É Q!¯7ÒV•°ÍK[¤õP!CŽÕ~YuÑGþ´n6ƒîI v.hÉÁ²6ÅTUyÁ“Ѽ©'Ãi*LêIÙR%}±2€Ë6KcϪ±"ž7î[:ŸµÇ›Ö}­9•|´«9^(‘Ëc÷4sì†\››®jzŸ[*ø` …B¯óSùêù5TÝùBRø÷jH|–|qv?m¾xqñM —ÿ¼Ã‹Õ\ø>ñQY.!m$K3HZÇ m 2¯m†”ç4Šb%в&¤ÒÂ} :ç»Ë=ª¨kë­$Þ¹bØà(«ÿJ4ÒÝPš×.±úòËsñä)lY˜GåãVú'>ÅZ&W§úb¨<Úcp‡`|Nò{¨Y­=Öjá#Àf.‘ ú©wߘñ!`¹+H¦5±îlÔ€çÎËòŽŒöw ¨â,Ô'Á6ï* Úé ¿ª³­íÓó1E,ý>‚K˜9¦ûC2c¸G¿ ­Å·?× WNeË¡3;&,Râ³.!DësyÉ%"žz»ºtÅ•Ò8·É”mžbbRn¡R{/2öŠþQÈå9ˆ÷¥Ëž7{ÀgöÅ —þq’/ö9¢|Ú\“ª‹‡æ@žsç&€£nªÍWà€fí¸e‰îµÎ®õøkåèÍÔÛ'ï õø™tÈ  ¢Þ­{Z%cL+TfG©æüWcÎfeÙ}$ÊÕ©Éj­Éƒ¡ôŽÒ[ìÆwî‘ÞïMASlL‹]®d'C˜º¸—þxˆÝì»ïDŽCq€dáܶý›_LùA@o"£Uè—}a ®Íôìÿ> @¨Hî‘8EÆ–ºÛ¢Ér")È‹ôø- W0Æ>QÙ©[múšxºýULË;Ÿå†â V?Æ*µ.³âî‹CÝJö¥¯‰2ɧýÆëÛð“6éHLäœBawÝn0Hßµ} ÆZåî~“N'€Ý^"]8y*°S¼S½Ë*ë‡óD ²ŽgW5úÈw6_E’…qt'.ÿ`ŸÐlú tAÒ!m6ûù÷“ˆüuŸáS8‡L"#Í Zñ>™rÝ)5EzÀj ’|˜h« 8hóæÑä£=œÌŠYó RºuaËóð‰5ZªÁÁºLÄ**¶Ë+p`jˆ†ÿl6æ°î.OrMÖ‚|ö?„ ¨£ endstream endobj 185 0 obj << /Length 3170 /Filter /FlateDecode >> stream xÚÕ]sܶ†ïõ+x)ÍT(¾€½KÛÄmf’¦®î’\¬w)këý2¹Šíþú.A\a±Ž|ïEE*ÅU÷NÑK aNoúa±{^lîDyû—¿}óÓ÷oáÛ’Þ*rw_*zûÓÛ;Ioÿñæí7?üð÷ßt!o¾}¸ùxÃNé²±mA””År{óó¯´XÁϾ/(•)>Þ¹-dɉªºßÛÿº?Ï¥×± V ¢™*4㤬ÊP#‚ Rª±OJ‰”,ÞÎHU–ž%Ѵʈы6“B1¢L—$”ë^‘Ûúå5æœA³æUšå\¿lö¯u»lÖ‡ãz¿{ÙºÔ%á€!æÂI­ ×yñG¹ä8 ”1„Â]†¡ =ÆË[w n ¢´ìåXlº›R›ÛÍer÷±0o|·ê- Ï¾8>Õýõ¦ÞÖ»cÛ·ì_7ëöh­föɨ&B©Ák67’„»Ÿ÷ïkh¨¹ÌF²?œì­‡NrŒ:º‚¼ªA½;VÞ~¹ŽOf^|¦ ì›W¢‡`æéA¨æèA)oéQ’04žäz h€Î»¿ŒËýn¹8^‡'³}/<Óöÿ½_ï,>:^ðbŠq±è(Á¬èPúpŽ´ŒäÑ!¦!O}Õì½ä»ëÊg&áUÞ“ÄÔ/~¡”7^s€«*áŠØ{çñE*ø û†¹ñ<6ûmÐz´„ef<àBˆêàBaá’P)¤£$ÇÀ%1¥uýô´ÞÔ=Zˆe¦âEì<•^ø>¡—ÊÈKhÇÕ£,í×+­#jžë'}'(-'ÜÁpŸôN#¦²÷}'èíçcsÇÀû—Çh?ÊÌÇ Ë<(£ Ÿ>—±zñP#_iX´]õ¡H)xŒ!u`¡ °`1ED©p`%Ç€ÅàÒ!]/²9ÖM¼ÿdfâEjš‰«ˆ_¦aelñû8ÔÜàkË'Ÿ¯QÈB]õ5=¼ãi¿Yµîz;îPÌXî(ôÔihÉ1ÜÁˆ·2Ö@;Cƒë¸™ƒ×FT×™)yœ¥é„Gݦ~<Þ÷÷Íúý“5ÉOë£?t¥ô«Ý„gH¨ˆÑŽÑþ\†WhYq(%qƘã2 e¥…®e(‹¶ÆÜ\|dÎrÙ¬?t¿¯&cšá˜ï*Ïܶ„êÍññ‡žÈwwœÞ>[<ŸÛúÂcÖÅÏÆ›î­ãPtÑžý¨=.û³ßîx Nª1T tâȲtJd…³Ïô:$Të¹ÐM²}æ¦ä…t–ÒëÚçÉ6;ÿì|ôweŸ0 (¸, Ê@%Œ´Ïä@5'ŒŸÙg“`Ÿ™¹xÉœæ’lŸÏ>A|ÅÿìA…£E–¥³„qšÁÁ™"À¦¢„)ëTëݪOÇ£™—‰—Ìi&m½h`HrMɉ'ó¢Ç:§ÏØÑç¼]&r»8.ŸÖ»÷ýw‡¦^­—‹£ÿž¶µ˜îó!p,b8²(JI/q,&ÇÀ( ô„|€qÑig¶îpÚzSo÷&¿uÿ¬h´¬Àz¦©b&†1r8*P’Z,ÜZ¸yáä(„"¼ª›‘é¦úŽÃÄpÿò9€H^*^B¦©4õ¡†4V›/¶{:àKOfˆbã,ž×§4¬Hz:í\°où@(_:GF} §ðŠô•ä„8 ñº¿:Ý€‹˜Á@fë^j¦­7õñ¹Ù×8yÆ•ùX˜‡|!‡£%©Å‚¢‘eyjˆŒCa;'QëäµíEbÚvWz {g ÷ǧ(ù5=-QEÈŸÙúåzñeãH*Qê§ÇÈO»_“*¹ ÏrIRÆôVN(,NšŸêvNÉ18iuZ/”äg<Ùù¤ €•™Ž¬³tzíùý¢ùr•1m¦]×õ‰I?c­2 }b}ÌÊñŠGLyŽëU<++ 4 «¢¤HïKŽ€UÁÝÎGÛaí_EÚÌ´¼Ðž¥ÕÃ$~ÿи“²qŽÕ3Fªq/Ɇ¿ ÷"À=‚7Ç=ŠY˽4ðÁ‘&#À}ÉÉ0A°­·ï†ý#›«Ó¹Yx1ŸdqÚcÖWu¾ #\‘RÍ&^'G$†kv—­û„£ETÉbº„¢Ž,–,¡ åHGMŽ KR¢`Þ£õ¡­#Æ+™Í{‘š6ï›]=6§‰ñØí² Z–U %(5-¼$T É1Dp°tÛ—öí±0~žÙM`#3/“D«Õµ}%Ø>uݤoI±œŽ_‡Aéø<È0T¾b9 ¤—Q#„°00&c¸¥ÁôÀº FjïùC³_=/#L'3/XþÎ¥ï¿ è‹¸®N_”6V_ÊSHIŽЗJ¢ËéjÆõ*%³y¯º“æ· »¡//vÃZíifl}¬=Oõ¼¼á+NèX¡ûŠe3–:°U#•C%wŒ0Tþ8KHq×XW#3}—?Ûu '7=³L>ž4×Ñ›ì—ûúm°†±š2¾`ö<–v:ŒØt8`,t]¬çSé1ÐJŒ¨èº*§ý>uÓÖWû£ÜD¼Ì%ÂÝ¿­Ã{UJRrQŠ`.½C%ŸE@A>Òw’cP†cŸ4o—‹]òöÎÜl¼L³¹´îÏ»Îy~¡%½°7µŸùæ|?㾑¡ žR÷eè&×Çõ°†Óžv7½_-‚ëÃYÌö ŽMW–Mx÷PlzŒ›e×…XWèVÊî%ŒV®™™‚ȳŽá•NXüιõn@oÑ.aìå¶Âí›UèjŒL”ÔɈ@žØ‘#€‹”ðwò —eôê`n.^nÎrù:Üô ôû‚¿ [‚F¶4Zî·‡E³n÷»—3ñCëCÁaã‘Ès=Òc‚PvîG;'t¸~DLn2^ÂÎ’yM˜Æ=¹Áé î 7}utAX((,XLÃXé\É1`T;Ws§Ì¼<åðukU§uu¡0(±-0´g (9FZÁõ·O‘¶‡Í°Ç*¦—ËLÃËÌ4wM½ø†FÐO‡¦­OV;|ÝY·?xÞñŸ€Þ˜IóüFiGŠ–ž8^u¦á,*=Æeâx¥ î8×F#—›‡¹Y_9p¨MýZøi ]VƒFö?:?²#&IÀÏ”„USÃK(»rñò7Mäµù{>\‚*¸ÀÒȘú £ª£ E†¥KUD!Ï'I K ÂåÔÜ^^C¦ÕéÁÍî½2I^ùpÊHû¼½Tfã^ ^6» Œ¹ŽNO”VO š Ï IÐSV`>ö=ÂÊû%Ý8³ÈLÄ«íy"ãÚrÌ1ðiÆý'ÿ«c1â:ÈP€Xȼ"ûH€LèÓy-sÈøp:_tµŸ™’·ó”FÜFxðW»Ð6c`è}‚í¥3 OËOæÕÎîÂPàhD‘diù òlôyIäpžÆÖÃS1Ocä¦á%ð, ‹Ü§ŽÄ}Ƹ˜ËìäFIeå¦1¸eèä±ÕÃp•EúÓ ™Ùx5?Ëf°™¦®sÏ¿ÒNpŒX£Þʰ”3úçÿ¼Åìdš ªe cA=lP}¸3ôvñn˜5ÑÒŸîîÜ&ßÙ§vXTyÚÌnµh&G9Ýš}÷p¤›&>î÷›vTvé_§(î»ç39ÓŽ¢DR5üK ËÉfzN™î¢0„ƒ1˜³qQÍbƒÿrðß„ endstream endobj 188 0 obj << /Length 3345 /Filter /FlateDecode >> stream xÚ­Zëã¶ÿ¾…qr2rføõHPIš\ Íõº@Q\lËk%²´'É·1Šþïá õ°åÝM,¢(rHÎó7CX¨Åü¿^T 6…•q/’Ð FI¸hòÅnñÏ åâõÍW·7Ÿ}«Í"i¤£ÅínaM¸ˆ£ž‹Ûíâ]ðõw_¾¹ýæír¥­ "±\ÙHoÞ.Cüøúí—?üð÷¼^¾¿ý(éE,ÒX*¤ÊP`S•ª¸×oÙŒ_6žwÇ6ŸZ6X´mýÌ¢³Ï×g£§GˆDjúsÞ.cÐ¥½—N,G†„£,öŒÝ>ô¯s ,îKFâ 4¢;Ѳ÷Ýgé"MÒ3>´mqW] :Ö~Ÿs¢õ8N;~îÙîólëõlÜ’‰ñÓ׿›~Æ%ËJéD(B#Ô¥‰ÎOÒÊìÕê1)¡@圔Œ‰IJØ X1‚W–63z`˜.)”`GBÒamW¬±"IÎ<ò5)iiþq)59@b×Âú˜¼âX¨$ýãò*Ù]QeÍiÙà Áˆ.FO÷¤öjóþQ¡%"´fδ”aÓRŒæ°16-¥{Ó‚/=Ø–”sYÔ“WwÝÞÓir¦Ä[¬au2•É×ñõª­Y Ñ4yLŠ!ä=o_ÍeD`ÛêÙÒ¹Ò!Îı³™%ÆÑu“dŽ H*ó £ö A+)¬Q—JKGr¬é"r¹ (-ˆ 8Ê#'6D‡ÜÒ¢9r *Q¯ÍˆGiÌdrt<0õ)Ÿ¡4¬kgÔ/”ì3°A@WN|F(#¯~ø>œgÕ†Óœ²æø Œ8½L‹ •î$[êÛ”ÀÄáRz%„ÞëJ¨Œ:MÓ¡XOÄïÖÎ:ZÜ­HEå}™IE¤Ï¶MÇ:׉|P%R7o¤›Úq¤{L €Zl˜Ì9²>¾Bcìä_¡ 8ßùF]ûYî¨Ðò;>…Cšé!¿æ!‰5½•ÀÜY¿bœÏfÌRDfPc­Ã}^–¸“8 p"J¹ÅsNòbݳFÏ­"âÁ««9Ì•ˆ$êjÞH(ˆ;à3À'ß/Ç ²ôš; çÖ¡åTêbv“ƒå´0 - ¬#hs– §IÝ%ÿ6ïÁYD"–T ®|ü½c1qÙ‚o §‡±Ø¦Èâ—K¹.¾ºƒRÿˆÏ–2lìÝõÆÞ¬Á™wGç¥i€ØVf¸º96MŸñR5¦AöpJ±¯ï‘Ù>UUgE(JÆÙv›30l÷uƒiµŸ} çU¡0!,K\$ÉÔ3MIPxðçÁ­9haÛ¬ÙzsZ7YSÌÁ¥kWâz4ÁHaõ^L ®Na$+¶2z”uG WqÀŽ¢ë°x€ícWÀë‰^<ã1ÍH,mž¬ˆ›&÷~0‰‰ ¦Y-±ë¾©±ÈBÓr?àdí ôü_;^—<$†u5W—!4: Àkƒ­…7Ûp_Ö7è±?úÑÕñ°ÎjêL8¸ÍšûF6úµTA=[*ˆ«\ˆ±1°Æ&´+Ĩ¨QÆXÏhá¾\½8œ¾H¡†ÓuúcAO¨2-53TLl0˜·Nx«¹ÂKAI–Áƒ•¿”´…½ï0A úB}àãé3€Ãu}ì&Y ~-ª-Ïv!žNðÀ™âL4ŒìSh¬úUÿT‚¢û[JµTÊ ÀQ¹šiQö³hîùÖ!×5: ¼í(Fœ¯½Í1Ùj¯Ú¨:ѽ*¶Ñ¯ ô¦x^ºÖ7Ò‹šÂ8íömzƒ§ CÒî“s®´^Ô ùYrÙcÅ©½Ã( ÑÍÕ¾EN×—…ÁgÕ÷V*+“¡«‘…šcã› <ÕÏ÷eVT“jC&lþ÷²PÅf c²;dÄhâ‹2kÝçy×¾˜/ƒÊ²˜Îmë† e¨}®æõqš'ÑdÛ"ëêæŒ8ÀvJ¤)¶wyûXYïW´Á@¢Î7B·.fˆ¿Ã•†{ÍèÑ+‚aÄ 6ÓòØr>›Ø\ W†7X C\^…&qqÚ†ZÄßixî‚è¶k’‘…R$*u¤À“²‡u0£‡z èa¬cŠr¦ÖŒ¼ÀrΊ8û 9'`FÚà£Kæþ!¥šì0Ñâzhçµl¦´S”z,û´"òB¯r³5ÊØÚ'’ÐxœêÒ-韻³d¢ÒEç†üYž¹ `Õmpæø<‹zØ8.\ïXJW]ÃwŠ7Øš­Zµh(¿löY3)†ªÑƒ¢ã…Æ7q¬ƒ¯NÔ.Þ•lƪ:‡±è`Œ<†ùË¥Ý ©`¯?ÞŽ(\a·Cè)‡‹®À\‡Œè¾èüK™#’Ä}¼Âk Y¡Ft3\ C^›–½öéÒ«sÑàR©ñ˜å¯êà°—Åg•j"‰&ß!øÀ&&jƒÞ ðwˆÏŒ ïÅ&EhšaêÈèf€0 °_ò áŠ}× ísš+´²cÅ¥(ºqoퟓ DGè5\H²!IL#Ìõó´ûsÅ2ÒJQn‚=Ô¡ýMiƒH¶æ>—f+_Í€Ž¦¸ÛwÔœ¿4ˆ”Ñc ¶àáúŠE±#Z¤q°P^mJ¼D$»Š"¡M|ùúû÷„übCZÚµ†däu™ R€éNŸ~ÊRAA½ ]ai]»àzžW0#5S)zìF…$ˆ°—xR½g¸Õ/õí¡å/<•ÍÏU¡°(´)ÛÕU›¢ÒK˜Ž“ |¥› h´ÇõŠ}™gþtäKؘ‚Ç3ŽÕœÓÚdŒþ™,îÔF#‡i""Šc¢.‡¨ûÉý~y:÷#—\Ì *Ú¦5ÞuiË5&袘…­ì€?²Â^®¶bÕ§ ¯Ý€Ç`ŠÇ’˜£f†Á<¤ÿSôÔ¥Nϳ¤ýîyà;¬Ug0ôc^Û—ôReóòˆýXÔ8øÃÑ%µørw<= ]Ï©^ú‘Ï‹®ã`6ˆ±òÏ@¢˜]V;r·KØÉ¥Þ¹ò”á–íúï¤bÕ³­KMê»>õ‚>R¼œwßÀÀûB/Àãè –0…¤Ÿ :Á“ˆ9‹È$—ùi¸4çwÜHšË\€ŽÙX†"²O!µÀa.îègThÑœ\»rîn´æ|¡Ð±¹LÙI ‰GÌþŒM5Ô1ó¹rç> šå€1Û#à‡9ö2 #T ¿Ï88Ôm·¢˜HîÆïš}M?Å_üÍUôÑ'³»FÿC ƒ&‚}ý†û@Âó!ܵÍþ¡ ‚Z¦¹kêÃÄa¡ÅPÑbŒP¾:@¶À+Œé¹÷·|“S© –*žÐ‚TðÿR©J endstream endobj 193 0 obj << /Length 2956 /Filter /FlateDecode >> stream xÚ­œ[sã¶Çßý)øhÏdQÄ…è[š¦Ûdf›të>%y eÊf–’ª×ùô= Š¢AÊäÑììP²é?.çw.䋞àÿÇhQø'&’êDG‰„ •ˆ¨Ê¢môï 7ÒèãÍßîoþòÎ#MŒ¦,ºßF‰!L²H+MDÝ?F¿Üîó¿ûíþG¸3Ž 1Š+{'u)@¦½éSº?¦ÅÝ®L,o¿ûç·?ßÿ¾Jz«ÈÝ©èíÏŸï½ýéãço?}úá_­äÍ÷÷7ܰ¶ºìTvL”ÑfwóËo4z„ßýQ›$ziïÜEBr¢Œý»"úÏÍ©=S×SŒ)©XÛ!3…Àg" É¾€‰äfNngÄHÐH×z…Fg´3SpA¸´õÑêÖYäþ.¡·eY|É›·]Í”$I_§tÍH¢Î ÿ®Ü7i¾¯ß–Ì$€âUJŽ)#BŒÚý÷¬ÞTù¡ÉËýÛÒ%ãD3œå$DÓiýAqŒ¤Ê`Zá(Äh}¡ _Œbs¾¼ömôaÖ\´RZñΠ0$§·ÿ»ãò6«î>@™#zqKÕpDkqH«: k8t »Jã Š;+6ß7Eur[„B0'‚r‚¿éÂ-D[6¼L{àÊž zàØ`ÂŒYƒ5]µÒz“çÝÇ&³¿ùê~Ñ”ÝuÜ=dU=ã³F{ŸEùJço҆øFÂq¾XbsÊIBug;°Æ[ÆuBŒ 44&”*ã #±•¹K›ÊÒz›íXÿ`'„+Y_Ù[AÔ‡U£¾·__›ç|ÿÔý¼ØQžvÛäüë4ë@<ê(Lé‰&\Iê ÏúbIØ¥¡$‘} *Êc êòeèJÕȠ® ‘æçåîÌbRoïbÈÑ*ËÄí.@oL¹äõà1P›Q=ÊÎßü5èw €\ív+ ò»‘å~÷5/Y¶ï¾8Û¶ŸëCºÉfF £½»¡|åäoT)\:(5d" 9>a4\:(aÔPF_#´Rþ®5ýS¶Ï:ÿi²é4py ¦Cưô|—>e3ã öcXì>³)ðKç¦îòÜ]™sÀ•ÝtÀa…vékƒìlT{(Òý7â…û©÷8`½Ç¡@w΢8ü7wBix\kL㪑~íæ®p¯ü*¸‹}yΛ¬Ã3Ÿse£ƒp‹/ÊÒa˜6#Gµ—Ð~®ýð–‡æX0¯1£ñ¯©^Ïç.OǬ®»/ϾLß ¶ø¹ÁOï (Œ+HH2(ùFûÂbiW‚Èd±¸Xo`0ñîn·Ë¥È9<•ú¼ä¯¯£¸=í+Ûôˆqãáz?ôŠöc¹u©RþgÈO ‡LÛœ¼üýôìá5 aW+N ÆÏ E ï—3^žËÚUîS%›èÝ×v%(-޾5ÕÜ@ƒ ²÷.”g8ïŠ]‚ÇyFÃ{B£§t±Æ ¥‚»¸Ý-\ж]„mÒýcZ=:΋´®³ÚÇe÷Óúx8”~Z»=î7v7£þfƆï= ƒØjÅ1FÃÓ„Ðè™X¬1ô-h™¨37Ä21L4%á,ö£_h)F@Iü Š°Ø Ýn4?ôƒ¹3¤ z¦'eå)7‘1“B(šßŽŒFÃÇL æPæ*1“Jø™Ûsª²Ç|3¿Î±¸öÓasPrhÂb·¨¹Ncc’óÆN-Ærh¡RâÅr(ŽJyVl»6xy|XÙÍÁX0(ÒåK—ù”¿g›¦>å¶na˜ûVyytw´x@rüTV¹G¼ÔsÚmœÚÜy&"  (GìœYÚ8Œ3£4œKa4¸ekÛîôÖÛ«'CO H÷p©=Jã·Xcš=©‰–.zì²vvj×ÝNïÄjìVÖ9ÈݰÒu“6yÝ´c„‹dõù$Ôg¯Ót!lÒã…bÃñ%8áwv¥áùZ¬1Í—D5:crè–Ñ'@Œ@kN ½]¶‡ÿ¥4ÎÇ™ÁšKÂ…y·`U6†Î¨ «õCÿʾ úÁ°s»n¨]}  vÚ}Ëš Ô,fK|ÁQï(žOØ•K‰Œ¹ ï‹5¦}"ŽI"\øê\b.ÓÔDÅï÷†CÜÄât}°²åAb‡Moªü©Ü—»¬ß»®›ãÖN&·3\"lÙs‰bÊqiÙ2ÈXÑð\.Ö˜æ’Ã%q“ú:šË(I„èM¹ÿýjb‡²H«µ˜˜¡ÚBØWvgöaB|(ºCæïgÁGÏ:ŠSÇ:U$ÈŒÑð¬/Ö˜f‚½b‚ÛƒÞþ©†‰ Ü­ ¼“÷,/fĤZMèÊN:è…7«xUyÜ?öÇÅÛ“ãsù¾=«(Î:VcéY‚‹Ë( ÇêrIVccäâÈöe»mÞK—±µ¶Ò!¶Îk]«<«Þù0ð4áHp4%œˆù‡á.Ó„Ñð4-Ö˜¦)Q„º#ëy‘úC‘»i¨b˜ÚRñþùS7Ëû:¼Ÿ^Ö”¨õÇú×öPÝAíÊêð\åÓûSTŒÁ{xQà9xõÅS3—áÅhxxkLë¡J޼È/#š›Õd­¬~¬qýÛF eq<­Û¿‡1„]zÆP|8ÆdB$GHŒ†gl±Æ4cŠÆÞuVÝÞSs³êÃRë¬ 9ÐD ~2y›öÅgeÚ£pîÉ«é s+±>¹Xi¢ z+|ap–ø9K}þñ+¥<+fv0@öÎ…r ç\B©£ák±Æ´sI “wè¬ÊêüÏî$ˆ‹ÝíåufëK·º–À•í8jH ÓûÓ³µÝ×4`£ô€¡àp€Af§2zc4<`‹5¦‹avmŒ·‹Ýw<Ë‚T"Øêw¬­|ª·µ·ÎÛ üišèiB‘àhâœ(‰ W OÓbiš84M8/ßùown|ÜÎoÐëõQjeõƒ< ë¿-«ìüaåú`£ô€¡àp€1 Z¸“( ØbiÀ {xâþ9¯Co‘I E{§HpÏ@$š°˜j³!ÒifÅA†®gze™wYùT¥»÷Ïœô0£@ì`æ&³âK@i8˜—kLÃlOÜÆ.Úäs{šö%A—Óù`û¨nF)bp–/VoË¯í…  Ãnx3)9ÖÙöX Ý ŽçíG×LcŒ1½Ç‡ Ã8QD#CixŒkLbÌ üXj—B!Y“D´7JäciöøqÌÎË´9ÌUcê§BÛýEúEL8]½©´¶÷Bø»ïÐO‹J›m¸”Ã=¤^•ÇÃå2zÊQ„ž(—fÑKñÎßgy~v˜ÎLÄeB”N¯FLŠÌ¿ Rüµ;±óßA¼86y‘7¯ã Ñ­jp®Ý ˜eãçûÊcµÉFu> stream xÚµZÝoä6Ï_áîËyÐU_þj¯½^w»¶ÝëååÐ[ÎŒ’1ÖcOmOÓ ¸ÿýHQòØŽ&É6-‚À²,QI‘?RóK$¢ø5‡¿¤ÈX³<‹r0®Ó\G‰®£]pÈ£×ÿ¸¼øì•TQÁŠT¦Ñåu”(¦•޲4ƒgt¹~Š¿þö«w—ßü¸ZË„Ç)[­“”Çï~\iÿðúǯ޾}óýëÕûËŒ2Vd\ %Í5Ã&'*MunÔt=<&Úz[6DzÆaß\^ür!ìFĉ+ÅR­£Íþâ§÷<Ú·ï"ÎT‘G·vä>Ò‰dióêèßOÙ©â,/ Zÿ¿<á½1ħÐS> &¸ò|þ؉fZæ~@Ê„`rµV<ÛŸY|(o õh ZLéü1™åL@Ë *ë¾%²åvÛÓR%ulÍõJð¸<ÖõoÚf£µ l(†`E’©~莛¡í>çD%/â½Ù_™Ûy|[ ;êv†ºúro¨«q-ट *âM]öýK»4Ÿ¯yh«f¨š2¯«róZCëžH–„k¶gu•$±$Éh+ÆEN´_­DصÌy ²)h˜ËMeš ~º£/){ PG¶qÒúyÎuæm[ƒ\f Žv úe]·+™Ä·Ô¿?häni¯Pj*ä\6›c×Wh>RʸDjR9@ÇШQ¤þ+îÈÔ 5-â7×nÐ-Z@KS¯Íf¨p«öÛÖL³¥6­¢bSnv!5µ°l‡Gþ%© 1•í±/·U]Sk‰ûvåÕWÖ›c]f‹O'åØyðò[¹?Ôæs{üý¹õÏÏ^ˆO2îdƤî ¬Ö)çñ—ôôøœW_„ös5›!g3Ê/ZÆáT§Î´¾wû¿o3J2•ŽG¸ JY3¼Qµ!""aY6úΫLjœ°+W’; POI_Q3e}4tZÖà'¹óóòŸ•@c9‚‚À6%:.°9MüäMÛÍ_™á֘Ƒ 3k§˜½3uP§Ú0]ÿ˜Å«Îlgzvü`ówËŒcbÆÌ_aLãøÙ¼ÿ=ÁΜç¸o"R°”Þ^­tªØ²Á¡¯O“§ËèmGs ¬œ6ãÊ? t YK÷<÷ iºx¼°›p‚“Z@ŸžÂÁt×f3,¦ùåSçß?|òÂ90©X!þ+¼÷'¸¶ËŠU怲Ƨ\Úˆ½ðA€‡š8]ÆIùÃ)}¸»Ÿ:ˆ ]–‚䎨‡rÜ“Ì2†Ùb`ü4³¤®&–ò¹@mô¸» P•ÝÔPÒ©Ÿou$BÔŠ)¥æ‚&ÔZÄ¥lšÂ:¼£ =ÃËPÃz5óN˜üÐlÜ;Œó88ƒ ÷0ˆ}¹E¢cô„0½QZbØÛ^‡’™tó°r@’< ¬”e…|–rÐèLZRIñˆr ›ÓÅÈœ•&$Üy{ØÕ`úZÕµÛõð7t=õ^!Ðá{¢–ðtc•ΚÁ£_-éucº¡¬ê#Õa·K±ã€É+Ø`6†ßªˆµH™Ô`óB³\eÏky @R©r'—|nÀæKŽ‘ÛåO4d…>žÄÒœIQÌ%öÌ 3˜ÚÌbÀ<ê¼Àï‡]ÛTÎ „s8ŒÍCK2zÎsN{nÆeæÁcâÎÏìmr@:LEƒ²™J²yaÁbœ7 ¤ à»Å¤2_àJÆjTD^LLr†þÃÚúâ? À¶8waâ»û¶3ç‚?8Ôö¤œA©wR›²ÅîcØp¼2ý‹ ¢ûCy³3ð˜Q·èP-xo(vU¦œ–7Íœý×eÕÕÎtê²»qŸû1ƒçåc2+2gßœZ‡ë ÑW^P?¼¥7–,—cJùsyïçÞCåX_ŠRt¤¹~ŽóvX"„%¥rJPÙÁxÉÇÅ™eOÛ;A`x±FêJXË'צ/y` ™B@ƒÐV­ä´=}8'í"Íž"8Rtˆ=G<¹`y’[R¾ØJ†ˆX)xruJŠÖŽå[`J] ·×âqtõ—®ÚÌHOr!¤5ÖœÒ-‘F5PÅ 2”`PWàoÅ((oý÷V·NÁßkm™ÃJ&Ÿ"ó"™G)—,Íži‘`3‰°¤t–<"ó‚¥izJ›‡ÉÅ‚¶ätê°oR^Yk¡±NI–—zn¬›º“çd ¿7w|!Ÿ5™{}쫺^NíÛÎå `äo«~¸{ŒÚÜ>Íï+D“íNJSÜçã\ÇÇ>‘ ÊÓavU(ß`Sr„ž>€µ2¦ùXË£pt]( ¿\KÍDX2_$WÇÎ ŠAJñxK¥ †ºÉùËb¬Àˆ]eº²ƒTKÛi³ |©&êÑ=)8æz2'‹*~*ì૽;IAìà—™.ez![Ã.2ç ksì:Ó¸^Ÿðé$àLŠÔ^Ð wD:ãá8v4íÌ<ÓéGó2tUU@Êð5ç'w°³)V¡ý^’KfIbc©/™½ß©1<ãý¦%<9c™˜HŸ ÄçM\©™g ïÛ~ðºË ƒsÕlê¶ïf&0>ùcÏs\$陳˜Â½‡}Ýs`®ÇLµë>Jàaf­ï†>öþa—¹4ó{Û ~„ØC²ºGñl*ôÑ ³-™ørv¼•°a\O0›ÊÞŸA_·¿jë`aˆOSü®m‡0ªâ§J¶/Ó]2}ŽÆ/^ŸV¯PS¦óÅÞ›?5OÊ<~Z”G…³*ÌÛòÆ||%õÞZÓý]?˜în6…ËÀ]œоêØÛ;\ä=eªHèPhþo>ì«îÂ,E¤¹ÚÌF5^Ò6.ÆãËh©€3¼¥ÚçË™©€8q Λö`Â÷9§ g²Z< [.’'SF;…$;Æñãz1·…»[ÆÌj×&?‰-W§u)öØÛå²§Ùu[‰ÙbÎel#`?Êñ'$¹´WÔÊ"±AÄšÞ,h‚§ÇQš]£”ñeΕ&`bŒô›T¯ß¨½Ævç?¡š Ý^áo_öc5ÏGÚ½Ù9“¬åîÅÀTäJ$Ù£z ôìæ /¥80¾(”Mà°æ¾`I«“¤v®q…v~¬ì@4w¢áã/‚1g> stream xÚÕZ]k\7}¿¿b~AV3úÉCS y( i !©»”Û…ôß÷Ìuw½ݵ­{u·),kõqΜÑh4k!GL%ãwF‹$)±'/L,¸ ŸB‰Ä‰bñ„þ¤Lâ(ç2H ‘ÄS‰ø,c—°1»Hk0{,.êÈcï±x ^Ècñ˜yl™Rú³ žXE±-q‰LA±_td;qbŠD’#üˆW\$A…’m}Æe†,$Š?@LJ ”9ø9G˜â½D2ˆa¤ˆØTù„M gë/€(~}_V‚a,» Ü Ó#ƒ3@ÑŒql€DŠ é`Ì,‚檄aìP†aîè0ƒaðÈÑ0¹€,‹qÆT3‚ƒY€*¦±ú™M,ÌRËË(”ìÍB¦Lš ŒÛˆ­ ’·•aú‚õd˜Í8A˜žG©0X 3tIÅ0ÃFÙaÃH™G…@ =+{…¥Æˆæ )'s("gs°„Y:60«À µÔC.e1·SèdöI™Ô›} §†± £3§Á¬kqƬÌ` ©UÇfqƒùaqŽXà†h(iLáBÅS…v걚¨¶)¤.Éü³`zÖƒÔö*&8ëpq1lÞýýç–6o>þ¶6¯®?ßm?ßÝ’Çáz;lÞno¯ÿº¹ÚÞâ¤?lýýãw×_è½CG,ñ…äJüBˇ«Ü`:é8øåËqýK¬I´¹„Á>±&¤ß5!ìØÄøÍ››ë«Ÿ¶wôˆ¾¿¤Í»í—;ú°[j*ó×XK¬;€sQ…ʂҖ)'l¸³ì\´Z¡M=à8_e×>$±¹È×ÈÅ}»v–X¡õ߀³J%¿4É/å¬Vô•æÞõ€»ÔŒ>U¸Bw3NÆPD°‰xúó¿ü±½º_çõ'ä þq‚N¯ž \ET» °ÜGBuÒ‚?—KÝ2ÑûQ¯?!_’ÄJ€°ªÇŒÂ#¤¹ £êìĦ³sKÎñp^jvHA÷z!/í¢Wªr”Xº°›ÐëØGƒ¥Í'˜*Å.á å¯Ù¥¸žvÓì×´à}±ÓŸä÷àÅzØ Wsæõ>Œ÷8ùÔIEΙˆÛ¨ ×RqÍëéý(?<ŒÝžŸ=ÖzðÓJK]QËGùá!ºµx[«ëÂ¯ŠµÚk5Ÿ5Ý+UðÔÒîÓÁó8¤Ì^½‹tþdd|v„°bC§*Õ%Pâz*=Pzî…0çUìª4«è ßÑ>‹G]Îq¼–8³AÖ5×ô ewÞg(OÔxÚŠ<'O;ýþewìô&ŽwÁ&awƒˆ#«mw8íjµމזÕí÷)U~yŸÍ[m–ûЯËNÜVwj”þy¡}Ž×%)n«I­%$Æqé#Ví«’Î.Ö\<×è›ò¾/ú<;ß>¸B£}ë%SeÛ‡P´Ü뺷ÎN3|ú}¼}©Ñç.蟺·z¤¡dÁ­hûCï:¾¸f¡¯ƒW[™oÁÙ8TG‰ÃþjÆ –ùº¼Çmõ½%b±KÅ:ÛŒMÙ&ÿ[ú[(ÊòÐsÍ$öar†Ã‘j/ŠÚ}ÛËClª=*ñš:¼.OgÚ³˜ÔW] +žÅ_®§úvKùiú\ßt¹í¦Ë~^Ýò˜ÉÁýÐAŸ\;T}X5^–ÛºªÌmeåF}&SØÞN§µÓ©[QžÕrt­3-õ«©3eýÒÓt¦ÓpxyãêeÝý» z¹¸UÜ«Ôci»K˜ÿ½é,ÄuJÕV'>¸á›²çÛþû=6½ endstream endobj 200 0 obj << /Length 3750 /Filter /FlateDecode >> stream xÚ­Zmܶþ~¿bë‰ñª©×ù¦±“nÒø€¢MC·âÞªÖJŠ^r¾ýï7JÚ=®]Ôq&9¤†äp8óÌpÙ„›{ø{¹i6ü‹óÔƒ4K7YûA”dѦ7›Ãæ/7 6/oþx{óûJmR?Oƒps{Ød¹Æá&MR?Ò›Ûró“×TÚþ|ûŒÔ›ÜÏ•àȸǰ¡A¯Šf*êíN%¹Ž½¯¾ùò‡Û¯„fx‰¿ÝÅIàýðã6 ¼ï_þøå«Wßþù%²¼ùúöæ—›–.sk?‰¢ÍþtóÓÏÁ¦„¾ï6¯óló@#O›(V~’ãwõæõͲŸË’ö¥«UÛ9tàgyÎk¯†7U3ŒE³7ía»K‚À{öC„7§¶7Ϙ²¸ýÅ\Žýdp+0ß. ý<Ž?Ä´«‹ªù͹>Y*M3sE^ÂèŒá¡¨ã8ÝŒÉ5™¢fàØÛ#¬R©7Lé·*ðvûº&î[XX?íǶBÑpe,ÞnÃÀ“‹~fÞýt2Í8<šR^Ñ”´Â-à|…ãÑÀ Q±Î?ERÆ“`_o°&¢-“dqH:™ÓéÐD$Þ‹m{mÏ£ 6Þ§Ý™¼ž¼«Í礨—šu¡VÁ¹¤^ôf8¾éðø¨ú¦)Nöœ¹à^;›Wïc±oÛ·¦äú¿]º² ó©?°˜]³ýÇ¡Ûú“ùG¨Æ P#8¾ßVÌ@9Pv@0ÖýœÉÇj/d0 ø_ñ8'X±pBÕÅR¹NåT5Óhð4czÛ†À¤P•B¯1¸g ʉj€”;Ãå¾™jîlÚ‘©<*ðN‹’µnÛnø|»‹âЫ"™µtÈ/„)RTX_k(˪ÄÍÂÄ}e¨ªXaduxEÚ“UsÏM vãU¤þó«øœÏ—g¼¸FŠ6KæóÊb;Õ%÷4f«bïW¼´lo57»¾…ùêÇm{¾C,a v5Híf¯»2Þ4fj@kÆi'š™e~¦çkoŠÑÀœ¤#ekD[èImŽfÿVôÎ* lj¦ïËz7 ó¢jŠš÷ô]UÆâƒˆÅ+Ã6™›8ˆI©Ppz… ÄžYbæºM#ŽhŒÒÀû4W µ}1¼0i,ç ´õB°=­Û†ÔêhE…•|ÅúàºCÖrÃY‹qäÆC_t]¡0ƒÛNMÉÕˆ÷-HÖ÷ Èlå¡2¡•Æ o?%vØ¥‡¾qh¢QzXص@U,Q‰3Ò`I2¾AÝ|äF ÛìŸ0 !P¥,]³Ï›U)_~•*Þ›N#„12’ÑÅÒ0–'Þʶ~[L/4ÙÏÍI8’h(JÁ1?\{«¬|ÇAC›â®6VoÍé¼—ïh©àËB¡ÑÞýÓìå6Œ‘«©#ñ+JL–JýL‹1O|èÓÛ]€cxU5–±U2œÌãD>× W½C’ÍèQL£ÚP%ÆóÅö¾ºZúP¦Tòéá(²o“Q¯è<}¬”-— ÷Ð;:=.Ù°wOWúI À„Rœ—Ü&ÙW‚[E5ìguÍø£ª,co¢@û¡NÞR´ˆúj«,õ+åç:•­€-CsþÖåG?‰3k7}1õpYªÏòíÕ9±Wjvo:M=K³)ÁØDY½†{æZÁ…½`øµàO7<éå€ÊzÐâ«C{},†:_ÉÈö«Þ€¶±5ËsšÇ%wÑM"²z1S°¼q0õMkh`)TØTAE䃵V>?¦"¾”O,ãÄ‚O¸0Þ´s[–fuW®ix~qw-äüÿÑ¥À:†wP¹Â….´÷†ÏâZ· C@>Ϲ ‘j}6ï'Ÿ8úî\²~ì‹9l)ú{Y%ÊËe_§ieŸ}öt©röÏîÀ”ÈÔq1ÏøzèØÏ’BºZgt ôP e±·:ý(ŸЋm{½†9Y hý°>OG:I´ ˘2²Sà‰^`=Fµ»m&ëðÐkØrI]FËõ‰¬§ÂdeI£5zÀ®«b á T4£à¶u˜Öâ~ˆ‚¡‘J?Ê´F‰d9±RJÔÀ< MÁk:Œ+ì;Rv}Ï[HS‡ïÝø†(ԿɲpttuŸ:Cö<qá $´¾<2ý¾Í„aâÇàè”Ò~”ªÙL³åàè•Jµ…ýï; >Í®Ž`+DXbRpš[x/$f©Û¢,Ö?0÷Wôb޽cò(L>£ìTø¾8“æ`(úÈ"¯%$‘ivM@`/teÑ—2N;pçáXzÀ •¢aJ!eÕ8“âwÉâ¬Lफ़)ÿÇE@Ê´‡ª®y\*ѦN84†»V¾uÜiÀZN/'¶$›Ã Šð…Dái6 ¹Çé $±˜V]Ë).ÌÖýÖD¡Ã½êoòAøE™)¥ÃÅ0bü-Ár¨ÒìÚB¨Ð]z”Îe%:\ ÔȺð&[¹„ÀN]%ÂÚb†]Ûìjs™Ä»sê«û#%³ ŠuÌøºu…؃0f§àlb˜ïÎÐÂâtCɹæ—o>“‘ê<[ùÎoÛ7V¢ìÜËòÙ<ÖÁÏr†ï®òûôdø;‹iµ¢ÆÜ$}æ¸éâøÀæä`'l,ƒW!Bpb5 ¡ ˆ‚PœÀºfœ []_ª±ZR) ¤i’>1³1˜Ù(L7I '~”™12b†²“ï92tz‹Ì×ÚH¡YUt•uª,â>_µÆÕ¦á&‰Y¯>bÕ:Õ~ òGV¡UQЮˆS)?gË=Gã¸Î;ÄHSU—²þvY?YµT3žR׳ϨJÄ‚áSš<Éš(?YaÆ‹Îö·îõr¶5«ÂðÁÊI”- b“¹XΊ³ /°³Î<{=p‚¶ˆ¶É„`ådŠ…Jþ S‹»A¥ rﵑì~­±gû©šÑØ;‡¨ʨ&ëÊ<@Í<€ãºÀ‹]q/qO¯R‘¯£Ä¦ 4xÕ4ŸÙ*I@|Õ6#I¥­kÉvZ_£_M(öƉE\f|­ŠfÍ©—Ds1r9Ï5ìû¢“Nr˜ÃîÛû¾8qƒR«0o•­f;ÙGÒ›Øäœ_·i¤Icùs!}ÅùÍX@±7[Îâ1UD1£†Øæq „ÝFˆ•”°ú" .rœ„çœî.†EóKO˜{CÛ”ÌãIe5tuñÈÄGNæÞ½™RšÎpÊ0ç;´N aµjÞ“LO>t„I2#t>…$\çuëà¡Â'бª¶ÁÜ&±÷áHçž„´C®ÑaCù+J»¨'aTó&—„j×Rmàyg¬‹zé·Û®i[ÛHŒO>°ÖìZ¢-÷}œ‚i´( ¿ `93Ú5|SàºM­ðhÔ-¬aSXÀöaßás4~ô¸Ý†`s¯/D¹=0N—F±ö*XVÃU:.¬œè±2Š`Ö¦…—„| ‡ãÐ.ä‰ÄòàXŸç;O·Î[Äïzf<yð˜Á6²e0.bÇŽ`‚1Âóàë`σ^¸pí¥]ýkÁ.>ú̧ªÜW™øÔ×¢ ø©<ìÅÜâ:ä¿?Ug­“EÑâY+€k“–Z“–œ,¤;­Z7Õ5' –ÅÒÕ ×ÏôöPˆaiÌ0®Þöìû¹}`<³;߯£ëeßal®ã4ÎÙ»‰çÓö7 PÁƒéiIдOdI¤­ÇíÛ“¼©@ãÎÈß`½à±X#óêÜeŽà”9ó *x4uÇ”‘!âÈtÎã ™¡!’ÀÒ3ÄÂ’ä?Eô0_&Þ·mɈ*…æ~þîȳlÀ³“3Lj³c`OiÑWuÕ6é'± ް+†ÂøºW¯¾¾0öG<,뫎eþÉ”Vñúý -l¤Ùª)I‚âÄql9DžYÞ8€Þ"4~Ï¿Øá i7g]ÿŵ·•ø©Î.Ÿ`|@C.ª§Ï‰pg¾X­~­rMçc?HæxzÖðVäPíŠñøœýS´µ˜žÅ. Ÿ°Rp!&j•ÜYâçÙÓŸÆAP©[ˆgÉž`ãª\’Ütþ¿> stream xÚµYm“Û¶þ~¿‚ã/¥ÚñFÒž~p¿Î¸Mì›Ét’Œ‡’pkŠ”I*ò¥ÓÿÞ],H‘:œí4®o|Àîbw±x°÷!J¢-üÕ‡§Ló4K£LiÆ•ÉTÔÚè&úáŠÃD=¿úöúêá3!£œåF˜èú&Ò’)©¢Ô¤ÐF×›è§øo/ž|ýôÍb)4 [,µáñ÷oŠÇÿxþæÉë×/ÿþ|ñËõ+à$¢”å)O“âŠa——º<?k*/µ&½.êcQá´«§×W®·‘䬕dF©h½¿úém`ìUę̳èäfî#¥39®«¢·WçÞ×RÅ’ÄDF+€>\1…ÿÜø¤ë†×´.‰_î…Ž¾k@æw¸/=ûå™ÿ]Óç†%JGF–²Ç³r{lí`ùäÑb)¿hBǧ€ÍMÆðôÖ|¶P:ní†mìMÀô2aY2N>•UE‚ª¦yï\ð9Û=|¦Ò ¿e¢ËJ2™ø-|[Ôð³XÎcßüuø!QšB”d°˜¥CÀýÙ $ ˵‰&tùØ ,³œ0âRHžvCo«ØéŒÿº*ºŽºÿ>sÔ ŠZ·ðáC¯ÌÆ/îOïìÊzÛ¹…ܯñ[zUîgûY]lË5ñcg¼Ô'‡Cei‚-¶dØ´LžÚ$ƒQàhdf.æEѶ·Äø·™˜DÌ”üÍóè?9púΞ†ÝHÍTâuøî¶.ö嚢goë#õÊÞî»@Ü¡-2Pöb±”Ú--1È]$M$¥‰o›£Ÿu\ï|¯i-õÖMÝ·ME ®¢¥-­íw6ä‡ÓŽSq‹ú¦ƒp¡M\СKãM[ ›SíéõÆÏ-ÞãRKä²'ª-º[¢ô QZ{ìì„= Fèȳx3Z>ÈŒØC3ú^GmAo7Rw}Q¯-}õ»¢¬Èãî¸Z†Ús2››@Z‘Ò¯“´­qïG§X ­(–ó|˜ÌP²‰_¢…ਭÝxIÎD@Ú ÁGG»‘]k}wo÷+ÛvJ% Èä£VU±²Uè‚1,“b˜õ º€ÌR9wÆÈRdIÜ[Tæ#ªœ oM¤w»æXm¨_¶hiFYûu`èg®ù©ìw~QMÔc½À„]/CáЭ]T Ûõ®h‹uQŒŸÎdЖõ¦\½ŸDb¡³¯mÝÔå„&CƒëA‹Ñ5}ÓT}yØL$Lu¶™sEABÀmïÓ$â4¿°"dM >ɇ0„«ó®M\Lâ,¯…ûhZjѢĞg½/{Z¹jéìlÚæ…9KH ¡¸€èIÒé3EJ³¸9ôeSx!¦i\î‹­¥Ÿ9•%²óÐVþ{Sv‡ª¸Å[È­ò¼È=)%o8’=S³ƒN¦Âñv­3vüðãÅRIéÑÝgãI6ì § nýŽ{ŸHº9Ö´Ð+Px•\.v]T•ÝøðœA@ϳÉigqqî„ÌÅÍ€ä³YîùÕ¤T¿ ¨7,ºˆ`Ï[»ï° çiÂF‚£/2ý‡@³äl%¼(uà–箃ëúö¸î1|ñæƒÄdñöÛî;"ÝÀX@®™ê2³†Â5gÙ'³á¾ÅÅ…ý¶9KtŠœbãQ×]â8ìJL’Œó”˜þØìWEÿî2Ï;rahÁÆ{!ˆ·¼{VÖjÓ¡ø0cuÛypä CWÃ⪡ ˆý“g4Áz¡$0Õù¼G–]UB"^Âq¨·‚HÍ"·æãŒC¹GrßMUùøy(u †¦v>£ðñ‚Ñ”2±…Üë_í–oç¯AÁáx‰3„™à àu8VU[nw=ùƒ =w<ñDÒ'@‡oÀW%$©a*—ÁŒ–Ã…3.­{„øt*Â^3#’)˜È%€‰?-´Ž;ʯÿ:v=õªÒƒ²»ºi€SÿOÆ] @>Ü×G/ ¯ô†>Ò!ÁgÜPÎtŠ:  ¤Í”‰DÏÓæýén >&5BD¸÷×ñ“Ï÷-á\—Ÿv唋'~´~NГK/ræ§O$'x±J5K•.§â$Šé]0‹`2!Føq…!Èè¡;¤²b»€-”õ—¥/¯ +3Ë_ŸK]çÓð%ïß¡}z=>ô%$to3£$ãð˜§B‚æJÐŒI× I† æÞB `9‘p·”Æc°±&F‡Š âw~\ >C+Þ-Ï(ž1À(MšO–gÀ5“â )>+! 0ÐLq]t•_ˆÅ0ß ¹"e\fs¹÷¤,Y)óê&ŸˆòçPÜH%2Cqsîº!-¨%t2›ôóq3‘Šð9À •È‘i(nä׌¸yÓ,wâˆûC“3ØÕLñ¯å¿»u.`Ô•¹Ò<pͧР…ek+¸”ošƒm LùÝÿ¸àæ“ÙÊK \ÖÙÃlfE Á3ÐíãPñ`Õ”õû/ô;!‘áÙWƒD’E,.9ªFPš #·°Hánlßw‡bm¿ ˆe]Ž*;Ež9M°u%¦3'Gs7$v&7¤›‹•‚°Ê˜Lôç*éðB2ã±²¥KŽ|K&Ólî„É{Úã £xü´pàÁðØӇÅfv¹;rMíMsl©·/DOßAÚÐr(ú^ÇV=†º€×-Á'©†Ò†<«€T€¯Ö%R*JH@~µ¥1À3Ž2¼—§óDwOÃ4M¹ŠØ°ûPp;MÀh¤ vF„W¶c3õ¼ÎÖ—d}Tƒkz½ ± fÛ‡Bqd]$15d£ÖZÛÁƒ²¬· éB(’è1]퀤¬  u~+\¼i¯‰¹šÀ=º’è΂zptnZî`‹Ë²ÍfYLnÚèIø(;šV /„€&¾F‹a—¨sØ}C…¡–ã Õ’ ·: `è4uu{ÁŠ>Ë›Ù=K=9ø18££ï‚šÁÕ®¼Uoˆ8r¥_9¨£Q`qvÔQ9¡õñ†„áM4ÇQQ ËÍ=ׄ ÓÔiüøêdØ ÿN¨àAòÏE‚ùïHÖ…Ÿy~NâèÐyž¸Cl±ØoÁ¾îý ðï_cŸ‰ÑÖ“wÈü†¸u‰ {³ äTn¶¶ï>u.\$)ŸÅ¥ëÕHóW¥˜„.Œ¹šP]r„Ÿ7žV¢»¤ƒôâÞC1D£qéZÊ|jhH¹dhèØM I¥§2t|¾„Ð<>´ ØlïçM’§!_ÜáÚ‡ÜÓیؚ¡øiÆB>rL…«ó"ÕsÎÎÜp½+*nOGa/ëFÿâ“ÿêÈúË\)§žÌrÆ.Åïìš^ÏÎÕ‚'éŒ`Óÿ€Ö¾‘ endstream endobj 202 0 obj << /Type /XObject /Subtype /Image /Width 405 /Height 194 /BitsPerComponent 8 /Length 12236 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream ÿØÿàJFIFÿáJExifMM*2:(&Áà† &Áà† ÿÛ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ÿUŸýpOýT>™ÿ «?úàŸú¨[”r~Ó4;ÍOÖµm¤ÖÙÔÝ]Ê@™.·|Ñnê|¨N˜cÖõO8êÚ (ÖÆ™ý•åG·Ëóü¬ç÷íý÷ÞÆÞØæº¶Ð´‡ÔƦÚU‹j¥Ñ·C(ÿã?­?û#LþÔþÓþδþÐÛ·í^Bù¸Æ1¿Æ=ê–âg¦]^?Øô‹mE´Ô»Ôu‰^æ4Frc¼|F»Ã.Nön„â3Z½ ø†ö÷PÑbº»‰âžÛQWuUU¸x."Ž9¦äÞØcè1Ò\èÚU홳ºÓ,çµ24¦ `VBìÅ‹m#%‰'®I=è»Ñ´­BÎ+;Ý6ÎæÖ,ypMº&Œ ãì5]__Ô4Ûkmqí­î®ï5¼1;:Ax‘C´²²Œ+c89rpG}UmôÛC¶²¶„Äc1Ä«°;p08ÜÀê@&­PEPEPEPEP=Wì_ÙŸÚ[~Ãä¿Ú7g0wtç§§5•àÏíìø›y˜ó_ì~úÿ³ç÷~wý4Ç_Ã<æº("ßîËÿ]åÿÑST6ÿv_úï/þŒjš aEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPSéŸò ³ÿ® ÿ Š‚§Ó?ägÿ\ÿAÖàQ´ñW‡õLZv³c0ÚLVS¬î`»Š¡$(,2ØÀÎIš±§k6zšþéöHe¸‰b€íäJb‘€Ï*Ú\àœW £vÓá·†g—Sµ6ŽšBEµ«Ã*«On¸i<Ö RŒç°â¢Ó-ôôñVyw5°k­jÛd…oí%1Ç€ÁX·ÏòwíhÅõ +Ë×SÕ›Æ ú…µµèÕ¼´‚]Zewµó0ÙˆŠ0h¹ß¸àœ– uµy#¾Ôî/o®'}BþY®£Ž5º‘UV<íà ÁÆ@àqG@êuQEQEQEQEQE2i¢¶…æžTŠ(Ô³»°UP:’OAO#"«ß¼qé×/5»Üı1x?1¤åB÷'¦+Áºf£¥h^F¡&7Lò[Úîßö8IÊC¿ø¶Ž3ø  Vÿv_úï/þŒjš¡·û²ÿ×yôcTÕ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ŸLÿUŸýpOýT>™ÿ «?úàŸú¦·Õ£x›M×ö<_4o™%›O¸†7CŒyU³F#ž•±T ¢Š(¢Š¯a{o©éö×ö’y–×1,оÒ7#Tàò2ë@(¢Š(¢Š(¢Š(¢Š(¨n³šêáŠÃ $`¥° dœM: ⹂9à•%†E’#eYO ‚:ŠÌ·û²ÿ×yôcTÕ ¿Ý—þ»Ëÿ£¦¨QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQETúgü‚¬ÿë‚è" ªCÄZV‘ac íÖÉZÝ"Fò09!AÇãU¹;$)4•Ù‡áí ]´ømoZ¾¥ý ÚÃÌpƶӘFÐ6Æ® ·3ùÉæ±®´¸¥ÑõÄðXÛ¿‡nโKG‰®.YWÊH̲%Æs¸rk²ÿ„ßÃÿóù7þMÿÄQÿ ¿‡ÿçòoü›ÿˆ­U*‰ß•ýÆn­?æ_yoàMø¿RYtv±:m C$9I%ó.7±'† ™c–óUô› /ê §Í«(AªÜ27œÁ¬å,&cÎ<М7C´ WAÿ ¿‡ÿçòoü›ÿˆ£þÿÏäßø 7ÿOÙTþW÷´§üËï8}O¸¸ñ&eÐc¶Žy&‡T‹û"u>[A/É=ÌŽVà ÎÒ Ç#8=‡ÃË+m;ÁZ}œ:kX\A qÞÆÖ†÷ ‡~ToÉ|du8«ð›øþ&ÿÀI¿øŠ?á7ðÿüþMÿ€“ñ½Oåp{Z}×Þt4W=ÿ ¿‡ÿçòoü›ÿˆ£þÿÏäßø 7ÿG±©ü¯îkOù—Þt4W=ÿ ¿‡ÿçòoü›ÿˆ£þÿÏäßø 7ÿG±©ü¯îkOù—Þt4W=ÿ ¿‡ÿçòoü›ÿˆ£þÿÏäßø 7ÿG±©ü¯îkOù—Þt4W=ÿ ¿‡ÿçòoü›ÿˆ£þÿÏäßø 7ÿG±©ü¯îkOù—ÞmÝÉ46sKonn&D-!ÂùŽ'ŸZÈðžƒ.¤Éó‰&žâK—Ž>!œäÇ=võäñœTð›øþ&ÿÀI¿øŠ–ßÅúÕÂAë $!WÌ‚Džƒ, PéT_eýÃö°}Q-¿Ý—þ»Ëÿ£¦ªö‘ÞÉl²¤6ûf&Q™˜–ÇÝ÷©ü‹ÿùãmÿÛÿˆ¬ ¢“È¿ÿž6ß÷ý¿øŠ<‹ÿùãmÿÛÿˆ¦ÑIä_ÿÏoûþßüEEÿüñ¶ÿ¿íÿÄPÑIä_ÿÏoûþßüEEÿüñ¶ÿ¿íÿÄPÑIä_ÿÏoûþßüEEÿüñ¶ÿ¿íÿÄPÑIä_ÿÏoûþßüEEÿüñ¶ÿ¿íÿÄPÑIä_ÿÏoûþßüEEÿüñ¶ÿ¿íÿÄPÑIä_ÿÏoûþßüEEÿüñ¶ÿ¿íÿÄPÑIä_ÿÏoûþßüE2 HÉu ÁÙ#*ÄuÀô¤”QEQEQEQEQEQEQEQEåÚ»cY¸çø ÿÑרהknãþ¹Áÿ¢#®ü»øß/ò8±ÿÂù–nôÖ¶íÒæ›„vG†°ÛÇ•¡¨EóLð­Á–0  ‰·(<äŒqW¥×Ãë·“¬¬ܘeŽÝQÉdp™`¡¹,:ýMC¦j6«§i¾Î²,þhyüÜòÎr0zŽý»úŠSKUý~šãôe8 ¸¹ßäA,»[ËBÛG¾:TšŒIi©ÝÛFX¤3 ®ÅBG>TH9Ú€p3ßëPï"Õ­æ{œ³gY‘$a<˜þS'îŽùþ•nA)Ç–è¾»¶QPiŸò ³ÿ® ÿ Šµ_4¶>„iyx¡ñ÷Šä~Yþ´F$ ûÇV9ê«·úšuÀŽ5˜7ï$†:,e© ¬ÞfD‘„ÏÝ1’<ÿJ’Šd‚S-Ñ}w!lþ¢”‰<¼PøûÅr?,ÿZuØÄxêÇ=UvÿSMf ûÉ#aŽ‹_êjJ(2³y™F?tÆIüóý)dœyn‹ë¹ gõú(¤Iåà:‡ÇÞ+‘ùgúÑ/ïX窮ßêiÔPq¬Á¿y$l1Ñc+ýMfó2$Œ&~錓ùçúT”P$œyn‹ë¹ gõ—o÷eÿ®òÿèÆ­zÈ·û²ÿ×yôcT±“QE€(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+Õ<{ªI¡a=¸óíâóveÃUÈ ÀWeSéŸò ³ÿ® ÿ ŠÖ•YS—4LêSHòÈóøWz÷üöÓ¿ïóÿñ»׿ç¶ÿŸÿˆ®Ïþoø·¿ð•}“þa_Ú_fó?é—™³v? ãß4þ"°±kÓwxCv¶«6²4ÌI Œ*î26~Tt8ÆTšêúõnç?Ô¨ö8oøWz÷üöÓ¿ïóÿñ»׿ç¶ÿŸÿˆ®¼øÊÄëºf›²¥ý¼³,Ëg9RDk Ÿ/.Û‹³hÝ®èãVþÌûYûO›äçÉ/ÌÆ|¿37ãøwgÚ¯VîR£Øá?á]ëßóÛNÿ¿ÏÿÄQÿ ï^ÿžÚwýþþ"»kèvºˆ±šíÄÆá-w-¼­œäÌ ³vXqœŽ§Xü]¢J×a.¤+fïò}š]‹"Éå”ß·i}ØA,rQõêÝÃêT{Gü+½{þ{iß÷ùÿøŠ?á]ëßóÛNÿ¿ÏÿÄWl|a¡®Ÿs}-ÜCk$qÎ.-¥‰ã20TÜŽ¡€$Œc¯<‡þC=ßÜðgÜyÊ¿ß1ìÜý¬m÷£ëÕ»‡Ôèö8ÿøWz÷üöÓ¿ïóÿñ»׿ç¶ÿŸÿˆ¯N·ž+«h®-äYa•Ç"†R2>„T”}z·púÇ–ÿ»׿ç¶ÿŸÿˆ£þÞ½ÿ=´ïûüÿüEz•}z·pú•Ç–ÿ»׿ç¶ÿŸÿˆ£þÞ½ÿ=´ïûüÿüEz•}z·pú•Ç–ÿ»׿ç¶ÿŸÿˆ©-þj²N‰ysf–äþðÅ#3mî*ë^‘w$ñYÍ%´yÑ G }›ØwlúÕ]Z´×l>ÕhÌ6¹Šhd’†G˜ñRxÚÍZãX:IìM¦È*Ïþ¸'þ‚+Í´?j2é¾»:Þµu{¨5¢ÜC}¥,6‡ÌÛæm—ÈŒp öâ Ù¯IÓ?ägÿ\ÿAƒaळ´Óìe×ukÍ>ÀÂ`´ŸÈTQ<”‰Xí*§–äœ×"èu2 ßǧø‚-6å4ÔYn’ÕcþÓCw¹Ü"·Ý$ƒ÷²ä‚¢ñv äÝI¢Ç–5FÓLÿlÌ…¾ÒmÕÄ{0T¾3–dð@ÉžOZ½Ã0Ôõ$µ7ë¨ý1œ%ä›È.3‚ÄsÆ01{þË?ì¿ìÿ2'ûCûCvá»ÌûOÚqÓîïã×o|ó@¾9OñZmÊi¨²Ý%ªÇý¦†ïs¸Eo ºIïd)ÉEâíAɺ“EŽ=,j¦™þÙ™ }¤Û«ˆö`©|g,Éà“<ž µ{†a©êIjo×Qû™ÿ «?úàŸú¨*}3þAVõÁ?ôMnÿ ÃHÿ…{ý‘ý‰¡ÿmÿe}›íŸdOøøò¶ù›önûüîÆ{õ­=CÃWsÿkºÛÙ]­M/!In%€ª­´PäJ€´o”n@?)Ç~:Ê*„rv¹cs¡ÝÉ=½ìö±\Û\ù×/•ŠicpUÊ#"ÄæÛ»©"˜|9«ùŸÙ¡ì²?µ´þѽüÿõÿhòömÛþ³Û¾ïs]}u¸t±æz«ÝYêQxjÞãMœI®Á|"óí{én_÷{qµrÇÌÝŒ.Üfºa¡jxRûO³»Ž é¯nnRTvQ²K§—i`2¤£m,*NFp+¦¢ŽÔà-<« ïæàAs.˜éê7…EµÑ–@d”g•<ÏaË® 6X¼Uª3Fa¸²¶·Eî ÎÍž1ŒJ¸ç±üu(  ¿ éÓhþÒ4»†FžÎÊy2J–D HÈ‚µ(¢€ (¢€ (¢€!»ŽylæŽÚqî…c˜¦ýŒG ·¾=*®¢ÚhVe´V;œË4ÒÉ4Ë;žìOø+BŠómSÄú¥½ÄvVW&Ö+h"RV4b䯭“¸ïÇ¥Qÿ„§_ÿ Äß÷æþ"¨ë-jãýÈ?ôDu¡4°ÜÅ2éæÅ¡³-»A¶dP2Nür@ýîqÓµ{4iST¢ÜVÇ‘V­GRIK¨ßøJuÿú Mÿ~aÿâ)Ïâ_FÛ_UI°ÐB8# ýÎàƒU>Ãö‡Ù÷>ϱ}£9Ýö3:g¥\½†ÒæeˆyâèiñË¿#g˶1Œò®zž•£…ü+¾Ä)Ökâx¯â/Çr¾§r±ÉŽmâ±×g5ü%:ÿý&ÿ¿0ÿñ5âiÓÜJïÒ%µ„àJ­»+Q÷F>ùÉçžqÚ£µÒ­'·‚Y%-ÉbŒ÷q'’¡Š‚Á°_¡Î1ý)(ѵÜWÜU¯e OøŠY8õYÝØ…UX!$“в›ÿ N¿ÿA‰¿ïÌ?üE?EŠÒCGyüöšâexÊ0 €I´dÎJžãk}Z¥I¶¹WÜK«U$ù™¹ÿ N¿ÿA‰¿ïÌ?üEð”ëÿô›þüÃÿÄVú7Õ}^—ò¢}½_æfçü%:ÿý&ÿ¿0ÿñÂS¯ÿÐboûóÿX{èßGÕé*oWù™¹ÿ N¿ÿA‰¿ïÌ?üEð”ëÿô›þüÃÿÄVú7Ñõz_ʃÛÕþfnÂS¯ÿÐboûóÿGü%:ÿý&ÿ¿0ÿñ‡¾¤‚V[ˆÊF$`ÃWpcž˜ïG°¥ü¨=½_æfÔ~1×-\K~×ÇóÇg:îMŽ™2îŽÖÑ×8ÊÆ¦’;]&fÛNØÎÔ_ð’h_ôÓ¿ð)?ÆøIt/ú éßøŸãG#ìë¹)µÒV_- ²gJ&*$³ÒáÇ›mf™é¹f¢ÿ„—Bÿ ÞÿIþ4ÂK¡ÐoNÿÀ¤ÿ9`ç]ÉþÁ¦ìöK]§>Zàç§j¥aÿ ûoúä¿ÈUÛ]_M¾”Åi¨Ú\IŒí†us 5JÃþAößõÉ©’³w,QE# (¢€ (¢€ (¢€ ŸLÿUŸýpOýT>™ÿ «?úàŸú¦·˜Òüq%Þ¦ƒ£_Þêé6º”écyh³è]ÇBòä’1Œó‹úoŒ-5IôñŽ¡®¢د&V9ÎÂøvñò«¹@ Oðç†áòÒüÿ/J³ÓÕíÏÙüߟ©ûÞoNØêsÁe៲iž³û^ÿì-Ÿ?—?m´tÏËþ³w~˜ïš¢I-¼J“j6Ö“ézšÝ–[YîcEI˜)} .§j±ÃªŸ”÷ªÖž3µ¼¿Ó­ÓMÔVßR•ã³½xÓÉ›lo&áóîªeFrdŒ­'áØÓ5½3Rk»ÂW94à—7!¢xÿ}>ò\üàä :SNÓu(¼I éqKw&™¢\JUeÓšB b3+)ùÔ.À8ÉnhÓXx®ÓP¼¶‰,ïb·¼,¶w’¢ˆ®J‚Çf°Ê«0Ü« ­êãtYø{S·žÖ-$Ak¸BÉ¥F—X*W >rبPOrrsÙPEPEPEPEP7iûßc1 ‡Êó)»nÇ8Ï¥gxw_‹Äʱ46Ó½­Ü såL‡ ¡º0ô#¨=ºVÜêÎkq4°ù¨SÍ…¶ºdc*{zNÓ­4«llaXmâD_Ô“Ô’y$òIÍyˆG­Ë¹H ¹î<”ˆ#ð¨ŸZ½’7F•>u*î"@ìP\ Ç?Zô“¥A{ ¥ÐIÖx£AíUb£ï!ì3þ­/þ|íð þ"»éãã(Ê7±ÃS)MÉJ×<é5»èàòVUÛ嘲bRÛ ®ìg=3ÅkwÒÛù0)刲#PÛ.ìgtÏ5è¿ðióçkÿ€PñÂ5¥ÿϯþAÿÄUÿhSþB>£?ç<͵ ‡ó7IŸ2$…þQÊ.Ý£ðØ¿•>ßUº¶‡ÊŠEØ +¾5r§ÕI©úb½'þ­/þ|íð þ"øF´¿ùóµÿÀ(?øŠÚ0µ¹õ ïÌyÍžµ}`¨¶ó*ìmèZ5b‡ØHü:ÕõêŸðióçkÿ€PñÂ5¥ÿϯþAÿÄP³-Tà$ôr<¯}ëÕ?áÒÿçÎ×ÿ ÿâ(ÿ„kKÿŸ;_üƒÿˆ§ý§åö|¿˜ò½ôo¯Tÿ„kKÿŸ;_üƒÿˆ£þ­/þ|íð þ"í8ÿ(gËù+ßFúõOøF´¿ùóµÿÀ(?øŠ?áÒÿçÎ×ÿ ÿâ(þÓò‡ö|¿˜ò½ôä™ãutvWSÊpA¯Rÿ„kKÿŸ;_üƒÿˆ£þ­/þ|íð þ"í8ÿ(gËù)“tÑ´H I Úª9,OVî±#6³6âNÈ EÏaä¡ÀüI?w¶ú•¤Ë5´PÃ*ý׎Öaô!+Ï5¶Æ·p?؃ÿDGUG«ÖVV²¡5°î­î×ê$ñ=´¥DÑÈѼ}J‘ïÓ®zÇÛ1o®Žâö;}Rå¼èÖHï5#†#‚br©½+5õÛÑ¥[:ß?Ú¼ùC¾ÿÞl ›A=vä·:úW\g'm?­NiB*úÿZÛèßOÕ¤‹ûbûÈ(aûDžYO»·qÆ1ÛOÌ­Sº¹“Vv,ï£}Vó(ó)ˆÒÓ%dÖôÖBU¾ÙÈë‚êüA#ñ¯K°ÿ}·ýr_ä+Ë4·Î·¦ú}ƒÿF-z‡üƒí¿ë’ÿ!^6eüHú¶_ð?RÅQ^qÞQEQEQE>™ÿ «?úàŸú¨*}3þAVõÁ?ôMnª+ÍtëW>´²»ºø’ú+ci?”£z\G¼K´ ¸Œ ²1Ï“þÕ_‡Æ×V>ðýíãim=æ™̳ê:”vBWd‚ §-žq…_˜`õÅîè®GDñ©­x¥üˆ-·6—e{yÈ•ÞqݰGÉ%•/€Ibëz…¿†¼g{¥G í”6ö× u½Ë­¹p^= *²ÆÄÄôÈáØW;Ú(¢ÂŠ( Š( Š( Š( Іî9¦³š+{ƒo3¡XæËlpØ<zVG„õéuý&Iç€G4[<‘ó ì‡H‰ê‡·§#œf€&·û²ÿ×yôcTÕ ¿Ý—þ»Ëÿ£¦¨QEQEQEQEQEQY>)½¸Ó¼#­_ZIåÜÛXO4O€vºÆÄ u¨?°5/úµ¯ûõgÿÈôÀÝ¢°¿°5/úµ¯ûõgÿÈô`j_ô7k_÷êÏÿ‘èv¸=[ÂúÌ×öúž›n·+40¾7 (ÊŠ¸!È| Öÿö¥ÿCvµÿ~¬ÿù‡ªCE‹õ ˆ¡Ty6|Óþ]ëZ5eJ\Ñ3«J5#Ë#Œ“Â^'–W’M.Fw%™ÄY$õ?~™ÿw‰?èÿ÷þ/þ.»ì_þ‡kþüÙò=Ù¿ý:×ýù²ÿäzêþÑ©ÙßQ§Ýœ?ü!Þ$ÿ Kÿßø¿øº?áñ'ý_þÿÅÿÅ×qý‘«ÿÐã­ß›/þG£û#Wÿ¡ÇZÿ¿6_üGö_!}BŸ™ÃÿÂâOú¿ýÿ‹ÿ‹£þïÐ%ÿïü_ü]wÙ¿ý:×ýù²ÿäz?²5úu¯ûóeÿÈôhÕò¨Só9}ÁºØÖ¬æ¼´û,L“3´¨ÙÚÁ€IêEw6ò¶ÿ®Kü…gdjÿô8ë_÷æËÿ‘êü;¨EÆž-Ö‚¨ •gÀöï\ÕëÊ´“‘ÓFŒi+Dߢ°¿°5/úµ¯ûõgÿÈô`j_ô7k_÷êÏÿ‘ëSvŠÂþÀÔ¿ènÖ¿ïÕŸÿ#Ñý©ÐÝ­ß«?þG  Ú+ ûRÿ¡»Zÿ¿VüT5k]WF·¶¼Oê—éö´3Ãk±ÒKˆã`v­÷\ô"€:Ê(¢O¦È*Ïþ¸'þ‚* ŸLÿUŸýpOýS[[LÐ4í.ÏM‚+t–M:Õm-îfEi–5P¸ÝŒ€3ŒéY‘ø*ÖÚ;²Ôõ+Ckaœ^tÐÇ¡‹!Áå¹M§Ÿ¦:j*„ai~·Ñç°’ÊöñÒÆŒ˜ÊÜEa™”ÎAv9R¹'œŽ*[oYÚXè6‘É9DÛöbÌ2û`xFþ9ù\ž1Î;q[PEPEPEPEPEP7v°ÞÙÍkp¥¡™ r(b¹R0FG"[AD‘C„HÑpª£€IEd[ýÙ뼿ú1ªj†ßîËÿ]åÿÑST (¢Š(¢Š(¢Š(¢Š(¢ŠÂñ·üˆ^"ÿ°]ÏþŠj©â­b].â@wÉhš&¡w,Èbi#ÜH>d8w3ž U¿È…â/ûÜÿ覨µMsYh§GNm"êÊI‘Àf3´y 9ÁUˆœ‘˜uç EmGÅ—öRk’Å¢¤Ö:+¤Ì×{×ÉIX¢l9 ?B@àsÎ…†³}&±¨é‰fó۽͹KŸ4•FE`ãhÚÃÌNaמ*[ŸZ]Yk–$â=gwÚ °Êî…!;8ãå@yÏ9úU¹4ø¥Õíµ&gó­à–Ý´¬1Ç-ˆŽîD*!¡eùT~@2I''$ñ„Áy”­/5;¯égRÓ#±?ÙWKŸ; Ëkß*á†@Èç‚jÄš®¼ž/Õlà³µ¸±¶Óàž$7%»yý–yfŒ)°¡C ’T[Ó|2š~«£&©¨ÞÍ ³ÚÄ.¤B©21*ŒœÆ>c’{“Æ.6’¿ÛÃVŽêâ) +ЦÃÊ¥ÊnÊ’6™¤uç#Š#¼sbñNm"iå[8. BÛDÏ)cyçÓÍZø¢ãí>wö`þÉûwöÚþÑûÏ7ÌòsåíûžgËÙïŒS­ü¤[ ?,Oþ‹v×hK˜œaŽQvÇÛÊNN9˜øVÔßùÿk½û/Ú~Ùö ëäyÛ·oû»¾÷ÍÛwsŠz_×õù-HüK¨ë:†ƒ“ ¬¢êñâ™n'1 \.Dn@ÊnÈç*!‰çZ¿Ñu/^Ŧ%Å…¥âÜ\Ê×;(³·,vÄœ£‘ƒ]N­¤®­·úUŤö³yðOo³z6ÖCë)Ê»AëPÜøzÒêË\´y'ë;¾ÐU†Wt) ÙÇ*ÎyÏÒ™—^#šÓQ¸µ²ÓZææMYlÉvUIûÏ¿v(Tz·$^°»e…Lº–žq8š2>Û\¸ àuè*=ÃÚ‚éÚƒ]^êVWW—æídó¢yÔyI c9ØNÐ Œ€: ~±¦A£øVÎÊݤt]ZÉËÈAfg¾‰Ù޳ÀžuTQE ŸLÿUŸýpOýT>™ÿ «?úàŸú¦·Í<9«êÍáM/Ó_]Ë©êÖ¶ÓÛ_I#4¢ £ß;ï<@=·B;Ö‰µ8<)áņú'»—F¶¹—̰ºÔ&•™Kˆy@Hûä¶Nî8ç¼°²·Ó4ûk Hü»kh–Sq;Q@ 2y8u¬§ðv†ðÚEöYcŽÖÙ-#X®¥t)ÂÆûXyŠ9áóÔúš¡ÞÕumsÅ&ü^A—s¢é÷‚É¡vdó|ó…3hmËËlù”(À۸ǥë:Þ£¦øSPÔ“H2jò+À±Ú¹6¥¬ç“xc'$áGaY×'9-§†ô»ìf´‚X^ÊÙ-!Ùq _)A ®»± Ž7ƒ‚r9枺š–u’@Éš¡mÊàÄMÃ’v; “ß=@402|?â‹{UžÅmá„éà¥ónÜ$“s òpyL£ÇÓn2oQT Ñ´ëg³x-R&²ˆÃŒ•Û+ÇQÀ89äÔUú(¢Š(¢Š(¢Š(¢Š¯~‘ɧ\¤×mDÁçI<¶Œc– ØŽ¹¬oêzŽ«¡yú„yÛ3Çou·gÛ! 6ÏáÜ9Çâ8"·¦†+˜^âIb‘Jº:†V¨ õð00("ßîËÿ]åÿÑST6ÿv_úï/þŒjš aEPEPEPEPEPMSO‹WÒ/tÛ†u†ò·‘£ 0WR¤Œ‚3ƒéY¿Ø—ý Ú×ýú³ÿäzÝ¢˜_Ø—ý Ú×ýú³ÿäz?°5/úµ¯ûõgÿÈõ»Ea`j_ô7k_÷êÏÿ‘êK?j7PLþ/ÖÃI¹+C‘Ï'“ÅO¦Å­sö{Oø„Êc2 –ÆÞ!"t/j¯Ì¼®G#Ö´5 ÝÝi3´ŽHºß™öbÌp»­#„oã™ñžïÅVñš%ýþ“¥é·ßf×L„Æa É ³«,®Ã²íi7?œüUÚMÿ>7?œüU2Š.Àö“ÏÏçÿU­¢³‚7eTBMEQE (¢€ (¢€ (¢€ ŸLÿUŸýpOýQE5¸ ¹Ò4ÛØ. »Óí'ŠáÄ“Ç,*Ë+39 *ŒžÀzT?ðh¿`’ÃûOûŒíþÌž[0A+Œ¨úéEú0ê‹0éöVÞO‘go‘EÈ•|´b UÀà«8ùG¥Vè’ Pú6žÂÓþ=ÃZ¡òyÏÉÇËÏ¥Uý¯™+á4¨¢Š‘…Q@Q@Q@Q@Q@ÿv_úï/þŒjšŠ*QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEÿÙ endstream endobj 203 0 obj << /Type /XObject /Subtype /Image /Width 357 /Height 194 /BitsPerComponent 8 /Length 13382 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream ÿØÿàJFIFÿáJExifMM*2:(&Áà† &Áà† ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀÂe"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?öªŸLÿUŸýpOýT>™ÿ «?úàŸú¨[”r~Ó4;ÍOÖµm¤ÖÙÔÝ]Ê@™.·|Ñnê|¨N˜cÖõO8êÚ (ÖÆ™ý•åG·Ëóü¬ç÷íý÷ÞÆÞØæº¶Ð´‡ÔƦÚU‹j¥Ñ·C(ÿã?­?û#LþÔþÓþδþÐÛ·í^Bù¸Æ1¿Æ=ê–âg¦]^?Øô‹mE´Ô»Ôu‰^æ4Frc¼|F»Ã.Nön„â3Z½ ø†ö÷PÑbº»‰âžÛQWuUU¸x."Ž9¦äÞØcè1Ò\èÚU홳ºÓ,çµ24¦ `VBìÅ‹m#%‰'®I=è»Ñ´­BÎ+;Ý6ÎæÖ,ypMº&Œ ãì5]__Ô4Ûkmqí­î®ï5¼1;:Ax‘C´²²Œ+c89rpG}UmôÛC¶²¶„Äc1Ä«°;p08ÜÀê@&­PEPEPEPEP=Wì_ÙŸÚ[~Ãä¿Ú7g0wtç§§5•àÏíìø›y˜ó_ì~úÿ³ç÷~wý4Ç_Ã<æº("ßîËÿ]åÿÑST6ÿv_úï/þŒjš aEPEPEPEPEPEPEPEPEPEPEPEPEPSéŸò ³ÿ® ÿ Š‚§Ó?ägÿ\ÿAÖàQ´ñW‡õLZv³c0ÚLVS¬î`»Š¡$(,2ØÀÎIš±§k6zšþéöHe¸‰b€íäJb‘€Ï*Ú\àœW £vÓá·†g—Sµ6ŽšBEµ«Ã*«On¸i<Ö RŒç°â¢Ó-ôôñVyw5°k­jÛd…oí%1Ç€ÁX·ÏòwíhÅõ +Ë×SÕ›Æ ú…µµèÕ¼´‚]Zewµó0ÙˆŠ0h¹ß¸àœ– uµy#¾Ôî/o®'}BþY®£Ž5º‘UV<íà ÁÆ@àqG@êuQEQEQEQEQE2i¢¶…æžTŠ(Ô³»°UP:’OAO#"«ß¼qé×/5»Üı1x?1¤åB÷'¦+Áºf£¥h^F¡&7Lò[Úîßö8IÊC¿ø¶Ž3ø  Vÿv_úï/þŒjš¡·û²ÿ×yôcTÕ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ŸLÿUŸýpOýT>™ÿ «?úàŸú¦·Õ£x›M×ö<_4o™%›O¸†7CŒyU³F#ž•±T ¢Š(¢Š¯a{o©éö×ö’y–×1,оÒ7#Tàò2ë@(¢Š(¢Š(¢Š(¢Š(¨n³šêáŠÃ $`¥° dœM: ⹂9à•%†E’#eYO ‚:ŠÌ·û²ÿ×yôcTÕ ¿Ý—þ»Ëÿ£¦¨QEQEQEQEQEQEQEQEQEQEQEQEQETúgü‚¬ÿë‚è" ªCÄZV‘ac íÖÉZÝ"Fò09!AÇãU¹;$)4•Ù‡áí ]´ømoZ¾¥ý ÚÃÌpƶӘFÐ6Æ® ·3ùÉæ±®´¸¥ÑõÄðXÛ¿‡nโKG‰®.YWÊH̲%Æs¸rk²ÿ„ßÃÿóù7þMÿÄQÿ ¿‡ÿçòoü›ÿˆ­U*‰ß•ýÆn­?æ_yoàMø¿RYtv±:m C$9I%ó.7±'† ™c–óUô› /ê §Í«(AªÜ27œÁ¬å,&cÎ<М7C´ WAÿ ¿‡ÿçòoü›ÿˆ£þÿÏäßø 7ÿOÙTþW÷´§üËï8}O¸¸ñ&eÐc¶Žy&‡T‹û"u>[A/É=ÌŽVà ÎÒ Ç#8=‡ÃË+m;ÁZ}œ:kX\A qÞÆÖ†÷ ‡~ToÉ|du8«ð›øþ&ÿÀI¿øŠ?á7ðÿüþMÿ€“ñ½Oåp{Z}×Þt4W=ÿ ¿‡ÿçòoü›ÿˆ£þÿÏäßø 7ÿG±©ü¯îkOù—Þt4W=ÿ ¿‡ÿçòoü›ÿˆ£þÿÏäßø 7ÿG±©ü¯îkOù—Þt4W=ÿ ¿‡ÿçòoü›ÿˆ£þÿÏäßø 7ÿG±©ü¯îkOù—Þt4W=ÿ ¿‡ÿçòoü›ÿˆ£þÿÏäßø 7ÿG±©ü¯îkOù—ÞmÝÉ46sKonn&D-!ÂùŽ'ŸZÈðžƒ.¤Éó‰&žâK—Ž>!œäÇ=võäñœTð›øþ&ÿÀI¿øŠ–ßÅúÕÂAë $!WÌ‚Džƒ, PéT_eýÃö°}Q-¿Ý—þ»Ëÿ£¦ªö‘ÞÉl²¤6ûf&Q™˜–ÇÝ÷©ü‹ÿùãmÿÛÿˆ¬ ¢“È¿ÿž6ß÷ý¿øŠ<‹ÿùãmÿÛÿˆ¦ÑIä_ÿÏoûþßüEEÿüñ¶ÿ¿íÿÄPÑIä_ÿÏoûþßüEEÿüñ¶ÿ¿íÿÄPÑIä_ÿÏoûþßüEEÿüñ¶ÿ¿íÿÄPÑIä_ÿÏoûþßüEEÿüñ¶ÿ¿íÿÄPÑIä_ÿÏoûþßüEEÿüñ¶ÿ¿íÿÄPÑIä_ÿÏoûþßüEEÿüñ¶ÿ¿íÿÄPÑIä_ÿÏoûþßüEEÿüñ¶ÿ¿íÿÄPÑIä_ÿÏoûþßüEG7ÚíÐI,0lÞªvÌIå€é´zÒZ(¢€ (¢€ (¢€ (¢€ òí]±¬ÜsüèˆëÔkÊ5ÆÆ·qÿ\àÿÑ×~]üo—ùXÿá|Ë7zk[Nöés ÍÂ;#ÃÈXmÎãʃÐÔ"Æù¦xVÎàËÐDÛ”rF8«ÒëáõÛÉÖHVnL2Çn¨ä²8L°PÜ–~¦¡Ó5UÓ´ßgY4<þn yg9=G~ÝýE)¥ªþ¿Íqƒz2œ\\ïò –]ƒ-å¡m£ß*MF$´Ôîí£,Rž5-Ô€ÄsV ü‹0{Õ´¶=ÆñaÃc$ƒ€½Ö¨j·QÜë³ÂÛ¢’âGFÆ2 5qrrÔ™$£ ÝôoªÛèßZ–wѾ«o£}YßFú­¾ôg}ê¶ú7ÐôoªÛèß@âýì©õMÄ Îp¹ö¦jQKkÌ3)IQAúpúõOœžq+pß³Ç|g½?YÔŸPWb¡#Ž*$í@8ïõ¨w¿‘jÖó=NY¿³¬È’0žL)Œ“÷G|ÿJ· ”ãËt_]È[?¨¨4ÏùYÿ×ÿÐEZ¯š[B4‰<¼PøûÅr?,ÿZ#ýã«õUÛýM:Š`GÌ÷’FÃ2¿ÔÐVo3"HÂgî˜É?ž¥IE2A)Ç–è¾»¶QJDž^¨|}â¹–­:Šlb@¿¼ucžª»©¦Æ³ýä‘°ÇEŒ¯õ5%Y¼Ì‰# Ÿºc$þyþ”² N<·EõÜ…³úŠ}Ò$òðCãïÈü³ýhŒH÷ެsÕWoõ4ê(8Ö`ß¼’6豕þ¦‚³y™F?tÆIüóý*J(’ N<·EõÜ…³úŠR$òðCãïÈü³ýiÔPcýã«õUÛýMQÔaiûÉ#aæÅÂÆWþZ/¹­ §ªÇ—ýµ‹ÿF-'°"*(¢¤aEPEPEP\n©à›ÝRH5 íÇŸo˜“³."®Aö»*ŸLÿUŸýpOýV´ªÊœ¹¢gRœjG–G›ÿ»׿ç¶ÿŸÿˆ£þÞ½ÿ=´ïûüÿüEvð“Žÿ„«ìŸó þÒû7™ÿL¼Í›±øgø©§ñ…‹^›»ÀµµX¡µ‘¤bIaWq‘°Ûò£¡Æ2¤×W׫w9þ¥G±Ã»׿ç¶ÿŸÿˆ£þÞ½ÿ=´ïûüÿüEuçÆV']Ó4Ø ½•/íå™f[9ÈB’${XlùyvÜX›FìnpøŸG·ögÚÏÚ|ß'>Kù~f3åù˜Ù¿û>Ô}z·pú•Ç ÿ ï^ÿžÚwýþþ"øWz÷üöÓ¿ïóÿñÛ\x¿CµÔEŒ×n&7 k¹måhüç ,~`]›²ÃŒäu8ÒÇâíV» u![7xç“ìÒìYO,¦ý»KîÀ c@"¯VîR£Øâ?á]ëßóÛNÿ¿ÏÿÄQÿ ï^ÿžÚwýþþ"»cã tû›énä‚Y#Žqqm,O‘‚¦äu $`ãyàÔ?ðœèºîüèÆçƒû>ãÎUþùfàŸíco½^­Ü>§G±Çÿ»׿ç¶ÿŸÿˆ£þÞ½ÿ=´ïûüÿüEzu¼ñ][Eqo"Ë ¨9ä2‘Aô"¤£ëÕ»‡Ôèö<·þÞ½ÿ=´ïûüÿüEð®õïùí§ßçÿâ+Ô¨£ëÕ»‡Ô¨ö<·þÞ½ÿ=´ïûüÿüEð®õïùí§ßçÿâ+Ô¨£ëÕ»‡Ô¨ö<·þÞ½ÿ=´ïûüÿüEIoðãU’tKË›4·'÷†)›opP?Zô‹¹'ŠÎi- ΈZ8KìÞÀp»»gÖªèÚÕ¦»aö«FaµÌSC Äȼ28ìÀÿˆâ“ÆÖj×ÁÒObm3þAVõÁ?ôVª®™ÿ «?úàŸú«Uȶ:‚¹ê7zh©õõœwZ†y,-EÄżΡŽLüȹœz šéë/ZÑF°,™oî¬g³¸ûD3ÚˆËòÞ2‘HÛ#vô wEñÚÿnfæëP·±H7ÔáKƒ>íûÃ,xŒ§yAŸœ Äb›Ä5žÂþH-lo®ìæ´ËÓu%¸ŠAq0‰q&Õû*@è9ÁÍj¿ƒ­n-o£¾Ô/ï./"K¹š1"ˆ\¼AB"  ÄŸ»ÎNsIƒmüë‰îµ=Fò{‡³w–vŒôiŒÑ€@,p@C“Lø]ÂU÷mù®(ÙR8<æ¬êž²Õ¥¾–y'W¼†Þ(Àlò$yceÈ<îrNrrí#Ãë¥jwï¨ß_]]Å2ItÉÂÆ\®Ðˆ¡Ö7AŽòHÅQ@Q@Q@Q@SÕ?ãËþÚÅÿ£®U=Sþ<¿í¬_ú1i=QE# (¢€ (¢€ (¢€ ŸLÿUŸýpOýT>™ÿ «?úàŸú¦·Šÿ…a¤½þÈþÄÐÿ¶ÿ²¾Íöϲ'ü|y[|Íû7}þwc=úÖž¡á«¹ÿµÝmì®Ö¦—¤·ÀUVÚ(r%@Z7Ê7 ”ã¿eB9; \±¹ÐîäžÞö{X®m®|ë—ÊÅ4±¸*å ‘‘b ómÝÔ‘L>ÕüÏìÐö?ÙÚ¿ÚhÞþúÿ´y{6íÿYÆíßw¹®¾Š:Ü:Xó=Uî¬õ(¼5oq¦Î$×`¾yö½t·/û½¸Ú¹cænÆn3]0еH<)}§ÙÝÇô×·7)*;(Ù%ÓË´°RQ¶–•'#8ÓQG@êpž Õ„÷óNð ¹—Ltõ‹Â¢ÚèË 2J3Êžg°åW›,^*¿Õ£0ÜY[[¢‚wçfÏÆ%\sØþ:”P_†ôé´ i]Ã#Oge ¼%K"$dŒAZ”Q@Q@Q@ÝÇ<¶sGm8‚wB±ÌS~Æ#†Ûß•WFÑm4+²Ú+ÎešidšFåÏv'ü¡EUÓ?ägÿ\ÿAjªéŸò ³ÿ® ÿ ŠµBØŠ+ÅÚΟé¾sZæ('ò%–-­•I?„î(zŒ€FFhn£šxm<ò¤H]P3°PY˜*Ž{– Ü+Œ¶Õ—Hµ¸ŽÚ=V´»°Š[-^spbŽ{ô}휂øùÈ:AouKÆkí6Ý-ɵ“F¹€É‘™$¿+‡?ÝýÒtäõã­ÅÄ6–ò\\Í0Æ¥žI*¨I'€(‚xn­â¸·•&‚T‘°eu# ‚8 ŽõÀx–÷]žÎãF¹¸Ó~×o}¥Mö„´s‘ÍvTÆdÈ!ãÉùˆeãå'#Hkúݬž!º¼}=ôý5a·q-É‘ÌÛs!üÏÆwqÇQ¸€v5ž¸Kv•îŒéa¹•H @ê@, žÛ‡­q6>4Ô£ƒP¹Ôl¤šÞÛM–ü¼z]Õ¢ÆÑ€L[¦I 1÷NTqSÙkþý(ëéòÒ/?±Æé´™mw)ÜÍ»a†3Ï€;:(¢€ (¢€ (¢€ (¢€ §ªÇ—ýµ‹ÿF-axÆþóJ:uÞ—+Ë©Ä1i¾[Õb7‚?„ªÛú.x8­ÍO&Äd`ù±qÿm“ØQR0¢Š(¢Š(¢Š(©ôÏùYÿ×ÿÐEASéŸò ³ÿ® ÿ Škp9/Ç]éÚh:5ýî¡>“k©N–1§–‹0n…Üt(ß.I#Ï8¿¦øÂÓTŸOØêZê ýŠòhÕcœì/€7o*±”Á4ÿxgþÿ'ý/Ïòô«=7ý^ÜýŸÍùúŸ½æô펧<^û&™á{?µïþÂÙóùxóöÛILü¿ë7wéŽùª$’ÛÄ©6£mi>—¨Ù­Ùeµžæ4T™‚—Úbêv«:©ùOz­iã;[Ëý:Ý4ÝEmõ)^;;×<™¶Æòn>à ¡ÆTg €FHÊÒ~3[Ó5&»±‘ì%wó“N sr'÷Óï%ÏÎ@‘Ó¡4í7R‹Äš—·riš%Ä¥V]9¡Ä –(ó1b²ŸB쌖æ5‡Ší5 Ëh’Îö+{ÂËgy*(Šä¨,va‹ ª³ ʹ‘šÞ®7@🇵;yíbÒD»„,šTiu‚¥pÓç-€z…÷''=•QEQEQEQECwöŸ±Íö3¹Ø|¯8›±ÆìsŒúVw‡uø¼Aa,«Asm;ÚÝÀÇ>TÈpÊ£B:ƒÛ¥hÝÀn¬æ·Kš…<Ø[k¦F2§±÷¨ôí:ÓJ°†ÆÆ†Þ!„EýI=I'’O$œÐ¦È*Ïþ¸'þ‚*ÕyF½®^ÇrÑ}¶âÞÚÎÞ  Z?ùd®IÚFOÍúTÖÚ/-£¸ŠeŠ92¥Î·p²¼6ý ®«òÁJRJç?·¼œcØõ§©ivzµºÁy:+‡FI7FÁVRN ¹¯#º¼ñ—¨Gg©Þ\!›pŠ[]RyQ™z©,ƒŽGàÓÿ´oÿè)¨ÿàl¿üUk šæŒ•ŒçŒP|²‹=2? èÑØÝÚW–;½¾{Ï<’É&ÞW2;ùO#ž#ü!k{È%³–t½ò~ÒgºšV—ÊrñîfbNžüŽ@Åyá¾Ô„bC¨êa• öÉpHÆFw{ÌS´oÿè)¨ÿàl¿üU_ö|û¢>¿ÌôÛ éÖÒ@–ò:Éè>¿ÌöZ+Æ¿´oÿè)¨ÿàl¿üUI5Þ§„“RÔUŠ«öÙ ÷½£û>}Ð}~™ì4WhßÿÐSQÿÀÙøª?´oÿè)¨ÿàl¿üUÙóîƒëðìÏe¢¼kûFÿþ‚šþËÿÅQý£ÿAMGÿeÿâ¨þÏŸt_‡f{-ã_Ú7ÿôÔð6_þ*íÿú j?ø/ÿGö|û úü;3ØL4ë9‰ Ê¥B£pS‚@=pp?!UõOøòÿ¶±èů&þÑ¿ÿ ¦£ÿ²ÿñU·á½Vök¹lgºšxYQçH]•–hÇœàîý+:Ø)Óƒ“{RÆBsQHîh¢Šà;Š( Š( Š( §Ó?ägÿ\ÿAO¦È*Ïþ¸'þ‚)­ÀµEy®âÝjçÁö–WwB__Elm'ò”oKˆ÷‰v·6F9òÚ«ðøÚêÇÂ^½¼m-§¼Ó ¹–}GRŽÈJ쀰A´å³Î0«ó ¸¡ÝÈèž"Õ5¯¿‘¹ÐæÒì¯b/9 ›Î;¶ù$ R¥ð‚ ,@¡à}oP·ð׃ìït¨á³½²†ÞÚán·¹u·. Ç´VXØ‚ž™<; ç{ERQEQEQEQEQPÝÇ4ÖsEopmæt+ÁymŽƒJÈðž½.¿¤É<ðæ‚âKg’>aàÉ=PöôäsŒÐ•xĶuu_¼lÓ_³%z„ZÒ±O› qùWœøž-uS,鲈!hÙº0"ž~ ñYÚMõ¦ ñË%ÄêòïEó¢Ä»Tl'Œ‚{}êôªQ•Z0pÖÈóéÖ:³SîikÖØG\ÜyÒ\kOÉ>\fÝ”/#ÔÆG5gC¸òWQ“íÛíµ½€e×÷±Ž9NµªjVwéj#6‚o3t—ia±×nO#ïçÿ×Ež«ªÊ­¼âP‰$qÀ9ÇÈËž@<ç ®Œ=)B“Œ·¿—‘†"¤gUJ=¼ÎŠ$´»h®§yòLÅ]Äp+(?1Æ =Ïô¨ ‚ÒøYL-„[Þth¢v"O-À‰ ¶ìVºª³“ ‰o͈¢•¶®å ØËÈóÍD/ª*Üà#@$û¬q’=òºƒïýj`ä»Z¡*>‡a"Z‹`×üªXƒÄ\ÄŸn½\ÓL7 ýÁ#ˆÚMŸrOýðü×3\½Æ­-Þ>Ó|ó`’<ÉKc8ÏSì?*ˆ_*ÆÑ‹€ˆb¡ø$g‰üèä¼mpç´¯c«–(ìôöŠkq<–a ± “$±ÚAà*/^¦£ž +¯ek?5‘íü¸äv?26vS‚ Áõãëžv=ZX®Zæ;çIÛ%¥Yˆcž¹9ÍFÚ†àá®rƒ¸2}æÁ>§“ùšps]Ó˃]½¤vA7Yý¤Iæ1eo'ÍÀç{r ÷©®ã†y³*ßÙ±Ì.w6r°8û»Izg'­rÚ'~ÿµ|û6nó9Û·n>›xǧ#k=¿ÙÞþF‡Ý™‰^ÇÊ—³zj>uØé`Óíä³d’8ah×ç•¥á ÀòÀ8èyÁëš§¯\¤—p„¶Š[@r…ŽàbLIéÐ~¹¬uÖ®Ü[®£(„bc·`ñœr üê95&–(â’ì¼qdF&Bg®x§5+¶)I8Ù"22©ýª/ùêŸ÷УíQÏTÿ¾…ktef\ó(ó*ŸÚ¢ÿž©ÿ} >ÕüõOûèQteÏ2¶¼(ÛµÇÿ¯qÿ£á®gíQÏTÿ¾…tþ †Yoç¼T&Ý#HŒ·¢ g覹±{ Tý´OH¢Š+çÏp(¢Š(¢Š(¢Š*}3þAVõÁ?ôPTúgü‚¬ÿë‚è"šÜ Úf§ivzl[¤²iÖ«ios2+L±ª…Æì dœ`JÌÁV¶ÑØ­–§©Z[´âð¼{¦†<í Y-Êm<ý1ÓQT#„žÆãÃ:öƒc F× $ÛÈ—W‹ rÁlQy;àŸ—g|äqM¶±ñ¥Žƒi¦ôM¿f-­I—ÛÂ7ÿ¢sò¹™â 3X•¢²ÙÕd…âÞ‡ë½Fõÿir=è?wŠ¿è§àþçÿ‘èÝâ¯úißø?¹ÿäzÐÔµý;I”Eu$ÆMžc,ÒLQ9˜"«Áäàp}* ¿h¶w —RI+[¥Ð[{y'Ì,X+üŠ~_”óÐqž£ ·x«þZwþîùÞ*ÿ VÿƒûŸþG«—ž'Ò,RÝå»,·yñ˜"y¿uÇïÀv§#æ8õ•ý³ÿ ûsíñ2þÂûg±Öù÷mÆß½Î1j³»Å_ô Ó¿ðsÿÈônñWý´ïüÜÿò=]½ñ.“§_}Žê褣nò"vH·/˜àLöÜEI>½§[j‰§I3›¦Ú ¤.ꛎ{(*™=7šÎÝâ¯úißø?¹ÿäz7x«þZwþîù®ŸéCP[´Iæ´¾H“È“Ê2g<Ý»7d·vsÇZ«£øºÃTÒ¯u RâÎ9eIZæÞX×jHè.‹’Bd¨ÉRvžh›¼Uÿ@­;ÿ÷?üHOŠ7icCaµë‚2GßÖµtÍbÇWY~É$…¢ Iм2&FFQÀ`cŒtZ½„ÌŠ— ¹îÕURe@Å—Ð#BE?í~,ÿ .‹ÿƒyùµø³þ€º/þ åÿäjuÇ‹t[hÑÞíØ?˜G•o$„,lQØ…RU7/½-çŠôk‘m-Ì1.B[ÛÉ9ò˜°ò)ù~SÏn3ÔdŸkñgýt_üËÿÈÔ}¯ÅŸôÑðo/ÿ#T¶>)ѵ+¸­­.Ì8&ò\E6HI ìrI IàúVwƒ¼[i­èº:MvòjSÙG$Œð4k,™±¶„b 9 N=±E„\û_‹?è ¢ÿàÞ_þFªš¦·âm#H½Ô®4=!¡³î$Xõi E,@͸Àõ«Ñx¯GžSSÎçËi#"Ò]³ªŒŸ)¶âSŽp…‰íXÚŽ»‰>êú¤vóÁçèó;G,N›Y ,B–UÞ¿6ƒÚ€;:(¢Â§Ó?ägÿ\ÿAO¦È*Ïþ¸'þ‚)­ÀóOjú³xSKðä××rêzµ­´ö×ÒHÍ(‚h÷ÎûÏ;£"PmÐŽõ£câmN xqa¾‰îåÑ­®eó,.µ ¥fA’âP>ù-“»Ž9ï,,­ôÍ>ÚÂÒ?.ÚÚ%†ÜNÔPŒžNk)ü¡¼6‘}–Xãµ¶KHÖ+©cÝ p±¾ÖbŽx|õ>¦¨G¥kz׎>öYqiwá(ï-í†q›*$‚ÄŽXÈ 1òäèKà;Gðþ·Óô¿í«ïí*øÂ7=åÙºM»¸Iœg¸©{á{;ZÒ/ü9§éì¶ZdšcGuw$DEº# #¶Ýן›©«ñý´?üËÿÈÔžàQ¿ðõÕÖ“âûT’&³æ}œ±8]Ö±Â7ñÇÌ„ñžïÅSñ‡µ»«ZigOh5¸Žù.¤uh\±S¸Eî0I<ô­¬ø¿þ€Úþ åÿäj3âÿúhø7—ÿ‘©X z®Ÿ«¤ÝXHÅâ&zõBG =ÁÁâ¹;°êzeíåÅ»Vžý#ÉÜï‘ÓnGÜVžSÏ?*~yñý´?üËÿÈÔgÅÿôÐÿðo/ÿ#Qf ÊÒ|=ªÚ¾‰gtö_`Ñ 6òÄìeŸ4I½J€˜W$à¶H*{ÝZé´w€¾åý ©8m¶²BvqÏÌàóŽ3ߊ½ŸÿÐCÿÁ¼¿üF|_ÿ@mÿòÿò5`d_ø{V:›ßØ5‹H5¥Ô'v£BÜ©!N¶yäÏ'Š&Ð5É4ë©âïo5wsRBŒ‚%ˆD³*ï^°PI`Zùñý´?üËÿÈÔgÅÿôÐÿðo/ÿ#SÔvÃÂÚÖŸÚSì’ÝÇ«B8f¾žE(m>ÎQ¦ugÈÉ9Áè:g²Oµý¾mþGØü¤ò±Ÿ3ÌËïÝÛn<¼cœîÏjÏÏ‹ÿè ¡ÿàÞ_þF£>/ÿ 6‡ÿƒyù•˜ÎwÅž×uÖÕa·º »€Çn_Q¸móÒ¦(ÆÙlœ±þ,`ƒ©áë«­'Åö©$MgÌû9bp»­c„oã™ ã<ߊ½ŸÿÐCÿÁ¼¿üF|_ÿ@mÿòÿò5`s¾,ð®»®¶« ½ÔmÜ;rúÄ o˜ö•1F6È dåñc ñ©²SU¹„jÚ–§Ö¶dóR(#ÉÝ~21Éç²—Þ+1&ò»!ί/PH?òííNû_‹?è ¢ÿàÞ_þF  þ•4­:ÖÆ.fµWÝq5ܶ³or H$ˆ–l³.0IŒU{ï êrÜYÞ‹“{v¶YÝ©\X‰ 0sœ—l«LÎuþ×âÏúè¿ø7—ÿ‘¨û_‹?è ¢ÿàÞ_þF A}¡<¾¹ðý¨†)Lk(†æòИŠN[hã®N=j½ÿ‡®®´ŸÚ¤ 5Ÿ3ìå‰Â¿Ž>d'ŒðG~*ÇÚüYÿ@]ÿòÿò5kñgýt_üËÿÈÔ v­¤ÞÝê‘^Y\Çlñé·v©!hå•¡(Áq‚”sϧáÎÛø/S¹»¹mBUŠ *çOr5;‹ÇÝ)çhF¸P;uíÐ}¯ÅŸôÑðo/ÿ#Qö¿ÐEÿÁ¼¿ü@\åm^ãÆÜ–—éíè—vSK§HòyO3B>}Ê»„b#ä®Ó“Ínøs÷zv¦.ïb|víKý©utÌœ,ǃ°p7×âÏúè¿ø7—ÿ‘¨û_‹?è ¢ÿàÞ_þF¥`(EáýWEkwÑ•ÃfÃa(¼vL‹VÝ“#eN3Ç"®h>}ðbe–Þ=*ÊÂ6<90²Hè/~ÇñÚüYÿ@]ÿòÿò5kñgýt_üËÿÈÔÄW°ðõÝ®‘á G’&åý ©8m¶²BvqÏÌàóŽ3ߊ§áÿk––Þ³Õœ°h‘‚²ZÈìÓ8…¢«( vç'$…éZŸkñgýt_üËÿÈÔ}¯ÅŸôÑðo/ÿ#P0ôï ë±ëºEî¡ußbäžfÔn%7¡‘,,q¸8ã8=Œ—ÖÚW [L¾[pöZ4ÖѼ³‰ *åWi89^@õ5±ö¿ÐEÿÁ¼¿üT5¸‰ªë2éºm½•÷öÚZÙ¾Ÿ§Ànk\Ç ><üìKqË e³Wm5Ïê-ÔóÜ-Õ¦¯ö725¢Ýɲ\”ǦÕ<Ò„wo{o¡ ƒI‹™¢’hÓiå cžœóö5b¼¿Pñ%Ü:§jÒ\Éö F ®®âPmBÜÛ#É*GÃ*AÙÁÆr$jkÚŽ¯¤ùsfæ]2ÖÅgžêÑ-^BrÙ–XØ Ä@ò°NÚ€;Ê(¢€ (¢€ (¢€ (¢€ (¢€ *ž«ö/ì‹Ïí-¿aò_í³˜;ºsÓÓšÊðgö¿öüM¼Ìy¯ö??ýÙóû¿;þšc¯ážs@­þì¿õÞ_ýÕ5Co÷eÿ®òÿèÆ©ªQEQEQEQEQEQEQEQEQEQEQEQEQE>™ÿ «?úàŸú¢Škps¤i·°\Aw§ÚOÉ'ŽXU–V(fr@U=€ô¨áÑ~Á%‡ö>Ÿö);Ûý™<¶`‚W$QôÒŠ)ôaÕaÓì­¼Ÿ"ÎÞ/"6Š‘*ùhÄ«À%W qòJ¬þÑ$¡ôm=…§ü{†µCäóŸ“—ŸJ(«û_2WÂiQE# (¢€ (¢€ (¢€ (¢€ (¢€2-þì¿õÞ_ýÕ5T (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠÿÙ endstream endobj 204 0 obj << /Type /XObject /Subtype /Image /Width 525 /Height 251 /BitsPerComponent 8 /Length 19790 /ColorSpace /DeviceRGB /Filter /DCTDecode >> stream ÿØÿàJFIFÿáJExifMM*2:(&Áà† &Áà† ÿÛ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ÿUŸýpOýT>™ÿ «?úàŸú¨[”r~Ó4;ÍOÖµm¤ÖÙÔÝ]Ê@™.·|Ñnê|¨N˜cÖõO8êÚ (ÖÆ™ý•åG·Ëóü¬ç÷íý÷ÞÆÞØæº¶Ð´‡ÔƦÚU‹j¥Ñ·C(ÿã?­?û#LþÔþÓþδþÐÛ·í^Bù¸Æ1¿Æ=ê–âg¦]^?Øô‹mE´Ô»Ôu‰^æ4Frc¼|F»Ã.Nön„â3Z½ ø†ö÷PÑbº»‰âžÛQWuUU¸x."Ž9¦äÞØcè1Ò\èÚU홳ºÓ,çµ24¦ `VBìÅ‹m#%‰'®I=è»Ñ´­BÎ+;Ý6ÎæÖ,ypMº&Œ ãì5]__Ô4Ûkmqí­î®ï5¼1;:Ax‘C´²²Œ+c89rpG}UmôÛC¶²¶„Äc1Ä«°;p08ÜÀê@&­PEPEPEPEP=Wì_ÙŸÚ[~Ãä¿Ú7g0wtç§§5•àÏíìø›y˜ó_ì~úÿ³ç÷~wý4Ç_Ã<æº("ßîËÿ]åÿÑST6ÿv_úï/þŒjš aEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPSéŸò ³ÿ® ÿ Š‚§Ó?ägÿ\ÿAÖàQ´ñW‡õLZv³c0ÚLVS¬î`»Š¡$(,2ØÀÎIš±§k6zšþéöHe¸‰b€íäJb‘€Ï*Ú\àœW £vÓá·†g—Sµ6ŽšBEµ«Ã*«On¸i<Ö RŒç°â¢Ó-ôôñVyw5°k­jÛd…oí%1Ç€ÁX·ÏòwíhÅõ +Ë×SÕ›Æ ú…µµèÕ¼´‚]Zewµó0ÙˆŠ0h¹ß¸àœ– uµy#¾Ôî/o®'}BþY®£Ž5º‘UV<íà ÁÆ@àqG@êuQEQEQEQEQE2i¢¶…æžTŠ(Ô³»°UP:’OAO#"«ß¼qé×/5»Üı1x?1¤åB÷'¦+Áºf£¥h^F¡&7Lò[Úîßö8IÊC¿ø¶Ž3ø  Vÿv_úï/þŒjš¡·û²ÿ×yôcTÕ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ŸLÿUŸýpOýT>™ÿ «?úàŸú¦·Õ£x›M×ö<_4o™%›O¸†7CŒyU³F#ž•±T ¢Š(¢Š¯a{o©éö×ö’y–×1,оÒ7#Tàò2ë@(¢Š(¢Š(¢Š(¢Š(¨n³šêáŠÃ $`¥° dœM: ⹂9à•%†E’#eYO ‚:ŠÌ·û²ÿ×yôcTÕ ¿Ý—þ»Ëÿ£¦¨QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQETúgü‚¬ÿë‚è" ªCÄZV‘ac íÖÉZÝ"Fò09!AÇãU¹;$)4•Ù‡áí ]´ømoZ¾¥ý ÚÃÌpƶӘFÐ6Æ® ·3ùÉæ±®´¸¥ÑõÄðXÛ¿‡nโKG‰®.YWÊH̲%Æs¸rk²ÿ„ßÃÿóù7þMÿÄQÿ ¿‡ÿçòoü›ÿˆ­U*‰ß•ýÆn­?æ_yoàMø¿RYtv±:m C$9I%ó.7±'† ™c–óUô› /ê §Í«(AªÜ27œÁ¬å,&cÎ<М7C´ WAÿ ¿‡ÿçòoü›ÿˆ£þÿÏäßø 7ÿOÙTþW÷´§üËï8}O¸¸ñ&eÐc¶Žy&‡T‹û"u>[A/É=ÌŽVà ÎÒ Ç#8=‡ÃË+m;ÁZ}œ:kX\A qÞÆÖ†÷ ‡~ToÉ|du8«ð›øþ&ÿÀI¿øŠ?á7ðÿüþMÿ€“ñ½Oåp{Z}×Þt4W=ÿ ¿‡ÿçòoü›ÿˆ£þÿÏäßø 7ÿG±©ü¯îkOù—Þt4W=ÿ ¿‡ÿçòoü›ÿˆ£þÿÏäßø 7ÿG±©ü¯îkOù—Þt4W=ÿ ¿‡ÿçòoü›ÿˆ£þÿÏäßø 7ÿG±©ü¯îkOù—Þt4W=ÿ ¿‡ÿçòoü›ÿˆ£þÿÏäßø 7ÿG±©ü¯îkOù—ÞmÝÉ46sKonn&D-!ÂùŽ'ŸZÈðžƒ.¤Éó‰&žâK—Ž>!œäÇ=võäñœTð›øþ&ÿÀI¿øŠ–ßÅúÕÂAë $!WÌ‚Džƒ, PéT_eýÃö°}Q-¿Ý—þ»Ëÿ£¦ªö‘ÞÉl²¤6ûf&Q™˜–ÇÝ÷©ü‹ÿùãmÿÛÿˆ¬ ¢“È¿ÿž6ß÷ý¿øŠ<‹ÿùãmÿÛÿˆ¦ÑIä_ÿÏoûþßüEEÿüñ¶ÿ¿íÿÄPÑIä_ÿÏoûþßüEEÿüñ¶ÿ¿íÿÄPÑIä_ÿÏoûþßüEEÿüñ¶ÿ¿íÿÄPÑIä_ÿÏoûþßüEEÿüñ¶ÿ¿íÿÄPÑIä_ÿÏoûþßüEEÿüñ¶ÿ¿íÿÄPÑIä_ÿÏoûþßüEEÿüñ¶ÿ¿íÿÄPÑIä_ÿÏoûþßüEEÿüñ¶ÿ¿íÿÄPÑIä_ÿÏoûþßüEG7ÚíÐI,0lÞªvÌIå€é´zÒZ(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ òí]±¬ÜsüèˆëÔkÊ5ÆÆ·qÿ\àÿÑ×~]üo—ùXÿá|Ë7zk[Nöés ÍÂ;#ÃÈXmÎãʃÐÔ"Æù¦xVÎàËÐDÛ”rF8«ÒëáõÛÉÖHVnL2Çn¨ä²8L°PÜ–~¦¡Ó5UÓ´ßgY4<þn yg9=G~ÝýE)¥ªþ¿Íqƒz2œ\\ïò –]ƒ-å¡m£ß*MF$´Ôîí£,Rž5-Ô€ÄsV ü‹0{Õ´¶=ÆñaÃc$ƒ€½Ö¨j·QÜë³ÂÛ¢’âGFÆ2 5qrrÔ™$£ ÝôoªÛèßZ–wѾ«o£}YßFú­¾ôg}ê¶ú7ÐôoªÛèß@âýì©õMÄ Îp¹ö¦jQKkÌ3)IQAúpúõOœžq+pß³Ç|g½?YÔŸPWb¡#Ž*$í@8ïõ¨w¿‘jÖó=NY¿³¬È’0žL)Œ“÷G|ÿJ· ”ãËt_]È[?¨¨4ÏùYÿ×ÿÐEZ¯š[B4‰<¼PøûÅr?,ÿZ#ýã«õUÛýM:Š`GÌ÷’FÃ2¿ÔÐVo3"HÂgî˜É?ž¥IE2A)Ç–è¾»¶QJDž^¨|}â¹–­:Šlb@¿¼ucžª»©¦Æ³ýä‘°ÇEŒ¯õ5%Y¼Ì‰# Ÿºc$þyþ”² N<·EõÜ…³úŠ}Ò$òðCãïÈü³ýhŒH÷ެsÕWoõ4ê(8Ö`ß¼’6豕þ¦‚³y™F?tÆIüóý*J(’ N<·EõÜ…³úŠR$òðCãïÈü³ýiÔPcýã«õUÛýMQÔaiûÉ#aæÅÂÆWþZ/¹­ §ªÇ—ýµ‹ÿF-'°"*(¢¤aEPEPEPEPEPEPEPEPEPEPEPEPEP\n©à›ÝRH5 íÇŸo˜“³."®Aö»*ŸLÿUŸýpOýV´ªÊœ¹¢gRœjG–G›ÿ»׿ç¶ÿŸÿˆ£þÞ½ÿ=´ïûüÿüEvð“Žÿ„«ìŸó þÒû7™ÿL¼Í›±øgø©§ñ…‹^›»ÀµµX¡µ‘¤bIaWq‘°Ûò£¡Æ2¤×W׫w9þ¥G±Ã»׿ç¶ÿŸÿˆ£þÞ½ÿ=´ïûüÿüEuçÆV']Ó4Ø ½•/íå™f[9ÈB’${XlùyvÜX›FìnpøŸG·ögÚÏÚ|ß'>Kù~f3åù˜Ù¿û>Ô}z·pú•Ç ÿ ï^ÿžÚwýþþ"øWz÷üöÓ¿ïóÿñÛ\x¿CµÔEŒ×n&7 k¹måhüç ,~`]›²ÃŒäu8ÒÇâíV» u![7xç“ìÒìYO,¦ý»KîÀ c@"¯VîR£Øâ?á]ëßóÛNÿ¿ÏÿÄQÿ ï^ÿžÚwýþþ"»cã tû›énä‚Y#Žqqm,O‘‚¦äu $`ãyàÔ?ðœèºîüèÆçƒû>ãÎUþùfàŸíco½^­Ü>§G±Çÿ»׿ç¶ÿŸÿˆ£þÞ½ÿ=´ïûüÿüEzu¼ñ][Eqo"Ë ¨9ä2‘Aô"¤£ëÕ»‡Ôèö<·þÞ½ÿ=´ïûüÿüEð®õïùí§ßçÿâ+Ô¨£ëÕ»‡Ô¨ö<·þÞ½ÿ=´ïûüÿüEð®õïùí§ßçÿâ+Ô¨£ëÕ»‡Ô¨ö<·þÞ½ÿ=´ïûüÿüEIoðãU’tKË›4·'÷†)›opP?Zô‹¹'ŠÎi- ΈZ8KìÞÀp»»gÖªèÚÕ¦»aö«FaµÌSC Äȼ28ìÀÿˆâ“ÆÖj×ÁÒObm3þAVõÁ?ôVª®™ÿ «?úàŸú«Uȶ:‚¹ê7zh©õõœwZ†y,-EÄżΡŽLüȹœz šéë/ZÑF°,™oî¬g³¸ûD3ÚˆËòÞ2‘HÛ#vô wEñÚÿnfæëP·±H7ÔáKƒ>íûÃ,xŒ§yAŸœ Äb›Ä5žÂþH-lo®ìæ´ËÓu%¸ŠAq0‰q&Õû*@è9ÁÍj¿ƒ­n-o£¾Ô/ï./"K¹š1"ˆ\¼AB"  ÄŸ»ÎNsIƒmüë‰îµ=Fò{‡³w–vŒôiŒÑ€@,p@C“Lø]ÂU÷mù®(ÙR8<æ¬êž²Õ¥¾–y'W¼†Þ(Àlò$yceÈ<îrNrrí#Ãë¥jwï¨ß_]]Å2ItÉÂÆ\®Ðˆ¡Ö7AŽòHÅQ@Q@Q@Q@SÕ?ãËþÚÅÿ£®U=Sþ<¿í¬_ú1i=QE# (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ŸLÿUŸýpOýT>™ÿ «?úàŸú¦·Šÿ…a¤½þÈþÄÐÿ¶ÿ²¾Íöϲ'ü|y[|Íû7}þwc=úÖž¡á«¹ÿµÝmì®Ö¦—¤·ÀUVÚ(r%@Z7Ê7 ”ã¿eB9; \±¹ÐîäžÞö{X®m®|ë—ÊÅ4±¸*å ‘‘b ómÝÔ‘L>ÕüÏìÐö?ÙÚ¿ÚhÞþúÿ´y{6íÿYÆíßw¹®¾Š:Ü:Xó=Uî¬õ(¼5oq¦Î$×`¾yö½t·/û½¸Ú¹cænÆn3]0еH<)}§ÙÝÇô×·7)*;(Ù%ÓË´°RQ¶–•'#8ÓQG@êpž Õ„÷óNð ¹—Ltõ‹Â¢ÚèË 2J3Êžg°åW›,^*¿Õ£0ÜY[[¢‚wçfÏÆ%\sØþ:”P_†ôé´ i]Ã#Oge ¼%K"$dŒAZ”Q@Q@Q@ÝÇ<¶sGm8‚wB±ÌS~Æ#†Ûß•WFÑm4+²Ú+ÎešidšFåÏv'ü¡EUÓ?ägÿ\ÿAjªéŸò ³ÿ® ÿ ŠµBØŠ+ÅÚΟé¾sZæ('ò%–-­•I?„î(zŒ€FFhn£šxm<ò¤H]P3°PY˜*Ž{– Ü+Œ¶Õ—Hµ¸ŽÚ=V´»°Š[-^spbŽ{ô}휂øùÈ:AouKÆkí6Ý-ɵ“F¹€É‘™$¿+‡?ÝýÒtäõã­ÅÄ6–ò\\Í0Æ¥žI*¨I'€(‚xn­â¸·•&‚T‘°eu# ‚8 ŽõÀx–÷]žÎãF¹¸Ó~×o}¥Mö„´s‘ÍvTÆdÈ!ãÉùˆeãå'#Hkúݬž!º¼}=ôý5a·q-É‘ÌÛs!üÏÆwqÇQ¸€v5ž¸Kv•îŒéa¹•H @ê@, žÛ‡­q6>4Ô£ƒP¹Ôl¤šÞÛM–ü¼z]Õ¢ÆÑ€L[¦I 1÷NTqSÙkþý(ëéòÒ/?±Æé´™mw)ÜÍ»a†3Ï€;:(¢€ (¢€ (¢€ (¢€ §ªÇ—ýµ‹ÿF-axÆþóJ:uÞ—+Ë©Ä1i¾[Õb7‚?„ªÛú.x8­ÍO&Äd`ù±qÿm“ØQR0¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(©ôÏùYÿ×ÿÐEASéŸò ³ÿ® ÿ Škp9/Ç]éÚh:5ýî¡>“k©N–1§–‹0n…Üt(ß.I#Ï8¿¦øÂÓTŸOØêZê ýŠòhÕcœì/€7o*±”Á4ÿxgþÿ'ý/Ïòô«=7ý^ÜýŸÍùúŸ½æô펧<^û&™á{?µïþÂÙóùxóöÛILü¿ë7wéŽùª$’ÛÄ©6£mi>—¨Ù­Ùeµžæ4T™‚—Úbêv«:©ùOz­iã;[Ëý:Ý4ÝEmõ)^;;×<™¶Æòn>à ¡ÆTg €FHÊÒ~3[Ó5&»±‘ì%wó“N sr'÷Óï%ÏÎ@‘Ó¡4í7R‹Äš—·riš%Ä¥V]9¡Ä –(ó1b²ŸB쌖æ5‡Ší5 Ëh’Îö+{ÂËgy*(Šä¨,va‹ ª³ ʹ‘šÞ®7@🇵;yíbÒD»„,šTiu‚¥pÓç-€z…÷''=•QEQEQEQECwöŸ±Íö3¹Ø|¯8›±ÆìsŒúVw‡uø¼Aa,«Asm;ÚÝÀÇ>TÈpÊ£B:ƒÛ¥hÝÀn¬æ·Kš…<Ø[k¦F2§±÷¨ôí:ÓJ°†ÆÆ†Þ!„EýI=I'’O$œÐ¦È*Ïþ¸'þ‚*ÕQµž;]‰[lQZ«¹ôrk95Ü¢Ím é«€È.µGŽ\cø•`pÑ `fýSÔ´»=ZÝ`¼ã$£`Œ«) §ŒƒÜÖ>™â[¹µ„Ó5]>ÞÖYwˆ$µºiãvQ’¤´hAÆHàä)ô®’€1£ð®Ý¡µyc»Ûç¼óÉ,’mås#±”ò9àò1PÂáö·¼‚[9gKß'í&{©¥i|§/æf$á‰ïÈàä Vàž¸{u• èŠïa¹U‰ Hê*ÀûO¥I@öþÒ-­¤-äu’x®渒YH™^2]˜± ʸãŒcÕè´ëH^õÒÍìžmÀbXHÛ>Aã8÷4ä½·“PšÁdÍÌ1G4‰´ðŽ\)ÏNLoù{б@6Ò´Öso¤ÒÊîèKâKè­¤þRéqñ.Ð6â0&ÈÇ>OûU~]XøKÃ÷·¥´÷šd2ϨêQÙ ]6œ¶yÆ~aƒ×#»¢¹ÄZ¦µâ—ò ·:Ú]•ìEç"TyÇvÁ$” T¾PA%ˆ<­êþð}î•6w¶PÛÛ\-Ö÷.¶åÁxö€ªËCÓ g‡a\ïh¢ŠC (¢€ (¢€ (¢€ (¢€ *¸æšÎh­î ¼Î…c˜ o-±Ã`ðqéY×¥×ô™'žÐ\IlòGÌ3²"'ªÞœŽqšXW‡Wë&C¤È_(â…ÖAuøÈç=«[N´‹E`0 ÷ùEséà[Hî¯$Kˤ†iD‘@“HتU~n›•›Œ»â…°3IÓç±ñ&œ×sÜkÏÉ>\fÑÔ/#ÕIî9±ãË?·Éá»oìÛK~ªßè·í¶1ip~c±úc#å<Ó¨½máH­u ¸îåck+>$Ë–7Ldœ¿ŸÃÞ®êú<š«Ú¼z¥Õ‹Û;:5¼P9ÜWn{à…,2¸á˜Ð!u{«hñÝiVXhÆ$Ò„6öH²Á\_K…r‰»r…ÈÀÁÎ9äÚ¿Õµ} µ«ÕZìà Œ±^]ChÄòDìÁTªßÈõÉ5ÔÛiG[Æþиù7Ý]C™&Ç/v"¯ÈÄ•À<õÉ«Ogk#Ìïm <ñˆ¥f@Lˆ7a[Ô ÍÁãæ>¦€9_G4<ñêÏ©ž×¬ÊÆàÛ!• ©ÝŒäô U›}:ÆÒêæêÚÊÞ‹¢ ıĪò‘œ e±“×ÔÒfŠ( Š( ©êŸñåÿmbÿÑ‹W*ެámpÅšhöª©bpÁÙIü)= ¢¡ûBÿÏ+Ÿü“ÿ‰£í ÿ<®ðOþ&¤dÔT?h_ùåsÿ€òñ4}¡ç•ÏþÉÿÄÐÔT?h_ùåsÿ€òñ4}¡ç•ÏþÉÿÄÐÔT?h_ùåsÿ€òñ4}¡ç•ÏþÉÿÄÐÔT?h_ùåsÿ€òñ4}¡ç•ÏþÉÿÄÐÔT?h_ùåsÿ€òñ4}¡ç•ÏþÉÿÄÐÔT?h_ùåsÿ€òñ4}¡ç•ÏþÉÿÄÐÔT?h_ùåsÿ€òñ4w!wŽáUFI6î•OEPEPEPEPEPEPSéŸò ³ÿ® ÿ Š‚§Ó?ägÿ\ÿAÖàVÓ4 ;K³Ó`ŠÝ%“Nµ[K{™‘ZeT.7`c ãúVd~ µ¶ŽÅlµ=JÐÚØE§…ãÝ41çhbÈpynSiçéŽšŠ¡Z_…­ôyì$²½¼E´±†Á£&2·DGæe3]ŽT®Iç#Š–ÛÖv–: ¤rNcÑ6ý˜³ ¾Ø¿Ž~W'ŒsŽÜVÅQEQEQEQEQE ݬ7¶sZÜ)hfCŠ®TŒ‘ȧAVÐG$PÆ¡4\*¨àARQ@9âk°×s¿ÞÃgo–Œ2|”së’y­o†z¥Í´sË©é6ŽêÁýšÓlÈé¿Í\ÿß"¹ÿ«Hú¬H2ïi¨÷6É^m®¤éÉ hÜ § ½ µ%N•548iSŒêMË]O6¾ÓGÔa·¹{Ø'w&‚×ÉÚê7`©wê9ÏjYÀc2 HÊ)·–0 ÎùU¯XA¥¥º,ÆYnõg¼9þ Öì€NGÈyã©ô§iOçÍ%üý&ÄÏüô§æFßø®¬-IJ—4º¸˜(ÕåR °ˆ¾Ád…¶îÛå ãÏN˜çéLû5¯üûÃÿ| êf–ÈÈ—Lê!‘ÖÃp8;°Íÿ~‚ø¦E5åÔ,`ÛQ†8‘b $ˆ“»÷—îòsש­}ªÝ£?dïkœÏÙ­çÞûàT˧@Ö’\ˆ Ù‰rÁˆíþÉý+I5úMÅÏØìÄ‘Oq!pªÊäŒcæûƒïf´&û-ù±²ŠY[ìRù^Pp BÌÅPäIã})ÊvéýiþbŒ/×ú×üŽ_ìÖ¿óïýð)ÂÎZFQHRÞXÀ'8üäk¡†Õ[Q¼ò"tkxâ¶ ®Wç „íÀl‚{qŠ’üIokªZÙÀŒ[Ìê-ЕV…‹·} :—<y=ª½’þ´ÿ0ön×læ>Íkÿ>ðÿß³Zÿϼ?÷À¦ù”y•µ‘Øï³Zÿϼ?÷À£ìÖ¿óïýð)¾eeAv;ìÖ¿óïýð(û5¯üûÃÿ| o™G™E]Žû5¯üûÃÿ| >Íkÿ>ðÿß›æQæQdd‚Î…Ť{·–0§èkÁ“¼>$‚Ö,ˆ$”ļʸ€ágépÚ‹‰n]ZܦƶÏ3¶;»~5kÁM»ÆV¿õÆ_ä+—­)+Xm*ÅÜõXÝŸ;¡xñýâ§?‘4‚G2m0H?|•ÇóÏéRQ^ì‘É#£a`’AŽªWú‘N‘Ù+HsÑHþ¤S¨ ‡cãÇÜ$gùãõ¤ÙóºÞ*sùO¢€#9“i‚@¹ûä®?žJ$‘Ѱ°I ÇU+ýH©( Èì‹•¤9è¤R(Æ=Æ6 ¸HÏóÇëN¢€³çt/?¼Tçò&HæM¦ çï’¸þyý*J(9$tl,H1ÕJÿR)Ò;"åciz)ÔŠuÐìcÜc`Øû„Œÿ<~µRýÙô«ÝмxþñSŸ”úWj®§ÿ «Ïúàÿú ¤À‚Š(©QEQEQEQEQETúgü‚¬ÿë‚è" ©ôÏùYÿ×ÿÐE5¸iáÍ_Vo i~šúî]OVµ¶žÚúI¥MùßyçtdJíºÞ´l|M©ÁáO,7Ñ=ܺ5µÌ¾e…Ö¡4¬È2\CÊGß%²wqÇ=å…•¾™§ÛXZGåÛ[D°Â›‰ÚŠQ“ÉÀ­e?ƒ´7†Ò/²Ëv¶ÉiÅu,{¡N7ÚÃÌQÏž§ÔÕÆðÞ««kž)7âòô»O¼M ³'›çœ+ù›Cn^[gÌ¡FÝÆ=/YÖõ7š†¤šA“W‘^ŽÕɵ-g<›Ã9' 8 ι9Èém<7¥ØÏc5¤ÂöVÉiˉùJUu݉Üq¼‘Ï4õÐ4Ô°Ó¬’H4Õ hW "h†“±Ødžùê¡“áÿ\ëÚ¬ö+o 'O/›vá$›™“ƒÊe–>›qÛzŠ¡§[=›Áj‘5”F d®ØÈ^:ŽÁÏ ¢¯ÐEPEPEPEP{ôŽM:å&¸{hš&:Iå´c°nÄuÍcx7SÔu] ÏÔ#ÎÙž;{­»>Ù8I¶áÎ?Á½41\ÂðÏKŠUÑÔ2°=A¨§@Iâ SþÐ[¸l®. ¹‚V‚&“‰Tƒ€q÷ZËÓ´›Í4\ðÄÒ™æó˜Í§ÈH;Up0.~¤×¨ÁehVLÚÂq4€f1Ð;Rý‚Ïþ} ÿ¿bºV1ò(J)¤s<*çsŒš¹å÷¶z¥ìPFÙäÿÙZ·ý5ü“ÿ‰£û+Vÿ F£ÿ€rñ5ë`³ÿŸH?ïØ£ìóéýûiOùPgû<Ÿû+Vÿ F£ÿ€rñ4ejßôÔðOþ&½cìóéýû}‚Ïþ} ÿ¿bí)ÿ*ìøwg“ÿejßôÔðOþ&ì­[þþÉÿÄ׬}‚Ïþ} ÿ¿b°YÿϤ÷ìQý¥?åAýŸìòì­[þþÉÿÄÑý•«Ð#QÿÀ9?øšõ°YÿϤ÷ìQö ?ùôƒþýŠ?´§ü¨?³áÝžOý•«Ð#QÿÀ9?øšé<£êþ ‚úêÒkx@x@™ 31Rxœ ¿­vŸ`³ÿŸH?ïØ¤Kh!¿³h ÊÃ*€yoYÕÇN¤Z—K rROb v;[ígNÓ/ÐKg$É }ÉJÔ~ððx¬hþ Ñ|7u¨/„ôb!·—§Å»ß-lxÉ%³·]~(ZuÓ­§ó£Fü£±Ø®H(q‘Xæêæâ3Ö‘s,Fåuú‚Ø#Ú¹N£oÁždš•ƒ11Xß40ƒücŽM£Ø zjšgW¼×¯ìí4»²±ºKi®&¿tæ(åfXÄD @¸Éª´ý¶ò‚²>  /§ú<5“kmáÿøLu[½CE’çPŸRínŸB¸sÈ¡Œ~øÃµ@xÙƒÛ‚=i ÖÆº4VÖb{縸šÆÜÚØNÛâJCRU¸$íã'‘›·¾)ѬÙæ¼.·1yñ˜!y¿uÇïÀv§#æ8õŸáO ÝèFßíR@þ^‹a§Ÿ)‰ýävóÈ)óø9©éž×t+M7ìMžá4{m6è\HêˆÐ†ÄˆB’Ã.ùR8^E]Ó¼AsÃ}/Ä‹ö©NŸmuvÙ ò²¡–LŽfÀ8ÇnãÅ66š¶§epv&Ÿ`·ÒKœ‚¤¾áU §þ*oé/¦øGKѯ|©^ÚÂ+Y¶ä£•Œ+c d¢¹k^¤v+=ìR2Ý»bX™mD:rÌ- Ýž>i1ž2_×ç÷ÐXx»N¹–ÚÒéš×P—bKÇh✨c´!qœmÎ}©’xçñK*I~è±NöòLÖÒˆ’Tb¥M»d<ñŒäf‘ðæ¯æf‡±þÈþÕþÓûF÷óÿ×ý£ËÙ·oúÎ7nû¼mÍOÿÝßü#§Nó-üÓ­h“·ËþÐûN:}íœzgŒãšb"Ö¼cfš×¶7r@Ö—¶Iuö‹g‰ãŠKˆÕ‰I¬…ÀlzàäV´'Ò.,®nÖåãŽÙ•fIà’)¶6ƒ¨|¶FÞ>lñšÉñ†µ-NóQ¹±šÑxôÑŸ¸€Ö×O3nt!€<œçh›Dñäz½ë\ZXêw±[ÁZÌì‹NÌAª°gówùFÉR]CÇZež˜o!ŠòvKË{Y-Íœé,~lCÌ{ÀÁ$|¸bƒ’+¤‚e¹·ŠtD¢HÙ3ʰO±ŽõÁ[ø3ZCª\3[,³>KxeÔ®.Àkk†˜«K*–²Ê02~^íÞÀfkxšâ4Žr€È‘¹uVÇ 1‘žøô†IUu?ù^×ÿÐMZªºŸü‚¯?ëƒÿè&†QE@Š( Š( Š( Š( Š( §Ó?ägÿ\ÿA>Òn´(-î"I –ÙRHäPÊêWx Ž1Mnê+ËÆ—£èš®³.›¦ÛÙ_m¥­›éú|à±…Ìp³á#ÏÎÄ·°Æ[5vÓ\ñ¡¢ÝAo=ÂÝZjÿcs#Z-Ü‘y !UÁ0A|zmSÀ=(Gv÷¶ñêØ4˜¹š)&6žQ 9éÁ‘??cV+Ëõ]Ás êv­%ÌŸ`Ô`šêî%Ô-Ͳ<’¤|0B¤œg!rF¦½¨êúO—8ÖneÓ-lVyî­Õä'-™e€ÌD+Ὠ¼¢Š(¢Š(¢Š(¢Š(¢Š(¢©ê¿bþȼþÒÛö%þÑ»8Ùƒ»§==9¬¯kÿ`ÿÄÛÌÇšÿcóÿ×ýŸ?»ó¿é¦:þç4jßîËÿ]åÿÑST6ÿv_úï/þŒjš aEPEPEPEPEPEPEPEPQŸøý²ÿ®§ÿE½IQŸøý²ÿ®§ÿE½jÑL’¦Ç›>:oPqùÔcµÿŸX?ïØÿ ±ÑP}Ž×þ}`ÿ¿cü(û¯üúÁÿ~ÇøPôTcµÿŸX?ïØÿ >Çkÿ>°ß±þ=ØíçÖûö?±ÚÿϬ÷ì…OEAö;_ùõƒþýð£ìv¿óëýûá@ÑP}Ž×þ}`ÿ¿cü(û¯üúÁÿ~ÇøPôTcµÿŸX?ïØÿ >Çkÿ>°ß±þ=UÔÿäyÿ\ÿA4ÿ±ÚÿϬ÷ì…3SÿUçýpýÒ (¢¤aEPEPEPEPEPSéŸò ³ÿ® ÿ Š‚ŸgŸö);Ûý™<¶`‚W$QôÒ¯ME¼^Dm;"Uòш%W€J®@ãå•Yü;¢H-CèÚ{ Oø÷ j‡Éç?'/>•¥Tu gKÒLCRԬ쌧ý¦uyöÜFhõ€†‚<‚)h¢Š(¢Š(¢Š(¢Š(¢™4Ñ[BóO*EjYÝØ*¨I' §ƒ‘‘@ÿv_úï/þŒjš¡·û²ÿ×yôcTÕ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ Í×.$´Ód¹…¶Ë SHèÂ5¥Y%ÿ×ý{Üè‰*£ñ!KfyÕž•.·«Ã§Ú‹as2¼¯qr…öªã,GŽYxÈëÖµõ‡Wº}›ÜI®é/:; þ>}gxvôYø¶Þf`ªösÄ2q–-õŸʺÍzñ.…u¤É;B.Ôdì23ù×£‹­8Uq‹²80´¡*jRWgm¸‚æÒÝn-¦0ɶ1´‘‚{AükA4Y$¶7)¥³@o5mò¸NqŽ0j ûˆ¦ñ³,8Ø÷JA þæ:Ó»šÑt­4Mï1µ}Ž“QûÙ1•ÚIçÜW}97N.Ú³Š¤Rœ—Df=¼r25¼© íUaøÁü)¿fµÿŸxï]©ðÿߺ'VšÝ¥{xšÅí ­tPn3”'ïõÏ™òíÏNÝéâ!~–†ÊÑ¡x™ˆeœ[y™-רìFhöžCö~f%¾̦4‚Do'̃¢©cÛЇìÖ¿óïýð+¤Ò¤ûSÙ\}žßζDB¢Æ®@ `æ¢6òKq§­Õ´÷®Òî¡ ” ƒ“¸Æp3š=¢NÍZÿ{7Ëtÿ­?ÌÂK8$b©i ac€2Oà4ß³Zÿϼ?÷À®¼FÖ³ÚHbæxîâÛ-”q" Pyc#$¶;œt<òS¼‚âA2l”9Þ›6m9ämíôª„”ú8¸õök_ù÷‡þø© ÊmuA¾#Žâ’TQ€ÀDì2>ª+'Ì«Ú+nÖíÇûÿè‰*q^Ê^…aÛö±õ=ZŠ(¯œ=ࢊ(¢Š(¢Š(¢Š(¢Š(©,¡ŽãD·†dY"’ÙQцC¸ ŠŽ§Ó?ägÿ\ÿAÐm¹šñí|p]͌ۮä~|Û8ö´9=Ëæ5o]“zVTºœ-©éQëzõ핃ϭ‰o^sê¬jò)B®Bò1ÂŽ¨Õ94ØeÖmµFgóííæ·Em+#FÌOÎb\sÜþ~äØóëëûŸøFôk«ÝgÊ€=ÐD¼¿–ÀÞD$ÄgAþXS´ýýäö¦jz›Ekz5=¯4—]‡Í3乕ċ¸—ûÙÞ¿!Åz…˜ÌŸ F"ðŽ‹‚kp–(†s™#Äkò±ÀˇÍkQE6îî$QE!…Q@Q@Q@ïÞ8ôë—šÝîbX˜¼ ˜Ò r¡{“ÓàÝ3QÒ´/#P“¦y-íwoû$å!ßü[GüWCEd[ýÙ뼿ú1ªj†ßîËÿ]åÿÑST (¢Š(¢Š(¬__jÒé6ºl¶±M}xmÚ[˜UEË&B«¡'1×¹¦}“ÅŸôÑðQ/ÿ$ÓvŠÂû'‹?è5¢ÿà¢_þI£ìž,ÿ Ö‹ÿ‚‰ù&€7h¬/²x³þƒZ/þ %ÿäš>ÉâÏú h¿ø(—ÿ’hvŠÂû'‹?è5¢ÿà¢_þI£ìž,ÿ Ö‹ÿ‚‰ù&€7h¬/²x³þƒZ/þ %ÿäš>ÉâÏú h¿ø(—ÿ’hvŠÂû'‹?è5¢ÿà¢_þI£ìž,ÿ Ö‹ÿ‚‰ù&€7k?Xµ{ë&³ˆ$é,JOL´2üê—Ù†µ‚j‚<$ÿ³e®¯ûÄôð÷þ $ÿäš?±¼AÿAà’OþI®Ùãyõ”9!„äødÑÃM¦j³^\\ÿcê Ó¸vU³—h!xãÑEZÛ®ýŸÈþÅŸfÍ™þȱŒ}ï/9÷Îk¯þÆñý<=ÿ‚I?ù&ìoÐCÃßø$“ÿ’j–>I%Ê´%à“wæg ý•«Ð#QÿÀ9?øš?²µoúj?ø'ÿ]ßö7ˆ?è!áïüIÿÉ4cxƒþ‚ÿÁ$Ÿü“Uý¥?åBþχvpŸÙZ·ý5ü“ÿ‰£û+Vÿ F£ÿ€rñ5Ýÿcxƒþ‚ÿÁ$Ÿü“Gö7ˆ?è!áïüIÿÉ4iOùPgû8Oì­[þþÉÿÄÑý•«Ð#QÿÀ9?øšîÿ±¼AÿAà’OþI£ûÄôð÷þ $ÿäš?´§ü¨?³áÝœ'öV­ÿ@GÿäÿâhþÊÕ¿è¨ÿàŸüMwØÞ ÿ ‡‡¿ðI'ÿ$Ñýâúx{ÿ’òMÚSþTÙðîÎû+Vÿ F£ÿ€rñ4ejßôÔðOþ&»¿ìoÐCÃßø$“ÿ’hþÆñý<=ÿ‚I?ù&í)ÿ*ìøwg ý•«Ð#QÿÀ9?øšÖðþ‰©ÿh5ÜÖWð[A33OGœÄÊÈûߥt¿ØÞ ÿ ‡‡¿ðI'ÿ$Ñýâúx{ÿ’òMEL|ç-J§‚„$¥w¡ÒÑX_dñgý´_üKÿÉ4}“ÅŸôÑðQ/ÿ$× ÚnÑX_dñgý´_üKÿÉ4}“ÅŸôÑðQ/ÿ$Ðí…öOÐkEÿÁD¿ü“GÙˆF™§‚„‰bHªþè–…Û±…ý+Jÿ@¹°¥ŽŸmu%¬ZN—o”Èkˆ£¸œÎŠÜeÌdç9qê*º\ž¶þ¿¯ë©ØÃ©ù¾!¼Ò¼œ}šÖ Ÿ7wÞó^eÛŒq'9Ï;»c òôÓ#i|JÚ…}e§Ík§´{_´"O1¸H‘‚Ld®-ŸâÃöž[øWLŸNW±Óˆ­ ê&œË¶"Q€(q”ÉÎÎêWé×—¶ú| 5Ôž\m,pƒ´œ¼Ž± ãÕ™G¶yâ¬W“Åq¡jôÔº²KÝ>àXÅ Kiysƒ;G ŒìÌb$6ÐvMhx³N·iì¯4ý"K­–Çea6‘#Â,UQ—i´“Ì_î‘L:‘EPEPEPEP7wPÙYÍupÅa… ’0RØP2N&ñ\ÁðJ’Ã"‡I²¬§AE6îI¡³š[{sq2!háÌlp¹< úÖG„ôt &H'œI4÷\¼qñ ç&8胷¯'Œâ€&·û²ÿ×yôcTÕ ¿Ý—þ»Ëÿ£¦¨QEQE…¯ÿÈgÂßöý#¹¬ÏøI¥o^érkúŠ[ÞEo•ÄDÜÜ+EåOœ¼“#(ÂúVž¿ÿ!Ÿ ØQÿôŽæ¯Xi¿a½Õ.<Ýÿoº[»q³Ç:óþ¯9ã®;f˜–ž0Š[{(­4ícR–M6ÞüºÇc¡°_æUßòªúü ó‹’ø²Ð¥«ØÙÞê"âÕoqk“ ÷]·2õç 2ÇŠ_øsû ÉÿKóü½.ÓOÿW·>G™óõ?{ÌéÛNj¯…/tË[Ó5„‚h4ètéä’×̤@íuÆÆœŒ–7 â€LÔï­þiZ²“us™ms1—.ò¨Ei9ÎK•Ý‚‹ÍIsã {]WT…Ô=­žž·i$|™Xdº_•àÇýt­}MF§iF_8YÚÇmæmÛ¿bÎ2qœtÉ®~ÛÀ6ÖñØGö×eµ¼3·Éþ¶!³ËˆóÑ|›~{ù]9áuþ¿¯1¬|W‘m õÀc*ZO{ cì¢ë…d\±|où3ŒgŒæ›'ícYfm+UûWod×K óVSÞÙp!Häƒ|/qöŸ'ûLdý»ûCì¿gýç›æyØó7}Ï3æÆÜöÎ*Çü#Ÿñ&þÏû_üÅ?´<Ï/þŸ>Ó³ÿ€çñÇjz•®ø¡¿².´Ôl.ìï4÷– æ¼R] ù|¶`Á‚ȸÎN#šÙ·ñsÅxNÔ »µØ^ÍãV”‡$!]ŒÊA ŒîÀÚsŒ­­ø^MZâöxµk%ÂY*2ÂÄm§yƒ œïǶ3ÏJŠ ]_ZjoÕVKëä†3,6æ8Ö8˜²¦Íä•%Ÿv[ÄqF€E©øÆâÖÉÌ-êßÅwi¶“ù[„sJ8"M§8e\1Ãcp:ïYî-a{+¨žxf,ªV¥Çe$;øv7ö¦—o-“ „Ba¾±J˜$ïŒ\îÁ$6p¼qV¼?áÏì/'ý/ÏòôËM?ý^ÜùgÏÔýï3§lu9 ÉâDkKk« 3QÔ`¸·K•{hÔ ©Ë²äãøW-ÓŽFs#ñ%ºx†{³4Òé—sBÊ~Hüén‚FÄ`3÷sÀâ´ßĶz]³ÝY\¥–Ÿ‰[í<\/È1æF¥ðŽ{“»¢úr³èè–ÞHî5_;H¶ÑÖÞ fÌ­Ê ØÌêp{‘@‡Šìì.¥¶÷W$ÑÛ*Â3£?– 0„]Ç$ 2òIÅI?ˆV-?âY%åÖÿ.ÅUÀ!ÖÈçváŒäU8¼/,^ƒJûU´×¼Û©omEÄw2—.„‚Ac‘‚1€: U9üm6“¦[;Ù\O§™¼³{b³Á¶VÜÊ",6¨Â…ÃeB’3‘¡#¦Óu5[ï-ÄrÊVEÚÈÊÅYXv!ÜV§Œ"–ÞÊ+M;XÔ¥“M·¿,±ÂÇ lù•Cü‡*¾¿(<ãoFÓSHÒ`±An=Çöë`–,v¢ð£ŸrO5GÃþþÂòÒüÿ/K´ÓÿÕíÏ‘æ|ýOÞó:vÇSš3Nñm¦¥5€ŽÊþ+]@±Ýͬs…ðíãåV#r€@8&¦·ñM¨[Úͦj‹tYm§¹U&`¥±€ÅÔíV8u^†™gáϲi¾³û^ïìMŸ?—;m»ÁÓ?/ßÝߦ=ëJø~4ÝkMÔêÊG±•ßÍM<%ÍÀhÝ?{6òXüùÈ:t ÐF¥¯‹í®ï¬ M;PX5 ;KÆ<™¶£¾áón„8ÊŒäÆHšÇÅ6·÷vñ-¥äP]–wr"ˆ®J‚ß&°Ê«0Ü@$f¹Í?NÔbñ‡¦E-Ôšn<¥V]=¡Ä!’$ÌÄ•”üêÀ8ÉnkGBð%¦ƒ©[Ïm”!¶Ü!dÒÑ.°T®|äà¡A=ÉÉÈ3 Ôu°¬:uíô²dˆí•x%•GQÁ9<àe·‹í›ì k§j7sÞ¤ìEC ªH¯¹”) ØäãƒÏL¿Ä¾> {7óm·Þ ¶Ÿi‚MØäǹ~a·ƒž2ÜsPøÂK ¶œVí$[8¯b –â%"ât—€.͸=±ŠŸþ»i,ìåµ±¾¹¸ºiQ,ãD©‰¶Ë»sXm'wR1œŠ<{.£áöº•§,÷׸çz¨º”*zmP;cªá‹›o"}?RŽØ./$Y%¶ó£¸˜ÊÈÈÌÃîûâ´t *MIs]›¹|ùæyŒa7%yœ}ü~ºP‡âv·ð®‚k¨ê—Ϥ[Ý\»ª”;—a’HnXàðkZoZ†¶[[ÍHÏn·舧d-÷\îe냀2ÇŠ¡máKí6ÒÂ=/XKyàÓaÓ§–KO0J‘±Õw¬ 9ä°ù¹:øbm=­‰¨‹?&Ê+AçoŠ<ì#æ\8ÜÜò>nA  :§ˆ“Jyš]3P’ÒÜn¸¼Ž5ò¡\d“¹ƒ0ä”VÇ=Á_Oñ$Òê^ ŠÿO–ÒËK™”]¹fÅŠ7;°å²w³” ¸ ‘Y~&ø~I…ZÏKKid»©;Ê8G·LM¬xN×ZÕÖòæVòM³Á,¬%]U³ž6¬³ ¶jlCçñM´sµµ½•íåÈžH3'–ª]Áf K…$‘óqé˜ÛÅö­ýž¶š~¡y5ôs£öqk¶@æs:§™¸ü¡ð~îIÐ54&ñ[ß$3iš„vÏ:Û ×D^c6Å-¿ˆ¶í9àæ™ámró]²¹šóLžÉ¢ºž.cÚá&‘]ŽågœíȬkŸ‡âçYíudÅuï–i4ð÷Cl¢O/Î/Âq´£‘z-K¸Ò¾Ù]G5¬·2ÜB‚¯’G‘Ã6ân~0w¤2·‚äBðïý‚í¿ôRÖíax'þD/ÿØ.ÛÿE-nÐMÓõ $ÓmQï-Õ–Tp=éÔPÿÚvóûmÿWühþÓ°ÿŸÛoûú¿ãPQEÀ|÷šeͼ°MwjñJ…L£•#uªz]¾ƒ£ ¾ÇsyØ4²ÍxÓHä »±bè3Ú¬ÑEØXŸûNÃþm¿ïêÿÚvóûmÿWüj (¸ÿiØÏí·ýý_ñ£ûNÃþm¿ïêÿAEí;ùý¶ÿ¿«þ4iØÏí·ýý_ñ¨(¢àOý§aÿ?¶ß÷õÆí;ùý¶ÿ¿«þ5\ ÿ´ì?çöÛþþ¯øÑý§aÿ?¶ß÷õÆ ¢‹?ö‡üþÛßÕÿ?´ì?çöÛþþ¯øÔQp ´exу+M)‚7µOE€(¢Š(¢ŠÉ×4»½E´é¬o µ¹±º7ÓÛ™‘³‘T:’œö¨>ÉâÏú h¿ø(—ÿ’kvŠ`a}“ÅŸôÑðQ/ÿ$ÑöOÐkEÿÁD¿ü“[´PÙ> stream xÚÍZßsܶ~×_ÁÉKy­ŽÆo’iû`+¶«$Š[u›±=ÞuÇ„G^HžM§ÿ{w±À‘BJ‡ —U\;U¥ SÉquØM†…ÓHU»ŠUxU¾²ã ‡=h°ëÿ"Æ}Ðo»f‡z 15W€ñgQh8Æ„Þl»+óSB¤ÛÜ#}h í—xV—õ¾™Ð„оl ”LÎä–çlcûõ¤õ{ô Û?ÓHzA#‘NFÂÌ ƒilù½3­Xó!+÷®øwׇ¤Ââþ;¥’Ç|Ô8þWíËçO¾¢ò¡õ);eïþ:¡R$àÓƒ±$?ÇÕ:rô20EØäjéßa3ÙÁ‚À·%Há0¡eßf§Ü»ÑiOÒ°Þ¹=‰AXËONÈ—"ñ]²jEXÌÀ(Éëw.F²¡EZ°5>Ú¼3ø@»fæ‹Î6Ú@# •D‰qg›03i9„t7éÁX¤T껼B}Ÿ-ð1mY C[²1oìÖÄÞ£ÆpLêý¢Ìç˲XþBMuåì ¯R3†®5nK€ê–zÇ­±dTr}U¸*Ú%Ä€½ð®F“(X ©'šExñÝÔZµå‡®‹\€ÀŠñ ÁAc~û¡,ÉÜÚÚU‘•õzÊŸ%I”Js?y½ió¬Yn¬o‡¡¯k7[Fï—„ ]ÒpVÐ>¬hàhgwA¼9‡%xKžê/‚.èT³•àèÒÔ|¦[JÒðÚâ¢(­ïdiZc¼¢rѹ¾Õäm¶ePh©8í%¸ÿ«Óûýh¯' òyï$¹8†Ý)€þ€ŸË3²d–î„¡e•ÓºöeG­#Ÿˆ=Öy•7Y—»¯‰û|Ƭrïs½çÇl Öщ<ï^Õy@àî%˜š¶÷¶¶ðCrVà‘Šns‹ :ïò¦Êó•ÏndÑn€t½#áÁБ@Â"×}/ÁB+G0M„v| ·vå7V 9˜QQlGù|›¡º×øI˜OM#!KÆ<à¶&ç`B´â6ÂÑ wçªîXe›ÝàVª°Ýïvuƒ<_‚ʶEý› VÔZï\ÃG `º ½4yVbôA… Ê™F賬= ýìƒ}~d™’£3¯ #¼‰µ³ íªÏÐîðÔi —<@­Ђ?©õjƒ SJîùFz`ù‹7®!£ÇÈu@'D¢ýŽÄ"V©µ Ï]¹ ŽœÕ§ò ‘]xæ}”ÈÞeÖm,õ'*—í(þ} Ó›˜  _AΞ¡‰ À´sŒ°ô¬hZtQxxmDÌÙ³á)s~ k›Ü¥8|¦[á˜omÎ:´ûÅühbêTTSaûõ¾Zv$ýüUMP&¡Ù0šúú¡à† w@ƒPÑ‚5£Ç_è± ÇßèÁ=ÉŸÜÙ;/ÛÜWLG'ý´‹·G­Ê,án}pIà6'@‚ $>0/dOF¢ø˜šT°¡ß¬«eŽZdÚ™&œ•h/Òf˜q m£¦ŒJ£¨×Txr¹ˆTäÇûE±÷1cŒt÷bßl·8€º™&üý±[Ü7DÑŽòeÖÌx„„^‹m¶Î=ƒ€ [‘ÊW98›Õõ•™¤ê~êËõÁe¬ò.§ šø8Å6ï0i„ï6‡“É}¤q+ò„2;èo_µÅºÊ]ÜLj͎éÄ}Í´`©8(Ñj¡µ94¬`¾p@•”BÈo©dÉíQÖõ/óýÎuÈÀýسɒQÎcî&»+óñ;Îj6ò4Š]ûÞ®Áå –0nQE¾š2#‹Ñ·‚èÚ£¡„í.ÿgÛàDÔ#óuÓÏQ@j{«8Jì †q〠¤ŽÃ"=Å0ZÑ@·«½l\ªx5ÉÄï‡ÜÚ'—£ä£e$ "/´ÆL… ½.¬Q‡w§P¬³E´ù} }¨>Ã7°Hö¹-<ãp†ÎÚé#óÖsìáQmE—¹Ï`ù§s¢-¦z<ßæ *7i ÒØîõ„*Q  G2ÞKo³]¹ï Ç8…Õô)!wd%²‰c[Áj]æ~b»1%ªïO!§}ð¿ÉpËR«YXZøúüòU¬½.3Íᙲ±Öõñ¡)’±°uS´h"UM)ŽY6kc÷[º†±m55¹> â¶£ÒuN÷/¶}³¯V FØ‚»Þ?q–q!h¶˜ $s™¬`Úˆ+ó 5Ö:$AÝz†Iñƒ§‹0Ó«Ã'9ð‰¼ïKùsèþú"ÐÛ¿ÎìPEå.ZlÞÄÞbä±+F¡>Ôµ¹»¥Aºán5_å.O2zÀɲ¥¨÷þš…d‡’·Áð=Hå.ޤj-S—°¦£ý©q,-µr[áä°Uè „{»µXE±>tóJµýܳ^LFhÄg˜i·íùÊM±i ÜÀö¥=ï׎/Ÿ¶¾'ìZÞçùà 9´lzÏï¯ÏÕ¸¡7¦ûã¯7……í‘ÂÁ-ކ–°%]&N*ä°†]ƒwE~”wôŒ«QÙÂOð–ñøè‹£´sj™6Ÿö†­ßî­úá|-\MæÞËœvª8=ê}·Û»Ö!pìùHmÜ)è 7¹»™8™hiTr°áXöcy80:–X¸Ûl\éÚZä)gT°Ð§h&TKa²t½¡àÁa£åÔEËò€rIw>tëk@w›[W®Šd>„7ek™»B?é'¥ê&ïö …4t ²h;êK'xð¹p“y·ÜNMJùQŠÏî‚ÍœP0ç)8:óû€ã’ è”Ç6ÄÞžîý¡>xgÁdH™´cˆK5ºØ·k³·ìòÁ7GŸŒ˜àHÔó‹÷W?]>}ÿÍ‹>ùþé„!kÓ§a?! Æ0ÆÀþÒœÿp5–è(Öòa¢ÄЗ›?@”³—ß?ý÷”fR`/'…¾Â‹#¾@œWW/ÝYþ/öéâñó)ÐÄq³äaÂ$@cþC~ýôlŠÎ1ž>L"ü±ŒNÄ!ÒÅãWß}¦~ð—2,JðþQ²ˆ{´|“/ýÕXáÌQ ”ˆâþSéÑX@àÿþÕ;‹ endstream endobj 213 0 obj << /Length 2044 /Filter /FlateDecode >> stream xÚ­›]“›6†ï÷WpiÏÔª$ôÙ»m“nÛiÒ4ÙéMÚ ÖÆ^Zl\ÀÙ¤¿¾„Œ7B1œLf6‹¯ô>:ÒæßˆD;ós"lþq-ÇRÉH1Ž0ŠEem£ßo°¹Gw7ßßß|û##´ "ºßF@M`š«ÐËÀPáí•cÐÉÎlQÖlL°±?9DÀìæ‹C¶'_Ÿö©¯`‹1â\ÎÝî›+×ëü@î5Oš®I#TÜpT€í¨ˆ•6v€RÀôãTÄš"©Ý¢û–Øó)ÁäaL'd€¹}\ôNe£ú* }ß3óÏ2 %¢”¦‡0 0R¦ðj»øfmŸ®ë¢ôÏ‚L"a¦L/ C™^|O™“<ðXb„d¦BpD5,)LB(¤L©Ôm§ö»*‡3OšÆÏœ0æŠöâ1}ÍŒQÕ¥mÓS c-FApL€ƒ ¤©î÷Ü:8¼_wij/×ãpÌí…c(úv°i1k;âˆ#äª%ƒ‘vBÆä23ÿgGàOw§lã­'Ìü³gX4› õ’,‚<Ì”êåa(ÕòðX”ÙÅ¡îW³w« ¶8<@ÖZÂLE+b¥[ÝL4k+È8vÒ^¤ë´-[ÛøyÜxý?þä> endstream endobj 217 0 obj << /Length 806 /Filter /FlateDecode >> stream xÚ…UYoI~÷¯èÇ)Óô}­Ê«ùÍòÝùí3sºª©p<ßDj±/á|œHv2eÜGňUX˘•9ÔÇàõ®­÷þ1Ñ Ÿ(ŽçÚP"šPüi¤-œMJµoÛ¼´Yß4ÖãØ`k‰qúoÛ5}ÖõÍPW­ƒ›H%^W1×—ULç¿'ŒâNÈ`8lšªî±êpT7UzÒÔ1ð¶ñ\0a0”nÿ»ÏËgjÅ5‚ÿ­V†hú{ ÚÎ7±4\)Ü×1K5fûʯǻи0^pøw¾¼®Þ÷[àvå¨9g¾üJ„‡kOÓûL)/×A1ìœ*Ž’Ð¢(XûÎ×& ç¾ÉîáXûî>Ì¡  ß&,»êá"ó£lxPQ´éˬÛUåès¨ý3u0vL``"5øÛðJ£dxƒ‘i}1r±×0µ‘ø2¨j&›ª)|‚‰>4».}îïÊ-lÝ©¤4":®Ís`"h©:~©q4~÷}êvûÿg ´Ä)sxÚÇûí) 0…"V;”JË ã«<Ë‹»¼P|\“HJN ·“oyº<Ã߯/"¡²» endstream endobj 221 0 obj << /Length 248 /Filter /FlateDecode >> stream xÚuOOÃ0 Åïù>¶‡'qþŒÂ¤Â(¹M;Œ­CHkÅ&!¾>IK5.Sd9’_^~Ï'𑪂(rÞgƒÄÖ3œ[8À« $$¨Äm7JCÀ`•…x£‘5ƒ³.uˆ{XwóU\4åL*,–3c©X5%SñR5óº~z®ÊM\&'ƒ#™˜ó•F—þóKý©þÿ'£áIToûïí1ËÄ"Š“Cy¡Òh™a׉õ†`ŸfK ÔÁÃÏ ì€Bò»#¼‰KÒkýꤒ¨íˆÅ>#öµì}»k»÷ö<.F‘tøäœüKcWÿ endstream endobj 224 0 obj << /Length 3065 /Filter /FlateDecode >> stream xÚÕZK“ܶ¾ûWÌÁUæVi Aòè(²­¤l+ÑÚ9Ø>pg83Œ8䄯6¿>ý9ärw¥cJ¥bîþúëæþgmŽðÿûM½ á_œ%*“4Ù¤6V¡u©Ý´Åæ°ùÇW! 7ß?zþåö«×߻ѡrNÇ›ÛÃ&ÍTG—8•Fzs»ßü|{£ãàr)ê}ùéf«ãzþ¸ýOµ –Œpj¸ÙÚ fžõ¦©C}Ú¼/›gŒ ¿þN›M¦2§Î$i³­JãDfWåî#,f²æÒ³?¼¬Ö›DeIH«Æ¡J] o¥io÷e/ƒ®ˆœŠà42èõÚkàØþ÷÷mq¸1aP´E½+º•÷ÁGá¸hßð»¢`!¯ªiË$\à•ü:|ÛféDÁ‰£HeqÌoi.xM‚ YÜž`øÍ6ÊL³`ƒœÛUÓ³ÐøÙŸÊúØñ˜‡fàÎ]^‹pÊ룼ê÷0/ms—oiá|wÕîÖÂÎð’(`^3a +;þ±+v¤XjÜ—|fTe×Ëkøô𚆻â <_š¶Ïëþ& ÔhD¼ -FW“¦bߪPE°÷0 ƒ7yµªÑ˜*Á³¤ ,æñ.­ÑÁ®©†sÍò)—NÚ réܸ?•»“ŸU÷mSÉ´à~Åjtè”Q ¡./zek[?lvÛ]Ÿ·}Çþ”×{üRóÞûSQ³TöüÜÉ]Z8–¯öÇ—b#^ñ¯y&¤“4¸äýé9‡´‘Ò™ñÇâËŒ2øgΪ5v=7Ø]°/[0Œ¦- |O¦üøò")™./JT8¹fWäíîÄ> gs‰r™›ßë¡iáiìù¸Y UxU[«St­®à!äZ8Bìœ{e87úSÞ¯m>6€¶ÑË›Ïlâ‘Kâ;‡ÎÃ@)kÓ…Þè0PÑ!^Þ1š%¶`¿õ77QЯ1@A¾/öò›ô‘] ¼ãΡ”d$aùˆÇÆàøeÍ,™w,z_??øA;@™ÁZ&ñ?:0‚»}~,Ö”«~ÅVͪ¡@m|ÊÏ—ªPã´X’z‹D@Ó( :ý U/=¢åÕàG”Ýšú¢L¹hTßo¿km¿þáçß¾V_¿¿‰4†8ˆoþNïßnE_2mv†¯}ûÏï~þé5¾Nc²4 西¾{ÿ^Üà*_ƒ¡\[»øAÁ‘B’þX1ªljŒeϺ?Ç„@ ÖÍoo\0âpÞ"²’Õ&x«œQ™‰ç° £(àg8ÚtMýeÝí¹Ø—Xüóäb8 cݯµj„I'Þ 3ÈšödÕIð®çÎ+íËV(c— 0zà&ÀfUì×ìŽfÜè©ýù²æÍ±2é8f¨÷EëÝ8UIl犄HÜbÈtê炃':Ó771øÆÊ­7Þ®BHÙ~ú´²‚Œìc:¢‹„¸îç°Fq49ЄXkG4Ê%`µywBï´ã×Ùü”> óª"GüúÕ_pWSI›´Ž¡låyëgË€•ά÷CV ôŸÉ´2&™›¬B†,EÄYÀr6¼Â\lQŒpDï(ö0pnµ†¸º p§WX°ÅÃp—ÈŽaN¸‰ƒ¢‰“É¥°‘?¿« þÉ_,’*Ø+ %f(®eTbíî×c[¢¬±/‡¶8íÀÄ=—ÙµM'²°BîÄƈ2)Ú›± ðòÿâ;2?°Š^€žó œŸþcõÁŠ&HyɼÉ]ùm~è›-Ø0pÂg]¦¥#¾üëÆ"Db‘ƘBt,Q‡'¦ L q¥LÖn;´Êf¿Ì‡ÂÑÄ:àý¼ùÁ«’0ZME±Ã¸”¼¬@ `ŒAïp™÷¶xêáÄÇ;…sù,0¡¶æŸùÈøB`®ð¶w—‡YT–($ä샌;òÛò´(uò£j¸~,Ï…üÄt>å »§K­ûU*Öx`ýˆ£Ä}r~t£¡ëAúιw69ù—£ë/—=‡h°ê®*1ÀE¬¨c?´|L”Ûwu|ÎÞ"ÈzôyMb`ï½H H°°–ã ‹¤09‰wÂé¦M “C‹³Àg;îäKƒµlõx,ö¯¸E žãÚØÊÂR3¥£¡jÑXIlšCÝ—‹â+šÖc Q¹.1‚bX"@Iýÿ—ëyå–ç²Ê[¯é¾ãºâÇ-ä#× ®U°|.”HÙPCT •›ëõcwÓ~ì.ùÎÛAŽkýY<§ê4qZlæ¡…¤¡EèGïÓBz2¢ v¾Œ2àÆ*\±§ &Sås¨±a‚ǹ¢'ØÃ냰Zȯzn¦§› ÍbB_œ=dñj³ÃÆp )ÓÈ|°,P$~tÅ®Ap ®CO.áë'(T9&Ù(-¼dRh§R¦Ye€@Ã0y£mhQ@Èã BßQ(Ûc£ÈjÒ¨~à­$:8 ŒFË:Q©á±h[o kwùQ”ŸJ¬ÇJ™Juô¨ ÅÉFUúíN>«¹¯&öߨ c %Yph ‘ªü®¨ø÷r9á®é&W™sy< XIOŒaÖ—–¡ë¾¬÷ò½ÃÅÁ+þ¹”y¾t0}ÀÂ^6K+þðt ; ':§ÓÈë=E“ÐéÛ™•G3VNcs8t(†»ú¦©z®˜-1<÷µŽ¢ª¾É~òÀ’¤|Uð|óþI¹<-—O~?5j°†­3+ÞÑW¯kÆ‹?åüë÷ظ/¹¶Ù&V…n‘y©”o ’_¤~Æ oIì÷wњصãAÉ”¾®‘ÀD9÷qÛê‘Yq‚Ð EN‚»_›„Ä ]|H.—1u’Håq¼þrÔ’eë¦ÏZ>C¾ãx¯º²Â•¯‘™˜™}ŽS¸Bý;¦/И>;j¡ÿØ;+€a‡§ønáTºê WF™²d“>jüâ-~bDss:Éu…ksÀx„[,J‘c3ŧÇÐU—tŽ|oèX¾£×% DŽsAŽvиúä?>ôÜú1|PèÀ·’³Ô\V?lsþnÀˆS‚µŸ˜GQן×Ç!Oò(PlêÏ ›µõËçüêÑñ°ïž)/ýʶl XÒ«âŽ7:'ìÿz"Âò¾™Š§+;‹œ ¢Sâo# Éêe¸¬ÿ¥ƒ™jÁl¬\°ñž½Æ~bÈtâôå+JÒñaüÞž6ÈeéÛ!c»¸['3ƒÇö’ÈÇÉJù{ ¹P˜êm4Íœxº|¤/'8hîþ]ìúy ØlñÀ†à$J¥Ìf³Ù˜··_ý;” endstream endobj 227 0 obj << /Length 1325 /Filter /FlateDecode >> stream xÚ•WKoÛ8¾ûWèV¨Y’õ8¦›4HÑ6ÙÖ[ì¢Ûƒ,S±°zU”6Í¿ß娮7EGóü8C dpÿ×AøÓYµHÒ$H#ÍE§Q0˜  ~_Áõâõzñê ƒŒg±ŠƒuèGa$qk°Þ_ØÅÝÝՇ˛?—+¥»àË•‚ývûáÍÍõ/–RJ¶¾¹ý°üº~ ÚTð,µE"âH ÒÔV½òR‡6%ø©£Yè}ÞNyb‹«õâÛBº`ä“g!£((šÅ—¯"ØÂÙÛ@ð0Kƒ'Ù‘V<Îð»:ø´8‰THÉ3­Õa¸¡ài–ùx9¨[®¤€(oÇ(𮫮µgüÁJ¦> stream xÚwT›ÛÒ6Å¥‚•â¤8x¬¸»»  H’‡âÅÝŠ·¸K±-PZ´Å¡H‘¶P\ZøÒžsî½çþÿZß·²VòÎÌ3³gö~ž½Þ°ß×5à“³GØB•p ˜$PÐÒRƒ ?$@ÊÎnøBÿö“²CQh.þ‚Áú!,P ¨?v€`qðCq ‰ý D ÄŠ˜=@‹ Ž€CѤì ¤7 æè„Á®ó÷#€ÓŽ {Èû; çEÁì p€ãuîhq ì`PŒ÷?JpJ:a0Hq ÐÓÓ“â†æG ¥¹xž0Œ@І¢< ö€_#´!nпFã'e:ÁÐ O À:\avP8›ònE°« Ô4:H(üO°æŸ^À_›óƒÿUî¯ì_…`ðßÉ;;„÷†Á0W(@GY“ã…á@àö¿€W4›ñ€À\!¶XÀïÖ!e9=;á_ó¡íP0$͆¹þšø« v›•àö 77(ƒ&ýÕŸ" µÃî»7ð¯Ãu#<á¾[0¸½Ã¯1ì#Fp˜ûc¨šâ_¬‹ôß>G( }((* €º ^vNÀ_ z#¡¿ƒà_nì þ¾Hà€ês€bH}Ñ(ƒz õ÷ýÏÀ?-R0`³Ãl¡Ž08é¿«cÝP‡?mìù£`^s–~`è×ç_O–X†Ù#à®Þÿ†ÿ>b ¢–‘ê#9ž¿FþWP^áðåð ƒ`(à!öÁÿŸut!°¿úø\5¸ð«Ø¯~±õwÏ‘€ó/…pþYL¥.Àùo¦[€„AvØ/ðÿ™ï¿Sþ4ÿUåeúw¤üØÕõwœóOÀÿ‡¸Á\½ÿB`©ûƒ•+øCM jW j{ìößQ5 +9¸#–Ò|`!~П~Zæµ×…aìœþ¤ÍŸ~£_‚s…Á¡º4ì׃Íþ+†U™ öAc¹ùg‚ÆJóû ÙP¬¨þÙ‡ÜaÿK}Â" ñ&Å>Öø‚±2µ‡zýf7ÈG`°)ìÌþŠô×A ‹€X »A~¹{ÀXáÿ2EÀ Ú‚vú7@ ðú‹ðþmþ£3»Ç(¶õߔ¶ý·ýû’€B½ v¤³3;‰PçúÐŽ³Z9O¾1I‚½Œ3S¾±b+bL¿Ò„õj’AnÎœÆ åÙ>°²•s·¶¼ûYÞÒ‡Cßõ–Fo¡>å-GÛ„™ë“Sɾ§Œ¬3wZqž™¤É3‹—¡úqt™bÈ{Hdìû ØïøýQßû1Ù“ƒº\ù¡zX‡vWOmyŽ& £˜ñ—Oú˜6Û!à á#Ú?ò?¹= Y‹µˆJ×ÎbÕì:'Mò¬!_Z ècz¤î¼±ÏŽ¡P’bT"ª1^(¼ý#¿Ìc7‹Ò×V…Jv×¾¿b™+í¬^ûÀiý`×ò>gJÏC'›‡XðŸs& äµ|ª h3Ú~>/‚¯eP:ùmÜ› S}½Tõ‰ÉE="LÃ{nªw|åÇct5ów¡œ¼ZIRW•ë_ü›Ø;ã<ÂqÛÿ¨M£XWâ¡ÉáÚñw)`sÍ]8á ›20Ípê0”.] m4¥¼å˨6º lúªyÎø[ÁÔzC!ÛIOc;äVŽÚòc¸&릾Þì(— "æ{þ9g÷HБþ0Gê6‹y—5˵í5Âúî¾<£qñòÅ@ðQó +ËW:ÜõæÜì×+ƒmÄ#e´N"WhJ1ûž½ÀA›g¬ö˪IUécEÿã}âùÜÄ~³ÔÛ_ëÀΪCËovƒm»ÚrÔ_@ülºœâÊlŸp½ò4 Ù³3ç9§ì×›â<ô>s$¥Êp¢3h +ä xâO‰¼â›Øq˜±@.g¬Iû\…|Œ··àú‡+ÝLÖqPÙšn\¿´ÄT‹Ø(Wü`f¶|¸Aü2ZðÝÓ§.¼V±¶IYû>#mIJ‘0!kyµ*ʅ˱ ðÏøÅä;_Lšê†‘ˆÅËœŠ(¼./éa‡ª æ,–†J'¯œ³ô‡¢€<—dëë4;€¬ òEWÑuÓ…$dýQ~v®ê}ãÓ… ûæûÍöB…E†%wf…Åy×.<¨Øi<å^˜‘àñyw—È4¶†Òç– à^±Þä²g¿4Ä}ÀVd§vÑ6¦AÎ&}?}š(¹ãÐÖ,¹ï¬ñ#~’Í¥Õõd‰ÝúÈÍ’!¾é{fM®Š“F0gCÛöH$Qí[LŒ¯hi¼/¿¶Þö-ˆÀlΙ†´³> »¶3V£«Åá´Fi±žEaÂìC_hï† XÚÁ «'B‡×R{LoQ™/=¼çkœ¬¸_©jÌÖùY}4‹ò¤j¢×Ú-äånê‹ööçQ"Vz¯6ŸUÒÑHqj¶åŸ€'ò\À_#ôÍÚ¸–fìe,Ñü(°L¤'`$ tà"Ÿ9påúMÚ3iÉtGò“ªY\í¾—e'•àº2[6k¶-õ}Î&E=}[ŒDÃàímçâÖ¾\²umº¡ªIB¡ọ́内kg9îllj½uõ$œ¥Ÿ%F‚jõn±„* m·ÞÊJœõ*àˆA·9”Í9cH „'œ—ÊŒÑÆ¡p¢¿ft´[U‡QL8è›,½Ç]+Ï/|ZEeÚ,ÛÎÕW»±óNÙ'…­´+Ðè#PÏõƒƒˆ—ûJ‰7i½§]°ª*°›ýbÞ6Õ%¹æ‡Y7Âë}³sõ·t¯¢zƒÎ < ï&.ø=™ö<ã­`õf:æsB–!HX9ϨCF] eú5îEs:)\-JÁI.öŽïϫɓÝ_T7ëpt[ð=ºKÇœ·«ÞKªÊňÒ;IhbÒ>)zbHk«é”v¡üB{*¥çY¨sõFøGäñÔ¼…FÖ4šº2‰MƒÃ÷´ª7 ´N¦a{Ó·æ¤SoS ¼;ܸ¹ñ]ûƒó“Þ\ÅÑ­¶ƒI¿ƒ¼û-ÊÑËãѭWôÛsšÉÖOHíõÒÔÕØšÛÓz͆8?ÒÒ¸é»oQ©›Ó&8Ìã‰ñ¦Uˆ4|ºg ¾(š ð½Ü}ÎhÀK ~*BLv8#7Õ¿ìíʼ¦y£íæe ÞžQå·/[$=tn²Ü4— †Ôb óJm¸%&:Ž|si3¯bïÔªn#7ioCT ™Y‰-|о&NL2‡*9øæ‚£Á£!†u©Æš?'„½M4ü|'×Ò÷ýæš1DÅÎòöÛaÆRÕ>³‚s=†3ê›æõ]MWÓ‚6?= ®pTˆÑM-c“Ù'üŸ©Ìø0[™ÛµUõ>¹ÓßCKp"H% D0à&×¾E›—¶Y›Ñ8ùí8j»4ãLÖ\¹2§¬¡äJ· 0·JŒì„¿¼UX• Fô “zi*¾í–ˈn~ò³_»”é½>1@3ækŽÃ€×¦€"gZð(¼ ~n&g¶÷âÝøóXô­ÞÙŽ¸Oü¨%âZ<æC%óç|x•?[¾ßÞ )òéLÛxŠª&¸³³2ÁV"ÿ‚LðY¼Užæ0³ô#P…!ob üXd‰¶ "M:JõËjO欣Ê_.ãÜÞ—¯ÿÉGáÒñ²-o Í¥dõèò¥sµ[Ì¢ì’u±Ü›zµOöPó²éCIܦÍñªâzâ#ûÕûQd„¦ Ér?EÝä|f?çàÛwiK°®gÐŽ'•w!—;NÒï¶Ò)¨”ÞLÖ~Ÿ_ß·ì'Ð ú&BÞ#·|:5hc³Þå,$ý‡ó¨áiàõ•Q);÷…ƒÅÇÃfùÍÕä¹DÉá ÝX6$žsU`ÏÀ¶g/&ŒV¾«.V1•×òc ÐiTÒ?²Þ2kÏuó/$µxQUØ!Ú>gÎ’*®n^“øÂ }k73ñ*%ŸÕ0tí¼ûé÷šß7Ý®6Âõ _ÉYF3÷D8ƒçÛ[ÆVÆÙG­WH6ÇwrHÙF6¥Iʪqn8\Ë÷–Š *1Ëú°lW6»—ËýŸ ™âbÛŸ­Çø^ú»hŽË~þZùúÖˆŠTŸU…ÓÇ.—šì6‰¨ídâ™,ÚêÞ™—Ê5b8ñ]ZÓð¬G1ßœkÖ”© :Þßâeƒì…ÐëÏ×^ R‹Š?Z¸Ú¹€u<›Oˆ#F7—ñ_)íDØîÅð*T»ör„ÿ4¥ÚU+ʘÊÀGuZÌ7¿~sýéRаñHZmGÙßCÊ|y7U]“ã0­0v—°îùL› Á 2|êÐ…°0dlH®€…œsÖRkîÅrê“…« ªñiÔ:×Åw・ʭ|„•bƒè|Ø®‚Gì¾.F\ ¢‘O;åöqÊPh²°ÎHõ·ÉW.1m£*JNS[2wCÂET+Õ 6©¹k²b1÷3²šÉÃtK} Ù—;>Ý5Ðs¿:5’çS§ßKF¼4´ý´Ø-¼^ÓÒý£S ¥Kºâ‹†—»`oÉÊkLSUövÂ{¿q“ì‘ ¢Q©M¥DÙšöþ=«TC‰x>'“ªt%tkNwt±aJ¢æôãà‡g¡þn&9Û|ß›´VåÆ|Ð6h[ÿ„¼ØÙŸ½èVYjëdt7=oM9²;ôŽN’ÒëŠt×o1KN*6¶7N Ì¢ÅY-lœKCVF‚T5îYSÇ{k‡ ¬×Ý1­ÇÎW8q2ù #rL“-›Âüåhñ.ËA Uê°Îz×îÆz;jÊõ+Ý’Ó£ûPâ¢ù> 8þ#8˜h+žš¼ðÓå¸á»L¸=ž‚È+  }úvoíK‰¨ ;Er¬ãÍî@‹ÖwñÉÔ øÏ×lv» Â÷_$嵃R£?ÍɆÝOkXW$™| *qóɳƒÆëC4>S¾ÕN­”£Â~abcТÌùÖî"‰8kËäTöߢjrMóƒ¬÷pKDáùCÇø¶Œó7 âwÎå¥ÄØŽ‰¾îÒ²es·ˆ$_ 9¡îß!aVJlÜœ0éç/·8U¹)e¬Ž‘à/ɂכKâ¼`µÑÆ/Üo&޶ÖT¤T‘Ï ?;kßðô¶\ž±ÈY@ ¸»}»’ÉãÿX¢Ñ|q"á{|lØ&LÞ“ÿúi™váÞù a—ËîJŸýŠ×+5'%©Á²ÈË$KÀ0©ÇÿVû7µà˯Ù‹tÕn•Dàg^íô›“Ô¦“N'Ù=þéÝf¤䲂—€}#iŽb¨xÔê×aª;U`ÜÙϹí³4¾ãæëÑß«áÎýžeGŽ£˜Y7JŸDf-q™ZâËÎÝbb/+k&P.?ßˤ»y¶øµžþžœN>gu8úC;çÂ%rLq^•U€ƒ ƒM¦±Pe»v$x_ê±Ò¡ÞvJ:1箢¤DƒsmßpËÅò¬ÚÆ¹šš©°yùR®Ñ1\%ù­¶Á`´Ý€ÀÔö(Jþðŵ‡Ó ñV ò«1[µÔR‹¨„q›´êW÷*NËÅîLm(C®ÆV ¨é‹LÙœvúÌ*.ãà6õ] ݃k)Åk¥óM †ìlŽžÃ¨"”› ›ù‡X × R° g÷“™Ñ³J÷‚&n\›àù©YU²‘èÀ`?"‰¾Éx~K©äÄÕ¥ÌV®Çs8*¡Ÿ ÏKŠð~^C:ÛìÏürKcû£†±aȃ QúÕØ¼T¤’x—çpnÞ8’%Yr~oe¯”ÚñvT™ú Íþ›S.}¯½¥¤í¼>/áqþ9§òÄ튪t;ù³ !\»¦€Wm4ê%7×Â[÷‚JÄÝñi†œ¼5¯”%$Í®ó߇ýèõ;¨hY&™¢ :2¢º–²ÔìÉõÙît 5^®»V²»ú² èÏÉŠº ÚBÍ‹›2J¾ëÃ'NSYwV],æ%É\ø©“q]©Zà3Rûó¦LxÉ(JrޤíYgÿ,þ–úr?©òÓÒ¶ÊûAŠWÉ8-Y†l[jZ'«Þ18Y¢4B@-&¿Ú–îùR6"ô¸‰˜[Tc¢.Ã̰Â-BIÛóÔœü¶¤kù´‘<ÌR·²ñUæŸ<ñ%h€Br„׳E¹¯¿•]#n*͈hF¾N»Gý`¸êw™qd[ó‰9“ì&F3Bt¼”>é÷nr§K‡™kÙýý¹r*†$M'·HÊ«¾¤½Ÿ fîÖÇRëÍ~©ëdòŸ<é5:bárþ£´Ï,ÈV½­îðJyYǾª0"xù´gù™ˆq„³üÜš¨L˜Lèç E‚—q8‰ŒæñGÞŠ)³ÝDn&¥Ö’lc ×i~ž\j6+wªzaˆdÝÉǯžkˆd’“åØô–íüJói2HH†Û“†ž<Ōӓy‘¥óŒÒp?lÞS}g}¦'yD ö@ë¶…Þh˜w™N·7E_¤©Æ×…Ø»˜ n¸{ëOH2¯z‘IñåxDâÿPyGí_kÖöÍÇ.sê¨æ ÷»›ñÌ2g¥fVÚš‰cÌóW¨1)`Ýn°²¡¿’å÷ÁgËeìŒZ­ÞqEf Å)$¶çk­¥q<$ržw5ŠHO;ŒU‰9$EJ"ëL®&¨IB¡«3­akzKÃÈÌ€?2üáTI• Ï£ž‘|ùغåèî©VbnŽÑ Ç¢O"dL¬ t»¦¾e¹ÛÌRßßÙê¤~ÙRúª€±Ó9îÚvƒ›FÊËÀk7‘ ¢ì¹¶ìÕ6¾EK·{âT‚'RNŸ±p³ÂƒHÛ×w—}ŽÏøŸx܉'ÐnvÙs½û¿k_Æy½ñœ‘gè4–íP=ˆ>ù7õ&…_ñŸ )é+ÜÜs_\í œ–'Ëв0¿ Ðcé¥QN¡ç›Gñ {xÌT؇‹ÒdÝof|xrãÕÝ7i.îØvG;N3ÝiIjº(XL9ÉÒ.öe׈Äg¶–LpüQGámÃ(`”÷®KóºƒoT‡ÚS3Ïα²,¡ OCû׋ùf ˜Õ2³ò€.5^½ ùňé…ÀÓW2«ÚžóÐÛ‹R%/'Ô4ÓÊ‘t¹9Þ%­Ë}öKÁ##Õ¡…Ý•áµÏQPÅ=j/VáƒD rŸÌÔˆ‘àëÓ˜ÍÉ”‡[!{7:P8Ê0÷&|vnÕ@—È}y”Jºõ&kâ %ÆT¢·í•4 ʨ.é&éJw–žÑ7´i¾©ÞU¼E´ÝL#hº›#ù‘»ò¸C‡'4ï‹Å×অ¦²‚œ˜žÇ5ä" +føô5äi¶öíú÷óXâ[[¨ƒ™å®_rÍÑ{ÈG¿Gf\ýqû­‡½Ÿ»Ùß r8qà¢jNŽTßaº¬ù®@P€Xd‹ßÀgJl^9ú»ë÷£u©§•¹ÌÓ›:`ïú™D^Ïžà>»ûÑo+YÕŸ©ÿ ´&óµJ&óð³ãLcK 1#RîÒÔž™]¡Líø£ŸÜµ”úû[¯?}n4·åݰŽé¤}"ÖÙ©)”t쯬ŠÁK}k±©IÆ_äܤ þB_(‹–J}\ã°Ù1ñÌ\óNFÖ=†PôIÒbf½Qþ’A`ç®ÏPýù3Wï¥$ìFsfÒíïÚø<í¶mÎHÊO»ªÂÕ5áa–æÅÏVWa7'†¶7ˆÇ$Hë ¼¥ïYyHÉ£o¹û*zP@Ïüœè‚•F%” ™Dëä:ª“eÎUx&Ãj5S±ÌºþÜ ;ú•v^SÙ_ÿ‚æ@ÁF±&£jðýväÀ %_€Ã£)/ô%u©5íÞ²@+EéùcB…ÿÀšì# endstream endobj 245 0 obj << /Length1 1504 /Length2 7562 /Length3 0 /Length 8571 /Filter /FlateDecode >> stream xÚ´T”k6Lˆ¢„"!àÀÐ9Cwww×C3ÌÐÝHƒ”€4R*HHww#]"Ò-êyßsÎûÿk}ßb­á¹ö¾ö~öuß×~h(U5XÄ,àfPi8 Éfñ$””äx +ÄŽMC£iƒ´‡þƦц:#là0þ$œ¡ä]L‚¼ã)Áay{˜ææóðƒ@vˆï?D¸3?@âjcPbÈÃaP6ÜÑÃÙÆÊy÷šÿ<èÍ`>>æßå1¨³9P‚ ­¡wo4‡Ø4àæ6P¤Ç¿ZÐ Z#‘Žüllnnn¬+ÜÙJ˜àfƒ´¨CPgW¨à—`€2ÄúG+6 @ÓÚñ'®·DºAœ¡€»€½9†¸«pY@w/hÈ)T¡°?dÅ?fÀ_g³‚ÿÛî¯ê_l`¿‹!ææpGÌÃf°´±‡T¤Y‘îHffñ‹±GÀïê!®{ˆÙá÷䀴˜r'ð/ysgG$‚acÿK"Û¯6w§,³€;8@aHö¯ù$mœ¡æwÇîÁöçfí`p7˜×_ÀÒfaùK„…‹#›ÌÆÉ*'ùå.„ýwÌ Špxy8x9P'ÔÝÜšíW{MGèï$øWøN—#Ü`y'êcc ½û‡í…€¸BHg¨×?ÿFØ`0ÀÂÆ 0ƒZÙÀ°ÿî~†ZþÁw—ïlã0Ýy ýúûï“ѽ,à0{¿é¿ï—M[WYL_éâÿæÄÅáî/vN ;ƒAž»Ÿ·Q…Øü5èïZ9˜%pÇÿ=îÝ9ýgd׿@ÿ×v0þÝL~g[(€þo—‚¸@æw?àÿg¯ÿ.ùÿ³ø¯.ÿ7—ÿï@Ò.öö¿Óô¿óÿŸ4ÄÁÆÞã/Âk]w ¿ÛØÿRu ¶V jaãâð¿Y9$änÄ`Vwnfs²‚8ÿÄmÒ6îP U¤¹õÏü‰kýÚ5{Tްùõq¹«þ'w·`ævwÄ1ÿ¤ ˆ»mCþ¾Æ_z·OÿžC f·øµxì\܈³3ÄûîêïÀ |·¡P÷ßÖ°±ÂàÈ»Àf€%Üû×5óñØ ¿B€Íü¿|gC6è? /€ÍþðŽìð7¼3ìð®þÈ`CürØ¿á¿Ô˜»8;ßÉýmÂ;©ÿÁ¿¿)P¨;Ô{v n.l[Üp^.öÜecHc?õ\—e(ßø²SjÌd%AãMÆœB‰ôlXÚØ¶YYÜé-’æ‘iPnj)/ÊP|FƧýmUYgÖ£¹ÁuLL—µê´eø2E9JA°é;Á­ o¹»¯g¿ƒ¼52@Þ5pãu(_J ‡L’³L{>÷ñuV¡ën—™Ì‰gJ9”êÄØ=¹‰uûĆ×@L]ÛŒ—Ö¯°w‰qsÓ¾XÃýS.8¸Ú‚xS²&¨Â¬"¼,¤Õý›ê¦ÃúƈÎf1–ûÖí¶ŒÔÓg½­ßúùö‹iDÚ¦~0×gaÕɆN=Éé `t3=<«“§ºgvæ¦6…ðkYÎx…Ô®¸S=L)ÜÈŠîÇâ²¾þ‚V^qÊñ9'5¥–­¹Ùô£~ϱ¶=UŸÿÜvÜé…FÉ$‘2T•\T¡SÛï Qó‡¹+hcî– €a ,qË Üâ[¬÷M)IÜ’Œ”3{ðóä¾ÉCnæ!ùH8óˆò‰œR†mœÉµ«6eƒ¦ß:§°GÍP—Î¥+¸ØUòÎþ(MñyPpVÿ)þçÅý„§«‚„º+Uþôª+3ÑL4 Ý9ÑÚѼåpUä{*èú %á ñ“dRyþŒnÔx‹ä—aI››;_ÓxçûgŽ~z=YBsû(]ªì››¶[HþõÏ7†LæÊ¥VžW·< îÂUÅÇÚö©!Zj\„ÍALÔ}æYü{“œÀu&k_TT®nV9Ù‚‹«ƒªN6vtÝ(Dy•±IË`;öú-]ؾ°üyQ2{E‰Õ×ÑT GÍÍfÑJl^õfßÀÊ:™7äÏ/§‘Oü% É{©¿ ¬tD13ß„¼ß©×SãâH½ïÓ¢ÆÓ„PÔ÷{s’C:ê"¯(ÊÂ…x§‹ÁIÙzûUºCû) ¹£ÂKÒtôQR ø“—±vr¯VÕ.‘©y»‹¾›èOx .Z4hs„E~õ\¢&ÃâTÆ}Œ /­„†Øô –îÚ4™ÜÐRp«âó—\Z-Ò í«±`á%u"ÔiÜ0ƒ…Sæ„Yp:ð…zrÒX›x¡žß¬INErvMÝÄ9X W»¸W‡ð’ÑH·Xäê‘ÈÙ*ýÚð P[Q5^º èb=rU·þSÀV­àü³Ç3Ÿw“ì6ñ¼N{,úhY9NN!Îr N(H6>HV¨òÓÈûVæúûÏ&¤Ã,?KzÛí(Æé]´ŠÛžY½¿ )O/ô1-û¸–QnMM”¶I«)ÛÉB@'Øne"­ëÉï°~6pvÕ Œ5xCÂ_ã‹-dX$uº~2^jÖ‰‹¹;[²âF²Pãq”sC3òšÒ˲Ä7€ÞTËG©+˜ûúÁñ¯Ahs¹{»‹å´¹ð~¥rqŠ Ñ;wÙb6‘š©öHs®{½î‡ò—裃r#š7¾‰´ø†—ñôXJ÷=çí4èÃQ/j#äóFÁÆZ¶ëf[Ð nö@r¦2~‘Ú£Ge=´·ë,?¤uÙ nò\[Ó=kDš¢,;õ7~˜ÇóLé8P‘‚ZV™!qó|®>^ÆsÊ ß-Nš3ÿ/K·xdËÒx·W2ïGñ”¯ÙwHµ"øåâ&Ä¿ú“sq×®Þ-õ¹h©èBOçÊ|ðCZ­Þ|ýêû8`¥²~UÁgOcÕ3j5W©±qíF²å.½,Ñþ½6´¯>dL4|ã7Zø C’®¥Å[%s¬öÕŽúàF°ñMÎ4þ„E)™±7]Ы‹ RÁëc=ü¬gRx*ù‚b,Ô÷*âèz¢ZñT Ÿ]4‰ËIÜ[ô+÷v‹â]©ÔJoÉ>ÊWý(Ê*žåSt¯ Š;7( ½/O3X¥¨óçó@’šƒGF› ÚÊÝbë´rìê࣫™‡Ñs ¢E-˜ýâY$TÓß$L3ˆ¬²\$‚ºut­e;#Þ)²î­Òhš;û’!z $ÒäÔˆk"ªúè¦tg,†¸?Ð% G¢ÅŸÆ«/·¸hO»3„="?O¥Ó.ß?qÿ|?k?2#.ƒâøGv¨ÝEuÓí„»ì‡IäîÌËÉOÆ ýÀ8aš…ä¹R¡Ûûî\º:z’¹[˜”á'µ‚ôÐ)ëvîè—yŸ¬k²«§Å«¯D1 I²7ÙUvzÕ é)·‰ž2–Ï—QÄܤÖ&"ÛûŒ¿bÎ<>Ø£ 1>ïþ‚”©¼Ânº%²/ã•×ÃóN˜{ý¹”K/28–|’`þàÐ!So¼¸{ö Ýs&Ì"ÂPMÕSx¿†O;±û>Ù8ãÛh7ÛGOú­Îûç’H’£àŠ­4z¾húJý7­þG™Uqµ8õ]_[P!Ã?Îs¢žfn5PªR6 ÛGƒA^Ò­È:ÝüÌøú¯ hRJèÓ¼c+È“©þpúk”,5ŽvúE±RÃÓwr8+²FlLøž SÐzä…#úìÅ&úR8ÃWÑDÝí˜EѼÝ[ÖçÙ²ƒgGÇû’§T¦ÅBÚHðuµ'µ£îñ‡„ÚÙ¶qÚ«Û\âº8ÅeænßàÙ3M©`y—n®‹Ä"ŸiÉ 2¤ð¦$ˆ_ॳ_Då³'׿Ó3<•„,qŽÚˆã³û?Ï:j`CŠ•”(9Ä­žd‚‰/ÚbfÌy‚~4}¥yŒ-¡aðò`¶F"¹‹uyÅÎ3CËþŽÊS“ÏÛö£bõWÇgF—ês‡‰sd?²FòŽ8è¿úar&VãÃâ9ø(vÎb_@Àýnå_;¦t |§Rdž¿Ñ4¯†:»³Î4ñ½eZÐ (½-úövÎK¬ …“äÌ3š!Ë< Rર¥áÿŒÎf!R„g™NŃõ¾ðà¥Òs‚MQÝ>X9?¯y.92•t^¯¤6iû¸!ì¶‹Ø–5&ù2ãT4#)ÞGíÇÏn&‡,é|“’“9ýÅ?>¬c=жÇÈm~FY<·¡§Qy SF/XŒÚ\M‚ݨY¹«äÜÓñÑÌ^øð÷KöÎŒ 5ìÐݪ=Ûûjþ`ŠQÓÄÎ} ¹S>-§ñö³• Χòˆ‡Î‚˜ã¹Fu ±ö]h ¼¹ŒÍŒ6|üVs«³Wîð)ª¶a‚V†¯o©nÑí/eë)GtG~ËÙû¼H> š6_eÿöžjzµ-*OÊKË•ÓÕ‚:|„Ÿd‹\ÉØ°± é€ ¿d¶o\?1)mAx¬»pÏ"]TYkzÅ$PóŠÉËÏ£ÌsC¥cwè‹ëGÐØòB’EzÄDuY¡àe¯¢@4Z«í¾L<åB¦zËYô&NþãB¢åºÏC%W¨VhzUd¬Û.½yJ¤®äúQo¿XÐ*_Í÷ËTž{  ‰nÏ‹H^hûæ½!¡—9åOæ$Bô-¾WK¾Üumꎤv¤œxO¤È ¿K¢©b,ÙŽ³L­ ùò['¾N»>©áTèÏ£•üêâÿe‚|3 D#Boo×Úk:3d˜¦ùÐ=Þ(È5žQ0ª%á$ÚE»½&ÁzEÓÉ"=Ô6$ºA€(Ï3…7G|÷1r¿tU·¬a@æáå!‡¶ò¯$o¢MtDý€[ŸrxlT’›šût g—‘´^˜þf6c¹õõz0íV§{µÙË”ºA$±ð½Á{yn×&ßT¥¢Ëë£OŒFq³å9³ÃvÆœ5¤>â0¡|`þDJä{÷6YRç§tUh˜Äí ¨Íü¦ÁD –(úž/o@"é©;Ò5.³„5≥V%õ£‡Æî^Û(•¦¡1—/€[ú_6˜nÔ®~ªWd¿ž«¾×õè¥8îÀšŠ`ó=ÐJ½Lnî&ëÜø¦À¡³ï‰;å¼§Ýæjº#}#<1÷Ê>7ý©Ûç2Ÿ2UäºBy"Þ2pmÀ7O‹—š?¶ ŽÙ‰¾¥AÈššŠÉù=ø(Í’$»‹¶ö„ÌÌôÝÊ.Ìô’DÐTp@óE­.ÚØ1}¸«Ã%a”X©Á™ÎVùœh6Ö¥Ys»òˆ“)ò~ÔS }§ަ£Hò~DØK~XN{ âdQw›§%ñßÌì´Žý{þh`&–QT|ðÀ óz,'MÁxJy$æ¶Äì ‰a¹9vK-žÔÇUq¼¦å÷†'psí¯?œqXL¦ˆ³ ìç³}ûho0CÈtäKœà£ö{!ú~ÞÜs Ó9Ó†϶Ld„FRÌQ ó~1U€#“på'º1£mO†ìî…VFÑÉ–ŠWî†ViªQž`U"úòŽ1F&ëÚàŽ%µÙÞ0gÌôÙ1ðÞXìøQÆ"êË”ÊNr¢m}×iñÏŠeRx]ÙK›.]ì¯ÃÝœsÁ™Ç|çʽ¢é†|:ÈÌØ´²)MÅ3|¿4ü{ëÏÆÒ‰gòF&tÑùNðYŒb½hM.6Á¤f<>ž´¡¥@N#KÒ§½¤\ôåö‚Å8÷±[$iYŒž”£f |ŒWéLUç>lz5|œ²#ÈKH%ÇаBP9Ùê[Y <M,R*W5º×Ù7–ì ª1pOˆO¨°ßÜ×àT;™ý_ÉT®æ® ¸0š¨‘˜\“ƒÉXõ«wXûßÉÊòKäóËáß"Œïõ&8Ô ‡RÀ#›"÷1äuDë>  Ðt¦,,dÚ¡ÀŸºh†®ÏGû?Ç8 ¶™Ç)•b멊¨Ý8ùÀi ÛWkFv4ΨH_ ¹ñUµÄP©tgwÒk®ÂçÙÄ/ZéÑc£’Dèc¸Dû²­‹ [ù‰ kUõ–­SÎÌSë(+чóTƒw÷Ï™R×"aùE¾Q=’ ø©ŠQe‡Xž ³€÷‘W« 1QERý?ä—rgFÜKÇÊÒägé”…‡[×ô#äI©Â«sV£³!^rSt‚ûïŸi£Õ.ÄZÛU„¼y«‰)~ª«DÀ˜Ä;`<ë¹k}MP1"ÅP¢ž„ÓL™Â}¯Ó­ú 'dõàÅóô ŽdüF::n*Do“Ãv¹œ©ÈœÆjÄý2ÈòQ<;½xï'Ʀ-!ÿgšc¸JTõº«žh¶,Éí„Y¼ßÕd¸ŒÁÙ>õhš¡"W_nòӡ˹«I”plË4¶6\n|•ÓSÄøÑ—Ašk|©ÞÑWF*Sݦ‰¶ï·g+ÁxLáai:„Ato•ÓÖfÛé£ í—:Á%Ä{ç$‰Vò<2µ*r–ƒSBs Ô^k8aGQ”œ<•I{%NLÑpûhþ•¶]Îw“Âk§qü$[×óÖ †˜g•œßË?‰l yõž$³él~noê‚Ĺ™ˆ¯w6™©ÔDc0ÖÀe¡¹ùÜ0? ×W®•"‘@=.;{¨÷0ZúɳmâôGÃ9¢šÜÑ䲓çû {È º¬+ Ç1äm°•I¯(år*¬z˜çLüåH®‡Æƒx÷BôJ1Œ¥´¼àCǪçÇÙ¶ê ¯š¡©è½ÄDí*ß­ƒ ¤Š—l¢²¶ ñI ÄÝ_¢IL¼ÐûŽ…ºZI‡ã¼jïÒ5,ì™òXVªæÚþVbrãH«ÎÕöRC~Ê6´>Qã|œ¤Û¼é2M‘³ø(#aíM.C&AW"ø³x!Ïw\™à*“’ݸR€!»¦¡~ÃÊ•žÂC=’(ÑskXj?ãAáfU„¨šHZRÐ'U)bI#òÈËâÀÂLözVAyp™D%ñåQÈ‘’µšÚ«¬1w¥á”×’®3FÛQõÙÓ§—ÆÞ–®È—0Öi®æ穎Ƭ¿<™>°Ñ1ázÒ÷:‰”¢0¨YTBzD= C «cÅØùèJùñP‚áðÕ¿]-nØòPgØñìIì6²Ë–ÖÓ>DnYW”™йT»\èGPÎx¹ÿ½NØÔ¹M—‚< ï“6ý:^‚"ܦ^€rÐò`JWÕ¶z™Ïœ™êÄåøŒË~ùêç¨ê÷ƶǴI«÷' žýÅ«€D¹± ¤v{\²Ý÷q+Ì4ÑûŒ¢Cræ†wþ’kÉ'É~%j/PƒYt?×µõT7{q¡g‡{X€ <­zðá¢Ë3EÀBDhkÛYW7=·KÕ%ákg¸7º(¾È¥™°äÐìò‡“Œ\Hоg6ÍŽéÉÒ\#c§ÂxÑÙÎlÍ.EÙ8yˆÛ+GSö™Â/×¾•¶/Ê„ûþz¹åì`¤GXy ¬íŠsôPEŒÙ •ùs×Ô¤aò¼¢õâÇðþç¸ùÏCGI¨B%Í^l‘J`ÖYÞ´Hñ¢7Tõg‡'°~wRÅóå—Þ9Kˆhð´”ÿôýÚ+Ãe\›ú²àÞKÆú«~áÃh§©µÖA/žeþ¥c¥}>P‚% Oš ÕÉr]y}µÕÀ¢‡?ÃgU÷¯T9yp\–r½MØõ‘6ql )“X½:JÁäô’rc²­ŠÄ¹oËΠWoÖz÷sƒFX2‹Žµ‹Ø¢™éÂsÈKRnÑÐ"¸èžÎP=¥Ük|—+Þ$iÓ$ç­¯æjôöMdn§Ž é‚ðÎo¦DŠàâ\‘o-e7f³ÊK1Šœ*®¡u4­Ò%¦÷ Ê7®¨—<_|céÔ¶éößùZãñº-*ƒ(‡è‘P~ÓˆM¯ $]ŒÛa¥!¾pž0<  ;[!¾OW|zí|Ä\Ô›%mÓNfï/n"åæ`0g¼ÿ 4 ÖÞË?ÿŒPµƒÛ [ŸSõ^ŽÞëjrÃwþƒŸóP}T¬õl ˜ãŽUâê6â]ÜŒ–z¶f§D=óO·)Š¡fóEAb_Y[ÀðVJÃËPÛŠ\õu’ë{èXÈ ¯uJãú4YºIøôùØM± öQ”¦|L1"[A¯ö%À<*ÄûRÝ‹ðÍ.Z¤'!>n>»°ÎRqO²;KÄe(HÖù7“uzAÂz kýlEË)¦ø"Þ#v‰Y¦ã‰qâÓÑ塵i¨Ëü9ˆVºK«ÚæuDO’Ñšì¦|ºˆòÀãc/*j…åˆzÔÞÒ5}‘¼u´†·«cúk‚„JrÂI¨,~R»|òx2àÍxÏ•*%ÐôGÉÁËÁŒEðÓi>²!iÔ¢ ¾½Y% "këœ&è—ó2&Sñâí2 ßž4êX ­‘@ƒ=¢í²$ 0×PeŠÐ+Mü¶B|… ”&­üͺj¶:Õn?}ð¾Qó(Ï<‹Ñ»¯nYž‰oä ŸâVX‰´3×Ïáf§g™ò]cSÙyOÍþŒ–åÀ ¤ *÷g˜÷¤øI ¿Èžð©zfÚÞ/M1m±P—0áHÙ^;~!“†qÍàCâD,ÔÀqï!ï0.Fß=“Tbž!½ÝvŒÍ™îÝZÓ !Ë£‰P±ÜÝH m¢ÏW$¬µÁÌÞ€½Óþ‘ÆùUŸàÔpùèø•²þ/¾0R­×!˜YÝ9Æ‹ì´\ÉÔ—²”ËÉ­H;h<½01QÝ©i|ºíP¦Â+v‚$ù-]~“Þ@ð’çѪûÃ36k (Æ—4rE“§ù憊>5ì²AÛ¢KˆÇ¢´Ì›ƒ˜ÍE'³ËÊä~ÇJ©zéÔø…y]ûÌf)°W?ðZ]†X~²1”_G+Ý7ËõWñdÀLáÄ`!OiØ9(!©ÖÆJÿÔì\òú ~$÷%¦ÿX¨¢ZMʸè‡P=V ¼Ž)ÃJOe‡ù6Ñ›§ç]ÒÔÀ‰*ÌE%nÇ ·iôSžŽÔæS£ã¸ŽkßS|fAÙ¾6ŠMÂþM¦ïï•iÑpG¡šéÐlŒ¯ µ²$l*ÝëI¶¸³Å K¯|·íHIàˆ¤píŒâ·nÑ˪ Q@O3¡Þžçšž¸‘Å”÷ßcþØñÛ˜—„¡}Ux;R,µvD Ÿ1¦¡3‡›Ê¼/–çR¼š¢F]è—xG7Ö)¤¸ìñ•º`Ûi)p´n þ52£š¿dÓu6O£ê±fÀXx²AÓ‰V[Ö\^°}Qºš$è½S¡%®w“ X¥ÕTÞÒ`«V‰q¥¥"Ôc.ð¶Ý…ðÉ©8¼|§£-Þ h£u¤.¯r…(Òž®˜D½Boè 3@]Ž•¸—çy·8ˆ›ßCa yVêB!¤Ñ¢#­›·­ß£>mL|hÅ/2%œ ÂcŸpŽBe”z:_Ž}¹aè°mWïZÎ(·ÿsBT#lâÖRÃäáàÀ,q ®{»T²Ù 1vŽø•š“eýk®v ·—ù'Ÿ ñ&Ïù:Ìe¸Uºýp‹ñjn¥óÊ\(ºµ±lg‰É@ÈÏúÚT[än`¢-9›g×ékóˆ×1(!ûi;%¯§+V Q¨rò0¡F¶ƒ@ö€]‰é›ð³ìç9ïã:Aj°"‚%k!Æ÷#klßâ-öX•ú0êv†ºÝ[ùx SÇçŠŠïšæ_ÏÕŸ£®ƒ»Ý¤xò“ÑYIŒ ™9>4ì½Nl˜<|úvÒ ’Ò?Ì«‚Y°•jO„Y>Ø(=¥²ÌGÆB@gÔÖU7¹øú%zÇ#g/gÓãÇn¨Sq‰âyF°cÕÃb2J¹ëo¦¹ XbÕÒ[BÕ+YùŸo¬‹ØÒ*óy‰vTÑ/Öl÷…Ø:w’ÓÇË׃±ÄS1ž~ü:ÓdwƳ$ñÞÞžß endstream endobj 247 0 obj << /Length1 1394 /Length2 6066 /Length3 0 /Length 7016 /Filter /FlateDecode >> stream xÚtT”]×6ˆ !"Ýpƒ¤äÐ%ÍÐÝ’ 08ÌÀ0tK>„”‚¤¤ÂP‚ ©’ Hw)©€”RßÏû¾Ïûÿk}ßšµî9çÚ×Þgﳯ}8Ù Œ”œP0 Ë*ºF a@XXTPXX„˜“Ó††CÿÀÄœfP” ‰ù‚ Ac1UËÓE"-o8@2 Iaa@DXXúo"%¨B|`N€®  …D@½ˆ9Uþ(˜‹+{ÌßK€Ç‘IKKòÿr”Ü¡(˜#èBЮPw쉎8`Œt„AÑþÿÁ#çŠF{È ùúú Bܽ‘(y^~À†vŒ ^P”Ô øY0 q‡þ®L˜0q…yýÆ‘Îh_ `8ÌŠðÂzx#œ ({8`¬©è{@¿É:¿ üÀŸ»@‚ …ûãý3 ñËâèˆt÷€ üaÀ‡ú`A´š€ œ~!p/$ÖâÁ!X¯Ì!XÉ€` üSž—# æöô‚Á–(ô3 ö–ÕN*Hww(íEü3?U ꈽv¡ß½‡@ú"ÿlœa'çŸE8y{™"`žÞPMÕ?,DüoÌŠÄ………%¥E¨'õstúÞÄßúËú c+ô@zÎØ" Á0g(ö8Ð âÐ(ohpàþ¹#'˜#p€ºÀÄÿŽŽ…¡Î¿÷Øæ£`~€•0V{ @øçï_+¬¼œ¸ÿ¿é¿ú+¤k¢ca Ã÷»âÙ”•‘~@ €˜0 ". €~ŠL»þgìOÿ᫉pFÒ¿³Å^ÓßûüÏŸáàþK‰U-àù·È­…Å…±ÐÿYê¿\þ ÿåù'ö†Ã™y~Ùÿ3Ä÷ÿCÀŠÖ]$v ÿM5‡þZ]¨ÌÛý¿­šhv”.ð]#Ì óƒ:ÀÐŽ®¿Õò7ý9epj€ô‚ý|Vlkþˆ-Ç{اà +É_&(vrþy¤ÂéôsÄDÄ% ñ'Æ6»AØYt‚úý1 $ˆ@¢±.¶¼`À‰"þÙQ¬,„<°/uFÿ4ýFAÐßÝû ÿãTGoÖˆþ¥ lJïM9êu$žž@:ÊFºÕF¶?WbôX¼3ʹjþ˜W põÊûôƵG¼Õ9÷Q‡Jú:nÎ-«ñ|Wœa=Ülª»ÓœfØò#èÌ.Åhxµ…xjˆæí‡âM¥ÝÌDL&ŠkAçžAfá÷ðšpßhqæ{zKÝ0(¤<öíR÷{Ñ™ížX5\«–Ð&9ÃŒ$š&X‡?ã,pȧc'@ 0Þ¦Øõ#û~8JñäÃ%«V qðV¢hIàÝ%‘'ãó&"^môôwé˜ñ¾Sôs*o¤kÑN––̽òk’+a}BÊŸ1'pSpC$»fhè¬ñéŸ~ ZÉDr3¾¥\I«)k ²C±ëSW·ØÅS¢kDïA™7^;+Ï·šµ;»e0ÍH¼¸ÆH-]7ÃÛÔyÎ÷½{+pÑ|Ü×ðn¹=Øü™B·“‹/è¶š«UÜܬL6s>=p¥ÍªIu“Æç‘Ô>$J.ðþžò)èS±°ð])üNÜ~¦¯âùA{‚+ëwõ^/‘OÂ})l".#$ô.ÞdìîÓ»ŠªÙçDód«µÿU°Äm([ ­‹Àí.UÒª–ù³ê¤~ŸÚëá(ÓTï\¬ê‹³¾ïïv"]$øÕ¬Ò´%Y¼Ème+^``£>¼W9"ªKúÐiãÓay¹²-õg¤ÙÉn¥o¬r߃&’‘½6 {Òæ¥Ÿ©®åéÑòx'‘íme6÷†$2s“;§ËmOÏ|ù1šªœÜ%ÓºÝÚŸåb‚¦m¦TK:韇)Òüõ½!L¤ö•þ1Îõœ›ó8sÖfñnÙ½êk0Û»`Pf469.¼°„Ó992°Ìö~x™#^iýL¬«OÈă§p±M.‡e,ÞáIˆ»pŽk\0õUª›aªÉ{ ]Üêí¿ª|ëÚ+Qa*ùÁ-  ¸Œ;gA§„êr"-ÏíS@®â)kRã*/ëÚªïrQåw¬Û,q9UbM¿ ­Iä¥\. H¸,ˆ0óR®å³ûN]ÃÉTÎBŸëîB~äbåç0Âúúçϳúèí$Ó7iHìúóñ­½>ò33ÜA8ÖÀ™!#••Èlj Fi{ƒ>‹þÈ2UÁÁ‡eÑÔi +k‡GƒýéX&.BY8­=w¬››×ÄôÅ|ج²íŽ4› Ÿï¼¨>£~»æÏ ¼È\¾¯«u¢ûÄR¸¢?É'Pb‘îá„õq'põij/‹]”þÎÞÃ\“KmÁ9mº/}¼íü´êï´!±*w•Õó^³0ûÏòÜˆÓæŽîÑ5˨’Ð4àà€ÿø|ZÑ(F»dÕF·9è‹?îa ¤×îŸäátyèPs¤ÕOŸÉï Ñ­é¢ XðNÍÌ“¸Õrû)iwiùð¥ô›ÁÒE…®"í‡4޼tï?}´Þuy‚®äR([~ð¡ëÛɦ﫴µVŽ|'=k•ÆìâÁýÉŠ%æ"~¬Ržl:N#UËŒÈÍ™PB¯òÅšo§Ûl©í–È€Ží“¡£ž0ήÊ7Ã}Ô¾>ŠØ 1‹@•ݹ‚¦ë{2ïe÷¯`Z™zР©t'²^‰£ûm3 3˜´4’N!n¼ïËU&°9ú¼:O=à¸Tú Ý^îÔžþóVÍ3W½Óº‰À} àÆcžŽã¸;5>¬þiW/»îÖ÷.ÅóñèJºâJ÷9NáéÇø·Oí³6¯u¤-¦ 9ïÌ…¿â4P)a1Sâ5VÖZ“ÃÐ|§Ä¨ä)-åÂe«ß·‘ðÜjž²ÀG€ RÙ ãqãDJM!SÉÛ»LhyVìÌw¯8(]„j!uIì('F3ÌÉ/˜R^‘ú¯èn\J„•çר¾:‚ óX õA›B¹8à=Ö‡/EýYne.;’éêN©wß=Ÿ·Âs¯¸lø% ¢€cNÊÙ;´ä« W§Ì”“Ì•™‚×Íx“¯Î÷ÎÂèù vžíQÐ4Ò”¼j'öàa^ä n¼Ò¹:æw|õ)Õ …Y,9mÏÁ7ÃüjRƒËï>ù'ÄÐwü©3 ¨P×´ÓÆ4oš½äÈ{>x áÔðh"ÙNÑ™VB”AcÑâ3@o:@m÷üÉÕÛ»å –Û˜•žDŠê$]¾°hÙÀyL?Qx¥¡(͆™™ìTAë@ìè RŠ*}Aý¼%«”TùKÄVgt”Ë“;Öw–ÙÁK§Úàc“‡S^›…?€óÀ]ªÚsgF*çÙ70ãéãï­?žŸ@Ä A´ÏûC€réOžf%ÏúK€T/Û{Û…^N²7RÚ ¯U­ËL0éäÐÛ< ßÅ HâJ 1>zª¯ãuÕ%¥94u`\iJS.Œp Ü-¢$°~ý¾œ6Ñê¦Á@±þ%%ºw>Ñi¡ #ðB®õúcËÕÉ:îéAó™¡Õ®¶Bápmà‚ž:KF›ñ&rÈcèP!–êé PÒ("ŠKì/¸o•ï×ôi Rò®Ää^÷Pú h%Vd<%âàûÏ@—Õƒ2й2©ö×Γt³g²±„¬”ËòIzXûúÑSX~R'¶W«˜ÛH£¦`zb7×”®^ôq÷s‹ÒuxåðWýœ”·à7ß×åiöÓyÙ]þЀ¾ºaNbdKõb¾^¯ðc¯ûä½ôæ °ß‡¯c‹€Ë…{Jb½Ÿ™ÿ÷úòá\v›[!tÏ<|öÛIs™£S2§ºKQÊÒqP#-U*U@§]hŒ“â­£R)œ¡{z1cñÚÏqóGe‹Ú¾Œ¥ÁÃÁ§<$S zqOqe—>–8]TtüØÆM­¼y¶x»5NîíÓ‚GËÝ”‘”<¯¶§ÒrõêI¤*jöQfŸ ]—^õuqR¦ ‚K¯º> “G„r`’_±‹Š¶HOJoÝMô’ŽÁå¶_®d!ÝB͘ŸÈè=,ÙêõýÞó°U‘À9âzŽ-³ù|—ˆ˜/E<€dcLÄ|‡²Öw>êí–¾´ÃeÑ*»þÓ'”ïÌ;oƒ)læ…žÚûc kˆbûZ>ê`߯ÌÁLhö7lõ€C'»"]ûˆâhcN“zÍÚ’IÕ„|F™[V¨’ì³^ËïݔۖžÐàÖš)¦ë%ñGS–1§ßˆÁ¸¦j…[ »£Úmãd ܵõò¸w É4§—МE+—é9mV¥¼’]\¯Ïò]¹×kè?[rÍB:^štîq[ BÇ3…vˆGxZ:4$„<éŠÄµëùˆ+ëõ˜µÁõ‹³»¶÷²:_Bh¶íuª‹lg!Ŧ¸MÝg±>Ÿvtçš× ÅÒ¾s„R¢Ü•.¿z=¢êx{°¸»ˆw;³åNÙÑ;¯ï»Èl*ÅÀÿ B6Öø@ZGBAóл/·vXÖ„i$KQ.^8†­«Dz¹tä<Þ\¥h$ƒS^j É®“Ú8ìëJÉç<Øà_êÁúÑ®V9 ê]Ì“èo" >c­„W¾´~ŸŒé´À…±IÑ»§ÏÆÐ¹øN³]#&<–\Y*úÛ„ìE=¹’YyG*O|®H#bMÏõa>Ùhˆ?¼}~ñôk™Ú"Ä*ö¾ó±ŸX˜FT>uЗkægu²³ê,T7-)ÙE•¿‰Oœ­Ô°f-·"8¥fn;ŠëKc<äE$µZ”Ïê½„ð¾Æ½táùVæGmÈ-oUõIj MÝ«»1\†ÕˆCÚF‚Š+öÔÝ¿ŠVOçÓ÷Ù­ãм4^§ËHÙ–ÙH³é÷Â.Ò2W¦V\÷YõÕŵ¯³T;q×(´T’Õ3†–þr+ŽZêž.` ^°øuS•Ëœ)¬³2ahÑÄA ±øl¬­Y\ÙJÚ;.8mÉ´§8… .G¥ß´û¶…˜ ï $}­¶ŒVÒÃÐ!E¤Çg(àÛ-ÐØÚEͺP¥Ö‡äѼM’M´gy>´]ª­³°+ízÙ>ÇZÒH,ÿpþÆÐ#%š¡¼0t”·-úeîI}ɾP¢ì5czîë¶MßeVÐWµjÜ¿Pù•¿ˆPãV';ØL=kèyåAYÏÃ{&ÜM»y7eóä’=S+Þáh¸Ž (Í¢ `È öL™ìò) WX‰ ©óµ1€:CX }WŒEHD˵ÒugÞE>‚óìÖs²4Cû W…Ü=ôĵ%qÍÏ¡qA¼³S 8ôÊ¥»M£ÕbÞ‰¦Áoº»Ö;¿•P™ÃlïÓ-m}Á9aÃÕ$³\-}B¯Í¹áX¢VݸÅò#ûŽòt¿¦ c˜1è¸u0ÚLîz£ßÊ0ZÇc)°z?Äuát ,ÕËÆ‡dY¤¯&2Ù\-¦µÄ¡‰RK_æa >ÎI‘'ÉíŒhèSÕp‹)¼¹ìE¢¾ï7—N¼&Ø!?34Q]]ðá^FÕ ¼K–+½ú–ÜúLÖó}h2¯óð 8 Û¾¡§A¡pYÓGÑXƒ+]î¿5õëU¨GŠ2<|ŸÉzÙ¬#Ú}©Tbó÷o]–Ùå£Êsd+òÛÅO¿ïðA÷bâ¯BÎÁ¢‹éÙ›ïŸö,³«—¥“W®s;ëz _cµ07=>;¬oh´ìªO´% ›ätèaÓx½¯¯qIØ7ð€Õîäe¼ìFLíà~hÊ'­FŸ‚µá6s·ˆ9¦¯aÈf¹U\ÂÅ3å"éΙ[¶ß?oßSL«¤Ë%Ê‚TÔ… Pe*…:ÆE†#Íqëtyö“P8 ÏnÍÚO!,ÝfíEƒàW|˜«ì›¹5áùç¡K5l«ugßG :Þm>,$P«~¼sgвaK>庩Ï>·ákö²ÇñéõJ)oÿ9Ô~úüÁ#obç`GÏN>ñvÿ¶óy›ñÜSÆã¶­¦ü•¸¯Ñù¼k0ýü×úQ]³Üa=î‚ÜÆËª-ýÓpÿ3V:É4šÂë–ß'T^Tv»®·}Y­î-n§ž}í¸~ôôZ(aŒäb)±ÿÓ.ñ’Ø_5 JD¬ÝUù`¾5gŒ‹´+óii7®âŽî‰ý”íH“ºö¡¬x9A±oÏfËÕM”çŽR©¨³ÒýEKr˜wEXÇüJçþ«á­ KÔÍÏ̪ße’gœX®•àÍiJhò뛘d~*ÞOÍLq_³ë§ÒVcϼ/ ×餵Sé#É»L´Ë +¾.}i/õ#¬>]ñ‹gôì‰(ò¿ªÉ“~ÙêvS\çF³Í±>8È•¥#%@õ¥é‡ŽdßËD¾WçwewÖ»>wç€Þì×ÃC§¡mŒ=¸öÞÇŠW‚®Vl±ROÌÅnÔe½µ‘`ü*”ç?üò[@ñ´—4Ϊz0î¦ýÈë~µ¼¢_†vü- ãõ‚€5ؾ$’–"ØíÝóõ>ÅEq«ÁÝ¡~dk;æ/ñ¯e®"b¼<Fܾx£®p·,à þÑ;ŠxùÆu©mVa®Þ¢x;Úöò€}])g‡}zá×ù7}^…fŸ÷-om­ÏþºJ=qnøîc©žƒsßlëë…È<$;Qâô3S¢Ö€á—/.•ÉÞuàüáL¹NJ‹SÿùFLÅЕÓÛ­Wz]/Å,Dl:’ÅJ5² ³'÷³lÛ‡Ü:ê< Ó:™©ëLðó­ÓxQW¨_/Ù 5–yÖu^í;ÄuMè&«89¹ËR©Z†V¼.z¥ÈÊ~²¡;¥(ïÆ+gîj¿¢Û+9YØwòº´m¦ª5”ÑÜlA<üL×KûÖ¤W©wƒÄ™îüÊã¢Ô‡Á²øq죭ڇ£·SLòn€N­×ÎlÇÒð˜ðHd3‰Ú‚¾ªÖ]÷I5¼Ç$. »Ï‡sçŠö:ÈúÝj|À*zÀjÜ/ƒqs ßžålDk¥\’W ù5‡e¶ÞAïg󼉠Už÷ÓΓöz›0xî ž8òõM«õ‚!°ìM~=®RnJXYœuža»æ¾ÆØÀ·!Ö6™mÅ)ðíºÞ%É5c‹öyá¹ Þ×%ó ‚ðWbÎM`ÕפYÁ©&Wxmñ‡X¢¾Áçü$±wõÕ¨‡Tp¿U‘X’$áCë:ÆwE[G¬‰_N¡·/.,?ŠÛ'Ñ‚Cì²ýÚ#ðLó‚â¹-Rë{b"ÕÉL'nJh’X³fF®ÏÊŸÉô™Ùý¸Ò'?þTú¶¦p0Íh½5{à5ᎨéLÀÛ½>ïpŽ3^ÿtqÔwƒÅÒw¼jɱRd÷ÏLKrN}y«v](ãÞS{ŽÉ,9¹Ý*iªž£Žu½æÙCR’Óê…$hRL%ÖÆS—LZf¯ 2й²†9]îîxEÝ.êÒ¯3¦Œ+‘ sÆŒ»·>ëPÝIšØ5&éºCŸ2aõ©a*íL+Çzî K%Ó>ãÖ ]ØÙ YÁ{ôk7ÐðÛl¥uÔEuUÛpÕ}¿–O¿6k.Ñ~]Ô‡Gf ÉÉ9Äϲ #ë¬æäLÛ-d˜®ÞŸ™Upä;ä\ª!ÚÖk™S6—Ž>Žh›ˆÉcïœèÊyá²aò¹u~Å̼֡›`–§ö6àKPq¼ÁK—¶eK¥Ç†ªì´ (‘+‰æ¢EeÈ*9iª0Ú Å† ¸¸Öïáûdýçq9Úb ·µè'çÍKŒW ⪔0êÜ]4]s§´/†FúÕvD¦†4 $Ûi«Y¶-WÌûjÁý•¶-1Ê­¾KîÝ…Gdj¼¯iNÖ÷ÔÅ#›7H«FœøOIú-_”jì7‡:e”˜lG® deËcµ_Hð‡'ÄDmƒk›l-^u—¼«NG¹†ª>çFñBZMT®½1zb»ÂgÁ½®)ü¬—É~ˆDk Ú"­#3‹Ê(3Ü"¹2¢>p0À~M”ä î¶MX2¹Ô-HBñM+šDs’ÝgCüÞé$V0³ÁÑH4<ì”%:È7Ù1ä¹×»¤¹V{ƒ2hΊOxÌÑ)t-µõ‹ír §,«{'Ù .ŒJ;ÏãÃÜ_¼,¡ôÁ² š¶è¼§Ú«Ö.ÝFîÙÊô’ÔÈ2¦b0¡º÷¼áŠJ¢A7—?ãçõ6Ϲ×C¡u 擉?òvW·,¢_Ês¤ºwøÓz8L%.T ÖD¦36£*ôÞ¡&,ѵ²wKƒï¹I<. >@‘¬^¿½“AÇÀù’¡/d8Éò1ÀÅ™™DWnÎ;~ÞB&¡[}\¿%?}¤Ê—Y=%jMPô ¯µMU)0Ÿ/›`¤{Ã8`¤¸î÷Cáy ËØ äì{‡o-5ìˆE˜¼Ô¥‡}¢î9tSfR^öŽ/êóT|`t£|òSçÎì“ ½L¼±߉·šˆzÈ /:WGq|WF•6»*Æž—H£s.·S»ÿíݨ¦ endstream endobj 249 0 obj << /Length1 1402 /Length2 6232 /Length3 0 /Length 7195 /Filter /FlateDecode >> stream xÚx4\íÚ¶ ˆ¨Ñû]0CôNôÞ‰ Œ†1#ft¢×è½…èÑ{Ñ£&ˆ½÷É7IÞ÷œóžÿ_ëûÖ¬µg?÷}Ýíy®kϬÍÁªgȯ`‡´…¨ h~P ¤mh€@a PˆƒÃ††Cþ¶r˜@\Q0$Bò?J®4ÆöÀj# 78$ ‰J‚Ä$@€(ñ7é* x`ã³h 4ŠC éâå ³w@cêü} àó@b÷~‡œ!®0°  mƒv€8c*‚màC$A{ý#·´í")(èáá!`ãŒ@ºÚËòÜxÀÐ âê±ü cã ùk4B€‘ õÇaˆ„¢=l\!ŒC(LˆÂâ ÀTªkt] ˆ?`­?€{€¿6ý+Ý_Ñ¿Á¿ƒmÀ`¤³‹  †°@ap@WEK퉾°AØýÚÀQHL¼» nc‹ünÝ ¢ °ÁLø×|(°+Ì@Áà¿fü•³ÍÊ;%¤³3FþêïÌÆì»—à_‡ë„@z |þ^Aa;è¯1ìÜ\°'nõa0&ÂÛì!h€PBTT€<@<Á‚¿ y¹@~;›13øù¸ ]PÌ?‚ù"ôAÙ¸ChW7ˆŸÏ:þ¹"v00` ±‡!ÿc†@ÿ¬1çï óX1ô€¿>ÿº³Ä0̉€{ýþûˆ• Õ4ÕÌøþù_NEE¤'À‡_HÀ/! €@ Q€˜˜ÀïŸyôl`õñ±ê( ñ§]Ì>ýݲû_àþK <€æÒAb˜ pÿ›è€"@0æú?ÓýwÈÿ忲ü¯DÿïŽTÜàðß~î?€ÿÇoã ƒ{ý…À0× Q6£ÄCM!¤« ±ƒ¹9ÿ·WmƒQƒÂÃh~Ð}àý?vJæ ±Óƒ¡ÁXóÇnüKop¢‡DÁ~=a0Q@àù0";až"( 5»  ý³®2Œ´û%6!Q€««!æ¬1+€£J;ˆço2H4&€™ÑEºþ:X@гG‚cìLB@€ £ª_Mý2þ£ ØÍÕ£¾ßÌÀtó÷ú·Ô!O˜pv – q|ÒzQ¥ÀàÁÿuoq©=2Þ¼'BÍ9ýÂÇA ?Suü‰âc» ÚÁ4½™’°±)_Þ½‹aÏGÙ ©j¹h,åžÅþ¼þoÇöf;$½ýˆXZä ù~‚>éc \ ®$Ó©«P±.áõ×k¯®ÛQë%¶΀Â32ÖTtŒBNû6ö3sVö%ô€ù#²Ø;®énFêÆ#רÏ`±çŠ­Ñtß¼V,b3æçßg÷ö¤ åkvWŠV„QÐQzk°æ &öÑQ%dk4 °8EΔJRâÙè œÃ8p‹-|ŸÈïmIèv«³×Q ¼­ûôC½[ RdJ&§káˆÑz5Ëè› 1mcb¤Ã½ª4vEŽJ;¬³ôýJaxn7.53¯¦ýÓOí dQñ¹¹ö\}4þÓ`a«µQÚ‹Ç1™ !˸xß——Š¢zpf—A¨éÜ•t €‚žƒBOG‡ÕqÉmðî=Ó—=°23–$ÄÉFãûÖ®ð$ûÕx`¼Y[æö»­„u‘³ä&¼Ê¢èjÍid‡5O\NÜ„¿An®^K»ªÔCy‰™Q¶8aÒ<#òi#­u¬t[æ’¡ d$N{%L¯çÊE?¼ j”I>ý4zpãþNYõÊmý®o7­âm]…¬4sÛ:<.ÒáÒ@߇ÕoÇ_m(šˆM-ä*þ0ö·¦(~ú(ó=ötý¤n?×L¡&â!<2¹cÜÅú妶‡½±ŒéoGwºÛ¸RÖ=Õê.Ïp(lT%ûØB àeõq"ÍJó½T‘ƽ6Z­'®] õ'߈@çR÷W]¬6êtö]¾—>Q|¸CÊ5*!¼R¡À)áƒKaâÿ€øTü±Íh]ÐBËZO¸ —Óœ£Îß¶`ÖE^s©êrpÖÍ8OÑ\Í(¨Ñç >Ç)Rÿî®'üù‹ ™®è{/dGõÞÓíuKÓ' ‚´›ð"Ìï/‡5’ç›ÇM~È7ÓS>кZ±jº]ÑT‚TKñ!ÑxŽÓQöoqu´ºÑù¶ ‰/Î.MuX˜ 2•“ w3šâ&°O¾s&¯¤ÃYT~R?ò×"Ç6p½fVɱ=,¬ñã ‡+]X >uq„0ºC'‘Á|ÐÚlíí]–¿s¸#˜w!‚m¯ÂÊß |ͲÔ9l•ì#¬(D³T·<–Uývô›‰7ß×iO ÈX£'L¥2:>¦÷¹Ésß-Eó~(¢˜¸mü"ÛÇwåôTßÏFø«J1'¥ýXÜ·œÿÕ8:QÍT¡¸«bYª†uÎdaô±Róe° ²&í“{sÎN¢\WM2‹TrvµÌàgÙ{!½+EeíØÊ¾Õ§dÒŒìÞt7PJ™)ÀÍÖà@HG2!o}/§z0›´ÍéuŒ-¾® ~¡g…]Z“á1›IQh§Þ¯æíÄ >öüÏÕ¸c8`¬§^õÑ.Bчí ™W¶æí î¸wÆXä5}ŸanÔâÐÍ“ßÎP Kº#½ Ç«ñrð“¿{Âä½^öZ6ã"m¹“šm¹¥$Þ©1w’i™Oz ”ߊ*i’ü+D«á”H£¯5âÐæ0½—~axp“.OH-q9Plbmœƒ$ôVˆ*Ñ«ËDï—ÇÇÐMŸðQ+òŸO¤Wó}22–S·¦ü.ßöÎæ „ \JÇ^ ËUÖ}¯'^Ë[‚™Å“ªôbO¸‚éÖnhF\ÝwÒ•¡ÙýQ&?e H,þ ¿7¯‡T~¶@³æ„ý1ƒ—DŒà ŽÅ+ÞÎùeÃðÌÆÄ#dKÕ4{gô×ã#KrqxJÜjª‰3$¤S0~yÙŠ'“Õèë»âcì¥ò½ÙÑš%êÀ6C¶<©¸”+7+,ÃHB‘£ QEòOùîˆOF+qÕ#­l¡cç%–‚xCüþ~>c½ýò¹©|Ï3a$7®KÀ6Ã.ˆþO+µ_&}J‰uJ‚°ö8PßJ7rXMÓK:¯¨ƒV¿–›Ì­÷wØ”dZžlÈMÞ#ÂÞ=²EçÁ“ÒÈD~êF¸wYál~¨‘ˆ7Xáèí²ê»œßêŒg8or=oí”*¨y˜ºÑÑ»ê>Ã,áDäEK]§–èå"Eÿ zäH· Ê•<0±,ŸÏ²õVU’cãò…Ìx°nT§‰Æ èm°¯54IþlûÈÓß«|wf£ÀŽ«¼ûkS=Ñ{!,A†Ça¬_ølCôÌg"çÁÐʇWôïòµHÄGÞžÌÆ€ëF”³ØåQYZj›5?Ÿ×çð¤Ÿâ?Éá›þ6÷Jéj)ÈͺAHa­ý!úú1¿| >ðŽ Þ5×IöHõèY Ú°¸ÿ©Ü|µ.w°ypè»s'Ó:ó·»*3ÒŠ~5©›N5Ÿºñ v¹ç&G¬„f8È€Ø W×;Î!-XÑä›p_ç`äÄû’ûtú_›©*Bò¼žSø&Å͹³ÜÙç{ÿ*—ù]²r8öã›YœDíÞíiÁŠ3&êmôL(Ε$3lVO©vÓ]goMUÔ¨p‡x?7Dz”§@ÿ6:™Ïw½Š{µÉdòp1Jµ¸.¤ e0¥ô^p͵ޕù®ÊæÃUz0ÌLPÈÝAÛR¶Oç-ø¹¦~Ö{\«ûaˆoSäƒ̽÷ùI¿-•w]ê£è^6+ô-…—DÔ¼_¢›iTXMnêlCÃÛ«‡Õ®ó,°Œ=QÃÚùL¡z‘¼µ/ ’¸Bha;–‡Ó\8-ó…ˆGŒ 8Æ3Ú½ÄdšùX[Öm"ë¸s'Òûx]¼·Ç·£@Öî§£—QfL`w‰sßZÚÝ“¢öJt Ç û3o›3oHxßlùj¡´à/øý´9¡'=ìf’‰w7M"º×udRýYÒ±ÒxWóŒÂÓ1¯YàÖ=¼¡ >[PÕÔ›C¢nõ,ø­}ý‡8ÂçõzüäIëQ—ô¨yÛ"„$xA+Í«,r7Í.üð26ÕÇR©T–ýŽÊ-o{ÖÑÞ—Èf¬‰›ŽQùu¾î U Äãz4=ôíçc\²yAV$ASQχ»¶«‰´L"Ÿž¼ÿyuáLL ·&¶ä Ü`+|ßRbýZ¿ÆèO¿êòö¬'–y•ˆ-â%`‡Ã8>ôšçp1ß(o«ð̤™›ïTVö!ÊqÞ¿,Ÿ€ô¦)U}Í´Äò$²!nÛ¦ÄT“Ã;d‚VãMÓŒÙ+úü.a´ºð]ûK܉»‘=Iw_1?¸«ü1(ÑÅ¥R…·¬ø´z!Ý}ßUwÂn!†¸ýŠ|*Ì[ɰc&yÚ¾.Ûך)É;´ ÅÅŠ¡ê–Hä´It”âcò¡j†ßâSH´ï®ÒäÝ 4ÓìÂþdRÏå=ûðøƒÓÏ-ÄÞÙÈíšI£ÖdòîŒøOZË$ÛûG›V`Å×…’(é矅ºX)ŒÃ/}³°Rïâ}1 Ù†ŽGm=Ñ ô;¿÷•ù‰ù?Ó%¢ë«×·Ê”8,bŽõ[ýšÄKÈÄgï¢p¯ê^§Œ¯c™¹RXÖé$Qâ~je]Ú #™¿À¦ J1CÓ 0?m½Ô…-ÀÆè!r §ë Ñ xYrv9ÚÓGÖÊWU/§þ´>ØR÷.ZÖ§ÚìPd69yÊ~ ¡œßLï(CøÌRP¶ñÜÇãf¥5©ˆðyÊžýDGÍý犫Y; Åew–Úž¼9$eY|»0v¿?Š9üUüèèµ”öã­òã{S†=¹¢'+­7_¸¾*²H˜ïtü…¨µ®ú{ ÍI‡¿ç¹*ûÏ\†‚­¿¼¦áÛ’Ši>´« e$ƒ«ª3‚dh+:¡¬47XxÛJð×=ðÞEˆ7sËÏÎ>Ëô&7¶Éwëpª;§åÌ¿”5c}ïœ9†S“˜þd7QRÛ¸x.þщf2ᦴ×E¶Ž±M2þVAq[@aï>6Z§¶à]\è Y£“‚ºe8ö©½aþÚOóÔYD}P ^FÜ$g1¯U,S_×X‹t™öг¡ßWzq¸çUÚy;óýnÕŸ[³¥|É`’Š€zé¼§^\Î;(é ãÍ@ Vëvì"ýÖ¹ÓU®B,ÕÚý¥›é²$Ø=ÅCo-kï Ž…Íd5ò¼åfìÈè\„Þh³E3Åø<¡±5ç–e›çÝxÖÞ?äTì%|\ŽºÀú 8ŽT[é"Ž{à±Ütaù*€¨!žjÛî…r"Õ@A÷3ÀYº¥ rv*“¥uztö™·»“»åýíJ*Ü0´1ï²’¬E ×4Uþhðø»ðó³4¸~å‹$ýµŒH\Û¥b*A—ãuÇ/’ž´«Œ‰ãZÿ˜T Oì@lSèÄÿ™ï¬ëÃé-%=Ù‘ƒè|´bû0B]»ýò‹—úú‰Y€Ñ ÄZša2ÚéH@®DÈ™Ž'gpzÒT¹›²´œáu—{¥ò1ÇœO)Yk«>s¶ µèÙt]W,ã+Ÿt}¶¯¼¸o›³×ÕdŒÑÉ~ÉþF†’þKÐt¶Ü–¼0˜‡ÌR¸”>•dk’q‹ƒWÛO±›>c³ GJÉîåRúÍ~W—6º*¥ãu® 9=YG8Å„NÙUå:_Vz”Úìƒ[Ás†÷#Ûš%“<Ÿ§z’»é2« î¶¶v3a]Mñ“^wÎúÊs¥Å¯Â:XõZQ5Fzn> Ô¨Öæ‘ª ½œg|üÏ+JòŒŸ¥U«œ_è±µh‡…ñ•µŽ›·CÄ(ä€eÜ)g0;†L­Z){'|‰Î;ÜæêüñÑðǯO÷¤OR­¯)Œ¨IÖ¾~±d®Æd Jª[nQëóiôî3°2ˤ#¹Gø‚]¥øcªÚƒÙ#z9—#|¯±´&J½™– ®¾^Åp¼³Ù³sSõ–Ò´¿?w<Ã,ÕàÆÃ¶Y#uùÙ0%µË½mðàêTéi\‡Fp‹`¢ ›¨±@Pvû„ﳦþDŽm`¢lLf;ðµ¹°ì‰Ô°\š.eýàq%ª;/à÷,'½=è/B~o²ÐYÅ#Ȱ‹÷é±<Švnz.Nw»÷,§e:–ªÀŽÞî™9vžyêÙ¤ ÅÉfk†ò;½çb*rHÚ‘wŽz¤ËGlYöIŠQÏ£‡{fõöbO¤­ôãtK’„¿uð*Þ® vC´à°7,ª÷’lý̵ÖŃüxü‘%ýíâã ?~ *}Áw_µk 9r3}ý[ãUu7˜ÉvVq,£ m:n]o¶l•Yo I] ¥öòá’í »J«,F²«#è4ò~”èÊ¿âÐNPZØ$FÖ͸ã‡M>¢o´]ë>Ò6Q¡ŠüæsRÿ*d*! Mõ+i^¼«?F‡×—ýlÎs, +ìöe+ª];Ù‹Ÿ"Ìíë· šÐŠrÈÅŽ5¿CUÃ3ƒs¢Zü‘t—Ã_-ñÖ½rÏaßT%Ês·@-GZE“|e5|ææÐ®CÑí¦‡¢£´¡XÎ÷Æ ùMÞ‰#ÁÖ åj¨:)^ýì¡óõy ¼T2’ýBWdQo5Ä£Ûz4RŪ¹ 9:Èfõuì›ý“Àj¨r/·” ›Ì(xZ ËIµ;©4¸¸uK÷Ûáöã;E.‰é>‹Åê¢4J©š×J8‚UÏ)ñË>~d­ÿyLIë$ÿ8¡‘Ú3ÝãÖ—öB¦P•Æ…¬›œÄOÙBV•“d‡Â|ë¥ã’ö¹ç¸`™«4²ØOáYîA°£ØTÓŒécËðB¼¢Ðîž“’nvú Ôn½¬)ßÙ±%•¾´å[ïÔ ³œWz~áõ8Z5{£DÖñ@“YŸ®3šÅm/ïa -4Éì²Øòº Rù¶ÉlEª ì^~«oY7Ë}¼’±^è†;¡÷åW£Æ…ËAàì<¥íݳ¬YÞ^#‰“ì¸Pù'§I‘4;…ÇÜ=¡ò>ñ27½Le;"Ve/*×½ä×z~6/]ü~¥Ð­&ÕöI=öR´+³rzÆ5Ü”/ ÿ¸ŸBÀo—‡û©ÍmuëV×ö[ºÿ9—ÛÞ€/«ì'áïÀÚšîÖ—V“¯“iy&3ø}t㚪t§.…È Š»jI=ßol°Dè÷œx(Ú&,·^^·äd±M—³lμ¥šªÓÕ½&)OßìÜŠtq-vÒ&jÇ“ï‚p¾}!œ’ïˆDž¯½ã` ÜåÙt1è»X˜}[ÊF+TçF˜® I¹à{7[…*zxÄEO@YÝTtšþeÝ6Bÿ ýÉA•!üN®cÏ žŽÞß‹l!`ù)‡…¦÷#ʼ¨õ«•sjå-ü{+¡qrm$% ¸ÏäË+ÉqzãY¡±FÙ~PÄôû$6Ò}ÓæÁº×§c ÷yu½¿7 €ÁÉeæœW‹ŸgfF(âv¶d¶Åî$›ÓfÔž]¼?غ§ ‚P_T‰JÌ–»ú•±Dliƒ¨ÕüIžâ+6“×¹,·ßö]QÑgNU}j$h½Åy㘩ý‡‡~Z¬Åíì1çê Üo;k%ä]I|ȹz}©K–»¹×ú\ÞÓþÔÊû#>÷#ño[«^ gË¢>¯=¨å.Û•çÊ)F;ñöÍç´SM’—63d]‚tTXQs^w‚pÛD*ÉF³?Ÿ,{ô=iy¯ÄO.Ü´Ì›™´j }É™3ï |²,GIž\ÒzôŒ<òáÛõìÛ¬Œê;ëqµo^«h=š5ŒÓ!9e¦ù½=ü…Gcæç-Ûpú+HË߉]:oNà¸G¡á<꣊$MÞ|Ð7ËïD&gžûîO²¼¤œ%29ë´¥ü{-¾nÊÚ¹[‘DŽotàZyîÊ"h 5ºça¾tŠº´Û°˜jœ&ÚP¦Â•VP?ÿbœœ(ÀÊ_Otû=©fM5,7þ 69¸¬Ò±(zs}ø´ÝfRÜ’:÷¼N¾”¤ÓåeHCî¤Oûüþj*P‚6nÚˆZáLø]ë!NK0ãQªÂ`gZîµF¡îÎJ¥iãùD;œ,¢ïªâg•x~Þ]žY"þäc;`(e¢Ïòš‰ã>Cþó1}î¢fy‹Ó §A¿~”Ÿg͆¾e‡-Ò-­†*ñ”©Ñ­5x¤8‘o¾«(âőگÝ)Ö%}t܆¶,W üJÌÔÕ[¼x³e›^»é ]r¶,+€‹’ ïl:¹42ìQŒä®¤_Ót¬¯Xýdÿ^qýòµGËòssþM¿Ýœ;Š!/¤¨§7íÏc¤ñ£Ø"§»G"9,/o9`…–Ig3›ÿTêŸ endstream endobj 251 0 obj << /Length1 1371 /Length2 5903 /Length3 0 /Length 6848 /Filter /FlateDecode >> stream xÚuT“ݶ-ÒÄÒAŠzBèUz/ÒA 1 JIè½W‘¢‘* "M:H/RD)"½Wo,çœûŸ÷ÆxodŒäÛs͵öZ{Ïù…›ÝÐDHŽ~€Ð@£pB" °,PUßÄR‹À`Q7·)çŒø ¸Í,’ý_U ŠÃcjPž§FuÜ"b@IY)Y0( Ëü‹ˆÆÈÕ H8PÔA£X·*ÚÕƒ´wÀá·ù×#Æ‘‘‘üTvA`0( ¨Å9 \ð; Î@4 ‰Àyÿ£Ÿ¼ç*+,ìéé ‚º`AhŒ½¿ Љs#°Œü50ðÔñg2€hê€ÄþÁMÐv8O(ÄÎH…Åg¸£à ¿9ÐD[hàŠ@ý!ëý!ÿž P$òïr³B¢~'Ca0´‹+åDÙíΠ†ç…BQð_D¨3χz@‘ÎÐxÂïΡ@ e# ?àßñ°0 Ò‡a‘οFþUÊê(¸*ÚÅÂa¿úSCb0ü±{ ÿ¹Y'Úåûwa‡DÁí~ ww6C!ÝÜÚj)xðÌJ€e$%Åe€7  æ ü«¼©·+âwP䌟Àß×í ´ÃðGÚ!ð?_,ÔÄaÜþ¾ÿ;ðÏ@DGÂpÀ{$ ðŸêxa÷g¿| Ò ãµ'ÿúüûÉ//8åìýúïû6ÕWUSÑ¿õgâÇTTÐ^@_!10PHFB(""-”’’úÿ³Œ!ù· ðrµQvh ÌŸnñÇô¯Ž=þ €ï¯9øÿ¬uW-È÷‘[ƒ%À0ü—Èÿ·Ô§üßþ«ÊÿKäÿ݆»³óï0ßïøÿ†º ½ÿð¢uÇá  ÆÛõßT ÄÓê#àHw—ÿŽjã x#(£ìñbÅÿàH¬Ò 7Dâ`$ó7ûe5g$ aˆÆ"½[ðY`ðÅðþ‚9áßX¼.‡xûüs_u ÿå3Q I ƒzÀx9‰âïÛWoH8Âë·’Â ‡OâgôÚ¡1€_×  » QîØ_(à•aî Þa¿€ßö_ëßvF ¼0Àô&æø*¬ñ¨R™ÅSèÛéç/Íщ–Q8žÉg¾z—35GÝTîÃË®÷¥N½ˆ™ðcØ8ô²nÍžKÕzŠ#Pï\PÙÊí=ÞmµGÜ„£™í‡¤Ò¢¨7Ý ¼!†ð>¶˜8 —j[._*8oÆ.[ɬ]€…Tì©,¸‡Ê9Ík„±–ì\_pï-­©âi0twSm³¡sÂXdü¡JcÓ±÷$>ãýìlOvWgšØNžn{…dY-{N_R7ý£l:,ŠÄê‹”D¦ç.ö×{5´:7)Û㔄8Kd_ö–}ŠÏŠfõQn?ôðªÚ'¥¬¤ˆU4¾‹0¨È£æaiøL+nq¬êg"½æ-·oº³çUû’:Õµ¬uóì\£´ HŒM¹©`jj¡ÎUóÉjõd5™¬›±ÙÔ„ ¨ÍyéÌ¡½¹àÐm‡¤‚N1¹‡jÏý‹6øJÓÃc—L‰hŸ¢('ÃA*æqÙ/ÉŒÔRC’û ²MÉ&z£ñ(¦Á³iâ`ùS·/¬­T1¼ñ‡´_\_9Kyƒí¹ª¿Ëi™õ€Ž{©¸SÁ⣷²D ¼*ž–„Òöbä6¶÷ÇÉÓ¨ƒÞ3“¹j)ry‡Vïuˆ±ÙŸÁ19a? oÊJfêÿÌl¹,þAµÃœ-Põ³U`<䀹î¨-A‹vV zšÚCOâ ¤<yÜá2ž¹è—ÇX%µÚãõõ†#Ɔmõ%QšXX §iÑkÐc¦B¿]Sªáìnèrƒ¹æB×%š<ÔUòžËÁÛ(™lGý ,1DþÚõë66¸Ul>Q®‘û±ïÿ’Çd¹4¥ÓOØ‹—]_.‡é—J˜ ¸ (D#Û/AìƒÍ”ú% ëúyÀ#Ýc£"cIÌU«O1œgÝ}k>]'¦í{ìò‘Þ 6*S¹¯½NûÀÅwo6¹qY5±åÀöÈfŠŠk ¾¼ð¸¢”)"@Øšˆùv9Æò…ȶIrbÈ¢o°%…fÂÚÒeÛÒXñ¹wC&»&PΛDýCwfÿÁÄÏ¢ýÚW"-BÙAMæš ÍYaPK A™SæÕ½Xαڸe «àŸarÈ¡œøb°«íJíM×Ó75 %ïTôÑ =ïÃȹ¬@ê»IÇjü –4 ˆRº k‚V?žWv¨³ˆGµØ&P6­Ô¤ÇÎßþéÇ=k5Æ?FÖ]à—®³ÒÄÏÙ3’ Âöm3×ü‘)uÅ‘ä(;ZÀ›ÎÛŸž>!>#ZXHøúéZ¦§Žt+†,º%{àš†·&_Ř\;Ì4Ýå m˜¤)=n/¦ô3ŸÛÔèÛ|ãö½aOÛ\œnù”éCD Tì+Q­Eö›¾îÏ;jÏ^L ò¼r`ïš}75̼îöÓXE`©Õ=¥P^xN eÞ7>Þ™ª’âuH2ÚK¬¯&*9ÂzºXÀì]‰Îx#›>ÈGÍ¡¶”£uáÜÙÍlã%hȰP0Z{cyn ;õû[•*kî.Ä2Ö;~:^ü±8‘f|ÌVQ¾õÆe‹'áÕ«.›µÈB”EhÈõnXþâs žÆk’ç?'­¨M–œ‚ §Fª,·ŸÒpuMõΔçì¨1(xNŸwYEBßæÐ}“îXh5ÄÏÈòÅq¥~:|°xà†ðL g]‚flÆ©€¦in.pó·s‰¼ËYÿý´<üyyšlÛ]÷óÑÅ—•KïÞøÔjp°Î4p0<ç1úîŠ49l̾ܮ¶ aIà[ Vñ0¼É#ê\À³ãÊ ªÍpC÷Ž7Þã€È=ùº¼¥5 9{f_vVhzRpÓqd=Ò»?Éyžû<)Qþkl]ö|þÌí #ôà`ä ?x±úIÛÞ¸¤Rûû}þJÏ Á$ A%¦¡—ÉSÊŠ¥íÏ eûñ˵¯„Ôf¥òŽG«¦uy¯±Ÿ¸¿Ôr¬Ÿi½\—/^ {È,ÜzÑh§¹ï0¹Ð•X•c”OA“@Lñɧ@á¬ïõ`˜VKRfÁBú¸È¢º›x¦,?« ÍPª4;i¬Òw¢íÿpë™ýîçÈÇê%{#U‚ZW”ÕL¤õçbŸJ[4áPĈ¼YóWÆ‘²ù›ƶyfø?¼ó>än…®æqmò{ß´(ŽUȰú~V²­¡àú™6"?އ†ÅÈ|¾k®`ã¹Õ|Ù–£l§=OÍ'/fʹdâœ+ãêàEt} .…jz[*ßv‹zq—,GJ×4Jñ ¿íôK?ƒC¾EqQ¶IÔ]'×mõW· óµÞ·¤—³%u-l£$=J¶”±_—˜'†S…_¶×÷¥×°{õ†:)m¨É|Ð%a½”ÌÑ CLG'PQäªøôréE½pó×4‹I³_@õœ¾Ô®ìV7]—ßìó8½­ò5µ‡)òçF,Ê“½Ëør˜í®6Û»ËoH`Ó·Rø ëMyêKÔ7ÆÏãG÷/±|žìì,Ùc0Uqû Fc½¥$˜Ô¨Göu ¤Oʹ×õ­tÍ­4~ìl̬;B¬\ew÷x‰Mõ-¡Å²¥Æ–O[Þíj}qKs)ˆ ßžÚA-m»¶ZYƒ é±(LJ[àµtÙW›Ã2 &ÈŒ—å)=GŸúqxtŸ›®.~¦Ñº\4\fÔ¸œö´~ ¾B‹ålâ0«ú!šÚ§êNÅ7éE5Ï<¸Øˆ:÷!ES‹ŸµF-‡™­} F€u¡I|u)§!OÆÇ¡™RtUw;|ý,öóT¬*÷¡2éôZ…­wš¬ÚÛì–ç{¹Ê„¥Â«­˜ÓÈIC†8ý!-ë=FNäɹ‡¥Ê»r?î8æxt:‘ˆ›.Ìô^ûÉ#kdÝã7C±õÑ,T¬¢?ÏyÉ"b^'*oA]»»J8g_O>åo¡¦á^Þ]ú¦ví¹¢ÿÉ•š…ÎT÷Ü{!’oì¯,Ô×뛹vö1 U>…»äK»ä¿º•‘=…nøŽU•îymZjåV·×$…Ì¥æ&ŠqJ4è…¡éœÌ8-â‡`´ÉôM!J¸1OI?U=©héâtÝìêÿQž¦SB¤YVg'«>½5õSÜ2ý㯸µ­â¥Y»Ô¸UŠCG2ÎGÉ Îž¾)/ ‡h-е>Ù¹¡DO<ûJ]‚ùmçÑäT4C˜u3ü-F£Ûð)¹k[LøtðQ1„g¡IL”NÄ£Þ•ZÙ`ud ~ü£¾j]  "9î%|»–ã,7)i*¨ßOFZÜümûŽÞˇÑ‰n”láîǧuû÷D/Îúî#fä€ó§`¥6û#>°@ÇpsájKÞ󓘰ók¬…¸m¨Ù{ÙÉk Btʰ˜ˆöÊÔµ/9ÊÌ”ºÄIwHLƒ«0º'!¥ôÕÐRþyÿ[ßÌëÄ€üζ–œ'u÷¡#^Ë” „eøZv…o+·¹úáBDâŠë¾ š%Õ§Ð|m‹ÊŸ„ø%½í®[3µ«ùës3V:M÷•øîõá¾K˜wdßMÐåDä™:{ü—RIu¤bd´…ºjœÏ:¸òL_Ä]@«‡qNœÛ{TÜ».*úpºÁ锓™RIošùªœÐϲñî”c!$ƒ¼mÛò*­îÊæÄü7î!“¥b«¯QkÌJ(§xþsÅŽ3q‚æ”ÉYûm²£D…hêÛ•™?\æóØòûû’6ÊÂ{…$_J1ÁçªNyêt¡ÙNn‰•‡Áˆ–‰~ãõ[:² Š›Ã„X¸zÉ|THOM’µp¶ªý/s‚¢î¨ôÑlRì&é7\ëÞãÆ\’o>Zmƪ4ÉX"Ç'wE®ê ^ÃòLŒ½«;o^”‹ôgÃÊôÎ’-‚÷ŠÔ~Í;WƒËF‡k¨÷˃ëÝ6+UÊúÓä4¢Ï™T*›ßÞ³ø“'n˵6wýGÕzV™J£Š1ûŒ‚1 ²<­éÖ—{è‘ÊxÙf< ºã±–@¿ µÅ¦›T5ºs"O(íÓÍñƃŽׂèKÙ“…9HVÇ“Ž.‰D¹²ÇÅïE?Ùê5ç¾´Cýp<Ù|Ï@Œtq¬% öˆìkÑÞ{$¥')ÖQ`x†¯gÔ¿,.¨‘S«ñÔ#>d×Ç?¾‚„f,¿RëIŠùÀÞEÐ2Á1 ®óÆûAû-ç©l㑞O@ZØT:(m5Òèç)BÁÂnýø~ú‚´“©jaRÐۀ砎Æê܃‡EP%,’k%%zA;—»çìÉD±ã¹r{\¦ÙVJW>»’ ¿1G0e¹oË,½¯ SW¸^»hCͦι¾…( Å%Eå;¿²…Ú4*ôý×§H4Û±$¹Lj£³‚DlÖ `™IµgZ¦TØk®w¬$·Žwy&€žýd÷@zîVï*.j 措u3”ÐgÿhŒ “Ÿ„NfÕ¶‘äô#Gïæ/EV´ ÛÏ÷ùMa×ëøÑÉþ‹¹·>yÚPÕ1ÒN_u¯(}V\#œW &´*í™]WVÚÔ¨éÇâØ –•ýÉz¾7'ËÈÍQü„Ï•TœàMÓvn¾3¹©ä) k¾6×5añ¢¾;hVU{e ×ðÓ³cšþ³ÿ[(Ýzæ{ô‡MÝô÷ïOêÇõL×È%/Û¨¾íÝã[F„wg<àÄ¥½ßZ}¡Èë’Ì‹À9“¨‹yv¶è¥ÇJ‰…ÂõZtxÝw'¿Ò{l×K’ïèÙ\ª!Jv’ Päðoäf©”\ª8Q†Š0åO…ø{ß>µ¸]:ïÎôóÛ éͼIêã~NûåìFž÷'ØbKmlTB[àC ŸÉ§0Ìô&©êBÙÌk¶¡ÞÛûÒ­—* îE¥Yz…Žy0J$s‘ï¥Ü•£„ÏVú‹;Ë¡$ÔVoÎ*ïΞ6U­B‘mWiÐjú­(ª ²ˆ*ò}A¿‚— üdK­ƒÌÛÞÖ|×Öëp×ü!Û–ä ÊW¸˜¸ íüàŸ•LàS»Ñ¨·uû‚,fÃ3™<ÈpvsõòåÆÝÚ"R‚Œ«J¡w›8оU5¯Þv‰™ZÌOí˘;¶ÍRAæÕ÷XÓ«)Ë¡Òï,OÚ?¹Zx]šŽ¸.PG~Û·íäz—XîÍyÓs‰a0ª©-åï´v×,j;.c ½ó’ŠZÌRç©ØóS²&é‚Bdµ—GlŒâÊåxC¿aG9ò9+˶¼^Ê¿~V;3ipïãY×ðšõ¥÷Ý«Á_»7¢™¸DÀRDwüÕï«(qINXŒ½ {ýui£!gõMÖXºì¦\äež¿öÃ2/¿ž<ûcœË«¶ÕúÎnc³Ofïjßy€ôÈ +éÇs%¬T_·#Üß¡hêœB¯¥àâÔ…_Q!t‹/¬®}Œ£mž½†½¸–ãv4 £@R\fšKÏSq‘c˜DIÕQÝ=ª÷cŽNEwÌ.d8ìÁ ÝÕ¨èœ/ÝØoâ3Ý ª äýdø˜<ø8LcDKÁÿ´ßZ™™ÒýåV"™¼œuø–PÖ™?¼,Êg´’¬L“†ßËëcΣ83H» ½wlðpX9 /¤étÑ¥³¯~¦’¨Êïó]CõHßEh#/±ÐwIݳ–ª7Žò–wÈwnKšº|ëw}0–¦¯’ë^é·£SæXÿpleçRKNù2 Å ¤â¸”Ü}÷%k€íhû2eÂgYŠ;འG+ª-á=WÁúé“Ö®X>"…U*:Èü°a¿I¹FãA¡&D9É ¥P|÷§—E,PQ#âÈþk‰"Uûäå]þ˜úÔ8Ï¡C6:Þ²q g½ž-Yu1A÷Ìí 1OÙÒqÞ–#宇ö¦Í[Ÿ$†+XéË=4o ~j5»šêÓ©mØn¹ňYéDz¿æÎ'o"DPç¾mDóE|Y ±Êê£ëê¦ #‰ 7g¹$_H…ÄòÁ2ÌË|+س—õc$”Âühìž{ži\Þ»|]YMYÉÜ^­¾j:pm.ÿ »÷á…÷S«;îèܶs5Òdö÷j`—5·Ó©Zög¼pä¹ 5YÜJïÉ=â_Ì™ùUC¬T¢fÔLª¼Ëû~;øB¼Cö endstream endobj 253 0 obj << /Length1 1612 /Length2 19059 /Length3 0 /Length 19900 /Filter /FlateDecode >> stream xÚ¬·ctåßÖ&šTl[;¶+¶m›;¶ÍŠYAŶmÛ¶mV\á­ÿ9Ýýö8·ï—¾ï‡=ÆoM<ó™ó™k±É‰Uè…Líâöv.ôÌ LÜyK[cWg9{;Yze ¹+௑ –œ\Ä häbio'jäähM¢@ €™‹‹ – bïàédiná RSÖ ¦¥¥û/Ë?!cÏÿéù›élin øûá´±w°Ú¹ü…ø¿NT.@€™¥  ¢ ¨%%/ ’WHí€NF6EWcK€¬¥ ÐÎH 0³wØüû0±·3µü§5g†¿XBÎ#€³ÐÄòoÐÃèð‹àt²µtvþû °t˜;Ù¹ü‹=ÀÒÎÄÆÕôíföÿ"äàdÿ7Âö¯ï/˜¢½³‹³‰“¥ƒ àoUEQñót±0rù§¶³å_7ÀÞìo¤©½‰ë?-ýË÷æ¯×ÅÈÒÎàôpù§–1`jéì`cäù·ö_0'ËÑpu¶´3ÿ/t' ¹‘“© ÐÙù/Ì_ì¦ó_}þ·îl<ÿ•mÿ¯¨ÿÅÁÒÅhcÆËÌò·¦‰ËßÚæ–v°Œÿ,Š”™=€™éßvSW‡ÿés:ýk@Tÿì õ_F¦öv6žS ,£¼½Ëß’ªÿ;•þûDþoø¿Eàÿyÿÿ‰ûŸýo—øÿï}þOhqWy#Û¿ ðïð÷…±ÈþyclŒœþ_áF¶–6žÿ‡„ÿ Ôþ›äÿŽ”‹ÑßaÙ™ÿ„‰éßFKgqK ©¢¥‹‰ÀÌÈæï¤þeW³3:ÙXÚÿ*ú¯aè™™˜þçjaibm÷ÏèÙþíÚ™þ'ù¿"ý‹:£–¨„°„í¾©ÿŠRü«½‹ª§Ã_bÿ£9{ÓÿuøCXØÞàMÿ÷Ò³°rØÿädföý?Tû óåŒ\œ,=:[fbþWãÿã÷_'½ÿ€³3±7ýgWT\ŒìLÿ®×ÿ2üã6qurú«ê¿nü߆ÿçù_‹zM`×–íMx~X¥f¤¹Ôbå OŠêô÷2ƒ ‡8”4¨æTÛ÷ø§†ïrU¾×„04Ns¶y.;|JÓöbÚPöü^çáû’R÷å£lQtpÐ1ê— ¤]hD{ß,Êî€k³3©íM*)ë¿CLw°:Aß?QŽ õü†è;ģ͎ƒ!ç1ÂòK>'Nrñ4tzh0ù„xuãpßãQ F®c¸Hjöu!ºÑjòâÈo¶Â&O›SòÏt)SÉÁd+Ê Zo¢žîodú=0¸y„i„!g£ÞmipB×Û1† Ë„n1çcß<Šå÷(=ôˆú~`×$Ò»ɾLH:(8pô»DÒ„ûÒµ=Æ&Û¿w´ÚÝX<=¦ð¾ŒEèî^ÖiƒÕè´ÈYÌüT:)Q×´ãÓ“O½ÈX%ÿ‚¿I+ûHªôñas àÐ…31†WpéôÀ†ÐÙAf·DÒR“­S}uv´ø÷5› Ç£ËP³ûÍ“g(MðϚæ]²ÚÙÇÊ%t;¥ ,¿’Ò%DQ«QB»ØÈºí(ÜŽÔûwæ% +š'ƒ÷¾×À›ò&i“›\IL…p^- õ\'n  ã¯ÝO°¬âÆì Š_è÷ªЦ0_ñå \tò¾UzŸãN£Îí6Ð +šœÎÏZàùåXÑ@ƒ(™~GèKpm­81襔xg„×aÞýSú yiÒܯÄʷ鸡…=ŠPJ@K> Ì_¡pÐo×DiB÷¡ï—U¿’žÃ‘_íªü@±Ú|íA)vûÅû Scˆ±*úà>‚I›9,TÀjpœ øŽç:¸¨ ^sÑ÷ üºò/_)×óHÈÑ ´ä\õ‘µ½Ée,.\†9GdüMÞDÅ#7·™‘?NôÃ\¬?IÐ盞¨vˆ-Âî¨ (ÒÝ6 $ì +µ¥g÷DœÒªî’Ã[SkÅBº8½˜¼LÅšúÖ… Ÿó(þëŒÕE.áÞßÓÅjΫSKû #`™×­Çäg .Ĭ’Vã˜üÆì©ÑP¾=ýB»˜ÿ'gP±•ìËJÝ~ïLߨ;MW.%>+ª;œ?ݵfUæ ‹ñÆ~·M{7i>àɘÌ÷œªï9ÓÓB2žEÞÚѬ޲Υ-vtæžG3s`aýwEq°6I9£ÖËB¨Üg¢„§°ðYæÖyLQãÑ‘U˜®…½ädµ‘¡ ©ŽŒiµJ‘sæ4W·ÈþTB2¤Ò¢™ñðÖÕ‰‹ZÐ$”Wˆy²ÕÔ¸_¸¦Ðäàù–ý‰ß˜D$‚ÅèäÆE~1‚Ë©ØP{]@‹ÌËiª¡/Žyó2æBì;°yÑÄ=pqºÖM8Dz“ñö4¨œ¹l½%f YW$CÍí ¬íˆ_н™óoPGç–ÐF#%VW)èɡÿ³&êÅúžó »ÞÅîÙ¤VvÅ‹MÀçn‡ÖÁå)Ûöpµâeèê¿«ˆÇ_ðXK—ü[¿Qʉ7ç$ÄE賂c2Ñ¡?daà6w¯ƒx–ä)>ê/öÂ^bجQo n%˜uÁÌÓ”Xëw(zq ¢BßˤætÒ%Øw›Snô¦÷àÅnQ™6%â+jÊ•/ ¨Òj³Z[įÔFoºTŸjj-qÓh1özšß›Ý„)Ë;ÊdE±вJöèŸ8=jkng}”ŽˆóÓÛ^ÁƒÎ6kEf°ºú^‰<ÛGÈ—ß@·ò"¿ô, 0œ'àŠÝËêŠéƒß:üj¯áæLˆÅZçC–zBvð¿„×¶ E`ãìeìm@çAÔV×f$ï,vÅ 3†e&V\èa ¡ózÉï³DÛ×rõûGšÎe$“sð+`\T¼7Zƒ"ƒ¡E.šÛ43[ ¶^Š Eõ„²'²úxÓ™Ä_•MCá옡Ug.uþ ñ­$~¬¡¼­ÒY«¨8M|ñµ“LÌ’‚ååð‡nù‹3Õç*¤­²¡÷0f·:Åᄂ ÀÞÛžz=j¤½› Uí³_V ;ðçp“ÈvËluƒçÁDÂl#>lª‰ŽA¾O¤ƒZÁ G¯¥AƒBFk4Q·½RêÎOU0Ƥ| i©ÒIéÝÀr­¶]_‰ý^ìV~$ àB3¢'3 @gÅbhfûHÍlcAè‡&'|woÁ“…Iµ1Ó'×°}çæTí›1p‘IY)ؾÁÛ­îK6âãWÐ_§é#ÈøVH/° –ÄMjìµÛ7 £o]§({aþË.ÃYaëËø”sâ`´üK.C”ÔîvVÆoóºe.Õøæ3¼ù׬"tõW϶Zž–ø>‹ q|ƒ SB\P=4ˆ E«ž •£ÊûdB±8IfŒ7e¥p˜4žØÓ•RÁ>÷}SAšu³î]êàž~êr7%é°JŠ#þÕø¦ØæGoØ’p&Û>Ë4àö™ÈéK¹´p4-,‡ó$%ÔÕá‡ìø²<ÕïVÝ"}¹ÞTåÇFo…Z¢†¤‡Ò±É¨¿òôÅÕ­UÌüïí‚@B 'ºÚ<".óžME"œÇ–?äbzùŽdßMê`P’¤z6„Ñë@ƒ–¾Maoô0´!ËùW,z–#$Á‡‰_ß?¿4½f@2¸@ b·áS9†‚Î ‚É2AlŽ'6-æºG¿ã ôøI&FSîª+/ ”ïOLeh‹d±‡ЮI3{Ù;ó†×„BØNYœªZ°œ˜Q¢MRº²f®%UU~’ÙyÊ Fn\ù´Ëc†U,ßYñAë_e¼Àº*;RË1ÆòÝ`IÒ©ªm¾%1†l:_æhl0OŸhÈcÈwÛ¯=„‡RKÆÎ¦¿ -œcíO±â€»çJÑ(µº™ Ì)Úk§×O€™Å¾Iª$X‘{‹â?L”j!¤­ýfP©×ÚaÍGÊq³’…ì»Ï³×@¯×™A,2ÆKei¯–¤UÂ9 7¼XêS»2â‘ÍÓ‰-‹:N&veè¸ P´úó?K•¥ã¤©GÀi¦4L!‚¢KY1Qz¥Ö)Hò½½n¨ )k4н¯ïÅŽ¬hVi‘ Ìh˜ƒ¢*ü­­*nt6ï–’o4l}óÏM¤ƒÄ~ˆ¢k‚-ЍC¨”Ì9£5ûœ¼’|¢Äf†­ïÉ{†ÂqàWÓœ„ÆL$ÏöàÑŒÅ֦߉'¦|D¾¦f·¶ÃcÑæÄ÷©év?“÷¦eà!O‹ˆŸI5¸–H^åÖ.bW‘WK2|›X»Äi´u‚KµÞ iÄÆ 0 cž”ñlc|\©mEîôGY5…—Ðv+N‹nW&jõ‚S |I+Ÿ4S[“êKŽÐ{ðÙÄ ·ŠèUÀ_¾û6S†TÆ:”>jK™ DôiÝãr´–ÚTúëO~Ô¿ ½'ˆÀS‰Kø*–(Ï(_f¼=ÏÑrQIU»PIê_ìhåbC6€ò¬‹Jø™†2j¾60¾#÷¡L¸ÀäPûZ™—pÈS 縢¹Å¾ ÄŒ;¼ù&ø±çßË»ÊÆ¬ž“;Ž5½•+XÌqÿ>…ô?­"pbЪ“,`ôk€ˆì§—›UksõÉ  šˆï[Ï!¥Aö¥Xæø|~ÞOï"Ojý™Þå³/c7q¥0ÅÈ]Gn½:¾[ŽZƒŸ5Å'œõ|° æ"ÇDA·r‚9`éËCÖ…¹©«R@Ú"'…É]ld&,ÍC’pÛƒáѹ¸¨îpÜD¹v–íšÌ  sQ<ê2à½Aƒ`Yd§?$µ·A~Ï¿rÀÞðFò'µ!ØÀŽº€„»i5Cèõ4nnN6Öü‚åyõM;¿ Ä´ÕIЬn,–zt%Ù†¬;zF<•:#áNÖ`«(¤Ûš&GršG¹ÀÞ)’ªìÁãä¨?´,‰zdÓsˆ¤ýœÔ=l‡üf ±æp±+ÔZ§Å<Öº¥ìPBYÔ$=+Àâᣠ³çH˜ÔÜäö“ € ›R§sù~Pš±j–ÖCkV½1‘þ Ksee„x¬A?S—Ÿd%ÞŽ—¾–­Á)NdFɲºõŒÈÉå¥Ò§W^θy_h\©’»ÝlG|!ô’Òfvõv{Æ¬ÌÆoK€˜CÃ7-K›ÆýZ™•=GÚôD§f=%á%ð˜te_L©Î”"1ˆÈÒ -º5 —¬Ìé5¿%Â2Oúˆ»I_4G{#(Û,äõ¨÷Qž+#¤*áÐçß±ÒFM8ç^ly1‡ÌI_w_!t2eá«ò6­]!ô ÒsL5H'Šà?‡ÒsS[lÏêÄh´à“0ÈyUe ÌQ½ŸRòí¢™ƒ'‚ÒâæF¦Š=|§ÀQIõ‚ãFˆ²y;ðm+}Ú,莱’üüÌõpâñý‚œ¦Õ&¶˜Ûë—ïëðR Y·ìç»±A©öö¶áþjèi¶ ù(ν†6¡¾€èÔOþ¿?Þ¥ëgÐn ™T}!ºÏ>}NÊP·¾Y°þíÞbp*ÄðeʤGVPÉ0Oæ%NÞtáíÄ.lÈkmj¸™äáËaÌJtß@.)½JpÓÑ‘£|ݶДeܽY$Ë(G¯{ &xï¥OÂ8¸ú»äÈ2ug¥yƒÇshu~÷Ö#©ñq,k19‡* Vs½Bžòmšù|vîrDzkïI©; ÕðŽž’}‰0µžZ@°h²V¯ÿê]æé…Àëê*I¢ Å&ˆx9÷ÎÃ1>˜p‘ £/9tAŠêüÉ‘}ÀTòa€7Q0<¿àm•_NÛ ‰%öÅ‘Â&‘çœtRšrÁ.ÙW¥I ‹@¥ù¬ÜvŽê±¼aî.Á5ì5T>v  ó´Ò…¦Çnm†îÉo¨Wöüý²Þø'™0s™J¹ñj3‹ŠbSë –Vô7œÄçE½Ä˜Ÿ%4åd&—®Å¢¤}‹ƒ‡Ç.ž18ÌÖžñŒ†Ç¤îþbWhùÄÇÂÒ) `,Þåãï£a2 Is&Šäce¥ï¶ƒKð–—pw4d"u¨œÑ)(ž}sè®’|n¥ úbþ ^h?:ÿ¸æd zºyÚð*VŸ”>–§h´zÅÇ—v)*:” n§î0}ƒW†Pp«Øø^ã€Z+Æë&tÑÉ3ü†BSŽƒ¹ [—‡ŽÖ^9gƪʟù9¬æ·¥#»SAí¶’²r¢q·}e0—Añ¾¥wåà…²kNËÔ§£©òV©™Ì\ñÈ'Š©ýãäPžšðôl/{áWF ˜^øÄ6´£ã8¦w%OT¿:™ÅOÕ2ϾWZyl·lOqÍEæðrÖ+YÉ¢2ôôë›]ƼšBlÞŸ Ye—ûV^ŠÛ‡›Éº†¨¶r‘úÒ·ZT&KÛXp$#‡ŸÜ3îVÞl. 3–/ =ý-,á…+£vH`óLÛ%ö\§ß­— ¯‡ú‘%l:¨[Â>×Kâ|Cö2° |ûÚ5&åû:f£ï!3·Óû~˜®ká…×뿵¨ Ñ*Õ_+¾³³Jébèé:IýÖºB’•ÿ‹¬1P.8!Þ£[o:›-!Ÿ–wß±=³,InšŒÉŠ¥{@%Å®¢Åw#$©ÞÕˆfÖh~èÛ£ÿ3Y¾Ò,†1cËvz[~6XÚôìa„ÕðJó‡^/T6æ/ÙJ<ïÍ“.ðtcÓ¾gÑ‹#–øÌŒû_³3ü:ÅÁ‘+.‹ªÍˆø¢µkð€õÅe…>#a¹Š"8Rš ñê󈣑¢ ¹ŽlŸj‚béÚá÷nÂSeýa >Uÿ/‡¢æªù'}ªI8“ieÄŸ·i©±Çæ© ïT%Hí?c¿c™Äã‚Õ]ç®`[™Ý2zpdPψœµæJ.5Wð¢ó~N¢VðžBÈn{j0­y˜)ÇEc¦¥ ,§ÌîÕ«Ó Ü2n+ì*Kl¦¬6Æráf©Èƒ ²m”7E/øQ»ùX¦ç Tʆ7›Qð*äúø¶£ÆˆuúüBù9IâÜU^òÝm’¢€‘ã§7‘¨Õ©8“&-TWó^Ì tùRI³ÑŒA°˜Ç0)Ì;à€%º³Õ?>¨MÌH¡©›¿¶jªe ù×JîzâW‰ršãÄ$¦a/ð~6#ºªdÞ-ú6¥©>Žß»K*ÿ¢—†'¹ì ŒpºÄH Ëj&‚¾ðtßÚÿ/µ ± P¨¬±Î‡'EVjîÀ¿Àhä›÷¸ÛµäM2Ÿí¯¶Gð;Li>ŸN¡Sªj†t“Ù¸_DÎáÚÈ’;³ç¸«ÕVðœþh‰× #'±£ ²F?uQš‚_°Ú·ÿÝS Ó¢Í–Ú®Xo/†ñ÷_¼@_›ºôãHââ½BÕÙ‹rÁ³¹ã¤X•IÆV‰ô¡‹¶šýÌ¤Å ê€Øy›–òâ ï`E3Ç2¥ý£ì`6Dª)4Bz…k~RѰóâå·|sR°ô™æ'&š4~eU]‰–œµ”ælÑ൤úù„³ßQD×6¥ƒDN£DÏTÌMyˆÛ+ÿQŒP;ÞA ¯Ó®›–ÏÊ1Ø·ˆî·¾{2ýž8fϘGy7a1Y†ÄœË•²ÏŽ2‚]Ìe]ù1ÎoÈ‹ÜpÏ#Uy38—…¯'Œ®ê6‡5Ù˼§‘."vf£ã•>¡ÚªµŠ —\ÞÎÀ%ÇM9„xóÙJLþêAº•gôiX+9‹„ Åuëï@pÍ}W«sl_³wå„›×ÊÒÞ°ÆÞÎþò½;N¿ÕZÔþ8ʧbߔǑ™H„&ù¢ÄÝ=Å®•€­Å>æü]˜Ê~ø˜«mR-ŽG Ý÷Awl<öèÜ`Á?ö€ûFT&6A½.EÕ–£„ðÞ/DŸuy³_íQb¢$-µí`£/û^ |þå_ R3 ÷sèÇ»J~uòê'^Æm>ÑNgœçV~™w> h®…ÓàSÍœ1b1—x{v´R£V’h|樂¡>…£vuz°Â/ŽÇ”ëH2|¬Ú¿úXÏ¢åê5Zƒ<¸¾Öv|Ï,`í€Ýá@Ùѵ®ÿ8ƒíŽšâK…€,{T¡NŸ vX“.6XEÓó7I5‘qøv,;`´ zr"$Dÿ@$»Ö¡&ppÊ.fŸh‚ƒ0äoçÔkÌmü X1癓ˆ¥[ yåȵ[å]4ÞGqàŸa±I¬JI’£†ÆÖÚ·£G9õ-ê£ wmÒý¨Ä(g?æ8ùAe›¸bYѺùæÂüs „Xw Ïã×ËÌÏY+´Æ^x–;B$s+2Í¥C>o™³M ÔÝ5Êfð§ÙØäWêøjÝûý1 ÉÏÝhQtù\ /󜫑¤¾íë‘ìmaÇwS㣠 6A4ÒVQj¥,Öµ?w—[»æ«Sû8ï6ÅĘ)ö±’²J {é­¿Ó/ÕàeêÌ9èÛãÜðkýz:ŽWŸE^bŠ RWFÌFû¡¯®™a?Ÿ—³ù@ñ2òüâЯ¿yM£¹Š{_ôu€2±XiÀšx ­Q›OvÊ~QK®]ÖaÚñا¼0ÿ¹:Ö—"ôãGH9´s8©:W’]ñŒ‡RO„ ùÝEÖ(œy´&Ô‘t¿Š§:5Šl'Q©rm1§:§©VÖE¨øgX®Ám1”0À”,Öhx—…f ]ƒonz':¨È´œiEšÎš+ú½D+™SªêÀny‚h üÎðÈ<™@­ô“h\|²{Ra- LÞu¯JQ´ps½7Uý¡|yÙoN/…À|Q‰HÈÊ:8jM\n¨*ðÝ¡•¤GDn÷‚}2l¬à=Q®¢ìå¼/Ÿ·K8—LXUGƒý7|å Ý<…—{›’m_l´Déìþ„œSé5¿ ï{uÐxäAæý¥.Š,†’NðIj|æ«›NÏéWyðÀï¹­)«ºHh,3Ÿ ± hÄè˜èC{Y’î‹#ä5WŸc^¥ykì„R’|<19dtwv#ù—£782{ФÁ9ºj߬h¯U¹ ¸dž»%VäCÙ t¹@–œ÷š< ¿•lPÅngÈÌjÃ[ÈçâÍÒܰqÛ9-¢18òžêÕ?:Oñ * `[9¤Ot2±óør&‚gäÐ_P­Ñœð q­í©&Æ®²øòª¶J<·Ä¬Tðžyí?l›i ù®õzqsÊ~úfõ0ªL×5刳]¤htÕÔ§|Gó¤})r³ªúµv ¥%®v.ôØ:ß>S(î;­1žòŸDP%ÒKî„$^÷šEÍá"˜Úéïzï4ÕTB6ÞŠÍoþï5ngÁsjo‰ýI˜ª3[ƒÝ}2‡`ÔI&ôÊk×#ÛUwQe‘v4L¥³ q©–Õl¿%ÃߦH[û¹†vC¡>ÇåˆF–Ë£Ô&SH@|<Ì=Ì×ù“#z§F0ØÁ9ÉšCScímÂÒZ…&à” ZR°Á¤ðY[ÄèCDŸl5Ú±C5t1þ@îÏþÊ“Êp%bÒ“ÄNÁ^ËmÑU)[¼ /ÿF(1¼žÕƒväÉò R½0ïdÕ±’¦=}-}‚œ…UËÿ3‡)- å{’PöŸ) £¨øïª7î'ßÖÒM"{7‘ñ¥LÆø’ ØÕ3— Ðã¨*žÓÍíÐ7Ô¬·œoŸêz çÀ½ŠÛZ8cÛ¾ðyý“¹w[àïu8þüéZãC‡aã?808á|YÙ.M•×CÊ€óÙÕ§9®Á`)éüÙgúváõ[p7A†.˜.ëúûiØO°õG„Ó5²VDï=áˆÍŽÇíyèõ-:™‚-êÆуtKü’0£ 9 0 À.+‘ÝÞ%ýÌUªþ<Úl¢»^SŽh³Up½ñ†1‹…ò\âéGW¨€cž÷Ò^B9¸bŒÅvõ»BH7)ÀÞ[¹JÒÔ “Aî°;î so² ù‚i4¥Ù¥nˆ½ [ƒ˜Ø(¬¦´Ã|/†Yïá#G³µ-¶ïÉ̓<cëNìÝd8°Qà~¨YÓ7Yçe¨û=ÈÓ Mu§~غFd$¾‹¯6Þi–`‘­Î@ݬ¯seÄ–íe¡:bщÙÏvó ëîÁ¨ã½ | ¶ÍiGãôÚ”ŸÚ-Ó _w´,tÒ“ð7£Òˆ9•%„×LFeðr'°D®;¨ÕJí‡Þä °å‡|Ž½Æ— }Q¯ú7(¢q Œ¤’-]Îã‰hQÒ“‹PU¥K²”…üL—¢ÒÕÌEfW¤sTŽpáî*D¬öÀ ¹m_éXfã5°«ýp¤¦¹Ã»˜Æ˜àƒ:içi#‰ƒo?,u—ëH2¨õ+Ò-Œ0fxYjUœ7Ý#Ì_pïÊz/ÓöZ–Á.9­>†¨+ O3) v6‹ámŽžÃ^m㬈¯ýⱘkV¡#ç=:ßß.¢JKWv…Åþè›B¦,…¸=§¸!ޝvë§K¸V­ÿ¦:<`?$JäÚ×çˆÊ“+×–#_·¯¿{žûÅ.Ü»c±…Zƒ +€»Q;Q‡Ø‹Í/é²…ôâ2|g#‡}Ù§눮\ÓjÄ}:•KÈ/fÿèX.{ñ(þRb¥‡(ÿAïM·¯±²ÛF™Ñ²}MÛ¨ïÂǔØ7bP=¯vO;X1KAè Cbøþ‰’³hr²ÝÕ ‹ôx»*Ƙ¬ï›{&î€fO¨ÑõҷܦµœN÷BÈ-ÓÚzŒJx¡$†ûêJ/hsJ¼×vf±KÕ –¹[ ê>ß–³þõZ†š,l[¶{‹>ŒK[5š4¬´ÈÅžŽ<Á°à×çÅgcÇñYK.ïি’yC`£Öð› q7¬tš›ðá·Â×”mþT Cæ´lØãÁ!h•_S•åZR@”Iµ‰_Øß¾"ôjÞ&*1·’CfÅt²æŒVÊúûŒ7«Ý”c¹ož5é´—íÌï õ-½G΀w’c'ô¼Î·Íi¨T½âQãd ªg|7&ˆ·|žýš™ ûvŒ¿ƒ3¥îW‹Àå‹^â»öSGxû32{¶rì¤|v¥íº{pyP}¤JçðG,šO‘+« L¼àwÄ?õ1ÚÅ,^lõ?¢ã9‹2;Ÿ©%/: ¹XdOÈô2?j~5ÐlyPš¤:xCÚæoÓ­'`¸žHÅsUÔ8¤k"*!º£…å&n/ÛíäFâ/¹¼±s¬9þ(!'»"Ïôµ^‰•¬‰ˆu¿C 䯡\B“ھǪÞä°¯J<ÿá­¡`xL”:`²(f›+Ä¡ÍÈ È‘j³t-¡ÛÒìB¹8­O¢~0Bí¯ìŠVýz«§Wî-?CNEúDX£: Da+‹‚I*Tå¹ï÷Ž8?$÷J¶ôa¤I΢‚Ø$’ͨ.1üYz'·¡ŠÈŽýÄï~¯ÖÒoVNåóÆ} š»KŒoAøXMa ÷›ßUè‰ðcÓ =–¨NŽÛõn안¼•“ ê´ÎÕ¤—Ž—‰òè¥û¿>&iªUËYŒ¨Ýù³0y²J aXAAãd§2:Á“³˜Ìï…&Œr‚­©ÎÿÃð—i+ç1B«Žh¶#ñçÓkhilOQ¿ÉÔ¯?T¹»FðD¬äc'KwEJm–”bX¦D*ríîÉÀ–òéhad|Y\©ý.·8&ÞãÐYò»ZyÆ‹¸cáÑõüŽ6`ä.1(Ä÷«t²¹Q- |&ßuíÑE 9s)"ïhµŽj@ˆÉ›#”µÉºdJ5:rsàÍžF¬“½Ì‘gxÝ‹Êr Š6sŒþ»Aœü¸÷ýe^´¶ïþñàV¾lÔO†çÙÁý‘çò§AcpëI•'†ís¨UDLÞú€ð¡#ºž·ÏùO‹WLì6»‘åàÚxœ»å¹õk·¸™«æ7pÖÎa™ñU²*÷Õ`âoûÙc¢&¢Pß´·’$3&vçZbt½…Ho¶é5f+Ñ„nY:Û1‰¿¿óU5þšèsÅ9´J &ë˜EÃc‘¤ä#ÑSZòŒ„Ö¢d…tvÌn§Ú«õÇšÜéF(m3ÊvÕmŸ«t¹ÞþÃò[ ßt>e—©”nÍr§:SšI¿-y~‰„§àäjº:û¹-~‚Ùã Y '~ÿJå7ti£ËËWØYøuD.Î…Ò¶³.+ò ¹úä°}çJR¹šÞhÇ¢Ú}ßÑäæŒ¿*ëÒRCþ´H*?_Á± yg£‚íီ‡U°®5ÛÄÀ_ŽG³¾ìÞ¼i+ö®)OëV@:àýd%S)¢µéZlúÊðÒ_qÖ¬uÛ['Q.*uÙ?«!Íx¹.Ó•{ïj: NQòcU®&8y1Á§Ýgi]ÍLJÒ›'è±HW¢ì-fž¡vvëÕEÔéFÑAlçhÂ) ¥ œ92ÊU& 0±†š»ohú欰TT@´ úŽ5púåˆÜ3¶´+D9æàCÿ٫šr‹‘9~,Ÿ˜šÉl˶ˆ$ÓQ ælŒŒ+ÐÚ晽*ê…¸ï‰þ&Y–Žr6 ÉõvÃA:]'UØŒ ´ù„ׯ÷Úì–p"šwNÁ†µ¤bÝÃ%§{&,K–5~©üæ£ [e•Ìõ2Û8ü¶•›yȾً Ĺwš½}“Ÿ¾¦)/÷*m$†Š%¸\ÝÑ`´¾½¯«0›Œ<ŒÚ[»ðâÒNˆÕkiŒšG8¨0’'á‹ ‰Ÿ¬¥ŒG¾æOq/–áµéRL`7+„fĄġmÜžd…ƒÔQz·ã,¹(Èì—CŽ û©ö÷¾âŒ#‰€ è}ÊáØÉR³ùÚѰhí.Á%¦- e›âJì$çæÔ’ èr&tK¶!Û;W¥Ÿ'Zé×F%ÞO,"(|žj‡­ûq¢JI0tVâ¿M§¨a1ïÝÐAÓÑäßé±Ò¬¶ž<ÏS*-uùïÎ\|DÊ€èWèðF23>ÕÜá7‰Þ.$©Û÷éHPüBØÊé"S ôv5-r³Ü ¥ãxv’) × -õÖ@ í¼VŸ3ä ;ÀØàcÜxf,·oÀ“R …ƒ}†Î}?ál5qjüb±‡Ùþzá§Ê?Õs;aÀñò3HQŽ4Îì°±ÞvêDÁ« Çõ7XßúýX­†“ï $–]¯ýØïê1+?) Zg.&ß#j© NQ(¤{ÛÇfJ‹µ$³ºï È)3tŽE2ƒÚ”Iõy èþQhb©hÿvDÎó/y0iß—±‰_^4£ú ¿¡1 P—lübÕ±A¦D±ó‰Zª¿‘¯{g‹]¹ž…rþ@¾ß|—µÊMÁÑm²'c§1ÿ¦Ç=o¾ò ‘°æë¢ .BÐvcŸQ þ¢óHeT|Kƒ$a¯]µJºßiyÎbÛ†î¢âZný$Ù[ò`Ãxþܪ}꾉[ô$ïmÅéŽI×b«Ý¸6EKì¯PG=gì-£Œ7\ßþJ Y]5½*ýë¶1 9õünÜ•L? ÊyEÕiKxŒþëeTvLJ2ª·‘GSò(–Á¡<­³º÷SÊÓæA•—ÍeÒ´‡§¤¬í:/VôVBÇ5ù)2ƒœ§^ZØÀ6”è ¯zRfç ×LŽò ¤aw)x£ßêB¶ïl’ŽQ}bÓâën¶B%–¨ÓÄÍ£k6ÑIG ú×§ˆßvhÞÝ~½ IÚ€… áÈ|ª `ÆÅ)ý@ÔÈÖ$Û”DFÛ,§ý'® ©Jhõ©Bâ Ï&Óê²3Vt¿¤XÞk%Ó EÏ[R×éH¼5©ßé°N¤|àÇv±º{œ=ç úŒ³Ž ëá¾Ê <3—gŒ UL|=uôt9“SØgìØõ»±Ú6ÐØ0xè—m7-~í¶ìž@„Unx²…ù¥Ë¨½yÏÓ°d„)¼¸µïÙQ˜ °îã°é.ÕYiˆôàþ£Þ™7¨¨Ós¹Þ:Z0@/(µ·r$û´Öä­ûBÝ4ç',=X¬ë¥dâ^…Ç×*uëÁ/ÅÃ6^¦4ÔjØœr=nÏÊ+Bg†› /LyøŸÊY´"èÖ9÷…1í3{`ŽEa‰z?÷E•[¬`ë^´ÊÚmyöIÃÑAÇ+z/nq)m’¾{c^äà&Æô"ZR(fšiÀ‹×ïôÊk£·æÙû¶H?­¶ jíéº~SìtF/"%»â’>‰à¤+"QÃ]Q \5#¢J}° Æ™»ø$sŒœYO¥èZdB)‚iÏÊ%uÒf –ùبҙÈe þwRn&‚ñ#Y b|q½RƒÄ1ߨ%*½ïOìÕð!þ–‰·Â¯¶nÿàaÙ4zÅèª7b) þ:æöÕŒÞe¥ýOD÷Ìv®³®â  :fUOkYˆPKìsÁ’ a!¿EÚ˜…™ž&ÜÛ—ùlP†G»5tŠ:ž&QmŠ2´÷=BaºÛW͹tZœ:÷•û”ž—"v¨ÝJÞÅï{, x&?k+¹pÑK$Ú^r6äô´0ãéŠ[ÅM~òÄ¿¯¡wŽ9:'² Áë¿ à_/ãÏ”E-NOògŸsß^Ü Õ¹‚ú}h¥?ñ?ÝÿQ3]ÿò´iûÝÁ´ Œ~ Ölôé*p-F§oúƒDÓ#KƒºÄá7\ž©À Ädˆ'žÜÏÀÊÆŠä4Ízm©ïSºçú…×Âʰl453é| —¢Rh£#Øàï/>Þu®¾pgð¯úÜpvÍcâÖ&¢õÇ'óg=Øo>à˜bö#ûæ kˆ#£HH@#Š×‹o+“…¦Þ8ûÝñtÊVšM»KJ9çÙD…^ËÛµ× ÔAÀá­Ð½Ö^À¾­Ø’„Bþ¾d‚áêÄVƒêèhCd½w™•_FÝ=!­UtãŸÏT7Îñ»XT4±>õU2Ò¾"’歷ÿåJÖ|Pò™ÌÇñ—h0wS¥&ÎkÓ iøž-­…K7뙓ËF™Á‰jmK¿Ôl+mqš,”&dæªïô³ðÍš£:‡²Z) Vz",Sð£&NùƒœµUÂlº™€¶¢u••™Å–¼ µú‡ÑÓ/òA1,œAoñçPâ cÛvÈ·õÀeÃG™&„þ öËÕã ý"'h£º<¸ÆWuDæž‘5?Çzd,ž B¤¡äqlx¥4Lè %~˜_Nê}º\õÎè('Ò¤f·å×Ç“¢mœ©[3íêoÅt;@–°bdùPÖê§8§Ý3rÊcüüò–1 \‘•Z¾ÊÆ•¿ÿ0Š¿°%-ß´°xtQJÚbÌv†[ÞÍÖóåß"]ìYÊ|HOžû·ùCz#¨ )ç®ÇŒ=L“r‚‡µë»ÛN¦5ˆƒè;¿ø:câeÁJnx«`ª´·»Ú®HBøñ ã'С7ÇÜÑoOÏ0”[ü”üy…0 ­, 1Ðå<¹À®txø²j‡ÜŽŽì/oÆ-¿O/ãÜI"™î³Û¸° +4„`á @ÉÍì+z¤I¯|²Š¢nÝ0ÌM:×Ì•qGç {”ze^*¢ä•IÒý¹E Ñ–Áb ØÂ?uŠ_½®g”OåY€ôõàÑÔoÛîzc*çȘXÓ¼£°TÃkRÙý$H|îÂ2ÓËñìÔß$ŽÁ*dhȴʘÛp1^Æ(…¼(ø)º™ÈR1•Y dqœJ±gIéšñ‰3¬µ ôO“PŠ2à´ŸR@>®øf[f¾’wR¬mB«WÙ°§|Í*gèm°õígB¤·l¥A¦SçÇšÿíN3ò^ZŠ{·Ó¤tÝJ¯åDn–Ó2XsqVÁU˜*T½YfóoÆsùØæi:óͦAî҇ޒ͸"*„«V_F/E8ùÛÎ ~ÏÔ¢¿¨,@‘}2· ˆjM{m©2ÇYê–Ôƒ½"l¯¸©ˆÄÑ h¬ÜKmÐU]GH JfŠCÚF{i! ™ NŸÙ´ì Ù-†‚ãwþí*†½¦dd‡°fŸ7Ð;U˜å>l"ð¬²ÝÙç)i·û@ä€hÁq‡ˆA7ì¶Ö›èYÕ RîD¿¤%Ý8‹,Εúi*Ç‹õŒ/ÙQØ›O‹£¿tWJ¡•D²ëí«{™Q¤Éý°QÛhÒ÷Ãǰö %^…„÷`ÌîÑN<V/<£Ù¬·Êó$L¢Ò* •óǵ¾ÀtøÅý”Þc–œCï‚aU¸äJŠn“ö~7˜Cä]1N7 ô±¢y¢>…ahoþgé·ª‹…|‰ë<)ÝsG‘eÙà•þ0v¢MãDÊxÛÎF3cŸò¤ØÏm0K¡|‘«kI½‰…™6UÓ&§ËhËÛ,?Ø?ܸ Ì¢l Âëû´ïu"9ž÷9Fwçšp “µhè­s re{Y1*Ê0<¢Zˆ÷-Ö)â˵¬,«t<ÐU½ä„®œÔ÷’5ª-¤~è\^n—¶-ŽPùl‘Ûè–ùõœRÍ¡T_ÐÚ±èg‡\éïa)Ôà´Šê³;F˜ò]è¹?©gEÎnú#Uæk± j*C›Y£*óòö<+¼îµé/.Îê&L¡û»;,1‰-¶¾ô&õWU© ¾žøIiÛéWX¶o3m9¡ÖÃzz¿uncÎÁvL3&E&èG¦2Fb–Tbaq,-¹±Fšö~<³â¢˜ùývé4ÒŸX×÷‹ÌzÓO¸=qXeúù€°Òhç®Å*„ðút)BE`ø}Òšì¤Îþ°k®{BZ³mäØjžoe[â…ÌÓ<öýY„(¡L bY¶NmW3}{¸HÚçùÞ,v5ó軽úsnÀÊÀ™™wš‰èЕZ‰ò"¹¥ê\ãè:Øžîüb]'nø¹ågÅÛY'iãï„Ýas×JË+.‡ÝDR¨¢×zcq_v—ÄtVAU ¦dÂÏüß(¡ˆ^•çÏ|¸BÇH9Ì[>fh w ¾9¬ñÉØOv@J=>¸õí×=›¯ 1x‰{žCXöG‹& ¦ü]q&Þ”aÄÆ¨Í°z­wÇãÖc Å]øÌÈTq’Wƒ±l«X~ü9v'}f•n5µ‘tûÂôçwY$¸ÝyÈù¨²á7ó–ýi2§Û¡N÷¯P`q@£®þÞÛÕÆE›“+ÑÜþòíí¤sÀÒ÷66R){N™Í§(Û”ŽnM]gõCÿҬ糭øV%ÍžËmã1ßÝÃxA†€˜[+ϧ–¥qúQˆ|Çäèñlu¶ïó£†j-AIâ+ÏМl2[cf|ñ©…X ‹H5ªD§t¯#ºÊ¸8Tžy˜ó "¡îÈü>k*õ”ãÂ3¹àú×!ñʘy5kîç<µ~Ûü f£¶w‡¹›¨Ù‘l7‰FÇ®ÜkøœÊ¢^,¨ë‰ú@<–¦Ž$IqP‚ôÄŒ>-¯ÕÊJpÅ|…ăA¾Y^Õÿ`B¿f(w,Ø~Ãd<…ß®†yµ®­sæ³JrAòaÀ)ž0‘U*Z¾'³%w¯æx_Á4 10ªY½cbs:kÛ˜©¤|ﲿ~ت¾mD_4§†Êqr¹Ñ~õœ¦t']l¶wÌ÷Í×·ô²Î¢hO½Íüf©ÇÚa^åB&á Và§$LwÊÕ'Nµ ¯ÊÜQM'×ÚÕ@4—Ïd”“ÄFB=»+ùBÒ‘]ØùëçY2ƒš ôÕ‘C$E»y4i"ÊØª>_›ƒÂ)¹§s …¤*,_‘p'ï­Ì,Á—þÙe$$h 鄸~ÙÈÕQ¬Æçw¼›ç‚)ŽâàDFz)4ø°ãØA0ôbâéõ)æ´ÞItô\ž¡ƒ¬¥'Ûû!êõàQ¢™R’ü¶ƒ‰Š$C˜oŠVø(¬r[q+è-Ëì D!å¾ìxX,×)dš–8hr¦b7Éx~î& ÇIi´ã®/p£Ð滂sP;·~ËʹãÒ{sƒöº «Ó*‡‡š Ž¡‘Ðëõo2ùj¾IìÜu»=òèPCVórJúœ€•.v4‹ ÚYN3uAó„¡¥¸Bfeâªq'»ü0ðÕ˃êòŽ…J%Å’ž_(w è–¿¾]¡3Ñ&ÍcýîH:{øþ‚âc7*ÀfŒšf¢F"¸Ë€Š“q:8\˜Ž‹„HCbeÕ{¨üŸâ‡Û[¤Ô+Gêî?Ó‡)öèugØc*¿•eOwÈt›–ù ?XÇz÷O*=Ýßá5ñªÂSòdI€âè~g±u-¾Ãä"™—* IUú<¾W§é°™ÚfßJ¿ÅDE ‰vƒR»­ Ü i2/+hqœ·1å,+e\éNhôé—'jEµñœ'¬´DŽªª)Oõvfnl—Úvÿ¢)xªž¢zÀ"ºC£QÔ¤úâç8÷ü/'¬ŠèÔ|¶KGj¹>éÖ{€@—ôƒ“¥Ü£¡DeNkŽ©å#þ=jZ.\#{_C; š:º@OðT+¡…5œ^™;@çMu›(Å8ô¤!ÙUåGÚ&”ŽŒÐI¡vPõôÄhó冄&:4]ÒýÊ5x”Gغû3±S‹mË,Š*ˆì¯ï6¹¶ÔïÄÞmø}˜€ôâ±üSñni®lu@nÞSß1c aÇ­£ËÞ|‚çÀ°/®³év´W\g’˜®úÊS|-0½&N!£P—¾Ð3|˜&^ÝÏUXèí‚€ÞÇtO¿»zJ`‡u: soò;ÄE«8é>€€R(y?ãæ/1aDô$Ý<–À‚@€'Z2N¹ýj2£ÕÄ!÷=½6,ºª£92ïÛrëB¨©Î>Å]åòîé/»$C0ß\;0–Q3™D¼[#¥q²T=hh¤vñuÈÒÔ+­†Æ¬GÒ.+ÏTÌÐ+¤ðƒ¶Ä7âs,ov}ý½J†"QÎå^ÈßÁFU¹$쪀ü5c.ýͼ–"‰ÏsH–ŠÈá3Ñ’,,$eܰ¥óûæR3I"^kŽKÀ©y#Ëî¿®q«ÓGð­0ÜN¥ MJhv[µC"h&Æâ¢‘lÿjkí혦7¶¿vR¥Æ.ﲎ‘™«g¼s¨*•uõ€oÜR„é:{‚³ÓꡇF´'f—GJA€g¾Aê3‹¦£roHkŸMsÚž¤I1äŽImåIóeÝêÍ>®’ÞøÛ ˜¹n8ÌqP~±›Ð­sÌC¯Â¾S.,uáÀ~‡œ<Áª÷¶5ÄŽU¹FÂÒ‰ÏÐy¸Û¡î.\4Þ"x[@ÛpH·o¶Ù7)¨kÆammVY‘PÎzÆ_Àœå®ôJœ?Žt_qwE ‡–÷ºjMpâÀyMbjò2,ùÝ#Ø­´Ú1ùdòF¹äÛ7ÐUë:|Æ çêhõ‰qrÿÐwçLÖêÞ(Z=©oãW’™T{×V–åÐÆ8¿7eéqs©öÌÆt™k\ö&t©^~ÃŲÁ•£´šå$WK\»TÀÔ)µCæãrRÜxœ~_ʧw£&ò,Í#Q_¿ŸvóiMO˜$‡x{/ Óeýâq6¶á°–òmçà (vhFNðKœ…À¾„?˸)Öìeç§DõÓ Äu¯lRózßhiq›~¸³+Ö,w¾Ât‡›—¨$ÜdDY‚ý˾uKÒºïBЈ"©§‚aC­"FêtPÛ¨õoò`·GÛŽ•Šo£ÍLéÒBºwø°PŸ¼÷§Ÿ||†7]S‰ÏÖåó:å¿‚Ä €…Ô¡/Øù)rQÒ2²hÒ¶±2ÒÇs©2ɱ ¡—i<ÉGøœ®}ÄqÛm€‡£vªô k~Òݸ8ㆎ/ú–€:”bv|½ü_¬Ð訯Øraº¹çYQÙNÖìR€ÊÜ¿E¼'2Æ®"í"NKF)u} ÑÀŒw(r}OeÓsHÓ&?[+‘Â[1µò7óVþñ¾§ˆÏõb×¶õ§Œ6M#÷²‘ˆ¨VŠƒ²â¹c ¿•ÖHFÔÆ (XÁ[T!*vŸÄ½˜+ˆCGƒÚÂÑ5íëa‚nþ=eâдÝ{Y2ˆ….³»Ÿá |Os=zUMÄLŸEˆÚàsî¶6’‘³‰\Ʊ¯þ)aÆTµ(/HÆ–… ]㬰O ­òŒm…:I!é¼€k̽Ã1¸Â£‡½°d®‹c—@ÐÞQ ÛÔ‚<,Óéµù#TªqK¼Ø~ Sò±Ÿ„P+n†ï7úV=¥å6ÕÍâW©m³´îô9¥G4–÷]A³™AÆ¥OR6©A•#‰ Ù©Œ•o»Èä´Œ"e§zésÕ,§ O»Ì½©&ê8HxKãÇÀ¡­ÊÓ%æÕËfE,2˜ÊކfVýVŽóИeDmŒh~‰`ö(ý÷ÙâšÆ™ò«Eh•(ºÄm+Dê`¢eè£7Ñø&ô€‡ºM¹rÊí…iÇtå$IGú5 ì.} JÜy+2´rì×å“DT¬Ù÷:³Þ÷ß÷Ô|Næ§Ô`ÚÜ ã]çI}Iç„A­=¸üÓ#B¦ èÞ]ÏûÞ #‡ÞHOV’/ ˜ÙòÇkIwƒàs ÏsÖÎÿ¯APž«ESÁô(Fô sõþ¡Y_C†µwiðrd®q"l,4{çÆ‘œ+ŠÖ…Ô‘úL°$+ßδµzšœÿGâ`/‚ߨÁò['¹ž¶“°CìGö65ø˜‡Ã`Úyuù™E5oYfœ$J<ŽcxzO¯¼d^ØÈ¼1{øuùIä@Ðó^¡”ŠVŠÂûž÷q Vv]c{|« †fKTÌØ´iWX¨Ýóĺ1BèÚæ 6,þæ=ÏŽ<¥Ïx$´³®š©I¶Øb´)ph!gV¬uË ÎÄž|iИÅõÔÔfç´°™*–ÐÆ!æ0ÂFµuVÀˆ§ÂR½Æ¢ëÅj.~•=ùÉ4Ä·ÄööqySá™Í6´Twh. ZNI©ô ÿRjªîr,„ü¾_ú€ñU) ýŒÇ`nùÁćr^o§q† ^ÀvÁ¨Nñ¥žû…¦×lrÑvàibmY“Vfl‡¡ '.±°rÒ‡1y1•n endstream endobj 255 0 obj << /Length1 1608 /Length2 10170 /Length3 0 /Length 10994 /Filter /FlateDecode >> stream xÚ­xeT]Û’5N€@p—Cpw î®Áƒà9\ƒ»kp îÜÝÝ-8Á5¸~Üûúõëñ¾þÕÝ?ö{UÕš5«f­5öØTä*jL¢¦¶Æ )[ˆ#3+@ lcìä „(0‰ÙZ›ÞŒ\ÈTTâö  #Ø"tñ´@¦ €ÀöéÓ'd*€¸­›=ØÜÂ@«ñY‹Žñ_–¿BÆnÿô¼ít›CÔo/Î k[;Äñ â¼Q 8Z€f`k@\YEGVI@+­¤A@ö@k€Š“±5Ø 6A@t3[{€õ?[ˆ)ø¯Ò˜ß°D@€ƒÈü¶ äj²ûËŰÙÛ€ÞÞ`€¹=âøÖG[bbídú7»™íß„ììmß"lÞ|o`*¶Ž&ö`;GÀ[V ©ðt´:þ•ÛüæØš½EšÚš8ýUÒß¾7˜7¯# q8‚\ÿÊe ˜‚ì¬no¹ßÀììÁÓprCÌÿÅ€`2Ú›ZƒÞ`Þ°ÿêοêü—êvvÖnï¶ý;ê?9€@ÖfÌÈlìo9Mßr›ƒ!È, Š,ÄÌÀÆú»©“Ý?}Î û¿Dû×Ìн‘šÚB¬Ý¦ 3d%[Ç·”Úÿ™ÊÌÿw"ÿHü"ðÿ‰¼ÿ;qÿ]£ÿrˆÿ·çùß¡¥œ¬­•€6oð ðvÃ8Ý1ÿ_,ÐlíößDÿ{ è ÿ;YGà[D!æoR°2³þÃv»‚LUÀŽ&3 õ[þ¶k@LAöÖ`èMË¿Û`bãâú7ŸºØÄ òWÓ¹?ýíALÿù›<ófQ”UÓcø÷Ûôï(•7ÕÕÝìÞˆýGж¦ÿ¹ø CLÌÖàÁÄÆÃ`â`åy;l¬€OœŸ¼þ›|±ýk­t´»tߊfeû»ôÿxþµÒÿ7Iˆ‰­é_s¢æ„˜¾Öþr›8ÙÛ¿)ú÷i+ùŸë¿‡r™ /ÍÛšðX&§¥8VáeõJèvw²ÁöÚþTÏûáSaÛá²ñ©Ôè©2¹vœï¥ÉmîÐîyGŽ~w°ך¦# tšCìEA×õãu î‹A!jÊ‘V„ÇÙ¬Â:ÜnVÍÝÍQÕÏO$ã-öïÎné|(œø`SÞØ¡}3ù^ÓŠ^ …Y•{xD¿{CÓ;4Ðß×qßµCÄDÅÄû–xHžàèfdõÓäÙ…©‚/#>pŒÜ¤{ù¾’¥“nW”H„ÄâT?Yc=̤~ùÛ¬øáû8Iµ¾S,V}@Ûcí`[¯ÞEMŒ t<ó±È˜¥Õ‡<õ6A¸ÖhTKEÄ… Ý+y+jj¹6kîéiü:ÍI•™ðͲ—=…ƒbÿ …ØÉ\C»B…à©ÙC/çìÎæE1óœËV_kR…éƒDÔÄèÚ m\mj‘CQýZÔÝºŽ©m::Hì¥}ïØ@2VÖÓË©ÒZDÌ-­60+@Ÿ< /Žéÿ<'Rý I2mÖ7ÚÙišxzS2{Úü=wAŸí ÷ƒ)< ³Èç^}BþÐÑ5{¨aù€Li¥jf?fÄmIÊ©[ϳÀœ 6KÉî µ)!UÔNü‚›ü’FÂðË•Ì×ÓùD>Á-BÎm˜Y¢…ÓË<>³ –³Ða“ ¢|ÛÐ÷ƒè/5a€ÏN{ZŸ,À/daFu•ÂC Uø–2Ý6æ[el8Ьj¡å­üc™a½¼™»¤ªb~p1œ.ò*U­à-ÔŠßZVÏþ›W–¼lË0›£ˆf…ª)îeDáÒ®Áf Ù%b1)B±Ìq‘†!8m½`Ža„â7A Ÿ´“É«hßÓæ¤Ã/XÁ.Ë‹ üøV]ß`šAQºðÛ1®×kÉò/H|?üpÐX%‡Œˆ¦óÙŠ 8ÞÑøÐž°l!„ˆóÝlO÷ĪíðÓe;Æ¥!)[qY¨~¤¿ª£’ƒG¾Eñm´/sŽNŠ…ñöŠ%à·îžÉÝÞ( ƒ'á¦Å™N>Š4°ËÚJFLC¤Y»§¦¶ZV÷3D Ò°eà2ËVBî9÷saÀ»]°ülb®ˆBÿÔ¶¾T™î÷s鲄·ž~·”ûû’‚Tm]ÕÑda©O9Ö(»¶ ¥ëÜnSª=z ’,r¼ÆGàl ½ˆÕ§-‡¬ëÚœ,©ñ9[S&ú^AaðqÆ^ox6ëånË'H|«pâþà+=û¾EF¿UI#<‡BrªUzéÊ›ÒúîW¿£±Ú“Vd)ÞÆáÑ -&¿eþ’'…®šs£ªc={èFEÊá2ø®:ÈX£kß÷ìø'©Ož¹ ÅZÌ9§æ&ñ£@ïÞÖÇé‰é© mLz…Zïk,åµpu Ä¡ØÍ=å½…!öªûDû_åw s<Â!~¨í-’'’ŠçUH/CwÃÎwrùwqr¨£ÀÌJ¬]èÊ©Cv2bÕ‹Ù6Ïvc+ñ¶E ºÔu‡Nû×þR„UM ŸÄ5øÊ!ò}º›žÁºNlcD]¸eÊäÏW<¦Ý?¹šTáö ¼Rªz_î§0 pÿz}ïY[–rOp¡«+ÞfÄ´º¯sqÖÙœDÌÖ‘¬ 7úkdX‰ÚÿÛSœ‡³Ñ¢$U‰y<×ûåo˜Vº?›pNZ"åQñ„„ýµ‡œ4–ŸSÑjà ÉÒzlähð˜Ìf0{­TOiÆf\4ܬ瞡VîHŒøŠ6{‰wg#Q7} 0©£Î¯06h(æÂL>#:÷!s ƒrÂò´ßŠÎ 2§Å…=#\h‰ýA’–j_ÈÉdZC¾­]Vé!æô›÷Î~Àž¨frÀ~{¾–Î/ê©dõf%éZwô*Ýò¸“Ð×ЫÃIyìGI#ña‡ TîÃ;:¼ºHêœí¦2N?ž”üù1Šô"\˨s(Ò”´~Ô4š 7”^¼àJ¤©íy2I³‡R·›%¨íO¼Üd?TíçC¬ Ð~í ½6UÅØ!5Y—ÑN÷×Bvp_¤ç®”¬Åìꢼ ]ì~A´»'ר…”ez)"÷ÅbF¿Ë‡’þ#œ(æ-ÚæWÒ D³1þô§*èv+Ík•¦:µJD雷HÈÇ)z›oòÄ?A÷w’›£ð ø‘½.D¡p§G£Ô¾»{·‘+ HxN–L_S7ÕZ„1r˜öM>™s1:¡‰K š+Züúl.†láhbÄ/ƒà¶ò¬œê¹«ÙÛ?¤j5Hëÿ’?—e`t<®Qb Ù`11ªð=¯$ 4EÖE¾.…9 w¼ûÌns†7LÊ…ODXŠãPþwZ2|WÒ[g#ŒLÖg÷F\-¢1wJW£8Ìÿ½“­¶Ñ3X×ü䤰]V&yB¼V.A¤ ÷².')µÙ€¦¡ëÓ 3œßéC¥|Š‹kéÚLø‡¬B«x²ÓXÞü*µÂ9ÑðÅKBa¥\_x7_’„™?…íf™Ò®¨ž·ÌE”†o'ã³c‘ÿN›WÌv•›Tô;¬ç·¹ØP WëÁ¼Ù’·+v'õ†Ô¦C¥ii½ ®_Ñö1ä°6¨Âê÷ê£ÍžL­â|p7VѾ;ÚÙËÿNÈuÕ kîö(ÐBr¡yo-*Y :ÍÏö…•þÈ%òÖô‘Öa&%q»Ÿô I`C²iNaì€ÔPv8ìÑ7tˆØ§/³ÂPó>£ä´„‡à&Uc)v\Hê­8Vfk›m$+Ña_û#ýyýC YŽ„Ôþ4º©»vÒôAÂräè*F!—¹¾•5òeÕ†qR?':ì°7R&–K3–“¢e[»t>YjI+¿Ë¼[%Y Ì ÿlÌø¸…Ÿc9ælt7¬Wf-b†á\O´cŽ}6Aé 9&’ªjÅéQc¼žwþàŠ-#Ò±ÀÆÐ’²øÁ›È•û‚£d-¾“7ÛÓ²a÷CjŒÛ/–‡z+Œ÷ƒ­¦ÖíÒßÖíŦÙ×ñáXÉ=hT%,4""å%e‡½©ëÛ÷ø?Ös;ðÖ¯r–Ö[ ¥k0²ÎÃ`‹ *0G'χ™uB<ÒgËëi¸hx¾‰glX×ÐTJ£k…ú_ý‹d¶Ø™Ÿd\ÐÔ —)õ>»ÒînÁþYwÙËåÜqG=a|•QŒßC}ôùF³BÏ‹qú4T-ÁáÊj"u4ЮÁššêW³|ÞS¿"½ñµß˜D‡8i‚åŸBŒ%.K~Ó}\…óôi©Ñ=lÅÿjäUEmO;¿¾Í1A‹nêü±49zT_O¼ò`8·v)ío—Î÷89Ö‹ y°©Mý“H#ðFÆG5cÛÊ;E}xw×gìî ép¢‚Ïú¸Ä„¹ß²m¿pʇõ2ü4H=ÅoÎ ;’4Ù‚ÇÄ(sá=g…'PŠ-8Ü’·ßçèMóÛœÔL :΀úOaµÕ¦ëäAüÚþÙ>¥!âdÕŸ³žžv.´×›ÄøGj|êÊ¡ñï3?êÕLŽˆ"TÃ7RÙÓ~hŽ"÷\y˜´|çhë`ö3POvÄ?éô›´!]¾oЇÙs '{nq¾̲i :9¯Ü%JÄ­)…nÁÎ@m{‘ I`ÑÄýÆÍZçÙ;@é{[.mù|Ž…> e ›æç"hþtÇàƒ}F6_Ãp¦¬5}²J±é¹Û¸Ãå–Ÿp~™4#‘vþ“{úpè2ÂJ9 ¹îýó¸4L@èb™õ5AÎäËÐT<5Ûû.Ìðó½÷Q©ÌZô.k“?ÅŸ®,J÷WjU6zë"‹=h•š;«.MÊö§/ÈSQ?)~»åÙ ±J‰ºJáv»ãðíǯõ6zkWao(ÝIJ–;†û9 ×ÄiWZgõšdY?H^]§Ö¦(8G‰E¥p =K8O_¾\ùÎ%Väš«žÞúO&›^båW¸Gޝñ/üÑîÜÄ…ÞB>Þ÷’5²vÇF®»yaèóø” F—&öÇÜbŠaN¾¥ü¿¿Ÿþóú ºd×á%«¤ï7øE{@—µYÌ;/…?.d²©`â#Øú~Lß:—°O7[ˆ98h~É$)W^Jf¸mÈïØ_Þp“øÿþ•÷P$¸ºiùZßGhZä½H?ðìÊd=Õ S“¥°|×ô…ãu®‘bÌRÂgÀ¡~Ü:æV µ¦–‚[92ŒÞz#Û{ƒ6àjËz¬‹jÓs»C¢ÎœZbNÏHãÖSõ®ò“Œ‚òp¢CP»†t’gÆߺ’ ê͵²RHë›ÁÌEcÒÅíedÈ>O-jf_IÛÈlqÈÄ’ìK©„«)õ·Þ¯Ó[²y—S„œmw§i;³8ËÝ û¡ËŠè©~h‹•|Ø»dR[9ÎzÝî×–eÐ?f–Ρ5 Ÿ|þI8çü©\˜{Ýpaôý@*«ŠNkj«+­ÕýÏþ»~*ë¶)H”ê–Ü ²÷­Th² vèú’£¶/&m›)䶉yÓ¿0zkŒ7²˜PÍsDGKXhÊ껵Q]Uˆâ#Á7ÑŒÀ:½A º³wÕ‘Ojm{L±ÆL[Ü$0„ž´®üp5\8® !.§³ÞíœÍâ"ÌtfŽ’îvÈU;RwÉ|ðÊr.BÑ…O÷šš?GHkwqÞEí›_ëù]ÿHÀÀðÏ¡XréÕÛr‹:u†•9”óˆœ\$½¬Çk戈pFÏ»ÅØI°ˆwµ¿ÇrEŸô|ÅHý”QR¿áSÞŽ3ÊW è‘6ÔCÊHŸ,äÕηY!xp´ƒ˜N$R¾š‹™ÕTÈëËfüŒ3D"W1Éׇ}óu÷'Þµ‹Ÿ ºLñí¤ù°×f¡ç5ÿ‡¦éRÏgm™1†U< Û¬N[yHŽäܺÀYïžÐBÁìœq¯ˆoN*ÍwôZŽNn £Æ­Ê8þpZNlJöƒ‚F¡]J·¬ý­ÃoYïSAÐÜc£ó’MÅÅ5Xð‹ ñªI/» *Ë¥ÆrX]Ì»b7(êGt–y#šß­6´Çp·…-(Nž1\ø[±3Úñ8÷„’¸™O‡ˆ`­(:i°p¢ð|ƒŠðÂk<Ûgk£o¤æ9;ƒÞt¢D0ëèk‚Öƒcϼ±_w†Žî^ƒ¤-XÎ'ŒÍ¢ä=“2*Ýœ.ˆÔ)FöJ“‹Ø/âOÐÿ1¹`F2ÂPÙrdl9„‘‰è@/÷Mž¤Ìã}êv2Bìð}F^ƒË9†þu¹x¤Â_Ò6ØzeœõA}þ«2rw­9¹¦h±÷d¸Y{ÁöJëH ü ‘‡ àQjÒ!ÞNɼh ‹Á–Cë;ξy v½®P¼[2EÚ=ÒÅC›Wl 0½ýŸçž…¤O~"ë ƒ¨µˆÂ&˜ŠcçšÜ×@] qD¡™µë€.ÉLÿ4…ÖÒ¥ù5ö uEEQŠÕXÓû÷E;WÖ ê½›µ™ãŒÁžI°_(¾n{deb²Do¼,ü“)†…c.5ràn³ò,~úîÜ»| •††V€ÎQ!Î|yïûñJé2Ç`[´MþÐêÅo˜ÏÖ<ò ~vkæ1«¶eß M7µk‚û¬¬ž6å«éÜQG­ã•eý* ÚÙÉL"ÏhTa¬ÍÈÌßú oèÆüQìôÀÍQ0ÓmiÅ“_çZÍ'%†…Õ§ýÏhÆý…¿Î¬ôý浞%z_:êùi¦êÑîÞÌØoÿà¬úuÇÄjï>¶º*à^Ž/‚Ä¥V³åÏ/JÓi.z~¡†ôTqA¬ —¯âX7L7"  ¾¾‘'9Í;ëÔy§¤ÀïQçþ*Ü­¢R‚öȇ V{Nö…¬‘ÒçýîZ‡¿­ð4“æA‹£wæ÷…Ê(NˆÃùX8}%2?K­$Õ¾‰¥éd´î̳h|Õœaøè£>ÿ@ù ¨M ãžÌ¶Ž*)4²Àk®¦#Î Séq%%›ò‚ïø!l–4å“è­ùÜ9=ëÛªEL†›+Muê€Ù^û.¹]ªËDʰ-‡ë+ˆ*~œãIYqdàè_qk3ØA;e2ª¼%³]ž$lÛà\ω™q.a’2Їàá{Ž^<~e†Î+OïÕï=ºŒü@ECâÍ(ž=&éµî¶‘ö ¦/ìs¿È‹ôM Kéâ«;5|8ÃUÍÑ7ÙÜYe9—QQ'¼ŒfNÃݨª#ëKÐøÌ"„5ýŸ÷´?÷´z¶µß/ UÀ®Y]JN¦g×îÎû8©Ã%ßfØÆl)žP›,a«ìÕ]5)Ã'®˜ã>×z·ž5Ê]X´ §Å2½£ÍÏ9à™©¬<·æTÈñúÀÿ”õ|`OÎ~ÃØŽ/°Ô¨Ù<Ñ u£òÅóËAùÄÙñw¶èòZTPGlšw©s•ò=až~ÛsõxWƒÌ¾f‹.µ$ÖS*ÌF~`Ç» ­†’äæƒ×šm´Xƒå…—!EíôI³-“+ñgEoE I€Lù¾#é*fI¡NøbîN»õ¸é ‚GžYÖ`ˆAæˆSê©êcÆÊ­‹$C«GÌàïï%"¾-),–Kªílé>Ê8¿‡îöh.•ü}ÍèÈ X¿ÕÈÁ¿( ˜<ŸmŒ¸"éŸyÏ,GëT..”àýKøx\Ø^ÅÈGû,¦¬O.”±P ®y&\‡Jÿ %å˜ ‹ˆ¨ÝD÷Ä)ú¡$¸kÃG.ʽ•N„­Öùy­CSÑJ‘Ú¯8²2Ã#ófºÖèÓžŠØœ |Ò°GƒÄ,ÑûÓ6 j7òlJûù?½9W_sóv5ôø+ø~æêïÛÚݤaµääÓ¨±”˜ÈUVœÓ«"LÌžì—vþðN.MbàòAÔžW5b׿¹{Xž˜³é˜×®:ý,ec³Æa#o˜åŸ(•üé#d•´šW…"»ÑN‡Maˆƒ¡äÕ“ôÚØ‚¦{AM‡ºÄUISçˆXvй¿?Ê…üŽÓ´P?Å:.ÿƒŽ(¼6·Ú½ë•Ñ£4ö·ÌˆÉŒÊIõl­¡L”Žô¯CRG.'Ö“¸Nù³†ƒm°cç£/nÕ7jŸ¨õZ®X•å2럆Ôü;ýÅÏ$%½”ö 7Ú>*8’/²†þL퀖ÍÎÌ&ʶ>³ŠLIf ;îØÎSÉ${–þº—ªÝ~s¶˜C9Ó?#2䟡»ÛÚ­k9ú›Eé€Í«ÒÃÊ÷¶xSP‚IVBA¾U¿GýË~]!'D+·hÊD5\eÚYÐpÁÐÜÿžP8õ#­ÉIv¦é~Ž®L„ݧôY÷.òœ  Z«»Ü¢ä®:,tUsÿͪZsŠ ž™Îøš°Ðã‘°ß­´;þ‡?šh ¨nóûUÝ…ÅC7Õ!_6¥ž¬ÓF~ëô7ÉúhësqJàÇ<¨Ã xÛl2eEh‹æŸùV€œ,Úïö§#Ut/spݤü*Íýéb+]+TfØ-øL“\[÷®âžÜûb« Ü×âøÔçb5 >PŠ6 œÊÆÿAƒðq¹Vò2Ø’d+D‰ó¨Ý*­¦Ìí3Þû¾4'MãßmÈËž’vE‰VÒ/¯|LŒŽá1 ìè(“$N¯‰sN<VõF&Á›W$Y‰ y£ŠêM×)kFéï_ºìü~$=q¼«™q—,BÇ›ôÊBB@¤:Ÿ¶Vøx[ Èµˆú:;6Ñžc3(NLõ•‘¸zu©vwÓ+"#.µ!Æ×-DáT¯Ö÷âC‹=ÝÞNÒ³mGLž [Gf8õdž\ùÓ§?Ó=ØÅUæâ¬ô‹Ým&2K4]W{sYPPo¿]†Ú:Z»Ý2Þ¦Y À²”…ÌÈ` ð3ቺ%«×µóýÀªðšÔzç©!ÓïíºlK ˆ»dgÐ`>Ë»±dtvš‘üˆ—íÖ SÓúÁ (n6L×òŒ†) Š6&¿KQeiM:x±„š ö“-¥BÅU–ÕOyf³ ú›>´×àNX,t‡&‡4k´|l>°­Y•ÙE{e__±Nø×6,Øí`ãq ŒEe4¹õŠ…ˆâîföÙ«÷laíNÐqœd¿wøøaçöS·<''wÅ1i3Ët“oêÜ~/r›:ìÄUÒ`貑B{µ)%JD“£ž*¹Ô,7eÜ»ÛÁÁè$‡بÝz*%’jhÿ‰†ÉÞ÷Àw$ª•š»è¿âBu*³uèÁ§¯drb>6¼ÉslMœ2­ú®=¯NØJdbZèjªŠ•ÜÂÁIlS]¾ºÆØ×À)NuDå¦_*k«Ì»F–pnAÎFmRå×W9‚HxÛÜ7W€e[ömòýë¥Sà¶U‚tÁq†÷g°ä€ßR§íÖ³(ÄT¾ÍÔêÄÇgÖÿ Šþšâcô{=Ww&’ŠÈñß›ŽÿüÝêT8!I"ò`b»P(Ž„¿ ¹àOPÓ$ÍWL 1bB±@ú#™žž(*òÏ&g8Fãc‘™fCaNÅš]{·½ƒÒh{^¶ežb4ŽƒáLXcìFÕ)H÷´$Z¦³ œ5Üy?ÉI=V¿Bb‹V~œL”¸¬8ÛEÚD :E‰ÎDfr='®×xYÍìpVM;~m!@ãòä!”ð@”·ÉѽÞêÛ?ß9@ûbèãnfÝÜ#ÉÄ6[Vë6ðöjÀ`´*Gpæ®^ë&vŸÎ[NmÂÒÎÁM!Ø´K³øóf8z¸Âô×%ö=©½èqTlň‹¶üü=2Öój²\1Y@ë/Ÿwäa©I«9ß®¬z˜½èˬ'°Ã€Èä»áØ ø_¯éäm›žíXr-}€¸1äþ‡[YE —Î1rõ^(Ôª·|:Ø›š 1;Ýsév#DžÙW—NO×Õ’¡5 ÔYï͆޾àaUõødwæ œct—EàùŒ$dØÈCyœj±í—Gxµ×Âm=¾Ò¬?¤vÜ [¾"/¡õ…¾OÈ‚$};¬fʤ%JIîܺçÊz«Ñ&œøsˆUÁî]ÊÇsv†à‹oXÀYn6eÝ/uËÞ|I´nC;êP‡^‘ZH^¯ðÇiQµP‹ÅÿõÄ÷€gÐ>EâÏ¥å5 Q€v™g¥ÖNLxøˆV¨©Â>n™2LÒòP|<ò° ([2™­Ç Ë¥ó +ã®Ó™Ã´‡Û &žFÆí ?SËßg³Àl×M“2óñÜ÷(Y/G8ê뺕£ôw&8Ú˜.8S.…Š ‘rò l^ç ÕÜQ†}&Ñóv¹¦ O¶ MY·‘ÿ4@‹»é6Pˆ9pü£A¬NçLg‚¥ á€jC-#òyiGtâ¡V𢘤Rôâöq[gÈZäüI£1­–“ã·¡2+&ë ·"WðÜXoœ~_ ;¾–v‡ŽQL¼gÜÏÞ BÚ æ‘/2tðm€í†Fêˆ ;cÝë¿lr7Ï_⼄;¤‰@µ*'HÔ3Í~ŽݘÒNJ1Œ,÷ð}g3¶5¶ôÎmn-ŒEù"vÅÔS7;Ü¡åª<@YÁ‡#ºƒqMô´Ù¥ÐûÛ ·¿0³æ÷èçç…f?ºšUjÙXı¦"ÓÑãŒ)ÝrçòwWŠi3½ji¨I ¨Ýõ’cjú]™¨‹´v´e¤à‡ðö¸åøLÉÒU‹cåßU‰Ê‰•_ Ö}¬Ýd± $þ¬›ù +8ÕF=[5òó,Ò¹täüŸ äW 0ºøµÝ!+Ó—U±x¦Am­,fQê(/EëENå.²ÚıáÇ‘cE¼ ëè{Ѹ±ÏYÔ f¦Ü‹ò¿ßc¤‘Fx=ŒyÉü þ~cà›ƒlùÍb£°f»™fI³Ä×5ÈÁVT9œ0¹¿a^£)w§û…¥®ë¡ìýÈ^tßñ¹TL!S·”1Ûµ=®O¢sy0@Uö®UÎvé˜;óìXø;ØeZÆóëøàV4Ñ`‡ÐdpünË¢0ÇeYRÖ~`Hòqþ~¾>ÜDOppƒ­±\Èó=ðìשKªª§¢‘ˆ±Í}‡JÀꊎðMõÞa›(ÿ³z¢&Vþ¼à®4&½.™ÅçîU~Ó`7N3uL¥ Îqn J#Ù„|ïR³êÀFf\RXE#6o ¥ØC/cë/ìmD!ÂÎýÈŽ‚í#Ò7IIçÚ”02¶ß·Œð#’¢©øZÓ™ØEŠ¢wîÎ ñšJˆKÑÉ£Dv3bÇ9Ë–q6÷0b~_ª[7ô²Š5Ž´ÑÎHÒHhÁY×~´”}÷„Dü* À/¦·Àìc\BìLdz|LÜYgËÈMÚ‹ÛXS%×.Î¥¥¤g4—C¾ÙJ!_?Œ “á¶T(|¯Øed ¡D &“îžšË_︛Ïj`wæ Ò÷ND–g·-í­‘~Q%‹¢üÀáE.Îâ«T'K\ ’´÷šäk<»«ß;¶Ç™š€qè¶Ru‡VÁž7ò§=ÂïJ&Ç1ERµ_¶,E€uêÜF=Ò}Œ 1× WW nÁB¡L}¹ñþ²TM0¤±@‘;O®ÄøTVúgçj¿¸Ì/-~¸Up_„MA±B+‹L7v{–|x^Ärher™¹/äÉ<®tªc4óhÇGxíž³…l=ï…èï&¬y³µÂ«S`Ó¶C¦ùŒN>þZtYPƲk•$¼æÜZ*gº¾[­“_]ÙïyÛý xV ɦÝdsaÜTÃAÄÓ_þäØ²íÆ¼ Zè¢ Úø¥¨$ôÖ\‹ïDú¿")…<§¼ÎÏlLbžØ ÇuFÉ»Á…=¿ü–™ßºÝç’ìxÙÑÖ±\8{5RÚïâ/ý¹#vQLi…7°Ì¯êb ‹($НëjsÖª@˾¼™pŽIœ|žíu{6¹Å-ß_Žj ¸J«%eŒxLú\ë§ÍÂÄ¢ëúê´[Sð"£ÞMó¬´ÊÕp-2{¹ºÈ1‹ þî-¶ùÕðöj>þdPų:ÄÝl½5ÞpÆÀ æÛŒ|lËÞb`V†}ÚŽ»ûÌâ{R 7Âͨ+Ö;½œàÃÜ‘«zBó.0è•wb þÚœF³ÑAÛ°âñ€Õ gV«lØ›ŽÍ?È\ÒQ(ɯSr¦òîø‘$pcœr\—kéÐ’xOà„\é]ûý äö!fÙ¦|NBf‚AÆäæEˆ­JÜ6×ÉçK>†˜ØU&­É2,ÑsvÜÞ÷ÁÌ*¶­gtÈwJó†Ý\œÝ¼‡5Å :q¡“ù‡¡ñˆÛkWJÈC‰ßQýÉùa ¸ª>Ã0Z¢sŒþaÂne§¶ê ?M¶ÎÏØ¡`–Ãââ¡Éy§I‹<¾’$ PŽ€Zs+Šü³\q/n+ÝÎ[FO9_aT´hMÒöñÒ…ªÈK-Ô¼\ÎÔì"ZBYC¬*Eµ¸2úÇßk¸Ñùº’áÁS“4®eÎëºs5Ô&—~ì'"¯1$ÿAG¶LãÀ»TÎD(X‡}¨O- ÕĬH8‹õʨ.é áÃå‚»¬½¢ZEòÅI+NÅ'SnÎ!Ê ( hš@åÂx %BÔ;hŒvj”ð2­·ùE.@OôX÷ØŠšÑn´§Í)ŽÂ«—$/«Üøõ2S:0…ÏÌ··vúݺâ®a^šàþkЋ endstream endobj 257 0 obj << /Length1 1144 /Length2 11430 /Length3 0 /Length 12204 /Filter /FlateDecode >> stream xÚuveTœKÚ-Ü݇àîîÁ݃6N74Ipw îîAƒ»kp‚»ÛÍ9sgæ~3ß]ï·jï§ݵVÑRªi²HX‚Ͳ`+ +» @ÅÖÑÜÍEÓ ¤Ä¢´vüyÌiiµl]€ÿEÿ!¤ @3W[0HÚÌõ¯eãP6ƒ8Ùì‚ìü‚<Öì\ÿ4Cj[G°7@ è „8Ø‚þPÒ` 7G ÈUÓÍÉÉÁh©t»A,€.‚«?™ýwT€ØÉ bkmã `ÐÖÐedbbþ7Â! 0÷ú'ºØZƒtî@°Ó_‘þ¸‚€?I[þe«fe&ciëúW¹WW'A66'+3àŒÕÅŠtecü“¨ ÈR ìø—ä¿z&m Zü)Ê‹í?ûf{€|þ ¶²Yþ]’¥››6ÈÖÙ ¨ ýÿ@ÈÿƬ®vNvvNÐô´°aû+¤–—ðo’ã/Ø dùÙÇ ì°2sp~¶µþù!û¸˜¹®7àgŸÿ—øŸ;d€¥­…+Àhýg ÿöþZýc¯læ ±õ²³²³sØÿúþµ2þ3PK0ÈÁëßæ*fŽ@›œ®®‚¤*ÓÖþ/+IIð—,|ÜN~ž?JùãQ€‡ë?=ª™ÙþߌØÿ}Xdü#ñ?ûgòî@ˆËþ,#àzR»ÚZ ÿ‰;û}üùqü¯âùüÿ*¡ÿŒ!ëæàðwý ÿ(ð§r€à¯ÚÌ ÿenæhëàõ¿øOC]à?tþÿñ£àjæ`k!²vøW›l]dm=–j¶®6ÿÆ?pmåß7¨v±ýëÎX8x8þƒÓ²±µ°]\þ¨ïo ²ü2 °¥-È éúGfËÑnÈŸöü= ?gÿ¹·²ý“ è ´@^š[Ù} j¿¯• ñ`ÙçêåÕ¾}s£àFŽv€Þf…éQ!´/#áλáOÎ’V±­6„U†…‰#‘‰æó°ì`EÀÆ Æ†‘'>f­VD=Gd˜¼`ï%Ž"LÉ9òú)FYq«O+*5†­Æó%»7Øÿí¬úŽ„¼¢  Iõ÷<£þcÀ©ª¼ÃuÁw³CÒìv¡)(~4N=Ð0@i<¾Ã©êÀ6›ï“Dãñ ‘CvývnN¢_Æ'Ø9öƒóѦCQ¼º‹¹("—~ÿŠmåucèý,ê;ÂÄx²5TtB %G¡% D’ô¹ü¾Ž)†!TþE é‘yUĺwYv.5¡›‚ÜÆÖÊ}ó(çÈBÇ"ØêÊÚ8*h·½¹ï!]gÞ‘`mÚxdÏ]ª§Sqs{ªÎˆJÔ\“à.n<ü¤ iÒ]Æ+ÛÊm' Q(|Ö`ŠcëÛY—•€Hq˜M¶?¡yöñò#<³ZÅmŸÏñös¯X©°}!ïM^nA4ßP©d¾Ü%ÉB¡IîÕâ`>šíƱ¯ùpÖÁOïÿí6¸tkHJãÖ[Jwzb)6zÐ( ¢³d¢š#]G”!kgÖÀHw §×µ .„]É•—;˜Ûм ×\ûî«U2·f ðË ƒEͧW*¬I$äÞ­íñåu¨ÐM¢ ëC ô#9y9 V—ާxãŽ]ËeúáÚ»ÔúcÖ„JÛå†7”N¾|êªEE.†Þ—˜D ß ½Þç“pë’Ô”´æ«™×Àan¥:º$˜ÇåhJiãGE0Hð`m%dçÉ«o©[‡õònðð8M°S?shiÙdÍýž²ôûUeµ–§Ý ÎÆN"ˆ¶ÓBùÖvÂd=‹[µQæu°|W,»-.œBjë$a~uu[Š:µÃXy÷¾š&¶Ùéljk;¶KWG0\ˆ¦C¤'ÝyÞ>:iXÒ©¤_‡ò±a—Ú$fyBOËû¨jIUÜžÔ1ùB½,!0jz¶†Mˆ;ÆøÝO]åÍãkV¬Gez“1¨ê_ãY¥‰3êÎ#¿Õ3ÕP¥"æõ/¡ï‘ K_žæ¡bP¼†RZZÏÌ—U&®È¡²¬.Ý [áœ^^¦óK¨çGýê¸Úï©¶ïàô—z«D]~Ä}§:Å7)1&û4ü-$ j8N¼÷Cs5ÖQhKÞnl-ë¡5AªœcaU¸ŠRÝ4¤dë a6=ŠþgäÐùÓÈ»ìÉóÚ•rnZÒˆ¤ŠéwmÕœ'ÅEÞ;«Ôåd=dKf±[Ÿép HŠA˜"F=:ŠÍðÖ›‹Y$d HOÖOÔ"³®Â­eÙú‘,Õ^`ÿvÞb’&vHH1KP’UÓÆn8\œêHÓZ…C´†mÞ{…±¸žž¤õ+Ÿ–æ@.UƒÇ4|™½~½KÂ-*ÇYº±•û‹Jný‚õGë-3 +•“\ÜœïS°‡eY¼¿‘¡„DH2À2ô©¶O9‹{`÷ïZ¡#×JFÖç̻ěV©—«ýh6çúÚ¬ñ¨Ä¿UAÉ{;j ÷£œ*èœiŠbÝ0ág¤Â=Jñ!3º5IûÄÌc9›‚\J…”æ7YÕO+L’*Ù„·(2þ¥„ u­Ð-I?²éE‰æ;x‘‡)¦«þ07² #ŒÚþ/¥Õ]'©ê+ÃbzCuh$¨=™š©Vv²¶Ë>ÿ±¶¿;7LÑR±‚;÷›{&a/Á†‘÷É1u¨{§9Ã$‘>2O 5Õ馸/¹„§CTW‡÷Rw–¥«d‘Õ³{Óh¡íÝŽ!…hA&åì¤ÌÛ~I·zü.n¸°™ÜsR·3nè¦:¾ìĪ1ZüÑæ[Oû(•¦d61ÐË]óœU¶<ÑL¦vßÚ æëXË" Ú’X;ýPØEc²vßu˜ñÝ/¯UC¶koç%PýØnØ<ÚBÕÐýd Y¼yk]²Œ ‹ŸO&•Œ%I93ÒDɯxÓ0³~78ä0¤Ü”ß—"g^?kjPçdµ« ŒE–¾$P>J=º>”~&SÖpáâS̶^„5 Þð»Qhq¨š‰¡j#œupîm$€Ö2jÇ5äköX„½‘e&Ƹ;‘å c“·+”¤#¥U@›éc„F;ê(îw¨ îÉ#74¡Q^J^wåD¡räðÂ'¦}¢-òŒ)‚Ó)kªNWJ#N`µjÝ'ÃÃ^á60ŒžÝ0ä=ZÀ'*£ÑuÂêѹÖÓ)ß<£†ß¸›Ú;Ÿ¿¸÷…ÜÔ~Leª¥]¶f‰;QôÿÄ?Ø Þ|Íâ/ƒQWb"æLÆÃ κ x FÓîlÔAdN›y'Ë÷úJÉä’ot±i,Eëš‚Üà óÈæ."bl[Ri”c_gj¹m¡¸m–eBÆ”Q$‰€Ë Æ^§zyU>¼³‹© Ç7g Xxpv’ˆ9‰Ø¼ªOËÍàpÕj–DB3S“`Fÿ«¹¡*ù¤B6­í0'îÂRÕàœé ™Ç±%9l1]–Ï7ˆLÁŠòUΡÛ‰‰¸Cá|°Éwžô!¾ô etÚ³ OšJ´ù'¶ÍˆêFKë>¨Áµ“ZÂDÝ4µkœÆr^Ê‚¡Ó‚JVyg ÉBƒßiÛÉ Ïè÷» U´ºÚä˜K4Nå”/ëv‘Kž±J¦êYÆ ¶þ,%pª %k+ñ죞R5ñ R3[9Îã¤[¬´‚WÇ¿nl„WÙí]"’Ÿ ÓÙŽ]…ÐHQP;ÝÃîâ <¤éh–ÿhmE2ž°ïþÌzŒ×¾¦\€å-x#èi‘¡Ùµ‚ñ ÉÙF% Š{”ÿDuQòÝœÚ>J•;áÖô<Õ¥"nÊ}Qor‚¨á´o–Ù|‘3”ï§IûÀ=£l¼¥tgžðÈ dR¿Œ„@P‰FiøÎ%ôaw¥Æ·úçŽ:„ûY,i•2†%«Õu£ú­LZnu‹.œ­þ븇kÖBËáÑÃ꒻ܓBVŠ}Š: ÆÐ}ÅÀxÕîY@yÞñ™Õs˜S×ú²%ë„ Z›ÿÀðÛ¥&Ç’x¶!ÛæJ|…C›:Ä+<²P^É9¾çuU ´¨LAMüz7þlJq(Ö3(‰N*]»„ øµ¾*¿s+¤9~øºª‚VÒq\x'òÍIeô6ov˜ª¥"ß®Ã>Çå°Å©¸pSâÔ'Ï®é…%S,“¦#?±‹‹âÒ(-Gº‚†9#¢‘ WÌ@‘Á=õ·q„Èqìùäp•OÎ:YÐï7÷Â-ÝÒ*ËøÈõq£•D§û¹ÓÉ"ëp ¶­Jf˜Î`rõŠDœ¢µ·èrç/ttÕ—ƒ7(ÉY|hÙø!"‚²ÕÐÉ7ž< ¶¿4W·kæ“-•¤ÑEié"µÏFâhþ¤ ÅÈO³ã¼4OîRߌ?ïrÔ&}ÉIØmmaÄU|Bdd/J)q.áÌIÆË¯GXLÛ–× H a¸Ò¯‚çlŸ< GW7ÛsŸ‹@¡G)êÛÛ xUù I½´Í xÈ/&ØÓ~”It”`ÖìtA4¶~³™ÿ)XÄpÇwi:õ¶ßåG§á¼jf_ƒàì{ëÁOùÀà ßÓwÆìU¢Èè«]ü4p]—ëíHR‚LÈD£ KÄÍm“EæÊa‰_̳˜IˆÜÏ=+­×WoÅŠ±d?îÑ6;RÒð1PíS\CÓú˜ž¯œ…ÎÆÿjL¬ß3¥%nŽÎFýÙBj%láä9Hè%{³ñôÒér¿£èÎÎÔ¸ÃÆpYÅä×Û±7Ü—QW?ãðQ:}3Æ+z±]Q »Iõ‘Q²>ËÂ~\®Ht8r,ŒR’º(1b;ùÍ.Y=p]@úqÂ=*¶Û­×»Ô‡&’zA›Íg™ŸxÉúó'&Õïá¨7)߸‰öã~¤læPŒ6÷gŒÀØ&D »m³´ÙaíÕ2éK¼;y‘vä½4>ÎdAÀàjÁ Éý%TÙH?JcyÃ}¿âȨEZvŽ^¿°4\7SAáö5Ï:·«|ÚAPÜY'¨_æò]¼¢êGêàÐ ±éoŒn¼ ãøðCú­åeeþcíëft¹ïŸ‰¶–ÒôÐ ž™~¸šÜ^µ¼Ã7Õ„=â|w xìöóŒM!ä> å©,h¿@eÛ³7^J ÔÿÍî’"zœ"Þ`ˆ#‰h$OvË‹56…Fxå/ÑÃvVÖ;E‰1+¿¶¼ÜŠæ§ùÙêlÝš×­¥+Ù6vryumy#£$‚÷ö”ïm\zÇÀns ÏyR–øª¿g”¯«æ„)û¥ýÒÀúSÀ"¶Žžo°+t'þ4…ëüs^· Î×fžëv†µ;ïÛˆôñ0ãø¿ö®XïnƒÔ‡¥ß4¬0¾ª¨Îõ¿|'8~e <)ÛÜpø ½ŠmÊÁŠ\æ;/_Y’PI*b±â r™ÔigÑáww+T>¹Ðµ•F!â0sjø Ý@G7“ç8®šYØv ÔØ‘¨áÔbñºÂ²#\šŸsC@ùc_ã3 ²»ïež‘º8!¤Ã."¹ÁJ9C2-*ÓÙà‹v3’1XUc8ßdwü˘]ظ¾n[ZeOaËûÓº y1C\¸Ãl=übÇ¢Y_‹·TµN5XHa9%:M>#‰ ÑÚ»úîßò}Öc*ÛËóêß¿^E~¿1›\=Rá¡H‚lY?p,]”‹ëªOóÖu;ZN ü&KU²¯¯p?‡n’ ‹[ÂÌ™¡ÄKé”^tS_}6"÷Í9ÈÀU>UŽöb©z(Î.G[>Ù@P¼6†%ßä[b§™…¸`¦¼ ãñHõjî»ËŽ[@®+GÐï—~÷Ïcˆ—½8:ã— ÐPPø»ßyåºË'8BÅßï³Îãò$Gbé9%÷bÄêtÄÏ ŒsžJù61® ¸ÐÚ¿dinY®˜`…¯¿û¼d …¬êÛ=ÇpîC¹ ÒÄà¤\°š ¤>L‘à{Ö8%ÉEY,Jƒœ·YUh½îJIý¡JjyºJªÅ2=6x?/ÔVÀ¢®Š«œÈ΃tYúBy—2 ¥o’Zb]m£ø‰½ö]-ò9‘Ëq©¹lž}ƒðG]z{£e潪ÖÔM®(Ä Ä5$p…蟦±ØÓw],ái½#ˆuõ5BS4¢àè¶9«uŸÄü!1è?…®=+á…ðiÈ`a‰û¸Œ‚`xijÇ•—£îžÆ÷r%´S#¹Q=´^ª8"Ô.>ºô ®î‡À'+íAÄ¿õÖçÁeˆµ±EÆ@ãh'uâH4wy8߳ܘ—¹meêxýüº"èØÜ$ñ†¯ù,”ì¹b ¯"B§cÌM€Š ÿvœŠ$Ûå–†úå´]÷ºù—v7üÄéP.@$êˆ ËtwLQ™¯ˆŽJá­Û‚eoWëHR®š–¡û–c©Ê¡žº—%Š¥o²¨v×™‹Ã4`SðÍ^ùUñ#„@¥…†C²µ€@ΰ_X¼‘æ4="Ÿù>íÊe³?B”´þnÌ2z•Û10æî‘ï²@­Ûz.h¬Íû×î®Ã+C?ó÷8]‹ÉcÎF-[c¡ÜYCµlÊ­@Ì.PÕdŒó£-ÒåÉ1& !!Çqª…5‚}Vô]è-‰Ì·. šÔÓ6Ú‘¨Ÿ™YUÉm¿F?¶6uêò”§Zì‰É…(3iÀW³;0ÝÝAÈø° hٌ٠õã,`o)£èÓ‰6. «é!MßÍJRÆâŠý•e“M $æ™àk{(^,.6yE-*bø¥Ób]é8Iïõôù7ù®2·À !"ÔF“QðÊs¢/˜W¦…+)zÈþžc”F$SÛšóRš6#4Põ‰ÝÐKNužH£œÓ.u734L\voOuÇ=X:ôÒ–VÆxÒHôIÎ)¡ëZ7b‰LÞ(¯dcmß’6tâd¥ðy5‹ŽG F1wGwÍ#¦†÷2tž›æœäáŒØFüñçZoiï‡`FÉoįÃ[å æZ¸]>t'1êËdŽ ^:²Ðø=—ÂDq:Ú>E÷ß|2’´û ‰èbmµ¯¯ˆ6UBìbö•¦ü€/qx2 ûcÓV—B´ðÉ‚™7Ëv'\#U3ži{V63®ë„)«ÜoLÙ)[Ê©ª_'#?õ³ïº‹Z’žss/l–û_*_˜ÑónvODÿôaÛtÅv ÷t~”Z@¹ž²{ÄBÏ Úëd,N¤†sõ÷ÝÊç}l𺫞Ù+}ÝÒ÷²‚ˆi^ìØG}{A>Éòt]ÞnL‰ÚèÁÕ^ü5¹-PŒC,ÁäQ¹^—­O˜9ójú¼ò+—1#,¦?ì÷iÐûH]Þ¤¹g̰TÝ7„uÜ-E53´äá÷êÏߘFîdª¢…„ 9>‡»ÅèzÈH!(œ/}s5=@L$’?½lÝC¨û)¿ë=Ps†£ûü–a•^ xô£c—Ng\Ï0‹Û`4%A´ œAü1ZíIMP:¨çnå$ ~‹çdÁÒ¨€:>†}ŽóæiK ¼ZcÕzdS°L‡Î½çÉ‘«ŒûÇ—XI€>NPÿ|·êà†üáÈ™Cƒwt´J¬p½ŠÔF™g X©–|¿ \“³¨Ž³Ee¶¥Äu*AÑÊÊwÆÉÅ(¯Ìã{,}–d¤“©³§ûBêðÀ½¢$±ûOëûÖ-ýjº#{MÁZ÷ t”Û›7 s5ÏB´åÐ%ª¢'B[™l}®æˆÌ$áÅ-“"!“Lò,Âb·,=Ùckd@¡Ì}bg=;¨Èô73¬ß'J•Lj:‰„=݃)'ÄSeÙ3E €ï°£3·ùáó÷Ù…oF+5ß—ð…o(×6h­=Òàº÷äÍí„J“Æ)¨â`b·Ó,f~8æËŠ÷òî°[6—Q÷ü•W\üó¢Ý;ö߃3Ìí‚R¦†`Ä5Þ‹mœ˜²×J¿mQÍAf­‹Äü_šVd©óR+5¸é?ë6Б‚Fˇ’£ù­éBÒ—1亢ÛS"¥,bÆy”/vÅNËpœ;bWÞCqn]°•A½'c ÉËRk®"וÇzXϪbºÄ ¡ãvÊ%ƒãCþ½iÖì[ ….ÏÞ×ñÛ¢ð/ŽïO‡"#“gÅ×°ó|§öÜ®ä¸+vËÛ)25w‘½Ž†æR0-ÖeÓçä)g;¯œé<¢z:Jåe_õêÊøn*sÛOã«ê—á&þ¼f/òåÉw™9 ¿xnYñ¢„y ~þ ø³©žÏ`ܺÖôã×äç˜ÆR&¦J+˜^÷[%ó!Úz£ŒÚXG{*'­¸‰Ÿ –…æõ*O@Q-9Ëçû1°JØ›=¾}«ï~‚¹¹TÔ´TÀ/YaŠWgd›"ÜË5³˜þD]»Œ’–e>9d7Œ~ž8ÆNî×â¶¹–¸”Ž—• àC/Ä0k–G·Ûe¡"*„·ýø õN'ÏÈbä&îY%Ž4zHà]wÙn§5*¯ILFÇÿ‹é&Â3ôJ§Øë·Û-nú4o¬ºŠI^‚ZFÀœë׊*WV ü¦vã_É_dD‹m/|L‹S}•Y|ç_3è›?üšàHžÔ7v0)×"5èg$×ò•SˆûPî7¶ô“†Éimrû)j4ÿQc\[mè’Aé$MjЧý5zq^V6 O¥1@vÆ4tG-e#wöD­2-ÕG®’ÐÚ~¾õÐÝEO»åžÌbæ*™Ëôwa\>•ýï<#Õ7¹P"™µô²zb8Az§a—^©×¥–Ç=Ì…éQ€pî´b|ýø¦e¤T½0߬ԣÎöÛñÆ#ÍLAYíSÏÖOë¶¼²ðüûÉf/.‚g Tü×$5[° fëÓë…Ñ?àl<„¾ bãó^"Z$$0öj78É›Z4ŒEPóÔNm«®ðf˜mZ®¡í@¾›Hzƒ,ª©5âÒMwåÙýÛc[wÇ©ø¬ëqâ[òyó¡ÊìúWbè?í÷|âõRዺltZ—Sà¡pœ±Ãƒ»˜@rÉ!!V̇]ÁB&ÇìÛÛ? Åk#Q3ãÌHØêÎéÚmRkÂ)¬_mÄÇ]@ß ^í[r| PõÜÊašd˜µIØMÉ´úîAaŒÀ…ÙíöOõÑ&Íg#Œ\Ìø  ¨"‡4ÄÏÇx_·€ŸêS0IÒuàûuç›·3+Ò†Ü÷ÉVq èT¾ qábàGxì)ÃLÓCù¢5l¿Õæõª×–2–ߌä÷ Ÿ€)ÕYúG¦>v‚8qi¬âqŸEL )·ñwž™­ÄüÇåµê R/ õÜ& s£ÙÃXk5 “šðìóC ΖÏ=úÛó#Ö'ã†ËGðåW«:Ú¥[|ÆdR?Ŭ" ¡Üv“ªèCÍÑ›$ãß.Ú×fútSȯ“È…¤1aÄûT°OtgÓ¶%´:žªOuß9ö”8†GÑDÙËij’F¢²&1÷&Tõå§ì Á»4Zäƒ$Ûju¯Ïf¸ÝãÌK£(2m÷ýïü‡^ޱ ˜¬ü·OimœŒ^Ð?Ú#¢Ì‘WÝ\M™ë ÙéãíKÊé.LÅ–¯sHÑíbÄ3\Ǹ0¿ƒ×£UFh V˜µD¸Þ\½‹ûñÜøò“Äö‚0Ñ~líÏ©}ó”!é@µƒÍŸ.¹,DX¡¥‘m^!x®Ç «]“¤ØWŠÓrNÕ ŸÝ ¦, ÛÎ…‡Ͻ&¥ ìó)Å9ñî"Üì)õÛ§k†Uâà‡˜]«}+jS1SuG$y#JâïXK*ÆSÄi–x$+}j?„ö¬Ý}PHðÜ»éà˜§v3c¡&“å‹ÙÆÝ›þl\húF*Ƚ´ª,í>!=€ÏE>…>3+w F•]]€Vi#µ‰fYè1B,… ¦”âà€qÐ"‹C )&=*(©Ã¦sq%ùjôÛ >u¹+ÛÍ?T¤å¨Ÿ—˜Ó8/Oí†åû4qKrþ­ƒ8¤×_…9ˆ|š"œŸNZfaL· ‰A¶°¯é¥X“?ˆ§¡Lxåù~Èy—jR»>â'S„Ã"t·;,hʼíÜ΃«}4pÅœ{‘–c‘È3`ó.ŸX«Ø¼Ýh© >"ô´Ú”–R|.F3Éjbï:£{«”TìË è¢R”6Œ§Œ§c¯„Ž÷S*V¡Ãûk# µiY’^I¼¯í»ˆáÔŸB²@›¡Ú啟2—åÂo|™WÂeQ·i­Ÿl·îÈ>„+ãò8î€Íä­[5z~ˆÔúà’ ÜÇÜ’3¬À<»ÝŸ‘J¶!×%:ÇÐ ‹¡ ÑrÒE o·vÚ›0ŽÁÊÒÄáú iˆ‹À†¶Lìæªw´ñäQ  &¼ (kU–•»ÖL´ß¨ïÊÙ} jwúŠ»NüáÌPý»£µõ>ô5~âf›ÎoŠIùõ{Åæj#m"Ç$Z‘·@õÑ ïÉY…3¡ìöò¯QüHõ>¤µ bü ¯<¡úþa†u«¸Bø1q3‰º§×O ‚¹°tC ÐÖ°'~¥Ï¾kÅ+ƒâG×î$4õp¡÷¾ %D÷¸™àqËŽ>g…qt³¶X3·IJ_HÌ]‡élŒ¨Mâ¼<î_fÔ±¿1iõŸ<¯q®ès‚߳ŨnèP–N¿úbÞ{šø“)A»=u(¡ϯåãIs…ÛÚÙF˜ÅLys ñlŒšÈídâb*¥6Û~)õ’ããDîÑ Ö]" Y¡%HÉAžß¨w4IÁÀ¡=Ù÷.îT\ ö¬'ùéå>ÚjjD|G “ä;7˜`\V©7iªj*@ÕE )Ö¢×Á©ÊÝùüÆñ÷tg«‘r †,'e1]Ûrà|üÓc½C‡Ç žÕ3æjú­6xàƒ¾³J{{ÔÊ,JX|ÃÆöó`$UWQŽüû‘&Lâ|à¶´Ä ìoÛòòåŽ7U J.z/Â-·vEôRçýW™lKaæû€H}»ÿ<¹U’ûbFFßð‡^z æ$#DW« Ÿè82«ý䕨ÅF¼&ø±\Í\ñBaÆÄŠ~1 }*šØ‹ŠüQròÂu ô|×Drn2KêM{û–óVHüQÖ¿œŽ¼HöÑ"4⥹ê S‹2Å„åd.†J=R®éÈHðSênۦ϶s¾)ŠwåÝ^9bÓÚÔ #éò×hz Xvs ^é[dÆ>Oe)’rS÷Ú¯¹âNb‚Nžîopa<4îÔõ£Œj/ÉÆÖÆ 3(’I1l«£¸üÒ# Këxí;çKv{Kî×Õ{͌އE`¦‘¼kîXpdæOŠ…Õ 7±Ä2‚°ÎtõYÞTWÁø©Ôf"…~åÙ¿ýý8GëÜ¢ïMø—¹²ÅIJ sO¢GÁZbiö&Xû¦a9FTDÛx‘ êa©i’T‘ö4U‚ùƒŒi›X1dæ:)°FÆ•ŸÞI£Æ¯Åq+ôg;{'>ä³|‹_9Ò¤cK] Ú§=Ô™ÔÊ6i¯­”÷FΔ:Uз”$E‚ÀF1_ž8êàQŒU·‹‡®õJûÒG{„y­êäªÑ»™ª”ÑݵV‹÷áA*Bš¹Ò°¿™Ïh_bžS’í>†œõÛÊíŽ,· G&p*d{ýˆ»­~_‘&zP@(‰¼#ô&‹29‘1_‰7sL”êÓ—âWæb¥üW%,FçîÙ÷#hó·UT $”üöÜO×Iˆ‰«mPZÔHÏE^ÅÒÜ{Â`þ}D_9d ±'}¯óuI¨‰BnHa¶ÿú@TÔƒ~ã{ÝÓ®1¿ž Ùò\ËŽ”S;t)%¼»‹?‘Á`¿!ŸÎ9"ªd`—02÷ꩾâÄïG<&ËËôòJFø›#%q€3Ê{¤J©æJEÌüÂ/ùùé[^MŒ{k‡à$áDî‚Äl€å45Êu«s"ɲ)/ìÈ~€ÅZžàAß„ð«`þ‡ê¹ôŸm°ž:{^ ßàŠ;ÝÕ%¥Ò q#¦&ì h¶=/hÞ¸†±ƹô„röJk¼¹ú÷²8[.}ìîðŸ\úèÖÉA»ÎÙ×?€âò¾9ÿ˜-‚ÅPr=®â3¦~ŸpC=ž 1¢~*QÄÅZôñvC1Q 4&žìUC)—€Å´²ß|]‘òê°3þŒ8B\]Ej 4 ·Â> >¢HB…?éO$;eܹmwÙ0­aÙœñÃ3Í77‰âÏŒU²u¨³-³L€5 û×o¹=_® wˆÂÞuÀ±XâÅB‰ï¸ïn ¾ÅyÙ§Uœ0ì0–ÒŽ¤dû0IF)1 ‹D¢¼ÆÉR5;qe(D€.?xFè§IÐ9{‰9×ÙÑi,Bï…ÖìO¤µ qË>ò0ÏòazòÏþĤ˜xwÜ|­xTÄ©€E}¥‡Üà N­ãµØúîGD•SLO_ëÔqFw"ì›Ë˜´ùÞéè#"á .Lq©‘¿‘[{Ç …ºßK–>íhÒxš&æÊ&Mñ;ûÝR8˜”AAÅ}çµ8ˆ×ëÊNBs”n±èêf–}ÐÓ§ÍB£ü"’=ÚÞã·˜˜¨qÇ”^Ôìße¾€fBp_Î{³nd {én”¶ $¸â¾Ò?±ݶZa¸ÏÃÑàmYSñêŽFüÝ“K¯IÅêÙ£>\1½†5®ž]O"o(P˜i„šÒ­@TH¹J†Eˆ¿s-œ7¤}LK¯èuëc¢˜ŽéT½¯§‹ŽUú¬c’R]aJgé6gUX¥‘g œ0_7Ø®jÓ/uµÑ 1óÿ&ª÷ÀzK‹¹[Û.îWº¿ö# ç!|±žÉCv^®B{õòݵ´nqѾ¹²ëq*TÝm€(z{“T®Ù†!£ šÎïpĉ‹|Ó™~¡–&ƒ ¶·ZsP1²fÊü¾6^õÜÈõ(XN¼àgkWY®vÄÿ,¢¿ endstream endobj 259 0 obj << /Length1 1177 /Length2 4904 /Length3 0 /Length 5670 /Filter /FlateDecode >> stream xÚmsy<ÔÝû¾-²e_²²3C¶±¯‰ì$»13Æ cÆš,‰Y²d ’5{d'*D¶ˆÈ¾o‘¯ž>Ïçù}ž_¯÷ïs®ë¾ïs_÷¹Ž Ÿ±PuBê`1x D ¢<œÞf0Ì  )Ò…pCÎ •  9 Fþ1äœÔÄ!ax£ßǘ»0@ €€¡`yèUðù,ýw ãPØ€1Ä¡Q˜sJ 'x 1x3‚§'…D˜"½±é 8Ÿwøç“šXOÊű0µ—ø(((œüÿfZHo”  t¾ðA¢±ž¿N;/q ‰AâÎGüŠ5v†i#Pø_²"®x¼'òt†!Ï1IogI =oVƒÐÄzü*àMõk~Z(~.Ìô§ºc°¾˜À?RÎ( â/y‚'ȃò" ¯ký'á¢úsAâ2`)°X€ô ýà® _G›û{"ÿ"!¿`è‰õ8ÃÐÞÈ ”3òüGè óAð82(ðÿ%þwG(8à„t9¿’ªŸÃHçß{‡òØ€%Á`üëûïÊîürX ÚÿŸpC˜R7ÖÓ2¸%þ'ýÿÔÐÀž—Bää@)ù«ä\§‚Œô¿«ÃPÿé üOòuŒ3 ð»ùó©ý-À‰ó>w%@ä/‹þ·’!‚#"ÿÆ,>÷ÊùòG#ýÿG;ýû ý× D~‹œ«÷ÜüÒ>"¿f€‚ÿY0Úÿyÿ´Dþ¶þÊý›þ]]ã‚F€©ß Ê[å‡D£ðp×ß.ù[`=E¤1Öõë1Ÿ§È@þÅ™»¢à÷¹ÿ¢Ä¿ÕÆÀ±Æ`†?7# ‡ø/ð‹†p¸ó9ýuSç¹ïQç-"‘~H8Õø(®îVÞtX¡Îé \îµØ?#ð^¥ŠE•$i7dw/漚»'Ÿœ¥eüÖU¥Ì†Ô€”8"žS;VÎ×]A£Y’‚‘é#‰nǪäK%C(ÍæE‘¡-pGB {ê“ïšþݺ|%ûV‚*šïÍ"°,Á܇֋K^Fäœ<%OK)–FEXÃÖtÑwL äý¯µÀna‘©Ôz-µï„õ¬©kW˜J›GF;5he‚‡#®Qá«68­Šå ¯ßµH»6뫽&n•(ˆÎ^ÜõSÿüÒ+6LCΞ”À=Es‰}0T憇â8ü"gúH^gó{‘^ù1 :Æqũܗ?z: 8;G€pƒâÚ—¹‰Ãú~©·ŸšÇ°Î;.v1á=Ì•6ˆáqk¬&'éËU2~í\Êxk$e _·iLÐ ¦Óî"^Ïr„[˜ n®éö€S?ß0 ”m$¿jb§Ò£ îîQü´æÜÔ<éDÚËHM#TÒL)dzx$Á›r©F膪FeŠ*¨—pê’g¿Õ L»PU£pÍI­«¬Øûaä¹ßk%WS—ó„ð®¦Á UÕýX9, tXË(`›òzéʤ‚n..œ[¡ðûcœÐƒð¸Eb åûXQjö‡œµ´”;´[E;3ºƒ%/¤Î Ël­86ÍÁ%¾³õ˜Ô˜_ùˆœIü,× ÷§MæÂ‹gÆŠTÌβK¨ø-’@Úz_íyåQ¬ÓªS_ˆY©ÝìYP(Qw¦®iËR¬L™̉ &¨t¬ÕÖ¥9v¨A¼ë ›óQ7þ­2ƒ_wáËwá‡I°ö7ÌôÖ÷´RÎêþ¬ðÎÿ¤ ×Q½ðÄuå^jÀ>ÓlP}¨ˆdÙÇXze#–E.ÆÊ²êÉ<ÊxÔ^-ÖªN"q‘޾-lˆSZvóTn½Î`¨â…7ù#eÕ*aìM ze=KrW/g±.$„{ëñ[){2qž¿Y€­‰¨L›^…¤ñsƒøO—qL¿ùÆÚsf‡G›}¸¥~–ܧÖŸ¥›ºˆßm”r(ŠÊ#ð‰%Ð wžŒ§Aà› ÑÚœV_ º:D*N7ô] Úë䪕›%¥›{+ñé'˜±þÕosèȵvx:Þ¤d{ÜÇn5*WÕo^¤1ñ Ô"NWÝçû:¼üÅi_Œ÷‘‰}…Di{{àáE«f¨…âZoÏ4Ì>°ºB#ÑáKø¬±ô ê’NC¥>âzœ€äNj>ŸŽïØìœíQŒEÛÄ=~Ñ‘uiž¦'ÜÖ™QIqýÛÆD^f#ö89:áÒø³ZW‹9†o–ÝÃÇmª@¸í)ÏqûžWÉ25];8·Ž¬Ÿœ—ÙQçUWÑ ›þ–³àÞLûŒ}õàˆÑ²aZ¯–*K‚„õº†fºï»ûÅÉ=¨›¡>m0}^MÑ!“7/0­m ÌP»>ÖWíTf¬G» È®g Ƴ½çJ/„ítïg ¥¬y\Hf~FLÅ@ý2þ¹ãlb{yƒ„nt\ Ððuµâ(”øÂzØE÷pÞ)2\V&ó ìuApfcs϶yJ­bIÌÁ¨ßx ¥ §5)½`X¢Ùf;€xfÙ¥ùÙGï2ŒÖ úä"FTto–-Û.¾—|i¼´¨ƒDƒYÇÕKÆ3Æý‹W ï´†5UîzÄ`€X‘V…1þN (ÓE]'Óɪ#°Œ@¼ˆ˜èðU©+ËT‹Ë\X’{».íšO#¹íöqmóEóì­UšWekš3>ÇŒ¥¥,Fz/G™÷=j›ÝnžÍ± VÊ Iæ“zIkuµ;kuì…WIŠiM`”{È2Òtõ nî<‚ÙkVÅì#§æífªú†lÞ[«d7»eƒÍXÁì[½|¤»bâ…øãWyϸ”º%üy÷†¾2d·Ôå k=Ñ­Ù×ãbõ›7d›ÖÕ§çEeužWssõ6Ù™BV¾O~¾í¿ãþp;ªßbÒ—¡DW‡”à!ã袠lÈŒ»µ'´û:B·Ðàî{Éj#ÛMÛ¾¹cÞ³? ÉB­ëN½ÙèdüݬÖç³ÛÅŠ‰Sz†÷jµ@FòZVx"¾©uò¾$¹¢A!…´T®ýa{fÿºr7K›ˆnÈmîSì—ò [‡ Õóºz×ï|ì¾Ð·ùq¸Œ1–ñNõP!¸pgÀùËßž® EŒë³Œ]’ûãn¶F“"u¬¬½K¸Æàî Š ‰ øÚ þ.Gæœ×šö™rSÍG´â:ôëèqh#ò ~DïÓ@hÕ™NaSS¾ö#óKhù6+û¥²ú¡F—82s;oÝ'—öøG#˜7B¢rýžZ ÞW™‰ö+‚Iک‚*Ò^·,·Î‰à\[¸èzÕý½ÑŒaz¾Uz™¼H7ˆu!ÙÏòÕáìÍŸáLuzÎÕFNÊ42ýqìJ7/¦:gtLJ”¤îúôßžü:a7“ÄՌ↰¿¨3qªúp_káÒ-œJµÐƒ {Í` [ZcsXà›gQÆwŽÞù|ß Œ¹i©½²R»ÁVÉ–ÙPƒ>²5„°ÉG/Å@Ó¥ [Qý ÞCƒ‚ik7l©Ûvýd •‚{–Ò¶àÎ(’¼Ž‰ ‰©#Yš>×øppæÇ;}RF :ZÎ~Oÿ9Zr¼‹¶‹ÇáÞîs¶R+]'Üa€¡®­Ôr‚J.Vt¿ºO1³dË8‹‹DÉ‚¿ò^O(m u몃&‡é©µyÆMqxOBh¡xåbP{䃽€èFS¢ZM0[¸Ô[6^gõÅW(]Úa¸#'{¸Ì Q êm´œ0ÄFxLú¬µÆ <æüÈwâk£áìѦ.Ü[ÐÀ¯­Ñý(ʨ%ñéÍíãgUw˜X²ÑcÜ ;ê¡Î÷¤LvóÁ iu²Òl'jF¶ÜŸ¨A–ÁÔl]¼=š.Ž“HÚ@«‚÷û¾ÝÔb­’÷èó¡ ëúŽy»†_¦žóæiIX“Ô‹¹ké©[Ê[ËB£˜º•Ax£iu7鬩$¶~³Îñ`H>Ý©ý!Èp±¢õظ²íöîØrÞ‡ÍÙÑ#zÀ¥<,ân„ÙWj_Ä@Hš†R$ÐåÞ°C}Ø3Z`Üdø§Îû7)'ÒQOR¦¢”Æ^ ÝøÞ­ÞZ–à'»I5¥ï9 $=Õ)sm+£8ÚG ñQ~}’1Ñ9°™¬Y‘ ò­>PY?b– RÊ*„y(ÇÊ,UÖ Õ'ºeÇ0OB*›q$J%c‹¹ÔsMÞúÆÂ¼k€ôpùÇk¹wS¿O=É}²KW#¤-å™yÒ)B©ˆÈWž[ œÍ<%Rîs ‚{è&­Ý¶sËlÓçó2 Fr±j˜·[~¹Q^}å L`Ûe†þƒ¦ÉÇõ¾I¡ïØ;Ìé` íb û' Õo?Üîÿú’S¼n¿èu©VßB±|‚üéÔa§íŠ˜úåWUgâ÷ùZ×φDWI»¾¶>ºÈˆ#÷]zþêf–õ0Œq6|wp9D“›¥(Nh àµÌšrÃJ‚ï_Ú"îÔ“É©øòM4*ê[BlÚîIÙ§BdVÄÑÖÑÃs¬“½`lm„s‰Ï&ÕD@ù‰ÙìcŠšˆ÷I´²F‡¤¥Ñ“qܺ㗫æø|m‹¯?ëƒ%^Kç#ÄŽ¼-}N HxHö˜¡³Ö û[íUšÅŽuW‚¤;HW=§€¶„‰ ¨Oœ…DšÙÆK:n…-Ü¥ÿž-ëƒÕâ8 ÌG‹ŸõIw¼ )µ¬ žI&Pi¸û6ÿ¤`…<ïÔC½¥¢ÌÇ÷62±-^¥‰ÕülZî„Ï­}üéêqÿ®jTJäa z?rù°OÝ °Âdùå’:…Z }qÕ<÷& E M†ø!'ÐÍȦ4 Qˆ~i¯ mà ±x%ëcÒ³Ûƒ€OðwÑòÒ™\H%[g·ëØEA,Oö´©|"Š–—ŽŒË€*õJµx‰„âàFª½¾ÐIw§“‘´RBú¨âTdžÆsõ1ƤÎZŠ ÚäÙ·±ÉûޱÚCLóiŒ?&9^û¶÷ž±eã+/{X¾•Jü á¹çƒspŽ…}žRÉâíø¬hÐÈt.›…›½÷‹ü÷ÝÍt<eÌäÞ‡ë‘àÊ€|*bêÀç7N¼®¤Úq¹Ì\f6!éu· ÊK\þ~ë ¿Ÿ¹ÔôŽ [c¨w¼™è§ÂHÙµ×d³ ¾Î•5£]Ýe»{n¬²l˜éšœ¹EMuyÒ‡èÌöéÒóœ9“(¶À^d3‰r§ñ´û,ð¹\sãÑÃ>[V3 Æ™(¶žu­6bèh2rã‹”3ù¤[XÄâX“ÿ÷åb&ùZ aàlðòÏôàúԥ|ÇÕ˜ÞæàÝ> stream xÚ­¸ct¥íÖ&;Y±í¤bÛ6VlÛ¶]1+®$Û¶mUÌ OÞ½»ûë±OŸ?}¾ÏÏ=yÍyÍ{®±rbEz!S{c ¸½ =3@ÞÒÖØÕYÙÞVÞž[–^hj ø’³Ã‘“‹8\,ííD\€<  )@h`a0sssÑDì<,Í-\TjÊÔ´´tÿ%ùÇ`ìù?5_žÎ–ævН7 ½ƒ-ÐÎå+Äÿµ£ p±Ì,m€E-)y •„¼@ht2²(ºÛXšd-M€vÎ@j€™½Àæß€‰½©å?¥93|Årœ€&–_n@ Ã?*:€ÐÉÖÒÙùë`é 0w2²sùê‹=ÀÒÎÄÆÕô_r3ûrp²ÿ²°ýÒ}S´wvq6q²tp|eUÿ7N #—r;[~©öf_–¦ö&®ÿ”ô/ÝW˜/­‹‘¥3ÀèáòO.c ÀÔÒÙÁÆÈó+÷W0'ËÁpu¶´3ÿ/t' ¹‘“© ÐÙù+ÌWìºó_uþ·êl<ÿåmÿ/«ÿ…ÁÒÅhcÆÇÌò•ÓÄå+·¹¥ã?³"egf`fú·ÜÔÕáêÜ€NÿjÕ?3CýÂÈÔÞÎÆ` 4ƒc”·wùJ  ú¿c™á¿äÿŠÿ[þo¡÷ÿ¹ÿÉÑÿv‰ÿÿÞçÿ -îjc#odû5ÿÞ1€¯%cdøÚ3YÀ?‹ÆÕöÿåbdkiãùÿåôŸÖÀ£¶·1ýO”‹ÑWK„ìÌ¿hab`ú·ÐÒYÜÒhªhébb03²ùê׿äjv¦@'K;à¯ÿj)€ž™‰é?tª–&ÖvÿÀþoÐÎô?áQõ/ðŒ²ÊbbJb´ÿ‡åú/Ců!pQõtøÂö?J‘³7ý_‡Â Û{¼é™9¸ô¬lÌ_wï 7“ïÿ!å¿1ÿ×YÎÈÅÉÒ óU7ó¿ªÿÏôþ#Œ˜‰½é?c£âbdgú5iÿKðÚÄÕÉé‹à]þ¯ªÿçù_3zMàV—ìMxC¬2²3]ê°ò†&Duúz˜Á‡BÊT‹ jì»ý3"v¸+ ßjC§x>Z=ÏÞ¤iGz0m(»Ó€—ø¾¤Ô½…(›휴‡AŒúeˆ™ç1ÞW ²ÛÚLꇻJÊú¥oPSí¬N0WOÔ¤n…èdH~&é¿â1:¾5‚ ÖS$Ÿ<=RŒ vß@öàÑæÆÃ’óaù¥ž§¸x:Ý7˜|@¾¸q:€¨º:hK¯Š0$š6µeÉ™UoÒøg3öÓVk2ì.ÖÖ<ÞÙÊ¥ªéÅÛ>–Š*¹ÖžÌÕK8B4 ,€4$dW@¾¨%ô<Å6¹@„=ÂÍp2±3ÖAJ³VÕµPEš÷ Ež‚ÐA”Ëx°%Œzñ±°§NÖû±Ë¿ñgF;ï{OAy„ø/ ´²¼V®G¡ÖJ4~‡¹!Škl_vÅž¤ôÏÈå‘Íç^ó¢ºÞ1ÎÏG…¼çML¢ÕŒ«Þ1æÁ)y$)zÛÊ㡯™9Y³‚õ„Ú²\[BÏ<ÜJÓ¼7¯¢ßüäÃû\Æaÿ Š¿P2+K{Aô!Ž,¬d 2x`zã#øi¨ä0NÃm¾ÎÐá‚AMÖw”i†šánêÅêßÄÌݵ¤(NÏÈ¿HÏ8%\`èÅøEãò*Ǧ`¹„šš¼®äèʗ݉?¨å‚Wæ83·Õ¨àCõçÈš¡ƒW°Å‡Ã_ü¾±Ê"À­3¦;'Rõ‚_svJ 3‘VpNYÐÛR’UÿV3!ÃfæsVOÒ³y .˜7ÁjþQÜT—7–¡R]ÊÀPwÎQ-õêå±7x«Ú%á‡óY»lŸ]÷ÿê‚ÝÉëö#ˆÞ‡vÜ}b“ONBí¶§|ÀøN%£hñ À¯ìÓ›h šPƒ³îF‡ôª1Û¬Òû†¥¦›ÍKzܧ±6 ûW6“j¼ùâ5C(ã†oî´îÜù}X3mȉ¹+ý¡F Ô†iå¬îIVx|4uNOk¸d‚-ÝÂ*kŒ§Î¹eþ]Ä"Üž¬ *0;°é öv›9AZ’?CuXßu^~/%¿î÷awëcn›ú&ÒÞM}×SOgÿL·p‘ž*;´‡¯àï^ ¸ö€ìŠ>E}/7^ÅW<¨oj¯õ˜i‘ã!57ÿM‹A×kÑКr ¸DÊuØcéÛü.§àpa2Î`‚½0{õ‰íbí,£Üð¬•t€âú±²ÌAõ懘]!lÚVS'7Ó®8C¨SP†~Û³†‰ñ6î¹Ç§ãi•ÉÆý#GBÉ1Ÿº=`^Óò¦ç¯ ù¦POmu?É¿yÛ(¡£DÌÚ Ø›8îí¦ö*ÅÏê¦äéÄf»sƒ ”à_\<ÔéYÚÆ×Wã7m½+J¬xBaoë„ÖøõnšnwÁÔB§,Ígšº>övÌ¥L®Ö@‰íïÁò h•7ºX®Ìj6ïªQ9ò¤~ŠNüò³1~nÎzïøët;%op«ü†2Çbó«w³ñعøß»0NÐ|1†÷*E™÷ Ê$Ö>ü‹›ŸÕcGª»È:pÛ=hüŽüŸï‰•);«3T>,îÏaÙ€ -g%…ìžçþ~Ã… –‹t7{ŽÞ®ÍÓWfʪSo49çGðõçç^.n+Ìs=\ܼìPt8spŽÃ•QúH×Ó ²µ©ä”©‚¢÷5¾?;D ™Þ«˜·¿e5›à± jRü\#Á—o+I‡‰ÙB#‚@n¹ûO›‹ø–^¼Ñ>>¶3Ûç­"¼DkåCÒÂs”FLl^½G«Aõð·þ&rÕ¿ŠÎ±HŸýÙ”“+ì3ûC1†Çõ›³ÍÇ“¬³O‘Ô…d0Ë·{ƿɛ­#Ý#V”í¨ŸÙÜ?êke*JÔÀôe§]î¬t”j¦Bwd¬õ[÷ŸTPºú‹‡Én栘×gSÇ %ÎŽ×lª½–nmÕVœäkZN÷?—ŒšGœ)ÍÑÉh§aø=@{ÂÅ8 "rIÀuKL£PXáðßíàpgùâU nbDù¿D7ãºèÈ´´?þ ÍßêMÍ:dò€Q¯ÏÏo½Uœ¾Î'É3O'ž|‘fŒ( ®k,'Wƒž¾8 º™ãâúþq­|Dâ´œ&bª`*ëF–F¬X ´æÜ®tÙq¦ß8ÌÙ­N3þOù€–×´MZ†ÅLa0È~:’þK`ø×Ú§1Ǥ;kؾñÿÞ§œ|+Ý •sáFžñ`3êîö»åü 7Qø Ócñ{V·ç‡Þ‡®«›¿¡º]!ñKy¹˜BPEŸ4MèÔ‡¡ŒÒYƒ®b.¬³é3%ŽA©rÆw(À Ž šŽ_تÃó=\¼]B7\ÉèIU7‰¸q¶é¢ä PÊØ ‡GJ~–sß}*ÒÃ0gÒ³8RÅÂ0CéÍvÑDP}.-¦`ÎC!¼CÈ{§¯|¦žÍ*v³ï†‘æÆI†ÕŸx>Q é~X -Àþš43¹èƒU¡@½{ÐkÔßÝœ\²SÍvc\¥Ø5¡¼L<"tŽG!ŽM{ѳÿÜɱUîƒÌ·{ŠRÍÐrˆGTŸ/Î߮ވå=„H[¹PaŒ‹aÈ]NTÏ+íï™-½µR½ší%B±½²ÔËø;?ŸACíãÉWªH1 Ø×Ê’Á672óú©‘õv­‚dÁ“VC§ JàHÁð=i¢ Û¦GL]×X"¬Ñ!$û3—ˆâFZèú(!£;ƒ-Ê…íG!Š8µŸ=µh*ŒŽgÎ3Êyýx”߇ìãÍgßõ°‹ÂvŠöÓ—6) ªµÂð{™Súî¸ÞG§QÚÊ_³¨ÍÆò.R—9,‰Lƒs+‹øï,œÌì8ÚäÝø‡Qp 4äA~Æ3ÏmÝy·¶³*(ò%ñÿ|Ý%rä®™ÂÒÛ ‹Gm3Œ·ImjwÁ=æ›»x¯€Ìž 9jm¬ R2±FzPTšQáÀ–½¨ŠÉåSCs ΄šÏi#ÜmD5Xv4‘3ÂÙ÷§ *Œo8\  %ÃãMœ¢·sQEÁˆ“«8×0oöc„M< _Ü’%O› àOþàf…åƒ2ËFÝ´þ|à~2ïŠÕ)½"+»3â¤9\€y‰™´Æ8ùEEUѺä§¾ü¶gq@ü¤ÑN îÓîµhQóÀ·uðá º[ 31(JÐ`„ÚdŸûç.vk{ SzŽêN¬GŠpOãGŠ2™°±¹M¥eAàÁÆYÝeVÂ{,9plɶäUdžj°àgqs8Ú÷°HvšK¿04žD bD%8‚Çæ] '®—¯y2ÞqÈDl J®NLqoâ Ê,ý»¾F·7í´@5—ã;Ž• ‘šÂÜKyúÂÁB³ð¸9Þ¡ï°ÜÊKŠþ”ƈ°á…ö¤!ÙÍE¶–[/=ˆcŽÕâºÁ‚zt L¥:8¬w§,¼åÛØ‡2}WsÍPb·ù2ÛrȃæúV jê²´&¼ÔꈤùDE¨S¯t ´5/_"Yùm7B [aêµôÔË4}]½ï KÌL¡p‘“×o°Qü¢0Žw‰BSâŒÙîö™ŽXÄ]2ÎÊ*í΋–í¬'æî[Ô<5n0&†˜=dÅ rfîðcŸÚ}DDH+(×5´›B¤vé×+˜«:kð«¹É øu"QCõSß~…â“‹¥ Òi,ß¶Úé±û!iÐ6fQ¢ø“ê°½N£¹VPZ °¥³HÈF¬—×5=Þ³óm$ƒ’ó4pP­ þÅêuIEn£ýÆ(šnº ÁKó_s„¸í0vÜAUö§Ï…™±?ˆòöªI=ÚÒœyB> Ài¢*iµz¨8M Ì"f@¶“‚6ÄO…s& œF\*ðÄG»x1ÀPÔ^ß÷Šum{þ³‹Ã€-­3\뱨lÕБ:#uá-ìõóhðbŒÚüÕÃ^+Dì›[ƒ@Á¿D½̹rÄþ³j8Ð¢Ì àÔª WÙ?ŸáÍóüþâ˜×âѪó¨ø&^ë.úÛ]–EÁw¥D±ág÷h4!òS²™þ":¹1ÔÈŽB°Èœ*6¡#줈ŽÅ‡1ß<› ̵9ø“v lÌß ê¼8¡Ÿ-Σkcè= Ï’vyØÇÚ¦¾­¥)æI3¢ÆžÓ‘nh÷q8^nÙ!â¨Ô Æc¦ˆäă¡êøZ¡Âæ8¡(‰”= ùü–°A15Êù>˜©\ÃC°Tä,^ï'N-|uT š×•å-|¯®ªÉ:#ÞOêÉ{¿Ÿåþ‚ýó ã³+««=å C¸¸ñ6¸~>BèªLø uºzÏÏ_µâ#ÛD „‘Ò•1Î)°31î«Ò;”VBUÄ¢zJên¢$aæÑÛùM|œ[÷Ι=å=-Æ!¶J0u¼eä*R8k,Çz]s'7d‰•zGñ©„9#ªw´Â6 1¼ U2,€¯´GRðvTuºXª$´ÿä^9«ð!ÒÜœ<Öõ@ß‚ \×û}k²sN©:„v*Ly™Iuv¶›Âf¼]™;sY2â×÷ꟓPeö7ØSK­4¤êÜÝålyÿè’_îcF¥r>•:£>©!g§A‘H02{f±ô£œ¹¼HÉIžc3I7áÏ<‡ýic€%k ›¦tÄôJøXà1Ææ–Ò¨Óä}ÞÜ3̶µ×§é­`„äDùÝ^gI­_EàÆg¸Üû¦å< ºâÎ'dVdk㕲Úí»‹6úÚÓ¦E9e Íó¾g¼ùÛMG­ù˜áMU+'ÇubÞï"9±¢ñS»L´7ß¾»| ~!Ìßhviê—Ü4ú!}à nVx¢ÀXì_tÆœóˆ ÓZŒpàù$üìCê£ÖR<¢e‹NAÄtDU\z¯ˆ†-ͼ¿ø¨/î UntcÙÖÇáTkùÄr \9Óq÷œQéµ ìaÛA¹æÒµ˜šï¤ˆ9Ö2©¥¯ÅŸŠ‡óÛdÙ%tW X…ýõ—“²*è‡þù´ú¿ç6¾õ6r* L:nzÒó3v¬ÂUü‰öW¤†É’9 i‹BË ”EùÄÄ_Ó6—Ç¿–ö¤7Bñ ¦G2–¡Õx* ²t÷¾¢©¬œ´CZ9”í7k”£Áßu@Gci!r—àìÄ´­£¢î*RèH}Šø ü— ?$è þkÚ•¡D¦àÖƒ³c‚`MèÔ\ÿ=ÍY½r¡çaÐ$ñÇÐ×…ÁjƒGb[„¢QYÞõ'¤5iA›" mˆ-}0yšªž’„_¢Ïí(!¹¡QJÖÿ÷¡ Ò•WíË»D.`róO>¼çðNˆŠ|WûwÜ(øq}ÜAè4¯ˆÖ-j‹îû$ `2ƒÆë>n¦«ûr5…È ,w@,ûîIF= ÍôÞÛ ™yì4¸®(ŽÒ%bÕ£ÃÊ¿²Ò§(ËÙwl¨PY&å%9ð ¿=§²P“¢YK¯_-sjq#¦GcsË.K¯´ ÷ÄJì#ëË-Þ{ÊÓ–eEò°ôRRŠÉº(énú˜ñº²è7D¦"ö³<Ò^½fÏ4¥dŠ¢Y“áÇ þ>×–¶S•¤jÇ!ÃYì/èÊPŸì`„î- 0ú®”jûž:8mG1Èï{XX¬ÎÒ 5Û%ÕêmB×êuþàYO¥ÉÀƒHƒŸ%$“÷^9bâsþÝNhF;®âï¼oò a7Q°ž'«ößt‰Íé…}ÂNêæ…bFE²Çržo‘ËSmlLПtM@÷?²H–“ÅR;3sx˜×HÝßt ÑÂ>,3nÞÞÚt ›³ÃAµð”=w_p±OÁ™Kq³ªïɃd²©„yøÐES ξ D<ÙzÍúº"œW½þÉó?§ é-Ð3"ÔwÉÅÅsŽ…¢¼}}2ØiF‹ŽûQ\^h·ôS.W?á×t>”Å[ËŽ7Q.ÒßðÐ5°KŠFv‹š8Åwš†˜Æ‰ÕÖö'§B2/{©Q<áÝpöâÔFïÓx1³O¼’Z&êJÜ~ëjÍSá:+¥Y VØÙåí ¶É…í–bÎ0Û°¬DVñªA;ur“Ê}ˆ³¼©`§Sàú‚ô¸·iöDí÷g_ìI¡¸o£[p¸6:ªÝo~T+éh~†åÇ¥Õ0¿Œ€Ó3KJ ø:õºˆÐé^^pñÛåÒLÖwxd¥g9Ï¥Wrµ1i·)bùâùãŸLÃïsé‘êù‹yÅÃ8M,Ä‘?bœ(á²ØoôF­•¸-Ø—D‘(Arµÿ&æ>õ­?kÒCZk*puð®Ë¥˜DÐ5¥bÛÕ1<…<󨮽9à U§–Ãa2DÆž$<…Ðws8ømÌÌ1ß÷ÒÜ3•»g¢qÖÜÞ¶ÙÎD|º2$=#Ü$=ý8žuÒ_%³ô´QùCi¹‰b:¿‰S#ØÕ<0öÙ]¹ç‰;"ñþXÅÏιkóË2¿1Âöï?ŽÑñÍz¾þÀª§ÕàÖ#¥2É Û0E ½’I;¯N±šªJ/‹GfÀÚ†%ä‰ÿ{OÝ1çôKË^ïì‰ñcí=,j–D¡½ áç‹÷ hDJ\±=¡ø”˜(·{-ÙÇÿYax‚IGóˆh¢þ÷Ñô[§Ûø“f‹¬^ JWÕàÆ>4{}‘ l³Þ& Oo%Ufžü!£ XIŸæ)‡Dqo­á¬Iu ÷ÔPDû} Ñ}G qÆŽØŽªV(¥^aøˆ,Õ8ˆ}QŒå ÜR)>íü^̹þ®P 3¥ÂáõþÆ$gÒåx×òY\é}¯L#i•ÝÁ#@a7>âFYá"šêt„¯U‘îÖþ; ¢¬FÐí šíO )ËQ¶¤@æÞÜá+eÂMÝ`¦¹ðoÚ`ւƳ(´g¹¤oоtëW†êéÂÉ P5#4$£5‰ÖøU c ¬¶Ú¡Hó/ý„îÊâ…:tâmwBrÑvï0Sè?£ ¥ÛÚ%åî.´¥Ðaè|Ù`n{,4‘a¶RŒ[>ÙL3ÉBÊÚ»”ÛtÙ}daæÎš<{OR¡8žh™È8c§ PX :5ï¸ÕMRkWø¿_™iZ—‘æÑ©üý£Ž¬kåd¸q uyG²´ þ­`‡ÿ‹-¢ÿ“Õq;ã O‡“þ°¨çðþzÕ†{=8,Á¸Y_×ïZFr,`þ•´c,ùBiÜuãÐ|:»zÖÑÖ·—³‚û%N$©¬Àb–P­Ñz1A²A}¬Had:Tšó¦#ƒCpˆ>ëš®!a½AÒVQ­4d¦‚•õîý(P²u/8÷!7À–Á©Ì¿@2þ°£âj@’„#{¼£x’À•V$"Xß<‰Ø•>Óù³Ÿ/õ énF‹œ&`É úROF55®l²x&ŠD³FÌÚåð3-aãt„b¤ª‡²Æ(.ôÒŽãìÐä×á‡ðÔØ–W¨òU~ó,Œ[ÛÝIŸÜC*íÿ]mŠ•¼¸çtž×e†?¿ëίƒM¬g˜îOÃúH q…ßY‹ØûAë'Cyp¬nÈêƒy‹åzx9 –Ûý »º îq4>´H»3m¥Þì¡ã“tl¬:lÞ`A>”˜ ~¸”Ó(xê)4+L=f#ê­R>«Î2éõÌœU©D‡"â”±\aö¯”IbÙÆp;¢ãub§œ×ëåˆáµÀÞDXû¹ä/ò,&_ÖÖUÞßcæj@j’õУ]ϧOUà»÷"ÀõíCS oÙþY2Ó´,$~ènºXÆ_å·ÒeaÇMÐ8Ñ)¶:9¸<Sû‹OL æG^è(—]êáwÜyC„´QpÈ™>Ê‹ê&ÂQ½gà M¾Ø ™§ß 9»Æ¬®ê°æ`àßVj¥™¥¡Wb—Ø<üw Ê„ ~=ߌ£(.—àB" +¡B7¬› {mÂXÔ!G‘?jŽc†iFôÀÙÊ5§j§°ï9è-}v©pžN¡ájFEŠã?Â_SÐ{ìÝ;ñå‹=[/<0Ææè báì¤~V^E*èŸX ÔŒ˜~± Ç>Æ0Å0ñ³Ž+óu°ôvðÈpû©è*m¦å°&UOš×Á]ŽjOᣦA0™$»{¦#ƒ¢oöçaF¦Z‚­!DOù_³paÈ²Í +™G†ËÁ^b<¼Ò½YÓU’Ê?ìÞý¤(MòûókKö­v³U1$û?<í2·“®u [ïdTËŠãŽÅ#ûúLè1Yµ0fïnJw§´ævv ]æ1ü*w|ˆ˜¹|³´>±v [~Ï…/ƒ¹\70åŽ:Íú´*TrC¨}Üo‚&Wæª*c2¸½žâü¹ŠŸFÝêñòmЦGX׃;“°ž]Y!CSzÌSÓ„îÏöneþS€ùÜú'¶¼1BLÛP•ƒ"ïëÝÃÅ¢ZEÎvQã»ò1bxúSFG¾!IÂMtDBâS‹©[äÍmòuë1 3<×â¾oqÑbHñA‰MÆÙ¬#^ñ9ƒ<øádUú0“WÅ]6ˆ¤…6#6rÕó¹ôØËúËzûîýíÁ›©Íå]/2öI•ûò9Füû•Ú)NÃOi¦?¶x¸lI3QíÐîí¡3SÜ#jœnà -l†$ÎÛ#{xÄÏw¦wª\{›JÄ8¹a¢’¢µÄ ©G*§kê­ÐN‡Ë‹H7‹ÿHµM,öÈÇ@˜WÊ릕C3&TÂ0 L”« QÝÛ‡ö†ºkƒhba¹ôTlžZéžu­¹Ç{s‚ä›þ¯ëN ÉÞ6~?g¿‹Òâ‘E4¢éÅ8²ÁËÖ˜IhÒ…œ|øÈãMëXX&´Å…î]1aÓáûLtãXtßÑ?¤û-9ÄÓpó!s6ÈÚÓRÏé—ý8Pz®@Ù Fá5KˆÆºÿý@SoÑ Ðƒ™†ô›l› ”Xòkqu‰®!ßM< £àш­t ‡­Æa¾ù¦¿u]?±Pͯ÷#T¿·fÑSš›"Õ•«ÂX“Jî7ý´¬Šj¢ð§djCÑßD ¬uÙr>:wOå/e´6ÉaW¿ÄÁ1;8Kwú,™2ÇIBÒÖ³è7•ÿæz0žæä$‡ÙKšªç¯’gíÕìKúmiÎN†êƒ¡ÊiþÉo¬ÚGc?\`6^5'”L݉žî^9ïLëh£B¤múr]"\Ñ]~Ñ“?AÐìi’ˆÿ~Æ„h]yËä²ø†¤×ÙÚ²/ÓÌ¡n2!¤Ñ‹CU»F¸J–Åc¢É÷€+`ž±—¥—9š’5Nµžd72‘ý¹¿WÅvÏÏ9?Ä:ZÀP¯w4œ’Õãó$G viõïů¦ó 99r™oíNõc8ô¬ vÊŒ³qfQ“·†ÕŒ u ζ…zoùð‡M×ÕÈ6ƒh„¥ÐWÃwL `˜ø`fØœ >³©-j7ŽüWEwfÐxä8ši’(Uòô(°!¡r{Œ\ÂF-1°Ñ:5£;l°I­´|ŸÔ–7ûë\cÆCP‘Gí@I!Q¸…[²^Å´kŸnÓñÙ±tiF•Ê`0¹0C@ÒýmžÏ4wÌ•³+¼haÚii¥:-&¿UEAyeÇmbÁí$)|r53Åïñù¡¸wè At+ʤjk9Tlð\t-rL”-øx0€²Ì{ÌCt(²Žfè ÚJ8¯Ëc³ï3}`^ÒªR¹2Î09­ÎÈÖtüú¦ëgOb]!óÀ»†É$ "ùz;îwÈ–™J«êÝ^ôòõƒ9 íÀYt°‚\}fñîN¶ã5¨mrZ—m"ùýöuÂãhaW"2«à6HU0˜´SðQ8làš£ZáŸÍä¥LæùuQ)ŽÃ¸ïT}©úˆ!q–Îûá¯ëy­V"3Òƒž> )ü˜Lº­—>Bê5úSÕ8¢ëV¬`‘ME= p´x‰í^hI<¢Ý?u?]Ef·ÜOîðÀ@1çRa¦ ×„oÑa©ê_þæìrŒÊ™Ed¹oª¢bõ1J,™YsH ÝtØ[Ò ?»ü¬êëáC”Aå¾›ÍÔZn%ݎȖПž.Ci‹k2A<„bpVJ ºÝ?²~ï®q¬>&,Úï!Y˜ 6ª3ƒêÐo¢ › »óͱG9WuìŸõù&YUg(ò–FpÃÜÜvÀçÖ¨h\¼¾¼ýƒa,ðù1õ‘5“¾6©½Š]Ýú¼Rˆš®“ÚW—iY¨ƒHgJþ“ÕœßnÔßäNÎà®ã’lZðLL°hBÍ„•ã,„d4ò$oÇKNb2š´èÛm·­qQ­Z_Æ›­Ø]î·‹CÜVb޹™&.Ü‘†åÎ#!÷ÙÈôM¢o"ÙòWÁÖŽw»ä¯¶ Ý¡¨É¬˜ß }°‰ÁÀnXŽÁ¬þ+ôYì±µë&@ÉÌo–“…ÏŠõŸBÐ׿A˜"˜¶1jµ¬«ü¬Ñ˦"¯ÄR£Ù÷™h`lJ·Š09y;˜FÜ8ÁÁ=+\쵦m3u™ÒòïjhbŽØ'µºÄyQFÚJXá'>w::yûƒõ¡3¡Î?»“Ù#Qäð¤¸ê°ôÞ\Ú’åeVˆ´£Ö@‡À‡¥ÄZñ ñ&4ÈãµÛYl0½…uÎßÞ¡÷g³­ý%À«Ö®dX&+¦¤B˜Ô6ÕXŒÃ%ÉÇ•©Ï/È•K¥Ì‚'Iõ©èþp€^:ës ç€eÔ2¡ÂÂ0 ß|÷ÁØ5ƒ;vîÇyýûÆ`ãôü»’“Â3FHPg”j¼ÌÔZn0#±–£/ ÝX±¨Ô’Àˆëíœ}žAQÆúLp1½÷NPà”¶ÍGóüY?Pø#;?„ý5PeXêª(”!`"› £•Úit&‡™(Á’‹Ùf­Th¢6Y)çã¥cU$ÚYZ”¾cñ‚6_wÎåvP5s}rŠI;|Šš4ƒY¹bêï]hÆ5ÇcóHÝxAx•ÙžÄîzÙ#ÁGé ;À}Ë÷ ­ ,”2û”»;[¶3þ7KÍïçX)ª˜Csiï†ÍUvŒñ‘öfùÆÙÓ**ðU¸OÝ¥(£6o$ù¦jšâÏOrUcZÙ6©íÿ4ÄO3"lµi ¶–&02] ‰´N˜?Õ²þæI†ª ŒeA£áqš*S¾3T:îÙy®;kBü•ƒIe]2CŸÃ[ôû Ih×ÓLVÓµÈâÑi$Û5Cá$Ò©»®fH3¥Ëŵñ6uB£Ö)xÝUƵ2daMRا‚0l)æ(‹Î³Ý3ˆ¯šæF•‹ôš=‹,ÓcÍš^dìKJqíOózoß ÈÿMj`RüÓ(¯âFq:wõ²:«dW zi=ÖK$HgjUqiÌW>ú;0æNüá-FÚ:±SÕÄýGæ•z!YäÏÏYžLñÑ ‹¬èöèrj—ˆñrh$Þ”‰nø]/Dº«^µn †¦ÛÄðÄ!ÕÃauB:Y{¬’ æLûßîÑîB³%™çÃu­—¦‚Š­Úg¯†¨1ô¹ì+&l=zlAÁKÍñÙ)±  ñy™ëgóèýü,òèÚ7¾ ꂽVSÇ—È#¿ƒ º·€†¥U±Î€…¼ûI©ùy® v²ûãÞÚ¡^³ Cá¶ß‡O‰?*˜úËàPšç»ŽŠ´,Ùš 泤˜ˆ¿‡6%–±Ãʼn2’ÆÚ:¡Ûq„C¡PF3£²!,ò i ¬â¯7ããœ(©ôÆÒ_E¯Wˆ5>³O´J®±û»åσxÐŒÈsCyGU]®Þ`Q’cÞJe.7æ**\\’Âî› ÉHi›ZS\aŸ5’SP3ŒV ÍÃÇt‰÷]þµ0=/ˆ[ßHu"jFZ¼™è–>Œˆ6¹áÀã3· Ù†çÐâÒ© úaRpâ^ó ?ÇÀ¡]‘Á´Ëâ`õ€"K65sh}Ÿy¬šqØZD¡­][ýAøD®?AO|Þœ]ŠV]åŒKr3®Ù/‡C·ˆô}jøÌà ®Ä]Os>‚Çbú¥´à­±ÜÈë¤>$*h,Ï· Ó¦P {ß`±<Õö\×n:ê÷i#‡ÃÄkï¦*Á•/E'Þ¯œˆ+–¡Tb`ø‚夗@Äe}=* ’õéÆ>±¢‰Mðû¹‘@¡qÊú›ê‚y>Lð:Êix{.S4›y­äŠ–±‘8‚ìS˜À6ÍUb@-rïž×€.yKŽX8÷okuC,æ\‹Å™ $ Ó’íò»LÄjÓL¶8•Ìɳš%6h")x/-ü–|úË÷˜[¾e `벺ʆH’q?pñ€¡ÛŽi:À£yÚeðÞü7²RÒ¾ˆ¨æËãORܱ<¬¶"µú:÷÷6¶þ7?…(Ý5Õ.ã)*þ„LôÛIÏx,ÿJ‰@§%g3ìúÚ(Ò6Å[Íôµ¹õpyM>Ú\Q¿ùª¿bvº](ÖýÛêMË=Às¸‚\\·ŒÂ›Ýœû“ð*ËåiϬ÷…:¤y3oÙÜ@_D5ÝQA%øÜãÀ{¦ q—v_†ê\lcá“BÆsúV®³Xº2ÂÖÔbyÕ슚ƒÃÌ‘¬##²ì¤m‰c­ ⬃*û[Ï’øÔóšr‹¼j­ZZܬZ!X¬$_jQyÙý=N¡¥à¥µG™sÝdžd›ýaOù a ÝРDÒõ¡º½“hùŸ+ }‹u ä!Dj_¹7ÒÍœ»ky†ÝýÈp_d™]­ŒN7(÷H_§ëíËÐË©¸Õ·‡ìMÓW[ê!ø§uͦ 7áñ¼jФOéÇ/U h[Ícµ”¨c@÷Ur&Ìðb´’ìýÒ?¥ŸÝ^d?'C6öÿ ±%¥ÑZ\h¹´ TtpE>µ5–z‹°ÞÓ”Lµ@Šßµ­Ø*k2"Ì>hXñgÌ&ò‹N•¬#öÅ5™›~ª›(xp3¤1€8Gùk7 š¶W1b6Ð ÊÇ’í«ŸÊyb e¾²íÇr⊫ÇJ!4õå2>M÷’½›)|&•0sHE½]H{Ðe£fgÉÒv±“µ&i³õÃP?üh é ¶:Àéó’,#æ,½µ>£×¦¨µÙRÉQ»û+‚xÜVp°Ö3 U2<ÅI^¢°ß‹:ÚAù èi¤·Ñ§šÏ¡ðÔŒ´©L~­¸›&wÛƒ`Ô4}6\ÆÅplkÕG˜îÁT3k¥x½ÐÅ¢ `¬zŒð=Dþ¥tAE4“­¹_1á:b9¹À+pªyŒ9vÕ‹ýˆ=ÑQÕ¥Óú­$ï#Ó®n‘¥6”(Ø…±ûq²7£Ú+¶SQ7ÛàgÍZäÊ?håÚÕøÀÈ8Ò;z2þaupÝ'E¸ð{? ‹mîX¤|SŸúH+æ×S¶ Bq„"j` ±”¸.ùy~‡o³i.}̉£YQÑÓæð™{Œ@Fݦ‰H½ÈšS4» n8RþZoj×JßÝ´X À•"ƒ£ƒG&”Í/ƒ'é.ü ³àûC8ãé‰H`¼©»Ð£1¢¡³ó ¯´VíŠÔS¨¥èL¿qïIÞ¦Õêœû¦C+MDþ~…ñi Él°Þüª}ˆGë(ep÷é`%Ë*<8 ¿óSo¨”6<Ä ¤÷gçD$dX$š…>§m+HùÈLáíÛ†ØËAëqv"Ö´?Rm!â¼*˜ˆK:‡É<®©4l»P1»Ã¡ðsÎἺ«MÍÔn噃s ÿ ÈR±mWNâ´~8°Q>æ…´Ô±úñyÌì6Œ†Á¥¿¼5%‰ƒB+£Öe¯¤dÃ¥+M­Euæó“j,°GrѧÅ+Jmª6,ô|üëvÄhþœ”xô©êy7$‹cï! Þ'ik­ÜòÕª‰åJr“ë Ä«`Å¢6ê!è6)c5uÏe§å&.{KùED—¯‰#EVh^¯‚f~O²,!rqœGÏ5§GUèZÒÌ$œàÙ¥F“ö’CÞHzäõ‘½˜ã›cö|§pw+ãwÜgÄjˆ2ÛǪ¬¹µ{‰ñ:fœ™4| :—n{9û»¿q.O¯¯Õ"×R‘{îÿÉòÁ W~ûÖn@•ÊÖˆ4Hm¿fû#b¸±6æñ<›L·É^f®¸ò!Ët²L´í|Æ”qŸMOÒ”Hm€o,ß‘¬¾³·„@Tön¿7eÙvCàÍ)\QÉ…´E®ä={@Ú»>Çn”0X“‘%ïz.“ Wl+iA.Œª ?áÛÌ| ÖïŸË UMˆæÒ¥#ÆY’ïò军\xd˜›ù$Úþ°oäåq”f9›·”;„¯ÜÔ¸žêŠ;ÖàPm—…È©èp,øµ;ÞÂw€!Ò––[Hvó»° ËM/r!<)Ùï{‚dŒ’I5°“Úo¬ÄXÍß-ëÒ\dª—_ðì¡ØM¶Àő師$çË+¸×{jŒAëI99<ÿ¬²BbYqöNÚùž™;r~+d#Ë;-’ý˜Ì”œ˜øi¼Ù \wA@s°”aô'MîˆíjPìµNžSÜF®A¶% ?ÅæíS·|AjôÒZ½.Kƒ†.Jßž=IG|ÞÅApùj< "ÑKî·©7üâbY“Öim„ÁÇb²®ŽmqÎé&]õQgBµ&I`üÜ#É™ÛÿqðM~×h+eáÑ7sìˆ@!ù¸»O²;§K#2–ᦨYB]·´ë”FÙʲå]Ǿ÷m¡'¡§@Ãlܸ”Ü_O«m-vD¡ñm`FþgÖ¬]fö·Ï'_¶£fã¾ú.«$aæéí™`#,r£½ól´¬GÊÒ·ð “H. 2ÃMPIÓYC¨;—¹[ÀqüOa´YZ)!TQàöÞ/ÂìÔIŠÉ)FJ• ,þòTk»@';†º)ñ4^ö†e¯¿ &ˆù@èäùµ¤êæŸï\w^þšt©È+ñÎÆ«yn[÷¥#+б¨pǸ^8ž‡”­†;²›o Ù’ª‰­žÎ1ä݃K²d¼Då± .k¿­¡Qªš4Úa3‚cP€ìóe„ªòݶµ¶+:¿ë@®`ñ±k½ µÈªY•–âþÄú–XÉ«‘­þç÷}ì’ ä.†6º¯V;”8sžÍâ Ÿû)Û„¨¬Ñ fù6 ýYH´fʉ¯¤v"×”%ÐX±#É{,;ÅO}_£ ÃSÿÅrM”Èüú<´yú@Ûºfå‹1H6æïº+ö÷ÐaGŠï>¦Õ¿‘æ²@aæYR¸•¦kû‚:¿§Þ¾“!ó#Òmæ·²î¡%=•‹jدþï›.å¥-a·{`$lb›êe§wÆ}~·g–µïÂÓÍDZð6T‰ß@Æ…—Ǧ®£á¾¡¾7F°¥Nùa?Àáá9ФêÈáñ¯OF?¥ž¨x‹{Sc2ä óXéÅî§eIó( \â"—‹1DãŽý…RõR—Ï»¹GïlQ_ݹXìµfØG…Lit‹+ÛtÕ°WöxOZ)nLQ×!WeµOž´u¸:™ÜÒÀDºûàS¼=ý™[x\³K0·v’ʲ%t VÎl®+“ääC²€ ŸCA¼%©W®Ïä7h¢l§œªÑh7 á,LŒ¸"ü;ä¦õµz™-^öÑô‚ÑÍw`¹§Qm}l›/‡7Ñ6å=&AÏú×ÅÜŒÑ^Lc ™3üQXø9µ6pŒò0tÍ\äR¨é@ª3ü±Éëd·_ ~ÇçùÑ6‘nÚ‰£n‚ÆyÜÄ §õ¾}sã;wäìý\ÖO°>ȆD5•‡aMŒ2°ˆ»³õäxVC‰¿Ë£¯Ÿ˜°ú ­Ÿ}ïÕA‡ôAsˆ®Ø9œèw”éLåLàeqæ~I½Ï1Týæ¶ÃU+ª&éðèÏ4á#Ó ¶LjÌÆ dÚb}d`˜‘Rγ¨ºÉuºÎœÁåþÚ;W?ØA6MCxd„Ŭ“×ò›ÇyY³ †6†nŒé#Bœå½±šì ¼<à× ïËþXš“K úþ3˜Å^!¸ ôT>©”™4ó?Òótè w CŽQ±…¢uAK^j®TG‚|•œç–Å*jŽ®k/jÌ#Wn9=¬74‹bIîÜ,)½îÍ)xÏ3£Ù푆J0ûùâA‡oj`ùHÍ[ ÿ‰aïSðãëº2?Üa:þ¡[ÿã –‡;×ÖSgS›èn‹D×Áû؇< Öb›$Ái´þžóÁ(/Ù2Çà®–6’z.ØôzÌi·…ÇÀ™È›Ç—Kšž›ž|NÕu O(xÊųDÅR’Å::t¤åV–ôÞÇ«" r×siЗ6œ²µ\wKü­@,øÄbõïXÑ‘©¥ÝäÌRç‰N½¡ŠŸŸÕ±ªU2 ˆñ³æÓð‡ˆ=~£ÐX«»_%¾¸1çZMc¤–ø¥xêf鬈C-Ù$—ŸÞÊL{“ý„zcÀ¨JP{×Ûê·æSH§ÿ]™&« endstream endobj 263 0 obj << /Length1 1642 /Length2 6875 /Length3 0 /Length 7710 /Filter /FlateDecode >> stream xÚ­Tg8œí¶&ú º(Á袗#¢÷Þ‰>Æ`ƒ™Dt%щNôD‰.:‰Þ{oÑED”p$ßÙ{Ÿë;çü9gÿxßë}Ö½Ö½Özîõ.vf}>Y[¨’ Í'Ä/(Ô‚9Û¸£ô\œµ\@|šP[˜* Þb¢vvy$Œ†¹ Àh¨Ðj T€B€ÂÂ@!`Ê»¸z!aöh —¡žñÞY~»m¼þÜF¢`ö ÇíÇ3(ÜÅÕŠ@ßRüŸõ¡P Ú ´ƒÁ¡@ym§ªZÊ@.e-C 2EÞ6¡ãn‡A€0‚>Ú¹ ð¿@ˆ Âö»5ÿ-—, ¢\¡ØmÔuý ñ]¡Hg uû „¡€öH0}{h »Ûþ.àÖnçò§ W¤Ë­‡ó-vK¦ã‚B£ H˜+x›UGAé¯:Ñ`ôïÜ(Ø- t±»õ´u¸ÿnévKs‹¢Á0 ˆ†z¢ç²ma(W8Øë6÷-™+ö§ w aÿ¯ xH¨=i ‡¢P·4·Ü¿oç_}ÿK÷`WW¸×Ÿh—?^ÿ¬†FAávü!áÛœômn{ ð{^Tv.@!Á¿ì¶î®ÿÀžA‘.ˆë÷Ì<¸-lë‚€{m¡v-ômJ ×ÿMeþŸÈÿ‰ÿ-ÿ[äýÿ‰ûwþËOüÿýŸÿN­ä‡koà¯=¼]4`ðv×5€¿—»3ð÷¾Aþ[$Ø÷úßbÿîm ý«h9¸íß±¿øeö·êð ‰ò‹üe†¡”`žP[â´Ão/îÝa EÂaè­Àîö6HPðo˜ â„ø­„è_aû÷n5ûS¾€–º¼±Ïÿ²iÿ8ëÜNÚÀË üÏLÆš.¶ÿ<ü¦’“sñzó ß–Â'"ü‰Ab}þ‡¬x„þuÖ£‘0O ™ ¿  ðöýç_'‹¿Ñ(" .¶¿GH FØÞNÝ? ¿aˆ;y+öŸEpÛø?Îæ õ„B3“.ÇÁŽI©ÉèŠ{™Ýý fퟄ°ºC\ ª r³ýß»´ú%….ƒJ¬¯ÊCø«%®ë½&v\­«qoô~¢†s¶&BÞÝ÷a}ЖM¶ÀÑøˆg#PÀ²€8y×øµ÷á¸Æ¶©˜ ÑÆJ¿®žeþ.Ã`£ÿðì?ë³lJ¶®w}!o?DQ5‘VcWäììrÄmŸýàììëéîj=Æi[§çɈ"` ¾ç›°Ãö²F~¯‚\ã\<{„<;•õ|ÙžÏy¶Cã‹dÚu¤•3LξqÕeÍ8Êm¡3 õVŠJæŸK >h+kaÞ<™Ñ¢ÃeBל‰\U.#™eŸ¥CT‰Žˆ’æÄ1=zÝ»>}0 M¾ç8':Ü]¹Õm.žù¨}Û«mÜÜMbìÂ0M¾k£M’žØ‰ÎÓ¸öçXáxGß á·¹ûlaUƒÕ’•¯®C[2•ö¼šÞœ7†c×ö“oÛbMz5•´…êR[´¡}*²ù1ÀÎ8a¾ÖÔÍ¡µ€$:1xÆY~ô~§kp>Ȇs½ãc Úùž1߇@8“Ò÷oÉ!Ýù²i§OdòòiŽ{Þ:/—6èHë¼LßÎd©1¾%Q#š¨ ‘?ÊFê{¹hí×¶ vZ»V¼³s« ¥<“÷‘ýŒWá2O&Í¡{Ìà-O§3WûM‰¨[0rÁ¯áx³k§’¸+Ðs=¸z¶šüùî3¼*™Å:Þ(5gÓÈgzÔæ £ï3¡µ¼r>\S¶Û2õ/xZ¹EÝû\ê)íwpeç›îŽúm¸-­à«Õd'ÚeïàžjÿÂq¾À¬N "—T<ÃÞ§ºÂv£mß)‡Ý¥]éMk{Se¯¤Ýô ©%˜ÍTÝ2±…@°/ß[µM0±žµ1x ðù•f ‘šwHzØŒJËC¿zPŠþÍ®y£nÎ;‡µu}쎼tÂõb»6ÍÁ±n9Ió=5r;Ž„æN 5)·c§† ™øù>Î`' )zÕˆ©µîÏÄ7å63K‚ýùxJ«ü”7œ¯x…Ólgm1sw‚ŠkŸÞ4†š+u¹'-vŸ¤§ºÝIŽ5n¡ür‚ÍÁºê¿ßãnôTª#=Új!OùH›è©S2ž+ð!Qørù6§; f ù*èl÷cbÙJÖË™z ^Œ¨35 EÄ.‰µÑyßøœùCtFHO‹þ-ãdPFœ¡#Ã÷Ášç4'xG)GþÐ Eò™qиa3ØóÑj«bѬïYu:³qÙ¢ƒ•î4EGšÞ!ŒÁ^@ä<jÚ•»±Z0ær§ZÔ}¼ôês`)V¦Ç5±z̿ŻYÔ*G‚{óÙ€^M¬Å5x&Š3‘ëNb§oUqO]ÆAýêùPwÓÒL®xáÌlGó}ýå]¹ê:9é¬ ~éTà!ßÐ|kkÕÁ‡kco^2´ª+”M,cK•jVÎ’¸•ô>ôØVç ©§.ÃÎ/tÖLÜ@Ë ÷;×E–žê[íÒØ¿ÓsâaÙÊn°†¤pžÞ$Íh‹¥[Í…óíÅDγ>O$ÃÚÍR^¾`w¤åÉ–i²J8åg•¯ƒ ¾*å/V7<÷›|ÁMô@çxÌ/TÛ’N-öܪ„r4`l{8½‹ý<Ü_ƒkM ªõX±y6XíZ¶Û5CÅã›6o^,Å\Ü0!øÝó²ØCÉrü»1°ÏÏÈR6I!¸ÖÅ`¿M³ïäûjÞŒw^2ûò¬{W?VRÎÙ¬uÞ²†‰KX™‘&ÌÎW—k{$1t2飵zŸãUÏÂ7+Üí½Þu^œÿ–N"n1•LÊ¿#.;»1EÝõœqnÞiÇâyz¯U4¯ò‚¦mA»’.î`é$ŽI ¯nèƒO`˜LÚt#‘¶ônT ÛK!Yg¸²ƒ´‰a@D$'nÔ#`DcKTS¶´µÅ‡ï”€Ïr ç²WÜ»÷kÏÖ¤™Ðÿ\ZZe,»þÌJO•&©Sc¶9^SŸKt5çíºã¥;sÃ:¨ÌõZ—ó§øÊ.Ëlú`wM'ìOZ5›Å“vrÛ|ôׇºÞùô$%Æk™OþPÆ“c‰ÅÉ´m ä?Àx÷V¯âÛ)ÿ°©nØrW£¨BˆÇù'€ÿ~âáÅý³ûû‘ØD?fî.feÑc»×';¨]7R„Wß9©žÖÒ1ˆ¥j~~- _BÖ~gî qtõÝnôY2ÝžaR£\à ½*YýäâDå×äè¼å'e'è2òʼnÏJ/‡:Š9˦EšÊêªÓÂØIX/õ÷hå"QÛ"~k SfÏ*¿Ž 4ä#1Ñ/F(7Òòòæ„C~Ñ-¨ U¹K} o.|Å’ÞP!ćœÄÒROœÌ‡›et®£Gz÷¢Z3V¾ ¿m±Ò+g9’e<’\üpÝj)¨¶TékV8ŸøÝàT oi_o.|áu’6ivœˆ‡ù[ö§“ŠzmUƒ’Ò{Û³×_.XÁôÞ¢jk\ñœÉ#T†ƒÓªr¬ ó»Å>˜ã¢<¯Ž€Xî³ñÏ 9ÆÞ~‘ù¹ö‚š\Ë{­Ï80³í´;N˜'aÌÜ÷Wv_¯~û¶ß WœvGÄMÒRõ(œ½öƒÜšsññ"1úDOÙOåÕŒ$mįÆ}¹ìÒ;½ØÃŸ¶;ž+à—$ô‹Èô4q˜$1Í)Ãí·Rïf~‰‡H¦e“—ÍÍ7/än?Oâ—&`Ì|·¦zý6äEªó:_hE+&¤¼ÛMŽÇÿêòNëø5!5v ,]³qèaasÏÌ– ß3þ3€ÙûUà-W¯«®€Í›äHýråõ Ù,ú´ÊDWß,ð«…˳ÔX‰™oH•Rð›îpfP)‘}ùÚìʽ O’鬗̛¥î¦ã,i(ŒJâ¾ ¼PŠrT>I^NךpD½ÏË®œèìÎnXúe©ÆjÒèí aÈ/PóÒ³{ùµì[`¬¥© —-9O³8D\F5 ’™)Ϫ¤ÔÁÕóÑ÷¾ô(7¥¯”¶]1Zœ“ùà—?[#£h¾g"^oÿ$Lz£ýÞº®¿žøGë}ø¥°@ÉJ”¿f1nµ|Pºê¢ùÆ£¥ ½ï`:±ù‘ Þ_„+†JÖob–¡£´åäèŠoHõ0yÞéŸX!ˆøý;Ú½Â&Ìܽ Šp†ç·s~ú«¹„щ×GÐè™í@„W*/ QîÏ­%Çc'ÊCYÍŸˆîŸ×ŒÆŽßY´!±©{ŽÈ—J˜Ó8\‹Õ„9Ê1iÈ¥èÞ(j Ü3g{ÌSìÛ›ª›6´Ý1g«¥#J¸ÜçT’õ4c‚Q eã/ûÅP“TKÆEi^C‰_<à%»/Ó˜cS²¼,[ÌPÍúµ­.Ÿ<ÞÍ¢ð‚âÑ—G’üX¢ìǯŸKÓ¦yºyüRSÇ•{ð®Ú;:þbSÀæSªŒÛE—ÐÈcb!îEœ(’«f\ =1…:froVÝ>€@Cb3)HL ŒX¨®[°>£÷û¤_ó°¦&À@ø(˜ç»fb}¹+M’³~B!~r³îw\rðó¤u±`QB$žæNÃB$NÄ ™~ù‡W)Þz¾ð¡BJ1–¸ža~C¡rSŽî)ø“íœ4üc<•ää«G'Ïf•ï÷<LJHè×ò<#> »|àäp§™5$y¿iÓŒÞeÛ7Ñ3‹z¤×Ñ &fHòg¯øYºÊFsôÊp¾"Í’ì}ûÚz”¾°\èÁÓ¡æßÀ?›ž^F›¦zìlþ€LD:ÈT0¤´0õ&È®ìEpwàZõÚCÔ eöKS‘ ¸¿lûVÚÚ=(˜΋Ê~Ò¢5°Áþ`—û&S¯Ii_Ö¦UeBí§êÆÇl;Ô([­ôtJlЇ¼·³ê0D]ìÅõŠk/Lé.è ÑŒ—rçù™Ú#1)Ä–`är µÐÉéIcöëÉ9%ÎHY/äë3—ED¬Ÿ³ó·†GÔÇ Ë7Y.y&ømKOZ™ÂK‰ä­ÔÁk©B÷’K’±†ÙrAD‡¦ ‰; G. ›æ’ê?Šmšéq­ ûÝ©A&ÄfŸv²§Z"š÷Íë¤8$û‚lÛ2šà&5ê{ÉYf.çÎ!é„Ë÷?ƒ~”+̘o¾Ð|jÏè£ÌÚŠ;yi*ý A ‡“±ÖðpT¹%‘%:k¡"pó¶V¸Iþ»)Fž«g~׎pFõÀ yš€K©˜8×pL¨_üÞ^ƒ‚¹5t‚3Ý•MdÑz¸Õ∅õüí=ÆK2bBÆÚþG%”µ7ð„åKêJõ4&ç3¯74MñÔöH­Mšî``çM–ñSâmA·%“M¨Ý ûpãFEª {º¦…¯–ÓìùB¤©>Î0 ^ ˜Ïªukt©°HÛa,/Ã2}F¯Ûm—ów™Ìû‚Ìz*Ñ×}TþþË“"<ï…ð:ÓÎ@çSæHFÖƒ•ò:!œ¾ kÚHŒ'¹¼!EÚZ;¾Vì¹1Å>úy$;ä„Ò}ºà­$êOþ,u0¦ ?îÅQ£°Âá¦<€ ðÍp–ë4ÆK`Ñ6±s<à øæc%M¡Ê}Y@&»O©d‹Æç’Fòj·òXo²x`Ý•ýܯvFðªÚTÃ!^‹â«*÷õÛ M@RáD1ç¤cm%´Û+îªÄÛ½e+ºx$ìƒ5YC™nErÈÕc± _O*#Ú™·‘?ĸɂK0g˜cVÄG¯§Âñv^„IŽ{^=)Rôã—!+Ô몓Q’4£³25J¶—î=ÿ"¼[‘fõÊèò’†ÑŸÁT|Tâi¯O³&'^° {Ú•t÷'¸DQÜä8–²©Rì[ëvmÁ‡¦&êywŒG[|Í»®5`3çÓ+AûdËз6~ïïmò¢/CšØü=¬‹Þ7œi·éŽ?. U¯Åx’ÄA¢gö¸­—iß”õt³]›*[-ûÓ¤~–­À…êr7Îg³¨Ó,”nŒÿŽU{" ÷€DwdŸ²³¨ÌC‡ u¸3Ý û{ ^ /í¹0Jzö‘á®K®Ü÷kRzh5{…2§ï´ dk¾oŒ57î½)Ïùá–,‹oÊæ«ë.4~Jº'¬=ºô~Å|ô€Ýéeñðê$\'Ï^šã:EMœøG´WQ’7>í¹ÒÅNkÄæcÂoHf?ÅÖ0²!&úªÏëÛ)‘pY’=üÞ‰žñPóÛõ°d…BÑXݬŲ\q›µAÿ¶f =m/©ý”Üs)ܯœJ’^Ýñ FoY¤ÒdGVá¥Ñb™gtRÜüZHëÉÑØô]æ£Rº¥mŒÓläj­&쉧1ƒ[‰‚³Beç­qî9"áŠî' üm0‡ÉZI—`­µásFX`O-IçWåMVFYüμÄz±žÎ^îŽÁ€ñÖq‡çÚj%ßDJ\¡NÊú†S4ÛFíRº…êXW×ù/x³¾PŸÅ1^ÚÑÝVÉ`Ø‹‰;¥±bcª¥kz¼z'–[0•(#G¹!ÇŒ{ŠÕ0»©ÂÍ-W°f¡þÚÍìIû³g éÞ®´_€¤ØÝ º)Ê(ˆÛqŸMÇÖÍ<¡Ãõ£=(û¾¾7‡“H>Gõ-·‘Æ&}ɺÇSâ­?y)cùã<‰ÚªŸé 6nq¯Þ'Š /Ä ì÷x”.Mè$zXÔ+¾pøêdiäo$Õ1tɸpîü¤?“^Zóˆ^6õ°; O˜¾qM\yp/KŠÑ­‰oš[È]P©©|£Ç6'ìz9 wĆé—wE7;RÔ[EÞG–ínvbWäCWæ%€°¸Éš:E wõQ`ñÙ ¥Æ±í}oãÙws,¸ä Ù‹ ,K²âž­²>sf)·/ÈO2ÖäIL)œ{Y;€ÉÐ*­¾·x—LÆfî)Ò÷$JÝðMBç;8ÅÞ!Ù£[奙"’{—"ÁÏ/ãV%yäU‡ú×Z€‰×­–®/_^|v}•~Ô ùØ'<²+UhÅ,$X$™Ÿ 8„161pÍžŽRÓ?,©^¤¬ÿ!’¸XÃl"y¥k ®¶Æ!ª:­H5·R˜ 9a!-ÌíöÌlgGÒTÐçÜå3ûqþÒäæ\¯›çö^·P5¶þçàÏÜx–¦EjçÎùg+,uoÎÅÍ/¿¨ˆl*ܳtv wžtéϱ;¼éþüK,VE¨±²ãn¤Á#Ç Òá¡ñOöisA¦,ÚãOöÉ‹ 0}g9ˆ¾Ümg«)èÏÍvM<w¯f{GŒuwoNPrsâ]'°™NÕW}§º`«©ÀÐÐýÒ³‰Xë\ä…²¥µiŠeÂNÙÌ÷sL?²>YœüáÀÁOÇn$÷ˆí endstream endobj 265 0 obj << /Length1 1630 /Length2 19286 /Length3 0 /Length 20127 /Filter /FlateDecode >> stream xÚ¬´ctfm·&ÛvžØvŶmÛFŶmÛ©°bÛ¶mUœSï÷õîÝcŸî?ÝûÇcM]×¼'‘‚2 ‰½‘©˜½ =〜¥­‘«³’½­œ=— ’©¹+௞ †ŒLØÉÔÐÅÒÞNÄÐÅô@ÝÔ bj `f0qqqÁ„í<,Í-\”ªJêT44´ÿ©ùÇ`äù–¿‘Ζævò¿?n¦6ö¶¦v.!þ¯•MM.¦3KS€°¼‚¦¤œ8€R\N njgêdhPp5²±4ÈX›Ú9›RÌì6ÿÆöv&–ÿ´æLÿKÐ`pv05¶üfêalêð‰à`êdkéìü÷`é 0w2´sù;{€¥±«É?üÕ›Ùÿ« 'û¿¶mÁì]œ,\³*ˆˆý»N C—r;[þ5ìÍþzšØ»þÓÒ¿laþZ] -íœ.¦.ÿä22˜X:;ØzþÍýÌÁÉò_e¸:[Ú™ÿg´'SsC'Sgç¿0±ÿ™Îö ø_º7tp°ñüW´ý¿¼þg –.Φ6fô0LÌs»üÍmniÃðÏ®HÚ™Ù˜ÿ­7quø››©Ó¿DùÏÎPý-ÂÐÄÞÎÆ`bjà gïò7%€òÿŽeúÿ>’ÿ(þo!ø¿…Þÿ7rÿ+GÿË#þ}ÏÿZÌÕÆFÎÐöïüûÆþC;Àß;üshl þ1†¶–6žÿ§¨ÿê­núïrÿ`’.†Ç"hgþ—FzÆ+-Å,=LM,]Œ-f†6gö/½ª‰©“¥é_nÿ5V#㱩XX[ÛýCÛ¿M¦v&ÿµƒ¿tý«~1!9AQšÿÍý—£ÂßEpQñtø[ÛÿèFÖÞä ÿÀ Ù{~Ò1±sè˜9™þ¾¿¿q1³úüoRþ ˆé?eYC'K€öß¾™þÕýÿøþSÒý/0¢vÆö&ÿ¬Ž²‹¡ÉßmûŸŠÌÆ®NNIþ×øÛõÈÿÚ{SSSc˜µe{cî`«ô¬ —z̼áIíþ^&Ðᇲ&•âBÿZû¿ôð]®*ƒºú_Ó?¾Ú=—Î>¥¨F{1l(zRM¯ ð|H¨ú ‘·ÈsÐ2è•Ág\¨Gÿ¼Y”ÙÓbgT;Ú›TTÒ+ý€ÀŸþÍâuó‡ÊŸÄ­ÐôÙÁ×8­1½éJ}ÑùyÒéŸgŠÁ±‘ᡞ;ð¾C\šÜ8h2nCLß”s¢dO§Ç&ã/ð77çê¥ìVõZä$Uw/Ü÷eWBÒ§Ø]T¦Œ+óoAàFe£8i÷ë°PØXæâD>ZÂqá)½†ÎeÉ‹UöõËF¾éÖY«\±–°Ç¿¢–ÅÓIŠÙ¶¿Õ($³´BL$Ô9‘25Õ¢xg8XpøÉDù¢êýÇ*“÷Jbô~»ø@ñvÕ¨¤4ä\(Ð óZ‚ÒÅ0»G>:ò0 hZ…R_D?C¾)U°Æòïóà€¤nýªœ²ªž^‡äOoŽíB®s—¾> cyÃC–زýEø#Z2ìÁû!E¯µG»«;]”-~ß`æ¤ÿ—té”gÓ°¦D÷P¹44_¬\¾/kŠÖÅ'¢QÝЯ_´ÚQ§:»U¸ÙB©Y=‘ìûÉÜøY€çVŒ}r7~Õ‚ÔqøPHk„…Ø¡z©1à'}sF›3©Z èF÷o­(,m³Æ—‚HQ[8£Õ=?™©MHáw5?ä*÷Íüv‡(r2‡ho7·¬¥øü¼t’ƒ.‚¥Ï`×ÞæŸ)À˜šs%:M›3nÙ©ñÅF֣Ƶøê©`À¨*S|]ŠÍR¸yn*ÖÛÏ2ÙŠö¦2dêÑÜÒÞ4=5â&$UC~%29"5l¶H¶¡åú! ÎjHÏnAhLO… ,‚@ €®G $ÄÁ«bõ—bTðHK`%,ýàÜ}E“|¹u_°¶º«çDyºüšW‘ÃkV;g};K Ö½hAÏû¸ s¾>+h¾KÅbC$Æï½Å¾Q;¾p\à19ÝÜ3™ܶ#‘ã°ûýмÕP­E¹v*a„…ÌÞt=)NzŒJ:»n.û3&ÒM ¿mè…Uó³›mÉþ -‘O–zéâó©«€¦“…?½9jZ&(ÕŒ±ÝáD X êY Ó_†:±ÞĆe¾ÎOœôµ@Â%Ûeâ¥4ñ»äˆ•O^N*õ ÔX^ÓTÕV;ÅÙ>ölSUI5̪LìÜ…·›ŸoqoîâYÍøSÀT¸½Î,èL›ç>2™  cVx´³Ø8«Q,³õl4l6Ié¾k†€šƒ“áâ"vØG¼<Ìp&£wçZEÙlusU§Ó¾WÔ÷¹ze§ŸÝ…'ö×_ùmÙAKÈÒÊ¿:–rÐižÌ…Eü áGNðJ¶åH'=Þf³-‰_ÞxdQ'*á÷ù=K£C]à!é¶pº¢®gÓ­â?ÃÞÆËÉ/îÄ»6ð‡!÷‡û2æb¦h‹#Å”SyÊõ"D eð„-”!ïX@ýÎE²àñ~UqOG€!¿ B¯¨)ä)®fÊýáóËãž\…¯„aÝ݃Fip7ð$s ä˜íâN¬Nµl(ؼ˻ •®Hêñ¾7ÃÇå x:ü(i…]Éšfþø€Ñ‚æîí@ò¥nIÚƒ||!ç-šêpßÂF‹Ã‡žÕ£!÷0٪ǭæ8šÛ¸_ìÏÆcìU9® Œöªé|g9¯dö·ïïlMMœŒ^ ·tDÞ¸’ºð‘ú1ÏÕZ¹9…¢Ý|ÖZчnq÷ç ñ^Md(žVÑÙb¶w|Mqü”0憬ך§^6¥ÆY€ãª™¶¼ØþQÓ0ô±^šú–ÅÃg\6¸>yÐ<áŪ £µÄ³ê3Õäa•פ6Iž2Aì*PrÏV‹[4ü âw/aJ öž½šÀ»Ç œ½»BÚ÷¬„MÖ%¿Š.o/k‚ø* â+ÁŸÙ…žL»ózWÈúùRs¡Jãë‹T©î»°¤ s. ýFh"Ô:Îê©™éë3Å]ôÚÎ1–K’Ì4UÛÛ¥3Zâá<Ó@âÔ0 ͪSÄ<¼h”#ðOÚEì^«€‘;9&(©õá[¾ÁvÒ<é_CJxb§‰¿\Bha£Ûì×âF¢æQÆmÀF€Å¢¶øäÉþèŸD/M|óô¡Âfäé–jêçÛˆb€´±'U(æè³/g¹÷ ‚ ¹6c^½Ý­ÖÑH~y«âKÔÌ¢¦¯Ï™?jÂO Yi ‡J&yazrþè¨õÿÉ Ú¼±ØîL”G‡Íž±åt(v™²Çì×ò!pï½!Ÿ€ÙM£eJ¬·YHÄûS¬–^LyUW.2@•bªUz¡;Ì[cÁÕœÆi®1Ü)ºl‡`Pn“‚ÝÖ¾ÔáÛÉPãÝ $ª©"ÌhóÓ}3ͨ£î6ü$N­9i Ð-ÉË^/æ»Â¾|óbNÛ?â–yUºù«ÙÏ2Ñ%(óXaiB-,fþ2» Ù«8FK<Åêlç‡q~èÆQúÑ0™elOÅö®-@UZ6PC ](ë =xÎxB0(,½ö3ö⎙a©(%X5“Üe_˜ªöA—ÊÄÕVá:q}¯;{±™–•ãÆÜ£Y2oì·A¯L÷é*¬=šÐT¨[ýI§4­DÐ< ªöÔáúÍó<ˆeé£7J?ÚZ®Åêа7§lìÏÜ&|ÏýA"ÎtŠý·Ñ°ÛHá’­Nõ4O/Â9`áâ3¯•¬Ù.?~pT ÃR YF,>Ç/ÿ%!(N’ƒË [c¥–.ÁYÖUÉe¶(5I߯Â||ÃM633-2ÒèéΞ“(y6Þ˜†;º>ƒvЩGéMTõ$à¶KyÒ7­‰ƒ‡üù)˼Yvd/DíÍV»šØ¬æîýê¹S˜Íå~èàÖ…• `:¿Ð&M§Î¢GìÝRB­¾?³Î‹Ä¡>p0<|3iýÖŠàsãÞðµâáÇf–°/YÕáZ5:Є֨‹ Ñ7–0 ‰+ï]zÑ‚ìœHKúVÆO¾à!(º´nC‡rÉÆwrY6ÌØ±}R´ ™Ñ"2O ÕÐL”f‹ >‡ÊénÏ¿2W#Iãõ}Z7ýÓz×ê_™2Ïaê¼jËu’Ò’EOçŽ*ºše]˜ap=½¦99lëŸÕL˜Û*àŠ?<„Ú!H ø½ o©Ôé„XÛ^_ëeØ{¶°¼qÑk Ì@ñt :èHÝžS“‡šóN` ™D‘º©våQIl:G"ã’ºûå'¥E´PKõнQ» !ÕŒ0~m£ÉGt·TδÉÃSF›/†¿]Åô|'vg’v/ Ÿmð㟷ü8“»¼®Å·Õ Ÿø!1¨¶rV.YHë®À§’wlDPBßÛ?(ŽAñ®OÚõâd=¹'‰A³ö›ÕI¹#J[ðD³lÜs‘T¶ˆ_tÇ,xa“w=üW~>½žjÁMýªâ¯C¬N+"&§ü(×ԆϤÊ;ä{wˆu›‚ð¥t©3Óh|¦šçË,8lO¼ü­9¿ 0ÏÒsµoä,üðÞ§bq”aç*³I!XÚQ˜Äþ7`ü„AÁŽÆ'ÙßçbôXv˜‰„8E¼S´xz“>C°ý9ˆï ‡ÊNµ_Ü"«l=Zk"š¥úŠ6¸NÔ P]¤¸µáj_ON‰˜aÖ=3ø¥S4õ‰; V²†í'Ýss|ÊÒH…½æ}—Ö01oö62d\£.^ ŒêO³A¥2Ñ…)NÆ6„3·¬?‹)U$L»=[ }{€ø£/ ¤­þ¨E¼ÙÛN2yûYºîˆÔ”p’Ì +•"®ê©ïÙ-d†ny,?âu_3äácE䦸ÞY€ V nAÐ;ìĹ šºC±ø·å3“  :ž¿@Ž.sÎÙ™¢ß@$™âöïŒ:”,u#ž÷6w†åºúãc…«u“•Óׯ—%¾ËÁ›ÃI™”@Èáe3t7/«GS?Ùß°ÂH&àÀ°Z ~êV';Ùåo? n(_–ÏóÒ„)¾ÃóN,E›+²e¢. ÂMVÊc÷îîN†bQu³È,'G3í‰9’µ^ðäÐ}Öa9žÃüÑû’ –ûF·oĽ+t$™t·ï¯“o=î,º´‡&ŸúÞZâ:–Wʲڂ^¨í:êÆJ|É : øýþ†û•^ßœÈIô1ÓïaY®UK0eЄ‹Ž–} ‘]%*†ºƒhÎ­Š¡×ÜFİÛû‰Ëü§Ôþö•î$;®eK4[³…zùȲ8 S']f¡Ž¼ý+'“öM:V£28>•ÉÄ”¦‹çEãˆËæ¾¾>ªÆ ÚÑ?ÑQó§)$§Ø*Èêéyß]%ÉjX¡§a=kÃŒ­3[ªK8´ë2¤Ð“âô„Òˆ.£|X™sD~&{©Ád:£{P"x£°¤bÅè7‡Næ´GKNsÉÍÊ–\“#*oÁ„HfW°“ Âlê/®0K°Å…K^êø%× %¿h£üZÒR„\LÓó.שL´A0þ¹²oôPÓƒ ¡·aa–ym(¼WiÐå®õ€dî··!Û‰ÃB$’ä,`ÏŸãfSï„&Œko³}>ùg™«jfSöqB×+Üd~ós/òO§0´ý‚"ÔÓ˜:Ò±bÛý\s“ØT\VÛM§R')(uÈèLú…œ×9oÓ¶öÒI¸98±³{. ‘é„ZÇ!ŽsdJc/sžçs¸ÀЛ ¼áEíVÿ}<-“9{÷_Jì¿Ó±¯~DËøâ¢ TGf(¸ß|N×E>Oß²¶¦WVu<™yõåó‡ÏæÎ}ôÖ/°É„ÃR ·›‘’Ä4«…q³wgFªî"›>ž.Œ^°]©WIɇ·û1¬üäæáª•îÍ$-vqkZH½yö 쀉ËþÓ(ž‚GŠü þ'¸'-eÅ>¯±ÒMÍ}$#ßÍã"’¯h;oŒqѦ¡©e ±nUyvú,_yùk|UówV ì]h)¶uÄG›ˆgå¯u÷¯è¹›WE…ø‰g~ŽuèÈ*e–2´ Æ Ñ&8û¤$:˜«™O\q¼øu"dÇ¿6Äŵû)wÑ I¥AôtÐñÂY%ì$ød~ ˜+yÄU$±¯ù—•ßÕ]v…Ý£‡#þ°îG'­Z´«*=Ç­EÌпyå¤ä1(+ØÙéU.gcTlˆše¢Ú9þåtÂ¥1‡f^s5½˜³cçá¹yÅÎ…ƒÌÓæiY/¦kÒn­lðÇ¥"$Å©ö³U®7d´N#r÷ùß Sâ¨?‘7Ì,oØÞ$qWæ5Äqrù›žÓx} ö@]Ô¹“ÚÉKÕÉÇ“çAÌs ¼¯Z¼–®{r¼ \»u9š‚Ñ.qƒæ›“x F<²mf†¹DB«ü º¿tMÛb­ R¸ÝwŒRp½PJè†Ò7Ã?6‚µðNýjO̚ܧ"ø5 vkMÓÆÌ–vª£ ¨¾|*ÿ—’@vô3n.”nf‚Iëy¯mÍ‹ÇMÜÓu— ZeèÞ /²kýÒ·(¬HUMl‚S`Ár#x}Ò+´Ð¹}vãÚ…z1#Ð`Ôõ}³ÓÀ §W#^üÛÔž;ýZ ÿ/Cs‚âµØxB–¶òÄ´¢U8Ù€åýœ}…>U†‰º×®õ`6ž²âßZ`? åÁþGcxØ¥™e1F¬_½Ì®ÛùÕBi?y»Óx}?ˆÇ¶z$ó¨I4ž)½¢3Ä>1ŽÏÒ7ݸµ:JÃû…ÚïëkƒÓ¥hJd(ä†XêëWò,] K#â¾QÃfžñjbH,pÛìûebí¶©DÝ=*jtxcâΡÚÌŠžmQÞóö5fšYªQ–{JNÁË¢OAXb\o O ß–Œ8/N±‘×:̵ÖÐ)y;Í3fx{ƒÎÙ4ŸÃÏÊÞvÎŒºç_¦`ì³V|'5“{ëmËiGm·Z‡)‘æŠFÐbêœ:úF¬ƒO·)Ì+G³"<£1Àê<ÅÛgô;¶µ£-Ky;qP²]Jeüæ*«ÄAÆÚR›G%ÅêyÜf¡Í:3W=A GöÆ>hôs˜ÝK6T=^48óçpÞ¹QŽ/*ÊÈ@|föžß³ÇîhË{¼£²F(´+Ï_ª…ÙŒ0ìXž»%®—@õ;¤îùxì?ã€5 ÀgS”/Fy"lH/Í@™X’Ô/•z¤XÿIF¤B“ç±_K8°ÃZD `LjÇPšIà&il wÑ\”’Ç€»>õöQx—Ýä•cZ«Æ„…€§Œ8R G1HÝbec>‘VY6Y·F"µÒWGÇS&`•o<ÎPd °qbç&f j&þÂÙº…@©OîsèÄ(Ú²OŽÚ0ÝýÆÞûf¾Å56a^ðG­M‚í…u+¿|->°³t€Ö,¹Áqk‹À—àSéLUEV „"•ª-ýDTyðL€ÐîKƒüùrqn]ª;¢J:rÁК¢fãë‰H<“kuD“r9’iU‚²wkµãÿDÕrp¶¢W€²Žgðiåoq✄æƒMŽà¯|æ”9QÄY¤B6 4“0èáŽá>U=ºJ‘|+ç›n~CÂU¾ôÔ(±‹A¤´ŠüÇ2>º±/@ ¼«ð°:Pò¹C‚õ¼~ú¦DHXp<ƒi¢ˆÑK“ïnÐb¸©½*^‡Ò)˶¬O”Û¦°ø›31<ã%7‡£7 § 2/:&”ñ)Ô5w„¬Ê'n Œ·´Þ—‹yÝcRC±~3%é‚›¤ž;\¿[(Ã~¦4ùùÑÇ-졜[On´s"_{²ýÄS¶‹|æw¾ÓÏs[;”© ó»þâf³•êJÜæßSïVŸþá#úÐØ©SuoQ]5‰˜v¥‡8YjžJ¸î=1¦ì“˜4ÿáŸÔ!$Åmâ v¼ÝÄm&÷Äâ DLÍ Ü¢¼„&Ê7f»U¯3ˆ"Yr\ÆCwJQßCó}µ2ÊUªPeo.½Rƒ²û~S!³åOÒë­ •“˯DÈ0X~–žP©BAz(úšÑ ˜öêÔy¨œ”®ìUÁ±\´0ËÀQA_ÇÌk><>3¤ÞŽîµ=ÈÔÜ˺ˆÌ rùzÇs~T$³ëôkÐT{ø‘«É¤ø‹Õð1yX!Â+£`//¥ÅÑ£¯p®æÀ¨‚¿ã>N æ†ú;’$ik7Ý€Jêý¤¼šb¸ËfÁuó'å Y´Á©×sP¹¾Vs 9¬Àu×’*¤ÊG‹ýMV!o@­‚JAY¬¹™ÊÉ6<Û ÐÁ ù—’~&°kA¤†.GË#?Ù]Š˜)̺YL”`>™þ˜2S—}‹£?áMmÂÛœž™e áöÜ芙p¬oö³€Þ¥ðÒŠY\_É;ŠT÷Aý ¯/!‹î²Wó}¼Ï q} ŒÐÐ<-SýéG,ƒ³ê­¾ãê ýœi01Óå=Ï:°áÉÖ´xIÍ©¾ÂXˆŽõÓ…àüÈÒƒ~(Xx©>ýJ}°*uLZÆÕ©I@5hïäé½:h‹&tÂÖňÏõD¿ßÇh ¢äÆ.Ù2 d£—?ýf#ŠQF§€²óL›þôækª¥ÄÖñœ-Waläjº=7•¦ø\©<Ÿiaé5"‘Å5»x-Y3F·–zgöV[% ½/ \ʬ5~ü(ÒèÎDéZY~óäƒ$t:µqA(Wí Ã  èf’€'ûɬ¼/ éõ‰Þ up·õU½ºcJîYò_3(j?›¸бA;·¿Ô²]ÀÄÿàIÔÑ+A±Èþ®ÈÞÁØ´‚up¿ß~LyX_ê·ÂÄiÊ­EÂq—iÁùjD3Û.@ÖÈÃÞDª“"tõºïìÉòæåJ §ŒHñ¨ž[£l$#T©ou™ Lzùá‡ç° þãŠ3[¹…õa“~^æŽ?vU/íb/ßòÈ.¯ÏâF‡ûçÒŽˆKìœN[Æ~÷Æò,IY1f»›µó6²$ÑéÒ¥feµòºƒôÄž\ •Ù6Fþ aÔ†ã½!ÕÚ)£˜ 'wv½ÎòÑMÉÚ9ƒ!ÌFæÉ‡øW(ç‡ö\[o_ØM¢šÂs¨Gx‘Ž×h÷d*¸úì|D)˜ŒöQ4ZóÉt}‚©^ý-9mOßšòзC‘8ÆFÚ.zåÝ¡0ÚéW5Â`=|¸Êw1õ*?ï¢DäîerÓG¿B¥lû›& BÁì˜m‘fŽtôËѦ2”F¦`¨ÓŽtß׳É;‹ ûšø¬GZнAî‘Þ‚,qßÊ’‚1 ŒÚ- ±~HûýzÒæÝïöè¼µ‡ÒÑÑ 65ì2h·ßÜÈB#Μ<¨¿žYú"t¸ù,õ{zÛ¹àSºîWë2•_ DXKI?ëY¢ÿo«\þfúÙZ2€LÈeçÍ¢¢€>¾ù*±àÉz ’ÛK6Æê˜ÐAúÓ~‡ï´ ±¶—;¾ o.¼˜œ«eÏ +Ãñ&îG~+²¬+hPF<TÓ“/‘ݤôsÙ®u[ïÌÎÁ[ú£%ÿÔ&ÁÙî4o!䨡Øj,ì"ùÝÓ>þ¥R·hë"§ÇÝ@¾«ãþùi†C*ŒîZx¢ûÞÂsš³ZD02â&volæÌú8hÂÞ1reÕwD¡£bM¡ø{ !±Y¹Ï¡xÞùT½±Håb¹±£€Úñ àVCõÀ¿‹¯”ÔÓNZÕNÞi=r¸BŸ¯þíÝÚ‰št6Áï[™ ú)ðT‹ ýý|•ˆkŠSà» ë/ö9ªüS³k$캄fã’Ÿ:ÇýR±†Ï.ˆìÛ„NÑÒM« ê*×EÄÌY–aT¥í¡PRÒÈ^šx¨QÂptHÓVx?C˻ϋùø‘à¨î3èç·¢¹lâa\rž0¨‡p¬V(ÖÆQCÑÀhxûh@»ƒöX¾Õ%|‡—‹Õèe÷÷ò¡Íß*E¾—PúÙÍ·/@Êbp´Ü¬¡ŽΉ÷r§é-7>gn]v”¹øsLm{QÊ…Ûû‘dýYjE:é×7Ihy…kn²·í¹˜&­Æ°9¼eÕ1µªä5¢_FsdI„^©Òt.Ôœ† ìPiá}£¾æçЦýß3¨æ—{dWkªP¬dßüøµºEr¾`Ïd«tšÏ›÷Ow÷†;œCðò¢þë&hög …ß/üE«8 ?ÊI¥(h1Æo¬M¦F`CºÃoð^6´ s IÇÚÂh׎´éìR{¢ôñÝ\ãÓ’kuÊ;š°JŠ+YNÍ D ÑØðŸ]³d¿WÑ†ÚÆQQ?7ŽwÅ=Òa½°Îjäç&Àß1Éâ!hm&p«z¤‹;JŒûÔ5˜ùRH¬ÆƒÓmúëîXÙUåM,ÁtG<­‹C#ÆrEø o^‰Ä ‡F{ͽAQ­w5$‹·RNé(T^;ÛàïÖÇò,Éñ½´ `¹Ö/ºän¼³ËGÿ¡( –– à“žà já€$“a;]wvî)ÒÅànâ¾&â›q“ÜGŸü)'´»w;]X$S;ø6- c=·;/pÈbНð½ñ„V9 v…ê"›d[In}ˆž2‘ Z5ê›öï ‘þp¢£†‹¯T+ÅšfMm–£—RBÃSéx¤(=ª¸a?0bEÕ(Ï-Îq9‡­k(Ilø!È„®?' ç¦atgûBã4Tï…çX÷]ÃgAùÇd´OêܱÁùqð€UôÆíî1àÊ€ÃSZ0¯’B8†ñ«Y [¢á€Ûƒ®¥»ÃÀ7Œ»:¦¦wJ®­-fe· e¤1㪨‘AóW¦<ãS,|Eÿ&3¶—8.&è‚•ƒ3? ¨¾H¹ÜrÌ·»Fk¢C ☩‚hO3ÊÆÏªA2 NqããgH?ݹçÖÌõH.®Y=Øè+Á·‡JÝ©:9?³™ ×IöÞyt{Pqß¿èe‡»?²Ðez£‰#™Z ßã ƒ²áUÃ@€ò¥šÝ¹·ò¿?O@t*)±;µÛø ¦i:w9ªÄʾØR‡øHZôsÔ@}§Çˆ'ÏCw§¾õÇãe„êeÚnIh¿ú =ÊX Rw0.ö^å$vqmÖ¾ÿgwYrñ7ÌÀ}o‘Ãê÷n1b…•Z¬¶ŸÌN)cªs½ *B×Ó;eüíô³³ŽÉ*‰dMc ö'ȯ£ÓåòT5×ö“Ïâéy‰Ý¨Ï° ä¹Dfàí!㓼2àt—Á,% ÂÕÐöÕÕ“dâNæÕ åL—!C)%€Íå¨k<ÐuÒKZ¶—NÉCÁ¯èø;vÖ MF‘;GŒ8föÁðl5Ë"{¯qC?JÅ’—rx@V;û“·±‡°”õ¹ #ˆÂ-"*åŸûGdùc"ð½¬ëk})NFoŸÝÎ/ϯ) ç-iömñÌ´é¶µYE¡‰®}¨•3¡1ïÇá|ØîcO„¼‹p(J™—}+(/ÏYÆ4bj£"NÝ9µ!3Æ?B@ôvðR¿˜dm"–~<Y”ÁŒœÉ¢®>ÔöOæ¢Òáû< ø²½ˆM4ó³Ü»°h¡àÜP¶§u &û€M¨°Ü÷¶‘¸Ð¤ˆO:°#Ô'ð’¨æ”ðÄ—t~`'Ç>œÊ®Sžôá΂PI?6¨€™œ ¦/ûštªc‡+X6·Ø>‚Ž'¬Š»æsÏýiOQ¿¯ÿ]hñ)Õ ‘¼ê™Vв­òî`C+$1L~,B|KÞ;d=ÖJ ekÛºx8áÅ–$jÅkX•#bs»$ãëu©J,|:jçŸa" Ö˜”@Ã4þú¹ÕÍßèôèW„5À¢.Û}Pàö•½Cuà" u¾ÞoÜŒÝR_ˆ1=E†ò‰¨M*ÍhÃa€wœ* SAÝpšŽc9þ€Æó͇ºÃ¾¢Ý[+Ö[\]RU˜¡ñp1Vd7²%†7ŸœòÑ„l8çlËq?Å&5­÷ùi‡%¬Ü“Ÿq:&:ÇoUDÇ‚"ÎëW›§@ÌË}d~×ò”ã–„Íq6d>[^”ƒHA¶»Q&e%Ÿ;–§e6è·íû"éGÃòlÕêååîh® àÝ$‰ P8¨’ éM½ïƒu=š z‡!yâö³ëèÛÂÊ\®Ú7òý¢Í‚ê ·|ØÏ„ÝÀ¢<æ•ÜËþF@„srop®É‹Ç'o‚~¦fóJ'×ÛŠ™©ô#»„ß±Ž|î³ÅÉ5}¤sH¯ŽŒXhu"FN<$‰uD0¥óÚõ0k¸øE)ùƒ0ZAcðT!ä ŒS ?Óפï§Cfy¢gM% fV à#ÒCêÂHk¡ÇÎRÀæÝ,xîÀ¯z]˜ø´/õ-\PÒU\A4iˆä3Gݦ©À< ”UyFé¥[&_Ï£2“nÞF’kZ‘0°üI¦ãlîЫùdÝãÂ|fß4b0} ÓGj0²Ó“dë&vhBL5ôë¹\ÌuÊP4u£½1Såñ±qÑiDzR¼Ï\wø=/´,í¹ §¹)[!Z¶À.NH [x*`ó‚˺طäÀxð›Ý¦gJõ} €“­%¼5GÍsDe(êÎ]×YÛs\n .Ñ”Õí¶ Ã 0ÊîzŒ“ûéÍ\î+„?übj`ÑK„|¾¨®(O®ÑàƒÆq™ÛÜ”à~ëá_Ϩˆ?>ºܼ³Ÿëƒuî«óÒ1|¿Y–ä„OÿC˜Ê›TÉ‹»MìÐ{‘Ü ž:Ü^Îøƒè $ªÆÃ¾QW¦µ—•Ô©Š'¥þ ¢>Ÿ‡p§{PäÑ»hÀr#å’­af‹Ü,éÍn~(p-¯=Ëîza[ ¼u8×s*<šô( š¯Ÿó†,ë åq²Âíâæ¦â-ÒOQ/¥œ´âûª:r²¬îR Ù9–†i7çcÍ`ÇŸk\3 ’þ)÷í”BA›¢¥µ¦{øž~Dl.."q2G*õ´g‡îp¬&ï…„Í iߺݦáÈ(1Ç1-.ú3‰Ì¨ÂS~þ Óôq“2 Uz˜¢ôPĨ¦GªÈM@‡‚ÖYC85 Pq'˜pâdö:'ï(Þqîžw<û’T#þ…¼ÚC™w€¾äŸø§Í'ïÅ28SwùRƒpò9õ`âUì“Rn†¬…]w:£$A$`/˜…WÄ­*ÚÈx3[Ÿ+%ès¹UÚ–Ë#)Gè:ÜðùAwƒßŸPe·:ç|Ÿjñ]Î6§qá“÷A·ðIê8Þ/Ѝ¹,·Q¨<ž£ÁfšVsƒBŒÿqž<@µbB‰> ~›€ Ãz²ÝËŽùby*ÍM?81˜WaŒe¿Û vl$ð}»’$^h_C_Çó^júˆ*4i:ØÁ†AŽ#üG_†4…Í4ʳ1'*߯:âg»ê% ±ó jê PØÊ“Ó•+«` ‰÷êG°~(góU\ZÌ7}%ž°´ÈS³¸É¾r_€_6Α:mu[ë˜xW,Ë…;\¶” ìWIàúç9ªêè2"[èûµòÑV²©û`‡©,hOADXõó<ÌÇ9 ãñ—r¨îa×,(J>/Pˇàô[¥9mTzѨƒ;dó’Ìc¥xö×â8sI¯0?pâ¾2kì§…iøz¹¤¼º­õ6=_˵SY¹%˜¬Õ"*ô:C ¡¥@z`où9ѧ€ovñÓ‡±io˜ ÿL 0Úï BÑX3kÝ5DðÀ;â¾5ù…KÑn[Â&i$ÔQ@Àº¯×çG#È×RB )iÚƒä#SäY7Äž€Q\§•uhM<}ÿ¶µ€£œ™î™dŽz,¡¿&mü=ŸO^²:6úøÊö9œÁµîõÛÏëGúŸÑD¥Ë”¸À3+zmöU´zÞ·÷C‰õ«¤Ô¸éwU%–Ü7rÒÎZ»,–ÇüCèET_*zÀ¹?£l¥bñò•)c¿@f>Á[\÷Kç%Vœ=J;ÌÝxNŸÕ$#¸×p¤Z (~Tú5‘”N,hŸ¸Æ¥+¶!2± ²Iª*Ï43”^%¨‚¶]zXùS.Ä­Ê(|A}—¬«‰Oöš:Ô‡DŸŠº¹5ž W7â¯ê…`yÃld;wê{y˜æ8Û¶íËEuõhÎ32fŽ/IÀ¯w ÓÙÉr.ÅlÙ–’ —Ãc¿<„˜4nˆ±ën>â†øDl¾UFˆˆö|‹éÞ7‘c™¯ ¸ÉÞN—iO õÖȨÊkë-U‘5ë"ØÈHórˆ´Q)¸ÿ1 ´ºDS©–#ij¼éCÅZ3Õ…1p†OzIfðnAL‚6_¥äfˆ&“ÚÿŠž#™d¸¯<û:ó{Aí®{”.X–NqMR&2O|Õ1-bDÇ’S.ä[ôn0ô‘ðN@ëIÕ1s÷%:•ѲÕãªTy_ÌŠö¢0W­K.ÆoêÈÁg³ËÔz|F&à¥+´—ñ#ýy‚·àrƒ Ç¤¾¥`»ZÍýဪ„6ðçLˆV“÷²£œ6Ò|­ZñÉ•L77ï¾ Á§jcô´k}ì¨îŸdਧö|ߤ•©§:Rkµž#H­6 þ–¦,@Ù¡€†e¹ð`ŸîöaÎQçjÄ%ËÎÕä*Ãë(µ?憠6PÑàøö‘ ݦþßÛµ”tè³UÉßl³N†Z{½é«å&j¬ÎŠ¥ÆÓÌA8¨©5*ÏÍ» û5àšÌSCù^›Œõ+ߢRAhbD#÷Zè&h?|KóÓev2Š9sHRµá+zúì;†x®c]'Ê#’ªlš1Q"¦óy©j6&€­S· Êua=¯£ÔqO5¬÷·~Y‡5K¸äË(=@ †( ÿʰk^Yv/_¸ Jƒí-›j¼ìdÂÀhBá:³É]Xôò¨ôI= ,«·[Ø!~AÈŽ‘>xzOqœ’׆`GÒà½çð¶Çüò<÷ù²Ðº M©â.û˜kþi];$b›ÕTÜļ‰e*üÃÉ‘:KH­ù¦ekÓ'/ÅF†êšèG²˜ûmó•@®PÖÄ{³h<¼YiR4Ü_´ë´4JQµȉ„ÖÐèk¿‚Ÿ¼øãGQ®G•‹Çòl™É€~,fæÔ2ž÷쾄œ¤HÎ+NàõTm5~ÇnðæO¦– D-¿+¶º©êïÀ–Ax¹[”²cOaˆÐ*Ö´îKëïFU´E¯'ä_T¹ï†D[éžMga°mEnµòÍk¡)BèÎgØÇ‡öS¦ÖÚ "‡‚)Œýð<±iÓä@{°jOx·uû ,ÅsÌ3L^iVßÅ(h&˜\¨/šÔˆá¦»–Íu%!¯£õ]—JvÑJ³W^¿˜ÕÀ+¤Ø_£ðB.“ÃùáòÃ9Eö`)Á~mšøÒ^}o¥òªà¢c`€ |EÔ­äµ€·Ì*åÔ=X&ØPåE†ô!4œ:U§>çv(Œ”-FÞ6 !å%½xjÆÔÃ¾Âøw™v,¤ŸºRG®žQqÈq™¸gXµâïò鸲ém\ï_qv«8z9|ú¤èë µñ–D§”ÞüX£¤_þêzÕ" ”÷>á$Å É œ”jͰçîï›&Ùü!˜hŒ]ÊšPfž*<"è*'úIèõø•·î…˲"Nˆ“mHª²š¡ÚrÛÀ˜llµ(½l·%ÝŸòwBUKW³ù ¡»±`ÈmåßüÈseíÖ%v‘&Ik'íÂíY?¬PO¢7éP6pm¡ X›Þ BÌYT3œÌ×ñ ÄÀùÇÁÉ—6^fæ!FÄÑbp@ýÁ¦‘\ªtiçÛ+Ù%[ëÏ)íɶ€ÕÐ 4;e~ª’7/µQF—AÊdVÛ“RǨ¥µv÷LÒ3ñ´sµŒÁŽ kH’T$þFàùLI¤·ïÚr ]J–)§boDœ¯©+6QØÍ} >;ËôøQýÇ—nsx!]E× KU§Éi‰´@[L×öY½õ>S×PÞŸeÉöv HµiÑir£¦©ø–{ì«mgœÖÔß ó06Þn‹ Ž3ëq1ë»»ÓG‚´¸oƵ w+Kfqþá¼øÙaÜyTøA–A¨G©÷ÉH‡þJŽÉl§W²o–ý³ö F%½:×¾ÞÅê¥àwÿx6Œâ¢’ ͼܥ…I¸…öÚ=ìk¢yªÂöÓÆå9‡ô!î218ìØbÌS’,‘==€¾ûyU`gõ,®Î Öz¹¤ z.;(ƒjz“¿œíVÎ-'2ìÖ$]ìû¶“†ˆúw"ŸúªmFxc,ÂIX¨ëËýo^7,}<”úcLE †ÈåìËŒ{AÓðg ^idc‚Çή,ß~éW–¬/G]-ÊvÔ¬Ô/ûŠüa´UŠòòlŸI¦DBÓ®,š<Ì .CÜ;SšRsœŠ ÃJã˜<(l´–Ä©HŒ›PÕ/Ó0Í7–Ä,&b@yõ*1"‚ðFäah´ÙÙ¾PØJ¼Üy¼‰çZ?Ñ/²0S$´¡D…H¹ç>À…%‘ÎnXYÒ6™Ý ŠSu¦}Lš—ûUUÑH wCðh÷9˜ìP4Tè9÷>{?®“ý±³´M ˜ÛW늆AbhÜßeÌú/|Åí¢ccéá¿<)é[¶(À.£ ?\ ?}&å4¥à’|ƒÞççGdgª¢žÄJý•G1ïpÒ]ÀUTtq|ˆõEOw¨e-˜çTæÇ ®KÆâieŒ&³¨0¼B –î|X&+*~¯jÉe;—ƒqcv‘S–“Vr ×B-ß¶ÚÝj²m¶t} Îçö6>0ѰŠ&/°z Ýc¼(Qõ`ßÎaY¸6V¢SÓ}UÛ83}‡ªaMŠÂ«ñHŠ—%‘þÉ£¶5u³ ìyñ*µ†ÆÀ/RÏpÀql£(8sæn°â§È¡jLŠ×|h(4 aâ—æÐ}caq´úÿ¥ ZòźÔoÀñn´:m|2‡³ŸfìÙß»îGʺÍO Ýë/N¹^Íp}’ñ¤Z!•´…!ø4'pn£çžTàù_n¡ú´+Û¶«ùÚSF?ý<Ýðµ‰ð’ Ô._‹¢–>!ç…“Xé>;&V°³EÌPTløoÔZǺâFUUa2¥Ê™òõ}&wÃçà0`@G$2hÑÃ…ŒéDŠ‘JŸ9%¢´Y›§æÅk—‘.d±?°dt³+‹Gùµ¿‡q€¤rÙsuÿjޱ-Ow¬í=ö´ ŠïI'ö\ ªòÞa¾ˆŽI?Ëü÷7åº8Eó¡ê‡FGDóJ*7“7óÔÖïX„ľú`à"„B£ý#huðt%BŽ"â`™èà¨ìeÔ—–öZáü‹Ú˜ýp†^ö²-î‹àE­þŸ|ï?jøC»êʺ]´–ŒñæwM°©Òw¥ fËÛÄ"m`b[žàº¬1§0š¹IrkåÁBùÿu®Mf€”t¿Jý£" á,äqHuyê6âcú‹ìã rkƒÅ„P­té܉ŸŒ߀CQ¬®Ö÷5YmeÀ|(ùÞö?§Õq„DÙÆçC‰kq!ºÔ™†Iè)b16M‹ÓÙî ¨Ï`,øh#Yçfr$\Uýia">*Û´ç;±_¦p œø‰ëðªèBÞÛü¥½6©¨/ x£m yó3v™ÿš0o£ÉJ¢o)ž¨6è¶¢¾§¥ÚŒðÎIoÛ‡Ù(ÌýûÃÝÈŸ$È¢÷¡-²@4«¶Y#äÂÒkBg– ÷°ZfHÜ‘Q§ËT¢)²9þûiµ#=3Ø?C3¦5#]ÆÔ1ÕZáQ¯¹Sö¤Ì\- SœÒ¹É$è'¥§î¶E²+‚mØUytô¼·ðƒ«ŽêQÁ󖛉tÁh ‚X+ `ê ŒµEQ ½.ƒ’óvu]@ ¾–\,4 pÝ®pÓ]E³a?*eÓ Ž<©ƒ+_S +…*ëKO3u¾(á*ÝJ'Zõ³á¹\1»Ê#Ù«Ä‹ËõF++W‰{-ݺÊz—Zw$‰y´`d“åê.ÜVûe'Ÿ$ƒ¨ÃxÍ*¨7Jý³—×fùÎwÇJ2Õ…©e ç•©ï½ïÜô\\0e S2¾Œc˜0K¤©l§öt¶qRáÁÒîY ,q4#1ñ’ðkõAk\„`ä»)-¤(" G©I7À´½ÖÕâp§(¢±2ͯfɘ/ œ¤Ô †Ï늢&õŸ3V–ÎC'M‡&ftÝRsÀ§;=¢€û¸j/±èI½ÕèMð Ë˳gA1ÓÈ äÃãÀ^þPÀO¨ZH±>󢧉ÊO#˜Á–@Ý} Rxqè¡Rã)»z(R‰ÖV¹ÿ¨£;&ꎷŒ‘9ú5ŒYA@ôJ¥‹HËçT(Uˆ š—Qàq…#}Éhä mPHÖèÿY̾ÆñjÙG.ÃàÇ|Å'i³”ËçTÀ‘lˆ­cE9'Åvƒ`E‡ö×Õ4ÚoæÚhÓ¦x±GWB;Æ“S7("î ûðœðë¢Òü;ì#äõQÁãyè»@G¨)Kô"8od¨—oç1ðW~CÈîWÕ‘|G¾.'Ј<‚(é ù³xBœm&‚ýæN3§¶ãÖ´/ž2²{âp èk‰"J]Ôi®(°ð@çî2Í®ëIÑå©ÎÊ©â7ÒÿHShîŒ3;¬žG#6)è:ãʳ 1Û.íPÞúøz¼=6ÔÊàÿÌZOÎåà]USö½š$Þ—ªlf˜Âë¸t‘Y{§£ Óå ÔÌ­¬ ‘“—“‡/’U˜.²Þ|%Á–ެÍçã± t¯YsÓI´Ùó¡´ÖÞ>!©(÷ ½ðL²ß¦´ã”s¦4OpÂsíå‘€f·™Y|¥ VJ2ÚJ±{u•£[~¯¦]Z-ì›ßÇÒ×9œgîÃ1G®ó7ãÑ,ØLq@t¯ÃÏ@6ÅF† ©qH4¨„¤•{í&²ÀSâSõ‚ÎBëRÕU™äoC=i€l¥ÐýeÃÎØ0ÃH³qlK(×VUéyʼnŽçع{"U÷/x¯S½7‘¥F.F÷,«%ªmµP¤²ª—-J§˜;SqŒ˜ÕŒ›¡˜-§Sr®ÚÛx[šG5yÝ”¹AT[| x¡2‚þÝkW`Žpu÷T´òt­aé ™`OehsyTÛƒe_)íÙHGÔäÙx¤ÄRïpwûKíqí‚m¯9êÆ65rë*IwÇ¢“T;½ˆ1н!«­~Û'À«€–í¤OÜykÓÊîÓ·¶gµ}ˆñ9Þ[°%+ëùeÑ.½WÔZSó“D–åiVZâ7ñÖÒùN·A<8#] ËöŸ€ôW§ë}•Ð H>ûÕw–CæfŽÎÅÑÂB:6*üv¼€;â¯ü¨”€Îq.„ÓÜÝO7•ÈñÜhOÉÃ%«äšºnz7ûŸxK–.p‹€´CÞèM•šjü«ŒDÒN®!‹ ª*‰âs\M&qM==pyâ€ãªðt¬»ò¨vƒ4ê‚·Åd1Ugc†#8ŒpË[Ý^Ÿg3_ˆ6ëÕ”]¾ZMê!Ð+×[Šž4o!Ov™—]ò’jÓ))œ—1ÍK6õç8–¨Q4N.UdÊ ÍûjêM•óÙñ1Vƒ «º¸«ˆG/³t¾bµ,°»z½¨j4álye>äàz‚RZ¸Œ:E&YyÔíg޼(÷ôflÆþV¸Å ÒyÆjÜÅÈáúŽ×鎑+/ŠŸ4Ÿq·ÂÆâ”N²oR!þ9QZ°~Šcý¿Ù»ñ/Tœeš]‡xÛN9^Yêá !af7¤9\9Wð}#³×t¸¢5ØúÏ­lzú¤†O\ï;“`2—YÑ5Ù§!TÎi|)]kŸÞ²³BøÊí ýؤÂ6…J%áßÊ⫦~W{Àô_;’^†5ÿÏÀ©ÅoÆØ#õà§,£‰|»ú3‡þ%ÏL2 ëqø-æ×ÐÚø.ä|yçÛC+bUŸjâ3²—›u*»:VláòàÝ^ ÎkAŽš‡ÑÑ3õÈGËÚƒ…Ž<¥çoÛæm èøKÑ+Ý•KÜdü˜ë¯lÆ\q9¬ÃõT "&B€¤‡Ë®‚r+ðê3·ÈV}È-²^1j_ ¬eF‡É‘k\h Æ…]O9ÕÅÇg³Ràj‡7‰tl'V>Œ«Yÿ ócDQã¡Â¯ðy9¢£)‚(Z€‡~®æM%G@Õ·µ©°–+ó“_‰30»±,yñ„%¡;’¬ÝÒ6#¾~Ä”@£a&t](ÞN­:ò>UmŒÚ¿^Q‚¿ /øÿÙ²fCÜ[âú‹‰:’í})—±'}M¬Ù~Eý·æmaÎ)Ú3%^>´K!ÔÁV‰DÃRÄ2Ö±:=5À ªMMçs¹¬¼‡h³Q#Uæ9´:Ê~\~šWŸ±±t”„Í©÷o9ލÕÙä¬ùÒÉô«`Ä/S¸Nãž3Æ­th],ª´äpÆ õ†$“¤F,øÞ@–Ä—hÓ÷‚ÌSÒ‰w‰GÝÛ¸†[¶èMÌ.º#:mÇ€Ðóqp×}í¿ð¼3I!µ+€8S15 ÝěܚÉé¥åŒ\°5Ÿ:O,FÁ|M৉ªÍì'ý§~ àÂ9+aVnzžN )s\ Ö]¼”þcD’h‚ùgº©£3ÛýØß–¿¾l˜ˆMÐaí"†I¡8µk ]úø ÚÓ<§¹qhü‰p„ä ¤³:&ʘáÀW±gØWj_œ/dm³|<ÿ’ÆF¨Nâ +”;ÇŸñbÓ\ðR®íëf™%xÜá µð\ªáÙuç W©ZÞO  {¢/,Æ5oËH— …qR¯¤/Kõu|© °.Py˜ žÁŒ‰”š4ž 2¿ÿÕÊûž¥„b²Ó‰ÏŒnÁmˆäêºÿ˜5ž£mÛ»rýeã^lb5B‹Û5‘ðÊo¾¥UD£^?Ƚ>×oBA¯jRnãù60×iÚ8î–JâÊçZC–Ñ& ( XRþKšØÛ_86—b Íçÿ#!cŠš2{Æ«óüQ6q§ ·æÜú$^G2§{—P)ÚËg²œ<5aq)r´B-mSe!AÁñ‡> stream xÚ­Uy<Ôíú¶g‰hAÙ¾-¶l3ö-{öBc6“13ÍŒ½„DöD $e2Æ^ÈVÈ®lQÈ’=R–²Äú÷=Ÿ÷üÎ?ç¼Í÷¹¯ç¾î废{DOZÙÈè°îpC,†(–©(/wo‚5ÖË«f.c Gz4»»¨¨>!¢°®8Àa€ ÈË`555vQ@‹óÇ£D@ÂÎÚARJJúOËÞÀÝÿŸÍ“€Bb1Ú‡ÅyÁ1DÅíh‡D8€@¡á€¾¥•“‰… adaÁ1p< Xy»£QPÀ…cpIÅèߊÅÀP{¥di\ºpp(Šæ÷ƒÂq{4€ƒã½Pí@$‚!Òz@Ä( í ÛK€fG`÷Âá±´^4ŒFf…% P< GhQ­ çIô€÷bP4À"h7aX¨÷^Iû††!(  Âýˆ{±Üá EÀ¡!þ´Ø42µŸ†7…Aþ™4€‡#!xN ÐhhÜ{Ýù³Nà_ª‡àphÿ}oìþ­?r@ p4B–,O‹ %Òb#Qv¹½Y1Á °ôÛóÆýóã÷$±73’´$ 0,íÀàv9 ,‘øïT–ýûDþ$þ[þ[äýßÄý«Fÿòˆÿ×÷üWjCo4ÚâE€ß; - íÀØ[4hþß| ^(´ÿòúëmøïtÿ™ Bk‹.I“FFMVQ¤ö@ Q~p˜Šõ4­oûv; ŽG£0pš¾û­dÀ Ð_0[Ô³'„ÒoŽýµ šdû5È9::[™Jýû’•±AÓ†Í ¬¬òÛÅŠ6D[ø¿x°°?{„zzX? P¬¬ ÈÈ«‚i¯‘–šš¼âÿ'ø>øÏóò.dA 0tï´ûàòšó(¶7H6DF›½? {0Ô§I¾¿hõÿó¼ÿ àp?8”}h Õ»šBJ%ñ=lî0¸ôªÌØ|÷¤Ô67'¸[w3åΘڳ+ÛÔÛ²e]ê;•þýó¸_ŸMÏNµÔó¢Åë’áKÙ‚7NK6äðŒˆU«HM…ʹ>áL]pˆ üÚgþ‰ÉYd?5ÞqÑÚ5o›E¨«ZÏúõ‡dðiŸœà£gÖq\AÐ%ñÇ^r—Ñ.z4¿ –8ûc]¼±õMsSÝ7æ†ÏR™ñl¢¾ ûó'“ˆþWð«¥ÐæMBAús‡BžD;ß­o‘3kqcGÀ©‹ ÂÈ]]úI΀{¼™ïRD8Gœ|î=-i‘6ýn[S×â—& ƒÊ¾”h©§x’ÕâPÓeÑF)§s•Fwxì%tŒûHÎá 0c{*wêE'ûèsÝ*ŠÅ'´EÏkqEë·’“ÆuǺVo³ž«¥£Ø¦¼.ÎX°’i>‡b”‰OûF­^Óéè8] ?»³~`Ó:_1N{BóCòH¯¹ójAOóóí”ò¸ª¯ÙÒ¤¨Âæñã¯2õ“‡¢+×Wî»>¯»TS›r^)”³WûJ÷Ì«2³¼qVÿÒf'ãÚEº§flZqYAŠ÷~qõ¹S›Êʤ/EÏ^{&^¥—Lª‹RžHÒ"ë_y'Ä|´í²“Û8Ãý¢<¹z㚊›¶Ò¯¹É!Aè9ÓBG¶@£Ú9šÿ¢ägvÔy/†x÷Áñ›æÛÃô·ìo2$=óΪÄE‹‰â&Ù®ûøúïf=¤;=Y#Üÿ+Ì»¾<ð>=ŸÓ»Ç—q¥©¸án–ôÉw=rÝ=[ …BÉLôGl;µj.–› äû=ôñ³õ]7O¿ØŽ…›‹:Äh˜]—ª£ÁN?slºi\òØ<À¢äÅíþÔí¶_1Áž{ÝÇïî(x-ÇJA—Î ¨P[uä68´¢»˜ëð“rês”ŠfÍï–9qQ‡…–eñ!ˆéuqýž¥LeÃàó’"Fà†ñCñ*ŽÇèúÿˆÔj¸*Ŧõåb.„´;Þ×}£Ea oµpÉœ3¿}yEàÅ”ÁtÄ÷‰ü‡ƒáÎ}•’ú\½iõ)®¦—UeyÉ2˜×jØ9øÌ°ãÍQ¶ÞAäÜ×Q“W·F ~)™åÎw.†”Îôþ¨Ï°w†.mÇ…ÔÞ9™ÏÈoå@bèÚ\Ž»~ ò$ˆ°¦*ëXÈK§ÿxtû‰WžÔÝ1±Cäµü¼mQÂYþ€.É‚«ŸrÓo`•:Ÿ%RäíÀ*Ê9ËÃU¿t6ã7}HåBô’õ…càÃó7JÌÓZ#¯ J¿=~b0Zám‘’”:1%h¢tKMÚs)s¬ ’F3CëÌ™T¬üÐùRõi›v‹«¡Øg2fQXÇ'éI¿zzxf¨=û™7¸ÞÀ^ðZ %Ô.j*¤ôñ·¼{Á9qˆxA¶åWU¬duЬÆ?cø2ÚÙ´uBp¬à[ýY~ålò‚øº€VEõö%ðà Á xªÚyÔ4Þ§¥B.ô‡ð„“.ïíµèãDª-Æ%´:“Ysé ªY ù#Ñé]Iª`0«Ñ†T¥ËëljŸêk…”_*Þ ™ËDtè¿rfÈþ†…œ›«ðp2®Fø|Ù˜Ö¾„G äÁeŽšÇÕ9¯>˜é_K-® f–OJî.Øã™ @–lVF»>Óxýj´Ã…S™ÎÖÐ1Ñ42tÐúƒ}Žºï©þ•a¦YÿñQEØ'’ŽWŽrø¦¤&îoYÜÙaé:ݵڙ§Š±O»SÅt'"M¤oY ¾ôç&£¸zLè1+k[ªá‘báÝèJ6eÙû™–Ó~“Ùv†’<€QhÇÛ†]Wž°àA†ÍF=‡#òäÖñ¯«xfï;óõúî½<-£löª­ÅzÚ=S×–Ie„{‘£ Î 2C¹N¬Û\æBö[ìžlqÿÀûŽÂÚ_G÷K_SãÂÃõ·^Ó±»àuSO²…‡e®'§P»u<Ì5‚#LñE©æõgð#7ž­¤[/Y¹Ú­X5 ÁN1þvÉ£]}m1ô¶nˆy’Ç9qãõÀøk.˜£ýˆÔÞ€8ž :mú@„8X¨×H˜ ÚÂ4™žMìtšuÀàŸòÃqË mYmïw ?R:NŽ#Ôb]ƒ*‚«Y-D«ò#,á‹®W”·ù`ÿúð>5äI¨@Q¤"†SË8”âËÎyª¸Í÷­•š€ºíSˆÝ1¯ÌXË ²¡+gS¹K>|GÙc¥ƒ'$ûÂe9÷«`IE¶FÔ=v×+µ„לËò¨cÃÜÆ§ÌÉY”hþü—æ!,*»8C"ÎÙ­nÝ SÜ6Ã3‡2³ô,H‰G4_:zó9ÙäW ³Wœ/O¿ûò·&KÕÁБÙщ¨ùc¹'õǶÆÚcÜ…)j’m Nò²¢çv­}ú(™a½‹²Ñ€îñ‹’YB«VA»ªrùžØCÛú.2:ŸeÝ›²£ˆß´CM4ªPo’]ê*–¢| b‰ôןÝS¬­6”_}?ÁmÕWOUÃŒ3ω„žR…˜:Ê“u·)7©a)š_ç¥ßö¥ðp~ 1¨öÈ>F×"ß°q¿¨–:^{l4FzñAd»=Ð2òÒIrÀ$6À•"ĆüéˆÛ$qmNÌœu×VEa‡±r»=•Åq–þžWaý·ûä­Fª‘kÀ¹Ù±bºÙf×®ÃX·µšù·#-|Ïe#ùùÈâ¥qL° ;½ÈžX ûœ³o.•HžU€qÜ7°aŸ.éÿ~7L*.°?YÛO®é‹êuɘnÎhª>°4[©"NFø«hÖßê_î8­²{'Æáƒì}g/¸‹J´°ìˆ»™³a$Ø-ñ§"ëù#BÊW0*7^zÛ(%ÎK-×K¯>a°”8½J—ø<ó…Ûûž=IãÔ4æµ QýšÃÍû¬¢råúÆÝË×s.lè}yv4’áqƒ¤.ïó>Ïñší²zuŤÀÍGÔš/È_*5oîÊñò²<ÇI¦Y¹Í?¼?¶¬" ªrã”u7ûíVÕ§ÌÔôGŸwJD&påncxÕËP°±D±y=¢Ðn×h‹ 7Ky±%Åöü» Ãô'å^œ«¯pâÆi¹¥§èæVS]GßmÖ¡j«¬õí#ïßWõ±W˜7=·pæÛE”³˜Á,Õ®SWùaSU3h¡uÒ*5P‚RîÛ(– _†Ê{á‹6ÏÕð‘ë*%n«ë¦ÞWÑõn …þŒ ýë·Gå¸^±)hªßugi ŒdI0QŸ¤^/à;À¿å'Ø3V1øä/5.æT¤½?ËŽ Â{ævç—ãÍö)~Û­¨üÔBͤ÷ìh;Gœ­À”ÝjPnnäÁ+X½n©e>WŽvu2Æøi^ÁóF'ØCí'K-«±'ÞÍùp_ 0ál'ç¯+7VtyÇÔ{p,=Òžg²Í+gl£’¨Z+V²“íš&WZ—ôƒÆw¢TÐâÏ?Û=.TŸž¶óäC¶±ŠsK(õ[¾[çò@ ¤W•Ì+¸(ÁM¹6Ð]¶ l”ìõÿ>òIAÕËlÎ_øT8Í|yR(V'ðGø™ñ„¯^‰>ê¥ g2àæ!ªEe7„§"¡/ 8>pGf»œGÌEN_MÒ¡猈Æi^ã*çð´HËîd³­¶ÜÆÄ‹Â‘ú1<\u[ð'xC¨Ón,ä…@Û×]mî>(]í½ÈÄ¥êw–ú¢(Ew38%à|“ˆÇª†öǰƒyu<Þ…ßO8I®³…«ŸáÁÕk|6•+b¿¥”/ö!ž&äó›D¾aê¢Ü¼‡¿›åÇóÑ2§èÞ¶ùÚPÐeQ­«è3,±Ð µ°9AÏ*‹ÓÚØ »lLGp½ù oø,½ÊÏÍ3Á¨®ƒ†/‹¾)zÒOÎø/¾ö°êÚ½¤^›ˆÉåÊNŒÇͼª»MSHSß²ŸœÓL •5Ñêç  VžÓr¨AcñJ×…EAÑ6•‹LÞFÈõ*X »X›XÍ8W™£c˜ðB|ûOÓiÌKö€{–.++â_3¦–²)]Ç——ž tàA﬑äØ-¶(Óù•®Iç´™å6º³iS¦n’Uf¨¿ÄjßqqAΕlé_‚Ž|\žœÐ8èqëǯ¾†ò$—9Õ…nRq„J-.d³,é«~›ÞÁÏa\œ4ËsV= mß>®d1÷}7¢,O·d[ÛHùBÕ¹‰ù%:9‚ endstream endobj 269 0 obj << /Length1 1647 /Length2 11050 /Length3 0 /Length 11902 /Filter /FlateDecode >> stream xÚ­veX\ë’.îww×àîîÞXðn<¸» îî ¸ww‡àô²÷™3gžsïü™;?ºŸõÕ[õVÕW²™²£ˆ¹ƒ)PÒÁÌÈÊÄÂP´¶3u©:Ø):ðÊ3ª-]dÀ&¶€wŒ‰ŠJÌh¶v°7ùZ@s€8Ð ÀÆ`åååE¢ˆ98z8[[Z4ªZ´ôô ÿ’ü¥0õø'òn ²¶´|zpÚ:8ÚíÁïÿcC5 ¶,¬m1%eE)”¢@ ht~OBÙÅÔÖÚ om´iÎÛföæÖ¥bzçL G ™õ»ÐÝ èøÄp:ÛYƒ@ïÏkÀÒÙÄü~`€µ½™­‹ù_¼Ë-þÈÑÙá]Ãî{'SvAfÎÖŽ`À»WeqÉÄ ¶2ÿådý,Þ5ÍÌ\þJéoìæ›XÛƒ` ;ø/_¦@€¹5ÈÑÖÄãÝ÷;™£³õßa¸€¬í-ÿÀhiâln ÞiÞ¹ÿºå ø/Ù›8:Úzümíð·ÖÆ` m-˜XÙÞ}šß}[ZÛ#1ÿÕ/2öV–ÈÍ]ÿ‰¹ÿ¾ š¿z†ö=s{[€9ЉYÑüî@ó?«2Óÿ^‘ÿJü¿Ràÿ•òþÿ÷ßkô_†øÿwžÿZÒÅÖVÑÄî½þ±gï‹ÆÄð¾kò€¿–­‰3௅cmö™šØYÛzüwÆÿ®­üGÔÿÁùïð?\ˆØ[¾Wˆ‘•“‰óbk¤µ;Ð\Ùlf°0±}¿¼¿åöæ@g[k{à{‘ÿ¾ßw#–ÃÔ­¬Í¾ØÿU Î@@{óÏá½ngÀ¬-®*¦®CÿßlÛ¿••ß»¬îáü‡'-óÿ<üE%*êàðbdåâ0²q³¼ãû8ò²qxÿ?ÜþMÄú¯³‚ ØÙÚ ÇÂÄ xÿÿçï_'ƒ£‘°7s0ÿ«ÔÀ&öæï­÷Ÿ‚¿`3gç÷Šÿ½ Þ3ÿçùï!ÝfHKófüA6©ià¼ìQq½ž.Vè`Çâzõ‚<¿*‡NßÔ°MÞrãçê`¦†q¾×V¹cÇ—]Yº½¡.\[êÎoÀ³\bo Úî<ŒµOmÜô{̆Ũi'ZQ^ç³ò0º\,š{[£*ª†EÏp$ãmìÎç÷´~®y~Ø”wŽ|ÌRêbqÚÑ 0kòO>%ÞßQ÷ ôw^ÂvïÑgÅ"Rñ›àù$“%=ŒoêÍ^a]¹]ÝP½°Ò^\(üíÉSÄj=§ÿ°ùÑ´_Žë‹¦€ê—¬X<Ïn¬Ä)¡ÄÁÏéÜ_ý%k(bÌB®.Ðw{øoÑXˆ“×ée5Ò;\µýnë¿¡~•d¦aO?•q¿2ÉÑ2Ñæ°jæ—\¦Q]!É@V»uQi:ô%ÄNÈý¾ÈìŒ&­®“ë®/´— Ž?|J€ËÞÀu;”.úª0¨>†ÀŽaD…éŸýxD~wê,ªZ¥fÁ,t\»’ÇRTn³uåù\gÅ-í3®Šý+kÚÛ°O¦òëà%ó}3kSUž¸éuçØz~iÖ2×dp%ÔYb–ðS²ÊÍÞŒVLôEUÑ"ú@?ÞK¢fòF¾,M¨è™ ïX¬EÈ´¼¯~b!pZ=A¾ŒØœN!… Î*\ÕÇxè²të,ùŒ $aÁvd¡/®^3>Ç’Ž×ÉŸØyñ!>Ä<¢üN3Ó2Š'AZz«N¦Ø[ßQ¡‘#²ªJÂÈÏR¼u0«2òõ\ËPûˆŸ‚+ÀeØ&v¤«7 ±O?×x(ÙqÓM ¡^9n7(Þ×]Õ…à}ã¸À$IìçqyXˆé¡à†ÊK5KóÙ¨¶ø¬£™@,Ïëö¨û>>^H¥°ð™'²UÖ§àÒöCuôq.)ýž]eCX§;i#¡e|gÞ,/SÔ}Ž~{/_)3 bõGëKkp£.qp¡MƒÒúg¥¶G%‘Ëžjµ<.#7”÷rª™!éECïÌ‘£ž„#Hq;á\D¸”ÏæÙV oÓj@ä:¶‰1òÜ.W!9ºè7»ƒ×jí Çù'ÏnD«F…RÌŠ…Áwa²^šh徑Žv4˜©r#Àý‡öq¾ÎË®)]¦ÇݵoýNîk`IrKm/º¼[‘³±ˆæ0kŒ{Lc ið·svËŸí³lR±9±ÊÉ9ÿba¡Ä\(Šhsíiž‘yŸ¹„)Þ´ÃlF1=ìÝ÷!¾ÙÃ…A„|¾Ru¸)¹ÖÞ%ÈÛtÌ èp æë/Õ‰tꀫÎ[ðèI  ‹5—Àð‘ ?O‰Éáò›5¬ŸùãúÚýàÿfä9Ñ ‘Á a´›î1ž”ù»Icî™§.p;9[+鎌)sn €$g»B˜æ)ŽB}W?«¦¹ñ³æ’ƼŽA|F{®O÷Žo­vûÄ•< gj$ñf ©›r§‹C-iº¢„€ýz8ÿÒe€wd®îPæ{1iAJð©pºîæ–büÛ˜þ™Ïj‘Óžz½½¾È“6½PªïœeRÍG[s½¯KW‘¼v9÷žÂÛ, 3!Øß5Ø¥ÉÁÛ õjžþ˜<rJ3gmivm­o]‰Âàô ØY‡¡Ç -ªNª‚%ÜÏ–êvq|à MÏ`_~DÃk\ÌØßò “…ž/Wá#q[9–¯:ÏÁén †rÜ·>ºð}³ü?ë‚$H¿¨W4ÝÔFmBÙqàD¦ãÆb=‚ôï£åޝvW!¸©ØÚ;ó³ä;Âd’ŠO“àoiÐö¬Qº·h.½¿QÆUûǵ¯ÏJ_txbîùÊ¢ÕMÒÖZL‰ûGÜò$Ò¾’ÔJ슅®ê/˜pÈR–\ù¨6k0é·¢vqfh8tDš·û”E3(Œ7]B×L¡ß{¯ ‡;zŠúX ßjÛÌ1ÄEñç$¹>A‹„¸.vSäÉç AºM‡à•Fáú„µýa{Aúœ¥»RZ¡¡C8sXò@O˼u£,åXBηp_ÐÈkyøl:hù;Àî©ß[|Go™;(ÍùCâë!ÚHY?ƒ÷‘awüZœô¬µå¶ÆB%#S:ò\m×ðúzý2;" æÃQ>X"Ô˜Æ(Á:­hn‚м5ŠíÓcWÑ<¤Ø¨ †Œ{~‹!9µ4ÂÒ8žŽ'‡ÊÖB퀧Tð½çmiŸüåÖ0U ŸŠr‚Ì#t^YÆ12Š"JÊ#dD‰)Æub¥“ÌùóçÓÀí3G>éš¾5®É%Û¯^ÛÓ@ +±„IŠìô>ïX<´Þü`yà¶Wú°¥b‚¸OŸîÖLð›ê@Éw4tÅw¤˜~ÞÊ4YéIUb+y*º¼ƒ1ˆõ%E2¸¬Ùi–½­ŸŠz’ÊV6 <#µO“¼@ «‰GÑÝÇ›µOsàg ††nÌP¸õ N¡z²§ò½ÂI ßÑÛˆÔ4׬ŸVràt‰É>\{QJkŽ5ˆ®˜+ü6õkÍåER¦fk¿Nh*Õaa°”Q“o<2¸ká6—ÎÈLÀéS¥ÊŒß½>? ó­¦%/ÒÕv{ âáôÊ–ÒÑ™``s©[>Èôé§µ,Ò7(D 5wÊøl çE"gÒZ´K½À£ñ»ãä =˜»ˆó½D ’˜ÝÆksxŒ©«%¨)¯c`s$ñŠ$)nz™“T¹r#ý³sô"gc|!«žOpÈqÊe8«áVíAÝ:%•ÁÚ2!<úîo«¬’áVhx±¨[ÔQëP¬]÷#´ˆÒŸ1© T¬J¯_ïZÚù4“ º 3ÏåCur¸az2ɉ3=P%fâWFÐÚ´„ì[ÃH1çf²‹E£“K(æ/éŒùò“LpsÝ äæ8Üžñ5»Ìër»d?4‘¸DÈ—ÈÌò0d—+Žuf—Kú† \ÀþÎøéT¨í¢ï\ÖR¥áÌ»GÜ>稭E)O^Eæ‰X(éŠÀÙU¡m]%šòßÝE$¬tÙ³yhêŸ9z9ë¼`)M$\­e ây®S¢2X±AKh¥òMÉjÔÊ׃‹]ßÝÃGàä =Oÿ¹„¸ÍâWÉC¿=õNˆd„a¿¼}Ôx®C—·ö]%g½D›It™É NA$šÛMë½íâ3:±“­tÅÞ‘ký:·^!ÔÝe»œDô~gpnÎ>yðÐKDí—Ý`è::Θ¨ˆã£agY<´Š/6Áe¬ÝËùkÆ.®h Ñ9wKñŽ)ÐÞ %óòåj]ã·DÌó+«ê^sl1žƒ: ŒwìIG)'±£$"ÁÚ®…¯:$°H—¡Æë Øôºsй«(RbµœÝ­['¼éÙ¡3Hq¾ÓécÍ Œ¥§~ ¡ŒçõpsÊ‘‡¬$T}Ë/ X"Ø­ÈÒ®DíÜô‡dÍê‰ÓAû-ôƒc¯á¿G¤è×t½bp7dRÑ;“}P¡…Øc°“ñe}8“z®5û t ™‹G— Æn·WÏ41â4ðÍßÛwUs›LJ/”ò¯»–:ŽtÄÈÄ:¡±~BÑ]0Ù߸ëwø"%õäJë²%ï`Âo©ß!Êd^G îPÄDÄÅç¦\ýÔKìÛ‚¾ç“F±êB¥Ì{@ºšÏhç$‰!ö¥OÈjro£4G$Ê)R¥+Öàûm".ÙŠ6°x@‰R!‡5ò˕ƮZIÄ8(›7‚W…–%nQ¤®§ß 3´<ß­aϮͅN#ÏÂZ1â©h°˜7ð‰&O–¹÷ ‚w­Ü&]ö€PðPÜZ‘Uˆ‡ŽmæÛ‹Ýï‚’£Ó&Ð':EÍg{úêUø}øŽj–~m9õFh·ÄU…Wh½Nò‘.4šS7c–ŒÍ|Ÿ¡ÛЬ þ?´…øÉk;&zØQ¥ÿ 6#›i/ÃÕ¡npþqÒ–eò8ûdUJ„‚³[q¨Mß{1u^ÂkxuñYcr'ß×߸g25@§Dg£¶˜jkí9[¤1J[ötVÊôI*ûv6šÄ ©¦­ÐTÚBl¿“ÀÒüùÛv—áÆA¸›92ÌO‘¨Íp¾ü²n´=¡lˈmô•÷ÎëÇG^¬{«8B„¹a¸-}i×q´ð‘‹£lÉ’ÓO,˜Ø½¼àªä æ_y”ÂòG8zZóa‹`´12RaYÞ—:P“â|p3ì¾}êëfO0ùrõÛß=äaÃÚ /Å9¤Á‹jÌ¡é^¾T*ºÜ«ï7ÙAR‹~íÂe,üûvQâ,ÛÕDÇǹer¸é“UñX׋šDùQ.ËÌh”«tôB õüO¯Ó)|~L¨tp}JS ÏÕ„{å'C.x½’Ïm“4‚e¦þ9l®u˜Ý'm£IÞòÞn„ˆ 9Ví]Å/•ö^(\íõplÝô\Bæþ ¹OÅYD1°¸£‚eoCµö>z[Ÿ¼˜TXl·vŒCŒ‚/Nžyé݈mW6*Wüá9‡¼‹½óSÖ)ãkUZγ¿‘n·&LõDÊ—ÍU­Àl*²Ê†…ºòÏãbŒ ë*ümÞ`bQBò a²Ñ½ñ™uŒèÒSÔœˆ‹‹~ÓVÆTlE-û2ÕC,^N íB2;ü³“ï:3ï³AQ`0×õ+è0ò×'"¡©ñÞ {Ï2üÅ ª±¼ÔNºÆ O—nÏrƒò‚•–ŸÏëe°h<ô3c‹¤C2ÅêWû¿oVáæ{ïštab½ WÍàÃ4lJûþyú|+”[}Cà3Óƒá4yS¢t$+~glv‚ÿÀÖMw–„à¾XéÂðçäýðc…zpž¡™»±G=øíp.»ì ¹ŸM¼}‘pwN:ÃNh“U¥XqzûŰ½Ág ‚É÷v±•cßMäÙ?g3/õ%õlHš™é;±É£â‚SV M¨4g õ/Ä3UÚAL‰òfÇCÕJ²'ÔLé JÝ£@ܹxÞPëdʈ‰F3¸%tÕ¶¦ã¸b嘾pžb»…–ä瘂kT§\ (0t ¸;ZQè\fï¹×ÙñùÐ!AL¨5¿Ê÷:™l9*V×Þn}œÏ<Ó]^·ç»ewJ×càŒ³`R;§WÆt¨`¿Kç‚Sî”ØE–å/«6kÅ*yEΪ]êÊ–bÎlíoMï¼Ôºü¾ó‰ëÆâ GB‘)ÐïÃ}k~Ð~vTp—¹ ¹o%¹qË{¦M÷Rl¶”ôápQM³ƒç+=l’fúùY1[#—­¦…ê—Zc7 µ¥5ÝlÝE¹’¾%Þ¡5Ý4ÈÃ0΂WBxúä,óŸÒ9ÝÏauy YôQhp Ï&’¯„Ù<Ýd^Q@*òÅB!=¾»(”o™¾6‹oàìr6Ø‹zé[Q†¬¶ƒglæÊÅÀU¹!7Mú?’úXÄ8Îx4ó¼R%F÷ñá¡žë©Ø'dёђ¿ÕëÖ¥Y5Ÿ!K™Ëq>œ“Ù,ˆ©`rG+`yutƒË–¬oÞVºJ2p¾ éæBp"ÝÚNœ’KÍaˆ|Óm3È?CvПïU ù(üçøx°YøƱJ‚Ëv|ñ⺽‘£düKK`‚(u¦léÚ¾º¢Åµ¾‹¼W6¦Œw¾ÁîYòw™-ÚiTrNIý£4‹õ“§ËiÙŧùÊ;ç¡Hèa¬”òONŽËzue5ì}È?Ö&¨Òˆ ý½­]™s—tX‹”ó‚C‘È}:”ÞÍ>é©™ŠßPÎL¶¦'6s?)þ~û¤áηȊ;Fß20*)Úd‹Y²¹1Ô·¬3Ù~gÛSéžpÚ•n@;¼Tæ:ƒ”ºùŠéš­ðt|>gu 3—N±Õ¸{(fS·R*®F x†Û§'øOâÊÏ.°´JO×€ò+e½Je˜žòÃfp'wÚ>0Ó’’by†}ŽN۟خߞÙ^4_/ɪ×0 œ¾ZrÄ@-e »>Vßì±gëk»QS]Y‘¶]p±˜Œðͱ>ìjOþž÷åDɉ:P.ŠnøÙOÎfÈC$òú!!{®doØ«eÏê“v…ƒ­Ýº¤;I‰SœL·ü\¨ßÑ™¾N5öëLyò$³„uÜDÜí-~‹„ÅÀZoÈö¥ kW=pÇcëßÒ!b+ñp¨”|åùo/1)`žï@‹Æ­Uv›:ìê7¹—·ª‰þ½ièƒÆÚ”4°‚È'µA:Í?'5ášd÷ëì ”v0¹ËÎë!ŠÅS ÎѶ–1Núì¼­žæ;¶·Ï³ù®Åüˆ•%/LXê{¾…*é§l†iÆ%ÆH—%‘ûåªé+z3nĵ›°¢Î`xˆ$C —Œ_5—úüËÐ,†#ZóðG>3Ðè§%§œ¶B ÚŸ•®5…t0©×„²ÐÜ·»”tÏ;É ô Äׂ»£¢âSÊ‘ˆü1>Ø1]chÅ9i¡èÌFpHÐyÂÓ=‰+Îèo›€¥UÆ„ïàc?³Íd*NWkÊ–µªù½`,-/Ãq1ç§­ÉMÇ/W·©ŸÌ¼R<&ØÙüD²°f*¤:X 1à©L¼´û„±ºOjʶ 8––3ÂÕÚþ.ÿsw•ÂÌ®î1}mæwò—°G\%æ²l ¿’Èèwæ·AŸªÑ8¾8ï±VŽè…^ë«â±.еããú‘ò‹ëÊ„ýzûÙ°z›læ Ó#±Îéu.£FF~%ˆÜÞ÷KzCwwÌ:T–ç}QgŸ‘§;7f ú˜ÃL¿L˜Ž»ŽX¬ÑŠ)…5ædo ÃsÒÈ ë±:‡¾>¶¼±ËŸÓ°–…Ùhk¡ä{;Ór;¼áEèÄ!XÑGÌ]=JVy2hàÞ!ÒÕŒ*VÝúòŠ1å‡õ°jÒí*ò@f3›þ™Ÿ¾§õ5íN mH–>©èhÞíœ3c†>”:¬T¾Ba²ÃН¼†¶­Å=ó2@5V…¬¹x¡tunyåah·8¡ÑÀ׸ìaélu¾wö¥Ëð7–òÏßyÁ¿úcRfœ¡ðP¶¼jbèío#Á¤æz` °=Ö j%h@ž€+Ÿ±Ä?çí ûh3ÉÔ ?¨x,úeD‡È²æb,cCYîè!²þn×­|Ðñ¥#G{Ò7˜yÎ.ä\©{ƒ;@¢šÅè8ŸqÐéZþõ¼ëNzØ-ËÉËÎJŸ¹©¢srq@©lh~¤Îbåú®H_÷«ßúý±4ƒôŸC4ˆJ{K(tÍ&h ŽƒlØ)Å+E® Þ3øê‡Zý3ÍæÜH}þá, ¯‰ß×Sl\6°ÛXJæÝ‚Æï_ÃÅnaÒrt º¡Íqô4vña€"‘ʽ’ßHçA£4=V ;ŠË\ß'…œ]OÑRJ_ýÕn4’cû0,ªÞ|ð“&…þr°¤¤™Ža·‹Qú!Q¸Ì¯)™ÍY[$wþnÔ®MxA¿ï¬D }^šé xSȆ2FŒó,žN÷5@á\¾¦M fµcÕnkžØ®<_9QÛE`Z$~,olìå–õ—"ít‹E“ <ÞdÇQ‹¯e?5oºùC­Ë¨Hgj GîúÞ8FE ѪîiÎüœ“‘ŒM)K¼xó4£Ö6€´*_è`ú·ùÈl^ƒ‹ýk& $îý£³iî>+ð&Cþ•/£Íeá~…~h¯‘M~ðÓrËâæá«9m¾¤@Bý Ö<ª„»ý4¡õüì—«éRµ’¬èµF?´ˆ“Ï¡‘Þ˜ø©“ïžã 1ë;ªÁŽmœ'Þ¨ÖCüêÕ e¬&áÂõÊûGäLî6™/ZæõŸÄmà‰˜º/AÀ³×P=Kޝ¹Úq‹7)Ç<ÙM:)'3Ûéåa3m@®\L'¼NÀWú «Eñ ¹kÑäF™V½SOÊÁ²ìúÅëY([S E­Áö7KU1-t‚Ï®rU0 EbG²ïæ…÷^Ñ`h2G¾eO–P®DÍ@Sõt>4xŒP|Ly¡6ºæNå=_I\(«¦†íÍ•$!žèk}Þ²ò=®`~@ÄË€œjPoë·Ðw&1‹?À% ûVY™q_ìKÖý!dT1›ºš•õ‹·Þë!X}· ší¦Îq@`ÃZí ¥¨iõÓuÆVÝ-¡R‡ß]ø‡;'Î…„ –þ=÷ ê‰M¸¨Fš‡èíÃ~"]ƒCóKßåb¯ï/i(,=®§jESCŒïg³¡ú‘eCÊ—"îVÝÐUòÍ:¬ööBF}á+ u„ èqß%IÛ/ò`e•ì¶° G\ª´ ÛpïZ±udkÌ|Äc4—°½™0ý;5«²!Ô>ßã_lKži>£gLgYèæ ¢DÞ°|hQó# R±Á­†ë&Ú=ÁÊ|ðÖ è›ü¬ûè½ ëˆ$ÿ©ýëITRµ™݂Ǜ•›í‹«)SY“ 3Í>.ÇëÄE6Ba5!µÆN>_¢ ÜCÚp±~;1²HüvÛc¢sË nˆ?FÚaúeo@„"–'âç‡Z+¾ï? 磼§­ìhÅ~Y½Åª‚6îíí.51qèIÿ°÷;‡,"ó6ñsµ#ˆºï_2öÃå­‡’û}]Ûì4€9žÚ€7B¬ÜQešø÷‘Œe×t©WQ¿Î@#vŸ•»ÀÙ¬ïîct‰T¶õ¦Â¯Í=ÆM}ÌépbPn GMf–`‰ª_}úþñ<îMÚòhÑTR^¡·ÖýytÇ㮽k«ãKÝ,¶Ä?7²ÿÐñËq·A‡~×ÔÉ24ržEŒž¼"ÿÄÅßN@ˆ&+˜jyƒ3P÷™lU¸1¾c<-vqx }ÁéUòÜ +v…¨8˜w“RÚWà¶„,Âæ³!øÔ Ç@I«Qí‚.”k¸è%’É-¦P¤s [éGͽ„XHÞ&Ê#—_“FôJœ'üuýÓ§ööl ]a…ö(s¼ì¤‚ôj‘¤+üô÷gx1´©ŠÂAíf}Œë~Ù£{ež¿4¾¢ýjr(/Y+z¢¾?H·€%CìE}îGKa8ˆ(¶£…¿È_…ðØ€Ù~àC9Ä1éáÛÃÐ*Ùé¥F«wÃèÚ‡«U™Ö€°Ù‚—«›úSžVM9ÅiWÙ}mÂÈ£òÑr,Ñáù¶eu© › ͧ1VôAži¾á#Y°¸¥°øqÜu`ä I3|ò[B°Bݹ§ïÛðŠqŸ@'^é¯Cà¹Nÿ*î“ µëå‘sbÛ´hdËæÈËúMQª^t‹/<¢¢ŸoàÖZxœ©èÐP Ó¤pÒÝqªÍÛjúm B5ÚÁ1]Z7Ä…˜z™RA…û/J\Úð$ÅeCx:ÃÙ“¬!ú”Ò6/ýnꢵLœŸ-_MnËBÝNGÆ™²˜ #Á×Òçw9ª_ÝáÛ´M¯¨IjvèXäÀhE§ä]’ú¤µ<ÖZý·]ëÈ0Ì6Ô!¦äFVYF«ÈË, @Z¯s +Ûï’Ê=×0ÅÌâ?ôþ¸^_Þ×oβývnȧœËË'éÝâ¦>1üEÛ9–=lYI ç,ÌÁ4ôbCÃ$‚‚åæ;®›ês¤´‘³A ê§;ôÒ=£#ü“°àQõ‡mP-êu·“HPuQYd1Ü0ÎÛ(öe˜‚9k¿5dŠÙv.4_‹Š!¾'Óï„„ÑÑ 2Ioú¾D,ñ;Nìç)®ÞWx"ƥѹï_?üq–øŠ‚ŒýyÊfçïN»Iƒ³ÆéBUc2¥å˜0mÖ†æöé?!Dâê%Þ?î½ù(HjT˜{؇²+‡°–eYÕ‡7Õ_%I0ýâ+âÔ"pÃC Ö IÛ¢e7«‚Ö~[^:}aÄ-Ž =žR›Í~þ¼ÿ=–áw, ïyùÍÝËÛÜŽú¤Àº¼åÕÉSVÐá—…ü9 2‘ÒGø½%ÏÕ].·1,ˆ{¨ɱhˆÖ 'ê5-¦×[™ˆ§ëºsƇ% ³hÿ5|Ü-jDž£F©e:K’ëVCÌ„3Û£]w=—K”´÷z3‰8Z|©H3®ã½9çº+¬ eîÂ×ð*VÙ [é]ÎÕ¶ö×Î\ehó¹$TÄoìfWü£Œq_91—Aò^éqJAFÚ•8—ò‹ÜÕx2?ŒŽB•Sp†‘A'Ýjߺ°gT^*6ÉÃò-EèÚE<´8»Ë-àNšÅg.Ð ÷Aws8@þää3u%ÇÿAw@´dW´3átoš:ù“çKKÊ‚ÞÕJØYŽ^Çd°”½5@¼7iŠ·v™ã‡'øÙköŽæ×EŸÅV•k¹V¼RÁ¯uk³Bl¸¢Ð®Ÿª šŸ0cE¡ç{Á¼d|ŸÒ¨‰‘¯èÂOK[Þ}– £-ò´K1½9;9ÒÁ>V¿ò®IZµØèNvÍY¦»ùŒ åÉ0ø_ÐTù°­ÒöeIÓ¡k=mâ¿3HD6»#¥c‰±?<>:ƒñ±ËD…·¦lW§"r«¬qx÷dR&­> endobj 201 0 obj << /Type /ObjStm /N 73 /First 664 /Length 3795 /Filter /FlateDecode >> stream xÚíYoÛFúÝ¿bwQXs_@PÀG®ÆNS;MœÁB–[,9:Ú´¿~¿ofH )R¶deM@r8Çw_3¹÷„îáLÁ \øÔD2OO”¶ðtDkOÄr|r⇧!Ö ®a=c{B0ø=žpÁ%BBà !— C¸2Ø«´Á˜ld€ /B‰=!–:„ºŒÀ9H¤Å†!RÃMHKó°T:¢ŒÓÐ,R®ÑÈŠí ÌQ‚%€f¥€)\® ±ÉPŽX4kF¬Eµ Žár­€s$h`Ý!™Úz #Þ1$S 4ŒÝFAK!˜bqdÍ… …¥A B`Ÿʹ² .xáZH E%:œìa‚ðZïYÀRp‘JvHäcKƒ(P;Òx¼ã$§A•žPtêRRX³•òrU¢@PD#ñ1s 8@-- × [ú4Ç–Ç> æH„Ä–å8W ×Za®0¨W„®³{OžìÑ·Ý„¾é_{ôh2žãù L‘Ážíѳb6YLÅ,Xoè:-®†ýÃÉ7òçh¯{‚–ï9ÿi MD §ÿøcÀò “'O}&Pv0‚M ŠMPˆ-»%’—Ú ]P¶}3 ΋9ù?#ômñmN>•8:8±MNÐïvÂÉ’üŒ©vNú‹Ÿ//qñË[4Ha"¼aHÕµžm˜œÝÇ>g«ìOE[æ*nԦ߆„` ÷»‘‚\‘¸å÷3‚àêQvËWí–od·6P\MC™æ–Ê”»-S‚¯2åwÃT‹¶¦R­P)ÄN¨Ì…Ü>*çØšúUÃú»É¸Ëµ×SÿQC‚Á ³¢„ü¦!Ñ£±‹½‘pUœ‹=Â"míÿqœc]b]¸¤Ö®E„'ÆØ }ˆ!ÌM°ñ*×ÜwUóFui¬@@ˆ / ñ ïÀˆ…øSØÂ\,2p]šW­KmuT ûK"ðRvJAV„¢ 3‚«6Ò€ó`Ÿ.)!¿‚ p¼\m›ÖÀõi§à©ê)(bUO¬s”éAèEhâ F5Ó=4‹ˆÞp¾‡ÜK˜/¹íqâ¥ïÿJa?—MK=ÊøÖ#|Ï‚“= ˜¡è…q¥%Ü‹Kí`åÕ ‹½Òõ°0•€Ó:ð È„»üÈ;òᔇ¨É Ç[3¡ìD8FAWÇ ðÅy¹:Ã(”¨¯³H°pdëБ߱´7¨‘Xc‚ŒÀ×d€(X/ÊQ9¤*E( ÊOÙsžæ†½CÌhO 5¢\*Cžhõűß8Xƒ7³¡„™–kÔåAæ¬'AÚ½¨õd'¥—öXwbÃLrbt¸‡8q°gÐ[pPtâ,‚dðKûÔPâ‡ù¸V³Ê·rUp,[^—XúYòãšO#H_òaäƒLåï™Ï¢Œò÷2a_Kâ¹¢#ÑUÒ¨”ªžU€’ÚÌO+þPæÎW>¬Rüˆþkú®ÿùÿo¾bí:Ôg²¨õ¹yZÅ­~ bq-­–ÙlWiµòÈ,­"­ÞêÊ»ÖfU€Qzà¶Yµæ‘)­—°ƒÜ²g)ç<—󃧧±ÊÛ¯­ ôæòI^+«d5‘çá(r‘…“ô^òÿU8ÐaÕ§XÙ,y>æ¾L]í½UµÇj·æ4F§{ëTauÉ'fÈxw!'Å{`UëÃCµf¤º¥'Ê{FdÄf=æg£MÈž³<ä=л3¹C(^!žgu¸›*^ã°’á‚aÉáBš¶Þ 3Ép!¡;eqQ(ƒ't “»w R2®ª˜ì¼g"S¡ÔX½/SÁ²ØË2©|L#Ønƒø5K­Xäxs,|Ê4YurÒ2(TN™¥ÉÊY—i²­°ÀÊ}5ŒÙ a¬LŒ.,B±«ëv鲪â{V^²ŠåÖ8–UeÜÂøTű,Þ‘ep¢¯d@ëŒ×K‹T”ÏfiQíˬ[n²¨Ö¤’®e{Ç=$ÁÂÊÒL5Ùç2«"Ûý,ä¼Ö­äjj5I`Z…rUé^ voŠk+£¼‚­¶Ì™{•¹«t¯ªªK;É|nå’I¬yn,]µ”‹H¶§’»ªÐœ·j÷™úsh­BŒÒqK3R–O­xÓTRµ±j)é]¤f(‘­oS` ›Š¢‡Fî–ÁA1wÿ6Ũ­ ¤*,Fy!^ð•­É#ão5V´.%á¨!I>7Œ•mJN{¾Mis€Ì@Úb‰BycÛµÎXKï\‡•ñée$úôÏÑÔÿÃÑTRJüs!>³":QP3‡Ñ•vb't"ÖÉ1׎Y¥•€Ì&*œZö… Âª¾*à,ΟlÁIèÁl€GÅÆÃÌ£þÝ‹bx}¯NîQDƒcû_Îû£áà`|=* :ÎçÅí;ÐÕ½H«”ää¦?ųâÑÁäö¶OÇt6êÏnè7ú׿#1φB(™ŸMßÇÜ»‹×¿æ\;oB%Þ8g»âÍuòÖ§Zнþ&tFçuÞô&¼¾=¹xs¼uéM±RoÌ?†7Vrf|'gwø·ƒQñy[SœSgÎnÂÜÑù‹W/.€¹ó]Ü Oö½ šÃ ´^r¬n§9Å:ù»\ŒFŜΊÁ|8×9ó›pööôèøð4pÖa’°?Ø÷ 8w¸õ»`Ìt2v;/f5~4ß„ŸÇÏŸ?ýáõðör1;ŒOöÏŠëE;g /ƒ;K P•= 3¦µÍS¶ÃÏØ&gë€Ò#zLŸÒgô9}A_ÒŸè+zBOékú3}CÏè9}K¥ïè{zA?€göoïŠé¬?¾¢ýÙ¼˜g_hN/éeð%Æ¢Ëþ”^Nûƒ"Øyh;Í/żê†v@4MÆ)¦]Ñ«Éh@ h¦Å×ED‹oƒQÿ–~¦Ÿ‡ôód1¥×ôzZô zCoþº»)ÆtH§_ tŒŠÙ,Äñp\Ðñâö¨^c<™@Ç]«'R` …‰ÏáäŠÞ3ú•~]34ghLæÅÕå(6â’)ħYq;ŒÌŠ?€ˆÙð[ŠËs:¿™GWpÿsBt1¾Z“iAÿ bè¦Ó¿‹é¤n^EðÓWç“y÷Á¼'£«ó²’€÷X x˜‡sÏ"7°ðZ˜à]Æs ÓRÜgaíö…Öuùp#ë_¡ŒÑ"ÀVL fMMŠCuÍ“b*mÔ±QºyþþýËßsE¬ñs‹YÕ…Ã:N¼–™"x]¼®Ù¡§3=¹‰§ÿ²âë¿­óöm]9ª¬æÑñq5ùsUý{Tºx«^ƒW?Εc# -ý:™ÆÆÎ]·ž_Þ(©¼ùéøô¢iB¨ï.3rhFø3 Ø^?ÂŒöq8’ë4$tÒAð¿Êñ†™·¡ÈæKqÔå°Q pröôé/eÊ<›Ü¾žø“}ümF‡ ˆAªt&%O^ÇÕ |]Šùΰ–:†¯w§.WŠòÊ¢Vî[|´éʘ—¡l ã4Õ1¯_½{Ö¢”nûÄÃØ)â½½¨L/hfy¡æÖéeŸëJ3¢¦Q·Ï"ÚåÒ*£ÔPJßê¬o”cŸ¾>xzÒ`}Mt7Á-K{9߶ηæ5·4ˆî*Ô¸îeL_ЇÓÁâöó¨ø¶š£-߯ ÞÛ¿_@ÿZEí0±%„/ûwÌÍFõÀÅÅûo~j1šýóQ<ÿ7ö;›Ï¾€ýå ¥€Ô™Ý(s]Ÿ½ýÐÂìšäe`~|Îx“MÜGglâk¶“Ñ¡v² aû%øÄàóÝýÕfiå«fV\>Ô—68ï,5MK~|:L®†ãkà}øùsUü(‚cˆ”¥«U›“l³“ª¯Òu–Õ\FR«³U‘!ÔMQ‰ûÄqôôŽà´è6Ñ‚——ÎÜ,Ɖàã¥÷•~6j1f”›¹*¯A©¹M`«)u¹-ÍÔ UR¾ [†‹¼¸‰•M}/ñuUƒù^·ÜùF$\š,xâ k¬¿X¨Bh ¨aÓH¸áY‰ŒçãµâõÓªs‚,.çá;Áû³"ü@u峿ËD¨ô›ÞgÃélŽnC4xÝI?½pÀÞ¯æ7³ð5LklX‡¾qÒØÄnšØ½Í±ch«°óͱ7ΛØ];Öv•³.7GÞ<«k`׬‰Z&y–¡·›£o¨5±‹&öœõ5ÛuçÙW“ˆã“2é·Úex Ÿ-mn]Ç&MÊV SÔËdvAXç1B“0·–0ŸÙ¬» líæ´Aœak‰Ëc‰ð» nÝŽ±I›x¸FwBÛ}§&}j½ìrúÔ.è[·»iÒv7äFÇwAÛ}ueƒ>»Þî”Ëèc;¡ïAE~SŠ+®kòdçT¦a÷*ñ —~â²ÀâyùŠM:x5¼ÂÂ1|w¿w#ñƒ/?¢"ñ³#¿ëù´ð(æfc4‰þCbiA⟶‚ObI +$Z!±‘¡ð«‚3âÄÖÐ]„î#t%ã#ï“Ô¶Ïã–PÄ$™'¡ó$uÅŽ×nC–jÕé¥ÂU‘tÀ7S‚¨áÐÉ‚bN„g’Mú¢‰›„;Ú÷v8l¢×&XI»Ü¥~—øpv{>Ñ›TÌ“Ž3é™Þù½:W]8ð“ôC°ô”éiîƒ)sÂeÍN#ˆH] ] /Length 820 /Filter /FlateDecode >> stream xÚ%“MlUÅÿgú1Ç{}ÓwgæQ Ðx”Oûµ´…ÖR±|*P)-_R]Xh4ЉQˆ‹.Ü¢&(¨èV!êÂXŒ17F\7¸‘…‘©bÂÂ…:çtóË9ÿÿÿÞ™¹s™ÙYÂ`V²Lù-D/±ñ̪õs¤†`A+kaQ›Ù[é¡ ‰zXxCµ>ÚEDVüDËyXùoÙ"Q€¹µb€¶D4ÀÒ {«ew5×HDYíKÍuÐ:¢ ;%›{õŒù_5œ1쟆`êgCíÕq5*DŠ`Üê¦Ïê»F aÛ1u›ˆ%¨«êÛ;±OeÄR„5jtcQçw†üL¿ºÍÄräö Õ‰ oÏŠ•vuW+PHïhmŠ_Ü64Œ^V·•hA1ß–ÕæNhц†Áßd׫Qº6¦ ¶£tû¬k‰*Js²ëˆv”~šÝ@¬G4Èn"6":;%{±Ñ‹O¢w‹nè`ÃN¢ÑK ç<ˆèŸ&Ccu“ºÝD¢7j åÜ+ªÝOlA4ßlpÅCª=@ô <ÿšìV¢åŸ–Õmꃛ\,»€;ý£ɵ~ˆµAb;Üs ¯ö 1÷dwÃp³É>DŒÀ½5¬]ø^ý0±î£Ï4·‹…»þºæ´éb7Ü·ú¿á±î¦FÂýÄ>¸['e!Æá~ß-{8wwHv‚8„8H´ý0íaâQÄ… 9BL"n:,;ML!®¶È#Ž"îš•=AG<اý6úG'ï}G Æ q ñäóª1ØÞŸž3T><ž©—;3|z5Ëa¦}€øÜç²Ì´¯EÒó¦,ãìë‘ìxF–Ú3Î>‡dÏœj#3íóHö÷ªÆLû’ñ ²Œ³o@rô{ÙDD0Ó¾L0É>&]Ÿ̪_B0—~)Á úåD3’S»´ß $çZ‰äý¯¥Z|uIªÉ/ÝRmHî‘Z…td¡»铺„~ ÒKRU¤×oJ­Ezï©vT’#RëPyü)©õ¨<;-ŨyÞ?¿“à…ó£¨|p ;ökïÙÿ9±½Ù endstream endobj startxref 1553825 %%EOF nip2-8.7.0/doc/doc-programmer/0000755000175000017500000000000013224651032013060 500000000000000nip2-8.7.0/doc/doc-programmer/hierarchy.txt0000644000175000017500000000304313224651032015517 00000000000000class hierarchy =============== GObject | +-iObject | +-Heap +-Imagemodel +-Toolviewitemgroup +-iContainer | +-Compile +-Expr +-Imageinfo +-Watch +-Model | +-Conversion +-Toolkitgroup +-Workspacegroup +-Filemodel | | | +-Tool | +-Toolkit | +-Column | +-Symbol | | | +-Workspace | +-Heapmodel | +-Rhs +-Subcolumn +-iText +-Row +-Classmodel | +-Slider +-Patch +-Filename +-Fontname +-Expression +-Number +-Matrix +-String +-Option +-Toggle +-iRegiongroup +-iArrow +-iImage | +-iRegion GtkVBox View Textview Workspacegroupview Workspaceview Toolkitgroupview Toolkitview Toolview Graphicview Toggleview Sliderview Patchview Filenameview Fontnameview Optionview iArrowview Matrixview Regionview iImageview iRegionview Editview Stringview Numberview Expressionview Rhsview Rowview Subcolumnview Spin Columnview iRegiongroupview Imagepresent GtkFrame Conversionview Statusview GtkDrawingArea Imagedisplay GtkWindow iWindow Imageview Program Trace iDialog Namecaption Find Imageheader Browse Filesel GtkEventBox Formula nip2-8.7.0/doc/doc-programmer/imageview0000644000175000017500000000057613224651032014710 00000000000000imagemodel is the base model class ... imageview_new makes the imagemodel, then all the component widgets (imagepresent, statusview, paintboxview, conversionview, imageview) watch this for updates the conversion from the real image to the display image is handled by conversion, a sub-model of imagemodel imageview holds the ref to imagemodel ... destroy this and everything goes nip2-8.7.0/doc/doc-programmer/menu.txt0000644000175000017500000001412313224651032014506 00000000000000nip menu organisation here's how it's currently arranged, all ideas for new arrangements welcome you can change the name of any item, move between menus etc. once we pick an arrangement, we're stuck with it forever :-( top level menus are always sorted alphabetically, within each menu, you can have any order you like I was thinking (for example) maybe there should be a "Capture" menu: we could put all the stuff you tend to do when acquiring images in there (eg. crop, white balance, New_video, etc.) Arithmetic Add Subtract Multiply Divide Remainder ------- Absolute_value Absolute_value_vector like abs, but treat pixels as vectors Sign unit vector in direction of value Negate value * -1 Photographic_negative 255 - value (255 == max value for type) Boolean And Or Eor Not ------- Left_shift bitwise left/right shift Right_shift ------- If_then_else Band_and and the bands of an image together Band_or or the bands of an image together Colour Mono_to Mono XYZ Yxy Lab LCh UCS RGB sRGB LabQ LabS Falsecolour XYZ_to Mono XYZ Yxy Lab LCh UCS RGB sRGB LabQ LabS etc. etc. ... every combination of the 10 colour spaces ------- Recombination linear recombination with editable matrix ------- dE_ calculate colour difference between two objects CIELAB UCS ------- Tint_mono_image apply coloured tint to mono image Colour_chart_from_matrix make a synthetic colour chart from a matrix Colour_from_image make a colour from the average colour in image Image_from_colour make a patch of pixels from a colour Similar_colour find similar colours Complex Complex_extract Real extract real part of complex Imaginary extract imaginary part of complex Complex_build combine two reals to make a complex ------- Polar rectangular to (amplitude, phase) Rectangular polar to rectangular Convert Decompose break up compound object Compose combine small objects to make a bigger one ------- Cast_to unsigned_8bit convert numeric types signed_8bit unsigned_16bit signed_16bit unsigned_32bit signed_32bit float_32bit float_64bit complex_64bit complex_128bit Ceil round up Floor round down Rint round nearest Scale_to_byte ------- Convert_to_matrix try to make a matrix from an object Convert_to_image try to make an image from a thing ------- Falsecolour Filter Blur Sharpen Median Laplacian Sobel Linedet Emboss ------- Custom_rank rank filter with editable params Custom_convolution convolution filter with editable params Fourier Fourier_transform Fourier_inverse ------- Ideal_fourier_filter High_low Ring Band Gaussian_fourier_filter High_low Ring Band Butterworth_fourier_filter High_low Ring Band Histogram Hist_find Hist_map Hist_cumulative Hist_normalise Hist_match ------- Hist_equalise Global Local Guide_slice graph pixel values along a guide Image Copy ------- Adjust_scale_offset Adjust_gamma Custom_sharpen White_balance Light_correct_white_image Smooth_image Drop_shadow Join Abut Left_right Top_bottom Crop List Head Tail Init Last ------- Reverse Sort Make_set Transpose_list Concat ------- Length Subscript Take Drop ------- Join Cons Zip Log Exponential Log_natural ------- Log10 Exponential10 ------- Raise_to_power Morphology Dilate8 Dilate4 Erode8 Erode4 ------- Open Close Clean Thin ------- Dilate Erode Dilate_multiple Erode_multiple ------- Custom_morphology Find_profile search an image for edge profiles Mosaic Mosaic_translate the two-point funcs Left_right Top_bottom Mosaic_affine the four-point funcs Left_right Top_bottom ------- Mosaic_balance Tilt_brightness Left_right Top_bottom ------- Mosaic_rebuild rebuild mosaic with different files New New_slider New_toggle New_option New_matrix Convolution Recombination Morphology New_image New_colour New_video just linux video at the moment ------- New_eye New_zone_plate New_grey New_xy New_gauss_noise New_fractal New_CRT_test_chart New_frequency_test_chart New_checkerboard New_grid New_ideal High_low this set of items make fourier filter masks Ring Band New_gaussian High_low Ring Band New_butterworth High_low Ring Band ------- New_CIELAB_slice slice through cielab New_LAB_colour pick a colour with a poiont on a LAB slice Plot Plot_scatter Print ICC_export PCS -> device ICC_import device -> PCS ICC_transform device -> device ICC_ac2rc ------- D65XYZ_to change white point for measure/print D50XYZ D50XYZ_to D65XYZ D50XYZ_to Lab D50Lab_to XYZ ------- Sharpen_for_print Morph_for_print Relational Equal Not_equal More Less More_equal Less_equal Resize Resize_image change size by a scale factor Resize_xy_image separate xy scale factors Resize_canvas ------- Shrink_to Quicklook shrink to smallest axis == 64 pixels Icon shrink to smallest axis == 400 pixels Rotate Rotate_fixed r90 r180 r270 r45 Rotate_free rotate with a slider ------- Flip up_down left_right Transpose ------- Straighten_arrow rotate to get an arrow straight Statistics Mean Deviation Stats ------- Max Min Maxmin Maximum_position Minimum_position ------- Count_set Count_clear ------- Measure_colour_chart Statistical_difference more of a filter really :-( Count_lines Trig Sin Cos Tan ------- Asin Acos Atan ------- Rad Deg ------- Angle_range is angle within arc ... clock arithmetic nip2-8.7.0/doc/doc-programmer/regionview0000644000175000017500000000073313224651032015104 00000000000000how regionviews are built and maintained iregion iregionview end of parent_add, make iregiongroup child iregiongroup iregiongroupview monitor object updates, on iregiongroupview_refresh() create and set and unset model->display destroy regionview ... watches iregion model regionview_new( iregion, area, imagepresent ) does not view_link(), since it's not a true view ... adds own signal handlers for "changed" and "destroy" on iregion/iarrow nip2-8.7.0/doc/doc-programmer/makeindex.pl0000755000175000017500000000021713224651032015305 00000000000000#!/usr/bin/perl # my labels = `grep 'ÚŸÞàßð±u¿útÿ¿-ÿÅÑÿ [ÿ§Oûòßü]Þ~ÚŸÞ}µ?¼+Á¿ábëôéÿ~[ÿ‹£þ.·ÿNŸ÷å¿øº.¼ýµ?¼(ûjxWƒÂÅÖ¿éÓþü·ÿGü,]kþ?ïËñt\yûjxQöÔþð¯ÿ…‹­Ó§ýùoþ.øXº×ý:ß–ÿâè¸óöÔþð£í©ýá^ ÿ Zÿ§Oûòßü]ð±u¯[Oûòßü]Þ~ÚŸÞ}µ?¼+Á¿ábë^¶¿÷å¿øº?ábë^¶¿÷á¿øº.¼ýµ?¼(ûjxWƒÿÂÅÖ½mïÃñtÂÅÖ½mïÃñt\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿâèÿ…‹¬úÚÿ߆ÿâè¸ñöÔþð£í©ýá^ÿ Yõµÿ¿ ÿÅÑÿ Yõµÿ¿ ÿÅÑp=ãí©ýáGÛSû¼þ.³ëkÿ~ÿŽQÿ Yõµÿ¿ ÿÇ(¸ñöÔþð£í©ýá^ÿ Yõµÿ¿ ÿÇ(ÿ…‹¬úÚÿ߆ÿã”\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿã”ÂÅÖ}mïÃñÊ.¼}µ?¼(ûjxWƒÿÂÅÖ}mïÃñÊ?ábë¶¿÷á¿øåÞ>ÚŸÞ}µ?¼+ÁÿábëÞµÿ¿ ÿÇ)ábëÞµÿ¿ ÿÇ(¸ïöÔþð£í©ýá^ÿ Xþõ·ýøoþ9Gü,]cûÖß÷á¿øåÝþÚŸÞ}µ?¼+Â?ábëÞ¶ÿ¿ ÿÇ(ÿ…‹¬zÛþü7ÿ¢à{¿ÛSû¶§÷…xGü,]cûÖß÷á¿øåð±uï[߆ÿã”\wûjxQöÔþð¯ÿ…‹¬z×þü7ÿ£þ.±ëkÿ~ÿŽQp=ãí©ýáGÛSû¼þ.³ëkÿ~ÿŽQÿ Yõµÿ¿ ÿÇ(¸ñöÔþð£í©ýá^ÿ Yõµÿ¿ ÿÇ(ÿ…‹¬úÚÿ߆ÿã”\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿã”ÂÅÖ}mïÃñÊ.¼}µ?¼(ûjxWƒÿÂÅÖ}mïÃñÊ?ábë>¶¿÷á¿øº.¼}µ?¼(ûjxWƒÿÂÅÖ}mïÃñtÂÅÖ}mïÃñt\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿâèÿ…‹­zÚÿ߆ÿâè¸ñöÔþð£í©ýá^ÿ Zõµÿ¿ ÿÅÒÂÅÖ½mïÃñt\yûjxQöÔþð¯ÿ…‹­zÚÿß–ÿâèÿ…‹­zÚß–ÿâè¸óöÔþð£í©ýá^ ÿ Zÿ§Oûòßü]ð±u¯útÿ¿-ÿÅÑp=çí©ýáGÛSû¼þ.µÿNŸ÷å¿øº?ábë_ôéÿ~[ÿ‹¢à{ÏÛSû¶§÷…x7ü,]kþ?ïËñtÂÅÖÿéÓþü·ÿEÀ÷Ÿ¶§÷…mOï ðoøXºßý:ß–ÿâèÿ…‹­ÿÓ§ýùoþ.‹ï?mOï >ÚŸÞàßð±u¿útÿ¿-ÿÅÑÿ [ÿ§Oûòßü]Þ~ÚŸÞ}µ?¼+Á¿ábëôéÿ~[ÿ‹£þ.·ÿNŸ÷å¿øº.¼ýµ?¼(ûjxWƒÂÅÖÿéÓþü·ÿIÿ [ÿ§Oûòßü]Þ¾ÚŸÞ}µ?¼+Áábëôéÿ~[ÿ‹£þ6¹ÿNŸ÷å¿øº.½}µ?¼(ûjxW‚ÿÂÆ×?éÓþü·ÿGü,msÒÏþü·ÿEÀ÷¯¶§÷…(¼CÜW‚ÂÆ×=,ÿïËñtáñ#]^Ö÷åÿøº.¿,êÝêPÀ׌xâ|ò_GoªCÇ! &ˆ }Á'|ñ^±it%PA¦…€äQ@Ìp¦¸/^еÛÈ?ñÓ]ÝÉÄf¼ËÇŽ²¯Gý1ähÇ7Qº¡ÝFê‘—¬-$Ôoc´…âY$$)•Â/Lã'¿aïZÚ§„õ ?RžÎÙ†&Š:+,kŒ³)n:ð2I¬ {©­.c¸·‘£š6ÜŽ½T×Cáÿ*j³¾µw3Cqbö^qÌJqƒÉ:/3:=S•ìR;Ff¿Rö :þ𧯎)ú†«ésÁ 턱IpvÄWÞ}RFyé],:þ‡c­ø`E¨´öšd2Ç5ÇÙÝ9e |¸Ï_­f.µf|?¦Ú-ûAuª×Ä,ÞTg8p1ƒÉÎÜÑ×úïoËPþ¿…φõ«;»[K‹Iî‰XSÍC¼Ž£†ÀëßùCï>€©<ûu®ši6~+ÒŸOW}ÅdƃºLî`‘ªú§ˆì­î4Óc}myioz.šÞ 8Ûm#ÜðÄ‚i­lÊòøJïN𾣩j–²ÛÏEöu2)3a²>½ñX1X]Ïa5ôP¶…Ö90ùYº g<ý+§Õõm û]Z¤·7:­Äsˆ^ÙÐņÉÿ­Yþ Öì4»»¨uR~ÃpŠÇ [÷ˆÁ“€½%»¿õ¢þ½Aí¡B] U¯K'V²(.õ% ýÑÁù³ŸáÍ;Qðö³¤Ú%ÕþŸ,99*@>ø'Ž+£¾ñŤÖzeÌqî¾{¨çÔ)ð£$`çƒÇLT¶·¢Ç¦k‹a=ìúÄÉ!ŠH¸ »’~ñíÇ £úü¿àB-#ÁºÖtøµ›`²¹v]ÂTÜHF`8$»éX“éðÇÆÕÄW2˜í¾aºR8\î?\bº'ñ”ß`ÖEÏú 7”ü~è¯ÝÆî¾Õ_Y×4ýfóKÕ£¿{+ødXæAºÆªr² Æ1þÎúïªFfÏárÚòÚÒm=–âëp†?5 | žÆ®*-GAÕô™aŽþÆHZfÛYX1ôÈ$gñ®ÏO¿Ñoüi¢Kc$W‰yMÕÌÍIû¶Á*ßÅïY7:¦a§Úéê]R©ýªäù DèP×ðëÍ upïýw0õ/ë:D÷öB²¶Ä!•ÁoO”ž}©×^Öì¾Íö6T7M²Ü¥ºãh$Ä éõh–ÖVÉc<-Q.Ö {n1Øä[Þ©¦¯ é¾0ÄVúœ·¾tîÒÛ›VW…]HÎãÃc `v¡9ýSEÕ4SÔlÞßÌÎÂYX{©#>ÕŸººOjöw6ÙéúµÍ¿žf1A§o,ã'ø‰ÉÎcìù:L–Ùšd›Ã´ÉmºuÏ£çŒvâ’/h~¹×ìõm3Ú)óKüD€0¨¬|9¬êMp¶v-1¶Ç( Úèå† ÔþÔ4ÔÓ5/RºkHïãŒ$â#(RŒN ŽyÍiøkRðæ™Ùn ŽêÝâêk”Ëè‚c=ý©ÛRz´ß Üê¾¹¸´¶šMNß Â]P*…²äúÕ-'×zž°úl²Ee$LSpÀ$à¹Ë@?>kmõT²Õm.µY,–mXÞÄâÙܲ`c¯JÌ»ñ÷Ä(u“º+5¹‰·2’Ûq'·J#«Wþ´C{;Z³þÜØê7Ve÷˜&x·ã¶’3ŽÝ*¾ê³ª^E?ˆ// Û,/tò¦õ;]K’28>”jš·ö£ÄßÙÚu—–Å¿”?Þ俥^Êã{²ðð¾ºÚ`Ô—MÙ˜üÑ t9Lg;s»ö§K'HšÆ+™®ïÞTJ;ðó‘Àç5¹eâm&WE™îÈŠÛHû,çÊs‰1÷qŽyî8©<#©ZO7„´øåÝuk-Ñ™6‘´2±ãð5VÕÿ]Ééëc™½Ð5=*æÞ-RÜÙ,ìM#AêIRzuÇZ³©höš2ê¶´z…·Ÿöy¢*øÏÌ=êö£{¡Ã¤[è1j’ÝDú—Ú..>ÎÈ N„rIêxÏzgН4k«(¢Òu”kKl }=,äN¿yË·ºòi_B­gc—ÝFê‡u©ˆ›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Uí/O„®Ò»$ðvõcè+/ujiWkr[±ÆöÜ9ÆxóøP¼º™$ebBøáÖçÜþµsðØË.¡ö"B¸bº€óë[>d|á¤wi˜ÈœVd7Àj¯txI̞ÌÒaÑ#‰•ãº}™ 6Ù8Ç^ƒmdjsYÞ,L«'1çœ`ûÖ‰’Sk4 BD›ðÆCŸ˜“Óo¿­V¼½ß}nè7}·ýNAÇéC½´muszËÃú5²$WÌgºe,G˜T uÀàzšËÖt«kh÷N•žÕÈXçnz{Š¿?“ªB›¦Í¿ÞÉlc©éŒœŒsÐñjëWØÓͫȯ3íÜTc€AÎ;tåQÄT•D¯«ÝGŠÁÐ >T’Z>æêúÃwfkX‰9%E|纽ïÂ,M¤?îŠõÑóGÊŠ)°ýÁE0uþ¬×˜xóþAwŸõÉÿ‘¯OºÿVkÌxD_ïà”êÖ{DWQùNQ\Àü¬)à÷Töú{\i——Ë*„µ1‚¸ÉmäŽá@wT]Ok2Ím4Ê¿vHœ«ÜȨ)8 úÒÐË’I$’y$÷¤ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(C+–„“KçAQQ@ ˜  zqJ³”èò¨¨  w"P”'®Ö#?‘¨ÚRÄ’zÔtR²½ÇÌÚµôº½ûÂñéû¢¾¯ 0ÿ GþLÃÿÅÒŠ·áø[ü†õüÿŸõr꿈`ñ=ßÛ-5;™9 "lË{ÇÏ9ã·ÐõËø‚ÞK]vînÍÜi›ï1 ›“ÈÎ=Emÿ±ñ‡ý?òfþ.øV>0ÿ GþLÃÿÅЕ­ä6ïs’®¢k»Ko hbçL‚ð³\m2K"mùÇMŒ?Z—þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.˜°Ñ¶¥©IiÿÚÒÈÁœÊ“,~PÜ#.¬»žøïÖ²¯ä{Û?°Ékp«lòÁ#!ÛÎpÉÈ'½Cÿ ÇÆôÿɘøº_øV>0ÿ GþLÃÿÅÐÕÝÁhqu>²ºš·ö"ÚŸ³y¸Ø%Ú»<¿Cž¸íœ×œWq¨øƺ¦¡-äú2,’X%Ä@tÇj©ÿ ÇÆôÿɘøºIK•Öÿ±ñ‡ý?òfþ.øV>0ÿ GþLÃÿÅÓ’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*÷ÿǤ?îŠòßøV>0ÿ GþLÃÿÅשxCþ=!ÿtSB=¸(¢¸(¦.¿ÕšóÈ.óþ¹?ò5é÷_êÍy‡ŽÆtÛ±ë#@•bØÓ-qÿ<“ù ŸÌ>Õ‡©Hñø.åãfG]=вœ|¾ Õ$Ô/ôß [My¨X¬òˆÖû,œ®q°9go¦>”€éžácÛ½•w£'>”ÿ0ûWu«ÞkZF—2, y²°hÝc,¡°ÛN ‡šßÓïõ+¹u-.åí¡Ô-B¸†2c*à•m„ç#ŒÓ¶Ÿ×—ù‡_ë»G@“Ú©GÿWc·š?ô¬¿ IrÚ}â]]Ku$WÓÇæÊrHVÀöAÅjEÿ7õÔè CKERQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEɦŽÞ '•¶Ç—vÆpÉ5ZÛSµºŸÈŒÌ$Ú\,nÿë ÿЭUSÊO3ư²ÈÁ†é#åû§Ò€%¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ¤2J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠÏÕô‹[Û+Æ[y/$…‚HÑ®íÛp¿1ü+FÑ.ŸS/ªéÈmÄNM²A¸•ÇžÀó]V.ÿç•¿ýþoþ"Œ]ÿÏ+ûüßüEa<<'57º%Å0EoÅIkÑBø ã|#Ŭ_îŠëä–x|ÑGå¼É!%G® Šä|'Äýn†wÐ}ÁE}ÁE0uþ¬×x¤n8õ8¯EºÿVkÏ|H3qõqü躲ÿ}¯ýqOýTõ—üƒíëŠè"§ ¯ü~Çÿ\ßù­X5]ãö?úæÿÍjÁ Ÿ¥UnµiúUVëH ëßøø—þ¹Eüå®N×CšßÂÓ[âsy%£Äb{†d AàÛGá]ÄH¯¨ÎC".ÏñIJÓiɋԈ]b*2Twÿ>‡Ð×l4êMÊ.Û~Ш¢µG«i·RMc< 3,P¼RG‹pÝ·‘æ§¡¡ªW:²F‰{%«Ù¥±XÞ éŒä1qŽã•î>•éÃ(‰A¤m ”pOòÿì迾ï„ÿâj#„ª•®‡í"rÖÓÉ3]Cå8Ž|Ï”ôõ8ü+šµÐoLAöw¶i,¤‚W’Pèò1È1€NÕÎN0½GéßÙÑ}¿ï„ÿâhþ΋ûíÿ|'ÿS HÞÍÛ.ÇšækK¡›¤l°¢]²º>æ?) d`dõïOmêâÆ{X­~ÃÅÈ’5 ¹µP£,œH<ŽkÒ?³¢þûß ÿÄÑý÷ÛþøOþ&«ê•{¯Çúè%R+¡æWšMõÌi»M"Ah°D ™UbpÇ–ùáH7~3[ÆÚyu«y¥Pa··;Xƒ+:ðþ=]öl_ßoûá?øšbAÊð¼q±P6À2ÀÒ–£êº÷ê ¬WCж[¹5¹'¼°¸Â³Go&øÌq§÷±»v[œp=j®½¥Ý^^É$v²MºÜG Ç* ÷|ÀHÜ¿wŒ7CÇ5ègƒþxÇÿ|Š>Ïüñþù– ¢’’kOQºÉ¦ŽTÒä{ š5Äîñ;DÓ’§k«ªÇjô>•U4Ûɵ¼6¿gG»Y %Ô”Q.ヌ’G=«ÐþÏüñþù}žùãýò(X*‰[™_ðÂö±ìqšW0i1YÜÚ´/b-Å•„˜ÈÁ<}qX£LÔžÉ-Å”ÛéÓÚ‡ó¬¬ÁBíç#;{^›öx?çŒ÷È£ìðÏÿï‘M`ª&ÝÖ¾£ö«CÏ®ô©âwû$¯[ÀÙÝüÄf9ˆxªWVz‡Ùf»Ô%Û;¼ÇDWÙ36ÖÁÀ%Jç¶MzwÙàÿž1ÿß" ºÛÀ]mãf,AP9'õ4Ö¢ê…í#ØóÍ9dÕnì6Û`þÑrÊFÑÜ‚ ŸBi²h×ñ´2$SlŽ[‘å@aÜß*G˜ ãCÏÖ½û:ìÿËK!íöröj?³nÿç­—þþ*ªT¾´]O>¸Ò.­­åŠÞÆK¤›O[TÝ${á 7ÞɘtôéZ×VsȺPDÏ‘0i9(òØ~<‘]_ömßüõ²ÿÀcÿÅQý›wÿ=l¿ðÿñU/QîÐý¬O>þüm6Ò ¤£MšÞC¸pìh8ëÈ5%õ¦¡xöWBÒæ/*7‰áà/ómù†ü©Ôï³nÿç­—þþ*‘mÞÞxÒå-¤YIUhãÛ‚8 ç°4þ©R÷mÃÿËÚÄó-UH†[o/ÎiôÕ¶…XüÔ#pÆ27g#îç‘Ò¯¶tÚ¬†Uºh&š)ƒBÐ…B¡xmÄô?Zô³Áÿ~÷]Às]ÏÙàÿž1ÿß"³ÁÿÏüñþùfÏùƒÛ®Æ¿öx?çŒ÷È£ìðÏÿï‘Gölÿ˜=ºì`Q[ÿgƒþxÇÿ|Š>ÏüñþùfÏùƒÛ®Æ¿öx?çŒ÷È£ìðÏÿï‘Gölÿ˜=ºì`Q[ÿgƒþxÇÿ|Š>ÏüñþùfÏùƒÛ®Æ¿öx?çŒ÷È£ìðÏÿï‘Gölÿ˜=ºì`Q[ÿgƒþxÇÿ|Š>ÏüñþùfÏùƒÛ®Æ¿öx?çŒ÷È£ìðÏÿï‘Gölÿ˜=ºì`Q[ÿgƒþxÇÿ|Š>ÏüñþùfÏùƒÛ®Æ¼`€LQ€;í[í|±³þzy'gýõŒ~´fËùƒÛ®ÆU¼ €Œˆ£#ýÑKöx?çŒ÷È£û6ÌÝv0(­ÿ³Áÿ࢈>ࢺLÆ]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@Õ—üƒíëŠè"§¨,¿äkÿ\SÿA=5ãö?úæÿÍjÁªëÿ±ÿ×7þkV Dý*«u«OÒª·Z@Goÿ!)ÿë„_ú•—?„m®5&ÔQ¿[ƒ 2´)ù:˜­Kù Oÿ\"ÿФªRø³F†w†K™Dˆþ[/Ù¥8lãv˜’\Z×Sÿ 5[&©Nß¿³>²Ÿýõ)“ž´€£©kÑéSªÜØÞ}˜•V»ES8ù·uÇj­âË[ ˸ÊúXì›™âY" 2 ù·tç€k[ðµî¥{(ŽÂqq$oÅø–Ø.ܪ€¤cƒÜu5©u£\ÎÔ1£xŽsâo²cþË2E¸çwÚîǦÜqõ-ÿŠ­¬/.à{+éRÌ)¹ž(Ô¤A†A?6zsÀ5š|ÃAXÖöãûQq8su'“öŒîݳ8Æïj»>…{<^!ÜðÔàTŒ8Ví9ã¦}3Å/OëüÇ»&ÔÎbLFä =I#S\þºÒhñjÚ}µå„²ßÛª½«³‰„žXOݨS¿ LV½Ç„î¯`Ôay X¯"·eÜ – z8õ£¿õêJ¾—þ¶5#ñ,N— Ún¢—0fµ0ƒ)W8 ±uÏ<`ÖÝszv‘}¦ÚÜ=¦—¡Y^¶ÅSýŒ¹ù·| ôè9æºJc ©©Dz×x¿ô1VꦥÿÉÿ]âÿÐÅ (x¯X¿Ñ-~Ùow¥C¡Äw‹Î㉆‘ì~”ÝwÄ·Zvˆ’ZÙ«j’ÚµÏÙå'l*«¹™ñØt÷$qg^¶Ö/c’ÖÎ×JšÖXб½wÊ“NФ0Ǹ¬ÛŸ[Ë¡ýn®Ž ºx³‹©bY6© ¹TàŒ“Á¯zNö×øVºþ»5„ïu§ZÜ8剂ô€x«KH±:n‘id]œÃ¡f‘œ“ŽynqéíWjångb#{+…S¾ÿ]cÿ]Ïþ‹z¹Tï¿×Xÿ×sÿ¢Þ¤¢†­­Ûh뜲;É© c'’qß½eÂmgÿ>W÷Ô_ü]mjMŽª¨·°y›T†e#ñR Pÿ„CCÿŸ7ÿÀ™øªæ¨±^ãV;(Ë¡ûÔïåÿTÿ„ÚÏþ|®ÿ憎øº?á6³ÿŸ+¿ûê/þ.­ÿÂ!¡ÿÏ›ÿàL¿üUðˆhóæÿø/ÿQˊ‘¯>ùeø™Sþk?ùò»ÿ¾¢ÿâèÿ„ÚÏþ|®ÿ憎øº·ÿ†‡ÿ>oÿ2ÿñTÂ!¡ÿÏ›ÿàL¿üU¸®ëúù>ùeø™Sþk?ùò»ÿ¾¢ÿâèÿ„ÚÏþ|®ÿ憎øº·ÿ†‡ÿ>oÿ2ÿñTÂ!¡ÿÏ›ÿàL¿üU¸®ëúù>ùeø™Sþk?ùò»ÿ¾¢ÿâèÿ„ÚÏþ|®ÿ憎øº·ÿ†‡ÿ>oÿ2ÿñTÂ!¡ÿÏ›ÿàL¿üU¸®ëúù>ùeø™Sþk?ùò»ÿ¾¢ÿâèÿ„ÚÏþ|®ÿ憎øº·ÿ†‡ÿ>oÿ2ÿñTÂ!¡ÿÏ›ÿàL¿üU¸®ëúù>ùeø™Sþk?ùò»ÿ¾¢ÿâèÿ„ÚÏþ|®ÿ憎øº·ÿ†‡ÿ>oÿ2ÿñTÂ!¡ÿÏ›ÿàL¿üU¸®ëúù>ùeø™Sþk?ùò»ÿ¾¢ÿâèÿ„ÚÏþ|®ÿ憎øº·ÿ†‡ÿ>oÿ2ÿñTÂ!¡ÿÏ›ÿàL¿üU¸®ëúù>ùeø™Sþk?ùò»ÿ¾¢ÿâèÿ„ÚÏþ|®ÿ憎øº·ÿ†‡ÿ>oÿ2ÿñTÂ!¡ÿÏ›ÿàL¿üU¸®ëúù>ùeø™Sþk?ùò»ÿ¾¢ÿâèÿ„ÚÏþ|®ÿ憎øº·ÿ†‡ÿ>oÿ2ÿñTÂ!¡ÿÏ›ÿàL¿üU¸®ëúù>ùeø™Sþk?ùò»ÿ¾¢ÿâèÿ„ÚÏþ|®ÿ憎øº·ÿ†‡ÿ>oÿ2ÿñTÂ!¡ÿÏ›ÿàL¿üU¸®ëúù>ùeø™Sþk?ùò»ÿ¾¢ÿâèÿ„ÚÏþ|®ÿ憎øº·ÿ†‡ÿ>oÿ2ÿñTÂ!¡ÿÏ›ÿàL¿üU¸®ëúù>ùeø™Sþk?ùò»ÿ¾¢ÿâèÿ„ÚÏþ|®ÿ憎øº·ÿ†‡ÿ>oÿ2ÿñTÂ!¡ÿÏ›ÿàL¿üU¸®ëúù>ùeø™Sþk?ùò»ÿ¾¢ÿâèÿ„ÚÏþ|®ÿ憎øº·ÿ†‡ÿ>oÿ2ÿñTÂ!¡ÿÏ›ÿàL¿üU¸®ëúù>ùeø™Sþk?ùò»ÿ¾¢ÿâèÿ„ÚÏþ|®ÿ憎øº·ÿ†‡ÿ>oÿ2ÿñTÂ!¡ÿÏ›ÿàL¿üU¸®ëúù>ùeø™Sþk?ùò»ÿ¾¢ÿâèÿ„ÚÏþ|®ÿ憎øº·ÿ†‡ÿ>oÿ2ÿñTÂ!¡ÿÏ›ÿàL¿üU¸®ëúù>ùeø™Sþk?ùò»ÿ¾¢ÿâèÿ„ÚÏþ|®ÿ憎øº·ÿ†‡ÿ>oÿ2ÿñTÂ!¡ÿÏ›ÿàL¿üU¸®ëúù>ùeø™Sþk?ùò»ÿ¾¢ÿâèÿ„ÚÏþ|®ÿ憎øº·ÿ†‡ÿ>oÿ2ÿñTÂ!¡ÿÏ›ÿàL¿üU¸®ëúù>ùeø™Lø¦ÛQxlÒÖá ÒÆ„¹Lm,2žFEtFí ÿg tÇÞ_OLçô¬i<-§[…žÆÙ–æ'WBgç0XŽ@Å?ûIvççÝ»w6sé·8Ïá[ÒUýæþG-wIË÷)ÛÌšÎù¢…¢òºÇ,‘©qµ\€9>€ ±ý¢ßóé7æ¿ãOÓíÚM³Fžc;ÈFÆæ-Œûf­mOùçýò+C—ö‹ϤߚÿÚ-ÿ>“~kþ5wjÏ8ÿï‘FÔÿžqÿß"˜¿´[þ}&ü×ühþÑoùô›ó_ñ«»SþyÇÿ|Š6§üóþùKûE¿çÒoÍÆíÿŸI¿5ÿ»µ?çœ÷È£jÏ8ÿï‘@¿´[þ}&ü×ühþÑoùô›ó_ñ«»SþyÇÿ|Š6§üóþùKûE¿çÒoÍÆíÿŸI¿5ÿ»µ?çœ÷È£jÏ8ÿï‘@¿´[þ}&ü×ühþÑoùô›ó_ñ«»SþyÇÿ|Š6§üóþùKûE¿çÒoÍÆíÿŸI¿5ÿ»µ?çœ÷È£jÏ8ÿï‘@—w¦[+„6ò&bo™Šàp} sžû£ë]n¢ª4Ûœ"å7!G¥r^û£ë@ÜpQDpQ@ ºÿVkÏ|Eÿ1×EþuèW_êÍyãæ/úè¿Î€;«/ùÚÿ×ÿÐEOPYÈ>×þ¸§þ‚*zjÿÇìõÍÿšÕƒU×þ?cÿ®oüÖ¬‰úUVëVŸ¥Un´€ŽßþBSÿ׿ô)*tµ¨õWŒý¡ÏÊOf#Ô‡üMoÿ!)ÿë„_ú•JYÁ®¦˜Àœü¯6~TsÑO×ôÈõá¥wŽ"’ Äû“Ü#?Bj4ÄÿÇ…ÏçÿV¥ž(É!]ðØ8ãÿJ—ì–ßóïýð(?Í›þ|.¿8ÿøº<Ù¿çÂëóÿ‹­²[ϼ?÷À£ì–ßóïýð)ŸæÍÿ>_œü]lßóáuùÇÿÅÖ‡Ù-¿çÞûàQöKoù÷‡þøŸæÌ?åÂëóÿ‹©mc”Ë-Äɱœ*ªdgÇËžÕoì–ßóïýð*%QÄ‘/Ü ¬¦r1úSJ+YÁ®¦˜Àœü¯6~TsÑO×ôÈõãVQ¹áŒ’GÃ`ã¤ÿJ–Š_²[ϼ_÷À£ì¶ßóíýð((¥û%·üûÅÿ| >Émÿ>ñ߀¢¸€\Eå’WÀŽÄƒùŠ›ì¶ßóíýð(û%·üûÅÿ| ƒ7ÿóñmÿ€íÿÅÑ›ÿùø¶ÿÀvÿâéUDW2D¿p*°™ÈÇÓŠ–€!Íÿüü[à;ñtfÿþ~-¿ð¿øºšŠ‡7ÿóñmÿ€íÿÅÒ¦’d’âT/%FPF2rNx'ó©è Š( Š( Š( Š( ЉQfºtnDE!OBI=*›ì–ßóïýð((¥û-·üûEÿ| >Émÿ>ñ߀Š_²[ϼ_÷À£ì–ßóïýð((¥û%·üûÅÿ| >Émÿ>ñ߀Š_²[ϼ_÷À£ì–ßóïýð((¥û%·üûÅÿ| >Émÿ>ñ߀Š_²[ϼ_÷À£ì–ßóïýð((¥û%·üûÅÿ| >Émÿ>ñ߀Š_²[ϼ_÷À£ì–ßóïýð((¥û%·üûÅÿ| >Émÿ>ñ߀Š_²[ϼ_÷À£ì–ßóïýð((¥û%·üûÅÿ| >Émÿ>ñ߀Š_²[ϼ_÷À£ì–ßóïýð((¥û%·üûÅÿ| >Émÿ>ñ߀ û¿ÚþÕå;Ýþ{ûÕ²[ϼ_÷À£ì–ßóïýð((¥û%·üûÅÿ| >Émÿ>ñ߀Š_²[ϼ_÷À£ì–ßóïýð((¥û%·üûÅÿ| >Émÿ>ñ߀Š_²[ϼ_÷À£ì–ßóïýð((¥û%·üûÅÿ| >Émÿ>ñ߀Š_²[ϼ_÷À£ì–ßóïýð((¥û%·üûÅÿ| >Émÿ>ñ߀Š_²[ϼ_÷À£ì–ßóïýð(®£ÿ ÛŸúäßʹ }Ñõ®»Q·4Û–HcV6PJä|1÷GÖ€;¸>࢈>ࢀuþ¬×žø‹þ>bÿ®‹üëЮ¿ÕšóßÇÌ_õÑwV_òµÿ®)ÿ Šž ²ÿ}¯ýqOýTôÕÿØÿë›ÿ5««¯ü~Çÿ\ßù­X4ôª­Ö­?JªÝi¿ü„§ÿ®èRS_CÒ$‘¤}*ʼnff·BIõ'ëù Oÿ\"ÿФ¬;Ÿ_Á­,hÈ×ÂÆ>ÔFõ=îtÆIôÁ¦Jü\Zÿ×Cÿ 5gxŽUŠMtË¿Q‰Füü‡ ó Ï×#Ú¯ÈOÚ-3×Ì?úRjt:‹Z™šEû4ëp›eÎÈéÍ uꃣ9Öñ&±\Þ”±m:ßQûÄÄ»w„Üv3–b›¥jZ…ž½©\OÖ·WL"(Æ_”ð–ÀÛkaü9fö6fIü»‹¿µ¹ 2x|:eGøÒGáËXîo\]kÂí5›2˜X¸Ãcw?\Réçoòÿ‚|¯þð [?jŒ“¼ö©" ).U’ÎxV'QŒÒ 6}F:t«RëìF;¾š×:…ÄQÆD.5u'‘¿,F=E^·ðâAg=›jzŒÖ²ÀЦ‘XF¤cå;s=Iªúî‰5ÖŸ¤YY4Ê–·Q•UÑHÜ ã=;~Z_îüõ m÷þZômRòâöÿNÔRwfP™-òDpJ $#&´þ?äÿ®IüÚ«iz<WÚfžââáƒM=ÃwÀÀ Uƒÿ! ë’7¤GÐô‰$iJ±gbY™­Ð’}IÅY”ââÓþºŸý«œ¹ñUüÑÒÆŒp\,cíDoSѾçLdŸLè. Ùg¯šô[Ð̱I¤n†9wj1¨ßŸá¾a‚9úä{VSx“W®oJX¶o¨}¢â]»Ân »Ë1[š…”ZƒZ™YÇÙ§YÓa,3€xéÍR}Ñìnm “ùw_krd>ðØtÊŠŸõ·ü——õ¿ü?JÔïìlõÝFââ)¬-n®˜DQŒ¿)à-€=¶Ó,ü]©²NóÚ¤ˆ,ä¹VKIáXFB3H0ÙõéÒ´£Ðm£¹»qqrm®Ë´ÖlÊbbà qŒóõ¦Ûè)œöm©j[K@"–Ea‘”íÎ@õ&—O—è>¿2 uv #NßNkBx£Œˆ\$jêO#~XŒzŠÒѵKË‹Ûý;QHÝ™Bd·ÈIÁ €rAà‚2k7[Ò&ºÓô›+7™RÚæ"Ò£ªº"©ÔzZ©mâ™f6w2é™{(ŠÞçΉ9ÚY1ò†Çž£4ÖñUÊO4¥ìèo~Æ÷ã.p]Û6ôÉéÖÞ–gm.¦Òé–R‰mí¼¡Ÿ?0\ñÀè3RÉá­úeåŸÚñö›ï¶oòþïί·çîã>ý)«_úòÿ‚m?­ÿàÖs\̳›O³••˜zÇLúv«5ZΘVaswö‚Ò³!òÂlCÑxë^õfBÓçôÊ?æõÇk:õäî¯Õ¯mc´Ž6‚+{:±*IÜvsêºÕljõÆ/æõ‰q£ê#W¾¾°Õb¶‚0èö¾a]£ƒ¸ýÁ¤ÆŒùµy¯l.ZWaq&€gs Æa sª8΋>Õn×VR#0žO#CK’¾ÈØÿg{½ŸÂ‹o Aj \Èam<ÙWæå‹Ï®XñŠTðäž[‰oûi¿Ùå„8ã' Þ‡§ëM½íý|_æ„–×þ¾òd°xºH‚¶«§ 8ä³kÈž9üÐÈ å\6zýiºG"Õ/…¡ŠÕ^Hx¼›Ô›Œ¬˜!çÜuçŠuχb»[(眴VörZ:…Ápê œç»ïÖ£B»}2ãN½ÔÖ{imÌ RØG"‚1’Ù98ö>¶þ·ÿ€ ú_úÛþû/%ÃjË ±–ÎØÜÿ¢^,èê3‘¸†ã¡ë_G¿¼Ô,–æîÎ+Q"«Æ©?›•#<ü£ÛšÀ‡ÃW®šçP…ÚkdžM§”Or7ŸÊ·ìãû%½¶ýþLkìc8Î(Òßןüþ¿/ø&†ê7U_0Ñæ@ZÝFê«æ<Ã@·Qºªù†0ЭÔnª¾a£Ì4kuª¯˜hó ZÝFê«æ<Ã@·Qºªù†0ЭÔnª¾a£Ì4kuª¯˜hó ZÝFê«æ<Ã@·Qºªù†0ЭÔnª¾a£Ì4kuª¯˜hó ZÝFê«æ<Ã@·Qºªù†0ЭÔnª¾a£Ì4kuª¯˜hó ZÝFê«æ<Ã@·Qºªù†0Щé—_õÉ¿•qþû£ë]MóçO¸ôÉ¿•rÞû£ë@ÜpQDpQL]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@Õ—üƒíëŠè"§¨,¿äkÿ\SÿA=5ãö?úæÿÍjÁªëÿ±ÿ×7þkV Dý*«u«OÒª·Z@Goÿ!)ÿë„_ú•dÁg1¡•T¨}¿0¨Ï§«[ÿÈJúáþ…%]¦2ÿÇͧýu?úU¢j¤ç6õÔÿè·©‹RLÑš‹u¨\Ñš‹u¨\ÕùˆËÿ\cþoR¨AÎ¥7ýqÿBzy‚#:ÎcC*©Pû~`QŸN2æ™Q£`²FÛÔ‘‘ЂàMOE0)}ÿ>ÖÿøßüE&/çÚßÿ[ÿˆ«ÔP^ÿϵ¿þ·ÿF/çÚßÿ[ÿˆ«ÔP^ÿϵ¿þ·ÿF/¿çÚßÿ[ÿˆ«ÔPkX$G’iÊù²`ay £8ïÔœûÕš( Š( Š( Š( Š( Š( Š(  ³C0¸3Á±‹ FG;AÁ$€qÔö¨ñ}ÿ>ÖÿøßüE^¢€(â÷þ}­ÿð%¿øŠ1{ÿ>ÖÿøßüE^¢€(â÷þ}­ÿð%¿øŠ1{ÿ>ÖÿøßüE^¢€(â÷þ}­ÿð%¿øŠ1{ÿ>ÖÿøßüE^¢€(â÷þ}­ÿð%¿øŠ1{ÿ>ÖÿøßüE^¢€(â÷þ}­ÿð%¿øŠ1{ÿ>ÖÿøßüE^¢€(â÷þ}­ÿð%¿øŠ1{ÿ>ÖÿøßüE^¢€(â÷þ}­ÿð%¿øŠ1{ÿ>ÖÿøßüE^¢€(â÷þ}­ÿð%¿øŠ1{ÿ>ÖÿøßüE^¢€(â÷þ}­ÿð%¿øŠ1{ÿ>ÖÿøßüE^¢€(â÷þ}­ÿð%¿øŠ1{ÿ>ÖÿøßüE^¢€(â÷þ}­ÿð%¿øŠ1{ÿ>ÖÿøßüE^¢€(â÷þ}­ÿð%¿øŠ1{ÿ>ÖÿøßüE^¢€(â÷þ}­ÿð%¿øŠ1{ÿ>ÖÿøßüE^¢€(â÷þ}­ÿð%¿øŠ1{ÿ>ÖÿøßüE^¢€(â÷þ}­ÿð%¿øŠ1{ÿ>ÖÿøßüE^¢€(â÷þ}­ÿð%¿øŠ1{ÿ>ÖÿøßüE^¢€(â÷þ}­ÿð%¿øŠ1{ÿ>ÖÿøßüE^¢€(â÷þ}­ÿð%¿øŠ1{ÿ>ÖÿøßüE^¢€(â÷þ}­ÿð%¿øŠ1{ÿ>ÖÿøßüE^¢€(â÷þ}­ÿð%¿øŠ1{ÿ>ÖÿøßüE^¢€(â÷þ}­ÿð%¿øŠ1{ÿ>ÖÿøßüE^¢€(â÷þ}­ÿð%¿øŠ1{ÿ>ÖÿøßüE^¢€2îÅר®<È!Tò›%f,zÛó®sÃt}k®Ôäsÿ\›ùW#áº>´ÝÁ÷A÷˯õf¼÷Ä_ñóýt_ç^…uþ¬×žø‹þ>bÿ®‹ü躲ÿ}¯ýqOýTõ—üƒíëŠè"§ ¯ü~Çÿ\ßù­X5]ãö?úæÿÍjÁ Ÿ¥UnµiúUVëHíÿä%?ýp‹ÿB’®Õ+ù Oÿ\"ÿФ«´À­rqqgÿ]þ‹z{75ßúû/úìô[Ò1æßK¾¡Í dÛèßPæŒÐᩱœêS×ÿô'¦K Î¥7ýp‹ÿB’€)x‚úæÄiŸf“g2| îF'#š¢Þ*¹Iæ‘ô±ý ïØÞà\eÃn »fÞ™#½kjÚ_ö ²w•ök¨î~îíÛsòõÎzÕ <5¿L¼³û^>Ó}öÍþ_ÝùÕöã<ýÜgߥ5çýmÿRÛOëø]+[¾Ž-^êþ8ÛO´¹¸ýÿ›ó…C„ێ÷TV~:‚å¥W‚ß"Õî£÷‰1!J¾ÈØ>ã¯òü&Öã ž9Ô:ö›v4ÍÒÉØËowó„;ÂR7•ôü{õ©¿áûE¥ø¾¾y¯/Y®#ŒGå˜ùM«“Œy'5NÚÛ¿ùº_úܯ­\˧jÚ}õ—دO’xöMæ+¦$68ÈÇz.¼DÚ…§Jc´‘ ¢; ¯D26pŠAÜV“ÓN÷sjz‡Ú®'µ6ŠñÂ"Xã=p¹<“ÎsÚ©Ëá ¦÷z¤"W²[)žK=á‘s‚£xÚpyäƒK§õçÿ­.¿®ßðIµõüQVG=œº|s”–_/fç?0œœcŽ* ¼wi¤ð·6ér-YÚ‰·giaR ÷Î{â¯ÿÂ?såÕŽ¢°I ªZKæAæ NA0Úzúõ¢ÛA¹°¿–K=B5²–s;ÛÉj',÷ }Ž3OKùkùÿ‘:Ûîü¿ÌÞ< æ,|Wqp–W7ZX‚Âö_&Òà9 I ¹vŒdŽÄÕõñ¬Ž#z¨,v‚Útà~$¯±<9áûù´/ûJí–ÚÚC:Yo-Æ;w19 g8ÀíIn>…¸5ï²Û]yp\\ÜÉ©Ék2O»suáˆùN9ǽWÖ5y4ýcC»Õ!ÌÈ0Ã)—{mP¡x$ôïWßÂù·G|ÑÜý½ï ˜F–Íü%Iù† ¦sÚ–ïÃM«=›kQ]ù *º­¿–8cæ;HÆsÏáBÛúíþcëýw+j0m:Hm§µ´†õ óåŠâýbTRH ™ŽcÞ¦·ñ<ÚÍ”Zfž³-ŪÝ3K?—± mÆœ‘øSWÃ7ÐË Ì:À7‰Ùä–{Q –0I]˸|Ã?x}+J %âÖWR’à;ým™D{A!·ëÇÓõ¦¼ÿ­ÿà ÿ_‡üJúæßÄZ-¬Rm‚äÍæ®ÐwmLŽzŽ}*ŽŸâ«›³c%Æ– ´¿vŽ –ãyÜvŒgièMk^ékÕ´ëï;gØüÏ“nwï]½sÆ?¥oá¯#NÒ->×»û:ãÎÝåãÌáÆ1ž>ÿ¿J@ö3´ŸÞÚø=um^Ú%Œ•gùæbÛ@ ¨ ÛœšXüsYß¹¶·–{DÂZÞ,ѸvÚ>p8 õüêÌ^”hÒéj^eˆæØ,d„‡Ü¤¶HlaSO ß^é767º”24¥ ɧ—·kän9Î=©îÀ.u½RÚKS¤@××fLD/>ETç~ÎùéŠoü%!´õu°ê tlþÆ\ J9 ¿M¸ç>©ºýž¡sâì$04b}Ó´TL¨Àa‘×ê)G…¶éê¢ýÆ ·f÷ížXæSÁù:mÇÏNô¿¯Çü€¡®k^x{T¶žØÙßZI’5“xÚΤ2¶Aç°éWõ¿ õ#š;F„” þ˜«7Ìq‘0ZI<,÷6’]êKÛò…î ª›(2xõç'š‚÷Âr^mÔ¡Hï^9.ZnbÊ|­¸mhàçÓ[ ,Yê:›ø£V¶òâ–ˆy¶˜Œ… wsêEUÓ¼uk¨j6°,vâ¹8Y.ÕåAx‡*=Olâµq¹qm|©ou³í6ïíÅFß•²6äc±ªúvs   ~&ÓmÕŠAö=Óç ¶;|¹4—ŸõýÃò4uÉåµÐ5ˆ¤±[Hèñ H5™i®_Ák¤JÊ$[ÇX|èî à”ʱR1zžMRÏX†]5­u8Öé"ÒXM€AæeÀük3S±½µðÛiwϨ\²ªÙ=µ™S¦  9äàphÚÿ Þß2Ãx¦ê[´¶²ÒÒi%¹žŒ—>Z°‹›;N9$cÛ­,Þ1‚ßIûLÖâ¡tlÚÞi•%œÈx ŽsúU9´=BÒçÃvÖ3ä·Ž:èÀeMì ’Ã#ï÷xøP9cûsý¼]›ßµ˜Á̧ƒòtÛŽ1žèþ¿þ¿¯À·áý~-v’«Ëo/—'“8š3À «Œd`úõÉßx—Q·mZeÕnVk[ÇŠcb Œ“`ÛÔä—®ÂM!…_S‹ÌYÃÊÑZG¹‚Çïg5™'†5º¼:ÊEe3Ë,bÐq†Ëc ë¶Ž¿×—ü­¿¯2ž©¯j0Gâ&†ä/ÙÕ ÚªÁ7ýìqÎ}ó[~(¾¹Ó¼5wwi'—è>µk^ÿ‘®úòýJ«áŽƒëXQzÏ×ôGV%%vþ_ÕÜpQDpQ[œ£.¿ÕšóßÇÌ_õÑz×ú³^{â/øù‹þº/ó êËþAö¿õÅ?ôSÔ_òµÿ®)ÿ Šž€¿ñûýsæµ`ÕuÿØÿë›ÿ5«€"~•UºÕ§éU[­ #·ÿ”ÿõÂ/ý J»T­ÿä%?ýp‹ÿB’®Ó½ÜR8‰â¼O¼)8ÝÁR3ôcP%?òásùÇÿÅÕú(?|¿óáuùÇÿÅѾ_ùð¹üãÿâëBŠÏß/üø\þqÿñto—þ|.¿8ÿøºÐ¢€3Ä’ùpºüãÿâêkHåóe¸™<¶p¨©HQœgg,z{Uª(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(’׿äkƒþ¼ŸÿA’ªøc úÕ­{þF¸?ëÉÿô*¯†z~5ÏCyúþˆëÅ|4ÿÃú³»ƒî (ƒî + äuþ¬×žø‹þ>bÿ®‹üëЮ¿ÕšóßÇÌ_õÑwV_òµÿ®)ÿ Šž ²ÿ}¯ýqOýTôÕÿØÿë›ÿ5««¯ü~§ýsæµ`ÐOÒª¿Z´ý*³Ži¿ü„§ÿ®èRTÞ¥6š4ó Æßh½ŠÝ÷‚p­œ‘ƒÖ§ƒþBsÿ׿ô)* oM›Rx…£_³ÞÅpûÉUÎ@ÀëMn½Pû”'ñ¬J§NÔ^(î ¯œ‘©F—8Ú>lòxÉUë=v;Û{·ŽÊñn-l¶Žª%ÉŒ|ÛNAãšÎoݵ…ÄdäÕ…ð;Ž6 ±Óï`ozMK×·o­4SŸmx5,À0Œ Èø±Ž3Á¡mýyÁ¿×™v?Y}Šöâæ+‹F²`³C2 àœmÀRAÎF0j4ñ]¢ý¨]ÙÞÙ=¼K)Iã]̬v®Ð¬rIÅb7†šÇIÖ%¹:v˜’¼D-Ë4Q4d[*¼xïUc´¸ñ•æ¬^K"†ÖÒkbÒÂ]dgÁ,ïp:G_ë°º]ÎÇMÖbÔn&¶k[›K˜U]¡¹Pkg 0H#ƒßµAâVãIM=­ iÌ÷k Æ€e*Ç ’xMSÓ¡³ðÔRÜêvº&’$+ÉjûCžN e_Ëš[û‹oEnt=FÆâêÆá.Br§b¹# žqGTËrx„G{Ó/ÞæX„ͬy‰KmËøëèMI6»¶§Å•ä+4žTW,«å;ã ‘œ Tvš}÷öøÕ.þÎ¥¬„‘;6yn2ÿõVð÷öÌ7/Ÿ'—ö£zÎÿhdÉ!1·d½Ž:P·Wþµÿ {;Z™¬|Yh.Þ&³½Xçì­vc_(Iœ`á·c$ ãÕ«r=FîX­ìîÌ1»ÆnЍˆ²œ>mÝxéYÒøvíô‹ûA$eÆ¥ö´%ŽyŠø)tøoKÔPO*Ee#ß)aGÏŒqÜŠ‰ÓšÞIãfQŒ•Á'¡ n·¨ê6úž™a§5ª=á—sÜFÎ"îà+-Ac ]ÚÿÂ;ºH Ómž)pOÌJxädwÅ%îs­O£Ë¬Ea0¶óMÌJ£]¡‡8ã­SK —˜–ž)1Û]B5’æÚìZ(²…à àóÈ'Œi5•Яn­-åŠöÒXÒKk„×s(èAàç~½²µK{m•,o>Ó§‡ÏÝ †ŽLöŽdôô§Ïá½BþËV–êkhõ ãEsEˆåA$rs“Žý)_—ü5äÕçŽÉ.¨³3`Qu¹ùñ¡&³n`1Á$Vψc¶hâþο–é¢óžÚ$Fx“8Ë|Ûzç€I8â³›Ã×ÆÍ¤¶šÕ§]Uµ73lu=ˆô™©øjîÿQ‹T–ÇH»¸kq Ö÷EŒjA$26Ò{àäsGEýtÿ0ëýwÿ"ìþ.³O$ÛZ^Þ¬–¢ïu¼jvÇœdî`“Si¾&µÔ®àmnàûLFky'Œ™F2Wž„*+} Xu/´"ZÃöhµE÷p1÷yúûTv:ݯü#»¤€6Ùâ—üÄ Q·ŽFG|Sþ¿?øý~_ðEñ.¹q¥^i¶ðÜØZ¥ÓH{ÐJ&ÕteëÓ­¾#>l„ RâTó|í1ÊX÷mÉ-!îpMHúV¡{¢Þ_›3%§œn-ÛNåÂí}3š´šd‰âfÔTÆ-͘·>öí峌cúз±ž(³Ží¢6÷mn³‹w¼XÇ’²¤ç=HïDž(³Ží¢6÷mn³‹w¼XÇ’²¤ç=HÆ3Þ²íü"muydþÎÒ.íåº3ù÷ Dñ†9 |¤6C‘I„¾É«M)Ó´{»i.MÇÚ.‰ã w>R¡È¤º_úÛþ>¶þ¿­Àô5ÈÁâKµMÊŽãQKÈçi6ÅJÛÁÆà£¯­k'Št dX£ÖlZG;UDë’Onµ—oáÝRÂÏE{W³’ïO£¤®Â7Wô`¤ä`v  ßÚØË25¥ä«lª÷REe·gæç®9;sÅE}âë; îPÙÞÍ ¨FžâÕ’0à Ÿ›'@k>ó“K¬\ßÿgè÷ßkØÒ-àlÄáB‡iÊœt8«Wž¹žÅ [ ÔaHà &ÔÛóqÀúfŽ€·4´Ýr-Fî[Ckuiq,ž]ÊY 0Á#Zv­¬dÇæ½…åÄ*…ä–VÔœ°?5ZM2ù5™5f·ÝýŸöxÄ…±æ$÷ZÊ×|5¨ê× <‘i×m-˜„¥Ãº­¼œåãù[9Ï|4?/ëp^ÖÆÍ׈màš-í®¯¦š!8ŽÕ+èıõÍW³×.æñ¡§µŒï-IP n@Ç~[9Éì Bš.©§][]éÍg,¢Ê;Iâ¸fE;:2°÷<SÁ§j–šõÕÜ_c{kß-§ ì6UÚv¸`xêE7åýHZ‘YøŽ(ôm:Wû]ýÕÞÿ)#…Y6“’T 9Ï¥Nþ)³]6+Ä·º•¤¸û/ÙÕ•eçå ãÖ¨ZøwRÓ¬ô™md´{ë–'I„r#œŸ˜ ‚0;zÓãðÝàŠÚIf®Ž¨5 ¹8#jq“ޏÏ4uþ»ÿú]¿ÌÙÒµhuXæ)ðKž\°Î¡]ó‚GBA¬±â9ω¾Èaû,Èmãßh »›qÇÔUÛ=:êÎÿYºS Éác óqÇ#¶x¬Sà– Æ··Ú‹‰Ã›©<Ÿ´gví™Æ7{Rëëúÿ€ ¾ ¿×4Ò¯e6žâyRky-œ»9õa êsŽ®…7ùkæm/»oLûV\ÚuÍÖ»§_Lbòm`“ä Ió›#Ž€n÷éZÔt¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(’׿äkƒþ¼ŸÿA’ªøg§ãVµïùàÿ¯'ÿÐdª¾éø×= çëú#¯ðÓÿêÎî¸(¢¸(®ƒe×ú³^{â/øù‹þº/ó¯BºÿVkÏ|Eÿ1×EþtÝYÈ>×þ¸§þ‚*z‚ËþAö¿õÅ?ôU Ö¬n5i´ÈåÍÌK’1Á=À=Èã?_®.3ys¤»Y”)S´dŒãœ~ã{¤ß÷åÿšÀÉ2E¸ª•,ÅzœcÖžl¡õ›þÿ?øÐm{'ÿÀy?øš®¡þíÇþIÿÄÔíegÿÀ‰?øª­aþõÇþÉÿÅR´W{™®•c@Ã…,sŽß{ô«•ÃøÝ4lÎΩq£1É–A‚{ò§ó®˜íExMîÔW„ןüMÿ˜_ýµÿÙ(ëj+àš(ïj+æOøkM²Ñ&“Ä1»7ê¤1d0!ÈçV9É+“Ó¡ZårIìÇsH yuëøü=Õ¤¿fº“fB0`­&ÑÛiߎœÓt-]®µ{۪ŪCQÊ—)³#q ©Ùòö§zÑ·ðèÒ§¾“H–8®QÁö}É‹œ¸‡QŽ:g4iºGö|—\5ÍåÁlÌ¡FEU2x÷§ý_˜_×äeø²Æ]BLŠÃÉl¹ c÷Ãú×!ÿÝçüôƒþú?á]·ˆµ=?J>¥r-áa  œ·ïŽ8ö³!»³½¶Y¬§óÔ¾Ó…Æß®y¿1I5µÆã;s[Nç;ÿÍî2$€ÿÀøT ¢Ë‘§¹¶#g•ÈP:uÅnëzÔZ‚\ÍÊeE!.A#$ô/¿Ò¸KÅš¥ï˜`†+D+À|ŠG¡éÏOþ½Q[„c)l8´é§¬r@ê­µfVUã<àçô¯4ø›ÿ0¿ûkÿ²W«ÛxcNÔ"‚òîæëP(erª9P0W8gë“^Qñ7þaö×ÿd¤¤›Ð©Ó”-sÏë¢ð¾ˆo¤{ûˆRK8Fc}ÃÍv…#Œ¨ù¹8éAÅcXXÜjW‘ÚZ iŸ8€’r}&½5ï4í;NµÓãi­`´ŒlŽéi™¹gܼÇ;º7µVHÕlt¯â _³ÈP´S€Di2ÇŽ1Ÿz ¶ƒO‰˜#$1î¢ò8ÉeÇ ž¼s\ž¡x’Ú……·äz ‡JYîoÒ;‰cŽo•ö>>\ûtÍwÒÇÆ’“©«f”ëæ^Ísrò¾žgO¨ü#mwöúÕÊ Fï7|ÅÑ÷r“È#Œžy-׊ñûë ­6äÛÞBÑJ8$ƒÜÁ¯¢à½–Û{ýžE*Ê‚xççšÇÖ4 ]FØÅsÏjÌ[œƒÛ8åOZù¸æWjñÓúØõ¾¥¦Œð:÷ïȳ¥ל?ú¯)ñ‚ï4€óÛn¹´PYŽèÆ{ŽãǾ@¯Vð÷ü‹:WýyÃÿ  ô©ÔEÍsŠp”¤iQEd…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Z'ü„ýs—ÿEµoxg§ãX:'ü„ýs—ÿEµoxg§ã\ô7Ÿ¯è޼WÃOü?«;¨>࢈>ࢺA—_êÍyãæ/úè¿Î½ ëýY¯=ñü|Åÿ]ùÐueÿ û_úâŸú¦G§YŨK·S(Wu ‘ùJ}—üƒíëŠè"§ ¯ü~Çÿ\ßù­X5]ãö?úæÿÍjÁ Ÿ¥UnµiúUVëH8ø¿t,ü4ò+ºÌe¶Xv¨ ±ó³œ‘·qs=Íy÷†da‘¹qÈh`;Ž+‚ø›ÿ0¿ûkÿ²W[yyö¶¿Ùûe3F²…>`O$žOÊOnÃð‡UD:Þ•¨k §˜ðÆîy~B§h²® ?‡c^Œ“qå©oy;ßñùØã©7íç.h«[úC¼ á&Ð4v½¾…×P»÷È»Zòp ŽCŽ;2§=Oön—ªZ¾Ÿ: |nUl ç¡×9Ï׿5ZÆòãV³3ù¦X\ÿ oUÁ9Ûƒþ÷?Z»mj‹l²6Â@;Açÿ.?È£EC——f·' U»ótgqðüÉesm{´B»ü¸“¼a±üKê{}«+O´]>U7³ÏæµÅQû­-V„©Ô³š´‹ZuüîÞEìJ²ì‘Nb}T÷ê?>ܳnAz®2ï‘é\ÿ’,l<Ç”Mb'p •>hú䃑ÎpqÐà㑚µ¤mK ‰UíKí†è6á·¨{0dœzŸSâÕ£(»£±èùCÄ7VZV‡6¡$‰±Ë ¸ Î~ê\‘Øp'€MM£Ü5Þ‰aráCËmŒ %Aâ¼›Ç>$:ÞªÖÖÎÂÆÝˆU Èã È1ÛOñ“^©áïùt¯úó‡ÿ@ëà¨{8sKvyXš¼ò²ÙTQEvœÁEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP–‰ÿ!ÿ\åÿÑm[Þþµƒ¢È@×9ô[V÷†­sÐÞ~¿¢:ñ_ ?ðþ¬î û‚Š û‚Šè9]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@Õ—üƒíëŠè"§¨,¿äkÿ\SÿA=5ãö?úæÿÍjÁªëÿ±ÿ×7þkV Dý*«u«OÒª·Z@qž=ÕŽ ´æ35¼“Á Ìm–&[ÊÀ‚ ã¨ÁéëÍyŽ‘ ø*ú-@øÅ¹ÃGo ¬·K)(áI ÔsÎjôÿcìy*óB0êr' y·öNŸ‰‡Ø >s«¹(3‘œ`ÿSÀÀ¡6›e;4‘ÑKñóRÓÑ´kA Nv‰ä!ÏLÀ”ƒÛ¾ ywB¾´°W¼iË9‚F—†ßÉüz¼çéZÖñ¥ª²À ¤ÔŸééW¦Õ/nl"±žo6Ö3X¤PÊv}Ðr>`1Ðç=ó]X\G±jm{Éÿ_yÏZ—?ºž‡¦­Âß,öðO(·l¾L{ÊÆ>óA‚y8¬ß‰2ɺD±HÑÈ+#¡ÁR6AìkÔ£ñ¥‰±íÒÌ«!·[H„e[9vã'?Zò¯‰¿ó ÿ¶¿û%V7õª¾ÑÆÚXT(*J׸ž ñôZcOk­‡–;‰LßkÛæ8‘°¾NHÀÎF[ ðIãÖƒ%Í¢O¦ÍDT²O‰"6ÒmÎCçWÌÕÐxWÅú…/ÖkR²Ûûëi0UÔã88;OÊ9ƒ9W¢ú1kf{³“NAme܉ä Üàv·¶>À¨ÛL¹IÚAmåÅ4Çx‡æ1ÜP:g·¥Yð—ŒtoÚ7“ ŽôF Ť¹Ýç¨oâ\ž£ýœ€HÒùkåÉAÔŽßZ<¼ï©—·’—*èyÞ¥ðIîíEÃGŒ¼r¦3Ãc¾yŽ}kˆñ׊ ¸¶X4ù™g¼mòp‘·ñ<÷Î2:^¡âÍvÏÃzD·³nfêâVÚ]Éù@ÏAœž9ÀcƒŠùÂêê{Û¹n®d2O+w=ɬé/u¦·ýÙâ/R÷ïȳ¥ל?ú¯¯~ð÷ü‹:WýyÃÿ  Øå4¨¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠÐÑüL×þ¹Kÿ¢Úº ZçôOù /ýr—ÿEµtþ´¬6ÛÜî û‚Š û‚Šbuþ¬×žø‹þ>bÿ®‹üëЮ¿ÕšóßÇÌ_õÑwV_òµÿ®)ÿ Šž ²ÿ}¯ýqOýTôÕÿØÿë›ÿ5««¯ü~Çÿ\ßù­X4ôª­Ö­?JªÝiÈøáí0£'tûZ¸O"Oîþµë¿ññ/ýr‹ùËXVº¸>ƒRº\4ˆ¤¤Kœ±8G¹"¸ëbÝ)r¨ßn½ÍcO™^ç äIýßÖ"Oîþµ×ßë3Km YÅs Ã]‹ycÛšŸ!n7œ€9É5oNÔng¾¹´–ÚR°2¯žvàV!°ß{$ýÑŠÏëÒJü¿ü½’½®p¾DŸÝýkñׇu]gì`µó¼¯3ïq¸êG¡¯iMa’óQKˆm­›…ÆÕˆ?6ây=¥X±Õ#½™¡6óŲ̂$ :€YOF'üE'’Wäüà±]Ï—¿áñ7ý?ò<üUð€ø›þŸù?þ*¾‰Ä7-~bó¬e?lk² "`¡±¿ïƒ“À«É­$k°%ÕÜí4ʱ¢ `°{´p2NOO%ö?øì—s渼â¨&I¡°xåƒ#¥Ìa”ŽA7½;AÕüWq V ±d˜µìSD7 Šsê2¾ÙMw‡Ä[o Ç“s%ƒYGqò*þèl³sž€tÏJгԦ¹Õ/-M³a*λvࢶ[9ç°Å)c¥fœ?øö)½Ïñ¶‹âoëŽ`³’[ [c$уƒÇ–Î g¶85ÍÂâoúäxÿøªú“S¸¸µÓæšÖ–TR@vÚ£9?áT¯uy­ô8nb$¼šéÎÜíÜÄ÷Ú?Àw©Ž=µ¤?ø{ msæø@|Mÿ@Ïüÿ^¿£[Ëi¡éöÓ®Éb¶Ž7\ƒ† õØ\ë7ªŽöÑÛ•¶´K©Ãƒ—Ý“µpxáO'=©Òëw>t³Ä›&Žæ1}¿09Àxã<ô«úì¿“ñÿ€O²V½ÎjŠë_^ˆý¦(-æ’WoLóü\cÍWÒõKÍR;…‚æÊB‹%Äq1ŒÉ(WvrÇ^”¾½+]Ãñÿ€?b¯kœÕÔY]ê·zcÜ ¬W÷­åÊÑ0SãvÝÝÈõéÍXµÔn&ð÷öƒ[ƒ?’Ò“8r3ŒwÁÆGÖ‡kìþ?ðQ¿S¢º]/ÄΓÉyybmÐ!1Ÿ-70'aÜO#¿~‚•5Ã¥|“Ç4–©4j“¢©Ž0ȸÉÎzž¸=iývwk“ñÿæ/d­{œÍÓG¬Î/á‚(f»Ià6×c…ã,Ñ“îx­Y/#Šö+VVó$ä0¸Ïþ„*^`רüà QO©ÂQ]Kø–ÙbIVÖíâ6ërŠ6Î |ÙìzfŸu­&Ëô†;¶±±’åBwœ“‚;cޟקüŸüö+¹ÉÑ]lšìËåù3*4qË2*íF|`‘ÏÌ:ŒÓ¢×`–ð@mî#F•áIÜ.ÆtÎ@ÁÈèzÒ—×åkò~?ðØ®ç!Eu±x†ÎEgxç†/%§Id@X׫. =ÇÍ6ÃSž÷Zš&‚{xVÙc™TK7ÍÁ=€ëùSúôµ¼?øìWs”¢º•ÖÖ°Cwy#Ë8Q`ÿîiÐkMs©,PÛ¼¶më*í7å²Àãtõ£ëÒß“ñÿ€Åw9J+­‡Ä6rwŽxbòZt–Tdz²à“ÜuóH¾ €,Æk[¸5G "®çJ®ÐòHÆ(úôÿ“ñÿ€Åw9:+®:ôB ~ÉtgóþÎmð»ÃíÝýí¸Ç9Íi#Á¹É äÁÇ|åRó·‡ãÿj‚}O?¢ºÝQ¸¾’ò+,´2ÄÑ‘žQ‰#ëÞ¡Óµ¶iž ¸§ù®å†;‚«å’¶¯=9SÇKUÉ·Ÿü{½ÎbŠëe×âƒÎYìîã–0¤FÁ3 fÚ á±×ÔŠ_íè<’MµÈ¸yfÚ¾fünÇ]¿wœç¾¿/äüà±]ÎFŠèôýyÜyrÛÜËq,óm‰BDWÇ9`8ÈèI­«»¨ì¬æº›>\H]°2p(–>Qvpü࢟S‚¢º;ívh¤²PÖúrN²÷à»·ÚàsŸ^Ôèu›ÛÈ,b·†»¹9yÕãxFG^µ_]•¯ÉøÿÀò²]ÎjŠèïõkË,àšûLå—žT"<®0.0yõ5§¤^¾£¥Áu"*4€ð¹ÁÁ##=Ž2>´¥j<ܺzÿÀ¢¯kœMètVÚÝüàêþgžQ^‡EÚÝüàÕüÏ<¢½Š?´ÿ»øÿÀ«ùžyEziÿwñÿ€Wó<òŠô:(þÓþïãÿ>¯æyåètQý§ýßÇþ}_ÌóÊ+Ðè£ûOû¿üú¿™ç”W¡ÑGöŸ÷øõ3Ï(¯C¢í?îþ?ðêþgžQ^‡EÚÝüàÕüÏ<¢½Š?´ÿ»øÿÀ«ùžyEziÿwñÿ€Wó<òŠô:(þÓþïãÿ>¯æyåètQý§ýßÇþ}_ÌóÊ+Ðè£ûOû¿üú¿™ç”W¡ÑGöŸ÷øõ3Ï(¯C¢í?îþ?ðêþg¢ÈQ딿ú-« ð×õ5¤ßê¥ÿ®Oÿ šÍð×õ5Û†¯í¢åkT‡#±ÝA÷A÷Ð@˯õf¼÷Ä_ñóýt_ç^…uþ¬×žø‹þ>bÿ®‹ü躲ÿ}¯ýqOýTõ—üƒíëŠè"§ ¯ü~Çÿ\ßù­X5]ãö?úæÿÍjÁ Ÿ¥UnµiúUVëH HÒ]J¨¥•g¼µÌ¯…¯ßI]2æâ9m‘W`DT‚ ËGŒs]¿ü„§ÿ®èRU)üMgºšcsò¼ÙùQÏE?_Ó#׎j˜^yó^ßð #RÊÖ0íü7, l<¨chn<óök?)_ä+ŒdóÏZ³‘{oª\\Æíä\òB`$î !³ÀàqŠê%žÉ!d|68ÚOô©¾Émÿ>ñß²x÷—äWµò8©¼=s4÷À»‹KÕýì^IÜh\«gŽƒŒ’ÇF½‚í®®å{‰¼¡ •€ÆAÏLœ’zŸn•Øý–Ûþ}áÿ¾e¶ÿŸxïGÔU­Íø öÞG<72…tg[„»{”—É<bYÏ ‚GëU.ô=NÉãŸO†â[ó’D*T,»3¯CŽAíÒ½ ì¶ßóïýð(û-·üûÃÿ| ko´×Èàm|/tºcA+:É.ž–mˆ‰ @l·¿ÞéíS>‹ªÚ›Ùl% Ιðr$ÙÀ‚ vÍohŠY T ’P ohê`”Œ‚Eww/Á«n‡75…Äör@É&^2…¶ãÅP¸ðÊÝXÅ ‹r%ŠÜÀ²ÆÒ'rŒŽÁ®×ì¶ßóïýð(û-¯üûÃÿ| •—¥´˜ý»ìpsxVá¢A<Ñ$–ëmqº"æDèIÊžHÏ=}ªI|5;ܾǑ,å–9¥ƒÉÉfLc žʹ=;We,I°˜” v(Ê£ü¤ç…KUõ/ï~Dû^–8Y<-ékNÛ|¢3æ°o^ØÇ¿µEiá»Ë'·1LÅÝ-æV·'ÌU'sòŸ˜ú×qE/¨ÿ{ðAí¼?ƒÁÿd²¹·û4RFð4Hb³ÎAõ|àŸÀ{ÔøwUÕÙÕatßQźÎQ‹e”3)>¼óÀ¯G¨/eh,g™>òFXgØU}S«½§‘È[ønXØyPÆÐÜyçìÖ~R¿ÈWÉçžµrÞÏTû«6ápÏ!FòòK¼ gѦ• "´“\³‘Éó™sø/öE·÷îð!ÿÆ¡à·ÕklŽ^ÇH¼·¹žêéÚ{‰‚©)B®pÉõ=ê¢øjð͉n­VáîR$·*ÁØ’2Ù9žÀv®Ïû"Ûû÷?øÿãGöE·÷îð!ÿÆŸÔu¿7àƒÛy ¿‚çƒ9tÎØ×tv…¶H.wÌqŒñWçðåËÜËu ’GpnxØÂX!„ ŒòϧZëÿ²-¿¿sÿþ5Öibhd›ýb#+ÈXÌ¿×?…7ƒmÝËòj»\¾½šËìï2Ò¼¯'ØÎåflæ3»ä#ך҂ÇSk cœ;3íf‹rª–;AãÖQIàSVrü*Öw±ÂYøRKyÒIxƒÍÌ)nR<8Q…\£åéÏSO_ ÞE ¯‘q*ÜZnXehK,ÿ ó€9+¸¢›Á_y~=¯‘Á'†5¤ŽxîWí ò»³Ù–Fó1œ.ñŒmõ5¥¦ié¶BÜ,’ììÞ^ÐKNè9é]]¥æVrü*¶ÖÆÙçÿž2ß&³Ïÿbÿ®‹üëЮ¿ÕšóßÇÌ_õÑwV_òµÿ®)ÿ Šž ²ÿ}¯ýqOýTôÕÿØÿë›ÿ5««¯ü~Çÿ\ßù­X4ôª­Ö­?JªÝi¿ü„§ÿ®èRS_CÒ$‘¤}*ʼnff·BIõ'ëù Oÿ\"ÿФ¬;Ÿ_Á­,hÈ×ÂÆ>ÔFõ=îtÆIôÁ¦G)Åŧýu?úU¢Â©\'²Ï_4ÿè·§³óH ;‡­‡­UßFúµ¸zÒ3á Q¸ÀõªÛé‰R2FGQÚ†3—\»Õ|=¬­ì֑ζR²H&€í<6ãóp¨cÕu=;F;+ˆ.4‰%‡ÊG\lA•|±ÎCA¨¾€½Ä—7×·RÍlÖ¾dΙHÛ¨]ªâsR\h6—1Û£É8ZÉh»XrŽ¡ID¬›õÏÌWŒö¬”º‹Y¹Ðô» ýJ £¸šfk‡[‚Ѱ_-œ’à Ç<ö«¨Ô4É5¡òõ;냭« ÝœuÜ­T cgom=ݬ¶ŽïÔR;sçy%vyȤ‹á»›*â©Þy,ï&µ?Þ‘QˆROsŒ}«~©éZ]¶§ÇgjËRX´¹‰Ë3ä’M\ª`SRÿEÿ®ðÿèÅ«uOR?è¨;™âÇýüZ@fx‹U›HÓEÄ1«á 8%P`òqôÇÔŠä¿á9¿ÿžö?÷äÿñÊô:\ŸZç«J¤åxÎÇ] ôiÆÓ§ÌûÜó¿øNoÿç½ýù?ürøNoÿç½ýù?ür½'ÖŒŸZÏêõ¿ççáÿÛëxùò¾ÿøÿÂsÿ=ìïÉÿã”Âsÿ=ìïÉÿã•è™>´dúÑõzßóóðÿ‚[ÃÿÏ•÷ÿÀ<ïþ›ÿùïcÿ~Oÿ£þ›ÿùïcÿ~Oÿ¯DÉõ£'Ö«ÖÿŸŸ‡üúÞþ|¯¿þçðœßÿÏ{ûòøåðœßÿÏ{ûòøåz&O­>´}^·üüü?à‡Öðÿóå}ÿð;ÿ„æÿþ{Øÿß“ÿÇ(ÿ„æÿþ{Øÿß“ÿÇ+Ñ2}hÉõ£êõ¿ççáÿ>·‡ÿŸ+ïÿ€yßü'7ÿóÞÇþüŸþ9Gü'7ÿóÞÇþüŸþ9^‰“ëFO­W­ÿ??ø!õ¼?üù_üÎÿá9¿ÿžö?÷äÿñÊ?á9¿ÿžö?÷äÿñÊôLŸZ2}hú½oùùøÁ­áÿçÊûÿàwÿ Íÿü÷±ÿ¿'ÿŽQÿ Íÿü÷±ÿ¿'ÿŽW¢dúÑ“ëGÕëÏÏÃþ}oÿ>Wßÿó¿øNoÿç½ýù?ürøNoÿç½ýù?ür½'ÖŒŸZ>¯[þ~~ðCëxùò¾ÿøÿÂsÿ=ìïÉÿã”Âsÿ=ìïÉÿã•è™>´dúÑõzßóóðÿ‚[ÃÿÏ•÷ÿÀ<ïþ›ÿùïcÿ~Oÿ£þ›óÇŸcÿ~Oÿ¯DÉõ¤9#4}^·üüü?à‡Öðÿóå}ÿð «K¶‹I°Úè3gvßîV_ëC½Ãk}˜¯ü{Ç»([øŸÐŠ­)ŸIÙ—0à$L™ÉÇE>ÿδtûY!/q1ÄÒ¨R ðª2@úòk¬óÆçRõOûðøª3©z§ýø?üUhdúÑ“ëLF~u/Tÿ¿ÿŠ£:—ª߃ÿÅV†O­>´ŸKÕ?ïÁÿâ¨Î¥êŸ÷àÿñU¡“ëFO­gçRõOûðøª3©z§ýø?üUhdúÑ“ë@ùÔ½Sþüþ*Œê^©ÿ~ÿZ>´dúÐ~u/Tÿ¿ÿŠ£:—ª߃ÿÅV†O­>´ŸKÕ?ïÁÿâ¨Î¥êŸ÷àÿñU¡“ëFO­dݛ߱ÜyÅ|¿)³ˆˆì{æ¹ï u?ïëu³nyÿ–Mü«’ð×Sþñ ê¸(¢¸( ]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@Õ—üƒíëŠè"§¨,¿äkÿ\SÿA=5ãö?úæÿÍjÁªëÿ±ÿ×7þkV Dý*«u«OÒª·Z@Goÿ!)ÿë„_ú•dÁg1¡•T¨}¿0¨Ï§«[ÿÈJúáþ…%aÝx‡S‹Ä!#Ó/MŒùo‹I sÝÁÇAéÜgÚ˜Ôk$@´†2¹\v=?¤~5[gþZÆíÊOþ*­ÉÌöñ“§üô§^ê0Xa9`n&X#Ú3óã?•QÅßüõÿ¤ÿâ¨Åßüõÿ¤ÿâ«_4f»ÿž±ÿàŸüU»ÿž±ÿàŸüUkæŒÐF.ÿç¬ø'ÿF.ÿç¬ø'ÿW/µ(4ö¶nÍÌë{F~cœgÛƒVóL Œ]ÿÏXÿð Oþ*Œ^ÏXÿð Oþ*µóFi™o=È’yƒ¼cäEˆÆ{à’IíWi·Xóm0®}¶±þ‚LŠ( ŠcKH‘´Šó±Iå±×½>€ (¢€ (¢€ (¦¤‰*ÕÐôe9€EÉ%Ž̒Ȩƒ«1À>Š( Š( €À‚2Pih  âÊ0­:Ð-Ä€  Åc‹þz\ÿàLŸüUX¢€+ýŽ/ùésÿ2ñT}Ž/ùésÿ2ñUbНö8¿ç¥ÏþÉÿÅS’Ò$pÿ¼f^žd®ø÷‰æ¦¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ fŠ( Š( Š( Š( Š( Š( Š( Š(  Úüƒnë“*ä¼5Ôÿ¼k­Ôäsÿ\›ùW%á®§ýã@ÔpQDpQ@ ºÿVkÏ|Eÿ1×EþuèW_êÍyãæ/úè¿Î€;«/ùÚÿ×ÿÐEOPYÈ>×þ¸§þ‚*zjÿÇìõÍÿšÕƒU×þ?cÿ®oüÖ¬‰úUVëVŸ¥Un´€ŽßþBSÿ׿ô)*íR·ÿ”ÿõÂ/ý Jçî¢ñGü$"ÒùEœ§ÌYÄ1;©ù~ðè=r­0:yN.m?ë©ÿаüf‰<:DO3­©D ‘¾Æ^¡í[7lö\ç÷§ŸûfôËËkkèL7vðÜEœì™®~†—T3ŸT»Óìµë{-Ji­m¥·Hîä“Íh7$Îs´óœfµtB¶¾+¼²ƒQ¹»¶QKûû–›Y ’qiIezcÙØ%½¢•Â1ŒõÊ XÖ¹Ó{‹+Û(næÚŒc° A“€Šã’NI$Ó[ÿ]„Ö†‡Š¯%†>º{K{›µ†ââ6ÚÈ„€ßÒϽQ¿Ù¡¤é+ªÝŧÍç3Ïö¶2Hë‚©æ“‘Ôœgµi[ÚÞɱj×6—Ð8Ç–¶›ã—lÔ¿ÙzoؾÅýŸiöLîò<•ÙŸ]¸Å 9q{$ÖºzÍt×[kâ.dl™#à–ï‚HÏ|Snõ ±jZ©Õ®cÕ-¯šlÄÄG€áV3Fܼçç"ºö´´{UµkXÝq¶#(1Ó¦µ‹Þ­ãÙÛµÒ𳘔¸ú63M?ëîÿ/ÄõøÿŸàsúŽ«4Åñµì‘KºÉl¦R Tç˜êÎŒ²_øŽú[‹ÛÂ-ßʉncù£Éʃ†Éõ­[½7O¿‘$¼°µ¹tVšr¿BEXŠ(b‘äŽÑäÆöU¶O| 4Mtß¼´ÿ®Çÿ@zæ¼Y,ãVÑmãþÐx¦i¼Èlgòð€Žw/N½k ³-Ÿýv?ú-ê¶«¢ÇªOiqö»«YíKä·*Ì0s¹HéHhæôÍnâËL¿Š{æ‚â+Á0ê1¼ó"2‚„9rpÄ`ž;œU›o^]é0yP@u ¯šÉ +¤yPIr§æhû§œÕïøDl¶owßló„ÿmóA›pR£’6ãi#ÅH¾³sZ=ÍÛ¹¹7b丬§øùcš~¾_§üz[ÿÀ1|CªO¢jzæ¦ašt >Φ4bB…1;G#$œ Ö¹Ôµx¥ÓtØÅ‘Ô®‘å’R­äÆ«Œàg,~`:_j³ÿõ¼¯l÷—W7­Ê Ü;Ä€Œ1ŠÎÔt&´²ÓⱋS¹–и†x."YbCü9|\``‚x^ßÄ:ÕÛÙÙÄ,î[‹˜d•¢r˜„ã!wÏÖ­]k:ËÜj"Â;#˜ MçÌϰ9 ƒòŒÉÏ4¾ðÛÙÁgs|òý²n% æÿZy qÉŒ æ­ßøfÖþêyþÕyn.T%ÌvòYÀù² éÆA;ÿ]ÁyŒ²×žÿTX£´šlw©wå‰<ã²ìüC®j¢Í,†Ÿ²iËy'°,X£ 08ês[7¾¶¹š  ¹¹±–|…{VQ˜ÿºC0>”í;ÃÖzd°ÉÌLV‚ÑC°#`9ÏN¼ÿõ¨~_Öÿðúü¿à™V¾"Ôµ³m—¤ ÖIu;\†p7(R;©çô§xvùtχv÷Ò©aolò2¯|p*ÒøNÒmÒòöÖ[h|<.¡Þ<ç •*yö­ MÒÏE]$+Kj#1)Ée9ÎqZÎßÖà·W1¥Õuëkk?9tæ¹Ô$HíãEp± çwÍ€;“T5ÍJîãCÖ4íA ûU¤–äÉ!$Gu €I ðA5°<)µ[y5-FHâ*Öûå]Öì½ ¹Î8ù³ÅIÿ½“i×¶“Mu3ÞÓ\ÈãÍb¸ÚrbŸ[‡©VóYÕžïSdV~F˜š.7n™¶ï!H /rAæ¬YkϪ,QÆ‚ÚM6;ÔÈ;òÄŒqŒKwá{k¹eÞßEçÆ±Ý,R… eøëŽ2¸©/|;ms4Assc,0ù ö¬£1ÿt†`}*z]Ÿüþ¿/ø&V™¯ë¼útP}†-Š]Î^'lå¶•\0ÇNù®’Ïí»fûoÙóæ·•äîÿWü;³ü^¸â©é¾´Òç‚[w˜˜mVÑC°#`läñ×5rÎÓìk0ûEÄþd­&f}Ûsü+裰ªÓóüÿÈ_×áþeš(¢Ì_­çü#·²Ùß=£E’3F¹vIáç¿_Lu¨5nþ´»¿Ôo­ãHT·Ù¦(Ò¹#æcž€Iï[7֑ߨ\YÊYcž6‰Š`ãߚϿðôW˧{wnlÕ4%9;vä†R3næ——êWÏô9ë™uX4ÝÛQ–úI%ó>Ó ¤…nX•$®Ê1»rGZÞðÌ×~†IçyŸ|‹™Ö @Wÿh ïN›Ãë:Û;êwâîÛpKµdmnªFͤp?‡µ]Ó4Ø4«?³ÀÒ8.Ò<’6æwc’Äú“UÜ]‹”QE!…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@µùÜÿ×&þUÉxo©ÿxÿ:ëuùÜÿ×&þUÉxo©ÿxÿ:î û‚Š û‚Še×ú³^{â/øù‹þº/ó¯BºÿVkÏ|Eÿ1×EþtÝYÈ>×þ¸§þ‚*z‚ËþAö¿õÅ?ôSÐWþ?cÿ®oüÖ¬®¿ñûýsæµ`ÐOÒª·Z´ý*«u¤vÿòŸþ¸Eÿ¡IWj•¿ü„§ÿ®èRV×lí¼B,KEöU>\³ådöÝ ÷öåÑ]BÒ¢28Y"mêXqЃŸÀš¨nfÏݲÿÀ³ÿÄUÙ@y-цQäÁ¸R˜s8é@¿h—û¶_øøŠ>Ñ/÷l¿ð,ÿñµš3H _´KýÛ/ü ?üEh—û¶_øøŠÚÍ  _´KýÛ/ü ?üEh—û¶_øøŠÙÝUmµK¸àx.¢apÂ7`È\ÉÅ0(}¢_îÙàYÿâ(ûDßݲÿÀ³ÿÄVÖhÍ 2 In'IdhBE’©›òÄc$àv'Œw«ÔË{w ÎPŸQ´Ÿè)ôÀ(¦4±¬‰H¡ß;Tž[p;Ó袊(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š( œ ž”TR€ÒÀŒ2­&=ð¤ÿ0(ûM¿ü÷‹þû}ªßþ{Åÿ}йœt£4OíVÿóÞ/ûìQö«ùïýö*æhÍSûU¿ü÷‹þû}ªßþ{Åÿ}йš3@þÕoÿ=âÿ¾Åj·ÿžñßb®fŒÐ?µ[ÿÏx¿ï±GÚ­ÿç¼_÷Ø«™£4OíVÿóÞ/ûìQö«ùïýö*æhÍSûU¿ü÷‹þû}ªßþ{Åÿ}йš3@þÕoÿ=âÿ¾Åj·ÿžñßb®fŒÐ?µ[ÿÏx¿ï±GÚ­ÿç¼_÷Ø«™£4OíVÿóÞ/ûìQö«ùïýö*æhÍSûU¿ü÷‹þû}ªßþ{Åÿ}йš3@þÕoÿ=âÿ¾Åj·ÿžñßb®fŒÐ?µ[ÿÏx¿ï±GÚ­ÿç¼_÷Ø«™£4OíVÿóÞ/ûìQö«ùïýö*æhÍSûU¿ü÷‹þû}ªßþ{Åÿ}йš3@þÕoÿ=âÿ¾Åj·ÿžñßb®fŒÐ?µ[ÿÏx¿ï±GÚ­ÿç¼_÷Ø«™£4OíVÿóÞ/ûìQö«ùïýö*æhÍSûU¿ü÷‹þû}ªßþ{Åÿ}йš3@þÕoÿ=âÿ¾Åj·ÿžñßb®fŒÐ?µ[ÿÏx¿ï±GÚ­ÿç¼_÷Ø«™£4OíVÿóÞ/ûìQö«ùïýö*æhÍSûU¿ü÷‹þû}ªßþ{Åÿ}йš3@wóÂú}ʤ±³›0'¥rÞêÞ?λ-PÿĪëþ¹7ò®7Ã}OûÇùÐuÜQÜP.¿ÕšóßÇÌ_õÑz×ú³^{â/øù‹þº/ó êËþAö¿õÅ?ôSÔ_òµÿ®)ÿ Šž€¿ñûýsæµ`ÕuÿØÿë›ÿ5«€"~•UºÕ§éU[­ #·ÿ”ÿõÂ/ý J»T­ÿä%?ýp‹ÿB’¹û­_Äqx€iqAd|ÆÝ†#ËîÄïíßߢ˜<§6ŸõÔÿè VKZ§pHžË=|Óÿ¢ÞžÎsH Ç­Ç­UÞhÞhÖñëHÒª#36FIô[y ¶Ad¢†3–Òõûéõû$^ͧ_Ç+F×PEùFT¦Ï›þðôªþ»x-|-„(ðÝ·Œ2?µ¹gáí*Âî;›kgI" #yP7]ª[hüIm¢éÖrC%½¶Æ¤h¾v! ýì ãÓ íO¥—õ¸Œ[=[X–=T“SÝ¥s±­ÙrlnÈÚ9Ï­N­¬yz%ýΤnaÔn -ÚQAR 6÷ÏZm·†&þÛ¶¼’ÞÎÖyš`¶÷¾ö ¸À*uÉÅoŤØEogAˆ¬äó`]íò7<õçï¾´+]§¯õ®¦Ó~òÓþ»ýëñv²Ñê+io«Ea-”?l!çù#’2 ‘î+©³-Ÿýw?ú-é–ºMµ­ÅåÆYnåódipqÀG†bÍ{£¯øfö˜§·¸‘~…Õ]'W»:F‹a¥ÛZAqw²f@æ(‘ž7n$’;úÖij¶k3 ×)ö9¤–0àHrÉÓîþ¾õCPÐE•†Ÿo¨M-™qöÓÄ’ n ïÂ}1ØSlH‚ëWoggÓÒî[‹˜d‘ârŸ¹8È]Àóõ§Eâ-^õ´ûKt²†òina¤GxÃBpJ€Ààûš³áï ½œw7Ï/Û!–âP¾`oõ§Ç1ÈÀÎjõ·‡m-oaºI'2E4ó(f&S–ÏoëO×úbþ¾Z˜ö#Öd}ÍäV?e¹¼k'Žpèà²îÜNÊôÇ~µñ…ôºŒŸfµó-c»û1…m&iCmg°`äãÐuÍn'‡mÚÚ$ûmï âÃ%Ë3`ñÓ,ƈü?¾ ÷V·×¶é$¾t–ѺùNýÉIï‚).—þ¶ÿ‚7åýoÿÈjñµÍéK&Ó­õ±´AK·xMÁ·c9aÆ*Mõ™WXxnm^5¼¹HRtrÁÃ|¹`ßwØ-i¿‡mÆæÐÉ?—qwö·!†CïÇL¨ÿjøv8®/$·Ô/àŽì»<1H¡UØ`ºü¹¿\gµ o—ùÁ¿Ïüÿà°y¾D~~Ï;hó<¼íÝŽqžq𒣂/"âÞòlP»ä9fÀêOsRS{‚ (¢Q@Q@C)Åͧýu?úTÕZäââÏþ»ýô•â ››cKÑ º’Ò+¿6I¦„íªò©í’zõÀ¨5;¿øDìb[i¼¸X£7o%Ç—Á$àeÈÀ<Ò´5m.ßVH„Í,RÂûážÛ$mÓ ý;*›ø~9í 7Z…ýÉXç’E…v¨©íÍ.ƒ(¯Šui,‘éïÒÕ'šÚXãue'xF!¸Æ1žÝj CWÕ®d¶²imáÔ-µxái"Wò¤VŒ°%wgò3Û­mc+Ãl—7×—-or.RIYw(çÒ¢ºðí¥Ü—2™®c–yã¸Fà4nŠãÐwÏZkúü?à‹úüÿà“QÖN»•¶–Ô\O+@ä7Ï´…þ_ÄšÌ>2¾—Q“ìÖ¢KXîþÌa[IÚFPÛYÄ€l98ôs[6º\v×ëz×7Ü qn^VS¹wÉÀäý=ªô8íõºµ½½·I%ó¤¶×ÊwîH*HÏ|BÝ]È[Z™Ðo´oµWy£y¤­ãÖãÖªï4o4kxõ£xõª»ÍÍZÞ=hÞ=j®óFó@·Z7Z«¼Ñ¼Ð­ãÖãÖªï4o4kxõ£xõª»ÍÍZÞ=hÞ=j®óFó@·Z7Z«¼Ñ¼Ð­ãÖãÖªï4o4kxõ£xõª»ÍÍZÞ=hÞ=j®óFó@·Z7Z«¼Ñ¼Ð­ãÖãÖªï4o4kxõ£xõª»ÍÍZÞ=hÞ=j®óFó@·Z7Z«¼Ñ¼Ð­ãÖãÖªï4o4kxõ£xõª»ÍÍZÞ=hÞ=j®óFó@¤Àé—#þ™7ò®GÃ}OûÇù×O|ÄØ\údßʹŸ ýãþñþtÜÁ÷A÷Àe×ú³^{â/øù‹þº/ó¯BºÿVkÏ|Eÿ1×EþtÝYÈ>×þ¸§þ‚*z‚ËþAö¿õÅ?ôSÐWþ?cÿ®oüÖ¬®¿ñûýsæµ`ÐOÒª·Z´ý*«u¤vÿòŸþ¸Eÿ¡IWqÎj•¿ü„§ÿ®èRUÚ`EqžŠ”tmÈñÿõ?ƒÈ½ÿŸ‹oüoþ.®Q@¾Ï{ÿ?¿øßü]g½ÿŸ‹_üoþ.®Ñ@¾Ï{ÿ?¿øßü]g½ÿŸ‹_üoþ.®Ñ@¾Ï{ÿ?¿øßü]g½ÿŸ‹_üoþ.®Ñ@¾Ï{ÿ?¿øßü]/‘{ÿ?¿øßü]\¢€*Åk/ž³\L²b¢mPOSÉ9=ºÕª( Š( Š( Š( Š( ŠkÈ‘íÞ껎ÕÉÆO¥:€ (¢€ (¢€ (¢€ Šâ=(èÛ‘‡cÿê$~5-OȽÿŸ‹oüoþ.“ì÷¿óñkÿ€íÿÅÕÚ(—Ùïçâ×ÿÛÿ‹£ì÷¿óñkÿ€íÿÅÕÚ(—Ùïçâ×ÿÛÿ‹£ì÷¿óñkÿ€íÿÅÕÚ(—Ùïçâ×ÿÛÿ‹£ì÷¿óñkÿ€íÿÅÕÚ(—Ùïçâ×ÿÛÿ‹£ì÷¿óñkÿ€íÿÅÕÚ(—Ùïçâ×ÿÛÿ‹£ì÷¿óñkÿ€íÿÅÕÚ(—Ùïçâ×ÿÛÿ‹£ì÷¿óñkÿ€íÿÅÕÚ(—Ùïçâ×ÿÛÿ‹£ì÷¿óñkÿ€íÿÅÕÚ(—Ùïçâ×ÿÛÿ‹£ì÷¿óñkÿ€íÿÅÕÚ(—Ùïçâ×ÿÛÿ‹£ì÷¿óñkÿ€íÿÅÕÚ(—Ùïçâ×ÿÛÿ‹£ì÷¿óñkÿ€íÿÅÕÚ(—Ùïçâ×ÿÛÿ‹£ì÷¿óñkÿ€íÿÅÕÚ(—Ùïçâ×ÿÛÿ‹£ì÷¿óñkÿ€íÿÅÕÚ(—Ùïçâ×ÿÛÿ‹£ì÷¿óñkÿ€íÿÅÕÚ(—Ùïçâ×ÿÛÿ‹£ì÷¿óñkÿ€íÿÅÕÚ(—Ùïçâ×ÿÛÿ‹£ì÷¿óñkÿ€íÿÅÕÚ(—Ùïçâ×ÿÛÿ‹£ì÷¿óñkÿ€íÿÅÕÚ(—Ùïçâ×ÿÛÿ‹£ì÷¿óñkÿ€íÿÅÕÚ(—Ùïçâ×ÿÛÿ‹£ì÷¿óñkÿ€íÿÅÕÚ(—Ùïçâ×ÿÛÿ‹£ì÷¿óñkÿ€íÿÅÕÚ(—Ùïçâ×ÿÛÿ‹£ì÷¿óñkÿ€íÿÅÕÚ(—Ùïçâ×ÿÛÿ‹£ì÷¿óñkÿ€íÿÅÕÚ(—Ùïçâ×ÿÛÿ‹£ì÷¿óñkÿ€íÿÅÕÚ(2ò¥²¸i&DÙ )è{—?Ê¹ß ýãþñþuÖj?ò ¹ÿ®Mü«“ðßÞ?ïç@ÌpQDpQ@ ºÿVkÏ|Eÿ1×EþuèW_êÍyãæ/úè¿Î€;«/ùÚÿ×ÿÐEOPYÈ>×þ¸§þ‚*zjÿÇìõÍÿšÕƒU×þ?cÿ®oüÖ¬‰úUWëVŸ¥VqÍ "·ÿ”ÿõÂ/ý JÏñ5ÄÐ.“äË${õ(Qö1”“qÔ{VŒòŸþ¸Eÿ¡IF¡¦Ã© a3H¿g¸K„Ø@Ë/@r:S[¯T>ç3qâu~ÑqéßeMGì ï`¡É ƒÉ`}jìZõÜ6ú¼Z”ÖP\Ø2(c)ƒ€WäÎìóŒÍ^>´ki`2O¶KÑzNááƒc§ÝÈþô—~³¼kç’IÕï)‘À1´xÚWŽç4-¿¯/ø!×úóÿ€cÛx¾çû;SyaŽk›YbŠ"±IÈdÀ\«üË‚yý(¼ñ6©¢É}¢–sË ¼RÅöhÝAi Ä€FxçÚ¯Oá¸bÓu í{©Íy°¿™*#’Ÿwi@#¯áT4Ï Ü^Üj2ë yä\A·S£Ì6±mÙ…Á#O4uþ»˜º]ÍëWÚÝ͵Ü9XÑ].Òh³Wlœä`r9©¼C*ÄúFèc—~£ùùæ#Ÿ®Gµ= »Ñ­Ù¢mKXw`6I,AyìÌÕ ¿íMfûMGѧ³‚Úén$šy¢nF''"ŸUòGóüˆgñ&¨–ך´PZ*Òá¡hÛwœê­µœàsœ vëL¼ÕäÓgñ%Õ­µ¿Ÿ [ìï,ËsÛ=±ZSxRÊk™\Ïv¶ÓMçËf²&GÎrF3É¥MuáË;Ïí2IÇÛÚ&—k<¼coÜç4–Úÿ[¨Í/QÔ±u¥êbÕæŠ%¶VUebF ±8 ¯­!•b}#t1Ë¿QFüü‡ ó Ï×#Ú¥¼·k-Eõ[k;›Ë™b[vŠ)#Pmß9ϯ§—.·$nÓo,E¤ëqyb`ì21ò³qϵ §õ×üƒ¿õÓüÌ/Q¿±³×u‰ã–ÆÖêé„EËòžrØÛm2ÓÅš›$ï=ªH‚ÎK…d´ž%‰Ôd#>£:VÜ~¶ŽæíÅÅɶ».ÓY³)…‹Œ1Æ3Ï×Û$sÙ¶¥¨Mm, ŠY„jF>S·9ÔšZÛä=/ó2 ÕüK5Ý¥¨m$=Ý™»ŽO&L(r„oäüÜúñ[Ú¤Ú¾‡k~ñˆÞdË 9ÁǶEhÖðÝÙÜ«Ê^ÖØÚ $`©ÛÉã¯Ê?ZeއŸ”p]]ˆ­Õc2 ²nççsŽÞ•NÚÿ]ÿà¯Ô«á+©fð¥µÅÌÒK'ï <ŒYˆÝϰ¬½'Å×ú•å›}”5¥Û±-& à•fŒ8Æ:÷­m3ÃCJò’ _QkhØ‘níC’IäÎ2}j]?Ãñisk}z¶ªX¥™‘LKžÃåÝŽx¥Öãgoiw‚§ÖKUººdýúDÂbLã;ßÌ=€è–kv¶à_K“äå Œ¢ã·˜þµDxzÈxwû´Ík·hbÀ8ù·:ƒíLó/ô•[h¬õ-Xcq¸y ?Ýä§O§zwèc.õ MüJš]‰´Ž5¶<ñ³’7íÀà }y¬Ë}^kX."±´·[»­b[h÷Ùž¥ß’Oð1øV啯Ú/ÿµç¶¸µºh>Î`•Ñ€PÛ³ò’3øÕ KAŠ-6U¶·¼¹•ïMâ˜fHäŠCÕ”¶Lõ¥¶ÿÖ¿ä]¿­?ÌÄÔïõk¹¡³¬¾Ùg¬Ar¤L#;£, RÄ÷õ©oõ]ZâK{&’ÞûmZ8ZHÕü©£. ]ÙÇ<Œö«š/†ço:ëT{••¯’î5’Ty>DÚ7•yç…öæ´®ü3gw%Ô¦{˜æžâ;‘$nE"(PWAß=M5¦ÿÖßðE¿õëÿÖ·­º —æçhÔª“ì $~f¸½vêDO‹eH'Žk0&BÛ›%~÷?‡â·ÍÞ¡§âÖ='PÔ0º3@ óË/Ó éHÚ ¶£o~÷QÜBúŒÍ:Âí+‘‘€zžiyumwQÒZÆÆG¶’öç{´ÑÙÌ舸ÿ–hY‰äw¡‹Ä:ÍêévðAokutÓ«µÌmÄxÃ*’¬žzV¤¾ŽxmüÍFý®­Ùš+Íê%PÃx]¤t"¬&¸°¸–êæy¬„VR_]ØðÆ(^`aXxYi÷7‘Xý–æñ¬ž8Uã‚Ë»q8#+ÓúÖæ¹¨6ÀH—0A+¸D3Bòî>†cô¨Óö‰mm’}¶÷†ñ a’å™°xé–?ãIqáè®c﯄©r×1N%âbÚ¹mÁ#:^_ðC¯õçÿɶñUåÞ“•Pšù¬²ºG•—*~`6ºyÍ;PmmuÝyh·N—%È…ü–.2›óŸÆ´ÂÖcNkG¹»w7&ì\—U”ÿ ?,sNŸÃ‹q±“TÔ>ÕlÌÑ݇A 0WîíÇáGõø˜“jí¥Þkó-¤/rk•,¾kº…²N'·oZµÍON–ö×QKI."±{Èd·VT`¼`I=qÎyÏj¿'‡,¦Kõ¦”_Ä¥˜ `ð}i‘xjÙïÏ»¼ºšênÓÎê]c9ùW×=:õÍúû¿ÌjÝJºV±ª¶£cm© 7KûSq Û#!B6’¬ŽxaÈÇJÏñv²Ñê+io«Ea-”?l!çù#’2 ‘î+¤G·ŽçOœ<»ì`h"Œ` çŽ¿(éŠu®“mkqyq†–[¹|Ù\pQÇ@7¾Ÿ×bc¶¦n£sa¨èVÚ¬ºåµ£F$Qk1¤,Ë󞯭[Ðí¿‡m›Vý¥#-+HFà2HÜ}@Æ}ê£xFÛÊ´Ž ûëu´šI¡´garxÃ!8î3WæÒ~Ӣͦ\_]̳)GŠ ž£!@éÇJOga®—9_øŒO⥓VŠâ=X>ËA8cjTåÐ~]ÉœûÔ3ê7‹¬K!º¿W]QaK•ýbÈÊ2ôÎ2¹#ïµØ^è–w¶°ÀTÃäH’Äð€ Œd§ÐÕ7ð¥›Ìùº¼¯?ÚÌH<¦}Û³Óv3Î3jkuåÿþ=Sþ»ÿÀ7h¢Š@QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEVÔäsÿ\›ùW'ῼÞ?κÍGþA·?õÉ¿•r~ûÇýãü蹃î (ƒî (—_êÍyãæ/úè¿Î½ ëýY¯=ñü|Åÿ]ùÐueÿ û_úâŸú©ê /ùÚÿ×ÿÐEO@ pâE’=»”†èAÆ ÍsÿæTiË,MÓ3ž„×1ῼÞ?΀;˜>࢈>ࢀuþ¬×žø‹þ>bÿ®‹üëЮ¿ÕšóßÇÌ_õÑwV_òµÿ®)ÿ Šž ²ÿ}¯ýqOýTôQEQEVëþ?tÿúîô­:̺ÿÍ?þ»Ÿý«N€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€)ê¿ò ºÿ®Mü«ðßÞ?ïç]–«ÿ «¯úäßʸß}æÿxÿ:î`û‚Š û‚Še×ú³^{â/øù‹þº/ó¯BºÿVkÏ|Eÿ1×EþtÜY±£þ˜§þ‚*mçÚ«ÚÇ·ýqOýTÔ†;yö£yö¦Ñ@Þ}¨Þ}©´PH«2íuuAõt¨¾Ë÷î?ð&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þ*¦¢€)^@‰cpÁæ$DßzwaÐö'Îxsï7ûÇù×Qÿ ûŸúäßʹ}öÿxÿ:î`û‚Š û‚Šbuþ¬×žø‹þ>bÿ®‹üëЮ¿ÕšóßÇÌ_õÑvÖŸñãmÿ\SÿA5Ciÿ6ßõÅ?ôSRQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE^ÿþA÷?õÉ¿•rþûíþñþuÔ_ÿÈ>çþ¹7ò®_ß}¿Þ?΀;˜>࢈>࢘†]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@ óëI  Óm!š³G¹œ€Cc‘÷‡µCö¯Ð2×þúü]i,j‰s…¸eâ—ì­ÿ<ßÿž°•&ÝùŸõò:aˆQŠ\‘ù™ŸjñWý-ï¡ÿÅÑö¯Ð2×þúü]iý•¿ç›ÿàSÑöVÿžoÿOKØ?ç‡ùõ¥ÿ>ã÷?ó3>Õâ¯úZÿßCÿ‹£í^*ÿ e¯ýô?øºÓû+Ï7ÿÀ§£ì­ÿ<ßÿž`ÿþäZ_óî?sÿ33í^*ÿ e¯ýô?øº>Õâ¯úZÿßCÿ‹­?²·üóü z>ÊßóÍÿð)èöùßáþAõ¥ÿ>ã÷?ó3>Õâ¯úZÿßCÿ‹£í^*ÿ e¯ýô?øºÓû+Ï7ÿÀ§£ì­ÿ<ßÿž`ÿþäZ_óî?sÿ33í^*ÿ e¯ýô?øº>Õâ¯úZÿßCÿ‹­?²·üóü zrÙ–8ØÃëu%Áÿ;ü?È>´¿çÜ~çþfWÚ¼Uÿ@Ë_ûèñt}«Å_ô µÿ¾‡ÿZñÚÃ$Hù˜nãÏñ§}ŠïMÿßühöùßáþAõ¥ÿ>ã÷?ó1¾Õâ¯úZÿßCÿ‹£í^*ÿ e¯ýô?øºÙû?Þ›þÿ¿øÑö(½7ýÿñ£Ø?ç‡ùÖ—üûÜÿÌÆûWŠ¿èkÿ}þ.µx«þ–¿÷ÐÿâëgìPÿzoûþÿãGØ¡þôß÷ýÿÆ`ÿþäZ_óî?sÿ3í^*ÿ e¯ýô?øº>Õâ¯úZÿßCÿ‹­Ÿ±Cýé¿ïûÿb‡ûÓß÷ÿ=ƒþwø}iϸýÏüÌoµx«þ–¿÷ÐÿâèûWŠ¿èkÿ}þ.¶~Å÷¦ÿ¿ïþ4}ŠïMÿßühöùßáþAõ¥ÿ>ã÷?ó1¾Õâ¯úZÿßCÿ‹£í^*ÿ e¯ýô?øºÙû?Þ›þÿ¿øÑö(½7ýÿñ£Ø?ç‡ùÖ—üûÜÿÌÆûWŠ¿èkÿ}þ.µx«þ–¿÷ÐÿâëgìPÿzoûþÿãGØ¡þôß÷ýÿÆ`ÿþäZ_óî?sÿ3í^*ÿ e¯ýô?øº>Õâ¯úZÿßCÿ‹­Ÿ±Cýé¿ïûÿb‡ûÓß÷ÿ=ƒþwø}iϸýÏüÌoµx«þ–¿÷ÐÿâèûWŠ¿èkÿ}þ.¶~Å÷¦ÿ¿ïþ4}ŠïMÿßühöùßáþAõ¥ÿ>ã÷?ó1¾Õâ¯úZÿßCÿ‹£í^*ÿ e¯ýô?øºÙû?Þ›þÿ¿øÑö(½7ýÿñ£Ø?ç‡ùÖ—üûÜÿÌϰŸÄ^Æ·¶6ñ[œïta‘ÁÇñøí[;O¥Vû?Þ›þÿ¿øÑö(½7ýÿñ­!UkßÔÆ¥Nwt’ô,í>”m>•[ìPÿzoûþÿãGØ¡þôß÷ýÿƬ̳´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ]@§Ü×6¥rÞûíþñþuÔ­œ!ýã`ç +0ü‰®[ß}¿Þ?΀;˜>࢈>࢘†]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@µ± i$MS]K{¶%Ðx<ÃdFbÌ;OáPjv×·šU¼‰ˆÌ¾zI)zw §ã¦kÃX}GÔ&¹‚™µ #‰|ï—y= aF:úv¤¿¯ÀoúüN¦Êþ×Q·óí%G’¤à‚ê<ƒìjí½?íâÈÎVrÛhØ)o@Äm'Û5GG¼Ó-,Á]F™nîH’X¾ei˜gÀÀã>•KX¾·¹Ö,VÚÿíSCt€éárÎFÐIäãŠ}RFΆçR³³¹··žuI®[dI‚KÃùÒÞßÚéÖþ}ÜËy êO ’}…rº¾©§ks=¥´’K¨¦ÉÉÎÀjcg'“ÎkO]ai¬iZʱ²€È²8RDLÀmbnÏlÒ[\}l^]Mk)îü÷X`ǘ^R¹éò‘“ùSìµ› Bv‚Þfó•w䉣lzá€$W9­ëIªéÜvÒÅ%¤ÂRhùÉ-ósÓŒ “M'ñU¼–Ú“jËöwI%*¸·‚€/ÌxÆ3Å5¸=æÕ“ûLØEmq3¦ß6HÕvE»¦âHúð hW;eckqâ­bâkx¤š‡Ë‘”O“±íYÙy^k»BÞNŸ*).éæ|ÙÇ'Œ÷¥Ðæ•~øú× )£jré7ö²ÆË’]Uï™±¼œ•ÎpAâ¶|'º]\Ëge4 ¨ 8™Ÿ›$uúS°®t6ÿñíûƒùU{ VÇT›+…˜A)†L6°ê9þ}*Ž·}-‡†Ë[ÇÜÊ[Y ¿–søV&›Þ®YGqcµ­Ý¸´ÄW]ò %IÊ® ‡|ñI_×õ¸ßõý[·ˆt«»ÑiÖ防§îØ+•êˆÚÄ{ZuçÃíÚ$+v. wÓ a¬²’zü½>n»¸í]>´úšßfÚÀ`ÿ8íY3Ïüõù³úPM‹ÛÛ}:ÎK»¹<¸#ÆæÚN2qÐsÔÕŠå¼Hf>¸7›±7}  “;ÇPŸ/åXúõ…­Ìž,¼– ×6‘DÐKÑ£"<ü§·4=jz Åypè:¶ 4û b:H¸kXó‰1Ç©ËÒd‘n5eÑf±g}(ȱé¨Ê‹.N2 ŸŸo¥×çþ@¿¯ÃüÏI¢¼ÍOVãÃEMùÓ.|Ò™óL»WóÎìç­ix>ÞØêQOk©Y[b.-màt‘‰Ç2îvùïŒòiÛ_ëÏü…}?¯/ó;ëè4ëF¹¹b±)U$ òHõ"¬ÖŒâó|+v eÐÙÔ ü¡Ô·@k"k]SÔô+[(m&ÓÜ“J<²ÁW°ã4–£;Z+ͼSsö•ÈDÓìîìä…-‹£}¦Q•9²^HÆCW5>ÖêëÅ—“BæÒÞÞnnOnE. {ífÛk1ÞjSZ[Ú]:Bæ9.B¨‰\ •É9'·Êyö–þ(¶¹v´Ônî^blý¦Ô”+Ôlîzu<š±a§©ÓüGekö°¹ºHg<Ìöѵ߯éþbZÛÎß©ÚÑ\.‹ý›ý³¥`îÝä¿ö–7tÛÇ›ŸãßëÏZ«ŸiÃg»Kt[›¢y@ù¤pê{Ó°'sÑ(¯?¾Ð4¸¯¼C vq¤vúz\@«!‰2Ëè~Uéé]®—+ͤYK#w‰îJŠKUë¯ù¯õåþdW:¼béîbž(­ÙÊÉò¹|·y Ю]‹Í_tZ3¨ù@RÜ}¨õ¶ÓdM+û:M>=t¢FhKÛ p6ï ËþÖ 8ÍzÀÛév·xzÊæx5;'7N˜CåíÀ I8^@äÔ:m…µ•¶}o˯íw¶3n%š-ò.Ò{ŒùS¶©]…}.wާi¤Û¬÷’2#¸vÆÎK€Òiú½Ž¨$ûûÚ"ˆÈÈéž™VʰYœçhíc9Ƕi­y¡Åá{8l-´Ã ÒF—’Mb…öº@1ÎF9#“GO»óaý~Gow}“[¬ìA¸”CrÄèjÍyœ"ÞO Zý­ ¸Ó-õ²•I„C‚“„ËzœUlXͩڃ>ˆl€³kˆYàݸîÛµ”Æ0*×ápëýw±è•Ÿs«Áf.žæ)âŠÝ‘L¬Ÿ+—Àq×’§hÑ<-œOuö²°¨óðG˜1ÁçÚ¹v/5|X eÐIhΠgåKqô‹YØKTw”WŸëm¦ÈšWötš|zéDŒÐ—¶àmÞ—ý¬qšu¾—kq7‡¬®gƒS²sté„>^Ü“…äM \.wÕOQÕ-4›tžòFDw®ØÙÉcРšáôÛ k+múÞ=—_ÚïlfÜK4[ä]¤÷ò­ÝéÚX-•Ó+G«ÅH©Ìn †>„RZÚÝÿËüÇÞÿÖÿät6•¶¥½·µ›Ä'5n¹KJYµÝËS¸}J'ûC‘pˆ ¸PNõ­Û$ž Ô-ïïlìFØÖÂK˜]™hæ!³ž ü)èôW›k6æmvúWR³µ“dbÎ{¨°FZ;³‘‚ ôh•–W}îlc'ÖŽ—ÊGW‚2‚x§€ÉuöXĉíÉcøN hWž]ÇlÖ=ìhöQø…ÚãzåU9ol‘I­‹µ;PgÓ Ñ mq <·Ûv²€ØÆåK¢þº\ov¿­ìz%Á"Ú÷QŠ×PuÔD:(hç`FNã‡äcž´h6ÐYÝxbêòå¾²Ý0'3ŠÙoSœóïNß×ßþBþ¿/ó;Ê+Œñ«§êPéÀ=¬.VG[ÍB&1©\  epÇ'©+:ÚX¥Ñ|6ÚÛ—Ò|©D­&Lf@qÿlgâÎì_@u&° ~б Šã¤~ Ó­®~Ò%>DÐùr4½\nÇñU=qÒ'Š,æ¹KO°5‚-‹º‚›ÖCÂ^EA.?³î~Ñ¿û;ûv_¶íÏú¾~ö?‡vÜûSþ¿ úü.wôW\ˆ…âÓsýŠÒ[‹}¹òË_3gû=:qœ×A¤ÙÛé^-¾²±‰`µk8¦0§ s‚@íåE¿¯•Âú7­®¡ma5Â¥ÕÖã d¶:ûÆ¢¿×,tÉ|»£pÝùŽÖYª©«‘»‹TÖ¿´õ[+(%_5~Ç;\t1ÆÕØs–ÝÜdØÕuÖ´}&Þ݈MbDWÁäD¼ƒò[¯ë®ÃÙÿ]7: ;¸/ìâ»¶rðL¡ÑŠ•È=ðy©é4TE ª0è- KÌ(¢ŠQEQEQEQEQEQEQEQEÇøsï·ûÇù×a\‡>û¼w0}ÁE}ÁE1 ¹ÿVkÏüD§íŸúh?zã(k×lËüÀdƒšèíU¾ËÊ~èíRíoîŸÊ¼þïÅ·öÌ@Ò,ßð"¨ê ÿÈÏþú?áHg§íoîŸÊ­ýÓùW˜Â}©ÐÏþú?áGü'Ú—ýlÿï£þéû[û§ò£ktþUæðŸj_ô³ÿ¾øQÿ ö¥ÿ@?ûèÿ…z~Öþéü¨ÚßÝ?•y‡ü'Ú—ýlÿï£þÂ}©ÐÏþú?á@Ÿµ¿º*6·÷Oå^aÿ ö¥ÿ@?ûèÿ…ðŸj_ô³ÿ¾øP§íoîŸÊ•U·_JòÿøOµ/úÙÿßGü(ÿ„ûRÿ  Ÿýô€=*ßþ=¢ÿp*’¼Ð|EÕÀhÖà€HßáKÿ Xÿ =¿ýüoð J¢¼×þ6±ÿ@{ûøßáGü,mcþ€öÿ÷ñ¿Â€=*Šó_øXÚÇýíÿïã…ð±µúÛÿ߯ÿ ôªl‰æDè“p#rõãÞ¼ßþ6±ÿ@{ûøßáGü,mcþ€öÿ÷ñ¿Â€;k-;Ká{5íåíÂÆcG¹u;HTp9ëÅ^»îmš$¹šÙ›–»—žÛ¥yßü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…w6Zdö“ù’j÷÷K‚<¹ü­¿_•ýkF¼×þ6±ÿ@{ûøßáGü,mcþ€öÿ÷ñ¿Â€=*Šó_øXÚÇýíÿïã…ð±µúÛÿ߯ÿ ôª+Íáckô·ÿ¿þÂÆÖ?èoÿü(Ò¨¯5ÿ…¬Ðßþþ7øQÿ Xÿ =¿ýüoð J¬Ë­*âæååMkQ·VÆ"‡ÊÚ¼vÝ?­qð±µúÛÿ߯ÿ ?áckô·ÿ¿þèÐDÐÀ‘´ÒLÊ0d“›Üàù ’¼×þ6±ÿ@{ûøßáGü,mcþ€öÿ÷ñ¿Â€=*Šó_øXÚÇýíÿïã…ð±µúÛÿ߯ÿ ôª+Íáckô·ÿ¿þÂÆÖ?èoÿü(Ò¨¯5ÿ…¬Ðßþþ7øQÿ Xÿ =¿ýüoð J¢¼×þ6±ÿ@{ûøßáGü,mcþ€öÿ÷ñ¿Â€;{­*âæååMkQ·VÆ"‡ÊÚ¼vÝ?­_‚&†¦’fQƒ$˜ÜÞçÈWœÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéU“.s,Ï"ëÚœa˜‰äí_a˜ÉÇÔ×ÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@’£j€X±=M-y¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð¥_ˆºÃcÛûhßá@“\‡WßïçUlücªÝ …ºgÝmhv†5ŽhÓÁ÷è†QLa‘T.¬Ä äV!Ð-q Ç!'`ª§ÃQ“÷å]ŽÀ{Q寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùR FÜ•v>ZúQ寥svÚDFV͵¨ˆ ¶Ôà  )h ÿÙnip2-8.7.0/doc/src/figs/snap3.jpg0000644000175000017500000024221113224651032013331 00000000000000ÿØÿàJFIFÿá°ExifII*JR(i‡Züÿÿ)( üÿÿ)( 0210‘ 0100 ÿÿ g 4ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀ4g"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?÷ú3AªÓÎ#æ€'.4Ì£½pº÷Ä-/GºkWy&¸_½ ¿RHöÎk¾+X“Åïåÿ@±ç¯­zú×’ÂÔ³ÿŸKßÊ?þ.øZ–óé{ùGÿÅÑp=oÏ_Z<õõ¯%ÿ…©gÿ>—Ÿ”ü]ð´ìÿçÒóòÿ‹¢àzמ¾´yëë^Kÿ NÏþ}/?òÿGü-;Oùô¼ÿÈü]Ö¼õõ£Ï_Zò_øZvŸóéyÿÿøº?áiÚÏ¥çþCÿâ踵篭zú×’ÿÂÓ´ÿŸKÏü‡ÿÅÑÿ NÓþ}/?òÿEÀõ¯=}hó×Ö¼—þ§üú^ä?þ.øZvŸóéyÿÿøº.­yëëGž¾µä¿ð´­?çÒóÿ!ÿñtÂÒ´ÿŸKÏü‡ÿÅÒ¸µç¯­zú×’ÿÂÒ´ÿŸKÏü‡ÿÅÑÿ JÓþ}/?òÿEÀõ¯=}hó×Ö¼›þ•§üú^ä?þ.øZVŸóéwÿÿøº.¬ùëëGž¾µäßð´­?çÒïÿ!ÿñtÂÒ´ÿŸK¿Î?þ.‹ë>zúÑ篭y7ü-Oùô»üãÿâèÿ…£iÿ>—œü]Ö|õõ£Ï_ZòoøZ6ŸóéwùÇÿÅÑÿ FÓþ}.ÿ8ÿøº.¬ùëëGž¾µäßð´m?çÒïóÿ‹£þ§üú]þqÿñt\Yó×Ö=}kÉ¿áhÚÏ¥ßçÿGü-_ùô»üãÿâ踳篭zúדÂѵÿŸK¿Î?þ.—þ…¯üú]þqñt\Xó×Ö=}kÉÿáhZÿÏ¥ßçÿGü- _ùô»üâÿâ踱篭zúדÿÂеÿŸK¯Î/þ.øZ¿óéuÿ}EÿÅÑp=cÏ_Z<õõ¯'ÿ…¡kÿ>·_÷Ô_ü]ð´-çÒëþú‹ÿ‹¢àzÇž¾´yëë^Oÿ B×þ}.¿8¿øº?áhZÿÏ¥ßçÿEÀõ=}hó×Ö¼Ÿþ…¯üú]þqñtÂеÿŸK¿Î/þ.‹ëzúÑ篭y7ü- _ùô»üãÿâèÿ…£kÿ>—œü]Ö|õõ£Ï_ZòoøZ6ŸóéwùÇÿÅÑÿ FÓþ}.ÿ8ÿøº.¬ùëëGž¾µäßð´m?çÒïóÿ‹£þ§üú]þqÿñt\Yó×Ö=}kÉ¿áhÚÏ¥ßçÿGü-Oùô»üãÿâ踳篭zúדÂÑ´ÿŸK¿Î?þ.øZVŸóéwùÇÿÅÑp=gÏ_Z<õõ¯&ÿ…¥iÿ>—œü]ð´­?çÒïÿ!ÿñt\Yó×Ö=}kÉ¿áiZÏ¥çþCÿâé?áiZÏ¥çþCÿâ踵篭zú×’ÿÂÒ´ÿŸKÏü‡ÿÅÑÿ JÓþ}/?òÿEÀõ¯=}hó×Ö¼—þ•§üú^ä?þ.øZVŸóéyÿÿøº.­yëëGž¾µä¿ð´í?çÒóÿ!ÿñtÂÓ´ÿŸKÏü‡ÿÅÓ¸µç¯­zú×’ÿÂÓ´ÿŸKÏü‡ÿÅÑÿ NÓþ}/?òÿEÀõ¯=}hó×Ö¼—þ§üú^ä?þ.øZvŸóéyÿÿøº.­yëëGž¾µä¿ð´ìÿçÒóÿ!ÿñtÂÓ³ÿŸKÏÊ?þ.‹ë^zúÑ篭y/ü-K?ùô¼ü£ÿâé?ájYÿÏ¥ïåÿEÀõ¿=}hó—Ö¼“þ¥Ÿüú^þQÿñtáñVÈu³½ü£ÿâ踶$½8kÌ,>)iSN±Ì—6àœo•Whÿ¾X× Z^¤è¬ŒXdr  )äQ@ç \î³yäÆÇ5ÐL~C\?‰å+ó@%ÃÜHóÊŤ‘‹±=ÉäÓwT*ß(úRî©.ê»6—¨[épjrÚºYNÛb˜‘†<öÎGCÔUm:ÎMOR¶±‡ïÏ ŒLžOà9¯N¹:V±.§áÛ]XJßgXml¾ÎÊ!’yx<ç>ÔžŠàµv<æÓL¿¾·¸¸µ´’X-¼Ò @O'>ßj§ººŸ ^ݶ™¯XÉ<¿f‹K–~UcŒœzõ®oNm;íCûSíŸeÚsöMžf{}î1O¨t#±  ’N$šÖ¾ðί§%›\Z0{Dxmf8Ù+{~µRÝÕ|GnÚ"M&Û„6©u·{0#±òõý+·Ôôæìµ›Ëk­.õµ(Uí%¹ó#˜–dàŽ}±šØOKœ\z6§.§6š–„Þ@ Iôù@ëÎpzކ¥èz®¶®ÚmŒ— œ3ª úeˆö¯A¶½Òäñö¯må_,2ï¼ûS¶ÿ”g÷d`gʹÛ[;ŸxLÓôgG¸´•ÍÕ¯š›$•~HÈç¥$î¯äŠk[y³œ}'QTM2K9õØ*ÂØ‰é‚N1ïœRǤjRêçIKG7ኘ2 ‚O9Æ1ß8®ê6Fñ„ôénæþÆR#nÁØHR{‘ƒùûÑeâM6Kë=Q?¶ï'ŠÂhÆ>Trø÷]£?áMtþ¼Ÿùu‡†u½PNl´ö›È”Ã/ïc]®:™‡éU¥ÒoàÖIš.õcòË‚ØÇ*Hî+Ð-tïµéÞ&µGö§üN…¯Ú<Œô9ÝíXZ>šÚ'ˆ5=RëMi–æxíLÂP®ã»²sži'ÕÿZ\mvþµ±Ê_ÀtíB{)¥…åÌlcbT‘×þ• ²éM¨ù°yK0„Ædýá8ÎBú{סøpëøgA’ÌFöÒÜÌÚ‘”&?0äÜúô¬Ø†•ý…r Oì¯øHÔuù|¬üw¥4µ³þµ_æ/5çúÿ‘Áyªsó:óSZD÷×pÛ[áåšExÉ8èwŸð’'ŠìåšÂÝ*;—6FЪ•ÚpTõÈ^yî*[»I,|E7ˆ/¯$¹eŠuŒI‘¶Ï”žO4®·ag²8[í}> ©e¹³qmsögXå%‹ã$€@$™ö¬¿9?¾¿v¾c?…mÚS½¤ñ%Éçq!sšè/5ýF(5IÖTóm5tµ‰ŒK•ˆ‘”éÓ߯½4žß×Oómÿ®¿äyY’@´ 2#Ú½a[_x®= [Ŭ)ŒÙ‡Ø0M›¸ŸåX?÷¯ˆ­Ì»|汈ÈF9o›'Š›èŸqÛVcéz6§­Hé¦Ù½ÁŒø*¡sÓ%ˆ-¿‡u›­BâÂ7vãt±3¢¹bü \ð‡Ÿ^¸¹‘ü×´µ òAÓ·;Pd€:OOÆ·?êÞ"ñN¡u¬ÚIÄ©+ÙÃ"–r#@sá<“ùgtŠ»¶¸°º’Öî†xΨ§êv¥^µ¬óÛÈêo‚Mèr3׊Ùñ.›®ÞÞjz¾¥i©‹Ëß™IUo•Á9é]¼ÃPþÛñCi h‹kAùr~÷=it¸í©ä¾`Ær1ëIæ¡Ü1ëšô¶[5ñÜ,×ZþÊÎß,^ÿ-Ø¤ÔÆ¿öÿ 4fÙµ¦µŸÍi¶=3’8ééþ4_Ÿù úü¿Ìó}Ôø’IæHaF’W`¨Š2Xž€SôöÓþÙÿ_µý›?cÙ¿wo½Æ)¯5¨í´ƒp#–eKsr@€ àséM-R¥Ëš‡‡u%!{í>HVf VAò“ƒõÅI{á}wO­9“ÍEÆåœôV&ºMkEÕ´k-*ÂÁ¥´Ží'–êi ‰É nʯnúæ?G&mˆ/tø4Ï‹ÀËOæ ×,WqÀúæ)]~?äþ¾óš“Ãú¼z„6bâêe-B äîo9çŠÌ'Ž8ペô;¤ºÓìmnÒ+ µ4•-ã¶á£€å˜‚Äá¤až1Ò¸ßi°i„P[´ÀIJñNA’9Ê6021žƒ­hǧC;uª-Ôn D»¨ÝQn£uKºÕê7P»¨ÝQn£uKºÕê7P»¨ÝQn£uKºÕê7P»¨ÝQn£uKºÕê7P»¨ÝQn£uKºÕê7P»¨ÝQn£uKºÕê7P»¨ÝQn£uKº•I¥H¢Rò9¨ïPDË º”!~¼LÐ’ønsZú%“û¡ ŸÿZ±®¢žÎv†pמ9zƒé]–rK-Ì@v"HÿÇ«3V¸ŽKÛBØ;_ýÝÃü Ki \Ï’k„·Ü2¦æüzb©ê:}Μëæ2¼mÂȽ ô>†µ%’ oç‡Í5 L&LrÙìqÔU[©Pi Ý ÊJ)]¸ùÉéیФh7z¬fc2[ÁœuÉcì*}SÃw:u»\Gp—P§/µv²\dñøÕÛy|ÝÞ8‹Ô.×ÛµÇRO±É=~†¦·™­ ˜ÞÇ“$…²®1ØvãÏ©óe‹š“í{Xúe”]4ží^ýKu{7ÃFI|ö(r *+3˜…B&Ÿîà¼Uþ©ë½Ÿîà¼Uþ©èÀp(ÝL¦ù‘ƒ‚ëùÔŒ”œŒhÈ#ô©RÂí÷bÚ_–<î]¿»þ÷=G=EW ä£¥©”„€2HÞ€$Ýš³w¨Ý_%ºÝLd[x„1 mAÛÏãÍR,d©©$†Xvy±<{Ô:ïR7)èFzƒë@ Æ1JRAêúÓ( äcô£w¦Rd½?å=T~U¡±q…6‘D¶óL&‘ÂìG@NqŽøÇZÌ$ dŽzRЕα=Þe¥È‘ylí wÇ''8ýPÈÎqÍ:æÚ{;‡·¹ŒÅ227QQQæ¾_îÊ´"Ö.!ЦÒ#H–Þi„Ò8S½ˆsŒwÆ:Ömü‚r@¤ãÐSh  ='WþÉyiú}àpÛØ<À¸î9«§Å—2ê7·š~™},ÁT-Õ¾õ‰W8û×?Ehjš’ê“G'ö}…žÅÛ²Î-[ÜŒžjŽû£ò¦Ñ@;OP _îÊ›EZ°»±] kkƒ$EqøÛŒr23Z—>,Ônÿµ|ñL"Ìv´'Ý ÏŽkŠ7ö™¨ÿf]yâÎÎèm+å]Åæ'=ñ‘ÍM¬ë—ZäÑ=ÊAp§—G²8×Рˢ€ºÙ4Ê(ØQü#ò¥€¥2Š~G<zЊeýÔn¦Q@ÝFêeýÔn¦Q@ÝFêeýÔn¦Q@ÝFêeýÔn¦Q@ÝFêeýÔn¦Q@ÝFêeýÔn¦Q@ÝFêeýÔn¦Q@ÝFêeýÔ¡È ‚Atj…Æñõ#šˆÌ’Å™R{Õz(äwÒÄ»Q²£ aœ~´Ö¹28i±aUh  5¶$ÂÌê¤dÖ‹R{¥ÚíòÿuFgÑYûn\öÔÙbk*~ÍIòöº½Oá¹ÎûíüëÊkÕ~È6?÷ÛùÖ¨Äö;/õCéE_ê‡ÒŠb'Ÿîà¼Uþ©ë½Ÿîà¼Uþ©èçÚíµ]NK]K‚=rúÔ¶™ú,Pæ7Îî­¼c=Êâj{›Éï>|›ü˜„1ðÔSRõVþºhïýt:¸íã·[ÿŸÃáÛ|ŒÜ’¹ÆIÀöS%Ò4++"¼žÙ&šÉgóŒ³ùÂF]ÊùesÉÏS‘\úkZ„s$«qó¥¿Ù†QH1cHÆÇ­8kš€Óʼn™Ü)EBŽÊ§¨V ²¡¤ÕïýuæÒ×þ´_ägU½2úM3S¶¾‹—‚@øõÁä~#Š©ERvwWÐëæ³A“YÔ¡¸•:{c¨˜nÈÿv<©¥‹E²¸»…î÷0hñÝ2Í4›Y¸$ne_›8QÛµsWíÝ­œó³ÛÚ†¡äÉÉúþ5$zÖ£ Ô1Ü²Ë B`£î¤cc×9©·õò«¸ïÕÿZ¯ò6¤Ó4[Çž-<Å%ÓX´¨–òJɨÙ!w€X‚ M¨xwN²Žk•žÞÞĤ‡{cí„g¿©ÝŽ˜1XÛwãS‡RIR;¨qå¼P¢Çû*î{Toª^Éa%‹Ü3[I7Ú9“Ýž´?ëúùþ?¯ëîüYN·|ƒâí?'sdÿÀ°ª{;Ë>î;«Y<¹£ÎÖÀ8ÈÇCÇCLLè¬-ôØô=wìZ„÷Teµ<äç;Û56·¤è:j_Y í–îÙ@‰ÖYšiêWËŒ‘´ñÇ&¹x.綆â(Ÿj\ ŽQ€w(!±íÈ*Õι¨ÞY‹[™’XÀ ¹¢BøünÇãC:M^ ªøŽþòÍnÚÝàXãy]æà“°ƒÛÖ¹ývÊÚÒ{Imã‚îÙ.'mÆ=ÙsÜqOb*å§Š®¡´Ô ²y—· $ l¥PŸ¼Á8#’ ¬kÛëFé®nå2ÌØp°¥n€W¢Š)€QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEWªü6ÿlï·ó¯*¯Uøkÿ ØÿßoçMìv_ê‡ÒŠ,¿Õ¥ÄO?Ü5Áx«ýS×{?Ü5Áx«ýSП…Š'ƒü?›S)–Ö%,Nß“«ÛŒ~"·¼˜çŒ_÷À®KJ†Y<-àÓnâ19U'hò\dú ?Ï´ðÌ ieæé$;éR4Ù„ƒç»IãïòØ=zÔßúù\}mýnw¾L?óÆ/ûàR¡&±þà®]LiÒÍ«ÙÜNÇIŒ[9…œC6y?ÜlíùŽ:u®ú#¶Ý3Ô ÈïÒ©«\IìP´Õô‹Ö™`(Z$ó=¹C³ûÃrÃÜdRE¬iSY=âÆâ w=Œ‰»wM  -ŸlÖ^pšŒ×·×ö×é<4k³•<¨s÷Cœõ8>Ã¥2Êö÷M°ÔÖßQ¹³…c[8îmÜI¸ä0Û·yAòœ‘ž¸Í!šßÛ:9±‹µ¢2ð¶¬_xê¥îc¦*Ìw6sé¿nµ….b(]Q©göãŸcXKw& –²Žök»›‚&ì&]†ZO/ní  : õ¢þ[[O\Ù[Åv"63‘$Ð2rÎýÀÌI#ŽyÅ`Z´tË, ùŒŒàÆ2)|˜çŒ_÷À®h}SQX,g}UnmþÏr¶"8ÉÌc9óž†Ão¯Ø››IWTþÑ¥¹hŽ-’N…q·åÏéLIés³»–ÎÆÙ®.#c\dˆwNIúU?íØ‹ÅÚÑ x[V/¼uRw1Ó·ÃÂ85[;IæicWŠ,³|ØÆBäàg'â²–îM;A-eì×w7M;ØL » ´ž^ÝÛ@ tëK¸ÍI5&;Hnö4¶ó)t’ '”`uÎÕ;S_]Ñ#[wvEK„WG6Í´+p¥ŽÜ.ÚÅRžÕ_ÃvZm„WFÞâe†V–G䙃Fì’Þ§kÓ‰.áÒå·»]?`’w‚ÒYD˜µÊ_éåµDǧܾ©%Ô kx `B fó1´#<ôÅ:;Q´ŸQÒ帷[‹Ðµ2ìf˜26Üáº{к;O&ùãýð(òaÿž1ß±5†{]jÆøÛÜKÛÍ ˜!iJ³l#* œ|§œW:4IfÒ§Óåk›}lÆ#¾9†ó„=Cgož”¿¯Ìgs8Š y%‹)E-²8Ô³c°ÏzzÅ (>Dc#81ŒŠáõ[I~ש{ n纵”I$–Näà—e$´s“LÔâŽ+÷7¶s=ëÞÚ KƒeHóT7D9ß‘Á9ïMoa_Kç“üñ‹þøy0ÿÏ¿ï\}¾“,v÷°Y¼W²jW"Y„d1ˆù›Kë÷1ž:U /IÔ–ÊïÊi`Ô¾Ã$r ²’,§1™œ«¶s‚={R[ªÜZ¶©%€·O5!Y‹yk· HÊjX<©Ñ˜Ùˆ°ì¸’5àã#Q\ï‡-m¢×.f±Ó'²·6‘# mÚ,ȳÔ|ÇdŒýj¬:(½¿‚+ý=¥·_¾%ˆ•¥R‡ž„Œ*‚þ¿«Y,ÞòKEHŒñ¢ÈËå‰çþùTÞL?óÆ/ûàW¥Ú:_XϨéóItúlÁ<–Ìæ)T¾í̓°ò98ªzf—©GcxÑ4°jBÆHåQe$&YN>c39Wlçzö gäÃÿò‰Hç–°­Ê¥Å½—”¯‘£¹9àòvœujú@ãþ4ú‚-G{¦M¨É§ÄÖïuo’5@JŒãž0>j;íSIÓ§HnÚ(äq»Nà£8ËQž2p*lbñc\%»M‘Õ8/¿8Ï­cj¦âvÔ¤N¼qªéé È9GùÁWþçß'Ž´º/ë¸úµýt7åÕt˜oÅ”†19eOõ¨fûªX  žÀœšžâçOµº¶¶ŸÉI®˜¬*c9$tô®NæÊñ5—Qáswlë ÂZÞuP Èux5©â2}OU³X‘ƒCo4‘M´íICFS'êášjK¨éPOu ’Ö>eò³±9äà{:Ól5M/R•¢¶UóUC˜å¶h›iè@uq\̺N¡êMlïy}¥Ü4þZ–RFØÁp¼\S´û‰¬oŸSœêWVÖú{ d»µòZ<BF ¦ìóž;h^ÖÿäËúÛüΪòâÎÂ5’kvec´y6)ü‘IZe¥ö›{§›øD_f‰y!Ù¤ƒÀŒfµ-ÈÐîÊ9 ̈0«–RÄ àzg?…TÕ¬öø~]ÆÞR^ÍÒ"ä@Kv'?4>£ZØš-oEšÒk¥xÄP•ºÜ« ßw W'=°9íVì®,u ÖÉ(b¬Œ¬:‚¬ØŠçZÕ./oçµÔ-­–ÞÝm» ¼Ôvlª`“‚@Î<öªgJÕ%ÓdtK©Ýß­§˜(kut›FÑ•R1âµGM¨êÚ^”OÛ"‘Wqt±‘ÐvT ~u=åÞŸ§Û-ÅÊÆˆÄ*æbz O°»]ZèV)c=½ª±–â9ü¦1Â±ï— ç¾3SêóH×ÖWKivñi÷gÍ bÁ¢a¹å€,:{úPô̺֋´ãhç£òíË’Þ%UIw$qÞ´c[i¢IcŽÀee@A¡ÇáÓVí!Ô¡Ôf’å­ã¶ŒGÜMÊUÝ<àŽjæ­gýà;[+…3~˪«»~$@ÀùçŠt7okeg=ÔÑD#…Fù@3Kl#žÖ)^Ö8ÙÐ1BŠJäté\|Py’¾›mk-®x†(%ŒÇˆÑCJBUIc©õ©5- .õ û™tã,§Q¶ !ˆ’aÛptûÙíÖëúûÿ;&ùãýð(òaÿž1ß¹£ïXI`Ía°äBñ‹Êb8Šg“üñ‹þøy0ÿÏ¿ïO¢€äÃÿ•M.¼!(›Sv‚H§ ò=Y|ãÈÜ[¿4Íÿû/á¼ØÉ‚ÑG©çóÅ6ãKƒMðæ%Æ£ͬÂàÜL»ÖI˜Û†A9ÜÝzSz6-Ò6?á"Ò¾À/~Õ˜LžW±}ÿÝÙÙöÆjÖŸ¨Új–¿h²˜Kâ¤à‚ê<ƒìk‘²Õ¦Ñt½KY¿ò÷êжÁÐÀò… CQNÒy9À÷­] ÷J²± ºœ7s^]âY¡ù•çqœ3´`qžÂ„‚çGXúž«¢%ÊYj{ƒ©u»4jÇî’ÛJƒÏ5±\wŒïíeìãÔÁ»ˆ©þÌ »í-BìcZ]Púõþ›¢§Ú.¤Šßí*î ÌŽpA’pà* áhrû˜m-¥¸q˜B7ÈÌzd šæ¼Wmªùw—ÓYÛIîc·crCB»Ð‘·a-Ôç œ§Šmµ&îúæÎÑãýÌp‘tÙ„oBÀ.ÎIn§#€8â…ÐG]e¨Gswyd"1KhÊ¥9B2¬=#ð5z¹ûRòxÚv*ªË¦Ä'Ul€åØœ ñ»µttP¢Š(¢Š(Ö«cgwmiqr‰qrÛb‹«1úÞý(ÔuK-&–úáaGqdY@äÖOˆ­á]GDbŒLúŒjÒ˜|k#ÅÖº ײZÚÍaŽÝÍÉ ïR~]„e›©Ï@=9ëþ@ÿOó:;ÿišd’¥Ü—ù\»‹IYü)­iâ[=œ,Aw–n\g'=+ UߨëF•2ª¡òæ5l‚W8Øœí­mRÖÝ&îÚâC2ÂÈî6©š×½Šö^ Òõ ·ºÆžkyˆÑüŸÞ€ÊûŽ)tý{MÕ'0Ú\&ð­&åé¹w¸{ŒŠä#7zÌ×Hõ[+2hCÛÛ´"v`>@wÇ É^MᙼÍwOUÔ—UØ2Xö›NWƒŽ¥ºsÏËõ¦–¿×Ÿù ú^_æwuGQÕìt¡¼•ÉŠ‘´ŒqÔáA8µz°üI¯&¼"h!¹»b‘ËpÛcŒ–võÇw$RcE‰¼E¥Agov×{Ḣ1Fҩ‚xïÇ%¬N ñjöÖö“I"å.„J\ŽŸ{ö¬ 5­7@ðþŸg¦_Ú¿Ú GÔÒ,ËÈÇ¿' êH¹áø¬`Ñ-âÓ®VæÙe`ÛÛ$±È÷&ŸqtQE!…Q@6HÒXÚ9]Êà B)ÔP{K =>3•¤Ñ“’°ÆëV(¢€UQvª…€b–Š(¢Š(¢Š(Uj¨Qè)h¢€ (¢€jïß´nÆ3ŽqKEQEQER2«©VPÊz‚2)h Š( Š( Š(  º†£i¥Úý¦öa ;•7HÉ8)šæŸiGQxÄRÌ‘ÆwŸ—œŒç¶3Y^.‚;È4»9¼ßÅw‘ÉªÝ¶Û [ÛYa3£}¦a•;‘²9#= IâVÓ¾Ñâí¢¿kXöh›8Ûåõ¶wç8掗¶=³îõxlb½šæˆâ´ L…8“=zóÇÖ¸»­>ÖîÞOk«K8^Þlñ0‡vTöäRê'í$2á¼Ï°–Ï|„ÍW.­ ;Ù÷;K]Mîd…M¾·2†9™ Œ}â¬qœñô5~¸½nÇû;RµƒE¶KyFŸxФ(çÂcw¨ïÃöž¸}*ÞÚâá£/PÅ€,i‡Þ8É'éSý~`vW×ÐiÖsrÅbRªHäêE:[Ÿ.î<‰ŸÍ ûÅ\¢`ížÕç¬rxÄp[½­Í”rÛÈ’RûT–ì9æ·‘´ÆÖ´ìO³}”-Öß ›¶®zS·õò°¢¼çMû.í#ìÞgü$ŸjoÎï3nO™æ³ŽºbŸ-•ºYêZºDP‡ZÚ—‡ æªíϦ ¡+ÿ^Ÿæ Ù^äwWú…¦—h÷W× 9w? õ>¦ŠDš$–3”u §AéY^(·†o ê/$Q»Åk+FÌ ”;#Ò£‡û?vŠfê?fo²[pnéǧ_Â’ëýwéýv4T²TLk…ûlˆdX€$íÏaø×'üz‡ýu_ýi¶–Ú­—Š4¶YÚ›‰ÃÍ:]2'00úwôÿ‘ªÿþºýSè#¹²ÿT>”Qeþ¨}(  çû†¸/ªzïgû†¸/ªzÕ²†;Ï [X\ZM,/l¨ÅõÔ1Z©;¤jŸe¹;@eÉ?Z¡f¸Ò,C|´µ‘ˆGdÉ= Ç#׌¯5ÿ L—?è:Íž—uÝÓ þÑý?º1-¥¸ísµûTŸóéqÿ|Qö©?çÒãþø®8øëN}Ù³¿ÎqpG]ßíq÷éýÑ…oiÍ»6wüç8¸#®ïö¸ûÇéÇ÷F<{ŽÇaö©?çÒãþø¨gXîe‚I¬.­ß̈•?+`ŒûðMrã9·fÎûœç :îôn>ñý?º0óã]=Á&ÒønÎqpîïö¸ûÇéÇ÷Fx÷ wÚ¤ÿŸKûâµIÿ>—÷ÅrŸð˜XÉŸôKß›=.XuÝïÇÞ?§÷F'%¶›8²½ù³œ\°ë»Ðÿ´OîŒñîgIö©?çÒãþø£íRÏ¥ÇýñX']…ó›K±»=.˜uÝèxûÇéýчjÏú5Ï9Î.œuÝïÇÞ?§÷Fx÷ 3NÖ$´žæhì2y’³)$œÐÀ«?j“þ}.?ïŠä¯üi§Yj1ØKovÓÍHDw-ò.H瑌îlcû£¦ÕÄw~9±‚=ÿÙÚ”»˜©Xg$Œîçï ˜ý>_îŒ qz&;µIÿ>—÷Åj“þ}.?ïŠóɾ)èé#Ç.™«£ófÁÝþßxþŸÝÅM÷gOÕ~lôŸw·ÇÞ?§÷FÐCûTŸóéqÿ|Qö©?çÒãþø¯=ŠZ1Gs§j¸Î'Ç]Ý>öÓîŒ]²ñþ›©—iú’óƒºàŽNî˜oöÓû£wv3µûTŸóéqÿ|Qö©?çÒãþø®NOÙ}¦h •ñe8b· H'ŽÛ?N?º0Ù¼ibªå¬5s·uÝÓæãïÈtb¬Åtußj“þ}.?ïŠ>Õ'üú\ßæ‡ã„ŃišÂ’H#ÎÆÍŸããï¦÷Fü^ПwüKu~sœMŽ»¿Ûãï§ÝždU™é_j“þ}.?ïŠ>Õ'üú\ßæÏñ{AÁ-§jÀ6s‰±×w£ñ÷ä?º1 ÏÆCúv°D€RluÝŸããïÓû£2VzÚ¤ÿŸKûâµIÿ>—÷ÅyS|oðáÝ3ZÏI@ë»§ÏÇÞ?§÷F7ÇO !!´ÍkæÎvÊ]ßôÓ¼~œtaܱëj“þ}.?ïŠ>Õ'üú\ßä«ñÛÃ3¹Q¦kYlç÷ c;¿é§xþŸÝ´~3øyÃìícœçc®ïöøûÇôþèÀ#Ô>Õ'üú\ß}ªOùô¸ÿ¾+Ìã?‡›9Óµ›=&Ç]ßíñ÷éýщbø¿ \³(°ÕA9Ïï±×w£ñ÷ÓîŒsÒ¾Õ'üú\ß}ªOùô¸ÿ¾+ÏÏÅ ÷fÇSÎq9wµþÑúqýшŸâ¾†dxΟªçœâ|uÏOŸý³ùîŒ)5X✢z/Ú¤ÿŸKûâµIÿ>—÷ÅyÅ·Å­úèÛ¦Ÿª†g “>X°ìü}ãôÀþèÆ³øçN,àÙßòK†wtù¿Ú?LîŒg*ô㤙jŒÞÈì~Õ'üú\ß}ªOùô¸ÿ¾+ÿ„ÛO‘\ýŽû¡$ †wtù¸ûÇéÇ÷F(ÝüLÑíîXê[¤ÝÊÎ@sü\}óÓÐtbV&“ÑH~§c½ûTŸóéqÿ|Qö©?çÒãþø®þ.• 'ìZˆ Ÿùx#®î˜n>ñúqýщO´ÆRÆÎüÎÒë»ý®>ñý?º0}f—ó°©Øí>Õ'üú\ß}ªOùô¸ÿ¾+ŠédÙê6z\×wû_í§Ýiø…¥¾ïô-CæÏK‚:îôn>ñý?º0}jó°©ØíþÕ'üú\ß}ªOùô¸ÿ¾+‰oˆ:[nÍ– 3œâàŽ»¿ÚãïÓû£|AÒÛvlµ»=.ë»§ÍþÑúqýÑ…õª?̧c¶ûTŸóéqÿ|Qö©?çÒãþø®(øÿL}Ù²Ôsœ\×wO›¼OîŒ<øïMpse~7g¥ÁwµÇÞ?N?º0}jó°©Øì¾Õ'üú\ß}ªOùô¸ÿ¾+>8ÓŸwú÷9Î.뻦ý£út`oiÌ6wÜç \0ë»ý®>ñúqýуët˜=…NÇaö©?çÒãþø£íRÏ¥Çýñ\køïMçuøÝœâàŽ»¿Úãï§Ý†ˆšZ/c¨óœ…œŽ»¿ÚãïÓû£Ö¨ÿ0{ ŽãíRÏ¥ÇýñGÚ¤ÿŸKûâ¸øüq§\À%—Ádÿ†œú7xý0?º1#øÊÀç6—¿6z\0ë»ß¼~œtaýjó°©Øë>Õ'üú\ß}ªOùô¸ÿ¾+’>4Óܰ6—£9Î.uÝïÇÞ?þèÓÆ6Íå›k´ÞH,×ETgvNwq÷ä1Ñp,UöƒØÔìuj“þ}.?ïŠ>Õ'üú\ßÈŸiÎ û%÷Íž— :î÷ãï§ÝSã;,>É{Îz\°ë»§ÍÇÞ?§÷FÖ¨ÿ0{ Ž·íRÏ¥ÇýñGÚ¤ÿŸKûâ¹#ã==·fÒ÷œç :î÷ÿhþŸÝSã+, ¥èÎs‹†wtÁÿhý8þèÁõª?̧c¬ûTŸóéqÿ|Qö©?çÒãþø®+þý.F}Žÿ‚AÅÁwtù¿Ú?þ跴›=Cœô¸#®îŸ7ûGòÝ>µGùƒØTìvŸj“þ}.?ïŠ>Õ'üú\߯·4Ö›;ñ»=.ë»Ñ¸ûÇòÝkxûLbÀÙjç8¸#®îŸ7xý8þèÁõª?̧c´ûTŸóéqÿ|Qö©?çÒãþø®,øûL|æÏP³Ÿô‚:îôn>ñúqýѼ{¦6ìÙßóœâàŽ»¿ÚãïÓû£ëT˜=NÇiö©?çÒãþø¬­GLmRGË«-´€,–±í¸îË»žø"°ÇÚcnÍ– 3œâàŽ»¿ÚãïÓû£Þ?Óvlµsœ\×wO›¼~œt`úÍæcS±Ú-Ã"…[9€t¥ûTŸóéqÿ|Wÿ´¢X-C'9ÄäuÝþ×xþCû£ ˆºIÝ›-Gœç‘×wû\}ãôãû£Öi0{ ŽçíRÏ¥ÇýñGÚ¤ÿŸKûâ¸SñI`Oص›=.ë»ý®>ñúqýѾ#é-»6Z9Î.ë»ý®>ñúqýчõŠ_ÌƧcºûTŸóéqÿ|Qö©?çÒãþø®þ$i8$Øê_6~ìäuÝþ×xþŸÝ§sñkB„°’ÃUç9Û6:îéóñ÷ÓîŒ5Z›Ù‹ÙMt=íRÏ¥ÇýñGÚ¤ÿŸKûâ¼Ñþ0èbÚv¯Îs‰±×wû|}ãùîŒQ—㯆U[MÖ»çl uÝÓ÷ŸíÈtcE$ö%Å­ÏYûTŸóéqÿ|Qö©?çÒãþø¯#o>mÙÓ5¾sœJ]ßôÓ¼OîŒ#|zðÃnΙ­óœâP:îÿ¦œ}ãùîŒ2O]7l£&Öp=Ò¹9ñ=áÁu8?îŠÙÓu(õX^âÝ."1Ì€ƒ36rÇ<`ŒaoNWh# ÈÑyþøþB€;{/õCéE_ê‡ÒŠb'Ÿîà¼Uþ©ë½Ÿîà¼Uþ©ènÝâUjÛzYJ3·§+ßÞ£§CŒ!Ód„â)@ô5ëÖëÿ«VÛÒÊQ½9^øöõ:dx’F-¬3ÇzƮȴtÿaŒ&àWzÕ¸ÓAdpWÌü«4˜<ÒårO~µ£ œh0¨3ô¬ 'C&|íŽûHÏçQ æGòͬÇ=þ\:´ƒ<ÇžqÍ MbîÑÆ,Aަl즉YÿÇqZ¦,ö¥Ú–ƒ2ôëK—¸šG–gûÒ;cõ'­t–ýšî)Gð°&©¢è*e=é§gpf׉­t›ÝZï- íöd D¥~]ÍÇê:¢šg†ˆÒO×í-ŸåSßÊ%·Óå+òíxݯöjªT dnÓ­vs¥m¶áF6·Iƒ¢~ø÷{OƒÃö@}žÞè`ç—SšÍòƒòªÖ¶pÈ>Ç­c±µ³G‘äÇtÛqû½zzûT¦ÓC–?žiT‘Ч#òV@B8äûÓ‹\œàSædò¢9>øVæi&[ÉÕ·mª2}™qà} CF²ßw+PJ$Sƒ¸ M–™ŽIëš[•vºžc¯øzm;R6Ð3I®õr1€I'¹íê+žñ£[ÁjBü«•'OàkÖüÓ$ä®yãӉ攨*¡­äËa±¢«î 3Z1òÅU‰oj¼£•fbù~üU‹ݰlóŸJj·š”{ÐÂ6TÕY¾[‡lgþ‚¥¶%¢ÔW$‹Œv+Yb>|/ñ Ú.?¶cãþ[Çÿ¡ ô (ÝJíØƒ^{£øœ'A‰Sø¯Abv Jñ±ß=*;)Ú¬q“Ž}¹®[ZÖ-ÈnªÇùWE~áÁ9'ŒÿÀþ•…w±üK§ÄË”yV23Ô@GëXaÕçcY4•ËP>Bœ1ÈïWDƒnÜ×Os éÉlî–ØeBxsØUtÐl-¢2ß\¤QîۼɅÏÔ€=«»êR¾èåúÕ6s2È p?*(ëÆkRîïÂV»ñ5ÕÓ«m+ þ r—šÌbwû5‹ˆGÝó%¿/ù÷©xb©›Yã9üéç85«cáÙ¯¬aº‚â/&xÖX÷)« ŒŒqÁ©ÃWaw,ÑpGÌ?˜¬²û&ª½7ÔÉP023OQÇ5ut-Aä1¤JØÿ¦«þ4’éw¶g@GІþUŒ°õVñeª{2ÆÏ_ZR1’{úPC eH縥9å«;êQ ƒ$޵›{»Ê8Èö­'Àã©ë6øí^„UCâCZÍOö|x!EZ| +.1ÀëO?yŽsØóMîB#'±§=Çn´Ö#0sÖ–& ‘Îyÿ?•$0aƒÏ¥àqù‰ýiynØéï@ Ïzv€äsL„·–ž`Ãí†zq#Ëc»¾”!3& ª„$óøÓò?ZŽ'ÄK’9òÛ‡¢_Kaý¸Ï½FÌG’­;¯%úÓNÜpr=iÐø'ƒùÓ·‚=½©ŒsÅ <àΩ ’1 g'Ûša9ËšBö3õ ¶GáLCOüM'—žqÆ: 2 î)TÀäz`>œqõ¨dE Œú‘V—héÄS$ ð0=ÅRb*²˜šæ¯ògÚ9ËWIrþ\dŽ+—”—»Èäµ×‡Z܉ìEpvFNêåç²0~½tZ«ì¶a‘ž•ÎLÅܱêNkÓ¢´¹Áˆz¤F})(Í-nsŸ\xIwi—#nïô˜Ž6ç£cü¿Ô7þf‹¿÷‡òï .í2ämÝþ“ÆÜôaì—â:†ÿÌÑwþðþBÎÚËýPúQE—ú¡ô¢˜‰çû†¸/ªzïgû†¸/ªzÛ·_ø•Z¶Þ–RŒíéÊ÷Ç·¨éÐã#Êo¬>̑Ȥúž¿ã^­n¿ñ*µm½,¥ÛÓ•ïoQÓ¡ÆG+¬ifçNd…x§r¯©‡ò¤ãÍ)JÍZA5e=¹ªÊCA⧉±Ö¸Í‰Â”õÁàÒ+ƒNÀϯ҆íÇZ03Rl-Î 4BÿÝ¢ã¨"¥[yci©—O¸=#cøQf@qÁ§‚}úUÔÒfc÷ãÅNºD™!qêi¨Ë°]äc&šñd.E™qÎïá#FÏáVíí÷ƬqŸ¥JÚL¼l•ª¿îB#Ú­Cgä¨P䯦?úõÓkY£7nä+ÈSøT¢Ø×"§h”ãädÕy/RÞcªùÆFõ¢rPWá7hŒ12žG¢‚„­)Ô­Ÿƒ½=Ù¢mBض<Ãÿ|š…^›ÚEº5èiààŠš#Š…î­÷ Ë=>aSÆê¬¤ð¤õìkE4ú™¸²SJž“udU34e¸ÈVÇÊßÁü+À'!á8錊ú^%Rq‘^i«ü/Ô.õËŵK{‰ÞD0Ú¥‰Çãð¥(ó;¢©Ë–éžJzQÿ,Ûð?çó¯Ná8ÛûÝXƒè¶ùú®?Å~ ê1[šx¦‹zKå•䂽O#ÿÀ…U´cÀÙ"¯Tarjòr3TfNœŠ=B€ñíVâ‹Îhí²€¿^ÔÛ‚>Ò£ý‘ÛëK•9ÉÒ’UW”>îƒZŠÑr‘¥ (Nì¡a„×úáC1]ñn¬NëŒHâŽS*¯ÏýãZqiº­ùܶ³¶CIò‚=‹`W,òꘆš:V20[’ßÚĸ2‚qœ!Ïò¬k«Å—S·¼ˆÐ8‘t$#<ú­l[ø:êBMÍÌQ‚2ç>ý?­_›Â–1X\˜Òi®<¢cù¹Üާ×5ÙC&Týç¿õØÂ¦:RÐÆ»ñ>¯¨1„NʲP.9ô|Üúf†µíJC+ZJ¥ßç’àì9õ;¹?‘®¿À$¾dDÌŒTüÒ† ß÷ÑÙkªÅuÓ¡ \ð±…HMÂ+c‚³øy!*×·ê0ܤ œ÷Ž0U<[á‹I·¸´3ó¼·ßó #cn:sº½²|OmöŸ ê1™„ÈJ®IØCãñÛÆµ•8ò´‘ËOUÕNRÒæ€æKÍ2Ò3ËlÍ ;î…tRZ³?ÈB Ĥs×¶=ëϾÝ3R±3Ê¥¡3ÆŠHh!¯ÌŸ•zyHÿz¼Ö}–ñÜA!`Ìà €¸ãžzŸÂ›t¡í™Œ[deÀ w瓹y5 ¸Õ„o$?½|GÌØíéQ®±©Äâ@^QÎw’Aü?úÔX.lÏätA·#©ïïÅ`ÈJ¾Ó…aÔzU»M^æêö™2¶Òxxìõªº¬kç 0Êü?¥yØè{—;°“÷š*JNN:zŠÎºÜÁT·Þâ®»áO\V|ÒuxUþb¼È/xï{&p‹ŸîŠ ~§?\R¸Ë(Çjk‚zÎj.$2A@‘N(Œp{zúê6ž¼â¤ 3ôi&6ƒxV9àqÏjvì©+éÁ4ÃÔ2øQ `Tƒ…ž}ÿZ‹€£‚O¨îRÂB£¢ð:TA\Aæ¡¿b–ï€$SŽâfzdF žžœÔ€å²zTQ¸ÈÍ+9'tâ…½Ê&ÀÇ=~´ÿ^Œ~t€3ÐÓDb:t¦•òi‡%²céFHçª@)Æzri¤`pZ^qœžMàó“ëWa ƒÏ<Ô í“Jh;oƒŒž:–±ÜxaŒT26ØÉ©ä€3‘j‚vÝÍ8êuìÄÆ}k.]½\½“ƒÒ©(ÙãŽkÐ¥DÎo[zÔœ"ärsXŒsš½ªÈZì¯QŠÏ5èÓVŠ<ÚÎóaEw­ ®<$»´Ë‘·wúLGsч±þ_ˆêÿ3EßûÃù w„—v™r6îÿIˆãnz0ö?ËñCæh»ÿx!Hgmeþ¨}(¢ËýPúQLDóýÃ\Š¿Õ=w³ýÃ\Š¿Õ=mÛ¯üJ­[oK)Fvôå{ãÛÔtèq‘‚&Ü̬7£ÉþU½n¿ñ*µm½,¥ÛÓ•ïoQÓ¡ÆGÖÒ6ð‚ªTèP—óµì¦DåYˆïì=êx¼0å¿y:þÈ'ü+ …ĨO§ ÅG²î?hч`O¿+·Ðb®Å£ÙÆs°·ûÇü*øZ\{STãØ\òîW[ eéÿ:Ù¡ùiÿ|Š”¯¥4‚>T.f7qÚšÀÔãŸZfÄÚ(À£4ÏZ,ÕzqˆTaˆïR+P|ªŠTdMÊHÇ\ÕhSZ;×ïù²N}iú}½”Û¢¸·WeäAÇáþy«,€CøVuÍÃÛN«l7]•%ƒ¦[БPà™¼j´hM¤i’–Ýÿ\ÕI|?bÃ÷Rʇý¢ü+>kK»Ó›ýjëä6ä[€8ùK½†H{Ñw¢iɶêÚi“y¯%}¾ãs0ªt¡ÔËÚÌ´úDñE¶ßQ“‡*?CIZ嬙[»9ãÛ€³†Èü@ÉüMr:–m¥Z‰´éìñ@¶Ô-ã>a礋†Ï ãÜâ­ÙøÖÖ=={9 •~_.6WQ×lÿœ÷¨öPZ ö’z3¦ŠçS0»ÓíÞ"p ´Ø züÝJçüw¡ZxŽÁb¶ŸÊÕ,K:C2Ì çf1¸„;õ“qã‹¶âÚ$‹®KÇðéÖ°|ûëéæ™LóË!Ý+ ’sÇ>ƒèÀâš§)iÉk#›¸Ðu+Ò›.F‚—\ïÏ[ƒOpƒ{öšèáðýüŸ|GÞlñøf´`ðÔs4òHAÈÚ6Œzµ× Yo¡Ïô•ÚIàÏø–ø›TÓ<µŽ7\¡‘¾r¾@=r®[ð®ò¼òøÿeøßMÔh±Ìʯ,Íò‚vçÛÀ×¢â¸R哉åfµE.èn(8æÞ³ïµ­3MÞ.ï¡Ó£Ý¹Æz|£'ô¡É-ÎÅÉÚ(òË¥Ðt@eGäRW‘鶬u› Jl¹µp|öï\~/Ô l< ÃÞ­§ŽHȖ͘žãŠÑáj®†J¬;LNNæq†Ü¹çŽ@« ôè8®Q´æû½k!|G¥Ìêî> ÕƒªXÊÈÂò0 Ýoʳ”eÕ Y—™¶¡lŽÂ¨êó„Š(ÏVlqô©F¥fÝ.">û…gjÇtѤLœƒD7‡B‘ô¥ÞU²=x¨í¢`,;c'5/’wrGàkH¥`{-òƒÖ““Ư4›Xgõ¤Ã€H÷¢Ä`zFqýh9#³Qþ"†HÌqǰ¨öp(gÁ'ëJÍ0AúúâšÜvÉ÷§’GåL㡵¨òªýÑœö'‘\[“¶H{‘Jè­L£‘M$âµ/VØXÊè±£ Ýœžƒ“ßÓ5’§&“;TŠ)ÓÇŠ:sHOµqÚ·Ä+[+élí-$¹xdh¥vmŠpqÁ'ž:k™¼ñÞµs÷fŽÝpA çñlœý1EÅcÐõ›¤±´7$¨`B¨fq=¹üþ™¬×´67-t..$äh¾}çИ†x¯?š{ëöW™ç‚á^W,qìM a)åäUúsPæ–ìÖ4§-‘ÓÞxÌße´Qæ=9 ÷¿jÈ:α¨ËäÛ´Ä’6Ån§#cžÞµsj°*²³žs޵ìZsA.o-¬ 2 ‘b@]Ã8ãŒóIÍZæ¡yYžomárý„¯À$‹Îø9÷¶ Ý´ø{½½‘ɤ .Ôç?®ÓVn«ètÆ„æþ,Э´)l.ì­ØÅ÷dY>d,¤»Ý¹ã¦µ£dxÕ¢`Ñ •èGlV·Œl>Ýá«’-ñp¤¶íûÇþø-\Ö…pn4˜ffˆ˜˜•ÇN€zü¥kÔËj^ñg‘šÒ³RFŽ(¥£½SÇ0¼Ole³†`¼¦*@è‡$þ!GãM‚_:—åù”· =Åkj6æïOžRÎèv(le‡+ÏÔ ç4yÄ–ÍA1·@:)äsßÕáæ´ìÔÎêôíØÑ¢Š ˜€RkÆ,ÏÕáZ* F'°<×ÛiWbÿI¶¹.]v+Œ¸á¸ÿxâï/mM¼±yŠìW‘žÔýZÔ`±k9.åW2ö'G=rsžõêà+ª)óè£âwµ÷Vöʦâx¡ p¦G Ÿ¦z×>º?‹õ@L³ $ûë™uíòe¿«¶¿íC3ÞßÍ31 ûµ Ï|“œþ”ëç¸zz'Ä-»9ÿêzf§mväÍ2; ÛHP¤|Þ¹!*Ö_x‡U@4ý1xØÒ¬lø~äò¨ö9Ç­mßxOJ]ö-9Lïh°Ä¹ ¨ Ä‘’8ã“T| wçhMlÅ[JÊ~öÖù²~¤·å^F';œ©Jµ%ªiÐÂÑÄÉFkbƒh^(ÕÇüLõ#OòI™ÔzìOþb­ÚxO‡c\Í5Ã)9"0íÀÉýkª£ó•³|]_µoOêç³OFš´bp>3Ñmtû )l ŠÕÚ&Á%œ‘•äòqµ¿:é¼|/ü' ^ríÙ |¦B€~U#¿ÈV“Å6ŸkðåâèÓÍ ÿ÷æ8÷Úük™ð%Îá§¼Ø ÐÊ‘úèªç#Û`¯{'®êáí'v™ÇŒ‚Œîºž„t{Û¢8n[<žþ¾ýê•Æ“m(Ù" Spw‘ôõ¨æ¾´´œ@áÁpŒÂg!Xƒ€Nî:Ê K»¨ck–(ß.ÖæË-““ÐP}A>µÎBí­˜²¹†HѼ°¬ä `/¿ò5ÍëÏ·_¼íÏû¢º¥7«ížtåh ,ØéÃ×+ÕŸÌÖ/ˆ?½`?é\÷û¿™Ùƒ^û*o®=óÒª]¢KÎ=ª×–¬…±€OëQI à×—g©è3™šÁr~SÖ kî¿¥tÀÈæ«4$ç®;WTk37Ì6Ó“Ð}*#¥#t_Ê·L Ü~´ñlG´Ußr]4sgG>ôÆÒHãœû×Sä6y­!°=>´þ°ÉöhåÓN”ÜcŠêô],Án3Ç’M$VÙ`JŸ¡­›e ƒ냊ʭg5b£Wt*ضKdú{ÓŒ½1øš´£ éïMgr~þ@õ®{"îÊMׯ4ÃÀ¡’GN)/o×½KC¹@Â3÷IÏjO' Œš¾]c´œŽÀSLˆF6=hÌÇàþèÔ÷вÏópÎ)Táx•À„'ÛŸ¥G$ Î÷â­cÕGJ†i/éÖ•ØÊí œíéY×yÁ>Õ~GfŸjͽá&·§¸ÙýëóYÚÌ @F$ãŸÖ´ÐmçjÀÖ%ÌÁa“^¥%y#޳´2ZCKI]‡ž´R¨,ÁGRq@ZøIwi—#nïô˜Ž6ç£cü¿Ô7þf{¯÷‡òï .í2ämÝþ“ÆÜôaì—â:†ÿÌÏuþðþBµ—ú¡ô¢‹/õCéE1Ï÷ p^*ÿTõÞÏ÷ p^*ÿTô·n¿ñ*µm½,¥ÛÓ•ïoQÓ¡ÆGÇww7QÜÛHÑËÊ²×Øöëÿ«VÛÒÊQ½9^øöõ:d|½á¯ Y×ÍpºdÀrj\”JQrvGqáŸÙëv›gd‚ò1óÆO î¾ÞÝ«{LñL:n¨¥ˆ[&ùd'Óû߇ùëW|ðšÚú¤D;!þ,{ÿwùý+g_øS¤jÉ›[‹› ùB6øóêTòï¡D•IZÎÀ•8üZe`XyƒA`;ÖáíDÓÅ”×_E Û¨H,t §lÆjYuìœ<-ŒâT)üëG+neÉ}‰µÝrÈJÀ<®qyûÇ×è?ÏZòwÇzÌílgÉ<4q’ˆ2;÷?‰®›Å1G{jÜ6ñ’é¿  ä;’}Àö®\irÌhÃã%kÏ«QûKI^>GÑåø8O ÍI¥Rú¶¯oOóOÔ.¥º’6/¬¶W>Ç<þuÞøcÄ srt«™¼ÉDeâv?1Æ2¾þ£ØlyõÞ½gllí•PtyOÀ` è>¤&}a¥W¹ÞÑ ù8äãÜ}3Eý§2VFØ÷N_gV\Óï¡éYçñI aANËÀϧoóíT–è 欤¶°8ìGùÿ<šíRLù†‹@Ò—¨P85e °È4Ьy'ì §‰`§Ëºe&ºF{ž?ïVt)FWƒÔþuÞ|HÓ–ãBŠõ@Ýi(É/Œ#áNr[gë^}§¸h wSÓù5•TùNœ3\Ö-ƒEèîk˜î#¸O6Ý×Û"»O_-Æ„m A%¬„mŒw~¤¸ü+£à›£eâY,É.å 0'ðÜ?ÖÅ£){³Rù‘KE&£^4–6ŽTWVF ×˜hJÖZ­þšïæ˜ùÂ’ŒTáO®sôéw7vÖhêâŽÐÒ¸PO§5æzþ§gÿ rêv2ý¦2“*@VÁB¦~Pzd×N§³ªŸC‡MT¥n§EI\áÖõÌ­žK`¶ÓõàÄQý—«_gí—[#n7g§O”q^´ñôã¶§—C(ÄÖÚ&ÅÆ¥gkŸ:æ5 à¨9#ð×"—‘Ùßܼ »3lUùT åzú?è-ü7g Ìóà«ùZÌñœvS[I…Œ®Ýª1ÈîO¾Jà­‰X†£-Qd•0ÔI2“êW²ýÀ#õÚ¸Ïçý*Id9’Bqб$⦤ë]Á҆Șъ#XrO¹®“ÀwkâF´Ì….£e Ÿwrá›è¡‡ü ¹üÓínÿ³µ[KìHVUÙc8f‚Gâ2?Ã2ê˜iE!U‚åÐö®ôR°!ˆ=¨÷¯ÎÏ_ìêzIÁ ™1FNX€wFÿ®lMwæ¸?£øÓLÕ‡— 3`K)䜲?ë›(®¬2öŠt¿™?½jŽœ$ù*¦vXæ’–«]_ÚYcíWPÂX¢G [™ë^4bäì•Ï£º[“:$ŠVDŒ0ÊGwäúmÜúˆ -¤I>Ï þ!ÇöÕy®ÒïÇL¥kn¶ìÌ%DÎàwÎrÀŸÄ×Óä˜|E''8µºžv2¥9$“Ôìm/¤{¯2ä ‚wýî€FxÜÙç}9éšêÆÒ @²Âf¦l»sNxëØöªxz+ô‚êÞèÎ’.åryŠpAß“ƒŒr8ö¨Æwme$ &è˜ÙÏËÏ'®^ßÐ׿èp–ôéTØ«Ç,²¨¼Œnl‚s$}3ÛæüÉ®jüí+à Ąö,MlÛiÚ•¬°|óy^tLñ’¬0®§=N:gŒ~5ƒ6ä¹”öÎEy¹‡Â‘Û‚Z±ªÌ ÉÈëÎ)$,@éKÔdšs®Œ~µå¯3½•ˆn¿Ò˜P’2‡`/r9§`y>ÆÅb¸…O sõ¤0ޤ ý*Ð$1Á¤Ž ÷Å.f*2c®i¸•\;Tgüi¸JçðéO˜,F›WƒUȤAŒ‡ü¨V?tæ¥ÀÆ1ÏçI͇)gÍN€Ÿ ¨üõ N W–ÆóëÀõ=Ï<œÒçaÊXYC­žüT- É©ÌW8þµ_Ÿ˜ž{G3 ¶6Ÿ×4æ%W·>ôŠ2BjÇ8úS»͸;‰{šwÈz5.ÜÆi¥“Ö„:…Rr?Ïœ;7\ÕùÆZΙ°ØÒˆî40ŽÍYú€ÛÁÉÆy­–n:ŠÌÕí$àr+¦›¼žÆ[aõëõ®ZþM÷rÙÇå]-Ä‚8I-÷r~µÉHK9'½zØu»81NÉ!†’”Ñ]'U‹$Ýr§²óUëSLˆÝÜž´ ŸQxIwi—#nïô˜Ž6ç£cü¿Ô7þf{¯÷‡òï .í2ämÝþ“ÆÜôaì—â:†ÿÌÏuþðþB‚ŽÚËýPúQE—ú¡ô¢˜‰çû†¸/ªzïgû†¸/ªzÛ·_ø•Z¶Þ–RŒíéÊ÷Ç·¨éÐã"Ÿ„¼¦øRÍçÝãç¸qÎÙ…\·_ø•Z¶Þ–RŒíéÊ÷Ç·¨éÐã"ä¯%©še•PÛŽ=ÏLúý)Ä$Ú/í¥ÛDN“D’¡Ê:†Sê"žØ@=©²Añ˜å$CÕXd¤œ v9Ûÿh×Řۘ\òLGü:~Uà<=ÿ–±f–¦QÄ%üлQÈ8*<¨Á?ï/ké¹dH!yeuHÑK31ÀP:“_'øëÅ·þ1Ö¦židKØ·¶'å‰LŒãw<Ÿ|g›Œo{F­E¤[9)b¹¸·-“ñ¹›?løG^þȸ”ÈÌct .~\ärG®*χ|%¹ÆK–ˆF@ás𫬸qô{£òëÔ61š¦´Û–¯SÑlµ{]V<+C#c;0ki×oe8dµ„Æx}Ÿ)#òæ¼VÊî{;”x\† 1ƒ^©jæ{H.T »žøöÈ#ð®*Üôí(³¦Ÿ,´hìÆ§~§Ûü+«µÑ#{$–Y¤ŠG]ÀQî r^ÐæŸv§r[ì°Ú­È‘²8Ç ®®_iÿh{8gY/#Ç™o‚$ädÞ#žœŽk¦‹Ÿ-æaUE>X”.üaÁýA«]ëÂ×ìd‡æ>[ž0݇äOã[µñSV“GéxZ¾ÖŒgÝeø‚ÜÜi2´dHüèIü+V™$i4Oƒ(êU‡¨4“³¹­Zj¤S†„î‰}GóŒTQ+E,Iá ޏ#ƒR⾂Œ¹©¦|’M+1:šŽa˜Ï·5#2¯Þ`>µL„=½*+T¦¢ÓdÉ«Xõ¿ Ý}³Âú|»v•‹Ê ¶ãò™>çnÔšhà…¦šDŽ5åØÜšòMó\†9ôÍ:S.^U«@RryÀéW×ÃW7R¬Ú–¡$Ò´œ—lznnJù%‘T«QÉ4¢Þ†°5ªë¡Ø_xÏD²Þ>Ôn$\|–ë¿9ôoº:â¼OâH¼C¤zqAnå–v|¶ÃÁc'osÐV­¾§[`‹q#â”îÏáÓô«Wv‹>5ªG TR0 ãÈàש‡ÈèÑ|÷»G¡O'’W”µ9ä¾ñ±LÚ‹¬Y;X7—»œ¸2z´‘xrbfÜ“‘´úç®Jw‡.|Û) .I…²£*7#žü†5±_I€Ë°‘¥ Sàó,ϫʓ•’eXtë;|yvè;ƒ¸ƒìO5•âH>X.B Á1³óyQú?ç[õŸ¬ÃçisáP´cxfþ9'ë·#ñ®ìMÊ„¡ÐàÁâeT'7}3¼ðÉ©xFÌ–š``œl p ûìÚé[L#ºâ¼³áljKŽöÁŠ™„ê3ƒœmb}F+ÑÄñÈÏ(~âká*baNn2?C…J<ȼºxί0¸{{›éå‡\’3§”“Šô n ËIa[¯$È¥7ªËžàö5Íÿ`Yˆn°÷ˆθ±U•T”¼=7 ¹&%sŽiÆ(ÈçZëáå'tW*ç¶×ùT áE\•¸]¾Ú¹%ÒÇKhÏÆÜLÒ8ÈïWÛEÔ!ÉÜ· ÅÙ—j>h‡=#?Η,ûÊJâç{Ômj§'= h;ŒebfÐ…Aöy×ïÄê\¥³ê˜®»•M¾XdøÑö\÷íëÖ­6Ý£vQšj¼nù'Ý©½·™_ì`uÜ(6ênX­\ C€i»œ³ RæC³*‹@07¹íA·ä·9«A²GB)­–a‚>¾”] R£!ü}=i¥$ÀåsÜÒ®l G·¾sHF?áEЂJqßß&¤”HϦâMLxÀnÔ œ¯õî+™ rųêؾÙúÿõêRŒGÞçÇ\Tx‘>brLsHvñÊ ‚;óULL>•mžGÕ¨[Ëm‘È‹z•Ü~™ÿ©qq v>c#œ$Œ{òO_J•ny4ÍeO‘&™'…üEm£™–vùX^sT-´„L-ÍÙû9vMëƒÓ##9 Æ…'f]ôºgÑwš…Ž¦›[O+ †4R2ƒŒóëÆN3Ï­yÔ^‡WÔ gÔî † >˪ACæ•Æ àq“Ðzaq¸ú—‡´ØX„—’¨k“¸qÓ ÷xç¶kRæ/m¤µ¸Œ<.0ÊN™iYß©“”z?ø£Å¾,þͽðö»sÈ·Zê-ªdØË àÎ0gœŠäbË©±%°rkÝ5› Í Þ[›³2n´”à4¡z ð©Á>£¥ráÑYšY'hb–6Ã2壌.YOÌç·@1ÏÂpåjJÌÊQ’i§¡—ák[+9íbiÒB¬_æ'¸8=:ãJéëŠð•ב©ËlÙQ:p Û—'ÓÕÚ×ÃfД12MèõGÔ`d¥A4¦¼i"4r(dpU•‡¢œÑ^j:Ï?°Sg¨ÜÙ»A+¸äd©#î2Z•‰c6ZìW¸}“(,ÜGÊÀ÷qùÕ‚6õê+öNÅýg÷GÀf´=Ž!¡)i3QË<0ÞH«ßò ö¥(Å^NÇœ“nÈ­§¿ØüFQ¸Iò77Ϩ¯7w÷"¬²½þ°Ík Ýñu 6ÖõSˬ»7·pöÎ+ÍÌóFœ}މÜðqXWJ¼¡Q߯mÎRÃá¶•mµ¯&šíÆw ùh߀çÿ®šÃHÓ´À•œ»w" Ä{·SøÕÚ+åëbëÖþ$Û"0ŒvG–k â$¿*EèóNKoŸbdSZõÄÛF‰4íV‘Ɇ#'ñ“÷“ÃkŸÆ–Râæ;$P둃‚2+ô,ƒí°q¾ëC¿/Š?¼uqE{g rv£ì>'»´/òK¸¤qŽ3÷Æ}0»…mšÇñ1z½ñvTÀÞ#1 rߘlV”÷vö¤‰æD`2TŸ›òë]¸ ‘Œ%;Yþgå¼M„”1ׂ¿1-#ª:‘C£ 2ž„w“?ˆm£ "G”ŽÿtǯéY>&¸b|’‘€r6®ãô$ñúUÕÌpðÒ÷ô<º9N.¦¼¶õþ®.$¶zòFìŠä´ÈÐÀ” ï Š£szf¼½._ÏJ È$ó>aÁ`sÏã^“lèÈݧœ¯B=«àsH¯h§™ú.¿gË-Ðç¸Á@ÏN[­H—.êOÝ4ƈ²ü¸c“×µä ;"±û æ¼{³¾È{O'˜2ÍôÛŠU¹tr (;‡C@U –'ƒÛÿÕKånä9àÕ„˨\t3>ÜpKŸåNþØþô°Ïð 8úÕp€¹²€l(8>ÿÒ‹¢5IÙpËû°§C©˜ÜâÁ<¼Í`ÛºŒà§¯×õ¦ÿz®Fzç'8úg?Ò©NK¨š¹´Ú¼¤¬¶àžá›u'üJœ€l‘?ÝŒåYENâä õúŠUf8fœ|¾ž½ðj½¬û‹•_fÑæ‡ ˆäõ-ž¸õªí ir©+w08ï(~bª¶í„¿’O qžžüqHŸ((q°¯=èö²¿@±,^fwÙ~Åù@!¿¥J<7r§ "õ'¢ûª?\µ »–ßö­ 1år;ð:ÿŸjnµþ( ×¹)Ñ/ ŠCÿתré÷P¶7Îz*æ´R¸Fȸlúš›ûjä ïíEé¾y/¦Ý ÜÖò(ÏWB?¥A$…åWþú­ñ­3ín;©ÍNu¤‘6Km<`¹Áü)rÓaÍ#‹H$ ‚ à UÉRÄp8®Ån´ÇR>ʈ¼#\þdTËF™²á›$n-ý(öq{1ó÷G*g&<~4¯¸•AäWJºFŸ†d»e+Ðexý)DŽL¨¼Nœ|¹çó©öO£”S<ÿp×â¯õO]ìÿp×â¯õO@vëÿ«VÛÒÊQ½9^øöõ:d[†êÐ42+UlÕKuÿ‰U«mée(ÎÞœ¯|{zŽ2<ÆÕ5K8MÞN~ta È?Lçô¨så/1éÚ…Ù²hîðÄBãx^ICÁý ¿¨ëV:M§Ún§UB7 —ßç½yeߌ/¥°6²yRH~V•z_±¯o%»%šw•Q s1éXÔĨ- …÷6õß^ëÒ…RÐYŽ‘) ·¹ÿ?— äE/—´mGEèTMÝ}jUã®s^s­&îÙÙQJȸ¬óHã%‰ÍQ×ôˈì#Ô]J…q`3Œç¯n£ë’*íûÛάŠ|ÈI2 ¡Ã¡çî±àÈäsïŸJ>Òu] eI¥¹7Våbº¸ËìÊü¬•ϦF1šíÃÓs\÷3ÄZ •­Ï}ñN¸8V`O§L`ñøÔˆ&ØêrT6íÞœŒʹËù.´»™!V’-š3œ˜Ê’6‘ÈÜ;ûæ‹-bü¨"ã’vòŠy?…uBWGƒ$ÖäcqmÃlßÓŽN?•Ø|5ðöŸ©oî$cslãËE8Fcêz‘Ð ¬sÆ+„ŽÞóR¿`ÆGu\³c8\ãõ?­zWÂÛv±¾¼ÿHù¤] `ŒØõÖÔÓ½Ç)%È ›J#l= [Xd’*ÈÙpGåT­‘d1ŽG–01œ VŒn¦Ù$ö;}j™Š25&–¦Òøí9ÌW ÁVÇ_fëÓ®HúóÚ¦­ö[as0Ê"¦@{Ø rNN+¥Ö–E@Ñ¡cÕ°:×1â "ßVЙ˜*Hœ¤ÆÆô'œ)é y¾ÅE®»Iq¨íñê£n ÛwœœœO¡äW£+,ˆ6 Œ2¬§ Zò»¨$µ»hfR®C××·Õé¾'µ´Ò-âŸÍ’t6¢Žû½ñŒ`zñÒ¼ãR²„©«µ¡ì`1¦å;-Ϊ–¸«¯ÞJ ÛCŸ¾Àÿ/Ò².oo/úMøÎìùAöcƒá|v#[Y_/ÄÒ¾s†¥³¹Ñø¦êÂêÊ%Žæ¹GÊíùŽÞ„dp9ÁçÒ± Ôfh㷂ܼ¡@e‰rp9¬áÇ,r{×EáK¦ÅÅ›‰Uvôè“ÿ|ξ¢NIAF2ßúì|î? RuyoÊ@šv³x¤¶ R¹Ûn}°9üêí¿… B ÄòJAF=Sùb·¾´My•quj;Éž±µ^‘ÑyŽ‘ir¶öñÆè…Õöoa‚€O<ãaØI¾Øîœu®Ì#­q1EöRâ̆ „ßËÕI>êsQ埩ô|)ŒpÅòIü_×çbï9¤&ƒHk#ôÒ9ÓÍÓ¹}kÐ~߭φ¾ÈJ´•—jŸ˜«ÁÔ–ðà{Ößû߱xžçO.;¨ÎÕ Î¿2óÛ ^¹3 ~× %ÕkþàgT¬áWåþGªQU/uK 5C^^AA*$p cÐu?…rÚÄ­"Ø0³ŽkÇÆTå¡>„·#þù¯š£…­[øqlñ£Ù­ã+!}á=E>UhâóƒÉ>crpþ»¡©‘ˆ3#;ž1ׯ Â¥¸ñ§‰õ@ÃN²Kh̬1+é¹þSø\P´µÉlíµ£b<ƒƒ_e‘áñ(IU[‘O©T玺­ÏˆtÛbAŸÍq–!»?OÖ²'ñtŽÛm-^ ‡$ éùšÍK(W©b:juP£  íÊ´ßQTÍ+KáЩw¨ÞǺíó…ÀgØZÇ–GV*¤;âºÌF^A×;r¸p}x¬eÝœR©)¾i;²ÌØÜIúÓM/ÖœjD>ÁZï|=uæèð`.c]˜^pñÆã^aÇÒxsQµ³Ãqu¶ò6‘Nã:t^¾µÅ§ÏJë¡Õ„§gÔ퇔\,T¾¾{}>y¡˜©U$Çü+Îf‘DeØ9Ï9®ÃÅ2tï,ûÇ }»ÿJá/É[`¹ûÄqíþq^– Ÿ»êÌêÏ•7ØÔ²Ö㸔$¨«!ÀÎx'ÛÓé[%•’ÈA8"¸0~jê¼1së-´Š»Ñr¬;{ÿ?Öº±4#󣚆&S—,·fG‹BâØ¯O›úW5îqù×Câå0j+³˜Â˜œgëX¶ËÃߥtPþ±†#Z¬y溟 í“LHØÄ„ÈW*N+WG’÷dÉiH 8ü¹«hÌúWÂK»L¹w¤Äq·={åøŽ¡§þF{¯÷‡ò§xIwi—#nïô˜Ž6ç£cü¿Ô4ÿÈÏuþðþUdµ—ú¡ô¢‹/õCéE1Ï÷ p^*ÿTõÞÏ÷ p^*ÿTô·n¿ñ*µm½,¥ÛÓ•ïoQÓ¡ÆGÏÏ©\\MËÉ3·<äæ¾·_ø•Z¶Þ–RŒíéÊ÷Ç·¨éÐã#Ï5k‹Xì¼ Š Ê?„cÓê+)ÅJ×-O”âí¡¸¸2gdxÎL²¬gÿ#5¡ca˜“}õ¼‡9eˆ–aúúÖl©,Àɳgcp¾üÖ|ò¢|0#»Ž3SS¥!G$ÏGÒôK+••äšb‹Âœ$ý9ÍK,ÞÓ/´ÁšhFdp7.qЂy=:ø`×1áOÉa2Z^¾ûVlï#,§úŽ+¨ˆxzܶvÍó4Ò¨rÇמ‡žÂ¾k,E ®5/nœ¶üÏFŒ©J<Ò#›ZÒ®´Ý@ÙZÉTs° `Ì‚}ªÏÃO¬Ñǧ\:ˆ§É‹æÇ—7ñGŽƒ?xëÓ“Yºö¶?ḂÞÖ+xÁFã1ÀÆã¯nµçÔÒÖf†VÄs>2…»Ö½Lª¤•)Mß~®æU# •9š~%¿ŒÚhž7šî(öÚêKö„Ú¸Q'I¹ÏÌßÇèŒ]äVS´`“Žùþ•ô«¥ÛüHð‘°»;u{¹dÛµ‰ÆPzê;q^Cuà[í ïuÔsüŒFãPöToª8%x7n‡èºÑ©is ¸|Á»i“ œ’§éÆG·Ö¼‚ÛÃWñí ¹‘Ńì0H¯Tðß„µ´Ä¹ÕƒÙÜÂÀy‡k™b?0çkz·SÎFI'XÅ¥©›iœ™Œàã'=?ýbµã ЫŒ|™`\ë:f™ŽâA¼² /&O|.OéïYïã]6k)¢±¼H®¤\B‚Žq¿î¡<ŽsŒŽ)6ê.f‚ r÷R¤H8ß#ÓšâüCâÝ7N‰ÐGæ+¯ß“*„DZü±ïÅyþ­â›Ôtšk„¹V*ÌìLƒžžƒð YV3:«YÞÀ.md81“†SýänvŸÌp2*V®Èm[VOuª[_-Ô^HÝ$E˜í‚`‚xܪ}:ôëX1f9‚8®•ü4¶­Ì}ªÅË ¡þëÇôààšÃÔ!û%ëÜPêHƒéÄ~èѦðõ!Z{_SžU#UJœF:qŠ>´RÿJû#È5>™uöMf …ðÙ}£ Á$ú çð¨*9F@ÏN+ËÎ({l,¼µ7õÍÊözKÞ«i×&÷M·¹fÜîƒ{Û–1Ó Õ“€ 8 “_œ5gcÍ”\dâúr~$ŒZê°](P%_˜);˜©Á'ð*? Ù¸×tëu?¿°…‹æÏãÓõ¬]Rþ}nÝã³±˜ÅnÞsÈ«¸„Œ°åç¯jÞ9ó^ÚŽ] ԫƪVHvsŒTrOD‰$Ps‚:ŸÊ®hžÔuëHî>×V„ì?1-þÈãó"º‹‡ºM¸ vó]¾Ü0-±3êä~f¶Žù™ún"ÒÔ¡÷ÿ_©Á ÿ2DŽd‘ÜíUÇ$ú3š[¨µm1à¿–;‹\0…—1¿Ë€ßí½ß®kØ­,m,Q’ÒÚ±‘Ï×kÇVFóòo/m"Ì%¿„çÐÅ¿à5º¡­ãb3,F'J’Ó±ÊCáH÷—»¹’G'$(Ç=òNsúV­®•ciƒ¬jAÈb70úÍG¢\}§F¶|Bl#v~ï>çük@u­RIhp6¸ßÅöo$ü••U‰# 6Ðø×gÚ¹ß[tø®YŒ2`àðªÃ’£ñ¤Â;™”ª8¥įê9Ç­;4†-bj ‰dèÙéëÏõ­¬Öf¥·zù$m+žŸç4˜âdfÕ!DI> qMyâ‹ïlQïÿפUU‰Èõô«ÖÖ­{y¼aw¹ nè8'úVDš¤dáwH~•cNº¼’íe¶Y7§Ì.â©â¦MZÌÖœeÍtuGÂòÅýÚ1<’¼óéÍf`rÖWø¶ÈÖŧ‰õP‹ˆ"ºÇrÿã½jÒøÆTvó4ä §…vŸNEy™nzê+dsln—1ÛÜ_y£¢©““Øzß–ÏÄšr¯ŸçFÄQ—,Ç$­X>'¶ºFK­?fòªUNíÊzóÛ?jZxƒL´Ž8ÒöHäªýž9U”`£>ƒ½rÕM­Y£!oµ¸¢24 ±FâdfF@ã¦zôþ”èüEp©—µ‰ýÔ‘]jvÊ-ί¹Aʵäè䜂$9ô늹k5¼¥ÖÊî)(âÜPp?å–3X8mx‰Í£“ŸÅ o'‘6Ÿs‹Ê¤eHà‚àÓ¢ñm‹æ%Ì_ïÇŸäÇùUûÝu)Ö¶´µhоa°ÁñbxÛëUŸÁ— `Mç *W?εTám‚2¾ì|~&Òä%Mà›¢uÇâF*äz®›7Ëõ³7§š¹ü«_ Þ£*2@®Ù¬¿{é*´ž¼fÉÎÝ?֥љWó:Õd|pG¨9þTðFp ü«ƒ}E%”¡‡q S|™Ð…[˘Øtf_ëPè-ïø©ß‚ǧ‡?ΘÊÂ6¥¹ôþ•Ä‹½Qªj2àñóª¶1NM{W¼¿:ÝÈÇ8ÿ€‘IPof„ÝŽÕ ðÙ'¾qMldàô=3\¤~(Ô?ye §ûÉ!_èjÌ^* ¤Mc$|g(á‡ôþTö ¤tE°­·!Æt`9ÀëYøŠÂDÉGž~dÏòÍXMcN“îÞ'¸—ùÖn2]4Ë»£™˜*’z±ÌÒvw<QQ¥Å´˜ò§‰þë‚jG2ùq~´]½ÂÉl ؆àŽp q¸üÇéQ³2® õ>ÿ•@òÉêsHv9¯O¾ê€lª–<ñÏOäk¾;¥ÐVþ¯peÔæ`ÙU;p{``þ¹®NîýD®¾Y'$gwÿZ½ì-qbÝ£nãÃbºF_Q¸™q±cØÃÉÏ_øë\ˆž{‡D¼ž0£šô/ Ù­†‘’Þs9i3Øç­qrµ6—S— ÔMô9ï.Ýb;À?™¬$]€jéšð’îÓ.FÝßé1mÏFÇù~#¨iÿ‘žëýáü©Þ]ÚeÈÛ»ý&#¹èÃØÿ/Äu ?ò3ݼ?•hfvÖ_ê‡ÒŠ,¿Õ¥ÄO?Ü5Áx«ýS×{?Ü5Áx«ýSÐݺÿĪնô²”goNW¾=½GN‡"Évó:ùÎê…‘c;\ã88úŒûW×Vëÿ«VÛÒÊQ½9^øöõ:d|Õâ-KJ½´ŽßOµ–O2Ou´I'•'ñ$çÚ¦ï ì­vÎVc"8>`9 §¨©må¸~—Ð*¹É­]/ÂÚŽºèðÃäÚ‘OâäôÄz×aoàÈô«g. LËòefÜÎáØc==ºÑ)(»HVÐäl­n£•fžæ`‚yÏã^·áx¼ë2ÒË·e¶ö,¡È ŽŸã\#Xý£SMS‡oš\ “Ÿr+Ðô«wN¾0& [”6Ý ðO¿«ÊÇT‹©ö»ü ©'ÊÙÊx©ÙtBççã ûð¯=±†imK ùCçpþï^âu'Caë"Œgxþµ“á- Mi4Þ\Ò¹ÌH‘àrIå?/¯–q§…æ—VSþ#6üâ ÛqÂ÷v+‡v ðç•ôÈç·¡Í{•Å®¡cå´¢kyWr9ÇOps^©i·zúN‘Knä>lü¾Ì8b3‚xìp8®oQñ=Õ­Œ–n²MËæ,RÊå¸9)ŒrË)¯G VêÝ Ä¨ÔŠ¨·ê{ö«ñÚdR˜.’õ£à´yA°H_»ÉÀÉé^Iâ‹Úžª$‚ÅÚÚܘÎ2ÌŸ|ôþœ\ÍÞ‘yªh0êR\K-Ø·óVÙcR?3` Aùx¶ãޏiÓNFìœÖ³Ÿ.ç4)óv™ã•¼ƒû7ZPð¾UfO›ËôÝ»;±êNzsÞ´î¼=6Ÿj·‘Ê/le9I¢ÈdëËqÇLÇë‚9[M.1]–‡}q£â8ÎësОTñƒ×óúûqX<\/foõyZè£ao ÍÓ%Ù‘ü©(mÁHöôÿ<ãhé¿c)€Ë•“<0ö?ç¥kI¥Ù]Û›­=J9<r>ƒüÿJ¯c<‰'Ù$Ù-«ç*ç>ð?Â}ý¹È¯k/£§µŸCÌÆTÿ—q¥Ø²Î¾j;ÚJ|·PÅCœ| ‘ÎÐÁIú}*·ÄMmP[ùq©Š2"·Â€É“Èà*¸Àõßõ'Ó4í#M²³K‹ Vè8*³£î¨$cÜd~tý{O·Ö¼#©X1R$ž2ϱV@K)b; ŸnݨÅbUDí±(ò5sçXÎPtàÔœúÔ0ƒ¹O#Šèt¿ø‹YU{-*o-€a,ƒËRpÍ€ ×¹C7£滕µþ¶9ªa&ê;lbãškaOµzž•ðjVe}gTP9ŠÕI$v÷Cÿ5Üi^ðæªaÓ"–PïnšÄŽüðÐ áÄgSšq„ROçÿÞž EݳÂôíËÄm;G·iŸ>ald§N2ÇjŽ;÷&ºÛO†ZÆ McTX‡ÞXÔ™J“Ôc…_Ã"¬…ÿ„_ã4ñ¿Ém©3myKy¿0 új6a^›^aï%©Óìã9%©ÊiŸü;¦Íh×r)?=ÓoëØ¨Â‘õÐ˧Zͦ˧•-%‰¡hã@F c§­QTßAžMà ¤²¸Õ4KŸ-n-å.Q9;Ù'ÍÜ~5Ûö®7[Œè_àš= D.ä‰0 “÷ùÔ9ú×eIl6ÔW6ñÞZMk1o*hÚ7Úpv°ÁÁú–Šb<·ÂÍ%´·Úm¤sÅ&æLäîû¯Ï *£ñ®’°uº/Ä ”†Þí„ ÎC }3"“Z-{<¶ÓÍe§Üܬ,د–¡‰a·-ƒœ©Ç\¤Ùtš£«Ä“é7Q¾0P‘¹¶Ã•çêF÷V¿fy5Á¦M­Å”v¦Y‘ƒ²íÉl„' q‘×#8ÆzŸjïo¦K©êUµ&G œqÜdgäúr›]A&PÓCÏëSöt3>é6¦@ÎXÕ€ÇRH­­CÃ÷úM°“VšÓMgIZ8e<ŽQ àmùFp“œ°à×+yâývî+t¶Ýg°eŒ[n@7Ç¡ÏUCŒà®IÃxï/dy®'’Gv,ìrKÉ'ÔÖni#UNRf„ú©bU¦ÉéµÀUSqq!Äp9÷aÅ: $†ÜÓk[ˆ”eÎ3‚1XJ²¾‡e,$¦ícqxÒÆ!\‘»oašY4‹¸ß2Ã&:îÁ ­t$Ú…ÈDFbÇÍz&™á¿éBñGÂ…@Úá3×*ãðõªŒœŽÇ‚T_½oCË,|7{u"ªÛ:« Ûœm\§'ÐsøÖKº›I ÛHïæHy@ú mÀ#¹®›]¸Ö‹=½å»ÛnÆô IÕø5™§I>›:¼`˜ÁË/_OÄtê9æ¡É^ÇbÂIÓçI|Š+eæ(HBÙö~'ö-óřʡFÚ»Ô‚Ç¿>ƒåãý¯zé­õK6*`Ò-щù8§ §ÔÜ*ÌÔæ¼l¬êP7Ë…|¸éòð3’p:õ5qQÔÆœdæ½Û °ð†¡pBJ­#¦‡¥d=µÈ!M€}GùÿõRº’H#ƒÁçµiéÓ\Ì’Ç12" "CÉLäö#Ôÿ ®~hKK¤ù­-™VÇK½»“ÊU1ã?4„¨Î=Iü?úãz Hª‚]UÙ:üÐr?õ{F6­ªÆ“ŒlPKg¦2{ðàFHÜñ¶uMm|R¬ 7¡8<SWF×±Ã^ê¯%Ï7¾·’ÊE-(…‘©'Ž0p3ßêj͵þ¯të­ÝôŒí6Õ''dŽO©™!»’9Ê2LžZ¼æ õÇÊyõâµ´‹+ZK8@V/–ÏÈOo›ó8ï‡Kµ•6íq;FŸ2ÔÈø–XÄEÃã¢Ï×v­Åzµ©ònmâ(ÿ–±°?^¢»µ]ÈQUqïëÁà×;­èïwqÂUbFÕobì\A^–/*§N“œe·sMó$Ñ^4>Pó´õfÀå&Ú?‘©ãñuƒ£ìçB…v¾2+ ¼;©"UBƒ¦ì©<ã¡QôD1 lp9$8ÿùþWÐëTÓ:3©ht‘Ç´ÐgÿA¢H´¦2)€}dòÿ™̵Ú3¶“åô\ÿ*®ìÊØ–_f:Iô¸{4v+¢éWªZ ˜Ú7?­M§è–֓ܳB×€¬lˆ'”`['vÓŽÞ+…]¬H'¿åW­5+½<¡\<_~ÐúŽÂ„J ­ÙÆ[T'M¸µ9ù™gYݸ>ê; Í:–"–M×ÖìsåµÜ°: n'œÕâ­aÜ4_(ÜÄB¹ rsnõ4³É5¹• 3¹,Åx-žÃñà J“z&k†Â{Vù’3ÚêËE×¥·r·1*¨.€€w.N2qøU7—í×76<ï ˜Ø ?—ͼqs<ŒÌ˜œx®ãCH¬ô»U…Œ Ã½ÃŒ|Ä’GøL{Šì©Ó…)ÓX¸Ald u†aÔ.÷“xýsIý©¬DŽ^äÈ;îz~•ÑKâ5Ç•sh3ÃE {ry¦6¡áI€€Æ‰¼íUH9úÇç\éEô¿Èå•ÖC™ži ÎYÏ,}IëWAÒ€G’ÛÌç’]‡õ®ŸUðî—•4Ö¨Èè7‚ÎÄŸ¨$Ö%«y‘mcÓk²3Òñg"í¢X4ûo´$qÁq7,j?ý|w®©WKÚ-Z1Ô £ò5§Æ£ â;ÕåI ä}ëžnïR©è´9Ÿi±ŠýO(vãØšàs×­zÇŒ7†eç$`œÿ½ŠòµQ–Ë@àüô®Ì$¯M®Æ8•i¦755“”¾€çxŸCOö:?÷Xèf'Ô¾]ÚeÈÛ»ý&#¹èÃØÿ/Äu ?ò3ݼ?•;ÂK»L¹w¤Äq·={åøŽ¡üŒ÷?ïåVAÚÙªJ(²ÿT>”S<ÿp×â¯õO]ìÿp×â¯õO@vëÿ«VÛÒÊQ½9^øöõ:dy„¼¡›6žX’ä†û³(!H9É÷Æ=±Û“ŸN·_ø•Z¶Þ–RŒíéÊ÷Ç·¨éÐã#Ëc×®¼3$ðZEÄ’¨*²±O¯~œg׊‡>F†ÕÕŽ¢ê×ìˆRÕ™ÈåÓŽŸ¥q:†¶×eàÑöÈÝ$¾õQÿºOSú}zV>·­j:ÔÇûVøIá‹h²ŽAú¶œŸzŽ/^ZÃäÛLñD£j,nEUzФmëÜ(S”Uª½;:fž–—‹ånvùšY›$¹ Ž¿uV· ¼ñ¶˜¤l# žÇê3šÈеÍK]Imf‰¦1aüÀ„°è0t66Ö1°{»Ûep7y>`.>ª9ü?ŸJù¼c«í¨ßK·‹VOCñROvA¡C.ö~é*W¯?¡©|/­Zi6¬Ò](e”“m{ä“Ðg¢Œðr2ÎxÓñµÅÕ…·˜I$lÈH…ÐBžsÿ\ÿë^¾[Fødª®ÿ™ÅZ^ûå":†¿â»I,­­R×OšL32—gÇ;Ks¸ãi*ƒør­‹ƒºtæµ7›å9tAs‘ÇÚ:ޤ„ñ^‘e§[XF€ÁBî=qéì98Q€3Àe™T¨oâ8w¯BñŽFj=YÁj>·ÒT-œ1%½º‹ˆc#åÙ;‰SžsÊóœäóúÿø­á}cHËÚJ<Ó rc“Ïp=ýòkÔ5û=¿ÚLp·˜@8çv?j††æÞì¢;ÖÚ_ аܥIêpO=ñíYÔ¦ªE©ÂNéžäaŠ•Á‚ [¶·2Ê@:šë> ÚèúL±Ék<_lq»ì ÷ÂxöD<¶Áà;®ø“í9†0ãÊ&ëÕ¸2ŸÀ/®|&©Ï[T¶]Í+âe(rÓÑ¿ÀߺñdZkyÖóÁ¾ú·ýÞ»ÏéêE]Ю‹¤a,`]8 ³6Ü€̬{`ñÜâ¸k ïçYî®ãgoYlgŽö«sx’ãGYì4[–ä–hŽ ŸºzŒdÞN8<ûÕœ§V£K²G•M(KÙÅ6ú³Ûncß;•úš–é§Jµ½º¼¶‰æ‰d1#î ž (ùŽ#§jÂÕõ¸/®×Ä>!Yí>Fm7L·Á–U#1‚rà 1‡*Iàq\„šŒúž—ŸØi·Ï,ŸkQ·~áC‡89³‚¼ç•̓Ք¢ÚÑ„þ)ób’K=>à±™ââ7Ž9UFͪÌÙfQÐuäŠËÕµy,vÿmxŽÞ ÄÇ%–޹•qÁ%Û&6¯#ŒóMO]×õë¿>ê_ßy;vÆ¡0™ÇÝP|téŽÂªÃ¢ÝÜí½þ§¥uÒÂT«ªG-\M:_7õØÙË ú4µÀ’)¦¹º ,**A9Û† rÍ»`TÄ^#Ö¡‚ÞØý–Út†ÅEn$rÙå‹““ÉΆ›áÁ(ò˜ígCÛœsŒŽ;þ5×ÛiÉk­ñú½ÁN ðèG?¥i‰Àû9KCžŽ`ª¾XFìà¬|#wu¶K§8?0SÛðí[‰¢izZƒpØŽh$þֺĄ‡ÚW§=j­íºù© ²xÉÀÛs^\´G¯wdQÒí4›•s¡@‡¾ÄÖ¼VP*íTVSü-ȧ[! ‰Sý‘Î*ýµÈ³&CõÆ98ïõý+ ½/kš¥Êír¬Z,G+„|œ€c ÛøN?‘¨.ü6Š®$ÓÙGq#`NÕÖ¨ÜÄ…¢!ò:ÿ³ÁÈüqÍV•Û{=Ã)ð@@vç'ç<ðkWm쎨óCXÉœ­žoa/™ 28ÁqëíùWSŠ¥‚0¢É¸$·ʱ|Cs} ÜoqÍÄ<ÅO½žr3ÏòÍdYjW’NÆxZ(†pP}Çzô(¹J)¥¹Í^¼œ¯RWõ;)u½#S‰WV²óA…`>‡vk‘Ô´«hom)‘âl’ müOéÔñZVóÄ„™c9}ÓøRÌl1˜–Ep~o0/ô§4ö‘¾*~ôu]ºêYÍÍå:©ûìœU8÷ýª_6#-£±räp‡O§céëïböý…Áû1Ø£ŒúÓ¡Ö%Þ©1%:Q“øT(£¦¦?ZQèwy‹ô¹þð~U©k¹TŠÆKE%÷ƒƒþ×dpqõ§Û-¸b,S>íÛ„j¬? *v¹D,#.k9ŵhؘb šrm•¤ÐØ\A"G&Jà©Áö#ùúé.µm^ÊCwp…NØÒ+§Úãœc˜½xÁ¾š‹>!“€Aý*¥ý¼——,«Œm ÐŒàƒžœôéúc:p¨™¥LMŸÏi_‰·¬±³Ë´JY©ldŸ­C-ÕÔŽóðÒ±ÉCÆ:ÿW¢ÚDû˜caÔg ÿ*“~±í‚,È­’ØqÏ~£üi¨OšöÔ×ÛaÜySVû‰bñ4pGûØP0]"¸”gŒ|Î\á¸ßM¶ñDM$Fæ-‚_cî>ÜsÛ$“ü«çKÔK{‰K̨…ˆbGeÁ'Ž8çÓ&‚ZÝyŽÚVdá·G£×¦k¹¥8òÉÜŠT©¯}?Äô¸õ+­ÌÁËÄ¿36â Øò={úŠÍŸ[ÓDÂ'•ŽÓÌË ^™ý+ 4Z$– i “í!YNÁ8ÇrsØqÔÖ4º]ËD³\FÁ8,ŒÛKsÓ‘éê+‹ê´ã{˜TÅMJÔÙèVÿa½OÜ\«€pówëP\Ù¤há¾e9PØÁ⸭/ÿµQ­ñ¶6ÄŒÀì ŽF;ägø~†zhÖÍ)>Išf9ù£ Ç ã§4£AÓÝ™žÕƒätfP?”·(Œ¿¾v:@OÀçõü{Ò-» ¬d ,¹À’ Æ9ãÆ´£‡tÝÜ®l í¶ƒÃ>dÎlš_^6,@Øpvôçœ`œàŸ­`ZÜ®‰w6Ÿ©ÂïÝaŒÁv<‡ô®¢-wÉ—"´¼b3¼u “ÇN¸9ÉÍyþ°—’\µÄîÎäæI=ýý:qô­({iÔ’šJ=K2÷u¹¸ðè—ŧû\FC’ÂxÈv=Iîâi°^¤ú”z}žXÌë 8œÀf¹%yŽÔPØã¥zw¤Ólár, ’á ßq(ùÃp¤FÇ8à¶WŽüóxˆN0n*ùU3:pZ+3gRðü{"7]”p¸ýó(ÜUTdÀ+ux=ùÝœ6Öô‘¥k6ld’Ær²G#¯§8< ž‡§qß"½“Q×­m­¤.§ý"&ç8ä+–ãÙIö¯(ñ ·ÓE”Qeþ¨}(¦"yþá® Å_êž»Ùþá® Å_Ꞁ6í×þ%V­·¥”£;zr½ñíê:t8Èð‹Ïµ¹·º¸]’9àlð:ô㧦½ÞÝâUjÛzYJ3·§+ßÞ£§CŒÔõW¿Õ*§\ð¥e>ˆ¥ÜƒU¾Ó㜴¶ñ’8Ý!Ëü[AÏó¬ÖÖ´ûgHу9߸ÜÕ°kJïG[Ì\Çl²1ù[!~Qž3¸€:Õ$²µŽIQ®-¡xÆJó¹ `ÿßU “·üs»Ô˜kwš’ªGau<û¸’ârÈGºàcþú­Ëx5t &tû(Ú`½ãÔgy£B´·ž/'Ëži'ÀWÛ䘱ƒ‘àúzuö5ÕÁáƒqg,vúsLËÞW‘²}†vŸûç¤h%­ˆ•N‡&‘¨\©.­4‘©ÝJ䢷_ºÇŸ¦+ÚüÅáë$u!„*=A à'ÞòÛÄr#ϳtVv¨‚AÎ9EG9$g®+”ñ/Ä ORµ[H¤û‹¦Þ?0Ævà·R1ÀéÇ­ùSKQ/yž½â/‰z6ŠÏojëx¼‰¾D òùëÀÏ#s¾1¶ñ=‡(©yÿH·ätÜž£Û¨éÏüí£ÚÿjM.n¡·Š%%äšUAú‘ëßß­]Óõ+7_»ms2Ù1h®Ù„jà³p>½r=kU½G ιÐQ¦¦ÞçÒš–¥g¥Y}®þæ8l ÓJß/<Þ¹ÈÔ×’kž2–θÒg¹EþÍÜ•T%d,…UÀ•ܹ##¨ÅyÞ·âÝOÄZƒl™µÍû’á“l0g¯“àvùØn8†k²ðW‡µ»[QzáYTO,aÕL£“ÏÞÀÜõ-]}?Sˆ³°ÖüWpcU™!•÷ùJ女ÃHç–oö˜ã$à â½:×àÄMáÇd- ùFN9=OÔ€q—;…õñ'…¼¥Û>—ÛoîaI$„0ã ¬|§ƒÀö8ÁÍsz‡Äÿ_I˜.#´à„FxÉ}Ç?LTJqZ"Ôt8ísD}Lq2K Ño(# |ýÇä qYí^‰âMgXñ6™$Zš‹™ Û6R:çhRÞAÆ 玬¯µÎJñ×50ºZ»Žm_a§'¯Ö“Œ’0jfy$TWvuA±9 2N É'ñ5QÎxö«$}¼ÞUÊHA*È=+ëëZðfrÒ™#ò&;÷éòäŸV7ü ¾E$œrN°ëýMzßÂßÃá}úÚúÚòx^ExVÞ pøÚä’G`Ÿ‘«OF„}QÍq ´/5Ä©H7;»U¤ž‚¼…¾.ê7ÓþêÅ4ø•ÇÌ/ÉÜ ‚1Î+Ë|M­jj2Ǫj3_Í ¤ÈYW?ÝÏ =…eΛ±¼°ó(Õ{3ßõоÒX¢]½ôª@+f»À÷ÞHR>„×…\ëÒÁq{>Ÿ,úmÜŒÞDsP„œ!Æ:W/ÍÅÓ·–¡T{dÔŒ2Eå‰ ,Fyô§}IT¤ãÍm ókµ 9öàTïâ R]2=?í“%˜ä[‡;2I9#¡9=zô®u$Zéü7¤lkZ¸>HýäØ?À:÷“…È鸙1F7g¢x@[}íÓ×d8;³„þO©=¾öJ‹WA¬ëLÓigò#!Û¿ê?Aë[^"ÕΑ£ºÀÊ.¥!!“žçÐwõ"¹½îEÒãÞ¦—%6囂0G=O#n0Aº2¼JÓöÍ6ºŽÄ”=šv ´Ðå’æK×¶`áˆòÁÚBcŸ±«ïád0]Äsü1¹9ÿ€ñDw·`—ýÓ8ã?^xëÚ–ÛÅ1­×Ù.m\ÜyžXÚU°N0yÇþ\÷¯¥‚Jrþ¿4x”©GxEýúÿ“54kY..&,Y†ÕFã#©8õ8žx«)JgŒÆ¨ÅQ Ïsǯ}½>Þ`°p¬wm ܱ=8úœÕ˜ Þ–™Îaò©%¶á¹<Ó§òõç)JÅœœ D‘üÇ9εâDÉϯZ¿âMÛMŠ×Q´ù`™¶´[³±Àì{ƒƒôük+Ížh|ËxS$àøTÊ[2Hš=.[B6‹÷q«Ü1Æ=n^Ooe<…ÇDÏ&¹©mu»…7*î¾X,NA©mï§Ö¯­¬ï#ù‡É¾1† p `N>¼ ~•j.(•%}F5íÓϹd;@ãŸA]$vîmÑgåð qšŽÛÃËky¹·Måàc õ÷5dN .é Dpé*`gÔŸóÚ¦-Çråil@Æháò‘ʪœ€—Ja›xÚèCdàñÜ~¼~£Š¸á2L Îù1À÷õééQ´AÓ$r:ÑJæn6ØÍ•)ÞÝEÁWÚ ˜5vöÓºBmÛk0 LÀÓî‚k@ £.ìr ÷>Ÿùõ¦^.§©ØKec V¨ÅY¶E¸í^Hnw“žIè>•2Г ’ÖÞÎco)š'…ö”>=Fy$g¶x¦^5­Ô&"í9è¸ä÷Î:ô­Xìâ‚5rïq#©,e…zò3É9ïÍcÏ6ž®D® ygåÀì1é\Ó¥ Êó:)שh•…¼±*ˆÙ. däcÓ$f©Üù!‡+”äã<~$´±Ã’Ö“`€3É_þ·àjœÑI¾I1·Í< ç$µµdî[ÅTJ̆ÖÕç+—‘†9ôô­ht¶¼™cH€lÒY,Qòç?…iÛ¹kØcVÉÏ9횥I^÷ÔÂUÝ­mvó@ŽÒâHæ@pÞP“ïƒMµÔÞ\÷üŒãׯò®“]c%Ôå¾Y¿ÚõãÖ¹}ZÖ/°M&pþ[AëÇ­i]êî‚o¶Œ»yf÷s4lvÂ#ßÄr£o®0Iÿ€Ö»oG $` nå#çÒºÔ†Ýt›y¯¤xÞ8—{.y'§99=‡J¥®hÖÒé¾|S:˜™µ¹ñÐ{ÖtÛJÌìæƒŽ›—í-d—LB£sy@íÕk¢‘bRâ ÉÜH»†G·áXɾ8Üô[[Gäï÷‹’r{{WÐvëÿ«VÛÒÊQ½9^øöõ:d|è÷ÔùŸÛ¥KCfî˜Ñ_¼–2dyˆJ°þò®;ìZÃf— ®~eERqîZêtÙ¥µBÞRyÄ`{ý}ªÚÙÉçG FòÈÀ’dç¯jƬ¥Þ%ÓQr´Ž»á¯ˆÑSLÕU<Ó÷'` ú×ÝxÎMb åÒeØ›Îx×2 Ç ½°;ãŸB:/Ô-Ä3K[‡•ä™WÔóÇã^ ê·Öv+ ç“8Q€É'*} #0ªu'8ÚjÌ'EÞ.èðëXžöëíwŠò”î’LŸÞg<õêOÿ^º9mô€ë«ë6R*© œçøv¨lçŽÝ‡N t¾"Ñc½ºŸì¿è1:†hÑwÜàÇËì}úqŒ}'BŠÖýõNí/æ…qn1†1çó뎽êU"µ›±¶±"»Ót‹í-[[¶²Ó¨¹²±%ÌÑ—Ææ*T(# 9?{ž8+RÕ5FÓŒg²ŠfXm­”Ø$n˜õù‰Çl^—c§iÖ×7:µÕü—ZÌÏ»í· æ2U\…à ä tÇ©¡kš“$’ 7’îiIiå#,I<¶g°éQN­=ÓÐ%Í7®ä^ øY¬I6£Dà‹uïþñïôéÀ®ßX?Ðô›F{pä»ÉÁD€ìI<öZŸ‰á9[2cû®ü+RñT ªÞ}–;™/d‰b†?/pèHé×'çšÚU`å²¹æoo¨' À0œ=pyãšèô/ Ú´)]uj¿`Æzöã¯5—§Á¢êPKs¢ÝÉÌ¥~GëŠÚÖ¼Všµ‘e¢-°,‘åÉÓh™¬UHAjõ4䓨äµ9mÛP6ÖÁ\Fpì9ôü+‚ñU›Yj³Lí‚VÞ .g’°9ØW¡ˆ’7i `n9b:çëPÞ[CynQ•XtädïùW<+KÚyÊ”U?3ÉRå{†n7°h½ÅÂÍÎÕX)ã¹Þ?•t:Ÿ„ã †ÞÒ`Í’|¢H?ψúe¼d€ò}23ü«±M3Ÿ¦÷¬iåZŸ3f¥}Ãwb ¡Ü*ÍŽ¡¬Iq#Ú»™¶’#\Np£S“Ðb¬Ûéi_.ÑÜú¶ýU×húîª%h£)ó".3‘ÐØtõ¦å¦…F ™sl6ÓAÑžíå¾p¦Y¦bT3ÿê­3º¡†x¢»Vvv2 éŸçïQÃ{e|QšS­ þ§›SÒ,˜]®¦' ä>½ãÓyŽS–¬ûêT¨R‚ŒV…´ ©Ò(Ï–m¹û›‡ž½ q¾$;õ‰”.0ª1óÎk¦µÔiÉgv yyá‰eÇA‘ʲõ¹$’öâÚW2,NÊ¥ŽqƒÁö®º^oSç³gìãËN>ëg9kù‡šõ¯hæËL7. Ëtwa³Â …ãñ'ß#Ò¸O èÏ©]¬K•V9fÆv¨êkÕµ+Øt=¥DPÄ%ÇÆ/ÀVUê´Ôc¹æR¦­vr~)Õ"“\2–ŠÑ6¾;™€`1íPj܉µU·¬rÝ}xDZ¬}ÒÚâ)o5wrTg-#w8îF~œšÕ²¿K[³´R4Üì>r¦Ttå-`E}†QRµ (ó/¸ùüÊ:µuvc“–ÇÈ%‡AÛŸ©ÿ>¶mDþ&tÃ@žR’˜(yÊä~÷C‚ ÁT ©Í{oäÀÊ$RAùUr0~~[aÎ'Üsή—c¿½1ƒ©ÀÏ$äþxÉì4ótêSäœyS#…TçÍv]3dUP¡P‚Øê3Ð~YüÅkÙÙ\|Ò¿îÓ8 z‘ëíÏòªz4p4¡dŠïí-óæBs‘Œ‚1ÀÎ{ ×Wy m˜ÙÕÛÆÊ>_Äñð¾ååÜìÄ^V‰—gR½ª•ørá~èìãüõ­¤…ciÇ\“Y—7P@®cg-ÈT ‘’pH=x®úµÛØâ©Ù-Ì錩l å‚´ž}±Y ¿<0íŸJÒ¸Ô‹íˆÄ¨¥·mœóßÓ˜æÚxöùÒFÀp]2 ü9ç­sâ¨TÄOššÑXz±¡OveÇlC©g'õ§ b2²=*6³tfó!`yÂ>Hü85EË 1ä`Ž:W‘V•ZNÒV=NEt͸¥6ÚtHŠQœ–lXdãùÕ{¼3+g–7Êr}*Øxãµ…[tca1©\’Î3MŠÞMNð%ª1Ü:1àzœö+]»‘µ+œ½ô,­¹¦}jM ,dÖ-â¾Ú#làÁ dg×é[ú„¾µÝ¡zä©ù Fòä#<åyǧ=»äUâŸ5·’Úm¼øä3[yªO§+ŸÇùV–»5rV/\ ¦˜•äO–òªç°¼~U‡}âM?BxÚWKÉÀ2 }ø'»zuéŸ_Ã¥¶×¾E™i ºIÙ ±xË~8 ŸÆ²ïÃw¢F³ðt¶òH$y¶aˆÀ%Uˆ÷©öK«5ÎhkŸ‰oRkˆÚ8—å†,óúwU,IL“ÿÖ¥ˆÃÝ]_Bè×[lpòéoÊ‘ÈÙ €õô©µ U®FNÕEäãדúš³u§Þi’3Í ª$»> ôÏ9ü+õ1-ËM7ÌÙ'=˜é\øxIE¹"ëI6¬kAaw"³À‘Çòe|Šǽ,SÉewÔ 'Ù?ÂíÏ®*н[Ër`bw‚«ØƒŽ˜öÍ@ûà…òØ'’€€á[Å™neê³ÝO5ÒHcäîF7øwª‚7ÖV+vp±1ûg'Ïlœ~´³…I<Åᇨ«ú /£.¾Z•ÝÆãÈz÷ü¨©&ö**Ûšzº´Z%÷—ÁHX‚yç_W”6“rÊN<£œý*î²¹Ðõ¤î?è P¾„Í Ð¢’ žý½=ê%OcZsµËš:¬ÚUºü»ž9ï+¤°sö87}ï-w'Ëéß¹´±“¦!Až¤œü믳+¬<. =¸W‘YYØôº¹n'ýÚïÈ9ëØW'âiwêbåU2 ÷ãúWYæEåè{œ×¯:bD\áÞ½¹#ùÒ¦µH])Ê¿ñ+ õhx ý5ãsqšö¹T¶Ÿî Žqþñ9‰MÀ?sÀí^¶ y/C“¬bÊÃ¥ AbÇ“AõÚ÷9#±õ?„—v™r6îÿIˆãnz0ö?ËñBùîÞÊ—ÂK»L¹w¤Äq·={åøŽ¡üŒ÷?Qüª„v¶_ê‡ÒŠ,¿Õ¥ÄO?Ü5Áx«ýS×{?Ü5Áx«ýSÐݺÿĪնô²”goNW¾=½GN‡c¢ªÑDÎç$Çóéõ5îVëÿ«VÛÒÊQ½9^øöõ:dqפdº÷H6¸GÍÀ§çñ9%Z⓱•¤x0EåÝêNX¾#Ž@TŒÉüMtS[Û[DŒ„RAÚ0¹>äŽj½î›5¥²ÜÙÅ:¨MÌÀ¯¦~îZ©¾5h-ã•qqVL.Èè@íSQƽŒÒ”žåõ‚âX§žÖÚÛÎvÿY°mù~ë`ó»’;qõ­5ŸOS籕É=±é’8ÉÅooDw¬ÑBq@¿ýzš’ꦩ¶Ó¹rïÄ-wä7Ø"•™›w˜8Èè=¯Z³¨KbmRêk˜Å˪ ‚FK·`’X÷vÚE#Kyq(E$´ArH®ãÐóŠÃ°ÓnnšP)h9y&Œ„‚w_¦k{õî_<ôg§¶¯!û±;& ‘Û¨΢¹Ðµ+W|k$g†(ÿtžs‚qÁ§ÇrÚÇÛÜÆÌÛ™7œØ O·'Ò’ïÅ7ÓÆD~L¨Ã‰ŒF<û¨$ŸÌ¥gÊ–¨äua&ìô)Gvñì%xRyüª{”Šîè©m»†W#©#§ùô«V×UÍ“,¶m ÑDç Àc€A?‰÷õ“K‹Cº¹RÚ˜%[jªŒ1CßàƒëÇ\q]<öјA§ª+-¤ .L;vð§ùÿ"žÑCc"ùl~sŽqÓ<~ þ5ÓE§ZÜ![T¾@Švo‰ ¾207Œ`àóÓ­`x¶ÞÓOÐÌÂáæFòÕFzäçÐÒœ&§~Rª7 e±ç÷Ò'Ûæ ¶i÷g…¶Lõª°{l¯›u¡l‡yØ »§ ¤qRHÕNdÞéÜ}®º]&êÇ—WPµŒ.6Û{ ޳6áŒö©ú»êzpÎ`¢”Zù§ÃGøR‚±¬÷‘<:rá$ùZé»>‡¨àêFs¥y®cº¼”ÎK³×'“ùš‚ssyxy¤žV!WqÏÐØ{ èe°[ijÒíÎc,¨ò/]«¸—S¿÷=iµÉN:Ø—Šw[~oô·c¨ðFž«¢ÅvcØÒ&2üŽçó¬ÏêO{ªÁ¤G™&*)Îç#ìqÿ¡ìmµh<1§ý½Wlvq·—Ê‚v•Uà‚Hæz~¨F§s¯ê ÒÍq4Œ7ÈÇ-×8?ê? 0ÔÕIó±V›‚åFûÀ-ž(’|¨„{‚ðy$ç¯v=i‚÷€‚رî}óÀÿÄÌó½ÎËXœôu$7§\õÀÆF iéúÜNñÚ˦¢Ï) ‘Ï1i >|nÉAúWØásxa¨òÊ=_*µ9”·&³žKk¹›iTl¤Œ3×!¶œ÷Î;¨­ë9wºF8Pw1ÏQüº‘Ǧkšš9£¸¸‚âI"”ŵHQ RÛ‘UÌÙ8GÉÏMá­.[éR$y§$~U®3ÏN WżeOkk_c¶/a[š#ç'k¼ÝÇãúþuÒézjÁ*L|ù@•¾Uïœ3îGÒ¹ÛxÏ–§n2:U¸Þ@»®Ð9¹iVQw–¥Õ¥)ÆÑv.¾£'™$W«¢ï:0Æ@õÎqXڽȎ?=críò Ý{ŸÀc·­j@–ÊUgqc*¤ž¾ƒüýzž'ŽÒKT‹L–G?yšAÐäp8³úWOÖ¥$´VLÊ8uõÔÄ·P„Hÿ3žHíôã:²·¦zšçÖþXØÇ.23Ü`úWM£Ëg,E^0äLˆOqJžÕëûu¤ç¥Î'I꣩`F^ Š 9UŽq#`0ý+PÉöfÜã¡t Ï<Žqüê±·H°Ò¬„p†üÇ?y¹•XK–1w±×‚„£ÌÚµÈÖE‘•T’¬~aÛQVT.ÝC®ÖÈܧv⦲‰p ¸SŸÏúRj%Ö$•pU[caº2?‘¯6rWØôc «ÜϺ‚ÜíwMì9Îì9ý*ªUG>•vÖf{…(J:ô#·8þµnïJÁæBQ¤', ãÝ0zúÑ [s:”›z*ØÀµ “ÍFÕà“÷G_ò*[mæ¶´‹óü;ŽyÕtéñCˆ#,¾ó~„Q?yhL‹³ k¸„JÒ‘’p¡qÀ÷?Ó5?ؾ͸FÌUÇ9#9ü*X$?gŸšD\ÛŽ9Çéþ5"–“‘Œšî£‡ŠŠvÔã­ZNN%Xâ}å[$¯O\Õ€®Ì HäÞTídÒœ.¢Çœþ”JQŠÐ˜sNv–Æì~*ÒŽ.CÐ~é9úZ–f Ù]âwG ò£ õÁÿ?…aiÞ¼Ô.t&$FÁv ÏnÿÒ»8ô+kaGŸ”‚Ýÿ Ë–M\ô&éCK˜r\$ñ=ÕÓ¤P£„•É9ÏÆ>¢˜²ÛÌnå1I+3ìrd$ëŽO¿n3RêšuœE™u ÃtQXŒÀö<ɶ´‰ÑÖ;ʼnݲÀûõ«žn ݺL¥5Ì–…a7’9šHÖFË0Dz-'ÃÏ"–ÌU–?”;pÇ‘ƒÉÑ®•¢›‘ Ø‘àåÉÝ‘œƒ^má«í½~v‚â[aiã’݈*}‰Ágä éµÝXÐ N—bãåòÊOã®w.ÖcÔPiÔJMPœ`Ÿ2;½.ßBµ’h粈…É"G<ŒŽ£8ǧӧ‘ü@Õ.'ÔíV[uŽÌ+IFR ÜÈœð⶯¾!Ë 6 ÷IJ2ªd.y Ý8=¹à×!âi¼G¥Ãæ3‹«9L¼WÊ“o £©Î=>QŸSDsO±uçA¥«em>â38ç§5è3ëZ|Þ¸µk¸U¥·x—qèJ?xÆâÌÕFOåO™ÕQ6M9f8Ä‘_Ïq®¾m,yj;Bß;+„ Œ<ÌŒ¯©Œœdêk±ðµ’[G6¡7–ˆä¢1~gæÁ=²F»žõÁØE%ƧŒ ²ÈWrÛ@ÎX‡‘éÅzeâ[Zh²Å*•¶Š"Fc=O{×&W´{ž¦6×C—ñ®¿ìpØZ³ø’\ñÏaüÏåXñMs¦XK (~ÍE(@KÜònaŽ›[®N6ãŒç\Ý,ÓÍzáS|‡dJIü=€Èäõ÷çj×HÇË`ŠççE_”ޏ"ºèÅRVG=Iº›ÂÎì¨0]Ø*©ûýk¢´´“í1Ir<¥ò¾S´’˜ü½H\œõä‚W0ÙøªõY¢¼óŸ“Ì]1ƒÆÖÈôÇÒ®Yoºýã†y¬Í¸…×¶1ojÝÔº2µx-Ì· ¬çÌ”í\•õ<÷øWufE¾ŸäBî†fùœ €`¡ÉãÛÐ×3£D#IfwO-WnüãäõGCëVî5Ø €-«,ÓÄëӟϽc&ï Yu:š+p¾l‘ '{“PI|²H±[Ê›!CœŠå¢i/%{©äbø`ãÒ¶´X”Ý—9 o¶sÒ¹äÕùz•¶ô.Ïq(”ÆX©vŽ År¾#ñAÑq ^òUÎÖgø¿Zê5»(g|¸ãj‘õô¯/×Ú CÄÒÌ›•`ÜÜžzúÞJ°œ[•îhxoN×|K5ÌöÆÿí'Ë=µÊÚ¨Ïð!ÜIéÈÍSÕŸUð¶§å[½ý´ø!žäN³w ¿"‚:õœƒ‚­¸·%î÷:§tc¦ŸŸk%û ˆ•‚(—kHûI Ï¡$ã…R{U+?Hë :…‘·çŽEpÍ#²ƒ÷>òãrdœ°j¦·â» îÒÎdx#+»‘üÁó:©Àc“Š£ø˜Tº$pEsm¬Ë;–œy|ÑÍæLÄulž¹3¾3°ë/w]ÌeYÞëc£PÞ&'¨‚FGýjs0Œ çð¨KíàŸ|[gvE@Ã~FG#‘Ú¤iâhC‚óÔä1íšÏ–qwèjå ÇÌ™%ŠÞÌ‡î± ’2@ÏäU‚6ÈÃ8 `Ö=ü±Ö8²ÿ6òpqÓÌþsO‘Ť{Ðìγ©Ž3ü¾˜¯C[[Ižn"–œÈ³4˜€ Üg¥P,3‘‘WÌJñízÔÎFø×¡ÓCƒ®¤pœ¶;f°µû±çÛÛä•}À?ˆ ÿ k^IþÌ®å7Èð þueôÛMGH)ìYÀ}Ã$‚ŸC^V!FU‰êá)Jp³9;DU˳`‚0;}kaJËŸ+,³Ís——K¤_5ž |¹æ¸ÙþGØú÷­Ë;ëhìÁT,ç¸ñmXÀßQ2BmÍÀÚCSòŒ‚O×ÔÖ¦‡¨^Z±Yã¸dp&@ ÷À`Ø Ôwå䚎ÏIŽIŒ×ˆ¢1ó*7 ŸjÚŠÖ ˜CGpUAãbü¼qŽ+*µ|¨Úo¶mÇâ+qníöÛSå ÈfhYý´ô${Ö%÷Нu(ó¦KÆŒRU$?QÁ<ž=*/ìÇ1ì ¹ȨaK2äÊÃiíSr\lU·2ÍtMÉnN gƒÉüqí]"YD¢*ž@ÛòƳ H–FšXŒ­»#¿¯¯ ݳlI0SÆg­ËÑ"¬“*ZÏ \ŽÙÍP+mEðp0¡~a1\*0a°í8ä)‘kºm*)ÕÔŸ-}+Öº"´3NÌ›Ia‡‰Ä‹¼Ÿö¿x»}šKVÙ”'õçýk€Ó‹¯‡%$ñ…9à¿uv^¸ó,›€6¸qÓbû×™ŒýOB—ÂmÌ«ö7(ƒ zôæ¼ïÍà»ýæ98ÍwšÉM"Yvá¼³Ôc±ÿëWTñ€síXÑÖfˆr†ßæçk~jóÝF(þ×q˜Q¿xÜãžµßÄp±3Œçpúo¹!€ýãuõÛ…~û2¬½ÄbMohx0²û†5ˆÙ[wÖóº%Æ}cyr¢*²·}ýz7Ðâ±õ„—v™r6îÿIˆãnz0ö?ËñBù®~¢—ÂK»L¹w¤Äq·={åøŽ¡üŒ×?QVfv¶_ê‡ÒŠ,¿Õ¥ÄO?Ü5Áx«ýS×{?Ü5Áx«ýSÐݺÿĪնô²”goNW¾=½GN‡vöÞb‰$ÈL|©Ó>æ³-×þ%V­·¥”£;zr½ñíê:t8ÈÞÎjA¡FB¨}Râïl¢Þ §dúû~4ûË‘ik$»K•RÁGSŠÃŽI"$3°‘Û,åÆ ÿë¬jTQv ’[ÄêáÃ9q†Üz§JçmZÞ9.ƒ êKsÊä7°άÝ^Ê¥-¢MܤˆÕy8ÏÞ<ôïïõ¬»½OGÒ,Þ9Ĉ„yhåË0ìÄtÉëŸÖ”j_Þ•’AìÛøUÙBÓÆ­Ì wo ˜ôÄeV Û¤*z¸22=úãšèõ›Óm@Ø•þè^Ý9?Ó×ð®×óÝhÄßyf”±‰xXðr8¾™íïVî°emìO5Ž3”9)½YÑ…ÃIÊõ•qöwa¸žìy¬Ÿ+t«°€KpOAï]HÒo/T†>ÆNâ:Ö>¥§$µ­¢¹h3/<ü¿L^*ÂÕrR’²¿SÔ–.8´ÙÔ¦©a ^e¼o0U Ò*€¸9b29ížµ–|_f-ˆº‚á÷1!¼ ®r;ž g¿QL¾¼‹ìfÂÕ]Ÿ1^‹Ž£Ó¶+–ÔGŠIgvmœx}+Ð¯Žœ]¢y¦¥«;ëxl®bK:Uò™ ¸úéï\D Ö$³¸º»U[·Ë$o&ýŒIÉÏpF1žqŒÖdžæ“LÐD;‚O+ ¼ û“Žã[úNª·=¬„™Ì¶së]PÄFv‹Ý¡JŒ’rè!ðµŽÝVæÎéÕºyË6AØ9aqÆ?ýTxÊþ CR‘m£ péåâ*¨9ÏLçhǧ9íίˆ´-Q|[4Ò»,wr²,.N6ÏB2GÞSÛ×sèWƒN°i.§S¹‘·2ÇÉèrkT”žä^ÈÃ²ÛøsQÓRÓuü×¹HGÜßóÏS·{5gÆÒ5ÅÂGjHœ2»ƒ–S¸ø ~9ª4ºÌ÷Ù‚Òyî­ Ê0‚% ‘Žx³.¯µ5˜ÙÖXæ‚Må\ðxÏ'°V®:Ý ý£Àúv«X3O íA-üX¯Ê¤Ã-ôÀ®WÇv1iÚ±ŽÒÜFÊwÎqŸNþ;]¯‡|m¡ÛÃsm+4Iq,$›BÍ•¦ÜuÇLW3âÁý±-ôŠÑI4¢(áH[v1IÛKô¬$Úšy©œ;–'¯^9©í킃pÂä"s»ì¢EüCV\ƒlΠ‚àŽ„zÕÍ2ÒKûØ­cá¥lgÚ;ŸÀdþ×{+“Ë®‡{à-%£óuy—u+ T˜Œp9c±SIñSòâ‹M\|àJçÛ ž¿•vpGk¥é¨‘ü–ð ]Ç’¨'·jñ­Fê]WS’Vûò¶p;и)þö«Ÿc¾º¤¢Cj[bª "˜Øôçq9>ß0« Q‰ÜC…2ñôþt°±•\ $ÛYA‘â¦ûtQ‘$hþf1–¸ÁùOå]ç vm#Å"‡ yjÛweñӈϠ9úöv;pcŒË´ ŠädõztÁ¬Ï isj÷Ïsu¼Á lqÎsìFmI\¶ü}ÒÇžœÿµÅgA:G ‰$ùXïeVãŽä~?­t'ð׈o-ázuÏ‘Èóƒû¬·ÜF{ñɬox?U}NfÔô˱ ~w‰‚n 3ót8½F~”·Z’Ò}M -d¹2tH”}òx?ášè,îbP©ƒƒ¹€êju¶´±‰Z8cÎ2ÇgÖ™ Š,;±“ëXJ׺5„TQ}3JO$±'ó®7[Óoö9,ã’IY‚*"嘓Àu'=+ÒæÒ~Ô¦dtNA={çž* Ê m~ îñ>ëx¢Œ‡sØã±ã=ø­©ûÍ$e6âœ4KÛˆ~K¨Ç!{ƒQ-忣*[AgfèŠIÇù=kè›íJ¾¶yu8­Þ%\¼—J‡Ë^üœãëõ®KFþ̹°ûNš©ä3²¦"(8>˜s§k#8Ö”ôD¾Óeð¾ƒ#ÊD—·CˆÎD8ÎAo^zŒ»×­uVŒ/®|Ø|ˆÉâUŒã¹ëœóŸ^µ€Ñÿ„€ØÎÓŒŒÿŸÊµôÛWµ»~så£n7b®Ôç ^ä§8Êû…YpÀ¬?^\Á¦ 0‰q{ˆžV ,0¶ì’[»ÜàáŽFsV´›Y^àê·:›\Y7ÊP’®®HùJŒö>˜â³5o k·7Ú]ÅŽªò²ùGÊ”©ÎõtbT©Ûõû«€9ÍpQ £7/¸ô*ɤ‘ÎØxjÃQ¸†ÝÉ‚$|—*6PÄœÄ8rH d‘½ü«Ø–š>Ò›x¥@ë ¯Ê·Ïsž y5r [`4¹ê16é®§',$ûØb8-Èf8, p‚¤¼½k ‚°Z[Û@ZEYwn.§æØxÆ1·×+ª¥Ô,ºõíæaN¤´{tî@. ‡\ûsXÅr³Ê\ŒHÌ9Nп1'ÃÔäU Ji¯ï–;h”[Dâ@x/×§ùéW&—ìÚD6ž\+s.q"Œ¾ÒA?1ä¯|tåü̹,t´´7W”‰IPO ç9?pާq-ýÍÍ»·iTÚ1œãŽøÁÅzŒöI}‘1C!°=‡>õæZž‰qa<‘KTd£.rG§Q]0nÚžT­} 6‹ÜCA¾LáL|´ƒ1ë‘]F‰erí'Ÿ¤!TF›pTóÇÓõ®'LŠx\¹ Ž3“ý+¨]WX´Ž0Tί„ùH;ºqÇ$ýi¸ö3ÔÕ¾– .5žxd(N Œ'©É¦{Óæ³·Ô †XÊȇæVSÁÈëÅA5ÀÖôÏ.IM½ÌbEBràqׯà})4}-6G¸K‹€äÆ…éŒ1ŸÇ4¬±çOò(@ÿxfªJ¨§ èËÇçTuMfÿKÔž);›F0†ÂÈŠHW¦~ð8äãÛ‘z;˜îÀYxÈÜ1‘N0wÚà·)j°Ë9 䎸¬­&T:]“¨çÈBFz¼*èn¥ó-Ü8ŽŠsÅs:|-oclêÀ³&F=ãó¢;õ¡Ì¯ \&âGÚ ‚OSòž1]ΉÇf‘òäü߈ãÓÃhV†}Pq»&áœgåé·Ôz ì¼=rM˜Wo0äÐcÐ×—ŒV¿©èÐwŠ.ë³I‘Aùq·ú^ÕÉ8çžãÒkî‚ÀÜï Ÿô¬ÈNW?FáeÕè: Ëx9ð*óMR¸µ×ï"B ÃÖ½96(à¼uúÿõëɼWâkÐHôÙ†_¼hƳµ;‘®¶ùýä(G·a5›f*7Aݽ+óüCó£g§é]ܨãægÔÞ]ÚeÈÛ»ý&#¹èÃØÿ/Äußò3\ýE/„—v™r6îÿIˆãnz0ö?ËñB7üŒ×?QZv¶_ê‡ÒŠ,¿Õ¥ÄO?Ü5Áx«ýS×{?Ü5Áx«ýSÐݺÿĪնô²”goNW¾=½GN‡V:­†¥’Ê­Ïâ:ŠÍ·_ø•Z¶Þ–RŒíéÊ÷Ç·¨éÐã#Çô› OM°y ·Yƒ³]Ä–ÆyÓƒšÊråW)+žÇ­êvöòGm#Æ 8sÆy#<·§|ÖDAît‰0Ì Hñªã¸\íÇ:úùþªÝê÷–^B̰¾7m8Y=·ëÐí!Ôš]Óã„)UP9ÏnõÏsËšC’²25Im4é‚Ûù“ÝoÅÅÖÞ@ÀÈàð1ØzT–öP;rªvô±©é2j–0Û¡Hãv #`ð:ñøâ£‡Â:|R$çK°`,’?*ή¥IùT«Ò§NÝJ~T,Å-°íœ88Î=¿Ò´Òš1æÊA˜}Üä…üI£9.À•#¹h€Â»z€Wßמ9«üî*?kK>g«1«‹“\±ÐåuI¦³Y$–óÜŸ•¼ äÇž>nNÞ¾µÎ{F‰¦5´“Äu) d`;¤¼{דÜË~¾(ŠÕçóÕœ»G1t.@#¦zêEtz†»öýPÛ³"(*…!À ·Îp}O5ÎiÚjjºÛBDÐÉ´„²ã<€OSŽ£Óæ»¿Cx×ráðú]Ou‘c”â8ÛPôôë“×ÞºÛoÚè:~¡«#¬énŽÖ¼ïPUÌ=IÈÇ•ÉÛÁª@Ò$n²ˆŸn÷Àüë¾èk-¼úœèÜ·• zwfÁöÔ}9ñ¦Ge½ª*<²üˆO“Ç?zõ¥¥¾“¤Eo Ž´@a·É$Rr~¹¨ÄVå‡*2¡KÞæg+ã}U­4¸ôðTM'Þ €wöÉü qm›´oprã>ÕkV¾:Ö½4ŒJÆùXùÀQü9ÉÀõ<÷&º&Æ)­ ‰c†7„*ÜËngj’6ðs’AŒ‘[P§É6eZ|Ò8÷ î‘Æà† ìú’qŠ·§ÚH·K, ,A””e,g‘µH-ߌƒùŠêãУ·žYdž)¥û¬¯@¹?{åÀbG"¯è6KqwƈüêTü®0F§^r;zÖ×±’6“û?H¶Žßl1É´–Š&,¹n¸ï·$àžÀWià‹K$°¼º‚-“I YÜ1 ´cœœzjáõ‚{шe¤PfX³…îsÇ8SŽG8æ»Í"çKÒ_"=Aãœ.ö•S䯇†ïØñŠ”í«‹–‰ó¼™#ÈwO™ƒÉÇOn½Z…͉×nQP1—'ñçüâ¯O’r¢02d$mÛëŸN3XÓ\Xßi·Z\05Û\AäÌìX$h냖àîÚs€sÈÎÚë­Üå’{= ˜tOëÈé"^ˆ)‰'ܱ7ÞÁäóÜãò««£i¶ÑyQØ€6aÉ—Ó’xà~U7‡<9c imŠ™ Jìw<êÍþZÙ9Óõ8õéþ~•E¡sçL¶¸àƒóÏvzîõé\¶¯ik¦Þ³È~D*Î0sŸ¨÷ú×quköXæ™æEŠ0Î^FÆÔ9$ñÀ¯ñ׋¤ñ^ª,t„±Ä{À ÊsÇÐrpÔóÀâkÚ;lu/u\šû]¾ñ®«ƒevðéjÀüƒŽŸ‡ 8ˆ‘q!e?{óÓøxÏ>Õ¨ý¿L¸[Æií•1ºhe cqœrK*Ý¿xäÛÎ|Åþãr?*»ö#ª[繎2vÇ#’"€@àt¬ã;{ÇT š³5tùEÿ˜×7\ls( D¬ ¿Ï’Œ0ËdôÀÙ)i‰£’õnS“ ùF Øòvú×µsZ’;&‘PE+ž<,˜#‘xô¬ôÖuXlg²GäÜ©I?tmè@ådyëÓ,BÕIŽ ÊÓIfâ[½_\“\ˤPŽí»8Û’~£#¯Ræ+ûmU$ÔP£NŒoF1ÓŽÜ{Œõ¦h•¶’òÉ,nÎÀÙØsœóô«Z浡 Ko]Ù’U—Ó'ü\©+óu=.K'´.Ú§¹\ ’¸<öãõ®²Xcº€Æ¡”•À#ŒQ^m«,3¤…ClP1“Zx¿QWSŠ(×’¬7>çÿÕZ§cΕ · —K,×OÄ‚v0‚p1ɽ鋪›_ ê‘4;ÒòXc*ÌLzá°yút¨ÛY[™D“À!sÒBr3Ç%O?©¬½~{8ü9©ÛÚLn|ø•KH›K6åcòöèqô¡^åUø,ÑÁÆ ÆŒî'šw—¾&s2)VPœsÏNØÁ縨t땺xí3R9.H {c®°ëS2M"X¤U 6c^yãÿ­]šúÎXõËgüýk»ð¦¤/m ´ºKvýÂ>PºßAŠâZÝa€ÜHàF~ãxÏ^çÛëÒþév—ZS^Ü%ÃHÍ·û 6qוcÿ5X©+ùtÜksy‚ÒY )Pä‚3÷x=êÝ“âÞ&‘<­ä†¢8?0Ï×<ûæ¶ ¼Q¿È€éYV¿f6­¸y†Ye;XqË·Oý)AXÙ)AI íÝÌk3$±8ßµŽ1è{uþ]kKOµ\ÍçLv¨!XŒòOüûVªî´¹‘×fÒ4rd³è9ã½QKÆåü²‘¹Ýõç8â–ǘs·Ñ´7 Œ:€ \ò8={ÔVðÍ+®æuPÜrsПéúÒ]Üy—¬Ì BOÖ•Ÿ”L{R¾¡m ÑåM¶…Ýü×ÞK†Úèñ†ëן|x¬ ëYç¸2‹¹|×àHòƒÓ»c×Òº ›ƒ*¬Ä‘"©^õ”Ö¨ñ8ýâð ÃcœÿõÍj!sI|5‹±j›c¼ Õp$íÎ8Ï_@sÐVžžÓËe2]9ó¢rœŸ¼09ýJǸ³Û«£ñÅÇb;ûsŽsÆjí«¸_+/œH’Uçœ`ôãù ºsëei#¬š5›”üÅ0_¾}ë"Ö1öË/PUÇlJv•­Å{f`–p ÛÓ#Øþ=)m¥C¤Ç½²vt?§ô¡¢nZÐï#žÞp€+ vç“Яã]“oi6¨ AóϯLq\Ž‚|FþÝpÁdS€ÙäŽz}+ªÒÐH®I9 ŒsÎOø×އvNÄ~"TŽÞ§%ŸwäþµŠÊ?Z×ñŠïj ícÀïÆ?­cÄÐ;âRWý¡\ÔSQ7¨õ/Ĥ‰#æaŒýkÇ|l»®ð’îÓ.FÝßé1mÏFÇù~#¨Fÿ‘šãê)|$»´Ë‘·wúLGsч±þ_ˆê¿äf¸úŠC;[/õCéE_ê‡ÒŠb'Ÿîà¼Uþ©ë½Ÿîà¼Uþ©ènÝâUjÛzYJ3·§+ßÞ£§CŒKKWÑ­,#0¯«°'pñéøö¯`·_ø•Z¶Þ–RŒíéÊ÷Ç·¨éÐã#ËnMž´ŠY&*9iC랿ҹ12QHÖš¹£ Ç˜¢&œŒmFÎA¸=ÿúõ×ÚkÑírãï× es Ö”›Ìã ž€ÕKƒyf›éð2EpƵHJÈÝÓŒ–§±$±ÜÀ R£)©ò¸äõ¯2ð¦½5£G¦Î¬KÚÄð'ºIüK5¢‡Ø’!'2ãùWzÆA/xæxi_C¨Tª<žÙ5…®^YD²Au¨Gl¬2A‘Tœvçê?J»¤ê°kIu!]AÁê3Yþ"ðõ¶²°M!džÕüÈÝÏÐät8­äÔãäcg yøfm&q+Ù_Gpf<,pËŒŽTàŽýk¢Ûòjàü5àÉ4íhß¾¢Ò:±%yl÷'<ž¼û×  €yÅZŒ€œ§)7"˜_ÞqÇ&­¦Š­ï cÁ'¥Xé‘Ò¦Åh‘ðÅyqM(¨§´ó èp==êµÔªˆ\œ'4¤ÒWŽ'â6 ÖÚ/‘ «Oqsû¤aÒ<÷'ðüÇ=«†Ñï¯,ôË¿Çd ă>vwlõôö=kªÕg}kV £6–Ä7 X±íÀCø{ÖÚeÕÆ¼n­-VâHT9VÈUÇ*­ŽIÏÍŽ:\ ´œÜVÌëŒWc-àe6hQ.¡R 70à*n…gs&°×Iþ¯g–qÉlœ’=z~u·§øv[¸å»ÔDðÈÎÄÂ͸¨ì7wçûW?‹lt˹m¬–IT! È0ŒH/»¡#ŽÝ¸ÓÞÙÊ¢–½KÆ[[he3f”Æü™IóÆO~x®'Zi$°–ëhe¹¨;HRÇ%°}‡ùæ½ÓóøŠ8ná– ·ƒÌ0R$ÎOVà‚OCéŽÆ·±_ø¦IEk];që$™ùŽN;àsèyÁ§J—³M°©WšÑ-x+L–½•OÊvEëžçòãñ5§ã{ÿ±ibÎ3™.>óÐø{zô5ÓØhÃFÐÓrÜ"Œ´1ÏÌÜôäçÚ¼ïZŽãVÔÌÖð¼°±Æê£$9<ö5„y§SÞØÕò¨Ùœd‘®]¤L‘ ˜ö â½ÎÚ!qs'"”þòFó.XÓ¨ÈÎÐ>îj¼:9‡MŠÞ%fHÐHØì½Ç|øššÞ+¸%T’ÜÈãi$À€Aɉɿ»ÕD™Ç(7ªÎ"·’ÞæXä‘%%À;ɃžIç×/CÖ·-¬â¶æpþd£v\s‘ÁÆ;g·ZÌM.ãW»†µZ‘¹ãAÄŠYG;†FìsžMhkRÍifÒÊ©,w;àª;˜ààµnWVF|¶!Ñô××5©™Iha@@Ú9' ÏR1Œg*Ê ;+Ù®u)/áŽÂÑÙ$>h;GÌ è=sÓ¦+Ê`ñ6³yhÚ‡c‘I“÷žYFÜA.Ê0ATàœåˆm•ØøKÁCNs&¥'Ú'™•¤ˆñ ¿/N2p1“޵²f´yšiµRêýÒÆÞÎK}•Ÿtˆ¤]ßÂ:®HÎIÏ àu=JÝ[@b´O*4Q€WÃëY%¼Š+Õ·©òcÆòpn¿¦íÉÎkAÅΡs¹ÉS8ˆœr2@úš‰U•´ÜžD÷Øô(B¬;AXƒx>ãð©È#y$eD@Y‹ÉÍrK«K¥"(—äÉ"'üÏ=EyŸÄo‰ ­¦é¡ÒÛîɇ$NsÜqò‚?¸Vu¤ Äø—ñ ]vàèºC:ؘ ÏbÙÎ0;õ=±sÀövÚ‘yà y(ùÙ²F==3È?P+šð¶„cþís+r€ö÷®»;E;+Y»›÷~LÎòÀÈ\ä`àO·¦=«žú)¬r³sŒãÿ¯ZVÈÂÙ¤Á € 㞟çÚ«^Ù,wqB?{<ûA#ƒ–8úÖo™= \­]CuxäYF²3•Œ2@çÓ¦?JÝo ÜEa/ÚDlè<ªÁ™I ŽÜ ¿¡h²Ãt·R6|³?/¿={ÿœVõ¥§úw˜Yœg’FIãéJ4×Ä÷ª=–ǜړirMŻʊí€Ê6È@õ#=ÁüEkØêöqÜÊ ±1 ‹=zŽ1ÔôÿëUx 5yÚÒ,llN3Ž Ç¥fGxÚm¼“]ƈ̻òX(ÀÈãðŸÖ²•$åvkí=Ý þ!1í„ÛN­„¹Œc(@g¸êk #v ôï\V·ã{½B팻‹ E$dg9,9ÏÐÇ¥sépu(ïgšI%W Ò3±cøîõZÚ4;²Ö7’<©\õpÀó‘I¼zîãö¯>‡Åß<‘†òYÏîYÙ”mÅ™O~Y¹5ÜZ\Ç{iÌG)"‚?¨¥(r—Nº©êY<çš|k“Èã§ê5Õ®‘®Gj"®*²ih#N¥f]®e ½“žÂ´zóÚ²5ÎáÓC•ÏÿžiËc(©Kc–×4de­ˆBÜ´dpµV²]~(|‹kÉ¡‰A`‚ðF£žˆ ×wm³P·ÃGÈAóBÄ,«žO~Fi&Ól—ätÉ(\$°b±ÏåùT³Z3Ó8›]2÷T¸óïgrw`³¾÷oǟλßjsh7i(ŽIU‘¶ÂsÁúçŠÅŸÊ¶ Š/-ÉÎ2Tþ ’qÇzì4Ù!ž1è|°»»ñÛüúSö’nïaÃÜwLÞºñ|“iækK9<²2Îy`=¯¾xô4iZÍ•ÜA£ö!ùã—Žã§Zçšù4}Dà y–ò @8\ž@ïžÿž”Ú°1K!IA;‡CMÍ-e±U+Tª”Iõ;Áq‰‘Øá†@RãñÔõ§~µN]AͨmÌÇnHaþ}©í43"½ÔLPcv2z~µ˜gß68ÀàñÅD«EìÉ)ßTRšÔO™m`Üä6ø‡PIã¾20=»d×µ¸( Ç'åÅtqÚØKwIÇîº0~ª³éг¼ŒñÍž’´Ÿ÷‡¯ÐúQÍutW-·#†çΈ£+o<Ö‡u`P6X ¶=h¹¸2‘"ÇqµÓ©êk64o´´±Ì›“¸sôÎT]½ŠVŽå¦,¡¾c“éÔW3vŠ—M*9ØrAëÈ'óÚ¶o'šdŠH\:¥vçŸÖ±§Yæ›ÌTÎð>ïÇòéUM;Ь¢Ö„Ödý²ÖdÜ7J ÔpJÞ¶“ÌÒbfžNzŸ¥fiÀA{ì‘‚£Øž3úÖŽ’ª4$P2:ƒ×8b+{œŒnŽßgñ¢î¤¡1îÁÁä5uúMÊ\LUBŒ¦ìnäGø×'¢ÄÓkúdh·F…›$áH<ôæº}Åíµ“ P#òÚ'ï/§«‹ýÓ³ Eâ6 ©$ÝŒ=ë°}É­ËækÙQBƒYfhóÎr{àâ¹h¯q5¼j["eݹd @í^mãH‡ü$×EUˆÊÿ!^k˜ð’îÓ.FÝßé1mÏFÇù~#¨Fÿ‘šãê)|$»´Ë‘·wúLGsч±þ_ˆê¿äf¸úŠE­—ú¡ô¢‹/õCéE1Ï÷ p^*ÿTõÞÏ÷ p^*ÿTô·n¿ñ*µm½,¥ÛÓ•ïoQÓ¡ÆG•øªÅ%‘R ÝK‚"d.:þ•ê–ëÿ«VÛÒÊQ½9^øöõ:dx¾”³Ü¼Ú‚ &”M¸Ëc°®gÙ}ŽŠ 펓A¸ŠÙc7NJ *€àS4íVä\®gž2ULŽON+e®.îäìo èÓ\Ö¢RßT?¼o0±gòÇ }3\P”¥+œªÚV‚¢ÿ\ó& HŸ1ÙÀ˜­ÍF$†ÞIæt\!Ï͸5çZ>¡q.¤ïjÌ›H Tí$sì•mjwšÌb‘•®ÖÜ_Œvüš'I¿vÄ9+ÞåÏ ø–ãJr‹¼$ä¦HÛÏAÛô®­üy§?–N$/ =O=?^+Ía[ø”ÿ H‘ãÎSж#¸1ª´-nãÍ`NÏr+²š©ÊÞ†STê;­ÍØ|j÷:´ÒÀŽÇ• “ƒ‚O§9ãÚºý Å ©Ú &UYù ˆyö?_Ö¼öGK±µkKGÀã¥?Þ8É>Ùý*µK¨-ËÛ¬–›° ÁÜÝûcßž+N~Eds¸©§ý§È 1±ÆxãÖ‹vÖšW˜„'’~ž¿…p:=õæ©d_R¹’+yÔeD9 <Ò±æ=>×l’H&V '–ÅCÆ>^¥K©% ýš¹ßGâû9%Q¤è²FT¯ãÐô=k›ñ­u’ÉËÃn&$d·û ~?óÉó&[uŸeµ¸ ²;ã‚ þ?äU½3J7Q¦£ae4ƒåÈdkg$.3“޽}ik'ÊRP¤]\­}pî°[,1 2I±_ VÛŸ~²|AℵµHgrQÙYÊù©œ¤½y$Ž3Û–Tª¹hJjÁ}ãK¯hWvzeÁŠ{¶]´ß¾@ì[ dÿw€s•­ð³EûN£.¨ñnŽß÷psæÉÿ€©éâ•ÃÜ\\j×åäù§”€ˆƒv §¥z}ÔÚ.g!PoîÎ 1å›=FONxàWEIÊPêQææ‘±ã«ãk¤ùaóö‰hU±·»ÓŒ`À…ch¦’bXZàZ‰pTy=qž{g§SÞ¡—L¼×õ+$y  ‘#Ê«ÆI>¿à¥zn‹ð»L³³ÍsŠ¥®dç$“ŒpyÇà îïTéI§~¥º°V±ËÛÛ®¤RH5þbÁV7Ü[=Oé“Þ´®l ©Kh‰’iGÊÃ%s¸è;gœ}®·]ð¾‚,§¼ÕD¢FæwdÜ8YÎ Úäçæ¼Nc¨¶¦¶šúâ+H¦q*D ó.Ìù@©†ØFÓ»‚JÖ1U.îv^'ñ ž€ñ¯Û¡žå")·8D8•ˆÇÍ÷~Q–ù—vÀCWžÜÿlxÒóOˆr«œr£ œpƒ8ÂŒ±wrÆ™Ó&·½/u<Ñ…|½¢.I Æ1Ï¿é]½—‰ ‡KKwÓT‘ÃY›Ó“š×Ñ®³5VLÁ$`nÏÆIcŽSÆ­bËaÔae‰.#'*¤é\7ˆµ›$tè–8+#ÄvùǺŒuò{ÒQNW°®í¹¡ãµÝÄÖÖ¬¾VâŒÑ¶|Ìq…?Ýã¯~ՃὮîÖîñNΣ#ƒÿÖª:N—q¬ß#‘ŽôÅzt)q ŠÀ‘X§PÉ‘ÿ}1ý?!Tív"½ÝØäTÆŒJc€g¸àTK%ͼ…ŽŸ$ƒ¦"H<÷-Œ~¿…,·«$Œ’Ú^Ûí†bg_˜dsíG1i\ÕKÒå,mßýHùIáØœdžÜñÏô¦\¶ûø® .ce`@üxöÍfÙÞØ´›Ôj†$€~˜ë[Gö• ¹TÇÒ¥^÷F”,Ž‚Ï^¶,¾j–FE‰-l4÷Xçc4«´KŒÔ\õÇåŽk•¨Fêàž JÂÔdŠ")eß· ñ’8ßW;nÆ isvKŸ"Í {XËÊ•`qÛ¯L~ÎøžÖoì ™$ÎçQŒœdLþuÐX-´Ï .>΃ ùqMñ ¡¿Óç†!´°Ê‚{Ž@5:§¨§=léÇ~ô•zöÕRñ‘›ÉpØ`À}ñUŤ¤dÈ?ôÐ,×AD=~•é>³»ŸCÂG•ó °½ë€··¤Q#nÿe©ÿν“Ã6Oi¤Ç²8P>ï··¥eVI+8hI¶×A?²¯V9 m§8ä@8Î*6&0c”*Hù†+¬ƒî°ûÌAù}*¦£oæ¼`D¬ÎN>^rN{qX)¸½NÎER.ýbYݪAõÅT‘7Æ}ëgUÓÒÖÖ9á*rûYr8Î@:~µ‡#†Âþ8¯+‘ΫB B±Än²Dž6Iƒê)‘¤÷W…üé³mžA»·BÕ`Häe‘¤#,s’OõÏZ½ …cæCŽ=>•\–ZÒªæîÌÛ{%ܪ§ÍÔ•>ü÷«©$±2ˆ•˜Ÿîç?¥:BÉ\éLÁgÛƒŽœt5ihgr]bâIVÉØuÉ·vHÇòýiÖ²…Œ¤ G¸ç×8¿ýu4ö¨Ï¸ÈT)éIÏëúP½Z6TÚùâ±n6±i=Êwº•Ò̪Ó¯*ç¾NGó?Î¥ˆ–äžsϽTšÁî^KPÛ@ƒÈÕ=ŒÌJÅp6\tö“e.•ÉZšŠ÷V‡m ¼ÏÞzš.ÅT`‘PyÒ2d·•3 ÜP²í\dq\÷}—n¡‘"ôÇ´É´ùíæË¦9eíõcNr%ܱ›±Ó¯¿Ó¥[²#•ꣂsüDãZ馧¡åU©y»la5Î8>õ · ååÏ Éö­ãeõ¬ì" ;gccŒŒãê3ýkÒ33¼w‡cc•ýûôä×\–†|ýGCÜ9¸—~3¸“Õÿ¯ãW4G‡!Œ˜O6 <ýó×ü÷«VéÓ» ?‰I 7>£éúU;(üŸƒ‚VâfŸ9 ÙÆ:zúçšk@ê17öŽ¡±™b1Çãž½Eu º‚øù“¢’?•‰þ-ÃñÆJâìf{¿^…ùvývžp6ž¿túe܆H¡2¤Ím¿68#v1ž&¹1)¸Èê£dѦÆ[ù‹ã9ç¼f¨¾äSvg?–jìÿ¼¸šBÝXœc§5 „‘Èô÷®(%®uIó6$?,LGMý~zå|hOöü›q‚£¶k¬@Õ›†Î:W#ãWZ ÿsÌ×FÞ¹uû“ðGò¤l‘‚I§ir?*õO4úWÂK»L¹w¤Äq·={åøŽ¡þFk¨¥ð’îÓ.FÝßé1mÏFÇù~#¨Fÿ‘šãê)v¶_ê‡ÒŠ,¿Õ¥ÄO?Ü5Áx«ýS×{?Ü5Áx«ýSÐݺÿĪնô²”goNW¾=½GN‡W¤Íw¦Y½¤vÑ@"Q$¾x/"“ŽŠ¼‘øgùŸT·_ø•Z¶Þ–RŒíéÊ÷Ç·¨éÐã#ÌX™<éËÇ ãæePÓÞ¥ÑutL¯l©+´A=õÍÍìÄ]JU‡Èm”„ 9äðw{uëÒ³.<ý[å‚Õm—Y Ùúœf¬M®^-ºý³`HVØ2ORç­g_=Ë4o!PìBî9ÀÉöü*>¨¡Ô>¶åЛO²{{ œ[޽Í^ŸX·ûKÎÍ`ÕDr°çúÕYaÿFd–bʨ†$¥QKRÖ¡O»$nIÆxïRáÊk*üý,mß_ÜÜǬñà ³ ˟γ%·Ôžw’E''’6ÿõª—ÚV;¤3Å(<ìy?Ð×im{£bÐK’ɵò+÷2r{Dæ|1¨E%ÕÇšpè呃‚p8ìrGå[ú—ï]aTÆâ{œÿú«×láÑoc’Ú\¤q“÷ÉÇŸ^õßß*šY¥gÆ@˜©Ûéíß­g:.mI2áQXêSPû6–±ÆòHEU–ä·à9ëØ çu{›P¢Î»äXJ²F¼dœp['¯^>˜–Å…Ýìàæ9"(ÃvЙï’@=ãš[[,î^˜^8˜nÜNNb1ùºc•Ë94¥m ¿ô™&ŠÞi¬(Â-ÇvÂqʃӠ¤`ŸË?•7O…l4‹kXc_8ãsçn¹ã Àã8·mtDÔb‡y'ËÊ‘ƒÓœuÏü+‚üósèRWÐÔøq`¯¯Á1»’TŠ'2ƒò$‚6#ïŒò¹ïŠô/øÇKð­”’]ʯq³rA»ƒœ8;W†ìIÚB†#ióëU|=áf±°ÀԦ̶ʭ—œ–P © ¦í¥²Ì…~Eei>òõ(uoM¥©œ¸†|¼6å”A?; nrs…Tõãevr¸JîÈrÛx›â}×ö…ýÃiš".øÃ ¯2mééøë]„í*Àæ×Í J' &±å‡EòïÜItãÊXá ó÷w`ýÑž}Ò¼¦êÅ©9\Ö/±Æj±³ÙC)—o ç÷-œç§Ï~zV[x÷r2^¢ݹY‰ vrIô±ÉÍz6›g,°}¢ñÃÍ#n´œÐ{~=k#_×­PÜØGpm „ùwz‚ɰDÌ XÔ€IrFÐJŒž£åÆš•ªû:ÓÌéæpWlñ}eVÖâh¤•0ag‘ ÉÈÏ–2ÍŽÓkŸ[ÝD%Ì–Ò1ˆU#!BOÊ»[ÃTÖcÔ!±’×áÕm­Ëã®OA»–är ñÇO´2…i£ $"'`vÆ1ÇN3œW§S )S§¯vgR©.yœF“w5„a„Ÿ2œû÷Öâk’Fë›r˜êÉ -Ÿn?­uöä¢>Ë\îÎ 3dqŒõ<qQKm¤^ÎÞY¬RÌ ªÇò9?Lö®¯»hîûÂ=cc ¸5E´ HY"Ûò«²a±×‚;Ø×·tXî’;­Øx¶´O®â@ÇçZ²jorÖ–÷YË2H.çŽHÝZÆñÕ_óŒg£kò:TУY|Èu‘—½HǾðj§êM檵¤êؾYB8ù·JÁ Ô gaÚ䩟¨8íéW‡‰„F/>ÚXĈH9ܧ8 `d_j¥Sûßx{Ñ}Å•¶Ô¬îãÓŒ£<ªI’NIÈQüû})nµ;·ýɲž&`rÁwclõ8¥ƒÄ¶.$?hh¶ŒéÔ;gÖ­A®ÚÊÈ>Ó )à‘F}9­.ÞúœòÃÆýO=Õtarïº0êzÛ9ªñxFRWlä !?†EzÊ<$±1£©ÎpAœtÎ1Y³[éñ6V#,Ù4ϯª”žÀà‘çz~—ýŸ|K$hþf²Gqœàr};×qäÒMqØÞ[À0™œuê3øàc½X’Â9[w™"žÌ¬nÙÈ4+-©}Ó‚Ì@Mè8>œb†“Üqœ£ªÐÚ„†'¶2:šK’\‰˜ÆóOL㟭fEuxªq‘Ž…e*O¶ÇëLþØxÑZKµSè¡ñø)'ô¬ù{›J½£hõ*k¯o­p¤L«óX\~uÍM“Æyöí]uÆ©oµCÉå´‡%\n>œãšçäµóß²°† +h;nqËS5 ±ç>ÇùV™Þ¯!YXž8ÿ8¨ŽŸ2/Í€9'üzw«Ég [4ó\!›!{•‰ÎzN€TÄ‘¦Üç®qÏ­oéϦÚé’<±½o—.Ë´/r§×·ã\«‚7à‘ÐŒã¯lÓ`¾wR²34YùÿóúPÐ&o]*,›G’}ɪã¨àb§…þ߸Ãcæ‰a0'™&UW«\’NæËTgÝÌöêìˆÆO,cÈÛžÃëŸóÖC=µåªÅ:Ü8`¹Ç¿çTîï!¸PÄ|€•\³gqéŒäÿÀŽIâ¨ý´‹'v[?)ÿgÒ´•d“3糺6­¬D­äÚê2¿—÷—v[¦xÝœåSÜØŠ/1å.‘ÓžƒŽ;W/< âbŒàéÁ>Õ³§<“]³_daTz€WœgŽäÿ‘\óÃ8É;èSÄI« F8Âúp §<Ò ”fùüO9ê+N-ʰè}{U[(~e,çœôéþqZGCÈí¦ãbÔõ=+œ¥¶žD*9rÎ ƒžsïÒ¶¤»6QI(oOÊÞ¤û:W6D×$%ÙÛs“è=O#ó­h¦›e;v÷FfdÚ0Š2ý ò 2Ýn%ðü±ZŒ?Ú%,[°Þ óïBÑþÏpzá¾ðµt쾓0°RY{qÇ«VÌý)š/ÜFUBy3¸à”ã?¥t¶oö[£rŒ$fQß¹ÈV”#D²× W¶ÒË&Ó²”“.W§PpA#޹ÅE§ÞÁm4òܤ“NNÐù*7c$:ãVî{öü¿¯ZΤ’êtQkf¬>12–âÌIØ6’ÿ€ëÓ¯ãO‚ܽз`Á°O®Aþ\}jÕ­¦¢¦4Š1±°•k[è2Ûî¸pß½ÉÃ!R¼úgõ³FÐý”c-‰gâ'ÖåÒl¥¹šåÉaò¼’z Ià2zWE¨øÝt‹X¡,®õ”%f¸Ž `ˆ´mÎ|ÆüßsÐ7!¹±ž{‚Öå­DØûFÕÿZ*¬x$·N2r7Z Õ¹`DoƒÑŸÖªHòØ™EÞæî•¯è®òÜë)©K{!æhÝd'Ü–çëëךî-õoßC½µú[°þó)Áå˜`óï^6ñ4GkåO½*£ƒJpSøŠŒ¹uG½ZYé6Q%»[ÜFr¦]ÊÙìySÓð«6Ë&‹dò%ý×—$+HÞZ(äásŒuëϹÍ|þ²2ãkzçÒµíüK­[³P€Æ’œð#¦ŽwVg»§‰u_²˜Ñ^B ¤S&0IÈ_lõÅsú注5Å®¡vûÂ\)|¡Â¾à0 ù~@p3’$àc‰Ó¾!ê6бºNF>f\1ü¸ý*{ß ë7¬@‘ÆÝÆ@@ã’8ëÇžüå* K™IGsº¹ñïö ·Ð¼?A©NŸ<ÒíXí" ó>Aì=†8èòØëzŒ1ÂÂ-O#ÈÞBµË1?¾r{±°v§s¬A¡xCì·RÏy­ä9–R<¨*0 1ò™U†@•>µ×hvzI­ˆ :*Ž3Óÿ­éZZMå¼hŸm;d*X( s‚{ÿŸjâžš”žÇLj{7y–¼ÂŠ¡°_ÈÏÖ™0i"$mŽEù’F&½#“ÚöLéÂBœê{Ý ×³¿ ?»Ž%bßf;€ì?Z給Ӯm`–ÖÞâ9Œ ïry2A€P>œõ²Ã µt1‹±f°ô9Œc¿N=*•õ¤î Fíæ•د``^Iî8­0Ø©ÆiÝ3Ô©JœâÓG==²Îæ]*â2~[yQÙÊî%ºzÅTM.ÒX’D¹–ÞåÀeŽò%NH ÇæïÊÿtûWKª^3M­‡—æÜÈTJ²çhLvÉžÇëX3ÚÊçí7m,žw+&þ­Ô“Iúpkè¡WEíÔó%…Œ©6U›G¸³Ü_[[i”Iä 8èðý Moi®¾EªËt€óüÄ=8ÝœgØUS–P­žu 9Á¨àuô­KoY^é‡R‚9­A¶\;ŠœepqßÅl§ _S àê§dÓõ*Úx–ús$hÊœÈx?\ý+AE{E?Þd“ÁþuÛjaFu[Ù•[…¹‘]p:|¬~8¨ïÁ‰Zg³µ™•Í2…\÷ÿU·{zr;¥Z ÙL©ex•iSû™¯ˆ´ÙßgúBÕçð$Õ˜o¬d-*]Bª~ñ“?ž+—´´²Y?Óìïí¢Á&kiEÇä¤gÛ¯ãZ±hÚeéì:ÛÛ‚H ©ÚIvp˸zww›ÛSÓ‚îØÒÜ x$M¯’7È9ëŒUK»[v6[XÜÉòîe8'ùÖφõ3óÄm.ó&Ð¶× #õÆB/ÏúVT×ñHQÞpéÕY‰?‘ëô£­Ð½™ÖMgj°¬î"@:‰#'<ç#½SŸG™æC¡*”·š‚MÃðÛüÍQ‚ãU–âH¢·a^éNÌàà€€» ©P@=qSÙë.sö¦·e·5Ž»~éëÓµZ‘‹¦Ñ[Vv´¹ØPäíl©üùÿ"³…Û îöòà¯G=3ŒÕÍUÑö‹„š9 †VVWŒŽsµÁäc#8*GQD§º7’Ì>P9ÈçÕJjÖ%Ó{Ø–×ÄSZ¬m¦DÀ?½‰”²û`ýNi—Ú·ÛXJ¯µmò„ ãžÎ*E·Š{y›@9 ½Ïn}9çéYב‹i~ÑsÉ`2Ùo˜äqœuÆO$ ÏjµfîCºÐt‹1Æè~CØ ãð¨’3$™”áÇÇÚ–Ö_9¤'l2 m’Û»Œõ?Z"7lº³1bd!ÉãùÇsþE]ɰ.Š9!ìþµ¡§]On†80¬ê ÔžßΨE é;d–Äðî˜=ë»úâš’¼ $Ÿ1~ðŽ\çè;{ÔÉ] ÇAcwpãË”È8#‡¿?ëK%ɹ…ÕhãÏq“îåøÖrkVë°˜îQˆò î0I­}NÞ7Rn-ƒ7Ì«4›XŒvÖrÓ ¬@ïö¸ä»eÜ ÷Èç#€ªRÏ­ãVe‘>Va‚¼ôÏu5¯ªÈa!R‡ÌnßÂ=zû~µÎ[á|ÆH$8ÆMU/…²]î’%Ӥ𠯒5 2‘½¹Æxéë‚Gãô­]5ÜiåR¯,€í=·iR=°ˆ ÙêÜÔvCoÚ´Èxê‘䜓Çâ•VåÚÅ{R¶úÿ˜¶¹È# _Ô5&kˆIÚwn(Ù€Ç9ç=+>[ÀAÃÄÑžq‘´ñVî4ˉ'¶¹,†1løqÐ 3úb²ºšÓr,ÆY²dϺº­ç€_$çšE‡Ë†O”ç UsÜ•M- Ó]Û9+öpQFvï›ë†­‰|kw.‘o§K6ŽÝvÆÎ¬Ì¿LœÝ»W1ŠF\ŒRnú1Ù#Nç_Õ®Š4—²nOºËò°üG5,’Ï+I,Žò1Ë3I?Z©#Éá¨[ÃüJÒ‹Ñm$qÑ¿ ·ÀÆA¬å¹…Ï$©÷aB·Ül®jeã#N·vsÎEiÛY@îJ9ô5Î ÊxíV…áFXXΛ{3hMu;{K%S¾ 28Êõ± vùÉGIPWm¬Ë #‰ÛØzWAiâÀ&Ù0 \W,¡V§Ng_ê2F#¶šÆì’±… þ¾Õíw3–¸ó²y'w× §‰-Oõ‹´à•>¹ëšÚ‡S´ºˆbEÏSYºÒzH¯d–¨Àºx‰2£ ¹ïXWiÅÉ$õ»É!²»VªäÇó¬;Ýþ©¤TÏcœÓUô!ÁØómJXã$zVOÊr+³¿Ñ¦2spA¬É4›…sº¸5× Ñµ®a*otaŸ1 ã<Š Ò!ä)ƵÏk„Tod|ÅÌ{wŒ…<9ûqúVŠQdZh¿á{«Ý3Íýž"7cøÛ²SëŽÞ•ÜkZ¾™¤iŠ÷öÐÝd¾èsŽ;vÏe¬]hñáYp@VéÈïëÏéÇCXZ„÷z•Û\ÝÊÒÊÜn>žƒÐV2£Ï;½•^XYn,š¬Ï%Ó¦w@K` Pz8œ*HYr»½1š«övS‡ÏÔÓBK²d^k¡Å=Œ#'©¹m­jVa×1¢°;V Ƕq[–~?×m˜ïž)ц RDŸ®Ügñ®-n&ÈÏÒ¥2Ô8³eQ3ÐÓâTÒe¯tÈ¥sòþîBª«èþ}ëWIñÖ›qq˜‚êØÈÛ£vsŒ .NsØÚ¼¤N¹ç9«v7íe}my )–Úd™t%X0϶Edé¦õ-NÈö«[ hd•­¬Ùw¹…”`ž€°©å³²ÔÅĨKb^H_#N}«”‹ãeóÿ®ÐìÛý×qÿ³V„ôɥŽû'Èüˆ«öÝHÇÚÇf}OJûzS Ƹ;J/8àôËcýãRǧIci*YÅÝEryÏïê8Ðc‚¿ñÓ\j·j§LFU+ij B£`E¶œcw|“œcÝ·Œµà!U‹M½ –“Èù›G]ÜŸŠÖÂÊQå’º7…h§tìκ [´CêǮHÝù“ŸÇ¬B-Bedp¡9ÀÁ˜Ç]ÝsžÞœæ>#[¡-¨i7Vð/ÈDƒ?ˆQùчǹŒ·ÚÄFFÿU,,­ø²†­qÇ/§ óÆ:[©%nk˜’Yý’O¶5ݤM !nÆÁÊò@ÜſݳPë×Ågkos–óÄ)N?Ú\u<èIã¡®¹/ôÉ¥0Esorò)>L3¤„ûçüö™ìᵈAmgµJà±mQëžÆµ%7-ÖÆÆ86ìÏ,$>ŽzZÛ·¶ŠßKµÅÉ–Rî²BNV3…uÇü\úe«¬:fžˆ Õ¼ry§UÎÕ|dŽ1ôàñPÍ h°»Z•%¹&VÉæ1àglœqëÏ|»'tûΧpAøíÏ #¹Pq±žêIYH$ä /nÞ˜­£-/!(6ìŠâ{8…WØ~îé ã×n:Õ¸'¬ [_H#1$…H8ÎpÈ#ŒôçR}š'*¬¡zϸ­dY¢m¥ž2?.ãÚ®2Mé¡S¦Ò/[ÝÝÚï"à”ä§–ªôÏN¼T±ß˜T„··ät FO©æ­‡GHî_äóÌŠã#±ÁúÔ_aK…†FmщÉ'pHúãŒbµÞ©œRq_dš×W…P4ñȲ©ÊˆpWÿ<~´w¥´²»yù”ä `äñÀúsY÷:vÈáXܮ܇fÎO¡þ!úߎcEp¨Ÿ,¹Ê©°pxê2üûŒVôÔä쌛‡]åÓ¥ˆ›rË!è„óŸO§'ÛM±Q‘29RÙÇáŽ+—òïdš=» :vïíV­§¸³Ÿr. PsÇu=h’”~((=¤lÅ^3"ZG»Ÿ™cõ…i¦‰k ¯˜d1Ì™#c³ŒŽØl÷ö¬;k›ë[mð,‘Æä¾ï+ œuÉJ™|Ct‘dÃo'«˜ÎHü¥dªÇÐÓØIífmE4˘¼d`§” ‡öÀíüªŒVW)9—¼%ÞF' ‚Àtqë×Ò¢Ä)*Èm¶Ã ÏßÜAú;ûÕäÕtéå¦0BÙó$t9éÀrzúñíU*±z¢U íb+PÒx³MM»·3ü»·qåœÿŸJ뤴XcXcËòï=ycŸêÇ¥r\–Sø«O[[**¼|¸2½:ަºÇI¼‹Æ*C[™mÇQž:û“×Ú¹ç+·èi8%êg=ÂM)bp@U ŒŽ´ÈåYFAVû½éYzXy KäÄ•ãüõÖ©Ú¼JûVXÛø\ ÷úVrÑ¢fÌ(²ZJÅw°9 œzW9㟒òÐÿ,Jß‹2ZºFFN[v:tÿë×;ã€ßj´Üyþµã#ZŸÂg$áIñÜSp ‘N3G>ôÒ˜<׬y§Ò^]ÚeÈÛ»ý&#¹èÃØÿ/ÄuÈÍqõxIwi—#nïô˜Ž6ç£cü¿Ô ÿ#5ÇÔT–v–_ê‡ÒŠ,¿Õ¥ÄO?Ü5Áx«ýS×{?Ü5Áx«ýSÐݺÿĪնô²”goNW¾=½GN‡$ŽG¯á_[[¯üJ­[oK)Fvôå{ãÛÔtèq‘òšÀsùTI7±jInKŒö¥+ŽÆ£Y—¹5&ì•…Eš-4Ä#˜§Iç?….Ñêi\v#ÇÖ“ê]žøúŠ6ïEÅb¤èrQaƒÓ®PžÕF検qZE‘%Ô¦G4GBA§ŠCVA*^OGÈ÷欦¡Çï#QTfIÅ1Ýš‹uo ኟqŠ™rT`}k”3!Ê’±©ä1¼³ËÈfÏÖ®ÛëG€d9ôÍsi}2õ`Ãý¡S­úŸ¿â¥Ãº-T}ÖÛø¢êGšÄÐóZö¾2gé ä|ÊpkKˆ`8^*@¹å\ÖÃÁô±´kËÔô¨ˆ’Üðz¨Áýk‰¶ñʺR}rs[Öž/?(c’cЇN¤KNêp­µ¾láPÏ&²¤ÒæQÌ,@=G#üó]ñ41mø9þ!Áüªí­ý¥Áh„ÓrœÓö’ŽäºIìp“[mb zàŠ,݉ùô¯IK :iU¨ÉÆ <~µZûE_:!QH®@˜`d€xç¹=þ‚´UmYœ©¾ˆã¡Ðæ—’€å‰è¯ëKu§ÃlªU÷ÎÃÏùÛjº\Ž-’ÒN|„y\¨Î⼌LưeÑîQÉd21êwdþ´ýªNצû›[î“ÐðªÍ ©ÉP~•Ô\ZÀ/!=7.3YòÚÝ8•J¢aÈÑ—DOšdËw ?˜¨…Õ¾ý¬äC²sޏã¯^õ«.ž’xúVlºiVÜ„PzVÑš0”ZS’+ —iϼ:ŽHš*’G¨Zø§Å_kH¢¹·Ô„KóFžTŠGO˜® üêͧŽïmg»º¹Ñ|›UÞÑ…À Hjò€²2•Bp9;Ͻ]‹ZÕb`[ÙŒ*6ˆ‹eq鎕.ŒYJ»êzíŸÄ]Ò7º´¹Žv8f‰U•}ÁÈ?¥lÇâ_ _bÔbóÍ— €¼³€=kēDzµŠxãB¨Û8=ºúTçÄVSÊw¤Ä¨£]£˜³îIÝSìU¬W¶G±yqêóùš}ÔW~VhH“ޏïü¸©ï4™˜…Ï\|¯òœÓŒþµãQßè³I!cyo¹aí–b+_Oñ«r]Ú$\$y²~@ ¿¬ž[£hâ#±é‡Ã†Ò¤ÃЃSÓžê…ïƒcGuˆXÕ¸ÆïÔñŒýsv¾1Õ£¸ûKjÚUÜB?”\¯•·èSž½súW§èQjúï…`Ô¼»Ie˜¹E!‰×eàÄôöëRáU Ô¦úœ–áKÍ>âk~ e!š"Às݃d‡88Ï5yô‹QrÐ*YÆ y-h¤öN 1ûáô溉cÔ¢ti4«‰PZXʸŒã§]Äò:-g_êvž`I§ûUî6)ç$cùTsÍ+46£RW¹çÚ÷‡õí‹-D |‘Ç!]¡x>  ëÀö®`M5ÍÁWiÊ º¸ùÀÆA=ñÇ^ƒŽƒ¯®Ã$7ö³4J»ÔgÎFßoT ôäý;ò9Í™Wuâ‘æ²(8qן˜`cüâš•ïqµ(Y#Ì ª¢294'¹q¶>¬Ç ÿ^+Ô"ð픳Bíe ´¼áÑXóÏ'×ü÷ªçÁöp²!¸…¡Q„R¥=N9ïÿê§^Œ%RV³G ©<[XÅ:ªàa*•z`᱌ƒÞ­ãe¼†ÝüÉÈܻЩì1ߎúö®‚÷Á“O/ÛÛRBìHe„Ï|“Œqè~•ÊË xƒJóF˜Í-²íDeÁFã×ôíž8+jjËVqÕ³~éŒ5KmÈÿi-å±$IÎr½ÆHÈoÏ>Õy¼ã-­¼,²Ku³ùlPùŒÆÐÅ”dœAôÆš6¡ý ßm´˜!}®mÑ\gÐm8­6Çû;P]BÝæX¬\M#\)]å ¸M¹%‚޼ɮ/d`˺}¨½-?•Ë1óþ® ÙÀ ÐðÝúp8#'FU½E3BüvÆÜôú q\Ýô²Xk¢ÚQí¤ÚÉ,‚$BOÌW<.½28ç5·£‹‚Úêia(»REû¬HàÐ Œ§85œÛG-E$î™'ÚakÓ ‹{[—ຮˆÚ@á~ }}DŠkv w¯îŒr8ã'89ÏܘÅTÖ¬™—í1GbÜÒÏG¸8µrÞÒù1ÊäñþšX¾o9²Ì“†b}3óë^œ°ôä¶<(fšr¿3ÐËÐ4ÿ±xÂ%²(ÉR¹Á ¡é“A-¾rŽE».A\¹8ãêzg½yÜÙúœÈÏæÁ3ÆŸ6@P€‹ž•ÚÛ¸¾ðâ¢\”3‡fêÙ,¨ÿëW‰^›…F}f§¶„eÜÄYV{ÈåŽmÑã­Ö¦™QœPHéíQ\*G±£DR%BàŒvþuM®Ü²g)ów>Øï\îïc¯E¹¯lî–¤F™ ô=1X>6ÿ›n qúVå´£Ëu˜¹ÈÏÓ·ãXþ6“3Ù0L~ï•üª)ÿ%ÏøLãˆã${ÐFŒ‚­I˜óœãQ¤p¤šõO8úCÂK»L¹w¤Äq·={åøŽ où®>¢ .í2ämÝþ“ÆÜôaì—â:¿äf¸úŠ’ÎÒËýPúQE—ú¡ô¢˜‰çû†¸/ªzïgû†¸/ªzÛ·_ø•Z¶Þ–RŒíéÊ÷Ç·¨éÐã#ãî0H¯°m×þ%V­·¥”£;zr½ñíê:t8Èøó€=i `ÏÜÑÏPM&i=iˆ™eeþ/Μ.Àá‡XšcsRâ™JM ¢—+CºftˆT‘M+”uïW.#¥”ƒôª€qZ#& éE/AKŠ`6— ûQ@ SF{KÞ’€œ®Ê~V#èh¤ÅXKé“‚CqVQR0èGÓšÏ#ÖŠN(jLÖY­åèê¿'–G*ÜV&iË,‰÷]—èjy{¤mn‘GΦŠþh_¯=È5üÊ9!¾¢¬.£pèG¸æ¥Âû¢ãQ­™ÒÛøŽxñûÇà÷æ¶ì|ZêÛ\†BA(G PrSù× ³[È>Y}ø©•Jt9±¬tÐÙW—]OS°ñ%²€†1Ý^€VÌ•Óc1žÞ¯YfŒåXôõ«°kP®K’éšÆXytfŠ´êDz{€:ô*Õ”|7É>\qñõ\þUÂZø®x°ˆ¨^lÙxËËÇÎHÝ““Ö²tåÑ¥ã-™«wà· ´%Ø îa‡Ž£‘\ýχ® ,vo^År ü tV^0ÚØ_/ýÐ+]¿ýzL³(_0àtéWVÔ£‡a”J„qæ(cb~•$š¥­ÎÕ“Sr6qŽ3ÏáÇVatQýãrqøý)B—f-ÊpÏ­^XôÉåq ãD áL£°äãëO¸ÒÞ›í–l§¦Ù?¦i^C´šCaƒ¥7‚w@à6yúUÿ°\„ ¨²+wFk8ùÞ·<àÿ꣙ö${”á…™âù‡$ž¼ñÉúVü¾­m~Ÿ-³€c“ÊTÏ^˜ 2}‡5œ¶³#nŒwqùsQŸ4aÉrú‚@éÏ¥ ¥ƒÙögq§|`ñv˜V9ݹŒ>qþÐÁ?kxŸâMÏŒ¼9œšX´àqƒŠìü-wá峚×ZÒ-ÑOÊ0PAê+:ÕŸ.ŠåÒ¤ùµ0¼¹±wî*ÐÕ5Pá¾ßvHpÒ³ } ÅwËájn§ê9PpV9À9ú8Éü*‡òÇ#ì¹ýÅxqŸø¥p}bÛœ†‡Žõ»9¦h.‚chš 6ñŽ6ãõÍiÁñq.4åg?.èå)ÇЃÎ8ëUgð~©`ˆbœ“‚"qÇýõŠ¡.w–Æ\ž…P°üÆE ´•KxëG¹TŒ¤ñr´±£ý’OaÚ´íuÝõ]bÔ G\ó#yj}1¿¥y´–±ê'ÇÞ ²óì–WkXnÕð KÆ~ë0yþUiÆHÎK—¡éWÐÚ\YÍ-¼–¡Hݾ2§œpzú)õè}+›µmy½´–qùbuxÈÉÀ#‚sŒzäÉYt ·Ú4«s<^h’+œôb?å¤|ôê ùÍ*kW±jR ëág÷byw‘ëŸá<ç·zÞQNæ<ïC¬“@Ñu«µ[e•¢vÜÒæFÇ®vº8<àVWü#¶Óy¦JSÊ ö˜ÒL ù›œ2sÊ‚99=3 —Š5[+«‹‚-ç’}»Œ±`dp WžqøJчÆ<Ç›I‡Î”#ÀþXn1ÈÁ$ûæ¡ÕìSÃ'¸Ë¿Ãsn¡]ͦѵSæ%{r:óƒÏ Åa}—P°¼g–hÄ-6|½¤ìôÚØ€3ÙyÊ‚6b×là‘<©ïáBÛŠ»Sœô$ç·o›¬_ŨJ=Gí€2ÒÄŽ=~]Ƶ¥QÅîe<4Z±•¨xvý.Mõ¼w±E öUy­»¶§<àgéÊýžPY/äÄ<eˆ† Ž™û¥¶óü9üksOŽç÷SÚê¦D(R7m8Ïjè£óf‚X¤ ²Q´²±ätéþzWLqÕSµ®pO*¡$¯t¾_žç’ÄÞ Dµ¡DhûÜŒ‘Ó×`+¬ÐQѦ´»¬Ò c%HƇõ­}WF·–Ð=µ¥³KŸšAÞÃG'¯J»e¥¬Ö±K&LÊÄ©'<ƒÆOoʹ«W[÷=4RŠÙíÄbå«y\üØê?NrHöÑ,c+§ŒœÒ²¾UÉ- sƒõ'Ó¼ÆXÜŽ[8þŸáX—Ô¹iý–@ëœ1>õÌx¾Vwµ$ôº›r #ƒ×§ÌxÑ·In¤c¦Ÿñ¢\¿„ÎSzþ´‡ žp}1O* žj&ùzs^©çIøIwi—#nïô˜Ž6ç£cü¿Ô ÿ#5ÇÔQá%ݦ\»¿Òb8ÛžŒ=òüGP7üŒ×QRYÚYªJ(²ÿT>”S<ÿp×â¯õO]ìÿp×â¯õO@vëÿ«VÛÒÊQ½9^øöõ:d|u_bÛ¯üJ­[oK)Fvôå{ãÛÔtèq‘ñÙsÍ$ CÖ”àuéMÎi=iˆ ãŠLÞ‚)Bñ@Æ‘ŠLfŠCë@㚥—Þ{Ruâ¤À>´˜ô ãšB)Æ“½%¸£ñINÆh=(¢Žô¦@ ‚{RíKۥ踣´{P ){QÀ §,²!ù—èi)  I¨N¼0÷:j1Ÿ¿_qÍgQÞ§•™›+so â@¿6ÏâVúV)VGŒü®ËŸCK®c}ZXùRG¸5:jWQ<Æ8õ¬$Ô'^¤0÷e58ÏúÈÈã·5š{¢ãQ­™ÑZxŠhX³ “Ü~~µ±oâ¡C»çÓ8ú×—6Òcëž)ì¸]Êr1šÆXh?#hâ&·Ôô«o’¬0të†~¿jÛøŠ€¨û¹Ã†+ôëÅy nØ–Jµô±¶NyëÚ“£$¬˜Õh½Z=—íºMù£Ž0O>pxïß½Isáý6ö9Z;”ä¨À·ù>•ä0ë7Qà–fŒç§âkZM‚²Hà#ïqõ¬\'Ѫtå³:íOáÊK6öéæ…Xœë€N?ýB¹[¿‡wÉ>ÈÁS´dUHÈ{ãýÓ×Ù/AÉdŽáÁqü~àà? ío< ía{r àûV]ï‚õ%U-$ŒÃÎöçµTkA’éI °³‡·Üc‘ù‡O`O¦:q@sŽƒ<àv«ë¢Íj‹ ÞŸ)F^‡üóP½µÜ*L–çrW‘þ?¥e'w¡Ó­fUV–2¥X©R[#µléÞ/×4Í‚éŒ`îçr·Ô¥dFb22:Ž„SYœŠM'º/ÑýÅvªjVÍݤ‡äoÀt®ŠËƾ¿Zåìä#q'Ê?àC¿á^7å<ƒëÍ/'¯ëaá.ƒRg½2ÇR€­¥ÄS£àpüz㨮W]ð,"{e1"7Ú¤z޼ƙíÉ’ ‡Œçï+ÒºOˆ!µùè\ è&ñì3ÍeõW`ÊçOsGNðD°/™¼§9^ƒÐg>‚´ÓÂwEZC:s®˜?‰ÿëU+âe¼°¼Ò]cŒîw€–UÇFlçtVž'ðæ¨ˆ Ô#‰Û€’ „sï‘ÿ묧÷»aU±ÆÜxkQ…3åE+çc“üqT&Ó/ m²YÍž¹T,?1Åz¯Ø|ÄDQÐüÙŒŒa²;†9#oëÅBœÖå»BQ|Â­ËØõ¾Z˜þ\t¯X}6)ÕƒFœÁ¬û iÎŒ>ÊwÚ1ƒUí_TN‡—ˆ‘BîA‘ú.® Ï“u2d`€ä “]]Ï…m¸&HÉl*ÆÙ'¯PAíþyÅAqàÙA&;¯Ýž“ŸÄçúVªµº‹•ðñf¥`P<±K]»$AÌ`þµvÓÇ·4vñÚÛ3³ž^áƒêrOÔÖn§á‹´tFòîÛçŽ çj“GÐMº–y™1±v¶à=H?çõ®˜8N7ÜÊw‹²6Üe¶Hÿ=iȸÉÇðút¨á_Þ»99, lëštŒÉ†\óp*ºYù²ac;X ±Œàb¹¿’^Û'$''Þ·Lïäð„œò1Ó¥sþ*pëlÁqÁQJ ûXÜ·ü&seºr9ÅFùü}*V®G~µŽœûצyçÒ~]ÚeÈÛ»ý&#¹èÃØÿ/ÄuÈÍ?ÔQá%ݦ\»¿Òb8ÛžŒ=òüGP7üŒÓýEIgieþ¨}(¢ËýPúQLDóýÃ\Š¿Õ=w³ýÃ\Š¿Õ=mÛ¯üJ­[oK)Fvôå{ãÛÔtèq‘ñ¾yë_d[¯üJ­[oK)Fvôå{ãÛÔtèq‘ñ ?•$ yÔŒJh ù§…ϰ£ÜdRÀ§sÚŒhSG àñN 柅 (2)¸©çÖN´Óì8¤éRwëIZi¤§cš ÐÁÔÜsNúR@ Ç4S±F(½èrE/µZNÔ”êLPQŠ1E'µ¥‚=è>””½¨üh)Êî‡*Ì¿CŠJ(Ìw÷Haè¬Gª)À’,z•çô¬ìQJÈwfÊ]ÚÉŒI±‰þ!ŒU¤bË”pà÷ë\Þ)Ê̇*ÅHî)r˜é‡| öÇó;ï,²ºŸòkžP¹Aþ´·ûÜÕ¤ÖŸ2%?îœT8§n¦ä7×0ÚÙã·_Ò´m¼Q} $|Ó9Ì®£k'RSÞ*YƒªÀ àⲕ=ѬkÍu;«?Ü&Ðå\“ëñ­»_£‘Î ŸyKÆq‘MóNFA†²ú²û,Õb™çoã cÚâ9ºØcþ4°ßé7s¼°©Œ‚$!üÏâ }*ždÈ[‹Y¸ˆ™†yàâ§ÙT˜ý¥7ä{Oö%Ê’„Ékå”ýj³xbWe…À`ØÇáœgð¯8³ñÌ8ñê»kã‡Áëϧ5””º£D¢öf½Ç‚„± 1'óýkž»ðl±–u¤žÇÿŠþ†º[?[”*]•F3‚z~×A‰lîÀ˜È'gü(S¶îÂö}$›E½·v ›‘s“´®=»nµA“hýâ²dîÇ¥{ƒ6rNè„dðvñÍW¸ð¶—¨±hî¹ànPxúõªRlZ£ÄÄ9¯CÜR4L3Ð×§ßü4@Åátÿi‘öçñ5Ï_x"úضÉAç…•{}E>p½Ï>yZ9 “,Spê,tÇç[ú³a4Í­²Áªîv#<0Çøqó‡®i/´[¸÷ m‰QŸ™áý dýšXÁ%uGä¡Êçð5Ò§+3šTäѵkâ%°¹O²_^Z“Ë4¹@ô vþetZwÅ ZØÿ¤/c8!¤iN¼óÏ?ýzÒ…>HÕ•ä‡<‘ìL‚@àâ‘6ºW®}Í1€$`ãw¯5"/”JžFyúÖÖÐÊá$kömÌÞäúW3âˆÖ8íÀ'¹Ï­tåöÄàƒ· Ú¹¯ÆV cßšˆ«UËo÷m#™ FOãL ç“ž†£'æ§0R£wéœÒ¾]ÚeÈÛ»ý&#¹èÃØÿ/ÄuÈË?ÔQá%ݦ\»¿Òb8ÛžŒ=òüGP?üŒ³ýEIgieþ¨}(¢ËýPúQLDóýÃ\Š¿Õ=w³}Ã\G‰¡/ñ@¶ëÿ«VÛÒÊQ½9^øöõ:d|‚4 gþÿø ÿá__Y”6Y1@ѸwÚ@f\ÿ ==Go¨…tÍ7åÝa`:g»Ÿá÷oÈtÉÂòXÐuŽúM÷þ?øSƃ¬ÿ «ïüð¯¬WLÓ~]Ö¦q18û¹þvü‡Lœ ¦i¿.ë Ó8˜œ}Üÿ»~C¦NXù?ûXÏUøÿ·wÿ _ì-[éwßø ÿá_W®™¦ü»¬,Lâbq÷sü>íù™8LÓ~]Ö¦q18û¹þvü‡Lœ 'ÿaë²o¿ðÿÂì-`žt«ïüð¯¬LÓ~]Ö¦q18û¹þvü‡Lœ ¦i¿.ë Ó8˜œ}Üÿ»~C¦N …“ÿ°µú_à;ÿ…BÕÿè}ÿ€ïþõ‚éšo˺ÂÀtÎ&'w?Ãîßé“tÍ7åÝa`:g»Ÿá÷oÈtÉÀ>OþÁÕÿè}ÿ€ïþ‡AÕóÆ•}úöð¯¬WLÓ~]Ö¦q18û¹þvü‡Lœ ¦i¿.ë Ó8˜œ}Üÿ»~C¦N …“Æ…«g&ûÿßü)¿Ø:ÇOì«ïü𯬗LÓ~]Ö¦q18û¹þvü‡Lœ ¦i¿.ë Ó8˜œ}Üÿ»~C¦N±òoö±ÿ@›ïüð¤´?æÿ€Ïþõšéšo˺ÂÀtÎ&'w?Ãîßé“tÍ7åÝa`:g»Ÿá÷oÈtÉÀ>NþÄÖ;éÇþÝŸü)ƒ¬Ž²¯¿ðÿ¾²]3MùwXX™ÄÄãîçø}Ûò2p.™¦ü»¬,Lâbq÷sü>íù™8ÇÉÇ@Õ›‘¥_ÿ^ïþßìcþWßøÿá_Y®™¦ü»¬,Lâbq÷sü>íù™8LÓ~]Ö¦q18û¹þvü‡Lœcä¿ì`Ì*ûÿßü)¬ÿ ›ïüð¯­WLÓ~]Ö¦q18û¹þvü‡Lœ ¦i¿.ë Ó8˜œ}Üÿ»~C¦N …’Žƒ¬q"ûÿßü(:±ÿ@›ÿüð¯­WLÓ~]Ö¦q18û¹þvü‡Lœ ¦i¿.ë Ó8˜œ}Üÿ»~C¦N±òOü#úÇýoÿðÿÂì cþÿø ÿá_[.™¦ü»¬,Lâbq÷sü>íù™8LÓ~]Ö¦q18û¹þvü‡Lœ $`k'þaÿø ÿáKý¬Ð"ÿÿŸü+ëeÓ4ß—u…€éœLN>î‡Ý¿!Ó'éšo˺ÂÀtÎ&'w?Ãîßé“‚ácäsáýgþ7ÿø ÿáGü#úÏý/ÿðÿ¾¸]3MùwXX™ÄÄãîçø}Ûò2p.™¦ü»¬,Lâbq÷sü>íù™8.3äøGõŸú_ÿà3ÿ…'ü#úÏý/ÿðÿ¾¹]3MùwXX™ÄÄãîçø}Ûò2p.™¦ü»¬,Lâbq÷sü>íù™8cäoøGõ¯ú_ÿà3ÿ…ðë?ô¿ÿÀgÿ úåtÍ7åÝa`:g»Ÿá÷oÈtÉÀºf›òî°°3‰‰ÇÝÏðû·ä:dà¸Ï‘áÖsÿ ‹ÿüð¥ÿ„Yÿ Eÿþ?øW×+¦i¿.ë Ó8˜œ}Üÿ»~C¦NÓ4ß—u…€éœLN>î‡Ý¿!Ó'Àùþýgþÿø ÿáGü#ú×ý/ÿðÿ¾º]3MùwXX™ÄÄãîçø}Ûò2p.™¦ü»¬,Lâbq÷sü>íù™8.È¿ðë?ô¿ÿÀgÿ ?áÖèÿ€ÏþõÒéšo˺ÂÀtÎ&'w?Ãîßé“tÍ7åÝa`:g»Ÿá÷oÈtÉÁp>Eÿ„Zÿ Eÿþ?øQÿþµÿ@‹ÿü𯮗LÓ~]Ö¦q18û¹þvü‡Lœ ¦i¿.ë Ó8˜œ}Üÿ»~C¦N ò/ü#ú×ý/ÿðÿ“þýhÌ#PÿÀgÿ úítÍ7åÝa`:g»Ÿá÷oÈtÉÀºf›òî°°3‰‰ÇÝÏðû·ä:dà¸%¦•âþãÁ¶sý*u²×‡ßÑo[ßìÎò¯«WLÓ~]Ö¦q18û¹þvü‡Lœ ¦i¿.ë Ó8˜œ}Üÿ»~C¦N »>X];S|ѵ?õìä*“ûSa¹tëÑõ·qý+ê5Ó4ß—u…€éœLN>î‡Ý¿!Ó'éšo˺ÂÀtÎ&'w?Ãîßé“…d;Ÿ.bêàq§^߆ÿ IÕ×®™x~7øWÔk¦i¿.ë Ó8˜œ}Üÿ»~C¦NÓ4ß—u…€éœLN>î‡Ý¿!Ó' •™Ÿ1%†±Êi÷Øé†·cý*ÔQk‘ð,/€ö…ÿ¾“]3MùwXX™ÄÄãîçø}Ûò2p.™¦ü»¬,Lâbq÷sü>íù™8—J/r•Y-Ÿ-¯üEscz{`ÀØþU«m®ëã~—y‘Ô¬.3úW·.™¦ü»¬,Lâbq÷sü>íù™8LÓ~]Ö¦q18û¹þvü‡Lœdð´Ù¢ÄÍWiâmPFCÚÝf…ÿ¶àñ,ιšÖQŸúds]Êéšo˺ÂÀtÎ&'w?Ãîßé“tÍ7åÝa`:g»Ÿá÷oÈtÉÁõkm!¼C{£ˆšãNÔ3ÙûªTÕ)¼7¢]tœÅž»×uz"éšo˺ÂÀtÎ&'w?Ãîßé“tÍ7åÝa`:g»Ÿá÷oÈtÉÃXxõ!Ö}&»ð=¦ßô{¸yÂøÇàx¬;¿^ÄsÃ(ì7€0M{ªéšo˺ÂÀtÎ&'w?Ãîßé“tÍ7åÝa`:g»Ÿá÷oÈtÉÁõuÑW’>v›CÔ"8k)º®ï嚀è×ýìn›ü+éÓ4ß—u…€éœLN>î‡Ý¿!Ó'éšo˺ÂÀtÎ&'w?Ãîß铆¨.ãúÃì|Ûý‘¨»csÿ~[ü*)4}MŽÑ§\’xÏ”ØþUôºéšo˺ÂÀtÎ&'w?Ãîßé“tÍ7åÝa`:g»Ÿá÷oÈtÉÅ*Iu%Öo¡âÚvžÖv©n-¥ ¸ÉÙÉ9ëÿÖþ•hy»– ãŸ-€üÿ:õõÓ4ß—u…€éœLN>î‡Ý¿!Ó'éšo˺ÂÀtÎ&'w?Ãîß铃Ù"9Ù䆆Qû‚¸‡"œ#›w1Iϱ¯Y]3MùwXX™ÄÄãîçø}Ûò2p.™¦ü»¬,Lâbq÷sü>íù™8^Åw´g–¼LQWcO#ÎxšÎêt…-í's²2qù ÷UÓ4ß—u…€éœLN>î‡Ý¿!Ó'éšo˺ÂÀtÎ&'w?Ãîßé“„°ëJûÚ¾Wæ#¤j‡?ñ.¼ÿ¿ þã£ê{0tëÃßýK…}6ºf›òî°°3‰‰ÇÝÏðû·ä:dà]3MùwXX™ÄÄãîçø}Ûò2qÑsS3ÂK»L¹w¤Äq·={åøŽ ùgúŠÙ‚ x"òá‚ÒgGp“nåJž…?Þô<„år‚oñ î9Ò(ì,¿Õ¥¶cŠ)ˆ°ã+X:­—œ„bºÍC$!Ç"€<·QÑn‹.i“ý×"±ŸCÔ³Ååßýþoñ¯_“OG<¨¨Ž•þ@Gý‡©ÿÏíßýþoñ£ûSÿŸÛ¿ûüßã^·ý“÷EÙ1ÿtP’aêóûwÿ›ühþÃÔÿçöïþÿ7ø×­ÿdÇýÑGöLÝäŸØzŸüþÝÿßæÿ?°õ?ùý»ÿ¿Íþ5ëÙ1ÿtQý“÷Ey'ö§ÿ?·÷ù¿Æì=OþnÿïózßöLÝdÇýÑ@Iý‡©ÿÏíßýþoñ£ûSÿŸÛ¿ûüßã^·ý“÷EÙ1ÿtP’aêóûwÿ›ühþÃÔÿçöïþÿ7ø×­ÿdÇýÑGöLÝäŸØzŸüþÝÿßæÿ?°õ?ùý»ÿ¿Íþ5ëÙ1ÿtQý“÷Ey'ö§ÿ?·÷ù¿Æì=OþnÿïózßöLÝdÇýÑ@Iý‡©ÿÏíßýþoñ£ûSÿŸÛ¿ûüßã^·ý“÷EÙ1ÿtP’aêóûwÿ›ühþÃÔÿçöïþÿ7ø×­ÿdÇýÑGöLÝäŸØzŸüþÝÿßæÿ?°õ?ùý»ÿ¿Íþ5ëÙ1ÿtQý“÷Ey'ö§ÿ?·÷ù¿Æì=OþnÿïózßöLÝdÇýÑ@Iý‡©ÿÏíßýþoñ£ûSÿŸÛ¿ûüßã^·ý“÷EÙ1ÿtP’aêóûwÿ›ühþÃÔÿçöïþÿ7ø×­ÿdÇýÑGöLÝäŸØzŸüþÝÿßæÿ?°õ?ùý»ÿ¿Íþ5ëÙ1ÿtQý“÷Ey'ö§ÿ?·÷ù¿Æì=OþnÿïózßöLÝdÇýÑ@Iý‡©ÿÏíßýþoñ£ûSÿŸÛ¿ûüßã^·ý“÷EÙ1ÿtP’aêóûwÿ›ühþÃÔÿçöïþÿ7ø×­ÿdÇýÑGöLÝäŸØzŸüþÝÿßæÿ?°õ?ùý»ÿ¿Íþ5ëÙ1ÿtQý“÷Ey'ö§ÿ?·÷ù¿Æì=OþnÿïózßöLÝdÇýÑ@Iý‡©ÿÏíßýþoñ£ûSÿŸÛ¿ûüßã^·ý“÷EÙ1ÿtP’aêóûwÿ›ühþÃÔÿçöïþÿ7ø×­ÿdÇýÑGöLÝäŸØzŸüþÝÿßæÿ?°õ?ùý»ÿ¿Íþ5ëÙ1ÿtQý“÷Ey'ö§ÿ?·÷ù¿Æì=OþnÿïózßöLÝdÇýÑ@Iý‡©ÿÏíßýþoñ£ûSÿŸÛ¿ûüßã^·ý“÷EÙ1ÿtP’aêóûwÿ›ühþÃÔÿçöïþÿ7ø×­ÿdÇýÑGöLÝäŸØzŸüþÝÿßæÿ?°õ?ùý»ÿ¿Íþ5ëÙ1ÿtQý“÷Ey'ö§ÿ?·÷ù¿Æì=OþnÿïózßöLÝdÇýÑ@Iý‡©ÿÏíßýþoñ£ûSÿŸÛ¿ûüßã^·ý“÷EÙ1ÿtP’aêóûwÿ›ühþÃÔÿçöïþÿ7ø×­ÿdÇýÑGöLÝäŸØzŸüþÝÿßæÿ?°õ?ùý»ÿ¿Íþ5ëÙ1ÿtQý“÷Ey'ö§ÿ?·÷ù¿Æì=OþnÿïózßöLÝdÇýÑ@Iý‡©ÿÏíßýþoñ£ûSÿŸÛ¿ûüßã^·ý“÷EÙ1ÿtP’aêóûwÿ›ühþÃÔÿçöïþÿ7ø×­ÿdÇýÑGöLÝäŸØzŸüþÝÿßæÿQ¡êyÿÛ¿ûüßã^µý“÷EÙ1ÿtPšÙh—¡Æû‹†íHÇú×g¤i¦}Mm¦›Ÿº*ÜVê>Ú¢Š” Q@ EPŠ1EbŒQE£Q@(ÅPŠ1EbŒQE£Q@(ÅPŠ1EbŒQE£Q@(ÅPŠ1EbŒQE£Q@(ÅPŠ1EbŒQE£Q@(ÅPŠ1EbŒQE£Q@(ÅPŠ1EbŒQE£Q@(ÅPŠ1EbŒQE£Q@(ÅPŠ1EbŒQE£Q@(ÅPŠ(¢€ (¢€?ÿÙnip2-8.7.0/doc/src/figs/snap14.jpg0000644000175000017500000015071713224651032013424 00000000000000ÿØÿàJFIFÿá°ExifII*JR(i‡Züÿÿ)( üÿÿ)( 0210‘ 0100 ÿÿ È -ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀ-È"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?÷úBÀPdzo¯RÞ6v`ª£$“ÐPÖW½DowãZ·Å;É.tËxE¸8Y&‹ûàÖ²ÏÄq»Yÿß—ÿâé\xûjxQöÔþð¯ÿ…®zYÿߦÿâèÿ…®zYÿß–ÿâè¸õöÔþð£í©ýá^ ÿ \ÿ§?ûòßü]ð±µÏútÿ¿-ÿÅÑp=ëí©ýáGÛSû¼þ6·ÿNŸ÷å¿øº?ábëôéÿ~[ÿ‹¢à{×ÛSû¶§÷…x7ü,]oþ?ïËñtÂÅÖÿéÓþü·ÿEÀ÷Ÿ¶§÷…mOï ðoøXºßý:ß–ÿâèÿ…‹­ÿÓ§ýùoþ.‹ï?mOï >ÚŸÞàßð±u¿útÿ¿-ÿÅÑÿ [ÿ§Oûòßü]Þ~ÚŸÞ}µ?¼+Á¿ábëôéÿ~[ÿ‹£þ.·ÿNŸ÷å¿øº.¼ýµ?¼(ûjxWƒÂÅÖ¿éÓþü·ÿGü,]kþ?ïËñt\yûjxQöÔþð¯ÿ…‹­Ó§ýùoþ.øXº×ý:ß–ÿâè¸óöÔþð£í©ýá^ ÿ Zÿ§Oûòßü]ð±u¯[Oûòßü]Þ~ÚŸÞ}µ?¼+Á¿ábë^¶¿÷å¿øº?ábë^¶¿÷á¿øº.¼ýµ?¼(ûjxWƒÿÂÅÖ½mïÃñtÂÅÖ½mïÃñt\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿâèÿ…‹¬úÚÿ߆ÿâè¸ñöÔþð£í©ýá^ÿ Yõµÿ¿ ÿÅÑÿ Yõµÿ¿ ÿÅÑp=ãí©ýáGÛSû¼þ.³ëkÿ~ÿŽQÿ Yõµÿ¿ ÿÇ(¸ñöÔþð£í©ýá^ÿ Yõµÿ¿ ÿÇ(ÿ…‹¬úÚÿ߆ÿã”\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿã”ÂÅÖ}mïÃñÊ.¼}µ?¼(ûjxWƒÿÂÅÖ}mïÃñÊ?ábë¶¿÷á¿øåÞ>ÚŸÞ}µ?¼+ÁÿábëÞµÿ¿ ÿÇ)ábëÞµÿ¿ ÿÇ(¸ïöÔþð£í©ýá^ÿ Xþõ·ýøoþ9Gü,]cûÖß÷á¿øåÝþÚŸÞ}µ?¼+Â?ábëÞ¶ÿ¿ ÿÇ(ÿ…‹¬zÛþü7ÿ¢à{¿ÛSû¶§÷…xGü,]cûÖß÷á¿øåð±uï[߆ÿã”\wûjxQöÔþð¯ÿ…‹¬z×þü7ÿ£þ.±ëkÿ~ÿŽQp=ãí©ýáGÛSû¼þ.³ëkÿ~ÿŽQÿ Yõµÿ¿ ÿÇ(¸ñöÔþð£í©ýá^ÿ Yõµÿ¿ ÿÇ(ÿ…‹¬úÚÿ߆ÿã”\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿã”ÂÅÖ}mïÃñÊ.¼}µ?¼(ûjxWƒÿÂÅÖ}mïÃñÊ?ábë>¶¿÷á¿øº.¼}µ?¼(ûjxWƒÿÂÅÖ}mïÃñtÂÅÖ}mïÃñt\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿâèÿ…‹­zÚÿ߆ÿâè¸ñöÔþð£í©ýá^ÿ Zõµÿ¿ ÿÅÒÂÅÖ½mïÃñt\yûjxQöÔþð¯ÿ…‹­zÚÿß–ÿâèÿ…‹­zÚß–ÿâè¸óöÔþð£í©ýá^ ÿ Zÿ§Oûòßü]ð±u¯útÿ¿-ÿÅÑp=çí©ýáGÛSû¼þ.µÿNŸ÷å¿øº?ábë_ôéÿ~[ÿ‹¢à{ÏÛSû¶§÷…x7ü,]kþ?ïËñtÂÅÖÿéÓþü·ÿEÀ÷Ÿ¶§÷…mOï ðoøXºßý:ß–ÿâèÿ…‹­ÿÓ§ýùoþ.‹ï?mOï >ÚŸÞàßð±u¿útÿ¿-ÿÅÑÿ [ÿ§Oûòßü]Þ~ÚŸÞ}µ?¼+Á¿ábëôéÿ~[ÿ‹£þ.·ÿNŸ÷å¿øº.¼ýµ?¼(ûjxWƒÂÅÖÿéÓþü·ÿIÿ [ÿ§Oûòßü]Þ¾ÚŸÞ}µ?¼+Áábëôéÿ~[ÿ‹£þ6¹ÿNŸ÷å¿øº.½}µ?¼(ûjxW‚ÿÂÆ×?éÓþü·ÿGü,msÒÏþü·ÿEÀ÷¯¶§÷…(¼CÜW‚ÂÆ×=,ÿïËñtáñ#]^Ö÷åÿøº.¿,êÝêPÀ׌xâ|ò_GoªCÇ! &ˆ }Á'|ñ^±it%PA¦…€äQ@Ìp¦¸/^еÛÈ?ñÓ]ÝÉÄf¼ËÇŽ²¯Gý1ähÇ7Qº¡ÝFê‘—¬-$Ôoc´…âY$$)•Â/Lã'¿aïZÚ§„õ ?RžÎÙ†&Š:+,kŒ³)n:ð2I¬ {©­.c¸·‘£š6ÜŽ½T×Cáÿ*j³¾µw3Cqbö^qÌJqƒÉ:/3:=S•ìR;Ff¿Rö :þ𧯎)ú†«ésÁ 턱IpvÄWÞ}RFyé],:þ‡c­ø`E¨´öšd2Ç5ÇÙÝ9e |¸Ï_­f.µf|?¦Ú-ûAuª×Ä,ÞTg8p1ƒÉÎÜÑ×úïoËPþ¿…φõ«;»[K‹Iî‰XSÍC¼Ž£†ÀëßùCï>€©<ûu®ši6~+ÒŸOW}ÅdƃºLî`‘ªú§ˆì­î4Óc}myioz.šÞ 8Ûm#ÜðÄ‚i­lÊòøJïN𾣩j–²ÛÏEöu2)3a²>½ñX1X]Ïa5ôP¶…Ö90ùYº g<ý+§Õõm û]Z¤·7:­Äsˆ^ÙÐņÉÿ­Yþ Öì4»»¨uR~ÃpŠÇ [÷ˆÁ“€½%»¿õ¢þ½Aí¡B] U¯K'V²(.õ% ýÑÁù³ŸáÍ;Qðö³¤Ú%ÕþŸ,99*@>ø'Ž+£¾ñŤÖzeÌqî¾{¨çÔ)ð£$`çƒÇLT¶·¢Ç¦k‹a=ìúÄÉ!ŠH¸ »’~ñíÇ £úü¿àB-#ÁºÖtøµ›`²¹v]ÂTÜHF`8$»éX“éðÇÆÕÄW2˜í¾aºR8\î?\bº'ñ”ß`ÖEÏú 7”ü~è¯ÝÆî¾Õ_Y×4ýfóKÕ£¿{+ødXæAºÆªr² Æ1þÎúïªFfÏárÚòÚÒm=–âëp†?5 | žÆ®*-GAÕô™aŽþÆHZfÛYX1ôÈ$gñ®ÏO¿Ñoüi¢Kc$W‰yMÕÌÍIû¶Á*ßÅïY7:¦a§Úéê]R©ýªäù DèP×ðëÍ upïýw0õ/ë:D÷öB²¶Ä!•ÁoO”ž}©×^Öì¾Íö6T7M²Ü¥ºãh$Ä éõh–ÖVÉc<-Q.Ö {n1Øä[Þ©¦¯ é¾0ÄVúœ·¾tîÒÛ›VW…]HÎãÃc `v¡9ýSEÕ4SÔlÞßÌÎÂYX{©#>ÕŸººOjöw6ÙéúµÍ¿žf1A§o,ã'ø‰ÉÎcìù:L–Ùšd›Ã´ÉmºuÏ£çŒvâ’/h~¹×ìõm3Ú)óKüD€0¨¬|9¬êMp¶v-1¶Ç( Úèå† ÔþÔ4ÔÓ5/RºkHïãŒ$â#(RŒN ŽyÍiøkRðæ™Ùn ŽêÝâêk”Ëè‚c=ý©ÛRz´ß Üê¾¹¸´¶šMNß Â]P*…²äúÕ-'×zž°úl²Ee$LSpÀ$à¹Ë@?>kmõT²Õm.µY,–mXÞÄâÙܲ`c¯JÌ»ñ÷Ä(u“º+5¹‰·2’Ûq'·J#«Wþ´C{;Z³þÜØê7Ve÷˜&x·ã¶’3ŽÝ*¾ê³ª^E?ˆ// Û,/tò¦õ;]K’28>”jš·ö£ÄßÙÚu—–Å¿”?Þ俥^Êã{²ðð¾ºÚ`Ô—MÙ˜üÑ t9Lg;s»ö§K'HšÆ+™®ïÞTJ;ðó‘Àç5¹eâm&WE™îÈŠÛHû,çÊs‰1÷qŽyî8©<#©ZO7„´øåÝuk-Ñ™6‘´2±ãð5VÕÿ]Ééëc™½Ð5=*æÞ-RÜÙ,ìM#AêIRzuÇZ³©höš2ê¶´z…·Ÿöy¢*øÏÌ=êö£{¡Ã¤[è1j’ÝDú—Ú..>ÎÈ N„rIêxÏzgН4k«(¢Òu”kKl }=,äN¿yË·ºòi_B­gc—ÝFê‡u©ˆ›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Uí/O„®Ò»$ðvõcè+/ujiWkr[±ÆöÜ9ÆxóøP¼º™$ebBøáÖçÜþµsðØË.¡ö"B¸bº€óë[>d|á¤wi˜ÈœVd7Àj¯txI̞ÌÒaÑ#‰•ãº}™ 6Ù8Ç^ƒmdjsYÞ,L«'1çœ`ûÖ‰’Sk4 BD›ðÆCŸ˜“Óo¿­V¼½ß}nè7}·ýNAÇéC½´muszËÃú5²$WÌgºe,G˜T uÀàzšËÖt«kh÷N•žÕÈXçnz{Š¿?“ªB›¦Í¿ÞÉlc©éŒœŒsÐñjëWØÓͫȯ3íÜTc€AÎ;tåQÄT•D¯«ÝGŠÁÐ >T’Z>æêúÃwfkX‰9%E|纽ïÂ,M¤?îŠõÑóGÊŠ)°ýÁE0uþ¬×˜xóþAwŸõÉÿ‘¯OºÿVkÌxD_ïà”êÖ{DWQùNQ\Àü¬)à÷Töú{\i——Ë*„µ1‚¸ÉmäŽá@wT]Ok2Ím4Ê¿vHœ«ÜȨ)8 úÒÐË’I$’y$÷¤ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(C+–„“KçAQQ@ ˜  zqJ³”èò¨¨  w"P”'®Ö#?‘¨ÚRÄ’zÔtR²½ÇÌÚµôº½ûÂñéû¢¾¯ 0ÿ GþLÃÿÅÒŠ·áø[ü†õüÿŸõr꿈`ñ=ßÛ-5;™9 "lË{ÇÏ9ã·ÐõËø‚ÞK]vînÍÜi›ï1 ›“ÈÎ=Emÿ±ñ‡ý?òfþ.øV>0ÿ GþLÃÿÅЕ­ä6ïs’®¢k»Ko hbçL‚ð³\m2K"mùÇMŒ?Z—þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.˜°Ñ¶¥©IiÿÚÒÈÁœÊ“,~PÜ#.¬»žøïÖ²¯ä{Û?°Ékp«lòÁ#!ÛÎpÉÈ'½Cÿ ÇÆôÿɘøº_øV>0ÿ GþLÃÿÅÐÕÝÁhqu>²ºš·ö"ÚŸ³y¸Ø%Ú»<¿Cž¸íœ×œWq¨øƺ¦¡-äú2,’X%Ä@tÇj©ÿ ÇÆôÿɘøºIK•Öÿ±ñ‡ý?òfþ.øV>0ÿ GþLÃÿÅÓ’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*÷ÿǤ?îŠòßøV>0ÿ GþLÃÿÅשxCþ=!ÿtSB=¸(¢¸(¦.¿ÕšóÈ.óþ¹?ò5é÷_êÍy‡ŽÆtÛ±ë#@•bØÓ-qÿ<“ù ŸÌ>Õ‡©Hñø.åãfG]=вœ|¾ Õ$Ô/ôß [My¨X¬òˆÖû,œ®q°9go¦>”€éžácÛ½•w£'>”ÿ0ûWu«ÞkZF—2, y²°hÝc,¡°ÛN ‡šßÓïõ+¹u-.åí¡Ô-B¸†2c*à•m„ç#ŒÓ¶Ÿ×—ù‡_ë»G@“Ú©GÿWc·š?ô¬¿ IrÚ}â]]Ku$WÓÇæÊrHVÀöAÅjEÿ7õÔè CKERQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEɦŽÞ '•¶Ç—vÆpÉ5ZÛSµºŸÈŒÌ$Ú\,nÿë ÿЭUSÊO3ư²ÈÁ†é#åû§Ò€%¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ¤2J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠÏÕô‹[Û+Æ[y/$…‚HÑ®íÛp¿1ü+FÑ.ŸS/ªéÈmÄNM²A¸•ÇžÀó]V.ÿç•¿ýþoþ"Œ]ÿÏ+ûüßüEa<<'57º%Å0EoÅIkÑBø ã|#Ŭ_îŠëä–x|ÑGå¼É!%G® Šä|'Äýn†wÐ}ÁE}ÁE0uþ¬×x¤n8õ8¯EºÿVkÏ|H3qõqü躲ÿ}¯ýqOýTõ—üƒíëŠè"§ ¯ü~Çÿ\ßù­X5]ãö?úæÿÍjÁ Ÿ¥UnµiúUVëH;Ç—[YšY#VxRN}é^c6³c<†4¹¸” œ|ýçø€¯Dø•l.´èïÈž öâqŸÖ¼eôˆb¼’Þ‡œ>Ó×?ðä)®ºÝŠÍÁ²Kü í\þy¥µ×nu5û5¡ŠÎ¥·¡ÞÇž{Â°Ž–¶–ò;`Q@gð:ŸéZ:-½¶ž‚Sù³µ|Ôd^œu  d¶TCšÑ—És(ì}O©úŠ¡*K·÷(oõhó<ð+Fá•c10„bI˜™ì>œVDÁ\³p§%Ò0Â4÷\p~”YndbÛáÉ\ˆ¤PQ²z–ÇÞtš^–Ö–&3ò™ ¼ø<·¢çYÚT÷w^yDãw Óù=½«¦L”Ræ-‘ÇW=8 v¤¬€v`wcÎ? S·Àä¹ä“ÜãùSçÙ£ ˧¾ÞíøÓ, û\ŒÑ/îþîïAКնWDbU–¹¾µ ÷!–Ü´eRNÞ åƵu»ôÓô×*²¯bqØŒt®ÂÉs­Ý\8tDà{° ÚŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š(  þB‹ÿ\¥ÿÑm[¾â$…¢ÈQ딿ú-«{Âü  ò¸(¢¸( ]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@Õ—üƒíëŠè"§¨,¿äkÿ\SÿA=5ãö?úæÿÍjÁªëÿ±ÿ×6ªÕ‚('éU_­[pqÒ«ºœô¤;â-5uU’ÝÜ"……²W=åÖ¹u𒻸”o|‚Ûy÷Ý]­ù>uÁLXâï?Qù×à:K¡p÷ÇËûpóX¼°ß„þ ôyØŠÕcQÆËNΈF.7h©sá=¡ž «øãŠA'™”PØ ¼–ö5rßÁÖpijA}ˆ¶ä0É]½s÷±ŠŽ CO°]Fx§Šæ7º-帟zï1ŽK±<sϵkY\iz~‹¹»†â ’L2º©Ëãc'¥aä/þ½ð‹ÿÓçþBÿëÖ`Õ¤“OŠ8ïd70is›…óô•Bà°ëœçûÕ‹2×ív«©É F&ßsrÜÌ|Âw(` qÓµ7[·—à»Ø9aØœxv3pÐ Óæ*‡#È8ÁÈçIÿ¿ý>ä/þ½fÿiÏ%¼¯—0À-áÜL­!Eó]ÕŽsò½éƒO†d¹›ìÖڅ̶m¨¬k"]9%|ÄÎq»ÞŸ¶Äkïmä…ËÅÿøEÿéóÿ!õê9ü;µ¼“Ë}¶8Ô»+8d÷¬û‹Ë´†ÚnÙmR[˜ŒÒÝ´*ø@Ò'8Ï®9¥Õ&±I«¨2ìà`h¦)òÛ¹Ü~ï×¥ ¶#O{ðCä…íbëh(„›ã‰ˆ ˆ ÉÆ}xàw§Éᤊ6’KõDQ–fRsW.¤’(ôeGd2«€q¸yNp?*ÁÿH:<`\\Î×Ú\ï"I+I—pTq÷¦8Šïí~ ÏËÈ!¦† ð¸#"÷ ÿÓ/þ½/ü"ÿôùÿ¿úõŸ{yÁ`¶Wßñ/u}ó>¡"'Ë€dÃÔü¼åMÔ¯&†ÕÆ¡©ôEw)Ô£îs¨›ÇImK«[g@6í!»žô{zû©þ9 ºZÿ‘kþú|ÿÈ_ýz?áÿ§Ïü…ÿ׬ëy¯­ì-f¶¸¹šâëN–R²HÒfEÚAPIÁùŠÓÑ'I5Îòk»?!YÞY ›eÏ@OCŽ«ÛŽ¯ˆI¾oÁ$; ÿ„_þŸ?òÿ^øEÿéóÿ!õë¡¢±úíæü~ÊŽ{þú|ÿÈ_ýz?áÿ§Ïü…ÿ×®†Š>»_ù¿ÊŽ{þú|ÿÈ_ýz?áÿ§Ïü…ÿ×®†Š>»_ù¿ÊŽ{þú|ÿÈ_ýz?áÿ§Ïü…ÿ×®†Š>»_ù¿ÊŽ{þú|ÿÈ_ýz?áÿ§Ïü…ÿ×®†Š>»_ù¿ÊŽ{þú|ÿÈ_ýz?áÿ§Ïü…ÿ×®†Š>»_ù¿ÊŽ{þú|ÿÈ_ýz?áÿ§Ïü…ÿ×®†Š>»_ù¿ÊŽ{þú|ÿÈ_ýz?áÿ§Ïü…ÿ×®†Š>»_ù¿ÊŽ{þú|ÿÈ_ýz?áÿ§Ïü…ÿ×®†Š>»_ù¿ÊŽ{þú|ÿÈ_ýz?áÿ§Ïü…ÿ×®†Š>»_ù¿ÊŽ{þú|ÿÈ_ýz?áÿ§Ïü…ÿ×®†Š>»_ù¿ÊŽ{þú|ÿÈ_ýz?áÿ§Ïü…ÿ×®†Š>»_ù¿ÊŽ{þú|ÿÈ_ýz?áÿ§Ïü…ÿ×®†Š>»_ù¿ÊŽ{þú|ÿÈ_ýz?áÿ§Ïü…ÿ×®†Š>»_ù¿ÊŽ{þú|ÿÈ_ýz?áÿ§Ïü…ÿ×®†Š>»_ù¿ÊŽ{þú|ÿÈ_ýz?áÿ§Ïü…ÿ×®†Š>»_ù¿ÊŽ{þú|ÿÈ_ýz?áÿ§Ïü…ÿ×®†Š>»_ù¿ÊŽ{þú|ÿÈ_ýz?áÿ§Ïü…ÿ×®†Š>»_ù¿ÊŽ{þú|ÿÈ_ýz?áÿ§Ïü…ÿ×®†Š>»_ù¿ÊŒ[=ìSµÇÚwìŠO—ËÆr„zûÔÞû£ëZmþª_úäÿú ¬Ï }Ñõ¯OVui¹MÝÜç«dwp}ÁE}ÁEv ºÿVkÏ|Eÿ1×EþuèW_êÍyãæ/úè¿Î€;«/ùÚÿ×ÿÐEOPYgû:Û|”ÿÐEs¶:_ˆàñj3ÏfÑÌvÍÎäy}‚Go^}h¤› µrr cóÚ£6·ÝÿÉÉ?§_øýOúæÿÍišž£•§M{q¸Çäª ³€Ü“€>´€®Ö—?ÜÿÉé¢kkîåBoð© Õìî´dÕVO.Õ£ó IÁAÜ7¡ƒôªöZ—ö€w[K¨#Øó O0àg#ñ€Åñ>°Ú6вAh¢ä,±“¸œ£Àäû¿^¾•ÉEã=BDýžÜFßtìcÇ¿Í[gŠÚÎÚy£g.m‹`ãoó\"ÚË$’ÿg•Äçt¹Ûžàb± sw’»)NKDΑüg|¸ÄV¤gÃcÿB¨“Æš¤Œa´úÄç“V麅º’Vp²ž}zÓìÄísµ‘@üoÆ~€ÔýVòÚO¹ÚræHÂãÄ·úœ‰æ[Z;l»ó%T`yåCí?CZ0ø²ú î–¶©æœ¬M̘ÆOÍÓ€+Œµ¸’ÝÒ9B,©û¶ÁãÐçמ•ÑYQPÜ[8\ãòíGÕ©ZÜ¡í%ÜЗƚ´GkCjNã’ rzðÜÖeçÄM~ÖäÂ,ìç?êÜ|½Ïßý* â”]«"2BøIãè*…íªÍqïˆÙ PªìÇsÖ—Õhÿ({I÷'Š~%†é–m.ÌC¸íÄ2n#é¿úV‡¾"ëz®¡$VVpªÆ\mF œ€3—=r³ZËsª€#@Ã(ϯçÒµô;y#»if6#Ä8ãŽÞ”}Vò‡´Ÿs¸ÿ„–÷þyAÿ|Ÿñ£þ[ßùåýòƱ¨£ê´”=¤û›?ð’ÞÿÏ(?ï“þ4ÂK{ÿ< ÿ¾OøÖ5}Vò‡´Ÿsgþ[ßùåýòÆøIoç”÷ÉÿÆ¢ªÑþPö“îlÿÂK{ÿ< ÿ¾OøÑÿ -ïüòƒþù?ãXÔQõZ?ÊÒ}ÍYõû«ˆZ)#ˆ+uØ]àC)–šÌ¶Q´pA Û˜±vf>¤–$þ5›E?«Rµ¹CÚK¹³ÿ -ïüòƒþù?ãGü$·¿óÊûäÿcQKê´”=¤û›?ð’ÞÿÏ(?ï“þ4ÂK{ÿ< ÿ¾OøÖ5}Vò‡´Ÿsgþ[ßùåýòƪ]êo|á®!Gc`’EFêñFŠk I;¨‡´—sgþ[Ïùåoÿ|Ÿñ¦>¿q$‘»ÛÛ3FK!*~SŒg¯¡5“E/ªÑþPö’îlÿÂK{ÿ< ÿ¾OøÑÿ -ïüòƒþù?ãXÔQõZ?ÊÒ}ÍŸøIoç”÷Éÿ?á%½ÿžPß'ükŠ>«GùCÚO¹°|IxÊAŠÜ‚0~VÿH¼Cs IP[$h¡UBœ:µ‘EU£ü¡í%ÜÙÿ„–÷þyAÿ|Ÿñ£þ[ßùåýòƱ¨£ê´”=¤û›?ð’ÞÿÏ(?ï“þ4ÂK{ÿ< ÿ¾OøÖ5}Vò‡´Ÿsgþ[ßùåýòÆøIoç”÷ÉÿÆ¢ªÑþPö“îlÿÂK{ÿ< ÿ¾OøÑÿ -ïüòƒþù?ãXÔQõZ?ÊÒ}ÍŸøIoç”÷Éÿ?á%½ÿžPß'ükŠ>«GùCÚO¹³ÿ -ïüòƒþù?ãGü$·¿óÊûäÿcQGÕhÿ({I÷6á%½ÿžPß'ühÿ„–÷þyAÿ|Ÿñ¬j(ú­åi>æÏü$·¿óÊûäÿð’ÞÿÏ(?ï“þ5EU£ü¡í'ÜÙÿ„–÷þyAÿ|Ÿñ£þ[ßùåýòƱ¨£ê´”=¤û›?ð’ÞÿÏ(?ï“þ4ÂK{ÿ< ÿ¾OøÖ5}Vò‡´Ÿsgþ[ßùåýòÆøIoç”÷ÉÿÆ¢ªÑþPö“îlÿÂK{ÿ< ÿ¾OøÑÿ -ïüòƒþù?ãXÔQõZ?ÊÒ}ÍŸøIoç”÷Éÿ?á%½ÿžPß'ükŠ>«GùCÚO¹³ÿ -ïüòƒþù?ãGü$·¿óÊûäÿcQGÕhÿ({I÷6á%½ÿžPß'ühÿ„–÷þyAÿ|Ÿñ¬j(ú­åi>æÏü$·¿óÊûäÿð’ÞÿÏ(?ï“þ5EU£ü¡í'ÜÙÿ„–÷þyAÿ|Ÿñ£þ[ßùåýòƱ¨£ê´”=¤û›?ð’ÞÿÏ(?ï“þ4ÂK{ÿ< ÿ¾OøÖ5}Vò‡´Ÿsgþ[ßùåýòÆøIoç”÷ÉÿÆ¢ªÑþPö“îlÿÂK{ÿ< ÿ¾OøÑÿ -ïüòƒþù?ãXÔQõZ?ÊÒ}ÍŸøIoç”÷Éÿ?á%½ÿžPß'ükŠ>«GùCÚO¹ÑéúåÍåÑ‚HáñI’ ç„cëíW<1÷GÖ°4Où /ýr—ÿEµoøcî­k q¦­b\›Üîàû‚Š û‚б ºÿVkÏ|Eÿ1×EþuèW_êÍyãæ/úè¿Î€;«/ùÚÿ×ÿÐEOUìÀm:Ø0 ÷ùEsV>¶´×Ú숚Î3æAߘ?¹ô¿N@:øÔCcæ @>ÇáX"ƒQÔuM6ÊÉU#‰Ü³O •º—b,¢íQŒc¦À  ÂÑ+2öOþ½=ÉBâ¡o~•½’ë ç!:ç?ãQM0dÎxëùÐ.ö2^j³5Ê&æ$Þ…{óÇò5,š-Ê([yFGÜ#¡üMk^: Už1Ò˜ŸC’?‘©æˆË‰!pŒž=ýs@"ßUŠ'D–Y°(ƒëx¬ùÍô+¶K¶@Ý‘Æ@ÿ¾xÕHê-©1Œ¤m#†Çø:Ï»/qn[¥¸vP8õË5Ýã’¦ë>èTSÜð¢´<',ÓêÒÉ$’²O3Œò¹ zvªwqȯ,eä'Ýc’}0y?ãZ~E}jîT9Hâ '•c𠮊( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š(  þB‹ÿ\¥ÿÑm[þû£ëX'ü…þ¹Kÿ¢Ú·ü1÷GÖ€;¸>࢈>ࢀuþ¬×žø‹þ>bÿ®‹üëЮ¿ÕšóßÇÌ_õÑwV_òµÿ®)ÿ Šž ²ÿ}¯ýqOýTôÕÿØÿë›ÿ5««¯ü~Çÿ\ßù­X4ôª­Ö­?JªÝiÀüQŽI47XÝ—æ„§¨Û?ʼïFÒÒÒ5ór€ç“ÜפüKÜ4Êãƒs陫‰SŃasŒçÿ­L ¼ß !FpG¯?áWÚÜi–ÏÍÏVl70™FWp$ŽÀÖê b2 »”Œ{Š«¬náq„ 3šŠ8Ìs˜J…¹ý¿Z|‘l™rØ^ƒ#Û¡«7¿cÆê&¸r~ö{P6ž­ç_>2êË˲çWa)¤Â<‡U+–~ws“ø~U¬ñ¶£~§Ï+(¹P§õŒ›ÙíÁe*Á[œãGùï@[Æai³°ÇÏî}…RŽØXI/šâFHò¬26Œž:úŠÖ½–8™æe1Îk3XhÒÎYŠ£H±°V8ÈÏÿ®€9IZKJÌ“ó|Àc¶G§~3ZžM—WyR ;öÀàŽÝkNv¸¹i›8@2I=N>™­? ³I©Îä¥dÇâãüþÖÑEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE¡¢ÈQ딿ú-«Ãt}kDÿ¢ÿ×)ô[Vÿ†>èúÐwÜQÜP.¿ÕšóßÇÌ_õÑz×ú³^{â/øù‹þº/ó êËþAö¿õÅ?ôSÔ_òµÿ®)ÿ Šž€¿ñûýsæµ`ÕuÿØÿë›ÿ5«€"~•UºÕ§éU[­ 8o‰y: ÈD<ÿ뫃ŠXÞÚØ†-•ä〸¯CøŸK–2»òxõâjó-«¤Éª@~-'êOéõü(žÖuÛ‹ï&8cž`“Îg•v–#8zsY×zíæ« VÐÚMåÊv’üßáVî¼7¨eà«}ÏœzzuÇéIþ£á¸`I>Ç!eÂJÀ† Ûžÿ•> Þ5¬hè¶Ù;K> ö®ŸNÓtý>-¶Ä4ã‰<Ÿþµr3êÚµãäÍÆ>P‰¼|ÿž•³áx&+5ÓÈìŒJòÙç®}¨¢¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(KDûDþ\¿ú-«wÃÖ°´Oùúç/þ‹jÝðÇAõ¬(¶ÜïßüެLRTì·êÎî¸(¢¸(­ÎQ—_êÍyãæ/úè¿Î½ ëýY¯=ñü|Åÿ]ùÐueÿ û_úâŸú©ê /ùÚÿ×ÿÐEO@ _øýþ¹¿óZ°j°!o",@A>¹^?CVH Ÿ¥U~µq”‘UÚ6ÏJ@`kvj.ñLX*¬,6ã9Ì£¿Ö°ÓÂzlm¹<Ålç+´úô®’ô™$¹hˆ;V8÷v7’? ¸¨­öBš}Êß,ßœÀ~‘ž‡¡¯3R¢ªÔee§âtSŒynÑ+éº<&ê'7auÂG¿q`€ªIüª{oè÷Éuo#˜›çWG¶~ïµCb––Ñê[,o ²žd¬òÆãä ( Aæ´4_2 6ÖÊâÚQ¹dÛº>|¡ñÀb¤}y¬'ZªZIôü‹QTW±Ò´«Ûw6W“I ¹F(ÃnG^ÜÓáðý¤Ñ~׫ØåyÁê:µ.žZÂ+æ{i¶µëlTŒ’Tíéïè+‹I.í…å«ÝÀf¾!/>hÁÀߟzZ²nÒÒ¸8Åt6O„´ÒA"BG¿áRÂ5g‚<ÛŒœná\åôA¥Èu{i¦a§âز<—Ë}ìgkcgÌ}:×cev—lJ®ܬnHࡸüÅ)Õ­u;‚ŒµŒ(4Íéå’'¼cmÒ ƒ†)ƒÈè éQ®…á½J)d—[õŸiŒ!ŽáÔ1Þ­é®ö×’‹hõ§¤,î“ÂÀ¬›²d9ùºdt©4kuk½A– ±ÊP¯Û·³Œîûÿ6ß»Œû✫ÔI¾f‘ìV±ðƃsiÅ&ÉFDUœ|´—ZN‰§Ü<·¼€ Œ•Æp70\ÄÓZÊíü9coo±_‰˜Å)R<Ÿ™‰fã€W#ò)/&Ðí­ ±Ô#ºD„o°HñŸºFFIn½GZj­NoÚöÿ‚1¶Ã®,´k[‘Ó_«—TÈr…A¸&Þþ´ôÓt‰/˜¸ºó…t*v’¸8ö5¥4R\ë¶ÂHÛȶˆË»)£ŸP7~uQ‡Ú+e³ºY­t¹à|ÂÀ!@ q†Î1š±q¥EÚíã‚[{I ÊÃlÒ!3g(£žÜ=*½¥Uöÿ«‡,{LJ¬ÍÃEþ–PÞa+´ç<:ñúÔŸðYÏYÿï¡þŠ`¼’ÞWþÏ{xþÏ ¼PÆP2 ŸpQÔ¼íëÎ(µ´µ½á·±?`šî… *ªåHànÇQÔÑí*ëïì+G±µÿÕ—üõŸþúáPÝhV–“\¼—%"Fv Ë’ÏVMŅȆÚ) sc·(#{Wœ/Ïû³±H8ÛœqOÔtöÍí½ÍþtõŽÖAnÌVP$¨ÉV9^O§ZJº{ãåö4ÿ°¬Š@ËöÆÊ•ùÉã§oÆq éÖ¶ò\M<ëj]Û àOAS^C+.Œ7&9Ô¾;G”ã'Ó’+ =X´¸RÚÉãšãL™.B»äÂíÝþ×-מ´£Z£ûÖ¿ä 1ÓChxnÉ”0–|‘óð¥ÿ„jËþzÏÿ}ð¬{ëDš³XtõWBús°¸c•>¸n­C«Û­½Œ£QŽ{µM5VÚf…ŽÉl’9Øßw“éÖš©UÛßbQc{þ«/ùë?ýô?ÂøF¬¿ç¬ÿ÷Ðÿ É’Âê]t¼ÅÑŒ±5¼ÂÍä!\¨6¸G~õ£¦$|Í$¶…nï/fŒIå€Ì»™$ó· ÇáS*µRº˜ÔcØŽãIÒ-&‚ï%Igp‘!a–>í-΋§ÛIlŽ÷$ÜKå. ðv–çöM^Ö-Ì­bñÂ]Öî2Ì«’œûT"‚9£°3Û=ź]•#'˱‡*$dŠQÄTv÷˜Ü"¯§Aá²ÿž³ÿßCü(ÿ„jËþzÏÿ}ð¬«kƒ¦}œé§ììÓ½·›hó<##b…S”'’ éÀ«N™„ײZHo’âÔÇ.ÿnØÃàõÇÞÏnµ~Ò¯ó’Ô{®t]>ÕíÕÞä™å. ðpOµ[ù‹öpìcÂ5eÿ=gÿ¾‡øQÿÕ—üõŸþúá[4QõªßÌÎŒoøF¬¿ç¬ÿ÷Ðÿ ?á²ÿž³ÿßCü+fŠ>µ[ùƒÙñÿÕ—üõŸþúáGü#V_óÖûè…lÑGÖ«0{8v1¿á²ÿž³ÿßCü(ÿ„jËþzÏÿ}ð­š(úÕoægÆ7ü#V_óÖûè…ðYÏYÿï¡þ³EZ­üÁìáØÆÿ„jËþzÏÿ}ð£þ«/ùë?ýô?¶h£ëU¿˜=œ;ßðYÏYÿï¡þÂ5eÿ=gÿ¾‡øVÍ}j·ó³‡cþ«/ùë?ýô?ÂøF¬¿ç¬ÿ÷Ðÿ Ù¢­Vþ`öpìcÂ5eÿ=gÿ¾‡øQÿÕ—üõŸþúá[4QõªßÌÎŒoøF¬¿ç¬ÿ÷Ðÿ ?á²ÿž³ÿßCü+fŠ>µ[ùƒÙñÿÕ—üõŸþúáGü#V_óÖûè…lÑGÖ«0{8v1¿á²ÿž³ÿßCü(ÿ„jËþzÏÿ}ð­š(úÕoægÆ7ü#V_óÖûè…ðYÏYÿï¡þ³EZ­üÁìáØÆÿ„jËþzÏÿ}ð£þ«/ùë?ýô?¶h£ëU¿˜=œ;ßðYÏYÿï¡þÂ5eÿ=gÿ¾‡øVÍ}j·ó³‡cþ«/ùë?ýô?ÂøF¬¿ç¬ÿ÷Ðÿ Ù¢­Vþ`öpìcÂ5eÿ=gÿ¾‡øQÿÕ—üõŸþúá[4QõªßÌÎŒoøF¬¿ç¬ÿ÷Ðÿ ?á²ÿž³ÿßCü+fŠ>µ[ùƒÙñÏGcŸ­ÇLì¦ÞFùÈ';J»áŽƒëLºÿ‘†/úõ“ÿAz†z~5ê`$åM·½ÿÈ1ªÜ‰/êÎî¸(¢¸(®ã„e×ú³^{â/øù‹þº/ó¯BºÿVkÏ|Eÿ1×EþtÝYÈ>×þ¸§þ‚*Q,fVˆ:™Ê à‘øÊ¢²Ïöu¶:ù)ÿ Šçì¼1i­ÿj6°’JìLÃìÄyЇïð:cÓ€:)råaTV. ùú;þ¢¢:gµŸãmÿÙU…ÿÔÿ®oüÖ Öu1¤é’ÝùFgX¡Gc…P}É€‰´±ýÛüÿìªÓWûšþöT¶Ú´Ú–ƒý•¢5ÃŒ5¼²ìØàá”¶ÓÈ öíTtbóQ¾½·¸°Šµ`$WUg#%yUä gëO­€ÈñÆ«¨iš +cåÁp—H­±WkFQÈ 7NWô5凯Þ/‚w]ù€çb¬Q=3ÅzwÄV°‚J¼ ¸õÄþâ¼µ­ekée’m§ªsÃ`qƒýk9R§'yE?‘JMlÇAã1ièºF2ê–ñóÿŽÕíž(œy·ºœi'÷ Ç¡kSŠ4°Øá ò”PY=yÏ~™© XmãÙ#:€70YHÉì6ž? ^—ò¯¹<»5ωµ‡·+ö€þw8ÙJ÷$éYcÅ:µ³ñ·Ìq´ˆŸáÀÓÓÚ©ÊÛØ™@Ù‘~½ þµBqÌeCÐ#6ÇûÀô4{_ʾàç—siuÝ_RÔm÷ÜÚÏ2ã÷­kïÁ+‘ð®š-PÚÍöŒÛ²#O»Ó=:“\v™·¶’}ÌZ|…v6Üòß^‚¶•ü¸W#,0Y@êß´{ʾàç—sZOjÑ—?jÎ:/–½OEéøÔ)â=a¤1ý°089'ð¬yžV¹TUftáTŒnsÕ¾‚´ìmÉ3'Ï ù™»ç¾(ö¿•}È9åÜÚ½×nlí7ÉvªprÅWü+’Ð|q­jzÝÌM}¾Ùc,‹ä Ç Þõ•ãMpDz†Ts/-ƒÈWÁ18¸šLa xúœþ½—ò¯¹<»ž‹ý»©ÏÏþ8¿áGöî¥ÿ??øâÿ…gQG°¥ü«îAÏ.æöî¥ÿ??øâÿ…Ûº—üüÿã‹þE—ò¯¹<»š?Ûº—üüÿã‹þnê_óóÿŽ/øVu{ _ʾäòîhÿnê_óóÿŽ/øQý»©ÏÏþ8¿áYÔQì)*ûs˹vmZòæ†yX›ï#ÄŒÔI©wkŠÝã†1Ñ#…À §EÆ•­Ê¾àç—sGûwRÿŸŸüqÂíÝKþ~ñÅÿ ΢aKùW܃ž]ÍíÝKþ~ñÅÿ ?·u/ùùÿÇü+:Š=…/å_ryw4·u/ùùÿÇü*¼×Ó\ΓΰK*}ÉÝ—èHâ«QB£Im÷<»š?Ûº—üüÿã‹þ‡[Ô Î –¼~•ŸE—ò¯¹<»š?Ûº—üüÿã‹þnê_óóÿŽ/øVu{ _ʾäòîhÿnê_óóÿŽ/øQý»©ÏÏþ8¿áYÔQì)*ûs˹ uÍDŒŽ?ëšÿ…[ÔT.€kþŸE—ò¯¹<»š?Ûº—üüÿã‹þnê_óóÿŽ/øVu{ _ʾäòîhÿnê_óóÿŽ/øQý»©ÏÏþ8¿áYÔQì)*ûs˹£ý»©ÏÏþ8¿áGöî¥ÿ??øâÿ…gQG°¥ü«îAÏ.æöî¥ÿ??øâÿ…Ûº—üüÿã‹þE—ò¯¹<»š?Ûº—üüÿã‹þnê_óóÿŽ/øVu{ _ʾäòîhÿnê_óóÿŽ/øQý»©ÏÏþ8¿áYÔQì)*ûs˹£ý»©ÏÏþ8¿áGöî¥ÿ??øâÿ…gQG°¥ü«îAÏ.æöî¥ÿ??øâÿ…Ûº—üüÿã‹þE—ò¯¹<»š?Ûº—üüÿã‹þnê_óóÿŽ/øVu{ _ʾäòîhÿnê_óóÿŽ/øQý»©ÏÏþ8¿áYÔQì)*ûs˹£ý»©ÏÏþ8¿áGöî¥ÿ??øâÿ…gQG°¥ü«îAÏ.æöî¥ÿ??øâÿ…Ûº—üüÿã‹þE—ò¯¹<»š?Ûº—üüÿã‹þnê_óóÿŽ/øVu{ _ʾäòîhÿnê_óóÿŽ/øQý»©ÏÏþ8¿áYÔQì)*ûs˹£ý»©ÏÏþ8¿áGöî¥ÿ??øâÿ…gQG°¥ü«îAÏ.æöî¥ÿ??øâÿ…Ûº—üüÿã‹þE—ò¯¹<»š?Ûº—üüÿã‹þnê_óóÿŽ/øVu{ _ʾäòîhÿnê_óóÿŽ/øQý»©ÏÏþ8¿áYÔQì)*ûs˹£ý»©ÏÏþ8¿áGöî¥ÿ??øâÿ…gQG°¥ü«îAÏ.æöî¥ÿ??øâÿ…Ûº—üüÿã‹þE—ò¯¹<»š?Ûº—üüÿã‹þnê_óóÿŽ/øVu{ _ʾäòîlé·sÞj‹$ï½ÄR¨8éõ­o ôük Dÿ€ÿ®rÿè¶­ß ôük<:IÍ.ÿ¢:qNêŸøVwp}ÁE}ÁEtœƒ.¿ÕšóßÇÌ_õÑz×ú³^{â/øù‹þº/ó æÌ…Ó­‰ Oo”T ®iH±ÇªØ»±Un’O`3V,¿äkÿ\SÿA“iák;MrMEX”ûÑ@GËŸ¼ÃúÙ>ØÛ_øýþ¹¿óZÈ×4Ëý[VÓãŠi-m-·\5Ä{™z"…`{9#Ó½k¯ü~Çÿ\ßù­X4Ìi:n££]ê±3Iwo6.a™ö)iH!Ô…À€s€95&a.¡ÛCp¸º`d¸äÈÇsr:òkyúUVëHâZ»i@!p|È>à$ž'ô5äs)Ýä¹eœo cñ5ì¾>î4æD Г¸gt÷¯ ¸…àÂc A‚™ÉþF˜ö𘮥3¢©@K‰íƒîkBÞ)¶Ç*òÈwVÎ3܃ӎý©,àI­çr˾yöÌWŒúæ­K <2B[Ìfg™€øu`à:Y`YÀ_c¯Ï,‘¥xèõü;}j›E%Ôehü×"2ˆ»BB§¡=r)ð¸13ÈpOÌŒƒÎ8'54¡q lËó¹ÎÜà¼÷  5h’Cº8€Pà…ÿRÂͽT2Eçž›R~Pˆ²Í媟¼uÇA]¢Ã~ Iõ?á@XÚ,‰iŸ«éUµ}RßL°’âY’3€„}ãíIy¨Ãi–œ² <2‚s\µÜ7#¾F™˜ÛFv¤}?@v6—^"ÕúpVÙ-Èú^‰e§­¤ "Dvìc¥O§é°ÚÛ¦FÀ«·,Íá ƒõÿ9  ”QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEihŸòõÎ_ýջសahŸòõÎ_ýջសsÐÞ~¿¢:ñ_ ?ðþ¬îàû‚Š û‚Šè9]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@Õ—üƒíëŠè"§¨,¿äkÿ\SÿA=5ãö?úæÿÍjÁªëÿ±ÿ×7þkV Dý*«u«OÒª·Z@r>:”æÌÀàâ?ò5y‡›PÝ’[É#pÆAëÔñÏ•z§ÄÉL: ä6ܘ«É­eT†iÚEW=vq×Ô☠²oÜÙC½S;¤'ÌÚqÏ^Þµ °<к©&I‡–§å`«‚sÆ givÍ$k)~a6‡ëíÓ·­j<7lÀ$¾ðG˜"àc@Aj·Sª:«$*®<’=xë[é¢Ú\Á°À3ü$pG½« ˜í%Ù7ÚmñŒAÁ'Ž{f·ôÑ!„ʳù‘?ìÝýé@qi/i«J²»1 òz©<Ÿ¯o¯\^ÇonË&õ 8e?*·ª‘EvØV‰ü¹7õÁ¬Y-[Vî¹6Ö*pÎÍ’øêô÷çé@vºéinÁÄjÀžçô­ûib†1äÙNüõpqïW´ûM*Â’) HóóHÄ~¤Öf¥â°Ò¥Žb’gêǃÜdöæ€4cÔR6t–) }»€cwãVMÌSDR6RU¹ÁÎ8ÿëÓt‹¸õ]->Ô©#ùcx#¯\þ¹ªIሴ}NKÛvýÌ©³iê§9Ǹã­[¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(KDÿ€ÿ®rÿè¶­ï ôükDÿ€ÿ®rÿè¶­ï ôükž†óõý׊øiÿ‡õguÜQÜWAÈ2ëýY¯=ñü|Åÿ]ùס]«5ç¾"ÿ˜¿ë¢ÿ:äkÿ\SÿA=Aeÿ û_úâŸú©è«ÿ±ÿ×7þkV W_øýþ¹¿óZ°h'éU[­Z~•UºÒ…ø“es¨iÑÛÛD$&h p…Ÿ“øâ¸#áèãhúçy*Œyú×wñ6ök)d‚c4Ð!`¹à‰ëÊÌ÷¹c,ó†X {céLßOm>hÖ;X" ¿(*£V¼‘AÂö?¬é‘AfîYwž00TúÚ¶îfT@8×§Fö4væ5lxgÏ€‰yf6󃪑ÁCÔ:¥q~Œ29低)ÕɦŸzÚzqÓ‚ImåK¦ËŒ <ãø€ë^V*rUZRkn§M4¹v!¥\›¶µ°kÈà‘QZÚ}Ûò¡‰É`8Î:Õ»k-"ëM[èm$hÙ Ënã¶3Ö¡Š Œj2O¢<±]ʧìÌÑ€€düÛz\Õ‹Ô4í*(Ÿ›"Ç#*ùÃs”'¯éÅsÊ¬í¤ŸN¾Zõ-Eu_¦•}$ÑgÏo4$oŠf €FAáˆÁç½'Ùô8£ßyö[|Èñ®ë¾iÇ\Ž}Gj~ž×6vsÏ=„âå™^y&’%Ø‘†8UŽ8÷¬›i[í–sCh׉+^²¢²Êd\7Ì@ÇøÕ)ÔmÚNÞ¾B´m·àlÜYh6 ËÛÂ$û†K‚»¾™<Õ¡é¤d[ñÿ]ük”½‰ôk9-®)®.tÿ"8ÖUßËü 1˜—'åé]…Ä’™âh F¬OßùA'ó8ü*jJ¬UÔÛù(·fŒ»Km:ñ$’="ébPÛdi$*q…ÉíÜ lèòÇtÒØÏnÖÄ RBK ŒŒmcœûsO±¶¹·Ô%¸ƒM–ÖÜBÛ­Úu>l™ˆ^üñœÔú5œ–÷W“ /°ÛË·e¶å?0ÎæÂ’xè{Q*²IûÏïÿ‚«±•®‹{iopÄäˆÒY ±#9Ï^ Cwh‰/ØešÙ° Ä2nEÉÇ?>O>€ÓdÒ/.<;m¦”ò¥2–iƒ À 0zž¦’òÒîëJ·³þÆ s`E:ÈmÜn;€à= 5R\ßµûôûÁÅ[oÀ}Ü:uÔp¾vË$‹J’)V'ÛÌÝÇ9ã±§­¶—ý¤¶2i·;îòävù_o\a‰ˆ}í¦—\‚i6öð‘ÌŒpxöQÿUCk<þ †í4ãkå–\Oߦ …$žp~lc*´ÚÖOnïüÁÅv ¿G°•£{ åòãÊѱ"$ÉŽXz™¸¢uf£¤Ýôê *û~?³´MŠÿ¹ÚèdSçœXsӑϽG¯‡¥·{ˆå¶x#ûò-ÎU~§vf 3R{$´kSo§OjÌB²³ ·œŒíî\»Ò¤k‰ßì’¼mogtWó˜än ddu⛜—ü¼˜Y)4vz<²9D·kuˆJ&[¢r #8Ï޹õô¤ò|6mÏÚ-<€ÛL¿jùséØÍfÝYêešïPX—lPîó_dÌÛ[•+žÙ5&œ²j·Föm°h‰9e#hƒnAƒÏ¡4ù§fùÞžbÓ±¥%–ƒº\Hð$÷dk‚¾‡85§‡¦Y¼ò¬!„lñ£Ü23Ï5FMþ6†DŠm‘Ër<¨ ;‚»åHó\cèyúÓî4‹«kyb·±’é&ÓÖÕ7IøH ÷²@#æ=:P§-?xþñÙ_cA´Ý8%£}’?ß°tì¸Ê“Ç?1ã§ãÚ¢xü<-nn"0Ü-²‘`Ÿ{¦ïj·ug<‹¥Lù“‘ò-‡ãÉ“ý‡xÚm¤IF›5¼‡páØ.Ðq×jcVOy¿¿ÔVšVEºó­„ v‰ ÏËŸLîÆjK‹-Ð!¹x!÷ —w}2yªWÖš…ãÙ] K˜¼¨Þ'†7€¿Í·æò¤pGPk;UDÒ!–ÛËóš}5m¡G–?5Ü1ŒÙÈû¹ätªŒ§&’›ûÅeÕiú\%»y+;Œ¤fr‡°ÎM$Z~‡<òA†I£ûñ¤ä²ýFr+=´k¦Õd2­ÓA4ÑL„* Ãnø+ü'¡úÖ…ŸN Û÷7³C• f qŸAǽL§4´›oÔi.Ä7–Ú-•͵¼–Ò4—B g¹9Àj6ºN›öfšX¦›Ëib¡Ö9$ŸöqøÕýRÚ[‘gå&ï.ê90£©¨µ˜'“ì2Ãj×>EÈ‘ãR ‘µ‡ˆHïSÓv¼ŸÞ7­—B -ßøûØZoüûãíþ5£Eaíêÿ3ûÙ|‘ìgai¿óíÿ·øÑý…¦ÿÏ·þ>ßãZ4Qíêÿ3ûØrG±ý…¦ÿÏ·þ>ßãGö›ÿ>ßøûhÑG·«üÏïaÉÆwö›ÿ>ßøûØZoüûãíþ5£EÞ¯ó?½‡${ߨZoüûãíþ4ai¿óíÿ·øÖ{z¿Ìþö‘ìgai¿óíÿ·øÑý…¦ÿÏ·þ>ßãZ4Qíêÿ3ûØrG±ý…¦ÿÏ·þ>ßãGö›ÿ>ßøûhÑG·«üÏïaÉÆwö›ÿ>ßøûØZoüûãíþ5£EÞ¯ó?½‡${ߨZoüûãíþ4ai¿óíÿ·øÖ{z¿Ìþö‘ìgai¿óíÿ·øÑý…¦ÿÏ·þ>ßãZ4Qíêÿ3ûØrG±ý…¦ÿÏ·þ>ßãGö›ÿ>ßøûhÑG·«üÏïaÉÆwö›ÿ>ßøûØZoüûãíþ5£EÞ¯ó?½‡${ߨZoüûãíþ4ai¿óíÿ·øÖ{z¿Ìþö‘ìgai¿óíÿ·øÑý…¦ÿÏ·þ>ßãZ4Qíêÿ3ûØrG±ý…¦ÿÏ·þ>ßãGö›ÿ>ßøûhÑG·«üÏïaÉÆwö›ÿ>ßøûØZoüûãíþ5£EÞ¯ó?½‡${ߨZoüûãíþ4ai¿óíÿ·øÖ{z¿Ìþö‘ìgai¿óíÿ·øÑý…¦ÿÏ·þ>ßãZ4Qíêÿ3ûØrG±ý…¦ÿÏ·þ>ßãGö›ÿ>ßøûhÑG·«üÏïaÉÅ(´«+c$°ÃµÖ'ÁÞÇøHîj ZÒoõRÿ×'ÿÐMføkú×­—ÉÊ›rw×üŽjû£ºƒî (ƒî +¼Äe×ú³^{â/øù‹þº/ó¯BºÿVkÏ|Eÿ1×EþtÝYÈ>×þ¸§þ‚)úÖ[él’tk˜”;Æ*Oóî=E-—:u·8ýÊsÿ‹kákMI/ÓP¿iÕË’ÍÎOPß' ÐëïyR$`¥bØÎÇOÌS«ÏÜÿ’ñ4¨Ä]*çå(Ä¡_ñ5S^Ô¥Ó4Ö’ÝK¹]a¶ú4Œp3ŽÝϰ43Z¸ñûqù'ÿQ42ù~¹ü£ÿâ+%¼G8ð„Ú¡¶Syo˜ç„gjH­µ³Ôí~•‹«Ý_Þ]ÛÏ%ÊB¨Ëug‘nÏËÉ<Œס(5û›ˆì„-).’£ å,¥_Ç|©ý+Í.5+øõÃöâ£DÇožØÈ=†kÒ¼K+˜<²ß"G¡>n¯,Ö·E}i&r<í¼œ2†î=EKŒ^­ìÓ·ÕnĬí{tÑÐÊ}1ÜúâŸ.³|#3%ÔÆ4ù›çnÅP–ED·³ŒÁ›ã5YÚæq"|Ë4nàlã§ý){8v ³ª·Ôe”Åþ•)V]ÙNZ¸oeIvù²àö.süë–Òï'+*vu~nµ~Ü%¼- ’(Ê‘ž½†3Ï{8v ³MîÝm¼Çº‘@wàæ³ç¿¸ùÒÞêáØÞ99ÏšÈÔ.–Úp×{ÚVòàçüÿZ–Þ[Lî·¼l§²OqŸoǽ΂ì˼OG$’Ûësˆ¹93>88À$Ÿä3Yð_x¶Îéî.µ)nbeÐÝ2…Qß¿Zè'y&G\+#¶ç`„’}˜ªÎÂKT…ä Ûv<„€Y@8÷ægÁvQ—ÇZ´ÐhÂðXÌ[çžµ6‡®ê×zŒ‹>£1UˆáfÆr9ëY1øvKKèä·¤Œ¶IXÓžµÒ[4&@±Pª@\屟ÇgÁvi}¾÷þ~çÿ¿‡ühû}ïüýÏÿøÕz(öpìe·ÞÿÏÜÿ÷ðÿo½ÿŸ¹ÿïáÿ¯E΂ì±öûßùûŸþþñ£í÷¿ó÷?ýü?ãUè£Ùð]–>ß{ÿ?sÿßÃþ4}¾÷þ~çÿ¿‡üj½{8v ²ÇÛïçîûøÆ·ÞÿÏÜÿ÷ðÿW¢gÁvXû}ïüýÏÿøÑöûßùûŸþþñªôQìáØ.Ëo½ÿŸ¹ÿïáÿ>ß{ÿ?sÿßÃþ5^Š=œ;Ùcí÷¿ó÷?ýü?ãGÛïçîûøÆ«ÑG³‡`»,}¾÷þ~çÿ¿‡ühû}ïüýÏÿøÕz(öpìe·ÞÿÏÜÿ÷ðÿo½ÿŸ¹ÿïáÿ¯E΂ì±öûßùûŸþþñ£í÷¿ó÷?ýü?ãUè£Ùð]–>ß{ÿ?sÿßÃþ4}¾÷þ~çÿ¿‡üj½{8v ²ÇÛïçîûøÆ·ÞÿÏÜÿ÷ðÿW¢gÁvXû}ïüýÏÿøÑöûßùûŸþþñªôQìáØ.Ëo½ÿŸ¹ÿïáÿ>ß{ÿ?sÿßÃþ5^Š=œ;Ùcí÷¿ó÷?ýü?ãGÛïçîûøÆ«ÑG³‡`»,}¾÷þ~çÿ¿‡ühû}ïüýÏÿøÕz(öpìe·ÞÿÏÜÿ÷ðÿo½ÿŸ¹ÿïáÿ¯E΂ì±öûßùûŸþþñ£í÷¿ó÷?ýü?ãUè£Ùð]–>ß{ÿ?sÿßÃþ4}¾÷þ~çÿ¿‡üj½{8v ²ÇÛïçîûøÆ·ÞÿÏÜÿ÷ðÿW¢gÁvXû}ïüýÏÿøÑöûßùûŸþþñªôQìáØ.Ëo½ÿŸ¹ÿïáÿ>ß{ÿ?sÿßÃþ5^Š=œ;Ùcí÷¿ó÷?ýü?ãGÛïçîûøÆ«ÑG³‡`»,}¾÷þ~çÿ¿‡ühû}ïüýÏÿøÕz(öpìe·ÞÿÏÜÿ÷ðÿo½ÿŸ¹ÿïáÿ¯E΂ì±öûßùûŸþþñ£í÷¿ó÷?ýü?ãUè£Ùð]–>ß{ÿ?sÿßÃþ4}¾÷þ~çÿ¿‡üj½{8v ²ÇÛïçîûøÆ·ÞÿÏÜÿ÷ðÿW¢gÁvXû}ïüýÏÿøÑöûßùûŸþþñªôQìáØ.Ëo½ÿŸ¹ÿïáÿ>ß{ÿ?sÿßÃþ5^Š=œ;Ùcí÷¿ó÷?ýü?ãGÛïçîûøÆ«ÑG³‡`»,}¾÷þ~çÿ¿‡ühû}ïüýÏÿøÕz(öpìf¶‘ys.¢K‰ RåYÉ÷m[^þ¦¹ýþB‹ÿ\¥ÿÑm]†¿©ªI-‚÷;¨>࢈>࢘†]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@Í™ÆlNx: ÿ¬Ø­Q˧Iwr­„P³dyŽÙ9x­M:ÀÈí.¤Ò"Ø2¶[õ«¹ŽK·ŽYcòËon2r:{TvšLÜn³µbû žýût®‚ÎÅ- D»:a@ÑEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE¡¢ÈQ딿ú-« ð×õ5ÏèŸò_úå/þ‹jè<5Ôÿ¼hºƒî (ƒî (—_êÍyãæ/úè¿Î½ ëýY¯=ñü|Åÿ]ùÐueÿ û_úâŸú©ê /ùÚÿ×ÿÐEO@ _øýþ¹¿óZ°jºÿÇìõÍÿšÕƒ@?JªÝjÓôª­Öï‰Y—îŒçÉÏÓ÷ÕÉÝä®AÅu~&.1´ã˜r}¿}\Ô‹˜ÊŸá¦¬XrËiÑÃ#!ÁüG¡éSif ËvUP’•êGQÓÿ­Z·‹ Êð; ž¯zæ®­î4E’ò/Þ¹ó#QÈÏ~¼Ð-CPŸN»kym–x”æ2¯µ±’8'éT^ù®eT‡M‘¥à!¸rÝqŽ3WÃ{|<µ{Ÿ“jÈ{1ú6þ(+û°³¿ÂÀþT5¿†]åXîüæšL´²6öÆÚÔ²ŽæþÈX³ul`~Õ¼²$ۤʈ£\dœf«¾©«µ‰ç>NühÐé‹ãÆ¶ÃæÜ#åÆ1õÇåYÒĦñþÈfÉ ¹ùS=O½i}žæõ‹ÜÉåÆF6%XUŠÚÝ–ÀêHš¥caäy yJšR ìÈÝÔ¯zÎÔO/æbyíùV^‘w¬½ÍâˆÑ o.3÷±¹y#ðýh ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(CDÿ¢ÿ×)ô[WAá®§ýã\þ‰ÿ!Eÿ®Rÿè¶®ƒÃ]OûÆ€;¨>࢈>ࢀuþ¬×žø‹þ>bÿ®‹üëЮ¿ÕšóßÇÌ_õÑwV_òµÿ®)ÿ Šž ²ÿ}¯ýqOýTôÕÿØÿë›ÿ5««¯ü~Çÿ\ßù­X4ôª­Ö­?JªýiÌø©€Øñ<#ôœÿJãç¾2#¬QÈü•à`tîk©ñ¬1Ψ_Ë’Uz‘‰ÁÇç\­´QDÄù™ Îô¦7­Ë¨Bë<¨‚ÞS‡ ˧­Gc})³dk[©c9ÃÁ#•Ú0ЫI_BF)<¸T¯ë¸yu­…Ô™1Á1·~ZH9ÉÛÇN+SK°Õ­î±Ú¢/ËùÏxœõëÍvÊ!GâiäÄ>bÃN aÁ¦\Ϋö¹Ô€wyhxúÖÔǬQñ´t”Ç!™¡æ\œ|ž+ PÕo0a†Êá¤RvÜ"GÒ€6®õX-­‹ùŠY>ôlp~Ÿýz宼A}9:TooÃ$:-Î¥0›RrX÷R>µ½ö K@$Ž=ΧªýæúÐZ5­¬Ÿi¹êæS•`A,Þ•½oeörf—æ¸|ÍØî§ëSÛZÇæ‰v‰sòŒð£ÐR»œàacêh¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(CDÿ¢ÿ×)ô[WAá®§ýã\þ‰ÿ!Eÿ®Rÿè¶®ƒÃ]OûÆ€;¨>࢈>ࢀuþ¬×žø‹þ>bÿ®‹üëЮ¿ÕšóßÇÌ_õÑwV_òµÿ®)ÿ Šž ²ÿ}¯ýqOýTôÕÿÔÿ®oüÖ¬ªÍåÎ’ífP¥NÑ’3ŽqøSì>“ß—ÿ {ôªÎ9§µìtŸÿäÿâjº‡û·ø 'ÿH íF¦žE–4‘Dq:‚:ËX+w¡¼3L#‡É‡ïHmˆSÎ>S· ÏfºÈÚdšVFD“lK»‚@ÞsŽß{ô®a4­DééîmGÙ|³o*³å½qÆqÎ ¯#ÿzîí±ÕM{£-ï´ùF£1²‹É·‘R5û6ÇbTa€9$àp*æœ-/´¨¯[M†2èXÄXŒvéÏJ¯‹us<×7sý–ffAháÀ!6s½9îzU"Æ÷N³¶µ’X弯'æ?(\1ׯ5Ï9+hõÓ¯‘ikª¥›MF´¸­Ìs4[·äã§^•Û4˜ý&+vf–UQ £7Ø9Ç=*Ô6×V^¼~S<—&`ãòg€3»àø¬{hu%»´¸µ´®ß;£ ¯"•Î ‘Îõ¡>fÝôõò¡¥q{ ÛGÈ2¼~h1Û™>Oï à{šÐ6L¡…¥¹d~ì…r·ºuî—k%¥¬fêK«?!ñ˜ –ä0R |ç†# æº‹&º-:O¢FÁ!#« £$þ9…*—Jñ“ûÁofŒí9ÓPŠY—KÓÄK¸&Ù1  €.qêiš}Ý¥äoý—læÝ‚ÿ¢í™d8ΰ9ý*[}:ù5/Ì0J hÕ!f"V$\í1èzš±§YÜÇ{w{v ŽIÂ/—Q·<’@É9ôì)ÊjÏ_Ä,W³¹Ón,-nn, ¶7,QQ0 à°ìj Ûûhíg‡O³šÞà€„’>N>D+óuÏQO} k &gŒD\™ÙI'nâÀ.G\㟭-Õ†«w¥®"Ø”hÂI6æÊàýå]¸Î0zŒjQæ½ú÷è ; zM¥ì®a$sÊ#B$Ãã'nÌp=i{c®f¾›e’¬Á£uvP1‚ë´mÎxäÕóg#k1Ý»)Š+sc<†', ?Z¬ï®ukk‹…µŽfvFÙÁr9<ž@©U4ÕôîÁ¢¦§yi§ÜIivÒˆaÊXª¤‘òŒÇŽœvçš±«‹M;M7kgoÃÆèAáœÀç8& Öt[BíämdŽ6™ˆkfé€yäwtsV/ôXä´”ÙÃn·’ß¡y_!p$ò¶ý÷ïÆìmÛ»§=*„Ú=üV²\\\ fHâ+€òÉ+8,0@Î3Á8©4ëKëëƒ}<+oþž'ØÛ†PC³€Ê_P*´³|Ïk¯y¡%¬W8 rçfËrÌq×å ‘ŽüqÞ Ôïô‹–8mä”Û™¢ n\Ž Ú8R{œT2øzëzM#È’Î|±s$ ¤¸|ÉÎF"Ÿq¢]Å ±éél{5µxå•ÿw€Ø*Ø%‡Ìx8éI8éï?¼zßbëÇh‰bÆÞÍ î†ƒ;²¤àc¡ã¿UWÔôF³¹žÚÚ)ZpncÞ£º–^G¸ÏZ¿sa,£N Éþ‹(wÉ<€Œ¼~$ViðýÃéö–Í,@Åa-«°$üÌ8äpiFQ{ÉÿWžšZóEŽÚ9å¶XÄ™ÚfÁÎIÛ·v®1EÍæ…hˆÒ¤^?4íÌŸ'÷ŽÐp=Ï^ëIÔnÚÒæE€\@Gܱ«)ÛÎõƒ•é‚*Ž©gsa¶Ö¾gÚ¬VØÄV‘¸ >Ò?ˆýâ;ÕFÍ¥Ìþñj–¨Ù{;µµhíĬT¨ÈºØÀ'°&¤¶:UÜòôlÑ®~ÌBä®>†³ÿ°%þÒyYVkydŽV u,{B¸¿+}ÐFqWm ¼°òáDÖkÉd•†NÈØ³Ns´w¨m[I;ú_ª~ö–W6)$ʱ™j3ê{ŸjMYìôß±±³€Ç,þ[âßyÆÖ<Î@ìjæ£i%صòÊ*á%mǨqïLÕmnn>É% …¤·ŸÍÛ+• 6²ã ïzRŒö»üFã½»ÞïCK4»0Æ`lëjÍ·wa~\wÎ(k½ nűŽ0²®~Ìve€*7íÛ’ïÞ¨\hZ›Û°Y£c9•æ‰n$…¾0APK0x9« ¡Ü­”ðù‘y­äS“Ò1=ºü‡…]ãüÏï%ߢæ÷L]BÖÎÚÚÝä{Ÿ&Söc´|¤rf´nâÓ,­šââÚp î9'€2y"³×J¿†hcgkH.Þé_s íÇnÜc«uÏáVæ·¼Ô´HeŽ+¦0É"òJº±ý K–Ö–ž£¶¯B/ô‰Òâ{¾ÀÑ”þé%@ØóR­Æˆ÷¦Ñc·3n)þ£å,J†Æ öÎi’i¼³8x°÷ñÝOÝP Ž~SQ&x%ŠÝž±Et×JàŸ0’K#·\ôíG4™ýágÛúÔ–ÚóB»Ýå$,fRd·( ¬ (È÷-”š> \[A 2Jµ¾ÃƒÐá€È>½*‰ðôòØYÚÉ,kåXÉm#)'æ`¸#ŽGÊ}*õïöƒ^ß}\@ D‰g%‰ ~]½MjÎÒx+ö.}‚Ëþ} ÿ¿cü(û—üúAÿ~ÇøUŠ+i>åÙþÁeÿ>ß±þ}‚Ëþ} ÿ¿cü*Å{I÷ "¿Ø,¿çÒûö?°YϤ÷ì…X¢i>ádWû—üúAÿ~ÇøQö /ùôƒþýð«Qí'Ü,Šÿ`²ÿŸH?ïØÿ >Áeÿ>ß±þbŠ=¤û…‘_ì_óéýûáGØ,¿çÒûö?¬QG´Ÿp²+ý‚Ëþ} ÿ¿cü(û—üúAÿ~ÇøUŠ(ö“îE°YϤ÷ì…`²ÿŸH?ïØÿ ±EÒ}Âȯö /ùôƒþýð£ì_óéýûáV(£ÚO¸YþÁeÿ>ß±þ}‚Ëþ} ÿ¿cü*Å{I÷ "¿Ø,¿çÒûö?°YϤ÷ì…X¢i>ádWû—üúAÿ~ÇøQö /ùôƒþýð«Qí'Ü,Šÿ`²ÿŸH?ïØÿ >Áeÿ>ß±þbŠ=¤û…‘_ì_óéýûáGØ,¿çÒûö?¬QG´Ÿp²+ý‚Ëþ} ÿ¿cü(û—üúAÿ~ÇøUŠ(ö“îE°YϤ÷ì…`²ÿŸH?ïØÿ ±EÒ}Âȯö /ùôƒþýð£ì_óéýûáV(£ÚO¸YþÁeÿ>ß±þ}‚Ëþ} ÿ¿cü*Å{I÷ "¿Ø,¿çÒûö?°YϤ÷ì…X¢i>ád@¶vÑ,¼(â'Ã*GÊjŸ†úŸ÷ó­&ÿU/ýrýÖo†úŸ÷ó¯c/mÓwïþG-uiÔpQDpQ]æ#.¿ÕšóßÇÌ_õÑz×ú³^{â/øù‹þº/ó êËþAö¿õÅ?ôU Ö¬n5i´ÈåÍÌK’1Á=À=Èã?_®,Ù éÖÃþ˜§þ‚+6 èö×1ÜCm*ËïVûL§ ëËP«$ÉâªT³êqŽ?Zy²‡ÖoûüÿãH¿ñúŸõÍÿšÕ_\Zi链»•míÉÚÍÕ±ßh¿ @[k(ë?þIÿÅT k÷®?ð&Oþ*°eׯãðt÷ TjV’ýšêM™Á‚´›Gm§~:sMеvºÕïl«© QG*\¦ÌÄ‚§gËØ釩‹5[M «Ÿ:=1$…e“Œ÷å?#\ Î¥ª]³3ÈØã#È®AÅw¾1ÓÓRµxœ¸Ûäºìÿ|9öæ¹{KƒÉ•ÓÍ,v–`Äa×ð  _éòý™®YÙ£~ŽqÉç>µÓ\N±Æ«¸ä2? æ4ËÕ´ºWŒ€…?xXm.ON;ž¼ûUmOÄ‹&;€l(É9Íi]_®3œäǹÀ¨ô;¦¹Ögp±F70ã$“ü«”¶›Q¾·’k{r0¹i¸ c¯ojÝðsKhú¤—[›0Œ©?¥tĽËÏÉSOrN©®uUÞØ"¸WÎ#9Ç·á[v2æ å8?¸ù‰É9ýxü+šº€NØŠâH¤Lmxþ­Û½eÞÏ«X[³ÜCosüÍjsŒçüõ«ú}Ì kiq j‘\¸€%¸n'×'ðɬ]h_M¥Ï4“Iá@=r1ßhðë›Ï ù*¬ŠåÞ›‡ äwÿ è®t+}VÙe`a¾O”J½ÈãÖ²Òò褖ŠRX™X>ðÆ2?ÏzßÓï<ØD»pæÛŒ`çtìÙ·OSíýòá7ÎÞ€1h¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠÐÑ?ä(¿õÊ_ýÕÐxo©ÿxÿ:çôOù /ýr—ÿEµtêÞ?΀;¨>࢈>ࢀuþ¬×žø‹þ>bÿ®‹üëЮ¿ÕšóßÇÌ_õÑw6gu±œ@œÿ(¬[_ZÝßÇeŸ~'y {YcùH럟 õ·eÿ û_úâŸú¦G§YŨK·S(Wu ‘ùJ°¿ñûýs浟ªx~ÛXÔí®/Äw¶ñº­¬‘îRìGÎI=€ÀîkAãö?úæÿÍjÁ¤=oáÑ¥O}&‘,6q\¢ƒìû’99p£tÎhÓtìù..&¸k›Ë‚<Ù™BŒŠª8dñï[Òª·Zåa‚AG8?ΫZ,’^(*pñHƒ<Îàz³S_m{$U8$óÇòGò4EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP†‰ÿ!Eÿ®Rÿè¶®ƒÃ}OûÇù×?¢ÈQ딿ú-«¡ðßÞ?ïç@ÌpQDpQ@ ºÿVkÏ|Eÿ1×EþuèW_êÍyãæ/úè¿Î€;«/ùÚÿ×ÿÐEOPYÈ>×þ¸§þ‚*zjÿÇìõÍÿšÕƒU×þ?cÿ®oüÖ¬‰úUVëVŸ¥Un´€ÄÖí£¹¬ƒ!D,¯2ÖuËG»Hä,h=:VüKóÏ*D<¸‚³ôÝûÜ*ó­GV¿ñ,Öêl¬”bI˜ä¾=ùëL bÿ®‹ü躲ÿ}¯ýqOýTõ—üƒíëŠè"§ ¯ü~Çÿ\ßù­X5]ãö?úæÿÍjÁ Ÿ¥UnµiúUWëHgÅvÝǶ}»PÂãwL;¯çX–‚ä ÞŽÿW÷Ï©úvüë¦ñ ·RMËí÷=‰Ï2ñÅaÝêvØ&êp>B0=zSýêB<÷£CˆÓ~OðËÁŽÓÜK!3Ý+—'ª  OçÐUûŸ2æø±LAÛÈÈŸ©æ«Em/Ê£•Ÿ}Ð1´~†€6 »X|3}!ùUC2©ÿk ýk[¦‡Ä–†3û¥HÝm¤ ¡º’Ý­IMüG*çØTsYLíÈ×Iyr1øƒ@ž-¹2y…ÙQÏ$ãã\Nšñ&¦öòp²áÃŒqŸÇ­t·ÐÞ\Ã[©ðMdˤjywð£OîUÜ0Gö=hWÑd‚ý¶Èf2+ŽA\ŽÕF4†Ú/2{vIŒlâXúN1í^€tëk£Ý@Ø”`¡ëÁéK©è–2ÀÑ•XjãvÜã¨ïœ¥`²}"k„a4q®ÙG·äMo鬺|¨ÊÊ®¸ìsüë:çIžÛÃÒØØî–]¤)$.àÝTöëVt{k›h‘gˆG˜P? üÀc·ã@”QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEhhŸò_úå/þ‹jè|7÷ûÇù×=¢ÈQ딿ú-«¡ðßÞ?ïç@ÌpQDpQ@ ºÿVkÏ|Eÿ1×EþuèW_êÍyãæ/úè¿Î€;«/ùÚÿ×ÿÐEOPYÈ>×þ¸§þ‚*zjÿÇìõÍÿšÕƒU›rJ’ªïÚ •Î:~T¦é¿çÒÍ?øª{Ž*³ŽiÍrçþ\®?4ÿâª&šCÿ.7?œü] (^.%$à¢þrÖë°µ›Þk¥·ù|§*?}¸àlÏ'@ë]ͬÒÇ,’Ds!TŽHP®;åsÉáËá§ ¹v†-Ÿfao‡Œ¡wá±ØW‘‹‚u]×oø'U7hèV·Ög-¨¼°J®“$P[I´6æ@@Ê’9$œäàUí2îæûDŠå–s"›¹\TqxfY$–mA¥žw”J’ „&Î6¶z{÷§ZèÖ:rYÛ\ÌŠ±ºîh™ÎæèÃ'Œzw®yA5¢×N±i»ê&—yw=Åå½ÑÍ»*‰`RªÄŒ•Á'‘õïP¦¶±b1 Ýä¯,À*"6ñsV-t}VÇN6é"˜)äÚ',ç9-ëÇ'5‡­ý¢Öx¢6¯ºéÜÉ™³Ìpʤ8î ST“mÛOøæÐµ7‰-40Ü\ ‡Ï)GîÓž[q‡Ž¼×V‡B2+˜¿ðÞ©mZép\8ž×ìóHñ©SË|Ç, Ÿ˜ô ×¥tVvzŒop'W1ïî¨P==rjjQV¼F¥®¦^•©]_›€×6‚U ‹q +Çó¥²ÜŒÀQ¦ê—·I|SMnÁP*4ò3ʾJ~ýªÔz&§ö¶»žã}ÂÂÑBRÔª $HÜwqRØé–÷3Ý];Oq0U% 1¨UÎ>§½9CGeøÀ ”­uÀº=­ö ¢1+‘ãÿWÉœœãŒgÔÔZ޳uomky*C1_ÝO n9 ràíN~j´|5$š\tÆG¶G-*ˆˆóFI¯$}qI6ªOb¶2^³[ü¹Iµ>c¯ûÛ°0 Áõ¦¡kÛ¯g·Ü »XeõÎ¥¥k Z2\I@Û•Ë1møý:‘H5¸üB–˜Z)˜b'B `Œ18sÏ!zVˆÒfþÔ¥d!`òQ<³òó’sïùT?ØÚ„ºŒ77S"Ùá‰-ÊH#ælœàÐ •5];fn·®O§^y1›tÄBDY&á·cb`Œž½G>­«Ç Œ¦Òâ7º†X„‘DÊΠȠ‚; Ôº—‡n¯§ã‘¢Kˆ+ÛïùA'å9O'×·jÿFšóO6Ñ«Äû‘–CnUƒ Ž3ÓÖš‚÷tõÝÞ¥¬¤ÒC[‹i…Ç•$.ŠNJ3 òFÈ=¾µ>¨Í¨éq]\Z¼,Ñ«ví|ŒåpÄãëƒLO Ý”º¸•ä¸óÄÎËU # P2p>lç&­izEîŸf-%vž(ÀH±Rª;““ïÅ)Árû«];üÁ=u*zÔZÃpR`’Ú½ÐùFB(ƒÏ_˜S?á!a•¦µº†Hü¿Ü¸]ͼáH!Šò}H¨—ÂwžI·{–hRÖ[XGÙˆdWÇ,w|ØÀì*äú Ô’Í"mÌ–ñÀRkc"¥‰ÈÈÎwSöpìÿÿäÌõ„·žW¸[˜öÁ}‘I ÎÊ*NX‘Œg=èþߌ!ÆðN'yMûŠïþöÜcÞ«?….­¬¤òÍÄÓ,qˆÄqU’FqÍŒ ØÁ=Z“NеIdû^ ßlXÈì€Ä^¦«ÙFÍÛó3'þß·h!x­îf–]ÿ¸D×aÃg$ƒÇ_¦j¾£â]:W°Žy¤6†á^4‰H;Y·èxäðx§\xAæØûcyRYœ}¢ÏÍLHÛˆÚHäqÈ5%׆nÝm$Âkam2‹\¡Qœ§æ>¢’§ 4ˆùÉå»1Ǧ––E3ÈíPwŒpsÐqÚ¨¿‰Qôùæ†Öx¤¯sž£lª£¨ÚÇÔppy­Yôy¦#/Ùdþ¬ØF\{}ìÕ/øE¤k;kgyJÃi%©""  7{coNzÒŒ#Õ~¿ð7 æÖ¼¨¡ó,.þÑ*³ u_hÆ[†Æ9óíLŸÄV±B%Š‹”òØT~î3ÐÄz:ñMºð½Ýê[=Ñ‚{ˆ ilwÆÊqÕ uã¨5WVÐuP2ÑÀ¸µÒ•D@ ãp+÷@ÕQ¥ÖŸ…ÌÑ¡&¹mוåNÈ#y•FÈݱµO9î:ŒŒÔözˆ½šdŽÚuŽ'dó_nÖe8 `篨SþB5Cx ÷²»‰¬„Ž €>GÈ+Ðv<Õ˜tBÐÃÌmu$Ó“2¸íïÜŽ}ª%I[ÝZüƤú‘êw×Vw6I ´3N±É#·#' ¿¿ó¦ë7³Ù5ƒB’Iæ\„xã YÆÆ8ÀêqÒ¯_isÞ q¶DògY¿Õ“½©š–“yx-ša– ¼Õg„¸?)\‘ýïZQ†×_˜ÛÞÏ¡Qµ¸þÂnÒÎîDBË2*®èJõÜ Ó4Óâ asåˆ. ñÆn¯–À*;¿ˆvïU®|=Ä@4‚IÌ2›‹O1Ÿ2®FÒ1€rx«KቖÖhÉûÉa“>IãË1×¾ÏÃ5~ΟÜÉr} ÷ÓËg ¬SˆZìÂó•_-ð*9ÏQ׺֥ýêiöq";€UBÆâX€É©êðåìw˜æckÃ\¤&Üî wdoÏL±íøÕ–Òoï4h-®Ëý¤žYy•ƒ=1Ré­,´ù›VU‡ÄKp±=•ä9›Èg‘W ! pǯŒŽzÔ‰®[½Ø‡ÉœFÒ˜Và¨òÚAœ¨9Ïb3Œdu§¿‡æy%|È7Þ%Ö<£ÆÐ£o_özûÔiụÍ!²Žv¸H<˜9$òÙäIÆ?=œ_Gø…ßõóÿ€Goâ;Y£2I Å´f¸G™Wƒ#i>£ƒƒÍZ±Õ#½™¡6óŲ̂$ :€YOF'üEWÿ„UÞÎÖÚV•’I-›X6ß›Û}êÍŽ{Û]]Ê÷yB+Œ*ƒž™9$õ>Ý(•8ÙÙ?Ä™vŠ“ìóÿÏ?ï“GÙçÿž2ß&±ösì]Ñ'Ùçÿž2ß&³ÏÿÁtGEIöyÿ猟÷É£ìóÿÏ?ï“G³Ÿ`º#¢¤û<ÿóÆOûäÑöyÿ猟÷É£Ùϰ]ÑR}žùã'ýòhû<ÿóÆOûäÑìçØ.ˆè©>Ï?üñ“þù4}žùã'ýòhösìDtTŸgŸþxÉÿ|š>Ï?üñ“þù4{9ö ¢:*O³ÏÿÁtGEIöyÿ猟÷É£ìóÿÏ?ï“G³Ÿ`º#¢¤û<ÿóÆOûäÑöyÿ猟÷É£Ùϰ]ÑR}žùã'ýòhû<ÿóÆOûäÑìçØ.ˆè©>Ï?üñ“þù4}žùã'ýòhösìDtTŸgŸþxÉÿ|š>Ï?üñ“þù4{9ö ¢:*O³ÏÿÁtDßê¥ÿ®Oÿ šÎðßÞ?ïçZ²C*A34n‰ù*ºk+Ãxÿ¼{zj›¿ò9k»Èî`û‚Š û‚Šï1uþ¬×žø‹þ>bÿ®‹üëЮ¿ÕšóßÇÌ_õÑwV_òµÿ®)ÿ Šž ²ÿ}¯ýqOýTôQEQEŸª\M´··q—SˆD…wlY‰Çs…ýjk ‹ØšXçþ¹7ò®_ß}¿Þ?κ‹ÿùÜÿ×&þUËøsï·ûÇùÐsÜQÜS˯õf¼÷Ä_ñóýt_ç^…uþ¬×žø‹þ>bÿ®‹ü衞}i!´m¤3Cöh÷3lr>ðö¨~Õâ¯úZÿßCÿ‹­%ƒÍQ"Â@np· £òRý•¿ç›ÿàSÖ¤Û¿3þ¾GL1 1K’/ïÿ33í^*ÿ e¯ýô?øº>Õâ¯úZÿßCÿ‹­?²·üóü z>ÊßóÍÿð)é{üïðÿ"¾´¿çÜ~çþfgÚ¼Uÿ@Ë_ûèñt}«Å_ô µÿ¾‡ÿZeoùæÿøô}•¿ç›ÿàSÑìó¿ÃüƒëKþ}Çîæf}«Å_ô µÿ¾‡ÿGÚ¼Uÿ@Ë_ûèñu§öVÿžoÿOGÙ[þy¿þ=Áÿ;ü?È>´¿çÜ~çþfgÚ¼Uÿ@Ë_ûèñt}«Å_ô µÿ¾‡ÿZeoùæÿøô}•¿ç›ÿàSÑìó¿ÃüƒëKþ}Çîæf}«Å_ô µÿ¾‡ÿGÚ¼Uÿ@Ë_ûèñu§öVÿžoÿON[2Ç}n¤£Ø?ç‡ùÖ—üûÜÿÌÊûWŠ¿èkÿ}þ.µx«þ–¿÷Ðÿâë^;Xd‰3 Àyïþ4ï±Cýé¿ïûÿÁÿ;ü?È>´¿çÜ~çþf7Ú¼Uÿ@Ë_ûèñt}«Å_ô µÿ¾‡ÿ[?b‡ûÓß÷ÿ>Å÷¦ÿ¿ïþ4{üïðÿ úÒÿŸqûŸù˜ßjñWý-ï¡ÿÅÑö¯Ð2×þúü]lýŠïMÿßühû?Þ›þÿ¿øÑìó¿ÃüƒëKþ}Çîæc}«Å_ô µÿ¾‡ÿGÚ¼Uÿ@Ë_ûèñu³ö(½7ýÿñ£ìPÿzoûþÿãG°Îÿò­/ù÷¹ÿ™ö¯Ð2×þúü]jñWý-ï¡ÿÅÖÏØ¡þôß÷ýÿƱCýé¿ïûÿÁÿ;ü?È>´¿çÜ~çþf7Ú¼Uÿ@Ë_ûèñt}«Å_ô µÿ¾‡ÿ[?b‡ûÓß÷ÿ>Å÷¦ÿ¿ïþ4{üïðÿ úÒÿŸqûŸù˜ßjñWý-ï¡ÿÅÑö¯Ð2×þúü]lýŠïMÿßühû?Þ›þÿ¿øÑìó¿ÃüƒëKþ}Çîæc}«Å_ô µÿ¾‡ÿGÚ¼Uÿ@Ë_ûèñu³ö(½7ýÿñ£ìPÿzoûþÿãG°Îÿò­/ù÷¹ÿ™ö¯Ð2×þúü]jñWý-ï¡ÿÅÖÏØ¡þôß÷ýÿƱCýé¿ïûÿÁÿ;ü?È>´¿çÜ~çþf7Ú¼Uÿ@Ë_ûèñt}«Å_ô µÿ¾‡ÿ[?b‡ûÓß÷ÿ>Å÷¦ÿ¿ïþ4{üïðÿ úÒÿŸqûŸù”ôÉu¹nYu8a‡a!‘%²8ûǶkWiôªßb‡ûÓß÷ÿ>Å÷¦ÿ¿ïþ5¬#Ê­{˜TŸ<¯d½ ;O¥O¥Vû?Þ›þÿ¿øÑö(½7ýÿñª ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ]@§Ü×6¥rÞûíþñþuÔ­œ!ýã`ç +0ü‰®[ß}¿Þ?΀;˜>࢈>࢘†]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@µ± i$MS]K{¶%Ðx<ÃdFbÌ;OáPjv×·šU¼‰ˆÌ¾zI)zw §ã¦kÃX}GÔ&¹‚™µ #‰|ï—y= aF:úv¤¿¯ÀoúüN¦Êþ×Q·óí%G’¤à‚ê<ƒìjí½?íâÈÎVrÛhØ)o@Äm'Û5GG¼Ó-,Á]F™nîH’X¾ei˜gÀÀã>•KX¾·¹Ö,VÚÿíSCt€éárÎFÐIäãŠ}RFÍ¿í½?íâÈÎVrÛhØ)o@Äm'Û5=íý®oçÝ̱G ž¤ú9'ØW;¬_[Üë+mö©¡º@t𹃂ç#h$òqÅ[×XZk:V£p¬l 2,Ž‘0XÛ‚3Û4–Ãê^]Mk)îü÷X`ǘ^R¹éò‘“ùSìµ› Bv‚Þfó•w䉣lzá€$W9­ëIªéÜvÒÅ%¤ÂRhùÉ-ósÓŒ “M'ñU¼–Ú“jËöwI%*¸·‚€/ÌxÆ3Å5¸=æÕ“ûLØEmq3¦ß6HÕvE»¦âHúð hW;eckqâ­bâkx¤š‡Ë‘”O“±íYÙy^k»BÞNŸ*).éæ|ÙÇ'Œ÷¥Ðæ•~øú× )£jré7ö²ÆË’]Uï™±¼œ•ÎpAâ¶|'º]\Ëge4 ¨ 8™Ÿ›$uúS°®t6ÿñíûƒùU}?U±ÕæÊáfJa“®:ŽŸJ£­ßKaá²Ößñ÷2¤ãÖG¯åœþ‹¥Åw kÖ1ÜYAikw´ýÕÁ—t¨ V9EÁ#pïž)-¯ëúcz/ëúÿ†:ˆu[Fk.RK¨4±§;8äôÏ·Z¹\í¥¼6Þ9¹H"Ž$:r6ÔP£&WÉâ­>¦·ÀY¶°#Ø?ãÎ;VLóÿ=~lþ”tAÕ£zIšY]R4™˜à;“Y–>#Òõ+•‚Òáäw¡0HªÀz1Pàk?]¶½½ðL±ùwS\aHæTÈ¡Áe!>\•kÇæüüŽIÛštPÙÜË«Aᥠ§I¥ºÈ°çË3œíý¬g8öÍK‚;Ú+Îî5KMA-Ày-ô[•™W†‰¶' ;ƒùTþ:oö®ýƒ·q¶oíBã`ÆñÓvîúÓ¶¿×Ÿù ú_úéþgSqª\G¯Á¦Aiá3É+ÌSb† ÀÚryõrÊößQ´K«Y<È_;[iÁ ðyê e?üQÿØ5¿ô`®cJ²¶Ômü/ky Onßl-Œ©!Ž8¡-õÕÿÞïúèz%çzm…µ•¶}o˯íw¶3n%š-ò.Ò{ŒùTr^G?Šín#[ Kßí?%àDarÉÊ–sœ ÓŽhZÛÏþù‰éë¿ù‘Eyž¤Ú~/ü¯öøÔÐGæçx‹Í]»?ÙÙéïOŽÜÜx‚u¼Ô¬ìõA¨f#,ö‚¾@¼…xÀäçšK[]¿Ìµÿ®ÿäzMcÛø….âyíôëùmÄI–5ÄŸ6ÒTnÎ\8®~éúWž[iöpxÖîXRækˆ|ÉUgÿHOzàö;m3R]In™c)ä\½¹ÉÎJœf¯šó›ç”i×ÐT‰5·kÑ$lʱ6J—U ”'ë¤ð…¼PÙ]5µý­Õ´“eÑ ÅÀʨ,ÜwëÜе_wä¿ÌoGýy“Ùx§O¼‚YØMo P%üê Å€èO?)ý)öÞ'Ó®-EÃý¢Ý|Õ‹î„3/n‡×§<â­XéGE¹Žóe­«"«ËP•äÄçÒ°¬žoZjÚ,š„z•ªÂ¾F¡ùÎp§)e Šêî/­­g¶‚i6Ërå"P¤– ztàu5BOi1[[\‰;¢Â. œ¯ÞùB“Æ=+#÷3kú Ô®¢d:|eÚÃéýiL(üMcé«tÖþRCûï6´Ñ—QËg€AýiØØŸiOûwÛWÈó<®·ïþîÌnÝíŒÓã×´émâfq³‹tß ©2‹‚‡y¤Yi¶íw«ëÙ®ÅÂÞ"Õ$ ´§pÆÞ>læ³®õ½gM´F¹ #Ö!Š ø"Ú%Îð­‘N;Ž(Z»z~ÿõ;w½·Žú;&“FÒª`òª@'=;ŠÎOèp![õ%ŸËY67–[ÐI¤þ5©éš‡öé¶œ÷—é7KJ¨›I(8Ø£õ¤ºÖt»ŸØêj-ÓOòϘ’c+Ž<秤¶¿õ»ÿ ëoë¡×®¥fúœšjΦò8Ä­B“€} Fu‹¹¼·7#ͲŒKp¡IòÔ‚Aéè:kw±ë†£o\j:oÙ¢žf_+÷‰øîÏÔ HìdÓnµ¸Á»»Ñe¸¹oY7GÐnÀö‡§ãù\#­¾_äβÃÄv§*Gh× ]w+5¤¨¤zîeõ©­5¼¿¾¶Ž6ÛhëIžŠî }rþ×4ûM&—Ä¢èÅdÙŸ(lÚ€6¨n#“Q]XBž±—R¼µ¶š{ƒy*^äÌî l~Gÿ|Ž 9+7ýuÕmΤ–Ú¥•‰Œ³]‰`x]€ëWk„H¬uɼ0“é‘GjÉs‹b2ƒF@È8È㡪/< §Ã¦]¥ˆ³K»´ŽãQV’8‚>#œ2z OMæzMçÚm¼z­·„­õ[¨š+Ë'Ì­·…<õã¥C­Û$ž Ô-ïïlìFØÖÂK˜]™hæ!³ž ü)µga-®z=J=BÚ9$´’ã}Í´ ,ß!)ÏÍéÎ’=fÂU±dŸ"ümò7ÏÆïN8õÅ Ú­Šê‰¦›”7®…Ä#–Ú;œtüj[›Ÿ³˜G‘4¾l‚?Ý.vgø›Ñ}ëöÞ|i¤•VúößQð­íݬždZÊU¶‘Ÿ”އžÔOÝOÈ!ï[ÌÓ·ž;«h®!mÑJѰFAš’¸tÛ=RæÎ+Ød@Ð7ð6~ðô>ôíÞ+ ÝÛE¶{Û ÉRs9¬ zœ÷÷ª’I¿ë¿ù =¿®ßæw´Wœh7I?‰ì.-?³àžæ)ÍÅ­ª2¼g\žH=ð;ÔV-§ùú R¿ð›Â/L™ó·l|†ÏðçíŒb¤ÜôÊdÓGo“ÊÛcK³À šó¿ [ùº¥Œ“jVêÑÈæê!ÖæSƒ¹\— ŽàíÇÛkÿò.êõë/þ‚iKHܨë+ÙëŸlŠWLÔ)œ*;ƸÚA!μwç‘ÅO¤j+«iP_,f5˜œ‘‚Gô®diöv6ž6–±@f¹äòÐ.öò“ަ±7—Ðô§–Þ;ŒñÜýªx’`~Q"†\wÆN3VÕ›^d'{z‘yt–63ÝȬÉm#$“zÍ_iÿb¹ºM p:ÆC§Ììʬ€NN zÒxjÖ8ü??lŠúÝËìtS³a'å’vŽœ“Å7Ä6ºXÓÝÝ.œt’+”Âì””œŒ9íÅKÐ¥©b×ÄIjwM Ý9Ž8ç…Ñ·…ÜTä`~¶jÅΩegqäO6Ù|—œ¨Rqýæ8ÿrË-ö½áÛÖÇws§\‰l¯"M‹pPÈ9åN8§ZÊ5/]ñÆXî-Z `ÃDŠr-ù Íÿ[iø„ui[ÿ‘»qâm*ØÀ$žRg„OŽÞI ŒôcµNÖ–_iÚÛÜ›ÕxîsäùHÒ3ã®A{xdþÂsOcpè/5fëMÓt­ç]k-EZií•BÈ\åÁS‘ŒãŒç޵RVæÄµþ¼Ž’-bÆf³T˜î¼ÝäÛF[¨ãø©£h·7í:¬–ñ‰e pI< ü«7Wºí߆åyÚÎv’éVxczªà:«ƒ€Àwõ¨uM6ù®üAl.'Ôfû-¬„:ª´ˆ$bÈ€9öç5,}?®çWiâ}úæ;x/3$Ÿê÷Æè$ÿu˜ß5vÛR³¼ºº¶·^kV 2`‚„ŒŽ¿Ò¹}kXÓõû m;I“Ͼkˆ†·ÚÀ–n>LG5F}FõcH‡Î»’þâÖDõS€ŒÝaŸ¡4ÿ¯ËüÅý~äu¯â --¯nMØ0ØÉå\2£ÇzŽ™©,5‹=JGKo´nA“æÛIÇÕÔf¸[û(ôÅ|nBÄ–®\õf ncîHÍmÿÂAkm¤ßÉmâ«]‡“ò²¬NÕÀEY—­!›¨¦§òÇ,qÎð«÷öœÙÈü(’léžYÞ-ÅÆüñÛq\Ž»§Xé:f“ÍÍ‹›8}Ž÷;.[qèùÎÞ©šÂÃ]ñ&÷OŽŽÊ9ˆ—<{Gõø?òŸ×uþgkEy]íú^hQß}†9cÓ‘]^«4’¿#llà £œ“’8®ŠÒÒ WÄvQ…n4ˆ¥_4gkîå¾´í¯õçþB¾—þº™ÙU)õ‡U´ÓÄlòÜ#ÈH<"®9?‰¸8íÍLj'[ÍJÎÏT†b2Àÿh(äÛÀ(WŒŽNy­¹‰½Oê¹ùc·{8²).GÕÉð›ér­­Žªy|‹y%òÞMŠ[dc,Øõ¥†O6äØé½Clq†\ö#Ö¼ú{m.Ú×ì0¬óE¸7 œ ¢Hõäóï]VŸ«ØÚévÐM>Ù!ÓÒæA±ŽØÂãwÛ§Z¦­ë¿ùíývÿ3j¸ÿ}öÿxÿ:é Õ,®n’Ú·Lð-®Ò38$~k›ðçßo÷󠿏(¢¸( \ÿ«5çþ"SöˆÏý4νq”5Çë¶eþ`2AÍtvªße‹å?tv©v·÷Oå^wâÛûf ioøTuägÿ}ð¤3Óö·÷OåFÖþéü«Ì?á>Ô¿ègÿ}ð£þíKþ€6÷Ñÿ ôý­ýÓùQµ¿º*óøOµ/úÙÿßGü(ÿ„ûRÿ  Ÿýô€=?ktþTmoîŸÊ¼ÃþíKþ€6÷Ñÿ ?á>Ô¿ègÿ}ð OÚßÝ?•[û§ò¯0ÿ„ûRÿ  ŸýôÂøOµ/úÙÿßGü(Óö·÷OåJªÛ‡¯¥yü'Ú—ýlÿï£þÂ}©ÐÏþú?á@•oÿѸ?•I^h>"êà4kp@$oð¥ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þè—–É{e=¬…„sFѱ^ ƒŠ[hÖÖt$¤HKuÀæ¼ëþ6±ÿ@{ûøßáGü,mcþ€öÿ÷ñ¿Â€;«%fÖ!ÔÖêâ¢Ê)Í®›·a²¤õˆ­ ó_øXÚÇýíÿïã…ð±µúÛÿ߯ÿ <€ôª+Íáckô·ÿ¿þÂÆÖ?èoÿü(³¸ÐîðMs}4"Q(µg_(09qó‚k\ò=+Íáckô·ÿ¿þÂÆÖ?èoÿü(é`;4ÑnRUs¯êŽ«y8>Çô­zó_øXÚÇýíÿïã…ð±µúÛÿ߯ÿ ôª+Íáckô·ÿ¿þÂÆÖ?èoÿü(Òª KH,mÄɲ ÌÁrO$’zû“^yÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@þ§§EªØ=œí"Å!]û€ ã§CŒj¶y¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•T.ô˜¯u[¹§œ­³oŽÀG¿Œdž}qí\'ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…wöt:p¸³·Ÿ;ÎÛÈ8fêJ©¨èKªHâ}Bùm¤dµÔFã¸?.î{àŠâÿáckô·ÿ¿þÂÆÖ?èoÿü(Ò6(Ë ¸qQÚÚÃci­´b8bPˆ çWÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Yh·ñ]Ü_ß]˜¼1Îë²6 Œ€ª2pHç5ÆÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP£Í–dx‹)Ó—ÜdŸ¨¬ëm&âÞá%}oQTäÇ/•µ¾¸ŒÖ¸ŸøXÚÇýíÿïã…ð±µúÛÿ߯ÿ ôª+Íáckô·ÿ¿þÂÆÖ?èoÿü(Ò©²F²Äñ¸Ê8*ÃÔóøXÚÇýíÿïã…ð±µúÛÿ߯ÿ ,=ÞÞ+Kh­à]±DrNš’¼×þ6±ÿ@{ûøßáGü,mcþ€öÿ÷ñ¿Â˜•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã… =*Šó_øXÚÇýíÿïã…ð±µúÛÿ߯ÿ ôª+Íáckô·ÿ¿þÂÆÖ?èoÿü(Òª¥ö m¼æ}¶ó,êªF—8ÝÇ@N~ Wÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þé$d’=ÅUÓtøt­>+8 ²GŸ™ÎY‰9$ŸRI5ÀÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð¥_ˆºÃcÛûhßá@“\‡WßïçUlücªÝ …ºgÝmhv†5ŽhÓÁ÷è†QLa‘T.¬Ä äV!Ð-q Ç!'`ª§ÃQ“÷å]ŽÀ{Q寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùR FÜ•v>ZúQ寥svÚDFV͵¨ˆ ¶Ôà  )h ÿÙnip2-8.7.0/doc/src/figs/ir4.jpg0000644000175000017500000002555213224651032013012 00000000000000ÿØÿàJFIFÿá°ExifII*JR(i‡Züÿÿ)( üÿÿ)( 0210‘ 0100 ÿÿ p 4ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀ4p"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?öíGýSWaÿ#…¿×úŠíµõM\Ešïñl ’7ddu(²–9–s4²…ds€pI u=©»¯çÖßÿÿˆ¦I ¼L§¹ÜFp'ò™‹oùë{ÿ|·ÿHdÛ¯çÖßÿÿˆ¥Š)š>}ŠBìDF,r@É8»T¶ÿž·¿÷Ëñ5"[Á"o[‰Ê÷>gO¯4Iql-æc,[l‘ ““ÈaÞŸæ_ÿÏÅ·þ·ÿU…¼Dd=á¡ñÚ>Í÷¯¿ï–ÿâhÏ™ÿ?ßøßü]eÿüü[à;ñu[ìðä-Ú“Óq+ŸÌRµ´*Û|ë’Ýp­“ù@<Ëÿùø¶ÿÀvÿâé¯J›˜#¬Ã.•Wû4Þ¾ÿ¾[ÿ‰£ìÑÿzûþùoþ&€-F‹i *(U€Sª¢ÛBÊXO>\ÉŒ~”‚Þ"2ðƒÐ€H?øí\¢©ýš?ï_ß-ÿÄÑöxr–íIé¸•Ïæ(å[ìQ“5ÇýüÿëR HÈÈ’ìPOøPª*¯Ùû÷™ÿ >É@2ÜŒôËcúPª*©´Œy×$úÉþT}‘?¿wùŸð  TU_²'÷îÿ3þ HˆÏŸqúéÿÖ  TUQi]‘ê ÿ >ÈŸß»üÏøPª*¯Ù#È[‘ž™lJSg™§wó?úÔfЦ-â#!ï=ƒÿŽÑöhÿ½}ÿ|·ÿ@(ªg‡ nÔž›‰\þb•­¡VÛç\–ë…lŸÈ ·ESû4Þ¾ÿ¾[ÿ‰£ìÑÿzûþùoþ&€%ŽÒg’tŒ -´,¥„óàu̘ÇéH-â#!ï=ƒÿŽÐÊ*ŸÙ£þõ÷ýòßüMg‡p[µ'¦âW?˜  ”UF¶…[or[®² )>Í÷¯¿ï–ÿâhåOìÑÿzûþùoþ&•m¡e,'Ÿ®dÆ?J·ESñ÷„„AÿÇhû4Þ¾ÿ¾[ÿ‰  ”U?³Ã ·jOMÄ®1JÖЫmó®Ku¶Oä[¢©ýš?ï_ß-ÿÄÑöhÿ½}ÿ|·ÿ@(ª‹m )a<øs&1úR xˆÈ{ÂB ÿã´rЧöhÿ½}ÿ|·ÿGÙáÈ[µ'¦âW?˜  ”UF¶…[or[®² )>Í÷¯¿ï–ÿâhåOìÑÿzûþùoþ&œ¶±8ÊÏpGûÿýj²Ã8ö`#Q˜äKƒ<*;(VÞ›§qêj´ÑÚ[ãλ–<ôÝ(Ò¢ótßúŸûþ?€4<Ëÿùø¶ÿÀvÿâèó/ÿçâÛÿÛÿ‹¬ÿ7Mÿ ‰ÿ¿ãü(ótßúŸûþ?€4<Ëÿùø¶ÿÀvÿâèó/ÿçâÛÿÛÿ‹¬ÿ7Mÿ ‰ÿ¿ãü)Dºq8‰'þ»ð  þeÿüü[à;ñt‘FcY·;¶÷lc'§NÜ? ˆYÆFD×ÿ®Ÿýj>Åüö¸ÿ¿Ÿýj³EVûóÚãþþõ¨ûóÚãþþõ¨Í[ìQÿÏkûùÿÖ£ìQÿÏkûùÿÖ  4Uo±Gÿ=®?ïçÿZ±Gÿ=®?ïçÿZ€,ÑU¾Åüö¸ÿ¿Ÿýj>Åüö¸ÿ¿Ÿýj³EVûóÚãþþõ¨ûóÚãþþõ¨Í[ìQÿÏkûùÿÖ®wÆ^%Òü£Ã©êcR–nº­±VmÅY²w1…=ý(«¢¼sþσ¿çÓÄ÷Ä?ürø_>ÿŸOÿßÿñÊö:+/K–×VѬµH$»H.íÒáŽu 3ŒŒàúÕoxAè@$üv€.QTþÍ÷¯¿ï–ÿâhû4Þ½ÿ¾[ÿ‰  ”U?³Gýëßûå¿øš>Í÷¯ï–ÿâhåCqiÖÏ:0ûFÏOj‡ìÑÿz÷þùoþ&³Gýëïûå¿øš¹ES6ñ’÷€z@øíÙ/vi€þ”Ï7Mÿ ‰ÿ¿ãü(NŠÌótßúŸûþ?Â7Mÿ ‰ÿ¿ãü(NŠÌótßúŸûþ?Â7Mÿ ‰ÿ¿ãü(NŠÌótßúŸûþ?Â7Mÿ ‰ÿ¿ãü(NŠÌótßúŸûþ?Â7Mÿ ‰ÿ¿ãü(NŠÌótßúŸûþ?Â7Mÿ ‰ÿ¿ãü(NŠÌótßúŸûþ?Â7Mÿ ‰ÿ¿ãü(NŠÌótßúŸûþ?Â7Mÿ ‰ÿ¿ãü(NŠÌótßúŸûþ?Â7Mÿ ‰ÿ¿ãü(NŠÌótßúŸûþ?Â¥Š;k€|‹ÉŽ»eÌÌÑwþðþB»{/õcé\BŒxšèdœ0äývö_êÇÒ˜ˆµõM\M‡üŽÿ_ê+¶ÔÕ5q6ò8[ý¨ ¾ åÖyÃÏû«þ5oåÇÝý+:'Ååçýtú× ã©åþ×-­EÍÑ´S Ž Õ?k¾’ÃC’$¼§÷ƒ‚¹äCðã9 “ksjúðÑõ êBê"â+r¨XƒËC…È`FHnAèÄzö>ÁpHé0ú‘QÛH±‹¹€Éö§úšeÓ±Ò® ˜ßä6ìtÎÓU§—ÊÓ5wþèsÿ–mÑäA1ñš<ù¯a ¹$-‚xÈëúÞÞ÷V€ê‹æX!ÌqÈ#1y¸á¹û¤c¶j+ÖZ\pî˜Û `[a>Íëb¼uÏ^i­wxÃ7“‘ë—#ù ¹$î%òâEw3nm Ó±ô?•P»oôãÿnÿú4ÔWóÌn/¢¶`³ý• dã†>n:ñÔ´€Òó.ÿç¿ýþ?üMGq/›§Ýn]¯6áœà‘Ïäký0_›ÉËý9  ‰ˆò$öRJЏ€ô2 ?B¢‹ c2€níËSîN?úíþ†´£šÆñŠ4ÿ À’^w“%!‹nòSó’:Š·¨êPé¶­<¹=•«·`?Ï$ð+Îoü6þ?½ûSÏ%²«î.®Šr"ŒB[.{ž…YÚäß[k«Zk¾þÓ²bÖóBÎ…†##Ü*µf~{“ßÌÿ_ñ5J>ÓGðÛéö1ùvÐ[º¢ç=‰$û““øÕ«FÃÝÿ×oý‘*FIy¨Á`¨Ó¶7g€É5SLñ–¯+GhÌûFXã\®¿ªÚ½ü×®›Î¶·flÙ$ØW©%”¶{aj÷€4vÒ<>;³ÜÜaäf\¥DjÆRp[¡ÛK›÷xûc.8o'#×.GòKÄÞ$—ï§?ös\ÚÜÜy3Ì% ä d6ÜýšµvßéÇþÝÿôi®{ÆÒK6¯á›8^Pó)9$"1ÏNÜúrTö«ªž0±ó#ómo­íäF·Ãå¦âp2 Ü2xäVÍéÂàõÄlÃêEq~6º±‚T¤Ad ùZg[æýàÆ:… ]ƶtk›©üñXL-œÝXpÇÜŒJWmÆÅ™ùîO0üuÄÕAâM,Çæ ¥+´¿òg¶ôÛ×=ºãžœÕ‹FÃÝÿ×oý‘+{¸‰.fFãqcqæägßü\ñŸZ¡äZÝ„÷ik¬fvuQå8§^qŒsÁèyÆqM»À¼aŽÉÈõË‘ü…rº ÂoÛ DŠWÏÛ’#oñãŽ;uí]=Û§ûwÿѦîîE¥œ÷,¥„Q´…GSœU \‹\²yãP¨bpGÔƒÁéÞ©êÓùº´7Lb±’=Á»Lù?!=°8ï“é\† '¶ÔŒzlÒ¶£,í"­£• x2® õã<ÐÆ•Þ§¤_c쎑³¨Ë3óÜžþ`øêÿ‰¬k2ë>¹¹™‹:¬‰¸õ8^þüÖ°šXmµ‚1,ÈÄÇ8ÜÂ5 gÜÐÕÇ(¸¶™¥â8tÍfÏO–?øø*<ÍÄ`± qŒu^äus[[«…½K[Ý&+¹nb‘ÚQ%ÙvªeÇðã8Ço痡뺞¯c Kw%…ìÅ 7.X²ð8É'Œ‚©7`Œy´;Û¼ ÆἜ\¹ÈUGR´Òld½¾™a¶‹ä`p2p:{š©vßéÇþÝÿôi«w1AuŠxÖHÉk Œƒ‘úŠb9ßøY~ *j,Â3 òßäÿ/Ñ]H’é³H¤2ùEÔ¦A¯"ð”³übñ|3G°\. lW ŒwW¬ÝlJ¹D*ÀÀÛå4&ìÏÏr{ù€ã«þ&§–háŒÉ#„EêÌpU´l=ßývÿÙ¸OR[}fîëS·{·†Q¼QÂdhò~]‹êTäŸn£Qp= d ŽþµNL ù@ã1£®XAXÔþçR‘¥i.|¸[øv\ã×æÜ öö­×9Ôeÿ®1ÿèO@ ¦¢=Õó²©a(PHä  ãõ5=¥þ›~Ò­Ý¥ËDvÈ!‘\¡ô8éXz¯Ú?áñ/ÙwyþT›6õÏ”:{Ö]”ºU¿ˆ|=6™%´vé¥J×/P« ´¹íóg¯½5«·õ×ü„ÿ¯ÃüÎÂòûNÓ‚ë«[Q!Ú†y7Až¦‹Ëý7OXÚöîÒÙd8C4Š Éæ¹‹ÇÓfñ­Ôš›Û=£hêÖí1 o0©TŠâbpyc6^]ûCÿÈaÿaHÿôT´óEQLGÙÞÿ’{áz>È¡D®¢îúÖÂ:òæxÆù¤¹úšå¼ qð÷Ãõãcÿ ÇWµû»¿Ó®b½µ‚òØÈaŠé7¤€€Ër8ätϽ!›V·¶·ÐùÖ—0ÜEœo‰Ã®~¢§ÍpÇ^Ú\X=¢­ßÛ–×vŸrbŽW+»>`^ääÍQ—RÔ`Ñ|Mgö¹#’Í¡ò.Úwˆ¾2<Âúg÷ÛúÛüÅäz>hÍrKq§ë gg©N‚ëN™Ì—S´‹ªT+üÄíûÇ `{S¼=sömM¬.–ð^4—¿k¨A°ÉÊœž˜-¯_òëúûΖîþÓOˆK{u´dã|Òú“DÚ…½ ºšêíˆLòBC“Åfx“ìòxwP3$lVÚR…À8;L÷ªÖ÷Úm¯„´ûCÊx¢·‹hewíÞçÒèþCìoZÞÚßÂ&³¹†â"p¿˜ª‘q €pÜ`ŠÎðå£Gs©Kvò_º¿Ùc ˆ•Fìq¼õ?—jЄæ묿úSbDÚDiý“jÛsÆŽ:’2M]ØŸÜ_ʪéò³ÿ®+üªå7bq*6'÷ò§Q@ ØŸÜ_ʉýÅü©ÔPv'÷ò£bq*u݉ýÅü¨ØŸÜ_ÊE7bq*6'÷ò§Q@ ØŸÜ_ʉýÅü©ÔPv'÷ò£bq*u݉ýÅü¨ØŸÜ_ÊE7bq*¥}%ŤСY¤d$£c~`~U~©jël¿ë¹ÿÑo@WüÍïä+¶²ÿV>•ÄÿÌÑwþðþB»k/õcé@j?ꚸ›ù-þ¿ÔWm¨ÿªjâ,Ûo‹`lÆNSÒ€:Pؾ¾çÌSm‹Yú5ÝÖ¤omõ{›WòÄacŽç8ž¼õ­¹ãŽåƒÉeu¼ nMÈqéEEö8?çÓPÿ¿ÒÿñT†b&v÷¶“ÞëWwkk!–8äH•w+Ÿ•èǽlïi²6©¶ö“úißcƒþ}5ûý/ÿSÄ )a?–ÙÜ »=rO_Æ€.³ÕHl-mîæº†Ú8çœæWUÁsÓ'Ö¢ò—µ¾ ¢Ë ðÝG”?熣ÿåÿâ¨ÍóãMºÉëîHÀ0GÂj6Ò ¤µ×<•1¨ÿ‰cEusizåN@‘ÝÀ>¸$ŒÓåÄϽ¬îƒã“rzd@-¾±Û¡hÊ8 %›?R²OÐ •ôòÆo®à’$u“dífS‘’]¸Æ: ”?熣ÿåÿâ¨ò‡üðÔïü¿üU:ê@nälŒ'ÙƒOÞ’B -å¥ÃÝ}¦Òx┠ı”G”äd÷îic+-ØÏ±³¸2»=rO_Æ£ò—µ¾ ¢Ë ðÝ@ýŸXÿŸÍ;ÿ_ÿT†ÜÙé7¾d¾dÓ+³¾1¹ÊíÃ…{w£ÊóÃQÿ¿òÿñT«+«›K×*rŽîõÁ$f€.ÎpŠO:èB‡Pà« ƒÔTFáØlç õ*=ǵµèö ãúÐË ,^X_ö¦´i¤ªƒh(Ýú’*=çþ}ïï§ÿá6—mƒ‘»sùšpÍ:œŸ‘íµhHÖ5!FëÎj”¹Üm.Aé•OéI¼ÿϽïýôÿã@ÇÆ0ƒ™#4œð¾VO§ÎMG¼ÿϽïýôÿãNYJ¡Aeqƒ×(N~¾´4ˆ²)GSÔS<„õ“þþ·øÔ[kkÑìÇõ£yÿŸ{ßûéÿÆ€%uX­%Uàlldç“ÿ×4^°#DI=†õ¨ƒá6—mƒ‘»sùš{NÎ¥ZÎvR0AN¢€+êšL¬‡›d[¿vµ_8ëß·b;ÕÈ£H"H¡c`èSò—µ¾ ¢Ë ðÝG”?熣ÿåÿ⨸X³|øÓn²zÄÀ{’0çKnØšñsÏœ=¶'ø¬±¢º¹´½r§ Hîà\FiòâgÞÖwAñɹ=2  è¼/a­& êó;3:$‡rÄX–m£¶I$ÖâðU(Ï GþÿËÿÅQåùá¨ÿßùøªuÔƒír6FìÁ§ïI?¡©ëž]_RÓo–îkY¬¥f/ùj0FÖõŸÌÕèÊÇ D¶3ìlî „îÏ\“×ñ¨ü¥ío¨è²Èü7P_‹¼'‹l¬÷RÛ€hÔ†Æzÿº+bHŦ‡,³¶ÜÆ©ÛúÔ~Pÿžýÿ—ÿŠ¥XÑ]\Ú^¹S•;¸×‘š³nØšñsÏœ=¶'øO³A¿g‹Æ6™Î?>j)q3ïk; øÆä܇™T~Pÿžýÿ—ÿŠ  ‹jáÄHwÉê«u 7r6FìÁ§ïI?¡›åùá¨ÿßùøª’2±ÂÑ-Œû;ƒ!;³×$õüh[ëXoíÞÞá7Æã‘Óàö>õCHЭ´1£2M4—šc¹Ûêjo){[êz,²? ÔyCþxj?÷þ_þ*€(éZ0ðï†n¬EÁœ#+´’Ãc'ØVÅ»bkÅÏ>p8öØŸàj²ÆŠêæÒõÊœ#»€}pI§Ë‰Ÿ{YÝÆ7&ä8ôÈ"’VÐm¶îʆ¬u+Ô¹—Ì_˜4‘£a%#¦áßç §j: ßêZMÚÍä:FqL‡uã «>Pÿžýÿ—ÿŠ£ÊóÃQÿ¿òÿñTÚ¸&Ö¨uÔ€ÝÈÙO³>Ÿ½$þ„¼ÌsTã+-ØÏ±³¸2»=rO_Æ£ò—µ¾ ¢Ë ðÝ@Š–~Ðôý@_ÙéVÐ] âHã yëÓêkRùñ¦Ýdõ‰€÷$`ΫyCþxj?÷þ_þ*•cEusizåN@‘ÝÀ>¸$ŒÐ›vÄ׋ž|àqí±?ÀÖ,¾Ò.®æ¸½·7¯,†Aöœ8Œž»xã°ú:Z’âgÞÖwAñɹ=2¨ü¡ÿ<5ûÿ/ÿ@-- ±!¶…"T`NFݨώqj}Ž\ãò#óª¾Pÿžýÿ—ÿŠ©¡!6Gep9$©$ŸRO$Ж—Z\^ ™£‡Ì2yŒpÚ÷› ~·K„4¨’ã>z D¹ë»{¯zwÚ¤òëqÿ|Qö¹çÖçþø4\¯‡¯!†¥ÒçŠyI(–—÷Åj“þ}.?EVûTŸóéqÿ|Qö©?çÒãþø  4UoµIÿ>—÷Åj“þ}.?EVûTŸóéqÿ|Qö©?çÒãþø  5ä¿´?üˆöÿEK^£ö©?çÒãþø®wÆ^²ñÆ™©Å©E WáZØ*¶à¬¸;”ŒaoJøæŠú;þ…¿ç·ˆÿïä_üjøP^ÿžÞ#ÿ¿‘ñªb;ß ¿|2Ä€‰$öc­ÛÛ+Kô yior€ä,Ñ+øTôËXô½ÏJŠÖêK{[t¶C*e™UBØÏÿ){[êz,²? Ô†Kýcö/±ý†Ûì¿óÃÉ_/þùÆ)M°Ž…,-V)‹…`:dcœv¨ü¡ÿ<5ûÿ/ÿG”?熣ÿåÿâ¨Ô–ðÌûå‚)aM΀§ªóØàqíQZiöZxaeemm¿ïyªnúàsQyCþxj?÷þ_þ*(Ï GþÿËÿÅP÷vV·ñïm ¹Nà³Äë‚*ì](Zý—û*ÇìåüÏ'ìɳv1»n1œw£ÊóÃQÿ¿òÿñTyCþxj?÷þ_þ*€'±Óìtâßb±¶µßþD*›±Ó84ëC¾ÕØrYH> »`Õc C[ê Pfƒøn« pÈ¡VÎp `Pšuõ¥¾o ÷PÅ,q…ty@ô5gûSOÿŸëoûü¿ãU>×'üúÜßµËÿ>·?÷Á  Úšüÿ[ßåÿ?µ4ÿùþ¶ÿ¿Ëþ5SírÿÏ­Ïýðhû\¿óësÿ|·ý©§ÿÏõ·ýþ_ñ£ûSOÿŸëoûü¿ãU>×/üúÜÿßµËÿ>·?÷Á  Úšüÿ[ßåÿ?µ4ÿùþ¶ÿ¿Ëþ5SírÿÏ­Ïýðhû\¿óësÿ|·ý©§ÿÏõ·ýþ_ñ£ûSOÿŸëoûü¿ãU>×/üúÜÿßµËÿ>·?÷Á  Úšüÿ[ßåÿ?µ4ÿùþ¶ÿ¿Ëþ5SírÿÏ­Ïýðhû\¿óësÿ|·ý©§ÿÏõ·ýþ_ñ£ûSOÿŸëoûü¿ãU>×/üúÜÿßµËÿ>·?÷Á  Úšüÿ[ßåÿ?µ4ÿùþ¶ÿ¿Ëþ5SírÿÏ­Ïýðhû\¿óësÿ|·ý©§ÿÏõ·ýþ_ñ£ûSOÿŸëoûü¿ãU>×/üúÜÿßµËÿ>·?÷Á  Úšüÿ[ßåÿ¯quÜö«o4syrs 60çì)Ÿk—þ}nïƒH׎ZÚàu Sþf‹¿÷‡òÛY«JâçÄ×Ge‡è+·²ÿV>”ÄE¨ÿªjâl?äp·úÿQEÙ UÜY¥™˜±l™X ´3œîl‹iíÃMÆ1™ÜôÛïÏݯ÷ŽJ) Ò5Û†›Œc3¹é·ßŸº?_ï‹iíÃMÆ1™ÜôÛïÏݯ÷ŽJ([H×nn1ŒÎç¦ß~~èý¼r-¤k· 7ÆgsÓo¿?t~¿Þ9( m#]¸i¸Æ3;ž›}ùû£õþñȶ‘®Ü4ÜcÏM¾üýÑúÿx䢀´vá¦ãÌîzm÷çî×ûÇ"ÚF»pÓqŒfw=6ûó÷Gëýã’ŠÒ5Û†›Œc3¹é·ßŸº?_ï‹iíÃMÆ1™ÜôÛïÏݯ÷ŽJ([H×nn1ŒÎç¦ß~~èý¼r-¤k· 7ÆgsÓo¿?t~¿Þ9( m#]¸i¸Æ3;ž›}ùû£õþñȶ‘®Ü4ÜcÏM¾üýÑúÿx䢀´vá¦ãÌîzm÷çî×ûÇ"ÚF»pÓqŒfw=6ûó÷Gëýã’ŠÒ5Û†›Œc3¹é·ßŸº?_ï‹iíÃMÆ1™ÜôÛïÏݯ÷ŽJ([H×nn1ŒÎç¦ß~~èý¼r-¤k· 7ÆgsÓo¿?t~¿Þ9( m#]¸i¸Æ3;ž›}ùû£õþñȶ‘®Ü4ÜcÏM¾üýÑúÿx䢀´vá¦ãÌîzm÷çî×ûÇ"ÚF»pÓqŒfw=6ûó÷Gëýã’ŠÒ5Û†›Œc3¹é·ßŸº?_ï‹iíÃMÆ1™ÜôÛïÏݯ÷ŽJ([H×nn1ŒÎç¦ß~~èý¼r-¤k· 7ÆgsÓo¿?t~¿Þ9( m#]¸i¸Æ3;ž›}ùû£õþñȶ‘®Ü4ÜcÏM¾üýÑúÿx䢀´vá¦ãÌîzm÷çî×ûÇ"ÚF»pÓqŒfw=6ûó÷Gëýã’ŠÒ5Û†›Œc3¹é·ßŸº?_ï‹iíÃMÆ1™ÜôÛïÏݯ÷ŽJ([H×nn1ŒÎç¦ß~~èý¼r-¤k· 7ÆgsÓo¿?t~¿Þ9( m#]¸i¸Æ3;ž›}ùû£õþñȶ‘®Ü4ÜcÏM¾üýÑúÿx䢀´vá¦ãÌîzm÷çî×ûÇ"ÚF»pÓqŒfw=6ûó÷Gëýã’ŠÒ5Û†›Œc3¹é·ßŸº?_ï‹iíÃMÆ1™ÜôÛïÏݯ÷ŽJ([H×nn1ŒÎç¦ß~~èý¼r-¤k· 7ÆgsÓo¿?t~¿Þ9( m#]¸i¸Æ3;ž›}ùû£õþñȶ‘®Ü4ÜcÏM¾üýÑúÿx䢀´vá¦ãÌîzm÷çî×ûÇ"ÚF»pÓqŒfw=6ûó÷Gëýã’ŠÒ5Û†›Œc3¹é·ßŸº?_ï‹iíÃMÆ1™ÜôÛïÏݯ÷ŽJ([H×nn1ŒÎç¦ß~~èý¼r-¤k· 7ÆgsÓo¿?t~¿Þ9( m#]¸i¸Æ3;ž›}ùû£õþñȶ‘®Ü4ÜcÏM¾üýÑúÿx䢀´vá¦ãÌîzm÷çî×ûÇ"ÚF»pÓqŒfw=6ûó÷Gëýã’ŠÒ5Û†›Œc3¹é·ßŸº?_ï‹iíÃMÆ1™ÜôÛïÏݯ÷ŽJ([H×nn1ŒÎç¦ß~~èý¼r-¤k· 7ÆgsÓo¿?t~¿Þ9( m#]¸i¸Æ3;ž›}ùû£õþñȶ‘®Ü4ÜcÏM¾üýÑúÿx䢀´vá¦ãÌîzm÷çî×ûÇ"ÚF»pÓqŒfw=6ûó÷Gëýã’ŠÒ5Û†›Œc3¹é·ßŸº?_ï‹iíÃMÆ1™ÜôÛïÏݯ÷ŽJ([H×nn1ŒÎç¦ß~~èý¼r-¤k· 7ÆgsÓo¿?t~¿Þ9( m#]¸i¸Æ3;ž›}ùû£õþñȶ‘®Ü4ÜcÏM¾üýÑúÿx䢀´vá¦ãÌîzm÷çî×ûÇ"ÚF»pÓqŒfw=6ûó÷Gëýã’ŠÒ5Û†›Œc3¹é·ßŸº?_ï‹iíÃMÆ1™ÜôÛïÏݯ÷ŽJ([H×nn1ŒÎç¦ß~~èý¼r-¤k· 7ÆgsÓo¿?t~¿Þ9( m#]¸i¸Æ3;ž›}ùû£õþñȶ‘®Ü4ÜcÏM¾üýÑúÿx䢀´vá¦ãÌîzm÷çî×ûÇ"ÚF»pÓqŒfw=6ûó÷Gëýã’ŠÒ5Û†›Œc3¹é·ßŸº?_ï‹iíÃMÆ1™ÜôÛïÏݯ÷ŽJ([H×nn1ŒÎç¦ß~~èý¼r-¤k· 7ÆgsÓo¿?t~¿Þ9( m#]¸i¸Æ3;ž›}ùû£õþñȶ‘®Ü4ÜcÏM¾üýÑúÿx䢀´vá¦ãÌîzm÷çî×ûÇ"ÚF»pÓqŒfw=6ûó÷Gëýã’ŠÒ5Û†›Œc3¹é·ßŸº?_ï‹iíÃMÆ1™ÜôÛïÏݯ÷ŽJ([H×nn1ŒÎç¦ß~~èý¼r-¤k· 7ÆgsÓo¿?t~¿Þ9( m#]¸i¸Æ3;ž›}ùû£õþñȶ‘®Ü4ÜcÏM¾üýÑúÿx䢀´vá¦ãÌîzm÷çî×ûÇ"ÚF»pÓqŒfw=6ûó÷Gëýã’ŠÒ5Û†›Œc3¹é·ßŸº?_ï‹iíÃMÆ1™ÜôÛïÏݯ÷ŽJ([H×nn1ŒÎç¦ß~~èý¼r-¤k· 7ÆgsÓo¿?t~¿Þ9( m#]¸i¸Æ3;ž›}ùû£õþñȶ‘®Ü4ÜcÏM¾üýÑúÿx䢀´vá¦ãÌîzm÷çî×ûÇ5¯líã’3)>t1üó9á¤Oñzçœî9( oþf‹¿÷‡òÛY«J(¦#ÿÙnip2-8.7.0/doc/src/figs/snap6.jpg0000644000175000017500000015304613224651032013343 00000000000000ÿØÿàJFIFÿá°ExifII*JR(i‡Züÿÿ)( üÿÿ)( 0210‘ 0100 ÿÿ ã ÿÛ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ä Bàw¬ëÝJH^Y¥HãA–f8{šä'ø• £•[æou‚F˜\Pæ/­bú×›Ÿ‰z/üýÉÿ€òñ4ÂËÑçêOü“ÿ‰ HóÖ1}kÍÿáeè¿óõ'þÉÿÄÑÿ /FÿŸ©?ðOþ&€=#Ì_Z<Åõ¯7ÿ…•£ÏÔŸø'ÿGü,­þ~¤ÿÀy?øšô1}hóÖ¼ßþVÿ?Rà<ŸüMð²´oùú—ÿäÿâhÒ<Åõ£Ì_ZóøYZ7üýKÿ€òñ4ÂÊÑ¿çæ_ü“ÿ‰ HóÖ1}kÍÿáehßóó/þÉÿÄÑÿ +FÿŸ™ðOþ&€=#Ì_Z<Åõ¯7ÿ…•£ÏÌ¿ø'ÿGü,þ~eÿÀy?øšô1}hóÖ¼ãþNÿ?2ÿà<ŸüMð²tùù—ÿäÿâhÑüÅõ£Ì_ZóøY:?üüËÿ€òñ4ÂÉÑÿçæ_ü“ÿ‰ GóÖ1}kÎ?ádèÿóó/þÉÿÄÑÿ 'GÿŸ™ðOþ&€=Ì_Z<Åõ¯8ÿ…“£ÿÏÌ¿ø'ÿGü,þ~%ÿÀy?øšô1}hóÖ¼ãþFÿ?ÿà4ŸüMð²4ùø—ÿ¤ÿâhÑüÅõ£Ì_ZóøY?üüKÿ€Òÿñ4ÂÈÒ?çâoü—ÿ‰ GóÖ1}kÎ?ádióñ7þKÿÄÑÿ #HÿŸ‰¿ð_þ&€=Ì_Z<Åõ¯8ÿ…‘¤ÏÄßø /ÿGü,#þ~&ÿÀiøšô1}hóÖ¼çþ>‘ÿ?à4¿üMð±ôùø›ÿ¥ÿâhѼÅõ£Ì_ZóŸøXúGüüMÿ€Òÿñ4ÂÇÒ?ç¼ßø /ÿEÀôo1}hóÖ¼çþ>‘ÿ=æÿÀiøš?ácé?óÞoü—ÿ‰¢àz7˜¾´y‹ë^sÿ Iÿžóà4¿üMð±ôŸùï7þKÿÄÑp=Ì_Z<Åõ¯9ÿ…¤ÿÏy¿ð_þ&øXÚOü÷›ÿ¥ÿâh¸æ/­búלÿÂÆÒç¼ßø /ÿGü,m'þ{Íÿ€Òÿñ4\FóÖ1}kÎáci?óÞoü—ÿ‰£þ6“ÿ=æÿÀiøš.£y‹ëG˜¾µç?ð±´Ÿùï7þKÿÄÑÿ Iÿžóà4¿üMѼÅõ£Ì_ZóŸøXúOü÷›ÿ¥ÿâhÿ…¤ÿÏy¿ð_þ&‹èÞbúÑæ/­yÏü,}'þ{Íÿ€Òÿñ4ÂÇÒ?ç¼ßø /ÿEÀôo1}hóÖ¼çþ>‘ÿ=æÿÀiøš?ácéóñ7þKÿÄÑp=Ì_Z<Åõ¯9ÿ…¤ÏÄßø /ÿGü,}#þ~&ÿÀiøšôo1}hóÖ¼çþ>‘ÿ?à4¿üM'ü,#þ~&ÿÀiøšô1}hóÖ¼ãþF‘ÿ?à4¿üMð²4ùø›ÿ¥ÿâhÑüÅõ£Ì_ZóøYGüüMÿ€Òÿñ4ÂÈÒ?çâ_ü—ÿ‰ GóÖ1}kÎ?ádhÿóñ/þKÿÄÑÿ #GÿŸ‰ðOþ&€=Ì_Z<Åõ¯8ÿ…‘£ÿÏÄ¿ø 'ÿGü,þ~eÿÀy?øšô1}hóÖ¼ãþNÿ?2ÿà<ŸüMð²tùù—ÿäÿâhÑüÅõ£Ì_ZóøY:?üüËÿ€òñ4ÂÉÑÿçæ_ü“ÿ‰ GóÖ1}kÎ?ádèÿóó/þÉÿÄÑÿ 'GÿŸ™ðOþ&€=Ì_Z<Åõ¯8ÿ…“£ÿÏÌ¿ø'ÿIÿ +FÿŸ™ðOþ&€=#Ì_Z<Åõ¯7ÿ…•£ÏÌ¿ø'ÿGü,­þ~eÿÀy?øšô1}hóÖ¼ßþVÿ?2ÿà<ŸüMð²´oùú—ÿäÿâhÒ<Åõ£Ì_ZóøYZ7üýKÿ€òñ4ÂÊÑ¿çêOü“ÿ‰ HóÖ1}kÍÿáehßóõ'þÉÿÄÑÿ +FÿŸ©?ðOþ&€=#Ì_Z<Åõ¯7ÿ…•£ÏÔŸø'ÿGü,½þ~¤ÿÀy?øšô1}hóÖ¼ßþ^‹ÿ?Rà<ŸüMâ^‹ÿ?Rà<ŸüMzHp{Ò‚ yÜ_ô"ÀÇ[y?øšêôÍn×R·YígI¢nŒ‡?‡Ö€6¨¦#îú(¢Š*­Ô›šµYz›í‰¨ɾ(ê²²ÙÙ+‘Œîà»qŒÿßYüy¾êë~"J_P´ç “ÿe®3uK6ê|qË0Å’×|…¶Åõ8è=ÍVÝ]7†¼U‡esm=¡¸¶T…OÏ$œ…ë‘ÇJç÷Qº»­I‹S³ð½àÓaœIw?ÛmÔƒóy˜=3ÅGb¶:~“¨]¶“§Ý?öáµæá#8á}1Ú‹koë§ù‡Ÿõ×üŽ'u«¾²Ò´ë_ëšzéblc<œsÇZ¡ñœêúyxDtØwD«´!Ë| vÇLPö_×AÛs™ÝFêô[-GÔ´Û}A­íbþѲ[(QbPëçËØü£ž´ÇÓ´øgÕRÇH´¿¾Òm`…-Ì;–W?ë$e¹ŸÞ—þ¿®Ÿx–¿×õý#ÏwU¥Óî[I}P*ý•&ÝÎò3Óé]Âé:l$y_KµWþÅ7²ØÈ›£Šn8Úzj††»áÙ[P·´·ŽMPí¡O*D»Sà××ñ¥ý~6ëð¹ç[¨Ý]‡mãŸZÕ Ô4HVðºÇüKÌÖÖÍ“ò”^(k©|9¡Å›–ϧÀøÛ’Ñ6@ÛætQÓsO}ƒ©ÆÀÍ[Ôl.´›Ö³¼@“ª« ŒŽEwö‰ioáR9¬mòÅ!+qm`mÁ$€på™Ç^Ÿá¡â+T¾¼Ö’ûH·K[}ëV²ùbSn±ª ^¯É8êN&¹Ý.ÛO»’EÔu_ìäP 7Ù^mçÓ x§mZK•·SàŽK›ˆà… Ë+EÄÄà ×ð•¥¥ß,í&Tºµ2H?xŸ,€+JŸ 85·,VZ…¶ƒ©®›gi3kÖDµ‹dn¸Êúñüè]?¯!>¿×õ±ÇÜÁ5Ô¶×1˜ç‰Š:Ò>œQmmsy!ŽÖÚ{‰ÉHcg zà]ûÙÇ ÝÕ§‡í5+•ÖZ–¾nØð Àw“× ÍU%Ô>0Õ¬´kÛ«-.ßË–ëì¬Å‡ËŠ’r[ü1Ikk”Õ¯oë[3‡ŠFŽDdu8epAЃғuiøªþ}GÄwWsÙÍfdÛ¶)«í{œV6ê¨6ê7T;¨Ý@‰·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›u&ê‹u#1Øq×¥g¦^ß§™ "Eœ•°Ó¹¨ïlo4ò¾z.Æ8‡*O¥o‹‡F–Â2Š ÎW¶0 A};>™p—ÈH ņ{u½bZ[]_Jc·Œ1y‰À_©«Wz>¡g •Ö)FXÄÄíà⥲™bÑ@St ÈÁ¶Ÿ¾QÓŠ· ÌIz‚ ƒ"˜Ûpó‹Ž«Ž¤ûÐ qu:Ao’G8U^õ¶ÞÕÖ0}•ÛêÖ_›õýi<:ÑC}|É€GËû»Ž’ÖŒWwkÞ²o;¨ÜÇѽ®p?à\Uñ2„ÜcÐõð˜ u)*“o^Ç(Û‘ÙJ:œ2°ÁÒ»?‡œ¶ºÜ¶ÁÏ“,eŠçÀŒÈšæüDèÚ±uÆæKÿ½ÏôÅ\ðd…|B„pÿJë¥>x©w<Úô½•ISìÏ¢¬fó#5 +GrЭmŽ•©ˆ´QE¥djßê[éZç¥cêßê[é@ñÿÄÂÛþÿ²×ººÿˆñÿmÿÿÙkŒ¤ÆIºÕ8êiÌŽ˜ÞŒ»†á¸‘ê=©n×T¿²FKKû«tc–Xfd õóL×BºœDdóJy‡iïc?{ß­U¢€4YÔâšY£ÔïRYqæH·ñÓqÎOãM·Õu 3!µ¿»€Èræ)Ù7SƒÍQ œ д¾ºŽYeŽêt’`VWY¨cžA÷¢ÖþîÅËÙÝÜ[; †VBGÔªÁ‘ö8*ãøX`þT™  qê‘]¨îîå²LË+9ëóg4Û‹Ë‹É|Û«‰§—ß3—l}MV¢€-%õÔqÇ]N©ù‘ªÈÀ#ÿx ð}Ç4±ßÝÃt×Q]ÜGrÄ“2JÁÉ=rÀ皨N:œQ@Æ¡x³Ë:Þ\ ¥R²H%mÎPÇ9 ûÓVòá-þΗ,ÄžPrpþ,tϽV¢€4W[ÕRi&MRùe—d‹ráŸ2s“øÕë_]Ùx~m2Ù§Šin¾Ònã¸eº^99ÆsšÀ¢€.A¨ÞÚLó[^ÜÁ+ýù"••›êAÉ¥òÝ›µ¾ºG¬âfóü 9ªTPøõmF+™.cÔ.ÒâO¿*ÎáßêÙɪÒM$Ò´²ÈòHÇ,îÄ–>¤žµG(Ί.70ž™=¨txœ¤ˆÈ㪸 ÀзUí ϱýí—e'>GšÞ_¯ÝÎ:Õ Aèihüº¾£=·Ù¦Ôo$·ÀSÎì˜>RqI>«¨]@ ¸Ô.æ„tŽYÙ”~â¨Ñ@êxà’žU†\y‘«¯Ž™=ê=Õb ©­fY­æ’WîÉ•aÛ‚9ñv±¤kwp9<ÔQ+a_ûÀg†÷ëU™1½w Ãp##Ô{Sh¡ƒÅwÖÚ ú|RÜ¥Ä×_ikŹ`çå©îsŒç5™oªê#Zêp4§2§d.}N=OZ£EZ¹½¹½›Î»¹šâ\c|Òlzdš‡uGEIºÕ&ê7TtP›¨ÝQÑ@n£uGEIºÕ&ê7TtP›¨ÝQÑ@n£uGEIºÕ&ê7TtP›¨ÝQÑ@n£uGEIºÕ&ê7TtP›¨ÝQÑ@n£uGEIºÕ&ê7TtP›¨ÝQÑ@n£uGEIºÕ&ê7TtP›¨ÝQÑ@ Ô%pÊ:qŠI¯^ãØÎvŽõJŠ» Û[±1¿ªš–]RiWní™ï’MfÑ@ ¹ì¯›xéÛÐÕöñ›‘÷²OéëXTVU(S¨ï5s¦Ž2½¸Ó•“'–fšFwbYŽI=ësÁ§> O÷ô®rºÈŸîéZ¥mÌÛnìúDÿR¿Jß+DÿR¿Jß*„-Q@éXú·ú–úVÁéXú·ú–úPƒ|CÿûoøþËY~‚ ïïLéhÞ]Œ²#]Ä$c A§ÐÖ§Ä?øÿ¶ÿÿìµËØêéæäĨßhàmàœ+u#ž´ŸPìnD­q>£¶îÀyzlŒ[K·X‘Æáò°1®,ôæ­M¤.¯}f$r°ÛèðÌádD-€PÎv®Išæ,¯å°"%CöˆÜ H'üUèüGyÛ¿•lþU·ÙX:&‹²¸Ï8õ-xÄ“@tÛ ,äq(µur‘¾1¹Níà sóQö¯ýtÚß×SkÄQ¹ñT‹<ª‰,Æ6í|ç¸ÏÄVwŒ#Óá×·šL8.¾_A÷T(+ø“Tîõë«Ã©Rý èÒíR6í'yã¯|Ó5Maõm=¥ª\ y—«—78íØ ”´_×b¯©[:T_èú¡†3y ¨$Ú7Ÿ}3×Nì³XÕkN¿›LÔ!½·Úd‰²Œ«„Ü~µ^B:K 8­ï´KÏÙïZ nn."Uóô%S$ÇûF£Òü/iq§Ù\^Ü4fð±WPD°(b¡™\î~A8\qïY ®]uõr#k—f$vÀ®Ï@ö¶úãÇa•Å•äQ0›„bÑg“‚¬8Ï89¼ÀÔÓü-k}s§w"[O¾|¡”ì•X ã¡-^ÍÖ²5 5,4û¤WG’6ÆCm\qœ’­úQµyo£K¥ÆTA$¢RØùàC…'ýÑMÖ5{oPkÛ¡‘”.ØÆ;×êi¿ëúþ¶…tž¹FvòØiÓ¬6sÌ­5œnû•Ib¹<ö®n­ØjéÏ3¨Æh^Þ Â°ÁÇ=hèÅÕBÃM¸[ õ6–õ#˜ÖÆ(⊠°»~lN>¹¨N‹e§[M6¯%Ëm»{DKBªILnbX9çÔU{/ÜY[A µ´¸6Ì^ÚIã,ÐsòòçœFi¶ºôðE,7ö×ÑI/žRé 'v ä÷ìhôþ¿­GëýZ“éßÙZGˆ¬Ä¾j$–¬ŒnV%”‘ØàŠ—Æú\vwóÞ\<¾}ㆶXñ°"¨ XrsÆÑ‚:žÂ±^¼›ûGÏMý¡7zô*r¥qŒc·lv§Þx†òý/c¸HZ;§Y m8‰Ô¹9à0zä~—õø¿}me ñ!ÔEÍç•5°†D—‹að«èö‡Ã«¨@——R•c#E*m¶Ã` inœîàsLÿ„–å¯/§žÖÒt½ÛçA*6ÂWõïQA­µ­¤ÐÛXYE$±¼Mpªûö7QËmèqÓ8¢ÚÜÊ«zTi.±eˆ®q²°È °È"ªT¶Óµ­Ô7xdPÝ <ÕE٦ɒºilzŠxƒVÍÞ—aÈÀÈîzb±"Ö."Ôî¯Õ"2܉C‚Ñæÿ´qRI®=Å‚[\ÙYÜ £! G ƒZ:_ˆ‘ ­}³´Ö´ˆ4lDܪø>™ç­dj:¬ºˆ 0[Á•Š„Lœž¤’IêI4=ÿ®ïþ–ß×dQ¢Š)€QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEWCàÏùSýÃý+ž®ƒÁŸò0Çþáþ”ô&‰þ¥~•¾:V‰þ¥~•¾:UZ(¢€Ò±õoõ-ô­ƒÒ±õoõ-ô =Óôû=SÇÚ^ÛCq ÚÌv˸4g pxÆ}Ív¿ðƒøPuЬïÕrZü”‹cÿN³ÿ4®ÇW×ãÒuK i¢‘¢ºY xãyvŒ*‚NsHÿáðŸý¬ïÕðƒøOþ€V?÷ê­\ëúuÌv÷IÉ·k4ËtöíúY‡ÅVÖ:þ©g©\yPÀbòˆ…ˆPË’Y€ ÷8§`,ÿÂá?úXÿߪŠçÁž‚ÖYáÐìD¥ùX à‚ X×uñ£[Å*YMt$eÓˆÐ3É~ø$þµ¥|â[t?é‹ÿè&‹•ÿ¯‡è¥ÿàáGü"¾ÿ —ÿ€qÿ…kÑHfGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ©4ÑÛÁ$ò¶ØãRîØÎ&¹ûíBëÈR]¬)…ñæÀ ›yùsÆêƽxÑ‹”„Ùsþ_ÿÐKÿÀ8ÿ±Ýiÿ?PßÁGÛ­?çêûø(z*·ZÏÔ÷ðQöëOùúƒþþ žŠƒíÖŸóõýü}ºÓþ~ ÿ¿‚€'¢ ûu§üýAÿn´ÿŸ¨?ïà  è¨>Ýiÿ?PßÁGÛ­?çêûø(z*·ZÏÔ÷ðQöëOùúƒþþ žŠƒíÖŸóõýü}ºÓþ~ ÿ¿‚€'¢ ûu§üýAÿn´ÿŸ¨?ïà  è¨>Ýiÿ?PßÁGÛ­?çêûø(z*·ZÏÔ÷ðQöëOùúƒþþ žŠƒíÖŸóõýü}ºÓþ~ ÿ¿‚€'¢ ûu§üýAÿn´ÿŸ¨?ïà  è¨>Ýiÿ?PßÁGÛ­?çêûø(z*·ZÏÔ÷ðQöëOùúƒþþ žŠƒíÖŸóõýü}ºÓþ~ ÿ¿‚€'¢ ûu§üýAÿn´ÿŸ¨?ïà  è¨>Ýiÿ?PßÁGÛ­?çêûø(z*·ZÏÔ÷ðQöëOùúƒþþ žŠƒíÖŸóõýü}ºÓþ~ ÿ¿‚€'¢ ûu§üýAÿn´ÿŸ¨?ïà  è¨>Ýiÿ?PßÁGÛ­?çêûø(z*·ZÏÔ÷ðQöëOùúƒþþ žŠƒíÖŸóõýü}ºÓþ~ ÿ¿‚€'¢ ûu§üýAÿn´ÿŸ¨?ïà  è¨>Ýiÿ?PßÁGÛ­?çêûø(z*·ZÏÔ÷ðQöëOùúƒþþ žŠƒíÖŸóõýü}ºÓþ~ ÿ¿‚€'¢ ûu§üýAÿn´ÿŸ¨?ïà  è¨>Ýiÿ?PßÁGÛ­?çêûø(z*·ZÏÔ÷ðQöëOùúƒþþ žŠƒíÖŸóõýü}ºÓþ~ ÿ¿‚€'¢ ûu§üýAÿn´ÿŸ¨?ïà  è¨>Ýiÿ?PßÁGÛ­?çêûø(z*·ZÏÔ÷ðQöëOùúƒþþ žŠƒíÖŸóõýü}ºÓþ~ ÿ¿‚€ Ûo¶X\ZïÙçDÑîÆqFqø×!«ÛÏ¤Í ËqÂevb(AR¾¬s÷¿JëþÝiÿ?PßÁUîN“y·í_bŸnvù»ëŒ×.+ ñ³ß£F“¥Ï¨ÛÛߨÒ/?w–!$‘œ Û»íôïV|eÿ?õø¿úÖÄ3éöñ,PKkkÑ•@übø¶HæÓlš7W_µ¯*r>ãÖ”(FŒyb XÓÑ?Ô¯Ò·ÇJÀÑ?Ô¯Ò·ÇJÜ¢Š(=+VÿRßJØ=+VÿRßJã¼:?âµSéƒô¯@® Ãþ*ò}‡þ:k½ ˆ?{æë¹‡ÄéEŸñîë£ÿèF€T ‰Ø¯J˜ÔÒw,kÏ|cñUðìvBÖI%¹Pø•€6!=woÒ»äÿX>µó¿Å Êꌭ‘¤O…H­@‚ÝFÒœœïcÆ9MÙ —ÂûΣñ?_´ð¤Z¤Vö pÓe1IµW’7ç¨ê≵·ŽêÏNa_ßG ž œwê;{׊KPk !’âi`oùd“Žù‰dä‘íŠé5—mÁ°XÉ•º¹?:‡iêÀãïÀã¾ Ey=#+ §­Ž²ïãÖ¬“\­½¶šÈ’’´†sØpG½O§|l×oÙ-´åÜ¥”¤Rq’‡¿$þ™ñ¸n¦PàŠh Š@pÀòAÜ3Žv}ë¬Ò¢{ækˆãKdy$Püá28œœç95ºåå·R÷=“Hñþ±}i,·)c€6"Ç'Ìsƒü]€=ý=jÿü&šŠ¨gK`|7>¿Å^\ºæ![kQù~cò@Æ2½}ç×¥jX0Ki®n]¤]€)'sÓΰœìzØí?á;Õç¯ýòßüUðê¿óÆ×þùoþ*¹Š+Q?ü'z¯üñµÿ¾[ÿŠ£þ½WþxÚÿß-ÿÅW1Etÿðê¿óÆ×þùoþ*øNõ_ùãkÿ|·ÿ\ÅÓÿÂwªÿÏ_ûå¿øª?á;Õç¯ýòßüUsPOÿ Þ«ÿµÇjúŒšu†šÑÍmåDÒÜ ¢s÷‡§­sâ*r$í}KŒy®xƒ|7y.·ú…•Ä0Û‘ ó£)¹ÿ„sއžãŒµ?‰­5M[^ÒÆñmíÎØ± Hà•ÆG''?J÷=x½™’dn ›AòÜqœ¦ãŒuÎN8<ÔÿÛÐ4P´6÷3M.ü@Š®Ã†Ý’Áã¯Ó5Æñrçæpüà¨.NTÏŸ­´Qå†(ôfIIEÎŽUH?x‚ ãF0¿\úFáØå‘íüè"XP´ÝI†v9ÉÇ~¾½¢ëÖÄ›ó˜šÚ)R,d—b䱆©cäïîmçÿ=ŠîrÔWc§_]\ßß[ÜÁB›¶ã†òzgŽß­Is©‹[¸à–Úp’0DŸ c,F@ëžÞ˜¤ó¹?øögEvZ.¡6¥¦Cs=³ÀΊÙ;v¾GUî f6³v–—Mq1ÝÊïæO tŠ<£å+íÉ=ÍRÇJíríçÿ^ÅZ÷0(®«SºÔ­­à–ÒâÉÚR‘¢5»1ÏpCð¸ç¾=jµÏˆ%µÕ Õ&Ž!²%”6>uç -Ó¡æœqÒ–Ñüà ÒKvsÔW<†+ydQ–D,:àVN›«™4Éo.îí¥òÔŽY6ÇÝ ±$ô¥BÌWPüàè[©ËQ]ø‚æ=1¦¸·At×moQ«0çœN9Àçb FW¸Ó¤ûLsÃu¾&òã(ƒ,HáXO_J·Ž’Þü}’îr´Wu}Ÿjg•]†å@©Œ³1À:žæ©ÿiH.¥f»gXCkˆ\³ î-ŒñÏ8À¨YƒjüŸü u9+¬OÃ-­¼ÑÙÞ;ÎÒUÞQz·ÞÆ9県T·º˜]ßZÆT_$‘üN@\©þ¿+Û“ñÿ€/b»œuÕ]j“ÚßYYDoÞ$w3?mÀããqÆ}‡ÔRFî?¥„¦ŠEf‰Ð¨# NóÈ^”þ¿/åüà±]ÎRŠêômJ{ùe\ÛnBÙ¶HY$A¸€I,r0=XÖof±²Ya(¬eT/$eÕžIƒÀ÷¤ó¥ËËøÿÀc¥îq”WRúäŸd·²žÊy¦‰æ3ìo,ª1<–û¥Cqªêé–—ÖOj¦è"¤ÂÎÅÛ¨Üp9=:T±ÏùøöK¹ÎQ]•ÄßÚ7¶s¸sÉclcå`xü ·áŠÐ¬Þegðþ?ð T/ÔóÊ+Ðè¥ý§ýßÇþ}_ÌóÊ+Ðè£ûOû¿üú¿™ç”W¡ÑGöŸ÷øõ3Ï(¯C¢í?îþ?ðêþgžQ^‡EÚÝüàÕüÏ<¢½Š?´ÿ»øÿÀ«ùžyEziÿwñÿ€Wó<òŠô:(þÓþïãÿ>¯æyåètQý§ýßÇþ}_ÌóÊ+Ðè£ûOû¿üú¿™ç”W¡ÑGöŸ÷øõ3Ï(¯C¢í?îþ?ðêþgžQ^‡EÚÝüàÕüÏ<¢½Š?´ÿ»øÿÀ«ùžyEziÿwñÿ€Wó<òŠô:(þÓþïãÿ>¯æyåètQý§ýßÇþ}_ÌóÊ+Ðè£ûOû¿üú¿™ç”W¡ÑGöŸ÷øõ3Ï(¯C¢í?îþ?ðêþgžQ^‡EÚÝüàÕüÏ<¢½Š?´ÿ»øÿÀ«ùžyEziÿwñÿ€Wó<òŠô:(þÓþïãÿ>¯æyåjÃÿ [úüý+®¬¯ǵŸývoä+jßm>N[|É.U{‰þ¥~•¾:V‰þ¥~•¾:Wyˆ´QE¥cêßê[é[¥cêßê[é@Ÿ†ÿäko÷Oþ‚ÕÝ× á¿ùÛýÓÿ µv:Ž¡™c%ÝÁ;pV=€÷4j£ŽG€2y/"î, Ü眑ëTô}ZbÁncRŽÙ"'&6ôÿëúUÈmâI‘dbìñ$p? Stßóç9üSÿЍšáÏü¹\~qÿñU1±³ïiýûáPÉed?åÎßþý/øR&’áYʯü-+&Ð}ðÄþ•Ëk¯¥ÛÝÚ[\ê––íg">Ù¤P[ã'¼ tÍahüGP¿ðÉe> Šð¿¿Ú|_w3¾X f8îaJO õŸrö¶¿×ÞiM´Îù´[;Û°^[Kl. ŰhÖXÓ †\g ¹,{cð¨o"û¶qéÒZý¾8¤Ý¼q"ØŒŸ-¤R@äÏ֗÷ŸoðýÁ21v”å™—åbNNrA9ëÏ5WZt°ÕôÛ÷{xamöÓÈã †—Ÿ@ÉߦO©5òïQMÁ­Uôô uùª(ÉZåë} >à rßF“­´˜;^6,¯#'§µñØÍqëëvw›4¼l¡[dev¨Üq€Ù<šÊ¹ñF—š±K%ÛÅ‚RÚ3&sèGËúö=ø¬? ØÍ<·q[0ÿDœ‘oz„áX|„€6’pyߦ+³OˆŒ§V.+£¶ÿy½iÒ„”!$ßkêwf:2æÆçP€%ÓÌÙ2*Ÿ‰ döÜ*“ÛÚOºKÍzÒY±£®Ô ˆáún9'søV&¹gr-Ú{›T…Ïî¶FÒ¸õëòŽÃùç ¢b¿tû UÓ£>X³jTÕH]ž‰æ™o5ü©¬ÙºpË™Wä!ÿ{ž™íYÐXè–«bðk± ­\6÷»Þ­žå-»'¥q_fÀ©'Þ˜Ð(nA œt¬UI-™« ™é¶·ZhÔ.îcÕ-$3„ùUùvŒzûÕ ôË)µ·JÈ9fù4£Cîá}±\f˜›'#œl=G¸­ZïÂὤ9ù­Ðä¯.IrØë4£Ÿf¶²j–³E 0¥Tv'qÉ÷â©Ú™cÒÒÆ=NÎØB^-ÎO13ò‘ó zçžÕÏÑ[ýAjÜ·òF^Ùö:¨à°‰´Ðš„>UŠTgRXíÚ 9ì3ùÒÝ-½íìO>©nmau‘ B£.:lòçÝk”¢—ÔïÌÛKXì-¯?Ðåê6Âvy 6å!±ÛÀÆp1TÒÊÊg¸—QÔถo/&ò„$®0ÙÎI9ÍstP° m öϱ¾šm”³êѬËtnc’YLI`†lž ÉÈ&ˆ¢† «DH°¼·RLdU+ä` ð>fý+Н©w{_#«ó„ú4v÷…‹]4j&iBÈŒ{åAš4ˆÒH"ÖíÔÉÄÄ€FÐìÅ@ÞRn3ÀkŠ ÛKðAí»£~òÂÖùm¤žÿKyà ƒ}º´EN8Ø\àŒA«WÂÒM ¬íî¬ÖHÕLaQw) 03ÀÈ®ZŠ_QÛÞØ=¯‘ÑMc¥^K ßÛ ¼Æe¸•>ÖØ$ cðA‘éS“j\\êö²G³Ã(R |ÇqÎ=®ZŠ>£ýæÛÈè¤Y7Íxu‹9oVÝá·Ø«©lœ³däojи»WVÛT´ŠQŒ¼€8UŠ2ªRX•ÚœõÆ:娦ð7û_—õÔ=¯‘ÕÚ\Aý©}y-ÄdQƒ*ò‹“ž½ËÊ´>ßeÿ?pßÁþ5ÂQRòè¿´?nûßÛì¿çîûø?Æ·ÙÏÜ÷ðp”Rþ͇ó·}Žïíö_ó÷ýüãGÛì¿çîûø?ƸJ(þ͇ó·}Žïíö_ó÷ýüãGÛì¿çîûø?ƸJ(þ͇ó·}Žïíö_ó÷ýüãGÛì¿çîûø?ƸJ(þ͇ó·}Žïíö_ó÷ýüãGÛì¿çîûø?ƸJ(þ͇ó·}Žïíö_ó÷ýüãGÛì¿çîûø?ƸJ(þ͇ó·}Žïíö_ó÷ýüãGÛì¿çîûø?ƸJ(þ͇ó·}Žïíö_ó÷ýüãGÛì¿çîûø?ƸJ(þ͇ó·}Žïíö_ó÷ýüãGÛì¿çîûø?ƸJ(þ͇ó·}Žïíö_ó÷ýüãGÛì¿çîûø?ƸJ(þ͇ó·}Žïíö_ó÷ýüãGÛì¿çîûø?ƸJ(þ͇ó·}Žïíö_ó÷ýüãGÛì¿çîûø?ƸJ(þ͇ó·}Žïíö_ó÷ýüãGÛì¿çîûø?ƸJ(þ͇ó·}Žïíö_ó÷ýüãGÛì¿çîûø?ƸJ(þ͇ó·}Žïíö_ó÷ýüãGÛì¿çîûø?ƸJ(þ͇ó·}Žïíö_ó÷ýüãGÛì¿çîûø?ƸJ(þ͇ó·}Žïíö_ó÷ýüãGÛì¿çîûø?ƸJ(þ͇ó·}Žïíö_ó÷ýüãGÛì¿çîûø?ƸJ(þ͇ó·}Žïíö_ó÷ýüãGÛì¿çîûø?ƸJ(þ͇ó·}Žïíö_ó÷ýüãGÛì¿çîûø?ƸJ(þ͇ó·}Žïíö_ó÷ýüãGÛì¿çîûø?ƸJ(þ͇ó·}Žïíö_ó÷ýüãGÛì¿çîûø?ƸJ(þ͇ó·}Žïíö_ó÷ýüãGÛì¿çîûø?ƸJ(þ͇ó·}Žïíö_ó÷ýüãGÛì¿çîûø?ƸJ(þ͇ó·}Žïíö_ó÷ýüãYúÜÑMifÑH’(†QÀ®Rµ£t[qÿOoÿ ¥],(ÔO›V7)Î ÛDw:'ú•úVøéX'ú•úVøé]ç8´QE¥cêßê[é[¥cêßê[é@Ÿ†ÿäko÷Oþ‚ÕÚ]YZÞÆ#»¶†áä,±‡úà×á¿ùÛýÓÿ µu:æ¥>“§›¸lÅÊ¡ýà2lÚ¿ÞèrYµÓì¬wý’ÎÞß~7y1„ÝŽ™À«6ŸñîßýÖ>¬\kVÒ\Éd¶ð†Û‰‹ùž¸ùG¦~µ±iÿçý÷ÿÐpÞ ñ*Ûø†[„Õâ‚)ãG³3…7;¿Ö|¹ËmR1î ix¶$6KuÍຜ¥½ªAy$hÎÇ‚B°$ŸA[6º•®Ÿ-™S2ÌÒ<¯0œ¹%²@µXh6ñC¥Äg¸‘tÓ˜w°%¾R£wàØ¥ÒÏúîn¿®Äúu³YÚ[Û<òÎÑ S,¬Yœú’kÇõÿ êú¿ˆäšÒÓý¢·_:G ¿ê#Éõ#ÜÐúW´'úÁõ¬ÿ{úáþ€+ƒ2Ì*à©{ZV»v׿ÿCj1»±ævæ%Αq¨<0 # _?u˜eyVì9É÷¨µM6#a=Ã;ËsY\9”áNì|Üv=±É­ÿIkc­i÷ÎbWxd†f2|Á8eÂç¦C ÔàöÎÏâH"ÚÞiÈ«cbŸÄóúWnSV•l*¯$”Ýîí­ÏJ”0‘¤ÕK'ªó'ŽD’$xÎceN1ÇnJ]W›BñK˜ØùW°êñ‚×û­Ž\÷ïÏlq¯ßÚÄ–ªÈ _(}£8ǧ·¯^ËT¹]JÞiî¤Ûƒ–%¶©ûØëÔ~5ëfXØb0ΜæýOŒÊòÚ¸\Wµ“\»z£Ø5mn \Gèñ*àFÃælc$íê9àc¯~+$ÛY1n®Ž ìR?<ŠYGsÇ9§)@€mŸáWÁʬ¤ï-O¸ŒU‘*ÙÛ>Ó‚“Ó1’OåH4ÕfÝÄzeË/?•!À*õçÖ¤Y ÁÏoZ•? °­jöîrѲŽ3†ŸéE9°yî8¦×½—»Ñ<¼_ñŠ(®Ó˜(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+a?ä oÿ_oÿ ¥cÖÂÈßþ¾ßÿAJç©üh|ÿC®—û½OXþ§o¢©_¥oŽ•¢©_¥oŽ•Ðr EPzV>­þ¥¾•°zV>­þ¥¾”ÉøoþF¶ÿtÿè-]Ñ”«A ÷®Ãò5·û§ÿAjîè‘E$Q"ǪŠ0ôŸiÿçþº?þ„h¢Óþ=ÏýtýІ –§5´€‰?Ö­y6«=ìºÔÖÍ{¨A 1ÛIFþZ2´(8aÉ•ºgß5ë)þ°}kÉüO40ëÚd¨UÙ­Þá¼Ð«òÕãßž##'¥ª£ygE—ws¹€?C¶›©hšzévÏe-¸*™ä †cºO8ÇõéÍ\Òt˜¤Ðæj³A)ó^)<¯LqÛ®rzK/ö’äV½¯®†m+±-51u1·{i¡”.ÿœ cñô«µNÎÛT·yÍɸ³$ùnÇ$œðyädã5r»0qQ¥o3ÏÅÿ(¢Šê9‚Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¶þ@Öÿõöÿú V=l'ü­ÿëíÿô®zŸÆ‡Ïô:é»Ôõêvú'ú•úVøéX'ú•úVøé] ´QE¥cêßê[é[¥cêßê[é@Ÿ†ÿäko÷Oþ‚ÕÝ× á¿ùÛýÓÿ µwtQiÿçþº?þ„h¢Óþ=ÏýtýІ –§5´€‰?Ö­xˆ´íÏËö¹¦šÞh p³‘âÉgŒœžž¿·'úÁõ¯3¾ŽYufŒ9˜ *…ÀòS…9瑞}MoB§$¾ßCôý¤mÍkjbÅ£Gkf"X¸‘r˜R½ûŒŒñÇ¡«¶m’€SzÆ»OËžÝ@9Î:÷­‰lƒ[’"ÁÀ+žI÷êk õݱ X ÄŸóÚ–# Ô9Û ‹Ë‘"åÕեݳ%“Á,CåŸ~sÐ7SéÖ³ã½{DHø`1˜NÂÃÐ ñÆ=jå™2mó<ÛO·NqTõ-6i%f¶‚I??–»°}Hýë‚°‹ŠÔê““šÖÆ-ÍÓIpÂ;xÖ<†Ú듞¹ÍhiìÅþæïæ¹s‘èI?Ò¯ØérÛY‹¿ìJêMŠŽ­a#q’ÇÆãò’:óí,ÿµY®»XÛÊÀÇxãœdŒñÎ)rÊ~êF®¼£ï9õ{D¸† ‹‰6Qµóשç¥gOá{–…Œwb0À¥Á>‡¨é‘Ÿ­uðø~ÎÕÙƒÌFG—æaÄ@ñÇNOÿ®¥–1oHó‘ä–9'g?þª~ÎTìT1“’÷ds66iñA Ì$PŒX|à H œzðrÇŽæåHó4ë¼BÉNÒOù棭á±ÏRnræaEUQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE°Ÿò·ÿ¯·ÿÐR±ëa?ä oÿ_oÿ ¥sÔþ4>¡×KýÞ§¬S·Ñ?Ô¯Ò·ÇJÀÑ?Ô¯Ò·ÇJè9¢Š(=+VÿRßJØ=+VÿRßJäü7ÿ#[ºô®î¸O ÿÈÖßîŸý«» ‹Oø÷?ï¿þ„h¢Óþ=Ïûïÿ¡ÔÔæ¡”RÿX>µçw‘ÞEª%ͽ¼¬~Ï,[¸¯CƒŽsÏnkÑ~ð}k‹Öï%´°Òü«‰`´1»Ã‘öùDð»[¸« õeI'Û.0Rºfeܺլ}ŽáUºÓÐà óùŽ+> F%a¹ê6­hÑð'·“Ë‘÷¯@Àƒ‘‚; ÌÓõ{™õ¦²›¢ëi€81œ7=÷rGÒ‡©+Þ+@T!£1Þ×P*µ¬»T` Ÿòü)Ÿ`½ÿŸIÿïÙÿ é´Û‹Ù5=F ÉcaŒÆ±®‚ Æzšmæ¶,õX¬˜[‘+nš ÇŽžù¤±µåQE{»g7ö ßùôŸþýŸð£ì¿óé?ýû?á]Fƒuyw£ÛÜ^¤až%`èù/‘Ô )ö¬…½¿66·_hºŽ¥’w–|â„‘±1ƒ…ÛíÛ¨ÍW×j]«-앯s;ì¿óé?ýû?áGØ/çÒûö¶Υ¨Mc¢Þ#ÅW/™ve›wP3Ð~µæ«w¸Ð,ÃF"&Vv÷ÆUºàdvàæšÆTnÖBöQµîdý‚÷þ}'ÿ¿gü(ûïüúOÿ~ÏøWq*»DëìrVÆvŸ\w®yuKËK-BQ3_¤r¤6Ò²*—v!Hùp GrÙ"º™`½ÿŸIÿïÙÿ >Á{ÿ>“ÿß³þº——¯£Þù3¸¾·'Ìû\K˜þ\ðƒÆäõäš‘.gh× +0ºÊ•sÁb›Ãc ?)W×§ÙZ‹Ù#žûïüúOÿ~ÏøQö ßùôŸþýŸð®¿T¾:mƒÜˆ¼Í¥F m$ “ƒ€3’qYë©ÊgšDH ­¢Lsx|¥Ÿ$§°ÎqÏáS}F®¢ÑK©ö ßùôŸþýŸð£ì¿óé?ýû?á[Rø™ ´´yí`‚âåZEŽ{¡„çq^§#\U«ÍLÍá±}hJ5 Œž¨\…ðÏéUõڪ׊×@öQîs`½ÿŸIÿïÙÿ >Á{ÿ>“ÿß³þ¿uÜ:•­®§r<ù£e•b@7Jî$œ½Zˆ.çMnXï.n¢V‘¾Ï‰<©/fÛœõ8Ïj>½;]%ߨ{`}‚÷þ}'ÿ¿gü(ûïüúOÿ~ÏøVÏ}ruçÅö˜Œ¶ñ2 Œ #A,NÎq×¥[Ö¯§³‚µžââQ‘Á$€HওÇTRåå@¨Å«ÜåþÁ{ÿ>“ÿß³þ}‚÷þ}'ÿ¿gü+jïP¼ûU•ˉŠÌ÷¯˜lÂü çŒóøõ©µ‹«‹kØ™®n­¬DdÉ,#€Ùݹ[æšÆÔ½¬º÷èÉZç?ö ßùôŸþýŸð£ì¿óé?ýû?á]M”®š½ý«HΘIãÜs´6AL®Ò¨–c4þ5A>§ ö ßùôŸþýŸð£ì¿óé?ýû?á]Ý?ÚSþQûÜá>Á{ÿ>“ÿß³þ}‚÷þ}'ÿ¿gü+»¢í)ÿ({Üá>Á{ÿ>“ÿß³þ}‚÷þ}'ÿ¿gü+»¢í)ÿ({Üá>Á{ÿ>“ÿß³þ}‚÷þ}'ÿ¿gü+»¢í)ÿ({Üá>Á{ÿ>“ÿß³þ}‚÷þ}'ÿ¿gü+»¢í)ÿ({Üá>Á{ÿ>“ÿß³þ}‚÷þ}'ÿ¿gü+»¢í)ÿ({Üá>Á{ÿ>“ÿß³þ}‚÷þ}'ÿ¿gü+»¢í)ÿ({Üá>Á{ÿ>“ÿß³þ}‚÷þ}'ÿ¿gü+»¢í)ÿ({Üá>Á{ÿ>“ÿß³þ}‚÷þ}'ÿ¿gü+»¢í)ÿ({Üá>Á{ÿ>“ÿß³þ}‚÷þ}'ÿ¿gü+»¢í)ÿ({Üá>Á{ÿ>“ÿß³þ}‚÷þ}'ÿ¿gü+»¢í)ÿ({Üá>Á{ÿ>“ÿß³þ}‚÷þ}'ÿ¿gü+»¢í)ÿ({Üá>Á{ÿ>“ÿß³þ}‚÷þ}'ÿ¿gü+»¢í)ÿ({Üá>Á{ÿ>“ÿß³þ}‚÷þ}'ÿ¿gü+»¢í)ÿ({Üá>Á{ÿ>“ÿß³þ}‚÷þ}'ÿ¿gü+»¢í)ÿ({Üá>Á{ÿ>“ÿß³þ}‚÷þ}'ÿ¿gü+»¢í)ÿ({Üá>Á{ÿ>“ÿß³þ}‚÷þ}'ÿ¿gü+»¢í)ÿ({Üá>Á{ÿ>“ÿß³þ}‚÷þ}'ÿ¿gü+»¢í)ÿ({Üá>Á{ÿ>“ÿß³þ}‚÷þ}'ÿ¿gü+»¢í)ÿ({Üá>Á{ÿ>“ÿß³þ}‚÷þ}'ÿ¿gü+»¢í)ÿ({Üá>Á{ÿ>“ÿß³þ}‚÷þ}'ÿ¿gü+»¢í)ÿ({Üá>Á{ÿ>“ÿß³þ}‚÷þ}'ÿ¿gü+»¢í)ÿ({Üá>Á{ÿ>“ÿß³þ}‚÷þ}'ÿ¿gü+»¢í)ÿ({Üá>Á{ÿ>“ÿß³þ}‚÷þ}'ÿ¿gü+»¢í)ÿ({Üá>Á{ÿ>“ÿß³þ Ÿò·ÿ¯·ÿÐRººåþ@Öÿõöÿú V”1.½euk\ÙSPÃÏÕ~§o¢©_¥oŽ•¢©_¥oŽ•êx´QE¥cêßê[é[¥cêßê[é@Ÿ†ÿäko÷Oþ‚ÕÝ× á¿ùÛýÓÿ µuZÞ±‰¦½ÔÄû±¡8ÞÇ ÿ=¨F 3›L®èv±,<É6““ØçšÎðæ½»`dÌbæ#¶dFȱÇüGj×´UòÚL|ìì wáˆÊ€*LzËñºÿìj&ÔÁþ+ü ÿìkXš†G#½ 2Åã\7•Ö)#p.w‘ô]£?pÞ)ñŸƒômut­KV{{­9ã,A#`ùcnHBÊÀðkÑ%E¹C £r7žõò?Å©_‰Z”Žrï«1õ&Ú*Ê­Ur¶Tdâz³øûáû <¿Ïþд Ää`•Ì}9#“Pj_¼'*[5§ˆÙ®b ¦âH¥G*ØÈ @TŽaÐWÏu»áí ãPs}%´ÇOðóyyŒ¿!=;ŒO¨¬c§uy?¿ÈÑU“{Õ<”P\k³oû,Q³¯Ü%•×ä듟¥‹ÇþŽD•üE<³¬Âc,–Òîv TˆÀÀ ¨èÓ5ï ܶ©j²}¨”†PW|j¿Ä‡S»9ìvŒ‚:ùŸŠþj Íä¶+%îÅ ª“$K嬙pL7ÞqÎÜ\­ayÑçwOË_À•U¶â–ǰ'ćéeqhÚÓ<3´Œá­fçy$ŽÞª¯ŽüU¼ï]NçËImå,ªŒ(Ä`c#žçÖ¾w¢ºV i?Ãü†ë7ÐúQ>&x7¼t×äVºmÌE¬ß)Úåýß sW´¹¼ycc{¥Ê¡c`Ñ\Ç#¾ÒTî%rs‚­|»^Ùàù´ÿûiÿ£…‚ÚOúù¬ßCÓâÔt¨o..Vé‹Ï·p(ØF8ªOýŽ÷ÆçûFáU¦´!>Fp0)» éšÁ¢’ÀSNé¿Ãü‡í¤ú6y¥é°yêIáU$F=}sTá{Ó…„úŒ©m²ªÂy‘“¬vä`qÁ‹E?¨Â÷»ü?È^ÙL÷Ú<Ñ[Çö‚‰o"ÈŠˆÀ ½N•Vc£MtóBác’E–HNÇuÆ ùsü#¡ŠÀ¢…€‚ÚOðÿ u›èt±_ÙgÏm>¥+4Í&dUmÈœ$`Ò¡FÒ†žÖ2ê—3AµBŒ)‹iÈ+µ9®zV}FŸwø{gØé ¹Ò!¶¹‰¯¦•îre–E;Û#oe`ÐTmwcö›—cìöq›•·Û´Ç@3ù×?EQ§ÝþäÙö:Xµ 5ÒáµmZq2"†¸T%ØŽ§æS×Þ¨›M ìï j7(U]•yl;? ¦9,r1jÈ¢…‚‚Ù¿ÃüƒÚ¾ÇC$Út¢mbì\Ÿ- ´ã*Fͤp;v©oïôûÍ*KAz|£dgpÁàz€k™¢¨SÓW§§ù¶}Ž¢-KM7k}-É(V*¼äãåÏ_ä*!q¥µòÝM©ÜÏå³4QH¿$d‚8‚x$rMs”Rú…>ïðÿ öÒ6vipÁ"Úêw …á·.áºíƒØu$ñW¯/t«È"F½–7…ƒÇ*)Þ¬3Êx'¨=k˜¢›ÀÁêäÿòlû›¢ÿe>Ÿö¹LnK;•;Ù‹n$¸É>Ô·÷:f£•—S¹HvÉk…qïòçò"¹º(úŒ/{¿ÃüƒÛ>ÇKi¨ØÅ}yu-ÊFíGºä±üjïöî›ÿ??øã…q´T¼¾“Ý¿Ãü†«I—öî›ÿ??øã…ÛºoüüÿãþÆÑKû:—wø{y—öî›ÿ??øã…ÛºoüüÿãþÆÑGöu.ïðÿ öò;/íÝ7þ~ñÆÿ ?·tßùùÿÇü+¢ìê]ßáþAíäv_Ûºoüüÿãþné¿óóÿŽ7øWEÙÔ»¿ÃüƒÛÈì¿·tßùùÿÇü(þÝÓççÿoð®6Š?³©w‡ù·‘Ùné¿óóÿŽ7øQý»¦ÿÏÏþ8ßá\mgRîÿòo#²þÝÓççÿoð£ûwMÿŸŸüq¿Â¸Ú(þÎ¥ÝþäÞGeý»¦ÿÏÏþ8ßáGöî›ÿ??øã…q´QýK»ü?È=¼ŽËûwMÿŸŸüq¿ÂíÝ7þ~ñÆÿ ãh£û:—wø{y—öî›ÿ??øã…ÛºoüüÿãþÆÑGöu.ïðÿ öò;/íÝ7þ~ñÆÿ ?·tßùùÿÇü+¢ìê]ßáþAíäv_Ûºoüüÿãþné¿óóÿŽ7øWEÙÔ»¿ÃüƒÛÈì¿·tßùùÿÇü(þÝÓççÿoð®6Š?³©w‡ù·‘Ùné¿óóÿŽ7øQý»¦ÿÏÏþ8ßá\mgRîÿòo#²þÝÓççÿoð£ûwMÿŸŸüq¿Â¸Ú(þÎ¥ÝþäÞGeý»¦ÿÏÏþ8ßáGöî›ÿ??øã…q´QýK»ü?È=¼ŽËûwMÿŸŸüq¿ÂíÝ7þ~ñÆÿ ãh£û:—wø{y—öî›ÿ??øã…ÛºoüüÿãþÆÑGöu.ïðÿ öò;/íÝ7þ~ñÆÿ ?·tßùùÿÇü+¢ìê]ßáþAíäv_Ûºoüüÿãþné¿óóÿŽ7øWEÙÔ»¿ÃüƒÛÈì¿·tßùùÿÇü(þÝÓççÿoð®6Š?³©w‡ù·‘Ùné¿óóÿŽ7øQý»¦ÿÏÏþ8ßá\mgRîÿòo#²þÝÓççÿoð£ûwMÿŸŸüq¿Â¸Ú(þÎ¥ÝþäÞGeý»¦ÿÏÏþ8ßáGöî›ÿ??øã…q´QýK»ü?È=¼ŽËûwMÿŸŸüq¿Â±Sþ@Öÿõöÿú V=l'ü­ÿëíÿô¢hQ­^·:#QÏRýãú¾‰þ¥~•¾:V‰þ¥~•¾:W p‹EPzV>­þ¥¾•°zV>­þ¥¾”ÉøoþF¶ÿtÿè-]Ýpžÿ‘­¿Ý?ú WQ®Üj6šk\é© ’Fw:H…²ðŽ´§E§ü{Ÿ÷ßÿB5‹á»ýOS²kËô"þàG)eþñËoϽmZǹÿ}ÿô#@}¯êÉ&½sªF×FMEŽÙ#·‘’L¯Ë*2ÞOj/ö®´†ÚÉ5xÆœeï&ň±ùdRx,y£kµ¶Ó­,¬Í¥¼!`%‰RŲX’Ù'“’MdÜx_Gx`‹ì®«^Le'‘XGýÒÁ²G±&¦Ú[úØwÖáá¹VmMuçýëŒ3sŸzù_â·ü”[ÿúáiÿ¤ÑWÖÖ°EkPAÇ`*"Œµ|“ñ[þJ-ÿýp´ÿÒhª›»¸’²±ÉÙÚM{ ¥ºîšgƒÜÿJú_÷>ðÇ…—OÓ¤ŒÏoöŠD0Iw.ÞHÉ,F8Î8€xÿ‚cÒôµ‚òù™/dgr_!€§\Xî=ÏÈ ž{mcP†ïN·1xn’J`2®29ä•ÿ=y1¸⢡Qµmmþc§[•ÝjiùK§Û5Àšd–4ß,Ñ1V”¨ÎæÃ§æÏSêi,u}BÆÑ|Ô‚`CI vòØ;ÌK ®2O^9ã/o%³µ ΪXb2I^îàsƒSÛk—³ oµæm¥ãla?‹ƒß¯J¥º½9}j/Ë͘bq5*Óx¨ô–Þ_}¾ò¾§ðäj¶§Q¶é—WL&†ÞGÉùvŽ0¸'Ðu5æ×ÖZmÓÛ^BÑJ¤ŒAÁ# Žpy¾™Ô53«ébßìñµ8i1ɪ1÷¿Èç§ «è¶Ú«Cuȸ!dÆ3ÇCØð?.kÆXøFÊ+C¿ê’i¶õµóž­áI|Eñ~òY!f²·ŠÍÛ* ÊâÞ³ž£'ñ×Í}ŸëÖ¾iñoõO |KÔ<—Íoh¾Dÿ0OÜDw'÷¯<Žyœm}E+ÛCÐ.l8•$ åchRÛÛŸQù÷¬7ðrOis6™w-œìž\­†1*±û¬£ƒŽ˜ç­XÓèÚ@pAÉÆsׂxj¶àâÏ_N•F¥gØß´¹†î0ð°e=Çz²È—o‰4•€ÏFé÷¸úsùûb#Oo ›I`¶×nY/7ŒóÃr?½×€4,¯£½Š@#u’3¶Hœ|ÊÀÿxS§*om»ô)ÝY²3£.NwäRøtÙ¶‰ØVØI(@½8‘#Øœ‘ìkâ?‰ÎŸ§ †ææ?Ù2R#pzrr;㞇¯øþD­?þÚèÆ¯W/¤Ô]GÔóñu|‹¡ÒQEéAEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPZÐÈúûý+&µ ÿ$õöÿú Ps¢©_¥oŽ•¢©_¥oŽ”´QE¥cêßê[é[¥cêßê[é@Ÿ†ÿäko÷Oþ‚ÕÝ× á¿ùÛýÓÿ µwtQiÿçþº?þ„h¢Óþ=ÏýtýІ –§5´€‰?Ö­|‰ñ[þJ-ÿýp´ÿÒh«ë´ÿX>µò'Åoù(·ÿõÂÓÿI¢ g#os=¤ë=´ÒC2çl‘¹V8#Ú½GÂР±Öâ‹Íb+†Eœu9G7lf¼¦Šm]Yˆú*}9í#ºû<—hÌHŽæ`T|Á·*²ä䕹ÆÒâáYM±Vh­ÙØÆ× ‘´dã€~l ã¡æ¼kž:Õ|+.Ȉº²lµ›jüÙ%9ù¯<Žy½ßÞ,Ñ|Seæi÷!ePÞe¬¡VeŒ•ÉùNGÌ õÎEe*1i»U”Z±ÍÎâI ]D+ià„ˆ Œ6G#“ƒÎOaYþ!¾_[Ü^ÊÓ8a›;” ´™Æ#bO̽óÔœìµìåÝi+ù„®2¹Æz¦;ç€}+À¼Y®&±ªlµw:u¿Ël¬1Øl{•ϯLóšÇÙF¤yëý#¹â½ß?ÃþÉÔ/§Ôõ ïn_tÓ9v9'Ã=‡Aì+Øüÿ"VŸÿm?ôcW‰×¶xþD­?þÚèÆ®¤’VGwÕ%QLŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( µ ÿ$õöÿú VMkAÿ H?ëíÿô çDÿR¿Jß+DÿR¿Jß(h¢ŠJÇÕ¿Ô·Ò¶JÇÕ¿Ô·Ò€9? ÿÈÖßîŸý«»®Ãò5·û§ÿAjîè¢Óþ=ÏýtýÑE§ü{Ÿúèÿú  A-Nj i¬Zð|(½ñ/‰%Õá½òã¸‚ß å)ÆØQz—Ýô¯xOõƒë\F¾ò-ލ.XHð«%´¦7qå€wAßµaˆ«*qN=Y¤"¥{žCÿ /Rÿ —þ@_þ9Gü(½Kþ‚_ùøåzúÏw ÖVŠÐyÉ$öâÓ8 WŒ‡ï»ÔÔÚýÝÆ¡lÍkçI m.P&Fã&6•ÆLŽk‹ëµ·I_3_eÉÿáEê_ôÿÈ ÿÇ*k_‚úÝÊ\ÙëRÛΙÛ,1„eÈÁÁdpHükÕt]jóR¸Í·" ¡2«-¼¨#9RÌ6¾Aê=*î³ܱ@-ÖgŒK™ã‚QŒ˜<ÈÇ8î)¿ãGö¥ÿ>ßøúÿ]]sR— ð¦õ0ˆåkYbL»… ‡Á8Îr9í] "a ‰Ý\|Í•Sôœ~u3ÇVŽé~ ©Aìr?ØZ—üûãëþ4aê?óïÿ¯øÖ­‚Ïgâ)­¥’o&XKįpÓÃ`·ÍÊžGz«%ÝæŸ¨ê÷qù kÄ^ll§{e§8z`æ©c*·em¿àw¥TþÂÔ¿çÛÿ_ñ£û RÿŸoü}Æ®ÝxŠk{«…‰¡¸ˆE3!HZ1œ'kô ã©YÔ-DÐN¶ÒÜ€Â謉ûÆ+óIàŒõçÚ­â;/Ä=œ ïì=Gþ}ÿñõÿ?°µ/ùöÿÇ×üjuºÔ¬nu'>KÈncL–îËù@îØqì:ñÖºheómdd—r œ+qÛÚ”ñÕ£­—ãþcTbÎKû RÿŸoü}Æì-Kþ}¿ñõÿ}ΧyumkÁ—íé[[@ðJ £¤—†GP@8§Û]ÝMao¹¸†»ö…ZGÌÑF’…¹ÃR;‘žµZ­nŸù‹ÙÀ‡û RÿŸoü}Æì-Kþ}¿ñõÿ³©4vÞU•´ÚŒÄ^"Ì‹rÞa6 ,8­høzid‚î)špÐÜXît‘®›¿\ç'ƒÖ¥ãj¨óiý|ÃÙFö1°µ/ùöÿÇ×ühþÂÔ¿çÛÿ_ñ®ÊŠËûF¯eøÿ™~Â'ý…©Ï·þ>¿ãGö¥ÿ>ßøúÿvTQý£W²üÌ=„N7û RÿŸoü}Æì-Kþ}¿ñõÿ쨣ûF¯eøÿ˜{œoö¥ÿ>ßøúÿØZ—üûãëþ5ÙQGö^Ëñÿ0ö8ßì-Kþ}¿ñõÿ?°µ/ùöÿÇ×ük²¢í½—ãþaì"q¿ØZ—üûãëþ4aj_óíÿ¯ø×eEÚ5{/ÇüÃØDã°µ/ùöÿÇ×ühþÂÔ¿çÛÿ_ñ®ÊŠ?´jö_ù‡°‰Æÿaj_óíÿ¯øÑý…©Ï·þ>¿ã]•hÕì¿óaþÂÔ¿çÛÿ_ñ£û RÿŸoü}Æ»*(þÑ«Ù~?æÂ'ý…©Ï·þ>¿ãGö¥ÿ>ßøúÿvTQý£W²üÌ=„N7û RÿŸoü}Æì-Kþ}¿ñõÿ쨣ûF¯eøÿ˜{œoö¥ÿ>ßøúÿØZ—üûãëþ5ÙQGö^Ëñÿ0ö8ßì-Kþ}¿ñõÿ?°µ/ùöÿÇ×ük²¢í½—ãþaì"q¿ØZ—üûãëþ4aj_óíÿ¯ø×eEÚ5{/ÇüÃØDã°µ/ùöÿÇ×ühþÂÔ¿çÛÿ_ñ®ÊŠ?´jö_ù‡°‰Æÿaj_óíÿ¯øÑý…©Ï·þ>¿ã]•hÕì¿óaþÂÔ¿çÛÿ_ñ£û RÿŸoü}Æ»*(þÑ«Ù~?æÂ'ý…©Ï·þ>¿ãGö¥ÿ>ßøúÿvTQý£W²üÌ=„N7û RÿŸoü}Æì-Kþ}¿ñõÿ쨣ûF¯eøÿ˜{œoö¥ÿ>ßøúÿØZ—üûãëþ5ÙQGö^Ëñÿ0ö8ßì-Kþ}¿ñõÿ?°µ/ùöÿÇ×ük²¢í½—ãþaì"q¿ØZ—üûãëþ5m­'³Ò-ã69ºf ñµ=>•ÓÖ^½ÿ¶ŸõÕ¿’×FR­NY$EJJ1º: ýJý+|t¬ ýJý+|t¯HçŠ( ô¬}[ýK}+`ô¬}[ýK}(“ðßümþéÿÐZ»ºá<7ÿ#[ºô®î€ -?ãÜÿ×GÿÐZǹÿ®ÿ¡ÔÔæ –'úÁõ¬xôq}ga3„>\qÉXŒ0Lg©­„ÿX>µM.͆à¸X%¸d¶M±D…™ŽÑYÕ¥ªÒ*2qØ´2÷1Ü7–eYQ·c?ÈUUðì×ÍqË3’ÅI ’zƒŒûâ¥ðÖ­¨ß  Õ-'Še;ÒV·xÑ”Ÿ»Èê?QøÖõ©ýåÉî$ðÚ§úšÃê4—¼¿k#”o À-n`€M ÜFÑ<Òª]ªFÑø ·s¢-ݰ·™d1 |ª%\û‘íÒºŒÑšoM÷ûÃÚÈåÛD‰£·ÉÂ[°h•cp€@àCOŸI>_šŒÞ[‰äa‡CÒº\Ô7wqÙYÏu6|¸ci'dÔýJ–úýàªËcšoÀÒ -¼Ì'ݶLïçœc¦)±xzÚÝ&UBžI!—s{n~œ×Smr—V±\G’ uÏ\‘RJ°‚z§‚¦´×ï¶“Ôä¿áµû,¶åI™ZF3È]ˆ9>wqZµm 5¤Mr3+Ÿ6wþm“øV½«fÊcÖ5$Ÿ¥-½Ìp,öÓG4-÷dƒ)úCÁS{ßïµ’0m<+ŒÞmº"¸R«™]‚)9ƒ£Øb’óÂp_Ïç\¢»íq3¨e8`0rzæºJ†îæ;+9î¥Ï— m#`dà š>§M>k¿¼=¬ž†Þ‚àH$3$‹!+#© ÐA#Ž1R\xqní’Þ`­W÷ŒHèCA÷ÍmÛΗVÑ\G’ uÏ\‘RPð4×}<Ä«Hçmü/ ©ˆÂˆ A“#±ùÈ-’zäɨDŽm‡ü°§Ÿ&Á·§Ëœ=H®šŠ>§O»ûÃÚÈáõoG,QF.í¬í’/ òûÊznÜÌ®6™¥²Ê­shD®’?ïÏ,¸Ú £ò®ŠY5™÷¨m&ÜŒã%³È~U-®§¥^ÜIoi}gq<~8¥Weú€r)¼$—x{G¹ÌG¥éÞ5Ôw–é#Ìé‚z™ÛŸ|S-´m"Îä\AslŽibª]ªN>»žÑ.£µy`[‰²DX`::*m‰ýÅü©}JŸw÷Ú³:v˜n<óuiæù¢mÞyûávÿ|ñQ¾¤I³76À¤"²]2Ìr܃œÛ¥vÛû‹ùQå¡þü¨ú•5ßïjÎV B—&ò¡Ü–;f}ŒOS·îçß“iá84ûç’îþȃD°e‘±ü¬ÍéÛÚº¹Û[ê~VBÌPÀýÚ·ó$Ô1Ä‘ TÏsîj^Ñ\Ò É]˜±èºTVíÞ[˜‹+m{Æl9\dœGAÅMoaio5Ô£Q´f¹;faÆ(­z+7…ƒÜÒëúÿ†1m42ÆV– »_1—iy.šB ,N°¦I¢i2Þ›¹.mZRÊä¦ÚX W;IãµnÑOê±½îÿ]_ðÇ>|=£‘űÞûcmþö8Ï`*yt­.3͸±25‰³?URH'žµ³EUwøŽëúÿ†9õÐ4•‰ã[ØÀvÞÌ5 71Æ9mÙ#³Š–ËJ°°ë0³0;DÀB€?­º(xX½×õÿ `Å¡é0Ȳ-Õ³H®<—Œí±'1ã§4ù4}*XîIìYnI óú°ÇÌ=‘ŠÛ¢ªÇ{¿Äw_×ü1ÏÂ;£ye>Õ2 ý¹÷îîÝ»¡#­Z³ÓôûÚ;k»5 Û˜›ÌÇÔ“’OÖµè¡ábômþ"ºþ¿áŠ;`ÿŸû?ûü(ÛüÿÙÿßáW¨¨ú•1óvÁÿ?ö÷øQ¶ùÿ³ÿ¿Â¯QGÔ©‡1Glóÿgÿ…`ÿŸû?ûü*õ}J˜svÁÿ?ö÷øQ¶ùÿ³ÿ¿Â¯QGÔ©‡1Glóÿgÿ…`ÿŸû?ûü*õ}J˜svÁÿ?ö÷øQ¶ùÿ³ÿ¿Â¯QGÔ©‡1Glóÿgÿ…`ÿŸû?ûü*õ}J˜svÁÿ?ö÷øQ¶ùÿ³ÿ¿Â¯QGÔ©‡1Glóÿgÿ…`ÿŸû?ûü*õ}J˜svÁÿ?ö÷øQ¶ùÿ³ÿ¿Â¯QGÔ©‡1Glóÿgÿ…`ÿŸû?ûü*õ}J˜svÁÿ?ö÷øQ¶ùÿ³ÿ¿Â¯S^æèÀ’yjŠÛ<ä?#ùSX*lNi+•6Áÿ?ö÷øQ¶ùÿ³ÿ¿Â®\@öA$óÚhKo0 ÊOð|éÔ< 4¨žÅ°ÏýŸýþmƒþìÿïð«ÔRú•1óvÁÿ?ö÷øQ¶ùÿ³ÿ¿Â¯QGÔ©‡1Glóÿgÿ…`ÿŸû?ûü*õ}J˜svÁÿ?ö÷øQ¶ùÿ³ÿ¿Â¯QGÔ©‡1Glóÿgÿ…`ÿŸû?ûü*õ}J˜svÁÿ?ö÷øQ¶ùÿ³ÿ¿Â¯QGÔ©‡1Glóÿgÿ…`ÿŸû?ûü*õ}J˜svÁÿ?ö÷øQ¶ùÿ³ÿ¿Â¯QGÔ©‡1Glóÿgÿ…dø€ ¶´Ù4R4üѶáÛŠé+Åê¬ÿë¡þ•µ4)Ï™Õw‰³¢©_¥oŽ•¢©_¥oŽ•Ús EPzV>­þ¥¾•°zV>­þ¥¾”ÉøoþF¶ÿtÿè-]Ýpžÿ‘­¿Ý?ú Ww@Ÿñîë£ÿèFŠ-?ãÜÿ×GÿÐHj jsPKH“ý`úÓtÏùÙÿ×ÿÐE9?Ö­R]Íá˜Æãì÷_gC›C íAàô f­CjØ–ïþ»ý+ ÃÛ³ù·:µÄÂ1”Ž #E$ƒËª8ì=zúV¼-‰ïW<ùÀãÛËOð4Ä;VÔ"Óô›»ÉD13°Œáˆ·½qVš†¡k&­2DÚK]D­~×EdÀ}†GÛ0Þ¥YC) Ž RƒHÓ-D¢ßM³„J¥dÀ«¼zEOq®‡0÷wÚ$6³Z^Þ\½Ö“4íÌÍ0óQQƒ.ìãïä‚(£[}^îõnô‹©'ó.ŒŠÌpBç Ôô»GµŒª˜¢‰%Š2Éåƒå‚:nÕ¥øelµC¨Nö/–ѪÛY¬ w¸¶ ,xé½[þ»ÿ˜––þ»óÞß]ÝiÚ}¼û-Æ—±íÔ×{ž nUmØÀã§=ë·Ñšìi6‹,r݈”K$g*çÔµR]'NšÚ;itëI îDð)Uú0*ìF;xÀcŠ5à€ !TÝî$­c ^½– [[[,u|©oÅø+–#$ … zúVMÓé6úî› ÎÙòÊ9¶†L.nÖa€Ø=Šºë+hžÊÂIaFš—c2‚ÈJ€p{TóYÚܸyí¡•‚²è…o¼9ì{Žõ6Ñùÿ_™WÕyCÜ_hÚÏiyyr÷ZL× ÌÍ0óQQƒ.ìãïãb‰mõ{«Õ»Ò.¥›Ì¹2+0EÁ œ/SÐ ïΪbŠåŠ32y`ù@ŽƒÛǵbé^[TêZI(£U¶²[u;ˆÜ[–<þ´Þ­ÿ]ÿÌQÒß×c{«ë»­;O·Ÿe¸Òâ–=ºƒZïsÁ;•[v08éÏzéôx¥W¶kíOÎÔEš¬°G81°ÏúÀ¸'¦ê».¥Ïm´ºmœ–ñ«‰àR©ôÀ©ã´¶ŠQ,v𤋈:  è¹ôö¦Þ·þº‰++] ¨¢ŠC+ÛÈbçþ¸GüÞ¹{£·Ž´yÐØO¬ÑÚÃdH„¦I~NõùHþ k¥Yb¶Õ&’âDŠ9!EVs€H-‘“õœ^Óæy¬£Ò­¥~á£7ÔŽ´–áÐã¬^ù|o£]ê:=ôzÏÚ<çsP¸]ª˜sò ú’pI¯Iªy¤É¯æx}r¯ò/¹œöoˆçßþÿöÊ?³|CÿÛiÿ?PÿßÁGÕáüÏï®UþE÷3þÍñüñ»ÿÀßþÙGöoˆçßþÿöÊì>Ûiÿ?PÿßÁGÛm?çêûø(ú¼?™ýáõʿȾæqÿÙ¾!ÿž7øÿÛ(þÍñüñ»ÿÀßþÙ]‡Ûm?çêûø(ûm§üýCÿW‡ó?¼>¹WùÜÎ?û7Ä?óÆïÿûeÙ¾!ÿž7øÿÛ+°ûm§üýCÿm´ÿŸ¨ïà£êðþg÷‡×*ÿ"û™Çÿfø‡þxÝÿàoÿl£û7Ä?óÆïÿûevm´ÿŸ¨ïà£í¶Ÿóõýü}^Ìþðúå_ä_s8ÿìßÿÏ¿ü ÿí”fø‡þxÝÿàoÿl®Ãí¶Ÿóõýü}¶Óþ~¡ÿ¿‚«ÃùŸÞ\«ü‹îgý›âùãwÿ¿ý²ìßÿÏ¿ü ÿí•Ø}¶Óþ~¡ÿ¿‚¶ÚÏÔ?÷ðQõx3ûÃë•‘}Ìãÿ³|Cÿ¯æx}r¯ò/¹œöoˆçßþÿöÊ?³|CÿÛiÿ?PÿßÁGÕáüÏï®UþE÷3þÍñüñ»ÿÀßþÙGöoˆçßþÿöÊì>Ûiÿ?PÿßÁGÛm?çêûø(ú¼?™ýáõʿȾæqÿÙ¾!ÿž7øÿÛ(þÍñüñ»ÿÀßþÙ]‡Ûm?çêûø(ûm§üýCÿW‡ó?¼>¹WùÜÎ?û7Ä?óÆïÿûeÙ¾!ÿž7øÿÛ+°ûm§üýCÿm´ÿŸ¨ïà£êðþg÷‡×*ÿ"û™Çÿfø‡þxÝÿàoÿl£û7Ä?óÆïÿûevm´ÿŸ¨ïà£í¶Ÿóõýü}^Ìþðúå_ä_s8ÿìßÿÏ¿ü ÿí”fø‡þxÝÿàoÿl®Ãí¶Ÿóõýü}¶Óþ~¡ÿ¿‚«ÃùŸÞ\«ü‹îgý›âùãwÿ¿ý²ìßÿÏ¿ü ÿí•Ø}¶Óþ~¡ÿ¿‚¶ÚÏÔ?÷ðQõx3ûÃë•‘}Ìãÿ³|CÿÕ­*p§.noÄÃZ¥hr¸%良Ø1¢bw4±ulÿËEﹿ7û<ÿÏVÿ¿¯Um¥†FÝ\Â0~HüÀp}O=jÿÛm?çêûø+yN/©Ë sKb/ìóÿ=[þþ½Ùçþz·ýýz—í¶Ÿóõýü}¶Óþ~¡ÿ¿‚§š=Ëä—b/ìóÿ=[þþ½Ùçþz·ýýz—í¶Ÿóõýü}¶Óþ~¡ÿ¿‚Žh÷Iv"þÏ?óÕ¿ïëÑýžç«ßש~Ûiÿ?PÿßÁGÛm?çêûø(æpä—b/ìóÿ=[þþ½Ùçþz·ýýz—í¶Ÿóõýü}¶Óþ~¡ÿ¿‚Žh÷Iv"þÏ?óÕ¿ïëÑýžç«ßש~Ûiÿ?PÿßÁGÛm?çêûø(æpä—b/ìóÿ=[þþ½Ùçþz·ýýz—í¶Ÿóõýü}¶Óþ~¡ÿ¿‚Žh÷Iv"þÏ?óÕ¿ïëÑýžç«ßש~Ûiÿ?PÿßÁGÛm?çêûø(æpä—b/ìóÿ=[þþ½Ùçþz·ýýz—í¶Ÿóõýü}¶Óþ~¡ÿ¿‚Žh÷Iv"þÏ?óÕ¿ïëÖGˆaò-­qlÊNKéë[Ÿm´ÿŸ¨ïà¬_KÐZ4R+¯˜FTävªƒWÐάZލÛÑ?Ô¯Ò·ÇJÀÑ?Ô¯Ò·ÇJÜæŠ( ô¬}[ýK}+`ô¬}[ýK}(“ðßümþéÿÐZ»ºá<7ÿ#[ºô®î€ -?ãÜÿ×GÿÐZǹÿ®ÿ¡ÔÔæ –'úÁõ¦éŸò ³ÿ® ÿ Šr¬Z¦‚ñ¼7éæ!tmFÒ’NÑÏôúP3RªÍn·3±’ê0β´~øÊòk'ÃZf¯¥  ¾– m˜ïB³3º¹<õQÁëõúÖý¯ß¹ÿ®£ÿ@Zb)ÿf?ý4ÿÀé¨þÌI?ð:jj±¥Íú\µ¼ZlÌ­p½gæÁøõ¨/±¦ÚÛÇqq¨ÚE¿êä’eU¡'’MkK†á-äÔ¬Òw¤m:†lôÀÎNhV7©f‰ Ž»“ù`SÕ÷(e9d˜k)oí¬¬lMÌ›<ó1ü¤îv(C'ÖŒŸZJ­g}o~³5»ÊоF0ÊpEZÉõ£'Ö’Š(¢«ßÝ‹ :æñ¸‚&¨8ÎqúPݵ¯¡bІÒà]ÙArh–5“nsŒŒâ˜/­Î¤Úxcö…ˆLWm$€sõ›VvwW,ÑPZÜý¤J|‰¡òähÿz»wcø‡ªžÆ§¤0¢Š(¨Ñ¦•wÅì= ¾3ïÀ5%EÄvúDSÊÛbŽîÞ€.I í¹ÿžpÿßÃÿÄѶçþyÅÿÿYö>)Ò5ˆ ·¹6UÝË‘yƒùw¨ÝÇhÍA¶çþyÅÿÿFÛŸùçýü?üMOš3@m¹ÿžqßÃÿÄѶçþyÅÿÿSæŒÐnçœ_÷ðÿñ4m¹ÿžqßÃÿÄÔù£4ÛŸùçýü?üMnçœ_÷ðÿñ5>hÍA¶çþyÅÿÿFÛŸùçýü?üMOš3@m¹ÿžqßÃÿÄѶçþyÅÿÿSæŒÐnçœ_÷ðÿñ4m¹ÿžqßÃÿÄÔù£4ÛŸùçýü?üMnçœ_÷ðÿñ5>hÍA¶çþyÅÿÿFÛŸùçýü?üMOš3@m¹ÿžqßÃÿÄѶçþyÅÿÿSæŒÐnçœ_÷ðÿñ4m¹ÿžqßÃÿÄÔù£4ÛŸùçýü?üMnçœ_÷ðÿñ5>hÍA¶çþyÅÿÿFÛŸùçýü?üMOš3@m¹ÿžqßÃÿÄѶçþyÅÿÿSæŒÐnçœ_÷ðÿñ4m¹ÿžqßÃÿÄÔù£4ÛŸùçýü?üMnçœ_÷ðÿñ5>hÍA¶çþyÅÿÿFÛŸùçýü?üMOš3@m¹ÿžqßÃÿÄѶçþyÅÿÿSæŒÐnçœ_÷ðÿñ4m¹ÿžqßÃÿÄÔù£4ÛŸùçýü?üMnçœ_÷ðÿñ5>hÍA¶çþyÅÿÿ\¿Œ…³óAÞ~ëgÓØW_šäükÏØ¿Þ?Ò'ú•úVøéX'ú•úVøéL¢Š(=+VÿRßJØ=+VÿRßJäü7ÿ#[ºô®î¸O ÿÈÖßîŸý«» ‹Oø÷?õÑÿô#EŸñîë£ÿèF€$5µ9¨%¤Iþ°}iºgü‚lÿë‚è"œŸëÖ© >ßUðÌw+º9-Ð{ƒ´`q@ÍZm¯ßºÿ®£ÿ@Zç¼1á„ÐüÙçò^íòãM¡P1îzŸËµoÚŸÞ]×Qÿ -1†µaw7ü%-'q<¶ž^ØÉóÛ»sŽø¤ñ“r÷ú¹²°Ç%•³â(ð$t˜±±m£§^•ÜfŒÑ}ë¡Åk‚mFëIÔí­õ8,à2¤‹2ÆÌÊu93Í.Ÿ£¬ú“ äÖª×r;][ì1—ÁåB€¹9ÀÀ®Ó4f„ì¨IÖ|QdúUÅô“ÇD"¶.¡¼¬[¢óƒ“Šít˜g¶Òl ¹}÷À‰#g9` Ö–+k{»›¨£Û5ÉS+n'vÑÇAÇ¥Yš. §gÿ6ÿõÍ•OY²éöú®€–w+º9!Qî÷á &‡æÏ?’÷o”m €ñsÔþ]¨rÙ±-ßývúW­YÝMÿ 8KIœO%¡“æ·8õÇzê¡l]ÝÇŸœÈUØ£?˜5)Wô4-ÆqÞ!ÓnûV6V.c’ÎÙñx:LI±m£§^”ýq¦Ôn´­JÞ J 8 ¨ë2ÆÌÊu93ÍuÛ_û¦¯èiä´ý- ¿Ð|˜næµVº‘ÚêßaBø<¨P'8Zþx±â{7Ò®/d¸Ž$ˆEn]CyX·Eç'ÛmCPCaW1ÄVk‚¦VÉ;¶Œ;qéC×A­5%Òk}*Ê —ߘ$b¦³[H?á"ŽÖ8SĆk¦ƒäÄÅO*A뎘®þŠVÒÞVü¿È:ßÎÿŸùže¦An,/®lõ;/54ÉDöÖЙ§ÜÜiwVR™¤Žúòh#â5³žN n‚Ÿ¦Å­ká}EêŠãrK–VÚ0§ž¸+¼Úþ†¯èh¸X•cEDPª aNój ¯èhÚþ†ù´yµ×ô4mC@ù´yµ×ô4mC@ù´yµ×ô4mC@ù´yµ×ô4mC@ù´yµ×ô4mC@ù´yµ×ô4mC@ù´yµ×ô4mC@ù´yµ×ô4mC@ù´yµ×ô4mC@ù´yµ×ô4mC@ù´yµ×ô4mC@ù´yµ×ô4mC@ù´yµ×ô4mC@ù´yµ×ô4mC@ù´yµ×ô4mC@ù´yµ×ô4mC@ù´yµ×ô4mC@ù´yµ×ô4mC@ù´yµ×ô4mC@ùµËxÅ· 3þÑþ•ÑmC\ß‹A g‘ügúP3WDÿR¿Jß+DÿR¿Jß)ˆZ(¢€Ò±õoõ-ô­ƒÒ±õoõ-ô OÃò5·û§ÿAjîë„ðßümþéÿÐZ»º(´ÿsÿ]ÿB4Qiÿçþº?þ„hCPKSš‚Z@DŸëÖ›¦È&Ïþ¸'þ‚)Éþ°}iºgü‚lÿë‚è"–ªS‰nÿë°ÿЦªÖçÞ×aÿ¢Ò˜‹E¨ÝP–£u &ÝFê‡u¨mÔånj¾ê|mó †ÃþAÖßõÉ?«[Oÿm¯ýqOä)a¾¶žòâÒ97Om·Í]¤mÜ29èxô¦æ¶‚à<1Ê@êEý™§ÿÏ·ýù_𥿾ƒM´k«–+•R@Ï$€?R*ÍUþÌÓÿçÆÛþü¯øQý™§ÿÏ·ýù_ð«TP_ìÍ?þ|m¿ïÊÿ…ÙšüøÛß•ÿ µTnu%¶Õ¬l EšìHCç…Øýs@¦Ÿe‡ŽÎÝNC,Jý*Íàf«X_A©XÅylÅ¡”e ÈéÒ€,ÑEQP^\ý’Õ§M>Ò— îs“Žãšž€ *Ž™©.¤·eb1ýžåíÎNwïW¨¢Š¯k}m{çýžMþD­ Ÿ)\uõë@(ª×wÖöMn³±Sq(†< åˆ$ÐÕš(¢Š* l­'}óZÃ#yãþµ=Q’u´¿(îÂãÌÏ,Wü(OìÍ?þ|m¿ïÊÿ…ÙšüøÛß•ÿ –êæ+;I®§b±B†G g št3%ÄÍÊH¡”ŸB2(ìÍ?þ|m¿ïÊÿ…ÙšüøÛß•ÿ µU¥¾·‚úÚÍØ‰î´kŽ¡qž@ ý™§ÿÏ·ýù_ð£û3OÿŸoûò¿áV¨  ¿ÙšüøÛß•ÿ ?³4ÿùñ¶ÿ¿+þj«ß_[i–RÞ]ÉåÁË¶ÒØç&€ý™§ÿÏ·ýù_ð£û3OÿŸoûò¿áTíüI¤ÝÄw,¯FiX^7:°VPHú µoªÙ]\E3n–[qr‹±†c'¹ý:Ñ`ý™§ÿÏ·ýù_ð£û3OÿŸoûò¿áMŸU²¶¹’Þi¶Ë¹¹eÚN#¸§ZgöÖý“¨.•¬¤Û¶Uƒ¸…ž§Ýè_ìÍ?þ|m¿ïÊÿ…ÙšüøÛß•ÿ §uâ].Îö[9d®" dH­e“nFFJ©bóX°°KV»¸‹¹8w©˜ôÇŽ1@fiÿóãmÿ~Wü(þÌÓÿçÆÛþü¯øTZ–³c¤´ y$ŠÓ’#Xáy°2x@MK§êVz¥¹žÊq,aŠ·aÔyØÐý™§ÿÏ·ýù_ð£û3OÿŸoûò¿áV¨  ¿ÙšüøÛß•ÿ ?³4ÿùñ¶ÿ¿+þjŠ«ý™§ÿÏ·ýù_ð£û3OÿŸoûò¿áV¨  ¿ÙšüøÛß•ÿ ?³4ÿùñ¶ÿ¿+þjŠ«ý™§ÿÏ·ýù_ð£û3OÿŸoûò¿áV¨  ¿ÙšüøÛß•ÿ ?³4ÿùñ¶ÿ¿+þjŠ«ý™§ÿÏ·ýù_ð£û3OÿŸoûò¿áV¨  ¿ÙšüøÛß•ÿ ?³4ÿùñ¶ÿ¿+þjŠ«ý™§ÿÏ·ýù_ð£û3OÿŸoûò¿áV¨  ¿ÙšüøÛß•ÿ ?³4ÿùñ¶ÿ¿+þjŠ«ý™§ÿÏ·ýù_ð£û3OÿŸoûò¿áV¨  ¿ÙšüøÛß•ÿ ?³4ÿùñ¶ÿ¿+þjŠ«ý™§ÿÏ·ýù_ð£û3OÿŸoûò¿áV¨  ¿ÙšüøÛß•ÿ ?³4ÿùñ¶ÿ¿+þjŠ«ý™§ÿÏ·ýù_ð£û3OÿŸoûò¿áV¨  ¿ÙšüøÛß•ÿ ç_óìÇP³ÿ„¿gþÍËó³åùüù8ßÓý)l%¹· M~%ݲåËÇ#÷jÄÿP:×wE;ÿ_ùæÞºŠãÅZtößÙðKsÿjµ´FY#8ÈäòAïÎi–ki. ÒÒ(õ”U[åŠ3ça÷†Õ½}i%ä+w·6„6wÛìÜ}¾ea¨Â=æIÝjº…ב:ϘÄeÏ÷Pq͵ò ®r3›ì-|idMmölgËß¹wìÏðç8ÎkRVÒG‹oˆ|±0x¿³þÑ»6õ}·oÎ{ô®ÎŠó›ðë÷j MþÓ-ˆ?$W$ðdóÑO@~ Ô~·óu;&Ô¬áÕãwk¨<‡[™Nåv.AÁÛŽ+Ò¨¡h¿¯ëú@õ¹ÌxÂÒÛßGoÝ\+yÓó?Îzžõ‡$]$¶ó ’|LVDnŒ6ô>ÕètS¾·þ·Oô–þ¶kõ<ÞþÒÊÒ[›9bA£Ùë03Äãtq#CÏ—s}9§k‚ÆmRÕMƆl€³k˜í÷î;¶íe ØÆ§Jôj)tþ»X?¯Æça¥[ÝxŠÂÞýÓRúLoÒ/ ÞaÀsÎ1ÍcNÚa:±€øI¦âÐÇŸ8ü㎫Œç¶3^ŸTôý:9n,íçÎ÷ ¼ƒ†n `t§}®÷ŸwåcŒÖÿ³¿µ5¯íÍÿlؿٟ{8ÙÇ“âߜ㞪i/.´ýLO{žõ´˜Oü¶‘I.£ßÖ»š*z]šýGý~_äy–˜i5«}:K cŸHf0éѲ “̓íô©®ŸMo Ø ÚGj'‡ûL¤$ª‡ýj©ØÏ?Zôz)ÿ_Åý~9ÏÛÅÓZê·v²Mº5´Œ¤Q ª‚ÍÇ~½Iª¾,M8kš,ÚÄp¶ž¢tvs±UÛœð:WAa-ï—åjWv{sŸ³ù7×r·éŠu…œ–q²KuxXä5ÆÌ¯°Ú«@lqš”B=NmÝÙ5É!žƒå ¸ó‡ýòŠàU›3iŸñ6òÿ„jn-<¼ùÇçu\g=±šôt˜ãÕP–æââl2IJ²í…IÉ ƒ““ÇZ“OÓ¡Ó–àBÎÞ|ïpÛÈ8fêJŸ×§èÿ_‰ÁëÐý£Äz”Zý“0ŒYKu ³*íÂÁÔ œðOá[~,½‚o jÖksæ\Ú$Bà„#i%Nyã§=ë­¢…µƒ­Ï9žå.u+‰m5gÖ“û2á%™‘@¶r0PùˆÆ1ž*Ο©ØéZÖ‘-ýÜVѶƒ«JÛA;‡ÞÑM;^¿æ-ýtÿ#ŠÕ.a¼Öï.-¥Ia“Ãò²:†ûVN£g>•á[´Œ¶Ÿ~¶†hÇHe܇xöl`ûà÷5étP¿¯6ÿPzÿ^I~‡q{oiãMkÏñ Òw-¾~óä?ßSÓÛÖ~·>)ÔožÆÚÚöÆ+²E+Üù`;ìë„lŸ¹éÒ»ª)çoïµ[Ÿ Ë Å¨¡¹†c2U‘käcß½køC~uO¶¿üMÖo *œ…÷J€AëÖºj)ߨºX(¢Š@QEQEQEQEQEQEQEQEQEQEQEQEQEQEËxÇ¥ŸûÇúWS\·ŒzYÿ¼¥ihŸêWé[ã¥`hŸêWé[ã¥-Q@éXú·ú–úVÁéXú·ú–úP'á¿ùÛýÓÿ µwuÂxoþF¶ÿtÿè-]ÝZǹÿ®ÿ¡(´ÿsÿ]ÿB4!¨%©ÍA- "OõƒëMÓ?ägÿ\ÿAäÿX>´Ý3þA6õÁ?ô@ËU ÖÎûØ0|cr;!ǦA丆I¤…%¥‹b+Éž™³RSWû>ïÜÿàTŸüUÙðÿ~çÿ¤ÿâªÕWû>ïÜÿàTŸüUÙðÿ~çÿ¤ÿâªÕWû>ïÜÿàTŸüU'öu¹ûÞsŽ»dÙOÔƒSGs ³M r«K E”$dgð©h¢Š(¢«_êºe©¹»—ˈ¹ÚX’x’O°§ÚÜÅyl—ïòÜdoþ*ÀøŠšŠ( Š* ËÈ,-ZæåÊD¤ÁKu8zšžŠŠ;˜%šXc•ZHH(<¡##?…K@Q@GûkJûa³þÓ²ûPm¦=wçÓnsš½@Úa7FÔJ¾xO0ÇžBçǦjZ(¨ ¹†ä9‚UFæ6*s†GÔT´QP^^Aaj×7.R%  [©ÀàsÔÓ£¹‚Y¥†9U¤„"ƒÊ23øP´QEQYï¯hÑ\›i5kœ6Ã\ `Þ˜Îs@QEQP\ÞAha¹S4‚(ð¤åAÇNMOEEÌ7!̬‚71±Sœ0ê>¢¥ Š( Š)“K¼Òº¤q©gf8 RhôUiu XÝÞ_–åÖ8ˆRÁ‹ Ž>¦¬ÐE“@]/­$³7‰uZ…,g€§wL T6šÞ“?“g©Ù\KŒì†á]±ë€hõQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@rÞ1égþñþ•Ô×-ã–ïé@Z'ú•úVøéX'ú•úVøé@ EPzV>­þ¥¾•°zV>­þ¥¾”ÉøoþF¶ÿtÿè-]Ýpžÿ‘­¿Ý?ú Ww@ŸñîßýÑE§ü{Ÿ÷ßÿB4!¨%«¡RÿX>´Ý3þA6õÁ?ôOQ‡úÓ4Î4«?úàŸú g¬O5½×‹$‚i!“ý CÆÅXgƒ‚:ph½±žÞó]‚-_U ed—Vù¼rUÈ|ä“– àäu®ÒK 9L¦KHÍ·ÍÝ;öýÝ޸힔洶w•ÞÞ&iG!( uçå>£“ǹ¡í \âuÍVâòÕVØÎ—é«vò%û[¨Ü  Ì9SÁíÞ¬µÜš®¥mo¨ÏiÓ#ºQæ,İ 08Ïzé®t}2ñb[­:ÎqÛ–mƒÐdp*޵ Éª¬QÅ%ŒpF»BO`³í>©–xö4ß[[ÿ_!/ëðþ¾gk¨jÚ’iv­tøm5fVmA­ZG,AmÁX¾08éÏ9®ûHk¤Z ùc–èD²Fr®}AÀëPÃáý14«M:{Hn µ@‘‹ˆÕú¼Ž´Ùìµq)•µª€#…¬K”tÈÐS}D–ÆM…½»ø×[–[‰£™$€¤kpÈ® @r€á¿j•…À´ðPÕ®®u ™îñzê4›FÒN#9««M2ÞG‚æöÞÒâþ%\ýœýœä¯çS}ŠÐY›1kوǓå˜ôÛÒ—K àÚ÷R¶Ñ¼Cl÷3FÖòÛùEovŒ9\)ôÍ^º·Ô-¯µ-"ÃT¸ m ¸®®˜²“#Q!Ë.à¸ïƒÒºˆt}2ÞÝíáÓlâ‚B Æ*«Ð Iq§XÞ76VóïPæÄ­¹AÈ#40èqwÁ©izmª›èÌZÊA0–í¤‘i'l¡‰#‘‚åZ‘«x€iW:¥å”BXŠÝ²<¬X†frrÛ@ßšé#Ó¬a†(b²·H¢}ñ¢Ä¡Q½@ÇÞ‹½>ËPU[Û;{•C•D)õ_…ƒúünqÖ—7šÌ^†êöéån ­ Lî1+ƒÈÁüišÐºßâ[ˆµ+øŸMŠ&¶ܰQû¼œ®pÙ÷Üh ‘HaŒ¼@ˆÛhÊÁÁíM{+Iáíaap›t`ù€ Þ¼zÐü:JËcâ‰låÔöòØ¥ÆÛ™Œ¥_yòºU¯Ï5·†îe‚WŠ@Ñáãb¤fE‘íZVŒêÒÙ›x/ YÞ ø\ç=³U`°Ôdbš¥åí©Â,Jdç ä»>”ï·õÔ[ö0@|g®LóÌ“Æð´q-Ã"¿î‡T Èî fønmkPšÃQ7iûǵ#ê û‡9AÀ©ÇCÛœ×m.e5ÜwrÙÛÉsÜ™âRëôldSWKÓÒôÞ¥…ªÝœæq ‡9ÿk¤†Î ››oO&­ªgQšXî@¼|0 ì6óòò£îâº? ßyvW÷·¥Ì7òÚÂ÷|îùW'ï6?+e,m#XU-`U€–ˆ,`ÉÈ%}:žž´}‚ÏôH8—λIýþŸ{ß­ ëËþ=¯_ø_–Ó|A °µk)uI#–öG,Öàíömè89ÝZ—³.5³s­\Ú6› }‘cŸ`#Ë $#£å²9ÈãÙ‹;QÑ‹hDs’Ò¨A‰ êXwϽC&“§LÐ4º}«´KB§Ë ^8ü)t·õ°ÛÖç+nPñMÆ£,Ö³¾‘ ¥c¸hrûÉ àŒŒž† “U¹—_µ½³3Çlú—Ù$_³‡ê¤yÂŒŒƒœþuÚ]iÖWÍ]ÙÛÜ4G1™bW(}FGÒ4Ã{öÓ§Z¼îóü…ߟ]ØÍUõOúÞÿð ¶úéoø''§‘eaâ;ûi¦mB›²yìS#|¼ã=óбáeÕòÞé¯[9­‹J­¨µÉv8!ÕJ ÁŽ}«¨uŠÞ›Ñgn.ÈÁœD¾a›±š®ÚDË4šU½•äg çœœ€TŸÎ’Óî×ï*ø¶y­¼7s,¼R#2(·¤èºÌwIä2Bþ& tÑøgÞÉ•Nzc5ÝÇmo ¸·Š’ò•\£*m/O²ŽHí,-`IÖ,Pª‡ú€9  o C¨Ãwrg¸G³xÐÇÛÚ핹ÉÜÊcn*ψ§š 4q¯™¨Ä±ˆÜ¤6AõÕa´‘iM ,tÙ‘…˜`ÞÊËϾimloKçU¹³½Áâ gå˜ØK·?•>¨]ÌiäYXxŽþÚi›P†æì¤{Èä/8Ï|â ±}^=:âý/Õ­ÛM–F?ÚMpÌûr®  ÙƒœÇ>ÕÛ:ÅoMè³·d`Î"_0MØÍG¦@Ó4:uœm2•”¤ €õ ÈúÔÛKyX«ë;œ•®,º–™jÚ¶­äÝ馿AöÙ3æ œƒœóž:t­Ï êÞw‡4ù/nU®ä‰Ž†ùv ¹Àæ¶ÖÝ$ŽE‚ ñ§–ŒeW”Ãǰ¦Çag„ÇiŒ,»}3ßMïoërRîqZ>§w.½§\Áç­ž¡Î"—Pk‚Ø—*F#>Àž¸§ÚâÿÁ·º”Ú•ÍÅýÅ”þlàìFÚr¢<àméÓ5ÖÁ¤i–·FêßN´Šá³™cUÎzòié¦iñÞ=âXÛ-Ó‚a‡lõËc&¥««ÎZ=–ZO‡þÃ}pâ{Ëq.nÞL‚‡åäœ/·J§wqö-KU:­ÄzµóC ˜› €áU }róœgž+²‡HÓ-€iÖ‘ — ¯Î:7¯=ií¦Ø½êÞ½•»]/ 9‰K£c5WÖÿ×Oò%++]ÌäuoµMuâk¥Ô/ “N†9-Ò+†TSåî9N’;ŠÕñ£8ðÜ1@’=棲H±»ær¹ d(c×Ò·ÎÕüýÖзÚ&Êæ c ëÇÓ­»<.`ˆ¼9ò˜ Ìy;}8ãŠ^^Ÿð~ñõ¹Ëø^E±Õo´ca=•´Š.m`¸Û¼,€mfÝƒ×ø[Ð"ŽÿUÔu’ŠJÖ– 48b?Þ|þVó[ÂóÇ;ÃM!$* (=@=Fp(‚m¢AqF !#P£$äð=è¿_ëú°_×Ì’Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¹oô³ÿxÿ1]MrÞ1égþñþb€4´Oõ+ô­ñÒ°4Oõ+ô­ñÒ€Š( ô¬}[ýK}+`ô¬}[ýK}(“ðßümþéÿÐZ»ºá<7ÿ#[ºô®î€ ŒÄÁ‰Ži#ÝÉ ‚3øƒRQ@æ?òù7ýòŸüM4Á1ÿ—éÿï˜ÿøšžŠ¨ÖM"”–îyðÊv.GÔ(?­K-ŵª¨–XâÀ @©ªµ‚+Þ_;(f…Ž@ا™4ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ç|W<7Ú<2¤Š‚PägŠí6'÷ò®KÆ ±àÉéõ€¿¢©_¥oŽ•¢©_¥oŽ”ÀZ(¢€Ò±õoõ-ô­ƒÒ±õoõ-ô OÃò5·û§ÿAjîë„ðßümþéÿÐZ»º(¢Š(¢Š* 7þ>uúî?ô©ê¥µÄ—W‚æháó$žcÜ6Æ}Á  J*§ö¦Ÿÿ?Öß÷ùÆíM?þ­¿ïòÿ[¢ªjiÿóýmÿ—ühþÔÓÿçúÛþÿ/øÐº*§ö¦Ÿÿ?Öß÷ùÆíM?þ­¿ïòÿ[¢ªjiÿóýmÿ—ühþÔÓÿçúÛþÿ/øÐº*§ö¦Ÿÿ?Öß÷ùÆíM?þ­¿ïòÿ[¢ªjiÿóýmÿ—ühþÔÓÿçúÛþÿ/øÐº*§ö¦Ÿÿ?Öß÷ùÆíM?þ­¿ïòÿ[¢ªjiÿóýmÿ—ühþÔÓÿçúÛþÿ/øÐº*§ö¦Ÿÿ?Öß÷ùÆíM?þ­¿ïòÿ[¢ªjiÿóýmÿ—ühþÔÓÿçúÛþÿ/øÐº*§ö¦Ÿÿ?Öß÷ùÆíM?þ­¿ïòÿ[¢ªjiÿóýmÿ—ühþÔÓÿçúÛþÿ/øÐº*§ö¦Ÿÿ?Öß÷ùÆíM?þ­¿ïòÿ[¢ªjiÿóýmÿ—ühþÔÓÿçúÛþÿ/øÐº*§ö¦Ÿÿ?Öß÷ùÆíM?þ­¿ïòÿ[¢ªjiÿóýmÿ—ühþÔÓÿçúÛþÿ/øÐº*§ö¦Ÿÿ?Öß÷ùÆíM?þ­¿ïòÿ[¢ªjiÿóýmÿ—ühþÔÓÿçúÛþÿ/øÐº*§ö¦Ÿÿ?Öß÷ùÆíM?þ­¿ïòÿ[¢ªjiÿóýmÿ—ühþÔÓÿçúÛþÿ/øÐº*§ö¦Ÿÿ?Öß÷ùÆíM?þ­¿ïòÿ[¢ªjiÿóýmÿ—ühþÔÓÿçúÛþÿ/øÐº*§ö¦Ÿÿ?Öß÷ùÆíM?þ­¿ïòÿ[¢ªjiÿóýmÿ—ühþÔÓÿçúÛþÿ/øÐº*§ö¦Ÿÿ?Öß÷ùÆíM?þ­¿ïòÿ[¢ªjiÿóýmÿ—ühþÔÓÿçúÛþÿ/øÐº*§ö¦Ÿÿ?Öß÷ùÆíM?þ­¿ïòÿ[¢ªjiÿóýmÿ—ühþÔÓÿçúÛþÿ/øÐº*§ö¦Ÿÿ?Öß÷ùÆíM?þ­¿ïòÿ[¢ªjiÿóýmÿ—ühþÔÓÿçúÛþÿ/øÐº*§ö¦Ÿÿ?Öß÷ùÆíM?þ­¿ïòÿ[¢ªjiÿóýmÿ—ühþÔÓÿçúÛþÿ/øÐº*§ö¦Ÿÿ?Öß÷ùÆíM?þ­¿ïòÿ[¢ªjiÿóýmÿ—ühþÔÓÿçúÛþÿ/øÐº*§ö¦Ÿÿ?Öß÷ùÆíM?þ­¿ïòÿ[¢ªjiÿóýmÿ—ühþÔÓÿçúÛþÿ/øÐº*§ö¦Ÿÿ?Öß÷ùÆíM?þ­¿ïòÿ[¢ªjiÿóýmÿ—ühþÔÓÿçúÛþÿ/øÐº*§ö¦Ÿÿ?Öß÷ùÆíM?þ­¿ïòÿ[®GÆÝlþ§ùŠèÿµ4ÿùþ¶ÿ¿Ëþ5ÌxÂxnÑà–9T1£Èô  -ýJý+|t¬ ýJý+|t ¢Š(=+VÿRßJØ=+VÿRßJäü9ÿ#Sÿºô®ß'Ô×áÏù_ýÓÿ µvÔ†.O©£'ÔÒQ@ “êhÉõ4”Päúš7SIE.æþñüèÜßÞ?%»›ûÇó£sxþt”PîoïÎÍýãùÒQ@ ¹¿¼:77÷çIE.æþñüèÜßÞ?%»›ûÇó£sxþt”PîoïÎÍýãùÒQ@ ¹¿¼:77÷çIE.æþñüèÜßÞ?%»›ûÇó£sxþt”PîoïÎÍýãùÒQ@ ¹¿¼:77÷çIE.æþñüèÜßÞ?%»›ûÇó£sxþt”PîoïÎÍýãùÒQ@ ¹¿¼:77÷çIE.æþñüèÜßÞ?%»›ûÇó£sxþt”PîoïÎÍýãùÒQ@ ¹¿¼:77÷çIE.æþñüèÜßÞ?%»›ûÇó£sxþt”PîoïÎÍýãùÒQ@ ¹¿¼:77÷çIE.æþñüèÜßÞ?%»›ûÇó£sxþt”PîoïÎÍýãùÒQ@ ¹¿¼:77÷çIE.æþñüèÜßÞ?%»›ûÇó£sxþt”PîoïÎÍýãùÒQ@ ¹¿¼:77÷çIE.æþñüèÜßÞ?%»›ûÇó£sxþt”PîoïÎÍýãùÒQ@ ¹¿¼:77÷çIE.æþñüèÜßÞ?%»›ûÇó£sxþt”PîoïÎÍýãùÒQ@ ¹¿¼:æ|^IKLœüÇùŠékšñwÜ´ÿxÿ1@z'ú•úVøéX'ú•úVøéLBÑE•«©o¥l•«©o¥r~ÿ‘¥ÿÝ?ú Wm\O‡?äi÷Oþ‚ÕÛRQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW5âï¹iþñþbºZæ¼]÷-?Þ?ÌPž‰þ¥~•¾:V‰þ¥~•¾:S´QE¥cêßê[é[¥cêßê[é@‡ØGâY¥n,}gó"¯ÿeÉÿC\Ÿ÷Ñÿâê—‡‹\ª±]Ñ€HõØùRÏÃÿß+þ”鯵*Ó¥~N¾Iþg7ý—'ý rßGÿ‹£û.Oúäÿ¾ÿ]'•'üü?ýò¿áG•'üü?ýò¿áQõj}¿þf¿]­Ý}ËüŽoû.Oúäÿ¾ÿGö\Ÿô5Éÿ}þ.ºO*OùøûåÂ*Oùøûå«Síø¿ó®Öî¾åþG7ý—'ý rßGÿ‹£û.Oúäÿ¾ÿ]'•'üü?ýò¿áG•'üü?ýò¿áGÕ©öü_ù‡×kw_rÿ#›þË“þ†¹?ï£ÿÅÑý—'ý rßGÿ‹®“Ê“þ~þù_ð£Ê“þ~þù_ð£êÔû~/üÃëµ»¯¹‘ÍÿeÉÿC\Ÿ÷ÑÿâèþË“þ†¹?ï£ÿÅ×IåIÿ?ÿ|¯øQåIÿ?ÿ|¯øQõj}¿þaõÚÝ×Ü¿Èæÿ²äÿ¡®OûèÿñteÉÿC\Ÿ÷Ñÿâë¤*ÈÑþõÛ-‚èOaíRÑõj}¿þaõÚÝ×Ü¿È忲äÿ¡®OûèÿñteÉÿC\Ÿ÷Ñÿâë©¢«Síø¿ó®Öî¾åþG-ý—'ý rßGÿ‹£û.Oúäÿ¾ÿ]M}ZŸoÅÿ˜}v·u÷/ò9oì¹?èk“þú?ü]ÙrÐ×'ýôøºêh£êÔû~/üÃëµ»¯¹‘ËeÉÿC\Ÿ÷ÑÿâèþË“þ†¹?ï£ÿÅ×SEV§Ûñæ]­Ý}ËüŽ[û.Oúäÿ¾ÿGö\Ÿô5Éÿ}þ.ºš(úµ>ß‹ÿ0úínëî_ärßÙrÐ×'ýôøº?²äÿ¡®OûèÿñuÔÑGÕ©öü_ù‡×kw_rÿ#–þË“þ†¹?ï£ÿÅÑý—'ý rßGÿ‹®¦Š>­O·âÿÌ>»[ºû—ù·ö\Ÿô5Éÿ}þ.ì¹?èk“þú?ü]u4Qõj}¿þaõÚÝ×Ü¿È忲äÿ¡®OûèÿñteÉÿC\Ÿ÷Ñÿâë©¢«Síø¿ó®Öî¾åþG-ý—'ý rßGÿ‹£û.Oúäÿ¾ÿ]M}ZŸoÅÿ˜}v·u÷/ò9oì¹?èk“þú?ü]t_n²ÿŸ¸ï±SÑW Q‡ÂeV´êÛŸ§’_‘Û¬¿çîûìQöë/ùû‡þû=¡‘Û¬¿çîûìQöë/ùû‡þû=Û¬¿çîûìQöë/ùû‡þû=Û¬¿çîûìQöë/ùû‡þû=Û¬¿çîûìQöë/ùû‡þû=Û¬¿çîûìQöë/ùû‡þû=Û¬¿çîûìQöë/ùû‡þû=Û¬¿çîûìQöë/ùû‡þû=Û¬¿çîûìQöë/ùû‡þû=Û¬¿çîûìQöë/ùû‡þû=Û¬¿çîûìQöë/ùû‡þû=Û¬¿çîûìQöë/ùû‡þû=Û¬¿çîûìQöë/ùû‡þû=Û¬¿çîûìQöë/ùû‡þû=Û¬¿çîûìQöë/ùû‡þû=Û¬¿çîûìQöë/ùû‡þû=Û¬¿çîûìQöë/ùû‡þû=Û¬¿çîûìQöë/ùû‡þû=Û¬¿çîûìQöë/ùû‡þû=Û¬¿çîûìQöë/ùû‡þû=Û¬¿çîûìQöë/ùû‡þû=Û¬¿çîûìQöë/ùû‡þû=Û¬¿çîûìQöë/ùû‡þû=Û¬¿çîûìQöë/ùû‡þû=Û¬¿çîûìQöë/ùû‡þû=Û¬¿çîûìW?â™xmä…ÖDGÚYNFOoÒºzÂñ_ü‚âÿ¯…þF€-èŸêWé[ã¥`hŸêWé[ã¥1 EPzV>­þ¥¾•°zV>­þ¥¾”Éø{þFIÿÝÖº k]M!QV¸™Š–EllBÁwۓǯç\ÿ‡¿ädŸýÑýkG\ðõÕÌw“YÞÜn^2Ðâ=¸R:\€'ëõ¥Ô} º®±w¥ù“¶›¾Æ"»æóÀl ªcœg¹§q$©nÏ"i@ùc/·?jÁ½Q“VA>s{el¨bÙ$J%“»¸,:vÆyô­I.o6ÝìÆuM¢%&f|Ýx÷<ÑÐ:•ìõ{«¥¾‹ì ·¶ŒªbYÃ#ddað?*]/T’úk»{‹QÅ«*¸I<Å9lË›¥ÙÝéÿÚä˜-¥"ÓÖd$žw7]«GíSè|öwW’‹/°YË·Ë´óa†w63Çö¦"FÖnî.®"Ó4Ñu»ùrK$â%.:ªðs‹­^ö=F;m:9f6ßh2ç`^qºsU WI…µ­‹]Ãq$“C,S"4eù!ƒÐ÷ªséowa=ö‘ý©³OXd $d‰s’~r3ß‘I_sýGßúênZëIu ÉªYi!hËÊdàŒŽµKMñ:wÛu9‘Ù;I”‚Ã;Fì—ú¨Å-–—{…¯lÞ0²J²ùâMÂ%`v¦ãéùT—:}Ô–$K^Úx^a¸|¡TƒßŸÂŸ_»þº}ÿð SëÚu´QI,΢U.«ä¹m£©*@÷ S®uÍ6Ñ"ynA'˜žZ4„§÷° ñïÒ²µ*åõÏ·Çoss –âKk³©œýåúÕiô­®íç¶²»{o², {ã‘Iäî‡>½©_˜Î Kñ[Í«ÆìYNA[¨kÚÉѬ–X­ZîâGÙº6ÒüyÁ蠟¬ÙÛGgaeoFŒ€#-¸¯ÊÜg½eßiZ†¥â1r.¦²·µƒdF#s#9ùÎ60Žƒ½}m©f÷^Š .ÎòÖ/´›×Hí×~ÀÅÆF[°Ç±©tQõ!t“[}žâÖo&To\à†ÀÈÁ…s ê‘h§J{c{gm|$dDk˜Í´t†=8J¿¡Zê:Tr¬zcGkqx [=–¶Œ™ÉÉ-ÎÐOZjÚÿ]¿à‰ÿ_‰q+²Š}4ź{KÕ”‰a݆ÌqµTž§ž8Å[»ñ•c0†æëcíVaå¹Bä 'ü •ªé÷–×ÑØ&òñŒ *+ål«N;tÎy¦ÞèWO«_Í6{wm¨b–ú‡’ä Èë¼u¥ØGJÚæž5?ìï9Úèc*»ÈÈË´qêj?i÷IoovL’#ߢÈGP¬Àü G¥éÓYk´­Ëy¼‘ ,BÇ´÷Ïç\Þ…£ªèz%¨°0Û[\‹ƒvÒ© ˜áTÙ=9½;jª_i0ß›)/œ8ŒüŒQ\ôRøÚ±9¨mõg]W[K–?f²1l b&Oy¬kV:~¡¡Çb¯ ÝÓJ/¼Õ ˆÏ¸å~öáÐ`c§5=þ›­%æ´Ö°^CÇ,rª3º~ëOzKoëÈ}K×¾(³‹D¹ÔlÉŸìò$rFÈèÊY€åHÝÐç§5nOi±ZGs,²¢JÅ#V·HäuÂmÜ*æS@Ô¥ÓõÀ–—=ËÁ$Þ] ]Ìx$ÜÝq“W5{KT¸Óµ?ìÛ¸ÚßÌŽKHïDRíla•ѱۡ4ÄtÖw¶ú…¢]ZJ²Âÿu‡ä~‡Ú©êþ›¥Ü,sºÊSÌÚ¼˜\ã'h8ZMÞ ;MX„/hÎÍ#E<þc†'’['$õëY·—0xؽ•ƒ_–Ó@+¨˜ýáç,@Å'½¿­‡ÒÿÖæËj‰%þš–÷6ïÚ;Žš@ ¡¼çðª·~#³{-@X\.mà•ÃX eøñ´àöÍgéÚõ›hI"©Ésç²0ÄfN@ÈÇ”YÚjÖþ›A“K9ŽÖHc¹I“d§/îç¸üh–ÎÃŽèմ׬þĆêéDÑÚ¥ÅÁÚv aÔœ`Øuö¥Oé/iqsö¢±Û`Ê'FPz¤ç·×2¾Õ`ЧÑâ@ñL±Ü¬­ WY”©hÝÉ0Î:v<ÚÅÖ“~bÒïa¾”Bƒíwârê² çséÖ©Ù¿ëúþ®B½—õýHéN­š=Æ£n²`ÞGÕFÕ­=.ÛQÕdÑ'šÄÙ[Ù[Þ´ªÆRÑ…Bž~qÛŠ<ÿ®£×àn[ø‡Kº¾pݘ–Uù+•êˆÚÄ{LÕõk› Û ;K$¹žì¸Q$þR®ÕÉçkVƒáùìe²·½Ó¯$k6-Ïöh2ÃËðH8ÆÞ2j}jÆ÷U“F»ºÐÊÂe7^to·# Ë­·-Eâ¢ñ'™c²q¨%„¨& ªÌ3¹X˜`Ž0? ÓÒõ?í#z<Ÿ/ì·Oo÷³»n9éÇ^•ËÛøQAEb--µ ¸ŽÈL­ä"ƒ½³œryÂæ´t¿í].÷Q‰´[‰¢¸¾y’dš »8.oJ¿¯—ü×ãÿ[Ï K9îŸ$‚Gì%#|³´:ÿ³úÖöä2_é°[ªÍ üRJ“+ð…=1Îw~¬_ìMG-þ×^Ÿ}Õqóuý:ûTÑø~êÏÆ6×VÀ($ϳ y2>2ô$gއ4-•ÿ­êßOëWú´moTÕâ†ét›x¬äfa¼%ÀŒíòýºf¤"Œø—û'ìíåc`ºÝò™‚î1ãvóœûV‡ô¹´ˆa2xIšþ6rnÖH2rNwç¡Å8ø_W] 'ó6¢²ý»ì»bÙççq]ûsܯÞÇá@?#^ç^Ô«ge¥Gr–J#µ×–͸g »HíÜŠÕÓ¯âÔôÛ{è§Œ:† ƹ›Ï ]jÚ†µ<’\Ùý¦(D.V`§puVà ñÏ©ÅtšJÊšMªMf¶r$aZ ªÆcÒ€{è\¢Š)QEQEQEQEQEQEQEQEQEQEQEVŠÿäýw_äkv°¼Wÿ ¸¿ëºÿ#@ôOõ+ô­ñÒ°4Oõ+ô­ñÒ˜…¢Š(=+'T\ÄßJÖªW‘oB(‹ÐP§ˆ¦b6dàßÚ»9=_þý·øW!¨Ú]ÛÊòÚK$2‚Èpq\åÅω•ŽÍVè¨ÿ C=KÎOWÿ¿mþyÉêÿ÷í¿Â¼“íž+ÿ ½×éþ}³Åôºý?€=oÎOWÿ¿mþyÉêÿ÷í¿Â¼“íž+ÿ ½×éþ}³Åôºý?€=oÎOWÿ¿mþyÉêÿ÷í¿Â¼“íž+ÿ ½×éþ}³Åôºý?€=oÎOWÿ¿mþyÉêÿ÷í¿Â¼“íž+ÿ ½×éþ}³Åôºý?€=oÎOWÿ¿mþyÉêÿ÷í¿Â¼“íž+ÿ ½×éþ}³Åôºý?€=e]¢ ¸áòrŒ06ŸQïR×ý³Åôºý?¶x¯þ‚÷_§øP¯Q^CöÏÿÐ^ëôÿ >Ùâ¿ú Ý~Ÿá@½EyÛÙâ¿ú Ý~Ÿá@½EyÛÙâ¿ú Ý~Ÿá@¯•¤6†Ò+Xc¶ ¯’±€˜=FÞ•*"ÆŠˆ¡QFT`è+ÈþÙâ¿ú Ý~ŸáGÛ‘ÿ?à4¿üMð±ôùø›ÿ¥ÿâhѼÅõ£Ì_ZóŸøXúGüüMÿ€Òÿñ4ÂÇÒ?ç¼ßø /ÿEÀôo1}hóÖ¼çþ>‘ÿ=æÿÀiøš?ácé?óÞoü—ÿ‰¢àz7˜¾´y‹ë^sÿ Iÿžóà4¿üMð±ôŸùï7þKÿÄÑp=Ì_Z<Åõ¯9ÿ…¤ÿÏy¿ð_þ&øXÚOü÷›ÿ¥ÿâh¸æ/­búלÿÂÆÒç¼ßø /ÿGü,m'þ{Íÿ€Òÿñ4\FóÖ1}kÎáci?óÞoü—ÿ‰£þ6“ÿ=æÿÀiøš.£y‹ëG˜¾µç?ð±´Ÿùï7þKÿÄÑÿ Iÿžóà4¿üMѼÅõ£Ì_ZóŸøXúOü÷›ÿ¥ÿâhÿ…¤ÿÏy¿ð_þ&‹èÞbúÑæ/­yÏü,}'þ{Íÿ€Òÿñ4ÂÇÒ?ç¼ßø /ÿEÀôo1}hóÖ¼çþ>‘ÿ=æÿÀiøš?ácéóñ7þKÿÄÑp=Ì_Z<Åõ¯9ÿ…¤ÏÄßø /ÿGü,}#þ~&ÿÀiøšôo1}hóÖ¼çþ>‘ÿ?à4¿üM'ü,#þ~&ÿÀiøšô1}hóÖ¼ãþF‘ÿ?à4¿üMð²4ùø›ÿ¥ÿâhÑüÅõ£Ì_ZóøYGüüMÿ€Òÿñ4ÂÈÒ?çâ_ü—ÿ‰ GóÖ1}kÎ?ádhÿóñ/þKÿÄÑÿ #GÿŸ‰ðOþ&€=Ì_Z<Åõ¯8ÿ…‘£ÿÏÄ¿ø 'ÿGü,þ~eÿÀy?øšô1}hóÖ¼ãþNÿ?2ÿà<ŸüMð²tùù—ÿäÿâhÑüÅõ£Ì_ZóøY:?üüËÿ€òñ4ÂÉÑÿçæ_ü“ÿ‰ GóÖ1}kÎ?ádèÿóó/þÉÿÄÑÿ 'GÿŸ™ðOþ&€=Ì_Z<Åõ¯8ÿ…“£ÿÏÌ¿ø'ÿIÿ +FÿŸ™ðOþ&€=#Ì_Z<Åõ¯7ÿ…•£ÏÌ¿ø'ÿGü,­þ~eÿÀy?øšô1}hóÖ¼ßþVÿ?2ÿà<ŸüMð²´oùú—ÿäÿâhÒ<Åõ£Ì_ZóøYZ7üýKÿ€òñ4ÂÊÑ¿çêOü“ÿ‰ HóÖ1}kÍÿáehßóõ'þÉÿÄÑÿ +FÿŸ©?ðOþ&€=#Ì_Z<Åõ¯7ÿ…•£ÏÔŸø'ÿGü,½þ~¤ÿÀy?øšô1}hóÖ¼ßþ^‹ÿ?Rà<ŸüMâ^‹ÿ?Rà<ŸüMzHp{Ò‚ yÜ_ô"ÀÇ[y?øšêôÍn×R·YígI¢nŒ‡?‡Ö€6¨¦#îú(¢Š*­Ô›šµYz›í‰¨ɾ(ê²²ÙÙ+‘Œîà»qŒÿßYüy¾êë~"J_P´ç “ÿe®3uK6ê|qË0Å’×|…¶Åõ8è=ÍVÝ]7†¼U‡esm=¡¸¶T…OÏ$œ…ë‘ÇJç÷Qº»­I‹S³ð½àÓaœIw?ÛmÔƒóy˜=3ÅGb¶:~“¨]¶“§Ý?öáµæá#8á}1Ú‹koë§ù‡Ÿõ×üŽ'u«¾²Ò´ë_ëšzéblc<œsÇZ¡ñœêúyxDtØwD«´!Ë| vÇLPö_×AÛs™ÝFêô[-GÔ´Û}A­íbþѲ[(QbPëçËØü£ž´ÇÓ´øgÕRÇH´¿¾Òm`…-Ì;–W?ë$e¹ŸÞ—þ¿®Ÿx–¿×õý#ÏwU¥Óî[I}P*ý•&ÝÎò3Óé]Âé:l$y_KµWþÅ7²ØÈ›£Šn8Úzj††»áÙ[P·´·ŽMPí¡O*D»Sà××ñ¥ý~6ëð¹ç[¨Ý]‡mãŸZÕ Ô4HVðºÇüKÌÖÖÍ“ò”^(k©|9¡Å›–ϧÀøÛ’Ñ6@ÛætQÓsO}ƒ©ÆÀÍ[Ôl.´›Ö³¼@“ª« ŒŽEwö‰ioáR9¬mòÅ!+qm`mÁ$€på™Ç^Ÿá¡â+T¾¼Ö’ûH·K[}ëV²ùbSn±ª ^¯É8êN&¹Ý.ÛO»’EÔu_ìäP 7Ù^mçÓ x§mZK•·SàŽK›ˆà… Ë+EÄÄà ×ð•¥¥ß,í&Tºµ2H?xŸ,€+JŸ 85·,VZ…¶ƒ©®›gi3kÖDµ‹dn¸Êúñüè]?¯!>¿×õ±ÇÜÁ5Ô¶×1˜ç‰Š:Ò>œQmmsy!ŽÖÚ{‰ÉHcg zà]ûÙÇ ÝÕ§‡í5+•ÖZ–¾nØð Àw“× ÍU%Ô>0Õ¬´kÛ«-.ßË–ëì¬Å‡ËŠ’r[ü1Ikk”Õ¯oë[3‡ŠFŽDdu8epAЃғuiøªþ}GÄwWsÙÍfdÛ¶)«í{œV6ê¨6ê7T;¨Ý@‰·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›u&ê‹u#1Øq×¥g¦^ß§™ "Eœ•°Ó¹¨ïlo4ò¾z.Æ8‡*O¥o‹‡F–Â2Š ÎW¶0 A};>™p—ÈH ņ{u½bZ[]_Jc·Œ1y‰À_©«Wz>¡g •Ö)FXÄÄíà⥲™bÑ@St ÈÁ¶Ÿ¾QÓŠ· ÌIz‚ ƒ"˜Ûpó‹Ž«Ž¤ûÐ qu:Ao’G8U^õ¶ÞÕÖ0}•ÛêÖ_›õýi<:ÑC}|É€GËû»Ž’ÖŒWwkÞ²o;¨ÜÇѽ®p?à\Uñ2„ÜcÐõð˜ u)*“o^Ç(Û‘ÙJ:œ2°ÁÒ»?‡œ¶ºÜ¶ÁÏ“,eŠçÀŒÈšæüDèÚ±uÆæKÿ½ÏôÅ\ðd…|B„pÿJë¥>x©w<Úô½•ISìÏ¢¬fó#5 +GrЭmŽ•©ˆ´QE¥djßê[éZç¥cêßê[é@ñÿÄÂÛþÿ²×ººÿˆñÿmÿÿÙkŒ¤ÆIºÕ8êiÌŽ˜ÞŒ»†á¸‘ê=©n×T¿²FKKû«tc–Xfd õóL×BºœDdóJy‡iïc?{ß­U¢€4YÔâšY£ÔïRYqæH·ñÓqÎOãM·Õu 3!µ¿»€Èræ)Ù7SƒÍQ œ д¾ºŽYeŽêt’`VWY¨cžA÷¢ÖþîÅËÙÝÜ[; †VBGÔªÁ‘ö8*ãøX`þT™  qê‘]¨îîå²LË+9ëóg4Û‹Ë‹É|Û«‰§—ß3—l}MV¢€-%õÔqÇ]N©ù‘ªÈÀ#ÿx ð}Ç4±ßÝÃt×Q]ÜGrÄ“2JÁÉ=rÀ皨N:œQ@Æ¡x³Ë:Þ\ ¥R²H%mÎPÇ9 ûÓVòá-þΗ,ÄžPrpþ,tϽV¢€4W[ÕRi&MRùe—d‹ráŸ2s“øÕë_]Ùx~m2Ù§Šin¾Ònã¸eº^99ÆsšÀ¢€.A¨ÞÚLó[^ÜÁ+ýù"••›êAÉ¥òÝ›µ¾ºG¬âfóü 9ªTPøõmF+™.cÔ.ÒâO¿*ÎáßêÙɪÒM$Ò´²ÈòHÇ,îÄ–>¤žµG(Ί.70ž™=¨txœ¤ˆÈ㪸 ÀзUí ϱýí—e'>GšÞ_¯ÝÎ:Õ Aèihüº¾£=·Ù¦Ôo$·ÀSÎì˜>RqI>«¨]@ ¸Ô.æ„tŽYÙ”~â¨Ñ@êxà’žU†\y‘«¯Ž™=ê=Õb ©­fY­æ’WîÉ•aÛ‚9ñv±¤kwp9<ÔQ+a_ûÀg†÷ëU™1½w Ãp##Ô{Sh¡ƒÅwÖÚ ú|RÜ¥Ä×_ikŹ`çå©îsŒç5™oªê#Zêp4§2§d.}N=OZ£EZ¹½¹½›Î»¹šâ\c|Òlzdš‡uGEIºÕ&ê7TtP›¨ÝQÑ@n£uGEIºÕ&ê7TtP›¨ÝQÑ@n£uGEIºÕ&ê7TtP›¨ÝQÑ@n£uGEIºÕ&ê7TtP›¨ÝQÑ@n£uGEIºÕ&ê7TtP›¨ÝQÑ@n£uGEIºÕ&ê7TtP›¨ÝQÑ@ Ô%pÊ:qŠI¯^ãØÎvŽõJŠ» Û[±1¿ªš–]RiWní™ï’MfÑ@ ¹ì¯›xéÛÐÕöñ›‘÷²OéëXTVU(S¨ï5s¦Ž2½¸Ó•“'–fšFwbYŽI=ësÁ§> O÷ô®rºÈŸîéZ¥mÌÛnìúDÿR¿Jß+DÿR¿Jß*„-Q@éXú·ú–úVÁéXú·ú–úPƒ|CÿûoøþËY~‚ ïïLéhÞ]Œ²#]Ä$c A§ÐÖ§Ä?øÿ¶ÿÿìµËØêéæäĨßhàmàœ+u#ž´ŸPìnD­q>£¶îÀyzlŒ[K·X‘Æáò°1®,ôæ­M¤.¯}f$r°ÛèðÌádD-€PÎv®Išæ,¯å°"%CöˆÜ H'üUèüGyÛ¿•lþU·ÙX:&‹²¸Ï8õ-xÄ“@tÛ ,äq(µur‘¾1¹Níà sóQö¯ýtÚß×SkÄQ¹ñT‹<ª‰,Æ6í|ç¸ÏÄVwŒ#Óá×·šL8.¾_A÷T(+ø“Tîõë«Ã©Rý èÒíR6í'yã¯|Ó5Maõm=¥ª\ y—«—78íØ ”´_×b¯©[:T_èú¡†3y ¨$Ú7Ÿ}3×Nì³XÕkN¿›LÔ!½·Úd‰²Œ«„Ü~µ^B:K 8­ï´KÏÙïZ nn."Uóô%S$ÇûF£Òü/iq§Ù\^Ü4fð±WPD°(b¡™\î~A8\qïY ®]uõr#k—f$vÀ®Ï@ö¶úãÇa•Å•äQ0›„bÑg“‚¬8Ï89¼ÀÔÓü-k}s§w"[O¾|¡”ì•X ã¡-^ÍÖ²5 5,4û¤WG’6ÆCm\qœ’­úQµyo£K¥ÆTA$¢RØùàC…'ýÑMÖ5{oPkÛ¡‘”.ØÆ;×êi¿ëúþ¶…tž¹FvòØiÓ¬6sÌ­5œnû•Ib¹<ö®n­ØjéÏ3¨Æh^Þ Â°ÁÇ=hèÅÕBÃM¸[ õ6–õ#˜ÖÆ(⊠°»~lN>¹¨N‹e§[M6¯%Ëm»{DKBªILnbX9çÔU{/ÜY[A µ´¸6Ì^ÚIã,ÐsòòçœFi¶ºôðE,7ö×ÑI/žRé 'v ä÷ìhôþ¿­GëýZ“éßÙZGˆ¬Ä¾j$–¬ŒnV%”‘ØàŠ—Æú\vwóÞ\<¾}ㆶXñ°"¨ XrsÆÑ‚:žÂ±^¼›ûGÏMý¡7zô*r¥qŒc·lv§Þx†òý/c¸HZ;§Y m8‰Ô¹9à0zä~—õø¿}me ñ!ÔEÍç•5°†D—‹að«èö‡Ã«¨@——R•c#E*m¶Ã` inœîàsLÿ„–å¯/§žÖÒt½ÛçA*6ÂWõïQA­µ­¤ÐÛXYE$±¼Mpªûö7QËmèqÓ8¢ÚÜÊ«zTi.±eˆ®q²°È °È"ªT¶Óµ­Ô7xdPÝ <ÕE٦ɒºilzŠxƒVÍÞ—aÈÀÈîzb±"Ö."Ôî¯Õ"2܉C‚Ñæÿ´qRI®=Å‚[\ÙYÜ £! G ƒZ:_ˆ‘ ­}³´Ö´ˆ4lDܪø>™ç­dj:¬ºˆ 0[Á•Š„Lœž¤’IêI4=ÿ®ïþ–ß×dQ¢Š)€QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEWCàÏùSýÃý+ž®ƒÁŸò0Çþáþ”ô&‰þ¥~•¾:V‰þ¥~•¾:UZ(¢€Ò±õoõ-ô­ƒÒ±õoõ-ô =Óôû=SÇÚ^ÛCq ÚÌv˸4g pxÆ}Ív¿ðƒøPuЬïÕrZü”‹cÿN³ÿ4®ÇW×ãÒuK i¢‘¢ºY xãyvŒ*‚NsHÿáðŸý¬ïÕðƒøOþ€V?÷ê­\ëúuÌv÷IÉ·k4ËtöíúY‡ÅVÖ:þ©g©\yPÀbòˆ…ˆPË’Y€ ÷8§`,ÿÂá?úXÿߪŠçÁž‚ÖYáÐìD¥ùX à‚ X×uñ£[Å*YMt$eÓˆÐ3É~ø$þµ¥|â[t?é‹ÿè&‹•ÿ¯‡è¥ÿàáGü"¾ÿ —ÿ€qÿ…kÑHfGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ©4ÑÛÁ$ò¶ØãRîØÎ&¹ûíBëÈR]¬)…ñæÀ ›yùsÆêƽxÑ‹”„Ùsþ_ÿÐKÿÀ8ÿ±Ýiÿ?PßÁGÛ­?çêûø(z*·ZÏÔ÷ðQöëOùúƒþþ žŠƒíÖŸóõýü}ºÓþ~ ÿ¿‚€'¢ ûu§üýAÿn´ÿŸ¨?ïà  è¨>Ýiÿ?PßÁGÛ­?çêûø(z*·ZÏÔ÷ðQöëOùúƒþþ žŠƒíÖŸóõýü}ºÓþ~ ÿ¿‚€'¢ ûu§üýAÿn´ÿŸ¨?ïà  è¨>Ýiÿ?PßÁGÛ­?çêûø(z*·ZÏÔ÷ðQöëOùúƒþþ žŠƒíÖŸóõýü}ºÓþ~ ÿ¿‚€'¢ ûu§üýAÿn´ÿŸ¨?ïà  è¨>Ýiÿ?PßÁGÛ­?çêûø(z*·ZÏÔ÷ðQöëOùúƒþþ žŠƒíÖŸóõýü}ºÓþ~ ÿ¿‚€'¢ ûu§üýAÿn´ÿŸ¨?ïà  è¨>Ýiÿ?PßÁGÛ­?çêûø(z*·ZÏÔ÷ðQöëOùúƒþþ žŠƒíÖŸóõýü}ºÓþ~ ÿ¿‚€'¢ ûu§üýAÿn´ÿŸ¨?ïà  è¨>Ýiÿ?PßÁGÛ­?çêûø(z*·ZÏÔ÷ðQöëOùúƒþþ žŠƒíÖŸóõýü}ºÓþ~ ÿ¿‚€'¢ ûu§üýAÿn´ÿŸ¨?ïà  è¨>Ýiÿ?PßÁGÛ­?çêûø(z*·ZÏÔ÷ðQöëOùúƒþþ žŠƒíÖŸóõýü}ºÓþ~ ÿ¿‚€'¢ ûu§üýAÿn´ÿŸ¨?ïà  è¨>Ýiÿ?PßÁGÛ­?çêûø(z*·ZÏÔ÷ðQöëOùúƒþþ žŠƒíÖŸóõýü}ºÓþ~ ÿ¿‚€'¢ ûu§üýAÿn´ÿŸ¨?ïà  è¨>Ýiÿ?PßÁGÛ­?çêûø(z*·ZÏÔ÷ðQöëOùúƒþþ žŠƒíÖŸóõýü}ºÓþ~ ÿ¿‚€ Ûo¶X\ZïÙçDÑîÆqFqø×!«ÛÏ¤Í ËqÂevb(AR¾¬s÷¿JëþÝiÿ?PßÁUîN“y·í_bŸnvù»ëŒ×.+ ñ³ß£F“¥Ï¨ÛÛߨÒ/?w–!$‘œ Û»íôïV|eÿ?õø¿úÖÄ3éöñ,PKkkÑ•@übø¶HæÓlš7W_µ¯*r>ãÖ”(FŒyb XÓÑ?Ô¯Ò·ÇJÀÑ?Ô¯Ò·ÇJÜ¢Š(=+VÿRßJØ=+VÿRßJã¼Us¯Þ}¨Þ}«È謽¯‘—¶ò=syö£y¯#¢käÛÈõß5ýhó_Ö¼ŠŠ=¯{o#×|×õ£ÍZò*(ö¾Aí¼]ó_Ö5ýkȨ£Úù¶ò=wÍZ<×õ¯"¢käÛÈõß5ýhó_Ö¼ŠŠ=¯{o#×|×õ£ÍZò*(ö¾Aí¼]ó_Ö5ýkȨ£Úù¶ò=wÍZ<×õ¯"¢käÛÈõß5ýhó_Ö¼ŠŠ=¯{o#×|×õ£ÍZò*(ö¾Aí¼]ó_Ö5ýkȨ£Úù¶ò=wÍZ<×õ¯"¢käÛÈõß5ýhó_Ö¼ŠŠ=¯{o#×|×õ£ÍZò*(ö¾Aí¼]ó_Ö5ýkȨ£Úù¶ò=wÍZ<×õ¯"¢käÛÈõß5ýhó_Ö¼ŠŠ=¯{o#×|×õ£ÍZò*(ö¾Aí¼]ó_Ö5ýkȨ£Úù¶ò=wÍZ<×õ¯"¢käÛÈõß5ýhó_Ö¼ŠŠ=¯{o#×|×õ£ÍZò*(ö¾Aí¼]ó_Ö5ýkȨ£Úù¶ò=wÍZ<×õ®?Á?òýÿlÿöjëkXÊêæ±|Êãü×õ£ÍZeÊæ¿­kúÓ( ù¯ëGšþ´Ê(þkúÑæ¿­2Ššþ´y¯ëL¢€æ¿­kúÓ( ù¯ëGšþ´Ê(þkúÑæ¿­2Ššþ´y¯ëL¢€æ¿­kúÓ( ù¯ëGšþ´Ê(þkúÑæ¿­2Ššþ´y¯ëL¢€æ¿­kúÓ( ù¯ëGšþ´Ê(þkúÑæ¿­2Ššþµçº–§6«ckq2FŽnŠŸ,‚rO?1®þ¼Õäkÿ_ÿ -c95V+×ô:)Â.„ä֪ߩÜhŸêWé[ã¥`hŸêWé[ã¥ns EPzV>­þ¥¾•°zV>­þ¥¾”ÉøsþF—ÿtÿè-V|mÿ.?öÓÿeªÞÿ‘¥ÿÝ?ú UŸËý´ÿÙk:Ÿ "§Àr]*!s £$ô…KU’ÍàÊU{X+u9Õº–j½äíonZ0V!#SбéV*Õ›]\Ä]ÊÃ'är­¸ñÛÛ?%¾¢^d–wæÙ]ÀY*ê;0àÕŒÕ;K6´¸›k–†L0 Ř7C×ð©áµ‚ݘà F_ïÍ7`v,É n|õÀd“è*¢]þúWu‘Qv¢ÆG%ºô…OqŽñ<{KFÄáŽãµvÈ fQ+HA$‘ŠjÖ)ZÄÂñå[xB„ ‚j;«¬C2Å»ÌVTçÓð¤6“ ²†F›ÌÞÀä/Lcð¦ý–àm`bg™@<`v¡$šë| ‰¾9w¬xn£?ýj‘¯#Y6ív‚åÒ˜-$’V“ÌÞùàtÇJlM¿8W@Å.Ùçýž™§ hX*Ò˜ÑÀ8gm«Å;:¡ófm¼g徜~µ$Íh‰CX†îäç¥6+IÊWÄPm=ÏÊ–¡*],„•G1ŒþóoÇ›©,ïÌÝ—Ðÿm1*EQ’1Á>¼úR­äo"¨WÚÇj¾>RiVyùO.SÙ;‡¦Cm0òVR›!(LüÇÉ£@КK€’ùb7‘ñ¸…øšk^ƲmÚä\”Ú›4ËpŽj ݎ⣂ɣ—ç è°%Û<ÿ³Ó4$‚Êı\<—2¦ÂcVÚcãœóGÚí¦%BȪ2F8'ןJ[h¥‡z¾Â…‹ääçšjÅ:M;/–VCI9¥„féÀCé<ÉH ´´uÇ>Ôóq¶æGv+qŒ©õ?×üi«k,FÜÇåŸ- ÄŽ¸É•ÙÉ œ_Õ×’:cƒùSÐzÃp&f]ŽŒ cƒÓùTÕ´&%bÈ¡ØòCÏây©êúŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( «_I4V¬ð©$˜’£¹¹«5SQŠâk7KfûŽ›‡¦{S[ng¶«;ÇÆW~xeóOaŽÞõ´…Š)pcpkŸmò8â’)˜‘¹s€ž„jß@Â5Á˜’2j§ËЩòô:ÿÿË÷ý³ÿÙ«­®KÁ?òýÿlÿöjëkZ ½?…QVXQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEWš¯ü­¿ëíÿô¯J¯5Où[ÿ×Ûÿè)XOøÐùþ‡U/÷zž±ýNãDÿR¿Jß+DÿR¿Jß+ äŠ( ô¬}[ýK}+`ô¬}[ýK}(“ðçü/þéÿÐZ¬øÛþ\í§þËU¼9ÿ#Kÿºô®å;ÔÉ]XRWV<ŠŠõÖ–4dWuVs„à±Æp=x‰ËMØÉÈz’p+?cæeì|Ï"¢½sɺÆ|èWÛË'ŽáM0ÝÿÏÄ÷äÿñt{/0ö>g’Ñ^¬Ëx?åæßþüþ.©jWÖö7* “ìò¢c$¤ŸLþ){/0ö>g›QV?á,ñ+) |E8+$ØÁç (5v-Ä—<ÛÉã9ëoj¬=÷£~Ÿ•BI»Øy™TV¶£¯k/hí§ê×bæ(ËD‚c&9ÆÑ$œ``ŽOá^coñ;Çñ^¼º¬±Ê„nŠ[(Q‡é³<еM=˜ nÎ⊥¥xïű8“Q›qŸËF[8È'  d’Iï[I¯ø±®n#}CÈHU›ˆ¡^pt0ê¤uô¬š’Mò»zÁ/êñº‹š»)QOÿ„ÓÄ }䶤¬e¸Š2Ns·ÐÔ—7×LEã½FÑ c·<Žý¹ž.’Ñßîÿ‚oý7³DT 㿎š8ÿžÿñ5™«üGñ=›Hš¶Ö럳ÄxŸáôª†&œšJÿwü<¾kª6¨¬¿|AñF±¢ÏqªyÒ­Ë o³Ä¸]ªqÂS]?ü%šßüþÿä$ÿ íö>g7±ó3(­?øK5¿ùýÿÈIþÂY­ÿÏïþBOð£Øù‡±ó3(­?øK5¿ùýÿÈIþÂY­ÿÏïþBOð£Øù‡±ó3(­?øK5¿ùýÿÈIþÂY­ÿÏïþBOð£Øù‡±ó3(­?øK5¿ùýÿÈIþÂY­ÿÏïþBOð£Øù‡±ó3(­?øK5¿ùýÿÈIþÂY­ÿÏïþBOð£Øù‡±ó3(­?øK5¿ùýÿÈIþÂY­ÿÏïþBOð£Øù‡±ó3(­?øK5¿ùýÿÈIþÂY­ÿÏïþBOð£Øù‡±ó3(­?øK5¿ùýÿÈIþÂY­ÿÏïþBOð£Øù‡±ó3(­?øK5¿ùýÿÈIþÂY­ÿÏïþBOð£Øù‡±ó3(­?øK5¿ùýÿÈIþÂY­ÿÏïþBOð£Øù‡±ó3(­?øK5¿ùýÿÈIþÂY­ÿÏïþBOð£Øù‡±ó3(­?øK5¿ùýÿÈIþÂY­ÿÏïþBOð£Øù‡±ó3(­?øK5¿ùýÿÈIþÂY­ÿÏïþBOð£Øù‡±ó3(­?øK5¿ùýÿÈIþÂY­ÿÏïþBOð£Øù‡±ó3(­?øK5¿ùýÿÈIþÂY­ÿÏïþBOð£Øù‡±ó3(­?øK5¿ùýÿÈIþÂY­ÿÏïþBOð£Øù‡±ó6¼ÿ/ßöÏÿf®¶³´¹ï´;k›—ß+ïÜØ8b:aZ5¤U•b¬¬QE2‚Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¼Õ?ä oÿ_oÿ ¥zUyªÈßþ¾ßÿAJÂƇÏô:©»Ôõêw'ú•úVøéX'ú•úVøé] ´QE¥cêßê[é[¥cêßê[é@Ÿ‡?äi÷Oþ‚Õܧzá¼9ÿ#Kÿºô®å;ÒÎë>¼Õµ4¼¨€E!E¹&#× ïç¾; Ý"E·…epòŒ3*íî8ÉÅA6³¥ÛLÐÏ©YÅ*ðÈóª°ú‚jv–9 ŠXdÞ2®‡!†áÈ4Ä\w¥˜€ d“ØVƒâ5×~Ò>ÊöÍ »dË }ɃÇlUÛ^Þè²ÙX©ó.Yaw —;s蹬¨ô-CL×tûØo&¾ˆFmgY(ü¸±•#j®pÀzžx¡oý_Ó·õýH±k¯ÝrçNûð¬1 Y†Ó'ÌW…ëŽ:ž¾”ÏK<:$ÒÛ@÷ Í1‚ZFK…’x§ýŠàxºkãú3Y$Aò>ðv$c¯B*mNãì–ñÜìgòY䨽[Èp?*]u×C–k«/¯ªj:UêI&Fˆ(Ý€Ë,ƒÎqŒ1è*3X‹ZÓ–óKΕâ.–âebì3ÆGwéß=wÄçÅ:Α¦ÿ¡Y¶÷Í8—qÚ¡»ª“×®FAÈ8Ÿ ¡ˆ·ˆžñdXŽÏ1.JÆÈà±|ƒ* ŽÁ8ÅLjsÉò½ŠqŒaª×¹ —ˆ$Ôµ'zˆÓ­&F)å¼ñ€Y7s€s`)ê±[¼—Rö©`“gšòŒ@Üçœ+@ÏÌjÕî™ao=”0¼²Fì±ÜFËó “+ûÁ÷†íÎ1ÅX¼ŠæÑ’Ý$gIÛhQäôÚsœ–ÏOj¸JTéJUbÓm¤šÝwL¸Ç[OånmnŸ[lËÞIu[=B(%JŒæÁf;”Œ‚m '^JÓ‚þ-Fâʦk³nÈáÐn';”3 +‰ÈÉàæ³g:^Ÿ£iÒYéåî¡L\ÜH6|äu;ŽàÛÂÿ ަ¹§ñ-Õž­P!eæ’YÐóa¸ã–:qXA:׫)Ê)_–ìºù=üŒªS6¹,Ûv}⺴ͭvÒK›ù0ð4ÉQáò¨ çžg=ê½¼†B.®e’.ë±zçŽ@ÍkIn”M,wO¸ Ð;pFzàÊ5ý›@Uç´ÛŒä:FµàÊmÉÝ~¶¢’²3Þ3«ñêEr0CfW8ÎTõÓ5èøµžÔ·ˆ†PDÛ‘ë×¥p3K)µlÀ–[VuÚÿuÔ3tÇ¥k„wªˆ­¤á Ç†î8ëvßúWg\‡Ã‘̾—Mÿ ¥uõôŽQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEzW…¿äY³ÿÿèmZõ‘áoùlÿàúV½!…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@y²Èßþ¾ßÿAJôšódÿ5¿ý}¿þ‚•„ÿŸèuRÿw©ëÔíôOõ+ô­ñÒ°4Oõ+ô­ñÒºAh¢ŠJÇÕ¿Ô·Ò¶JÇÕ¿Ô·Ò€9?ÈÒÿîŸý«¹NõÃxsþF—ÿtÿè-]Êw¤3VðÅ®­¨AvîÑã‰ÑGúåôúúdzc^U j FÌ*ZŽoºŸõÑ?ô!LE£Ln”óLn”VNµ‡â˜’ÝC!ÄrC:±ÈÞPzñùñ[’u¬Ý^Ù/l…¬™Ù9’6ÁÇ €óƒŽ¾”€ð3G±†Âwû–úl³ÃM"™Pl;ÙŽÍÿ(fÂõÆŒîkŸÙz‚XÜhÚ¥þ®¶û-Ô_¿•k‚Âe@ÜÒp  Jí,zy¼<ºU Ò®-¡1\l"BêÛŠ¦wžp7 xÉgŒðKœmA™ì¡GxmþP‘ üìʼí»}}kÊ4äû½~ãH§%~‡?áø{ÄúÔëâ{8-lì´áä7žÈ  fgb¡}HÃpFô^.Ð$¶¹Ó4 :m?uŽÀI"ƒqù"ÜHÞÌcr‘ÉSŒŒ0åõ|=§è‹ªfÝÅ{qpŠòD£2Íó)Æ2vA9Éàsk©Üù‘Û óngÙ4²KÎÙ .ÜüÁ 9$d9ÈÈ×Ò©8©½?.®ßÖæn8Ón?á¶š¼–Ú¾¤e»º¸D޳­ã! ´mË‚?ƒ `rNj¯ü#z=”^p‰îIÍ1ÞѰlå{s‚2}1Þ¯7ˆö?3Ë!Wy#R22¦Gé’†';rAæ¯Ú¡Õ|1ö¹-¦ŽÞhÕž ràpÙR1Æ0Û²>\“€M*ü’÷ þB¡)ÁÛñÐʲТYKɧ±™£È‡`À2‚@ço±'¿9«‰¦ê pŠ8c!`šD"1¸±l3È$óÐäŠéôë[ 2Ĥ%1!BYÀÞç¯'©${úšÅ¿º¹3-Ì/{å:²›€«ÚÛŽrq׸ªÃÙÁr¯*¯–];áèÛ ÜK¦ÿÐRºÊæ< ‡G¹EH>ÔÄ0 çäOJéëÕGžÂŠ(¦ ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(Ò¼-ÿ"ÍŸüÿCj׬ ȳgÿÿÐÚµé (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+Í“þ@Öÿõöÿú W¤×›'ü­ÿëíÿô¬'üh|ÿCª—û½OXþ§o¢©_¥oŽ•¢©_¥oŽ•Ðr EPzV>­þ¥¾•°zV>­þ¥¾”ÉøsþF—ÿtÿè-]Êw®ßò4¿û§ÿAjîS½!ލæû©ÿ]ÿB%G7ÝOúèŸú¦"Ѧ7Jy¦7J«'ZÊ×&–ßMi¡•b–1+¤Ž@Â' Œê jÉÖ°¼W0·ðÝÜÅU„pNåXd[ÊpGzLg'§øºÊK]Nf–þ6Ü$˜‚žc#ò¨$/ùCcv;Õøõ/ ÇfæIíî®n"lÇ óI Õ Û¹l|Ã$zqâ÷~&ŽÖê&‚h¯"  #+dÁ »HÀãŒý+2}~=Eš”"Ë> ÈØÆIÏ\q\Ê·³ó±¦’zhvÏi ìÙ@Ç0¹ $ðFâC6¸äê3PK™$2ž¸é_L7…üngûV‘¤[Å„ì£$¨<çîžz~5$ðEÔ¦+}7Iš@»ŠÇµŽ=pJâúý=ù_õó5öRÚçÌK$±ãc‘Žƒ°­KOê–€(¸w@1µÉ þyÇá_DÅáOÏpöñišT“§ßB–_¨ê(»ðo…­b¾·¸bpŸÔ€ãI㨽_áþcT¦¶g„ÂYgvu &ÝŽ0^,ÆL^Õ,Qxfø³ÞÝYHGȲ§š«Îr6{ õé^Íÿ÷ƒžÚÒh<-æè°HÒ çvw0#­:óÃ^±Tyü'‹j´’ t+N>nyÇ}¹©úÍ4í×ÝþeZO{3ËtëKû;øµ #^µk€Fâ·™f9ÊJ«¸d}ÒJÚºÔ5/!ÓX¶¿BÏ<ïmÂ30 …VPsÐ6<k¼—þ´¼ŽÙü5FÎ#YÄËÜÝ\þ8ÆkN=GÓ.cŽÞÎÞÚ2ŽìÉ1Œ®Üv‘Ï'·ãYÏ[ëæktò«+]&úa4ZŽ”. bI¼ÝöÌ[vH9– N:2uäµ–Úù¡¸³0¬±0pÃiå3,p±ÎÕÆO,qß½Zi+¢É©ÃkæF 3 22îr;ñKëôí{?ÃüÇìe{\樮môY¬üûU¶Ÿ ŠÀ]`)b ÉçžúSìmô-AæŽS,.ÈñŽõÚÅr@nÇÞ> ì¿ëæ/dûœÍÖ3F;p±ÎQq1å†r=FÆ£†ÓÃ÷>g‘%´¾PÌ›.7løn*´)ö×Ì~Â]ÎZŠé¢´Ñ®fˆ[-¼ðº¹2%Ñ<®8zóéÇ­*[ørHå‘'µhâÿXÂç!>§wþ¿å×Ì=‹îsWT,´hnÃÛ›aÖapvßYÅÙh0ۥįBÿrF¸![èsƒGö…?åwüö2îr´WCom§\hÖ÷âÊ5ó¶¯pÊâÞü•a,ô.Þ7çLî‰n q޹ÍM_Gø˜•úœµÑZ/‡/4ÿ¶£B°…÷ÜcËÏfù¸5b[-e¹•àŽû²µÁ ßCœPñðNÎ/îÿ‚?bßS•¢º§²Ðc—{uª-pG™þï<þ¿ÙúÚþɘ~ÓŒù>yß]¹ÍÚÿ•ÿ_0ö/¹ÊQ]>¡e¦éðùÇMžd³˜ŸîÔÌ?Jeí®“i¦-øµ ùiYp€ÉçŒg4,}7k'¯§ù‡±’9º+¨6Þ¿j2Û}˜¾wÚ~Lúgv(’×ÃÑôs3 ɵÄiôû‰-!+äxön#—`X3€1êy⳵˖¹šá0’Áav†*§nÒqÓp»}šÇýtÿü ?ünšÇýtÿü ?ünˆášiöòc×Ëï_æp—¶·A.¡-¬vp¤0ŽiP ö¸c’ cŸ^qVômE¦¹¸ž+Fò¯/©Þ¤*¬C-•È#+Žzì6kôÓÿð(ÿñº6kôÓÿð(ÿñº§‡n-?Éù‘*-vû×ùœÖ¬·sßC°žâÁ‘„/ó<ÜÃŒûœzRL/&×§Óî$´„¯QãÙ¸Ž]`xÎÇ©çŠé¶kôÓÿð(ÿñº6kôÓÿð(ÿñº……’V¿àÊw}¾õþfÓjîîdùDi#•êÇÛ$ÿŸh·Ì—“Ýé35ìÑ‘‰$‹ËÛü1Œ98ç$‘Ï>º͚Çýtÿü ?ünšÇýtÿü ?ün……—Á†¾_zÿ3”Ó4»« "ûOu±Bcœ7úÒËŒœŒcöÅO=•̺6Ÿcåñ˜–än"€X{ä€8õ®“f±ÿ@]?ÿÿ£f±ÿ@]?ÿÿ¡á¦Ýïø0¶–Ó¯U׿rš­ó\ß}–ØL—Ö«n[xQ†NzŒ7lž*;P[È&‚â í1 ܈ŠG]ã#©Æ:µuû5úéÿøøÝ5úéÿøøÝ5‡šÙþ M_·Þ¿Ìåõë o'¶qk-Ì(’°J"3ÜHãÈϧ‘´yÛAxݤkæ²0ÖfnÙŽ;G×ÔìÖ?è §ÿàQÿãtlÖ?è §ÿàQÿãt–i$žÞL}o§Þ¿Ìâ¤Óo®Ý§[k„·ÊgM϶PÅŽÒFç­jé\ڵʹ֬©çÉ*M¹J¸g,3yî;WA³Xÿ .ŸÿGÿѳXÿ .ŸÿGÿÓ–RVoðbJݾõþg!ú^ÛÀmɆú[´]¥\>3»9|tíQÇ£L,ì#šÍœ&Ÿ$ ¨bNÌ.sìyé]žÍcþ€ºþþ7FÍcþ€ºþþ7Oêóïø??ó kÓï_æpÓiú¥Å¼†ç1"Û\Æ’LÈU‚mß°ã³r;jvmjK–³´UÑ0’#!Ù)fÃ)#Û¯µwû5úéÿøøÝ5úéÿøøÝR¡+À~¢q~_zÿ3Œ¾Ò/Zæy­ãuE¾[…HŒaœyAIÁ\ç×Ò™=‘²¸ŠÊ{•E˜<¼^b6áŒ'b0C]ŽÍcþ€ºþþ7FÍcþ€ºþþ7SõyÚ×ükÚßO½™Ê¦t<+geåbâ3 dÜ8Û"“ÎqÀ›—rÕŒ :j3LÍ‘‘y˜={åx®³f±ÿ@]?ÿÿ£f±ÿ@]?ÿÿ¥õië®þO¨[Óï_æq'NÔŸGÓ­þË4Réò.BõþgŸE¢ÞKgh^+¦†k ‘ 0†Ld|ÁÀä}Óœ¥n"ϦÏ?Ù̾}Ì+Ì2Àª!¯+YþL,ú[ï_æsZݽÓÍ Å„5Ú+*H­–#*áŽH8þxªèwQL·†9$‘oÞV·i³#1Ã'haÿµÚlÖ?è §ÿàQÿãtlÖ?è §ÿàQÿãt£†œU“ü5~ßzÿ3‘0jÖ6÷6–¬þeÁ–+”‘UgÜC ädŽªcH¾ûa+ir² öf{•0/œù{;IþsÞ»­šÇýtÿü ?ünšÇýtÿü ÿítÖkgø0jý¾õþeË?øò‹ñþu5W²¹0Üù2Dí‘pv0í‘ÁêãV+Ѥ­»#ši©;…QVHQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW›'ü­ÿëíÿô¯I¯6Où[ÿ×Ûÿè)XOøÐùþ‡U/÷zž±ýNßDÿR¿Jß+DÿR¿Jß+ äŠ( ô¬}[ýK}+`ô¬}[ýK}(“ðçü/þéÿÐZ»”ï\7‡?äi÷Oþ‚ÕܧzCESQEVwˆ?ä\ÔÿëÖOýÖgxƒþEÍOþ½dÿÐMLþiK㪧ÈÕ}ÿ`Ë/ýâ·k Nÿ‘ªûþÁ–_úÅnÓ[-ØQEÄQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEaißñù«ÿ×ñÿÑQÕú¡§Çæ¯ÿ_ÇÿEGWë: µoîü‚Š(«2 (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ áõm+û"ÆÖßÎówNÏ»nÞÊ1ÔúWq\Ç‹þí—ûçúT¸§%'º)NJ.+gúº'ú•úVøéX'ú•úVøéV@´QE¥cêßê[é[¥cêßê[é@Ÿ‡?äi÷Oþ‚ÕÜ)9®ßò4¿û§ÿAjí© “põ£põ¨è  7Z7ZŽŠ“põª÷¶é}aqhìUf£$uŒT”PõVìîŒèÛX÷%ž”ÒlXÌÞs«:®qŸñËdã&¥û^»ÿ>šgþÉÿÆêåžl×Ú/åE?µë¿óé¦àLŸünµë¿óé¦àLŸün®QG#îÃÚ/å_×̧ö½wþ}4Ïü “ÿÑö½wþ}4Ïü “ÿÕÊ(ä}Ø{Eü«úù”þ×®ÿϦ™ÿ2ñº>×®ÿϦ™ÿ2ñº¹E»h¿•_2ŸÚõßùôÓ?ð&Oþ7GÚõßùôÓ?ð&Oþ7W(£‘÷aíò¯ëæSû^»ÿ>šgþÉÿÆèû^»ÿ>šgþÉÿÆêår>ì=¢þUý|Êk×çÓLÿÀ™?øÝk×çÓLÿÀ™?øÝ\¢ŽG݇´_Ê¿¯™OízïüúiŸø'ÿ£ízïüúiŸø'ÿ«”QÈû°ö‹ùWõó)ý¯]ÿŸM3ÿdÿãt}¯]ÿŸM3ÿdÿãurŠ9vÑ*þ¾e?µë¿óé¦àLŸünµë¿óé¦àLŸün®QG#îÃÚ/å_×̧ö½wþ}4Ïü “ÿÑö½wþ}4Ïü “ÿÕÊ(ä}Ø{Eü«úù”þ×®ÿϦ™ÿ2ñº>×®ÿϦ™ÿ2ñº¹E»h¿•_2ŸÚõßùôÓ?ð&Oþ7GÚõßùôÓ?ð&Oþ7W(£‘÷aíò¯ëæSû^»ÿ>šgþÉÿÆèû^»ÿ>šgþÉÿÆêår>ì=¢þUý|Êk×çÓLÿÀ™?øÝk×çÓLÿÀ™?øÝ\¢ŽG݇´_Ê¿¯™OízïüúiŸø'ÿ£ízïüúiŸø'ÿ«”QÈû°ö‹ùWõó)ý¯]ÿŸM3ÿdÿãt}¯]ÿŸM3ÿdÿãurŠ9vÑ*þ¾e?µë¿óé¦àLŸünµë¿óé¦àLŸün®QG#îÃÚ/å_×̧ö½wþ}4Ïü “ÿÑö½wþ}4Ïü “ÿÕÊ(ä}Ø{Eü«úù”þ×®ÿϦ™ÿ2ñº>×®ÿϦ™ÿ2ñº¹E»h¿•_2ŸÚõßùôÓ?ð&Oþ7GÚõßùôÓ?ð&Oþ7W(£‘÷aíò¯ëæSû^»ÿ>šgþÉÿÆèû^»ÿ>šgþÉÿÆêår>ì=¢þUý|ʶ6²[¤Ï3#Oq1š]™Ú `g° 9«TQT’JÈÎRrwaESQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW1âÿ»eþùþ•Ó×1âÿ»eþùþ”«¢©_¥oŽ•¢©_¥oŽ”Ä-Q@éXú·ú–úVÁéXú·ú–úP'áÏù_ýÓÿ µvÕÄøsþF—ÿtÿè-]µ!…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@s/û¶_ïŸé]=s/û¶_ïŸé@º'ú•úVøéX'ú•úVøéLBÑE•«©o¥l•«©o¥r~ÿ‘¥ÿÝ?ú Wm\O‡?äi÷Oþ‚ÕÛRQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW3âÿ»eþùþ•ÓW3âÿ»gþùþ”©¢©_¥oŽ•¢©_¥oŽ”Ä-Q@éXú·ú–úVÁéXú·ú–úP'áÏù_ýÓÿ µvÕÄøsþF—ÿtÿè-]µ!…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@s>/û¶ïŸé]5s>/û¶ïŸé@š'ú•úVøéX'ú•úVøéLBÑE•«©o¥l•«©o¥r~ÿ‘¥ÿÝ?ú Wm\O‡?äi÷Oþ‚ÕÛRQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW3âÿ»gþùþ•ÓW3âÿ»gþùþ”©¢©_¥oŽ•¢©_¥oŽ”Ä-Q@éXú·ú–úVÁéXú·ú–úP'áÏù_ýÓÿ µvÕÄøsþF—ÿtÿè-]µ!…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@s>/û¶ïŸé]5s>/û¶ïŸé@š'ú•úVøéX'ú•úVøéLBÑE•«©o¥l•«©o¥r~ÿ‘¥ÿÝ?ú Wm\O‡?äi÷Oþ‚ÕÛRQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW3âÿ»gþùþ•ÓW3âÿ»gþùþ”©¢©_¥oŽ•¢©_¥oŽ”Ä-Q@éXú·ú–úVÁéXú·ú–úP'áÏù_ýÓÿ µvÕÄøsþF—ÿtÿè-]µ!…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@s>/û–ïŸé]5s>/û–ïŸé@š'ú•úVøéX'ú•úVøéLBÑE•«©o¥l•«©o¥r~ÿ‘¥ÿÝ?ú Wm\O‡?äi÷Oþ‚ÕÛRQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW3âÿ¹gþùþ•ÓW3âï¹gþùþ”©¢©_¥oŽ•¢©_¥oŽ”Ä-Q@éXú·ú–úVÁéXú·ú–úP'áÏù_ýÓÿ µvÕÄøsþF—ÿtÿè-]µ!…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@s>.û–ïŸé]5s>.û–ïé@š'ú•úVøéX'ú•úVøéLBÑE•«©o¥l•«©o¥r~ÿ‘¥ÿÝ?ú Wm\O‡?äi÷Oþ‚ÕÛRQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW3âï¹iþñþ•ÓW3âï¹iþñþ”©¢©_¥oŽ•¢©_¥oŽ”Ä-Q@éXú·ú–úVÁéXú·ú–úP'áÏù_ýÓÿ µvÕÄøsþF—ÿtÿè-]µ!…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@s>.û–Ÿïé]5s^.û–Ÿïé@z'ú•úVøéX'ú•úVøéLBÑE•«©o¥l•«©o¥r~ÿ‘¥ÿÝ?ú Wm\O‡?äi÷Oþ‚ÕÛRQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW5âï¹iþñþ•Ò×5âï¹iþñþb€4ôOõ+ô­ñÒ°4Oõ+ô­ñÒ˜…¢Š(=+VÿRßJØ=+VÿRßJäü9ÿ#Kÿºô®Ú¸ŸÈÒÿîŸý«¶¤0¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(®kÅßrÓýãüÅtµÍx»îZ¼˜  =ýJý+|t¬ ýJý+|t¦!h¢ŠJÇÕ¿Ô·Ò¶JÇÕ¿Ô·Ò€9?ÈÒÿîŸý«¶®'ßò4¿û§ÿAjí© (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+šñwÜ´ÿxÿ1]-s^.û–Ÿïæ(ODÿR¿Jß+DÿR¿Jß)ˆZ(¢€Ò±õoõ-ô­ƒÒ±õoõ-ô 7GRÚåÞ$1)”Ë<†Pß"´ÿ²äÿ¡®OûèÿñuKÃŇˆ®UX®èÀ$zì|©?çáÿï•ÿ Êt£7ï~¦ô«Ô¤­É?Ìæÿ²äÿ¡®OûèÿñteÉÿC\Ÿ÷Ñÿâë¤ò¤ÿŸ‡ÿ¾Wü(ò¤ÿŸ‡ÿ¾Wü*>­O·âÿÌÓëµ»¯¹‘ÍÿeÉÿC\Ÿ÷ÑÿâèþË“þ†¹?ï£ÿÅ×IåIÿ?ÿ|¯øQåIÿ?ÿ|¯øQõj}¿þaõÚÝ×Ü¿Èæÿ²äÿ¡®OûèÿñteÉÿC\Ÿ÷Ñÿâë¤ò¤ÿŸ‡ÿ¾Wü(ò¤ÿŸ‡ÿ¾Wü(úµ>ß‹ÿ0úínëî_äsÙrÐ×'ýôøº?²äÿ¡®OûèÿñuÒyRÏÃÿß+þyRÏÃÿß+þ}ZŸoÅÿ˜}v·u÷/ò9¿ì¹?èk“þú?ü]ÙrÐ×'ýôøºé<©?çáÿï•ÿ <©?çáÿï•ÿ >­O·âÿÌ>»[ºû—ùßö\Ÿô5Éÿ}þ.ì¹?èk“þú?ü]t…Y?Þ»e°A ì=ªZ>­O·âÿÌ>»[ºû—ù·ö\Ÿô5Éÿ}þ.ì¹?èk“þú?ü]u4Qõj}¿þaõÚÝ×Ü¿È忲äÿ¡®OûèÿñteÉÿC\Ÿ÷Ñÿâë©¢«Síø¿ó®Öî¾åþG-ý—'ý rßGÿ‹£û.Oúäÿ¾ÿ]M}ZŸoÅÿ˜}v·u÷/ò9oì¹?èk“þú?ü]ÙrÐ×'ýôøºêh£êÔû~/üÃëµ»¯¹‘ËeÉÿC\Ÿ÷ÑÿâèþË“þ†¹?ï£ÿÅ×SEV§Ûñæ]­Ý}ËüŽ[û.Oúäÿ¾ÿGö\Ÿô5Éÿ}þ.ºš(úµ>ß‹ÿ0úínëî_ärßÙrÐ×'ýôøº?²äÿ¡®OûèÿñuÔÑGÕ©öü_ù‡×kw_rÿ#–þË“þ†¹?ï£ÿÅÑý—'ý rßGÿ‹®¦Š>­O·âÿÌ>»[ºû—ù·ö\Ÿô5Éÿ}þ.ì¹?èk“þú?ü]u4Qõj}¿þaõÚÝ×Ü¿È忲äÿ¡®OûèÿñteÉÿC\Ÿ÷Ñÿâë©¢«Síø¿ó®Öî¾åþG-ý—'ý rßGÿ‹£û.Oúäÿ¾ÿ]M}ZŸoÅÿ˜}v·u÷/ò9oì¹?èk“þú?ü]ÙrÐ×'ýôøºêh£êÔû~/üÃëµ»¯¹‘ËeÉÿC\Ÿ÷ÑÿâèþË“þ†¹?ï£ÿÅ×SEV§Ûñæ]­Ý}ËüŽ[û.Oúäÿ¾ÿGö\Ÿô5Éÿ}þ.ºš(úµ>ß‹ÿ0úínëî_ärßÙrÐ×'ýôøºÞ·º´†Ú(žþ))rã,@ëÖ­ÑW Q†±ýLêשUZoðKò ûu—üýÃÿ}Š>Ýeÿ?pÿßb§¢´1 ûu—üýÃÿ}Š>Ýeÿ?pÿßb§¢€ ûu—üýÃÿ}Š>Ýeÿ?pÿßb§¢€ ûu—üýÃÿ}Š>Ýeÿ?pÿßb§¢€ ûu—üýÃÿ}Š>Ýeÿ?pÿßb§¢€ ûu—üýÃÿ}Š>Ýeÿ?pÿßb§¢€ ûu—üýÃÿ}Š>Ýeÿ?pÿßb§¢€ ûu—üýÃÿ}Š>Ýeÿ?pÿßb§¢€ ûu—üýÃÿ}Š>Ýeÿ?pÿßb§¢€ ûu—üýÃÿ}Š>Ýeÿ?pÿßb§¢€ ûu—üýÃÿ}Š>Ýeÿ?pÿßb§¢€ ûu—üýÃÿ}Š>Ýeÿ?pÿßb§¢€ ûu—üýÃÿ}Š>Ýeÿ?pÿßb§¢€ ûu—üýÃÿ}Š>Ýeÿ?pÿßb§¢€ ûu—üýÃÿ}Š>Ýeÿ?pÿßb§¢€ ûu—üýÃÿ}Š>Ýeÿ?pÿßb§¢€ ûu—üýÃÿ}Š>Ýeÿ?pÿßb§¢€ ûu—üýÃÿ}Š>Ýeÿ?pÿßb§¢€ ûu—üýÃÿ}Š>Ýeÿ?pÿßb§¢€ ûu—üýÃÿ}Š>Ýeÿ?pÿßb§¢€ ûu—üýÃÿ}Š>Ýeÿ?pÿßb§¢€ ûu—üýÃÿ}ŠçüS"O ¼ºÈˆûK)ÈÉíúWOX^+ÿ\_õð¿ÈнýJý+|t¬ ýJý+|t¦!h¢ŠJÇÕ¿Ô·Ò¶JÇÕ¿Ô·Ò€9?ÈÉ?û£ú×A­k©¤**À×1RÈ­ˆX.â{rxõüëŸð÷üŒ“ÿº?­h랺¹Žòk;Ûƒ-ËÆZG· GBËã=~´º¡wUÖ.ô¿2vÓwØÄW|Þx ƒ•LsŒ÷"´®e–+f’Þ<£îÆ.Ò°¯cÔdÕO§\ÞÙ[*¶I‰dîî †1ž}+BòëT·ßdÓó2*‹beSæ98ÈÆßsÎ(èJŸð‘¼0Þ‹»Õ«FžTr‡dá0ØúäqW4ýN[›Éì®íEµÔ*²Y<ÅelàƒÜÒ¨ZÙ“¤]ZÜè×RÃÉçM{‡õÊ¿`wã&ƒ¤Miwwr¯Ϊ‰Ü4̈¹êÌO$žƒLD¬ÝÜ]\E¦i¢ê;wòä–IÄJ\uUàç…Z½ìzŒv6ÚtrÌm¾ÐþeÎÀ¼ãtæª,®’5 k[»†âI&†X¦DhËòC#¡î3TçÒ.ÞîÂ{í#ûSfž°ÈHÉç$üäg¿"’þ¾çú¿õÔܵ֒ëA“T²ÒBÑ–”È Áj–›âtï¶ês"+²*,v“)†vÙ/õQŠ[-.ö ^Ù¼ad•eò-Ä›„JÀíMÇÓò©.tû©,4H–,½´ð¼ÃpùB©¿?…>¿wütûÿà§×´ëh¢’YDª]WÉrÛGRT î@§\ëšm¢DòÜ‚&O1<´i OïaAãߥekUËëŸoŽÞææ-Ä,–×fR 9ûÊ9õªÓè3[]ÛÏmevößdX ÷Æ)" “ÉÜ}{Rþ¿1@–9â·š'WØ2²œ‚ ¶ RÔ|A¦éW ¹Ýe)æmH^L.q¸íëSÙÛGgaeoFŒ€#-¸¯ÊÜg½Skƒâ¹/|¿ôf°‡Ü9}äãzP÷ÐÚÌ?Ú >ÕllźÈV-·'æÏÝÛŽÝiÚˆ4ÍRo&Òáš]ž`G‰ã,¾ª q\´=þŸ£Ì÷Pyk‚Öîw©Ã‚ÇNý*ö“£©O¡\ͧ›K{ r|Æ•XÌY€¡O¿8íÅ;/ëçþBþ¿þf”ZíâjÖÖZ†—öUºäºÜ Ê2C8ãКѷÔìî´Á¨Ã8kM…ü £98<ö5…£®¦Ú«Þêz5Ⱥ”²,¦hLpGœ…Pžp2q’}…l¦Õ´9`¾·6rÜÄñÉ9Läu9¤öS<],“·—¥Hð¨ÜÛYŒŠ¸ÝÈ °s´¾ïlñWõfòÞÔ^XiËyh óÚcr#qŸ”`’qÏ8õ‘imâKžÞXÊÎÅßiŒ9\ ¿pgiCéžõ.£§ßÅŸ¤Å§ÜÞið(›É–430à+naòñ“޹Ö@^e¹¼I,z^œ×’Éj·n¯(‹dg èrÇž=ºÒ^x®(4›=BÚÊâæ; ŒV0Ìæn€äô?Σ¸‡TµÕŽ©e¥™¾Óf°=¹™¡u$®NpGÌAÁ=;ÓfÐn¡ð=¾“\Æa-†$VlŽ:ÓVüWÿZÿ_#GZÔït¸â >;‹x£2Jïr#  N>”ºŽ´¶>:º@Ò/–’˜ì8b8<uª¾$·’þ²ê)·trùÈ‚7äg’cÔf™ªizÇÿ³‹}«PòcWmÀo`W''‡­ Ì}QnóÄúFŸu%µÕÑŽHöù‡Ér©»¦æhϹ©-|A¥ÞGrðÜœ['™(’'B«‚wa€$py©h××ø¡c·Üo¢mþuùȼsëŠ]fÆågÔ¯Zø,q޽*[·õä4¯o뱯§øƒLÕ'òm.KK³xI"xË/¨ G¸¢ßÄ:UÕð³†ì4IJ¯ÈÁ\¯P¬FÖ#ØšÃÒíµVMy¬M•½•±ýëJ¬e-P)àw縨´Oe-•µöŸxæÍ‰Žëû@´€Â2ùƒŒmã&©«;ÕÍiüOe6q>Ÿr™ˆ¯ïg·—ÊåÂðBüÞœf®Ýëš}ÚZÝLñÈå@c ìÉè ãhϹ¬OìmCþüzgÙÿÓ\ǽ{J®qÓÞªxƒHÖµ «èü‹Ëˆä’3jÑ]ªC ¤‡Œ°ÉÈ'8=¨ëaŸ}=Æ»«ÚÈÀÅlÑ€7&Oך®ÚííÍåÌ:N”/"¶s³Ip"R㪯8üI§ÙÝ[x“VžHÑ®„O¡‡U]¥Hëžþ•JÒ-[A¸½‚ -¯í'¸{ˆ¤ŠtFBç%X1yâ—ù£wâ-3O•`½¸ϰ<ˆœD÷™A =Î*Ž©¬][j7ñA"ùPéMuÊÏ–ÁÏqÀª×6z¼êâ 1nWUE!ŒÊ-å„*ùäŒü¹ïM—Ã÷ñKäD‚hŸF6bàmgƒÎ{f‡·õÙ_z5á!²²Óì¤Ô.žxR©9Æ[ =zT×^ ÒìÒ–ëp¸O2! 4¥×ûÀ 'õÍI¢jBâÎöK É3`–ÒÛÚßù2FÈO9”çÖ§ki<;z—V¶*öÇOX tíö’z¹å~nH=©É«·ëú“Ù]¹|K¤Coo;]æ;ˆüØü¸ÉOï =È­8fŠâæ…ÖH¤PÈêr„Wžéz-é±Òµµ»¹†M9!h­oM»¡°?yC) ë]f“2Z]G¢AdÐÃmf’’eÞc,H}zsEº]A>¿×Bͦ§ö­cP°òvýŒFwîÎýàž˜ã¦_x‡JÓn~ÏwtP¡˜fBÄ{œV`¦â]Vê-{È.„;)¢_º¤†`{ÔWVzµ½Æ°-´Átšª©Ó"ù-°!Wò3òç½'äWS^ÿÄ:^™2ÅupÁÚ?4áy0ŸÞ;AÀ÷4]ø‡K³HK ßhO2!4…—ûØPN=úU?F¹²Õá,<È"Ò’×ÍÈù[Ó¯JÍÒ4½_C[+‘§¦6 k4)2+ÄÊÌA¤ÝjõøÿÀûÉþ¿/ø&ž—âH†´ýCSœ,·@í fs“÷UA'ØUé-Q1[Ï%º¬²ëúXUÁ¦ÆzÓ8îiîÿ®ÿå¨tþ»Ÿ©Ùê°4Ösyˆ¬Q²¥YXv*@ ýE[¬.ÊâÛXÖg–=±\ÏÄrà#PNNAëZÔ†QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE…â¿ùÅÿ]×ùݬ/ÿÈ./úî¿ÈнýJý+|t¬ ýJý+|t¦!h¢ŠJÉÕ17Òµª•ä[Њâô)â)˜ƒ™8÷ö®ÃÎOWÿ¿mþÈj6—vò¼¶’É „`²W9qsâec³Uºê?ÂÏRó“ÕÿïÛ…rz¿ýûoð¯$ûgŠÿè/uú…lñ_ýî¿Oð [ó“ÕÿïÛ…rz¿ýûoð¯$ûgŠÿè/uú…lñ_ýî¿Oð [ó“ÕÿïÛ…rz¿ýûoð¯$ûgŠÿè/uú…lñ_ýî¿Oð [ó“ÕÿïÛ…rz¿ýûoð¯$ûgŠÿè/uú…lñ_ýî¿Oð [ó“ÕÿïÛ…rz¿ýûoð¯$ûgŠÿè/uú…lñ_ýî¿Oð YgWh‚î8|œ£ §Ô{Ôµä?lñ_ýî¿Oð£íž+ÿ ½×éþë’F’ÆÑÈŠñ¸*Êà ƒÔB"ÆŠˆ¡QFT`è+ÈþÙâ¿ú Ý~ŸáGÛÙâ¿ú Ý~ŸáE‚ç®",h¨ŠaUF‚^CöÏÿÐ^ëôÿ >Ùâ¿ú Ý~Ÿá@^¢¼‡íž+ÿ ½×éþ}³Åôºý?ž½EyÛëM ¹_¡#Šò϶x¯þ‚÷_§øQöÏÿÐ^ëôÿ õà€:EyÛÙâ¿ú Ý~Ÿá@½EyÛÙâ¿ú Ý~Ÿá@½EyÛÙâ¿ú Ý~Ÿá@½EyÛÙâ¿ú Ý~Ÿá@½EyÛÙâ¿ú Ý~Ÿá@½EyÛÙâ¿ú Ý~Ÿá@½EyÛÚŸÞàßð±u¿útÿ¿-ÿÅÑÿ [ÿ§Oûòßü]Þ~ÚŸÞ}µ?¼+Á¿ábëôéÿ~[ÿ‹£þ.·ÿNŸ÷å¿øº.¼ýµ?¼(ûjxWƒÂÅÖ¿éÓþü·ÿGü,]kþ?ïËñt\yûjxQöÔþð¯ÿ…‹­Ó§ýùoþ.øXº×ý:ß–ÿâè¸óöÔþð£í©ýá^ ÿ Zÿ§Oûòßü]ð±u¯[Oûòßü]Þ~ÚŸÞ}µ?¼+Á¿ábë^¶¿÷å¿øº?ábë^¶¿÷á¿øº.¼ýµ?¼(ûjxWƒÿÂÅÖ½mïÃñtÂÅÖ½mïÃñt\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿâèÿ…‹¬úÚÿ߆ÿâè¸ñöÔþð£í©ýá^ÿ Yõµÿ¿ ÿÅÑÿ Yõµÿ¿ ÿÅÑp=ãí©ýáGÛSû¼þ.³ëkÿ~ÿŽQÿ Yõµÿ¿ ÿÇ(¸ñöÔþð£í©ýá^ÿ Yõµÿ¿ ÿÇ(ÿ…‹¬úÚÿ߆ÿã”\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿã”ÂÅÖ}mïÃñÊ.¼}µ?¼(ûjxWƒÿÂÅÖ}mïÃñÊ?ábë¶¿÷á¿øåÞ>ÚŸÞ}µ?¼+ÁÿábëÞµÿ¿ ÿÇ)ábëÞµÿ¿ ÿÇ(¸ïöÔþð£í©ýá^ÿ Xþõ·ýøoþ9Gü,]cûÖß÷á¿øåÝþÚŸÞ}µ?¼+Â?ábëÞ¶ÿ¿ ÿÇ(ÿ…‹¬zÛþü7ÿ¢à{¿ÛSû¶§÷…xGü,]cûÖß÷á¿øåð±uï[߆ÿã”\wûjxQöÔþð¯ÿ…‹¬z×þü7ÿ£þ.±ëkÿ~ÿŽQp=ãí©ýáGÛSû¼þ.³ëkÿ~ÿŽQÿ Yõµÿ¿ ÿÇ(¸ñöÔþð£í©ýá^ÿ Yõµÿ¿ ÿÇ(ÿ…‹¬úÚÿ߆ÿã”\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿã”ÂÅÖ}mïÃñÊ.¼}µ?¼(ûjxWƒÿÂÅÖ}mïÃñÊ?ábë>¶¿÷á¿øº.¼}µ?¼(ûjxWƒÿÂÅÖ}mïÃñtÂÅÖ}mïÃñt\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿâèÿ…‹­zÚÿ߆ÿâè¸ñöÔþð£í©ýá^ÿ Zõµÿ¿ ÿÅÒÂÅÖ½mïÃñt\yûjxQöÔþð¯ÿ…‹­zÚÿß–ÿâèÿ…‹­zÚß–ÿâè¸óöÔþð£í©ýá^ ÿ Zÿ§Oûòßü]ð±u¯útÿ¿-ÿÅÑp=çí©ýáGÛSû¼þ.µÿNŸ÷å¿øº?ábë_ôéÿ~[ÿ‹¢à{ÏÛSû¶§÷…x7ü,]kþ?ïËñtÂÅÖÿéÓþü·ÿEÀ÷Ÿ¶§÷…mOï ðoøXºßý:ß–ÿâèÿ…‹­ÿÓ§ýùoþ.‹ï?mOï >ÚŸÞàßð±u¿útÿ¿-ÿÅÑÿ [ÿ§Oûòßü]Þ~ÚŸÞ}µ?¼+Á¿ábëôéÿ~[ÿ‹£þ.·ÿNŸ÷å¿øº.¼ýµ?¼(ûjxWƒÂÅÖÿéÓþü·ÿIÿ [ÿ§Oûòßü]Þ¾ÚŸÞ}µ?¼+Áábëôéÿ~[ÿ‹£þ6¹ÿNŸ÷å¿øº.½}µ?¼(ûjxW‚ÿÂÆ×?éÓþü·ÿGü,msÒÏþü·ÿEÀ÷¯¶§÷…(¼CÜW‚ÂÆ×=,ÿïËñtáñ#]^Ö÷åÿøº.¿,êÝêPÀ׌xâ|ò_GoªCÇ! &ˆ }Á'|ñ^±it%PA¦…€äQ@Ìp¦¸/^еÛÈ?ñÓ]ÝÉÄf¼ËÇŽ²¯Gý1ähÇ7Qº¡ÝFê‘—¬-$Ôoc´…âY$$)•Â/Lã'¿aïZÚ§„õ ?RžÎÙ†&Š:+,kŒ³)n:ð2I¬ {©­.c¸·‘£š6ÜŽ½T×Cáÿ*j³¾µw3Cqbö^qÌJqƒÉ:/3:=S•ìR;Ff¿Rö :þ𧯎)ú†«ésÁ 턱IpvÄWÞ}RFyé],:þ‡c­ø`E¨´öšd2Ç5ÇÙÝ9e |¸Ï_­f.µf|?¦Ú-ûAuª×Ä,ÞTg8p1ƒÉÎÜÑ×úïoËPþ¿…φõ«;»[K‹Iî‰XSÍC¼Ž£†ÀëßùCï>€©<ûu®ši6~+ÒŸOW}ÅdƃºLî`‘ªú§ˆì­î4Óc}myioz.šÞ 8Ûm#ÜðÄ‚i­lÊòøJïN𾣩j–²ÛÏEöu2)3a²>½ñX1X]Ïa5ôP¶…Ö90ùYº g<ý+§Õõm û]Z¤·7:­Äsˆ^ÙÐņÉÿ­Yþ Öì4»»¨uR~ÃpŠÇ [÷ˆÁ“€½%»¿õ¢þ½Aí¡B] U¯K'V²(.õ% ýÑÁù³ŸáÍ;Qðö³¤Ú%ÕþŸ,99*@>ø'Ž+£¾ñŤÖzeÌqî¾{¨çÔ)ð£$`çƒÇLT¶·¢Ç¦k‹a=ìúÄÉ!ŠH¸ »’~ñíÇ £úü¿àB-#ÁºÖtøµ›`²¹v]ÂTÜHF`8$»éX“éðÇÆÕÄW2˜í¾aºR8\î?\bº'ñ”ß`ÖEÏú 7”ü~è¯ÝÆî¾Õ_Y×4ýfóKÕ£¿{+ødXæAºÆªr² Æ1þÎúïªFfÏárÚòÚÒm=–âëp†?5 | žÆ®*-GAÕô™aŽþÆHZfÛYX1ôÈ$gñ®ÏO¿Ñoüi¢Kc$W‰yMÕÌÍIû¶Á*ßÅïY7:¦a§Úéê]R©ýªäù DèP×ðëÍ upïýw0õ/ë:D÷öB²¶Ä!•ÁoO”ž}©×^Öì¾Íö6T7M²Ü¥ºãh$Ä éõh–ÖVÉc<-Q.Ö {n1Øä[Þ©¦¯ é¾0ÄVúœ·¾tîÒÛ›VW…]HÎãÃc `v¡9ýSEÕ4SÔlÞßÌÎÂYX{©#>ÕŸººOjöw6ÙéúµÍ¿žf1A§o,ã'ø‰ÉÎcìù:L–Ùšd›Ã´ÉmºuÏ£çŒvâ’/h~¹×ìõm3Ú)óKüD€0¨¬|9¬êMp¶v-1¶Ç( Úèå† ÔþÔ4ÔÓ5/RºkHïãŒ$â#(RŒN ŽyÍiøkRðæ™Ùn ŽêÝâêk”Ëè‚c=ý©ÛRz´ß Üê¾¹¸´¶šMNß Â]P*…²äúÕ-'×zž°úl²Ee$LSpÀ$à¹Ë@?>kmõT²Õm.µY,–mXÞÄâÙܲ`c¯JÌ»ñ÷Ä(u“º+5¹‰·2’Ûq'·J#«Wþ´C{;Z³þÜØê7Ve÷˜&x·ã¶’3ŽÝ*¾ê³ª^E?ˆ// Û,/tò¦õ;]K’28>”jš·ö£ÄßÙÚu—–Å¿”?Þ俥^Êã{²ðð¾ºÚ`Ô—MÙ˜üÑ t9Lg;s»ö§K'HšÆ+™®ïÞTJ;ðó‘Àç5¹eâm&WE™îÈŠÛHû,çÊs‰1÷qŽyî8©<#©ZO7„´øåÝuk-Ñ™6‘´2±ãð5VÕÿ]Ééëc™½Ð5=*æÞ-RÜÙ,ìM#AêIRzuÇZ³©höš2ê¶´z…·Ÿöy¢*øÏÌ=êö£{¡Ã¤[è1j’ÝDú—Ú..>ÎÈ N„rIêxÏzgН4k«(¢Òu”kKl }=,äN¿yË·ºòi_B­gc—ÝFê‡u©ˆ›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Uí/O„®Ò»$ðvõcè+/ujiWkr[±ÆöÜ9ÆxóøP¼º™$ebBøáÖçÜþµsðØË.¡ö"B¸bº€óë[>d|á¤wi˜ÈœVd7Àj¯txI̞ÌÒaÑ#‰•ãº}™ 6Ù8Ç^ƒmdjsYÞ,L«'1çœ`ûÖ‰’Sk4 BD›ðÆCŸ˜“Óo¿­V¼½ß}nè7}·ýNAÇéC½´muszËÃú5²$WÌgºe,G˜T uÀàzšËÖt«kh÷N•žÕÈXçnz{Š¿?“ªB›¦Í¿ÞÉlc©éŒœŒsÐñjëWØÓͫȯ3íÜTc€AÎ;tåQÄT•D¯«ÝGŠÁÐ >T’Z>æêúÃwfkX‰9%E|纽ïÂ,M¤?îŠõÑóGÊŠ)°ýÁE0uþ¬×˜xóþAwŸõÉÿ‘¯OºÿVkÌxD_ïà”êÖ{DWQùNQ\Àü¬)à÷Töú{\i——Ë*„µ1‚¸ÉmäŽá@wT]Ok2Ím4Ê¿vHœ«ÜȨ)8 úÒÐË’I$’y$÷¤ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(C+–„“KçAQQ@ ˜  zqJ³”èò¨¨  w"P”'®Ö#?‘¨ÚRÄ’zÔtR²½ÇÌÚµôº½ûÂñéû¢¾¯ 0ÿ GþLÃÿÅÒŠ·áø[ü†õüÿŸõr꿈`ñ=ßÛ-5;™9 "lË{ÇÏ9ã·ÐõËø‚ÞK]vînÍÜi›ï1 ›“ÈÎ=Emÿ±ñ‡ý?òfþ.øV>0ÿ GþLÃÿÅЕ­ä6ïs’®¢k»Ko hbçL‚ð³\m2K"mùÇMŒ?Z—þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.˜°Ñ¶¥©IiÿÚÒÈÁœÊ“,~PÜ#.¬»žøïÖ²¯ä{Û?°Ékp«lòÁ#!ÛÎpÉÈ'½Cÿ ÇÆôÿɘøº_øV>0ÿ GþLÃÿÅÐÕÝÁhqu>²ºš·ö"ÚŸ³y¸Ø%Ú»<¿Cž¸íœ×œWq¨øƺ¦¡-äú2,’X%Ä@tÇj©ÿ ÇÆôÿɘøºIK•Öÿ±ñ‡ý?òfþ.øV>0ÿ GþLÃÿÅÓ’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*÷ÿǤ?îŠòßøV>0ÿ GþLÃÿÅשxCþ=!ÿtSB=¸(¢¸(¦.¿ÕšóÈ.óþ¹?ò5é÷_êÍy‡ŽÆtÛ±ë#@•bØÓ-qÿ<“ù ŸÌ>Õ‡©Hñø.åãfG]=вœ|¾ Õ$Ô/ôß [My¨X¬òˆÖû,œ®q°9go¦>”€éžácÛ½•w£'>”ÿ0ûWu«ÞkZF—2, y²°hÝc,¡°ÛN ‡šßÓïõ+¹u-.åí¡Ô-B¸†2c*à•m„ç#ŒÓ¶Ÿ×—ù‡_ë»G@“Ú©GÿWc·š?ô¬¿ IrÚ}â]]Ku$WÓÇæÊrHVÀöAÅjEÿ7õÔè CKERQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEɦŽÞ '•¶Ç—vÆpÉ5ZÛSµºŸÈŒÌ$Ú\,nÿë ÿЭUSÊO3ư²ÈÁ†é#åû§Ò€%¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ¤2J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠÏÕô‹[Û+Æ[y/$…‚HÑ®íÛp¿1ü+FÑ.ŸS/ªéÈmÄNM²A¸•ÇžÀó]V.ÿç•¿ýþoþ"Œ]ÿÏ+ûüßüEa<<'57º%Å0EoÅIkÑBø ã|#Ŭ_îŠëä–x|ÑGå¼É!%G® Šä|'Äýn†wÐ}ÁE}ÁE0uþ¬×x¤n8õ8¯EºÿVkÏ|H3qõqüèuüMe§¬6²ÅpÎÇ’Šåõ÷¦Âe§Ï¯ûåøªæ5¿ù ŸúãþŠZήwQ¦a*’M£¸ÿ„ËNÿž7_÷ÊÿñTÂe§Ï¯ûåøªáè¥í$/k#¸ÿ„ËNÿž7_÷ÊÿñTÂe§Ï¯ûåøªáè£ÚH=¬Žãþ-;þxÝß+ÿÅQÿ –ÿ•£\—‚åûþÙÿìÕÖÖÐwWfðwØQEEQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@®·ÿ#Lõæÿú •W¼D‚­kò4Áÿ^oÿ ÉU¼/ †óõýÕŠøiÿ…~lï û‚Š û‚Šè9]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@µ¿ù ŸúãþŠZË™Ú8™‘7‘ÎÜã5©­ÿÈLÿ×ôRÖurKâ9%ñ2µ­Ó\–ýÐTÄ<út«4Šª£ p)i;t·CT”Mtb 6ë½ #7ï;göþu¥КÅ.R6}ÊÅÆséÍI1Ä\¢àÈÛ˜ç94C p!H—j–-Œ÷'&Õ¬6бHeŒ;Fñ“ü/ŒÊ«Ï4†YËH“{°'ØgéVêma™÷H™$`òFG¿­ ××R¹—ÊX„¾PHÄ’>$¶Oz’ ©!¬Üc©?ýaVÒ Lêyþ´Ki͹Ó'à‘‘M´ÇuÔ¤<Ù¤…žb;Ùð8-ÿÖ-Ë·.LVûˆõ-ÿêýjãYÛ»îhòp,pqÓ#¡§´;32YvŸqO™2)-Ìñ«ÊåÝ2Çt{nÀw§Ü,ÉfþdÛÚ@(P$ãŽõe-¢Dd J°Á Äÿ:h´„FcÚJ’ Óñ¥tEw™£’_,/ÊRò:ÿë—¾dVÁ]Þbî8Ú“Œ}*Ù¶„£¡L«¶æäò}h[x¡ r„•%‰Æ~´s ºÝ™ ó^@Û¾a· ‚ªBÒCgç‡%§lª0 ­^H’4(‹…$œ}j1gÄcvpXñôô¢èI¡4¢êH^_0*ƒ’Á9㊉®d…æi]@YcÚ6²ö篥[ŽáR¨¸“ÎIüi‹iîù3¸m;˜·œÑt;¢ª\\*É#³2,eŽèö€Ý€Ï&¬ÚBÖöʯ!l(àÇ­9maXÚ0¤« ÌOó§ÇD›¾äŸçCk ›Eó#ÓÚ`çtÇ*„ ÇŽÕ,hZòY”H‚¦8=½ûTÉi(UC€Á€,NéNñ šP§{uäàþ(rCrEçtŠRÊÓn•™P±žÃñ«öÆCn¦lïç98Ïü)¦Îˆ» ÷pÄøæ¦PBŽ€`PÚbm1h¢Š‘Q@Q@Q@Q@Q@Q@Q@Q@SÕ ““fÒN3–ì1Þ®T7V±^@b”eO Ž úгìÎigY Äîz0ûÂ0zíçò®¦0j’  s‘õªrirA&23ÁS‚}r}êꪢ…P@À s’–ÅÎJ[w‚åûþÙÿìÕÖ×%àŸù~ÿ¶û5uµ­?„ޟ‚Š(«,(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šåu¿ù`ÿ¯7ÿÐdªþû£ëV5¿ù`ÿ¯7ÿÐdªþû£ëXPÞ~¿¢:±_ ?ð¯ÍÜpQDpQ] ˯õf¼÷Ä_ñóýt_ç^…uþ¬×žø‹þ>bÿ®‹üèíç…ïu’îmÖ9!‹Ùâ5‡µAÿV¥ÿ=í?ï¶ÿâk´²ÿ}¯ýqOýVe¯‰¬îµ¹4Ômùc˜Ÿ–GyGÓõÁôç?g©œ[¹Ï©Ï{Oûí¿øš?á Ô¿ç½§ýößüMvì‚[„‰ùB¬ÄzãŸÎžl­?çÖûö(öq²‰Âÿ©Ï{Oûí¿øš?á Ô¿ç½§ýößüMvÏceøó·ÿ¿Kþ]쬿çÊÛþý/øQìâÊ'#ÿV¥ÿ=í?ï¶ÿâhÿ„+RÿžöŸ÷Ûñ5ÔŘ%šÚ6+î™F~æö*@ü³øÖŸÙ-€ÿQ÷* üÍÎ!ì¢pð…j_óÞÓþûoþ&øBµ/ùïiÿ}·ÿ]çÙm¿çÞûàQöKoù÷‡þø{8‡²‰Áÿ©Ï{Oûí¿øš?á Ô¿ç½§ýößüMwŸe¶ÿŸxïQ\Á VÒKkÆ¥AŽœàûQìâÊ'ÿV¥ÿ=í?ï¶ÿâhÿ„+RÿžöŸ÷Ûñ5ÝÑG²ˆ{(œ'ü!Z—ü÷´ÿ¾Ûÿ‰£þ­Kþ{ÚßmÿÄ×wEÊ!ì¢pŸð…j_óÞÓþûoþ&øBµ/ùïiÿ}·ÿ]Ý{(‡²‰Â©Ï{Oûí¿øš?á Ô¿ç½§ýößüMwtQì¢Ê' ÿV¥ÿ=í?ï¶ÿâhÿ„+RÿžöŸ÷Ûñ5ÝÑG²ˆ{(œ'ü!Z—ü÷´ÿ¾Ûÿ‰£þ­Kþ{ÚßmÿÄ×wEÊ!ì¢pŸð…j_óÞÓþûoþ&øBµ/ùïiÿ}·ÿ]Ý{(‡²‰Â©Ï{Oûí¿øš?á Ô¿ç½§ýößüMwtQì¢Ê' ÿV¥ÿ=í?ï¶ÿâhÿ„+RÿžöŸ÷Ûñ5ÝÑG²ˆ{(œ'ü!Z—ü÷´ÿ¾Ûÿ‰£þ­Kþ{ÚßmÿÄ×wEÊ!ì¢pŸð…j_óÞÓþûoþ&øBµ/ùïiÿ}·ÿ]Ý{(‡²‰Â©Ï{Oûí¿øš?á Ô¿ç½§ýößüMwtQì¢Ê' ÿV¥ÿ=í?ï¶ÿâhÿ„+RÿžöŸ÷Ûñ5ÝÑG²ˆ{(œ'ü!Z—ü÷´ÿ¾Ûÿ‰£þ­Kþ{ÚßmÿÄ×wEÊ!ì¢pŸð…j_óÞÓþûoþ&øBµ/ùïiÿ}·ÿ]Ý{(‡²‰Â©Ï{Oûí¿øš?á Ô¿ç½§ýößüMwtQì¢Ê' ÿV¥ÿ=í?ï¶ÿâhÿ„+RÿžöŸ÷Ûñ5ÝÑG²ˆ{(œ'ü!Z—ü÷´ÿ¾Ûÿ‰£þ­Kþ{ÚßmÿÄ×wEÊ!ì¢sþÑ.t´ý¡âo7nß,“Ó=r­mÓßµ2©++#H«+ ¢Š)Œ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šåu¿ù`ÿ¯7ÿÐdªþû£ëV5¿ù`ÿ¯7ÿÐdªþû£ëXPÞ~¿¢:±_ ?ð¯ÍÜpQDpQ] ˯õf¼÷Ä_ñóýt_ç^…uþ¬×žø‹þ>bÿ®‹ü躲éÖÀŒƒ è"«Ç¡é1H²G¥Ù$ˆC+-ºèAÅOgŸìëlO˜ÿ²+ž²ñUõÞ²4ãªL®D£í$ùj:±ù:tÇ®Etëÿ©ÿ\ßù­cø»S[6+o¶¥”·Òˆᤠå)åß'¡ =È­…ÿØÿë›ÿ5¨gÒ­î5Xu K¼ÄÑG` ÜA-Œg<×¥ 1<;¨Ëªx~kxu¥»´v¶7c‡ÇÝ~Í• õëšg…ä¸k Ĺº–æH¯§Í”äØ}³•ok©Üê—G¸HÆ6¹ÃcÏ8ëPYiðéÉ:BÎÂiÞvÞAÃ1É¥;ë òóŽ/¤ÿvÛÿFµlX²œ^IôµÿÑÍZM'4€Ÿ4f«y”y†€9ÍÅsi:ƒ,ÚÍ-Ín-¥g]Ä™ìSƒ®–õ¿â]té‹#\ý÷†mo§¹¶ÞÃÓ¬“Á®Éq‚r¤º:Ò¶o_þ%·õÅÿôBØ:–«ž¾Ôõ;T³¥„–—WBÝ!Œ?œççÉ88$cZèk›‡NÖãñÆ¡,uÀwÙ rᡇûª¾Yž§žO| kpèt”QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE5ûS)ïÚ™HaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP+­ÿÈÓýy¿þƒ%WðÇÝZ±­ÿÈÓýy¿þƒ%WðÇÝZ†óõýÕŠøiÿ…~lîàû‚Š û‚Šè9]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@Õ—üƒíëŠè"ž°D³¼Ë \g ËÐøše—üƒíëŠè"§ ¯ü~Çÿ\ßù­X5]ãö?úæÿÍjÁ Ÿ¥UnµiúUVëH ’Æò]Oå®çX p¹ÆvÈíÒ¥7q甹¸û4‡ù.)¡ŠßO´à˜¡P}2î3úÖÙ"–”Ÿ_5‡ò4 ÎûT_ݹÿÀYøš>Õ÷nð_þ&´~ɬ¿÷õ¿Æ²Eë/ýýoñ FÚ¢þíÏþËÿÄÓ&—í6ò[ÃÅåR™h]‚0I,JÓû$>²ßÖÿŽâ‚š6pcRØg,¹4%QLŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¿je=ûS) (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šåu¿ù`ÿ¯7ÿÐdªþû£ëV5¿ù`ÿ¯7ÿÐdªþû£ëXPÞ~¿¢:±_ ?ð¯ÍÜpQDpQ] ˯õf¼÷Ä_ñóýt_ç^…uþ¬×žø‹þ>bÿ®‹ü躲ÿ}¯ýqOýTõ—üƒíëŠè"§ ¯ü~Çÿ\ßù­X5]ãö?úæÿÍjÁ Ÿ¥UnµiúUVëH ¬q}'û¶ßú5«`šÆ”âòO¥¯þŽjÓi9  sFj¿›G›@†Ÿ¯^éK«\O`fÓcÔåY.EÇÏ, Ž@ÈïøWazßñ.¹?ôÅ¿‘®aü3q)»¶}TfÝ]‰mÖßÙ •ß»§™®†õÿâ[wí ÿè&ŸEýt»,ÖÖ»{c¨AÖ“²Ê{‘mâáY˺JÐýsí[µË*ê’ø‘k©¢†R–e&‡Ë‰:/’ÇžÙÞ…¸=ަŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¿je=ûS) (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šåu¿ù`ÿ¯7ÿÐdªþè>µc[ÿ‘¦úóýJ¯áŽƒëXPÞ~¿¢:±_ ?ð¯ÍÜpQDpQ] ˯õf¼÷Ä_ñóýt_ç^…uþ¬×žø‹þ>bÿ®‹ü躲ÿ}¯ýqOýTõ—üƒíëŠè"§ ¯ü~Çÿ\ßù­X5]ãö?úæÿÍjÁ Ÿ¥UnµiúUVëH s73•RÅ#·rd²98üJÚ…™<Þ[ƒèÒ¨#ð&…r—󕱆õ.à:¿ögÇÍs&{à(Ê™ßo²ÿŸë_ûü¿ãGÛì¿çú×þÿ/øÖÙüüÍù/ÿGÙ›þ~fü—ÿ‰ FwÛì¿çú×þÿ/øÓ..àžÖ[{yâšYÆ«†9#8è\Ö§ÙüüÍù/ÿLš7·‰¦3„™\G|`h%QLAEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_µ2žý©”†QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQErºßü0×›ÿè2U tZ±­ÿÈÓýy¿þƒ%WðÏOư¡¼ýDub¾á_›;¸>࢈>ࢺA—_êÍyãæ/úè¿Î½ ëýY¯=ñü|Åÿ]ùÐueÿ û_úâŸú©ê /ùÚÿ×ÿÐEO@ _øýþ¹¿óZ°jºÿÇìõÍÿšÕƒ@?JªÝjÓôª­ÖIÅôŸîÛè֫𮩑`÷wF@Ê#ff =É"©Hq{'Ò×ÿFµO«Å%Þ,ÛZÜ—À1]#ažs€• cº‘Ef÷6WvÏur-’9BnV NŒpzP^x¦ÒÒIâû5ÔÒÃr–¾\J¤»²îrÀc¾+?êqéF.`V×ÂîÚ&‘äŠ5^â7cóŽ3Ò–= SšìÝÝ5šJú”WŽ‘HÌ¡=˜¨Éü5¿õåÿ_×çÿ¼ž4´bÆM;R†8æO,‘(X$$ žã‘‘È­ëÓÿûŸúäßÈ×3y ÝÜXëp$¿»Iâ%ލ;¸ëò™í]ëÿĶïþ¸¿þ‚h[RÅeßëÖz~¥g§Éæ=ÅÓ„Ur9ÁcØw8>•©\N£¢kP_ÚÍŵǪ,ìâÑˠø‡ÆÕtâ-Ò³;j(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ý©”÷íL¤0¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(Ö,.dÖÒõcͼv®¬û‡köëÜV†z~5Õ_ÿÈ>çþ¹7ò®WÃ=?˜AE»uÔÒ¥G5ú+ÜpQDpQVd2ëýY¯=ñü|Åÿ]ùס]«5ç¾"ÿ˜¿ë¢ÿ:äkÿ\SÿA=Aeÿ û_úâŸú©è«ÿ±ÿ×7þkV W_øýþ¹¿óZ°h'éU[­Z~•UºÒ•ÁÛq3žˆ–ÎÇÐ X“ùWÎ\n^AäPÁÿ!)ÿë„_ú”󦨳k+bORb_ð lîš6?÷OåMþÌÓÿçÆÛþü¯øQý™§ÿÏ·ýù_ð lîš‚ù¶ió¡ûÒ¡«0À¥þÌÓÿçÆÛþü¯øSâ±´÷Ãkn?‰#þ”=QLŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¿je=ûS) (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š¯ÿ ûŸúäßʹ_ ôükª¿ÿ}Ïýroå\¯†z~4ÝÁ÷A÷Ä2ëýY¯=ñü|Åÿ]ùס]«5ç¾"ÿ˜¿ë¢ÿ:äkÿ\SÿA=Aeÿ û_úâŸú©è«ÿ±ÿ×7þkV W_øýþ¹¿óZ°h'éU[­Z~•UúÒ;ù Oÿ\"ÿФ¥ÔµK=&Ý'½‘‘Äk¶6rXô(&’ù Oÿ\"ÿФ¬FòÛi1Ç3Bí©ÀE•<ò~bŸd>æÕ†§m©ÆïmçmCƒæÀñÀ8«uÉø‚ÁŦ•gw& “jq‡óÑrß)#JÊñ-½¾¹¥ËØYé)fØ]Àï ¾ã»n×P¯¸Ïn”_…Åý~6=œk?NÕà¿Ñ#ÕXy2yû g9?…qòÃaíŒ~%»[»ÓZÜΉäÉÜO<>ݸÏ5»áIâ±ð%•ÄĤ0Û´ŒHè “ü¨{7ýuºFޝiº¬ÒCgpZXÔ;#Æñ¶ÓЀÀd{Ž)/Ç´uAÜ쨤BJ)eÚHäzRÐEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_µ2žý©”†QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW¿ÿ}Ïýroå\·†z~5ÔßÿÈ>çþ¹7ò®[Ã=?î û‚Š û‚Šbuþ¬×žø‹þ>bÿ®‹üëЮ¿ÕšóßÇÌ_õÑwV_òµÿ®)ÿ Šž ²ÿ}¯ýqOýTôÕÿØÿë›ÕjÁRl1Hörr cóÚ˜m'=þÉþiÁÇJ®êsÒ˜l¥?ÞÿÀÉi§Oöü – ·çR¸ÁÎ!‰O±Ëœ~D~uv ¶Dˆ˜4šV¹«%Ì"ÞæÖæØ¨– ” Êd c\ݕΫáØ5˜¥³kÆVûU·Ù`pŽÒ™ùˆÃrFIÁ&´|3$X¹‘Öñï¦"K™î-$„9èîå€ãÖ˜Æ?éòÿ×$þoQ­õ£Ç ‹u$çlL$HyáOsÁééFwjúaózâ´øîÖéRiש>ŸvÆg6íåm H;‡~ôís°·ÕôÛ¹Ú mBÒyÑÅ2³ z€sY¶þ+²¿ÑõŒ–ÒJ¡KÛItˆÑå¶üÇ'oã×¥béúTñiqc"\ÃvÞiòˆtB²gwñ×Ú¡Ž+ƒàGÑÿ³oVúßb¸6͇ÄÃî¶0ÜsÇj¤µuQø‚Áõ‹­)çŽ+¸YUc’E .åÝòŒäÓ4½vÛjº„Öö‹(;‹ÈÉdŸj¥j^Çź¢ÏerËzÑ4¤Ða6œ°ápGzçcÓõôíI Ô!ŽÄÏ âU’Dr~WÊÛ—õúÒè{.¥c¢ÝÍ{m³clÏ*„9é†'WCÕ†±os:ù~\wRBnªp>õÍE¦.št{Õ´¿½Óâk†xä¶ýìO!7”qÃp«_°4zUñ{Y­ãšòy#‰â1¶Æ<|§Qßúì¿®æÅ¶¥ay4ÚÞÛO,_ë)U™> )‰¬i’,ìš•› q™ŠÎ§Ëÿ{ž?äl-¯Í†¡¤i±] ?°º[ÍwhmäŽCÀMÄ ã“Î8õ5oí²§†ŒVuku q$ˆö'å\€Û21!$œÐ¾©¯Co Ë©éÓ[ݪ:(d:X)åO½h\j66“ÇÍí¼3Kþ®9%Ugúy® X^Í¥x¢†þq,–òFg´òd—n a®O‡5&§¦Éq¬ê†ôj«i¨¬f#kd²å6µ‰FhÈ9=ºç­0;Ô¸†Y¥Š9£y"À‘)‘‘‘Ú¤¬ý?ÈK«¨c³–9#¬—2Dí/7ñ`p}+BS¶¸ŠÐj·3¸Ha“{±ì¢5$ÕÊËnM×’Öç¸`Â8¤û®ÞPÀ>ƦNÊèqWz³ñ\’ùCMÔb™íÍͼrÆŠncî|ØÏ#†*yë Ýkû*M'Q´¸òLÄÎ"Ú8(팞ž¸5ÎøRÆkmzÉ­¡ÕÚÞ; Ãj‘2ù, ±©ÎBä`A[þ¶˜KT»†H®¯nßå• ²Ä‡dc¶àUv×ïüɾ‡AERVuŸú‡ÿ®óèÆ­δ‚AÿM¦ÿÑ@K­éPHÑË©ZFêpU¦PGášoü$7ýl¿ïúÿsÿðƒÌ¤ˆµ}±º ¹$rdûâøB.¿è2?ðÿñÊãu1?ÉøžŠ£ƒ¶µ_ÜÿÈè?á Ñ¿è+eÿ×ühÿ„ƒFÿ ­—ýÿ_ñ®þ‹¯ú ü?ürøB.¿è2?ðÿñÊ=¦'ù?ö8/ùúþçþGAÿ ÿA[/ûþ¿ãIÿ ù ÙßõÿÀÿ„"ëþƒ#ÿÿ£þ› ?ä2ý»þ.i‰þOÄ=Ž þ~¿¹ÿ‘¿n–SYÁsz!y'A&fÁÆFp¹éŒö§%Ì6WrÚÉ0X¬‘ùÐŒsé·õªvsÿľÚ&‘£x¢Taód ᇥOjóR¸•·lX£MËÓp.HýGç]gž\þѲÿŸ¨ï±Gö—üýCÿ}Š“ì°úÉùð£ì°úÉùð¦"?í/ùú‡þûhÙÏÔ?÷Ø©>ˬŸ˜ÿ >ˬŸ˜ÿ ûFËþ~¡ÿ¾ÅÚ6_óõýö*O²Ãë'æ?²Ãë'æ?€#þѲÿŸ¨ï±Gö—üýCÿ}Š“ì°úÉùð£ì°úÉùð ÿ´l¿çêûìQý£eÿ?Pÿßb¤û,>²~cü(û,>²~cü(?í ?ùú‡þûaX2†R<‚*?²Ãë'æ?žˆ± Eû£¥Ú™O~ÔÊC (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€+ßÿÈ>çþ¹7ò®[Ã_Öº›ÿùÜÿ×&þUËxkúÐuÜQÜS˯õf¼÷Ä_ñóýt_ç^…uþ¬×žø‹þ>bÿ®‹üè¹³´ë`@ À€ƒßåÍXø"ÚÓ_k²"k8Ï™[~`þçÐvü=9鬿äkÿ\SÿA‰}k-ô¶I:5ÌJã•§ù÷¢€#ºq Ü3¿tf줕#>ƒå<ÔGP²ÿŸëoûü¿ãW\³J‘#m, Æp?ÄSþÌçæoÉøš@gý¾Ëþ­ïòÿP²ÿŸë_ûü¿ãZf?óó7ä¿üMeoùù›ò_þ&€*Z8¸ºšá9ˆ¢F­Ùˆ,I£æëìjåF…ÖW…Îâ 0lc çü ILŠ( Š( Š( Š( Š( Š( «De´¸¸anó,ÎÙF>P0wéVj k«™æŽÙ¢a`¬Î¥‰8Ï@Gb(ÇÛ¥ÿ }ÏýõÿGÛ¥ÿ }ÏýõÿQ}—RÿŸ«oûðøª>Ë©ÏÕ·ýø?üUKöéèsÿ}GÿÅÑöéèsÿ}GÿÅÔ_eÔ¿çêÛþüþ*²ê_óõmÿ~ÿ@ýº_úÜÿßQÿñtËhÚ(¾7–glt˜¶?ZoÙµ!ÿ/6ÇÛÉaÿ³Síå3B­’¬=$Ô–Š( Š( Š(  ûÝ-.¥YRCž¨ûÃü}êì0ÇKJ`O¢€ (¢€ (¢€ (¢€ *»ÞÁ”Ë»/ÞÆÏ·ë´T±KÈ7 §¸4ú(¢€ (¢€ý©”÷íL¤0¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(½ÿüƒîë“*å¼5ýMu7ÿò¹ÿ®Mü«–ð×õ4ÝA÷A÷Ä2ëýY¯=ñü|Åÿ]ùס]«5ç¾"ÿ˜¿ë¢ÿ:ӭ¹ÇîSŸø¬[_ÛZjI~š…ûN®\–hþrz†ù9¶lÎ4ëbsÄ ÐgøEfÁâ½âxáŠæF’G؃ìÒŒŸO»@ ÿÄÂ!ÿLŸù¥W×u)4Ý1¤·D’îWXm£~# ûw>ÀÔ®ØÔ¡ÿ®2èIY:¾“&¯ªÙ¼Óƒ ¦#iú|¾Ð¡ý^³añ¤özeÒÇ8MFO. TeNüÜð>SÓ5}NíFaÿL#ÿО¹›?êöí¥ÙÈöMa§\´±Êü×\0®ÜóuÏj@ö/Øø²Öúkdw°GtYmçš5ÊÃ<x=@éYöÞ&¼»ðö…Ä7Vr‡í)n¯™üŠ_ùâ¬Úøvî+Bµy /asçJCÃ—Ž¿0늮žÖ?á—Bv±0ÆTA0wÜÀHæxãОj–àÍ mnîOêZsYM,óM·ÓmníDˆöɸ@êäg  ü ço­hhuÞcr.Ìââæ[‚±1(»Žq’?•ÿ®ÁÛúî!‚þÎKß²Ý[Ù$fU¹T# î0Äôç)lõÃ{k-ÌzV¢±ªz"™é´nÿбXöÞ»‘õîÒÆÒòÕák{)]Ñ¿å¦Ö)€sžj{/_¿ÐäÓ®žÁ ˆÂI’bm¬ WCƒ‚zÐ55LJµ¶K«+ËYbI#”tÜëýÒF=hj&µÓî'ˆÛ]ζªæX# 3ódƒÓœx¬X¼#x4Íf‡O²{Ö…¡†Ý™£C'h<‘ØT—~š]bâüéÚ=ïÚÂ4‹x0¸P§cm;”ã¡Å0:kk庸¸‰`V¸•Ó (aœ¡ïŽõjªÚ¥Üw¤«l¶‹´[³¸ s»oÿ2ÿñTÂ!¡ÿÏ›ÿàL¿üU¸®ëúù>ùeø™Sþk?ùò»ÿ¾¢ÿâèÿ„ÚÏþ|®ÿ憎øº·ÿ†‡ÿ>oÿ2ÿñTÂ!¡ÿÏ›ÿàL¿üU¸®ëúù>ùeø™Sþk?ùò»ÿ¾¢ÿâèÿ„ÚÏþ|®ÿ憎øº·ÿ†‡ÿ>oÿ2ÿñTÂ!¡ÿÏ›ÿàL¿üU¸®ëúù>ùeø™Sþk?ùò»ÿ¾¢ÿâèÿ„ÚÏþ|®ÿ憎øº·ÿ†‡ÿ>oÿ2ÿñTÂ!¡ÿÏ›ÿàL¿üU¸®ëúù>ùeø™Sþk?ùò»ÿ¾¢ÿâèÿ„ÚÏþ|®ÿ憎øº·ÿ†‡ÿ>oÿ2ÿñTÂ!¡ÿÏ›ÿàL¿üU¸®ëúù>ùeø™Sþk?ùò»ÿ¾¢ÿâèÿ„ÚÏþ|®ÿ憎øº·ÿ†‡ÿ>oÿ2ÿñThxâÍóÿ_2ÿñTr⻯ëäøå—õó.Y^$U›0ù¤‰]Žõ\±“óÜÓ^ëìڬ軫ƒ„ 1, 䎡GåT¡¬¡ŽÒ}ÊðF«Ã²‚Æá‚28«ºr4ÓËxè<¹#DMÃ’cŸ¡ÝúWYç’h·üúMù¯øÑý¢ßóé7æ¿ãWv§üóþùmOùçýò)ˆ¥ý¢ßóé7æ¿ãW#q,jàèiv§üóþù¿Aí@ ~ÔÊ{ö¦RQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE^ÿþA÷?õÉ¿•rÞþ¦º›ÿùÜÿ×&þUËxk©ÿxÐuÜQÜS˯õf¼÷Ä_ñóýt_ç^…uþ¬×žø‹þ>bÿ®‹ü躲ÿ}¯ýqOýU84mbmR8ÈžQÓ?*“ÔØž3ÿ×5rËþAö¿õÅ?ôY–¾&³ºÖäÓP·åŽb~Y}åO×Ó ˜åE_œü]lÃþ\.¿8ÿøº´ö6Xÿ;ûô¿áUÞÊËþ|­¿ïÒÿ…!µŽS,·&Æpª©HQœgg,z{Uª¥f<›©íП("H«ýÜ–o—?]¦ ¢¢”nxc$…‘ðØ8ãi?Ò¦û%·üûÅÿ| J)~Ëmÿ>ðÿß²[ϼ?÷À ¢—ì¶¿óïýð*+ˆcVX‘c`ê§hÀ 9üèJ(¢€ (¢€ (¢€ ®!š)d’ÞdO4†q$eùÆ20ðbЇ7ÿóñmÿ€íÿÅÑ›ÿùø¶ÿÀvÿâêj(ßÿÏÅ·þ·ÿFoÿçâÛÿÛÿ‹©¨ sÿ?6ßøßü]:„Á'$ž¤“’2jJ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š( ‹8.öyñ‡Ør3þz{TôQ@Q@Q@ ~ÔÊ{ö¦RQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE^ÿþA÷?õÉ¿•rÞêÞ5ÔßÿÈ>çþ¹7ò®[Ã]OûÆ€;¨>࢈>࢘†]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@ÕN¶dSÿA^=IŠE’=.É$BYmÐGB*{<ÿg[`|„À'ý‘\õ—Н®õ‘¦Rer%i'ËQÕÉÓ¦=r(§_øýOúæÿÍkÅÚšØé±[}µ,¥¾”@· O)O.ù=PqîEl/ü~Çÿ\ßù­C>•oqªÃ¨J]ä†&Š8Ûâ lc9à½)ÍiÞ)‚ÛÂw‘]Ëa)µ3 A6p»8ùRO×Ò ð¶¢nµMZuxïä Šc”2  Ý°‚qüù®™4‹h5+›ø÷¹H¸Øvç Œuçj4Ø-/¯.âÝæ].06Œ qNýX ÿ”ÿõÂ/ý J»T­ÿä%?ýp‹ÿB’®Ð2œ\Ú×Sÿ 5[&©\\Yÿ×Sÿ¢Þ¥i9¤ù£5[Ì£Ì4ÎMâ¹añ±Ïksi-×ÙJÇm(h؃Ö\”bä éoOú0ÿ®±ÿèk\úøbÕ.ã•ooDÜý­-w¯”$$’~îìd“Œ÷­«·Í°ÿ®ÑèÅ¡mærèÌ$ àw®oÚΥ­mº’}1`ù¼ÛXÃùðp“Œúü¢ºFÝ´íÆìqž™®d躭þµg{}›mörÛå´gi&HØr£ Îzž”CFÃ^Sv6¶7­lº(¢9qýß›'=Ž5NïÄ~›ªÀ¶×–Ööo:¬ê¡±ƒ†R¬GQëPÚèÚݾ‰.†.-Õ`x`»ÜL0¹\cŽä5TÓü#s·Åí´ë%¸ÓÚӎϹ‰ûí•Ö‡­×—ùhÓþº‰â´²±„ÛÞ_]½¢O"[ fUÀù˜’'>çž*ÝÕÕÆ¥ ¥Ö‰0ó&òÞ' }ÒÃw þÎkŸŸÂWrËew-ž“{ÔÔðî©gqí£Ù½Ä7wRˆåvThæ9…$0À튒÷×·±ëDËn’_,B¼`}î:dvíBØ:“K©]Kâ LW6qÌ·dÉÚ«‚v±­Okâ‹;«¨#[{´‚å™-¦` œç 8ÈǺn«{}¥ß]-’KlÒ¤ÑÇ#²˜Ý@Ê’ îèF=ꆉá¥ORéÚD°Ã¸-ê©sŒ¸Ï©Ý@ yâv½ºÒE„±ÚÍ~±ý©,S. sœ;œV業G§\Áj¶·7W3«:EnªNÕÆIÜ@î;Ö%¿‡õˆWJ°y,^ÃN¹Yc˜3‰Y®Ügž¹íZ$Ò®uXcŽÞÒÊR¡ŠË<Ï·fBªOê(éóýuþ¼Éïuè­.bµK+Ë«¹#óL襣N™bXÏ{Q¨kɦHŸi°½ä kªcŒ±ÀÝónêFxª?ÙÅìÖSÚÝ\4¶¹LȦHpTrNF+7Xð–¡©^]ÊÑiÓµÃÆé<ò?™m·nUÒ1Áî:óO¯õýlœZÀ²Õ|C-ìò€Fƒ-È8QêIüÍ>MbëS¶¹´Ó¡¹±Ôâ1?—rˆË,2Ã’¤`0õªÚ§…®5µ”2À ¾É`IY#Ç ½ œzÕßé ¦™žM/J²‘€Pl3óùÊËšH*^]ézåîª|É-ÌÒáp3f(8ãîãúÕM7WÕ§gi«Eh>ÝM·Ü6Á(Ù'<0äc¡â¶5+$Ô´Ë«ª\DÑ’:ŒŒf±ôí#T:Þ­-¡û "ܱÞ[»d p£ž§šÿןü{^_ðE×õ-gIW½…lÍa`æi‹0¤“ÀÁ¨ïõ»´ñ)Òà¿Ó,À†7Qx…žVbÀ…ïL^´ëí;Z—Ä_oH4û›xT Hç¹tò›3`FÀ±èxSN×´ícY¶ŸNXôÕ³B™¤wi#õ!vàzŠA‘ßëwiâS¥A¥Ú n¢ížVbÀ…ïL^µ{Ä:¬ÚM„RÄ! $é š|ùp†þ6ÇnÝGQÍT×tÍ_U´›Ltÿ°Ê¡<ù™ÚTõ!và·¡Ü*Ö¹¥\ßÙÚ%³Âïm2Jb¹Ï—0­Œúç¡ä(ÿ1‹âÉm´‹›‹¨àžT»û,[ò®€r>ñÀç8Ý÷N3Zú¢ú•“Ë%ͼÒ,…XCÇåð>VWù³õéX‰ákõçìíîÅòÞÃmï!]¥s€~`I$§¥hXiº½¥ÍÅë5Ú/n‘îP(‘*íÂ[ÉS^ÖßðAÿ_ü„ž(¾´ ²ÛòÚ}ˆîûK©#÷ƒœcn˜À<Ó¥ñ.¢žv¤°ÚÿdCyöVS»Î#xC 9Ƙè:Ôsx_P–æDÿ@1½ð»ÇwÚPnhÇA·;ºv©eðÖ¢Âm5fµþÈšóíLÇwœðæ01ŒsÐô¥—þ¶ÿƒýX%ÖßÖÿðIâ‹áªÉ -‘ß-§ØŽï´º’?x9Æ1–éŒÍYƒ[»ºñ-Þž—ú\)o:¢ÛÈŒg•v+>qêGÝ=*¤ÞÔ%¹‘?Ð o|.ÅñÝö”Ú1ÐmÎîªö§¦jú½ÜNº|Vp]$ë23´ØVÈIÆ ÉïDz_úÛþ>¿×øÒj÷éâ«]5¬ãŠÎd”¬¬ûÊ9}ÑÏ~O·}Ê̻ӦŸÄmú²­c™\wáqŽ=iÑÐ:…Q@ ~ÔÊ{ö¦RQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE^ÿþA÷?õÉ¿•rÞêÞ5ÔßÿÈ>çþ¹7ò®[Ã]OûÆ€;¨>࢈>࢘†]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@Õ—üƒíëŠè"ž°D³¼Ë \g ËÐøše—üƒíëŠè"§ ¯ü~Çÿ\ßù­X5]ãö?úæÿÍjÁ Ÿ¥UnµiúUVëHíÿä%?ýp‹ÿB’®Õ+ù Oÿ\"ÿФ«´À­x¯û‰Q ùRn*:U—ûë?…@nâ'îÜÿà4ŸüM\”’ÑF¬WÌm¥‡P0Oô©>ɬ¿÷õ¿Æ€3¾Õ÷nð_þ&µEýÛŸü—ÿ‰­²Cë/ýýoñ£ì‘zËÿ[üiŸö¨¿»sÿ€²ÿñ4!º1ÃrãÌWwx™…`ßÄIÆ8­²Cë'ýýoñ¨æˆ[…’6|nUef,'þ´%QLŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¿je=ûS) (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š¯ÿ ûŸúäßʹo õ?ïç]Mÿüƒîë“*å¼7Ôÿ¼wP}ÁE}ÁE1 ºÿVkÏ|Eÿ1×EþuèW_êÍyãæ/úè¿Î€;«/ùÚÿ×ÿÐEOPYÈ>×þ¸§þ‚*zjÿÇìõÍÿšÕƒU×þ?cÿ®oüÖ¬‰úUVëVŸ¥Un´€ŽßþBSÿ׿ô)*íR·ÿ”ÿõÂ/ý J»L¤8¹´ÿ®§ÿ@j´MR¸8¸³ÿ®§ÿE½Ldæf‚~SôªþmLŒPÀä<1¯^ÚhÚR_XŸ±ÜJ`K±q½‹–m»“xÎMv§ý×Xÿô5®bÇÃ%•µÖ¨'±²—Ά·ØKJîmÇ8'°Ñ]¾m‡ýv‹ÿF-6IÙ‚#1èN+E×/µ•†ét´‹N˜IÐgÇl ^3铊ÜbB’N8µÈA¦ßÉ®[ÜZhÏ£¡f7Ž.¤À©؄峃¸€iCzÛ_Ónîe··åxƒnd…Ê|½@|m$zUgñ¥Æ•©É§Ìßjµ¶ivK ÆËò’ב‘ô¬ý>ß]±ðëè‘Xù7[¼p_,¨cfÚqÀŸqÖ©YèZœ×ƒÉiyŸ¥µ¨kÛÅœ´¤ž„3a/¥ª]¿Ìkuýv:øHl¬´ë5 ‚'žÝe*‘3œ`e° às×¥XÔ/n?±ÅÞ’±ÜÈæ3••˜dðºI®^MRWÒi÷’a¬¶ö·þD‘²ÎC…e9õâºí.Ò;.ÚÖZãŒ>òžÙïVívüÈW²*éú¤Œa·Ô•`½žIÄQ*0܈Ä·iëÎx¦Ïâm"ÝžåÎùd‰BA#±d8q…RxõéPëv·Ëªéš•©»6¾jIȨÅ\XÁ‚k3HÑõ(µ6êâЩq{4ªdRcœ¨8<Ÿ¦jQLйñe”3é†-ÓÚ^¬¬%†7‘—f8تOSÏb›¨x‘´ø5KäÌ–X•]D˜ÎìŽO9}5›“«i×–×ñéæãɼ¼cJŠÆ9[*À“ŽÝ3žj]CEÔ¯c×Ý-‚½Ñ¶–iç1…%rŒdж¸u4[[kkHŠÔÈ-n„þ`–‰@1ÀGZµoâ-*êøYCvbYWä`®W¨V#kè ¬ûˆu+ýSH¿m6Kq š)£i²+¨ø$Ç@sYš†ç´{;Ký>õ¡cØÔ Aœc/H=6ñ“@t4o¼Yjú†Ÿi§\ù-êÁ)ò[a\6à®FÒrBkcPÖ,t¶‰.åpòçbGÈÌSµA8×1k¦k[èšTšf"Ó®•ÚífMŽŠd.wdäqŠÔñ-ÅÃA-•Ü—‘«ˆ®mn38áƒNFJ6_?Ñ_ëÌн×tí<Â.g`ó.øãHܯ®ÕîE%ο§YÝGoq4‘¼›B³@û2Ý}»A>æ²E¶³aªÃª5Ô%šÆ;{…†DFI’HÜ@*Ký«7^ÒuÍJ{Äk[Ù’W‰­¼»ÅHbQ´²ºnŽCs†íO­„oÛë=S\[ÙÒ;;V`PS''¿4’ëëy§Ü>‰þ‘w Æau`€ÉRÆ2AéÅejþÔo§×cŠ ìÛÏžnÐÍ2‡2“޵¥áý?ȹ¸»›N¾µ¸dXËÝß} º‚NÞØŸn´ÙnÛRžæÿUˆ@`i™‚©»Fm§÷PãU´Ï\]_Ak}¦›&º„Ïl|á&õÈnÖƒŽ~µ¡«ØOF½± ÜBñ†=‰±´ûMVóXÓ®µ fš}»Çþµ_Í‘‚‚W ßž”-ÿ¯?øÿ¯À³¬ë—º?™pÚO™§ÂWÌŸí •Lã=ȧÜëÿÛRiÖ|(RWy®ŒXÜXFÏݪ:¢jwø3h÷7zm¶×!šY$ê]Ã8'oaŒgŸJĺuƨÒGoáõ7…TA©™cC 뜃¿å9àš@4®u{ñ­I§Xiöó˜¡IdynŒXÜX`Ÿ»Wï绂Ü5•º˜° ¢5Ô± &¹ßé—:Žø ÐVKݪ°ê¾lhc?ÞÎwŒð5­¯6ªšJÇ¥Äó\»*;ÆÈ¬‰üL»Èô÷4t¥$ñS6ž_û9¿´>ØlE¨”eýü}Üsœ~=¾»{uopé9Ôm§ÍlnUÈÜ~9Rè3íTMºþÌÓÞÇH–Ú]6èL¶ÓÍiÁRî F㸜“Ö£{m~+mJúÚÅã½Ô®c(匼ª…Ý’B—à÷ duÅ×åÿ?¯Ïþ»¢jÍ«[NÒ[iíçh&xpqчQÈì*u{û­bîÒÛO·kkY–)&{¢­Ê«aé»Ö›¦› k{] xLEšâ2ÁO-)*͸ç¨ÎNk;RÓ.oµ˜eµÐVÎâ;¥vÔüØÁhÔó÷NæÜ¼`ŒsGUýv†œ:½ýÖ±wim§Ûµµ¬Ë“=ÑVåU‰ °ôÝëMºÖï,uKk{5VÖæ")’à3’s‚S8õ8¬íKL¹¾Öa–×A[;ˆî•ÛSóc£SÏÝ;›rñ‚1Í;S°½Ôu»iàÑM¥Ì ´ŒéÌJyS¸î#к\RõÖ»{c¨AÖ“²Ê{‘mâáY˺JÐýsí[µË*ê’ø‘k©¢†R–e&‡Ë‰:/’ÇžÙÞºšÀ÷ (¢€ý©”÷íL¤0¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(½ÿüƒîë“*å¼7Ôÿ¼u7ÿò¹ÿ®Mü«–ðßSþñþtÝA÷A÷Ä2ëýY¯=ñü|Åÿ]ùס]«5ç¾"ÿ˜¿ë¢ÿ:äkÿ\SÿA=Aeÿ û_úâŸú©è«ÿ±ÿ×7þkV W_øýþ¹¿óZ°h'éU[­Z~•UºÒ;ù Oÿ\"ÿФ«µJßþBSÿ׿ô)*V¾µKøìZtR!uˆžJŽÿçÐú`6ô”6ó`”Š]Ïœ¬¹üȨMý–ãúÛþÿ/øÕÉYDBHÛA=¸'ù Ù›þ~eü—ü(;íö_óýkÿ—ühû}—üÿZÿßåÿÑû1ÿŸ™¿%ÿâhû1ÿŸ™¿%ÿâiöû/ùþµÿ¿Ëþ4s ×—¼©3™–Á‚…`Äœt鯴¾ÌçæoÉøšdˆöû_Íi°V FN¹ ’Š(¦ ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ ¹™ã1GS$¯±wt“øIömKþ~­¿ïÁÿâ¨Å_캗üý[߃ÿÅQö]Kþ~­¿ïÁÿâ¨Å_캗üý[߃ÿÅQö]Kþ~­¿ïÁÿâ¨Å^&¸Šãȹ1³2FŒ~¢¬PEPEPE·pÂû f|gdh]€úMOEG ñN¤ÆÙÇt ûŽ¢¤ Š( Š( ¿je=ûS) (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š¯ÿ ûŸúäßʹo õ?ïç]Mÿüƒîë“*åü7÷ûÇùÐsÜQÜS˯õf¼÷Ä_ñóýt_ç^…uþ¬×žø‹þ>bÿ®‹ü躲ÿ}¯ýqOýTõ—üƒíëŠè"§ ¯ü~Çÿ\ßù­X5]ãö?úæÿÍjÁ Ÿ¥UnµiúUVëHíÿä%?ýp‹ÿB’²çðµÆ¤Úƒj7ëpdVå# 'AÓ©oÿ!)ÿë„_ú•J_hÐÎðÉs(‘Ëeû4§ œcîÓRC‹‹Oúêô¨õ]^) ß óËq/• 0€YÛñ’à¦;~þÌúÊô[Õ zÖ]BÈA•Ø/–K·dЩU$Lh´ºÌj°µ–ÚâïÝ@¹M˜ÈlÏ=³Tdñm¨1,67×2Ë4ФQ*n&#†<°ôæ³SFÕí­´‰ãº‚âþÃÌVûøw`·9Åf…}k{auq%¶èfºšU˜ŒÊrä ãßú‹¡£cã ;é­TY_à Ԇ§š ¨dÊ› ðGLdu­›ÓþŒ?ë¬ú×1ƒv– Ýo©µãÇ »`q× ?ƺ·Í°ÿ®ÑèÅ¥Ð:‘NªÉ§m“ÎKqp[nÒHÇ^¼VWü&Ζím§j&kau¶ДŒœdå‡W÷Ô_ü][ÿ„CCÿŸ7ÿÀ™øª?áÐÿçÍÿð&_þ*¹ùq]×õò;9ðË/ÃüÊŸð›YÿÏ•ßýõÿGü&Öóåwÿ}EÿÅÕ¿øD4?ùóü —ÿŠ£þ þ|ßÿeÿâ¨åÅw_×È9ðË/ÃüÊŸð›YÿÏ•ßýõÿZz]ú6–·…Hóåv;™AûÄ ’qÀp{UøD4?ùóü —ÿЦB’‚Ä«,jXÄC°K9'ÁÍkIVO÷|Œ+¼;KئŸ™vâëÊÔmåH™üè\°R¼í+ƒœãÇó©?´[þ}&ü×üj½ŽëËÔºÚ 1#Æ s¸’½3×zûÖ®Ôÿžqÿß"¶9Š_Ú-ÿ>“~kþ4h·üúMù¯øÕÝ©ÿ<ãÿ¾ESþyÇÿ|Šb)h·üúMù¯øÕÈÜK¸:]©ÿ<ãÿ¾E/Ð`{P_µ2žý©”†QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW¿ÿ}Ïýroå\¿†þñÿxÿ:ê/ÿäsÿ\›ùW/ῼÞ?΀;˜>࢈>࢘†]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@Õ—üƒíëŠè"§¨,¿äkÿ\SÿA=5ãö?úæÿÍjÁªëÿ±ÿ×7þkV Dý*«u«OÒª·Z@Goÿ!)ÿë„_ú• º ŒÚÔz«Æ~ЋŒgå'³êCþ¦·ÿ”ÿõÂ/ý J»L ÷qHâ)"¼O¼)8ÝÁR3ô&¡3LOüx\þqÿñuzŠ¡æÍÿ>_œü]lßóáuùÇÿÅÕú(‡›7üø]~qÿñt=ËG·’ë»HW'ižàUú(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š()áóLl­²HÛz62Æ9ø&“7ÿóñmÿ€íÿÅÔÔP9¿ÿŸ‹oüoþ.ŒßÿÏÅ·þ·ÿSQ@æÿþ~-¿ð¿øº3ÿ?ßøßü]MEB‘Hgó§‘^@»bmg'ŒŸAßµMEQEQET76°ÝÅåN›—9ôÁúÔÔP*ª EPª€)h¢€ (¢€ (¢€ý©”÷íL¤0¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(½ÿüƒîë“*åü7÷ûÇù×Qÿ ûŸúäßʹ ýãþñþtÜÁ÷A÷Ä2ëýY¯=ñü|Åÿ]ùס]«5ç¾"ÿ˜¿ë¢ÿ:äkÿ\SÿA=Aeÿ û_úâŸú©è«ÿ±ÿ×7þkV W_øýOúæÿÍjÁ Ÿ¥U~µiúUgÒ+ù Oÿ\"ÿФª(ÕçѬ-¦·’Ö#5ÒBÒÝc[9c†1ëWàÿœÿõÂ/ý J¯®i’ê‹`±À·½ŽáÄ„ò«œÁçš}‡Ü£ˆ¾Í§­ÍÅÕ®ªe¸[xF”ƒ—#;NéÏâ*ÕLj£·1Gý-ËEç=´H¥âLã-óc®x“Š“VÒÞôéßgò£׉pàñ•çy¬ÍsÃ/}­.§ž›zL‚ü£ÊÁ[’Å×áþbþ¿ò.Kâ›2-ŽÝóÜ@.-£¬g£6â1ÏëÁâŸáK¹¯¼/ass#I4ˆK3õ<žµP躅…ìWºLZz3Z­¼Ö®Y#]¤Pª’9cÁ5¦“¨Xø1t¸&€_¬ É’XçœãÀÔ:v§u©hâ1o únŽe—>\r)Ãg8à‘ÏLSumM_U²y¦hì­•Üfxä2œr¸À »¿z¯g¢ßè×:‰ÓdŠh.vH‰y<ŒÂ^¹°Nžy*z_×À?¯ëúîKáÍbçU7©3Ú\%¼îÏ>T¹ džGCÉ»Xz.•yk©_j‚Ö).‚/‘i’ƒn~bHcŸAÐVå0 (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ý©”÷íL¤0¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(½ÿüƒîë“*åü7÷ûÇù×Qÿ ûŸúäßʹ ýãþñþtÜÁ÷A÷Ä2ëýY¯=ñü|Åÿ]ùס]«5ç¾"ÿ˜¿ë¢ÿ:äkÿ\SÿA=Aeÿ û_úâŸú©è6o.t—k2…*vŒ‘œsœoaô›þü¿øS¨ šö:Oÿ€òñ5]CýÛü“ÿ‰«”P;Ew¹šá‘‘YV4 0HRÇ8í÷¿J¹Tµ¹m…¼P*4÷2ˆ£Þp à’N=¨"‹[ Å©in¡™ Kw`I 3¿¨ ƒî*ìì•Í;«¶‘©Eg}“Äóý§à+ÿñt}“Äóý§à+ÿñts¾Ì~Í2þ¾FöOÏöÿ€¯ÿÅÑöOÏöÿ€¯ÿÅÑÎû0ökù—õò4h¬ï²xƒþ´ïüþ.²xƒþ´ïüþ.ŽwÙ‡³_Ì¿¯‘£Eg}“Äóý§à+ÿñt}“Äóý§à+ÿñts¾Ì=šþeý|+;ìž ÿŸí;ÿ_ÿ‹£ìž ÿŸí;ÿ_ÿ‹£öaì×ó/ëähÑYßdñüÿißø ÿü]dñüÿißø ÿü]ï³f¿™_#FŠÎû'ˆ?çûNÿÀWÿâèû'ˆ?çûNÿÀWÿâèç}˜{5üËúù4VwÙÉâùþÓ¿ðÿøº9ßfÍ2þ¾FöOÏöÿ€¯ÿÅÑöOÏöÿ€¯ÿÅÑÎû0ökù—õò4h¬ï²xƒþ´ïüþ.²xƒþ´ïüþ.ŽwÙ‡³_Ì¿¯‘£Eg}“Äóý§à+ÿñt}“Äóý§à+ÿñts¾Ì=šþeý|+;ìž ÿŸí;ÿ_ÿ‹£ìž ÿŸí;ÿ_ÿ‹£öaì×ó/ëähÑYßdñüÿißø ÿü]dñüÿißø ÿü]ï³f¿™_#FŠÎû'ˆ?çûNÿÀWÿâèû'ˆ?çûNÿÀWÿâèç}˜{5üËúù4VwÙÉâùþÓ¿ðÿøº9ßfÍ2þ¾FöOÏöÿ€¯ÿÅÑöOÏöÿ€¯ÿÅÑÎû0ökù—õò4h¬ï²xƒþ´ïüþ.²xƒþ´ïüþ.ŽwÙ‡³_Ì¿¯‘£Eg}“Äóý§à+ÿñtŸdñüÿißø ÿü]ï³d¿™_#AûS*µ•Ô—1Ê“ª¬öò˜eØ~R@#Ø‚ Y¦šjè‰EÅÙ…QLAEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP{ÿùÜÿ×&þUËøoï÷ó®¢ÿþA÷?õÉ¿•rþûÍþñþtÜÁ÷A÷Ä2ëýY¯=ñü|Åÿ]ùס]«5ç¾"ÿ˜¿ë¢ÿ:äkÿ\SÿA=Aeÿ û_úâŸú©è¢Š(¢Š(/Uÿ†‹ÿ_¿ûJJ—Ã?ò ŸþÂßúU-EªÿÈCEÿ¯ßý¥%KáŸùOÿa ïý*–¢?gðGúêlQEfAEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPÿš¿ýý_ªwü~jÿõüôTu~³§ð›VøþïÈ(¢Š³ ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(½ÿüƒîë“*åü9÷›ýãü먿ÿ}Ïýroå\¿‡>û¼w0}ÁE}ÁE1 ºÿVkÏ|Eÿ1×EþuèW_êÍyãæ/úè¿Î€;›6ÂÔÓÿÐEM¼{ÕkOøñ¶ÿ®)ÿ ŠšÇïôoôÊ(ûǽǽ2Š‚ú×ík$†) “ÍŠM»‚¶äw$~5Íoþ‚¶¿øøå^¢¥Á7rãRQVýüÊ;5¿ú Úÿà ÿã”lÖÿè+kÿ€'ÿŽUê){5ç÷²½¬»/¹‘Gf·ÿA[_ü?üršßýmðÿñʽEÍyýì=¬»/¹‘Gf·ÿA[_ü?üršßýmðÿñʽEÍyýì=¬»/¹‘Gf·ÿA[_ü?üršßýmðÿñʽEÍyýì=¬»/¹‘Gf·ÿA[_ü?üršßýmðÿñʽEÍyýì=¬»/¹‘Gf·ÿA[_ü?üršßýmðÿñʽEÍyýì=¬»/¹‘Gf·ÿA[_ü?üršßýmðÿñʽEÍyýì=¬»/¹‘Gf·ÿA[_ü?üršßýmðÿñʽEÍyýì=¬»/¹‘Gf·ÿA[_ü?üršßýmðÿñʽEÍyýì=¬»/¹‘Gf·ÿA[_ü?üršßýmðÿñʽEÍyýì=¬»/¹‘Gf·ÿA[_ü?üršßýmðÿñʽEÍyýì=¬»/¹‘Gf·ÿA[_ü?üršßýmðÿñʽEÍyýì=¬»/¹‘Gf·ÿA[_ü?üršßýmðÿñʽEÍyýì=¬»/¹‘Gf·ÿA[_ü?üršßýmðÿñʽEÍyýì=¬»/¹‘Gf·ÿA[_ü?üršßýmðÿñʽEÍyýì=¬»/¹‘Gf·ÿA[_ü?üršßýmðÿñʽEÍyýì=¬»/¹‘Gf·ÿA[_ü?üršßýmðÿñʽEÍyýì=¬»/¹‘Gf·ÿA[_ü?üršßýmðÿñʽEÍyýì=¬»/¹‘Gf·ÿA[_ü?üršßýmðÿñʽEÍyýì=¬»/¹‘Gf·ÿA[_ü?üršßýmðÿñʽEÍyýì=¬»/¹‘^Î×ì‘>é ³K!–Y6íÜÇØ`j±EI$¬Œå''vQE1Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ïÿäsÿ\›ùW/áϾßïç]Eÿüƒîë“*åü9÷Ûýãü蹃î (ƒî )ˆe×ú³^{â/øù‹þº/ó¯BºÿVkÏ|Eÿ1×EþtÓ\KªÇa`t»h§Ì+æy‡®?ˆ{ÕOµx«þ–¿÷ÐÿâëI`óTH°œ-Ã(ü‡¿eoùæÿøõ„©9;ó5ýz0®¡^DýoþfgÚ¼Uÿ@Ë_ûèñt}«Å_ô µÿ¾‡ÿZeoùæÿøô}•¿ç›ÿàSÒöùßáþE}iϸýÏüÌϵx«þ–¿÷ÐÿâèûWŠ¿èkÿ}þ.´þÊßóÍÿð)èû+Ï7ÿÀ§£Ø?ç‡ùÖ—üûÜÿÌÌûWŠ¿èkÿ}þ.µx«þ–¿÷ÐÿâëOì­ÿ<ßÿž²·üóü z=ƒþwø}iϸýÏüÌϵx«þ–¿÷ÐÿâèûWŠ¿èkÿ}þ.´þÊßóÍÿð)èû+Ï7ÿÀ§£Ø?ç‡ùÖ—üûÜÿÌÌûWŠ¿èkÿ}þ.µx«þ–¿÷ÐÿâëOì­ÿ<ßÿžœ¶eŽ60úÝIG°Îÿò­/ù÷¹ÿ™•ö¯Ð2×þúü]jñWý-ï¡ÿÅÖ¼v°É>f€8óßüißb‡ûÓß÷ÿ=ƒþwø}iϸýÏüÌoµx«þ–¿÷ÐÿâèûWŠ¿èkÿ}þ.¶~Å÷¦ÿ¿ïþ4}ŠïMÿßühöùßáþAõ¥ÿ>ã÷?ó1¾Õâ¯úZÿßCÿ‹£í^*ÿ e¯ýô?øºÙû?Þ›þÿ¿øÑö(½7ýÿñ£Ø?ç‡ùÖ—üûÜÿÌÆûWŠ¿èkÿ}þ.µx«þ–¿÷ÐÿâëgìPÿzoûþÿãGØ¡þôß÷ýÿÆ`ÿþäZ_óî?sÿ3í^*ÿ e¯ýô?øº>Õâ¯úZÿßCÿ‹­Ÿ±Cýé¿ïûÿb‡ûÓß÷ÿ=ƒþwø}iϸýÏüÌoµx«þ–¿÷ÐÿâèûWŠ¿èkÿ}þ.¶~Å÷¦ÿ¿ïþ4}ŠïMÿßühöùßáþAõ¥ÿ>ã÷?ó1¾Õâ¯úZÿßCÿ‹£í^*ÿ e¯ýô?øºÙû?Þ›þÿ¿øÑö(½7ýÿñ£Ø?ç‡ùÖ—üûÜÿÌÆûWŠ¿èkÿ}þ.µx«þ–¿÷ÐÿâëgìPÿzoûþÿãGØ¡þôß÷ýÿÆ`ÿþäZ_óî?sÿ3í^*ÿ e¯ýô?øº>Õâ¯úZÿßCÿ‹­Ÿ±Cýé¿ïûÿb‡ûÓß÷ÿ=ƒþwø}iϸýÏüÌoµx«þ–¿÷ÐÿâèûWŠ¿èkÿ}þ.¶~Å÷¦ÿ¿ïþ4}ŠïMÿßühöùßáþAõ¥ÿ>ã÷?ó1¾Õâ¯úZÿßCÿ‹£í^*ÿ e¯ýô?øºÙû?Þ›þÿ¿øÑö(½7ýÿñ£Ø?ç‡ùÖ—üûÜÿÌÆûWŠ¿èkÿ}þ.µx«þ–¿÷ÐÿâëgìPÿzoûþÿãGØ¡þôß÷ýÿÆ`ÿþäZ_óî?sÿ3í^*ÿ e¯ýô?øº>Õâ¯úZÿßCÿ‹­Ÿ±Cýé¿ïûÿb‡ûÓß÷ÿ=ƒþwø}iϸýÏüÌoµx«þ–¿÷ÐÿâèûWŠ¿èkÿ}þ.¶~Å÷¦ÿ¿ïþ4}ŠïMÿßühöùßáþAõ¥ÿ>ã÷?ó1¾Õâ¯úZÿßCÿ‹­*MZ_7ûNÖ(q/Ë ç®sój±ö(½7ýÿñ£ìPÿzoûþÿãUN.üÍÿ^„κœyyô¿ù–vŸJ6ŸJ­ö(½7ýÿñ£ìPÿzoûþÿãZœå§Ò§Ò«}ŠïMÿßühû?Þ›þÿ¿øÐ§Ò§Ò«}ŠïMÿßühû?Þ›þÿ¿øÐ§Ò§Ò«}ŠïMÿßühû?Þ›þÿ¿øÐ§Ò§Ò«}ŠïMÿßühû?Þ›þÿ¿øÐ§Ò§Ò«}ŠïMÿßühû?Þ›þÿ¿øÐ§Ò§Ò«}ŠïMÿßühû?Þ›þÿ¿øÐ§Ò§Ò«}ŠïMÿßühû?Þ›þÿ¿øÐ§Ò§Ò«}ŠïMÿßühû?Þ›þÿ¿øÐ§Ò§Ò«}ŠïMÿßühû?Þ›þÿ¿øÐ§Ò§Ò«}ŠïMÿßühû?Þ›þÿ¿øÐ§Ò§Ò«}ŠïMÿßühû?Þ›þÿ¿øÐ§Ò§Ò«}ŠïMÿßühû?Þ›þÿ¿øÐ§Ò§Ò«}ŠïMÿßühû?Þ›þÿ¿øÐ§Ò§Ò«}ŠïMÿßühû?Þ›þÿ¿øÐ§Ò§Ò«}ŠïMÿßühû?Þ›þÿ¿øÐ§Ò§Ò«}ŠïMÿßühû?Þ›þÿ¿øÐ§Ò§Ò«}ŠïMÿßühû?Þ›þÿ¿øÐ§Ò§Ò«}ŠïMÿßühû?Þ›þÿ¿øÐ§Ò§Ò«}ŠïMÿßühû?Þ›þÿ¿øÐ§Ò§Ò«}ŠïMÿßühû?Þ›þÿ¿øÐê>ãþ¹°ý+–ðçßo÷ó®¥lá ï8iY‡äMrÞûíþñþtÜÁ÷A÷Ä2ëýY¯=ñü|Åÿ]ùס]«5ç¾"ÿ˜¿ë¢ÿ:í­ˆ[HÉ €’jšëú[Øý±.ƒÁæƒ"3aØ2 ƒS¶½¼Ò­à´H¤FeóÒIL{Óû¹õ8Ï3XÖÃèÚ>¡5ÌDͨIKç|»ÉèI 1×Óµ%ý~×âu6Wöº¿Ÿi(’<•'GPAäcPméÿoFr³–ØFÁKz#i>Ùª:=æ™if ê0ÜËwrD’Åó+LÃ8ÎôªZÅõ½Î±b¶×ÿjš¤O 8.p26‚O'Sêº6m {M7âËí?¿.cF [û¡±·>Ù«·öºu¿Ÿw2ÅB‚z“èäŸa\üúµ†©®­¬÷¶ðÁep6ÆÒóL:qÙA?‰öëg]ai¬éZ±²€È²8RDLÀmbnÏlÒè‡Ô¼ºþšÖSÝùî°Á0¼.¥sÓå#'ò§Ùk6„í¼Íç*î1ÉFØõÃH®s[Ö“UÒ5¸í¥ŠKH#„¤Ñó’[æç§&›:Oâ«y-µ&Õ—ìî’JUqn8#_˜ñŒgŠkp{Í«'ö™°ŠÚâgM¾l‘ªì‹wMÄ‘õàЮvÊÆÖãÅZÅÄÖñI4-—#(,Ÿ'cÚ²!²ò¼×v0…¼œ>TR]ÓÌù³ŽOïK Í*ýñõ®@SFÔåÒoíe–!$6ºª ß3cy9+œàƒÅløN tº¹–ÎþÊhP4q2"7?6 Hëô§a\èmÿãÚ/÷òªú~«cª Í•ÂÌ ”Ã&\uÿ>•G[¾–ÃÃe­¿ãîeH-Ǭ…_Ë9ü+MŠ÷@ÖìãšÆÞÖÞîÜZ.äÈT¡c±pHÜ;æ’þ¿¯ëq¿ëúþ¶:—Õ,£Õ#Óá~Û" ;GsØ~5r¸[KmVËÅ?Û,íMÄÆáæ.‹ “ƒ};ŠÚÖŸS[à,ÛXìñç«&yÿž¿6J: 6/ï­´Ë)/.äòàˆí´¶9Ç@ ïPØjöš“º[}£(2|Ûi"u¬?ùÍðþçÏ7b‰¸Î¨$ÎñÔ'ËŸ¥'ˆìîm|)|·:•ÅèÄš‘®Ñ½Ab޹ïNÁÐêè®Äöú|šU´qÙÚhù”Ê&ž!nõV_ö°IÆj·Ùí-íteÔïc½ÐwNLЬ HòÕ²OÊ>`2qÒ¦›¨¦¤—,‘²yÉÎJœf”j¶'V:X¸_¶ˆ¼ãvgÏOíbx9í-ôKù`e[%½ã`~_,>˜¬uT²O¶Ÿçíí7Ú™ä·fÍ<¼Qš}¾Bïó;¿iV7Ÿd¹»òåU¿vÅTž˜ «œŽ¤V›º¢3»U$ô¹ w\Ó5 ã¢Üj¶¶aR[©%+HQ3ëÁ'ÐàuâÿЧ–M2 6È,“ê.!Uß´ñ¹Îpp6‚3ƒÖ—AésRËV±ÔtѨÚ\ m0ÇÌ GN¼žÔÍ?[ÓõI¤†Òvicš7‰ãl‡ #ÜV“s6®_[jÐY[ÝEö¸’)Lˆ¥Y9Ú½¶œcÖ›£]Euã絿þÔ†KRãhž*œäœc?/&ŸQt:ú(¢ÂŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¸ÿ}öÿxÿ:ì+ðçßo÷󠿏(¢¸(¦!—?êÍyÿˆ”ý¢3ÿMó¯Cœe qú환 s@ª·ÙbùOݪ]­ýÓùWŸÝø¶þÙˆE›þUãÝDùÙÿßGü) ôý­ýÓùQµ¿º*óøOµ/úÙÿßGü(ÿ„ûRÿ  Ÿýô€=?ktþTmoîŸÊ¼ÃþíKþ€6÷Ñÿ ?á>Ô¿ègÿ}ð OÚßÝ?•[û§ò¯0ÿ„ûRÿ  ŸýôÂøOµ/úÙÿßGü(Óö·÷OåFÖþéü«Ì?á>Ô¿ègÿ}ð£þíKþ€6÷Ñÿ ôý­ýÓùRª¶áÁëé^_ÿ ö¥ÿ@?ûèÿ…ðŸj_ô³ÿ¾øP¥[ÿÇ´_îåRWšˆº¸ ÜÐ ü)áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿Â•~"ë qýn?í£…zMr>\;¼U³ñŽ«t@6éŸv5µ¡ÚÔ9 GOÜS¢QE0†EPº³ƒ‘Z4„@µÆƒ„‚ªŸ FOÜ•v;íG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åJ<5?p~UØùkéG–¾”ÍÛhiQ[6Ö¢ 0*Ø@;S€€0(¥¢€?ÿÙnip2-8.7.0/doc/src/figs/ir8a.jpg0000644000175000017500000004501413224651032013152 00000000000000ÿØÿàJFIF``ÿÛC  !"$"$ÿÛCÿÀÕ"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?û)þé®7Æßñé'Ò»'û¦¸ßǤŸJä¾ ÿÈ{Vÿq¿ô(ëÔ«Ë~ ÿÈ{Vÿq¿ô(ëÔ© ]'&ÓÚëITÞk€f´€¤Nwo$„?ûAT¾½é¬ÀúUK„'µQ}>üÿË<ÿÜZàìµ^K áÖ/ü­\ý–ÄñÛ ê ൑=ÉRüIñ¯=ø%­§´ÍCX 4˜Zä$\Å ä®Ç~Ãå= ÷®ñ“ìRGs¨Yo'öŒ·#ž¬€3Ôr:Õé´[YfyZIƒ;8#þæf8jµÔ}š½¯ÖÛ«Щ_˜ñ¨Ý$¨ÊÊvþPeû§ÊÎÌŒuÇ^i¶^ÑlîÒæ½m¤BHê×§Lr®åOâ*'”ÖšŽ›z[§á§âÇ Lb÷<ÂæûJ]Ãû?Äw³i’^*ê—Ÿo‘ä„yl@g'1áAÆÜg¶k1õ I VsÏrëmªE¤Ï.]çQå´x'ïœ+c<°\ó^ïý…iÿ='ÿ¾‡øQý…iÿ='ÿ¾‡øSYv%}„ý_—§ô´·§¦¿á¯©4Q]I¡kZŽ¡¦A¤÷S½ÃÊbqp¾`Üyqd: Õ§Ô¶µ7Ž×W¹—N¹×Ò’ÒñÔÅžâªèAxÉõÍ{Gö§üôŸþúáGö§üôŸþúáGöv'ùý}<¼ƒÛC¿áåý3Ä﮵aãy,F« œÝÛ¥”wZ¤‘ùÐmMÀC°¬Å¾q¸¶AôÇ1}¦üI¦›ýR嵘õÉ|Û.,p…”#,YÆÝ»Nð9Éæ½Çû ÓþzOÿ}ð£û ÓþzOÿ}ð¡eؤ—¸¶¶ÿð?àëSw×ø'Œx³\=õÕ¦«q%ŽŸ"ÉÏT{¦WaŒ%x$`àUVÔð^(uËÖð¿ö”q¶£ö§fT0³2‰ó»g˜nÏ#5ë²x ÃÒKu,‘\É%Ô‘É3=Ã1&6Ü€÷T7!F^9«ZŸ„´ÍFÜ[ÜÍ~¨6`ºx[?ï!ðÍ\rÚÑJ*?Šòüt`ñm»žuðÿVµ›MŠÐêݼ×7†Ñä‘åg†9Šƒ¼ç £““Xþ%´oøIþÁ¥j6÷7ºµÝͰ¶ß5°f\Ê»S€ÊIÝÖ½gOð^…`!û$2FaFŽ6Ý– ̹#$’$òMM¨é–6v­;5ËòUYrÌNw$ Ëû/ ®¤ýÚïuÓÓüÇõˆ8ò³€…SQñÅÔ²…0hð,q‚8󥾡6þóz×=¥ê~Õ$Õ5¨õ[;(“O{x ±¸U¸Žl™HCűµ{q݈¯YþÂÕO"Æ=÷ŸÒ:?°µoùò¶ÿÀãÿƪc•â’øz%¿ßÓ©ONûžS¦$ú·„uˇ›T†?2kiÕÆY‰•A#’ÚÝè*]oSÓ­<%¡é×2éÖ÷:‚ÃÅë"Ç~Zù–ëÔa{œvרÿajßóåmÿÇÿQý…«Ï•·þþ5Uý›Šr»Šµïkù[·õ°•zi+=Uÿ~GxÆÊÖ-?ìú­kus¨épÙ[Ú~Ñ$Ñ®BHŒ¬6˜’äã=©÷·7zŒ¯fþÑíCsi­“ÂŒ.mˆ@åI]àe$«äW¯ajßóåmÿÇÿRÁ¥lÆíæÎ×(¬Šäž¨NåŽk¡ø{ýŸÞ­n.åþÓ[릞ÕîœìC3a;TAÈ9¯Sþ´ÿž“ÿßCü(þ´ÿž“ÿßCü*ªe¸©ÅÇ•kç龚‘ÔÕµíÐñ»=jOí]?H“S—ûA5Ë¿>ݦ>aƒlÌ™\äÇ‚˜íÓÒ¨ér^Ã¥i²^[¶©¡ÜMqqwtò¤R¯—‰âvcyû¸•{—ö§üôŸþúáGö§üôŸþúáGön%m÷úùyßä?oN÷¿õ{žo­ßµ¶4indš -@)[ù/bžTXJ¼nü¸ŽŠFÔ uÔ Ñ|E¨^Ûtàòý¾Gty.JɆ'(Jà¸Ç ¯tŸÃ¶3Bð¼—;]J¶Ù6œBGÔU-#ÁZ&”Ò½§Û<ɱæI5ËM#œÏ–ÀÉÀÎ95ªËëÚüšúï­õ%Ö…¬™ãúÕæ¥§%æýËiÖÚÂE,×7òFÑÂÖáöµÀ ê»ÈùºóŒR ¹RÏFMÄ&=&Hî[í¶šƒìw<”{€œ!nN7ç5íŸØVŸóÒûè…ØVŸóÒûè…gý‰²\Šýïåkí¿[•íéßê÷ÿ€yŸ4ö¿ ´i-æ–'Ýf»Õˆb­<`ò=A úƒPؽâj6—ãP¿’K­ròÊX¤¹wˆÄ<í !;W^Ëý…iÿ='ÿ¾‡øQý…iÿ='ÿ¾‡øT¼·ù½Õ«o~ý6^’¾ßðO³¼ŽÏÀš;÷µšàåpÑì9‘‡#aàî¬c¼2Å=ä–Ë¢ÌÎÉà ˜ùd¹b6œ(#>æ½Ûû ÓþzOÿ}ð£û ÓþzOÿ}ð¥O.ÅS‚*ÓÏþþczro_êÍ-o¬éº ¾­üVͯIª;ù7r­(²Ë(Œ®1Ón8¬v[Rû'ÛôÛ‡‡Ä¯*éÑD~Ú~~mÛŽgqùFTžkèì+Oùé?ýô?Âì+Oùé?ýô?ª~&:ò+úúyiùùŠU©É5Ã×üÇèÿò ·ÿèF­RE[[ÇeŠ®p[¯'4µïaàéÑ„%ºI~$Ú”›AEVÄš¯÷Mq¾6ÿI>•Ù?Ý5ÆøÛþ=$úUr_ÿä=«¸ßúuÔ|HÒ|C®i)¥è³YCÄý±¦ãgNÈ¥Q¸=úp1Ü×/ð_þCÚ·ûÿ¡G^¥Iàë}vÓB†ÓÄ2ÚÏyÈ&‚V1Ý,YTîìxçï[ZQÆ“gÿ\ÿA•¬ÂßÃðÎc’Aª¾ÈÔ³69'򠓨 _C'þ !¼p| <ÿ·ˆ<ß3`òK`ìÿ¬ÚCck;Å~4µÐnäKÝ#Z6p² õí·‹v0I,€ÈÉU WþñÔ~‹ÄäXµú_ÿo°—í¥ÛïA¿ÌÆ|£åíÙØ¼ÖŸufÕ¼FºN§¥ké [$SȰiýºC‡̈B¢q¸u-Áà´¶O~¿×Þ¾AÞÛ_ðÏÈìµÖÝ jx9ÊoýªýΩcmªÙésO²òõdkxö1Þüé­0oj,ØÊ@#ýYíÚ³ümc¬/ˆôiiÕöˆ§´I’9%U”¹ TpHàÒ[ê¢ÕïŽ|1grM¨JÞmÄÖȱYÍ+´œH¢ùO|cÞ³õ/ˆZE½æ‚öÆKÝ7VŽá…Í´ÌèbÛÇ–ˆ[© ä cšÆð†üA¹¡j7ÚaµH¯u[›„iãc Ü6ck“þÎqPYø{ÄÚ6©c­[èm~mu]QÚÒ;˜‘Ì7˜äR̰È$zS]/Ûú@ü»ÿž¿‡ânø‡Æ²iž ¾e¼‹M{0–é©2 ¶ƒæd`Ÿ› (Ï<Ôòx¡ïÖäÐ'±[Vº·ºî¡i!IQUeʱR'Úžß×—ùµ§øËÃZ†°4›MLItÌéîdÊÉ÷•$+±ÈÁÈRO°µ¿ˆZlšÖ¥è7ââ[]-.XZÈbdÃï !]„‚ùIÅbxÁ7š|šf—¬èš¼¦3˜u®4–`…`²$L©!±˜<⟥h^*‚ËžŸÃÛmô-J9dÔ£ºˆÃ4H®Ýæ;†FÞ¹æˆÛ™_ºû¯øz W´½äÿ«÷ˆ|I£è/o§s*Kq¸Ã6òO#…Æâ5fÀÈÉÆ9¨µ¯h:9µ[ûÉ[¤ó!†+ie•“Œ¶ÄRÀ ŽHV?Ľ6úñí.tTŸT‚9µöŸ{ n[+‰F 0ßw¥S[/é#¶ñé ®Ü]hðÙßGkr1ŒUïxC^Õnü_µ¸jFÊîÒ´„Wx6î…°w¡;x`03×"ŸKÿ]?àúô¿×õþ]Nª/xZM:îÿûIã†Í£[-¬±É˜@Bce†'ƒŒWK^á« CJMCZµðv³ý®é =G^ <{òv»HáBäžpO§5èßõý]„‚³"øÌøBÖÞTÐïõ#,±£ü×›øûÃZˆ5«]CRð5Ƶ¦¶m Óã¿‚ ´ùÙŽòÇÌ A]ƒ(ͧæ»ïÙjÚoƒ4‹ ván5+{TŽâE9€õã8éžøÍR³Mùþ¯ô·ôÈÖé[/ÖæÝeëŸñ÷¤ÿ×ãè‰kR²õÏøûÒëñ¿ôD´Š)kÚŚϕæ’#UFwlu¨$þUÿ Âÿóó{ÿ‚ëþ"®x»Âšw‰–ßí³]Á%¾à’[º†Ãc*w+Õ=; ç¿áThôÖÿïä?üj¸+Ϧý”bãæzØJyk¤ž"RRòµ¿#Wþ…ÿçæ÷ÿ×üEð°¼/ÿ?7¿ø.¸ÿâ++þF‡ÿAmoþþCÿƨÿ…Q¡ÿÐ[[ÿ¿ÿñªÃÚf_ËÇüΟe’ÿ<ÿò5áax_þ~oð]qÿÄQÿ Âÿóó{ÿ‚ëþ"²¿áThôÖÿïä?üjøUýµ¿ûùÿ£Úf_ËÇüÃÙd¿Ï?Ãü_øX^ÿŸ›ßü\ñÂÂð¿üüÞÿàºãÿˆ¬¯øUýµ¿ûùÿ£þF‡ÿAmoþþCÿƨö™—òÇñÿ0öY/óÏðÿ#Wþ…ÿçæ÷ÿ×üEð°¼/ÿ?7¿ø.¸ÿâ++þF‡ÿAmoþþCÿƨÿ…Q¡ÿÐ[[ÿ¿ÿñª=¦eü±üÌ=–Küóü?ÈÕÿ……áùù½ÿÁuÇÿAøƒá|qs{Ÿû\ñ•ÿ £Cÿ ¶·ÿ!ÿãT…: ¶´OoÞCÿƨçÌ¿–?ù‡²É¿ž‡ùW‡§‚-Òí¡‘æ½…g™ÒrÌÊ ÎÐxçê½µÒõ«» ’,w‘D̘º°ùGäêMeióE›k§ß!ÙBºBU‚€~ú·ÔV–„£PÕ.õ !ßnÐE nI™ZBØõ8õÍz‡„]þÛ²þíßþÉþmÙvïÿdÿ ½ö[Où÷÷Ûe´ÿŸqÿ}·øÓÔZ¶ì¿»wÿ€²…Ûv_Ý»ÿÀY?¯}–Óþ}ÇýößãGÙm?çÜßmþ4j¶ì¿»wÿ€²…Ûv_Ý»ÿÀY?¯}–Óþ}ÇýößãGÙm?çÜßmþ4j¶ì¿»wÿ€²…Ûv_Ý»ÿÀY?¯}–Óþ}ÇýößãGÙm?çÜßmþ4j¶ì¿»wÿ€²…Ûv_Ý»ÿÀY?¯}–Óþ}ÇýößãGÙm?çÜßmþ4j¿¶ì¿»wÿ€²…_†Dš%–3”ai¿e´ÿŸqÿ}·øÔˆªŠ*Ž€SÉ»Tu$ݪ:Lh(¢ŠC5_îšã|mÿ’}+²ºkñ·üzIôª$ä¾ ÿÈ{Vÿq¿ô(ë¥ø™àø|W¥Æb[uÔ­Iki&\¡ÏTnÊ}{ s_ÿä=«¸ßúuêTž ð埅ô´ÛERùß<¡ù²­Ðv°·4¯ùÙÿ×ÿÐE%.•ÿ ›?úàŸú¦­T®zÕÖªW=i“®ÿÈSÿ¯9¿ô[Víak¿òÔÿëÎoýÕ»BTS\A iã=7¸Î¥¦hʆ '*<Çš@ÍÜ…vP?1ý¾Çþ-ÿïêÿo±ÿŸËûú¿ãZ{¨Ý@Ÿo±ÿŸËûú¿ãGÛìçòßþþ¯øÖžêŠ[»h­å¸–âá„,Œà,`rKàc¾i\ ?o±ÿŸËûú¿ãGÛìçòßþþ¯øÖŒÅ<)4¤±H¡‘Ѳ¬§AE?u03ö͘*ÝÛ’z «iÂH…C+pA³4ïøö)’DrÉäöWe fŠ( ªê–¦òÓÊWêé"27+öÈjŠƒíºÇýôÿüþ5GÛuúéÿøÿüj§¢€ ûn±ÿ@ý?ÿŸÿQöÝcþúþ?ÿ©è >Û¬Ð?OÿÀçÿãU-õÝݼ·‘[@–Ì΋ Í!f*W$•\½zöÇ6è Š( Š( Š( Š( Š( Š(  Ý_E²ÔäŠIë¡Ád8.¿Ý>ßäV„H‘F±ÆŠˆ UzS¨ Š( Š( Š( Š( Š( Š( æíQÔ“v¨é1 ¢Š) Õºkñ·üzIô®Éþé®7Æßñé'Ò¨“’ø/ÿ!í[ýÆÿУ¯R¯-ø/ÿ!í[ýÆÿУ¯R¤€)t¯ùÙÿ×ÿÐE%.•ÿ ›?úàŸú¦­T®zÕÖªW=i“®ÿÈSÿ¯9¿ô[Víak¿òÔÿëÎoýÕ»BT:+ 7ý|Oÿ£ž¦¬ý&LX7?òõqÿ£Þ†#œð–¡­ë·ú†»s¯µž›g¨\Z®›´EJBÅ ‘ÙKî$nà€8¬_ x¿Y¹ñ®•Ýkz&³ Ä–òjvЩ£BbÃíÁÆ$ ƒ]3x_@þÝ}i,ž+ÙÌ‘¢¹‘FÆ7Í?ÏüÿÇSñ·¨éÚ›­®†h6×ÒͤNó<™P¡YJª.ÞB€yU,|OâOAàû{}`èójkz/'µ·ŠMíÚŠÀ+OÐ×I«xOú¤6q^X1pùÑÀ$8Íjig6òŸúzŸÿF½WÑllt¸å†Â%'¸’âA¼¶é$bÎܓԒqÒ¥ÑNm%?ô÷sÿ£ž•ïaÚ×þ½ M¯ãÆû'ú5o¼ï3®]“fܳœç¿Jåìþ êúšiãEð´WsÝi+ªKš—•å¡b»ùgsdwÚ+kÄžÔ/|A»¢ki¥ÞýÙÎ&³ûDrÅ»pùw© <ç¿J‡Â^ ]îÎuÔÀµÑ“KÚaÚ[k—ó3¸ã®6þ´•íýzßûhÞïåú_õ24¯kz׌ì_B´ŠçK¼Ð ¼k{«Ÿ Â^V Ãû˜Œd:Õ+ÿjðÛÄÚ!¸’wñ„–/åöå•B¹(a1Ç0 c©­mÀZ†ˆÚDÚ?ˆã‚âËO]>奰óâ%}à…Þ66Iç-×¥OuàI_Nš+mgȼþÜ}fÚàÚ†XÜdÝóŒ:޽ªôM_i?ËúØZ×Ùkóþ·)M¬K¦|B½Õ5´[Tµð¸¹¹†Œ¨›frv’qÀëPè¿tË©¦[ølatùuk-N;Æ ’E@<¹0FH<óÅl^ø.mKQ7š¶®·&çI“KÔ;_-gFbÁ“æ>YŸïf¥øGP]&ëE×5¸5M2k6´šx‚m¤mËHî8ôQÏ5òÛÉþrÿ€Vœ×ôü£ÿöֵýOâ/„äÔô_ì‹iío%‰øLdêaÇn½kZñeÕ¯Œáð͆™k=ÃÛ¥Ã=Õø¶Ü¬Åqìc# ¤‘Æ29æ Ñ|¬[kúV£ªø™5(t˜%‚Ö?°¤!ÕW28r€£¢Š—Ǿ¾ñZ‹95{;}4ì&6Ó„³£’ñJ\lnœí8«vº¶ßðÿÖ„«ÙßëúÔšOêW>'ºÑô= /¢ÓÞ8ï,là6Ô]Œ\… Ÿº95GPñâiþ5¶ðýÕ¾–ÑÝ] XÚ U$¹F*J—·Ú ©#ÜqÅ\“Âú¥§ˆîõm_K¯Ú7¾¶žÌN²:(]Èw©BT~ðã8¬˜>ÜÁª[¼zå¿ölÁÕ–Ó‡Ú …™Š™ƒŒ®Xõ\ãµLwöëøÁ·â7³¶ý?øü Ý/ÅÖþÐõ»»ÃÒÜx¢êÖÙg¹XcÜ[?4 œóì uŸü]oâË[æŽ;h籸ò&·ks eCITÀƒè ‚+2ëáûIà‡Zhdm\êÖ}™XÚÌÀ‡VâD9<|¼½ë§ðõž¥edÑê—ö·× å¼Ë{?³¨\ »›ßœ÷¢;kÙ~KþKâÓ»üßüJŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( æíQÔ“v¨é1 ¢Š) Õºkñ·üzIô®Éþé®7Æßñé'Ò¨“’ø/ÿ!í[ýÆÿУ¯R¯-ø/ÿ!í[ýÆÿУ¯R¤€)t¯ùÙÿ×ÿÐE%.•ÿ ›?úàŸú¦­T®zÕÖªW=i“®ÿÈSÿ¯9¿ô[Víak¿òÔÿëÎoýÕ»BV:­å‘–a5ÜM3ÉÀÈÅÈ`켂Ǧxô­ŠƒO¶·º‰î.bIœË"0n Ê€éÓõ FwŸuÿ@MGþúƒÿŽÒy÷_ôÔï¨?øímgéÿóákÿ~Wü(þÏÓÿçÂ×þý/øQaÜÅóî¿è ¨ÿßPñÚ<û¯úê?÷Ôüv¶¿³ôÿùðµÿ¿Kþgéÿóákÿ~—ü( ˜¾}×ýuûêþ;GŸuÿ@MGþúƒÿŽÖ×ö~Ÿÿ>¿÷éÂìý?þ|-ïÊÿ…sí7 š%þîÛ¤€ û‘!8ü ^Ò­äµ±X¦eiK<’齨³cÛ,qVÛNÓØ`Y[¯ºÆ¡Š­`ÌÖä;)#Ǹõ;\®O¿±ES¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(9»Tu$ݪ:Lh(¢ŠC5_îšã|mÿ’}+²ºkñ·üzIôª$ä¾ ÿÈ{Vÿq¿ô(ëÔ«Ë~ ÿÈ{Vÿq¿ô(ëÔ© ]+þA6õÁ?ôIK¥È&Ïþ¸'þ‚)+U+žµuª•ÏZ@dë¿òÔÿëÎoýÕ»XZïü€u?úó›ÿEµnІŠßè ÿ_ÿèשj†‘&,þ¾n?ôsÐ#Ww4nª&nhóyý¶•q¬üdÖõ †—q’ö‚!yjòË1o>K $’NÓš—Mñ·‰G€ŸÅ·ðé­Û$:}œI,¯7”¾dŒì ä‚p£½u~—mc¬êº¬RLÓêf#2±WËMƒouÉ5F i àµð”ž|úz¡PÎøûÃP0Á¹0(Ù[úóîå |Yâ-çVÓ5øt«‹Û}]RÒk$‘"q «3AÛÈ<ƒÐb³ì|KñëSÓtÁ'…„º––u(&6“í@»—ÍÉ?¼_›#¿­iàëâԾ٩꺕֡fld»»™ZXà ü‰… 9$ôÉ=sWí4 mKL¿I®LºvžÖ‚˵£b™-ÇÞýØä`uâëÿJÿíAù_ÿl_ðºþ#ð–›­KÛËué#S® Vúdµ¦Á)ÿ§™ÿôkÕ/ iv¾Ñ-t{)&’ pÁR œ±nHu>•kF9µ”ÿÓÝÇþŽzm¦Ý„•‘Îx]ñøžOøb3ϵ±·2ß«²ÌÊ‘¨B'kÇ qÁ­¯ëQø‹Âúv·FyÆNv7F\÷ÁV/ˆô/ÇâyêÀY\Å|Ϊ6³2H¥É˜8ŽEmx;EþÓ´Hå3 83!ÞÝY±Û$“D~­_éoêàþ/ë²ýoýXÖ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(9»Tu$ݪ:Lh(¢ŠC5_îšã|mÿ’}+²ºkñ·üzIôª$ä¾ ÿÈ{Vÿq¿ô(ëÔ«Ë~ ÿÈ{Vÿq¿ô(ëÔ© ]+þA6õÁ?ôIK¥È&Ïþ¸'þ‚)+U+žµuª•ÏZ@dë¿òÔÿëÎoýÕ»XZïü€u?úó›ÿEµnІ‰ÆÀKmsÎ<ùdâåWWvàS‚7cÒ¶ê(ñyä—c¢¢HP(V+ü$dœfÚßÜÔ?ð_qÿÄRh[rÿÿ÷üEmÿgÚúÜàLŸüUÙö¾·ø'ÿE‡sûBÛû—ÿø/¸ÿâ(þжþåÿþ î?øŠÛþϵõ¸ÿÀ™?øª?³í}n?ð&Oþ*€1?´-¿¹ÿ‚ûþ"·ÛsPÿÁ}Çÿ[Ùö¾·ø'ÿGö}¯­ÇþÉÿÅQ`¹Š5+uåaÔ»(°œí’€~dUí °Qp¡%y$•Ôí.ìûsß±øUÆÓ­Èùd¹CمÜ~‘PYHòA™.®ñ±©V+ŸÇ=QLAEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPsv¨êI»Tt˜ÐQE†j¿Ý5ÆøÛþ=$úWdÿt×ãoøô“éTIÉ|ÿö­þãèQשW–üÿö­þãèQשR@ºWü‚lÿë‚è"’—JÿMŸýpOýSVªW=jëU+ž´€É×ä©ÿלßú-«v°µßùêõç7þ‹jÝ¡ *=¿Ðý|Oÿ£^¤ªZD¸°oúù¸ÿÑÏC©»š7U#?=hóèîê7U/>>çÄí_YÒÓÃÿØ›âëXІI|´™ HJ3íb 9ô£Pñf·§‹§øníalÅåì#Qòá·RÅUD†<»1VÀÚ:rEMã=]~ÊÍm¯þÁycyå´æ!*«®F27Œd}k6óÚÛê0ë6>'ŠÓXkAiy?öxx®1e"2ÿ#)cƒ¸õäß?ÓüÆÖºvýÈê|%®Ûx@´Ö-#’(îÌr `ãÚªüD‡_Ôu{=:?ßj~y·‰isms&ï–'ó$Så€2@ûÙ¦AoŽ,¥Ötè!›á°Õd{_Ý4·¨ÖN‡q|®0èÉö¥wkÿ]¯øqÙ^ß×OëþÒÖüG­ÙêÚVc¡XÝj7¶’ÜÌ’êF(áòÌ`¨o)‹òü•ÒÚ4ïkÝDÎÈ ‘¤›Õ€Ø÷ÀúWžkš¡'…´½Uð\~,¿ƒNXŽ ×)Šl`ò"òÜ “õ®ÓÂvwú†4ËRëíWÖö±Çq6âw¸P ÉäóÜõª¶þ¿æMöþ»”QE!…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ÍÚ£©&íQÒcAERªÿt×ãoøô“é]“ýÓ\o¿ãÒO¥Q'%ð_þCÚ·ûÿ¡G^¥^[ð_þCÚ·ûÿ¡G^¥IRé_ò ³ÿ® ÿ ŠJ]+þA6õÁ?ôL Z©\õ«­T®zÒ']ÿ§ÿ^sè¶­ÚÂ×ä©ÿלßú-«v„0¬(/mlR[[ë˜m$[‰œyò¯#8*Iäa‡ÐÖíCm·åûKÃvDXÕsò’ $ƒÜdÿki9ÿÆÿIþ4ŸÚÚOý4ïü Oñ­Ï°¿üÿÝ~Qÿñ}…ÿçþëòÿˆ¢Ã¹‡ý­¤ÿÐcNÿÀ¤ÿ?µ´Ÿú ißøŸã[Ÿaú]~Qÿñ}…ÿè!uùGÿÄP0ÿµ´Ÿú ißøŸãGö¶“ÿA;ÿ“üksì/ÿA ¯Ê?þ"°¿üÿÝ~QÿñÌQ¬é ókX6;-Â1?@IöwCIN ,mK,³la†Pò3€}f®5Œ¸ù5 Ý·*øáGó¦ZJÒÂÔ+†d`:nRTãÛ"€%¢Š)ˆ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠŽnÕI7jŽ“ (¢ÍWû¦¸ßǤŸJìŸîšã|mÿ’}*‰9/‚ÿòÕ¿Üoý :õ*òß‚ÿòÕ¿Üoý :õ*H—JÿMŸýpOýRRé_ò ³ÿ® ÿ Š`JÕJç­]j¥sÖ:ïü€u?úó›ÿEµnÖ»ÿ Oþ¼æÿÑm[´!…G¢·ú ÿ¯‰ÿôkÔ•OG— ÿ_7ú9è§»š7US?=i<úćÇTº]¥òÛÞƒuª-mÊ'š³‰pÝ€ÒÄçîóíO³ñt3xt;½#VÓ.fI^ÕîãŒGp#Æí…¹Á Ås±x>í> ÜëBú%ÒÉwol ù‘ÞɉäéŒlŽz±¬x TÒ)ÒâþÞYZêýv‡2 ççn§–«^ß§ù¯¹ï§õý/ÅÃO¼9á{R[»­GV‚æE°Ã÷OÎâNz0ÆéÚ´ÇÚY†?²iú¥íÜ·—ÙÁ¤h¬Ž2áB:³£¹Årúg„¼K¤iÞ{ô™µ K˜¢Id‘b¸·›ûÌ”qÇ@ÃŽµFo‡Z”ö¶·–ÞÔu {ÛÙå²¼ö’%Ì›È Spe a¶úñU'y_§ü?Zßשê>×,üA¤¦£d&D.ñ¼S&É"‘«£ÄEiÌŸúyŸÿF½RðuŠé$cLÓ4×™íôà|…b‡*¤ñŒœ ·£œÚÊéêãÿG=q-Œ¿xÃFð²ÛIçy®V( {Îqìª ’G Éâ“Å^)O±ß¡ëz„qÂgšk+`ñƒ9%™—'‚p¹8íU~,Z]^ø&âÞÎÚk™Õ«âBì@¸Œ“Ï}…füKÔîäÔ-ü6lõ¤Òn`2j–t× éœ} jv–çsBôää-mçÓúý V¾»š—ôÛvµK OY’æÈ_„°…X¥¹é#oeö,px­íQ´Õô«]RÂO6Öê%–'ÁV•æ3°ŠëZ´¸w‰ì4Ÿì?³YK£Yʳ†f9Še ¹@P»UÀ\–ÉÍwÞ‹PƒÁZ<¥¤V—‘ÚF’Á…XÈÆŒp8©Y¦ÿ­ßù"z¥ýl¿à›”QE!…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ÍÚ£©&íQÒcAERªÿt×ãoøô“é]“ýÓ\o¿ãÒO¥Q'%ð_þCÚ·ûÿ¡G^¥^[ð_þCÚ·ûÿ¡G^¥IRé_ò ³ÿ® ÿ ŠJ]+þA6õÁ?ôL Z©\õ«­T®zÒ']ÿ§ÿ^sè¶­ÚÂ×ä©ÿלßú-«qˆPI É'µbÖN’Ù‚{p{ÔûÓ¨iY—óV´àš+ˆ#ž RX¤PÈèÁ•”ò#¨ªSiÐêÎÒËi`èŒQZâÜJăƒéGá@‡˜åÏÜ?•'—/÷åQÂ1cÿ>:7þ WÿФÿ„fÇþ|toü/ÿ@ɼ¹¸*<¹¸*‡þ›ùñÑ¿ð\¿üUðŒØÿÏŽÿ‚åÿâ¨o._îÊ._îÊ¡ÿ„fÇþ|toü/ÿKÿÅüøèßø._þ*€'ù¢S$Ÿ"(Ë3põ&£Ðý7ÍÁ 4ÓJ™Ê<¬ÊA¦Â5h„:XhŇ }€/?\œ~U~Ú_:&Ò§$2Ÿá àÌ’Š(¦ ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(9»Tu$ݪ:Lh(¢ŠC5_îšã|mÿ’}+²ºkñ·üzIôª$ä¾ ÿÈ{Vÿq¿ô(ëÔ«Ë~ ÿÈ{Vÿq¿ô(ëÔ© ]+þA6õÁ?ôIK¥È&Ïþ¸'þ‚)+U+žµuª•ÏZ@dë¿òÔÿëÎoýÔïh÷ºö‡&—gª.œ& Næ!xû§ ¸Ïsž™éºïü€u?úó›ÿEµhꚦ™¥Ä’êz¥ŒnÛUî&XÃ@XŒšÌøvûÃ:lºuÆ®—öÛ÷Û¢Û¼œýåvÈ'œvÉõã¡Ñ[ýÿ×Äÿú5êž—¬é©iz­ñAmp’lÏLí' K£I‹ÿ¯›ýô1[¹ªZÞ¯§èºlºŽ§r¶ö±`3[’@ $’I© Ã5‡ãˆ"Ô|9=¤ºDú°fFö÷ ¹ tve Ê@ ät¤ÛE¸“¬]Go&‰y»ÏÿXH’ÛùÉ<¼íŠžåü2>%j¯ã¯%n„¶çCûn|±ÅÿSÛ™»v9éÚˆëoŸõêÒç©Q^­gãZûGŸÿ û]¿³~ÿŸ³ÍO—ÛÉòúÿÞÏ57ŒÂ'Æ>5"hÆ®ÛeÝö…“Èà@WÛñÀüi_Ýæþº~:•ozßÖöûo¨on`²³žòæO.#i$|µTdœz ñ?Ç}6±£Çã[Ý*ÎÕ´BÉ«ÚÉ-¿Úùó°RD /ÝÁ98éŽk´{ëKo‡W^—ZþÔÔ¡ðãÜŒN¾t%VLœŽqÓ$÷¢~ìd×Kþÿ+ú ô¢Ÿ[~6ÿ3kBñdž5«Ø,ì5 <û„2[¥Å¤Öæe9O1ü¹âºJñ5´¸ð ñå‘ÒE¢>”ö–æ<^6ÇÌÌÝP¶ à3 `qY¿ mLšæ—ws®évþ&·’i5 !g*j7'koŽWiHeèAÙŽ«’Q“]¯ýŸË¹ ¶¯ý_ð{îN>••àým•Ù?Ý5ÆøÛþ=$úUr_ÿä=«¸ßúuêUå¿ÿä=«¸ßúuêT.•ÿ ›?úàŸú¤¥Ò¿ägÿ\ÿAÀ•ª•ÏZºÕJç­ 2ußùêõç7þ‹jµâmÏÄ4Úeà!$å$_½ºëîøwªºïü€u?úó›ÿEµnІaø+ÖÞÑ–Ê) ÷wÜÜ2á¦\v ‡âj})óe"‚ [»€Ã=?|çùÕªW:e¤ó4Ì'ŽFÆæ†âH‹cŒ3øÐ!¤¶z2Þ†›ýiÿ=µüÏÿÅÑýiÿ=µüÏÿÅÑaÜv[ÐÔ76Ö÷F#smæ±yˆcŽŒ¹èFO"¤þÇ´ÿžÚþ gÿâèþÇ´ÿžÚþ gÿâè°\v[ÐÑ–ô4ßì{Oùí¨ÿàÆþ.ì{Oùí¨ÿàÆþ.‹Écf 3Qè Oiå^æáÔú©™È?B4ÖÑl™J¼—î§‚­9z_V„h‘ƱƊˆ U€ uQLAYšn‹ka­jš´2LÓêmL®AUòÓ`ÚÈã®I­:(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(9»Tu$ݪ:Lh(¢ŠC5_îšã|mÿ’}+²ºkñ·üzIôª$ä¾ ÿÈ{Vÿq¿ô(ëÔ«Ë~ ÿÈ{Vÿq¿ô(ëÔ© ]+þA6õÁ?ôIK¥È&Ïþ¸'þ‚)+U+žµuª•Ïz@dë¿òÔÿëÎoýÕ»XZïü€u?úó›ÿ@5»B ²»´¾ƒíWP\ù—̆@ë•$0Èã ‚¡£ªéÚp¶^C¤pcÝ™ I÷Ø ù˜ Œà£Ö¼~úÒïP¿ÖþÙÜKk4ú¼Úšœ­Ye ûÌÊ¿YÒµ«¯ÇâO-µÖ“ᯰ1RU¡»!Þ`PTªsô¥w›Êÿ…ÿ=Ô}î_?Öß–§¯Z\ÃugÜ Z£#m#*FAÁäqëU¼=«Yëº5¶­`\Û\)hˮӀHéøWEq6³¯izN±âKNµ_ÛÝÀ-ïšÝ®æl‰œ_h òç6H5•á;‰%ð×€|?>±w¦iw–·RM=½Á‚Iä†È¼Ñ‚¹ ÍÁí­%6¼ÿÏüŒã+¤ü¿DÿSÚj¼×¶ÞÛÙKs\܆0Ä[æ. ;ã#?Zñ(õrhôßU¹¸±›TÔâÏ­IlóˆdÄQý¤+¿Ý$àrØëÇ:M§_K­x.ÏÅzÃîÚJ—Vš¬Šå>C×c3ÆvóSlûÿïÐö:Bp ô¦À`ŒFåÐ( Å·1ÁÉëõ¯8Юn´¿›Mvöþö}N{Ÿìûˆ5F’Ô „Oo#eQŒ€A#®M'½‡Òç]¢ø«GÕmô¹må•N¨²5¢KýBS¼eC8F|`£…õ#µIo}iqwsiÌrOjTO¶Z2Ã*í‘ÍsŸ®î¬¼}ses5´ë$d…Ê0ÌÈçHük Dµ³oŠž-»šöê+Èeµx-ÒúH’lÛ€7F,œ‚9Ž—Ößæ="Šñ¯†×>.Ö.´}yõH¿},‡QŽ]mäÞ¸`c[CX™Ãgå9'9ªú­ý퇂ï'ñ7‰7k·WߪꒀáRW]œþï1÷1Æh°w=¶Šâ¾ê¾F“{c«jæVµÖ®4ëIo'Y‚¶Q77.øãÔâ¹)õûûéÚ¾”×¶ö2ø€é³¬ÚÓÈ$²0û!c\‚=9¦µ’K­¿š¢mô¿áòg±MfO¯èðèC\kä}8íÄñ+H§,ch$òqÅqþ q¬ë:¦©ªë×ë©Zê—ɧ-óG Q¡+˜A÷.,sÅrš‹Kø53XÔ#ÔYaYu)XBEÐV ›±RÐ=(޶ó·âvn¢¼«Äׯu¬xÆmGÅ7ú,š$(Út0]˜P)„8•“¤»Ÿ+†ÈùqŒÓÕu?x–ÂÛSÕ51›Âñ^¼67²[l¸g!˜…#8ô9)Ý_úÙ¿Ðvþ¾i~§©Q\ïÃMJïWð‰©_ËæÝOf,˜ÆöÆ üqšèª¤¬Ú%;«…QHaEPEPEPEPEPEPEPEPEPEPsv¨êI»Tt˜ÐQE†j¿Ý5ÆøÛþ=$úWdÿt×ãoøô“éTIÉ|ÿö­þãèQשW–üÿö­þãèQשR@ºWü‚lÿë‚è"’«‹y‚òâÎB(BÓrœSû­S¸R{ŒÁvæ+v?àñYÝ·üÆ/ïÜ?ünuå#AÔ¸ëg0ÿÇ mÖsi~iQw}uw°o.A© ägb‚F{*k½KO´}—W¶ð1í$Oë@Ç­’ê¨-ºÞbGRzÔ_Ûº/ý¬¿ïúÿÛº/ý¬¿ïúÿjZ‰©ZCg¨èÚuå´a¸¶I< ªÀÇ¥fx§Ã'SÒ-´­7ûÒÎ͵ޒ—PØ÷(\sÓÖ´ÿ·t_ú Yßõÿ?·t_ú Yßõÿ ´2ü;àÍLðªx~òÖ×T·ó^yEŪÞGbĈñµFOt­ü;áùô¸´©ô-2]>˜­^Ò6‰ª¡OAÞŸý»¢ÿÐZËþÿ¯øÑý»¢ÿÐZËþÿ¯øÓnâJÆTÚ_ŒVg[h¶Öˆ‚¡³ÓøW"àÐV–›áýÂõõ ]LƒP”:ê DŽI ûİäóÉ4ÿíÝþ‚Ö_÷ýÆíÝþ‚Ö_÷ýÆ‹…‡ÛhúE´é=¾—c ¨ï"Šg•üóOûäQåEÿ<Óþùú(žT_óÍ?ï‘G•üóOûäSè yQÏ4ÿ¾ET_óÍ?ï‘O¢€åEÿ<ÓþùyQÏ4ÿ¾E>Šg•üóOûäQåEÿ<Óþùú(žT_óÍ?ï‘G•üóOûäSè yQÏ4ÿ¾ET_óÍ?ï‘O¢€åEÿ<ÓþùyQÏ4ÿ¾E>Šg•üóOûäQåEÿ<Óþùú(žT_óÍ?ï‘G•üóOûäSè yQÏ4ÿ¾ET_óÍ?ï‘O¢€åEÿ<ÓþùyQÏ4ÿ¾E>Šg•üóOûäQåEÿ<Óþùú(žT_óÍ?ï‘G•üóOûäSè yQÏ4ÿ¾ET_óÍ?ï‘O¢€åEÿ<ÓþùyQÏ4ÿ¾E>Šg•üóOûäQåEÿ<Óþùú(žT_óÍ?ï‘G•üóOûäSè yQÏ4ÿ¾ET_óÍ?ï‘O¢€åEÿ<ÓþùyQÏ4ÿ¾E>Šg•üóOûäPaˆŒ÷E>ŠÀ´EŠëQ‚5 WxDAŠ68ï1?Y¨!ÿ–«ÿ_cÿDCSÒQE†ÿÙnip2-8.7.0/doc/src/figs/ir7.jpg0000644000175000017500000016313013224651032013010 00000000000000ÿØÿàJFIFÿá°ExifII*JR(i‡Züÿÿ)( üÿÿ)( 0210‘ 0100 ÿÿ Ê ,ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀ,Ê"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?÷ú3EA4¡šÈ0Ü(ï\Oмuiáò±2´×.2±!Æ©=…qñZ副–ƒþÞÿEÀö´§­jOZñOøZW_ô Oü ?üEð´®¿èþŸþ"•Àö¿µ'­jOZñOøZW_ôÿOÿGü-+¯úGÿ'ÿˆ¢à{_Ú“Öµ'­x§ü-+¯úGÿ'ÿˆ£þ•×ý£ÿÀ“ÿÄQp=¯íIëGÚ“Ö¼Sþ•×ý£ÿÀ“ÿÄQÿ FëþÑÿàIÿâ(¸×ö¤õ£íIë^)ÿ FëþÑÿàIÿâ(ÿ…£uÿ@èÿð$ÿñ\kûRzÑö¤õ¯ÿ…£uÿ@èÿð$ÿñÂѺÿ |øøŠ.µý©=hûRz׊ÂѺÿ |øøŠ_øZ7_ôÿOÿEÀö¯µ'­jOZñ_øZ7_ôÿOÿGü-¯úÇÿ'ÿˆ¢à{WÚ“Öµ'­x¯ü-¯úÇÿ'ÿˆ£þ×ýãÿÀ“ÿÄQp=«íIëGÚ“Ö¼WþÏýãÿÀ“ÿÄQÿ FçþñàIÿâ(¸Õö¤õ£íIë^+ÿ FçþñàIÿâ(ÿ…£sÿ>àKñ\jûRzÑö¤õ¯ÿ…¡sÿ>àKñÂйÿŸ¿ð%¿øŠ.µ}©=hûRz׊ÿÂйÿŸ¿ð%¿øŠ?áh\ÿÏ„_øßüEÚ¾Ôž´}©=kÅáh\ÿÏ„_øßüEð´.çÂ/ü oþ"‹í_jOZ>Ôžµâ¿ð´.çÂ/ü oþ"—þ…ÏüøEÿ-ÿÄQp=§íIëGÚ“Ö¼[þ…ÏüøÅÿ-ÿÆèÿ…¡sÿ>1àKñº.´ý©=hûRz׋ÂйÿŸ¿ð%¿øÝð´.çÆ/ü oþ7EÀöŸµ'­jOZñoøZ?óãþ·ÿ£þ…ÏüøÅÿ-ÿÆè¸Óö¤õ£íIë^-ÿ >çþ|aÿÀ–ÿãtÂϹÿŸð%¿øÝÚ~Ôž´}©=kÅ¿ágÜÿÏŒ?øßünøY÷?óãþ7ÿ¢à{OÚ“Öµ'­x·ü,ûŸùò‡ÿÿÑÿ >çþ|¡ÿÀ†ÿãt\iûRzÑö¤õ¯ÿ…Ÿsÿ>0ÿàCñº?ágÜÿÏŒ?øßün‹í?jOZ>Ôžµâßð³îçÆü oþ7Gü- Ÿùñ‡ÿ[ÿÑp=§íIëGÚ“Ö¼[þ…ÏüøÅÿ-ÿÆèÿ…¡sÿ>1àKñº.´ý©=hûRz׋ÂйÿŸ¿ð%¿øÝð´.çÆ/ü oþ7EÀöŸµ'­jOZñoøZ?óãþ·ÿ£þ…ÏüøÅÿ-ÿÆè¸Óö¤õ£íIë^-ÿ Bçþ|"ÿÀ–ÿâ)?áh\ÿÏ„_øßüEÚ¾Ôž´}©=kÅáh\ÿÏ„_øßüEð´.çÂ/ü oþ"‹í_jOZ>Ôžµâ¿ð´.çÂ/ü oþ"øZ?óáþ·ÿEÀö¯µ'­jOZñ_øZ?óáþ·ÿGü- Ÿùð‹ÿ[ÿˆ¢à{WÚ“Öµ'­x¯ü-Ÿùð‹ÿ[ÿˆ£þÏýâÿÀ“ÿÄQp=«íIëGÚ“Ö¼WþÏýâÿÀ“ÿÄQÿ FëþñÿàIÿâ(¸Õö¤õ£íIë^+ÿ FëþñÿàIÿâ(ÿ…£uÿ@øÿð$ÿñ\jûRzÑö¤õ¯ÿ…£uÿ@øÿð$ÿñÂѺÿ |øøŠ.µ}©=hûRz׊ÿÂѺÿ |øøŠOøZ7_ôÿOÿEÀö¿µ'­jOZñOøZ7_ôÿOÿGü-¯úGÿ'ÿˆ¢à{_Ú“Öµ'­x§ü-¯úGÿ'ÿˆ£þ×ý£ÿÀ“ÿÄQp=¯íIëGÚ“Ö¼Sþ×ý£ÿÀ“ÿÄQÿ JëþÑÿàIÿâ(¸×ö¤õ£íIë^)ÿ JëþÑÿàIÿâ(ÿ…¥uÿ@èÿð$ÿñ\kûRzÑö¤õ¯ÿ…¥uÿ@èÿð$ÿñÂÒºÿ tøøŠ.µý©=hûJú׊ÂÒºÿ tøøŠÅ;¡ÿ0ÔÿÀ“ÿÄQp=¸N§½<05ãßd~™ˆû˜çÜT:ô­\¶Õ¬¢º¶“|R ƒý½07è¦#núCÒ²5K.&9­vé\Ö¼äBßJð¯\´þ+¾vlà¢a±©5‡º¯øóâÃþÒÿè"²÷T±’î­‡ðÖ¯Ž5F´al~l`î €wž1·wÏ·…º´äñ üš"é bû… äsŸ^pO¥BöW±¼ÈöWJЮùU¡`c_VùG¹§>üZý¬Ø]‹lnóü†Ù]ØÆ+»Õ/´¹£ñ«¯`ë¨iéVâaç ŒëE†½j—º%³ê°­ö7—q\,I·£ à7ny¤ô_ןù×úôÿ?Àࢳ½žÝî!³¹’ÎùRd\uËA²½[AvÖWBÔŒ‰Ì-åÿßXÅuºEÝ´Þû¥ªÚ[Ã2˜Eµó%ÆI?#Ä8p—ִ쯴‹O É :¥«[É¥²žý̾qtBNÕAD´¸-lpa¾û@¶û מWx‹Èmå}vã8÷¦¥¥Ü–­t–— l¿ze‰Š«c»üA`< º‘¸OíÈ쎘±nö’0øëÂ÷õâ´í¼Adº „¶ZZýžËÉšÖîöH›p0•óêGãMéë¿ü¼¶þ¿®¿qÃèºEÖ³Cp`yV9'Žë=Éè?P\ÙI¯q§Û¤·G;ij>ÒG}+²ðæ§núFƒå¶š,'v½·žãÉó”¶AŸŽÇÖ¹+H[x²}JÙÈïšxÙO 7’?(·¼—õÐ>Íÿ®¥Qkt@"Öàƒ/’‰¹“û>÷·Z‘4ûù Á,.ØÂq(XùgѸùô¯í¿ ÇxÐ «v‚:²H$_šbX˜Ç?{qÖ³4r;Ë &u×­´Ù-®äŸQ†YLfpÏ»ü|dcßÚ’þ¿¯¼õý}Ç me{z¬Ö–WW ¿xà 8\ŠÒÔt­WL‹qw-å’Ý2Gb™ê8µ«u¯@¾Õ›L¾6²Ï¬4±Ç¾\†"½p;J×—WÓ/<3m£Å©[ZÞÉ¥F>Õç(\¯X¿‡?Q×ð'Kÿ[ÚÛúÞÇäöïq Ì&wʳ"ã®X Sa~-~ÖlnŶ3ç˜ËÇ®ìbºÝ*îÚ_-KU´¶†(¥0‹kæIòIù!Ãü¾µ¹otº|>½»Ömíôèô•YI1Ý>PãônÜõâ›Òÿ×q/ëð<Ú;é­šæ++©-×;¦HYc®X Smí/.ÑÞÖÒâuN]¡‰œ/ÔÅwþ¿Òl,4ùWS¶ˆ)»ŠëPxÌyÎБgkœâ²âºKï YÙéšý¦•-³ÌnbšäÁçn9RûÜqŠOK‚9D´»’Õ®’Òá­—ïL±1Aõl`T«Ò­¼Adº „¶ZZýžËÉšÖîöH›p0•óêGã^u¦ÜÙÛ] /¬>ÝÒ<Ÿ=¢ç±Ü¼ñMîÐt¸¶I{{¤ED“ȱ)c€  ûsVµ QÓuc=¤æRå#+blwN>aô¦Ú_ÙÅâk[è­¥œwQÉäù†_-Aù'¡5Ô]9FÙvHÄ1ÎÞrx=«¡—VÓäñ%ÝÓ_ÚŸ;@1´žrá¦8ùsŸ½íÖ‡§õäÅ_õåþgö ñiö³av-±Ÿ8ÀÛ1ë»­=3ÃÚµ²Kmu§‰% b·’ä ¤Ûœí\C×Û[Ý.Ÿ‡ïnõ›{}:=%DÖRLwO” b>Ûž¼W=áËk+=µ+=WHƒYœ²F/.Õ>ÊœŒ…ä—#×±üÛê ¡Ç’A ‚8 ö¤ÝL”æt.®UˆÞ‡pl ÷ôÝÔ’î£uEºÔ.ê7T[¨Ý@î£uEºÔ.ê7T[¨Ý@î£uEºÔ.ê7T[¨Ý@î£uEºÔ.ê7T[¨Ý@î£uEºÔ.ê7T[¨Ý@î£uEºÔ.ê7T[¨Ý@î£uEºÔ.ê7T[¨Ý@î£uEºÔ.ê7T[¨Ý@î£uEºÔ.ê7T[¨Ý@î£uEºÔ.ê7T[¨Ý@î£uEºÔ.êUß#¬qÎä*SPî©ì§X/¡•¾ê““éGõ¦ô^€F>Ñy)”Ž|¬ñþ•‘©XI§LÉæDù(ãÀZÙi7±o´ÌŸì®ÜÍMfë7[xà YÁÝ“×#úÒöšTŸQ½û8e0ROò¨ïôÈà·7VWbæ8~A+øŽ ^[Ã$°Ï3¯–Ë… c%}Hô5ÍÖÛKÂêWÎ$*±œ¨^ÄúPZ.ˆu0Ó\\˜-ãpå˜úñ­[ß Û¬,tûÙZeÌAÝì“p¯£›`‘»&åd“F}¹ý*Åš›#I*È0 ™³¸:“òŽÜ÷çžO—WR3jût>‡ —Ѷ¯u«íýÜ®ãÜ{ƒ^ðÂñ’ÊxK|¢|õ¼ÆæQ-ÔÒ¨ÀyÀô滿‡@˜ÓAü…z±>~I&Ò=ÊÑ÷ «UŸ§œÄµ¡TH×ûµËøƒýCý+¨»\¿ˆ?Ô?Ò€>|ñ!Lj.ÿÞ_ýV^êÒñ/üŒ7UÿÐETµÓ5 äg³Óï.QN ·y>„¨5# ÝFê·‘~ïf‰žàZ/ÈD‡?0ë×Vx^Þy!“ãbƒ‘ph7Qº™E?uªÒhÚ´¶ââ=+Px î­¬…HõÎ1z†ÊÎ}Bí-mÕL®€ÇKÐuªeÓ¯-Ý-ÝÅÀsB°\îàr1ƒÖ«P÷Qº™O’aeŠHètÞ…w/b3Ô{кÕ/Ø.ÄÎÖÒ$qg2 „û¤‚AõªôýÔn¦Q@ÝV¯5;»ô¶K©¼Å¶ˆCÚÔŸÇš¥Z#@ÖÙC S Œ‚,äçÿ  ;¨ÝLé׊(û¨ÝW­ôKÛ£d#¦¬_&wgŽ:©kk=íÂÁn›å`H]Áz žI  n£u ±Å¯¬r‚cb0ƒ^i”ýÔn¦SãŠYwyQI&Å.Û¶ÕIÇAï@ê7P"”ÄÒˆ¤1+i œàÓ'juµ¼—wPÛE2gXÓ'$àQ`ºÔ³ÂöóÉ ˜ßlŒƒƒQеÔ…ÛÍNîý-’êo1m¢Â6µAÀçñæªî¦Q@ÝFêeýÔn¦Q@ÝFêeýÔn¦Q@ÝFêeýÔn¦Q@ÝFêeýÔn¦Q@ÝFêeýÔn¦Q@ÝFêeýÔn¦Q@ÝFêeýÔn¦Q@ÝFêeýÔn¦Q@ÝFêeýÔn¦Q@ÝFêeýÔn¦Q@ÝFêeýÔn¦Q@ÝFêe:]J‹µd`=)<îI ’z’j(u¸xÉòØ®zàÐ× ç.KÓ& ¢€--áG€£êاM¨O:í’FaèqÈTè©p‹|ÍjZ«8ÅÁIÙô¸ýÕè Î|ïúéýyåzÃ^“ÿ×Oè*Ѹéßê–´k;NÿTµ£LC_î×/âõô®¡þírþ ÿPÿJùëÄ¿ò0ÝýWÿA¥§Ëi‚$7‹vÈu Ù¦XÛ>_rU¸ü)šÆ‹ªêZÝìÖ:eíÔJáKÁ:ƒµN2^GçUáñ?‘äbêþNíþ_ÙeÛ»Î1Œã½KÙ¯ëpêŸõ±¡¤Ãlm´ë¸âÃmK&M˜R°?ËÚ®Åkcmk¨_ÜBí9!“~ž·[rÖeÛ’OÍ׎Ն<9â„hÚÀˆ>ðŸe—hn™Æ:ûÕˆ´¿As%ÌV:üsÉ÷åHf ßSŒš-¯õåþC_×ãþf>¦m[Tº61É©‘ŒQÈ0ʹèy=*¥l?†§ŠOøE|Eÿ@ Sÿäÿ ²«5uǵn’¯¢g:\{•b{R„Ÿ~GáZR‹ OJµµÓ­´úy•®Í¸iÌ,X‰:Œ6Wàb±þX–Þ?íØcA´D¾r…˜íPAŠ-­šÚµˆ lîŠ5•Tç®@â“W¿Ÿüóéo/øχàŠ M åKÍÄ Ì„ ÷½9®Röig¸2KP±äŠ…ï•UѦëê! e©ÌXŠOÝœçåãŽyâ‹­;ij®ìõ;‰HÁyb‘ÛR)õ*º­.Äx“F³¶fôéöÌßݵ˜·ü†ÿ¾…b W'J¾'þ½ßü*Ü>ñDO#GÖ#!GÙk(ܧ¨8j`[¸¸‡Y´ñ¥$1†ó`±PLI¸€íò€8ô­~=Lûm’Ùîò• ©r¯93M¼™†zŒö¬%ð߉Ò'‰4]]c“ÐZÊc¦F9ÅNÚ?Œ^ÈY>®µ¨é‚bƒþŒRJË@êmÍáë;„½†ÖÖ/´j¤\i˜P6F¹Uô;?¹\¦ºmN·t¶QÇ´oåÆ#P ç\dûšºš‹cx]4½m^Û yAŒsÂñÀäôõ¨?áñýuOü“ü(¶ºMLŠèašSà™³3ø˜Æ3¸ð<¶ª¿ðŠø‹þ€§þÉþñῈ EÕü’ÛÌe—in™Æ:óO§õÜ]MËÛµësiVðØÙÚ´–÷k ŒdêÛóÐ’9ã¥-­…±½Ó´Ã¥Û¾Ÿqd³KxaÌ™(YœKÕv¶F3Ž0G5&‹âùmÒM3\{dû°´”_¢ã…Ñ|^–mfºf¸¶¬rЈ%à8ÅM´þ¼ÿ¯×õø_3kDP_Â…‰˜ï¸ÇÞþ•^=6Ìx£MµK;itÆ·v·˜Æí#cîHå·º~î1îs"Ðü[iZ^·#UKy@RF pHâˆô/±¬ZV¶‹c[y@BÃŽ8ÈëC@O}<©àý5µ†XY&#[«²‘.p‚W·B(ñ 0ÜX¦¡a´6o$D-3DÅr›8À<äûPÅ¢ø¾ Wµ‡L×#·åâH%ßP -Þãð‚óM×nB}Ñ4>ߦGÚsõÐxLÂ.uCp®ÐÿfϼFÁXŒ„‚ü Vÿ„WÄ_ôÕ?ðOð§Åá¿Á¿ÊÑux÷©FÙk(ܧ¨ÐLBã!yŽ}0kÄ–vö »¶¶M‘)ËÎ|²T¹ö$¶Ò/Ŧ5´Z^¼“½Á™îV9ƒ8*iã'§­c·…üFÌY´-T±9$ÚIÏéP•¿¯$Swþ¼ÙEkÿÂ+â/újŸø'øQÿ¯ˆ¿èªàŸáT#"Š×ÿ„WÄ_ôÕ?ðOð£þ_ÐTÿÀ9?€2(­øE|Eÿ@ Sÿäÿ ?áñý5Oü“ü("Š×ÿ„WÄ_ôÕ?ðOð£þ_ÐTÿÀ9?€2(­øE|Eÿ@ Sÿäÿ ?áñý5Oü“ü("Š×ÿ„WÄ_ôÕ?ðOð£þ_ÐTÿÀ9?€2(­øE|Eÿ@ Sÿäÿ ?áñý5Oü“ü("Š×ÿ„WÄ_ôÕ?ðOð£þ_ÐTÿÀ9?€2(­øE|Eÿ@ Sÿäÿ ?áñý5Oü“ü("Š×ÿ„WÄ_ôÕ?ðOð£þ_ÐTÿÀ9?€2(­øE|Eÿ@ Sÿäÿ ?áñý5Oü“ü("Š×ÿ„WÄ_ôÕ?ðOð£þ_ÐTÿÀ9?€2(­øE|Eÿ@ Sÿäÿ ?áñý5Oü“ü("Š×ÿ„WÄ_ôÕ?ðOð£þ_ÐTÿÀ9?€2(­øE|Eÿ@ Sÿäÿ ?áñý5Oü“ü("Š×ÿ„WÄ_ôÕ?ðOð£þ_ÐTÿÀ9?€2(­øE|Eÿ@ Sÿäÿ ?áñý5Oü“ü("Š×ÿ„WÄ_ôÕ?ðOð£þ_ÐTÿÀ9?€2(­øE|Eÿ@ Sÿäÿ ?áñý5Oü“ü("Š×ÿ„WÄ_ôÕ?ðOð£þ_ÐTÿÀ9?€2(­øE|Eÿ@ Sÿäÿ ?áñý5Oü“ü("Š×ÿ„WÄ_ôÕ?ðOð£þ_ÐTÿÀ9?€2(­øE|Eÿ@ Sÿäÿ ?áñý5Oü“ü("Š×ÿ„WÄ_ôÕ?ðOð£þ_ÐTÿÀ9?€2(­øE|Eÿ@ Sÿäÿ ?áñý5Oü“ü("Š×ÿ„WÄ_ôÕ?ðOð£þ_ÐTÿÀ9?€2(­øE|Eÿ@ Sÿäÿ ?áñý5Oü“ü("½ á¯ü·ÿ®ƒù å?áñý5Oü“ü+³ðŸ{¦Í,7Ö—²³ Ÿ­q:ÝΣ{á­CL¶óMÌs·ÙäŸË^–ôç±­x/îu½2SçJ¹·¢¹Ê¬¦2½@'åîHéÚ›V Ü`ô5BÔbQÑduÐ ÈU ÞÞ^é²Ëw7ÚNéos°!ž x|9ç§\f¯Û«“þ»Kÿ¡µ 5QHaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPU&Õ4ûyŒSß[E(ê2©5«¨> ,¬­,žXûùY³œîúW;=Ì—0êÌq½Þï•\²®cT8ÝÏJãÅc#CN¢o±Ø×®ÈáýzGÿ¡½léÚÌ··ÂÚKh£Ìm hæ/÷JŒTz±µÏù#ÿ¯Hÿô7®šu#R<ÐwA{nþ©kF³´ïõKZ5  »\¿ˆ?Ô?Òº‡ûµËøƒýCý(Àçe¾«ïvþCZÚ7Ðj÷SÀÐk½…Ë1„.Þ0{w‹àèæ{kñ M!ûNNF>QêG¡®Ÿn¡ÿ>Ïÿ}Çþ4†aiž¹³Ôm'–;1ä+‡ž7c$å†2ÙO´Ñu••ËÚ­­¬¢]Ñ33ÈA$ äûÖÖÝCþ}ŸþûühÛ¨ϳÿßqÿ;Å”’ëWjÈ#$Vòwcü©×­›y ý©ûuùöûî?ñ¨¥¶½‘}•òÁ‡ßNêG÷½ésZÓWÒî,ZV‹ÌÁYd«8ïÈ—qáýFæ{KÉ5Kv¾·Y;Yf6VÇðoÈ Ôm$×îd†É!”+Cù›ƒ„à|½E!Øëh®=üQý§a¬Ù¶Kˆl^e{KÁ:ã}àØ«Z·v«¥Xê:ÙþÕn ¼Ë8“yU†N9ïõ¦—õ÷ÿŸõø™ÓQ\æ¡.¥uâÄÓmu9l &såÅ–mûyܧŒzU3âÙt˜ï-5C×¶×)n’oÇ(uܬÄä'Ï^œu£¥ÿ­ì{]ξŠá¯üM>³¥G †ÈîN£¬¿f¼Ê° ·É2Žé29«2jòèRÝy¶÷Mme Zý¥BZFQË.sêÇ·âëð¸_ŽÂŠäµ/\ BÚþÊ[;«u†LZÝýôy‚¯´È Œ:·e¨j’ø§VµX£–ʈny¶´@Æ Ú¡NìŸR(¢¢¹];_‘t}*+;I®ï/FD¸¹É ­ó3É·ÜÇz™üS'ö|rE§fõ¯~ÂöÒL$œŸ¾ÈÆqÞ :J+–›Åò[ÀÉ>žÞ¥Øµxä¹%%w†2mèG¶sÅtv²K-¬rOE+ ²$›Àú6*šŠ( Š( Šóx‡]ð犤’i’[yP˜"'ûdC߿ӫà+ÍcR[ËëÛŸ6ÎG!òÞ`ë´ ãŒ.rÙÓœõ§Ó­cÿÂQ¤Ïáÿ¿oþÂQ¤Ïáÿ¿oþçtW?µg?¶‘èŸð”ióøïÛÿ…ð”ióøïÛÿ…yÝ{VÚG¢ÂQ¤Ïáÿ¿oþÂQ¤Ïáÿ¿oþçtQíX{i‰ÿ F‘ÿ?‡þý¿øQÿ F‘ÿ?‡þý¿øWÐH$àQíXý¬Dÿ„£HÿŸÃÿ~ßü(ÿ„£HÿŸÃÿ~ßü+ÎÁÈÈ¢k!{i‰ÿ F‘ÿ?‡þý¿øQÿ F‘ÿ?‡þý¿øWdgô£ ’22:Š=¬‡ídz/ü%GüþûöÿáGü%Güþûöÿá^wHH^¤ÜÑídÖG¢ÿÂQ¤Ïáÿ¿oþÂQ¤Ïáÿ¿oþçt…€ ==èö²k#Ñá(Ò?çðÿß·ÿ ?á(Ò?çðÿß·ÿ óº(ö¬^ÚG¢ÂQ¤Ïáÿ¿oþÂQ¤Ïáÿ¿oþçtQíX{i‰ÿ F‘ÿ?‡þý¿øQÿ F‘ÿ?‡þý¿øWÑGµaí¤z'ü%GüþûöÿáGü%Güþûöÿá^wEÕÚÈôOøJ4ùü?÷íÿÂøJ4ùü?÷íÿ¼èÀA¡´{Yµ‘èŸð”ióøïÛÿ…ð”ióøïÛÿ…yÝ{V/m#Ñ?á(Ò?çðÿß·ÿ ?á(Ò?çðÿß·ÿ óº(ö¬=´Dÿ„£HÿŸÃÿ~ßü(ÿ„£HÿŸÃÿ~ßü+Îè£Ú°öÒ=þ#þýûð£þ#þýûð¯;¢jÃÛHôOøJ4ùü?÷íÿÂøJ4ùü?÷íÿ¼îŠ=«m#Ñ?á(Ò?çðÿß·ÿ ©¤êFÿÅwžMÌ’ZyE$íä€zsšá«£ðWü†fÿ¯vÿЖ³Fåçþgn|þÑ5ö_æŽòŠ­}o=Í¿—o{-›îÏ™#za¥rzN¯©Á¤Û_Ý_\jW7s½¬e"K‡` eP@ ¤ž¿Jì2ó;Z+ž>(û=¥ù¾±xolÙ­£Iæ8M­OŽj½þµs.«i÷Ö_b¼]>IãÙ7˜®˜ Ø ã#é7d4®ìu4W š¸Ó5»Uçžm‚ÝO2È[§·©=€­-[R¸·»Ô™aº‹FiÆÙ÷DŒ è¥FH#ïzvª’·ãø_ü…ÆßæuVn‡su¥Ã-üDí•1ÌdÞ ŽOʸ>Ü×aâ}E¢ÓîV¸–iîÄRÛÏd#€!r%Ú£8éóž1CVvw1èÔV>#™Î£q-ŠE¦Ø<©%ÇŸ—%:á6ÿZKo^5ż7šI¶kÈšKOô€ûÊÛå8ç¸ëKÌ~GAEs–¾.‚æçF‡È*u(ZRwäB@ÎÓÇ9!‡o»PZx¾{û«k{}:%yãó—Ï»ò÷F\¨(6Ç$qŒŽh·@:ª+•Öáë˜.ì§Ô5!v,c1ÛGR®FÒÇæ%Ž8ì=«oÎ_îMÿ~›ü(!`§z“ÓzÏæ)ßúþ½Ddj-ôúÚj–”V² o³²Émæ‚7nÈù†çUŸÂHÖ™ÒDÜ‹³zè¬L€måzmÛÆßJé*6™ŠüÌèU-Êëõ ÿ¯‘ú%ÕÌ6bòú)%¶¼[Ñ[ya‚‚6ãqÇ^¹?JVð×ö¥Íäßkò¾Ó0ãËÝ·d…óÔg9ÅmùËýÉ¿ïÓ…rÿroûôßáEÃúýLM_Ã_Ú·7s}¯ÊûE¼PãËÝ·d…óÔg9ÅN4{˜5Ùõ [õŽ­†âƒqb£+nxÇcÒµ<åþäß÷é¿Â9¹7ýúoð  ¼--¥–š¶š•{`såus–VLý;ö§Çá€[¼g/Åüó4c÷¯‚À?(è\b·<åþäß÷é¿Â9¹7ýúoð¢úÜ i´+¯?Q–Úöûtªî“Úù«´ M¤néœÕÝK]H‚Áe2ˆ³ó·©'ØsÀì*à ;Ôž›Ð®1RPEPEP{ðüjž)¸¿Ô/¤žÆQ¸E’7M¹Â;~^æç„|#qá«»Ù$Ôhe;bˆp6ŽŒßívã·×Ž®Š)ÖŸL~´äu ÅÊÛíÜŽCq•ÇøÔÔÙ#IP£Œ©ê+ZúœjÝFÁ0ž=ꬣl¡ÔÞÉ׊BMXH§‘í^B¤Bà шô¨~ÜË»I gm«ÕBžû²{U¡¬(Ù£¡SÏëQý‰6ýù7îßædnÎ1鎔] 4W{‰g·Ø îyB+¨ 0êOó«/$v/–B6‚£ž9턉2ɹC‚3ü©ÒÀ³B#fa‚`yÈïEÐ]6õkx%Øç%² :õëœTæþÏ–RÀ‰³°`än8残uÝ‚ËƘ,Aäù’É\tÇ]h¯%á…šLºB·,çÐüëF Áf2,’.ã–PF üªzM¡;t (¢‚Š( Š( Š( Š( º?Èfoú÷oý kœ®Á_ò›þ½ÛÿBZ‰|põÿ3¿ÿ/?Âÿ4w•Ï'…ü½ÖÎ;æK›K†¹‚äG÷X³Ï# Açò®†Šï ç…þÑi~/¯žkÛÆFkˆã å˜ùM«“€<“žiÉáɧ{¹µ=CíWÚ›Exá,qž¸\žIç9í[ôP9wðj\ˆšòóÌ–%¶ŠXâØÑº¶VE98#Ž?Çuü>×7Í{yæ´ÚØ¥ÙÍÙ$—œué[t›€êGçC×úþ»‚Óúþ»ú=îŸf-®ï’ì"ªFË–BŽ~c“ïÅbEáÏìØô›a_LY7˜£´Øî7ïÚ\±ïèu{—ûÃó£rÿx~tï­Ã¥Œ›}(ôýJÊy ÐßÍ,…ÚTIÛ©éëPXè1_Z\j™¼HÉl¢ÜŒc“¹±Ça׊ÝܿޗûÃó¤)7ã{}F8¯äŠK™„°H#æØ-µyç—O½íVµ_ ɨÚC§Çw:|Hˆ±›Pò&Þèû†Ó€9Á®‡rÿx~tn_ïÎ… Sh)ª\^éÚ‚[‹­¦xæ¶Ê1¹NჀ=jõž™öMSP½ó·}°ÆvmÆÍ«·®yÍ_ܿޗûÃ󠢓rÿx~tn_ï΀ŠMËýáùѹ¼?:Z)7/÷‡çFåþðüèh¤Ü¿Þ—ûÃó  hÓëºÖ6÷Mo+aþÇð·û'üç¥rW €±´û%ùKåaö™_%\ÉQØŽÞ½ëÑw/÷‡çFåþðüèD`·Š#+ÊQ™$9fÀê}ë‹Õ¿än“ýÕþUÛ‚B q·ü²º¿Ê€; ;ýRÖgißê–´h¯÷k—ñú‡úWPÿv¹¨¥PðüƒnAègˆ¡r+¥ÔõQdÂ4ɀİÈPs¯C\Ï„Ž4Éÿëæýk{WšÁc¹’Hå ¹^5$õÁºJ@_²¿K¸ýÆ µ”žøÏ¼O¾#ìÒ6aì@È®\_–0Ë‚r9bpã=}ÞÕ­ï&…y¿8U”)'9?Èä~ÀÓ¦ZÈ‘ÚI,Œª¡ä,Ìp y'è)õ•~ßñKjõÊçù½);+Ž*í"õž³¦j2ìuK—Q’°N®@ü ]Ípš>›‡îæ¶±´‚Ê$‘dŠBóJ xü (9É=*{›«oYu ÃwqµfšYÚE‰L»YÕI!p¹è;UIYØ”îzhÍp¯q¤Þjpiw×ñG¦5ÈÌg1ÊËóŸ˜díöâ’òäé¾›PÓµk›»™£ˆ¼ÒÝ€gœÐqéÅ/ëúû‡ý~_æwy£upq[k†Æþ8u(¢ŠEˆÄSyØ6ï˜ J‚¡—×¥;ÏŸPÐÖ->k¸^Öð¥ÔêI&%|“ÜÈéŽ(³¾#ìÒ6aì@È¥¬}:þ ï ´öÆãËò$_ô‡Þà®A²sÈ<äÖÅFפéMÍ %#,0HñRW1wcmmãÝ*æ(ñ5Ä7W,IlÀç ƒŽjOJÒkzVŸ5ìÖvS‰YÞLM#¨Sxäu'ƒÎ(ìÍ›+ø5 ,D3<¸cæSƒK¨Zé–¦æî_. BçibIàI>¸¹¹Óô‚Îáü¹µÉ`’w¸(Jdõ—®Hv;ûÕ‹›;ö´±¶Ô.KBúÄB*õå’5*r¦\+g<Žüеµ¼¿˜m{ùþÿ#³´Õ-/eò y<Ï(Kµât!I ˜àñÖ¥¼¼‚ÂÕ®n\¤J@,·SÀç©®/_šçO›Sµ¶½¼Hâ±¶ØMó)i˜¸œäŽ3Ö›«Éw£6­cm¨^´BÞÚxÚ[†wšm¬“œ:fšÖÂÛúôÿ3¸Žæ f–åV’Š(HÈÏáN~µÎèñÇÿ §ˆ$28—÷ Gæ¥LkómÎ ÈÆqê+¢~´†yßü"ÚÏüùÿäTÿ?áÖçÏÿ"§ø×¢»¬hÎìÌNµKJÕìõ›wšÍÉTrŒ`CB9—²‰—²‰ÃÿÂ-¬ÿÏŸþEOñ£þmgþ|ÿò*zEö‰$ÞÎhUb¹à’9ïN6PúÍÿßühöH=”O:ÿ„[YÿŸ?üŠŸãGü"ÚÏüùÿäTÿô³€wŸÿ$ÿ⪴ˆýÙ.Tö"áÎ?H£ÙD~Ê' ÿ¶³ÿ>ù?ÆøEµŸùóÿÈ©þ5ÌüMäñ£HA‘m<¶ u+,«ŸÒ¸èù»ö“ÈÿZjŒ{’é£ÕÿáÖçÏÿ"§øÑÿ¶³ÿ>ù?ƹvŒw߯r çëÏcåÖÐÂFJ÷2¢íaŸð‹k?óçÿ‘Sühÿ„[YÿŸ?üŠŸãRyt†:¿¨Çùˆç]¿ø?áÖçÏÿ"§øÑÿ¶³ÿ>ù?Ʊ..eíŸçQ×3£ìtªI«›ÿð‹k?óçÿ‘Sühÿ„[YÿŸ?üŠŸãXRöQeþmgþ|ÿò*ð‹k?óçÿ‘SükŠ=”CÙDßÿ„[YÿŸ?üŠŸãGü"ÚÏüùÿäTÿÀ¢eöQ7ÿáÖçÏÿ"§øÑÿ¶³ÿ>ù?ư(£ÙD=”MÿøEµŸùóÿÈ©þ4Â-¬ÿÏŸþEOñ¬ (öQeþmgþ|ÿò*ð‹k?óçÿ‘SükŠ=”CÙDßÿ„[YÿŸ?üŠŸãGü"ÚÏüùÿäTÿÀ¢eöQ7ÿáÖçÏÿ"§øÑÿ¶³ÿ>ù?ư(£ÙD=”MÿøEµŸùóÿÈ©þ4Â-¬ÿÏŸþEOñ¬ (öQeþmgþ|ÿò*ð‹k?óçÿ‘SükŠ=”CÙDßÿ„[YÿŸ?üŠŸãGü"ÚÏüùÿäTÿÀ¢eöQ7ÿáÖçÏÿ"§øÖ…-f²ñͽÂl•-ÎåÈ8ÉSÛë\}u>ÿ¼¿õîßúÖU`£(5ßôgn *£_Êÿ4wµÌø‡ÆÚ~ƒr-H3\ñ”áI€Xœs€qÅtÕåw6º'ÄýIõÂ#ÎÐK ù@fܧ>˜ÀÏû8¯BŒ®Ú½º²oCµÐ|_c®?’¸ŠrJ…Ü~ð*Celdá”dr3ƒŽŠ¼›UÖôëï‰:|ú}Ô~[<1Ë>p¬D€õïÆW>¯Žõë4ªÁFÚZý,FáOÒ°4½;FºÑ´ûÍRi.oO™rA2HÜíýô­öû‡é\¨¸’ßÃ~ìýåÕ¼m¾5n ·Lƒƒî9®iEJ¤SþµGD$ãJR‹³ÿ€ÍïøF4/úÚß¡Q¦áÉf–ôû–,yˆª¥“###¶Es·Zæ´4ÍKÄ1ê–öW éÆ*è°†lnzŒtàÓµ]búɼW-¤‰ °=¢Äâܻ‚O7S÷³Šj”øWõa{z·øŸÞÍ‹ÝB³»Ó þÅ´¶\7lf"’Lôçý^1ïíW?áпèiÿ~…sFçQ¶ñΕ£ß_µú$ësÒDˆëºÞéJ€÷sÓ½wt{(vAíêÿ3ûÌŸøF4/úÚß¡Gü#ým?ïЭj(öPìƒÛÕþg÷™?ðŒh_ô ´ÿ¿BøF4/úÚß¡ZÔQì¡Ù·«üÏï2áпèiÿ~…ðŒh_ô ´ÿ¿Bµ¨£ÙC²oWùŸÞdÿÂ1¡Ð&Óþý ?áпèiÿ~…kQG²‡dÞ¯ó?¼Éÿ„cBÿ M§ýúÂ1¡Ð&Óþý Ö¢eÈ=½_æy“ÿÆ…ÿ@›Oûô(ÿ„cBÿ M§ýú­EÊ{z¿Ìþó'þ þ6Ÿ÷èQÿÆ…ÿ@›Oûô+ZŠ=”; öõ™ýç?-…¦‘«i¿`-ÖæI"•#áXÙ‡2 Ž~µÏjßò6Éþêÿ*êµù è¿õñ'þ‰’¹][þF×ÿu•($›K¿è‡U¶¢ÞöýYØißê–´k;NÿTµ£Z»\¿ˆ?Ô?Òº‡ûµËøƒýCý(7ÂÇn‘tç¢O±ôBIü®ŠëOŠúA+—?.ÓÆ=k'ÀjÎ쑸6­±‹.¥-ˆµ¶{¸ãȾNp¬Hœc'ŒçŠ@C.—o4¾cÁóg,G¾¾½)n‘-´É¡E8Ô¬À€âjI-ôH¯á±{Ko´ÌŒéƒ9UÆI `G_Z¹eï†ÒÜ ô¦Õ p²Á5»ª¾%”I ðÌÄdÄZÞZúT3XZ\g¶ŠR:@ØüèªCåF±ÇDPUWÐéLŽÖ8 Gn‰yj€.QŽ”·vu¬A¤$ÿ:®È`RÜ3Î8Éö?öF›ÿ>ß÷é€*Zéöö(RÎÎdc’°Äë€)°éVvÏ+Á§ÛDÓ JcT¸ÿkŸÆ®ÿdi¿óámÿ~—ü(:FšM…·ýú_ð¤rhšlvò[¦•f°JA’5¶@®GLŒ`Ò¶§½¢Z>™hÖÈw,&ÝJ)õ Œ ±cm¢jv1^ZZ[Io(Üä‘ô#5cû#MÿŸ oûô¿áL WI¶—,Ʊ«FbŠ4P£$`+F’-:Êß ¤¸þ$@éQj×öÚ>œ÷·ÈÑ#*‘'æ`£©Í9 …æŽf‰XÁåAe®làSn­-¯ 0ÝÛÃq9)*Sø»å¯¥QÕµmËí3E,›¤H’8€.îÄQ’SÜŠbi¶1Ù$²¶[SÖ‰Bø1I—§ÛÂÁakQ¿˜ˆª…ïÞ®Z±¸¶Idµ–ÙØs¥K/×i#ò&¦ò×Ò€(KcipÎÓZÁ#:…rñ‚Xz€yMcipÎÓZÁ#:…bñ‚Xz€yúÕÿ-}(ò×Ò€)ýšßí_jò"ûFÏ/ÍØ7íÎvç®2:SŸ­O"…\Þ ~´í”…£ÚÜ«<2pÊ®Aªº~ƒ§iS¼Öp¼r:íbfwÈú1"¬j7˦ØKvðÍ2D2˱ÜòGJ¡£øŽßZ¸’+{K¤¨f’@›Fz †<šØ¶û×õÓÿeZç¼Mªêp]¬A]ö‘Ûµ*|`àF3жž¿-t6ßzãþºì«Xíá=6æþö÷T··¿šâ@Èf„)€g>„ç¾i ÄéðÌšŽ-º³´þl€¶nàTt'ëÇ×¥\±•æ±¶–C—x•˜ú’T@6þ¸ÑÖèÝ%Š'1ó6p1žvƒŽÙÅ]¶‡ìöÐÁ»w–Š›±Œàbžš‹]ø’¼Eoœÿ©~ÿôñ5rIF qÆHõ®¿â6?á%‡“þ¡øÿ·‰«•0É$lIÈéS̯aÛ©Ñh¬-š¡¾`X‚G8b¿NWùúܼÕï!¹1Å@’$ ÏR=+°µŽÏS²Ž)¦xÉÌ¥Ê,3Ž8ÿë×KªàÝ«GÕã ŸoóÞ½b©ác6µÿ‚q×jîÅ„ñÉÌöjÊF«mäuëŸj··ç©e³eP3½äz€yú‘ù×10 ʤ ƒƒõô¥ îÜÍÛ稥8}¥¡”Z5¥2g}¥w18=E2‘yEéÓ°Å-yҵݎõ°QE†QEQEQEQEQEQEQEQEQEQEÔøþBòÿ×»èK\µu>ÿ¼¿õîßú×=}áëú3¯ µOð¿ÍífêÚ•®Æ‰©YG>ϸÇ*Ëôa‚?:Ó Xd _-½?ZéM§trZç ­|/ѯì–=3þ%—)&ÌOUufù‡ãÇé]v™i%†“gg-ÃÜÉoDó¿Þ”ª€Xòy8Ï^õsËoOÖ-½?Zm݆Ãr¶VW†Ÿá´3ZEgbcžRÒ4Ȇ͸À<’sÇJë|¶ôýjœÚ&q+K6›g,÷àF'êH¬äŸ2’èi G•Â]àÿ™Z_ø~}Hê[Â×A+~ù‚3ŽŒS;KR3S\i:5×Û|ä¾ÚѵÇïˆÞSz1ÓÂ=¤ÿÐ"ÃÿÓü(ÿ„{Iÿ E‡þ§øQïùÔ»¿ëæA}¥Ú\kún­À·òþùÚS–ŒE2…¦wKžÜgž‚¶~Ñüöþú›ÿö“ÿ@‹üOð£þí'þøŸáG¿ä¥Ýÿ_3KíÏhÿï¡GÚ ÿžÑÿßB³áÒèaÿ€éþÂ=¤ÿÐ"ÃÿÓü(÷ü‚Ô»¿ëæi}¢ùíýô(ûDóÚ?ûèVoü#ÚOý,?ð?ÂøG´ŸúXà:…ÿZ—wý|Í/´Aÿ=£ÿ¾…hƒþ{Gÿ} Íÿ„{Iÿ E‡þ§øQÿö“ÿ@‹üOð£ßò Rîÿ¯™¥öˆ?ç´÷УíÏhÿï¡Y¿ði?ô°ÿÀtÿ ?áÒèaÿ€éþ{þAj]ßõó4¾Ñüöþú}¢ùíýô+7þí'þøŸáGü#ÚOý,?ð?ÂÈ-K»þ¾f—Ú ÿžÑÿßB´Aÿ=£ÿ¾…fÿÂ=¤ÿÐ"ÃÿÓü(ÿ„{Iÿ E‡þ§øQïù©w×ÌÒûDóÚ?ûèQöˆ?ç´÷Ð¬ßøG´ŸúXà:…ði?ô°ÿÀtÿ =ÿ µ.ïúù‘êr$ÚÆŽ‘:»,²;9ÂùL2ñ®cVÿ‘µÿÝ_å]•¶™kdXÚYÛÛ–ûÞTj™úâ¸í[H?Ù_åDSWo¨§$ì—Oó¹×éßê–´k;NÿTµ£Vf5þírþ ÿPÿJêî×/âõô  ^¼‡Oѵ+ˇ٠Ìvôq5µá›YaÓ¦Ôï—eî ææpßòÍqò'ü@\Ö7ƒ--ï´ËÛ{¨–XYÔ”n‡ Ägñ»)àŠæÞKyN| ’…Ô@¢Š(’ýÑõªÏÖ¬Ë÷GÖ«?ZyŒj­†i¦@`³aŒ±r«êjÕ–ßzãþºì«S†Ûï\×Oý•jc@ËU¿Š¬ËU¿Š#ñQg‹Ä–sª7—$2 aÏ+<¤üxVou§ß½½ÌoçÛ»G*¬g¡èk¤ø wø‚Ú7•a‘•[ žPHü‡å\dÒ™îyþy]÷’ÌNI'¹&©Bú‰ÎÚRH¶šÍ¨* e%¤n9¯9är1ƒÏEnë×–ö—–‘‹7ÆTnWàãzu¯=Õ.'•"iäUÊ€ÌN3Îâ3TÅüþarîÌÀ.wd×Ð A]u+ÎtÔÇ4©s_SѼûBÊm®Ë¼ñ°çÓ¯4ðNÞp{óÅyôwró0¼súœU¨®ïWåH¦ÜÊÇå$ôíéšÁ+!·=~èúRÕ{ ßÙÖÛó¿ÊMÙ99ÀïÞ¬VGHQEQEQEQEQEQEQEQEQEQEQEWSàù Ëÿ^íÿ¡-rÕÔøþBòÿ×»èK\õ÷‡¯èμ.Õ?Âÿ4z /ãU.5{]F×OžáRîè1†2[yè?±œ óÛÈõ]oûOU±±·•|ÕûÃÜ•t1ÆÕØs–ÝÜdÞúêrÛCÑóU`Ômînî­bbeµ*%Æ ÃëÅq7z†‘ªjÖ—ÚæÏì©ìKA>|¡)'x=··¯¾*{/ìh¼k¨=ÜvÂîSX<‰ó2ù`|„ûƒÒ™7;;¿¶ZG9‚h7ç÷s®×^qÈ«¯2´6¿Ø¾þ×ÿ6ÉüíùòüÝß&ÿo½ŒñšB—Z=•³£I¥K®µIs†ƒžvç8ÏlQmmýoaì¯ýmsÒsFk—ðÌQØê:兺촂å<˜â=Ñ«=I8®uKš3Qn£u %ͨ·Qº€%ͨ·Qº€%ͨ·Qº€%ͨ·Qº€%ͨ·Qº€%ͨ·Qº€%ͨ·Qº€%ÍpZ¿üÒ}w«†Õ¿äm÷WùPa§ªZѬí;ýRÖ0ÿv¹¨¥u÷k—ñú‡úP>`¶WŒÄ '·-W¼4§R¸¼ñ ÿ¦‘¨?Ãn¤íÿ¾Ž[ñ•‹á}?ûW@Ô¬Lï NB;§ÞÚY·é‘‘Ÿzí$¶ÿ‰{ZÛ?ÙÿuåÆÈ¿êøÀ {Rîÿ¯ëþüŒM3þ'>%»Õ››[-Öv~…³û׈ ÿ>µÑÕ]7OƒJÓmì-Á@=O©>äòjÕ?!yœmîq7Äklj÷±æÂY*Bv1Q˜Ïß'Ž´íGPÕ®µ xYêa‹H‰#£‰˜¦ò\°'oo—ù®¬-›QM@Çþ”‘VMÇ„$1Ó¨KQðÖ‘ªÜ›‹ËRò²r²º tW @qìÙ¥öRõüÇu{™7Ú¾§{…Í•À²mQ³?îÕð¦ø‡PG®zWIeo5µ¸Š{ÉnÜ|ÙUˆô;¥6]:Òy­&’^Í‹@A !*Tð8èHæ­U=݉[# Æ0I?„µO.êk}–²³yAðü§rž¶½bkv³Û|.ºß=Ñ{XŠyëÙ÷xxúäû×k4QÏ Ã*ŽE*êÃ!àƒY±øoKJ—Lò¦{)@ —R¸t Y‰QÀà`R]~EuO·ü†™q©[xž}&óPkÈÚÉnQÚ$Cn*@ÚGB3“îiþ{©k¶×Osö{¤E–HãW ÄólU¯§JÖ}2ÒK×¼1°¹x>ÎdYO—œà`ñÏqϽT°ðÞ¦Þ=Ý·ÛÎw9’þyœc,¬ä1Æ ô/ëïÿ"mý|Œ[ KTƒ_Hu««ÛfžâHà‡ìÑ›YW’dPX6ÑŸ˜ŽA⻠ɃÃzU½ú^¤4ÈÅÓ̸‘Õõ*ŒÅTòzZÔ-†÷8írÂæoh¥5kØÜ•¤'ÊÀL…Ýëßv}±Vµëë´Ô!Óì/5#ty²Ggo1Àgip ­lê:=–ªak¸ä/-‘Lñ:0pÈAõÞ§_MÓÅ/š‘ù[ÒâDfOî±V‡³f—KÆý¾ûÄÁwi—w pTE$„ ädãÜ ÷®£Ã7÷wqj׳ ‰loÛÏ Í+@à›qN heeiö2°Ù6Á&‘LEºCg?«COÓ­4«AkeŠ KcqbI9$“’Iõ'5]Xt_×rÕQHK÷GÖ«?Z³/ÝZ¬ýhôQE%·Þ¸ÿ®Ÿû*ÔÆ¡¶û×õÓÿeZ˜Ð2Õoâ«2Õo⤆üU‘—ÅʈÌ~ÎçÿOWŸiaÂúšô‰ˆïâ(vªŸÜ?'þ¾&®bÏI»ºÞÐA,Éî‘£Œ‘ÿy±Ðu櫚ÈÍîP³Ó–îâ(î™ ;…lŽŠNÏ¥tzå’3¼++ „•.G¾Ƕ?QURÊ¥¶ r²3ų̈OɆ#òÏãW¦€nnŸZôUxËìúÜÆ[• 0®ÜA q„,EU>UÇ\bž#R@ßÀçR€€®[îž õÿ?çšXjå­YY±³~Ïzíʤ¨àÿQ?º?•I\·3¶ÇbØ(¢Š‘…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@u>ÿ¼¿õîßú×-]Oÿä//ý{·þ„µÏ_xzþŒëÂíSü/óGkqs,„™Æ~X™‡æ¨¾Ý¤ÿø'ÿV$ûÃéYÚ>¤šÆ•üq´k0$+‘‚Gô®‹…Ÿ·Cé?þÉÿÄÑöè}'ÿÀy?øš–Š‹íÐúOÿ€òñ4}ºIÿðOþ&™v,4ë›ÆBâšB ã;FqúRÙÜ Ë{»DѬ›sœdgï·Cé?þÉÿÄÑöè}'ÿÀy?øšd7F[«ˆ>Ï:y%G˜ë„“#?)Ï8èjÅEöè}'ÿÀy?øš>ݤÿø'ÿRÑ@}ºIÿðOþ&·Cé?þÉÿÄÔµåѳµiżóí yp.ç9 p?оݤÿø'ÿGÛ¡ôŸÿäÿâjZ­ý½ÍåÕ¬LL¶¥VQŒ`°Ü>¼PŸn‡Òü“ÿ‰£íÐúOÿ€òñ5-Û¡ôŸÿäÿâhût>“ÿà<ŸüMgZë‹t®ÉgpÁoZÌùjiS‚íèµ­G˜}ºIÿðOþ&·Cé?þÉÿÄÓl®~ÙiÁ‚h7ç÷s®×^qȤ¹º6Æöyæóeþés³?ÄÜð¼u¢À?íÐúOÿ€òñ4}ºIÿðOþ&¥ªÖWöú‚ÌÖìXC3BùéÁ'Û¡ôŸÿäÿâhût>“ÿà<ŸüMKEdkÚ†ÝàÀ÷Ëòía¦>aßÎ3´š½³»v¶ˆ³’NÑÍtž&ÿ‘zëþÿ¡Šæ¿æ'iÿ^±è¹×ñÚòýYÔÒúªÞ’;½;ýRÖgißê–´k åÿv¹¨¥u÷k—ñú‡úP^ÿK¿÷‡ójëëðüz]ÿ¼?›W_@Q@Q@Q@Q@Q@Q@Q@Q@Q@ —î­V~µf_º>µYúÐ袊Ko½qÿ]?öU©Em÷®?ë§þʵ) eªßÅVd_5 <âs¨kÐM α:üăŸ>SØW>Ú>¡$í4³Äìä³e˜äž¹ãšõ^ôéö/:ÇæIç:F™Ææi™@Ïa“UÝå„fMJKidU[hÊY‚ó¹ŽFHç¥pTÅòÍ®_-ÿàª)«Üó[mæ+Ÿ9åL¶wícßÓZš]2ᘲN¹ôašôiµ«x^XÄSI*L XÑAi¨—œc©ÇCQ~Š#¥Ô“ÈÒ(·U]ãaÃóm~ô–a;iÇþ<4^ìóØô¹y2LìüqO],޲³}OÿZ½:Îê;ë(n¢ #™¨aƒƒëUWYÃù3‹[pûîH^WïÎãß¶8¡fsÕr~?ðõHïs‹vF«ýÐ:º[ÍqžÕ–(®-.³*‚Ñ´Š¹$zQV×\·k¡“8ŒÊa[‚£Ëgʃœö#8ÆGZ:V¿'ãÿµEw8ú+¯:õ¨µ†à¤Á%µ{¡òŒ„P ž¿0¡õµHâ&ÂóΔ3,!}£näwÏ=)}~_ÉøÿÀb»œ…Ój> EÓ¥{çšChnãAˆ”ƒµ›q‡ŽOŠ»-ÙŽ=4´²)ž@§jƒ¸ìcƒžƒŽÔþ¿$®áøÿÀb»œeÕÁâ;IcË Å´MMÌ£"òHÚOnǬØê«}<[›yLLnVÈ`ŸCדÇÉoÇþ{Üâ讯YÕ%°ž’[[u‘Œ÷@ìÈÆ`ŽN}{t5Æ©¨K¦YßX½ªý©cÁ,,ä»´p=:Mc¤Ò|»ùÿÀE.§7Eu·—š…¥ýªÿ¢¼ʱ‚·˜F9lçqŽêXu˜n.žÒ(f71ïó# ˜é¸ç€Ùõüé}}Úêüö+¹ÆÑ]mî£}etLvÐÝEpÑ(%™ uèIçÚ©vílIÒ2nÚÜݲ·’óã= ~÷^ôÖ:MÛ—ñÿ€Åw9ê+|ø˜µ³F#3ÌÒ)tåŒÎ €¹$1õëZWº‹[h_o…¢˜ìVó;0HËã9ÚÎ3ÐPñÒZ8~?ðQO©ÇQ]^›­Å,×—v`yæ(fGØ“àT{œu=*-?[c+ÁwãuܰÇpU|²C6Õàç8ä~4DŸÝýEDŸÝýEUÿ¯¿üÉkúû¿Èó­|dx½OF’ÍO¸;A¨ïü;¤Åâ8b²#·Ó£¸·UÈÈD™dÂ~Uéé^“äIýßÔQäIýßÔTµ§õؤÏ.ñ5ôWvpEzºt2®–“ÅuzŒd–F+m`@9ääŽ*åܶ_Ø¿‰Ø5›iQµ¿Ú3å4Çïç±|mÆ ô_"Oîþ¢³µ- ãQpWQ¿´]»Y-¤@{åIÜMëë¿ù‰-¿®ßäy„`Me£ NæÎ=´µòþ’/3qÝ‚@|mÁ<ã¥ušÜ/Ãt‰îþÖU hÁ`óœö®ºÏL[ (m-¢Ù(9À7‘'÷QNúüÄ–Çœë:u¥Ýߌ/&„5Õœ½´Ù!âaàTöäTúaÓ‹oeÔRÜj“­¼–O2 ͘€%Ôâ»ÿ"Oîþ¢"Oîþ¢Þ§—éŸdÝ£}—Ìÿ„Ÿíký¡ÞfÜŸ7Ìÿc3ÇLWAâÁiý«¥`gEľvüù^nÏ3Û±ž3]‡‘'÷QG‘'÷Q@g§-²éšØöýø‘Œ%yRŸ61íW4™,,üe$5ž¥=̳3]GŸ´[u%dê6ÿ hȆ»›'êO­Yò$þïê)ÞÎÿÖ÷ ×õÚÇ™Ícl–Zž²‘Ôa×6¥ÈáÂùÈ»sé‚F+[Âë¤A®ê‘KºkFúv LDäzíÅvÞDŸÝýEDŸÝýE%§õéþ@õþ½Ìä,´ûk¿ë·RÛÇ-Õ±ƒìò8ÉŒ˜ûzs\ç†-̺•”’jvPëQ¼sÖæSƒ¹dbäîÜp1^¥äIýßÔQäKýßÔPSÇfm,Øé$•>!7öÿ3>vvI¸6{gíÓÑÿÌNÓþ½bÿÐhøƒÃf :[ëBþìÀCB“È›#,B’¨$à‘ÎzÖwüÄí?ëÖ/ýW:ÿx~‹ógcÿt_â’;½;ýRÖgißê–´k ãÿv¹¨¥u÷k—ñú‡úP„õ+M'I¼º½”Ç•pFc–faA<’+¢ÓüQ£ê’´V—eÝcih]>U8o¼£x#¨ï\†‰eq¢I´~c­ý´¬2fÜÇŸ@ hZèZÕ¼ë-¼K Ë¥åÈΤ+Ë(h‰ž gÛ½J{üÿ!ö:;iš•×Ù­§“Î*]RX$ˆºŽ¥w¨Ü93Ie¬%î»yc€-¼JÆ)-¥Ž@K0-–YN8+èy®kMѵ_øI4[Ù¬µKx¥RÞ߉²ì€eT9gР­VÔÇŒnoßA¾KYí¢·ÒÛ¥]Éb¤íÙ>ÕvÕѳA¼U£%Ü–Ítþds‹y‘&ÄàgÛµs‘Œžkf¸»½R“Añ ²[f{½Oí.õùÓtg9ÏtõçŠí)t_×A½ÙŸ{¯hútþEö­ck6ysÜ¢6=pNjÍ¥í®¡n·W0ÜÀÄ$2S޼Ž+?RÑ®¯®¼èu‹›EÚ—8úåÑëWtûY,¬Ö n¤ºpI2Ȉ¤þý(@Å¿šê G’ÎÔ]N1¶&”Fü •gizåέáxuk};7‚VÔN:†+÷Èqž•¥{<Öö,’]È1ˆbeVn{ {õ®_ÿۺG‚ÚÓû_í U>TR\E¶fg'‚à óœ{Qѱ«¥k—7ZµÆ•¨iëgy +8Ïç#£3»jrV¬–×2MÅ+ÀÛ%T`J63ƒèkÂð^B÷¨iwq^ÎÜ^\I óXpB;P:Ÿ‰æÖ…yíæ®ÐéÑ[GوΘÍË(˜ð9åïÒŸ‘&ÕQHaEPEPEP%û£ëUŸ­Y—î­V~´ú(¢€#Wx$ˆšEs»å# àäzR›¦ÿŸIÏâŸüU>Š®\ÿË•ÇçÿQe?vÆ|öÜÑøüÇùUÊ(œÕ´w½²û,›÷0ó ‘¹&òùCXòxgPºye»º/3F‰ÇjSiWÞ ŽyÕØ7s|öÑÌaXãW, rHïô©?³fÿ •ÏýòŸüMqË Í'%-ý UM,ÑÃ\è:¤µÒ n/þÔ'S ¸U& »ŒŒµžj²èºå¥­µÄV³6¡ºs H‘”,»_n„ãžµè_Ù³ÐJçþùOþ&ìÙ¿è%sÿ|§ÿI`Õ­À=©ÇXE©éšu­‘ѯ®‘HŒaXàgœÒœ¾»ò.¬ÚG6aòLz$œ>qŒ“Ûñ®¿û6oú \ÿß)ÿÄÑý›7ý®ï”ÿâj^^éUhâäðÍõÊÈ÷7O%ÎÔH¤[mª8Êç’Hä~"xnégEidk8ç7 ‘ƒ¼’ylýÜ’qÆ»ìÙ¿è%sÿ|§ÿGölßô¹ÿ¾Sÿ‰§õ.œß‚käpëá;Ï$Û½Ë4)k-¬#ìÄ2+ã–;¾l`vgSðÓê k'•–Ý qkç#Œü¤Žxƒ]ölßô¹ÿ¾Sÿ‰£û6oú \ÿß)ÿÄÑõ'{ó~Aí|Ž2ëÃ7n޶’ a5°¶™E®P¨Î €FÓóQNŸJÔÚþÊ?&Ymá”J$( •Û×$’sœb»ìÙ¿è%sÿ|§ÿGölßô¹ÿ¾Sÿ‰¥õ.òü{_#€µð¶¡&‘ Z—˜þU«E¼Qd,¸9lǰè)öZgˆšyî¦â•Ä)h•[b¹.H ãHëø ï?³fÿ •ÏýòŸüMÙ³ÐJçþùOþ&©á/{¿À^Ðç5 6þò&d·Gd+ g ÿtç }ðiŸØn³iæ8äHl•‚E哜®Ðsì3ù×Mý›7ý®ï”ÿâhþÍ›þ‚W?÷Êñ5šÀ$¬¤W¶¿C“:.¤5™/’XʰT %«3"ª­¼“Îqé×[x~æÛQ7ÂIZiK}£1H¿ÂÏxñõ®³û6oú \ÿß)ÿÄÑý›7ý®ï”ÿâj¾£Ó›ðBöÞG'.xl/­á–Hžêc'™ä“´epìÎGZ‘4ÍZ=<[Ç,1:â²`ª˜è¹çß8ö®£û6oú \ÿß)ÿÄÑý›7ý®ï”ÿâi}AZÜß‚¶Öö8ÿøF®-ãµû’Ã5ººy’ÂdÞå‰äg54žè‘i±yÈ! ²Fw*AŽã#‘]Wölßô¹ÿ¾Sÿ‰£û6oú \ÿß)ÿÄÓú÷Ÿà/käs:~qhn$œ¦¸—Ìr°Pp “Žž¦ªGá»Áp<ÙÙíRåîR·*ÛÉ$e²r=€®Çû6oú \ÿß)ÿÄÑý›7ý®ï”ÿâhú^oÈ=·K}—‡otùmž ›ÀJ­nO˜’çå<ŸZ]SÃ×—ÒÎðLÐ}¢ßìó·/•çr0~cë]ölßô¹ÿ¾Sÿ‰£û6oú \ÿß)ÿÄÑõ-y¹µôAíºXä¤ðìÒ%ÒîyóÅ7ú£òìÙÇ^s³õªóxZêâò[‰$T.TâR›¶È® üÇqùqž:ší³fÿ •ÏýòŸüMÙ³ÐJçþùOþ&…‚¶Òü¿®ítµŽ W¼1­´É§As%À2F¹ËàÄ‘–<Z¶|*ïgkk+JÑÃi%«b" Û϶6û×eý›7ý®ï”ÿâhþÍ›þ‚W?÷Êñ4Þÿkúþ˜{]ocŠ‡Â’Ge,\ÈY&µ±Pä;¹úU¿ÅqŠ®ãºuyÅ¿ÌË@yL|¤œqï]Wölßô¹ÿ¾Sÿ‰¬ >6‡ÇZ„m#HE¸ùÛЪ6œüÊŒñ÷G&œºÖ”×ÿ`]NÌÞgg¯™ŸM¹Íq–Ú]êÚXȶÁ¾ q[ygtyepg'·Qq¤\6…ª8Ó¥7c^ÂD'~ß9>uã8ÛžGlÓJÿ×§ùþ-?¯_ò:½WÄZ~‹¨YZßͺ݉ Í,Šˆ»à’zœñW§§˜$œ_[cqÉæ®ÕcŒ)9àò8÷ƒâA%·ˆtMM¬®n­`Ç(·€ÌÊ]WiÚ2qòžk\ÐoµMfëM··ž=7UT½y¶•HˆWiô%„GÆ•ÿ¯ëÈê]BÊÜÌ&¼·ŒÀ¡å*-Np['€py>”ëKË[ûqqgs Ä-ÒH\:ŸÄq^zš~§{c½¨éW $šŒs]Xùy“É kò½†Ëã¾k¢ðÄ6¯­j1ÙMecvñy0͉™•pï°ò¹àsÉÅ;_p8µËe¶º¸Ô&´³†—€H×hTã¦OIþéäSâ×ôiå†(µ{ $ŸýR%Ê'û£<þÈf]ºÆ¯c9_øIÚr GW??O»ïÒ£¿Ðä]/ÄâßKq+j‘Mm²¸åÉÈÎîG½%­¿®ßçø èôþ·ÿ#¸—VÓ`¾Ku Hï-Þe6zas“I{«éšk¢_j6–®ÿqgP·Ó'šàü\š½õÞ¡lÐ_€³Bl£¶Óđʠ©,Òí%H;»®1ß4ï)Ó¿á.’ûL¹¯m³kw¹•[v–s “Î:æ•ýÛ-lww®i40Üê°Ë7ú¤’eV“ýÐO?…,š® òXËj—÷-Úe7Ñs“^ss£L÷×é¨k‹MBocb— È# T±Fd äõœõ­‡†}/Å)ý•õÃÜOÞ-Í‘1 ʳà@ŒœžÂªÚØ”î®ok!‡FÕôËk©-ය™'ž@6G'ŽsZêš|6+}-ý¬vmŒ\4Ê#9éógÏø|¯hWÒé÷7v¶þx“ȶiÊPíPOãYE«éú#=µ•Í¥¥æ«$Æ(íDÓ[[°àˆ°@%†qƒÝ)tþ»”vÏ«é±X-üš¢Y¿Ý¸i”F~œR¦«§=¿KûV³&àL¦1ÿÎ+Ó´»³¥XÆÖ—’Gÿ œyö¦6òˆ?;&Ñ´dúÍK¤\ŪßÌš\ÓiÐjðÝ=´qq2y3"ô|9ÜzÑý~_çø úüÿËñ:]3ÅzŽ£¨Ä·V†ÖÞX¢‚t˜™s€s‚sÀµÞþÊ%¸i.àAmƒ9iò²27sòñÏ5à 2mVÛÅ3ÙX\Zù²Áqd&¶hY¤‰VýåÇãTSIÕï/#’[”‹ÄR¬·ÊêÑ–)7*·÷I õ¦µvþ¿­Ã¥Îî rÛì·W7ÓZZAÃCæ5Ú2ž“ýÓÈ«jÚl6 .¡h–o· 2ˆÛ=0ÙÅqO§mÓï$º‡R‚hõ¹î-d·²iÈ$¦Ó¹'ŸÈŠP‡Y½ƒÃÚ¥í­Ý°fYÒÆÑdxÙˆþK«c € ]ßZ]>ïÈ:ýÿ™èPÍÄ)4¤±8ʺ0eaêëO¬_ ØC§èQÅ]˜ÞG” ¸„N 1$lmÉ­mS`Œ_ÿȱyÿÿÐÖ¸ßù‰Ú׬_ú®ËÅ¿ò,^À?ô5®7þbvŸõëþ€+™¼?Eù³­ÿº/ñ?ÉÞþ©kF³´ïõKZ5Ðr »\¿ˆ?Ô?Òº‡ûµËøƒýCý(/Ç¥ßûÃùµuõÈx þ=.ÿÞÍ«¯ Š( Š( Š( Š( Š( Š( Š( Š( Š( K÷GÖ«?Z³/ÝZ¬ýhôQEQEQEWµÿÍÏýpù½hÖu¯ü†në„ÍëF€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ å-¿ä j_õî¿Ê:êë”¶ÿ’©׺ÿ(ëž¾ðõý×…Ú§ø_æËÈ-ï,䳺YLR}ጇï)tìiö‚ÖÆÒ+[X|¨"P‘¢ŽÔÙx?…`[xŽÒ-ÒûP»„µÁ*†Ú)˜A<*`¹àzWAÈtÿiOF£í)èÕÎM®Á5¶ŸsawnÐÝ],;¤G;³œ¨î·ÅÀç4ÂS£hvDÂo#˜\'™ýÝûvçÛ4Ñý¥=´§£W5«ø‚=TÓífŠFŠée%ãäeÚ0¨ 9ÍNþ Ò㵸¹’ëdVÒ¬3G8À Œÿþt½ö”ôj>ÒžXWzö™b÷ st#kp†AµŽ7çh“ƒÀÉ©´íVËV…å²›ÌTmŽ ”doFVƒõ¯ö”ôj>Òž\ÂxŠÚÚÖæãPº‹b^½ªyÈÇ#¢•Á%½p1éIŒtåHÒõ²î#ËA"…rp‰\)Ïcƒ@=£í)èÕ‘¡èÚÙ¹¼¶šW8܆ymŽ™Œ6ӸІó^Ó¬/RÒêgŠG*¡šÙ–àøÚ3îj=GĺN“;AytVEMî©ɱ}[h;G×yÐ ˜ÀÀVü©~Òž\õ߉´{–+‹À¬U\‘0En…È ?íb¥:îý§ýœ&w¹)ÂìªHÈ ÀmSŽy4¹ö”ôj>Òž\íýýÄ$Ò,£` ¹YÌ£ªç·Zu¿‰4›«ñeØy‰e_ݰW+÷‚¹X@MtiOF£í)èÕç–þ6»}&ïV’(šÈÙn¶³+d ü®ps…ÖC©Úͧ½ðiÝ34мdÔí`éGK‡[ÿiOF£í)èÕËŸ[]Gg-…ˆæºHI¸¶•7†á2£“ŽJ–çÅ=¥ëZKv|åuöÄì¨Ç¢³TGÐGö”ôj>Òž\n•âËi/¯,µ .u¿’ÞÂÁ »ñ·>ÙÍ\ÑüE©ywhÑKð\KÄNPªg~ݹ>™¡jMΛí)èÔ}¥=ªQ@|U:¿†îÔ“³¯ûë\—üÄí?ëÖ/ýWKâoù®¿àú®kþbvŸõëþ€+¼?Eù³­ÿº/ñ?ÉÞþ©kF³´ïõKZ5Ðr »\¿ˆ?Ô?Òº‡ûµËøƒýCý(/Ç¥ßûÃùµuõÈx þ=.ÿÞÍ«¯ Š( Š( Š( Š( Š( Š( Š( Š( Š( K÷GÖ«?Z³/ÝZ¬ýhwûQ¿Ú™E!ßíFÿjeýþÔoö¦Q@ x·KæÇ$É¥“CE&Ëùÿ¹ü£ÿâ*J(=—óÿsùGÿÄQ²ãþî(ÿøŠ’ŠeÇüÿÜþQÿñl¸ÿŸûŸÊ?þ"¤¢€#Ùqÿ?÷?”üE.?çþçòÿˆ©( ö\ÏýÏåÿFËùÿ¹ü£ÿâ*J(=—óÿsùGÿÄQ²ãþî(ÿøŠ’ŠeÇüÿÜþQÿñl¸ÿŸûŸÊ?þ"¤¢€#Ùqÿ?÷?”üE.?çþçòÿˆ©( ö\ÏýÏåÿFËùÿ¹ü£ÿâ*J(=—óÿsùGÿÄQ²ãþî(ÿøŠ’ŠeÇüÿÜþQÿñl¸ÿŸûŸÊ?þ"¤¢€#Ùqÿ?÷?”üE.?çþçòÿˆ©( ö\ÏýÏåÿFËùÿ¹ü£ÿâ*J(=—óÿsùGÿÄQ²ãþî(ÿøŠ’ŠeÇüÿÜþQÿñl¸ÿŸûŸÊ?þ"¤¢€#Ùqÿ?÷?”üE>%”1ßs4£uÂcëŠZru ®]cFw`ª’ÇW¡Ùß&áÝ^ÎÓíŸg†hÞÜ:£‘²K3Çr85è:}¾£nÐÝEз ¨[¿ ñR%ŠGÇTEUUÀÐSÃE¡jf+iä·Tš]h_Ë È…0F3О„ã¹§M¡ê/¡jVëo™¦Õ…ÌK½yÍFÝœñÀ'k¹û/û¥eÿoô¦¿¯Oò®ÿÖÿærúåµòëV§efo¨•$…$Tl8 ±‚={ÖV­á‹Í[Z‘Z š]ôK5Ð.2“"2¨Ç¼§#û•Þý—ý¿Ò²ÿ·úR·õý}àyí¶ƒ­ }NêÚ95t¿[©m¼Á‡UO,(n™ÇÌ3ÜÖæ‡g{ý©©ê·¶ßdkÃ¥¹p쪀ÌW#'=‰à é¾ËþßéGÙÛý)ßúþ½Ç º¢<¼Ûôךðüëþ¤çæëïÓ¯µ-þ‡¨M¦øŠí²÷wñÍn7¨Ü E“׎UºúWsö_öÿJ>ËþßéIiýz=]ÿ®¿æy߈ô}sQ»¿‹ì÷·1K$FÑ¢¼XáÒCÆXdä1Ψ¨üHn´ˆ|PE´wjî­Â+D|½›YX‚zdc9ÍzGÙÛý*”ÞÓn/òk+I.—f{u.1Ó y¥m,4õ¹ÂIá˵¼ºy´ëÛëKø¢ÊÛj˜Œ#,‰½C:óéZSiº…·ˆ"“H±ºµC,bæf¹F‚hÀå -¿€:rk¶û/û¥eÿoôª¾·%++Ö¯aw>½£ÞA™ >tsà ç®1ÛšÂðÿ†ç±–ÆÖÿM½sdÄÇwý¢Z €@eˆ¾A ãxɯBû/û¥eÿoô¤7©Ã®…¨Ÿ‡I¥ù*·Ñ€â&q‚V]øÈã?Zµy¥Ï«é×·’[_ÚßIo$Ih÷¹Œ’…FUX§9þµ×}—ý¿Ò²ÿ·úPõ¸Ó³¹ÉÝéw’éž…!Ì–—<ãpùP†=yçÒ¹ÍSízm…Î’Ö©,w²KÔs§;§VÚS;·œ‚½?ì¿íþ•I|=¦¥ñ¾[+E»'&qn¢BÞëNþõüïù‘6÷mýuÿ3“›CÔ_BÔ­Öß3M« ˜—zóš»9ã€N:Õý CM¿¿³šÁ´×rÜ¥ÚÊ›pç Îì玘®«ì¿íþ”}—ý¿Ò’Óúôÿ!½¯_ó+QV~ËþßéGÙÛý(Äßò/]À?ô1\×üÄí?ëÖ/ýWWâ›}ž»mÙÆÎßí­rŸó´ÿ¯X¿ô\ëýáú/ÍoýщþHîôïõKZ5§ªZÑ®ƒkýÚåüAþ¡þ•Ô?Ý®_Äêé@x þ=.ÿÞÍ«¯®CÀ_ñéwþðþm]}QEQEQEQEQEQEQEQEQE2_º>µYúÕ™~èúÕgë@ ¢Š) (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š)ÉÖ›NN´b?õf¹»Å…¦JÿmÔ®ïwùQÇ,²m'$¨mªçÓÖ·.om´ë nï'H-ãåäs€;W èÚ—ö‡µ;ÞÚÁ*˜.÷"Éž §…#ƒOúüÄlKâ8.í´Û‹Yîm¼ÝEmeˆÀ¥Ãó˜Ü1ùzu=1œÒŸÙ­ëÂÖ7ëoߨÚðƾH—;pHmÀdœcš©…¯„6²K=»]¶®5+­»‚Úœdàc®3ÏJt¾½“DÔ¬„¶þeΩöÔ%›<Õ|:áOøÓ^ÖßðB^_Öÿð šæ»w¥ëºM¥½”·qÝ$ÆH  æ¡q‚Ì£œóE׌4ëû«¨î"7 o22®íÏ´‚0Ø# ^ÆŸ®išŒú¦›©éfÕ®,üÕ1\³"º¸üÊ `v¬ýGÂjž wÂ,g·òÝrK̨Ȭ8é‡=yùV—õý|€Ð½ñ]…ÕͳGs,Ð4Q„‰d¨œòØ9À½[Òu¨5´"CqmslÁ&·¸P²FHÈÎ ЂEs–žÕ-ô‹iòÚ]n ÑxemÞT„/–ñ6cœp}kkDÒ¯m¯õ SR{¶^˜ÔÇnIŽ4@B€HžI'ŸõùÁN?Çgis4ßm¾sª=”QG jû» ù€ `üÄ‚{ÓcñÕ›2iš¤E8·¸–XT-¼„€á‰î9ŽG5ø^ôlýí¿Ë®6¢~fÿVsÇO½ÏNžô·Þ½¹Óõût–Ü6£{Ä$±Âªˆó»ŽÈzgµ%ÒÿÖßð~á½ôþ·ÿ€jjž!H¸Uº°¾û)dV¼DC8ù·u#½ê¾«âëM.âê!e}yö8Ä—Om•HÏÌY‡8ç'‡¯ø+PÕ5+ù–=6ánd⹺‘Ķ¡våP#)=GÞ9ª>,¸}.oÙÙÞéòÉªÄ YÊÎ.CÏݪ©ß¦ .žc[MçŒ,m\Zß\EoÉs4Kua‘¿$œ *Ä>#†ëV’ÂÒÊòàDÊ’ÜÆ©åFYC ’ÀžèZç$ðL£Q’ñtÍP[¨â2. ¤<.¨í![ ã8ãšÑ½ðíüþ!¶¼´ƒO²Ž c&ê \M$J9(V§$àUu!6ÕËzæ»w¥ëºM¥½”·qÝ$ÆH  æ¡q‚Ì£œóKâÛK‰á6Wóý™K·‚ ËlÏÏórqοחü×ãÿд×ï%ñN©¦5„ÒÛÛ¼j“Äla£ wå<žÀÕ-Æ/‡m¯µ=:íe˜„ˆÄˆEÌ„5OAüXéWáÒµK^ÝÚýŽK ó›ÍvYc(»NÐ R+&ßÃí¾af²éÙÒgó¬¥ÞçÍûÃl‹·åùXò æ’ÿ/ø kŸئ—}y5µä2X²¤ö’FÊ[xÎ9 âªÉã›xZåeÑu„{E\©… …!Îp~îOŠ‚ëÂÚ¦¡a¬Ku-¢ê:‹ÁòFÍåD‘0 n#$Ÿ›œ¢¯ÞèW7úìé$!5 =-bœ‡L–ã§Î:g½'t¯ýl5b_J“øJæXØ4n±²°î ©¹ù‰Z׬_ú®£[¶{?}–B¥á†دBC(8®_þbVŸõëþ€+e‰víú³¥_êjÿÌÿ$wzwú¥­ÎÓ¿Õ-hÖç(×ûµËøƒýCý+¨»\¿ˆ?Ô?Ò€"ðüz]ÿ¼?›W_\‡€¿ãÒïýáüÚºú(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šd¿t}j³õ«2ýÑõªÏÖ€ERQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQES“­6œhÆf€¯4ŸiE¨æëøW!¦ø†UÑ´˜l­&¼½¼Y#¸ºÉUFù™ä+îã½1ŸÚ_ÑhûKú-rëâö =ž›{…ÕÒxR}»H:ãg#¥+x²å'šGÒ‡öt7¿b{s— ¸.í›zdŽô%ëÓüÁéýzÿ‘×}¥ý´¿¢Ö&»«¾j“"Ù̓ö»Án½;OµT¸ÕSWðÞ§´k5Œ®yS´ƒÈ÷i7dßa¥v—s¦ûKú-iE®*ÛW{£º]KähirQ%ʶ={½š]K_ÔeðtúœÛA!x|–·º+uÚ1× SVvþ·±)Ý]®vŸiE£í/èµ’u lô‰¯õH#¶0#I"C)”<«“øV}ˆ®¥½´·Ô4³d/QžÕÄâMØаmlsÜuæÎ›í/è´}¥ý¸ÏFòØêwÆWû@b®×®ê~sÀˆ¨TÆ;Ul¯ *w½ÁóÒþ‹\Œ07÷vPiöq¿Ú­’ç77"µ‰A´ï#=;V†½uögÒ36þ8ÿu6Ρ¾÷rñӌӶ¿‡è'ñDìþ»RÏý k•ÿ˜•§ý{Eÿ  ±ªë—Ú…–¡ih¶1\›f¹ûOÌìÛÐ^õ_þbVŸõíþ€+™ä¿S­ÿº¯ñ?ÉÞþ©kF³´ïõKZ5Ðr »\¿ˆ?Ô?Òº‡ûµËøƒýCý(/Ç¥ßûÃùµuõÈx þ=.ÿÞÍ«¯ Š( Š( Š( Š( Š( Š( Š( Š( Š( K÷GÖ«?Z–ì$€29.T~b«!5 ‚=C–}M:Š(¤0¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(§'Zm5ȱ$ê\¨ëê(-Fålíd¸hæ"ýÈc29ç(ä×)¤øróûE™.Ÿ©ÚFà‹Ì\ä£.G·q‚+·¶Ž9! pÞáËÎ¥ò#þïêiˆäcð°K{`×­%Âjþyš1ûçÁÊ1€:ãédðÇ™¥ÞÙ}³i¿ûfÿ+îþñ_n3ÏÝÆ}úW[äGýßÔÑäGýßÔп¯Oò@õßúßüÙÌkÚ†£i¨ZÝÇͲ^7üÝyûý8éY×~š^mu¢g°KŒÖžnUA_˜<žçµvþDÝýMDÝýM+_ù…ÿ¯»ü‘çú­œÚ=Í´š|×ÂäY-«˜´æ¹IU~îpFÆÎy'Ó´¯ ß[iÚdðÞ%ž¡’[Ü$° ‘€9†$ò wÞDÝýMDÝýM?ëóÿ1[úþ½CYðåÞµo¬Ú…ºÛ]ÿè@Èudmß!?CŠÑÔô¿í#`|ï/ì—Iq÷woÚÇ^:õ­ï"?îþ¦"?îþ¦œ^£¥fxwTw™çÝ›Ÿ»»œ|½yÇ­eÿÌJÓþ½¢ÿÐuþ+‰ÃWd.Éßýµ®CþbVŸõíþ€µÎ¿ŽýÖÿÝWøŸäŽïNÿTµ£YÚwú¥­è9¿Ý®_Äêé]CýÚåüAþ¡þ”€¿ãÒïýáüÚºúä<ÿ—ïæÕ×ÐEPEPEPEPEPEPEPEPEP%û£ëUŸïU™~èúÕgë@ ¢Š) (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š)É÷©´äë@ý[W£kW‡EÐtí"ÖÊÞæò9¥&@í(ƒ…ݸ’X­u÷3Moa,¶ö¯u2ýØQ•Kþ,@‰¬ 3ÂXðæ‘ow<öš’±Yí$£/’Ë’#œƒÒŸõùˆ§6·-ôZr_YÛËmqlåÁbÀ$:rB89ÆOZWñ>µ]_´v ¦[jax‚8›nð›ÃnÆrÀã³…l!µ´d¸&Þð^™YÁyeç%Éç=±Û¥9ü1e&Ÿwde¸òîo>Øä2ä>ðøtÊzkÏúÛþKËúßþ‰u™4¸íÒÚòÖ™KŽkYnÀá#;½2z ¨ú³kŸ .µ'ŒFóéóAœÆyÆEjjš ZݽâÞ]Ù]À¬‰5«(%[RXÀíÚg¡ZYx|hªe’×Êh˜ÈÃsÎr@¦¥«Å®£NÒLæ­/¥´»­4øînâðìrÇÛä ðqŒûgÞ ÔµËÝCÀ÷× ©Y½ÒMâÖ)!hI‘2²+1lþYÑÛxbÞЫÅ}}ç-±YK®å@ă÷~ðéŸn•ð}”–º„Www·rߪ,×:‰NSnÕ`óÒ®NîÿÖí’•’þº"ä÷×Z?‡î¯õG†â[hžVû4f5`@™Žֵ̲˜5-6ßWŠÄÇ©Ææj]W~ÖÜNî3ÈÇ#¥lÛéHšd–w7ñÊdk¢¥™HÁhöª:w…­tûÈnZòúí­ã1[-Ô¡„ x!p8däã½O_ëúì>†7ÃÝ6Q§bàY¼·Šå¦HXNÇyÎ÷,w:)‘k7vv— ¦ÛÙC=ο%žéÙ9Î\Ù'ŽÄjë42KƒO·i(A d ±É'œëTG…ì†ßÞÜ|º‰ÔGÌ¿ëxé÷yé×Þž—òÿ‚¿@{>ÿð€Þ'ñ¬W×7Qéo›x–·)r1O l/89èy«#ñ|Ú6¢ËoqiCØuªú³«i~ƒR¹–ÞóÌTŽÖ2Œ®dy61ËŒ‘Ð é ðÅ•½Ž—f²ÜôÙüøIeË6a¸ä|ç¦;Tx>Æ>çNk«Ùl&%´’ °|ÛB0 ôÉ8£¿õ uþ¿®Â隦¨šóhúºÚ<Ímö˜f´VU*k)V$ä9Ï9íY¾#ñ|Ú6¢Ëoqi­{¤XÁ5œi‡˜$ÓÉÊ–é‚w²¦ uÏ5Dß‹oÃ21±¼yâ¸auí£ >çÌF|æ·u /áHãÔ.ì™[;튵YúÕ™~èúÕgë@ ¢Š) (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š)ÉÖ›NN´’;)áˆìj.ÒêšÞáe‰¾ëÆû”ý©&ëøW ¥jz柠iö÷If÷‘O,·À™Qq´ŸNÔÄvòÞ$15ÂÇæ8DÞøÜÇ ê}ªO1ÿ¾ßqW½–+8.dŠi­õÁfóù+‰Tw`‚¹‘ŽAÅ2MWY/uQ©–‚ÛUû/ØÌ)±£ó>ö7gæÎsÚšWþ½?Ì›ÿ[ÿ‘Ýyýöüèóûíù×=â;ù¡’ÚÊÊ{ô½”4Š–PÅ#\O™ò€ óF“®4þ ‹XÔdò˜@Ï3ªt+NÞyã8¥}¶:1ÿ¾ßcÿ}¿:àí5í^5Xg{Æé­yn÷ÐDŽdt‚½:ŒÒ¶·«è°Áqs|u¹Òå» $(†9U° •;»óÇZšÿ]ɇõù™ÚÉWPÛ=ÆÙ¦ cBNX/_Ë"·ÇöÓgöô›åäçnqŸÎ¸ëxo×Å>žûT7¦{yÜ%P•Rví#žùéSê·—^\w¨¥Õ5mZò³ÔOVÒVûb—'¡Ü ÇÓ¯¥ÿ­›ýß×Ýþgkæ?÷Ûó£Ìï·ç\^‰ªêÆëC’îÿí0êÖ+DТ\*°ÚTdŽHç5«k1éú>­q©ý¦+û¥·’ÕáE Š‚…@9Ï9ã5VÖß×a_K›ÚíüW¾¿ò'óRŸáÕ×#ð®þbVõíþ€µVkæµÑïíÕ7 ½nâ&oî—þj*×üÄlÿëÚ/ýk™;×ÿ·Wù[ ¿ÄÿC»Ó¿Õ-hÖvþ©kFºA¯÷k—ñú‡úWPÿv¹¨¥Eà/øô»ÿx6®¾¹Ç¥ßûÃùµuôQEQEQEQEQEQEQEQEQEÉ~èúÕgëVeû£ëUŸ­6Š(¤0¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(§'Zm9:ÐmDÝ i>ĽÎß‘fr©œ÷ úV-—…íÃÖn ¢wµÆÍW9ÉVRu=úWWO½Gc}o¨ÙÇwjåà“%X©\àã¡ö¦#= LŠÖÖÚ;UXmeÄ¡ˆÃŒüÄç$òzç4­¡éÏk5³[æçûL‹½¾i7Ýœú€qÒ¶n¯­ìŒâB†yD1áIËœàp8èyl¯!$û±&·( ^ËÃFyÕ­³¤‘ƒ<Œ±†ëµK_ÀTÚŽ‡§j²Ç-Ü ÒÆI#•ãpQ¹8ö®ŠŠåï<1£ß̲ÜÙïp‚2DŽ¡ÔtÃ÷³W›hoïÉsAörÁˆýÞs·ÇZÑ•¹ÕÛL¾Ò° ‚1ÆÂÅzúäUº:ÏÅ£X@,|¨6ý†3·ÎÇby๬ø>ÏH¶´’æ’þ ÇÌ»¢±'•V8¨»z(¸t±Ækº]•¦¨Ï$žDšC’A}Ànð œc5ÿ1?úö‹ÿ@Zì|[ÿ"ÅçüÿCZã¿æ#gÿ^Ñè \ëøïÑ~lëî«üOòGu§ªZѬí;ýRÖtƒ_î×/âõô®¡þírþ ÿPÿJ‹À_ñéwþðþm]}rÿK¿÷‡ójë袊(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(’ýÑõªÏÖ¬Ë÷GÖ«?ZmQHaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPNN´Úru  ÿ«5çº}õÕþŸá‹;íRêÞÚî;‡šán I+£|©æg#‚O'mw7K<–2ÇiuµÃ}ÉdÌ ÿÈÏçU,t-6×ÃöÚ=ÂC{o €EÂ+‡=I ñÔšb9kmRõ­,c[ùç‚/ H®|úx@<3¾3‘žûje¼ŠÛQÖ×S¿ûE¶·öuˆÜ±„Åæªl1“·cÛ5Þ‹K ‹{a Ø»c#¡QØjCg§´RDm­LrIæº× ùÎâ;œ€s×"šÓúôÿ'÷ƒ×úõÿ?ÀæüQoosâßGuq5¼E.‡™ÃBÙÚ„ ÊAìxÍcë·º­µæ¥ é÷·êêHï,d2³BΠç8Ý?í§½w—¶z~¥†úÚÖê wž5uל-ì–hæÛ‰bCnw"| ö=©_¯çøçï®\êØÔcÔn-tBþ1*HWËc%ŠŸá-!Û»¯ÑxbyWÖ´èïf½±´x¼™¦”ÊÊ̹dÞylpyäf·–œ,Mˆµµ„`ò×Ë99?/N¼Ó­-ì¬-Žœ6öð¯HáUE€âŸõù_1%­Ô°a ã/â§ŽPŽFå9;[¿§Í5‡ŠÍ¾§ssq-ì³}’h¯KÀTdìhrQŒàò:×RltÓ3Lm- ­ ”¿–»‹€Ùõði–ú^“iv÷vÖ6PÜÉóG +¶zå€É¥ÒßÖÉ~ƒz»ÿ[·úœG‡ìþÅý—ªI ü¨¬·Îq'ÌŠ2DdŒŒÆk¦ð½ôW:EÂ@—bkYž)cº¹3°p$$îŒsW[DÐÜÎ[KÓ˜ÜÌMº7œüÜsÏ<Õ«[{+ u·³†ÞÞé*Gà8¡ë08 ϯjSéÚ›^ÇûÉíˆú“>ეl œt=¹ÎhÑå¾¶±ð欺•üóßÝ<OrÒF଄aIÂPtÅw)¦i1ß›ô±²[ÆÎn$õù±š‘lôôŠ’ÚÕc·ÂÛžTv<žG© ;žuk‹ë j³ê·W7óêiöˆà”°ùQEÛŒtÍt>(··¹ño‡£º¸šÞ"—CÌŠá¡líBå ö¸4ï§õÚÁÖç©\ù÷ž {vêÄé‘!²HîJ¾Xa#ùi–Èç=1Zšö¯©Ûü;MI‘}$0[îù[ʇ=ÜyÁÇ^Õ»>™¤ÜÉ—6R¼ZH‘Œ`tÚHãð«nb‘£# lE.–þ¿§Ô:ÿ_Ö‡]méþÕåþÐ)lé“åêu,ldˆªOOn*MbêûÃÓjöš•ë[ýšÚo6âc3Û”¤Œ¬Ù8 3ÏNµÚC£h¶ÐKnŸ2d EW äÁÁ«-›Ló4P]<·r£s'?)=Ç'z¡Éèv–ö~>¸Kkë‹ÈÛK¼ÉîLçýctbOñ]¥P²Ó41¬,l­þù‚$Œ·×š»æ'÷×ó§Ñ!uoúØuß1?¾¿b}:C1ü[ÿ"ÅçüÿCZã¿æ#gÿ^Ñè ]‹O†o`OÉßýµ®Cþb6õíþ€µÎ¿Þ¢üÙÖÿÝøŸäŽëNÿTµ£YÚwú¥­è9¿Ý®_Äêé]CýÚåüAþ¡þ”€¿ãÒïýáüÚºúä<ÿ—ïæÕ×ÐEPEPEPEPEPEPEPEPEP%û£ëUŸ­Y—î­V~´Ú(¢ÂŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( œi´äë@ —ï~VÊçí–‘Ü&ƒ~w:íuçг7¥y•§Ù±<5ý±ÿ ]“ùÛóåy»¾O3Û±ž3LG¡ÜÝcû<óy²ˆÿt¹ÙŸânx^:ÕŠóËmß`Ó<¿3ìÛãì>fsäàãçnwcÛÖ6Ée©ë)]Fsj\Ž/œ‹·>˜$bšWþ½?̟ׯùü×öð_ÛY;=ÈvqÔ.3Ïâ*Ír.Mî‡>³-§(®1«•]¹Ï¡Åcë6“˨^è:vR-SËÔ ‘Ê¡Ÿüy"ÿ¾©_úþ¼µÑè¯4iέgý¿w©¦ÞßEÒàŒ[Æ„|ØçošN}«¢ð—ÙþÝ«eÈ|fÛŸ/~ßÞlÏðç8ÎiÛúû€Ò´×EØ¥Ãl¾k3倨ÛümÓ Zäàf¼ñDënN&Äå™ Tý©ô—±´ñ”@lõ)îe˜µÌyûE·RVN£oðƒÇn)t_×DÿPz7ýuävz}ý¾§cí«‚Q”$c#8éVkÍ4«}¼-™º´Óµ ·Îé†dû²ô%IàóÐ×CácO‹HEû=µœoxma6ŠÍ îFw'=xàóOw luTWãÒÆ»¡.µäý€‰÷‰þæv®3Y?kH|2bx “HŸSxífÔž(`ÆUˆà•Ü\‘ÔsKúül3¿¹º6Æöyæóeþés³?ÄÜð¼u«æºSçGÓfŠXcñÈZù{>b6dŸ—“ŽMiiþ²Ö,¼Fïo½šîæ¸#.£°Ï 8£¥ÿ®Ÿæ.¿×ŸùÅW†èËuqÙçO$¨óp’dgå9ç y›jº”àëk¡ï þÇHñ÷fÚ0ß÷ðÈ? Ñ}:ÒÞ/iò_Gem²ŒK ù0¨¸Vä|§<Ž´_×ÊÏæ úþ¾ÿ¸ô:+Ínn~Óá(ÒÖÒÏO‹QòîžÝKi#ÇßÀÚLeŠçžÝÅt¾ ·† ¦µÔm.ídŸtkgH¡8U›Žýq’hïývÿ1-Q@Š(  ŸȽuÿÿÐÅsó³ÿ¯h¿ô®“Äßò/]À?ô1\ßüÄlÿëÚ/ýk¼?Eù³­ÿº/ñ?ÉÖþ©kF³´ïõKZ5Ðr »\¿ˆ?Ô?Òº‡ûµËøƒýCý(/Ç¥ßûÃùµuõÈx þ=.ÿÞÍ«¯ Š( Š( Š( Š( Š( Š( Š( Š( Š( K÷GÖ«?Z³/ÝZ¬ýh´QE!…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@9:ÓiÉÖ€!¾²–úÖHcžkrãl%C¯Óp#ô¨ôí%4½> hȆ»›'êO­iG­gÚëvÇE‹RÔ&´²ó–7Hу’8“€zS?‘'÷QG‘'÷QLºÕ8¬e¶6÷]N± >Ъ6œüÊŒñ÷G&œºÖ”×ÿ`]NÌÞgg¯™ŸM¹Í/‘'÷QG‘'÷QUµ_iú.¡ek4vëv$+4²*"ì‚IêsÅ\žž`’q}laÄo'š»UŽ0¤çƒÈãÜP<‰?»úŠ<‰?»úŠ’]BÊÜÌ&¼·ŒÀ¡å*-Np['€py>”ëKË[ûqqgs Ä-ÒH\:ŸÄq@ùwõywõšþËÛI«Ø%Äyß\ eÇ\ŒäT±jÚlö/}¡k%šguÂL¦5Ç\¶p(<‰?»úŠ‚ãKK©måšïo'™-÷[gç‚zÔwþ&Ó,ô)uˆ®b»´•YíåV\– ×8ã<ÔÍâ-íµ=mФÆå1@làš‚ãF[NÎýüÁ- q 6àŸÊ®ywõË]Mn.ï£>BÁl–U¸VÜwe”}ÏǨæ¡}~ÎU¶}:æÊõ%¹[wd¼@ ž:în>èäÑäeŸ"Oîþ¢"Oîþ¢œÚ¦ž—ë`÷ö«xÃ+nfQ!˜К®-ûXGj÷‹Ë[¬ÊdUÎh¾DŸÝýEDŸÝýEW¬‡Åo¤ùiå-¹ßÎì—+§!×´³ky<Ö÷"ÍçX%WdràñÞ‹ép¶¶$ò$þïê(ò$þïê+³ñí¬–^Þ (-縎hoÒ_+r–̧!tÉ®›ûBËì"ûí–ÿc+¸\yƒËÇ®ìã5`#ò$þïê(ò$þïê*õËk«Ë(ìf´»·¹ó3-ÿ‘bóþÿ¡­qßó³ÿ¯h¿ô®uþðýæÎ·þè¿Äÿ$wZwú¥­ÎÓ¿Õ-h×AÈ5þírþ ÿPÿJêî×/âõô ¼ÿ—ïæÕ××!à/øô»ÿx6®¾€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€/ÝZ¬ýjÌ¿t}j³õ ÑE†QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEäëM§'Z°ŸêÚ¼çG…âÒ<+©Íc=í…´w $pÄehÝ›å}ƒ“ÀaÀã5ÝÞAoyg%ÒÊb“ïäd8ÿyH#§cO´¶6‘ZÚÃåA„p v¦#жÒïVÒÆE°ž%ñ»ŠÛË; „ƒË(ûƒ98íº‹"á´-QÆ)»ðž!;öùÉó¯ÆÜò;f»¿´§£Qö”ôjiÛúôÿ zÿ^¿æs¾$[x‡DÔÚÊæêÖŸ4ÓIsö»Ç'rJ@Þ»sÁë]ÚSѨûJz5 K_ÖÀõ¹Éø‚ÃP¸ñ úÚC07š+ÛC:©Ø²†' ßÃF3X¶:A—M¹pšÐ¾·Òf·[yôô…åÆÀÉïä `šôo´§£Qö”ôjVÒß×_óõ¿õÓüŽOT²šxre°š_±Oo-Ä1BZ@¡ ŸrH'§ZgˆtûíCÃw—0\êÃq嘴é- cÍC÷BàÔô®¿í)èÔ}¥=©»»ùÜ”¬’0uKOŠt'¶·eŠ8îƒÈ‘ü±–E$p2k”²Í|+¥O¥Ý[jjí½¹ +l“,$èûºðkÒ~ÒžYše~·±[Ln;Yä—fzí Ä/áŠ]¯Q½UŽkMÑî Ñ|"ãO–;¨o[Î>I2ËÜdòõö­Ÿ³Úè°éWv×vŠVV–Ý•æ?uñ†õà×Gö”ôj>ÒžNûƒîeø·þE‹Ïøþ†µÇÌFÏþ½¢ÿкÏN¯á»µäìëþú×'ÿ1 ?úö‹ÿ@Zæÿ˜‡è¿6u¿÷Eþ'ù#ºÓ¿Õ-hÖvþ©kFºA¯÷k—ñú‡úWPÿv¹¨¥Eà/øô»ÿx6®¾¹Ç¥ßûÃùµuôQEQEQEQEQEQEQEQEQEÉ~èúÕgëVeû£ëUŸ­6Š(¤0¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(§'Zm9:Ðeàþmâ;H´KKíBîתh¤>að©‚çé[—.±£;°U Éc€+‚Ðìï“Gðî¯giöϳÃ4onQŠÈÙ ¥ˆã¹b:YµØ&¶Óîl.íÚ«¥‡tˆçvs•}Öãø¸æ£O[[ZÜÜjQlK×µO"ätR0Io\ zVLZ¦b¶žKuI¥Ö…ü°¬€ˆSc= èN;šUÐõåæß¦¼×‡ç_õ'?7_~}©¯ëÿ%ÿ‚úüà&ŸªÙj¶Ïqe7šˆÅ*Êè*À~¢²tXê:e½ÕÀ–ÚIYc Á&ÀÌÛT+ƒ“ÜqV´» ‹mc\žXöCu\q<…A8¶ƒ´|Vö&£ÿ ê=+ìÿé ®bÞ½¥ ×8éÏZ¹:ž“â FhtÖ½¶¿’9±ÌŠÑ¡H`Ädq‘Œõ§ÖÀËpë¶ñYÞ]_]Ûˆ »{pbGÏpFYÿÝÈ=©ßð“èÿbk&3/“´Bþg™Œíòñ»8çé\õ߆õ)¬ee…Ì‘k^¤)så4±œ•Ôü§#$tæ¥: cHº¨.žäKÿ!k„`»DÚB:qŒôíK§ÝúÁ¿ßúÿÀ:;½V8´ Vi8eWVBÛA8 ŒŽÅU¶ñ>.Œº”òIoÍ‚Dù˜2‚þÛsšd6:¥çƒf±ÔN¡5¼‘$nÈ]ÅxÎÎ8Îk5íu‹­+JvÒLWZTÑÉöy'Œ‹€©ÚA r7cð£«ùEó6“ÄzKé“ê"ïÐ6ÙKFÁñÁB7Èãê]7[Óõf•,ç-$Xó#xÚ7\ô%X|W!®Ú_.‹â ZîÓìÏvöË©‘Y€G,FFI=‰ÀµàÓoµ}rmBþÎm6±ý•Q.Gšä¾âÛ£<ŒsÉ£úü—Qñ,ZOŠ>Ç{+%¡²<¿y 0>•£s¯év–V÷’]©†çAZC'ùUA'AX²iú†‹¯­ÖŸ§ÜêVÿaò{µ.Ì-ó4’9÷¨-4OE‡EºŠÙ/f³IÒ{xä 5·e `|¤cœdQÓúîÁïývF¦¡â«;k >úØý¦Öêè@Z5feá³ò€XWÆiÅVÉ®EbÐÜySZ¬ñÈ-¥-–r¸e •ulVQÑ5XìRôZ+]ÿkÿhµ’J¹ FÝ¡Žv9ôÎjìÑꫯǪ¦“+¥Í¶–%ž0ð0rrrØ#±=(þ¿óý}ÿä3\ñ“y§ÜØÛ݇œ°UÄlʰÜñµˆÁÈôªó³ÿ¯h¿ô¨.lµk/ Ùéwb,{üׂe+ åTªýàNáœß­Oÿ1 ?úö‹ÿ@Zç_ïÑ~lëî‹üOòGu§ªZѬí;ýRÖtƒ_î×/âõô®¡þírþ ÿPÿJ‹À_ñéwþðþm]}rÿK¿÷‡ójë袊(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(’ýÑõªÏÖ¬Ë÷GÖ«?ZmQHaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPNN´Úru Üiöú…»ÃusBÜ4r unüƒÅH–)keQaUWASGþ¬×7c☢дÉ_íº•Ýîÿ*8àE–M¤ä• µ@ãœúzÓÐ}—ý¿Ò²ÿ·úV¾#‚îÛM¸µžæÛÍÔVÖXŒ \?9×§Q“ÓÍ)ñšÞ¼-c~¶ñÝý¯ kä‰s·†ÜHÆ9£úü¿ÌŸ×¯ùeÿoô£ì¿íþ•®k·z^»¤Ú[ÙKwÒLdоaÚ,Ê1ÉÏ4]xÃN±±¿ººŽâ!cp–ó#*îÜûH# ‚0ÀõìhZÿ_ 6>ËþßéGÙÛý+*÷Åv7W6Í̳@ÑF$ e’@J¢sË`dçõoIÖ ÕþЉ ŵͳšÞáBÉ##8$GB kì¿íþ”}—ý¿Ò°#ñžãäsB×úþ»ƒÐè~ËþßéGÙÛý+?Tñ zE­Յ÷ÙK"µâ"±ÀÏÍ»©íïUõ_ZiwQ +ëϱÆ$º{hÔ¬ F~bÌ9Ç88  ²ÿ·úQö_öÿJƼñ…£Ë‹[눭ãY.f‚ Én¬27äƒÓ’X‡ÄpÝjÒXZY^\™R[˜Õ<¨Ë(a’XÁëG¯ÔÑû/û¥eÿoô¬Rîx|]¡[¤ÌL—&T†Ú«Œý2i¶ž.²¼»·‰-¯ §d¶»’0!€' sž@8ÈÇ Øû/û¥eÿoô®ÛÅèðÝÞ» »m̾LRCƒ`˜B§y8ÏßÀÍv˪ªé3jv—‹ 4 Û Tdœ+ÛÖ•Øu°ùôØnb1\,rÆq”‘ƒ‘Á÷©>ËþßéXOâ6»·Ó. CNŽæö(“͆&3«) }óµO¯QéOºñ•µÄ¨¶WóÛÃp¶ÒÝÅùI!`»rX‚@8º]?ÌWëýZeÿoô£ì¿íþ•Éé>+{k«øu+{çƒûVKhï6)†<°„îÜ9ÀéŽzÖ—‡µëÍNòþÞâÂm^M ](AÔl÷·nÿ€â’×î¿åþcz~_Ÿù_eÿoô£ì¿íþ•‘{âý7O´Ôn.Vt[ ”¶•v®K6Üç•ÃÛ¡â£Ô¼EjðiðÍs‘ÞA®£¤žb± ’r8\’FF:е°wâ›}ž»mÙÆÎßí­r¿ó³ÿ¯h¿ô­”ñ.¡u¥x„5Ämh×i äacËhûÛ·ÀqX«<—7ÖSÊXÉ-´NÅú䢓ŸzÍCßöžKõfίº¿ÑÞþ©kF³´ïõKZ5¡ˆ×ûµËøƒýCý+¨»\¿ˆ?Ô?Ò€"ðüz]ÿ¼?›W_\‡€¿ãÒïýáüÚºú(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šd¿t}j³õ«2ýÑõªÏÖ€ERQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQES“­6œhnom´í>k»ÉÒ xÆ^G8·ó5Çh:6¥ýáíNÀ@·¶°J¦ ½È²G#g¨©áHà×dfhøzóIö—ôZb9ȼ-|!µ’YíÚíµq©]mÜpFÔã'qžzS¥ðÅìš&¥d%·ó.uO¶¡,Ø æ«àñ× ƺ´¿¢Ñö—ôZiÛoëoò@õßúßüÙ›®išŒú¦›©éfÕ®,üÕ1\³"º¸üÊ `v¬ýGÂjž wÂ,g·òÝrK̨Ȭ8é‡=yùVº/´¿¢Ñö—ôZV œ­§„5K}"ÚG¼¶—[‚ô^[w•! å…Y5Xk9YÅÂÈcÙûµU;òôÁ®ÿí/è´}¥ý•´°ï­Î:OÊ5/LÑuºŽ#"ê CÂêNÒ²3Ž9­ßßÏâkËH4û(à–2n •ÄÒD£˜Ù…`zrNtiE£í/èµWÖä¥eb†­¤\ÞëzMü ËS*L’ IT€yè:Äð÷ƒDº‚94½X­Ëywê…nHçi#n7v'uu_iE£í/è´†Î}|/v|š ž¼@d1îoàp⦹ðáÕ,.îoôí2=nX$†;ˆK8\¡Qó•¿¥m}¥ý´¿¢Ðõ½ÆŒ«­ ê};@·Y!§ÜA,¤“†¤¼ryïŠãµI%·’ØÞi÷‹>ª“Ußí1æevãäî$q^ö—ôZ>Òþ‹Nþõþ—ùeËoë¯ùœô¾½“DÔ¬„¶þeΩöÔ%›<Õ|:áO·½\ÑtÍSIÔ¯¢?c“M¸¹’ådÞÂe/ÎݸÆ3žsøV¯Ú_ÑhûKú-%§õéþCzÿ^¿æsú·„Tñ!»yclðâæÏ*«¢0í®Z¯aáF ;OWVó_Ç©%åÔ ¶UJ¼uÚ®;×Qö—ôZ>Òþ‹BÓoë[ƒ×ëKòh:Ä0kztmbö:ƒ\K­#‰¤t®Ò0 ëž«{g³Õííd*^R6+Ъ?*ï>Òþ‹\^¬wx¥‰ê@? £m?­úûλNÿTµ£YÚwú¥­kýÚåüAþ¡þ•Ô?Ý®_Äêé@x þ=.ÿÞÍ«¯®CÀ_ñéwþðþm]}QEQEQEQEQEQEQEQEQE2_º>µYúÕ™~èúÕgë@ ¢Š) (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š)ÉÖ›NN´ÉºþÈi¾!•tm&+I¯/oFHî.²UQ¾fy û€8ï]N£r¶v²\4sH~ä1™óŽrk”Ò|9yýƒ¢Ì—OÔí#p Åæ ®rQ—#Û¸Áÿ¯ÌDÒëâö =ž›{…ÕÒxR}»H:ãg#¥+x²å'šGÒ‡öt7¿b{s— ¸.í›zdŽõ<~ olõ¤¸M@_Ï3F?|ø €ùF0\c½,žó4»Û/¶cí7ÿlßå}ßÞ+íÆyû¸Ï¿JjÝ­¿àƒòþ·ÿ€7\Ô5;_èöÚ|qÌ'IÌÉ/–­´. m¬xÉíQj0ež¥-Í–&±¸ŽKêà6àvú=?„Ö†¯£Ïwe{gz-.í „w‡ÍVW ®G ç5^ëÂÑ^ë‘jWÀ·ò¦„&VÃ(sÏãþÔ¿¯ëò;ÏyÓÚ[Ø›™X ƒl¡D²º— œ|¡TO=zUí#W’þ{»K«O²^ÚóbyŠU†U•°2=‡J̶ðpµÑ`´MFC}ÏÚ’ôÆ ß£+žFß—ü«OHÒ$°žîîêïíw·e|ÙD~Z…Q…U\œÏsÖŸõùÁ"=~K;[†·µ–êiuw³'ºãw¨m§jñÂàâxÂú5ž[b‚Òåm®ÝnÃØ•ÁQ´n_™OPyéWG†1·ý3îê‡QÿU럓¯¿_Ò‹¯ }¦ÓWƒí›´nRãw•Ÿ/hA޼ýμu¤º_úÛþ=ôþ·ÿ€3\ñPÐï’)¢³x @ß骳áŽ2"#æëIªx¢âÒ]DXé‚î6=÷R½Ç”Û»j§qÇ=ºÔ:—ƒæ½¹¿hu¢·¿’9fGµ8+·î¾áòŽ=ë3Äöw‰q«[éFû~¥Ya{I¹]¹ä*q€sž”ºyn]Ô¼}mcq4k » xÑçÞ$R|Ê¡röô­oÉ}®É§ÚÚÂÑE°¼’Üì«(mËÓ¹yë‘Þ¢O ]Û]µÍ†£¹#Kl&RÊ¡w)Ü6œëRê¸Ôµkk™ï öÓ,Ñ"Z*íþ3wBzñíU¥ÉW°ÍsPÔí|C£ÛiñÇ0'2C$¾Z¶Ð¸%¶±ã'µž$»Šâò;M$ÝG`ªnÜ\ÚJî*€œÏj·«èóßÝÙ^ÙÞ‹K»BááóU•Æ+‘è9ÍS»ðÕä³Ý½¦®m’ýo[†ÞÁv–CŸ‘ÇzlWQgñ%Ì·°[éj_ lÖósÜù_#>S“õÅY³ñ>•wgi+ÞCm-ØýÜÈ«!lí+Œòw8¬™´mB/Å“qöxt´f{o5ás‘óƒ×ð­ý/G¶ÒôË{$o’ï$³1$–üI&›µ´þµbþ¿rþׯlô]%/ìØîe0%à¸ÞÅË6ÝÉŽ^oêÖò_E.™ažà-ð#Ë SäùÊÜtëV$ð¤—6‚]j>míûÄÒÜvª¬dULð8=ÏZ¹u ý¦ïUŸí;~ßf¶»|¼ùxßóuçïôã¥'¶ƒVêI¨ëIc¤A©$>m¼b[nÄrAÅbêŸò3Ÿ þB·¥Ò"ŸÃ§G™÷Fm…¹p0~î7cõ®jx$µÕííæœÏ,P¢<Ä`ÈB¨-ŽÙëMïe°–Êçm§ªZѬí;ýRÖ5þírþ ÿPÿJêî×/âõô ¼ÿ—ïæÕ××!à/øô»ÿx6®¾€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€/ÝZ¬ýjÌ¿t}j³õ ÑE†QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEäëM§'Z™"Ga“õ§yÿwõ4Gþ­«‰Ñµ«Ã¢è:v‘keosyÒ“ vŠFÁÂîÜI,?‹Ö˜ŽÛÈû¿©£Èû¿©®6mn[è´ä¾³¶7–ÚâÙ˂ŀHtä„psŒž´¯â}j6º¿hìL¶ÔþÂñq6Ýá7†ÝŒåÆ(Zÿ^ŸæMÿ­ÿÈë™m’T‰™GÎÅ-‚ØëÞŸäGýßÔ×=­8OøyÛ¢ÅvOý𵕢ø×QÕo¬_ìa¬¯]†Ä²ZÁ*Í+-‡cêh¶ò#þïêhò#þïêkÊí¬ï-üq­¬¶‹wv鋈áuœ“p3½÷üÃØÅv·^!“J´¹·¾aq©Ã“”É–±ÜOïPôW`•Ý‘¿äGýßÔÑäGýßÔ×!=æ£-†uªÇ§Ü5Ö¡nÑ¢‘A‘Žys–½=©·^(Ö|‹NÖ+Ó!¿b9QÚY?z#fÈ`’p0zS¶¶þº˜®­ë¯ùr%¼›¼²¯µŠ¶ÖΡ÷§ùÿwõ5ÀiÚž«£jÞ§ØäÓ?·)bda0ß"®àÙLJükcÂOªMuª¼·pÉbºÊ,mA ÇÏ»}¶ÒZýßåþcz}öüÿÈéüˆÿ»úš<ˆÿ»úš¯«]¾Ÿ£ÞÞFªÏoÊªÝ U'ò®Y®ÐišµÕ½Òµ)ÖâwrB31;[¶@êjî¡â»Qg)³ºû4é*Æ å„ä19áPg<»šC:"?îþ¦˜©nÎè¥K¦7(nW=3é\¯Œ/ï4ko"ÞÜêwƒX+::D ‚ÅÊœ £îžsÞ²®%º¶‡Åï©Ågu:ÜY‡TWX›„ãváë×­4¯ýz˜_×Üz7‘÷SG‘÷S\åçˆï-ãñK$p¤Ä¯TüÄÅ¿æçž}1ÅEoâ;ù|GÌ–V07—å$ð¾û Pc}Ár #n â’ÕØ6:"?îþ¦¸]`⦠Çò§á'Õ&ºÕ^[¸d±]Få6Œ †ãçݾÛk7Yÿ‘­ÿÏaGfZ:Í;ýRÖgißê–´h¯÷k—ñú‡úWPÿv¹¨¥Cà"¥ÞH0þm]~åþðüë‡ð Î–þY™dó[-ÞÏã[ØŸþ{^þQÿ…!›[—ûÃó£rÿx~u‹‰ÿçµïåøQ‰ÿçµïåøQp±µ¹¼?:7/÷‡çX¸Ÿþ{^þQÿ…Ÿþ{^þQÿ… [—ûÃó£rÿx~u‹‰ÿçµïåøQ‰ÿçµïåøQp±µ¹¼?:7/÷‡çX¸Ÿþ{^þQÿ…Ÿþ{^þQÿ… [—ûÃó£rÿx~u‹‰ÿçµïåøQ¶ùí{ùGþ\,mn_ïÎËýáùÖBÅ31Sur¤yòúújÙåÿŸÛüsÿ‰ F¦åþðüèÜ¿Þeýž_ùý¸ÿÇ?øš>Ï/üþÜãŸüMjn_ïÎËýáùÖ_ÙåÿŸÛüsÿ‰£ìòÿÏíÇþ9ÿÄЦåþðüèÜ¿Þeýž_ùý¸ÿÇ?øš>Ï/üþÜãŸüMhÈA^<Ö­ª]ØÝ,Vú\÷hP1xó€rxáO§ëW>Ï/üþÜãŸüMg—þn?ñÏþ&¦iµdìiNQŒ¯%tbÿÂC©нwÿñÂC©нwÿñµöyçöãÿÿâhû<¿óûqÿŽñ5—³©üÿ‚7öÔçÒûßù˜¿ðê_ô/]ÿãßüEðê_ô/]ÿãßüEm}ž_ùý¸ÿÇ?øš>Ï/üþÜãŸüMΧóþ=µùô¾÷þf/ü$:—ý ×ø÷ÿGü$:—ý ×ø÷ÿ[_g—þn?ñÏþ&³Ëÿ?·øçÿG³©üÿ‚mGþ}/½ÿ™‹ÿ ¥ÿBõßþ=ÿÄVŽ•¨\ßù¿hÓ¦´Ù¾f~lç¦@éÖ¬ýž_ùý¸ÿÇ?øš>Ï/üþÜãŸüMTa4îå’&uiJ6Œ}îË>†ŒCUþÏ/üþÜãŸüMg—þn?ñÏþ&µ9Ë>†ŒCUþÏ/üþÜãŸüMg—þn?ñÏþ&€,`ú0} Wû<¿óûqÿŽñ4}ž_ùý¸ÿÇ?øš±ƒèhÁô5_ìòÿÏíÇþ9ÿÄÑöyçöãÿÿâhÆ¡£ÐÕ³Ëÿ?·øçÿGÙåÿŸÛüsÿ‰  >†ŒCUþÏ/üþÜãŸüMg—þn?ñÏþ&€,`ú0} Wû<¿óûqÿŽñ4}ž_ùý¸ÿÇ?øš±ƒèhÁô5_ìòÿÏíÇþ9ÿÄÑöyçöãÿÿâhÆ¡£ÐÕ³Ëÿ?·øçÿGÙåÿŸÛüsÿ‰  >†ŒCUþÏ/üþÜãŸüMg—þn?ñÏþ&€,`ú0} Wû<¿óûqÿŽñ4}ž_ùý¸ÿÇ?øš±ƒèhÁô5_ìòÿÏíÇþ9ÿÄÑöyçöãÿÿâhÆ¡£ÐÕ³Ëÿ?·øçÿGÙåÿŸÛüsÿ‰  >†ŒCUþÏ/üþÜãŸüMg—þn?ñÏþ&€,`úU=*·ÙåÿŸÛüsÿ‰£ìòÿÏíÇþ9ÿÄÐmNrK…:eìÁ³ ²($¶O?töÅsÑxSY…,V+Ëhþûìå@ßxd.H>‡5Õ}ž_ùý¸ÿÇ?øš>Ï/üþÜãŸüMc**N÷yÑ KŒyyc÷#–ºÌQGÝÚâ;¯¶)fbLÜüä•É<÷ȧ7†5·´žÕ®í 3Ü}ªEÉù¤ÜvvärÇJéþÏ/üþÜãŸüMg—þn?ñÏþ&—°_Ìþ÷ýt+ëmýˆÿà(®šKÝ2ëR¹ê,ì$€€®‚¤È#ã­&™áø4™ÔÚj‚Ú)b–-"˜S9à|»±Ïv*ÏÙåÿŸÛüsÿ‰£ìòÿÏíÇþ9ÿÄÖÑVV9¤ù›eqáíÓD‹OÔ®o-//n¥kBëäùŒ9o»¸zõǵMöyçöãÿÿâhû<¿óûqÿŽñ4€†ÇL”xUtNê[‰¤·h®'Y‰`s‚Üñž3è(“@Ó§6^p–D´µ{EˆÚñ¸U;¸äáGLw©¾Ï/üþÜãŸüMg—þn?ñÏþ&›w¦›á»=:ò¦»¿¼{hÌvËu(qž\Ø““ŽôjÞµÕ.æ¹×ör\AöyþÌè©ÎVþñä`óVþÏ/üþÜãŸüMg—þn?ñÏþ&“×q­6)ÝxjÒsi%½íý”öÖâÕf¶u ñqò¶å ôÏJŽ? ØÛý„ÙÞê¯in-ƒÅ"æXÁÎ×ÊyôÁäÖ‡ÙåÿŸÛüsÿ‰£ìòÿÏíÇþ9ÿÄÓ¿QX¡ká=:ÖêÝÖâúKkiLÖöRJ 0¿<¨ÆxÉÀ$Ú¯êú]¾°–ûæ¹·šÚ_6íØFÁdr  Ñöyçöãÿÿâhû<¿óûqÿŽñ4†P_ éãL{7¹½’Fº7‚躉’cü@¨~Xæ©ßxQΕmky5ÍÍüм÷Ò €Œ½ L­mýž_ùý¸ÿÇ?øš>Ï/üþÜãŸüM;ŠÅ WÂÖz­ÍÔßm¿´ûdB+¤¶t :¸2žpq‘Š’ÛÜÝÁ,ú†¡%¼$±ÚO(2ciáwvÎ7b­ýž_ùý¸ÿÇ?øš>Ï/üþÜãŸüM% XŠËEƒOÕ./m¯/V;‰W´Þ¦íÕ±Ùï×ÕÍë>*sþz ê~Ï/üþÜãŸüMsZÌK¿l$˜rXõ'qæ€:;ýRÖgißê–´i€×ûµËøƒýCý+¨»\¿ˆ?Ô?Ò€*ø3þ<&ÿ®‡ù×DפéM™Á+a¹€ê@ï\߃‰]6r±Äßš¥j×CÄúmÅî›t—“ùÞc9Œ¨\ *áÊ£óÉ8æ’ÕØoc­‡P²¹à‚îÞY“ïÆ’eú€x¥º½´±@÷wPÛ«,?aXÅk¨ë^ÚE ½—™,€)™ @À9úŸ×JúH®ìCÚÜØ*Y€‘1ß#ùÐö¥ã<+¥A]ÆBÃn=sÓõeu ¤2‘AÈ"¸è­m/>¸x·-´3lùÉRë¸nÀ#<Ž8­Ù¾Ð<*ÆÓ?hûîöõݳŒ{Ðô¿-ZE¿í=<Ý}—íÖßiÎ<Ÿ5wçéœÓN­¦‹£lu Apo”f]ùôÆsšÃ±»Ò,t=-í ·›Ì’(¸+½]ˆÜZƼŠY4ßq`–âòRÉ4¼l`á_8ô)æ›V~Ÿð?Ì«úóÿ#¹¼½·ÓíÌ÷Ryq‚8$’z$û }½ÄwP$ÑoØüèPþD+\ {a¢dKÍw Àr®¹SÜr +Z™[Žjχÿ±A°k!fÌ#R¹Û¼ÉŽsßvsžôÞùÑÖX×ìŽÜy¿5é²/ü´ý8ë\µôâ×FÔ—U¸ŸP¼»Xî-Zl¦ ;ÔGÑvc¨ôç­"È‹åå”mñ+nÉéØÍ ]Ûúݘž×þ¶äwÔWo>µ¨ê·3Ct‘Í cÙ& È«¶66`å{ç'9ÏjK»¹¥µ¼ÔdÕn£¾‡S[t¶K‚ˆˆ%U °¯99ëIko?øæ Úÿ×ò;ú+·ŸZÔu[™¡ºHæƒP1ì“PdU[ 0r½ó“œçµwQ\CpÉ–961GØÀíaÔt>Ôt¸úØ ž˜D°J’ÆÙÃÆÁÇEI\߃g|)jŠèe\&á’|ƬkéÅ®©.«q>¡yv±ÜZ´ÙLw¨¢ìÇQéÏZvÖÀô;Ú­¨_Á¦Ù½ÕÁa•hÉÉ ÔŠã$’ê8/õuÔ/|û}_ÉXÌìb1ùŠ»JtÆöÍVÕÛô­RîëQ¹û\:€ˆZ Ê¢ •B/¡ÈÁÉ¡koë·ù‰»_úïþG¢Ñ\^§pÓßk¯s«ÜX¾žŠmcŽo-q³vò¿Ç–Èç#ŒS€»Öµkh®®ïmIÒRá’Úv‹l¥¹$ÏÐÒþ¿ÿAÿ_—ù••á«É¯ü5§Ý\6ù¤K·÷­jÓjÎÂNêáERQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW-¯ÈÃkÿ\öc]MrÚ÷üŒ6¿õÇÿf4Óißê–´k;NÿTµ£LC_î×1â˜_é]Ct¬b$L1@^ ±˜ÓCüë£hbyRVD+®zàöÍq6ÚÒèIYÍ).[tr•ãÒ£ˆöèpt»óôŸÿ¯Hg_‹¥[̳C¦YÅ*ò UaøN“JÓ¦†8eÓí^(ó±*¿AŽ+‹ÿ…—mÿ@­Cþÿÿõèÿ…—mÿ@­Cþÿÿõè¼0B`0ÂWahÛ·Ó1OUTPª¨ +€ÿ…—mÿ@­Cþÿÿõèÿ…—mÿ@­CþÿÿõèµþÊÓ¾Õö¯°Zý£;¼ß%wç×8Í#ic\›–Ó­ äî2˜v}sŒæ¸¿øYvßô Ô?ïÿÿ^øYvßô Ô?ïÿÿ^€;Ù!Šmžlhû:îPv°î= L^Ÿå§›·g™´nÛ×ô® þ]·ýµûÿÿ×£þ]·ýµûÿÿ× ÞM:Æ[¥º’ÎÝîeh”¸Ç¡Æh“N±–én¤³·{…ÆÙZ%.1èqšâ?áeÛÐ+Pÿ¿ÿýz?áeÛÐ+Pÿ¿ÿýzïåá¿ëšÿ6¨Í¡‰â6°ÝüÇSÃ>s¸Žç ׿-T’4‹ÒO´€ÿ3Nÿ…Ÿoÿ@{¿ûéh§Ôô ]F;x¼¸cŠ;±s*y ¬§ |õ9«cKÓʼn±¢ÐõƒÉ_,󟻌u®7þ}¿ýîÿ北þ}¿ýîÿ北Ⱥ-H‚9#‡K²$ÆõKt°r2ç¯2«)V© Ž®þ}¿ýîÿ北þ}¿ýîÿ怒ÎÓLÓìÚÎÆÚÙŸïbT-õÀæ¡mGk“rÚM‰œ¾ó)·MÛ³œçÎ{×%ÿ >ßþ€÷÷ÒÑÿ >ßþ€÷÷ÒÐhtû&½¦ÒÜÝ9ŒoÓv3R´¼É3D,`„r ²ƒ×¶p+†ÿ…Ÿoÿ@{¿ûéhÿ…Ÿoÿ@{¿ûéh²JÓ¢¼7‘ØZ¥ÓLË ‡$õù±šà†Ic•⤋>[²‚S<Ù®þ}¿ýîÿ北þ}¿ýîÿ怒Ù,m#XU-`U€–ˆÀ“Júu==j†§ Zê1ÛÇåÃQÝ‹™SÉf89 =óÔæ¹øYöÿô»ÿ¾–øYöÿô»ÿ¾–€;h,­-m¾Íok 0sû¨ã ¼õàqPÅ£éC$0éÖqÅ!Ñ P¬G 5ÇÿÂÏ·ÿ =ßýô´ÂÏ·ÿ =ßýô´Ü´¼ÑÌñ#Kv9PJç®lÕx46ÚèÝ[éö‘\æXáUsž¼šã¿ágÛÿÐïþúZ?ágÛÿÐïþúZî ¶‚ÙY`†8•˜»Ô(,z“Žõ\i`¼û`Ó­Ösç~}wc5ÇÿÂÏ·ÿ =ßýô´ÂÏ·ÿ =ßýô´ÚG§XÅx÷qÙÛ¥Ëýé–%ßVÆM§XËæù–vïç0i7D§y ã’+‹ÿ…Ÿoÿ@{¿ûéhÿ…Ÿoÿ@{¿ûéh²“KÓæ¼[Élmžé1¶f…K®:a±šÇ¾ð±ÔµUººžÐIJ¬€%’‰ˆRS.IÆ@ì+þ}¿ýîÿ北þ}¿ýîÿ怒ÊM3Ošño%±¶{¤ÆÙš.1Ó ŒÑa§Ã§C,p–>lÏ3³œ’ÌrÃð®7þ}¿ýîÿ北þ}¿ýîÿ怒¶ G·¸[ˆt«çS¹dKt ¨ f§N±Šñîã³·K—ûÓ,J¾­ŒšâÿágÛÿÐïþúZ?ágÛÿÐïþúZí¡‰â6°ÝüÇSÃ>s¸Žç ÔSé:mÕÊÜÜiö²Ü.6Ë$*Ì1ÓŒ×ÿ >ßþ€÷÷ÒÑÿ >ßþ€÷÷ÒÐiq§XÝÍ×6vóKÜy"Vdú8©|ˆ|ó?•œSa“hÝ·9Æ}=«†ÿ…Ÿoÿ@{¿ûéhÿ…Ÿoÿ@{¿ûéhº†­áH`‰"‰Bª`)õÁÂÏ·ÿ =ßýô´ÂÏ·ÿ =ßýô´ÞÑ\ü,ûúÝÿßKGü,ûúÝÿßK@íÁÂÏ·ÿ =ßýô´ÂÏ·ÿ =ßýô´ÞÑ\ü,ûúÝÿßKGü,ûúÝÿßK@íÁÂÏ·ÿ =ßýô´ÂÏ·ÿ =ßýô´ÞÑ\ü,ûúÝÿßKGü,ûúÝÿßK@íÁÂÏ·ÿ =ßýô´ÂÏ·ÿ =ßýô´ÞÑ\ü,ûúÝÿßKGü,ûúÝÿßK@íÁÂÏ·ÿ =ßýô´ÂÏ·ÿ =ßýô´ÞÑ\ü,ûúÝÿßKGü,ûúÝÿßK@íÁÂÏ·ÿ =ßýô´ÂÏ·ÿ =ßýô´ÞÑ\ü,ûúÝÿßKGü,ûúÝÿßK@íÁÂÏ·ÿ =ßýô´ÂÏ·ÿ =ßýô´ÞÑ\ü,ûúÝÿßKGü,ûúÝÿßK@íÁÂÏ·ÿ =ßýô´ÂÏ·ÿ =ßýô´ÞÑ\ü,ûúÝÿßKGü,ûúÝÿßK@íÁÂÏ·ÿ =ßýô´ÂÏ·ÿ =ßýô´ÞÑ\ü,ûúÝÿßKGü,ûúÝÿßK@íÁÂÏ·ÿ =ßýô´ÂÏ·ÿ =ßýô´ÞÑ\ü,ûúÝÿßKGü,ûúÝÿßK@írúèψ-¿ëþÌjŒ?bœ€ºMÈÏ«­Z[¦ÖuT ´¶{“ýh©Ó¿Õ-hÕ+$Ûv˜€ôª— ŒUºB(—½ÑVbrµ’þÜ•weö¦yké@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@dD`vVí–š°ãµÄkéO $i´b¤¢ŠÿÙnip2-8.7.0/doc/src/figs/snap5.jpg0000644000175000017500000012205413224651032013335 00000000000000ÿØÿàJFIFÿá°ExifII*JR(i‡Züÿÿ)( üÿÿ)( 0210‘ 0100 ÿÿ ã ÿÛ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ä Bàw¬ëÝJH^Y¥HãA–f8{šä'ø• £•[æou‚F˜\Pæ/­bú×›Ÿ‰z/üýÉÿ€òñ4ÂËÑçêOü“ÿ‰ HóÖ1}kÍÿáeè¿óõ'þÉÿÄÑÿ /FÿŸ©?ðOþ&€=#Ì_Z<Åõ¯7ÿ…•£ÏÔŸø'ÿGü,­þ~¤ÿÀy?øšô1}hóÖ¼ßþVÿ?Rà<ŸüMð²´oùú—ÿäÿâhÒ<Åõ£Ì_ZóøYZ7üýKÿ€òñ4ÂÊÑ¿çæ_ü“ÿ‰ HóÖ1}kÍÿáehßóó/þÉÿÄÑÿ +FÿŸ™ðOþ&€=#Ì_Z<Åõ¯7ÿ…•£ÏÌ¿ø'ÿGü,þ~eÿÀy?øšô1}hóÖ¼ãþNÿ?2ÿà<ŸüMð²tùù—ÿäÿâhÑüÅõ£Ì_ZóøY:?üüËÿ€òñ4ÂÉÑÿçæ_ü“ÿ‰ GóÖ1}kÎ?ádèÿóó/þÉÿÄÑÿ 'GÿŸ™ðOþ&€=Ì_Z<Åõ¯8ÿ…“£ÿÏÌ¿ø'ÿGü,þ~%ÿÀy?øšô1}hóÖ¼ãþFÿ?ÿà4ŸüMð²4ùø—ÿ¤ÿâhÑüÅõ£Ì_ZóøY?üüKÿ€Òÿñ4ÂÈÒ?çâoü—ÿ‰ GóÖ1}kÎ?ádióñ7þKÿÄÑÿ #HÿŸ‰¿ð_þ&€=Ì_Z<Åõ¯8ÿ…‘¤ÏÄßø /ÿGü,#þ~&ÿÀiøšô1}hóÖ¼çþ>‘ÿ?à4¿üMð±ôùø›ÿ¥ÿâhѼÅõ£Ì_ZóŸøXúGüüMÿ€Òÿñ4ÂÇÒ?ç¼ßø /ÿEÀôo1}hóÖ¼çþ>‘ÿ=æÿÀiøš?ácé?óÞoü—ÿ‰¢àz7˜¾´y‹ë^sÿ Iÿžóà4¿üMð±ôŸùï7þKÿÄÑp=Ì_Z<Åõ¯9ÿ…¤ÿÏy¿ð_þ&øXÚOü÷›ÿ¥ÿâh¸æ/­búלÿÂÆÒç¼ßø /ÿGü,m'þ{Íÿ€Òÿñ4\FóÖ1}kÎáci?óÞoü—ÿ‰£þ6“ÿ=æÿÀiøš.£y‹ëG˜¾µç?ð±´Ÿùï7þKÿÄÑÿ Iÿžóà4¿üMѼÅõ£Ì_ZóŸøXúOü÷›ÿ¥ÿâhÿ…¤ÿÏy¿ð_þ&‹èÞbúÑæ/­yÏü,}'þ{Íÿ€Òÿñ4ÂÇÒ?ç¼ßø /ÿEÀôo1}hóÖ¼çþ>‘ÿ=æÿÀiøš?ácéóñ7þKÿÄÑp=Ì_Z<Åõ¯9ÿ…¤ÏÄßø /ÿGü,}#þ~&ÿÀiøšôo1}hóÖ¼çþ>‘ÿ?à4¿üM'ü,#þ~&ÿÀiøšô1}hóÖ¼ãþF‘ÿ?à4¿üMð²4ùø›ÿ¥ÿâhÑüÅõ£Ì_ZóøYGüüMÿ€Òÿñ4ÂÈÒ?çâ_ü—ÿ‰ GóÖ1}kÎ?ádhÿóñ/þKÿÄÑÿ #GÿŸ‰ðOþ&€=Ì_Z<Åõ¯8ÿ…‘£ÿÏÄ¿ø 'ÿGü,þ~eÿÀy?øšô1}hóÖ¼ãþNÿ?2ÿà<ŸüMð²tùù—ÿäÿâhÑüÅõ£Ì_ZóøY:?üüËÿ€òñ4ÂÉÑÿçæ_ü“ÿ‰ GóÖ1}kÎ?ádèÿóó/þÉÿÄÑÿ 'GÿŸ™ðOþ&€=Ì_Z<Åõ¯8ÿ…“£ÿÏÌ¿ø'ÿIÿ +FÿŸ™ðOþ&€=#Ì_Z<Åõ¯7ÿ…•£ÏÌ¿ø'ÿGü,­þ~eÿÀy?øšô1}hóÖ¼ßþVÿ?2ÿà<ŸüMð²´oùú—ÿäÿâhÒ<Åõ£Ì_ZóøYZ7üýKÿ€òñ4ÂÊÑ¿çêOü“ÿ‰ HóÖ1}kÍÿáehßóõ'þÉÿÄÑÿ +FÿŸ©?ðOþ&€=#Ì_Z<Åõ¯7ÿ…•£ÏÔŸø'ÿGü,½þ~¤ÿÀy?øšô1}hóÖ¼ßþ^‹ÿ?Rà<ŸüMâ^‹ÿ?Rà<ŸüMzHp{Ò‚ yÜ_ô"ÀÇ[y?øšêôÍn×R·YígI¢nŒ‡?‡Ö€6¨¦#îú(¢Š*­Ô›šµYz›í‰¨ɾ(ê²²ÙÙ+‘Œîà»qŒÿßYüy¾êë~"J_P´ç “ÿe®3uK6ê|qË0Å’×|…¶Åõ8è=ÍVÝ]7†¼U‡esm=¡¸¶T…OÏ$œ…ë‘ÇJç÷Qº»­I‹S³ð½àÓaœIw?ÛmÔƒóy˜=3ÅGb¶:~“¨]¶“§Ý?öáµæá#8á}1Ú‹koë§ù‡Ÿõ×üŽ'u«¾²Ò´ë_ëšzéblc<œsÇZ¡ñœêúyxDtØwD«´!Ë| vÇLPö_×AÛs™ÝFêô[-GÔ´Û}A­íbþѲ[(QbPëçËØü£ž´ÇÓ´øgÕRÇH´¿¾Òm`…-Ì;–W?ë$e¹ŸÞ—þ¿®Ÿx–¿×õý#ÏwU¥Óî[I}P*ý•&ÝÎò3Óé]Âé:l$y_KµWþÅ7²ØÈ›£Šn8Úzj††»áÙ[P·´·ŽMPí¡O*D»Sà××ñ¥ý~6ëð¹ç[¨Ý]‡mãŸZÕ Ô4HVðºÇüKÌÖÖÍ“ò”^(k©|9¡Å›–ϧÀøÛ’Ñ6@ÛætQÓsO}ƒ©ÆÀÍ[Ôl.´›Ö³¼@“ª« ŒŽEwö‰ioáR9¬mòÅ!+qm`mÁ$€på™Ç^Ÿá¡â+T¾¼Ö’ûH·K[}ëV²ùbSn±ª ^¯É8êN&¹Ý.ÛO»’EÔu_ìäP 7Ù^mçÓ x§mZK•·SàŽK›ˆà… Ë+EÄÄà ×ð•¥¥ß,í&Tºµ2H?xŸ,€+JŸ 85·,VZ…¶ƒ©®›gi3kÖDµ‹dn¸Êúñüè]?¯!>¿×õ±ÇÜÁ5Ô¶×1˜ç‰Š:Ò>œQmmsy!ŽÖÚ{‰ÉHcg zà]ûÙÇ ÝÕ§‡í5+•ÖZ–¾nØð Àw“× ÍU%Ô>0Õ¬´kÛ«-.ßË–ëì¬Å‡ËŠ’r[ü1Ikk”Õ¯oë[3‡ŠFŽDdu8epAЃғuiøªþ}GÄwWsÙÍfdÛ¶)«í{œV6ê¨6ê7T;¨Ý@‰·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›u&ê‹u#1Øq×¥g¦^ß§™ "Eœ•°Ó¹¨ïlo4ò¾z.Æ8‡*O¥o‹‡F–Â2Š ÎW¶0 A};>™p—ÈH ņ{u½bZ[]_Jc·Œ1y‰À_©«Wz>¡g •Ö)FXÄÄíà⥲™bÑ@St ÈÁ¶Ÿ¾QÓŠ· ÌIz‚ ƒ"˜Ûpó‹Ž«Ž¤ûÐ qu:Ao’G8U^õ¶ÞÕÖ0}•ÛêÖ_›õýi<:ÑC}|É€GËû»Ž’ÖŒWwkÞ²o;¨ÜÇѽ®p?à\Uñ2„ÜcÐõð˜ u)*“o^Ç(Û‘ÙJ:œ2°ÁÒ»?‡œ¶ºÜ¶ÁÏ“,eŠçÀŒÈšæüDèÚ±uÆæKÿ½ÏôÅ\ðd…|B„pÿJë¥>x©w<Úô½•ISìÏ¢¬fó#5 +GrЭmŽ•©ˆ´QE¥djßê[éZç¥cêßê[é@ñÿÄÂÛþÿ²×ººÿˆñÿmÿÿÙkŒ¤ÆIºÕ8êiÌŽ˜ÞŒ»†á¸‘ê=©n×T¿²FKKû«tc–Xfd õóL×BºœDdóJy‡iïc?{ß­U¢€4YÔâšY£ÔïRYqæH·ñÓqÎOãM·Õu 3!µ¿»€Èræ)Ù7SƒÍQ œ д¾ºŽYeŽêt’`VWY¨cžA÷¢ÖþîÅËÙÝÜ[; †VBGÔªÁ‘ö8*ãøX`þT™  qê‘]¨îîå²LË+9ëóg4Û‹Ë‹É|Û«‰§—ß3—l}MV¢€-%õÔqÇ]N©ù‘ªÈÀ#ÿx ð}Ç4±ßÝÃt×Q]ÜGrÄ“2JÁÉ=rÀ皨N:œQ@Æ¡x³Ë:Þ\ ¥R²H%mÎPÇ9 ûÓVòá-þΗ,ÄžPrpþ,tϽV¢€4W[ÕRi&MRùe—d‹ráŸ2s“øÕë_]Ùx~m2Ù§Šin¾Ònã¸eº^99ÆsšÀ¢€.A¨ÞÚLó[^ÜÁ+ýù"••›êAÉ¥òÝ›µ¾ºG¬âfóü 9ªTPøõmF+™.cÔ.ÒâO¿*ÎáßêÙɪÒM$Ò´²ÈòHÇ,îÄ–>¤žµG(Ί.70ž™=¨txœ¤ˆÈ㪸 ÀзUí ϱýí—e'>GšÞ_¯ÝÎ:Õ Aèihüº¾£=·Ù¦Ôo$·ÀSÎì˜>RqI>«¨]@ ¸Ô.æ„tŽYÙ”~â¨Ñ@êxà’žU†\y‘«¯Ž™=ê=Õb ©­fY­æ’WîÉ•aÛ‚9ñv±¤kwp9<ÔQ+a_ûÀg†÷ëU™1½w Ãp##Ô{Sh¡ƒÅwÖÚ ú|RÜ¥Ä×_ikŹ`çå©îsŒç5™oªê#Zêp4§2§d.}N=OZ£EZ¹½¹½›Î»¹šâ\c|Òlzdš‡uGEIºÕ&ê7TtP›¨ÝQÑ@n£uGEIºÕ&ê7TtP›¨ÝQÑ@n£uGEIºÕ&ê7TtP›¨ÝQÑ@n£uGEIºÕ&ê7TtP›¨ÝQÑ@n£uGEIºÕ&ê7TtP›¨ÝQÑ@n£uGEIºÕ&ê7TtP›¨ÝQÑ@ Ô%pÊ:qŠI¯^ãØÎvŽõJŠ» Û[±1¿ªš–]RiWní™ï’MfÑ@ ¹ì¯›xéÛÐÕöñ›‘÷²OéëXTVU(S¨ï5s¦Ž2½¸Ó•“'–fšFwbYŽI=ësÁ§> O÷ô®rºÈŸîéZ¥mÌÛnìúDÿR¿Jß+DÿR¿Jß*„-Q@éXú·ú–úVÁéXú·ú–úPƒ|CÿûoøþËY~‚ ïïLéhÞ]Œ²#]Ä$c A§ÐÖ§Ä?øÿ¶ÿÿìµËØêéæäĨßhàmàœ+u#ž´ŸPìnD­q>£¶îÀyzlŒ[K·X‘Æáò°1®,ôæ­M¤.¯}f$r°ÛèðÌádD-€PÎv®Išæ,¯å°"%CöˆÜ H'üUèüGyÛ¿•lþU·ÙX:&‹²¸Ï8õ-xÄ“@tÛ ,äq(µur‘¾1¹Níà sóQö¯ýtÚß×SkÄQ¹ñT‹<ª‰,Æ6í|ç¸ÏÄVwŒ#Óá×·šL8.¾_A÷T(+ø“Tîõë«Ã©Rý èÒíR6í'yã¯|Ó5Maõm=¥ª\ y—«—78íØ ”´_×b¯©[:T_èú¡†3y ¨$Ú7Ÿ}3×Nì³XÕkN¿›LÔ!½·Úd‰²Œ«„Ü~µ^B:K 8­ï´KÏÙïZ nn."Uóô%S$ÇûF£Òü/iq§Ù\^Ü4fð±WPD°(b¡™\î~A8\qïY ®]uõr#k—f$vÀ®Ï@ö¶úãÇa•Å•äQ0›„bÑg“‚¬8Ï89¼ÀÔÓü-k}s§w"[O¾|¡”ì•X ã¡-^ÍÖ²5 5,4û¤WG’6ÆCm\qœ’­úQµyo£K¥ÆTA$¢RØùàC…'ýÑMÖ5{oPkÛ¡‘”.ØÆ;×êi¿ëúþ¶…tž¹FvòØiÓ¬6sÌ­5œnû•Ib¹<ö®n­ØjéÏ3¨Æh^Þ Â°ÁÇ=hèÅÕBÃM¸[ õ6–õ#˜ÖÆ(⊠°»~lN>¹¨N‹e§[M6¯%Ëm»{DKBªILnbX9çÔU{/ÜY[A µ´¸6Ì^ÚIã,ÐsòòçœFi¶ºôðE,7ö×ÑI/žRé 'v ä÷ìhôþ¿­GëýZ“éßÙZGˆ¬Ä¾j$–¬ŒnV%”‘ØàŠ—Æú\vwóÞ\<¾}ㆶXñ°"¨ XrsÆÑ‚:žÂ±^¼›ûGÏMý¡7zô*r¥qŒc·lv§Þx†òý/c¸HZ;§Y m8‰Ô¹9à0zä~—õø¿}me ñ!ÔEÍç•5°†D—‹að«èö‡Ã«¨@——R•c#E*m¶Ã` inœîàsLÿ„–å¯/§žÖÒt½ÛçA*6ÂWõïQA­µ­¤ÐÛXYE$±¼Mpªûö7QËmèqÓ8¢ÚÜÊ«zTi.±eˆ®q²°È °È"ªT¶Óµ­Ô7xdPÝ <ÕE٦ɒºilzŠxƒVÍÞ—aÈÀÈîzb±"Ö."Ôî¯Õ"2܉C‚Ñæÿ´qRI®=Å‚[\ÙYÜ £! G ƒZ:_ˆ‘ ­}³´Ö´ˆ4lDܪø>™ç­dj:¬ºˆ 0[Á•Š„Lœž¤’IêI4=ÿ®ïþ–ß×dQ¢Š)€QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEWCàÏùSýÃý+ž®ƒÁŸò0Çþáþ”ô&‰þ¥~•¾:V‰þ¥~•¾:UZ(¢€Ò±õoõ-ô­ƒÒ±õoõ-ô =Óôû=SÇÚ^ÛCq ÚÌv˸4g pxÆ}Ív¿ðƒøPuЬïÕrZü”‹cÿN³ÿ4®ÇW×ãÒuK i¢‘¢ºY xãyvŒ*‚NsHÿáðŸý¬ïÕðƒøOþ€V?÷ê­\ëúuÌv÷IÉ·k4ËtöíúY‡ÅVÖ:þ©g©\yPÀbòˆ…ˆPË’Y€ ÷8§`,ÿÂá?úXÿߪŠçÁž‚ÖYáÐìD¥ùX à‚ X×uñ£[Å*YMt$eÓˆÐ3É~ø$þµ¥|â[t?é‹ÿè&‹•ÿ¯‡è¥ÿàáGü"¾ÿ —ÿ€qÿ…kÑHfGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ©4ÑÛÁ$ò¶ØãRîØÎ&¹ûíBëÈR]¬)…ñæÀ ›yùsÆêƽxÑ‹”„Ùsþ_ÿÐKÿÀ8ÿ±Ýiÿ?PßÁGÛ­?çêûø(z*·ZÏÔ÷ðQöëOùúƒþþ žŠƒíÖŸóõýü}ºÓþ~ ÿ¿‚€'¢ ûu§üýAÿn´ÿŸ¨?ïà  è¨>Ýiÿ?PßÁGÛ­?çêûø(z*·ZÏÔ÷ðQöëOùúƒþþ žŠƒíÖŸóõýü}ºÓþ~ ÿ¿‚€'¢ ûu§üýAÿn´ÿŸ¨?ïà  è¨>Ýiÿ?PßÁGÛ­?çêûø(z*·ZÏÔ÷ðQöëOùúƒþþ žŠƒíÖŸóõýü}ºÓþ~ ÿ¿‚€'¢ ûu§üýAÿn´ÿŸ¨?ïà  è¨>Ýiÿ?PßÁGÛ­?çêûø(z*·ZÏÔ÷ðQöëOùúƒþþ žŠƒíÖŸóõýü}ºÓþ~ ÿ¿‚€'¢ ûu§üýAÿn´ÿŸ¨?ïà  è¨>Ýiÿ?PßÁGÛ­?çêûø(z*·ZÏÔ÷ðQöëOùúƒþþ žŠƒíÖŸóõýü}ºÓþ~ ÿ¿‚€'¢ ûu§üýAÿn´ÿŸ¨?ïà  è¨>Ýiÿ?PßÁGÛ­?çêûø(z*·ZÏÔ÷ðQöëOùúƒþþ žŠƒíÖŸóõýü}ºÓþ~ ÿ¿‚€'¢ ûu§üýAÿn´ÿŸ¨?ïà  è¨>Ýiÿ?PßÁGÛ­?çêûø(z*·ZÏÔ÷ðQöëOùúƒþþ žŠƒíÖŸóõýü}ºÓþ~ ÿ¿‚€'¢ ûu§üýAÿn´ÿŸ¨?ïà  è¨>Ýiÿ?PßÁGÛ­?çêûø(z*·ZÏÔ÷ðQöëOùúƒþþ žŠƒíÖŸóõýü}ºÓþ~ ÿ¿‚€'¢ ûu§üýAÿn´ÿŸ¨?ïà  è¨>Ýiÿ?PßÁGÛ­?çêûø(z*·ZÏÔ÷ðQöëOùúƒþþ žŠƒíÖŸóõýü}ºÓþ~ ÿ¿‚€ Ûo¶X\ZïÙçDÑîÆqFqø×!«ÛÏ¤Í ËqÂevb(AR¾¬s÷¿JëþÝiÿ?PßÁUîN“y·í_bŸnvù»ëŒ×.+ ñ³ß£F“¥Ï¨ÛÛߨÒ/?w–!$‘œ Û»íôïV|eÿ?õø¿úÖÄ3éöñ,PKkkÑ•@übø¶HæÓlš7W_µ¯*r>ãÖ”(FŒyb XÓÑ?Ô¯Ò·ÇJÀÑ?Ô¯Ò·ÇJÜ¢Š(=+VÿRßJØ=+VÿRßJã¼Us¯Þ}¨Þ}«È謽¯‘—¶ò=syö£y¯#¢käÛÈõß5ýhó_Ö¼ŠŠ=¯{o#×|×õ£ÍZò*(ö¾Aí¼]ó_Ö5ýkȨ£Úù¶ò=wÍZ<×õ¯"¢käÛÈõß5ýhó_Ö¼ŠŠ=¯{o#×|×õ£ÍZò*(ö¾Aí¼]ó_Ö5ýkȨ£Úù¶ò=wÍZ<×õ¯"¢käÛÈõß5ýhó_Ö¼ŠŠ=¯{o#×|×õ£ÍZò*(ö¾Aí¼]ó_Ö5ýkȨ£Úù¶ò=wÍZ<×õ¯"¢käÛÈõß5ýhó_Ö¼ŠŠ=¯{o#×|×õ£ÍZò*(ö¾Aí¼]ó_Ö5ýkȨ£Úù¶ò=wÍZ<×õ¯"¢käÛÈõß5ýhó_Ö¼ŠŠ=¯{o#×|×õ£ÍZò*(ö¾Aí¼]ó_Ö5ýkȨ£Úù¶ò=wÍZ<×õ¯"¢käÛÈõß5ýhó_Ö¼ŠŠ=¯{o#×|×õ£ÍZò*(ö¾Aí¼]ó_Ö5ýkȨ£Úù¶ò=wÍZ<×õ®?Á?òýÿlÿöjëkXÊêæ±|Êãü×õ£ÍZeÊæ¿­kúÓ( ù¯ëGšþ´Ê(þkúÑæ¿­2Ššþ´y¯ëL¢€æ¿­kúÓ( ù¯ëGšþ´Ê(þkúÑæ¿­2Ššþ´y¯ëL¢€æ¿­kúÓ( ù¯ëGšþ´Ê(þkúÑæ¿­2Ššþ´y¯ëL¢€æ¿­kúÓ( ù¯ëGšþ´Ê(þkúÑæ¿­2Ššþµçº–§6«ckq2FŽnŠŸ,‚rO?1®þ¼Õäkÿ_ÿ -c95V+×ô:)Â.„ä֪ߩÜhŸêWé[ã¥`hŸêWé[ã¥ns EPzV>­þ¥¾•°zV>­þ¥¾”ÉøsþF—ÿtÿè-V|mÿ.?öÓÿeªÞÿ‘¥ÿÝ?ú UŸËý´ÿÙk:Ÿ "§Àr]*!s £$ô…KU’Î4¸2ƒÇU^ÀÖ ÝNun¥š¯y;[Û–Œ•ˆHÔô,zUЧuf×W1r°Æ ù«n”«yȪö±Ú¯”šE†Už~SË”çvNáÆ)ÛL<•”¦ÈGÊ?1Æ2hÐ4&’à$¾Xä|n!@à~&š×±¬›v¹‚åö¦Í²Ü#…`C‚wc¸¨à²håùº, vÏ?ìôÍ ²±,W%Ì©°˜Õ¶†À8ç<Ñö‡ûi‰P²*Œ‘Ž õçÒ–Ú)aÞ¯°¡bÁ999æš±N“NËå•äNAÆéF¡ºpǺO2Rííqϵ<Üm¹‘ÝŠÇc*}OõÿjÚË·1ùgËB„1#®2GåD¶rH'—çuu䎘àþTô„ðÜ ™—c£(‡àôþU5Am ‰X²(v<ųøžjz‡¾„0¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(ª×ÒM«<*Iæ d¨î@îjÍTÔb¸šÍÒÙ€~ã¦áéžÔÖã[™íªÎñƱ•ßžF|ÓØc·½m!bŠ\ØäœçÛF¼Ž8¤Š@f$n\à'¡Ú·Ð0C°fdŒš©òô*|½¿Á?òýÿlÿöjëk’ðOü¿Û?ýšºÚÖŸÂoOáAEU–QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEæ«ÿ koúûý+Ò«ÍSþ@Öÿõöÿú Vþ4>¡ÕKýÞ§¬S¸Ñ?Ô¯Ò·ÇJÀÑ?Ô¯Ò·ÇJè9¢Š(=+VÿRßJØ=+VÿRßJäü9ÿ#Kÿºô«>6ÿ—ûiÿ²ÕoÈÒÿîŸý«¹Nõ2WV•Õ"¢½u¥ÝUœá8,qœ^¢GòÓv2r¤œ ÏØù™{3Ȩ¯\òn±Ÿ:öòÉÇã¸SL7óñýù?ü]ËÌ=™ä´W«2Þùy·ÿ¿ÿ‹ªZ…Õõ½Ê£Fgh$û<¨˜Ä ©'Ó?‡J^ËÌ=™æÔUøKaì|ÌÊ+OþÍoþò…ð–kóûÿ“ü(ö>aì|ÌÊ+OþÍoþò…ð–kóûÿ“ü(ö>aì|ÌÊ+OþÍoþò…ð–kóûÿ“ü(ö>aì|ÌÊ+OþÍoþò…ð–kóûÿ“ü(ö>aì|ÌÊ+OþÍoþò…ð–kóûÿ“ü(ö>aì|ÌÊ+OþÍoþò…ð–kóûÿ“ü(ö>aì|ÌÊ+OþÍoþò…ð–kóûÿ“ü(ö>aì|ÌÊ+OþÍoþò…ð–kóûÿ“ü(ö>aì|ÌÊ+OþÍoþò…ð–kóûÿ“ü(ö>aì|ÌÊ+OþÍoþò…ð–kóûÿ“ü(ö>aì|ÌÊ+OþÍoþò…ð–kóûÿ“ü(ö>aì|ÌÊ+OþÍoþò…ð–kóûÿ“ü(ö>aì|ÌÊ+OþÍoþò…ð–kóûÿ“ü(ö>aì|ÌÊ+OþÍoþò…ð–kóûÿ“ü(ö>aì|ÌÊ+OþÍoþò…ð–kóûÿ“ü(ö>aì|ͯÿË÷ý³ÿÙ«­¬íî{íÚæå÷Êû÷6ÎŽƒØViecX«+QL ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¯5Où[ÿ×Ûÿè)^•^jŸò·ÿ¯·ÿÐR°Ÿñ¡óýª_îõ=cúƉþ¥~•¾:V‰þ¥~•¾:WAÈ-Q@éXú·ú–úVÁéXú·ú–úP'áÏù_ýÓÿ µw)Þ¸oÈÒÿîŸý«¹Nô†sºÏ†o5mM/ª cÈQnIˆõÈ;Ç9ïŽÂ·H‘máY\<ã Ê»A;†N2qPM¬évÓ43êVqJ¼2<ê¬> š¥Žh"–'Y#wŒ«¡Èa¸r 1Â)f ($ö… øuß´²½³DCF®Ù2ÂßrAÇàñÛcĶ׷º,¶V*|Ë–X]ÃåÆÇÜú.k*= PÓ5Ý>öɯ¢›YÖEŠ?.,eHÚ«œ0§ž([ÿ_×ôÁíý_Ò,ZëÆ÷\¹Ó¾Å<+ BE–a´Éóáz㎧¯¥3Ēω4¶Ð=ÅÂG3E `–‘„áFäž)ÿb¸.šøÇþŒÖI|¼‰ëЊ›S¸û%¼w;ü–y6/VÄ2Ê—D_õÐåšêçKð«êšŽ•z’E ‘¢ 7`rÅKàóœc z ‡LÖ"Ö´å¼Òãó¥x‹¥¸™X» ñ‘ÀúwÇAO]ñ9ñN…s¤i¿èVD-½ÄóN#eÜv¨nê¤õë‘F2'Âhb-â'¼Y#³ÌK’±²8,_ c`ʨ#€pAÎ1Sœò|¯bœcjµîCeâ 5-IÅÞ¢4ëI‘ŠyD/<``GMÜàãØ z¬Vï%Ô }ªX$Ç™æ¼c79ç Ä3ó§u{¦X[Ïe /,‘»,w²üè$Êþð}á€;sŒqV/"¹´d·IÒvÚD9=6œç%³ÓÚ®•:R•X´Ûi&·]Ó.1ÃÖÄÓù[›[§ÖÛ2÷‡]VÏPŠ E’£y°YŽå# †H ןҴ࿋Q¸²‚)šìßÛ²8t‰Îå ÈÊâA€r2x9¬ÙΗ§èÚt–zy{¨S7 Ÿ9]Nã¸6ð¿Â@ã©®iüKug«FTcYCù¤–tüØn8å‡NœVNµêÊrŠWå…».¾O#*”ãM®K6ÝŸx®­3k]´’æþEŒ< òTG¸|ª€yç…Ïz¯oá‹«™d‹ºì^¹ã3ZãR[¥KÓîƒ4Üž¸#ò§MfÐyí6ã9‘Ÿûèc­x2›rw_í¨¤¬ŒÇ·Œðªüz‘\‡Œ$Ù•Î3•ýGôÍz>-gµmâ!” väzõÇé\ŒÒÊm@Û0%–Õv¿Ýu Ý1éZáê¢+i_øh1Ỏ:Ý·þ€•Ù×!ðäcó/¥Óè)]}}ã…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@•áoùlÿàúV½dx[þE›?øþ†Õ¯HaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP^lŸò·ÿ¯·ÿÐR½&¼Ù?ä oÿ_oÿ ¥a?ãCçúT¿ÝêzÇõ;}ýJý+|t¬ ýJý+|t®ƒZ(¢€Ò±õoõ-ô­ƒÒ±õoõ-ô Oßò4¿û§ÿAjîS½pÞÿ‘¥ÿÝ?ú Wré ÅÕ¼1k«j]»´xâtQþ¹G@}>¾™˜×•BǨD‘€Aó –£›î§ýtOýShÓ¥<Ó¥U“­aø¦$ŸÃ·PÈqάr·”¼~|Väk7W¶KÛ!k&vNd°qÃC <à㯥 <'LÑìa°þÅ%¾›,ðÄÓH¦Tögc³Ê°½q€#;šçö^ –76©«­¾ËuïåZà€0™P7´œ@ûKžo.•h4«‹hLWº¶â©ƒçœ Ã2@Åc<ǧPf{(QÞ”$C?;2¯;Anß_Zçr9>ï_¸Ò)É_¡ÏøCÄ>ñ>µ:øžÎ [;-8y ç²C‚ٙب_R0ܽ‹´ -®tÍN…ÛOÝqopH Ü~H·7³܆$rTã# 9}Biú"êŸÙ·q^Ü\"¼‘(ÀŒ³|ÊqŒ‡NrxàZêw>dvÈ<Û™öM,’Çó¶B… ·?0BNIr2uÆ´ªN*oOË«·õ¹›§N4ÛÅøm¦§o%¶¯©nî®#Q#¬Â+xĈBírààÈ“š«ÿÞeœ"{’G3Lw´l9^ÜàŒŸLw«Íâý€ÌòÈUÞHÔŒŒ©‘úd€¡‰ÎÜy«ö¨u_ }®Ki£·š5gˆ¸6TŒqŒ6ì—$àJ¿$½è?¨Jpvüt2¬´(–Ròiìfhò!Ø0  yÛìIïÎjâiº‚E"ŽÈEX&‘Œn,[Œò <ô9 bº}:ÖÃL±) EŒHP–p7¹ëÉêIžþ¦±oî®LËs Ær˜‡¶Ò~ÿ=˜ƒØdôæ¹gE(ê÷:–2«m[c•»±¸hSì÷ ök|™¤”©!3ÏA–\“‘žAÇ5zÏÃLR^… $Ã(‘qÁbãÀV°ëÀ«PÛµõ¬7R¤§tÆGp©åqÜŸL``~•¢—ϧ^ùN¬¦à*ÆFv¶ãœœuÀ®*°öp\§D+Ê«å—CŽøz6è7Òé¿ô®²¹D!ÑîQdµ1 9ùÒºzõQç°¢Š)ˆ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šô¯ ȳgÿÿÐÚµë#Âßò,ÙÿÀÿô6­zC (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ódÿ5¿ý}¿þ‚•é5æÉÿ kúûý+ ÿ?Ðê¥þïSÖ?©ÛèŸêWé[ã¥`hŸêWé[ã¥t‚ÑE•«©o¥l•«©o¥r~ÿ‘¥ÿÝ?ú Wrë†ðçü/þéÿÐZ»”ïHcª9¾ê×DÿÐ…IQÍ÷Sþº'þ„)ˆ´iÒžiÒ€*ÉÖ²µÉ¥·ÓZheX¥ŒJé#0†B È#úƒZ²u¬/Ì-ü7w1Ua¹VòœÞ“Ééþ.²’Á—S™¥¿· & §˜ÈÄ|ª Æ>PØÝŽõ~=KÃqÙ¹’{{«›ˆ›1È<ÒCuBvçn[0Éžœx½ß‰£µº‰ š+ȈBˆÊÙpC.Ò08ã?JÌŸ_Qfge²Ï‚Br6q’s×W2§mìüìi¤žš³ÚC{öP1Ì.BI<¸Ï`6Wh¹uÛž .J‚3‹ú&‰¦h~ [UR]Q_uÜ4ž^ÿ˜°n^£ƒ“‚sò“Œ 3-†Ÿ=þ™=½Õô­.^QFF©SÈŒm탂ºö¿.l´´·Ôôà’Fãh6ÂFu%I^žÃB¨×ë4”:3wPñ—r`Ó´»X­Ì8Ë µ—dXî7Ó äî\Ïëï¢èÂó|Ñ€BF¹Xä$ýðÀބއ&£°ñG…n×Ë`öeT¿ïOÙ̬A$—ßqÁã¦* ÚËRkh´ÝFÚí%Ù–hY›¨$£á‹NžàÒX‰9Zqkúò.{ü2Wóÿ‚0jº…ï†ä›Ë’nPgŒî‚' žä 㟦á]CûM¸¶º 4…ËÇ2 Œ€œžÝý©5=¤öóZH¶èK¤&Û÷¹ùóÀÇ;€>˜°ÛP»·y,¼§X•¸9(ù±Ÿºp:ã°ãŠÑN-h¬jFNëÔÛ¿»™m<«RѪIæ(Sò«`ÇLŽ8ã¿5jÊG·&UV»ˆ²'bb¿S\ü:©’Ñí%Þ0æ1#+?CÎXdtéŒõ`æ´¬%YLF2Y¹rU³÷SN˜àóÍEX?fù·2¥5í4EoCäè— ’Ò˜óþê×SX>Aò€/d~ [ÕØÕÌ^áESQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEé^ÿ‘fÏþÿ¡µkÖG…¿äY³ÿÿèmZô†QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEæÉÿ kúûý+ÒkÍ“þ@Öÿõöÿú Vþ4>¡ÕKýÞ§¬S·Ñ?Ô¯Ò·ÇJÀÑ?Ô¯Ò·ÇJè9¢Š(=+VÿRßJØ=+VÿRßJäü9ÿ#Kÿºô®å;× áÏù_ýÓÿ µw)ÞÇTs}Ôÿ®‰ÿ¡ ’£›î§ýtOýShÓ¥<Ó€*ÉÖ¹¯œx3T?ôçuÿ¤Ò×K'ZÎÕm⺵K{ˆÖHeiDaÊa}±Rݕƕτî9 zŒÔæI …@'®:WÓ á[™þÕ¤iñDá»(É*9û§žŸI…|u)ŠßMÒf.â±íc\Ò¸¾¿O~Wý|Í}”¶¹óÉ,xØäc ì+RÓÄú¥  .Ð mrH?žqøWÑ1xSÁ3Ü=¼Zf•$é÷ãP¥—ê:Š.üákXƒ¯…í'õ øÒxê/Gø˜Õ)­™áð–YÝ…]CI·cŒ‹1ŸÓ#×µK^¾#ì÷·VRò,©æªóœ¤Ǩ=zW³Â=àç¶´š A9º,4¹ÝÌÆëN¼ðׄ¬U Ä"Ú­$‚Ý Å“›žqßnj~³M;E5÷™V“ÞÌòÝ:ÒþÎþ-CH×­ZอæYŽFr’ªîtƒÒ¶®µ KÈtÖ-¯À³Ï;ÛEpŒÌ!U”ô €šï%ðï…m/#¶ F‘³ˆÖqò÷7A×?Ž1šÓFÑô˘㷳·¶Œ£»2Lc+·äsÉíøÖsÄÆVßúùšÃÝ<ªÊ×I¾˜M£¥ ƒ’o7}³Ý’p¥ƒÓƒŽ„ y-e¶¾hn,Ì+,`L0ÏqÐqžryüpº„ïÒK•¶Óîy’PáÀúœÔ¶:†å‡vŸohñëo&TÀõ©x­mØŸg ó(«÷<÷à ºßP97Òr;ðµ¹[÷v:.Ž[þ%Iß,ÐŒ"’q–ù'×Ô“Á¥[^Ço.›r¨î±¬ù>^ãÐ}ìûg®¨ã¡e£ü?ÌÅÒwzœåИtåÔb²“G»F”°I ŠT…êx:vî) MIäŠ{¬Ù#ósrÛALãvw~8<Óúô;?ÃüÅì_sŸ¢ºkËmÆ e’-ÞP’7gnF@À=ê;ˆ4Ø,£¼]*âh^/5™$Q±qŸ›sŽÞ™¤±ôßGø˜ýŒ»œí¹,š,1Æí¦Ý`Â'” æ= üß^O¬ÝÛè–—V–Ïní-Óm@ŒÇçž?¯Cù_áþböO{œÕÒßZiVOcOšyd Ë,sµq“ËÜwïDÖšJè²jpÚù‘ˆ è Œ»†ÜŽüRúý;^Ïðÿ1û^×9ª+£[}k?>Õm§Ã"°X X‚ryç§~”û} Py£Ë ²ç3Eu£LÑŽÜ,Gs”\LyaœÏQƒÇ±¨á´ðýÏ™äIm/”3&ËÛ¾ŠŸí }Ÿõó°—s–¢ºh­4k™¢Ëo<.®L‰tO+Žž¼úqëJ–þ’9dIíZ8¿Ö0¹ÈO©ÝÅ?¯Ãù_õóbûœÅÕ -Ú°öæØu˜\Ÿ÷ÖqD¶Z 6éq+À¿Ü‘®VúàÑý¡Où_Ýÿ=Œ»œ­ÐÛÛi×5½ø²|í‡kÜ2¸÷¿Ç¥XK=K‡·àyÓ;¢[‚\c®FsCÇÓWÑþæ%E¾§-EtV‹áËÍ?í¨Ð¬!A}÷òóÙ¾n X–ËA†Ùnex#þì­pB·Ðç<|³‹û¿àØ·Ôåh®©ì´Ä%ÞÝDßê‹\æ»Ï?…/ö~‡ö¿²f´ã>Ožwã×nsGö…?å×Ì=‹îr”WO¨Yiº|>qÓg™,æ'û€u'sÒ™{k¤Úi‹~-CDÆ>ZV\`2yãÍ MÚÉëéþaìdŽnŠê ·‡…¯ÚŒ¶ßf'oöŸ“>™ÝŠ$µðôOI-²4 Õ®p\„|ÜÑõúÊþïø!ì_trôWE©Å¢i¨£…®,à«0f 3ž3ŸÂ­E§ès\Io“$ÑýøÖrY~£9}~¯Êÿ¯˜{{\ä讲ãOÐí6}§É‡yÂy“•Ü}O5A[G3”m2é!óͿڲ…÷mÇH猑Mcàö‹ü?ÌN‹[³ Šè|­)îÞ }.êác.I¢?"7q’ÀœwÀ8¨Õ´sqå¶™t‘yæÜ\3|…ÁÆ8rG½å‡ù‡²}ηÂßò,ÙÿÀÿô6­z«¦A¶™0®Ø×vIþ"{ժꌔ¢¤º™µg`¢Š*€(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+Í“þ@Öÿõöÿú W¤×›'ü­ÿëíÿô¬'üh|ÿCª—û½OXþ§o¢©_¥oŽ•¢©_¥oŽ•Ðr EPzV>­þ¥¾•°zV>­þ¥¾”ÉøsþF—ÿtÿè-]Êw®ßò4¿û§ÿAjîS½!ލæËv²¶  ÿJŽâúÖÖ{x'#–á¶D¬ycþ˜õ©er‰•±!FzdœZbomqÿ0«QµõŸüþ[ÿßÅÿwÙ_ÝKŸöUqúƒM6¯ÿ?—’ñ4ÞÙÏí·ýý_ñª³ÉËF u•cß#º¨qŸ\·Oj¶ÐH?åúçòÿ‰¬Ü\Ùh‘28{9ÂHp¯ˆ™@ô?L 9ß"ë _—SŸ“Mºm\Ïäæ#~“gpû‚ ¹Æ½ÅGi¤ÜBö$B#ò§¹,À¯ÊŽ[oó^+Êá Ö¿è/ÿ/þ5¿áí~þ[;…¹ÔnÉ…òd’c€­Ðg9ìzû~˜äXŒ%9I5¶—ìaý© 9(½?Ìé´këx¯,’O"(¬-$Ž{…™ e‹  ñ’ ù°kjûSûu¡Eš;¹ …”ÚÍâKHJù=›ˆåØŒà zžx¬írå®f¸FŒ$°X]‡@ኩ۴œtÜ@ª&þóû\ÿ÷ðÓ~ß{ÿ?sÿßÃþ4–QkU§¨Õtõ.^ÚÜMº„¶±ÙÂÀ9¥@'ÚáŽH$Ž}yÅ[ѵšæâx­ʼ¼ §zª± ¶W Œ®8=ë#í÷¿ó÷?ýü?ãGÛïçîûøÆ›ÁÉŦ×ãýt¨‘ÑjËw=ô1 î, Bñ1óÀmÌ8Ϲǥ$Âòmq}>âKHJù=›ˆåØŒà zžx®{í÷¿ó÷?ýü?ãGÛïçîûøÆ¡`f•®¿dή i޵ww2|¢4Š‘Êõcí’@ÿ€ŠÏ´[æKÉîô™šöhÈÄ’EåíþÆœs’HçŸaXŸo½ÿŸ¹ÿïáÿ>ß{ÿ?sÿßÃþ4, û¯Ä=²74Í.êÃH¾ÓÝD¬P˜ç þ´²ã'#Ç=±SÏes.§Øù|f%¹‡ ù =kœû}ïüýÏÿøÑöûßùûŸþþñ¦ðU¿2kZÝÿsU±¾k›ï²Û ’úÕmËo "#pÉÏQ†í“ÅGs¢ê yÐ\A"}¢&!á;‘Hë¼du8ÇV¬·ÞÿÏÜÿ÷ðÿo½ÿŸ¹ÿïáÿkQm$'V/¡¿¯XKy=³‹YnaD‚Q˜âGÎF}84£ÎÚ Æí#_5‘€Æ³0‹vÌp¹Ú>¸¬·ÞÿÏÜÿ÷ðÿo½ÿŸ¹ÿïáÿKQ$”–ƒöѽìiI¦ß]»N¶× o”ΛŸl¡‹¤Œ9ÏZÕÒ"¹µk›i­YSÏ’T›r•pÎX g óÜv®cí÷¿ó÷?ýü?ãGÛïçîûøƉ`ªIYµø‰UŠ6"±¿KÛx £y0ßKqö€ë´«‡ÀÆwg/Žª8ôi…„sY³„Óä‚á#u IÙ…Î}=+/í÷¿ó÷?ýü?ãGÛïçîûøÆŸÔêw_Ÿù‡µö/M§ê—òœÄ‹msI3 eV ·~ÃŽÍÈì9¨mÙµ©.ZÎÑV4KDÂHŒ‡d¥› ¤Žn¾Õ_í÷¿ó÷?ýü?ãGÛïçîûøÆ©a'm×õ¨Dj_i­s<Öñº¢ß-¤F0Î< ¤à®sëéN‹LžÈÙ\Ee=Ê¢Ì ^/1 ŒpƱ¡¬Ÿ·ÞÿÏÜÿ÷ðÿo½ÿŸ¹ÿïáÿŸ©Ôµ®¿¥aûXÞö7SNº³²ò±q„²nm‘Iç8àMK¹ jÆ5¦fÈȼ̽ò¼V'ÛïçîûøÆ·ÞÿÏÜÿ÷ðÿ/©T×U¯êÖ=§jO£éÖÿeš)tù!"eJîMÙ^àüÀTs¬zØ.fFd 8ònf…dVv ‘‚÷µKí÷¿ó÷?ýü?ãGÛïçîûøÆ«ê“êÐ{X“E¢ÞKgh^+¦†k ‘ 0†Ld|ÁÀä}Óœ¥n"ϦÏ?Ù̾}Ì+Ì2Àª!†«Zê¢K‹¨-d·K™Ô¼Œ¡BcpÜJdœg“ÀªöÚêéWPËm—};É@̙ߺBï/µRû}ïüýÏÿøÑöûßùûŸþþñ«ú¥KY5øôµ‰§u¦ßnºˆXùÿižEÀtùìÈlxÚqŒõ©a7Ú]ä¦)¾Äò`G+¡ùÞA’…rvà³ߥcý¾÷þ~çÿ¿‡ühû}ïüýÏÿøÒúœíf×âÑt:-nÞ鿆â ší•$VË‘•pÇ$­þ¥¾•°zV>­þ¥¾”ÉøsþF—ÿtÿè-]Êw®ßò4¿û§ÿAjîS½!˜Z§…-uk滸½½W *ª2€w*Hçžµ°PÇo B¯.øË|ÓŒ Ö}ç‰ô› ©m®n$IbÆñöyêÎK‹hf%£eÜ¥N Ç‘LE¹æKx$šV jY˜ö’kžðî½wªËq¡l–òí[›u\üÐ?Ý''ï `þ¡â:ãVÒ^ 4Õgfb•‘¼ ¤qøÖcx_ìšµ•í…Íà ÂÝ]É&èXtRÄà† {Rþ¿¯ë¸?ëúþºÏsâ[{;xcþÏJ¾{gtŽ˜ÎÞÛA8Ïrã?ˆí¦½Ñ&µ·MóÍÑÆ™s%dð95LxFMcL¸³šám­ƒÝÊØÈB‚HÇ#ŒûÖì¿ññeÿ]Ïþ‹z¨¾VšÝW½Ï$Ò¾k7hQº·ÓÔ©;TyÒ)Î0@!pzðÇ·á§sàMÃ^)ѼĒòÆô¼.oÙÀœ€-Ê…=yë^®Es>=²’çÂw6åVïOe¾Øà#FrN9åÝ€A?tVÅV¬ïRW2…(A{¨»om¤ ´à ýØâ@ª;ðÊxž?°x§GÕpW*Ú|ÎÜã?ìjyçç<½XíÉÉ-XÒoDt¤×%¬Æ.¼We&žEÔæ'µ¹T`ÞH(>á-‘óqÆ:×yâvi¥´û"K$€Çþ–|Õf Šgn%NNîH!Ec§ëzï“iªjsݶñ±Æ¨¡F`/‰ë]°Õ*Çš+Cž¶&Ë7©Ô[ê°ÝjÙ|‹*F$ &I ÅIù §' ãÕêËÒ4[=-YíáTb6îîG׿LÖ¥rKsªÆáER((¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šô¯ ȳgÿÿÐÚµë#Âßò,ÙÿÀÿô6­zC (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ æÖ~ ø×\»kw–êÍÞ!…L ã|Ì=IïE­•†‡o´¢8Ì™•¶¡}Ý@Î}0qõ§É¬@ÎV(ÙãQ,§i߉àûñž+×—;VÐ÷håTe†W-w²ëäyì—ÝiNÝÇå^+Ó<=xoÁ­zЧPÔV2ØÂƒœîÇÝÜG|°W-á½5]yP§ú2ò‚z.yëíø×_¬ÜÅ©ëÍ“6úyh‹ÉÇ¡ £9=½ëzU±¢Õ×SÆ›öt¥U;v%F‚¹-²è ŽGÊ äqÏ8äõïZús[M¸‚ á/–¾vw0çÛ×ß“ö«i#H­­Ý.‰$É,¡¿Â $dã¯5ÐéÖÊéÓ8Š ã¹‡ÌGltÉë^ög(Ç–;ÇÔñðqnó©fZ¸ŒG¦EˆÂ+ü¡Pg§¯^ÃŽ•B·5˜âŠð²˜Ì˜M˜Æ0}+¼ŠÊ*~îÇu&Üu (¢²5 (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€=+Âßò,ÙÿÀÿô6­zÈð·ü‹6ð?ý «^Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¹ýÛ/÷Ïô®ž¹ýÛ/÷Ïô  ]ýJý+|t¬ ýJý+|t¦!h¢ŠJÇÕ¿Ô·Ò¶JÇÕ¿Ô·Ò€9?ÈÒÿîŸý«¹NõÃxsþF—ÿtÿè-]Êw¤1Õßu?ë¢èB¤¨æû©ÿ]ÿBÄZ4ÆéO4Æé@dëYšÂ—± $ùƒþ¸ÉZru¬_¼±hsÉï5c™“hÉÜ —Æ;Ô½†­}O Õ£[ïMc¼í‰šÝONN@ ‘Œç¶yÍdø’Ìéºôúu»nPI9A¼†UbUã =3Î*ާªKˆ.n4Ù7$Ó4°® 2†9 ws¸t=FAÁ#“5½Þ¥¯øŠ.žc1Œ-Àh¼°¨â:Ž˜'¹¤ £ÍmJ†#Ú¥Íî6s†<;}©Í‰îXb,FNÒ‘œÏ9sŽ«ŸN9Øu»x †ÄÂ×’KÅŒ’’~îdg'ÐÔ^2Õwj©§ÂXÛZ…@T6:3œþäV=Œ¶r4‹>œæàÆD^K€ŠFI,„ÇoL <åIûTìØbRŸ¹Ðì­®£ºhgµXLŽpäNàH;HãiùAÉ'+Ø{«kw†;yá´jåT)Qœõ=zãÞ¸*4±e–éÒ$¶9ù‡ËÆ3ާðÏJÚþÛžâM¶ÃÊyÉ—Èã·_åô­1êT|Õßsž5h«#¨Ôn^æ8ÚD]x%A‡¾O8þµH0©ÈäÜ2ï`NIè 4µ R’¼TU’ (¢˜ÂŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Jð·ü‹6ð?ý «^²<-ÿ"ÍŸüÿCjפ0¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(®cÅÿvËýóý+§®cÅÿvËýóý(WDÿR¿Jß+DÿR¿Jß)ˆZ(¢€Ò±õoõ-ô­ƒÒ±õoõ-ô Oßò4¿û§ÿAjîS½pÞÿ‘¥ÿÝ?ú Wré uG7ÝOúèŸú©*9¾ê×DÿÐ…11ºSÍ1¨¬k+\tLg)E– pòdÎMkH9ªê8€e28 Œ‚<©*$í4|‘â›9ìµ%–h.KyÇ=p{÷=®¯ÃãDð•Þ³pÌu&59ùÆÞÜnm¤ö )¯Z¼¾†Òkâ4{Gµ²*%“xr ð»pzúÕé'Ñb¼[WŠ3\yž€¶0 ì ¯:x«ÁG•áÉ+Ÿ3Ç™.¾ÕvA3“aPÄçpyôôô®‡ÃZZêWO‹s¼*¦ifÃþŠ6‚yèHÚyçݾӢß²,P™‹˜Æ-‰]Àd®í»sÓ5_hÑZ[It-KË´VÇnßï‚U}Û¢Çvƒ!Ñ×Vp×¾Ö¯4iôÍ<‘pë Iä·®ÒAè:`õ<´í;Ã×:l6ãQY“Q7,@ ëÊìÈè Ïa]óÝhiyöFŠ.åLý˜ì à oÛ·'#Œ÷©o[IÓÂ}¢T¾vª[ïc޼('֓Ǧ­Êõ°w½ÑÇ  9ã™f1æ©óÆzÑ]L×Ú7¤fÕéíouq-µÆ™k ñ¢I„Û"•làçhçƒÚ“R6ÖRÚÅŸe$—TyÌ#Qž»Oò¥õõÍË˯È=Ž—¹ÊÑ]>©qg¥ÛBϦ[Ëq!‰ÂŒ€Íœt¹È¢[­8k ¦ÅibÓ yžc"žp«‚Xãœp=é¬uÕÔCØùœÅ×iÑ[]G:Oej'‚f‰öÄ8äõR :VÒ¢¼[Cm€;VذPz az¤Tÿh+Û•Ø>çEt±^é ohn ˆ½ÀM²Ebþ[郴ãèNjÊM¢É|lÒ+s6JãÈùK 60HôÎi¼}¾Ã±ó9+­’;oíx¬ã³µØ"3LÍàg Ôçòª¶×–—±ß<]°[b64¥QdR3¸§hïߊ=5~Pö:Úç9Eo®£húBÞ®™e¹® ¨Žq¸>ÞW߯oeÀ=¢HG+¿*3ùQ,zŽñüQ¿S‰¢º’о²ö0é¶ ±gwp­†ÏÝ]‡8Ǩ¨b¼µ–ñû&µ–g·Š—,ëœåqÀ;X“Ó¥?¯/åüP{3œ¢º’s=ͰѴåš<íÈþ`ÎxR6/'éZ¶¶ú}ݤ7ÚA²T¿»Ï¥)cÔUÜToÔ⨮ïì_óéýûáGØ,¿çÒûö?§ûJÊ?`ûœ%Ýý‚Ëþ} ÿ¿cü(û—üúAÿ~ÇøQý¥å`ûœ%Ýý‚Ëþ} ÿ¿cü(û—üúAÿ~ÇøQý¥å`ûœ%Ýý‚Ëþ} ÿ¿cü(û—üúAÿ~ÇøQý¥å`ûœ%Ýý‚Ëþ} ÿ¿cü(û—üúAÿ~ÇøQý¥å`ûœ%Ýý‚Ëþ} ÿ¿cü(û—üúAÿ~ÇøQý¥å`ûœ%Ýý‚Ëþ} ÿ¿cü(û—üúAÿ~ÇøQý¥å`û—ü-ÿ"ÍŸüÿCjתú|iŸ FŠˆ7aT`MX®øKž*]Ìš³°QEB (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ æ|_÷l¿ß?Òºjæ|_÷lÿß?Ò€54Oõ+ô­ñÒ°4Oõ+ô­ñÒ˜…¢Š(=+VÿRßJØ=+VÿRßJäü9ÿ#Kÿºô®å;× áÏù_ýÓÿ µw)ÞÇTs)1ü£$2¶=pAþ•NÿZ±Óo-­neÛ%ÃaxáG«z ñþM\™™cùN°P}2@ÏëLCÍìXäL=¼—?ҘװzOÿ~ü)ÿb‹´ÄúùÌ?‘¦5”³ÿß÷ÿîá?Ãqÿ€òñ5^lÜ•)‚8ƒHÎèSŒ @?ş¬½¤#ø®?ð"Oþ*±|Iº×ÃúˆŽY rÙÎ…]Ë>S° ž„þu.<Ë—¸Öæç‡ÕÝíè[µ´±Ëk+ •* a¸èH>½}h} VÕeÑ%‚yRgSw*le Ñå~TœW™xbXmüOe$ÅvÈå tÞK0ùqÁ îÛÈǹÆkÖ1ÅxXÿi‚¨©·}=?­‹©]EÙÇúûŒ˜!¼µ½Š@ZÖ Én æ9€Áø9]§–ÆA9ô©¢ÐõjÍ-šZÌdfÂmÝó/7Þ<}k;FØ[^Ù²GoÄG™œFx¬I\?6>•æOvÚÇ­4ÚªƒÇ=ø®WRMÝ>Áw=.ÓH¹´ƒS·7"hî²ñ¼˜ —   gSV¥ÊèB΄W+n#YE`¸Íy9·PG €{‚krÄbÎ1Ç~ŸS[P¦ëÏ–öë·m ªÇÙEKúÔé!еf7käyë:J±Éu$¡€FC—eÈûÙèzVž¬“,®|²Ïm:Jé[Œlw8 Oá\…Üð-´Ü¿ø'/µVµŽ¬é×SkP^I ¤)9DÄÉ( €åç©ä ±ie, $‚)f¸™œNÒ¸Tœzž~µÆQRòöÕ¹¿ø#öÞGIi¥ÜiBâêÞÚÑn®d‰ 6éˆãŒ7>™8,sÇn*þ­mqu“ ­•°!…Óܧ?¥q”SxÝÜ¿ø «[dt7^š[Ž-Fq8‚(Nvl`‡9åIÏÒ¤¸Ñn亙RHZÚâx§y‘*2mÎ9Ú9ÈÆOÍQOêSþÃþ½ªìu?lYÞxàÂ^^³?˜¤‰Sh>Ä•I§ÝϪCqj"‡iPó‰˜3(9(P ¬= 6œp:wõ§ÙhRZê[äU–æŽCu.T¶Oú¯¹üDgô®nŠo'ö¿ø"ö«±Õ_Y4Ú»£VÛCIT*I냌†?•%¦™}§O{47"äËåˆÒr¨0£%l 娥õks~ðGí•ïc©‡N½‚ÒãýÆi®g2¼ÄD €0Ó“Æz äÔš]µæœ¶¶EchJò:ƒ„bÀª/°Žé\•<jÎ_‡üöÞGW¨i×W×ð·“f‘E*H.70 A ¸éסéQÁ£ÝÇw nðýŠÞåîc Ÿ1‹n‘Œ sÎÌQBÀÉ+)~ðAÖO¡×fÓ­5;§_:y¤ic‰ ‹ÓÐÖ­é¶ÆËKµµc–†%B}ÀÅpÔT¼½µnoÃþ{#Ðè¯<¢§û3û߇üýcÈô:+Ï(£û3û߇üúÇ‘ètWžQGög÷¿ø!õ#Ðè¯<¢ìÏï~ðCëG¡Ñ^yEÙŸÞü?à‡Ö, xnðž‚ óÿ€òÕë=7ìWº…ÓKæÉy0“îãb… ¯8Áüé׿vßþº7þŠ’¢Sä7mF·<ß@ñƼ¶ÓnQ­ˆ”3ÆärVåºt×P𦵠›ÈmceݲÞ– eŸê%Q^Ñæ…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@•áoùlÿàúV½dx[þE›?øþ†Õ¯HaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP\Ï‹þíŸûçúWM\Ï‹þíŸûçúP¦‰þ¥~•¾:V‰þ¥~•¾:S´QE¥cêßê[é[¥cêßê[é@Ÿ‡?äi÷Oþ‚Õܧzá¼9ÿ#Kÿºô®å;Ò^çN³¼¸·¸¸$–Ù·DÇøOùý@©¦û©ÿ]ÿB%G7ÝOúèŸú¦"Ѧ7Jy¦7J«'ZÅñ-Ì–zÅÔLHbšDb3‚ ”ƒÏÒ¶¤ëT5ˆ¡ àïý%&“Vc<µïuMMiu‰„.Ë,ih¾@Æ:gïàç¡?­rú¥„Vš˜¢"9cÜŸqÜÍŒóÜ~–Õ­ÊXÙ]« ™"Ó§’Ýå °¹*8Ç\VN©¬h³ÝÃÜ“—‚^E[†+ƒ¸­³œ&O~˜ÁTèÒ£SŠ^†nR“ÔΔ "tã$qŸZæ™J¹wÀÍ^¸¸Ô.®Ù-mn-à$cxøßüŒÓ´¯ êZíãǹ1ª’ÍAëÓ#>˜ÎyÏ4:‘½ŽŠXj“WKAºL²¥êà äv²J ùŒR8è9®¢Ú]QAŠ Û+ÆÁÇïwèEe'‡-t›–µ)t“½4±”* ýÝÏÞÉãuÌ·–v–Ì»ãž_›,Uö†t=yÀà×&œfùR†t×+êt°ÿj¢‘öx.b?t]8òÇZŽ}^k[‡ŠëOuXÆYáHÉ{îžž¾•Ÿáí,ÞêQ*_Mlg] ¬›Œàdg=8õjêÓW‹P+íż*A-=ÁÀ¸üÖˆ¶ŽK2£å F0ätî? òTcó6zœ¹-±GRÔÖkdŽöYdhþx•†J“׿ê3õ5„’­Ì…eó W!˜Ær€@á³êyëV5Kß.{˜íÐ’I°Iö=½I½^vÑm!6n­=áB#0’ÌŒ‚Øá@ÈûØÈéD¥®†‘«8Ç–å‹c ’8E bßuœõ ~‡ô¬k­InäŒË“ÊnÇ®ëÓ†+£·Ñ®ä_0^½´£¨Šïí‚x&®[é f»ã™^P JÍ÷˜÷Æs׃õ>ÂIs4\qÒ½”¿#þÏñ ^Z‰/€FÌvÄ£€Áã ߚ؎I¥Ró†Y¸f @ÉÆHàñŠÕ¼xí@iq½È©‚ÄûtéŸóÅf– I ´ØÅm›½ŒëV”Ò‹èQEls…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@•áoùlÿàúV½dx[þE›?øþ†Õ¯HaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP\Ï‹þíŸûçúWM\Ï‹þíŸûçúP¦‰þ¥~•¾:V‰þ¥~•¾:S´QE¥cêßê[é[¥cêßê[é@Ÿ‡?äi÷Oþ‚Õܧzá¼9ÿ#Kÿºô®å;ÒêŽoºŸõÑ?ô!RTs}Ôÿ®‰ÿ¡ b-ct§šcPY:ÖV¶q¦’1œKÔgþXÉZÒ £{Òßþº7þŠ’¦NÊãJúya¨%•±„B¸Ž =²IãÓõÎ*-Jþk¹óŽ‘ãs·ñã¯rxíÔÖž¡â‹MBö$žÇýGjàùÓåAùHn¼ãîšÔ—[·†ìÀaœªºE$Ê£dnØÂ“œ÷ÆEsC4«­ üÿàXHIݳŽûñ“nà8* ûšµàX#ãVAÁæö'9ǵt£\ï‚à£ÊÐ-ÆÕò˨$΄óŒqUáñ1Ù@å.îÙÖy]c\¢â` “ÅgW1•WyS×úò.u ŒÔµv“C¨OÇ÷#U@£œö_æx튘j\\y××w’¶íøi ¢°P«øÔÖûköëtb\4Jé\(Sg¯|ó¸sŽõb÷RK)"ˆA=ÄòË Ú1“ÉŽýë'Žz.OÇþJŠß˜ÃU¶´¬xÉØqøÓ›Xµ â93Ž2£üjôž$´EGÌÑy"w’5\F„‘–ƒÆ@¥]Ôï¾Ã¦És‡“bSÑŽ~dUË1›÷\7óÿ€Dp±N霵ÕܼR‹:Ãp8ÏNüU&‘åbòcsrpk©V»—Ãïw¼Myd–2ûUrÔ㎞â´mnm6–L»Ä²NäŒàf£ëÜŸcËøžÆýNŠéçñ‚XcŠÆ;ímÜ&üfNí½½}jÞ§u4vöÑÂLSÝL‘@%3Ëã øÕý~WIÃ?øö+¹ÆÑ]·ˆ$“VŽÚWµlò@-ÆDÑí†nyo ê95b-Rô¶ª%´@Öˆ(‘·3åIÁ>§¿Z:Kì~?ðQMÚç+EuZ­.¦Ó†–ÚxÑQ„ÖêBå%$ò8üú ³«Ü^ZZ=Å´–±¤HÎæáXçÁϯéIãÚ—+ãÿ«¦q”WIy¯¼/oÕ¶‘ Yçyby{½9’@«³ßÝG­ZZˆcû,áÿz[,H\ð;­?¯I}Ç·È=’îqÔWi¥ÜK*ÜÁ;ï–ÚvŒ¾Ü0OÌ?*Y5$]Kì)ÒH;ºmÛ$€NH'¡è Oöƒ½¹?øögEuëž]®žZÚòà]„ 0XÆâ}T6F'¬Å­[Ëz¶ëáF‰'*<·uÎTç±íŽ5O%ö?øö+¹ÇQ]Œ÷2ëÎÚUŒGnerɸcµApÇ‚: ¢5=M-5I˜ÚÌ-NÈš8C8ûÙÎ@ÈÈ4,{gñÿ€™ÎQ]<šÛ[éqÎ'‚öY¦ò¢6ð¸Pq“•›€ 8­-:çív1ÍçG19ãBƒ ãI$Ó”±î*îüTSêpÔWS6·dÙ#¤QÄè’I$.Á™°B†U8#’zž•b+ë¦×¤²–ã€AæFÁ²Íóc'°Ôþ¿/äóßþ{Ü㨮ŽÓQ½Ô-¯^ZÇrŠå X É v–ÜÇ è:Ö͕Ƚ°·ºQ4jàzdf”³ãøÿÀFýNŠô:*?´ÿ»øÿÀÕüÏ<¢½Š?´ÿ»øÿÀ«ùžyEziÿwñÿ€Wó<òŠô:(þÓþïãÿ>¯æyåètQý§ýßÇþ}_ÌóÊ+Ðè£ûOû¿üú¿™ç”W¡ÑGöŸ÷øõ2 ȳgÿÿÐÚµê?øò‹ñþu5zP—­þ¥¾•°zV>­þ¥¾”ÉøsþF—ÿtÿè-]Êw®ßò4¿û§ÿAjîS½!ަJ¥Ó À†õ?ÒŸE1 7OŽmfϱOþ*˜nŸþ|î?4ÿâªZ(«O!ÿ—ŸÎ?þ* –)®c D‘†`‚ÌÅJŽ„Œ`šÑªÚרtÛ«°»¼˜šM¾¸©’\®åFí¤ŽNçÃr\çÌ‹-ĉ,N"9…Õ@zôö늼,çVkï"ÝÌŽ¯ šÈ;n‘³•è=k ‚Öêævµû…ºXcšH¢ª¹`¸Ü§º7rx«?Ø·ßô¼ÿ¿Pÿñç¬+[7øŸ‘ÒÜvm~?äqp躸Õám¦M: ™.’5ÎX7†$Œ±à¨úÔëá[Èm’k©#Ýl¶Ó±·Ý½FpWŸ”ò}~•ÖÿbßÐ~óþýCÿÄQý‹}ÿAûÏûõÿMá[ïø˜^7¿2üÈæO†d\C‘RY¡‘G”NÑA޼çg_z±}£ÞOs Õ«µ½ÄJÑîh ŠU±FGp9ÍobßÐ~óþýCÿÄQý‹}ÿAûÏûõÿSõ7{ëøzw(¯´¿ò9dð¬‘ÚÜ@.&³û.Z"H9b_ß%úU›ý]A,â”ΰ۾öXÃ+9 óÁæºì[ïúÞߨøŠ?±o¿è?yÿ~¡ÿâ)ýQÞ÷‡ù‡4™~?äsvÞ’Ñ5¢kƒ ØÎÙ9F+‚w“ž?*±&;è§NÌËû'ÍT Ž1šÜþžÿ ýçýú‡ÿˆ£ûûþƒ÷Ÿ÷êþ"“Á·«¿áþcRŠûKñÿ#ƒÂ7VÙ–ŠÄÉ*y6E#T¯)»œ†=Åhjzuô–Ö²ÇËqm2K€›wã†ÆzpN9®ƒûûþƒ÷Ÿ÷êþ"ì[ïúÞߨøŠoÛ»¿áþb¼R²’üÈÀþÆ»—SK˧yÞDK ULŒdòwqž'ŠI´gmKwœú5ŒíB aHÎ{õ®ƒûûþƒ÷Ÿ÷êþ"ì[ïúÞߨøŠ_S~‡ùš?Ì¿ò9dÐõ[w’á%u'“d·òÔF­“Á-“‚GòÅYÔôkûé­^¬ \Ç-³H¬Ý‰—§8ÿëWAý‹}ÿAûÏûõÿGö-÷ýï?ïÔ?üE?ª;ß[ü¿ÌWŽÜËñÿ#˜½ðõõÛ»‰Ú'žÜ[Üí·$:óÊäü§æn¹ëW$Ò%{»)•$Uµ ùdîÊã¯jÛþžÿ ýçýú‡ÿˆ£ûûþƒ÷Ÿ÷êþ"—ÔߟáþaÍæ_ùŦ›ª¤¾’ðý¢í¥ äˆÂmUúð§Š’ÿAº¾¾·œ•!e`E±óFHžèF+£þžÿ ýçýú‡ÿˆ£ûûþƒ÷Ÿ÷êþ"ŸÔõº¿áþaÍæ_ù¥¯†õ+9í+”e¶`U’ÑŽñ‡'^”ë? -M®’ÞC#H7Y9KdœIž™>8Íu?Ø·ßô¼ÿ¿PÿñbßÐ~óþýCÿÄSxY>¯ð Çù—ãþF é÷‘ë©u´°¤;~éS¹OÓ–•ÚEí–”¶¶îDã$Ìð É%r:ä÷­ïì[ïúÞߨøŠ?±o¿è?yÿ~¡ÿâ*~¥¥µü?Ì9•ïÌ¿ò9q᫱™ç?Û~ÓöŸ;ìçfí»q³=6ñ×>õ5Ž‘¨XÏïÉ;yxß+0 Ø›¿§Z迱o¿è?yÿ~¡ÿâ(þžÿ ýçýú‡ÿˆ¦ðèïø˜sGù—ãþG3qáË™îæe’D¶žXæš$’̘Æ<µsÁéÚ®*í_·m“ýG“³Ë?ÞÎs[?Ø·ßô¼ÿ¿PÿñbßÐ~óþýCÿÄRú›}ÿóhÿ2üÈååÒ5XÞkç&îé`h`Ž8<¡óÉÉ9äNüV•Ž›5–Ÿoj"ˆcTÎÓÎ+[ûûþƒ÷Ÿ÷êþ"ì[ïúÞߨøŠ êÎÿ‡ù‡2½ù—ãþE³ÏÿÏ?üñ“þù5ûûþƒ÷Ÿ÷êþ"ì[ïúÞߨøŠ?³×Ÿáþaο™~?äPû<ÿóÆOûäÑöyÿ猟÷É«ÿØ·ßô¼ÿ¿PÿñbßÐ~óþýCÿÄQýž¼ÿóuüËñÿ"‡Ùçÿž2ß&³Ïÿy¥KˆgpòÚÎд€c Àã· *ÝzTÒPIt9¦š“¸QEd…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@s>/û–ïŸé]5s>.û–ïŸé@š'ú•úVøéX'ú•úVøéLBÑE•«©o¥l•«©o¥r~ÿ‘¥ÿÝ?ú Wrë†ðçü/þéÿÐZ»”ïHc¨¢Šb (¢€ Îñü‹šŸýzÉÿ šÑ¬ïȹ©ÿ׬Ÿú ©ŸÂÍ)|qõC4ïù¯¿ìeÿ¡ÜVíbéðʾ#»˜Æâ'Ó­\©ÚÌr@>£rçê=kjšØ‰nŠ(¦ ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š( NÿÍ_þ¿þŠŽ¯Ö~ÿš¿ýýhVtþjßÝùQVdQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEÌø»îYÿ¾¥tÕÌø»îYÿ¼¥jhŸêWé[ã¥`hŸêWé[ã¥1 EPzV>­þ¥¾•°zV>­þ¥¾”ÉøsþF—ÿtÿè-]º¶+ˆðçü/þéÿÐZ»jC¿ÚþÔÊ(ûý¨ßíL¢€¿Ú™*Ç.û–Ÿïé]5s>.û–Ÿïé@š'ú•úVøéX'ú•úVøéLBÑE•«©o¥l•«©o¥r~ÿ‘¥ÿÝ?ú Wm\O‡?äi÷Oþ‚ÕÛRQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW3âï¹iþñþ•ÓW5âï¹iþñþ”§¢©_¥oŽ•¢©_¥oŽ”Ä-Q@éXú·ú–úVÁéXú·ú–úP'áÏù_ýÓÿ µvÕÄøsþF—ÿtÿè-]µ!…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@s^.û–Ÿïé]-s^.û–Ÿïæ(ODÿR¿Jß+DÿR¿Jß)ˆZ(¢€Ò±õoõ-ô­ƒÒ±õoõ-ô Oßò4¿û§ÿAjí«‰ðçü/þéÿÐZ»jC (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ æ¼]÷-?Þ?ÌWK\׋¾å§ûÇùŠÓÑ?Ô¯Ò·ÇJÀÑ?Ô¯Ò·ÇJbŠ( ô¬}[ýK}+`ô¬}[ýK}(“ðçü/þéÿÐZ»jâ|9ÿ#Kÿºô®ÚŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¹¯}ËO÷óÒ×5âï¹iþñþb€4ôOõ+ô­ñÒ°4Oõ+ô­ñÒ˜…¢Š(=+VÿRßJØ=+VÿRßJãtu-®]âCò˜Gü³Èe ø+Oû.Oúäÿ¾ÿT¼»[ºû—ùßö\Ÿô5Éÿ}þ.ì¹?èk“þú?ü]tžTŸóðÿ÷Êÿ…TŸóðÿ÷Êÿ…V§Ûñæ]­Ý}ËüŽoû.Oúäÿ¾ÿGö\Ÿô5Éÿ}þ.ºO*OùøûåÂ*Oùøûå«Síø¿ó®Öî¾åþG7ý—'ý rßGÿ‹£û.Oúäÿ¾ÿ]'•'üü?ýò¿áG•'üü?ýò¿áGÕ©öü_ù‡×kw_rÿ#›þË“þ†¹?ï£ÿÅÑý—'ý rßGÿ‹®“Ê“þ~þù_ð£Ê“þ~þù_ð£êÔû~/üÃëµ»¯¹‘ÍÿeÉÿC\Ÿ÷ÑÿâèþË“þ†¹?ï£ÿÅ×HU‘£ýë¶[1ОÃÚ¥£êÔû~/üÃëµ»¯¹‘ËeÉÿC\Ÿ÷ÑÿâèþË“þ†¹?ï£ÿÅ×SEV§Ûñæ]­Ý}ËüŽ[û.Oúäÿ¾ÿGö\Ÿô5Éÿ}þ.ºš(úµ>ß‹ÿ0úínëî_ärßÙrÐ×'ýôøº?²äÿ¡®OûèÿñuÔÑGÕ©öü_ù‡×kw_rÿ#–þË“þ†¹?ï£ÿÅÑý—'ý rßGÿ‹®¦Š>­O·âÿÌ>»[ºû—ù·ö\Ÿô5Éÿ}þ.ì¹?èk“þú?ü]u4Qõj}¿þaõÚÝ×Ü¿È忲äÿ¡®OûèÿñteÉÿC\Ÿ÷Ñÿâë©¢«Síø¿ó®Öî¾åþG-ý—'ý rßGÿ‹£û.Oúäÿ¾ÿ]M}ZŸoÅÿ˜}v·u÷/ò9oì¹?èk“þú?ü]ÙrÐ×'ýôøºêh£êÔû~/üÃëµ»¯¹‘ËeÉÿC\Ÿ÷ÑÿâèþË“þ†¹?ï£ÿÅ×SEV§Ûñæ]­Ý}ËüŽ[û.Oúäÿ¾ÿGö\Ÿô5Éÿ}þ.ºš(úµ>ß‹ÿ0úínëî_ärßÙrÐ×'ýôøº?²äÿ¡®OûèÿñuÔÑGÕ©öü_ù‡×kw_rÿ#–þË“þ†¹?ï£ÿÅÑý—'ý rßGÿ‹®¦Š>­O·âÿÌ>»[ºû—ù·ö\Ÿô5Éÿ}þ.ì¹?èk“þú?ü]u4Qõj}¿þaõÚÝ×Ü¿È忲äÿ¡®OûèÿñteÉÿC\Ÿ÷Ñÿâë©¢«Síø¿ó®Öî¾åþG-ý—'ý rßGÿ‹­ë{«Hm¢‰ïâ‘‘—.2ĽjÝp¥kÔέz•U¦ÿ¿"·YÏÜ?÷Ø£íÖ_ó÷ýö*z+C·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø®Å2$ðÛÉ ¬ˆ´²œŒžß¥tõ…â¿ùÅÿ_ ü[Ñ?Ô¯Ò·ÇJÀÑ?Ô¯Ò·ÇJbŠ( ô¬}[ýK}+`ô¬}[ýK}(“ð÷üŒ“ÿº?­tÖºšB¢¬ q3,ŠØØ…‚î'·'_ιÿÈÉ?û£úÖŽ¹á뫘ï&³½¸2ܼe¡Ä{p¤t,¹N3×ëK¨úu]bïKó'm7}ŒEwÍç€Ø8TÇ8Ïr+NâIRÝžDÒòÆ_nÕƒ{£&¬‚}:æöÊÙPŲH”K'wpXtì1ŒóéZ’\ÞmºÙŒê›DJ&LÌùºð1îy£ u(¯ˆÌv×íwfcžÍ‘8¤gÆÐ­ÎHê8«Zv©5ÍÜÖW–Ÿeº‰M‚O1Y p;‚†ºä–š€¶³[â–ÞͤyˆÛ‰;rvãÓ5­§[ÞO¬Ïª^Z›\À°GH®Ø±$®GSÇÒŸõý|Ä ¬ÝÜ]\E¦i¢ê;wòä–IÄJ\uUàç…Z½ìzŒv6ÚtrÌm¾ÐþeÎÀ¼ãtæª,®’5 k[»†âI&†X¦DhËòC#¡î3TçÒ.ÞîÂ{í#ûSfž°ÈHÉç$üäg¿"’þ¾çú¿õÔܵ֒ëA“T²ÒBÑ–”È Áj–›âtï¶ês"+²*,v“)†vÙ/õQŠ[-.ö ^Ù¼ad•eò-Ä›„JÀíMÇÓò©.tû©,4H–,½´ð¼ÃpùB©¿?…>¿wütûÿà§×´ëh¢’YDª]WÉrÛGRT î@§\ëšm¢DòÜ‚&O1<´i OïaAãߥekUËëŸoŽÞææ-Ä,–×fR 9ûÊ9õªÓè3[]ÛÏmevößdX ÷Æ)" “ÉÜ}{Rþ¿1@–9â·š'WØ2²œ‚ ¶ RÔ|A¦éW ¹Ýe)æmH^L.q¸íëSÙÛGgaeoFŒ€#-¸¯ÊÜg½Skƒâ¹/|¿ôf°‡Ü9}äãzP÷ÐÚÌ?Ú >ÕllźÈV-·'æÏÝÛŽÝiÚˆ4ÍRo&Òáš]ž`G‰ã,¾ª q\´=þŸ£Ì÷Pyk‚Öîw©Ã‚ÇNý*ö“£©O¡\ͧ›K{ r|Æ•XÌY€¡O¿8íÅ;/ëçþBþ¿þf”ZíâjÖÖZ†—öUºäºÜ Ê2C8ãКѷÔìî´Á¨Ã8kM…ü £98<ö5…£®¦Ú«Þêz5Ⱥ”²,¦hLpGœ…Pžp2q’}…l¦Õ´9`¾·6rÜÄñÉ9Läu9¤öS<],“·—¥Hð¨ÜÛYŒŠ¸ÝÈ °s´¾ïlñWõfòÞÔ^XiËyh óÚcr#qŸ”`’qÏ8õ‘imâKžÞXÊÎÅßiŒ9\ ¿pgiCéžõ.£§ßÅŸ¤Å§ÜÞið(›É–430à+naòñ“޹Ö@^e¹¼I,z^œ×’Éj·n¯(‹dg èrÇž=ºÒ^x®(4›=BÚÊâæ; ŒV0Ìæn€äô?Σ¸‡TµÕŽ©e¥™¾Óf°=¹™¡u$®NpGÌAÁ=;ÓfÐn¡ð=¾“\Æa-†$VlŽ:ÓVüWÿZÿ_#GZÔït¸â >;‹x£2Jïr#  N>”ºŽ´¶>:º@Ò/–’˜ì8b8<uª¾$·’þ²ê)·trùÈ‚7äg’cÔf™ªizÇÿ³‹}«PòcWmÀo`W''‡­ Ì}QnóÄúFŸu%µÕÑŽHöù‡Ér©»¦æhϹ©-|A¥ÞGrðÜœ['™(’'B«‚wa€$py©h××ø¡c·Üo¢mþuùȼsëŠ]fÆågÔ¯Zø,q޽*[·õä4¯o뱯§øƒLÕ'òm.KK³xI"xË/¨ G¸¢ßÄ:UÕð³†ì4IJ¯ÈÁ\¯P¬FÖ#ØšÃÒíµVMy¬M•½•±ýëJ¬e-P)àw縨´Oe-•µöŸxæÍ‰Žëû@´€Â2ùƒŒmã&©«;ÕÍiüOe6q>Ÿr™ˆ¯ïg·—ÊåÂðBüÞœf®Ýëš}ÚZÝLñÈå@c ìÉè ãhϹ¬OìmCþüzgÙÿÓ\ǽ{J®qÓÞªxƒHÖµ «èü‹Ëˆä’3jÑ]ªC ¤‡Œ°ÉÈ'8=¨ëaŸ}=Æ»«ÚÈÀÅlÑ€7&Oך®ÚííÍåÌ:N”/"¶s³Ip"R㪯8üI§ÙÝ[x“VžHÑ®„O¡‡U]¥Hëžþ•JÒ-[A¸½‚ -¯í'¸{ˆ¤ŠtFBç%X1yâ—ù£wâ-3O•`½¸ϰ<ˆœD÷™A =Î*Ž©¬][j7ñA"ùPéMuÊÏ–ÁÏqÀª×6z¼êâ 1nWUE!ŒÊ-å„*ùäŒü¹ïM—Ã÷ñKäD‚hŸF6bàmgƒÎ{f‡·õÙ_z5á!²²Óì¤Ô.žxR©9Æ[ =zT×^ ÒìÒ–ëp¸O2! 4¥×ûÀ 'õÍI¢jBâÎöK É3`–ÒÛÚßù2FÈO9”çÖ§ki<;z—V¶*öÇOX tíö’z¹å~nH=©É«·ëú“Ù]¹|K¤Coo;]æ;ˆüØü¸ÉOï =È­8fŠâæ…ÖH¤PÈêr„Wžéz-é±Òµµ»¹†M9!h­oM»¡°?yC) ë]f“2Z]G¢AdÐÃmf’’eÞc,H}zsEº]A>¿×Bͦ§ö­cP°òvýŒFwîÎýàž˜ã¦_x‡JÓn~ÏwtP¡˜fBÄ{œV`¦â]Vê-{È.„;)¢_º¤†`{ÔWVzµ½Æ°-´Átšª©Ó"ù-°!Wò3òç½'äWS^ÿÄ:^™2ÅupÁÚ?4áy0ŸÞ;AÀ÷4]ø‡K³HK ßhO2!4…—ûØPN=úU?F¹²Õá,<È"Ò’×ÍÈù[Ó¯JÍÒ4½_C[+‘§¦6 k4)2+ÄÊÌA¤ÝjõøÿÀûÉþ¿/ø&ž—âH†´ýCSœ,·@í fs“÷UA'ØUé-Q1[Ï%º¬²ëúXUÁ¦ÆzÓ8îiîÿ®ÿå¨tþ»Ÿ©Ùê°4Ösyˆ¬Q²¥YXv*@ ýE[¬.ÊâÛXÖg–=±\ÏÄrà#PNNAëZÔ†QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE…â¿ùÅÿ]×ùݬ/ÿÈ./úî¿ÈнýJý+|t¬ ýJý+|t¦!h¢ŠJÉÕ17Òµª•ä[Њâô)â)˜ƒ™8÷ö®ÃÎOWÿ¿mþÈj6—vò¼¶’É „`²W9qsâec³Uºê?ÂÏRó“ÕÿïÛ…rz¿ýûoð¯$ûgŠÿè/uú…lñ_ýî¿Oð [ó“ÕÿïÛ…rz¿ýûoð¯$ûgŠÿè/uú…lñ_ýî¿Oð [ó“ÕÿïÛ…rz¿ýûoð¯$ûgŠÿè/uú…lñ_ýî¿Oð [ó“ÕÿïÛ…rz¿ýûoð¯$ûgŠÿè/uú…lñ_ýî¿Oð [ó“ÕÿïÛ…rz¿ýûoð¯$ûgŠÿè/uú…lñ_ýî¿Oð YgWh‚î8|œ£ §Ô{Ôµä?lñ_ýî¿Oð£íž+ÿ ½×éþë’F’ÆÑÈŠñ¸*Êà ƒÔB"ÆŠˆ¡QFT`è+ÈþÙâ¿ú Ý~ŸáGÛÙâ¿ú Ý~ŸáE‚ç®",h¨ŠaUF‚^CöÏÿÐ^ëôÿ >Ùâ¿ú Ý~Ÿá@^¢¼‡íž+ÿ ½×éþ}³Åôºý?ž½EyÛëM ¹_¡#Šò϶x¯þ‚÷_§øQöÏÿÐ^ëôÿ õà€:EyÛÙâ¿ú Ý~Ÿá@½EyÛÙâ¿ú Ý~Ÿá@½EyÛÙâ¿ú Ý~Ÿá@½EyÛÙâ¿ú Ý~Ÿá@½EyÛÙâ¿ú Ý~Ÿá@½EyÛÙâ¿ú Ý~Ÿá@½EyÛ†þÑûÂíÿ¼+çŸøLuÿú Ëÿ~ãÿâhÿ„Ç^ÿ œ¿÷î?þ&‹ô7öŒÞhÇýá_<ÿÂc¯ÐN_û÷ÿGü&:÷ýåÿ¿qÿñ4\¡¿´cþð£ûF?ï ùçþ{þ‚rÿ߸ÿøš?á1׿è%/ýûÿˆ¢à} ý£÷…Ú1ÿxWÏ?ð˜ëßô—þýÇÿÄQÿ ޽ÿA)ïÜüEèoíÿ¼(þÑû¾yÿ„Ç^ÿ ”¿÷ÄüEð˜ëßô—þøÿˆ¢à} ý£÷…Ú1ÿxWÏ_ð™kßô—þøÿˆ£þ-{þ‚Rÿßÿñ\¡´cþð£ûF?ï ùëþ-wþ‚RÿßÿñÂe®ÿÐJ_ûâ?þ"‹ô/öŒÞhÇýá_=Âe®ÿÐJ_ûâ?þ"øLµßú Kÿ|GÿÄQp>…þÑûÂíÿ¼+ç¯øLµßú Kÿ|GÿÄQÿ –»ÿA)¿ïˆÿøŠ.пÚ1ÿxQý£÷…|õÿ –»ÿA)¿ïˆÿøŠ?á2×è%7ýñÿEÀúûF?ï ?´cþ𯞿á2×è%7ýñÿGü&Zïý¦ÿ¾#ÿâ(¸BÿhÇýáGöŒÞó×ü&Zïý¦ÿ¾#ÿâ(ÿ„Ë]ÿ ”ß÷ÄüEè_íÿ¼(þÑû¾zÿ„Ë\ÿ ”ß÷ÄüEð™kŸô›þøÿˆ¢à} ý£÷…Ú1ÿxWÏ_ð™kŸô›þøÿˆ£þ-sþ‚3ßÿñ\¡´cþð£ûF?ï ùïþ-sþ‚3ßñÂe®ÐFoûâ/þ"‹ô'öŒÞhÇýá_=ÿÂe®ÐFoûâ/þ"øLµÏúÍÿ|EÿÄQp>„þÑûÂíÿ¼+ç¿øLµÏúÍÿ|ÅÿÄQÿ –¹ÿA¿ï˜¿øŠ.ПÚ1ÿxQý£÷…|÷ÿ –¹ÿA¿ï˜¿øŠ?á2×?è#7ýóÿEÀúûF?ï ?´cþð¯žÿá2×?è#7ýóÿGü&Zßýgÿ¾bÿâ(¸BhÇýáGöŒÞóßü&Zßýgÿ¾bÿâ(ÿ„Ë[ÿ Œÿ÷Ì_üEèOíÿ¼(þÑû¾{ÿ„Ë[ÿ Œÿ÷Ì_üEð™kôŸþù‹ÿˆ¢à} ý£÷…Ú1ÿxWÏð™kôŸþù‹ÿˆ£þ-oþ‚3ÿß1ñ\¡?´cþð£ûF?ï ùïþ-oþ‚3ÿß1ñÂe­ÿÐFûæ/þ"‹ô'öŒÞhÇýá_=ÿÂe­ÿÐFûæ/þ"øLµ¿úÏÿ|ÅÿÄQp>„þÑûÂíÿ¼+ç¿øLµ¿úÏÿ|ÅÿÄQÿ –¹ÿA¿ï˜¿øŠ.ПÚ1ÿxQý£÷…|÷ÿ –¹ÿA¿ï˜¿øŠ?á2×?è#7ýóÿEÀúûF?ï ?´cþð¯žÿá2×?è#7ýóÿGü&Zçýfÿ¾bÿâ(¸BhÇýáGöŒÞóßü&Zçýfÿ¾"ÿâ(ÿ„Ë\ÿ Œß÷Ä_üEèOíÿ¼(þÑû¾{ÿ„Ë\ÿ Œß÷Ä_üEð™kŸô›þø‹ÿˆ¢à} ý£÷…Ú1ÿxWÏ_ð™kŸô›þøÿˆ£þ-sþ‚3ßÿñ\¡´cþð£ûF?ï ùëþ-sþ‚SßÿñÂe®ÐJoûâ?þ"‹ô/öŒÞhÇýá_=Âe®ÿÐJoûâ?þ"øLµßú Mÿ|GÿÄQp>…þÑûÂíÿ¼+ç¯øLµßú Mÿ|GÿÄQÿ –»ÿA)¿ïˆÿøŠ.пÚ1ÿxQý£÷…|õÿ –»ÿA)¿ïˆÿøŠ?á2×è%7ýñÿEÀúûF?ï ?´cþ𯞿á2×è%7ýñÿGü&Zïý¥ÿ¾#ÿâ(¸BÿhÇýáGöŒÞó×ü&Zïý¥ÿ¾#ÿâ(ÿ„Ë]ÿ ”¿÷ÄüEè_íÿ¼(þÑû¾zÿ„Ë]ÿ ”¿÷ÄüEð™kßô—þøÿˆ¢à} ý£÷…Ú1ÿxWÏ_ð™kßô—þøÿˆ£þ-{þ‚Rÿßÿñ\¡´cþð£ûF?ï ùçþ{þ‚RÿßÿñÂc¯ÐJ_ûâ?þ"‹ô7öŒÞhÇýá_<ÿÂc¯ÐJ_û÷ÿGü&:÷ý¥ÿ¿qÿñ\¡¿´cþð£ûF?ï ùçþ{þ‚Rÿ߸ÿøš?á1׿è'/ýûÿ‰¢à} ý£÷…Ú1ÿxWÏ?ð˜ëßô—þýÇÿÄÑÿ ޽ÿA9ïÜüMèoíÿ¼(þÑû¾yÿ„Ç^ÿ œ¿÷î?þ&“þ=wþ‚’ßÿñ4\¡ÿ´cþð£ûF?ï ùãþ=wþ‚’ßÿñ4Âg®ÿÐROûâ?þ&‹ô?öŒÞhÇýá_<Âg®ÿÐROû÷ÿGü&zïýþøÿ‰¢à}5Ïñ ™.•ºùÈxÏ_íªIÿ~ãÿâkKKø‹­Y]#]L.àÏÎ¬Š§Å@çëEÀú \5>±4N;ëh§‰·G"‡SêÈ­•9À£&ÈÍxÄ»ƒ-ýˆÏÝÿì•í:©ýË}+Â~ ·üL-¾ÿ²Ò`r›¨ÝQn£u!W†¼/¿ey;^šUQQŽ‚ ùNáß(犱£èþÔ4û餸Ö<Ë|ÙÚ/(#Ÿõ`Œöþ,W!ı#–Däír9ävúŸÎµ´MjßLÓµ›y£•žú×ÈŒ )ç–ÉsÛ4>¶ìø<-6¨>Õ¦K39KEÔ§Tšr!B‚ Î}*¶ŸáFü\3=­œvòùI{7–¾g÷ÁÉ«š_‰´”Ó´¸u[KÇŸJ•¤µkfP¯–݇ÏN@éD^(Óµ [ËMzÖèÃ5齌ٲîV<;ºŒwëEµþ¼¿à‡OëúìÚ'ÙtŸ¦£j¢öÁ!òÉ9ØYŽHúŒUOÃ&m?Lº³ŽÞÖÝt¸î.®&b¨\ú ,{*)¼ck}s¯›ÛI– N$HÄ, FSîç>½êwñžu£Úè×¶·/`–) •DÞ“¯GO›‘õ#üV¶þ¼Æ­ëÈMÖZ¿‡„Ѽ_o’áeš9‰f )^«2? ÜÜjòéö·ÚtþTFy.ã1F€àîlpGqŽõkLñu¶›máôóI&›,í6@ÖLýÞz€{â ²Õ´=7Ä {c6¹ooåœ2y>nòÙ ƒò”ÇcÎi½ÅÓúîcßAö+© ûEµÆÌ~öÚMñ¶Fx8®Ãijµ{-+I†Þ]JGEf7¬fl©$´DmUã9Ïá\¿ˆõKM_ZžòÊ×ìиa rÄ>Õ¯qâøGŽ“_µ·•¡UT1K…b6mn„¥ dr¥ï…µ6µÄ¶wQÜÎ-Ò[Y÷¢ÊN6±ÀÁªÚÎ6‡:Á=åŒòœ‡KY¼ÃáÆ?¡­Wñ.g–“kz¶qj };\”2¤|ªÆ0;šÁÖ¯ãÔµ»ëØUÖ;‰šEWÀ` ï‚i_ôþ¾ð |3}kv×;îÕ A?ïä@Ls×Ö©øWQÒ줺–K9Ò :ÛOæ4 zãõ¤½ñ$R]èV‘IæivñFâPvCž0O𫺗Š4£c©¦“iyΩ*Ér×,¥ » ŽO$õõ¦ÄŠ×>Õmle¹v´2Cš[DŸ3ÄŸÞdÇñ§ë^ƒMÑôëøoàÍŤsIo4£Îfn¥º3ëØÕÛ¯ér5þ¥ÚëÖ¿f—{©_â'Á¬½WYÒµ]Å$†ö=RÎÙ-©O!•OSüYÆzw¤ïý|ÿàþ¿ø&‘TòÀ}jþ™¦\jÏr¶Í›{w¸0‘•\gži4ÏêÚ=¼Ði÷†¦9‘DhÛŽ1ü@ö©¼5¬Á¢ê=Ô2KkqnöÒ¬D ØägŒñL  ðÖ¡q6•mn[TF’ ¹ 2wqÇášžO \Ú_é‘ÜÜ[Og{r°}¢Êo1AÜ ‘ÁëÛµ^OéÚÎ5­½ù²Ò¢’3æ„2¾å t8ýEgÇâX Ñôûhá•®-53{ó`#/P3œçð£¯õßü…Óúíþf‚xbÖ߯öúSOk}m,²¨….ˆt ¤!UÊ·ÓÐÕk¯ Û§…­uhï †YmðÜςေ ¿1ã¿­H¾#Эügm¯Zé`É$·1Ê#?3)fL“ÔÕIuÍ&ûÃQi×°ß-Õ£Ìö¯M¼’7çž¾•:òù•¥ÿ¯2Æ«¢ eðí¦™j>Ñ{aŒÆ÷9%‰>ÕFûÃwö_fd’Òö;™|ˆä³›Ì_3û„à`Ö„1¶¶¹Ð/c´˜ÝiÐ}še,6ÿäIgá-Bö1$w:z+ÊÑ[™.vý¥”àù\|Ã=ø¦iž½Ôi¤–ÒÎÞ ü‰òo,Ï(895§£xÒÚ×@¶Ó.äÕ-šØ¶Étæ÷€œáƒúgµR°ñ.›>­Å},Mxo#žÙ“ÌÞx;ƒpsýi­$.„.´·Ó¼U}iiŠÊAÐeÿ3X»ªÿ‰5hµ¯Ýê0FñÅ1R«&7 (ãéY{ª#{+”÷Зuª-Ônª.ê7T[¨Ý@î£uEºÔ.ê7T[¨Ý@î£uEºÔ.ê7T[¨Ý@î£uEºÔ.ê7T[¨Ý@î£uEºÔ.ê7T[¨Ý@î£uEºÔ.ê7T[¨Ý@î£uEºÔ.ê7T[¨Ý@î£uEºÔ.ê7T[¨Ý@î£uEºÔ.ê7T[¨Ý@î£uEºÔ.ê7T[¨Ý@î£uEºÔ.ê7T[¨Ý@î£uEºÔ.ê7T[¨Ý@î£uEºÔ.ê7T[¨Ý@î£uEºÔ.ê7T[¨Ý@Z]š_]1"À,ÁoAüë¡k-1£òÍŒ!}Bá¿>µÌi×¢ÖgÜp®'ÐŽŸÌÖŸ›dŠAn¤r"Œ~4€ÏŸN1ê¢Î7ʹõ {Ÿ¦å[qC§Á¾ô³q°…ia$àâ#×µaI|_QK¥ª|£ÔŽsüÍhEtI’HgkØhÉÇxzPMVÒ£†îÔ2A0Ï–Ç;3ü¿•t:~¥éV±5õ²O<„yWr!=½í“Ô×7w:Ë6ˆÛ–1Ë{ñ­¸¯aÔ¡T™Žïùkq¸úUïÅqã%(Å[n§«•S§9ÉJÎ]/ø‹«éú}Öž÷útŒ©"ޤÔÖ¹Õ¿¨_Çmc%ªJÒ3©L3dªž9?Ny®ouVR”–Ý ó8S…T¡½µ·sÝ< tN‰d¹éŠôHPW–x¿âUiþà¯P¶ÿV+´óLý[ýK}+Áþ!_ÛÀÿöZ÷[ýK}+Á¾!ÿÇý·üÿe¡Æî£u\Òô¹uYåŠ)­áBÓ<“³U^¿uIïéR6•<Ê5.p4¡¬â–Q@ÃeWhçïrKÐkS?u«GPÒZÚ{-„·Ý[G0E]͹†pëTg·žÖf†æ `•zÇ*aõšfê7RV–‰%æœ÷í}ckn³y9¸i-Œðµfî£uY]6î{‰ ²‰ïš.KÚFò.=~è }@«º®ŠšuÞ§šgû"®`$>ïï0á?´“ºÕ¡«è—ú%ÓCw¡CafòØG'ùXŽk:€uªÔztòésêј`‘c‘rw®ìàãÇuëÚ§¶Ñ¥–+9æ“Ë‚í¤ùq´²|ƒ“°™ã9ì}(;uªhlo.a’k{K‰¢‹ýd‘ÄÌ©õ `~4ÑkrÏ YËH»ãQeן˜ r8<Ž84ê7R˜¤X–VÄnHW*B±È¡ÆF~¢›@ ºÕ¥e¢I{§½ó^ÙZÀ³srî 63ÆÔnÞµÞ‘{g{£Be–U ‘ûÁ*ž…ê8?•@RÝFêÕÓô›Ë›ÛY`¹†æÞÙ¦Hv Œ.Ò3Îj„–7‘\ý–K;”¸Æ|–…ƒãÎÜg &€!ÝFêw“)dÉå»lWØv³qÀ=Ï#zšëO¾±ÙöË+«mÿwÏ…“wÓ f€+î£u%ZƒOžæÆîò3ŠÐ!1!ŽãŽy÷[uªËió®Ÿo{ò4W¼1ª’_r…Ïÿhcš¹§èwë0é÷ðÜÙ™ß÷‘l,0t⇠[¨ÝVbÓu íšæ ¹m×;¦Hc®X UZ]Ôn¤¢€u©( ÝFêJ(wQº’Š]Ôn¤¢€u©( ÝFêJ(wQº’Š]Ôn¤¢€u©( ÝFêJ(wQº’Š]Ôn¤¢€u©( ÝFêJ(wQº’Š]Ôn¤¢€u©( ÝFêJ(wQº’Š]Ôn¤¢€u©( ÝFêJ(wQº’Š]Ôn¤¢€u©( ÝFêJ(wQº’Š]Ôn¤¢€u©( ÝFêJ(Û¨ ƒœ ý)´PüÖõ¤/“’ü)´P‚f^‡ô Ìí÷°~ TtP‹“ôô¤ÝIE{WÃÿùÚ¸+Ô­¿ÕŠò߇ÿò ´ÿ®b½JÛýXªŸ«©o¥x7Ä?øÿ¶ÿÿìµï:·ú–úW‘k^¾ñwˆ¢°°–Þ9c†I‰˜.ÐÈ;ÏÌ(`qž¼ŽÆãQ–G€ìù•`¥]ˆ\7 ŸNõ&™©$ïªIp,íËéÒF‹I ±Ü¤ (ž¾õÕÂ’ñ/üÿi?÷öOþ7Gü)/ÿÏö“ÿdÿãu-_î·çþcZ}÷ü¿Èͳ¿±[«wiíÏ£-¬fIŠ” ¹R2ÈëéX"º–i­`’;$ðìO²\ÆÝÄà¹fÉä÷â»øR^%ÿŸí'þþÉÿÆèÿ…%â_ùþÒïìŸün†®ïýuÿ0NÊß×Oò<Öº½Vo ÍošQ¸ûps Ðãg—Œ/{Šßÿ…%â_ùþÒïìŸünøR^%ÿŸí'þþÉÿÆéô°ºÜç‘%—F›M‚þÂÖõ/ZâUK˜âŠEe]¥\Ÿ)åŒñSkW¶³·ŠLwPÉçˈ‡ÌÁ9+ëøVßü)/ÿÏö“ÿdÿãtÂ’ñ/üÿi?÷öOþ7JÚßúéþC¾–9_*Üj²ê0ÝÛÏmrÁ£Î×åy:¯§"¹úô¯øR^%ÿŸí'þþÉÿÆèÿ…%â_ùþÒïìŸün„¬8ßÜ·“XÝJ±ÚßÄmäw8T'”sô`Ó5­ý¢xÂÎî#=´r–[¶[=>g$þ"·?áIx—þ´Ÿûû'ÿ£þ—‰çûIÿ¿²ñº¿õýw¡™¥jQÇ¢éOd4ÓubÒ4‹wxðbŃUÁ ã*='\´µÓmõY^/·X3ÛÇoÝã‘Ãd@ £Û"µÿáIx—þ´Ÿûû'ÿ£þ—‰çûIÿ¿²ñº}@ä¼LöÍk¦X\¥Å­š6%CììXŸÈ¨ÿ€ÖzWü)/ÿÏö“ÿdÿãtÂ’ñ/üÿi?÷öOþ7I+g/an·þ’Î;»8§[ñ)K‹”‹åòñ‘¸Œóé[–›j`Ò¾Óm<éòÀ.]Ý"2¼›Êï0\ewq×Ò´?áIx—þ´Ÿûû'ÿ£þ—‰çûIÿ¿²ñº¿õå`Z^w3!¿‘領’]:ÑÓK’ÞÝá½Þ™,S+;s׿È/­l¯tkËøfšÝ'Iî#1#Y »‡P3“ŒšÖÿ…%â_ùþÒïìŸünøR^%ÿŸí'þþÉÿÆèµ÷þ·ÿ0¿õ÷‘—¦½¶‹™Õý—š·W.$†u•b-¢9+œ|Ã?…gêöóÛxJÍ.. ¹v¿™·Ãp&q?ˆÏƺ‹ƒ>)µ¸Iâ¾ÑĈr»Ø~F2 X¿øMãKËZ–É! F‹ž¸UˆŸ¥ \iÛúõÿ3ÊkBÔÃCÖÎmZgXDq\"Èçç ÙžœWWÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿÑbLÝ3]´1è“^(Z+‹ V–%tjÙcÁ÷ñíD€¶Õ´»[“¥Ál3,–÷­8Ré·æfvÚ Ç§sZ_ð¤¼Kÿ?ÚOýý“ÿÑÿ KÄ¿óý¤ÿßÙ?øÝ \iØÌ´‚â-3÷ ©ÚÙ¥´²™YîBœ y*?ŒôÎk’Ô¥†ãT»šÙ6A$ÎÑ®1…$?*ôi~ø²kh-¤Ôt–ŠÜ0‰|Çùwž|¾yõ¨áIx—þ´Ÿûû'ÿ¢Ày­è·?|Ekk5ÃÞée"Fv ,™ ñòUk„Úö¡eÔWzj£çäpx$sÚ•Õùz•Êùyºé_ð¤¼Kÿ?ÚOýý“ÿÑÿ KÄ¿óý¤ÿßÙ?øÝQ'šÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿÐAðÿþA6Ÿî õ+oõb¼ÛÁö2é‰ö ™[Wh\¡%K) ã=¸¯I¶ÿV)ˆÏÕ¿Ô·Ò¼òÛY‰îu#n×+_-[i;î-Ó‚ÞÏá^‡«©o¥p4÷Š®tû™$Ž,X³Dpß,ð8Áú­z‡â-3Ä6í-„ûš< aq¶H‰ìËÛëÐö4ýoY‹D±YÞ)'–Y ¥‘º(ÏëØRéšM†h-tûXàˆrBŽXú±<“îj‡‰ô»½BÚÎãOòÚòÂé.¢ŽFÚ²`TžÙóëŠ}¶¯7æ™m ~a˜^ G¸?(Áüê üQew¡ê·UÎë›Kg—d‘22¤©*àuÆ SÕSYñqhú+ØH†9£ûEÄn²²:¶ÏœŒdþU ÚV­®^ê7×N/¥Éc RL®Ò3î% GsžOJR½ŸõývmtjÂO§Øiš|šÑ[‹›u—dq4Œ~PY¶ $zô­õ>Yl¢Žé$kØÚKr€‘"¨GÇZæ,ìõ½.îÓSFk§“MŽÎkaq¼/89'iSžÇ<)–Ú­¢Úø~æU½žÇÏÑJ©1Ýò §’8«v»þ»ÿÀ"7²7§ñ^‹o;Ý9ß,ªÇo#³ìh‡KøH®5[‰ÿr°[ ê“«Ÿ«~ +£·õývûÎCJ4D‘‚Ä*€ 1$ãÔž¦±üCªË¦Ån°]ÚÁ,Î@[É;0'lqÍïé[U›©hÑê7V·kuqkum¸G4r±¸ÊÀƒÛµ ÏÛø¾öïG·0[À5õ§©’7Hà ’å £;O9ã5JßU¿Ñ®|Wwu¼×Ë=¬H"ÊÆìʪ§’Ì22{ó[ñxBÆ9íæós^Õ¸2,sâõàƒÔÒÇá+!§ÅÍÝÑÔ™y&uÜ@ Wj€¤`ŸõùÁ¿×Ÿü?JþÒnWSkW”iiµí‘‘HóøX’sÞºóœqÖ±ôÿÇc«KªI{ww$k†Lm#U@ë[º%ýnÅÕ¿ëdr:k²x£ZŠãTµ–&ˆ4ep0bæR߆ɿš¾8Ž Sv¨5H¡¹vù{âf\uÈÎܞƷDHµ¹u;{Û¨}¦x¡ŽR£ÊHãû¤t¬ûŸi7S]K!¸ÝswÛáÆ'ðŽ>éËdwÜhßOëúê=Š’ëÚô¯¨-¤Zz.Þ7¹Y‘Ï!M쩆ùÎîµÓiש¨é–·Ñ©T¸…eU=@`?ZËÔ|-k¨]ÜÜ ËÛ_µÆ#ºKiVu ÙRGR+fc¶·ŽP$Q¨DQÐ01v9ßË©[èm>õ-¶Ëså±s™ 0uÀää`äqÅVñZê1é:P–[[‹Ïí[}Œ‘4Q“»Œ‚ÌZèõ]2 cMšÆä¸ŠP2ѶH ‚¨ ­.†·6–°^_ÝܵµÊ\¤²ya‹)ÈjÃ>ô–ëÕ~ƒÿ'ù´GS»ŸVÓ®šÑo¬U'Š&òØ:nRP¶xç#w>¢ªè7ÒÅámJëɶYíç»$BŒ¨îŽß6ÒÄŒ‘’3Þµ†Œ‘Ýj7V÷w\_lß"l%6 ¡”Žž ÕM?Ã+aiwký«qot%ßÂ’Ì ÆrO|sÒ“½» ZêýÊ:Wˆ5W¹Ñ¿´–ÌŪZ4ê¶ñ²´Lª­‚KÀƒè1ïUmüM®M‹¨¬ŸªÝ¬IGóbŒ† –Ý‚H_Azè"Ð-!“Iu’btÈZA#æR¡Nî98¦+™‡Ã7gYÓ¢†ÛP·Ó¬oZáVââ&…W ¯ÏÉ?ÇÐgzsi·éò'^_?ø„Þ"¾Ä²XÏ5•…ºÎ‘·Vòn¹R%%È@rHäWWX·¾Pº/u©_ÉleY™tò·)ìdØ­ª•°ÞáEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPžéŸòÔ¿ëöýÕÝ[«ÂéŸòÔ¿ëöýÕÝ[«Ÿ«©o¥ržñ]L},dù:êõoõ-ô¯>MZãCÔu JÚ8äš+u@’gißq žžÄЬÑX^ñM¯Š,ä–&†X[dÈë•VöqÃ?P)ž.Öî4=:Ökim!i®ã¥»Ç¶rÇ ½1ë@ÉÇ®\=½Œ¯­Ø],Ú„vâM.ÈÙ”}Ò6;ŽGUñ£cnò*ËxÒx‚[O,`¿•󩸀:¦š_×Ýþ`ö¿õ×üŽîŠÃ»ñ³¤I~tϳy1­­ôw2ã* ƒŒ¼ŠÅ—Âúª$æÚ[6’=_ûJ×Ìf³ÈøoS‚3]•-6þ¶ÿ$_ë×üÙÅê¾½ÔµHuy´ýòå­„ÚÝ–hÔ†$4o°žä¯5«§hRÙkÑ_,v°[¦œ¶¾D\9c´cîóõö­ú(ZmýW¯õýv (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€)kò¿ÿ¯i?ôXþÿ‘v×þÿ¡µlkò¿ÿ¯i?ôXþÿ‘v×þÿ¡µs¿ã¯Gù£­º¿ñ/É“7Š7j–vº.§vm%K$"›Š†ãt€ô#µj]êš}†>Û}mjvoÄó*|¹<ž™ gÞ¹­3Ãÿiñ¿utÚ•¸kåh¼«©aIFœáH ÎFy銽w`gñövö¬ñAa0YJeQ˦9è3úÖëU?ò¹ÉßúêjϬévÖ‘]Ï©YÅm7ú¹¤UèÄàÓîu+;E»º½¶‚Ù±¶ieUCž˜bq\¦¿a<>+ŠýŽ£‰²ò#}>Õ. o¸– n@`G v梋MM1¼;r¶ºÆ›j.$Öû扜åXÆ‹ÀûÀaxt¦µ@tú&°šÔSGªCu%º•}áœnëBYc‚&–i8ÐeØ£Ô“\ç‚-ÞßK¾ e-šI¨Ï$PËB¶WƒÛ£âG¼Mé¬-Ö{Œ(có8Ü7¿Ä@ɹ=—¢üný_æ[²Ô¬58ÚK Ûk´S†h%Y>„ƒV«‰ðìCÆ×9Ôfµ}=SívbÜ3‡û N€÷ëÚ»jצ&…â{nÞ/ßÛCy&ÿôO=Z@Šçqž•·^g¤ÙÎúV‘¦Ç£^[ßê™'’Õ‘V1#ÛÈÇ+òã9ç¦+Ó(épz;Èj¾“PÕ'»¾q#guÖ˜ÒHxÇÌÂAŸÊºm:ÔÙiÖöÅ`SÛoÈÆ?º¹8Ù4-ƒ©%Íͽœ =ÔñA rÒJáU~¤ñY×ÚÐ]]SIû£JÎÄ]mBª 8eVÉã§ëT|Um+Üè÷¦ÒKË;;£%Ä&öÁBÂÿÒAÀç¿j·.Í[úŠYZMO¨«4v+Œ•`âGjNü­¢•¹’eë]B9ôˆ5ŠA¬Í½Æ$ã¦zÒÙjvœm%…õµÒ)Ã4«€} ¹´½¼“ÀB;->ãí¶ÐE ÁufÀ‚6†*¬“$c *ž‹mp|[{;NâÎM0!žæÌ[ï`ÿu@Däq‘ž}*¥ñ4¼ÈùSg]k«é—×[Új6—G÷ã†uv_¨"„ÕôÉ/Í‚j6x3›uLƒþœ×-áeº´Ôíì-b¼“J†Ù—̾ÓͼFÔ…ßžsØÔzb\XkðZé_If÷RÉqîžP@q.“`ùŽË Pú3¹¬­kV—L6Q[Ú­ÍÍåÇ‘<¾Zƒµ˜–l1 zZµËø‚&‡Å>»’áÞºhE»à"1‰ðà€î1É#ž¥ÕFt븨ÜlrÈ–Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(€±ãÄý}Ëÿ¡šíí¿ÕŠâlÿäaÔëêOý×mmþ¬P~­þ¥¾•çòjwZïœzQµþµðÿ_‡üÖ:¦¬þ.Öm|¨fÓ­äˆyö4 ÄíP‡vO<‘M´ñ„Ó›+©´¦‡J¿˜Cmuç†bNB(lqÉê3Џº ÔýÆ¡k¨ª[]ìûU´–ûË•]¿+îr1žJ§iàù 6V³j­6“a0šÚ×È ÀŒ” &~`¹ãÐdšKÿ]ÿà~ ÿ¯ëóü]xÆæ#5Ͷ&Ó »[G¹{ŒÎ\!*›N@cŒ’:½§k׺åøM6²´šX<÷ºÃ3§ûx×5Êêzmó^M¤im~mgÔ’áá—Na~ð;°œ»r Æ í]Røf3£kl·LÉ©M4Œè»LbNÓœ~´—ÃêúÁµoêÚÿÀ(XøÝ.N§°Z™¬m ßúòÜ#¨ÎA`£kdt#½2ëS\[Û/‡aóîm~×þÐZ1Œäùy ó/Ç=jH<tñîõ8$iôã`žE—”Oñ¼äþU¥o }ŸQÓnþÓ»ìV-g·ËÆüìù³ž>çNzõ§ý~ðúü¿à—4mR=kGµÔbF'MÛªž„¡Í^¬íJþÄÑm´ï;ÎòAfݹËÓ'Ö´i»_@AER¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(–±ÿ Kÿúö“ÿA5áùmàúVƱÿ Kÿúö“ÿA5áùmàúW;þ:ôš:×û«ÿü™ÒÑEÐrËø¦é/md‚g{X¢‘¦´†üÚJÇŒ8aŒ‚0HÔ)ªý¦çÁóÚÏt¶wbL‰œî“÷D¨~pÇ#=ýhZ×Q^sö»H¤#S¼I®]ž –Så¬NB†î‚¡àk›¹' q{sr'Ó-nÛÏ”¾$báˆÏ@p8qB×ðüUÁéýyØí¨ªº‰˜i×ßÏó¶ŸgdÏû!þ\ýx®oI—[mRtÞ"0äîûT6+Oâ1üß• {Úç]EæÚþ­wßk{ÜÄ–·ÂßÌ›S`¬Á²­¸R¤z{еv—=&Š+–ñöµioØ-aòMÕ°ó¾ØÑ¹&U „?)èNzÁé@MV¼¿¶°›™<±4Ë)9và)l¤»–ÕZúÞ+yÉ9Ž)Œª=>b«ü«œñîÃ¥é‚K†·Cª[†™[iA»¨=¾´uKÍ~`ºüÎ®Šæ|;$‘kÚÖ›Ü÷VVÞKFóÌehÝ”–Mä’z)ÁeÁ<õã¥Þ+Ö4)5uHìne‚Úaû,R -$… –$3Ç'Òëõ·¢¹¯ kº†§{uk{e‰Hîc³šÝ9vËÎF òjéh¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(–±ÿ Kÿúö“ÿA5áùmàúVƱÿ Kÿúö“ÿA5áùmàúW;þ:ôš:×û«ÿü™ÒÕkèµ wš%uUšXHpÝ~Sjç/þË£øöÂé )öûib›ìñi$ …YÕFH#qäŠÔðÏü‚§ÿ°…÷þ•K] kœl\¾ÒtÝL¡¿Óí.Ê}Ã<+&ߦGû:ÆöÙm®ìíç·\±+(ÇNÅY¢€*E¥éðª,V6Ñ„s"……FÖ#‡ ô© ²´µ ÛÚà ¬@Ç\"ç Ça“ïSÑ@Q@P›CÒn.^â}.ÊY߇•íÑ™¾¤Œš¿EŒŠã¡†AÁäRÑ@Csgm{ŽêÞã ,¨:õ5^ÒÂÓO·ò,­`µ‡$ùpFsë€1PéM¶‹§%•®ó–bîrÎÌI,O©&¯Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ŸüŒ:ý}Iÿ¡ím¿ÕŠâ¬ÿäaÔëêOý×kmþ¬P~­þ¥¾•ÎøDñ%ð äÏûº-[ýK}+ð‡üŒ·ßõÃÿfÝUKJƒU‚w‘~Ër—)°–^€ä9«ÔP+xbÉ­e·2Ül–ü_±Ü¹ó‡ÀãîäzKÏ Xß> òÉp¯|ñHÌŽâÆÆN8#óšÛ¢ëúûƒÌæ.<+:^ª$kýZ{ІA$±¤ŒSîí`T޹ö¬í'·7÷Z¤ºâ^ýžêÞ+t[ˈÞq±‹nÌCjà‘Ž§#&»pêY”0%zŒô¨lï-ïíRêÖU– 3µ×¡ÁÇô£Ì:X­¥é’i« “S¾¾ÝŒ¶BTMª?\Ö…PEPEPEPEPEPEPEPEPEPEP-cþ@—ÿõí'þ‚kÃò.ÚÿÀÿô6­cþ@—ÿõí'þ‚kÃò.ÚÿÀÿô6®wüuèÿ4u¯÷Wþ%ù2ØÓ¯fñbês‹xímížU$fwÞÊK0*ãn0 úÔ¾†X4Ù’XÞ67׎©«\ÈTý PkVŠèéc“­ÂŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š(  ÏþFGþ¾¤ÿÐv¶ßêÅqVŸò0ê?õõ'þ„kµ¶ÿV(?VÿRßJó›è..,õ˜­bšYŠÛíH.qqãô¯FÕ¿Ô·Ò¹ïÿÈË}ÿ\?öa@þ¶ñ¶˜WÄÈùJšT_Gqæ}ɪÞ?·ký&ÃOIž»Ô!ˆHW’ÙM¹®®«]ØZß=³ÜŽ­¥EóµÀ <ÖŽ«äÜó]sX½×t¸¼ÂжˆñK¨0äJ/ÓŸñZØñ/‰/¬¯®gÒç¿’;bŽæ1o ¶ŠåY›g >îqÅu÷š]•ýťͺ473*åKž9$`çùUß èº…Ü—WŽe”©“dò"ÈW,ªÀ1AéM=UÂÆV•mq/Žc¬n«ÜžµÚË i³j˪4 /PdIc¦åÆ{ƒKƒ¦Ãmem¶"±—Í·]íò7#9Ï?xõÏZK§ÈSFŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š(  ZÇü/ÿëÚOýÖ?†?ä]µÿÿèm[Çü/ÿëÚOýÖ?†?ä]µÿÿèm\ïøëÑþhë_î¯üKògKEWAÈQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEpVŸò0ê?õõ'þ„kµ¶ÿV+Š´ÿ‘‡Qÿ¯©?ô#]­·ú±@ú·ú–úW3ákˆm|A}-Ä©b]îÁFK€O© ~5Ójßê[é^{>u«A¬YYÀ'žD€¬d€ ãc’xÆ Z¨®.`´ŒIs™41ÊçQdRISo‚®lqíÒšÖÞ_3Ð"º‚iæ‚)‘å€*’„ŒŒþÓo¯­ôëGººr¡˜)ld€8ž¤W+¦Û[?uù¦ºš)ã’ÜÇܲ+ƒ  7 õ²¢k¨¾¾²5-E¯® ow»r÷à|£8^8ã-mòÑè®\¿¹·ñoØ¢Ôn“IžHMüªÍþˆç;_9A&tÎxÝ]õ%ª¸u°QEQEQEQEQEQEQEQEQEQEKXÿ%ÿý{Iÿ šÇðÇü‹¶¿ð?ý «cXÿ%ÿý{Iÿ šÇðÇü‹¶¿ð?ý «ÿz?ÍkýÕÿ‰~Léh¢Šè9Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š(  ÓþFCþ¾¤ÿÐv¶ßêÅqVŸò0êõõ'þ„kµ¶ÿV(?VÿRßJç¼ÿ#-÷ýpÿÙ…t:·ú–úW' j6šN±¨ÞßL°Û$*­#…Ý"¨Î=È D¨å·‚v¦†9 O¾2êÆÆ23Ðòy÷¥ŠXç‰%†D’7•Ñ =Aj;ÛÛm:ÒK»Éã‚Þ1—’C€(÷ðÝ@ð\CиÃG"†VúƒU.tM&öénn´»)îe–ÝÆ:`‘š¯§xŸHÕnMµ¥Ù3…Þ"–'‰™}T8â¬hº¢kZE¾£ML Ç$`‘ý(YtÍ>âö;Ù¬m¤º‹ˆçxTº}ŒŠ_ìû/± /±Ûý”tƒÊ]s÷q޼ÒÚ]›±16óÁåJÑþù6ïÇñ/<©ìjÅVm>Éâž'³·hîtÈbR%Ñ£YäHYZRv³£ãÙMwš·ú–úW=àÿùo¿ë‡þÌ(k¾‡Âö2CÔ×JÛä,vÆý„è¿©=ɨ&×t$Ñ&rÚ]‰î"RV¶0*ÍØ¶@ÇZæ¼:šRÛh ¤ÿ„€^¥ù9Þ!ÜÞ`—Ñvã÷Æ+Öé“Fe‚HÖGˆº•&7.{Œ‚3õ-sÌu´b^íuK/øH¦ûcÎeŽ&óvîÛ²d~Ÿðô];S²Õ­êÂæ;ˆ€èsƒè}±æ Ö5fÒ-ÄÿÙ×—ˆ3ý”!ØÎNæ_Ó5á­7ÖïŒMæKƒ4òÒJGBOôsUF“G½DRÎÖòU$í< ™6“h¨¤ÚL˱ñu…Í’^ÞG.•k*«C.£$Q¬Á†FÜ9í뎵§u«i¶6ñÜ]ê–ðËþ®IfTWúpk›ûR×Aðå£C{§ØBܽ½€¸™$ !B­´›'olqTa±žËÂÚæ J=ZÖ ’sN¤û’&>\ápr¸õ«–úµ±Ùp/ˆÞÅÚ³M<^ËcøÈëœmÀÎjÜÚÖ•mäyúœ_hþu_4…ryü+…Öô­kTÖm/ýÖ— —6%O•pÁË4‡qÔAÀÈÅ]×%•uu}&ÇQmFkh—ì³iÌðÈ›‰ÌGî˜dää} ¿®¬?¯Á݃$ ŒJZC (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ «7úÖ«UVoõ­@¨¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠàíäbÔ?ëæOý×imþ¬Wkÿ#¡ÿ_2èF»Koõb€3õoõ-ô®{Áÿò2ß×ý˜WC«©o¥qºf¡s¥^j÷Ö–_m’ mæ3ae 3ƒƒÈ8Ç8 J¢¹? xÂïÅW ý•½´ N—F@XôP /nOÚ.™L-¼Š°»Ÿ1—r¨I"½`¡³0N?ˆPc¥é6:-¡µÓíÒL!UþóŸðöÕŸâ‹ Ë»k ‹DóØÞGr .È €Oá»úV‡ÛŸþx¯ý÷ÿÖ£íÏÿ±y¨µüºkÛyºÌF'š6d‰"ØXíb:Ž€æŸ¨èZ°Õ¯u k/8&«oyBTS2,!œ’zã¥unùâ¿÷ßÿZ·?üñ_ûïÿ­BvÛúÛü‚ß×ßþg;y¤êZ¾£}pöfÑnôV´I¶JY¾S´žÄŽ*9mu»ÍGWѤ†ãL»Þ&¸ŒùªªUŠØïžpk¦ûsÿÏÿ¾ÿúÔ}¹ÿçŠÿßýj·õçÔ¿õåoÐãmü-q§qm{¦ßÞZÍ~×)q¦R÷‚ñ2ŸE9À¢÷F×"Ó5  ,ÜÅsö¨ïRxÕB´¢BX†ÈÁž+²ûsÿÏÿ¾ÿúÔ}¹ÿçŠÿßýj–òÿþ@Õÿ¯ë¹vŠ¥öçÿž+ÿ}ÿõ¨ûsÿÏÿ¾ÿúÔvŠ¥öçÿž+ÿ}ÿõ¨ûsÿÏÿ¾ÿúÔvŠ¥öçÿž+ÿ}ÿõ¨ûsÿÏÿ¾ÿúÔvŠ¥öçÿž+ÿ}ÿõ¨ûsÿÏÿ¾ÿúÔvŠ¥öçÿž+ÿ}ÿõ¨ûsÿÏÿ¾ÿúÔvŠ¥öçÿž+ÿ}ÿõ¨ûsÿÏÿ¾ÿúÔvŠ¥öçÿž+ÿ}ÿõ¨ûsÿÏÿ¾ÿúÔvŠ¥öçÿž+ÿ}ÿõ¨ûsÿÏÿ¾ÿúÔvŠ¥öçÿž+ÿ}ÿõ¨ûsÿÏÿ¾ÿúÔvŠ¥öçÿž+ÿ}ÿõ¨ûsÿÏÿ¾ÿúÔvªÍþµ©Ÿnùâ¿÷ßÿZ¹“ç {š@^¢Š)€QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEÁÚÿÈŨ×ËÿèF»Koõb¸»_ùµúùý×imþ¬P~­þ¥¾•Êxxã^¼ÿ®Cù×W«©o¥r: Æ»yÿ\Çó ³uªÔn¤2büWá¿ßkR[™µ} ZGpÖ1£} $w—®~íu¥¸¬o é/£èpYÎ!kˆË’ñò>f$r@= aÐKoZ\i³jOg}Œc)<¨¸˜îÚbI'Œ)ÃÅö)ãÞ[ÞYIhŠïÄc{+)P¤ƒ“Ç^µš|/,þMâhDé†x÷Þ22;†? <ºUÕ¹Óô2éŒo¶ XF 7åWŒÇ=èö—®]j>1ž -¯làKqotªã!†ÒGN:ö®£us:eެ|C.«ª $-h¶Ê–²;ç ['rŒuéÍt©ô_×Qu×DMºÕê7R6ê7T;¨Ý@n£uCºÔ6ê7T;¨Ý@n£uCºÔ6ê7T;¨Ý@n£uCºÔ6ê7T;¨Ý@n£uCºÔ6ê7T;¨Ý@n«1Æ*†ê»nsþ?΀4袊b (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€8;_ùµúùý×imþ¬Wkÿ#¡ÿ_/ÿ¡í-¿ÕŠÏÕ¿Ô·Ò¹ ۭψoQË!Ïï éõoõ-ô¯?“SºÑâÕﬥX§! î¡€ „øWO«©o¥sÞÿ‘–ûþ¸ì€;šÍ×ô®h·œ`y0c˜.ã© ­Ž3‚iQCW“¿ð-µî“¤Ø-ÛÅö’ɸCƒ"·;8'Ôã•äkˆÝÕ cœÊy9êkBM6]~h¯§‡RÑ/mƒG¤Ð³:6 Ԍמ*{ ÙiÿÙ~T· tÕ•b.Àîó>ñn9ü1Bóþ¿­ÉÕQȺþŽâ{WºÔ¯¥†Ýã•-K ˆ:´ýÝÝFq»GÏúî'åýv7¨¢ŠQEQEQEQEQEQEQEQEQEQEVoõ­Vª¬ßëZ€-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEÁÛÈŨ×Ëÿ:í-¿ÕŠâí¿äbÔ?ëåÿv–ßêÅgêßê[é\ï„?äe¾ÿ®û0®‹VÿRßJó›è..,õ˜­bšYŠÛíH.qqãô ^¢¹ß[xŠÛL+â ˆä|%Í*/£¸áÓ>ä×E@Îø›Qšmlln5¾˜<‹ŒHÌ‹€Ky¿(‘ÜÆ´Öõj×Ã¥ûXËíq,P£11ôÀ`ÀdеµvÍ$±‹ˆŒàJ¡ÆS=7Ù÷¤–òÞ¨-d•Vy÷õm£'JàŸ5¿ÙÑC‚àr€õÇ=)-Zóµÿ¯ëC¿¨ÞxcŠI^TX㻳¹=±\:J{‹ {·‚A­ü…Š Ƶ‹1o0>2xè0zÒé±]A¢øªù/äò’æûmᓸåw¡8ö¥}/åËüÇmmçoÏüŽö9XÖHÝ]VSAèA§Wk{ªj·ÖZ]®£ýœ‘ipÝI$PFÍ+>F`T(ÛØw+±PU3n `±ïTÕ™)ÜZ(¢ÂŠ( Š( Š( Š( Š( Š( Š( ªÍþµªÕU›ýkPª(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€8Koùõúùç]·ú±\e·üŒz‡ý|¿ó®ÎÛýX  ý[ýK}+žðüŒ·ßõÃÿfÐêßê[é\Ï…®!µñô·¤QˆUw».>¤øÐ}T55dòÿ²í¬¦Î|ϵ\¥om¨ÚXH[Ï»bqòNOnµn€3§Ð´Û‘~&µYøQr‰møÀôÅ6×Ãúm”–²C ›íK˜ZIä®ðrÌs^ªÝÕõ½‘€\HPÏ(†<)9sœ'Š«m®Ø\‡Ä¾^Û¶³N7ʽBú÷ü¨^_×õp~×õ`ƒAÓ-®¢¹ŠÛlÑI,¨Þc4§.qžÿ§lPº˜A Ûb8.MÜcÌo–RKëÏ,xéÍZûu¹ÔM‡˜~Ò"óŠm?s8Îq޽³š±G`2[ÃZKj‡RΗLâFhç‘Øt,ŠÁXýA¤o i wurmXIv¬³…žEGÜ6±(nHïŒÖ½“yá"ù-–{VÍ´~T/Ϫwr°b8èMjF‹kd*€£'< uQEQEQEQEQEQEQEQEUY¿ÖµZª³­jµEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP mÿ#¡ÿ_/üë³¶ÿV+Œ¶ÿ‘Pÿ¯—þuÙÛ«Ÿ«©o¥yìúuÖ­±egžy±’`'ŽIã½ VÿRßJç¼ÿ#-÷ýpÿÙ…køCAÔ40Ûê›] ¤#”€uXüÄ}p=®ŠŠ¡¨ÁªMåÿfßÛZã;üëS6ïLa×ýhŸñU´W~*ðì3ÝOm[’d†s}ÕãpÁ•¯u…“6¥4–VúÿÙ–í¥ÿ[Ûø†ã·'®u©£Û/Ä+§j¥[1æÄ* ú3?>üUö°³{/±=¤ i·oc}w£töÇZ—NÔìµkEº°¹Žâà:àúCìy«TON±–Æ'Iu»ÒÍ÷;2¾Ãb¨Å\¨.ïm4ø ÷·PÛB “HAúž* µ.ÚÚ™õ+8 ›ýT¯:ªÉþé'ð  ÕGRÓ¤Ô1¥{bP“ºÕÏc¹XU{ÍYà×ô›Ö7Šõ&f“<ŠÇ×5n=SOšùìb¿µ{´ûð,Êd_ªç"‹š^™o¤X%¥¶ò™ÙämÌìÄ–f=É$š¹UŽ¡d"yMå¸$ò™üÕ¾q´œðr@Ç\Ó#Õ´ÙoÚÂ=BÕï;­Öe2 uÊç4rŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( ªÍþµªÕU›ýkPª(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€8Kùõúøç]·ú±\e¿üŒz‡ý|?ó®ÎÛýX  ý[ýK}+ˆ³Ñ›_¸Õ4Õ¸û9–8›ÍÛ»nÉ‘úÀk·Õ¿Ô·Ò¹ïø©o¿ë‡þÌ(¢Ð<5¦ørÝ㱉¼ÉpfžCºIHèIþƒµèªŽiªùj7?»Îß&êXzúìažèļZö©Ma=õ…²Ì²G FVØ.ר9=p8ÍQºhâñ j×-íÖŸ>ž!‚4²gxX1,­2»‘Ûšê´í.ÛK‰ãµ3ívÜ|ë‰&9ö.Ä®Q`8 7JÔ´áá?>Öqå-ÌnKý›Ìæ0ØèÀÏAŠ­§i÷ÓAÒ“Fº·Ôì/V[«Æ€¬xïa/GÞ@Içž•éS¾·þ»‡CÎo"¼‚ÓPÑN™~óͬ­ÔRÇlÏFfGÎð00È8é]'…lžßû^IíZ)$Ôçtgid$`‚zƒë]–‹úòÿ zÿ^¿æQEQEQEQEQEQEQEQEQEQEVoõ­Vª¬ßëZ€-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEÂ[ÿÈǨ×Ãÿ:ìí¿ÕŠãmÇüTz‡ý|?ó®ÊÛýX  z’n‰«Ž·Ô¿á¾¼½ò<÷1ª,[ÂË®pO.O=qŽõÞ\E½H®cSÑÄùùhúxßí¼š”P±1È~eö8Èü/ü'ÿ Í·æ¸› «±;?J­ÿrÿÏ?Ò€;ÿøN<3ÿA›oÌÿ…ðœxgþƒ6ß™ÿ à?á_ùçúQÿrÿÏ?Ò€;ÿøN<3ÿA›oÌÿ…ðœxgþƒ6ß™ÿ à?á_ùçúQÿrÿÏ?Ò€;ÿøN<3ÿA›oÌÿ…ðœxgþƒ6ß™ÿ à?á_ùçúQÿrÿÏ?Ò€;»hf—ìÚÕÚ6/Í-·v8Î9ÆhƒÇû<hÖ¬¼í£ÌòÉÛ»ã<ã5¿óÏô£þåÿž¥wÿðœxgþƒ6ß™ÿ ?á8ðÏým¿3þÀ¿óÏô£þåÿž¥wÿðœxgþƒ6ß™ÿ ?á8ðÏým¿3þÀ¿óÏô£þåÿž¥wÿðœxgþƒ6ß™ÿ ?á8ðÏým¿3þÀ¿óÏô£þåÿž¥wÿðœxgþƒ6ß™ÿ ?á8ðÏým¿3þÀ¿óÏô£þåÿž¥wÿðœxgþƒ6ß™ÿ ?á8ðÏým¿3þÀ¿óÏô£þåÿž¥wÿðœxgþƒ6ß™ÿ ?á8ðÏým¿3þÀ¿óÏô£þåÿž¥wÿðœxgþƒ6ß™ÿ ?á8ðÏým¿3þÀ¿óÏô£þåÿž¥wÿðœxgþƒ6ß™ÿ ?á8ðÏým¿3þÀ¿óÏô£þåÿž¥wÿðœxgþƒ6ß™ÿ ?á8ðÏým¿3þÀ¿óÏô£þåÿž¥wÿðœxgþƒ6ß™ÿ ¯/Œü6Ò5‹l½\Gü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð©SÆá58[ýÐÇúWž/ƒÔõ¥iØø`DÀìý(ZÅV}Zêâ3º9&fSŽ ž+®·AYu‡£ŠÛp(Äf¢h»QEDlÐöŸbOîŠ( ìIýÑGØ“û¢Š(ûtQö$þ袊>ÄŸÝ}‰?º(¢€±'÷EbOîŠ( ìIýÑGØ“û¢Š(ûtQö$þ袊>ÄŸÝ}‰?º(¢€±'÷EbOîŠ( ìIýÑGØ“û¢Š(ûtQö$þ袊>ÄŸÝ}‰?º(¢€±'÷EbOîŠ( ìIýÑGØ“û¢Š(ûtQö$þ袊>ÄŸÝ}‰?º(¢€±'÷EbOîŠ( ìIýÑGØ“û¢Š(ûtQö$þ袊>ÄŸÝ}‰?º(¢€±'÷EbOîŠ( ìIýÑGØ“û¢Š(ûtQö$þ袊>ÄŸÝ}‰?º(¢€±'÷EbOîŠ( ìIýÑGØ“û¢Š(ûtQö$þ袊>ÄŸÝ}‰?º(¢€±'÷EbOîŠ( ìIýÑGØ“û¢Š(ûtQö$þ袊>ÄŸÝ}‰?º(¢€±'÷EbOîŠ( ìIýÑGØ“û¢Š(ûtQö$þ袊>ÄŸÝ}‰?º(¢€±'÷EbOîŠ( ìIýÑGØ“û¢Š(ûtQö$þ袊>ÄŸÝ}‰?º(¢€±'÷EbOîŠ( ìIýÑGØ“û¢Š(ûtQö$þ袊>ÄŸÝ}‰?º(¢€±'÷EbOîŠ( ìIýÑGØ“û¢Š(ûtQö$þ袊>ÄŸÝ}‰?º(¢€±'÷E9mPv¢Š™c Ú¤¢ŠÿÙnip2-8.7.0/doc/src/figs/snap12.jpg0000644000175000017500000012313513224651032013414 00000000000000ÿØÿàJFIFÿá°ExifII*JR(i‡Züÿÿ)( üÿÿ)( 0210‘ 0100 ÿÿ È -ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀ-È"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?÷úBÀPdzo¯RÞ6v`ª£$“ÐPÖW½DowãZ·Å;É.tËxE¸8Y&‹ûàÖ²ÏÄq»Yÿß—ÿâé\xûjxQöÔþð¯ÿ…®zYÿߦÿâèÿ…®zYÿß–ÿâè¸õöÔþð£í©ýá^ ÿ \ÿ§?ûòßü]ð±µÏútÿ¿-ÿÅÑp=ëí©ýáGÛSû¼þ6·ÿNŸ÷å¿øº?ábëôéÿ~[ÿ‹¢à{×ÛSû¶§÷…x7ü,]oþ?ïËñtÂÅÖÿéÓþü·ÿEÀ÷Ÿ¶§÷…mOï ðoøXºßý:ß–ÿâèÿ…‹­ÿÓ§ýùoþ.‹ï?mOï >ÚŸÞàßð±u¿útÿ¿-ÿÅÑÿ [ÿ§Oûòßü]Þ~ÚŸÞ}µ?¼+Á¿ábëôéÿ~[ÿ‹£þ.·ÿNŸ÷å¿øº.¼ýµ?¼(ûjxWƒÂÅÖ¿éÓþü·ÿGü,]kþ?ïËñt\yûjxQöÔþð¯ÿ…‹­Ó§ýùoþ.øXº×ý:ß–ÿâè¸óöÔþð£í©ýá^ ÿ Zÿ§Oûòßü]ð±u¯[Oûòßü]Þ~ÚŸÞ}µ?¼+Á¿ábë^¶¿÷å¿øº?ábë^¶¿÷á¿øº.¼ýµ?¼(ûjxWƒÿÂÅÖ½mïÃñtÂÅÖ½mïÃñt\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿâèÿ…‹¬úÚÿ߆ÿâè¸ñöÔþð£í©ýá^ÿ Yõµÿ¿ ÿÅÑÿ Yõµÿ¿ ÿÅÑp=ãí©ýáGÛSû¼þ.³ëkÿ~ÿŽQÿ Yõµÿ¿ ÿÇ(¸ñöÔþð£í©ýá^ÿ Yõµÿ¿ ÿÇ(ÿ…‹¬úÚÿ߆ÿã”\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿã”ÂÅÖ}mïÃñÊ.¼}µ?¼(ûjxWƒÿÂÅÖ}mïÃñÊ?ábë¶¿÷á¿øåÞ>ÚŸÞ}µ?¼+ÁÿábëÞµÿ¿ ÿÇ)ábëÞµÿ¿ ÿÇ(¸ïöÔþð£í©ýá^ÿ Xþõ·ýøoþ9Gü,]cûÖß÷á¿øåÝþÚŸÞ}µ?¼+Â?ábëÞ¶ÿ¿ ÿÇ(ÿ…‹¬zÛþü7ÿ¢à{¿ÛSû¶§÷…xGü,]cûÖß÷á¿øåð±uï[߆ÿã”\wûjxQöÔþð¯ÿ…‹¬z×þü7ÿ£þ.±ëkÿ~ÿŽQp=ãí©ýáGÛSû¼þ.³ëkÿ~ÿŽQÿ Yõµÿ¿ ÿÇ(¸ñöÔþð£í©ýá^ÿ Yõµÿ¿ ÿÇ(ÿ…‹¬úÚÿ߆ÿã”\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿã”ÂÅÖ}mïÃñÊ.¼}µ?¼(ûjxWƒÿÂÅÖ}mïÃñÊ?ábë>¶¿÷á¿øº.¼}µ?¼(ûjxWƒÿÂÅÖ}mïÃñtÂÅÖ}mïÃñt\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿâèÿ…‹­zÚÿ߆ÿâè¸ñöÔþð£í©ýá^ÿ Zõµÿ¿ ÿÅÒÂÅÖ½mïÃñt\yûjxQöÔþð¯ÿ…‹­zÚÿß–ÿâèÿ…‹­zÚß–ÿâè¸óöÔþð£í©ýá^ ÿ Zÿ§Oûòßü]ð±u¯útÿ¿-ÿÅÑp=çí©ýáGÛSû¼þ.µÿNŸ÷å¿øº?ábë_ôéÿ~[ÿ‹¢à{ÏÛSû¶§÷…x7ü,]kþ?ïËñtÂÅÖÿéÓþü·ÿEÀ÷Ÿ¶§÷…mOï ðoøXºßý:ß–ÿâèÿ…‹­ÿÓ§ýùoþ.‹ï?mOï >ÚŸÞàßð±u¿útÿ¿-ÿÅÑÿ [ÿ§Oûòßü]Þ~ÚŸÞ}µ?¼+Á¿ábëôéÿ~[ÿ‹£þ.·ÿNŸ÷å¿øº.¼ýµ?¼(ûjxWƒÂÅÖÿéÓþü·ÿIÿ [ÿ§Oûòßü]Þ¾ÚŸÞ}µ?¼+Áábëôéÿ~[ÿ‹£þ6¹ÿNŸ÷å¿øº.½}µ?¼(ûjxW‚ÿÂÆ×?éÓþü·ÿGü,msÒÏþü·ÿEÀ÷¯¶§÷…(¼CÜW‚ÂÆ×=,ÿïËñtáñ#]^Ö÷åÿøº.¿,êÝêPÀ׌xâ|ò_GoªCÇ! &ˆ }Á'|ñ^±it%PA¦…€äQ@Ìp¦¸/^еÛÈ?ñÓ]ÝÉÄf¼ËÇŽ²¯Gý1ähÇ7Qº¡ÝFê‘—¬-$Ôoc´…âY$$)•Â/Lã'¿aïZÚ§„õ ?RžÎÙ†&Š:+,kŒ³)n:ð2I¬ {©­.c¸·‘£š6ÜŽ½T×Cáÿ*j³¾µw3Cqbö^qÌJqƒÉ:/3:=S•ìR;Ff¿Rö :þ𧯎)ú†«ésÁ 턱IpvÄWÞ}RFyé],:þ‡c­ø`E¨´öšd2Ç5ÇÙÝ9e |¸Ï_­f.µf|?¦Ú-ûAuª×Ä,ÞTg8p1ƒÉÎÜÑ×úïoËPþ¿…φõ«;»[K‹Iî‰XSÍC¼Ž£†ÀëßùCï>€©<ûu®ši6~+ÒŸOW}ÅdƃºLî`‘ªú§ˆì­î4Óc}myioz.šÞ 8Ûm#ÜðÄ‚i­lÊòøJïN𾣩j–²ÛÏEöu2)3a²>½ñX1X]Ïa5ôP¶…Ö90ùYº g<ý+§Õõm û]Z¤·7:­Äsˆ^ÙÐņÉÿ­Yþ Öì4»»¨uR~ÃpŠÇ [÷ˆÁ“€½%»¿õ¢þ½Aí¡B] U¯K'V²(.õ% ýÑÁù³ŸáÍ;Qðö³¤Ú%ÕþŸ,99*@>ø'Ž+£¾ñŤÖzeÌqî¾{¨çÔ)ð£$`çƒÇLT¶·¢Ç¦k‹a=ìúÄÉ!ŠH¸ »’~ñíÇ £úü¿àB-#ÁºÖtøµ›`²¹v]ÂTÜHF`8$»éX“éðÇÆÕÄW2˜í¾aºR8\î?\bº'ñ”ß`ÖEÏú 7”ü~è¯ÝÆî¾Õ_Y×4ýfóKÕ£¿{+ødXæAºÆªr² Æ1þÎúïªFfÏárÚòÚÒm=–âëp†?5 | žÆ®*-GAÕô™aŽþÆHZfÛYX1ôÈ$gñ®ÏO¿Ñoüi¢Kc$W‰yMÕÌÍIû¶Á*ßÅïY7:¦a§Úéê]R©ýªäù DèP×ðëÍ upïýw0õ/ë:D÷öB²¶Ä!•ÁoO”ž}©×^Öì¾Íö6T7M²Ü¥ºãh$Ä éõh–ÖVÉc<-Q.Ö {n1Øä[Þ©¦¯ é¾0ÄVúœ·¾tîÒÛ›VW…]HÎãÃc `v¡9ýSEÕ4SÔlÞßÌÎÂYX{©#>ÕŸººOjöw6ÙéúµÍ¿žf1A§o,ã'ø‰ÉÎcìù:L–Ùšd›Ã´ÉmºuÏ£çŒvâ’/h~¹×ìõm3Ú)óKüD€0¨¬|9¬êMp¶v-1¶Ç( Úèå† ÔþÔ4ÔÓ5/RºkHïãŒ$â#(RŒN ŽyÍiøkRðæ™Ùn ŽêÝâêk”Ëè‚c=ý©ÛRz´ß Üê¾¹¸´¶šMNß Â]P*…²äúÕ-'×zž°úl²Ee$LSpÀ$à¹Ë@?>kmõT²Õm.µY,–mXÞÄâÙܲ`c¯JÌ»ñ÷Ä(u“º+5¹‰·2’Ûq'·J#«Wþ´C{;Z³þÜØê7Ve÷˜&x·ã¶’3ŽÝ*¾ê³ª^E?ˆ// Û,/tò¦õ;]K’28>”jš·ö£ÄßÙÚu—–Å¿”?Þ俥^Êã{²ðð¾ºÚ`Ô—MÙ˜üÑ t9Lg;s»ö§K'HšÆ+™®ïÞTJ;ðó‘Àç5¹eâm&WE™îÈŠÛHû,çÊs‰1÷qŽyî8©<#©ZO7„´øåÝuk-Ñ™6‘´2±ãð5VÕÿ]Ééëc™½Ð5=*æÞ-RÜÙ,ìM#AêIRzuÇZ³©höš2ê¶´z…·Ÿöy¢*øÏÌ=êö£{¡Ã¤[è1j’ÝDú—Ú..>ÎÈ N„rIêxÏzgН4k«(¢Òu”kKl }=,äN¿yË·ºòi_B­gc—ÝFê‡u©ˆ›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Uí/O„®Ò»$ðvõcè+/ujiWkr[±ÆöÜ9ÆxóøP¼º™$ebBøáÖçÜþµsðØË.¡ö"B¸bº€óë[>d|á¤wi˜ÈœVd7Àj¯txI̞ÌÒaÑ#‰•ãº}™ 6Ù8Ç^ƒmdjsYÞ,L«'1çœ`ûÖ‰’Sk4 BD›ðÆCŸ˜“Óo¿­V¼½ß}nè7}·ýNAÇéC½´muszËÃú5²$WÌgºe,G˜T uÀàzšËÖt«kh÷N•žÕÈXçnz{Š¿?“ªB›¦Í¿ÞÉlc©éŒœŒsÐñjëWØÓͫȯ3íÜTc€AÎ;tåQÄT•D¯«ÝGŠÁÐ >T’Z>æêúÃwfkX‰9%E|纽ïÂ,M¤?îŠõÑóGÊŠ)°ýÁE0uþ¬×˜xóþAwŸõÉÿ‘¯OºÿVkÌxD_ïà”êÖ{DWQùNQ\Àü¬)à÷Töú{\i——Ë*„µ1‚¸ÉmäŽá@wT]Ok2Ím4Ê¿vHœ«ÜȨ)8 úÒÐË’I$’y$÷¤ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(C+–„“KçAQQ@ ˜  zqJ³”èò¨¨  w"P”'®Ö#?‘¨ÚRÄ’zÔtR²½ÇÌÚµôº½ûÂñéû¢¾¯ 0ÿ GþLÃÿÅÒŠ·áø[ü†õüÿŸõr꿈`ñ=ßÛ-5;™9 "lË{ÇÏ9ã·ÐõËø‚ÞK]vînÍÜi›ï1 ›“ÈÎ=Emÿ±ñ‡ý?òfþ.øV>0ÿ GþLÃÿÅЕ­ä6ïs’®¢k»Ko hbçL‚ð³\m2K"mùÇMŒ?Z—þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.˜°Ñ¶¥©IiÿÚÒÈÁœÊ“,~PÜ#.¬»žøïÖ²¯ä{Û?°Ékp«lòÁ#!ÛÎpÉÈ'½Cÿ ÇÆôÿɘøº_øV>0ÿ GþLÃÿÅÐÕÝÁhqu>²ºš·ö"ÚŸ³y¸Ø%Ú»<¿Cž¸íœ×œWq¨øƺ¦¡-äú2,’X%Ä@tÇj©ÿ ÇÆôÿɘøºIK•Öÿ±ñ‡ý?òfþ.øV>0ÿ GþLÃÿÅÓ’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*÷ÿǤ?îŠòßøV>0ÿ GþLÃÿÅשxCþ=!ÿtSB=¸(¢¸(¦.¿ÕšóÈ.óþ¹?ò5é÷_êÍy‡ŽÆtÛ±ë#@•bØÓ-qÿ<“ù ŸÌ>Õ‡©Hñø.åãfG]=вœ|¾ Õ$Ô/ôß [My¨X¬òˆÖû,œ®q°9go¦>”€éžácÛ½•w£'>”ÿ0ûWu«ÞkZF—2, y²°hÝc,¡°ÛN ‡šßÓïõ+¹u-.åí¡Ô-B¸†2c*à•m„ç#ŒÓ¶Ÿ×—ù‡_ë»G@“Ú©GÿWc·š?ô¬¿ IrÚ}â]]Ku$WÓÇæÊrHVÀöAÅjEÿ7õÔè CKERQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEɦŽÞ '•¶Ç—vÆpÉ5ZÛSµºŸÈŒÌ$Ú\,nÿë ÿЭUSÊO3ư²ÈÁ†é#åû§Ò€%¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ¤2J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠÏÕô‹[Û+Æ[y/$…‚HÑ®íÛp¿1ü+FÑ.ŸS/ªéÈmÄNM²A¸•ÇžÀó]V.ÿç•¿ýþoþ"Œ]ÿÏ+ûüßüEa<<'57º%Å0EoÅIkÑBø ã|#Ŭ_îŠëä–x|ÑGå¼É!%G® Šä|'Äýn†wÐ}ÁE}ÁE0uþ¬×x¤n8õ8¯EºÿVkÏ|H3qõqü謊þ(m­ãerD1ôû£ÞŸý©÷$ü‡øÖL’!òÀuÊŰÏC±N?QQâßxóJ— íœf¤‡&mÿjAýÉ?!þ4jAýÉ?!þ5‘EfkÿjAýÉ?!þ4jAýÉ?!þ5‘EfkÿjAýÉ?!þ4jAýÉ?!þ5‘EfkÿjAýÉ?!þ4jAýÉ?!þ5‘EfkÿjAýÉ?!þ4jAýÉ?!þ5‘EfkÿjAýÉ?!þ4jAýÉ?!þ5‘EfkÿjAýÉ?!þ4jAýÉ?!þ5‘EfkÿjAýÉ?!þ4jAýÉ?!þ5‘EfkÿjAýÉ?!þ4jAýÉ?!þ5‘EfkÿjAýÉ?!þ4jAýÉ?!þ5‘EfkÿjAýÉ?!þ4jAýÉ?!þ5‘EfkÿjAýÉ?!þ4jAýÉ?!þ5‘EfkÿjAýÉ?!þ4jAýÉ?!þ5‘LIcwtIž2¨9+žyô¢áÌͯíH?¹'ä?Æ•5(^E@²eˆ bE4SÆ$†D‘ 2Ž85bßþ>bÿ|:.Ì߬X[\ËÅrZ7(HUÆAÇ­oW˜j¿ò½ÿ¯‰?ô#S98ì$â´:ßøL´ïùãuÿ|¯ÿGü&Zwüñºÿ¾WÿŠ®ŠËÚHËÚÈî?á2Ó¿ç×ýò¿üUð™ißóÆëþù_þ*¸z(ö’k#¸ÿ„ËNÿž7_÷ÊÿñTÂe§Ï¯ûåøªáè£ÚH=¬Žãþ-;þxÝß+ÿÅQÿ –ÿbÿ|:©¿^aªÿÈb÷þ¾$ÿÐz}y†«ÿ!‹ßúø“ÿB5]…[df^\=¬T‹ÌüÃv0=zmÛÞFÒ4"4ΆÎï^­ÁäR*ª(UT ;V:XÃK \ܰ;¥üÉm);Ÿ?~ÇAŽßZé*›évnìí;Ûs í´Ÿ¦qN.ÅFV$k’°E$pË0pÉŒŽù"¬P`QI’fÎòÜÅŸ3lrIåª9䓸sO1ÏY¯˜#Ú>aœsúÕ‘gÉæùƒn1À?JUµ…%ó>l“Ôàè: ®dUÑ\ÜJafVÁyö'œCQo‘^[”“ææãüjà³€Iæùƒn1àý(ŽÒŸz'Ì3Œ’qôÏJ.‚è©ç²t᧘¨`¥°«Æp:ô§¬×V2Né$*Žë‚ ’EY62•)ÆíÜ0}½)ZÚ'‰ce%Tä|Ç ýzÑtEy¾ÓoÈdÚZBH Àéõ¦C,²¬HŒ¥ +0Q3ÇãÒ­›hˆ\©ùAPwàõ¤{X]QJpƒ † õ]ÑNâI#¼…ne\yŒ8RÇœ}*ÅÞä±dÜYØÉîO)¶…ƒ‚™nO t§I K–ã+ÇsüèºÐ.´+*c‘øõ§Ì‡tGw¹,Y7–vÂ8ÉÉÇo­4†Š[x —Q—%”pã·©« rEåºåxã'·½ o0!y ·$“ÅMÅuc<+9äó7…ÀÀ,>†Ÿ$ó$ŽÜ¸ò°ª«Crx­ 8#C°àãqãž”¦Ú#/›´‡ÎN€ ®d>dMETQEQEQEQEQEQEQEQEQEQEQEÙ´NŠ©0>´êFUu*À2‘‚B(•3¬e¢W ¹ÂãåÓpÿ?•o銔“~âYL1ê1ÛéMH³Ž b’²K‘éƒíV-mb³€EÂŽI=Iõ5¤æš²4œÓVF¦‘ÿ!%ÿ®Rÿè¶­¯ }Ñõ¬]#þBKÿ\¥ÿÑm[^û£ëS…û^¿¢=ÿÃ¥þù³»ƒî (ƒî +¨æuþ¬×žø‹þ>bÿ®‹üëЮ¿ÕšóßÇÌ_õÑtë§M<J¬Zñ’s÷µÙß‹ó?áZv_òµÿ®)ÿ Šž•…ÊŒ_ì‹ïÅùŸð£û"ãûñ~gü+jŠ,.Tbÿd\~/Ìÿ…Ùß‹ó?á[TQ`åF/öEÇ÷âüÏøQý‘qýø¿3þµETbÿd\~/Ìÿ…Ùß‹ó?á[TQ`åF/öEÇ÷âüÏøQý‘qýø¿3þµETbÿd\~/Ìÿ…Ùß‹ó?á[TQ`åF/öEÇ÷âüÏøQý‘qýø¿3þµETbÿd\~/Ìÿ…Ùß‹ó?á[TQ`åF/öEÇ÷âüÏøQý‘qýø¿3þµETbÿd\~/Ìÿ…Ùß‹ó?á[TQ`åF/öEÇ÷âüÏøQý‘qýø¿3þµETbÿd\~/Ìÿ…Ùß‹ó?á[TQ`åF/öEÇ÷âüÏøQý‘qýø¿3þµETbÿd\~/Ìÿ…>-.xåG/8'ü+^ô4X|¨Ž¸ûßê7פÖÁ%•C3g矖» y`©¹ˆ I='-ÂQRÜá¿á Ô¿ç½§ýößüMð…j_óÞÓþûoþ&º-#Ä–šÅÝżJÈÑœÄ[þZ§MÃñíèAïÆ¨'¹d”nDE!OBI=}zTû(‘ì¢qð…j_óÞÓþûoþ&øBµ/ùïiÿ}·ÿ]Ѳ´ÿŸX?ïØ¨žÆËþ|íÿïÒÿ…Î!ì¢q_ð…j_óÞÓþûoþ&©]è"Âa 毤ÛJWpI®v1ŒàŽœÊ»–±²<}’î±…#èG"¼â\Ž|Ch‹2Úù{RiW?^(öqN'Aýh[oü$:}>Ú?Â¥]7ûšÞŽßK ¥yU»4·$ð3Œúöô®«Cƒ{FÐ~îà@* àútî@ü)Q‹v!Á%s±ÿ„nOú éŸ÷ÿÿ­Gü#rÐOLÿ¿çü)|º_.º~§O¹‡?ßøFäÿ ž™ÿÿúÕÐ@$_IÓÏÿZ¥òý«àbæQèçùÖUpЂÐÒ•¦õF×öÿ Æ“ÿ?ýj?°‡ý4Ÿü ÿëV ²‰·²‰½ý„?è1¤ÿàOÿZì!ÿA'ÿúÕƒEÊ!ì¢oaú i?øÿÖ£ûÐcIÿÀŸþµ`ÑG²ˆ{(›ßØCþƒOþÿõ¨þÂôÒð'ÿ­X4Qì¢Ê&÷öÿ Æ“ÿ?ýj?°‡ý4Ÿü ÿëV {(‡²‰½ý„?è1¤ÿàOÿZì!ÿA'ÿúÕƒEÊ!ì¢oaú i?øÿÖ£ûÐcIÿÀŸþµ`ÑG²ˆ{(›ßØCþƒOþÿõ¨þÂôÒð'ÿ­X4Qì¢Ê&÷öÿ Æ“ÿ?ýj?°‡ý4Ÿü ÿëV {(‡²‰½ý„?è1¤ÿàOÿZì!ÿA'ÿúÕƒEÊ!ì¢oaú i?øÿÖ£ûÐcIÿÀŸþµ`ÑG²ˆ{(›ßØCþƒOþÿõ¨þÂôÒð'ÿ­X4Qì¢Ê&÷öÿ Æ“ÿ?ýj?°‡ý4Ÿü ÿëV {(‡²‰½ý„?è1¤ÿàOÿZì!ÿA'ÿúÕƒEÊ!ì¢oaú i?øÿÖ£ûÐcIÿÀŸþµ`ÑG²ˆ{(›ßØCþƒOþÿõ¨þÂôÒð'ÿ­X4Qì¢Ê&÷öÿ Æ“ÿ?ýj?°‡ý4Ÿü ÿëV {(‡²‰½ý„?è1¤ÿàOÿZì!ÿA'ÿúÕƒEÊ!ì¢oaú i?øÿÖ£ûÐcIÿÀŸþµ`ÑG²ˆ{(›ßØCþƒOþÿõ¨þÂôÒð'ÿ­X4Qì¢Ê&õ¥§Øõ„Œ\ÛÜf t½GÈÜg׊ÑðÇÝZÂÑ?ä ?뜿ú-«wÃt}k,:³šóý݉V5ýßÕÜpQDpQ]'(˯õf¼÷Ä_ñóýt_ç^…uþ¬×žø‹þ>bÿ®‹ü躲ÿ}¯ýqOýTõ—üƒíëŠè"§ Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ô4´‡¡ éÏsBÑJ‹$n¸dqÃЊm¼±Ú»Á–URR2ÛwLàâàÑôËY–k}:ÒWî¼p*°ú*Ü?ñõ7û‰üÚ¹ÍÅZΠm†–±,`™Ÿí˜L°sžÙìk£‡þ>æÿ®iüÚ˜Ÿˆd¸“ÅÑÚ…Õ¦„X<:çÊ!¼Ìn?:ƒÇþ•UnµK¿‡×3.«47V«8™ŠfeÛ»–8ÃŒ°öõ®›RÐûS]B=BöÎáaò ¶d“9çržþ”ÅÐ,íôK.6›Ê¹Wó¥gÝ#³ýæ$÷¥ömýnUýëÿ[ÓÝŸN´wbÌС$œ’p+Èþ$(oA‘ÿ,_ÿJ&¯a†·†(P’±¨@O\ŠñïˆÅG‰ ùŒßþž&¢m]²b’9%QÌO'Úº=áa¾RD ËI ä@éúqX"ÙæS˜t«vvÖ–šÅ‘‚%FSvçæ9’3ôé]™}?kYuZþLš–ŒβûR¾K’±Ü$k· mV“Üf«§ˆ/áœÁ(#aÓøÇ­.¬ZKÀø Byëø~U›&$l‹< ªƵ©%®(óÛ³7£×.*[B6ç,Nz÷z÷ÏЫ#™di±-€r9÷¬¥²£'o¥i)Ê‚I$ާ­g‰œ%’Ôê -Q\g@QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE¥¢È@×9ô[Vï†>èúÖ‰ÿ!ÿ\åÿÑm[¾û£ë\ô7Ÿ¯è޼WÃOü?«;¸>࢈>ࢺA—_êÍyãæ/úè¿Î½ ëýY¯=ñü|Åÿ]ùÐueÿ û_úâŸú©ê /ùÚÿ×ÿÐEO@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@!èiiC@Ôƒ ¨êAÐR‘ÁM#G#HÛœªãqÆ2}N§Cÿs×4þmN¦Ãÿs×4þmL ÍC/J˜Ô2ô¤s÷«Ä>+Å,ZýÈ+²XåŒ Ø9Yä'¯ûÃõ¯o?z¼SâscÄ ã÷ÿ¥SJì±Í7¤j³YÊèÓÛLйaY•нñÇ¥\ºœiº­¤’²Å^ƒÍ ôàóéÆÏzÄ2Ù<Œà¥©9 ŽYr àúzÿŸZé¡)R•Ṍýõfwúî«g ÄË ó›ÈVFGderÏ#Xêš\ò*C#+…ådpH#¯Aïú×å¹Ê–2G\‘V[²F7n=0Nj%w+½Ì½’N÷;è¦×ä•àkAyQô¯;Ž BL*À*Çœçäúžß_zïlǧZ£ Ä€Ó ¨™Ñ–ÅŠ(¢ °¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(KDÿ€ÿ®rÿè¶­ß }Ñõ¬-þBþ¹Ëÿ¢Ú·|1÷GÖ¹èo?_Ñx¯†ŸøVwp}ÁE}ÁEtƒ.¿ÕšóßÇÌ_õÑz×ú³^{â/øù‹þº/ó êËþAö¿õÅ?ôSÔ_òµÿ®)ÿ Šž€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ CÐÒÒ†€#©AQÔƒ ¤Óaÿ¹¿ëš6§Saÿ¹¿ëš6¦æ¡—¥LjzR¹ûÕáŸLßð”[ˆÓ?èïÎéâj÷3÷«Å¾&)Bйø=ÿÒ&¦…-?Hnrê¿NjöŸe\³¹hÚEÞ ñŒóǦ;Uû}Vy·Èʳʱ\ “ÁàsíVÚÏÏ·XKÈàfPÉ€¤1ü±ù×F¿³­v1–¨·­Åhìïmnª GhݸòN:÷è? …™°£Ûð«,bQ…#SQªG»n9Æs[VµZí§£1cQŽ“œz܃þ=ãÿp*ÆÌ`á ~ýzÚ‡˜#ÿt*1P¡%MÝõ6¢ÇÑEÂnQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEihŸòõÎ_ýջᎃëYÞ±û@¼»ó6ý–3òíÎíÊïlV†:­cJ..WêÿÈè¯8ÍC—¢·âÎî¸(¢¸(­Žq—_êÍyãæ/úè¿Î½ ëýY¯=ñü|Åÿ]ùÐueÿ û_úâŸú©ê /ùÚÿ×ÿÐEO@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@!èiiC@Ôƒ ¨êAÐRi°ÿÇÜßõÍ?›S© ÿ¹ÜOæÔÀ˜Ô2t©E% +½^[ã ÜkÄWv¢H˜HKŒùòž¿z‘5s:Ýä¶:{ËS3NÑG¿ f”ì3šÆ½GÝ+—©;3ÍWÁ÷ÂO0ý ¿¯ÙZ– ÝÃ8˜Å;7;Fs]ÃÜˤä\_½ô¬bSª!PÎpÚ½9ïéÖ6´Éq-´6¾eÀ¹ñ©“hcå‡$œpϯJâXÚ—¼b¿¯_SOa¬â¤ðÍÛ’ËÒ1ôˆÑ†nW>d.Oý2`v1ë·¬QCbxÍ(hÌøE¶ÒwmÉçâ´´û¿·éÖ÷{6yчۜã#¦iË0«\P¾­M³Ï×Ó¯K[ŸÆ6«©§^"*‹KŽ?Õµt«­9†îñ­@°·ó?{æ|îPp˜é{þOPÕnšo=¹´¸ß‹åͼ2Tœ Ä{õ4þ¿ZNÎ(=„#ªf?Ø/çÒûö°^ÿϤÿ÷ìÿ…tK®»L¬lñdóµºOæ|ÅÁ#•ÇFsøSOˆBÙ[Ü›n%²’ïh~›B½9Îî¾Õ?]«ü¥{ísŸûïüúOÿ~ÏøQö ßùôŸþýŸð­ÛÏÉaºÜÁkÄêΫ%àD 1üeG'=1øÔ7úô×zTçN·-›´<6Ã`qŒ–àútëMc*¿²¾ðöQîd}‚÷þ}'ÿ¿gü(ûïüúOÿ~ÏøWO=Ç••»Ìc,ª¹Y óå±çûÃŽŸáTâñ+-´w7¶^L@ÓÂÑËæ 2TŒ }G½ Uí*QÓSì¿óé?ýû?áGØ/çÒûöº› Fææò[[«4·‘"IFټ̆$`ü£å÷¨u«›¸&€E%Ä6ż°[ùÌch# לvê)}~§7+б¯sœûïüúOÿ~ÏøQö ßùôŸþýŸð­yîï®ô­:êÞúk{›ÕR$HÊn#,Çr“€2zö«w²^Á«Z$7Í!–Aº×Ë\€ùœœd}sŒ1Oë³½¬º÷è/e\ç~Á{ÿ>“ÿß³þ}‚÷þ}'ÿ¿gü+¦·Õå¹Ôg°K]—n2–•GðqÎî¾Ø5Ÿ-õÕ…òÜ^¤sÅréç$`QƒÀ?'4¾½Qo?b»œïØ/çÒûö°^ÿϤÿ÷ìÿ…k%î¦údR §xZé—íQ[†”õ‚#“½9ÅFšííŤP$ÒM+M¾X¢Pû#m»‚¹‘×§µ:k’Éw[1öInÝ&2üÅ”6NÜtÊ‘×ð§õÚ¶¿*ûÃÙG¹Îý‚÷þ}'ÿ¿gü(ûïüúOÿ~ÏøVä>%an./,Ä0½«ÝDÉ.òʸÈ#‘ëMƒÅ1Í ø†&Ë–÷+*¹íPXzú{ÑõÊßÉø‹ÙC¹‹ö ßùôŸþýŸð£ì¿óé?ýû?á]‘=Ô׺¨»Q¤¨k)uQåƒÁÀúôªPëóEaÃdeŠ+4º•¤¹%œôÊüÇå=H£ëµ/eÓ¯qû(÷2~Á{ÿ>“ÿß³þ}‚÷þ}'ÿ¿gü+y5{ˆgÕ§™Qì-NàÛðê<µlÛƒÉê[½Goâ˜æ†säÄóGåìK{••\¹Ú °=}=èúå^‘]?{(÷1~Á{ÿ>“ÿß³þ}‚÷þ}'ÿ¿gü+ro5¬r-ݼÜ-À€¹Äy(%ÊŒ {u§Ûëò_-˜³µŠGŸÌݺ㠾[pÁNî¼tÍ\­kò¯¼=”{˜`½ÿŸIÿïÙÿ >Á{ÿ>“ÿß³þÚÝ,k †ILpÑ…-ønã?Z¡¡Ý\ÜØÌ.ŒñLñ‘"…uoËœxã‘P³ ¸¹YhW°WÜæ~Á{ÿ>“ÿß³þ}‚÷þ}'ÿ¿gü+_EÕî—O±ŠökrñNÓîÞTdïÈùxç<Óâñ+Ü. ki®>а*ïtG([;Âÿ²F1Z•—សvѨêAIÿZ™I$ô;¸>࢈>ࢵ$e×ú³^{â/øù‹þº/ó¯BºÿVkÏ|Eÿ1×EþtÝYÈ>×þ¸§þ‚*z‚ËþAö¿õÅ?ôSÐEPEPEPEPEPEPEPEPEPEPEPEPEPHzZCÐÐu è*:YfŽÞÝæ™ÂE–fn€¦TR9ÌÊc€¬$m£¾9üMsÚ‹íõJkFÆX–¶Ã于 ú7|z}+£‰U¯°ÎÄ]¹í’sü…0 :Ÿ½ŸãsÿØÔM©ïXþ7ýj“Q»Þ?ÚÛjɧ†<ô¼þ›FkñF¥¢iÅ4Z臚0’Ùv;PpwdûW_#y€£€Êx Œƒ^+ñ$”ñŸ%¼»R‹žxY¥ô³«IU+)IÇTk¶«á†3}«\¼™Þ5@òÄÀ  ¸"1È#99¦\jº ¶fµÕ¥žìÎ'ͺ6V ·‚±ÓŒm¯>pÀ£;®âyZ–)ãG1dÉŒc·¬>§ÕþäR¬û¿Û좲¶úª›äiYçˡöHÿTÁ†qØtã£câìì­ì­d´ž8bD$’ÆÍÇR¾QÇ9ï^}»Ä±Žâyã×Ü ×ƒx™"Û»#~ïLÆ×ô¦ðt壸{Y#µGÑÀMüÿf¸ ¾Ô©òòß{.ïS×ð¨Œz3Å*Í©ÝM#ª(šAó VÜ¡p¸ëÏ ç¾kǵ ;Ü9ÎGèú ’œ²øFÞóü?ÈQ®ÞèßC¢¥ÒËöéÚ5”̶ä-d9Ëcn{“Œã'¥B°hŠÔ®š#–ñÆÃˆ‘ñ¿&{ d慌êPþgø‘^Õö:K«*á ‘5 íæ…J$°©Ý´ã åH#ÛµCxt›Ì“©ÝDï‘+F¼ÊœðÙB;ž@kŠKÕþäÙö7%¸´kûVKìÚÅ'š|ÍåP*¸œ“žµVÎßL‡MŽ+»÷º•-š÷ÓpÁÚBϩɛEWÔák]þäÕö4,ÎÆš[Y„¯ä !™ÈDbÄnrGO©5¯}¦j¤Ô'Žé•عÇЊæ(¥,½ßáþ@ª´u {£›‹Y…Á_²«,h¨BŒ€:c°}j?Nœ·Ñê÷Q´¥wÆ#R¤/Eå ¯CÜ×;EJÀSîÿòlûh¶÷kt—’ù᜻•9—wfùy˜¤šMk+»_·L‰u)•ÙWI*F8èA®zŠQ…ïÌÿòlû!¼²6†Ýµ»Ã–Ϙ#UlcîŒF†}ê9‰äÛGoy5©¶R‘¼*w?xÊsž¾¹æ¹ú(úŒ;¿ÃüƒÛ>ÇK%ƈúdzzܼpÆË(­¹JA޹éö7Ú]”‹éf–gß$²¡ÜÇŠà‚¹z)}B­wø{gØÞû;¡3j72 ™§H~Ev$“‚zž¤ÒÛ"Ò[g·Ônc0݉UI 6WÜôÇZÀ¢ŸÔ¡üÏðÿ ö¯±Ðj/¤j2;Fâ$^L¾Jÿ¬Nx9Sêy<Óž]E¸Sw(Ë­…<ÛŒ|½>Aú×;E §3ü?È=³} ÙWG¸¹3Üjw2¿7 pøA‘•sU#0 a&ûhŽÆ)Þu„3>Y coÞ'ïíY´SX(%k¿ÃüÕlßBû=¼s#ǻۅe?263œ/_”tÅ;ÍÒÞÊK[Vêá©Va£*r •AÈ899é\õ¾£æ‡ù¶}ŽšÆóK±3±ÔgžIØ3É2rpu@è=*¼k¡Çk%¸¼›d–‚Ð’§;î~ï_˜ÿ…`ÑGÔaüÏðÿ öϱÐÑš[†7ÓùW ²h6òíÏÝÈ8¡*;‰¬[LšØjSÝ1ÚcóÉB…NA ±ç޹ ô¬:(úŒ;¿ÃüƒÚ¾Æ­šÙùµö§'ÚÞãÏY¢ÉhÈP£`€‡ô­¼ÓD°NÚ„ÒÏnŠò!ù·`’p£û£¦+™¢œ°0}_áþ@ª´tÑjk¥Ehú¬âdE pŠK’:Ÿ™O_zu•ö“cŠ·’Jò¹y$•X³±ÉÀ Ú¹z*^›¾¯_Oòm#a-t!oäK¨ÝOÂÐÆ²õJzíÂŽ}Îjh²"¸[‰5+™åYV]Ò *¥@ùP a`ÑTðQiþäÕö7›ûåhu˜&Y$q,kó|í¹—• Œã¨íMÛ¤ˆ- É‚ÛiHŠ|¥”ävg9ô"°è£êPþgø{WØébÔ,×K†ÕµiÄÈŠáP—b:Ÿ™O_z‚Õ4U‘EÌ’,°˜d!!fbxQÉ,}½«Š_Q†º½}?È=³7˜é8·hõK¸§†!ÎéèÙBåQ$ZD>_Ùõ{Ø6B!&5užr‡œ“ÓE?©CùŸáþAí_c½Ñå±:嵃æ+xƒÀÁÇ^½*†z~5„¿ä¬ÿ×%þORøg§ã]éªqåFrww;¸>࢈>ࢴ˯õf¼÷Ä_ñóýt_ç^…uþ¬×žø‹þ>bÿ®‹ü躲ÿ}¯ýqOýTõ—üƒíëŠè"§ Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ô4´‡¡ êAÐTtOç}•þÌcí>Y»»gâÓaÿ©¿ÜOæÕÌhƽ©êRÃw´PÛ’·BÊCöPK}séQ]ð;[ŸËëTì—L E¯m%å̶ͭÉhÌ[2î?»^H`0Ç ãšì5/麥ÒÝ]E)SËÄ‘¹ÎÆõª—ÑÞ hE«D–»Œ>LÒFT·Þ9V“êi-­ýn7«¿õ°ÝÆãMÑ--.¤ß4k†;‹c’BäõqøW–|IÛÿ $õ¾?ïüÕëÖ¶‘XÀ°CælRHó%iýôÄŸÖ¼“â4aµøI$~åú×y©ß[ŠÚ`“ Ù©c ±pJòÇzhŒ[{PˆUv«¨Pwm Ï\óÏ®i0E¸7´ŠÈA^µ4ô–9UdLƒ¹‹ÿkå§åY–ºC˜òAÁõã5³nbC¶œ“Óõþ”£¬¬SZYÙ¯ÄfA·=03Æ{qWk*Íd“T‘— Í»©Ï~8?j׫šSTêB+¤WêcO`¢Š+Ì4 (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€:¯ È7Yÿ®Küž¥ðÏOÆ¢ð—üƒuŸúä¿Éê_ ôüh»ƒî (ƒî (—_êÍyãæ/úè¿Î½ ëýY¯=ñü|Åÿ]ùÐueÿ û_úâŸú©ê /ùÚÿ×ÿÐEO@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@!èiiC@Ôƒ ¨êAÐRqM‡þ>æÿ®iüÚM‡þ>æÿ®iüÚ˜š†^•1¨eéH çïW|E\ø‚Ÿùbýÿé¼µì'ïW|E`jqåß½|ÔS7“ó²nEç’âúÿ•LH8äûÔ3ìkr§oY°ö9ôÊœUÚB&‚ú&ü‰f*p¬:Ùíÿê­Ëk¯9e µÄm°•=Níõ®n/ê.c•­¼¹Sæ2óìO\{RÜé×°ÏòDb—gɆ\Œc‚Aõ檔_´VW7qƒœ¬tv3“{UÂL§×ëÇùïZõÌh1º€LH?1ÚNqòãú éëÑÍj{JÊV¶‹s– ×IÜ(¢Šó (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€:¯ È7Yÿ®Küž¦ðÏOÆ¡ð—üƒuŸúä¿Éêo ôühºƒî (ƒî (—_êÍyãæ/úè¿Î½ ëýY¯=ñü|Åÿ]ùÐueÿ û_úâŸú©ê·Û¾ÅmäÁGä¦ JTŸ”vÚj_ø™ÿÏ­·ýÿ?üMY¢«ÄÏþ}m¿ïùÿâhÿ‰ŸüúÛßóÿÄК*%wgŽhü¹S”Œ„ÀþU5QEQEQEQEQEQES%š(|²$kýçl "š)Ó|R$‹ýä`E>Š( Š( Š( Š( ô4´‡¡ êAÐTu è)´ØãîoúæŸÍ©ÔØãîoúæŸÍ©9¨eéS†^”€®~õx÷ÄQ~úã'oúo-{ ûÕå<²žç[‰ãŒ²ˆä >|¾´˜ÎÆ2pÝé†6ØØ8#­DÒ®s†„ã=w/øÓ¤Ñ§À(3ìH¦›Bh±¥–2no,YÏÍ»†‚¸¨õpª¾ç<09?Aý [Ñ–òÅZ³¢$¹Vóº œ¯R x{“Ö«êV—WE 6àÌX£ž1ß¾Oå^ ÁcS½£½újŒêEû+•t¿ùÀFqƒ×žÆº:ݰ¹‚ö9$‹jŒ‚A˜­º×7œ'Z. 5e·«#šŽ¡EW”nQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEu^ÿn³ÿ\—ù=MáŸëPøKþAºÏýr_äõ7†­wP}ÁE}ÁE2ëýY¯=ñü|Åÿ]ùס]«5ç¾"ÿ˜¿ë¢ÿ:é½w¦O¤ÚϦ©²»1[Åp—¹r€óÞ€äg'¦qSê~(ŽÃ\²Òáµ{‡žtŠyíX7WЛü½Û¶óÓ8©­&»¸ŽãíVfe•Ò1æ‡ót~:gÓµQðΙá]:Êò?.ⶺn'¸â…þ@Z?òŸþ¸Eÿ¡ITïuý:ÂàÁ<íæ€ Tœ®ÐqWü…gÿ®èRVF£áKJõîž{¨¤|n2à1žTó€áYÕuw¿™µIË÷­¥ä;þÍ#þzÏÿ€²ÿñ4ÂY¤ÏYÿð_þ&© §ÿÏíÿýõÿGü ºüþßÿßQÿñÏ͊쎾LóKðÿ"ïü%šGüõŸÿeÿâhÿ„³Hÿž³ÿà,¿üMRÿ„OÿŸÛÿûê?þ"øAtÿùý¿ÿ¾£ÿâ(æÅvAÉ€þi~ä]ÿ„³Hÿž³ÿà,¿üMð–ióÖü—ÿ‰ª_ð‚éÿóûÿ}GÿÄQÿ.Ÿÿ?·ÿ÷ÔüEØ®È90Í/Ãü‹¿ð–ióÖü—ÿ‰£þÍ#þzÏÿ€²ÿñ5Kþ]?þoÿï¨ÿøŠ?áÓÿçöÿþúÿˆ£›Ù&ù¥ø‘wþÍ#þzÏÿ€²ÿñ4ÂY¤ÏYÿð_þ&© §ÿÏíÿýõÿGü ºüþßÿßQÿñsb» äÀ4¿ò.ÿÂY¤ÏYÿð_þ&øK4ùë?þËÿÄÕ/øAtÿùý¿ÿ¾£ÿâ(ÿ„OÿŸÛÿûê?þ"ŽlWd˜æ—áþF®›{o~×èEY<¸É·Ú¤áHÈäŸÒŸw¿ãSÁªOco¨Ì‰såÇ,PEÛ™dIà“‚Ä¯Ì¤NqÇZµ³¨Ipy(·2Üù1Í-¼‘#.Íå¶6±Ï^õÄñuú%ý|Í}œ ïì-Kþ}¿ñõÿ?°µ/ùöÿÇ×üjÓkRŲêæ$š®òÈ¥s岎2NïÖ¦¸Õõ+/2 Å£\2Dñ:#l¤C Ù8Îs‘Ÿj>·_²þ¾aìàgÿaj_óíÿ¯øÑý…©Ï·þ>¿ã]Ÿ{q'Ûb»™mdØZ!\m œuõ5–uûøl£»š;cͬ—"Ê]À1ÏÍ‘Ücš•®Ý’_ùÙ@¥ý…©Ï·þ>¿ãGö¥ÿ>ßøúÿoi··’^Íiz`gXc™^*lŒIäõ¬º¹ŽðÜgPP5&çy‹Aåï+·fãŽÀ|£žô㌬ÛZ_1:pµÃû RÿŸoü}Æì-Kþ}¿ñõÿÛ‹í â™K©$‰íK¬GSç€:ŸsQëZÌštê!’7ØËîØ-ŒïSµ;ãpç–6³i$µõ£{ô2?°µ/ùöÿÇ×ühþÃÔçßÿ_ñ­½ ï%Žåç¸I!ûLÊŠPï\HÖ,r=*¢¬×n¯wËÁ;M*™Á#Ê…éÓ?‰£ëÕnÖŸù‚£gÿaj_óíÿ¯øÑý…©Ï·þ>¿ãZ—]]ønÚ[w•®VÝXtñd•êHûÇØñTnµ;›…ã2KgŠ]LVs’nÏ?(=ž2=j–2³Úß×Ì^Î6L‡û RÿŸoü}Æì-Kþ}¿ñõÿìÄ‘«¯FŠÃ·»“NºÖ¥½»’x­Õ$ù°¤áGAYÇYßE§¯ù•ìc¡—ý…©Ï·þ>¿ãGö£ÿ>ÿøúÿIc¯¬ê—j0\Iº"Š'4fÚp‚}‰¤³¹ß`—"ü^Om©‡ •v G†È8¯Ö«­ÒûŸù‘ìákŒþÂÔ¿çÛÿ_ñ£û RÿŸoü}ƺ»Ù'†Êy-¢ógT&8ó÷Ž8‡£%Íݱ2Ú ù™­Ý<’6pQ›#¯<út¬ãŽ­%{/ÇüÊtbŠØZ—üûãëþ4aj_óíÿ¯øÕßí½F=: ¥XYîç)ném!ýÞÒw˜Á,IÁÀ¡«É©\·†î/¥€Åqr¦6L•Î+rÀ8>´Þ2ºè¿óJ ØÄþÃÔçßÿ_ñ£û RÿŸoü}Æ®]ZyvÖWWBù‘|¥ŽR¨/#Áóœç8š[«ûŸí‰å•\ØÚO8Žà¡ ÁNâ |ã,8' RÆU{[úù‹ÙÆ×)aj_óíÿ¯øÑý…©Ï·þ>¿ãVí®.>Óiznfg¸¿–Ýá.JÀz6ž½k¡º„Ïk$`°,8Û!ŒçýáÈúЉcªÅ¤ÒüÌjŒYÉÿaj_óíÿ¯øÑý…©Ï·þ>¿ãZ]\é7v²<Íuop˰ݺ㡠昌rFj¤wš…Í–›e ¼’²Jn Oå3Ø)PàÔõœu\«åý+÷²‰ö£ÿ>ÿøúÿØZ—üûãëþ5©§\G.©i=¸uŠöÇ{+¶NP¨žç F{àVõg<}X½—õó£q¿ØZ—üûãëþ4aj_óíÿ¯ø×eEOö^Ëñÿ2½„N7û RÿŸoü}Æì-Kþ}¿ñõÿ쨣ûF¯eøÿ˜{œoö¥ÿ>ßøúÿØZ—üûãëþ5ÙQGö^Ëñÿ0ö8ßì-Kþ}¿ñõÿ?°µ/ùöÿÇ×ük²¢í½—ãþaì"q¿ØZ—üûãëþ4aj_óíÿ¯ø×eEÚ5{/ÇüÃØDã°µ/ùöÿÇ×ühþÂÔ¿çÛÿ_ñ®ÊŠ?´jö_ù‡°‰Æÿaj_óíÿ¯øÑý…©Ï·þ>¿ã]•hÕì¿óaþÂÔ¿çÛÿ_ñ£û RÿŸoü}Æ»*(þÑ«Ù~?æÂ&w‡,nl´Ý_íìßíùÎz}i¾þµ·üƒoÿë—ô5‰á¯ë^ž£«MN[³žqQ•‘ÝA÷A÷¹.¿ÕšóßÇÌ_õÑz×ú³^{â/øù‹þº/ó ÞÒk¤±¶XàB˜-1S÷Gm§ùÔßh¾ÿŸkoüoþ"™eÿ û_úâŸú©è?´_ϵ·þ7ÿGÚ/¿çÚÛÿÿˆ©( bI ÒO6Á#…]¨I qÉ=OjšŠ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(«Xîà1J8êê§ÔQkk¤(‡I=XúššŠ(¢Š(¢Š(¢Š(¢Š)CKHzޤGK,¢ w”«°E-µ³vu4€’¡•¼§$›\¸Ø[wà9®A×5KÍJhu >æ¥%àf¶uü HÁãœúçÚºH@ûd§¸qù·øS¹º¸þ÷þIÉþ5]\ÿÿ$eÿ±{¬išt‹ö£ijî2«<Ê„P ¨îõm>ÖÞ;‹‹ûX¡“îI$ʪßBN *½Ô ó„^íöWù'ñ¬oKcl°ÚO³BcYÃù9çšée•UãpèÃ*Êrõ¸O¯úLjIX£I@ã8ŽœùQì¡Wݞ•G̈n5mk‹±=”ìïˆf8m¼ŽŒŒðzÕ]GPÓF¬Kr»ä#ͺR§‘Ãyã±®}JäÜJìùg}ÄcŒÓÿ¶dqɃ¯©>¾æ¹þ¡ô¿Þs}n½ú­…þgd‰,7´bE- 7˜rÃŽAÇ|ôëDz·‡ £[+½®U‰f,~C•/:W%«lÑ·›Ë鵎;ûýiésm)]¬Ž„ÒúœnÛ¿ÞRÅÔ¶§woâ 1ZYâ‚à4íºC€wÿ{Ð ª—bP¶W•6‰[¨Q»åýœV ¾ß!v¸uìýKI`©-¯÷Š´šLé[Ó#¸3¥¼âSÆ[î‚H{ÜÕAs¡ “?Ù.Ëy†]­#ßœîØ_nsÏJÆ¢…‚¦¶¿ÞÖGKý»¦ý¯í^DþvÏ/vÝÎqØëU®ï´[Ùüéí®‹¶¹@À€ÁXÁõ¬:),%ª¿Þ?k&tú®“ks,ðÛÝ#ÊIq»*IêvîÀ>àS!Õlb{Õ+;[Ý6óÀ6’0Üîèzþu…E?©RóûÃÛHܸ¿Ñ®aŠ-îü¸—bªHÊ6ú8Èã¾h¸½ÐîŒ~m”ø<°å?º@` ûŠÃ¢©Óîþñ{Vt6ÚÍ…´÷Rª\¸;eWŒ(P>‚¤MwMŽâYÒ Ä“mÞØãüUÍQKê4¼Çí¤t±ëºlSÍ2A8’l8à`¥T—QÓžXvG:D·æDÚ˜ý¹ÝÀÏ?€¬Z)¬%®¡íe±½oªé°YËlRé–WwvRK1c‚#¯j„Í ÝÎ郫«3HŘ67e‹äçhïÚ±è£êt÷WûÅídmý³E6ßgh/ž=ÁÇ™3³) ±|¯àEX]kMK3käÝ4EJçy õÉ,I®rŠ “ÞÿxÕY-H§Òü¸MÇÛžâ(„>lR¼EŒ…qëVe¿Ñf¼[©-. À©Îxb½ ]Ø$v$qXTSx:mÞïï´fâßèÉx÷ik:ÎÙ;º€HÁ!w`Ü“K¥¥Ç¥E§˜îÌ1¢ *v1Ç|«? ¢—Ô©ùýáídmý³E¢Ùmï0åò’²±cÔ–¸þ&‰/49m¡·6w 9òü³°®zò{óÏzÄ¢©Óîþðö²7mõK/ÂÇ0D…`†5@G'ø»ñù »ÿ -—üòŸþùã\­ž“ÞãU¤Ž«þ[/ùå?ýò?ÆøIl¿ç”ÿ÷Èÿåh¥õ !í¦u_ð’ÙÏ)ÿï‘þ4ÂKeÿ<§ÿ¾Gø×+EP¢ÚgUÿ -—üòŸþùãGü$¶_óÊûär´Qõ !í¦u_ð’ÙÏ)ÿï‘þ4ÂKeÿ<§ÿ¾Gø×+EP¢ÚgUÿ -—üòŸþùãGü$¶_óÊûär´Qõ !í¦u_ð’ÙÏ)ÿï‘þ4ÂKeÿ<§ÿ¾Gø×+EP¢ÚgUÿ -—üòŸþùãGü$¶_óÊûär´Qõ !í¦u_ð’ÙÏ)ÿï‘þ4ÂKeÿ<§ÿ¾Gø×+EP¢Úg¦jpê:n§ä¬‹åÄ3¼Ô7¡öªþ¦¡ð—üƒuŸúä¿Éêo S]4éÆœTc±““»;¨>࢈>ࢴ$e×ú³^{â/øù‹þº/ó¯BºÿVkÏ|Eÿ1×EþtÐiúäÓji¥Ak[x¡ó^K¯†[rÇ´îã9æ¬Yk7Zü«i§«XE3B÷O>ÒYxm©´äÆr*¬š úœÚeÔ×­½·“4H¶ß½Rª8ó7t'¨Ç|TöÚÕ•Üâ×R §Ï+JöÏæ¹`¯¸`ÏC@2O xi2ÇhÕÊ5µâÌA^Π§ZÉÓ¦ÿq?›W1 /‰%ÔåþÔ»”[Û’Œ­`LÝŠ íÇ9úZéáÿ¹¿ëš6¦+¬¥ÃøéE¼ö0·öYË^DdR<ÎÀ2óU4á6¶‚M=.`¸ž4šuDÿ>Y¸SžÝ=ë°¾Ò4ÍFE’ûN´ºtVžr $T7zF™sPÜiÖ’ÅýÚI²§ÐÅ.–þ·¸Û»¿õµŒ_4gÃiác/Cn UÈ,§å'${WžøûUµÓ|Jâf¹Ý6Ÿ*IŠ!oµHS%y'ŸáÀë^¼‘¤J±ÆŠˆ£ ª0öàß[dãýÿô¢j´îÉkKÌW±[ìÛ:œÄ>÷9>äóù~0’id[œ Ü.å¾=MdÈÉ&”8ÍiÌdé£j2ñ´­ö­ÃøVI#aœ}Ïñ§Ægkp#’'›ŽV6qùŸÖ²ePA'éOFJ|Âöhô=!Y4¨Æç&¯V_‡X>…láÝÿ¡Ô¬^æË`¢Š) (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šê¼%ÿ Ýgþ¹/òz›Ã_ÔÔ>ÿn³ÿ\—ù=Má®§ýã@ÔpQDpQ@ ºÿVkÏ|Eÿ1×EþuèW_êÍyãæ/úè¿Î€;«/ùÚÿ×ÿÐEOPYÈ>×þ¸§þ‚*z(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š)CKHzޤGR‚ M‡þ>æÿ®iüÚM‡þ>æÿ®iüÚ˜š†^•1¨eéH çïW€ü_ø®Û?óêÿúQ5{ñûÕã_4”¿ñ-´Œ®qo*|¹Æï´I··ûÝë|5V©ÉÅ'dy1âœzV›ZÜ”UÔš’¿»B¤ü¼Úœ£ÊìÌ}¢3U9§\÷­Øô‡’ õûuõ4&á¾o—éR¹Eí—Ã@Úã§Ïÿ¡šÖªZD^F— ~›¿ô#Wk7¹¼uAERQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEÕxKþAºÏýr_äõ7†ºŸ÷Cá/ùë?õÉ“ÔÞêÞ4ÝA÷A÷˯õf¼÷Ä_ñóýt_ç^…uþ¬×žø‹þ>bÿ®‹üè¨Ñ5n®n¬ž#´ŽÜ$ŠOͺ%b¸þDVÍPÓ>Ò#PðÀ¶æŒnŽK¹Ø3¸mzO•~€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ CÐÒÒ†€#©AQÔƒ ¤Óaÿ¹¿ëš6§Saÿ¹¿ëš6¦æ¡—¥LjzR¹ûÕÂkÖ«s¬+ šyb(@„òœðyÝŸ½^⻉#¿·EU(Ù²;ùÒ9 óÅzbn½—fEO„àä·Š;©Ð{g¡ç>ßÒí\qøSäf‘p£ zTäH )<òvž˜?׆%Þ¬½N;jNˆdäƒÇâ*2Øo_|ѹ¹À•3'ßšÊ(£rÄæÎ3õþf¬Um?þ·Zí]}Áìà3þ«ßùëýôÂøF¯ç¬÷Ñÿ §l^ëKÑìbxâ·1Lì·1¾É …#*HÁ'®8ïŠ.&‚þÒâêxÖ‹KŽk4&;¹O|…•iõŠ×ßðó±<.Â5{ÿ=`ÿ¾øQÿÕïüõƒþú?á]%´ÂX—S*%PrUˆÓ­`iv–öº„š|ö–35Ä2Jn"PZE/ʸ#ý¡ß’ÆVw×o"½”-r/øF¯ç¬÷Ñÿ kxzådHÚâÔ;çj—9luÇØG¡¼bF6ˆâwõfÏ¿µJ¸‚ØÂ‘[¤¶zŒ*²[¡U¶ÐN ';XƒÉ­>³[¿áéþböqì/ü#W¿óÖûèÿ…0øzåeXŨ‘*…ÎHH÷ÑÝM$º}ÃXKNªÊŒX8ÁúÁ‡Ssp‘Ï{qŠ+´I4qy‘2ˆÏWnlñ×<ÖpÅ×—T7Joü#W¿óÖûèÿ…ð^ÿÏX?ï£þ¯{«Zé¶­$÷%íÎÕ;"EÒ@ä*n8ïëŽk@\j á{©®T­ÜqJT¹8ÎÒv’3ŒgéË]u@©Á»qøzædßų¦HÜ®Hààö§ÿÂ5{ÿ=`ÿ¾øSï4ë;ˆl,m¡Sx!Œ¤ùÿxÁ8=‰ä u>¬_é¶7ž"´ìyª>Õ4ÞXÞvà Ýׯ?ð[«}ûôíó³¯b§ü#W¿óÖûèÿ…ð^ÿÏX?ï£þ–SÉý²·wÞgšö[eR§Í€(l`çayÀ{9­½Fù£ÒšâÏ3—À¡C(8Ý…É uãÒ”±uÓJûù Rƒ¹‹ÿÕïüõƒþú?áGü#W¿óÖûèÿ…E`tÿì[˜§·šíVùÄqO•ÏL†'©9éÔãfëM†-ÏN¹….ï™Y V$ªÉlö Ç=xëTñU“µÿø"TâÈWÃ×/#Æ·¥Ó”9Êç¦x§Â5{ÿ=`ÿ¾øVŒ15®»g˜df±e•ÏWØË´Ÿûé¿:٬厬­gø R‹Üåá½ÿž°ßGü(ÿ„j÷þzÁÿ}𮪊¯Ö+ØÀåá½ÿž°ßGü(ÿ„j÷þzÁÿ}𮪊>¿X=ŒWþ«ßùëýôÂøF¯ç¬÷Ñÿ ꨣëõƒØÀåá½ÿž°ßGü(ÿ„j÷þzÁÿ}𮪊>¿X=ŒWþ«ßùëýôÂøF¯ç¬÷Ñÿ ꨣëõƒØÀåá½ÿž°ßGü(ÿ„j÷þzÁÿ}𮪊>¿X=ŒWþ«ßùëýôÂøF¯ç¬÷Ñÿ ꨣëõƒØÀåá½ÿž°ßGü(ÿ„j÷þzÁÿ}𮪊>¿X=Œ Z™6¦ê¾sFÞdC =zz‡Ã}OûÇùÖÜò ¿ÿ®_ÐÖ'†úŸ÷ó¯W RU))Kø'5H¨ÊÈî û‚Š û‚Šè e×ú³^{â/øù‹þº/ó¯BºÿVkÏ|Eÿ1×EþtÝYÈ>×þ¸§þ‚*z‚ËþAö¿õÅ?ôSÐEPEPEPEPEPEPEPEPEPEPEPEPEPHzZCÐÐu è*:t€Zcǹƒ+²8ãrã§ãO¢˜æ?òù7ýòŸüM4Á1ÿ—Ùÿï˜ÿøšžŠªm$nöàŽã?P¹ª×ºm£Â‹+D"€Epr>õ§U]VMbÙ]C(ŠFŒŒåFSùÔT§ŠÒdÓº2ÓI‘žòÍ™×c– K/¡ç‘Éâª\hš$Úy²ŠþÖÚÛŠCX'ÝXúWg±?¸¿•û‹ùV+ El¿þeûYw8û'EÓí¢†ëlD+6Ýß1Ëwã'°â¤‹MÐᣊ{ãfʨ€ ‘ž¹®³bq*6'÷ò¡á)7v¿þaí$s+˜Žî—öªÎrämŽ1“Ï<P®›¡£LË=‚™Áˆ<À½Ï?u›û‹ùQ±?¸¿•/©Ñíø¿ók.ç2°ik!‘oíC• XmÎAœôäÕuÒ´º7K.ž·äÊ#@äúç­uÛû‹ùQ±?¸¿•S¢º~/üÃÚÈæ|3Íó~ßkæmÛ¿åÎ:ã9éPϦèwR¤·ØM"}בŠý Ù§G·âÿÌ=¬»œ¸µÒVßìâöÐC·o–íǦ3ŒUs¤èÀÛ,WöÐÃnæD† ª…°@$Û&» ‰ýÅü¨ØŸÜ_ÊšÁÑ]?þaídrqiúDV¯möëg…Ù™ÕÈ`ʼn'9<òi£JÐ%dÓ„@Ø#M¸8ÈǾå]vÄþâþTlOî/åGÕ(öü_ù‡µ‘Ȧ“áøíÞÝ$Ó– ^5‰±÷ M®“ ¸·ŠöÒ8@À…Ó×Q±?¸¿•û‹ùRx:/uø¿óVHâ“@ð÷‘SÏctb]ˆ÷£°QÐdö|A¦ L¢þÔHT)q·8sÓšé¶'÷ò£bq*o Iî¿þ`ªI§Ø4o´=Àº²[‡]­0UGûÙÍ>Ú×L´µŠÞFŽ$£pè?ê6'÷ò£bq*_S£µ¿þaíeÜäæÓt;ˆÌsÏa*ó º# ßÞÁ=}ê7Ñ|;$1ÂçLh£ÎÄ0¡ ž¸³]†ÄþâþTlOî/åMa).Ÿ‹ÿ0ö²94Ý&Þé§R€f5‰m /eñÖ­í°ÿ œ˜ÿèö'÷ò£bq*OEî¿þaíeÜç6ØÐNÌl?è'æ?ƺ=‰ýÅü¨ØŸÜ_Ê—Ô¨/âÿÌ=¬ûœæÛú Áùñ£m‡ýàüÇø×G±?¸¿•û‹ùQõ*Ëø¿ók>ç9¶Ãþ‚p~cühÛaÿA8?1þ5ÑìOî/åFÄþâþT}J‡òþ/üÃÚϹÎm°ÿ œ˜ÿ6ØÐNÌt{û‹ùQ±?¸¿•R¡ü¿‹ÿ0ö³îs›l?è'æ?ƶôƒóã]ÄþâþTlOî/åGÔ¨/âÿÌ=¬ûœæÛú Áùñ£m‡ýàüÇø×G±?¸¿•û‹ùQõ*Ëø¿ók>ç9¶Ãþ‚p~cühÛaÿA8?1þ5ÑìOî/åFÄþâþT}J‡òþ/üÃÚϹÎm°ÿ œ˜ÿ6ØÐNÌt{û‹ùQ±?¸¿•R¡ü¿‹ÿ0ö³îa‰t»Æ†á&VŒò½° sþêÞ?κmY6—b…ó-%/Œà®3ÿ}ιŸ õ?ïç]áG–;Ûz³ºƒî (ƒî *Ä2ëýY¯=ñü|Åÿ]ùס]«5ç¾"ÿ˜¿ë¢ÿ:äkÿ\SÿA=Aeÿ û_úâŸú©è¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¤= -!èh:tH: @-QLŠ( «ÌjÛþ¸IüÒ¬ÕI] Ôíç•‚D#t.ÇTŒžÝ jQU?µ4ÿùþ¶ÿ¿Ëþ4jiÿóýmÿ—ühÝSûSOÿŸëoûü¿ãGö¦Ÿÿ?Öß÷ùÆ€-ÑU?µ4ÿùþ¶ÿ¿Ëþ4jiÿóýmÿ—ühÝSûSOÿŸëoûü¿ãGö¦Ÿÿ?Öß÷ùÆ€-ÑU?µ4ÿùþ¶ÿ¿Ëþ4jiÿóýmÿ—ühÝSûSOÿŸëoûü¿ãGö¦Ÿÿ?Öß÷ùÆ€-ÑU?µ4ÿùþ¶ÿ¿Ëþ4jiÿóýmÿ—ühÝSûSOÿŸëoûü¿ãGö¦Ÿÿ?Öß÷ùÆ€-ÑU?µ4ÿùþ¶ÿ¿Ëþ4jiÿóýmÿ—ühÝSûSOÿŸëoûü¿ãGö¦Ÿÿ?Öß÷ùÆ€-ÑU?µ4ÿùþ¶ÿ¿Ëþ4jiÿóýmÿ—ühÝSûSOÿŸëoûü¿ãGö¦Ÿÿ?Öß÷ùÆ€-ÑU?µ4ÿùþ¶ÿ¿Ëþ4jiÿóýmÿ—ühÝSûSOÿŸëoûü¿ãGö¦Ÿÿ?Öß÷ùÆ€-ÑU?µ4ÿùþ¶ÿ¿Ëþ4jiÿóýmÿ—ühÝSûSOÿŸëoûü¿ãGö¦Ÿÿ?Öß÷ùÆ€-ÑU?µ4ÿùþ¶ÿ¿Ëþ4jiÿóýmÿ—ühÝSûSOÿŸëoûü¿ãGö¦Ÿÿ?Öß÷ùÆ€-ÑU?µ4ÿùþ¶ÿ¿Ëþ4jiÿóýmÿ—ühÝSûSOÿŸëoûü¿ãGö¦Ÿÿ?Öß÷ùÆ€-ÑU?µ4ÿùþ¶ÿ¿Ëþ4jiÿóýmÿ—ühÝSûSOÿŸëoûü¿ãGö¦Ÿÿ?Öß÷ùÆ€-ÑU?µ4ÿùþ¶ÿ¿Ëþ4jiÿóýmÿ—ühž³ÔÿפÿÍ+—ðßSþñþuÒjSÅt²É‹,qÚʬèr2Åp3ëòšç<7÷ûÇùÒ¹ƒî (ƒî )€Ë¯õf¼÷Ä_ñóýt_ç^…uþ¬×žø‹þ>bÿ®‹üè«ÒuXî§}9 œ=¤—”°–@@爭U4è#ŠÎ'D¥Ž7r?ˆìUÏäåV袊(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¤= -!èh:\ŸZJ) \ŸSFO©¤¢€'ÔÑ“êi( Éõ4dúšJ(w7÷çFæþñüé( ÜßÞ?›ûÇ󤢀sxþtnoïÎ’Š]Íýãùѹ¿¼:J(w7÷çFæþñüé( ÜßÞ?›ûÇ󤢀sxþtnoïÎ’Š]Íýãùѹ¿¼:J(w7÷çFæþñüé( ÜßÞ?›ûÇ󤢀sxþtnoïÎ’Š]Íýãùѹ¿¼:J(w7÷çFæþñüé( ÜßÞ?›ûÇ󤢀sxþtnoïÎ’Š]Íýãùѹ¿¼:J(w7÷çFæþñüé( ÜßÞ?›ûÇ󤢀sxþtnoïÎ’Š]Íýãùѹ¿¼:J(w7÷çFæþñüé( ÜßÞ?›ûÇ󤢀sxþtnoïÎ’Š‚ü“§ÜäŸõMü«–ðßÞ?ïç]Eÿüƒîë“*åü7÷ûÇùÐsÜQÜS˯õf¼÷Ä_ñóýt_ç^…uþ¬×žø‹þ>bÿ®‹ü躲ÿ}¯ýqOýTõ—üƒíëŠè"§ Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ô4´‡¡ 袊C (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€+ßÿÈ>çþ¹7ò®_Ãxÿ¼uÿò¹ÿ®Mü«—ðßÞ?ïç@ÌpQDpQLC.¿ÕšóßÇÌ_õÑz×ú³^{â/øù‹þº/ó êËþAö¿õÅ?ôSמßivww:ܓþH´˜."bNc“Ëa¹}Ƚ=+¢mr8ô»MÖ šhºk}§2¾¸Ç'>ô¯¥ÿ®¿ä;koë§ùV¿¾ƒM´k«–+•R@Ï$€?R+Ït‰$:²è“X3É¥=5fÉ ±ùùëÇn*{¤ðü¾ ¼M%#’àG Þ(Ë…u-æÎ~ösUý_p¿¯ËüÎö[Ÿ.î<‰ŸÎ |Ä\¢`ížÕ=qÈÚ[kzöÙ¾ÊëgÙÀ »bç¥di¿eݤ}—Ìÿ„—ícíùÝæmÉó|ÏöqÓ·LQÕ ésÒ(¯:–ÊÙ,õ-a" ¨Ã­íKÃ…óQvçÓŒW¢Ò[_úÙ?Ô:´QEQEQEQEQEQEQEQEQEQE‡¡¥¤= GERQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE^ÿþA÷?õÉ¿•rþûÇýãü먿ÿ}Ïýroå\¿†þñÿxÿ:î`û‚Š û‚Šbuþ¬×žø‹þ>bÿ®‹üëЮ¿ÕšóßÇÌ_õÑwV_òµÿ®)ÿ Šž¨[O:YÛ*YO"ˆS¥p~Qêj_µ\ÿÐ6çóOþ*€-QU~Õsÿ@ÛŸÍ?øª>Õsÿ@ÛŸÍ?øªµEEâ`À£ÆêpÈãT´QEQEQEQEQEQEQEQEQEQEQER†–ô4QHaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP{ÿùÜÿ×&þUËøoï÷ó®¢ÿþA÷?õÉ¿•rþûÍþñþtÜÁ÷A÷Ä2ëýY¯=ñü|Åÿ]ùס]«5ç¾"ÿ˜¿ë¢ÿ:é`ñE¥›ZÙOkz±¨†¼ò‡²:)U'9çróŒdõ«Sx–]R++>þšo"+§|§sÐw=‰®Sk­KMþƒM¼ó'–ÕÖçÉ>HŒ,LÎ_ #k uÈ&·¿Qñ„¶Z¹¿µ»@L𸴃‡›äÎÒpWæéNÊëúì+»?ë¹ÛÑE†P?òŸþ¸Eÿ¡IQÝjvNêöÞ# I R:ÿÈVúáþ…%`j¾}CR–òDÀeÆå0ïä8;‡túÖue5Á]›P9JÕedjÂA£ÐVËþÿ¯øÑÿ ÿA[/ûþ¿ã\ÿü!_ôø øåð„]Ðdà1ÿã•Ïí1?Éø~Çÿ?_ÜÿÈè?á Ñ¿è+eÿ×ühÿ„ƒFÿ ­—ýÿ_ñ®þ‹¯ú ü?ürøB.¿è2?ðÿñÊ=¦'ù?ö8/ùúþçþGAÿ ÿA[/ûþ¿ãGü$7ýl¿ïúÿsÿð„]Ðdà1ÿã”ÂuÿA‘ÿ€ÇÿŽQí1?Éø‡±ÁÏ×÷?ò:øH4oú Ùßõÿ?á Ñ¿è+eÿ×ükŸÿ„"ëþƒ#ÿÿ£þ‹¯ú ü?üri‰þOÄ=Ž þ~¿¹ÿ‘ÐÂA£ÐVËþÿ¯øÑÿ ÿA[/ûþ¿ã\ÿü!_ôø øåð„]Ðdà1ÿã”{LOò~!ìp_óõýÏüŽƒþ þ‚¶_÷ýÆøH4oú Ùßõÿçÿáºÿ ÈÿÀcÿÇ(ÿ„"ëþƒ#ÿÿ£Úb“ñc‚ÿŸ¯îätðhßô²ÿ¿ëþ4ÂA£ÐVËþÿ¯ø×?ÿE×ýGþþ9Gü!_ôø øåÓüŸˆ{üýsÿ# ÿ„ƒFÿ ­—ýÿ_ñ£þ þ‚¶_÷ýƹÿøB.¿è2?ðÿñÊ?áºÿ ÈÿÀcÿÇ(ö˜ŸäüCØà¿çëûŸù«¨Yj—‘Û[^E4aI<™Aè@àðïÒp¶PÚMud!GL‡ÉÀÜ8luÎZÇÓô‰|?¨¬’Þ}¡&‰7”P+eHxõÁüªõäÿñ/¹‰diX™|Ù$‚cë]rq¼Õ™ÇV0ŒÚ¦î1¨Ùãþ>¡ÿ¾ÅÚ6_óõýö)âÖ£™:zð¥û,>²~cü+C"?í/ùú‡þûhÙÏÔ?÷Ø©>ˬŸ˜ÿ >ˬŸ˜ÿ X®!œ¨øë´çóÐÓâbÉ»$c“O= GERQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE^ÿþA÷?õÉ¿•rþûÍþñþuÔ_ÿÈ>çþ¹7ò®_ß}¿Þ?΀;˜>࢈>࢘†]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@½ÛÅal‚Îy…>e)ƒòV§ût¿ô¹ÿ¾£ÿâê;/ùÚÿ×ÿÐEO@ ût¿ô¹ÿ¾£ÿâèût¿ô¹ÿ¾£ÿâéôP $¹–âHÌ{ÕQQˆ$ÉÉÆGV=êz( Š( Š( Š( Š( Š( Š( Š( Š( M sÄÑJ¡‘†5JËKKYL¯!•ÇX}Ñþ>õ¡EQEQE‡¡¥¤= GERQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE^ÿþA÷?õÉ¿•rþûíþñþuÔ_ÿÈ>çþ¹7ò®_ß}¿Þ?΀;˜>࢈>࢘†]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@•´Ó¬:tq[ hG›/˜–BŒ|½ò*.nuìŸ>ÖÇý0íż®¼|ÀqÓ'­D°yª$XH Îá”~CŠ_²·üóü zW§PݼñÙÌöÑ gTcdà3cžÙ5Kì­ÿ<ßÿž²·üóü zài^Þ&™JPPsµ±È©+3ì­ÿ<ßÿž²·üóü zw:«<·‹¨ZÇ ö®Ï”°nyÉÍVû+Ï7ÿÀ§£ì­ÿ<ßÿž•ÆMªK¨El­¦ÁÓo–C€ž£¾+#í¾+ÿ e§ýô?øºÑû+Ï7ÿÀ§£ì­ÿ<ßÿž²7'~f¿¯Czu”#gýoþfwÛ|Wÿ@ËOûèñt}·Åô ´ÿ¾‡ÿZ?eoùæÿøôå³,q±‡ÖêJŸbÿþä_ÖWüûÜÿÌÌûoŠÿèiÿ}þ.¶ø¯þ–Ÿ÷ÐÿâëV;Xd‰3 Àyïþ4ï±Cýé¿ïûÿÅÿ;ü?È>³ù÷¹ÿ™‘ößÿÐ2Óþúü]mñ_ý-?ï¡ÿÅÖ¿Ø¡þôß÷ýÿƱCýé¿ïûÿÅÿ;ü?È>³ù÷¹ÿ™‘ößÿÐ2Óþúü]mñ_ý-?ï¡ÿÅÖ¿Ø¡þôß÷ýÿƱCýé¿ïûÿÅÿ;ü?È>³ù÷¹ÿ™‘ößÿÐ2Óþúü]mñ_ý-?ï¡ÿÅÖ¿Ø¡þôß÷ýÿƱCýé¿ïûÿÅÿ;ü?È>³ù÷¹ÿ™‘ößÿÐ2Óþúü]mñ_ý-?ï¡ÿÅÖ¿Ø¡þôß÷ýÿƱCýé¿ïûÿÅÿ;ü?È>³ù÷¹ÿ™‘ößÿÐ2Óþúü]mñ_ý-?ï¡ÿÅÖ¿Ø¡þôß÷ýÿƱCýé¿ïûÿÅÿ;ü?È>³ù÷¹ÿ™‘ößÿÐ2Óþúü]mñ_ý-?ï¡ÿÅÖ¿Ø¡þôß÷ýÿƱCýé¿ïûÿÅÿ;ü?È>³ù÷¹ÿ™‘ößÿÐ2Óþúü]mñ_ý-?ï¡ÿÅÖ¿Ø¡þôß÷ýÿƱCýé¿ïûÿÅÿ;ü?È>³ù÷¹ÿ™‘ößÿÐ2Óþúü]lñ_ý-?ï¡ÿÅÖ¿Ø¡þôß÷ýÿƱCýé¿ïûÿÅÿ;ü?È>²¿çÜ~çþf7Ú¼Uÿ@Ë_ûèñt}«Å_ô µÿ¾‡ÿ[?b‡ûÓß÷ÿ>Å÷¦ÿ¿ïþ4{üïðÿ úÒÿŸqûŸù˜ßjñWý-ï¡ÿÅÑö¯Ð2×þúü]lýŠïMÿßühû?Þ›þÿ¿øÑìó¿ÃüƒëKþ}Çîæc}«Å_ô µÿ¾‡ÿGÚ¼Uÿ@Ë_ûèñu³ö(½7ýÿñ£ìPÿzoûþÿãG°Îÿò­/ù÷¹ÿ™ö¯Ð2×þúü]jñWý-ï¡ÿÅÖÏØ¡þôß÷ýÿƱCýé¿ïûÿÁÿ;ü?È>´¿çÜ~çþf7Ú¼Uÿ@Ë_ûèñuµ`o$²¯bH®w¢'Ïlw¤û?Þ›þÿ¿øÑö(½7ýÿñ«…7~fýLêVSVQKÒÿæYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿhbYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿ. Óî?ë›Ò¹o}öÿxÿ:êVÎÀþñ°s†•˜~D×-áϾßïç@ÌpQDpQLC.¿ÕšóßÇÌ_õÑz×ú³^{â/øù‹þº/ó ÚØ…´Œ’ &©®¿¥½Ûè<aˆ2#1f€'ð¨5;kÛÍ*Þ DŠDf_=$”ǽ?»SŒñÓ5a¬>£ê\ÁLÚ„‘ľw˼ž„0£};R_×à7ý~'Sek¨Ûùö’‰#ÉRpAuAö5öÞŸöñdg+9m€4l· b6“횣£Þi––`®£ Ì·w$I,_2´Ì3Œà`qŸJ¥¬_[Üë+mö©¡º@t𹃂ç#h$òqÅ>© £fÐ×´Ó~,¾Óûòæ1”`¥¿ºsíš±{k§[ù÷s,Qä('©>€IöÏÏ«XjšêÚÏ{o Wlm 4ç”øŸn¶u֚Ε¨Ü+( ‹#…$DÌÖ vàŒöÍ.ˆ}K˯é­e=ßžë ó ÂêW=>R2*}–³a¨NÐ[ÌÞr®ã‘4m\0Šç5½i5]#[ŽÚX¤´‚8JM9%¾nzqRi³¤þ*·’ÛRmY~Îé$¥Wã‚0PùÆx¦·±¼Ú²i›­®&tÛæÉ®È·tÜI^­ çl¬mnæT‚ÜzÈøUü³ŸÂ±t¸®ô zÆ;‹(--nàŸº¸2î•*Ç(¸$nóÅ%¯õýLoEý_ðÇQ«cs¨ÍaÊIu†–4ç`'ž™öëW+µ‚ _\¬1Gg#E 2erNgxUÓõ(tàFžÖ+#­æ¡Ô®Ð2¸c“ÔŽ”tOúêZþ¶;:+›ðÜ·xÕÄ“<â Ñm.pHwðNÆx¥ÑßTmAEÓkF-§?kŠÕcϹæ¦Ö¶ô¹~ïÄZUçÙ.nü¹AUoݱU' fjç#©©\ˆu>óR}îþÚÒÖ0vóH¤þ!çדØqߎµJ²‚¤# JKkïah¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+ðçßo÷ó®Â¸ÿ}öÿxÿ:î`û‚Š û‚Šbsþ¬×Ÿø‰OÚ#?ôÐ:ô9ÆP×®Ù—ù€É4ÑÚ«}–/”ýÑÚ¥ÚßÝ?•yýß‹o혤Y¿àEP>=ÔAÿ ŸýôÂÏOÚßÝ?•[û§ò¯0ÿ„ûRÿ  ŸýôÂøOµ/úÙÿßGü(Óö·÷OåFÖþéü«Ì?á>Ô¿ègÿ}ð£þíKþ€6÷Ñÿ ôý­ýÓùQµ¿º*óøOµ/úÙÿßGü(ÿ„ûRÿ  Ÿýô€=?ktþTmoîŸÊ¼ÃþíKþ€6÷Ñÿ ?á>Ô¿ègÿ}ð OÚßÝ?•*«n¾•åÿðŸj_ô³ÿ¾øQÿ ö¥ÿ@?ûèÿ…zU¿ü{EþàþU%y ø‹«€Ñ­À‘¿Â—þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü)Wâ.°ÇØöãþÚ7øP¤×#áÕ÷ûÇùÕ[?ê·Dan™÷c[Z¡A#štð}ÁE:!…SXdU «1(9£H@4Ë\h1ÈIØ*©ðÔdýÁùWc°Ôyké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~T£ÃQƒ÷å]–¾”yké@ݶ†‘…³mj"­„µ8(ŠZ(ÿÙnip2-8.7.0/doc/src/figs/ir5.jpg0000644000175000017500000016066013224651032013013 00000000000000ÿØÿàJFIFÿá°ExifII*JR(i‡Züÿÿ)( üÿÿ)( 0210‘ 0100 ÿÿ — ,ÿÛ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`(cXºÆ¯›g5Ìî(”»@(U®{Ôfñq^'ñOSšv6vÖñCŸ”JØ|0éTOÄ}pö³ÿ¿/ÿÅÒ¸óöÔþð£í©ýá^ ÿ \ô³ÿ¿-ÿÅÑÿ \ô³ÿ¿-ÿÅÑp=ëí©ýáGÛSû¼þ6¹ÿNŸ÷å¿øº?áckôéÿ~[ÿ‹¢à{×ÛSû¶§÷…x/ü,]oþ?ïËñt¿ð±u¿útÿ¿-ÿÅÑp=çí©ýáGÛSû¼þ.·ÿNŸ÷å¿øº?ábëôéÿ~[ÿ‹¢à{ÏÛSû¶§÷…x7ü,]oþ?ïËñtÂÅÖÿéÓþü·ÿEÀ÷Ÿ¶§÷…mOï ðoøXºßý:ß–ÿâèÿ…‹­ÿÓ§ýùoþ.‹ï?mOï >ÚŸÞàßð±u¿útÿ¿-ÿÅÑÿ Zÿ§Oûòßü]Þ~ÚŸÞ}µ?¼+Á¿ábë_ôéÿ~[ÿ‹£þ.µÿNŸ÷å¿øº.¼ýµ?¼(ûjxWƒÂÅÖ¿éÓþü·ÿGü,]kÖÓþü·ÿEÀ÷Ÿ¶§÷…mOï ðoøXº×­§ýùoþ.øXº×­¯ýøoþ.‹ï?mOï >ÚŸÞàÿð±u¯[_ûðßü]ð±u¯[_ûðßü]Þ>ÚŸÞ}µ?¼+Áÿábë>¶¿÷á¿øº?ábë>¶¿÷á¿øº.¼}µ?¼(ûjxWƒÿÂÅÖ}mïÃñtÂÅÖ}mïÃñt\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿã”ÂÅÖ}mïÃñÊ.¼}µ?¼(ûjxWƒÿÂÅÖ}mïÃñÊ?ábë>¶¿÷á¿øåÞ>ÚŸÞ}µ?¼+Áÿábë>¶¿÷á¿øåð±uŸ[_ûðßür‹ïmOï >ÚŸÞàÿð±uŸ[_ûðßürøXºÇ÷­ïÃñÊ.¼}µ?¼(ûjxW„ÂÅÖ?½kÿ~ÿŽQÿ Xþõ·ýøoþ9EÀ÷¶§÷…mOï ðøXºÇ÷­¿ïÃñÊ?ábëÞ¶ÿ¿ ÿÇ(¸ïöÔþð£í©ýá^ÿ Xþõ·ýøoþ9Gü,]cûÖß÷á¿øåÝþÚŸÞ}µ?¼+Â?ábëÞµÿ¿ ÿÇ)?ábëÞµÿ¿ ÿÇ(¸ñöÔþð£í©ýá^ÿ Yõµÿ¿ ÿÇ(ÿ…‹¬úÚÿ߆ÿã”\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿã”ÂÅÖ}mïÃñÊ.¼}µ?¼(ûjxWƒÿÂÅÖ}mïÃñÊ?ábë>¶¿÷á¿øåÞ>ÚŸÞ}µ?¼+Áÿábë>¶¿÷á¿øåð±uŸ[_ûðßü]Þ>ÚŸÞ}µ?¼+Áÿábë>¶¿÷á¿øº?ábë>¶¿÷á¿øº.¼}µ?¼(ûjxWƒÿÂÅÖ}mïÃñtÂÅÖ½mïÃñt\xûjxQöÔþð¯ÿ…‹­zÚÿ߆ÿâé?ábë^¶¿÷á¿øº.¼ýµ?¼(ûjxWƒÂÅÖ½m?ïËñtÂÅÖ½m?ïËñt\yûjxQöÔþð¯ÿ…‹­Ó§ýùoþ.øXº×ý:ß–ÿâè¸óöÔþð£í©ýá^ ÿ Zÿ§Oûòßü]ð±u¯útÿ¿-ÿÅÑp=çí©ýáGÛSû¼þ.·ÿNŸ÷å¿øº?ábëôéÿ~[ÿ‹¢à{ÏÛSû¶§÷…x7ü,]oþ?ïËñtÂÅÖÿéÓþü·ÿEÀ÷Ÿ¶§÷…mOï ðoøXºßý:ß–ÿâèÿ…‹­ÿÓ§ýùoþ.‹ï?mOï >ÚŸÞàßð±u¿útÿ¿-ÿÅÑÿ [ÿ§Oûòßü]Þ~ÚŸÞ}µ?¼+Áábëôéÿ~[ÿ‹£þ6·ÿNŸ÷å¿øº.½}µ?¼(ûjxW‚ÿÂÆ×?éÓþü·ÿGü,msÒÏþü·ÿEÀ÷¯¶§÷…(¼CÜW‚ÂÆ×=,ÿïËñt£â>¸;Yÿß—ÿâè¸ü· ÝêPÀׇé_¯cºEÔmáh Ã4*T¨õÁ'?N+×tûôº…$Ã#€ÊAàƒL Z)äQ@Ü6Ô5æ.Ïü#×QƒÕ“ÿCZô»ÃˆÍyÄg?ÙSö“ÿBæ¨ÝPî£uHÍmI¸×5inȘS$’Hp± êÆ´n¼7öeÍþ“¬Á©Çiƒp‹ DÈ?¼'p÷ªžÖ­´JczŽÖwVïm7—÷•[Ê´…þƒ hÚœ^£6¥w [´KwÎî§žÔ=´þ˜-Ìåð¾ºújê)¦JÖŒž`‘YI+Œçh;º{Tz‡õZÕî¬4ùg ÁP ô#wášíMö—£Â9«Þê$ði*©g Æ`T¿ÐrzJÎѼO¥ÿ`Ø[OwŸyc#²<ºy¹s”#•<Ð÷×P[/ë¡Îi¾Öuˆ¤—O°y’7Øçz&Óæ#žk:â9mf’ãh匕ta‚í]zõ«x~hf¹ÿM“Y„,l2œe‡öÎk7ÅwöÚŸ‰¯ï,¤ó-æpQ¶•ÏÊà€zƒKªþ»Ÿà?ëó55iZ!hn¼J¢óÉ¥¸ÓßæÈȃ3ëV/|3ggˆú^û`x|æ\åúçoÚ›âÏ\ßÌöZf¢_K’ÝÓÉ-˜e—u\Ô¼I¢ß]øŠ/¶:Ãk Ã0…ˆ/û¤`“ÆzPïgo1G¥ü¿Cœ‡ÃºÍƘu(téžÌ)o0ÈH\î#Ü ÊÝ]ì^-Ó_J±š+è,u K1oå˦™™ˆÂÈ>è5硸¦÷h×&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÕgO³:…×–\¤j7;¸ôõCu_Ò®ÖÞiŽ€r}FÆ€7[DÒ™6•[þz ?¯¥sÓXË¡ö C;0Ý¿ùô­Ð.r9æg?ÌÖd×ÁµXîG)É‘Üs“úÒN=7H€¥K›‰W‡uY03ÆÑŽþõ—©ØGkåÍo#Ik0Êê;àþ£Ë«Êè!u‘ƒd#ø@ì§Ò¨_M¾Ò <‚Èâ: .?­miš™ ¶¨ZIæû±o*Ç“ЇWѬRÑï4©dD‰"-¸`¨ïV Âj¶€1e@>lŽqžÇ=ÿ/Z†öélô§¶i–ŒÅ í#è;Šòcˆ¨ê%}o±ôµ0tì¹m~oëúès»«Ü| vϡة9ÄJ?JðÕìÞrt«O÷{ù£Ô¡9AE2ÛýX¢˜ˆïÕšò/ˆ1I=ŒÃÉ,ŽŠˆƒ,ĸ:šõÛßõgé^m®ÿÈoLÿ°…·þŽJòŸøEüEÿ@Sÿäÿ ?áñýuOü“ü+éÚ)XgÌ_ð‹ø‹þ€:§þÉþÂ/â/úêŸø'øWÓ´Q`>g›@ñMÀŒO¤k2ˆ”$bKi[bŽ€dp=…Eÿ¿ˆ¿èªàŸá_NÑ@1Â/â/úêŸø'øQÿ¿ˆ¿èªàŸá_NÑE€ù‹þÐTÿÀ9?ÂøEüEÿ@Sÿäÿ úvŠ,Ì_ð‹ø‹þ€:§þÉþÂ/â/úêŸø'øWÓ´Q`>bÿ„_Ä_ôÕ?ðOð£þÐTÿÀ9?¾¢‹óü"þ"ÿ ©ÿ€r…ð‹ø‹þ€:§þÉþôíX˜¿áñýuOü“ü(ÿ„_Ä_ôÕ?ðOð¯§h¢À|Åÿ¿ˆ¿èªàŸáGü"þ"ÿ ©ÿ€r…};Eæ/øEüEÿ@Sÿäÿ ?áñýuOü“ü+éÚ(°1Â/â/úêŸø'øQÿ¿ˆ¿èªàŸá_NÑE€ù‹þÐTÿÀ9?ÂøEüEÿ@Sÿäÿ úvŠ,Ì_ð‹ø‹þ€:§þÉþÂ/â/úêŸø'øWÓ´Q`>bÿ„_Ä_ôÕ?ðOð£þÐTÿÀ9?¾¢‹óü"þ"ÿ ©ÿ€r…ð‹ø‹þ€:§þÉþôíX˜¿áñýuOü“ü(ÿ„_Ä_ôÕ?ðOð¯§h¢À|Åÿ¿ˆ¿èªàŸáGü"þ"ÿ ©ÿ€r…};Eæ/øEüEÿ@Sÿäÿ ?áñýuOü“ü+éÚ(°1Â/â/úêŸø'øQÿ¿ˆ¿èªàŸá_NÑE€ù‹þÐTÿÀ9?ÂøEüEÿ@Sÿäÿ úvŠ,Ì_ð‹ø‹þ€:§þÉþÂ/â/úêŸø'øWÓ´Q`>bÿ„_Ä_ôÕ?ðOð£þÐTÿÀ9?¾¢‹óü"þ"ÿ ©ÿ€r…ð‹ø‹þ€:§þÉþôíX˜¿áñýuOü“ü(ÿ„_Ä_ôÕ?ðOð¯§h¢À|Åÿ¿ˆ¿èªàŸáGü"þ"ÿ ©ÿ€r…};Eæ/øEüEÿ@Sÿäÿ ?áñýuOü“ü+éÚ(°1Â/â/úêŸø'øQÿ¿ˆ¿èªàŸá_NÑE€ù‹þÐTÿÀ9?ÂøEüEÿ@Sÿäÿ úvŠ,Ì_ð‹ø‹þ€:§þÉþÂ/â/úêŸø'øWÓ´Q`>bÿ„_Ä_ôÕ?ðOð£þÐTÿÀ9?¾¢‹óü"þ"ÿ ©ÿ€r…ð‹ø‹þ€:§þÉþôíX˜¿áñýuOü“ü(ÿ„_Ä_ôÕ?ðOð¯§h¢À|Åÿ¿ˆ¿èªàŸáGü"þ"ÿ ©ÿ€r…};Eæ/øEüEÿ@Sÿäÿ ?áñýuOü“ü+éÚ(°1Â/â/úêŸø'øQÿ¿ˆ¿èªàŸá_NÑE€ù“þ¯ƒ¡jÄzIqü¨ÿ„oÄôÔÿðOð¯¦è ™†üH8] UQè-%Ò•|7â59ÔÿðO蓱 ™Ç‡üJ­¹tQ[Õm%ôÇð߉$$¶…ª’z“i!'ô¯¦è¥Ê¯qó;Zú1Â/â/úêŸø'øWªx) °‚£xåvº:ᔎ ô5é5Åi?òÔ?ëòoýÔÐŽîÛýX¢‹oõbŠb#½ÿV~•æÚïü†ôÏû[èä¯I½ÿV~•æÚïü†ôÏû[èä G¦³ʈ»º ãñ§RFÓãÿ®OüÖÅò®¹ýü?üMMÏ÷!ÿ¿‡ÿ‰«Y®fïÆÿošÚÂX%Ͳy²»ÿ¸<Üòã“WÐ"›vFÑ/„•–û¥NAö§S%›Ï‚ÆmŒžcÚÃrŒp}éô€k1ܨ‹¹Û Î?w•sýÈïáÿâi±Ÿôøÿë“ÿ5«¹  †+3åÆ}„‡?Ê£ïØ#RÌý¦1×?J¾= gZôïûÿÿ£&ò®¹ýü?üMUÏ÷!ÿ¿‡ÿ‰ªïª²–'ìh0[­ŒB±\ão¨=éŸðÙ‚»ð °RÞ|G8ÏN)s.å(Éì‹~UÏ÷"ÿ¿‡ÿ‰£Ê¹þä_÷ðÿñ4éõ [u·i%n$Xâ* fŽÞý*Îi’Tò®¹ýü?üMUÏ÷!ÿ¿‡ÿ‰¢ßQ‚æúîÎ2Þm©Q&G0ÈÇáVóL MæÄWÍE Ç•²3ïÀ¨MÄŽì°Ä)Áfl ûpjÝñÿEÿ¶‘ÿèb©X¶_úë'þ†i w™uÿ>ñÿßÓÿÄÑæ]ÿϼ÷ôÿñ5g̨¡½·¸2'ŠSl#†ØÞ‡µGæ]ϼ÷ôÿñ4©;ù‚9£ØÍ÷H9Û æ¬y•Zá³=¯ýu?úPŠ(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ â´Ÿù êõù7þŒjík‰Òä3¨×äßú1¨¼¶ÿV(¢ÛýX¢˜ˆïÕŸ¥y¶»ÿ!½3þÂßú9+ÒoÕŸ¥y¶¶3®iŸö¶ÿÑÉ@Q©Æ£ýq“ÿBJ’ cJ/úá'þ„”†r|Cªé:?•§Å$PKòÏ|­ƒþê÷R½Øtääcü:ð9´1ëZÚùr0ÖÉþPƒ¨w¾‹Û©ç§r4xÈ™n.nn–IÚ`³°! 9 0ôÎHõ«im ˆÁ>­ÍLyµæX»lµ§ýv?úÓª½Ã~òÍé±ãþÙ½Xª58Ôcÿ®2èIUõá©M¥ÈšT«Æyϯp§±÷þ]jV8Ôbÿ®èIR9  ÿ ,°ørÞ9ÒDI.å—;‡ï[®jÍ£§ûxÿÑ¢¬+Õ+FÿLSØý§ÿF­rþ$ÖL3YDÛY€b@?½›Óé\‡‰uhçŽIoÄ©pX²9o“‡öâ½#QðÆ™©\ý¢á&2›ge’xú±?‰ª‡Á#ÝÓoÆðn¤ù±Ó<ן[ RsrM¾†§MFqmú/ó&º¼š=#Ã-Ï›qn²lb7)C}Gµd]êbÔµSªÜ¦©m|ÐÃf&"< ±˜ú6åç8Ï9Ð\éâëOÅÀŽÊÉ•ÒÝcÉ, …Ë“ÐÓºÕƱ³{ż{;vºQ…œÄ¥Çѱšô ¬•ÿ­¿Èòfù¤Úþ·ÿ3•Ô s¨x¯P†òîÚæÒ(¥‹É•w,Yù—£tÇ4^Íwyÿ øÔo –ÆÚ)­Ö†XÕ¼­ç)¤ê+­kkwó·[BÞxÄÙŒ0co^8æ²Úí•~ËÙ”,£Ëcn9ãžÔtT>IÌúL¶79…Ž=K-Tµ|G/ýv—ÿCj³tBÙª( ±~ñj¹ù%ôÞ_ý ¨—[ *É\á´Ïkém¥ê·ZŒw6÷׿ekCnªPdÊÓӽ"k—šrjÉd`†{­q­Vf‰@Œâ8Ÿ­jøoÁ¶ZË7üÿÜßñfŠ­öY¿çþãþø‹ÿˆ£ì³ÏýÇýñÿVh  ße›þî?øŠ>Ë7üÿÜßÿñfЬ¶Ÿ½W–yf(r¡ö€® þ5ºj<­$sÍs–íÁ>¸ ÕÚ(?û-¿çþëòÿˆ£û-¿çþëòÿˆ­ (?û-¿çþëòÿˆ©mì ¼Ö–Y¤ Òcåð­Ñ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@qZWü†µúû›ÿC5ÚצÈnÿþ¾¥ÿÐÍwVßêÅ[«Sïú³ô®ôgÄšpÿ§¨Ïþ<+¿½ÿV~•ÁÜ øŸOÿ¯…þtÝTqC דy±G&#LoPqËT”ØN.çÿ®iüÞɾÅgÿ>°ß±MŽßO—w—³íb­µàŽ û×i·w3X]ksêÍs‰|Ã+ÛlómÅþLmþï9­‹ Léº^«"]A¯«Îˆf…åÜwt„3zSþ¿/óÓúõÿ#¯ûŸüúÁÿ~Åb³ÿŸX?ïØ®VÛÅ··zLTFkæ²BÊé@$¹Só´}ÓÎx©umRÒMŒ­l÷×>c´ÑÚM$h‹ùf„±'#¾)ÒýŠÏþ}`ÿ¿b±YÿϬ÷ìW þ+Õ>Ãe4C`²4©=ÕÕ´¦%*@_—åe 9+¯†_2ßz>år}ÓÇQíL.b³ÿŸX?ïØ£ìVóëýû&ê7R?±YÿϬ÷ìQö+?ùõƒþýŠ“u¨?±YÿϬ÷ìQö+?ùõƒþýŠ“u¨?±YÿϬ÷ìUhÑ#žå#EE *Œò-]ÝT×›‹Ÿúè?ô cìí-¥€¼–ñ;$Ë2OÎj°ÙÿϬ÷ìSlN-?í¤Ÿú¯?±×µ;/\ÿh^K"Þ[\µ•ác¾9îËuÏSõ…+ž…ö?ùõƒþýŠ>Ãgÿ>°ß±\¶­â[+L´k{»g¸[%žH%¶–g~:–CòƒËµ5Ö¿«\ÞG”¶Q©ÓVø‹¤v-“÷AVúóM«_Ëþù ;¥ývÿ3£û ŸüúÁÿ~Åa³ÿŸX?ïØ®oIñ¥5ΖڂYý—SµyâòƒDUCmbI ÁêéU´_êwÖMö@ÖwŽFÄ´ZÁ*Í)p3ŒuïEµ°¯¥Î·ì6óëýû}†Ïþ}`ÿ¿b§È£"}†Ïþ}`ÿ¿b°ÙÿϬ÷ìTùdPa³ÿŸX?ïØ£ì6óëýû>EØlÿçÖûö(û ŸüúÁÿ~ÅO‘FEAö?ùõƒþýŠ>Ãgÿ>°ß±SäQ‘@}†Ïþ}`ÿ¿b°ÙÿϬ÷ìTùdPa³ÿŸX?ïØ£ì6óëýû>EØlÿçÖûö(û ŸüúÁÿ~ÅO‘A<`žÀœPa³ÿŸX?ïØ¨î,­ÚR-a! ˆÇ¥`Yx¶þïZYÑ’9ÕÈ”}¨Ÿ-GV?'N˜çœŠénHû,ßî7ò }ŠÏþ}`ÿ¿b“ìVóëýûŸâ$ÔfÑn#ÒÝ–è•ÆÆ Åw ÁIà2®fæòÆêQ§Ûæž6„ÍgªË#²eÀ|Ý\«Å P;o±YÿϬ÷ìQö+?ùõƒþýŠÀÔ5=fZéöRØJ³1ãkwß #ï30|džËÉúÎ>2¾—Q“ìÖ¢KXîþÌa[IÚFPÛYÄ€l98ôsIjC°ûŸüúÁÿ~Åb³ÿŸX?ïØ©7Qº€#ûŸüúÁÿ~Åb³ÿŸX?ïØ©7Qº€+Ïgh-å"ÚBô©~Ågÿ>°ß±IpßèÒÿ¸•dø¾êko j[ÊñLP"HŒC)f GCÍF·Ø¬ÿçÖûö(ûŸüúÁÿ~Åpšž»©ÍáÉ4ˆn=j•n¦BC"D»Œƒ7‚˜ÿxúVÈÖµ;Û‹{-(Z‰”wSMtߨ G<œþÄt_b³ÿŸX?ïØ¦¥µ„›¶AlÛISµàúW7‰ïµ8t¸tø-á¼¼YZSq¹Ò!ÚØ‚ÙcÇ"²´ù¤ŠÒu ¼Ó7ˆX€ÁU²ß2óùg4%woëtè¯ýlÙÝýŠÏþ}`ÿ¿b±YÿϬ÷ìWŸýšGƒÄúÌñX܈žê0&…Ì¥Upxq…Ç`Ö®]x¾ö ¦·ÓíQ–Ê8Á‹ì³ÊfbŠ« *œìÒ_åøƒÞÞ¿Ùµ­’)f¶·U$”P¡m,™C-µ¹R2pkÖõ}STÓõȬRÖKKb³}¡XÈìÑî `€¸uÏ5Óé ÿkú÷ÿAû…öþ»~Ågÿ>°ß±QÏgh-å"ÚBô«ª;†ÿF—ýÃü©VÓþ< ÿ®küªj†Óþ< ÿ®küªj…iâAª]ÚZÙI$pÁçE.ð<ÿ˜®Ùž~œÖ­õ¯Ûl'µódˆL… ‘œ2‚1‘ï\嶉©ézÜ—pÜOw:• 8…°'l*Œ‡<}hë¯õ tÓúÔÒÓõ›©õgÓoôáiqäyé²q*²ç'?þº~µ©Þép=Ä|wñFd•ÞäF@@œ}+7F²¼š;„Õ4ëènî×7ŸhŒr:"lrÊ£œcß<šv±¦`ºjh“ê‘*–Ži®Ô˜Üç’ÎÛ†=Fh{Ü·¨ëwvºrjÚjÍkä äinL£Àœ{Šdþ"æHtí5®¤û*ÝH$”E±;@àåŽ:Õ=FÆömÓN½Ñޝ2[®n|ôP²ãåˆaë3Qßè×ÒXÙEöInuAj!“PKÆAï¿kqžqË4>¶þ·éëbûxŽk–ÓWK²Žäß[µÀóî<­Š6ñ¶OÍúSïuËÈ.’Ê×LW‹oö‰ãV5Î0¯ÌI«>ûE[}"ÓJ_®ª ¶ÇpÏn„åŽåõÊæ’?ZÑç‚ê;í)¤Óã¶Ÿ*‘"d†Ëc*w÷ã¥Ëúßþ+ÿ_"åçŠâƒI³Ô-¬®.cºÀµc Á~fèOA“üêÞµ©Þép=Ä|wñFd•ÞäF@@œ}+:mêÛé05ÌfØ`"EfÁ8ã­Xñ%¼—ðýèQM»£—ÎD¿#<ã4K˸ãæ-ψ¦2Û¦½ÜÍj.äG”Eå¡è9,yãÛ­\]V;ŸVÙÕ­ÌÈÒ©!xÏÌoÇq¿›¨ß›«vfŠð: WwQÂí#ØŠÛþÍ·þõÇþÉÿÅQý›oýëü “ÿŠ©s¢½ÍœvÍ«ê*ª¬ŽÊñî”»²ŸË£iVVpÚÀ»a…h Î?öm¿÷®?ð&Oþ*ìÛï\àLŸüU&ê7Qý›oýëü “ÿЦÇcg4aâ–gCÑ–êBþ=Hn£u/öm¿÷®?ð&Oþ*ìÛï\àLŸüU&ê7RÿfÛÿzãÿdÿâ¨þÍ·þõÇþÉÿÅPn¨#æk÷Çþ€µcû6ßû×ø'ÿUâ‰ašæ4-´H1¹‹º½Ï4 –ÌâÛôÒOý ÖkøgN—ÃM ËæIhC|ÌFðKÈ8ÆAe*îã“ÛÝ;A‹JM­ýòÚ©b–fE1.{—v9àf²ùïsÿ ÿž÷?ø'øÑw¸yÛ¨ÝY; ÿž÷?ø'øÑ²ùïsÿkn£udìƒþ{ÜÿàDŸãFÈ?ç½ÏþIþ4­ºÕ“²ùïsÿ ÿž÷?ø'øÐ¶ê7VNÈ?ç½ÏþIþ4lƒþ{ÜÿàDŸã@Û¨ÝY; ÿž÷?ø'øÑ²ùïsÿkn£udìƒþ{ÜÿàDŸãFÈ?ç½ÏþIþ4­ºÕ“²ùïsÿ ÿž÷?ø'øÐ¶ê7VNÈ?ç½ÏþIþ4lƒþ{ÜÿàDŸã@KK;α •ÀVp£,@Oâh¸oôiÜ?ʳvAÿ=îð"Oñ¨çX¼„Oq‡¬òz}håý¹¼·xEÌö䜉 `®0{dúVAðµ¤Ý-ÍåíÌ×AIå‘K…Fܪ0¡@Ï·zÛû%Ÿüô¸ÿÀ‰øª>Égÿ=.?ð"_þ*?ð…Õ®5u[ød¸e2"˜Š£yB@öÏsNAŠßP{«[ëÛt’_:KhÝ|§~䂤Œ÷Á©öK?ùéqÿÿñT}’Ïþz\àD¿üU @$ÝFêì–óÒãÿ%ÿâ¨û%Ÿüô¸ÿÀ‰øª“uª?²YÿÏKü—ÿŠ£ì–óÒãÿ%ÿ⨙¿q'û§ùT­„:­“ÙÎᳫ„ò°aÔâŸ=­˜·”‰.2ÿËÄžŸZ“ì–óÒãÿ%ÿ⨬Ú]”Ò]Ê`Užê&YWï2àŒ~µJ_ Û2Ú˜//mf··Âh$Pïè*AõΫ_ì–óÒãÿ%ÿâª6ÓíMÂJ.ïH1 ‡ÚÄã“ß#ØÏ9¢Ã¹/‡,M¥”ï=£Y šî~÷$sß ÒAá»H- „Ü\Èb¼ûo˜ì»žNsœ1Ï`+[ì–óÒãÿ%ÿâ¨û%Ÿüô¸ÿÀ‰øªzÞâò3ÿ°í³u2o*ýäyNá¸ë·Ë9¨dðì?k76·×Ör:"Köy vŒÀ©çdb´£ÓíRIY®ï$ÙTk‡ÄcÀÆ;ó“ÍIöK?ùéqÿÿñT¨ønÚþ{™VòòÐÝ'—r¶î¡fÇÌO8ã#¶ m­â‚<ì.zà QöK?ùéqÿÿñT}’Ïþz\àD¿üUIº£™¿q'û§ùQöK?ùéqÿÿñT;"2\z´KÿÅR;Oøòƒþ¹¯ò©ªOøòƒþ¹¯òªºÆ±o¢Z%ÍÊJèòÀŒrA=Èô¤ÚJìv¹¡Es+ã1ºAwÿ|/ÿOÿ„×Mÿž7_÷ÊÿñUŸ·§Ü®Iv::+›ÿ„ÛLÿž7_÷ÂÿñT‡Ç`ÿ–7÷ÂÿñT{z}Ã’]Ž–Šæá9Ó?çßýð¿üU'ü'Z_üð»ÿ¾ÿŠ¥õŠ_Ì’ìtôW1ÿ Ö—ÿ<.ÿï…ÿâ¨ÿ„ëKÿž÷ÂÿñT}b—ó$»=ÌÂu¥ÿÏ¿ûáøª?á:Ó?ç…ßýð¿üUX¥üÁÉ.ÇOPÜÙÛ^¢¥Õ¼3¢°uYP0 :žõÏÂu¥ÿÏ ¿ûáøª_øNt¿ùáwÿ|/ÿGÖ)0rK±Ñy‰üÿ)<í»<Í£vÜçëŒö¨¯4ë-AUolíîUNTM¸Û"°¿á9Ó?ç…ßýð¿üUðœéŸóÂïþø_þ*Ÿ·§Ü9%Øé#Ž8cXâEHÔaUF€S«–oékÖÞóþø_þ*´4Ùës­¢!Þ(ØŸZ¨ÔŒÝ¢ÄâÖæÍqÖò¿ÿ¯™?ô#]qÖò¿ÿ¯™?ô#V#·¶ÿV(¢ÛýX¢˜ˆïÕŸ¥p“ÿÈϧÿ×q]Ýïú³ô®ùôÿúî(¹®ÅÍ:xcZk|îñÇüóÞwÿ㻫 ¢ÙC]Ü+A‰¿/N2å’`ÕÕ?ðu·†dð<Ò_}…æ‘[í†}¥·s×?§¶*Ï‹™g´Ô“{=¼M¦ãÎ~|gß˯]|*ðåÍá¸OµÛ©90à øeIØTôêžñ¤wšv¡ hd8š9¼ò¥[xÚÀ9 G#¹Îõ*BÏ–îÿ ;«ô4üKêëksvú·ö"Û.b™;™ÕHfÆ1œ`ñPj>/’ ›k T™’\ýªkYî¼ÐÙ 1È'i%äk Ôô7Ô§2.±©Ú+&ÆŠÚD Ãþ¤ƒîªÏá †ÂæóN–Öl’ÚÈ4c­¸0<óœgšæ[[úëÿ·¿õäcê¾2¼¶Òmná6ö×miö™´û‹I¥{ŸêÇe…h sTÔ5»;=;ìpÃ-„wÒ5ÄlìC66¬1Ç~jÅÿ„ ¿‘¥þÒÔmå–ØZÜ<2&gAœoܤg“ÈÇZ»i¡ZÙ_ÅyÊdŠÍl•Y]ŠrN¿çJ××úßþžß×—ü†—©êÚÅåÅÄ"Ê*‰-öº3M&ÂT¶C¿0à`ñ\ÿ„u=WMÒœdóÒªXêÚ½® éöR\°¿Ü£Z˜ç–8A#S) H '$cÖªÿ×_òÑÛúØôÊ+ˆƒRñÌšN‘u+i·—hy.LQ´dmÂå3õÆ)5S][MÆké^ %žIí ·i%vba!U òó´gžÔÜRn]û7 ØÎ3Î+‰[¿jZµŒ—í¤Ü®”·3G1H ÛÊœî Çüj¦‰q{âØên’ÊitXe”@ˆD‡ÍlNÓÞšWןù »/ëËüÎîÖöÚôJm¥ehdÇðºõ…O\…ýÖ–“^G.Û1ââ¼] ‚Žv†Éb½+¥ðÍõÖ§cs}q.ø¥»—ì£haVÚ½9ÚNO­%ª¿—è¿ÌoGýyÿ‘µEPYÿòõuÿ]þ€µ¡Yÿòõuÿ]þ€´ž-|å|„*d~ýãGölóÊûçÿ­QO Œ‚êî£Í;V$ʪ2WýãUŽ AýÓ´kýß´îýZ2ZÊu¡i3HRœÕâ³(0¡z)~Ìþ«PéwÏteŠB¬ÑàïVÎA-€~QÈ’ß]Óî盧·™äš2ÊÅa}€¯Q¿r=3W©.h“(¸;HŸìÏê´}™ýV±4-vêöÓC73Ûù—©3H­n}§¸ùF;çð¦ßxºÑõ:ÏM¹ó[å‚Sä¶Â¸mÁ\¤ä„ÕÛ[ÒæïÙŸÕhû3ú­U“ÄzLZØì üÁýÛz)|m ìNjKmsO¼¿{+yžI²±X_`+ÔoÆÜLÒo³?ªÑögõZ·ETû3ú­fU«tPO³?ªÑögõZ·ETû3ú­fU«tPO³?ªÑögõZ·ETû3ú­fU«tPO³?ªÑögõZ·ETû3ú­Gqlÿf—•û‡ùUúŽãþ=¥ÿpÿ*µögõZ>Ìþ«Vè  ŸfU£ìÏêµnŠ©ögõZ>Ìþ«Vè  ŸfU£ìÏêµnŠ¡slÿe—•û‡ùTŸfU©®ãÖo÷ùT•Åíµ°k y;0]0‰@õ,Aãè æ€ìÏêµ^M¯ ½‘® VX˜±ùCc¤Ö®Æÿž¯ùð£cÏWü‡øPXt›(.–æ8H™mŰrìv@äú÷ëT„ôB–j->Æž\9äFTÎv’ìsZûþz¿ä?Âÿ=_òá@þ±áÖšÊúÓK¶´5Bßm’yå$cz üW+fÓO·³ÒáÓ¢L[E…W?Â*}ÿ=_òáFÆÿž¯ù𣥃̡ƒ¦CvØM;þ=G˜ß»ão¯<ù«zu­„—/mƹ”Í1ÜNç y‡©Àt®-Lkb·QK ‘HÃ}Ö9çóê;M/YŠßCÒdÒñ›v®×‰2ynŠd.wdäqZì>ÕþÇëGÚ¿Øýkkës±ÆÁá©áÔ®-ï4ûÛ»ioÊO¢R ï¢.9SèqZ:•·‰CÙÙ\ÙiÏ$t“\FñHNpѨ%”–äôx®‹í_ì~´}«ýÖ’ÒÀõ,QUþÕþÇëGÚ¿ØýhÅ_í_ì~´}«ýÖ€,QUþÕþÇëGÚ¿ØýhÅ_í_ì~´}«ýÖ€,QUþÕþÇëGÚ¿ØýhÅ_í_ì~´}«ýÖ€,QUþÕþÇëGÚ¿ØýhÅGqÿÒÿ¸•Gö¯ö?ZŠâëý_“øjÞ¢«ý«ýÖµ±úЊ*¿Ú¿ØýhûWû­X¢«ý«ýÖµ±úЊ*¿Ú¿ØýhûWû­>çþ=fÿq¿•eø™õuÒvhÖòKq,ŠŽÑ²+Çû̻ȱÀç©Ïj¹suþ‹7Éü¿µKö¯ö?Zçá·ò¼6,¿ášXRL;™`v“¹’åIÏ\œçšÂþÍ»ƒOB–ØYŬj[£±YCýžÕ@iG;O¾»ßµ±úÔLÐ=Â\5´fxÔªH@Ü ã dùQÖáÒÆ.¥kªéþ#—UÓ4ñ~—6klÑ –3£1Vùˆ~cœsÇCYMà[Ëyvú¥È¾]5­L1¬F7',TRT¶Jln5µ}¿ÎP# ”©_½»91ß5×FÐC$²Em<ͺFPsŒdœrpü*_µ±úÕ_[ÿ[Ü›ioëk¦«¤ÝêäÙøu,®¢»IVÄ¥£SÏÝ;ÛrŒa†9®Î«ý«ýÖµ±úÒZ+­ËCVÒ`ÖmVÞáäTW dœÜZŸí_ì~´}«ýÖ”¢¤¬ö*”$¥©NÓþ< ÿ®kü«ŸñÏü!ÿ¯…ÿÐZº Oøòƒþ¹¯ò®{ÇG$?õò¿ú V8áH¨|HóãŠB³Iœ×„u‰ÅƒÅ&hÔ†“4›¹  “hÅB­OÅá78QÔœ ¹¥i¿ÙÞ%7OæªÈeI[ ŒcHÈë‘ÍÏ Ù}¯P»(HXc$d¿P1ôçò«ž#Xl®ÝâœÃ˜<ÓÜŽEw<ñ1îkzO—æL•ÇYØÛ>­wuÎË,ŠX¤˜†28ÁÇÝàñÉëÐÔñLḧ²ÆLLdpHfÚ…luw=xϰ2xvay#^’Â9æwˆ´€å zu g³ùYÖZ3*³¤“*ÛÆ@HéÓw_O^³9®sHEØäGÁ÷éqÞ¦¼VbP>1¹ÎÒ@ÏNpp=¸Ï& SÅCVfOG`=+­ð'ü…eÿ¯vÿЖ¹3ÒºÏÈV_ú÷oý k³üGéþFUv=¸ëùßÿ×ËÿèF»ã¬?ä;ÿ_/ÿ¡õLNÞÛýX¢‹oõbŠb#½ÿV~•ÂOÿ#>Ÿÿ]Åww¿êÏÒ¸IÿägÓÿ븠æª\*¹™C+5° Œ‚ ½*ÝW•Ú- ²ùµq’BN3ì) 导Ei¦Û$Ò­µ»²‚Ú&GlŒãåqŸÇŠ¿áï%ýü ov³Eqò”`ä© ÍüNpzgé\E×…¼Ew,RˤÎ^P¿,GyprÝ2=úÖσ|9¬Xx’›­9à·äwqà•#hÚÄ‘ÏÿXW™Nx‡5tísÚ©‡Âª-©.kwGi>­§ˆç†âñÒÞ?í/D¾Z€äßÙÀéŒS4ïÚê7pÛ;ë7¸ŒËl×Q¨ä•Á=ˆ888íY6öÞ$ñn±i ÛàþÉûòÇÈŽBíòçûÀsйe¢ë3êZmƯ-ˆLÄ?e,LÎ˳snhÆxäõ¯Qmýwðïýv_ðJ~ñ[O¦é–Ú•½òÏt]#¼™Ç3dž$Ô•£¦øÊÏQ¸´ŒXßÛÅxÌ–×Æ¢9YsbAàã tªÖž½·Ñü=fÒÛ™4Û³<Ä3a— /ŸœuÇz,ü1{o¤xvÑå·2i·~|Ä3a— /ŸœuÇz}~Óòþ·:Ê(¢ÂŠ( Š( ³ÿåêëþºýkB³ÿåêëþºýhvDÝ¡†]»ð&MÊ •8úTÞörÞ?hÑÐ~K ºÈ¹û,æÖ–BĘÏúäcÔú)®!´ï·ÞÓ®þ¿ã^~.u£%ìÓg¥ƒ£F¤©$µêÑÝé·^{Íš$XÀ`@ ŸåŽzV~—â gmDÞÛH–ö³Ì¿jDAô?6ìãÚ¢ð–¡j—olÐ6 À“ÙèO­*hWÞ^«§HÖÇN¾y¤†o5 ƒ¦Ü`à÷ÍtáÜÝ4罟ærâ¡ÕqƒººÛÐóÏ­7«kúéÿ6·õßþv×Qñ[m2ÜÛI¨Gd.îå» Fç'¨R1ÐŒöpi“x¾i×F{{­;OKûg™Þü À¨Ø0ëÎK~U§©iz¢k/©éiæMl-åK¢À UÁPrFãÇQPU°Ð­ôm>=:âÙmü©ñœÇ9;BG9ÆEëýuÿý\:ÿ^_ðKíÝÜZ}œ3ªßßO"XFzFPIÀÚ¹ê(“XÔ#ñe¦˜öQÅe4r•™ßsÈP)È'Û½ Çn¿ ©”Í…d–«!zg±ü/ýõ[7šl×"Ó5hÄV±ÌŽ ;‰p¸Çìš}~ÿëõùˆÍ¼ÖõÚX™téÒæmŸeˆ7Ú#ŒƒûÂsŒ sÀú×M\Ö¥¤êú½õºÏ› ­½ÒΗ³´ûU²@Rz“Ô×KIl7¸QEËOøòƒþ¹¯ò®sLJõò¿ú WGiÿP×5þUÎx÷þ@P×Êÿè-XWþ.<ðfMÏj]ÀWŠÑÖ!£ÆS<ášVlSHæ•dh$Qaæ‰dòSqŽWôXÓq'ôÉ džiCRïZkp°ÿí­FÖêÚÎÍ£0¸vþwÏQôª·âïŲéÐNRÊИon㸠9=Çn;ðyÏO{ÙšÄÈ¥QÄŽƒî‚T{dð*߇¾×&‚-n¦Ž8í¥"Dë¶=Œ y‡!O#q<óÈä tÆ ATêO5ß)èVó,lÖv©XÀI6žTô?^˜­[ÄFO*Hªã¯Vþ|ʳmî +±#w‘eâ0W Îy=03Ôò1œÕÁ(¹sò³(?) Cœ vž‹Çn¿AÏ'³Vl×›S Y·>Çܦ&dÎv‚àŽ{ã?ÓŒUë]¦£n!O9bi 6–%¾«×òüsÒ¸É[>[yÉù¿½ïT¾MK7qq]oä-/ý{·þ„µÇ,œòk°ð!Ϋ)ÿ§vÿЖ»0+÷ÓüŽz¿ èÇXÈvûþ¾_ÿB5Ø×aÿ!ëïúùýר`vößêÅ[«Sïú³ô®ùôÿúî+»½ÿV~•ÂOÿ#>Ÿÿ]Åw4Ë77Jꈱǖc€9nôµÎxÊæKO jw¹ŽHþÊU‡cçŽhI·dRWvGMý«§Ïý¯ýþ_ñ§Åg<‚8nà‘ÏEI?¯¼×µÅÕç·´Õ® FÃ5º«ò9AëžÂµ<9¨jóx·J‡P¾y£3>¢¯>L¼ð=ªýT®Ñ»ÂÔQçèz¥Ëêrê—~2J´Õ¥°€iæàùPÆåŸÌÛÎõ78ù­Kvó.è¥/L«*Äò[6'(àH»€ž0zûɸբ•üˉC¿MÏDþe+ž®&¤oK:ªñ:_³'«QödõjÉðõêܵÌQÈZ(°(ÚX±8ÚU ']¿Ž-bëPŽ6Ó¬înÒ<ßÞC„یc¾êÖHÔ2ØÎ¥9S—+Üé~Ìž­GÙ“Õ«”´ñô™„–б[Gº-/áˆQ’¬|ƒÓ‘מ)ú–¿¨Ëàéõ8#¶‚Bðù-ot&V ê-´c®:².ufOV£ìÉêÔÛ).å¶ {odå"˜È¸íó_åX÷򢯿‚𕞖nJyØŒáðc†ãïgð£`Z›_fOV£ìÉêÕ‡§ø’æk«8u-5lÖú#-´‰qæ«awo”8ç¸àóQ[x®ææm>_ì­šv¡?“op×9áˆcÞ е°¯¥Î‡ìÉêÔ}™=Z¦¢È~Ìž­GÙ“Õªj(³'«QödõjšŠ‡ìÉêÔ}™=Z¦¢€!û2zµfOV©¨ ~Ìž­GÙ“Õªj(³'«TWÉöiyo¸•[¨î?ãÚ_÷ò  ÿfOV£ìÉêÕ5Ù“Õ¨û2zµMECödõj>Ìž­SQ@ý™=Z³'«TÔPK›dû,Ü·Ü?Ê¥û2zµ-ÏüzÍþã*‡RûØŸû7ìâäðã;Tw8“íÇÖ“v_³'«QödõjãÄ:šü?Ò59.öMq$iuv°«4jÌAeL`œàc¯CSéž&™<1¬êSÝ‹øl¥‘-® y°(yÛÐgƒŠoKù_¨-mæuŸfOV£ìÉêÕÆYÇ­¬Ðhš¡´–ÏOK›‰ÌK+K4ŒÜÙÂä7Nyê*)|I{a¢j^^é–SÚI%Üö–buYAP%jýóš?¯Ïüƒúþ¾ó¸û2zµfOV®w^®´í#J¶¼ißRš57 @/ îù\@Ç5>{íbéöRËnšmÄS”Š5˶À¸,Äq÷ºÌö-­€ßû2zµfOV®WTÔõ 7Åz}²jÒH·w!ZÖkUHV"Ý—/Çq'Ò» ×½ˆ~Ìž­GÙ“Õªj(.Óþ< ÿ®kü«šø€q¡[Ÿúz_ý르ÿ(?ëšÿ*æ>!+6ƒndý©ô¬k —‰yž3M,M5N<⃀ppzZò”5²j,Ô eöŽ[Àëò)OËÃ)Zb’§ÏJ:‚@'i„€y8 .sJ$8⣑Ò4.쪊2K=iŸi„ÁçùÑù8Ýænq래¢ÁrΧ>£­^J± f# 8 9=sêN~ƒûÄŒû(.ôB["Zs¿ÉYU_xá”H7·<ÊqŽkSÃz¶—©jWRo‘£ÁXNÖÂã±ÌL8ÈgXÔó©]_JË šePl·¡;¶Žû¶³º®Ì~†œÇí 6{¢€,Q¿›‘(ùyê¸#æôç5»¦Y݈‰¹v‘Ê@A»’8#ÓxãóÖ¹¤Õl ÄÓ:Ý¥V»‚Ò À+nÝ‘ŽG ¸'pqÐ/Š,&† ¤‘Ãá‚ã€yã““Î=OzžTÓ¸îÅÕœEÛ}¸%²1»©ã ÷ê}+‡¹`“H€Œ+ÁÈ®¶ÿ^Óu=wXË¿Þv$–cõ$š¿E;è×èQE Ïÿ—«¯úè?ô­ Ïÿ—«¯úè?ô  -ZÊò÷Ot²™7°ùܯI•úàÿpƸÃà¯g­™úÌøšï…ËÆíùŒKÈB¤eÎ7sÐQHÚŠ£m’avQ°þG¹êáiÖiÌë¡«B.0±™á PÑã»:ƒB^b›DN[g®@õ©cðÔŠÚ•³_ÒïÚW’ØÃó†|Ø“=3ÏJÒK¦‘C$”ô+‚)|ù?½ú Ö8Ó$v1«VUfç-Ê~‘ªØÀ𶯠¡bòàsd”öf!¾oÈf©/ƒ‹Ùê±Ü_'Ÿ¨ؽµ°‰åX&㓞¤žq[ž|ŸÞý|ŸÞýY‘KûR]%VßR7w×nólôÙJc°ùwxõ¬K£>±}­^ÛØ^ÇöC['ŸnÑ´’Ç ¬2{vï]GŸ'÷¿AGŸ'÷¿AI«ÿ_!§oëæbh¾¼eÓ.õ[ï?ì–Û`·þW–Y;¹%ˆvïÅcXX_6«£Ø[5óéÚ}ËJëOh|¤ À0œ?ÞÀÀú×içÉýïÐQçÉýïÐU7y\›{¶.ÑT¼ù?½ú <ù?½ú C.ÑT¼ù?½ú <ù?½ú »ERóäþ÷è(óäþ÷è(íKÏ“ûß £Ï“ûß   ´U/>Oï~‚>Oï~‚€.ÑT¼ù?½ú <ù?½ú »QÜÇ´¿îåU¼ù?½ú Žây>Í/Íü°ô ŠŠ¥çÉýïÐQçÉýïÐPÚ*—Ÿ'÷¿AGŸ'÷¿A@hª^|ŸÞý|ŸÞý]¢©yò{ôyò{ôbçþ=fÿq¿•HFTQY÷3ÉöY~oà=‡¥IçÉýïÐP:øMâðö•§Ã¨l¹Ó$ÃpaÜ¥†áó&ycßñ¬é¼=vº­­´ò½Ù¾½×ó¤\AaQ±1“Œ°^¤“ƒ]OŸ'÷¿AGŸ'÷¿AEõ¿õýh€ÏÕt «­OûGMÔþÁröÿf˜˜¡Ó9`IÁç¯Jü?m¦[išF¬–vq[ˆ Éh%sêÁ· ÷V’]´‹º9U×$epE;Ï“ûß ¥m,nahz9µñ QËe¤ÙGchÒ©a8gp{ôA‘èkbëJûN»§ê~vß±Ç*y{3¿~Þsž1·Ó½=îÚ$/$ªˆ9,ØS¾Ñ'÷¿AUqX˽Ð5Nî1}¬#éñÜ­ÂÛÇhÉVܪ_qà:N+¡ª^|ŸÞý|ŸÞý.–™vŠ¥çÉýïÐQçÉýïÐPŸñåýs_åX>6ÿ4?õð¿ú Võ§üyAÿ\×ùV¿ä ý|/þ‚Ô†pTQE1Q@Q@Q@Q@Q@Q@tž ÿÌßõîßú×7]'‚ä37ý{·þ„´Þ×aÿ!ëïúøý×c\uü‡¯¿ëáÿô#Hgomþ¬QE·ú±E1Þÿ«?Já'ÿ‘ŸOÿ®â»»ßõgé\$ÿò3éÿõÜPsT5Ùg¨X£_͘Z¿YzͅêštÑCvñÂcyFP¶‚:´†VŠ&1«´Fi9SŸaÛùÒéÛâñ!ÊèÊsƒŒ‘ÿŽŠçí¼3ãø#ú–‘6bù@+GCð÷Šàñ µî¯{¦µ¤!ÉKq—bT¨ò׎s×µ1ˆäžOÃhY¸·þÎ2ymÙ„†ó1¸üèu¦jŒ‘I©[ gVwó.dgœ[äfÜAÇâsÞºïì¨?·F¯¾O´ o³mÈÙ·vìãÎ}ê+­ ÒóP¸¼˜ÈÍqfl¤MÀ)Œ’OlçŸZV÷mëúÿ™W÷¯éú‘ÊÍâ›»´í.Á#YMŠy$’Ò{€r0ªC#¡ùäkfúãXÖ|—t3Yê3ÆŽÐîòäQ‘½T°ù[Ÿn”óáu[FƒRÔmîm û0ºŠDó$Œ…|©SŽÜfµ.tö¸ÓVÌ_]ÂÀ(ûDN¹óŒsߊ©;Ýùþ¤EZÇ'³¥^Oe&¤óÚË ^ÚjÒI$Â[ Ë“é“Hùj}SÅZœ77ÿb†ßì6÷QÛ§†IDY{»* AÆ1““W%І—o{:A}®ÝÞÆ-åûDñ†1àñÎÕ Éè3Ïz4 ˧xbÏMݵÂ$ÓÛ:–wläêr9ÇN–ÿ×õ¥¿1ÿ_×Ì¡}{©Þk>m?S±y'‚åšTÞÞLä(p~Ÿ7Ôz¿Œµ+]NúÖÆÞ9Nž]>Åq)¸r¡Š« +»<ûs[ÁÖ)eaµÝí¬–,íÌ2/™—É|îRIÏO¦*I¼/ßµí¾§¨ÙÏ*¢ÎmäP'Ú0 R3Ž21@º§ŠuÈY¹²†ÄZiqE+Ãqù²@Än …#èk[HÕuF×fÒµQfïöTºŠ[TdK*CÈ súU‹¯ Yݦ°²KpªŠ“íaò…]£oqëšµ“zÀÔÃÉç‹ak´‘·hmÙéœçÞ…¿—üó°=¿¯/ø%úÏÿ—«¯úè?ô­ Ïÿ—«¯úè?ô  +™L2Jêì‡æ•Šœã‘õ¬—ñ /[™‰ö¹“ÿŠ­VÆkûi¢‚T™ØeÔ°âU~ÄwAù×+ÿ%ÿmR/ûòøªóñtëÊIÒ=,°êÛJÎý™Ñh—Éy=×–_j„'s³rKdòMeiš…õ•¦·¨\O¶6×7,"(Æ_”ðnÆ=±Z^Ð¥Ñ#¸ó®–w˜¯*›@>çÖ¤O[GsvââäÛÝ—i­ cŒgŸ­táã8ÓJ{Ùþg.)Óu_³Ö7_‘eâ}Zo3ýí$ڼѬV³DÀ!.0ÙÏc§JŠÿW»½ðäÂþÕ®VXWý7‰¢%×*êÍ»ùdVõž„l¡xcÕuˆÇ寝"Ÿ(v*vç#ß5ðÅ£ÛßGssws%èQ,Òº‡~î6€=+~¿×sœÔ³[µ·öHd›'- e¸,OëXw¨¿ÌV—1GØ£:LŒàþñ³´>üÕ¿2ûJU·ŠÏQÕF7‡–sýÞJÿ.ôÓ¦NæMþݦ]ª™HÉtÎpØÜ1ŸCži­ÓKíû=æœö°Ç"mu¡u*Ì’ “óÙ9 dvZm§Øtøm¶@žXÆØ#(ƒžÊIÇçTLJ­ßÞOÅñ¾ûÃýaíÓîóõ÷­jKk[!½]ÿ­ØQEQEQEQEQEQETsÿǼ¿îåRTsÿǼ¿îå@´QEQEQEQEGqÿÒÿ¸•C¨CsqfñÚ]ý–Sÿ-DaÈð÷9úT×ñí/û‡ùSÈÈ#Ö“ØÂ}¾øü?Ñ%ûUÔ’Ï,i7•!ûDêIÊ£uÝߨàEMa¬Íeá½r6éÚÞvŠÖ Æ-Ÿÿ]Åw5Î-¦žBŒÿ,Jq’K0HMIUfûò¿mÿ£i »öâ‡÷ÖwQƒÐìÿ 5$q\;¤~`d•xÙq÷€ô5æ­¬ÙD‘©HXùjÕƒœ¨>•{ú¤~#²Š(bRKœª~ãzW qñ”Ô-¹ß,¾qƒŸmOCéPZ^[ßÚÇuk*˃(ëÐö®Q¹ÔõI¤Yj'OŠÞÍnÒw”³2ó‚¼àgžµƒ¤êÁàÍÂÊçP[ùa’@–0E#2«`–ó~P2Gpy®þ—þºÿ‘çõ±è…”0RÀ1è3É¥¯:‚êûÄ7^º{É,®æ·»ß41¡9Aáƒ(Î=*ψüEaw<ºmÖ¡2XI W+öx~Ï’W!˜áòCòð2)Û[ ú\ï(¢ŠC (¢€ (¢€ Ïÿ—«¯úè?ô­ Ïÿ—«¯úè?ô  Q¶ËKfšGi[ · |¤zŠÈâ[9ѽ<‚ÿªä~µ™©H‘ÀZLl˃žœÜF+˜}vÈtŠÿ¶KþÉˆÅÆ‹I£®†U¢å½ˆÃ4{ÑF2G)‚8<zŠr¬M¡1Á®sÂw±ÞÍ|ÑÆˆcEûþ•›¥Ës¦iž#Õ’îY#·»¼qfU6œçnïÖ¶£UT‡?•ÌkRt§È÷ÓñW;o-?¸¿•#,H»˜"S\f}âÉ‘Ý!¸˜Mfîw‹6Mž[Täýïnj®§{5߃õ{›ëǾŠ[6;«xãx ‘pFѵÁ óÒ¶¶¶1¿S¾òÓû‹ùQå§÷ò¨l šÚØG=ä·rO›*¢±ö€?JçµÍvïDÔ¯–I7E-›b…Gúå;JŽ2rY>ô˜Ö§Oå§÷ò£ËOî/åQY%Ävéu/›p±¨–L¹±ÉÀã­OMè$î7ËOî/åG–ŸÜ_ÊE!òÓû‹ùQå§÷ò§Q@ òÓû‹ùQå§÷ò§Q@ òÓû‹ùQå§÷ò§Q@ òÓû‹ùQå§÷ò§Q@ òÓû‹ùQå§÷ò§Q@ òÓû‹ùTW§Ù¥ùîÞÕ=GqÿÒÿ¸•iùiýÅü¨òÓû‹ùS¨ ùiýÅü¨òÓû‹ùS¨ ùiýÅü¨òÓû‹ùS¨ ùiýÅü¨òÓû‹ùS¨ .cO²Íò/ÜnÞÕ/–ŸÜ_Ê™sÿ³¸ßʡԬ¿´,^ÜÜÜ[«}æ·}ŒG¦z€}°}é7epEŸ-?¸¿•Zq*ótV—ᯆ­c_=æž$ŒÅVèÄ£7a€I'?w¡©¬o¤Ñü9â €ÙÞ‹Ï"ßO ¹mÞUUŒ!s¿Œc'Ž)¾©tÿþ`º]ÿÈîí.-/­–âÕ£–$+¨àààþ ÔþZq*á°,.5ñ¡ß§›e§ixÙˆ‹0i?ÞùG=³TáÓ¯u¿hÍÞg«¥µ„‹$’íg$®eXµ;ã¯Z·þºÿ-]¿®Ÿæw÷sÚXZ½ÍÓG1Œ³°àv©ü´?À¿•q÷Vºì~Ó¬"òì®Bß<[@Ù@R;|åàj[Ë!oñH¹77´ð\ü’>R0`*ŽSî}iÛ[zþ¾‡Wå§÷ò£ËOî/å\?ˆ´Ø´ï隤z|vð›ØüýBI™™ÉPŒ§!$ÉúWuIj®7½†ùiýÅü¨òÓû‹ùS¨  »Oøòƒþ¹¯ò¬Èúø_ý«zÓþ< ÿ®kü«Æßò‡þ¾ÿAjC8*(¢˜‚Š( Š( Š( Š( Š( Š( ºOÿÈfoú÷oý k›®“Á?ò›þ½ÛÿBZïk±ÿõ÷ý|?ó5ØWcÿ!ëïúøæi í­¿ÕŠ(¶ÿV(¦";ßõgé\$ÿò3éÿõÜWw{þ¬ý+„ŸþF}?þ»Šîj5€\ÍqvO–& ¸È!˜Ž¾â¤¨¼ö·–y± RØgeëƒëHg0ÿ ,‚uKî:ü5Cð%–‡©¥üw·sÉ!VB»yì= jn8ÏïM£úcxŒG×vÚšÏX´½œÀŽ«(…2£ëÓkãÖ£A;¤®uK‰”\e'aºž¦ëE-í»4±©,r¼Nê7!ÙÅA/…4Ym--¾ÈÉš•·1O$o=@u`Ø?ZÙ'5SLÔmõm:ëRÆ †P°ÁÆqÓ𮃣/…titûK´a¡& “Hsœ8`Üäçži—>Ðîçi¦´rͳx[‰UdÛ¥”0 F$•­%Ô\Ãló"Ï0cdòÁzà{dTÔy€QEQEQEVü½]×Aÿ -hV[–W;I¼"/ü éÒ€3o´¥ÕlžžHs#Ñ€OúÀÝÁÿøVö_ô½÷ÇøW@Y¼çE0¨ÌŽÏ4›àuÁî£k¥¶´–ÏïÔdãÄÒ±©J”Ýæ‘ÑF½zjÔÛH]öþŽe†âyšb 4¤qŒãÔÔÉ i‘ê_%±OŸ4y±É$¦väŽø¨­î¢¹V1º’§ ¡#’;éSVŒb­ŒªNs“”Þ¤6¾Òl’T·‚XÒXÌl‚æM¡Oe°¿ðRÅá­&+K«Qj^;°þl¯#82ÌIã·ÞúKÈmà¸$B×#ßÎ8Éæ¬ÝêV_Û/m­üÄó¥TÞ}²y Ó´V´×ooÜB±bµ³Š/ùe ‘Œ e‰àv´e°¶šþÞöH·\[«¬O¸¡±»Œàç­fê…¾™b÷— |¥Ú>Q’I rI+\B“ÇÍÍ %#,0Hñ@ Ñÿ´Eû[<— !•|ÉätWþðBÅA÷¶+)®!IÒš5š@JFX`::œT”£EgQ@ ´ÿ(?ëšÿ*Áñ·ü¡ÿ¯…ÿÐZ·­?ãÊúæ¿Ê°|mÿ hëáô¤3‚¢Š)ˆ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+¤ðOü†fÿ¯vÿЖ¹ºé<ÿ!™¿ëÝ¿ô% ö¸ûù_×Ãÿ3]…qö?ò¾ÿ¯‡þfÎÚÛýX¢‹oõbŠb#½ÿV~•ÂOÿ#>Ÿÿ]Åww¿êÏÒ¸IÿägÓÿ븠æªÍ÷äÿ~ÛÿFÕªdp%Ä÷HÒ‘Ÿ•ˆ †b#ÜRçMâe…#Dwâ4Ç8þWü7®I¨x–ÊÄ®\àœÿË6­ÖøwáÆ96óžßñðÿãW4¯èš5êÞYÛȳ¨!YævÆFâ¼È`ë*ŠNJÉžµL^ÓqŒ]Úòÿ3;Vc}ã¦ÞjwV6‘؉ H. g,CÃíxéÍai×E¼%áÍ&p×3Á,¨é¨µšíVÁ˨%Ì8Áõ¯B¾Ó,58Ö;ûk´S•YâY>ÀŠŽ}Jº´ŠÒãL³–Ú/õpɲ'Ð^ŸK]O#­ÎÖC¬˪ÞN$jóÇrг2àH9!“ĺ½ÂÝÞ\iOr‡L–ÞVÔÙU³´ñpCrN3øWw.¥Ïe”Úmœ–‘œ¤”_¢‘LŸAÑîgŽyô«eŒI$·Fe Ž1U}n+hhQE†QEQEšÈ¯us»‘euo½ÆÐGr@S·Œ qÓ-¢Ú¾Ì¸Û”6 Œ.1ךۥ¿¯êƧͬµÕ¦›qs Ù} ïÔØ™‰o˜+ÛÀÛÐU»×Ô,ÒûV¼’{xm£‹+ÃWÏ2móãc]Þ—k¨"¥íŒ7*§*&„8Û"£}ÂY¢šM2ÙåˆÚÝI@:qÆ(Ð9ŽôS¼·þã~TyoýÆü¨´S¼·þã~TyoýÆü¨´S¼·þã~TyoýÆü¨´S¼·þã~TyoýÆü¨´S¼·þã~TyoýÆü¨´S¼·þã~TyoýÆü¨´S¼·þã~TyoýÆü¨µÿñï/û‡ùTÞ[ÿq¿*Žâ7û<¿#}ÃÛÚ€4è§yoýÆü¨òßûùPh§yoýÆü¨òßûùPh§yoýÆü¨òßûùPh§yoýÆü¨òßûùP7ñí/û‡ùW?âß/ÌÑ>Ó·ì_Ú)çïû¿u¶îöÝ·ñÅtW¿ÙeùîÞÔOh—P<ë4N0ÑÈ›•‡¸=hͯ|¦¾¿ŽÉ¡X[[ƒìÅñöq02nõñb¬Ãw-¶‘â TòWSº¿[`ÖÇ÷;åU§¡ ÉÏ9»¯ì‹?°ý‡û:±ôû?<¿ûçªMáÈEö-¼QÛZسȶ°ÀZFCqÀÀ-Û½ tÖßäïýuÿ3ítË/Ëi~°‹HttŽÜO¡0“﹬{HgÓü?g¬Ý­…ÄRiKnÐßJcePX®ß•·n c'½ïKµÔ ÛnBÈ&„>Óê28¥“Kµšæ+™layâŽV„Aè2(Ýkýoþ`´×—ùu„7Áá]è6ûxöé[¨E?ð"?ïš½wammñI¹Š,Oq É•Ë[09è ãšÛµÑÞßX¿Ô¤v’Kˆ‹³Z(û½yä“Û­\kDyãíÕ¥Œ’Ë(=p{gõ¿¯ãý![KÅÝ…µ·Ä &æ(±=Ä7&W,IlÀç ƒŽk©¦µ¢<ñÎöêÒÆI e”¸=³RyoýÆü©t°ÆÑNòßûùQå¿÷ò ­?ãÊúæ¿Ê°|mÿ hëáô­ëOøòƒþ¹¯ò¬Èúø_ý© ਢŠb (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ é<ÿ!™¿ëÝ¿ô%®nºOÿÈfoú÷oý h½®>ÇþC×ßõðÿÌ×a\}ü‡¯¿ëáÿ™¤3¶¶ÿV(¢ÛýX¢˜ˆïÕŸ¥p“ÿÈϧÿ×q]Ýïú³ô®ùôÿúî(¹¦DñGqpóH#EŽ<±m rÝéõVo¿'ûößú6ËÐÏgpÅ`ºIX “n#ò5?”¾¯ÿ}Ÿñ®&ma§Š?µÏæ|¡°ñÄ@$gŒ¡©t=N6Öà‚Þ\ ÉWEHÀ`ªÄ}Õæ¹cŒ¤ä£Õ/QE˱ØùKêÿ÷Ùÿ<¥õûìÿsZœº¥ßŒ£Ò­5il y¸>T1¹gó6ó½OôÅVƒÅw¶-w¥ÞÀ·Ú´ik“û¥¸Þ›ÕŽs³ zôâºÖ¿×¿3•éýy\ë¼¥õûìÿRú¿ýöƹÃâámg¨COx/¬Z4kXäy†N#ØØœr0jw×u5°Ž•^^-²¬w~fÐÊNâvF1Ö€7<¥õûìÿRú¿ýöƹ«ïËmusko¦¬óÅŒa®6gŒ>âv gê¨ñ¥ükq-Ö„±[ÙÝ-­ã­àf˜® ®Ñ¹pêzƒÏJ»[š§õýv:ÿ)}_þû?ãG”¾¯ÿ}Ÿñ®G[ñý®‘©]Ú¬VÒ ¦ãͽHd9ÄhF\€}½:Ô·Þ1¹‚}Eí4uc§Ç·}«cìdß•B¼à{Š:\:Øê|¥õûìÿRú¿ýöƹ7XÕ.|Q«Å1Üi±4$3MµâVˆ7Êì“ÜŠ¹á¯Oâvºû%¼6¤|….Ä’Ÿºêlolš,+›~Rú¿ýöƨ‹«‘ÿMþ€µ£Yÿòõuÿ]þ€´ ÏiÚ,/š‘&effˆÉÿ-€ õjiÔYIG÷¼™£ý67óªZ¼âÚÑ¥=·ës®%¼NÇîà}Mpâ±n„’HïÂ`ž".Hô«+Õ»VY$O¼¥Xq’ â­W#à›ö¿{÷c¢1ÿ¡ÖêÝÚÝϧ@²ô;§ÕFÑÃÄÄ2¨üQÿ®Œ=_k'¥Î|McQ÷ù‰5ý¼öÖNÄOr£\u ŒóøŠ³^fÐiíq£êúì1}†þk«‰å2‹¼/”=Å­0ú'ü%M®Ì'K3çg•´cËíÙÎ9é[¤s¶w4QE!…Q@Q@Q@Q@Q@Q@Q@GqÿÒÿ¸•IQÜÇ´¿îå@´QEQEQEQEEsÿ³¸ßÊ¢Ôu+=*ͮ理 ÄI'9$ú –çþ=fÿq¿•sÞ0anÚ-üÀýŽÏPYn „RŒ¡Ï°$sÚ€/éH}P]“h’˜ˆœº¹!v”ÆàrGÏ5nËTµÔ-æ2Ä„†3Àð‘“Àqï\J¾•~ºö£w¨½Ž“u¨@Ö·hB†’4S½K)ܽHÁÅ+ë7Ú—…îìEÓ]Ûá§Ù^ù^Yž&sàÕßÈ´jößüíú°õþ·:ñž’šeíìj.ÐËEGòÁûä(8\`äð3V¯üO¤i©Üݱ‰VHáyaèÅ”¹¬Ë› x²Yµ Ac.—½³•%IFlÆ=È+Þ³^h,~ØhÚ†¶ÚMëYî0läVÎ#ÁöÂhoF×õ¿ùÞÏúØíµ]b3JáM»"B‘‘™YØûäSÛYÓ—WJ7qý¾D2傎¤ã§ãŒ×3hÒjº‡†¬%µÂÊÍoî-À8öì9ç‚Xàÿv®_ÛA´7†ãyb»içòqÔÓ¶¶õü?àÜWÓî4¿á%ÒFªºk\²]3˜Ô<.ªÎ?„9]¤ûZÕÂx‡S´¼ñ˜–Z ½¸·¾[IB@ ‚NX•ã¥wt–ªã{Ø(¢ŠË´ÿ(?ëšÿ*Áñ·ü¡ÿ¯…ÿÐZ·­?ãÊúæ¿Ê°|mÿ hëáô¤3‚¢Š)ˆ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+¤ðOü†fÿ¯vÿЖ¹ºé<ÿ!™¿ëÝ¿ô% ö¸ûù_×Ãÿ3]…qö?ò¾ÿ¯‡þt†vÖßêÅ[«Sïú³ô®ùôÿúî+»½ÿV~•ÂOÿ#>Ÿÿ]Åw5Å$ÒN±.¢ŽÚ属}*zdsGoqq$„… áI9,À O&Ï9—Àž'v5Ÿ «ÌíØýßjÖð·„5½3^‚öý­â9K1%Hé´z×mý§h§÷’4#±ž6Œ¡`3SAuos»Èž)võòÜ6?*åŽ Œd¤–§tó*󃃵ž›ºž…¨\ké«éÚ¤V’‹SlË-¯œ îÝ‘ó®çUσPZoMFoí_µ Ã~è™@ÛÊp6í%vúw®žŠëþ¿_Ìàzÿ_#™>ûM–¢5 Aç¾¾hÝ®£ŒGå˜ùbäà3É9É©.¼?©êzE{¬Æ÷–÷ qks¦Á/÷—qÝœœò:×EEr°øFàÏö›ÍQ&¹mF;çd¶Ø§bl ãŽ;äý*{¿ ýªÏY·ûnßí+¤¹ÝågËÚc¯?s¯k£¦G4Snò¤GÚÅ[k‚:ƒïBþ¿òAý~æÌ ]¦±u¦jQÛ ²­qÖ¢`YFÝÊw §ãŠ}φ¾Ð<@>×·û^‹ýWúœG³=~o^Õ¿EÒÁ{;œõ¯‡o4ýYîìµDŽÒ%¸…í·—(»AVÜ6äcŒ”ºW‡.-5éu‹Ûè'¸’$‹{Aaw?ÌÛ›Žæ·¼Èüß+zù˜Ý³<ã×”êwÖâ¶– Ïÿ—«¯úè?ô­ Ïÿ—«¯úè?ô¤3:[{ÈÈc™DòºgøT>ðáë¥YŸûb?Ÿ#ªÎþc̱ƒ#]ÄùŠ£ïqüU\ߺyŠÿÓT‰æ$QúVS•4ýãX*¶÷ ÖVšn›%•´6êÇ,"nO¾5kÏûß¡¬›[“9tt!Ó’xÁœt')Eý™EqwV“ÊV Î6|ƒÅ\ZkÝØ‰©'ïnjùñÿ{ô4yñÿ{ô5J¹›/ B)¦‚#:ª«_ “öå—/¨$ð;Õu±=.v~|Þý |Þý sºv°·×ÓÝ´VñZÝIöm«µN2I«GTÓ…—ÛMý¯ÙIÇŸç.Ïûë8  >?ï~†>?ï~†³¡ž+˜Rh%Ibq•t`ÊÃØŠ’€.ùñÿ{ô4yñÿ{ô5JŠ»çÇýïÐÑçÇýïÐÕ*(ïŸ÷¿CGŸ÷¿CT¨  ¾|Þý |Þý R¢€.ùñÿ{ô4yñÿ{ô5JŠ»çÇýïÐÑçÇýïÐÕ*(ïŸ÷¿CQ\OÙ¥ù¿€ö>•^£Ÿþ=åÿpÿ*è¼øÿ½ú<øÿ½ú¥E]óãþ÷èhóãþ÷èj•wÏûß¡£Ïûß¡ªTPß>?ï~†>?ï~†©Q@.gì³|ßÀÝ¥KçÇýïÐÖuÇü{KþáþU¡}ö q(´ººf`«´{˜ŸÄ€¹ PÇŸ÷¿CTnl­.µK-BYd2Y‡ò}̰±Îq9îk xªÌèòê mvLWÙí¶(•e,. c«ø­ }DÉc-ÝÍÅŠÅ’Ës³;@É?+0ÇãÚµ#kÏûß¡£Ïûß¡®6/…°³’}>ê[»‹stÖöˆÅxfɱÇ\ç¯ßx“N±ÐÓWy[i?ï~†>?ï~†¹©¼E¶¥Å…ô),ÞDw/ùLç ÈlóØ‘ŠØ£Ì ¾|Þý |Þý R¢€iÿP×5þUƒãoùCÿ_ ÿ µoZÇ”õÍ•`øÛþ@Ðÿ×Âÿè-HgESQEQEQEQEQEQEWIàŸù Íÿ^íÿ¡-suÒx'þC3×»èK@íqö_ò¾ÿ¯‡þuØWeÿ!ëïúøçHgmmþ¬QE·ú±E1Þÿ«?Já'ÿ‘ŸOÿ®â»»ßõgé\$ÿò3éÿõÜPsUfûò¿mÿ£jÕCä5ij¢8G ©a‘•va‘Ç¥!œ‰×Dh‚K¹‹ROÚ’@?Þ«:°—~ µ$”´…ƒn™Û #O­g¿Ã+÷ f… ?ÑÏ@1ýïjÓðçnt]f+ûN9ÄA±BW$‚:–>µåS¥ŠU{_¹ìTžÙ¾YknÏü‹:³ê~<ŽÂKëø-—L3µºxFÿ3;HϵFjšmÝÞƒ«}x—ñÚÚ\Ýt ñùŸ¼ÛÅ@=0OÐê^MCUMJ=JþÊå`û96¬€2n݃¹¿¥F|#¦ 3ìHnÄÿiûP”™üïùé¼ç'·eÁ<ût­øD,ÂêÞk‹É¦º•&’ñävô ¡Ü 1íD~²û6£ åÕåñÔ6yÒ\:‡Ê”©E\Áϵ×õøˆ“ëv^,Ôî.£µ¼¾‹F VˆÈ‰…ÃsšÞðÆ­6¯g,—¶W#Ém ÄМr®®ÄƒùRZx]-n.n[VÔ纚Ü[‰æ‘ Æ€ämœž§5gIТҮn®ÝÕÝÕÖÑ,÷,¥ˆ\íUPÉíÞšíýnÄ÷¿õ²5k?þ^®¿ë ÿд+?þ^®¿ë ÿÐÎcZ»K+yævUÃ7ËÄÓ'ð®üPÇþZªþ5êB×ÎWÈB¦Gá¿Þ4fÇÿ<¡ÿ¾úÕljÂ{vŸ5Žü.2"ã(_çÿä¼|oÍô»÷å®sþõW‚ÎåÌþ«@ÑS}™ýV³?ªÐ4TßfU£ìÏê´ 7ÙŸÕhû3ú­CQÏÿòÿ¸•Zû3ú­Gqlÿf—•û‡ùPú*o³?ªÑögõZ†Š›ìÏê´}™ýV€!¢¦û3ú­fU h©¾Ìþ«GÙŸÕh­Çü{KþáþU›â-FïMÒüË+ig¸’E‰Lp´¾^z¹Uæp+bæÙþË/+÷ò©>Ìþ«@dQi#ÃmÖ:½ÄFà<ÌmfŽy%Îï3ê#ÀíYÌ×óh¥KöÕ‹S¿ö‚ðŸ<[à4…³Ï@øÏ<Œ×¢}™ýV«É£Ã5ô²"µÄ Ë?(lgއ4uþ¿¯/@9‹ã6‹âY¯—Oººµ¸±HZÄd(èÌB:¯N+ø_Z¶ðÌeg·iaÓjöí##0%Âqó…ÎJô³?ªÑögõZVÒß×_ó£¿õÓüŽ+OŽâóXѬ®Š“¥Ù‹‰‚¡P%q²0A$‚ãZz„?‹ôYÒ)(á¹ RUI ŒžÙÁ­¨4xm®nnbEY®X4ϸ’Ä ½8Xû3ú­SwwþµVV8}cuþ¿c%ž«öëk¤Í‹Q8vù¾Lí'~n•ÙTßfU£ìÏê´–Ö[ÑS}™ýV³?ªÐkOøòƒþ¹¯ò¬Èúø_ý«zÓþ< ÿ®kü«Æßò‡þ¾ÿAjC8*(¢˜‚Š( Š( Š( Š( Š( Š( ºOÿÈfoú÷oý k›®“Á?ò›þ½ÛÿBZïk²ÿõ÷ý|?ó®Â¸û/ù_×Ãÿ:C;koõbŠ-¿ÕŠ)ˆŽ÷ýYúW ?üŒúýwÝÞÿ«?Já'ÿ‘ŸOÿ®â€;š¥<¦§aæV5 ‚IbqÜÕÚλ?éÑöàÿÑ”†LÒÜG6ÞõèA/ÿ H—>c²¸VP WÞ‡8ëC\Ck6Q$jR>ZŸõ`ç*¥M¥j°]k6‘Å HK7*€¸Þ•Á|e5 nwË/œ`çÛÈíw·üô“þþñ¨Þî(玺Û,¹òãiˆgÇ\ óŠåõ)õ[ÏÿfYj¯aX‹Œ¤1¾çÞWÀñôÅQ°× ÜÌ‘o–;±.ÈÁÜÈ1•$eAÆx=û×Kÿ]ÈàëcºÞßóÒOûøÆíÿ=$ÿ¿‡ükÒnuíKÃí­E¨¬—6ï%½—”‚(ØýÑ»‰òqš¹áF[˜î »½¼šö¾t7p$OGm€Sƒƒ“Ó­è#¦ÞßóÒOûøÆíÿ=$ÿ¿‡üjÔn dÛÛþzIÿøÑ½¿ç¤Ÿ÷ðÿCºÔ6öÿž’ßÃþ4ooùé'ýü?ãPî£uM½¿ç¤Ÿ÷ðÿ§-9$ŸÞu'?µê’ÌçÏ?ôÓÿeZã=2”G%Êˉî8î#=øç^øiãtfÒ– …#79“È\>÷5q•Ýšâ”.ž¬ôÿx‡SÖõréwÃl¶æÜlU჆<å{ô­­GÄ‘Ùk6zlVÍpóL±M l,+ŸRpN=9ôÎ/€t=OLºÕ/5+&´k¤…&‘ü†BOÈÄ­K¨xRùn­$²Õ/¤.¦VXwÙ`Jäã€'ŽÜTÅj“¶mZwzõõ†£wZG—e=ȶŽà\«9c÷I@>éÇ®}«Rþk¸-÷YZ%ÔÛ€Øóy`RØ?ʹå]V_½Ýþ‹u4PÊc²)4>\IÐÈA|–<öÈõzçL]>ÒàAey«-ÑÛ5¼×{ÆÞz [hôý)t¢Yë÷ºŽ”÷šW™wÃ[É ¹PŠW«y˜å~ƒ>Ô¶~#k.ææM6à\Û\5´–Ð~ô—û­À#‘ÉÆ;ÖE½Ž¿¦xzæ>Áák‹¼ÃkèÍgvÒÄ.r ojßСò4¿³.™=‚ÆH <ˆìäòX•fÉ$œ’sšof"Ÿü$ÎÞµÖ£±S-ËF‰nÓm»„}§×=*áºÖþÄ$U™¹ó1å}¸íÙ½»ËëžØük2ÃO¸²ðU……抺„ˆ¡e´fŒÉ9ùŽÓŽ;ÔVn­aáb;[O³O;;XÙ •¼€T7ghç-€p3Cë`] "ñ]ãè“ê ¥ÄnÖÖ[¼¤Ä¸BÁö IìzV¯Úõ‘`d:U±»ß Þe6ÿx¹A¦ A>Ÿ‡m´èôuÔá‰R3lL|€>÷ÎBžGëYšnŸ{§è·°Ë¡™­®®ILYão&" –!y  àf‡×úì ¡§§øŽçP»‹ì¢ÖW†eæ Êqò°ûÙ8޼TÚ°úÕ”×Yµ£Ç;Âbw FÓŽqÐûsõ¬M7Â÷RéÆ)å›K‰/MÍ¥¬.’ù Œ;ƒ/ÞË`dx©ô+-_CŠäL’^ EÙšI"O."Ió~QÎxÊþ@S[ü¿Ëþžß?ó.§ˆ­­­nn5 ¨¶%ëÚ§‘ Œr:)$·®=*Õ¾¿¥ÜéóßÇx‚ÚDÌࡌŽÌÔW$Ò-’\[Cö–>&vÀó>÷Bx­ ÍR¿´Ö¯ç·ŠÎk©-Þ+Y¥R„ƒó°Ê‚Ý;ãŠKkú~KüÆ÷·õ»ÿ#¥Óuí7WšHlæv’5É$/Úz˜ Ž:ŠÒ®KC½›Qñ®£<¶fØÇc l†T“{žJÓ­u´tVQE (¢€ Žãþ=¥ÿpÿ*’£¸ÿiÜ?Ê€.ß^Á§YKwtû!‰rÇ>Àäô¨xwZ}vÂk‰,žÍ⸒¸fN9Çûsõ§ëZ7öÌvÊ/n-ZÞa2´*–ã!ÔƒŒç§\V?‡´ýkBŽå%Ž[ïµjnÌd’$òâ$Ÿ7å$ñ•ü€¡nïýleoësA¼DGŠ`ÑFŸpT‘¾Õ Ø„ …–ûÞײxÄðør]4OIÜþSº¶<•%ÈÇ qžœsO¿°¹›Åš=ìqn··†áe}Àm,oÉÎJ‡[ÑäÕuý)¤·ØG Ê\Ãè g'#wJ: êÇê~'ƒNñ—£ˆio˜ïpØ®Òxç%Hކ³.¼g{m§yýéÚuË[Ë(½C·*…0zôÝUãð–¡eoc#MöûäÔ ’Y²‹xÁEžÊI>¤šÌ»ð½Ü’ëh|*——w’Ëk©âO(66¶Co<à õøÁü×þé(ÁÑ\g 22)ÕœSCcoľlɬ’}€äþ&§¦÷%m©ÏüzÍþã*ƒR¸½¶¶ ab/'f ±¦(¥ˆ<}<Ô÷?ñë7ûü«/ÄÏ«®“³F·’[‰dTv‘^8ÏÞeÞ@-Ž=N{T²‘—‰šçIºº“K¹V· k-­¿ï‰cî°À#‘ÉÆ;Õ;Ä^xR=zx¾Í§t-»`Ï8éKáø~Ϥý•t«9c$*O";HO%Ë#6I$䓜×2l®`ð‡ü-s—sy"Çq`vÄ„¼œŽ9/ü ›]=»úšø¦÷Iðæy§Ïswråò×dp‡pf=Ü9'høÄG@†']>â転–A¶8Ã0\³ž'€2OëKâ½>çQðô––qy’™a`›‚𲫼t—Åv:—‡äµ´‹Ì™¦…‚î…•XòN:OKüÿj;Äz•ÆŸaYûmÝÄvðn±äãÙC£oâˆ4Q§Ü•$oµH6!(!GVûÞ×µwÿ‰§:Á¤[o?õÚ^ä€ÿßUjþÂæoh÷±ÅºÞÞ…•÷´°M¼g'8=)/??ëúî6Ayâý?S·ŠïF1Ø\] Xîʳ–oºÆ0>éÇ÷³í] r º¼Þ)’óPÐ®ç† Lv%'ƒÊ‰:H.±ç¶@àw®¾…°=Š(  »Oøòƒþ¹¯ò¬Èúø_ý«zÓþ< ÿ®kü«Æßò‡þ¾ÿAjC8*(¢˜‚Š( Š( Š( Š( Š( Š( ºOÿÈfoú÷oý k›®“Á?ò›þ½ÛÿBZïk²ÿõ÷ý|?ó®Â¸û/ù_×Ãÿ:C;koõbŠ-¿ÕŠ)ˆŽ÷ýYúW ?üŒúýwÝÞÿ«?Já'ÿ‘ŸOÿ®â€;šÌ¾®ˆQ‚£+ pC:ûŠÓ¥´ÿÙÿëš6¤3ÏÀ¶®A:×€ÀíW4Ÿ [i7éx·—3:_n9ì=ëÑ(¬V’wQW:e¯(¸¹;w¨øf [ÄŸo½í…˜€*Nñ¾íäœí##×ð­DÒì"’Éã¶D6HÉn#R ÇAÞ» +~–9zÜácðÖ‘³I»Åç‘ÜH©óu!Cmú€ XÓt› $Êlâeyˆ2<’¼ŽØé–bN¦k²¢•€ç7Ѿº:(°æú7×GEœßFúèè¢Às›êÕÊÌé§þÊ+f³ÿåêëþºýhÌ]xœé÷“Ú‹1&Éæóvç'=6ŸZ‹þ6ÿ zÿßÿþƹÿÈÑëw{ç¡¬È ÅÄéXã$p+Æ©‹¬ª8©uò=¨SÁÆ1SƒnË¿Uêvð™·ý×þÿÿö4Âfßô_ûÿÿØ× ŒÅƒGjÚ¶Ó#m6{‰äu˜Bf†5î¡€Ë{ñô©Ž++Ú[z1Â`¥>]›ÿ3_þ6ÿ zÿßÿþÆøLÛþëÿÿûÇ·µ°º±¸hÚåf‚1¤}» ãåÇQœñÍT²H¤¹Tš+‰wp©71üAþTþ³ˆº\Ûú‘k„iû›y¿ó:?øLÛþëÿÿû?á3oú¯ýÿÿìk&æÆÖÛVÛ.¦VE"ñæ«§ƒÈúTÒi6Ñ^Ü+<æ-ÄÏǘ ÇÊOLŒòqUíñ?Íù‘UÁiîÿ3Cþ6ÿ zÿßÿþÆøLÛþëÿÿûÏ‹I·šúÜGö‡·žÝ§Ty™ü¹Æ#Ó½B–6ÏupdŠêÚ h·Ë„ È3‘Ú‡_·—åþAõLò~/Ó¹­ÿ ›Ð=ïÿÿcGü&mÿ@õÿ¿ÿýcÏch“ZÈ.$ŽÎâ=àºîpA ¯‘׊I¬ííõÉìŠ\̈åb#{Ý¿¥/¬b?›òÿ!¬ íÏüÍŸøLÛþëÿÿûd¾/Y¢x¥Òã’7Yl†¨#o"¨Ë¤ÛC}8y&ð@&‘8óœ ‡¶rG5KQµŠÜ[ÍlÎ`¸z 1¹H$qבD±ˆ­eù0x94”wó~½ÍTñ%¤pC hvË $ÆGB£g“Ò¤ŸÅ‘Ý@ð\i1MŒ4rK¹X{‚¼Ökim4è‰ä[ªÚ¬îÌìWOÏ=DÚMÏÚ ‚6ŠQ8-¨ß!©ÉéŒ懈ÄíÁÖü¿‹ÿ3NÏÄ–º|F+-ÚÚ2rR3뀕gþ6ÿ zÿßÿþư.ôö´·ŽqqñHÅDIÁÈäQT·TKˆNÎ_‘qËð’WQü_ùgü&mÿ@õÿ¿ÿýð™·ý×þÿÿö5Éî£u/®×þoÁý›…þ_Åÿ™ÖÂfßô_ûÿÿØÑÿ ›Ð=ïÿÿc\žê7QõÚÿÍø þÍÂÿ/âÿÌë?á3oú¯ýÿÿìj9¼d̓û=yR?×û»\¾êlû§ÿtÓXÚÿÍø!<· o‡ñævßðŸ7ýÿ?û ?á>oú/þöÉZµ¯˜MßœPDOÔôüOªÚÅer‰ 9G‰dÛ&7&FpqÞŸÖëòós~_äOÔ0œÜ¼Ÿ‹ÿ3¦ÿ„ù¿è¿øÿØQÿ óÐ1ð#ÿ°¬h4ɬ..;´òc9Hi@ß©ëÐSt15(®ËHRHÕD^ŒäðתúÆ!´”·ôÿ"“r…­æÿÌè?á>oú/þöÂ|ßô _üÿì+×KYt{»É]–HÆaAüX 1>Ãp«ðè6ò%°0ß4 +] £$gž:­R­‰kòÿ"e†ÀÆ÷ŽÞoüÍøO›þ‹ÿý…ðŸ7ýÿ?û âÉÁ#9£ucõÚÿÍø#£û7 ü¿‹ÿ3°ŸÇŒÖò/öbŒ©ññíþíIÿ óÐ1ð#ÿ°®&FýÓÿºjÍ«Zù„ÝùÅàD@$ýOOÈÓXÊïí~_äK˰«ì~/üηþæÿ bÿàGÿaQ·b{„¸moú/þö‹ ®Ÿ¨êwAe1F7˜by`ªH$žãëU´«+ké$Iî#²F‹Ë¤äž€qGÖqÖ–þ‚úž &Ü6õÿ3~?Å ’É <ͺFY°\ã'g'¤ÿ„ù¿è¿øÿØW5¥Å=ÅÄêxYÊž… ?2?*p³¶:,·kpÏ::+ \*†Ï=OO­/¬â-~oÈo„Nܺ¾¿3£ÿ„ù¿è¿øÿØQÿ óÐ1ð#ÿ°®~ÞÖÂêÆá£k•š|Æ‘öì'—FsÇ5—º”±uão{òÿ"£€ÂJë“o7þgiÿ óÐ1ð#ÿ°£þæÿ bÿàGÿa\^ê7Týv¿ó~¿ìÜ/òþ/üÏT´ÿ(?ëšÿ*Áñ·ü¡ÿ¯…ÿÐZ·­?ãÊúæ¿Ê°|mÿ hëáô¯tùS‚¢Š)ˆ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+¤ðOü†fÿ¯vÿЖ¹ºé<ÿ!™¿ëÝ¿ô% ö¸û/ùß×Ãÿ:ì+²ÿý÷ý|?ó¤3¶¶ÿV(¢ÛýX¢˜ˆïÕŸ¥p“ÿÈϧÿ×q]Ýïú³ô®ùôÿúî(¹¥´ÿÙÿëš6¤¥´ÿÙÿëš6¤2íQLAEPEPEPEPEPYÿòõuÿ]þ€µ¡Yÿòõuÿ]þ€´åþ%W}vì!¿…eÛ ˆn£“x Œ…?{¡öïõ½ Ùj73]M-ÂÉ$Œ pHî=ª?øB´ïùïwÿ}¯ÿ^ELg7$–­žÔ17óÞö_‚±ÄHÛ®ç‘T,nÙUGÖ¶müC*Ãp—Âåíü¤an™ãÉÇ#ßµo§Ï{¿ûíøš?á Ó¿ç½ßýö¿üMLpxˆÞÇBÆà¹T5²òùœüךséqZÇ-Ü[s …H’ORwg‡ ®º¼‘F§wvÉ>YL9SÇbG¥uð…ißóÞïþû_þ&øB´ïùïwÿ}¯ÿMá+·{!¬Ã –ïî9ë«ûÛ¨¼Æ»Ha„F²­#zžG®:úSåÕ`–þ kØc‚ʘ2¾=y뎧¥o§Ï{¿ûíøš?á Ó¿ç½ßýö¿üM?ªâ<»‹ëØM®ÎvóSƒT¾W»k”‚8Äq•ÄÇv$Œ“ÍNúÕ«Íä²NÖ†Ô[3±Cƒ¸7§¶zw­¿øB´ïùïwÿ}¯ÿGü!Zwü÷»ÿ¾×ÿ‰£êØ-EõÜ’»²Øåµ ègû46Ë ·¶MŠdÆæ$’IÇNMIswe{¬]]J×1Ã#C‚Àû‚Gó®—þ­;þ{ÝÿßkÿÄÑÿVÿ=îÿïµÿâj~©]½R-fU³ðæ#ëV²Nbt­ZÔ[³±Sƒ¸7§¶zw¨'¹´½1ZEÑHaòí€sÈ[9aèrxÕѧÏ{¿ûíøš?á Ó¿ç½ßýö¿üMSÂâ%½ˆXì$~ʺ[»˜n ”‰(LR6ä}ERµÔ¢7–V–vóÍi$d6’oqà{jÙÿ„+Nÿž÷÷Úÿñ4§Ï{¿ûíøš§‡¯{¤¾ÿ;±˜[YÉ¿—•Œ]f¬t›;Uó•üÙ$):…pQ’8Vêíÿá Ó¿ç½ßýö¿üMð…ißóÞïþû_þ&³ž ´¥{~&Ô³,<#fÛùFê7WoÿVÿ=îÿïµÿâhÿ„+Nÿž÷÷Úÿñ5P¬iý«†îþãˆÝFêíÿá Ó¿ç½ßýö¿üMð…ißóÞïþû_þ&¨Ví\7w÷Fêdû§úî¿á Ó¿ç½ßýö¿üM2éËo# îòŸ¾¾ŸîÓú…a<× mßÜs:UÍ¥µÙšíd`¨|½ˆØHÎ(ž[fšFžòft,®èªL™ïÉãvŸð€é_óñ{ÿ}¯ÿGü :Wüü^ÿßkÿÄÕ}Nµ­dCÌpÜÜ×qÄÉ{Ò ³Œ0a+K)#‚pãè3ùÒÚß­¶s ïI$nŒ: ¹?ÔWkÿ•ÿ?¿÷Úÿñ4Â¥ÏÅïýö¿üMS¯{‡öŽÖ×{íçs–}x\Ïs$ñlY-ZH‡‰Î“SǬië5Ñ{Ñ5´HžR ÅÚÎp~•ÑÂ¥ÏÅïýö¿üMð€é_óñ{ÿ}¯ÿT°Ø‹ßOëþÍã0v²º8 eófy6…ÞŰ: Ó7W¡Â¥ÏÅïýö¿üMð€é_óñ{ÿ}¯ÿY}B±Ñý«†îþãΤoÝ?ÐÖŽ•simvf»Y*/bÃö$3Šì'ð–¶ò°¸¼ÈB~úú»RÂ¥ÏÅïýö¿üMTpU¢î’&YžI¦Þ¾G y,2]y±O<ÛŽçy+ŸbkX]¤·z¶³e\‡w{ñú ƺ?ø@t¯ùø½ÿ¾×ÿ‰£þ+þ~/ïµÿâj£„¬º"%˜ad’»ûºiþG¦^Ge{çH¯–ë…ë–Ró£L¼ŽÊ÷Î1_-× ×,¤ç]·ü :Wüü^ÿßkÿÄÑÿ•ÿ?¿÷Úÿñ5+][m –c…•îÞºlr2Ÿ²xzúIy!•¿Ü^õ-ùUxo#Jºµ!¼Éd”Ž€.ìçóÛÂ¥ÏÅïýö¿üMð€é_óñ{ÿ}¯ÿMàëÞé f8[Y·½ö9I¯4çÒⵎ[¸¶&çA ‘$ž¤îÎ;8‘º½ þ+þ~/ïµÿâhÿ„JÿŸ‹ßûíøšRÁV“½á™a¡¢oî<÷u«Ð¿áÒ¿çâ÷þû_þ&ø@t¯ùø½ÿ¾×ÿ‰©ú…bÿµpÝßÜkZÇ”õÍ•`øÛþ@Ðÿ×Âÿè-[ÖŸñåýs_åX>6ÿ4?õð¿ú W¶|ÁÁQEÄQEQEQEQEQEQEÒx'þC3×»èK\Ýtž ÿÌßõîßúÐ{\…—ü‡ï¿ëáÿuõÈYÈ~ûþ¾ùÒÚÛ«Qmþ¬QLDw¿êÏÒ¸IÿägÓÿ븮î÷ýYúW ?üŒúýwÜÒÚÇìÿõÍ?›RRÚÇìÿõÍ?›RvŠ(¦ ¢Š(¢Š(¢Š(¢Š(¢Š(¬ÿùzºÿ®ƒÿ@ZЬÿùzºÿ®ƒÿ@ZóoŠs½¿‡£–ßVÔtûÅyͿخZ/5÷•€?0ýGç^k©_j6Òjø€¬VÊÑí 8ŸæÌ{‘À¯hñ7…î|KºÛêZd›w›jfݹ†1‡\co¿ZæåøY«HŽŸð“Ú(uÚq¤çÆSB¢üMi­5 [SÔ/RxàxEäæCúÌ–8ÈØOONÕÑj:åüšÕŠØH±éË~¶“9@LîC žq‚G$ävæøëÁI|—ôº¢\Äjð˜Ä!7tË·]ÃÓ¥hj ѯnm§K 8dŽäO+ u&QÎTž:“žý(î¯ýj7³±£>­c¯X$Z¨¹7W86g@«ñ6ï¼6ñÉ8'ŒsWîõ;]BÊãû7ZD{cºg³U¸tñ· χ¥W·ÐµK]fîþ=VÕ¾Ó(fYqéo0`íÔ“ŠÔ½´¹x@Ón!³›vYÚßÌ =Êÿ:]Ôåm¼S~žöÛɯšÎÕ„`; œ3  ·åíÓ53êÚƒøvè[]j-¨Ãus†³C4 YKa0#i$›¯Z¹ÿ“5›—Ô\êMx/~Ö" @ 0™û»F1ŸÆ§·Ðõ H®¦‡UûFîa,×k” .С7pø³Oúü¿à‹úüÿà[\›¯Í=¯ˆnåòä&K±¡™09O, Áú©<ÖU§ˆ5K½Ò¯PÜÝêMiÛD¡Ö5·4}áOwµk¡j6· o«'Ûî®<ùî$µ ò…Ú0ÀÀóÅAÿ›GfÔœêmx/E؈$ ·3÷vñŒþ4uû¿@é÷þ¤6ÚõåˆÔ¬.ßí×ö× ³g2(e äÐgí"]gQÑ®ÖãWH.`¾–).RÝ8E=Ô犷má[&Šàêé§qq7,“@îÚ^pêj‹x"8t›› >æ U¹¼ûD¸µÊ¼yȈ€Ã*>½8Ç4—ùÁëóÿ€;LׯS@’{†ûtÒ]5¾žáfìgåbu$Œ Õß ]ßÝØ]ÿi\,÷ÞK t@ƒ p·×š™tE¼³úâØê!1g±Pct³~uNÇËáûyŸNmÑ®Úêe‚Ð1’.Hˆ“Çb9ôú»ÿ[ÁM?­ÿà£ñ–v· ok-ÔÒêïgOuÆïPÛNÕナ³ÿ X·³ÔþÂH/l™í’A'˜dâ=ÆAµµ\—†bÔ®4¬lÝ g ÷†hÑU¾ßý5ÿ¿/þ}¾úkÿ~_ü)ˆ³EVû|ô×þü¿øQöø?é¯ýùð  4Uo·ÁÿMïËÿ…oƒþšÿß—ÿ ³EVû|ô×þü¿øQöø?é¯ýùð  4Uo·ÁÿMïËÿ…oƒþšÿß—ÿ ³EVû|ô×þü¿øQöø?é¯ýùð  5Ÿÿ/W_õÐè Sý¾úkÿ~_ü*´l$šâE ¤nR¹ùTt?JC3ÅФO5W?ï_·ù­tŒeÝT{œS>ÓüöþúGíÃþ{§æ(ûpÿžéùнö˜?ç´÷Уí0Ïhÿï¡@~Ü?çº~b·ù«ßiƒþ{Gÿ} >ÓüöþúGíÃþ{§æ(ûpÿžéùнö˜?ç´÷Уí0Ïhÿï¡@~Ü?çº~b·ù«ßiƒþ{Gÿ} >ÓüöþúGíÃþ{§æ(ûpÿžéùнö˜?ç´÷Уí0Ïhÿï¡@~Ü?çº~b·ù«ßiƒþ{Gÿ} >ÓüöþúGíÃþ{§æ(ûpÿžéùнö˜?ç´÷Уí0Ïhÿï¡@~Ü?çº~b·ù«ßiƒþ{Gÿ} >ÓüöþúGíÃþ{§æ(ûpÿžéùнö˜?ç´÷Уí0Ïhÿï¡@~Ü?çº~b·ù«ßiƒþ{Gÿ} >ÓüöþúGíÃþ{§æ*9ïw[ÈÈIR0ô­/´Áÿ=£ÿ¾…iƒþ{Gÿ} _í(ÿçê/ûèQý¥üýEÿ} O´Áÿ=£ÿ¾…iƒþ{Gÿ} _í(ÿçê/ûèQý¥üýEÿ} O´Áÿ=£ÿ¾…iƒþ{Gÿ} _í(ÿçê/ûèQý¥üýEÿ} O´Áÿ=£ÿ¾…iƒþ{Gÿ} _í(ÿçê/ûèQý¥üýEÿ} O´Áÿ=£ÿ¾…iƒþ{Gÿ} dú‚5¼ \ÄIB =*Oí(ÿçê/ûèR}¦ùíýô(ûLóÚ?ûèPÿiGÿ?QßBí(ÿçê/ûèR}¦ùíýô(ûLóÚ?ûèPÿiGÿ?QßBí(ÿçê/ûèR}¦ùíýô(ûLóÚ?ûèPÿiGÿ?QßBí(ÿçê/ûèR}¦ùíýô(ûLóÚ?ûèPÿiGÿ?QßBí(ÿçê/ûèR}¦ùíýô(ûLóÚ?ûèPÿiGÿ?QßBí(ÿçê/ûèR}¦ùíýô(ûLóÚ?ûèPZÇ”õÍ•`øÛþ@Ðÿ×Âÿè-[ÿiƒþ{Gÿ} >ÓüöþúätW®}¦ùíýô(ûLóÚ?ûèP#Èè¯\ûLóÚ?ûèQö˜?ç´÷Р#¢½sí0Ïhÿï¡GÚ`ÿžÑÿßB€<ŽŠõÏ´Áÿ=£ÿ¾…iƒþ{Gÿ} ò:+×>Óüöþú}¦ùíýô(Èè¯\ûLóÚ?ûèQö˜?ç´÷Р#¢½sí0Ïhÿï¡GÚ`ÿžÑÿßB€<ŽºOÿÈfoú÷oý k¸ûLóÚ?ûèT€†‚=Ź /ùß×Ãÿ:ëë³ÿý÷ý|?ó ÖÛýX¢‹oõbŠb#½ÿV~•ÂOÿ#>Ÿÿ]Åww¿êÏÒ¸IÿägÓÿ븠æŠ(¤0¢‘›hÎ ú Š9 $s–ôé@QEQUÿc²ý’é°HÊÇ~•4yè[Ê’<bEÁ  h¢Š(¢Š(¢Š(¢Š[0¦YÜ€Y\(>ƒh?ÔÕ¼Õ+6ù®¿ë°ÿг5Û©aÕtŠi%¼e‘Uˆ<§8>£ .# Í¯0Ò/nî,,f°»ÖçÕšçù†W·ÙæÛ‹ü˜ÛýÞsZkK{­j^|zôá5'%·¾) jÀ+æ|)âš×úôÿ0z^¿äwù£5ÆZ#ëÍ©êÚ¥õ¼×2Á6³´B5‚Í·–'“Îjæ¿yn|ö˜‚Þ@Ë !ŸwïuÃsßµ _Ãñ§Oš3\f¯â=bÒãY’Í,M®–‘»G*>ù.ㆠ¡«–šåô÷vz´–+åÙ‹´¸‰YW$Á‰é޹¥p:|Ñšâ¬|g(}D^®#¶³7‰$ÒÁ¸A\IœöÃ)Òx—VÓ$ŠMV;&‚[)®ÄvÊáÓ`S´±bïuÀ§·õëþL?¯ëï;<Ñšätj:†¥½Õº´3Bdó"´ž! |¬dlƒÁéÒ« 9/üq©ÝH,åŽËÉ.!gt2|³¸äõÁ¡è S´ó£ó¼Ÿ1<Ý»¶nç¸ô§æ¼ãEÕ"²xõ3n‘LJÖ_&,àaØàd“ù“Z^+Ö&ós`.™­xÖIá ˆËH0ÙÏc§JŸ×¯ùõù™Ûæ›æ§™åî]øÎÜó\V‡uiuKY$žòÎy€ÉoÄÑr®®ÄƒùV]´—s¯ˆuKC›átmâ?0ùq¹z’ǯ|Ðôª;,ÑšÁðÀÕ"Ò„Z¼¥çŒùc*rBñ»qb[=rqô¬hõ‹›KY×O‚Ò)î5·µÜêì¼ç.Fì“Çbmýtÿ0éë¯ù¾hÍr2x¢öÆÛR‚öÞÞ]BÑâHü’V9|Ó„<ä¯=G=)ðê^!:•Þ˜í¥½ÔvñOˆäDÃ9 ÌIáNÐêóFk Ä£S—Hhô™v\H|¾“†ã;ƒ¸Îr3Ó¡«<—­¤Dú‰ÿIa–_/fßlnlýsÍ+î®hÍpºf¯~4­ÏKŠÆÙ¯b|ÄwDs€7ƒÎ{šž][éx’Þ%ÔEñ±}ˆòF ŨÜFÞp9÷ïMÿ_žhÍqpø«R’Õaû$fú[Ák²A,18+»~×ù¸Œg¨ëWtíO\º¼º´éÍ%ÚG3ª:ˆ c´düÜŽ§_—ùŠçOš3\×ŠŽ´Ð@4w;·îusòßx0ÆvíÇ9ÝŽ:Õ«ùe—ow²yE›´¢±ÚIC=8?&ôl¤®Ò6óFk‹UÕ¥žÇNÒ—O„ 6;“çÆì9ãhà sšŠM%––máXno†BðÉp±ygkacù›æèx¦Õ™+S³óSÌò÷.ügnyÇ®)Ù®#ûN{¦Ðu‰íÚÞïí­e(ØÈ$· €À6 U`Jì·Z: —4f¢Þ=hÞ=i.hÍE¼zѼzй£5ñëFñë@æŒÔ[Ç­Ç­Kš3Qo´o´.hÍE¼zѼzй£5ñëFñë@æŒÔ[Ç­Ç­Kš3Qo´o´.hÍE¼zѼzй£5ñëFñë@æŒÔ[Ç­Ç­Kš3Qo´o´.hÍE¼zÔ7bymdŽÖá`™†V~ß|df˜óTYU/eERŠø¤°?ÈStÈ.­,– ËÑw"ð%òö;g““ïJç:ŒŸõÅ?›ÒõÈYÿÈ~ûþ¾ù×_\…Ÿü‡ï¿ëáÿ;[oõbŠ-¿ÕŠ)ˆŽ÷ýYúW ?üŒúýwÝÞÿ«?Já'ÿ‘ŸOÿ®â€;š(¢Â‘T.qÜæ–Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š‚Ù±%çýwú-+2-4Ô¢½žþúí¡,ÐÇq )a‚@pHäšÒx%¼J¨_•в“Ó<ƒŒ~Tß.÷þ{Úÿà;ñt—a“§ÇenÒ4Q– ¹òI=õ¬åð醿ækmcR·4ïmÝÇ®2„öõ­_*÷þ{Úÿà;ñtyW¿óÞ×ÿÛÿ‹£­À˺ðÜÜ\Ííõ—Ú¿ãá-¤P²œ`’HÆ*ÌÚ=´ÚzAiVÙJ°Ý„ ŽHöªß•{ÿ=íð¿øº<«ßùïkÿ€íÿÅѰnt;[¤Õä˜ I&ÚÃåvü¼qÇ®in´;;Ùæ–1¼ëO±ºnÀ)œç¦søÕß*÷þ{Úÿà;ñtyW¿óÞ×ÿÛÿ‹  ¨¼= ¹¸šk‹ÍEäµ6Þ]˧1õÚ0£¯©¬/A»›T[md·_\G)!ð6®ÎØIÏJêü«ßùïkÿ€íÿÅÑå^ÿÏ{_üoþ.ëúûÀ©¦iGK8MBúxU6$3Ȭ¨;c ·$ÔÐXEííÒ´†K;`$`m]£zT¾Uïü÷µÿÀvÿâèò¯罯þ·ÿC×pØË·ðÅ…¸CN顳dvKìÜ{ž˜©lôV²…áUÔš#—¼Š|¡Ø©Ûœ|Õÿ*÷þ{Úÿà;ñtyW¿óÞ×ÿÛÿ‹  ºn•›=ÅÁ¹¹¹¹¸Ú$švRÄ.p>P=©šuœö¶¢T)³ºqp§<¬„aÆ=üM]ò¯罯þ·ÿG•{ÿ=íð¿øºŽþ'ž8äI.C@þhŽ y¤ò6x úW0ú¥s§@®’[Í.®o$J»àCžsÈ$qÓ={×Wå^ÿÏ{_üoþ.*÷þ{Úÿà;ñt-?¯ë°_×ÞcÏ [Ť_ÄRëPžè†•ä™D²ÆÜ7v㎂²­4=ji¯nZâòÚI’Qîn¦¯¹Îbßœ×[å^ÿÏ{_üoþ.*÷þ{Úÿà;ñt-ÄÕÕ‰÷𡍤Áã½€]M$ Áma•QeÝónÀ8ê9«Uïü÷µÿÀvÿâèò¯罯þ·ÿ@ÎVjBÓMnm#›ÏšÚE 0sÎGC[ðØÿf-–û€Ë7ÚÏ™ûï7ûû½ cµiyW¿óÞ×ÿÛÿ‹£Ê½ÿžö¿øßü]6ÀÇÔ´©?²R"ÚŽ£óXšõ­Ü¶×of·73\ÛQn&U‰3ŸÞqÏ<ã'«Sʽÿžö¿øßü]Uïü÷µÿÀvÿâèjãNÇ:Þ»“Y·oµÝZÁš–ækYK0nFŸÿ]Åw4QUïo`Óí$¹¸}± ç$žÀ䞤2ÅŒž"Žm.ÒúÛNÔ.åK,qD (we‚ί麄®Ÿí±c pAê"€-QY6úüRêqØÍc{k$ÁŒ-<`,»zããŽyÅ$ ŠMJ;ì¯m$”1…î#dÛÉÁãŽyÅkÑX¶^&´½¹‚%·ºŠ+’ÂÚâXÀŽr9ùNsÐ2qÅIc®h\´pé·¢‘â7,#å ø÷c#(ZŠÄ³ñE•íäP$7IìÉos$`E3.rç=Ž2qÅOe¯Øê­ÆŸjÒI$ ½äÛ„<‘€{àŽÜ{Ð¥‘o¯Å.¥ŒÖW¶’JÂ×€²í댎9矊,¯o"!ºHçfK{™#)™s§9ìq3Ž(nŠ©=ãC¨Z[Œ¬áÉf˜+.Ð yn½ºR[êÚuåÃ[Ûj³Ì¿z8¦Vaõæ€.QU&Õtë{¥µžþÖ+†ÆØžeW9é€NjÝVU޹ý¡tÑæވVGˆÜ°ŒG”$ãÝŒŒt¥²×ìu RãOµi$’ÞòlÂHÀ=ðGn=èRŠÇ¶ñ3ê1YKe}jó†0=ÄAV]¼œrH8ç e¯Š,î® AÔp\3,R JTps‘À=@Î(nŠ/­$ò<»¨_Ïö@|À9%} ¡o¯Å.§„ÖW¶²LÂÓÆË·®0N8çœPµ˜Úí˜×£Ñ×Ì{—FbÊ¿"`‚}pAÅ%–¿c¨j—}«I$&÷“fòFï‚;qï@”V=·ˆ¡ŸQŠÊ[+ëWœ1î" ²íäã’AÇ8 TšŽ¹Ÿt-VÖêî(ÌÑÛ %8ÜrG~Þ:P¥Ÿ6«ðüšµ®%Œ[ãφ܌úRiZÅž«kÁum,ÞZ¼±Å(b„Ž„‘øÑÜ + þ‹HO:ƒAköÕ‰ Ê4I³¶þÎ{VÃÜÁˆ¼ñ¨•‚ÆK¼ž@¦€%¢ªÏ©Ø[,­=í´KÉ*¨F# ž9¤:®œ,¾Úoí~ÉœyþrìÏûÙÅ[¢¨IêÉ-Ú  ºWa*νgåÇøt§WN7¿bö¦ë8ò<åߟ÷sš·ES·Õ´Ûˆ·¶Ô-g™~ôqL¬ÃêÍ>=FÆk·´ŠòÝîSﲩuú®r(Í‹¨xŠÖÚúÎÊÞâÖk‰®– b‚ñ‚ $¨9íÞ¯ÏxÐê–Á#+8rY¦ Ë´ž[¯n”y‡‘nЧo«i·s´Ú…¬ó %£Šefö5[Hñ¬Ù ‹{˜Cß$FU/Ïñxé@´UkmFÊòšÖòÞx“ïŸuºdâK‰š2#ÚŠÀmn»#§¾k¸¢’Ч1=×Û|Cáë"x7Çr|©Ók¯Ê#µ`è«ý¡¥è0Zi× umt%{¶€¢,a›v£dq]ÈÒìÆ¦Ú”MÓ&Íììv¯(' Ðt5-••¾Ÿi­¬~\1‚rN9ÏSÍ4ÆpZŠ›ÛK­>ãí“j©(ºò $ˆfR§Ìè8Âã9®ãOÔbÔRááIaà;À™N =3P7‡ô׿¯¼ÂO0o™Ùz„-´´"†(d1¤k’ÛQ@'$þ$æ’Úß×OòÞÿ×S“²B¾ µþǵÕm i$kÔ¹YN@sÛ±÷}ëU ”xÒ{ƒù'ODm;K ã>¸í[TP´°Þ·9=.õµ-gí·öz„w¼vÉe*Çÿyœ®70sÀà{åiwV÷Ú[‹MIn!–W»†X[ìІ ¸ÅÆ3œÚNA>¦½Šêqž±º°ÖÍäö¥µú9·Œ+d7(Ãøwõí‚1éR(’÷Åv·º}®§âE¹kØ\Eã`~‡p_¹Áç5×Ñ@w8Ë]XÓõý<ö÷'žòΖ® -‚ÅÎò77n:ÙH%4žàÄþIÓÑ›NÒÂF8Ï®;VÕï°¬ršMéÔµµ½Ô-5§ã´…ì¥XàNìX®70sÇAï‰m^msÌš-M-Í“EúllÎÎIʾÐN1ŒgŽMvRc95ÒõY<,<Û™¢“û=£:|QG³w–@w ôൕ]j:#Úé—6‚ÆÙ–êY­Ì;²€·ÍϧÙÑM½_Ÿüó´Há,mî4û? Ý\é÷oº\G4qÀÎè\ü¤ Ç•»â$šKM6ö i¥[[¸î$Lɳ/RFEê3„6÷†¢÷Kav —Y‚P&·e;-¥Š‘2:š}Þš‘^ênÐ^À©ökfePþH¶C.r¿q]ź[úéþBþ¿?ó9+eÔï/Ù?;…ŽWÅŸéÀÛ[Új’_ÂU­ü¸˜Û³ä_?» ¹äv«ž)ŠG´Ó$kY.VØ¥™!ˆÈv€rv€Ië] –ƒ8­ºŒpëzŽ›§Íöá{œÄ’|ë·¥Pû ÜÚ_ˆvC}:ÜKlÑ™ìü§“wW¦:ãµz%Ó°N½£ÜÍ©jkedÆm-™ÑjÎRRY3жÞ1î)Ë ¾¥ªêSeß[ØI¦$dhŽã£œÙ®ÒŠ]-ýj×åþG%¥jÓév²^[ܽ” [ÊÖžDÒî;pPã8$sœÖ‰ Šk[ií‹,3y½µ±œ£`™9$Q[2ÃÊXÒE P@ ä¨4ú ´8··Õõ9|9,‰5„ëö6H »p¤« ¸cƒëU“JÔ ¶2Ik=Ö¡c©­ÕÑÿ‰´€Éœ …#å ã½w´S¾·þ·¸t±Ê]jWÚ´×[YßGdtÙYí2ÓÃ$ã=8¬*ÊOµh-ei«‹«}¢å¯–O&4Ù‡ æt=†Ïå^ƒE Oë×üÁꂊ(¤EPEPEPEPEPEPEPEPEPEP\…Ÿü‡ï¿ë»:ëë³ÿý÷ýwoç@­·ú±EßêÅÄG{þ¬ý+„ŸþF}?þ»ŠîïÕŸ¥p“ÿÈϧÿ×q@ÍQHaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP\…Ÿü‡ï¿ë»:ëë³ÿý÷ýwoç@­·ú±EßêÅÄG{þ¬ý+„ŸþF}?þ»ŠîïÕŸ¥p“ÿÈϧÿ×q@ÍU[òâÝ©’hã%z€ÎÇàM!–¨¦bYzÝà\¿üUC"Öþ{hÚCŽ9;— ’àòI?Â(Í‘«ê÷6¶v–QÜÏx\(’)Wjä󵪬^"’fHdŠ+;¨ïRÖx¥&@w.á±—¹Á8sBÔ‡CEdÿÂM¤}¿ì_j"o7Éæ' æw~6çÛ5z[Ûxo ´’LO8f6Ÿ˜.3ÏAÔPŠ+&é6èŒ÷.wÈñ(H$v,‡ 0ªO½*õ•õ¶£j—V“,°¾pËíÔCí@(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šh$¾\{As3s€zqø“ìÓÿÏxÿïÑÿâ©–Çý6qÿLãþoVËP"¿Ù§ÿžñÿߣÿÅQöiÿç´÷èÿñUc5®j¿ØÚ=Æ¡äùÞH_ÝîÛœ°p}igìÓÿÏhÿïÑÿâ¨û4ÿóÚ?ûôøª­« +í6ÛÊó>Û1‹vülÂ3gçîã·ZŽiWW¿c‚ì4ä²§ÈÁ\¯P¬FÖ#ÐH ¿fŸþ{Gÿ~ÿGÙ§ÿžÑÿߣÿÅV—â˜#ðöu«Nßi»´E9m¤ç €ô­ÛB×R´K«9–h_8eöê¡ö§`ìÓÿÏxÿïÑÿâ¨û4ÿóÞ?ûôøª±š7P7C"¬…Y_…eç®1ùÑ#ìLã' êIÀ§^š×ÞSÿ 5E9ÂÇÿ]cÿÐÅ!“ iṉ̃ƒéå“úæ—ìÓÿÏxÿïÑÿâªÁ4›©ˆƒìÓÿÏhÿïÑÿâ¨û4ÿóÚ?ûôøªË»×®µ%Ó´­;í³Àª× óˆ£w*3‚KΩ®/ tù¢Úä,ÿä?}ÿ]Ûù×_\…Ÿü‡ï¿ë»:î<³µ¶ÿV(¢ÛýX¢˜ˆïÕŸ¥p“ÿÈϧÿ×q]Ýïú³ô®ùôÿúî(¹¨.Ô´q¥¶KN?ʧ¢É?´`þìÿø'ÿUƒ ¯eUÂ4h€º•$‚äðyþ!RÑ@î.©¬éËm”Í$3™r¸‚'Ò™yáøí£Ó¢Ó-¾Xõ¹šMÌ@,Ç,zzšè¨¦´©ÉM¢ê ¢j6ëo™¥ÕEÄk½yO5[vsÇñÖ´u«kѪiš•©»6¾bIº£p9ˆ;Ö忯ÂÁÕ³Ž=GLÔôw}5ä¹’âúo³,©¸+G9ÛœZé¼;csiow-Ük ×wOpaV 僀Gñ“Žæµ^hæx‘¥;¨,¹ëƒÛ5%1QHaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPP¶Ûûúåóz˜ËUdÅrÓ$fUt ʤ$‚2@þ#M7Ï×çÿ@<ßzÇñM¤ú§†ï,­£Ë(P¨X üÀžO«ž|ŸóãuùÇÿÅÑçÉÿ>7_œü]´1.|1eoªéW:^›moäÌæy!UBÆÃñ䎕KAÐf±’ÊÚúÂíÍ›×ö‰h2„Eò ÛÆMu|ŸóãuùÇÿÅÑçÉÿ>7_œü]±Ç@ºŽ?†íÛOi®mþÔžRLƒzñóN:‡º_ZÜÙÛÞKv‹ ×—OraV # €Gñ“Žæ¬±*JÚdÍ$yØäDYs×§ùòÏ×çÿNã.y¾ô jŸŸ'üøÝ~qÿñtyòÏ×çÿH ®Ÿ/iÿ]þ€ôÛ£ˆã?ôÚ/ý j5ó®."f…¡Š"[ç*Y›v'ŒÞ¥¹¥€ª¼2ºîé• ŒþTe¥æ›æÕCq/{Œÿ²ÑãÿB¤óäÿŸ¯Î?þ.€2Z=KI×o¯lì~ßm±ÝdI"u]¿Æ@ €;ñT5ÛmsS2–³¼0MfQ-í¯’1§v|Ï™C‚ ÷#¯ÒùòÏ×çÿGŸ'üøÝ~qÿñtZêÀ´w2tí:îßV·šXÀ‰4¨íY·ƒûÀÜŒg?JÎÑôý_BûÈÓÍÓ}-f…'Ex™YˆRîǵtþ|ŸóãuùÇÿÅÑçÉÿ>7_œü]6îïýuÿ1[úû¿ÈåïtK™5}Bi´ûËË]@#2[ê>HO++®õ 8ê3[:]ņ¿©¿“‹K„„Å pq±6•#9ÏÍ_óäÿŸ¯Î?þ.>OùñºüãÿâèNÁbç›OI2¨yòÏ×çÿA¸¹*DVS+ž#&ÑîpÄþ”†>ÀçN¶?ôÉ?®:éÿÒ§ÿ®òÿèÆ®Ö„ñÂDhßË_è·Ëy+Cž7‘J2‚7H!ˆîMrâ¡)Ar£»R¨ÜÝ´2üÊ_2¬ÿcjô›þû‹ÿ‹£ûRÿ |ß÷Ü_ü]p{¿ÊzÿY¡üÈÆ/l¦¸öËsÒ´¨DÉBÇ%X1g<ŒñTÌw6W¶,#ÝI,òȱ¸P°H°8éï]/ö6¥ÿ@ù¿ï¸¿øº?±uŒé’:10’>‡~Emj·õc–NƒÚ{må©ÏK§]MHT †¼ûQ…'ÙÆ í ƒœç©M‹”‰ãµxd+,¾mØ•ˆU#9,}†Íncj_ô›þû‹ÿ‹£ûRÿ |ß÷Ü_ü];ÖþP¶÷çþ¿¦fñ_^ÌàlÑî8EéÈïV<ʵý©Ð>oûî/þ.ìmKþóßqñuŒ©U“¿)¼+Ђ²’ëøêVß[þlÜ]{Eþ…%dÿcêô›þû‹ÿ‹­ýNžÊ9¥¹$—h䪹ÆqÆrǧµo†¥8Ô»G66½)Òå‹»6+´ÿý÷ýwoç]}rŸò¾ÿ®íüëÑ9խئ[¿ü …S?µ€äoÿü) ôª+Íáckô·ÿ¿þÂÆÖ?èoÿü(Ò¨¯5ÿ…¬Ðßþþ7øQÿ Xÿ =¿ýüoð J¢¼×þ6±ÿ@{ûøßáGü,mcþ€öÿ÷ñ¿Â€=*Šó_øXÚÇýíÿïã…ð±µúÛÿ߯ÿ ôª+Íáckô·ÿ¿þÂÆÖ?èoÿü(Ò¨¯5ÿ…¬Ðßþþ7øQÿ Xÿ =¿ýüoð J¢¼×þ6±ÿ@{ûøßáGü,mcþ€öÿ÷ñ¿Â€=*Šó_øXÚÇýíÿïã…ð±µúÛÿ߯ÿ ôª+Íáckô·ÿ¿þÂÆÖ?èoÿü(Ò¨¯5ÿ…¬Ðßþþ7øQÿ Xÿ =¿ýüoð J¢¼×þ6±ÿ@{ûøßáGü,mcþ€öÿ÷ñ¿Â€=*Šó_øXÚÇýíÿïã…ð±µúÛÿ߯ÿ ôª+Íáckô·ÿ¿þÂÆÖ?èoÿü(Ò¨¯5ÿ…¬Ðßþþ7øQÿ Xÿ =¿ýüoð J¢¼×þ6±ÿ@{ûøßáGü,mcþ€öÿ÷ñ¿Â€=*Šó_øXÚÇýíÿïã…ð±µúÛÿ߯ÿ ôª+Íáckô·ÿ¿þÂÆÖ?èoÿü(Ò¨¯5ÿ…¬Ðßþþ7øQÿ Xÿ =¿ýüoð J¢¼×þ6±ÿ@{ûøßáGü,mcþ€öÿ÷ñ¿Â€=*Šó_øXÚÇýíÿïã…ð±µúÛÿ߯ÿ ôª+Íáckô·ÿ¿þÂÆÖ?èoÿü(Ò¨¯5ÿ…¬Ðßþþ7øQÿ Xÿ =¿ýüoð J¢¼×þ6±ÿ@{ûøßáGü,mcþ€öÿ÷ñ¿Â€=*Šó_øXÚÇýíÿïã…ð±µúÛÿ߯ÿ ôª+Íáckô·ÿ¿þÂÆÖ?èoÿü(Ò¨¯5ÿ…¬Ðßþþ7øQÿ Xÿ =¿ýüoð J¢¼×þ6±ÿ@{ûøßáGü,mcþ€öÿ÷ñ¿Â€=*Šó_øXÚÇýíÿïã…ð±µúÛÿ߯ÿ ôª+Íáckô·ÿ¿þÂÆÖ?èoÿü(Ò¨¯5ÿ…¬Ðßþþ7øQÿ Xÿ =¿ýüoð J¢¼×þ6±ÿ@{ûøßáGü,mcþ€öÿ÷ñ¿Â€=*Šó_øXÚÇýíÿïã…ð±µúÛÿ߯ÿ ôª+Íáckô·ÿ¿þÂÆÖ?èoÿü(Ò¨¯5ÿ…¬Ðßþþ7øQÿ Xÿ =¿ýüoð J¢¼×þ6±ÿ@{ûøßáGü,mcþ€öÿ÷ñ¿Â€=*Šó_øXÚÇýíÿïã…ð±µúÛÿ߯ÿ ôª+Íáckô·ÿ¿þÂÆÖ?èoÿü(Ò¨¯5ÿ…¬Ðßþþ7øRˆºÁ?ò·ÿ¿þé5ÉY¯üO¯Oý7oçTm?ü ?üEÚ¾Ôž´}©=kÅáhÝÐ>?ü ?üEð´n¿èþŸþ"‹í_jOZ>Ôžµâ¿ð´nèþŸþ"øZ7?ô‹ÿOÿEÀö¯µ'­jOZñ_øZ7?óáþ·ÿGü- Ÿùð‹ÿ[ÿˆ¢à{WÚ“Öµ'­x¯ü- Ÿùð‹ÿ[ÿˆ£þ…ÏüøEÿ-ÿÄQp=«íIëGÚ“Ö¼Wþ…ÏüøEÿ-ÿÄQÿ Bçþ|"ÿÀ–ÿâ(¸Õö¤õ£íIë^-ÿ Bçþ|"ÿÀ–ÿâ(ÿ…¡sÿ>àKñº.´ý©=hûRz׋ÂйÿŸ¿ð%¿øÝð´.çÆ/ü oþ7EÀöŸµ'­jOZñoøZ?óãþ·ÿ£þ…ÏüøÅÿ-ÿÆè¸Óö¤õ£íIë^-ÿ Bçþ|aÿÀ–ÿãtÂϹÿŸð%¿øÝÚ~Ôž´}©=kÅ¿ágÜÿÏŒ?øßünøY÷?óåþ7ÿ¢à{OÚ“Öµ'­x·ü,ûŸùò‡ÿÿÑÿ >çþ|aÿÀ†ÿãt\iûRzÑö¤õ¯ÿ…Ÿsÿ>0ÿàKñº?ágÜÿÏŒ?øßün‹í?jOZ>Ôžµâßð´.çÆ/ü oþ7Gü- Ÿùñ‹ÿ[ÿÑp=§íIëGÚ“Ö¼[þ…ÏüøÅÿ-ÿÆèÿ…¡sÿ>1àKñº.´ý©=hûRz׋ÂйÿŸ¿ð%¿øÝð´.çÂ/ü oþ"‹í?jOZ>Ôžµâ¿ð´.çÂ/ü oþ"øZ?óáþ·ÿEÀö¯µ'­jOZñ_øZ?óáþ·ÿGü- Ÿùð‹ÿ[ÿˆ¢à{WÚ“Öµ'­x¯ü- Ÿùð‹ÿ[ÿˆ£þÏüøEÿ-ÿÄQp=«íIëGÚ“Ö¼WþÏýâÿÀ“ÿÄQÿ FçþñàIÿâ(¸Õö¤õ£íIë^+ÿ FëþñÿàIÿâ(ÿ…£uÿ@øÿð$ÿñ\jûRzÑö¤õ¯ÿ…£uÿ@øÿð$ÿñÂѺÿ |øøŠ.µ}©=hûRz׊ÂѺÿ |øøŠ?áhÝÐ>?ü ?üEÚþÔž´}©=kÅ?áhÝÐ>?ü ?üEð´n¿èþŸþ"‹íjOZ>ÔžµâŸð´n¿èþŸþ"øZW_ôÿOÿEÀö¿µ'­jOZñOøZW_ôÿOÿGü-+¯úGÿ'ÿˆ¢à{_Ú“Öµ'­x§ü-+¯úGÿ'ÿˆ£þ•×ý£ÿÀ“ÿÄQp=¬\¯­=fSÞ¼H|Sºó Oü ?üE^°ø°¾z­æžÑÆN Ç6ò=ðTQp=Œ04µ‘¦êq^ÛÇ42ŽE ¬:kUNE0Eexƒ^´ðî‘>£xO—áWï9<=ɯºøÓ®<Ìml,"‹?*ÈØr*÷\Ñšð?ø\¾$ÿŸm3þýIÿÅÑÿ —ÄŸóí¦ß©?øºWß3FkÀÿárø“þ}´Ïûõ'ÿGü._϶™ÿ~¤ÿâè¸ùš3^ÿ —ÄŸóí¦ß©?øº?árø“þ}´Ïûõ'ÿEÀ÷ÌÑšð?ø\¾$ÿŸm3þýIÿÅÑÿ —ÄŸóí¦ß™?øº.¾fŒ×ÿÂåñ'üûiŸ÷æOþ.ø\¾$ÿŸm3þüÉÿÅÑp=ó4f¼þ/‰?çÛLÿ¿2ñtÂåñ'üûiŸ÷æOþ.‹ï™£5àð¹|Iÿ>Úgýù“ÿ‹£þ/‰?çÛLÿ¿2ñt\|ͯÿ…Ëâ?ùöÓ?ïÌŸü]ð¹|Gÿ>Úgýù“ÿ‹¢à{æhÍxü._ÿ϶™ÿ~dÿâèÿ…Ëâ?ùöÓ?ïÌŸü]ß3FkÀÿárøþ}´Ïûó'ÿGü._ÿ϶™ÿ~dÿâè¸ùš3^ÿ —Äóí¦ß™?øº?árøþ}´Ïûó'ÿEÀ÷ÌÑšð?ø\¾#ÿŸm3þüÉÿÇ(ÿ…Ëâ?ùöÓ?ïÌŸür‹ï™£5àð¹|Gÿ>Úgýù“ÿŽQÿ —Äóí¦ß™?øåß3FkÀÿárøþ}´Ïûó'ÿ£þ/ˆÿçÛLÿ¿2ñÊ.¾fŒ×ÿÂåñüûiŸ÷æOþ9Gü._ÿ϶™ÿ~dÿã”\|ͯÿ…Ëâ?ùöÓ?ïÌŸürø\¾#ÿŸm7þüÉÿÇ(¸ùš3^ÿ —Äóí¦ÿß™?øåð¹|Gÿ>Úoýù“ÿŽQp=ó4f¼þ/ˆÿçÛMÿ¿2ñÊ?árøþ}´Ïûó'ÿ¢à{æhÍxü._ÿ϶™ÿ~dÿã”ÂåñüûiŸ÷æOþ9EÀ÷ÌÑšð?ø\¾#ÿŸm3þüÉÿÇ(ÿ…Ëâ?ùöÓ?ïÌŸür‹ï™£5àð¹|Gÿ>Úgýù“ÿŽQÿ —Äóí¦ß™?øåß3FkÀÿárøþ}´Ïûó'ÿ£þ/ˆÿçÛLÿ¿2ñt\|ͯÿ…Ëâ?ùöÓ?ïÌŸü]ð¹|Gÿ>Úgýù“ÿ‹¢à{æhÍxü._ÿ϶™ÿ~dÿâèÿ…Ëâ?ùöÓ?ïÌŸü]ß3FkÀÿárøþ}´Ïûó'ÿGü._ÿ϶™ÿ~dÿâè¸ùš3^ÿ —Äóí¦ß™?øº?árø“þ}´Ïûó'ÿEÀ÷ÌÑšð?ø\¾$ÿŸm3þüÉÿÅÑÿ —ÄŸóí¦ß™?øº.¾fŒ×ÿÂåñ'üûiŸ÷æOþ.ø\¾$ÿŸm3þüÉÿÅÑp=ó4f¼þ/‰?çÛLÿ¿2ñtÂåñ'üûiŸ÷æOþ.‹ï™£5àð¹|Iÿ>Úgýù“ÿ‹£þ/‰?çÛLÿ¿Rñt\|ͯÿ…ËâOùöÓ?ïÔŸü]ð¹|Iÿ>Úgýú“ÿ‹¢à{æhÍxü._϶™ÿ~¤ÿâèÿ…ËâOùöÓ?ïÔŸü]ß3FkÀÿárø“þ}´Ïûõ'ÿGü.oÏ®™ÿ~dÿâè¸ùEy‡ƒ>*ÿmêQéš­´v÷E,Dìfþé$NkÓ•· Óh¢Šl‡ \ιyåFÜ×I1ù pÞ(¬O@ æ3üìrÍÉ>¤õ£uB­ò¥.ê‘’î­{¯ê6z ¾³2ÇöYÈ êpXcqÏqYšt^jVÖÓÏÉ Y%‘‚ª.y$ž¯D—\ðΩ}ªé‚êæî`û:I;ƶ©åƒ°¡ÎG<Œõ¤öÐç'¦xbûV¶Im®´ñ$¡ŒVÒ\4›s«ƒèzâ± A{WaáËKKêÚ¶·1dCwv©ödä9cê{Ï–³žÒËQsfºŒ+¹Lipц9ûÁ×’?ži½ì¢I'š8bBòHÁW«pt7¾½³šÆwhd¹e‰ÃH‘+gØ,ON V,w &½ÚrǦ©™,ÅÖ1Év#<ò+«ñU¼ ¢¦¥~ºtì’«Ã&Ÿ.EÂwr?]Þ¢Ž‰°êуmáíBë^›F_%.`ßæ4ŒDj©Î3Ž˜ã¸¨Æ‰vÖ«$+ëƒoçp8Éãùý+ªÕµí,è7:Í­Ä_Û:­´v³B¬7EŒ‡b:€@ò¬Èoìdž|/ º€K¤d• ƒtk¿;˜v愵³òüÁíuýiþe{ïêv0ÜÈ.4û¶µ¸ŠÒã|‘VR£á‹Í*Ñæ»¼ÓRTPÏh.s:ƒÓäÇ¿­kx‹Åvpê:½¾an²^*mAn žj‘ÉQÑV5 ,®4Ç×uMPºHqeqfù¹/Ø>ã§_|Ôý›ŽÚØåîtk»_ìÏ1á?ÚH¯Ö< Üq×¶jÄ~ÔåÖî´˜Ä-5¯3Ëæb$%ˆsé]¾&´´´ð½¼vú=æØ#Y¤¸ŒHöç#<çä#¯>”³jº]Þ·â­6MF"Ôü¿"ð6è² pXqƒëõª{ýâ_åøœÞ«áëÝ&Ò;Ç–ÖêÍÛ`¸³›Ìw¡8ÒjžÔ´ƒb.Þ h|¢[$ãå9æä~}kNõìt?Ýhë©Új—· !û#ïŽ%\s»Ôãüâ·õ/éPj—qLñÞGh±Ï¦¼GzyÂ=¤dqŒ~ ÒÛúûÃúÿ#™> ÕW]:;Ëf—ßí%ÚV„Î:íÎƳuM3û/ÊÎ¥¦^y™ÿŸ7f1÷¸Îxúîlu«¼I§^Ï©Xï} G3Ï2íç;_ž<޵Žú?ö¿ˆ´¨O ™Ïšš+p~f.>ƒûÓ¶¶Ö¬:_úÙ÷þ¼³’ÎVk»©í–æH ·fhCtÏä)Öþ»ºðýÆ£ W2\CwövµŽÌÐK9Î:WC¤kÿÚ Öç–öÆ ¹Oxm¥ò×!Ll=Qß5 êöÚn‹y›¬±s­««´ø–H°2ÍÝ—=OCB×çþhŸ/ò9{;˹+[;™äO¼ÄÎËõqK •íÄÏ WRÍߎ8Y™~  ŠîïIoø†êßSµK‡xͱkö·‚A¸ïB7çŒõ¥ÕuË4¹ñlö:œ)4ÐÛ$‚pØ 6ÂN;â•ô¸í­ŽØßd˜ØÝc%dÀÛPŽ œ`­ZÑô£«Æko¥»O,¥7ð:.29?^ÕÝGâKi4[;«[Ý5¤ŠÌÇqíô‘»>>oÝý×$ç’3ÏZåÿd|þ”Ý[@¹²×îô»(®o¾Ü´P–8*H\ã­uÄ)®[jÚëPiWgQ,“LaÀUPÃéœSÍþ•?Š5ûÈ5Ku¸c¶2_½¼2£qÞ„nÆ:fÿ¯@Øãì4GR¶¿–Úg±ÛæA±Œ¬X‘…P:Œôª°éú…ÁAaw)ˆ•G¶Â:†Ààýk½ºÕ¬nµŸAg¬ÚZMy ¿ÙîÍÆÈË ù‡˜?*§á)ìl!‘äÕí~Ü·ÿ¿3ê/oêé‚„ó÷ºÒZƒþ¾ã•Ðô©5½Z+”C¸3<¬»„j£$‘‘ôëÞ«Kgsiû=ÏØËb;†…•gƒžœúfºégƒO´ñ>» #‹ë¶³µd<2³nr=ˆïíZ~!ñ¤úMôÚ}Þ—-­Å¨ˆ[É{ ™x ùAr1Ò‡µÿ®ãK[öï4Eö¯5£óBy ¸§÷€Ævûô Ù_- »6WBÔò'0·–àXÅvQßÚÂ4#¬[ HÙ—[ƒ"lT-Ÿ³ù™êGlûUÛ+í"ÓÃrC©jÖòilŒ“_¹—Î#îˆIÚÐQ-/ýwÖß×c‚M3R’4ëÖ…ñ¶E·r­ž˜8Á¦=äwBÕìîRåºBаsô\f»ëÁº\+«Åºè[È ³0ìØÎþœûRê+e¤iºö­c}%ßÛ6XÛÌò™HÌ€9å€}¨Ù\V»±Í·‡5ÐçÖJ*éñ°Øò|­*–Àe^xäu#Û5º·t»èSÁZý´·H&‘­Ä1<ƒsù;Aäí\Ù‘HÆáùÓ·½`ésB{ ûhD×pÂzI, ª1M[K·µk¤´¸keûÓ,LQ~­Œ ôÏ]¥…Þ´÷ú½»ÚO§ˆaÓ|âÒ Œ7—ü>¹µOMÖìU4‹á®[[é––>MÖ˜Òï&Ò#þ,’9ö÷¥Ñÿ]ÿ¯˜vþ»_#Š“I”iz}ä-$ò^<а%»äm8àôoÃ¥Dºe÷ö…µŒÖÓ[Oq"ǹ£É'ò3Ž}+°Ð5]:|'æ^ÛB ší¥W™G”6ÝÙäƒý+\¾ì·Úæ\ö8ÿÇh’³°–¨Ã¾µšÂäÃ#nã*ËчùíZPèö‘F¿Ú:‡“+ ùjê»~¤õªú¥Ú½å±ëäÍùƒÓõ­vÂååTiãP 2Ž…r=i ËÔtÿ²"Oop.-œà8<ƒèqüêþ‹áñ¹¼ºx!c„TûÍïÏAP^\cNh\a䔤‚GÏ»··ó­+y…Þ‹ (#%Qc;ÿ€Ž3Ç9GNÜŠæÅU•8¦º³Ð˰ð­Q©ëe{wªxj+kwŸOº’o,eâ—±êÇåŠçwfº¸em´­++¨%Œ¿Å'ûÞý½:c+ŽhÓŠœ%YTNúÛ©Y–EÁZýgøozÇA‚&lìfé¸×§ÀÛ£ÍxçÇ?Ù±öÛùׯZÂ>•Üy‡›üf˜ŸZÆñsÿ|=x–kÙ~2ø’Zÿ×Úÿè^3šLb榵®®c ¾ƒ¹¨3W´ë«{Hî$o•—bGÈÈ=y)Õ¯Ùn„/((@a(=ñR]Ø}–Þ9Ö1¶á£1ŸÈõ%ÍÍå­²ónÑ6¼¾×=þ”]ÝBtõ¶[§»“ÌÜ$t+´c§<Ðvjݢܳ¼²íâÈùäg¦8¨Rëe³Cö{vÎxÑåÆ}jÖ“æ‚݈$l¬›ƒýiˆ`±ÓÅp’l(á”÷Ï·Ò‘l‰¶‚f”)ž_-nxé»­Yûm¬É–Ù—d¸\ž¤ Šêî¿¶“ö[}¡I  “óÒ’4Õ3ÝÇ%Ð-±¹ü²søfœºC¼‰²áŒÈ% z¿/\óR.£oÎ¥(Úâ`<µt$?ÔWKç¹¹Gšëì¢5Äf(É íÚ„#´Š{è­à»,ŸòÓË#{íMŠÐÊ·dJÙ”“òçw'ߎ•}ïí?´ìæó7˜Áó§òÊï8㎴Ïíwš è®g,®„B6}}Ó­@šz#–æí-üÑ”R…‰§Ò–=.WÔ¾Äòm»·¸ëÚžóXßAoö‰Þ aAÄeƒ鎔ÿí(þi¾dŒ[¢È$“Û§ãLmt©®ng„°ŒÃ÷ŽÜäö6+( ŒwW¢‘Šä–ä} [ƒZC=¯š j¹3¾3¼íÀ„{P°»Žt…àa$Ÿqrâ¤:F¢ en~òÿ^¢\X9Ya.]’€dqŠ‚ è;ÒbþSœÐ;{»¥f‚p§ä NMI ¨6·¯*²Ë\Æ <æ®GäM¦\´—áep…»qÇZdº…µÄºˆfhÖtP·9+ëõ  IcvöÿhXÅŒîã§Ó­ es%¹¸HI„KäzžkEu8 ´.³$3ÅÍ­o¼œÍØT6³Z¾ž¶÷2 NŽ/$îF'Œ7J`A{å/‰e—d`° Ôšeõ¡²™#2¬›>åsüþµ.¬Ê“Gh‡)oO«u&›{ ¼’Ü[+ÊRÝU‚¡È#­ ‚Þk©<¸»ã8?t¶—0롃 ¬÷W®~˜«ºL%ÄþtrD†ÝÆæB=?:rjÖ²Ø$nÓGnt›JŸ›ÐJ¦ÖÏ w0¼bG  ç'±éšyÓ.dže¶…Ý#r™fPŸò©þÕioE;Ì¢äLò2´zc©¢{ëw†`’Íx%_”ýß^”À¯m§Mt·!r%‡Ë I>¤ñÒª0dvFe$ïZ¯yi5΢1H®ví“Ë'§·ZÍû4¬I†)e$+¬g =i4:}åÄ>t03ÇýàG?†sL¸³¹µ*'…“ÝèsùUë{Èm×NI‘ ’C((r çª?·B–ÐK&Såå[· Å.êe]MU’Ø\¦•¨<w‰VÖB…}sŒcÞ¤e]Ôn«i£Þ¸såªìµûYÜã˜øäc<óÐÕ~ê7S)ðÃ-Ä«I,­Â¤hYÐM©òÜÍ8ŒK4’×daܶÅôè=©‘Å,ϲ¤•ðNØÐ±À'Ði÷³Úù^zlócYSæ*zN´ÍÔn¦Q@ÝFêe>(¥žUФ–Fû©côš7Qº„ŠYÞ8¤uŒnvT$ Î2Oa’>´Ê~ê7T×ö3i·²Ú\mób8m§#¦zÕj~êµcª]é¯+ÙÍå4Ñ4.ÁA%QÈ8úŽj•íÔ»©”P÷Qº™E?uZ¼Ôîõ·K©¼Å¶ˆCÚ"ƒ€?3ÍR¢€º­XêwzkÌösyM4M ‡hmÈÝG ú}j•íÕnÇT»Ó^W³›Êi¢h]‚‚J£qõÕ*(Û©wS( î£u2Š»6§w>Ÿoa,Ùµ¶,ÑF¥¹' dþ9ª»©”P÷Qº™E?uX°Ôn´»Øï,¥ò®"ÎÇÚ#¡5RŠ‘¤.Řå˜äŸzMÔÊ(ûªÔÚÜú}½„³fÖØ³EP–䜓øæ©Q@Ý[òxçÄrÂо¢ n¥X}š!xþås´PÝCS»Õoîúo:vÚ ªî¦Q@ÝFêeLÖ/´k£s§Î!™¡mŠü0ÀŽÂ¦Õ|Gªëij7Buˆ’ƒÊDÁ=~êŠÊ¢€ºÔÊ(û¨ÝL¢€º­[êwv–wVM²  «:…8 gªTP÷Qº™E?u©”P÷T¢î`¸óZ¯EL%·ëJ—/ÄnÊ=3š‚ŠŸí¾æË7©5"^¼O¾"ÈÇ©VëúUJ)4š³dâù¢ìËSßMq2FltÉéø* ÔÊ(ŒTU’°ç9MóIÝž­ðÜçNýöþuì6ŸêGÒ¼wá·üƒcÿ}¿{Ÿú‘ô« òÿŒŸò¶ÿ¯µÿмb½Ÿã'ü-¿ëíô¯³²¹Ôo#´´‹ÍžS„MÁsÆz’jL(­4[»y¢K©,­ÖLâG¼‰Ô`gŒÄz:ÔW:{ZéÖW"²Ý‡!@û»[o&•ÆS¢Ý?JZ(ëS­ÃX½êÅ›dFÎ|¬A œóƒÎ1ÅI›<±A< ½´ìè“Ï T%FHî{œc'RŠBÀúѽpNáÁ怊L‚HÈÈëK@7Ù.>Åöß(ý›Íò|ÍÃïã8ÆsÓÛOk=¬PK<{tó"bÀî\•ÏŽAë@ÑVôûÔVí’UQmnÓœŒîùÕ=ËœnôÍ-Q@2;"£;_º¤ð>ƒµ6Š(¢Š(§$‡Ùte8#ñ¦Ñ@Q@29EBìQ~ê“Àú mPŒŽÈ¨ÎÅWî©< íM¢Š(¢ŠUfV ¬UÈ àŠ™˜³1f'$“’i( Š( Š( yåù{Ûfs·û³cÔæ›Eó4¥v™¯¦ãŠePÖYade€â™š(  º?ü†ì?ëâ?ýWÕZoü{¯Ò¾UÒ?ä5aÿ_ÿèB¾ªÓãÝ~”Ћ´QE0"Ÿîà¼Uþ©ë½Ÿîà¼Uþ©èçÚêµÙìSOÒRU¾ûIÓ"Øb¸Uø±•(I÷äV,z±4I,ZMóÆê]m܆AÇ"¦—Dñ Û<Ý/S“b„MÖòª:ÇÚ¥ê­ýuÞÿ×Cv+h¡­¼†O F€nc´–8ê}éóÁ£iÚe¬S[4‘O§‰w¦ž®Í#.w ÷ämnØÀïXk¥ø%IRÇWY<´q €ªãAÇ©Ñéþ*†Ñí"´ÖRÙóºŽPž¹\`Òj÷þ»ÿ˜GK]ùu=Ô¶7°]Âq,2,Š}ÁÍ[ÿ„w[ÿ 6¡ÿ€¯þÂ;­ÿÐPÿÀWÿ ¤ìî \è5xô{}SV·bÕGcì’|òß#äüjK=/O{ø™í£Ìz*\¬in$ß'cFó‚N çñX¢øŠXb†M3Tx¢Ï–…S''dÓ†“âUš)†Ÿ« bcq ›€pM¿¯“ÿ;‡›þµ_äk´½ZîK;5ûeÅ‹cf°n™x(€¹PTàòj}KKÓm¬îu- 6öÖ`~PC]×i/ž¹¬Y4ÿMx—’Ùë2]&6ÌÑJ]qÓ ŒŠˆè¾"0™ªKù†?"M¥ºnÆ:ûÑoëúõüƒúþ¾ïÌÈ­ßcþí?vq¹³÷ªÂ;­ÿÐPÿÀWÿ ’Ä6ò¬°izœR/Ýt·‘Hú)‰£NÁ´—ÐõÑc ôOöTÜפƒrt ‹Í\ñ:6ž—Ö jß»Eû+¦ž¨TäaÌûÉpÃ=G~1ŠÀMÄ$‰—©¢È»]VÞ@g8a¤ê’†‰PžÇ>¢²¥ÐüAq+K6•©É#œ³½¼„“îH¥`2¨­/øGu¿újø ÿáGü#ºßýµüð¦m¥ÿî·ÿ@mCÿ_ü(ÿ„w[ÿ 6¡ÿ€¯þ›EiÂ;­ÿÐPÿÀWÿ ?áÖÿè ¨à+ÿ…fÑZ_ðŽëôÔ?ðÿÂøGu¿újø ÿá@´V—ü#ºßýµüð£þÝoþ€Ú‡þ¿øPm¥ÿî·ÿ@mCÿ_ü(ÿ„w[ÿ 6¡ÿ€¯þ›EiÂ;­ÿÐPÿÀWÿ ?áÖÿè ¨à+ÿ…fÑZ_ðŽëôÔ?ðÿÂøGu¿újø ÿá@´V—ü#ºßýµüð£þÝoþ€Ú‡þ¿øPm¥ÿî·ÿ@mCÿ_ü(ÿ„w[ÿ 6¡ÿ€¯þ›EiÂ;­ÿÐPÿÀWÿ ?áÖÿè ¨à+ÿ…fÑZ_ðŽëôÔ?ðÿÂøGu¿újø ÿá@´V—ü#ºßýµüð£þÝoþ€Ú‡þ¿øPm¥ÿî·ÿ@mCÿ_ü(ÿ„w[ÿ 6¡ÿ€¯þ›EiÂ;­ÿÐPÿÀWÿ ?áÖÿè ¨à+ÿ…fÑZ_ðŽëôÔ?ðÿÂøGu¿újø ÿá@´V—ü#ºßýµüð£þÝoþ€Ú‡þ¿øPm¥ÿî·ÿ@mCÿ_ü(ÿ„w[ÿ 6¡ÿ€¯þ›EiÂ;­ÿÐPÿÀWÿ ?áÖÿè ¨à+ÿ…fÑZ_ðŽëôÔ?ðÿÂøGu¿újø ÿá@´V—ü#ºßýµüð£þÝoþ€Ú‡þ¿øPm¥ÿî·ÿ@mCÿ_ü(ÿ„w[ÿ 6¡ÿ€¯þ›EiÂ;­ÿÐPÿÀWÿ ?áÖÿè ¨à+ÿ…fÑZ_ðŽëôÔ?ðÿÂøGu¿újø ÿá@´V—ü#ºßýµüð£þÝoþ€Ú‡þ¿øPm¥ÿî·ÿ@mCÿ_ü(ÿ„w[ÿ 6¡ÿ€¯þè äûíüëØ¬ÿÔ¥yÃÛyí-0É Êçtr)VädjõÛ?õ#éT#Ëþ2ÈÛþ¾×ÿ@zó_<[§’27¿#Wª|SÓ®õk;L×2Þ‘†v#ry'¯8ÿ…mâÿúËÿ#ÿâ©0èEáë›[ŸY›m:<$»¼©$}ß»n»Ù¿JÑÒÙáðÄ·AÝ Ìyb‰rÅ$J‘‘Чÿ ÛÅÿô—þþGÿÅQÿ ÛÅÿô—þþGÿÅR°Æø®{—·´†ûOÔ!¸Fr·ò«ÈëÇÊ ¢åAéש®^º¯øVÞ/ÿ ,¿÷ò?þ*øVÞ/ÿ ,¿÷ò?þ*„†ÙGÃn.&ºÑä`Q‹ËLœ0;£?÷ÐÛÿ­›Y/éÚTL-: %z4ž[™ýôHúU?á[x¿þ€²ÿßÈÿøª?á[x¿þ€²ÿßÈÿøª¸–†®‡)·ðö.Ÿc{x Èo¢µ™]·&RŒJíÆ9ïQi–‹ag®ÎªSNdгdíò}p'ýñYÿð­¼_ÿ@YïäüUð­¼_ÿ@YïäüUWý_äo@4¿±hªêæÑ]äe䑳ÿ ®zº¯øVÞ/ÿ ,¿÷ò?þ*øVÞ/ÿ ,¿÷ò?þ*„€ŽÆâÞÛÀò5ÅŒWŠu Hî +®Q­Ë9-f¸Ó$ŽÔC1ÑßìpÃ.Iç7Üi7|ØÝŒçÛµcÿ¶ñýeÿ¿‘ÿñT¶ñýeÿ¿‘ÿñTûÿ], OëÎæŒ’Ow{o5…ݽñÒ$Oô·Všàî ®N3Vá]H.”³«Â:tÔ7BLy#ä9>Ïœc¾qXð­¼_ÿ@YïäüU[¾ð//͹—Caä@.ÙeT`gæëR֟ןù‚zÿ^_äqG¯WUÿ ÛÅÿô—þþGÿÅQÿ ÛÅÿô—þþGÿÅS•¢º¯øVÞ/ÿ ,¿÷ò?þ*øVÞ/ÿ ,¿÷ò?þ*€9Z+ªÿ…mâÿúËÿ#ÿâ¨ÿ…mâÿúËÿ#ÿ⨕¢º¯øVÞ/ÿ ,¿÷ò?þ*øVÞ/ÿ ,¿÷ò?þ*€9Z+ªÿ…mâÿúËÿ#ÿâ¨ÿ…mâÿúËÿ#ÿ⨕¢º¯øVÞ/ÿ ,¿÷ò?þ*øVÞ/ÿ ,¿÷ò?þ*€9Z+ªÿ…mâÿúËÿ#ÿâ¨ÿ…mâÿúËÿ#ÿ⨕¢º¯øVÞ/ÿ ,¿÷ò?þ*øVÞ/ÿ ,¿÷ò?þ*€9Z+ªÿ…mâÿúËÿ#ÿâ¨ÿ…mâÿúËÿ#ÿ⨕¢º¯øVÞ/ÿ ,¿÷ò?þ*øVÞ/ÿ ,¿÷ò?þ*€9Z+ªÿ…mâÿúËÿ#ÿâ¨ÿ…mâÿúËÿ#ÿ⨕¢º¯øVÞ/ÿ ,¿÷ò?þ*øVÞ/ÿ ,¿÷ò?þ*€9Z+ªÿ…mâÿúËÿ#ÿâ¨ÿ…mâÿúËÿ#ÿ⨕¢º¯øVÞ/ÿ ,¿÷ò?þ*øVÞ/ÿ ,¿÷ò?þ*€9Z+ªÿ…mâÿúËÿ#ÿâ¨ÿ…mâÿúËÿ#ÿ⨕¢º¯øVÞ/ÿ ,¿÷ò?þ*øVÞ/ÿ ,¿÷ò?þ*€9Z+ªÿ…mâÿúËÿ#ÿâ¨ÿ…mâÿúËÿ#ÿ⨕¢º¯øVÞ/ÿ ,¿÷ò?þ*øVÞ/ÿ ,¿÷ò?þ*€9Z+ªÿ…mâÿúËÿ#ÿâ¨ÿ…mâÿúËÿ#ÿ⨕¢º¯øVÞ/ÿ ,¿÷ò?þ*øVÞ/ÿ ,¿÷ò?þ*€9Z+ªÿ…mâÿúËÿ#ÿâ¨ÿ…mâÿúËÿ#ÿ⨕¢º¯øVÞ/ÿ ,¿÷ò?þ*øVÞ/ÿ ,¿÷ò?þ*€9Z+ªÿ…mâÿúËÿ#ÿâ¨ÿ…mâÿúËÿ#ÿ⨕¢º¯øVÞ/ÿ ,¿÷ò?þ*øVÞ/ÿ ,¿÷ò?þ*€9Z+ªÿ…mâÿúËÿ#ÿâ¨ÿ…mâÿúËÿ#ÿ⨕¢º¯øVÞ/ÿ ,¿÷ò?þ*øVÞ/ÿ ,¿÷ò?þ*€0tù Xÿ×Äú¯ªôßø÷_¥|ïià/Ø_ÛÜÝiO0ʲHÆTùTIûÕôF›ÿëô¦„]¢Š)ÿp×â¯õO]ìÿp×â¯õO@Þº†ÏÀš4×Á ÙE¹äpª8îM[ÔüCc¦éx׶͘šHΫç`g {çÛ5ƒ¦Ú\Màï ÜAmö¯²E¯o¸ãË+‘» y#¥?V°Ô'kéâÒo·Ø uO2 Öì7prØÁÜÊOJž…-ÍÅ×íÎ¥k§þøÜÜGæp§b|»°[¦qØSõmnßF·Y®L͹‚ªÄ…‰ä õ8ªòØÜ6¥¢Ê#Ê[$‚VÜ>RPõçÒ›«Ã{©ø~ê´1Ü3íHÌŠw(q†Îp2qTírc¶¦•åÛÚÛ‰Wa%Ñq$¾Xù˜§¿<çŠlZ­”÷oi ý¼—)ð¤Ê]q×*Ecx–é¶EbÑ2Ü[x&V©`¯ÊIéÍeXÚ]ê.±EdbK}Râc|]:opU@;²sŽF1Kúü‡ý~g]©esu%¬öòÜG÷âIƒ:ý@9ÝKRþÍ·IZ)çg‘bHá+¹™ŽÞ ~µÄi—‘-°·³I›JÓ¦I ¼Èë+å1‚¤X©?0“ÅuúÄBçOE—K’û,Ê¥N:‚̽>´?ëï-æµ%•‚ÝͦßmÚÍ")Œ´@woŸ‘4\x‚ÒÚ[‰Þõ”Dn…@?_jÈ{Óá¸tûí!õ99§CäòvÌA$á“Å]¸ÓïŸLÑ¡sçÜ[O Ï&î»GÌÜõçñ¦·ù¡tù3XßÛ‚WíqnyDyƒ;ñ½zûU5ã=ÍÅ·Ø/£¹Š/4Bû3"çiÈþ"+6].ûþ±¬¥¢´JÂ'xË.Ò<î¸Ü3·vçéRé–wÛójK:lRBVd.„Ï&àCa  òy;©!²Ý·ˆå¯#]3PY­v‰bÜ€r3ŽNHàŠµ¦ê±êv¯JIK0S!fa´×îþµ¡ø~î”Yínm#û+Es ºÿXåƒÖÌkÇoQÅMªiWiww¶›%ìW:zÚ¤²Î§c|—.ÛˆùÈñGoë¸wþ»÷^"¶Óç)},PÄn /ž¸Rcß—Î6zcžÞµ¤nâ"n Ž"ùÇÎqž=xñ\ŸöF¥gr.Vٮ̱ÊdPÒ¨·’73»<:V¾± Ü˦Þ[Ú´²ZÜ žÜ:† £)“·#w®8¦"ìúÎjŠ÷•¬JÌÈ­$ê °8 dõƒO—T´†x ’úža˜£i€i>ƒ9?…sºn‘yö›Yn¬ö&/LˆìŒWÍ”2ƒ‚Aã=3Uì´½VÈig³.VÞnݤ‰¡d\äÛ†N ñëK ÎuËH¬­§¾½´µ7 C])RÙn7}ELukz,Ž¡n.H<åÞxÏÝÎkÏïÒMMkK¨#–îëHKXâGæFãp )9`K»žEth×’%ó `d{ëY¢;—;PDõãZŸ_븙Ñ.£j÷f·µÒ ͔ԮsTÆ¿m.·™mq îÉ#Jc˜1ˆ®Þ¹ïéXV¼‹U"çí»c¹žx§FƒÊù÷uãÍÎäqשt]6úÞûJI´ß³¥…¬<áЬ¤íÁ\Üí':Ò^`Í×Ö ¶k“{umm2Är£$¨<çO==9¦Oâ:ÚæÒo"U»Fxf2¨°T`6y'pÆ=ë.M&ñõÃp`©,û‹/Üû3Œÿ{Œu¨-4ÝCM½µ¸M=¦Ž9nÐň $’†FäŒyéBéýtt«¨Ú½ãY­ä-t£sB%Àõ+œÓbÕl®.d¶†þÞIãÉ’$™K&:ä‘\½†y¨EÏÛvÇq<ñN•óîÆxós†Æ9uÆ+&Æ7ÕâH³Ž$’×KžÙî!™6v(Ê’FpOÌëÅêw‰¬iòZÉtš•³[Äq$¢u(‡ÐœàUˆ.£º'·e‰ÆVHßr°ö#­rhw’YNímz.^KUd¸{}¥#1+å0zòx®žÎéî'¼ˆÛ˜’Þ_-ŸõŸ($Ž98ïÒ˜ˆôínßT¸»†ØÍþŒÊ¬Î…CdgåÏ$qÖ£ƒ_¶“V»Óe¸†ˆeXã¦åÊ+d/_âÇ~”YZO¹ª\ºb)ü¯-²>mªAãµbßéW÷º¼zvRòêRôºUS'ÝTãŽýi-ÆÎ‘ukšxWP·2À ™˺0:–ãñ¤ƒV±¹¶’æßP·–þü±Ì¬«õ àW!¤ëÚ…ÍÃOo30‚î$; Xˆq„ Ÿž3»½^Ô´;É®nd‚Ù 6‡Ë,™¢‘™þ

kx`·hmìÞëÌf$‚q–(ƒå~¸¡yÿ[ÿÀßOëcoMÖQ{ˆ¼‹‹y­Ø,‘M·###•$=é$ÖíãÖ¢Ò³+\¼m!*2¨b}OaYzM­Ý„××6úAµ·â d%Aƒœ<Ÿ)*8#€yÛêj8tMV×_µºûM½Ä"Iå•ŹWùÀÀ$ÈsÀ8 @kqoo^Íío-fùª· ôÎ20O~Çž”ÉüEm×çŠeb@ Jì¡€^}$ã5SBK漞ëRÓna¼™~i]âhÑAùcM®N9ÎHäç=…S—D¿ƒÄ޹inDŠ"œm¸‹b_ö[+Áã§ÙÅ=?¯_òõøÕ®£Ö¡±º°X£¸ó<‰Vpìvs–\| sïŠ}Ö¯…ÝÀº¸E†(£r«³‚ìTtÎr@š«eeªÅ­\Þ]Ag/šÌ©7Ú_tq „òð;ór~€V6£©y%ìÂÌ›…[8Ž#qH“–m¹(6).ƒ}NŒx‡K6fëí'`“Ê*bq&ÿîìÆì÷Æ*Ýõ¾£j.m\¼D•Ë!R8 †‚ï\½îŸ¨ZMý·2Ä׿jY¼ ,±í”Á*…³‚Ní¾‚®øsûR( K‹EŠ)Úââlƒ”f—(£8ê <ŒñÚš.ZâMz]: {fHB4%ÉWÃdü¨çzŠdZÜâ#¤Éov³††ã{ Á‘6™ÏšRÒ¯5NÝü‹á†t•nƒ>¨p3ÈÎ=¬5½nÖêé,â†Ñ£h]šI ¨ 9Ét‡AÁùÁªºeÖ’·76DY4øà·· Ïó¡sŒœ¿0ç9ëÒQzš­ûišt·Kk-Ë"’#¿¦Çö&¸a6õ>Sì À]øÛ’ã=éÉ®iÒjÅ.3>â˜ØÛK’¡ñ´°ô5—ÿåÂZÝÁ±‘%Õ´±–';bƒž:ü‡ó‰¡êI­ÚÆÚíïÔ·šä–`…qËuÏ t£Oëä-lt3{w”C$ÅFDq ³{ ÆOÉ6—§\Eb>Ó!Ž8d›j©‰ÜàÊzZº{ÝK§[É{GtÑ©•¢±ɬ”ÑîbðÔ:kZé÷r«Ëu“Ëœm9##Ž>´=†]x ÑR[kp¡ž9R{¡¤‚ªväqÓ5´nãŽÃí“æÄ~c‡à ÆNk=÷MÐbÒ´ø¬n£‰šà”˜äª¤’~^;sSâ]6.[¢¶°EI¢#ÍgCÎàÀ®Þ×½À,õ»ÝGLk›M/÷Ëpñy3Nh_âcƒƒìëRÇ® |0úÈ·#d)„·uÎFïL޵˜t^ .âÖŹ7,¾t¾Qh%C$|ÆxõÆ+VâÆâïÃWki¤·xR8¤-d¼í;PöÓúÐúÿZ•Lj¼Û;ÛÛ{_6ÒÒݤi|Ì ”^9ÇBÝó‰4ífâçPû å”vó5¸¸Cþj•Î9Ê©ŸOÆ©Â;um§ÞiÖ2¶WVŽžK±Ä2•ÆSºs’;GZ­i¢jAšúÒÃOµ–;F-¬Ù™n$ãi•~O4ô¿õæ%{/ë·ü¡ÕoÛLÓ¥º[YnY‘xÉã<“Àõöå”v¶ó]J-ÌÖÿh#h·8Á#=:ûU›È$ºÓ'·D²ÂÉ“Ð1ùV&£áë­FÃN´i¡l¢WVq3¨z¸9ÏsK¿õÜ}¿®Å÷Ö±­ZX-œÞ]Ê3 ‡ùTaw`É>½1SêÅ––ñ%Ô’”1UŽ¸Éƒ€295¶77†—w!‰M²¿œªÄòÊËÇ#>¸ªš¼z—ü$tÚ}¼R”·Y§fT\˜ñ– yã§|`E›ÍSsé‰a*8¼“w˜>aå(ÜÄ~ƒþPè…w ™±·~~Ë/)ýáòò¿ít÷ªÚ“5¥ã¤ÁŠÙÛ-´NTª»1ß#.{d¨ÿ€š[_ÝCmeÉ0i’Y¾ ÁvÛ‚8éòŸð¡éýzÿÀûÁký_Ò4/ÕÈL¾Wƒ¼7pßê­g¶’Sè¹ÛŸÀk°mÅBÁ#84º\}LÖ×lƽ޾cܺ3Uùë‚),µûCU¸ÓíZI$7¼›p‡’0|ÛzÀµÑu?_ÑÃÏoqyï,éjà’Ø,\ï#svéÓ¡­”‚QãIî Oä=I´í,$cŒôÎ;S]>b{2[sûB飇M½¬¹a(H?Ç»éZµÇÙ©M~Ô麭´Iõ.VE‡ãvì—Þº]3P‹UÓa¾…$H¦”Hlg‰¥Ð}E¿½û AksrÌÁDv鹉üH{’+9|QdÖàAu曃j-<±çy£¸Î:sœãêojZv›æY[Ë4ò8Lp´¾^z¹UçÀ¬ai§ 6DÖh.|á:Ù¸¸iˆ9}¬¼ƒ’Ç f¼zúÜZ<ÖúuôÒÅ/“5²ª "lgæÜÀcäÔU8üT&ζÃl·‚Òá§Ú 1ൈ#qóÆ}ª®Ÿoªišµ©IÌ·÷LÒê´¼(TÜž3€8§k §ø.×I‹™¤’SÕ¤.¥›ëÃ1¦·û…Óï:º(¢ÂŠ( Š(  »Í~ÆËSµÓ¤{›‡5ÈL‚AcÐt>þÔ^kö6Z®œí#ÜÜ8@±®Bd ƒ¡÷ö¨uø&šãF1Dî#Ôܪ“µv?'Ðr9£_‚i®4cNâ=AÊ©;Wcò}#šk§¯ù õôÿ2MK_‹K˜‹‹ß³©P÷K1&xç=ûZÕÉx³ý8k{MRKøJµ¿—v|‚ ç÷d×<ŽÕÖ&í‹¿±Î:f’Øoqh¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+?ZÖmt?í·›üê‡`É8ÏÓ½hV‰-d¼T+ËÛãi@RÀ I>ƒ¥Pu]vÇH†ÖK‡fS$1À%‹wëÐw5fMNÂų–úÙ.ŸaiT;g¦9®2÷ú”:Ué™MÇØÑaÓR0]¼± |?‹Wè¾ôž']NöæöÝ¡½eˆÚ%½ˆt‘ARY¤ÚJww\bšÕ¡jvwz¦Ÿ`è——ÖÖÌÿtM2¡o¦O4Ùu}2 •¶—Q´ŽwÆØžu sÓ9®CÄØÿÂL÷š}ÄÆîßýå 2* K¹†Éçiï¥Éq§ø½‹ÈÒÙÅä%ØCüQß·ÍO˜qœc<úfºm~)&ðî¥HÒHö²*¢Œ–%Nê_Ãëb—ÅbÌw¶ò Þ¢=ÂoŠ7`†2p;ã<â©Ùkö:†«q§Ú´’Ioy6á$`ø#·ôÛcGIŠk ^ãÈÂÏä‚ ÂŒ†cÊç§¾*8à˜xÖyÌOä=I´í-æ1ÆzgªÚ÷­êBo–þ† ò5êõÕô®æÏýHúWŸò5_ÿ×Aÿ Šî,ÿÔ¥!œî®3âMú^gÿ!IWþ{Éc QmkyÉ,î~P=0'ê*¶¨3â ú]gÿz,ÿÑø­ P“QÒÖK…U¹ÚÂô!*qìqŸÆ°m<>¶m®Í”ºnŸbï*Å-á3FUE'×éZ~RÚd÷„··rÜÆ÷¾Sø€ãM_×Þ'ý_q»ERQEQEŒÁ±€3ÀÉü«#K×_T}EOš´eUIˆW“+¸dãøã¥lV-­Ýž©®ÝýœºÎñ¼ G™¶0ëÇ#ÐPøŠhîo-õ-?ìÒ[Zý¨ù3 Nxè0ÜtýiÚ^¿=íì×V oö›ss$âPP÷¸OÌ=G½fA¤êOua§ Mi"yQ¼éÉʹT$ sÏSž”x{E¸°Õ š)ôÈØÅrádóÛ#iŒÇ'ÏJkÏúßþŸ—õ·ü°¢Š) (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠÆ_Ãÿ SèO +D‰6îŽILcƒž¾¾”–>#‚û[Ôtô…‚Y c6r$9!€ìF>¹ªzííþ±pŒ-§i –ÆrAÃ"`’8åÏcQÿ`j|̺Y F”Ð%Ã0æ}û²G\’IÎ(þ¿ ÿÀrË\Óµ™`ƒÂ¡äYbx™T÷ÀqÇ^•)Ñ®]–+²vÆÒîh]U‘~ó+Ãíšç`Ð5 ™u<–‹>˜ÖÆ[ÛÁ9ó ÎA p¿—Ò¡žKÝOPµ°:x†x´«˜Â¤ñº±*Š1´ð28ÝŠõøÿ/ëðÿ3¥_é·v·FÊéDÑ[´àO ˆ6÷°@,¿îæ©^x’ê=GO²¡ke¸’o²Í0lœaU9QÔ彪-CEÔ'ƒOX­òÑiSÛÉó¨Ã² Uëê=*ÝÛëV×ö$Òã·fÜ$ ’:þ½*¬¯ýyÿÀ&ï—úòÿ‚Mˆm`³iﮡ9¹’ÄHKb6…ÁbÃàcð©®|C¦ÙÁ ÷Ì‘J›ÕþÍ!}[ òÿÀ±X6úF«§]Á¨¥Ú+›½ÖâU RWʺ’qžŽ õž·©´§ìWÍo5žÈííïR/*S»>gÌŽW¹*:"–ÿ×sbAo¯¦$r4r[¬É,Q¼™,Ä`íާŠ|ZäZ^]_][ˆ ºxFŽ1ƒ€¸#,ßîð{VlZž™©ØÝG`×Htèí%ÊŠbe9ÉÜFG'¦zT'EÔ£‰®#¶Y&ƒW’õ iy±G 89ôª²þ½ÈZÚÿÖßæn/ˆt·Óf¿X·¶ÊLl#p<Ž1Þ¥Óµ‹TÊ,æfxˆóãhÙsÓ*Àkœ»ÑõMBÓYºk?"{ç·Ú™°XØe˜ƒ·'žý­¨¬®Å—7¦<[=”qÈåñ#zGõø@mw#‡IS…‘¾Ñ Ú¤¨ :·^¼­LúÕ±³¸¸µIî̘8#%¼ÀpG8üú{ÔW¶Wø—J»HóN²>GÊX.8êz»k-ÌñÏö›O³•‘’1æÞƒ£qÓ>©=‡ÔÊ:ö¿ƒÅÿ“äùð–ò÷nÛ׌ñšßÓãÝ~•ÍYÙOaàhm.£ò犮¹'¸âº]7þ=×éT÷ÐKbíQH§û†¸/ªzïgû†¸/ªzÙÓ"’ ÚÚ½¢Mnöá3Œ0#‘ŠÑCu*-ª…PhàVm²Ft«’8ä g+AÓ>„އ‚FFpܬ¾5PHmÍ·ç9s»=¿ÛoûèúšC;ß2óþ}—þþŠ<ËÏùö_ûú+ˆÿ„¹d [H³;³œŒç;³Û¾öÿ¾©¡¼Z¬Ní"ÌîÎ쎠îÏoöÛþú>¦€;r÷l6¨Aàƒ"ÓbÄ‘Eeq  ¨® (ÄÉâõÚÅ´‹6Îs‘×;³Ûý¶ÿ¾©ªéã‘;º̃œ“Îs»=»ïoûèúšô2óþ}—þþŠ<ËÏùö_ûú+†0YU‹hög9ÎFsÙíþÛßGÔÒ¿‹'~‘fwgvG\îÏnûÛþú>¦€;2óþ}—þþŠŠXešxf’Æ6’Lld)#¸Ãâàá‰ÑìÛ9ÎG\îÏoöÛþú>¦ƒâõ`Ûô‹2[9ÈÎs»=¿Ûoûèúšî<ËÏùö_ûú(ó/?çÙïè®O©»G´lç9{;³Ûý¶ÿ¾©ª³xûk8} ͳœäõÎìöÿm¿ï£êhÑ|ËÏùö_ûú(ó/?çÙïè® ?%ÄeÛF´ù³¸œçv{¶ß÷Ñõ5/ü%ë!;´‹C¸åsœîÏoöÛþú>¦€;2óþ}—þþŠ<ËÏùö_ûú+‡>0W,H´%³œŽ¹Ýžßí·ýô}M<ø±6í*ÌîÎr¹Îwg·ûmÿ}S@¯™yÿ>ËÿEeçüû/ýýÃIã$ƒ£Ù¶ìç#®wg·ûmÿ}SO>-[v‘fsœäuÎìöÿm¿ï£êh¶ó/?çÙïè£Ì¼ÿŸeÿ¿¢¸‰¦¤OÃ8bt›2NrÎs»=¿Ûoûèúšï|ËÏùö_ûú(ó/?çÙïè¯8—â †‡ûÍÉ$O\îÏnûÛþú>¦´¿á,I/¥Y’ÙÜ ç9ÝŸý ¿ï£êhµó/?çÙïè£Ì¼ÿŸeÿ¿¢¸fñŠ1mÚE›g9ÈÎs»=¿ÛoûèúšükV-£Ú6AÎG\îÏoöÛþú>¦€;ß2óþ}—þþŠ<ËÏùö_ûú+Í¥øY è¶ÉÎ{çv{¶ß÷Ñõ5“'ÅøÌÍü#–oœä™:çv‡ý¶ÿ¾© _ó/?çÙïè£Ì¼ÿŸeÿ¿¢¼º/‰Ér¤ŸÚe³¸Îs»?ÃþÛßGÔÓ›âNòÃþëGÎs–ëÙþöÛþú>¦€=?̼ÿŸeÿ¿¢2óþ}—þþŠóeø„f8oÚÙÝ–Îs»?ÃþÛßGÔÕ±ãC*’Ú%™-œƒÎs»=¿Ûoûèúšï¼ËÏùö_ûú(ó/?çÙïè® øÑ¶ýÌî'9Îwg·ûmÿ}SWSıλ¿³,Ûvwe3œîÏþ†ß÷Ñõ4×ù—Ÿóì¿÷ôQæ^ϲÿßÑ\ÃkJÀîÓ¬Ûvs˜úçvô6ÿ¾©¥:ʾíÚu™È9Êg9ÝŸý ¿ï£êh¦ó/?çÙïè£Ì¼ÿŸeÿ¿¢¹¶ÕûO³%³œÇ×;³ùïoûèúš_íe“;¬,ÎìîÌyë»?úßGÔÐGæ^ϲÿßÑG™yÿ>ËÿEsçRG5•›'wîÏþ†ß÷Ñõ4I_vë3œç1uÎìÿèmÿ}S@™yÿ>ËÿEeçüû/ýý‚×á•‹XÙÙÎbëÙü÷·ýô}MFúª’Á¬,Élç1g9ÝŸý ¿ï£êh¢ó/?çÙïè£Ì¼ÿŸeÿ¿¢¹‰u  oÓ¬È9ÉÙœçv=íÿ}SJu¤pÛ¬,Ûvs˜óœîÏþ†ß÷Ñõ4Óy—Ÿóì¿÷ôQæ^ϲÿßÑ\ÈÖ’]Û¬,Îìç1ç9ÝŸý ¿ï£êjfÔÑÃcfÛ³œÅ×;³ùïoûèúš½y¡Ã¨\›‹­<ÊÇSvÛ2¶ŸÄV–û±ÿ.«ÿs²jƒÖl9Ì}s»?úßGÔÒ6¬¬¶Ÿfwg99Îìÿèmÿ}S@™yÿ>ËÿEeçüû/ýýζ¨¯»6mœç1õÎìþ{Ûþú>¦™ý®²-§Ùœç99Îìÿèmÿ}S@/™yÿ>ËÿEeçüû/ýýÌK­¦vŸfÛ³œÇ×;³ÿ¡·ýô}M#kˆû³§Y¶ìç1õÎìÿèmÿ}S@G™yÿ>ËÿEeçüû/ýý˶¹gvŸfwœÇœçvô6ÿ¾©¨¦ñcvtÛGÝœå:çvô6ÿ¾© ·Ì¼ÿŸeÿ¿¢2óþ}—þþŠãÛÄ›ƒ¤Ú6ìç)×;³ÿ¡·ýô}M)ñ}Û´›29Êç9ÝŸý ¿ï£êh¯ó/?çÙïè ËvM¨ü$¸çñ);³¤Y¶ìç+×;³Ûý¶ÿ¾©­-#QþÓÉ-µ´-ð”h×iË9ÎNáÏÌß]džΠ¹¤Ô_RãMÊ.KdPLÿÂOxHÁ.¹Ÿ(®âÏýHúWÿ3Eßûãù í¬ÿÔ¥Y™…©†:Þ³„ù\ôÎÖ­# Ó:¹6Å—;Xƒ‘ŸN*•ðιcí0þF¥Õ®æµò|©6nÎxÓÖË;o祿þ=þm½ÿž–ÿø÷øVZj-ÿ-Ïýò¿áH÷÷jØóÎ?Ý_ð  ]—¿óÒßÿÿ 6ÞÿÏKü{ü+ê—™#ÏÇÕøRNï#÷Çþù_ð  ·¿óÒßÿÿ 6ÞÿÏKü{ü+µKÕ?ë»ÿu†ÕoGI¿ñÕÿ ÚhïJ³Û#yý)V;ÅPªöÀ€<~•Ïfûv Àý…Û7ÙÿZ?ï‘þÐm½ÿž–ÿø÷øQ¶÷þz[ÿãßá\óë—j3çûä…W>$½â@à€:·¿óÒßÿÿ 6ÞÿÏKü{ü+“>$ÔqòºŸø ø—Rù×þøÖm½ÿž–ÿø÷øQ¶÷þz[ÿãßá\ˆñ.¨GÞOûàSÄÚ¸ècÿ¾v;o祿þ=þm½ÿž–ÿø÷øW|I¬õ ?ë?þ-\d‹ðŒP]¶÷þz[ÿãßáFÛßùéoÿ…r'Äš˜ëcÿ¾Äš¡þ4Ïû‚€:í·¿óÒßÿÿ 6ÞÿÏKü{ü+’>$Ô€æDðTçñ~­;#õŒPs¶÷þz[ÿãßáFÛßùéoÿ…p'ÆzÀvè3ÿ\ê¯ü'ºÏ›³u¿ýúÿëФm½ÿž–ÿø÷øQ¶÷þz[ÿãßá^ÿ ¦µ‚wAÿ~¿úõRãÇÚì?wìÇëÿ^€=/mïüô·ÿǿ·¿óÒßÿÿ ò9~'x†3÷m?ïÑÿ‰þ)øŒ±lŽé‘ÿö·¿óÒßÿÿ 6ÞÿÏKü{ü+Ǔ⧈N7¥Ÿáÿ™~(ëdà‹`?ë—ÿ^€=omïüô·ÿǿ·¿óÒßÿÿ ó8>!ë¦I·þ¹ÿõê«üJ×EÏ–ŸeÛܘøÐ«m½ÿž–ÿø÷øQ¶÷þz[ÿãßá^a/Ä.6‹Rïÿ^ˆþ x…ŽZ¤GühÓöÞÿÏKü{ü(Û{ÿ=-ÿñïð¯-ˆž I6â×õÈÿLÿuÅÚ@· õýßÿ^€=3mïüô·ÿǿ·¿óÒßÿÿ óˆü«7_'þýÔËã½Hÿ_÷î€=mïüô·ÿǿ·¿óÒßÿÿ óÙ?@ß|A´”‡ëÿõm·¿óÒßÿÿ 6ÞÿÏKü{ü+Ǜ⟈TE˜ÿ¶GüjH>)ëŒq/ÙÒ#þ4ë»o祿þ=þm½ÿž–ÿø÷øWœ[øÿTž=Ûàÿ¾)'øªÄ¤‰-Éôòÿúôèï܈ÈílÊÃH$ùUk=)týßbµÓ­·ýï&›¾¸ç6¿|Crø)l=|¯þ½h7ut,ðnôРm½ÿž–ÿø÷øQ¶÷þz[ÿãßá^u™:´ÿ®t÷ñž­W‡þýÐ{¶÷þz[ÿãßáFÛßùéoÿ…ymïÄíFÐqÛˬGøÃâ-ß»ŽËñÿ:öÝ·¿óÒßÿÿ 6ÞÿÏKü{ü+ÄGÅ?ë‰ÿâªÌ_|Häe,†}"?üU{.Ûßùéoÿ…o祿þ=þå)ñ#Ä, ?dÿ¿Güj9>&øZûdÆ€=kmïüô·ÿǿ·¿óÒßÿÿ òx¾&kÌß?ÙöˆÿiÛøëUº!±+ëÏëS9rÅÉô*œæ ºèw:˜ºþϘJb)·øsZÚoü{¯Ò²e•çðäRÈw<#1Æ2H­m7þ=×éUuqIr»2íQL’)þá® Å_êž»Ùþá® Å_Ꞁ6íÛþ%V«»­”§ºò½³ïèzõÁòy¾ú“Ú½bÝ¿âUj»ºÙJq»¯+Û>þ‡¯Qœ(¹R¸úÒCdË/!GSR»àóÅR·bϜ՗ÉR)ˆ¯s1Û´u4ÛXŠ®{Ô«n0Y¹4ÙŽÀhXÏP9©’¤ž*(c`„ûSØ14@å²§­9'­2$IêI§¯ÌÙÏ äZ§(ˆ«ò•PGz¦È7b¼â€È€¬2jøy76úBÇŽµ±ÆLСÚ@íVà+Ç^Ù~\œg¤±íƒÔ4’/–yíÚ© zqVãù¢ Ò©OÜÍgßK´•­Kj›àÁïT/݄ʧ­lØÇû€q@—VˆAÏZüìŽñ÷O#Ñß1ŠA…ïÖ²uQæZ’GNx  :z ‰ZVŠÙgùvŽ•™¢¯ÈÜu8Åk´'±@‚q×5Ÿu7–XÅ\‘„)“Ú°ïo–ï@ØŽž2k׿¯jòyß.RÎ"„`}èªÓ"Uƒ=XŽnZé¿&æϨ¬ýܲo~×A,ê! „P)jŠŠrÁÇéLŠvY6¿CW¾] ŠÌœì¹õ£¥¿Í´þU•¨¸I”w«zS™%êrô©#Ôq‚g§­J¤u(X`þµ9TŽýzÐ0Ã=MLvã¹ TàsÖ¤2:úu¥Ø>ñ"Œq‚~”üä{u¨Xa¸t©Ëm]ǵ]¤ðy …ßË‘ô¨e´;~R=*Êʃ9éC¶Tcïï@RÎLå[4²NÑ|¬æ®ÆÄ’*½ìlø _ZcMòx¢9X|Ýê£ÛIá¿Z|r0àŒ»» @5 É‚I94×{™…fy’M! p=¨Ô×£“NŽe\㤵µ C±šÐ …ÂtÍTK q“ïD¶è»WÕøãéšY¡Î(Ÿ” ô¦¼8«€ŒãšäF3@¡S[ž;ûæÛûèwcøÏGóüC.×bGLÖ—†jßÛ}ÎqÕϸþèyêÿ?Èë¡ü¾‹óCæh»ÿx!]­Ÿú‘ô®+þf{¿÷‡òÚÙÿ©Jè9 {ßù Ù×aü3Ä™VÝWý£ü©÷¿ò²ÿ®Ãù~®B¼ú7ô¤3 hW'ë@ºÜDZµxᓞEeMnÍ#2äS)›-õ©„ŠÈ¬äóŽàHõ« á”m'ñ  e•w.j)e¸Nêà¡ ÎM2šc–4 vg;©V]¹àw«°A0*B¥›¥R6@ ±ëMŠÊäV›ÄÛP X³ÆO¡4OÊSqU¥‹oAZ¥Ôä=ñUg`Ãs@c\šIWhþUb!†óå8#Ú€,ÛÃ"¯\ d ›‚3Îi†îHR?KIÖ9Iœ@Û@FI¤ [iâ•0¤Ó“ä›4^òÜ"îÏZt*$ˆ)4ýJQ¾Õ„„Œþ< -4ß§Õ¸‰0XqVVÞ5Œý(N,€Œñ\ž¶Îá˜d–äWoy€ø ÍsúÕºˆ1e <>Í-¸‘ÁÉ®Œcebép{5Žjô³œ§4jº³„(î+&ÝÄNçŸZv­o-áQÉ«š}“A§°aÉ ||—dþU¡k0Ëèj¬ñì¸5˜£74~ô…“r¨*zÖ=ÎØ¤\p§šÖ„±üÖ¤¬g!AÀ  iÔRx5«öXÞ"ë€G5ÆÇté ZÜ‹R}›3Áï@Ôå[“IÚ.TŒ°¦GŸ¼z‚ET@»Ec‘×ëYwHO¥hÇ ²œã ž¦¬µ¨› ŒãÚ€)i÷W0§ f¶-Í“t„âŸo¦*€O®"$hp(hþEÊ®=1S¥rÕŸ5ÜP ´œÖ5î¸~ê1ÛŠè來˜–é\¼ŠBLŠÂ¸Ôeœ²†Ý*æ…3>­ÉÁÝÿ š«<‹+ u5E¶1jp7o›ÿA5•áKÑ›áUùžÝÿ2µ¿ý{Gÿ ŠÙÓãÝ~•ÿ2µ¿ý{Gÿ ŠÙÓãÝ~•TþE_ú²íQVfE?Ü5Áx«ýS×{?Ü5Áx«ýSÐÝ»ĪÕwu²”ãw^W¶}ý^£8>Mvw6¯Y·oø•Z®î¶RœnëÊöÏ¿¡ëÔgÉq¹·~tØ–‡æ8*ÙÉâ¨Âå'ÛØÖ–ÒSLCp1ÜU_sÒ´œ*¼Ñè(hdFŒ`ô òªTŒnÜž*9]îÚ€,›µ yâ¬ZJ²dƒÅV6 BsŒâ£±-Æ<f€5ZÜd³r}*µâ…·<œ{Õ©$>Y=ê)›€2´Õù·qô­ èAÀöªðĨ‡Ó4ùfUP?”w0ç§Z’IAæªIàu'š&‚s@<­$¸?Z¿g§´Šé±B‰*åA5«Â"Ž™ ¤K (–NM2W/ íH‹ô4d-†'š“Ê$f¦H™Ü+B;UäãŠËKvÛ“ÓëP? Ž«Vâ@ˆTȬã 2(ö±ä®涘 c ªvð$qgÖ¬¼ƒÉ!IÍWiÖ$'uP g”°ôäVøô«ÑŒ cž•Z49uYSŽLP¾üc1%9 (SÐc€iÅGÍœPgÆì`⣓¦)X4šs´Ö€)íŒÖ—†NÏí›oïàÝã#Ô?Àô5vp@«~m­¨Øýü;±ÿ-¸þèyêÿ?Èë¡ü¾‹óC?æg»ÿx!]­Ÿú‘ô®+þf{¯÷‡òÚÙÿ©Jè9 {ßù Ù×aüß[øô¢÷þCv_õØ#OÕ—t–ÿFþ”†g¨Ú ÔG‚H»U‡<}*¹l£ ☊NÀz¦÷g­Z”sYwnZ`; ’(ÚæM瑚ÓHBà T6±ì‡#<ñV“s@D9çµNš…~QR‚G£Š~ã÷}y5]Ž‘ߊ°GSžµZ”äPlÄŽ‡ŽµU¾RzÕÝħ¦j„6qžhº‚XvŠpRüN $1Šs Žô—s‚àcžÕ$H¤ŒzÔs'qVdqÓ½C4Y\*¬ UŽGµ]–l)»U=èµÀù+\)bO>õ­w'ËŒà×?w/-Œæ€3d^g®kVÕ¶qY5š½ #ô­p²aÜŠà’ëä–ë]ˆ˜Úï­U–ÂdÜÍR´…Rì0ëíWoâÌC½Y†ÑcpBæ@*®(”½€yYÇ"¨ÂÞS.:µµv¹€’+"87) ûPå„\°¢ïNÈÂu5NÝä‚\H«¿oW˜p(¶qËm2ƒŸé[0°‘‰õªwÇååÝKlì¿J—Tb žh±BЬ€ôëUõY³oÓŒRiù‘ùdàém$TdúV’È3ÈÍs¡šÕ5VÒVI•_8ô5Úß$nï‘È®bîfÊ® ’Î(æ¶ Ôm¦),2k/JÔÍ´žSƒ´ž¦º5Ôí•w;)úÐpilß;aV®ù0Û¦@²µÙÄ›Tôì+˜¿ñT³åbbu—š”0ñ½zgÏÞëÇiµÏ©çù™‰õÍe¹  y<ç%Ž=ê Üî”rì Ø5 `•úQ ›Ø jè•9ÍB±†êè´{„–òŸäkœtmüƒZÚ2ê°þ×þ‚k*ÿ—£7Âÿ«ó=ÏþekúöÿA³¦ÿǺý+þekúöÿA³¦ÿǺý*©ü(Š¿õeÚ(¢¬ÌЏk‚ñWú§®ö¸k‚ñWú§  »vÿ‰Uªîëe)Æî¼¯lûú½Fp|©¶¨~ê¶íÿ«UÝÖÊSÝy^Ù÷ô=zŒàø³ÞøcÒ’.^.ÏÞ%[ŠC,*sÚª3¬¶Äö¨mn iƒÒ˜@øpsQMp"'¸@¹ÉÏj¡pÞtêwesÒ€,HÂuSн¶¹ª6êòI¤ÒµÔýÐ:¼æª}˜¤Û³ZÙAŠˆ‚ßË4á´ŠV%cqÁõíDÈæ3ë@yŸ!ÇåP2<‹Žù©à$næ´â¶PÇ8  Ø,™±qWű võx«‚ ƒ°Á©UÑxÇ'­cd•³É©#gîãð«odcŠ­#˜Ò€?½çšÐ·LäžÝj¤(^Q޵§°GÆ{ÐLŠ$^OJ‘' ¹G"©K‡ŸŽƒ­"n`Yþy8äT«8ÏÝÏZO”7Z'¯Jš06ŠÅÖ Ü1É5™ †Õ°NljOºp£¨¬ÛÈC!'¯ozÑ‚u’ ÄóTï óŠÊ¶¿ky¶¾qž•>¡9ò÷/B(i˜G±;ÒÇ– ¿áMÒâ3á˜t­9à¥s·Jd“<Ò2í‹gsÖ¬¼[d$‘Н8(¤ž¸  [°L›œfµtГYî¸V= ®–‘cŽ(ãªÎ,V‘ÆsŽÕ@JP“ºžš¢í%Î1ë@o"[ÄXà3\Ö£¬4òâû¾Ýê;ýFK̤ÙÞ™§Ú!pÎAÁâ€&ÓtÓ!J=+¢Š]ˆQà gÚ£µ ‘‚>•qp†Ðö  3H<°Àà÷­-*ãzàœœVF¤6©`qƒùÓôyNãŠëÕÿv1Öœ ùy959òÆÈ©7~}¨X¼ŽsJ„†çò¦ä°÷éNUÁºšxmØ9Ï׊„üÌ:S“sMœ`ãšp‰ñ»¨©ÑB©àf’0IëÇjqÀÇ4°=þ•“Ú!Á>´Ø—rƒƒ@Ù²ÿ…T¿6§ŽýkBB?/éM’4–2§¥di)—b{ ÚÚ¨,íVÙ䞘«€üŽ>”jX‚¬F…è1R8Î}è¢LGÎAëžµÆ:Ó™Êcë@ à x¦´2qœ b)3Þ±î—ý/€k{ N1ҫϧùÒ«©äPÖð…·QíJSÓô« °€zŠAÅF±³c.vðEH Žâ¢rKrhI'ô¦•Ü>”¬vç4Ä&Näõâ€åáxc‚1P² U»GÊÃ=*Ï+ùâ€#’E;xšìzbšHi@Å+"…?5gÜ€®QSE2ìTwJ¥)ö¨¡h÷IÀª³Ë°žX¹‘aýMd\\oSèh­Ä®ï€p½fÏ “Ù«êÛŽ[ ¤xÔ.O~”•µöã©§­ï–6?­y[[$uªZ…¸ ²Œ¹ ÂIÕ†*ÊÈ…€ŠäVâXóÅhÛj‰œâ€:uÈ<ÖEåÉ2<šoöŠºŒ2j“>é7õ »•|’;žÕ…‰Ÿø@¦Üáäàu§|±ÇÍÅ>ÚØI; g5«I9XÀë[̽¦ÑéUtØCLò7#4H[Is’:UûB[ƒÖ®<*sŽ• ²aØÐ}Qp¨Fj•Š˜ØÇ5sRpY¨cBT0õ  ÈÜHƒØR`àŒU¡aåõÅL‡¦[Š´—,˜Ï"«LÛ‰dÏzq]Áˆn*8(x @“sW‘sp9ô¨Tf]«ÈjìqZ±j˜Uç½7T”¦*X„¨<˜d'Šä/KrxïÖ¡‘Bžõ4ñ¸'ßš¿ýœ^×w¨â€"Ñ’IñšÛ² 2“RèºxŠG4é0³8‘@WMþÃ'­Q1n¼^:VƒÆd»Þ–ñ'ãÐf©¥­„Ñ›¯Ì\\J¤üÇŠô)&²ØG$W©èÒ$ÍÇÒ€9iÛæl‘H¸,¸V„Ö2¤2žj8!D“÷v-ÇÐÐL%'ÐÕi¢Ü lã5¤ü»œU®¥U‰°{q@Ö¢zùc…<Ö½þm—,xÉ Í¹rj5·+o¦€,¥ÓÈNÜŠ‰—Ηk=©"Œ¤Dç¿'  §Û {#©«:,nû˜Ž1Þ®GdLŒšp™ ŒGÁ>Ôø2·Õ°#$õ¬ëEJ¬Fµ_¸# P6­>ЩžI©4wÚù9Ågêr‰.À§Öµ4È]ôÒA0!FýUmdœƒXi8LŒþ54:‚3„Ü   RNA=1Jß'5\K¸ž*Lœ‚(eî3OU Û Ê’$ùI-Î)êWqôé@ ®•ÇoZz’zœæ¡;Xœu© †y=iÊBNÔŠC=é!²q¸t ¥Vf>”ø¸À#8ëOeb;cüûÔ{¶“ÔÐÂÑ…$ŒØ‘K|£ŸZ‹~Ï”°€HÈíé@ Ò¢½J¸p @ø.TÒ¦VÚ}(ÁWqÇ¥!^@ô4™þ/z–<’Ié@T/z<”ð3L,[#¥A(ù ᣰê?6ßßÀ3»òÐñÔ?Àô1ÊzúÔžm§Q;±ûøwc¬‡Ü>}CÏWøùþG]àÕô_šÿ3=×ûÃù ílÿÔ¥q_ó3ݼ?•v¶êGÒºC÷þCv_õØ#Rjßz÷[úTw¿ò²ÿ®Ãù~®pÐýúRž¨?:V\´¬ ¼S#‚iˆ‚4`Ù8«q”æ ÇrZ7‚p¼Š–F\ã4ÂÁ~´ÇœJ$VTõ*Üí`$PÐÚ3áßÞ‹hüÛœöSVí|‚S¿-¨Û±?ÅÎh® ìJÆ¥Z´‹e·¡êjš¤Ýûfµ#Ú#oNÔSy穱ä}iÌ¿+61LŒä·   ׈K «6‘«E´f¢ºnTMY²$?+@"eã¥#£Ê“[‰n²*îTï§ÄcÀ€9x®^5*ääQo0’è€ßJ·ªiÆß.§ŠÆ°}º‡ã@"&“Öµ-‰òù¬õpI©ùPSŠ¿æ ¬{VÙLçµYûO™ôªÀÇÔP Ú¯ŸŽ:Ö”RfÝS•(/qÈèkNY»m…ƒ§8ª¥<ÉÛœWcLF8"©†Åï<ÐRY¬R©Ï9ªzª"‘Î:Ö¥î|áYZ°;¨ÖŸóB¹=)/á %søT:1/òsÁ­Kø¶íjç¯4¡, ØúWÁpþ€ô¯W ^ÕÌkš*O™p{Я½sÓÛšµ.™<$§NHÛpÅN¿2‚Tª”TP³Jµæ&Ü(ù¨Ý¶É5ªÖ_&åŠÁ†GW£Ö·»”„§­ÞÞ*B>uÏ_¥Wƒ€¥ZÚx=ǽ È cJ€Ã½”ž ñV ã<Šj°Ï^”åŽGëR p?1IêzSL˜)çµ#ãq$ Ð zT[ؾ95:(ÈúPÔãÖ¦VåÅG»jð=éÊÁœ}(p@§68é¾lUyäÚüœ@ÏŒdžjdž[oöÝßÀ3»\ûçø‡Q¿fb±šÛð“oxY°L–àœã«ŸqüÿÐóÕþ$>‘×Cø5}æ…ÿ™žëýáü«µ³ÿR>•Åùî¿ÞÊ»[?õ#é]!{ÿ!»/úì?‘£[m¦þ÷ô¢÷þCv_õØ#M׎>Ïÿþ”†V\¸Ricvi±6à)êϽ1º“žhŽ ‹œ“š{ÏZÝŠqQ»ŽÔ“e‡¬Ê?‹“ך®ò0í@‚ÑéOÜ3ŸÊ›ÍÉéÚ§Rª§½ `MHÎqPùÜœŠ°¤Ð¥~㩪“òۉ㠧Í7˸ Íe^]í„ ß1ô  Œ¢&ûã¯z†æýO5†éu7;Î3Jö“”¶N({¡,ÄîâªÜ͹YsU.bš)03Š©ö³»šÕ±q³ëEÝ„_/Jçíg 1ðkb9ÿtA  Õuºó|µqLR[`ã =*KÈ’tÁ¨¡ÓþQ†ü3@ ²³Û6åéZ02â§¶€&S.Øq@°aŽ1œv®~Zä©þõnê’°WÅfZZ;6à>jémû6Ý£ïT5+TòË(¦Û]˜ ŽLã8çµZ¸‘Zß9Èö  K4bû[×¥kNâ(H˜³íò%.«É2 äw  ôô; #“ZË`EA ~^¨ÚcÌКuÀ*« žÕbS¸ñP}Ñ·½B\I)õ£ná|¹5—$Êy'š¿eºÚhj ¨'±õ­$ËGÞ³­OZ)&¥TÔaó ŽÕÆE•¨sÇÍ]˱–6È®Bù|»ÝÀt  wíM‹×ÛH$9¢Ö&¹;ˆâ·¬­Ö4ÀÐd²1¡féUgq±—­tÅTÒ°n¤acÆhÓ3zçµZ·`'APã2g¹ëRCOc@>1n1Ð £ ¶c5p¾ÛR=«6Ìïº$úÐÛãªÔaaP; µ9ÅÁ®?уx t åº“ŠÓÔÊ£­cèÌ žƒ5¹v€Â­CcI*¾£ÈÛpÉ5¥¦±…A«“f€0b´Žhpéœ×=©h9x†}…vpÂD@ööªw`‡f€<æKY-˜«øö¤çh©æ»kÝ&;¥ ´#µr·Zt¶³0ÁÀ Û¦dmC «Ú@îÇz°Žûƒq@Fa‡j.¼ÂX T ºY>oΤx±Ž>´ÙüÅ$šO³asŽ}ª^QIÅX·xÝ@n˜æ€*$®¸ð)òJ„sɧ\PÛJÍRÍ'^(Á,§ƒŠè<5.ûÈÃ}áŸäk[6Àqk[@Âê°/›§û¦²¯ü)z3|/ñáê¿3ÝæU·ÿ¯hÿô[:oü{¯Ò±¿æU·ÿ¯hÿô[:oü{¯ÒªŸÂˆ«ñ¿V]¢Š*Ìȧû†¸/ªzïgû†¸/ªzÛ·oø•Z®î¶RœnëÊöÏ¿¡ëÔgÇ™ä¹pq^Ãnßñ*µ]Ýl¥8ÝוíŸCרΔ§Èß"ÒCc>Ïå®çÆGjbÞ,nGj{Å,ÍÉ84äÒw»4ÄA6¡,çjƒŒzS!±žvŸÆ¶àÓaA’*䢀2Doâc½Hš\IœŠÖ•É|GJŒ+Iœæ€!ŠÞîV0p qҘѴjG¥Všcžô$Ž\äT†EÁã­g¼Ä¨#=)ñ©qŸé@¾§œb˜e x<Šžy¨0°Ò€&‰T•$u5uˆ ·<Õ`€HÅ,³ Ûƒ“Š«æpyïWbvOZ«k;623ZkQ’q@3qéR¹ê;Õyc- *zw§†%€Á'Ú€,C“À t©$ÝTI#àƒÁ÷ªóÈD8Ï&€(6én ïšÐŒÙ@ëUíÓqêkI™Çq‘ÈéP2É«2ĈÀН|â´›¨Üˆ¡<`Õ8ÉxAõVêèÞ\„ŒÖ‚ÆBú-eM £™­X´ÕÂIÅXTÜH#5JòÄ«_¯¨n‘—pn>•ÆÞA¬S,¶äçÕ!m«žƒ½8§#Ž~´áØÍR{¡‘ósÚª™.]^(m@Û–jgœˆkûI£;%Q›õqÁï@æåwÖ.§~ÊìŠy5·e xÅP‡ý.ïq&€-[Ã…Þüšê|*Ûc¾;¶þúÜgv:¹ã¨þèp0+Ô ßð£*õƒm[~wc«ŸqüÿÐóÕþ$>‘×Cø5}æ€ÿÈÏuþðþUÚÙÿ©JâüŒ÷_ïå]­Ÿú‘ô®ƒÇ½ÿÝ—ývÈÓµ [ƒþ×ô¦ÞÿÈnËþ»äj¿Š'ò!·|÷aü© ‰6ŽTñN.»H±-µhÛ‡8«Ive[šb-;2N{P[ Ã¥V`ì?=AÅšp_’?*R8ã£ÝƒÔ †K¡C0çÖ€'R@BNjí$eò°Fkž’¹¾!FÐmÏaW-#2L\ô©'€BGÞ&¥AäÃŒu  %”EÉô¬À^æéXt¯‹v—ç”qŽ$eTáT |©Ç¥TÏ Hç¥]gëÒ h†ÂOÖ€#Ó¢/7ãZRE²ížµ[M]³.{šÒ½ŒùA‡QÏ><µ±«QÌ6t¬Ëy÷ǃœŽ*ÜRB(àeòÏk•ÖmÆTu5чÌE»VÀóîÔ™  :r…{qZK&ÔÎj¢C±Æ: |® ;—}¿˜ª¬!-¹E_†2×ôªø…Ävƒ±=(¦=ÝñNŒæe>õ§ú“ž¸«Çœ:Ü<À[†ëžôéóöšUV6ËŽx§ÎÙž’ìæô  ÝXäqšßºCœÖ=ƒrWÔÖ­ñ>MXÓšVÁÓ4¦>o=1Kª1Ž:Ð CƒY·ÿë*õ³ƒk>ì8g¹  Šbë‚+"DI.`”œ—*¥k’zæ«Ée&ìtÇ¥Fèѯ=E[ÀqŠ–;rrS§j¥«‘޾•¥o0ˆ|ØÅUšAÎ8¨âˆ)ÉêkV[ˆLXɪB'Ì2>”±Î@+Î+WC„ÿkÁ(éógþù5’±•<Ž+[Bsý«ç‚[ø ¬«ÿ ^Œß üxz¯Ì÷3ÿ"¬õíþ‚+gMÿuúV1ÿ‘VúöÿA³¦ÿǺý*©ü(Š¿õeÚ(¢¬ÌЏk‚ñWú§®ö¸k‚ñWú§  »vÿ‰Uªîëe)Æî¼¯lûú½Fp|Чé\c¾MhÛÜ ˆËƒXÝøŠ6;U­éd±“ž(vÔïã5fXÆßº1Yú;‚XÎkjEMs·«†—šÎ¼€[¨ÆNêß–æ‚G5CP‡ÌžÝ1@ôbZÐcÒ¯–1ŽO^+?IÄ6‡'½K,ÙÉ'è(šn~^OsQ—fRªñ‡y z ¾ê"„`÷  [ÌÅ ©í + Sf3^°SÀⵡŒ¤\š¨ÖêÄ rjÊéêéÇR…²zûÕÍÊç=¹ jëNLXžõµe,pÛ€„gÚ²µ+¡4Šª3Vôø ¨3À  +±y;b«Z™$¸%Tã=j̬È×5cMˆs’( NàÃn×Ò¨XÚ™Á’N„ñZ:¤xøž*•„æÞ#àc 4%ü‰kîÏ$S4YÚBÊsT¯]®¦ùÛš×Òí„1F   7€-»ÇÄnÝxÞí]v³r°Ø·\û×lû®sês@J^‹{uPFXb¡†6»“|„‘U æ`HÈ®‹O´Ùb8 ·ƒËN¿­,ˆ«óTò¸ÿŸÊ«È7«s@¦ŒÉ’§*šÝËm&Ÿ¥il(€÷ªqùÙÀù‡µmiÚ’J:€kGíX=2+ˆ°œÇu´qÍuñ èÚ€.­Üc¯5Vîôʦ(=Íw á!ºÚäWÿÃ::}Û<ÛGÿóûx¥_™ŽE[ÞÛ†:Wqÿþ—Œ}—úèßãH<;¥Ÿ²ÿäFÿóû•!Ý×Ö²d·ùùs]¿‰ôëKl-¢ÙæoÝóœcÔû×+2nV#Š£=Ê´Dg“VtxüÀ[+:òÝ£PÙ5£ ¸BÀž(Õë:( yÏjèü"v[]üØýå¸Îì£ùþ¡æµwdtº_ 6-îÛvÜÉoÎqÕÏGóüCÏWøùþG]àÕô_šägºÿx*ílÿÔ¥qGþF{¯÷‡ò®ÖÏýHúWAÈcÞÿÈnËþ»äk?Ƙû%®¾•h^ÿÈnËþ»äj‡Œ“}­¨ÿlÿ*C89’HþtÎ*[-E‘ðÇð5$à¨Æ8¬›˜ü¶ó¦#´Žð< ®E*Þmê?ÆÑ¦ócÃW®ˆŠ2sš»%òùHçó¬ò¯<»Û'Ú ´C.]»t«Ûö(ÛÖ€ÅÚÐ:Óe® Î:Õw¸ù<´-¸Æy  püû£àÕe¹(¬ž+©Ðqý½lÞÿÐMwã–cͽæ¶®sgÔ ôš(ÈÁÄM3Œ‘ë\¦¥©†¹õ¯¡ëľ!Z<Þ2¾`¼~ïŸûf´ºLËrÝÍm˜¿vFy®sDC@{WHÙØÔÉë1à°àÖ%¼LîGnÕÐêã†McÚñ>ÜZ± ÍÊžjâ]ÿÏOJ`ùYˆw)q E ^\îN”ØD—U¾í]m7篵hXZ${Iôô  :]’@žcŽMY”)“Ž•mJ•4»|ÏÆ«Þp¿…U³ ]ò+fü–·\w¬+2MÑ'Ö¶nŸ|@(¶,€Q«8 $RÙ†j=O(+\ˆ‡=j¥ÁÌÃq«`D8æ©Ý!óAé@buö$Uùî¦iL¯ r3‘U ¹v1ŠÒko12dÏm"9Ö·adwªlèÒ‘@)çÚ©¨Y®ÞZßò¤ÈÝ–v©Ç¥¤€3ÅW’IPà“^…‘Å‚£8¬CCU“ £4ËÁ3–ùóÍjBûS¡¦Í§\|¸\ïU g­]iAçÚ®h fߟïè&±Ô±õ5µáø[ûR ànÿÐMe_øRôfø_ãÃÕ~g»ù`ÿ¯hÿô[:oü{¯Ò±üа×´ú­7þ=×éUOáDUøß«.ÑEfdSýÃ\Š¿Õ=w³ýÃ\Š¿Õ=mÛ·üJ­Ww[)N7uå{gßÐõê3ƒçMr¯E·oø•Z®î¶RœnëÊöÏ¿¡ëÔgÇg¼#¦i!³NKí§ÕYï¥aÉâ¨Ç3ÌySZ²SäÁ4ÄW’æPGÌj´¤¶9É5|XË; -_·ÐÇ àP6SN܃ZÖÚfR˜­´†(m^GµFN["€"[c\ã¯ZlQ(cÇCVH8ëÔTH0HîhèÀ?E+«·Vç>´ÔC¼ŽÕ0·o¼O¿ZP«rpOLUȇSÆqTdËK€zU¨ª’Xãë@oÔt^¦›§Eó’zÑrs(ä÷«Åc'zÐf€šÍžãtÛWµK<ä¨çŒtª°Gç\œŠ…Ä’¸pzUÕÌqÓҞѪ0ã¥G3y¤ é@«-À%{æ´Ü…ŒàqU£·T`W$çlgš¨ÇZ!”«õ#ª=Ê®Ãòö¥. ´ÍZàŠ«\Ë\‰r{f¯ß]ç8x®O\Ô<”*&€0µ‹÷ší°Ä€k§ð¬ÆXç®#O.Ny<×yáh„` ô  í6_.å‡Nk¢F.¦¹]ưIâ· ¹W@ö ¹qç uôªwD=ªÌªLÀÕ[⎴ rˆ ð)Ã-’xV"6œô«+"ïû¢€4m¢|ÃéÅgj·{c(­É÷«_€:V3ƒpüô tä&Flò{×Cn?u“ÍbÛ©ˆã­n@¤ÛçµDßÏ?Z¯¨LUDjy#šœýóŠ£&$¾\óøP¢Ó7ĺâ­Z¸…Ox:$`dp9…4¡îØ);GJ½,… ö­}5”Úê+;È&Äœv§ÚÊéÀhFa’p2*”¶)!$Œ.rpzÓÚE##·½VƒLDûÇ<ô©.%HT`ã©%½XÁÁÅs·ú‹JÄ+dÐíïžÞR‘Ч§ÚîqÅFÈÒL¬ã¿5¹h©#!EÀ€5ôÛUÛÓ§ZÔŽ_.=ê½²˜á${S.¦[ª§§\PÃ…ß5I/0\`g-ýÂÚA¹†Oó¬4ÔÒïtDG#=袬À¤1 ý diw8œ©9­À7J03šçnÀƒPA5ÑÙ^±äž‚±5Øü··Ÿ¥Wµ»e´*I  %• …æ•‚ÆŠY˜ö’kúåÖ©,ðßÛ¥¼»VâÝW?4÷IÏñ `þs^ÓçÕt¶±…ÑgU™™ˆ>V~p0:‘ÇãTWÃfËX±¿°¸¼­ÑN·W2Iº":.âpC=©/?ëúÿ1½¿¯ëúD¶zÅô¾!»±»´ŽÚ­ÄÑüû†â¹8àtéÏ×µR±ñ¥+i·—PZ®©Jc…Sw›A(X“ƒ;ŒŽµª4ÙˆæÔÁ%šÛíÉÝÌOlcÖ²¬|;¨ÄÚmÔöͧi²™!dÝæÉ€B``Äç¨]/ýjÿA>¿×Oó+øêašjÌÿÙkžŠ0ýzV×Ä'¸¹Ò"¶ŠIfc6ØãRÌxBpÒ± ŽhXÇqÅ(2:•#ê 0(ß[þíЃŠÊÒeÙpQ­Ë¦ùÛ¯Jæ$Öïqh¬eYc5¿áC²+ß›oïmÆwcøÈõÏð=)kz­ó]_…\yW¬h2Ûó»\ûçÏ¡èyêÿ?Èë¡ü¾‹óBŸùîÞÊ»K?õ#é\Yÿ‘žçýáü«´³ÿR>•Ðr÷¿ò²ÿ®Ãù¡ã„6öŒ{ÈGéWïä7eÿ]‡ò5‰ñ ¶iÖl;L•!œð@[±ªw°ƒnàŽqVlfk‚9§Okw$S—£\ùn8çšØ»ŸÍ+Ï&¹hå1]°ÞÍkÛNe»ROJèc·òbE^¤TNåWêÄ3©ÎÑXëq·R—ÎíÜPüïÝÏ5Æûi€ü¦´ ¶Ü›ÇJ£©í|ǰ  ß ¿›«Û7³è&·|W©-Ž¿ÛÎKÙD ;HÊSË6OB{‘Yz6‘q¢k–¶×3A$Ž®Øˆ±ÀÁõßò®–m2 õHoå.òCDˆpPn “ŒuഘѕáÍB]SAšÞB9ní]­ÐÄ¡±÷_ƒóeH=zæé´{øšþI.Ròx’âuÞFíà~µ`ÒííµK‹øK£ÜF‰$cÜᱎ¼ã­;OÓ¡Ó£!ga4ï;o á˜äÒŸù üÌÏ =Ãi÷iuu-Ì‘_O›)É 6°ú+œñ5ªKâ –eÉ;ô]¶Ÿ§C§G:BÎÂiÞvÞAÃ1É¥q¾$™S^¹ãôG`1Å"`TóN¸r‹Œö¦=êqœÕ9æiA$ñØP]ûïÏ­g¢ì5[¾põYÎè }hÌ{å$Ö®¶•¶11»­-„iÛ$k¢!Œb€9»y›˜¤'5¯ ±1Žpk6ò—¡”`[Vèv/^E@c8,Ä}h¸Ú«Á9õ5d¡c¯~+>ùÊ;ž(6Œ÷,y85nU&U‰jkX¼›c+}i‘|îò¶8äPá@Mžk&WÞ­×°©æ¼îHÁ$úUHíÜ˺N§Ö€')»-ëQ3äl*vÂä @iY@x<šmËmLˆý*¾¢BÀ84í+©9Åk:w¬=0œg k£gŒ´¼—¨ßÚ†€œôuÜ5 ™!+Ó΀9¹ea LÓ#˜(]ÝiúŒg^IÍg…geç4½öÖ1…SZ–ÈbcÔúV­¼—½oZØÈ¨wt Ût…˜ƒïXzœƒ%é]%ÉòÔ€0®^å¼×bzŠÙ—xÜyÑÚÆ>Èk’¶-öÂL×]Ùb=hÌ1/Ù¹¬Õ™°:w­(›6Ì¥P™Ú€Ã2Šn¡ ÉÈ©Hýè©5 ºãµbÚ/úAö5§qŸ%HV}©i`0k^쨅F;PÌp{þ Ù U»0]Q_Bw© í”íÉÆ*¥ã8ëI"?gÚjÊ»_߀zÐÔeƒ%A¬–³"ãr©À5ÑYG‹p=ª²ª­ÁÜ8ÍRD ÐÖt÷-„÷ö®±¬ãx …çÆêhñJØ\еk©ò ±-ú<ÊsŠÃµA*ÀQ4à9Ív6wñ ¸5%ÜðI2ž q¶Òn9f+õ«RK†]²ç>ô¯ H¸QúV[Z¢€3Qý¢Sü|zd†W䊙4èdÏ88éZ:Lk äh<óøÄO ¯\zÖžr%Õ"SÔîþF²¯ü)z3|/ñáê¿3Ûüа×´ú­7þ=×éXÇþEX?ëÚ?ýVΛÿëôª§ð¢*üoÕ—h¢Š³2)þá® Å_êž»Ùþá® Å_Ꞁ6íÛþ%V«»­”§ºò½³ïèzõÁò§³0ȯ_·oø•Z®î¶RœnëÊöÏ¿¡ëÔgƒ6¿8À¤†Ì›k u«éb™ŒÕå·Ú§Îð8¦"(âX×idlŒ•nHö§Aõªo×ü(/½ëŸJŒDí!ô«Q&欨ݳ@š'Òš!l’:Š·äñÇ¥œš‚(ög ç4²L~<ŠF•~`1š¥3å±ùЄBOz”’ˆpxÅAo’¬Fh}Äã¶h´G̹ç§z¹IÍA៎jݼ8 Ÿ^ô0ƒpËci!M“œqVLƒ ‘U…fbzŠmÄ…Uºf–Ö±ëïUØ™e ŒÖ¤hœf€!l$DŒÝꔲeBœÖ‘@bÆG§ST®‘cP}h 7oΫ\Ï€x­I#öàͼ`¤óÚ€(ßÜùQ>œäשÞ}®èã8­¿jLPÆ3šæcs@mX ù~õw~‡Íb@Îpq•I1Æ»ï ̈¬9ÅiÞÁ´îšŽÆä¤»I­¢vÆzšÊ¼¶{y8phaæR çšÏ»`A,{Õ(¯Šœ9'=3Nšq1P§­I<¦>•]æ&@£#ªiÇZ“M´óÈv(Š2빇¥$XÀ==+LD‰…+øU+ÙbÁP=ºPx ±cZö¬Ìb²ât õvÊE0 s†ÈœFÛÌãŠÓr½V¸„1Ýš¥w,‚R¨Çi¦Ã ùˆ85©mb³ŽG5¢Ö*–äªäZžÒ5’ÍSª«ÄmØçîÕÍ5† šµq•8ü¨¥@äÁèiÍ·ž=*;»7Œ=xâ©–˜ &€ ÔÝ£†k"Þn&T’kv->[É¿zN­iýšÞÇnP5Æö[@[ˆ©´¸rCJ±ªIæÅÇCÒ§ÒãU€m8  sN#·8㳬e˳uÕûè¿Ñ›œtÅsV÷mk!Sœnâ€5µ»µZ¼7lW)Ÿ-´†yX’jÝ›X ¤lÏáYm;ÜÀ?J—O$Ý(Ív6ÑíbI+Ól ²Êü[fs'­aø…؆ãòªBël²ïNÕî7¶Lö§Á1ûÖäv'µzâxÿJ|b Î}Qøª}ÇŽ´Ëd ö÷„D_þ*¼÷O‡Î‰NOóZ²[,Ö¥ v4ÖÃã½.uܰÝî‹ÿÅTéâûeX¡¶½šVû±Çf=ø×™­´ðÈcŒqšÙÒ}>ñ/‡œ‚îÆT¯õ ‹SÖuý#P¹°Ô--­|õw¸·*¼xP1žr+4Ãq©^ÜÞZ[\K ’± ±Žø8ïÍZh®|Gyogwpù™[ËoÊOAŒô§‹»d±³ŸÇ+eÌ`<ÁÏ-sÚŠIk#¬¨Ñ¸êޏ#ð5Æêw/$¸ðx®Z¼yç‘ä9v%›dšåæVyƒŽ€Ð‹k™aÚ¯‘Þ½;Á¯þ…rÛ±—¶çv:·Ô?Àô<,6Ésl ›Ýx4¬n¶keÎì=GóçÐô<õ‰ŸäuÐþ _Eù¢Sÿ#=ÏûÃùWigþ¤}+‹?ò3Üÿ¼?•v–êGÒºC÷þCv_õØ#X_óý™eï9ÿÐMnÞÿÈnËþ»äkÇñll”ÏbJC9= nˆ“VïRÌ…9=ê+dÑm“Tµ‚®iˆÄŠ3-ëZÖ‹²ä‚:VM£Ÿ´7\浬¤ó/pÔ§ãà’MgÛ¼`æ·mág¦zU[í<³ù‘.z&)ËqéV5¯^Åm5Ü·V»"* ’}‡ËÖ¨[iÒIƒ+qéZ­ðåË;1Ë3“ëÉ  zv¡yâ wí‘EAYŠí'àr~oj½«kZŽ”U$û».ì*¹ÀüqþEA«ÙÚé÷†ÞÖ m[ ÇwÌx9'û¢¹]NQgœûP÷ßµ[vÄVöGýäþ*¢OˆÚëEæK=£þ.¹9ÔÏ6÷­:%1ùoŽ8ÅtÐ|AÔ¥\˜,óìÿÅV]ýìúì·“„W“8Éö¬»=á2®:-@Û*àŠ•“÷ªÓ\ˆ8aøÓ彄ŒƒÍg\Möƒµ‘@’n¥ÝŽ3ZúmŽçÎåMÓôÖeRF>µÑÚÙˆÔ™ï@wöí¢AÒ®Ú^G, d+FêÅf‡iäÖ+é­ œ é@O±ç šÕ@F{`Vuµ“³ZÖ(sÏɨã©÷¬i‹Ox¨zgšÓ¸¬E½=jŒEšI›> Ð×oò$+ÁÆ VœU‰x$sŠš3Ü裎i§ zÃ9ÇJK[hÐä€M6ly¬F8íVD}v“š«*Ħ€*œóM…H|‘OÜ“RÆNN1Šš$êÇòªZÁÚ…=+ZÙâ²õS¾ãô  zkã*{ûÖä2*‘ú×>Šb•YFk¤™Œ5O3«±Àü4êxÎEØr9¦”p(X&YüRAi寻†MM,aæ©ÍY—å(Å]²ER1[M H{g“jvªñšuÕà‘ßÚ€+_Þ) €ô‰*DXõ4û©‰ جé'ªç4ëQæ^Œõ-]tÊ#·AÐb¹M-sz¤×I¨Kˆ”g€(d—bãZÝÄ“µF[–¥4hÓî‘•¸÷  ìŸSj@›0 2B>ÓøÔÚƒfÔé@J~ÒsÀÏjÙ¾_ô`GP+&Ìævç½l\dÅŒv ô™‰GZn§(ùqÚŸ§ »ÈÕkðXäó@-&W€zÖf¢™œ{Uy.^ÙFÓŠ‚mMX§˜:ž´±ktðÆ¡³Œu¨]׿<ž*Å»[ÜÛ®×*ÈÖFqÒ€:+ddë’EszŒ¦ea×Ú¯Øjl±ì`{ÔWò#È$\P!ÒA È9Ö<ðM§zÍvVŽ>e#4˘#‘C2ޏäP? °™@eíÖ«\ÙµÙÛ·üJ­Ww[)N7uå{gßÐõê3ƒÆÂ8$úÒCe ˜‹8éQùÀÀ§2.À: ¡$™$Æ)ˆ’â`W sôªÝW­1‰C–ª÷‰ ‚O4£æ¬QޝÃ\LvôúV<×u.Õo–¶,"Ùœâ€.Æ0qÅU¸—*ÀjYä(¸P•‘s@ E‚rMG!²A¿&vã“À¨dtärhXYBäp3Oc×iëT£”g¡õ«p:ÊØäÐÇóç5`ª£9íAUàb¢ˆ’Ã<ŽÔs'žµFrÉ!ÉÎ}*ÒÈy•^D2Î28ö €€÷«êø‹5H+nò‹ ±¸yc‘éÖ³5×$Å9¦‘PÏOZƺ¸ )\ÐÏÕjÂÕîÕ–nÕ§q0X·ZáõëÝ唃À  kËŸ´\ 4Ñ&ÔÀûßJ„°“Ô±ï–$Ð]Èn¦»Ì^VS1Þ¸yHÜk¤ð¥ëEz‹øs@—ÌÊ=êÅí¡1ŽzÕ8¦jÖó7('Ò€9½2D pFj„e |ئ»yÕX6áÆ0kîÁ&FÀäÐ,÷&i’5Î u:\"+e'Ó¥r+ C~ªÀ䵨Á X—o¥>fœŠÉ»£ØUéœþ>µVt$c™ ‹·'¯Z·dAÊöÍe«€ÅGjѱa»Îhóœu4ôMãži¤)eÉ*.  V F@¢@1gô¬¨œ =kF&Þ¸èŒyW…Nq[Yy¬‹ˆ|¹„§8Ñ‚]Ñ®Óòš ÙÏJìhàzÔáÏsÞ’YÒ€+H«n»€‘pZæààü¾Ôûˇ’Až3Wmí|¸w0ç‹p ÆÊJ»£ÿ«Çq֢إ^ÂV·¸Á8ó@—#|Dó\å݉uÜEt²äär¾k=€~lóÞ€0#Ò¥’2Ø­-;GÛóH:~µyÛÆ3éS­Ìqä–PID˜¬Ë‰Àn‚Ÿyæ) x®~òìç`9'­;ìæû„nsZpéûí `ЇíWÊ–FãŽjì ì?*JfŒ,pEtp.åÁ#«”ÔKk¥™ç£k«)ŒsÈë@íV,zÒF 8ôÍfh‚™Ï_z`Ô'iç¥o¥ãØÜ,ñm(l3Œ‚?­fj‡#¾]سRk5¯Y³¹º£w.ôå²(•ýÎrÄäž”ÛFCd“QEj÷W‘×Cø5}æ‰üŒ÷?Qü«´³ÿR>•ÅŸùî~£ùWigþ¤}+ ä1ïä7eÿ]‡ò5SÅŠ löf? «w¿ò²ÿ®ÃùÏñ¤â ;g=݇éHgu*§~kòQ,Š:ç­:òè·ÌN=*µ’½ÅÀ8ê{Ó~ÚÀ!`sëRËnmæ.1Z7 A`8¦J¦{n0p(RÑÖXÔƒÚ¯lR:×c¨Ifæ9åÏSZë«)È  RaÈ©7ª¦ ¬C¨g$Q=ó¶ cJÓ¸¼³“–bKÔŸS\¾¡yæ3ð*ÔÓ‰®zVKÀ×PHÏjm”ç*qWÁ9.£¿j¶šx‚ J㊱cl$²è; >Ñû¹(¼Ó!+¸ c­E7ú Ù=ªWïÛœPRØ $A"µí4HÐeºúb®ZYy`95¦ˆG6ŠŠ>_–¦ÙÁ4XÚzL—‚?n[îæ›ä©3O Î2¡‰õ ÙB/ ¨e'>•r\ãý+6îR€ž¤J£|åˆA’ I2yaq‚G˜k‰ËÉÈÒÞL²\…QÂöÍKgÈ7óT¦eÃoz´÷$ÃåD>lTÙ7˜O½Þ€-Hã'5M‡˜s“ÍYŸo#¦*V’OIÓXzô©á7µG(Üãh©bt  ‹„=úÖ4¿½½jÎ|»wbOJʇ$îühfˆù ޽éaŸldÈàU„Q'Êj„èÖòîÇu°ì(š}¶í€xô¨m§GM6â}±:c4Mdß(nzÔï(ó@&«+,k¹°3ÍVkÄsÇ­nyÇb…<Õy]qޤuªë6SŠt0I(fìh”ÊJ¿÷}j¥ˆŒÜ2àUí]ÖÚ×#ŠÄÑ.®¥,qÁÅhÚ’ºÇunjLHíXVŠõNsÎMijÁAà §s&-ˆ¦Y+÷™"£¹9‹=©†eXv÷  Ë[4Ýy­AÇÙÈö®gGm÷x žk¥¾Qö|wÅbéÉ›®}kvà(B=cic7dg¡­›¼?J‚Ê@ Œã5ëÁsEš–v šmðÀÍQ¾¶Þªë\Σm$#g¥vG ¨:Ö~±l$eùy KžhŠüíÚºËk›{ »Û‘Ç5mb©o½”täb²î®;¢±¿vi G…#8Ȫ­jUsÖ°­ubUÜŒqÖ¶#Ô”¡ƒ@‰L2§­+^.1ŠŠ{›«ÒY"¡u4¡ev¢Ø.à R»D’\ž}êŒI#÷©š …äç€6ì-àò: Ñx!6H¬eÔžÙ6ЍׯéÊ3r{PÞb:2ÅZÓmÄx“¹ÍP‚Ñ¢|“krÝDqßµe_øRôfø_ãÃÕ~g¤ù ÿ¯dÿÐEmi¿ñî¿JÅ?ò*Aÿ^Éÿ ŠÚÓãÝ~•TþE_ú²íQVfE?Ü5Áx«ýS×{?Ü5Áx«ýSÐÝ»ĪÕwu²”ãw^W¶}ý^£8ö}…†qÍGœJy&¡—&7à{Ñ+NQY—·&Ød’Egù„ÝàtÍkØ’z×;f^K¢{g­oÛîSïšÕÜ*E'9ªäcšž'ÎN&Rx­xzÚ²NFÒµm˜Á4·Qùûâ«YÊFèûŽ•y›'o¶k(þâìí'“@Ó{ÔWÓyQ7®1ÅMg$ð>•Ÿ©6çUò lâ2J‡¯;„¶bjµ¬B8PÔ~Tjm¶äýê«ašG'š‚úÀÄåÕxëW´…áhÍÊ›O"€0¬îK.FãµO,Løª÷ö N‚ª&¡4XÜ2=h[‹wF'‘Už6#“VMüNóóvç¥W{Ä–AÓoÓ­gÍæQçÖ‹ §œoϾkfd˜â8øõ­Ë==-ñ‘ŸZ­ogöH95†‹Ù äÒº}NDŠ «ÔŽkÎÄÊåÀë@í-’þÔù…I¬{ÍHŠ}ÓèkZ2l®B’BØhÖXppsÞ€8¸‘ƒ îBÕØÄ@rùâ¶.´a"åx‰6™4o€¦€ ¸•TqUA–ä„I­8tye ²’+zÃIKp Q»WIÓ–÷H£qö§ê‘aã²" “­Ü'•±ya@ ÌpÚŽrqŽ+wÂoû‹ÆÎÜËoüXê玣ùóèzÊGžo-›µw^Äq^€Ø[qØþ2=GóüCÏWøùþG]àÕô_šÿÈÍsõÊ»K?õ#é\Yÿ‘šçê+´³ÿR>•Ðr÷¿ò²ÿ®ÃùÇñø'N´Ú2|ÓÇá[¿ò²ÿ®ÃùÏñš³ZÚ>aþT†y™²’gË¥tZn”#Œ6ß›jËK/†“: V¾Å†< ñíLG1¬ä"®yéN°b¬ˆÃå÷©'ŒÝÝmì YšËÉ‹v9€RÒ#¸]ñ€b¹ç´’ÞLp+¯Ó§Fõù¬bœäý(”Ib ÒK4xÊæµ.ô@ )œÔè’Èy\zÄ_6Y0 òkIÒÚ/ÞL¹¥i¤$• (Æ0(…Úî¶l&8¬ëÅ‚ ÷³Ò´u¥ŽU ’0+”In°ààš›R•îvÞ+CHˆyG‘QßÌrjî•Ȉë@ЯÊ:Sœ§Šd-•ÍHíõÇJX•‚çøM2TÈ=EHŸwƒPLXçž(Ø!88¢?R9¦¬€“ð£xó“õ ÌÅy=ëSÝí­+—sX²1¸¹<@la³.Àç˜ìe•œüV•üž]ºÆ?*¤Š¢D¥Z·ƒÉ\°ëÍXÈ<ô¥pV<ŽM,Q–S‘š«*‚z†c¶,b­Î 0^˜ôª·Ê\¨5H‹‡f˜b5.6(4¡.È‚Ž¦«Â»aïPÝ9šçjœÒ®"%µId÷§\[,°¶@Å:<þ”“ò0[Ú€0ši&Tœwª··ª¤y­ÄNz×5ÍyfyÙAÏ¡ ÜÝI1ÀÎ*{9¥çUÛM)r7üÄv­Ë{UBøP6Ö?*îíÖ´|´‚ëÚ¬ÃÌ285[SusÐPâk¼·–¸ÍciìT³giéNÖçY.XƒÐÕK,çss@.”ß¿Ü{U»·Ý)À5Ÿ¥I¹ÉÇJµ<»¤8Jæ}¬_JdóAç‘Ö«Ýɾç`§ÚFâB89 ƒÃp;qç&ºMPˆ u¬Í˜è+KWoÜ~”“¦.n›ëZ7…£'­RÑ¢&áŽzµ¡~¹Ïá@tó™t¢ú1¸ äÓ¬S÷ÍŠuâm•H$úÐtº(íA2êBç–%ië¶ ! ‚öÌè+™Ô´´JòÆ~jë­p"~9ÅW·E’Rï@kq ͤ¤M»hïI¡2K•c´û׍߸~ÞîØ œb¸MGÃ’YÉò.FsŠuž©ƒ–àÖÜ hÇÍœú×%¼ñLr§”ø'ž9äàsŠï4û•Y‰<ƒ[‚xgx®ÛP1º†f¯%ù¯œžy  ÿì?=ØïÈì)!ÑÚr\tïQÁ¨²U¿ ÔÓj¥“ð lêàtíT,›óã$šÓ<‘YWþ½¾øðõ_™èGþEH?ëÙ?ô[Zoü{¯Ò±[þEH?ëÙ?ô[Zoü{¯ÒªŸÂˆ«ñ¿V]¢Š*Ìȧû†¸/ªzïgû†¸/ªzÛ·oø•Z®î¶RœnëÊöÏ¿¡ëÔgÈ/¯Ÿ%W'Šõûvÿ‰Uªîëe)Æî¼¯lûú½Fp|“ÈEž´ÙŸ‘Ó$žj`ªŠ3×®jâD¾_N*³ÂÓLª â˜†*yÍ…÷­ë(<¥äsïO°Ó$Ü®¨Dê ËÀϧ. n:Õ|ãö ä±§¼Ab$ ñÖ€0yéÎ 8ô  ×u,1CdFOSQœdqQÊ[g€'Ó!ó&f`0+d&3Ígé`¬LO>•¤Gî‰Ï4IÈÞI©L¡!>¤T8ó@ÈéLÿY"¨4vÒ< ÏÞžñ &ã ©b# @ÈQ€ëÒ€(Él „ƒŽ3Y× ‘œUÛ«€ŠGñ£gaÓ½„‚Ó!Fà2kÏ5­H«¸9Îk¨ñª‘ÀÁÏó¯3¿ºk‰I$óï@呤”±'ššÑñ"€qÍUÚœ3Æ ÎhÆ£1–}»²¥ULc½5·ËjDô4vÒ/1€9­«KGŒ†åÍRÒaJû×Y-·“àb€.æ¯<¯JHžKaßéÚTže£¡íWŒJ#®TŠH5l«p{f§‚D2k>âÈà˜²}«5n¦¶˜ƒ»ôÒ^01ñõª›°…ŽqM[¤š ÙíY·e”ÄŸ{4$·{¤eRMUkW˜’ÍÅ]³°,A í­ #XdP=¯—>ÜãŠÑ dsÒ©ÜîŠméVä$0úP±Á]ƬÂNàETŒåW½[ˆ‚À*¼ÁHëSZËóÍD±ñ»ÖšŸ$ùÇ|P¡ÉfÄKïÔÐ3è—óèôhî=}ëbL qïþE8F9&€im„«.(M ñÖœü‘Ò€1ub&ŒóïV´ø±àT:¬@"°\ Õ=€¶Ï¥fëu`9«º|¦XP“Y:µÐšå‚©>•§¥È=èW ç¥3Ë Ç*9§€XŽ8=sRíù¿Æ€5DùBƒŸJGe 8úÑ+ˆ€,BÖ=ÝëNÌ‘çÒ€{¨lŒäúŠ« “] ¾pzÔö¶Îé+b8•>UP#ya%¬ûâØxAˆµºbØ&K|œã«ŸqüÿÐÀÖ¢yNE\ðØ¶¢¶…žÎìËB=GóçÐô<õ‰ŸäuÐþ _Eù¡§þFkŸ¨®ÒÏýHúWßò3\ýEv–êGÒºC÷þCv_õØ#I® v¶gò¥½ÿÝ—ývÈÓõ¿Ñ¿¥!”<°#U+–Ú‘WÁyVâ1°šb1,TÂN:Öþß³6{ ϶ýÝñwÍI¬\²ÀyÍTÒå"ãhã'Šß\ޏ®sK‰¼ñœòk¤PBŒõ ¶‘R.zâå…JŠWTS’1ŠV-üë.îøà¢M%Íé‘¶F2¦ÛiæS¹óÉÏ4µ›ÜI¹òG½G©ék´ycŸQ] [P`öéLx°É ZÞÎW` o¬ ¼-ãAž3L§šŽô§cpÇjb±8íDr2{ö ®xüj¼„õ$j“·Í2e Œ†tÇ­ß’{zTŠP ÎxHqë@/¤Ú¸çb©ÛÂDFSÖŸ!‘ÕdšuÆbµ œ@Op7RKG³ÍA˹/W¢±‘À–\ã°  ‹ …ÎEL–™"ˆ6ôÛ¦Á ©;wµBéÙøíéWd9\šÎ•›wLšl X…>µ5ë…µb4°ŒØíY÷2¼Òy}…6Á ®­m ªv@œf¯H~ZU Ï¥U-ƒR³ñÒ«îù©  mNB°²çæ5FÊ×`ÜMYÕ2÷{š`Œ¬Jõ  ;%ÉÎ{Öä/ËÇ5“gØÔšÚ„áAê1Ò€&•Öòzâ¹^ë;Ú´µK¬(Ü×­Ý•µrNsÐP!){– pMjXÂ>ϸž@éXNwÊ+rÑɇoJÙÒfÆ*P7»Ï4ë Ó‘ÍKeJç¥]פ:ÖæŸ§ï”¶ß” Ï·‹ÍÔéÍtö8†2Á  * ²”qSk÷ºXË“MÖ²S§j§¡¦]Ž;ÕÍ@`gÍqlb“Y“ é@ Ói ÀÇz¿=°‘wÒ³´ÉBÆIïZ¦SöWb(~Ù˜Ô,áÏÔÔSKî9éLˆ6Å΀4í܈œãÚ£²ßß4¶ò³·^ ¹8ëšéU¶^¹ªZ”1Ë:¦ÑS@í¸ª—s—» P¾Ðâ~BŽkOùmŸvGý^â3D±+ÆÅp’Ù¬s(+ŸJ†}._õ‰ž+¦»²%ƒ*皪ñH€‚>”n“³ÇcVÃùGSVR€4}“ªâ€4´ÈØa¿:Ò•B”Çz¯aX·b¤•¿Ò#\úñøVUÿ…/Fo…þ<=Wæz+È©ý{'þ‚+kMÿuúV+È©ý{'þ‚+kMÿuúUSøQ~7êË´QEY™ÿp×â¯õO]ìÿp×â¯õO@víÿ«UÝÖÊSÝy^Ù÷ô=zŒàù4¬@-úW¬Û·üJ­Ww[)N7uå{gßÐõê3ƒåqÛ¼äc8Í$6Èf€prkFÊÕU²Wñ©­,„1?Z³€ÄJêDx R7òGJ·6?Ú¨/4H'·Zp晜?¯4.ìóÒ€8`IïM•Ç—Î 2wû w=i’œF>cÈ  éç¨÷3¸4É÷‡ŸÖ§±ŒÍ(±f BW#8«DxúUkxÜsÆ}jY”·ÔÐuÓm”NimÜ),z犊QæÊ@<޵ ‘¼|äàq@Ñî(®M<¸HTŽd¶^xª:Œæ61ƒ@&”Ë;x¢îq‰Ï½61ó‡o»Y~!»Xál7á@f½~M¤þÍ““šµ}7›;æªPNLç mOlA 1Žzç5.Ñi$V\5=¨I$HÜgž´¿áèŽÕnæºÃ›íÖ³´›†,ŸOjèc’}1@l!8<Ö´p†'>ÕDâ+V̉ ò  æ!ƒÖ²®ìüýçŽõ¼c9>˜ªÌª‘dŽ´əͳ2Š—H„\Ü4ÛÖ—WwÕ"q×ÜÐîÁÜ U[·p¢­|¡¾cœôªw.¥À€2.F.Ï S¤|í$ñŠ.ˆ2îÅUÝ‚GlФG$b¯ÁòàYÖÙÚ3éZ0öö  bq‘ŠI€ S¢!”’(˜¿Z»ežÕ&ý ŸQU-œ4}y銰åõï@n‹n#Š¿dy8¡ãÞ…@íŒÕ{IÂHb äP“¦X(ÃÂÒ£‚zÒ³àŽhEn æ þ^?Q&XûSdä =((çTÀLc?AQ¹Æ=3R+f>¼ýh„’Ü‚Nâ£nJíÎjd¯4£gšwR8=;Ñ·•§Ö¥ñÁÉúÐÈL°°ÆF8¬Ušku1€q]3#dƒŽ*ŒÖBG'§Ò€1aµaÎk µ¶X!µ €v«Å‚FNF(WÛ·Z†æå!sõR}E#B©Ë ¡}8<â€âin¤ t«–v>^ õ«6ÖKäŽEZ@÷ÈÔ÷F3Ò¥Îp(à(÷æ” jÞ“ÛÒŸáó²}SæÇúL#;±ÿ-õÏð= s·œS¼<Ø—S;¶ææØë!÷ÏŸCÐóÕþ$>‘×Cø5}æˆÛþFkŸ¨®ÒÏýHúWßò3\}Ev–êGÒºC÷þCv_õØ#OÕ¿Ö[ýúS/ä7eÿ]‡ò5.©2 ú7ô¤386Fhdã®sOLd“ŒVÀ ðqÅ1õý»¤¢TÎES $òaú{×O,+ ÁàZ®¶#…ŠGƒßÖ®¸#>ônXò tª7WêÉ4jiV8ˆ-Ö±gšIÛjçΚÆk¹Fs·=+ZÖÄD›˜s@,ìvüÌ:Ö€#hÀ©23ŒRýÕc‘õ y|“œâšcÜFM.2§æ  ?tæ€áj¼#x?•I"¹=~• !”· é@2aHÅD˜F<Z‘݉ÉàTNÀŒ-.Wå>• Ën'TI^iZ ëøPh”yY'U<ÀYŽ~QW …]‡®{U ¡·(€äš¯y·M)ä~•ZúàÉ1_áª[Ú1èH¬Éí±ç-@4ëv”ù˜zVÄåô㊩§CˆÔ³)`A ÛÊfïLfóf ô¨]Äd.iabvy&€tª?ˆb³_ïñW®Y[Ž¸â¨ª±$c½=œ¤ƒƒŠ£išä“ÍIrÇ_Ó­Œp†#“@îÃ*¶8ïVD«$`©íK©'ú3zö¬+y¥‚L1;s@L7cëQ2æ‹y|îsгnPK†s7H^ðäsS¤2*ÕÒ¡¾rpi®Þ€~tnUSW Áç’’0 ç¥ffù‰úÐZŒ»'Œθ}~U0`~µÑj—;Aù¸é\v¬áÀÀúæ€3`@Ó Ç=ù­û{m±ŒÿJµɒ9º­?lʉך׆¶ ‘ÐQn ˜1WoŠÅF9Æ*­ªâÑØã  zU·©;ÖåÕ¹†^œU?D>ÔìGCÅojh !±Ò€I;÷|¼ ~´aoQQhì1MjC€´&•-×gkmºéT~5­§.-ùÖ¦Áµã@‘½­²Ê ãóVãÔVK&ç³ík¸cÍÝ;Û«ÐÐóJdpƒMiIÛT'ŒŠÆÒŸt#ŠéuöZ¯| eš/Ùúu¨6¬WcT¶«[àœ7½Er Ü‚~´µýÙoöAÉ °VÀ€6lßrŠÐ‹ïŒÖM›ð6ç¥j#p i!íO“‚ ߟZ±ØÈë@ ‚M²€NGÒµ œã­dJ>Fx­8$  ð}hl(M£YÒGåÜ {µ}˜mu5FèCë@b—,9À=ªrr5—g6[æ?tÖ²Ä*Ž5;²E<œ/¥< þb¢f{t  gò©Ôa8g.>•6æh#çütÔè@^pjœüÝ=qÿ×§yÝÖ€$Þ7ôøäϦ*¨aÈEÎ sš¸œóGñuªò³†š÷‹y'é@f-rÌbÝj &R>™¦Oq-Ã`úTÖ–å¹9 ­lžBóïšÜ´‚8Ç ‚ ŒF‡ÖŸ ÆsÓÖ€% 䯗`Þ8§«‚`zioœb€DÂñëM ‘Á¥y21M^¼÷ s€:Røxì—Sù¶ÿ¤Â3»òÐQüùô=„(ðûb}PîÛ›˜Fwc¬‡Ü?Àô<õ‰ŸäuÐþ _Eù¢6ÿ‘šãê+´³ÿR>•Å·üŒ×Q]¥Ÿú‘ô®ƒÇ½ÿÝ—ývÈÓõv Ðç¸aü©—¿ò²ÿ®Ãù5ÆÚ`?ïJC3üà1|¦{ö¬é¸«"`"sŠb'.8çŸzFœ"“1TšäGËU ï^bQIÅ-åö]‘æ¡·´yß{ðsS[Yù¹Ål$b5 Gml‘ñ…úæ¬HéP–lðêu}ã¨À aWšFÚ±c®h•Æ”¨éŠfïj\ŽôÃvÁõ¥ÎÙÈâ€DTpyä‘Ò¬;¼‘Lb>ðë@]ˆÂÏJRŸ/J”_éÍ2SÉÁàÐ6 ä~ÖlàâžOîT·ZªX3íŠ@CeÈ$Õ(CKrÄô©/&xÐF˜õÍ>ÜZ’ØÝŠ«y(’éa^ƒ®).È(=@Ù}O9••W9'“@,ÑNsŠl²nË>”èãÙj«ê*áp1Ígd´í»<ÕȺqÚ«É0–ùh ѸÅ2Y#yj˜å›nµ:äùV¥qÉ  eÝ5à‰®‚3²08À¬kÏÚˆäúÖÂ.f€+^é€*‰¶V‹rkBåACíTZCåÒ€)«ý–|ŒÑy{µ¿vƨê—KIÀ¬cw#äý(sí;Écœã°¦¼¥€Æy¬Û}î¤å°*lHp4¤Œk1ç¦*[‰w¦ÄGj‚ÖÚGe,8õ5;¸‰› q@¶¶Jþìzu®Bi >Ö=+¤Öî„’IŽÿ¥rŽrN~÷­Y€`“ë]w‡á>da‡SšãP × xr#åÄ̽¨KT!`T5 ²n´aØÒêïóÖ‹93 \s@4Yà æ®jŽV ”Í1@ozv¬WËÞ€HPc5[Y,Ó(ÏwI\Ûät&¡¾ˆÉt(튱.zb¹ÍAÀÔ Ç~õÕFDøq\†¢CêGžé@%ÿr¼Ön«iæÛ4ˆ â¬Îà@0qŠ´‰æi¤uÈ >ÊY-gÜë]:ŸÛPÄ{tæ«¥Š¢ÈÅzVTrˆ¦&6èy ª+2Ð/8oj§?˜µ†qÞ®iS¼Ñ€àù«ÒÚG 9Ðg"É;â¨]ÇåÜdtõ¥xfµ”?/z†âQ!>=hMÆló»µGióE׊jóh@=©–=ÔúÐÉR#Ž´ûVÄ\猢EÆ:A•ù  š„ß.Ú§b¦I÷uû€ìOAOÓFSpãÚ€.ÌþZ“YìN«÷oäjýÜ„&MeØúªž gùÊ¿ð¥èÍð¿Ç‡ªüÏaoù ÿ¯dÿÐEmi¿ñî¿JÅoùàÿ¯dÿÐEmißñî¿Jª "¯ÆýYvŠ(«3"Ÿîà¼Uþ©ë½Ÿîà¼Uþ©ènÝ¿âUj»ºÙJq»¯+Û>þ‡¯QœjC¸7S]-»ĪÕwu²”ãw^W¶}ý^£8<›Ê@ÛÎzRCbðzTYlM<°ïŽ•ý¿Zb#8¥ >ñ¨ €¶jþ£´CÍ&£~îÔå³U`!cœÖz#<ÅÜžMkÛF \tþt! <æ›7Þ žµ-æ˜ÅV™€UsO„¼¾aç³!"³tÔo(°´KRJ‚R|€ÜTЄ±×¥hÈÔGÛ5ЄP¸ÿëP%„Џ?2b`iÙFâQ‹I.îÔ >nX’+F>ƒ8¤·‡b#éXšö¦?)N ëÍr'Õ7†P~‚¸ÆbNyÍ_Õ®þÓvprT(¼žÆ—ó¥ëJAÇzUéš`ó’)›H8ô«VV-µ­ür€¬ÀM¼p£#Iî.Ç,:Vy2Ü嘴ª­r~ím}”E@:zPT¶Ë¹´¶ìr}èÓ8=–3ò‚:Ô$ #=©èêˆwsžhËo T¾m²jGvßôˆFwc¬‡Ü?Àô5–lÌ@göMHîÛ›ˆFwc¬‡Ü?Àô<õ‰ŸäuÐþ _Eù¡ÿ#5ÇÔWigþ¤}+‹où®>¢»K?õ#é]!{ÿ!»/úì?‘¦ëøÄéóJuïü†ì¿ë°þF›¯0_³“Œ|Ý C1¤ ÀÅG$êˆ2y^êùyUäûUXã’|ž´Ä9Œ—3е²Å‡zš8ÒdÓ$G˜ã(Ì2+ŒUÅuü*„0íZ˜nQì(f•FqÚ£YT‚*ÜãµFÄu€,™A fœ_© bâ­y˜<úPÒAÓËëMóÂòŽj´o `Š— px71òiwÍ#)Ïã@¤<÷¨†G8ÅOÝ,{Õ[‡ÆHÍI•À”5²ùÏçTõ7ÝS8«w; Tìâ23ÌüûšHÝbœëWZP[ ÓµeÝ’‡<æ®Á tŽ,¤â±ï&òQ‰â¶OÎ@ç…­Á#¯  ^æðÍ)ç§zÒÐI-É5F.wFk¥³´àb€&¶²O/G5zÀä*kx•HœT“: Èë@¯eaTv¬Nï˶'8,:ÖÝÈi 7é\ž¿|•éŠÂ¹‘$”ïrj„Ê ’:{S\œn'­G¸ì&€,Úîˆzæ½;EVryž’¾eÔïW­iQ×›« U;I ’OJµ­gÇJŽ‘cïÖ€7t×8‹Öócõ"§»§z’î ¤ŽŽhÆ•…¶Ç šŽVÝ| õèj[l$#ŽÕJ&óu:í4©#~äñŒ ãn¶ Ol×etvÛ±Çjã‹nº'Þ€'¸QårqŠÝ±‰³qžÕÎÜ2¸'“]EŒ"+¼NWÖ€2íb´±‘Á®gSÒ層E%OZítØšì=jÆ¡j“ÂèÊ:q@{e«4s·šéìu´‘@b=ÍpÚÕ”¶W.%sš¥ü±ŒŠõñ$7I€Ã•¨iaNäl÷ÍiÌ¢UF$ƒÞº“vÉÉ÷  Õ–{a‚2¢§²¸ó%`8ÍZTŽHET’Õí›Ì‘׌ÐÔ(S©95$ Æ¥ˆíTmoÄ¥°¬ßN {Gã@W¯æ6Ñ÷ªí”{T{ ¨°™¦ó;V„8ŽØŠ£y&X©è**2nŒ¹¨®¤%Û5MP沯ü)z3|/ñáê¿3ÔÛþE8?ëÙ?ô[Zwü{¯Ò±[þE8ëÙ?ô[Zwü{¯ÒªŸÂˆ«ñ¿V]¢Š*Ìȧû†¸/ªzïgû†¸/ªzÛ·oø•Z®î¶RœnëÊöÏ¿¡ëÔgŠ$±ÆOJímÛþ%V«»­”§ºò½³ïèzõÁâãÇ9ëI ŠÈJ“ÐTeFOó«ŽêŠrxÅbß^­³)ˆ†úóa*„äÕE×ÌsÍF±´¤ÎsÖ¦™pQuë@F É´zVݼf(b* ;P£yúâ´$Aå7  i\´§ž*&äP;œRÊwÈNZ±gk”È  ‹eòm€#µ à)•M)Ú€Þ¨œ´…yÎxæ€-FúŠ­ypÙ8­Ûu®k.î?-‰ü¨‹ÈÓÈ µop¸áz© •]éÒsÐsNY b£HúSLN?*$}iQSŸÖ˜döõ©Ä¨ƒ¨ ‰àqÛ4Ö|7½1Ü+çQ@r\ƧïéL7±ã¦jìùÝ!ëÎjȵ‹fBÐ>Ú¡U;‹œ¶ÞýêÌè¡@ LŠ 1(y•!ëÉJk«œœm^ôýL€QóÒ¬À‹ok¸õÆMV¿”)XÔqÒ¦ÀŠÏž¤qQÛÂ.&2È8íž•¡rtâ€*Y.ûÝÀp mM˜*–Ÿn#»õ©®\mÇZÍǘFsQª'Àõ’ ,ÄvéN„•ùyÅ&3žµeCgÞ¡Œå˜äTZ„þM¡3@ï3Ý]žrl»möÚ±t”Þ °®‚6 ¹4‘¨/îsŽ”š]Îå(Ç¿J·rÆÐ8¬VW´¹Èàg4Òªí«Y™LЬ&¢­lÄžkñÚfÜOë@íÐî&·íT²G'ŠÈµdó¶±³çÆà(e}€óÏ­gÞÝö À¨&»ÜJ¡$çµU»…ŠovÚ¾”CPÔK†þ*äµ+“<ƒн¬Mó„þ5+=y l°nàT'pƒ'¥)bßZY\ù „q@Z{îSµêÚ@8$öç~³ó.ãÁšô‹%Ø$¨â€15SºïN{Ô‘Æb{棽ÿÞûÕ¹HЃ@ÚX³O¾ Ì¢'rzÓ/˜°j²V {U5ãž:Õ‰†}*¦šÛÓ4«zBÛOjâùkÒGL×]«>Ë^:×!7Mž0h…šKÑ0®ÎÝY,¹=«˜²ƒÍ½ßŒŒ×\Ê©ÆC¦3’zÕÉWëY¶¬v¾µl±ÙÖ€9}{O;G5Äͧ˜¦+Œ}{׫¼S‚øÖ³£¬ªÌ‹Èéí@Uƒ´S…=ZêRpcÉ<‘\ø¶h¦ee ŽžõrÖ|¸VíÖ€4ÅôÑ‚?J·©º"²dÔQAë¸7>”M`ÐG»­^‚™D±K$®ÜíYÖ× lHF=*õ–n.{š·j…ât6Ãõ«Ò DÂŽk:ù€ ½è&eÜÁ@­k4ÙÖb¦ùÆ=kQ_F:süe_øRôfø_ãÃÕ~g¦7üŠpÿײè"¶´ïø÷_¥b¿üŠpÿתè"¶´ïø÷_¥U?…Wã~¬»EU™‘O÷ p^*ÿTõÞÏ÷ p^*ÿTô·nßñ*µ]Ýl¥8ÝוíŸCרÎ+:6ww¶íÿ«UÝÖÊSÝy^Ù÷ô=zŒàùÍõÈ`pi!²µî¢ÁÝÏozÌ…ÚR]¹&Ÿ*nnjkUR¹#ŒSä—R1Žõ%º´òþtž^öw­;[uŽ0}¨Ä*B{u¢ðì¶ È©â\Ÿ_JmÌ"@  ÂŽ"]I>æ¯XÿÇÁ>8 D¡±Æ8¥±yë@—#1àVX eÜJ¹qq½Îj²£/óœÐ§¸;1ß•™s)vÛž*ìèJqTe#© AG ŠuõÒAmÀSÙÄ1íã5ÌëW™m¹ŸjÀÖîpŽsËWÊKqëë[××ÎÄôÐË¢Tvól}ºâ°'ñ…®Î¤ÖUÇ‹`Ý”È?Jï$¹SÇçY×— ]„šä£ñ,Sœ±8­Ë}FÊhAY>ôñ(ï˜Ù†ù<Œ±â¹/à[†Áç®jÜz„,6™>´Ò›—¹jð6$bNH÷¬Xu8­Ô*‘õ­ÛfÞHÆdï“@ílJœÖ¤P€¸³¡Ôíü´_άN $úТŸ8È |£óU¾ßa‡8¹®Tš—ƒÈÆ Dƒ,yïL’qÈT^vÁ»=hi$ Á;ÔO>'Š‹ÌœšI¤H×’ÏJÀPÄùSVþ0&¨Ëvdbˆ9úSí­Cä¹&€$û|…‰É#°©ÓL~QŒÔ‹l‹Œ/JœF†ÎhªÚK!ùš¬Å§ P_ž}jÓ`/{Ô˜À:Pq["0 +KÃmµõ#»oúD9Çü´>ãùþ¡¤‡-øUß6Ù5#»nn!ÝŽ²qüÿÐóÕþ$>‘×Cø5}憷üŒ×Q]Ÿú‘ô®1¿äf¸úŠììÿÔ¥t†=ïü†ì¿ë°þF¬Œ´ð/éM½ÿÝ—ývÈÕoÞGe´’6ÐY—?—øRT§»švr ì=k. jÞ@s ©R‡iÆ)ˆ³#)nÝi²²yªfî2AȦ›•n¸  ̇oZªîÅÎ1ÍO!$㊡-ÁÀAÁ  zROZ‰¦–WÊ«bŸ °R rjòÄ0(’G,„nൂƒ“È5)/^*cƒ?¥F¶Q"– ó}J°(ÛÏ”åP9暀¾9àPÅx÷¦<Ê©ÁäRÊv',*šnš@A@¼Ë”UúU‚›mf_¿5ûÆ€* ×W›ÇE«WR’«ïÅ$1 q»Ú \És¸Í]vX-V?â"¨Eùº““Í%Ìû®&¬Y€ïZ±8àÖdÒ1‘ÇnÕzWÁ9j‡š “@“prM[A„Î*«’Îvã5,~`Ž(Â[‡­]>Aȹ$-Ù±Î+žx ÌXò3šÑÒ†Ë@1[^Ym£b²´à<°:ó[fÅ 1º¨_Û,ªr:V}ÀœVv£?—nÒ€P1-ß“)ˆœ˜,³(#¦+ Iç\3žK6k¨··ó#P; Ã’ ]ª[q=jô7.ß18­„ÓÎŽJÕŽÜF½:PU–œ‘9gúóX¾"¸XÕ•N+¥º”E1â¼ÛÄz–B äÐ ÷mÙcÈV|™1\)õªò©Ý½h däŠpùŠ»…­iÉf-㈟½Ö€:  ÚžàW§èÄûšá<<ç$f»Ý1pŒI  k•ÍógŒÔóPzQܨkÇ#Ö’åJÛçž”»¤¦aÎjðosלTší 0|÷€ï@Ü ©žx_K_ô¢sš±pìäœôªÚbþüâ€'Ö˜ÏJäD€Îç×¥uâ‘i\”M5öÂsÎh«Ò!Ù±NI­™Û1ÛŽ+2&û;,dpZÑf@í@lTî~õbW5›6EÇzK¤*Œùâ€.ÂwFyô©d·YÈ<öªš{“±?•i!,:þ4ÆkZ_’Lˆ¼šçx°:žø¯J¿·ÂU€þ‡¯QœŒç®;ÒCcÜü U¨ÛŒ`b¨ÈÜ‚: ½jLŠÎsLDÖ±³K“Ðt­tQÐô^(•qýïj²€äzЈ€^sK#ddu¤VzÓKúP[€#‰ª o• :ší€‹j vÛô  "_2PǧJ‘—3Ú’Ô„\ž½©Ò:‘Ÿ¥%ØØªª*¬%Ž;Õ’ZFºTSH¨§8À  :”¾L Ù<õ®#WÔ8_Y…mk:€ I9Qúןêw‚òä•Î3À ZMÀ“ž{Ôx!zg5;[²D¤ô"¢’6Xà ÐcÖ”ÌюiA*{о“l7‰Á«7’á<·Uk+¼@W~*ÌGíZ„IŽï@‡áŠ®ýXsšêUã%Bð3Ö³m-ÓËÃc…©D›8ãÖ€5#¸ 3Œz çüMt‰lÃ<°À«âFD.GÌO¹½ZÞ[ùÀfÀ 6Ga8Ûœƒž+Z-Zí-ö‚Üm[ø~äPë¹»šµq¥¤?.Áœu 5î/.$ÞKñÖ®Ø\J§nÁ­Èlâ†6 9=8¦Eo¯# Šf?‘t 8×akpޣޙ®FâpàÓ๞Ԓ¤â€:K™Ï¨¸ˆg¯jÇWmV<Ö¼¬±îè(ÐJ0ã­U¸¹PH¦yÞ\²vÅcÍ#OpBŒÐ¯®„ § ëŠç®lÖ`r ðk«ŠÁ (?J©¨Z®Ì…â€8ßìÇgÆãZ–š°å›43,oœœf®Úݰèh'ðÒ3¤Þ§¥9¼ê2[óZ°É4Ç)óm«SÞL~W'Í`ÛøL0Û¹³ëVW±G÷¤ žÙ­Ky\}sNšá›<Ð=÷…ÖAGÊžõ‘†n.$ù "»=ä‡c>E]´¼†ÎØPd>¢€8¹¼!uoæ` íTN¨D þ»Rñîˆ#¯¥U™ÙÀï@±Ñu6Q&ÖÇ®ië¥^í?1ë]uåãF"S¶›’¶ 8ûùé@\ÝÂ̬_µ,Þ›ÉÔǺɑ9=qWím-ôþ]GÍÒ€9•“Spó)§R¿ï3qךéÖd21|ô¡ì­¦|€¸#$P9ˆ®ã$îj·Œî£ Em.‹`Ë‚ÏN*¥ç†­ÌfEQŒPIãF,O5b?}Òq¶±†]÷l$/­TŸÃòC®Os@’øÎ4f¢/G{/Í&¸1¤^·kµ‹~9E#é–š¡À ¤šÓ†öN~uä‹£lÌ\)ÃW¾‹—ìé2:ü¬½J…K+ɬ<[s mrHÏ9­ëoÆ-ŒÐ Àôªd]Ñ-rþ1´˜cx·iâ I”"œûÐÏ–7Þ§ðÓmmDîÛûøwc¬‡Ü?Àô9o©Æñ€Ž9éZ^|%ónÆfƒØêçÜ>}CÏWøùþG]àÕô_š¿äf¸úŠììÿÔ¥qÿ#5ÇÔWggþ¤}+ ä1ïä7eÿ]‡ò5ÊüZ2ÄÃßiíé´×U{ÿ!»/úì?‘¬y`³ópóO…!ž"×·ð.rãă9fâ»kk8Á²çÑàyJí\zŠb1‡Š.–üêuñlª¼¹ãÞ¤¹Ñ-ÀP[Ú³ÿáór Ðáâ©fuÞNßJÛ³ñ5º…~µ……™?†n ÁSh¸‹ÄV¯˜ Õ¶Õí¦Àμ’m6þ3ò†Àô¦Ç6¡hÙÃâ€=¡gCÈjœž>÷5äpø¢þä>E]¶ñÜêG˜‡Zõ8• iûTò®ÏÇÖÇ_—ךÕOZ]'É2äûМ®^_-NA=kFÖÜ"†îk*ÊXäœ*œ÷¶ã}ªG­Vºp»‰'ŠÎ¶Cut\•zTš„Á›Ë\n>õ5º‹klúŒš¥©6ɦ=(…|¸wzbwtXŽ«Wj©OP/3^Mi`D€k>ÉO$¹àš½#æ5É &›v@4ÈâRLÓ~Mädfž˜-9 Œ1eìxÍ<—\ŒúUÈSj’}©©LÝ@—÷e¿t£¯Z}•¾c;»ÔðçÍm$;p08“¿fº*x­”ÚëÝEdê(ÃŽ=jÝŒ»àÇ\P¬J‚;W9¯ÝµdS[×åÂÍéÍr7…¯î ¯AÖ€(XDò:œpk´³ùŒvÁ¬û+‰W€³m±  q®?Y' ½*f)|ò@ïX×—k’N  ­SÛ²ô8õ¯0¾ºóî™Íox‡UÈêO…sK"Îh>zÿZ•£Ýã¥*.ù?wڬΪ–ço4šmºK2‚¼Š½©€6©è8¨t%Ý+98«Z– ã¨Ímø^4òåcÔ+±Ó_005Åx}¾VŠí´åU´f<“@r|÷MƒÐÕ™¡ÐîÇ5[ Ý7;«Fñ´ü(}5ŽÑñ×L˜çø©Ú_oŒý*–ò Ï4±rA³ÏµSÓ×·1Ùàôã½UÓ3jn¸Ñæ¹½2Úatn@<èõ•܈§œš~Ÿ­©FMÊ·— 0§Ãpð1ŽN‡¡ÍbÆïiªs†5µ:,Ђ§æÇè#Û+ÉØžÕ%Úo¶!sÍfÁtГö­$˜KGN”–I²¬H'Òµ‹¯›î`3­[™¼˜6ç&€ žffÚ:Õ'ÌB¸ëQ³±Éõ©-¥Ã`Ð&¥¢"?œ§&ªA*ˆÞ=½8®žæmêc' ×={n!¸VQ×®([8Éž0Aä×aÉç¥sºN·Ål5Ð`ç¥fj³‡˜¨' ´Œ»U§f’à÷É­5S°$t}.é¶þrÒ-‘æ¨*ù×c#ŒÖÓ DïYWþ½¾øðõ_™ß¿üŠpÿתè"¶´ïø÷_¥b¿üŠpÿתè"¶´ïø÷_¥U?…Wã~¬»EU™‘O÷ p^*ÿTõÞÏ÷ p^*ÿTô·nßñ*µ]Ýl¥8ÝוíŸCרÎ6`+×íÛþ%V«»­”§ºò½³ïèzõÁñäa9é!±“‚äóZºdM·yª8 àZÙ·Œ­¸QéLDñ¹f'ùU¸ÀÆsÍS‚$ÞÀ‚€H‚:ŠlR+ÌÅ6\¨aÒ¥ÓÑDm#JžrŠ€ŽÂ¹­ZýQ^â¶5…X[çzíùPħ4“¬jRhÁ;M`¡Ì£4ë‰|Òwf¢FÁÏ4¬%WB­ÎÓŒ(óªë(XŠœóUó“ÍJpy§ ¬qȪù8¥RzäÐÛI68SÖ¶´Øß$˜;I®mde“qÖŽ§, y8íí@Ž%@AÁÆM8ÜAàG½p²kï€9¨ÿ´î¤$!ûÐq-ü/’¸8è+êù–e`8³â{©±ŒŒU“k$–šÒš¸œ6:QO©É*–=i!ÓŸä4«§1ë@’\LÌ»YZ„LåIëZiá$UÉ@X (‰‡q]Õa¬Ì¨\Òõe8âµm@dÀÀ fm6Hœœ𥵽’Ú]™ã5¿z…~ëžÔ-Z52GÓ-Ìù”x=jæ‘g摇zç#¸rà7CÖ»m l´CÅO<($w¬»õVLbµç“q5“¨Êc ú÷ >Ô]–íÔòŸÎ¥² î>gɰ?â`DZ«6c«Ž nYo¶Î ÁkMtÉopÙ8ïY0Êí³§_!NôµéÈ̇ڵ.žv„ v¬ÿ.`¤ÍfOjñÜ "®[ÚM€xÔÍä\oε‚0E!ºPTðHÈNÞ”–©½q"’3È«—˃Ðz}±ÝÊ(8á…X…ü)&Š9Ï#µ_DBÀ²u«c…£áyí@ûØ&@Ý‘Sý„.ÒŽ+TÁ ü¬8÷«)oo:Î1Ò€0Ò%ŒòÝ:fq08‘·ûV¬ºL'$1éÞ³NŽZsó|ŸZ¨dq ('5^ÌÇzzÖÓi ls»3PfÝCœ `O\P"´°­I!KxarG¢»;?õ#é\cÈÍqõÙÙÿ©JØæ1ïä7eÿ]‡ò5ãügÚdg÷§ùVÅïü†ì¿ë°þF©ø¹í­„ƒ#scëHgš5ʪ2yéP« mÜXÛHp§&›nbQÆqÍ1ß–Í>r&´#EF ·Ö‰ðøqº&Æ*´š=«–4n ‘Œö¨ʾ µU£½·$ ã½SšI”’ÈÜЪÚÅ#äâ. ‹‚«Y)v釱quWE œÐO¡@ÙÄc#Ú¨KáèN[Ë•kŬE¿cpMhE,ÌGÓ4ç·Þg˜ò£µRõ¸&7b}«Ô"cƒP‹tä”4çÖwºµ„ƒ%ð+oþ›¨0’?Zß{]( Å`]è‘ÜI‚ƒfÇÆPË>ùO>õ¸Þ)µžßÊIFãêk‡¸ðò#¿.+"M2ñ$Ìlxé@Í¥K ƒ~õË õ¨ï¦Y¥!Ï®+Êmu­JÇ Å°8­›:1iI$úÐo »a•qÅLacã¥`iÞ%…Ô–a’{×C¡ éò2œûÐ 3äƒN€0˜®;Õ¹ç<ŒS Œy»‡4ù@†2Í®^îäË#sÍoëWk¾Îäb¹ˆOÚn€ó@zRˆ»µrFõæŸ ,p¨íŠ…ˆ2cuT¼Œf-ÉÇZ«¥Ió°'гª·‘kíŠÅ‚ì[BÎ}(æ»|?->ñëŠÍÓÕU7¼Õ“<Ó^\äƒÚ¯Û‰}(sÍU^MIøæ9¬5Ï4‚ ‰s„lzХƭ¿<×;ªjLP¨ì2j̶Ï;Ïë›Õ¦¡üÍ@ÝôÆ[‚Ç5\1PJŒÓåëÙ>”©‡åë@ ŠSÏcSÌO‘j®‘Û¸«©™Æ3ÅE¥Ý5¼àtµç&PŠÅ[9 —æ«nÌ`@Ãó4»¡p[ÍwV9ûJâü<ƒcšï-£Ùd1È"€1J¥ÇÞ«ú“m´ãQT›ÑŸZ~®øUPJ±¥ŸôvëU.Wdǃ֬i£Àš’åCì8  ®nš¹ì*¶”ÃÍ'5-üª¶Ê¤Ž˜ÅG¥m,Æ€«¸Ü˜æ–ÉØÇŒqUõVkE®YDDGž(2öÙ¦œºœQÚß4/åÊÙÖµ ‹|Ïè+]¶÷–€4.@<ÈúJKK¼|‡µSÓ®²»XñO|™C àó@Jÿ2Ÿzžf2`Š¡i/˜Sõ­-™x  »wðCÍ0Õ4qn$sHÖd)mÜâ€*ÊÃ'?fO š|uÅ[¸ °äž•— n“ïw ‹K…sO½¾•–r”À&ë@öɾp<Õûé•bô5BÑÊÊOTwSf`Ó45ˆß>ÿzÑšPdDïUlb#hǹ¨®§ò¯±¹ã5X¹S’]S5¡% ±”¶M~g¨?üŠPÿתè"¶´ïø÷_¥cÜ'•á„9Ûn«Ÿ\(­;þ=×éUh¤É¨Ó“h»EUE?Ü5Áx«ýS×{?Ü5Áx«ýSÐÝ»ĪÕwu²”ãw^W¶}ý^£8>E*„cœW®Û·üJ­Ww[)N7uå{gßÐõê3ƒäkÄ¡i!±ñæ ÖºbÌ ãšÇ‚ß÷ÁL×Cú±LCÇô©r Ž”åA¸cÒœÀŒŒPR^œƒŠY°ª)Òvýi’“¥gÜH†:Õ‹CÜúU–òçã¦) ØT1š’á÷ÏÁà º’¬VDžáY©÷K­gꚉŠßb·&€S¿ü ð5çºÕàšFNÀûV½î¡åÆÙnOl×#w0’RF}h9•^òØKjW©´PñÁ°ŒhEã̃êú;xÜ8  n"p@éYr¢s´š¥q®™[jŒ.8ÍR7r¹%b€u ‹p_ŒUë[‚P+Ö²åiŽK†ö¨c2ï+@wv†b1žõ=™0ª«ªG,Š:w©>ÐÀ©ïßÚ€7c "«/5 fAÀÏ5•mvU¹5»g,Sýì}Pufl‘ùÓâLJÚûNx*´ö«  l®Û±ÈÏZ…–D `‘ëšÓ‚³‘ïRCî]¹  ´»d úUå¼ dP`\“°’(ò‘—n"€kyPƒÄUylíØŽ÷©šNÚ C³€­ ¡ÛÉó dûUtfÞv1âµCȇ~”•ÏÌ1@o¦Ê¸Ëfª­µÄs’k}Ýþ^§@»¤"€2⼺ˆô8©—X3øV×ötL§wR}6.Ùæ€*.±pz×wà»…›I¹‘Xö¨— ãø—¼=}yô=.”qò¥v¿á6š-â’W7±ulu*1Ô?Àô [þFiþ¢»;?õ#é\cÈË?ÔWggþ¤}(÷þCv_õØ#TüZ…ൠ×{!Woä7eÿ]‡ò5ˆÓÌ[aèXÿ*C8Ç´rÄŽ½ê2’#Mn4X<Ι-¨šb3a’dä •.Èn^œTÛv55’=¥ˆù¨)§‰ÊŒÔ)¸.* “2õ8©XéÖ€!¹Ó-ålmÀõN].ÝNV¯É,‘°ED×Èy  –Ò’)SÒ”ÙO¥‡ã[®eÉàV’¤nƒ¡ DËwŒ3cÞª]ÂpT°ë§šÚ7ª¾€¢€1GˆŽ×\»Õ»®F 5º.r£5ZM)¢ànÀïš–ù“a ŒššÎ· à#Ò²e¶œ°Ã6cVc»¸‰ í%Æ‹¹RŸjÌ»ðâʧ5¦5.åH4­|$PyÍr§Ož…Õ‹}BîÈàƒé[À,¼‘Jlb”Bš­kâ9Xù?ZÚ¶Ö‘—–ÚE`\é{˜“œñŠ£™âM¤Ù  ­SPûL¹ •óVt8WvüNrk*ÂÙ®» [šY û:PÓŒ&ª`b|ñÅ[—;~µ—)t”ž¤Ð-jë|â rZøÝ3ˆ×¡«ï‹¢3–=}ª{;LâVü(Övˆ2¹$óWš0ÀQVá„ø«vöãq$P M1Za•âµç‚(-° Š|#läqY:æ¦"„àž(š×urƒ\íÁ¸˜±ät«z¶¢÷+O5E• ž¾´žW/йNE6¹f ƒŽ+RÛlqk³& r{ÖµÇî!†9½«3ÄV¢[?9 Vµª$žzg5Vèùöï ^ â€8‹k’íô­¦“Í…Y°@®_P¬.sZ–7AÕTž kÁ0…”€q[v·a”ñÖ°HÂŒw©mnŒr={s@*æÎ3ײm=ù¨ ¹ÚIçÞ‘œA  ýM×Ê#88¬;Eă-ÆkWUFÇ¥dBŒ¥wph²´a±ztíT5IAmµfÁ‚Û)`zV}ü§nÔ¶k„f<ÔQÆàwç½KÛjÄTv$›¬õ  •AôÀ¬I›Ì»ÆzšÝœ•·f8àV¾÷Ô@Á{ÿ"ïý±ʵtïø÷_¥e^ÿÈ»ÿlGò­];þ=×éI »ESÿp×â¯õO]ìÿp× â•&'  ›vÿ‰Uªîëe)Æî¼¯lûú½Fp|±cý+Õ->›iŸ™ìåÂîÆNW¶ï~¸=zŒàò0x3V÷2Â~’RBÚ°“üêÜd*òz Óÿ„kRòöùIŸ÷ÅÃZ¦Üãξ)ˆÏÎ2*PK/AWWÚ\ÓðqJ¾ÔÃgbcÓx  §9=:T>Ô Ú>Õ #OûìTSøWS•TŒwÅ^Mó;ry¨íHG¿é]4¾Ö6úÉRXø#W¶lÈþÌ”‡<‹$tâ¸^ÿË.Aät¯X¼ð^§qTH#»×!}ðƒÄR1Y…>³ð '¸¹y›’y5]`’Bv£7Ò½n?‚úÒà³Z3cþzŸð­+_…ZűœzKÿÖ %²ðõÝË|ÈTzšß³ð¤qÒ±'Ú½=<¬ [ÂOþµMÿ§€1á%pöö1Dª>•i¬Œùb»ð.¨§;b?öÒ¥ÿ„3V €ÿßÊæm-•B†âº;kh,’:u&”x7Y…ƒþþU¸¼/«¤;b'ÚJûв­AŒ>•ÐÿÂ'©’KGÿŠhð†¦;"ÿ¾Åae ކ¯ÁpÊ@ç>•¥ÿ¦¤G)ýö)çÂú–83þø  ßj~oçM$àéV—à<¤gþ*äzòõ+ÿ}ŠÌ +ÖšÑü†¶±/qþ¤gýñLmP#Rÿßb€0OqÖ¥Œy5¨|?¨äâ$ÿ¾Å4øwS$~ê?ûìP;©B$Œž8®QQÀaœƒÎ+Õ._ÒºáàÍK¼qgýñLojÙùR×JåšÖ=¿tUi,T±ÆWØw®Èx/VîŸûiCx/UcÿßÊᤵxy4°Ü´;[&»Y|¬:`$÷“ÿ­U_áþ°Ê@[|ÿ×OþµA§j‚áó»ÔUË’¡3“Þ›iàmzÕË(¶ü%ÿëUÉ<'¯:‹|öýåV‚xÊXdjh>aUÇ‚<@ ;­òé¯ÿZ¦‡Áþ!…²¦ßñ“ÿ­@‘nT ¢Í— ã5°ž×vâDƒð“ÿ­H|-«—}|Êçšá …ý*5Øú:Ý> ÕŒ…Œpßu$^Ô•ÁtÅa‡Rp:ý)­m¸ôÏá]?ü"·ƒ……ÿ|Uˆ¼;y`¹ÿxP–¹†?Jž;Y”†×Z<7zŸ%yÿlRKáÝD®ØáÛ.(Ÿ¡/Î{Tr«ÃÒºðƪã‘þ)¯áç\“?ïŠÇ[”$aF>•ÒøZE:}Ó)Ú>ÓÎqüCÜ?Àô4¿á¿ …3ïŠØÑtÛ­&Êd¹Ú…爩WëóŽ£òÏ>Р(¿üŒ³ýEvvêGÒ¸Öñ,çÜWeiþ¤})‘{ÿ!»/úì?‘ªþ&mã¶v鹇ò«¿ò²ÿ®ÃùgˆtY5¨ Š9V?-‹ÀóÅ!œòê<¼·çWKÄê`F;U_øAîÁÊ߯>ªjX¼!¨ÄxÔbǦÃLE+Ÿ•ÈŠ£råJZé?á½ Ÿ¡¨dð…Ì„´Äö4Î’8ÏZ•w8ú×@ž™q™¢l}­Â=8üOøP7öF“8¨ÍƒùÄmÕÇ¡ÜGŸžŸsþëqo2}ÏøP.,02x#¥HcXâÂ7ÍÞº ¼?w*àOþáP¯…îTsqõëþÌÊfA‘OY¤d×OÿÔØÇ™üOøR?†%dÛæDÔÿ…s àÏóž*ÿ“ F~PsW›Á×÷-ÌKøR§…nÐcíQ~F€1Ò‚£'¶)óèÖÞYù{VÊxrõµBVN‹vWi–Ìÿ…p¢F*3Ò²f²x¤#iJôèô ”÷’}ÏøToá™$3Bþ夘W“ÏLS­åÁ[ ú×yqàžBâæ$öÁ5_þÍÈl®¡ÿ¶f€9Ù‡Ùí÷“ka™ËmûÝ+½ŸÀÓÆ±N£þ™Ÿñ§Åà ãÛºòÛÓä"€9«+C¡À‘ÞªÀÆ+à×xßÿ€ç$¹ò²YÆ>µÁx›X21Tn¿Zõ;‡wó‚?µb_ûdƹ뿂7wnYµø‡ý»þ*€<2ò?4“’q^½ÿ 2ëËÚ5臿ÙÿM_W ŒëñÓ±ÿâ¨ʬÓ/÷~Z³xÂ@„­zÄ_'ˆq¬Äíÿ⪭ßÀË›¦É×¢_o³ÿ³P˜ZvRÄëVï$òâ$Õèü»„¾!‹þOÿW%ø-u5¸‰µÈ²;ýœÿñTã627Û‰#ŠØŒù¬K W¡Ãðâ¼Ïíø·ÙÿWãø5q8Öbçþ˜ñ 3Jcå"ƒò滨¸²þíOkð®êÚ0ŸÚ°¶sä‘ýkq<t–â/µÄp1¦€8hGúQôÍ=ÆûÁè+«_\‰wýº/¦ÃJž¹I¼Ï·D}¶Ââ>ÜU[fÌäû×^þ ¹uÀ»„ÀMC.crßmˆçý“@…÷3žjåºì·^œŠè$ð̸ßÅÿ|·ƒn#@¿iˆàc¡ "(ËßäŒóZZ‘+ ƒøWC‚na”ÉöÈX“Ÿºi÷> ¹¹`MÔ öI  KF?fgéPHs9ãÕAák˜WoŸ CUäðeÌ’oû\CÛ€<»Å¶Êe«Û­sv¼Rí~€ñ^Ǩü6ºÔÚQ&?Õ“ýk!¾ ܳ†þÙˆéÿÁµ˜KÇÞöBØaÔ{WQoð²òÜ‚5xŽ;y'üjò|;¹LãPˆçþ™šäí®¸Úx"§ó·äÏ­tð®n¼ÍãQ„{ygüjÄ~ºCÿПø *ÿæNõ˜ÈUFG=«Ñäð ÌŸòûýðj»ü8¹|ÄÂÿlÏøÐ;§KºÔ5Fäî¸rzWmmðþêÜý¡À¦¿ÃË—$ý¾Ø4ÇÙlA=itÐZ~=k±‡· O·D=ö}§€n-N~ÛÀ wRvKb0zV=Š“qœW ]x"êå6ý¶%ÿ€“P[|?¸·}ßn‰û„PQ{ÿ"ïý±ʵtïø÷_¥fj(bО6ÆV §´ôïø÷_¥$2íQLDrŒ©®K_´2ÆØØ0Ȭû»A(™ÿ «?úàŸú¨[”r~Ó4;ÍOÖµm¤ÖÙÔÝ]Ê@™.·|Ñnê|¨N˜cÖõO8êÚ (ÖÆ™ý•åG·Ëóü¬ç÷íý÷ÞÆÞØæº¶Ð´‡ÔƦÚU‹j¥Ñ·C(ÿã?­?û#LþÔþÓþδþÐÛ·í^Bù¸Æ1¿Æ=ê–âg¦]^?Øô‹mE´Ô»Ôu‰^æ4Frc¼|F»Ã.Nön„â3Z½ ø†ö÷PÑbº»‰âžÛQWuUU¸x."Ž9¦äÞØcè1Ò\èÚU홳ºÓ,çµ24¦ `VBìÅ‹m#%‰'®I=è»Ñ´­BÎ+;Ý6ÎæÖ,ypMº&Œ ãì5]__Ô4Ûkmqí­î®ï5¼1;:Ax‘C´²²Œ+c89rpG}UmôÛC¶²¶„Äc1Ä«°;p08ÜÀê@&­PEPEPEPEP=Wì_ÙŸÚ[~Ãä¿Ú7g0wtç§§5•àÏíìø›y˜ó_ì~úÿ³ç÷~wý4Ç_Ã<æº("ßîËÿ]åÿÑST6ÿv_úï/þŒjš aEPEPEPEPEPEPEPEPEPEPEPEPEPSéŸò ³ÿ® ÿ Š‚§Ó?ägÿ\ÿAÖàQ´ñW‡õLZv³c0ÚLVS¬î`»Š¡$(,2ØÀÎIš±§k6zšþéöHe¸‰b€íäJb‘€Ï*Ú\àœW £vÓá·†g—Sµ6ŽšBEµ«Ã*«On¸i<Ö RŒç°â¢Ó-ôôñVyw5°k­jÛd…oí%1Ç€ÁX·ÏòwíhÅõ +Ë×SÕ›Æ ú…µµèÕ¼´‚]Zewµó0ÙˆŠ0h¹ß¸àœ– uµy#¾Ôî/o®'}BþY®£Ž5º‘UV<íà ÁÆ@àqG@êuQEQEQEQEQE2i¢¶…æžTŠ(Ô³»°UP:’OAO#"«ß¼qé×/5»Üı1x?1¤åB÷'¦+Áºf£¥h^F¡&7Lò[Úîßö8IÊC¿ø¶Ž3ø  Vÿv_úï/þŒjš¡·û²ÿ×yôcTÕ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ŸLÿUŸýpOýT>™ÿ «?úàŸú¦·Õ£x›M×ö<_4o™%›O¸†7CŒyU³F#ž•±T ¢Š(¢Š¯a{o©éö×ö’y–×1,оÒ7#Tàò2ë@(¢Š(¢Š(¢Š(¢Š(¨n³šêáŠÃ $`¥° dœM: ⹂9à•%†E’#eYO ‚:ŠÌ·û²ÿ×yôcTÕ ¿Ý—þ»Ëÿ£¦¨QEQEQEQEQEQEQEQEQEQEQEQEQETúgü‚¬ÿë‚è" ªCÄZV‘ac íÖÉZÝ"Fò09!AÇãU¹;$)4•Ù‡áí ]´ømoZ¾¥ý ÚÃÌpƶӘFÐ6Æ® ·3ùÉæ±®´¸¥ÑõÄðXÛ¿‡nโKG‰®.YWÊH̲%Æs¸rk²ÿ„ßÃÿóù7þMÿÄQÿ ¿‡ÿçòoü›ÿˆ­U*‰ß•ýÆn­?æ_yoàMø¿RYtv±:m C$9I%ó.7±'† ™c–óUô› /ê §Í«(AªÜ27œÁ¬å,&cÎ<М7C´ WAÿ ¿‡ÿçòoü›ÿˆ£þÿÏäßø 7ÿOÙTþW÷´§üËï8}O¸¸ñ&eÐc¶Žy&‡T‹û"u>[A/É=ÌŽVà ÎÒ Ç#8=‡ÃË+m;ÁZ}œ:kX\A qÞÆÖ†÷ ‡~ToÉ|du8«ð›øþ&ÿÀI¿øŠ?á7ðÿüþMÿ€“ñ½Oåp{Z}×Þt4W=ÿ ¿‡ÿçòoü›ÿˆ£þÿÏäßø 7ÿG±©ü¯îkOù—Þt4W=ÿ ¿‡ÿçòoü›ÿˆ£þÿÏäßø 7ÿG±©ü¯îkOù—Þt4W=ÿ ¿‡ÿçòoü›ÿˆ£þÿÏäßø 7ÿG±©ü¯îkOù—Þt4W=ÿ ¿‡ÿçòoü›ÿˆ£þÿÏäßø 7ÿG±©ü¯îkOù—ÞmÝÉ46sKonn&D-!ÂùŽ'ŸZÈðžƒ.¤Éó‰&žâK—Ž>!œäÇ=võäñœTð›øþ&ÿÀI¿øŠ–ßÅúÕÂAë $!WÌ‚Džƒ, PéT_eýÃö°}Q-¿Ý—þ»Ëÿ£¦ªö‘ÞÉl²¤6ûf&Q™˜–ÇÝ÷©ü‹ÿùãmÿÛÿˆ¬ ¢“È¿ÿž6ß÷ý¿øŠ<‹ÿùãmÿÛÿˆ¦ÑIä_ÿÏoûþßüEEÿüñ¶ÿ¿íÿÄPÑIä_ÿÏoûþßüEEÿüñ¶ÿ¿íÿÄPÑIä_ÿÏoûþßüEEÿüñ¶ÿ¿íÿÄPÑIä_ÿÏoûþßüEEÿüñ¶ÿ¿íÿÄPÑIä_ÿÏoûþßüEEÿüñ¶ÿ¿íÿÄPÑIä_ÿÏoûþßüEEÿüñ¶ÿ¿íÿÄPÑIä_ÿÏoûþßüEEÿüñ¶ÿ¿íÿÄPÑIä_ÿÏoûþßüEG7ÚíÐI,0lÞªvÌIå€é´zÒZ(¢€ (¢€ (¢€ (¢€ òí]±¬ÜsüèˆëÔkÊ5ÆÆ·qÿ\àÿÑ×~]üo—ùXÿá|Ë7zk[Nöés ÍÂ;#ÃÈXmÎãʃÐÔ"Æù¦xVÎàËÐDÛ”rF8«ÒëáõÛÉÖHVnL2Çn¨ä²8L°PÜ–~¦¡Ó5UÓ´ßgY4<þn yg9=G~ÝýE)¥ªþ¿Íqƒz2œ\\ïò –]ƒ-å¡m£ß*MF$´Ôîí£,Rž5-Ô€ÄsV ü‹0{Õ´¶=ÆñaÃc$ƒ€½Ö¨j·QÜë³ÂÛ¢’âGFÆ2 5qrrÔ™$£ ÝôoªÛèßZ–wѾ«o£}YßFú­¾ôg}ê¶ú7ÐôoªÛèß@âýì©õMÄ Îp¹ö¦jQKkÌ3)IQAúpúõOœžq+pß³Ç|g½?YÔŸPWb¡#Ž*$í@8ïõ¨w¿‘jÖó=NY¿³¬È’0žL)Œ“÷G|ÿJ· ”ãËt_]È[?¨¨4ÏùYÿ×ÿÐEZ¯š[B4‰<¼PøûÅr?,ÿZ#ýã«õUÛýM:Š`GÌ÷’FÃ2¿ÔÐVo3"HÂgî˜É?ž¥IE2A)Ç–è¾»¶QJDž^¨|}â¹–­:Šlb@¿¼ucžª»©¦Æ³ýä‘°ÇEŒ¯õ5%Y¼Ì‰# Ÿºc$þyþ”² N<·EõÜ…³úŠ}Ò$òðCãïÈü³ýhŒH÷ެsÕWoõ4ê(8Ö`ß¼’6豕þ¦‚³y™F?tÆIüóý*J(’ N<·EõÜ…³úŠR$òðCãïÈü³ýiÔPcýã«õUÛýMQÔaiûÉ#aæÅÂÆWþZ/¹­ §ªÇ—ýµ‹ÿF-'°"*(¢¤aEPEPEP\n©à›ÝRH5 íÇŸo˜“³."®Aö»*ŸLÿUŸýpOýV´ªÊœ¹¢gRœjG–G›ÿ»׿ç¶ÿŸÿˆ£þÞ½ÿ=´ïûüÿüEvð“Žÿ„«ìŸó þÒû7™ÿL¼Í›±øgø©§ñ…‹^›»ÀµµX¡µ‘¤bIaWq‘°Ûò£¡Æ2¤×W׫w9þ¥G±Ã»׿ç¶ÿŸÿˆ£þÞ½ÿ=´ïûüÿüEuçÆV']Ó4Ø ½•/íå™f[9ÈB’${XlùyvÜX›FìnpøŸG·ögÚÏÚ|ß'>Kù~f3åù˜Ù¿û>Ô}z·pú•Ç ÿ ï^ÿžÚwýþþ"øWz÷üöÓ¿ïóÿñÛ\x¿CµÔEŒ×n&7 k¹måhüç ,~`]›²ÃŒäu8ÒÇâíV» u![7xç“ìÒìYO,¦ý»KîÀ c@"¯VîR£Øâ?á]ëßóÛNÿ¿ÏÿÄQÿ ï^ÿžÚwýþþ"»cã tû›énä‚Y#Žqqm,O‘‚¦äu $`ãyàÔ?ðœèºîüèÆçƒû>ãÎUþùfàŸíco½^­Ü>§G±Çÿ»׿ç¶ÿŸÿˆ£þÞ½ÿ=´ïûüÿüEzu¼ñ][Eqo"Ë ¨9ä2‘Aô"¤£ëÕ»‡Ôèö<·þÞ½ÿ=´ïûüÿüEð®õïùí§ßçÿâ+Ô¨£ëÕ»‡Ô¨ö<·þÞ½ÿ=´ïûüÿüEð®õïùí§ßçÿâ+Ô¨£ëÕ»‡Ô¨ö<·þÞ½ÿ=´ïûüÿüEIoðãU’tKË›4·'÷†)›opP?Zô‹¹'ŠÎi- ΈZ8KìÞÀp»»gÖªèÚÕ¦»aö«FaµÌSC Äȼ28ìÀÿˆâ“ÆÖj×ÁÒObm3þAVõÁ?ôVª®™ÿ «?úàŸú«Uȶ:‚¹ê7zh©õõœwZ†y,-EÄżΡŽLüȹœz šéë/ZÑF°,™oî¬g³¸ûD3ÚˆËòÞ2‘HÛ#vô wEñÚÿnfæëP·±H7ÔáKƒ>íûÃ,xŒ§yAŸœ Äb›Ä5žÂþH-lo®ìæ´ËÓu%¸ŠAq0‰q&Õû*@è9ÁÍj¿ƒ­n-o£¾Ô/ï./"K¹š1"ˆ\¼AB"  ÄŸ»ÎNsIƒmüë‰îµ=Fò{‡³w–vŒôiŒÑ€@,p@C“Lø]ÂU÷mù®(ÙR8<æ¬êž²Õ¥¾–y'W¼†Þ(Àlò$yceÈ<îrNrrí#Ãë¥jwï¨ß_]]Å2ItÉÂÆ\®Ðˆ¡Ö7AŽòHÅQ@Q@Q@Q@SÕ?ãËþÚÅÿ£®U=Sþ<¿í¬_ú1i=QE# (¢€ (¢€ (¢€ ŸLÿUŸýpOýT>™ÿ «?úàŸú¦·Šÿ…a¤½þÈþÄÐÿ¶ÿ²¾Íöϲ'ü|y[|Íû7}þwc=úÖž¡á«¹ÿµÝmì®Ö¦—¤·ÀUVÚ(r%@Z7Ê7 ”ã¿eB9; \±¹ÐîäžÞö{X®m®|ë—ÊÅ4±¸*å ‘‘b ómÝÔ‘L>ÕüÏìÐö?ÙÚ¿ÚhÞþúÿ´y{6íÿYÆíßw¹®¾Š:Ü:Xó=Uî¬õ(¼5oq¦Î$×`¾yö½t·/û½¸Ú¹cænÆn3]0еH<)}§ÙÝÇô×·7)*;(Ù%ÓË´°RQ¶–•'#8ÓQG@êpž Õ„÷óNð ¹—Ltõ‹Â¢ÚèË 2J3Êžg°åW›,^*¿Õ£0ÜY[[¢‚wçfÏÆ%\sØþ:”P_†ôé´ i]Ã#Oge ¼%K"$dŒAZ”Q@Q@Q@ÝÇ<¶sGm8‚wB±ÌS~Æ#†Ûß•WFÑm4+²Ú+ÎešidšFåÏv'ü¡EUÓ?ägÿ\ÿAjªéŸò ³ÿ® ÿ ŠµBØŠ+ÅÚΟé¾sZæ('ò%–-­•I?„î(zŒ€FFhn£šxm<ò¤H]P3°PY˜*Ž{– Ü+Œ¶Õ—Hµ¸ŽÚ=V´»°Š[-^spbŽ{ô}휂øùÈ:AouKÆkí6Ý-ɵ“F¹€É‘™$¿+‡?ÝýÒtäõã­ÅÄ6–ò\\Í0Æ¥žI*¨I'€(‚xn­â¸·•&‚T‘°eu# ‚8 ŽõÀx–÷]žÎãF¹¸Ó~×o}¥Mö„´s‘ÍvTÆdÈ!ãÉùˆeãå'#Hkúݬž!º¼}=ôý5a·q-É‘ÌÛs!üÏÆwqÇQ¸€v5ž¸Kv•îŒéa¹•H @ê@, žÛ‡­q6>4Ô£ƒP¹Ôl¤šÞÛM–ü¼z]Õ¢ÆÑ€L[¦I 1÷NTqSÙkþý(ëéòÒ/?±Æé´™mw)ÜÍ»a†3Ï€;:(¢€ (¢€ (¢€ (¢€ §ªÇ—ýµ‹ÿF-axÆþóJ:uÞ—+Ë©Ä1i¾[Õb7‚?„ªÛú.x8­ÍO&Äd`ù±qÿm“ØQR0¢Š(¢Š(¢Š(©ôÏùYÿ×ÿÐEASéŸò ³ÿ® ÿ Škp9/Ç]éÚh:5ýî¡>“k©N–1§–‹0n…Üt(ß.I#Ï8¿¦øÂÓTŸOØêZê ýŠòhÕcœì/€7o*±”Á4ÿxgþÿ'ý/Ïòô«=7ý^ÜýŸÍùúŸ½æô펧<^û&™á{?µïþÂÙóùxóöÛILü¿ë7wéŽùª$’ÛÄ©6£mi>—¨Ù­Ùeµžæ4T™‚—Úbêv«:©ùOz­iã;[Ëý:Ý4ÝEmõ)^;;×<™¶Æòn>à ¡ÆTg €FHÊÒ~3[Ó5&»±‘ì%wó“N sr'÷Óï%ÏÎ@‘Ó¡4í7R‹Äš—·riš%Ä¥V]9¡Ä –(ó1b²ŸB쌖æ5‡Ší5 Ëh’Îö+{ÂËgy*(Šä¨,va‹ ª³ ʹ‘šÞ®7@🇵;yíbÒD»„,šTiu‚¥pÓç-€z…÷''=•QEQEQEQECwöŸ±Íö3¹Ø|¯8›±ÆìsŒúVw‡uø¼Aa,«Asm;ÚÝÀÇ>TÈpÊ£B:ƒÛ¥hÝÀn¬æ·Kš…<Ø[k¦F2§±÷¨ôí:ÓJ°†ÆÆ†Þ!„EýI=I'’O$œÐ¦È*Ïþ¸'þ‚*ÕyF½®^ÇrÑ}¶âÞÚÎÞ  Z?ùd®IÚFOÍúTÖÚ/-£¸ŠeŠ92¥Î·p²¼6ý ®«òÁJRJç?·¼œcØõ§©ivzµºÁy:+‡FI7FÁVRN ¹¯#º¼ñ—¨Gg©Þ\!›pŠ[]RyQ™z©,ƒŽGàÓÿ´oÿè)¨ÿàl¿üUk šæŒ•ŒçŒP|²‹=2? èÑØÝÚW–;½¾{Ï<’É&ÞW2;ùO#ž#ü!k{È%³–t½ò~ÒgºšV—ÊrñîfbNžüŽ@Åyá¾Ô„bC¨êa• öÉpHÆFw{ÌS´oÿè)¨ÿàl¿üU_ö|û¢>¿ÌôÛ éÖÒ@–ò:Éè>¿ÌöZ+Æ¿´oÿè)¨ÿàl¿üUI5Þ§„“RÔUŠ«öÙ ÷½£û>}Ð}~™ì4WhßÿÐSQÿÀÙøª?´oÿè)¨ÿàl¿üUÙóîƒëðìÏe¢¼kûFÿþ‚šþËÿÅQý£ÿAMGÿeÿâ¨þÏŸt_‡f{-ã_Ú7ÿôÔð6_þ*íÿú j?ø/ÿGö|û úü;3ØL4ë9‰ Ê¥B£pS‚@=pp?!UõOøòÿ¶±èů&þÑ¿ÿ ¦£ÿ²ÿñU·á½Vök¹lgºšxYQçH]•–hÇœàîý+:Ø)Óƒ“{RÆBsQHîh¢Šà;Š( Š( Š( §Ó?ägÿ\ÿAO¦È*Ïþ¸'þ‚)­ÀµEy®âÝjçÁö–WwB__Elm'ò”oKˆ÷‰v·6F9òÚ«ðøÚêÇÂ^½¼m-§¼Ó ¹–}GRŽÈJ쀰A´å³Î0«ó ¸¡ÝÈèž"Õ5¯¿‘¹ÐæÒì¯b/9 ›Î;¶ù$ R¥ð‚ ,@¡à}oP·ð׃ìït¨á³½²†ÞÚán·¹u·. Ç´VXØ‚ž™<; ç{ERQEQEQEQEQPÝÇ4ÖsEopmæt+ÁymŽƒJÈðž½.¿¤É<ðæ‚âKg’>aàÉ=PöôäsŒÐ•xĶuu_¼lÓ_³%z„ZÒ±O› qùWœøž-uS,鲈!hÙº0"ž~ ñYÚMõ¦ ñË%ÄêòïEó¢Ä»Tl'Œ‚{}êôªQ•Z0pÖÈóéÖ:³SîikÖØG\ÜyÒ\kOÉ>\fÝ”/#ÔÆG5gC¸òWQ“íÛíµ½€e×÷±Ž9NµªjVwéj#6‚o3t—ia±×nO#ïçÿ×Ež«ªÊ­¼âP‰$qÀ9ÇÈËž@<ç ®Œ=)B“Œ·¿—‘†"¤gUJ=¼ÎŠ$´»h®§yòLÅ]Äp+(?1Æ =Ïô¨ ‚ÒøYL-„[Þth¢v"O-À‰ ¶ìVºª³“ ‰o͈¢•¶®å ØËÈóÍD/ª*Üà#@$û¬q’=òºƒïýj`ä»Z¡*>‡a"Z‹`×üªXƒÄ\ÄŸn½\ÓL7 ýÁ#ˆÚMŸrOýðü×3\½Æ­-Þ>Ó|ó`’<ÉKc8ÏSì?*ˆ_*ÆÑ‹€ˆb¡ø$g‰üèä¼mpç´¯c«–(ìôöŠkq<–a ± “$±ÚAà*/^¦£ž +¯ek?5‘íü¸äv?26vS‚ Áõãëžv=ZX®Zæ;çIÛ%¥Yˆcž¹9ÍFÚ†àá®rƒ¸2}æÁ>§“ùšps]Ó˃]½¤vA7Yý¤Iæ1eo'ÍÀç{r ÷©®ã†y³*ßÙ±Ì.w6r°8û»Izg'­rÚ'~ÿµ|û6nó9Û·n>›xǧ#k=¿ÙÞþF‡Ý™‰^ÇÊ—³zj>uØé`Óíä³d’8ah×ç•¥á ÀòÀ8èyÁëš§¯\¤—p„¶Š[@r…ŽàbLIéÐ~¹¬uÖ®Ü[®£(„bc·`ñœr üê95&–(â’ì¼qdF&Bg®x§5+¶)I8Ù"22©ýª/ùêŸ÷УíQÏTÿ¾…ktef\ó(ó*ŸÚ¢ÿž©ÿ} >ÕüõOûèQteÏ2¶¼(ÛµÇÿ¯qÿ£á®gíQÏTÿ¾…tþ †Yoç¼T&Ý#HŒ·¢ g覹±{ Tý´OH¢Š+çÏp(¢Š(¢Š(¢Š*}3þAVõÁ?ôPTúgü‚¬ÿë‚è"šÜ Úf§ivzl[¤²iÖ«ios2+L±ª…Æì dœ`JÌÁV¶ÑØ­–§©Z[´âð¼{¦†<í Y-Êm<ý1ÓQT#„žÆãÃ:öƒc F× $ÛÈ—W‹ rÁlQy;àŸ—g|äqM¶±ñ¥Žƒi¦ôM¿f-­I—ÛÂ7ÿ¢sò¹™â 3X•¢²ÙÕd…âÞ‡ë½Fõÿir=è?wŠ¿è§àþçÿ‘èÝâ¯úißø?¹ÿäzÐÔµý;I”Eu$ÆMžc,ÒLQ9˜"«Áäàp}* ¿h¶w —RI+[¥Ð[{y'Ì,X+üŠ~_”óÐqž£ ·x«þZwþîùÞ*ÿ VÿƒûŸþG«—ž'Ò,RÝå»,·yñ˜"y¿uÇïÀv§#æ8õ•ý³ÿ ûsíñ2þÂûg±Öù÷mÆß½Î1j³»Å_ô Ó¿ðsÿÈônñWý´ïüÜÿò=]½ñ.“§_}Žê褣nò"vH·/˜àLöÜEI>½§[j‰§I3›¦Ú ¤.ꛎ{(*™=7šÎÝâ¯úißø?¹ÿäz7x«þZwþîù®ŸéCP[´Iæ´¾H“È“Ê2g<Ý»7d·vsÇZ«£øºÃTÒ¯u RâÎ9eIZæÞX×jHè.‹’Bd¨ÉRvžh›¼Uÿ@­;ÿ÷?üHOŠ7icCaµë‚2GßÖµtÍbÇWY~É$…¢ Iм2&FFQÀ`cŒtZ½„ÌŠ— ¹îÕURe@Å—Ð#BE?í~,ÿ .‹ÿƒyùµø³þ€º/þ åÿäjuÇ‹t[hÑÞíØ?˜G•o$„,lQØ…RU7/½-çŠôk‘m-Ì1.B[ÛÉ9ò˜°ò)ù~SÏn3ÔdŸkñgýt_üËÿÈÔ}¯ÅŸôÑðo/ÿ#T¶>)ѵ+¸­­.Ì8&ò\E6HI ìrI IàúVwƒ¼[i­èº:MvòjSÙG$Œð4k,™±¶„b 9 N=±E„\û_‹?è ¢ÿàÞ_þFªš¦·âm#H½Ô®4=!¡³î$Xõi E,@͸Àõ«Ñx¯GžSSÎçËi#"Ò]³ªŒŸ)¶âSŽp…‰íXÚŽ»‰>êú¤vóÁçèó;G,N›Y ,B–UÞ¿6ƒÚ€;:(¢Â§Ó?ägÿ\ÿAO¦È*Ïþ¸'þ‚)­ÀóOjú³xSKðä××rêzµ­´ö×ÒHÍ(‚h÷ÎûÏ;£"PmÐŽõ£câmN xqa¾‰îåÑ­®eó,.µ ¥fA’âP>ù-“»Ž9ï,,­ôÍ>ÚÂÒ?.ÚÚ%†ÜNÔPŒžNk)ü¡¼6‘}–Xãµ¶KHÖ+©cÝ p±¾ÖbŽx|õ>¦¨G¥kz׎>öYqiwá(ï-í†q›*$‚ÄŽXÈ 1òäèKà;Gðþ·Óô¿í«ïí*øÂ7=åÙºM»¸Iœg¸©{á{;ZÒ/ü9§éì¶ZdšcGuw$DEº# #¶Ýן›©«ñý´?üËÿÈÔžàQ¿ðõÕÖ“âûT’&³æ}œ±8]Ö±Â7ñÇÌ„ñžïÅSñ‡µ»«ZigOh5¸Žù.¤uh\±S¸Eî0I<ô­¬ø¿þ€Úþ åÿäj3âÿúhø7—ÿ‘©X z®Ÿ«¤ÝXHÅâ&zõBG =ÁÁâ¹;°êzeíåÅ»Vžý#ÉÜï‘ÓnGÜVžSÏ?*~yñý´?üËÿÈÔgÅÿôÐÿðo/ÿ#Qf ÊÒ|=ªÚ¾‰gtö_`Ñ 6òÄìeŸ4I½J€˜W$à¶H*{ÝZé´w€¾åý ©8m¶²BvqÏÌàóŽ3ߊ½ŸÿÐCÿÁ¼¿üF|_ÿ@mÿòÿò5`d_ø{V:›ßØ5‹H5¥Ô'v£BÜ©!N¶yäÏ'Š&Ð5É4ë©âïo5wsRBŒ‚%ˆD³*ï^°PI`Zùñý´?üËÿÈÔgÅÿôÐÿðo/ÿ#SÔvÃÂÚÖŸÚSì’ÝÇ«B8f¾žE(m>ÎQ¦ugÈÉ9Áè:g²Oµý¾mþGØü¤ò±Ÿ3ÌËïÝÛn<¼cœîÏjÏÏ‹ÿè ¡ÿàÞ_þF£>/ÿ 6‡ÿƒyù•˜ÎwÅž×uÖÕa·º »€Çn_Q¸móÒ¦(ÆÙlœ±þ,`ƒ©áë«­'Åö©$MgÌû9bp»­c„oã™ ã<ߊ½ŸÿÐCÿÁ¼¿üF|_ÿ@mÿòÿò5`s¾,ð®»®¶« ½ÔmÜ;rúÄ o˜ö•1F6È dåñc ñ©²SU¹„jÚ–§Ö¶dóR(#ÉÝ~21Éç²—Þ+1&ò»!ί/PH?òííNû_‹?è ¢ÿàÞ_þF  þ•4­:ÖÆ.fµWÝq5ܶ³or H$ˆ–l³.0IŒU{ï êrÜYÞ‹“{v¶YÝ©\X‰ 0sœ—l«LÎuþ×âÏúè¿ø7—ÿ‘¨û_‹?è ¢ÿàÞ_þF A}¡<¾¹ðý¨†)Lk(†æòИŠN[hã®N=j½ÿ‡®®´ŸÚ¤ 5Ÿ3ìå‰Â¿Ž>d'ŒðG~*ÇÚüYÿ@]ÿòÿò5kñgýt_üËÿÈÔ v­¤ÞÝê‘^Y\Çlñé·v©!hå•¡(Áq‚”sϧáÎÛø/S¹»¹mBUŠ *çOr5;‹ÇÝ)çhF¸P;uíÐ}¯ÅŸôÑðo/ÿ#Qö¿ÐEÿÁ¼¿ü@\åm^ãÆÜ–—éíè—vSK§HòyO3B>}Ê»„b#ä®Ó“Ínøs÷zv¦.ïb|víKý©utÌœ,ǃ°p7×âÏúè¿ø7—ÿ‘¨û_‹?è ¢ÿàÞ_þF¥`(EáýWEkwÑ•ÃfÃa(¼vL‹VÝ“#eN3Ç"®h>}ðbe–Þ=*ÊÂ6<90²Hè/~ÇñÚüYÿ@]ÿòÿò5kñgýt_üËÿÈÔÄW°ðõÝ®‘á G’&åý ©8m¶²BvqÏÌàóŽ3ߊ§áÿk––Þ³Õœ°h‘‚²ZÈìÓ8…¢«( vç'$…éZŸkñgýt_üËÿÈÔ}¯ÅŸôÑðo/ÿ#P0ôï ë±ëºEî¡ußbäžfÔn%7¡‘,,q¸8ã8=Œ—ÖÚW [L¾[pöZ4ÖѼ³‰ *åWi89^@õ5±ö¿ÐEÿÁ¼¿üT5¸‰ªë2éºm½•÷öÚZÙ¾Ÿ§Ànk\Ç ><üìKqË e³Wm5Ïê-ÔóÜ-Õ¦¯ö725¢Ýɲ\”ǦÕ<Ò„wo{o¡ ƒI‹™¢’hÓiå cžœóö5b¼¿Pñ%Ü:§jÒ\Éö F ®®âPmBÜÛ#É*GÃ*AÙÁÆr$jkÚŽ¯¤ùsfæ]2ÖÅgžêÑ-^BrÙ–XØ Ä@ò°NÚ€;Ê(¢€ (¢€ (¢€ (¢€ (¢€ *ž«ö/ì‹Ïí-¿aò_í³˜;ºsÓÓšÊðgö¿öüM¼Ìy¯ö??ýÙóû¿;þšc¯ážs@­þì¿õÞ_ýÕ5Co÷eÿ®òÿèÆ©ªQEQEQEQEQEQEQEQEQEQEQEQEQE>™ÿ «?úàŸú¢Škps¤i·°\Aw§ÚOÉ'ŽXU–V(fr@U=€ô¨áÑ~Á%‡ö>Ÿö);Ûý™<¶`‚W$QôÒŠ)ôaÕaÓì­¼Ÿ"ÎÞ/"6Š‘*ùhÄ«À%W qòJ¬þÑ$¡ôm=…§ü{†µCäóŸ“—ŸJ(«û_2WÂiQE# (¢€ (¢€ (¢€ (¢€ (¢€2-þì¿õÞ_ýÕ5T (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠÿÙnip2-8.7.0/doc/src/figs/snap13.jpg0000644000175000017500000014237113224651032013420 00000000000000ÿØÿàJFIFÿá°ExifII*JR(i‡Züÿÿ)( üÿÿ)( 0210‘ 0100 ÿÿ È -ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀ-È"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?÷úBÀPdzo¯RÞ6v`ª£$“ÐPÖW½DowãZ·Å;É.tËxE¸8Y&‹ûàÖ²ÏÄq»Yÿß—ÿâé\xûjxQöÔþð¯ÿ…®zYÿߦÿâèÿ…®zYÿß–ÿâè¸õöÔþð£í©ýá^ ÿ \ÿ§?ûòßü]ð±µÏútÿ¿-ÿÅÑp=ëí©ýáGÛSû¼þ6·ÿNŸ÷å¿øº?ábëôéÿ~[ÿ‹¢à{×ÛSû¶§÷…x7ü,]oþ?ïËñtÂÅÖÿéÓþü·ÿEÀ÷Ÿ¶§÷…mOï ðoøXºßý:ß–ÿâèÿ…‹­ÿÓ§ýùoþ.‹ï?mOï >ÚŸÞàßð±u¿útÿ¿-ÿÅÑÿ [ÿ§Oûòßü]Þ~ÚŸÞ}µ?¼+Á¿ábëôéÿ~[ÿ‹£þ.·ÿNŸ÷å¿øº.¼ýµ?¼(ûjxWƒÂÅÖ¿éÓþü·ÿGü,]kþ?ïËñt\yûjxQöÔþð¯ÿ…‹­Ó§ýùoþ.øXº×ý:ß–ÿâè¸óöÔþð£í©ýá^ ÿ Zÿ§Oûòßü]ð±u¯[Oûòßü]Þ~ÚŸÞ}µ?¼+Á¿ábë^¶¿÷å¿øº?ábë^¶¿÷á¿øº.¼ýµ?¼(ûjxWƒÿÂÅÖ½mïÃñtÂÅÖ½mïÃñt\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿâèÿ…‹¬úÚÿ߆ÿâè¸ñöÔþð£í©ýá^ÿ Yõµÿ¿ ÿÅÑÿ Yõµÿ¿ ÿÅÑp=ãí©ýáGÛSû¼þ.³ëkÿ~ÿŽQÿ Yõµÿ¿ ÿÇ(¸ñöÔþð£í©ýá^ÿ Yõµÿ¿ ÿÇ(ÿ…‹¬úÚÿ߆ÿã”\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿã”ÂÅÖ}mïÃñÊ.¼}µ?¼(ûjxWƒÿÂÅÖ}mïÃñÊ?ábë¶¿÷á¿øåÞ>ÚŸÞ}µ?¼+ÁÿábëÞµÿ¿ ÿÇ)ábëÞµÿ¿ ÿÇ(¸ïöÔþð£í©ýá^ÿ Xþõ·ýøoþ9Gü,]cûÖß÷á¿øåÝþÚŸÞ}µ?¼+Â?ábëÞ¶ÿ¿ ÿÇ(ÿ…‹¬zÛþü7ÿ¢à{¿ÛSû¶§÷…xGü,]cûÖß÷á¿øåð±uï[߆ÿã”\wûjxQöÔþð¯ÿ…‹¬z×þü7ÿ£þ.±ëkÿ~ÿŽQp=ãí©ýáGÛSû¼þ.³ëkÿ~ÿŽQÿ Yõµÿ¿ ÿÇ(¸ñöÔþð£í©ýá^ÿ Yõµÿ¿ ÿÇ(ÿ…‹¬úÚÿ߆ÿã”\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿã”ÂÅÖ}mïÃñÊ.¼}µ?¼(ûjxWƒÿÂÅÖ}mïÃñÊ?ábë>¶¿÷á¿øº.¼}µ?¼(ûjxWƒÿÂÅÖ}mïÃñtÂÅÖ}mïÃñt\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿâèÿ…‹­zÚÿ߆ÿâè¸ñöÔþð£í©ýá^ÿ Zõµÿ¿ ÿÅÒÂÅÖ½mïÃñt\yûjxQöÔþð¯ÿ…‹­zÚÿß–ÿâèÿ…‹­zÚß–ÿâè¸óöÔþð£í©ýá^ ÿ Zÿ§Oûòßü]ð±u¯útÿ¿-ÿÅÑp=çí©ýáGÛSû¼þ.µÿNŸ÷å¿øº?ábë_ôéÿ~[ÿ‹¢à{ÏÛSû¶§÷…x7ü,]kþ?ïËñtÂÅÖÿéÓþü·ÿEÀ÷Ÿ¶§÷…mOï ðoøXºßý:ß–ÿâèÿ…‹­ÿÓ§ýùoþ.‹ï?mOï >ÚŸÞàßð±u¿útÿ¿-ÿÅÑÿ [ÿ§Oûòßü]Þ~ÚŸÞ}µ?¼+Á¿ábëôéÿ~[ÿ‹£þ.·ÿNŸ÷å¿øº.¼ýµ?¼(ûjxWƒÂÅÖÿéÓþü·ÿIÿ [ÿ§Oûòßü]Þ¾ÚŸÞ}µ?¼+Áábëôéÿ~[ÿ‹£þ6¹ÿNŸ÷å¿øº.½}µ?¼(ûjxW‚ÿÂÆ×?éÓþü·ÿGü,msÒÏþü·ÿEÀ÷¯¶§÷…(¼CÜW‚ÂÆ×=,ÿïËñtáñ#]^Ö÷åÿøº.¿,êÝêPÀ׌xâ|ò_GoªCÇ! &ˆ }Á'|ñ^±it%PA¦…€äQ@Ìp¦¸/^еÛÈ?ñÓ]ÝÉÄf¼ËÇŽ²¯Gý1ähÇ7Qº¡ÝFê‘—¬-$Ôoc´…âY$$)•Â/Lã'¿aïZÚ§„õ ?RžÎÙ†&Š:+,kŒ³)n:ð2I¬ {©­.c¸·‘£š6ÜŽ½T×Cáÿ*j³¾µw3Cqbö^qÌJqƒÉ:/3:=S•ìR;Ff¿Rö :þ𧯎)ú†«ésÁ 턱IpvÄWÞ}RFyé],:þ‡c­ø`E¨´öšd2Ç5ÇÙÝ9e |¸Ï_­f.µf|?¦Ú-ûAuª×Ä,ÞTg8p1ƒÉÎÜÑ×úïoËPþ¿…φõ«;»[K‹Iî‰XSÍC¼Ž£†ÀëßùCï>€©<ûu®ši6~+ÒŸOW}ÅdƃºLî`‘ªú§ˆì­î4Óc}myioz.šÞ 8Ûm#ÜðÄ‚i­lÊòøJïN𾣩j–²ÛÏEöu2)3a²>½ñX1X]Ïa5ôP¶…Ö90ùYº g<ý+§Õõm û]Z¤·7:­Äsˆ^ÙÐņÉÿ­Yþ Öì4»»¨uR~ÃpŠÇ [÷ˆÁ“€½%»¿õ¢þ½Aí¡B] U¯K'V²(.õ% ýÑÁù³ŸáÍ;Qðö³¤Ú%ÕþŸ,99*@>ø'Ž+£¾ñŤÖzeÌqî¾{¨çÔ)ð£$`çƒÇLT¶·¢Ç¦k‹a=ìúÄÉ!ŠH¸ »’~ñíÇ £úü¿àB-#ÁºÖtøµ›`²¹v]ÂTÜHF`8$»éX“éðÇÆÕÄW2˜í¾aºR8\î?\bº'ñ”ß`ÖEÏú 7”ü~è¯ÝÆî¾Õ_Y×4ýfóKÕ£¿{+ødXæAºÆªr² Æ1þÎúïªFfÏárÚòÚÒm=–âëp†?5 | žÆ®*-GAÕô™aŽþÆHZfÛYX1ôÈ$gñ®ÏO¿Ñoüi¢Kc$W‰yMÕÌÍIû¶Á*ßÅïY7:¦a§Úéê]R©ýªäù DèP×ðëÍ upïýw0õ/ë:D÷öB²¶Ä!•ÁoO”ž}©×^Öì¾Íö6T7M²Ü¥ºãh$Ä éõh–ÖVÉc<-Q.Ö {n1Øä[Þ©¦¯ é¾0ÄVúœ·¾tîÒÛ›VW…]HÎãÃc `v¡9ýSEÕ4SÔlÞßÌÎÂYX{©#>ÕŸººOjöw6ÙéúµÍ¿žf1A§o,ã'ø‰ÉÎcìù:L–Ùšd›Ã´ÉmºuÏ£çŒvâ’/h~¹×ìõm3Ú)óKüD€0¨¬|9¬êMp¶v-1¶Ç( Úèå† ÔþÔ4ÔÓ5/RºkHïãŒ$â#(RŒN ŽyÍiøkRðæ™Ùn ŽêÝâêk”Ëè‚c=ý©ÛRz´ß Üê¾¹¸´¶šMNß Â]P*…²äúÕ-'×zž°úl²Ee$LSpÀ$à¹Ë@?>kmõT²Õm.µY,–mXÞÄâÙܲ`c¯JÌ»ñ÷Ä(u“º+5¹‰·2’Ûq'·J#«Wþ´C{;Z³þÜØê7Ve÷˜&x·ã¶’3ŽÝ*¾ê³ª^E?ˆ// Û,/tò¦õ;]K’28>”jš·ö£ÄßÙÚu—–Å¿”?Þ俥^Êã{²ðð¾ºÚ`Ô—MÙ˜üÑ t9Lg;s»ö§K'HšÆ+™®ïÞTJ;ðó‘Àç5¹eâm&WE™îÈŠÛHû,çÊs‰1÷qŽyî8©<#©ZO7„´øåÝuk-Ñ™6‘´2±ãð5VÕÿ]Ééëc™½Ð5=*æÞ-RÜÙ,ìM#AêIRzuÇZ³©höš2ê¶´z…·Ÿöy¢*øÏÌ=êö£{¡Ã¤[è1j’ÝDú—Ú..>ÎÈ N„rIêxÏzgН4k«(¢Òu”kKl }=,äN¿yË·ºòi_B­gc—ÝFê‡u©ˆ›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Uí/O„®Ò»$ðvõcè+/ujiWkr[±ÆöÜ9ÆxóøP¼º™$ebBøáÖçÜþµsðØË.¡ö"B¸bº€óë[>d|á¤wi˜ÈœVd7Àj¯txI̞ÌÒaÑ#‰•ãº}™ 6Ù8Ç^ƒmdjsYÞ,L«'1çœ`ûÖ‰’Sk4 BD›ðÆCŸ˜“Óo¿­V¼½ß}nè7}·ýNAÇéC½´muszËÃú5²$WÌgºe,G˜T uÀàzšËÖt«kh÷N•žÕÈXçnz{Š¿?“ªB›¦Í¿ÞÉlc©éŒœŒsÐñjëWØÓͫȯ3íÜTc€AÎ;tåQÄT•D¯«ÝGŠÁÐ >T’Z>æêúÃwfkX‰9%E|纽ïÂ,M¤?îŠõÑóGÊŠ)°ýÁE0uþ¬×˜xóþAwŸõÉÿ‘¯OºÿVkÌxD_ïà”êÖ{DWQùNQ\Àü¬)à÷Töú{\i——Ë*„µ1‚¸ÉmäŽá@wT]Ok2Ím4Ê¿vHœ«ÜȨ)8 úÒÐË’I$’y$÷¤ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(C+–„“KçAQQ@ ˜  zqJ³”èò¨¨  w"P”'®Ö#?‘¨ÚRÄ’zÔtR²½ÇÌÚµôº½ûÂñéû¢¾¯ 0ÿ GþLÃÿÅÒŠ·áø[ü†õüÿŸõr꿈`ñ=ßÛ-5;™9 "lË{ÇÏ9ã·ÐõËø‚ÞK]vînÍÜi›ï1 ›“ÈÎ=Emÿ±ñ‡ý?òfþ.øV>0ÿ GþLÃÿÅЕ­ä6ïs’®¢k»Ko hbçL‚ð³\m2K"mùÇMŒ?Z—þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.˜°Ñ¶¥©IiÿÚÒÈÁœÊ“,~PÜ#.¬»žøïÖ²¯ä{Û?°Ékp«lòÁ#!ÛÎpÉÈ'½Cÿ ÇÆôÿɘøº_øV>0ÿ GþLÃÿÅÐÕÝÁhqu>²ºš·ö"ÚŸ³y¸Ø%Ú»<¿Cž¸íœ×œWq¨øƺ¦¡-äú2,’X%Ä@tÇj©ÿ ÇÆôÿɘøºIK•Öÿ±ñ‡ý?òfþ.øV>0ÿ GþLÃÿÅÓ’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*÷ÿǤ?îŠòßøV>0ÿ GþLÃÿÅשxCþ=!ÿtSB=¸(¢¸(¦.¿ÕšóÈ.óþ¹?ò5é÷_êÍy‡ŽÆtÛ±ë#@•bØÓ-qÿ<“ù ŸÌ>Õ‡©Hñø.åãfG]=вœ|¾ Õ$Ô/ôß [My¨X¬òˆÖû,œ®q°9go¦>”€éžácÛ½•w£'>”ÿ0ûWu«ÞkZF—2, y²°hÝc,¡°ÛN ‡šßÓïõ+¹u-.åí¡Ô-B¸†2c*à•m„ç#ŒÓ¶Ÿ×—ù‡_ë»G@“Ú©GÿWc·š?ô¬¿ IrÚ}â]]Ku$WÓÇæÊrHVÀöAÅjEÿ7õÔè CKERQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEɦŽÞ '•¶Ç—vÆpÉ5ZÛSµºŸÈŒÌ$Ú\,nÿë ÿЭUSÊO3ư²ÈÁ†é#åû§Ò€%¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ¤2J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠÏÕô‹[Û+Æ[y/$…‚HÑ®íÛp¿1ü+FÑ.ŸS/ªéÈmÄNM²A¸•ÇžÀó]V.ÿç•¿ýþoþ"Œ]ÿÏ+ûüßüEa<<'57º%Å0EoÅIkÑBø ã|#Ŭ_îŠëä–x|ÑGå¼É!%G® Šä|'Äýn†wÐ}ÁE}ÁE0uþ¬×x¤n8õ8¯EºÿVkÏ|H3qõqü躲ÿ}¯ýqOýTõ—üƒíëŠè"§ Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ô4´‡¡ êAÐTt²Ê ·yJ»RÛQK1Ç`SH *[Êq"IµÈÛ…·~šçôsT¼Ô¦‡PÓîaŠR^kgQÀÄŒ9Ï®}«¤„¶J{ˆ×›…0+›«ï䜟ãQµÕÏ÷ÿòF_ñ«ºÆ™§H±ßj6–®ã*³Ì¨HõšeÖ«akl—ß[EŸrY%UVúpiQœ"÷o°Ê¸÷É8rÞ,ñ‘¢]C¥]ÛÜ\¤ÖÁþUWWVf$°äOã]¢L²ªÉ«£ «)È#Ôñ‰?'ˆ­BŒl¶e_`'”úTT¥‹–E)8ê‹£ÄÞ€MiÚ‰F¼Çó>\ä™9çŒS.d[‚†%±Æx?ׯlÏTB csÔŒ;ri¼-7£i$vI}£¬²ÏöKfH¹>[å7mÉõÅF— A,"Î䤡CrÍ…9P¶@¦‚¿ºeP­†ÜNO'?—ô©j§€§o¯˜£ZLÜKí;ßµ­À›q~¹PÄ`°]Øß¨Òm ›lî±$oS!*¾ðQ¿ ŸlV=ŸÔé÷y^ÖFýÖ§¤^,Bk{¬Åþ­‘Š2ýXÖ£º¼Ñ/B ín‰Xü­Ë!RSû¤†‡×5‰E Mm¼=¬w½°7ðÏž8£5£ ’Π9/Àô¢±}"ÆÈD°Ï,ÞA„É(Þ¸=p¥ðî+6ŠT§kjÑî[´[_:K™Fˆ¨B…·¤c×ßè+ZóVÒoÂ-ս̈§; Ÿª†Ã~9®zŠ%„§'wpU:F×4Ǹ†v·ŸÌ„2Æp>Pqž7c°ªæÿG7¯x"¿Yƒ1IÝUˆ ¨|ž•‡EJÁR[_ﵑ¿§£Ã$RGk:¼Lì­ß/÷²wsŸoJIukiíÞÖçËžO6@¬T–È9ÈlŽ@éX4Sú•=õûÃÚÈÜ7úCZ›gPx™·÷ÄöÆKçÝ)n5 æa{IÕ!ÊýÙAŒ``@Çj¢©SóûÃÚÈèeÕô™¬…›ÚMöp„ Ð:cŒ`t¥´Ö4»Ù-à¹Ûs3ìÇÔ³1'¥s´Rú+[_¼=¬¸ï4H®ÍÒÚ\ù»ÙÆç,ªÍÔ…-€NO P—º$R[¼v·HÖè#Œ«‘òŽ€á¾aõÍbQOêtû¿¼^ÖFåõö‹¨¸{›[¦m… G)¹Oð¬2==µ=Ä¡­g"YG÷eÆÓ÷»m•`QGÔ©í¯Þ?k#hÝèm+Hö×nìAÌ’3c Œ¿  tª‰-ˆÖEû´¡F•bŽ2£qdæB¹ç¨PMP¢šÂAuxVÍåÔtTŽÅœÅ!‰¡E<€ŒŽ[žƒ­2;Ý;Ym~ÍtðJd’Bã¦71ÇáŠÄ¢—Ô©÷x{Yž«¤Ø,‚Þ ¡æÎ]Ë–8ÇVbzTk}¢$ ÙÎ#x» õŒgï{žzÖ}JŸŸÞ?k#tßè¦áç6·Ý68Ýò¸Æ9]Øïﵑ£e&•œ°]-ÍÃK7œÏÊ•`IrÃ×vjújº\~S$7[áFHÝÛy±žKsÐu®~ŠrÁÓ–÷ûÁU’7bÔ´¸ô¨´óÙ†4TNÆ8ï•`GáRÚk:]Œ{{…BKüʼnêI-’}Ís´Rx*O{ýáídkÃ7‡áGE²¸exÌX‘Ë€‡ª®æ;GÓ$š%»¬‰mv]\HIÎà¥G,ç±#+ŠS¦ú¿¼=«6å¼Ñ%@­ir6ÈÒ+#•`ÌrØ`ÀŒúgß´èa mviæ1Aއnü=H¬j)}NŸw÷‡µ‘»¥¦G¥Ã§”¼ò¢EPÈÛã¾U¥·Ô4[\ù6sÑùmŸ›räžrÜòÄç¯5ƒER§ç÷‡µ‘µ%Þ‡$0Dm.€·]‘29WUôÜ8üj6—@"0-o$~P 3.W$àáùäž¾µ“E?©Ã»ûÃÚ³­±Õì¥Qem‘¨…Õh  !ãƒíG…x‰ahŸò_úå/þ‹jÞð¿+ZT£IZ$ÊN[äpQDpQZ’2ëýY¯=ñü|Åÿ]ùס]«5ç¾"ÿ˜¿ë¢ÿ:äkÿ\SÿA=Aeÿ û_úâŸú©è¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¤= -!èh:t¤’ÚºE1†FR@*{ %¦ÃÿS¸ŸÍ«˜ÐÄ’êrÿj]Ê-íÉFVŠ0&nÅHPvãœý­tðÿÇÜßõÍ?›S•ÖRáüt¢Þ{[û,å¯"2)g`y¬ÍòÎÓÃpÀ,íîï…ÔöößtÇ#n%N>XýqÓ滋í#LÔdY/´ëK§A…iàW zEAy£éwPÅÆ›g4pŒD’@¬{8ü)-­ýoq½]ÿ­¬RдåÒt{k%”Kå–^„’IÇ Éâ¼·âA_‹#þX?áûù«×­­-¬¢X-mâ‚IÄT~¼â2+kðîòÅûÿÓy©ß[ŠÚbŒ©lá‰ã,f6Œ6Ü™_^©k‘òñþñ¤Â®HG9 p_§?ý¥&·-*°}¤œŠÕ°†HePv2|Äúä¶Gá×ô¬Ë6‘˜üªØ#ñÇƶ TV-´¨Rp}sôþ´£¬’)«!RbÚ†ß1Êî?.xÈsøUú˳äÔ¤“~ÄUÎÑÎþ߇cøV¥zÙ¬*B+¤WêcO`¢Š+Ë4 (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€44Où /ýr—ÿEµoøcî­ahƒþ&þ¹Ëÿ¢Ú·|1÷GÖ³„ù›òv5©IÁE¾ªçwÜQÜV†C.¿ÕšóßÇÌ_õÑz×ú³^{â/øù‹þº/ó êËþAö¿õÅ?ôSÔ_òµÿ®)ÿ Šž€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ CÐÒÒ†€#©AQÔƒ ¤Óaÿ¹¿ëš6§Saÿ¹¿ëš6¦æ¡—¥LjzR¹ûÕãßTBO_%ûÓykØOÞ¯øŒÀx‚úâý¿é¼Ô ä5+ƒÊ¢Í¸ónÜcnq¸ûóš—#jŽbN0A+œ{ãÔuJ¨«´…°êPɺ%ÝÃ!çpãÓž¾µ¹k©E$’EçǼ"1ÁaÎ$d‘Y0xjêTFià-drB¸ÇQ޾´ÛÝæ¦xÌŒ¹]Œp„íÓ¥UKÚ.Usf©rÙ殌Ψo!|afSž\gðí[5Ëèi$w,—;‰Áã¡®¢½ Öre)+h´9¡mlîQEy……Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Z'ü„ýs—ÿEµnøcî­ahŸòõÎ_ýÕ»áº>µÏCyúþˆëÅ|4ÿÃú³»ƒî (ƒî + äuþ¬×žø‹þ>bÿ®‹üëЮ¿ÕšóßÇÌ_õÑwV_òµÿ®)ÿ Šž©ZÁzöVÍ Ä …0­$|£¾áRý—RÿŸ«oûðøª±EWû.¥ÿ?Vß÷àÿñT}—RÿŸ«oûðøª±EAÌ$’ †T·'Bp}ºž€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ *)®b€…v%DU,Çè4Csä„c¸uVR¬> ó@ÑEQEQEQER†–ô4H: ޤ ›ü}Íÿ\Óùµ:›ü}Íÿ\Óùµ0'5 ½*cPËÒÏÞ¯ø‰Î¿\y2èùkØÞ¯,ñΟ-Þµ¡9ÌH?ëåö¤Æpe“ŒþX¦þFˆèúÖ‰ÿ!ÿ\åÿÑm[¾û£ë\ô7Ÿ¯è޼WÃOü?«;¸>࢈>ࢺA—_êÍyãæ/úè¿Î½ ëýY¯=ñü|Åÿ]ùÐÑׯ¬5m#OŽm:â+¡}‘}¦4)“!;ˆÚ?Â8ïš³©øšæ zÊÆÂ¤¶7‰kw<™ùY”°DÇVd“ÀÈHnt}OYþËRš|66íëršãå•h “‘ÇŽÔš­¦¸³–Æ{¸‚_ ©‘¯¦ AÜXªç‰=F;óDz_¿ùÁÖÝ¿ÏþÑê3ÝÛY<–Vj¸à,f@ƒêIè¶OµUðÖ§>³á»Få#I®#Þë!AÉé’MZ³æ9ÅÿÙ·[Éò7cËþÙþ/\qU|5¦M£xrÇN¸hÚh#ÚÍ%IÉé(@Lä+?ýp‹ÿB’²uYé×jÐÏ4‰þ^БœeˆìGOZÖ?òŸþ¸Eÿ¡ITo|;¥j&âæ×t¬,²ºg»HÍgUTqýÞþfÔ%/Þ§o#3þk?ùò»ÿ¾¢ÿâèÿ„ÚÏþ|®ÿ憎øº·ÿ†‡ÿ>oÿ2ÿñTÂ!¡ÿÏ›ÿàL¿üUsò⻯ëäuóà?–_‡ù•?á6³ÿŸ+¿ûê/þ.øM¬ÿçÊïþú‹ÿ‹«ðˆhóæÿø/ÿGü"üù¿þËÿÅQˊsà?–_‡ù•?á6³ÿŸ+¿ûê/þ.øM¬ÿçÊïþú‹ÿ‹«ðˆhóæÿø/ÿGü"üù¿þËÿÅQˊsà?–_‡ù•?á6³ÿŸ+¿ûê/þ.øM¬ÿçÊïþú‹ÿ‹«ðˆhóæÿø/ÿGü"üù¿þËÿÅQˊsà?–_‡ù•?á6³ÿŸ+¿ûê/þ.øM¬ÿçÊïþú‹ÿ‹«ðˆhóæÿø/ÿGü"üù¿þËÿÅQˊsà?–_‡ù•?á6³ÿŸ+¿ûê/þ.øM¬ÿçÊïþú‹ÿ‹«ðˆhóæÿø/ÿGü"üù¿þËÿÅQˊsà?–_‡ù’é¤w]ê6Pe²‚*ñœã©'¯z–òì²¹ 3Hc!J’Wkg8ê õªQÛG¡³ÛÄŒ–²É¾2$cƒ´ g9ã={ÔÐ3_^@Qs¼…ݘ–ÚÃç'æÍuFö\Ûœ3åæ|»ÿ´[þ}&ü×ühþÑoùô›ó_ñ«»SþyÇÿ|Š6§üóþùD¿´[þ}&ü×ühþÑoùô›ó_ñ«»SþyÇÿ|Š6§üóþùKûE¿çÒoÍÆíÿŸI¿5ÿ»µ?çœ÷È£jÏ8ÿï‘@¿´[þ}&ü×ühþÑoùô›ó_ñ«»SþyÇÿ|Š6§üóþù½×žÅLO8lsùœô4 (調AŠCÐÐu è*:t€ZHãîo÷ùµ-$ñ÷/û‰üÚ˜†N•9¨d€¬~õqÚÞ‘q¨]¬±Æ°ÄNPŠqÞéA&õ2¿á½ÿž°ßGü(ÿ„j÷þzÁÿ}ðªñÜO¥Áª¼ñYȲõ„†XÃyƒvÕä7°ùyïWV÷UX¡·¸–K>ïÊK™DF@› r”Ý‘ü«…âkôh×’ŠçÃ×+*Än-DŒ T.r@ê@Ǹ§ÿÂ5{ÿ=`ÿ¾øS?µï`„Je/W¸fEËùn“€;uÆ3R\j7öÞeºj_h/'¦c/ R ’2Nô}cµ×ôÃ’Â5{ÿ=`ÿ¾øQÿÕïüõƒþú?áZÚeÅÈmBÞyÃZ˵$*˜VàžqÀ¬_í‹ø¬#º«;ÜÙM?–#\@ʹÀÎàîÏ5+ˆnɯëQû8Â5{ÿ=`ÿ¾øQÿÕïüõƒþú?áZzd×i¨Íiqt×*-ã™]ÑU†âÀ”—ҹѓwöÏ²ÛÆªÊ×I'ïØÛ·#:ž;UGY»]}ĸB×±þ«ßùëýôÂøF¯ç¬÷Ñÿ ЊÝañtŽF2Y–;Ü>qÀ…A®ê“ÚÜg%ÆûuG•#1ífÇÌ[æçîÔ¬]y4“ZùéA^ý ßð^ÏX?ï£þÅðõËJѭű‘,¡ÎFzdcÚ´¼<ŒíÍÔŒ ÔãÈ;v§ï‘»ó'­W[u»Ñµ‡‘äWk‰Ë”r¤…ʨ$vÀ}r²m7ø¥AÿÕïüõƒþú?áGü#W¿óÖûèÿ…X½±ŠûÂöÊÆÐJ–ªÈ×)¸(Ø2G#§<ãÒ³¯.¤¹Hæq ¶¶Ó£º×€¿˜NsÎ@ÈÀ òzsUMg×ð'’6NÅŸøF¯ç¬÷Ñÿ ?á½ÿž°ßGü+¥†xçS±—zãz’„Œàúõÿ‰mö¹$k=袂 RK»¶ÓÀÿY¬mw}vò+ÙCK¿á½ÿž°ßGü)­áë•‘#k‹Pïª\å±×Tz}ä–£Wh–îk·h‹;ZËÌ0[i\àuÇ ¤²1G¥æ<¼²ìi‘•Žç s¸’³Zýbº{öéÜžHZäÿð^ÿÏX?ï£þÃáë••b7¢Fª9 u cÜWGu4’é÷ a,M:«*1`T8ãèkMÍÂG=íÄf(®>Ñ$ÑÅæDÊ#<]¸³Ç\óYÃ^]QN”ßøF¯ç¬÷Ñÿ ?á½ÿž°ßGü)^÷VµÓmZIîKÛªvD$Š=¤ÈTÜqß×Ö€¸ÔÂ÷S\©[¸â”©;rq¤í$gÎ;Ó–*ºêSƒv2ãðõÌɾ+‹gL‘¹\‘ÁÁíOÿ„j÷þzÁÿ}ð§ÞiÖwØXÛB¦ðCIóÿñ‚>p{Èê}…Gy<£[¹º˜[Ì–·0á,mùÓœ–=Ýê*–*«z?ÃäO$m{ ÿÕïüõƒþú?áGü#W¿óÖûèÿ…Gh#ÖwJGö„ºŒñNsóÆÿ”û‡­t—ÚúÁh%‚UùKáѽ;ò3ïQ¿X=ŒWþ«ßùëýôÂøF¯ç¬÷Ñÿ ꨣëõƒØÀåá½ÿž°ßGü(ÿ„j÷þzÁÿ}𮪊>¿X=ŒWþ«ßùëýôÂøF¯ç¬÷Ñÿ ꨣëõƒØÀåá½ÿž°ßGü(ÿ„j÷þzÁÿ}𮪊>¿X=ŒWþ«ßùëýôÂøF¯ç¬÷Ñÿ ꨣëõƒØÀåá½ÿž°ßGü(ÿ„j÷þzÁÿ}𮪊>¿X=ŒbÊÆ]?VH¥df0Èß!$ccéZ~û£ëLºÿ‘†/úõ“ÿAz†>èúס›œžíÿñªÞÍ/åýYÝÁ÷A÷Úq ºÿVkÏ|Eÿ1×EþuèW_êÍyãæ/úè¿Î€;kCwöo*h<”ÀhKº;îÊ¥Íÿüü[à;ñt–_òµÿ®)ÿ Šž€!Íÿüü[à;ñtfÿþ~-¿ð¿øºš™±Í’'WCÑ”äÆ€L²I,®WÀ%Whg ŸSß½KEQEQEQEQEQEQEÉ¡ŽâŠU Œ0A¢c·‰b‰B¢Œ)ôPEPEPEPEPHzZCÐÐu è*:Y]ã·wŽ#+ª’±©±ôÉâT2ñ"ì2y¸àGŒãßÉ-0b,„bàŸ˜å¹ ÆHè=©±ø–ÆÌqhvé°vT Ãp®k‘‹V]Œf´Ïfã­Hš…´˜Ýˆøôâ§êTîÜ£ø¿ó.8ªÖßò;ˆ¹ÛšÈ¢©Ñ]?þcö²7ÿá$Íó³×ÌÛ·~þq×ÇJ†}bÊêT–ãG·šDû¯&Ö+ô%x¬j),²ü_ù‡µŸsn=vÚ+‰.#ÒâIäáäV›êväÓ"Öâ†k§d¥É ñ´€®q‚~ïp~•E?©Ñíø°ö³îlM¬Y\¬k>o(‹ˆÃímŸL¯ùµË[–§Ò¡•¢9Œ¹ Pûex¬J(úß‹ÿ0ö²7!×â‚IäK#ºwÞäËÔàO@)ëâHÖG‘tõøÜÁùltÉÇ5E/©Pþ_ҵŸs}|I;ºØ(wÆæËc¦xæ«Ë¬A,ÐÉö¢)LÛ@¹Ü~^O5‘E5ƒ¢º~,=¬û›1kVñZ½·ör¼.Ìί&àʼn'9^y4Ѫéë’º%°ˆ»]¸8ÈÆÞø•dQGÕ(öü_ù‡µ—sY5M:;w·MÕ`åãP¡Xû¸5<~ ‚qo›p8 ¦Ö<ºü_ù‚«%ÔÐK½7ÈŠ)ôx.ŒK±ãk°QÐd¯AVÛ\µ{„¸}*ž1„”YG±Û‘X”SxJOuø¿ó´‘µý¹l'{…ÒâYÝv´ªÀ9]¹¦®³j,Å´Ä’Ù ŽG 2 óXôRúß‹ÿ1ûYw6V°’ÕmŸE¶kt9XŽÒŠ}†ÜS¦Öí. X&Ò`’ÆØÜ‚«Ž˜kŠ>©G·âÿÌ=¬˜õÈã½’ëìŒ]ÑcÊ0Š3Àù}MYÿ„£þœÿò/ÿZ¹Ú)<¼Ö}΋þúsÿÈ¿ýj?á(ÿ§?ü‹ÿÖ®vŠ>¥CùÖ}΋þúsÿÈ¿ýj?á(ÿ§?ü‹ÿÖ®vŠ>¥CùÖ}΋þúsÿÈ¿ýj?á(ÿ§?ü‹ÿÖ®vŠ>¥CùÖ}΋þúsÿÈ¿ýj?á(ÿ§?ü‹ÿÖ®vŠ>¥CùÖ}΋þúsÿÈ¿ýj?á(ÿ§?ü‹ÿÖ®vŠ>¥CùÖ}΋þúsÿÈ¿ýj?á(ÿ§?ü‹ÿÖ®vŠ>¥CùÖ}΋þúsÿÈ¿ýj?á(ÿ§?ü‹ÿÖ®vŠ>¥CùÖ}΋þúsÿÈ¿ýj?á(ÿ§?ü‹ÿÖ®vŠ>¥CùÖ}Íûkÿíe&ò¼¼A"ãv§½hxc úÖ‰ÿ!ÿ\åÿÑm[¾è>´a ¡ÍíѶڦßòþ¬îàû‚Š û‚Šê8Æ]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@6ºÕÚë6út²ÚZÛˆá,ñ>ûc”|…È$Œ`ž*Þ›©jz¥Ü×}Ž2‡‡k«4¯°[9y0x¥] ;ÿ°ÜÜ^ÞgÝùÔ~9â«éz…½—„þÏsª7̸›ì÷ŒZáwgÌÃËgü1]ù¨eéK¥¿­î7«¿õµŽoÂ;‡†í¡òÂîU;JïPǃÈÜ9ükÍ>#j–úw‰ñ%”s¼ÖFÁ` ¹‚W8ãktÁ;úð+ÙÏÞ¯øºá|UmŸùö~ÿôñ5T^¤µ¥ŽV+Øm¼±’0§;R5QŸnãóϽ(¸‚I¤˜ÈÊŸË8ÀôÏ|ÖVðFIýiÂEÿ&µæ3äFÄfÚYàäð1$’pà¥>7ÜGÛùœ|ÿ"Ÿü{ëY+8^?­<\¨?vŸ8¹EÑÆ4¨ðønòyâ¯V_‡>ƒlþïýÖ¥b÷5[QHaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP–‰ÿ!ÿ\åÿÑm[¾è>µ…¢È@×9ô[Vï†z~5ÏCyúþˆëÅ|4ÿÃú³»ƒî (ƒî + äuþ¬×žø‹þ>bÿ®‹üëЮ¿ÕšóßÇÌ_õÑwV_òµÿ®)ÿ Šž ²ÿ}¯ýqOýTôQEQEQEQEQEQEQEQEQEQEQEQEQER†–ô4H: ޤ ›ü}Íÿ\Óùµ:›ü}Íÿ\Óùµ0'5 ½*cPËÒÏÞ¯ø¿øJí²3þŠÿúQ5{ñûÕä?4•Ôbÿ®‹üëЮ¿ÕšóßÇÌ_õÑtúÍì·WpÌ¿èÇn-ßnLJX{€H9÷#µmU9.–(ÞIãkv‚/*5ˆ†O”g-¸îÉö÷«ÔQEQEQEQEQEQEQEQEQEQEQEQEQER†–ô4H: ޤ ›ü}Íÿ\Óùµ:›ü}Íÿ\Óùµ0'5 ½*cPËÒÏÞ®_·ŠmOt¨"Ha•˜¨Y<ùÁAúWt~õyï‹'’=FYª»¹'ÏÄúõâ½ ±7^˳"§Âpò¬bâL~cÊò?¯Ö˜ÅA3éO—‰¤AŠÌ×j¶Üäž9?׆!Þ¬½N;jN­û§9È#üþ5$œz⌷<žj2ppp=k(¢Ë›(Ï×ùš³Utÿøññþf­T½Î¸ü((¢ŠEQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@'ü…þ¹Kÿ¢Ú·ü3Óñ¬ þB‹ÿ\¥ÿÑm[þéøÐwÜQÜP.¿ÕšóßÇÌ_õÑz×ú³^{â/øù‹þº/ó êËþAö¿õÅ?ôSÔ_òµÿ®)ÿ Šž€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ CÐÒÒ†€#©AQÔƒ ¤ÒCÿrÿ¸ŸÍ©i!ÿ¹}ãOæÔÀ˜Ô2TäTN¥ *Ÿ½\~»¦Ãpæî{Ô¶Š3"³HÑûçä’G­vENkñFæÐ¤1²å®F##›œƒî+ Då®WmQ¤oS2ÛA¶¼ÌµÕ"ž<ãtJgê¦ÿ„_þŸ?òÿ^³îöÐk΋~Zæ1¡ƒ8Þ>ñ<‘jr\ʶµþÎ’ókÍovÒ˜“fv™H øç¶qšàu«½T¿þF¼ê‹MáØÖt„ÞŸ1ÁeAÆ3Îp:Š“þú|ÿÈ_ýzΆúìÚ«XÜÍ9_y$È_~×P‡Ÿ¼@éšë1MŸ¨]OhË’S33$(ê RrOj=¶#noÁw·`å‡cGþú|ÿÈ_ýz?áÿ§Ïü…ÿ׫zQ–)u;Q,²­¼ÀEæ¹vÆ­Ç“É=kŸ[ùÅ“=½õÌ—fÊg½FŸ&@¹ ÀTGˆ“v—à½JöpìjÿÂ/ÿOŸù ÿ¯USH±’èÚ¦³l×b]¥ÁxÝšÑÒƒÛj³Ú‰ç–mÀM+HU‰`pX“ŽÏùù»ò~Ók+G«3‹DCçÿ¬<ç'œôµQ¯]¶¹¿þD¸Â×±­ÿä~w“ý žnÝÛ6 ØéœnéOÿ„_þŸ?òÿ^¬Em -wŠ0­-¡gaÕŽñÖ³¼I©5½òÇ ñ,nŒ×m|·EŒ$éÎ}jc‰¯)$¥¿’)Ó‚½ÖÄÑøn9T´wêबyÁuõ¦& “Í _åáÇ™ûž##œã¥Yð÷Ù’{ØÄÍöÁq1’™ŽÕ2Âp2äj²­Ì¶WPÅm,þf¡(º2ÙžÌèÚ:ô4}f½Úæü½œ; ý…mö_µjÃö|gÍÀÙ\îÅ#è¶qù;õxÏÿU¸æ»ósøUœfè¦ægÓí#Iˆ‘–6Q #o]æìwô§Ý\-®dÔ£ uy¦F¶êS¤ù²ª=rTãééZ{j÷ø¿þBå‡cSþú|ÿÈ_ýz¦º^œí*¦·jÍ-(I@:“óqzé-.Exwîš ©7†ÚãÁ¢]*ßµ­äW¶b7º/11oºÄps“ïÅeUvå·’ÿ"½œ,жº=éai¬[Üå¼­¯·ë†¡4‹9$#ÕcÈå¢n€É\ƒ€qÚ‰Õî<7y¨ÊofRîƒ%`m™?‰¡nk‘Î."‡P-'UUÞ2»±´q–µiõŠÏíytÿ/2\"º¿áÿ§Ïü…ÿרÛñ¬é ½>c‚Ê<ƒŒ gœàu­wsÖ“vö÷‚ ¡ãóØ#eÈ'ŸB:×;oªB6fœZÅ ÇœÉxò¬„y2>rz=ED18‰_ÞüNœCCþú|ÿÈ_ýzOøEÿéóÿ!õë7í/‹j>rMu›£öö"*HC(ÜÊ3·'×Ó5¯ ]\·Úâ_&_*H¥29Ûó7ÀÎ;S•|DUùºÛd( ¥c94Í=Ä'ûb3ÿªWP¥ùǶM,šfÏÙ¤×-R|…ò˜¨lžƒ³OÔntÇ‚ÏLi­-Ò[xÝæ•ÕHˆ}йêN=9>•©tó]´µ81AºqýæÎÔÿÙÔ oYo'×¢ÿ!(E­»í @— nÚœk;Œ¬e@fÃvMKÿ¿ý>ä/þ½SÓî%ƒZe%”\Û2.V!»kç±€¸ÉÇ8­»Û©®´o?KW˜Îc&‚“Ë Ärqš™âqisoä¿È¥Núï£YE M&±n‘+gl :‚wuö¢]Ê£–mbÞ8äûŽû@¡-ÍEe}o¥h÷ìÖ _»_ù¿ÊŽ{þú|ÿÈ_ýz?áÿ§Ïü…ÿ×®†Š>»_ù¿ÊŽ{þú|ÿÈ_ýz?áÿ§Ïü…ÿ×®†Š>»_ù¿ÊŽ{þú|ÿÈ_ýz?áÿ§Ïü…ÿ×®†Š>»_ù¿ÊŽ{þú|ÿÈ_ýz?áÿ§Ïü…ÿ×®†Š>»_ù¿ÊŽ{þú|ÿÈ_ýz?áÿ§Ïü…ÿ×®†Š>»_ù¿ÊŽ{þú|ÿÈ_ýz?áÿ§Ïü…ÿ×®†Š>»_ù¿ÊŒ[=ìSµÇÚwìŠO—ËÆr„zûÔþéøÖ“ª—þ¹?þ‚k7Ã=?ôðUgV›”ÝÝÎz±QvGuÜQÜWa˯õf¼÷Ä_ñóýt_ç^…uþ¬×žø‹þ>bÿ®‹ü躲ÿ}¯ýqOýTõ—üƒíëŠè"§ Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ô4´‡¡ êAÐTt²™E»˜4ÛNÀä…'¶HÏ€’¡•|É$e¤9WhúŽýUÏè:^½§jSK{qm4´Áff;û2‚ LzcÒºXãî_÷ùµ0+[ŸîÿääŸáQµ­Ï÷?òz_ð¨õ%ަº|z}íåÃCç‘l¨v¦q“¹‡JEñ„Ú)ÕCº[Œ«+¡¥6õÝž1ëK¥Çä#ÛLݘ;¯Ûå9öÁ?pÞ5ñ…Þ‘¬ÙÛiðÚýíOßFÙS½—0Æ6ô®çLÔ¢Õ´è/ I9—r¬€÷šòO‰H[ÄPð!|óÿOÒ8ÍrÉ\9šÕ>"êÅö¬'ÜÆã?øõ,þ3Ô¯cËmϽ˜žHÎGº¸5Ç’ÕŠ¨\íã¯ÿ^­®FI ‘žµÕ¨§¤FªO¹ÕXxÎöÚ×bÛØÅjÌkúç$–'Ü“ë[x²ñ¶†™¶‚ãñù¿©®.Ȇãr° †VêzVœìc¶>ùa·§®¯bkZ*Uª(¨Ý±N¤ãÎ[TøÝâ;MZòÚ,Å ïŠBÛC3‰1œzUOø^Þ'ÿŸ #þüËÿÇ+‚ñ ‚_ê² aï&n3Ýϯ5›YË E6¹QJ¤í¹éÿð½¼Oÿ>Gýù—ÿŽW¯¿ˆn£[œ¥¾a±ÇÞP{û×Ê5ïZÞ§b4È¿Ó`ýû¹›æ~F3ׯҴ†fœLkV©£:sâëÐŒÂ;S@ßãQ'ŒuIØÅi„˜¢€­’6#{Õp^lʬê̤ƒÀ>”èu„G 0dvÞA9òò¨ú.‘G"­]^ò;ù«GùCÚK¹³ÿ -ïüòƒþù?ãQK®O4ÐË$3ÂK' €HÆqŸLþu—E5…¢¾È{Iw5¢×î dVöȹ-€§©9'¯©§ÿÂK{ÿ< ÿ¾OøÖ5¾«GùCÚK¹³ÿ -ïüòƒþù?ãGü$·„`Åoÿ|Ÿñ¬j(ú­åi>楶»qinC p«†8zT¿ð’ÞÿÏ(?ï“þ5E7…¢õqi.æÁñ%ã)+rÁù[üi"ñ Ì1$QAl‘¢…U pè:ÖE¾«GùCÚK¹³ÿ -ïüòƒþù?ãGü$·¿óÊûäÿcQGÕhÿ({I÷5\ž;™nV<ÙB«1 xÀëÇSùÔ¿ð’ÞÿÏ(?ï“þ5E?ªÑd=¤»›?ð’ÞÿÏ(?ï“þ4ÂK{ÿ< ÿ¾OøÖ5¾«GùCÚO¹³ÿ -ïüòƒþù?ãGü$·¿óÊûäÿcQGÕhÿ({I÷6á%½ÿžPß'ühÿ„–÷þyAÿ|Ÿñ¬j(ú­åi>æÏü$·¿óÊûäÿð’ÞÿÏ(?ï“þ5EU£ü¡í'ÜÙÿ„–÷þyAÿ|Ÿñ£þ[ßùåýòƱ¨£ê´”=¤û›?ð’ÞÿÏ(?ï“þ4ÂK{ÿ< ÿ¾OøÖ5}Vò‡´Ÿsgþ[ßùåýòÆøIoç”÷ÉÿÆ¢ªÑþPö“îlÿÂK{ÿ< ÿ¾OøÑÿ -ïüòƒþù?ãXÔQõZ?ÊÒ}ÎO×.o.ŒGGŠL•<#_j»áŸë\þ‰ÿ!Eÿ®Rÿè¶®ƒÃ?Öµ…8ÓVб.MîwP}ÁE}ÁEX†]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@Õ—üƒíëŠè"§¨,¿äkÿ\SÿA=QEQEQEQEQEQEQEQEQEQEQEQEQE‡¡¥¤= GR‚£¢{x®­^ÞtŠUÔ÷Óaÿ¹¿ëš6®c@ð|ZF§-ܦ) ¶»Pª{·û]¿?^:xãîoúæŸÍ©ÉøŠÝá/Žâæ ]­MŒI§,ÙßægÇíØñUtÍ Wm6̤‘ZÃi<Ïmo{n]Š“ò3…eùÀ-××'šïMC/J],7«þ½kÂ]ÚøjÎ+Õ *ƒ„òÊ<O_ʼçâ:×áÁy/ÿ¥W±Ÿ½^;ñIñ8b’üúï56îÄqåNÌÀ1N2‰œ·p“ŸÖ“dŸßoÓü*/´Cî啃.IùNG?Nxô¤îضYƒ§æ/‚0IÛ¶¯_:’±•f# ^¤ŸOʨXÞ$²²,‘H…AR­É<ƒý?:±râ;øç9 ˜,¾3ôçüäש’Æø‡'Ñ2kh‘ãÞ's'‹5—8Ë_Nxéþ±«*´u÷Y࢈>ࢀuþ¬×žø‹þ>bÿ®‹üëЮ¿ÕšóßÇÌ_õÑu:>¥5ÕÌÖFÐ$¢ãÌÎöhÕŠíÇw=ElU{U°· Z$'Üíú ±@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@!èiiC@Ôƒ ¨êAÐRi°ÿÇÜßõÍ?›S©°ÿÇÜßõÍ?›SsPËÒ¦5 ½)\ýêñ߈»á!‡8Ï’ý¿éâZö#÷«Çþ"ÈÁ§’ýÿé¼´ ãX u:⢚ÖK¿š/,yc$¶¸±ãÓ­O°éŽi†1· -Œ ®NIè;äôã“Ó½kF<òQî+òê[´ðåóC2™a…ŸqÛ!'“èT?úÝ*¬Í iK¹@ÛÉž•Ö²2\%†Tb»Ñ™J‚?Ù?§â+—RXò6œœש”aãRnJúˆÄMG•õ<¯WÿÕ÷ý|Iÿ¡§Wuù _ÿ×ÄŸúªUåÕþ$½YQØ+± »øJã«Ø®ôÇK%HáT€9Bùò@Çáº0¸gZ’ Ž4){tÅKå²õR;r+q4ù\àFÊr@« ¦;d1 ;þ5ƒ²2ö¨ÁòÙN6vî*æ• VÌí ÓÿB».Ž„#NHc üêK+¢º€)ÏãB’h9Ý΢Š(¬Ž¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(CDÿ¢ÿ×)ô[WAá¯êkŸÑ?ä(¿õÊ_ýÕÐxkúšî û‚Š û‚Še×ú³^{â/øù‹þº/ó¯BºÿVkÏ|Eÿ1×EþtÝYÈ>×þ¸§þ‚*z‚ËþAö¿õÅ?ôSÐEPEPEPEPEPEPEPEPEPEPEPEPEPHzZCÐÐu è*:t€Zl?ñ÷7ýsOæÔêl?ñ÷7ýsOæÔÀœÔ2ô©C/J@W?z¾{øÉâ;ÍÅÖ¶öé#Z»Ÿ1I973ŽÄzWЇïWÍÿô­FûÆv’ÚX]\F,ÙKÅ 8í3ñ:ò(ħ޵4?ñïfG¡Fÿ⩲xßQôk%Ï\#G¦ YŸðkôÔ?ðÿÂøGµ¿úêø ÿáN/•Ýn'©»Äm^8¢ìÖL`–WËý~劦¡ÿ€ÏþÂ=­ÿÐPÿÀgÿ ÚŽ"­ºrµÅ(©üH¥s;]]Mpà•˰^€“ž**Òÿ„{[ÿ >¡ÿ€ÏþÂ=­ÿÐPÿÀgÿ É¶ÝØÌÚúKT†!¥äÃÜÄ Hpy#žçóÿü#Úßýõüð¯t¼2ºÜbI_Ì*Ý Ï^3íî+ÒÀ5ìêÝÛOó1ª®Œ p~î*(Žd—ßú«ÞrîŸ=² F–×Aœ´L6~P}þ•ç=ÌXù;N1òùR[–ûL\ÿþtm>?ÕIÿ|štL.c&)J9¦¶ÍÚ(¢ ì (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€44Où /ýr—ÿEµtþ¦¹ýþB‹ÿ\¥ÿÑm]†ºŸ÷wP}ÁE}ÁE2ëýY¯=ñü|Åÿ]ùס]«5ç¾"ÿ˜¿ë¢ÿ:ë¡Õ´Û[[Xn5 He1Æ»$™U³´`ž¸#ó­&eU,Ä$“ÀÅM¥ß\s`dèðo+;Ü#Œ)Ç'îôö­¶ßÅ¡ý–ÚÆáïãÓVTicýÛI· 'ïgµ+éë¯ùÚÛúéþfµž£c¨+5•í½Ê¡ÃeW }ðj÷‰t»;›¤»‚ä[2¬© ÊÅ70^yã“ßÒ¹K;FöïTh ÿ›>’aÝYý” rp£  õëÏ֮ݽð„¶6:-ݽÄÂZµ)»c©*§sÁèNi‹úüŽ‘5ˆ..¬ÒÊ[[˜.<ÏßGr§@á@ûÝyÇJž=JÆ[dzŽöÝî“ïB²©uú®r+ G}K\Ñn­lî¡…åXËnÑì%F q“Ó=k"ÂÆsk¢é©¤ÜA¨Ù]¬—Mì$èÛóÐzóÒŸTƒ¥ÎÈjúk^ý‰u CwœyeߟM¹Í\®}.vѵ'2¯í¡4GÊ;öùÉó/Æ3Ϧk¹¤¶¿õ²­Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@!èiiC@Ôƒ ¨êAÐRi°ÿÇÜßõÍ?›S©°ÿÇÜßõÍ?›SsPËÒ¦5 ½)\ýêæ5"ßPœK+ʬUùkŸOzéÏÞ¬르„ÊñÍ"ù²‚!Œ»­~ÚåÆNQ§x=Mi$å©‹o¡é·HÏ ó²«´dä 2œÊúŠQáë3pÑ¥€7˜Jí9Ï޼~µš¶²Þ]BÂâk'’æCˆ»+;å çîçèOjŒé÷¯jb¹·šBÖö¨Á”¶@œ’¤÷!HÍp{J¿ÎkËÆ×ü#V_óÖûè…Q¾±Ñôâ~Õ-ò¨]ÅÖuÝ•oO)¤ÞÜY­¼‘Á5ØKdUÂÝ$³Ý;Õ­N).¯,-¼¶6æS,ÌË„PO» …^ª’NNÅrFÛoa¢Çx–w8™°Çž€¸ö戴ýkÓf—W>Ì*@luÃÁDZ¤¼·¸77¶Km3=Õì3Ç2¡(lÉ-аðyéVc¸šÛ½ÜJ¶åã·ŒÚÉ´ñ†rÛvœŒ€3ÓÜÕ{j–¿3Ø\‘½¬KÿÕ—üõŸþúáYâÓBkSr——2EæK’è.OÔT6Z~¢ ¹`dyã_³™”Eo»˜w;[õÿf§¶›PÓ4»¥&)$¼dÉG˜F§ø¶…¨ÇsÇJ~Ö¯óÜ9cØImt(­b¹kË“ ªY¿©8S€;ç¥Y—EÒ ´7R]L Úx`A¦09Í2âU¶Òm,,ã½[yƒ,³ý’Vt_â%vä3pHÇSVµXžX­ —Ë-ª¨ÂDPçÀ ê:v©uê]{ÏV ìW´Ñô»èšKyîX+m`Ãk)ô ¨ ýh´ÑtûȤ’7º$xˆb¹%XƒÛÚ¤Ú]H·..¯!Cs¼K$*²N»Wï+/Æð+>ÚËn¤¦ ã¾òÉ-Á…•L%˜ãy`A4ýµMW;XÚö.ÛèúuÃù[îã˜F²4R`2†Èãz³ÿÕ—üõŸþúáYš=šÛÞiï{§ÈÏö(cŠF·-å8-N>CÈ늟]Y£ŸRŵĢîÀC†&œàà}áÉâ‰U«ÏʦÁF6Õ?á²ÿž³ÿßCü*9¼=g {ÇÚää ¨TžN3Èè:Õ+5Íåà´st—vÞL¡혌6÷~ö{uªòZH—Q[YÉ*É:H× jé >z¥ˆùÆ2A§µ]½ÿëOóQ¶ÆÏü#V_óÖûè…ðYÏYÿï¡þqÇ­Z ­¥‹_Ê^vŒáãÚû@~˜ÆÞ3Æ:R[éWVÚ}·Ø-žÞê}6U™•J“/Ë·wû_{óÖiWùÿ­È|±½¬lÿÂ5eÿ=gÿ¾‡øUxt]>{›¨î·[°VÉ\T7{Öl|ÃM»0G.Æ0ù¶±ÙÉo¹U²øÜÇsÈ8ëŠÖÐ Š)u&¶´’ÚÚITÄ EŸ… ¹¥*Õb›çnßðF-­YÍH~×a’ ¾Ç’- MšY£ŽyËÂÁ$ýßB+4™&ÓY¦±Ï“€˜Îä”8^á¾ïNzUÉ-eûF®RÍÆ¥<{­®|“ÓÊQ3SxȦêÔ»÷ÿ­F:hhÿÂ5eÿ=gÿ¾‡øQÿÕ—üõŸþúáX°ØJšeÛB’ˆØÂ&¶ŽÎK|¨oŸ˜îb¹qP˜ðÝ >Ô¥‚j d€Ú1|¡Ö T‘»Ž õu÷ßõoó£Øè?á²ÿž³ÿßCü*9ô>ÚšIn¶/]£qü‚’j¥®–­&–—1›h£¸qæÛ2,d²•[%p2Np+h_Ã>—¾UÏ“4a‚Æ„È{.NyíQ*õ“ÒM”¡º3-4}.ú5½Åà %N~Rê*?Z[-O¾²†ê7¹T™¨b¹úñV4^K‘åÌ4ìÐ Á rÙç®zóŒVŸk%­­»XéS,ñZH.ÖHZ5™°0§ o9ôÏZ¯mQÝ)½Ë47á²ÿž³ÿßCü(ÿ„jËþzÜßCü+ ÏNiçXd²Ýbב¹ˆY<1ãÊ|üœ íç¦jqeå‹t¾±ž}:.Qa4›ÿÝ£’6䃌Óu*§nv$£Ø½e¢é÷öPÝF÷*’®à®@üªÇü#V_óÖûè…bÙÚµ£i2›)%!‰)­XˆW',²c@<ƒ×¶õ‡Vðê͉Ò)‚Hª 2œd9£Ò”êÕRÒn×cµE »Æ"{‹± O0„œ*䌒¨@´·6-ªDÒ]Ü7œ»£1œz€ªN=êœv:Ñ‘íQôç!#„,nDòá+‘ƒŽÝW­HÓ¯ »bÒ[(áEXYÞ¤¬ nç#œvªuj/¶Ûþ¿®¢å]¿­&·Ð +æ\Þ|щx…›j2ØO—¡ëŠÐOØKÈ“ÌÈÀ`ÊA½+f¿¸œOrugžÄ#}–о[{ü§å;x#¸ë]>’’ǤYÇ<+ « «F½Ò¦¥j±ÔŸõòŒ[µ¿­ _ðYÏYÿï¡þÂ5eÿ=gÿ¾‡øV͇֫1~ÎŒoøF¬¿ç¬ÿ÷Ðÿ ?á²ÿž³ÿßCü+fŠ>µ[ùƒÙñÿÕ—üõŸþúáGü#V_óÖûè…lÑGÖ«0{8v1¿á²ÿž³ÿßCü(ÿ„jËþzÏÿ}ð­š(úÕoægÆ7ü#V_óÖûè…ðYÏYÿï¡þ³EZ­üÁìáØÌ¶Ðí¬äiã’bé˜ F9B==èð×Sþñ­&ÿU/ýrýÖo†ºŸ÷z¸’©M¹;êsVŠOCºƒî (ƒî +´Èe×ú³^{â/øù‹þº/ó¯BºÿVkÏ|Eÿ1×EþtÝYÈ>×þ¸§þ‚*z£möï±[y0@Ñù)‚Ò•'å¶š—þ&óëmÿÏÿ@hªßñ3ÿŸ[oûþøš?âgÿ>¶ß÷üÿñ4fІ ]Ùãš?.TÆå#¡ð?•M@Q@Q@Q@Q@Q@Q@Q@Q@„…’I¨¡º·¸$C™8©¬üO£ßÝ%µ½Ù2HH|N‹!B³ð&ŸÕé*ûs˹{ìßóËÿ4}‚ÛþyãÆ«wO]Mtæ™Òå›b‡…ÕY±œ#i8ô4néÇR:rNÏr§k*DìªØÎ€Ú;G°¥ü«îAÏ.å°[Ï/üxÑö oùåÿʃÄÖpéVW7÷HÒ]nÙö[yX>Óθ÷«Oâ=&=> ãx­ÁÛDfg=ÀP 0r1Å—ò¯¹<»–þÁmÿ<¿ñãGØ-¿ç—þL%/Îö^¥Êù\£'ŸÆºj^•¯Ê¾äò½®`M¤És C>™g,M÷‘çfê ÓìtÛ8#ke°ŽÔǃåDp¸=ÇÐþU¹Tü…gÿ®èRSöínU÷<»™­ä¹" 5‘2F用o¦â!P°€Àá¿øš¢šÍ•µ¼3JÞ`‰ TœŽ;àQÿ &™ÿ=&ÿÀy?øšäµ¶üCØÔéþòþÖÿŸð%¿øš6·üøÃÿ-ÿÄÕøI4Ïùé7þÉÿÄÑÿ &™ÿ=&ÿÀy?øš-CËðcWùâZ’h¡ Koj„ô vÃ?øíH e¸¹oþ&­é¯Zm¼¾[ž5’FXËHçÞ©Ï,6ZŒ°ª°‘e ˆH–§Oº?3[<<½—Ü¿ÈæDÝ­ø¿ó¡# ×Ãñ4*8\7ÿMû|>’ÿߦÿ >ߤ¿÷é¿Â§ØÃ²û—ùuÛñæ?kÏŒ?øßüM[þ|aÿÀ–ÿâiŸo‡Ò_ûôßáGÛáô—þý7øQìaÙ}Ëü‚ë·âÿÌ~ÖÿŸð%¿øš6·üøÃÿ-ÿÄÓ>ߤ¿÷é¿Â·Ãé/ýúoð£ØÃ²û—ù×oÅÿ˜ý­ÿ>0ÿàKñ4moùñ‡ÿ[ÿ‰¦}¾IïÓ…o‡Ò_ûôßáG±‡e÷/ò ®ß‹ÿ1û[þ|aÿÀ–ÿâhÚßóãþ·ÿLû|>’ÿߦÿ >ߤ¿÷é¿ÂcËî_ä]¿þcö·üøÃÿ-ÿÄѵ¿çÆü oþ&™öø}%ÿ¿Mþ}¾IïÓ…Æ—Ü¿È.»~/üÇíoùñ‡ÿ[ÿ‰£kÏŒ?øßüM3íðúKÿ~›ü(û|>’ÿߦÿ =Œ;/¹]vü_ùÚßóãþ·ÿFÖÿŸð%¿øšgÛáô—þý7øQöø}%ÿ¿Mþ{v_rÿ ºíø¿óu"ÚlÚEîŸæY™ˆùOb¢±|5Ôÿ¼kfk¸¥·™I“õŒ÷Oµcxk©ÿxÖô¢¢¬Œ*îwP}ÁE}ÁEjd2ëýY¯=ñü|Åÿ]ùס]«5ç¾"ÿ˜¿ë¢ÿ:è‰.tÔ·imý™‚ÞKß×÷n?ð_þ&’ÑÜoUcž¹ÒuÖæ¸H3 j°\†Þ¿qbÚÍŒúöëCé7çN¸ˆAûÆÖ–íFõÿWæ«nëèk¡û\_ݸÿÀYøš>×÷n?ð_þ&…§õéþBzÿ^¿æUÓm®-õýfêHöÃrИ›p;¶¦G>µ£¸ÿhN@ÜD3×—¨Ü_ݹÿÀYøš–Ó|“ÍpÈÈŒªˆ`¥ŽqÛïwô g7m§ßzÚê×Em!7³^0¸CêTñ± ÉÎâ¬ýßQÕt-Ôiæ‘poU!‚³*ƒ»'§ w®þ£†m¡X`‰"‰~êF¡T}¦´ÅI¤kwͳÝ[ÞJÑj^Ú>Ø¿g‚p[¸ >îzóZÚD:–“usbÚsMm5Ô“-är \–ù”ÙÇ×GE Eoë§ù×_ë¯ùœŽ¢ê§Ãžu¾ß±Çp'ùÔì-÷zsíU£Óu "þßQ6©)ŽêóýΈÆ9\2º’qÛHà×oU¯4ëE/¬íîUNTO¸Û"Ž·Sð…ÕÜ–A–Ç6÷7·RI/œ¸‹ç8þ,œŒŽ8®®›QÃÇ*F£ ª0ô@Vÿ˜Õ·ýp“ù¥Y¨%ŠAsÌ!ÑYv¹ qÜŽƒµU¿°¹›Åš=ìqn··†áe}Àm,oÉÎJæî<9ªy¥&›Gqª Øõ?1”†@ç#;÷Œ01ÏZì~Ñ}ÿ>ÖßøßüEh¾ÿŸkoüoþ"…£OúÞàõVþ»SO¹›Ærê7bÖÞÍaµbÀ噉ã9ÖÝRûE÷üû[àCñ}¢ûþ}­¿ð!¿øŠ:X<˵@ÿÈVúáþ…%;íßóímÿ ÿÄSbI ÒO6Á#…]¨I qÉ=OjåO†ìïâ†åæ¸Þ$Ü#eÁ;@Ï öò¦ÿÂeÿ?wŸ÷Òñ5Ð}Žæ²Æ>î÷*Tzphò/¿ç•¿ýþoþ"¸¾¯±Ôôþ·WìÏOSŸÿ„>Ëþ~ï?ï¤ÿâhÿ„>˵ÕçýôŸüMtE÷üò·ÿ¿ÍÿÄQä_Ï+ûüßüEW§ü¡õÊßÏø¢¬ÑýŽ yÇï ce*§?ˆJ|D]ÞËpWt~ZÆ­ž¤'˜§\éw7L¬ñ@pJÎÃpô?'J°¶×¨¡V ` `3qÿŽWC•ÖÇ`“½ÿ<˜¿çŸêhòbÿž©§yßóÊßþÿ7ÿG‘}ÿ<­ÿïóñ#M;þ#|˜¿çŸêhòbÿž©§yßóÊßþÿ7ÿG‘}ÿ<­ÿïóñ|ƒNÿˆß&/ùçúš<˜¿çŸêiÞE÷üò·ÿ¿ÍÿÄQä_Ï+ûüßüE Ó¿â7É‹þyþ¦&/ùçúšw‘}ÿ<­ÿïóñyßóÊßþÿ7ÿGÈ4ïøòbÿž©£É‹þyþ¦ä_Ï+ûüßüEE÷üò·ÿ¿ÍÿÄQò ;þ#|˜¿çŸêhòbÿž©§yßóÊßþÿ7ÿG‘}ÿ<­ÿïóñ|ƒNÿˆß&/ùçúš<˜¿çŸêiÞE÷üò·ÿ¿ÍÿÄQä_Ï+ûüßüE Ó¿â7É‹þyþ¦&/ùçúšw‘}ÿ<­ÿïóñyßóÊßþÿ7ÿGÈ4ïøÜÇÚNU0|¦ç'ÐÖ†úŸ÷ó­û˜®ÖÒs$p„ò›%e$ô=¶ŠÀðßSþñþu¬60«¹ÝA÷A÷fc.¿ÕšóßÇÌ_õÑz×ú³^{â/øù‹þº/ó ÞÒk¤±¶XàB˜-1S÷Gm§ùÔßh¾ÿŸkoüoþ"™eÿ û_úâŸú©è?´_ϵ·þ7ÿGÚ/¿çÚÛÿÿˆ©( bI ÒO6Á#…]¨I qÉ=OjšŠ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(UÔ«(e#ÁVÏN‚É£ Y¸ŽJAíVè Š( Š( ô4´‡¡ êAÐTu è)´ØãîoúæŸÍ©ÔØãîoúæŸÍ©9¨eéS†^”€®~õ&ŸÿÏÿ]æÿÑJ~õ&ŸÿÏÿ]æÿÑ@ËU_:å£,ʈ¡ˆSŒäžÿ…IQÂÓ§ôÊ?æôÄIöH}eÿ¿­þ4}’YïëeÞx†;íFÞæ‹if.Ñ÷ÿ­^C c‚¿QY×þ1}3ìwkiÌ‘4‘}¹|ô/Œâ2£põJ ô:_²Eë/ýýoñ£ìúËÿ[ük•m]´WÄ·†30ŽkD—Û÷•W®®kCVñTEÍìw–ÖÑÌHòîP/<@äžþÔµöH}eÿ¿­þ5òBX°U ¤õÁÏ¥dè(Z»¹´)l³À‹&mn–â6VÈûÀ G#•ªOüL%ôÉ?›Ð´RHrIíY«›ÈôAk¨màfGp§”à…ãæçŽ3“Å_¢°luëíKK’æÛGo´%ËÀmä¸UÛ·ø™±ÇÐKi®ÞßióIm¤î½‚å­¥€Ü(EaÔïÇ#§AžzP홢êͪÛNòÛiíçh&xpqœ0ê9«>ÃÅ2^\YÓü»+ù;i„᜕üÉ—îžçñ@ƒ­ë£GÖ4¸¥r¶·_3lM# mÀPOSØTòëMmascwnÐÜÝ,;¤G;ºå@«qü\ô¯Ebé!‹S»»´h¥Žh.$ˆb'(Bg~ݹ>™«²jö1 âóàX(kŸ‘¾A·w§wŠiVë÷˜\e‚ÇCÓu[ŸÄË~ÖZFŸöébd™ÞaFeFpIb9Æ(#SQÿmÏýroå\—†úŸ÷ó­mKXž(¬ìî,DS_G6ñçò¶!n |ÙãÓ­døo©ÿxÿ:¡ÝA÷A÷˯õf¼÷Ä_ñóýt_ç^…uþ¬×žø‹þ>bÿ®‹üè©PhgÒmHUf€îGGÞÛcSò‘Çç?…d?‹ÚóÂo¨Z#Áv¾Y`оÅÌxfP­Ç¦jñ³º¹Õ4”€ýžÚW“pþ(“Ï\²“KÖƒeЛM+5¸T¾rlŸl€äd⚣¾ñ•¦Üýžîëd€lFÌ…È(>øªšÿ‰ìt›[¸Öçý:;v‘biœ¥Š‚ëŠÆ½ÐnäÕ¯ç›M¾»µÔB1K}CÉòþ@¬’.ðqÔf¦¾Òõ;í»{4ÞA©D7I‘Z#åˆðÛÈÈàŒ÷©w°ÖçBºœ6Ú…ü¢41#;`õ`8rI' ¤:iÔ$™â¶ ³2Âèź`)‰öÅW¼°/áˆlæ±’íÒ8Ôárã•bF#={V8Óué4ëIç§žÊÿφÞâT2<[Jíg_—xÜH?Lš©|L˜ß•¯â :;ï®|—b ‹IKduÊíÈú‘PK¬µ,æI,¯c™ËÁTÁí֨ꫭjg7ö}üV H&´·¼H¥ÝÆÖ,:ð½UÓ4=JÎßÛíŽmVxîJ¥£tlçðiyŒßƒÄZUÕ÷Øà»9,©ò0W+Ô+µˆôÔ:ö±w!œp/ÙãpU~r\2òO@ó¬Oøv{¬m¯´ëÇ6LLw_Ú ÈÈ$co5ÚÐÖ»{c¨AÖ“²Ê{‘mâáY˺JÐýsíPIâ§K‰$s.+¡h÷žhÈ|…ÎÌr¡Ž3ŸÂ¢UÕ%ñ#Ý_h×SE ¥,ÊM—t2_%=²½U—EÕZÚãC[E6Sßý£í¾jác2 íûÛ³‘ÓôG¥ÿ­¿àƒëoëøµÖ»{c¨AÖ“²Ê{‘mâáY˺JÐýsíW5­Iô­;í1À³ÈeŽ$¤Ø v 2Ø8ëéX꺤¾${«íêh¡”¥™I¡òâN†B ä±ç¶@àw­Ù.n´ù’ëÃëv¢r‚٥Ĉ:Ió`~‘GEý_×`ê6óW¿Óôswu§Û‹“4qG ]VÞÁA.Pc¯¡éSý«WC¥Û›­ø­æSo÷‹”– béúeÍžwÆ‚·óÝo‹L2Æâð?¼výàNÀϺu…^E&‰ç[ÜÜšj̇Ɉ¨eˆ^H'h8£úü€¿g®Þj[Ïk¥oºŽá­ä„Ü(E+Õ·ã•ú ûU­VmZÚv’ØÛÏo;A,[ÀˎÆG#Ò° ²×tßÜÃabðµÅÞa¶Ždf´€»ib9œÞÕ¿¡Eö}8[2{ŒiÙÉä±*Í’NrIÎh¬:íêë¶7úWÙVì?ëp$9Q’òñèM?JÕïõIÝ—O·KšX¼ïµçcÎ͘äïU uFÕž÷TÑ®…Ô¥‘f3Bc·9  9<àdã$û Ž 2æ_Ú^Ûè+¤ˆ™Úêa,é‚6á ÝÉ-Œb…ÐSOJÕïõIÝ—O·KšX¼ïµçcÎ͘äïTšÎ§¨iÈòÚébê¢2Ë#\¬x9 0I8çÞ²-ôË™|Gi{o¡.’"gk©Ä‘ÿ¤Ûµ ÝÉ-Œb¬øŠ=Jîú UÓn.ô ›çX%L¯ž·°;{œuàzÒè‡Õ“ßk×piQêvšjÏfmÅô·"&U#8'⟪øŽ;EŽý-äžY¢óa¶û¬À.ãŸî€:ŸþµT×a›R±ŽÙü2÷@ǹ7Où`Ž»²õ\ÕkÏ ê3é-!Õ.[RþÎû+ªˆÊÊvœŒº’7§#b23zÏѵëÜ_Äl¦µû+ª7 Á—p%‡¯N¿N”í!oí!µ°¸ž8­TµÓH™2t)µGaުŤ\M{♤·†ü ŠhØnÇ”‘×9ê*¥»·õ©1Ù\[OGT»²²³Þ±AæÃ3˵g;ŠñÁÂäcwéL¶×5iµiôçÒ-–XmüÖhïK*“÷U–0N®éPéšöâu¸7³ÍeŠÂ¥Ò%†8L*‚9ý{UÿØÜ[Cyq{Ë»»©%pX.v Èÿd-/ëñüÈ‹OÖµvM2ëL‚/*,²Ãve “ò©“‚~‚·CY±¸¶†òâö=—wwRJà°8\íA‘þÈZ×= u#©AQÔƒ ¤Óaÿ¹¿ëš6§Saÿ¹¿ëš6¦æ¡—¥LjzR¹ûÔšü{?ýw›ÿF5)ûÔšü{?ýw›ÿF5-UtljõÊ?æõb¨Í*[_I$Ì#ŽH‘C±Â‚¥² í÷…15Ý-nâÎW¡ò\ùÑ’ ŒúU/z¡¨øZ[Ë›ó¡P_H’LjÁ]¿u÷ ”pAï[fþËþ­ïòÿ'Ûì¿çú×þÿ/øÒZ νðêÞͪ–»d‹PH÷(A˜äLmpsì8ÇãPIá‰ïäšž¦'šââI!·ò¼³VÆæÉÉ­·ÙÏõ¯ýþ_ñ£íö_óýkÿ—ühÒྵ}¶ö’pÅmäãëóþ•i[:”ßõÆ?ý ê°¿²ÿŸëoûü¿ãRZ8žêk„æ"‰·f ±$z›ö4ÄC®h–úõŠÚÜI**¸‘J`ŒŽ™RaìAV[mfÛ×ÖÑiî„L–†Þ?'9àìq[´R¶ú¦s·ú,ÖÚ^Žºl"Y4¹QÖÁ|Å U€'€pÄóÞ¨½¶¿¶¥}mbñÞêW1ƒrÆ^UBîÉ!Kð{2:â» )ï?ëôÐäæÓ./|:š,DÖ0K(I¤žXÝ‘>óI•fË“ÐõÉÍKi ]O¢Úi×SIfÚtÿ¹–ÜFDÊ¿qÊþpGÞô®žŠã!Ó¼C¥h÷ñ[}¢æææýÈmІH‰9‘~èÜGcÐ㊴ëªZølZé5Õ¬¾hBhZ@‡—äëÔç'5ÔÑ@u¹—¡Ä`Ó>ΚlÖ2B¬ò#³“ÉbU›$“ÎNk—Ó<9ý‹¶œö·QÉ!½¿[•+p¬íªA'iè1Šï(£­Ã¥ŽZóHºÓ5=2ïN¶¼Ôc€ÌdY.÷8Þª ÓŽ™¨"Ðõ/&Úi Uš]d_M H…0F3ÜôÎ;šì(¡;;ÿ[ÜÖ04H5 :þúÒk6Ó]Ëp—k*mÀW;³Û¦+;YÓµd›^ŽÓNk¸µXRD™Ê`›`ÄqÐñšì(£¥¾C¾·9'Ñ/ÍŸ‰#û8-ykp ëó°‡ixç׃OÕ Õí¤Óì®mX¼_k˜ÜF`™€ÙL“»€:u®ºŠwÖäÛKdÚMý´&ëȤ‡Y’ñ yU|ä`@Á'¹ÈÎ:UK(¯5Vêî+B‚=f $C*6ÅH@<ƒ‚FGžµÛÝYÚßCäÞ[Cqs²d¹úu½µ½œ ´AýØâ@ª>€RZ]­þCzÿ]ïþgªøwQ¹¾¾ºŠe„W1Æ—SL¢µÊ¶s×)ÿØW mõž›qÜ7Ërö÷—žkÎû嘃ÆOj쨡iýz_×Þ`è6÷ßÚzµõå“Ú ¹#1Æò#¶œí$u÷¬õÑuåæß¦º×gç_õG?7_Ó¯µuÔSNÎÿ×Oò–þº¯Ô㯴mLjw—Ööžh]J ¸ã*™QbØÉÀ9'®:Q©éz…α¬të×I­D2[[_ùDÁ‰!° úñ]¼¿­¬×ãsŒki<9z—V¶ öÇNX tŠöûI=\ò¿7$Õ—¥è—¦ÃIÔRÒòætØáh­oM¼ˆA,ÞPÊCz×yw¥i×ò$—–·Ÿu¦…\¯Ð‘ÅZ _Ÿù‡õù‘ÎéšKéÚÌSÇj`±‹LX@iC`劓œœý+KMÔ¦Ôtu³+,±ßÌ>ƒq¨ÇçZ4Qp9}MºÄRßÇ¥dÚÉ DeF3ÈXÛP1Ï=Nj+ÛM^-K][]+í1êH‰ÆdTLG´îîü®¶Š-¥†ÎUÐõ…¶KÒöòÑ4å·ˆZ݈BÊœ]ÀñÜô€žiˆ·ERkýš›Ú¸‰bK8ÈgPÜr@ÿk¥:ÏTÓõâÊúÖä§ÞL¯·ëƒÅ[¢°îüK®¡ui›¨]5¢«Löè…T0ÈêÀž=-ω­á´Šî +ûËi!m¼9UCÜ–#Ÿa“í@XÛ¢³¯u«K- êçÌ–×ËYÊ3Æ0 ¢ µñ Sݽ¤ÖÖ—"&™"ž5ÌŠ:í*ÄÈã=è3bŠÊÓõد爐{;»;”ŒJ#¹E“8Ü ’:þ5«@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@µùÜÿ×&þUÉøoï÷ó®³QÿmÏýroå\Ÿ†þñÿxÿ:î`û‚Š û‚Še×ú³^{â/øù‹þº/ó¯BºÿVkÏ|Eÿ1×EþtÖÃå2ÕV&Áó“2«!TS€[¯n•›'Œm'ðãêZ|I:lÝlÒñîp¿0#­+Å,Úׇ¤Ž LpÁ*É&ôcžœôúƒX±Ãr|.4Ëžµ ænÀI¶P~Fèü ñMyÛ\j66“ÇÍí¼3Kþ®9%UgúyªšÖ¹g£YO$·VÉr°¼‘C,¡ZB œŸÂ¹-OM’ãYÕ èÕVÓQXÌFÖÉeÊlkŒÑr{uÏZ›S´{'×á¸Ó.ï^ú[KˆíŒÙ=¡X€vÀžp9ÍK½†·;/c:\7×/(Ñ,ŽÌØUÈ©íDz„¶M{õ³Ú®s:Ê¥?ÚÎ++P³ŠoAmyØÛ9Ñ$G]¤¸9ÁŒÆjwºE¤÷š|“Ái¨‰%¶1½Ä!Hb=ÃqßnqU/‰¤LoʙԶ·¤¥ª]>©d¶ò©1¸@Œ}Î ¨®uS³¥ÙÄ#’Ô•Ì€ç…PF;sšÅÕ¯®.—Ùmoítçy¯›¾Pü`yl¤…9nvöªzE•õµ¿…ZK[•ò’â ˆæ"ÿp°þÇáKÌg`š•Œ·rZEyo%Ôc/ Ê¥×ê¹È¬ý]—X¬–ÛñÍ“&ï¼\c é³õ®gÃzD‘\é°_V;Ë)ðmC»çË»dçšô ÃÙ%û[˜nŒ+8¶k±òVSü$ç=HÆ3Þ¯jZ‘ÓÄ{l/o󅵌6îI Ï&¹)­/³î¼<,.ŒÓjFe¹Ÿ+Ê2‰7—èëšÞñ.¡wi½µ¤WCí,VK›{g˜À€r@P~cÐgŽý©}”ÿ®ÕŽoÚ:ÆòÚÚêè^ÈcŠ(•Cî‰31´çš–ë]û%­¤²i·Æk©LQÛ(Ìyùöã OZ˸‹G]O‹û;Wò!-äyN’ÆÀXíÃry<šP¿‡ì½i«M:I#Âöë!ž1’¹ˆä6ÓüóMõ¨ŠñžÀÝKkq XÂêAŽØRr~„Ö}¯‰mfžx.m®ì$†pVíæ1Õ† ééÖ›¢Mmá>¡Ì·¬Ž±¸Ý3 $  u}¸ük¥×4íPÜAzºÅõ›Æ<ë9bŠÇ«2Ôò{ŸaCëa®—7,¼Okzå>É}˜ ÄK4<Ïî€OQÁÁäqRéÚôW÷ïböw–w+š±ÝFºg'¿nµ‰ ÅÕæ¥§ßÿeßBš]”¾rI VyTyh?‹îžG*Mût—:¥õž¤ú›ÀXÇöQcyFXN}òÆž—þ¼ÿ¯é¯ckQÖFŸyoh–7wsÎ"¥¸NHÌ¿ÞËÍwì“Z@4Ûéî.biD1÷ ]¹Ý—ø‡Bk7_kK•‚w±Ö…ïÙÉ‚K8åîv±S´ÜUmA i¶ ªZjͬ¥˜}9dù\J½@Èn*vþ½J6õ téÐ$Òiz„‰åy²£FòG}ß7Qè3M¾ñ6pGqýÜ œËo*¨yÉ$ŽÜàdûVFªÒ\ørÚÃW¶Õ¤¾kei ŒnU¤#X¯ÊyêŠeýÞ ltÝ&úÚò8äµV¿šÎÑäÏ1.ÀB“ÎOaÓ­7Õ]Dº]޶Úâ+»h®`mÑJѽA¥¨,ÌFÊ"&Š€$mB£§‘ô5=7¾‚[QHaEPHzZCÐÐu è*:t€ZHãîo÷ùµ-6"ñÁ EÛžø-Ÿæ)9¨d©È¨ÝIíH ‡ïRiÿñìÿõÞoýÔ÷]€³p£’OS4îl÷ó‡’G\Ž¡ˆ?‘ Äñ]ä“é—ÚE¾5ÍÄ>\oÄKqËôïœVeí£Ú\kpÝéò_B‰k$PyŠ@Œ.ÂßÁ†Éçœ×qE œTÚn¡ÜG,RÍ ð÷ÙÚERÁåʃÜûu«vZ|–úχ¦ŽÑ£Û§IìxÁÄxV8ëœð}몢ªý®¿æM¿¯»üŽT³‰¼I­Û]m¢¸ŽˆØ,ÛdÂA)òŸø9§Ô£Ñô½P´½†&¶Íä¶–!Ûœ‡–¤)#©ì:u®êŠE\æüKÚü q ¬øhGÄÊáC/q@1šÍÓâ0ø’;û Ma­’ÚEº{ô‘™‡V?3çÎ{+¶¢Ž·Kž‹¿Š§¼´¶ÔRÒ[r'}B6S¿vUSÍŒÈû½+¬¢Š:X:Ü(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š­¨ÿÈ6çþ¹7ò®OÃxÿ¼ušüƒnë“*äü7÷ûÇùÐsÜQÜP.¿ÕšóßÇÌ_õÑz×ú³^{â/øù‹þº/ó êËþAö¿õÅ?ôSÔ_òµÿ®)ÿ Šž€ (¢€ (¦M*à Êç ŠXŸa@¢ª«j.¡’Ò¤d˜ƒøáM/üLÿçÖÛþÿŸþ&€,ÑU¿âgÿ>¶ß÷üÿñ4ÄÏþ}m¿ïùÿâhÍ[þ&óëmÿÏÿIæÝÄéö›xÒ6`»ã“v éž~(ÕQ@Q@Q@Q@Q@RHu&€І«{‚D3Å!B88üªj(¢Š)CKHzޤGR‚ MxÒEÚè¬=fE0 6v§­´?÷ìR 3ÖÒûö?¬Q@†Ÿd¬YÛ‚:ÿ…>{ DòHÿudœTÕ[þcVßõÂO攟j¹ÿ mÏæŸüUj¹ÿ mÏæŸüUiÑ@Ÿj¹ÿ mÏæŸüUj¹ÿ mÏæŸüUiÑ@Ÿj¹ÿ mÏæŸüUj¹ÿ mÏæŸüUiÑ@Ÿj¹ÿ mÏæŸüUj¹ÿ mÏæŸüUiÑ@Ÿj¹ÿ mÏæŸüUj¹ÿ mÏæŸüUiÑ@Ÿj¹ÿ mÏæŸüUj¹ÿ mÏæŸüUiÑ@Ÿj¹ÿ mÏæŸüUj¹ÿ mÏæŸüUiÑ@Ÿj¹ÿ mÏæŸüUj¹ÿ mÏæŸüUiÑ@Ÿj¹ÿ mÏæŸüUj¹ÿ mÏæŸüUiÑ@Ÿj¹ÿ mÏæŸüUj¹ÿ mÏæŸüUiÑ@Ÿj¹ÿ mÏæŸüUj¹ÿ mÏæŸüUiÑ@Ÿj¹ÿ mÏæŸüUj¹ÿ mÏæŸüUiÑ@Ÿj¹ÿ mÏæŸüUj¹ÿ mÏæŸüUiÑ@Ÿj¹ÿ mÏæŸüUj¹ÿ mÏæŸüUiÑ@Ÿj¹ÿ mÏæŸüUj¹ÿ mÏæŸüUiÑ@Ÿj¹ÿ mÏæŸüUj¹ÿ mÏæŸüUiÑ@Ÿj¹ÿ mÏæŸüUj¹ÿ mÏæŸüUiÑ@Ÿj¹ÿ mÏæŸüUj¹ÿ mÏæŸüUiÑ@Ÿj¹ÿ mÏæŸüUj¹ÿ mÏæŸüUiÑ@Ÿj¹ÿ mÏæŸüUj¹ÿ mÏæŸüUiÑ@Ÿj¹ÿ mÏæŸüUj¹ÿ mÏæŸüUiÑ@Ÿj¹ÿ mÏæŸüUj¹ÿ mÏæŸüUiÑ@Ÿj¹ÿ mÏæŸüUj¹ÿ mÏæŸüUiÑ@·³Îö7 öSƦ&˱\=s~ûÇýãüë²Õäuÿ\›ùWῼÞ?΀;˜>࢈>ࢀuþ¬×žø‹þ>bÿ®‹üëЮ¿ÕšóßÇÌ_õÑuRkVM…ŸÛd’0Ð#n;ªŒY”¿Ž)£T“þ‡´2§Ø—O9ãÞFséXzÖ«ÞÄ©7—6riÉ1Úݬ!%*r\]Àå}z*I¼?¨LÂ,,sè¿ayCÝH=GR{f’ÚÿÖÌo·õºÿ‚mAâá'xï>Xb3±hsêË‘óuÍjC4wG¦¬^!¾¿Ð­5m;Láš6’QuwäùX÷Á‡ž8Ç­^ðö©>µ¢Á¨\Y C6Y#oÊgålàuôïX?ØšÇü pèÎ¥§šUŽUòmÚL•Üq»l-v‹*"…U:Ußúþ¿áÉì:ªj_ñè¿õÞýµnªj_ñè¿õÞý´†C{}m§Ûù÷RˆãÎÁ$Ÿ@&³?á,Ò?ç¬ÿø /ÿWu]*ßWµX.E ÛÕã 2œÜБӽbÿ §ÿÏíÿýõÿ\õ]u/Ý¥c®„p®?½m?"ïü%šGüõŸÿeÿâhÿ„³Hÿž³ÿà,¿üMRÿ„OÿŸÛÿûê?þ"øAtÿùý¿ÿ¾£ÿâ+>lWdmÉ€þi~ä]ÿ„³Hÿž³ÿà,¿üMð–ióÖü—ÿ‰ª_ð‚éÿóûÿ}GÿÄQÿ.Ÿÿ?·ÿ÷ÔüEØ®È90Í/Ãü‹¿ð–ióÖü—ÿ‰£þÍ#þzÏÿ€²ÿñ5Kþ]?þoÿï¨ÿøŠ?áÓÿçöÿþúÿˆ£›Ù&ù¥ø‘wþÍ#þzÏÿ€²ÿñ4ÂY¤ÏYÿð_þ&© §ÿÏíÿýõÿGü ºüþßÿßQÿñsb» äÀ4¿ò.ÿÂY¤ÏYÿð_þ&mªÙkŒpÂ^Hã¤e’&@X ÷€ÏSúUøAtÿùý¿ÿ¾£ÿâ)Ðh°øzì\Á-Ä‘IÚR§iÊ‘Ð8?¥]7ˆæ÷Ò±Xá³nþfÆ£,oa4êŒ$·C"3FT‚qÈéÆ 8jVøé7ýùoð¬Ë‰í&¶·\ËqFªFI½ëlAb÷Ñ®ƒŒƒûJßÒoûòßáGö•¿¤ß÷å¿Â¬yÿÏ!ÿ}<ˆçÿ¾1 ‚ê+‚BnÈêJÿ:”ô4‹hrˆýiOC@Ôƒ ¨ê@F4€Z)2=E¢˜ E&G¨£#ÔPÕoù[× ?šUŒQUå—°Ý"#!E qÈɵiQT¾ß'üø\ßQÿñt}¾Oùð¸ÿ¾£ÿâèíKíòÏ…ÇýõÿGÛäÿŸ ûê?þ.€.ÑT¾ß'üø\ßQÿñt}¾Oùð¸ÿ¾£ÿâèíKíòÏ…ÇýõÿGÛäÿŸ ûê?þ.€.ÑT¾ß'üø\ßQÿñt}¾Oùð¸ÿ¾£ÿâèíKíòÏ…ÇýõÿGÛäÿŸ ûê?þ.€.ÑT¾ß'üø\ßQÿñt}¾Oùð¸ÿ¾£ÿâèíKíòÏ…ÇýõÿGÛäÿŸ ûê?þ.€.ÑT¾ß'üø\ßQÿñt}¾Oùð¸ÿ¾£ÿâèíKíòÏ…ÇýõÿGÛäÿŸ ûê?þ.€.ÑT¾ß'üø\ßQÿñt}¾Oùð¸ÿ¾£ÿâèíKíòÏ…ÇýõÿGÛäÿŸ ûê?þ.€.ÑT¾ß'üø\ßQÿñt}¾Oùð¸ÿ¾£ÿâèíKíòÏ…ÇýõÿGÛäÿŸ ûê?þ.€.ÑT¾ß'üø\ßQÿñt}¾Oùð¸ÿ¾£ÿâèíKíòÏ…ÇýõÿGÛäÿŸ ûê?þ.€.ÑT¾ß'üø\ßQÿñt}¾Oùð¸ÿ¾£ÿâèíKíòÏ…ÇýõÿGÛäÿŸ ûê?þ.€.ÑT¾ß'üø\ßQÿñt}¾Oùð¸ÿ¾£ÿâèíKíòÏ…ÇýõÿGÛäÿŸ ûê?þ.€.ÑT¾ß'üø\ßQÿñt}¾Oùð¸ÿ¾£ÿâèíKíòÏ…ÇýõÿGÛäÿŸ ûê?þ.€.ÑT¾ß'üø\ßQÿñt}¾Oùð¸ÿ¾£ÿâèu_ù]×&þUÆøoï÷ó®¦þñåÓ®PÚM17Ì̘{15Ëxsï7ûÇùÒ¹ƒî (ƒî )€Ë¯õf¼÷Ä_ñóýt_ç^…uþ¬×žø‹þ>bÿ®‹ü躲ÿ}¯ýqOýTõ—üƒíëŠè"§ Š( ¢¸„\[K $ ©#¶jZ(žùT/‘lØÝç°Ïá°ãó§}¢ûþ}­¿ð!¿øŠ’Šíßóímÿ ÿÄQö‹ïùö¶ÿÀ†ÿâ*J(?´_ϵ·þ7ÿQÉö«‰4pǺ¹Ù!rvœÊŒrX¢€ (¢€ (¢€ (¢€ (¢€ (¢€ FUu*ÊHÁpE-RÏN‚É£ Y¸ŽJAíV袀 (¢€ CÐÒÒ†€#¢Š) (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š¯ÿ ûŸúäßʹ}æÿxÿ:ê/ÿäsÿ\›ùW/áϾßïç@ÌpQDpQLC.¿ÕšóßÇÌ_õÑz×ú³^{â/øù‹þº/ó êËþAö¿õÅ?ôSÔ_òµÿ®)ÿ Šž€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ CÐÒÒ†€#¢Š) (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š¯ÿ ûŸúäßʹ}öÿxÿ:ê/ÿäsÿ\›ùW/áϾßïç@ÌpQDpQLC.¿ÕšóßÇÌ_õÑz×ú³^{â/øù‹þº/ó êă§Úãþx§þ‚*zËX<Õ,$ç pÊ?!Å/Ù[þy¿þ=!štVgÙ[þy¿þ=eoùæÿøô\ :+3ì­ÿ<ßÿž²·üóü z.™öVÿžoÿOGÙ[þy¿þ=mR]B+em6æ›x ²¸<õñYmñ_ý-?ï¡ÿÅÖÙ[þy¿þ=eoùæÿøõ”é¹;ó5ýzÓ¬¡8'ëó3¾Ûâ¿úZßCÿ‹£í¾+ÿ e§ýô?øºÑû+Ï7ÿÀ§§-™cŒ>·RTûüïðÿ"þ²¿çÜ~çþfgÛ|Wÿ@ËOûèñt}·Åô ´ÿ¾‡ÿZ±ÚÃ$Hù˜nãÏñ§}ŠïMÿßühö/ùßáþAõ˜ÿϸýÏü̶ø¯þ–Ÿ÷ÐÿâèûoŠÿèiÿ}þ.µþÅ÷¦ÿ¿ïþ4}ŠïMÿßühö/ùßáþAõ˜ÿϸýÏü̶ø¯þ–Ÿ÷ÐÿâèûoŠÿèiÿ}þ.µþÅ÷¦ÿ¿ïþ4}ŠïMÿßühö/ùßáþAõ˜ÿϸýÏü̶ø¯þ–Ÿ÷ÐÿâèûoŠÿèiÿ}þ.µþÅ÷¦ÿ¿ïþ4}ŠïMÿßühö/ùßáþAõ˜ÿϸýÏü̶ø¯þ–Ÿ÷ÐÿâèûoŠÿèiÿ}þ.µþÅ÷¦ÿ¿ïþ4}ŠïMÿßühö/ùßáþAõ˜ÿϸýÏü̶ø¯þ–Ÿ÷ÐÿâèûoŠÿèiÿ}þ.µþÅ÷¦ÿ¿ïþ4}ŠïMÿßühö/ùßáþAõ˜ÿϸýÏü̶ø¯þ–Ÿ÷ÐÿâèûoŠÿèiÿ}þ.µþÅ÷¦ÿ¿ïþ4}ŠïMÿßühö/ùßáþAõ˜ÿϸýÏü̶ø¯þ–Ÿ÷ÐÿâèûoŠÿèiÿ}þ.µþÅ÷¦ÿ¿ïþ4}ŠïMÿßühö/ùßáþAõ˜ÿϸýÏü̶ø¯þ–Ÿ÷ÐÿâèûgŠÿèiÿ}þ.µþÅ÷¦ÿ¿ïþ4}ŠïMÿßühö/ùßáþAõ•ÿ>ã÷?ó1¾Õâ¯úZÿßCÿ‹£í^*ÿ e¯ýô?øºÙû?Þ›þÿ¿øÑö(½7ýÿñ£Ø?ç‡ùÖ—üûÜÿÌÆûWŠ¿èkÿ}þ.µx«þ–¿÷ÐÿâëgìPÿzoûþÿãGØ¡þôß÷ýÿÆ`ÿþäZ_óî?sÿ3í^*ÿ e¯ýô?øº>Õâ¯úZÿßCÿ‹­Ÿ±Cýé¿ïûÿb‡ûÓß÷ÿ=ƒþwø}iϸýÏüÌoµx«þ–¿÷ÐÿâèûWŠ¿èkÿ}þ.¶~Å÷¦ÿ¿ïþ4}ŠïMÿßühöùßáþAõ¥ÿ>ã÷?ó2­î•[ìPÿzoûþÿãGØ¡þôß÷ýÿÆ´„9z·êcV¢›ºŠ^…§Ò§Ò«}ŠïMÿßühû?Þ›þÿ¿øÕ™–vŸJ6ŸJ­ö(½7ýÿñ£ìPÿzoûþÿã@vŸJ6ŸJ­ö(½7ýÿñ£ìPÿzoûþÿã@vŸJ6ŸJ­ö(½7ýÿñ£ìPÿzoûþÿã@vŸJ6ŸJ­ö(½7ýÿñ£ìPÿzoûþÿã@vŸJ6ŸJ­ö(½7ýÿñ£ìPÿzoûþÿã@vŸJ6ŸJ­ö(½7ýÿñ£ìPÿzoûþÿã@vŸJ6ŸJ­ö(½7ýÿñ£ìPÿzoûþÿã@vŸJ6ŸJ­ö(½7ýÿñ£ìPÿzoûþÿã@vŸJ6ŸJ­ö(½7ýÿñ£ìPÿzoûþÿã@vŸJ6ŸJ­ö(½7ýÿñ£ìPÿzoûþÿã@vŸJ6ŸJ­ö(½7ýÿñ£ìPÿzoûþÿã@vŸJ6ŸJ­ö(½7ýÿñ£ìPÿzoûþÿã@vŸJ6ŸJ­ö(½7ýÿñ£ìPÿzoûþÿã@vŸJ6ŸJ­ö(½7ýÿñ£ìPÿzoûþÿã@vŸJ6ŸJ­ö(½7ýÿñ£ìPÿzoûþÿã@vŸJ6ŸJ­ö(½7ýÿñ£ìPÿzoûþÿã@vŸJ6ŸJ­ö(½7ýÿñ£ìPÿzoûþÿã@vŸJ6ŸJ­ö(½7ýÿñ£ìPÿzoûþÿã@vŸJ6ŸJ­ö(½7ýÿñ£ìPÿzoûþÿã@vŸJ6ŸJ­ö(½7ýÿñ£ìPÿzoûþÿã@vŸJ6ŸJ­ö(½7ýÿñ£ìPÿzoûþÿã@ ¨4ûúæÃô®[ß}¿Þ?κ•³„0?¼lá¥f‘5Ëxsï·ûÇùÐsÜQÜS˯õf¼÷Ä_ñóýt_ç^…uþ¬×žø‹þ>bÿ®‹üè¶¶!m#$€Iªk¯éocöĺ˜b ˆÌY‡`Éü* NÚöóJ·‚Ñ"‘—ÏI%1ïOîäÔã\Œ ²|jȆËÊð]ØÂòp<ùQIwO3æÎ9×þd1 ÆÁKá¤ûg5_B}E®%ûiÕJíù~Û²®sÛÊç?^+2çZÓu-Íý¬ú}ÈÛÈ“Î:qÙA?‰öµºBèÙºÚöž5°;\#„`–Ò²«‚íކ״ñ¨½€yÚá#¶••X€@,hàŽõÏ]_Ác¯7öFªóÞ\Þ ¹ÓŠ+ƒÑY¸]Ë…É8â‹«ø,uæþÈÕ^{Ë›Ô:qEpz+7 ¹p£9'RZÛúì7¥ÎΊ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¸ÿ}öÿxÿ:ì+ðçßo÷󠿏(¢¸(¦!—?êÍyÿˆ”ý¢3ÿMó¯Cœe qú환 s@ª·ÙbùOݪ]­ýÓùWŸÝø¶þÙˆE›þUãÝDùÙÿßGü) ôý­ýÓùQµ¿º*óøOµ/úÙÿßGü(ÿ„ûRÿ  Ÿýô€=?ktþTmoîŸÊ¼ÃþíKþ€6÷Ñÿ ?á>Ô¿ègÿ}ð OÚßÝ?•[û§ò¯0ÿ„ûRÿ  ŸýôÂøOµ/úÙÿßGü(Óö·÷OåFÖþéü«Ì?á>Ô¿ègÿ}ð£þíKþ€6÷Ñÿ ôý­ýÓùRª¶áÁëé^_ÿ ö¥ÿ@?ûèÿ…ðŸj_ô³ÿ¾øP¥[ÿÇ´_îåRWšˆº¸ ÜÐ ü)áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿Â•~"ë qýn?í£…zMr>\;¼U³ñŽ«t@6éŸv5µ¡ÚÔ9 GOÜS¢QE0†EPº³ƒ‘Z4„@µÆƒ„‚ªŸ FOÜ•v;íG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åJ<5?p~UØùkéG–¾”ÍÛhiQ[6Ö¢ 0*Ø@;S€€0(¥¢€?ÿÙnip2-8.7.0/doc/src/figs/toolkit.jpg0000644000175000017500000002771413224651032014003 00000000000000ÿØÿàJFIFÿáJExifMM*2:(&Áà† &Áà† ÿÛ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ÿUŸýpOýT>™ÿ «?úàŸú¨[”r~Ó4;ÍOÖµm¤ÖÙÔÝ]Ê@™.·|Ñnê|¨N˜cÖõO8êÚ (ÖÆ™ý•åG·Ëóü¬ç÷íý÷ÞÆÞØæº¶Ð´‡ÔƦÚU‹j¥Ñ·C(ÿã?­?û#LþÔþÓþδþÐÛ·í^Bù¸Æ1¿Æ=ê–âg¦]^?Øô‹mE´Ô»Ôu‰^æ4Frc¼|F»Ã.Nön„â3Z½ ø†ö÷PÑbº»‰âžÛQWuUU¸x."Ž9¦äÞØcè1Ò\èÚU홳ºÓ,çµ24¦ `VBìÅ‹m#%‰'®I=è»Ñ´­BÎ+;Ý6ÎæÖ,ypMº&Œ ãì5]__Ô4Ûkmqí­î®ï5¼1;:Ax‘C´²²Œ+c89rpG}UmôÛC¶²¶„Äc1Ä«°;p08ÜÀê@&­PEPEPEPEP=Wì_ÙŸÚ[~Ãä¿Ú7g0wtç§§5•àÏíìø›y˜ó_ì~úÿ³ç÷~wý4Ç_Ã<æº("ßîËÿ]åÿÑST6ÿv_úï/þŒjš aEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPSéŸò ³ÿ® ÿ Š‚§Ó?ägÿ\ÿAÖàQ´ñW‡õLZv³c0ÚLVS¬î`»Š¡$(,2ØÀÎIš±§k6zšþéöHe¸‰b€íäJb‘€Ï*Ú\àœW £vÓá·†g—Sµ6ŽšBEµ«Ã*«On¸i<Ö RŒç°â¢Ó-ôôñVyw5°k­jÛd…oí%1Ç€ÁX·ÏòwíhÅõ +Ë×SÕ›Æ ú…µµèÕ¼´‚]Zewµó0ÙˆŠ0h¹ß¸àœ– uµy#¾Ôî/o®'}BþY®£Ž5º‘UV<íà ÁÆ@àqG@êuQEQEQEQEQE2i¢¶…æžTŠ(Ô³»°UP:’OAO#"«ß¼qé×/5»Üı1x?1¤åB÷'¦+Áºf£¥h^F¡&7Lò[Úîßö8IÊC¿ø¶Ž3ø  Vÿv_úï/þŒjš¡·û²ÿ×yôcTÕ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ŸLÿUŸýpOýT>™ÿ «?úàŸú¦·Õ£x›M×ö<_4o™%›O¸†7CŒyU³F#ž•±T ¢Š(¢Š¯a{o©éö×ö’y–×1,оÒ7#Tàò2ë@(¢Š(¢Š(¢Š(¢Š(¨n³šêáŠÃ $`¥° dœM: ⹂9à•%†E’#eYO ‚:ŠÌ·û²ÿ×yôcTÕ ¿Ý—þ»Ëÿ£¦¨QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQETúgü‚¬ÿë‚è" ªCÄZV‘ac íÖÉZÝ"Fò09!AÇãU¹;$)4•Ù‡áí ]´ømoZ¾¥ý ÚÃÌpƶӘFÐ6Æ® ·3ùÉæ±®´¸¥ÑõÄðXÛ¿‡nโKG‰®.YWÊH̲%Æs¸rk²ÿ„ßÃÿóù7þMÿÄQÿ ¿‡ÿçòoü›ÿˆ­U*‰ß•ýÆn­?æ_yoàMø¿RYtv±:m C$9I%ó.7±'† ™c–óUô› /ê §Í«(AªÜ27œÁ¬å,&cÎ<М7C´ WAÿ ¿‡ÿçòoü›ÿˆ£þÿÏäßø 7ÿOÙTþW÷´§üËï8}O¸¸ñ&eÐc¶Žy&‡T‹û"u>[A/É=ÌŽVà ÎÒ Ç#8=‡ÃË+m;ÁZ}œ:kX\A qÞÆÖ†÷ ‡~ToÉ|du8«ð›øþ&ÿÀI¿øŠ?á7ðÿüþMÿ€“ñ½Oåp{Z}×Þt4W=ÿ ¿‡ÿçòoü›ÿˆ£þÿÏäßø 7ÿG±©ü¯îkOù—Þt4W=ÿ ¿‡ÿçòoü›ÿˆ£þÿÏäßø 7ÿG±©ü¯îkOù—Þt4W=ÿ ¿‡ÿçòoü›ÿˆ£þÿÏäßø 7ÿG±©ü¯îkOù—Þt4W=ÿ ¿‡ÿçòoü›ÿˆ£þÿÏäßø 7ÿG±©ü¯îkOù—ÞmÝÉ46sKonn&D-!ÂùŽ'ŸZÈðžƒ.¤Éó‰&žâK—Ž>!œäÇ=võäñœTð›øþ&ÿÀI¿øŠ–ßÅúÕÂAë $!WÌ‚Džƒ, PéT_eýÃö°}Q-¿Ý—þ»Ëÿ£¦ªö‘ÞÉl²¤6ûf&Q™˜–ÇÝ÷©ü‹ÿùãmÿÛÿˆ¬ ¢“È¿ÿž6ß÷ý¿øŠ<‹ÿùãmÿÛÿˆ¦ÑIä_ÿÏoûþßüEEÿüñ¶ÿ¿íÿÄPÑIä_ÿÏoûþßüEEÿüñ¶ÿ¿íÿÄPÑIä_ÿÏoûþßüEEÿüñ¶ÿ¿íÿÄPÑIä_ÿÏoûþßüEEÿüñ¶ÿ¿íÿÄPÑIä_ÿÏoûþßüEEÿüñ¶ÿ¿íÿÄPÑIä_ÿÏoûþßüEEÿüñ¶ÿ¿íÿÄPÑIä_ÿÏoûþßüE2 HÉu ÁÙ#*ÄuÀô¤”QEQEQEQEQEQEQEQEåÚ»cY¸çø ÿÑרהknãþ¹Áÿ¢#®ü»øß/ò8±ÿÂù–nôÖ¶íÒæ›„vG†°ÛÇ•¡¨EóLð­Á–0  ‰·(<äŒqW¥×Ãë·“¬¬ܘeŽÝQÉdp™`¡¹,:ýMC¦j6«§i¾Î²,þhyüÜòÎr0zŽý»úŠSKUý~šãôe8 ¸¹ßäA,»[ËBÛG¾:TšŒIi©ÝÛFX¤3 ®ÅBG>TH9Ú€p3ßëPï"Õ­æ{œ³gY‘$a<˜þS'îŽùþ•nA)Ç–è¾»¶QPiŸò ³ÿ® ÿ Šµ_4¶>„iyx¡ñ÷Šä~Yþ´F$ ûÇV9ê«·úšuÀŽ5˜7ï$†:,e© ¬ÞfD‘„ÏÝ1’<ÿJ’Šd‚S-Ñ}w!lþ¢”‰<¼PøûÅr?,ÿZuØÄxêÇ=UvÿSMf ûÉ#aŽ‹_êjJ(2³y™F?tÆIüóý)dœyn‹ë¹ gõú(¤Iåà:‡ÇÞ+‘ùgúÑ/ïX窮ßêiÔPq¬Á¿y$l1Ñc+ýMfó2$Œ&~錓ùçúT”P$œyn‹ë¹ gõ—o÷eÿ®òÿèÆ­zÈ·û²ÿ×yôcT±“QE€(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+Õ<{ªI¡a=¸óíâóveÃUÈ ÀWeSéŸò ³ÿ® ÿ ŠÖ•YS—4LêSHòÈóøWz÷üöÓ¿ïóÿñ»׿ç¶ÿŸÿˆ®Ïþoø·¿ð•}“þa_Ú_fó?é—™³v? ãß4þ"°±kÓwxCv¶«6²4ÌI Œ*î26~Tt8ÆTšêúõnç?Ô¨ö8oøWz÷üöÓ¿ïóÿñ»׿ç¶ÿŸÿˆ®¼øÊÄëºf›²¥ý¼³,Ëg9RDk Ÿ/.Û‹³hÝ®èãVþÌûYûO›äçÉ/ÌÆ|¿37ãøwgÚ¯VîR£Øá?á]ëßóÛNÿ¿ÏÿÄQÿ ï^ÿžÚwýþþ"»kèvºˆ±šíÄÆá-w-¼­œäÌ ³vXqœŽ§Xü]¢J×a.¤+fïò}š]‹"Éå”ß·i}ØA,rQõêÝÃêT{Gü+½{þ{iß÷ùÿøŠ?á]ëßóÛNÿ¿ÏÿÄWl|a¡®Ÿs}-ÜCk$qÎ.-¥‰ã20TÜŽ¡€$Œc¯<‡þC=ßÜðgÜyÊ¿ß1ìÜý¬m÷£ëÕ»‡Ôèö8ÿøWz÷üöÓ¿ïóÿñ»׿ç¶ÿŸÿˆ¯N·ž+«h®-äYa•Ç"†R2>„T”}z·púÇ–ÿ»׿ç¶ÿŸÿˆ£þÞ½ÿ=´ïûüÿüEz•}z·pú•Ç–ÿ»׿ç¶ÿŸÿˆ£þÞ½ÿ=´ïûüÿüEz•}z·pú•Ç–ÿ»׿ç¶ÿŸÿˆ©-þj²N‰ysf–äþðÅ#3mî*ë^‘w$ñYÍ%´yÑ G }›ØwlúÕ]Z´×l>ÕhÌ6¹Šhd’†G˜ñRxÚÍZãX:IìM¦È*Ïþ¸'þ‚+Í´?j2é¾»:Þµu{¨5¢ÜC}¥,6‡ÌÛæm—ÈŒp öâ Ù¯IÓ?ägÿ\ÿAƒaळ´Óìe×ukÍ>ÀÂ`´ŸÈTQ<”‰Xí*§–äœ×"èu2 ßǧø‚-6å4ÔYn’ÕcþÓCw¹Ü"·Ý$ƒ÷²ä‚¢ñv äÝI¢Ç–5FÓLÿlÌ…¾ÒmÕÄ{0T¾3–dð@ÉžOZ½Ã0Ôõ$µ7ë¨ý1œ%ä›È.3‚ÄsÆ01{þË?ì¿ìÿ2'ûCûCvá»ÌûOÚqÓîïã×o|ó@¾9OñZmÊi¨²Ý%ªÇý¦†ïs¸Eo ºIïd)ÉEâíAɺ“EŽ=,j¦™þÙ™ }¤Û«ˆö`©|g,Éà“<ž µ{†a©êIjo×Qû™ÿ «?úàŸú¨*}3þAVõÁ?ôMnÿ ÃHÿ…{ý‘ý‰¡ÿmÿe}›íŸdOøøò¶ù›önûüîÆ{õ­=CÃWsÿkºÛÙ]­M/!In%€ª­´PäJ€´o”n@?)Ç~:Ê*„rv¹cs¡ÝÉ=½ìö±\Û\ù×/•ŠicpUÊ#"ÄæÛ»©"˜|9«ùŸÙ¡ì²?µ´þѽüÿõÿhòömÛþ³Û¾ïs]}u¸t±æz«ÝYêQxjÞãMœI®Á|"óí{én_÷{qµrÇÌÝŒ.Üfºa¡jxRûO³»Ž é¯nnRTvQ²K§—i`2¤£m,*NFp+¦¢ŽÔà-<« ïæàAs.˜éê7…EµÑ–@d”g•<ÏaË® 6X¼Uª3Fa¸²¶·Eî ÎÍž1ŒJ¸ç±üu(  ¿ éÓhþÒ4»†FžÎÊy2J–D HÈ‚µ(¢€ (¢€ (¢€!»ŽylæŽÚqî…c˜¦ýŒG ·¾=*®¢ÚhVe´V;œË4ÒÉ4Ë;žìOø+BŠómSÄú¥½ÄvVW&Ö+h"RV4b䯭“¸ïÇ¥Qÿ„§_ÿ Äß÷æþ"¨ë-jãýÈ?ôDu¡4°ÜÅ2éæÅ¡³-»A¶dP2Nür@ýîqÓµ{4iST¢ÜVÇ‘V­GRIK¨ßøJuÿú Mÿ~aÿâ)Ïâ_FÛ_UI°ÐB8# ýÎàƒU>Ãö‡Ù÷>ϱ}£9Ýö3:g¥\½†ÒæeˆyâèiñË¿#g˶1Œò®zž•£…ü+¾Ä)Ökâx¯â/Çr¾§r±ÉŽmâ±×g5ü%:ÿý&ÿ¿0ÿñ5âiÓÜJïÒ%µ„àJ­»+Q÷F>ùÉçžqÚ£µÒ­'·‚Y%-ÉbŒ÷q'’¡Š‚Á°_¡Î1ý)(ѵÜWÜU¯e OøŠY8õYÝØ…UX!$“в›ÿ N¿ÿA‰¿ïÌ?üE?EŠÒCGyüöšâexÊ0 €I´dÎJžãk}Z¥I¶¹WÜK«U$ù™¹ÿ N¿ÿA‰¿ïÌ?üEð”ëÿô›þüÃÿÄVú7Õ}^—ò¢}½_æfçü%:ÿý&ÿ¿0ÿñÂS¯ÿÐboûóÿX{èßGÕé*oWù™¹ÿ N¿ÿA‰¿ïÌ?üEð”ëÿô›þüÃÿÄVú7Ñõz_ʃÛÕþfnÂS¯ÿÐboûóÿGü%:ÿý&ÿ¿0ÿñ‡¾¤‚V[ˆÊF$`ÃWpcž˜ïG°¥ü¨=½_æfÔ~1×-\K~×ÇóÇg:îMŽ™2îŽÖÑ×8ÊÆ¦’;]&fÛNØÎÔ_ð’h_ôÓ¿ð)?ÆøIt/ú éßøŸãG#ìë¹)µÒV_- ²gJ&*$³ÒáÇ›mf™é¹f¢ÿ„—Bÿ ÞÿIþ4ÂK¡ÐoNÿÀ¤ÿ9`ç]ÉþÁ¦ìöK]§>Zàç§j¥aÿ ûoúä¿ÈUÛ]_M¾”Åi¨Ú\IŒí†us 5JÃþAößõÉ©’³w,QE# (¢€ (¢€ (¢€ ŸLÿUŸýpOýT>™ÿ «?úàŸú¦·˜Òüq%Þ¦ƒ£_Þêé6º”écyh³è]ÇBòä’1Œó‹úoŒ-5IôñŽ¡®¢د&V9ÎÂøvñò«¹@ Oðç†áòÒüÿ/J³ÓÕíÏÙüߟ©ûÞoNØêsÁe៲iž³û^ÿì-Ÿ?—?m´tÏËþ³w~˜ïš¢I-¼J“j6Ö“ézšÝ–[YîcEI˜)} .§j±ÃªŸ”÷ªÖž3µ¼¿Ó­ÓMÔVßR•ã³½xÓÉ›lo&áóîªeFrdŒ­'áØÓ5½3Rk»ÂW94à—7!¢xÿ}>ò\üàä :SNÓu(¼I éqKw&™¢\JUeÓšB b3+)ùÔ.À8ÉnhÓXx®ÓP¼¶‰,ïb·¼,¶w’¢ˆ®J‚Çf°Ê«0Ü« ­êãtYø{S·žÖ-$Ak¸BÉ¥F—X*W >rبPOrrsÙPEPEPEPEP7iûßc1 ‡Êó)»nÇ8Ï¥gxw_‹Äʱ46Ó½­Ü såL‡ ¡º0ô#¨=ºVÜêÎkq4°ù¨SÍ…¶ºdc*{zNÓ­4«llaXmâD_Ô“Ô’y$òIÍyˆG­Ë¹H ¹î<”ˆ#ð¨ŸZ½’7F•>u*î"@ìP\ Ç?Zô“¥A{ ¥ÐIÖx£AíUb£ï!ì3þ­/þ|íð þ"»éãã(Ê7±ÃS)MÉJ×<é5»èàòVUÛ嘲bRÛ ®ìg=3ÅkwÒÛù0)刲#PÛ.ìgtÏ5è¿ðióçkÿ€PñÂ5¥ÿϯþAÿÄUÿhSþB>£?ç<͵ ‡ó7IŸ2$…þQÊ.Ý£ðØ¿•>ßUº¶‡ÊŠEØ +¾5r§ÕI©úb½'þ­/þ|íð þ"øF´¿ùóµÿÀ(?øŠÚ0µ¹õ ïÌyÍžµ}`¨¶ó*ìmèZ5b‡ØHü:ÕõêŸðióçkÿ€PñÂ5¥ÿϯþAÿÄP³-Tà$ôr<¯}ëÕ?áÒÿçÎ×ÿ ÿâ(ÿ„kKÿŸ;_üƒÿˆ§ý§åö|¿˜ò½ôo¯Tÿ„kKÿŸ;_üƒÿˆ£þ­/þ|íð þ"í8ÿ(gËù+ßFúõOøF´¿ùóµÿÀ(?øŠ?áÒÿçÎ×ÿ ÿâ(þÓò‡ö|¿˜ò½ôä™ãutvWSÊpA¯Rÿ„kKÿŸ;_üƒÿˆ£þ­/þ|íð þ"í8ÿ(gËù)“tÑ´H I Úª9,OVî±#6³6âNÈ EÏaä¡ÀüI?w¶ú•¤Ë5´PÃ*ý׎Öaô!+Ï5¶Æ·p?؃ÿDGUG«ÖVV²¡5°î­î×ê$ñ=´¥DÑÈѼ}J‘ïÓ®zÇÛ1o®Žâö;}Rå¼èÖHï5#†#‚br©½+5õÛÑ¥[:ß?Ú¼ùC¾ÿÞl ›A=vä·:úW\g'm?­NiB*úÿZÛèßOÕ¤‹ûbûÈ(aûDžYO»·qÆ1ÛOÌ­Sº¹“Vv,ï£}Vó(ó)ˆÒÓ%dÖôÖBU¾ÙÈë‚êüA#ñ¯K°ÿ}·ýr_ä+Ë4·Î·¦ú}ƒÿF-z‡üƒí¿ë’ÿ!^6eüHú¶_ð?RÅQ^qÞQEQEQE>™ÿ «?úàŸú¨*}3þAVõÁ?ôMnª+ÍtëW>´²»ºø’ú+ci?”£z\G¼K´ ¸Œ ²1Ï“þÕ_‡Æ×V>ðýíãim=æ™̳ê:”vBWd‚ §-žq…_˜`õÅîè®GDñ©­x¥üˆ-·6—e{yÈ•ÞqݰGÉ%•/€Ibëz…¿†¼g{¥G í”6ö× u½Ë­¹p^= *²ÆÄÄôÈáØW;Ú(¢ÂŠ( Š( Š( Š( Іî9¦³š+{ƒo3¡XæËlpØ<zVG„õéuý&Iç€G4[<‘ó ì‡H‰ê‡·§#œf€&·û²ÿ×yôcTÕ ¿Ý—þ»Ëÿ£¦¨QEQEQEQEQEQY>)½¸Ó¼#­_ZIåÜÛXO4O€vºÆÄ u¨?°5/úµ¯ûõgÿÈôÀÝ¢°¿°5/úµ¯ûõgÿÈô`j_ô7k_÷êÏÿ‘èv¸=[ÂúÌ×öúž›n·+40¾7 (ÊŠ¸!È| Öÿö¥ÿCvµÿ~¬ÿù‡ªCE‹õ ˆ¡Ty6|Óþ]ëZ5eJ\Ñ3«J5#Ë#Œ“Â^'–W’M.Fw%™ÄY$õ?~™ÿw‰?èÿ÷þ/þ.»ì_þ‡kþüÙò=Ù¿ý:×ýù²ÿäzêþÑ©ÙßQ§Ýœ?ü!Þ$ÿ Kÿßø¿øº?áñ'ý_þÿÅÿÅ×qý‘«ÿÐã­ß›/þG£û#Wÿ¡ÇZÿ¿6_üGö_!}BŸ™ÃÿÂâOú¿ýÿ‹ÿ‹£þïÐ%ÿïü_ü]wÙ¿ý:×ýù²ÿäz?²5úu¯ûóeÿÈôhÕò¨Só9}ÁºØÖ¬æ¼´û,L“3´¨ÙÚÁ€IêEw6ò¶ÿ®Kü…gdjÿô8ë_÷æËÿ‘êü;¨EÆž-Ö‚¨ •gÀöï\ÕëÊ´“‘ÓFŒi+Dߢ°¿°5/úµ¯ûõgÿÈô`j_ô7k_÷êÏÿ‘ëSvŠÂþÀÔ¿ènÖ¿ïÕŸÿ#Ñý©ÐÝ­ß«?þG  Ú+ ûRÿ¡»Zÿ¿VüT5k]WF·¶¼Oê—éö´3Ãk±ÒKˆã`v­÷\ô"€:Ê(¢O¦È*Ïþ¸'þ‚* ŸLÿUŸýpOýS[[LÐ4í.ÏM‚+t–M:Õm-îfEi–5P¸ÝŒ€3ŒéY‘ø*ÖÚ;²Ôõ+Ckaœ^tÐÇ¡‹!Áå¹M§Ÿ¦:j*„ai~·Ñç°’ÊöñÒÆŒ˜ÊÜEa™”ÎAv9R¹'œŽ*[oYÚXè6‘É9DÛöbÌ2û`xFþ9ù\ž1Î;q[PEPEPEPEPEP7v°ÞÙÍkp¥¡™ r(b¹R0FG"[AD‘C„HÑpª£€IEd[ýÙ뼿ú1ªj†ßîËÿ]åÿÑST (¢Š(¢Š(¢Š(¢Š(¢ŠÂñ·üˆ^"ÿ°]ÏþŠj©â­b].â@wÉhš&¡w,Èbi#ÜH>d8w3ž U¿È…â/ûÜÿ覨µMsYh§GNm"êÊI‘Àf3´y 9ÁUˆœ‘˜uç EmGÅ—öRk’Å¢¤Ö:+¤Ì×{×ÉIX¢l9 ?B@àsÎ…†³}&±¨é‰fó۽͹KŸ4•FE`ãhÚÃÌNaמ*[ŸZ]Yk–$â=gwÚ °Êî…!;8ãå@yÏ9úU¹4ø¥Õíµ&gó­à–Ý´¬1Ç-ˆŽîD*!¡eùT~@2I''$ñ„Áy”­/5;¯égRÓ#±?ÙWKŸ; Ëkß*á†@Èç‚jÄš®¼ž/Õlà³µ¸±¶Óàž$7%»yý–yfŒ)°¡C ’T[Ó|2š~«£&©¨ÞÍ ³ÚÄ.¤B©21*ŒœÆ>c’{“Æ.6’¿ÛÃVŽêâ) +ЦÃÊ¥ÊnÊ’6™¤uç#Š#¼sbñNm"iå[8. BÛDÏ)cyçÓÍZø¢ãí>wö`þÉûwöÚþÑûÏ7ÌòsåíûžgËÙïŒS­ü¤[ ?,Oþ‹v×hK˜œaŽQvÇÛÊNN9˜øVÔßùÿk½û/Ú~Ùö ëäyÛ·oû»¾÷ÍÛwsŠz_×õù-HüK¨ë:†ƒ“ ¬¢êñâ™n'1 \.Dn@ÊnÈç*!‰çZ¿Ñu/^Ŧ%Å…¥âÜ\Ê×;(³·,vÄœ£‘ƒ]N­¤®­·úUŤö³yðOo³z6ÖCë)Ê»AëPÜøzÒêË\´y'ë;¾ÐU†Wt) ÙÇ*ÎyÏÒ™—^#šÓQ¸µ²ÓZææMYlÉvUIûÏ¿v(Tz·$^°»e…Lº–žq8š2>Û\¸ àuè*=ÃÚ‚éÚƒ]^êVWW—æídó¢yÔyI c9ØNÐ Œ€: ~±¦A£øVÎÊݤt]ZÉËÈAfg¾‰Ù޳ÀžuTQE ŸLÿUŸýpOýT>™ÿ «?úàŸú¦·Í<9«êÍáM/Ó_]Ë©êÖ¶ÓÛ_I#4¢ £ß;ï<@=·B;Ö‰µ8<)áņú'»—F¶¹—̰ºÔ&•™Kˆy@Hûä¶Nî8ç¼°²·Ó4ûk Hü»kh–Sq;Q@ 2y8u¬§ðv†ðÚEöYcŽÖÙ-#X®¥t)ÂÆûXyŠ9áóÔúš¡ÞÕumsÅ&ü^A—s¢é÷‚É¡vdó|ó…3hmËËlù”(À۸ǥë:Þ£¦øSPÔ“H2jò+À±Ú¹6¥¬ç“xc'$áGaY×'9-§†ô»ìf´‚X^ÊÙ-!Ùq _)A ®»± Ž7ƒ‚r9枺š–u’@Éš¡mÊàÄMÃ’v; “ß=@402|?â‹{UžÅmá„éà¥ónÜ$“s òpyL£ÇÓn2oQT Ñ´ëg³x-R&²ˆÃŒ•Û+ÇQÀ89äÔUú(¢Š(¢Š(¢Š(¢Š¯~‘ɧ\¤×mDÁçI<¶Œc– ØŽ¹¬oêzŽ«¡yú„yÛ3Çou·gÛ! 6ÏáÜ9Çâ8"·¦†+˜^âIb‘Jº:†V¨ õð00("ßîËÿ]åÿÑST6ÿv_úï/þŒjš aEPEPEPEPEPMSO‹WÒ/tÛ†u†ò·‘£ 0WR¤Œ‚3ƒéY¿Ø—ý Ú×ýú³ÿäzÝ¢˜_Ø—ý Ú×ýú³ÿäz?°5/úµ¯ûõgÿÈõ»Ea`j_ô7k_÷êÏÿ‘êK?j7PLþ/ÖÃI¹+C‘Ï'“ÅO¦Å­sö{Oø„Êc2 –ÆÞ!"t/j¯Ì¼®G#Ö´5 ÝÝi3´ŽHºß™öbÌp»­#„oã™ñžïÅVñš%ýþ“¥é·ßf×L„Æa É ³«,®Ã²íi7?œüUÚMÿ>7?œüU2Š.Àö“ÏÏçÿU­¢³‚7eTBMEQE (¢€ (¢€ (¢€ ŸLÿUŸýpOýQE5¸ ¹Ò4ÛØ. »Óí'ŠáÄ“Ç,*Ë+39 *ŒžÀzT?ðh¿`’ÃûOûŒíþÌž[0A+Œ¨úéEú0ê‹0éöVÞO‘go‘EÈ•|´b UÀà«8ùG¥Vè’ Pú6žÂÓþ=ÃZ¡òyÏÉÇËÏ¥Uý¯™+á4¨¢Š‘…Q@Q@Q@Q@Q@ÿv_úï/þŒjšŠ*QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEÿÙnip2-8.7.0/doc/src/figs/snap1.jpg0000644000175000017500000006201013224651032013324 00000000000000ÿØÿàJFIFÿá°ExifII*JR(i‡Züÿÿ)( üÿÿ)( 0210‘ 0100 ÿÿ ã ÿÛ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ä Bàw¬ëÝJH^Y¥HãA–f8{šä'ø• £•[æou‚F˜\Pæ/­bú×›Ÿ‰z/üýÉÿ€òñ4ÂËÑçêOü“ÿ‰ HóÖ1}kÍÿáeè¿óõ'þÉÿÄÑÿ /FÿŸ©?ðOþ&€=#Ì_Z<Åõ¯7ÿ…•£ÏÔŸø'ÿGü,­þ~¤ÿÀy?øšô1}hóÖ¼ßþVÿ?Rà<ŸüMð²´oùú—ÿäÿâhÒ<Åõ£Ì_ZóøYZ7üýKÿ€òñ4ÂÊÑ¿çæ_ü“ÿ‰ HóÖ1}kÍÿáehßóó/þÉÿÄÑÿ +FÿŸ™ðOþ&€=#Ì_Z<Åõ¯7ÿ…•£ÏÌ¿ø'ÿGü,þ~eÿÀy?øšô1}hóÖ¼ãþNÿ?2ÿà<ŸüMð²tùù—ÿäÿâhÑüÅõ£Ì_ZóøY:?üüËÿ€òñ4ÂÉÑÿçæ_ü“ÿ‰ GóÖ1}kÎ?ádèÿóó/þÉÿÄÑÿ 'GÿŸ™ðOþ&€=Ì_Z<Åõ¯8ÿ…“£ÿÏÌ¿ø'ÿGü,þ~%ÿÀy?øšô1}hóÖ¼ãþFÿ?ÿà4ŸüMð²4ùø—ÿ¤ÿâhÑüÅõ£Ì_ZóøY?üüKÿ€Òÿñ4ÂÈÒ?çâoü—ÿ‰ GóÖ1}kÎ?ádióñ7þKÿÄÑÿ #HÿŸ‰¿ð_þ&€=Ì_Z<Åõ¯8ÿ…‘¤ÏÄßø /ÿGü,#þ~&ÿÀiøšô1}hóÖ¼çþ>‘ÿ?à4¿üMð±ôùø›ÿ¥ÿâhѼÅõ£Ì_ZóŸøXúGüüMÿ€Òÿñ4ÂÇÒ?ç¼ßø /ÿEÀôo1}hóÖ¼çþ>‘ÿ=æÿÀiøš?ácé?óÞoü—ÿ‰¢àz7˜¾´y‹ë^sÿ Iÿžóà4¿üMð±ôŸùï7þKÿÄÑp=Ì_Z<Åõ¯9ÿ…¤ÿÏy¿ð_þ&øXÚOü÷›ÿ¥ÿâh¸æ/­búלÿÂÆÒç¼ßø /ÿGü,m'þ{Íÿ€Òÿñ4\FóÖ1}kÎáci?óÞoü—ÿ‰£þ6“ÿ=æÿÀiøš.£y‹ëG˜¾µç?ð±´Ÿùï7þKÿÄÑÿ Iÿžóà4¿üMѼÅõ£Ì_ZóŸøXúOü÷›ÿ¥ÿâhÿ…¤ÿÏy¿ð_þ&‹èÞbúÑæ/­yÏü,}'þ{Íÿ€Òÿñ4ÂÇÒ?ç¼ßø /ÿEÀôo1}hóÖ¼çþ>‘ÿ=æÿÀiøš?ácéóñ7þKÿÄÑp=Ì_Z<Åõ¯9ÿ…¤ÏÄßø /ÿGü,}#þ~&ÿÀiøšôo1}hóÖ¼çþ>‘ÿ?à4¿üM'ü,#þ~&ÿÀiøšô1}hóÖ¼ãþF‘ÿ?à4¿üMð²4ùø›ÿ¥ÿâhÑüÅõ£Ì_ZóøYGüüMÿ€Òÿñ4ÂÈÒ?çâ_ü—ÿ‰ GóÖ1}kÎ?ádhÿóñ/þKÿÄÑÿ #GÿŸ‰ðOþ&€=Ì_Z<Åõ¯8ÿ…‘£ÿÏÄ¿ø 'ÿGü,þ~eÿÀy?øšô1}hóÖ¼ãþNÿ?2ÿà<ŸüMð²tùù—ÿäÿâhÑüÅõ£Ì_ZóøY:?üüËÿ€òñ4ÂÉÑÿçæ_ü“ÿ‰ GóÖ1}kÎ?ádèÿóó/þÉÿÄÑÿ 'GÿŸ™ðOþ&€=Ì_Z<Åõ¯8ÿ…“£ÿÏÌ¿ø'ÿIÿ +FÿŸ™ðOþ&€=#Ì_Z<Åõ¯7ÿ…•£ÏÌ¿ø'ÿGü,­þ~eÿÀy?øšô1}hóÖ¼ßþVÿ?2ÿà<ŸüMð²´oùú—ÿäÿâhÒ<Åõ£Ì_ZóøYZ7üýKÿ€òñ4ÂÊÑ¿çêOü“ÿ‰ HóÖ1}kÍÿáehßóõ'þÉÿÄÑÿ +FÿŸ©?ðOþ&€=#Ì_Z<Åõ¯7ÿ…•£ÏÔŸø'ÿGü,½þ~¤ÿÀy?øšô1}hóÖ¼ßþ^‹ÿ?Rà<ŸüMâ^‹ÿ?Rà<ŸüMzHp{Ò‚ yÜ_ô"ÀÇ[y?øšêôÍn×R·YígI¢nŒ‡?‡Ö€6¨¦#îú(¢Š*­Ô›šµYz›í‰¨ɾ(ê²²ÙÙ+‘Œîà»qŒÿßYüy¾êë~"J_P´ç “ÿe®3uK6ê7T;«®Ñt¤Ô| $‚ÁnnÓVŒHÉy[FAã;søP•ÄÝŽ_u«¼žÚÃNÔ|cršVŸ0±ò ¼3@4Ý× Æ? G±Ò­|f¤éeµÆœ“ˆbµ3ÇÆãê¼t÷¤µ·õÒãj×þ»™Ân£uwðh2Ùë:½ÍÝž•,P,_¸‡M3Œ7B‘näžô·Zw¯kÞ´µ·‚áãŠâÍÊc8RêPz}hÏ÷Qº½ËOÑo5­yí¬m¤rG‹O9[æ%#yÈ#9ª¶úv“sâëϳéd¼:qž; ‹s¼ã°Œó´Œ{Ð8ë‹›[+K¹,7aŒ$0%‚œ;sU·WYãI&} ÃqcŒ¦9÷[G‰cù—€§§¯ãZ>°Ñotm;V½¶µYy–×`Ä¿½ve–È œš}ñÁn£uz$z›g¨A¤=µÝõŽŸ-ÑB£72–ùVÀì}iiW:׆%½Ò-ì®/Dÿj±X¶! Ó垟J_×çþ@ô8‹m>æîÊòòS š«LK`€Ç¿J«º»ÿ Ïa¬Câ¿·³Ó¬±R 8¼¥À‘¹=y<jœ6ðCã»Û}GAˆEEa†ÚÏΊ1‘²FE¸ÇS×'·c¨Z×ò8ÍÔn¯@‹H{+¿I&¦^Þ[ÅÛ[ÅfZ,6AÄ}A dZFÐ-lj£š+Hq¦ »«mM£ž ¬YûgÆ€þ¿/ó8 Ôn¯F›BÒßđ˛1Ò äv>W”’ÌòóÇûµS@°Žþ}V÷RÐí­o-áɲ]9Šm$‚þFAcÆ:Ð ºÕ­âŲ‹Z"ÂÖ[U1+I püçyPx8ªº…¦—mk –:×Û¦cûÈ~Æñycw1ÁçŽ(ép+¼3Çs¼2,2’#‘”…|uÁïŠuv3Ër>iBßM†ò3ö•šW·2µ¸Ü~`GÜ>þÕ©k Ú¯†ä¶½²´’o춺Kˆl ²œdf}ß3{`ˆô¿-mæp—–6 j÷(]B'‹ Pô>ÕQM?™äÃ$¾Z—- lQÕŽ:s^›ojº„^²»Ñ­î4é4•3^¼'tBF$轸ëÍs~Ô§m_ÓGöXôéåŒfé’zž KüÿPZÛåøœžê7Tºt6w7B;ëÿ°Á´Ÿ;Èiyì6¯?Y³·´>(³´Šà^Ú5ÜIæŒbU,3•<ޤSJîÂoK”wU‹ë+½2í­o`h'P£x##¡"ºßÛØ\èÚóÅ¥ÙZK¦_,1IkŒºŒ6:šÖ½°·Wñ,öú5¥õŵ½©·‚Ko5rAÎ{Þ”¯¥ÿ­®Uµ·õ½7†)®e[Ã$Ò·D‰ 1úÍE5´­Ä2C*õIP«¨<×ku¢ÞZ[èe´™îôôšõ!b¢ß'æG `þ•‰ã;é®õKq%µäQ[À°E-äl’N«œŽrOùÍ Fê7T;¨Ý@n£uCºÔ6ê7T;¨Ý@n£uCºÔ6ê7T;¨Ý@n£uCºÔ6ê7T;¨Ý@n£uCºÔ6ê7T;¨Ý@n£uCºÔ6ê7T;¨Ý@n£uCºÔ6ê7T;¨Ý@n£uCºÔ6ê7T;¨Ý@n£uCºÔ6ê7T;¨Ý@n£uCºÔ6ê7T;¨Ý@n£uCºÔ6ê7T;¨Ý@n£uCºÔ6ê7T;¨Ý@n¤ÝQn¤f;:â€4¬ôËÛôó!DH³€ò¶úw5íæžWÏEØÇÐåIô­ñpâ(ÒØFQTÊàvƨ/§gÓ.à ù X°Ïn w  KKk«éLvñ†#ï18 õ5jïGÔ,á2ºÅ"(˘£ÜT¶S,Z(Ên”6Ó÷Àê:qVṉ/PApdSnqqÕqÔŸzÁn.§H-ã2Hç «Þ¶ÛÂzºÃæ²»cýZËó~£­'‡Z(o¯™0ùcÿwqÏòZÑŠîïíc{ÏöMçc˜ú7¢õÁÀÎü о&P›Œz¾N¥%RmëØår;#©GS†V úWgðãS–×[–Ø9òeŒ±\ñ¸ƒù\߈V.¸ÜÑ©÷¹þ˜«ž ¯ˆPîé]t§Ï.ç›^—²©*}™ôUŒÞd`æ´aèîZ­±Òµ1Š( ô¬[ýK}+\ô¬}[ýK}(Â> Ÿø˜[ÀÿöZã·W_ñþ?í¿àû-q”˜É7U‹]BòÅ™¬ï.-™†Á+!?\TÉÇSNdtÆôeÜ7 ÀŒQíH &þí„àÝÜq8[÷¸é»Ÿ›ñ©WÔ£œNšâÌF$YÜ0AÑsœãÛ¥P¢€/GªêÜÉsýÜsÉ÷åIØ;}XšhÔoEçÛíȺÿžþky1÷³žœU: ÀÍY‚òâÖ>Þâhfÿž‘9VüÇ4çÔ/$»owp×#‘3JÅÇü 9ª¬c‚®?…†åIš¹u¨^_2µååÅË(™åg#é’j5º xyV!ž0ä+ББUè  mv÷bíîîä|ó+È6sÒœu;漆úèÝ/s3yƒ·ÞÎ{Õ"qÔ⊲—wÅ4Iq*Ç6<ÔW IŽFáßñ©×XÔÒU•5+Õ•SËW'÷AÏOn•ŸEoé¾'»Ó¬µXÕ§{›ðƒí^{ #*IÎz’sŽ¢³Q½K³x··+tzÎ%a!ÿg5NŠ<À»&§}5Ò]K}u%Â}Ùžf.¿F'"œumDÝ‹³¨]›6‰Ìï¼MÙÎ*…fâî{¹Œ×3Ë<§«ÊåØþ'š‹u4#”gŘ@ÏLžÔ:PÊvJ¬PqЖ¯fëY†š–}ŒŽÒ «#Éc¡¶®8ÎIVý(ƒZ¼·Ñ¥Òã* ’Q)l|ÀŒp¡Â“þè¦ë½Î·¨5íÐŒHÊlc ‡ëõ4ßõý[BºO \£ »yl4éÖ9æVšÎ7}ʤŒ±\ž{W7Vì5 tç™áTc4/oáX`ãž´tbê¡a¦Ü-„ú›K ú‘ÌkcqE †Ø ]¿6H'\Ô'E²Ó­¦›W’å¶Ý½¢%¡U$¦71,Œ sê*½—ˆn,­ „ÚÚ\f/m$ñ–h 9ùyóÎ#4Û]zx"–‹{k褗Ï)t…€“» r{ö4z_Ö£õþ¿­ Iôïì­#ÄVb_5KVGÆ7+ÊHìpEKã}.;;ùï._>ñÃ[,xØT,H99ãhÁOaX¯^Mý£çˆ¦þÐÇ›½z9R¸Æ1Û¶;Sï0 }â ´ŽÂ3qrc¸’Óí"V»cRWr¡ŒŸ0ä`dw=1X‘kjwWê‘nD¡Áhó ŽÚ8©$×âÁ-®l¬î8¼˜îdFóQ;CqÛ ÔÙò¥Ößçÿ»«ÿ^FÝÍ…­õÕ³^4âm)È‚³`Œ@ëéXš®kogec$ÍktŸÑ€À#AÀ­/ÄH†V¾ŠÙŒZkZD6"nFÕ|LóÇÖ²5V]D@†-àJÅ B&NORI$õ$šÿ×wÿKoë²(ÑEÀ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+¡ðgüŒ)þáþ•ÏWAàÏùcÿpÿJúDÿR¿Jß+DÿR¿Jß*„-Q@éXú·ú–úVÁéXú·ú–úPžéú}ž©ãÈm/m¡¸…íf;e\38æ»_øAü(:èV?÷ê¹-þJE±ÿ§YÿšWc«ëñé:¥…´ÑHÑ],„¼q¼Œ»@ÆA'9¤ðƒøOþ€V?÷êøAü'ÿ@+ûõV®uý:Îæ;{‰¤‰äÛµš eºûv‚} ¬Ãâ«kT³Ô®<¨`1yDBÄ(eÉ,À{œS°áðŸý¬ïÕEsàÏ Ák,ðèv¢RüÀ¬pA¬kºøÑ­â•,¦º2éÄh‚ä¿Nü’ZÒ¾?ñ-ºôÅÿôE€Êÿ„WÿôÒÿð?ð£þ_ÿÐKÿÀ8ÿµè¤3#þ_ÿÐKÿÀ8ÿÂøE|;ÿ@ /ÿãÿ ×¢€2?áðïý4¿üü(ÿ„WÿôÒÿð?ð­z(#þ_ÿÐKÿÀ8ÿÂøE|;ÿ@ /ÿãÿ ×¢€2?áðïý4¿üü(ÿ„WÿôÒÿð?ð­z(#þ_ÿÐKÿÀ8ÿÂøE|;ÿ@ /ÿãÿ ×¢€2?áðïý4¿üü(ÿ„WÿôÒÿð?ð­z(#þ_ÿÐKÿÀ8ÿÂøE|;ÿ@ /ÿãÿ ×¢€2?áðïý4¿üü(ÿ„WÿôÒÿð?ð­z(#þ_ÿÐKÿÀ8ÿÂøE|;ÿ@ /ÿãÿ ×¢€2?áðïý4¿üü(ÿ„WÿôÒÿð?ð­z(#þ_ÿÐKÿÀ8ÿÂøE|;ÿ@ /ÿãÿ ×¢€2?áðïý4¿üü(ÿ„WÿôÒÿð?ð­z(#þ_ÿÐKÿÀ8ÿÂøE|;ÿ@ /ÿãÿ ×¢€2?áðïý4¿üü(ÿ„WÿôÒÿð?ð­z(#þ_ÿÐKÿÀ8ÿÂøE|;ÿ@ /ÿãÿ ×¢€2?áðïý4¿üü(ÿ„WÿôÒÿð?ð­z(#þ_ÿÐKÿÀ8ÿÂøE|;ÿ@ /ÿãÿ ×¢€2?áðïý4¿üü(ÿ„WÿôÒÿð?ð­z(#þ_ÿÐKÿÀ8ÿÂøE|;ÿ@ /ÿãÿ ×¢€2?áðïý4¿üü(ÿ„WÿôÒÿð?ð­z(#þ_ÿÐKÿÀ8ÿÂøE|;ÿ@ /ÿãÿ ×¢€2?áðïý4¿üü(ÿ„WÿôÒÿð?ð­z(#þ_ÿÐKÿÀ8ÿÂøE|;ÿ@ /ÿãÿ ×¢€2?áðïý4¿üü(ÿ„WÿôÒÿð?ð­z(#þ_ÿÐKÿÀ8ÿÂøE|;ÿ@ /ÿãÿ ×¢€2?áðïý4¿üü(ÿ„WÿôÒÿð?ð­z(#þ_ÿÐKÿÀ8ÿÂøE|;ÿ@ /ÿãÿ ×¢€2?áðïý4¿üü(ÿ„WÿôÒÿð?ð­z(#þ_ÿÐKÿÀ8ÿÂøE|;ÿ@ /ÿãÿ ×¢€2?áðïý4¿üü(ÿ„WÿôÒÿð?ð­z(#þ_ÿÐKÿÀ8ÿÂøE|;ÿ@ /ÿãÿ ×¢€2?áðïý4¿üü(ÿ„WÿôÒÿð?ð­z(#þ_ÿÐKÿÀ8ÿÂøE|;ÿ@ /ÿãÿ ×¢€2?áðïý4¿üü(ÿ„WÿôÒÿð?ð­z(#þ_ÿÐKÿÀ8ÿÂøE|;ÿ@ /ÿãÿ ×¢€2?áðïý4¿üü(ÿ„WÿôÒÿð?ð­z(#þ_ÿÐKÿÀ8ÿÂøE|;ÿ@ /ÿãÿ ×¢€2?áðïý4¿üü(ÿ„WÿôÒÿð?ð­z(#þ_ÿÐKÿÀ8ÿÂøE|;ÿ@ /ÿãÿ Ôšhíà’y[lq©wlg “\ýö¡ õä).ÖŠBøó`‰M¼ü¹ãuc^¼hÅÊBl¹ÿ¯‡è¥ÿàáXž&Ñt­6ÞÊk2ÊÖVº ^Žq:p?*ÖÓ5kx K[‰.|ß=ãS$r6A„ùÈ ðWœÕÿLJý~/þ‹zºu#R<ÑîihŸêWé[ã¥`hŸêWé[ã¥hÑE•«©o¥l•«©o¥púÿ‹…ô¶˜è5Õkv×Ë«éz™¼ÂT’‘Q°à`‚Äõï\χ×>;½ —úW¡Ð ¯iZæ¥5â5­ì«3ÄÖÞ]ê¤0¨ÚY]7 Ç!¹Ãv«·¶š¼Z–º¶ºWÚcÔ‘9ŒÈ¨˜iÜ Ýù]mt°Ó³¹Ïjš=Éð|]°óç„[¦ràŽ„ž}5µ}ÿ û¯úâÿú ©ê ïùÝ×ÿÐM6îJVEAöëOùúƒþþ >Ýiÿ?PßÁRQ=Û­?çêûø(ûu§üýAÿOEAöëOùúƒþþ >Ýiÿ?PßÁ@ÑP}ºÓþ~ ÿ¿‚·ZÏÔ÷ðPôTn´ÿŸ¨?ïà£íÖŸóõýü=Û­?çêûø(ûu§üýAÿOEAöëOùúƒþþ >Ýiÿ?PßÁ@ÑP}ºÓþ~ ÿ¿‚·ZÏÔ÷ðPôTn´ÿŸ¨?ïà£íÖŸóõýü=Û­?çêûø(ûu§üýAÿOEAöëOùúƒþþ >Ýiÿ?PßÁ@ÑP}ºÓþ~ ÿ¿‚·ZÏÔ÷ðPôTn´ÿŸ¨?ïà£íÖŸóõýü=Û­?çêûø(ûu§üýAÿOEAöëOùúƒþþ >Ýiÿ?PßÁ@ÑP}ºÓþ~ ÿ¿‚·ZÏÔ÷ðPôTn´ÿŸ¨?ïà£íÖŸóõýü=Û­?çêûø(ûu§üýAÿOEAöëOùúƒþþ >Ýiÿ?PßÁ@ÑP}ºÓþ~ ÿ¿‚·ZÏÔ÷ðPôTn´ÿŸ¨?ïà£íÖŸóõýü=Û­?çêûø(ûu§üýAÿOEAöëOùúƒþþ >Ýiÿ?PßÁ@ÑP}ºÓþ~ ÿ¿‚·ZÏÔ÷ðPôTn´ÿŸ¨?ïà£íÖŸóõýü=Û­?çêûø(ûu§üýAÿOEAöëOùúƒþþ >Ýiÿ?PßÁ@ÑP}ºÓþ~ ÿ¿‚·ZÏÔ÷ðPôTn´ÿŸ¨?ïà£íÖŸóõýü=Û­?çêûø(ûu§üýAÿOEAöëOùúƒþþ >Ýiÿ?PßÁ@ÑP}ºÓþ~ ÿ¿‚·ZÏÔ÷ðPôTn´ÿŸ¨?ïà£íÖŸóõýü=Û­?çêûø(ûu§üýAÿOEAöëOùúƒþþ >Ýiÿ?PßÁ@ÑP}ºÓþ~ ÿ¿‚·ZÏÔ÷ðPôTn´ÿŸ¨?ïà£íÖŸóõýü=Û­?çêûø(ûu§üýAÿOEAöëOùúƒþþ >Ýiÿ?PßÁ@í·Û,.-wìó¢h÷c8È#8ükÕíçÒf…e¸Ža2»± ©_V9ûߥuÿn´ÿŸ¨?ïàª÷'I¼Ûö¯±O·;|ÝŒõÆk—…xÙïщ£ IÒçÔmíïÔiŸ»Ë’HŽNíÝöúw«>2ÿ úü_ýëbôûx–(%µŠ5èˆÊ ~±|[$si¶M«¯Úו9qëJ#F<±¬ièŸêWé[ã¥`hŸêWé[ã¥nÑE•«©o¥l•«©o¥qÞñZôŠOå]îóí\/‡GüU¬}‡þ:jß¿åÇþÚìµ2vWŸ*¹×ï>Ôo>ÕätV^×ÈËÛy¹¼ûQ¼×‘ÑGµòmäzïšþ´y¯ë^EE×È=·‘ë¾kúÑæ¿­y{_ öÞG®ù¯ëGšþµäTQí|ƒÛy»æ¿­kúבQGµòmäzïšþ´y¯ë^EE×È=·‘ë¾kúÑæ¿­y{_ öÞG®ù¯ëGšþµäTQí|ƒÛy»æ¿­kúבQGµòmäzïšþ´y¯ë^EE×È=·‘ë¾kúÑæ¿­y{_ öÞG®ù¯ëGšþµäTQí|ƒÛy»æ¿­kúבQGµòmäzïšþ´y¯ë^sáŸùmàú¯C­#.esHK™\šþ´y¯ëL¢¨±þkúÑæ¿­2Ššþ´y¯ëL¢€æ¿­kúÓ( ù¯ëGšþ´Ê(þkúÑæ¿­2Ššþ´y¯ëL¢€æ¿­kúÓ( ù¯ëGšþ´Ê(þkúÑæ¿­2Ššþ´y¯ëL¢€æ¿­kúÓ( ù¯ëGšþ´Ê(þkúÑæ¿­2Ššþ´y¯ëL¢€æ¿­kúÓ( ù¯ëGšþ´Ê(þkúÑæ¿­2Ššþ´y¯ëL¢€æ¿­kúÓ( ù¯ëGšþ´Ê(þkúÑæ¿­2Ššþ´y¯ëL¢€æ¿­kúÓ( ù¯ëGšþ´Ê(þkúÑæ¿­2Ššþ´y¯ëL¢€æ¿­yͪØÚÜL‘£›¢§Ë…àœ“ÏÌk¿¯5_ùÚÿ×ãÿè XÎMUŠõýŠp‹¡95ª·êw'ú•úVøéX'ú•úVøé[œÂÑE•«©o¥l•«©o¥r~ÿ‘¥ÿÝ?ú UŸËý´ÿÙj·‡?äi÷Oþ‚ÕgÆßòãÿm?öZΧÂÈ©ð—Jˆ\ÀHhÉ=aRÕd³D¸2ƒÇU^ÀÖ ÝNun¥š¯y;[Û–Œ•ˆHÔô,zUЧuf×W1r°Æ ù«n”«yȪö±Ú¯”šE†Už~SË”çvNáÆ)ÛL<•”¦ÈGÊ?1Æ2hÐ4&’à$¾Xä|n!@à~&š×±¬›v¹‚åö¦Í²Ü#…`C‚wc¸¨à²håùº, vÏ?ìôÍ ²±,W%Ì©°˜Õ¶†À8ç<Ñö‡ûi‰P²*Œ‘Ž õçÒ–Ú)aÞ¯°¡bÁ999æš±N“NËå•äNAÆéF¡ºpǺO2Rííqϵ<Üm¹‘ÝŠÇc*}OõÿjÚË·1ùgËB„1#®2GåD¶rH'—çuu䎘àþTô„ðÜ ™—c£(‡àôþU#–Å3À'5´&%bÈ¡ØòCÏây©\1‚0V à‘œ—k÷1—U#‘\®ðyfLG¸ÇoÖ´¬dš[Uy”‚z0Xv$v5Žº5ä‘Ë$²0'jç!ýI>õ­§Eq ’%Ëý‡]£°Ïz¹òÛCIòÛC¢ðÏüŒ6¿ð?ýסמxgþF_øþ€kÐêéliGá (¢´5 (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ óUÿ5·ý}¿þ‚•éUæ©ÿ kúûý+ ÿ?Ðê¥þïSÖ?©ÜhŸêWé[ã¥`hŸêWé[ã¥t‚ÑE•«©o¥l•«©o¥r~ÿ‘¥ÿÝ?ú UŸËý´ÿÙj·‡?äi÷Oþ‚Õܧz™+« JêÇ‘Q^¿Egì|̽™äW¯ÑG±ócæyëôÉdHbyd`¨€³1è£Ùy‡±ó<ŽŠô±«Ï"‡‡FÔ%†U¢î¸fójÝÿÐ QÿÈ_ü]gh÷ü ~§?êßæy¥éÚ·ôÔòÿGö­ßýµü…ÿÅÑh÷üêsþ­þgšQ^—ý«wÿ@-Gÿ!ñtjÝÿÐ QÿÈ_ü]À>§?êßæy¥éÚ·ôÔòÿGö­ßýµü…ÿÅÑh÷üêsþ­þgšQ^—ý«wÿ@-Gÿ!ñtjÝÿÐ QÿÈ_ü]À>§?êßæy¥éÚ·ôÔòÿGö­ßýµü…ÿÅÑh÷üêsþ­þgšQ^—ý«wÿ@-Gÿ!ñtjÝÿÐ QÿÈ_ü]À>§?êßæy¥éÚ·ôÔòÿGö­ßýµü…ÿÅÑh÷üêsþ­þgšQ^—ý«wÿ@-Gÿ!ñtjÝÿÐ QÿÈ_ü]À>§?êßæy¥éÚ·ôÔòÿGö­ßýµü…ÿÅÑh÷üêsþ­þgšQ^—ý«wÿ@-Gÿ!ñtjÝÿÐ QÿÈ_ü]À>§?êßæq~ÿ‘†×þÿ ô:­k¨ §xd·žÚuPÆ)À®q‘‚Aô5f¶‚Ih5MÓ÷XQEc (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ óTÿ5¿ý}¿þ‚•éUæ©ÿ kúûý+ ÿ?Ðê¥þïSÖ?©ÜhŸêWé[ã¥`hŸêWé[ã¥t‚ÑE•«©o¥l•«©o¥r~ÿ‘¥ÿÝ?ú Wrë†ðçü/þéÿÐZ»”ïHc¨¢Šb (¢€ Îñü‹šŸýzÉÿ šÑ¬ïȹ©ÿ׬Ÿú ©ŸÂÍ)|qõA§Í+xŽî#˜“N´uBÇj±yÁ z«Ÿ ô­ªÂÓ¿äj¾ÿ°e—þ‡q[´ÖÄKvQE1Q@Q@Q@Q@Q@Q@Q@Q@Q@·ò4Û׌¿ú2:¹Tîÿäi¶ÿ¯¿ôdUr³†ïÔÖ¦Ñôÿ0¢Š*ÌŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¼Ù?ä oÿ_oÿ ¥zMy²Èßþ¾ßÿAJÂƇÏô:©»Ôõêvú'ú•úVøéX'ú•úVøé] ´QE¥cêßê[é[¥cêßê[é@Ÿ‡?äi÷Oþ‚ÕÜ!Æk‡ðçü/þéÿÐZ»jC$ÈõdzŠŽŠ“#ÔQ‘ê*:(LQUµo·i—VŠáLÑ4alŒf¥¢‡ª³ÚwFl7W6÷ qýƒpnZá’D¹ˆ†T,W¸ã.Ýçš±ý±}ÿ@+¯ûÿÿV¨¨äÌÿò5ö‘þUøÿ™Wûbûþ€W_÷þþ.í‹ïú]ßøøºµE¯ùŸáþBö‘þEøÿ™Wûbûþ€W_÷þþ.í‹ïú]ßøøºµE¯ùŸáþAí#ü‹ñÿ2¯öÅ÷ý®¿ïü?ü]Ûßôºÿ¿ðÿñujŠ9_ó?ÃüƒÚGùãþe_í‹ïú]ßøøº?¶/¿èuÿáÿâêÕr¿æ‡ù´ò/ÇüÊ¿Ûßôºÿ¿ðÿñtl_Ð ëþÿÃÿÅÕª(åÌÿòiä_ù•¶/¿èuÿáÿâèþؾÿ ×ýÿ‡ÿ‹«TQÊÿ™þäÒ?È¿ó*ÿl_Ð ëþÿÃÿÅÑý±}ÿ@+¯ûÿÿV¨£•ÿ3ü?È=¤‘~?æUþؾÿ ×ýÿ‡ÿ‹£ûbûþ€W_÷þþ.­QG+þgø{Hÿ"üÌ«ý±}ÿ@+¯ûÿÿGöÅ÷ý®¿ïü?ü]Z¢ŽWüÏðÿ ö‘þEøÿ™Wûbûþ€W_÷þþ.í‹ïú]ßøøºµE¯ùŸáþAí#ü‹ñÿ2„BæóUóÚµªÇB‘»«3eb~R@(ïëW袪1±3—3 (¢™!EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP^lŸò·ÿ¯·ÿÐR½&¼Ù?ä oÿ_oÿ ¥a?ãCçúT¿ÝêzÇõ;}ýJý+|t¬ ýJý+|t®ƒZ(¢€Ò±õoõ-ô­ƒÒ±õoõ-ô Oßò4¿û§ÿAjí«‰ðçü/þéÿÐZ»jC (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ódÿ5¿ý}¿þ‚•é5æÉÿ kúûý+ ÿ?Ðê¥þïSÖ?©ÛèŸêWé[ã¥`hŸêWé[ã¥t‚ÑE•«©o¥l•«©o¥r~ÿ‘¥ÿÝ?ú Wm\O‡?äi÷Oþ‚ÕÛRQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW›'ü­ÿëíÿô¯I¯6Où[ÿ×Ûÿè)XOøÐùþ‡U/÷zž±ýNßDÿR¿Jß+DÿR¿Jß+ äŠ( ô¬}[ýK}+`ô¬}[ýK}(“ðçü/þéÿÐZ»jâ|9ÿ#Kÿºô®ÚŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¼Ù?ä oÿ_oÿ ¥zMy²Èßþ¾ßÿAJÂƇÏô:©»Ôõêvú'ú•úVøéX'ú•úVøé] ´QE¥cêßê[é[¥cêßê[é@Ÿ‡?äi÷Oþ‚ÕÛWáÏù_ýÓÿ µvÔ†QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEæÉÿ kúûý+ÒkƒÔ4É´­:Ú Ú6f¸g #QÜJÆqn¬_¯ètSœU Ž]¿SªÑ?Ô¯Ò·ÇJÀÑ?Ô¯Ò·ÇJÜæŠ( ô¬}[ýK}+`ô¬}[ýK}(“ðçü/þéÿÐZ»jâ|9ÿ#Kÿºô®ÚŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¹ýÛ/÷Ïô®ž¹ýÛ/÷Ïô  ]ýJý+|t¬ ýJý+|t¦!h¢ŠJÇÕ¿Ô·Ò¶JÇÕ¿Ô·Ò€9?ÈÒÿîŸý«¶®'ßò4¿û§ÿAjí© (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+˜ñݲÿ|ÿJéë˜ñݲÿ|ÿJÕÑ?Ô¯Ò·ÇJÀÑ?Ô¯Ò·ÇJbŠ( ô¬}[ýK}+`ô¬}[ýK}(“ðçü/þéÿÐZ»jâ|9ÿ#Kÿºô®ÚŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¹ŸýÛ/÷Ïô®š¹ŸýÛ?÷Ïô  MýJý+|t¬ ýJý+|t¦!h¢ŠJÇÕ¿Ô·Ò¶JÇÕ¿Ô·Ò€9?ÈÒÿîŸý«¶®'ßò4¿û§ÿAjí© (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+™ñݳÿ|ÿJé«™ñݳÿ|ÿJÔÑ?Ô¯Ò·ÇJÀÑ?Ô¯Ò·ÇJbŠ( ô¬}[ýK}+`ô¬}[ýK}(“ðçü/þéÿÐZ»jâ|9ÿ#Kÿºô®ÚŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¹ŸýÛ?÷Ïô®š¹ŸýÛ?÷Ïô  MýJý+|t¬ ýJý+|t¦!h¢ŠJÇÕ¿Ô·Ò¶JÇÕ¿Ô·Ò€9?ÈÒÿîŸý«¶®'ßò4¿û§ÿAjí© (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+™ñݳÿ|ÿJé«™ñݳÿ|ÿJÔÑ?Ô¯Ò·ÇJÀÑ?Ô¯Ò·ÇJbŠ( ô¬}[ýK}+`ô¬}[ýK}(“ðçü/þéÿÐZ»jâ|9ÿ#Kÿºô®ÚŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¹ŸýÛ?÷Ïô®š¹ŸýÛ?÷Ïô  MýJý+|t¬ ýJý+|t¦!h¢ŠJÇÕ¿Ô·Ò¶JÇÕ¿Ô·Ò€9?ÈÒÿîŸý«¶®'ßò4¿û§ÿAjí© (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+™ñܳÿ|ÿJé«™ñܳÿ|ÿJÔÑ?Ô¯Ò·ÇJÀÑ?Ô¯Ò·ÇJbŠ( ô¬}[ýK}+`ô¬}[ýK}(“ðçü/þéÿÐZ»jâ|9ÿ#Kÿºô®ÚŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¹ŸýË?÷Ïô®š¹Ÿ}Ë?÷Ïô  MýJý+|t¬ ýJý+|t¦!h¢ŠJÇÕ¿Ô·Ò¶JÇÕ¿Ô·Ò€9?ÈÒÿîŸý«¶®'ßò4¿û§ÿAjí© (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+™ñwܳÿ|ÿJé«™ñwܳÿxÿJÔÑ?Ô¯Ò·ÇJÀÑ?Ô¯Ò·ÇJbŠ( ô¬}[ýK}+`ô¬}[ýK}(“ðçü/þéÿÐZ»jâ|9ÿ#Kÿºô®ÚŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¹Ÿ}ËO÷ô®š¹Ÿ}ËO÷ô  MýJý+|t¬ ýJý+|t¦!h¢ŠJÇÕ¿Ô·Ò¶JÇÕ¿Ô·Ò€9?ÈÒÿîŸý«¶®'ßò4¿û§ÿAjí© (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+™ñwÜ´ÿxÿJ髚ñwÜ´ÿxÿJÓÑ?Ô¯Ò·ÇJÀÑ?Ô¯Ò·ÇJbŠ( ô¬}[ýK}+`ô¬}[ýK}(“ðçü/þéÿÐZ»jâ|9ÿ#Kÿºô®ÚŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¹¯}ËO÷ô®–¹¯}ËO÷󧢩_¥oŽ•¢©_¥oŽ”Ä-Q@éXú·ú–úVÁéXú·ú–úP'áÏù_ýÓÿ µvÕÄøsþF—ÿtÿè-]µ!…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@s^.û–Ÿïæ+¥®kÅßrÓýãüÅièŸêWé[ã¥`hŸêWé[ã¥1 EPzV>­þ¥¾•°zV>­þ¥¾”ÉøsþF—ÿtÿè-]µq>ÿ‘¥ÿÝ?ú WmHaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP\׋¾å§ûÇùŠékšñwÜ´ÿxÿ1@z'ú•úVøéX'ú•úVøéLBÑE•«©o¥l•«©o¥qº:–×.ñ!ˆyL £þYä2†ü §ý—'ý rßGÿ‹ª^,ß‹ÿ0úínëî_ärßÙrÐ×'ýôøº?²äÿ¡®OûèÿñuÔÑGÕ©öü_ù‡×kw_rÿ#–þË“þ†¹?ï£ÿÅÑý—'ý rßGÿ‹®¦Š>­O·âÿÌ>»[ºû—ù·ö\Ÿô5Éÿ}þ.ì¹?èk“þú?ü]u4Qõj}¿þaõÚÝ×Ü¿È忲äÿ¡®OûèÿñteÉÿC\Ÿ÷Ñÿâë©¢«Síø¿ó®Öî¾åþG-ý—'ý rßGÿ‹£û.Oúäÿ¾ÿ]M}ZŸoÅÿ˜}v·u÷/ò9oì¹?èk“þú?ü]ÙrÐ×'ýôøºêh£êÔû~/üÃëµ»¯¹‘ËeÉÿC\Ÿ÷ÑÿâèþË“þ†¹?ï£ÿÅ×SEV§Ûñæ]­Ý}ËüŽ[û.Oúäÿ¾ÿGö\Ÿô5Éÿ}þ.ºš(úµ>ß‹ÿ0úínëî_ärßÙrÐ×'ýôøº?²äÿ¡®OûèÿñuÔÑGÕ©öü_ù‡×kw_rÿ#–þË“þ†¹?ï£ÿÅÑý—'ý rßGÿ‹®¦Š>­O·âÿÌ>»[ºû—ù·ö\Ÿô5Éÿ}þ.ì¹?èk“þú?ü]u4Qõj}¿þaõÚÝ×Ü¿È忲äÿ¡®OûèÿñteÉÿC\Ÿ÷Ñÿâë©¢«Síø¿ó®Öî¾åþG-ý—'ý rßGÿ‹­ë{«Hm¢‰ïâ‘‘—.2ĽjÝp¥kÔέz•U¦ÿ¿"·YÏÜ?÷Ø£íÖ_ó÷ýö*z+C·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø®Å2$ðÛÉ ¬ˆ´²œŒžß¥tõ…â¿ùÅÿ_ ü[Ñ?Ô¯Ò·ÇJÀÑ?Ô¯Ò·ÇJbŠ( ô¬}[ýK}+`ô¬}[ýK}(“ð÷üŒ“ÿº?­tÖºšB¢¬ q3,ŠØØ…‚î'·'_ιÿÈÉ?û£úÖŽ¹á뫘ï&³½¸2ܼe¡Ä{p¤t,¹N3×ëK¨úu]bïKó'm7}ŒEwÍç€Ø8TÇ8Ïr+JæYb¶i-à3Ê>ìa‚çñ=+ ö=FMYúuÍ핲¡‹d‘(–Nîà°éØcçÒ´/.µAk}öM?3"¨¶&U>a#“ŒŒm÷<âŽÔ©ÿ Am¨5퉆âËfèÒPêÛþîñÈâ®iÚœ×W—wV‹oq £’ùŠU³Žp9àñŠÉûìºåœZ}ÄWᥒæXË\’Fñ•c‚@ tŒUNšÎþîT±k 9·yC’ã9n cíL] ÛY»¸º¸‹LÓEÔvïåÉ,“ˆ”¸ê«ÁÎ? .µ{Øõìm´èå˜Û}¡üËyÆ>éÍTX5]$jÖ¶-w Ä’M ±LˆÑ—ä† GCÜf©Ï¤]½Ý„÷ÚGö¦Í=a4‘’%ÎIùÈÏ~E%ý}Ïõ멹k­%Öƒ&¨!d¤…£,)@#‚2:Õ-7Ä éßmÔæDWdTXí&R í²_ꣶZ]ì½³xÂÉ*Ëä[‰7•Ú›§åR\é÷RXh‘,Y{iáy†áò…R~ }~ïø"é÷ÿÀ-O¯iÖÑE$³:‰Tº¯’å¶Ž¤¨ÜN¹×4ÛD‰å¹LžbyhÒŸÞƒǿJÊÖ4«—×>ß½ÍÌ2[ˆY-®Ì¤s÷”sëU§Ðf¶»·žÚÊíí¾È°-ïŒRDA'“¸úö¥ý~c:,sÅo4N¯°ee9l¥¨øƒMÒ®sºÊSÌÚ¼˜\ãqÚÖ§³¶ŽÎÂÊÞ(Œ)F[q_•¸Ïz¦Ö7År^ùèÍ`!¸rûÉÆ:ô¡ï -µ5˜´}ªØÙ‹!u¬[nOÍŸ»·ºÓ´ÿiš¤ÞM¥Ã4»<ÀÆY}T0â¹h4{ý?G™î òÖ-­ÜïS‡Ž8>úUí& GRŸB¹›O6–öäù*±˜²Bž~qÛŠv_×Ïü…ý~ üÍ(µÛÄÕ­¬µ /ì«tÉu¸”d†qÇ¡5£o©ÙÝiƒQ†pÖ› ù„Frpyìk G]MµW½Ôôk‘u)dYLИà9  9<àdã$û Ø1M«hrÁ}nl幉ã’! r™Èê8¦:xºY'o/J‘áQ¹¶³q»`8çi}ÞÙâ¯ê:Í彨¼°Ó–òÐAç´ÆäF6ã?(Á$ãžp=ë"ÒÛÄ–/=¼6±•‹;¾Ór¸,~à8ÎÒ‡Ó=ê]GO¿Š=?I‹O¹¼Ò-àQ7“,hfaÀVÜÃåã'r­€¼Ësx’Yô½9¯%’ÕnÝ^QÈÏAÐå<{u¤¼ñ\Pi6z…µ•ÅÌwA6¬a˜/ÌÝÉè2Gq©k«RËK3}¦Í`{s2#BêI\œà˜ƒ‚zw¦Í ÝCà{}&&¹ŒÂ[ $H¬Ø'u¦­øþ¯þµþ¾F޵©Þép=Ä|wñFd•ÞäF@@œ})uil|:ut¤_-$1ØpÄpx8ëU|Io%ü?d:ÔSnèåó‘oÈÏ$0ǨÍ3TÒõÿgûV¡äƮۀÞÀ®NN=Z˜ú¢Ýç‰ô>êKk«£‘íó’åSwMÌÑŸsRZøƒK¼Žåá¹8¶O2Q$N…WîÃHàò+Rѯ®!ñBÇo¸ßEÛüëó‘=xç׺ÍÊÏ©^´xƒûá/¸}ðXãzT·oëÈi^ß×c_Oñ™ªOäÚ\–—fð’Dñ–_P qE¿ˆt««ág Øi‰e_‘‚¹^¡X¬G±5‡¥Ûj:¬š$óX›+{+cûÖ•XÊZ0 (SÀïÎ;qQh>žÊ[+kí>ñÍ›×öh2„eò ÛÆMSVv%;«šÓøžÊm:â}>å3_ÞÏo/•Ë…à…ù½8Í]»×4û´µº™ã‘Ê€ÆÙ“ÐÆÑŸsXŸØÚ‡ü+øôϳÿ¦¹zö”7\ã§½Tñ‘­jWÑù—É$fÕ¢»T†4Ia“Np{QÖÃ:->ú{wWµ‘ŠÙ¢:nLŸ¯5]µÛۛ˘t(^Elæ)f’àD¥ÇU^qø “O³º¶ñ&­<ÿ£]ž9Cª»J‘×=ý*•¤Z¶ƒq{[_ÚOp÷I茅ÎJ°b:ò3Å/òFïÄZfŸ*Á{p!Ÿ`y+8ˆï2‚{œUSXº¶Ôoâ‚Eò¡Òšê?”Ÿ-ƒžãU®lõx'ÕÄbÜ®ªŠC”[ËUóÉùsÞ›/‡ïâ—ȉÑ>Œl ÅÀÛ Î œöÍoë³þ¾ôjÿÂCee§ÙI¨\<ð,¥R&sŒ ¶zô©®¼A¥Ù¤-ÖápždBiK¯÷€@N=ëš“DÔ…Åì–’fÁ-¥·µ¿òdžr+)Ï­NÖÒxvõ.­lU펞°éÛí$õsÊüÜ{S“Wo×õ&7²þ»rø—H†ÞÞv»Ìwù±ùq;’ŸÞ!A {‘ZpÍÄÍ ¬‘H¡‘Ôä0=¯=Òô[Óc¥j)kws šrBÑZÞ›wB `~ò†RÖºÍ&d´ºD‚É¡†ÚÍ%$˼ÆXúô<æ‹tþº‚}®…›MOíZÆ¡aäíûŒïÝûÁ=1Æ1L¾ñ•¦Üýžîè$¡C0Ì…ˆ(÷8¬À5M;ĺ­ÔZ<÷]vÙâ¿ú Ý~Ÿá@·ç'«ÿß¶ÿ <äõûößá^IöÏÿÐ^ëôÿ >Ùâ¿ú Ý~Ÿá@·ç'«ÿß¶ÿ <äõûößá^IöÏÿÐ^ëôÿ >Ùâ¿ú Ý~Ÿá@·ç'«ÿß¶ÿ <äõûößá^IöÏÿÐ^ëôÿ >Ùâ¿ú Ý~Ÿá@·ç'«ÿß¶ÿ <äõûößá^IöÏÿÐ^ëôÿ >Ùâ¿ú Ý~Ÿá@²Î®ÑÜpù9FO¨÷©kÈ~Ùâ¿ú Ý~ŸáGÛÙâ¿ú Ý~Ÿá@½EyÛBë`¼¹š`p푚éôeÄ+ô­ÑÒ³¬!òã¤:SQESC (  3Ù£õ¨¾• ‚Š(ŸØðz ?±àôQ@ö<‚ìx=Pý £ûAEcÁè(þǃÐQEØðz ?±àôQ@ö<‚ìx=Pý £ûAEcÁè(þǃÐQEØðz ?±àôQ@ö<‚ìx=Pý £ûAEcÁè(þǃÐQEØðz ?±àôQ@ö<‚ìx=Pý £ûAEcÁè(þǃÐQEØðz ?±àôQ@ö<‚ìx=Pý £ûAEcÁè(þǃÐQEØðz ?±àôQ@ö<‚ìx=Pý £ûAEcÁè(þǃÐQEØðz ?±àôQ@ö<‚ìx=Pý £ûAEcÁè(þǃÐQEØðz ?±àôQ@ö<‚ìx=Pý £ûAEcÁè(þǃÐQEØðz ?±àôQ@ö<‚ìx=Pý £ûAEcÁè(þǃÐQEØðz ?±àôQ@ö<‚ìx=Pý £ûAEcÁè(þǃÐQEØðz ?±àôQ@ö<‚ìx=P×I„‚®AetŠ(ühqRQEQEÿÙnip2-8.7.0/doc/src/figs/snap16.jpg0000644000175000017500000033140113224651032013415 00000000000000ÿØÿàJFIFÿá°ExifII*JR(i‡Züÿÿ)( üÿÿ)( 0210‘ 0100 ÿÿ q ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀq"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?÷ú(¤cšZ+ÎüOñcNе,-m^úâ#¶R$ŠßÝÎHïÅsÿð¼$ÿ ÿÀÏþ×EÀöJ+ÆÿáxIÿ@ÿŸý®ø^Ðàgÿk¢à{%ãð¼$ÿ ÿÀÏþ×Gü/ ?è?ð3ÿµÑp=’Šñ¿ø^Ðàgÿk£þ„ŸôøÿÚè¸ÉExßü/ ?è?ð3ÿµÑÿ ÂOúü ÿít\d¢¼oþ„ŸôøÿÚèÿ…á'ýþöº.²Q^7ÿ ÂOúü ÿítÂð“þ€ÿ?û]Ù(¯ÿ…á'ýþöº?áxIÿ@ÿŸý®‹ì”WÿÂð“þ€ ÿŸý®ø^Ðð3ÿµÑp=’Šñ¿ø^Ðð3ÿµÑÿ ÂOú/þöº.²Q^7ÿ ÂOú/þöº?áxIÿ@ÿÀÏþ×EÀöJ+ÆÿáxIÿ@ÿÀÏþ×Gü/ ?è¿øÿÚè¸ÉExßü/ ?è¿øÿÚèÿ…á'ýWÿ?û]Ù(¯ÿ…á'ýWÿ?û]ð¼$ÿ  ÿàgÿk¢à{%ãð¼$ÿ  ÿàgÿk£þ„Ÿô_ü ÿít\d¢¼oþ„Ÿô_ü ÿítÂð“þ€+ÿŸý®‹ì”WÿÂð“þ€+ÿ‡ÿÑÿ ÂOú¯þþ7EÀöJ+ÆÿáxIÿ@ÿÀÃÿÆèÿ…á'ýWÿÿ¢à{%ãð¼$ÿ  ÿàaÿãtÂð“þ€+ÿŸý®‹ì”WÿÂð“þ€+ÿŸý®ø^Ðð3ÿµÑp=’Šñ¿ø^Ðð3ÿµÑÿ ÂOú¯þöº.²Q^7ÿ ÂOú¯þöº?áxIÿ@ÿÀÏþ×EÀöJ+ÆÿáxIÿ@ÿÀÏþ×Gü/ ?è¿øÿÚè¸ÉExßü/ ?è¿øÿÚèÿ…á'ýÿ?û]Ù(¯ÿ…á'ýÿ?û]ð¼$ÿ ÿàgÿk¢à{%ãð¼$ÿ ÿàgÿk£þ„Ÿô_ü ÿít\d¢¼oþ„ŸôøÿÚèÿ…á'ýþöº.²Q^7ÿ ÂOúü ÿítÂð“þ€ÿ?û]Ù(¯ÿ…á'ýþöº?áxIÿ@ÿŸý®‹ì”WÿÂð“þ€ÿ?û]ð¼$ÿ ÿÀÏþ×EÀöJ+ÆÿáxIÿ@ÿŸý®ø^Ðàgÿk¢à{%ãð¼$ÿ ÿÀÏþ×Gü/ ?è?ð3ÿµÑp=’Šñ¿ø^Ðàgÿk£þ„ŸôøÿÚè¸ÉExßü/ ?è?ð3ÿµÕ«¶²Ü¢_i[ÂN ‘Ïæ÷ÆÑEÀõª* KÈ/­b¹·‘d†Uާ†¡©è¢²¼A¯ZxwHŸQ¼'ˈp«÷œžä×Ý|i×f6¶EŸ•dì¹ ?•{®hÍxü._϶™ÿ~¤ÿâèÿ…ËâOùöÓ?ïÔŸü]+5àð¹|Iÿ>Úgýú“ÿ‹£þ/‰?çÛLÿ¿Rñt\|ͯÿ…ËâOùöÓ?ïÔŸü]ð¹|Iÿ>Úgýú“ÿ‹¢à{æhÍxü._϶™ÿ~¤ÿâèÿ…ËâOùöÓ?ïÌŸü]ß3FkÀÿárø“þ}´Ïûó'ÿGü._϶™ÿ~dÿâè¸ùš3^ÿ —ÄŸóí¦ß™?øº?árø“þ}´Ïûó'ÿEÀ÷ÌÑšð?ø\¾$ÿŸm3þüÉÿÅÑÿ —ÄŸóí¦ß™?øº.¾fŒ×ÿÂåñüûiŸ÷æOþ.ø\¾#ÿŸm3þüÉÿÅÑp=ó4f¼þ/ˆÿçÛLÿ¿2ñtÂåñüûiŸ÷æOþ.‹ï™£5àð¹|Gÿ>Úgýù“ÿ‹£þ/ˆÿçÛLÿ¿2ñt\|ͯÿ…Ëâ?ùöÓ?ïÌŸü]ð¹|Gÿ>Úgýù“ÿ‹¢à{æhÍxü._ÿ϶™ÿ~dÿã”ÂåñüûiŸ÷æOþ9EÀ÷ÌÑšð?ø\¾#ÿŸm3þüÉÿÇ(ÿ…Ëâ?ùöÓ?ïÌŸür‹ï™£5àð¹|Gÿ>Úgýù“ÿŽQÿ —Äóí¦ß™?øåß3FkÀÿárøþ}´Ïûó'ÿ£þ/ˆÿçÛLÿ¿2ñÊ.¾fŒ×ÿÂåñüûiŸ÷æOþ9Gü._ÿ϶›ÿ~dÿã”\|ͯÿ…Ëâ?ùöÓïÌŸürø\¾#ÿŸm7þüÉÿÇ(¸ùš3^ÿ —Äóí¦ÿß™?øåð¹|Gÿ>Úgýù“ÿŽQp=ó4f¼þ/ˆÿçÛLÿ¿2ñÊ?árøþ}´Ïûó'ÿ¢à{æhÍxü._ÿ϶™ÿ~dÿã”ÂåñüûiŸ÷æOþ9EÀ÷ÌÑšð?ø\¾#ÿŸm3þüÉÿÇ(ÿ…Ëâ?ùöÓ?ïÌŸür‹ï™£5àð¹|Gÿ>Úgýù“ÿŽQÿ —Äóí¦ß™?øº.¾fŒ×ÿÂåñüûiŸ÷æOþ.ø\¾#ÿŸm3þüÉÿÅÑp=ó4f¼þ/ˆÿçÛLÿ¿2ñtÂåñüûiŸ÷æOþ.‹ï™£5àð¹|Gÿ>Úgýù“ÿ‹£þ/ˆÿçÛLÿ¿2ñt\|ͯÿ…Ëâ?ùöÓ?ïÌŸü]ð¹|Iÿ>Úgýù“ÿ‹¢à{æhÍxü._϶™ÿ~dÿâèÿ…ËâOùöÓ?ïÌŸü]ß3FkÀÿárø“þ}´Ïûó'ÿGü._϶™ÿ~dÿâè¸ùš3^ÿ —ÄŸóí¦ß™?øº?árø“þ}´Ïûó'ÿEÀ÷ÌÑšð?ø\¾$ÿŸm3þüÉÿÅÑÿ —ÄŸóí¦ß©?øº.¾fŒ×ÿÂåñ'üûiŸ÷êOþ.ø\¾$ÿŸm3þýIÿÅÑp=ó4f¼þ/‰?çÛLÿ¿RñtÂåñ'üûiŸ÷êOþ.‹ï™£5àð¹|Iÿ>Úgýú“ÿ‹£þ7‰?ç×Lÿ¿2ñt\|¢¼ÃÁŸ¶õ(ôÍVÚ;{‰Ž"–"v3tƒ’§5éÊÛ†i€´QERú_*5n²õs‹fúPÊ#Ë#Hä³¹,Ä÷'­74”TŒ\Õ©,gŠÊ;¶ å?LG¡"«Â‹,ñÆî¨¬À31À½n5æŸs5Í¿™",‰å†r¢1·¡t6ßNšê0ÑÉæÎØÚL;cÐU:Ô°Ž(m ñÝZ­ãä6P<±Ó zÖ|MSŸ:!: ¢B Ÿ\Š:€Å ìFYŽÍ^›Kš'… ±… °ùö8ÏçUUÃ^+ÀÜo7>B}I­J4‚yź^³gxþñÖ˜£±žK×´‰Å‰Ú1ß8¤’˜`”+3ùiÉÎsŽxéZW7¶ÆÊK¨ä_µÜƱºÊÿxãüöªË4COÓ“ÌMÉpY†á•ê}(“iW¤¾ L}b|²ýF6}>[h‹Ë-¸`1yŸ8ϵY¾Ô¢Yî’Ö /Êó‰ nÝ…>v†K)MåÍœò„ýÓÄxOlûRèLé-eìûФɂxϯ"é× y%²„/ßmß*\ÕÖÔ"Š-9;YpŠCùóÅ+ÜÛËw©@Ó¢-ÆÝ’ç+;ŸJ¡sc5¬K+4RDN‘>åÏ¥%Åů“æ(>pÊm9ü>¼Õ‰Œ6šL¶¢â)å™Ã(îUßð«·¥²\ʬVUˆ+Û•äoÛŒdPyÒ®EïÙKB$ù™,vã늂âßìûÒ-åÝŸõ2nÇ׊؆îÔ-æ{ˆrlö¹wÝž†ª_µ_Û!m?io˜YžÃ“š«5Œ±4H¡å‘ã2"S=¸¥ŽÂY,^tYÒ_,ƨIg>µzÖ÷Ͼ»vš†Vï”ÆÛGB¤SEÔvö’­½ÙÏÛ_ Ë’}Ee¤RÊÅcŠGaÔ*’GåJ°Í#”HdfUP’>¢µÄ–ÇQ¾•.#Jùyœ¢7ò4·7‘ 5G†á:DZ‘ðXޏ=èɘ#9†MªpͰàsRZÛŸ4—òÒ(˳mÏá[ ¨Fm"’9­Ë,[]&™”“Ž~^‡>µšÑ´ :=Ûçþ¿ýzªÐÏ’ QOñ2?:’KGO$G¾V–1&ÕŒäÖµn¯c’]A>Ò[,oÇozu¤‰,Ј¦@˧•,î:úP*[ÊÓˆJùn{Kòcëš}Õœ–ŠŽÏÇ&v¼M¹N:óW®<›–°¶žö't æÎ  n=M:[qu}ms[5ª68¤ÜBõ$ýq@¥°š6‰<Žè•#'f}i.l¤†ö[hVIŒxåP“ÈÏAZ?n‘αݥ´¦ãxg} ŸéJf¶}Fúd¹ŒHvùe¦1£ ò:Ð\6sÜG;F„˜q¹0wú Tkï»d¶Ó†Ú„àûúVÔ—0Éw¨¤WqDÒ¬{%ó0¹~j‹LxaVfºÎüûî ©_QýïÆ€3líšòéa 9%ˆÎÐ;ÔmŠžg—'”OË!BükM ‹Q¼B)Š";‚rqøU›ëèžÚf‚[vŽHÂìi›xú'@h¦'“6à¾L›ŠîaÎ=~žôy3¼Ó ž_÷ö¿ŸJÕYâþÊûÚ£ûAˆû†Î|½Õ,3ZÅ`È·1”kb ¼ä¶ütØx0F0·8‚R‡£ÎãM1J²yf)‡¢;¿*Ú†ù­]* ²Ã3?øþ´–³‰ït‚eJćvXpqšaÐÉ[y>Ó2£Äd`¿:y8Ï4³[²^Ko¼…¨Ú¹'´¦¸Ha·Ž{´¸•n„›‘÷ìAê¥>‹hïµóáÝ1 žaU#®7”€ÆÈdòÄndþàS»ò©­­$¸¼[fÌMÉbê~PrEh-ãYŸÌ³¹ØÍç¬=Ÿ®‰Ä6°^ÜÃ3KæârÛ»|Ü÷ãùPap,Þïh)-Á`Nªæ®[̃I½¤˜Ç±Krp{  Ypyú;Ã4há•ôfBçH#”Æd9Œup§hük ¿”C-ášé OÔ·ß–ÝŽÞßZŠÞî-fûdio;$·-Ë6?»Þ lßg‚T,í)`!ãýé¢Þo>8^6ä`ª$R½N+RÆæM3t±¦Ç”°,ÐsŒúTfñZÒÑæŸ|‘Ýî9l°OçŠ}@¡qm5¬¦9P©€H 6;Œõ¨ÑFÛ3·¢©'ô«z©ÍÛIö¸çØ” &íƒÐŽÔi3¤3ÎÆUCöw Kcž1zH ío:«3A*…ûÄÆ@_JjE,€˜âw Ôª’×· ­%˜–íJf†“Þþõ…Â}ŽÌ%ìvþC–™¶—ÏãÅ02cŠYsåE$˜ë±Kcò¥XfhÌ‹ Œƒ«$Ƶí.a“í*ÓÅ ³ÌÎ11ŽE÷¸ö§é“Z[Å [¨ÀËy‚YŠ‘é„èiŽðlµ†}ùóIvŒ^ôÇŠXÙU⑾èe#?LÖ­­Õ´1i¦GLFònÉL“‚E%¼,užâò;¨áV”²K¿túsÛÚ˜®,ä†ííãÝ; ¶!àþ§YXKw8B’$|æM‡ŽÕfÞäÜX΋v–×/7˜Ìï³p#¦jì7QùÖòhB°ÅI#2cssÈþ´ºÅÅ´—€DŠX³g‡­A<²*F¥ŽêÖ›*GÚÉ PÖÌ3c$öõYãC‹:38$ªŸ™1ëLòdûAƒ1R=1Ö® 9vó#nõ* 'Qxr~ð zÐ1±$ùÎ=°¼~”žàdO Á&Æ9ô#½Y[8Ô>pŒFvîûé\Â;[ô«D²Ì]QYF ‘ïê}è2âÜÄ¢D}ñž¤¶³2 wrªzzšžèì±eqµŽÿ{4å~žªIÀ^OÝ#¿õ f±òдn[o%OZ§šÕ… ´2H89/ݾ¾ý«&€>ƒøSròx.͉ØÒ(Ϧó]÷jó„§þ);úé'þ„kÒݪ埦'Ö±ƒÁ¼\ÿß^%šö_Œ‡þ$–¿õö¿ú׌擹©­`k«˜àC‚ǯ îj Õí:êÞÒ;‰$åeØ‘ò2^GJ@Gukö[¡ Ê JO|T—ve·ŽuŸÌGm¸hÌgò=EIssgykl¼Û´M°¯/„õÏ¥wP=m–éîäó7  íéÏ4š·ch·,ï,‚;x€2>yéŽ*ºÙlÐýžÝ³ŸÞ4yqŸCšµ¤ù†à¤7b +&àÿZb,CÅtñ\$† 8e=óíô¤["m ™¥ g—ËEÛž:nëV~Ûk²e…@¶eÙ.ç©¢º»ïí„$ý–ßhRAè$ãüô¤†ÅM5L÷qÉt#Kln,œþ§.ï"l¸Fã2 Bžƒ¯Ë×<Ô‹¨ÛÇs©J6¸˜-] õãUÒùînQæºû(qŠ2Bû`v¡Èí"žú+x.Ä‹'ü´òÈÇ^ÄûSb´2­Ùöe$ü¹ÝÉ÷ã¥_{ûOí;9¼Íæ0|éü²»Î8ã­3û]æ‚ú+™Ë+¡Ÿ_Aôë@&ž‚å¹»K4e¡bG©ô¥K•õ/±<níànzö§¼Ö7Ð[ý¢w‚XPFq`Àzc¥?ûJ¿šo™#Æ(² $öéøÓ]*k›™á,#0ýã·9=‡ãMŠÊcÕÅèdb y%¹CVàÖÏk惮LïŒï;pZßÅ› ¨YØŸÜÈ$ãµ (ÙÚ¥Õé‹Í& Í ùG|©¯gr¶ÆçÉaåYˆÎ;q×ô«Cm¶™u2Éæ5ÌžR>Ý»—«vÍÜZI¦å”O: X±VObݦj:\¶ŽÏnm€9 þu[ì7fûH…Œ8ݸÓ×Í^ŸP¶{‹öY Y Ÿ)å±ô§Å{a£ÙšÜ¡O$î.{–¤§^4+0·ccisžœg4Ë‹K›M¿hˆÇ»¦H þUu5"»Óæu†˜ ãúÑpézðYÛψòäª[˜öûûñš`Cý#Ámä«Éq2™ d±çüi±XJ5­nc‘ äáHÉ=NÕi¯¡¥Û3mˆ@ÐG€OL8üi-ï­Ò]-žBÂC´ü¹vçð¤HôëÉâ2Ãæa[ˆ]G  õ?\gëKýŸq-ÔðÛE$‚&*r@ÇÔôÍ^šúÈGE*[¥— @ª?ME-ÝÜw6òNЫ\VO,°aèGZ©kj²ý¥æ,©ÛHÎî€P4ëß)$û;írž2síÖ¦œ-¦‘Hw‰ „ãAÓ~µdßYi.£ç¾ü`1œ¯áº{Ðk6Kkä™ NólÁaŒb¢¼±k(àf•$2ƒÂr=ûÔ—RÚ.š–Ö÷f󌄘ÊàcÞ™$ÖóZéð4…D{„¤)ùA?­@±ÆmÞFUÁÂÅ´’Þùè*[[A:—rBgô£ì)gs‰ Î[nC÷r9ôÔÖ.’[yY!—°88Îh—O‰”ùyVíÏJÞÙ§˜¡ùBýãZ»R\³;œŸçT¬§Ss.xóF—ë@û=£(H3€kwü1UÙÖçÉêIàûVšÇ7–‘•L.ÜDZÞÕR[„Š89TùIøÐ¢ÒÕl²Œ±-ŒZ­soäe9ºgµ]žÛí²(Ê`gŸQPê2©Aläãµ.†æ?i®§n¢ ÿÀ…}Sg&øT×Êz9ÿ‰Ý‡ý|Çÿ¡ ú£NÿuúSB.ÑEÀ+/XÿfúV¥eëñìßJù>ŒÑWSGÕd¶)¥j]âUµ¡_\ã÷©K4f¯&záÏ–«²×ígsŽc㑌óÏCThÍ¢Ÿ 2ÜJ±A’ÊÜ*F…˜ýäÐ3Ngv ™¶Œ œàz Xâ–gÙ RJø'lhXà “è4û‹Yí|¯=6y±¬©ó•=§Z‡4fŠ(Í¢ŸRÏ*Å RK#}Ô 1úÍ34fž‘K";ÇޱÎÊ„„ÆIì2@çÖ™@hÍY¿±›M½–Òão›Ãm93Ö«Pš’倱‰ö–R¤àt5Qš( 4fŠ(©%žY„bGÜ#]ª0áQÑ@jH§–Æ'ÚYJ7ä£šŽŠ*Hg–Æ'ÚYJ“ÐÔtPFh¢€ Ñš(  y^ágÌq’Up8ÏZ4Q@hÍPš’ä·™e‰¶È½ÇçQÑ@ I$“ÔÒfŠ(ÍHÓÊðÇ >cŒ’«ÆzÔtPW[W¿d*n2¤`-z~UJŠ’yå¹”Ë3ïs€NþUh¢€ Ñš(  mîfµÉìr1œÇãO¸¾¹» '—x^GÊ?!Uè 4fŠ(Í¢Š3R$òÇ‘£á$8ÀçfŒÑE£4Q@jqyph”ãè3ùÔPI'$äžõ4wSD»QÈ„üê(ÒHò¶çbÇÞ–9¤„æ6+L¢€$–âY±æ9 vè*<ÑE{×ÂOùàÿ®’èF½$ýÚóo„Ÿò)Áÿ]$ÿÐzIûµB<ã'ü-¿ëíô¯¯gøÉÿ Koúû_ýëÇìì®uÈí-"óg”áp\ñž¤Ú“ +FMîÞh’êK+u“8‘ï"uçc1ƒŽµΞֺu•ãH¬·aÈP>îÖÛÉ¥q”è¤7BÒ–€ :ÔëgpÖ/z±fÙ$³†+Hg<àóŒqRC¦Ï,PO#Com;:$óÈ Q’;žàgÉÅT¢°€~´o\¸`py ¢“ ’22:ÒÐEMöK±}·Ê?fó|Ÿ3pûøÎ1œôöÅÚÏkÏÄ<Ș°;—%sÁãzÐ4U½>Áµ»d•T[[´ç#;€ `~uOrç†}3@ EPŒŽÈ¨ÎÅWî©< íM¢Š(¢Š)É#ÆáãvFNüi´PEPŒŽQP»_º¤ð>‚›Eã#²*3±UûªOè;Sh¢€ (¢€Y•ƒ+`r8"†ff,ÌY‰É$äšJ(¢Š(¢Š(Þcù~^öÙœíÏõÅ6Š(¥Ve`ÊÅX‚¤¢€™™‹3brI9&²DÛ¢‘ãlc(Ä~Ê(f»ºo½s9ãÈÇΡ¢Š(¢Š*Tº¹‰Gq2(è«!~¬ììY˜³I'$ÒQEQEQE9¤wÆ÷fÚ07àz mPEPJ  GqIE9ä’O¾ìØõ9¦ÑE<Í)]¦G+é¸â™Eõ–DYG 8¦fŠ(îÿ!»úøÿBõV›ÿëô¯•tù X×Äú¯ª´ßø÷_¥4"íQL²õøöo¥jV^±ÿÍô “ëª×g±M?IIVûí'L‹aŠáV?âÆT¡'ß‘X±è:ÄÑ$±i7Ϩeu·rAŠš]Ä3lót½NMŠ7[Èv¨èj—ª·õÔk{ÿ] Ø­¢„N¶ð"<<$a¹ŽÒXã©÷§Ï§i–±MlÒE>ž%Þšz»4Œ¹Ü'ß‘µ»c c½a®—ât•%K]dDòÑÄ2«Œm v§G§øªG´ŠÓYKgÎèV9B6zåqƒI«ßúïþa-ýt_äaÔöwRØÞÁw İȲ)÷5oþÝoþ€Ú‡þ¿øQÿî·ÿ@mCÿ_ü*“³¸5s ÔmãÑíõMZÜm‹TQ²IóÉÿ|“ñ©,ô½=ïâg¶1è©r±¥¸“|œeŒyÎ 8'œwÅ`>‹â)aŠ4ÍQâ‹>Z4Lœœ q“NO‰Vh¦~¬%ˆÄ2n@:qÀ6þ¾OüîoúÕ‘¬"Òõk¹,lì×í—,šÁºdmà¢våASƒÉ©õ-/M¶³¹Ô`¶€ÛÛZ5ùA tMÿ]¤¾zæ±dÓüU5â^Kg¬Ét˜Û3E)uÇL62*#¢øˆÀ`:f¨a/æü‰6–é»ëïE¿¯ë×òëúû¿3"·|øK´ýÙÆæÎ?Üj©ÿî·ÿ@mCÿ_ü*HtOÛʲÁ¥êqH¿uÒÞE#è@¦&;Ò_C×EŒ7Ñ?ÙSs\N’ yÉÐ*/5sÄPèÚz_X-«~í쮚z¡S‘‡3ï%à õøÆ+4?D’$z^¦‹"íu[yaœàñÈÈð©›OñSÙ '´ÖZÔt€Ç)AÿÆ(cGA©Gåj>&¼0\Ï [ù~}ºÌ[© ÀŽxæ¹ßÚÃowhñÛ­¬—‘Í5º Üç áÈã¶kBÏþ«;+¸SNÖ|ù„J“ªJ%BxgúŠÊ—CñÄ­,ÚV§$ŽrÎöòO¹"•€Ê¢´¿áÖÿè ¨à+ÿ…ðŽëôÔ?ðÿ˜´V—ü#ºßýµüð£þÝoþ€Ú‡þ¿øPm¥ÿî·ÿ@mCÿ_ü(ÿ„w[ÿ 6¡ÿ€¯þ›EiÂ;­ÿÐPÿÀWÿ ?áÖÿè ¨à+ÿ…fÑZ_ðŽëôÔ?ðÿÂøGu¿újø ÿá@´V—ü#ºßýµüð£þÝoþ€Ú‡þ¿øPm¥ÿî·ÿ@mCÿ_ü(ÿ„w[ÿ 6¡ÿ€¯þ›EiÂ;­ÿÐPÿÀWÿ ?áÖÿè ¨à+ÿ…fÑZ_ðŽëôÔ?ðÿÂøGu¿újø ÿá@´V—ü#ºßýµüð£þÝoþ€Ú‡þ¿øPm¥ÿî·ÿ@mCÿ_ü(ÿ„w[ÿ 6¡ÿ€¯þ›EiÂ;­ÿÐPÿÀWÿ ?áÖÿè ¨à+ÿ…fÑZ_ðŽëôÔ?ðÿÂøGu¿újø ÿá@´V—ü#ºßýµüð£þÝoþ€Ú‡þ¿øPm¥ÿî·ÿ@mCÿ_ü(ÿ„w[ÿ 6¡ÿ€¯þ›EiÂ;­ÿÐPÿÀWÿ ?áÖÿè ¨à+ÿ…fÑZ_ðŽëôÔ?ðÿÂøGu¿újø ÿá@´V—ü#ºßýµüð£þÝoþ€Ú‡þ¿øPm¥ÿî·ÿ@mCÿ_ü(ÿ„w[ÿ 6¡ÿ€¯þ›EiÂ;­ÿÐPÿÀWÿ ?áÖÿè ¨à+ÿ…fÑZ_ðŽëôÔ?ðÿÂøGu¿újø ÿá@´V—ü#ºßýµüð£þÝoþ€Ú‡þ¿øPm¥ÿî·ÿ@mCÿ_ü(ÿ„w[ÿ 6¡ÿ€¯þ›EiÂ;­ÿÐPÿÀWÿ ?áÖÿè ¨à+ÿ…fÑZ_ðŽëôÔ?ðÿÂøGu¿újø ÿá@´V—ü#ºßýµüð£þÝoþ€Ú‡þ¿øP´|#ÿ‘Núé'þ„kÒOݯ:øWo=§†£‚æ!™d}ÑÈ¥Xdç}«ÑOݪä?ä mÿ_kÿ =y¯ƒH-ÓÉ›_‘«Õ>)é×zµŒ&k™oHû¹<“Ž€×œ¶ñýeÿ¿‘ÿñT˜t"ðõͭω¬Í¶ ž]ÞT’>ïÝ·]ìߥhé lðøb[ n†æ<±D¹b€’%HÈÅSÿ…mâÿúËÿ#ÿâ¨ÿ…mâÿúËÿ#ÿâ©Xc|W=ËÛÚC}§êÜ#9[‹ùUäuãåQr ôëÔ×/]Wü+oÿÐ_ûùÿGü+oÿÐ_ûùÿBCl£á·]hò0 ¨Åå¦N˜ÑŸûèmÿVͬ‹‹ôí*& ½O-̇þú$}ªŸð­¼_ÿ@YïäüUð­¼_ÿ@YïäüU \KCWC”Ûø{N—O±½¼Pd7ÑZÌŠ®Û)F%vãŒ÷¨´‹ËE°³×gU)§²hY²Hvù>¸G“þø¬ÿøVÞ/ÿ ,¿÷ò?þ*øVÞ/ÿ ,¿÷ò?þ*‡«þ¿¯ò·Š _Ø´Uush®ò2ò ÈÙÿÐW=]Wü+oÿÐ_ûùÿGü+oÿÐ_ûùÿB@GcqomàyâÆ+Å:$wP•×(ÀÖ圖³\i’Gj!˜èïö8a— $ó›î4›¾lnÆsíÚ±ÿá[x¿þ€²ÿßÈÿøª?á[x¿þ€²ÿßÈÿøª}ÿ®–§õçsFI'»¿½·šÂîÞøé'ú[«MpwáW'Ž™À«p®¤JYÕ¿á:j¡&<‘òŸgÎ1ß8¬?øVÞ/ÿ ,¿÷ò?þ*­ßxÆ—æÜË¡°ò Hlˆ2ª03óu©kOëÏüÁ=¯/ò8£×Š+ªÿ…mâÿúËÿ#ÿâ¨ÿ…mâÿúËÿ#ÿâ©ÊÑ]Wü+oÿÐ_ûùÿGü+oÿÐ_ûùÿ@­Õ¶ñýeÿ¿‘ÿñT¶ñýeÿ¿‘ÿñTÊÑ]Wü+oÿÐ_ûùÿGü+oÿÐ_ûùÿ@­Õ¶ñýeÿ¿‘ÿñT¶ñýeÿ¿‘ÿñTÊÑ]Wü+oÿÐ_ûùÿGü+oÿÐ_ûùÿ@­Õ¶ñýeÿ¿‘ÿñT¶ñýeÿ¿‘ÿñTÊÑ]Wü+oÿÐ_ûùÿGü+oÿÐ_ûùÿ@­Õ¶ñýeÿ¿‘ÿñT¶ñýeÿ¿‘ÿñTÊÑ]Wü+oÿÐ_ûùÿGü+oÿÐ_ûùÿ@­Õ¶ñýeÿ¿‘ÿñT¶ñýeÿ¿‘ÿñTÊÑ]Wü+oÿÐ_ûùÿGü+oÿÐ_ûùÿ@­Õ¶ñýeÿ¿‘ÿñT¶ñýeÿ¿‘ÿñTÊÑ]Wü+oÿÐ_ûùÿGü+oÿÐ_ûùÿ@­Õ¶ñýeÿ¿‘ÿñT¶ñýeÿ¿‘ÿñTÊÑ]Wü+oÿÐ_ûùÿGü+oÿÐ_ûùÿ@­Õ¶ñýeÿ¿‘ÿñT¶ñýeÿ¿‘ÿñTÊÑ]Wü+oÿÐ_ûùÿGü+oÿÐ_ûùÿ@­Õ¶ñýeÿ¿‘ÿñT¶ñýeÿ¿‘ÿñTÊÑ]Wü+oÿÐ_ûùÿGü+oÿÐ_ûùÿ@­Õ¶ñýeÿ¿‘ÿñT¶ñýeÿ¿‘ÿñTÊÑ]Wü+oÿÐ_ûùÿGü+oÿÐ_ûùÿ@­Õ¶ñýeÿ¿‘ÿñT¶ñýeÿ¿‘ÿñTÊÑ]Wü+oÿÐ_ûùÿGü+oÿÐ_ûùÿ@­Õ¶ñýeÿ¿‘ÿñT¶ñýeÿ¿‘ÿñTÊÑ]Wü+oÿÐ_ûùÿGü+oÿÐ_ûùÿ@:Gü†¬ëâ?ýWÕzoü{¯Ò¾w´ð‰ì/íîn´§ŠeY$c*|ª$ýêú#MÿuúSB.ÑEÀ+/XÿfúV¥eëñìßJÇð½Ô6~Ѧ¸¸ŽVÊ-Ï#…QÇrjÞ§â7L{ƽ¶lÄÒ@¦u_;8Sß>Ù¬6ÒâoxVâ oµ}’(å{}ÀY\؃É)úµ†¡;_OÓ}¾À[ªy‘·a»ƒ–Æà~RzTô)nn.¿nu+]?÷Ææâ?3…;åÝ‚Ý3ŽÂŸ«kvú5ºÍrfmÌV$,O }ç©ÅW–Æáµ-QRÙ$¶áò’€¯>”Ý^ÝOÃ÷P-¡ŽáŸjFdS¹CŒ6s3Чk“µ4¯.ÞÖÜJ» .‹‰%òÇÌÀu=ùàwñõ®#HÔ¼‰m…½šLÚV2HmæGY_)Œ$‚ÅIù€<ž+¯Ö":z,º\—Ù`ÆäU*qÔeéõ¡ÿ_x!o5©,¬îm6ûnÖiLe¢»|øü‰¢ãÄ–ÒØÄLî÷¬¢ ˆpt,zúûVCØÞŸ çßi©ÈÁÈ :'“°b 7 ž*íÆŸ|úf Ÿ>âÚx^y7uÚ>fç¯?5¿Í §ÉšÆþÜ¿k‹p“Ê#Ìߌíë×Ú¨Á¯în-¾Á}ÌQy¢Ù™8H|GñY²éwßð•e-¢Vù;ÆYv‘çuÆá¸ë·?J—L³¸þß›PYÓb’³!t&y7Hàg“ÉÝI –í¼@÷-yéš‚Ík·|DÄKäC‘œrrGU­7USµyãY¢òähäIpzƒ‚Aü ¬û k›-ÍŹ»¸w–âÜ2e‹·#,vœ.^‚áû‹+ ”kqh’LÏojX0H/uÉÀ8£¸iÞ!‡R¸HR¨¼ØŒÐ< ™²à“ÜuóK.¿mm­¶uq ¹òRHÚY‚™ 3  ¿wõ¬ Ã÷pÜ¢ÏksiÙZ+™×úÇ,v¶c\î8zŽ*mSJ»K»¸í´Ù/b¹ÓÖÕ%–u;3ä¹vÜGÌ@'Š;]ÿõØ×ºñ¶Ÿ9Kéb†#p Y|õ“ü¾q³Óöõ­#wp€LqÎ>sŒñëÀ'Šäÿ²5+;‘r¶Ív`½ŽP«"†•E¸Œ‘¸Ùà‘Òµõˆnæ]6òÞÕ¥’ÖàLöáÔ1H¹½qÅ1gÖtëTW¸Ô­bVfEi'UÁ'¨<|º¥¤3Å—Ð$ó ÅLIôÉü+Ót‹Ï´ÚËug±1zdGdb¾l¡”隯e¥ê¶CKû=œér¶ðÃví$M "ç ŒîÜ2pWZ]tk®ZEem=õí¥©¸PÊéJ“þËq»ê*c«X‹Ñdu qtzAç.óÆ~îs^~’hºkZ]A·wZBZÇš?27IËX}Üò+ ›F¼‘/˜[#ßZÍܹڂ ǯÚÔúÿ]ÄΉuW¼k5¼…®nhD ¸¥sš¦5ûiu¸tËkˆgvISÁŒEvð@õÏJ°ðýäZ©?mÛÌóÅ:4WÏ»¯npØÇ#ޏÅK¢é·Ö÷ÚRM¦ý,-dç…e'n àîçi<Ö’ón¾±³\›Û«kh¡F${•%Aç8ÚyééÍ2éÖ×6Ëy­Ú3Ã1•Dm‚£³É;†1ïYri7®ƒ0IgÜY~à·ÙœgûÜc­Ai¦êmí­Âií4qËv†(ä@Q$”27$ `tëÏJOë 3¥]FÕïÍo!k¥š(.©\曫eqs%´7öòOL‘$ÊY1× Šåì4 ȵB.~Û¶;‰çŠth<¯Ÿv3Ç›œ61Èã®1Y61¾¯zEœq$–º\öÏq Èñ³±@T’3‚~`^(S¼McO’ÖK¤Ô­šÞ#‰%©D>„ç¬AuÔ =¼ë,N2²Fû•‡±k‹C¼’ÊwkkÑròZ«%ÃÛí)‰_(€3דÅtöwOq=äFÜÄ–òùhäÿ¬ùA$ qÉÇ~”ÄG§kvú¥ÅÜ6ÆoôfUft*#?.y#޵ý´šµÞ›-Ä0ÜC*Çm0ß.Q[!zÿ;ô¢ÊÒxuÍRåÓOåym‘ómR«ÿJ¿¸½ÔíãÓ²——PÊ—¥Ð,jª™8Îì‚§wëIn6t‹«X´Óº…¹–LÈ&]ÑÔ°Ï$µÍ´—6ú…¼°G÷åŽee_©¹ ý'^Ô.n{y™„q!ÝÄCŒ L|üñÝêö¥¡ÞMss$ÈÈa´>Y`͌̇ðÀÉâ€fÖ—­Å«Oz¶ÒG$6ò*,ÑJdʆÎGñøU‹ZÆÎt‚ëP·‚WXå™U˜{y¬M6KËMNy$Òä€j7c΄ƫ,vW{Òkš=ÕôºÁŽÜH'ÓÒrËÌœã“ÇUäÑý~¿¯¼Ý‡T³¹¶{˜/ –Ý3¾T˜2®:äƒQkN[5¼mNÔZ³m™×a>›³ŒÖþ‰w,º›CnŒ’=¬©`o,å”úd9ã¥6-&ú}V;÷±ûí|ôLµn->úÛS½ò…´–7²y’3HË$g`R C}ÑÜb“xšÞëY·µ²-4- Ò;\nÙ·€rzf®èú£jÖóÊö¯lÑNИä`[ŒrqÀ<ôæ³t­Rµ½Ó…É´6Ú}»ÁÄí¾@v€J•Â𾦮ÚXßXÅyä›v’{Ö™w–ÀF#9ÀûØÛ8§§õëþBþ¿µÔzÔ67V wg‘*ÎŽÎrË”î}ñOºÕà°»¸W°ÅnUbvp]ŠŽ™ÎH3Ul¬µXµ«›Ë¨,åóY•&ûKîŽ/áPž^b~nOÐ ÆÔaÕ/$½˜Y“p«gÄn#irÍ·#%#æÅ%Ðo©ÑéfÌÝ}¤ìyELN$ßýݘݞøÅ[±¾·ÔmEÍ«—ˆ’¹d*AÀAë—½Óõ I¿¶æXš÷íK ·%–=¢2˜%P¶pIÝ·ÐUßjE qh±E;\\MrŒÒågA'‘ž;SBeÓ«\I¯K§AolÉF‘ä¹*ølŸ•àQL‹[‘¼Dt™-áÎÖpÐÜot2&ѳ9ã“QêZU棩ۿ‘c0Î’­ÐbgÂà•nyÝÐô§µ†£w­ÚÝ]%œPÚ3´m ³I `T•G9#')!±ÖºúK&¥ö‹Y­b±ÚY¤fR ݵr@ãëô§^k‘Gi<öok0€¨•çœÃ‚2>}¤wQHÚ}ìWz½Í»Aæ]$b0œ)U#-ǽTÓtGA°{=lîmÃîŒ\Hc8#æjâä{qŠ’]zïû^<“ –U¸¹hÊúcÛ³Û§oZKï]iÐØÉ=„ ×!Bnÿz ¢íùÈÏ<ŠH´„Ѭ4ö–±Ý îÈ]»ËìQèhì*}vÇQÕ-ä°…,ŬÊM+·™Ï%T. ôäsO¯ÌE[Rm:;q+,×cW“ËMÄó6:ÇœS´½GûKL[¿+Ê$²”ݸ¬Tà÷â«ëºdÚ½²D–ó¬2‡’Þä‘Ãaˆ¡ ô<Š‹Jðô¶–æîÞÚK¸ ùN«»ÈRÄ„F<àSѱ[OñU½î…ç´ñÃz¶†áÄH`rG2ƒ×i5~Ã[ŽóRº°1H$‚‡Xœ£‚ŠÙÝ«÷ºšÃ_ ê³éqYܽ”bÖÆ[h R3yŒë·seFÑŽÃ?¥léöÖ¥ÓbÝìîYdfÞÂDa¦íÁ(9ÈúUiqU²Îß6<™’ >Söݣ§}ËÏNj¼A¦MzÖ‰pÂPΟ4NªY~ð FÒFCÚ³¯t]FKë‘nmM¥ÕÜ.Ò;+¡Œ¦@Hl„ÇZzhWJ– ´ aÔ'º`IÁGó0:uùÆ]?¯/ø#-¦»mvÖ†Ò|G4Þ^f·‘|ÀQ˜l$~îsÈÀúQ‰t™ZP—MˆãyK˜\!EûÅ[`=‰¬›oj 4>cA¤S‰Ö;‡”F<·S°²‚2Y~^ƒ›i§êzŒcNû8Hmtɬã¸x¥ˆ9m¡r8^vîô_€_‰ÕÅâ.kiîË"@KÆËŸ»ò°ç¶=¨ÿ„ƒLûÚþÐÞ_™äíòŸÌßýݘݞøÇJÍÕ<7q¨K;¬Ñ¦è-Ö?”ï‰Ù¹+‚È"’=î ¹‚+x¯âº3”’îYÒ\¦Îdq¸CŒ ©jË[{½ûR/Bœ#¼O´*eûÝ#­Xÿ„ƒNKų’à‰÷*ä¾Íì~6‚r0 Ï5R-ðøgQ±˜À·W†á†Ç%ÈI$qž¸¦K Ý<7¨$‡3ÝÛΙ'…ŒGœñ×ä8ü)­þàÿƒÿ³iâKIíîæ¸Y-ÖÖY#vxßaÚånœt<â¦ÿ„ƒLû»ûCÄžVÓù›ÿ»³·{c5•7‡õ ´ë½<½ºÂnÕ¼«+«–2ù›X6÷VÏz‚ãL¸Òí-ïÒØ È®üæf¸»æ2œ¶ÒãŽûH–Ú©´Þ$Ò’Ò+“pþ\¥•@‚BùS†ù6îï‘ÅL5«»‚Ù&i%ž5‘<¨×cg X8=H®b×@Ôní-/Ú!Îû’öíu5¿Ë$›‡Îƒpè8#¿8"µWLºÒVææÂ‹&Ÿöá™þt.q“‚Wæç=zQê/CSU¿m3N–éme¹dRDqã'ŒòO{Ô7šœ‘xbmR$Q"Ú…Fä³p¦jÕä]i“Û‚¢YadÉè üª¤úl³x^M,: šÌÁ»'ní›sëŒÑÑÿ]Ê[¯ë°–ž °ºµ’T’RТ´‘ýž@à„&ÝÄÄMi)S‰eß´%¼ŒÃaÃnP¹\dg VlÚ.µtdºi­­îD1À‘Á;€È­¹³&ÐÊOLÅ;Gðõå•äw´ ´–A;ÊG˜P¹€-÷NI¦É["Þ±âk-?M’hgÎÖÍ<*‘¼€Œ|¬ÛG OsŠ×‚C%´R¶d qô®PxoUµÓÚÕ¬äk9,§ódeT0 ¤)Èùk¡ÓþÙ¶æ˜Ñ#‰„p0.¡$óýìút¤úØ;]¿à”‡‹ôB»…ÌØÛ¿?e—”þðùy_öº{Õ»Í{L°hÖâä鿍ÎyŠƒµ}ÎfZø~êk(ÞH ƒL’ÍðN ¶ÜÇO”ÿ…Fú§ &;W´cqaœæfo¨#rà|ßxðqÐsGõùÿÀûÇý~_ðMg×ôØïþÄ× &Þ±çÊ}˜«¿rAg½95Í:M@Ø¥ÆgÜSi`2T>6–€æ²ÿá¸K[¸#–2$º¶–2ÄçlB0sÇ_þb‘4=B)"€µ»XÛ]½â:–ó\’Ì®09n¹ä”iý|…­Ž‚æconòˆd˜¨ÈŽ!–oaXÉâ9&Òô눬GÚoä1Ç “mU#q;œÙO@kWO{©tëy/cHîš52¢tV#95’š=Ì^‡Mk]>îUc¹n²bbs§$dqÇÖ‡ Ð˯´"jKmn3Ç*Ot#!ÔUNÓ¼’:f¶ÜqØ}²|ÃÌpüÉÍcG£^éº ZVŸÂq3\ƒs’T‚2OËÇnjc¢ÜK¦Ã¥ËtVÖ¡ 4Dy¬èyÜÛÂú÷£¸ž·{¨ési¥þùn/&iÂm üLpp}€=jXõÁ/†Yälå0–î¹ÈÝé‘Ö³ƒ«Á¥ÜZÃx·&âñ¥—ΗÊ-ä¨d‚xϸÅjÜXÜ]øjâÀÃmm4–ï G…£L‚ ã§jÚZß_ëR¸ñ›g{{okæÚZ[´/™€ò’‹Ç8è[±ãžq&¬Ü\êa¼²ŽÞf·bŸÍR¹Ç9U óéøÕ/øGn­´ûÍ:ÆXVÊêÑÓÉv8†R¸Êq÷NrGcÈëU­4MCH3_ZXiö²ÇhÑ¥µ›3-Äœm/ò àƒïÉæž—þ¼Ä¯eývÿ‚t:­ûišt·Kk-Ë"’#^Wý®žõ[AÒf´¼t˜1[;e¶‰Ê•Wf;äeÏl•ðKkáû¨m¬£y & 2K7Á8.ÛpG>Sþ=?¯_øx-¯ëúF…爴½>@—,¹eܱ;ª¡8 YAw5bÃS´ÔÖCk#1‰¶º¼m)ÆFU€=+O^=Ôd¥Òâ³RXãzîÉ™®›_ŠI¼;©E4’=¬Š¨£%‰S€z—ðßúØ¥ñX³í¼‚ß÷¨p›âØaŒœøÏ8ªvZýŽ¡ªÜiö­$’@›ÞM¸Cɾíǽ6ØÇÒbšÂW¸ò0³ù ˆ0£!˜ò¹é8&5žsù'ODm;KyŒqž™Çj¶½ëz›å¿¡6‘ÿ!ïúíÿ²­t'î×?¤ÿÈBóþ»A]û´†r:¸Ï‰4CéyŸü…%\KùîSøÒê>†­õߨ­qo=à  ¹˜Ÿåõ< É&/áý?RK<Í|ëP@Û8ËãÁç¼Ã*Gµr ¢jð†éZ|–bc«]ÙùŠ ˆ ;Cgvž£8Æhÿ€½¦¾g}5ü?d{ Sª¿˜¹À#inÎáÆÏ©´=Yõ‹9g’Ñ­^9Þ¸b6œsŽþÕ‡§xjæ[iQÞãK·[Áskn®’´/;²OÍ–œTšRßø{÷^mÔš†¨êÙw1“å^àdŽ? kúüöþ¼Î®²5wì­•ˆ²žAs*Äg#liHäýãÇAø‘Zõ“­Ù\]Ϥ´ï_,²rÔ Ã<õ䎔–èofG¯x†=cT·k™Ø©hÕ¶„BÁw1ì2p=:[Öµ= 4©¥ÛÜ@]cˆý°¬’3` åžr}}ê—ˆ<3wuôö7÷&k©"fƒm²ã— ÆzýkJæÂêç^ÒÚ@ÒZYÄò4¬Wæ›W wÁcÀÅ  1ú~¡rúÅîx:*OßùæÜ`úÀŒ÷È­jÁ´ÿKñýÌ|Åkj–¬ÝŒ…‹‘ø ¿oQÑP¢Š(¢Š(‚!b g“ùVF—¯®¢ú›i-šY2‚g8b¥wn+ü«§\\éÉ`,mZ dFóØímþ·<àóÒµ4Ë+‹}oY¸–=±\ËDÙp€~œŽõZ^¢»5¨¢ŠC (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€1—Ä0ÿÂTúÂÊÂ"M»†c’Sààg¯¯¥%ˆà¾Öõ=!`–HÍœ‰H`;®j…Þ{{¬\# iÚh%±œpȘ$Î9`sØÔ؆Ÿ3.–B‘¥4 pÌ9Ÿ~ì‘×$’sŠ?¯Âÿðܲ×4íA¦X'`ð¨yXž&U=ðàq×¥AŠtk—eŠì±´»šUd_¼ÊÅpÀ{f¹Ø4 Bæ]DÏå¢Ï¦5±–öðN|ÂsC/åô¨g’÷SÔ-lž!ž-*æ0©µllî.-R{³¦ŽÉo0Î?>žõ핾%Ò®Ò<ÁS¬‘ò– Ž:ž†®ÚËs|%¼½Û¶õãeçüû/ýýy—Ÿóì¿÷ôW¾>¹e'ì1ø§\‚3cýöh°ó/?çÙï訥†Y§†i,ci $ÆÆAò’0Hü+”ÿ„òè‚EŒ_÷Ù¤ÿ„öçÙDûæ€;2óþ}—þþŠ<ËÏùö_ûú+‹oˆ*úGÓç<ÕY>&]ÆÄ..?é©ÿ ï¼ËÏùö_ûú(ó/?çÙïè®&ˆwG¿ìmæ¦<¸'þ<¢éýã@‡™yÿ>ËÿEeçüû/ýýÇÜgb‹?ïxñÍÆ?ãÎ/ûèÐ]æ^ϲÿßÑG™yÿ>ËÿEq­ãë•81ø§\’Тÿ¾uþeçüû/ýýy—Ÿóì¿÷ôW Þ;¹PØ¢çý³@ñÝÇ{8GüÐ_æ^ϲÿßÑG™yÿ>ËÿEqwgr,¢£šm·Ä Û“…Ó"öÐÿ…vÞeçüû/ýýy—Ÿóì¿÷ôW>ž'»* [B¹÷&¡ŸÆœ h˜ýH ›Ì¼ÿŸeÿ¿¢2óþ}—þþŠå¿á3¹ïiæiéã ™k|šé¼ËÏùö_ûú(ó/?çÙïè¬&ñ%Ò©c]3ÆÆ¢ONÀþâ sÓšè¼ËÏùö_ûú(ó/?çÙïè®RoÜDOú$Gíoü&÷&2âÎ#í¸Ð[æ^ϲÿßÑG™yÿ>ËÿEp²üGº‰€:l_÷ðÿ…IÄIdpçÓy Û̼ÿŸeÿ¿¢2óþ}—þþŠó÷øŸp·Jé±1Î3æŸð­%ñÕÁ@M¤@žÛuÞeçüû/ýýy—Ÿóì¿÷ôW|}p ÿB‹þû4Æø‡8R~ÃOïší|ËÏùö_ûú(ó/?çÙïè¯=“⤑«§ÅÁÿž‡ü+)¾6N&1®‹÷ûAÿâhÕüËÏùö_ûú(ó/?çÙïè¯5ƒâÝÄêÒbÓÍ?áO?î²Béûl€=̼ÿŸeÿ¿¢2óþ}—þþŠóÔø¡xä숆é©ÿ ¸¿¯sý>žaÿ í¼ËÏùö_ûú(ó/?çÙïè®+þÆy±‹¯÷Í]ÆsÊ¡–Ú.}Íueçüû/ýýy—Ÿóì¿÷ôW?ÿ EÎ?ãÞ/Ö”xžäç0B8÷  ÿ2óþ}—þþŠ<ËÏùö_ûú+ þKœÜE“õÿQâ;“ÝCï×Ö€7<ËÏùö_ûú(ó/?çÙïè¬qâ ‚îâÉ>‡üi¿sÏîáüøÐÏ™yÿ>ËÿEeçüû/ýý‘ý»u·>T_‘ÿŒøŠàyQgèÆ€6üËÏùö_ûú(ó/?çÙïè®}üOt„æÞ,zŒÒNGú¨_ñ  ÿ2óþ}—þþŠ<ËÏùö_ûú+LCóÿÝó/?çÙïè£Ì¼ÿŸeÿ¿¢°Å ÿSüÿÆ›ÿ UÇüð‹õ ‡Ì¼ÿŸeÿ¿¢2óþ}—þþŠç¿á*ŸÜÃÓÞ¢“ƧKxç@7™yÿ>ËÿEeçüû/ýýËŸÝã"Ê3øš?á0¼ÿŸ(±þñ £Ì¼ÿŸeÿ¿¢ƒ-Ø6£ðå[ÆWƒþ\¢?ð#ZþÖn5vºóãEv„¾zäûT¹¤Ô_RãMÊ.KdYÒsöë¢F “‘éÀ®€ýÚÁÓ?ãþçþºA[ÇîÕ™œ¶¦ëzvÌnåsÓ;Z´Œ7LêäÛ\íbF}8ªWÃ:å´Ãù—V»š×Éò¤Ù»9àOZC,í½ÿž–ÿø÷øQ¶÷þz[ÿãßáYi¨\·ü·?÷Êÿ…#ßÝ«cÏ8ÿu€5vÞÿÏKü{ü(Ù{ÿ=-ÿñïð¬Sª^d?TáJu;¼ßûå€6vÞÿÏKü{ü(Û{ÿ=-ÿñïð¬FÕ/Tÿ®ïýÕÿ U½&ÿÇWü(omïüô·ÿǿ·¿óÒßÿÿ çÆ³}»`~ˆ?Âí›ìÿ­÷Èÿ ßXn“; ²î98dúô¥Û{ÿ=-ÿñïð®yõ˵óÇýò?«Ÿ^€q ?ð@NÛßùéoÿ…o祿þ=þÉŸj8ù]OüP|K© üëÿ| ë6ÞÿÏKü{ü(Û{ÿ=-ÿñïð®Dx—T#ï'ýð)âm\t1ÿ߀;·¿óÒßÿÿ 6ÞÿÏKü{ü+Ž>$Öz†‹õΟÿ ®2EøF(®Û{ÿ=-ÿñïð£mïüô·ÿǿ¹âMLõ±ÿßâMPÿgýÁ@vÛßùéoÿ…o祿þ=þÉj@s"øªsø¿VŒúÆ(¹Û{ÿ=-ÿñïð£mïüô·ÿǿ¸ã=`G»tÿ®uWþÝgÍÙºßþýõèÒ6ÞÿÏKü{ü(Û{ÿ=-ÿñïð¯?ÿ„ÓZÁ; ÿ¿_ýz©qãív»öcõÿ¯@—¶÷þz[ÿãßáFÛßùéoÿ…y¿¼Cû¶Ÿ÷èÿDÿüFضG?ôÈÿ{Ûßùéoÿ…o祿þ=þãÉñSÄ'ÒÏðˆÿL¿u²pE°õËÿ¯@·¶÷þz[ÿãßáFÛßùéoÿ…yœõ‰S$Ûƒÿ\ÿúõUþ%k¢çËO²íîLGühÕ¶ÞÿÏKü{ü(Û{ÿ=-ÿñïð¯0—âˆE©w‹ÿ¯D®b%¼ý±Πo‰> ÚJ Cõˆÿz¶Ûßùéoÿ…o祿þ=þãÍñOÄ*H"ÌÛ#þ5$õÆ8—ìƒéÿõÝ·¿óÒßÿÿ 6ÞÿÏKü{ü+Î-üªOíðß“ü@ÕbRD–äúyýzôwŠîDdv¶ea‚¤üªµž”º~ï±ZéÖÛþ÷“Íß\ ó›_ˆ>!¹|¶ ž¾Wÿ^´ƺºG–x7zèÐ6ÞÿÏKü{ü(Û{ÿ=-ÿñïð¯?‡ÆºÌZ ×:{øÏV«Ãÿ~è½Û{ÿ=-ÿñïð£mïüô·ÿǿ¼¶÷âv£h 8íåÖ#üañïÝÇexŽ{nÛßùéoÿ…o祿þ=þâ#â÷‰ˆÈŽÃõÄÿñUf/о$r2–C>‘þ*€=—mïüô·ÿǿ·¿óÒßÿÿ ò”ø‘⟲ߣþ5Ÿ|@€-ý²?ã@µ¶÷þz[ÿãßáFÛßùéoÿ…y<_5æoŸì€{DÆ´íüuªÝ‚X•uŒgõ©œ¹bäúNsP]t;L]gÌ%1Ûü9­m7þ=×éY2Êóør)d;žH˜ã$ Ö¶›ÿëôª‹º¸¤¹]™vŠ(¦HV^±ÿÍô­JËÖ?ãÙ¾”NÓþE¸ÿëÝ¿­yß}Ií^¿iÿ"ÜõîßÖ¼†åJãëI “,¼…MJï€ÏJÝ‹>sV_%H¦"½ÌÇnÑÔÓmb*¹ïR­¸ÁfäÓf;U  c=@æ¤rJ’x¨¡‚íO`Ä Ð–Êž´æž´È!'©&ž¿3g¢³ôKrɽø ]³¨„*@¥ª( )È¥2)ÙdÚý ^ùv‚(2s²ä{ÖŽ–ÿ6ÓùVV¢á&QÞ­éNd”h¨UÈÒ¤`ŒQÆAžžµ*‘Ôt a€?úÔåR;õë@à õ50UÛŽæ€!SÏZ@ÈëéÖ—`ûÄŠ1Æ úPó‘íÖ¡a†àqÒ§-µwzÕvoÁæ€~w.GÒ¡–Ð`íùHô«+* ä¥ÙQŒg¿½QK93•lÒÉ;Eò°#š»Hª÷±³à(}h7Ê@9âˆåaówªm$g†ýiñÈÂ0hîì)Ô+& $äÓ\É ÓØ0äÐ>>K²*е˜eƒt5Vxö\€LQ›š¿zBɹT=kçlR.8SÍk@ÂXŽþk RV3 àP…´ê ©<Õû,ouÀ#šãcºt­nE©>Í™à÷  jr­É¤‚í*FXS#ÏÞ= A"ªHH?€ ]¢±Èëõ¬»ƒ$G§Ò´c†YNq…ÏSVZÔM…Æqí@´û«S3[‰æÉºBqO·Ó@'W484"åW˜©‰R¹jÏšî(ZNk÷\?uíÅtr_CLKt®wR×ÞE! ¦Ea\j2ÎYC*]Àdó@5ÃLŘ’iÈ»šD WbEÈÍ$0ão5?—å~bÝ_vi—i ÛÅMÐtÙÒ¬yE&±˜¼ošÐ´½Ú¸sÍn•sB™ŸV€dàîÿÐMUžE•†:š¿¢Ûµ8·Íÿ šÊ¿ð¥èÍð¿Ç‡ªüÏnÿ™Zßþ½£ÿÐElé¿ñî¿JÆÿ™Zßþ½£ÿÐElé¿ñî¿Jª "¯ÆýYvŠ(«3 ËÖ?ãÙ¾•©YzÇü{7Ò€)ÚÈ·ý{·õ¯»;›×°ZÈ·ý{·õ¯ÆæÝùÒCbZ˜àt«g'Š£ ”ŸocZ[HP}M1 ÀÇqTe|MÏJÒpªóD   ¡‘1ƒÐT3ʨ R2=»rx¨åw¸j²nÔ)犱i*É’XØ Î3ŠŽÄ´SðqšÕkq’ÍÉôª×ŠÜð:qïV¤ùd÷¨¤lÊÓWæÜAÇÒ¶ƒ¡Ú«Ã¢LÓå™U@ü:PÜÞjI$Uš¨e'ÔžhHšB ÍDò´’â<ýjýžžÒ(w¦Å $«•Ö¬wŠ:f€‘,(¢Y:4É\¼ƒµ V/ÐжžjO(qš™"gp­íTG“Ž(--ÛnOO­@ü‚:v­[‰!P"³Œ,@È ÚÇ’¸•‡­©)€&´l®í”ÉÅ>õCö¬ËÔnëIÛ ƒœš£tFÌh¾k´`ý~µ¬ìyÀªRmÎýU íîãåÄr}hž¥xªvÉïŽÕÊÞK#Jv“ŠÖ¸÷1|äÕD²ýásœPL¶ÀÀXŸš›kk˜ÐdœÖ•ÈNÓ€?Z—A°i.¼ÆÇç@УGFœqÍY+vÁhº"Ú"Ê9è+*#4’19æ€4|Ï1ò;V¤[ŒyôNÖÑ›nEiJ˸æ€9}ZBn6îäV·‡Tà±5ÎÝËçÝ1íÚº-.9bJ€:•ˆÀëRFÙþU•æHqWà“sü½3@Ò<ùÔ‡!@3M¸õ¤'ç#P8Æ3œþÕûÇ’FÎqþE1 $f€+µAã>•Ù”5JÑîu4Öã>´RçvÃäŽÕa³·ž´«¤ cµ0+;zPán}:Óß’1ND ˜$f˜H®zw gáŽIãéTæ!£Ü:Š·9RHgÞ¨Üï@fžK‚¨‘Ö­ÚÚì^x&¨Y®ù³éÍlGœ‘ŒûБXwãÒ¯F01ŽzUhÐäÕeN8=1@ûñŒPÄ”ä(¡OAާ6q@Ÿ±ƒŠŽN˜¥`|ÐiÎÐZ§´r3[> âmH´Ÿû5glàZ^ÿOýôþm\õ‰ŸäuÐþ _Eù£gLÿëŸúè­ã÷kLÿëŸúè­ã÷k ä9»ßù Ù×aüß[øô¢÷þCv_õØ#OÕ—t–ÿFþ”†g¨Ú ÔG‚H»U‡<}*¹l£ ☊NÀz¦÷g­Z”sYwnZ`; ’(ÚæM瑚ÓHBà T6±ì‡#<ñV“s@D9çµNš…~QR‚G£Š~ã÷}y5]Ž‘ߊ°GSžµZ”äPlÄŽ‡ŽµU¾RzÕÝħ¦j„6qžhº‚XvŠpRüN $1Šs Žô—s‚àcžÕ$H¤ŒzÔs'qVdqÓ½C4Y\*¬ UŽGµ]–l)»U=èµÀù+\)bO>õ­w'ËŒà×?w/-Œæ€3d^g®kVÕ¶qY5š½ #ô­p²aÜŠà’ëä–ë]ˆ˜Úï­U–ÂdÜÍR´…Rì0ëíWoâÌC½Y†ÑcpBæ@*®(”½€yYÇ"¨ÂÞS.:µµv¹€’+"87) ûPå„\°¢ïNÈÂu5NÝä‚\H«¿oW˜p(¶qËm2ƒŸé[0°‘‰õªwÇååÝKlì¿J—Tb žh±BЬ€ôëUõY³oÓŒRiù‘ùdàém$TdúV’È3ÈÍs¡šÕ5VÒVI•_8ô5Úß$nï‘È®bîfÊ® ’Î(æ¶ Ôm¦),2k/JÔÍ´žSƒ´ž¦º5Ôí•w;)úÐpilß;aV®ù0Û¦@²µÙÄ›Tôì+˜¿ñT³åbbu—š”0ñ½zgÏÞëÇiµÏ©çù™‰õÍe¹  y<ç%Ž=ê Üî”rì Ø5 `•úQ ›Ø jè•9ÍB±†êè´{„–òŸäkœtmüƒZÚ2ê°þ×þ‚k*ÿ—£7Âÿ«ó=ÏþekúöÿA³¦ÿǺý+þekúöÿA³¦ÿǺý*©ü(Š¿õeÚ(¢¬Ì+/XÿfúV¥eëñìßJ§iÿ"ÜõîßÖ¼¶¨~ë–Ÿò-Çÿ^íýkÃÞðïÔÙrñv~ñ*ÜRaSžÕQe¶'µCkpcL”ÄjÀ ƒšŠkÉ8¨ÅÂÎN{U †ó§S»+ž”bFªœUè-° õÍQ·W’Lí •®§î€x Ðíç5SìÅ&ÝšÐvÊ TDþY ÷ ¤R±+¤ ޝj&G1ŸZ‹Ìù?*‘ä\wÍOy#w5§²€9ÅfÁdÍŒƒŠ¾-ˆS·¨ëÅ\† J®‹Æ9=h£$­žMIƒ?w…[x³#Ui,À”™ýèÇ<Ö…ºg$öëU!BòŒu­=‚8€Î3Þ€dQ"ðzzT‰8mÊ9J\<ütip“ÐÏóÉÇ"¥XÆ~îzÒ|¡¸©â Œ™ ™W€?*­3„MMtWÍggÍœ¯oJ#ˆ´›˜w«Ñ.Ö‘áòÑ=zTÑ´P.±੎I¬Èd6­‚p+cR}Ó…EfÞB ={{ÐŒ¬‘'š§xAœVUµû[͵óŒô©õ Ï—¹z@LÂ=‰Þ–8<°]ÿ n—Ÿ Ã¥iÏœ}(ºS$˜Éæ‘—l[;žµeâÛ!$ŒUyÁE$õÅbÝ‚dØ„ã5« €°$šÏpE±èMt°Ä‹”p1@Vp¨@©b´Ž3œvªR„ÔôÕi.qZÓyÞ"Çšæµa§ÇÝöïQßê2^e ÎÎôÍ>Ñ †r6›¦™’Pqé]RìBˆ§c>Õ¨LŒô«‹€¬6€µQšA冽iiW×äâ²5!µKŒΟ£ÊwP^¯û±Ž´àOËÉɨ!Ï–3þEI»óí@ ÀäsšT$7?•7%‡¿Jr®ÝÔ ÐÃnÁÎ~¼T'æcùÒœœ€sšhãЄOÝENŠO4‘‚O^;SŽ9 Ý€ïô¨ø<žÔé õ¦Ä»”®Í—ü*¥üyµý) Í‘±•-úTýÌR±çÖ†N3LE" ¦{Ö=Òÿ¥àp oaIÆ:Uyôÿ:Uu<ŠšÞ¶ê=©Jz~•`DQB¨#8 Ö6lb¥ÎÞ©QÜTNInM)$à”Ò»‡Ò•ŽÜ昄ÉÀ<ž¼P¼¼/ pF*@£Ô ³·hùXg¥@ÙåÕ Í#¾é8Vyv“À«2,#ß©¬‹‹ê} U¸•Ýð÷¬Ùárs»5}[qËt…ÉïÒ€2¶¾Üu4õ½òÆÇàÕ¯+kd޵KP·Qƒ@!¸I:°ÅYY°ñ\ŠÜKx­mQ1óœPN²¹šÈ¼¹&B§“MþÑWB†MRgÝ&ãž´·r¯’GsÚ ‚0±3ÿÛœ<œ´âO–"ù¸ Û[ #gaÁ¬æµi'+ky€·´Ú=*®›ižFäf€) i#nrGJ¿hKpzÕÇ…NqÒ¡¶L;¯ª/îÍR±S8æ®jN ! hJ†´¹‰{ BŒ‚*´,<¾¸©ôËq@’å“äUi›q,ƒ9ïN+¸1 ÅGÅÈn`*ò.bÎ>• ŒËµy­]Ž"#Àë@-S ¼÷¦ê’ôÅK€b±µ“ „ñ@…ã nOúÔ2(@p3Þ¦ž"·ûóWÿ³‹ÚîõPZ2I"¾3[vA¢fRj]OCÈæ&gr(*é¿Òdõª&-׃+ÇJÐxÌ—`ûÒÞ"¤ü`ÌÕ4¡°š1óu⹋‹‰TŸ˜ñ^‘å$Ö[äŠãu=D™¸úP-#;|Í’)—ŠÐšÆXT†SÍG(’~ó  …òÔduæ•0Ïè=êË4KèI¬ÝÀ³cð  ¯åFÀšh“ qÏ¥WPI]ÝjÈL·#'±õˆÉàžþè4T±–\(ôNÑ·§¥»¸ h·]ç'½]ŽÑJå‡JÉ*XŒ ™#R‡»U›˜_êúÚ³ÙXá±@s´:Ó¢¸—* Tq7˜Ø<{ÕÈ­vÇš¹‹'^µ¥¢°:œ`õù±ùÇ,#<Ê´4'/¬Àq½ÿ šÊ¿ð¥èÍð¿Ç‡ªüÏuÿ™Zßþ½£ÿÐElé¿ñî¿JÆÿ™Vßþ½£ÿÐElé¿ñî¿Jª "¯ÆýYvŠ(«3 ËÖ?ãÙ¾•©YzÇü{7Ò€)ÚÈ·ý{·õ¯»²`Kæ½²ÓþE¸ÿëÝ¿­yÜÊÀI ˜¢y=œâ§„nNGñndcаˆQqŽ£ž)ˆªÊüût©¡L`ŸÊ¦ÚÜqšQ·8ÚF(hçAÀ«QȸÆ:ÕDHØÍÛÖ¥ò°Âhú¦P“ÓëB¤­V\Î*xb¶I4𱃒j“»„íÞ¬‹\¶ it í¡Ë.kR Ã𪮅T’eÉÏ,û·1Ò‘@IG­0Ì ÅWw&`Aâ€'¸—hã®*Œ`¼¥ˆ<ô©Èóõ§ÛÀL„v(Ŭ,dU¹{mì½iÌdqD,I9ž´^HBüÊ:õ¦£``š­Ë° qù¦Sæ%hhÇsN,UsÆ})‘)$“KpÄFNF}¨­ää|½ÍKc~}§ëTÖ7žrXzÒ‚EA´·,¸ßƒØR)ýÙ¨eŸ÷ªœŽjI—lMcLÛï¥2ìvŽ1E»ù·yÇz³uTœsë@Æ¥в¯ÞšˆÈ×6ê™9õ«wndFc™e²úP時Ni×;úSZR°ªJ®>v-ÇÐÐL%'ÐÕi¢Ü lã5¤ü»œU®¥U‰°{q@Ö¢zùc…<Ö½þm—,xÉ Í¹rj5·+o¦€,¥ÓÈNÜŠ‰—Ηk=©"Œ¤Dç¿'  §Û {#©«:,nû˜Ž1Þ®GdLŒšp™ ŒGÁ>Ôø2·Õ°#$õ¬ëEJ¬Fµ_¸# P6­>ЩžI©4wÚù9Ågêr‰.À§Öµ4È]ôÒA0!FýUmdœƒXi8LŒþ54:‚3„Ü   RNA=1Jß'5\K¸ž*Lœ‚(eî3OU Û Ê’$ùI-Î)êWqôé@ ®•ÇoZz’zœæ¡;Xœu© †y=iÊBNÔŠC=é!²q¸t ¥Vf>”ø¸À#8ëOeb;cüûÔ{¶“ÔÐÂÑ…$ŒØ‘K|£ŸZ‹~Ï”°€HÈíé@ Ò¢½J¸p @ø.TÒ¦VÚ}(ÁWqÇ¥!^@ô4™þ/z–<’Ié@T/z<”ð3L,[#¥A(ù ¬ø?‹OýäþmU%=}j߃ÿ×êï'ójç«üH|ÿ#®‡ðjú/Í:güÜÿ×Cü…o»X:güÜÿ×Oè+xýÚè9n÷þCv_õØ#Rjßz÷[úTw¿ò²ÿ®Ãù~®pÐýúRž¨?:V\´¬ ¼S#‚iˆ‚4`Ù8«q”æ ÇrZ7‚p¼Š–F\ã4ÂÁ~´ÇœJ$VTõ*Üí`$PÐÚ3áßÞ‹hüÛœöSVí|‚S¿-¨Û±?ÅÎh® ìJÆ¥Z´‹e·¡êjš¤Ýûfµ#Ú#oNÔSy穱ä}iÌ¿+61LŒä·   ׈K «6‘«E´f¢ºnTMY²$?+@"eã¥#£Ê“[‰n²*îTï§ÄcÀ€9x®^5*ääQo0’è€ßJ·ªiÆß.§ŠÆ°}º‡ã@"&“Öµ-‰òù¬õpI©ùPSŠ¿æ ¬{VÙLçµYûO™ôªÀÇÔP Ú¯ŸŽ:Ö”RfÝS•(/qÈèkNY»m…ƒ§8ª¥<ÉÛœWcLF8"©†Åï<ÐRY¬R©Ï9ªzª"‘Î:Ö¥î|áYZ°;¨ÖŸóB¹=)/á %søT:1/òsÁ­Kø¶íjç¯4¡, ØúWÁpþ€ô¯W ^ÕÌkš*O™p{Я½sÓÛšµ.™<$§NHÛpÅN¿2‚Tª”TP³Jµæ&Ü(ù¨Ý¶É5ªÖ_&åŠÁ†GW£Ö·»”„§­ÔëžsZîZ欥òï˜ÁFž9r¤gš“ÌQ‚F)`A^:TLwg¦²í#®(ð¾ðvñRó®zý*¼ý*ÖÓÁî=ènAúTì¤õаWäSU†zô ,|r?Z‘ üéŠOSÒšdÀùO=¨‰ f€AÒ¢ÞÅðAÉ©ÑFGÒ€ °Çµ2°.*=ÛWïNV ãé@‚=8¨™±ÀïHíób«Ï&×äà Ž|c$óZÿ]©¼ŸÍ«™ÔoÙ˜¬Dfº/ä­öî¿»Ïþ=\õ‰ŸäuÐþ _Eù£wLÿûŸúéýo»X:güÜÿ×Oè+xýÚè9n÷þCv_õØ#F¶ÛLýïéEïü†ì¿ë°þF›¯}Ÿþý) ¬¹p¤Ò(ÆìÓbmÀSÔŸzb!u'<ÑA9'4÷ ž´ºâ£w©&Ë)Y”'¯5]ä`3Ú€£Òž3¸g?•6?›“ÓµN¥UOzÀš9œâ¡ó¹93aI JýÇSU'å·ÇAOšo—p#šÊ¼»Û¾cé@DM÷Ç^õ Íú*žk Òênwœf•í'( lœP÷BY‰ÝÅU¹›r²æª\Å4R`gSígv$4«bãf;Ö‹»¾^•ÏÚÎb àÖÄsþèƒ@7ªëuæ8ùj☤¶ÁÆzT—‘$éƒQC§ü£ øf€eg¶mËÒ´.`dÅOmL8¦]°$â€0/`Ãc8í\üµÉSýêÝÕ%` ®3ŠÌ´´vmÀ|ÔÒÚöm»F1Þ¨jV©å–P3M¶»0™ÆqÏjµq"µ¾s‘í@–hÅö·¯JÖÄP=0gÛäJ\3V. ’eAÈï@éèvG&´/–ÀŠ‚ü¼Q´Æ9™¡4ë€UV>=ªÄ§qâ û£oz„¸’Sê+FÝÂ8ùrk.I”òO5~"Ëu´ÐÔPOcëZI–½gZž´RL'J©¨Ãæ@A«ŒŠ+Pçš»—c,m‘\…òùw»€é@î'Ú›®)¶I;sE¬MrwÅoY[¬i€9  ÉdcBÍÒªÎãc.+Z銩¥`ÝHÂ2ÇŒÐ;¦f$õÏjµnÀN‚¡ÆdÏsÖ¤†2.žÆ€:|bÜc FlÆjá}¶¤{Vm™ßtIõ  · 5Æ3T5¨Â vjs‹‚* \£<ñ@è;AËu'§©•GZÇј=krí„Z†Æ’<z¯<„CŒòhƒn–àžù­À”µ^Ý0w¦´‘Ù‘@ wŽ•!\‘г,HŒª÷Î!P@ë@ºÈŠÆ SŒ—„QUn®åÈ@xÍh,a/¢ÐTк9‘zÕ‹MPŒ$œU…MÄ‚3T¯,J±eúñ@†éwãéP\`äÅ2ËnNsÇLÕ¶ù°sÁ  _j)ò&r?J‘b–r 'še°” ©­¸¢DÀí@"´®â9¦;|à9ëV®¥Ú;Õ68<ZÎÔ6žíX¾H2ÇÖåÖ8ÍSoŒ¶>aÒ€+4 «/Nõz<²îçZF8ØG5$s4K‚¼{P‰|Â]”ÉõÀ,qXó\¸™•äÖœ—’À‘ë@ý¶wœ’£µh$ æXqй–±IŒsJÑo˜(<(Õ„@Êo'Ú¶3wtFÞ!‚Iuªwº’¬Ê$çšÚ™ÕmwÅV´a+½©¬Ù®å»ÚBcš»gµWä?X¹1°$õÊLjï˜gjê%”,dñҸט}¹Û?Å@¥¼ì!ë“RÛÝv'š¥dÊbRMAut‘IÁÁ ’Y26ÓßqÐv¬M>èã%ŽÚ¸÷`ù  èªQÓµL)s}î”~p’HqÍf_iáÓåàâ®À~s“‘SL›â€8†•íæ ç ×Aav“B2ÜãšÈÕáU—uS´¸h›ƒÅuNÁþå;,Nk> ddÊ‘VDŽHüè[~Åù±š¥4€ä“š«=á ßžC@/¶ÇsVô»\¡cÞª[Â÷W#9µL’OJ± S×ð  ®Ù¸{q\ö¯|Y6¯ZÕ¼!#=qÜ×-978À9 Û³î•Æ;äÖ½À¸Œ¸5­ßˆ¡#cµZÑ.–K0Iâ€7mNñž3VeŒmû£Ÿ£¸%<涤PTÐ;q¸hÙy¬ëȺŒdî­ùah$sT5|ÈùíÓoF%­=*ùcäõâ³ôœChr{Բ͜’~‚€ ¦çåä÷5ve Нw±É «î¢(AÆzŹÜÌPšžÚ°Õ6c5ë<+ZÊEÉ  n¬@Ç&¬®ž®œqÅ(Q»'¯½\Ü©sÛšæ®´áʼnï[VRÇ ¸F}«+RºHª£5oO€Êƒ< л“¶*µ©’K‚UN3Ö¬ÊÁ,ˆsV4Ø€€79"€ Ôî 6á}}*…©œ$èO£ª@gÈâ©XNmâ1¾:@_È–±~ìòE3E¤,§5JõÚêo¹­}.ØC$`š³xÛ±§4ԥ跷Ue†*ck¹7ÈIZfŒŠè´ûM‘–#Š[x<´ëúÒÈŠ¿5O) €ùüª¼ƒz·4JhÌ™*y©­Ü¶Òa‰úV–ˆz¡wœ˜{PÖ©$£¨´~ÕƒÓ"¸‹ Ìw[G×_Þ½¨êÝÆ0úóUnïLªbˆóÜ×pÞÒ­§þEñ¡<3£§Ý³Çý´ñ ?·ŠUù˜äU½í¸a€ã¥wðéxÇÙxÿ®þ4ƒÃºP9û/þDoñ ?¹Q"Ý}k!ÖK˜—5ÛøŸN´°ÂÚ-žfýß19Æ=O½r³&åb8  3Ü«DFy5gG̱ҳ¯-Ú5 ‘ƒZ: „, â€-^³¢€§œö®«À£ z=û5rz;²:]oŽVôúˆÿöjç«üH|ÿ#®‡ðjú/ͺ_üÝ×Oè+xýÚÁÒÿãþëþºA[Çî×AÈsw¿ò²ÿ®ÃùÏñ¦>ÉkŸïŸåZ¿ò²ÿ®Ãù¡ã$ßkj?Û?ÊÎd’?3Š–ËQd|1ü I8*1Ž+&æ?-¼À)ˆí#¼+‘J·›zƱ´i¼ØðÄÕë¢"Œœæ€.É|~R9üë<«Ï.öÉö¨-Ë—nÝ*öýŠ6õ ±v´´ÙA+‚s޵]î~O­ p®1žh…Ü?>èø5YnJ+#çŠêto[÷¿ô]Åxå˜óoG¹­«œÅõ½&Šò0qLã$z×)©ja®FÁÀ=kèzñ/ˆV7Œ¯˜/»çþÙ­.“2Ü€7s[f/Ý‘žkœÑÄPÕÒ6v5rzÌx,85‰o;‘Ûµt:¸á‡SXö¼O·Ö€,B³D2§§Z¸—óÓÒ˜>VbÅFJ\HF(——;†¥6%ÆÕo»W[MÄyëíZ‰Ò}=(Ηd'˜ã“Ve dã¥[R<{T2àþ4›zÆ([žqT¬ãë!ïRßÉæL#úÔ¢1ŽOX§ŸsÎ0´øáó.öðTU›{p#f"’Óh‘òpE>ïb[•ÀÍgÅÉcÎjÍÉ '\H¿ê˜ôô  †0Òdp=*Iã4äŒÄ s¡Üt€ 7>•´Ð³Ç‚3Åeé ûÞ™­±’§( ·ÛNN8«I:{ƒéšS+œŒäUh.GŒb€4šÛÌLY3ÛHŽ@õ­ØgAê›:4¤`PJE¹ðÀfªjk·Ö·ü…i2GweªEqéi ŒñUä’T8$סA¤Fñ`¨Î+'PÐÕd¨ÍrðLå¾|óZ¾ÔÀèi³iÆ.W;ÕHë@ZPcÆ9ö«šgY·çûßú ¬u,G=Mmx~þÔ‚B8¿ôYWþ½¾øðõ_™îÇþEX?ëÚ?ýVΛÿëô¬cÿ"¬õíþ‚+gMÿuúUSøQ~7êË´QEY˜V^±ÿÍô­JËÖ?ãÙ¾”NÓþE¸ÿëÝ¿­y›\€kÓ-?ä[þ½Ûú׋OxGLÒCfœ—ÛNª³ßJÓÅQŽg˜ò§µd§É‚2iˆ¯%Ì ˜ÕiIls’jø±–vZ¿o¡ŽAÀ  (l¦¹µ­´Ì¥1[i Q Ú¼jŒœ¶ED¶0ƹÇ^´Ø¢PÇŽ†¬qר¨`‘ÜÐÑ€~:ŠWWn­Î}i¨‡yªanßxŸ~´¡Väàž˜«‘§Œâ¨É–—ô«P)U$±ÇÖ€*ߨè½M7N‹ç$õ¢äæPÉïV-ŠÇOô Ì5›=Æé¶¯j–yÉQÏéU`ι9 ‰%pàô««˜ $ã§¥=£TaÇJŽfóHAÒ€!…V[€J÷Íi¹ Àâ«Gn¨À®*IÎØÏ4QŽ´C)WêF;T{•]‡åíJ\*=hšµÀV&¹–¸äöÍ_¾º29Îp:ñ\ž¹¨y(TMakï5Ûa‰×OáYŒ°Î1\8Fž\œòy®óÂÑÁAé@Úl¾]Ëœ×DŒ]Mr»Œ7`“ÅoAr®€)í@ rãÎëéTîˆ({U™T™ª·Ä(#hä àS†[$ð*¬Dm9éVVEÞ3÷EhÛDù‡ÓŠÎÕnöÆQ[“ïV&¿,'t¬gáùé@éÈLŒÙä÷®†Ü~ë'šÅ·SÇZÜI·Ïjˆ¿ž~µ_P˜ªˆÔòG59ûçFLI|¹çð E¦oˆ;uÅZµq 2ž20*ðtHÀÈàr+ iCݰRvŽ”zY AíZúk)µÔVwM‰8íOµ•Ò-€ÐŒÃ$àdU)lRBI5:\äàõ§´ŠFGoz­˜‰÷ŽyéR\J¨ÁÆ;RKz±ƒ‚3Šçoõ•ˆVÉ 5Ûß=¼¥#OOµÜ㊑¤™YÇ~krÑRFB‹€ké¶«·§Nµ©¾\$0{Õ{e1ÂHö¦]L·;UON¸ ./‡ #¾j’_:`¸ÀÎ*[û…´ƒs ŸçXi©¥Þèˆ ŽF{ÐD'Y€ HbúÈÒîq9Rr3[€n”`g4ÎÝ  ‚k£²½cÉ=bk±ùno?J¯kvËhT“@@K*A Í+³1ì$Ö‡uË­RYá¿·Kyv­Åº®~hâÁü*潧Ϫémc ¢,Ϋ33|¬üà`u#ƨ¯†Í–±caq;y[¢n®d“tDt]Äà† {R^×õþc{_×ô‰lõ‹é|Cwcwi´[‰£ù÷; ÅrqÀéÓŸ¯j¥câ-JVÓo. µ];R”Ç ¦ï6<‚P±' vkTi²ͨ3!‚K5·Û“»!˜žØÆ­eXøwQ‰´Û;©í›NÓe2Bɻ͓„ ÀÀ=‰Î;Pº_úÕþ‚}®ŸæWñÔÂ94Ôþÿ™ÿ²×=aúô­¯ˆ0Oqs¤Em’ÌÆm±Æ¥˜ð„à¥cAбŽâ'ŠP>du*GÔ`Q¾·ýÛ =•¤Ë²à£3[—Mó·^•ÌH ­ÞâÐXʲÆk¦ðHÁ¿ž_þÍ\m­ê´KÍv^ `Æý‡CåŸý ¹êÿ?Èë¡ü¾‹óFæ—ÿ÷_õÓú Þ?v°t¿øÿºÿ®ŸÐVñûµÐrÝïü†ì¿ë°þF¨xÆa ½£òúUûßù Ù×aüb|Cmšu›ÓåHg<ìjì Û¸#œU›ƒÚàŽiÓÆÝÉÄeè×>[€N9æ¶.çóJÆ3É®Z9LWl÷³ZöÓ™nÔ“Ò€:íü˜‘W©Ó„ùUÀz± êdó´V:ÜE-Ô¥ó»w°ï;÷sÍEq¾ÚA ?)­(-·&ñÒ¨ê{D_1Áì(wÃ/æêöÍìßú ­ßêKc§Eoöij’öQÎÒò”ò͓ЅäV^¤\hšå­µÌÐI#«¶",p0}@÷ü«¥›L‚}RùK¼ÄÑ"ˆ$ãx­&4exsP—TÐf·‡PŽ[»Wkct1(l}×àüÙR^¹£Ã†úmþ&¿’K”¼ž$¸w‘†À;x€À­X4»{mRâþè÷¢IÆÃ·8lc¯8ëNÓôètèçHYØM;ÎÛÈ8f9 `t§þBÿ33ÂpÚ}Ú]]Ks$WÓÇæÊrH ì>ƒŠç•R;w2î“©õ  ÊnËzÔLùJ°¹ PA@P^&›rÛ`cS"?J¯¨°à ;JêNqZÅëL'ÇCZèÙã­/%Àª7ö¡ '=]wCp¦HJôãó nYXBS4Èæ wZ~£Ù×’sYáYÙyÍo}µŒaTÖ¥„ò˜õ>•‡ko#ãåï[Ö¶2*Ý(6Ý!f ûÖ§ É@:WIr|µ +—¹o5ØÞ€"¶eÞ7Etv±²ä­‹}°ƒÓ5×DvXZ³ Könk5F&lëJ&ͳéT#æv 0Ì¢›¨F‚2r*R?z*MHn¸í@¶‹þ}iÜgÉRŸjGÚX ×»*!QŽÔ³ÿ…A¨6HnÌFTWÐêh;e;rqŠ©xàNzÒHÙöÚ²®×÷à´u Y`ÉPk%¬È¸Üªp tVQâÜj¬ª«pw3@‘ô5=ËE!=ý«¬k8ÞáyÅqºšâqÛ4Z#æ\óÓ½\È$Œæ pÏÇ5nÞϯz˜A¸e±Ž´¦ÉÎ8«&AŒȪ‚B³1=E6âBªÝ3KkÈXõ÷ªìL²FkR4 Î3@¶"FnõJY2¡NkH 1c#Ó©ªWH±¨>´@·çU®gÀÀ<Ö¤‘ûp fÞ0Ryí@oî|¨‹ŸNrk€Ôï>×tqœV߈5&(cÍs ±È9  ¶¬|¿z»¿ Cæ± g¸8ʤ˜Çã]÷„æDV œâ€4ï`ÚwÍGcrR]¤ÖˆQ;c=Me^[=¼œ 84°ó)PsÍgݰ –=ê”WÅN“ž™§M8˜¨SÖ€$SJ®ó Q‘ŽÕ4Œc‡­I¦Úyä;”EuÜÃRˆ’,`ž•¦"D•ü*•ì±`¨Ý(<X±­{V f1Yq:z»e"˜ йÃd Î#mæqÅi¹Þ«\BîÀÍR»–A)Tc´Óa…üÀÄÔ¶±YÇ#šÑkKrUrG­OiÉf©ŽÕUâ6ìs÷jæšÃMZ¸€J„~TˆÒ ràô4æÛŽO•Ý›ÆH¼qTËL“@jnÑ‚Ã5‘o ·ªI5»Ÿ-äß½'Ö´þÍoc· (ãNû- -‚ÄTÚ\9!¥XÕ$óbã¡éSéqªÀ6ŒœP¹§ÛœqYÖ2åÙº‚jýô_èÍÎ:b¹«{¶µ©Î7q@ÚݿڭH^¶+”‹O–ÚC<¬IµnͬR6gð¬¶î `¥K§’n”æ»hö±$Ž•Îé¶Ye~­³9ŒÇÖ€0üBìCqùU!u¶Ù÷§j÷Û¦{Sà˜ý‡kr;Ú€=q<¥>1ç>¨¿üU>ãÇZe²{{¢/ÿ^{§ÃçD§'Žù­Y-–kRŽ;ëañÞ—:îXnÀ÷Eÿâªtñ}Œ²¬PÛ^Í+}ØãŒ3ükÌÖÚxd1Æ8Ílé >Ÿx—ˆÃÎ@Áw ã*WúÐE©ë ºþ‘¨\Øj–Ö¾z»Ü[• ^<(Ï9ša¸Ô¯no--®%†IX†X‰Ç|wæ­4W>#¼·³»¸|̭僷å' ÆzSÅÝÆŒ²XÙψ㕲æ0 àç–€9íE$µ‘ÖThÜuG\øãu;—’\x‘×Cø5}掃Kÿû¯úéýo»X:_üÝ×Oè+xýÚè9n÷þCv_õØ#X_óý™eï9ÿÐMnÞÿÈnËþ»äkÇñll”ÏbJC9= nˆ“VïRÌ…9=ê+dÑm“Tµ‚®iˆÄŠ3-ëZÖ‹²ä‚:VM£Ÿ´7\浬¤ó/pÔ§ãà’MgÛ¼`æ·mág¦zU[í<³ù‘.z&)ËqéV5¯^Åm5Ü·V»"* ’}‡ËÖ¨[iÒIƒ+qéZ­ðåË;1Ë3“ëÉ  zv¡yâ wí‘EAYŠí'àr~oj½«kZŽ”U$û».ì*¹ÀüqþEA«ÙÚé÷†ÞÖ m[ ÇwÌx9'û¢¹]NQgœûP÷ßµ[vÄVöGýäþ*¢OˆÚëEæK=£þ.¹9ÔÏ6÷­:%1ùoŽ8ÅtÐ|AÔ¥\˜,óìÿÅV]ýìúì·“„W“8Éö¬»=á2®:-@Û*àŠ•“÷ªÓ\ˆ8aøÓ彄ŒƒÍg\Möƒµ‘@’n¥ÝŽ3ZúmŽçÎåMÓôÖeRF>µÑÚÙˆÔ™ï@wöí¢AÒ®Ú^G, d+FêÅf‡iäÖ+é­ œ é@O±ç šÕ@F{`Vuµ“³ZÖ(sÏɨã©÷¬i‹Ox¨zgšÓ¸¬E½=jŒEšI›> Ð×oò$+ÁÆ VœU‰x$sŠš3Ü裎i§ zÃ9ÇJK[hÐä€M6ly¬F8íVD}v“š«*Ħ€*œóM…H|‘OÜ“RÆNN1Šš$êÇòªZÁÚ…=+ZÙâ²õS¾ãô  zkã*{ûÖä2*‘ú×>Šb•YFk¤™Œ5O3«±Àü4êxÎEØr9¦”p(X&YüRAi寻†MM,aæ©ÍY—å(Å]²ER1[M H{g“jvªñšuÕà‘ßÚ€+_Þ) €ô‰*DXõ4û©‰ جé'ªç4ëQæ^Œõ-]tÊ#·AÐb¹M-sz¤×I¨Kˆ”g€(d—bãZÝÄ“µF[–¥4hÓî‘•¸÷  ìŸSj@›0 2B>ÓøÔÚƒfÔé@J~ÒsÀÏjÙ¾_ô`GP+&Ìævç½l\dÅŒv ô™‰GZn§(ùqÚŸ§ »ÈÕkðXäó@-&W€zÖf¢™œ{Uy.^ÙFÓŠ‚mMX§˜:ž´±ktðÆ¡³Œu¨]׿<ž*Å»[ÜÛ®×*ÈÖFqÒ€:+ddë’EszŒ¦ea×Ú¯Øjl±ì`{ÔWò#È$\P!ÒA È9Ö<ðM§zÍvVŽ>e#4˘#‘C2ޏäP? °™@eíÖ«\ÙµÝZÈ·ý{·õ®Á'Ö’-ÄYÇJˆ·Î59‘vÐU $É 1LD—¸SŸ¥Vê¸=iŒJµW¸¼HTy  5bŒsøÕx®âc·§Ò±æ¼{©v«|µ±aÈ”àçp¦1ƒŽ*­Ä¹VóRÏ!EÀª„¬‹šb.’j9-’=ø©3·žC# '#“@ÂÊ#š{»OZ¥£=­[ÖVÇ&€$†?Ÿ9«íUÏj ¨D–äv  ™< õª3–INséV–CÈôªò!–q‘ǵ,½_WÄYª@Ø©[w”XPÃËNµ™¨Î¹ )Í4Š€>zzÖ5ÕÀiJæ€~¬{V¯v¨„³v­;‰‚Ä}º×¯^ï, äc^\ý¢àI¦‰6¦ÞúT „œî¥ˆ|±&€îCu5Ûø.bò²œŽõÃÊFã]'…/Z+Ô_Úô¸FfQïV/m éŒsÖ©Å0óTƒøÖ·™¹A>”ÈÝé’ c‚3T#-äîÀõ5ÛΪÁ·1ƒX—v 26&€1g¹3L‘®pk©Òá[)>+‘XZõV õ®Æ Ä»}(ó6äVM؎¯HÌçñõª³ (Ù#  Èd]¹=zÕ»"W¶k-\*;V‹ Üs@œã©§¢oóM!K.H©QpàpZµ2­‹?¥eDàHAëZ16õÀï@`“ʼ*sŠÚÈxð3Íd\CåÌ%9ÀàÖŒîvŸ”ÐÐnÎzTc@GÖ§{žô’È0>”ZE[uܬ‹‚×7åö§Þ\<’Ôñš»okåù‡8  [€^6P:UÝý^;޵Àí(ªöµ½Æ À'šÜ¹â'šç.ìK®äê+¥'#ÝóYìkógžô•,‘–ÅiiÚ>ßšAÓõ«ÈèÞ1ŸJnc$°â€H’$Åf\Nl tûËÿ1HSÅs÷—g;É=hßg7Ü#sšÓ‡OßhcäSü?j¾T²0çsW``'aùPzS4lac‚+£w. í\¦ ²[],È8Ï8­]YLcžGZßh±cÖ’5Ǧk3ûDÎzûÓ A;O=(}/Æág‹h‘C`‘œdýk3PÔ8yòîŘú“Y­zÍÍÐÕ¹w§-‘@¯îs–'$ô¦Ú20Ã$šŠ+Wº¹ãœt­7Óü˜†G4Èäh#8ô¯Dð#nŽñ½DGÿB®94ó-®}k±ð"ìŽñ}CÿB®z¿Ä‡Ïò:询üÑ¿¥ÿÇý×ýtþ‚·Ý¬/þ?î¿ë¯ô¼~ít‡7{ÿ!»/úì?‘ªž,PÐ[g³1ý[½ÿÝ—ývÈÖ'YÛ9îì?JC8û©U;óX—’‰dQ×=i×—E¾bqéU¬•î.ÇSÞ˜‹öÖ“ŸZ–[so0™qŠÑ½#Å2U3Ûqƒ@–Ž²Æ¤Õ{b‘Ö¸ëBK71È¿.zš×]YHÎEj@ÅI½U0MbC9 Љï°KzPÅàœœ³Xž¤úšåõ Ï1˜çV¦œH¥sÒ²^¸˜*‚F{Pl¤o8¹Sо ÉuûU´ÓÄWU‹a$m”ï@ØIöÝÉEæ™ ]Àcj)¿ÐnÉíR¼ïxFÜâ€2–ÀI ¯i¢Fƒ-×ÓrÒËˑɭ4B8 ¡´TQòüµ6ÎÀ©¢ÆÓКd¸øÐ{rßw4ß%H$šxVqEŒO­FÊxýC)8ô«’çÏéY·r”õ zPç,B jI“ȳ Œ8¨ìÃ\N^N@æ–òe’ä*޶h[8vA¿š¥3(¾{Õ§¹&*!ób †É¼Àò}îôhºG9ªl<ÜžjÌûy1P*°Œ’x  N˜rÃ×¥Où½ª9FçEK8¥\\$yïÖ±¥ýìì}ëVsåÛ»zVT9'wã@ 4GÉuïK ûc ŽG¬"‰>ST'F·—v8  ¨å€ÏaDÓí·lÇ¥Cm:8Èêi·í‰Ó  k&ùCsÖ§yGš5YYc]Ížj³^#ž=hsÎ;)æ«ÊëŒu#­WY²œS¡‚IC7c@¦RUÿ»ëU,Dfá—â¯jî¶Ö¸V&‰p­u)cŽ(FÔ•Ô†8«sR`"@j´P÷ªsžrkKP”n P;™1lE2Èù_¼ÉÉÌYíL3*÷½nZÜ ¦ëÍhê>ÎGµs:;o»Àló]-ò³ã¾(NLÝsë[·Bè+K»#= lÝà©úPR\g¨/X š,Ô³±Óo€hõ¶õPZæui#ù8+²8eAÖ³õ‹a#/ËÍsú\óDWçlÕÖ[\ÛÝÞÜŽ9¬ëkK}죧#—up‘ÝŒíüh´{HZ<)ÆEUkR«žµ…k«ê®äc޵±¤¥,ŒJap}=iZðÈ¡qŒTPÈ“Ü|ØÅ^’É ©  +µÁwj•Ú$’äóïTbI‡½LÐ\/'8·ao‘Ðf‹Á²@Åc.¤öÉ´UF¾7NQ›“Ú€&óÑ*Ö›n#ÄÎj„䜃[–ê#ˆý«*ÿ—£7Âÿ«ó= ÿÈ©ý{'þ‚+kMÿuúV)ÿ‘RúöOýVÖ›ÿëôª§ð¢*üoÕ—h¢Š³0¬½cþ=›éZ•—¬dz}(§ü‹qÿ×»ZàíäÊ çž+¼´ÿ‘n?ú÷oë^{æ¤qžqÛ“I –&›ЦfD'^ãRDˆ95ÎÜ^O<ÅFvšb4u=]GËIúÖ3Mq;¡$ãÞ›,,¸ÜO5¡ehÎWƒÇc@¬b-(\r+¦‹åñTlí# ÕÐç¥ArÄœUHØÀt«“¯ÈyɪB&ÚÜäаq­E:äc’*HÈB §Ns“Æq@®ê˜ µ­¥ån+ÏÒ²oW¨®ŽÕDvàÈö §9tëtÊL˜ƒ;Õ‹r@â€+Ü)½>ÓnÜóLŸ÷Ò sŽÔÒY`ym)拉U`õª%™e g§zŠâlFH'ÅÉeÚ£Ÿ­d\e~cWÆd9þ‚²µIÕÌÐ&³¨4Qà63Ö¸Çv¸¸#qëÞ´u«¿2VL’+6ÕI“+ÉÏzuÄ[»TQRO5oP‰£ [‚Ý«=yÏZWÁnüÖ¦….ËøÏ½f2ü ŒÕý"6q¹nhÓlæýà šè¢pÈ>•Èar)ú×CgpÃrE]—yÏZ¤WqÞ¥y·P¤€±‹«Á¶áqÍhÆäF€zSï`GØXgÔyÁÀô ’jrcqž½±àõ™{r`†I$P˜MÞLÖ½‰ ç¡Ís¶eäº'¶zÖý¾å>ù  ]¤Rs* nF9©â|àPàbe'Š×‡ «$äa½+VÙŒ@ u™¾*µœ¤n¸éW™²vûf²î.ÎÒy4}7±ÍE}7•zãTÐ6rOéYú“nuP*†Î#$¡ØqZó¸Kf&«ZÄ#…GåF¡&ÛnOÞ  ¶ ¤ry¨/¬ N]W޵{H^ÖŒÑ,©´ò( Îä°òän;TòÄÏ€1Н`ð±dè*¢jEÃ#Ö€%¸·ta‚yYãb95dßÄàï?7nzUw¼Id6ý:Ð|ÞiN}h°ÑÚyÆüûæ¶`†IŽ#ZܳÓÒßõ  Ööd€àc“Xaˆ½®H+§ÔäH Ú½Hæ±ììL®\´nÒÙ/íO˜TšÇ¼Ñ䨧Ý>†µ£&Êä)$!­†e‡=苉0Þä-]ŒD/ž+bëF.WX“i“Fø h ‰UGTnHHÔšÓ‡G–R )"·¬4”·•±@t9`tŠ7j~©1["  qY:ÝÂy[–±\Ç ¨ç'âºOßno_,ÿèUçöR<óylØ«Ð|›õ–?ô*ç«üH|ÿ#®‡ðjú/Íš_üÝ×_è+xýÚÀÒÿãþëþºÿA[çî×AÈsw¿ò²ÿ®ÃùÇñø'N´Ú2|ÓÇá[¿ò²ÿ®ÃùÏñš³ZÚ>aþT†y™²’gË¥tZn”#Œ6ß›jËK/†“: V¾Å†< ñíLG1¬ä"®yéN°b¬ˆÃå÷©'ŒÝÝmì YšËÉ‹v9€RÒ#¸]ñ€b¹ç´’ÞLp+¯Ó§Fõù¬bœäý(”Ib ÒK4xÊæµ.ô@ )œÔè’Èy\zÄ_6Y0 òkIÒÚ/ÞL¹¥i¤$• (Æ0(…Úî¶l&8¬ëÅ‚ ÷³Ò´u¥ŽU ’0+”In°ààš›R•îvÞ+CHˆyG‘QßÌrjî•Ȉë@ЯÊ:Sœ§Šd-•ÍHíõÇJX•‚çøM2TÈ=EHŸwƒPLXçž(Ø!88¢?R9¦¬€“ð£xó“õ ÌÅy=ëSÝí­+—sX²1¸¹<@la³.Àç˜ìe•œüV•üž]ºÆ?*¤Š¢D¥Z·ƒÉ\°ëÍXÈ<ô¥pV<ŽM,Q–S‘š«*‚z†c¶,b­Î 0^˜ôª·Ê\¨5H‹‡f˜b5.6(4¡.È‚Ž¦«Â»aïPÝ9šçjœÒ®"%µId÷§\[,°¶@Å:<þ”“ò0[Ú€0ši&Tœwª··ª¤y­ÄNz×5ÍyfyÙAÏ¡ ÜÝI1ÀÎ*{9¥çUÛM)r7üÄv­Ë{UBøP6Ö?*îíÖ´|´‚ëÚ¬ÃÌ285[SusÐPâk¼·–¸ÍciìT³giéNÖçY.XƒÐÕK,çss@.”ß¿Ü{U»·Ý)À5Ÿ¥I¹ÉÇJµ<»¤8Jæ}¬_JdóAç‘Ö«Ýɾç`§ÚFâB89 ƒÃp;qç&ºMPˆ u¬Í˜è+KWoÜ~”“¦.n›ëZ7…£'­RÑ¢&áŽzµ¡~¹Ïá@tó™t¢ú1¸ äÓ¬S÷ÍŠuâm•H$úÐtº(íA2êBç–%ië¶ ! ‚öÌè+™Ô´´JòÆ~jë­p"~9ÅW·E’Rï@kq ͤ¤M»hïI¡2K•c´û׍߸~ÞîØ œb¸MGÃ’YÉò.FsŠuž©ƒ–àÖÜ hÇÍœú×%¼ñLr§”ø'ž9äàsŠï4û•Y‰<ƒ[‚xgx®ÛP1º†f¯%ù¯œžy  ÿì?=ØïÈì)!ÑÚr\tïQÁ¨²U¿ ÔÓj¥“ð lêàtíT,›óã$šÓ<‘YWþ½¾øðõ_™èGþEH?ëÙ?ô[Zoü{¯Ò±[þEH?ëÙ?ô[Zoü{¯ÒªŸÂˆ«ñ¿V]¢Š*̲õøöo¥jV^±ÿÍô  vŸò-Çÿ^íýkÆo¯Ÿ%W'ŠökOùãÿ¯vþµã¾B($õ¤†ÌøÄŽ™$óSTQž½sW%òúqUžšeUÄ1SÎl(ϽoYAå/#Ÿz}†˜±&æp( @'Phv^xÍ9pKqÖ«àïçµ%=â  gŽ´ƒÈ§NqÇ¥f»©aŠ"2zšŒã#ŠŽRÛ84>™™33[ á1žk?KbbxÉô­"?tNy  NFòMJe õ" ™ÇšGJgúÉA  ¶‘àn~ô÷ˆI7K R@âˆÀØÌ^”FK`d$qšÎ¸°EŒâ®Ý\R?ˆÕˆÃ;èœ$™ 7“^y­jE]ÁÎs]GˆuTŽFyýÓ\JI'Ÿz¯,$¥‰<ÔÖ‰Žj¨>Ôáž0Ns@5Œ³íݽ*ªcé­¸¶XóR ç¡  ¶‘yŒÍmZZ”ûÝ@ãdg'ÔUXlšèeóƒÖ§µ°.wI[Ä©ò¨€9Ë -gß®ßÀ¤˜ï ëˆóÿUµÊr+OÁè#¸ÔÐtWAù®z¿Ä‡Ïò:询üѱ¥ÿÇý×ýuþ‚·Ïݬ /þ?î¿ë¯ô¾~ít‡7{ÿ!»/úì?‘¤×;[3‚ÇùRÞÿÈnËþ»äiú¿ßƒèßÒÊX€*•Ëm H«à‚¼Š«qØ@Í1–* á'kFÿoÙ›=…gÛ~îø‚;æ¤Ö.Y`¼æ€*ir‘q´q“Åo®G\W9¥ÄÞxÎy5Ò(!FzÐ[H© =qNòÂ¥E+ª)ÉÅ+Hþu—w|pQ &’æôÈÛ#ŒÓm´ó)Üùäçš‚ÚÍî$Üù#Þ£ÔôµÚ<±Ï¨®…-„(0{t¦<ØdÐ-og+°·Ö ^ñ Ï¦HSÍG €úS±¸cµ1XÆœv¢9 =ûP× ¼~5^Bz’µIÛŽæ™2€FC:cÖŒoÉ=½*E(g< ¤8õ  —Òm\s€1Tíá"#)ëO¿ÈêŠ2M:ã1Z„Î  '¸Ž@©%#ÙŒf åÆÜ—«ÑXÈàK.qØPňPBç"¦ËL‘DH z mÓ`T‰;Z¡tìüvô«²®MgJÍ»¦M6,BŸZšõÂÚ±šXFlv¬û™^i<¾Â€`†WŒÖ¶Î„Õ; N3W¤?-*…gÒªÈ Á©YøéU÷|‡ÔÐ6§!XYsó£ek°n&¬ê™{½Í0FV%ŒúÐ’äç=ër—åãšÉ³ƒljMmBp õé@Jëy=q\Ưuˆ‰íZZ¥ÖnkÖîÊÚ¹'9è(¿”½Ë8&µ,agÜO t¬';å¹hä÷¥léH3c(݉çšu iÈæ¥2ŒG¥sÒ®ëÒksOÓ÷Ê[oÊgÛÅæêtæº{CFàÐŽ•YÊ8©µŒŽ{Š],eɦëY)ÓµSÐÓ.Çêæ 03Šfˆ¸ˆ¶1I¬É†t éÀ´„àc½_žØH»€éYÚd¡c$÷­S)û+±‹¿lÌjpçêj)¥Æ÷œô¦Db¿ç@vîDNqíQÙ?ïˆïš[yÙÛŒŠ¯„\œuÍtªÛ¯\Õ-JåSh© vÜ ŒUK¹ËÝŒ†€(_hq?!G5'‡ü¶ÎÏÆ»#þ¯q¢X•ãŒb€8IlÖ9”Ï¥C>—/úÄÏÓ]ÙÁ•sÍUx¤@AJÇ·I‚Ù㱫a‹|£©«) H@š ¾ÉÕq@Zdl0ßiJ¡Jc½W°Œ¬[±RJßé®}xü+*ÿ—£7Âÿ«ó=¿äTƒþ½“ÿAµ¦ÿǺý+¿äTƒþ½“ÿAµ¦ÿǺý*©ü(Š¿õeÚ(¢¬Ì+/XÿfúV¥eëñìßJ§iÿ"ÜõîßÖ¼~V ý+Ø-?ä[þ½Ûú×’Gnó‘Œã4Ø[!šÁÉ­+UVÉ_Ʀ´²ÄxýjÌ nS+©àHßÉ*ÜØXÿj \¾@ÐI žÝiÀcšfpþ¼Ð»³ÏJá'½6W_84ÉßîÜõ¦Jqù"€3¤ož£ÜÎàdÓ$oÞZžÆ34£¾:ÐÅš \Œâ­6uãéU­à#qÏõ©fPßS@×M¶PA9¥·p¤±ëž*)G›)ò:Ô2Fñó“ÅoG¸¢¹4òá |PZ9’Ùyâ¨ê3˜ØÆ PšS,ìI⋹Ä'<ôØÇξíeø†íc…°ß…qšõøy6“øW6NNjÕôÞlìsš©@93œ€iµlX#·ZÎÒlV²?jè#LBIôÅR°„@HàóZÑÂ<œûUV+ZÍ–Hü¨¹ˆ`õ¬«»??yÇ#½n”äúb«0T‹$u PÎm™äTºD"æá¤nÞ´º¼+»x?‡YDN:ûšÞØ#ÛŠ«váÎU¬¨o˜ç=*ÌŠ\("äbèò:GÎÒO¤º`eÎ*¶ü;f€5"9#~— ζû£>•£ {PŠ18ÈÅ$À )b`ÊI³`¯Ö€.ÄÙEçµI¿h'ÔUKiGמ˜«|½Aï@n‹n#Š¿dy8¤t…G¦3PZNCÎEi:e€Œ0<-*H¤õ¡¤ÁЪÜÍA;ü¼~4¢PXûSd`@ÇOJF@Ê9Ç0SÏÐTNÀcÓ5*¸1õçë@ $–ä*p¸ÇJí'5:`¯'õ <Óº‘ÁéÞ“*O­Jcƒ“õ  W™aaŒŒqX«4ÖêcâºVSœ}*”ÖbG'§Ò€1aµaÎk µ¶X! µ¨€v«ÅÂFyúЗ۷Z†æå!sõR}I#M©Ë ÏŒË}8<â€q4·R:UË;/úÕ›k5rG"­€{Šdjû£éRŒg8™P£ßšQZE½'·¥[ð˜Åî¬?é¢ÿ7ª›‚óV|$ÀÞj§þš/ózç«üH|ÿ#®‡ðjú/Íú_üÝ×_è+|ýÚçô²>ßuÿ] ­òFÚè9r÷þCv_õØ#OÕ¿Ö[ýúTw¤mÙ×aüKª0ó!ÉìßÒÌðÙ¡“޹Í=É$Œ”x8☎~þÝÒQ*g"©…’y0ý=릖$`ð­W[‘Ê€#°±Hð{úÕÒ·gÞ“zG[¥QºÔäš·4«DëX³Í$íµsçLf–îQ’vç¥kZÙ“su  ¶v;~fk@G‘´`T›†qFB«­7ËäœçÓâ2hÈ*~j ƒ÷Nh¸@Z¯ÞåO|¹=~•;”¶z”3&ŒTI„cÀõ©BNO¡wahÙ_”úT7-¸œqR•äÒ´a×ð  Ñ(ò²Oªy€³ü¢­ª» ç=ª…Ö(™É4 æÝ4§9úUkëƒ$Å„V¨ Bx EeÏoˆÄ‡9j³§[´§ÌÀëÒ¶$o.§UM: SRÌ7 6ÞP7zc7›1¥BòÈ\Ñ Û³É4—J£ø†+5þÿzåÕ¸ëŽ*Š©$z{9H FÒ#5É'š’åø(*þoåÂŽMSºC ªØã½Y¬‘‚§µ.¤¿èÍŽ½« Þi “ NÜÐÓ ØÀúÔGŒ€¹¤·—Îç8«Vå¸aùÐ3t…ïG5:AÓ b­]7Î@c· \„…UAÔÕÃ0A€yÅd$¥H9Á©YË|Äýh=F]À“Æç\>¿*˜0?ZèµK¬óqÒ¸íYÀ õÍfÀ¦AŽ{ó[ööÛcþ.•ƒj“$r uvfTN¼õ  xa+b à˜Ù€ãvð,V*1ÛVÔbÑØã  zU·©;ÖåÕ¹†^œU/F>ÔìGCÅojj¦Øé@ÒNýß/Ÿ­X@ÛÔTZ;€ŒGZMfS€´&•-×gkmºéT~5­§.-ùÖ¦Áµã@‘½­²Ê ãóVãÔVK&ç³ík¸cÍÝ;Û«ÐÐóJdpƒMiIÛT'ŒŠÆÒŸt#ŠéuöZ¯| eš/Ùúu¨6¬WcT¶«[àœ7½Er Ü‚~´µýÙ£#¿µRž¦§‰°yÎ hÝ,sÄp£Ñáó/ÀcòƒÍBÇlGnrzVž™lmÂÈã ÔÙÛ0„.|]¢ÂA5Æ´Í1Üç ôSÈéMÂq?ï‘Jàtú•Ò­®AúÔÚN¦†×ºW%„þâß"“û‰ÿ|Š.k.¦2~qŠ«6¤…'§Jå>Oî'ýò(ù?¸Ÿ÷È¢àm]]$é´š‡H¹K"gY'÷þù|ŸÜOûàQp:è&ìîéÒ¨Í|’HÍ`üŸÜOûàQòÿq?ïEÀ½u¨Fƒžj²^«­Eòÿq?ïGËýÄÿ¾fÒùH5z+Ô É®cåþâß—û‰ÿ| .jš‚tÍ9ïÓoÞ®#+ýÈÿïK•þä÷À¢àvÐêj²`·¢ºŒey#­yÆWþyÇÿ| 2¿óÎ?ûàQp=$j1„ÚŠÏ’õàK»ƒ×šá²¿óÎ?ûàQ•ÿžqÿß‹èq꫸|صLu$#ïW›eçœ÷À£+ÿ<ãÿ¾øQp=5ÎIýiçSM½@¯5ÊÿÏ8ÿïþeçœ÷Àÿ .¤ÿiF@Éü*eÔP/W˜eçœ÷Àÿ 7/üóþýð¢àzqÔ“vr?*uHÂò¼«rÿÏ8ÿïØÿ 7/üóþýð¢ã=SûZ<ðÔøõtß÷†+Ê7/üóþýð£rÿÏ8ÿïØÿ .#Ö¦ ç?Z_í8÷}êòmËÿ<ãÿ¿cü(Ü¿óÎ?ûö¿áEÆzĺ²"äÈ?:ɹ׼̤mÅyîåÿžqÿßµÿ ]Ëÿ<âÿ¿kþ\öÚPä;·×5³k}CŒyNåÿžqßµÿ 7/üó‹þý¯øQp=tꉜîàÒÿhǸr+Èw¯üó‹þý¯øQ¼Ï8¿ïÚÿ…×ßR@¼0ëH54#‡ä;Çüó‹þý¯øQ¼Ï8¿ïÚÿ…×Fª‡Ã?†5XãºÔ²Ã—_æÕã{Çüó‹þý¯øQ¼Ï8¿ïÚÿ…g(óIK±¤*rÂQïþw=ßMÕã[Û“¸s'ô¶u¸¶ýñ_6ïóÎ/ûö¿áFñÿ<âÿ¿kþw3=ÎïWŒëgpâQü?TÖcÝÌ:0þUá;Çüó‹þý/øQ¼Ï8¿ïÒÿ…Ù¶£ Õ)Ö#)÷†{WŠùƒþyÅÿ~—ü(óüó‹þý/øS¸ÒuˆøùÆ}é·‚wŠñ}ãþyÅÿ~—ü(Þ?çœ_÷é‹êWzú–eGªð܉Ÿ{°çÖ¼×xÿžqߥÿ 7ùçýû_ð¢à{ ½ìñ•üêÉÕP¼?:ñ]ãþyÅÿ~×ü(Þ?çœ_÷í‹ícUˆH¤mZ¯Þ?çœ_÷íÂãþyÅÿ~×ü(¸Çý¯¨üéF«r­xÞñÿ<âÿ¿kþo_ùçýû_ð¢à{+êqpÃ󨦀òÃ$Wï_ùçýû_ð£rÿÏ8¿ïÚÿ…ÖÛVN#Òƒ©&޵䛗þyÅÿ~×ü(Ü¿óÎ?ûö¿áEÀõÆÕc2Ô¬G³‡¼rÿÏ8ÿïÚÿ…—þyÇÿ~×ü(¸¨5HÛ,O5R-Ed¸bÄb¼ÛrÿÏ8ÿïØÿ 7/üóþýð¢àz=Þª’\,JÃÐÓnµ(Ùî ó­Ëÿ<ãÿ¿cü(Ü¿óÎ?ûö?‹ˆõ=V4¶>i²êÈÙ`Ãé^a¹çœ÷ì…_ùçýð?‹Œï¢­3nµn=E1ÔWœeçœ÷Àÿ 2¿óÎ?ûà…ÞÍ|0›ØDw,+„ÊÿÏ8ÿïþeçœ÷À¢àu‚øKwÜ[‘êhˆá^o•ÿžqÿߌ¯üóþø\þóRGL*‘¸‰£ÁÆkÊÿÏ8ÿïFWþyÇÿ| .Vš‚ÛÍØÍZÈ û·®S+ýÈÿïI•þä÷À¢àt_Úªä±<ãµ5õÀ Ø®åþä÷À£åþâߋҥú. 7>•,ú’ºìB9Êü¿ÜOûàQòÿq?ïEÀ›W»÷`öë\¬×Ÿi< é>_î'ýð(ù?¸Ÿ÷À¢às°H“ë]F‡ W@Þ¹¨r¥‚ˆÔ±èM,¨Ðcεh³Ó̇n1EÀèµäò3PÁt¦Õ—=k¼`dÆŸ÷À©)/5­cþù‡ ùâ‹Ôé7 àŽµsQÔ—ÉÀ#Âù‘ÿÏ5ÿ¾M ´÷™!±–TY ,â'+ E½Ž×I¼M‡š5KŸ6UŒW òdŠ8  â­YÜ´Wù ¯jwIÓÆl—'ŒW=¨88ïÞ·lfBŽØ®wQ`ú^éL ÿ¹^k7U´ómšDPqVgp 8ÅZDó4Ò:äPe,–³î õ®ŠOí¨b=ºsUÒÅQdb½+*9DSt<ÐU™hœ7µSŸÌGÚÃ8ïW4©ÞhÀp|Õém#Žh³‘d‹ñT.ãòî2:zÒ¼3ZÈJ—½Cq(Ÿ´¦ã6yÝÚ£´ù¢ëÅ5y´ ÔËê}h䈩ÇZ}«b.sŠFQ"ã Êü€PMBo—mS±S$û:ýÀv' §é£)¸qí@f-I¬‹v'Uˆ{·ò5~îB&²ì }UOP3üe_øRôfø_ãÃÕ~g°·üŠײè"¶´ßø÷_¥b·üŠpײè"¶´ïø÷_¥U?…Wã~¬»EU™…eëñìßJÔ¬½cþ=›é@í?ä[þ½Ûú×'!Ü©®²ÓþE¸ÿëÝ¿­q)o9éI ˆxSÁéQe²A4òþ:T[öýiˆ\Œâ”(ûÆ 2rÙªwúŽÐQ4šø»S–ÍU€†ŽsYèŒóry5¯m%qÓùЄ$óšlßx6zÔ·˜cZfTPÍ>òù‡œV̆< ŠÍÓQ¼¢ÀÑ,H=( IòrSBÇ^•£ WQlÔSBBãÿ­@–*àþtɈQ€y§d!ˆUF-$»»P€ù¸bvH­ú â’Þˆ\¥bkÚ˜Hü¥8'¯4ÈxŸTÞAú ã‰9ç5V»ûMÙÁÈ^P ò{_Δ­)èW¦jAƒÎH¦m tãÒ­YX´ò`Ø4©¡ØEzû¤=Fk^ùÞA…éSéZRÙB[vxâ™~!$þ´˜­ò/Òº¡ À£uHÉ×s°T™ŽçÒ½WðÄxjâÆ1£¾Ó`Žáï|œ ‚rdPøù€¦{{WŸX_>Ÿ¨[ÞGrI‰e©#¦@#ùÖµ¿5¸5I/ÍÛMæÝo3»C†í³wv¡íoëÈ÷4|1•u¢ë1˧ o¢°šaq+TÇÝØ¸àóׯ7„ÞÒ[)QÑ´Ó¥[«}ªþxÉ•˜çj£g†ä Ó5ÌiÚÅÆ–/EºBEå»[ȵ®ÞzýsZ6~/¹´ÑàÒÛLÒn­¡bÊ.­ÙÎâIÉù€Ï>”?ÓüÀ¡§iךÅïÙ4ëvšb *oU;G¹ SnmfÓu´¿…£’'hÕÁ ppÈνR–A4®åC1mŠ0«“КBw·ºv“¨ÿÂ$¶V go},‰(2:‡Qó?Rzý3Å^JÒüB× 6ÖÃìš[+Û&Ã,E¶Þ­ï\4šõä–še¸1Æ4ÒÍo$`†É`Ù$’#ÐUíCÆz¦¡i¶Ö×lÂášÖ†IGGs““OOÇõ_ ¿¯Ìé¥C»‚þæëI¶³ƒHÔ’m£*e‹vÒx÷õ§Ç§iwÛ5;+;+É!G…`··òฉ(6°åNXôéé\–¯âÍCY´û,ÑZAIæÊ-¡Øfï?'&£‡Ä÷ößÙë À‘Ø«¬q„;_~CòH>ÞØ©¶Ÿ×b¯ý|Êú…Þ™sä^ÃåJÊ$*ÊzW‚>•WuO©j³j“Å$©KK QB¤" èI=ÏRj–êMºÕê7SmÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€:] Çidnv“,„å•K0ã{f´ò;¸Þ £‘£aÈ’&Qù‘Ö¹{-@Û/–Ù)œŒv«rêÛ—‚ÍÛ#Rtkx—Q¤þÎv¦{œ‘ŸÒµ“Q½6ðÜ<°•“fäÃ;½ý+›·¸{YLƒ-»ï_z²/-•)Û‚{àc§â˜½¼ž"Š A/ï à’?¿­t·:ä–/‘íu V çaÙyŒúuÆxÕ¸•®¾Ò$R ŽÃ¿Ï­k¦¯lÈæX¶3²)MÛ‡¡#¨äןŒ„Ü“JëÈörÊ´£ EÉFWÝö$ñDqȰÞáDå¼¹ ÿ‚~˜®z7Ĩ}ÅXÔõ/¶EbOº¾þµF6ýâýEtá£8ÓJ{œXùÓyJžÇ£iÓméÅdN¥¯óÛ5£§¶Û<ãµgÝrIõ®“ˆ³p£Êäã»cÿfã=«¸epO&º‹DVxœ¯­eÚÄ'ic#ƒ\Χ¥Ëc;HŠJžµÚé°5ØzÕBÕ'…Ñ”tâ€<öËVhço5ÓØëi"€Ä{šáµ«)l®\Jç5J+ùbëâHn“†++PÒÂÈÙî+šÒ5™DªŒI½u&í3““ï@«,öÃeEOeqæJÀqš´©Š©%«Û7™#¯  ¨P§RrjIAKÚ¨Ú߉J+`5Y¾œöÆ€0¯_Ìm£ïUÛ(ö¨öQa3Mæv­q±FòL±SÐT:TdÝ;sQ]HK¶jþš  =Íe_øRôfø_ãÃÕ~g©·üŠpײè"¶´ïø÷_¥b·üŠpÿײè"¶´ïø÷_¥U?…Wã~¬»EU™…eëñìßJÔ¬½cþ=›é@í?ä[þ½Ûú×IcŒž•ÞZÈ·ý{·õ®´¿sh¶ /8"¹ÝLÉ®—S¹igP£kœÔ l’(4f’º{ŸZÚé6·CN×.|ë5¸{ˆ ù1±ÎAýÑÀÏ&¥è®5½Žg4fºK}.[Ÿ:Ò?ØßiLHÒ|Ä®æ7=µPÃ×R[«‰íï¸KFùÍÜ1ÐŒç¨nßׯù×úôÿ3+4f’­i±ZÏ©[C{$‘ÛI Y2('äÇÒšWÐMÛR¶hÍlC¡½Õa¿y#MÌgjz±†h—D–[‹h¢ŽÞÙMŠ\Ë+NÅq˹#‚r8òF*o×úëþC¶¶þº™š3Z“x~î(e'µž·+$R1Æ_a+•ò1K/‡5%Ê!Bl¾Ý’Ç,g>÷lz÷§ý_p_×ÞefŒÒV–¦Ç«ë–¶´Š“ ‹¸RxÈ>ž”š3[Pøjõ4ÍJïP²¿´°«Æe£Wbê¸;—ž “¤^_Å}|ïo Hªì˜$ Œü½)ÌÍNj’H<ç>½Y ‹T,bi¯Bg<明³H‡djÅ9&¶glÄWn8¬È›ì챑ÀkE˜9­¤¿Ãä°9#¹”vYÕp}kMMÁÕp=hI—8•ÓhvÃË2°®~(¼ç‡9®ÒÂ’…$Pw%TX’qƒšÙÔä)­aľlÙô ÛÀR]í÷ia}ú‚ûgùU«’±E€yÅW±MÒZÊ¿ð¥èÍð¿Ç‡ªüÏRùáÿ¯TÿÐEmißñî¿JÅùáÿ¯TÿÐEmißñî¿Jª "¯ÆýYvŠ(«3 ËÖ?ãÙ¾•©YzÇü{7Ò€)ÚÈ·ý{·õ¯’ç{Œ öOùãÿ¯vþµâñ€õÇzHl{Ÿ” µ;qŒ UGAW­I‘@ÎiˆšÖ6irz•®Š:‚«Å®?½íVPZ± ÎidlŒŽ´ŠÃaã¯ZiJ«pq5Amò¡oçS]°c­DÛ~”$KæJôéR2æ`{RZ‹“×µ:GP23ô »@5EUƒä±Çz²KHÀ·JŠiçGR—É›#'žµÄjú‚Ç ò 0­­gP‰'*?ZóýNð^\’¹Æx I¸sÏz/Læ§kvH”ž„TRFËaš¬zÒ€Xqš1Í(%Oz×Òm†ñ#€85fòCü'–à ­ewˆ àïÅYˆý«P‰1À=è£ðü"ÑUß«s]J¼d¨^zÖm¥ºyxlpµ(“gœzЗž@eÆ=q-l;‘Åt¯#,EÈùjâuøäº—æn{¼PnøUar“ÜÃ5¾–$ ¸x¾mö‘žêÍö¨ÞX¢´¸iÀòÞxgIî$ðówô ÁÅ]ðõ´>Ó-®”w°D ÛÏ#¥\ºÐ´Ëù…ÄÑ;1URRwEuS•Ü€l{æ’Ülæõféì¯#¿ Ás¥¢[¸¢Î€0bq #t Š¼Þ Ô~ËcxÆÒ +Ò=Ç’ó$C#j1V8ÎXðÆ+Tø{LišW†Iˆ9’âGÛ†åŽÑ¸Å$ÞÓ&Þ»³¼kq"£ë” Ž˜Ç_SBÑ,ê·a£Þ^DªÏ*†èHŒ×;6¹®Z5Ñ™´éÒ8f“d.¦DrF\í#žsí[?`Ô®Qíõ ËìåFIbŽÍãfR1€ÞiÇåV&Ò,g‰`Ü'"“ça¹T’£¯É  ‹Ívþïn"ŽÛì63¤£†ódÈRJœàcxÀÁÎ;S¿uÞÇ{qme21Á%¤ŒØßµXß½Ï.0N+^}N¸¾²Ûî›*Çç`¬Wî–Pv±‰ žÒæyXe‘ßøžæF)óù o“ËŽ”€¾&“å½¹´‰æ¶‚ð¼L|²˜Â·(FAÉ®«OÿgΡ%³ÈܳÆÊc§,sõãéU­ô=*ȇe®$•¤$IÛ·Nv޾”‹¤ÏaÅ£ÜÇn„åÅÒËsô ™Ð=:S‘â ©âÔncµ1Á8K,Nn;§#k`Œ¯·O4íOÄ¥…ãYà \ÏoÍ/•e3‰‹…]…¼¾«ÏãZçF†î´Ö+‰æEŽY"Vˆ2«\ Ä©õ9¡ô :C 4sï‰v,‹s(r¹Îƒe†{i!™7ºÞ®·w?fûÁÔ6¡&‰ËæEC¸Àp_¦;u­mþâîÚä]ˆ¼ûiÞh ØÁIÆMNúU”+492Ì“¿ÌܺciëÛhã§ŸÙ6^fÿ$†óÆC·ú»IëéÛ¥?¯/ø!ý~ð&ÛXÕßٟj”êqùð\w, 1Ϫà¨ú­mnj/l ¶"ÛOŠîcp™wv©c…?1Ï^•¿iom¼P(Ž(¼”îU?»“ÏaÞªÍáÍ*â8KRV„*®3è­ƒófÍÿ®ÿðúüŒÕñâòV»’ V‡Ì·ÀäÈ6ݼ6Þr˜ÏR~k«È#»†š Т_³I ÚavÈG9‚9È ÖôþÓ.¦yn yK6<Îȹ;PªqÆ@[èm´‹"C#H² CË<’6à¥G,Äô$c¥‚Cº¿Ô,£¾º6ˆÖHb‰rΉÃc _ÅjMç¶½–ÛÊe-å`ù€Æzô©×FߨòGhî~a0’hÀäáSÌP¼ú~U0±šêÆKmZX.•ÈÿSB00@ûìzZc3µ]WS·Ô.ã²û'•if·N³#“%òxN¸=j³ø’öHî5"·}´‘G$ró_xBH9ÀÆñÆqÚ´/<7g¨êÒ^Þ‘‡ÉÈ0¬ÄîÚÀ0;ºŽ*ĺ›=êÝÉl  ©áØ+û¤¨;XŽÄƒŠKÌOÈ÷ԯÚT´Óc±·i&¼v2Dì—( »$þ•.‘¨ßêºÔwÍVÒiöóI£?,_;Nàñ×8·“eë4pm‘L¤ìÖ0gïÜôíPÊ/!í#òg¶ˆEù’`÷CÃx±4.Ÿ×øú‡ˆ%éjí r´@»dŽeQžäg#Þ±!Õõ;E¼½’T¹S}$Fbvt&rƒq KÙBƒÆ+mtûëŸÝê—V—6ùW ³Äw«S»Ìn„tÅ8èc¬Û’·D™PÊû Îr8S‘œ€hþ¿!™ëš¼ÐÁŠ(®%½û:Ï=œ±£§–_pŠ·luíOÒu½R{»%½[CÓÏ£+#ÄH'%ŽAÚ{ qÖ¶"Ò,áH$¯äKçFeä!°W9bIàž©¤ØÆa)<—‘ãùÛ†|î={äÓ…ª^ϧëÚ„öÂ?8ÛZF¾`%Fùr@ œgÖºkq:À‚åãy€ùÚ4*¤ûI™ªð韺ÿF?º#_Þ¿ÝF  óÎgŸSO¹‡W{†k[û(¡8Ú’Y³°ú°”gò¥ÒÃësk:Ü÷q$/§¤WsÚǾ-—»“‡²úc54楨G§Ãh–°ÝÏ ²Êò«2/–ÁP<“ëÀõ­ˆô«8ŒL°á¢™çC¹¸‘ó¸õï¸ñïPËáý2khmÚÝ‚BXÆRWF]Ç-óyÅeZxŽòêæÁåHm-.~w…äHI Á9Îk_\Šöm-ÒÀ¿š] Ü#²n‚±èHÎQM“@Ó¤1¨…TD‹+ˆ×oÝ>^v’=H©`Ò­áÑ¡Ò÷H`Ž%+##=Ô‚? u9«VÔµ.öÞÙovÛjr^m›Ë ¥“ÍV9ä‘÷½³SÞÉouá˜gµmB9Ë›h¯¦V—Ù‡*ÿ6=Iàq[¢Øì’†Þ3¹V ^"®T‚zžüÓÓI±Ž XÜ,V¯æB ‘µ°yëÏS×=sG÷zæ‹}§hèñÏö”Xâžv%•”üæNrÙ1Žx¥–;›/Úî–álîĈ?Òž@ï·pàÁ\þ¯q¤ØÝ¼ï<ÚeEv,Ùœ®~\xÇ4È4[ {ãz‘H×6IÂg®Ðąϰz‹ÐËÒìDšÎ¢a»¿û$ öP¯{,›¤ 30ÜÇe@ǽ?ÿi·Ô5;·—tm‘Æ÷ 8T`@"FùŽJž­tÓ­c¶žÝ#+ìï À–c–9ÎGáÒ›a¥Úi¢O²ÆÁ¥ »É#H펙f$ŸÎ„3–´¾¼ôs;Þa$9㨨ˆµom,«om’X®®L,jèû@À`P¸ä•³m¡iÖ» p¹d›Ï $Îí¿nÜ’Ä“òñÍ6oi³§–ðËå—whÖâEW,Û›r†Ã{ŠHoúþ¾ãÓT¼’Ac§Ego+Íw#I"3&Ô—oÝ bH':ÔGĺ´¶_k…,•!Óc¾š7‰}Û²ªC|¼/pzÖ–©á˜ï!Š;7Š×d’H\¬ŒÙs–ÚË"‘“ž9ÕjßÃú|d1´ŠmÍÙ˜‚ñ¨8¼y´-¿¯ë°uþ»™Rxšõõ‡‚ÖѤ·†xát[Y]˜0R[ÌQ±vîèzàôâ¡–úûR¿Ò®ŸìÉeý¦ñGFó2‹"ä¶qÎô溢؛å¼È“¹1Ìè Ê piƒ@ÓWPË,âC(Ä®y-³;sÉ禺 ÞÌÌÕµ)¬5[Ãk ¸œAj«,ŠOß™“œ:ã­V¸ÔuiîílþÑo ä:—ò$oåH¦q”ÞqÆî£5Ñ\iVWS<ÓCºG†;ˆÈFÞ½f9¨îtM>ïÍó`mÒʳ3$®¼(PÀ‚ œ qŠHo¯õÐÆ—Äz€Ödµ†ÛΊÞxíåT´™‹î YÃŒ¢»898zS“_ÔæÞà­°°žî[eŒ#@@ÿ1mØä¡ãúÖ¿ö%€¼KµŽU™vå’y>ѸÃ÷³YÑx\.¾5'¸O-%y’‘Ôn`F[.TœÈPI  ûOê3XÜ^5˜0ý†K¨ÏÙfceÎÜ>Aê¸è~µÓéæìÙ£^É“79†2‹ƒÛ›ùÕh¼?¦ÃÄ1à †á7‹Ï¦ÓÔ*îÂÿÀ@©áÓã‡RšõX—’„/eU,Gþ„iˆÎƒíQøÊhå½–X^ÏÌHNGóã€:ŸsÍRÔçÔ-|I¨]Xµ® Ó£’Dï¤8·¿'?Jé>ÉÛ~Ù³ý#Ëò·äýÜçéÖ©ßh:v¥sö‹¨Ü ±3ªº‚H  €Ã$ðAëK¢þ»«ù~†Lž'“ûNÍ`x¥¶Ò7‹ìÒnˆ²næ\ìÏO—Á¨!ñF£„w—ÑÚÊ“ØIyÀŒ…JíùX–9ûÞ:t­ÖÐ4Ö¾ûaĻĘYœ!p0 ;IÇ|T‰£ié‹e)-o³mŒ©Éç;GZ?¯ëæ%¹“¥}¿þ«£¨Ilò›Hû:2¨ߎIÏ×ô«ZÅþ£ýµ¦žmU¤‚i™®#gf܆Îî¼ý(ÿ„_MDÛ Ê™x™‹LòecmÊ£q8ì+N[+y®RâHó*#F­’0­ÃñÚ({iæ5¾§7‰¯¡³’æö+y´ï·Ä°+!ì6IÏQÏø§]k𵇛mp,ží’"’8ßb‡FC)lœg9ÈϵmÇ£ØF¨«l¥Rß쪬K+û¤ÏNüÔ0øwK‚'-˜«²1/+±ùå$”ô¿õývOëËþ š5ÍLJtⶇPûgÙ„ÛE+ÌÝ·vsŽ1»¯zÕѯ濵—í Ïï†<íb§¨Ï8\nÎPÝ:WO¤\½Êá¦YšHšE p2qÛš«'†t¹|½ÑN<¸„eÔ«”œ7Ì9=sVm4«{;Ù.!A Œ*"nÀ÷Õ?ëóõùñ}²?ÏÞÉ$rYù‘Äà ßÀëõ<ý*-W¾×Vú$6¯mû‡’!¼™A9u‘³Œçœús¶öVò]5Ë!óš# pÄ™Î8>½úÔvÚ]•œ±Éo£„@»XýÀrç§žO­.–þºïuýlSð̲Éá«Y&šI¥ÃæI,Øb95Ÿ§x†ûeŒúŸÙ>Ï{ló¡… [T1 –9=xéÒºk8,íÚÝ<¸—;W$ã'=þµƒƒlàÒÍ%8İÉ;l¦AuU,Bn~´u`Uµ¹Õ-m¬Ò×ìÉs÷óˆÙ¹Ê¼0Ç yéÒŸˆõ%°šâå-X¶˜uhÊî6Xç¨äc¿ÒIeo-Äs¼y’8Ú49# ØÈÇü~U\èšq€Bmÿv-M ÛýQþ¾ÝzûÑý~ðyÿ[Á0f×5ËFº36"ZG Òl…ÔÈŽHÀˤ`óÎ}«®ªSi3‰Ä°nÆ‘Ió°ÜªIQ׌dÕÚbAERQEQEQEQEV/‹äRÕëÖOýÖÕcx³þE=Sþ½¤ÿÐMx¹?èö¨´»i…ɹðjP7[ÆzètØmÚ2iˆXå[ÀËSá¸xÇ'CÐæ±cw´ÕH9ÃÚhASócŠtí•äìOj’í7Û¹æ³`ºhIûV’L%‹#§JK$ÙV$éZŠE׊͉w0ÇÖ­ÌÞLs“@O33mj¿“æ!\õ¨ÙØäúÔ–Òá°hRÑÎ Ó“U •DoÞœ ×Os6õ1“kž½·Ü+(ë×-œdÏ òk°‡äsÒ¹Ý' Ûˆâ¶è°sÒ€35YÃÌTPZF@ÝŽ ªÓ³Ip{äÖš©ŽØ: ξ—tÛ ¹iÈóT|뱑Æki" w¬«ÿ ^Œß üxz¯ÌïßþE8ëÕ?ô[Zwü{¯Ò±_þE8ëÕ?ô[Zwü{¯ÒªŸÂˆ«ñ¿V]¢Š*̲õøöo¥jV^±ÿÍô  vŸò-Çÿ^íýkÆ[°ìÖŸò-Çÿ^íýkÅÐy„äw¤†ÆNg“Íjé‘6Ýä`b¨à3ýkfÞ2¶áG¥1Æå˜ŸåVãÏ5Nñ…€\ÚXI}à:;vE»‚8§ƒqÀÞ‡ cÓñ®tj\b9\çÒ—A½Î&ËÄi©x¯MuxEµÀ™Í'\Ø\÷Øä€zp:æ­é®ÖÀ]cûR™§™ ’K²öιb(r ØÒº ´ÛYµ[âvËl \wxöªh0¥ü7wíã@I….$R±’1FN æŽÂ9û/¦¥â½6uÕá×dK4papßc’éÀëšîj„úm´×ö×ÃåšÙ\FNàÏíFo=–“moyrn.Q?y+9mÍÔòy"Ÿ@ê_®kPŽ}Wijéÿnºµ‚ÚÍe_³Jc-#3 ’:·§Nk¤Ü¿Þejz¶¥r·?k¹µœFai-¤ ] ÎÓxýG­K…¢_M>¡ ßÈ}©YIÉÚ<lß_vu‰k¤ˆu¨%UŽ; _"Ñd’ØÜOÐ(mn_ïΩ¾ßÖ¢BÑI¹¼?:7/÷‡çHbÑI¹¼?:7/÷‡ç@ E&åþðüèÜ¿ÞsÚñ¾‡XÑåKùÚKÄˆÛÆ»CeX’ÍÔôp>µ_Ķ>mݬ·º„7·óS쪑¢Œ»… ŽôêEo^ØÁ%£Ë#k86‘ËF·&‘ì “V‡QiË- .FЂN1œü£½ õ¿Èã¼Aywo¨jj—:‘±Eöym¤o*ܑɘ¿Þ9 òúWwn‰pl¨;—¡÷{á»[Û‹©íä v¹†$Øç ‘ÇVÌkQ¬iµQUôŽ‚ê>ŠMËýáùѹ¼?:-›—ûÃó£rÿx~t´Rn_ïÎËýáùÐÑI¹¼?:7/÷‡ç@ E&åþðüèÜ¿Þ-›—ûÃó£rÿx~t´Rn_ïÎËýáùÐÑI¹¼?:7/÷‡ç@ E&åþðüèÜ¿Þ-›—ûÃó£rÿx~t´Rn_ïÎËýáùÐÑI¹¼?:7/÷‡ç@ E&åþðüèÜ¿Þ-›—ûÃó£rÿx~t´Rn_ïÎËýáùÐÑI¹¼?:7/÷‡ç@ E&åþðüèÜ¿Þ-›—ûÃó£rÿx~t´Rn_ïÎËýáùÐÑI¹¼?:7/÷‡ç@ E&åþðüèÜ¿Þ-›—ûÃó£rÿx~t´Rn_ïÎËýáùÐÑI¹¼?:7/÷‡ç@ E&åþðüèÜ¿Þ-›—ûÃó£rÿx~t´Rn_ïÎËýáùÐÑI¹¼?:7/÷‡ç@ E&åþðüèÜ¿Þ-qóê×v^5ºš[†þÊŒCm*3|±³‚Uý8Sþðô®¿rÿx~ušÚ-„’j&uó“P+çG!~U ü¿:Àѵ‹¹u½Fòîë˲žÌ\Û$¤ìŠ5fPÄ{Œ1úÓì¼_(}@]ùWÛYý­$‚ÞX7Wg=°G³w é÷“;Ë»kÚ3° 哟®¯‡míÍÌÓ]]ê/%©¶òî]9®ÐB¯_SGOëÏþuþ¼¿à”$×µ»ŒßG`Ë5”×H‘+ƒE)bß7Þê¨æÖµ5²hµ8¬fŽóM–æ/%Ú ”`XäÝAŸáë»­A~Ø/ಎÎ[e[«˜¤q¿ ³<:±'¥oÜhW1Û£Í0ZÉj»XrŽ¡I„‚©µ¿óŸåù5í~÷G…n¬Zî8 ³@-f“~;‚¤ì–Í2;½BûÅpÉeÏ<‰"ftçïeHÏÌyu©dðý±žÖx/n­¥·m÷BëûÈÇ![ þ˜<Ò[ëýoÿom?­¿à™Vú´¶°\Eckn·W:¼¶Ñîݳ=K·9<ÀÇáR\ø‹Q±±Õbž+VÔ,L[]¤Yã9ç#=«FOØÉk4>têdº7k*¸‡ºœ<õ¦Â5dÖVÒÜÜÊ÷n=ÄŽ¦G*A^q€1€(^~_§ü½ÿ®ìv—¨jWºÓ5!lÒÅ N’Û+*²±#XœWÖ«Üè|k§‡¿‘í§Šr¶ê»Qv…Ƽy<ŸÀ Ö[V“R7$ \»T’=óóôMcú­ûHÂ[eu@ÚCã9ü…  ˆd‡UžÊâ7º‚Öc+yRÀ…È‹· Æüwä{VÍ-ÏÂÆ–y^Y^ÅËI#nf8=I®žÒÕmReûTóy²4™šMÅsü+裰¬}VÂ3À×vîÏ6®ª\‚Ä`õÆ)-¾áõ<†6\u¿§»€ÇÍFÃÌqÚº>2!<ñLFuí³M9u8"£µ¾h_Ë•²­kAùŸÐV»l-î7-h\:y‘õ”–—xùj§§]ev±âŸ:ù2†Áæ€6•þe>õ<ÌdÁBÒ_0§ëZ[2ñ@vïà‡ša!ªhâÜH摬ÈRÛ¹ÅU•†N:ÌžA4øëŠ·paÉ=+.Ý'Þï@— ,>æŸz #}*;,ä?5)€LÖ€3í“|ày«÷Ó*Ä#èj…£•”ž8¨î¦2ÌÀ¦hk¾}þõ£4 È‰ÞªØÄFÑsQ]Oå^+c;sÆk:±r§$º¦kBJc)lšüÏPù¡ÿ¯TÿÐEmißñî¿JǸO+à s¶ÝW>¸Q[wü{¯Òª ÑI“Q§&ÑvŠ(ª +/XÿfúV¥eëñìßJ§iÿ"ÜõîßÖ¼nUÇ8¯d´ÿ‘n?ú÷oë^8¼J’`Èk¡†,Â9¬x-ÿ|ôÍt0ÿ«Ä1 qÏJ‘×*éNT†=)ÌÈÅU …éÈ8¥›  â'aßÖ™(ù0zP}Ęc­X´=Ï¥Q¹o.~:bÝ…@  .|ü«©*ÅdIàþšŸt±úÖ~©¨˜­ö+rh5;ñ/Ês^{­^ ¤dìµkÞê\m–äöÍr7s %$gÖ€ c“Å Á¤ëÒ•œ€:б»ŒÓHÁ­m*Y0H?…HtyÁ$'õ  ¡ÈÍO´Œr±–ãµuZ7…\=É?L×_i¡ÛAÈ£_L‘@ey?+ bµ­<#w)Á õÅw«fˆÄ(Áž*äví··µrxF8ÀiM\_Çʦs]j@ŒMhÃe@BŒÐ‡ð™Ú*ÄÕ-<¤+·šõ9mÕbÀ®#Ä6¸,ÀP®éñĺM‚‹xžV·.L“(Çlž¥yÆÉë€l7Ùþm±Y¸ÍÛ ýìvö_ÌõÀÌví*Õwc6R»ºò½³ïèzõÁòy¹uñ¤3×ìÿ6ج\fí†~ö;{/æzàdo³üÛb²=q›¶ûØíì¿™ëŸ.BòiÄÎz:,==¾ÏómŠÈõÆnØgïc·²þg®Fû?Ͷ+#×»aŸ½ŽÞËùž¸ò©ä ÍR´\¹sÞ‹Ïbo³üÛb²=q›¶ûØí쿙둾ÏómŠÈõÆnØgïc·²þg®|ª/ºE=ð9¨°\õ&û?Ͷ+#×»aŸ½ŽÞËùž¸ìÿ6ج\fí†~ö;{/æzàgËSk©ïIÓÒ‹ÏSo³üÛb²=q›¶ûØí쿙둾ÏómŠÈõÆnØgïc·²þg®|ùÈÉç­gOÜÄqE‚ç´·Ùþm±Y¸ÍÛ ýìvö_ÌõÀÈßgù¶Ådzã7l3÷±ÛÙ3×>AdäÂWž*êœs“Ò‹ÏRo³üÛb²=q›¶ûØí쿙둾ÏómŠÈõÆnØgïc·²þg®|¨?=ñS+’8úÑ`¹éíö›lVG®3vÃ?{½—ó=p27Ùþm±Y¸ÍÛ ýìvö_ÌõÀÏ”ÈFỊ0ÄÑ`¹éíö›lVG®3vÃ?{½—ó=p27Ùþm±Y¸ÍÛ ýìvö_ÌõÀÏ—Ë€£Ú¡k‘ ž¬ßgù¶Ådzã7l3÷±ÛÙ3×#}ŸæÛ‘ëŒÝ°ÏÞÇoeüÏ\ ù4Â[´ÂÊ­éÚPS™(°\ôæû?Ͷ+#×»aŸ½ŽÞËùž¸ìÿ6ج\fí†~ö;{/æzàgŽO-åÀÛY÷r°\ôû?Ͷ+#×»aŸ½ŽÞËùž¸ìÿ6ج\fí†~ö;{/æzàgÎË(ƒÖ§€eÕ&‹Îõ¾ÏómŠÈõÆnØgïc·²þg®Fû?Ͷ+#×»aŸ½ŽÞËùž¸ådÊ8ôÇF7uvëE‚çpßgù¶Ådzã7l3÷±ÛÙ3×#}ŸæÛ‘ëŒÝ°ÏÞÇoeüÏ\ ùÅáÆâN)±¯™n{Ñ`¹é-ö›lVG®3vÃ?{½—ó=p27Ùþm±Y¸ÍÛ ýìvö_ÌõÀÏ‘]Z8;”*¼w¯)'Ò‹Ïeo³üÛb²=q›¶ûØí쿙둾ÏómŠÈõÆnØgïc·²þg®|AU®o‹W9®€9H€ÏN1E‚ç§·Ùþm±Y¸ÍÛ ýìvö_ÌõÀÈßgù¶Ådzã7l3÷±ÛÙ3×>V`[8ªÒ¹U ·8¢Ás×[ìÿ6ج\fí†~ö;{/æzàdo³üÛb²=q›¶ûØí쿙럼»x¢s¿©®a¥gº$œÑ`¹õ}ŸæÛ‘ëŒÝ°ÏÞÇoeüÏ\ ö›lVG®3vÃ?{½—ó=p3óîš$]N«‘شēҋÏvo³üÛb²=q›¶ûØí쿙둾ÏómŠÈõÆnØgïc·²þg®|Z7'·jÐŽ ŒQ`¹ë-ö›lVG®3vÃ?{½—ó=p27Ùþm±Y¸ÍÛ ýìvö_ÌõÀÏ’1).Üû浬f3(RyX.z+}ŸæÛ‘ëŒÝ°ÏÞÇoeüÏ\ ö›lVG®3vÃ?{½—ó=p3ÈmÈ=c8$cÒ‹α¾ÏómŠÈõÆnØgïc·²þg®Fû?Ͷ+#×»aŸ½ŽÞËùž¸åŠaGæE*žÝ8¢Ás¨o³üÛb²=q›¶ûØí쿙둾ÏómŠÈõÆnØgïc·²þg®yÅb@ç€{R¨äÑ`¹Ñ7Ùþm±Y¸ÍÛ ýìvö_ÌõÀÈßgù¶Ådzã7l3÷±ÛÙ3×8$ ¸ïÒ e;±œwÅ +}ŸæÛ‘ëŒÝ°ÏÞÇoeüÏ\ ö›lVG®3vÃ?{½—ó=p3ɼ;É1‘Ÿj‰šHÇÌ¿• ‹}ŸæÛ‘ëŒÝ°ÏÞÇoeüÏ\ ö›lVG®3vÃ?{½—ó=p3ÅÅpC`ƒW|á·“E‚çNßgù¶Ådzã7l3÷±ÛÙ3×#}ŸæÛ‘ëŒÝ°ÏÞÇoeüÏ\ òîêFzÍ5Y[Œ€=h°\ê›ìÿ6ج\fí†~ö;{/æzàdo³üÛb²=q›¶ûØíì¿™ëžc#i$ÔHG Æ‹α¾ÏómŠÈõÆnØgïc·²þg®Fû?Ͷ+#×»aŸ½ŽÞËùž¸ä œõÍZI—×ðõ¢Ás¥o³üÛb²=q›¶ûØí쿙둾ÏómŠÈõÆnØgïc·²þg®yŸ8(È$ÔRË#ãjÑ`¹Õ·Ùþm±Y¸ÍÛ ýìvö_ÌõÀÈßgù¶Ådzã7l3÷±ÛÙ3×<Šá°{S $ŸJ,;&û?Ͷ+#×»aŸ½ŽÞËùž¸ìÿ6ج\fí†~ö;{/æzàgˆhÉà·J_#pûÇX.vÍö›lVG®3vÃ?{½—ó=p27Ùþm±Y¸ÍÛ ýìvö_ÌõÀÏ ¶ É‚zñNû$jç#"‹Îá¾ÏómŠÈõÆnØgïc·²þg®Fû?Ͷ+#×»aŸ½ŽÞËùž¸â|•^ƒÚ˜W-ÈÅ Ë}ŸæÛ‘ëŒÝ°ÏÞÇoeüÏ\ ö›lVG®3vÃ?{½—ó=p3ÅÇv A;6Óü¨°\ïìÿ6ج\fí†~ö;{/æzàdo³üÛb²=q›¶ûØíì¿™ëŸ0xó &ªÞ•N;â‹ÏYo³üÛb²=q›¶ûØí쿙둾ÏómŠÈõÆnØgïc·²þg®|ŽÒu,q\T“UúQ`¹ë ö›lVG®3vÃ?{½—ó=p27Ùþm±Y¸ÍÛ ýìvö_ÌõÀφÝF gÚ³^7GçœÑ`¹ô#}ŸæÛ‘ëŒÝ°ÏÞÇoeüÏ\ ö›lVG®3vÃ?{½—ó=p3ó—•’HÎsÒ§S*gŠ,>†o³üÛb²=q›¶ûØí쿙둾ÏómŠÈõÆnØgïc·²þg®~†åÑðÄñÞ´g¼ß‚Kv¢ÁsÛÛìÿ6ج\fí†~ö;{/æzàdo³üÛb²=q›¶ûØíì¿™ëŸ Ó““žõ9³VlþX.{k}ŸæÛ‘ëŒÝ°ÏÞÇoeüÏ\ ö›lVG®3vÃ?{½—ó=p3âæ×7´F9qÓ4X.{k}ŸæÛ‘ëŒÝ°ÏÞÇoeüÏ\ ö›lVG®3vÃ?{½—ó=p3âþ\‘HpN XK‰TOãE‚ç°7Ùþm±Y¸ÍÛ ýìvö_ÌõÀÈßgù¶Ådzã7l3÷±ÛÙ3×>MËHv·J«¨ ýºÑ`¹ìR=¬jÌRÄ(Î ^0ÅŒñÇð~g®ik‘Ät-E’$Uû+2:;0`wc’1ÐÁ=~„øÎƒ:R$à3îãð&½Šõ⓸m½tÈÆvõù[¾=ýO^ƒ99óþó“ÊæÞÍ{SÎß‚<†ß縈z ìm6ÇÒ¸Ý//r3]„¿¹}Åj`I 9½«3ÄV¢[?9 Vµª$žzg5Vèùöï ^ â€8‹k’íô­¦“Í…Y°@®_P¬.sZ–7AÕTž kÁ0…”€q[v·a”ñÖ°HÂŒw©mnŒr={s@*æÎ3ײm=ù¨ ¹ÚIçÞ‘œA  ýM×Ê#88¬;Eă-ÆkWUFÇ¥dBŒ¥wph²´a±ztíT5IAmµfÁ‚Û)`zV}ü§nÔ¶k„f<ÔQÆàwç½KÛjÄTv$›¬õ  •AôÀ¬I›Ì»ÆzšÝœ•·f8àV¾÷Ô@Á{ÿ"ïý±ʵtïø÷_¥e^ÿÈ»ÿlGò­];þ=×éI »ESV^±ÿÍô­JËÖ?ãÙ¾”NÓþE¸ÿëÝ¿­y*ÆúW®X£IáèQFY  ~k‰ƒÁš´o¹–ô’ÊЄŸçVã!W“ÐVŸü#Z——·ÊLÿ¾(Õ6àÇsýñLF|nq‘R‚Yz º¾Ô‚àÆŸƒŠUðö¦;›Åe9ÉéÒ ™ö¡ÖÑðÞ¨X‘ßb¢ŸÂºœ¨B¤`û¸ *òo™Û“ÍGhB=ÿJé¥ð&°á° çÖJ’ÇÁ½³fD€öd  9äX¡#§Äê÷þYr#¥zÅç‚õ;ˆÊ¢D Þ¹ ï„ º‘ˆ’Ì)õ˜ÿ…y=ÅËÌܓɪë’µ¾•ëqüÖ—šÑ›óÔÿ…iZü*Ö-ˆÀ´ãÒ_þµy-—‡®î[æB£ÔÖýŸ…#Œ†•‰>Õééà ``²Ûþõªoø@õ<ˆ¿ (‡·±Š%P‘ô«M`gËØ/uE9Ûÿ¶•/ü!š°\‡þþP3ilª7ÑÛ[@±d‘Ó©4£ÁºÈ<,÷ò­Åá}]!ØË>ÒPÜP¬…ýj¤`0yô®‡þ=L’Z8ü SG„50ÙÙýö(«)t5~ †R9ô­/øE5"9Hÿï±O>Ô±ÄiŸ÷ÅR’èygwó®S\}èǮѼ1ª(;’?ûìW7®éPÄÛ£þ(Ò-Ûþ%V«»­”§ºò½³ïèzõÁòyø þëíÿ«UÝÖÊSÝy^Ù÷ô=zŒàùEáRCbÆû¤œ žGùIÍTµëÍZlLEGV˜àJ BœŠœ .1ùUY›thX›vI©€\ |Q÷ÖGN”¾w7T§àS€?\Sá;‰õ ä^æ©0f,Ý€õ«Ò+»^• ñ°zZ«dù^•¦˜dÖ>ž¥—=kqce^NqÍ0GÆ*\aGj„¹Èuô©˜úÐYFeÅL?v3ÚªÈê’dš@$¸ .q@ ¹œ³|¼ÒÚXËq"–5~ÛOƒIùVˆÛàqž(°Á´}2}qN.'5]J™ˆ=hfœúàUyW“Í(ˇŠdƒ'¯Z–ßÉæ¯ÅÔßÜsŠ¥lÜÛ׊Ø)ˆ‡¥!Üñd0éTÙ¼¡ëVãeT Ö|Ó¯Q@·ò ç­hYG˜Ee_.nTÅnبò@Çn´Fäpp­aë/’:ô8­ÝF°aëYz„$ڰ£.åZÔ`sÏj£¢ÄvcOé[…Æyõ  ‰fúS>Á!bøÔ–.N:VÌûó@ñé’¦7µGá¯n½\xNá¶õÓ#Û×ånø÷õ=z äùŒ6jºÄ3€r7"+Ô.£Ýáy¸Æí6%Ý·ý–ïS× ÎO?ü¿~‹óg_ü¯ñ?ÉC£!k•#§zë/ÉX™áï Nq ¹Œ“Ø©®ž_ÜÜí&êm¤×AÈcZ1û0ã?J‚C™Ï®ª \»|øHú¯'ƒ.d“ÚâØ4åÞ-¶S(u^Ýk›°â—kôŠö=GáµÖ þÒ‰01þ¬ŸëY ðnåœ7öÌ@HøÐ ¬ÂX>ð§²Ã£Úº‹…—–ä«ÄqÛÉ?ãW“áÝÊg„G?ôÌÐ'muÆÓÁ?¿ }k£ÿ…suæoŒ#ÛË?ãV#ðÒøþ„ÿÀ qWÿ2w¬ÆBª29í^'€ndÿ—ØïƒUßáÅËãþ&ûfÆ€9Ý:]Ö 1ª7'uÓһko‡÷Vàí›þE5þ\¹'íðóþÁ 8¶Ëb ëK¦‚Óñë]‹ü=¸hÂ}º!ï°Óí<qjsöØ›þEsº“²[ƒÒ±ìT›Œâ½ëÁW)·í±/üš‚ÛáýÅ»îûtLÜ"€:‹ßùíˆþU«§Ǻý+3QC„ñ¶2±8ö§§Ǻý)!—h¢Šb ÎÕ#/éZ4É#0h‹MfïO‚;o²†®ÐAëGü$÷óçú×M&—œ•Ïìxº(°çü$÷óçúÑÿ =ßüùþµÑÿcÃýÑGö­ð“ÝÿÏŸë]ö­ð“ÝÿÏŸë]ö­ð“ÝÿÏŸë]ö­ð“ÝÿÏŸë]ö­ð“ÝÿÏŸë]ö9Ï–§Ëý¨J|H ô¬ë¡˜H保¼ ÅP¼%AäÐ銱çOsr!RÄÕ¦FXŸ ª¬ïw&[§\P}õÛÏ!ÇÝ0+HšyÎTýkníUX…˜"UˆÉŽ{PDðùpì=Ç¥G¦Aö‹Õ;A«O·!‡Ì}«KÃi1m˜#Ú€6<€áTT?Ú»*öàUËèšH@SŒóU-´¶ÝÍ>g9<æ¶cˆ$še½²Æ `TŽ !PÜ〠sÚœ»îØ}«oBuŠ0OzæâI.î PNO5ÖÙÚǸÝÔÖ€6’Uuбs‚{Ö™­È`x­[)„ß?^ô°˜ céA<ã¿^´Ä8Lö£#vyæ€Ço^qüéŠùo\Ò9$zþ4‘¸ Ð)c"ŒÓ]‚JŸ‚F9¨\òGá@à I–Ç=Æhf p`xëOŽKq@K„?ç§™*“;F1Pœù‡ZŠàXãJB|‡Ïj·&Kÿõªöå¶'P¿{0 Ïo¶!UUùG²ôÕß!úVÂņÉïÍIRØÇéZÑ`(ÅfÀ@nƒŠÐ ~t`zä9¨Îvc¹æœœzôÀ  ß{€y*9W ×ß´öSæuâ‰1“œÐA7B0x§ù$ ¹ã<ÔÂ2Ì@-J£Î(´«²3ëëT£¤'<Ž•~á›g'FC°  J>_^õVxÕÇ{U¿'zÔªò{ÐQÏŸy·$ñŸ¥]–u@rN+öíNH<öâ€(ݸu+T­ÜõÆzzÓžpòrsI Ä„ ó@²99ÀªÚä&ò  jíþ.jE‘ºÀ²·’2ÊËž+rÂT!–¦DBÜŽjÂ퉓øP%ôy—ŠÀ¿M²ƒÉ®Šé¼É?ZÆÔc&Eï@!”BNîí[†BGST%· 'ð¦šÚ®y  æÊ+‡$E> m\üÄÕ KöˆÂ¬ Œóo>”·¢±îd ¨Læ®ÃƒÅbê–ðuÀ ••”vÏJÕ´¸¾+O™e‡iŽõiKBÙíõ …X²ã={Uk© Æj¥½îOÍœS®˜Q]!ÉlëóÍ?*?¶uù柕vÙ°ÿtQý›÷EqÿÛ:ÇüóOÊícþy§å]‡öl?ÝfÃýÑ@öαÿ<Óò£ûgXÿžiùWaý›÷EÙ°ÿtPý³¬Ï4ü¨þÙÖ?çš~UØfÃýÑGöl?ÝÇÿlëóÍ?*?¶uù柕vÙ°ÿtQý›÷EqÿÛ:ÇüóOÊícþy§å]‡öl?ÝfÃýÑ@öαÿ<Óò£ûgXÿžiùWaý›÷EÙ°ÿtPý³¬Ï4ü¨þÙÖ?çš~UØfÃýÑGöl?ÝʥΧ¨FÐM±QÆËšël¤*¥ c…aT(À QEQEQEQEQEQEQEQEQEQEQEQEQEQEÿp×â¯õO]ìÿp×â¯õO@víÿ«UÝÖÊSÝy^Ù÷ô=zŒàù#Ü© žkÖíÛþ%V«»­”§ºò½³ïèzõÁñ ’Hä<ñI š—Ċ8æg0h€=j’]©µ!8¨â$/ËÖ˜€sÏ8ª7w%\FO»`1Ÿ­1CK $ó@§ÌU Éîk^4UU­P·¶T;‰Î}êúF}(W@T‹ÃÒ¦9eÆ(T$žzÐq’?J%`±ÔÂ"[ùSnQ0Wƒ@2 £œÔñØ–ê8úQnŸ0V¼H¸§j« š qmƒ)ÏNÔ²0N9æ‘™Àè(Œ–ÿ½lSÜ Ç5~@ªKÏf2OÇjx]ÒŒžõ§ lŒ±ü*¥´½éZ±P uë@¥•’`9'´±Ü|ÇqëQ14³§4¨bç@d.ùj±pûÙ¨W.Õ*6Îã­>åÈ_þ½PžbͰub§ºŸœÕ[hÚY‹”"DÇ^jÜk…–eûª1Í*&}(/UE.ƒV5Ê4'rV¥ãù—›j½Ò€„3Ö€e||¼óL½˜ 9úÖ,ûífV…'ƒSÞ\ -•†I44Y¹*Jºð˜Ð…õ5‹#ÉSZ,N?çdMòò:S$Æ?Ùu×s sU.W ªjÅ™D·8>µ»§Ù›gö#Ò±nˆ‚HÉëšèa»Cj¸êGZ»˸g «‹*Áö¬F¹^yÅTkÙbÊÆK@:–¨–ЕxŒ\Ú‰¯çËs×Úœñ³)’å‰=«š[o$(ЦŸd(P9õ­·8bÏϦj­Éì V’ýÒGNô›væ N} [Ò.9 ÕR@">æ²ø Â6Ý©s€=Z­ ƒ`úêaÉàûP˜ü¾Ýh^£ƒÅ3 uïOYN1@ ¿äçµlžüR†Üy¨¤çŽEH¡`Ž{š“ Å$`ŽHæÃƒÓÚ€!œž*5É´é9')Ñ&9ë@š"œJ†îöÄÏZ±7©É§Æ¥Ç^´—¥[²—âµ¶’vŒT‰jS8#Ü P„6sÇ­%¼D603Z T'8÷ÍTˆ‘'j¸IÙÐcÚ€N7qFpçÖ‘9È#zSdÞ1Ž{Ðò2Sô¤|Ò•pŠ .XûR9V‚ò:P-•aƒP‰XãƒÇZ–FÚ§žæ¢ˆþï,zžô×n1ŠÍ.cŸZRÈ ÀÇë=˜‘@rå ¨_äC“ÍY2¨$Ž+æì¼…T眚ŽîRHLü¿ZÎdrFrjYÉ-׊DäÛ½gËn¹È@Å7®r:U÷tyvÍ4 ç¥c›æ…°ý*ü‚²àYº„JÙ`k-$to“`@Î+*Ò0.\{ÐÔ%`¶ôª²;;Í=²È=½i±Äćë@li8^j9¡ ãkJ8r˜_Ï5™|®§ÊÜI>ôƒwž†R:t°´©oÇŠÒ–ÜÂö¦µ¨[SíÏZ©nÜlÓ£y¥±Ò…u ±G&›å²ºœ¹  ²YKs‘O°kM´[8‹ÈFM <‚¡vŒc4ÝÒLʼãÒ€.EóÆÞséZ’f4ǵV°·e`OZšìˆòÎxèWrfzúU­-Y[#?ZÉžo´Ü³gŒñ[Úv#‡'®(fȓҮ$á‡QÍsrê+ ‘œŸjŠ×W-pCÐzÐZX`c­*¶ÓŒÖl7ÑÉŒ6jê8p1ÍYC»¯Z 3 œþ4›Žõ,13Ϧ(€¸“;«N%,¹85šª|âs‘õ«ÈÄ.ÅKŒ6çJTŒ*<³ ƒRF¤òO^9 .Àz”Ù6ìãŽÙ© åzŒMCÐ’ÇŠ­3 ïëP‚¡'½:WO˜•êh}  s:©$p*¼q£1bzT÷Šˆ3À«5.Bdû怨Î!€í'qàVu¯+½ºç©¨µ ¼ÙÔvÍZxp(Sæ$ŸÆ²î¯š c%zÛ»xâÞ8®rÜ gfÇã¥2ÖrnAòk^`²Eœçµdjvì$F@~µOðÇ¥fÝÆŸ¥dÈ2dt®‚îf%F­a]Fw7­HïÄ29Å$èë÷±ìi¶‰ä :zæµgÒÚ%2NEAod7òsVn£Há˜É9ª w%«ílâ­E)¹[’´r8…½·=qž*•´~eÉr:Õbúoݪ }¬f8zrOé@\ƒåUlqڮάÁT‚*œçhÏLP€ÈÅRT"f#ïf®+îÀsUcC$Œs@qÃçFz>Ç&p&¬X¡dá{óZ°mÜFswvnJj„·‘O8滉!ò¤‘\~¹mä*¸ñ@ôVó[ŠõWþ)Çm½tøFvõá»ãßÔõè3“äþc÷Oùâ½bUÿŠu›o]>½xnø÷õ=z äóÿË÷è¿6uÿÌ*ÿü‘†¿Ô§Ò»(¾è®7Ã_êSé]”_tWAÈ>Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( §û†¸/ªzïgû†¸/ªzÛ·oø•Z®î¶RœnëÊöÏ¿¡ëÔgÈÌ Àë^¹nßñ*µ]Ýl¥8ÝוíŸCרΓÜ](o—“I ™—&xÛrç5µÄ€ ù-R²´Äg¥Y‚(ÃsŒÓøÌÒrAÇaS• eÎ1Í,×pÀ¸\g•%ëÊØæ€4Ä1¡9æªK«¬l Õ6ŠiF"šš\Îy€-M¬Ë(Ú§BKÛ’xf5©†HÝÆkA4x‘G±  Ko´Ï÷™­«KVSûÆ$ýju†(Ø(P=ê}¤dç§½IÒ¸=*´Œ¡ˆšcHÁ¶óÍ l6Oó Û­9PÈÞ”*3¿¯5}cL@ Š%HòzŠX31íUÍÇï;’¼@<òÇ ŠtC““íL_’lzŠ˜¨@PÊ þB¦H†ÂÝñQÇ‚s€}jgm°(¤²í™ªaZiuË‹‚Ólv¬Û.ÖRßZ¢Du»šM¡¤9©_è*²±F'§4Ù‡ï}1Mšà4 ¹=*+·Û3~Õ@NLLz¯§M‹×ý+p¸+Ö¹TÁv_·S[°Ý$јP\®W¿<Ö`È”‘ß½kHAÇ5Ÿu_Š‘ñšº…NHªpÈ‘ 'Œu¢[Üüª   3L!œp+= yd3I’OJ•!’wV|àU– qþ4rJ¶ÝØ«\϶ßn쟭ZÔa<•<šÃt‘Ž $Э½ÇµoE·^ÜÖ%´- à°äô­˜¥Úzf€51´!1Î=)c³U9¥VŽéAê3NmB$ã9=(Z0džœÖ6µx¸dCÉ⢓YRDjpƳ^)'º9$ûÐ6Ñß­ko•ÀŽ!€3O´± Q€;ŸZÜKDÚ£Ÿ_JÄyÚK““SE¤® ƒózÖÃÚ…‹9¤ˆäm"€0eI,È#8Íl麇š 3|ÔÛèXXcœqXs´7`zï#sý*t å³ùVd цö©á¸ :ñ@Šô'Šav “ÀÅær}3K ù6÷ Û·<Õ‚>e<â«Ä¤׊´0xÅ!ç9¤U”çpxüª%s““ŠJô”0žŸJƒÎUš2ÍÔ}hE`Òt«q¯Ê3Û¾*‚E‰ç¦œ(Æ =“ZwEíŠcãÓA á¨mç8:ÕyäõàŠRI`T€>µ{p±a˜çšK«¨ Èb1YßÚñ+§ñôªò±¾“Ÿ»H–1y9ë@]ê,ãŽ*˜¼B¥æ´îtøöœuÅ`ÜX8aï@²d†ô5§m8eZçg‹).jí…Ðp4±{‘ ç‚+Ÿ­n¶€J÷â·ØÎ{ÕWUiA`3é@É ·ô­;[uŠ3Å6£' Õ¶aD­fܪòÍs¶Ð›Fw]%Ó|¬pkš¸„¼Ùj4¦Ìqïé].àÊ\ŠÈ$[o\îÇAtð6Ù9Q@j°&ïJ–Àˆ·µE{p³°U<|$DŒAí@„Ír8¦˜XÏJ§aw9ïWh…²}…Hî;f¨\Î1ÐñE¬­!e©Î¸ëÖ€+ÎþT8Š[WÝÎy­$üÇ–jÅ´áb=(Ý«3¨ÃøÖÔ ÄŽZۉ¶ý mC‘^´shëž•…®[‰!=ëbDfQÍTÔ¢&Ôý(žÑmúÿ*õyWþ)Öm½tøFvõá»ãßÔõè3“äÚj•ÔÐgŽsùõ™þ)Öm½tøFvõá»ãßÔõè3“Ïÿ/ߢüÙ×ÿ0«üOòD~ÿRŸJì¢û¢¸ß ©O¥vQ}Ñ] ú(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€"Ÿîà¼Uþ©ë½Ÿîà¼Uþ©ènÝ¿âUj»ºÙJq»¯+Û>þ‡¯Qœ#†ØoF÷¯\·oø•Z®î¶RœnëÊöÏ¿¡ëÔgËL89cI Í4h¥#_j¥™Ùò óZÉl *êZª‘òÓ‰<­–ÝZvšR \ýkAvªàbˆÜc§z ¼qQ”UÎÑúT„ù“õ©a€@•±• «g¯Ö¬JÄ sMH˜°'¡  #R»}ªË¹ãÐÔ2ŒfªÍpÅ€'Ú€=ËëZ1Ç¥A§E¸—ný+E”¢ñ@¦}³)=*v`ÇÚ¢yq,9¤•›¿…\ˆ"‚Aý)’Ì'ÛÖ›•E'ô5Vi7"¨éÖ€ †?2ROLÖˆ‰‹)J­ìUøÜSØPN$ ;S& ³rÛp­fj×J‘žžô—ªÎ?Õ£rh……Aô¬ÛrÓÝsÀ=ëcx9Ç@1@¤·YAª–ÒN Àâ¶â@ǯ\Ù‰NÅg¦¤XmbAîMM4êaÈoÖ¨\Ù…þ_t‘DTç~{™8ÎÞÕ­obÔ@f Z‹(ôÇ4Ùaæ©7$1éRÜI¼å@ämÊŸÃBô:n®šå™a'Ú¸·•ãóüTÚÛñØÒ‰š ž*­ÀKpÌ@ÀÏ5Bæñ¦›l\ó@M•àqïVZeÚw¥sö2:.yÏ­X{™I Ž(a.÷1—æk“–îHŸ*HïSÛë˜<ŠèÝÎ{~DTQ¾âxϵW‚a.I#Ò¬!U'š•zœ^jlñÍB‹òïL¹¸H!Üzö  !Óp㊟íq Áa’1Ö°!¼iß ÁïW–ÿ²h\\FTmaœT]ŸJƤ„“ÞµQuçG½k¾¡ž@ÔV5Üíuså‚HúÑu;$Ôš`ÅØgÒ€.¤^\`¾´ÙfKt$°ãš.d)–ÝAYwåFy Ça@Pó"Ý·Ôh¡†qÅd[Þ‚L/ØñZÖÉÕí¢%GÍÖ¹Èg{yÁì v—è<¢qÉ®.õvNxÀÍtpêH†Z“r7;¹úW7k6Â3µ³ DàØ"€4í˜/séK=Ð~•D’¼©öªO9óÀ-ï@n&7¬È"’æà¼Ož_´H3·¹õ­Í.ÈCšËÛŽhH­ÆÅB+7QÓ%Ö¶7Iíõª:ŒäFTHàP4–ìÎqдbÛ„MiÚÀ‚ °ù5 !yÙÎp(h”C®3T¦ifcnzÕÈà7/‚sÙÔ(cœúÐ6vþB’zšK„ùr)è[fìMVøïš©0c´Ù°ˆ}œñÍgΣp‡ZÕÓHò¹uÛ]°ÎÈÝÍ[¶N¥R¼B’yŠü*X¥Þ³Ò€4·75Ü™‰²xÅCæÊ§<Ó/¤XÐ=ŒGûLÉØgùW©H¿ñN³më§Â3·¯ ßþ§¯AœŸ9° tɯF‘âfÛ×O„go^¾=ýO^ƒ9<ÿòýú/Íó ¿Äÿ$Gá¯õ)ô®Ê/º+ð×ú”úWeÝÐr¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š()þá® Å_êž»Ùþá® Å_Ꞁ6íÛþ%V«»­”§ºò½³ïèzõÁó}¹Á¯H·oø•Z®î¶RœnëÊöÏ¿¡ëÔg€ÂŽ;RCbÛÄ¡”zÕ÷Š1ÏOjÎ „ô¦Üêª:iˆµ,cnEW;ˆük:M_#šÍŸQýÞ”¼×ñDya‘Uß_T%sRNò·š– 9“ÔГêòLØäf¤…š^µZcðv‘Ž•jÞÝ•<ó@ím0êHý*äøQŽqô¨ãl0À¢iU»f€TïéJc<Ò+dޏYTNzPY\lª»C¾Þ Mx dž”˾lã@‘(‰ŠYŸýu7–ÕIÊ«Š­2áò*œåGÒ™s>ï•~•=®$t –L§ŒSàŒ\â«0y'ÀèN:Ö˜M‘b€*–<Õ˜É ÇéTó´1ïššÞQ¤žhK»‡òùãú×-©NÒÈ“Î+ Ôd lœ×.ZrÌs@ »‘,mwƒ†"¬és™m‰ÉÈëÚ¸i¼°sƒZþ¹i-KH ›M4ŒsZRÅòûÖ.‘&ÙYIÀÍo“¹O4…,-æ:¡©Å”R¹8ëŠÝÊjä`¡Í?DæÓ‘ÓŠ¹, /nMP´“ɶ :š\äPÓy²ä‘S~MÇ€i–öÛ›¿©5-ìéøé@Óºý¤¦=êýº¯”p1Y²ù÷Nì¼g5½ Ê1@lËŽ8~4<‘ÚªŒîÀéïN¸ºò`ç®8  íP$n ’j[k‰ éYÒ¤·.‚Ek鱪FIš±³e³HÝOÝ>Ð92¶}i.$ÿE+êkKNOôPyàPv²¬"z{S4¥ìù ÔÖ•Ô "•oLVI·–Û"1•4¯rÇçÛŠ—D…×,sƒÚ K9.$ÜÀ“[PÆ-cUüè5Ú3tã½pѶû²{n®‡Ä7ÛmŒ`ò}뙲ViCb€7 øTNýkONµ,3Þ °²Þ#šèm-Ñ!8#uFF cô5 Ï…8íRܾѓÐ{UU$ã#š‡ÔïÍ»ˆÂÁüµ±"¨@­TxK’phš^ êûÖø%¹ÉõÍqˆ µþÖõ®ÂÖU{pÞԲݴdý*%v¹%œñéT¤2\Þí€yæµv€àw  -Ò4ÎÜdU´œÿeÉ*Â8o˜š“ÎdpéÖ€.KÎq×½dÜÁÃ0Îjô7"QÔgÒ‡Œ¸$ –ႄ9Æ+kFPÐ0Ï'¥fj*DNùjÞ‰r¥6ŒäЗ«™TŒÊ×$’(‹Óš×¼‰¤ŒŒɼ‚iÈ9 NÒyRó“’kºÓœ=¾Xr+þÆhäŒó]œ¥c*x  ¯ö˜Eq:”cÍ®Òõ—Ëǵr7ÊZRsÍ2Å늲 ÆÖ™gŸ$‚jGgTY$ž´†æETò]æžkFÓfq0 ûÕñ •”~ išifR@ǽt ”MƒN„cŒûUÓ*È£úgh«.ÏNµs™®‚þ•­y.ȉéY–i¾BÇÖ€/ÉÐ:Ð#òíˆ+Éjr†I¶ŸZ–ò,Ä VmÚ´ زÿ`¢€æÝ¬™cµF£ í@1Þ•? œïN‰718ÅX*ЏÀÏA@]Õ`}jÌå>*©\É»¨«(ʨxÁúP[ÆÞÀv©,#Ø vªÒ?8•ZV(˜SÏ­\š`©€y¬¶-%ÁïVÀûRZÁ¶á‹z„Zà‘õ©§ÂEµzšš\ ¶zT©™·ƒÖ€l޲†`:»+~çw­q¸À¨g—t@튭’ÄöÇZ$ƒÅDY·“Ò›4û#ÛÜÐ}RëÌùwf¹‹ë±mݱZWRr[qöÍq:ýéy|µ4y;\\³rrx®ÏÂ(¸œâ¹ XÌp+ºðÒü ñ@–¯å]ã=Mtq8 “ßšæî#hçÜ8­ +¿3µX‹Lù÷tnÅ0:Õ„\£ï©B)MÇ–ÃûÆ€6Ã,ryÇ5¨Ü4çhéÓ3Jò©äúÔQ[± µWÓÔ);±šÞƒˆ:V8P$;zf¶­ñö\㚇8sToÍp±Œb®·ßæ³÷“|3ÛÞ€5áµE„.qYí?‘)ŒuïRͪB9Y‚V–ä±ÎMi²kº´´ùÂ[Œž”‘Ûï°éÉ^ñòœñÚ€4˜¬œ“Md·Z¨¬ÈÇ“Çjq™°F2hØ(ƒ°k+PÔ¸¨o/š<ƒÒ¹ùny99ôíup;‚x­ ;#¦îsUVЄãsÍjiÀ» òqÖ€7ôô„žŸÊ¥¹³Fá‹R.Øàù»Õ(n Ì„1àt å¶³3pÝ2+9ÈŽ=ѶH9«ùxm Nñ\­•܆å”d#’h«±ºûCí'‘WÈýçÿ^¹½>R·=zšê O6@OašçuXÌWAóúÕë;üYšƒÄ%@8'zË·sä3Šêô•$<¤ò}MiÉ›{O0òǧ5‡e+GŒžzÕÍRåÍœAIÊÐ:¼Øf9ÏZ¿CfLsYšt’LÁ¥'½ a ½ZÄ ä^mä5»6‚y$q\Üóù—Y¡ë[öŒL*z`PKõS¸ç¥\®Ù@Ç5µx@r[¡ËÜÍ»<÷ Í\:ôëQT6{ŠÇ¶Õ¢QßlßoZ¹µ9$íLù'Tä¼m¼Uf¸wÇ¥rîÊ©ük a¾^zÖ´çjì+·¼„¯®hCÉPZÜÓìw°f}MT³±>S;O5©¥Ü6ï+Ó Í3PÓ‚©‘Gj‹O1‚¿jÚ¹ã#Ú²ôûb—gÐТ¤mÐT€lR§¢äójlB’xïŒPN ÅÆÑŒ“ÅK "+lÿ*8£ûMîÈ=áÜëtÇ"€#¶M¡¤={R^\GD 4Û©6D±/Þöªëc$ëæHOW¶v`IéíSHp¿-H‘ùqœjŠRq@ K“Ž•eAcÓŠŠBç¿j¹%ß΀2¯[ý!G8­{Y1ÀéÞ°oOúO>µ¯lv¡IäPî þtÐ^G$ñNå ëPn;°N=è3UU»G5‰#(9®žâ%d®0+”º9»ÛÔv  &àɨ"öçùõ©þ)Öm½tøFvõá»ãßÔõè3“äºD/Qˆ#¯ò5ëR/üSÌÛzéðŒíëÃwÇ¿©ëÐg'Ÿþ_¿Eù³¯þaWøŸäˆü5þ¥>•ÙE÷Eq¾ÿRŸJì¢û¢ºAôQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEE?Ü5Áx«ýS×{?Ü5Áx«ýSÐÝ»ĪÕwu²”ãw^W¶}ý^£8>gö ÚôËvÿ‰Uªîëe)Æî¼¯lûú½Fpx°ªÏÓI ”¡´ÚµYTж"sÍ'–ƒÅ1˜Š®xÅBýy«³²ªt樱ÈÈý(¨™8ç*EµòjHTÐó©¨"€ñ/AÖ‘aRH=éàmëßšlÎI Œ 8àuëUf˜ë@•Ÿ'±¨%^;Pˆ9Í:IR1ÏO¥Gnp¤7zVO -ÐùÌäô«QçÔÔPœÞ®Å…U8÷æ€-‚§Î1UЯž}*BA&©³…‘ðh.q*z¹[!Î*ŒQïmíÞµSV;c©hz{ôFXØwâµ?åŸAëÐUöÚ wší·ž+>êcβï–ã¥ej72Gµ%Ž„ÂEiºzݶÓR Øüj;ë²N£Ò€*j±Ç°DŽ8£I€ùa±Ž*;Ö/<‘Ö®éG| @^Kvçµei÷*IÉ!³ÍnÞŒÀÊ:b¹ˆž 7@'4½xÑÍ V`GÖ¹Ù– ±.¨¨ÚI\™ãRYÙIpqÉ€¦ÆÍt‡×Å"¦O޵Ÿmf-£á~oZ&˜$u  }vE|€y'±¨áŽ3b>ðàæªj.ÒŒõ«1E"؆ÁÍlÛdB3¥]¿µy­¡åG"«é£B29­ÈÔ4xžô…§Ïå ²pA­o:K… œ¼R *3q¸ôúV½¼1F˜UµbO¦”u`9#šÓŽ3+ô«Ò ôÎ{U{™EÎ0(SŸjœu=ë”d] ò Åmj3—‘Žì/ÖªAgº/4q@Ú½¾$@JŽÕnÚe¸Àèjä ıU®´ÆR$„óí@ x¸¨$ gÖªµÅÌCkqëPIqq)àP2Ê_ËÝÆzúU›;Mçîæ¥²ÒåšPÏ]-¦ž#ÇËøÐ6öаÇ'Ú²n"’Òç(§­u«A¾õZâÑ&+׊Å]C|2œôæ¦ÓòÒEL4£»€1WàµX=2hŒò0*•óªÂÇ&®É×éY7¾œF¹ç­-ˆòbiÑžVíÈ©.ˆŽ…r HP%“$w  Q¦âÒ7<Õ§p!+ÇÒ¢µlÅŒr*yc?š€3寍š=ã©dÀRG=ê(Ø•>”7—æ-ÇZ°‘”äŠU}äëO—ä¹ô¨áLá¿:²89éT®FeJœŒsøRCšRÀtã4Øòª¬ù›b#õ¨ü¶ó1RIó@ ûJùc÷éY×EØÔó²F™V$ò“.ìñ@Hûc'¹®S]Ô hÁO8­{ûä†&ÉúW©ß©ˆç¯4E™ärí’)Cï;FH¤`R<~”AÝ 2Q†®ÃÁs$w;K}áŽkŽ’Ç­lør_.ý9ã4êð&SÚ´¤c¬iÌ’žkqrPsÚ€3nô¸Ø6уŒ×?sc$™Fq]|¹ÚJþŸ"\œÐ$ŒÒÝÇ»8Î+µ³+p½8®VòÜZß«Á=+¡ŠoÝ.}(iäŸJι£~çd°ÏJ†gÌl@çé@ñ;Æ}ªý‘mÜ÷¬3•'­iØŸ›“ÆhA÷db¥ƒƒ×ëLç ŽÞÕ*œ8í@ o›ŽÕ¢1YÄMŽÆµ ^N}¨<†Žôžy­¨Û(7ŸJ£y ½zõ¤´—|C'‘Ö€-§8¤pÒ¡ŒàzÒO&Ä,OAš©{xˆ›GÞ&©Ã™ŒQm77>Ù­¿)b·8ì(ž’=Þ`#8©t‰ÕXÆxô©!ŒË,€ æ©ÞÖã!qƒ@ò®alçŠÉ{u–2ãéZ p· }áÖ«Î6¨Úph´6¬D úÕû[x¢(÷ª tÑ· úÓ_QŽô~òu:þu{„lwâ‹‹¢P³µd0–ò`ª§…ji6íw¿zeWž•­o |Ñ‘‘OÑ­ µ«îÈô¨#ŸmÛ©ZdR­öÂ>V•gÊ*§hàÓ Bjr~PxéÚ€ qƒLùqŒ“Jy“hç½9‘p8æ€c¯ÍÔcÚ¬*ª¡oJ¯6Ï•R™Â©$Œ{ÕK(L“¼¬IQÞ¢¾mÓòsè*öÚǃ‚G­T#μè§böd‚=£¸ÅPŠb™aÇõ«+jf!å9nÔ_OÝóT³ÈK€pz²#FqÆj³¡w G€!•~OsÚª® ñô«³œ/Jª±Œ϶(Ô$)ÇÓ5 ?tzÔ¶ø?þª§¨¶éUsÇzŠç'±¦\FCoPjtB zÔæ!$%Hç4E$2`çÚ¬Œìãñ¬Û„’Î\…8Ï¥YK2Oáé@jéÜOlQ =ê9¥ß(,Ý+>çQäO^´³a!7AO|ŸÒ½=×þ)æm½tøFvõá»ãßÔõè3“äZ<Í& ™éƒü«×]âžfÛ×O„go^¾=ýO^ƒ9<ÿòýú/Íó ¿Äÿ$Eá¯õ)ô®Ê/º+ð×ú”úWeÝÐr¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š()þá® Å_êž»Ùþá® Å_Ꞁ6íÛþ%V«»­”§ºò½³ïèzõÁáàÊF2O×qnßñ*µ]Ýl¥8ÝוíŸCרΚÜê+ ‘ëÍ$6hÍ ÚIlëX×:ºBYTäÕ)57š2 U!o½üÆÏ¥1Þ^KtrÄãÒ‹{pìœç½K, ão­}:ÍHŽ=è]>ÐïÞÃÒ¶Ôíz dQª©Ê:s@§ù»U$`f´%;òµ‘òG ïéDé‡ÎxÅ!%‡}ÊxÀ  ç˰Py­í:¸%ºÖ=¬&k‘ŽÕÐFÅŒœPp¦¶LF*¼„³â¬EòB}…Ay÷ÀSÉ¥†O) ‚9¥‰ Ã’y’ÂV@"Ý!ϧzeÍÎbÁ⢑ Ìr V¸/å㜚¯)ÜqœÆ³¯ˆ8ëZ‹ $^ctú×/¬_€ìAàP»{ÆÕ=+ƒçŸ,xÏz›P¹7 ri¶Š»†ãÔЯ0;õꢱëWõGŒDì9¬ôõ ³Á9«ú3}3œÕt„Êæ´ôÛAªÄüÀÐw ÞC£dà×Io.èö®X®ëß®?JѱÔŒ#Ÿþ½mÊãmU\ÏãMY©!©‘d<Ð-RÙ¥xÊŽõ2ª ž‚¬^ ${U]ù9 3ªç=…U–år;RÍ:äçµcßNgʨ t  qL$¼'Þ·,Ø/Ó5…i—9f=kn28#4¤$TÈAúÕ0Ù#½X‡ïMZà:‘ÅkAʃYl¤/OƯZËò4nU ÓY–ïåÜ:6@­ß9ô™q‘p±4¡©ôªzœ˜] õô« .AäÖmûAé@°‡j#®^I²Õ°~•»«*€uªúŒã˯^ôºRî,MX¾±Yr›Ý) Ǹ÷­" c?Ò€9T‘ì¤ä}jò\Á6E]Ô,VU$(ÏZÄ:LäåÏ­Zž4åF@ëU%Tíi†èÎЭ¡¦ÇivòdçÜ‘@5‚9Ë·•¥¥é`8mœv¯Yi!¤5²°lP@ÅR¸ˆ[À[n8®i!i.]zèu‚ás×€)šuš” Ã$Ðz\Â50¸ý*KÍ.)ÐÈgéP_£[]+/ù­h%§Žhš6RZ¾Bóô©êU#Ÿ¥uKr `f¡“HŽVê€9y[ƒ€5¡§èŒçt£Šè¡Ò ‰AÇOZ¶"XÔv  ‘ÛùJ#ŒíQYZÈìr܃šÖººŽ#95|²ßd€vö ûL·ˆIéëYÍŠë’I©¬ek9ÊHNjÄq››½Ý³@6Êqœc"´@`}*¢¡]ŠJ´ …>üPY@qR qÀÈ_j{ýÌäs@’­ É¥u éìj"ðGN”íÌNë@q´uÅR–M¬ÜñSù„žžÂ²¯¦Â;š­}¢û ŽZ±©JÌ*~¸¤±ÄA¸$UrÍ5Ã8\ލÖ°«ÈKt¯«Ù ;9«Mi2}(¬€1Ö Á2c¸­@±äúU$|9'OZ¡!Ý6; jðqI39úõô§Ã–8#§4$d $šÌ-çÞdúիɼ¥+݆* rK‘ÍO´ù˜ô«Š1ØÔì¦*rp¹#ðõ  ·~Sœœ{VÄÂØ¶2mÍ"㟭sº¼Èª ’h6[©$sÉÁ¢ÞÆK‰3ƒŽ™«¶pFÈÆq[Ö°©Q´~§­¼Šã¨ýjôç_ø§™¶õÓáÛ׆ïS× ÎO‘Fb1]ïüSŶõÓáÛ׆ïS× ÎO?ü¿~‹óg_ü¯ñ?ÉxkýJ}+²‹îŠã|5þ¥>•ÙE÷Etƒè¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠŠ¸k‚ñWú§®ö¸k‚ñWú§  »vÿ‰Uªîëe)Æî¼¯lûú½Fp|nhd¸bI W²[·üJ­Ww[)N7uå{gßÐõê3ƒåBåAâ’)Åkµ4ÙX¡ =*ú Ã3N¶°3ʺ b!±±’vÜ·"€GòеI\ hå¿Zz©öýj#!,;w©'¿j`MÍ“õ …É©fÀ„’;S8 ô¥˜î‹€2ر#4’Ê¢<Mv بäu .?J¿¤¢ïÅiÿ9â©ié² ­_'÷x  2pøÏ^i$”í;ñQÎäJ3ÓéKß&OA@VÑíˆëNE,ìät¤I^„Sâ-õ>ôVWUÜØ VSfy7™ÏZuåÎ\ƽGŸ&Ù¤Î3Ò€"Õn–ÞÔ©#Àæ¼·Y½ß+„'®‡Äz³º”Ýœû× ,…ß&€Ô椆_)Ãuæ¡üéë󆉼ًúÒ =9¡£ñüªAEÜsŠÐÓ¢,ナé#²X¢Wa†<Ö^…™ v'ÖÜE¾*: šÇiåzãµ8Ú™^\TZB²ÆèÙäúV¯–YÈï@"Y­˜äŸpj{mMLœ’½]–"êM`ÞY¤.„‘šÞüÈÿ £-ÂÅ 9ç§Z­áòŠ1ä §ûË“û¹  SÍžLœóÚ¯-ˆUÉ'Ú®ÛY¬8$sëN»ùŠÁ¬W¡1Ö®1 Ý*¥Êƒ|ŒjyXnô  ªrŽ*ÌC‘ßéT£oº ]ƒ%ù  E]ÀœJ¯<‡‘ÍOùAÎsíOÄš­m!+ƒÁE2h<ÙsŠŠG1Hvsš»mó $ž(¤îÖñ|‰øŠÉD’{œ0''¿jéåˆd #·8 Ö*!þhœÒÈȦIò)ç­2à,â™n˜ˆ3éI.JüªxÀŽ™ÐO‚ /CG”ùWô©$äßéR¨#ñ …6õ>Qžâ…?ýjq"€155`w¯­]ÓÀ0©Å7S‡|9ÊÔwI± ph¦¶ÄLîG¥[Ò°Ð)cžØ¬‹˜ä¹¸f H'Ö·tÛVH7  ûØ{UÔ^9^¶°'¯½[vFqÍ1‹eGJ¥{x#ƒÏJŽî÷XðO¨íPÁfóÎh²Ç%Ì™`*Ö†Ú8¢µbb‡^zô©Ó’`\ibâbË×5rÊÃÈ`Z´£Û¸ü¼ŠI&Æ(¬ƒJ™Ž‚8¤|¶¨ÀN¸õ  [CÆiŽsÆ Ï8õ¥ÚÅGf…\–ö  ø@84Œ›rqC8YAü:RË1Ù×­5Îޏ¬Y{vž­e"6~ÀdÕ+(üÇi˜ñ@ të½H¢ÝÑcË~5ò‡¸'®*Õ¯Ú\$¥¤½Á~Õv8˜NN1RM A€£T¨1=3@&lœgT%8'œ ¶êYÎjÆH#ñ  .›"¬Â<´ÉÀ'¥@‘ùÏ^‚ŸxB[àP~¡'r»yã5§mXGò¬è!ó·\{Ö¬›þZ˜ ¯Æ™4Ÿ»#µ+}슂LœPWyyô®fr&»²GJé.²"f=…sð¦f,FNhÄl „·l¹ ŒV=´ Üî+Àï[Ð ­Å[lç××\ëÿùm½l!Û׆ïS× ÎO+~ën ìâŸ-·­„#;zðÝñïêzôÉçÿ—ïÑ~lëÿ˜Uþ'ù"/ ©O¥vQ}Ñ\o†¿Ô§Ò»(¾è®ƒ}Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@O÷ p^*ÿTõÞÏ÷ p^*ÿTô·nßñ*µ]Ýl¥8ÝוíŸCרÎ’È7 £<ñ^µnßñ*µ]Ýl¥8ÝוíŸCרÎZØ|»œRCd¬aÀæ´í¡G­N‘*G€4Ø 2ã°¦"Ä‹òsUCž‚­Îß&ÐUP@aÆM'^;ôÍ80< i¹=‡zP]ÔÉ[`£•óáéQK0wd•4“ˈǰ  ùçïIó%úT !g'¥¥@YË0éÒ€4-\€WmXweNœþF’&‹ƒ„ÈÅe]±2TisåñƒÏ&ž„É3dqž)ÓÛåIž´« +[‚:ÔWB(œdÒXœ[ Ý»Öf¡/›;mè(¨ËÍדPj÷E©@qVÂÐ?C×5Ëø–ÿ²†öâ€8Ý^饜€ÜVW5$Ò™$,{Ôtu§¢Œç4ÏήÚB“u8  åp:œTñÆòF9ÍIwhaŽV8/W®h¨Ðm#:×UÇŸlÕ=> # F8­”÷J)†áÁ9àÐJ95^õò¨ïVØ€¾jµ¤b{‘žƒ­^´¶ l3Þ³å—ì7<ž ®€Ç…â°uK:l{b€,$ë(Þ§õ¥8*Hêk)Kc´ýÞµ©‡„€{ÐW6²=«·aÚ²-­Í‘[r]©µxwe½f£Z|AcaW ” ±#waY¥×~3È÷©áúb€.,ûä ]ó¯üSå¶õ°„go^¾=ýO^ƒ9>rŒî8ûœçò5èοñO–ÛÖ½xnø÷õ=z äóÿË÷è¿6uÿÌ*ÿü‘†¿Ô§Ò»(¾è®7Ã_êSé]”_tWAÈ>Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( §û†¸/ªzïgû†¸/ªzÛ·oø•Z®î¶RœnëÊöÏ¿¡ëÔg–ò¶ÇÀ溛vÿ‰Uªîëe)Æî¼¯lûú½Fpy¹8\.x¤†Êl¤*F;S|ÁƒLDre› qZL ƒJÃqö¤ïã8 lã5¨]#Ú§$ôrîàEsX…>Ñ)v$Ðí™ÉÜÇž´ë¦8Àô¤Œì~œ lï™y  j›œ{šèm#0BêEdÛGæÝ tÍn¼Nàô9ÂÁÉü*¥Ä8ãšdŽDC“š¦ŒÏ&[·=hq\qÏÖ‰G`:ŠL S$”…äw 2­ïT`PîK:ô©æ;ÿúÔñ—nNy4CX¹ö¤‚FynµxÒÈFîjìè…Àäw«läž‚«J›×Š[iw•Á« ÀêkÝÚÊ2x5µƒ©é@X‚çò¦·ñ§;pqô5«õ ¯LŠœ 2jÆF0.9ŒP² ÈoÔT›ˆÝ3QŒyúÓÏ+ß(Þs’}éÐHY‰J®äç8=) ¤‡$ý(ëJ«Ô{Ó·¼MT•ÆÜ‘T&½b¥Sñ4vóPDPsô¬•InŸ'$f¤†#3eÅkZŠë 4‡·âkn ÐçÖ¨GÉ v«@õã­YÛ–ë“I»Ñ(Àüj=ù|ç¥:\±ÎF=E†‘·voÖžÇ̓@Œd>”É#ã9¦‰ž‚0–ã·$àæ£HÎY‰éS;|ÄwÅ&ì'׊`Ì=}©²3+vÅ"àÉÉàšŽâl1œÐdbÄc½V½lªÆ,jl…ˆ³G5Ÿ ¬·Lì:sš´Ñ,ÉïZ£hûQº“Vn_ÏuzcŸ#ùnU2H  ‘·]®$kRyHÀëTl-˜8•ùç5rSžG¯­SºRë´ ­Ê0j̤O¥TÎsõ  rcbç­ShäÆ;Õ—?ºž)ÐDq¹J¡©â(•G§4šZy±â›x|ùO=*Õ”cÊÔh±è+>UÌã=kAœr=j…ÑÉ 8Á g ÊÀžEe®¡äoûU««‘±é‘Šå®g2¾w  /mÛý©ërwø¬¸­åy¨­E³*ŒsŠts&ó¸þµr\–*0>µ¾™#H20½]hRJŽ´ËxÏÚFëÏò5é,¿ñO–ÛÖ½xnø÷õ=z äù|WÔ­¡-ËnãþkÔâŸ-·­„#;zðÝñïêzôÉçÿ—ïÑ~lëÿ˜Uþ'ù"/ ©O¥vQ}Ñ\o†¿Ô§Ò»(¾è®ƒ}Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@O÷ p^*ÿTõÞÏ÷ p^*ÿTô·nßñ*µ]Ýl¥8ÝוíŸCרÎ0î6’IçšéíÛþ%V«»­”§ºò½³ïèzõÁã]Á´Ë¶@zôâ€*®~PNO½C<Ù“e\ÏÊFi‰âs×Ú€n…=4𥨶³`OQW ¬Äûd× â [ïü©Ú€9oÞ&ò÷g<šÀÆj[‰šy™Û<š‹?ZëKŒzÒ ûÓ²QÓéñ—s…RM(@Wž+gD²K‰Läu£áˆ¤L–O®k¤d:”§Alb‹nÌzTöåb˜n\ýhô#)Uµ«•·±c‘*Ú2ãxõÇøŠøÏ8I<ã6€|䕨u殬!ÕÆ9©´‹Qo§)Ç$g59¸ç­Q¶¸žÒgÉã?¥j¥úÊ£8V÷¨^Í$ÎæÎj”öíù 8æ€7¢`W æ«\¶ÖúúÖUµô°8ˆ©î¯Hw/~ÔÛË–'ÊN§Ò¥‡OÛvûÇšJ‡Ï›Ìq»»"  cô  ‹¬-¾1Ã¥d3|Ãߊݼ å7øW9$ƒ£œâ€5t÷Ãã𭘾c·ð®ZÆ|Í‚MtöCpœÐŒ5[é´ñPFÁÅLÙ8Áüh·pã ¼»àÔî—Žj”±²¶áÛšÖÎG\ÓD™>˜íU œ¸žœT  4RõJ?˜ ^²›Ì@Ù¤žÑa«>Òo*à¡$ Ðñ@§)%3žzTjá›§èiò0EÉ ¨'žÞµXʱ9Ý‚j)õŠQy>ÕEVk©3ÏÖ€,M4“¶Õ •4Ÿ géÖ¯“ËŸ¥JÛ˜c ë@ ¤rlEÏj»Ü䊪*Äw«XR  QN:ÏLÔæFÀªK…àš˜>;õ  šãåÏqK›óÓÖ *XŽ:÷§ÆëÖ€'!CúÔŠ¬æïUƒñ÷±L‘‡ŽÔaï3Ð ŠM¸àv¨ –ëõ©AÉ÷í@çæŽ9¤}Û3À‘Áb=;Ó¥l&  ¦M‡·>õå,IíÓëHß<…Aê)ì5äv  ë‹¶rQ{žjÊİZ=qš­&k¢àp KtæICèh8ŽÈd™¿ †Æ6]ì½Ny©µ1Ú*Ré$ùdžÆ€4HÄ{*Ì’â@Åwdz»u&Õ#=+‹)È8Ͻ,Ò±^zSC  S$bÃ' §ªg¹  1¡# Ššk˜ííX S"ÃòvŒzÖ;ÏöÉð:t Ä„Æò7äSí's¹=EZ•BDˆæ²¦;¢ À4®#'§J­:î ÍXÉ*6ž¡ ÝSÞ€8jì®Q{VmŠ™äyQÖ¶õ{XÖb¥sšfŸj¨xéé@­!ÅlEnÎ*(#XÔ Ÿ¥]Y&8ŒBFN0@ÍaLì\¶xÎqëWonÁÈÏ5ƒ{xQg9ÎÿÚ¡9Éý×´2ÿÅ>[o[Fvõá»ãßÔõè3“óþƒ;OãBN@/ÿ 5}Ëÿùm½l!Û׆ïS× ÎO?ü¿~‹óg_ü¯ñ?ÉxkýJ}+²‹îŠã|5þ¥>•ÙE÷Etƒè¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠŠ¸k‚ñWú§®ö¸k‚ñWú§  »vÿ‰Uªîëe)Æî¼¯lûú½Fpx¥Ž{Wknßñ*µ]Ýl¥8ÝוíŸCרÎ'XÛõ¤†Ë;ÓëTn¤XÔçôû›ô2jÁšìܳ(éÓ4Ä2êv¸|ŒíÍ?TAqÉéKj9§8Ìe ÖÙ¤“qûµ³åùpAM¶ˆ,cÉ©æ; f=që@s²žô¡–tù¤Æù1Ï&¯ØÆ¦ä{u  _,GŽÕYä9 gÞ­Ü `Vw˜¢|™  áH€1êk:è–ÎkYåO$1×­e^Ê¥ ¨Á>”BšMíÐV…¬1r*œKòŽüÕ÷q ¹'Ž3@šÝúÃnêå:Ýášo,1Àë]^»xXHXð3Šà&rò3òh<}hÆ}iHÅ%Õ$c‚j0I8æ­AfÆ  °!T`â»Û#L­r’®&T9Åw^Š;(Õ¹Áõ “Q¥Jqœbª*z÷¤¸iwã†éÅM »FÁ™x ¿¸¶ŒÇÓŠáí3ª‚znë[ž,½Ù‰Õ/ ÚæRìsžh®x¼›Ž1X K1lžµ¹ª\ùpù!rHãŠÁC´¨n2x  (ÑÕw‡ŽiñB$s¸g¿Z·l‰%ºƒéÖ†Œ/ â€2¯ma à|þµÎÜnŠ’z×Xñ`ÚçµHñ8!N3Ö€: 0-ƒâ¯Ü7̓ŸNÕ‡´Ø¡8)oi¥e^JbFs\äò3#šßœ†F$dgšÁº &éÖ€>ðë×9­‹+÷€€Ä‘T-ö¥…jµ‚Ë*pØÍoÚ^Ç2qÛÞ®ÆûÿqjóYJ3ŸozétÛ¥¸Œ׸  ePzõªó¯¦ˆ’XÔÉþá+Ö€3UŒSàôïZž„éY.ŒrÄsVíeùvž½1@%“å$V,»„Ň­jHr™É¬ë²#Áæ€4moVH€cózTÛ˜?ÎEpc”œšÝI löõ  fBFãÒ¤I ëÏãTf#„`äúU#}4Ÿ*dPÓ^G5JkçŸåLU¡¶–cóG©­[kA¸ŒŸz©mfd;œþu­+€ƒµ=¬ÔªÃ s@ íËŸÆŒ)ǽ<ŽNO™¨”çž =”Œuö¦ä“Ž)1ÁÝC0¨  ânNãÓ½XOŸ$tÍgC/ÎÅëW£-ÔfA¶<þ œçúÔ'PGÈç^(&€-|ÝùúTÊʪAa“Ó5˜n'~Uzý)¦‰±¸í:Є—ÊŠUH r@¨ÔÎ~TÇó¢ÚÍU¾aŸZº‘…¨zÐM÷ ÃØæ£’YrC~ZÒ—œôª%K¾áÒ€ %ówœU{©šI }úV£°… ö¬»0'»iN0 \ÖÔã®*¥œm-Á‘‡ÉëV.ÜË*DZuÄ‚ÒÛ`ûÞ´GU”–Ø:ö«zt~T=êŒQ™¦ÞÜ÷­"â8Aô^ö@ € e‡$œŒÀâ­ÜÌ'±öªÁw€G¦:PˆÆ;sOAÀ8¦”e‹ zch'ŒP-^àÇvwStØpâ³uüëåŒFkvÕ6ª/µXš3°7¾+QFIwŽ‚ºrAªŒöÂTaë@ §Ü¤±mb8µjæU‰3œw®wsÙÍ·ž½j[CÏÚ¹à{Ð×ûEÁ5fÊÌ }*Œò¢e†j{=Q"]¤s@¬ÁW“œqUæ»MQ—SFB/4°ÚË(ó_…ÇJ¡sv Î+”Ô5ÞÀ±Æk ÕçŠ È£f¸¹¥ó7ÈrFhSÂLÅvg9'~?¢ÙâŸ-·­„#;zðÝñïêzôÉù¿ÁͻŶGþºè _H2ÿÄ€¶Þ¶ŒíëÃwÇ¿©ëÐg'Ÿþ_¿Eù³¯þaWøŸäˆ¼5þ¥>•ÙE÷Eq¾ÿRŸJì¢û¢ºAôQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEE?Ü5Áx«ýS×{?Ü5Áx«ýSÐÝ»ĪÕwu²”ãw^W¶}ý^£8<Û,Y#õ®þÝ¿âUj»ºÙJq»¯+Û>þ‡¯Qœ/¹œ¹Án´ÙFêW½ZKXÜu§>6Tö˵<☆m(ă֮ØÛnaïÍEP?:׉v  Ö€$‰AÛô¦_+ÂÖ¬Â2y§JƒŸÆ€0ã„«ãtTö9óKsÖ¦d،ǩ¨ìøÍi]:ˆk5 žO®;T¬Í$3‘Ö”¨Y6Š%b©ÜJÍ•‹IÈëZ“à Ü:ÕQ¥É^{q@B#Üp+/XÔ qìR:Uë©¶#€q\Ž­u¼<…€ 8  =bvP}ëš)É$t«ó]»–9Ȫ'æÐLFi™úÒž´|@³ Û¶·Û>¢³ôës4ëÁÛÔÖÍÄ‹•ì(£^jÈÎMz%¶ž< œ(ÁÅsžµf½Ðší¡Ý ãûÜP(–Ývg#Ú™s~VÖ¯À°Û€'9¬-xù6ÎGašãu‹ï´^Ôg×MḶۇ#õ® ÌÈ/ÎZ»+ vÖÞÍ@ê4½¨mgUàž•‘©®ÈÕÓªÖEߊÜ‚£# §Å¬}°0eäŠét»Ÿ6¹è9«ê¸“ô®_FºÛ9N@Ï­u0óϵS`L™=*•բά€Uû‡ÃŽzÓS•Ü3Ö€$Ò•¢µTn¨¯œ–Æj{vùâ«\I$ó@÷ ¾I®~é—xö­ÍFP°aHé\]ð¸Ée'ϨjÓÛ­tvw²¯Ì?:òó4ã€ïWìîoÔ‚¦BJôkÔ‚XÌ7 ÈÓuT´º(\c¸ÏZ奻ԙÛpåYå.÷–Ãç4ìÖúŒL»ƒŽjµ#wa^=Φ#L¸víWbLP§\MNVi½Ž 2Xc§Zàî5 TG—gÕ—.¥|íƒ#ШI«îᦹ–d çŠóHuȹ%½k[xºâ(ö²–ÅtÆfì _ŽöE‡jšà$ñ1}§š±‰¤_›Ë4ßÚÜ#ŒIÔúÖ½¬•Ü9Íywü%NW<0­?´Hç¥z„*çq6¨çò¯6‹ÇAO"¬¯ŽÐãÖ€;òWx¥Ûž„\<^3…Û“Æ´£ñ]«™~4Ò— 9 *$9¬?øH­¥ÏÌ8÷§ fÝÀQ"ƒõ  Yq%MFá¶à•J=BÖ ŠçUŽÈÈ'Ú€-´ž^FüŸ­K Ï*ðp+>ÍY·¹ãÓ5¿nqž(²'øÒ­AnªÛqœÔØžsž”¨0ääP¬gn=ûSË)`sÒ™¸nãŠ|„¶0¹èÙr@_Ò‰$Fe#\²þ•Ny·¾Ô³@yWÀúu§º•qR[CˆË½i“8PN}è2úw+åýqKn‚7Œç½$æiHãéI<Ÿ/–>”ëFS3ÊÇ…¨§¸2±$3Å8§“jNy"©[‘‡±  ;xÂE¸õ4Ë¢YöÅz deAŸJ{–ÙÓŠŽ8ÕÎO€-9 Œ=*µô†ÞßvzÔáû§¥gjr‡uLçŒÐ<*^ø?5ÕZ¯Ì þ‡¯QœRÎÿ6ƽ†Ý¿âUj»ºÙJq»¯+Û>þ‡¯QœkÞ’Îr mÈÍgJq×®x­=wN´Ä\¶ƒcnÇ^õ ‡ž;ÔIØéV#\ý(tÈRsÿפc‘‚iŒóÖ£cøƒ@Ýó #ŒÔ gðæŸtw.3Þ£'lAyЋEÜw~9§°Ã†=j(ØÆƒÐõ ³I…¯½-Ì‚R~•\¦ÞGZ²`ò“Íg_\y(Ä‘ž´«ÝžRã'ŠóývùÃAÏ©­}kS\?χô®1äi¦Ë194¼ìÏ9÷¤b´hW`äj a_$gƒ@ç“NLt9¥+ƒJc#hsM F@yÇZ[…3M@çqæ³ì˜íÛ¸…=«FÀnÔÓvN=h®Ó­Z“Ëì+b9˜XóïPB|¤éÔb?SŒö=¨ÚOó“ޙɮ_Ä×ìàENzâ·¤P‰å‚1ߚø0ý¡w`äÐ'‘us `„)éW¿±%Hˆ.qŠêÁ…%cv¦ÞKl[(F1@•¾‡½‰ Šš×Mx°ÊHÁ­6¿Š?•rëIë¯Bhk8aØç5¿c«¡ùdù@â³&]ä`Sdµ*»—© çŽBXÔªÌƹ$¸ž7ÆI·,5%tØçùи¤ÚΤÖeÝë JŽt×"9_úU;[v»¸bG §¹sŒóúU+«&„üÙæº¶´òUBqÚ¨j6ß»ç“@ŠÃ™ÊÖ½Ÿ8¬[»Ÿ*]¹9ÏZ’Ö틽t˜·fL€qW&ŠÁTl@N=+/OxæÝç)ÅKppøIã@í–×9)ÅM)†06*íúU( ¿xÀ*WÌLZ¼×6à…‡µ3Nðý´©çLÙ¨“ÌÛÌmŸ¥<\ÎbØ‚Ž¢€UµÓíÔG*GsY ¥ØÉ°ýïÒ¬Ï/˜û*H"]êwG"€ “@Óa€o\=FºE¨Œ¶Ð×rò'%É©35‰·^I=hŸŸEÝÌ'#¶)tÿ 5Ã’îTÕÐ[X<|5YœH›D#oûÐ(Ð-É(’;Õ9´V*½{VÆé‘² äÕ¥–Léž1@°Ð/v’¹5Zm2þÜänã޻Ȯ$l>´û¥ŒÅµÔÇZóƒq}<¸#ë@Ôï ïw®ÜYÚˆÚFLŸ¥QšÊ ŽU<(›þß»Ûò³ ³g¯ÜBᘒka<9n[%kJ? ÚˆÃ8ôÍS³ñl›†G¶mük´óYŸð‹B²¾ÀBô¥>ÊüŒ}:PceâÛiÔm½ù­x5›W?ëWžÙï^ZúÜ „cøS$²ÔÐe]ì)w§!ÁZ¼¯Q‚+Äc¿Õ­íÏïV`ñåì ²@Äuæ€=vît µ@¨ìb ÛÛžž•ÀÙøæ œ}¡q‘¥uÚOˆ¬'Œ"ŽüšéˆãéX—²³0‰O^µjmRÛÊ%dýj›,Óù¬Aç𾍶ÖxïŠÉ·ˆËpÍŽ[Ô¦À)ëSÚÃåÀ ïÍfê2m¸Àiš|cËO'ÚIüר£ŒÓâÂ*(ë‡u$g+UpXä¯jšv#vEWYw&Hühf!£éŒñO€ÄczX“xäç54’¬1–8 Ë»³£u Ú³m¡k‰²Ç=êK©|é‰õ­K;UŽÇŠŠhwZ¶ªØNb—Ël`Ö³áSÐÖÙ‚ë8À&€7]²€sT.¥òÐAVâ>lA‡¥`kwÄ<ôÅs·Ê÷š€ÆMmiVf˜ŒSl,bGqæ¶¢U\ b€-ÚÆ{ô5mƒF€ûÓ-™7dcµW¼½R<Ð×%#c¿§½yŸˆµ'–R«Îk¤×õ22+`wæ¼îæíæ“'œŒÆÜüéÑ!2Í49#çlçÞ­[: Ç\ž”­áT âË/_Ÿÿ@jú-—þ$¶õ°„go^¾=ýO^ƒ9?:øeÃxÂÃÿ–ŸúWÑL¿ñ -·­„#;zðÝñïêzôÉçÿ—ïÑ~lëÿ˜Uþ'ù" ©O¥vQ}Ñ\o†¿Ô§Ò»(¾è®ƒ}Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@O÷ p^*ÿTõÞÏ÷ p^*ÿTô·nßñ*µ]Ýl¥8ÝוíŸCרγlžkØ-Ûþ%V«»­”§ºò½³ïèzõÁò,~´Ø’Ç¿š×±b·ÝŽqY±¡iJ݆/Ý8¦!°’FHäšÐ@Bõý*¢*A:Ôî ®(7 Éèi›IôSÎO$õ¡Ô€(…Ù#Þœ m i.q;f¥¶P[9í@ wÂ{RY«Ë)|ð)— öõnÑLv¥³ïžh/%)'°®#ZÔ±Xàuæº=VçldnÎkÎuùŽ ’zõ  MJäÍ!aŸÎ©Fpù¤rsÔÓFGLÐøæo-›ôªÒN\` S ¼Q÷ ùœS’L7z‹§*ž”<.n¿¥Ïmæ‡$†^MsE0xÍX€K»äV'Ú€=µˆ×iÜ1Œš†_&yp1\ªX^ÎFâ®Å¢\;×q@í­îgÎê¡pæYÜŸzµk£°¡5 šHÆOÒ€3b{‚›rp)¤;)^k¢‹L@¹ M'Ølý(œŽÁçq¸ž;Öši‹ aËdŠÒ[`¼…¢XKF@äÐO,P*üVªé–ª¦"IëZVG#¨õ  ë»AÎ0qÅaKºÚmÇŽõÖßG•ÈëXwñ$¶Ä–  öº>sÏjé4X@ŒµqÛº–S]¾“ k$Ú;P뀡@“zBÜV”»‹ŠÉÕÔ¢ô ?ÕFÝBA×5fÄ2•,ÇoJ­ªÈ¯zXgÞ¬Ú8x4½henMtÙÝåöæ¹H']œÖ­„¿#4ÓŸ!F b¼ H**¼dȘ`G½N¶bBf€äÛÇ(¬ñ:í$Z³Ø/íTÑ?)ÅfJ‘Í>qŠ¿¢(ÛÁö¬ÙGwÇjÙŠD–!ÍWžÎ!$Œž•­¨N7éUïHåë•=*íˆ(-÷JË¼àæ•­g#q_­[XJíÁ÷«I‚¸'Ú€2 ¬ÎÑŸJí$«ÉèjÄŒCü§ó©­çu<ó@éÒ3޼Õ)e•äÚÑ’Ã¥u/8 ñš¨/3yO˜úŠÂhÛníLµEŒ±Èük©X “ Ø xéN}ÕÀ#<ñ@PÍó‘šÒžTxU‘€Pú ²©ɥOpÇ€&ŠéF#žµ­k=»€?:æ’ÆìJܨéÍYUž6 ÆzvÑK,¼c& ’Åzʱ¾Ñp9ÃÜÓí5i¹ó;M\—IYT€¼+& ÂT“­ôÕãe98;í–òõƒ¯­r7B¡—*zqUŽwb Ịֻ̈Ž$SøÔq,ˆÐ5æ« ¹Èð­ O^Ú&+¥m)B É¬{Ý&'"=ƒ&€&±ñ”W7JÓðG½uéâ[9mþG\ãÖ¼æ ²Ç½TƒëU>Á}jÜ"€=9%ŽHÚFpKʯ$ʬ:ŠòÈõ[Ø £nÀõ­û:º«Ö€;;›aŒ¯PÂ<¢¹Ïze¾µoqÌÀÆ3S¬ÑòEOaW“ÁªÌÌ BëZi:E;°Er:¥ûK;{àPí£iî‚úWI.0;YZ4PHG&µ'}«· %›žy¬U‡˜ }+b \æ¤þeéÚr«Ö€4Öð[Øîfè+––ïíWža$Œô¥¾¹’lB¤•h¶Óp}hVТž÷Xþ!øUO³º m9õ©àÓ¦¹àf€ 56 ´1ÅQ¸¾r¤äç­kË£o9 t¬Iã€ì94ÌëWf7a›­sŸ6x5£sæÊÎrFx¬õùÜc"€HÙ@lŸ¥MlÛˆÏj.™å@¬ÈÍmxUâ¯ÓÛž|ÏýÕôq_ønÛÖ½xnø÷õ=z äüÕk†Å$Ê™ÚèÅXvê+雤 ¥M„}Ž \tÝÆvþ™?Aœœ¹?yÏåcj½Š§çÁ|5þ¥>•ÙE÷Eq¾ÿRŸJì¢û¢µ0EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPSýÃ\Š¿Õ=w³ýÃ\Š¿Õ=mÛ·üJ­Ww[)N7uå{gßÐõê3ƒäq€Üu¯\·oø•Z®î¶RœnëÊöÏ¿¡ëÔgɼ¢%tô¤†ÇB¤ÎõÒÁò€¬»h27ãV´'äšbW‘ǽ=‡ËƒÔR£riÌâ€+:€¾Äæ›1Ì|jIH¨å#fzP\Ì|ͬjÄ2ˆSq=½j…ä£Î$v⫬æ^3Ò€.–2ÈÌ~”û‹å·²#5<¸Ix2:â°Šåöúš×ŠU0õê*‹79í@ú¥˜’×pŠÕÐYE’©Ž)óÄ4ºd àw4y°$àv¬½h·`1Z¬Ê²ŒÒ±õ»„ØGzó‹øÏÚŽäÔ¶Ùû¼ñVµDÛ0oZ§áÎhsLµó_.x®—N…Ø=»W7§Ý(3ƒZö·f'Ô‹uY>^*ð )8õ¬Èî—ÊV$qT¯õghʧ€6.ï!AÔg+"MA ;³X¨ÓO/ Iïš½˜Ì2îs@îe…ܲ¯>´^ˆØ.ÓV%Ò°p¬yêi‰£AÜI  üØæ\:óÚHÈ ØßìçQÅDðÈ„1@6× à+ûÕå¶2ð§'Ú¹¸¤dnâµì5"„К¸Ú{‚>ZoÑžŸlÃ*H›ó}*”ÈÝŒ  ‰$rM#؆Ë¢´ …BqéOŽNIë@Ÿc“<7㊜E"(ašÐ{b¹ÉàûÔ8ÚNEWŽY‘NãùÔOyÈàf­HÙã8õª+dÉö  °N‡Š°Jœm5J8FüñøSü—!½è%…I?(Å$ztR¡Ú¸4äÈ%³ÏrÝŒxsÍfÉ¢·EÕ t©#c¯¥u’HóÆ{T C#ሠ:K{¸FQßéšm½íÜmûёӥv2ÚÛ´d’9ª£NŽA”LÐBê Œ>EW†â9¯C0=kV}@8ïTÿ°æ2)æ€4L°È˜ùXvÅWð°ù€ëTe±º·=ÅFÍrŒ2Ih/tØfÎ:ô¬§Ò?ºOçZžs“ó¼b§Y‘@ëZÞ[ýÒÛE\·Ô&…°îA÷­±åH íÁªWÚjæg§A@}eÌ[22G85R!$³ü9äÕUµs*žäô­çµÛ¡¨oOâÐñšuÁP¤ûT:Tžlxî*[„ÈlÐ9.VG`1‘\ËÊIbs–­›ÆXáb{tµe\MϯJ’ÂÓ{—a[IÎÞô¶ða€P0+@D VKMã$u­[+u†<à cmŠ!œsQÍx”àPv½|£ŒŠó [Qiܨ`I=«kÄÚ¹veW$ƒ\‚1;¥~sÒ€!™HƒëZŽ=vœÕ‰X¸ùªÕ¼c 6äÍ5"Ü70à ®ªÌÌrsž+NY"òÚ 1Ú¢²´%˜‘Çj’%x¢\ž¦¾–»_ø–NÛzÚD3·¯ÞïS× ÎOÍ„žTÚ¾—»_ø–NÛzÚD3·¯ÞïS× ÎJcEO ©O¥vQ}Ñ\o†¿Ô§Ò»(¾è¦!ôQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEE?Ü5Áx«ýS×{7Ü5Äxšñ?©…ÒmpØ¥$ÇB9Æï×ê3ƒæPÄÍ'̤q^›nUô›TÝ©·xäŠIY3»§#>˜éœƒØÖmKù¶Ù[¸Í܃?{½—ó=p3”ÝO±o™½5E¯Þ7ò±ÈÆQ!Æå$ûÓÖU @uÇNµÕ¶‹¥üÛl­\fîAŸ½ŽÞËùž¸EÒþm¶VÇ®3w ÏÞÇoeüÏ\ Åëö_{ÿ#Ka{Ëî_ærÉ*å×?Z‘'ˆq¹:é[EÒþm¶VÇ®3w ÏÞÇoeüÏ\ ¢é6Û+c×»gïc·²þg®K×ì¾÷þAl/y}ËüÎU¥MÄnW¸“å8 ž¼WdÚ.—óm²¶=q›¹~ö;{/æzàdmKù¶Ù[¸Í܃?{½—ó=p2^¿e÷¿ò a{Ëî_æyÌRÈ !ÿ€š}…³äF\xb½-´]/æÛelzã7r ýìvö_ÌõÀÈÚ.—óm²¶=q›¹~ö;{/æzàd½~ËïäÂ÷—Ü¿ÌóËÄ”DÞ^Xã·5Áêöš¤ÅÖ; ¦Ñ1þ•ïí¢é6Û+c×»gïc·²þg®FÑt¿›m•±ëŒÝÈ3÷±ÛÙ3×%ëö_{ÿ ¶¼¾åþg̣ú´Œ?â_t;å¢oð«Öž»> Ó?ôÌ×Ñ¢é6Û+c×»gïc·²þg®FÑt¿›m•±ëŒÝÈ3÷±ÛÙ3×%ëö_{ÿ ¶¼¾åþg‰ÙøRfÈv>¥MkG§”l…‡ÑkÕ›EÒþm¶VÇ®3w ÏÞÇoeüÏ\ ¢é6Û+c×»gïc·²þg®K×ì¾÷þAl/y}ËüÏ/K93‚Œ? ²-ÞPçé^ŽÚ.—óm²¶=q›¹~ö;{/æzàdmKù¶Ù[¸Í܃?{½—ó=p2^¿e÷¿ò a{Ëî_æyô(b#F=«b à°ô±Þº–Ñt¿›m•±ëŒÝÈ3÷±ÛÙ3×#hº_Í¶ÊØõÆnäûØíì¿™ë’õû/½ÿ[ Þ_rÿ3‹žW™ ~5Y†®õ´]/æÛelzã7r ýìvö_ÌõÀÈÚ.—óm²¶=q›¹~ö;{/æzàd½~ËïäÂ÷—Ü¿ÌâÓ"¦V ü\zf»Ñt¿›m•±ëŒÝÈ3÷±ÛÙ3×#hº_Í¶ÊØõÆnäûØíì¿™ë’õû/½ÿ[ Þ_rÿ3“=§ã#ç•?ï¡]+hº_Í¶ÊØõÆnäûØí쿙둴]/æÛelzã7r ýìvö_ÌõÀÉzý—ÞÿÈ-…ï/¹™‚$„fŒ÷…#Ëßõ©ÿ} ßmKù¶Ù[¸Í܃?{½—ó=p26‹¥üÛl­\fîAŸ½ŽÞËùž¸/_²ûßù°½å÷/ó9rÑäæUüéÞz.ô?tÍ¢é6Û+c×»gïc·²þg®FÑt¿›m•±ëŒÝÈ3÷±ÛÙ3×%ëö_{ÿ ¶¼¾åþgvUâl'Ú¸íNÊæGfŽ ˆ6¡5ìM¢é6Û+c×»gïc·²þg®FÑt¿›m•±ëŒÝÈ3÷±ÛÙ3×%ëö_{ÿ ¶¼¾åþgÚ}³fÉ,îÜÄÜþ•¤–òd*AŸöMz“hº_Í¶ÊØõÆnäûØí쿙둴]/æÛelzã7r ýìvö_ÌõÀÉzý—ÞÿÈ-…ï/¹™æ¢ ‚ùRÙÄñ³FQ^’Ú.—óm²¶=q›¹~ö;{/æzàdmKù¶Ù[¸Í܃?{½—ó=p2^¿e÷¿ò a{Ëî_æyÍÖð2±»qÙI®vâÎòêë›i¶õÜc5í ¢é6Û+c×»gïc·²þg®FÑt¿›m•±ëŒÝÈ3÷±ÛÙ3×%ëö_{ÿ ¶¼¾åþgƒëZãÄ 6ò»²„×;ý…ªí,tëÜçþx·øWÓM¢é6Û+c×»gïc·²þg®FÑt¿›m•±ëŒÝÈ3÷±ÛÙ3×%ëö_{ÿ ¶¼¾åþgͶúF¨Œ?â_z¯’ßá[¶vº‚ü²Y\ãÞ&ÿ ÷VÑt¿›m•±ëŒÝÈ3÷±ÛÙ3×#hº_Í¶ÊØõÆnäûØíì¿™ë’õû/½ÿ[ Þ_rÿ3Çâ·»7A6Þ˰ԟÙÓLÀÉ…=¶×®6‹¥üÛl­\fîAŸ½ŽÞËùž¸EÒþm¶VÇ®3w ÏÞÇoeüÏ\ —¯Ù}ïü‚Ø^òû—ùžgœ±àª`ãÒ§ì0kÑ[EÒþm¶VÇ®3w ÏÞÇoeüÏ\ ¢é6Û+c×»gïc·²þg®K×ì¾÷þAl/y}ËüÏ96ÎN{R¬.½å^ŠÚ.—óm²¶=q›¹~ö;{/æzàdmKù¶Ù[¸Í܃?{½—ó=p2^¿e÷¿ò a{Ëî_æyÙˆÀCùSݲp§ø¯GmKù¶Ù[¸Í܃?{½—ó=p26‹¥üÛl­\fîAŸ½ŽÞËùž¸/_²ûßù°½å÷/ó<ÊâÇpÊ£gØU3gp«òÆü²kÖ[EÒþm¶VÇ®3w ÏÞÇoeüÏ\ ¢é6Û+c×»gïc·²þg®K×ì¾÷þAl/y}ËüÏ8Ò¤¸‰±2ÈõSZ³ÝoN7Þ»&Ñt¿›m•±ëŒÝÈ3÷±ÛÙ3×#hº_Í¶ÊØõÆnäûØíì¿™ë’õû/½ÿ[ Þ_rÿ3„‹Q• _&Lt)«Vډ݇—ßi®Å´]/æÛelzã7r ýìvö_ÌõÀÈÚ.—óm²¶=q›¹~ö;{/æzàd½~ËïäÂ÷—Ü¿ÌæZê7CóÆ©1Ãä´×fÚ.—óm²¶=q›¹~ö;{/æzàdmKù¶Ù[¸Í܃?{½—ó=p2^¿e÷¿ò a{Ëî_æpKç ÛJ¡Ëúg¹®ù´]/æÛelzã7r ýìvö_ÌõÀÈÚ.—óm²¶=q›¹~ö;{/æzàd½~ËïäÂ÷—Ü¿Ìã Œ‡ËʸôÍkí <ÏqÓx­ÖÑt¿›m•±ëŒÝÈ3÷±ÛÙ3×#hº_Í¶ÊØõÆnäûØíì¿™ë’õû/½ÿ[ Þ_rÿ38­óŸ§ßèVM×§n~ö3òû/æzàd¸w£ÍµÊqÍiJNÖÏJëÿ²t´,cÓ´ðyÁóHÏÞÇðû/æzàeï§éä0VM×§n~ö?‡Ù3×%Àò«ÙÄŽb_Z’ÆÜF èMzchº8feÒôÒÜà™'ïcø}—ó=p2ã¥iƒvÝ;O=q™ˆÏÞÇðû/æzàd¸,8S×8÷«àê1]™ÒôÁ»nŸ`zã3Ÿ½áö_ÌõÀÈú^˜wcO°n¸ÌÇŸ½áö_ÌõÀÉp8k‹´Æ ýkžÖ5q³*7ãž•ë¤iGwüKtæëÒž~ö?‡Ù3×1Káí @ChÚTƒœon¿{Ãì¿™ë’à|Íwp×7'ŸZð¨uí_L7…<5’WÃú)<ã8ûØþeüÏ\ £øSÃD’a–éEÑ; 浬®’A·w'Ö¾ƒo x`–#ú#uÆ@çïcø=—ó=p2áá_ FI‹Ãú(ÆvôÞÇðqÑ3×%Àù¯V'qRzzWÔwkÿÉ›o[H†võûÝñïêzôÉ£'…ü8å‰Ð4g<ãv9ûØþeüÏ\ ß¾Ùö+¢<  !#†8RØþzÜõ?ROÃ_êSé]”_tW%áØÊ¼W[ÝÄ>Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( 8ÊÖ«eç!®„óPÉqÈ -Ôt[¢ÇËšdÿuȬgÐõ,ñywÿ›ük×äÓÑÏ**#¥F„P‘ÿaêóûwÿ›ühþÃÔÿçöïþÿ7ø×­ÿdÇýÑGöLÝäŸØzŸüþÝÿßæÿ?°õ?ùý»ÿ¿Íþ5ëÙ1ÿtQý“÷Ey'ö§ÿ?·÷ù¿Æì=OþnÿïózßöLÝdÇýÑ@Iý‡©ÿÏíßýþoñ£ûSÿŸÛ¿ûüßã^·ý“÷EÙ1ÿtP’aêóûwÿ›ühþÃÔÿçöïþÿ7ø×­ÿdÇýÑGöLÝäŸØzŸüþÝÿßæÿ?°õ?ùý»ÿ¿Íþ5ëÙ1ÿtQý“÷Ey'ö§ÿ?·÷ù¿Æì=OþnÿïózßöLÝdÇýÑ@Iý‡©ÿÏíßýþoñ£ûSÿŸÛ¿ûüßã^·ý“÷EÙ1ÿtP’aêóûwÿ›ühþÃÔÿçöïþÿ7ø×­ÿdÇýÑGöLÝäŸØzŸüþÝÿßæÿ?°õ?ùý»ÿ¿Íþ5ëÙ1ÿtQý“÷Ey'ö§ÿ?·÷ù¿Æì=OþnÿïózßöLÝdÇýÑ@Iý‡©ÿÏíßýþoñ£ûSÿŸÛ¿ûüßã^·ý“÷EÙ1ÿtP’aêóûwÿ›ühþÃÔÿçöïþÿ7ø×­ÿdÇýÑGöLÝäŸØzŸüþÝÿßæÿ?°õ?ùý»ÿ¿Íþ5ëÙ1ÿtQý“÷Ey'ö§ÿ?·÷ù¿Æì=OþnÿïózßöLÝdÇýÑ@Iý‡©ÿÏíßýþoñ£ûSÿŸÛ¿ûüßã^·ý“÷EÙ1ÿtP’aêóûwÿ›ühþÃÔÿçöïþÿ7ø×­ÿdÇýÑGöLÝäŸØzŸüþÝÿßæÿ?°õ?ùý»ÿ¿Íþ5ëÙ1ÿtQý“÷Ey'ö§ÿ?·÷ù¿Æì=OþnÿïózßöLÝdÇýÑ@Iý‡©ÿÏíßýþoñ£ûSÿŸÛ¿ûüßã^·ý“÷EÙ1ÿtP’aêóûwÿ›ühþÃÔÿçöïþÿ7ø×­ÿdÇýÑGöLÝäŸØzŸüþÝÿßæÿ?°õ?ùý»ÿ¿Íþ5ëÙ1ÿtQý“÷Ey'ö§ÿ?·÷ù¿Æì=OþnÿïózßöLÝdÇýÑ@Iý‡©ÿÏíßýþoñ£ûSÿŸÛ¿ûüßã^·ý“÷EÙ1ÿtP’aêóûwÿ›ühþÃÔÿçöïþÿ7ø×­ÿdÇýÑGöLÝäŸØzŸüþÝÿßæÿ?°õ?ùý»ÿ¿Íþ5ëÙ1ÿtQý“÷Ey'ö§ÿ?·÷ù¿Æì=OþnÿïózßöLÝdÇýÑ@Iý‡©ÿÏíßýþoñ£ûSÿŸÛ¿ûüßã^·ý“÷EÙ1ÿtP’aêóûwÿ›ühþÃÔÿçöïþÿ7ø×­ÿdÇýÑGöLÝäŸØzŸüþÝÿßæÿ?°õ?ùý»ÿ¿Íþ5ëÙ1ÿtQý“÷Ey'ö§ÿ?·÷ù¿Æì=OþnÿïózßöLÝdÇýÑ@Iý‡©ÿÏíßýþoñ£ûSÿŸÛ¿ûüßã^·ý“÷EÙ1ÿtP’aêóûwÿ›ühþÃÔÿçöïþÿ7ø×­ÿdÇýÑGöLÝäŸØzŸüþÝÿßæÿ?°õ?ùý»ÿ¿Íþ5ëÙ1ÿtQý“÷Ey'ö§ÿ?·÷ù¿Æì=OþnÿïózßöLÝdÇýÑ@Iý‡©ÿÏíßýþoñ£ûSÿŸÛ¿ûüßã^·ý“÷EÙ1ÿtP’aêóûwÿ›ühþÃÔÿçöïþÿ7ø×­ÿdÇýÑGöLÝäŸØzŸüþÝÿßæÿ?°õ?ùý»ÿ¿Íþ5ëÙ1ÿtQý“÷Ey'ö§ÿ?·÷ù¿Æì=OþnÿïózßöLÝdÇýÑ@Iý‡©ÿÏíßýþoñ£ûSÿŸÛ¿ûüßã^·ý“÷EÙ1ÿtP’aêóûwÿ›ühþÃÔÿçöïþÿ7ø×­ÿdÇýÑGöLÝäŸØzŸüþÝÿßæÿ?°õ?ùý»ÿ¿Íþ5ëÙ1ÿtQý“÷Ey'ö§ÿ?·÷ù¿Æì=OþnÿïózßöLÝdÇýÑ@Iý‡©ÿÏíßýþoñ£ûSÿŸÛ¿ûüßã^·ý“÷EÙ1ÿtP’aêóûwÿ›ühþÃÔÿçöïþÿ7ø×­ÿdÇýÑGöLÝäñèz–îo.ÏÖfÿÞÓ4k€ÃÍ’Wÿy‰®ìiQá—¿”ü]Öüõõ£Ï_ZòOøZ–óé{ùGÿÅÑÿ RÏþ}/(ÿøº.­ùëëGž¾µäŸðµ,ÿçÒóòÿ‹¥ÿ…©gÿ>—Ÿ”ü]Ö¼õõ£Ï_Zò_øZvóéyùGÿÅÑÿ NÏþ}/?òÿEÀõ¯=}hó×Ö¼—þŸüú^ä?þ.øZvŸóéyÿÿøº.­yëëGž¾µä¿ð´í?çÒóÿ!ÿñtÂÓ´ÿŸKÏü‡ÿÅÑp=kÏ_Z<õõ¯%ÿ…§iÿ>—Ÿùÿ‹£þ§üú^ä?þ.‹ë^zúÑ篭y/ü-;Oùô¼ÿÈü]ð´í?çÒóÿ!ÿñt®­yëëGž¾µä¿ð´í?çÒóÿ!ÿñtÂÓ´ÿŸKÏü‡ÿÅÓ¸µç¯­zú×’ÿÂÓ´ÿŸKÏü‡ÿÅÑÿ JÓþ}/?òÿJàzמ¾´yëë^Kÿ JÓþ}/?òÿGü-+Oùô¼ÿÈü]Ö¼õõ£Ï_Zò_øZVŸóéyÿÿøº?áiZÏ¥çþCÿâ踵篭zú×’ÿÂÒ´ÿŸKÏü‡ÿÅÒÿÂÒ´ÿŸKÏü‡ÿÅÑp=gÏ_Z<õõ¯&ÿ…¥iÿ>—Ÿùÿ‹£þ•§üú]ÿä?þ.‹ë>zúÑ篭y7ü-+Oùô»ÿÈü]ð´­?çÒïóÿ‹¢àzÏž¾´yëë^Mÿ JÓþ}.ÿ8ÿøº?áhÚÏ¥ßçÿEÀõŸ=}hó×Ö¼›þ§üú]þqÿñtÂÑ´ÿŸK¿Î?þ.‹ë>zúÑ篭y7ü-Oùô»üãÿâèÿ…£iÿ>—œü]Ö|õõ£Ï_ZòoøZ6ŸóéwùÇÿÅÑÿ FÓþ}.ÿ8ÿøº.¬ùëëGž¾µäßð´m?çÒïóÿ‹£þ§üú]þqÿñt\Yó×Ö=}kÉ¿áhÚÏ¥ßçÿGü-_ùô»üãÿâ踳篭zúדÂѵÿŸK¿Î?þ.øZ¿óéwùÅÿÅÑp=gÏ_Z<õõ¯'ÿ…¡kÿ>—œ_ü]ð´-çÒïó‹ÿ‹¢àzÇž¾´yëë^Oÿ B×þ}.ÿ8¿øº?áhZÿÏ¥ßçÿEÀõ=}hó×Ö¼Ÿþ…¯üú]~qñtÂеÿŸK¯Î/þ.‹ëzúÑ篭y?ü- _ùôºÿ¾¢ÿâèÿ…¡kÿ>·_÷Ô_ü]Ö<õõ£Ï_ZòøZ¿óëuÿ}EÿÅÑÿ B×þ}.¿ï¨¿øº.¬yëëGž¾µäÿð´-çÒëó‹ÿ‹£þ…¯üú]~qñt\Xó×Ö=}kÉÿáhZÿÏ¥ßçÿGü- _ùô»üâÿâ踱篭zúדÿÂеÿŸK¿Î/þ.øZ¿óéwùÅÿÅÑp=cÏ_Z<õõ¯&ÿ…¡kÿ>—œü]ð´mçÒïóÿ‹¢àzÏž¾´yëë^Mÿ F×þ}.ÿ8ÿøº?áhÚÏ¥ßçÿEÀõŸ=}hó×Ö¼›þ§üú]þqÿñtÂÑ´ÿŸK¿Î?þ.‹ë>zúÑ篭y7ü-Oùô»üãÿâèÿ…£iÿ>—œü]Ö|õõ£Ï_ZòoøZ6ŸóéwùÇÿÅÑÿ FÓþ}.ÿ8ÿøº.¬ùëëGž¾µäßð´m?çÒïóÿ‹£þ§üú]þqÿñt\Yó×Ö=}kÉ¿áhÚÏ¥ßçÿGü-+Oùô»üãÿâ踳篭zúדÂÒ´ÿŸK¿Î?þ.øZVŸóéwÿÿøº.¬ùëëGž¾µäßð´­?çÒïÿ!ÿñtÂÒ´ÿŸKÏü‡ÿÅÑp=gÏ_Z<õõ¯&ÿ…¥iÿ>—Ÿùÿ‹¤ÿ…¥iÿ>—Ÿùÿ‹¢àzמ¾´yëë^Kÿ JÓþ}/?òÿGü-+Oùô¼ÿÈü]Ö¼õõ£Ï_Zò_øZVŸóéyÿÿøº?áiZÏ¥çþCÿâ踵篭zú×’ÿÂÒ´ÿŸKÏü‡ÿÅÑÿ NÓþ}/?òÿEÀõ¯=}hó×Ö¼—þ§üú^ä?þ.øZvŸóéyÿÿøºwÖ¼õõ£Ï_Zò_øZvŸóéyÿÿøº?áiÚÏ¥çþCÿâé\Zó×Ö=}kÉáiÚÏ¥çþCÿâèÿ…§iÿ>—Ÿùÿ‹§p=kÏ_Z<õõ¯%ÿ…§iÿ>—Ÿùÿ‹£þ§üú^ä?þ.‹ë^zúÑ篭y/ü-;Oùô¼ÿÈü]ð´ìÿçÒóÿ!ÿñt\Zó×Ö=}kÉáiÙÿÏ¥çþCÿâèÿ…§gÿ>—Ÿ”ü]Ö¼õõ£Ï_Zò_øZ–óéyùGÿÅÒÂÔ³ÿŸKÏÊ?þ.‹ë~zúÑ篭y'ü-K?ùô½ü£ÿâèÿ…©gÿ>—¿”ü]Öüõõ£Î_ZòOøZ–óé{ùGÿÅÓ—â­ëg{ùGÿÅÑp=lH 8×›é?4«ë¤·>ÙÜáLàO¦A8ük½¶¹ƒ@(¤"ŠZ§y&Ä&®••ª6"jòŠ7òK-…¸cåæG+î6ÿ¡óÝÕÖ|C¶¡kì$ÿÙkŽÝRÆKº¬ØXÝê—‰icOpà•@@à žIUÕÚxZ+}7Ãz†¯w¨9îØYÛ\ZB¿ÄÄ(çœc=±G›ÊÉ ÐÝ=¬‘8ÆÑã,cŽ¼Ô·úuî•2ClöòÉ‘QÈÎÓœšè¼fßgÕ,vüÊês{«KHеq§0ï¡vf/Âæ=…C+hÙ äOûS~ÿ/ÈÎyÆ>n+¥ðz_Þèϧ¾“qu¥Íu“qmp"’0=yc¯ZvÜ›ìsO¦_Çg=Ü–®[ËäJÌ@)'÷J“ŸÒ’m:öÞ;7–Ù‚Þ.ë}¤1p8“Üpy®Ì&Ÿ£x_^†ê«ÛEª*ópÑ—;W’ëÎAëêjÄšŽm«ø.õá[K³Iµˈr\±ë‚G&’Öß×Kéøþv9 Ï ëÚ}™¼»Ó&ŽÜ —ʶÑê@$ÄU1¦ß(ê‚Ùˆ“Ê3d`7¦3ŸÇ®ßJÓ5jºž¯­ÝEý$Ræpÿk-÷@çñ¨ô›ËKOhúv¢Ë†¨ncšFÿ–d7ÊÙö QÐ}N?û#Qû%¥ßÙì÷’yVîYG˜ùÆ1œŽN\¿ð¦½¦YIy{§46ñã{™£ldàpž¤WYw©£X›EÎÇ]‚ÚßóÍTsøÕoèr´Ú…ü^òðáÛRÛ·2|¬ñž(×áþ`—õ÷ÿ‘Ç6ãûõvx’ÕgÌC;ã?(Æ0¸ª¶Ëö»˜ ŽHÃHá;aA''°¯AÓÀ°ñG…¼=€M¬O=ÂÿÓgFn~ŸÖ¨‹Íº+kâ«avo0nvqŒÿJ}¯Bz^§Ÿ^Dlo&¶–H™¢r…ã}ÈHô=ÅCæ¨ n>õé`_yšùðà„ëŸÚŒ%ÎÏ0Cá߯3ýj=: N][NLÚ'inÔÂñ\’Çr¸ûÀç õô©éršÖÞgk£]]éË~²ÛÅ\­ª™œ©g?†0;œÕ+ȾÃ{5¬²ÂÏ”-îRGp{Šëo¿â[ªøSÃêpÖ’C5ÀóÚGƒôηýƘºœÖ¬¨òøˆA!(ä`¹^EU®ôþ¶Béë«ý0)8 ö¤óW8Ü3éšô_ÜÝÄÜ„h´ëø’Ûlj¦$8 BkGP ¥kË[76+ BÛÉãæÎsÖ¦ú_úÚã¶¶þ·±å{«V÷ÃzÞ›aöëÍ6Xm¸Ë±SŒôÈ#ñ±sžÉ=«Ð5_jÚ…®m-íd¹kÅYuÖ•v¨^B(''Î?úÔö¸–ö9«Ÿ ëvzÛî, ZíVó<ØÏ Œ|¡³Üv¢÷ÃZÞb/nôÙ¢·8ùÉSŒôÈ‘øŠé5Ý6Kîÿ_Ò­ôýBŽ;9¢¹ çã»CÓ½.«áý[AðµÍ­½¤—-v«.£xÒ.Õ ÈEäã¹ÇÿX}Akc™½ðÞ·§X‹ÛÍ6Xm¸Ë±SŒôÈ#ñª[ÙIsewt’Û¢Zª³¬’mwÉÇÊ;×e©xwWÐü3=µ«Ü½àI5 וB¨„PNxîßäP²Ón4Åö7{<袷ݱ·Xž¿Át9*“€ÀŸ@iLª }3^µâ» ¬.¦° lGÙwlÊϸù³œõö¦hf‡LM9­Îˆtãö”R›Æ9Ü>ösýi7dßoø?ä [yÿÀÿ3Ê‚HdRî­=HêcÃÚ/ÚþÏö=’}—ËÆüdnÝóš‚VÐÿ²É:Ÿö¦ýþ_‘œóŒ|Ý:S`O¦øXÖ yôûž$m¬ÁÑyÆqó“ô§XxoZÔÒg³Ó¥•as™eB¬:®ƒ‘éZÞ°ÔÅìZ•¾•ewiç*É=Ã.è<²å®JÐÐì/WÅ—z–cg¨éÆùƒ^\º–ˆÉu%ž¸9À¢ÚØ].r¶ú­uóÁa+G2I’†Q–I‘Üj´¶w0YÛÝËK{ÞK–>Þs|bºÍ7RšO]i¶FÞ{Xî§/¦Ë4Ã8 àñÓ9çýVÃN×4—Õâ–æ(a¶[me±© gsuëß½Mô¹VÖǺÕê7U—uª-Ôn¤»¨ÝQn£uKºÕê7P»¨ÝQn£uKºÕê7P»¨ÝQn£uKºÕê7P»¨ÝQn£uKºÕê7P»¨ÝQn£uKºÕê7P»¨ÝQn£uKºÕê7P»¨ÝQn£uKºÕê7P»¨ÝQn£uKºÕê7P»¨ÝQn£uKºÕê7P»¨ÝQn£uKºÕê7P»¨ÝQn£uKºÕê7P»¨ÝQn£uKºÕê7P»¨ÝQn£uKºÕê7P»¨ÝQn£uKºÕê7P»¨ÝQn£uKº¤·†k»…‚ íÏ<=OµVÝZz$ëÓäüÌ« '?Ò€.7†çåo¢2t¡óÿëV$‹4S4.Œ%VÚS9®K8!šæ";ÿãÕ™qqñ2œa@ ÚÁÇób\§#úÖeõ¥ÎŸ7•6FU×ÃÚµ·[5Äï=¿˜Ìà†6åøÚ\àÕ-FMÚUœ$bEŽFõÅ[Ò¼5u¨Û­Ä×)mò›“s0õÇ~5­¡\é(&2¥Å¹82 ÁSî+fæV¸‚#fvž9aPc¸î1Æ?—QľV‡qიÙIgݹÏB¹Á>‚¼Øâæä»^Ö>‚yeM®©^ýcu{ß‚õ.t[&‘‹9…wÔœu¯Ÿ÷W³ø Bt›AÿLÅzˆùãÔ"9QE2Üæ1E0'=+VÿRßJØ=+VÿRßJðˆ'…·üÿe®7uvÿãþÛþÿ²×̪2Ä©¤ÆIºŒŒçúÒDq¿ÉF—ËRïå©mª;œtôùí§¶1‰âhüÄ&‰OCHäg8æ€@éÅ2Š~ê³g¨Ýiï+ÚLbibh\€än£‘ÿתY‘‘‘ÔSâç.!äòÔ»ìRÛTu'½.G £ ti”P†È4¹Ïzeü‚sRZÎ-.á¸X£v‰Ã…q•$àãUpÀ’E†íMh›‘xšú/½áv}®¤§*WÎpãžÕï¾Gr\’qïJ–ÓËo-ÂDÍ %DŽ:.z~x¨©îÁ-¬âÖ7h\,ƒ*H9ÁÆ8¨(¦´O«j7×ELÓ¶æÚ8Ã=€âªqè=)´RJÁ¸î=o\x²îm2kltÛ(çP³=¥·–òÙŽMsôPE'ŠVH/øG¼>›”®ô³!‡AÝÖ¹ðü©´P†ÑÐFü©´P°£øGåZ±ø‚æM-b‚R Ò¤X–\€Íž@>Õ‘Eik:Äúæ¦ú…ÒD³2ª‘¸©'õ«ÖÞ,»²Ó­¥Ž›†/$ÝÇm‰Êô9|õ÷ÅsôQÒÀ<: 7S( ’ í' 6Šy õ£#9ÀÏ­2Š~ê7S( î£u2Š~ê7S( î£u2Š~ê7S( î£u2Š~ê7S( î£u2Š~ê7S( î£u2Š~ê7S( î£u2Š~ê7S( î£u2Š~ê7S( î£u2Š~ê7S( î£u2Š~ê7S( î£u2Š~ê7S( î£u2Š~ê7S( î£u2Š~ê7S( î£u2Š~ê7S( î£u2Š~ê7S( î£u2Š~ê7S( î§,ŒŒIt"¢¢€.Br¸Þ¸^j1H9ÉÏR{ÔPÕÔ&EÚ#Õ†Oó¦}£t›ä,ÍUh  (5I-†Ø˜ìþë ô梺Ô&ºÇ˜Ù ~JŠÏØÁKžÚ›^Ã÷W´xþAVŸî ñJö¯‡ÿò ´ÿ®bµF©[«Qmþ¬QL ¥cêßê[é[¥cêßê[é@ ñþ?í¿àû-Pðd¾F¡¨Kö‰-öió:%ÜÉÓ22Wþ!ÿÇý·üÿe®NÚò{37‘&Ï:&…ø(ÝG4ŸPìtI?ö¬ú‹Íªßj":FI' )Ü8ÀvÈö'Ò®6›k¨^Û=ã †×DŠr²3*±1@X/Í“ž+‘¶¼žÐL “gŠNÊœdsôj-wR†Ki#º*öј¢m«‡øO0ö9©·õ÷ÿ˜×õø‘&¹™¶í¦Ë o3GHÑ£äýÓ A<ûÖUY½¾ŸPœMpcÞhòâXÆ>ŠªÔÐ3 ²GÖ<15„hd»±˜OŽKFä+¨ú6ÃøšÐ¹X&¾Ô4ôf0éZ[CŽFPÎ¥w±Áä-Áàñ\Ω^i7‹wc9†uÁàñL‚öâÔÎa“iž3œ¹N ý×úëkÓúé{DºF…ec 7“Û$ÓX‰üã,þp‘—r…@¾Y\àrsÔäS­ü9§\«Ü¬L\Ø!³PìÒŠœŒ““óFã?xW>5ÍDiâÄÌn¢‰"GeSÔ+YGÐÓ#Ö5­í K—X­&3À¸#ðsúœÐõ¸-,K­ÙÁ§ÜÛÚÄ…eKhÍÆXœÊÃqëÓéY•-ÕÌ×—RÜÜ9’i\»±îOSQQêQ4|ÞÐþÛ}=± q´El%ÝóŒçç\~µ©¥éÓÞß_\É ÃkmeBé¤tCæo,/@q“Ö¸©o'šÒÞÖI3 ¾ï)p>]Ç'ž§‘ޭůêpÝ5Â\þñâX\4jÊÈ HÁÀ¨£ ‘µqŸ¯ 2e’Ø›FK¬KnPX@9Á#8§ßizCßêº]½‡Ùå²¶iã¹YÝ‹mPHubFqÆ9ÅsÇW½-v|ÕíBΫ`:| `cc¥¯x¦ïT¸ºH%hì¦Ú6‘]”Ã0##¡&•™]N~Š(¦ ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¯jøÿ ›Oúæ+ÅkÚ¾ÿÈ&Óþ¹ŠhG©[«Qmþ¬QL ¥cêßê[é[¥cêßê[é@6‚ªß‘YCe?d}è뻃ʘ‹ˉ#PN21ØõÃxþJúrŸÿBŽ­®Šon£Ž÷Oy` ¨>$ˆ¥ô$dƒùRnÃ;?&ùãýð(òaÿž1߸‹m*òÓOaak-µÅÆ‹ûҦ뼿ÉäóW|0,W^¿]>ÎKHVÒñÉ ˆïÌ™$ÉÆ9ïëNÚÿ^ä+éýy™¹¨ê:f”ªoP0$m·/€:“µNõŸf·;w»öíÎ;g4Cªi7±Ëû@Ý…kr¡¶ýí¬W Žø&³îîMçˆbµ»‚í-m$Ge¤®³JG \)P«Ÿ^½x¥½×Û¼FÒÝÛÞÇöVx­#6r…Æ;m,‘© Á9on1øŠÃñŸs&pf–æò9%¢Ä¬DŠX(UÜÜԚζ°—íн•ŒöúiÔC Bɰy¶‘”RÄuŸ­?¯!m«ÙÞÚÅuoO ªÊ ô8"¦òaÿž1ß°<'m¶‚–Ñéígr‘ª\î¶1o œ ÿQšÂÞK¥Åh¶7«=¦qm&ëwÈB±†ÎÓŒCßA£¼òaÿž1ߢQºx~ÆT æ×aÉ<ùôî+’ºÑa·ûm¬VÓ[XÉom&Ø-TiC¶AGÍpºÕSm}-¬ÒeÉm ¶¶I ‚&Œß)®LiS·Ú5 ,¥:Š]Ù˜æòÏ™·lAðzíûùí×4ѧÿÄÖØÍ§]i.¡,“]ˆ†„‡ÚD˜Æ0Tϵ7£þ¼…{«Ç“üñ‹þøa>L_÷Àÿ äü7ê;ˆ]a¹cnÆ2€¸ ¼œ¹ç¥ FµŽ·£j3Ç ±Rò)hÄ–­¥K( øf´fû-¼/4Ëoh2Îê îk†Ð`¼ŽmxÔdû"8š+«O*+pP‚U¶®ãÐ[‚~µÚÚ\Cªé°\ˆ“qÈ©*Œàò29ßu+ÿjhÿÙ#U2Û-‰RÂf@ ÄgµYY,ÚÐ]í„@có7²6ã99qX¶RÂÖó[7œ!›loÌ-ŒÎyýiobž ®•¼ÿi›N „(` mcØœô>ôŸ_ë¸û]‹ëZ,ö“]#Ä"‡fûr¬3÷~R œöÀçµY±º°Ôaim’6TbŽŒ¬;`<Ž¢¹kø®u1}{ …äQm¡ÃBÉ(+!ft^¤¨Šg“üñ‹þøy0ÿÏ¿ïO¢€äÃÿŠg“üñ‹þøy0ÿÏ¿ïO¢€äÃÿŠg“üñ‹þøy0ÿÏ¿ïO¢€äÃÿŠg“üñ‹þøy0ÿÏ¿ïO¢€äÃÿŠg“üñ‹þøy0ÿÏ¿ïO¢€äÃÿ–ÒÕk{Ã_,ÚÒ?úÑ©H[=pB•ÿÇqIoýy¡¡.£§> 4™g‰îe˜Û‘¸•ï¸tžýk$Ká#p4²Xó6FÏGnÂÝG\Ó¯má‡ÆšCÅhÒErÎU@,pœŸST®u­7WñÙÜßÚÁo§Ü±<€I<ã§”øŸaȺ]AìÍKMKÃÚuãi–_g¶v—aX`)“t°w{g5cûLˆ°k†[†s†‰ÕY¿º¤ûf¹KÛiðèšf¡ÒI¨‹‰a[r^ÛçÛ¤ ´ Žçs\Ô-®µÍ=m5µÏâÓä ç0* 9$Ž:SZÚÿÖÂz_úîvUOPÕlt¨Ñï®R#„@ÝY‰ÀMIi}o|&6òoÊпÊFzŽzÖ/Œ­ám ç1FfYaU¨Ü•2ëŠ]PßRΡy¡iëw Q˜M![V`H<;•Rê})u{ýË··Ô£K¤œbì­p |ØUoï}Ɤo¬…„¶2ë_ÙóöÀ­ŽûI­Šà´è%›UÑôÛBë 2V‘¥ŽÜ©B²…i7fù±€Lšïiù‹­‚Š(¤0¢Š(¬úm…ÕÄwVÓOÜ’H•™~„ŒŠµE…T°b •èHéKEQEQE…T°b •èHéKEQE ŒƒÚª@píKEQEQEQE U X( zœrih¢€ (¢€ (¢€ (¢€°Ä#,H­)Ì„(Î1“ëÀˆ¢Ž’(cXãAµQ@J}QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEVïR³°–Ú;©Ö'¹“Ê„~fÆqíøÑs©ZZ]ÚÚÏ8I)‚K2ztãÖ¹ÿØ&­­i|„¨t¸uaÕ( ÃÜ eÉ¡-Þ™¬êðy7‹¬qÿu*Ì?ÞbOÐ kV—õØÚõæò^G?Šín#[ Kßí?%àDarÉÊ–sœ ÓŽj=I´ü^5ù_íñ© ÍÎñš»v³³ÓÞ’ÖÞð?ÌRv¿õßüL¬»­r+KWšk[°EÇÙã‹Ëælñ°gRGJä%²·K=KWH‚êë[Ràpá|Õ]¹ôÁ#ùmẀAqKø‘ÕÑÆCx"šW·Ëôÿ1½/åÿüŽÒÒý®eòÞÆîÜùbBfUÀÉ#nA#wǸ«•ÁëvæÏPÔàÓâh¡K `Él¸+œÛöþÎzT—÷^‡DŽ" 1즹T¸’T- 'i!œ sÀ‘Éæ—Kÿ[‹­¿­Ž¾îú &·Y؃q(†< åˆ$ÐÓ¾Óþœm|‰°#ó<í¿»ë¹þ÷|zWB-äðÕ¯ÚÚ 2ß[!™T˜D8  8L·©ÅkÎÊÚ•ÙÐvcû ý“ÈÞØÛøÓéëk¯õÞÇkEpº/öoöΕýƒ»w’ÿÚXÝÓon¯=j¾eogeáFÞ!ÝÍÛE<«Á•H“!½z¾”[Q_K¶¡ªØéQ£ß\¤"Gº³€šµ$‹O#œ"Ì}®ÆVð¶†ó˜£3,°ªÈTnÊ™õÅ^–m&ß[ši-üv›¤c»ˆCî}étQö:ÞŸª<°ÚNÍ,k¹£xž6ÁèpÀ=Årúü„n¿ëâOý Õ"ê+¯ÜOký© –„5ÆÑ‹|6D`¨ s’qŒü¼š¯¡ÿÈJëþ¾$ÿÐ>ˆ]NúÛýX¢‹oõbаzV>­þ¥¾•°zV>­þ¥¾”Çh SÅ’ÈœˆmQ’rEu1‘j3_%ÒÍ2*I…8m¹Áǯ8ÍsžñTÌ}"#ù×f‹$ÎëUTà³ óŒã!}ªOùô¸ÿ¾(ûTŸóéqÿ|U¿³Oÿ=ãÿ¿GÿŠ£ìÓÿÏxÿïÑÿ⨧ڤÿŸKûâµIÿ>—÷ÅM¹•Þ9Þ€:{þ†¡/¯ Kˆæ‚(ä•Z2Dzr(UŽÊ&ŽÞÂá¤a´œ³IçÜÔßj“þ}.?ìzüýÛÿ߃ÿÅQö=Gþ~íÿïÁÿâ¨?µIÿ>—÷Åj“þ}.?ìzüýÛÿ߃ÿÅQö=Gþ~íÿïÁÿâ¨?µIÿ>—÷ÅVŽ$QšüY݉Qc,ÊNgzrsV¦ŽúÖ&žY ’(ÆçUŒ©ÀêG&¬ VûTŸóéqÿ|Qö©?çÒãþø«4PoµIÿ>—÷Åj“þ}.?EVûTŸóéqÿ|Qö©?çÒãþø«4PoµIÿ>—÷Åj“þ}.?EVûTŸóéqÿ|Qö©?çÒãþø«4PoµIÿ>—÷Åj“þ}.?EVûTŸóéqÿ|Qö©?çÒãþø«4PoµIÿ>—÷Åj“þ}.?EVûTŸóéqÿ|Qö©?çÒãþø«4PoµIÿ>—÷Åj“þ}.?EVûTŸóéqÿ|Qö©?çÒãþø©¤•!Mò0Ué“Q¥ÜNá>tc÷D‘²núd Ð~Õ'üú\ß}ªOùô¸ÿ¾*Í[íRÏ¥ÇýñGÚ¤ÿŸKûâ¬Ñ@¾Õ'üú\ß}ªOùô¸ÿ¾*Í[íRÏ¥ÇýñGÚ¤ÿŸKûâ¬Ñ@¾Õ'üú\ß}ªOùô¸ÿ¾*Í[íRÏ¥ÇýñGÚ¤ÿŸKûâ¬Ñ@¾Õ'üú\ß}ªOùô¸ÿ¾*Í[íRÏ¥ÇýñGÚ¤ÿŸKûâ¬Ñ@¾Õ'üú\ß}ªOùô¸ÿ¾*Í[íRÏ¥ÇýñGÚ¤ÿŸKûâ¬Ñ@¾Õ'üú\ß}ªOùô¸ÿ¾*Í!'rRsù¯ö©?çÒãþø£íRÏ¥ÇýñJ¿jºšd·x£X˜)gRÄœg¦Gb)ÿcÔçîßþüþ*€#ûTŸóéqÿ|Qö©?çÒãþø©>ǨÿÏÝ¿ýø?üUcÔçîßþüþ*€#ûTŸóéqÿ|Qö©?çÒãþø©>ǨÿÏÝ¿ýø?üUcÔGK«cíä‘ÿ³Pj“þ}.?ïŠ>Õ'üú\ß,a F%XzH?¨5%VûTŸóéqÿ|Qö©?çÒãþø«4PoµIÿ>—÷Åj“þ}.?EVûTŸóéqÿ|Qö©?çÒãþø«4PoµIÿ>—÷Åj“þ}.?EVûTŸóéqÿ|Qö©?çÒãþø«4PoµIÿ>—÷Åj“þ}.?EVûTŸóéqÿ|Qö©?çÒãþø«4PoµIÿ>—÷Åj“þ}.?EVûTŸóéqÿ|Qö©?çÒãþø«4PoµIÿ>—÷Åj“þ}.?EVûTŸóéqÿ|Qö©?çÒãþø¥7°p]€à²FÌ£ê@À©ÑÕÔ20e<‚A  ÿj“þ}.?ïŠ>Õ'üú\ßfŠ­ö©?çÒãþø£íRÏ¥ÇýñVh  ßj“þ}.?ïŠ>Õ'üú\ßfŠ­ö©?çÒãþø£íRÏ¥ÇýñVh  ßj“þ}.?ïŠÉ¸Ò¾×x&¹“Uš(”Z¶ß(09qó‚k~Š­ö©?çÒãþø£íRÏ¥ÇýñVh  ßj“þ}.?ïŠ>Õ'üú\ßfŠ­ö©?çÒãþø£íRÏ¥ÇýñVh  ßj“þ}.?ïŠ>Õ'üú\ßfŠ­ö©?çÒãþø£íRÏ¥ÇýñVh  ­vÀ|ÖÓŒú¥rZ/ü„î¿ë»ÿèF»fû§é\VƧuÿ]Ÿùšï-¿ÕŠ(¶ÿV(¦"ÁéXú·ú–úVÁéXú·ú–úP+á¯ù§ÿ®gùì`2yw¾Nß49Ù»¦v.3\w†¿äfŸþ¹Ÿäk«Yš(µB7+’223å¥!™×sèä³oÞªF[÷cÛ8ý8­ëmR—2ŽpxÏQ߯Õ…ö›ÍA2èËÇȃ<ò}‡æh±†I.!+ªŠà³•ÛŒ®rxÏ®M1“ôé‡ý1Oæõ SÝÛxjÚK+?µ\yH3 AÓ©' Ù>ÔçlßÏÿ\#þoV4¡Ðz¿ʥí ÊþÔçÖ|9c¨Ü¤i4ñïuŒ äôÉ&°¥ñV¨ž~¨¶öŸØ_}ÔîóÈÞ#2¸ ~î:µ§£iš®áí'N‰¬šH-Ó9b |çgæé׎µ™/…uGék=§ö,÷ßlv;¼ð7‰ `cn ½ž‡¥^œÞ_ðWéruåþ¼ÿ[¾*ÕÏÕÞÓû ﱺÞyÄf@s·ÝÇAÖ‰|Uª'Ÿª-½§ö$ßcu;¼ò7ˆÌ€çn»Žƒ­øWSq>–³ÚbÏ}öÇc»ÏxÆ6à°ûÙèzQ/…u7ék=§ö,÷ßlv;¼ð7‰ `cn ½ž‡¥(ô¿õ·üêÀï­¿­ÿàW:}SþA7ŸõÁÿôUoïaÓíd¹œŸ-=I$àõ&­jŸò ¼ÿ®ÿ š¯wk ä[ÜF$‰øe=êe{i¹pµ×6Ç?ÿ §üù]ßQñtÂgiÿ>W_÷Ô_ü][ÿ„KDÿŸ7ÿÀ™øª?áÑ?çÍÿð&_þ*¹9q]×õò=|òËðÿ2§ü&vŸóåuÿ}EÿÅÑÿ §üù]ßQñuoþ-þ|ßÿeÿâ¨ÿ„KDÿŸ7ÿÀ™øª9q]×õò|òËðÿ2§ü&vŸóåuÿ}EÿÅÑÿ §üù]ßQñuoþ-þ|ßÿeÿâ¨ÿ„KDÿŸ7ÿÀ™øª9q]×õò|òËðÿ2§ü&vŸóåuÿ}EÿÅÑÿ §üù]ßQñuoþ-þ|ßÿeÿâ¨ÿ„KDÿŸ7ÿÀ™øª9q]×õò|òËðÿ2§ü&vŸóåuÿ}EÿÅÑÿ §üù]ßQñuoþ-þ|ßÿeÿâ¨ÿ„KDÿŸ7ÿÀ™øª9q]×õò|òËðÿ2§ü&vŸóåuÿ}EÿÅÑÿ §üù]ßQñuoþ-þ|ßÿeÿâ¨ÿ„KDÿŸ7ÿÀ™øª9q]×õò|òËðÿ2§ü&vŸóåuÿ}EÿÅÑÿ §üù]ßQñuoþ-þ|ßÿeÿâ¨ÿ„KDÿŸ7ÿÀ™øª9q]×õò|òËðÿ2§ü&vŸóåuÿ}EÿÅÑÿ §üù]ßQñuoþ-þ|ßÿeÿâ¨ÿ„KDÿŸ7ÿÀ™øª9q]×õò|òËðÿ2§ü&vŸóåuÿ}EÿÅÑÿ §üù]ßQñuoþ-þ|ßÿeÿâ¨ÿ„KDÿŸ7ÿÀ™øª9q]×õò|òËðÿ2§ü&vŸóåuÿ}EÿÅÑÿ §üù]ßQñuoþ-þ|ßÿeÿâ¨ÿ„KDÿŸ7ÿÀ™øª9q]×õò|òËðÿ14½n_U@Kþ$*~l¨m'±?_¾»K.íÔ ÑFdS¹[  ðOqYÿÙ6º,âîÆHö2KûÆsɘžOZt÷ò- ÜÏÜÿóé/ýô¿ãW~_ùçýò(ùçœ÷È  _nùô—þú_ñ£íÏÿ>’ÿßKþ5wåÿžqÿß"—þyÇÿ|Š¥öçÿŸIï¥ÿ>Üÿóé/ýô¿ãW~_ùçýò(ùçœ÷È  _nùô—þú_ñ£íÏÿ>’ÿßKþ5wåÿžqÿß"—þyÇÿ|Š¥öçÿŸIï¥ÿ>Üÿóé/ýô¿ãW~_ùçýò(ùçœ÷È  _nùô—þú_ñ£íÏÿ>’ÿßKþ5wåÿžqÿß"—þyÇÿ|Š¥öçÿŸIï¥ÿ>Üÿóé/ýô¿ãW~_ùçýò(ùçœ÷È  _nùô—þú_ñ£íÏÿ>’ÿßKþ5wåÿžqÿß"—þyÇÿ|Š¥öçÿŸIï¥ÿ>Üÿóé/ýô¿ãW~_ùçýò(ùçœ÷È  _nnö²õ_ñ«YËDGBsÿŽšËÿ<ãÿ¾E1¾üSüS7ñéVÖ¡*–Kbe*:œF§SKÖõq«YYk0Ù¨Ô-Ú{slÊà”mÄäá‡#hØGªØkZ|¬U.Iˆ°ê3ŒÕ ]ÄîÞöö]8ÜéörAd#.VI¾Nå õ<з×úßþõq?/ëoø%­SVÕŸ[}+EŽÏÍ‚Ô\Í%ØbI €)'iç·¡­-TMkD³Ô‘ bâ0å ÎÓÜ~5“y¤ë‰©®«§I§ý²{5¶ºŽbâ0À’œn21È­mKMD³ÓQÌ‚Þ0…ÈÆãÜþ'4ÖÚÿ[ÿÀþ®ëËþ ¡EPU±ÄRúm7þŒjÃX†";k™³®ÀzŒ°?¥nZóŸõÚoýÕšÞÑ]Ë" 9ÂÏ"ÀÀ¬jª®Þͯ™Ó‡t~Ù7èSÿ„ÎÓþ|®¿ï¨¿øº?á3´ÿŸ+¯ûê/þ.­ÿÂ%¢Ï›ÿàL¿üUð‰hŸóæÿø/ÿXr⻯ëätóà?–_‡ù•?á3´ÿŸ+¯ûê/þ.øLí?çÊëþú‹ÿ‹«ð‰hŸóæÿø/ÿGü"Z'üù¿þËÿÅQˊsà?–_‡ù•?á3´ÿŸ+¯ûê/þ.øLí?çÊëþú‹ÿ‹«ð‰hŸóæÿø/ÿGü"Z'üù¿þËÿÅQˊsà?–_‡ù•?á3´ÿŸ+¯ûê/þ.øLí?çÊëþú‹ÿ‹«ð‰hŸóæÿø/ÿGü"Z'üù¿þËÿÅQˊsà?–_‡ù•?á3´ÿŸ+¯ûê/þ.øLí?çÊëþú‹ÿ‹«ð‰hŸóæÿø/ÿGü"Z'üù¿þËÿÅQˊsà?–_‡ù•?á3´ÿŸ+¯ûê/þ.øLí?çÊëþú‹ÿ‹«ð‰hŸóæÿø/ÿGü"Z'üù¿þËÿÅQˊsà?–_‡ù•?á3´ÿŸ+¯ûê/þ.øLí?çÊëþú‹ÿ‹«ð‰hŸóæÿø/ÿGü"Z'üù¿þËÿÅQˊsà?–_‡ù•?á3´ÿŸ+¯ûê/þ.øLí?çÊëþú‹ÿ‹«ð‰hŸóæÿø/ÿGü"Z'üù¿þËÿÅQˊsà?–_‡ù•?á3´ÿŸ+¯ûê/þ.øLí?çÊëþú‹ÿ‹«ð‰hŸóæÿø/ÿGü"Z'üù¿þËÿÅQˊsà?–_‡ù•?á3´ÿŸ+¯ûê/þ.£¸ñ„ÛKV·)#! ţœpxlÕÿøD´Oùóü —ÿЍçð–’`AlÉ1S±Œò±Ájj8›ê×õòžÚFWþ¼ÍÏ´ÅlÑÛª…@u:ŸÒ¨Gr`º¼… wD—åÚT•V#“êIüj¨…ßæ†ÐüÊ]†ßÀëVôøÜ æ–5y…eÉj¯?–ë<ðûsÿϤ¿÷Òÿnùô—þú_ñ«¿/üóþù|¿óÎ?ûäP/·?üúKÿ}/øÑöçÿŸIï¥ÿ»òÿÏ8ÿï‘GËÿ<ãÿ¾ERûsÿϤ¿÷Òÿnùô—þú_ñ«¿/üóþù|¿óÎ?ûäP/·?üúKÿ}/øÑöçÿŸIï¥ÿ»òÿÏ8ÿï‘GËÿ<ãÿ¾ERûsÿϤ¿÷Òÿnùô—þú_ñ«¿/üóþù|¿óÎ?ûäP/·?üúKÿ}/øÑöçÿŸIï¥ÿ»òÿÏ8ÿï‘GËÿ<ãÿ¾ERûsÿϤ¿÷Òÿnùô—þú_ñ«¿/üóþù|¿óÎ?ûäP/·?üúKÿ}/øÑöçÿŸIï¥ÿ»òÿÏ8ÿï‘GËÿ<ãÿ¾ERûsÿϤ¿÷Òÿnùô—þú_ñ«¿/üóþù|¿óÎ?ûäP/·?üúKÿ}/øÑöçÿŸIï¥ÿ»òÿÏ8ÿï‘GËÿ<ãÿ¾EC¾l%¶•ê=EqÚ?ü….¿ë³:í[îœ:\Vÿ!K¯úìß΀;ËoõbŠ-¿ÕŠ)ˆ°zV>­þ¥¾•°zV>­þ¥¾”ÊøkþFiÿë™þFº¶Žx¦‘àȲÌŽÅppAöŠä¼=—ÄwY”ú©Áï]CÇm•3Ü–B±l~BÉ7^ÿÏ­¿þ7ÿFëßùõ·ÿÀ†ÿâ*[Ï[ßûå¿øš1mÿ=o?&ÿâhÄÈIg+æHÂòFp3ß©9÷§B·VЬ0ω<%ˆ™ ?•Eöx ~gÚ'Ù×w˜1ü©>Í÷¯&ÿâhÏ™ÿ?ßøßü]eÿüü[à;ñu[ìÑÿzûþùoþ&”[D[o›t¬zb¹üÅXó/ÿçâÛÿÛÿ‹£Ì¿ÿŸ‹oüoþ.«›hCÝ3¡X¶?!Iöhÿ½}ÿ|·ÿ@J·W´Sω¸p•$zd±þU5Sû4c«^þMÿÄÒýš/ÌûDû=|ÁþnЧöhÿ½{ù7ÿGÙ£þõ÷ýòßüM\¢ª h‹món•@ÌW?˜§8ÔdÍpýtÿëPš*¯Ùû÷™ÿ >ÈŸß»üÏøPª*¯Ù#Î<Û} cúQöHó-É#°lÿJµEUû"~ïó?áGÙû÷™ÿ µEUû$[wyóã×ÌÿëQöDþýßæ€-QU~ÈŸß»üÏøQöHó6äBØþ”jŠªÖ‘"–içw2õ©¿fû׿“ñ4rЧöhÿ½}ÿ|·ÿJ-¢-·ÍºV=1\þb€-ÑU ´!Љn™‡P¬[¤û4Þ¾ÿ¾[ÿ‰  • ½¤»ü˜Âo98ÿ==ª³F:µïäßüM/Ù òüÏ´O³×Ìá@èªfû׿“ñ4}š?ï_ß-ÿÄÐÊ* ¶„¶ß6éXô ÅsùŠ ´!Љn™‡P¬[  tU?³Gýëïûå¿øš>Íê׿“ñ4rŠ©öh<¿3íìõóøR}š?ï^þMÿÄÐÊ*ŸÙ£þõ÷ýòßüM(¶ˆ¶ß6éXô ÅsùŠ·ET6І*%ºfB±l~B“ìÑÿzûþùoþ&€.QTþÍê׿“ñ4¿fƒËó>Ñ>Ï_0…[¢©ýš?ï^þMÿÄÑöhÿ½}ÿ|·ÿ@(ª‚Ú"Û|Û¥cÐ3Ïæ(6І*%ºfB±l~B€-ÑTþÍ÷¯¿ï–ÿâhû4c«^þMÿÄÐÊB2Ê}ô"«-¤N¡–yÈ=ÄŸýjŠU³¶Ë{"F˜é@V9¡–G·•Í!œInqŒŒ0ì?Ì¿ÿŸ‹oüoþ.³üÝ7þ‚'þÿð£ÍÓè"ïøÿ Ðó/ÿçâÛÿÛÿ‹£Ì¿ÿŸ‹oüoþ.³üÝ7þ‚'þÿð£ÍÓè"ïøÿ Ðó/ÿçâÛÿÛÿ‹£Ì¿ÿŸ‹oüoþ.¨«éîÁSPfcÐ Ç?¥XûóÚãþþõ¨h¢Äq’IêI9'ó&ŸU¾Åüö¸ÿ¿Ÿýj>Åüö¸ÿ¿Ÿýj³EVûóÚãþþõ¨ûóÚãþþõ¨Í[ìQÿÏkûùÿÖ£ìQÿÏkûùÿÖ  4Uo±Gÿ=®?ïçÿZ±Gÿ=®?ïçÿZ€,ÑU¾Åüö¸ÿ¿Ÿýj>Åüö¸ÿ¿Ÿýj³EVûóÚãþþõ¨ûóÚãþþõ¨ÍÏ뺵‡‡þÏö³~þ~í¾S)ÆÜg9Ǩ¬øN´OîjßøçÿYJ½8¾Y=NyâèÓ—,åfwWÿ Ö‰ýÍ[ÿÿâ«®kH‘K4ó€;™?úÔáV>réW§VþÍÞŪ*ŸÙ£þõïäßüMfû×ß÷Ëñ5¡©rЧöhÿ½{ÿ|·ÿGÙ£þõïýòßüM\¢©ýš?ï^ÿß-ÿÄÑöhÿ½{ÿ|·ÿ@ÉiÓÇ;ÆDû¦§ªfû×ß÷Ëñ4xGÞ’íG«dÌŠ¹EVûóÚãþþõª»>žŒUõVAœ…hÑYžn›ÿAÿÇøQæé¿ô?÷ü…iÑYžn›ÿAÿÇøQæé¿ô?÷ü…iÑYžn›ÿAÿÇøQæé¿ô?÷ü…iÑYžn›ÿAÿÇøQæé¿ô?÷ü…iÑYžn›ÿAÿÇøQæé¿ô?÷ü…iÑYžn›ÿAÿÇøQæé¿ô?÷ü…iÑYžn›ÿAÿÇøQæé¿ô?÷ü…iÑYžn›ÿAÿÇøQæé¿ô?÷ü…iÑYžn›ÿAÿÇøQæé¿ô?÷ü…i7Ý?Jâ´ù \ÿ×fþuÔ$0Ox.åp;‰Ëèÿò¹ÿ®Íüè¼¶ÿV(¢ÛýX¢˜‹¥cêßê[é[¥cêßê[é@¯†¿äfŸþ¹Ÿäkª² ¬¤ŒŸ5ÿô"+•ð×üŒÓÿ×3ütv„—þ»Iÿ¡µ!š_/÷JcK ʱQ#ʧ‚@ÆHÙ˜¯+ñt³¿ˆ¯bµ³73æäÄï¶3û¸à6rkODÓÓKÖ¼<«G4š|í6æ$–Ýsšwcí¥ù~ÓÓþÙnþ|Ö±`$à Ŷoôóÿ_gÿDT>$:Û%£hÓ[FlÜùé¸ÇÔdzŒ¯ zn³§êñÊú}ÜW ˜ßËlíaØÿ1ê5-ö>Î9&¦Xë^gá‡Öeýæ}¤Iê³Å·‡Æ^N§yà‚ B9 s鯛AëæÇÿ¡­-´¢+&‚I‘†Rwò'™wÿ<`ÿ¿Çÿ‰¬÷˜E¦+ÓØœø¬«û+ë‹§ÖQå‹ìò-¨""¨ Ç»fyngð ™gH©4h»Î£îÆpxüª§QÙ—í?ížïçÍTµšxÍŒWNí)¹q—Û»e+¼gh*}ßñ4ÿ·Ÿý¡@Úy ŒÆ°á‹¾ÑœgƒØÎ“Ì»ÿž0ßãÿÄÖMÔÓÉöèí’E¸A¹6îÛ¶"ØÝÆv“Ö¢ŒÝ¥Ì,·Íf2­Á·ÚWkcs»mkÜʲ٬€`‰T`õS¼)ÌSOúÈÿÞ?ÈÕT˜K¥³Óá”ø«.q$_ïýÐÍ" Ë Ã(#k:òIN~ïðš„\Ï #s°ô4ƤßêóÜ2ÿ0(„þïêÍüÍCæ¬ÖÂEèÌ¿ú¥Yvå@Íÿ¡°\*’z ÕÆTñYÍ4®ŒrJÎ1Nµ‘Ú^>ïñfxûF;yŸû&Ožj®Òí§þÓ¨î1-ÔQIþ«°z1¿­/f£›ý^{†_ædqöÏ/ʇÉóq¿É÷ÏOÃ5~#ÿèÝùŠ”ÿÇŰ= ‡ÿAcý*ök=Î.­?ë©ÿУÖ5ˆô«mä™ò#8ÉîI죹þ¤ jïD'¡KÄ^5Ò¼2ëá–IJ‡d„)(§¡9#®SƒÅiÉu î—oynÁá—Ê’'ª±?ˆ?­yÇü!1øÏRMZîyⳑÃÜp»`0 ÿqwÈð#è³G¶™¼#Š&…¢¨u‡ -K'ýžæGÏýôGô¨oõ{M7þ>n¹öÇó4ëÅ©ÿ®²èm^wâMFï8y6ßê)Ö²nËó’W°P@÷Ü}ë:•U5y +³Ð4½j×WG{R̈p[¶i8ŽÌ|¿héÿl÷>j—…t¥Ñt+{mÅäÆçb0I=jÎïøšÛÏþЭŠZߊ›C×ì,§Ó¤{+¨Üo¸£®0‚0 19*k_Z\^Am-µå¡¸%ak˜Â Àäq“ȬÉ-ÏĽx(-'™ãnY2UsÓ©ãô ëYž2¼µ‹R•ogŠ ¾Ah†æàìdûÞi#ìƒS)r«+ž}³ƒŽD‰ƒé–úÓ-æH,%žC„F‘±žOaUy§Ðí¤¹ËŒ&DÎpÛ×"œÒlÐî›vÜ Îï7ËÇÌßÅü?^ÝiˆTñšå6Í'Ͱ Àãåx÷ÏÝÏY±¿˜Co#´†?7kDéòçä öëÐô5Á}¢&n$RIÃîÎîG=óÛÖ¶<+pªÊU`m÷õ±ûݺw¦EÀÔvcåûGOûg»ùóSjš€Ó4énÙ7ˆñò“É“ƒÏ¡ª»¿âiÿo?ûB¨ÝÎ.uÙm¯ŸÊ†[#}ÙxåýÈ y„rN;ãÍkiâÒÚðÝÆöá^IeÜ|ÆfÆÖ 9 1Ž{ ¢ÿ5›ÀÔvcåûGOûg»ùó\w…5­N=nßL¿{–Yá2§ÚNX¯8=I‚Ïå]nïøšÛÏþЩNåÊ<¬ŸUÖ´ýÙnu•‚&q±å@Ò±m¾#xNîUŠ ff•aGÆòp8À9­ëˆ­î6ãGò›z–Úq×ò&¼á­­ÅωíîbŽT7þhW÷ üpA§vIë·¤`Þ’&Õ€þF–Äÿ£ÜÈùÿ¾ˆþ•ë²?ç¬úÒØ¾-Oýu“ÿCjY–â84Ž´g¹ôôðàô¯7‹TŽÞÿí”/>¡4Æ/5",`Ç 3ü¯¯¾yÉ®‹Â²_iBêYÞId;›ºo!1í·ñÍ…À¸¹€$éõU?Ö"4kY$(¥Úi2ÄrpÄÐ jÝ]ÿ×Qÿ -6ÆÚ+Íkiä–U`®T‘¼÷@c¸³–)%Žh8Ë+º°!Jõö#½6ÊòÃQ„Ícsmu;KÀêê¦EyëÁ¯€5‹x£ÙE¬ºJˆ0p¡‡Ónsí[–W:uŸŽ59­¦µ‚ÀX@.]V1)v “Ó;qúSZÿ^W%»_úëc£ŸPÓ-nâ´¸¼´†æ_õpÉ*«¿ÑIɤ—SÒ ½K)¯¬ã»|låPíŸE'&¸_ZO§¦ºÂ-:ïû\"À%˜­ÂI´*ª(S»‘¸r1ÏÖ®øÞ žó$›N"ÞÆÀ ‰J• #çåcŽ>RyàŠõýy ïc·’ÞcdxÑ•†"³¬Ý¤°¶v$³D„“ÜàVš6øÕ°F@8=EbƳ¾ƒÛ2¬æÕDlÝlã?' ã©z¡¸•ÓËŽwa¡¼ˆo³ç=ó¶µá†(áEHÑT(À±e9ðãúuÿÙku?Õ¯ÐRC ‰ýÅü¨ØŸÜ_ÊE1 ØŸÜ_ʉýÅü©ÔPv'÷ò£bq*u݉ýÅü¨ØŸÜ_ÊE7bq*6'÷ò§Q@ ØŸÜ_ʉýÅü©ÔPv'÷ò£bq*u݉ýÅü¨ØŸÜ_ÊE7bq*6'÷ò§Q@·H±ê ±Bù9l g1ÿ¡θÝþB—?õÙ¿v—¿òƒþ¸Kÿ¡G\^ÿ!KŸúìßÎå·ú±EßêÅÀ°zV>­þ¥¾•°zV>­þ¥¾”ÊøkþFiÿë™þF·-Ûå˜g‘<¹ÿ¾Ú°|<æ?Ü0Fr#ûª2OZé&†)ä2=•ØsÔÆY3õÚFi ÁŸC¾kû‹»}rîÜÎAeH <€2c'qɧÙèwj±_Þj·7²CG•cP¡Š“÷Uº:Ö¿ØàÿŸMCþÿKÿÅQö8?çÓPÿ¿ÒÿñT[8ûVü¦ô€íŽ?Ÿ¨Äæ©‹n-ÆŸ0ˆËâ£òÇüðÔïô¿üUMgakaæ}’Ú8DŽ]ö.2Ç’i÷þŽ«žZh°=~p5[ÊóÃQÿ¿òÿñTèÕcH-/ÇC!wÇÓq8 òóM’åOœä2ã(ÂRÊ~ àÔB-iFúÃõäÿÒZ’EY¹´¼V=LeÓ?]¤f›åùá¨ÿßùøª ³»k¸§½¹†S-C Œ Ç,Äœ:ަ¼ýù~׌ÿÛ >)¾RÿÏ GþÿKÿÅT™O³ˆ>Á7”?‡eGqet.åžÊæüâDž"– Œ2pêz ìúÇüþéãÜY?ÿ©<±ÿ<5ûý/ÿG”?熣ÿåÿâ¨þBÙé±[«³“:ÍÕØÈþ„jܧBÛ?ú ªqªÇ Z^3ކBï¦âqS4ìêU¬ç ÿ±@È‹"•qi­ 4^Q_“ÅC¼ÿϽïýôÿãFóÿ>÷¿÷ÓÿJʱ@± ÀÞ ø?ãJd…•¹Û#þj%r¬ì—E‡BÛ› !f-öK OR¡—?•L#Q–åô¥DX×jŒ ¯¼ÿϽïýôÿãFãÿ>÷¿÷ÓÿI¸yùÏv3ÿlñüéòF²Œ8È#œ`Ô^oîü¿±O³Óe7yÿŸ{ßûéÿÆ€%òÖOûúßãJáREàn@£èÃú ‡yÿŸ{ßûéÿÆ•\«û%ÑaжæÇç@\6Û‹2HÎ#Ÿ÷©_è–ºú]]y’@žIoݶ 9#¿_\àÕ©%3FRK)ÙOPR òÇüðÔïô¿üU°X¼2 0AQ^?ú:®yi¢ÀõùÁþ@Õo(Ï GþÿËÿÅS£UŽA ´¼g …ßMÄâ€'³ôfò&”o«'Lð¶Ÿ¥Ü4è4˜ )ÜcAÑG ~EY¹´¼V=Le“?]¤f›åùá¨ÿßùøªÐREQÞ þü¦ïÿ¶þ|S|¥ÿžýþ—ÿŠ©2‚ÜAö ¼¡ü;(…ׇ–oZë±ÝÍ ÆÑ¼ ÷&Î9o~ä*—‰|‰/­n¥¼–ÄûUA å¹q×ÜÖÇ–?熣ÿ¥ÿâ¨ò‡üðÔïü¿üUXºm¶±¦y2Äõéþ@š[RÑÐà6Pïñ·_Àﻂ Z^3ކBï¦âqDв9six¬z˜Ë¦~»HÍXð‚‚1¸Â1ÓòíNŠ(¢`c‰´mP8Îqôª~Pÿžýÿ—ÿŠ£Ê_ùá¨ÿßéøªvðo÷ämû^3ÿl1üø§jz|:¥±†mÀƒ”‘±ÖŒ§ÙÄ`›Êò£òÇüðÔïô¿üUVƒÃÖ¶º%Λ eûDn’LÜ»'¹æ¤±°þÈðýž›çy¦'‰íÛ¿÷€ž>™üª_(Ï GþÿËÿÅS£UŽA ´¼g …ßMÄ╺ŽîÖ'³oôfò&”éóµeKá‹ uU¾a&·ù¿w¿ûû}jôв9six¬z˜Ë¦~»HÍ7ÊóÃQÿ¿òÿñTÄA&ˆ$ñM¶´'*a·0y;8<“œçަ¬ïÿ~Fßµã?öÃÏŠo”¿óÃQÿ¿ÒÿñU&Sìâ°MåáÙJÃm½Ë3Æ—I ¨²E"”taÀŒk/Kð֢ܽƛ§Ak+¬Ñ RG¡ÇÐTþXÿžýþ—ÿŠ£ÊóÃQÿ¿òÿñTÄY¼ôu\òÓEëóƒü¢Í¿Ñ˜ÈšPG§ÎÕj±È$—Œã¡»ã鸜Q"¬Ž\Ú^+¦2韮Ò3@1x'D76Ÿm”‰n±#×ǯ>ä’rI®‚’T(à*Ÿ”?熣ÿåÿâ¨ò—þxj?÷ú_þ*€-[¶ùïr ÀôEõ—O»¶´·xn."†A,‡lŽà± óìj8¥òcXã²Qz”ÿµÉÿ>·÷Á  RçFŠ)"ŽkŽVf‘U-÷‰ÉïëPG†á³k8£Ò’Õ›sB¢0„ç9+Ó9ö¹çÖçþø4}®_ùõ¹ÿ¾ 8>„/ðm;ídm7O0MÝj9!ðÜ×ÂúXô—¼pËc§ÍÖö¹çÖçþø4}®_ùõ¹ÿ¾ ZmVÀ)+yœp© $û:Õ{HÚ++xÜa’%Và oÚåÿŸ[ŸûàÒ}ªOùô¸ÿ¾(ÍEqn—1ß>¡‡U>¢£ûTŸóéqÿ|Qö©?çÒãþø  X]I9Žá± õu82{Oz×UTPªP0íUþÕ'üú\ß}ªOùô¸ÿ¾(Í[íRÏ¥ÇýñGÚ¤ÿŸKûâ€,ÑU¾Õ'üú\ß}ªOùô¸ÿ¾(Í[íRÏ¥ÇýñGÚ¤ÿŸKûâ€,ÑU¾Õ'üú\ß}ªOùô¸ÿ¾(‰ø›ÿ0¿ûkÿ²WŸ×¯ëº-¿ˆ>Ïö¸/ÓÈÝ·Êgv3œƒè+þ-/ûº·þ;ÿÄ×—ˆÂT©UÊ;7/­Z¼§ ¿#Î+Ýî-Å™$çÏû\ü Z_÷uoüwÿ‰®¶ILÑ”’ÊvSÔ­ðt'K››­Ž¬· SÍí:Ûõ÷N°ÔMí…­É_ºg…_LŠI´û+‹xíç±¶–þäRB¬«ô`T^Xÿžýþ—ÿŠ£ÊóÃQÿ¿òÿñUÚz„ÉciK;uA ”*Ä §_~´³YÚÜyž}¤ùªMñÞ Ž@Éüê(Ï GþÿËÿÅQåùá¨ÿßùøª±kimc•gk´yÎÈc3ëQÞiÖ:C{aktS;|øUöç®2*?(Ï GþÿËÿÅQåùá¨ÿßùøªEÒ¤·ŠÞM*Åá‹>\ml…S=p1Ÿj³gkg¦ÄÉkmokK²Ã¢ç¹ j­åùá¨ÿßùøª (x{[çÝ’IOÔƒ@òÝü<" L†Ø(^ùÛZI©ØÔÛu8 }AéU>Õ'üú\ß¿k—þ}nïƒ@ÿµ4ÿùþ¶ÿ¿Ëþ4jiÿóýmÿ—üj§ÚåÿŸ[ŸûàÑö¹çÖçþø4oûSOÿŸëoûü¿ãGö¦Ÿÿ?Öß÷ùƪ}®_ùõ¹ÿ¾ k—þ}nïƒ@ÿµ4ÿùþ¶ÿ¿Ëþ4jiÿóýmÿ—üj§ÚåÿŸ[ŸûàÑö¹çÖçþø4oûSOÿŸëoûü¿ãGö¦Ÿÿ?Öß÷ùƪ}®_ùõ¹ÿ¾ k—þ}nïƒ@ÿµ4ÿùþ¶ÿ¿Ëþ4jiÿóýmÿ—üj§ÚåÿŸ[ŸûàÑö¹çÖçþø4oûSOÿŸëoûü¿ãGö¦Ÿÿ?Öß÷ùƪ}®_ùõ¹ÿ¾ k—þ}nïƒ@ÿµ4ÿùþ¶ÿ¿Ëþ4jiÿóýmÿ—üj§ÚåÿŸ[ŸûàÑö¹çÖçþø4oûSOÿŸëoûü¿ãGö¦Ÿÿ?Öß÷ùƪ}®_ùõ¹ÿ¾ k—þ}nïƒ@ÿµ4ÿùþ¶ÿ¿Ëþ4jiÿóýmÿ—üj§ÚåÿŸ[ŸûàÑö¹çÖçþø4égŠêõ Xã…ÕFX®}~S\~‘ÿ!KŸúìßκǻ||ÖÓŒú­ršGü….ë³:wvßêÅ[«SÁéXú·ú–úVÁéXú·ú–úP+á¯ù§ÿ®gùéííVKHšW¸Þñ‚ÄÌà䃟îãïÃp6€9 ÈÍ?ýs?È×[d»l-—nÜD£qŽl.?!ô) Ò6Ý–›œç¸ë»ß¼OîŒEv–¶¶—WÌÄ$Œ&“åP“€sÑOAº1r²¼Mÿ"¦±ÿ^3è€-S '(lðndÞ>ñúqýÑ…kBÛ³žsœ]H:îü¾ñý?º1Ëê²^]Ïâ+ÄÔnmΖ¶Ž) ¦DaÉuèÙ'ö®®Êsscop˴˹™¡mpÖ…·g<ç8ºuÝù}ãút`kBÛ³žsœ]H:îü¾ñý?º1jŠªÖ…·g<ç8ºuÝù}ãút`kBÛ³žsœ]H:îü¾ñý?º0ëÈõ >Úö ËÄK* 0gßš±@ZжìçœçR»¿/¼OîŒ h[vsÎs‹©]ß—Þ?§÷F-Q@ZжìçœçR»¿/¼OîŒ h[vsÎs‹©]ß—Þ?§÷FoyÌ÷q `Ö²ˆŸ#‚J+ñ퇎jÅUkBÛ³žsœ]H:îü¾ñý?º05¡mÙÏ9Î.¤w~_xþŸÝµEUkBÛ³žsœ]H:îü¾ñý?º05¡mÙÏ9Î.¤w~_xþŸÝr^Fú„Ö@7™QÊÄŽràcßä?¥X  ­h[vsÎs‹©]ß—Þ?§÷F´-»9ç9ÅÔƒ®ïËïÓû£¨  ­h[vsÎs‹©]ß—Þ?§÷F´-»9ç9ÅÔƒ®ïËïÓû£{ÈÓP†È†ó%ŠITÀPûüãõ«U­ nÎyÎqu ë»òûÇôþèÀÖ…·g<ç8ºuÝù}ãútbÕŸt±ÛÇæNåÝcȹ—ï;Ç2cÛŽ›F&kBÛ³žsœ]H:îü¾ñý?º1SÄò ‡þ¿­?ô¢:ǘ½Ÿˆæ¸ÕFª–Ó]"ÚÍÛ}~UYøËgªãš:Ø:\èÚжìçœçR»¿/¼OîŒ h[vsÎs‹©]ß—Þ?§÷F8ù®¯~Áuât%‡Q0­°ù^P”G°§BHÉÏ\Ñ5ÝïØ.¼@/î„°ê>JÛ •å D{ t$ŒœõÍ []¿ÌMÛúõÿ#°kBÛ³žsœ]H:îü¾ñý?º05¡mÙÏ9Î.¤w~_xþŸÝuõäz~Ÿs{(c¼M+„$($ãߊ±@Ê­h[vsÎs‹©]ß—Þ?§÷F´-»9ç9ÅÔƒ®ïËïÓû£¨  ­h[vsÎs‹©]ß—Þ?§÷F´-»9ç9ÅÔƒ®ïËïÓû£ª½äz†Ÿm{eŽâ%•Œ3ïÍ5­ nÎyÎqu ë»òûÇôþèÀÖ…·g<ç8ºuÝù}ãútbÕU­ nÎyÎqu ë»òûÇôþèÀÖ…·g<ç8ºuÝù}ãútbÕW·¼Žæ{¸0kYDO‘Á%øöÃÇ4Ö´-»9ç9ÅÔƒ®ïËïÓû£ZÝœóœâêA×wå÷éýÑ‹TPV´-»9ç9ÅÔƒ®ïËïÓû£ZÝœóœâêA×wå÷éýÑ‹U]/#}Bk ÌŠ(åbG9p1ïòÒ€Ö…·g<ç8ºuÝù}ãút`kBÛ³žsœ]H:îü¾ñý?º1jŠªÖ…·g<ç8ºuÝù}ãútb?µ¥«9L"¨¹”eAÃ(ý1÷F4+&è1ñM€R}‚ëŒàï‚€.5¡mÙÏ9Î.¤w~_xþŸÝжìçœçR»¿/¼OîŒsÞêe¿Š¤šöKÉìÕ^6q…SåáGg·çš­yw{᥆X¯î®ÍÎ<Î.$2*(`럺9<:Qý~ v h[vsÎs‹©]ß—Þ?§÷F´-»9ç9ÅÔƒ®ïËïÓû£}åÝb¿º»7:tó8¸È¨¡ƒ®~èäð8éV#º—ú®³_^^E¨ÆU–O3–EW\ýÑ—ä1Úµ·õ×ü…}/ýtÿ3¨kBÛ³žsœ]H:îü¾ñý?º05¡mÙÏ9Î.¤w~_xþŸÝµE!•ZжìçœçR»¿/¼OîŒ h[vsÎs‹©]ß—Þ?§÷F-U{ëÈôý>æöPͼM+„$($ãߊkZÝœóœâêA×wå÷éýÑ­ nÎyÎqu ë»òûÇôþèŪ(«ZÝœóœâêA×wå÷éýÑ­ nÎyÎqu ë»òûÇôþèŪç¯üqáí2ö[;Ûö†â#‡F·—üw‘î(]­ nÎyÎqu ë»òûÇôþèÀÖ…·g<ç8ºuÝù}ãútatëèµ=6Úú‘b¸dQ"í`Ï#üJ³@ZжìçœçR»¿/¼OîŒ h[vsÎs‹©]ß—Þ?§÷F-Q@ZжìçœçR»¿/¼OîŒ h[vsÎs‹©]ß—Þ?§÷FoyÌ÷q `Ö²ˆŸ#‚J+ñ퇎jÅUkBÛ³žsœ]H:îü¾ñý?º05¡mÙÏ9Î.¤w~_xþŸÝµEgíŽK¹­CŸ9du2Œ+™9Æ:ïéÓ¦5¡mÙÏ9Î.¤w~_xþŸÝ RiüÐZжìçœçR»¿/¼OîŒ h[vsÎs‹©]ß—Þ?§÷F-Q@ZжìçœçR»¿/¼OîŒCÇs%Ìhä¼/åÊÌ£kÝŽž’ÇN?º1¡\áŠ_k›éìíã¾W’HeòÎÑmºôÁ  –´-»9ç9ÅÔƒ®ïËïÓû£ZÝœóœâêA×wå÷éýÑŽJ)u/ì» 7»¼ŽCQ)²9­¶ÒÀê ÛרÖ˜÷w±_Éáõ¿ºòŽ£"äÈL«Dd)¿®r1ž¸4íý}ßæ+ÿ_ùƒZÝœóœâêA×wå÷éýÑ­ nÎyÎqu ë»òûÇôþèÇ÷w±_Éáõ¿ºòŽ£"äÈL«Dd)¿®r1ž¸5³áë™UÖty.&¸[#h¤™·6É;KN={Kúü¿Ìf»ZÝœóœâêA×wå÷éýÑ­ nÎyÎqu ë»òûÇôþèŪ(«ZÝœóœâêA×wå÷éýÑ­ nÎyÎqu ë»òûÇôþèŪ®÷‘¦¡ ‘ æK’©€ 9÷ùÇë@ kBÛ³žsœ]H:îü¾ñý?º05¡mÙÏ9Î.¤w~_xþŸÝµEUkBÛ³žsœ]H:îü¾ñý?º05¡mÙÏ9Î.¤w~_xþŸÝµUï/#±e”1V–8†ÑÎ]Õá–ö µ¡mÙÏ9Î.¤w~_xþŸÝжìçœçR»¿/¼OîŒZ¢€*µ¡mÙÏ9Î.¤w~_xþŸÝжìçœçR»¿/¼OîŒZª÷בéú}Í졚;xšW2HPIǿִ-»9ç9ÅÔƒ®ïËïÓû£ö¤†$1ÎrêA×wOO¼OîŒ[¢€(6Å’V•••å'®ØÁo~Àð¯3¤ÈRçþ»7ó®Û¨ÝŒÜØÏîϸÏä~Ç1¤ÈRçþ»7ó îÛýX¢‹oõbŠb,•«©o¥l•«©o¥r¾ÿ‘šúæ‘®¶ÉvØ[.ݸ‰F6ãØ\~Cè:W%á¯ù§ÿ®gù»¯ùIá˜Ä–vóº¬ÁÌ!‘$s°1R£¦zmAÒΞ«ßYǨi÷6R–Xî"hœ¡Áü×+¦hz|åÎ}§é·˜·Kˆ§:|1°•*v¨FGÖ´ô¸cµƒ]´Dvð\•Š%XÔÁ pYÔ“Þ€3¯|©ß\K+ëpF· «sVn©8^›¿{žœpG²¶ºò¨UÔôÐÀN~?ò5y½æ£2î÷\usY[@u¼ºÿ¿­þ5Ÿµ+”õ /\Óôûk(µk¼KÓÜ’3ûî¼Tÿfñý4ïü¿ÿ¯+ûV¡øû¸ÿ¿­þ4†ö÷þ~î?ïëÕ Ç§Xéz柧ÛYE«X­âX¶žä Ÿßuâ§û7ˆ?è)§à½ÿøõyGÛ¯³ÅåÇýýoñ¬ïxWÑt­BÆúE¹‡fÆ Te€?+‚§‚zŠK°±ì6z^¹eE­`U¥’S»O|åÝœÿËn™cSý›ÄôÓ¿ð^ÿüz¸#FÖ5‹g¸‚ÿb+”"IœàÀúÖ¢øK[þ-F?ûüÿáO¾cnßK×-§»•5k×2‰_:{àŠœ~û¦~µ?Ù¼AÿAM;ÿïÿÇ«<)ª½~§þÚ¿øTáëØ yäŠXâVÏéG3ì4-ô½rÚ{¹SV°-s(•󧾩ÇïºaëSý›ÄôÓ¿ð^ÿüz¹ om-×ê1EÛ÷“üÍS—Å,—Ö-ß|©<Ãù.j=² ¢izâj^ZÃÍ–(âaýžøÂ#¾ëóŸÒ§û7ˆ?è)§à½ÿøõyµâ·Õ/­-ô{›„·÷Ë2–Œ¿Pw9ö­8ïnÊô©ºÏCG¶ò)该ë¨Czuk6(¤‰Gö{ãPœþû¯È?ZŸìÞ ÿ ¦ÿ‚÷ÿãÕçžÔõƒ,ðøŽö[ý_˜äüz¸ëÉuû;ë‹WÕ/Ù •â,·‚T‘‘ÏN+mmrzØ÷ÒõÇÔ!½:µ‡›RD£û=ñ‡(N}×ä­OöoÐSNÿÁ{ÿñêðUº×Ï?Ú:‡ýÿñ§ý¯\,ªuð ëç¿øÑivÜ.4½ræ{I_V° m)•1§¾ (ÉÏïºaÏéSý›ÄôÓ¿ð^ÿüz¼íºÙ¹—RÔJnGžøè3ß×5ØhqjOK5åÔŒß1/+ÄÑ·kÑ\ôKÍ/\½b—V° ²Ç(Û§¾rŽ®?å·L¨¬ùü-­Ý^,×>#Žx–Q2Û=›yAÈàJ ôâ¹;¸ï›V”¥ÕÂǨÚ% g“Ó4¦;æ[«§šßãWÈ÷#,þ Ôç»3nÃMr·Ml–Må4ŠAÉ\òG#8üy§¿ƒõ'¾iεn"iÅËZ‹'òZQÎâ<Üõã8ÏjóŸ.±œò[ê±¼?É;ŒÔp}3\rëñòÔð%ÿÆ¡Þ,¸®cè«í/\Ô4û›)ukÄM•ÓÜqûî¼Ôÿfñý4ïü¿ÿ¯œÆ©®õþ×Ô1ÿ_/þ4‹­ë'?ñ8¿àãþ>_üj9Ëä>û7ˆ?è)§à½ÿøõAc¥ëš~Ÿme­`b·‰bBÚ{’B€}׊ù͵íqf ºÍùÉà}¡ÿƨj^!ס¿‘[Ô‚ð@oÆî‡Ô_fñý4ïü¿ÿ¨,t½sOÓí¬¢Õ¬ Vñ,H[OrHPÏïºñ_,ÿÂO¯gwSünäÿFñ>¿å65ÝOpçþ>äÿ«‰ÆÇÕßfñý4ïü¿ÿ¨,ô½rÊŠ-ZÀ«K$§vžùË»9ÿ–Ý2ƾMoø—9þ«ÿ’Kkâ>}sT?[É?ƙ֟fñý4ïü¿ÿ¨-ô½rÚ{¹SV°-s(•󧾩Çïºaë_2¯‰5ÎúÖ£ÿOþ4ïøHõÌcûgRÿÀ§ÿçÓÿfñý4ïü¿ÿ¨-ô½rÚ{¹SV°-s(•󧾩Çïºaë_3k¿ôÔð)ÿƯÙx‹Ybê×Äg©¹ñ§`¹ô‡Ù¼AÿAM;ÿïÿǪÒõÄÔ&½µ‡›,QÄÃû=ñ„.F?}×ç?¥xJëZ¯ý/?ð!¿Æ£¹Öµa+ªÞƒžÓ¿¡÷¥/u\p÷¤¢}öoÐSNÿÁ{ÿñêô½qõoN­aæÅ‘(þÏ|aÊŸßuùë_<\ëúÊÙåukð}EËç§Ö­ø_]Õ.5 t¸Õ/<Ì6û‡lŒ}k](óXèú³½®}öoÐSNÿÁ{ÿñêô½qõoN­aæÅ‘(þÏ|aÊŸßuùë^]%ýèa'Ûn0p%8þtáy|¯ÿ×sÁ•«“ûJÊiõ9w=!4 YfÔ$mNÂA9Or¸ ·÷Þ•™u¸·š}r¯³£GOfÌ©#!Oõ£Œ7~x×5íî w…$#®=ë”—ZÕF¦QuKÝ»Ëç¶;óŒÕCÝr‡ÔåÜö;OêVÌÆ]jÞìyÙæÉØG꫉G^99¦ûžÅöoÐSNÿÁ{ÿñê‚ûK×5 >æÊ]ZÀEqDåt÷~û¯5ä#RÔ[þ_î³ÿ]›üiÿÚ:†söû£íæ·øÒþÑò‡ÔßsؾÍâú ißø/þ=GÙ¼AÿAM;ÿïÿÇ«Ç~ß©>Ýsÿ›ühþÐÔæúèÿÛfÿ_ÚQþQýJ]Ï[±ÒõÍ?O¶²‹V°1[ı!m=É!@?¾ëÅPÕ<#u¬_ÚÞß]i’Ílr„é<îFyÇÿ^¼×íú†?ãúäÿÛfÿz_êþ_nsß÷­þ4iGùEõ9w=ZÇK×4ý>ÚÊ-ZÀÅoÄ…´÷$… þû¯?Ù¼AÿAM;ÿïÿÇ«ÉF£|Oü}ÜßÖÿ”_Þÿ—÷ôÿ/í8(}N]ÏN³ÒõË((µk­,’Ú{ç.ìçþ[tËŸìÞ ÿ ¦ÿ‚÷ÿãÕå#P½ÿŸ»Œ{ÈÔÓ¨^ÿËŸOõþ4iÇùCêrîz¾—®[Ow*jÖ®e¾t÷À!8ý÷L ýj³xƒþ‚šwþ ßÿW¶¥ÿ?wDg´Íþ5FïVÔº•Ð>‚fùÕ,Æ-Û”>¥.ç²Ûézå´÷r¦­`ZæQ+çO|SßtÂÖ§û7ˆ?è)§à½ÿøõyM•ýçØcw¼¸rQrZFë´{Õ˜ïî™7}ªûøhyŒS·(¾§.ç£&—®&¡5èÕ¬<ÙbŽ&ÙïŒ!r1ûî¿9ý*¬^Öíìîm ×m¢ûDÏ9‘,[z³6ãÞãPk‚×x?éSäpxzþtÄ¿½ÜÙº˜Ü~ðôÀþ¹¥ý¥åÔåÜìáÔ$žyîµÈnçž’MfÙ*YXc€ ”cOZ™<©{¸®u«{·»UI&žÉËá~èJÁçÖ¸“}vOw„y„cõ©nu[©ÝJ»ÂˆŽFç’rI<žzý)ÿiBÏA}NWÜìôÿ jö¡Ô޽ ÍáˆÂÒÜY3„©‰@ãoõ9Íl}›ÄôÓ¿ð^ÿüz¼¿íטÿ©óÿ] *ÞÝ€I»Ÿ·ü´?ãSý§åÔßsÒ.4½ræ{I_V° m)•1§¾ (ÉÏïºaÏéSý›ÄôÓ¿ð^ÿüz¼ÁoîØö©ñœ¬4­}wÇúTüñþ°ÓþÒò‡ÔåÜô{Í/\½b—V° ²Ç(Û§¾rŽ®?å·L¨©þÍâú ißø/þ=^U{©ÝÃjì·SîǼõíÏýýoñ¥ý¥åÔåÜõ{í/\Ô4û›)ukÄM•ÓÜqûî¼Ôÿfñý4ïü¿ÿ¯!}Jû<_ÜßÖÿoöþÞ5 ¯šßãGö”?”>§.ç°}›ÄôÓ¿ð^ÿüz ±ÒõÍ?O¶²‹V°1[ı!m=É!@?¾ëÅy/ö•öp/î¾¾k¿¾oñ êšñÿtG¯žßãOëÑì/ª>ç¨ÿ©µ«v•ç&èÙ?æŽgÍÇŒcíSi^Õ´‹›«˜µ«i§» çÉ=‹1r¥°x”sócŽ0ägYÔÃo®ÿïó#êÚ—Q©]þ·øÓúô{ÕsÜ~Íâú ißø/þ=P>—®>¡ éÕ¬<Ø¢’%ÙïŒ9Bsûî¿ ýkçûí{WŒº­òàv¸qýj„Zþ·åäë?õôÿã[G¤¯b^§kŸK}›ÄôÓ¿ð^ÿüz }/\}BÓ«Xy±E$J?³ßr„ç÷Ý~Aú×Ì÷Þ%×"‰Šë:€=±tÿãXâÏàã^Õ?ð2Oñ­£.cÕØúëìÞ ÿ ¦ÿ‚÷ÿãÕÆ—®\Ïi+êÖ­¥2¦4÷Á%9ý÷L9ý+äŸøJüEùê¿ø'øÒxþƒú¯þIþ5D_}›ÄôÓ¿ð^ÿüz ¼ÒõËØ)uk«,rº{ç(êãþ[tÊŠù×áÞ¿¬Þø‚xîõ{ûˆÅ«0Yn]À;“œד^™ö»Ÿùø—þû4è¿fñý4ïü¿ÿ¨/4½röŠ]ZÀ*Ë£nžùÊ:¸ÿ–Ý2¢¸µÜÿÏÄ¿÷Ù£íw?óñ/ýöhÑ~Íâú ißø/þ=P_izæ¡§ÜÙK«X®"hœ®žà€Àƒßu渵ÜÿÏÄ¿÷Ù£íw?óñ/ýöhÑ~Íâú ißø/þ=GÙ¼AÿAM;ÿïÿǫξ×sÿ?ÿßfµÜÿÏÄ¿÷Ù g¢iö/¤ize„— +Cû¯1WËÞ6åß×{¦p:®‘ÿ!KŸúìßδ<9+6h^BY®[–ùý¡žžÓ§úGü….ë³:îí¿ÕŠ(¶ÿV(¦"ÁéXú·ú–úVÁéXú·ú–úP+á¯ù§ÿ®gùÝ›LTÑ Œ…¡Ý;Y6\• m`}JÂð×üŒÓÿ×3üuV ¶Ú5Û·D1·á»aqù éHe=3HšÒú{ûëÑwy2,[Ö/-U$¹=É$桳ÿYâOúûÿÛhkfXÖhž&,Ô©(ÅN¡ƒî9¬*Ý-SÄPÆÒ2-ÑÁ–V‘¿ãÞ#Ë1$þ&€<†ÊäÀáÝï] [Oõ‘6޼ô®b%ùpÝj´úlS>âk•–u2ß鑱þÔ‘Á_5sùfª6µ§6THÌòÆÇ?Ž1XÐi‘ áEhGnª8QR;‹¡>|¸G«àgõ¤ÿ„f_HºÚVÍnúÜy~fÍŸ?ÝÈÎvã¨ëR ÅièÚÖáÍV[V¸û=”¼Év3íÜ¥G <° ¨î„λáÄ“Ká놙U[íL_M‰]Æ«ck¨[XMp©uu¸Ã-޾Ãñ¬/.ÍqÿO-ÿ ­dÝŪk_Úz­•”¯š¿c® ºãjì9Ënî2 tAè®KG[¨ëún“(ŽöàÆåw±;í_VÚÑîqM×¼»¿ j{^9leÁ!CXz·Šlï,ìì’ö 1¨Ûy²Ï;åDx g«ž@ôÁ5³r¶£Â3¥“+Ú­‹,L­T!½SVNâ¾Çƒ.‹\TƒHN¡kwËç¥< ãÞ¹.ks2ËOXd Ùp)‹ T«Å : ÝnŒl~W•-þ«wg©\EÇÿt€F#¯±•a7‘wö¬j±ªksdŒN‰*ûq·ÿe5ÕNW‰Œ—½rêxŽó©›ð(¿áRÿÂMp:ˆ[ë5ˆÊ@¨aê)»c9dûU\V7ÄÄžÞÝùíÚ´I5³N´û¬›Vçœæ(©ð1ÒÒhÏ»'ìåÙëV<.ûoà$ÿËn¨o·p¸{ã §x{‹¸ô¯ô¯6_Ãgªþ4wà‚ 0>_éK¯ŒŒÒg=j2x9ìx¬éD“6æe'û Ÿø?Ö¹)Æuf<ã~fº©FHlöôÇô¬M®ü[¼é¾)¹#8V#§¸®œ4y¤Ñ2j1¹4-•^OÕ´“Žz×^úœÑám‚:†oñ¬ñá°ò©/–NoPnü×kÁO£9þµM˜m7r~•Uœ³tüë¶O ØÌ>qÑXéYwvÞ±,·ŒªëÁD;˜p¨H©x)÷BúÕ4`ÀÉå‘N«iqÎE¨¹™8g‰Wòç? úV†‰o>µhg¶ Èc*î ä{ŸB+àê­R4Ž"›êIùçÒ’8"´›Ãz¢‚L1ñé"ÿDt}F&ÚÐ9ϧ?ʲú½UöKö}Ja€§ý㜜úæ¥m>ñÒà}PЉ£el20>†²tª-Ó-4H@©¦5ëȧd“íü«+ qÉ8¦?Lúf’‹§4Çí’3ïN |õ¬ÛÕÜ¿ZÓqù}+.õ€ô÷⮟Ä7±½d¥lbVþèò§A„#4؆-£Ç¿ó§òc¦‰nB~é>¼RnÛÏAš{uüÿž*3·œ¯@ùü©2ð½>”¬¸Ä}É‘×"¤o”c¶8Å=Ä0Œp)„¨ô£•z†éÀêi Äxëɧ‘QÀÛà‰ˆ ²ƒÏj—¾qÜP€©©©ù¹ãüúÕdb?ïVuµg†5T*¥ð‰n²àc­9ƒžžÔÆ8üº TÁÎIü BZÅ<»P¶Cc§µK°g©4ÓŒûÐgvyþTå“ÔPÇóÜx”ÐÄ’=hbü£B ÷Í4ç=K’@¦’Öš |ØÏ|S¶¨ žÇ4¹뎽éÀ9Æ;P!B“ÎF=6MÀ𛿑BÔsŽ3´{š¤õ$¨Ë–†:f˜ê6žØö©ˆ$“ÒªÝ>ÈÈÎ*Ö¬f¢ß3wíP*í@;ÑvŤçžy§7žÃ¥z1VŠF2ÖFN †a±Hùô¬6ô­;ùH¸`?»¶³­vÓV‰ÁYÞbJ3EhdvŸ ¿äd¸ÿ¯FÿÐÒ½Z¼§á—üŒ—õæßúW«PEPEPEPuá–Æ‰h7c71»ùÜgò?N⎑ÿ!KŸúìßίxe±¢Z ØÍÃŒnÆ~F÷üÓ¸£¤ÈRçþ»7ó¤3»¶ÿV(¢ÛýX¢˜‹¥cêßê[é[¥cêßê[é@¯†¿äfŸþ¹Ÿäkª°]¶Ñ®Ý¸‚!¸Ç Û È}Jå|5ÿ#4ÿõÌÿ#]U‚í¶víÄ mÆ8nØ\~Cè:Rj°ìÿÖx“þ¾ÿöÚÒ¼Óá¿Ùç=ÊìÎ<‹©!ë뱆zw¬*Ý-SÄPÆÒ2-ÑÁ–V‘¿ãÞ#Ë1$þ&€<ž[3nªÃ¡8éMP=+¥Ô,q§JïÁùÿ‘\êŒV5£fwD‘¨©Up*$8«àŽkA@ÏxçþDÍCþÙÿèÅ®”-ox8ÅYdßÿМ~$'±ÑøcE›þ¾[ÿAZ髯—,0i*ãVÊÖfªZÇü/ÿëÚOý×’ç4}áéšn·r†ÚLr})ݰ:ȵ@¦”Œæ™øSÀ$cš.ŠpA«´†A§Ý î(Ñ;ƒiüyª²+œ®û)¢$æ".}2þ:XÖÔ¥­‰’$L²çwçR¤#¯Ƥ²ux†éW6©A>•¹A g8Í?ËõU¨ðr1‚8©v«  @àR•jÌŽ¿Ê™³ç>ôN[xä?2Ð# ¡Tp*Ó.sëP!¸âÀtK–ÅIåœÓS Õ°™=)ˆò߈¶ok«[^#ìŽæ2¬Rè@$ÿÀYá\ á,œ±8=ÎkÚ>#Xyþ’ä ¬ÑËÀääìÇþ>á^18ÌdsÒ°’´á¬ Dgš@pGµ;RcÖ¬B·0÷«0õª®rÊÙ© È5hÉ——ÉüjEÆ*!ž*T´ÄJ ž•&Üõ¨×§^*tâ€.Z‚£ÀÔÓÜ7=Ç?ˆ¨ p3Šžg+o!Z'ð°‡ÆŒ÷AöIŽyÚqïQè <øí2ŸÔT¯–”rH¨tTe›' +¡Ïn yÖnÇ«&”‘èôSüÀûT¥Õ­cÀ ò}R—ZbwŒ{šóá‚­=moR剧¦ÃgkáÁ¬"u±ñeµåÏÉ#–sîŽ?¨üꄚ…ÄÇ 3cÑxþU[s°'ÔúW£…ËåÌÝýZ¸Å%dD»ñÅ„9[h¦¸ldlSí“ÏéXWž7Ô§ù`X­}Ý£sAäž>ÕKFð¾£®BÓÀÐǾÝÒ?R1‘€ ïßÓÚ|<´ŒæîöiO\F¡1øœçô¯RfõÆš—6‘1g÷mÇùñK@¹›qo™ˆÝ·#pF;óê*µÕœI²¡qÐñŠ×¸7Üž3!•pã¡áÕ‡$ÜOR/š)‘4›OOl¡sûÙ‚cŽ3W$rÎzÕqöÈ9ó}EM5©RØé<”÷§ÿŠce#Aíž´.p¹üªz’¶œŸcІ@Dm“œ(Éõ¥RF{þ”Ö~o'Ò“e$,#±j™›¥E´ãŒ1ãôâœùéLVœž)3„s»Ð~[ÍÇF?¿ýjqq÷OR3JáaAËLRƒ—œ…23¹Û<€qô§&LhÀ`÷œóB(êo‡…ϵWÈή*]C-|:«üê.OÒœöA;ÈÉ÷§ŽIàzTt óRÈ短6ç†À™¤*>ƒÞ—'84ÝÄäz~”І0I{Ó~ñàéJIâ“~´ì†|ŒSH$uéÚ»’QÉÍ&G®GZ¤…q¿7ãM'ž÷© ÎGæi6ãf€AîGÒ¤^JhNXãÒ—v~µ 9þEƒ¥r¾ÿ‘šúæ‘®ªÁvÛF»vâ†6ã7l.?!ô) µXvë•kʆ:¥¶“{• p@àÖy¿¹‰È{p8<VÏ—PÌ6á»t5ZN{;Rœbí%s,êíøöÏü ÿ­L:œX9Áô?Ö®L­Ô3~uZ‰r­2‰?0nâ°öUVÓüŽj/ìþ$Kª@ùÎåíóð _ÀÏ4`w ç[§KÒÝr-”du ßãU¤ÐtÖÏ3 ú0Çò­#–ÜÊ^Í;ÔYÀ•ýÖÖ”N›ò>¢©?†mÉÊ]:ûúÕWðÜÈùŠæ<{äåO÷‹¡ƒêm^YÛê:uŤÙ1MFØêÈ÷Erü/Еr³Þ8õYÿìµ Ö:Äl<»‡Àé‰xüõëmCÄ6­‹‹®øŠ‘ŸÐãô§K¬A«lÌTøq ÆÙ1O'³ÉþU?øH½}>ËʼŠ#,n®ìI_˜¨Á,R+©íËÜ“Ã׫?~<¹ü¶çZñ‹Y”2Ïå>7l”laÏpy _3¶º~Üù€ÀBEXŒ…¿âÿÍáDùf),n%Û›vÅ­îïƒX »9ôª[·<ÔȽ3RAc9_™ c®ãЏ–(±©2³>Nà郟éNÂ+¤`0jÚ!' 3ô©bA‚}O4¦M½øï@(ÏÌ1R»!B‡F)Úî\”…ñî6ÿ:µ#ÞÊ«ÏaŸð¨•H­Ù.q]J;•~èΖ?2iFŒîÝA$ÖŒú\PÙÊчg_˜nƒ¿áŒÖ÷‚®ØÝ[d–ŠPù=6°ÀñV?m…Œ*Ë”N«’¹‡máÍVä©û9‰OñJvãðëúVµ·ƒ2TÝÝñÝ"_äÇü+­¤æ½XáéGddç&e[xwKµ ­¸‘‡¥;³øtý*MbÉnt+»hÔ¨ò·* ÆJÀ©P+K… ‚:ŠÕ¥kaü9»Ì7ö$¨–tå‰\ýØÿ:îkÌ<4ÃFñ¿Ù>äLÒ[n~¥)ÿ}2ÇùרW=»F>µ¯ÜCIKŠ1ZBg#¨éŠñMvÈéúÍõ¢ŽVê¨yOÇiS^Ù^eñËÉ×cºTÂÜ >~ó¯Ê%òëêñ= ¶v«ËÜôé5íîÕ ­`ŸÝÝ´ãð«×g²ÑTšáþßKp²ZÈr-¢dSÎp\7¯ûxüw1ï¶•Týä#óçžùÅ_É)fÏÊA ¨íÎ8¬Ó®Ù@¡ñH­§Ê.w³†#÷`N㞤v¦?’!fKw‘±ò‡ŸŸL*ŽƘŒeûm¶æIèN>ŸçÖ¦±–éµ+&ÕgRÀ(å€ ÿß]}©ú¨k{«y7££‚Û#Ý„ù@ÏcÛ“ÜÕ ¼Ô£u*†WQÐÑ‘ýI¤4G­G¶éÊã#Øÿõë0± §¶k{ÅPymGc¿¯ü¹Ã#Ø^kÂÅéY£ØÃëM #0ãô5R3»P‰~§aVdfwO¥P´mÚÜ[þ‚k*{šÉhu’¸£¨ã¡§9 àö¤?sw~x¬º’¶" r3éüê0¡³Ž3ÞœÎU¡Ü8c´ýyÿ Ž lIÁÇ_|T½ËDÀä®8•ŽI˜æ¹déÍ n3Œ ôëTN]‡qÖ‘× ؃ø‘A·dœw¢EÜäŽAÈö ÿJ[`gדRSo?7\v¤ô4‚@œç?§¤™n~Úùêüþ4$ž¸ç¥U’O2òç8|cÓVbP#Ü•i%¨ÖÀK·zz/ËÝi„•'#9©–äg4ìðqÔ{ŒÓdaïÒ°ãò¦“ǯj,"2¯JðsïNaÓŒƒM{¨€NIö>”6p8çëNÈ ŽÂšÌpyÈëT„&pxÇãN-ž7sQ‘ñ¥U9Çë@ìM€êi„Žçð¤Á?ʘH\ð½HX{ëšnpqÎG­0‘·=½4’ãñªHE[¢2MbÝ>3Î~•©pÙäò‘tÌÛN=+²Œu&nÑí=úâ³uI Û·?xâµ[N8ÀàÖ¯!܉íœW]5yµ Ì£Hii+´à ;P)h³øgÿ#%Çýz7þ†•êµå_ ÿäd¸ÿ¯FÿÐÒ½V€ (¢€ (¢€ (¢€;¯ ¶4KA»¸qØÏÈÞã?‘úwtù \ÿ×fþu{Ã-ÐnÆncv3ò7¸Ïä~Å#þB—?õÙ¿!Ý·ú±EßêÅÄX=+VÿRßJØ=+VÿRßJå|5ÿ#4ÿõÌÿ#]U‚í¶víÄ mÆ8nØ\~Cè:W+á¯ù§ÿ®gùê¬m´k·n ˆcn1ÃvÂãòAÒËU‡gþ³ÄŸõ÷ÿ¶ÐÖ•äwï³ì76Ðc;üûv—>˜Ã®;úÖF”³ªxˆ]K³ £¹âŒ¢Ÿôxº)f#s@ 𛳭Ðr 2GOâ¬íR Ïk’[YAsmm ²V–àDzF—Ù#䱊±à—./²rwÏýõ]m9nL>”ÄOá‹·êÃK¼`ÐÉ/Ë‘"®àG_Çž*ÿ„7 Z+Cå…Ü«ò•Þ¡Ž‘¸|ßnQE÷ŽG­­éÞS«j×f±·ÿY.Æ}»¾Q‚O,Jx\WñUâÚêÇþ¸ÿèä«hÉnuø#¥/"·Ö´XWši>Ôò1L>”Xc ɤæ”ÒgêJ Ñ‘š1IŠ^”àÔÊ;Ðá¾”µ Ÿa‘R?:`8ŠÔ:#ƒRv¦50(y`‚Uia«×»`ü`ð~µ›¨ß p‘žmļFƒùŸj›¥mGÍ®Úé:xûlr»µJK? šÎ“_Ö¯X 7Cx#l~÷P!_ªHúUˆ,ͼ‹pò .‰¤=Ï!GaŒz›Í™Y£ ÷wtÈlò=Àüê£Ê¼ÉäîU â¹2¢÷BeÈüÍdÞÏã[72K™n2Z²ÁzšÕ›VµŠ×,JØÆæ9PÜzõÅe\ø¶ÂÜ©·ye#8Ø €}óëG:ìG(ÝÅ?Úl°f¹' ›-œã`œöšêÞr W•뺜:ì¢k‹8üÑÇšOÎG¦@Ç8çZMRñàH ÝÃD«´!•ˆÇ¦3Í&ÓØ¥zmÆ¿gf[í©^«œ·ä9®cÄ~-‹P´†ÊÎ4ÙÞsÊñ çŒRy¹éÐzšãظU8á²=ñŒÿ1ùÖ•žƒwuJ^8â`Keˆ>€õª¡Fu}Ô)Î4õ“,ÿÂQ¨ÇŽ„`tm¡›õÏò¬‹‹¹n¦3O4’Èz³±?äuâº(<5mi^V‡ÊõýkJÞÂÖÔæ#B:62Gây®ªyr[»ÓÇG¦§…íʃ ¼Œ§Ä`ÄñS^iv¶ž|»vä¨rW=Ïôv]Nj¾¡lnôùíÕw3¡Ø¹ÆXr¹ü@®‡ƒ¦¢í¹‚ÆMÉv9m:ÆÞxLŽˆ%H'×úŠÒŽ¡?»ãQ‚k3E“2Hƒ•dxãüsúVÁóµ¹”šlé¨ß0{Òõ¤¥>•˜ÖEu(ã*ÃzŠ«á9ZÓÄ?g“$Êð|ÙÿÇHüjÝbÝ9°Ö£ºUݱ’p‹ÆìŸ‰Sù×f §%DkOª=.—¥žA ;Îh¯¦~4”¸ jâîÓ…÷ÆÏθf¹jµÜâÌ!xF}Ú)“Ï ´F[‰£†1Õä`ª?Xwž4Ь÷t×.¿Án»³ônþt¥8­ÙæB”çð«›õÇüD³èÖ÷a =¼ÛIì¨ã“ÿ},cñª7¿e;……‚/£ÎŲ?ÝÇækïRñˆ-$çËe˲Å#ÂüØÈã <Šç«‰§êÏG €®¦§m‹ßgë—QÙ’Ûxô2ƒøü½2ëæ³›`%¶7O¥xφ®þÇâk%¶É(…€ï¿åöÜTþì>Qó+åƒFà.99¹ç´q÷‡}Óàåw±'§søV^­x`™cU¼²3—ë·€ïêsètW¬JË5­ÊäÏòä6zõϾkµŠó­Ñ–Fù@#>•к‚>íaj¶‹"6çšÎ¯©¬›±¥oâ;)1—ÀúÕÁ¬YK…®7nçŒv¯7—N9ãõ)$’0O½0‚Ä ^ièo9ç­‡o»»ïŽÔy®sÇúÖ¡á¿j:®“qö{è<¯*]ŠûwHªx`GBGNô˜ÓÔÊÙñ<ÿ…?+šô+Oÿžw¿’ÒÆ¨£ Ý)Íäã1@\âuÅñ§öÄÿØ#BþÌù|Ÿ·‰¼ïº7nÙòýíØÇlw«ÞMpý«þµ°?sìßÙAý÷oó?à8ǽt$ ë·ó?áHYd*çê€35Å?Øóÿ`ãûOåò~ßþ§ï Û¶|ßwv1ßÇø‘éáOü˜¯D3Æ8*Ä~©#{YýJgè-©T®Ž?çÿÿ®7[>/þØŸûûû3åò~ßæùßtnݳåûÙÆ;b»ó«¡×$×;“’U‡¡I2—†F¯þ•ÿ Y²þ³eo÷Ý¿Ìÿ€ãþÕ£­ÿÈ"ì ÿiü¾OÛÿÔýá»vÏ›îçïŠ@)àP3âGoøE?òb½ 'þŸñÚÎSTÖ,4{o>þábCÓ‚IúÉ¢ö3[>2þØŸûûû3åò~ßçyßtnݳåûÛ±ŽØ«ÞþÙÿJÿ„¯ìÁöoì­þû·ùŸðcÞ¹{‰6Ç?c°™Ç#tÌñg#ëŠçï|q¬Ý ˆíЂ…1ŸÄäÀŠWÓ¼S40xrò]!±~Ц#|s÷†wmù³Œãñ^Oÿ Š-^K£?‡ežE.ÙÙ€ôà~u—=ô÷2ožifp1¾W,qõ4ÅŠy:FßʋإöG©Ÿx7Å®ÿß0ÿñUçž$ñ­q¬\ÿ`Ýô¢T·#dßtnÜcàüÙÇ=1U“O”ŸÞH£éÍ6XþÉpŒ˜la†ñO½J”[±n”’»4<%ok}5Úø’JiÖ·:«ûËùŸðcß=«ªÔ|¦]hÓ=ZßQ!LUx„'æ·òÃåÝ|WYjÐIg –ÊÝÑd‰Bã FG¸56*^‰1ÃG©äÃÀ/S“6‚yè^oþ&½b×þ³ÿSar[ûÎÎ}Fìã𥥩ö²4Tb¶8ˆöZìæ{›¥ÿcÚ² þgÚpÁUÇËǘë¯?—¹Á˜Ó´9·;}oû/ûì¶j|¾OÛöù?xnݳæû»±Žø®<Ôÿ#WFy£½{^ÏÍž´òFçüRõÿÈUÈkÛŸÚóÿ`gÿf|¾OÛ÷ùßtnݳåûÛ±ŽØ­,Rô£Ùù°öžHå¼?c¬Þ/‹<ñ tû8Ò6ùk¼ÛüÎp&1èsšèu¿ììyÿ°?´¿´þ_'íþ_“÷†íÛ>o»œc¾+žñL][ÏÉFP€8NrO©ÝÿŽÕ›y|ûxåÜ eˆïúæ¾gPôù ¤dÅUÿPoü‹^ÿWýLù¹º+‡›È\ÞE=sûKûbì²f|¾OÛ÷yßtnݳåûÛ±ŽØ§iqÙysIã!>”[cmÏ9Ýæy¿EÆ=N{U¬ÕMA¢6’Äòª1]ÀÉ#‘üª¡6¤¬Š„µØížçL¹ðˆ>7?n(¥·ËHÌòùÎÀHÇr+ÿŠ÷ó-ÿäzÇÐßqì,$rZ†…«ØêóÂ3c .š ˜Q½ÀùFì‘>lã±]†¦ ÉñgØÉ ·ö^ï}ÛüÏø1ïW(ÅrK)»Ê)ü•$•“gšøš×ÂÚ}•嶆Úêë8HðÅäå\e‰_›î‚AõÅoYß|A¿³µ¼ˆxWd±¬Ñï—#>ø5ƒã›O#_3®H¸‰œpp?ñ®‡Â%÷…í¡—û5ÛDÁ‰ùŽÖu@*û<-omB;£Ç­I´zGüJY—íÄã®S?¯ç\Nµ‹Æ«pº"hri‡Ú’Ègû«’v|¿{v1Û­]•­4á*&FÈU"Y Æ\YÒjGr$[¹¼—?#«™npsÇ_ËéîÌ˾·¿“íð–Ggœ'ÙÆ˜$Ç}ÛÄœw\cýª¿©Ù%žq/†ã‘µFEHûh·z–ÈL›±ŽæªÇq,·ÞDW¬Ìab[nÞœmÁéÁ楒îúÒÍ¥xmç È2ŽPìpAîGzc<ç]»ñ¤š´‘Ý®ç@«ò„Ûq÷Ç^Šºñ'‚ÀÆuóÿ~k?_R_'íßë¾èÝ»gË÷·c±Z­ÈëÍFaf8´Uü½—˜ß Yé n¿á+§î}›û+gû[·ùŸðcÞ¯ëÚwƒÎ‘pt$Öÿµ>_'íþO“÷†íÛ>o»œc¾*¯W´¾[6ÀÓúÃì/d»œ·ön¬‚Ãózï[NøkŸ¹â¿ü—¬ï$ŽÌÖšÈO?ýj>²Åì—s[ÓPêóÿ`¡þÌù|Ÿ·ÿ®û£víŸ/ÞÎ1Ûë ðF™¦#Ý?‰–ë?'Ù¿³Jÿµ¿~ÿø1ïíMX=¶kJڸϿ53Ä»ZÈ$º›ÚÅ®‡ý‹?ü#ãPþÓ˜MþÏ'ï Û¶|ßw8Ç|W&-_6r»Ö|XeÏÉöoì¢=÷ïó?à8Ç¿µXñðØÑî„uOí?—É7Æ?'ï Û¶|ßw8Ç|V{;79ª’ƒŒ“ZF§’³óg3tu¾ŽtïøúíSþ·P|YϯÙ똾={T»@ã_'íû|ïº7nÙòýìã±T¨ ÷ágØ?´5O´ý§ûCìëö_/o•·xó7çœýÌcß=«Ò«Êþ|Gr{}‘¿ô4¯T¦EPEPEPuá–Æ‰h7c71»ùÜgò?N⎑ÿ!KŸúìßίxe±¢Z ØÍÃŒnÆ~F÷üÓ¸£¤ÈRçþ»7ó¤3»¶ÿV(¢ÛýX¢˜‹¥cêßê[é[¥cêßê[é@¯†¿äfŸþ¹Ÿäkª°]¶Ñ®Ý¸‚!¸Ç Û È}Jå|5ÿ#4ÿõÌÿ#]U‚í¶víÄ mÆ8nØ\~Cè:Rj°ìÿÖx“þ¾ÿöÚÒ¼’ý6}†ÚÚ|çŸpÑcÓFÏJÈÒšvO¨£Šctw$RQþF*¤ñì(äM7R¸Ó/æÚBއð>ƽsúõ·ˆm²„%ÒÞCžžãÔ/Ë>4¨IàV†ž÷öq\Úù±Ê‡*Ê?Îj“±.7=Åm·ué]?†õhg §3$C(Oñãðÿ=+„¶¾Õõ=)$6/»7L"€=}¬Fñè·ðËŸ¿ƒØ{ÊUåΣ¡¬0þësv=àõ•â_ Âcáû­íŸcû^Ïßù^fÝ®îäg;q×½?IÖíu. èl•rW9(ÝÔýø÷«7 Ó|=jš­ÏÙì Ç™.Æ}»ŽÑ‚O$•»g5še­ÕÅÔVд³È‘F½YΨÚpkÏ|]®›í@ÙDX[Û¶Œo_ éùûVë*Q¿S³ƒ–*ª¦¶ëèmê~=²·Vûfr?å£üˆ?>Oåø×0~"Ý´‡V¼ÿ ¯θ­b+û‰Ç–¥¡ÇAëLM*im#ˆÛ,Oœ´¥òHôt®h¾xóÎvô=‰aÕ ¾Æ•o7×ô=jÐÉFN[ A#ØçʺûKø¯m–æÖMÑ·àTúØÿž•å1Ç%,R0æ­Ï‡—÷ºŠ²âÙ‘X1èø‚OáF¤å'ª5Í04aGÚE(Év= n¥üä}*¡B·.I>Ç¿øþ4òãµ K¦@Ë)¿…v£æ¬H¨E< A"6ô<Švrhb¸¯‰pŸI´¾ I´”«sÀGÀÉÿ*Æ»qéTõ}9uM"îŶæhŠ©nŠÝU¿Áü(`xt1™¥Ù¼.y«©§Æ9vf?¬øœÅ:I‚0yÈÁµµŠÆ¬¤¶;(F2Z­F$1G÷AñÏçR`ôÆ)1J{VîuZÁŠ«¨G˜CŽªJ·Í6Dó"dõ§grgh´vÞ¾û_‡–&oÞ[HѶIx§Íø tµæßï~ϬÍdĹŽK§#ðÚ^½&´¨¬ÅFW‚ QŠ)j ¯,ñÁK±t›…[GI$FÜ8ßž:kêš®¤$Š5Ê2•tŠ>0x䜟ֲÄ.³4MòÈ Rb:ו‹qÄI(ž-HS´Ö†ìÚ¥¬]È{„ýzU)5©ú¸•G«çü*šÛyb~œT‹/E¥O-KâfñÃ%¸×¼ºœ`É!ʨÖÝÏp¿­Xï@®Èa)Ç¡´iE<2–§ÄöpÞÇ;˜Èdd‚Žùm£ñ¯]†Þ+h„VñG c¢F¡T~¼DÉ5­Ò\À@š6FÇ e9ó½¾ âº¶ŠæÝ‹C2 #'º°È?‘ò9í7 ©ô9++1ô;Ñ^ ˆ•æÞ<‚K[ê.Ö–5‘d'9–3ÐëÒk’øƒd&Ðâ» ZÌ2ÄýÔ~æÞ]và'Ë]_g§Þ]7i&tOÕ¼W’b™HÉî¤d~”úÂðuà»ð̱gšÈéŽT¢²VõyéºUeÑŸQ sE1) -!æ±(ä|j$Óm.²wE)LÙÆI?÷Àcx.ÿìÓÍlÎUZHæûª:¹ÿÇWgâ+oµøvú,‘ˆŒƒ'(w€>»qø×–iÒˆµHPË#yEXeIo”gØ1SøW×duyðî™åãai©w;¶Ôm®ïç—),lÂ91™“+Á=‡Èÿë$‚âqnVÛ´§—“Ü’ßÂ9gÓ’s\ùµHcÚX0,¯‰?¥hYßZOk¦B—+q?œ‹( w«ís–SÈ9æ“hg7«OçëŒì7,ÍOî£ùUA G‘ÜT—n&½¸€KÈÍÈã’MDPtã>¾v¤Ÿ´rO©íÁZ)4ŠÄ’HÉôâ¢i@ÏZwaƤuîF~µ)7¨Ýˆ üÜTeTœç56:ð9ö¥1drsNöЦ O^´¾KØj² ÇL~$Ô†, ~ÑÌž‡ô§mb9늶ÈWɨÌlO8ü©ó1Èlp:tÍI8Çw«SûÜ{bbNr{u£…!8àúâ­G#wÍõæ¡ ³;rsè*HÃrÇò¥Î/ n1´cÚžX°Àê UYYzdþX6 àÒçRbØ$g\Ò©äàUPÙn½*—Åô£œ9K süþ8ü)B’äTgìÏnE.aØ”ÉÁ 1=ñøÔHX·ARƒ—hü¨æ@Ãqê?j¡<`ÿ*0Û²TOZx`z.OÖ†À6íÿëœÒvÎ1øÐ]—±Í(‘P?C`BÄÿ?J¥4ß1éÏéW%rÄà zUd Ô‘ŸjqÜh‹q u¨e$ÇOCV!*)Ê~ž•°wc2íÏSŠ„“†9Á'¦¸`.9íž*´ß*müMwCddõlçµY ]‘ýÑŒVq«oæNíêÕ^½«E]Gy6%*ˆŒQJ'’h¸øh˜Õ®»[·þ„µéÕç_£òõiGalGþ<µè´ÁQ@Q@Q@׆[% ÝŒÜ8ÆìgäoqŸÈý;Š:Gü…në³:½á–Ɖh7c71»ùÜgò?N⎑ÿ![ŸúìßÎÎîÛýX¢‹oõbŠb,•«©o¥l•«©o¥r¾ÿ‘šúæ‘®ªÁvÛF»vâ†6ã7l.?!ô+•ð×üŒÓÿ×3üuV ¶Ú5Û·D1·á»aqù éHeªÃ³ÿYâOúûÿÛhkfWhâwXÚFU$"c,}H>ä ÁÒ¥yÓÄRIo%»›£˜¥*YÑâë´‘ùù«ÃZ,w2!r}³^»áÿ†ÐÝÏÔ±<ª£LúØ}úãðoÛ [¤·En¯p $|‰ìzíñG³JWnå:¼ªÑ*YiöÚ}¸‚ÖŽ1éÔŸR{Öv­á- [ÉÔ4»y\õ.×ÿ¾—õ­Ð(ÛWsw8?áì,“e_NËÉ·ŸæPÝŠ‘‚?\þÊ|WÓïìþê¾tÅûœÊŒ Þ§ãúW±Å>1óŠOR®Ï4}Vb²3«e‡¨®vûÀZeÊ·ÙÚKrxÀ;—CÏëXU§)+nua«û Фnš<u„SŸ+õ©nXY€'#ñð¯ŸÎå短w~ ׯÂežs—pB  óì+ª4Ô#dxøœmLK÷ö=~;ø›f‡N¹ Ù#ƒŠâíõ5ºPch]qØóü©æPï²FÿP+'Z1vlÅRmhvà…@À§ùþ”ä—‹¦jñO“4fŒ|¥ñ‚;ŒôªìWq;`:ŸÇ5ª©j™“ƒ‹³F¬n¬*N*k ÝÚyÍ+FXü˜ã×üúRËáûÕÿSuû8+þ5©™â>2Óÿ³üUx “·Ú“ÉÉ?MÛÀúT’ -Ô÷iü+±ø‘ êZÛjS[ü‘1†I†åI9àú½pº|˜/â+*‘÷NŒ<­+ûÑŸzANí\§ 'zQIFhR –ÒõÈ.Óv#‘d!N .~aøò?öPÊà22²žŒ§ Q^/¨®H9Úk·Ñ¼c¦ZørÑ.¦?i†//ÉHÉ$/ ƒÓî…êzæ·~ô9àÔ&âÎË¥¸+C-…ˆª¼íŸÍGÿXW^$×u2@º™SvBÛ€{ds©ª§‡«QÚ1¸ON VzÞ¡gb»º† ýÑ#…-ôëñ?ŠôCHžÂšf”)Y6ªÀó»·a\’i—21iYP’Kî9õ÷üêÌZT)þ°³žã8§?­zT²\Dµ–‡ \Ò²*YêWvvíml@ÞûÁÛ“œÇä*ÇØu}DþøK°œŸ5°üÿ­MÓ$:ÒEÎÒþ^[©€Oèk±â¸ëNp|¡êe¹} L=¬Žv /âàŸUŒSþ¥a@®Øêÿ6Å_¥®w93Þ¥ƒ¡OáˆÐF€ ãµè¾Í¬3€0àHüê ük²¬[´†qÖ6Ú~‡¿éúÑNV’fY.|;·MLlþ´”ØHh‡·Ÿ¥} _4S>u;«ˆh õ¢˜N2€÷½KÁ7ßnðµ¸f,öÌÖîHÇÝå@ú#%y‹ ÊG¨®³áµé[»û,wÆ'Aü+´íoÄîOûæ¾w?£ÍKt9qÒç¡þQHkã0ª:͉Դ[Ë5@ï,L#Rxߌ¡üøU‹›»{8Ä—W@„à4®gêkóÇz5¡ÄRMrãܧý[}3[Q¥VrNšli7±Ïü<½[Ë-ćE`ÚÇêw'å]Þy¯µÕ$Óµy/tôXC3ùq}à¨ÙÂûàcñ«³]x‹UÏ›5ÉB6O”„zíàÈ×­ˆÈñÜG´§³µýOV9…,=$ª»y«éÚy"êöœrP¶_îŽJÁ½ñæ e¶‚k†„FüO?¥rÐøjS>xÐ÷c²>§ühC¡ØÂè̬?ŠSŸÌ?Jõ0¼Ö³þ¾_æyxŽ'£!¯§ü—>7Õ®¤1ÙÇ9åBG½ñøäʹFó"bP–3Àa÷Xzb+½Ž(âŒ$h¨ƒøTá\¶½—«;þµðøqÿŽçñ¯^¦KGGš—ÌãÂçRÆ×örVìzšiš~­§As 3$Uš=²cåa@$ãƒÈ¨îtÚT“Λp\eVoAÈÆO>ý)>\µ÷… L³½³´qÀÁÊÁ+¬û·;:ú×v{ \úiˉd€å†9¹§YiYjpÜGm–kgh*Ý2?½Ö»`ãªþ´ä²ÜqŽ´®Ê²<–älº”‚޽56ûýkFùbmFä®Ò†g*}F㊌D½Wú×ÏT·;G³‘P'Í ´²#c¹öéVV4 ŽyçiÞO<ãð:GobyÏAK‚GOÒ¯y“ÈýiÝ@öúÑdÀ¢ÙÏ-î1N'ÛÚ®}™;s޹éH`\c#ëšVAr£€jF:µöeÇ'n;æ£òB©ù˜Œ÷äÑdŽîí;æOáÀ÷5 ·Î>c‘íÍ/ÙNq¸Š,!Ïñ ­9YBýáùÿõªAi“‚ÄüŠp¶Ãí Ùú Rå ‘2îýsšEAÀ {qÖ¥û)9c~])E©$a±Žœb—(î{6…LJ´Ïúô‹ÿ@¡YúC¬>°yKHË1ì å´ õø¥“UŠâ=T>ËQ8cjTåÜü»“9÷¯¨§ð¥äx“Ѷw5ÈüEÇü#öù8j_ý꼚½äº„úÔsÿe[^ý™|‹¿/f&æ@>p[®[§jŸâ0sáè6OÚ—§ûYb¿&]â¤y 18'½;r’F0Z€‰Aç ýqýiÛ\žzûŸþ½|òG¬M”>¿‘¥BœsÇãšç}Ži†6'©Ó$ZÆ7€iG õâ Ù'÷¹õÉ⤘ÆIõ9?ãC Åx#=ýë=ùœqô«S+‚*B¯ãN: fw2j9“lgƒúTª®€ S»g ž09'qÕØ {‚áØôŸÖ©Þ˲aÎõ©Üžy''Þ³56eµb>élW©ê‘„¢Ù‚çæ¦Ò“Í%z’v¢Š3V,×uÀ=€ÍWïZ6¤lü|ÇŠíü Õæÿ¯vÿЖ»úà|ÿ!‰ëÝ¿ô%®ú˜QE (¢Š(¢Šî¼2ØÑ-ìfáÆ7c?#{ŒþGéÜQÒ?ä+sÿ]›ùÕï ¶4KA»¸qØÏÈÞã?‘úwtŸù Üÿ×Vþt†wvßêÅ[«S`ô¬}[ýK}+`ô¬}[ýK}(•ð×üŒÓÿ×3üuV ¶Ú5Û·D1·á»aqù é\¯†¿äfŸþ¹Ÿäkª°]¶Ñ®Ý¸‚!¸Ç Û È}JC-VŸúÏ×ßþÛCZW—sZìòtû›ÍÙÏÑ¿]î½}³Ò²4©^tñ’[Énæèæ)J–_ôxºí$~F€5Ü‘LRh¾@2]BôëúœûUØÙd@èÀ©èEWeù÷ަªh1“PYdkqûµ>èÎ>½~¤Õ™#[¸ RÒ(1\ÄýkQðçýWVÒn>Ï{oäùrìWÛºTSà G"ºêÂñ§†á2ð•öƒöϲ}«Ëýÿ•ælÛ"¿ÝÈÎvã¯zC7±F)k/ÄÚ”š7…µMJ¦[kY$Œ7BáNß×=ž7ñŸÆzn¡)ðä6±Ý}•™¥¸Ï1K‚B= ù»c×-lg†`ð±ÛšÑ¹;Îö“{¿,Ää“ܓܚuö ãÇL^¥Æ]\éZÅÑk©ín\’ûôQRHøÏÖ½Óí1Æc§¨Îy_ˆ-àµÔg€qùfªZ]ÙŸ§ê÷6s+£° õEz6™ª6£d“£|Çÿýzò–` Æ9®ßÀ³ÆææÑ y…<ÁÎÛÉ?‚ïüëšµ583zråg`—R/8éÅnø~ÒMZýHÙ`B »·§N¦³tí.}Fò;kt.îÎ}+ԡЗLÑÚЕ÷= ‡ÿ>>žæ°ÃaÓ÷äiZ³Š²/ïŽðF AY7Éœ÷Úw–r0ÆRRTqŒìl¯é\F½âý_J_¶ÆŽv’*¼OÀÊž7¤gžƒ]7…LJõ¸!½[Ûkù& $|¶W†ÃÏÜè+½z:|ÌoI©jºÞ—ý­¤ßC*Žg) ) ¸Æ;€öé^3m(Kˆä=ýz¯Ä?Úiš‚èz*ÚÃ5¿Ïu"Û¡ãˆÆAòxô¢¼¡æ7<Í´3±b…“Øö V¿ âìÓ7)¬èƒ.Ê£ÜÕ;x5+åU·ŠWRq¹W?ïõëFßÂ7Óa®%ŽzŒî`ç\jУüI¤zPöµ>”ÞþŒn9¢˜ÓF:1cíMG–i8£ÜìpªI?J©â©Ç©iã'ŽõcCÔ—Eñ µã‡h‘ˆ!ê¬ þ8Îqê*ý‚üC¨o²4·V¸>XUûߥ3ÄžŸÃÙ¼× 3\o å© ㌞¹Ýè:ññŽþ¯Ì®È©%¶†õ÷ÄuÁ[ $•î>ê¿üUbÍâOkX¤–8Ûµ²lèßx~u©¥iºx²‚á-ÑãV%¾ls×§>•¬8úVÔ2|5=msºŽPšNlãâðÖ¡w!šòuWcó3±w?_ÿ]iÛø^Æ Í$Ç¿;GéÏë[žÔv¯JiÃáG£OB/êq^(Ó㵞³ªÅ‘¼'òa]r‹ˆcWjÌ‹"©ìd:¯â›q.‘æñ˜dSžø?.?2?*­áù|Í%T“˜¤dÉêyÝù|Øü+¯.Zò‡t|_áTmR+úf¡¤Í™Í{'ÇZÄñ,y··˜¸å6×pÎOÓoþ=[dÕ-Z/7Iº\ã—Èû¿6×n?ÃOÚR”|Žœ_eˆ„üÍ„ºÀ‚MGL|6ð·1®qÈù\ôÿ®uêK~„œÄÏøWÎ:-ѳÖm˜Ÿ•ÛÊaýàÜÿ}mü«Ò¡¼•ÚÌŸî±ùæ.½J5,¶?K¡J…Ùè†îÎU×ýáþŸªjOg¦Ï-”M=Љ6œzì:ãÚ¹%ÖnÈÚ'“ŽÇ'õ©\¹ipHã•á\ÿ^ŸSu†‰€4{˜#Pa”c“M’ÚíW償®ô®œküq£{•ÿM:´=e…'r§õ®;S¿S¯œ»%ÂÆ_Ê$Ž¡jï2ÅZ&R+¯kë)clK{b•fÒIÉ„ç¾èÿúôíK»3ìr©>ÿà}§¹SŠ~ôsÓB+§òô™FQÇ#?ÀS›dçaÉõcþ4¹"öswG<8é·è½éùv®tH% by¿Ê¡“C\änÏàiªMí$.eØÁ-Í’: p]ÀîÀã®4˜á¤™\"i­¡ÎË"3ÉÁÒ©ÑŸK}âæ‰“ŒœnÀìæ˜7=²{ÕÛ+RýT1ÉŸVQQGg©Üö2þÈÈ©tª­l;ǹ d0݃éÆ)œ ?N*äɓ$Ÿï.*»]Æ‹¹±ø ÔZktRHr Ú=;Ö¥¦‡qu¤\j‰qA `å·<1ü@Tºyâ»´–Ù"ILX”°9Êxù…2}lè–WÞ³ÈâRe‘d=HN@éóÖ·§I¯zª²1œ¯îÁêwöö)©xNÞÊY$Ž9ìÑ¢ 6 Œã Ô÷š-å´00ù$‘< R‡#§ÐÖT­â HÜ落m" ÿ-K£°ä×?ÿ ö¦zAf©Fçÿ¯UâáI%4Óô8UqÔê¤ð½”—’LfºI8¸’Ð8ò^Aƒ¸Œg¨Á#¥gü@RÚ Æ~Ô½ÝjÆÿ„óTÏú«#ì#|Ÿüz¨k%¼ÖmVÖá-Ð,‚@cV ÜŸZ¶:Œé¸£ZxZ‘š“9í¸ gÚšT‚v’ÓÊ¥u'† \Š_+åÚÁÒ®éÙÎ=¹ÇJÇ×|G¯ÌAg†×øUr¤éÇ~¿JÉXÂ(U\c€®¸›»Gc¦.¯#Çî`k+§Ž`èÊvº·XuÜS¢ºD%×µt^,Ñ.®5YnaE‘ŸÉ“Ç'ß¡÷'=s\ˆ†H˜Ç"³ovJ#'*O ƒùÒű¢LaòÊ}í燧>Æ¢Pœ¨ÆOÔlË[UxnÓLÑ4˜®¾Ð-ÄjæCÁÚà {f£×uûilå·‘šXm“µˆ#Œþë”ð ¥Î»á{FPñ[ƒ™“ ñƒØm#®rsÅwz‡4»YcƒÍ˜tšs½‡Ó<À ·DC”SîÎ×ÃÿiÔ#¿µÑ™´ÔU2«Ç´HŠ ùA;·gŽ2<çÿ޼%k©i®xVcÞ2¸¶¶Œ¯”Ê(W€N2ŽA#ÛÝ ‚J‚Aõ®?X±“A¹mJÔÓ¥?é0“Ÿ(ÿxg¨õ¹çž3ÂC÷ô‘ó¬òÏ5ìÍr®nB$fpls»<çŽüæ¬ ‹Ö½GÅ:N‘ªß¤áÚÖk…§ FXŽAŒ úö àÁà B8µw$Nܵ§ÙÛ>t˜ÊaÆøÍnªÂtšµŒ9Æi²] Í¡#*ÂEäƒÁüó®¤WžxzïìºÕ¹””ùGopÜÃ8?…z|6qGÙâ\–ÒÔúœ¾§=»h/SF8Á ;×’v…qþ2´ÅÌA~YÆøF}È'þù®Â²|Iiö­|^ß.NÇSÿ|–®ìº·±ÄÆ_Ö§>*Ÿ´£(˜v’™í"•‰,W ORGþb¦éYz<£l°ðwžOcø?:Ôé_µájûZ1™ùÝxrTh)i¢—¨®ƒ!VDd|ìpU±èx5ŸáÙ^ßVkirÃ#(¡zO›$¬ ç'ò¯˜å¶úmý¡»Q‹“òGW>¯co÷Hã óÒ²îˆðþÛÿ¯3¨>”iy¨'»·µÈžxã }Òß7åÖ½ùN1W“±ùDa)»E\›ÞŒ€Aààô=ëãÄÑ‚!G”úýÕ?Ÿ?¥f\øŽé¾áŠ9Óž?J⫘ááÖþ‡£G)ÅT×–Þ¿Õ̹Qí.$2@åCz²œùŠôkIc–Þ9#bèêIêAäW›Épn$iY‹;Iï]§‡'I´˜Cm/1œv ÿ¾q_šÅKßsô ½¸®IoccÍ9cÍH5HÌÙH~ƒåS}ô ×­2XØ`•'5àÊ÷=D’[,}HéKÎÊÝrFîZd?ò̯ÔéOnåc¸â¡‰â•Cªlã2§ùU{I­˜¬»µ“§”¯¶0Km\ € é×ùUˆ¼=¤Í ÜÝËw3™¶¬¬Í•û 22O5Î6 Aú‚Gò§4’íDËå‚NÀÃo#“À~B·¥‹œ½ª3%/‡FkM£4îÌo.K7,ZLäŸ_óÞ«Â8«’²Ç¸P?­g£Î Ë'Þ8ÆFoƧ[Ë”8ÉÏ¡5¼¤ýår”RØt¾˜gcœrI>ª£è×HGî ‚w`ί¦©r2a×¹©¿¶§_¼úŠ9à÷ˆÓk©—ýp~ì,HÿžxoåQI¦\F74r¯³ÆEmh3aâB{ÅJš´*r!Ùþé¥jO sHå%µnpÀ°ëƪO+´óÞ»ßí;W8gŒô-‘üé¬t×Á+ “ÿL†Oéš9)½˜ý£8P¤u8üêMÇøpàX®¾M+N“$¿é¡ÖªÿÂ9mÉI¤õaÔRt;2”ÓÝài$0Ç9¦2·PHöõ®‰|8È7JÞ£ÊãHú år’FG¡?ÈÔ{:99üÄC“\¾¥!iXdg Zïït{刈ž:’9¯;½WYðãi$zsßò®Ì56Ú"M=ŠrÍß1\íÒIç¶ô`sÜbºhTË{``—ÏåÏô­Ð„®ÓìEwª¾Ï¡ÏV—´Òçš‘I^‡q¦ZÈ kh‰ÿtVEÖ‹d`‘–ŽªH!\VÑÄFG,°²[3“íHiÄ`šozè9‹0/«FÌŸœ}xª ò.?:ÛðÕ…¾§©½­Æ¡–èY£’~œ…'¢äÉôÇzž¥=Ž“Á:Ä¿õîßú×{\'ƒ#1ë· H8†AÈ?2×wVHQEQEQEÝxe±¢Z ØÍÃŒnÆ~F÷üÓ¸£¤ÿÈVçþº·ó«Þlh–ƒv3p㱟‘½Æ#ôî(é?ò¹ÿ®­üé îí¿ÕŠ(¶ÿV(¦"ÁéXú·ú–úVÁéXú·ú–úP+á¯ù§ÿ®gùê¬m´k·n ˆcn1ÃvÂãòAÒ¹_ ÈÍ?ýs?È×Eíž›cÞÜÁi•3ˆÆpÜrž: C4«Ïýg‰?ëïÿm¡©ÿá&Ð?è9¦ÿà\ãTô«˜/ÄSÚÏð½ÑÛ$NN-âÇZÚŠŽR ÷ÅrV4†d>|EJýâ¿Òº5 mBÖÓ+7\g}GéM4Ö„4ÖåÝ&äMo$Lyì#Û¨ý hŽk‹œ:WˆÄ’I¶)âÄ«Ü`ð :Çñ'$ºf²Ò>Tû¯!ÿ?Ž?:ÎU£vRƒ{‰µÒž†æV±q¶Ïdd•yUààóÛ¯áXpÆóαF ;ªä’x«ÚåÌ.mRQ†ÈS3Œ#Pi—`Õ-/GX'Ixÿdƒý)E'-M£¤Ooøe¥j¾·¼‚õ‚ Èf‹«#Ž?Î;©z!Ô p¡‹’@¡õ¬}5 ò¢‘óŒ;1Ë £k{í^zô«ñÉûÓã~3+¡ÙœÍ»Ü½ö™™C ûàñþT BI·¸@¥ÆÜ?*ùíÿÖ?­Ihñˆž9HÁèqÓñª·ÖˆèÀíeúÔ=Ì+`<;©%“,¥LO’Àn0·'i<œAžÄ˜g¼3Nòò¥ŽG=*ÍÄ’´-nϼ÷¿‹•ÄøÃR»Ó¢ŽÞÞ5š=þxþîH!döܾ¢³’KR✚G¬Á–·wQÊ|¿/…U<…@qõè6_m°‚çą̊ mèø€ú¼¾y<ÉsøWeàÛ³-„¶¬I0¾åÉþì?Oü ¼Lê=QoÔõréòUtï¹Ò×Càïù Ëÿ\þ„µÏþ5Ðx?þBòÿ×ÿ¡-x9wûÔ=OKü z½Ëø»QU6šRꩦIsºG¹3Ê"Ž$ŽKLÓG‹b>²¾óí£ººanIe ÄçF ÷ãÖ¾ã¡óGU^â;˜añ¨$‘Aû\¼wûçµz§ƒ/EÕ…ìgSû{Ãy"ù­(rW?)ã <ãzW”ë>k¯jÓÉuï¦`#Ž7œ‚N0{wé]X|kÂ^Kª8ñ~Ï•:ŽÉ3]Z0q÷cŠ­öÛë¶)± d¬(XëÜŠé­ô :܃åX²Ùúއò­D"ªªðFü+ ùÅjš_ô<׋£áÂþ§#‡µ–->ع2>I£ýqNÕ4!§i«2ÊÓH+»T)ž§¾^õ×f«_Û}·O¸¶ÚäB1ÀÞ9\ÿÀ€5Áõ™¹]‘«šmèr¶>[@"†ãšµÞ³4¹ƒPAV…iÔVV›?[ÊꪸX5é÷sÅ%%dzÃp*zµ­ðÞôÙø–k'rê"¡@ûΟ0?@¾gçYê´W¤ëַꈤIJ§VËøŽ?U)ûj3¥Ý~'‡Ò½8Õ_eþ ÷EAv#h¯ˆãl%xR”£7e¹ÔžM5Ý"Fw`¨£%˜à ânôà`@Zbð£æ?!Áo˜¶1ŸóþqNâ±/À?Jkü¹bON?Ï4Çî¨|³ŠSÀ'#èhé±² CCmA’xëœR( `GÓša@iqþñÅ€7{6<½®>´ð§ ç“HI_©ÇJ>RpAþ”€qUêAÏcHH#‘œ÷Æi•¸ôö¦!`I‹SéEÂÃãeazúñNÜsÓ­ éÔRƒÇ¯®)\,! Tªçž¹æ¢Ž/)JnùzŒ“RF­å(fÜqËc¡“‘ÉW†4ª¸=q÷¿ÆÃ‡òÍ5@n ÷<ÒÇ[ÄR5èé °¹)ààz hrÄaTŸB0iû‰ÿ1‚ò$ÚCq‚*“ìû@%Içœi«0n=?ºE*A…jFË©ppîӌò±Í ˆšå°AÀõÅâC×ràõ=ê2F>lçé‘Ld9ÈsôÎ)ÜV.}¶uJØÿxàPº¥Âò&lûÕ ¿rÞÜ Mï’p0(» GY»ÙµŠ8ÿhsúW›øŠè^kWlP¤¨Âôà ×bÒ°FÜnƒœ×Í7u$§åÜÄý2k³›m±KMÙI 7dË*¡)„Üp 8ïÛÿ¯ZÑ” 㯯È_LLûAì>”ý?QkI“sß™}µzƒ”y–ç4±IK‘­Ù* „1#5VæÜyn8åH¢;”º&·˜‰ê@Ïä ¦ÜÜ¢+3¹UÝ€]Jçé‘\ªR:H4yËðÇëIËïN˜~õ†{Óà!Ÿð¯^ú=µ&j»£áµ8Q”0lŒ~© ±§¹‡Q·uê$õ¨{zG†íßT‘•æ8>ë]Us^™¤ÔåúŠéj ÛZŠV¾EUQEQEw^lh–ƒv3p㱟‘½Æ#ôî(é?ò¹ÿ®­üê÷†[% ÝŒÜ8ÆìgäoqŸÈý;Š:Oü…në«:C;»oõbŠ-¿ÕŠ)ˆ°zV>­þ¥¾•°zV>­þ¥¾”ÊøkþFiÿë™þF¶îá» ÜÃ`¬·fɇË!¶°8]§ð\z Äð×üŒÓÿ×3üm]Ë §‡ä’ââ{Hã·‡/Ôó€ ¨äœ mz•/b‘‡e·ÝZíÔ¢¼ˆ!šû†”€s†RY†=juŸúÏ×ßþÛCU|?-„3êM%üwÈŠ÷/ªWX€%OËò…ûÝ=óRéW0^'ˆ§µž9á{£¶Hœ2œ[Ä8#޵L”yž“%ª¬·‘DJçË9,G¸ôüjªÝ6à›{¢ èè}}«˜›Q•›2ÊÎO'&“í›ÂŒ žùü«6öGMº³¢:•Ä׆âê2N½}ÿ*€²§Ê¸èg%–¡wËkm4ª¢Š×ƒJ»Â™Œ1€¼–”ÐJµ9¢é¸¢÷ÍO†Œ[ûícû_ü·1y›vüÿw#9ÛŽ½ë_MÐb¼“oÚòWæ;#8ÇÔà÷ô­ËS¡ø:â=sU½k{{rCHs Ë ¼*®î¬:gÇ ”ãV1rWºÐÒr¼]Ž7æxÈP7g!ˆÎ Mow¿Ê¼d--¨Û"3˜²8Èç°ž³]LsxnÝ¥Õ™P>e.®xô-ùSoç°Ô|?0³—Ì…ÙcÆJœî7#ŒýjpøØF¤TSß¶†²rŒ%Ì´;íæÆëI·ŸN!¶‘rª€qÇpr+Â~1hé§ø´ÎH¯â3#— ¸ 1ÿ®ŸŸSðûÅIm$qÍ&,¯›'="›?@zýéŽt>5è'VðC_Cë2A8 s埕ÇÓcþå}Hª‘º<¶9j|á+áÀïZ ë£ñŸJÅy0}ëwGe–½Jžý¨HnD c4×°ÛÆ»šW ¸’Mt1èfÆæ?¶Ø´—Ú^ds“è}ÿ £ç »{À¿êeYàkÙ´}FÓW·Y#(áW,‡‡FçߌäúçÒµ…‘œ¤ÍŸ´bÊÜG—‚8ÂÁ¸t\Ž_O¥tv€1fà·VDS&6µW»ÓÔ{gùÖˆ…ˆ 1Ç=xô«næeÅ’3 §vIž˜ôúzS˜f2@ÉÅ>07¡äÿ"}ú :?_ÿW¥AG+­n®¤‚¬ø út¦ødÈÀêÖÁ@7›Ôó‘Ó¶ç^j£S¤_Ütsǹ¥§é°i©:ÀX‰¦yÛv8f9 `t¯ ûA“]×­ÉɃRœŒ­#=Îàçñ¯Oÿ„ÛÂÿô¶ÿ¿ŸýjäRÃÀM­Ýê âšâòF-¸M»÷|£fsž^µ•z3ä³V9±tÕzN1zîb­šêÿ³|#ÿA;ŸûèñføGþ‚—_÷Øÿâ+ƒØËÈñ~£SºûÎRŠêÿ³|#ÿA;ŸûèñføGþ‚—_÷Øÿâ(ö2ò¨Ôî¾óÆïã6:ôã ó7Öù°=†qøUúô [Ã>º•.ou»Èp¢ |åPy'ÇדL@ðŒmñË `=òm:nQLû̃¨Qtêëé©Àçg×¥zü#þÿ õ×ýþOþ7Ht*îm~äS:ñºËØÈú›PZµ/¹ž~j–¢™‰dî§ñ¯JþÆøwÿCßøÿM“ÃÿçŒÄ|Epwà \&síûºÒf¤™Å‹Íp•¨JÞ«±«àËñ{á%wA໳å÷*þ4ëÿèZzŸ3PŽWá ýá'Ó#€~¤V4ð Ñ›X( 2éºÆ´àá³X#ÄÖË·}£ƒê§?Š´ä8y&ŒõÀ<~÷¤©Ï°œ—siU@,šyPË’¹?dÅâ=&AÍü@›Ë&?:·§i6<»ËWúJ 7 -Â÷,`z}i£!€çŸOñ©Wäc‘Gð“ù ŽQÜà´sÞ—8è¤ãÚšU{~§(%y#ð4¬HåÂíÛÙB•#×ëùR§Ï“åȤt,x5!Ü!‡Ó§e‡Ls@Ìã…$¤ôý*P×}!à n>‚¡‰äÞC–À鹨¢À<–WÀ#ž@Ú!9š28ëO“lœ¤çŒŒàûR`aCÄt#ùQ`"çøˆ>¼ŠX°>O`.òÙî=sLF-¸Ic·­<àŽž´¹þ´ÆÀ©_OZj—¡èNåT¬½Iwæ.ò t4N1Å'›†a‚¾ç¡¦ùŸ:‚ ã¨è(‡Žù¤dè2i;}ãJÇ¿½$V»2Û鳱݄ zžêk€ Àé]wŠ®Ù’ NY¹ Ÿ×ÆÊûarzòGµz¸HþïÔÎnÎæ\¤ËpøÀœsŽ*5ã·î”ɯ]++<ÛfφïLšÂOîæùqèÝô­ÿ(þú}¸Û·§ÔW+£Â'Ö­•AùÌb;çùà~5ÙëÈ÷£žcÏ>Äó1I*ñhôpºMRÕr!¶0¤UT]ÒV†G•é3ψӑÚ1 <ÔµçƒHlô_XÜÚêÒ¼·&X͹'r×o\§„¥óv6Ün >üWWNèRVaEUQEQEw^lh–ƒv3p㱟‘½Æ#ôî(é?ò¹ÿ®­üê÷†[% ÝŒÜ8ÆìgäoqŸÈý;Š:Oü…në«:C;»oõbŠ-¿ÕŠ)ˆ°zV>­þ¥¾•°zV>­þ¥¾”ÊøkþFiÿë™þF´u‹)î|5åÛB^XRÚQKlmÅ@ÂààtÀú Îð×üŒÓÿ×3ühë3ØøkýÌ:[@. {Ûi m î éH}5¥™µ]jße¹¶¶©n‚â#;n,NÓÎ@ÏÖ¥³ÿYâOúûÿÛhj(M§x–ëIû]ÍͱµK”7™qR7pp>µ5ŸúÏ×ßþÛCO º³Í›ÁÚDVÿ,nÏÊò9'#¨ãô®vò(-¤J„+È*#ñª“|L‚äm“Çì7øVcx›O¸™Þçí1¡2#cwëÁãð¯¾^¨â¡Z–Í«ùjwR¯zn-kfF¾µ;žúV‡FéýﯵUñ+iú'‡ÖÞÆEn®‰Ç'žŸ(©.âœ[C4ò™<Á” ù8ÉÎ{W5â‰h²Žå[÷ÉÿëWž" ¬¼Íëb%84ÙÍøNø}¢[9Éò%mÜmnÇÛÿ¬=+Ýü5ª&µ¦M£jJ$™a(áÇB~SŸÏüs_4XÈȲȤåXqùצxo]’{x¯múÏ/鿌cß#ƒÓëɯ¨Säž»38ÓUèòý¥±çž0ðeç…µ¹íš9%µÞ|™ñËØtoZ¥¥ÅtŒcØ#LX®xÇ?ç½}Dö_tho1´ºòPå£nêúã§5ÇÝü"™åf·Ô"ÚOã#ˆ5Ò¡Ðó¹šÑž?,RÛ´R “#!׃ÓÒº?­Ì× dïäê(¶gn%PsåžÛ¿ºNx$u Žú„—ª6¥n£w?º-Ç|r+¥Ó>èšt‹<þmäÈw)”áAúëšÒ1ŠÕ²[lÎÐRî{‰ã¹·’/-‚³:mgŽzžºón±ñ«!¸=¿ÎkUñvk¬-€Ô!–çiß Gqo$±…üH?Zç5ÿêF7ò”»l1îÌ1øŸjNZh="ÖO(²Ëò  y$ôéþ{W%¨øÙ’å­íàX]ÞeÁùÏÒ1ÈúœWŸÛüCÕÔ<°M°¨Ée· þñ<ä{cŒô²5MM/n[Q…¼ò’dGÊI‘ׯ$ƒëPÚ)Eõ4µÏêov²owÁùd”åO®|£¨ªRÄž)„‹yÌzŠ–?,ÇýƒØöÚzñƒØæ 79ç6žÞõjßNd?!¡õª¥9r!NÐ32¢³¹®cd•Nßœ`ñëS_Ú<"'lFÜötçÒ»u¹µÖcjXŽíGÉyÀàž¼½zuéYWú5ãøzK¹ e€?î¤p~fžS:šôç„„i5ö‘ÃL¥Q>‡)Hîóÿ&½àÿüw¿õàÿú2:ó•ù%ÁïÅz/Â%Yv‘å7Âåq»$©ùöê@ÿv¯\ê–V„¬÷Q£‚ î#êH¯Î%¤âŽ”dª8E^ůj3\õÇŠ[[fcÙ¤ `ýr?PÚkí‹.ð`MЦþß‹V°ÃT—Czy}io§©¥â†M&Xä’$”$^c`’:àw$d~5ÊZ^,²”-ódcŠíôß…:¥Ïï5+Èm7rUzùÏ ô©¬];LƒLñïö^£Ë w¯œˆÎ?Ú;8ÿjº¡‡Q,Ïw.u0:Ó–¦DS_ßJa´¤ ì†2í^õµgà]rýÃÝì·\™dÜÄ{ŸÈâ½B"¶‰b†(âz$jÀT‚·8GdtVÅÖ¬ïRMœ}‡Ã½2Üy,×oЀ|´?€çÿ®–ÇK°ÓT}ŽÒ1¹?SÔþ5oŠ*îsžD° ÆÒÙ…)œÄ¨§?#ÿ«ðd?…uýsXìüVÒõÏ´DT•àïB2Äý@ÿvµ­n>ÕgÀ]¢TWÛŸ»‘œ~*a½IG¥8 LÒÓ$ê/?äŸØ×Sÿ¡½yŠ!6úÏž™ýò+䎗ðPõÛÄðØIónóûÇÞýº~8Íy¿‹­|Ûn’ÐÈAô Óù…Orú£(0e :‘Kš­fåí—9%~R϶*|Ð!sFi¬ÁT–8¹¨òÎ_'Ñy¢áb¾¢¿:?<‚¶?ýuë‡ zñZwË4{Bàœ“TZm üÛjKHO%Ï ÿ½Å ¬O®*´—ð.y¸îóUSbO•=Ú‹”¢Ù­”…4É.U>ùö汚{™O.@î5¬³J©³3gŒtÇ'òÔ¹v5=Ï]ð¼9£ørÒÆãÃââíw´óyì\‘Éäü»FO¦;Weá&~4ÕÚß÷Ȳ[ƒåªJCæ!N¹Âœ Ç¥xŠ[YÙÄJd˜1-µöO×?…vëãx"ø{k¡Yµå½í¹$Ý[Ì#*ZGl)ݸ|­ÉúŠç’R•ÞÈêP”#hnΟU×|/¨YmítkvfÊžP8ÏLàXo¤è÷ã÷~[ŸökË4éޒ™à8‰±éØã>߇ëDyD†±ÍrÕRæÕ4iÅÇDzao¢jo5ªZ©ò°ë4 Á²N1Á#Ô†I¦óYítÙbc÷Q¥^@Æÿ®¼îÛU¼µ$Åtè[¨PûqÓ¿¥h§‰õØ»i˜ ‚U6óÛ„õ®J´yÞæœt:÷µ´û!- ®9*Ñ\.s×#ä8Çûݪ´š6Œ×0µÔmâbDŒá\}ËÜÕ‚¾*¸—i¹ŽØ…Î6DÊ=çùV”>3‰ÎÙlãEH™‰?†ÏëYû–†rŒ‘a´Ÿ–8uo0´`a lŽs×cÓ¨>£=k–¿Ò„Z¥ÔVáæDs"3Aþè=ItëâË)Làà¬}p{ç5>)Ò£”¬ñÌŽÎØ>XÁ㿦+XFH”ìÎ>KH……oö†ÜþtƒL…†ßCšôA¯ø~`?Ò¢V<á¢oþ&–FÐn°æ[&=·:çò<Õ^]§7tyÈÓŒL|±$~êJÔ±›ø2b¾º\ÿÓBwpèºuÑÃÛ"œýès´¨¤›ÂöEÏ—$¨þ'¤ùº…ãØãRÖc騟éS/ˆu¡ƒþ‹ ÷Œäk¨“Â1|»§ôÞ ÿ*¨þä¹Wñ™¨åOt‡x™+â«Ô˧#T“oô52øÄ(ýîŸ:û¡Vþx©¦ðÝúr©¯b¬¨ªrh×èÄ}ÛýÒ O³ƒû?ˆþeøüa¦ž|~¡¢?Ó5mc¯rk¤Ñü|C¦½çÙ&¼ù¤œÅæl+óýÜŒýÜuk“U'÷kó.œ[»:½YV H‡b,¡pxùyïŽIôòç‚ñ¦åÓ£ç‚è5Ýk2«ýŽ%“ÌEŒŒ“è};qÔž#ÅéæZÇ=ÿQþåÑ×’éþF²þÃiv²\«,-™3þ¯»}=ëcI–}PŠæ!‘œ2ž„wSSxOE·DÈåcˆ’ÛA'Ž{VýÞ›ÀšXVàÛïÚ'–<$¸##=zàôï=Jµ“Š.œ•>Y\ë¼1­C¡ê1K(Žm*ø!<˜d'ùüAîpO'Šõk‹›[F¹º¹† xÆZi\*¨õ,x¯šMõŵ›Z™¤XÕ‰ò”à1¬ÝOÅ -­–p÷·0®ØÍÓ´©ÆD'hÇPyíÅtЫÍ>‚ÆSMûHõ=ËTø«£Û$‡MŠKØÓ†»aå[©Èo¼yÎÁëÊ|OñBÿVg…n^h\ Á ê#%˜8'éX‘é:‰ô¥Ô®/TM#:Ú[¾I”®2胠ç5É –P6ŒW)YØåŒSܹuª]\Db–}°Çò©ú÷ºwÍoè>4¸¶Qe¨§Úì[ |ϼ£ØŽ­sðé¬üI­KmðH¬e]GVÍÕ&úôÞ´»´:¯‡§frwy€*ÝAùtèy®yâY~AnÌ‘€þuþ~Õ{F¸ŸJ–7·Â»YFHnzœŸþ·»$]?Ä‚ÀCx8ïôõÝ™J²©¤^ érjö1,¢³Ô¡D¸U†é8Ž{7øÇÖ¦–Ö[yŒ å²Àj[½:KI¼£… |¤w«ZeÙºuÓï£2ÇÒ2ÎŒOO¡'§NkèðT=”9Þ­îxتÞÒ|‹b+K’`æ:1ÕAÀ<×ð'ÓŽxÍvsé—7úd‹å–¸y’Xà Qæ\g®O?OlV•—…­´ØËJÆRz¶NÓoò{Ö„%žéH;BƒµNFNKsì?,{ÖU±joÝè:x~U©óÏŠ4ßì^Ø¢$b)$jI¬ªäõ ÍvùñUážÄßÈêoŒz:CcªA *4Œ•?V¿ªß¿äg¼óöãþÚGYaq*4jÒ—U§©ÑRç .‡«øœß×ÄŸúªIíVµR[Z¾UBI¹ùùliüO«)§Éo8ó.O”¾ÌG¸½§œR…4 ›v^Hâúœ¥&äìse€$~Ö;цÒAMzî“ðnÚ2²jÚ“Èx&+eÚ3þód‘ø ît¯ hZ) a¦Aƒ¤¬7¸ÿ6HüëÌÄfÕê'Ùy™ÓO »î|夨Þê—ɦØdÉsÆÁ&ÐûA<äààn?wúgÂIÖÕ5AÞ;UÉ#·ÌÃûäÖg‹Q¼'ñEï£VXšt½P‡ætsûÁí–óé^Ê0X0=ƒ^\mkØé{œö›ài„¸<ôº À”´U6Ù!ŠñïŠO¦ø¦×T·"7¹Œ:¿SæÆ@Î=‡—^Ã\_Äí3íÞk”\Ëg*ËÂä•?+§Ìÿ»RÆ·.ZÜÇ{gÔ@ˆæe@ÝB°gð55rÞ½ûW‡݈ßk+GÉÉ*~`Oýô@ÿvºš`âŠ:ñŠ)ˆæ|ycöÏ I*‚^ÚE”$giL6ãþís^¸ót$‘º @vŸ˜ø–…z5Õ´w–sÚM‘ñ´Rc®ÖÐ×’øZIm5‰ì§_.GR­9ó·à7Ôu+¡ØÑš¥u«XY’'ºpTŸÈt¨ìu õy–;()$o$w›–7@m»AÝŒóŽ˜9ÅQ6;›¿ù'ÖõÔÿèo\·-©Òî ¸•ž2Q€,Õý@®ÛS³h~Z[ëz‚Y‘šâ{BNÀÛbç1&=OCßÏîü]á=! 6zdW.¾P.É‘6ßœïv˜y»„dF:Äé­Ë},sšMµÍÍÌpCúù<µwÊ #““Ï@A8Éö½Î”ãª81~äù.pWÚ.Œ±íŽÜÇßtS±oü{#Ë\BÖŽ<¹HÎpÊ0ÚºGMšÞyS •BAd$0úƒT¬t÷ž)ReFȇ 9†çÿÿ9©¨“ZŽœ,Ò¾æ)5Üé1y’9¨çóô§µlÛxf\ƒqu3ˆ”ÈWØô‘5³¥évö“É!<郷<(Îzž™Ûǰô­øìãL¡QßúúÿŸZô2ü¾•hsÉÜÊ´ä§Ë†¹ðõÂ3 Yá‡+â’ëƒÆ?ÏMKR¶sÚî e8d2}Åz$ñ4°µ´®<œ†(G+ƒÕO¯ÊëÚdóÉ ¡—+æ6~qÔ Oý›ØV˜ü®麔úN¤¹­-Jqø“WŒ —¬qÝÕ_?˜«Iã QÍöyrL‘ãÿAÅe6›È=U‡õªí È;M´Àû!5óÎ 3©F,écñŒ§ý}Œ.霅ê 9g‘f tçylrGã\°ñv¨eV‘ât,J¤þ8«ÃU—S'–Þ4DRй-žä“ǵB¤‘t0ò«>RÝÊè’>é`žÝPå`sÆ=ûšã4ϧËç ¶IçÖ­x‚òH-%íf;û×ß ×%;Û'Þ»°ÔbÛ:*Æ8zŠ4µºÔéb¹—WžâàØ•ö‚CÔÿ1I=š¢n‘6¯«¡_çZš±ÑìdI¡i& 'ÈÙ9ÏFSÓ¨øÈ­í›H[dªÈòÉÏä+:­s^äÕ£U/hÕÓ8g²ŠEÊùlLÍE%‹[C½ÜœñßÚ½ íú-Ò=íB‘Ò\ÐÒ.‘¢^ÀJÃŒa³Ú=¹Z˜Ô³ZœU±çŒÄãòÁ©¦[uS’ÄnÈ>¼×Y/„4É#"$’<ŽecŸûèšãàÞá¢þãü«¦-5¡ËˆnÈÑI˜–F$÷Ö¥±Cöä”bŒqÇ5”X†bµ-n_Lf¢mA?Ú¤Œµ¼e½‰~TÇ/ÑÝ“`#»=êšîãp<{ÕëÍnß1ŽŸÞÎ쎨¶yˆl–ËYž(ÀTÝ=+5îϱ®“Æ‘…×ä uPJçÑÆ~6äÍzÔé¦pUVªÑµäÐzÒƒÍQ'iðé³tž‘gõá^‰^mðí±­Ý'÷­Éü™ƽ&ª;-Š(ª$(¢Š(¢Šî¼2ØÑ-ìfáÆ7c?#{ŒþGéÜRÒä+sÿ][ùÕß ¶4KA»¸qØÏÈÞã?‘úw´Ÿù Üÿ×Vþt†wVßêÅ[«S`ô¬}[ýK}+`ô¬}[ýK}(•ð×üŒÓÿ×3üuV ¶Ú5Û·D1·á»aqù é\¯†¿äfŸþ¹Ÿäkª°]¶Ñ®Ý¸‚!¸Ç Û È}JC'–5š'‰‹u*J1SƒèG ûŽkJ·KTñ1´Œ‹tpe•¤oø÷ˆòÌI?‰®†°ìÿÖx“þ¾ÿöÚùïBðN«¬Ç-›K,(#¢78/ë×ß#<‚1]¶ðæËE $„OqÞyåý•þ¦·<z$ó-¹:{އõçñ5ÐêžE½£Ïwu¼ >gv ÔšÖ…MLk>D¥Îl4vêÑ@»†˜œã¸ü{ã¥aëwözl^uã´“¶|¸¾ó9ôWTñ|SÌÖ~„ÌùÃ]J Æ¿@y? éŒÕ[Ú;µ_êP]^¹æIK€>ƒoN~ŸJÃ0~æçE*ñ¼•Œxìn¯oþ¡…cÄPމž‚½I×4ïj‘júµÀ¶²„±’]Œûw£…õ tª_Ø &ËŽ·™"}ì" ŽO>¸®wÇc Ô?íŸþŒZðñ/‰¤¼×æu8¨Á¤w:üŽ÷q¤ªÁÕ9 ÷#¡'Ó®y®ÄÒ¹ž(Ü*;Ž:‘Ó?Óÿ­Ù¤7:¤þlŸt›ÏEàsדëßÒ¹OéñZëp´[Æ HØ0êFæÎzgçvã®k< XÔÆ¶Œê¦©ê7Áò[Ù­ÓJÀÉhãBìF=n٤׺òú3—<–§#ªÖ†>¹ªjÂ=ÒãìûV8ÕÔ³ÈÞ£Õà kTÔZíd HņØú1äg•ûÃÒ½ßEðu¦X…X`¤nK°ôy8${(Qê t±E1,qF‘Æ£ ª0öÓhGmBó{³Ç`ðSèvÑØ ^k«[všTÚ§æ.Ê9ù²:7ǬOø40ëšU¯™ip~"÷nqƒ·®z^@ê}«QT•#»Œ7™i0b¸ä©á¸÷þUŸ£lÒõ+ý*P>ÏþºÔlnÀzGÑj%4ÑQn,ð˜´å‚¿7Bj` Ð~•ê~.ðJ0’þÅvŒe”»õõ_~«î>ïžIlñJc•v¸ê?ÏZñ«Ñœ%®Ç£J¬f¼ÊÉæAçÚ¯6l¨œ:àç¾¥2[›m*Õ®.]OÝ/ßü~ñùòºç‰]‹¶r#ëÜüäF=ÎOB{ùnž*¾#w²<¬v&u_±£ógs7‰låŒÚßE¾TPÛ£u ÿxOåÅS†ÞkèÄö—QO <àí1ß.{ç¡þYÈÏ–­ÕÕìË·1DpŠ2y>¬z±÷9ü«Õ|).Ÿ¥éRÕo­á…[2B[çFVÈÂõlŒŒò1Öºå*“‹šÒ'4c´¤ï#Ñü;¨™4h#iä˜"3Ê3½¸È9ç=óëšÜt‚^ÿÌÄ‹¹Ë<°={W…kÿ¤ÜÖÞ´û$Ÿô‹…#s¼¨ï×w^ÕÀjš¶©©Ê%Ô¯çºrw2RÁ}€Èå|Ëaögøv`/_ö6ƺé'\ð¶£§ªî–XIˆg‘~dü7šò¦ÛËí1˜”–1q<¤+c܆_ûæªQ2GªÑA¢¨€¨/m"¿°¹²˜‘ÄM ã®ÖÐÔôÙ$Hãg‘•FK1ÀÏðòéÞ$ºÓ.–ò¡ãëûØÉ8ϰó+ÒëË|Qwi§üA}KN¹†x Ñܳ¾A'Ô·L±N3÷¿ è¤×uÛùÖ+h,ìbد+´É4±‚>\Œ1 ÏLç4Ga³¯'<`sšÄ¿ñv‰§ƒæ_$®?‚œŸlŽú‘\Æ –zmÁ“ÄzëjWHåE¤{Z(¤+1@Ä0VºvgË~£ƒ–~ éÚ1Qa¦ÙK2 F¸x rÌà*Œ…f`ç…@?ˆáˆëÛ\×uŒéš/Ù¡’CÚ5Ø„óS9/9äW{§kQl5ĺ—Ú£–ùU@„G" L1`Xd‚7J篜©ÿëzÕŽ[È@X.S¾É ÿ*|šŽ¢ÑyRËæÆxÁÃqøÒv{£«©JÑRӱƴ0K!P%Hnþÿ–àjKTŠÙ•Ö‹÷ ý:V¼–0ŸœÀÁÁê¼ÿCP40»æ'a“üëz_]¡-nfIx·WsÛÎ8à¦Oþ·LþJ%ðŸÛ¦·ŠK?í;q*HðBÇs¨`Jå2˸qœ‚xq´Hî ´—Asæ(Ëdû:ŽKMXÌ˶¸@~òHþ çùÓP[µ±ËRªwTå£ÜÐñ¥Óõ§kytÛ‘çÛ3†BªOCãæ^˜Îq‚pN*·²·Ö&ÀQºI?¼z/õôëíT|A¯kšO‡mV[h?³í.üÉOß™QÆÜ)ÎîÁ*9-Ž@Ít6Zd•¦Þ Wàà‚1ÁN+ª1WŠÜºj9{òÛñó0.m+ˆ‹±CŸ”m=°G¸ÅléúÊF,0à‰€ÇL)ó­mŽS…8û¤ŽG\çóª·vúq+%ܼiË#ÇËG ïÖ±…V´5­ÕÕîfÞjö±n슌Üò<®3Ðà™Ï¶ gZ둥ђo2B«µFÐF{Æ=†*­Üd\Í’yŽ·3î'©'¹>½ê¯”½óõ­ªK›ÝègB„cï=Y£sª©ºymÃy-´œ6ÖÈ=8>‡ž§èvôÿ¤è†{ÈN«p·Ôª²‘ïòœŽ•ÊG >ì tõ¥hgÓE»@@'Ê[qP1»n9æ_~8êkl%iÓ÷`ÉÄQ¿¼ž¬î/µ/°Â<–qFH$4ÎÄŽÄ  cêqÒ™ ÍxîÈD€!Ã?QÇà3øœ“çW¨”w.sÏriÐÝ\G6øüÈÈé$mÈü««ç^<²‘¨Jów=I`7DHÁÁÆF3Ï^9ªÒZ‚6:üÛs¹@üH°´fIìd–ì˜Ä$nÆðrwÈǧÌ*…÷ˆïá_Éî‚ÒÛ3•p;®—^þ¸Æ¶IóÞáO »5b«h–r†'£ü«*}¼Á#‚+’\Iƒ·±ç5ÙO"H¥”åðã‘Y»•cÝ#”ùºãïñÓ§=¾™+ŠPœ_îîßc¦Q‹6Ç>Þf|%ÞÅôx÷~ åH|3x# ²DrqÉÇò¾·;(ÍÙqØÂ3ùnö54sÛ³4h첻˓‚åÏàk§ ÊþÕ_"SMnr £ÝÁ,fáV8<Å u`<œžžÕX^=¶±uòùq<ÌÊ€î Èúc5ÞÅNdG,ïÁX‚òï\qšÂñÕ½„BÑö²ÀŽr|¼ùõÿëwÉ]7WØ$õêkEºrç{ê:LšŽ–%òüûV\+ŽDXçîò~œŸ¨åχ™[ pDd÷LŸçUí5[‹FÍµÓÆÄcär2=+\x¶üÂRe†RŒ`2þ#üs]¶œU“=$¨U÷šL¿lФ9â1€OSïZ¶ºž©h÷÷ÓÜD¾c"ˆeE  ÅNNw¾•ÊÙØk¾&¹2YÙÍ2ƒ€àmAí¸ñŸlײi´ÓôëxLQµÔ1*¼  ÌÀÌ;ŒòkÇÌq_WIEûÏÐçÆb"áìâÏ-Ô°¤šÙ%UËc¹.«´í'ÕÂÝFSR¹ÁÎ%oç^‚Ámãç“’8®TdMNä±y­ßÞºèIêF).]6àdÖÕ³â!ž+Ö&œ‚AH‡r9jÜiQŒ= 9½L žå¨œ§UÂÃ5¥j±»mU „½¾jÊU;CdpFy«ö+ˆ‰ÞT ç¾9ô¬¥{XÞ;Üó¯G·XSÿL—ŸÎ¹^†»/ˆªk1€Á¿uÊx8cÍq§Åz¸á#‡üV!¤¥"’¬“®ø{ÿ#ÿõêßúW¥×šü<ÇöüøÿŸVÿÐ’½*®;-Š(¦ ¢Š(¢Š(ºðËcD´±›‡ÝŒüî3ù§qKIÿ­ÏýuoçW|2ØÑ-ìfáÆ7c?#{ŒþGéÜRÒä+sÿ][ùÒÝ[«Qmþ¬QLEƒÒ±õoõ-ô­ƒÒ±õoõ-ô WÃ_ò3Oÿ\Ïò5ÕX.Ûh×nÜAÆÜc†í…Çä>ƒ¥r¾ÿ‘šúæ‘®ªÁvÛF»vâ†6ã7l.?!ô) /4øoöyÏr»3"êHzúìažë#J·KTñ1´Œ‹tpe•¤oø÷ˆòÌI?‰®†°ìÿÖx“þ¾ÿöÚò}Jê]&ê9,æû<å¬ŠÛÆÁ÷®kPi®ÈŸT¾¸½Ÿ9c|«ŸAØ{ šîY¯ì~Þc)Ž>~¥GðÐýjÇÚtåÒ£K›g–V'œ0õ?r»À¸Yï¹·‹:ÆåTpžõÛeòð²1ÜxöyÍŸ’iȉž&šFçêrGý­¬ƒÖ¶ÌÞ·Psø 9§ÏÍÉ÷5¼45Yo£Žä[º°i„`ðOJôG~'¶W»¶ûbY•¾Fì§5ãïâ;ù¥kÛ§Ï*Ø@Þá‰cÿŽÑ/‹5="ÊM[A³k9 ÆË¹Îh·§’r ©ëÇ85Ï•Ãê?4‹MF;kXd»‹~%NÐO”[ô„×aýµõ´SÂé5¤ëòH§#è}==ˆõ¬Ó¾¨¶š'–‘[åù™H<ã?S\•ÕÙ·{]EÆú|ÿfœw16ßЫê¤f Î`ÞÞõÇøžöiõx–XÄòér™£S–WTbŽ}Ôæìî+ßC¯]Ð30ù¡bXžéßñëüº×ŒøëYÑ./šOJ²².®‰ÿB‡¾Cs÷S äž9æk‡ÎXg?(öèy<”vz¯ˆeŠK²Él™[¡BƒÔ"Ôý3IÅ6͆£â–ášËÍ»¼éöéÆÒ½?ÕÆ8ŒqÇ¥PÓl ¸œ½íÉ [/rG|yúþµëúÂ5»ÒÆt"brÀôËuSèqc\•ïƒåÓ5Imn]÷!ã+µ‡±3ô$ š©VT¥ÏSPTœ½ØèÌø×KÒ¬ŒæevQÐ}æ>€æoo濟ÌàtUz µâû> Ö™„@g>¤üˆ¬œ×EltñIiÇ=<$iMÉêÇ1Áâšw94ÖÉê:ÑŒzg=r—K"9#”—Î$ŒŽG¸=ý}«Ô~È‹µóÿ0çoü‹y08œ~êò“$³K &9¥hÊ£.r gž nÝÅ$ìî#Ù§¸†ÖšâXá‰9g‘‚ªýI®WUø“áÝ7)ò^Ê6Û®TÀŽLׇÞê·—Î$¼¼žá”`4ò— }I¬¹õ83qô^Z˜(žî5ÏëÚp¼Ò ±°³!I]Œ®r̤Œdˆs×Þ¤ºM¼“'Šuùu;˜ßpŽ Ž ;ãnÀ.UA"?ºÄ:ùñ¡.›˜¹™mîÁæŸx·ÝéÕ‰ú“V|3¤?ˆuØ ›/n‡ÌŸ= Žß‰Àúdö©•EJ''c¼—]žóNŸOðæ‡*éΦ4ixÌl¬$œW|î<„8Áæ¼Kuâ2ÖÒÚãP¼£ÅËÚ«‡*ü„QÎxAÍzŸ–±4®Ä")fnÀ§úןy_ÚúΩr’§ä¶ÇàüÍFSÄÔ²Û©­jp£M·¹ÃGgq$öñM) )+Œ)ÁÇú Õ˜4wªH˜lýAúbºÓRþîiˆÂ ,CoO¨üsøšÞ…ìã\7` K+gê'ó5ô)BšM«¦xUªÎm¤ì×s˜¶ÐYIØ>讃MÒÔ±(™XÕ·ÇŒ=zŸÿ]Kþ•É^‰Õ|ÈÀ~9ˆŒgñõúñMµñd±¨Y.¥ŒãºïNA5ÉW '+ÄÖ5l­#¤0”s½¿ÇáÁu´rImÌdaȹÿ Rù>L‚EE${œV±åZ¢~µYnîyÝׇ5hÛdî‹€<²“é€súb«.›¨0ÃZ<8^|ѰŸÏï^”ÓÎŽråÔÿ{ŸÖ•š9cU–@:nàœõ?†F8íéμìÛûBv³Gi²Ž+{…_"úÑÈ[ŽÓð «`œ O³ÛH¹yæC*²ÆòÙÈÎê§9ëǹë]´¯Œ¤ð«à‡NŸ¨¤[YU€'Ü8g°#aYJMô9åWó6p×:wÙÚ6 ƒ³N¼gw«þÓ®!Ô’þUÛ hørÅ‘cÛæ<óÓòìBZ»)y¥ëÌfâ^Þ¸ïN¶ÆXÊO‚¼„ãû9÷<ñÖ°©+EÛsJi6Š…äevù”(äã¿ãøÕXÜÍÏ»“•Sèû¿—?ð![w ¥HvŒó×7çøÖ0²’ÝÛÈ’"ŽrÏò}sÏçåa©NœÜ¤zn¬w¹7LsÎ}¿ ŠXâ‘ ™YT¶[Üò8{gíYÜÌú,‹ƒÕOõôüê”òI4­´tàqÆ»Úh©b!Ë 6µ,,°£»>HRÌFI' ò‘ƒÉïÞ²uØ./e³îeŒ/~Ï­]ŠÉc¸Y naÐÕ­ QºÀ†=yíëQËsSQ8œ§4ÕÏ-¹³xRT*IÈôaê=G¸¦GÓÊ"Œ¾3ƒŒð+ÔŽ“vÑŠÕ0ùÎÎ?Ï}-‹3 ßÝfüÖňPT`m85„a¦£nç)‘ ’»gæ*?úÔ .Ö6ÈÃèò.µÔ^Û¥½Ë˜ìš—sE.öÁüü+*=bHcuŽ[b'§˜¿M¸j×–û²njh:»‘|»G‰;f{v žß1~Yük~j~.‰´n¢°‚à|Òù‰3.Ó¸|Š}WxJw…¼1wâKT›íkyo –`8Îá¸÷öü«¾¶°³ðE©×µËèá²³ÆùŠîùUAÏ,: ÓÙÆ+b\›gžÝ[Gd„Ýß;ʧmíIýd`kgMÓNµ,ojò4 ¸$÷äœwÀÛ5ÓkVþðÜk.§9{°2‘ÀÊãéÓu8æÏŠ/õ«—µÓÑ´ë9ÎÖ†ØÒvùØ`‘ÉàqÏ Õh¶#VÏBÔñê¾$ø«uiYصxúž•£’G-çg±ËÍ<³929<ôíMœWš’÷J¿;œ¶Ô·”.xé^¿à=iš$w‚·X•ÿÜþéÓ-ëócµy׆ô«ëPÁ"ƒþò`z¿ÇLçµ{1™’Ï Ù,Ä禹ê'(Ù½×sÆȉãÑâÇ™0O1‰Æ8Û±ú¯k=¥ºÛÙÄAo)¤T IexœŽsùåf…µûé.î›i¸bì£øW¦è{ ÜRRÑm“1BÊ)ô[»w95õynS8QšWÕ½Ï ˜AÔiën†„wñ)w\¢““æ)Q×<äcéV`–ÓP`bX¦åÕUÀÏæ+v§%OÕ-NÀO ·6Ñ•¸ˆ)Ú bP[ûŒç>ƒñCƒötÜ髵òûŽ,6%TŸ%Gdûêv/mm.±Ï*2Ö®Ä[pUTÝŸJä|/¦ÝG¯rÒ/šÀ$lNŽãëœÀ}ë§ftÛU¸bžôýGë_%Vµi®Y¶ì{Ñ¡Fœ¹©¤®>É;'ÌÃ, wÇ—OÃñ­+k½TX­œ-¶ì€·iϯ\{{ÕXCÈÝZP­÷°j视N r½ÙÏR»RqBÖ¤’',Œ8˜Žûo\Â$„gi¹àþUÛêO†ìw Ëæž£ýúå§lL@9ãµ] $*§ÌôNÄÕÄʲÝ\Ë•ˆS·qjXæs€@ö¦+DÇ®Y¶±8Ö}Ã$Re3ÇNk Ôž8É]teÓ’¬Ô¢ìú¡òL9Ýž¤žµFkH.I„’OlT\& ëREt¾rÉóÞ¸»ª"É2árA¸õ­ˆÇ"à]¸˜Æ*¼jŒ»ƒg’yížÕ=º<÷#,äg¨“M§k¶+¤6x–dt`G¡¬›á5¼19”î¡zqÖ·žÊUr¢XI¬ßüMRš2b×k(éÆˆÕÒÉ™òBR¹‰ssØe a½¾•[ëÐU›˜Dn Œn늨Ê[*?:‡«7µgt.sÕ€ øëP¢€NOÞµ-4{½IQm£Äjp]›Œõ$þ=¾µ¬ºu¦:¥¼áäŒâ[‚¿q½ÐóÉýje+]Ñi ^ΊÅjÙæSŠÐ¾ðí­ˆº„¬û@Þˆ§pÏCŽõ~MOýÏËòªy,yNŸŽk Óï×M·ó¯™!UŒùŒÍÉäŸO¯åY§ïj7¶‡žiè\°ëž*ËK;L ™ïYÒ:Þ]ÈmTÇ ÈÍcî.Nà1Z¢Ê)QQÐ62Fj%}X);hRд¶·»ñ Þ“zŽ‚¿k)8g ÂWVÜ€¥I’N1ŠÔ³ñ=­Ý³%éû<ƒ+¸‡ú`qøšÒð储ê+{jˆ³C÷I\õø‚EsSXC¯øŸ^·Ñ­¦µWaÞå6d0 0û@ÏÊïZò¦Eì4ÚÝË™¶y ó½AúUÍ+M’[¤–TÛó†Mt~ÑeÓ,äŠrdglàµ~Ÿãô« ,“,« b~R¾˜è/Ö±tÒw5UV*K2Æ˜ØÆŒ!x¥`‘ƒ#·cä*1Ö{–'f›;æŸû‰¢F’á¶ì{qìh¼•†ËÉ 8”àŠ‚[}Ž<…ÏCVlX“×9éRlܸô­!«”­ʈØe×…=Iö§Cg`ZîãhÎ<¨T—$ž[ ùKQé[bÛÿꎡˆ?áYÏ/!Áõâ­›‚£!usWmŒäÛÕ&“v­a,.HE“8Î;ëùW5¤™ ¬Ž œƒ[zQC¤M3°k8òNHÆ?ÔV—14RÄXd6W×5«ŠqԘɧ£1î¬Ôº}@ïSøvâ{¸® ßî%Øep^ØúÕ<×-÷Œ_jÂD2ß]µ.'%8ì ûs\“ãc¦3JÒ/µëΠpÁÀsŸo¹­~Êê!• “nXÛ +Æ@Åv2ÞºêQAæ#+AæaÊøëéÓõúUOJfÓe\(\‚~Aÿ>¦¦7O•n¯ãÎ1ò¯·±¯> «4 º•ê7uÍ9-1Ë|Ýù§F`'ŒçéS†8À#§‚Ü–aø•R;\}â:úƒŸéX:xˆÚ:ȼ™Iç#øV¶K r_½#ÊafQŒ)àÕfFräg²Š[YšYòÑoN鵄µ5¼Af5Ï ÛÊêñ8!»9®N °o˜Ší$¹k¨ÒÒ5ƒ–9ü‡ùô¨Š*Ü2út®lDå boAFN̹àýRãÂ×ÈUƒDØ ŸOCíþ~×ÅBßSø1­\@Üo¹sÊŸ>:á"²šuc8v©8ü«ºø|5;}V(d†_²²±Þxm8ñxzò—»4:ÔÒÕ¿Ä?ÞéR,²oº„¹1\±%ˆ<•cëßó#©ÎÚZ=™…™C} WÚ—õç®kÞ®õm:÷Ox®íÝ‘”åÊýG#ÔW˜êzóË8µž%·ÎQä$í(ö÷­~e±–’ר‘L¶ö"òúKqi>lÈ88Ú0N}»úRYj¾ ‚çVº˜èþ³Bä²ÊùÈ ŽsQ‘žj¯„žûUŠëY¸óì­Ïü{À›ý|rqžž˜­={Bÿ„‹S¶K­ASH¶âßO¶CF?Þ9Éõb?*R©Nœž¯b5Ø¥â Ý?ÄZ}Ì~‘í"{PY䑆 ž…ŽHÈÊàžsÉ5Ãè –âébû9žè61òÆGf>¾Ãô¯Q¼Óí,ôñgo5­Ž’Ê¢H"bÒJÁ‰q×ñí]…©øwK·† H°î>T@ õª©Îz°qob |>·°òîo€–à•~‚»y^ >ÊYÜmŠ.Ø€ÍP‹ÄV.ÛJÍ»(þ„Õ-w[Ó¦Ó¼Ÿ5Z9+ù€¨Üœt8?…\§t(®ˆå|O¿ðˆ>¡pÅnÚàLTä,HdõÀÜïšã-“í#iQ"0Ã!íô?âøt¾7× ½³ŠÂÊtšÚ"Y‘÷ p28ÇR}ñé\ÿ‡57MÕ"’õd‡pÀúg?¥dµ‘¢‹KS£Ñ4ëK1²þ3\bm¼.½×_êqY>1½³Òçû=¼‹,òÑ„äé¸ûpÈ5Òê~9Ð$´–;-2æá±…,j?Hü«ÏÙRèïhTrè>•j«Z#…6ß¼QŠÙ®m¤Š\ì‘J·â+Ïu‹6ä«‚8 ØÿŸJõe Ž˜#µS¿²Žé VÜ0Êà ãÛò®l=I)4tV‚åMH·¦KµÈÝ?‰®£PðÍGp¯ c )ãò5‡ýŒ¼•”ãÝúõÛ‰œ® Œê*#S•ºH§"C½â¬ÅOâ+Ô>_ÜÝøçPId/ìÇajóbä*€÷Åy—ötJpò’}†+Ô~[Ã/ÌjAþÍpI9ÿ–±Uó\\¶<Ë^²¸¸ñN°ñÆÅôÀ·A÷Ïzê<5¡E¦ØÿiÜ¢½ËŒE»€÷ø«³i—·:þ¢« ÇÝIûÉ2 žÿ*¾žM£É¦NÃ÷,~œðë\Ø™IGCÙÉ)Sž!óî–‚%­¤’4²y»˜’QX~YÅJ·²,m(AÓ «ÚtrEìJ½AfQüØRËs¥é£ *]]c€¬6ôîz~Yú× ›G×^1 »¢J :ͼG@}ð3ÿ>•ƒâ³,šr,qÈÁœ´ŒÜôéÍ0êÞj1O¹ƒ–Á' ÏqéÁ©uMBseku¬«(dp§2ã?˜ ×ed”5«8ÆR¥mµôٴί5jÊ’øö©ï—Ìa)3}ãëZþÑäÔn!¶O—#tŒGÝ^çõñ­g.U©ó”×=š;icÒ~Ñ"%ÙÇ÷Bÿ2r?½V¼a¨ÿghÛ±5ÖPûqó×n¢%­¼PÆ€FŠvp?Jó]nýµŸ0ç†6ò¡\àõ?Ò¸èsU©äuNЈº4Ä^5¼èSu¼hÄ2qÇ}­Èã?ŽÛªn\žLnª­Þ•i§ClÆaç— HÃ3rqž:N¿^R·Œ %pqó‡µÚ[=rË"³~&¾û ‰¯JšJ.KîÔùLNY·Íf0[Hê\«P7;tQêI8©¯+[9&*±œá™OÞb?¹Ž„õ$œړXWžÒ+8½[¥SØ‚û™ONTþ9ª:u¥ÅÅÌ—M¸´‚´ƒ,Ìz±Ïãïɬ±•YÅÝr¥÷ŽŽ0’wæ·cpL>Z¯ÍŒ|ݽêű72¤ççßòÄçonž¤œwý(šÝmÑT£3Hàõê0xǵhXÃb0ÔŒ‚ªöÇÏu|ä×4õg¬¤ÔK–š^íÒ\¤ôQÁ_Óò©ØûW ­Ù­#{vt¸EÈ!^EeÁ̆OZô=¢·,vG+¿4ºšW` XŒsæ7÷ÝrWø?. uú‘)áë2:‰OþÏX/%”´ÈFû€ƒ¸~šÓÒR”¶¹8”ÛŠ[ØÌxvÙË -”‘ŒŒœçY²$…1´{µ_¹Ô–X8ãÆÇs1'#8Çáêi-Ú ¼ÁAþvúÖxÈN¼”i«Ø× Õ¹TÐÇx¿Î¿¥IJ­ÇëWî4ùQöYáOPŒ¹O¯5Z[y }’¡SŒç±ükÊ«‡­OâG¡N½9ìÉ ]¹m­Œg VŽ–íö©%P HÎÔÿõ«2˜ž{s[zd‹æK.Í…›n§nÜWÛIßcI¤Ö‚†v”§š­q±®]£Fä ß_óŠÑÅnDsJ2@Pr*¤0¼óìŒ4…Û çÛôª†º˜Â-;˜—¶Í°¾1zÍ©'·µz hút—is~±²¨óßÝ Èé×¥`<7¥\yWÛœæ,¥¾€Ÿ¯o©«³~m Ý_ÓŸÃof×pÁy)´¸VûÙéô=iñ[K$£exñèsíÇ·­f| {vÅ´ÝãÆC4«nôìzgò­G?´¨É#L¶Wçb0]ÇÙAëC¦¥Ô•#Îu/išZ…¶›í÷ÀüÆ2±Ÿösõ>¾â¹‹o\ñ$»'>L²È½XSøt¯H¼½økrò}ŸL¸g݆{x%@?éYQYZÉw$öí«¹1£òÀ{ž¿…Š:Ü.Ù…¦4§’B ˜Ž3Ø:é#‚+v!W=e‚›d»X2ù\7Ç>Ÿ‡ãVç ¸(±“ž˜ÿ? ®Êtâ’{œµ*I·Éâycwîúb±µ ^j^,Ò5>æ8o£qopg•–9mNâË…, Êôëœ nF D£±AäVÎÍ\Á]=Hço"àÅ)(ѶÓÔóÓµJ— $,²8g_¹ôÿ?Ê™¬xƒL“UÓ¬eãÕ.‘€ŒÂÛfØ ,.Ì€A9/ŒªB†eÊ÷俦IJ6)7 \‚áTãŸÊˆÖ2ƒ$nêjWA‚{v'ƒQ0R1“Þ¼æw¡¾^æãŸJå®õgÔ.Ú–ÕrS3Üž¸öÿ#£¸´Å ÎÆÆ:Ž+Ÿ²ÑåšÀIÖubä)íÇõÍTUÅ)X®–à/ËÇÒ¯é×qØ]F—ÜÛÌâ?0·ú²z1çîäó霎˜6,â¶kÞ8`*ž£sZÏ&Ü“ì9þ”ì¶"ïsª“@¹¼Áiü·V´„œüº~T˽#T‚Ý¡Á–ÑRBÏ㎇º×VÖðÙÁuù‘²‚FóÇNç§SQjGj‹›w78ÂŒô-íÚµöåѯ$í-O66o…$ŒƒÏdš¯-¤7(NAàc‘]^±m6­Úm¡r¤î ;IÁ# dãk‘¹±ž-¢d(Àr¹ ƒëÏÿ«Ò¼¬M%KmŽºsçW¸i¶âÞygU ¨¸<ôÎ@϶yüQyT»ÈË»©=jIoä´´u1f,Ovà3T ¼„Éæ¶qœ2…uQ©£ ŽòfÄZ\·,’L@^1Ú’[h-nZټѶc!÷rלgŸëW–å%Uu}è@ÚGéT›,Çw6àq‚=9«‹îI]õ SI¶’ Á¢$†‰³•_óÎx¬K‰Qà"¾âØlžŸã[w²ýÜ™~8$æ±°"”¨#ýåÅ[–a¶ê×ѬR1 ÈcžÝÿJël­ÒÛOcUUe € `F}ñŠæ,S̸XW€çi tæ»B€:qÀÅag)]%c"óëÖÒ]šÖ@F:|ÉŒþFªë?5„ìIã“Ó5røn×`@ß(´þ;ã¬ýMKXLW9Á >´åÍsZs´lhiEdÒl£Ë¯Ï8®ŠÒFYdŒ|ÛB㯽sº2±¶ ð \±NkkE渘|À„¯/^UedÑÝx¦kE»¨\vàâ­y˜~'ì)¡Ôñ·v&žím¡¶Gó¬#·g-â™ÝÃÎß›>ämÿͳS–™ç {U¯H£PXó¹ÃgÇôªö/û»ŽSù®šKݸ¦ìÎWÇD6™c¯êøWž>v ô_¡þljO;]yüëÎ¥.ƒ¹¯[ü?™Ã‹ø×¡Xgš_áíJ]›‚I€qÒºda¬øyÿ#Çýz·þ†•长ŸYʼ™ ž h¬M ·‰‹ž6–5Ô ÚºÇ=ÊG8²ýíƒßÈ}+r L.E£Èç‘0äôþHÀäöéÖ—-õ#›¡ øfödó®· >UaótëŠÜ‡@±¶I™%’býxúsZvpêK 3©•yeÏÌ®:Ôz˜Ù2ÆÜFpW‚:r;÷¢qŒu“3ŒäÞq4÷¨ÂIâ´0ÀBÔäÀ~œf¹x‹Qðÿ†µSEºž;¸ {nd!öuR6¸ äçxÀ®ªÆÖ;’ËrÙ$†`8È8è:öÍ&¿àøgXc/"÷Kcû€çQI>™¢Ê$†o·ê8䓺8ß×?ÄGnßÊ©YÇ.£w4ó31U3HäõçüH­©Ç¯Dyxì\štúËK.‹ÏÍþ2&ëˆ!$.â'Þ½;ÂúrÙYI;(Ý'!`žž¹úWœ×ž+·±Œ6#u2ŸîíÁ~~ øW´i?kš+8J#màp g°¹ë·& ·g E9>‡=â­atÍc,ÿ¹‘‘Éü³ø‘\Vƒl`IoX|ÑÇò?‰±‚>€†üE?Æ·_lñtö•x¬äh–rÃøŒ~²Ö‹¦iqÀ@’Bç$Ëyǧo˧»²úQ§%)msŸUÎ6E<ª…̹•Î79äúœ“þsL #‘ä™™FC’:tíÏò-U`Y¤Ic @Áãü``wxä ’×nb‰Z{ŒœùÎqŽxPsÓù~ RÄa.¦šõGËNnk8²«Dº”R†! ªdD9o,0Ïè{ÖüRm™J#¨äÿU`º©˜ùêXÆ»„C²ó€Ò°È\‚pIÉjÖì2®èݤ-‘Ï_aîzWÍæØªuª(Ò~êû›=\)S…ç¹ÓC,—ÝØŸ"ç<ž¤ûõëõ«6WsX—tØdc‘!L•0;~™ª¹Žˆ.ò-Ó'©8÷$š¹ `êÀ.G@FExУދ©Úâ¤mi·z¥Üò3•–¼—0FpÎÉ{ûB“Ét‘%?ÀËŒãÁèzýj½¶§ÂI`„/=‡oʪj·6÷>ʲFà®dÆ;089È?wõ®øÎŠr•Î *’”ltZ”…¼-g!P?xÇñŸ½q„̆i.$%|ÒžDl‘À?Sù×]w½¼§†wß¼©mÇ'—}ë…דBŠÅ“»ç¦?ϽE:Ðråé{üŽ—NIsu²Eq$·n 1‘âÿ'5h`cæ’öªqÌ»ÎÒ¥‰šYvF¬íèp+ÙMKàÑyt“_¬³!ÁŽG5râI<;3îõ9Áõ¨#†Do™qõv8<Â7°@2K€£©?•hõº{íª3P&rF;gÖ´Òå¡Ï”ÊÊß— ÿž•‡x¨ÛÇÝ=ªÎ\*ôëƒßÚ¾Y(¹´ö=ýyQe±-ÓŸº:/Ó½hYê—Z|s-´‰ßNÍʯ°Æ3œTVöR¬j­…Ç^huX™°'Ž}*Kb¬Ú2µ;¨ÂVà ’[%‰õ98äÖAð¶œÌŽã¡fbr+¤™˜¦ÑßùUy-Þ ‡óTÊŽúÿŸÆœêgR-ìcÇáÝ.&ùm#9îG5z:Æ6ZFŸî¨>ÓÔdÓÄ2ÀªœàŸQñ£I˜&Ñr+x‚îP¼Ž8íVV4cŒâ«ÚnÁ¹ñÇAZú\rƒ,lÇ‚APIÏaž#ŸÎ¹Ô¥ÊŽ—5ó2¤V³ÈCÄž¡Ûù¿f€,ß|­žÇÿÕƒZ%ðÙeçëQƲ«.GkNÊ÷9ßh2kÚ8ŽÒU‚þÞdº³™Á+Èr¤Žàò9Î+GG—P¹ÑôëRÁìî®-’Y"`ÒG¦Nä€yÁâ´L ½:}jÅÍõ¤,¯©]Ãl–£rO<Á@ÚIã®1ïY:ŠÚ*nú™w Cñõªø-ÀëíWͬ„”¬j:–=¿Ï®+'QÔm´÷ ù²}®~I-Y¿2zã•Uw7\f±b¼}.îKuoÝ1ãž0zgùsÖ¡:œ÷%rØÂü£ÿä×+½:LLÛK“‰#qߨõ† .šû…ô¶VF4‚Ee1îÜT‚Ç_Ç?•g[Þ‡¾‰ÝÑ£pí‘Ę?w¡ãŽxéYrê°M´}”ù˜À%°8©¡F¸ƒÍÜ7÷ö¡YÈV=ûan’Xä†U,Ò–áÑ€xäœö…RÔu> iÝ­dy£_—÷ÁL‰»Ž UÆkŒI%+¹‚AÛ“Á#Bk^òÿÚH_)"¡dUèËò¶2'nwuà ç5Óec7ÝÂ?lSÉ$E†Õ ʾ¿xŒêGf?}®Ø&¶ÚßÃwRGaÁÅr—+ p3Ф(Tù@®‘Þ°/o¥Œy3˜‘‹ÁG|€ èfïrì¬mkÉzZUP©œ…E¨àtôô¬m¹$ó­ûVYiïR6Ñ"& '\c¯áY9wYž~ͦI.@go”Ž£hÉúgS5üÉb&gÜÌG`t>•:é2- I‰ŒgŸsŒg'?B? »íÛ–¤בïÞ§rô"“PyˆÜ£ó¨¸gõ¿á«ìí-m$• ©$zJ»¥¹†ëC‰ñ­ÞŒÂãb¦ÖÌrÆGO¥Y¶Õ¤Õ_Îq¶R t­jöw6FÊhÇÉr¬®£0Aëßµpö±ÝËzb°2ûÅà õ=€®j‰Mr£H&µganÑ­Ú#Ë厹kI|]¥hs ýJg¶±‡&ILLásòŽê@àwô¬[0¤ÆY¦ó%lï~F}€ÇŠËø¡/ýM•ò@„§õ©Ô*éÓpÉ\ê^âòáŽØ%‰É 0ÇëéPÜ[K}q¾5Ü£71õöÍ>‚"y.gU…q÷ÎqÓßÓð«Ë¨Ú@¤K<(ÝÃ8JŠŠìÒ’º¹•o¤Ío"ý ðù#dÐS¯th£çUT`_¥]Kû{›Ÿ–òƒ¾oË×­A-ó³›i# :Ƥc%fÒiÝÚm²Í!G |ÊI ‘þ>Ôš„¦{x#gÙþ¹ñò§±÷öþU¨è Šin$òL€¬H$Çès×§N”È~Á Œqo–A+]²å½Ëp+?_a´¤ÎJêá-®"¸P¯:ÝÆÝ7?ª=ÒÜ“tQdvËôÀîx&´¦ÒÖ+Óp“`—ß´¨ÁÁã5¹iá‰."óZXߘÑzzg¹üÏZÆJ­K8ìkNTé§ÌE¦ÚG.ŸóZ¿œ0^fpçŒg' `tíZ6Ñi`f†ÉLãîG,xAÛüæ°ï5ý/O”ÚÏ©!d$ã ûqì â™©o*ã2)@H8ÎÓÓ¦ã] Otgí´{´Ý*þKÖ¶µµ ëûÁ,ŽFßħj}Õ†•g,–ª÷]‡&YˆTŒä€: É<jùº¼ƒ/#ŽÝNà‘ ?í7_Ã¥S··Žê;ˆÅÔ¥ YNݪw¹9=O^Ôü¬Mj³–ÎÈÅ}E-Ù#Ž ñoÊ›Ëiä®>NäŽIÇÔמîñ˜«Þ¸4«Çb²¨ÓzšvÔåºr*eÀç §=Ôiû¯9c“ŒBEEö©üó¬YRhÎA=Ï5w±¦‡wö˜-ü7¦O,eâYäÚ?8àzáüM'öÅÃÊËM˰³Àçù>¾…tÒ³|6±rıóÿzòíwűè¦Kh%º ­ úœ}=ºûWUŸ+1æ\Éy’C#bFʹ|V¶™¨,Rü’K…†pAHêG§=qß®k€²½½Ô¯# }z. ’‘ØD¶O*_ çðjµ{§Ïoj³^Ç®Y–DY¥J RFݤ!'œŸ[\Š)5èÌ=½wùÄ/[j ‹ep£ïFqùþ5Žgß4Äù•˜tsÓùôéœùãSI¸T»‘®íúä<ÇFê?•zíͦ§¥Ç¨YHZ 9BÌ2yÆ1Ø‚8'¦8¬e¬ãÈÞåÇ IK™"XÒ,Rfa¼.=óžÔÒªÏò†ÇaßôÇô¡[€qùÓÖ&˜ dÿŸÄW‘Üê³/çq8$䟯½ejQ˜ÌWr&7QÈÿëcò4·1ê¦Ó+˜ñœqSÛñ5´¼ºP–d;8 }yëMÆzFRmFH®“æEV Œ€y®ŠÂÚ4¹ÎF>½ê•žˆe¹Šáfvaó1#ŸSì=*½ÇŠmìõ;¨VÊò[8¶íºD-¼€øéµB Ϭá7¼Kœa´‰.le7¬é)q€êÇåŒÖŸö=”Py³n“p8PÄ)ç¯cùþTÈîí®î%·‚hä–&EW”©ç©Æjhö”ÚzqÍ£ZÈ^Æ2ø Š˜Â6— A-%2¨Á+´àõ˜•8â59๥8nA õ­éN-©Õ!$œI›æun¸>”àdŽp:SãÚöÙD‘€G]½›ü©pþ„äõ#55tyrƒ‹³ÞU˜´w4ÁvG=°iìÅ`8íɪ0'ßÚ©Å5f.fž…Óz rj¦­mkªéwuÔQÜ[]²+ £ž;ƒœsÛô‹=²jXŽãƒØWz œyàvR¬æùdrž¶Ÿ¤ÞiÚÌ šD‚ÞÒòHJÅq?wµ²F@ÐmÏ9ªù·3ÊÛ·œ’+»þÓµŽÓ/åHí/ˆ‹Íbq‡î7·mÏAÓ'¹;½>{-BkI@Ybb§9ã¦3ØöõÍqÊíBÅœ@ÄSªúUMC@·»Èᣘôtî}ÇzÒ·T†C½H=sV–-Ÿ˜Þ•›ƒD©¦r %·Í5ËípI\œR”Ø#®ØÓ¡®³WÊ]«•Œ.0+›˜Ä…Í *å6Æ4€í«ÔŠ©ý®à4@±¿„ŒóIô?(ü±VwªC+±à)<ŸÊ²ç·hس c‚ã5µì(ê>áþÙ ìw ghe>½}}«6ãN–êÙÉ@û,`mÎ2ÇãZvå>Ìy?)<ôª7Zƒ€ãäa¶1»9 Ç'9?à8£šMèVô ÔxXù±¯ž¸ì߈ýr+ºÒÖÝ”,È’>VÇ+ô=«ËK:O 4sÆ0¬£¨ëϯ¥tÚ·mIŸìR3°¼/ôÆJ~<ŽI¬æ­°#ÓM•¤Ñ“’ ¨p ÀôÁçñ‘qbá°–M"Ÿ*ƒùâˆ/®>Ƴˆã–ÈžÖe‘?Ýd’?Ï­P—Å6Ñ«8©RUê¿Ò³z”Š×¶1FøžÕ¡sÈ óqYÒ}š(ÙÉO•?ˆu¸¶\ì’«"°†x?—j]>!& ¬Jg!0N~¦¦MDµ›ÜÀ±«4È£À¿•Oý¾ ÇæHì ªsŸlâ’Þß{á£Uû€dÒ´pÚ¸hÂäðGÖ¡8ÞÝFâÒ¸ïÜ›fÚsºWP1É?ª¾ëFŒ»®AΦ)u#çjzz‚pd|c‘Äl¢óE"®ï4(ËzƒÇø×CÕ\"µBxsäÓ­H?p>Túî?Òº}(ªÏ#3\²Œ÷Oô®SÃA¥Ó˜îÚVGB1ì t:=Ù7¶ê mÞëÓƒÁÿ óñKFÎÚ/K 0\a¹$u\ΦwV´b­»#†Ï^{R©WÚ ÙäàqI~¡mÎÉnrx¯== –çŸ\†kÉÏReb=ù5fÉHf‡µP9}Ò6c“øÕ»?˜Hz¼]±V‚FOã1üLŒÞ¸Ü0CÝ÷ýkÌr dý+Ö5|ŸJIãyÀǸ®U‡hW>¸®Ü¬šó0ÅFíĀ硦Ž3[Ò[Y±?+/Ñ«*ò†m±*FA=k±»œª6:?‡Ÿò0\׫èI^—^ið÷?ðOŸùõoý +Òê–ĽŠ(¦ ¢Š(¢Š(ºðËcD´±›‡ÝŒüî3ù§qKJÿ­Ïýu5wÃ-ÐnÆncv3ò7¸Ïä~Å-+þB·?õÔÒÝ[«Qmþ¬QLEƒÒ±õoõ-ô­ƒÒ±õoõ-ô WÃ_ò3Oÿ\Ïò5ÕX.Ûh×nÜAÆÜc†í…Çä>ƒ¥r¾ÿ‘šúæ‘®ªÁvÛF»vâ†6ã7l.?!ô) žWhâwXÚFU$"c,}H>ä ÁÒ¥yÓÄRIo%»›£˜¥*YÑâë´‘ùèkÏýg‰?ëïÿm¡  IãI-ä…ÆQÁSÛŠ£c§GjF$ã/ŽGáM;X­½Üü«†Y3†> ÿž•£R:mOï?øR”båÌÖ¨Í6•“1¯4 :ûým.2D…y篾k—ŸÃ+£^3Û<‡ÍÈTzsœ…z?ØÐžFcíÅG.™g:…–øîIÏçNâåg!™£hUˆ 3…m§ñ£Ão,^+±ƒ{mÄ›“Шüv8#÷ëù×`èŠ2p1ÏÒ°¯õ¦´.ˆ«'\ž‡ÐŒzc¿zŠÞΒ擱0«R¬¬•Î>óÍ{‰fbÈò€®ëÒLzƒÆp;RGuqmaÄC2$óÇýzžûQººÏ/`ªëÖ’ÛX•HIcGÏCŠáxú2|ŒëúD¹‘R{•3ïšDG‚ïϧ¥RÕ~ÒÞœió$2ÜÊËf"_-0~P£ï@8ìO®k·“FƒQxRkM©´I½$#'Žÿ?…]ƒÃºm´±:[¯™; HÈž}€éÇø|‰dõŸ3géž¿¾²/sv!y~lʤ°äçÜç5<Íg ÛßÇ-Ú]MRÚ&¿¡=v€yí]÷ˆ4ÝV)žM5cÚä0AUÇ,æÏlÕÉÛü8‚î9VãQt¹DÚUSN>Rs˦3YÛ™k E[Tsšì—úœ’ÎÈ`>X€;w‡øÏ_Zë®!†)mÞ%%™×bâç¦jæ“J²Ó·Çk-Ä÷q’œ¡E.:œu >½ë/_šf»g¸i0sòþƒÈTT…ä¬Î˜b#d®ÏB¼m&Òéží4§?0xä» ËÓà}±ùVN³­C{ƒI†(c2óZÈ]œ€PÕqR·ïãÕFüOƺÈ @< aXË¥´×“¨I@À$`{ç#ðXxŠîi„qª[+¸Uá°3Ôõúô¬åvÁY-Ϋkc•yH?åšòOøV/Ûï¯$óšFH˨¬@üqÖ³%žíÙ¤1bK¨À?LÖœ1 \c-“Ðdž=søV3—$o%''bŲ´·!ä îÏ~§Ÿå]¶é$<‚¸¬Í.Ù‰YλïW5-Kìh€Ò°ùsÐ`qŸÐúªbÛßsXFÑÔê.â)ðîÅAĬHÿ¹¯šÝ%»¾šYK<®ä±nNs_@ë7s¿Áû[Ÿ0¬ÆRw'ýëŽ? ðhgK{æÉ T㞇œVí»•ÏAð´úo…ì~Ñ䥯§ åÜ|°@;Ÿ^•CÄ~&ÔõÛck$Ñ-¦Ð b7s¸ä’$’F3šÈgu cŒg*==©dRW#Žù¬yäžæœ©œÕÕ¹ ±—æíï^ðÿPŠßÃïm<ØÌd@Ùá6¨ã·''qWˆÒï!Jð¹=«Ô¼á=:÷HMBàΦ)€DÈØØ!°F2GÍë[E9#)IEšöW6÷sF#mñ³Nè3Òº„‚Ë*(îË~³Îm;YF‘ÛC9a± [>§ü[6ê`^È'¨ãüõ®*ú3®‹\·°ß'háò}j"±1çæîHÏSŸ~üÕ‚ 3ŸCPÞ\ZéVW÷«›k07&9w<,cêzûuÇZ懴œ”Q£qJìƒU¹^•%°gónT4Š “åƸþ9€‹“EpòÝMoݳn£ŸÌUŽ/¿0PX•9"8Tm:`Ö]毭ÝÜÇ­Ê¢E–i®#uPÂ6Q‰äwSž‹À¥îb–úù [+(RÚfØ®àT>ÙØ÷÷Z1Q\¨á“mÜÛÐ4¯ììó×{%¼=LcŽ3ïÎO¹ëWÑÐÄãøN?JŽÂÒêûN¹¼YVy\ù’£I·Ì|’ ãŒÀúr>%’}kYì:z¤"$,#d$g8Î8ÎÓî*gNöÕjiJm^Éè\‘¢ãæ#$‚:§çÞ™LŽŒ„ëš«-ߨ­.f¹Ý*²¢·$Ÿ™<~5^Û—ÑÄñ»¬¿yAe “ÉÎ:€:wü³qöRå4”½¤y‰Ñ‹Vk•lm;g“¡÷ÆG¿5±Æ…dF%\SÓ ò+"-%®J”•V<ãç$63ÔõükhYÄ‘‘»BgåÇøû×^º†çz\ûí’8ªL…[ùÖ‚wmÚp@9 ú_%\ä(÷¯MII\óœ\Y–@ÎZ‘#RÒH¨9-ž?!Wn¢‰-Øœ3è{Ö°õ?ÜÛíR䤒k“Z1\vuaéI¾~„óxz=B„¾+,g!69äŒÿúymŠ·„ÕãX#tL7R>½0N3Ѝ5ÈÌIæ-Äg bcÈæw¾§*Hî®t[­^3$ àí;Éõì­f?5GbMŘôÛÿ‰­¿]‹ÝiC»bå—.¤º¾¿ZÛ¸Õlmu k ®.®·c å±×Ø~5¼bšB±ÄÅà]R+¨›Ì±hƒeòÌN>…0O¨<ˆuÝ6kÏ6Ö9"C$‰æ1L’A c¿óôîu fÇL–(®žQ$Á™($”1“„SŽ¢›ªJfðåìЗ´‘:cø2¬?B)ò­Æ´ÐðkôžÍM¼±lnäu¡÷ãŠÍ¸…KSÔ°o^+³¸Ô!‹F—J¼Ž$¸’O1d J-–lºùr2ǚư°‚ä3#-ÁS‚Tô?JNJ*áËv2ÂÆF³î6B?v¾RƒƒîýsVþÏ""F¶ÊˆzóÛÔñþpjyšøÈ‹!%¾g~ˆ;“íӜֵ·Ú$Œ#œzœÖ§‡Ž÷pÛ´×·jóñ*üÇ¡KdwêC.îO Õ}Uü:v8BzrGOê*-ÌåY²NsßýzƒÄùz[ ˜l-õ#ü+Í‹ÔÝ-N$ýÞÜõjÈœ:‚Úz}Gz„ n¤·%K($qôî+·•˜¦®E« $ÈñëÜWäwýEwz¤di3’HwÇù⸷WÛÃ)õÓ…Ù‘ˆèdÝ8@Nßʱd¸—x®¢H ƒ¹ý+:MC"1<ŒŠîRV9M?‡£þ'óÿ׫èI^•\‚,×[Ù”ƒnÃ9ûË]õ\v3–áEUQEQEw^lh–ƒv3p㱟‘½Æ#ôî)i_ò¹ÿ®¦®øe±¢Z ØÍÃŒnÆ~F÷üÓ¸¥¥ÈVçþºšC;«oõbŠ-¿ÕŠ)ˆ°zV>­þ¥¾•°zV>­þ¥¾”ÊøkþFiÿë™þFº(æ–ÒÆ#Œ÷-åD¾T;¨Ãs‡(íŒÏAÛð×üŒÓÿ×3üt°ZÇq§}šdaÛÄŒªJ`ñÀR?!ô) «»=³C¢_ÊŠ1I­› :ƒ‰ºŠ¯¥J󧈤’ÞKw7G1JT²ÿ£Å×i#ò4x>íôëè!EH£Ô.F€ü –Ïýg‰?ëïÿm¡¦ض¶ÎÙ¦_›øPöúûÕ¢hÎhö©%+ œuÇãYf坿Û~È A ¿ÿ[<{ÿ$Õ®ƒ²XF_|¼¾Õ胯ôü3U™ËRÑŽ‹¸ñÓÞ°[JÅXÖʨ€ôÆxÛCÅÈ|./¤º„aÚo/ÌØ#`àíÈÎpGZÞyZ(ËI+£,傸àñY‹ªéº$SxŸZíí£Âù®Œæ8ÉÚ£ å›=8ÝíJ%RV[ åKVgø³Y¾Ò4X¡Ó[¹Ü,r`1T³`ŒtãŸZÄ…à9lØÜß^y÷…J– < ã®æIï^}âíé:ÎË–gŽFR²žI<Còþ¿Zö-3Só. ¤ff]Ç¿§ùô®gâU•íôm½²+Ã$¿'°\ªƒƒ‚FþO{ŠëHÔŠš2”%fgiº•–“¤ÜÝ –^•Ü[î¨P€í\¥u>µup¶‘Ÿ$æyÙ9 'Ø ŸÄžÃìtƒªiÑÜKrín@!@$ç¸Ï·?‘­9õ(4M¦é–,$ºFI®¦ÎòÁUãŽÿþº¸Á7p”º¦šßOÒôË]>ÑþÚñ‹=Çf$)x?ÞœŽÂæíîô`š¤h—O*2.víFzà—VšæKo´É#C¡qƒëVõ}v[íÂæ9â}¢5Ý8PýãÇ'V²Ž–H•¡Œmnö;‰Ê±ÜÆ’ºÊ}qùWµ|8ÍÄ3Þä˜ÞŽ÷PAÏ=É8ÿ€Šò=TéÚ –]‘˜¼õr¹c*à§×?>3gðnµ¦jp¼:,«8†Ün,­çrƒÕsØöïIo¨'øƒ#Oáò™‰Ç¸=GûÊ? ó™Y'hÜò§Ÿ­zÞ· ^kcíH#µ%ÐÝ€BÄûaýõí^;|ެ’2•Ýž çüóYaÞèrÔx`ão^¡ñüêÌVùÖ;wªÍtƒ?L2šÊ¯éö’jpÚE÷å` ž‹î}‡Sì+¥»£ÑÏôbjÍA$ÌQªò€rÇžO8ÉèGÓ¬Ö/“NÒ®n¥#1)ÂŽ2IÀLš·§ÙÛéöÚ¿º õl§IÀxóT_- Ú¡@ivó’F@϶k̾ªzK÷TÎ.îg¸™žF,ìrÌz“Þ¯ymߞ͔¸ýã:‚pO$vÎESŽ##ìxzÒãìn¤€Tá0èF+ÓJÈànìr›h.\ü“D¤…Ïñ`ðúÞôÛ{k‹Æ1CwüÄvÀÉ'ØžzqÍhFÑ9HeP $²¿€qù=+:kén[ÀÎé#bŒmB{p:ŸÖ„#OG´2ÊÈ¡$HÉPËÈÉÁb3ÙG§'k§òåAµY¥eŒŽ¼véþzf¬h:XiðÈ͉6;}O&´¡µ] …Z(A?¼9gØgö‡¥УªÛªé\òÃ;’Áþ|šç#šлɴŽ•Ðx”]Å¥fÌË21ƒ¹ÆÀÇ9Î?*ó÷Šæ4.±–)¹”€Hê¹ÇQ‘ǽz ÆçP·ÃeÉÎÒ98®ƒKµf·2ÝœìÛ“Æý>•†4K4›iʤŽÈ¬\ cœ~UÓ \m,ä(êr1ôúÔMÆÖHp§­Ùȹ!a•G$‚*S8‘G }+AÐ(%pä䯣’×í*¢Î;“ÉüEg¦³ÕhlêKŸƒ–kë!ÿѯ^#y Ý_êk „^dòÈbȘ㡜³wóôÆ1Žùü+šðÖ™Ÿ|º† R&ec þïPÄŽÝGÓ#ÖºiÇžVG=YòG™žNÖ׺DÂÖê)àFLr©Sù¯-õ×›”šUÏ+ü«éŸ²E,þK„c¸wSØÿœ×1ªØØÛkq[+[Eq2oªì rBõ?tþF´t¬õ1U®´ZžWá ÜêWa®ÏØ­žEù²¯sÓ¯ùÅ{ Hš~og§¢-”gníÛ·uÎG©<ç¿ÔÔòÕ[bÆ¥GcMtçmÉär@÷¥NPoF9ú£nÖéoÝc’æBWWE9ÁÈÁÆx­I h‡ÌA¡ÏZ[K â!áÔþuc[³Õ5æ‚ÂXØÙí—d›™A,sߟæk,U8NøW>~U±¯¼Ž>dÏ××>Øêk†ñ¤ÿÛ7ö¶p]F4kFy%%²Lp빩Èã ×i¦é÷¯¢µ”wÅ©ªViIBÙeÜ2A+•ÈäpGZáï4Ý_B¾¯¥²FÃ,È»­K#§å‰~FÃe‰ƒšÃG’7{›Õ݈í, ýòXEl™ C°*3óCnIôä8è1׃«ªÏú5¥»›&Ö6ËD1ºVpYÉÀêä21Ž™8½§C™¥ˆíîD—7æÈy’2~y™G9rv/\/psV&Žíæ“é:7͸r£o'NxÁôã¥ÏÙÅÊ×1öN«ä]J:<úe¥„BXîžæã>oœ Ál”à‘ïÐK)ï´û¦O>?4 ²L€7—€s‚8,Hû(¸½šûLŽ …•-·6Ĉȣ%AönIϯj¹®^vñ[ÇØU"5$g9õÆ?®k(B4é:²Õ¿;ÛÈÚõUOcª^›ù˜š™ŸU»áˆ…>fûÍØ~õÏ¥lé–’&‡w 8$ç‘…ÁÇæ Q²„CCò„õþu4Ì“[4*O˼ƒ¼þ¾=+–3”åvo(¨ÆÈÒ²ºb ²œ’ ­î–bÑ1`ƒtùFÑŸÇ5‘k,6²,“²æDÌkœ³Ü tó1×͸û‚ĺràAZ%ÔÁö)j-‘r—y’î$yi/–@Ç'×=¹¬é¼eÈX­§dæäúŸAô­‹ëUºµd™w’Ç^Ÿ™®òÖ[[™"Æì£ ý*Ôä¶e¨ÆKUvu:o‰"Ô.D7pcò¤)l’xŽ?>N=ªKÛ˕ܰØìÇü@ÍqúzNnã“É !<̧CÇooÒ®_x¯M´“Ëgk‰;–,¤z“ÇåšM9½u"üÝÐêÒçÌ·T€~cÏÌN1éÅW-#ɶ!þÈÉ#ÜþUÆÿÂ|ÀÈ,’}.3ÿ²Õ;âžò·Ú­e¶ü¨Pùˆ£Ôðä \aʬˆ”œÙkÅ÷𖑍izÏÛg}&ö{Ûf˜˜ãVl 0y¹Ç' :fº ŠXãÍŽX$PêÀ‚¬ÎAéŒU,®mõ4*)àœul2°=AÏñƒø×m¤èz5í­™¶³ÊÖØZ˜0È›çvOËõéÏ5-_m˧·ïlZð§Ù†™(µB¨'!³Ý¶®Ms·qjš×öž«ee«æ¯Øçk‚®‚8Ú»rÛ»Œƒ[þ*të­¨~ÔøQœ…àgšè*éß•2«F1›Œv8íSUÒî`±Õ×[}:õ­ @ +o‚T©S»•ŠÙûlíá¾¾€Ç?ØŒ³D;2FJتz´Bmú&û¯o"ŸÅH«ÓSçMRàßê7D*|ìßœÞNÅ6ÆYa›ÌŠB„Xvaè:³{a%̰L¼ ”`1‘šÎhÙ&aìç±÷¬¯vhÖ‡We õúŽxÉ˹;IÏdöûWU¢éa²‘K³ù’—Üý¸vè8®6Â[˜/%Õ$ òÊ£ž­Ž?•kEâkíˆhØŒ¸C’z™G©:³zøMic$ÈÑîAÒ}Õ˜öj¦‹®[k ååèuˆ¶KÝ}Gò«Qݾ³¤L‚6·” Üw/¡íÇøW='…êE3\–$ƒ¸HëÞ’µƒKjt­b¡™Š€3ÓßúÔ3Z¢ŒäŒzSÖÍìt©mḕ¥ B<¸«cƒÏaÇ;t®^?\ÇtmuH“ËVg‹ ) ãp÷ÁéŽüQËÔJæ¼¥à,§’§š?23nÓ“€q@¹†åBÆûˆ÷È#ÿÕKæù;bÁËs¸ôÞ‘±W¹Í]Ç%¶£n·)vÎzŸ‘¿®*À”\å8ýÑ1œpOz“Y*'·br<ݼzGóÅS ¼w6“½‡ä3úU!'f3²(µ¾pVMø<¥kèìL{×iV<`gÿž+#ÃJóTF 2z¤ŸéZúe.bNÇ wVóñ¯?µ‘ßEÞ(í"ùTg8 ãëY~"ÿ0ŒF \c¿'ü+Y$FÈ9ÜyàŽk Ä.¥"ÛÀÞG^8ýzó)îuAå{ûS¡LÈCHïßšXò85,$4˜>ž•轎h•uD'L¿<¢~¼xÊÊçk‘Í{-é ¦_Œ»1ô5âî>c]O´F'dL/nSþ[?âÙa5«…ûÊïŒVy }i úƒ]–G%ÙÞø/Rûf³,^^Ü[–Îìçæ_ozî«Í>ø¨'ÿ¯VÿÐÒ½.®*ȉ;°¢Š)ˆ(¢Š(¢Šî¼2ØÑ-ìfáÆ7c?#{ŒþGéÜRÒ¿ä+sÿ]M]ðËcD´±›‡ÝŒüî3ù§qKJÿ­Ïýu4†wVßêÅ[«S`ô¬}[ýK}+`ô¬}[ýK}(•ð×üŒÓÿ×3ülÞj £è?hŽòˆ Ž(ˆÚ ±* ü£'û£è:V7†¿äfŸþ¹ŸäkbûNþÐðû[ ÙÒ$GeÂÆÈK Œ.G< éIéw÷w÷ºv¡oj³G¼ßc "±;¾NIlŽÙ'"“J¸K¤ñѬŠtp%‰£oø÷ˆr¬ˆ£AŽKíFçYžîÂy%¶E±—ÌI'-ÆI'ÓŽ*[?õž$ÿ¯¿ý¶†›ØKs¡¤$KÔçæ¾øŸ& ¾MÕyóÆÆÛNxÇojߺñ|olé¡ÞF0ïúXÎj(®VO>ÁpÄ ´±‚ U rIÀ\íwüê”óyP¥ÒÝI[Šm•0Áø8ÀävÇZ˱ÔRÔ$k;”Øì$p™b§Ð’#¯úÖô6ñE*ΣtŠ9•ùb~µË R›æ–-Œ[­>êêy¨LöÐ)±1Áb1÷‡Ðt®Câ•ÕÆ¡àMBí§!„["BUóPr;žü×q®Ùßê(Î×M²©cäž¹?ýj¥àN5Ë[3#F𙕠O?…LæÕXÁh®ŽÊ4“£)nÕþE8¼3m'ÌPôëN8M¬Q¢ýÔsMµÕ¾Ó ¼P‰ºIpDh{ŽMj R).e7#ˆA`sÓ$žü äŽsøÓ:ü¯ßeŽ[ÉN}æÚN?*Ó¶¸ÓíÇ­#FÊÄwíZpEK² Ú³5§ÔX4ëXØs4ÇåOßʻéáÝÝjÏ>®!Õ|«DQÖ¼Cg,qÜ©S’áAÉô_Ç¿·Ö¹#~ÆYeŽ gyFÆq×ÓéL¸´šÒáÞêv¹p@Ã.ÀÄöŒŒ“z¹§%•Ω$‘9™ Û÷lzãšã«9ÎZ™¨¤iÙé“J«5ØV›ã?\ Õ{˜P3Hà <ö­õtH™T*™-Ž:ô¹ª6Úνq Ý)†Åò‡ïH{ŸZ‡GÚI(¥Ë¹SAÒŸW½’ø©"âÂsÁþµÔËáàà2\È’\õ}kV(#´c‰ TæEØ_8 ×5èSÁÓ„9^¤)º†ÊÌï]Í(Úª #çù×%ákx¦ÑôÛ]<®Kcˆb þèü”R„,˜Û¹³áOÚMxúÃZ¢:ƒj\ÿ3\÷µ5»6í§ùñÑ$Š»@cÓ§'¡öâ» gS}ÿ³d¶}Ï»kú¹íƒÎ_ÀWŸøªþ9H#I<ÒbN$ŸÄZÖRÙ!ÂÕ˜¶–Öº­ƒ´DDc9žNsÇoîú÷⻄oâ»é¼ƒFÅÔ+>æ?¼Œ‚Zäü?qm™¼Ù‰ÌÎë& N;w×½w¯©Ëw ‰<èü–fáSæ8çîã¯~´›å‘Ý=9Qr¿½ØÂþÀÔu^ÛJÄÃ#6$bçddýÕÉã8ç{W5ñ3NÒâ¶³“O(Eµx €¶g¨ažœ ö/ÆÓ\´–Ò‹{G‹„M¤«/A˜c>˜®6ÿãv£c©I iʹ(XÎÊF àc¾,SQKTΞÇÏëÒ»¿hòH—¡r¡ò3Ûq¨àŸv÷®êºµÎ –Pxz–Iiþ”Ã$œáâ»ÏøMõ"ð’8ÝϯzUªE+7kšR„›ºW8«‹È-tyn ’ª„¶=»}xí^3¨ÝK¨jÌçt“ÈXþ'¥{¾¿ñ’óDºKuÓ¡¸b»›÷¥vóëïúzÖ}ŸÇMRóyÐ….³³OLñÅF”cï'{—Z¤¤¹Z±ä±ÇåBˆ¨:æ¡”£q°«W»KñOÄif—qøoÍ…Ûj”‘˜ŸÀïùUdøÁ¯­/‡vÚ¦I]r{•ê=+¦ç1â(ÙAç=À\ÿJí<-áxn/£ºóíî"‰b" „fÎÔ`Ê9' ‘Àæ½þö©& Ägs…në-§Årš|,ò| ì1‘žI#š/ Xå®-æ>É" ¨Y·pqßœ5ÖxSÂ6öDR_Â’\JL» ¨AÇ õ9ã•Rˆº³Ì#›O†"A#÷…º~>⺭+TÔu=-o‹Efe c-3þ Ž泂8ó¼ 8T ?Çñ¬Ù´Í>SSYC.ÐÃÀÁ›9ê=ºÖË\ê+ÿ-á<ÿÏ&ÿâêªj·îHEÆ9òœ~_5l“µ’1|½Y«èñ<ý‚ ç~ÕÛ‘Ç8œú«š—ºΫ(‘§]>$IwëÎ;{d§sÐøËÇ7þ¶µ’[_´IrHDl ãÉçœôè=Ôѵ½gQÒ-®ï-ⱸ™K5»bƒ'9‘ƒÓŒâ—-Þˆ[}£š‹ÂÓˆB]Þ‡ÀÁhø/õ⦵ðͽ¤N©q+=d ãðWY5ƪðº‡Q¹HÊÆÁ†xÈùºÔRjú‚>ÖxCuÇ–ßüUc(%«5Nû3'Tµ™¼go4Mæ‰IdR Èg=«‡‚ÆHµ&½$‡ÝÑÔ1W žžØÕèÓÞ\^ùbgŒ„mÃjs‚:’}kÊüY­Å Kr7ï¸2¸ž¿1ˆÿa76׳v5¾ÒÐØ×þ!/‡¬^&‰$Ô]~@­ò©þñÏÓ~•Ëø;OºÔu |M«\¸°€LpX‘´·åòø˜®/KŠ}\YîÙL€³­{L¯Ùc_"8åU%vûϵJ’µ›1PŠ~êGû<Â9T†##Ðý)ñlžî(€Ùþët>•PJò§’ã(H#åä} I¤ÛÌúƒ,edTç#$öÀÇ9Á<öÆk:P¼Ó ¶ Íë—Hµ)$€œ"Ž„Ÿ×?‘¥1(ñl7QËHÁY•ºíÙ´¯ð3øŠ[Ë£c§Ë¨â!"6H›'®xÆXœcêk—:¬m#ÈÏ—%‹2õ?‡N¿…o^I%ÃFM¹ô:s&YbbHUgÆ>ŸfXøËSÒex&+sk’cór’"ãý¬†ƒ9>¾‰&¯¤Ü¤fúÚi$„’su÷<÷=«Ôî,Væ/ìS!ŽFS+º·’=69ÇqŽÜžØÂ|¯]ŽªæWF̗ɨëÌ’Yê2ÈŒ«,e¸ÁUE`2 «sòœ9­xubY Q+NåÔ`Åö8o]¦žmҹʧpFæ{ߌ°þÖyg¹‘üå ²1TÀ$zdqÔ‘Ï¡ãÄ©Iò\õ0´×/´*]êæêímbe»™Ç^‡ ?¯ãŠ»nUQB©lŽÇ4ýsÃö°[}«NFWVR˼•ÇÐóœó×׊£ÂKŽ0çZˆ¦•‹ÄF )Ez>Œ“Þ‹é²18Lñ‘Ðþ¤~5¯{jЙ.‘s"DTQœãô¤NVÝT«·ÐäçŸóë] °’I,¸9­"Ï>[êpšž¨úŠ$I¾÷¡JƒF¹OÕžÞä+Ã3lV#£àsʬj¯£)d ¾åçŒqþ•¨)YàDa¹¶àOãS}NÛEÓ²Øgõ1§ZÁokµ^ëvJ™T`t÷'¯û&¼õB”NB¸éµqÜõõê}{WEñD›[³`rÿeÚæ3cñ?*ç™IU™0†>SÓŽGëþq]4õ‰æ²6ôÎ}úÓk#†ÛƒÎæõúÕ˜nI2¡c$[7:‚S•mËèp¥sèÆ¢yG,ìK±ÜKw>µm 3¯ø{ªhúV¯u>¶Ò _³amÒîL}ÜvÜyíß׿Ôîî5KT‹ÁE­…ÐIfÝ›Ì@Ã;•·6±ÆÒ§v9âÑ@w`''«cŽ?¯§¿½oá•ïöl0 ˜æ>m¼Š„!%ØÎHÇ`6©9µrFgÚñ•$äŒÅÛEo«‰°ø¹¼À½ ~bO|1úäúTÊ £¾¼³ræzënž„ä±\ÄúS%–xgŠ$÷Ì%G'¨Ç¿¯áLiͪ˜¤öGšyð?ýGÿ­U¬¤º¹³] ‚F3ƒÔþ•$’Üò^¨ÄÔng¾œEöpì$Æg=†+!ìÂ,¡FÜÖºQlF¥#䤋ÎîÍŸåYÚÓ£ÚÇ3…ŽVl– Ô`þ>Ÿ­Z'ÈÅK¹a¡o9é“þEY“V¼¸1ˆ•Dn^¸Î^†¨ˆÖRïo\-jZ[¯î·d Ã×§êsJã{té#[Io£V¶p|²G)#zã€03€1Œõ¨o'xºdG¾jܯKÑ‘­© ²–&U ƒ‚>aÏNF3HÑŽI2¬çåÇ8þt¾!_’Üãí1cƒýñÿשnd@©À#²¶Áqú”6òNaTPáÈ8êßËÛÖ®"´:„— Çká_>¤ÿ“ù×;á©u-A2ܤÏ¥uay­áUÉr~eëÀÏrâ#»:ðòèn[£Æ$¶9ÁwÓé\þºÎj¥¸³õãšêS9Ú§ò<~þ•Éø…™õM½Aú“þäÒ^õŽöôedÉ ä3ý*DÜ[€¹äU0­ÉqéW,æF‘²P0k¶ç:ZŒº‹:}ñã˜ñž¼÷¯ ‘Ø9äõ¯y•Ùnâaƒ³ c¶ÿZ¼Uo1€ë¯¼Œ±_ f`)¢õÇi§9Æ*2¹í]Ö8®w î<ßÜ.1þˆÇÿJõ ò¯†i·Ä—õèßúWªÐEPEPEPuá–Æ‰h7c71»ùÜgò?Nâ–•ÿ![Ÿúêjï†[% ÝŒÜ8ÆìgäoqŸÈý;ŠZWü…n멤3º¶ÿV(¢ÛýX¢˜‹¥cêßê[é[¥cêßê[é@¯†¿äfŸþ¹Ÿäj߈×o„YYJÂÔN6ãïù²0¸Îxv*§†¿äfŸþ¹Ÿäkbþûû+ÃÍ(·Y_É‚$…†ÕfbT6Œ ž~Qô)1™êzF›ã[¼^ØÚÛIeüʈ­ fÆ9Á;Hü1W´«˜/ÄSÚÏð½ÑÛ$NN-âÇZ4$²Ô.tk‹K y5¹F±‹ËÕ‰+Ø‚=y⥳ÿYâOúûÿÛhiôÜòm;ÃòGc-ÔWogýË RιÀÎAûU/´jö÷óØyë+',Ç/×°9ã®? ¹m¯ÞÚ+[0ϳ#{QïÁ¨´]êÉÍÅìß5ÁùŽ; óêM+¶tFŸÂz]ãYÊœŸ˜Éük¬°Ñ‘•ÚRòÊ0Ì;~5›ipl•llg9­Ë]R)ñ¸…9ÅiJ¤Læ¥Ð’æÁ¯4ãr‚@1ã¸ú×3ã©î<ð÷QÕ49µõ·•åÎcW ´¨­ÃŽ•Û+)ZÃñ7…›Åþ¼ðûßfº*MÁÌÛ¶@ÿw#?wk­B7æêcí%ðô,ë -4;Ù"Žè$dãñ5 T0ÁzA‚>^ƒ€jíby´±[€ì9Ï  ÷Ö¶ûRiÐ7qœâ‹ÍÊÄ+²yŠWrõRGQ\éÐb–f¶[´WSœ½·Žßˆç¥a9ÎéE\Òœ þ'bþµ¡C©Ê»¤ ̸Ø@!±íøÖ ^¾ÓË}•â(ÝP ×vªT•˯GÇ4ŒdàãÔŒTÏ ùº’¦Öˆå­4T–þ@윈Ô|«þ5ÓÛ®J„Œ3qÞ¬Å×è*©EGD);„‹Óå&«Ëµ#òï,>PsŽ*î:S (Ùb0Oq×üñW%tEŠê~ÐHÉü*g‚IÀÕ ;@VåÖ8¤geT$“€½d×*.*Ç™üGÕ’ÖòÞ8¤ÜL-žxRsŽýjŸ„4€t%»ºib†Î,#+²1f$œ‚0 è} aøËV[ñ Çh%½¡;Ë!#‚0FxÇqZ³xšÛQð¢iöV¯°¸‘w°ÁÂí$úpúþ³¥}Í£Ú*ßê0%ôW) ¿”è±4Œ~d½É<œœõ®\Ë3¡µXÑøVg,°ãó­+XÅúÆí$›¶•Æ>îVÖÝçóÂ"ÉÆ*S]N¹Á'h–SE°—ÃÝ}ŸãY°;`þ5N-T·ŽEœ \©q“ë[0Ú=¿‡a³¹Êm q¸rıã¨ûظ«.ÛÛ‹‰[6±gbÿ6:ŸZç©VJV‰T œnÎFÎâXí¯b˜ ]ß1çÓòæ¹{’¯©ÎÅrz2“Àn™öº ¢óÉstĆðAØ3Çà2?Jæ-VIî0±ò>?BO 3õÅtݨݑ-ZGQà3¬KªÈ¬|¥1Ä÷ØOà¼À½«º¼-¬¤º‘¶F€±Çùü×_KÓc°µŽذE›¶{ŸlŸÊ¹ßêIªXÄN\–~ßAèzçðÅ/ÞÔÑ›/r;«{6§«Ku#fI['òÀ€~Ðèöry·$HŒFé%0‡pݵsžpqž«Ó¨ç#D³K­M%KA ênFzg¶yæ»Í:ËÍÓ"Q÷w²;yÎW»mçwÞ^˜ú°VVG=ÉEÓÞÑn¥ŠYnÊŒK$Œ<ÂÜ“Ÿ¾9äúUd³´XL–Ë%›c,8aõ9$v98#ƒïµ¨M¶ñJ±C[ ƒïchÆïöróÜóÉfûLV¦gýݯ–L‚7oÁîyfÏ9äzÕZäºUœ—7±Ú_6 r9GÈ1ÔvÉ9ïÓŒõ7÷³‚I:ÔÓìì¢7&êvȕߌ½y»‰$çœõªË3Æ`ˆ2™~EÛÉgw=v€Xû)¨’Öþ…¿ Ë×wRi‚öI¿vŠÎU#$AÉ,r{0®É|A4IqiÖñ[« ÑÆùm¤óµv€~kÂÚI¶¶k«…h¡(aŠ%\d|¤í‘ô5±¦xz{™>×u˜¡ éó?ÐvúŸþ½MÛ•‘¼!i›ÁVhÿw"¼Rd«)ÿ'ŽkmwO³˜Aoo¤q.ðG<ŽØàõÇQØäóúߌ¼óé~†7/–Óc1£d†'ûÝ=É=mx^8¬ôd’A˜ê«,ž¤pô0:Ø­ý¥•ŽWM7tKr—ƒ%樨^&ß ÊByÉêÜž/}cX•“©b3ùT‘r›/îš¶‹º%PÀÚ©TRºgÈÓÔ‰^Flxf’kQ:£È¸eÉÂñœÕ„B1\÷Œ¼]gá=0Í0ÝH¶·Ï.GR}w?…sÕI«Â÷2|iâkOØ,…–k¹Tùÿ6;gó<Qà’ OÅZœ—“&y¤ËHéÿ#íI¨j+×džêVžY_,Ý=¢^Åá¥Ót;’Ñ2λ& Œ’G_`ãSò/2þ#›Ò4híŒP¯ €ƒÉ=ÏçÚºøîmö…‘^6#ç!r õã'ÿ×Rß Yç&Ù<½›UÏ8,z>˜üÇ~¹l°²LÆHç8=øëÿÖ¥))=ASh½<–ªK½ñÛƒXÍeuYÚDg•}¤ΫIp­œ’1Ðç“ü…NšŒòÄ!Vwº‰’}1øʳ«-¹ ¨ÆËÞTÕ¯nì#µ–f’$˜HKüÌ :õ#æýV·d, ®sÍt:‡ïe‹÷ÖÒ,rƒ†##§µs÷H,æVB³rO {‘éRÛi6\ySj%•»0Hä!u#rOäõéZ©§‹›3=®ß, üÝÀëóÚ¢°½ÓÔGyh’¸ÝºC°l“ŽÙ^1ÓÒ´ôÝVÂHÄ6ù€ á$I'ŸR;úÿJÏÚJöå~¥8+^æG“ ´žHÙPK(l\r}Nÿþ¾]íV2…`w+‚=Á®Ç\±"Ì˶‘²©‚{7aÒ¹1øþ4]½Nì7"‹ÐŽ8Îöw%˜œ—c–?SÞ¶ôý~çM·ò!Š£$³+d“ÜàŽÜ~”8¥/Õi=ÊœãkW¾!ºº·1Çûänd''ŒŸCéY>|¨Œ©#¨nXëŒÿC»'ÚsíWc)I5k"Ôn툮vôàæ*³;µÇžÒ¹—víùä­&çóøÔ0Ëôô$Ìœ£Kiª_ªóµÂƒ’² Äûg®?õ=9P²[½¿ýuN]ÙVpTž¦ÔÓ¨äò07¨é‘Y˜[)›ÊžQ8vç1ÔôþU}/Rfp‹æð¥ˆÀQêO¯5Î_ʬÑ:H޹œäçqê9íÁ5-w<«’Ã%Ë^¼²žxgߦqéÉü+Yº/ FÀ 8Åk}ªF¶@_%¹~P?¿þ¼Ö5ضÔdc…YQá\täö c“ǯ©‹”»”íe 2'Ԛ؀³Æ?6}r s³M4- ±%.HÏ9È {ñÒ¬Eq".ÐÜŽ^ÿýz[k›Ë'™)—Ò¨bÒ’£$àg¶;Sí.D¨I;XsÅ96€Ì[ ?¯j™Jèq™Zx— Çh+Œpl*­sf$G}¤€0ƒ„=zŒun½[’rª6$FWxg¸ÍDdÓÐÕÁ5©‰2Ûý˜!_*xq¼çÿÈe<d}0I[MVêÂî6™pCð} UÔ#_´‚§ä$‚G±÷>ôÄ`)œ•ÈÜ:Ç¿oÌWTgÌŽIFÚ&­x/¬¬äˆü’]C÷°1—нsr!¹##Œþ•ËÛ¹û0†O¸·p`}_ùWKpQ‚€|à ô£Èަn˜L^&ºx,cÈ+œ1ãÔê+«~c-’(ˆo^süëµßŠ%vË$¶8é¹xÿ>•Õ¨%cO!wÚrp=F{ÿõÿçÄÆèéÃ;6t‘3FsÇÏk7(ú”“•FONsýk¤²%íã•”È>«¿"]RvÏ%ºõÍy4¾3¾_s˜äç?ÔUÑO8+UÇ#µR q¸þG¯µO`7]F¯Â’z} t»ÚÆJ×¹:¾lç‚ Ÿåí^'25¹=kÜ¥‰|›ŒH¥väŸóë^+q‰˜q“ÈÑ‚ošHÏð¦P1©=)RÙ9À`ÆàœQMudùqÒ½€é¾&•éÕæ¿KoN 8û3À’½*…Q@Q@Q@׆[% ÝŒÜ8ÆìgäoqŸÈý;ŠZWü…®ë©«¾lh–ƒv3p㱟‘½Æ#ôî)i_ò¹ÿ®¦ÎêÛýX¢‹oõbŠb,•«©o¥l•«©o¥r¾ÿ‘šúæ‘­›Í-µ=ìq¸‚Qá eÈÂñ‘Óè:V7†¿äfŸþ¹Ÿäkª°]¶Ñ®Ý¸‚!¸Ç Û È}JC3l,®íõ ½kY–Ò)<…ˆ\ùqƹbؤç§TZỦâ)ígŽx^èí’' §ñã­t5‡gþ³ÄŸõ÷ÿ¶ÐЕémÄVH.áx˜p¸?(þõ~þÓt`2U'#ð;T%¾&+ç°h!:ãã\þªï&yeØŠ¿)?ùükÈæö—:Òhé¯{S–^0 Î=½ê)5’Öí–ØØëš¯m¯YÝÏäI&3t?ÖšöPßÝ…n~gçükJIšßMN˾$7¶¢9ą̊H õëÇé]ï‰ô¯Z¶£«]}žÎ,o“ËgÆN êGjòy`{+´Ž&pÛ”€‡Þ®|L˜ÉðïR$äáÇüä&»iâ%u3ž¥ncÖ ¿´¹Ç•¢˜ZãŠEl_¶þdâDåÆ?ÏÒªßÛµì­&[ä9.I`yÇ_çžÿZÕӬѴ湚uŽ><µ#’Ý3î9¦³4z4²”°2¿OêAük9¤Ù¤/cÖŽÞc ]§¨°#¸ç?‡ÐV÷…4èþÙæ‹såUC7-’G—õúWðÝ¢Nnd™òÅ—QÆ3Ÿé]­´p­¾ô „ ¨Øã>ý3N0³¹Õˆšî鯃Ê °žÿ"±¼_¦Á¸º‡bíÀA^Oè?1]$(²Ê!·¿Ö¹¯N/®Å¬rŽ!ö60Ø#ñ5RZXQvÔã$¸Ž$+1QµŽx$úúçW´Ð±Ú‡f žmÝô¢m2Ö0e¸Æ3’@çØ{óÞ¹ïêKa¦Hð† £bs¹‰à‘ž+%†²’±?ˆµ£§xš©VÞè'< 0(ßFŠóÀÄgŒŒUr€’¹Î==Å7Â5§½Ï]¥ÆqX¾¿ký( d„ì'Ôv5µŒcŸÂ¹Ú³±ßs+’ ÜÁs×ô©ØàtŠ‚, ‘žjwã<ý*àa[r3Ö¢¸m±©Ôgüj•Ã[Ð mؘG™™Öwf’)`¼ãý“Ðþ?z°Úûÿ¢\nèÃùsÿÖª³DÞbº1IåYzƒW¢¾ŠxÖ+«DŽLÿÇÄ<)ä²ÿAù×<“½Ñ¤ámVÅuðÖ£hÊë"‡Æq6åý?•@Ú=ÂL.§ºGc“¿,ÎO¾E^šæÆ˜ï§3ò#¿š¥}yFsrÍüN<µüA«÷ö9­XÓv›‘‘©AÁI$}OÿXWH4K{”f…‡_º~¾½¿*äôµ–]öî?ݺ:ùa µ¶g®G§­’Jèõ§lÓ.ÚÂänÎ$ÆÇàkE´M>P·hvž œ±¼@×`¼ù6#È<’yä~›©=²É'ìòPu(zàUkndF—±Ò‰b”rÀŽ˜µaï¢Fh·±Ü»æÿëV2Ä»òµ©¼pÉ®dôÌ#TE勦½ÉgûÄ𠉪&}ò[åíWí®Êg¿…O¶W5T´þÎæ(Z™1•g^vývëÇNsÖ³mì]YŒeJgŒŸóþ}ø®‚=a‘YwpF=Ç¡ª³\ZZ8ýƒùvü+G8µ£3ä’èDm­íÕ²þk°ÇÊ ¯o\ù­g_]d ® öÏ~{þt–ƒ›h$ ûÕÙ´Å °‘p¹#ëÒœ Žq´¯,~Sݹ=»þŸJÚ*ÊÆwÔ´ÖR[éÒ8ÃKq¼Ÿá$c€Íl])6ÃéžkU‘^'ŠNœgzõý+§¸]>`ÊÊ0ª21Kîñ)U?gd8=÷…nÉja‘dˆ˜£NvçŒóü«¶6ëâµ/°ÛúÇ5ÔË{k$n¯"8 ¤Œðý?^pÄ;8}.tºS«ivn\œ[Çß;Áô®*âAöéŸ8ü볉•t¤òÜ ±*…#‚@úW +ì@±ÉÅy4´›g|¾B=úô­Ml|£ŽsŸÈÕìA&L`g§E,‚x÷c©ç§jêz­ VSoæ6òäî]¸=Ïùâ¼zäq Ú¼1í^³jà ‚–BybsùýMyuøoµL1Œ1ì=k\Ç"qŸ( è>‚”çxfäÿ´3Nƒ4ñÆs·=«Ó<ã¡ð!ν>@èÍдµèuçÞç^œñÿÍÓýå¯A  ¢Š(¢Š(¢Š(ºðËcD´±›‡ÝŒüî3ù§qKJÿµÏýu5wÃ-ÐnÆncv3ò7¸Ïä~Å-+þB×?õÔÒÝ[«Qmþ¬QLEƒÒ±õoõ-ô­ƒÒ±õoõ-ô WÃ_ò3Oÿ\Ïò5ÕX.Ûh×nÜAÆÜc†í…Çä>ƒ¥r¾ÿ‘šúæ‘®ªÁvÛF»vâ†6ã7l.?!ô) µXvëòê¸Bl•≕rÁO Pƶ§MiÕÕiÇsSÅ71 ŽÙyv ¶GE?Ì ¯¢êº…’†‚y6ƒ‘6TLv¬KÛ™^qq+6Ó±ý=? -õ@Ñ|‘Ëå·¶ñSF•HûÑœ-ÊÎìøúaÿD #v Ðzž+žñŒ®nåŠÑ"ŽD-('?‡Ó¯Ö³EÔ[0œúòMiØYiör KRÙqu6 I³xŒqƒÓŒg“øs]‘MüF‚Jé 5FÊÖkw%ºà{× iºó]Y‰#ÄŸ(ãœçПZ௵‹8 ±B2ù¿ÔzU9uÉâXÞÛtPï”1]Ê9ãŸoÇðªsqVFN<ÌôÉõlI…'¨&”ëP"ˆÜàãžGõ®EÖ¯µ‰Kp°@ï…S“œc‘Ÿ~ÜsPê¶¢=hD×›£’!ûÀv/9Êñí´õþ!QÎã¸ýšØêõo}ãŽÞÍ®sÿ¼ ·§·ùÅeÚø²I',!óa\ù„ŸÀ×5=Ȳu·e©cô>”ù$¾hžt´KxaË3,;‹ u9Î@öÿ ŽfÕÆ”&¹ãK›Ë³jÊb·SûÅÆI_éÓŸË*-F_HšUœÃiy²0b]Ç@¶yü½*å­¹¿š9o´ƒ-³`ï¾2Húu­ù×KÒ!ó!¶–ËÍ‘AE@C’@^ŸËôéUßVcÞ×ЊÚ`’hàeŽÞóË‹ @<“Éõýz¹«qm9Š[+‰út`çÿ[Ð×=¨x– 2+C§_ÄI×íŽL†5 íO›Ž˜ü¹ÓHñÅã[Äóùrɳ÷ƒË­ÓJTãÍhìtp™uIç¼ÙbˆìHI(÷Çó÷úS/`¶ž"’¦åñoˆòÂËFI ·µs+(ÈFÉ9e†â9Çvnëþ%6ò\-°ýü€eYUö¡Î\•'Œ;ŸBxµMøP ãdšëÃR”äDµ;o†zD·z÷öžÐRÓæŒ0OÝàŒqÉö;k×®#ÄB6fŽX uïÀ®EwÐ4xí Û Ý4€^C×Ðpôš·×÷Å•îf1HJîJ¨Á'¯N¬e)V“IèoB +js—ºÎï½ëþú5˜ù?0`'icŒõ>µÓé¾*°`Vc4D£z3¾Ûzu5OÃÏÆY-QòYq½²3žÆ9< Ž z®ðþÊ 5 ajf$î‘Ó¶}N[§aßШÒn) Ub™ÆGsáëÈÒK‹ØÈa„ˆ8F/ž¤g ÷Á?­mÃkoiʤÂnýÈRP…úäãŽ{ý+µ¾ðÔwñªL]ÙpÂC)ʰèA漣ƾMñ ®ˆÓ®§6é&µŠb|¸ð|Ò6!<Ç’xéŠÚܪֹΧÌû%´6ÉruRe¶²…G™ö¡T`.Knã{óÚ¸ŸøÆÙ.$¶Ò¦š×hÛ .gÉ  Ç”¸,rØv¢ä1äßUÔo¥6þd× ü·SJÆ(Xޱ©çpÉÓ» }Ð0XÙ‹Ywùj䟙»‘Ó°<ð‚³,¦ô&²Ò.õ‰PL¤Bì¶RÛq’OvÀ\žädœ×]¥øy´ì˜.#‚`“È8ëÉÇNzV†â‹ K?*m=Д˜˜1n1Ðàc^õ'öŽ‘vêÑ\²;ž"–&Î=7r)*©½Ãصº5,üWâ}:ÝŒÃN¼;IÚ VoBN@Ï0=ºÕ ¯j×ö?eÔô¹aŒÌÐís' Â“Ó9çû£ñ˜ÏoxÂ8ä…ä',ŽzsÇùêzóQ=«”*¨ðCóéüªÝG-Ìý›‰B-wMY'g†N¢)Ñ”Ÿ¯|U£-¥ÒH–³Ûß7–’Ï>¹8ÏQߥ4BFìgZËÕF±²y®­¢ÜFÐ6 ÎsœOóøÃ}Ðã~Œé5A¤x`ÇvâTfãŒç8Àþî'?^à×5›‹û¢Ò× òã?,kÙ@íÿ×úæ-CP++ü¸™‰+$ˆ9ã=ùü)tM*{ÛÅpŠøå·‚Aüˆ5­”uêMÛÓ¡Ã~–âUžHÎÁ–ï€OòßÄÑ**/¢Ö{«K1ØZ£$Ç;qÎ*@?S§Z§5⣨’ÂñIp˜üéšÍI½ÊÑlhàdž˜ïQî]ä‘ògê5kZm¢$wSNŽÝ<ØŒcèsÏùê(w¼†îä’woNN:w-+šSÞGq<(yH P1ÛúŸÊ­]lq)d‘Ø 29ØåO¿Lý+1-¤ þ­™ÈôúþU¡ÕÖ*Åñ÷y$ñÇÚ£©nÊ Œ±¸{›j¦Æ9Á­Ë³Öÿ&rJ·?…bKFxc€}*ÚFI†’L&Hõ¨ääknëGؼè£lK–T;@àãŽÜóøV‘6ävýkK9jŽxÔ§¤+Kã>™ªîdê@üÏ󭛈–â"zÈ"±¦µšþÝ–%ÚÊ3æg¿oÄT4šÐ¸JÏSFTÕèc­eé÷"å J6ÜÇÄ‹ýG·ò­EÆÏZàjÎÌôâÓWD3|¸‘L#jñS::ñLe$rj5)Øe /pôšºÚBÌ@BÈ}ºÕKiÍ…ÎÞ*3ø_µ%ºXÝ™XURzð9ükxFi{»žV"¥êXÄž ­ÙSðØàÕ´6îÄr0~k {±5±.£•Éç8µ îŸnt饃P›³Ðuüë¦v÷÷1çè`nÀê0}é°¬· …QŒýìŒu"–ÒW™ÚÙ·hÊíëqÓúãœÖ´è¥U@ ÀJèvZ±ÝìŒýB1o`bùBåK1pGå] Ãzà =ÇšÊ×cŽ=Fd&TÚDÏMÃŒ‡øÕÍPµ¼qK•;s‚8÷¨¡ë°–æSD£ÄÐ+ª1[$žÿ‡é[ãI‚lª “`îÁ{c;W3ç5׌-¡U@eV=ÁV#?nZKui;b`bsäÇi\Œúò8=ýXT¿6Œè§kjtV¡£Ðdûè¤e[®3ÏlW4HÈ+a&#Et`bÄ`rrÝ¥fù_.r­yp‡¿+Ò•£d‰Š^@ëì)`;¦E|c¿z±!#€AÅB¼øÙÎáÚµM%blïrý±Xe›¨Hç®xéþ{W—ê~ßqÎNóüëÔ6äÍÎ\'9¯1ÔüL.9ÿ–ÉúÖøz’3ůq€8éF8Œi0IãéžqÓxq®Mÿ^Íÿ¡-z pÿÌßõîßú×@ÐQE (¢Š(¢Šî¼2ØÑ-ìfáÆ7c?#{ŒþGéÜRÒÿä-sÿ]M]ðËcD´±›‡ÝŒüî3ù§qKKÿµÏýu4†wVßêÅ[«S`ô¬}[ýK}+`ô¬}[ýK}(•ð×üŒÓÿ×3üuV ¶Ú5Û·D1·á»aqù é\¯†¿äfŸþ¹Ÿäkª°]¶Ñ®Ý¸‚!¸Ç Û È}JC-VŸúÏ×ßþÛC[2ƳDñ1`®¥IF*p}äqÍ`éVéjž"†6‘‘nŽ ²´ÿñY‰'ñ4åÞŠÆÎÙßQ•"iÕî|†^¿Nߨõ¡¨i±Øÿ£Û™¥fÚ‹xÉïÏaQÁ¤ÛZêQ"–Ö8ÂîšMÌ:ç$/oÎ’k+»¥K#5«ÂX?Úœ&äÁèŸÝï\3¢å¥ŽÏh–¬ Ù¼qjÐ%¢2ívfÃŽƒÓ<×)©ZÚE#$e—õn^éQIh±Çz.^?»#Éô9ǽRCgÞ]ÄM!é½sÉöÁéU ;ަn¼[Ôɱ²û5Îr»³ÈÆzöíÍv á»éÐhƒRŽÚâûï2Äe0ìùúduÛŽ½ë`‚6óI!Aû ~jÿ‡¼]¥hž&¶¿Ô?дøf`ÎFä*>UõaV î®]YÒåµ2Í‚YE–œŒðxq'Ò©Þj6Âg«H§ŸÞ`œ~~µ’·Wr^ ˜yJUNý3VMÜ’\yVÖþJgivåœzg'齌.·¸ïí×—÷)j‘¡áp8ü«>KÂ×qÅ+0–O”lzvü+©OÇ%¹RÃ,3Ò¸=bÎêÎô4‹ òŸ*ŽÖr¿¥fÞä{FÝšÐï,4»E´G1«ÈÙù8#óôªz­œ@€ïÚ¸ã±ïPi^"´hUî$1¨@¹= <~t£Q²•¤—Ï ™,¸Éâ¹$§Ît+X½¡¶Ñdù2¶àGBÈ §y©Y$¬ñ}¦à–ð\Ž }28Î,é/¤ŠÙàˆŸ6I Æ?º¼ÇÛšÌt‘õ9lìí%–b2Ò:“&O;øázýOÝ\Ú³/2·Ûn,.C”C.ó¼€ ŽŸ®sßÒ­ê!¹Ôgóã‰C$B6Tï‚NyϯOaÍD¶PDe§2€>f-ÁàgŽ ¯h‹Ìq‚µ¥£µŠ”“:/ øÜXi—z}Ü~~rÖîP|’ÜÈÜsø~Xúlj^è%™žâ(íÑTr?y/$»·^28öúc.+u–y»eûz`T·7Ói[RÈEdeg1)wÉé»Î=ÇJÒ2ÖÌÍ»"¶¥ig¨=Ì Ÿ%Ùwª??6Ž:ç‘Z¾¿?hk4Xðà•b0T““Ï ãÞª¼×z¾^Y¼ÅŽ"åe$…ÀþØñƶ´í>c©Gu”±Ãšed ƒ#,@#'?ŽOÓ“OF(­nhk3G¥=¸³•e¹ÎåÚ€tç¿ëí\¶³­¬öÓyrÃ$—™y Q•yÚOMØçŸ§]Éšz\Ù\@ñÜMåϦ¬;=­«]®Ñ$£b<‚AìýGï é×3Êúm»4MzàI'?*€AÇn±©ÂÅ'b'vç®|=ÓÒ? i÷&#ûhÊ¡9‘¸‘ìI'Û8ì+®‘Ö8ÙÝ•A,Ìpõ®b {LðÖ™­Ûcˆl#RÌø  rN9ú{ò½wÆš÷ÄMQ´OZ áÈ-ÐÂ?¿+ýÙSõcy‡zV9nt~7ø½o§ÄöÚ,œ°ùn‚‚ÒŽŸ¹R1·?òÑ^Ðý¸{o kº†—u¬k—Øéo4r-«“ç\¹ nrIbpÌw6N c¸ðÏ€ôßÞ SZjzÁ!Úâà’¨Ã©Œ–#ûÇžæ¶o-޵¨Gö½ÞLs™ÒÜà…r:·¿¢ó€NzÖ5ªÆœžÃJìˆhš zRÙŤA»Qb„o±/ׯ$“žüÖe߀téÑ6­ .Nä‹0>»çòííìàĉµOðÉÇbO¯ùÍXvéËa#Ï ü+©Œ«Qû±ÐÚ/—fy”~·È:ƒDHýØxÏ,=Çl׿lU¯ê1Ƕo7ÍÃE'\õä€?#Þ½5íáº|,[ix`«`0ý?֨ܺ£bèŽÌcR2Ý€ÀíE:±šj~ëFʤ獵‘\èwð\˜e‰Ѱ 8Î;Ž?ˆt=ÅBŸm²qÜÜ@Ĉå îȯXMÞhI†ÿ–‡ ‘ÇMÀŒvýRít‰&¼– uHÀóÊ+í„ùçH<?Þç°ãë^Ôj*ùêÈäŸïeh+Å­›Ë8yIŽK W¢h¯¤YÀ±ùÈ3Œ—B>½xõïUm|#$³”Šlãæ\çðõêqíZ¶Þ¸”…K˜È ÎTçéÍdñwvJæÊ„-«±~ ‹{û©–B:ùo»ùUåHZÌÀœ‚;“\å߇o­Õ•í™—pPæÉÇ¥S÷ѪˆZu9áˆÆ:ñíR±p“³Zᬮ™Ùí³/¸3&_½ïL}/K¸rÒÚÃ!= -ü¸®B=kRËV‘¶ô ,K“ùMZOÜÄØ–zd,yï»=E]âú‘®—6Û¶M¼Ú¼ÐÈ/™eŽGéPTµ;íõFhWŸÞĈϯj©Š—bî†t'®Ì?#“ùUÄñ¤¬£íôÊ…?V®.wÒW"P‹ZÅ¡· ¯ˆl–“+®Ka•½ÇJ¬%ÔÈ1Ϧ:Æ]K~Yúò3Z¶º‚ÌÌðL²òKpî{UŸ¶™‡ÁçŒúVŽSÙ£%J TÌ5œ±´S»Û»&ÜÝÂbyûØÍG”Ò©´xåXFÀÛÃ(’ýo§ÌY¡ èÆ?*‚[ >tÃÀ­–ù‹(aß×ê:¨Ôå{ Tœ–ã4û¤2É".NUIÆ®)·÷¶é uw…¼7a÷¢r„žÎÀ}3ÒªŸ ÊŠ^;æOW!ÿ.ó¤å;¶cõf=ñ˜ã4`¬Òüå1ÁÏ9ÇúÖ*ZÝFÿê¤ô¯SŸÃ×lÅU¡™˜åÝ”¡ÏèO¾jì;‹id±f'?2È1¡Á­’+’Ç›µ­Ã® rdÿµô=¦¹{"ùdnF?–k°þÍ·–ÜEwo#ªä26äã¯Ë‚ ÊC³*\Â’®?zËó@rxü»(m²’HêÅÔV‚n-ÎÜ $Êß­i$—Þid¶Ö_u ~½Ï5ÌéÞ—ÎóEóºH|(a±k˹UVAÔôÉÏ~æ}Es‰$I)gldå@éùÖŒºœÍ$¾dJÀ¢$œãŒŒ~~ØÑÉÈS“ǹrßYÓî¡ U »1¸c×#ŽÙúõ¤kˆï.ÕpX±·pÁmÃ!±è@ìAÍcOžÍYe#NVD·… h©±Æ@éîk–ñhgÐ5 º5(Ø`ÿ¬^ƒüõ­¹ªª K³"1æ7Pw{z×4©{YݽoEæz†cÇkG?»W\²ñרsÛÓé[V++_¤EŸ&K‰²Ñ©<à(ùþ\í^}pk—¸×WEÓ„¾)µ³þÐ(¢-2ÝH”2f$ù\cóƒ…ë\„þ+ÿ„PˆëWrCn?vÁØ`O¸Žø'¨ÙRP—5ö;’å:MY"ñÖ¿ɺ6ú`AÑyÕ%™”gમâ>DÊår~lÕX ;E·[+µ²ýäŒc– å¿'ŽkNÿ„>~F¬žXÀ #ù ß@gðÇã]%Æ—g Wóí‡ËØ­ ¤Æ1Àêj'Z¢wŽ£…m= EÔlbÎ.áËíùN 63Á>ÄsœsÍkèÖI$Ïy‹¹£g‚õ=3òŽ™××µÒmà‹ËŠ#!Y€,ÃϠéÓÒ³¤ÐdmAní®E€ó7Ý9Ýü=Æ>½k›Q×#Ð>¯ªg©ªãG\ žž¿Ê ¾ïl®mK²oCtŒŽHéë\Së7:aUlÛˆHÖ\»3z “Ÿ¯æ{Õ›Ÿj6cÌâpÌoLõ9ëŽÞ•Ï;X‰Q’Ôׂ;OéDË;É'˜À³üÒÊä€ާ„ZÎÒ´ç¹Õ..fuhË F܇r© {nÉϦszî³™g$‡p߇ä^„¢àmÈç''r+KÂ~(Ó Òb‚îdµ™+y‚íEÀ%±Œ…Q\¸šp“I½WÜU;Å…ÍÍ­¼·w2¤0B»ØãüöîkÏ5/¤ÖöÚ®²»,g‘¿³ìÌi#¾Ë3)c?.3Мæ½z\Ýê’<Ò¾gtÝÉŸ•p½Ó‡\gŽ^Ñfñwˆe×5P#¶Sˆ!å £€‰éÇåß“Zap±ÂÓúÅu¯D ¹¾X‹¬i÷>3ÔnüE© €@ *“òç`ÿeI#wr§Ôãy —M  ""€‘ð=€é¥hk7vÿeò•AL1§  ™°W Ü{UhX[DYƒ¼í–'ñÏ_}Çò•IÔ­kWNËÈÞšIòı\o$ËFA¿·9þ¹õÍ]ß|T4‡ØÈjTŒÀcSŒúcš›~Ì‚A?­qûi¯…j ©Eõ+›=«r’æ|œN1ïUW:pÙ_ÕþÁ/#Äîã‚ÉÊ_ÙÞé§'ÓÌ'§rTÝ1E®Ûø|ÎTDÁƒgêT/ãšöSJØfFtIÀÇB;ã¡'#ýpG5«é¶7’^ÛF"C”@‹òç¶ëÓ¿è+·˜ÑÄÅ·4R§RéFGt—ž2#O>`r ²äsœ”'㯩銂KJÊq³ÜFÀ&@CÀúWMcjl[m…°Ÿ@ùÀ#89o@HÀÀ<ñÍ:X®n.%A"ÊG8a¸ƒÆxõõöëÅL³ q›PÛÔôc‚©(ûí_ÐÈ›UÕ4øm¥¸D+p›ãÞ£æ\ü8#¨ëëIŠdTeª;g¢±_ñ©fšM0y×–É<`1ÃàLøã–îsƒÛŒ÷ÅB”Í,—zEÕ´$Œ=´`¨FÉVä1€ÞÇÓ"»°ø‡R<ÜÈ寅ävPû‹ÿð“Ø€ $ÃŽ¤ddŒãгi®ÙÍ.>Ô€u‚1ùŠæöDsÔ"Œ¡KÛà`‚Iàçc;GoZWÒc†Y’=NÆR„ †]¤w亨ÏN•Õïv¹ÆáÝÌÐÈÁ¢»†@cÚ5Ê>K8ÈäI{ñ\,º¢°-ŵ¼—®Y­ðàrxIÏ9ã’}2`c¨ÙLŠÏ:°çfâ@i]'ª'•Ii#µŽâ9_rŽ¡˜cÿ®?q†)c $qºã2†¸vÖ®àeS ,1ÃÛðô­KOÌ9š(\w矯5^Ò$:õ:±·†G‘-п*ÿ/óüé«Såäd€À¾Ïá×µPOÚýå¤êz)•¿ž*Ôzö—*ô¶GþãÆßÏýi©'³!Óšè[fÔ¢ŒªÏî~{÷ÛøÔF÷U‡ì#ç“ ãþú REqm/ú‹˜dcÆÕpMI³FÄ*ˆ×–e$ƒ‘ÿgŽIü͉i½Êí©‡sÚÈpQFæ€íÏ¥e]ÜYÜHTO•q÷²»{óé[¢Õ.2ÛŽ8úŸzcĤ4dn-É\d·oÆ„Ñ<¬ç͇œ>I˜Ç4ǰhóQ29$óǵhÉa¦Üž@P ´JTŒû®)M¶{‚V{˜:±Iò·æ8ªS%¡–Öö«Iq26Aqµ[µ¥É:ë)%™™&fcÁo#ðúU·²u]áÑÉ8â¹[¬,MÊ8‚Ãñ?iÝkFâ«öó2Û²íøž¾˜÷¬eI¶i$Kw~¶ ˆÏúGa×o½fOxp¾c³á o›jŽ‹Îx+;í!‰9Þàcæç ÀþUJK„•J8 :ŠÖ4ÔUˆ”®Éâ»X u6¿8¿ô¨ÑDˆTžAâ¢%IÚNYW?6:tïúÔØhBœŒö4ìMÇD̓®0TŒŒsÔb·ôX­ähòά§“€#­a7Ì#Ã#366r?Ï«§5½±D 6ìϽMeRØMDR #Þ3ÛÒŸ++J*ˆf¹‹ùXíg ¸‚kNæiE´»ï—Tsšg`°oß„ÁÂí>§5Bú쥊(“æolÿžµWM¿ŠÞRf™œ’ÍÈÎøSÞ0<“œDÀ:;cÛóÍ­KPZQÛœn ’O8ëL|¹qp Ö©’—/à€N1ëê+í‚ÊÁ NÕâºlÅÌ¥±=˳è÷PýßÝ——¿sí]è·kHà©1r‚1À®zâáßA“pˆÈ¶sþ?®…„"Üñß/rŽvæI#Ö4× ˜üÕ cцuz½¼æÆÝ¡b#'‘ïò+“¿O/QÓB•gPp;n^ßu2jO¸_s ¼ôúVU"mJM= _y¶jÒ"€$l¨¨$Aö׃ œÿúª•EÕ‘Ë7<8ü§Ø©PÒLÇæP{\²‡%ÙÒŸ5‹€2cg<楳¸Q{'oÎ2Äp)¢o;‚Ic8äÔÐBž|DËw¬/Ñš[±¯æžmÊ àÿ‘^]¯®ÝfìÖôø‰7E†C*•<õý{t¯6×” jè6>ÿsÍkƒþ#+øf$tïNÔÒ"ãëQ©ÛÉûf½3Î:O ksqôfÿЖ»úà¼ÙÖ§ÇìíÇü k½ h(¢ŠQEQEw^lh–ƒv3p㱟‘½Æ#ôî)iò¹ÿ®¦®øe±¢Z ØÍÃŒnÆ~F÷üÓ¸§¥ÿÈZçþºšC;›oõbŠ-¿ÕŠ)ˆ°zV>­þ¥¾•°zV>­þ¥¾”ÊøkþFiÿë™þFº«ÛmíÛˆ"ÛŒpݰ¸ü‡Ðt®WÃ_ò3Oÿ\Ïò5ÕX.Ûh×nÜAÆÜc†í…Çä>ƒ¥!‰©Úi‚ÜÞL°¬òˆQ›¸‚@'·Ý5gþ³ÄŸõ÷ÿ¶ÐÕxvé¶vʱ(»Y%óµ8$ç$qïMÐ,WL²×l–y§Xn6¬“°g#ìñc$Ó§á@a}"O"+2¸çüñSÇ´‡,ÍÃõª¶ªªZ_˜ù˜Ë9É8š¹`à^‚çäd=yëS&$®Ä¹³@&2ÃÆýj¼—— §JÛ”F"gP¾ÙãëÆ?úÝw5Íføž-£†,9aƒ× ãß­fA¥‰-•.ÕÞvàvÀç4”Ê«Ës•Ò#“PÔ£Kò(!zòÀZÛÖnï¼­ ýí-®ãPñEqpT¨ 0p22G¾sÍRÔ´ù4)ÖòÒàÆ®¥ÆÛYr0@ú‚Z¿¦éQ|BñF™áø/n­–Häæà,¥S&€§rǨéŒÞÆIßTIsjëdVþQ$¸Õ[&7þî}yõàðyÎ)è·6‘]}‹Rm ýä’”÷ã·NÕœŽèáIfa÷”¯ Uõ=×W Fx!6äœz§J™®aÇCt=¬:ÄËY£ó¶3gË OÞ>Øè}EBóùÚ‰–WILc÷I[cÚyÆ=6óÎOzë¡ðÓ[øBÖ裛‰”oFLlã$ð:§½dÛiÐÚ:úHáŒäËàŸø+ø~µÏJ>í¶4²zÜ[H„€Èó•ØŒw'PÞ^F¡C»aù˜sϧóý}MY¼Õ<;®c  .áßp üGõ¬øIôë6"ÇNsÒ¢ç>ùÝ‘ô"­¯ W/YÚê:Ìò=³»ù˜µ2{žÕÕ?ƒÒ v¹ÕõŒ{‹’»7zg!Zà›Åú“îònË·¼¡l•ü¬Û™®µ L×72Ï)’BÌ@éɤ¬–§D*N*Ñzº½Æ…i¸[w1fÜUJ ô ù¸ö¬iµ‰çû³¼kÎØð&zíP_À ŒÚ0ç­8Z2GãÖŽtŒÜ[w#Œ$’—žëq-ÔI÷9m-¥€ÀÇU$`Ôkg`¼ƒëWí¬&L4eXg£){X­ÃÙÉìW·,fT ¹› '¿¦M\ÃFË)‡hÜT«É¯z؇FK±ÎR9ÉÝ“ëŽÕa<-zÄl‚9—³+/¯½g7wtéK‘ûÆ3Ì›ULQl´à‘éÁ•=Ù–tIcÎr±¼ô9éùz×K‚ Bâ8ãQÈ H-ôÇÓÚ´-´:ÊøÿR •ò6–äsßù¨×x8?vÚ…«Êå $gqQ“ø×?we y1©ONI­oœÆM$f#‘Ú­[_\[9x&’91Ã#1T¤”ÆÄc#Ö•gFö«³è5%Üé-|e¯[&ÄÔæns™q!ü dÖåŸÄíR‰s  êNUã’?JàÄŠz0©{qíY¸§º-Iž“´Û‹Åº»ÓæªíX:¯r@8ä÷úÇ¥·ñ6‡}±¹°oÞ¸=:°Çå^%ò“*ÔR\KZÅ–%¾U$žÂ§’;³Ú'kk»Ky?f*\øù:î,zàüÙJá’ÂûW½K{ 4¾Óå"{Ürî×GžzЍ|ª}Y.Ɉ7 úÓùzµ¦j7¾ ·¼¸ºa¹•Hµ·%YäŸWèxŒ6sêp:’®‹ƒm&gYJÛž,û3˧xCB)%½Œ’Ç%¸Ý‰n]Ò¹<”RνÎPŒã‘¹†ãÓô˜£‘¤Þ$T–=¸è3ø!æ:-þ£áÛ¨õY¬GvÂO0'· úžk²µøŸ™îÎeV\f6Wç×_çÅ:±U7&š”v4µK+­0ªÉ’P°U3Óhäú“מ)SV¦73AÔLaÕ_Ï?OÊªÛøÇD–mÏy$aøÄ°œŽøÈçüó]ªé#%­Å«»ýÑŠY~£9ïþsXJ”g¤âtYÃX“¦ o¶Y˜Œ`U8éÉÉ4ø£n*…ˆÎí¼‘Ž?žjì!2ÑF¹ Hv\ü„çyÉ?^k$ÀË4Ó6çß.O3æ‘3xÜG9ü+’®_E+§`§ˆ¨Ýš$º»·³âF )å"lg'ÙFXð0~•SF•5™ã•eÁ ²F3 ÆN:íèFz ÔAhe™Ä®ñÂË´£ÙP8sžsÜÖm¼“èW2[ØJ¥pʰÆY˜õaNúÇT°QöR§MûÏ«ªË™JKC¼XäòË'É&àGý~™æ½g^4¦©ug4hû_y™s8o¶0œž­*†`Ï ÷—ð#=ø§Û6¾ëçXkS\Âú©Épœp¬­•õç<û€×ˆ•aëOðÿ™º!Tg[ˆØ0Î>àó7ö°„î}k¦äôLʶžíhIw©k¶ö¦ÏRÒmoOÒ¤ÞY_ö¿0~° °¹D'@º¶W$a.ÑH#ŽDƒwæÕÐßµ½ÅË‹e+†-–“Éã€3éU¾É çËRÞ¤dÖSÆÙò´™ÑG!Œâ¥ÌãsæÏL‹ÌòâÝ”D‘†XóŒn1³ã9úñTþżÆ-õ >pÙɈÏூ*Þ–Æ79DòÙrŽ=«=.Æk‰m®mR)V¶_aìOOðª…zU4jƬ¦¶<ÐÑoþ­zQq&“pÐã>fÌ€1Ôã·éÁôªísslB• f6eéŠÓ´]JĘ´ýròÊ%ù¿×mUõè2x§'Õ«Œ5RæeÕ6ÊI{m8ôÁ ÙÏpõ¬iÅëcËr•ìÕÎ`ëwÊRòB™Èf!ÉüNMNž(¾Q‚–Ç#È þ§¥_’ÿI»Ü·^¶IÎû97x‹ÛµfÞiÖw<ÖeÒÕT‡ùœrîÛïÆpLüÇ—Ë5Öâ|¯xØ’/ж1Á æõÁn’a潉ei8þáʧ<ŒæãMM­ÌåN/dl&£lÛ\Åó f O¶Ò¡ÔÕ¤¶*ã=0NÿÖ³¤Õu3—>¡,±‘M†‘òž1Ud¸´¹b³Ä–·,FÛ«a±È<`ch6c¹ùºPªEü,ÏÙ4Vû‘]¤FÛ³‚›»ûŸJ³-›Gç„›˜–ñœ~9?Ò¨\=Õ¥ÜË)ó`çæÊ‘A=ˆ ƒÜ‘5‹˜›ýb1ÄG?ÍW´Oq{t-<ñ@K ($8ŒAõ=N:Õ?#ýZ(ü™Ÿ\‚GçŒ~n=p©Üñ¹\ä‚ÀŒúò)âòÂ}Ñɺ%8Ëù`í{‹‘#cûY—q†Ñ›ø€ÁéŽØ¨Ž©3Æë039é#Èä§8üÅRÀ=¨Å+• ®jQÙ‹Hïîc·äùI!U?P PbX’X’{曎1Ö pËÈ?•ŽäåiÏcUËyÁúÔ«x‡ï)J,ÅtH½y©‘Êw?D²Å!áÇÐÔ‚0FG,¤Ëiv@ù†}\†é “n:ã¥em?Zr±SÈ5 š)4e|®{+ZÖ8Н*£Ôq\qœ†]ŒqŽ*åµôÊC)éГҹ§E½ŽˆU‰ÜÅk’WëW¢µ Ô•=Àî?ž+Óµ©mÇ–_œgœVæŸâTœ•Ÿ cŽkžPœ —,È4øîMÒnç!çó§¾—-¸ÛX¿!¢ßU¶w6\zgúV´°Hü¤žy=8¨ö·Ð=™Œ‘΄²GÈãÚ©\H ³°ÃõéϵuŽùä8QœŒŒ~Ï5^}>+¸ÉgBN0Ïù5¢¨’3pw8i€Á8ö5‹zÈã¥v·z`â7`=A®~ÿH¹MÀ8p}Gùçðª„ÕÉ”YÅOO—=êo´“[ÒØÊŽ FÛsÕMUû:åÿ‡Ž‡ÖºãQ3žPfYŒà.?o”v’$ÚÀô=ëTÛN¼SÙFT‘íÖ­M¢Ì¿6d=sõ®ïÂ:d±À—ó óå$@6¦XžÜ½‡©#´vËæ Ùàõ«r/ÜZ+f!$›\|ª1ÐaÉÇ©úS”mZO•ÞLí5 jصÌϹú"ôi ôÿëwé^W¬k7íÌ—7@oÀUUPB ÉÀ'‘Ïó4ÍFîëS»k‹¹LŽF` …Sò[t¥FŒa¯QV¬æì¶%‚]‘î]ûà ?(\‚1Ôœwìx9âÂÀƒUÝœeNô¦©G#Þµ’¹—.æ†O §‡ “œzÕºâ•J· ö¨qhÙM=km[P³M–·÷0'÷b•ÀÖ·ñ¾·nSuÂ䱩ÈôÈ¿ZåÄÈHÏàêFAüKWܵ&wVßîãf3éѺœªÇÏâÏ5ÜéÓÞjº}®¥….Ù1°h³Éë’Àã¿LóÒ¼AXqÍz6…ñ}´}ÏL¸Ñá”Zı$ˆì¥•F#'žjU-´ê4ŽÚüÛ{¤?Â?^vãõ©Yâp²;`í]¬G¹Á®zŒÚK²™´IƒÕn3ÍkZ×â¿„n0'†ò<ö`¬(xGѱª-„3É!¸~:”!p1Ќ祋M·h”ÆÅPp£ÐW­x™ï5««Í[k8%Â¥­ÈU‡!§?{…$îÍ!ñgŠ´ôQqckr¼Ÿ4¡]Þ¡@+“ô^õ›¡5³5U`÷:Ë<ÜjŸ:lÀQABW¨œ cõèj_ì»´M‰rÀ‘Ç™†ýHÉ®b?ˆÉ ‹þ“sk»’ûòÇè¤/ó­{x~u&k¹ í‰á$ž¼ü›½k ˜e?Š)›B¤£ð¶E.—s0 …·±d–B在ç¿EÁ#åàã½VƒI¹0¢ù™$>O–ÅXm9#$uǵt±êºeÔê¶×Ú}ÃIÊ"™§Èy4êxfIâuŽqÛëþ4£f¬•=´ŸS†™õ[D†ÆáH-ÎèŽä]¸q— ?ˆ’zç¿`jž¿5ÄΓìáB¬†"zðÄdúŒú×-­ÛÇöˆÐˆÎäÝ•=sƒú†j;¨ ’Ýd…uç{oJn”'5QÞæ°ÆÎ ÖV<¬JŒÏŸ§Q[z ¤‹qöˆœÅw00Ù烼®IöùsÏ¸Ï ë¡Ò¬R .Ñ.œ ±ùñ+•î@î;÷÷¢çÂzeÔ‘Íq±½³\HÅx9'#’Nxç$žµªµ9j:˜ÇVJÇ'-I•z㎠~ò*ˆË)@ÉÁêk~÷Ã×,ÒÙ_¶åPlžç‚\ôü8¬¯øGuLüñË Û•ð@ÈÍoµ÷oXÙbBåHÏ äìV’Tº†XÙ¢“lr.†#¦à÷c‘ÔŽ :ñi®Ç%9]²‘ <ØçëþƬЇÉvÈaÛŸåV•O@2zôÖUÇV8ëòcž+í±¥ˆ-íÚkY7I“lëóɽ€À«ßF³&–Ú=ʪ²¸ FFOqëÛ¾=n”û=¤±¨-= ”QÆÐˆá[ÔJèèk S’v‚z“]*VWdFÞ…y.Ëͼ*«ËŒcÛ2]BÓ<)Rw#]¥sþÏN:àcëV~Ï©M ¹=jµÅˆÇ_QÅñz2Ý6¶$¸³IºâT=xÈçŸÎ¢élÇäÁ Œõýi4™fŠé­$Ȇpqœý1ùzVÔ1FÍßPòçÁúûV–[Ò“Z´f ¥NDÒÛ8ýM:Úòk}ͼHHþ0p? ÕÖ³3 ¶ò¤™w¹ 0…€á›UãŒ÷'Ö “O¶Id±UQþµðpxÇSß§áV£%ÔÅÕ‹û%˜u÷Hн¤2FN8ÀaƒŽàòyÏsOMvŒÆ,B6‘‚}½úõ®rxnmSÍ ùy gÛØÿ…5Òà4E‚ïu$‘ùÿžÕ´!RWåÖÄ9SêuëÐ\FVTØø(p8 ûçž§ü8æçÄLžbÏÞ1üH®bWºGÊ©>˜­:Ý”>aÁè—)¥ªŒÌß7O¶@îªTóñžqúž} ]±µ’ð•YPƒÏqÇ^ÙÇáXQÞ³[‹V`Ñ“’Ï×ÓگǪÞDŠUƒ€Ts|gõ¨u’Ñš*z¦uv‘Åo—$í!S·çê}qžßJÌ’+&ž@ö‹óÇ!Q•îqéŸcYðxŽdÞÛÀè:…Xþ<ҦťávkY#a’n'ß {UÆ´u×r%‡žšlO.Ÿ°%¼HëWê:äþ&ššcÛ–¸Šë i ¹   ãçü*[=ZÅ× þV8;ÐçóP}=jÜf §d[Ëu…“+!uS¿Óäþ#ùÒ”ãÜ^ÊOt`ëRº$r¬ŠåNT¯lW¤öÛÎ%Peò6ƒ‘=^1^{â[†Ú;ðP*àü¤Ïã]Ë©[è‘[jÝ— ó:u¬%4çkn1h§0{[G2a¸y}?úÕž’¨ˆü‡xÏÍŸéWu=ÐÛXÁ"I¹UÃ*@\¾Z¾ÝÀ©á†#‘T·%ìSÆ(#Ú¤#"“®; À¤‘2¼~(+Nâ±"`â¡Çj½4}j› Ñ36¬0ÓÒWOºÄSqILE¤¿‘~ð *Äwñ‡k6“½O*cRhÛG†Oºàçµ;i8ö5Š8©âXþë·Ò—'b¹Íq$ŠÀƒÒž.3Ä ý+2=BE?:†•XKØï§ÜqRâû¥ÙšÑj“Ç´îã±5§kâ)ýóL×668Ê:Ÿ¡¥ÚÊr féAîi®§w‹'T°~œZ0x¹Üà©Îúךù®ÏéNK‡AH¬g…ƒØÖ8—Ôõ¨µÛ[° LŠs€õü鳺J„HªU¸Ü?N{ôý+ËcÔ^3p}E]ƒ[’ 69 #ŠÉáä¶4U ÷= ìvŒ™Š@¹ìÝj¼ºRIÚã?ýjæmüK*°,êN:‘þ«‰a80ÉþÒ²tå…Ý>¡6‡ À;?–*¡ÑØB09ÚJ†õ‘‘þžÕÐ[x‚ßÌ'ÌCŸÂ¬ØKmšDÇ,¹è1œ’­R›DºiœSé·6èT¯ 3ŒåTf·!ðË´úŠô‰-m¦,Aâ©Ka ¡c„좵Vg:gž›@Go~i† «]„¾L7ÈNzlãŸq¢º’wЌ֊²3ölæNÔ‹Aü«ûæLŽ7wOæ)«¦e¦òŠ’ϯҴR!¤b2G N=ªUÓÛ`o,ëý+®](ãf`®Š‘òŒ}Î*§‚Ý6ÄÛ`~Ts‹”åžÈ*99B¤ œÿž?:ªÐí]Û”Ö¶ä·y›{}»}*»Ú€0s"¬Ñ‘¸ŽŠ•C±VÁnqÅY’ØHÏõªÍnØùr1T˜¥ª³&™Y"Ê¡'¾:Ó%òL¯ä,Ë ˜†qÇ9 ×Ú© .mË*¼ˆ1Ô1¨Öæì‰I'ûØ~~†µF nîgi¢—θ@÷€ 3ì8ÀÔ¶š¥íŒže¼òFÙËØ¡o©R è;Õ9n%*ðO$ PnXî-{Œ~\SWzj ÉJÊ %·(ù‰îq‚N}I©Ó^Òç\\é¡$-œÂÛT÷@É?Vü«›y %ˆWŒg€ß7ê1ü©@F?+«sëþ4¬žèi³ª¤Nì-ïf‹åÜ ©ž™ãj篻w«¶‰¬Û+.—y8G"ÖW\õë·ŽÇ¿cèkˆòHàã±Å8K2)U‘±éš—Mt-U’= ÛÅ~'±ùL²Êá„‘¬§èX‚ZÒ´ø™2ÈÿkÓ,äçÉfÿ2[ùW›A®j6Ðù+píéÈ=öž?JÑ‹ÅsK4?n³¶¹JïˆF±îQØmß­C¢Z­ÜôÈ~"hò…ûEÔ, WêÄåWæñ‹}lm4íiUänMÆô só0Æ3ÛùW“®µ¥³îŸKu ¦5üþmSÅ.…s÷/¦Àé2aO°+¸þx©t<‹U¢{=“iÛØ^E7?)‚a!²qŸåÆqWb°ŸrŸ1ʧ2¸ç±'Ö¼EìaVÙ©k)ÆâXù`qž¤ÿJе—ÅVÑ$–wW¦þeòæ}˜ÆrÀý+?cbý¤{ž¶4ç̬¡IÈÚ0qÇlzÕ Bk ³“·OSõÿ?ZámüqâØî_µ*ðWìà…ú”ùÔËñ*åÃ%æ› Œq‘”ßvM)RKáeBmîÍØm¡¸iùyCNs“ÏP?J¥s¡Y‰r°Égæù’:쎜tæ­éÞ>ðùXá–+Ø ùŠ+ '¨àç…i.·áËé?ÑõK@«“ºpbõþö+7Îìn¥o…˜ÂP¼Ù·½-˜ób yã Æ=Iö¨ãЮìåYÖ#+'(¤ç°Á8ô99Ï~0y®Ý 7+o-›G6f|xaÜddw«Ïo ‘\ÂŽ…˜uþ´½¥¾È¥*–·1ãsiº”—MzÑHn„…ä*ß6r[#ä‡ÿ×[vm éOÔm%˜~íŒLgø‡tÆXàerßpu®üØZ‘™&731éžÃüö«BÇu؆$~VPGu¦«k®Ä8®K[^çž^xb1$†Þè˜Ux,${’S¾{wªwz^™<Œ³Îç@r¡ºwP:gûÿæ½íî­ŠÈ­û¸÷0˜Ç=°FsÎyɪ·Öë,˜žÞÞîB¤þúœã cŸj¦é§¡’…N»G=ÜÓë\N?×!C’FäÈ,3Ôä׿'=ê0þY!Aäc5Ûê¾·¿R±yv³†hÉ)é÷O××Ò±?á¾*ûæ·a@hѰ1‘Ûr3œwç-®e©¢š‹Ñå¸ÛÇ¡¦ÈIUÝÈèE_“DÔã%~ÎòçåVBw¿lsíPµÙ” ‡X·d~ñÁ ú`ASìä_¶‡s?L¶Ý¬ÛȪ ÇœÈä:}AühjvîÚ‚Ao)V•NY¸Ú%³ë€ ÷éW´ËE˜1¶rDrîÊ2NögÖ©—3ëw,Å-äXÒ!óHøÂ(¬p=³íWïÛ±ÏQ^.E»Hü¨îU-·îêÄó{gò›çù— a-®pp¬2 ½åW,5›]F&È "2Æ23IÈè{c¶k ÄRMgx’ÚnŠ6±8ç rzÖºc{ÙœLµ ‘Ȳ;ŽÒES“Éã$qšŽh-œlG àJˆvª‚@ܹ铀GbA3"ñÑ\¬‘»¢csÚNý¤ddqÛ®N23ÍZ‡RPÕîÚE4«o U$ˆäù³êéïíZ§(½ k¹=œ3µÝÄ]y¶èïÚ\œ8=À=Ï\`ûã9«bÆŒ(g‘AÃîl=@¦OãM¶–ÎÁ’Õœù)7Ì™ýç¿$Žç ŠÔ}KN35¬Ïöi‚‚ „yÇõ¿ž&u¦ôw9ªJQ—ºŠÖÖÚoA:I¿>bºÈwHþ-R5¤qÀÞrÃ:í–ð?`NÙÆzsSEio%¾mH™\‘d¸fèrsƒŒÿ“XëwuazDð*D+$LU•€<Ž3íŒà‚À"³Œ¹™Të6˦ÎÍÑ–ÂK`–÷ÀO±íM‚ÂÒݦ>mĤŒ/–BÏRH9vÀÇ©«q¢iÈ#$*]ólÇåó" @NA#?ÝzØ *ž`]Ì@gž?óŠì¡ƒ§(ÞG&74­F|1ÎÐFâI'G݀ᕕzW“qÖ›s¦J!imäYá^I ¼õeê>¼‘Ï5¾Q3mèÃséù{Õi~ÕdØqʲç =ëIà Ö†4sʪK›TqR c¸30žŸJ÷1%Å©›k¥¸}¹ ŒrzõÇç^]ª$7â" 0è  ’}Aí×¥zÙt…\Ü\÷:¨$dg©=?_­yu¢ãQ#Þ^xs.¦~²Èת[iL†$qŽ:÷¬o4ß]y1¬U˜ôç·¡­}~ææòkt€Ã½)X"ªñž§ùõ¬hù™‘r9 úV{&ѲNÉ1ÓY(ŽG\ÿzF#ò'%²ì»!˜py4’H g wɧD¾dŠÁº°ü9¬Ü®µ.Ý[yNH)ùEy÷‰€:¼ÍКï-bÚ BØÁ%¸Åpþ%þ'r¨ãǽ,/ñ¾Eâ?„̧=NôàíÀeÈïŠB¶ ;v8#é^©æ‚ÀäØbGÙ›¨Çñ-w•Áx$ç[›ùwoý k½¤4QE (¢€ (¢€;¯ ¶4KA»¸qØÏÈÞã?‘úwô¿ù \ÿ×CW<2ØÑ-ìfáÆ7c?#{ŒþGéÜSÒÿä-sÿ] !Í·ú±EßêÅÄX=+VÿRßJØ=+VÿRßJå|5ÿ#4ÿõÌÿ#]U‚í¶víÄ mÆ8nØ\~Cè:W+á¯ù§ÿ®gùè—6Útmk»2C帔Àª 6ND|cŽ6¯áÒÍJóÿYâOúûÿÛhiš~µ©ê¶æâÆÓKžå7®¡& qûŽ~½)ºSNÉâ#uqLnŽäŠBê?ÑâèÅTž=…|¸ÉÉ¥‘ɤr@¤Ü@#44˜“h˜L§¨Å?ån†©ä­7­K‚èR›ê]UÁ϶|1áøL|Ek ý¯ìjßûÿ+ÌÙµþîFs·{×<²2ô9Õü9ñŸáïiºž­qök(<ß2]ŒûwDê8PI䎂—+¹\ÊÇ=ž”l_¥1gFî3O‹4]Ðl›b 8 h9¤26Œà‚9¬ùâ*y­æn\0籪“®ñÒ®,ÎHÌ"“·½=—i"‘-ŠÐÌe(cæÁíKL’—´b€ NsKÖŒPAÈ52]LŸ¯5ÒOZ_”{еÔñ >â¦[È›©ÇÖ³OÍÍ%O*)I›!£“¡PcÁàãéXàr 2]LŸ­.^Ãæ]M޼JEã'Q5>ú}EXKÈ_«m>⥧Ԥ×FYŠù“Ýy­+}iá΃õ¬œ$ƒ*Tý) #¨â¢PŒ·F‘©8ìu°ø–@œ°`F9að5äÉ|èyÎ{Ö•¾³"`‰YHÿk¥c*[ª°‘ê‹fM»€aÈÝŸ¥f\i…µ?¶‹-Háã m?9?Rk”·ñ ƒ9‘Xçø‡_ʶl¼H„¨•UÑIù[æ±ãüþu7¨·$^ÆÕý„ð[Ao8‘de<3m Øv$ÿUeËáã žr3ÅhÙkv›JÆ…n‡üâ¶£¼‚eûÊÇ#2¨Ü·³²Øâ[Jº‰²¨¯ƒþx5BâÖXó!e^›Šñùצ`”è¼ŽÕ Úu³BÁçšåÐ\ˆòÉ-²x>ƘmqèxçÚ»Éth®dm‘DÌFI\:­?…ÆÇÇŽgp¼õêý«[¢8g¶i ¤œ`a‡ZÏ—ORÅ”•8ÆTâ» ÏaZ&=Á%Iü?úõ™.Ÿ,G‹ëÑü«XWO©œ©y³é‡hÛ»wCTÚ6Cµ”‚=Eu¦%É9'Û ¶‹ Ó‘Ó"·U{˜º]Žh/9àŠr[Á+¿cAùÖœºC¦L_7±â³^&FÛ"#Z)'±›‹[‹%­Õ© »ˆ†ßµHQÕpyP üzÔÐÍ4-˜¤Ç¨#ÄTæöÞáJÝ[)`0…8çÞ˜Š‚áOÞO ŠxhJ¨C½¹pâ3üªÑÓ ¸Œ=”¤áˆ!Ùsí…ëëП«:è; ˆ¹—’´\z TWà:ôÏ-çHÐ2(b¤+t$pj<`FLSÓrÊÅH<hæ(]zùÕˆg–Ør‡ 9#ñíÓ¨¨·J;³Û‘š1ÎåRO¶1ùQ̬ÒÄÚÄ(íÓº¯!aB ÁØ«cÆlO¼ØÇ–#ëåí¬"à©Ìg#¸=)1:œöÊÓ¸µ:8õûu’m.;ÇòÉ=ÎX>:³ý¥¡8ËÙÜÛ—ü’ Húe”~b¹b©°~sŒr)å¶’ç¹Òj/ Ôš:°úÌ ýÌl§+æ¨Ê÷ÏÈóÿô‡âmKÄ‚|Iq,[¼ÞD³0SÊÆîŸ>z â¼Mã’"UÔ†˜`Ö´3Kk¦˜‘Œ2—ÙÁvÁê{ãœg¦xëRá¡J¤»ŸNÉá½PJío©DèÍò™­Ácý‚¤úrj›iþ"µ@ZÞÖìqÄR˜Xçý– ;âóö™âéq™ì/¯#Š223lÎíÎ_C]†—ñÇÄ»þ kä^î›[ó_ð©xjofR¯$z%æ¥5˜êz^¡oKºWh„¨€u$Æ[¯P+ßÄ:Tr´ÖÚ¥¥Å¼‡2Ç3ù,‡».üdžã¹ú7RøÅ§ëž¾´]6òÞââ„u* )z÷ô¯#e9Ï5ÏRŒ`õ:èÖ“Z£ÚÇ“_Fcv}øˆ)ÐwîGOjÊܧLo$âT}Ì£#«2{õ¯(Ã+n\«â®Ç¬j¨8Ônˆ?ÂÒ³=‰"¦)%kƒÖW=mm’’¾Ö, à®6“×üþnâÆM—‹ Q±”°8ëþ5æ–~>×-¡Jö÷*1´M6ý6•ýkj/‰ŽWihÌ@ÜÑÌPgÝÁþu1RZ¦)F,èî´K+iR½U@>˜éêk6÷ÂZ pÅ=´O Ãg,³1ÝÛbG<ôÇ£­|}£LÊ®×ÜóæGò;m$þê̺ö‹wnž]ý¡E>cy|ñŒÁ==3Z)Kª3•>ÇwàVºÔ¶w+„î*ñôäcϾ}ºœSŽ"W3t4¸êiJ¢i_B'I½ xBÚR0è¡È/÷‡óü'ƒœ=ë+X°U7:”Sï—ˆŒe@PFçžxöë]M·‡äk—IšRêC‰H^=v¥IÆyÜzÇwáEž³J<µæ\¥¹ÉÀÏoÒ³Œ”ek˜F„Ó½Œ²Iwá›HÖHRîу#ºïXyƒ±Á*Ãþ™y-n,šæC¹ˆ@äaY›þG4:µµõÍÔf ÝÈà…\ü¸ÁÊíÀÇÐ{ÕËûf¼Ò7^À:YD9Pùˆe탊¬Àn85h†5¹£RžN(昄Å(f­è´½(´†“¸Í £RE6ŠwzJm´v 1SOáS¥ìÉÑò=ê½% š ©ÏDçÔ°—8ûØö5KRàŠRfæÔ~T‚)<¼t5Š”åX¥N—³§ñîíRåcæFÞQÅO Ì ç =O³“Rìñþ"§[Ëy?o±â¥Çº)K³4cÕgWÉqü«NÛÄ N?OÒ°ÇRö£ËÁÈ猩B[£hÖœNâÛÅ«µfeg9ü+ZßÄêÈœu<~uæ_6r?*‘.%Œýâ+…]ªÄÿ2=nÏ_„˜ ÿŸÂ´—[¦Š_´0XÆ@\éÒ¼iu9”Œê{â®Å®ÊŒ9n8È<â¡Ñ¨¶eª´ä{/ÛtëåÈŸ àþMAu£éÓr’(Éû¤õÍyœ" _æã¯øÖ¿ˆ· Ë©Ï7JÉÅý¨–’ :+ß ÄºL¯»Ì:ž½H5—'†•W”u=ISýjk?Ÿ5c9ÛÛ¦ºÜ-.Q’91€Tc¶)]. àÎ~}0y FªW£##ÜŽÖ³.t'xÈ’1qœ¡Ïå޻Ȯ¬î´®¤·~¹©'Ó¬æCdut?B9íÞµR›Õ8GcÉ'ðúÇ(Èr:˜Øíl{?k.óMkyjHbþ‘@$~Šö%ÒwN"8ΫŒLþ=j Ÿ¹{PáxÀèkU^Kte*1{0ÖÒ#n]Ê{­X‡R½µ!Y¼ÄãÐdqøWw¨xF,3ì’^I#‘ùV-ç…o#/”TayH;àgõ­ã^2ÜÆT¥15].íJßZ´N{Â2¿‘9ýimì4˽æ)™BüÛ^UF#× ~&«O£\ÀÁfã%öü뀮î•MôéÄ"e†O(œ ’¹ôÏà*Ñ8½ˆÕ ¡Ýˆü؇™ ådì~„pj«[ÜFøX\dT1Ëy ŠfÜÏ {ß…\ƒ[½¶d‚)‡s0,Oãœþ½¨q“E]À6:c½+öõyõÁ4g̳·FÀÃ*g?'ó¦Ç¨X2áí£LÎ2Oä?­Œ¯iÝ|µõÀ§,@ƒ÷xòqüêÂ>›'gR:ØüM^‚ÇN¹È†íjäæ@§'° Acì3RâÑ\ñ} ¦€© è˾†§–}ãk(ÆsÔÖ¥Þ™Q> .¤¸‚F{ƒü½ª™µY74RE(öà¯Ð ›p¼„>q1lH™]¸øëP˃ì?íLÖíÁ\úŒ -ã8Ö—;êÎ/c®ð¯†çÖí¦Ž6¬% ›ˆá½ÇROåZw>ÕcbmÜ€¹V?Ö¸í>þïLq%¬òBÝr†ºÍ?â^±ç˺\cOÔõ®±¨äÜY×M(ÆÅ)<9ªB¥åÓ§›r&¨IiäÉåÌ7=EÁü«¾°ø…¢ÜíK›Y-Ù¸% ?¡è?Þ´¼Ñõ ½ž¡ ¹ 2³#·SÁüÍ`åV;£M"û2‘ÐÒýIê¡õ¯]¸ðµ”Êï%„Xó$kŒÿÀ‡'ó¬y¼bì:.ùWÉÿdzKÛÛt©žtlr>õE%£"–ÏÊI®æëÁÒDKEu…CÇ’ŠÍŸÃÚ‚Fì<©œb¡ãˆWÜGOž½Ušé­c :©m­Û s]”1ë7f™âØ.˜Œl{Á»ðVÎ+œhÈ·Ú!–Ç’#Ü1Ç\õë:ÚâÊ µu˜ù±âÀ¤A$òÜWžžõÙsësKš;ÓÛxÎÀË5íÔ#hÝ\º@­ŒýÂ8Èã­P°ñŸ®Éôh›p#10Pé·'¿ñ`ZÛ¿Ø" …WL’XŒššÒÎDRd`rxµÙÅ=EJM]N›­iPë‰2\Ü[[0Ý/Ÿàì»IàŒŽ•³|Þ×fKƒ«ˆÚ1„GF½Ûô®Û‘McŒV^ÚîýM½”lz5ìrÛ-ý¬Ë$¨Ù- àc¾G_ð¨-õ;·‰„ÚLŽÃæ,§h<{×T©$ÐúTɨj1È;ÙÁ¼„Œz`Õ)ÆÚ‰Áô:=b{?)ÃYOk>9ÁúýÇU;Q»°‰áKI$‹±ØÃ¨ÎÏëU_\Ôn­Ë,ã¶ñ€?Æi-5Ù-%(öâEÆ úƒZ©ÅÇ”ÉÁó&t×Zv¦†KÝ:4`àîxƒí=úT÷œúl¢PHÀav\‘ƒƒƒƒÁî;ûV]·‰-?šÞHÉ'  ÀÉÏéZVúþ–ÛäY#I…ÞbõÇ·sJ7½Ó°¥+œþ¥à>+G¸Žêâ€àJŒúp¿z·¦Û­ÜQÙy0¹ˆmWÀèã§ã]sÛê¶ l—`ÉHßv?*m‚ÙÞ¹HðÇÞ1ŽŸÐR«U¨´÷)ÙÝï¶°¦Ú讫Ý÷Wiã׃þA6Ã;c= ÁÇ®;Ž+©Ö‘ ‚1‰?&®v]§”1ïS 9-G5`yÇ’J‚2 ¢ØHÕú†>ÄÔe]åQØ’HÍHIIAãàÓk¡7êhmg˜1€xõö¯?ñ8U`½1ÅwÉ?˜è¬  õÏS\ˆ—þ&Ž G­NøÆ•ÿ„cá° Í1Æüéìäð4ŒÇÖ½SÍ:?ÿÈjaÆ~Ìßú×}^àp?·&=þÌßú× R (¢…Q@Q@׆[% ÝŒÜ8ÆìgäoqŸÈý;Šz_ü…®ë¡«žlh–ƒv3p㱟‘½Æ#ôî)éò¹ÿ®†ÎæÛýX¢‹oõbŠb,•«©o¥l•«©o¥r¾ÿ‘šúæ‘­éÛh ºŽÇʶˆ™¤+ÎW ôÆè:V†¿äfŸþ¹Ÿäjî¿áRaÚÉ$Jœ”WË »G`xÚ:t)1¢O {»ËÝCûOí׎9?ÑÍ¿–£%FÆçœ““Ö§³ÿYâOúûÿÛhk2×T~+¹Ôt«;BÏìqÀòÛ™3uv\àÙÆjö•+Ξ"’Ky-ÜÝÅ)RËþ]¤ÈÓè%¹ò4§Ž(.sžÔ™æÁã4¥¶äšfqH~j7gµ[ÒµÍCÚ”Z®“qö{è7yrìWÛ¸<0#¡#‘U1[~ðÇü&>)³Ð~×ö?µoýÿ—ælÚŒÿw#9ÛŽ½è‰€E'½;Rb€Ži­Õ!æ£<“@) ;µ òE!ëR`ô›q@ ½¥Ðh1Hi{Òb€(´c½4ðiqK×4@ ¥£(1Gz1Îh=hvšn)M%%/Q@ ŠQE¨¤¥Å€’”Ñ@fSH>Õ:^N˜ò=5(µŸÕÒÖ&‹}=2/—€X–ëµò˜­xsܵ=)£`bxÚÃù× žðü™ G+Ð}sv^>×l@ŒÝ¼±ã•­tÚ_ÄërÀjjH%£l~<ñù Áá§„®d÷- Z¬‚1™dñ‚©©ŸÂvF5Tyb#© œÿßU»câïêghX䔂VQù~…jù]bKYUcÕ0&±tê.¥)#…ŸÂm’a»àg†L“øäV|ÞÔbÎß&@:m|ùŒ~µème'Þ+‚OðñŠiµ A8= gühRš±æé·ð©2YËìÝü³U^6„4m×þuë-jvîeÉõæ¡}>'UÊŽyJ«[¢O-]¥zãÚ«´e%fã¥z\ž³–6ñò[`Éükû¶ …Š)T¥%É_Á»UÆ®¢ÐãAϦ2ñœbºoøEåt·»l¨ä:dþ˜ª³x_QVqû’ƒ¡ A?§õ­D…dr·Må(|ãEâ;È÷Z…Ô~Ë+ ÕíKD½‚ÓZ>ÑÐääk)ü?xÆ0m¤ŒHp®ßw® ϵuÑœZÜÊ­âtº.¡¨êˆòÝÜ´–ëò aÔ÷?çÞ´ÀbÄpFzÔÖéedħj&OøÿMh›`Œž_o>¹4üÌ[orH×kƒÐž¦ž2*žÌ?JŠF(¡÷Î *O™T¹éRÓzM‰ü¸ƒ«cæßúf¸¯ÿÈRC]bܯœsü#?ZäüLËý¨ÅGÊÀ(/ß+—WøLÅÁ݃ŒŸNi®0y"œG晑޽3Î:/Èr|>Ìßú× ×àsÿÙÆÿGoý k¿¤4QE (¢€ (¢€;¯ ¶4KA»¸qØÏÈÞã?‘úwô¿ù \ÿ×CW<2ØÑ-ìfáÆ7c?#{ŒþGéÜSÒÿä-sÿ] !Í·ú±EßêÅÄX=+VÿRßJØ=+VÿRßJå|5ÿ#4ÿõÌÿ#Zº•ôú_‡¼ËeU¸1ÛÃõÀVvÚ ^™éÓ éY^ÿ‘šúæ‘­Ù´ÈõMØÈZÐCµ‘pceÉRÑÐÆÐt¤2 .æúÛ]¹Ò/¯>Ù‹t¹ŠfQ°IR¤.Q‘ÇzuŸúÏ×ßþÛCRXé’é÷Zž¡x×—OBÑÛ• äáP$’IîIè*¶•p—Iâ)£YèàKFßñïåX?O –çȰhJn}èæ€ɤž)@ô Bãšë>ëzw‡> iš®­qö{<ß2]ŒûwDê8PIäÒ¹1À¦Oþ¡óíüè'N¼ÒÅ.&—Ž”aÇãMf”ƒƒM"ŽÅ'SKŠv 7n &9§ŒŽÔ£àSjFN21QŽ4w¢•—Ò—PbÔf{PF)9ϵ8®(ǽ7ÐE.=hï@ Æ ìbPá鸧ž@鸠ïF){ÑŠAíGzQFÞ3øPO&”®8ü(â—Ö€ŒSM8Ò@ JE'4´˜"—·½)%.(£­¤¥4P ‚jd½ž>’=ù¨(  ÃQbG™8ô8«)c%“ê+"Š\¨wfúysrޝìM<+º:çF{/'‹dn;‘úÒå1¸ ó(?¥8:纟jÊV•pÇr85f=NÝÈÞ ëÆEK‰JFŠ9âlPƬ›Ë˜àPܶzJÏŽ{y~äŠÄôóS åX¯C„z£ERKf^‡X–&.§ÙiÁâiF3.NsóõÎèSøS;©â±–5X‰-Ï@´ñ«!L±Ï?6søݳñ´yù¥ÙÏ~?úÕ䱌1?OþµL—2Ç­ŸSY<+_ 4Xˆ½Ñî+â˜&a!”îé¹úÝ*ßö¬3®a`R9x\Z¤¨Ùç>¾µzßÄrÆÿëX{?:‡Nªó/šœhŽÓM¹R$b®Ç†R8ð¨ntñnŒê'€0ÆñŒ ÷?^;}kÌ ñd©ÆíÁ»‚GéW£ñLŽ¿;1‡ŸÇŠIµñ p¾Ìëo|93îuŽûáCqüñYRèA]qªÈF$g§~ÄûÔºw‹SËHÃðÓ†ÿ>•Ð[ëðN›]ƒ¯÷$ÒŽhÉ#þÀvc¶HËg,JíQšÉºðÊ™òmXvÜ™ä÷8â½%n­¤#xÛŠhKYAÁ剥5³É&Ðç€%Ãpv:ôçžm.¢´$ŽåE{{èöwMåE(-´u÷¬Û¯ FÌ"7'„;Iü±Zs˪'U³<|/· 7\7”Å“Åz ï„K«+$¬3Ô¨p=¿É¬+¿ ÍŽÐÈ öDù%ÆáG— |ñoǶçÍS%Tþò7ŒûŒÿ*¤ï°]ŠŒää†gthÄGƒ»°Æ>µ¡„q•!‡·5JêÌHÁÁ W +êLâùt&MPyÉÞŸÈùY…¿Sõ*kªÓm/^Ð^i——Q" ¶]TŽ£rÿ ×žÊ’ÇÁbBôç¥ii×Óéß¾‚ÿ`ÈBDŠ2G¿9ëÚ¶•8ÉÊs‹=ËÇ&´aòµ_”*‘#cè§wænÙ|PÓ§p—¶r[º¶§Ì ôÇQ^*÷R\òÒ¤l½2Ïâ?­\ûmõÒˆ®nd‘#ÆÐÒoŽÇ&¹ç…Žæð®Û³GÐvZÖ…©06ÚŒè¾Fÿ?JÔX\ŒÎg8¯šD“# ­ÈéëZÚе3EìÈ=3‘ú×;¡m¹“=í¢*¹ ޹ÿ&¨Myû]>RºF+ÏôÿŠ×¨BßA Êç–ÆÖ?uºÄ]ô¨œ5»¥†T~5“¤×AÜе°Ž-ÛnI.~ñõ'Þ¤¸´g‹åÚ7ŒóZ·úf¡0\ÂÇý™1V^ ªp2 ~?ýzŸfº ™§©çºý·Ù­ä‘²w6Ž£ÐÖ\»öîO <:P?¥{ô§0 :ŒÓrE HaJI=Mc¡ Ú1ïG4­'s@r{ÒÇzq9 •íMÇ­I@Ûƒœçb€#®i§dQÐF0h0qÒ€¾Ô{ѹ½h1ÏJ\sNßÎH‘¹ŠLSM?šoS@ Š0E9ºcE&8¤ïKÞŒPcš:ÒâŒÐRbŠ\vÍGJ)ÄR~‡¥´¸ ŠN);ÒÑßœQÁ¥Çµ”QKŠAF-%˜¥¢€RâŠÅIÌÑð’2@j*(új³¦3µ¾¢¬.­g|l¿CšÈ¥Å.T>fo «iq¶UÏ¿Ο³<Žý s½)é+ÆrŽÊ}Ž*yGÌn²°Ï?‰¦ýÿf¦£p˜Ëö"§]L¿⦗+ÑkpÈê?J‘.$ûUu»·“ûIìF*]ªã(Á‡±ÍKŠêŠRkfZKù—‚G¯Z½µ4`μúÖ.Ögð£ç”Y¬kMm¿‰]8ä{âµíü]"‘ó§Ôg¯ÿZ¼íd ò*UpUÊ·¡ïY<4YªÄ÷=nÛÅñ«ÕÆîrkfÛų Ê ““»Œ~uâ {&Ð dŸþº³«2ŒyŒ>†³• ¯…—Ð{žòž#‰þ÷(w©þÛ¥^*™¢»àŠðÛÝFÀï~«‹œ¬SÇBj¨·Wä{3ןDÑ®•Œca=B·_²¯<jì6:2ƒ‘¼qýkˆ·ñz–]¯ÏükfÈUCI¸g8ÎsSxý¥aò>ŒQð%¸fo'a9ù£<¥s—žž"D3¶ÞË"çz·ŠÒP2vñßš´úÅ¥Ôb7Xäã<ãüý*“]$K‹]ºÒ®b8–Ü7¼mþ5@Ùª±ÈÛÎ0ËŠöÖÒ´›ÅÜTÄXs·îÕ)|Áañ7 oòkU)£6“ÜñãaŽFA"FcZô{¿KHŒnëû¶ÿ9¬+¿ßÀ¤ªîÇ΄~¢‡QõcÑÌm=ºS“Æ Ò—Lº‡>e¬¼£ ÕbŠr ‚GQÞ’‘v¹Tªž ƒíK‡\`ELc 4ÇŽ˜üj¹…ËbHu ›r$e õSŠÝ°ø­XÜŒ«ü/ó ç[Ì ‚2Oj‰€.c6HSɧÉn.fŽÉüOyâGv”/–ƒ ã>÷­^²A岨¯9ôæ¨évñYZ%²ñÝÛËw8>õ|8ˆ±VTŒùsÇ¿ÔÒŒTU¢e)¹;²Û1hàÿžj&¾ÓÇÐtÍD’Gµ\Äô§HÎü…Æz¶yÅ=„K³kõ¬ ”+œä* Ø äç5a00zÀ{sEÀŠBÏ)^›pyéœ×%â”Pî⻕˖ÎîØ®3ÄϺü¯ â³¤Û®*$©3Ÿ`sßò§¡ã?˜¦ž½sJ€ç¯JôÏ<é¼ ÃûrqßìíÏü kÐ+€ð9ι7<›f?øò×Hh(¢ŠQEQEw^lh–ƒv3p㱟‘½Æ#ôî)éŸò¹ÿ®†®xe±¢Z ØÍÃŒnÆ~F÷üÓ¸§¦ÈZçþºC;›oõbŠ-¿ÕŠ)ˆ°zVFª3 }+^³ïãßÇøqHñ4ÞñŸäk~ÚæÞ+HnmЬ*¬Žá@Úl ckÿû§‚7p÷:MëÝ[ g#ÖlÞ8ÖbbŠ7üÒÎñ¯ÑwnžÐmÎs7LnÏnÛþù>†ªÃ½²ê…ïíÙîå2œ°Q„ óÛÊcŸcèk†ÿ…­Ð9?ïïÿcGü, kþÉÿûVøk¢&íÃD]¹Î`AŒnÏoöþù>†•¾艻wö Ûœæã³ÿ 7ýò} 7þµÿ@äÿ¿¿ýð°5¯ú'ýýÿìhÍðÛELîþÅ]¹Î`AŒnÏþ€ß÷Éô47Ã}s¸è£ns˜ŒnÏþ€ß÷Éô4ßøX×ý“þþÿö4ÂÀÖ¿èŸ÷÷ÿ± 7Ã}7n:*íÎs cv-ÿ|ŸCCü6Ñ@`ÿØ  î㳟¦Æÿ¾O¡¦ÿÂÀÖ¿èŸ÷÷ÿ±£þµÿ@äÿ¿¿ý=¾èÈIc¢©\ç0 Æ7gòØß÷Éô47Ã}wn:(Ûœæã³ÿ 7ýò} 3þµÿ@äÿ¿¿ýð°5¯ú'ýýÿìhÍðÛE]Û¿±FÜç0'ÝŸý¿ï“èi[ᾌ›·mÎsqÙÿÐþù>†™ÿ Zÿ rßßþÆøX×ý“þþÿö4æøo£.íÇEsœÀœcvôÿ¾O¡¥o†ú2îÜtQ·;³qÙÿÐþù>†™ÿ Zÿ rßßþÆøX×ý“þþÿö4æøo£.íÇEsœÀœcv-ÿ|ŸCC|7ÑW;ŽŠ6ç98Æìþ[þù>†›ÿ Zÿ rßßþÆøX×ý“þþÿö4æøm¢®íߨ£ns˜ŒnÏ屿ï“èho†ú2nÜtUÛœæÆìþ[þù>†›ÿ Zÿ rßßþÆøX×ý“þþÿö4æøo¢®wmÎsqÙÿÐþù>††øo¢®íÇEsœÀœcvôÿ¾O¡¦ÿÂÀÖ¿èŸ÷÷ÿ±£þµÿ@äÿ¿¿ý9¾h«»wö(Ûœæã³ÿ 7ýò} ðÛEMÛ¿±FÜç0'ÝŸý¿ï“èi¿ð°5¯ú'ýýÿìhÿ…­Ð9?ïïÿc@o†Ú*îÝýŠ6ç98Æìÿè ÿ|ŸCC|6ÑWvïìQ·9Ì Æ7gÿ@oûäúoü, kþÉÿû?á`k_ôOûûÿØÐ›á¶Š¹ÝýŠ6ç98Æìþ[þù>†•¾èÉ»qÑWns˜c³ùloûäúgü, kþÉÿû?á`k_ôOûûÿØÐ›á¶Š»·mÎsqÙü¶7ýò} ðßE\î:(Ûœæã³ÿ 7ýò} 7þµÿ@äÿ¿¿ýð°5¯ú'ýýÿìhÍðÛE]Û¿±FÜç0'ÝŸËcß'ÐÐß ´UÝ»ûmÎsqÙÿÐþù>†›ÿ Zÿ rßßþÆøX×ý“þþÿö4æøm¢®íߨ£ns˜ŒnÏþ€ß÷Éô47Ã]7nþÅsœÀœcv-ÿ|ŸCMÿ…­Ð9?ïïÿcGü, kþÉÿûs|5ÑvïìA·9Ì Æ7gÿ@oûäúᮈ»·b¹Î`N1»?úß'ÐÓá`k_ôOûûÿØÑÿ Zÿ rßßþÆ€ß tEÝ»ûmÎsqÙÿÐþù>††øk¢.íߨƒns˜ŒnÏ屿ï“èi¿ð°5¯ú'ýýÿìhÿ…­Ð9?ïïÿc@o†º"nÝýŠ6ç98Æìÿè ÿ|ŸCC|5ÑvïìQ·9Ì Æ7gÿ@oûäúoü, kþÉÿû?á`k_ôOûûÿØÐ›á®ˆ»·b ¹Î`N1»?úß'ÐÒ7Ã]wn Ûœæã³ùloûäúOøX×ý“þþÿö4ÂÀÖ¿èŸ÷÷ÿ± 7Ã]7nþÄsœÀœcvôÿ¾O¡¡¾è‹ÃDsœÀœcvôÿ¾O¡¦ÿÂÀÖ¿èŸ÷÷ÿ±£þµÿ@äÿ¿¿ý+|5Ñvᢠ¹Î`N1»=¿Øoûäúᮈ»· mÎsqÙíþÃß'ÐÒÂÀÖ¿èŸ÷÷ÿ±£þµÿ@äÿ¿¿ý9¾艻wö Ûœæã³ÿ 7ýò} #|5Ñ;†ˆ6ç98Æìöÿa¿ï“èi?á`k_ôOûûÿØÑÿ Zÿ rßßþÆ€¾h‰»pÑÜç0'Ýžßì7ýò} ð×D]Û†ˆ6ç98Æìöÿa¿ï“èi?á`k_ôOûûÿØÑÿ Zÿ rßßþÆ€¾è‹»pÑÜç0'Ýžßì7ýò} ð×D]Û†ˆ6ç98Æìöí±¿ï“èi?á`k_ôOûûÿØÑÿ Zÿ rßßþÆ€¾hk»pÑÜç0'Ýžßì7ýò} ðÓC]Û†ˆ6ç98Æìöÿa¿ï“èi?á`k_ôOûûÿØÑÿ Zÿ rßßþÆ€¾h‰»pÑÜç0'ݞݶ7ýò} ðÓC]Û†ˆ6ç98Æìöí±¿ï“èi?á`k_ôOûûÿØÑÿ Zÿ rßßþÆ€¾h‰»pÑÜç0'Ýžßì7ýò} ðÓD]Û†ˆ6ç98Æìöÿa¿ï“èi?á`k_ôOûûÿØÑÿ Zÿ rßßþÆ€¾h‹»pÑÜç0'Ýžßì7ýò} ðÓC]Û†ˆ6ç98Æìöí±¿ï“èi?á`k_ôOûûÿØÑÿ Zÿ rßßþÆ€¾hk»pÑÜç0'Ýžßì7ýò} ðÓC]Û†ˆ6ç98Æìöÿa¿ï“èi?á`k_ôOûûÿØÑÿ Zÿ rßßþÆ€¾hk»pÑÜç0'ݞݶ7ýò} ðÓC]Û†ˆ6ç98Æìöÿa¿ï“èi?á`k_ôOûûÿØÑÿ Zÿ rßßþÆ€¾hk»pÑÜç0'Ýžßì7ýò} )øk¢FI?تW9ý cv-ÿ|ŸCMÿ…­Ð9?ïïÿcGü, kþÉÿû•¾iKòins˜—ŒnÏþ€ÿ÷Éô47ý%wn“GsœÄœcvôÿ¾O¡¨¿á`k_ôOûûÿØÑÿ Zÿ rßßþÆ€$o‡ZBîÜú8Ûœæã³ùloûäúáÖ»·>Ž6ç9…8Æìÿè ÿ|ŸCQÿÂÀÖ¿èŸ÷÷ÿ±£þµÿ@äÿ¿¿ýHß´„ݹôuÛœæÆìþ[þù>††øu¤.w>Ž6ç9…8Æìÿè ÿ|ŸCQÿÂÀÖ¿èŸ÷÷ÿ±£þµÿ@äÿ¿¿ýJßô”ݺMmÎsqÙÿÐþù>††øy¤®wI£¹ÎbN1»?–Æÿ¾O¡¨¿á`k_ôOûûÿØÑÿ Zÿ rßßþƋɛáÝ.6ç9‰xÆìþ[þù>†œ|¦¦ìÜiK·9Ìj1Ùü¶7ýò} Wÿ…­Ð9?ïïÿcGü, kþÉÿûVÙpø"Î0A½ÓT.r6ŒnÏ屿ï“èiÇÁ–ñ–'PÓ×nsÀÆìÿè ÿ|ŸCTá`k_ôOûûÿØÑÿ Zÿ rßßþÆŽUØ9ŸsKþ4Œ“ý«f¥sžqŒnÏ~Ûþù>†œ|.Pu‹U œ‚øÆ7g¿mÿ|ŸCYð°5¯ú'ýýÿìhÿ…­Ð9?ïïÿcG*ìϹ®|;,a×-×nsûÂ1ÙïÛcß'ÐÒŸΛ³¯@»sœÊF1»=ÿØoûäúÇÿ…­Ð9?ïïÿcGü, kþÉÿûvÍ9<,ï7W´ùsÍÓ³ßý‡ÿ¾O¡ªóxÎLù÷škmÎw¨8ÆìõôØß÷Éô5Sþµÿ@äÿ¿¿ýð°5¯ú'ýýÿìir®Ãæ}Ë à9wo¸Ò†Üç1¯ÝŸý¿ï“èiáþš»·O¤¹Îc^1»?–Æÿ¾O¡¨?á`k_ôOûûÿØÑÿ Zÿ rßßþÆŽUØ9Ÿrvø¦¦íÓé#ns˜×ŒnÏþ€ß÷Éô4‡údlXϤ«&N|µq»?–Æÿ¾O¡¨?á`k_ôOûûÿØÑÿ Zÿ rßßþÆ‹Ùu¼l›·_éë·9ÈÝŸý¿ï“èi²øÍ^é¤.s½GÝž¾›þù>†ªÂÀÖ¿èŸ÷÷ÿ±£þµÿ@äÿ¿¿ýË£ÁV°†ÿNŒ.rÝŸýÿï“èiÍàè;µ+·9Î8Æìÿèÿ|ŸCT?á`k_ôOûûÿØÑÿ Zÿ rßßþÆ‚åæðmº‚Q°sœãŒnÏ屿ï“èiÇÁð¡$êV+´’sŒnÏ屿ï“èk?þµÿ@äÿ¿¿ýð°5¯ú'ýýÿìiX.h7ƒá·êV#ÝœqÙÏÓcß'ÐÔxO‘™§¹ÒÙ†wE$cvsŸ÷þù>†«ÂÀÖ¿èŸ÷÷ÿ±£þµÿ@äÿ¿¿ý]‡vJß4¤Ýº] c;³ñÙÏÓcß'ÐÒŸ‡ºRnÝ.¸Îìģݜÿß ÿ|ŸCPÿÂÀÖ¿èŸ÷÷ÿ±£þµÿ@äÿ¿¿ý=Iеlläi!»Ó pfDU8È$¸ß÷Éô« áE]Ûµk1·9ËtÆì÷ÿa¿ï“èk7þµÿ@äÿ¿¿ýð°5¯ú'ýýÿìh¤ÞUÝ»V³sœ·LnÏöþù>††ð¢®íÚµ˜Ûœåºcv{ÿ°ß÷Éô5›ÿ Zÿ rßßþÆøX×ý“þþÿö4¤ÞUÝ»V³sœ·LnÏöþù>††ð¢®íÚµ˜Ûœåºcv{ÿ°ß÷Éô5›ÿ Zÿ rßßþÆøX×ý“þþÿö4¤ÞUÝ»V³sœ·LnÏöþù>††ð¢®íÚµ˜Ûœåºcv{ÿ°ß÷Éô5›ÿ Zÿ rßßþÆ”xÿZ'þAÉÿ?ûì´«eÓ­-ì¾Õ®³¹>[ÿ²ãnÕ»7Ý™ÿ «?úàŸú¨[”r~Ó4;ÍOÖµm¤ÖÙÔÝ]Ê@™.·|Ñnê|¨N˜cÖõO8êÚ (ÖÆ™ý•åG·Ëóü¬ç÷íý÷ÞÆÞØæº¶Ð´‡ÔƦÚU‹j¥Ñ·C(ÿã?­?û#LþÔþÓþδþÐÛ·í^Bù¸Æ1¿Æ=ê–âg¦]^?Øô‹mE´Ô»Ôu‰^æ4Frc¼|F»Ã.Nön„â3Z½ ø†ö÷PÑbº»‰âžÛQWuUU¸x."Ž9¦äÞØcè1Ò\èÚU홳ºÓ,çµ24¦ `VBìÅ‹m#%‰'®I=è»Ñ´­BÎ+;Ý6ÎæÖ,ypMº&Œ ãì5]__Ô4Ûkmqí­î®ï5¼1;:Ax‘C´²²Œ+c89rpG}UmôÛC¶²¶„Äc1Ä«°;p08ÜÀê@&­PEPEPEPEP=Wì_ÙŸÚ[~Ãä¿Ú7g0wtç§§5•àÏíìø›y˜ó_ì~úÿ³ç÷~wý4Ç_Ã<æº("ßîËÿ]åÿÑST6ÿv_úï/þŒjš aEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPSéŸò ³ÿ® ÿ Š‚§Ó?ägÿ\ÿAÖàQ´ñW‡õLZv³c0ÚLVS¬î`»Š¡$(,2ØÀÎIš±§k6zšþéöHe¸‰b€íäJb‘€Ï*Ú\àœW £vÓá·†g—Sµ6ŽšBEµ«Ã*«On¸i<Ö RŒç°â¢Ó-ôôñVyw5°k­jÛd…oí%1Ç€ÁX·ÏòwíhÅõ +Ë×SÕ›Æ ú…µµèÕ¼´‚]Zewµó0ÙˆŠ0h¹ß¸àœ– uµy#¾Ôî/o®'}BþY®£Ž5º‘UV<íà ÁÆ@àqG@êuQEQEQEQEQE2i¢¶…æžTŠ(Ô³»°UP:’OAO#"«ß¼qé×/5»Üı1x?1¤åB÷'¦+Áºf£¥h^F¡&7Lò[Úîßö8IÊC¿ø¶Ž3ø  Vÿv_úï/þŒjš¡·û²ÿ×yôcTÕ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ŸLÿUŸýpOýT>™ÿ «?úàŸú¦·Õ£x›M×ö<_4o™%›O¸†7CŒyU³F#ž•±T ¢Š(¢Š¯a{o©éö×ö’y–×1,оÒ7#Tàò2ë@(¢Š(¢Š(¢Š(¢Š(¨n³šêáŠÃ $`¥° dœM: ⹂9à•%†E’#eYO ‚:ŠÌ·û²ÿ×yôcTÕ ¿Ý—þ»Ëÿ£¦¨QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQETúgü‚¬ÿë‚è" ªCÄZV‘ac íÖÉZÝ"Fò09!AÇãU¹;$)4•Ù‡áí ]´ømoZ¾¥ý ÚÃÌpƶӘFÐ6Æ® ·3ùÉæ±®´¸¥ÑõÄðXÛ¿‡nโKG‰®.YWÊH̲%Æs¸rk²ÿ„ßÃÿóù7þMÿÄQÿ ¿‡ÿçòoü›ÿˆ­U*‰ß•ýÆn­?æ_yoàMø¿RYtv±:m C$9I%ó.7±'† ™c–óUô› /ê §Í«(AªÜ27œÁ¬å,&cÎ<М7C´ WAÿ ¿‡ÿçòoü›ÿˆ£þÿÏäßø 7ÿOÙTþW÷´§üËï8}O¸¸ñ&eÐc¶Žy&‡T‹û"u>[A/É=ÌŽVà ÎÒ Ç#8=‡ÃË+m;ÁZ}œ:kX\A qÞÆÖ†÷ ‡~ToÉ|du8«ð›øþ&ÿÀI¿øŠ?á7ðÿüþMÿ€“ñ½Oåp{Z}×Þt4W=ÿ ¿‡ÿçòoü›ÿˆ£þÿÏäßø 7ÿG±©ü¯îkOù—Þt4W=ÿ ¿‡ÿçòoü›ÿˆ£þÿÏäßø 7ÿG±©ü¯îkOù—Þt4W=ÿ ¿‡ÿçòoü›ÿˆ£þÿÏäßø 7ÿG±©ü¯îkOù—Þt4W=ÿ ¿‡ÿçòoü›ÿˆ£þÿÏäßø 7ÿG±©ü¯îkOù—ÞmÝÉ46sKonn&D-!ÂùŽ'ŸZÈðžƒ.¤Éó‰&žâK—Ž>!œäÇ=võäñœTð›øþ&ÿÀI¿øŠ–ßÅúÕÂAë $!WÌ‚Džƒ, PéT_eýÃö°}Q-¿Ý—þ»Ëÿ£¦ªö‘ÞÉl²¤6ûf&Q™˜–ÇÝ÷©ü‹ÿùãmÿÛÿˆ¬ ¢“È¿ÿž6ß÷ý¿øŠ<‹ÿùãmÿÛÿˆ¦ÑIä_ÿÏoûþßüEEÿüñ¶ÿ¿íÿÄPÑIä_ÿÏoûþßüEEÿüñ¶ÿ¿íÿÄPÑIä_ÿÏoûþßüEEÿüñ¶ÿ¿íÿÄPÑIä_ÿÏoûþßüEEÿüñ¶ÿ¿íÿÄPÑIä_ÿÏoûþßüEEÿüñ¶ÿ¿íÿÄPÑIä_ÿÏoûþßüEEÿüñ¶ÿ¿íÿÄPÑIä_ÿÏoûþßüEEÿüñ¶ÿ¿íÿÄPÑIä_ÿÏoûþßüEG7ÚíÐI,0lÞªvÌIå€é´zÒZ(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ òí]±¬ÜsüèˆëÔkÊ5ÆÆ·qÿ\àÿÑ×~]üo—ùXÿá|Ë7zk[Nöés ÍÂ;#ÃÈXmÎãʃÐÔ"Æù¦xVÎàËÐDÛ”rF8«ÒëáõÛÉÖHVnL2Çn¨ä²8L°PÜ–~¦¡Ó5UÓ´ßgY4<þn yg9=G~ÝýE)¥ªþ¿Íqƒz2œ\\ïò –]ƒ-å¡m£ß*MF$´Ôîí£,Rž5-Ô€ÄsV ü‹0{Õ´¶=ÆñaÃc$ƒ€½Ö¨j·QÜë³ÂÛ¢’âGFÆ2 5qrrÔ™$£ ÝôoªÛèßZ–wѾ«o£}YßFú­¾ôg}ê¶ú7ÐôoªÛèß@âýì©õMÄ Îp¹ö¦jQKkÌ3)IQAúpúõOœžq+pß³Ç|g½?YÔŸPWb¡#Ž*$í@8ïõ¨w¿‘jÖó=NY¿³¬È’0žL)Œ“÷G|ÿJ· ”ãËt_]È[?¨¨4ÏùYÿ×ÿÐEZ¯š[B4‰<¼PøûÅr?,ÿZ#ýã«õUÛýM:Š`GÌ÷’FÃ2¿ÔÐVo3"HÂgî˜É?ž¥IE2A)Ç–è¾»¶QJDž^¨|}â¹–­:Šlb@¿¼ucžª»©¦Æ³ýä‘°ÇEŒ¯õ5%Y¼Ì‰# Ÿºc$þyþ”² N<·EõÜ…³úŠ}Ò$òðCãïÈü³ýhŒH÷ެsÕWoõ4ê(8Ö`ß¼’6豕þ¦‚³y™F?tÆIüóý*J(’ N<·EõÜ…³úŠR$òðCãïÈü³ýiÔPcýã«õUÛýMQÔaiûÉ#aæÅÂÆWþZ/¹­ §ªÇ—ýµ‹ÿF-'°"*(¢¤aEPEPEPEPEPEPEPEPEPEPEPEPEP\n©à›ÝRH5 íÇŸo˜“³."®Aö»*ŸLÿUŸýpOýV´ªÊœ¹¢gRœjG–G›ÿ»׿ç¶ÿŸÿˆ£þÞ½ÿ=´ïûüÿüEvð“Žÿ„«ìŸó þÒû7™ÿL¼Í›±øgø©§ñ…‹^›»ÀµµX¡µ‘¤bIaWq‘°Ûò£¡Æ2¤×W׫w9þ¥G±Ã»׿ç¶ÿŸÿˆ£þÞ½ÿ=´ïûüÿüEuçÆV']Ó4Ø ½•/íå™f[9ÈB’${XlùyvÜX›FìnpøŸG·ögÚÏÚ|ß'>Kù~f3åù˜Ù¿û>Ô}z·pú•Ç ÿ ï^ÿžÚwýþþ"øWz÷üöÓ¿ïóÿñÛ\x¿CµÔEŒ×n&7 k¹måhüç ,~`]›²ÃŒäu8ÒÇâíV» u![7xç“ìÒìYO,¦ý»KîÀ c@"¯VîR£Øâ?á]ëßóÛNÿ¿ÏÿÄQÿ ï^ÿžÚwýþþ"»cã tû›énä‚Y#Žqqm,O‘‚¦äu $`ãyàÔ?ðœèºîüèÆçƒû>ãÎUþùfàŸíco½^­Ü>§G±Çÿ»׿ç¶ÿŸÿˆ£þÞ½ÿ=´ïûüÿüEzu¼ñ][Eqo"Ë ¨9ä2‘Aô"¤£ëÕ»‡Ôèö<·þÞ½ÿ=´ïûüÿüEð®õïùí§ßçÿâ+Ô¨£ëÕ»‡Ô¨ö<·þÞ½ÿ=´ïûüÿüEð®õïùí§ßçÿâ+Ô¨£ëÕ»‡Ô¨ö<·þÞ½ÿ=´ïûüÿüEIoðãU’tKË›4·'÷†)›opP?Zô‹¹'ŠÎi- ΈZ8KìÞÀp»»gÖªèÚÕ¦»aö«FaµÌSC Äȼ28ìÀÿˆâ“ÆÖj×ÁÒObm3þAVõÁ?ôVª®™ÿ «?úàŸú«Uȶ:‚¹ê7zh©õõœwZ†y,-EÄżΡŽLüȹœz šéë/ZÑF°,™oî¬g³¸ûD3ÚˆËòÞ2‘HÛ#vô wEñÚÿnfæëP·±H7ÔáKƒ>íûÃ,xŒ§yAŸœ Äb›Ä5žÂþH-lo®ìæ´ËÓu%¸ŠAq0‰q&Õû*@è9ÁÍj¿ƒ­n-o£¾Ô/ï./"K¹š1"ˆ\¼AB"  ÄŸ»ÎNsIƒmüë‰îµ=Fò{‡³w–vŒôiŒÑ€@,p@C“Lø]ÂU÷mù®(ÙR8<æ¬êž²Õ¥¾–y'W¼†Þ(Àlò$yceÈ<îrNrrí#Ãë¥jwï¨ß_]]Å2ItÉÂÆ\®Ðˆ¡Ö7AŽòHÅQ@Q@Q@Q@SÕ?ãËþÚÅÿ£®U=Sþ<¿í¬_ú1i=QE# (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ŸLÿUŸýpOýT>™ÿ «?úàŸú¦·Šÿ…a¤½þÈþÄÐÿ¶ÿ²¾Íöϲ'ü|y[|Íû7}þwc=úÖž¡á«¹ÿµÝmì®Ö¦—¤·ÀUVÚ(r%@Z7Ê7 ”ã¿eB9; \±¹ÐîäžÞö{X®m®|ë—ÊÅ4±¸*å ‘‘b ómÝÔ‘L>ÕüÏìÐö?ÙÚ¿ÚhÞþúÿ´y{6íÿYÆíßw¹®¾Š:Ü:Xó=Uî¬õ(¼5oq¦Î$×`¾yö½t·/û½¸Ú¹cænÆn3]0еH<)}§ÙÝÇô×·7)*;(Ù%ÓË´°RQ¶–•'#8ÓQG@êpž Õ„÷óNð ¹—Ltõ‹Â¢ÚèË 2J3Êžg°åW›,^*¿Õ£0ÜY[[¢‚wçfÏÆ%\sØþ:”P_†ôé´ i]Ã#Oge ¼%K"$dŒAZ”Q@Q@Q@ÝÇ<¶sGm8‚wB±ÌS~Æ#†Ûß•WFÑm4+²Ú+ÎešidšFåÏv'ü¡EUÓ?ägÿ\ÿAjªéŸò ³ÿ® ÿ ŠµBØŠ+ÅÚΟé¾sZæ('ò%–-­•I?„î(zŒ€FFhn£šxm<ò¤H]P3°PY˜*Ž{– Ü+Œ¶Õ—Hµ¸ŽÚ=V´»°Š[-^spbŽ{ô}휂øùÈ:AouKÆkí6Ý-ɵ“F¹€É‘™$¿+‡?ÝýÒtäõã­ÅÄ6–ò\\Í0Æ¥žI*¨I'€(‚xn­â¸·•&‚T‘°eu# ‚8 ŽõÀx–÷]žÎãF¹¸Ó~×o}¥Mö„´s‘ÍvTÆdÈ!ãÉùˆeãå'#Hkúݬž!º¼}=ôý5a·q-É‘ÌÛs!üÏÆwqÇQ¸€v5ž¸Kv•îŒéa¹•H @ê@, žÛ‡­q6>4Ô£ƒP¹Ôl¤šÞÛM–ü¼z]Õ¢ÆÑ€L[¦I 1÷NTqSÙkþý(ëéòÒ/?±Æé´™mw)ÜÍ»a†3Ï€;:(¢€ (¢€ (¢€ (¢€ §ªÇ—ýµ‹ÿF-axÆþóJ:uÞ—+Ë©Ä1i¾[Õb7‚?„ªÛú.x8­ÍO&Äd`ù±qÿm“ØQR0¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(©ôÏùYÿ×ÿÐEASéŸò ³ÿ® ÿ Škp9/Ç]éÚh:5ýî¡>“k©N–1§–‹0n…Üt(ß.I#Ï8¿¦øÂÓTŸOØêZê ýŠòhÕcœì/€7o*±”Á4ÿxgþÿ'ý/Ïòô«=7ý^ÜýŸÍùúŸ½æô펧<^û&™á{?µïþÂÙóùxóöÛILü¿ë7wéŽùª$’ÛÄ©6£mi>—¨Ù­Ùeµžæ4T™‚—Úbêv«:©ùOz­iã;[Ëý:Ý4ÝEmõ)^;;×<™¶Æòn>à ¡ÆTg €FHÊÒ~3[Ó5&»±‘ì%wó“N sr'÷Óï%ÏÎ@‘Ó¡4í7R‹Äš—·riš%Ä¥V]9¡Ä –(ó1b²ŸB쌖æ5‡Ší5 Ëh’Îö+{ÂËgy*(Šä¨,va‹ ª³ ʹ‘šÞ®7@🇵;yíbÒD»„,šTiu‚¥pÓç-€z…÷''=•QEQEQEQECwöŸ±Íö3¹Ø|¯8›±ÆìsŒúVw‡uø¼Aa,«Asm;ÚÝÀÇ>TÈpÊ£B:ƒÛ¥hÝÀn¬æ·Kš…<Ø[k¦F2§±÷¨ôí:ÓJ°†ÆÆ†Þ!„EýI=I'’O$œÐ¦È*Ïþ¸'þ‚*ÕQµž;]‰[lQZ«¹ôrk95Ü¢Ím é«€È.µGŽ\cø•`pÑ `fýSÔ´»=ZÝ`¼ã$£`Œ«) §ŒƒÜÖ>™â[¹µ„Ó5]>ÞÖYwˆ$µºiãvQ’¤´hAÆHàä)ô®’€1£ð®Ý¡µyc»Ûç¼óÉ,’mås#±”ò9àò1PÂáö·¼‚[9gKß'í&{©¥i|§/æf$á‰ïÈàä Vàž¸{u• èŠïa¹U‰ Hê*ÀûO¥I@öþÒ-­¤-äu’x®渒YH™^2]˜± ʸãŒcÕè´ëH^õÒÍìžmÀbXHÛ>Aã8÷4ä½·“PšÁdÍÌ1G4‰´ðŽ\)ÏNLoù{б@6Ò´Öso¤ÒÊîèKâKè­¤þRéqñ.Ð6â0&ÈÇ>OûU~]XøKÃ÷·¥´÷šd2ϨêQÙ ]6œ¶yÆ~aƒ×#»¢¹ÄZ¦µâ—ò ·:Ú]•ìEç"TyÇvÁ$” T¾PA%ˆ<­êþð}î•6w¶PÛÛ\-Ö÷.¶åÁxö€ªËCÓ g‡a\ïh¢ŠC (¢€ (¢€ (¢€ (¢€ *¸æšÎh­î ¼Î…c˜ o-±Ã`ðqéY×¥×ô™'žÐ\IlòGÌ3²"'ªÞœŽqšXW‡Wë&C¤È_(â…ÖAuøÈç=«[N´‹E`0 ÷ùEséà[Hî¯$Kˤ†iD‘@“HتU~n›•›Œ»â…°3IÓç±ñ&œ×sÜkÏÉ>\fÑÔ/#ÕIî9±ãË?·Éá»oìÛK~ªßè·í¶1ip~c±úc#å<Ó¨½máH­u ¸îåck+>$Ë–7Ldœ¿ŸÃÞ®êú<š«Ú¼z¥Õ‹Û;:5¼P9ÜWn{à…,2¸á˜Ð!u{«hñÝiVXhÆ$Ò„6öH²Á\_K…r‰»r…ÈÀÁÎ9äÚ¿Õµ} µ«ÕZìà Œ±^]ChÄòDìÁTªßÈõÉ5ÔÛiG[Æþиù7Ý]C™&Ç/v"¯ÈÄ•À<õÉ«Ogk#Ìïm <ñˆ¥f@Lˆ7a[Ô ÍÁãæ>¦€9_G4<ñêÏ©ž×¬ÊÆàÛ!• ©ÝŒäô U›}:ÆÒêæêÚÊÞ‹¢ ıĪò‘œ e±“×ÔÒfŠ( Š( ©êŸñåÿmbÿÑ‹W*ެámpÅšhöª©bpÁÙIü)= ¢¡ûBÿÏ+Ÿü“ÿ‰£í ÿ<®ðOþ&¤dÔT?h_ùåsÿ€òñ4}¡ç•ÏþÉÿÄÐÔT?h_ùåsÿ€òñ4}¡ç•ÏþÉÿÄÐÔT?h_ùåsÿ€òñ4}¡ç•ÏþÉÿÄÐÔT?h_ùåsÿ€òñ4}¡ç•ÏþÉÿÄÐÔT?h_ùåsÿ€òñ4}¡ç•ÏþÉÿÄÐÔT?h_ùåsÿ€òñ4}¡ç•ÏþÉÿÄÐÔT?h_ùåsÿ€òñ4w!wŽáUFI6î•OEPEPEPEPEPEPSéŸò ³ÿ® ÿ Š‚§Ó?ägÿ\ÿAÖàVÓ4 ;K³Ó`ŠÝ%“Nµ[K{™‘ZeT.7`c ãúVd~ µ¶ŽÅlµ=JÐÚØE§…ãÝ41çhbÈpynSiçéŽšŠ¡Z_…­ôyì$²½¼E´±†Á£&2·DGæe3]ŽT®Iç#Š–ÛÖv–: ¤rNcÑ6ý˜³ ¾Ø¿Ž~W'ŒsŽÜVÅQEQEQEQEQE ݬ7¶sZÜ)hfCŠ®TŒ‘ȧAVÐG$PÆ¡4\*¨àARQ@9âk°×s¿ÞÃgo–Œ2|”së’y­o†z¥Í´sË©é6ŽêÁýšÓlÈé¿Í\ÿß"¹ÿ«Hú¬H2ïi¨÷6É^m®¤éÉ hÜ § ½ µ%N•548iSŒêMË]O6¾ÓGÔa·¹{Ø'w&‚×ÉÚê7`©wê9ÏjYÀc2 HÊ)·–0 ÎùU¯XA¥¥º,ÆYnõg¼9þ Öì€NGÈyã©ô§iOçÍ%üý&ÄÏüô§æFßø®¬-IJ—4º¸˜(ÕåR °ˆ¾Ád…¶îÛå ãÏN˜çéLû5¯üûÃÿ| êf–ÈÈ—Lê!‘ÖÃp8;°Íÿ~‚ø¦E5åÔ,`ÛQ†8‘b $ˆ“»÷—îòsש­}ªÝ£?dïkœÏÙ­çÞûàT˧@Ö’\ˆ Ù‰rÁˆíþÉý+I5úMÅÏØìÄ‘Oq!pªÊäŒcæûƒïf´&û-ù±²ŠY[ìRù^Pp BÌÅPäIã})ÊvéýiþbŒ/×ú×üŽ_ìÖ¿óïýð)ÂÎZFQHRÞXÀ'8üäk¡†Õ[Q¼ò"tkxâ¶ ®Wç „íÀl‚{qŠ’üIokªZÙÀŒ[Ìê-ЕV…‹·} :—<y=ª½’þ´ÿ0ön×læ>Íkÿ>ðÿß³Zÿϼ?÷À¦ù”y•µ‘Øï³Zÿϼ?÷À£ìÖ¿óïýð)¾eeAv;ìÖ¿óïýð(û5¯üûÃÿ| o™G™E]Žû5¯üûÃÿ| >Íkÿ>ðÿß›æQæQdd‚Î…Ť{·–0§èkÁ“¼>$‚Ö,ˆ$”ļʸ€ágépÚ‹‰n]ZܦƶÏ3¶;»~5kÁM»ÆV¿õÆ_ä+—­)+Xm*ÅÜõXÝŸ;¡xñýâ§?‘4‚G2m0H?|•ÇóÏéRQ^ì‘É#£a`’AŽªWú‘N‘Ù+HsÑHþ¤S¨ ‡cãÇÜ$gùãõ¤ÙóºÞ*sùO¢€#9“i‚@¹ûä®?žJ$‘Ѱ°I ÇU+ýH©( Èì‹•¤9è¤R(Æ=Æ6 ¸HÏóÇëN¢€³çt/?¼Tçò&HæM¦ çï’¸þyý*J(9$tl,H1ÕJÿR)Ò;"åciz)ÔŠuÐìcÜc`Øû„Œÿ<~µRýÙô«ÝмxþñSŸ”úWj®§ÿ «Ïúàÿú ¤À‚Š(©QEQEQEQEQETúgü‚¬ÿë‚è" ©ôÏùYÿ×ÿÐE5¸iáÍ_Vo i~šúî]OVµ¶žÚúI¥MùßyçtdJíºÞ´l|M©ÁáO,7Ñ=ܺ5µÌ¾e…Ö¡4¬È2\CÊGß%²wqÇ=å…•¾™§ÛXZGåÛ[D°Â›‰ÚŠQ“ÉÀ­e?ƒ´7†Ò/²Ëv¶ÉiÅu,{¡N7ÚÃÌQÏž§ÔÕÆðÞ««kž)7âòô»O¼M ³'›çœ+ù›Cn^[gÌ¡FÝÆ=/YÖõ7š†¤šA“W‘^ŽÕɵ-g<›Ã9' 8 ι9Èém<7¥ØÏc5¤ÂöVÉiˉùJUu݉Üq¼‘Ï4õÐ4Ô°Ó¬’H4Õ hW "h†“±Ødžùê¡“áÿ\ëÚ¬ö+o 'O/›vá$›™“ƒÊe–>›qÛzŠ¡§[=›Áj‘5”F d®ØÈ^:ŽÁÏ ¢¯ÐEPEPEPEP{ôŽM:å&¸{hš&:Iå´c°nÄuÍcx7SÔu] ÏÔ#ÎÙž;{­»>Ù8I¶áÎ?Á½41\ÂðÏKŠUÑÔ2°=A¨§@Iâ SþÐ[¸l®. ¹‚V‚&“‰Tƒ€q÷ZËÓ´›Í4\ðÄÒ™æó˜Í§ÈH;Up0.~¤×¨ÁehVLÚÂq4€f1Ð;Rý‚Ïþ} ÿ¿bºV1ò(J)¤s<*çsŒš¹å÷¶z¥ìPFÙäÿÙZ·ý5ü“ÿ‰£û+Vÿ F£ÿ€rñ5ë`³ÿŸH?ïØ£ìóéýûiOùPgû<Ÿû+Vÿ F£ÿ€rñ4ejßôÔðOþ&½cìóéýû}‚Ïþ} ÿ¿bí)ÿ*ìøwg“ÿejßôÔðOþ&ì­[þþÉÿÄ׬}‚Ïþ} ÿ¿b°YÿϤ÷ìQý¥?åAýŸìòì­[þþÉÿÄÑý•«Ð#QÿÀ9?øšõ°YÿϤ÷ìQö ?ùôƒþýŠ?´§ü¨?³áÝžOý•«Ð#QÿÀ9?øšé<£êþ ‚úêÒkx@x@™ 31Rxœ ¿­vŸ`³ÿŸH?ïØ¤Kh!¿³h ÊÃ*€yoYÕÇN¤Z—K rROb v;[ígNÓ/ÐKg$É }ÉJÔ~ððx¬hþ Ñ|7u¨/„ôb!·—§Å»ß-lxÉ%³·]~(ZuÓ­§ó£Fü£±Ø®H(q‘Xæêæâ3Ö‘s,Fåuú‚Ø#Ú¹N£oÁždš•ƒ11Xß40ƒücŽM£Ø zjšgW¼×¯ìí4»²±ºKi®&¿tæ(åfXÄD @¸Éª´ý¶ò‚²>  /§ú<5“kmáÿøLu[½CE’çPŸRínŸB¸sÈ¡Œ~øÃµ@xÙƒÛ‚=i ÖÆº4VÖb{縸šÆÜÚØNÛâJCRU¸$íã'‘›·¾)ѬÙæ¼.·1yñ˜!y¿uÇïÀv§#æ8õŸáO ÝèFßíR@þ^‹a§Ÿ)‰ýävóÈ)óø9©éž×t+M7ìMžá4{m6è\HêˆÐ†ÄˆB’Ã.ùR8^E]Ó¼AsÃ}/Ä‹ö©NŸmuvÙ ò²¡–LŽfÀ8ÇnãÅ66š¶§epv&Ÿ`·ÒKœ‚¤¾áU §þ*oé/¦øGKѯ|©^ÚÂ+Y¶ä£•Œ+c d¢¹k^¤v+=ìR2Ý»bX™mD:rÌ- Ýž>i1ž2_×ç÷ÐXx»N¹–ÚÒéš×P—bKÇh✨c´!qœmÎ}©’xçñK*I~è±NöòLÖÒˆ’Tb¥M»d<ñŒäf‘ðæ¯æf‡±þÈþÕþÓûF÷óÿ×ý£ËÙ·oúÎ7nû¼mÍOÿÝßü#§Nó-üÓ­h“·ËþÐûN:}íœzgŒãšb"Ö¼cfš×¶7r@Ö—¶Iuö‹g‰ãŠKˆÕ‰I¬…ÀlzàäV´'Ò.,®nÖåãŽÙ•fIà’)¶6ƒ¨|¶FÞ>lñšÉñ†µ-NóQ¹±šÑxôÑŸ¸€Ö×O3nt!€<œçh›Dñäz½ë\ZXêw±[ÁZÌì‹NÌAª°gówùFÉR]CÇZež˜o!ŠòvKË{Y-Íœé,~lCÌ{ÀÁ$|¸bƒ’+¤‚e¹·ŠtD¢HÙ3ʰO±ŽõÁ[ø3ZCª\3[,³>KxeÔ®.Àkk†˜«K*–²Ê02~^íÞÀfkxšâ4Žr€È‘¹uVÇ 1‘žøô†IUu?ù^×ÿÐMZªºŸü‚¯?ëƒÿè&†QE@Š( Š( Š( Š( Š( §Ó?ägÿ\ÿA>Òn´(-î"I –ÙRHäPÊêWx Ž1Mnê+ËÆ—£èš®³.›¦ÛÙ_m¥­›éú|à±…Ìp³á#ÏÎÄ·°Æ[5vÓ\ñ¡¢ÝAo=ÂÝZjÿcs#Z-Ü‘y !UÁ0A|zmSÀ=(Gv÷¶ñêØ4˜¹š)&6žQ 9éÁ‘??cV+Ëõ]Ás êv­%ÌŸ`Ô`šêî%Ô-Ͳ<’¤|0B¤œg!rF¦½¨êúO—8ÖneÓ-lVyî­Õä'-™e€ÌD+Ὠ¼¢Š(¢Š(¢Š(¢Š(¢Š(¢©ê¿bþȼþÒÛö%þÑ»8Ùƒ»§==9¬¯kÿ`ÿÄÛÌÇšÿcóÿ×ýŸ?»ó¿é¦:þç4jßîËÿ]åÿÑST6ÿv_úï/þŒjš aEPEPEPEPEPEPEPEPQŸøý²ÿ®§ÿE½IQŸøý²ÿ®§ÿE½jÑL’¦Ç›>:oPqùÔcµÿŸX?ïØÿ ±ÑP}Ž×þ}`ÿ¿cü(û¯üúÁÿ~ÇøPôTcµÿŸX?ïØÿ >Çkÿ>°ß±þ=ØíçÖûö?±ÚÿϬ÷ì…OEAö;_ùõƒþýð£ìv¿óëýûá@ÑP}Ž×þ}`ÿ¿cü(û¯üúÁÿ~ÇøPôTcµÿŸX?ïØÿ >Çkÿ>°ß±þ=UÔÿäyÿ\ÿA4ÿ±ÚÿϬ÷ì…3SÿUçýpýÒ (¢¤aEPEPEPEPEPSéŸò ³ÿ® ÿ Š‚ŸgŸö);Ûý™<¶`‚W$QôÒ¯ME¼^Dm;"Uòш%W€J®@ãå•Yü;¢H-CèÚ{ Oø÷ j‡Éç?'/>•¥Tu gKÒLCRԬ쌧ý¦uyöÜFhõ€†‚<‚)h¢Š(¢Š(¢Š(¢Š(¢™4Ñ[BóO*EjYÝØ*¨I' §ƒ‘‘@ÿv_úï/þŒjš¡·û²ÿ×yôcTÕ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ Í×.$´Ód¹…¶Ë SHèÂ5¥Y%ÿ×ý{Üè‰*£ñ!KfyÕž•.·«Ã§Ú‹as2¼¯qr…öªã,GŽYxÈëÖµõ‡Wº}›ÜI®é/:; þ>}gxvôYø¶Þf`ªösÄ2q–-õŸʺÍzñ.…u¤É;B.Ôdì23ù×£‹­8Uq‹²80´¡*jRWgm¸‚æÒÝn-¦0ɶ1´‘‚{AükA4Y$¶7)¥³@o5mò¸NqŽ0j ûˆ¦ñ³,8Ø÷JA þæ:Ó»šÑt­4Mï1µ}Ž“QûÙ1•ÚIçÜW}97N.Ú³Š¤Rœ—Df=¼r25¼© íUaøÁü)¿fµÿŸxï]©ðÿߺ'VšÝ¥{xšÅí ­tPn3”'ïõÏ™òíÏNÝéâ!~–†ÊÑ¡x™ˆeœ[y™-רìFhöžCö~f%¾̦4‚Do'̃¢©cÛЇìÖ¿óïýð+¤Ò¤ûSÙ\}žßζDB¢Æ®@ `æ¢6òKq§­Õ´÷®Òî¡ ” ƒ“¸Æp3š=¢NÍZÿ{7Ëtÿ­?ÌÂK8$b©i ac€2Oà4ß³Zÿϼ?÷À®¼FÖ³ÚHbæxîâÛ-”q" Pyc#$¶;œt<òS¼‚âA2l”9Þ›6m9ämíôª„”ú8¸õök_ù÷‡þø© ÊmuA¾#Žâ’TQ€ÀDì2>ª+'Ì«Ú+nÖíÇûÿè‰*q^Ê^…aÛö±õ=ZŠ(¯œ=ࢊ(¢Š(¢Š(¢Š(¢Š(©,¡ŽãD·†dY"’ÙQцC¸ ŠŽ§Ó?ägÿ\ÿAÐm¹šñí|p]͌ۮä~|Û8ö´9=Ëæ5o]“zVTºœ-©éQëzõ핃ϭ‰o^sê¬jò)B®Bò1ÂŽ¨Õ94ØeÖmµFgóííæ·Em+#FÌOÎb\sÜþ~äØóëëûŸøFôk«ÝgÊ€=ÐD¼¿–ÀÞD$ÄgAþXS´ýýäö¦jz›Ekz5=¯4—]‡Í3乕ċ¸—ûÙÞ¿!Åz…˜ÌŸ F"ðŽ‹‚kp–(†s™#Äkò±ÀˇÍkQE6îî$QE!…Q@Q@Q@ïÞ8ôë—šÝîbX˜¼ ˜Ò r¡{“ÓàÝ3QÒ´/#P“¦y-íwoû$å!ßü[GüWCEd[ýÙ뼿ú1ªj†ßîËÿ]åÿÑST (¢Š(¢Š(¬__jÒé6ºl¶±M}xmÚ[˜UEË&B«¡'1×¹¦}“ÅŸôÑðQ/ÿ$ÓvŠÂû'‹?è5¢ÿà¢_þI£ìž,ÿ Ö‹ÿ‚‰ù&€7h¬/²x³þƒZ/þ %ÿäš>ÉâÏú h¿ø(—ÿ’hvŠÂû'‹?è5¢ÿà¢_þI£ìž,ÿ Ö‹ÿ‚‰ù&€7h¬/²x³þƒZ/þ %ÿäš>ÉâÏú h¿ø(—ÿ’hvŠÂû'‹?è5¢ÿà¢_þI£ìž,ÿ Ö‹ÿ‚‰ù&€7k?Xµ{ë&³ˆ$é,JOL´2üê—Ù†µ‚j‚<$ÿ³e®¯ûÄôð÷þ $ÿäš?±¼AÿAà’OþI®Ùãyõ”9!„äødÑÃM¦j³^\\ÿcê Ó¸vU³—h!xãÑEZÛ®ýŸÈþÅŸfÍ™þȱŒ}ï/9÷Îk¯þÆñý<=ÿ‚I?ù&ìoÐCÃßø$“ÿ’j–>I%Ê´%à“wæg ý•«Ð#QÿÀ9?øš?²µoúj?ø'ÿ]ßö7ˆ?è!áïüIÿÉ4cxƒþ‚ÿÁ$Ÿü“Uý¥?åBþχvpŸÙZ·ý5ü“ÿ‰£û+Vÿ F£ÿ€rñ5Ýÿcxƒþ‚ÿÁ$Ÿü“Gö7ˆ?è!áïüIÿÉ4iOùPgû8Oì­[þþÉÿÄÑý•«Ð#QÿÀ9?øšîÿ±¼AÿAà’OþI£ûÄôð÷þ $ÿäš?´§ü¨?³áÝœ'öV­ÿ@GÿäÿâhþÊÕ¿è¨ÿàŸüMwØÞ ÿ ‡‡¿ðI'ÿ$Ñýâúx{ÿ’òMÚSþTÙðîÎû+Vÿ F£ÿ€rñ4ejßôÔðOþ&»¿ìoÐCÃßø$“ÿ’hþÆñý<=ÿ‚I?ù&í)ÿ*ìøwg ý•«Ð#QÿÀ9?øšÖðþ‰©ÿh5ÜÖWð[A33OGœÄÊÈûߥt¿ØÞ ÿ ‡‡¿ðI'ÿ$Ñýâúx{ÿ’òMEL|ç-J§‚„$¥w¡ÒÑX_dñgý´_üKÿÉ4}“ÅŸôÑðQ/ÿ$× ÚnÑX_dñgý´_üKÿÉ4}“ÅŸôÑðQ/ÿ$Ðí…öOÐkEÿÁD¿ü“GÙˆF™§‚„‰bHªþè–…Û±…ý+Jÿ@¹°¥ŽŸmu%¬ZN—o”Èkˆ£¸œÎŠÜeÌdç9qê*º\ž¶þ¿¯ë©ØÃ©ù¾!¼Ò¼œ}šÖ Ÿ7wÞó^eÛŒq'9Ï;»c òôÓ#i|JÚ…}e§Ík§´{_´"O1¸H‘‚Ld®-ŸâÃöž[øWLŸNW±Óˆ­ ê&œË¶"Q€(q”ÉÎÎêWé×—¶ú| 5Ôž\m,pƒ´œ¼Ž± ãÕ™G¶yâ¬W“Åq¡jôÔº²KÝ>àXÅ Kiysƒ;G ŒìÌb$6ÐvMhx³N·iì¯4ý"K­–Çea6‘#Â,UQ—i´“Ì_î‘L:‘EPEPEPEP7wPÙYÍupÅa… ’0RØP2N&ñ\ÁðJ’Ã"‡I²¬§AE6îI¡³š[{sq2!háÌlp¹< úÖG„ôt &H'œI4÷\¼qñ ç&8胷¯'Œâ€&·û²ÿ×yôcTÕ ¿Ý—þ»Ëÿ£¦¨QEQE…¯ÿÈgÂßöý#¹¬ÏøI¥o^érkúŠ[ÞEo•ÄDÜÜ+EåOœ¼“#(ÂúVž¿ÿ!Ÿ ØQÿôŽæ¯Xi¿a½Õ.<Ýÿoº[»q³Ç:óþ¯9ã®;f˜–ž0Š[{(­4ícR–M6ÞüºÇc¡°_æUßòªúü ó‹’ø²Ð¥«ØÙÞê"âÕoqk“ ÷]·2õç 2ÇŠ_øsû ÉÿKóü½.ÓOÿW·>G™óõ?{ÌéÛNj¯…/tË[Ó5„‚h4ètéä’×̤@íuÆÆœŒ–7 â€LÔï­þiZ²“us™ms1—.ò¨Ei9ÎK•Ý‚‹ÍIsã {]WT…Ô=­žž·i$|™Xdº_•àÇýt­}MF§iF_8YÚÇmæmÛ¿bÎ2qœtÉ®~ÛÀ6ÖñØGö×eµ¼3·Éþ¶!³ËˆóÑ|›~{ù]9áuþ¿¯1¬|W‘m õÀc*ZO{ cì¢ë…d\±|où3ŒgŒæ›'ícYfm+UûWod×K óVSÞÙp!Häƒ|/qöŸ'ûLdý»ûCì¿gýç›æyØó7}Ï3æÆÜöÎ*Çü#Ÿñ&þÏû_üÅ?´<Ï/þŸ>Ó³ÿ€çñÇjz•®ø¡¿².´Ôl.ìï4÷– æ¼R] ù|¶`Á‚ȸÎN#šÙ·ñsÅxNÔ »µØ^ÍãV”‡$!]ŒÊA ŒîÀÚsŒ­­ø^MZâöxµk%ÂY*2ÂÄm§yƒ œïǶ3ÏJŠ ]_ZjoÕVKëä†3,6æ8Ö8˜²¦Íä•%Ÿv[ÄqF€E©øÆâÖÉÌ-êßÅwi¶“ù[„sJ8"M§8e\1Ãcp:ïYî-a{+¨žxf,ªV¥Çe$;øv7ö¦—o-“ „Ba¾±J˜$ïŒ\îÁ$6p¼qV¼?áÏì/'ý/ÏòôËM?ý^ÜùgÏÔýï3§lu9 ÉâDkKk« 3QÔ`¸·K•{hÔ ©Ë²äãøW-ÓŽFs#ñ%ºx†{³4Òé—sBÊ~Hüén‚FÄ`3÷sÀâ´ßĶz]³ÝY\¥–Ÿ‰[í<\/È1æF¥ðŽ{“»¢úr³èè–ÞHî5_;H¶ÑÖÞ fÌ­Ê ØÌêp{‘@‡Šìì.¥¶÷W$ÑÛ*Â3£?– 0„]Ç$ 2òIÅI?ˆV-?âY%åÖÿ.ÅUÀ!ÖÈçváŒäU8¼/,^ƒJûU´×¼Û©omEÄw2—.„‚Ac‘‚1€: U9üm6“¦[;Ù\O§™¼³{b³Á¶VÜÊ",6¨Â…ÃeB’3‘¡#¦Óu5[ï-ÄrÊVEÚÈÊÅYXv!ÜV§Œ"–ÞÊ+M;XÔ¥“M·¿,±ÂÇ lù•Cü‡*¾¿(<ãoFÓSHÒ`±An=Çöë`–,v¢ð£ŸrO5GÃþþÂòÒüÿ/K´ÓÿÕíÏ‘æ|ýOÞó:vÇSš3Nñm¦¥5€ŽÊþ+]@±Ýͬs…ðíãåV#r€@8&¦·ñM¨[Úͦj‹tYm§¹U&`¥±€ÅÔíV8u^†™gáϲi¾³û^ïìMŸ?—;m»ÁÓ?/ßÝߦ=ëJø~4ÝkMÔêÊG±•ßÍM<%ÍÀhÝ?{6òXüùÈ:t ÐF¥¯‹í®ï¬ M;PX5 ;KÆ<™¶£¾áón„8ÊŒäÆHšÇÅ6·÷vñ-¥äP]–wr"ˆ®J‚ß&°Ê«0Ü@$f¹Í?NÔbñ‡¦E-Ôšn<¥V]=¡Ä!’$ÌÄ•”üêÀ8ÉnkGBð%¦ƒ©[Ïm”!¶Ü!dÒÑ.°T®|äà¡A=ÉÉÈ3 Ôu°¬:uíô²dˆí•x%•GQÁ9<àe·‹í›ì k§j7sÞ¤ìEC ªH¯¹”) ØäãƒÏL¿Ä¾> {7óm·Þ ¶Ÿi‚MØäǹ~a·ƒž2ÜsPøÂK ¶œVí$[8¯b –â%"ât—€.͸=±ŠŸþ»i,ìåµ±¾¹¸ºiQ,ãD©‰¶Ë»sXm'wR1œŠ<{.£áöº•§,÷׸çz¨º”*zmP;cªá‹›o"}?RŽØ./$Y%¶ó£¸˜ÊÈÈÌÃîûâ´t *MIs]›¹|ùæyŒa7%yœ}ü~ºP‡âv·ð®‚k¨ê—Ϥ[Ý\»ª”;—a’HnXàðkZoZ†¶[[ÍHÏn·舧d-÷\îe냀2ÇŠ¡máKí6ÒÂ=/XKyàÓaÓ§–KO0J‘±Õw¬ 9ä°ù¹:øbm=­‰¨‹?&Ê+AçoŠ<ì#æ\8ÜÜò>nA  :§ˆ“Jyš]3P’ÒÜn¸¼Ž5ò¡\d“¹ƒ0ä”VÇ=Á_Oñ$Òê^ ŠÿO–ÒËK™”]¹fÅŠ7;°å²w³” ¸ ‘Y~&ø~I…ZÏKKid»©;Ê8G·LM¬xN×ZÕÖòæVòM³Á,¬%]U³ž6¬³ ¶jlCçñM´sµµ½•íåÈžH3'–ª]Áf K…$‘óqé˜ÛÅö­ýž¶š~¡y5ôs£öqk¶@æs:§™¸ü¡ð~îIÐ54&ñ[ß$3iš„vÏ:Û ×D^c6Å-¿ˆ¶í9àæ™ámró]²¹šóLžÉ¢ºž.cÚá&‘]ŽågœíȬkŸ‡âçYíudÅuï–i4ð÷Cl¢O/Î/Âq´£‘z-K¸Ò¾Ù]G5¬·2ÜB‚¯’G‘Ã6ân~0w¤2·‚äBðïý‚í¿ôRÖíax'þD/ÿØ.ÛÿE-nÐMÓõ $ÓmQï-Õ–Tp=éÔPÿÚvóûmÿWühþÓ°ÿŸÛoûú¿ãPQEÀ|÷šeͼ°MwjñJ…L£•#uªz]¾ƒ£ ¾ÇsyØ4²ÍxÓHä »±bè3Ú¬ÑEØXŸûNÃþm¿ïêÿÚvóûmÿWüj (¸ÿiØÏí·ýý_ñ£ûNÃþm¿ïêÿAEí;ùý¶ÿ¿«þ4iØÏí·ýý_ñ¨(¢àOý§aÿ?¶ß÷õÆí;ùý¶ÿ¿«þ5\ ÿ´ì?çöÛþþ¯øÑý§aÿ?¶ß÷õÆ ¢‹?ö‡üþÛßÕÿ?´ì?çöÛþþ¯øÔQp ´exу+M)‚7µOE€(¢Š(¢ŠÉ×4»½E´é¬o µ¹±º7ÓÛ™‘³‘T:’œö¨>ÉâÏú h¿ø(—ÿ’kvŠ`a}“ÅŸôÑðQ/ÿ$ÑöOÐkEÿÁD¿ü“[´PÙÚŸÞàßð±u¿útÿ¿-ÿÅÑÿ [ÿ§Oûòßü]Þ~ÚŸÞ}µ?¼+Á¿ábëôéÿ~[ÿ‹£þ.·ÿNŸ÷å¿øº.¼ýµ?¼(ûjxWƒÂÅÖ¿éÓþü·ÿGü,]kþ?ïËñt\yûjxQöÔþð¯ÿ…‹­Ó§ýùoþ.øXº×ý:ß–ÿâè¸óöÔþð£í©ýá^ ÿ Zÿ§Oûòßü]ð±u¯[Oûòßü]Þ~ÚŸÞ}µ?¼+Á¿ábë^¶¿÷å¿øº?ábë^¶¿÷á¿øº.¼ýµ?¼(ûjxWƒÿÂÅÖ½mïÃñtÂÅÖ½mïÃñt\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿâèÿ…‹¬úÚÿ߆ÿâè¸ñöÔþð£í©ýá^ÿ Yõµÿ¿ ÿÅÑÿ Yõµÿ¿ ÿÅÑp=ãí©ýáGÛSû¼þ.³ëkÿ~ÿŽQÿ Yõµÿ¿ ÿÇ(¸ñöÔþð£í©ýá^ÿ Yõµÿ¿ ÿÇ(ÿ…‹¬úÚÿ߆ÿã”\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿã”ÂÅÖ}mïÃñÊ.¼}µ?¼(ûjxWƒÿÂÅÖ}mïÃñÊ?ábë¶¿÷á¿øåÞ>ÚŸÞ}µ?¼+ÁÿábëÞµÿ¿ ÿÇ)ábëÞµÿ¿ ÿÇ(¸ïöÔþð£í©ýá^ÿ Xþõ·ýøoþ9Gü,]cûÖß÷á¿øåÝþÚŸÞ}µ?¼+Â?ábëÞ¶ÿ¿ ÿÇ(ÿ…‹¬zÛþü7ÿ¢à{¿ÛSû¶§÷…xGü,]cûÖß÷á¿øåð±uï[߆ÿã”\wûjxQöÔþð¯ÿ…‹¬z×þü7ÿ£þ.±ëkÿ~ÿŽQp=ãí©ýáGÛSû¼þ.³ëkÿ~ÿŽQÿ Yõµÿ¿ ÿÇ(¸ñöÔþð£í©ýá^ÿ Yõµÿ¿ ÿÇ(ÿ…‹¬úÚÿ߆ÿã”\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿã”ÂÅÖ}mïÃñÊ.¼}µ?¼(ûjxWƒÿÂÅÖ}mïÃñÊ?ábë>¶¿÷á¿øº.¼}µ?¼(ûjxWƒÿÂÅÖ}mïÃñtÂÅÖ}mïÃñt\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿâèÿ…‹­zÚÿ߆ÿâè¸ñöÔþð£í©ýá^ÿ Zõµÿ¿ ÿÅÒÂÅÖ½mïÃñt\yûjxQöÔþð¯ÿ…‹­zÚÿß–ÿâèÿ…‹­zÚß–ÿâè¸óöÔþð£í©ýá^ ÿ Zÿ§Oûòßü]ð±u¯útÿ¿-ÿÅÑp=çí©ýáGÛSû¼þ.µÿNŸ÷å¿øº?ábë_ôéÿ~[ÿ‹¢à{ÏÛSû¶§÷…x7ü,]kþ?ïËñtÂÅÖÿéÓþü·ÿEÀ÷Ÿ¶§÷…mOï ðoøXºßý:ß–ÿâèÿ…‹­ÿÓ§ýùoþ.‹ï?mOï >ÚŸÞàßð±u¿útÿ¿-ÿÅÑÿ [ÿ§Oûòßü]Þ~ÚŸÞ}µ?¼+Á¿ábëôéÿ~[ÿ‹£þ.·ÿNŸ÷å¿øº.¼ýµ?¼(ûjxWƒÂÅÖÿéÓþü·ÿIÿ [ÿ§Oûòßü]Þ¾ÚŸÞ}µ?¼+Áábëôéÿ~[ÿ‹£þ6¹ÿNŸ÷å¿øº.½}µ?¼(ûjxW‚ÿÂÆ×?éÓþü·ÿGü,msÒÏþü·ÿEÀ÷¯¶§÷…(¼CÜW‚ÂÆ×=,ÿïËñtáñ#]^Ö÷åÿøº.¿,êÝêPÀ׌xâ|ò_GoªCÇ! &ˆ }Á'|ñ^±it%PA¦…€äQ@Ìp¦¸/^еÛÈ?ñÓ]ÝÉÄf¼ËÇŽ²¯Gý1ähÇ7Qº¡ÝFê‘—¬-$Ôoc´…âY$$)•Â/Lã'¿aïZÚ§„õ ?RžÎÙ†&Š:+,kŒ³)n:ð2I¬ {©­.c¸·‘£š6ÜŽ½T×Cáÿ*j³¾µw3Cqbö^qÌJqƒÉ:/3:=S•ìR;Ff¿Rö :þ𧯎)ú†«ésÁ 턱IpvÄWÞ}RFyé],:þ‡c­ø`E¨´öšd2Ç5ÇÙÝ9e |¸Ï_­f.µf|?¦Ú-ûAuª×Ä,ÞTg8p1ƒÉÎÜÑ×úïoËPþ¿…φõ«;»[K‹Iî‰XSÍC¼Ž£†ÀëßùCï>€©<ûu®ši6~+ÒŸOW}ÅdƃºLî`‘ªú§ˆì­î4Óc}myioz.šÞ 8Ûm#ÜðÄ‚i­lÊòøJïN𾣩j–²ÛÏEöu2)3a²>½ñX1X]Ïa5ôP¶…Ö90ùYº g<ý+§Õõm û]Z¤·7:­Äsˆ^ÙÐņÉÿ­Yþ Öì4»»¨uR~ÃpŠÇ [÷ˆÁ“€½%»¿õ¢þ½Aí¡B] U¯K'V²(.õ% ýÑÁù³ŸáÍ;Qðö³¤Ú%ÕþŸ,99*@>ø'Ž+£¾ñŤÖzeÌqî¾{¨çÔ)ð£$`çƒÇLT¶·¢Ç¦k‹a=ìúÄÉ!ŠH¸ »’~ñíÇ £úü¿àB-#ÁºÖtøµ›`²¹v]ÂTÜHF`8$»éX“éðÇÆÕÄW2˜í¾aºR8\î?\bº'ñ”ß`ÖEÏú 7”ü~è¯ÝÆî¾Õ_Y×4ýfóKÕ£¿{+ødXæAºÆªr² Æ1þÎúïªFfÏárÚòÚÒm=–âëp†?5 | žÆ®*-GAÕô™aŽþÆHZfÛYX1ôÈ$gñ®ÏO¿Ñoüi¢Kc$W‰yMÕÌÍIû¶Á*ßÅïY7:¦a§Úéê]R©ýªäù DèP×ðëÍ upïýw0õ/ë:D÷öB²¶Ä!•ÁoO”ž}©×^Öì¾Íö6T7M²Ü¥ºãh$Ä éõh–ÖVÉc<-Q.Ö {n1Øä[Þ©¦¯ é¾0ÄVúœ·¾tîÒÛ›VW…]HÎãÃc `v¡9ýSEÕ4SÔlÞßÌÎÂYX{©#>ÕŸººOjöw6ÙéúµÍ¿žf1A§o,ã'ø‰ÉÎcìù:L–Ùšd›Ã´ÉmºuÏ£çŒvâ’/h~¹×ìõm3Ú)óKüD€0¨¬|9¬êMp¶v-1¶Ç( Úèå† ÔþÔ4ÔÓ5/RºkHïãŒ$â#(RŒN ŽyÍiøkRðæ™Ùn ŽêÝâêk”Ëè‚c=ý©ÛRz´ß Üê¾¹¸´¶šMNß Â]P*…²äúÕ-'×zž°úl²Ee$LSpÀ$à¹Ë@?>kmõT²Õm.µY,–mXÞÄâÙܲ`c¯JÌ»ñ÷Ä(u“º+5¹‰·2’Ûq'·J#«Wþ´C{;Z³þÜØê7Ve÷˜&x·ã¶’3ŽÝ*¾ê³ª^E?ˆ// Û,/tò¦õ;]K’28>”jš·ö£ÄßÙÚu—–Å¿”?Þ俥^Êã{²ðð¾ºÚ`Ô—MÙ˜üÑ t9Lg;s»ö§K'HšÆ+™®ïÞTJ;ðó‘Àç5¹eâm&WE™îÈŠÛHû,çÊs‰1÷qŽyî8©<#©ZO7„´øåÝuk-Ñ™6‘´2±ãð5VÕÿ]Ééëc™½Ð5=*æÞ-RÜÙ,ìM#AêIRzuÇZ³©höš2ê¶´z…·Ÿöy¢*øÏÌ=êö£{¡Ã¤[è1j’ÝDú—Ú..>ÎÈ N„rIêxÏzgН4k«(¢Òu”kKl }=,äN¿yË·ºòi_B­gc—ÝFê‡u©ˆ›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Uí/O„®Ò»$ðvõcè+/ujiWkr[±ÆöÜ9ÆxóøP¼º™$ebBøáÖçÜþµsðØË.¡ö"B¸bº€óë[>d|á¤wi˜ÈœVd7Àj¯txI̞ÌÒaÑ#‰•ãº}™ 6Ù8Ç^ƒmdjsYÞ,L«'1çœ`ûÖ‰’Sk4 BD›ðÆCŸ˜“Óo¿­V¼½ß}nè7}·ýNAÇéC½´muszËÃú5²$WÌgºe,G˜T uÀàzšËÖt«kh÷N•žÕÈXçnz{Š¿?“ªB›¦Í¿ÞÉlc©éŒœŒsÐñjëWØÓͫȯ3íÜTc€AÎ;tåQÄT•D¯«ÝGŠÁÐ >T’Z>æêúÃwfkX‰9%E|纽ïÂ,M¤?îŠõÑóGÊŠ)°ýÁE0uþ¬×˜xóþAwŸõÉÿ‘¯OºÿVkÌxD_ïà”êÖ{DWQùNQ\Àü¬)à÷Töú{\i——Ë*„µ1‚¸ÉmäŽá@wT]Ok2Ím4Ê¿vHœ«ÜȨ)8 úÒÐË’I$’y$÷¤ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(C+–„“KçAQQ@ ˜  zqJ³”èò¨¨  w"P”'®Ö#?‘¨ÚRÄ’zÔtR²½ÇÌÚµôº½ûÂñéû¢¾¯ 0ÿ GþLÃÿÅЕ­ä6ïs’®¢k»Ko hbçL‚ð³\m2K"mùÇMŒ?Z—þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.˜°Ñ¶¥©IiÿÚÒÈÁœÊ“,~PÜ#.¬»žøïÖ²¯ä{Û?°Ékp«lòÁ#!ÛÎpÉÈ'½Cÿ ÇÆôÿɘøº_øV>0ÿ GþLÃÿÅÐÕÝÁhqu>²ºš·ö"ÚŸ³y¸Ø%Ú»<¿Cž¸íœ×œWq¨øƺ¦¡-äú2,’X%Ä@tÇj©ÿ ÇÆôÿɘøºIK•Öÿ±ñ‡ý?òfþ.øV>0ÿ GþLÃÿÅÓ’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*÷ÿǤ?îŠòßøV>0ÿ GþLÃÿÅשxCþ=!ÿtSB=¸(¢¸(¦.¿ÕšóÈ.óþ¹?ò5é÷_êÍy‡ŽÆtÛ±ë#@•bØÓ-qÿ<“ù ŸÌ>Õ‡©Hñø.åãfG]=вœ|¾ Õ$Ô/ôß [My¨X¬òˆÖû,œ®q°9go¦>”€éžácÛ½•w£'>”ÿ0ûWu«ÞkZF—2, y²°hÝc,¡°ÛN ‡šßÓïõ+¹u-.åí¡Ô-B¸†2c*à•m„ç#ŒÓ¶Ÿ×—ù‡_ë»G@“Ú©GÿWc·š?ô¬¿ IrÚ}â]]Ku$WÓÇæÊrHVÀöAÅjEÿ7õÔè CKERQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEɦŽÞ '•¶Ç—vÆpÉ5ZÛSµºŸÈŒÌ$Ú\,nÿë ÿЭUSÊO3ư²ÈÁ†é#åû§Ò€%¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ¤2J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠÏÕô‹[Û+Æ[y/$…‚HÑ®íÛp¿1ü+FÑ.ŸS/ªéÈmÄNM²A¸•ÇžÀó]V.ÿç•¿ýþoþ"Œ]ÿÏ+ûüßüEa<<'57º%Å0EoÅIkÑBø ã|#Ŭ_îŠëä–x|ÑGå¼É!%G® Šä|'Äýn†wÐ}ÁE}ÁE0uþ¬×x¤n8õ8¯EºÿVkÏ|H3qõqüèuüMe§¬6²ÅpÎÇ’Šåõ÷¦Âe§Ï¯ûåøªæ5¿ù ŸúãþŠZήwQ¦a*’M£¸ÿ„ËNÿž7_÷ÊÿñTÂe§Ï¯ûåøªáè¥í$/k#¸ÿ„ËNÿž7_÷ÊÿñTÂe§Ï¯ûåøªáè£ÚH=¬Žãþ-;þxÝß+ÿÅQÿ –ÿœÔ‘ÃEÊ. ¹Žs“D0ljv©bØÏrriÝZÃm †Xôo?ÂøÈüª¼óHe‘ü´‰7»’}†~•n¡–ÖŸt‰’F$d{úЭpMu)Û™|¥ˆKåŒI#àKd÷© º‘ðò*ÀÆ:“ÿÖaí ‘dɧ‘ïëD¶LÛ2qŽ ÛLw]JCÍšHYæ(ÑýŸ‚ßýaBܱÛq"äÅo¸Rßþ¯Ö®5»¾æ'rÇ2:{A³3 %—i÷ùs"’Üϼ®]Ñc,wG°ìz}ÂÌ–oæM½¤…N8ïVRÚ$F@¤« ÌOó¦‹HDf=¤© à±=?WAtWyš9%òÂü¥!#¡?þ±I{æElÝæ.ã p98ÇÒ­›hJ:Ê»nnO'Ö…·‰ §(IRXœgëG2 ¡-Ùš5ä »æzè*¤-$6~xrZvÊ¡±àúÕä‰#Bˆ¸RIÇÖ£p,F0‡aÇOJ.„šJ.¤…åó¨9 ž8¨šæH^f•Ø–=£k/nzúU¸áŽ*‹€y<äŸÆ˜¶.ï“;†Ó¹‹qéÍCº*¥Å¬’;3"ÆXîh Ø òjͤ-olªòÂŽzÓ–Ö£ J°Á Äÿ:|q$I±AÛîIþt6º ´PO2==¦wLr¨@À,xíRÆ…¯%9Dˆ*`ƒ“ÛßµL–"…T8 ÄàŽ”áo™¥ w·^NáÒ‡$7$PŽwH¡E,­6éY•  ì?¿ld6êfÎþs‘ƒŒñŸÂšlà(‹°€Ÿw AŽjeT(è ¦&Ó*jІɋɳi §ËvïX :ÈV'p«Ñ‡Þƒ×hÿ?•t·V±^@b”eO Ž úН&‘g$Bc!c<8'×'ÞªIY— ¤¬Ë‘€#P¤•`“œ­uþ ÿ—ïûgÿ³W"ª¨¡TP0èuÞ ÿ—ïûgÿ³R§ñ ŸÄ޶Š(®ƒ¨(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šåu¿ù`ÿ¯7ÿÐdªþû£ëV5¿ù`ÿ¯7ÿÐdªþû£ëXPÞ~¿¢:±_ ?ð¯ÍÜpQDpQ] ˯õf¼÷Ä_ñóýt_ç^…uþ¬×žø‹þ>bÿ®‹üèíç…ïu’îmÖ9!‹Ùâ5‡µAÿV¥ÿ=í?ï¶ÿâk´²ÿ}¯ýqOýVe¯‰¬îµ¹4Ômùc˜Ÿ–GyGÓõÁôç?g©œ[¹Ï©Ï{Oûí¿øš?á Ô¿ç½§ýößüMvì‚[„‰ùB¬ÄzãŸÎžl­?çÖûö(öq²‰Âÿ©Ï{Oûí¿øš?á Ô¿ç½§ýößüMvÏceøó·ÿ¿Kþ]쬿çÊÛþý/øQìâÊ'#ÿV¥ÿ=í?ï¶ÿâhÿ„+RÿžöŸ÷Ûñ5ÔŘ%šÚ6+î™F~æö*@ü³øÖŸÙ-€ÿQ÷* üÍÎ!ì¢pð…j_óÞÓþûoþ&øBµ/ùïiÿ}·ÿ]çÙm¿çÞûàQöKoù÷‡þø{8‡²‰Áÿ©Ï{Oûí¿øš?á Ô¿ç½§ýößüMwŸe¶ÿŸxïQ\Á VÒKkÆ¥AŽœàûQìâÊ'ÿV¥ÿ=í?ï¶ÿâhÿ„+RÿžöŸ÷Ûñ5ÝÑG²ˆ{(œ'ü!Z—ü÷´ÿ¾Ûÿ‰£þ­Kþ{ÚßmÿÄ×wEÊ!ì¢pŸð…j_óÞÓþûoþ&øBµ/ùïiÿ}·ÿ]Ý{(‡²‰Â©Ï{Oûí¿øš?á Ô¿ç½§ýößüMwtQì¢Ê' ÿV¥ÿ=í?ï¶ÿâhÿ„+RÿžöŸ÷Ûñ5ÝÑG²ˆ{(œ'ü!Z—ü÷´ÿ¾Ûÿ‰£þ­Kþ{ÚßmÿÄ×wEÊ!ì¢pŸð…j_óÞÓþûoþ&øBµ/ùïiÿ}·ÿ]Ý{(‡²‰Â©Ï{Oûí¿øš?á Ô¿ç½§ýößüMwtQì¢Ê' ÿV¥ÿ=í?ï¶ÿâkoÃÚ%ÎöŸ´•oqªÃ¨J]ä†&Š8Ûâ lc9à½)‰áÝF]SÃó[èÅ-Ý£µ±»”>>ëð~l©¯\ÓIÁÀ#z×C\Ü:v·ˆ.5 `Ó®¾Èd{— ?ÝUòÈõ<ò{àS[‡C¤¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¦¿ju5ûP(¢ŠC (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€9]oþF˜?ëÍÿô*¿†>èúÕoþF˜?ëÍÿô*¿†>èúÖ7Ÿ¯èެWÃOü+ógwÜQÜWAÈ2ëýY¯=ñü|Åÿ]ùס]«5ç¾"ÿ˜¿ë¢ÿ:äkÿ\SÿAõ‚%æXÐJà+8^X€ŸÄÓ,¿äkÿ\SÿA=5ãö?úæÿÍjÁªëÿ±ÿ×7þkV Dý*«u«OÒª·Z@T–7’ê-w:Å…Î3¶Gl~•)»<¥È=ÇÙ¤?ÉqM Vú}§Å ƒé—qŸÖ´~É´¤úù¬?‘ fwÚ¢þíÏþËÿÄÑö¨¿»sÿ€²ÿñ5£öH}eÿ¿­þ4}’/Yïë3þÕ÷nð_þ&™4¿i·’Þæ/*”ËBè‚I`:VŸÙ!õ“þþ·øÔw¬<ѳƒ–Ã9`@íÉ  (¢Š`QEQEQEQEQEQEQE×íN¦¿jeQHaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP+­ÿÈÓýy¿þƒ%WðÇÝZ±­ÿÈÓýy¿þƒ%WðÇÝZ†óõýÕŠøiÿ…~lîàû‚Š û‚Šè9]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@Õ—üƒíëŠè"§¨,¿äkÿ\SÿA=5ãö?úæÿÍjÁªëÿ±ÿ×7þkV Dý*«u«OÒª·Z@Uc‹é?ݶÿÑ­[Ö4§’}-ôsV›IÍKš3UüÚ<Úä4ýz÷J]Zâ{6›§*Ér.>xÁ`8LrG» Öÿ‰uÉÿ¦-üsᛉMݳê£û6êèÜKn¶øvÉ®ýÝ8ôÍt7¯ÿÛ¿h_ÿA4ú/ë =Ùf°îµ»ËRÚÞçMUµ¹ŸÈŠd¸ äœà”ÇN=N+r¹MNÂ÷QÖí§ƒE6—0\)þÒ3§1)äaNã¸d`ŒsBÝFutQEQEQEQEQEQEQE×íN¦¿jeQHaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP+­ÿÈÓýy¿þƒ%WðÇAõ«ßü0×›ÿè2U tZ†óõýÕŠøiÿ…~lîàû‚Š û‚Šè9]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@Õ—üƒíëŠè"§¨,¿äkÿ\SÿA=5ãö?úæÿÍjÁªëÿ±ÿ×7þkV Dý*«u«OÒª·Z@S˜1¹œª–)»£$…‘ÉÇà*VÔ,ÉæòÜF•A4+”¿œ¨Œ0¨Ï©wùÕÿ³>>k™3ß@þT Îû}—üÿZÿßåÿ>ßeÿ?Ö¿÷ùÆ´~ÌçæoÉøš>Ìßóó7ä¿üM3¾ßeÿ?Ö¿÷ùÆ™qwö²ÛÛÏÒ̆5XÜ1ÉÉÇ@:æµ>ÌçæoÉøšdѽ¼M0™œ ÜÊàr;ãs@É(¢Šb (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ kö§S_µ2Š(¤0¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(•Öÿäiƒþ¼ßÿA’«øc úÕoþF˜?ëÍÿô*¿†z~5… çëú#«ðÓÿ üÙÝÁ÷A÷Ðr ºÿVkÏ|Eÿ1×EþuèW_êÍyãæ/úè¿Î€;«/ùÚÿ×ÿÐEOPYÈ>×þ¸§þ‚*zjÿÇìõÍÿšÕƒU×þ?cÿ®oüÖ¬‰úUVëVŸ¥Un´€ªN/¤ÿvÛÿFµ\ÕuH4‹»¸2T Ë31îIJC‹Ù>–¿ú5ª}^).ôé`ŽÚÖä¾Šè‘ óœü¨cuÔŠ+7¹²»¶{«‘l‘Êr±‚pÄcƒÐš‚óÅ6–’OÙ®¦–”µòâU%Ý—pÛ–=ñXñøSHŠ1sº¶¾vÑ4$Q¨ò÷»'œqž”±èZœ×fîé¬ÒWÔ¢¼tŠFe‘ìÀ%FOà)­ÿ¯/ø"þ¿?øäñ¥£2iÚ”1Ç0‚yd‰BÁ! Øl÷ŒŽEo^Ÿø—Üÿ×&þF¹›ÍîâÇ[$€5ýÚO,pDyÝÇ_ôÏjè/_þ%·õÅÿôBØ:–+%uß3TšÆ 6úa«³ ËR@nî‡jÖ®:ù×ô{MZ÷¼Cpåd[i¶ã°ü£‚9éBÜÇcEPEPEPEPEPEPEPM~Ôêkö QE†QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQErºßü0×›ÿè2U ôüjÆ·ÿ#Lõæÿú •_Ã=?†óõýÕŠøiÿ…~lîàû‚Š û‚Šè9]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@Õ—üƒíëŠè"§¨,¿äkÿ\SÿA=5ãö?úæÿÍjÁªëÿ±ÿ×7þkV Dý*«u«OÒª·Z@R¸;n&sÑÙØú+ jùËËÈ<‚*?ä%?ýp‹ÿB’žtÛbÍelIêLKþíýÓFÇþéü©¿ÙšüøÛß•ÿ ?³4ÿùñ¶ÿ¿+þíýÓP_6Í>t?zT1 õfT¿ÙšüøÛß•ÿ |V6>øm`Çñ$`Ò€'¢Š)€QEQEQEQEQEQEQES_µ:šý¨”QE!…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@®·ÿ#Lõæÿú •_Ã=?éµ xZÚyÚÌË ¨Üþ'ó®gÃ=?Μ9\¼ÝÍ«USQK¢·æwp}ÁE}ÁEj`2ëýY¯=ñü|Åÿ]ùס]«5ç¾"ÿ˜¿ë¢ÿ:äkÿ\SÿA=Aeÿ û_úâŸú©è«ÿ±ÿ×7þkV W_øýþ¹¿óZ°h'éU[­Z~•UúÒ;ù Oÿ\"ÿФ¥ÔµK=&Ý'½‘‘Äk¶6rXô(&’ù Oÿ\"ÿФ¬FòÛi1Ç3Bí©ÀE•<ò~bŸd>æÕ†§m©ÆïmçmCƒæÀñÀ8«uÉø‚ÁŦ•gw& “jq‡óÑrß)#JÊñ-½¾¹¥ËØYé)fØ]Àï ¾ã»n×P¯¸Ïn”_…Åý~6=œk?NÕà¿Ñ#ÕXy2yû g9?…qòÃaíŒ~%»[»ÓZÜΉäÉÜO<>ݸÏ5»áIâ±ð%•ÄĤ0Û´ŒHè “ü¨{7ýuºFޝiº¬ÒCgpZXÔ;#Æñ¶ÓЀÀd{Ž)/Ç´uAÜ쨤BJ)eÚHäzRÐEPEPEPEPEPEPM~Ôêkö QE†QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW¿ÿ}Ïýroå\·†z~5ÔßÿÈ>çþ¹7ò®[Ã=?î û‚Š û‚Šbuþ¬×žø‹þ>bÿ®‹üëЮ¿ÕšóßÇÌ_õÑwV_òµÿ®)ÿ Šž ²ÿ}¯ýqOýTôÕÿØÿë›ÕjÁ]ãY :‚üj3n‡øçÿ¿ïþ4aÁÇJ®êsÒÚFå¥Çþ?øÓMŒGþZ\ÿàLŸüU #·çR¸ÁÎ!‰O±Ëœ~D~uv«I%®™lÒ;,Qç$“’Äþ¤ŸÎ©ÿÂCcýÛÏü›ÿ‰¤çèÙq§9kÙ«EeÂCcýËÏü›ÿ‰£þî^àßüM/kè¯aWù_ÜjÑY_ðØÿróÿ¦ÿâhÿ„†Çû—Ÿø7ÿGµ‡t¯ò¿¸Õ¢²¿á!±þåçþMÿÄÑÿ ÷/?ð oþ&kè=…_åq«EeÂCcýËÏü›ÿ‰£þî^àßüMÖÐ{ ¿ÊþãVŠÊÿ„†Çû—Ÿø7ÿGü$6?ܼÿÀ)¿øš=¬; ö•ýÆ­•ÿ ÷/?ð oþ&øHl¹yÿ€Sñ4{XwAì*ÿ+ûZ++þî^àßüMðØÿróÿ¦ÿâhö°îƒØUþW÷´VWü$6?ܼÿÀ)¿øš?á!±þåçþMÿÄÑíaݰ«ü¯î5h¬¯øHl¹yÿ€Sñ4ÂCcýËÏü›ÿ‰£ÚúaWù_ÜjÑY_ðØÿróÿ¦ÿâhÿ„†Çû—Ÿø7ÿGµ‡t¯ò¿¸Õ¦¿jÌÿ„†ÃºÞàßüM]†æ»tžg ?#MN2Ù“*s޲M¢Š)’QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW¿ÿ}Ïýroå\·†­u7ÿò¹ÿ®Mü«–ðÏõ ê¸(¢¸(¦!—_êÍyãæ/úè¿Î½ ëýY¯=ñü|Åÿ]ùÐueÿ û_úâŸú©ê /ùÚÿ×ÿÐEO@Q@Q@z¯üè÷Ûöœ•oBºšóO–[‡Þëyu8åIäEz*øUMWþB/ý~ÿí)*_ ÿÈ*û_éTµø¤k?‚?×SbŠ(«2 (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ÂÓ¿ãïV…ñÀÿ¶qŸæMnÖÿš¿ýýg/‰Ãà—õÔ¿EU™…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ïÿäsÿ\›ùW-á¯ë]Mÿüƒîë“*å¼5ýhºƒî (ƒî )ˆe×ú³^{â/øù‹þº/ó¯BºÿVkÏ|Eÿ1×EþtÝYÈ>×þ¸§þ‚*z©iÿ6ßõÅ?ôSR-ÄKEEERÕ£“̰¹HÞEµ¹ódXÆæÛ±—ßï*+NËO·xbµÕYZif%ìe't’4ü=2ÇÕ¥EfâïtÍTãd¤¯b¿ü$6ßóç©ÿà¿üMðÛÏž§ÿ€ÿñ5bŠ->ÿ€sSþ_Çþ_þoùóÔÿð_þ&øHm¿çÏSÿÀ øš±EŸÀ9©ÿ/ãÿ¯ÿ ·üùêø/ÿGü$6ßóç©ÿà¿üMX¢‹O¿àÔÿ—ñÿ€Wÿ„†Ûþ|õ?ü—ÿ‰£þoùóÔÿð_þ&¬QE§ßðjËøÿÀ+ÿÂCmÿ>zŸþKÿÄÑÿ ·üùêø/ÿV(¢Óïø5?åüàÿá!¶ÿŸ=Oÿ%ÿâhÿ„†Ûþ|õ?ü—ÿ‰«Qi÷üšŸòþ?ð ÿðÛÏž§ÿ€ÿñ4ÂCmÿ>zŸþKÿÄÕŠ(´ûþÍOùøøHm¿çÏSÿÀ øš?á!¶ÿŸ=Oÿ%ÿâjÅZ}ÿæ§ü¿ü¿ü$6ßóç©ÿà¿üMðÛÏž§ÿ€ÿñ5bŠ->ÿ€sSþ_Çþ_þoùóÔÿð_þ&øHm¿çÏSÿÀ øš±EŸÀ9©ÿ/ãÿ¯ÿ ·üùêø/ÿPé±Éþ™s$oº¹i‘a‚íU‰Ûœ{Õê(Qw»`ç5k…QVfQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW¿ÿ}Ïýroå\·†¿©®¦ÿþA÷?õÉ¿•rÞþ¦€;¨>࢈>࢘†]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@µ§üxÛ×ÿÐEMPÚÇ·ýqOýTÔ†QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW¿ÿ}Ïýroå\·†¿©®¦ÿþA÷?õÉ¿•rÞêÞ4ÝA÷A÷Ä2ëýY¯=ñü|Åÿ]ùס]«5ç¾"ÿ˜¿ë¢ÿ:í­?ãÆÛþ¸§þ‚*j†Óþçþ¹7ò®[Ã}OûÇù×Sÿ ûŸúäßʹo õ?ïç@ÔpQDpQLC.¿ÕšóßÇÌ_õÑz×ú³^{â/øù‹þº/ó ÚÓþçþ¹7ò®[Ã}OûÇù×Sÿ ûŸúäßʹo õ?ïç@ÔpQDpQLC.¿ÕšóßÇÌ_õÑz×ú³^{â/øù‹þº/ó ÚÓþçþ¹7ò®[Ã}OûÇù×Sÿ ûŸúäßʹ ýãþñþtÜÁ÷A÷Ä2ëýY¯=ñü|Åÿ]ùס]«5ç¾"ÿ˜¿ë¢ÿ:í­?ãÆÛþ¸§þ‚*j†Óþbÿ®‹üëЮ¿ÕšóßÇÌ_õÑvÖŸñãmÿ\SÿA5Ciÿ6ßõÅ?ôSRQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE^ÿþA÷?õÉ¿•rþûÍþñþuÔ_ÿÈ>çþ¹7ò®_ß}¿Þ?΀;˜>࢈>࢘†]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@µ§üxÛ×ÿÐEMPÚÇ·ýqOýTÔ†QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW¿ÿ}Ïýroå\¿‡>û¼uÿò¹ÿ®Mü«—ðçßo÷󠿏(¢¸(¦!—_êÍyãæ/úè¿Î½ ëýY¯=ñü|Åÿ]ùÐMq.«…Òí¢Ÿ0¯™æc ¸þ!ïU>Õâ¯úZÿßCÿ‹­%ƒÍQ"Â@np· £òRý•¿ç›ÿàSÖ¤äïÌ×õètº„yyõ¿ù™ŸjñWý-ï¡ÿÅÑö¯Ð2×þúü]iý•¿ç›ÿàSÑöVÿžoÿOKØ?ç‡ùõ¥ÿ>ã÷?ó3>Õâ¯úZÿßCÿ‹£í^*ÿ e¯ýô?øºÓû+Ï7ÿÀ§£ì­ÿ<ßÿž`ÿþäZ_óî?sÿ33í^*ÿ e¯ýô?øº>Õâ¯úZÿßCÿ‹­?²·üóü z>ÊßóÍÿð)èöùßáþAõ¥ÿ>ã÷?ó3>Õâ¯úZÿßCÿ‹£í^*ÿ e¯ýô?øºÓû+Ï7ÿÀ§£ì­ÿ<ßÿž`ÿþäZ_óî?sÿ33í^*ÿ e¯ýô?øº>Õâ¯úZÿßCÿ‹­?²·üóü zrÙ–8ØÃëu%Áÿ;ü?È>´¿çÜ~çþfWÚ¼Uÿ@Ë_ûèñt}«Å_ô µÿ¾‡ÿZñÚÃ$Hù˜nãÏñ§}ŠïMÿßühöùßáþAõ¥ÿ>ã÷?ó1¾Õâ¯úZÿßCÿ‹£í^*ÿ e¯ýô?øºÙû?Þ›þÿ¿øÑö(½7ýÿñ£Ø?ç‡ùÖ—üûÜÿÌÆûWŠ¿èkÿ}þ.µx«þ–¿÷ÐÿâëgìPÿzoûþÿãGØ¡þôß÷ýÿÆ`ÿþäZ_óî?sÿ3í^*ÿ e¯ýô?øº>Õâ¯úZÿßCÿ‹­Ÿ±Cýé¿ïûÿb‡ûÓß÷ÿ=ƒþwø}iϸýÏüÌoµx«þ–¿÷ÐÿâèûWŠ¿èkÿ}þ.¶~Å÷¦ÿ¿ïþ4}ŠïMÿßühöùßáþAõ¥ÿ>ã÷?ó1¾Õâ¯úZÿßCÿ‹£í^*ÿ e¯ýô?øºÙû?Þ›þÿ¿øÑö(½7ýÿñ£Ø?ç‡ùÖ—üûÜÿÌÆûWŠ¿èkÿ}þ.µx«þ–¿÷ÐÿâëgìPÿzoûþÿãGØ¡þôß÷ýÿÆ`ÿþäZ_óî?sÿ3í^*ÿ e¯ýô?øº>Õâ¯úZÿßCÿ‹­Ÿ±Cýé¿ïûÿb‡ûÓß÷ÿ=ƒþwø}iϸýÏüÌoµx«þ–¿÷ÐÿâèûWŠ¿èkÿ}þ.¶~Å÷¦ÿ¿ïþ4}ŠïMÿßühöùßáþAõ¥ÿ>ã÷?ó1¾Õâ¯úZÿßCÿ‹£í^*ÿ e¯ýô?øºÙû?Þ›þÿ¿øÑö(½7ýÿñ£Ø?ç‡ùÖ—üûÜÿÌÆûWŠ¿èkÿ}þ.µx«þ–¿÷ÐÿâëgìPÿzoûþÿãGØ¡þôß÷ýÿÆ`ÿþäZ_óî?sÿ3í^*ÿ e¯ýô?øº>Õâ¯úZÿßCÿ‹­Ÿ±Cýé¿ïûÿb‡ûÓß÷ÿ=ƒþwø}iϸýÏüÌoµx«þ–¿÷ÐÿâèûWŠ¿èkÿ}þ.¶~Å÷¦ÿ¿ïþ4}ŠïMÿßühöùßáþAõ¥ÿ>ã÷?ó1¾Õâ¯úZÿßCÿ‹£í^*ÿ e¯ýô?øºÙû?Þ›þÿ¿øÑö(½7ýÿñ£Ø?ç‡ùÖ—üûÜÿÌÆûWŠ¿èkÿ}þ.µx«þ–¿÷ÐÿâëgìPÿzoûþÿãGØ¡þôß÷ýÿÆ`ÿþäZ_óî?sÿ3í^*ÿ e¯ýô?øº>Õâ¯úZÿßCÿ‹­Ÿ±Cýé¿ïûÿb‡ûÓß÷ÿ=ƒþwø}iϸýÏüÌoµx«þ–¿÷ÐÿâèûWŠ¿èkÿ}þ.¶~Å÷¦ÿ¿ïþ4}ŠïMÿßühöùßáþAõ¥ÿ>ã÷?ó+éRjÒù¿Úv±CŒy~Y=sŸ˜ûVŽÓéU¾Å÷¦ÿ¿ïþ4}ŠïMÿßükXÇ•Z÷9ç.ysZÞ…§Ò§Ò«}ŠïMÿßühû?Þ›þÿ¿øÕYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿ. Óî?ë›Ò¹o}öÿxÿ:êVÎÀþñ°s†•˜~D×-áϾßïç@ÌpQDpQLC.¿ÕšóßÇÌ_õÑz×ú³^{â/øù‹þº/ó ÚØ…´Œ’ &©®¿¥½Ûè<aˆ2#1f€'ð¨5;kÛÍ*Þ DŠDf_=$”ǽ?»SŒñÓ5a¬>£ê\ÁLÚ„‘ľw˼ž„0£};R_×à7ý~'Sek¨Ûùö’‰#ÉRpAuAö5\kÚi¿_iýùsÊ0RßÝ ¹öÍRÑï4ËK0WQ†æ[»’$–/™ZfÀÆp08Ï¥TŸV°Õ5ÕµžöÞ,®ØÚ@i‡N;('ñ>Ý_Qt¹³ý¹¦ý»ìivÿ/î6ÝÿÝÝ»½³šžöþ×N·óîæX£ÈPOR}“ì+“¼·‘®ÿ²4ëØ®ï„òÄ %íþpíº@ØŽç«®°´Öt­FáXÙ@dY)"&`6±·g¶i-ú²òëúkYOwçºÃ<Âðº•ÏO”ŒŸÊŸe¬Øj´ó7œ«¸Ç$Mc× "¹ÍoZMWHÖã¶–)- Ž“GÎIo›žœ`Tšlé?Š­ä¶Ô›V_³ºI)UŸàŒ~cÆ1ž)­Áìo6¬ŸÚfÂ+k‰6ù²F«²-Ý7G×€kB¹Û+[k[Å$д>\Œ ²|jȆËÊð]ØÂòp<ùQIwO3æÎ9,çð¬].+½^±ŽâÊ K[¸§î® »¥@J±Ê. ‡|ñIký_ÓÑ_×ü1ÔCªØÜê3XAr’]@¡¥9Ø Ç'¦}ºÕÊçm`‚×Ç+ QÄŸÙÈÅQBŒ™\“YÞ#ÕtýJ8§µ…ÊÈëy¨DÆ5+´ ®äõ#¥þº‡V¿­ŽÎŠæü7-Äžµq$Ï8‚´[KœÝü€1ž)twÕPQtÚÑ‹iÏÚâµXóîcù©µ­…}._»ñ•cyöK›¿.PU[÷lUIè€Ú¹ÈêEjW#âcO¼ÔŸA»¿¶´µŒ#ݼÒi?ˆF¹õÀ$öwã­R¬ ©HÈ#Ò’Úã{ØZ(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ãü9÷Ûýãüë°®?ß}¿Þ?΀;˜>࢈>࢘†\ÿ«5çþ"SöˆÏý4νq”5Çë¶eþ`2AÍtvªße‹å?tv©v·÷Oå^wâÛûf ioøTuägÿ}ð¤3Óö·÷OåFÖþéü«Ì?á>Ô¿ègÿ}ð£þíKþ€6÷Ñÿ ôý­ýÓùQµ¿º*óøOµ/úÙÿßGü(ÿ„ûRÿ  Ÿýô€=?ktþTmoîŸÊ¼ÃþíKþ€6÷Ñÿ ?á>Ô¿ègÿ}ð OÚßÝ?•[û§ò¯0ÿ„ûRÿ  ŸýôÂøOµ/úÙÿßGü(Óö·÷OåJªÛ‡¯¥yü'Ú—ýlÿï£þÂ}©ÐÏþú?á@•oÿѸ?•I^h>"êà4kp@$oð¥ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ Uø‹¬1Çö=¸ÿ¶þé5ÈøupíþñþuVÏÆ:­ÑØ[¦}ØÖÖ‡hcPHæ<pQNˆaEÀVBêÌJEhÒ r× rv ª|5?p~UØìµZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•(ðÔ`ýÁùWc寥ZúP7m¡¤DaElÛZˆ€À«aíN À¢–ŠÿÙnip2-8.7.0/doc/src/figs/ir3.jpg0000644000175000017500000002567013224651032013012 00000000000000ÿØÿàJFIF``ÿÛC  !"$"$ÿÛCÿÀÌû"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?úÃÄ_ñìÿJñý8ñcEcÑnÿã^Áâ/øö¥y—Mñ?N×r`ÃÔƒüé0G™sgãéõ‹S Xê6kà/†Ib'Ë`;‚¬ÀúmÐ3!R ¯#j…ͦnÍ·P[î¨g$ý95Ýþ|æÿ¿3ÒébºÜ©oá‹{? Øèn·ªXEeÄÇç0ç†Ü…Hçû¾”Ë? ZÙi6ZÞ­o=ÕÇÚ.¯Ötk™ßÌÈ@| `ŒUíº'üùÍÿ~g©­¬ô{…&e;NpGÔ‘Eïp1φ…¾c Þ=•­¾£öË÷7.eº[!Û«–r¹ÜqìuÓûëùÖ<ÿØqLÑ}ŽY]B’É´ú¹Å3~‹ÿ@Ëïü¸ÿ wŠ7þŽÞkÖ¾'Ö´û›¸ãŽE·krp«æDÄ ’qž¤ÓµïÛërÊ·þ"ÖžÆ`¢{¸`” ¼Ž@`M\ߢÿÐ2ûÿn?Âú/ý/¿ðãü) ©â ZërÈ—zö°š|ÁV]:„KwPÚ~Màr Ôš•<^+ÕõËï&?5"³±;-ãÉÉô,ÌÇ€>ýþ—ßø qþ4%æK˜—»Éè£êO„ì+{Óûëùѽ?¾¿UþËÓ¿çÑï·ÿ?²ôßùô_ûíÿÆ–·§÷×ó£z}:«ý—¦ÿÏ¢ÿßoþ4eé¿óè¿÷ÛÿZÞŸß_Ϋj––Zž›s§^ªËmsE*nÆåa‚2='ö^›ÿ>‹ÿ}¿øÑý—¦ÿÏ¢ÿßoþ45};þŸà. …›PÕ5=g˵{8Rþde†':€ª¹$ lœµ'‡<¦è·ð^ KQ¿{[smf·“«­¬GTÂŽ»Te²pÍneé¿óè¿÷ÛÿÙzoüú/ýöÿãNïëúÕýìVV±kz}:Æñ6e®Igp÷·V7¶.Ïmwi"¬±îaóRê5û/MÿŸEÿ¾ßühþËÓçÑï·ÿC0“Â6ÖÚM¾¦kúÆš"y$–kyã2\<‡.òF‰ÉÈâµ¼9¤éú‘™`ÎbŒ³–Mï#³gf=X’IúÔÿÙzoüú/ýöÿãGö^›ÿ>‹ÿ}¿øÓkz}:͵Òl­üE{®¬ò=Õä@ÊÌ "FX€£.IÉ=ªÇö^›ÿ>‹ÿ}¿øÑý—¦ÿÏ¢ÿßoþ4†TÖ´=3U–Â[‘¬nÖî?/hÜêÙ#æ>ŸZÕÞŸß_Ϊÿeé¿óè¿÷ÛÿÙzoüú/ýöÿãGK™kz}:7§÷×óª¿Ùzoüú/ýöÿãGö^›ÿ>‹ÿ}¿øÐ­éýõüèÞŸß_Ϊÿeé¿óè¿÷ÛÿÙzoüú/ýöÿã@ø‹þ=Ÿé^Q ÿÉP±úŸæ+ÕüEÿÏô¯)Ðä¨XýOóÙ(ô¬ƒâ rÚ23Û-&üª½~ÎÞóìëÚì9£6;ôüO“¾ßOÿ^ÿèr×=¬­‹ÜK-µü+&æ €ÎŸ˜©ÎWÕ¸=ÈÁæ’;xå‚X–Hö28 ¬:z¦åF·Àûiwc¾<~[ç\œw³A#Å ÞXŠ3µ·tWã:vþ÷¾z +´jÖ2ídße+íaÈËEÁ¦ÀÔð¬±A¡Ï<Ò$q¥ÍÃ;»·$Ÿj³á¯hÞ%ÓßPЯ㾴Yž4`í.‡ ‚G#ÜdÆ©ørÒÖûóÚ^ÛCuo-ÍÂÉÈy­Á‚+•øs«i^ð§‰5 Ne´±‡Ä·Ñ–XÙ‚î¸Ø *‚z:SŽ­¯/Õ/ÔRÑ'çoÁ¿ÐéµÿøWAÕ“JÕµt·ºeFeò¤uˆ1™T¬`ž…ÈÍÿŽ|)¡jɥ꺺[Ý2£0òÖ%s…2:©XÁ= ‘šóOj6:=ÇÄÍVGþÒñHt˜|¶f¾ l±"GóŽÙÍQÔ®aðæ‘ãÏ ø„;kZÕ„ §Eå–{òlÒ±à|ÅdVÈíœÒOKù}þKÍußÐv÷’þ—Ÿ£=g_ñÏ…4-Y4½WWK{¦TfSºÄ®p¦GU+'¡r3]t*À2°Á¢¼R¹‡ÃšG<7âí­kV&–YïɳHBÇó‘[#¶s^Ýáë{‹MNµ»m×Úŧ9Ë…þµvV×õn¤)7m7ÿùô2ô"[CÓÙŽIµˆ“ÿkz}:Ê·¶šóÁ°Z[Ü5´ÓiÉL½cc‡Ó­y£|0ñ 1%<8Ä÷grOÔ˜IüÍpbkÕ¥ogO›æz˜,% 麵T-Ý^ç°oOï¯çFôþúþuãßð«üAÿ<¼5ù·ÿ£þˆ?ç—†¿6ÿã5ËõìOüøü»û/ÿAKîÿ‚{ôþúþtoOï¯ç^=ÿ ¿ÄóËÃ_›ñš?áWøƒþyxkóoþ3G×±?óáýÿðû/ÿAKîÿ‚{ôþúþtoOï¯ç^=ÿ ¿ÄóËÃ_›ñš?áWøƒþyxkóoþ3G×±?óáýÿðû/ÿAKîÿ‚{ôþúþtoOï¯ç^=ÿ ¿ÄóËÃ_›ñš?áWøƒþyxkóoþ3G×±?óáýÿðû/ÿAKîÿ‚{ôþúþtoOï¯ç^=ÿ ¿ÄóËÃ_›ñš?áWøƒþyxkóoþ3G×±?óáýÿðû/ÿAKîÿ‚{ôþúþtoOï¯ç^=ÿ ¿ÄóËÃ_›ñš?áWøƒþyxkóoþ3G×±?óáýÿðû/ÿAKîÿ‚{ôþúþtoOï¯ç^=ÿ ¿ÄóËÃ_›ñš?áWøƒþyxkóoþ3G×±?óáýÿðû/ÿAKîÿ‚{ôþúþtoOï¯ç^=ÿ ¿ÄóËÃ_›ñš?áWøƒþyxkóoþ3G×±?óáýÿðû/ÿAKîÿ‚{ôþúþtoOï¯ç^=ÿ ¿ÄóËÃ_›ñš?áWøƒþyxkóoþ3G×±?óáýÿðû/ÿAKîÿ‚z÷ˆ¿ãÙþ•å:ü• ©þb½[Ä_ñìÿJòmºüK´hÔ;€ÅW8ÉÈÀ¯YŸ>Ž÷Z•lµ·º¹a¼¶È‹+ eg$Û‡Ï^k6ŒoâMjÁóO9pAcï´yÿë×M£F×éu-ð•e[†M©pÀ(`|§{û6×þž?ð"Oþ*‘G³šüOnF<£z¸çç9#ƒÇ¹öÆö‡2_k ujÂ[h-Þ3*œ£3²Ðà!Î:dV¯öm¯ý<àDŸüUÙ¶¿ôñÿñTº%äze¤–·q]‡ûD²¬’++9`rŠG|cÚ¯ÿnXÿÏ;ÿüÏÿÄVöm¯ý<àDŸüUÙ¶¿ôñÿñT\V4?·,çÿþ çÿâ(þܱÿžwÿø/Ÿÿˆ¬ÿìÛ_úxÿÀ‰?øª?³méãÿ$ÿâ©Ý…íËùçÿ‚ùÿøŠlšå®Æò ¿’L|«ö—qì2Êú’Qþ͵ÿ§ü“ÿŠ£û6×þž?ð"Oþ*‹°±&™Zé¶¶ÎAx`HØŽ™Uÿ*±Tÿ³méãÿ$ÿâ¨þ͵ÿ§ü“ÿФ2åOû6×þž?ð"Oþ*ìÛ_úxÿÀ‰?øª¹ESþ͵ÿ§ü“ÿŠ£û6×þž?ð"Oþ*€.QTÿ³méãÿ$ÿâ¨þ͵ÿ§ü“ÿŠ  ”U?ìÛ_úxÿÀ‰?øª?³méãÿ$ÿâ¨åOû6×þž?ð"Oþ*ìÛ_úxÿÀ‰?øª¹ESþ͵ÿ§ü“ÿŠ£û6×þž?ð"Oþ*€.QTÿ³méãÿ$ÿâ¨þ͵ÿ§ü“ÿŠ  ”U?ìÛ_úxÿÀ‰?øª£¬ÆÖ k-ˆ•¥k…M¯pÄ0 ä|ǵEQóµOúGÿ þ4yÚ§ý£ÿÀ…ÿ³â/øö¥yNƒÿ%BÇ꘯Vñü{?Ò¼§Aÿ’¡cõ?ÌSd£Ñü=÷/ëíÿ’Ö¥eø{î^ÿ×Ûÿ%­JEp—>&ñߎ5é·Ÿö3—¢²4÷ŠÊ¼{Y@Q’¹¹8®î¼§âMæ§®µþ„t˜ÓÌ) ëèÚŒ“[Áxö[”f¬®ãµ pèv·~*·‹_}ÏKÔõ;ˆ6 ¹-"C¶þW{3/8ç “ŽÔ]øª-~ßJ¾Ò5[Xîgû=½óÇ·–B rÃ88Ê‘YZ^“â-7X¹Õ4'°¼°ÕÄÜ.¥æÛϬj…€ØI%T¬ƒ‘XkðóWÿ„¢ÛPš 'YþÐ:£Í'Û^-ÌD%J€qN6æIí×ðÿƒb[|­õÿ€ÿ¯êæ·‡üSýŸ¦k:¤——ÒŸ\YYÁï–C»ä p<“]/†uû]v+¯*ÚîÎæÒo&æÖéËà0ÎÒAAƒšâõ‡š…õô6“r«®¶­eÒ3Å0pCÅ2ãÉÁ\ö8®¯Àú/ö.4o¢hšD²Ë¹¢Ò²c`’QI={Qµì¿%ÿúÝËâÓ»üßü ¢Š) (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+7]%û o»i»LኞÜsZUç_´Už£¨|/º±Ò,ZúúâêÞ8`‡ÞLª:0:äð1“Ò3Ñ5Híl康yU¡C! +8`H “ØV«®½ü–Â`˜äŸPõªþѵo ü ¶ÑuËß¶j6š|«4¡‹ÌÔ(!AôZÃñt»|Ct¹é³ÿ@Z#¼ñü{?Ò¼§Aÿ’¡cõ?ÌW«x‹þ=Ÿé^Q¡>'ÙÓ'ùŠlHô}Ëßúû䵩Y~ ¥é?éoü–µ)Q^_­ø‡Pÿ…ƒ­éSx£ZÒímÛìÑiú:Ý‚] bÍäHG8ÆHïG[´¹êWs㑦ø¶ÏÃ×±éÓ-ÅÂÚ¤±jh÷AÊä4–áPHÆA8Èâ±´¯ÉáÝ/T”Û¥Ô·~)º´ˆÜÝyÆI$†Ú>\Iš×úóKõÓúòoô=BŠãéÛ‚3žzô®EŸS¸±jÖXÜ– à É@ìw_åBÕ\/­¿®åÚ(¢ÂŠ( Š( Š( Š( Š( ²üBv¥‘ÿ§´þMZ•â£"ÛZR7µ¦ä(§ƒÔ€qùPíj_øê_õé/þ€kÎ|s.ßÞ.zlÿл«„Ô/!kYã³¶‚A¶fŽå¤bÔŠGÏéUu_ iZ–¡-íÄÒ‰$Æà¬¸àéíCmø‹þ=Ÿé^O£"Ëñ.Ò'G ¬=A õdzý+Êtù*?SüÅ6J=ÃG ‘Ä›nß$ãëZÕ—áï¹{ÿ_oü–µ)ÄÙÿji~0×õXü/®Þ&¢Ð¢ùmdªJT0-r†ÎyU#¸®ÚŠ`yý·Ã먵iZtèucª­»éàÜy…™Š4ÁðFXÿ 8ÀÏ <%ªZÛêÖÚn·f¶úûÝ´Wš`¸Uóp'1Óšì(¤´Vþº’·þºÿ›8H>µ–•¢E¥ëFßQÒË̶‹$N’¶çŒÅ¸a3 0ÛÍuúcËá÷Òµ™`¿3Dñ\´py)"¶A2qÁÇSZtSz¦˜-5G# økÄZJÛX-Öm„H'Ó”ÎÑ”8Ž3³5WMðͳi¶ { J¹6V&Ô,”“¼»¾uRxAàdœWqEw¸¬­c‰›À’¼6úÛÁ1ÕŽ­a/ÙƒY˜êÜâD9#/¯zsøíšN·¯¬Iw©kYšò(B/+ ‘äà)䜒y®ÒŠ]-ýtÿ$>·þ»œ ç€uMMu9uŸÃsu}omn%‡Nò•|Á•óI$Ž£é]õS¾–‚Š(¤0¢Š(¢Š(¢Š(¢Š(¢Š(¬,-kh·|£v›·6CÞ¶+ñõíÖ¤Û]YYÛ‘{ EG½™¶Œ±æÉ8<N×v/ýŸBô¶ÿ¿çÿŠ£ìú¥·ýÿ?üUWð—ˆçÖ…ýµå›éúŽqä]ÛyÞj©*Y\¹JAÀ=x­Ýïýöüè°\ƒÄ_ñìÿJòþJ…Ôÿ1^­â/øö¥yNƒÿ%BÇ꘡‰áï¹{ÿ_oü–³µ/øgK×o´mWQK ›;5¼sqò#Äs’‡øˆÇ sÏ­}Ëßúû䵉<+áßKg.»£Úêe'™nf\ì?Ô ©È8Š3¼y¬x†å¼Mx.4ý.XÊiš{|¬ñ’Ÿ0þó`m_á^¹'Ž[ñ&«¢ë:»¶—íÈiËk˳CmbŒç'Î+Ò뉸ðŒú®­âíKhíìµc3[j&IOÃËýÛ@¡29oðx´Õ¯¨#žñÆ¿âxt}sBÔ§°MFÞ;«k»’$d’ä!VRä‚ œá¹µlø¯ÅZJÒ'–Â}RûΑî¡Ó.e†(£Ûÿ,#g‘˜–;€ê}mëþÒu»«û‹Ù.·_YGg Ž@¡9 ŠëÆC†lç$p8¨n¼Õµ—Ÿ¯ko¨YHïo©yÑ‹”dá6  ž”tµþ»ÌOx§SMÊÒÊÇNÔ5 .Òg¾´ŸËÄäd£€à‚7r=ê}OÄ^1¶¿˜šhPÅ$±M¡îKEæ0W„îU»fºH<7ßi׎¡yu¥¬Ë³º—Í1|(ã®n]êÞ0ñ5Õþ£«Xiº‡ÙÑc´¹Rí-®`°ç#‚§‡åý?ë ãæX‡ÄúÞµâ-6Ë@þͶ³¹ÒbÕ${ÈG*ÔŽç?JÇ?u‰õɾÁ§ ‹u3bm“M»yö<¢u_%prvœð:ƒÅw6~ÓìõÄÕ­„‘I‚Ø$*G”±+nÎ{uéÚ¨ÛxBÞÏZ—QÓµ^Æ)î~Õ=Œ3'ÙåòĆBÃwp¬3ONeÛ_ÏOÃúêMŸ}?-+᜚õÅî¹-Æ¡k.ššÍäiÂí:‘&Û´woã]Õ`i>·ÒõÛ½NËSÔ£Šîgž["s+¹ÀÛ¸Œãv3Ú·ét^ˆ}_« (¢ÂŠ( Š( Š( Š( Š( Š( ¸ŸŒò\Áá{«K BkmZÆà[[F^Iwä(’p¦»jã¾/ë²xgÁç\ŠÝn^Öê"fÚsmëÿ F'ü@‘j:hÞ"²¸Õ®QÒ×ûòCqÆw2Å·qÁ'‘Ínè~6Š]Æ][J×­õ¶®âÃ÷¥#”¨Þ«û³ÀlÉúšòñûAjþe«_ü oþ&—þPÿ¡j×ÿ›ÿ‰§pH÷Ÿdzý+Êtù*?SüÅz·ˆ¿ãÙþ•å:ü• ©þb†$z?‡¾åïý}¿òZÔ¬¿}Ëßúû䵩H ¢ŠñøÖûVð•Ö¸-íí \Â}“1˜¹`è3ƒ¹AÆ =(nÃJç·Q^FÚ¿Œ —Kðµ¥Þ£suk¢Csqw§Gm;Ï# “pê ¼•ä“Ôw¿¨ë~/³m.ÿÄ“^è:oØ¢7’ØÚÃp‘Üî"A6C²&6à¯'&ªÚÛÎߟù¥§Ëü¿ÌôÚjº3²+©eûÀGÖ¼»Ä~#ñï‰õË/ A¨°ÒLQÁ´¯ÎчýóJáœàlg$ñZ¶Ô.¾$xžôêWV*’Ù´ö(‘2HM²ðÌÊX`ñò°éJ*ú»‡ERQEQEQEQEQEQEQEQEW›þÒ?òJoëæßÿF­zEyÇíÿ$®óþ¾mÿôbÐÀùyE;´Ts÷ˆ¿ãÙþ•å:ü• ©þb½[Ä_ñìÿJòþJ…Ôÿ1Z2Qèþû—¿õöÿÉkR²ü=÷/ëíÿ’Ö¥"‚¹9<;®¦±ªêz–ö‘U˜M¤Ï)xÔEoô ¤…8$*çÒºÊÍÔµýM¼ŽÏQÖôÛ;™) ÅÒFíŸEb £}Ä´ðˆÚ6e©ÛG,ú|m3ÙÉqlQ ±H•¤ Œ ¥ÈãŒÍKÁžÔ^{iq2ÃD±Ùü¦Dû¡Ð>×ÿžõÐÕ{{ÛK‹«›X.#’{R¢xÕ²c,2ôÈæ˜Œ_ÂÕu!©]ÙH.öi`¹–ê:òÙwèÙ©n<1¢MâךÒEÔT(2Çq$aöçnõV øÏ­BöÏOµk»û»{Kt 4³ÈNIã’@«‘‘BÓ` *Û«[+Y.ïna¶·ˆn’Yœ" õ$ðJ AE!‹ECowkq,ñ[ÜÃ4–ïą̊áŒm€v°8=ˆ©¨¢³¯u‹K=kOÒ%}£P˜v®W€['·QZ4À(¢Š@QET÷––’^_]AkmÌ“M DAêXð*¶‘­èÚ»i½† ï›[””/×i8  (¬ĺ6³}qg¦\Ëpö僸¶DJ¤,…B1”š×¢ŠÏñ¯i¡i2êwÞg‘"·–¹l³}XP…^ÞöÒâêâÖ ˆäžØ¨ž5l˜Ë €}29«+Î?hÿù%w¿õóoÿ£½¼ãöÿ’U{ÿ_6ÿú1i=†|ÀM&h#4›}ë ŽÇÜ~"ÿgúW”è?òT,~§ùŠõodzý+Êtù*?SüÅt²èþû—¿õöÿÉkR²ü=÷/ëíÿ’Ö¥"‚¼ÇűÁámS_ñT2èz­´Å%Ôl/6‹„(qœõ/^„f½:²î|9áë­HjW:—=ð!…Ì–‘´ Ž‡qýhëpèy†¿âmwÅší¾›¨ ²Ž§‰u§²+ÆHЈØL ãŽ1ÇZÜ𭼟¼Iq¨ßO¡–l!†úHâ›u˜Ãd2JíµM DÕgŠ}SFÓ¯¥‡ýSÜÛ$Œø,? }Τ\êPêwUŒ×Ð Cs%º4±ÿºÄd~œ]‰jûœ7ÄÙWZñ%†E¿Öl-àkÝFÞÏËÎX2BÌtÎö뜪ñYö7zþ³ðúÂÍ.§¶Ô´‹ãi©Ú½÷Øî.V58Q*“µŠ˜ßƒƒÈÎ9¯PŠÒÖ+©®â¶†;‰Â‰¥XÀy6Œ.ãÔã'éTïü= joÛô=2ïÎI/Ÿh½ÀÚ²9 q“Ú’Ñ[ú½ÿËBž®ÿÖßç©…¦ |-šÚÈÞù¶s[¶Je™XnC¹òwÀó“œWŸØkº†«o¤øÍ%™m|+ooo}Î$yÛ¼Žûaúƒ^×ko­¼vÖ°E®ÔŽ4 ª=PŦi°ÚOgŸiµÃ;O ¡%/÷‹.0Ä÷ÏZw´œ—õ¿á«´Iÿ_Õ‘åv—w+á;@_Ï¦Úø£ÄrMwyìxíܸˆþ Â8×wmÜQ«êz…†‡ã=3L×oî¬ì&³K[Öºi&‰¥eÄ&ÎN’H݌ת¾§¾š4ǰµkìÆ1lf1lTPèº<:gö\:M„vì«n‚,ç9ÙŒuôëB²Ó§é¦Ÿ‡ã÷šÞÿÖíþ§™üI‡SðÞ©á¡áß·jQÅ|Áîg{©‘J&÷_1²åFHLŒ‘йâ!#xwBÔ´sPÔô8-$šå#ÖÚîè”IX¯Í˜ÉQÎ;^“-¥¬·PÝKm Ïa ¬€¼{†iê3ŽqÖ³®|/ᛨãŽçúDɳƲYFÁŽY€#‚O$÷4íýyÿ_Ò³_×õý~wá¯.ìµÿXÅ'ˆõm7J“ñÞÛyz‹Û1fsó¾n`¸Î슥ˆ5 oÂÞÓî ìú­ô7%Äz³é«$q>Á#:X°*ÁB‘É=+·Ô¼¤ê~+Ö§ic}X-¤v—‹"¡X8-:ãük_SÑtmRÚ;]OI°¾‚/õq\[$ˆœc€ÀMê¾ÿÍÿÀþ¶KG÷~Kþõ¿˜húΣ­i>°Öµ»»mBÞå®® ¹0Éq,L#óFÈÜÇ-¶¥ñdÚ´¾/¶ðÞ©LlaÒVkg}~K7šBì¬æUGiJ€¿)8ç'9¯I›CÑgÒ“J›HÓäÓÓ-^Ù +Ž˜B0?*Žïþ»°‚ÂëBÒç³·ÿQo-¤m_î©…ÕßÏüÿ Z/ëúÔã~ .¤Ÿ']jâ ›õµ€\M nIÌL°8Ï^‚›ã6ÓÆ~o­£k¢íŒÂ×nógå·˜$Ûü9ÛŒ÷Æ+±×ô(5mi pö6ƒ ÑÁo£ RXÝ6ô<²¼;àˆt…“LÖïmâÞX!±°…&ýÖòí”àû}¦ÝÝüî HØâ~Üx³X¹Ò5ÇÔâ>t²hÇ.¶òo\01­©Œ,L‡Ãgå9'9©<&l¼?ðvfIuy¤½ßÊMRXÑZIÊ)B[l#$e” צšhqj­«E£iɨ¶w]­ª Žx9|gõ©†™¦0éƒO´J›o%|¢ É1Œ~›ÒËúò§¶«¯ØxgƳ_]Ãý™uc,Lº¤—onÈÒ<…b¸zGJµñCS77~"†-@Íc™§J¨³n‰XÞ°À$“èzv›¡hše¬Öºn§Y[Ïþº+{d$ã0PãÖ£²ðׇ,mî-¬´ *Ú •Ûàñü{?Ò¼§Aÿ’¡cõ?ÌW«x‹þ=Ÿé^S ÿÉP±úŸæ+©˜£Ñü?Ÿ.ûíoÎ3ÙkGl¿óÙ?ïÑÿâ«;Ãßr÷þ¾ßù-jR(fÙç²ߣÿÅQ¶_ùìŸ÷èÿñTú(›eÿžÉÿ~ÿFÙç²ߣÿÅSè m—þ{'ýú?üUeÿžÉÿ~ÿO¢€¶_ùìŸ÷èÿñTm—þ{'ýú?üU>ŠfÙç²ߣÿÅQ¶_ùìŸ÷èÿñTú(›eÿžÉÿ~ÿFÙç²ߣÿÅSè m—þ{'ýú?üUeÿžÉÿ~ÿO¢€¶_ùìŸ÷èÿñTm—þ{'ýú?üU>ŠfÙç²ߣÿÅQ¶_ùìŸ÷èÿñTú(›eÿžÉÿ~ÿFÙç²ߣÿÅSè m—þ{'ýú?üUeÿžÉÿ~ÿO¢€¶_ùìŸ÷èÿñTm—þ{'ýú?üU>ŠfÙç²ߣÿÅWþѹÿ…Uy’ ûE¾qÿ]½¼ãöãá]çý|ÛÿèŤö|ÇEdfŒVV.çÛÞ"ÿgúW”è?òT,~§ùŠõodzý+Êtù*?SüÅnÌ‘èþû—¿õöÿÉkR²ü=÷/ëíÿ’Ö¥"‚¸‰ïè¯Äó.Ü’’Fl|»¸óÅA࿈¶Þ!×aÒ^ßOŠK›f¹·6š¤wd#)(@<·ÃŽGž)öÞ{OS¿×õ;k×Ô4÷°™lì tc’Ïó±wçŠÕ𖇬èåb¿×mµ+X¡Bž!”c.áÈcŽsÖ…këýoÿú[Á::(¢ÂŠ( Š( Š( Š( Š( Š( Š( Š( ¼ãö8øWxéæßÿF-z=ywíKÿ$oRÿ¯‹oý´=€ùµ[#¥}ë‘GÁw©¼ßöZÎÁsôÄ_ñìÿJòþJ…Ôÿ1^­â/øö¥yNƒÿ%BÇ꘭Y(ìÛR¿Ònn­ãÑ.¯w»Î­¨ÈùF9ïÒ³ô_j:¤òD¾ñ §–¹w»ˆD¡³÷A?xû®G½vgþ?Sþ¸¿þ„•Ã|sñ¦©à_ ZêúE½œóÍ~–Ì·HÌ¡Lr1 +)ÎPwõ¤Š4"ñÔº½Î–¾¾óíàŠwÌ‹²4Џ÷ÌMúW}û@è–w³ÚMáoÌ‚Fñåc*p‹Ú¦ýŸƒÿ†Šðÿý :çþBÿâéíáðqÿλÿ¿øºùøQÜP>‚ÿ†ŠÐ?èY×?òÿAý¢¼?ÿBιÿ¿øºðHÔÏ´V€æY×?òÿKÿ  г®ä/þ.¾OëJýhb¹ïÿðÑý :çþBÿâèÿ†ˆÐ?èY×?òÿ^(¤‚ç¿ÿÃDèô,ëŸù ÿ‹£þ'@Á?ðŒëŸù ÿ‹¯ŸÚžŸñí'Ðÿ*»s¸ý¥ü5«øg^ÜÃ#/þ.¦öðì´«áwjç?ê¿øºù§Sÿ\?Üþ¦µ|=ÿ k÷ÛÿA4;ü¿´Ÿ†Ê×°:ñÿ\Åš¼u Yhšµ¤óI¬“ˆö|Žƒ†' =«Ì#ÿwü•%¯ú–úÔ0±’’r>^þµ.ÿjм)*DÿÙnip2-8.7.0/doc/src/figs/snap7a.jpg0000644000175000017500000023006413224651032013501 00000000000000ÿØÿàJFIFÿá°ExifII*JR(i‡Züÿÿ)( üÿÿ)( 0210‘ 0100 ÿÿ È -ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀ-È"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?÷úBÀPdzo¯RÞ6v`ª£$“ÐPÖW½DowãZ·Å;É.tËxE¸8Y&‹ûàÖ²ÏÄq»Yÿß—ÿâé\xûjxQöÔþð¯ÿ…®zYÿߦÿâèÿ…®zYÿß–ÿâè¸õöÔþð£í©ýá^ ÿ \ÿ§?ûòßü]ð±µÏútÿ¿-ÿÅÑp=ëí©ýáGÛSû¼þ6·ÿNŸ÷å¿øº?ábëôéÿ~[ÿ‹¢à{×ÛSû¶§÷…x7ü,]oþ?ïËñtÂÅÖÿéÓþü·ÿEÀ÷Ÿ¶§÷…mOï ðoøXºßý:ß–ÿâèÿ…‹­ÿÓ§ýùoþ.‹ï?mOï >ÚŸÞàßð±u¿útÿ¿-ÿÅÑÿ [ÿ§Oûòßü]Þ~ÚŸÞ}µ?¼+Á¿ábëôéÿ~[ÿ‹£þ.·ÿNŸ÷å¿øº.¼ýµ?¼(ûjxWƒÂÅÖ¿éÓþü·ÿGü,]kþ?ïËñt\yûjxQöÔþð¯ÿ…‹­Ó§ýùoþ.øXº×ý:ß–ÿâè¸óöÔþð£í©ýá^ ÿ Zÿ§Oûòßü]ð±u¯[Oûòßü]Þ~ÚŸÞ}µ?¼+Á¿ábë^¶¿÷å¿øº?ábë^¶¿÷á¿øº.¼ýµ?¼(ûjxWƒÿÂÅÖ½mïÃñtÂÅÖ½mïÃñt\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿâèÿ…‹¬úÚÿ߆ÿâè¸ñöÔþð£í©ýá^ÿ Yõµÿ¿ ÿÅÑÿ Yõµÿ¿ ÿÅÑp=ãí©ýáGÛSû¼þ.³ëkÿ~ÿŽQÿ Yõµÿ¿ ÿÇ(¸ñöÔþð£í©ýá^ÿ Yõµÿ¿ ÿÇ(ÿ…‹¬úÚÿ߆ÿã”\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿã”ÂÅÖ}mïÃñÊ.¼}µ?¼(ûjxWƒÿÂÅÖ}mïÃñÊ?ábë¶¿÷á¿øåÞ>ÚŸÞ}µ?¼+ÁÿábëÞµÿ¿ ÿÇ)ábëÞµÿ¿ ÿÇ(¸ïöÔþð£í©ýá^ÿ Xþõ·ýøoþ9Gü,]cûÖß÷á¿øåÝþÚŸÞ}µ?¼+Â?ábëÞ¶ÿ¿ ÿÇ(ÿ…‹¬zÛþü7ÿ¢à{¿ÛSû¶§÷…xGü,]cûÖß÷á¿øåð±uï[߆ÿã”\wûjxQöÔþð¯ÿ…‹¬z×þü7ÿ£þ.±ëkÿ~ÿŽQp=ãí©ýáGÛSû¼þ.³ëkÿ~ÿŽQÿ Yõµÿ¿ ÿÇ(¸ñöÔþð£í©ýá^ÿ Yõµÿ¿ ÿÇ(ÿ…‹¬úÚÿ߆ÿã”\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿã”ÂÅÖ}mïÃñÊ.¼}µ?¼(ûjxWƒÿÂÅÖ}mïÃñÊ?ábë>¶¿÷á¿øº.¼}µ?¼(ûjxWƒÿÂÅÖ}mïÃñtÂÅÖ}mïÃñt\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿâèÿ…‹­zÚÿ߆ÿâè¸ñöÔþð£í©ýá^ÿ Zõµÿ¿ ÿÅÒÂÅÖ½mïÃñt\yûjxQöÔþð¯ÿ…‹­zÚÿß–ÿâèÿ…‹­zÚß–ÿâè¸óöÔþð£í©ýá^ ÿ Zÿ§Oûòßü]ð±u¯útÿ¿-ÿÅÑp=çí©ýáGÛSû¼þ.µÿNŸ÷å¿øº?ábë_ôéÿ~[ÿ‹¢à{ÏÛSû¶§÷…x7ü,]kþ?ïËñtÂÅÖÿéÓþü·ÿEÀ÷Ÿ¶§÷…mOï ðoøXºßý:ß–ÿâèÿ…‹­ÿÓ§ýùoþ.‹ï?mOï >ÚŸÞàßð±u¿útÿ¿-ÿÅÑÿ [ÿ§Oûòßü]Þ~ÚŸÞ}µ?¼+Á¿ábëôéÿ~[ÿ‹£þ.·ÿNŸ÷å¿øº.¼ýµ?¼(ûjxWƒÂÅÖÿéÓþü·ÿIÿ [ÿ§Oûòßü]Þ¾ÚŸÞ}µ?¼+Áábëôéÿ~[ÿ‹£þ6¹ÿNŸ÷å¿øº.½}µ?¼(ûjxW‚ÿÂÆ×?éÓþü·ÿGü,msÒÏþü·ÿEÀ÷¯¶§÷…(¼CÜW‚ÂÆ×=,ÿïËñtáñ#]^Ö÷åÿøº.¿,êÝêPÀ׌xâ|ò_GoªCÇ! &ˆ }Á'|ñ^±it%PA¦…€äQ@Ìp¦¸/^еÛÈ?ñÓ]ÝÉÄf¼ËÇŽ²¯Gý1ähÇ7Qº¡ÝFê‘—¬-$Ôoc´…âY$$)•Â/Lã'¿aïZÚ§„õ ?RžÎÙ†&Š:+,kŒ³)n:ð2I¬ {©­.c¸·‘£š6ÜŽ½T×Cáÿ*j³¾µw3Cqbö^qÌJqƒÉ:/3:=S•ìR;Ff¿Rö :þ𧯎)ú†«ésÁ 턱IpvÄWÞ}RFyé],:þ‡c­ø`E¨´öšd2Ç5ÇÙÝ9e |¸Ï_­f.µf|?¦Ú-ûAuª×Ä,ÞTg8p1ƒÉÎÜÑ×úïoËPþ¿…φõ«;»[K‹Iî‰XSÍC¼Ž£†ÀëßùCï>€©<ûu®ši6~+ÒŸOW}ÅdƃºLî`‘ªú§ˆì­î4Óc}myioz.šÞ 8Ûm#ÜðÄ‚i­lÊòøJïN𾣩j–²ÛÏEöu2)3a²>½ñX1X]Ïa5ôP¶…Ö90ùYº g<ý+§Õõm û]Z¤·7:­Äsˆ^ÙÐņÉÿ­Yþ Öì4»»¨uR~ÃpŠÇ [÷ˆÁ“€½%»¿õ¢þ½Aí¡B] U¯K'V²(.õ% ýÑÁù³ŸáÍ;Qðö³¤Ú%ÕþŸ,99*@>ø'Ž+£¾ñŤÖzeÌqî¾{¨çÔ)ð£$`çƒÇLT¶·¢Ç¦k‹a=ìúÄÉ!ŠH¸ »’~ñíÇ £úü¿àB-#ÁºÖtøµ›`²¹v]ÂTÜHF`8$»éX“éðÇÆÕÄW2˜í¾aºR8\î?\bº'ñ”ß`ÖEÏú 7”ü~è¯ÝÆî¾Õ_Y×4ýfóKÕ£¿{+ødXæAºÆªr² Æ1þÎúïªFfÏárÚòÚÒm=–âëp†?5 | žÆ®*-GAÕô™aŽþÆHZfÛYX1ôÈ$gñ®ÏO¿Ñoüi¢Kc$W‰yMÕÌÍIû¶Á*ßÅïY7:¦a§Úéê]R©ýªäù DèP×ðëÍ upïýw0õ/ë:D÷öB²¶Ä!•ÁoO”ž}©×^Öì¾Íö6T7M²Ü¥ºãh$Ä éõh–ÖVÉc<-Q.Ö {n1Øä[Þ©¦¯ é¾0ÄVúœ·¾tîÒÛ›VW…]HÎãÃc `v¡9ýSEÕ4SÔlÞßÌÎÂYX{©#>ÕŸººOjöw6ÙéúµÍ¿žf1A§o,ã'ø‰ÉÎcìù:L–Ùšd›Ã´ÉmºuÏ£çŒvâ’/h~¹×ìõm3Ú)óKüD€0¨¬|9¬êMp¶v-1¶Ç( Úèå† ÔþÔ4ÔÓ5/RºkHïãŒ$â#(RŒN ŽyÍiøkRðæ™Ùn ŽêÝâêk”Ëè‚c=ý©ÛRz´ß Üê¾¹¸´¶šMNß Â]P*…²äúÕ-'×zž°úl²Ee$LSpÀ$à¹Ë@?>kmõT²Õm.µY,–mXÞÄâÙܲ`c¯JÌ»ñ÷Ä(u“º+5¹‰·2’Ûq'·J#«Wþ´C{;Z³þÜØê7Ve÷˜&x·ã¶’3ŽÝ*¾ê³ª^E?ˆ// Û,/tò¦õ;]K’28>”jš·ö£ÄßÙÚu—–Å¿”?Þ俥^Êã{²ðð¾ºÚ`Ô—MÙ˜üÑ t9Lg;s»ö§K'HšÆ+™®ïÞTJ;ðó‘Àç5¹eâm&WE™îÈŠÛHû,çÊs‰1÷qŽyî8©<#©ZO7„´øåÝuk-Ñ™6‘´2±ãð5VÕÿ]Ééëc™½Ð5=*æÞ-RÜÙ,ìM#AêIRzuÇZ³©höš2ê¶´z…·Ÿöy¢*øÏÌ=êö£{¡Ã¤[è1j’ÝDú—Ú..>ÎÈ N„rIêxÏzgН4k«(¢Òu”kKl }=,äN¿yË·ºòi_B­gc—ÝFê‡u©ˆ›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Uí/O„®Ò»$ðvõcè+/ujiWkr[±ÆöÜ9ÆxóøP¼º™$ebBøáÖçÜþµsðØË.¡ö"B¸bº€óë[>d|á¤wi˜ÈœVd7Àj¯txI̞ÌÒaÑ#‰•ãº}™ 6Ù8Ç^ƒmdjsYÞ,L«'1çœ`ûÖ‰’Sk4 BD›ðÆCŸ˜“Óo¿­V¼½ß}nè7}·ýNAÇéC½´muszËÃú5²$WÌgºe,G˜T uÀàzšËÖt«kh÷N•žÕÈXçnz{Š¿?“ªB›¦Í¿ÞÉlc©éŒœŒsÐñjëWØÓͫȯ3íÜTc€AÎ;tåQÄT•D¯«ÝGŠÁÐ >T’Z>æêúÃwfkX‰9%E|纽ïÂ,M¤?îŠõÑóGÊŠ)°ýÁE0uþ¬×˜xóþAwŸõÉÿ‘¯OºÿVkÌï)÷»iÁã9'½GºÔû«Yìe]Gå9Ep ò° §ƒÜSÛéíq¦^_,ªÔÆ ã%·’8?…UÝRAu=¬Ë5´ÒC*ýÙ"r¬;pG"  ¤à0'ëK@.I$’Iä“Þ“u6Švê7Sh n£u6Švê7Sh n£u6Švê7Sh n£u6Švê7Sh n£u6Švê7Sh n£u6Švê7Sh n£u6Švê7Sh n£u6Švê7Sh n£u6Švê7Sh n£u6Švê7Sh n£u6Švê7Sh n£u6Švê7Sh  ¬xbXzM/œ}EEH&`0è Å*ÎS _Ê¢¢€,-܈IBPž»XŒþF£iKIëQÑJÊ÷3j×Ðvê÷ïǤ?îŠùþ¾€ð‡üzCþèªDüpQDpQL]«5æ<ÿ]çýräkÓî¿ÕšóÈ.óþ¹?ò4â]«¨ñ•Õ©Öîàlp±¥ dÞ~EþÛ}ºQÿ ëÅ™!ti¤ˆÃó Gü+¯Ðãó_ñ©£¬!–OÆ ³¶ªõØ>ñü2*Ïåiױç^M¤º µ›ÎF¶ˆdmd±³ÉÍcÿºñwýî?5ÿ?á]x»þ€wšÿ+i`O[œ½ox,gÅúx »,ÜzüV¿á]x¸Ìãó_ñ©ᯋ¤@é¤åO´ÅÿÅÓÕ²Óž×\±š÷ÃË¥E™7›Í1¼Û—»Ìf0žõzFÖ~É£ sÏ?Û*SÏûÅ0œQœÖü+Ð#ÿ&aÿâèÿ…cãúäÌ?ü]×ãq½¯+Kê¢j±iqæ.©3\%»|² e€þ q5Öÿ±ñ‡ý?òfþ.øV>0ÿ GþLÃÿÅÒQ°Û¹ËA4–×Ï’6Œ;r uÚÇ‘c§^jöÌ€ë¡D(§˜ÓïL?ï°éš‹þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.›ÕXKGsFÈCý­hYY®†‰ÙB:£™0>á`@m»±ÇëL’iµY´{›+›K«ÛëÙÉ,·ÆÎB¯9]¹ÆqTáXøÃþù3ÿGü+Ð#ÿ&aÿâèë÷þ7ÿ0Z/»ð·ùõ9mMºÕmZ0°[¶YÀÆ,×]oü+Ð#ÿ&aÿâèÿ…cãúäÌ?ü]ïýLJ»©ÿ„·Pû>Ïí§Åö-ØÿYåÇ÷sü[wcÞ©±ñ‡ý?òfþ.øV>0ÿ GþLÃÿÅÐ.·.SD:Ћû_Ë›ÌûF3»Èó}÷zöÆi²=ê.“'ˆIMEu41´ø8ÝŸöwc÷ÅTÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹¡_}Á«šÖ‰ µµìW{a½þטYÉ0ÌqÌPfž‡ ³,L¶–VGP,“E¯ƒ9”òUÜIüéŸð¬|aÿ@ü™‡ÿ‹£þŒ?èÿ“0ÿñt¢­ø~ÿ!½Æÿçý\º¯âñ®©¨Ky>Œ‹$¤ q1Æ_Úª±ñ‡ý?òfþ.’AÒÇ%Eu¿ð¬|aÿ@ü™‡ÿ‹£þŒ?èÿ“0ÿñtÀ䨮·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ J½ÿÂñéû¢¼·þŒ?èÿ“0ÿñuê^ÿHÝÐ@ƒî (ƒî )€Ë¯õf¼ÃÇŸò ¼ÿ®Oüz}×ú³^aã±6ìzÄßÈÐ¥X¶4Ë\Ï$þB§óµaêR<~ ¹xÙ‘×Ob¬§/¨5I5 ý7ÃVÓ^j+<¢5…¾Ë#ç+œlYÛé¥ :g¸Xöïe]ÇhÉÆO¥?Ì>ÕÀ]j÷šÖ‘¥Ì‹^E¬¬š7XË(l6Ó†¡æ·ôûýJî]KK¹{hu P…n!Œ˜Ê¸%[a9ÈÁã4í§õåþa×úîÑÐ$öªQÿÇÕØíæýk/ÂR\¶Ÿx—WRÝIôñù²œ’°=‡ÐqZ‘ÇÍßýuúÐÁÑE†QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE2i£·‚Iåm±Æ¥Ý±œ2MV¶Ôín§ò#3 6— $@ 7ž£ó¬][P»šmCOW… Ç’rY°Ñ©';€þ#ÛµWûtËv—0:+ªºbH‹‚©ìß”WW0„*¨têMÙ×Wàÿøó‡ýÑü«ªÒnå½Ó’y¶y…äC°×+œ}=k•ð‡üzCþè¯B2RJK¨Ï@ƒî (ƒî *€e×ú³^gãQºÎqêŒ?Jô˯õf¼ÛÅãtRPEwÛÇu£Eo2îŠ[eG_PW³G…b@u=EšÙÃÛÌdMðáJá~\‚G Ö½—üƒíëŠè"§  øE-¾À-¾Ý{æ ¿¶}§ryžo¯ÝÛøb¯izD_žé,ÓÏpÁ¦žv î@ÀÎÐhQ@4ý:69ÒvNó¶òÎH)bÿ›¿úè?ô«UTÅr“Ìñ¬,²0aºBù@þéô  h¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ) ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€3õ}"ÖöÊñ–ÆÞKÉ!`’4k»vÜ/Ì ÅÑ´K§ÔËêºrq…ln%qÀ'°<×U‹¿ùåoÿ›ÿˆ£óÊßþÿ7ÿXO ÍMî‰qA [ıAEôDP ~¸ßñkû¢ºù%žß4Qùcï2HIQë‚¢¹ ñA[¡ôpQDpQL]«5ç^)Ž=N+Ñn¿Õšóß ÜF=\:äkÿ\SÿA=Aeÿ û_úâŸú©è«ÿ±ÿ×7þkV W_øýþ¹¿óZ°h'éU[­Z~•UºÒ:÷þ>%ÿ®Q9k“µÐæ·ð´ÖøœÞIhñžá™x¶ÑøWq+ê3‡PÃÈ‹‚3üRR´Úr_ÇbÆu"XŠŒ•ÿÏ¡ô5Å[ :“r‹¶ß´*(­QÄêÚmÔ“XÏLË/‘ÀbÜ7mäy€©èAèj•Îp¬‘¢^ÉjöilV7ƒzc9 \c¸å{¥zD°Æ "Eih%ü…?û:/ïŸûá?øšˆá*¥k¡ûHœµ´òL×PùED#GcŸ3å==N? æ­tÓÐ}íšK) •ä”:<Œr `µs“Œ/QÅzwöt_ßoûá?øš?³¢þûß ÿÄÔÇR7³Cö˱æ‡D¹šÒèE¦Çi,è…—l®¹ÊH={ÓÛEº¸±žÖ+_°Åqr$C.mT(˧’ãšôì迾ß÷Âñ4gEýöÿ¾ÿ‰ªú¥^ëñþº TŠèy•æ“}snÓHZ,&UXœ1å†~d8RÍߌÖñ¶ž]jÞiTmíÎÖ`ÊÇ޼ÿW_ý›÷ÛþøOþ&˜F²¼/lT ° ƒŸð4¥ƒ¨ú®½ú‚«Ðâ­–îMnIï,.0¬ÑÛɾ3iýìnݖǧZ«¯iwW—²I¬“n·Âñʨ#}ÄŸ07/Ýã ÐñÍzÙàÿž1ÿß"³ÁÿÏüñþùÞ¤·kñóÿ0ö±[g£é¶÷ikK˜^Ø0šIîDˆT‚0‹¹¶äã ^+­­ÿ³ÁÿàNW$q¸ò;VíΡ¬Áqc¥«X>¡r$‘¦18‰#Lì“–ïPCErðø’ó6Âæ¦ Ö…rT6Ü£!Ï’½sÖ«Ùøºîú$X­âûLº‘~h6ïש@yéžÔ_—ù‡õùÿ‘ØQ\¦â‹†Ó¯ïuµY-`id°Ž'ŽhˆÏ ¸ò;d*½§‹56IÞ{T‘œ— Éi£:PgEfè“j7:|w:ƒÚ³L‹" xÙ‚3ƒ–9>üV•6¬ì$î®QE!…Q@Q@Q@Q@Q@Q@Q@æþ<ž÷Hñž§¢rW÷Pîæu;znùç·¦ÀSÞjþ ½Ô§Ô>`¿½‡<Íž‡¯lsÛ× ö£ÿ ÛŸúäßʸÿ ñ ì5ùÜÿ×&þUÈx_„ÞA÷A÷˯õf¼÷Ä_ñóýt_ç^…uþ¬×žø‹þ>bÿ®‹ü躲ÿ}¯ýqOýTõ—üƒíëŠè"§ ¯ü~Çÿ\ßù­X5]ãö?úæÿÍjÁ Ÿ¥UnµiúUVëHíÿä%?ýp‹ÿB’²çðµÆ¤Úƒj7ëpÒ +Gò‘Г éŠÔ·ÿ”ÿõÂ/ý J¥/‹4hgxd¹”Hå²ýšS†Î1÷i«!Åŧýu?úU¢j”íûû3ë)ÿÑoR™9ëH :–½•:­ÍçÙ‰Uk´U1!cŸ›w\vª×þ,µ°¼»ì¯¥ŽÌ)¹ž(Õ’ à Ÿ›wNx°5¿ ^êW÷²ˆì'Fñ\\;‰m‚íʨ F8=ÇSZ—Z5ÌãÄAd„i±Ò~R#ÛóqÇ>™£¥ÇÖÅÍCÅ––\*ZÞ^-´b[‡¶E+ ‘‘’Ì9Ç88ª¶ºòA¨k×WsÈlàû9‰0IÐ(õ$Ž=Ms:ܲiêÖ×–2ÉnªöÎÎ&ya>@ݦ+ZãÃ7°j0¼°¯"·eÜ – z8õ§ßúõ%_Kÿ[.›­Å¨ÜOlÖ·V—0ª»Cr 1VÎm$ÁïVIÿ‰„£þ™'ózÅðþ˜tÓ3É¥éVR8 › üþr£ò浤7—>VÓ'ÙÓf㜾3íC1Ljç>&û!†?ì³!´[Žw} .ìzmÇQRßøªÚÂòî²¾•,›™âJDdóg§<Y§Á,4on?µ‡7Ry?hÎíÛ3Œnö«³èW³ÅâÏ}NHÀc…aÓž:gÓoÿ2ÿñU¸®ëúùóà?–_‡ù•?á6³ÿŸ+¿ûê/þ.øM¬ÿçÊïþú‹ÿ‹«ðˆhóæÿø/ÿGü"üù¿þËÿÅQˊsà?–_‡ù•?á6³ÿŸ+¿ûê/þ.øM¬ÿçÊïþú‹ÿ‹«ðˆhóæÿø/ÿGü"üù¿þËÿÅQˊsà?–_‡ù•?á6³ÿŸ+¿ûê/þ.øM¬ÿçÊïþú‹ÿ‹«ðˆhóæÿø/ÿGü"üù¿þËÿÅQˊsà?–_‡ù•?á6³ÿŸ+¿ûê/þ.øM¬ÿçÊïþú‹ÿ‹«ðˆhóæÿø/ÿGü"üù¿þËÿÅQˊsà?–_‡ù•?á6³ÿŸ+¿ûê/þ.øM¬ÿçÊïþú‹ÿ‹«ðˆhóæÿø/ÿGü"üù¿þËÿÅQˊsà?–_‡ù•?á6³ÿŸ+¿ûê/þ.øM¬ÿçÊïþú‹ÿ‹«ðˆhóæÿø/ÿGü"üù¿þËÿÅQˊsà?–_‡ù•?á6³ÿŸ+¿ûê/þ.øM¬ÿçÊïþú‹ÿ‹«ðˆhóæÿø/ÿGü"üù¿þËÿÅQˊsà?–_‡ù•?á6³ÿŸ+¿ûê/þ.øM¬ÿçÊïþú‹ÿ‹«ðˆhóæÿø/ÿGü"üù¿þËÿÅQˊsà?–_‡ùšZuòj61ÝÆŽ‹&p¯ŒŒ;;zÓu6N8f‘D3¤ë°–CGJ–ÎÎ T¶¶B¦v©bØÉÉä’zšžº£{.mÎ òó>]¿CÿÃ6·÷SÏö«Ëqr¡.c·*ÎÇÍON28§ÞxvÚâXf·¸º°–(|€öŽ˜û)È#·qëZôUd¯‡lboṴ̀gîòv7Pà  ç=ûûÔv^²°{)-ä$´FŒ>á™Q‰;_Ž@'#¦+jŠÂ>µ[+ x.ï-ÞÇ“Émÿ>ðÿß²[ϼ?÷À¤›7üø]~qÿñty³Ï…×çÿZd¶ÿŸxïGÙ-¿çÞûàP›0ÿ— ¯Î?þ.¥µŽS,·&Æpª©HQœgg,z{U¿²[ϼ?÷À¨•DWD¿p*°™ÈÇéL (¬YüMgºšcsò¼ÙùQÏE?_Ó#×YFç†2HY ƒŽ6“ý(Z)~Émÿ>ñß²ÛÏ´?÷À ¢—ì–ßóïýð(û%·üûÅÿ| JŠâq–I^C;ræ*o²ÛÏ´?÷À£ì–ßóïýð( ßÿÏÅ·þ·ÿFoÿçâÛÿÛÿ‹¥U\ÉýÀªÀzg#N*Z‡7ÿóñmÿ€íÿÅÑ›ÿùø¶ÿÀvÿâêj(ßÿÏÅ·þ·ÿH"šI’K‰Qü¼” @ ÉÉ9àŸÎ§¢€ (¢€ (¢€ (¢€ (¢€ *%EšéÒA¹…= $õüªo²[ϼ?÷À ¢—ì¶ßóíýð(û%·üûÅÿ| J)~Émÿ>ñß²[ϼ_÷À ¢—ì–ßóïýð(û%·üûÅÿ| J)~Émÿ>ñß²[ϼ_÷À ¢—ì–ßóïýð(û%·üûÅÿ| J(Ø©ò¢…QÐEQEQEQEQEAyw …œ×w²P»·°®~ ê7rK=–‘;ØÂO™"[B×$:ž;íVǽu,Óî5O ßZZ Ü2«¢çаm¿ŽÜ~5ÂxgÇN‹ác¦ÞC:]Û†£ýóÏ_CëœWM(^ Å]ÜÎO[6z‡­Ûë¶?h€®F7lŽFAŒ‚AÀ÷‚+N¼ËáEý¼’j™•f”+GfPÎX¯® ˜ü¨¯M¬ªÅFm"¢ÛZ™Z¬—ZL.¡£’ðB2r2> ´`–Â{»›H‘ ÖÅD«åcná‘ÉU»½Õa’Þ¶—K eS’¦¤çß. V‡Ùàÿž1ÿß"¹/‡WÓêZMõåÓïž[˜ŒŒn?eƒšìi¸¤ì%6ÕîGöx?çŒ÷È£ìðÏÿï‘RQJÈ9Ÿr?³ÁÿèúÖâ©ñý}?þ‰Ž°ü1÷GÖ¢ŸÂi[ãû¿#»ƒî (ƒî +C!—_êÍyãæ/úè¿Î½ ëýY¯=ñü|Åÿ]ùÐueÿ û_úâŸú©ê /ùÚÿ×ÿÐEO@ _øýþ¹¿óZ°jºÿÇìõÍÿšÕƒ@?JªÝjÓôª­ÖÛÿÈJúáþ…%5ô="IGÒ¬YØ–fkt$ŸRqN·ÿ”ÿõÂ/ý JùñUý¾´t±£#\ÛûQÔôo¹Ó'Ó˜+ñqkÿ]þ€Õâ9V)4}ÐG.ýF%óò7Ì0G?\j¿!?h´Ï_0ÿè I¨iÐê-jfiìÓ­Âl e—8#§4-תŒç[ÄšÄmszRÅ´ë}GìoGíÞpmØÎXqŠn•©j6zö¥qS·9Ôš]>_ úüÈ%ÖuØ4:w}9®u âŽ2!p‘«©<ùb1ê+KFÕ/./oôíE ve ’ß!$G‚É‚ɬÝoHšëOÒl¬ÞeKk˜‹JŽªèŠ¤nñž¿ ÑÒôÈt³;¬ÓÜOpÁ¥žv ï€8@VšÛúØtþ»š$ÿÄÂoúãózåtßêO¥i -RúúøÏËÊ!P#cè§¶;WL‡v£7ýpÿBzÈÓ¼3ýžt“ö¿3û¼cñÍ$QžÞ#Ôou #ìªCsŤÓlPñγƒœqÎjM[Æðiw·æ+f6ЦàIx±¾HÉ©rÓÒ§>ž"¸³Ô„7Q\ÜN®öû×l§%Jî8ç=ºTÏáûÈõ¯,µ(ák†å%µ+:€7/Ì6’¸£°‰-õË›ÝfkKKÞÖ–áçÚpë¸a6œñî*Šî.ÊæëKX^ËäÃ:\!‰!w.ÑŒ‘Øš×´Ó>É©ê7¾nÿ¶Î͸ٵvõÏ9®sÞ¿›IÒÿ´®Ùm­¤3¥‘¶òÜ8c·s’sŒÔÖáн?Ф‹ík¦³éVÓ˜%ºó€`AŲ́=óž–·oo­xše1·”`*&—ËOõ}Ûh÷Å: É/Ú-RdÒ®g3Ëkä‚Ä“¹”>xR{c<žiÚ…~Ý> ë{å¥á…öC’"6ž¼©ÀÊŸÎ’ÛúòS6ïÅ“^øwR–ÏÉŠòÒhSu½ÂÍuèàwƒÇ«%õÊë:DwЛyeYÉH.ËE…PrÃhÝíÓõü"’ÍiªGw¨#M~c>dþZÆcû¤)cž@ïWSFº–öÂîþþ;‰mD ì·òÇcŽ1|ûQéýh"¥·Še˜ÙÜ˦4Zeì¢+{Ÿ8$çidÇÊrzŒÓ[ÅW)<Ò>–?³¡½ûÜ Œ¸mÁwlÛÓ$w§[xZXM´º›K¦YJ%·¶ò@`Fv†|üÁsÇ ÍK'†·é—–kÇÚo¾Ù¿Ëû¿:¾ÜgŸ»Œûô¦­ëËþ=´þ·ÿ€kYÍs2Ìnm>ÌVVT`}è:?3éÚ¬Õk8naY…ÍßÚ JÌ‡Ë ±Eã®={Õš@E ÿOœÓ(ÿ›×¬ë×kº¼#V½µŽÒ8Ú­ìêÄ©'qØqÏ« ëU±¨\׿›Ö%ƨ^úúÃUŠØ^ãÚù…vŒà;÷“3æÕæ½°¹i]…ÄšÌ7„1Îv¨ã9þ,ûU»]XYHŒÂy< .Jùÿ#cýœ}î>ö -¼)ª4)s!…´ódA_›–,_>¹cÆ)SÃ’yn%¿í¦ÿg–㌜67zŸ­6÷·õñš[_úøÉ’Áâé" Ú®œ,ã’ͯ"xçóC"€X•pØaëõ¦é4‹T¾†+Uy iâòoRn2²`|‡Ÿqמ)×>Šíl£žrÑ[ÙÉhêê‚sž>ï¿ZŽ= íôË:÷SYí¥·0)KaŠÆKdäãØPúÛúßþ+éëoø#ì¼d— ¨G,6Æ[;csþ‰x³£¨ÎFàŽ„w­}þóP²[›»8­DН¤þnTŒóòŒnk \nºkBi¬M’y6žPU=ÈÜr*ß³ì–6öÛ÷ù1¬{±Œàc8£K^ðúü¿àš¨ÝU|ÃG˜ikuª¯˜hó X<šJj 5/–}E0E?Ë>¢,úŠeÿ,úŠ<³ê(”Sü³ê(òϨ QOòϨ£Ë>¢€T®4}.îä\Üé¶sN:K$ Ì?3ZYõygÔP€åaðk⨼Akö‹yãf³Äà@ÎÊÊX®3œ1è@Ï8®žŸåŸQG–}Ecë$E.›rÿ,6÷[å|p‹±×'Û$V~“y£YK¨\^ëö7—7îR6ªí '·©ç5ÔygÔRìoïγå’m§¹ªœ\R’ÛÏþ0­õÙÛKmm6“¼¹ó"ˆ"«çƒ852k~ŠQ$wºrH±ˆƒ)PB‹ŸOn•¯±¿¼?:67÷‡çNÓî¾ïø!z]Ÿßÿç´½GÚL—ßgÕl™ÖTŠ2¨±qíúgžÝ}«Cþ} þ‚ÖŸ÷ôVŽÆþðüèØßÞŸu÷Á Òìþÿøwü$úý­?ïè£þ} þ‚ÖŸ÷ôVŽÆþðüèØßÞŸu÷Á Òìþÿøwü$úý­?ïè£þ} þ‚ÖŸ÷ôVŽÆþðüèØßÞŸu÷Á Òìþÿøwü$úý­?ïè£þ} þ‚ÖŸ÷ôVŽÆþðüèØßÞŸu÷Á Òìþÿøwü$úý­?ïè£þ} þ‚ÖŸ÷ôVŽÆþðüèØßÞŸu÷Á Òìþÿøwü$úý­?ïè£þ} þ‚ÖŸ÷ôVŽÆþðüèØßÞŸu÷Á Òìþÿøwü$úý­?ïè£þ} þ‚ÖŸ÷ôVŽÆþðüèØßÞŸu÷Á Òìþÿøwü$úý­?ïè£þ} þ‚ÖŸ÷ôVŽÆþðüèØßÞŸu÷Á Òìþÿø?ótíféy†æg’&þòùj¹Ä©¬O }Ñõ®‡XÔá‚gÓd3MnάÚ¯9þÚ¹ï }Ñõ¢µ“Ø*ó_™«_oC»ƒî (ƒî *̆]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@Õ—üƒíëŠè"§¨,¿äkÿ\SÿA=5ãö?úæÿÍjÁªëÿ±ÿ×7þkV Dý*«u«OÒª·Z@Goÿ!)ÿë„_ú•dÁg1¡™T¨}¿0¨Ï§«[ÿÈJúáþ…%]¦2ÿÇͧýu?úU¢j¤ç6õÔÿè·©‹RLÑš‹u¨\Ñš‹u¨\ÕùˆËÿ\cþoR¨AÎ¥7ýqÿBzy‚#:ÎcC*©Pû~`QŸN2æ™Q£`²FÛÔ‘‘ЂàMOE0)}ÿ>ÖÿøßüE&/çÚßÿ[ÿˆ«ÔP^ÿϵ¿þ·ÿF/çÚßÿ[ÿˆ«ÔP^ÿϵ¿þ·ÿF/¿çÚßÿ[ÿˆ«ÔPkX$G’iÊù²`ay £8ïÔœûÕš( Š( Š( Š( Š( Š( Š(  ³C0¸3Á±‹ FG;AÁ$€qÔö¨ñ}ÿ>ÖÿøßüE^¢€(â÷þ}­ÿð%¿øŠ1{ÿ>ÖÿøßüE^¢€(â÷þ}­ÿð%¿øŠ1{ÿ>ÖÿøßüE^¢€(â÷þ}­ÿð%¿øŠ1{ÿ>ÖÿøßüE^¢€(â÷þ}­ÿð%¿øŠ1{ÿ>ÖÿøßüE^¢€(â÷þ}­ÿð%¿øŠ1{ÿ>ÖÿøßüE^¢€ÿ)|ÅU~á[püð?•X-ŒÔU“âYnÿ±g‚Á®nH·FE'ËÞp\ã '>ÔŸÑ>â-t\›O0}žO-¼ÅÆáÙ—žTö4ë½NµŽïpK=¬M,–ñʦ@dü¹È®rÛNÕ´}rÆBmå·šßì/ö;gAPLlÙfàŒñ÷ª6_ \hm¥ÜÅ©ý–hÞV·;$rÍæãq9ëCÙØú^#´»¶³žÂk[•ždŠ@.· ã¾Xw­^mRÅ/VÉïm–í¹X ªý9®KÌ’ûMÐR:öµ½ƒÎYm™6á'‘Ƚ*Ý•ÇØµ-(éWjw7Æho9L ¯æt]«Æ3ž8ªk[yÿ—ù’¯eës¹›YÓ-®ÖÒ}FÒ+–À¼ê®sÓå'5supú–™%Èñy{'•¦<‚b$»¿ƒŽN};×YfÏö3!üµÝ»®qÎi ¹ºÕê7R]Ôn¨·Qº€%ÝFê‹u¨]Ôn¨·Qº€%ÝFê‹u¨]Ôn¨·Qº€%ÝFê‹u¨]Ôn¨·Qº€%ÝFê‹u¨]Ôn¨·Qº€%ÝFê‹u¨]Ôn¨·Qº€%ÝFê‹u¨”ñÏ‹-ÿëÉÿô*Ÿ†>èúÕ­xçÅPדÿè2U_ }Ñõ¬(o?_Ñx¯†ŸøVwp}ÁE}ÁEtƒ.¿ÕšóßÇÌ_õÑz×ú³^{â/øù‹þº/ó êËþAö¿õÅ?ôSÔ_òµÿ®)ÿ Šž€¿ñûýsæµ`ÕuÿØÿë›ÿ5«€"~•UºÕ§éU[­ #·ÿ”ÿõÂ/ý J»T­ÿä%?ýp‹ÿB’®ÓµÉÅÅŸýv?ú-éìÜÔwëì¿ë±ÿÑoHÇš@;}.ú‡4f“o£}Cš3@†¦Æs©Mÿ\#ÿО˜ ,':”ßõÂ/ý J¥â 뛦}šMžuüPÉòƒ¹œŽj‹xªå'šGÒÇöt7¿c{q— ¸.í›zdŽõ­«iÚ‚ÈyÞWÙ®£¹û»·mÏËÔc9ëT$ðÖý2òÏíxûM÷Û7ùwçWÛŒó÷qŸ~”ןõ·üKm?­ÿàt­nú8µ{«øãm>Òæã÷þoÎ n:wÝQYøê –•^ |‹WºŒ[Þ$Ä„*ø#`û޼ñWÓÃ’+j6í|L¾iKcÎÇ8|ôÏ=(ƒA¿]:âÂçTŠxd¶kxØZuÈÀf!¾cašZÛåøKüÿ7ñ£—iu&“–öhâ·ˆ^dàY¶qÓ¦ ;þ‘ù¾±xolÙ­’@ûËð›[Œ‚xä sPëÚmØÓ4;K'c-½Ü#ÎïHÞWÓñïÖ¦ÿ„[í—âúùæ¼½df¸Ž1–cå6®N0yäœÕ;knÿäJéër½þµs.«i÷Ö_b¼]>IãÙ7˜®˜ Ø ã#èºñhZ)ŽÒD6ˆì&½ÈØQÂ)qüEZOM;ÝÍ©êj¸žÔÚ+ljcŒõÂäòO9Ïj§/„.š?Ýê‰^Él¦y,÷†EÎ ãiÁç’ .Ÿ×Ÿü´ºþ»Á%þ×ÔgñDQXEöréñÎRY|½›œüà rqŽ8¨&ñݤZ“ÀÜۥȵf7j&Ý¥„]Jƒß9ÿýÌ–wV:ŠÁ$6©i/™˜$E9|ÃiëëÖ‹mæÂþY,õÖÊYÌïo%¨vœ°WÜ0 ö8Í=/å¯çþDëo»òÿ3xð+˜±ñ]ÅÂY\Ýib Ù|˜gK€ä1$.åÚ1’;W×ÄV²8ŒYê ±Ú iÓø’¼ Äðç‡ïæÒt¿í+¶[ki édm¼·íÜÄäœãµ%¸úà×¾ËmuåÁqss&§%¬É>íÍ׆#ä@8çõ_XÕäÓõïT„[0 à ¦]íµB…àd“Ðc½_ æÞAóGsö÷¾‚a>[7ð•'æ$™Ïj[¿ 6¬öm¬]Ewä,ªê¶þXpà˜í#Ï?… oë·ù¯õÜ­¨xÁ´é!¶žÖÒփϖ+‹õ‰QI (b>f8<zšßÄój76QišzÌ·«tÍ,þ^Ä-· rGáM_ ßC,70ëÞ$?g’YíD‚XÁ%w.áó ýàyô­(4—‹Y]JK€ïö5¶eí†Ü[¯OÖšóþ·ÿ€'ý~ðHu+ë›h¶±I¶ “7š»Aݵ29ê9ôª:Š®nÍŒ—X‚ÒýÚ8&[çp @eÚ1§¡5­{¥ý¯VÓ¯¼íŸcó>M¹ß½võÏüj•¿†¼;H´û^ïìë;w—3‡Æxûþý)ØÎÒ|K{kàõÕµxch–0RUŸç™‹m‚ 'nricñÌmg~æÚÞYí7 kx³FáÛhùÀàƒÔcó«1xRQ£K¤M©y–#›`°’r’Ù!°}…M>ƒ}{¤ÜØÞêPÈÒ”+$Vž^ݬ‘¸ç8ö§»¹ÖõKi,mN‘_]™1¼ùPû;ç¦)¿ð”†ÓÕÖÂC¨5ѳûp1(ä‚ý6ãœúv¦ëöz…ψtW°Àщ÷NÐQ2£†G_¨¥Û§ª‹÷‚ݛ߶yc™Oäé·c=;Òþ¿ò†¹¬MyáíRÚ{cg}i$HÖMãk:ÊØžÃ¥_ÖüP4KÔŽhíP7úb¬ß1ÆDD|À}i$ð³ÜØjIw¨/oʸX‚ªl  TÉàcלžj ß\]Éy·R…#½xä¸ i¹‹(Qò¶á´£ƒœsMn€±g¨êoâZÛËŠ[ ]æÚb0N)ÝÏ©WNñÕ®¡¨ÚÀ±Ûˆnähád»W” â¨8õ=³ŠÔ5ÄZåÅýµò¥½ÖÏ´Û¼·~VÈÛ‘ŽÆ«éÚ5΂€-ø›M·V)Ø÷Lœ(prØíòäÒ^×õÿÈÑ×'–×@Ôn r’Åm#£Ä) Öe¦¹®’u+(‘oaó£¸/‚S*ÄlHÆ=êy5K=btÖµÔã[¤h‹Ia4j™—ñ¬ÍNÆö×Ãm¥ÜO>¡rÊ«döÖeLn˜(X‚@ä“Á£küƒ{|Ë â›©nÒÚËKI¤–æxb2\ùjÂ,nlí8ä‘n´³xÆ }'í3[ˆn…ѳky¦TT”rs!à.9ÏéTæÐõ KŸ ÛXÌc’Þ9ü룕7²‚K ¼sÜUãá@tåíÏöñvo~Öc2žÉÓn8Æzw£úüCúþ¿߇õøµØnJ¬K-¼¾\žLâhÏ‚®1‘ƒè;×'}â]Fݵi—U¹Y­o(mˆh ‚0MƒoS’\b»lu4†}N/1g+EhI>æ ½œÖdžÔ ê6ðë)•üÏ,±‹@dÆ-Žƒ®Ú:ÿ^_ðF¶þ¼Êz¦½¨Áˆš¿dKVƒj«ß÷±Ç9÷Ínø–êkOÜMo!ŽQ±C/P €qøY÷>Im5Kho<¤½Š“1nò„C¸Ýœ{Sõ-;T“B¿ŽÿS·DbEò­ d!¹ùÎsŒTÖø%ÊiBÞÒî¿B÷†æ’}ÚI¤y$mùgbIùsW —“ö ûê?þ.¨x[þEËOøþ†Õ©¨_5“ZŽ'óîæN±í<ŒýãÇÝšŠÓ¢+¥iÛ»üÈ·ÜÏ…ÇýõÿFûùð¸ÿ¾£ÿâêwÕ4øïÖÁïíVñ†VݦQ!ú.sP®­]j tÖÖöö{33\¯Fù‡ð~=zÖ¦o¸ÿŸ ûê?þ.÷óáqÿ}GÿÅÕ‹-JÇSˆËa{owœ‚Uék6Ëź=Ü—‘I}mm5¤ÒE$SΊÀ!Álg…Ïz,­÷óáqÿ}GÿÅѾãþ|.?ï¨ÿøº¸ní„Í ¸ˆJ±ù¬›ÆàŸÞ#ÓƒÍW}kJˆÛ‰5;$7 4§QæƒÐ¯?7á@ï¸ÿŸ ûê?þ.÷óáqÿ}GÿÅÔº­óiÚt—IR2ebS–ï_Ç¥%Æ·¥Z]‹KNÊ“ŒC%«œôùIÍG¾ãþ|.?ï¨ÿøº7ÜÏ…ÇýõÿSÚjºuürÉgkp‘q#C2¸O©Š,uM?SWk û[µC†0L²>ø÷Ôü]î?çÂãþúÿ‹©mµ.öåí­u+9î;¢Šuf\uÈ"–ÛVÓoeµÔ-'0­L­åÿ½ƒÇã@ï¸ÿŸ ûê?þ.÷óáqÿ}GÿÅÕ‹-NÃSG{ ëkµCµš V@§ÐàñYZGŠ,ïï/,î.­ »Šò[xíÌÀHê§í'<Ñml.]ßqÿ>÷Ôü]î?çÂãþúÿ‹©¥Õ´Ø/’Æ]BÒ;ÇÆËw™Dž˜\äÓgÖ´«[ų¸Ôìáºl†IÕ\禜Ð{î?çÂãþúÿ‹£}Çüø\ßQÿñu½â ÂâI®íRé`ya‚i•R NO#µOg«ZÜX,òÜÛÆén“Ü/˜?rwe¹àuäúPwÜÏ…ÇýõÿFûùð¸ÿ¾£ÿâé5=f ?6)-e™•^8¤ºH·¡eƒß0çÜõbMWN†ù,e¿µKÇû–í2‰è¹É¢Ár ÷óáqÿ}GÿÅѾãþ|.?ï¨ÿøºµM=/ÖÁïíVñ†VÜÌ¢B=—9«t›¾ãþ|.?ï¨ÿøº7ÜÏ…ÇýõÿZTPnûùð¸ÿ¾£ÿâèßqÿ>÷Ôü]iQ@»î?çÂãþúÿ‹£}Çüø\ßQÿñu¥Efï¸ÿŸ ûê?þ.÷óáqÿ}GÿÅÖ•›¾ãþ|.?ï¨ÿøº7ÜÏ…ÇýõÿZTP ¬>(ƒÌ…â?c•ÊçîÉèMCᎃëW|Gÿ#m¿ýy?ò’©xc ú×= çëú#¯ðÓÿêÎî¸(¢¸(®ƒe×ú³^{â/øù‹þº/ó¯BºÿVkÏ|Eÿ1×EþtÝYÈ>×þ¸§þ‚*z‚ËþAö¿õÅ?ôSÐWþ?cÿ®oüÖ¬®¿ñûýsæµ`ÐOÒª·Z´ý*«u¤vÿòŸþ¸Eÿ¡IWj•¿ü„§ÿ®èRUÚ`W»ŠG<@‰÷…'¸*F~Œj$§þ\.8ÿøº¿Egï—þ|.¿8ÿøº7Ëÿ>?œü]hQ@ûåÿŸ ŸÎ?þ.òÿÏ…×çÿZPx’Qÿ._œü]Mi¾l·'–Î2 3ŒãŒåOjµEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEOVÿ5÷ý{Éÿ š¹Tõoù_×¼Ÿú ©ŸÂÍ)|qõE? ȹiÿÿÐÚ™âßõºý…¡ÿÐZŸáoù-?àúUÙìtëNßQž’æÜb"ÎÛS¯!s·<žqšŒ?ðàý ŧ«ýN*óN¹û«£êMZëPià¾X @É!—¢í^1œñ€9«Zæ›{2ø°%œòyòÙy[b'Í ·vÞ9ÆqÒ»Ÿ´§£Qö”ôjÕh¿¯/ò0ësÊÅ­|u4V¦+i´ørëÔy¿~…€Ç¾1Yzuš=Ã÷¶q½íÍË­ÇÙØÄc“D˜ÆyéœäWaö”ôj>ÒžJÚ[ɯÆáÖþîV<½¬Ic#,ÁÇ$NõÜý¥=´§£Q'{ù„}Ûy•Ý¥ýŽ»u¥iùè€F<¬Fó+)è ÁéXÖZ~©y«µ¹ÔL·1„Kwb-16NaTg¯8ÏZôo´§£S%–¢x\£©Vãƒî 'þÿÌŸ‡áoò<âá£w§éº^™s¦Ý®wI­Ì8r¨ Fžã#š±¥h¶·VÏöèõðÐéÏm$ §¤@#’1挌]v›£éUÃ\Z[Ëç²l2Ë3ÊÁzíØ=…j}¥=›×úõÿ1%oëÓüŽ{Â_¶[Ï ÆÎ‹ms=™µ–AƒÈ@Î8ù°3𿮬¦šÏZÒcÑo¥uª<¶÷&Ô¬h7‚²y¤``x9¯FûJz5iOF§}oýtÿ!ô±çž-M^úêþÕá¿ù&„Ù%¶ž$ŽUIf—i*AÝÝqŽù«ú®‘-×ü&Åô÷•¦·ìÄÂI‘„?ÁÇ$6:w®Óí)èÔ}¥=§ìØiÙÜóÛëYía×ÒûG¼»¸Ô­ZÏ«MÜ…òÛ”!òyÀç5>«¢ê &›³4:¥ŒZ}ùPr†,ÞŸ)‘~¤Wwö”ôj>ÒžMëýzÿ™)Y[úéþGšVŸBÔÍÁžÊ84ÛUòÉicŽPÍ"Žà¼ÿ²knåg°ñ“Jµ¼™îîcûdsؓݠl¤Ó'$t®Ãí)èÔ}¥=õC<ê c«ÝYêm¬#ɪ¨ÞÞÉÃ#yÛ .†1Ž•éuÚSѨûJz5%¢H:ÜšŠ‡í)èÔ}¥=€&¢¡ûJz5iOF  ¨¨~ÒžGÚSѨj*´§£Qö”ôjšŠ‡í)èÔ}¥=€9/ÿÈÛoÿ^Oü¤ª^è>µo_Iâ»r3ÿN9ÿvJ©ážŸsÐÞ~¿¢:ñ_ ?ðþ¬îàû‚Š û‚Šè9]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@Õ—üƒíëŠè"§¨,¿äkÿ\SÿA=5ãö?úæÿÍjÁªëÿ©ÿ\ßù­X4ôª¯Ö­?J¬ãš@Eoÿ!)ÿë„_ú•·©M¦<±·Ú/b·}àœ+g$`õ©àÿœÿõÂ/ý Jƒ[ÓfÔ†ž!h×ì÷±\>òFUs0:Ó[¯T>å ückÒ©ÓµŠ;ƒkç$jQ¥Î6›<ž2@zÏ]ŽöÞíã²¼[‹FÛ-£ª‰r@#6Óx泛÷maq™ù5a|ã‚EltûØÛÞ“RðåíÛëMð§Û^K0 #r>@lcŒðh[^_ðC¯õæ]ÄÖ_b½¸¹ŠâѬ˜,Ð̃x'ps‘Œn¹­ˆÇÒõÊ‘AH÷ÊXdóãw"¢OZ1c&¨Ãs'’H”,H6=Ç##‘SÜè×Xh+ÄÆxd”’pB)oýñUo<;wqc­À’@þí'ˆ–8 yÝÇ_ôÏjzsyÃÁ'[/ë¿ü¦®NãÄ7VÑ+Áç^ÕÚÑ£1"¶Ð ÚŸ0à’+V_h6ó<3kI,lUѦPTŽ óYáëãfÒ[MjÓ®ªÚ„™¶:žŠÄ ƒ‚zIo~ŸðWéq½¼ÿà?Ôѹñ vÍ_Ù×òÝ4^sÛDˆÏgo›o\ð 'TøºÍ<“mi{z²Z‹½Öñ©Ûq“¹üMRÔü5w¨ÅªKc¤]Ü5¸†k{¢Æ5 ’i=ðr9«Öú°ê_hDµ†ìÑj"‹ +î$àcîóõö¥­¾ÿ×þÿ¯Ëþ .›âk]JîÖî´Äf·’xÀY”c%pIèAÁ›­ê:¾§¦XiÍjxeÜ÷³…»¸ ËPXèv¿ðŽî’tÛgŠ\óFÞ9ñI{ \ëSèòëXL-¼Ós†(ņhaÎ8ëTÒè%æ%§ŠLv×cPd¹¶»Š,apäx<ò ãšMGÅ%t+Û«Kyb½´–4’ÚáuÜÊ:ƒx9ÅA…¯l­RÞÆ[eKÏ´éáó÷H!£“ý£†==)óøoP¿²Õ¥ºšÚ=BøÄQcÜÑF"9PIœœäã¿J_×åÿ y5yã²Kƒ£j,ÌÄD]@î~|cèI¬Û»]hÒiö³]ÚßG+˜ãU|¡q÷˜‚Ny¨µMVÕžÎâòÛKœÂ$W²’i -œaó³–=W½2×Ú¦c¢5£Y=Þž²£Ç#²ÆË'£'Ž;P¼ÀÒ½ñ=­Œ³#Z^J¶Ê¯u$Q†[pF~nzã“·ÓšÞIãfQŒ•Á'¡ ŠßB–Kí–°Ãýš-DQd}Äœ }Þ~¾ÕŽwkÿîé 'M¶x¥Á?1(mã‘‘ßÿ¯Ïþ_—ü|K®\iWšm¼76©tÒžô‰µAzôëE¯ˆÏ›¡T¸•<ß;LEò–=ÛrKH{ƒœR>•¨^ßè·—æÌÉiç…‹vÓ¹p»ALæ­&™"x™µ1‹sf-½»ylãÇ>´-ÁìA'Š,ã»h½Û[¬âÝï1䬄ãi9ÏR@Æ{Ñ'Š,ã»h½Û[¬âÝï1䬄ãi9ÏRqŒ÷¬»›]^Y?³´‹»ynŒþ}‘™£ -Í-7\‹Q»–ÐÚÝZ\F‹'—r€BH 0HÆGÖ«kÙ1ù¯ayq ¡y%U„`u',ä V“L¾MfMFÙ­÷gýž1!ly‰à}ßÖ²µß j:µÃO$ZuÛKf!)pî«o'9xþVÎsßÍËúÜŸõ±³uâx&‚ {k«é¦ˆN#µ@JÆz1,@ýsYwZåÜ÷ZöžÖ3¼ÂÊt[Žü¶s“Ø™4]SNº¶»ÓšÎYE”v“ÅpÌŠvte` îx"£¾ÓõK9µ{ȾÆö·¶á§ ì6XÊ£`p:‘J¥¹_Ïúû‹¥~xü ȹiÿÿÐÚ©ø—X}>pá"–õ"˜ì.vs€9Ï¥\ð·ü‹–Ÿð?ý ªŸ‰­o.!Ó¥²µk—µ½Žv‰]T²€s‚Ä óëYÐþ>_¡®+øÕ=eú“§‰4™4Ùõ»Åµ»m˜´l¬‡Ž ¸GïCø“KŽÊ+·šUŽW)µ¼‚GaÔöî?•sך.­¨Ùkwod ¸¿{q§š¥‚ÆÃ,ÌÜžz€Uÿè÷wšŽ›¨[Cqp¶Ë$rAovmä!ñó+:mä3šÕœæ›ø‹KM>ñ<’[LHG† $é×!T‘Œs*¥Îº¿Úº)¶ºˆé×qM+ÉÆ ª‚ON¦²fÒ5 {{²°Ô’È™^æÒD,þkC4…þa× 7SÞ¨·ƒu íÃö3«Û›Xçó›z¿–Ä‚†~pHär(³“TŠ] ]NÒUy ,rM…À‚W±Çn£¥T›Åe„6ÂþëKn³Ÿ& vŸâáNÕÏ®)eMGPð•Ô6k¡%´‘‘Ô©m¤§8Áê3Ó<Õ=ö=F9dƒ-IÞ§÷€ò½^”=/ýtðtþº¯ø&žŸâ='Tºû5×™)O1AÔ:ú©`zŒÓíuí:òý¬b™Åȼ¹ax÷pJ–6=³X–6¥ø\´!ÆÎH§%ÔùlcP^y³Ò¨é:.´ÚÞ›q¨[ß `Že¹¹šõeٗƾQžÛGjo{ ltqx£Gšý,¢»/3ÈbR"}Œã9PøÚO¿j}·ˆô›»ñeØiز¯îØ+•ûÁ\¬G &¸è>×ðÎ…5ª/Ù®È[˜gGYBÇ ÜîN@Á«ÞðäöXÚßé×®lœ˜îÿ´KA ±È$co43¤›T[mbky§-â³ûK®Çó ¶~îÜj£x»LšÂökLÓ[ZµÈŠHž"êr7(È÷ëPkMíÖ­©O £›HkhÛzŒÈYˆ^O¸ç¥V¿Ð/ï"Ó"X‚ìÒ§µ•Ë #º Pyçzg¥/³ýyÿ’ûÊÓ›úòÿ‚jÛxŸN—F]Jy$·ˆæÁ"|Ì Am¹Í^Óµ[-Z–Êo1Q¶8*Q‘½XÔW8öºÅÖ•¥;i&+­*häû<“ÆEÀTí 9±øV–‡g{ý©©ê·¶ßdkÃ¥¹p쪀ÌW#'=‰à §k²Uì®Tñ‹­4ûyಹݱÆ@…—PAlmðNkAµÈ-nµO¶Ý[¥½™ˆaQ÷®áѸÃOsךN³}£C¦ˆ®/¾ÓâLB´¡ÈpÄ6G#€sÅ_ºÒ'{½~IôÙ.àº{v…"™cvØ£,¤°ÚTŒòGJ_gúòSJmr9!±šÒUHî.Öö˜%Flç!A†ã‚F)Òø—H‡Q62^8qù¢¹è¥ñ´bs\Ü‹©G¨ïçeÞ9¤G˜D±¼¯Žy±Í>çEÕΨè1Ø+ÁyvÓ ÿ9B¢;ï%—ïn:sM_‡ùƒþ¿}õÈm.5V½ºm¬ŒyÙïMÃø¸ÁÉØÞ7òܲ2²¿÷J»w#Œf«Ú] sauÝx–Ò­Ä«e;@ Ä`‚x¬itymímµ }:hnaÔâK{ëá#Ï„)÷Ë0 ƒÆOðÕ[¯5­Zîî+2‚=j $C*6ÅH@<ƒ‚FGž´Ö¯îý?ÌOo¿õ:¹|K¤C¨›/œ8ŒüŒQ\ôRøÚ±9¦Þø£GÓïd´º»håo˜|—).ÕüM`\躹ӵ;x/.Úaç(TG}ä²ýíàÀÇNjíæ}*x±R ßo·T¶Ë¯ïˆ¯¯úâ§¥ÊëcdëºwöŸöp™Þ䬱ÂìªHÈ ÀmSŽy5£\pÓµ[}bÖM>ÆæÕ‹ÅöÉÄf ( Jd¶ì éÖ»¢S (¢ÂŠ( _Yÿ‘¢úóýJƒÃ=?ŸYÿ‘¢úóýJƒÃ=?硼ýDuâ¾áýYÝÁ÷A÷Ðr ºÿVkÏ|Eÿ1×EþuèW_êÍyãæ/úè¿Î€;«/ùÚÿ×ÿÐEOPYÈ>×þ¸§þ‚*´ÕÆ­6™¹¹‰rF8'¸¹gëõÀÆo.t—k2…*vŒ‘œsœoaô›þü¿øSX&H·R¥˜¯SŒqúÓÍ”>³ßçÿ¯`#¤ÿø'ÿP5Ô?ݸÿÀi?øš¬ ¬ÿø'ÿP5¬?Þ¸ÿÀ™?øª@Šïs5Ã#"²¬h`¥ŽqÛï~•r¸³¦-™ÙÕ.#tf9 2È0O~TþuÀÓݨ¯ ¢€=ÚŠðšóÿ‰¿ó ÿ¶¿û%}mE|E}íE|Éà_ i¶Z$ÒxƒF7fýT†1¬†9|êÇ9%rzt+\§ˆüöow{¡³Þipd¾÷_> 0ÝÛ€¤'VäŸ%Dâº7³ù–éÔNÎ,ûŠø&ŠØƒïj+àš÷ïȳ¥ל?ú x¢¼fŠöj+Æh f¢¼fŠöj+Æh f¢¼fŠöj+Æh f¢¼fŠöj+Æh f¢¼fŠöj+Æh f¢¼fŠöj+Æh f¢¼fŠöj+Æh fªz·ü¯¿ëÞOý×’Ò¼>µ3øY¥/Ž>¨ôß ȹiÿÿÐÚ¶~ËþßéXÞÿ‘rÓþÿ¡µ[ÖïšÉôÀ·ÃçÞÇ òâWÞ?)Ü~PqÔsQCøp^H¼WñçêËßeÿoô£ì¿íþ•?Œl º• µëZC0·šùbäÈ'9à €{ÓgñZmλ5Ì×3Ãb`JBƒfõs–É#ïc¯™‡‘·ö_öÿJ>ËþßéTt­zRêâÑ­.ì®íÕ]àºE µ³†IpG^ÕgâùÒÛX¸¾Ó.ÞÞÂâuûD Í‘¶1‚û‹cÛÓ}—ý¿Ò²ÿ·úVtž'ÓbÔ®,YÛÍ‚ËíÎØ|¿cž½ÿTŸÆÖ+˜–”É =ËEo³+.á¿æëŽH]Ä ?¯ëîëúûÍï²ÿ·úR}—ý¿Ò³õíMm¼6ú…½ÛćËdžÖC†eˆ þµSSñ•ž—wy –„ÑÙ77Ƭ‘ùƒ= »í¼=¦Ù\<ö–VLÿzH­ÕY¾¤rjïÙÛý+;Mñ:ÕÅ©±½µº†!7‘pŠÐä\1‘Ž¢›kâ{Y¥»†îÖïN–Ö´H—j£÷\üà«0 `÷Íiý—ý¿Ò²ÿ·úV%·Œì¦{+û(¤·{˜çºU4³ 1aÁ(Æv${«[ë$[f»®bΉq’¸$ç‘ÁÁç¥mý—ý¿Ò²ÿ·úTV¤Úœ +i÷–c¢ä .ÎFÖoÖ¹3Å­g6¦º½ûÛG©Ë½òÔà îTœäëŒ õ¢ÚØ:\ë~ËþßéGÙÛý+?Tñ zE­ՅïÙK"µâ"±ÀÏÍ»©íïUuZi×·–ïa¨MCuq jÑÂdó#œ@m¤Z½âÞ40›¤]‹1ˆUô ×?ÙÛý+œñŠÒÚÇT·Ó­¯®n-íYÞâÚ5)nY RÄ‘Î0xŠžßÅ6¶ºdÆðOæÙiÑ^LÄÞ+)åyäåHçâŽÿ]È;]¿ÌÜû/û¥eÿoô®wXñeªiéöY®by­c¼Yâ…$ÙHª @ÉÝÀúVšx‚9µ™tÛ{É̱ÏpŠžTLT6 ,B:Ö‚åÿ²ÿ·úQö_öÿJÈ—ÅÖ1^4_f¼kd¸¯z±!%'IÎz23Þ·ét¸y.ô‹[ø<‹Èa¸ˆœùsDsô4¶Ú]½œ ¬qA ýØâŒ* zНö_öÿJ>ËþßéV(  ÿeÿoô£ì¿íþ•bНö_öÿJ>ËþßéV(  ÿeÿoô£ì¿íþ•bŠâuèü¿À3Ÿô'?øì•WÃ=?»â?ùmÿëÉÿ”•KÃ=?硼ýDuâ¾áýYÝÁ÷A÷Ðr ºÿVkÏ|Eÿ1×EþuèW_êÍyãæ/úè¿Î€;«!:ØÓÿÐEfÁá]Úæ;ˆm¥Yc}êßi”á½yjѳ8Ó­ˆâàwùEbÚøÂÖîþ;(ôûñ;ÈcÚËÊG\üùw ãõ?ë›ÿ5ª>"¾¸´ÓÒ+& }w*ÛÛ’3µ›«c¾Ð ~yãö?úæÿÍk?Tðý¶±©Û\_ˆî-mãu[Y#ܥ؜’{€1ÜÒ]zþ?OpÅF¥i/Ù®¤ÙŒ+I´vÚwã§4Ý Wk­^öÀj±jÅr¥ÊlÈÜH*v|½éÞ´mü:4©ï¤Ò%†Î+”@°}ŸrG"ç.aÔ`cŽ™Ín‘ýŸ%ÅÄ× sypG›3(QÑUG ž=éÿ_׿×õù~,±—P„Å"°ò[.HýðþµÈÂ7yÿ= ÿ¾øWmâ-OO҃ϩ\‹xXBˆ'-ûãŽ=¬Ènìïm–k)üõ/´áq·ëžGoÌRMmq¸ÎÜÖÓ¹ÎÿÂ3{Œ‰ ?ð#þh²Æ$iîm HÆYårq[ºÞµ`—3Dò™dFˆ@ËHÉ=Ëïô®#Rñf©{æ!ŠÑ ðß"‘èzsÓÿ¯C”VáÊ[#N-:iä+:«mgY••xÏ89ý+Í>&ÿÌ/þÚÿì•êöÞÓµ ¼»¹ºÔÄ \ª€ÁNT Îúä×”|Mÿ˜_ýµÿÙ))&ô*tå \óúè¼/¢éþâ’Θßpó]áHã*>nN:dqXÖ7•äv–¨gÎ`$œŸ@ ¯M{Í;NÓ­tøÚkX-##ºBfnYÆ7/±ÎîÀíU§R5[+ø‚×ìò-àL‡±Ç#ŒgÞ H- ÓâfÉ {„¨¼Ž2YqÈ'¯×'¨^$¶¡amÁ¹$‚¡Ò–{›Ä´ŽâXã›å}—>Ý3]ô±ñ¤¤êFêÆ¥:ù—³\ܼ¯§™Óê?Û]ðí¾µcrƒQ»ÍÄŸ1t}Ü…$òã'žKuâ¼~úÂëM¹6÷´R€  ÷pkè¸/e‚¶Þÿg‘J²£`ž9Çùæ±õ×Q¶1\ijڳVç öÎ9SÖ¾n9•Ú¼tþ¶=o©i£<½ûÃßò,é_õçþ€+Ê|Aà»Í <öÛ®mcº1žã¸Çqï+Õ¼=ÿ"Εÿ^pÿè½*u#QsEÜâœ%iTQEY!EPEPEPEPEPEPEPEPEPEPEPEPEPJ>ðúÒR¼>µ3øY¥/Ž>¨ôß ȹiÿÿÐÚ ñMÄ3júï?´#¸0¯,#Pùr;zŸÂßò.ZÀÿô6­o´¿¢ÔPþ’/üj‹Íœ½Ç…µgµ¾Ñ¢žÈh÷—-;ÊÛ¼ôW}îq´óœ6FéSj~½¼øŠ[p5¶hw3|¢=»·qíÆ3]Ú_ÑhûKú-j´0*E¥Îž,¸ÕKGäIe¸PNíÊìÄãÆwª:n‹¨ÙÜêVs-”ÚEìóL[{ ‡™ÕJíÛŒçœþ³ö—ôZ>Òþ‹E´°_¡Ã‡ú“iE&¡]™¼›‰FïžÏj¦ÁÇÞÚŠ}3žkbó@Ö ºÕF‘-ˆµÕyŸhÜØ•Ãh9ï]Ú_ÑhûKú-]Ái±—ªxyçðrhvR 1¤1£ÌH#)çöZ©¨øjòò/,rÀ­$˜ü¥cÚwqÇ>™­ÿ´¿¢Ñö—ôZ·¿PZlbj^½¼Ô.ç‚í-üí+ìI"“½$ÜNî9õÍcÚx.H§%í¾™§[O¦5£›wÉÎL¹G8úýk³ûKú-iE£úüÿ̟קùyj'ñn­o§Ëuaso™qo%Öžîáw„P[ cŒíô5»¢ø^ãMŠPú'‡Vu·1$ð«1<|ãgʤuµtßiE£í/è´_Ÿù‰+_×c#Âú%î%ë\}žÞÞb†+ižH¡À;Š–Èà+.o ksÁ©iFKÓ/ï^âIƒ¹˜#0%BíÛž1ß…uiE£í/è´u¸Î7^ðUþ§¨ßJ‘i· s$O ÍÔŽ&µUÛ•@Œ|¤õxæµîü;wp£á+‹Ë㸉c·‰-ï”ç÷Ñ)WqýäïÙt_iE£í/è´ï­Åm-ýZ„~¾GÕm Í»Ë<‘GhI`#¶ŽMê§Ž¼·OjÐÔ4 Fïİ_ÛÅah±LŒ÷‘M žXÇXÝ…`zrNoý¥ý´¿¢Òì>ç)mà£g­M/ö^‰{m5Û\‹‹”"â ͸¨ùHlàäWmU>Òþ‹GÚ_Ñhé`ërÝSí/è´}¥ý€-ÑU>Òþ‹GÚ_ÑhÝSí/è´}¥ý€-ÑU>Òþ‹GÚ_ÑhÝSí/è´}¥ý€9ÿÈÛoÿ^Oü¤ª~éøÕvC'Š 'ñæã÷dªþéø×= çëú#¯ðÓÿêÎê¸(¢¸(®ƒe×ú³^{â/øù‹þº/ó¯BºÿVkÏ|Eÿ1×EþtÝYÈ>×þ¸§þ‚)‘éÖqjßÇ-ÔÊäHä~CÒŸeÿ û_úâŸú©è«ÿ±ÿ×7þkV W_øýþ¹¿óZ°h'éU[­Z~•UºÒÎ>/Ý ? <Šî³m–ª,|ìç$`mÜAäs^}ájšmäÜE.м²2•“Î<¹Ýö{çµzOÅ]MgÃwØZyNc<ª¯œ üs׌ׇèkü$úD–Ïv÷q¹’BÄ!9$m$w'#¡äT¸Ýé£5Ueʠߺºt=»ÄqE/„îíïnVÒìZµÛÄòªºle1®÷˜¨Îr Œž<ÚÒ‹ØÕíí¥pFsŒ/¿'óï^Ó¬èúf¯£ˆï-ZD ýc39 O,Ø9ÈÉ‚såÚN«cl·3ý–(ffŠ)¾VXÏ `òHçÔô®LÂu(Ñ禮ÿ®ÆØ.YTqnÉŽ¶×5k9tÔX¡’1ù™dn\rÚãŠà¾&ÿÌ/þÚÿì•ÖÞ^A}­¯ö~ÙLÑ…l¡O˜É'“ò“Û°ü!ÕF‘·¥jÄ Ciæ<1†;ž_©Ú,«‚OáØ×£†¤Üyj[ÞN÷ü~v8êMûyÅKš*ÖþïøI´ ¯o¡uÔ.ãýä2.Ö†<œ(#dž#ŽÀŒ©ÏSý›¥ê–¯§Î¨•[9èAõÎsõïÍV±¼¸Õ¬Ìþi–?ÂÛÕpNvàÿ½ÏÖ®ÛZ¢Û,°ÐyÀ?Ëò(ÇQPååÙ­ÉÂÕnüÝÅ\|?2Y\ßÛ^í®ÿ.$çolúžÃŸjÊÓíO•MìóùRXW Æ äñ¸^µÙ@Z‰aÈ“r± Wq éú籪 a=ô -eòÓ).J)îJ€wuë­qT~ëKcÕ¡*u,æ­"Ö;·‘{¬‡;$S˜§_U=úÏ· lÇ#FÛd«Œ‚;äzW?ä‹1åX‰Ü%Oš>¹ äsœt88äf­A©RÂâU{Rûaº ¸mêžÌ'§ÔøµhÊ.èìz>Pñ Õ–•¡Í¨I"lAòÂî3Ÿº£×$vIàSh÷ w¢X\¸PòÛG#è Px¯&ñω·ªµµ³°±·bC‚²8È2 vǓǴ”£ï­LþiKãª=7Âßò.ZÀÿô6ªúõж}(fqæßÇî¦ÙÔ7Þàî^:qš±áoù-?àúVwˆ[½SF³‚ÚwhïæIDGËDPÙËôÏN:óQ‡þ>Eâ¿SÖ_©þ,–/´Ý¦˜Ï¤ÛN`šïÎ µ˜GŽTùƒÅ2ë^eLj.ç6­noqò1pÚ1òuç®ióøNY~Óhš›&“s9žkO$$¶æQ&xR{`žO5-÷…þÛý­‹½ŸÚªÏ—åãßœãÛªÛ_ëc¥/X¹»Ôntëû³»†4”›ÍGF$¸#¬{-{X†Ë[¼’Î;»k;›ö®B.Ì`ù®4Íž ›Uó³æ[%¿•·¦ÖfÎsþ×Lvª¶:ÅõæÛä}:êY&{Wƒæ ý~}Ý3Î1øÑþOóó_‘^_ÚG©\ÚùdÇŸöï;w :•é×OãPÂW{$RÉm¢4«i Ix>ÐÆÌÊ +óû5]|Ó-ìÛP•š;Ÿ1å)Ìà/”yéµTgÛ8­ ï ÜÍu}%†¨lá¿P.£ò’Bíʤ¯J—õýmòçý[üÉ5ÝN#áC¨ÂÓ˜d:4ùNC2ã ƒŽ¾žÕSTñ]ÖŸs©ˆt‘qk¦ª5Ä¿iØøeÏÊ»yÀ÷¥¨èQ^xxhðIäD«#mÝ´!q‘ýÜU{Ï }®=u~׳ûV5Lùyò°›s׿õíCë`KŽÓõÛ™ï®,otô´¹ŽÜ\ÆàHŽ„‘Ëm9ñTì ŒÖÍ%Å‹Z·Ï´ó³`u+£ÓôVÆ…µxe —› ¬§³1 ó~C4?ëñÿ€%çýmÿ³¢jSê¶_j– hѰc6÷^xaŽçhÁöæ¹ËOE¡éºŒó•w—Xš„³×9þ'<*€5¹¡èO¥]_]Ís³^. ·òcAçnO'<œóÅT—ÂEÒãËÔ noõ³ù ˜d# ?:œž8ëG_ëºOë³2u\kZLpéû#¹:Œv’‹kÜ«©¾I”pL‘Í[‚÷WÓõøìq¼ië4éq~Ì"Ì–ó ~|t­GÐîîa²—ðÉ-µâÜîŠ×Ë ·Ž:õÉúSï´[™µ¨õ;+õ¶“Éû<É$jÈ›· |ÓÏ=zS_×Ýþ`ÿ¯¿üŠ÷^)ŽK‹;}-uI.Z@.¢lœ° Îã kɧ]k“Ï˵¹·Q›z³º€nIúõâµ'ÑÒ]cO¿Ö!h%Z§ßÞëž1JÍÕôš jæY®^dQm i"hñ´¨ÝȥР¯kÚŒºN§cs§­Ô1A:ùW^``Ò…ÆvŒ­O¬ø—R‹LÔ-ÚÐXêvâ dâDtyðÛF:xª¶š>¥â­RKÛ‰’9`‚ç–ÄÛ’RBç³g98ëÇJÞÕ¼0ºµÕìÍvÑ}¢Ö8*d£#— מHãÛ­>Âïývÿ‚kÙIw-°kÛx ›')ÆEÇo˜ªÿ*±Ul"¼†Ø%õÔw3dþò8|¡M¹?έR (¢€ (¢€ (¢€ (¢€ (¢€9}gþFˆ?ëÍÿô* ÿZ›Yÿ‘¢úóýJ‡Ã?Ö¹èo?_Ñx¯†ŸøVwP}ÁE}ÁEtƒ.¿ÕšóßÇÌ_õÑz×ú³^{â/øù‹þº/ó êËþAö¿õÅ?ôSÔ_òµÿ®)ÿ Šž€¿ñûýsæµ`ÕuÿØÿë›ÿ5«€"~•UºÕ§éU[­ 8ÏêÇG†ÚsšÞIà†æ6Ë-Æå`AqÔ`ôõæ¼ÎÇHÐ|} |b‚Ü᣷…V[‚¥””p¤…ê 9çµzޱö<•Fù¡u 9ކ¼Ûû'OÄÃìP9ÕÜ”ÈÎ0‡©à`P›M²šHè¥øy©ièÚ5 †';Dòç¦H`GÊAíßƒŽ¼Ž»¡_ZXG«Þ4ŽeœÁ#KÃoäþ=^sô­kxÒÕY`@†Òê?Ïôô«Ój—·6XÏ7›kŒ¬R(e;>è90èsžù®¬.#ص6½äÿ¯¼ç­KŸÝOCˆÓVáo–{x'”[6_&=åcy Á<œVoÄ™d‚]"X¤häF•‘Ðà© ö5êQøRŠÄØÆöéfUÛ­¤B2­œ»qƒ“Ÿ­yWÄßù…ÿÛ_ý’«ŠúÕ_hãm,*%kÜOxú-1§µÖÃËĦoµíóHØ _'$`g#-x$ñëA’æÑ'Óf‰¢*Y'ŠD‘i¶ç!€ÈŒs‚+æjè<+âýG—ë5©Ym‰ýõ´˜*êqœ§åAœŽ+ŠQ}˜µ³=ÙƒI§ ¶²‰îD‡rnp;[Û`Ôm¦\¤í ¶òâšc¼Cón¨3ÛÒ¬øKÆ:7ŒmÉGz#âÒ\îsÔ7ñ.OQþÎ@$ é|µòŒŠä êGo­^wÔËÛÉK•t<ïRŽø$÷v¢á£Æ^9SÀá±ß<ŽG>µÄxëÅP\[,|̳ÞG¶ù8HÛøž{ç¯Pñf»gá½"[Ù·3õq+m.äü g ÎOà1ÁÅ|áuu=íÜ·W2'•‹»žäÖt—ºÓ[þ‡lñ Ç—© {÷‡¿äYÒ¿ëÎýW€×¿x{þE+þ¼áÿÐlršTQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEzo…?äZ´ÿÿèm[ÞDÝýM`øOþE›Oøþ†ÔÿL±I¢n‚)wêq ó7|„†ù†çë‘íB[ n÷lÛò#þïêhò#þïêk¸ñN¬–·ÚÌVöGG³¹h&Ý纣ìw £œáprZeöµ&—qâ›»;[aqÚ…w |Âê£/óvÏlPµ²ò#þïêhò#þïêkHÔõ6ÖîôXZ<ÑAÄsZ£"²1eÁV$‚ ú÷¬=6÷_ƒLñõ´ö³Çowva‚hœ•níàmÀÀ£ü®çc¶ò#þïêhò#þïêk—Çjš…ÈX£kôϵÇ/9yB‡Ù×û®‡ñ¥_xŽæ+×¶·Ó•´ÈPݤ¡ó,¦0쩃ò;¹¡é¸-mn§_äGýßÔÑäGýßÔ×7â-N¿ÿi-²Mé«ÙÆÐŒí ñŸ^ÕOZñ.¹gs®Iežm4„Þ9‘÷Êw0l } MÁk±Øyÿwõ4yÿwõ5ÎY뺅¾£ye¬É`¾]½ŽædE\C†cÓäÎÓüo0}L^ù71ÚX›Ô–ÞÖ[}ê vÉœöÃŽhþ¿¯¸7þ¿®çiäGýßÔÑäGýßÔ×/Š5­"XeÖ"°ky¬'¼Z£‡Ë v–,Cgv3QØx¿[ŸÍΚ.Ù¬Þâ%†Êâ’(FZA‡Îx+Ž9=?¯_òïý]Î×Èû¿©£Èû¿©¬o jÓjörÉq{eq"0 –мM Ç*êìH?•bèúž£aeâRæâ)´ëK˶òLlfùO9lÛhzoÚàµÛ½ŽÏÈû¿©£Èû¿©®nËZÖ`Ô´Û}b+§˜~Ê]W~ÖÜNî3ÈÇ#¥QÓ¼Q­5¦—ª_Ç`Ú~¡p-Â@޲ÂYŠ©$± 29àu§ml.uî–ñíÞUw«¹±“è=éþDÝýMq~'ÕÓT\z^õº‡V„wk,h‡ÇP7CV$ñV¡§[j¶÷ööÓjVOD`Ü‘Mç! ’W9äô¤µWþº˜=¿®§YäGýßÔÑäGýßÔשk½µ¦±¥êfÛí?ÙRÝÛÜYA€ CA‚yöª÷²kÉ¢xouý¯Ú&½€Fé ªí11ăÌËþb…¯áø»ÓñüÎãÈû¿©£Èû¿©®R]sÄ-&¤¶‰¦È4•äÈŽ¿h}›ÈA¸ì#“»šKj××p¦Š¶Iék¨ÿ¥Æì['„ùXcëÍëýwýß×õêužDÝýMDÝýMrº'ˆõk«Ý#íñÙm^Õ§ƒìêáâ*¶±$†àõt®º›Vw#ò#þïêhò#þïêjJ) Èû¿©£Èû¿©©( üˆÿ»úš<ˆÿ»úš’ŠÈû¿©£Èû¿©©( +Ä©âËp£ìOÿ ÉU|5ýjçˆÿäm·ÿ¯'þRU? Z硼ýDuâ¾áýYÝA÷A÷Ðr ºÿVkÏ|Eÿ1×EþuèW_êÍyãæ/úè¿Î€;«/ùÚÿ×ÿÐEOPYÈ>×þ¸§þ‚*zjÿÇìõÍÿšÕƒU×þ?cÿ®oüÖ¬‰úUVëVŸ¥Un´€ä|pŒö˜Q“ºý­\'‘'÷Zõ‹ßøø—þ¹Eüå¬+]\Á©].DRR%ÎXœ£Ü‘\u±n”¹To·^汧̯s„ò$þïëG‘'÷Zëïõ™¥¶…,⹆á®Å¼±íÍO·ŽÎ@䌷§j73ß\ÚKm)XWÏ;ð+Øo½’~èÅgõé%~_Çþ^É^×8_"OîþµÇøëú®³ö°ZùÞW™¿÷ЏÎÜu#Ð×´¦°Éy¨¥Ä ¶ÖÍÂãjŠÄ›q<žƒÒ¬Xê‘ÞÌЛyíæT@,§£ þ"“ÇÉ+ò~?ðØ®çËßð€ø›þŸù?þ*ø@|Mÿ@Ïüÿ_DÇâ–¿1yÖ2Ÿ¶5¿Ù0PØß÷AÉàUäÖ’5ØêîvšeXÑ0Ø=ÀÚ8''Ч’ûüöK¹ó\^ñT$ÐØ&ÿ gþGÿН_Ñ­å´Ðôûi×d±[G®AÃŒzì.u›ÕG{híÊÛZ%ÔáÁËîÉÚ¸0HçæÆiÑk°Kx 6÷£Jð¤îc:g `ät=@éKëòµù?øìWs¢ºØ¼Cg"³¼sÃ’Ó¤² ,kÕ—žã‚æ›a©Ï{­MA=¼+lŽ±Ìª %›æàžÀuü©ýzZÞüö+¹ÊQ]JëkØ!»¼‘圈€¨°ˆ Œw4è5¦¹Ô–(mÞ[G¶Žu•v›‹rÙ`q€:zÑõéoÉøÿÀb»œ¥ÖÃâ9;Ç<1y-:K*²F½YpIî:€y¤_@c5­Ü £„‘Ws‡%Wh y$c}zÉøÿÀb»œ×z!?dº3ùÿg6ø]áöîþöÜcœæ´‰‘à܃d…rŒàã¾ò©y‹[Ãñÿ€5A>§ŸÑ]n¨Ü_IyÇ–Z bh‰ÈÏ(Ä‘õïPéÚÛ4ÏÜSü×rÃÁUòÉ ÛWƒžƒƩ㥪äÛÏþ½ŠÞç1Eu²ëñAç,öwqËR#`™3mpØëêE/öôI&Úä\ ¼³m_3~7c®ß»ÎsŠ__—ò~?ðØ®ç#Etz~¼î<¹mîe¸–y¶Ä¡"+㜰dt$ÖÕÝÔvVs]MŸ.$.Ø8K(»8~?ðQO©ÁQ]ö»4RY(k}9'Y {ðÝÛŒmp9ϯjt:Ííä1[à ]܉¼Œjˆq¼ ##¯Z¯®Ê×äüày Ù.ç5EtwúµåŒ–pM}¦@ò‰KÏ*W<úšÓÒ/_QÒຑ@x\àà‘‘žÇZRǵn]=à QWµÍ ÿȳiÿÿÐÚŸ®Ú_j:®‘‡ìÖ×Kw-ÓH¡FÐÃ`\î$ävǽOh Ã*¤ú˜K¼‹µK-â@c\,~c„MïÌzž§Ú»©Ïš1Ÿ£1’µÑFXOu+››Õ´šaq5ŠÊIrF3Éö©¯³£C­[×íË™5ð„KŽÂMSS‘`‘$¶™åO2Ü Âí!qÓ˜ÓóûíùÑæ?÷Ûó  ©¼k9¶§©©¸ŒGw²e_µÇÏ…ëŽ2»x­Ðlã¿7qïŒýŒYÔ€‹9ëøÔžcÿ}¿:<Çþû~tZ×ÖvŸÙ\“Ÿì¨Z70ù”¨S»ŽNlVÅf%âI4Çp­,Xó_%222;dSÚb‹¹¤*=Kb†î…CÌï·çG˜ÿßo΀/ÑT<Çþû~tyýöüèý˜—‰$ÒC´±cÌE|”ÈÈÈí‘Ryýöüèý“w¨Eal×7S˜áRbO8©?˜ÿßo΀9¿ÿÈÛoÿ^Oü¤ª~þ¦¦Ö‰oÀI'ý úÿ»%Cá¯êkž†óõý׊øiÿ…~lî û‚Š û‚Šè9]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@Õ—üƒíëŠè"§¨,¿äkÿ\SÿA=5ãö?úæÿÍjÁªëÿ±ÿ×7þkV Dý*«u«OÒª·Z@PºF’êUE,|¨¸=å®e|-~úJé—7ËlŠ»² ‚¤NX‚8äcšìmÿä%?ýp‹ÿB’©Oâk85ÔÓŸ•æÏÊŽz)úþ™¼sTÂóÏšöÿ€i–V±‡oá¹`KaåCCq石YùJÿ!\c'žzÕ˜t‹Û}Râæ7o"à‡’'pP¹ žŒWQ(ÜðÆI #á°qÆÒ¥MöKoù÷‹þø“À§¼¿"½¯‘ÅMáë™§¾ÜZ^¯ïbòNàÛBå[¢­noÁ¶ò8á¹”+£:Ü%Ûܤ¾Ià3ÈFy?Z©w¡êvOú|7Üoœ’!R¡dmØ!zrn•è_e¶ÿŸxïGÙm¿çÞûàSX+} ö¾Gká{¥Ó YÖItô³lDHRe½þ÷Oj™ô]VÔÞËa)tÈGƒ‘ @ †Îàk¶k{DRÍ  d’€([{GPË ¤d€‚(x+»¹~[t9¹¬.'³’I2ñ”-°÷Î*…džVêÆ(d[‘,Væ–6‘8 ¤dp v¿e¶ÿŸxïGÙmçÞûàT¬½-¤Çíßcƒ›Â· Š æ‰$·[kÑ2 ÏBNTòFyëíRKá©Þåö<‰g,±Í,NK2clð>UÈÁéÚ»)bH%„Ä¡±FUå'8ü*Z¯©{ò'Úô±ÂÉáiä{‰iÄ—i$w,#?:‘…g½º÷õ©`Ð/“írK17À WŠØ¢ àíÉÉç×ò®ÖŠ_Qº·7à‡íµ½Ž2ó@ºŸJ¶°·>Tpì ë"¨û¤8Î;ö«éwwZT¶w[‹KFÒC @ã€IþuÕÑKê ý U­Ðã¬4;«{™nnOŸ,‘¤»·1¨UÎ8ÉÉç­Aqá»Ë‹«Ÿß2Ú]H’K·;ŽÐ£³À;Gjî(§õoÍø öºZǾ½†xç¶™’T–f%í˲6â¸Èä`sŸÂ¬ßè÷—7\Û;Ab©8#Ÿ”üÇÖ»Š)}Gûß‚mäyüû%•Ϳ٢’7¢C˜Žr«çþÞ ‡Ãº®¨.Ϋ ¦øâŽ-Ð.rŒ[,¡™HÉõçžz=A{+Ac<É÷’2Ã>«ê\…í<ŽBßÃrÀ–Ãʆ6†ãÏ?f³ò•þB¸ÆO<õ«–öz§ØåY· †y 7—ŠXíàc8®4¨Y¤šåœŽOœËŸÀ)²-¿¿sÿþ5¥¼†«[drö:Eå½Ì÷WNÓÜLIH js€O©ïUÃW†lKpíj·r‘%¹VÄ‘–ÉÈöµvÙßß¹ÿÀ‡ÿ?²-¿¿sÿþ4þ£­ù¿ÛÈàmü<˦vÆ»£´(Ͳ@ùs¸îcŒgŠ¿?‡.^æ[¨d’;ƒp³ÆÆÁŒ!gF}:×_ý‘mýûŸüñ¨æ³K“C$ßë^BÀ†`½þ¹ü)¼nî_{UØâåð­ìÖ_gy–•åy>Æw+3g1ß!¼Ö”:›XKà™ÙŸk4[•T±ÚÏ®²ŠOš³—àV³½ŽÏÂ’[Î’KûÄnaKr‘áÂŒ*äí/Nzšzønò(m|‹‰VâÓrÃ+BXygøgœ9Èé]ÅÞ ûËðAí|Ž <1¨Å$sÇr¿hW•ݞ̲7™ŒáwŒco©­-3H—M²ádïgfòö‚X’pAÏJêè¥,2³—àU¶¶+Ù+%¢+Ï{šÃñÄI£„ÙûÍF$mÈ­Á Ó#ƒî9®’¹ý[M¼Ôµ=7i,mg[—bÇÌgPÀ(Æ9çð®ÚqäQk~Rw»õ0.u­`iÚŽ½ú$wm°òT«¢>¾öãÔ`ã§íOV½´oËk"E,/j±8‰2»Âƒž>n½óŠß—ÃZDÚ¾’ÌˉÎÁÇF)¤û‘šš}N¹û_o»í…†ò˜ÛÐñŒ•Km­…ÔÏÒn5 Þi7·Íz‰mÄSzù×rœ펵¥­]ß>³§i6W_cûJK,—5vÂcåPÀŒÝÁàU«éW/lïkµ­PG ŠGj |¿)>£¤ØêÑÆ—°ïòÛtl®ÈÈ}C)~‡þdœf¡syªéö¶7W9šß][CskûÀ ÛH+žFF1‘[>+­¼4/3LÈñ#*©oÞ¯8Pä+Z= LŠÖÖÚ;UXmeÄ¡ˆÃŒüÄç$òzç5föÊÛQ³–Òî!,Œ:FGÔr)ÞËúò_ë»9››­Y¯¼I–¨n!{o/li¿iP[à3c8ÜqT¯î[SÓ´dS»k„ÕÖ7šh9¡}ò”Û·##·zê[@Ó.Å ûFÏ5–y›`ÂüÁ²0cÏzþ­#û5¬ ¦mÚ_8æWÞdþöüîÝïœÒ[ýß t2uk­SJ¿€Ýj7‘iQÄ»ï"·‰÷I¸çÍ~UÆ9P^kGÄW÷VɧÛYL°K}t°}¡”7–6–$Á?.}iÒø[HœF³A4‰…÷R•`Fá» Ï÷³WïôëMNÐÚÞB²ÂH;I ‚:G Q@V¹w|Ú'ˆt‹Ë¿´µ©·Ûs媳,Œ>VmÈÁíÈ#Šéo-åÒü+¨r×2%¼®X£Âp ª…#ð©£ðæ•-‚Úÿ£ÌâIA‘‹;,Äî'Ôö«÷ñ]ÛKm:îŠT(ë’2¤`ŒŠOTÒz¦ÎA®õk»‹k[=LÙ*héwˆàƒ>qÈ+Àö¥Ñµ}P\è“^êh·Õmg¡D²ª·ÊTdŽHç5ÓG¤XÅ0™ ËqjöÿT:/_×­6-O„Xˆíð,c1[ìv)Éç€:橽[_Öÿð Kkÿ[Á93ÄòkÖ`K}>›}ÒD×PE!Få1ìù±ïJe®¯¬¼­.¥¾JãkY¤)±£°±¸‘´sŸZ謼1¤i×qÝZÛ:Ia3ÈÉn»T±UübÚøJq¯ZÞÉmei´í8[k‰_{GÜ`:äã4»XofVÐuŸêrØßˆ.^Ö豕8Ѓ´£ó îóÀ­? _ßIy%¦±wr5//{ZË,`g£e2ò$ŸZÒ·ðæ•ix×VöïŒX•Iœ&[© »h'>”ý?AӴˆ¸µ†O9“g™,ï+Îp “ì(@ÎwUÕolßÄòZÈ‘KÚ¬N"L®à “ÇÍ×¾qT|G>£ ž«¤]ê v«­ÄW #¦é‚v€§îäq]”úsö¿:ßwÛ 4ÿ; å1·¡ã)nô]:úK‰.m–V¸„A.æ8d1ž9$äsGoëúÔ‘{&©¡¦èêÒ‰.VY¤½’Ì›SEBçæëŽ‚­ø{R¸¹´¾KéVY,n¤·iÕv‰€w`p;Š•ü3¤Ée£ÛÈÑÄæHÙ®$2# »püêí–Ÿi§Y­¥¤  Ÿsœõ$žI>¦€9M'^¿ŸÄV(&¾›MÔW‰®àŠ1ò€ÊcÙócÞ•s^¿Ôl5xåšêæÏFX×3ÛÀ’€ûŽD»*¸Ç w95£eá#N¼ŽêÖÙÒHƒÁžFXÃuÚ¥Š¯à*Kÿ麥Àšò%lWÏ#r7 m­øŠ;sÕ5kË6ñ<–²¤rBö«‚$ÈÞxùº÷Í%þµ«èSj62_ ÙVïoq§;¸R³Gq,À*’r]ðÙÉíŒbµî|5¤ÝΓËnâeEÌŽy™G@ÅXnüsGaw2µFwñ«H›رeÎpvÉ‘Lð×õ5.³ÿ#Dõæÿú •†ºŸ÷aG⟯èŽÌOÃOü+óguÜQÜVç ˯õf¼÷Ä_ñóýt_ç^…uþ¬×žø‹þ>bÿ®‹ü躲ÿ}¯ýqOýTõ—üƒíëŠè"§ ¯ü~Çÿ\ßù­X5]ãö?úæÿÍjÁ Ÿ¥UnµiúUVëHíÿä%?ýp‹ÿB’šú‘$#éV,ìK35ºO©8§[ÿÈJúáþ…%aÜøªþ hécFF¸.1ö¢7©èßs¦2O¦ 0:9N.-?ë©ÿЭJà‘=–zù§ÿE½=Ÿš@YÜ=hÜ=j®ú7ЭÃÖ‘ŸJÄ­VßHÌJ‘’2:ŽÔ1œ¼zåÞ«áíeof´Žu²µ’Dé4iá·˜{€C«¨ÙèÑØê1Ù\Aq¤I,>R:ãb «åŽrr­Eðäî$¹¾½º–kfµó&tÊFÝBíP?š’ãA´¹ŽÝIÀ‚ÖKEÚÔu Iã®Pö×ø·_×b—öƬ ­–––*iivDèìm‹†u9©têw7šWÛ’Ïìú¥»M¬"m¬I!¸=@*ä:=´7 :¼Å–ÌY€HÆÀsžÎ)-´K[S¥ì’cý›Eæ0*æã“ÛM«·ýuÿ€JZ%ýtÿ‚k]7ï-?ë±ÿй=TOm­ÝÝj÷¬ZvPÛOg9Xa\ ùмç9ä‚0{WO;f[?úìô[Ö~£áÕÔÞa>©¨‹i¸’Õ%Qãîîû•¹E½gY7ú¨ÓÖÁ­´äG)*¾ùMÇ ò5±â··±·»°žØ3Ú £m-´²¹R22PáQ’1N>’ïZÕžk›Ë[,vò¨Y&<=;¿{á{[¹¡º»²n-¤[fP¯Î §¦O#i¿/ëúПõ·ü­j:ôšRZÄM¢]Ë%Ò³€;T#ž9ªWz´ÚdÞ#¹‚ÞÛí05²ï!±!e,7vÏÅkOá»wki-îï,ç‚n&·u ñŽŠÛ”ƒëÒ‰ü7ir—Ë$×í¦#+n\æû¤±¹ò%dØÀw®~b¼gµd¥ÔZÍ·¥Ø_êPXMÄÓ3\:Ü‚ùlä–f9ç°í]F¡¦I¨Å—©ßX”mYìã®åj Þ°[;{iîíe´wx®¢”yÛŸ;É,;³ÎE$ _ÝÜÜéWÝNóÉgy5¨™þôŠŒB’{œ`í[õOJÒí´}>;;PþZ’ŤmÌìNY˜÷$’jåSªš—üz/ýw‡ÿF-[ªz‘ÿEAÜÏ?ïâÒ3ÄZ¬ÚFš.!X—YÁ*ƒ“¦>¤W%ÿ Íÿü÷±ÿ¿'ÿŽW¡Òäú×=ZU'+Æv:èW£N6>gÞçÿÂsÿ=ìïÉÿã”Âsÿ=ìïÉÿã•è™>´dúÖW­ÿ??ø&ß[ÃÿÏ•÷ÿÀ<ïþ›ÿùïcÿ~Oÿ£þ›ÿùïcÿ~Oÿ¯DÉõ£'Ö«ÖÿŸŸ‡üúÞþ|¯¿þ›¡_I©hÖ÷r´lònÉp¼1 ŸOZÒº¾·²0 ‰ åÇ…'.sÀã¡äñIY>'¸žÞMC4‘ùšœQ¾Æ#rÙSŽ£ÚºàšJ-ßdpM¦å$¬µfýW†úÞâîæÖ) MlTJ»HÛ¸drF•ç×šÏØ5]`ëQêÖºƒAŠÎDxHÌ]róœgœƒÅZ×5 èÓÅ¢;ˈŒOf±l”ƒ`»¶ÿw9=)­Uÿ®ŸæO[ýÌhÉ6›âÛý%o.î->ÇÊ ©šVF,êpÍ“ƒ´qšÀ“Xº›Ävwö-s¬š¯Ø¥ê,áÀ,¬>ÎFÔ ûsBÕ¥ßüì—ù\î®5;{mJÎÂMþuØs@ ÏçRXß[ê6qÝÚ¹x$ÉV*W88è@=«Z`ž6ðáf)tOS±x®r9u+Ÿ èÚ„—·SÛÅÏu wío<Ÿ7 ¶ÐÊHŠ:_úê= ]@o  ™>Ð#³óÎ3LÔÕÂGö Sƶ—Mwu 2hÐÍûSÂÒ0Ÿ›nê2zÖŸ‰&yuíLšú{+ •™¤’LM#¨SxäucÁçÚÛçúŠÿ×ÈÝÔu+M*ÐÝ^ÍåD.v–$“€’O k6)¥ NI$KC™áua–Ú2„nûW ,’êze¤÷—Ñxˆ[Av%+$‘€Ø;×I‡¥t¾*ó4¯N,înQâh•e3³Iƒ"ƒ—''‚GZªÿÖËüÆ÷·õ»_¡ÒÑ^uây$þ-¼TÔ “LŠ'¶XnYc_Ýî9Lí9>¢®‹Æðæ©©$·š…ÕŠé"õ’iÚWW AØÌr2?Sëåp·õ÷™ÜQ^meªjúlÚ¸ˆÈÊ4ƒ{ošƒ^áÁ Ìê28¦Í{q¥=¥Î—¬^j3O¤\ܸ–èʯ"ª`™ÂòOJoM®¿ämýtÿ3Òè¯:Ñ¢×®-šâßW†8®4÷&YuFºýélJrôâ·|!t»¯tù¾Ø/­¼³8žôÝ)Üž‡Œ zS¶¶î®t—Ö÷Âco!q ­ åJáרäsõS§º‚ÔÄ'™#3H#Œ1Ææ=÷à×5ÕåÕ©·kûÄY|JöÌÑÎÈâ.~@Àä: ©¨« ±¤ÝßÝÉig¯@‘Ï-à QØó3»«psži-mòý?ÌoKüÿ ÿ‘éÔWv"ŸÄK¤Ï¬ÞZiÐiâh;ÖF™·ÌÒg-´Á=ù«šF¹*ü=Ƥe˜Åo#³ Úò¢– ÃЕçÞ•ô¿õýh {MÃxNêýƒS·¶»Kûˆå‹Î͸†å£]£*Òó’3Î ]®Ÿæ+ÿ_ùž#ÿ‘¶ßþ¼ŸùITü5Ôÿ¼jçˆÿäm·ÿ¯'þRU? u?ï硼ýDvb¾á_›;¨>࢈>ࢺA—_êÍyãæ/úè¿Î½ ëýY¯=ñü|Åÿ]ùÐueÿ û_úâŸú©ê /ùÚÿ×ÿÐEO@ _øýþ¹¿óZ°jºÿÇìõÍÿšÕƒ@?JªÝjÓôª­ÖÛÿÈJúáþ…%Y0DgYÌheU*oÌê3éÀªÖÿòŸþ¸Eÿ¡IXw^!ÔâñHôËÆÓc>[âÒB\÷pqÐzwö¦EuÉ-!Œ£nWOÇ©VÅÙÿ–±Ÿûr“ÿŠ«rs=°ìdéÿcý)׺ŒØNX‰–öŒüÇ8Ïå@qwÿ=cÿÀ)?øª1wÿ=cÿÀ)?øª×ͤF.ÿç¬ø'ÿF.ÿç¬ø'ÿZù£4‘‹¿ùëþIÿÅQ‹¿ùëþIÿÅUËíJ =­„Û³s:ÁÑŸ˜çöàÕ¼Ó#óÖ?ü“ÿŠ£ŸóÖ?ü“ÿŠ­|Ñš@f[ÄÏr$ž`ïùb1žø$’{UÚmÖ<ÛcßÌ+Ÿm¬ §S¢Š(¢˜ÒÆ’$m"‡|ìRyluÀïO Š( Š( Š)©"Jãut=NA QE2Ic†3$²* êÌpã@¢Š(¢Š(¤ 0 ŒƒÔZ(¸²„ +N t q èqGØâÿž—?ø'ÿV(  ÿc‹þz\ÿàLŸüUc‹þz\ÿàLŸüUX¢€+ýŽ/ùésÿ2ñTä´‰?ï—§™+¾=Àby©¨ Š( Š( Š( ³õ--µ=SOžKô[;9DâÝcùž@¾zsÓºÖ…gÜÝcû<óy²ˆÿt¹ÙŸânx^:ÑÔ:OÒä¿[÷³³kÅ[†‰LƒèØÍ:K=>o;Ͷµ<©—tj|¿ww®1ÆzT5^£-ÕÄg<’£ÌuÂI‘Ÿ”çœt4¤#µ-r; C(qPrzã$ñïUN‘£ÿ·:ÀÞgwÚ<”ó3ë»ÍP™¡³¹hšx •¢mñ™1Fõè}ê¬Ú.‰q1O¦iòÇ|¤x„yäíqøRÑ@]iÚ]ñ„ÝÙÙÜNb2įåÿ»‘ÇáR^ZØê/`·¹„œ˜æEuÏÐñUꆙ©¦§Ó¤l‚ÞæKs“œ”8&€5…¥€†E½°Š l]±‘ШìGµ>xín¡0Ü$3DØÊH)ÁÈàûÖ>©&±¥AmÌ Ç$`‘ý*Y¯íà¿¶²v"{íã¨\gŸÄSAí4ùEÀ’ÞÙÅÈpȧÍ`þ÷sN0Y™ŒÆ( ¦?(¹Q’ŸÝϧµV¢ o¤izzÌtË;¤R¦H`EúgÏ=«#Fð¬Zv³ý©qqbó¬m-’Û/ÌAfl1,Üþ¼VÅy€‘hÚ$-;E¦éñ›…+1Xy€õ Ç#ëSYXéÚdF+ [[XØä¤¬`Ÿ\ Ëš|é^QÜ-…Ç™ž1»n1Wèo±iãèÖ¼MçݯúÏïÿ½ïÖ’k 6á'Ií-%K‚ Êñ« H³×¾•K¤hÓÚÃk6a%¼?ê¢xP¤î‚0? »ûŸ+Êýß—»xÆ=1éT¨ YiZF™#Éaachî0Í)aî@æì½'ûCûCì6_mÿŸŸ%<ÏO½ŒÓh  ¾Å§Œ£Zñ7ž?v¿ë?¿þ÷¿Z©ªi‘ÞÙÏ«XÁ-Ã+LÓÚ¬Ë.0ë‘»€9'µUÖu5Ñô¹oš#(FQ°gsþµ~Ž€ghžÓô»›{itnfJ¢Ù#ˆP±ò SžsZréšL÷É}5”—i³¼Hd\tÑM¢€-];KžÞKy¬ìä‚W2IÄ¥]ÏV ŒïU/4kvÑÛNÓN²‰›-Y¬‘0î `¨9â¬Q@ú†lt› »i¾ËsöÉ<ÉÑmÒ8OXÆ@ëZöV–tE½µ¬9ÝåÀŠ‹Ÿ\ ‚Šç×þ¸§þ‚*zjÿÇìõÍÿšÕƒU×þ?cÿ®oüÖ¬‰úUVëVŸ¥Un´€ŽßþBSÿ׿ô)*íR·ÿ”ÿõÂ/ý Jçî¢ñGü$"ÒùEœ§ÌYÄ1;©ù~ðè=r­0:yN.m?ë©ÿаüf‰<:DO3­©D ‘¾Æ^¡í[7lö\ç÷§ŸûfôËËkkèL7vðÜEœì™®~†—T3ŸT»Óìµë{-Ji­m¥·Hîä“Íh7$Îs´óœfµtB¶¾+¼²ƒQ¹»¶QKûû–›Y ’qiIezcÙØ%½¢•Â1ŒõÊ XÖ¹Ó{‹+Û(næÚŒc° A“€Šã’NI$Ó[ÿ]„Ö†‡Š¯%†>º{K{›µ†ââ6ÚÈ„€ßÒϽQ¿Ù¡¤é+ªÝŧÍç3Ïö¶2Hë‚©æ“‘Ôœgµi[ÚÞɱj×6—Ð8Ç–¶›ã—lÔ¿ÙzoؾÅýŸiöLîò<•ÙŸ]¸Å 9q{$ÖºzÍt×[kâ.dl™#à–ï‚HÏ|Snõ ±jZ©Õ®cÕ-¯šlÄÄG€áV3Fܼçç"ºö´´{UµkXÝq¶#(1Ó¦µ‹Þ­ãÙÛµÒ𳘔¸ú63M?ëîÿ/ÄõøÿŸàsúŽ«4Åñµì‘KºÉl¦R Tç˜êÎŒ²_øŽú[‹ÛÂ-ßʉncù£Éʃ†Éõ­[½7O¿‘$¼°µ¹tVšr¿BEXŠ(b‘äŽÑäÆöU¶O| 4Mtß¼´ÿ®Çÿ@zæ¼Y,ãVÑmãþÐx¦i¼Èlgòð€Žw/N½k ³-Ÿýv?ú-ê¶«¢ÇªOiqö»«YíKä·*Ì0s¹HéHhæôÍnâËL¿Š{æ‚â+Á0ê1¼ó"2‚„9rpÄ`ž;œU›o^]é0yP@u ¯šÉ +¤yPIr§æhû§œÕïøDl¶owßló„ÿmóA›pR£’6ãi#ÅH¾³sZ=ÍÛ¹¹7b丬§øùcš~¾_§üz[ÿÀ1|CªO¢jzæ¦ašt >Φ4bB…1;G#$œ Ö¹Ôµx¥ÓtØÅ‘Ô®‘å’R­äÆ«Œàg,~`:_j³ÿõ¼¯l÷—W7­Ê Ü;Ä€Œ1ŠÎÔt&´²ÓⱋS¹–и†x."YbCü9|\``‚x^ßÄ:ÕÛÙÙÄ,î[‹˜d•¢r˜„ã!wÏÖ­]k:ËÜj"Â;#˜ MçÌϰ9 ƒòŒÉÏ4¾ðÛÙÁgs|òý²n% æÿZy qÉŒ æ­ßøfÖþêyþÕyn.T%ÌvòYÀù² éÆA;ÿ]ÁyŒ²×žÿTX£´šlw©wå‰<ã²ìüC®j¢Í,†Ÿ²iËy'°,X£ 08ês[7¾¶¹š  ¹¹±–|…{VQ˜ÿºC0>”í;ÃÖzd°ÉÌLV‚ÑC°#`9ÏN¼ÿõ¨~_Öÿðúü¿à™V¾"Ôµ³m—¤ ÖIu;\†p7(R;©çô§xvùtχv÷Ò©aolò2¯|p*ÒøNÒmÒòöÖ[h|<.¡Þ<ç •*yö­ MÒÏE]$+Kj#1)Ée9ÎqZÎßÖà·W1¥Õuëkk?9tæ¹Ô$HíãEp± çwÍ€;“T5ÍJîãCÖ4íA ûU¤–äÉ!$Gu €I ðA5°<)µ[y5-FHâ*Öûå]Öì½ ¹Î8ù³ÅIÿ½“i×¶“Mu3ÞÓ\ÈãÍb¸ÚrbŸ[‡©VóYÕžïSdV~F˜š.7n™¶ï!H /rAæ¬YkϪ,QÆ‚ÚM6;ÔÈ;òÄŒqŒKwá{k¹eÞßEçÆ±Ý,R… eøëŽ2¸©/|;ms4Assc,0ù ö¬£1ÿt†`}*z]Ÿüþ¿/ø&V™¯ë¼útP}†-Š]Î^'lå¶•\0ÇNù®’Ïí»fûoÙóæ·•äîÿWü;³ü^¸â©é¾´Òç‚[w˜˜mVÑC°#`läñ×5rÎÓìk0ûEÄþd­&f}Ûsü+裰ªÓóüÿÈ_×áþeš(¢Ì_­çü#·²Ùß=£E’3F¹vIáç¿_Lu¨5nþ´»¿Ôo­ãHT·Ù¦(Ò¹#æcž€Iï[7֑ߨ\YÊYcž6‰Š`ãߚϿðôW˧{wnlÕ4%9;vä†R3næ——êWÏô9ë™uX4ÝÛQ–úI%ó>Ó ¤…nX•$®Ê1»rGZÞðÌ×~†IçyŸ|‹™Ö @Wÿh ïN›Ãë:Û;êwâîÛpKµdmnªFͤp?‡µ]Ó4Ø4«?³ÀÒ8.Ò<’6æwc’Äú“UÜ]‹”QE!…Q@Q@Q@rþ)ÿY¡ÿØR/äÕÔV]æ€/µ+KÉ圭«oŽÜ:ˆ÷ò‘Œ’2{ãÚ…ºaÑž}}ölj>o™ÿ gÛÙ>÷›·xòöÓ={uÍ[×FSÅÊßÅ%’¶;ƒ´ôo"Oîþ¢"Oîþ¢…¢·õÐ:Üäô{+m'Æ7ö-½£ÙC9…8@ûÝI¶@•sR^Ç?‹­.c]>ÒûûWÉ’Ñ…ÓGÊ–vÎ ÆÜr9¯Qò$þïê(ò$þïê(Z4ûŸôì×ò·üŒñ¥Å·Ÿce{œ–ò‰íZŒlñ#  >c“É#¥cé¶Ñjö¾·Ô‘náhnw,¿2¶Ðžzàcé~DŸÝýEDŸÝýE @<¾!j‹c°Y´ kËÈ”“²¾"ìà3ÇJé< ¶ÃF¾ûß²›ùÌ%yR›¸ÇµužDŸÝýEDŸÝýE oŸùžQ &˜¶úÒ‚ÿo ¿ô¯+;Ä[›™è¸Ç^øÅtž.Mî‡>³-§(®1«•]¹Ï¡Åv~DŸÝýEDŸÝýEÖç›jÇHký`êÛ¼ó#³³Ë|œüçôí[>"'áÖÛìý¥¢g÷bÈú×aäIýßÔQäIýßÔQý_¨máÝ&+ÿÔi¾ź®@†B$Ë þò¯OJ¯âkè®ìàŠõtèe]-'ŠêõÉ,ŒV"ÚÀ€sÉÉW¨ùwõywõ­¥¿®¿çø­ÿ®Ÿåøž_«ûJÎP$šìh_PŽ3‰e‹~\)õõHÈT’Ú_ê÷bmGO²¶’(¿²æž%bØ0`eu Cg#ü8¯Wò$þïê(ò$þïê*›×úþ¿§Ü•ý_×NÇ)âÛ…¶Ñ¬à»ŠÒh¦™cš{ÈËCì ÷#‘ÉëQøØèiÑKw“$ |½¼³$ü¼ñÉ®¿È“û¿¨£È“û¿¨¥ßÌ}¼8ÒÇû ëì¥á06³yÞf~Ñæàç¯lãºb¤Ðÿ²ÿ¶ôŸøG·nò$þÓÆî›xósü{ýyëڽȓû¿¨£È“û¿¨£úüÀòÍ3CÓf³ð¼òYÆÏ{q*]ÿ-ÆÙoþö ޾”ûŸ±ÛèQÚ^þÌ·ñ BRL•X†ã´ÿ²3^¡äIýßÔU;ýu´3y‹ök…¸MŒYs€sÛšÿ×uþ@õþ¼Ÿùž{qäÄGI Ú"Inöû2c2™v²0g5¸‘ßx‡Pû~¥ch²¬GOžæfT|аuîÎx'§jõ/"Oîþ¢"Oîþ¢€<ßVU]yæËÉ£Äð®²Ë€’LÊØô!lzô0AޱRùwõywõt°ÑRywõywõ'‘'÷QG‘'÷Q@ÑRywõywõÉë?ò4Aÿ^oÿ ÉPøo©ÿxÿ:Ÿ[FO@`ýÿô* õ?ïç\ô7Ÿ¯è޼WÃOü+óguÜQÜWAÈ2ëýY¯=ñü|Åÿ]ùס]«5ç¾"ÿ˜¿ë¢ÿ:äkÿ\SÿA=Aeÿ û_úâŸú©è«ÿ±ÿ×7þkV W_øýþ¹¿óZ°h'éU[­Z~•UºÒ;ù Oÿ\"ÿФ«µJßþBSÿ׿ô)+ëÆ¶vÞ!%¢û*Ÿ.Y‹ò²{ûûrÀ计iQ,‘6õ,8èAÏàMT73gîÙàYÿâ*ì <–èÃ(ò`\)?Ì ¹œt  _´KýÛ/ü ?üEh—û¶_øøŠÚͤ/Ú%þí—þŸþ"´KýÛ/ü ?üEmfŒÐ/Ú%þí—þŸþ"´KýÛ/ü ?üElڥÜp<Q0¸ a°d®äâ˜>Ñ/÷l¿ð,ÿñ}¢oîÙàYÿâ+k4fP$·¤²4!"ÉTŠMùb1’p;Æ;ÕêeÈ =»†g(O¨ÚOôú`SXÖD¤PïªO-ޏéôQEQEQEQEQEQEQEPNOJ*)@i`FV“øR˜}¦ßþ{Åÿ}Š>Õoÿ=âÿ¾Å\Î:Qš§ö«ùïýö(ûU¿ü÷‹þûs4f€)ýªßþ{Åÿ}Š>Õoÿ=âÿ¾Å\Í  j·ÿžñßbµ[ÿÏx¿ï±W3FhŸÚ­ÿç¼_÷Ø£íVÿóÞ/ûìUÌÑš§ö«ùïýö(ûU¿ü÷‹þûs4f€+«+¨d`Êzr)š…óY5 Xâ>áa>dëÐsÈÏÞ<}ÑÉ©ŸïÂñoúÝþÂÐÿè-BÝ/5ù‡GèÍ—Õ4øïÖÁïíVñ†VݦQ!ú.sP®­]j tÖÖöö{33\¯Fù‡ð~=z×y§\ýƒUÑÎu&­u¨4ð_,ǃ dËÑv¯ÎxÀÕ­sM½™|XÎy<ùl¼­±æ…Û»oã8éBÕ^AÔílµ+N#-…í½Üjp^ V@¦A¬Û/è÷r^E%õµ´Ö“I‘O:+‡±ž=ê+µñÕüÑZ˜­¦Óáˬ{QäýúøÅeéÖBhõÿÞØ]Æ÷·7.·gcŽNAcç¦s‘GŸ“üÃü×ävîØLЛˆ„«šÉ¼n ýâ=8<ÕwÖ´¨¸“S²CrAºuh= óó~æíaâIà£XÜ­ýäØòÆTæ8öªùÄv]áÛ>Œ+NóM].mvÊ]æü^ÁV/ ¿˜» ‚2ßòÏ ÉÀç4=?¯ë¥k¿õýjuÞ#Õ$Ñt9¯¡$xÙ+ç3…íõ©UEºÔäÛÁžÂfk•<2ä–ÁøõëXºîÿ ílŠIu{ 0y‹ÌÎÈÈ[§ƒõªv {?‰$¼µÔRÖáìä…à¶f“* ‚iÝ‚F|Óz_úì Tûïi6Vv—Ÿl·šÎæä[‹ˆæC Ë6qжúî‘Û´š­Š-ÈÌ® Gû<üß…qò¶«u¢Ø]Ýé³Ê¶:ºÉû»3³@0ÃÔ·#Û8©5¹d]F-[G±ÔN¡, Ù¦ÓY¡•+1Êa’s‘Û Ñþ ¿Ëõ;‹‹ˆ- yîfŽPe¤‘‚ªrzUS­iK`/Χf,ÉÀ¸3¯–O¦ìâ°üqcy{§iò[¥Ã%µâM:[ƲI°2¨À† qƒÒ±£ÑÃCe=´zÈŸZŠ{yf!#Am铎´–®ß×Oóüôþ½Ná5]9ì ú_Úµ˜7e1øqT4]~-kRÕ!¶x&¶´xÖ9¡8“rn<Ž8 +··¼>$ÑÊîû©®¤·¹òDÊã+ûÜ`uÆ3š]*ÜÝkz Ùh·ZjéðH—o5¿”0P(Œãù¹ÈÈã9æ…­½Þ—õ×Ìëïu+ 5Q¯¯m­UÎÔ3ʨú žj;ÍkJÓÚ5½ÔìíšA”N¨XzŒžk’ñ>Ÿuÿ `¾—ûGì2؈ìlÒä£n%••‘Èȹ©tÍ8u¸ k[‰ìcÑ{¸yÎóò·ÝŽÔº_úëþ_ˆ?ëðÿ3ª¼Õtý>$’òþÖÙ$ÿVÓL¨ûdóUü;ª¾·áû=JHÖ6 C9#úW¢ÚÜiCL¼Õô{Û˜[IKT jÓ=»«1ed°È+Î;bºÏÛMgàí2Þâ‚Tˆî×k/$àŽÕVßúî+›ÔQE!…Q@Q@Q@Q@Q@gˆÿäm·ÿ¯'þRU? õ?ïçW࢈>ࢺA—_êÍyãæ/úè¿Î½ ëýY¯=ñü|Åÿ]ùÐueÿ û_úâŸú©ê /ùÚÿ×ÿÐEO@ _øýþ¹¿óZ°jºÿÇìõÍÿšÕƒ@?JªÝjÓôª­ÖÛÿÈJúáþ…%]ªVÿòŸþ¸Eÿ¡I\ýÖ¯â8¼@4¸ ²>cnŠC‘å÷bwöïïQLžS‹›Oúêô«%‡­S¸$Oež¾iÿÑoOg9¤ãÖãÖªï4o4kxõ¤iU™› £$ú ­¼Ð[ ‚2QCËizýôúý’ ¯fӯ㕣k¨"Œ|£*SgÍŒxzU]¼¾Bxn‹Š[ŽF ‡Zܳðö•aw͵³¤‘ƒ<Œ¨®Õ-´~¤¶Ñtë9!’ÞÛc@Ò4_;…þöqƒéÐv§ÒËúÜF-ž­¬K‡ªI©î‹R¹ØÖ‹ l ¹67dmçÖ'VÖ<½þçR70ê7 –í (‡ ©P{ç­6ÛÃmÛ^Iogk ¼Í0[{‰_{GÜ`:äâ·âÒl"·³ ÄVry°.öùžzó÷_Z¿®ÀÓ×ú×SFé¿yiÿ]þ€õÈx»Yhõ´·Õ¢°–ʶóˆü÷ÏÉÉÈ÷ÔÎÙ–Ïþ»ŸýôË]&ÚÖâòã ,·rù²4¸8࣎€ C1f½‹Q×ü3{ÌSÛÜH¿BŠj®“«Ý#E°Òí­ ¸»ŽY3 sHÏ·Iýkb YÛ5™†k”ûÒKp$9dé÷_z¡¨h"ÊÃN‡O·Ô&–̸Š{iâIP7PwáH>˜ì)¶$Aˆu«·³³ˆiéw-ÅÌ2Hñ9OÜœd.àyúÓ¢ñ¯zÚ}¥ºYCy4·0ÎÒ#¼a¡8%@`p}ÍYð÷†ÞÎ ;›ç—íËq(_07úÓÈcŽHä`g5zÛö–·°Ý$“™"šy”3 )ËgŽƒ·õ§ëý1_-L{ë2 >æò+²ÜÞ5“Ç ¸tpYwn'ezc¿ZŒøÂú]FO³Zù–±Ýý˜Â¶“4Œ¡¶³‰Ø0rqè:æ·ö‰mm’}¶÷†ñ a’å™°xé–?ãD~ŠßP{«[ëÛt’_:KhÝ|§~䂤Œ÷Á—Kÿ[Áòþ·ÿ€d?ˆµxÚæô¥“iÖú‡ØÚ Ž%Û¼&àÛ±œ°ã&‚úÌ«¬<76¯Þ\¤):9`á¾\°o»ì´ßöcshdŸË¸»û[Ã!÷‡Àã¦T5|;W’[êðGv]ž¤Pªì0]~\ƒß®3Ú…·Ëü¿àƒßçþð X<ß"??g´yž^vîÇ8Ï8ÍIQÁ‘qoy6(]ò³`u'¹©)½ÁQHŠ( Š( ¡”âæÓþºŸýªj­rqqgÿ]þ‹zÊñÍÍÆ±¥èÐ]Iiß›$ÓBvÈUùTöÉ=zàTßü"v1-´÷WRÞ\,Q›·’ãËà’p2ä`éZ¶—o«$Bf–)a}ðÏ í’6é~Mü?ö†­BþáÄ‹,sÉ"‡‰‡B»TÔöæ—A”WÅ:´–H‹ t÷éj“Ím,qº²“¼#ÜcÏnµ¡«ê×2[Y4¶ðêÚ¼p´‘+ùR+FX»³ŽyíÖ¶¿±•á¶K›ëË–·¹)$¬»‹€ séQ]xvÒîK™L×1Ë<ñÜ #p7E ñè;ç­5ý~ðEý~ðɨë']ƒJŠ[Ëj.'• rçÚBÿ/âMf_K¨ÉökQ%¬wf0­¤í#(m¬â@6 œz¹­›].;kõ½k›‰î¸·/+)Ü»‹dàr~žÕ zvúƒÝZÞÞÛ¤’ùÒ[Fëå;÷$$g¾¡n¿®¿ä­¿­?Ìè7Z7Z«¼Ñ¼ÒÖñëFñëUwš7šµ¼zѼzÕ]ææ€,““š§=Žs©Ûê3Àò\ÛŒDYÛjuä.vç“Î3VPå¬RùìšÄ$°GçÝ$'ÍV;…ÛѸêx¦º·ö”ôj>Òž\ô¾%Ò!ÔMŒ—€NF~F(®z)|mØœÓ_\†ÒãUkÛ¨ÚÈÇ‘¾ôÜ?‹Œ“ÆßÆ0ò:?´§£Qö”ôjÅÓu­?W2­œÌÏ DxÚ7\ôʰ×—iâû'‰¼YmŔң°‚GMˆq»p\gÛ9 »í)èÔ}¥=±ÛV±KÉ-áDñÁö—\#ɳӵR—ź#%ö±,ÀùNB£}Ö|ö±@/ÚSѨûJz5sž%ÔgÓ¼=5í£¨‘Z0­€Ã êèhmr [­Sí·VéofbT}ë¸tn0Ä“À_ç@ÚSѨûJz5rº‡Šm­,ì¯"Ši ¸»íº ׂIWqéÓfOiqKM,ÞlÈcÒ– N`(3ýìPCö”ôj>ÒžU+þ_›&¼+0—È%¡pžg÷w‘·>Ù í)èÔ}¥=°¯5í:Âõ-.¦x¤rª¡}™n/£>æ¡mrKU¯n [k#vFûÓpþ.0rOh£ûJz5iOF¬+M{N½™!†YJ«,FJ©Ÿ™GBGçP\x“NþÉŽòÚò,\Ç#[;ÆåX¢–$€2ÁÏøÐôW«±Ò}¥=´§£W8bÿ®‹ü躲ÿ}¯ýqOýTõ—üƒíëŠè"§ ¯ü~Çÿ\ßù­X5]ãö?úæÿÍjÁ Ÿ¥UnµiúUVëHíÿä%?ýp‹ÿB’®ãœÕ+ù Oÿ\"ÿФ«´ÀŠâ=(èÛ‘‡cÿê$~5‘{ÿ?ßøßü]\¢€)}ž÷þ~-ð¿øº>Ï{ÿ?¿øßü]]¢€)}ž÷þ~-ð¿øº>Ï{ÿ?¿øßü]]¢€)}ž÷þ~-ð¿øº>Ï{ÿ?¿øßü]]¢€)}ž÷þ~-ð¿øº_"÷þ~-ð¿øº¹EUŠÖ_=f¸™d(ÅDÚ ž§’r{u«TQ@Q@Q@Q@Q@ב#Û½Õw«“ŒŸJuQEQEQEÄz(QÑ·#ÇÿÔHüjZ(Ÿ‘{ÿ?ßøßü]'Ùïçâ×ÿÛÿ‹«´P/³ÞÿÏůþ·ÿGÙïçâ×ÿÛÿ‹«´P/³ÞÿÏůþ·ÿGÙïçâ×ÿÛÿ‹«´P/³ÞÿÏůþ·ÿGÙïçâ×ÿÛÿ‹«´P/³ÞÿÏůþ·ÿGÙïçâ×ÿÛÿ‹«´P/³ÞÿÏůþ·ÿGÙïçâ×ÿÛÿ‹«´P"WX‚ÈÊÎ:”R£ò$ÿ:æáˇrF:ô"³ôý6ò6Õ´‹Í=šÆöyåk*+'b¹ÝžHéŠì~ËþßéGÙÛý(¶–þ»‡ŸõØòÿøE¼A%”sȈ5 ÿÐ.qiµS~sÉÊîÇ_šµîtÍSNŸX·°ÓîßREÉç*HŒG‡’£sÞ»Ÿ²ÿ·úQö_öÿJ»‚Óc“Õt[¦ð:é6¸žæaUËmó =OLíïU¦Ò®&›\šëIšx¯Ùâ†9Ñ*£$6á‚§Ütâ»_²ÿ·úQö_öÿJmÞà´ÐàŽŸâ 4›Ig‚K‰ìõ%¸† ¦Îh@#k8ùKrO_Æ¥Ö-µk«˜¯´Ý*òÓShÕ|ñu–còJ»Žà9<yà×qö_öÿJ>ËþßéKúýưԞ÷QÔmLRÍÒ?46DŒP1ãc#¹®285-VÃ\Ñí´âa¸Õ% zÒ HÆðIÛÄŒqø×¥ý—ý¿Ò£‹M†Ü8…c{—}ˆæ=IÇR}h[ßúè-ýu<ÿÄZ6¹¨]_Eä^ÜÅ$‘GŠñc†4Ia“Ç8n¢­êÚ£sÿ “o»í’Z´:á6îêxÆZî¾ËþßéGÙÛý(ZÉx³JÔ/£´¸Ò•MäEál°\E"ícÏ¡Úßðȋ—Öïª[$*lmí'‹LPãæi†Xuãcœu¯Dû/û¥eÿoô¥mÇ}¼Ž ûKÕbŽÅ´Ë ˜µ8íaˆÝÇs‹Ž©*óÏ@O<f£á룭êRËa{i¨l$Zê¸P¬®›Ô0ã¯=q^ö_öÿJ>ËþßéTÝÝÉJÊÅ8£XaHaQB€Np>¬ý—ý¿Ò²ÿ·úRЭEYû/û¥eÿoô  ÔUŸ²ÿ·úQö_öÿJ­EYû/û¥eÿoô  ÔUŸ²ÿ·úQö_öÿJ­EYû/û¥eÿoô  ÔUŸ²ÿ·úQö_öÿJ㵟ù ÿ¯7ÿÐd¨¼7÷ûÇùÕz?/Åp çý Ïþ;%WðßÞ?ïç\ô7Ÿ¯è޼WÃOü+ógsÜQÜWAÈ2ëýY¯=ñü|Åÿ]ùס]«5ç¾"ÿ˜¿ë¢ÿ:äkÿ\SÿA=Aeÿ û_úâŸú©è«ÿ±ÿ×7þkV W_øýþ¹¿óZ°h'éU_­Z~•YÇ4€ŠßþBSÿ׿ô)+?Ä×@ºO“,‘ïÔ¡GØÄnRNAÇQíZ0ÈNúáþ…%†›¤-„Í"ýžá.a,½ÈéMn½PûœÍLjuÕûEÄ §}•5°*Ù/Eé;†w† ŽŸw {ûÒ]ørÎñ¯žI'W¼x¤fGÆÑãi^8Œu•5ׇ,ï?´<É'ohš]¬8òñ¼{sœÒ[kýl>£4½GP:ÅÖ—©‹Wš(Rt–ÙYU•‰*Äà‚¾´x†U‰ôÐÇ.ýF5óò7Ì0G?\j–òݬµÕm¬îo.e‰mÚ(¤@PY·|äw>¾œT~\ºÜ}»M¼±“­Äe剃°ÈÇÊÍÇ>Ô.Ÿ×_òÿ×Oó24½FþÆÏ]Ôn'Ž[[«¦c/ÊxË`m´ËOjl“¼ö©" 9.’Òx–'QŒdlúŒté[qørÚ;›·&Úì»Mf̦.0ÇÏ?\Smü8YÏfÚ–¡5´°4)dV©ùNÜäRikoô¿ÌʃWñ,×v–¡´÷vfî9<™0 mÊ¿“ósëÅohz“jú­ûÆ#y“,€äÙE£[Ãwgr¯){[cj€‘‚§o'Ž¿(ýi–::|vQÁuv"´WUŒÈ6É»ŸœÎ;zU;kýwÿ€J¿R¯„®¥›Â–×3I,Ÿ¼,ò1f ;w>²ôŸ_êW–möPÖ—lFÄ´˜4+‚UšB60àgëÞµ´Ï +ÊH5}E­£bE»´eI$“8Éõ©tÿÅ¥Ì ­õêÚ©b–fE1.{—v9àf—[œU½¥Ü ŸXY-Vêé“÷é ‰3Œï}ÿ0öW¢Y­ÚÛ},O“–‚2‹ŽÜcúÕáë!áßìBÓ5®Ý¡‹ãæÜ@êµ3Ì¿ÒUm¢³ÔµaÆáæ€ÿw’>éß yŒ»Ô57ñ*iv&Ò8ÖØ\HóÆÎHß· 1õæ³-õy­`¸ŠÆÒÝnm£Ü[fz—~I<ÀÇá[–V¿h¿þמÚâÖé û9‚WFCnÏÊHÏãT5-(´ÙVÚÞòæW½7Ša™#’)VRØ0sÖ–ÛÿZÿ=vþ´ÿ3S¿Õ®æ†Îv²ûež±qÊ‘0ŒîŒ°%KßÖ¥¿Õuk‰-ìšKxoíµhái#Wò¤VŒ¸%wgò3Ú®h¾¼ë­QîVV¾K¸ÖIQäùhÞTmçžÛšÒ»ðÍÜ—R™îcš{ˆîD‘¸ ˆ¡A^=|õ4Ö›ÿ[ÁÿׯüZÜN¶è.^7˜£RªO°$‘ùšâõÛ©éç4íAµµ×t8å¢Ý:\—"òX¸ÊoÎÐ_ Y9­æíÜÜ›±r\ VSü@€ü±Í:-ÄvÆMSPûU³3Gv€0Á_»·…×áþ`fM«¶—y¯Ì¶½Ê=¬JT²ù®ênÉ8žÝ½jv×5=:[Û]E-$¸ŠÅï!’ÝYQ‚ðU$õÇ9ç=ªüž²™/ÖvšQ|#–`(VƒÀ9õ¦Eá«dK¿>îòêk¨ »O;©uŒçå\\ôë×4?ëîÿ1«u*éZƪڶ¤,Ý/íMÄ/lŒ…ÚJ°f9á‡#+?ÅÚËG¨­¥¾­„¶Pý°‡œGç¾~HŽHÈ 6G¸®’=Þ;>pòï± ˆ0U‚ƒž:ü£¦)ÖºMµ­ÅåÆYnåódipqÀGÞú]‰ŽÚ™ºÍ†£¡[j²ê7–Ö‘E¬Æ6°/ÌNx¾µoB7¶þ¶mZCö”Œ´­!€É#qõ÷ªáo*Ò8/ï­ÖÒi&„FÑ…Éã „`dã¸Í_›IûN‹6™q}w2Ì¥v($*zŒ…§)=†º\å|?â1?ˆ"–MZ+ˆõ`û-á©S”Aùw&sïPϨÞ.±,†êý]uE….VCö5‹#(ËÓ8Êä¼z×a{¢YÞÚÃS‘"KÂd(r1~ŸCTß–o3æêðZ¼ÿh{1 ò™÷nÏMØÏ8Î=©­×—üø õOúïÿÝ¢Š)QEU-nù¬ŸL q,>}ìpŸ.%}àƒòÇåG5v°\ŽÃÞ…ºõAÑú2yücaÔ¨m¯ZÒ…¼×Ë0G&@Á9Ï€HÞ›?ˆ¢ÓnuÙ®f¹žòR7¨ÀCœ¶I{¬û jÏk}£E=Ñï.Zw•·yè®ûÝãiç8lŒÒ¦Ôü-{x5ñ¶àjlÐîfùD{wnãÛŒf…¶¿ÖßðC©¯¥kÐê—WiwewnªïÒ(m­œ0ÚH#‚:ö¬{?ΖÚÅÅö™vöö¯Ú Xöl±ŒÜ[Ø­ˆ´¹ÓÅ—©hü‰,£· ݹ]˜œcÃõGMÑu;JÎe²›H½ži‹oa0ó:©]»qœóŸÂò}Ãü×Ýoó-Éâ}6-JâżØ,¾Üí·Ëö9ëßñIümb±ù‰a©L‘À“Ü´P†û2²îþn¸ä…Ü@¬!ðÿRm2¤Ô k³7“q(ÝóÙíTØ8ûÛQO¦sÍl^hÄZ¨Ò%±º¢3íƒ@Û m‚G=è~_×õúó6µjÓMÑV}ó[V_$.€¸Ér+OÛÂ×+.‹¬#Ú(’åL(L(ypø#ƒ÷rxvË\žÙõÅ2 ê-^±i!óu ®dˆ†;TH0»¸üñš4=cM¼µ¾ÓÆY¾ÁÌ7.è§fHeeR{ž¤¿Ëò­†ü¼ÿ5ú\²Ù$Ë0†Äf!‚›e;Ï\ç§J×ïäñö—=•ÌÑ[˜T\Œ÷FùŸ0ç'øA¶~šÞûD¹K]>É,ÅǦBf@ÛòŒôç8¢]ðëÚ‹˜l.´­LÄnc¸f»iBÀàH§°¯|A¦±—åÝÃÄ&o³ªD-·,Y‡LÕ(Òþ‹\ž£â‹»+ÍIaÒEÅ®š¨÷2ý¤+í+¸•]¼à{Š—Äz•å´DºfÖ{›ØÓc>Á"•c‚pp8¨§ûKú-iE®^ëÄòéÿoŽöÁR{[5ºTŽrâRI] íÄÎ?ˆqQMã8"Š)RÑåG²Žëä˜4Œ8ñޤ“ÎF1Gõùÿ_—ùoÚ_ÑhûKú-`iºÕÄú›éº€²»‰Ð$ÂTtÎq‘ŽõCUñ]ÖŸs©ˆt‘qk¦ª5Ä¿iØØaŸ•vóî(®ûKú-iE®wO×ng¾¸±½ÓÒÒæ;qs[":G-´`äsÅe½å޳bÖ+Ë[¸ŽKKµ¹N8"‡ -Nßí/è´}¥ý¹%×õKMOšçM‚K«¹"‚[³‡,¹ÜͳåéÐO}`Ùë3I¨G, /í3F—H”9Âín>÷áŠmYÿ]®$î¯ýocªûKú-iE®?QÖ5ðÝÅíæ›%”'Êh¼‹ÜJC:ŽH_”ò29î)šÏŽm´BêÙc·Y…3ù·‰‡#8Ë>ž”¶×c³ûKú-iE®jÛÄr_k²iö¶°´Ql/$·;$*ÊrÇ´î^zäw¦kš†§kâÛOŽ9„é9’%òÕ¶…Á-µ=¨¨ûKú-iE®^óÄ—q\^Gi¤›¨ìMÛ‹€›I]ÅPó9íDþ$¹–ö }#MKá-šÞn{Ÿ+äc€Êr~¸ £í/è´}¥ý°,üO¥]ÙÚJ÷ÛKv?wò*È[;Jã<ÀŽ+Âúõíž‹¤¥ýû̦¼عfÛ¹1À'ŒäÑ`;ï´¿¢Ñö—ôZäçñd±}¦í4Æ}&Ús×~p m¬ÂÒþ‹\dÞ+խ侊]?2Â!=À[àG–A §Éó•¸8éÖº›yÒæÚ+ˆó²T¹ô#"€-}¥ý´¿¢Ô4PßiE£í/èµ 7Ú_ÑhûKú-CE3PŸN¹R Mü«•ðßÞ?ïç]5÷üx\×&þUÌøoï÷󠿏(¢¸( ]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@Õ—üƒíëŠè"§¨,¿äkÿ\SÿA=QEQEUºÿÝ?þ»Ÿý«N³.¿ãóOÿ®çÿ@jÓ Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( $ûæ¹O,·z¦g´îÑÞ%Ì’ˆ–ˆ¡³—éžœu溹>ù§ùÿwõ4uL:Xã'ðœ²ý¦Ñ56M&æs<ÖžH,ImÌ¢Lð¤öÁ<žj[ï ý·û[{?´ÿUŸ/ËÇ¿9Ƕ+®ò#þïêhò#þïêhZË\xwÏèûVßíX„êóåa6g¯ÍëÚ¤Ô´G¾Ól †ïȸ²’9a˜Ç¼nQŽW# ‚xÍt¾DÝýMDÝýM×Ü'{á§Ô®´»«»ÝÓÚßâÚ· ¸0R2p*žý=ê´ ·ŠÃRµk¹XÝÌ$Š@ p­º5^¹ Ù?v¾DÝýMDÝýMs:n‹s¦ú–£~/nÌ")‰3“…ÉäœdçµE{῵¦º¿kÙý«§ú¼ùXM¹ëózö®¯Èû¿©£Èû¿©£Èšœ®¡á¤Ônnd’é•.4óbÊ«È'vsïÓZ×Â’‰®^þþÖkbÞ×ÉÂ×ïŸÊ»?"?îþ¦"?îþ¦ëóÿ6×åþHä"ðíëZéð^j©8±¸Žh™mv¨¤m?1ä篷Jµ{áøu JææâRa¸±6O\$¶ìûúWKäGýßÔÑäGýßÔÐõßúè OëæqÒxwQºÑ¥Ó/5”š#XŸì›]v°?1 †8è=jYü?tšµÍö¨Çl.Š™âšÔL (Æå;†Ó€zë<ˆÿ»úšdkm6ï)‘ö±VÚÙÁA÷¢àrÚ‡‡®5-ZÚæ{è½´Ë4H– J»‡ÌÝО¼{U_GžþîÊöÎôZ]Ú®0A\AÎk¤ò#þïêhò#þïêh»ðÕä³Ý½¦®m’ýo[†ÞÁv–CŸ‘Çz§6¨E☣Òn>Ão–,Ïmæ¡Ãœ.r>`0zþÞyÿwõ4yÿwõ4Oëúèaiz=¶—¦[Ù ó|y ™‰$·âI5aá+›t±¶ºÕEÅ…Œ¾t0%·–KJïmÇ Ð]œ‰o ”ª êÌØŸäEýßÔÑÖáÒÇ?„å—í6‰©²i73™æ´òAbKneg…'¶ äóWWE¹ƒ^ŸP´¿XàºØn-Þ ÅŠ£knxÇcÒºo"?îþ¦"?îþ¦€8ˆ¼#w œ©¬œ¾m‹ aºÉáŽì8ÃŒ –O Isa¨%Ö£æÞß¼M-À‡jªÆAUTσÜõ®ËÈû¿©¦2[¬‰ùÚ¥¹luÀ rëAûMÞ«?Úvý¾Ímvùyòñ¿æëÏßéÇJÒ²¶û…½®ýþLKìc8Î+SÈû¿©£Èû¿©¡h×õ÷¨«¾DÝýMDÝýMR¢®ùÿwõ4ÉÚ-žc"o`«¹±¸žÃÔÐZ*ï‘÷SG‘÷S@wßñáqÿ\›ùW3ῼÞ?κýN$].è…Áò›¿µrûÍþñþtÜÁ÷A÷˯õf¼÷Ä_ñóýt_ç^…uþ¬×žø‹þ>bÿ®‹ü踳b,-Gý1OýTÛϵW´ÿoúâŸú©© vóíFóíM¢€¼ûQ¼ûSh ‘VeÚêê9 ƒêéQ}–?ïÜàLŸüUMECöXÿ¿qÿ2ñT}–?ïÜàLŸüUMECöXÿ¿qÿ2ñT}–?ïÜàLŸüUMECöXÿ¿qÿ2ñT}–?ïÜàLŸüUMECöXÿ¿qÿ2ñT}–?ïÜàLŸüUMECöXÿ¿qÿ2ñT}–?ïÜàLŸüUMECöXÿ¿qÿ2ñT}–?ïÜàLŸüUMECöXÿ¿qÿ2ñT}–?ïÜàLŸüUMECöXÿ¿qÿ2ñT}–?ïÜàLŸüUMECöXÿ¿qÿ2ñT}–?ïÜàLŸüUMECöXÿ¿qÿ2ñT}–?ïÜàLŸüUMECöXÿ¿qÿ2ñT}–?ïÜàLŸüUMECöXÿ¿qÿ2ñT}–?ïÜàLŸüUMECöXÿ¿qÿ2ñT}–?ïÜàLŸüUMECöXÿ¿qÿ2ñT}–?ïÜàLŸüUMECöXÿ¿qÿ2ñT}–?ïÜàLŸüUMECöXÿ¿qÿ2ñT}–?ïÜàLŸüUMECöXÿ¿qÿ2ñT}–?ïÜàLŸüUMECöXÿ¿qÿ2ñT}–?ïÜàLŸüUMECöXÿ¿qÿ2ñT}–?ïÜàLŸüUMECöXÿ¿qÿ2ñT}–?ïÜàLŸüUMECöXÿ¿qÿ2ñT}–?ïÜàLŸüUME:% PXݘ±üÏ5™âi–)4MÐE.ýN$fïß0Áýr=«U~謭zÎûQÕtx ´?f·º[¹®šE 6†çq'#¶=é­×ªÙú3.ãÅ:²Zßk1[ÙÎå x›wžê±Ü6vŽs…ÁÈi—ÚÔš]ÇŠnìím…ÄjÜ1ó ªŒ¿ÍÛ=±Z³ø:Â{©\ÜÞ­¤Ó ‰¬VP ’Lƒ’1žH€@'µMyá{+ßí?2[ý¢Ñ4»Y~S6í㎃9Í m­ƒ¨Í#SÔÛ[»Ò5ahóEwÍjŒŠÈÅ—X’+ëÞ°ôÛÝ~ 3ÄWÖÓÚϽÝÙ† ¢vrU¸··bºÔÒàMj]T4ž|–ënT‘·j±`qŒç,{Õ[?Ãa©ÜÝÛÞ^,W4²ZS v¶6îç¯\{Q¯àÿ0ÿ5ù™…/ŽÕ5 ±FÖ1éŸkŽ^rò…³¯÷]ãJ¾ ñÌW¯mo§+i¡»ICæYLaÙSäwsVÓÀ:*iÖÖ#í/>Ö¤¸Én› Ç)Œ.=æ­j>´Ônî.Ýõ¨»P—Q[J.² q• â‡åý[|yÿ_×êUñ§ ߀ÿ´–Ù&Št‚UŠlã èFvxϯj§­x—\³¹×$²O6šBFïÈûå »Ž6>†º=CE´Ôtc¥>ømp€HB@ÐU{¯ Yݦ°²K8²*Oµ‡Êíxã\Ñ.¶ô¹FÏ]Ô-õË-fKòì…ìw0«"*ä‚3˜ ÖvŸãyƒêb÷ɹŽÒÄÞ¤¶ö²ÛïPH+¶Lç¶s] ç†ì/î'–àÊâ{/°ºnLyÎzg<õÍT‡Â°[©çº¾Õ$–ÌÚywNœÇ×h*«×ÔÐÿÏõ·è ü¿Kþ¦d¾(Ö´‰a—XŠÁ­æ°žðEjŽ?,)ÚX± ØÎGaâýn7:h»f³{ˆ–+ˆBH i9à®:täS4 ÞϬE&£úi°YËl!Ô.b˜°}£jùÂêÇ'Šèl|8l ’µUá1yQ$’£y#±S³9‹Cþ¿øWëýmÿo†5iµ{9d¸½²¸‘Kh^&„ã•uv$ʹ¨5é4-6üÁ{‹­zx#-È©É%Š ,Øð?Jët -*æêèÝÝ]Ý]mÏrÊX…ÎÑ…U žÝê¬ÞÓåŽé<û´óîþØŒ’`›»FqÆ{ƒ‘G[ÿ[¡ô·õ³9}STÔµýÞÊâ$ŸVŠÜÉ%¬ÑCsRÜÆå_#=ºÕÛxu-/ÅIeg=Œ[ii$Ñ%¬†,y¯Ÿ.0ÿ)ÿ¾«¡ÿ„z9 ´ŽëP¾»kk¥ºI&dÜXœ(yèúÓ¯ô¯µXu(ïo,î£Êf¶uDÎí¬OôÁç­5§õåoÌ«úïÈË»ñ=Õõö›g¡yhnšPò_ÚJ»v*· vÝzUiµ·Ò/|G:ÙÁ%ÜrZD¥ /#¨UÝ’p=‡OS]=ΗÖ«e¨;È&³ÕHÚw€xö¬ÍWÃÖ²ÛkýžâòM@FÏJ¨w J1ÆÒ1œ“ÔRè3â}KYm7WÒu&°y#·¶¸ŽKh-8\Ìs÷zñSx‡XÖ¢Óµ].òKU¼…-g†æÑ]«Ì‚¥‰êCÈ=ª]3—šÆ¥.²ú„pÜC (.gŠIÿvåó˜ÆÐ3ŽOZèµ/ Xj³ÝÍrÓKgàm ÅÕ—Œ†þƒŠ{[úôëµÿQogÖ4ÿ Þ\–´¹Ô`‰äA,‘¶@Ú\žžõ‡/ŽÕ5 ±FÖ1éŸkŽ^rò…³¯÷]ã]M…‹YZ}ž[˛ÒL·%Köù@ü+ <¢¦mb>Ða‚óíjKŒ–é°œr˜ÂãÐiuþ¿¯?×õý[œî£}|t¯»G¦¤­§ù²Á¼nvÙ~nƒ$`c޵©¬G­øqEΞu ]~ðÛ¸‹nÕþ ùÎ?Ú­Ë¿ X^TLÓ‘©ù~n … SŽóžiÖþŽ+«©ïïnç³ó<¹'d%·€;TtÇÇãNúÿ]„G¤k’^x~âöûìöÓZ¼ÑNÀŸ)Z6 ·<íã5Ÿá¯ÜêšÕÆrðNÝn"žYmÁ°FÙ2ObV²xvÅt›í1üÙ-¯d–IC·9’Àó¼tSéX[ê׉,ÒMuù†B(›A¨ë\ï‡>û¼C¡ÜÁ÷A÷˯õf¼÷Ä_ñóýt_ç^…uþ¬×žø‹þ>bÿ®‹üè¶´ÿoúâŸú©ªOøñ¶ÿ®)ÿ ŠšÂŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š(  -â@c\,~c„MïÌzž§Ú¬¯ÝÎxŽâH$ÑÂlýæ£6äVà†é‘Á÷Ó[¤.æ÷˜ÿßoΣKÄ’i!ŽáZX±æ"¾JdddvÈ®*çZÖ¨ëÑߢAgvЋ%Jº#ì!›ïn=F:qNÔõkÛFñ<¶²$RÂö«ˆ“+¼(9ãæëß8¡joæ?÷Ûó¤Y‹gl„ààáºç´›BßÄ7šMíó^¢[GqÏ£ÌÊTí»ž•¦[êcMñÖŸ©M«ywäÛùq²o yRÜýqÍ~W/3ºóûíùÑæ?÷Ûó®_Oö©îãe:siÿ¸ÝlWÛœz8ö5`^ëÓÇ©ÿÄÙmäÒa@ê`B'“ËÌù)'n;Ðôßúþ¿T [[©ÙÏx–°™n.(†2ò>Ð2p9>õ'˜ÿßoι}oS–o&¤‘¢I4pI±Ð8]Ì™`AëYÚÞ§­G?ˆn,õCzTq¼py²¾Ssn$nüˆ¡«n ]ŽçÌï·çG˜ÿßoιu[½'Q¾·Ôõ7¸µM<^‰ÚW‹’@t#"¨Úø“T±“TBòxàÓì"ö£rA#»ãi㮣úüÿȿקùç˜ÿßoÎ1ÿ¾ßp—:¾³¢<:—ÛÖm:{¶‡ÉDEtU )Qœ|Ýɧé×Þ,™Ò‰„Önè÷qÀˆ³`Ùå±%NOÞö懧õëþBNÿ×§ùǘÿßoΑf-²ƒƒ†èkÃ7ÒÜ¥Äw—’ÞÂWΆî‰âÈí°TààäôëXºT·:f›â=Y.¥’;{»ÇeSa`IÎvîýhz_ÒãZýçuæ?÷Ûó£Ìï·ç\•¥î­cªi^jK§–_%SÊeMùB½W·9=9ª:v¯¬Å§èúµÆ¦n¢¿º[y-^P¡˜¨(T‘Œóž3NÚØ/¥ÎÖâþ;SžãËó¤G’~f=üªo1ÿ¾ßq^#»»Ô†› Ú^i².© ¤ó,mž•›=;Žâ’ã]Õ4¸5›).’îâÒKt†êHÂàL@ùÂà|½xÆx¤µ_×—ùƒÑÿ^gjee™©&Î@ReáºÝk‰Õ.u8õòøß£éܤ­£¡R¤(ƒœŽ3ÁëQ_Y].‹á¨ÛU¹w–ö¦8³òÛ…pà@еü?oПås½óûíùÑæ?÷Ûó®.[­jY5³ä®Š™lnfòÒp0qò㡤—TÕµkÈÏP}=[I[í‹ >\ž‡p'LR¾—þ¶oô _wù¯˜ÿßoÎ1ÿ¾ßqš©ªµæ…%Ýù¹‡VµyZ# …«|¥FHäŽsRëÚÖ¡¦jW¶±L7]Y¡ÓÁUùfß°ŽœòèyÏzo@ZêuSÞ%¬&[‹…Š!Œ¼´ œO½£¦iž“ûA¦³½íÚÕâ@#Îò °º¯rzÖŸŠµ‹»if‹L¸¾6¶ÆâHíà‰ã¦Bø8;O sCÐö:ÿ1ÿ¾ßG-â@c\,~c„MïÌzž§Ú±¯®õKŸ Çw¥ ûl±E&Õ m Á8'ã5Ú«Me¤”¼–êOíd‚cyl‰,g•+´#Ž@ïÖ½îQ_K§˜ÿßoÎ1ÿ¾ßp²jºÌi{ªL´Ú¯Ù~ÆaM˜©÷±»?6sžÔ—Z¾±-Ö¯¥äC¢-ÍaB¥D¢2Yˆ-“’x#µ%­¿®ßæ6íë¿ùd·ñ^é×¾Dþ`‹Ì‰ñžG#ð®ß}¿Þ?Ϋi·Íkíº¦áw«ÞDÍýÐ#wþj*χ>û¼$ÿOÊãjßæw0}ÁE}ÁE1 ºÿVkÏ|Eÿ1×EþuèW_êÍyãæ/úè¿Î€:çÖ’A¦ÚC4?fs9†Ç#ïj‡í^*ÿ e¯ýô?øºÒX<Õ,$ç pÊ?!Å/Ù[þy¿þ=a*M»ó?ëätã¹"þÿó3>Õâ¯úZÿßCÿ‹£í^*ÿ e¯ýô?øºÓû+Ï7ÿÀ§£ì­ÿ<ßÿž—°Îÿò+ëKþ}Çîæf}«Å_ô µÿ¾‡ÿGÚ¼Uÿ@Ë_ûèñu§öVÿžoÿOGÙ[þy¿þ=Áÿ;ü?È>´¿çÜ~çþfgÚ¼Uÿ@Ë_ûèñt}«Å_ô µÿ¾‡ÿZeoùæÿøô}•¿ç›ÿàSÑìó¿ÃüƒëKþ}Çîæf}«Å_ô µÿ¾‡ÿGÚ¼Uÿ@Ë_ûèñu§öVÿžoÿOGÙ[þy¿þ=Áÿ;ü?È>´¿çÜ~çþfgÚ¼Uÿ@Ë_ûèñufÂI{ÞØÛÅns½Ñ†GÄ{ãµZû+Ï7ÿÀ§§-™cŒ>·RSTZwæ×ÈRÄ&šäŠûÿÌ»´úQ´úUHía’$|Ì7qç¿øÓ¾Å÷¦ÿ¿ïþ5±ÌYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿ\Q\¼¾ºœÆfÖæ“Ëpé½ Úán½n}ŠïMÿßühû?Þ›þÿ¿øÔNœgncZU§Jü|“üÎm¼ÙßQ Ï •˜Á’Î:1ùºûÔ’x*I|ï3UwóŠ™wDO˜W¦ï›œvÍtb‡ûÓß÷ÿ>Å÷¦ÿ¿ïþ5ŸÕ©öü_ùšýv·u÷/ò0Ç„®…Á¸ÜÂvP†M‡qPrwg'zd^ š ^XµwŽI»ºDAf=I;¹5¿ö(½7ýÿñ£ìPÿzoûþÿãGÕ©öü_ù‡×kw_rÿ#šE…!ê"ŽO9[üªÿÞw ïÖ¬Çà‹YnžmJ᯷¨ 2—ÇMÄ7Ì?)Èæ·>Å÷¦ÿ¿ïþ4}ŠïMÿßüiÆ„"î—âÉž*¬âã&¬ü—ùæ—kdÖw1‡·m¹@Jô Ž„w¡›@Óîýe‡p¿P·?30ߎ=1S}ŠïMÿßühû?Þ›þÿ¿øÖÇ9Ú…ÄÒM4 #ÉoögÜI s´ŒãúÕk? iz{Jö°·™$^I3K$Ãg÷pìxö«¿b‡ûÓß÷ÿ>Å÷¦ÿ¿ïþ4‰cà›;b+ØD1Û¼?gòØÏßvp1´9«¶¾Òl’T·†XÒXÌl‚âM¡Oe°¿ðUï±Cýé¿ïûÿb‡ûÓß÷ÿb;B±ÒŒ¦Ò6W˜ƒ#É#È펙f$àzf™‡4ص ¯’³ÍŸ4 c’0ILíÉñV~Å÷¦ÿ¿ïþ4}ŠïMÿßühOO𾕥Îg³¶òåØQYŸbÿuC´{ ¥¡ø'MÑ’ÙÈ7Pn+3³í“Ê¡bªpq‘[?b‡ûÓß÷ÿ>Å÷¦ÿ¿ïþ4î+ Ô´k=^Ý`½F‘Ä‹µÙ °èAR<Ô6þÒí´ùì#µCm9&e—2Ý™‰$û“V~Å÷¦ÿ¿ïþ4}ŠïMÿßüi ­cá½3NIÖÞßýzì”Êí#:ôÚKqÏN•øCFM=¬E»›vep­<„¡_ºT–Êãý’+CìPÿzoûþÿãGØ¡þôß÷ýÿÆÒø7DŸa–Ñœª9šOAÈó|ãýìÕó¤ZÆ»ò‡œÐ}œ°$~ï9ÛŒã­;ìPÿzoûþÿãGØ¡þôß÷ýÿÆ‘C Ø[ý‡Ê‡oØ#1Û|Ìv)מëš}Þe}siss É5£™ cŸ‘ˆÆzóøÓ¾Å÷¦ÿ¿ïþ4}ŠïMÿßüiÜV*ÿÂ3¥ [»aj¢+ɼùÔ3 ïsœärŠt¾Ó¥ÕRh˜]€t•Ô6:nP@l{ƒV>Å÷¦ÿ¿ïþ4}ŠïMÿßüi ‚?éÐÛYÛ¤ŠÊO6Ýw·ÈÜóן¼zç­G©xcKÕ§óîáv”Çå3G3ÆY?ºÛdrx5oìPÿzoûþÿãGØ¡þôß÷ýÿÆ€>kq§­ƒ«‹u ª±ÈÈ@^˜e öõªðøgK·‚(c·ÂÅp.T™˜ËÓqbrÇêMZû?Þ›þÿ¿øÑö(½7ýÿñ§}n+t oéÏk5³A˜gŸí2.öù¤ÜvsêÇJÊÔüi¨Ý}¡] ‘®y jø}¬+¿nãŒn*ksìPÿzoûþÿãGØ¡þôß÷ýÿÆ•ÂÅIô{++{ûˆ! $û¥~IÊ‘¸p ¶3X^ûíþñþuÔ­œ!ýã`ç +0ü‰®[ß}¿Þ?ÎÌpQDpQLC.¿ÕšóßÇÌ_õÑz×ú³^{â/øù‹þº/ó ÚØ…´Œ’ &©®¿¥½Ûè<aˆ2#1f€'ð¨5;kÛÍ*Þ DŠDf_=$”ǽ?»SŒñÓ5a¬>£ê\ÁLÚ„‘ľw˼ž„0£};R_×à7ý~'Sek¨Ûùö’‰#ÉRpAuAö5öÞŸöñdg+9m€4l· b6“횣£Þi––`®£ Ì·w$I,_2´Ì3Œà`qŸJ¥¬_[Üë+mö©¡º@t𹃂ç#h$òqÅ>© £fÐ×´Ó~,¾Óûòæ1”`¥¿ºsíš±{k§[ù÷s,Qä('©>€IöÏÏ«XjšêÚÏ{o Wlm 4ç”øŸn¶u֚Ε¨Ü+( ‹#…$DÌÖ vàŒöÍ.ˆ}K˯é­e=ßžë ó ÂêW=>R2*}–³a¨NÐ[ÌÞr®ã‘4m\0Šç5½i5]#[ŽÚX¤´‚8JM9%¾nzqRi³¤þ*·’ÛRmY~Îé$¥Wã‚0PùÆx¦·±¼Ú²i›­®&tÛæÉ®È·tÜI^­ çl¬mni—jã~yÝœõ­/ÛÛJ)íu+"ëlEÅ­¼’18æ]Îß0=ñžM;kýyÿ¯§õåþgc}}h×7,V%*¤žI~¤UšÁñœ^o…nÁŒº:Ÿ”:–ãè dMk êzž…ke ¤Úc’b‰G–X*öf’ÔgkEy·ŠnaþÒ¹š}Ýœ¥±to´Ê2§1¶@ ÉÁèjæ±§ÚÝ]x²òhC\ÚAÛÍÑ¢"-À©íÈ£¥Áoc½¬Ûmf;ÍJkK{K§H\Ç%ÈU+’¹'$öàb¹O>ÒßÅ×.ÖšÝË MŸ´Ú’€ezÏN§“V,4õ:ˆïì­cþÖ7I ᙞÀ6»õý?ÌK[yÛõ;Z+…ѳ¶t¯ìÛ¼—þÒÆî›xósü{ýyëUcÓí#øl÷in‹ss´O(4ƒÎOzvîz%ç÷Ú—÷ˆaŽÎ4ŽßOKˆr2&Y}ʽ=+µÒåy´‹)dbÎð#1=ÉQIj¯ýuÿ!õþ¼¿ÌŠçW‚Ì]=ÌSÅ»"™Y>W/€6ã¯$ZÁë±y«âÀc.‚KFu?( [ 5¶Úl‰¥gI§Ç î”HÍ {a.ÝáYÚÁ' @¢¸}.ÖâoY\ϧdæéÓ|½¸ ' Èš‡M°¶²¶Ñï­ãÙuý®öÆmijE¾EÚOq€?*vÕ/ë°¯¥ÎãQÔí4›užòFDw®ØÙÉcРšM?W±ÕŸcŸ{D@‘3Ó*ÀùV‰oSPµÓΟ:bÕâ‡t‘±U‘IÈ#‚@ö?dÞ@I®ý¶F:žØC T(Ì?ÌÑŒ–Î ƒÎE%ý~ç÷ éýyÿ_3½º¹ŠÎÒk™˜¬P¡‘ÈÀ& ©<ÍÊH¡”ŸB3\"Eg;êñxmwiÏ¥ºÈ°çË3œíý¬g8öÍ5¯48¼/g …¶˜ašHÒòI¢ÌP¾ÂwH9ÈÇ$rhé÷~l?¯Èíîï ²kuˆ7ˆcÀÎX‚@ý Y¯3„[Éá«_µ´e¾¶C2©0ˆp@ p™oSб­‹µ;PgÓ Ñ mq <·Ûv²€ØÆåOúü.®ö=³îux,ÅÓÜÅ€Ñk; jŽòŠóým´ÙJþΓOAÝ(‘šöÂ\ »Â²ÿµ‚N3N·Òín&ðõ•ÌðjvNn0‡ËÛ€@’p¼É¡+…Îú©ê:¥¦“n“ÞHÈŽâ5Û9,z\>›amem£ß[Dzëû]íŒÛ‰f‹|‹´žã~U±â[¸u;K²ºehõx i9Á à0ÁÇЊK[[¿ù˜ûßúßüކÃR¶Ô£w¶ó¶¡Áó`xäàf­×#©iK6»¢Yjw©Dÿhr.áW ãéÞ±µ»d“Ä…½ýíˆÛØIs ³"mÂÁÀ6sÁ?…0=ŠómfÜÍ®ßCªêVv²lŒYÏu–hËBÁÀvr0Oá^²ÂŠï½Â€ÍŒdúÑÒâ¹HêðFPOð.¾Ë‘1½¹ Œ ÁÁ­ ó˸íšÂG½Ê?»\o\ª§#-í’)5±c6§j út!²Í®!gƒvã»nÖPÁü©t_×Kî×õ½D¢¸1¤[^ê1Z꺈‡E ìÉÜp㜃ŒsÖÚ ;¯ ]@ž\·ÖR¦æb[-êsž}éÛúûÿÈ_×åþgyEqž#ÕtýJ8§µ…ÊÈëy¨DÆ5+´ ®äõ#¥g[Kº/†Û[rúO•(•¤ÉŒÈ#ßíŒãYbËælÿg§N3šè4›;}+Å·ÖV1,­gÆáCîpH²ü¨·õò¸_CfãU±µÔ-¬&¸TººÜaŒƒ–Ç_aøÔWú厙/—tnÛ¿1ÚË"õU#µr7qjš×öž«ee«æ¯Øçk‚®‚8Ú»rÛ»Œƒ[® šÖ¤ÛÛ± ¬HŠø<ˆ‚—~CoãKuýuØ{?ë¦çAgwýœWvÎ^ ”:1R¹¾5=""ÆŠˆ¡UF¥¡‰y…Q@Š( Š( Š( Š( Š( Š( Š( Š( ¸ÿ}öÿxÿ:ì+ðçßo÷󠿏(¢¸(¦!—?êÍyÿˆ”ý¢3ÿMó¯Cœe qú환 s@ª·ÙbùOݪ]­ýÓùWŸÝø¶þÙˆE›þUãÝDùÙÿßGü) ôý­ýÓùQµ¿º*óøOµ/úÙÿßGü(ÿ„ûRÿ  Ÿýô€=?ktþTmoîŸÊ¼ÃþíKþ€6÷Ñÿ ?á>Ô¿ègÿ}ð OÚßÝ?•[û§ò¯0ÿ„ûRÿ  ŸýôÂøOµ/úÙÿßGü(Óö·÷OåFÖþéü«Ì?á>Ô¿ègÿ}ð£þíKþ€6÷Ñÿ ôý­ýÓùRª¶áÁëé^_ÿ ö¥ÿ@?ûèÿ…ðŸj_ô³ÿ¾øP¥[ÿÇ´_îåRWšˆº¸ ÜÐ ü)áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•M‘<Ȳnn^£Ü{×›ÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øPme¡Çi|/f½¼½¸XÌh÷.§b’ *Î=x«×p=ͳD—3[3c÷róÛp#ô¯;ÿ…¬Ðßþþ7øQÿ Xÿ =¿ýüoð æËLžÒ2M^þépG—?•·ëò ?­hךÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéU™u¥\\ܼ©­j6êØÄPù[WŽÛ£'õ®#þ6±ÿ@{ûøßáGü,mcþ€öÿ÷ñ¿Â€=š6šI™F ’cs{œ?!RWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øPou¥\\ܼ©­j6êØÄPù[WŽÛ£'õ«ðDÐÀ‘´ÒLÊ0d“›Üàù óŸøXÚÇýíÿïã…ð±µúÛÿ߯ÿ ôª+Íáckô·ÿ¿þÂÆÖ?èoÿü(Ò¨¯5ÿ…¬Ðßþþ7øQÿ Xÿ =¿ýüoð J¢¼×þ6±ÿ@{ûøßáGü,mcþ€öÿ÷ñ¿Â€=*²eÑ®e™ä]{SŒ3<«ì38úšâÿáckô·ÿ¿þÂÆÖ?èoÿü(ÒTmP  c'©¥¯5ÿ…¬Ðßþþ7øQÿ Xÿ =¿ýüoð J¢¼×þ6±ÿ@{ûøßáGü,mcþ€öÿ÷ñ¿Â€=*Šó_øXÚÇýíÿïã…ð±µúÛÿ߯ÿ ôª+Íáckô·ÿ¿þÂÆÖ?èoÿü(Ò¨¯5ÿ…¬Ðßþþ7øQÿ Xÿ =¿ýüoð J¢¼×þ6±ÿ@{ûøßáGü,mcþ€öÿ÷ñ¿Â€=*Šó_øXÚÇýíÿïã…ð±µúÛÿ߯ÿ ôª+Íáckô·ÿ¿þÂÆÖ?èoÿü(Ò¨¯5ÿ…¬Ðßþþ7øQÿ Xÿ =¿ýüoð J¢¼×þ6±ÿ@{ûøßáGü,mcþ€öÿ÷ñ¿Â€=*Šó_øXÚÇýíÿïã…ð±µúÛÿ߯ÿ ôª+Íáckô·ÿ¿þÂÆÖ?èoÿü(Ò¨¯5ÿ…¬Ðßþþ7øQÿ Xÿ =¿ýüoð J¢¼×þ6±ÿ@{ûøßáGü,mcþ€öÿ÷ñ¿Â€=*Šó_øXÚÇýíÿïã…ð±µúÛÿ߯ÿ ôª+Íáckô·ÿ¿þ«ñXcì{qÿmü(Òk‘ðêáÛýãüê­ŸŒu[¢°·Lû±­­ÐÆ ‘Í:x>ࢊ)€¬2*…Õ˜”ŠÑ¤ å®4ä$ìTøj2~àü«±Øj<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*Qá¨Áûƒò®ÇË_J<µô nÛCHˆÂŠÙ¶µVÂÚœE-ÿÙnip2-8.7.0/doc/src/figs/snap11.jpg0000644000175000017500000010253213224651032013411 00000000000000ÿØÿàJFIFÿá°ExifII*JR(i‡Züÿÿ)( üÿÿ)( 0210‘ 0100 ÿÿ È -ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀ-È"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?÷úBÀPdzo¯RÞ6v`ª£$“ÐPÖW½DowãZ·Å;É.tËxE¸8Y&‹ûàÖ²ÏÄq»Yÿß—ÿâé\xûjxQöÔþð¯ÿ…®zYÿߦÿâèÿ…®zYÿß–ÿâè¸õöÔþð£í©ýá^ ÿ \ÿ§?ûòßü]ð±µÏútÿ¿-ÿÅÑp=ëí©ýáGÛSû¼þ6·ÿNŸ÷å¿øº?ábëôéÿ~[ÿ‹¢à{×ÛSû¶§÷…x7ü,]oþ?ïËñtÂÅÖÿéÓþü·ÿEÀ÷Ÿ¶§÷…mOï ðoøXºßý:ß–ÿâèÿ…‹­ÿÓ§ýùoþ.‹ï?mOï >ÚŸÞàßð±u¿útÿ¿-ÿÅÑÿ [ÿ§Oûòßü]Þ~ÚŸÞ}µ?¼+Á¿ábëôéÿ~[ÿ‹£þ.·ÿNŸ÷å¿øº.¼ýµ?¼(ûjxWƒÂÅÖ¿éÓþü·ÿGü,]kþ?ïËñt\yûjxQöÔþð¯ÿ…‹­Ó§ýùoþ.øXº×ý:ß–ÿâè¸óöÔþð£í©ýá^ ÿ Zÿ§Oûòßü]ð±u¯[Oûòßü]Þ~ÚŸÞ}µ?¼+Á¿ábë^¶¿÷å¿øº?ábë^¶¿÷á¿øº.¼ýµ?¼(ûjxWƒÿÂÅÖ½mïÃñtÂÅÖ½mïÃñt\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿâèÿ…‹¬úÚÿ߆ÿâè¸ñöÔþð£í©ýá^ÿ Yõµÿ¿ ÿÅÑÿ Yõµÿ¿ ÿÅÑp=ãí©ýáGÛSû¼þ.³ëkÿ~ÿŽQÿ Yõµÿ¿ ÿÇ(¸ñöÔþð£í©ýá^ÿ Yõµÿ¿ ÿÇ(ÿ…‹¬úÚÿ߆ÿã”\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿã”ÂÅÖ}mïÃñÊ.¼}µ?¼(ûjxWƒÿÂÅÖ}mïÃñÊ?ábë¶¿÷á¿øåÞ>ÚŸÞ}µ?¼+ÁÿábëÞµÿ¿ ÿÇ)ábëÞµÿ¿ ÿÇ(¸ïöÔþð£í©ýá^ÿ Xþõ·ýøoþ9Gü,]cûÖß÷á¿øåÝþÚŸÞ}µ?¼+Â?ábëÞ¶ÿ¿ ÿÇ(ÿ…‹¬zÛþü7ÿ¢à{¿ÛSû¶§÷…xGü,]cûÖß÷á¿øåð±uï[߆ÿã”\wûjxQöÔþð¯ÿ…‹¬z×þü7ÿ£þ.±ëkÿ~ÿŽQp=ãí©ýáGÛSû¼þ.³ëkÿ~ÿŽQÿ Yõµÿ¿ ÿÇ(¸ñöÔþð£í©ýá^ÿ Yõµÿ¿ ÿÇ(ÿ…‹¬úÚÿ߆ÿã”\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿã”ÂÅÖ}mïÃñÊ.¼}µ?¼(ûjxWƒÿÂÅÖ}mïÃñÊ?ábë>¶¿÷á¿øº.¼}µ?¼(ûjxWƒÿÂÅÖ}mïÃñtÂÅÖ}mïÃñt\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿâèÿ…‹­zÚÿ߆ÿâè¸ñöÔþð£í©ýá^ÿ Zõµÿ¿ ÿÅÒÂÅÖ½mïÃñt\yûjxQöÔþð¯ÿ…‹­zÚÿß–ÿâèÿ…‹­zÚß–ÿâè¸óöÔþð£í©ýá^ ÿ Zÿ§Oûòßü]ð±u¯útÿ¿-ÿÅÑp=çí©ýáGÛSû¼þ.µÿNŸ÷å¿øº?ábë_ôéÿ~[ÿ‹¢à{ÏÛSû¶§÷…x7ü,]kþ?ïËñtÂÅÖÿéÓþü·ÿEÀ÷Ÿ¶§÷…mOï ðoøXºßý:ß–ÿâèÿ…‹­ÿÓ§ýùoþ.‹ï?mOï >ÚŸÞàßð±u¿útÿ¿-ÿÅÑÿ [ÿ§Oûòßü]Þ~ÚŸÞ}µ?¼+Á¿ábëôéÿ~[ÿ‹£þ.·ÿNŸ÷å¿øº.¼ýµ?¼(ûjxWƒÂÅÖÿéÓþü·ÿIÿ [ÿ§Oûòßü]Þ¾ÚŸÞ}µ?¼+Áábëôéÿ~[ÿ‹£þ6¹ÿNŸ÷å¿øº.½}µ?¼(ûjxW‚ÿÂÆ×?éÓþü·ÿGü,msÒÏþü·ÿEÀ÷¯¶§÷…(¼CÜW‚ÂÆ×=,ÿïËñtáñ#]^Ö÷åÿøº.¿,êÝêPÀ׌xâ|ò_GoªCÇ! &ˆ }Á'|ñ^±it%PA¦…€äQ@Ìp¦¸/^еÛÈ?ñÓ]ÝÉÄf¼ËÇŽ²¯Gý1ähÇ7Qº¡ÝFê‘—¬-$Ôoc´…âY$$)•Â/Lã'¿aïZÚ§„õ ?RžÎÙ†&Š:+,kŒ³)n:ð2I¬ {©­.c¸·‘£š6ÜŽ½T×Cáÿ*j³¾µw3Cqbö^qÌJqƒÉ:/3:=S•ìR;Ff¿Rö :þ𧯎)ú†«ésÁ 턱IpvÄWÞ}RFyé],:þ‡c­ø`E¨´öšd2Ç5ÇÙÝ9e |¸Ï_­f.µf|?¦Ú-ûAuª×Ä,ÞTg8p1ƒÉÎÜÑ×úïoËPþ¿…φõ«;»[K‹Iî‰XSÍC¼Ž£†ÀëßùCï>€©<ûu®ši6~+ÒŸOW}ÅdƃºLî`‘ªú§ˆì­î4Óc}myioz.šÞ 8Ûm#ÜðÄ‚i­lÊòøJïN𾣩j–²ÛÏEöu2)3a²>½ñX1X]Ïa5ôP¶…Ö90ùYº g<ý+§Õõm û]Z¤·7:­Äsˆ^ÙÐņÉÿ­Yþ Öì4»»¨uR~ÃpŠÇ [÷ˆÁ“€½%»¿õ¢þ½Aí¡B] U¯K'V²(.õ% ýÑÁù³ŸáÍ;Qðö³¤Ú%ÕþŸ,99*@>ø'Ž+£¾ñŤÖzeÌqî¾{¨çÔ)ð£$`çƒÇLT¶·¢Ç¦k‹a=ìúÄÉ!ŠH¸ »’~ñíÇ £úü¿àB-#ÁºÖtøµ›`²¹v]ÂTÜHF`8$»éX“éðÇÆÕÄW2˜í¾aºR8\î?\bº'ñ”ß`ÖEÏú 7”ü~è¯ÝÆî¾Õ_Y×4ýfóKÕ£¿{+ødXæAºÆªr² Æ1þÎúïªFfÏárÚòÚÒm=–âëp†?5 | žÆ®*-GAÕô™aŽþÆHZfÛYX1ôÈ$gñ®ÏO¿Ñoüi¢Kc$W‰yMÕÌÍIû¶Á*ßÅïY7:¦a§Úéê]R©ýªäù DèP×ðëÍ upïýw0õ/ë:D÷öB²¶Ä!•ÁoO”ž}©×^Öì¾Íö6T7M²Ü¥ºãh$Ä éõh–ÖVÉc<-Q.Ö {n1Øä[Þ©¦¯ é¾0ÄVúœ·¾tîÒÛ›VW…]HÎãÃc `v¡9ýSEÕ4SÔlÞßÌÎÂYX{©#>ÕŸººOjöw6ÙéúµÍ¿žf1A§o,ã'ø‰ÉÎcìù:L–Ùšd›Ã´ÉmºuÏ£çŒvâ’/h~¹×ìõm3Ú)óKüD€0¨¬|9¬êMp¶v-1¶Ç( Úèå† ÔþÔ4ÔÓ5/RºkHïãŒ$â#(RŒN ŽyÍiøkRðæ™Ùn ŽêÝâêk”Ëè‚c=ý©ÛRz´ß Üê¾¹¸´¶šMNß Â]P*…²äúÕ-'×zž°úl²Ee$LSpÀ$à¹Ë@?>kmõT²Õm.µY,–mXÞÄâÙܲ`c¯JÌ»ñ÷Ä(u“º+5¹‰·2’Ûq'·J#«Wþ´C{;Z³þÜØê7Ve÷˜&x·ã¶’3ŽÝ*¾ê³ª^E?ˆ// Û,/tò¦õ;]K’28>”jš·ö£ÄßÙÚu—–Å¿”?Þ俥^Êã{²ðð¾ºÚ`Ô—MÙ˜üÑ t9Lg;s»ö§K'HšÆ+™®ïÞTJ;ðó‘Àç5¹eâm&WE™îÈŠÛHû,çÊs‰1÷qŽyî8©<#©ZO7„´øåÝuk-Ñ™6‘´2±ãð5VÕÿ]Ééëc™½Ð5=*æÞ-RÜÙ,ìM#AêIRzuÇZ³©höš2ê¶´z…·Ÿöy¢*øÏÌ=êö£{¡Ã¤[è1j’ÝDú—Ú..>ÎÈ N„rIêxÏzgН4k«(¢Òu”kKl }=,äN¿yË·ºòi_B­gc—ÝFê‡u©ˆ›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Uí/O„®Ò»$ðvõcè+/ujiWkr[±ÆöÜ9ÆxóøP¼º™$ebBøáÖçÜþµsðØË.¡ö"B¸bº€óë[>d|á¤wi˜ÈœVd7Àj¯txI̞ÌÒaÑ#‰•ãº}™ 6Ù8Ç^ƒmdjsYÞ,L«'1çœ`ûÖ‰’Sk4 BD›ðÆCŸ˜“Óo¿­V¼½ß}nè7}·ýNAÇéC½´muszËÃú5²$WÌgºe,G˜T uÀàzšËÖt«kh÷N•žÕÈXçnz{Š¿?“ªB›¦Í¿ÞÉlc©éŒœŒsÐñjëWØÓͫȯ3íÜTc€AÎ;tåQÄT•D¯«ÝGŠÁÐ >T’Z>æêúÃwfkX‰9%E|纽ïÂ,M¤?îŠõÑóGÊŠ)°ýÁE0uþ¬×˜xóþAwŸõÉÿ‘¯OºÿVkÌxD_ïà”êÖ{DWQùNQ\Àü¬)à÷Töú{\i——Ë*„µ1‚¸ÉmäŽá@wT]Ok2Ím4Ê¿vHœ«ÜȨ)8 úÒÐË’I$’y$÷¤ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(C+–„“KçAQQ@ ˜  zqJ³”èò¨¨  w"P”'®Ö#?‘¨ÚRÄ’zÔtR²½ÇÌÚµôº½ûÂñéû¢¾¯ 0ÿ GþLÃÿÅÒŠ·áø[ü†õüÿŸõr꿈`ñ=ßÛ-5;™9 "lË{ÇÏ9ã·ÐõËø‚ÞK]vînÍÜi›ï1 ›“ÈÎ=Emÿ±ñ‡ý?òfþ.øV>0ÿ GþLÃÿÅЕ­ä6ïs’®¢k»Ko hbçL‚ð³\m2K"mùÇMŒ?Z—þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.˜°Ñ¶¥©IiÿÚÒÈÁœÊ“,~PÜ#.¬»žøïÖ²¯ä{Û?°Ékp«lòÁ#!ÛÎpÉÈ'½Cÿ ÇÆôÿɘøº_øV>0ÿ GþLÃÿÅÐÕÝÁhqu>²ºš·ö"ÚŸ³y¸Ø%Ú»<¿Cž¸íœ×œWq¨øƺ¦¡-äú2,’X%Ä@tÇj©ÿ ÇÆôÿɘøºIK•Öÿ±ñ‡ý?òfþ.øV>0ÿ GþLÃÿÅÓ’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*÷ÿǤ?îŠòßøV>0ÿ GþLÃÿÅשxCþ=!ÿtSB=¸(¢¸(¦.¿ÕšóÈ.óþ¹?ò5é÷_êÍy‡ŽÆtÛ±ë#@•bØÓ-qÿ<“ù ŸÌ>Õ‡©Hñø.åãfG]=вœ|¾ Õ$Ô/ôß [My¨X¬òˆÖû,œ®q°9go¦>”€éžácÛ½•w£'>”ÿ0ûWu«ÞkZF—2, y²°hÝc,¡°ÛN ‡šßÓïõ+¹u-.åí¡Ô-B¸†2c*à•m„ç#ŒÓ¶Ÿ×—ù‡_ë»G@“Ú©GÿWc·š?ô¬¿ IrÚ}â]]Ku$WÓÇæÊrHVÀöAÅjEÿ7õÔè CKERQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEɦŽÞ '•¶Ç—vÆpÉ5ZÛSµºŸÈŒÌ$Ú\,nÿë ÿЭUSÊO3ư²ÈÁ†é#åû§Ò€%¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ¤2J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠÏÕô‹[Û+Æ[y/$…‚HÑ®íÛp¿1ü+FÑ.ŸS/ªéÈmÄNM²A¸•ÇžÀó]V.ÿç•¿ýþoþ"Œ]ÿÏ+ûüßüEa<<'57º%Å0EoÅIkÑBø ã|#Ŭ_îŠëä–x|ÑGå¼É!%G® Šä|'Äýn†wÐ}ÁE}ÁE0uþ¬×x¤n8õ8¯EºÿVkÏ|H3qõqü躲ÿ}¯ýqOýTõ—üƒíëŠè"§ ¯ü~Çÿ\ßù­X5]ãö?úæÿÍjÁ Ÿ¥UnµiúUVëHíÿä%?ýp‹ÿB’®Õ+ù Oÿ\"ÿФ©ZúÕ/ã±iÐ]H…Ö"y*;ÿŸCèi€ÛÒPÛÍ‚R)w>p ²çó"¡7öYÿëoûü¿ãW%f #möàŸä)ÿfoùù—ò_ð  ï·ÙÏõ¯ýþ_ñ£íö_óýkÿ—ükGìÇþ~fü—ÿ‰£ìÇþ~fü—ÿ‰¤wÛì¿çú×þÿ/øÒ=Ì7^\ò¤ÎdF>[ ƒqÓ¦?Òû1ÿŸ™¿%ÿâi’#Ûí5¤BÁX08`äP2J(¢˜‚Š( Š( Š( Š( Š( Š( Š‚ægŒÅAL’¾ÅÝÐpNOà 'Ùµ/ùú¶ÿ¿ÿŠ  U²ê_óõmÿ~ÿGÙu/ùú¶ÿ¿ÿŠ  U²ê_óõmÿ~ÿGÙu/ùú¶ÿ¿ÿŠ  Uxšâ+"äÆÌÈ]0@ Aúб@Q@Q@Q@Q@Q@×1@B»Ç¢*–côš!¹ŠrB1Ü:«)VPy  h¢Š(¢Škô¦Sߥ2Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š(  ÷ÿò¹ÿ®Mü«“博²ÿþA÷?õÉ¿•ržáw}ÁE}ÁE1 ºÿVkÏ|Eÿ1×EþuèW_êÍyãæ/úè¿Î€;«/ùÚÿ×ÿÐEOPYÈ>×þ¸§þ‚*zjÿÇìõÍÿšÕƒU×þ?cÿ®oüÖ¬‰úUVëVŸ¥Un´€ŽßþBSÿ׿ô)+.Û\jM¨6£~·A ehþR:òt1Z–ÿòŸþ¸Eÿ¡IT¥ñf ï —2‰ü¶_³JpÙÆ>í05$8¸´ÿ®§ÿ@jUÕáÒ’ ðÏ<·ùPðO êiÓ·ïìϬ§ÿE½P×­eÔ,„ÙÙ]‚ùd»v@= •RA¤Æ‹K¬Çö« Ym®!žñÑ$ ”ÙŒ†Á<óÛ5FOÚƒÃc}s,³M E¦âb8cËNk54m^ÚÛHž;¨./ì<Åapï±Ñÿ‡v q€#œQ¦hWÖ·¶W[n†k©¥Xو̧ .@Î=ñO¨º6>0³¾šÕE•ü0ÝHaŠy¢ †Aœ¡ù²tÆGZÙ½?èÃþºÇÿ¡­sh7iaa’ Öú›^1 pP»¶pÃük¡»|ÛúíþŒZ]©ÔᬚvÙ<ä·°6í$ŒuëÅeÂalénÖÚv¡rf¶[a HÉÆNXsÇAš—RÓu!­ OL6ŽÏlm¥ŠåÙ7n ƒÏ'ŒU}÷Z]Å«Í,.±i«hÛ ÉpÄç‘ÓŸþµ?¯?ø×úòÿ‚,~&’ã]‚;Y¯,g²ŽáP˹ÈËnaÆA“Uî¿wä¿à’Åâ µéEk}kk4S9ûBY€ ´Œ<kZë\ŽßTtVwwS„Y$òq± Y‡¡éž•Ÿg¥kM«é·‹XyVIx÷K¸’¥p½=M"ÑoõK˜ÞÎ+(d@wÆWIáç'WæÄMÛK ^ÎåùµØ“Tm> ;»¹cÛç4¥!ÝÓq$vç'M®Çm©Ågqey Í'•Ë*ùNøÈ†$g¨YtíVÃY»¹ÓÍœÖ×®’J·ÈѰP¤®Ö@ð÷öÌ7/Ÿ'—ö£zÎÿhdÉ!1·d½Ž:R[«ìËÚv¹öK=BkÆžáÿµ%·‚$¹ùQGÓ>Õ¡mân€ c|&"ÚhL@´ Fw> qŽA=kóÂ7WV÷1±²” E¯­Ò`Y$ äcާf´ôÝ6÷M¶mtý"Éžà„·Ý´ÇŽ í\¿Ôb…çåúÁ¾ž¯üvŠ(  ·_ñû§ÿ×sÿ 5eø£Ä×:HòtØ"žxŒorÒçd1»…:±ÉÀö$ûê]ÇîŸÿ]Ïþ€Õâ/AªÛÞ=¤×Þ]K’fòU‰Š•ä¨8ÎÕÀãÒ…¸tâMwRÑ.á0ͦH’º$V.í3ä€ÛlqŸî‘êE/‰uied°ŸLqq2Akm-¬#»v,$’N8“_Ñu^ÒM&(ôÑ`꨷SÉ$“Æ2ÀÁn8;«FãIžãÄzmëÈicU‰Þem 61º¿zÑïò×Ì*_vÑÆ{âEJãþBvÿõÂ_ý :ÌÕ|Ck¤Î°I²ÊWyXñÀè ,@ì*Ó¸ÿ¿ýp—ÿBŽ©êªJ²^[y’(ÚHÈqéò‘šÎ§?/¹¹­MO÷··‘‘ÿ µŸüù]ÿßQñtÂmgÿ>W÷Ô_ü][ÿ„CCÿŸ7ÿÀ™øª?áÐÿçÍÿð&_þ*¹ùq]×õò;9ðË/ÃüÊŸð›YÿÏ•ßýõÿGü&Öóåwÿ}EÿÅÕ¿øD4?ùóü —ÿŠ£þ þ|ßÿeÿâ¨åÅw_×È9ðË/ÃüÊŸð›YÿÏ•ßýõÿGü&Öóåwÿ}EÿÅÕ¿øD4?ùóü —ÿŠ£þ þ|ßÿeÿâ¨åÅw_×È9ðË/ÃüÊŸð›YÿÏ•ßýõÿGü&Öóåwÿ}EÿÅÕ¿øD4?ùóü —ÿŠ£þ þ|ßÿeÿâ¨åÅw_×È9ðË/ÃüÊŸð›YÿÏ•ßýõÿGü&Öóåwÿ}EÿÅÕ¿øD4?ùóü —ÿŠ£þ þ|ßÿeÿâ¨åÅw_×È9ðË/ÃüÉtR;È.õ(2„ÙA xÎqÔ“×½KyvÙ\Æ…™¤1¥I+µŽ3œuPzÕ(í£ÐÙíâFKYdß1ÁÚ³œñž½êh¯¯ (¹ŠÞBîÌK íaŽs“ófº£{.mÎòó>]‹Ú-ÿ>“~kþ4h·üúMù¯øÕÝ©ÿ<ãÿ¾ESþyÇÿ|Š¢ _Ú-ÿ>“~kþ5j DÑï WœÝE?jÏ8ÿï‘K€8è5úS)ïÒ™HaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP{ÿùÜÿ×&þUÊøcî­uWÿò¹ÿ®Mü«•ðÇÝZîàû‚Š û‚Šbuþ¬×žø‹þ>bÿ®‹üëЮ¿ÕšóßÇÌ_õÑwV_òµÿ®)ÿ Šž ²ÿ}¯ýqOýTôÕÿØÿë›ÿ5««¯ü~Çÿ\ßù­X4ôª­Ö­?JªÝi¿ü„§ÿ®èRT2è63kQê¯ûB.1Ÿ”žÌG¨ø šßþBSÿ׿ô)*í0+ÝÅ#ˆ¤ˆñ>ð¤ãwHÏК„Í1?ñásùÇÿÅÕê(‡›7üø]~qÿñty³Ï…×çÿWè  lßóáuùÇÿÅÐD÷-fÞHc®í!\¤R{Wè Š( Š( Š( Š( Š( Š( Š( §‡Í1²¶É#mèØÈäwàšLßÿÏÅ·þ·ÿSQ@æÿþ~-¿ð¿øº3ÿ?ßøßü]MEC›ÿùø¶ÿÀvÿâèÍÿüü[à;ñu5 E!ŸÎžEyì]‰´œž2}~Õ5PEPEPEPEPEP&†;ˆZ)T20ÁˆaŽÞ%Š% Š0§Ñ@Q@Q@ ~”Ê{ô¦RQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE^ÿþA÷?õÉ¿•r¾û£ë]Uÿüƒîë“*å|1÷GÖ€;¸>࢈>࢘†]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@Õ—üƒíëŠè"§¨,¿äkÿ\SÿA=5ãö?úæÿÍjÁªëÿ©ÿ\ßù­X4ôª¯Ö­?J¬ãš@Eoÿ!)ÿë„_ú•Cżú5…´ÖòZÄfºHZ[ Lq«g,pæ=jüòŸþ¸Eÿ¡IUõÍ2]Ql#÷±Ü8žUs8<óO°û”bñÙ´õ¹¸ºµÕL· oÒrägiÝ!üEZ¸ñvæ(ÿ³¯å¹h¼ç¶‰¼Iœe¾luÏ’qRjÚ[Þ;ìþTbÚñ.2 ã¯5™®xeïµ¥Ôâ³ÓoI€Bð_ƒ´`’X+`òA£úü?Ì_×ãþEÉ|SfE¸³·»¾{ˆÂ¥´`•ŒôfÜF9ãxèú×Uÿ ûŸúäßʹ_ }Ñõ î¸(¢¸(¦!—_êÍyãæ/úè¿Î½ ëýY¯=ñü|Åÿ]ùÐueÿ û_úâŸú©ê /ùÚÿ×ÿÐEVƒZ±¸Õ¦Ó#—71.HÇ÷÷#Œý~¸¸ÍåÎ’ífP¥NÑ’3ŽqøSì>“ß—ÿ k$ÉâªT³êqŽ?Zy²‡Öoûüÿã@µìtŸÿäÿâjº‡û·ø 'ÿSµ”uŸÿ$ÿ⪵‡û×ø'ÿHÑ]îf¸ddVU ±Î;}ïÒ®U;Ft¸šÙQUјä€Û† ïʟήS¢£”’ÑF¬WÌm¥‡P0Oô©>ɬ¿÷õ¿Æ€ (û$>²ÿßÖÿ>ɬ¿÷õ¿Æ€ (û$^²ÿßÖÿ>ɬ¿÷õ¿Æ€ (û$^²ÿßÖÿ>ɬ¿÷õ¿Æ€ )ÑvŸ-äWìK±‘4Ødó`ŽLcz†ÇÔP袊(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Škô¦Sߥ2Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š(  ÷ÿò¹ÿ®Mü«•ðÇÝZê¯ÿäsÿ\›ùW+áº>´ÝÁ÷A÷Ä2ëýY¯=ñü|Åÿ]ùס]«5ç¾"ÿ˜¿ë¢ÿ:tëaÿLSÿA›…t{k˜î!¶•e÷«}¦S†õå«FÌãN¶ ˆßå‹kã [»øì£ÓïÄï!k,)sóäÞ€:ÿÔÿ®oüÖ¨øŠúâÓOH¬˜-õÜ«onHÎÖn­Žû@-øUåÿØÿë›ÿ5¬ýSÃöÚÆ§mq~#¸µ·Õmdr—b>rIìÇsH èõ]Fß:îmbÍ$Äqî&eà0\wá€Çz4±r³ƒªÜÞÊ›D‘ÜÀ°¼'ݧŸJžeÏ|ú<ñXÅr‰ˆVÜ2FëÕ€Èê8#Ž™Í7NÒf´¾º¾¼¼Ww ¨YbòÑUs€'ÔòI¦”òŸþ¸Eÿ¡IW*•¿ü„§ÿ®èRUÚŠC‹›Oúêô«DÕ+ƒ‹‹?úêô[ÔÆNi6hÍWóhóhÆhÍWóhóhÆk Ä^#mO*ÎDØ]–kÕ…Î;"wÄV¯›\ö¯áùµ û‹«kè k›o³J²Ûy¿/<©Ü Ÿ˜úö¤ïÐjÝN–Öá.­¡¸;%@ëŸB2* #› sÿL—ù M>!igmjp†5v1œ f“O9ÓmOý1Oä*ݯ¡*öÔÍ×üEˆ±ª[µÔìT´jÛB!`»Øó“ëùãn¹?øbòê+ùìoîŒ×RDÍ"ÚB²ã— ÆzýkªY"DgiTì,}N8ü©-†÷EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_¥2žý)”†QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW¿ÿ}Ïýroå\¯†:­uWÿò¹ÿ®Mü«•ðÇAõ î¸(¢¸(¦!—_êÍyãæ/úè¿Î½ ëýY¯=ñü|Åÿ]ùÐueÿ û_úâŸú¦G§YŨK·S(Wu ‘ùJ}—üƒíëŠè"§ ¯ü~Çÿ\ßù­X5]ãö?úæÿÍjÁ Ÿ¥UnµiúUVëHíÿä%?ýp‹ÿB’®Õ+ù Oÿ\"ÿФ«´À«zJy°JE.çÀÎV\þdT&þË?ñýmÿ—üjäŒÀ¢!¤m ‘œpOòÿ³7üüËù/øPwÛì¿çú×þÿ/øÑöû/ùþµÿ¿Ëþ5£öfÿŸ™¿%ÿâhû3ÏÌß’ÿñ4€Îû}—üÿZÿßåÿ>ßeÿ?Ö¿÷ùÆ´~Ìßóó7ä¿üMfoùù›ò_þ&€3¾ßeÿ?Ö¿÷ùÆ·ÙÏõ¯ýþ_ñ­³7üüÍù/ÿGÙüüÍù/ÿ@ÿÚV‰Ê\Å+öHä Ì}nÎ&‚ÆÞ'ûɩǨ©ÚP¤Ç;³Âàþ@Q‰bI”0üi€ê(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ý)”÷éL¤0¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(UÕ|«Ó¦y9ó­ÝüÍÝ8n1ö}{Ö7†:­XÖÿäiƒþ¼ßÿA’«øg§ãYR““•ú?ò7ÄB0Påê¯ø³»ƒî (ƒî +cœe×ú³^{â/øù‹þº/ó¯BºÿVkÏ|Eÿ1×EþtÝYÈ>×þ¸§þ‚*z‚ËþAö¿õÅ?ôSÐWþ?cÿ®oüÖ¬®¿ñûýsæµ`ÐOÒª·Z´ý*«u¤vÿòŸþ¸Eÿ¡IWj•¿ü„§ÿ®èRUÚ`E!Åͯýu?úU¢jœç6õÔÿè·©Œ”6hÍAæÑæÒ|ÑšƒÍ£Í  ó\“x’];Ä:Ú\[_ÜÚ[ù-º .̱<ƒïÀ5ÓyµÌ^iz×öެö/b Ô•¤™ß|XM¤… †üÅô·S¬‚hî!ŽhœÏ©µ„:míÜ©ÊæÕ HÜëýÓZÕÈx•»žM:ÓW]kb$3Û,‚'Ç*çË*2sŸzëSw–»ñ¿v:f…°Þ㨢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Škô¦Sߥ2Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( W[ÿ‘¦úóýJ¯ážŸXÖÿäiƒþ¼ßÿA’«øg§ãXPÞ~¿¢:±_ ?ð¯ÍÜpQDpQ] ˯õf¼÷Ä_ñóýt_ç^…uþ¬×žø‹þ>bÿ®‹ü躲ÿ}¯ýqOýTõ—üƒíëŠè"§ ¯ü~Çÿ\ßù­X5]ãö?úæÿÍjÁ Ÿ¥UnµiúUVëHíÿä%?ýp‹ÿB’®Õ+ù Oÿ\"ÿФ«fXÄ¢"ê$`X&y u8ôä~tÀ­zÂ9-dc„Y¾f=Q€ýH© ±ìiòŸ” PÌçh Óñüªÿضýíìð $ØÿÝ4lîŸÊ£þÅ·ÿŸ{üãGö-¿üûØÿà(ÿI±ÿº*6?÷OåQÿbÛÿϽþñ£ûßþ}ìðI±ÿº*6?÷MGý‹oÿ>ö?ø ?Æì[ù÷±ÿÀQþ4#J-Ñ¥”íE$ÑbŸmŒ:Ä¡‡¡S• %ŽÚ̺ò6Àþ=je‘¦eXvò¡Ë0èN? b%¢“ɸÿžÑߣÿÅRy7óÚ/ûôøªuß&ãþ{Eÿ~ÿKä\Ïh¿ïÑÿâ¨h¨Át—Ê—i$nVQ€G~?RPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_¥2žý)”†QEQEQEQEQEQEQEQEQEQEQEQEQEQEQErºßü0×›ÿè2U ôüjÆ·ÿ#Lõæÿú •_Ã=?†óõýÕŠøiÿ…~lîàû‚Š û‚Šè9]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@Õ—üƒíëŠè"§¨,¿äkÿ\SÿA=5ãö?úæÿÍjÁªëÿ±ÿ×7þkV Dý*«u«OÒª·Z@Goÿ!)ÿë„_ú•‹sá‹ùõÏíUÖ&W1öbv þ¿ÓÏ®Mm[ÿÈJúáþ…%1õÝ"7d}VÅ]NM§Z`\oøø¶ÿ®‡ÿ@j¹T؃=© Èô«tµOQÕ,ô¨R[ÉJ+¸D ŒìíèA$ðz ·XÞ#´7vp„°ºº’9wÆÖ³¬RBØ#pf`;ãý)0.G«ÙK%¤k+ .Õžx™KÆì‚8ÆG\UYüQ£Û¢;ܹß,ªÇŽÅáÆIà÷éXâÏÄ&‡©\[}¶öÐL“²"¹Gû§' X¹è:â²âRÒµMßL’K©noæû*Íà®A6väëO¨—öþ—ý”º˜¼ChÇj¸’ÙÆÐ¸ÎìñŒf¢>(ÑŇÛ~Ö|Ÿ7ÈÇ’ûÄŸÝ)·p>Ø®n j“éi0º:£j gÉ‚•Û´H¤a±ÎsŒæ¬&…1ŽÊk}6îÞ_í8î.Õà™Êª‘¸±vöü–øù^AÑõÈùзÿ”ÿõÂ/ý J»Lßþ>-¿ë¡ÿЭUI?ãâ×þºýªÞh¢“4¹ £x!’hæx‘¥>[•“=p{f¤Í Š3Fhkͱ.3ɵ„ø¿øŠØk*8RâÖÕe¤X”†P¨#ûÑš˜“FMGý˜þ’àtÔf?¤Ÿø5!’dÐ ¨ÿ³ÒOüšìÇô“ÿ¦ Ý»R„« ™öË&?‘üªåV¶…-äxü²’7ÌX¹rãýãÉÅY¦ ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¯Ò™O~”ÊC (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€9]oþF˜?ëÍÿô* ÿZŸ[ÿ‘¦úóýJƒÃ?Ö°¡¼ýDub¾á_›;¨>࢈>ࢺA—_êÍyãæ/úè¿Î½ ëýY¯=ñü|Åÿ]ùÐueÿ û_úâŸú©ê /ùÚÿ×ÿÐEO@ _øýþ¹¿óZ°jºÿÇìõÍÿšÕƒ@?JªÝjÓôª­ÖÛÿÈJúáþ…%]ªVÿòŸþ¸Eÿ¡IWiŸñókÿ]Oþ€ÕhÕIãæÓþºŸýªÙ ŠJ)´RQ@ E%áÖ³ôÃÂÿ×´?û5_k7Mlcþ½aÿÙèLš3Q'˜(—ˆ5VÑ´YïÑÌeàrÀZµg¨ÙjÏeyorªpÆUÀ>‡±¼a—~»†^w%–‹¸°¤àw૤µx¦]JÖÂ{+1f o: ™÷d§ 22Gzh×:9úlõÍÿšQ,±ÁË4‹h 3¹ÀP:’OAL•³oÿ\¤þiUõ«T¾Ño,ä¸[už#•†BîãÔzúÒ{ ²ÔôýKØo­®¶c‘2¾ÜôÎn°4BgÔo´¹ÍœÍh‘°¸´RªÁ³ò²äá†={Öý1Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ ~”Ê{ô¦RQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEÊëò4Áÿ^oÿ ÉPxkúÕýbÂæMm/V<ÛÇjêϸpv¿n½ÅPð×õ¬h¦œ¯ßüŽœL“TìöêÎê¸(¢¸(­ÎQ—_êÍyãæ/úè¿Î½ ëýY¯=ñü|Åÿ]ùÐueÿ û_úâŸú©ê /ùÚÿ×ÿÐEO@ _øýþ¹¿óZ°jºÿÇìõÍÿšÕƒ@?JªÝjÓôª­ÖÛÿÈJúáþ…%]ªVÿòŸþ¸Eÿ¡IWi ¿ñóiÿ]Oþ€ÕhÕY¿ãæÏþºŸýêÉ4€(¤Í ¢“4f€ŠLÑšrõ¬›‚?ëÒýžµ”óY0²ZY²V!@h±œ`uÏúТƓq¨~Ëwÿ=¯(?²ÝÏkßÊð dÛ(cP}–ëþ{^þP…eºÿž×¿”á@Σn?錟Í*yíẠ¸†9¢q†ŽE §ê Ck Ç,…šVœ¸ËŒã¶1Æ:ô«TÄAicia•gk´yÎÈc3ô=PEPEPEPEPEPEPEPEPEPEPEPEPEP_¥2žý)”†QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW¿ÿ}Ïýroå\·†¿©®¦ÿþA÷?õÉ¿•rÞþ¦€;¨>࢈>࢘†]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@Õ—üƒíëŠè"§¨,¿äkÿ\SÿA=5ãö?úæÿÍjÁªëÿ±ÿ×7þkV Dý*«u«OÒª·Z@Goÿ!)ÿë„_ú•v©[ÿÈJúáþ…%]¦ÿÇÍŸýu?ú-êrj½Çü|Yÿ×Sÿ¢Þ¦cHͦfŒÐóFi™£4üÑšfhÍJ§æªzIýÚ׬?û5ZCó ¥¥6?ëÒýš€5 £5Áø¶[Mz;éÚÎúd‰tëŒùŸxá¡Æ~céŽp9¹¨[XIâÛ{¹Dß[+[+ñæþënÔäc_KŽÚØô<Ñšó NÂÖæÛÄ×sB Õ¥¬ o/GˆˆùOnk¡Ñí-´¿ËmcÁo6œ“×þ¸§þ‚*z‚ËþAö¿õÅ?ôSÐWþ?cÿ®oüÖ¬®¿ñûýsæµ`ÐOÒª·Z´ý*«u¤vÿòŸþ¸Eÿ¡IWj•¿ü„§ÿ®èRUÚ`W¹ÿ‹?úìô[ÓØóQÜÿÇÅŸýv?ú-éXóHͦfŒÐ1ù£4ÌÑš~hÍ34f€'Œü³ôÖ§ýyÁÿ³ÕèÎ*•¥³½¤ÐÊ#“ìè§rîVã##¦O~ô´\Òo¦y¿óñkÿ€íÿÅÒ}ž÷þ~-ð¿øºI¾”=Eö{ßùøµÿÀvÿâé|‹ßùøµÿÀvÿâèų¨Ûÿלu-Í´wvÏo.ÿ-Æc²À©~£‚ÙÒVšiD’‘´m]ª£ØdõïÏaViˆ«a§Yé–þE” d–!z±=I'’}ÍZ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Škô¦Sߥ2Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š(  ÷ÿò¹ÿ®Mü«–ð×Sþñ®¦ÿþA÷?õÉ¿•rÞêÞ4ÝA÷A÷Ä2ëýY¯=ñü|Åÿ]ùס]«5ç¾"ÿ˜¿ë¢ÿ:äkÿ\SÿA=Aeÿ û_úâŸú©è«ÿ±ÿ×7þkV W_øýþ¹¿óZ°h'éU[­Z~•UºÒ;ù Oÿ\"ÿФ«µJßþBSÿ׿ô)*í0*ÝÇÅ—ýv?ú-ècÍëì¿ë±ÿÑoLsÍ!†hÍ34f€š3LÍ æŒÓ3@4bóŠn›ÿ »OúâŸú¢óŠ4ßùYÿ×ÿÐE-Q\=ÛMsâíZ‹\¹Š%ƒbØ^’<¯9bõükfßPÔeׯm"kd±°‰<Äw•Ã&îvúƒO¥Àߦ¼‰Ýí\œdú ã´¯__ÝÚJmwYÝ3|‰i0hW«4„laÇ8Ç^õ÷ú®¬<=¨Ü 8ìn5Þ‘XÊ£kmÜÙÁãÐ »HSº¤fTRÌB¨$œ+Ä´šj@–÷Vñ\JNÔ–ÚIË€9ÂÆsé“UަÚÏÃûA£¼ÖR–QœÆ{dRoFû +´»²º†R ‘AàŠZå4]KS³mËP’[ÞÛâ·VVŒªÃdœäwçµuuMYØ”î®QE!…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ ~”Ê{ô¦RQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE^ÿþA÷?õÉ¿•rÞêÞ5ÔßÿÈ>çþ¹7ò®[Ã]OûÆ€;¨>࢈>࢘†]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@Õ—üƒíëŠè"§¨,¿äkÿ\SÿA=5ãö?úæÿÍjÁªëÿ±ÿ×7þkV Dý*«u«OÒª·Z@Goÿ!)ÿë„_ú•v©[ÿÈJúáþ…%]¦KÏõö_õØÿè·¦?Zžê•‘¼M½K:søTÌòçîYàYÿâ) \0i¾|¿Ý²ÿÀ³ÿÄQçËýÛ/ü ?üE;ŒoŸ/÷l¿ð,ÿñyòÿvËÿÏÿ@Á¥æ™çËýÛ/ü ?üE|¿Ü²ÿÀ³ÿÄP˜Ö ]3þAVõÁ?ôU„—þî3i7Öà¹_p»F:І%‚âN*ýÅ+[é°ÛjW·èÒnöyˆÚ68÷¢ßM†ÚþöñÌ—… ˆÚ6®ÑŽ=*åÀÈÓü?™06××¢ÕK³gSç°ùwcž™ªðøNÒ ‹vŽòø[[MçÃhdS7=>]ØäñœVý™©h±ê7P]-ÕÕ¥Ì*Ȳ۲‚U±•!p;v§[h¶Öºö:¼­nbh‹3 ä6sÈÏ'µhÑGKõ¹§xnÞÂꇼ¼¼’Þ?*´º‘žЪpÉÉ­š(¢àQEQEQEQEQEQEQEQEQEQEQEQEQE5úS)ïÒ™HaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP{ÿùÜÿ×&þUËxo©ÿxÿ:êoÿäsÿ\›ùW-á¾§ýãü躃î (ƒî )ˆe×ú³^{â/øù‹þº/ó¯BºÿVkÏ|Eÿ1×EþtÝYÈ>×þ¸§þ‚*z‚ËþAö¿õÅ?ôSÐWþ?cÿ®oüÖ¬®¿ñûýsæµ`ÐOÒª·Z´ý*«u¤vÿòŸþ¸Eÿ¡IWj•¿ü„§ÿ®èRUÚ`E( ,Ã*Ò`ƒß Oó®g*”§6ŸõÔÿè Y¾&¼¼·‡OŠÊèÛ=Õê@Òª+Rpž=(êþhÍp÷šÞ­§Øk–z³\Ø´Uß”¡¶È@Ã(r9íÜqW®åÕ!¿ÓtXõy— ,²^¼1ïÚ›pŠ»vçæëŽ‚€:¬Ô1^A5ÄðG*´°%QÕIü+Žö¨ö±éâê5»:£iæøD1´)mÁznÇ隦×7ú7ü$ó-ûMsÅ ûCÆ€•!ÈoBGJ¿×§ùƒÓOëúÐô<Òq¹€ÉÀÉêk×|A§jwñ[È›ÚßÊ ¬o$¬…ÏrÇíL׬¯¢‡G†mby¦}N=·(•£ù  ·ó…­¿® úÿ].vR"L…eMU¶s%¬.Ç%‘I?…KlÇ$ï;¨Á•‚ÇÔ…~B ±9Óíý2_ä(z+™ñ$Ú­[«=P DŽÛOêDÇ# “ótÉÈ#U}KRÕä›[¹²¼[xt…€Ä¬'`Ûq<ƒŒQqÛ¡×QPÚÎ.¬à¸Q,jàzdf¦¦Õ´%;«…QHaEPEPEPEPEPEPEPEPEPEPEPEPEPEP_¥2žý)”†QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW¿ÿ}Ïýroå\·†úŸ÷ó®¦ÿþA÷?õÉ¿•rÞêÞ?΀;¨>࢈>࢘†]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@Õ—üƒíëŠè"§¨,¿äkÿ\SÿA=5ãö?úæÿÍjÁªëÿ±ÿ×7þkV Dý*«u«OÒª·Z@Goÿ!)ÿë„_ú•v©[ÿÈJúáþ…%]¦{ƒ‹‹?úìô[Ö_ˆ´£­Åe +åEv“J ²’ €G9çÚµ.â‘ÄRDxŸxRq»‚¤gèMBf˜ÿË…ÏçÿHe8ô-.->[µýÄÎ$”³° ‚XÇ ïSêuž«iyÿ-·#+²2PÊA©<Ù¿çÂëóÿ‹£Í›þ|.¿8ÿøº®t]0écM6iö@wòxlçvsÙç9Í2ßBÓ-­n­’Ø´W_ëIJ<†N1ÉbOJ·æÍÿ>_œü]lßóáuùÇÿÅÐé6ÑÜF–¥Öâ1¢i^]Ê:œœ{P<;¥}…¬Ú ^u|=ÄŒU‡B¬[+b*÷›7üø]~qÿñty³Ï…×çÿ@‰ì¡ŠÒíá #A… åâI$þ4šyΙjéŠ!P™nˆÄVR«ž#&ÑîpÄþ•nÞom äF=ð1L KR}z]RÛS¶BшâIì̾R÷ D‹Ôòxôô¦jšî{æmíõU½ˆB¾ÒP“ò¼ tTPcb‰#A„E £Ð uPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_¥2žý)”†QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW¿ÿ}Ïýroå\·†úŸ÷ó®¦ÿþA÷?õÉ¿•rþûÇýãü蹃î (ƒî )ˆe×ú³^{â/øù‹þº/ó¯BºÿVkÏ|Eÿ1×EþtÝYÈ>×þ¸§þ‚*z‚ËþAö¿õÅ?ôSÐWþ?cÿ®oüÖ¬®¿ñûýsæµ`ÐOÒª·Z´ý*«õ¤vÿòŸþ¸Eÿ¡IWj•¿ü„§ÿ®èRUÚ`W1§kÓß^جҘŒ³ÝÇåE(â&À,IÈ sÇSéK-¥ò<½+TarX[bb½Büüt'æÇJ騪Z^§­gö˜HðíÇ*ítu8*G­eGâî|Mmeo gN”L¾{gt3·¶ÐN3܃éÉÖÀtTW=¯kséúµ•”WºušÏŽÓ_)#*TuääþU½™äGæ²<›FæA…'¹'ñ4-UÀ}Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ ~”Ê{ô¦RQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE^ÿþA÷?õÉ¿•rþûÇýãü먿ÿ}Ïýroå\¿†þñÿxÿ:î`û‚Š û‚Šbuþ¬×žø‹þ>bÿ®‹üëЮ¿ÕšóßÇÌ_õÑwV_òµÿ®)ÿ Šž ²ÿ}¯ýqOýTôÕÿÔÿ®oüÖ¬ªÍåÎ’ífP¥NÑ’3ŽqøSì>“ß—ÿ {ôªÎ9§µìtŸÿäÿâjº‡û·ø 'ÿHƒþBsÿ׿ô)(ÔN¨©Ó#³vÉÞ·.È1ÛAþT¶Šïs5Ã#"²¬h`¥ŽqÛï~•r˜Æá»»;*i'…ÚÝ®d¸+‘—”çå€úÒØøvîÚÏ@‰ä€¶3É)V8`Êàmãý¡×ÓQ@ZF—-ŒZ„s²0¹»–eòÉá[ =0k:?Ai¬iw6s\­µš¸1½ä­Œ´($Œpr8Þºj(Z“¬Ã«\ÆööPiÒ[ËGû[¸ ŸöBò*Ö•btÍ&ÒÄÊe6ð¬{ÈÆì f®Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ ~”Ê{ô¦RQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE^ÿþA÷?õÉ¿•rþûÇýãü먿ÿ}Ïýroå\¿†þñÿxÿ:î`û‚Š û‚Šbuþ¬×žø‹þ>bÿ®‹üëЮ¿ÕšóßÇÌ_õÑwV_òµÿ®)ÿ Šž ²ÿ}¯ýqOýTôQEQEKQ»–Ø[Å£Os(Š=ç  $ãØ‚(µ¹Ð¼Z––ê”·v”Ã;ú‚>âWþB/ý~ÿí)*_ ÿÈ*û_éTµ•¹¤îÍïÉÒÜoÙû¼w0}ÁE}ÁE1 ºÿVkÏ|Eÿ1×EþuèW_êÍyãæ/úè¿Î€;kOøñ¶ÿ®)ÿ Šš¡´ÿoúâŸú©© (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š¯ÿ ûŸúäßʹ}öÿxÿ:ê/ÿäsÿ\›ùW/áϾßïç@ÌpQDpQLC.¿ÕšóßÇÌ_õÑz×ú³^{â/øù‹þº/ó šâ]V; ¥ÛE>a_3Ì8ÆqüCÞª}«Å_ô µÿ¾‡ÿZKš¢E„€ÜánGä8¥û+Ï7ÿÀ§¬%IÉß™¯ëÐé…uòò'ëó3>Õâ¯úZÿßCÿ‹£í^*ÿ e¯ýô?øºÓû+Ï7ÿÀ§£ì­ÿ<ßÿž—°Îÿò+ëKþ}Çîæf}«Å_ô µÿ¾‡ÿGÚ¼Uÿ@Ë_ûèñu§öVÿžoÿOGÙ[þy¿þ=Áÿ;ü?È>´¿çÜ~çþfgÚ¼Uÿ@Ë_ûèñt}«Å_ô µÿ¾‡ÿZeoùæÿøô}•¿ç›ÿàSÑìó¿ÃüƒëKþ}Çîæf}«Å_ô µÿ¾‡ÿGÚ¼Uÿ@Ë_ûèñu§öVÿžoÿOGÙ[þy¿þ=Áÿ;ü?È>´¿çÜ~çþfgÚ¼Uÿ@Ë_ûèñt}«Å_ô µÿ¾‡ÿZeoùæÿøôå³,q±‡ÖêJ=ƒþwø}iϸýÏü̯µx«þ–¿÷ÐÿâèûWŠ¿èkÿ}þ.µãµ†H‘ó0ÜÇžÿãNû?Þ›þÿ¿øÑìó¿ÃüƒëKþ}Çîæc}«Å_ô µÿ¾‡ÿGÚ¼Uÿ@Ë_ûèñu³ö(½7ýÿñ£ìPÿzoûþÿãG°Îÿò­/ù÷¹ÿ™ö¯Ð2×þúü]jñWý-ï¡ÿÅÖÏØ¡þôß÷ýÿƱCýé¿ïûÿÁÿ;ü?È>´¿çÜ~çþf7Ú¼Uÿ@Ë_ûèñt}«Å_ô µÿ¾‡ÿ[?b‡ûÓß÷ÿ>Å÷¦ÿ¿ïþ4{üïðÿ úÒÿŸqûŸù˜ßjñWý-ï¡ÿÅÑö¯Ð2×þúü]lýŠïMÿßühû?Þ›þÿ¿øÑìó¿ÃüƒëKþ}Çîæc}«Å_ô µÿ¾‡ÿGÚ¼Uÿ@Ë_ûèñu³ö(½7ýÿñ£ìPÿzoûþÿãG°Îÿò­/ù÷¹ÿ™ö¯Ð2×þúü]jñWý-ï¡ÿÅÖÏØ¡þôß÷ýÿƱCýé¿ïûÿÁÿ;ü?È>´¿çÜ~çþf7Ú¼Uÿ@Ë_ûèñt}«Å_ô µÿ¾‡ÿ[?b‡ûÓß÷ÿ>Å÷¦ÿ¿ïþ4{üïðÿ úÒÿŸqûŸù˜ßjñWý-ï¡ÿÅÑö¯Ð2×þúü]lýŠïMÿßühû?Þ›þÿ¿øÑìó¿ÃüƒëKþ}Çîæc}«Å_ô µÿ¾‡ÿGÚ¼Uÿ@Ë_ûèñu³ö(½7ýÿñ£ìPÿzoûþÿãG°Îÿò­/ù÷¹ÿ™ö¯Ð2×þúü]jñWý-ï¡ÿÅÖÏØ¡þôß÷ýÿƱCýé¿ïûÿÁÿ;ü?È>´¿çÜ~çþf7Ú¼Uÿ@Ë_ûèñt}«Å_ô µÿ¾‡ÿ[?b‡ûÓß÷ÿ>Å÷¦ÿ¿ïþ4{üïðÿ úÒÿŸqûŸù˜ßjñWý-ï¡ÿÅÑö¯Ð2×þúü]lýŠïMÿßühû?Þ›þÿ¿øÑìó¿ÃüƒëKþ}Çîæc}«Å_ô µÿ¾‡ÿGÚ¼Uÿ@Ë_ûèñu³ö(½7ýÿñ£ìPÿzoûþÿãG°Îÿò­/ù÷¹ÿ™_J“V—ÍþÓµŠcËòÈ9ëœüÇÚ´vŸJ­ö(½7ýÿñ£ìPÿzoûþÿãZÆ<ª×¹Ï9sËšÖô,í>”m>•[ìPÿzoûþÿãGØ¡þôß÷ýÿƨ’ÎÓéFÓéU¾Å÷¦ÿ¿ïþ4}ŠïMÿßühÎÓéFÓéU¾Å÷¦ÿ¿ïþ4}ŠïMÿßühÎÓéFÓéU¾Å÷¦ÿ¿ïþ4}ŠïMÿßühÎÓéFÓéU¾Å÷¦ÿ¿ïþ4}ŠïMÿßühÎÓéFÓéU¾Å÷¦ÿ¿ïþ4}ŠïMÿßühÎÓéFÓéU¾Å÷¦ÿ¿ïþ4}ŠïMÿßühÎÓéFÓéU¾Å÷¦ÿ¿ïþ4}ŠïMÿßühÎÓéFÓéU¾Å÷¦ÿ¿ïþ4}ŠïMÿßühÎÓéFÓéU¾Å÷¦ÿ¿ïþ4}ŠïMÿßühÎÓéFÓéU¾Å÷¦ÿ¿ïþ4}ŠïMÿßühÎÓéFÓéU¾Å÷¦ÿ¿ïþ4}ŠïMÿßühÎÓéFÓéU¾Å÷¦ÿ¿ïþ4}ŠïMÿßühÎÓéFÓéU¾Å÷¦ÿ¿ïþ4}ŠïMÿßühÎÓéFÓéU¾Å÷¦ÿ¿ïþ4}ŠïMÿßühÎÓéFÓéU¾Å÷¦ÿ¿ïþ4}ŠïMÿßühÎÓéFÓéU¾Å÷¦ÿ¿ïþ4}ŠïMÿßühÎÓéFÓéU¾Å÷¦ÿ¿ïþ4}ŠïMÿßühÎÓéFÓéU¾Å÷¦ÿ¿ïþ4}ŠïMÿßühÎÓéFÓéU¾Å÷¦ÿ¿ïþ4}ŠïMÿßühÎÓéFÓéU¾Å÷¦ÿ¿ïþ4}ŠïMÿßühuFŸqÿ\Ø~•Ëxsï·ûÇù×R¶p†÷ƒœ4¬Ãò&¹o}öÿxÿ:î`û‚Š û‚Šbuþ¬×žø‹þ>bÿ®‹üëЮ¿ÕšóßÇÌ_õÑvÖÄ-¤d@I5Muý-ì~Ø—Aàó A‘‹0ì?…A©Û^ÞiVðZ$R#2ùé$¦=éýÜ€zœgŽ™¬k aômPšæ"fÔ$Ž%ó¾]äô$…ëéÚ’þ¿¿ëñ:›+û]FßÏ´”IJ“‚#¨ ò±¨?¶ôÿ·‹#9YËl£`¥½´ŸlÕóL´³une»¹"Ibù•¦aœ gŒúU-búÞçX±[kÿµM Ò§…È8A'“Ž)õH]6†½¦›ñeöŸß—1Œ£-ýÐØÛŸlÕ‹Ûû]:ßÏ»™b!A=IôrO°®~}ZÃT×VÖ{Ûx`²¸ciy¦8ì ŸÄûu³®°´Öt­FáXÙ@dY)"&`6±·g¶itCê^]Mk)îü÷X`ǘ^R¹éò‘“ùSìµ› Bv‚Þfó•w䉣lzá€$W9­ëIªéÜvÒÅ%¤ÂRhùÉ-ósÓŒ “M'ñU¼–Ú“jËöwI%*¸·‚€/ÌxÆ3Å5¸=æÕ“ûLØEmq3¦ß6HÕvE»¦âHúð hW;eckqâ­bâkx¤š‡Ë‘”O“±íYÙy^k»BÞNŸ*).éæ|ÙÇ'Œ÷¥Ðæ•~øú× )£jré7ö²ÆË’]Uï™±¼œ•ÎpAâ¶|'º]\Ëge4 ¨ 8™Ÿ›$uúS°®t6ÿñíûƒùU}?U±ÕæÊáfJa“®:ŽŸJ£­ßKaá²Ößñ÷2¤ãÖG¯åœþ‹¥Åw kÖ1ÜYAikw´ýÕÁ—t¨ V9EÁ#pïž)/ëúþ·Ñ_×ü1Ñ[kÚ}åëZ[¼ï"»FOÙ¥rÞWocÞ´«ŒÓ¯àµ×-­4mUïíg–Wº·dVû8;˜¶à ¯ÍÆ=iž'»Òµ { Oí–SB©#Eizc¸è;‡ÀàõéGDlvÔWÚ­Ž¹ýðûµÞ’‰ÀW IB}@"°¬NŠIMÉ  blðÛÏOCÆ¿¯¿ü…ëîÿ3Óè¯7»ûchþþÔ‘#±+/˜×ñ<‘ç?ºó@eço©ëךµm¦ZÜMáë+‹ˆ5;'7N˜Cåã‚ O È&‹ÎúŠå0˜ÿh§Í§5‹­5)–êåm­§±‚ÊMŠ÷ 9Röì!ˆ^#©õ¤ôWÕØê¢•'…%ŒîGPÊqŒƒÈ§Õ ¥mÄÍÇ'™U}çàvö«õRVmt˜QE†QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEÇøsï·ûÇù×a\‡>û¼w0}ÁE}ÁE1 ¹ÿVkÏüD§íŸúh?zã(k×lËüÀdƒšèíU¾ËÊ~èíRíoîŸÊ¼þïÅ·öÌ@Ò,ßð"¨ê ÿÈÏþú?áHg§íoîŸÊ­ýÓùW˜Â}©ÐÏþú?áGü'Ú—ýlÿï£þéû[û§ò£ktþUæðŸj_ô³ÿ¾øQÿ ö¥ÿ@?ûèÿ…z~Öþéü¨ÚßÝ?•y‡ü'Ú—ýlÿï£þÂ}©ÐÏþú?á@Ÿµ¿º*6·÷Oå^aÿ ö¥ÿ@?ûèÿ…ðŸj_ô³ÿ¾øP§íoîŸÊ•U·_JòÿøOµ/úÙÿßGü(ÿ„ûRÿ  Ÿýô€=*ßþ=¢ÿp*’¼Ð|EÕÀhÖà€HßáKÿ Xÿ =¿ýüoð J¢¼×þ6±ÿ@{ûøßáGü,mcþ€öÿ÷ñ¿Â€=*ª :«KsùÆÜ»wnÏLç>õÀÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð¥_ˆºÃcÛûhßá@“\‡WßïçUlücªÝ …ºgÝmhv†5ŽhÓÁ÷è†QLa‘T.¬Ä äV!Ð-q Ç!'`ª§ÃQ“÷å]ŽÀ{Q寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùR FÜ•v>ZúQ寥svÚDFV͵¨ˆ ¶Ôà  )h ÿÙnip2-8.7.0/doc/src/figs/ir2.jpg0000644000175000017500000002240413224651032013001 00000000000000ÿØÿàJFIFÿá°ExifII*JR(i‡Züÿÿ)( üÿÿ)( 0210‘ 0100 ÿÿ   4ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀ4 "ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?÷©þá® Å_êž»Ùþá® Å_Ꞁ4-â´¾ð®Ÿq#ÆMºaÔrŒ9VààÖÂ_À±¨iK0ÛŒŸZfþNƒgÉÀˆ ç5 ìŒíAìd9þT†eÇý“ ÛÝÅm\¿ß™aÛêØÉ¤Š= ¶»†ÎÞ;—Îé’³êÀfµ¶]úEÿOÿLv¸…wÊ£`êQÉÇ¿A@¨4¨®%¹ŠÞ®ey’¾§4iÆÃKÓ ²·wò¡@ªXdŸsïW¦¸•eHaS$® ¶©'ñcUÿžÿ÷üÿñ4ö…·÷Ïýòj1sb. áWÎ+°É³æ+œã=qžÕg¯üð·ÿ¿çÿ‰£¯üð·ÿ¿çÿ‰  ’\Y³É*mK†Ëó„y`; ÷œâ¢Ó>Å¥éÐÙÃ#²Æ9f»’ÇÜ’OãZÕç…¿ýÿ?üMÕç…¿ýÿ?üMEý¡mýóÿ|š?´-¿¾ï“SC4ÌÏÊc•1• ‘ƒÐƒøÊ¥ÜßÞ?Tþжþùÿ¾MÚßß?÷É«{›ûÇó£sxþtSûBÛûçþù4h[|ÿß&­îoïÎÍýãùÐ .lf1™U\ÆÛвgkzCÉæ–k«ˆŒSªË •tÜGÞ¯noïÎÍýãùÐ .lf1™U\ÆÛвgkzCÉæ¤þжþùÿ¾M[ÜßÞ?›ûÇó  s`’K""+ÊA‘„x/“ߎ*DÑìÞÎÒÞÝŸï´0-õÀæµw7÷çFæþñüèÚl|ó>ÕóŠì2lù¶ç8Ï\gµAxš>£³íÖ–÷[3³Ï€>ÜõÆG«¹¿¼:77÷ç@‘* 3g ¼1Ú° €„£hæ’o웑žÚ D?êƒÂgû¹~©¹¿¼:77÷ç@?´-¿¾ï“Gö…·÷ÏýòjÞæþñüèÜßÞ?Tþжþùÿ¾MÚßß?÷É«{›ûÇó¨^ö¤És¹è¬àÊ€"þжþùÿ¾MÚßß?÷É«{›ûÇó£sxþtSûBÛûçþù4h[|ÿß&­îoïÎÍýãùÐOí oïŸûäÑý¡mýóÿ|š·¹¿¼:77÷ç@?´-¿¾ï“Gö…·÷ÏýòjÞæþñüèÜßÞ?Tþжþùÿ¾MÚßß?÷É«{›ûÇó£sxþtSûBÛûçþù4h[|ÿß&­îoïÎÍýãùÐOí oïŸûäÑý¡mýóÿ|š·¹¿¼:77÷ç@?´-¿¾ï“Gö…·÷ÏýòjÞæþñüèÜßÞ?Tþжþùÿ¾MÚßß?÷É«{›ûÇó£sxþtSûBÛûçþù4h[|ÿß&­3°ÇÌy`:úš…î'iÌÉæHsn} ÓùÊ€#þжþùÿ¾MÚßß?÷É©qªÿÏ ûþøš1ªÿÏ ûþøš‹ûBÛûçþù4h[|ÿß&¥Æ«ÿ<-ÿïùÿâhÆ«ÿ<-ÿïùÿâh/í oïŸûäÑý¡mýóÿ|š“¯üð·ÿ¿çÿ‰§Ã3È­¼‘k®sƒÿê þ4ö…·÷Ïýòhþжþùÿ¾M[ÜßÞ?›ûÇó  ŸÚßß?÷É£ûBÛûçþù5osxþtnoï΀*h[|ÿß&í oïŸûäÕ½Íýãùѹ¿¼:©ý¡mýóÿ|š?´-¿¾ï“V÷7÷çFæþñüè§ö…·÷Ïýòhþжþùÿ¾M[ÜßÞ?›ûÇó  ŸÚßß?÷É£ûBÛûçþù5osxþtnoï΀*h[|ÿß&í oïŸûäÕ½Íýãùѹ¿¼:©ý¡mýóÿ|š?´-¿¾ï“V÷7÷çFæþñüè§ö…·÷Ïýòhþжþùÿ¾M[ÜßÞ?›ûÇó  ŸÚßß?÷É£ûBÛûçþù5/Û`ó¼Ÿ´ÇæôÙ¼gò©·7÷ç@?´-¿¾ï“Gö…·÷ÏýòjÞæþñüèÜßÞ?Tþжþùÿ¾MF—61É$‘ª¤’deÈ=øâ¯îoïÎÍýãùÐ{O§¼ÞsÆ.Ãó[iê¹ôöªðC¤X¬§Oµµ´–E#ÌŠØ/ç€3ô­Íýãùѹ¿¼:ätíÊ×Q{Û¹-&sEåÛØƒcqa“¸œcŸ~+qÛK x!`ˆcPѵÁQÇ€8ö­-Íýãùѹ¿¼:ÏI´è¤Gi" Œ2Ç‚t\ã§µE"é[µ¼¶–ï9v K’HÆ3žõ«¹¿¼:77÷ç@ÒÚh3ÇsiÖr$#ljöÊB@â¤4{¡¸´·›ÉÿUæ@Ëÿw#µw7÷çFæþñüè4¶–ÐË ‚ÌZD1 ®ORF9&šƒHŽÏì‰kÛg>JÂuÏÝÆ:Ö¦æþñüèÜßÞ?P6"s8Udòþb£3מ(k›™&eV–0B9L²ƒ×¶p*þæþñüèÜßÞ?PŠâÂÜ8…0ì]ÂGÌz“ޤúÕ Z[EðõÕµª$h°°XÑ6¨=àVöæþñüë3Äèw„õò›ŸÂ€2¼5þ¥>•ÙG÷q¾ÿRŸJì£û‚˜†Ï÷ p^*ÿTõÞÏ÷ p^*ÿTôÑØh¶Xÿô`§ëW—0ºEUd08,}3Û}ÿQYœhvý¨¿ô`§jÚˆ†Ao%¤w²n!Ï~{`úR&Óõt{aç¸,­ÃºñóA“Œûf®]J’i—#Sà¡®bc²m’’XFã‘Ê€9'ÐzŠÕ·g ã98d•”‚ó9?1“þCVÿõÂOæµxˆÁ¢>à,©#}ªA± @ -÷‡<¯iÓþCVÿõÂOæµý…ÌÞ,Ñïc‹u½¼7 +îi`›xÎNpzP·M®kH·€Çl×7W3,ðÛ½ÎO-Ø 'Ú²Œ-¤ŠM1†®—kgö!0!¤eÜ“wo9ÇcÅ;W·ÕµíocÓB\麖+s:Ÿ´D\†è¤†$ÓÖ[èZÌ·RxƒìJ·ßÚ1Ý%™rbXÌ[K}ÝÄzã Í ÏúÛþ?/ëø‘ñƒ¥´‘I¦0ÕÒílþÄ&4Œ»cîíç8ìx­MYmP]Ãqjm/låò§ƒÌ 0!°2 ô̾…¬Ëu'ˆ>Ä«}ý£ÒX—&%ŒÅ´·ÝÜA'®: Öï‡loc¼ÕuKûqm6¡2²ÛïcD@«¸Ž2pOõ¡yÿ[Áþ¿øÙ?ä+?ýp‹ÿB’¨Þkºu„æ æo4 •HÙÈúízOù Ïÿ\"ÿФ¬}CÂÖZãÝ<×1HøÜ"eÁ c<©ç~U•W4¿w¿™½IË÷­¥ä;þ­'þzÏÿ€²ñ4ÂU¤ÿÏYÿðOþ&©ÿ§ÿÏå÷ýõÿGü!üþ_ßQÿñÏÍŠìŽÎLóKðÿ"çü%ZOüõŸÿdÿâhÿ„«Iÿž³ÿà,ŸüMSÿ„#OÿŸËïûê?þ"øB4ÿùü¾ÿ¾£ÿâ(æÅvAÉ€þi~ä\ÿ„«Iÿž³ÿà,ŸüMð•i?óÖü“ÿ‰ªð„iÿóù}ÿ}GÿÄQÿFŸÿ?—ß÷ÔüEØ®È90Í/Ãü‹Ÿð•i?óÖü“ÿ‰£þ­'þzÏÿ€²ñ5Oþ?þ/¿ï¨ÿøŠ?áÓÿçòûþúÿˆ£›Ù&ù¥ø‘sþ­'þzÏÿ€²ñ4ÂU¤ÿÏYÿðOþ&©ÿ§ÿÏå÷ýõÿGü!üþ_ßQÿñsb» äÀ4¿ò.ÂU¤ÿÏYÿðOþ&øJ´Ÿùë?þÉÿÄÕ?øB4ÿùü¾ÿ¾£ÿâ(ÿ„#OÿŸËïûê?þ"ŽlWd˜æ—áþEÏøJ´Ÿùë?þÉÿÄÑÿ V“ÿ=gÿÀY?øš§ÿFŸÿ?—ß÷ÔüEð„iÿóù}ÿ}GÿÄQ͊샓üÒü?ȹÿ V“ÿ=gÿÀY?øš?á*Òç¬ÿø 'ÿTÿáÓÿçòûþúÿˆ£þ?þ/¿ï¨ÿøŠ9±]r`?š_‡ùÜx§N6ÒùÍçl;3m ±Ç%q[±ˆ-£Ë<Ý–Üœc?ZåçðUªA#Auxó%Ù0O`~N•¨o!•¼ÖûËê«•Ç®FGç[Òuýâ_#–º¢šö-µæK ÔV³\ÛbM‘I„Ú…° †ÇSøTßÚÿvoûòßáQéÊ%77G•š@ÈI#*W?˜5wˇþyûèÖ¦oí»7ýùoð£ûBîÍÿ~[ü*Ï—üò÷ѣˇþyûèÐoí»7ýùoð£ûBîÍÿ~[ü*Ï—üò÷ѣˇþyûèÐoí»7ýùoð£ûBîÍÿ~[ü*Ï—üò÷ѣˇþyûèÐoí»7ýùoð£ûBîÍÿ~[ü*Ï—üò÷ѣˇþyûèÐoí»7ýùoð£ûBîÍÿ~[ü*Ï—üò÷ѣˇþyûèÐoí»7ýùoð£ûBîÍÿ~[ü*Ï—üò÷ѣˇþyûèÐoí»7ýùoð£ûBîÍÿ~[ü*Ï—üò÷ѣˇþyûèÐoí»7ýùoð£ûBîÍÿ~[ü*Ï—üò÷ѣˇþyûèÐw‡Du9”ÌS-]Zè“€ ŒŸÍêF 0/ˆ¨­ÐI©Þ!èÖèæôí š‹ä¼¹±yt¶ƒMÔdh¬îŒÁ‹°É”0SŽO¾+CYÖ¦Óî¬ìl¬¾Ùw¼ÇKå¨U³3`àrCÉ®wOÑu¯+CÒn¬V+]4݉”‰Â…Qów ä c½h^E¬É{¤kɤfêå†âÁn°WÆ ¹Â’ ŽãƒTíý~ˆµ6tMY5­4]Z GŠh\‚c‘IV\޼޵£X¾Óntí2Szª—WW2ÝK6ávÎÜ÷ÀÀÍmSbAY‰ÿw¿õØè´­:ÌOøû½ÿ®ÃÿE¥!™÷"Ó-§xdË¡Ãyp»€}2 Šþ­'þzÏÿ€²ñ5׃ì.ndŸíq™¹TuÚ 98Ê“×'­EÿFŸÿ?—ß÷ÔüErJX›è‘èF.UÍ)\¹ÿ V“ÿ=gÿÀY?øš?á*Òç¬ÿø 'ÿTÿáÓÿçòûþúÿˆ£þ?þ/¿ï¨ÿøŠžlWdW&ù¥ø‘sþ­'þzÏÿ€²ñ4ÂU¤ÿÏYÿðOþ&©ÿ§ÿÏå÷ýõÿGü!üþ_ßQÿñsb» äÀ4¿ò.ÂU¤ÿÏYÿðOþ&øJ´Ÿùë?þÉÿÄÕ?øB4ÿùü¾ÿ¾£ÿâ(ÿ„#OÿŸËïûê?þ"ŽlWd˜æ—áþEÏøJ´Ÿùë?þÉÿÄÑÿ V“ÿ=gÿÀY?øš§ÿFŸÿ?—ß÷ÔüEð„iÿóù}ÿ}GÿÄQ͊샓üÒü?ȹÿ V“ÿ=gÿÀY?øš?á*Òç¬ÿø 'ÿTÿáÓÿçòûþúÿˆ£þ?þ/¿ï¨ÿøŠ9±]r`?š_‡ù?á*Òç¬ÿø 'ÿGü%ZOüõŸÿdÿâjŸü!üþ_ßQÿñ§ÿÏå÷ýõÿG6+²LóKðÿ"çü%ZOüõŸÿdÿâhÿ„«Iÿž³ÿà,ŸüMSÿ„#OÿŸËïûê?þ"øB4ÿùü¾ÿ¾£ÿâ(æÅvAÉ€þi~ä\ÿ„«Iÿž³ÿà,ŸüM1üCayåÛ[Ë7™4‰0:pXÉf«Â§ÿÏå÷ýõÿH|)o`ñÝÛOw,°È±Ù 0'¢ƒÓ5Q–&ë™+8à¹_,¥~ŸÕŽ”‹sÙ<Ýc|£³óÆ+>Öú4„Äþk¤xò#c¬@ç‚£ûdññ‘œgvùã?­YÓ¡Ô™¡Ã¼’IÉ áœ‘ŸÀ×QÀ;ûBîÍÿ~[ü(þЇû³ß–ÿ ³åÃÿ<‡ýôhòáÿžCþú4[ûBîÍÿ~[ü(þЇû³ß–ÿ ³åÃÿ<‡ýôhòáÿžCþú4[ûBîÍÿ~[ü(þЇû³ß–ÿ ³åÃÿ<‡ýôhòáÿžCþú4[ûBîÍÿ~[ü(þЇû³ß–ÿ ³åÃÿ<‡ýôhòáÿžCþú4[ûBîÍÿ~[ü(þЇû³ß–ÿ ³åÃÿ<‡ýôhòáÿžCþú4[ûBîÍÿ~[ü(þЇû³ß–ÿ ³åÃÿ<‡ýôhòáÿžCþú4[ûBîÍÿ~[ü(þЇû³ß–ÿ ³åÃÿ<‡ýôhòáÿžCþú4[ûBîÍÿ~[ü(þЇû³ß–ÿ ³åÃÿ<‡ýôhòáÿžCþú4[ûBIGÖ&ÿ ¯®œèwdt1åZ>\?óÈßF³õÞ4;°–•døkýJ}+²î ã|5þ¥>•ÙG÷1 Ÿîà¼Uþ©ë½Ÿîà¼Uþ©è¢²¥ÐmDdo ®»ºe[#?•K#y™4Ù]±‚v›tª–Oåi¶™»t/e".p½N?ýrR*Ã;.ìÝ\ñœâÑMߟÝ?§÷†PÉ Îq>äã§1ñÿÒLÓÜÂÖëk,B@UžB˜ zôbsŠc;.ìÝ\ñœâÑMߟÝ?§÷†Fv]Ùº¹ã9Å£›¿?ºOï €Zt‘n£¹ˆ#:+.×$;€qÐv©~×{ÿ>ÖßøßüEPgeÝ›«ž3œZ1é»óû§ôþðÈÎË»7W•ÙG÷q¾ÿRŸJì£û‚˜†Ï÷ p^*ÿTôQ@ºl¬—𵤬y=C éœíŸNù×¢ŠC ÏK™&×îlmbœÈbÌò)úaëEwÉOGÿ¿þ4y)èÿ÷ñ¿ÆŠ(òSÑÿïãJz?ýüoñ¢Š<”ôûøßãG’žÿüh¢€%=þþ7øÑä§£ÿ߯ÿ( ÉOGÿ¿þ4y)èÿ÷ñ¿ÆŠ(òSÑÿïãRÖ&þÏÑ/ïb]Ò[ÛI*‘È%T‘žzqE»ä§£ÿ߯ÿ<”ôûøßãE <”ôûøßãG’žÿüh¢€%=þþ7øÑä§£ÿ߯ÿ( ÉOGÿ¿þ4y)èÿ÷ñ¿ÆŠ(òSÑÿïãJz?ýüoñ¢Š<”ôûøßãG’žÿüh¢€)E6ýnêȯîⶆU"GÉ.Òƒžz|ƒõ«¾Jz?ýüoñ¢ŠJz?ýüoñ£ÉOGÿ¿þ4Q@ÃÉOGÿ¿þ4y)èÿ÷ñ¿ÆŠ(òSÑÿïãJz?ýüoñ¢Š<”ôûøßãG’žÿüh¢€%=þþ7øÑä§£ÿ߯ÿ(  ZÄßÙú%ýìKºK{i%@ò9ª’3ÏN*ï’žÿüh¢’žÿühòSÑÿïãP0òSÑÿïãJz?ýüoñ¢Š<”ôûøßãG’žÿüh¢€%=þþ7øÑä§£ÿ߯ÿ( ÉOGÿ¿þ4y)èÿ÷ñ¿ÆŠ(òSÑÿïãRŠmúÝÕ‘_ÝÅm ªD’]¥<ôùëE»ä§£ÿ߯ÿ<”ôûøßãE <”ôûøßãG’žÿüh¢€%=þþ7øÑä§£ÿ߯ÿ( ÉOGÿ¿þ4y)èÿ÷ñ¿ÆŠ(òSÑÿïãJz?ýüoñ¢Š<”ôûøßãTµ‰¿³ôKûØ—t–öÒJär U$gžœQE.ù)èÿ÷ñ¿Æ%=þþ7øÑE%=þþ7øÑä§£ÿ߯ÿ( ÉOGÿ¿þ4y)èÿ÷ñ¿ÆŠ(òSÑÿïãJz?ýüoñ¢Š<”ôûøßãG’žÿüh¢€%=þþ7øÑä§£ÿ߯ÿ(  QM¿[º²+û¸­¡•H‘òK´ çžŸ ýjï’žÿüh¢’žÿühòSÑÿïãP0òSÑÿïãJz?ýüoñ¢Š<”ôûøßãG’žÿüh¢€%=þþ7øÑä§£ÿ߯ÿ( ÉOGÿ¿þ4y)èÿ÷ñ¿ÆŠ(–±7ö~‰{î’ÞÚIP<ŽA*¤ŒóÓŠ»ä§£ÿ߯ÿ( DS Ž"è\2Œýò™ª:Ôcû&öâxžmÇ®3üG©úwÉE3¼5þ¥>•ÙG÷SÿÙnip2-8.7.0/doc/src/figs/scr21a.png0000644000175000017500000007440013224651032013407 00000000000000‰PNG  IHDRZ0É…]Ÿ IDATxœìÝw\çð'²‡do·€{cÝ[qýŠ–jÄ-â®8PA÷ÂU«¶jëhµX­Ö…[hÝÖ… (2dƒ’Üýþ! ¥Â%ðy¿îåëòÜsO¾‡x&ß{‹¦i  'ó5Ó!@ua3Ô4¤ê¤ê¤ê¤ê¤ê¤ê¤ê¤à3³àÛ[ðí«v´j’N¬éèÝÔÊÚá¿·,^u„  !€OA•twµàÛo|U([\ðj›ß¾ûðRŠ &ÌÚþ$-ÿÇ¿ÿÉÎHeàí´Òð)ØzÑó½ !{æ]’->?o!¤åüH=6ÉÎH­á¯å÷ŠE„ž >o³5!5éø4n_m°Õå¾½2ÿy©HR"*}z%«Û`ÛW.D¡ýÛwöinÝÀ¹IÇAQ‡*6FÅn ëÚÚÛº³»÷³7þþ¡o-:¶n^ïæVÖNnÞÝfFÿ"¢•ÇcÁ·§iºÂûª>WR'n×’v͛ԷqV¥Šn\Ó£·uç&‡î¹ùN±šìËÃÓ»Yðí¿ùþ±¤üþî@ ¾}ûéGÔ¿)@Í@:> G×nû—N”¨`æÁdIIâsóE”Ë—ìu9r•Ÿìë¿toQ‹À[ÿ}j›îÙi²Glýõòï…Ýæ?K~º'ÈzoÄÄa[Ë¿<ß[?*(ê þðU¯RÿÙ8ÂàÀšéƒ×ÝWô¾ôa~¥ç†%zÆÞºŸõ6éS¯=ô®ÝO—⯞’þ"!ìëi9‹¥ä3Õ¨u'Fºý¶ÐoÏ£¼œ‡ß÷[|ÖÄuÄ™uÃ?õMªK’M““ùZÕ!AÁugÏÿ±Lz¤>ùŽM(ÿ†žgóé_Ÿ>îd¬K‘<—|3æév)OpìY¢¯‰.!D¥‡¿ôè ×kùe'ž'v2Ö Ó­ìZóL:¦=;Làîz£ ìüË$/®°ø¾µKžq›´çÇ”Æ#ûŽêϕԼ–œÔPŸ[iSŠûqIIMêqiªÄÒÆƒÅâ¼KO–b±uÞ½}©Ø‚ ÷z'¯Ñ¯¹‘'ÅÇîþÑÑ”÷ Õ½à“ñŒ;¬mÏ/Í=ñ,/÷éš?rK­ÛGJrr®”B:ü{ˆgÜVöèíB!!d°»«ßÞÊ®5!¤¬à¦äPB‘Ò´—¢S¯1!¤¬èÎG†W鹪r•jRKa±õ !4-–9¢ü3Ϭöײ¢÷Š„n_E#š騊›&BÎ>sjöÏ„›ú*­ÖÞX—ü› „ nÉmg¤K¹˜”$é矑*yÞNñ2Ð!„<|/"„ß?&„èzdlÿåÜ*`³X„–Ñ„"|ÿì¡â7¿}¹÷¹AƒÞý<ýnìñÔ¢ê à“ Uah7nº‹qfBؼ¿²L\&Ú*­1»#!$dæŽÔ| àÍö¹ކv „ûCz‘°ì}ÞÝ+¿Íòï.9´lŒ!döÆs¥ÂÒs›¾%„´\ü‘±ý—s«À×D—¦©è+É¢²¼#+fJË)ỉýçóí§6í8µÞ‚U4cÀôL!+1(@:ªhÒÆÁ´¸´TLûm TU§aྗŒ5¸»³UÆ-z¾ï±Yöhã‰ûDN6NØîãáæÔÌwÞ¶s-c$‡Ú,><(ï`¨½½ç´Ã…þ³ÖœÓâ#û/çVÁ¶}amÜøÿ×­IÇÿ%6^!-?4ÝïôÛâÑ[íß ^½}Ooõ>ý\¿iXY4¦åÔL%Ú½ê¤ê¤ê¤ê¤ê.& ¨ÅÌ­ì˜4zÔ9HÔ9HÔ9HÔ9HÔ9HÔ9HÔ9HÔ9Úš°àÛ[ðí?ã)Uh@KqÕ ^ï\½îçÓWž§f‰hÓú6›žüq[²$ÙŠìŒT¦­§2 *yþ¿ãÞ-Ü´éëÞ­ê‘âGñ—ر©&ƒû¼ðE L‡ x<žìK•逸9ã/¦÷ØrfæP'B!¦>]ût,S…ŠÝ²d;اoòŒøÎƒÇÎ^=£Ÿdìä9öéõÓn:ø0%ÏÂÙkÖÚ]ãÛY~ÌY¿¬øfîæ£‰Yï³Þ&B^Ù6ä‹Å14³nÛÓ/jM¨£*fQéËÆn_äˆ9ç^<õ6àB„ï9¹örÌo¼HhãèLd’l_¼bׯÏÓ -œ›L]\±%•AZtlý·kœ~ñ¶ÀØÆyÀèéÑ¡C¹,?Ãk¢öürïEš®…Û¸¹‘a£[KÊU]TùÏmCHØ–C÷’ÞY» Z°*¸»ô©ØG@®¿€â¡Š?LÕP{¥½N‰¿y%3ã-Ó0ƒÃæXÔ·jÝ®³³«»l¹ÊtÀê3o!ßö³SUáÁæÑ_¯¸êùuô³Cïî;téÄDî¿Li,­z×î×Kñù·7´±1ìëñO|ÌYa‰ž±·î[ê—ç{Ü!öê–VΦÿüÕí›Íƒ³=îý8DUH\=—M½mGǦ,<œtz¼;!$ùèâRŠvíªWáJŸìë¿ô¼C¿¹·.L°&ÙÛBF|ä¥Ý[?*(ê¶×ô¯æv»°fDÀšéÏY®§B›+óÏ®o†.:×à‹é—M¶ãdïžKÈṨ‰gu~=gÍÊÞ2rù’±):ŽwÏÎHU:X€ÅR÷^ö‡YéO öyó:åÚ¥sýý¾tpñàp¸,¢â1@í%¦DÏß;sò¨.gkç -g©êBßÀÆA@ÑioSyÿ~ß”> –œ2ÈÃõZ~ى牌uÅÂt+»Ö<“ŽiÏKkÆ%%5©Ç¥©K‹ó.=ùcκ–œÔP_i’BlÁwâê9e¼ºBT¤ŸyÔ¡ù,}K¿Ô‡!S›yÎ*Ùþàéˆúú²§ ót»”'8ö,Ñ×D—"È¿ÒÀÃÿc.m€»ë‚²ó/“¼ ¸ÂâûÖ.ýyÆmÒžS wˆ‡Û•|Áá§/zšòª¹(¹¨x¦]Òžþ¨ô’-øö,¶Î»·/eÿ‚d{Èþ0Õ\ÔbæV*3û•ÊÉ|ý#`ÄñŸ÷wï=ØÑÅ“¦)𦙀1ïÆ'ÜŠó -QÙ; I=îßEÂ;ÅÂvF:’éj‰Û…BBÈ`wWiIYÁM¹!,¶>!„¦Åy–l. óæÁ•{o=JÊ{_&¹}‹¯Ô_a=«á¡nK£ŸÛŸ1œuòPæ{3Ðõõåª]/(#„t0Ö•¼ä·•=ª&È„"!!¤i=.!D§^cBHYÑ¥‘Ü*,#„t1‘ÏTzQrQÉý|¨ë ûìô'PûdgfØ:ºP”¹¨ãlì³Ë-Q™ø¶¿ý°Ÿ^.ÝûèÌt/¥Úé^É\LJj^OÝòÿå¬Qþ‹î £~¹ÐΕKå×·mö1÷ññëDüq[Ô7ÖBˆß†1ŠuÚë^Î\/(+_pë#ƒô2Љ/,{ø^äeÀ¾LÑ5ôVu¥qù‚¸|\ï€J/J.*]ãvª®”ÍbÑ´°Œ&º,"|ÿÊŸHeP[Ñ4ÍasÅb!Ó0ŒËáÊ}÷Tùl¹óš}}]Œ"GÌØxäEz¾˜¦rÓžÈVˆí@ þö‡ô"aÙû¼»W~›åß½Ò>é,MBŒ8âÂ_V¯´q «ÖË;šè¾úuñ‚_^ñL;¯ô±TÆìŽ„™;Ró‚‚7ÛCæ~dËÆxBfoD5k!ÄwÎI¹K‰Ïþ05®¯‰.MSÑW’EeyGVÌTÿc©Ú߀Vc±X„Ð4EaÆ 6«Âü)*sxNûã®ü¸eã¡¿X7ï½®gdâÖÄ»Ióò‡á'î?¢¹zïv%D߬Y›.A1•Þ‘?é¬#û¾Y°uZ6óù._N_IȨ»ë묞ݼcXÂCB:¬ ×Q6_LÃÀ}? ÃVìÚÙªá:3‡F36“SC?&È6‹EÑsb†Úo*6æ;ûÏZ·nN ¥Q4œðÝqÝÕQ»ul²Y×ÒuÜܨ¼¨=KÇönÿðUŽ¡µë„¥{£&xHÊ·…ô·åtŸÆnäß ¶í ݼñÝöÙzŽ™±‚?5?•ªý}h5›EÓ4MSLÀ0š¦Xì _UN%5OÕüˆU†©¡ŽÛ³}mÈÂU²R¦`XaAþ¾ëÇO •–`áy¨µØ,¬,Ì«ghÊt„(Ü‘í&»ò€ÒPƒðµ4ÜÇÎ5àî|‡g±Øºõ 8¸µ÷í=iæ„Æ¦ºUh ÿ‚,‹Ð4Á*ƒP#ÞæªüeÃ/!0ŽF:4ƒäk¼°´èuâ?¿ÿ¼§W«~nÇv3×c:.¨UØl6M¾‡ãðKŒ£ a³+ŒÀ``’Žž¡s“ÖS–Åü:ÍhÚøßËKiáðÉ>ò÷Ÿ°ò­P,*}ÙÈÙ'I –ž(*}ÙȹM’@,,@Sïw-šØÂ³a·Ö3·Æ©jJÚFÔ,Ÿ¨ä… ß3±T\±¤Ib©ØÀÈLRB‹ VMlkeeåØbbÔé'Óeß/ßÄÉΤ¾cϯ–¤••7B‹òVOîlcmnã9tÚ†1²P-X˜;4Póñaïîn•ìßY="ê¡ýÁK ¯ŸÆ 7»4pÚ®žËæÞS÷'Jë?ß;ËdØzgGZrkÙ°um]JHºs¢yÆvUMÕäEãÊ?ûJÆ `Ãö96®žkL?Ãà½Ï¤%ÏvM6µÍ•Ç–þ²]›ß÷»Œ¶Wž¼Jþû¸íÙÒò¿VXyßþèÇï^Å2ÿ³Ïij’ò¸Ù}w½öúóáË×N5KÚÑ}îUÆ/[­ÜäÒXh 6ÓØ…-øöòBh‘e÷wo“!ƒÜ]§Ä?îmÊ#„ˆJí¥'/Í>åÖ~ß˧?ë²M•hè³ án'c]iS½Ý\§Ç?êoVa¸Ò¦ªïº@ÓÜ»ubÈ¡ „é@ V)ywÒÁ{÷›”“’ÛQ/džažv1æ›äB|mmæ=LîkÆ#„”æþaáø¥¤¼ÍŒå墒–Îyé× !X/xôªŸ¤~N¬MÓõ¹i¸SÁgVXPpä‡ÿqS¤%˜;4BYñ=®ž‹dÿv‘ðš§›ôäi†žEÿyößλµ¾mýôk R}Vt2®0õà½"aù©”6u›Í"¶ Ÿ›žå …޳gÝÌÜÜÞ*-nVJ«Õy’_3ÉŸw‹Êº™–—ðL|¥å7‹Ê®8ÚHÛa±X’òÅÂ/¤õM{ ‹Çã—>;úß[¢Ò îïYnéUþÈÂÛ@'üî“Ö†:ruü7l¸wýõ¹›gý1÷ä ¹£^†:ò’ÇnRªš‚:+ @5ùj»‹¯wlþkцi¿/8³úÃïMB¼ u/æ–ö‘<íÏ»$-÷1Ðx’ÜÖP&•IÓ„f:2õ/è4Å/-|~ ƒ0w0ITVœô8~Û²à! 6îî')ŒnñMPôý”1%L{r{yðI¹E“ù]òvo»µñ¨á¤16rM-í1{Bô“Œ"aqæÁ_©oŠ`*ÁºýA šX4 óÍ‹Ù|#ú'Ãi_7¿-ÿÒufÐÆäþ€DÍ¥JKK?²¦žž^µFPÇÕ\:€ÅfïܼºÒjAÓæÖ@0Ÿ…ß>;#•é(>Y ¦X,BÈ’¨ÅC999‡š2eʲyÁ’j_û –©¹ÕVØ*¾ç'''·oß~êÔ©—.]RSR”àç鿯·÷lÝËó‰ûժ䠖©éÞr úöíûüùó¨¨(__ß˧«êPš}Ñ·û¬ÁË¢ã¶t²Ô§’ÝÞ¿u>ü{5G ÚM 0€Fàñx²/k.Àf—÷D(**244”ìÏž=ûÉ“'‘‘‘sçΕ«&'6hžã²#acÜ$/ݼº†ïê*Ù·àÛ\è¶'6)³0+=…察3uçÉëĸó »VO6æ°$Õ̾p×ïé¥:íîÛ0]R.!*}Ù¬ÑðߟÄ;ó82%ÿûýÉVN’´¸píÌÀí'o•é[ ÿ-<°|ÆúCÞ³[õ½{û|!DU$jJÚë”ø›W23Þ238lŽE}«Öí:;»ºË–×t˜˜¨¨¨‹/:99]¹re÷îݽzõš?¾\5EþÎÚ¶ßIU㋞º‹Kp0Õ'„\]è÷]ZïÓ ;­éôèÀýù\l/©6/ÞæäÍ»Ö$cíÄ–´‹[ÑVÚWÏesoƒ©ûOzHJžïe2l½4;@¹±Äo_Vï?ï}oM§¯Ÿ4RZ~gõˆ¨‡m^Jp5.ýañ—§µIˆé©>¨o^§\»t®¿ß—.—E4nš*€ê&¦ÄÏß=sò¨.gkç -gÕØ3j›½iM8ßÙkòäÉ/^>|ø?ÿüóðáCIeó‚§ÏYLS”âé|k‡´ôŽâB,øöç_&y”§6º»ºÌùëŸ>¦}Ñ[RžwιՖ´'dÛ)Í>åÖ~ß˧?ë²M•hè³ án'c]é“ü^n®¡ ÿmáÏžã$åƒÜ]§Ä——‹Jí¥'W @1·²«ò¹9™¯?c$Œ8þóþî½;ºxÒ4EÓ4Óá0æáÝø„[q~#¤%58X€Å&„B&Ož,IHwd«‰‰’t€»>çQ±¨¹ò€½dÊ‹º™”ˆà™tO’ò•–w)+’kDÏ¢ÿ<ûoçÝÎZß¶~úµ©>+:ëÊV¸_$”i¡³´üv‘ðš§›ô¥´ƒƒšH dgfØ:ºP”¹¨ãlì³Ë-©ÁÁÿN ÉLš4‰¢¤šXÉé3½-ÃO$õwSr¬¢&ÜËù‚^’gòq:M¤‡.å ÊŸí\Ñ5h®x®ÿ¦‘m÷®¿>wó¬?æž\!w´¹¡ŽLËW¥åÞ:áwŸ´6ÔùøH Ð4ÍasÅb!Ó|÷n]hÝe@™àý§žÈåpå£59•à‡žþ’ŒÀ¡C‡ÜÜä¿ÞËV“5`gdDÛ‘dí„-õÄIâ÷o[µl§’•– qœ:eÛÉ­“­IúÚ ….Ã6HÍ™¼ÅsÛT’±nÒB×Q›ϵh2¿K^Ãm·xG '=³1oy¤Ë¤)Û~Û:Ùšdl˜²PZÜ" (úÇU›Øe<»³gCxXL¬úH0• @ `±X„ÐJÇ¢h¯*ÜÖhŠ’›ª¯&§¬°d@ppð!C*­&¥gÙãÒÙµaK7u›#`;xú|5u•Òš¢Ž ÒÛ§q!1ê0è›ØˆÒCQ-ß nÛ,½T§ýÀÀØem•Í^Ѿí°õÓþ¸£x¬Cø±13}›oÕ³¼‚üù¤Ü;ôçða“†ø&¦Y¹û|Qi$PXlMÓ4tÔ*U¸­Ñ4ÅbWHÔÜT‚zõŒÖ,ŸWiµ9aQ¥ï «#<€:S B·gûÚ…«„e¥Lðy<üëJë.JŠó?õÄ‚ü};ן*-©Ñ…ç.^]coZ‡©Ü=žÔbl‹XÔ2¹¹¹„3335uØL ().¨±÷ 2K>i‘z†¦ï‹ò˜Ž´InnnÿC!§~ûUMF@î–¨| ~­„¬?€†(JŽ ðótsãÛ{¶îå¿ùÄ}¦#‚Z‹ÅbšVÜ _žŸ2²£ ߨ¢AóÎC×ý[i5F¶÷…¹’z†¦U8½ž¡©dcüB°aÃV-›„LInNNÿCòróòróú’›“£âÜ:œMPš}Ñ·û ó^Sâþ~”öòî¡Õ³bç3ÔZl6›&Dn{ÿîÏ‚-ú†Ü|ò*'íÅÑõS2N„(Vc|#U:«¸0·¸0·jçbÆMó7Rñæ“›ÛÐÐæÍšÝ»›pïnBófÍúš“›«ô\6»Bé¨Q±Aó— ÓoÌãèè»yu ßõaåà«{Â;z7µjàâÝ}ô‰å³ ¦Ý =ÀÕÉ¥¾G—a!÷ Ë×·àÛ+­¯ªœÐÂá“}5ä;4î?aå[¡X1< ¾}õ];Ô<¥ƒ~;Ã12vÙØ^ÖÆ<Ž®¾{Ëî‘û/IÑ¢¼ÕS†;ÛX›Ûx¶¡@\þÙÛÀÈìrÌ¢vM=Ì̬=Z÷ßs3ó¯Wvñò47ã{¶úkR¡´Úo‘“9ØšZ9÷Ÿ¸FzºªfSþØÒ³u3 3K»F¿Ý}Mڈ쟒B¡Ë¾_4¾‰“I}Çž_-I+Sò u §7j䈭[6r¹\.—»uËÆQ#GðxzJ+£w0iÃßYK†:©::ó–éÞ37Þ¾z°þKƒé#"%…>#Öt™¾îþóço_ÜšÞ2uô×'Ô×WU~gõˆ¨‡ö/%¼~7ÜìÒÀiªå A“”ö­ØcvM|ÖòáNJ;ÓÆÍî»ëµ×Ÿ_¾~pªYÒŽîs¯J{çN½f¸÷lü»Œ;-Cúwùæ¬ÎŽS·²2^nkÜ?BZ-ô¦mìçiÿüÙúíÞžó¯«ovÐWáW~™þðÜ.Ë+?ô¦éâ‚BHqANqAy¿ß¿VXyßþèÇï^Å2ÿ³Ïij•t'f¼K36lتc“ø÷e=}½éS'³ÿÅf±¦O\O_Oé¹r通[hjž.4È·vHKOá(;dÁ·¿ù*É]K¡ÅEõíZ¼{›(W‡æ4p÷KO¾¤¦¾ªòAî®Sâ÷6åBD¥‰v‚ғά,P«Ü»ubÈ¡ D¶ÐÄÄ"'?[é/açÖ ½êgÆ#„”æÄÚ4]Ÿ›vžb`lþwF¦§~ù/•¡™ÃŒLò—…F–žE¹i’jG_½í+9=÷tƒ¦ësÞœUÓl×Ö]Vì èÝÁÝÖBƒ±¹$ Ý‘ècg3ãA²¤qQÉ K瀼ôëª.\î\¨5ݹֺˀ÷…¹ŸzbaAÁ‘büÇM‘– wÔ(w}Σb‘Ê£zå˱8†4U&Ù÷÷‘Ñ{¸8¹XðíëÛµ•&©¯¯ªüv‘ÐßÓÍ‚ooÁ·ç;úŠJž¾Ë Åf³ˆÂèY}îƒb¡ÒµŠ…_˜ò$û<ÓžÂâ‡ÒÁºúÜò}Ž!!ÄýÃK#Z\*­ÖMzºÉeÅ÷Ô7{ü÷íégv êÔ̺Q—ˆ_“¤ÈíH¶›EeÃm ŒÍ ŒÍMømD%OÕ.f|„36lتc#ÿ—”lÚ²MLQ’—bŠÚ´e[qI‰Òs%·ÄwÈj¾T0ÓÛ2üDò'Þ¢A IDATâ?r~ëÉ«ã>ÎJOÍ|OÓTÕÞÚÛ@çLâËìŒTÉö.=¥jí€Qº²Àì––‹&)íIÛÌ@çbn©d¿4AÓ½så:ë*}IÈ…§_Ô5h¡¾YóCvþôÛã—¯/ï X=ñK¹Öä‚÷1Ð=ÿæmQ~¶d+Ì{WIwbÆ»4cÆ­:6‰_ JJ~úéç©Ófˆ„B‘P8uÚŒŸ~úYPR¢ô\ÌL°3òeØÈˆƒ3 Ë(aIâݸ%AýÔŸR(¢ô ëée<Ûâ_å·ŽnñMPôý”1%L{r{yðÅ:˜J°–Q:•àÀ½k Z~àÏŒB%,yqçâ·c¿ æ43hcRž $7iõ¸Ù®#—|ê;†®OÊ”æ&GO˜íæ¿X}³Ý‚"ã_d‰(›E‘Ïs9ëq.¤K_®žê0vÕÝWÙbªìÍãKÇ÷øÔØ ö133ûíÄñû÷xù´ñòisÿþƒßN733SZé`’žeKg×fœÞÔÙ«ß¹ùÈЭf}W©?åç¡?…Ž´màҲ奈æËªüÖÞ¡?‡·)˜4Ä×ÖγÏÄÕF}"ªÜh 6KÉBƒzõ{_»¼ùí©µm:›Ú¸ ™¶Á|À:É¡ÎëNÔ¿Õ­±³]“>ÙŽûcM'iï\¹ÎºJ_B¢[§öóvµnôŠˀ?":¨ovMwÙ#:YX:ô9¶ìÀ1¹Ö¶Në3ÖÇÕÐÄBòÒgÞ‰•íòûµ³´tì>>¨_´ÒÎÀ†&†&ä߯;6cÆíónDádjfvòÄqSSSS““'Ž›š™©:—ͪÀT‚µ™N%P“ŽÜõõ¤ùe¥ïkæíŒL- óÞÕÌ{@ÝôϽ­» (ÊÏ–+ÏÍÍ%„¨ê@),(ˆ=öý0ÿ@i ·šB`œÒÁµšD€ @]t€”Ü-½ Öb³X„¦iªŠ«Q|ª‚œÌ{/¨Ëªp«¡iŠtÔ,‹¦)Š3ÀçT…ÛE‰Ñ;j ”é4§Çt‡ÅfÑ4tÔn¼s³ÞTáDš¢Xl¤ áñô^¾xvãÚ匷iLÇÀ›cÉç·ïØÕÅ̓éX4—Í¡ÄbJŒtÔu"‘ËæÈ– ÚíuÊ«KçÏöêïgïäÂáà÷ê±X”šüòì©ãºº<;G¦ÃÐ8¦æõÓR^˜˜Y0à órLÍëË–àëh·ëW.ô2ªq3o¦`Œ™¹¥‰©Ùé‡GŽÇt,Ç£©÷ƒ¿®7öjcjQŸƒEµ N*/;+ñéý¦-;È–#Ú-+#ÝÆÖžé(fç蜕‘ÎtšÈ’ߨE›OæçR4æü€ºˆÍb™˜5jÑÆÂ’/[Žth7š¦0F€ÃáÒøž ‚£k#G×FLGÀ¼’âÙ—øÚÅF¯?Bp?PMîã/HhýG ~%Åßýõ]g¯&–Ö5Ô0vÅ•3ê,Üà“h}: Rk'¬ésö]z Ó@µ`áã/!÷CøDÕ›(JŽ ðótsãÛ{¶îå¿ùÄýj};¥Žf•ÌhÓ@²_iWÐ:,¶üÇ_Ö¿‰€)Š÷C5ª1Pš}Ñ·û ó^Sâþ~”öòî¡Õ³bçWßÛ©’#×Ã'¤ÚK±s,MÓ4M3 ƒ0X>I5¦bƒæ9.;6¦;ߘÇÑÑwóê¾ëwÉ! ¾ýçµiÞ¤¾µ!„å¯ ùª¡«kWïQ¡[ Ä´´ÚïÑ!^žžÖŽM‡NÛ(-WŽŸìÓ¨!ß¡qÿ +ß Åäßî|{É&Ý—ž„þÚSgHà~ %”jÔÆôÏ@¹j\Y`ÃßYÛö;©:ºè©Ë±¸S}BÈÕ…~ߥõ>°ÓšNÑo‘ÏÕÈö’jóâmNÞ¼kM2ÖN1`I»¸mU5xgõˆ¨‡m^Jp5.ýañ—§µIˆé™‘jÁ·ÏÎH•ԑ݇ÚOÃ$p?âñô^¾xvãÚ匷iLÅÀas,ùüö»º¸y0€zÕ˜x^"nb ²ý]kÆ;ü{t鱤è¿f8›òqž»{ŶV+Id¬äPôI¹ÓœÛZE'T5¸d÷ƒµñ?54åbøÕò˜‚éYiÈh;Ì û!€Ôë”W—ΟíÕßÏÞÉ…Ãaf]m±X”šüòì©ãºº<;GFbP¯ïîúœGÅ¢æ*2^2åŠEÝLx’}žI7añ$é!_i¹q—²â 5ow»HxÍÓMúŸŠê6&† „à~ ãú• ý†ŒjÜÌ›Ù0ÌÌ-MLÍNŸ8”_Ñ5h®¦o3‰/³3R%›Ò•‘#¨}ðw û!€TVFº­FÌeç蜕‘ÎtÊUc:`ÀÎÈ—a##^Ì,,£„%‰wã–õSZsÉÇÙS¶%ç Jó^E-t¶@zhÎä-ÉyA^ʺI ]G-PzºDDp‹o‚¢ï§äˆ)aÚ“Û˃(Öqâq.½-–-ÁT‚Úce$p?¢iŠ©1r8.MSLG \5¦ô,{\:»6ãô¦Î^øÎÍG†n5ë»JiÍNQÇÇXÆ÷öiìâ3øNƒ¯b#:HEµ|3¸m3‡}oYøÇ.S9 !Ä;ôçð6“†øÚÚyö™¸Ú¨O„b“{¶oŠ@m¢8“6‹Å’<"“îÔXY@J£þ9hT0²ª7ojìÚmãnŠårø±¹fs7œ»QI }C×õ ]§æ->4Åâ9tf¤š÷ê8oçóyê"­£ø…Ÿ¦Õ.H PKÕÍ(Ö ¥4ª³ŒFÀˆÄçOo^»œ^¥•>8lN}>¿]Ç®®îžŸ=0ЈnTU†©³$jåýßö¡j4*;¦QÁÔ¼Ô”WqÎ îïäæÉåèBž<¾ïѰ‰ú³ž=yÔ°qsBˆX,JJ|zòèº<={,Òñ¹¡óh7ü ¡E÷C ¾½d³´v°u÷î0ïZF‰ÒšUÎ```Ǫ˜{rnïè^­Lôu,ì{™ÿ¨H()x*Ưs3CžŽ¡¹í#gÞÎ)ŸÁšÐ¢!~6ÆzzÆ6ÃfíKúÔreÁÔ5×ãÎàâÑ˜ÍæP4EÑMSb±HýFÓ”¤2‹Ívqo4ôc¯Ç/*,dújjî€P)tÀЮûá¿ÿÅSEÙi¿¿È¿Ï¢WwÖ2Ô"rÿü¢¯~;{ë–_|ôE™‡#Gûv Ϻ»œ2|Ýùób¶wmiÁ-9½=¨wÛÙ¹Ï7B^¶ð|ƒ+‰9öTRh.Ã~èöë·*”+ †"”V÷O@sdefØÚ;ÒÔ‡95iŠ‹D„›—OµóíGh–âMѲ§ØÚ9defÊ:®¡áñôd_²ð•´ÚñC»‡5ÍÔÜ‚é@˜D‰ÅßmYî÷åÅCæVvUn6'óõJ%¹!´(¿¾C«wiÏ%‡.ôÛ›”Y˜•ž"­I‰ò¢¦í:/Ô·´ìPÔxI¹ßþDDà¼-??ÏxoÛ¨ýÒ1ƒÝŒd»¨©F!´ðÀòë]xSÌnÕkôîíómt8„Ôs;ƒÃ¿»ó2½ž•û˜Ë—Žm§ªPñr@ìÞ¶68d‰±‰©â!J”££ç É•Óâ|.ÏVR>×ÞX÷|Ê SBHÞ³EŽ=„ù)QU(—X½4dÂäP¹·¸ðàg¼^MÖÛ2iþ² “Á=ûç¡“‹+!„ÃáBÄb±âNòËDFMeÏZµdVii™u…Ó@¡ –Ê•htï€J™[Xe¿KG:ê¸Ìô׿VLGQtqNÚûÃLœ¤E‹žº‹Kp0Õ—­wýÛa‡ ^¼wÀŠdlž:BöÐÌ[¦ÏÜp5g_ÙòõˆÈÁw"²3R¿¢+V#„ÜY="êaÛ£—\KXüåÀimbzB†F|úX'÷ÒÌû×/$䘪BÐLj:Ëd\4õ˜&W(.+8¿gŠ¥Ï|ÉËCY%W$ûFŽï3;U…rõÁ´ë7º — uØñ+eŸóBhš’ôü©t‡¦)¹³Ø,Vÿõõ+üïïØ‘#Š…H€vkêÕ:þÊY===['6‡Ãt85‹ß¾I¾v>Ö«u‡Êkk Ùø\ží¶››¥/w­ï` ÿùdéѤµMr4åâ0cKd”ç×ÒC‡6Mv×ãBºŽ[WÖ‚%+ «ª¶d÷ƒµñ?54åbøÕò˜‚éI1æ°²S^¾Î´rkà9}Mù×~¥…c5’ªç‡ùÏŽôzjÿ£ÅÊ:õÜŽ&î””¼-Ûê–¨àèÚŠËÒªV®>˜úƼO¼,­D±Ù-— Åb!ä^|\›.}%ïwhš–;‹Ífs9\.ƒ>'¤@»YZÙ4oÙöö•3y9TÅ "@]Àf³MÍ›z·¶´²a:–O ý -(|wáÐâi£¶ »R¾°—B.€ò°XÔÙ¤ü»ϸ£ì!É—|B‹cHSeªÞQiµÛEÂkžÆxK¿¶ýt|ã¢5ß œ‘§ç2%|眎ª A3)]h#ãÆÎÎý×.½z³¿u=Ùrš¦E%¹§c‚º,Ì}¶b­Ë~S&väq!â²7Ý’šŸZ®&Bˆ¥ÒP'¼c³TõhÓ¹7¡i±H¤¸£¤w›Åáê ðy!ÚMßÀØÙ½©³{ÓÊ«Ôv%ÅL‡ðÉxF–}ÆGå-õ!džšjM ¸WóÝMy„AÁµJ›ýÈÁ¥Þ:áwŸ´6”ÿpiÞbà¶B?¿~ ³ÿØ9/ª*ͤø ðÏ‘°.Žo¼~Ó¿±™b}®¾Ù€i1sìÙ@ù²~½]¯ %s¾ÚUÏêKIµO-WŒÄÞ]ÛÿË5h‹Á¶l¹‡v4E‹ÅBBHa~ޤDq‡¦hJ>À>~ôgÌðy!ÚM?û€” èÝŃ‹ëÕï§¾ÚÒ¡NS§Åü¶%˜Oglšº°ÒfxœKo‹}m ÔW‹ný㪉MìŒ2žÝÙ³!<,&–ÒkJt䬱-œMÙ,B-©¬´`*A$7\ÿÂú±ƒ#ž¾w³¿“‘lyû€Åë·ô´.ÍJ:ºq¢©gùœA+}Û_0úüZ:yþðß•7«V®4Bˆ¾ñŸƒ?ãõh²˜uËDB!GfT/M—¯,ðìÑß­;÷ÊÏy§¸CÓV‹Å:\îÌyKŒM¸†ZDîÛÒPÓ¤sèè7jýŞؕêëwŒ<:rjP—fÄõ¬Mø–u>D}ý“{Žmß4§D¤þ‹ºwèÏáÃ& ñML/²r÷ù&¤|ÞUÝtæîy/%ŸïâµxÏj A3±ØlÙ—Ýgí#„ p6––¼ˆ­uÙ[ÎÕîÚ£7zæví{¸p#\rÔý«ã+ÿÑÍÅ,—˜õŸqü+·ª•+ †àaÔ1–VÖéi¯l윤%MIæhÕ©§dÅЦdçÈx›jie-()ærÐ;àsÂBƒµ™.4ø•æžqi»/íÙ!¦ÍupïÖ€àyJ¬y[¢ø›ÂtŒIO{}íÒ™¾}¬8p8lBHâó'ææ•üóÌÉÉsuoH‹©ô´”qgÛuêafa©¯_Oý‰ðIÐ;´À°¥?n a&LÛ2}‰ã õL‡MÕì}ŒÐ¨`jžu»¶¾¸{ûJ^N–˜¢!Ç«dF@@xí‚!„Ãf›š×oÙ®³©™¹®.&àüÌ-0Óöéà6ÍRßë´é=ú—ÈvL‡M£&Ó¨`açàbjV¿Ê§³X,›¥«Ëã`YñÏ éÐÃÙŽ´ƒâì} Ò¨`˜bhdTy%¨qòS›h5—K‰ÅLGA!”XÌáâñh(¤ V1·°Ê~—Ît„’™þÚÜŠé(”C:j•¦^­ã¯œ}“’È`J,~“’wöצ^­™Š@=t^í&”2€¦àñô˜@#XZÙ4oÙöö•3y9EU~B5`³ÙƦæM½[[ZÙ0@¥XÙ©LÇðŸ¼|ñìÆµËoÓ˜€6Ç’Ïoß±«‹›‡Ò æVvUn<'óu•Ï`¾1Ó!TPR\ÀtJ wh·×)¯.?Û«¿Ÿ½“ ‡ƒßg¨sÄbQjò˳§Žëêòì™@#àë7ÀÇÀ×'Ðnׯ\è7dTãfÞLÀ3sKS³Ó'=ŽéX@k`*AÐnYé6¶öLGÀ0;Gç¬ ˜G´Ò ÝhšÂ‡KÓÌÌ—Z éÐn,6~‡Áý>«‚vc³XL‡ p?Ò´uˆ±(h&¤@»±ðñ€‚û!€ Oñuˆ+]€qÕ›(JŽ [¼á÷ë÷ó‡F-¦ÌŸ6¸ùç} ¾}vFêçm´‹-ÿñ7÷þñÉ!+N_@›7š¶bÇŠqí  †)Þê,MX‡‹€€æ«ÆûciöEßî³/‹ŽÛÒÉRŸJzt{ÿÖùdðïÕ÷ŽPÉuŽ}Ÿþ«W×Es¾ßÛ’•÷,fY0ÇTl5 ƒ¤4db, ®§Š šç¸ìHؘî|cGGßÍ«kø®ò\€ßþóÚ4oRßÚB‹ò×…|ÕÐÕµ«÷¨Ð­bZZí÷è/OOkǦC§m”–KYðí%JvªÖ”ô\ÐFrSgÿßÔ6ûNOÜÖDŸklÓxn rPW`*A)ÍY‡‹€€&«ÆþÎZ2ÔIÕÑEO]ŽÆ%d¥§B®.ôû.­Ù鄇‰ñÇ›&ïí·è¦´Ú¼x›_nÞMºÛ2ã‡KnË5"&‘*/På¦@KÉ= [•Ùëéê†|cžy§á!ÏKDLPÃÐ;@JsÖ!Æ"  Éª1ð¼DÜÄ@åxךñ¦ú’ý¥Ç’¢wÌp6Ó×7wž»{EâÏ+¥ÕÊËÍœæìŒxq8¢Ò7­BS˜z@«ÉMõô½hóSsO3 Òî0>ÛmÀ÷ ÅPÓ0• €”Fu–Ѩ`dUcÞÔ]Ÿó¨XÔ\EFÀK¦üQ±¨› O²Ï3é&,ž$=ä+-7îRVTé›~Ʀ@+°+Ne­Ë9¶yн>—û)[ 5íLȦb¨IìZ=• f†O¢Qe4*ÐF‰ÏŸÞ¼v9½JK¥pØœú|~»Ž]]Ý=Vc:`¦·eø‰ä£þn•ÖlbÀ½œ/èeÊ#„ ât šH]Êô./¿¢k dU¹‡!ÿ¥)ÐFr¿cøõd X„à?`¨+Ð;@J£þ9hT0 uRS^Å]87h¸¿“›'—£Cyòø¾GÃ&êÏzöäQÃÆÍ !b±()ñéÉ£?êòôìV9©ÆÎKvF¾ qðbfa%,I¼·$¨ŸÒšK†8Ξ²-9OPš÷*:h¡Ë°ÒCs&oIÎòRÖMZè:jâ¹N<Î¥·Åÿ¥)L%¨Õä2îQ½üfìx/(+x3ÃϦkåLjízY”àç鿯·÷lÝËó‰ûLGµŠÜº›OÅøunfÈÓ14·ýbäÌÛ9Iù“s{G÷je¢¯kdaßkÌüGEÂòÓ+ÒÑs6•{ÿø—Ý}LõuLl›/Ú{£ÒúŠÁ|’ëq燌 pñhÌfs(š¢hЦ)±X¤~£iJR™Åf»¸7ú¿±×ãÎÊ5^½ô,{\:»6lé¦ÎarlOŸ¯¦®RZ³SÔñ1¡Szû4.$F}ÑAz(ªå›Ám›¥—ê´»¬­â¹'÷Û¾iN‰HÒ‡ð¿4ÚHn<žËÿ~ ½7ºãìŒ2½¶}Ç^<ÀT`5L‹Æ'c)b¨nrÙ±áënÌŸ³½kK nÉéíA½ÛÎÎ}¾™â}õÛÙ[·üâ£/Ê<9Ú·SxÖÝ儚þ°Õ³½}üî|+ÙWµž±ªúJƒ!„¥Ÿój VËḚ̂µw¤©“’Ò-‰!7/ŸjçÛÐ,Åš¢eO±µsÈÊÌ” ‰‘lã,M‰÷ bÌamupïÖ€àyÆ&¦LÀ°-Q üÇMQ,7·²«r›9™¯ÿCD*ÖæÐÐƒÇÆ(NH‹ò×Ï™ºóäõbÜyÈ„]«'sXDæÿñJ+HH_Zðí.ôÛ›”Y(YÏ ê‚ÝÛÖ‡,Qúñ€çsy¶bQ‘\9%ÊÑÑs+§©÷Ý­#’Þ´3Ò%„üàkwbÖµ#ƒä{Ûªª/±ziȄɡr5.<ø©uSoˤùËÖÉ–<ûç¡“‹+!„ÃáBÄb±âNòËDFMeÏZµdÖØÀé†FÒ± @•Õ>žÝ7üµm¿“ÒCWú}—ÖûtÂNk:=:pD¿E>W#ÛRE‹žº‹K®guª±3Ⲃó{¦XúÌW<”q=ÒÔcš\á«“c“:ÇH¿Û¯JÈœñtuCþ¤"në¾_ï=°Æ]Ÿ«¦¾ú`Úõý‘—u;~¥ìs~BMS’Þ’?•îÐ4%w–Ò{Ò Ý0=€„ÝÕ,E¼ôXRô_3œMy„8Ïݽb[«•$2ö“*(Úµf¼ƒÌÛ¡k@] ôŸƒ¤P§žÛÑÄr‡òŸé1ôÔþG JiQèÄ3QöI ¤ë[±²bBútÐäõù jê« †Rߘ÷ñWuÅfS´\:€‹E„{ñqmºô”¼WÜ¡iZî,¶²A…øŒÿaãÿþÚJ»¦Î¨>Zt?T³±šƒ?²‚"/©¨Å”v–¡iZT’{:&8 ËÂÜg¤å7vvî¿véÕ›ý­ëÉÖO»<éšËÊcVú•¨_ÏX±¾š`!–FH@åÞ±Yªz´éܛдX$RÜQÒ;@Ù½ÿA‚vãp¹”XÌt £ÄbWkþOW³±šƒÕWÐã° Å´‡E•¾¨Þ §ê˜½»¶Wvd°-›’KP´X,$„æçHJwhЦäÓÚÖ; RæVÙïÒMÍ-˜€I™é¯Í-¬˜Žâc ØÑvdY;a`GK=qÒ£øýÛV-Ûù;!dÉÇ©S¶Ü:Ùš¤¯ Zè2lƒÜ¹ª*ŒáLùîJ̸N✗»Ã¾Qóî˜J°.ë,Ó>`ñºÁ-=­K³’ŽnœhêY>GÀ…õcG<=|ïf'#¹²þžw””ëf"[ÕkÈŒ¿¯ž`Åz·sv…õŒ•ÖW !DßÀøÏÁU¾:¨SbÖ- …’9%hº|egþnݹW~Î;Åš®°²€X,ÖárõêÊ5Žth·¦^­ã¯œÕÓÓ³±ubËü#¨#(±øí›äkçc½Zw¨¼¶fP³±šƒÕWøöèêqó\§Õ³r55‚üúe^h¹u7· 0œ=ªÝµGoôÌíÚ÷qáF¸¤¼û¬}„ÎÆÒšobk]6!d­ÿ®1ûÿ‘kVÍzÆJë+ †RR\PÅ €ºÇÒÊ:=í•“´„¢)ÉÜ­:õ”Ì# ¸CÑ”ìÜoS-­¬%Å\à ^hàc¤§¥<}t§ /G®? @]Àf³MÍ=›x[7pPZA¨nµ±ªE@>FzÚëk—ÎtðícÝÀÃaBŸ?17¯äþ–““çêÞ"Séi)7âζëÔÃÌÂR_¿Â$)èÚMßÀØÙ½©³{ÓÊ«Ôvxä ¡QënjT0 u¬صíôÅÝÛWòr²ÄE„<žŽú³áµ :„›mj^¿e»Î¦f溺ò3˜"Ú Ÿ}@ŽF­»©QÁ€6²sp15«_åÓY,‹ÍÒÕåqÆV#µŠF­»©QÁ€–24’Ÿñô³P²Ø€öÒœuˆµkP¨k€ZE²1ÓQ¢m‹€@]ƒtÔ*’uˆß¤$2ØG€‹ß¤$Æýµ©Wk¦bP— V±´²iÞ²íí+g\‡X²hSïÖ–V6ŒP)VvF*Ó1@u1·²«ò¹9™¯?c$5FßÀ˜é*ÀBH ™Ð;j|ýø˜; ÎAïÐnA)Ó!h Oé@k ÚÇÓ{ùâÙk—3Þ¦1 8lŽ%Ÿß¾cW7¦cm‚th·×)¯.?Û«¿Ÿ½“yYª IDAT ‡ƒßg¨sÄbQjò˳§Žëêòì™´¾>v»~åB¿!£7óf:Ƙ™[š˜š>qxäèqLÇ 4m,!ò€fB:´[VFº­=ÓQ0ÌÎÑ9+#é(4…&Œ%Ä@Ð|H€v£i c8.MSLG )4a,!ò€æÃ÷(Ðn,6Ë ÷C2–y@ÃÕÅ|å}ËU•ƒ&c³XL‡ p?Òœ±„Èš¬6§ðõ¾.`áã/!÷Cš3–y@“Uo: (9.$ÀÏÓÍoïÙº—ÿæ÷«õíädg¤ª¯€|A-ÀbWøøËªHGÏAö¨èý?¦Ž²Ÿ˜Õ×Ð"r÷C€ºL£ÆÎhT0²ª1oZš}Ñ·û¬ÁË¢ã¶t²Ô§’ÝÞ¿u>ü{õ½#ÔArciš–î?ÛÛÇïη²GÏÍj9çøóE­>²>€Á`)úç QÁÔY‰ÏŸÞ¼v9½J«pØœú|~»Ž]]Ý=?{`̪Æt@lÐ<ÇeGÂÆ¸I^ºyu ßÕU²oÁ·?¸Ð?lOlRfaVz -Ê_?gêÎ“× ˆqç!v­žlÌaIª˜3|á®ßÓKuÚ Ü·aº¤\êžîï?n¡G9¸ì¶ÿ’6„’ì_Ý:üúæé÷|{IZ\¸vfàö“·Êô­…Kcþ)íGpuOø¼-??ÏxoÛ¨ýÒ1ƒÝŒ¤•+íkŒP•q§©÷ÁsþÚÔVZR’ù«ÿQ‹ç™Þõ}T}í‚'R5vF£‚¨›RS^Å]87h¸¿“›'—£Cyòø¾GÃ&êÏzöäQÃÆÍ !b±()ñéÉ£?êòôìk×B!ÕøÑaÃßYK†:©:ºè©ËѸ„¬ôBÈÕ…~ߥ5;ð01þxÓä½ýÝ”V›oóËÍ»Iwc[fü0`Ém¹F¦úò¸žI)+¸ºgê;!EɸzÈÆ7H¶Ú%~û²ZýyïŸg75¸]þøWòõ>;#Uö{þÌ[¦{ÏÜxûêÁú/ ¦ˆüo?¨ ª2î¯NŽMêÓÎHWZ²ÍoRß=?Zê(ÿW¬ ]´ë äçNøÇýaam"7væÉ¹½£{µ2Ñ×5²°ï5fþ£"ay5UciÑÎ?c==c›a³v‰¥ }j¹²` æ];?dT€‹Gc6›CÑES4M‰Å"õMS’Ê,6ÛŽÑÐÿ½w¾¨°é«ùœª±wÀóq•íïZ3ÞáߣK%Eÿ5ÃÙ”GˆóÜÝ+¶µZI"c%‡¢wH澓ίÖ*‚¬8!ÛH£žÍ¹G:¼<¡çX4;.ýûî þŽyÞemCÙjK¿ŒN˜&i'4&b­§Êµ^mšì®Ç%„t·®8¬!’rt ÐXÊ3î´(t♨û¤ïî._–Ò'GU~J¡>€ÖÑ¢'NÕM.;æ}õÛÙ[·üâ£/Ê<9Ú·SxÖÝåDõ˜Á†-<ßàJbŽ=•ڣ˰ºý:Æ­ åJƒ!„¥ÕsÝ \Vf†­½#M}˜×“¦h±HD¹yùT;ß~„f)îÐ-{Š­CVf† L #Ðaà>OOöe5¦Üõ9ŠEÍUd¼dÊ‹º™ðÊã3é&,ž$=ä+-7îRV\á™?!ÄÌ}–ðù7„ ܸùÙæ+¦9DºÏÚüBø“»©lµûEB™v:«‹Y¯<*ǦÊ*½F`[YÆ=íò¤k.+YéKKf Z3çdWÅGeÅúZGéýP3©N¨füà‰ˆ@¹}ŠãþäF#¦Ý]:gѯ׈¸ÚößüýêF:„Ôs;ƒÃ¿»ó2½ž•û˜Ë—Žm§t!† j/¹±3ÿØóï®mÀŠãã£Y.[AnÌàÎo/ŸOiT¿!M¢ŽMr챋Œ‰ªB¹Ò`!<žÞÀ…?ï%€½-)6›MQ2}zhJ,BÚuíKhZ,)îÐ4%{ ‹Å"„Ú»c³åßå„.X*WR這ޖá'’ú»UZ³‰÷r¾ —)"(ˆÓ1ø0ŠãR¾ wyù]ƒær'²u¬&›%}và4oÌv×áß7ŠMtze1Ѫb‡ðæ†:2í_•–kï_$H)ýK\ðSè…hÙ’©…ÄÛr±ÌY²ëh-úOmÃßYÛö;)=tu¡ßwi½O'ì´¦Ó£Gô[äs5²½äÐÌ[¦ÏÜp5g_ÙòõˆÈÁw"²3R¿±/zêr,.ÁÁTŸâ3bMôºuáß»òÄ¿® ýõ‰‡Ç‡B†F|úX'÷ÒÌû×/$ä˜Ò¦@{©;“q=ÒÔcš\¡Ü˜ÁCY%WË'2r |ŸÙ™¨*”«¦]¿ÑU¸4¨vüJÙçüD’‰!’?•îÐ4%w›Åê?p ¾¾V>D&tJoŸÆ…Ĩàob#:HEµ|3¸m³ôRöc—)™õÝqˆöâ°ˆþv„'¿¥…sûµÛN®N‡ðccfú6ß$ªg=$xùóIùÆÉ=ǶošS"Âÿ÷ÚK±ÞZÿ]cöÿóñ-ü¿½ûŽkâüãþ$a/Y²÷pâE°Š£Îº«¨Ôj«T'"ŠTpŠ¢"®Z[­‹jk­ÕŸJÁb]u/•%"Š(#Éýþ8Œ1¹„€†$äó~õÕ×å¹çžû>Qï¹{ò<ÏÕ6?€rR¡7 H™N(eþ Œú„g#]Þ?}ñæóÿ=zõ®ŠÂbUE{S¬Þî3½DÇeJTrØÀµL4 sg Î'ûõ[r&£¿•žpºøœA+-ö³Jž£6‡«|ÆÑ²©[º”`!æ†è¨'El–¤ÑüúŠâq¹â £Ø,ކ&ºdeäÚ=aWwñt‘Ço¶†Éœ„ÝsJø*4þ«Ðx)§ÐmüMQÞ7ô¶¦~«Ü¼ñ³°4ŒælØ;gCuúúÕé“ï‡KŒJø#ú ”–xûŠ;ÅÒ K~• B“¤L'”2‘ôZŒ˜Ûoýþu~-Lôu(n¾…7nÚfàÆŸBÝ?·Ë/`\ØÀÓ5ªEüOóöþ…]&¤$œËha"²K|Îà¨Æz[—.kbL)}¼EÏbTÝÒ%CÛ±eSÝjµ5Ø–ÍéàSôÚ¥¯ªŸÄ7(>Åí`§Ø×Ú ùvÈ› - W*t=”2PÊüAFÒçý•rùºúFzZo îm_6IÞ{Jl̬qmœÙ,B%©(LT]"sgN­78úî¯×2ú;Šädœ3´¼[Gÿy'ã¨ì¹þIÝ–gÔ-1Bˆ®¾Ñÿ&¨/Iñ‘ܪ*‡#H¡¨ê7 Ü»yÙÛ¯÷«â"ñ ŠúèÍ<OSCcFøC#žeü®ìµðGt€jkHsŸB…®‡R¦J™?ÈHú¼¿}›C¿ ±ðII#kWÿÉ‘d¾¢»fx`¯k9¯,]Ú.Úö‹,Ej™;ÓcÖNBÈg#AJ^ÏJ‹M$Ìt“²üòðî.&/‰Iÿ Ñ)cÜê–Î »y3·°ÊÏ}lmç$HáS|zí€ö{Ñëˆoð)¾ðÚyOÌ-¬*Þ•ipT¦Á­ m¨´ý»’FM˜mÔÈ¸æ¬ Úæ¸ÃÇ0üÞhj!º¤ŽìŠ Ÿ~BD ³{dž±“•äö qå¼€ñS€ZËÏ}z6õØÝúZÙ8p8lBÈÃûwLMk¸D—¸º7#„ðxüüÜœóiÇ};÷413×ÕÕ“~  ÁèPm >Ws>€Ïãq4ЦTSª¹3J €z²²±óéüåÕ‹é%ÅÏy|>!¤¢¢J[»†+*ªÎžÒ$„pØlcÓÆí|ýŒMLµ´Ô" ¸uÕfjfñ¢(ߨÔLÑ(RaþSS3 EG ,”jîŒR ¶ì\ŒM×ùp‹Åb³´´´… hЪͣ­wfúqk['vÃúÇ >—÷,ûìÉ#m½k˜f >ÄWïS ¥ @Š.& èÕfnaݺÏÅôc¯KŠE^ Øl¶‘±©‡§·¹…µ¢cPÊ3—y@™áòªMWßÈÙÝÃÙÝCÑ(–+ )Ï\BLäe†îPm¸÷Ê0—y@ù¡;e˜Kˆ‰< üX/ ž(:S »:[\øô3FPotõÂG0˜”F@ƒ‚ÇoY°Ô7t¨t¨t¨,% JEE¹¢Cøˆ¶¶Ž¢C`€îPmÊÖÞ(9hÚÚ:Ü;öŸ‚¼\EÅÀasÌ--;vêêâÖDQ1H‡îPmÊÐÞ(9Ä=ÍyœzòxïþCí\8ÅÜîòxÜ'ÙŽÿ™¢¥¥mçਤCw¨6ehïâÎ¥Ÿê7dd‹VžŠ ÃÄÔ¼‘±É_‡8^±‘0Âã¨6%iï"žä[ÛÚ+: B±st~^¯è(˜áÍ Ú”§½P Pª`@=¼7ãì?ùuZ:Ãæ4¶´ôíÔÕÕ½©ø^•ï0³´QðD™ ¹B @Ãõ@€¥Lÿ”*P9Or§:1È?ÀÉ­©G“rçÖõ&ÍZJ?êÞ›ÍZ´&„ðxܬ‡w?ð‹–¶Ž½Ø’Ãj÷K‚™%æ™7(hbh*t=dl‹Ñ@ÃgÄbôÏáÆŸICýZhk˜Ú~9bÆÅâ :ýΉ½Û7ÒÕ24³ï=zîÍ7UÕ‡LSÇAPÔËë)£zxëj6²m½`Çùó‹P+çÒN9Ö¥I 6›Ã§ø|ŠOQ|+ý?ŠâÓ™Yl¶‹{ó¯¿w.íä›ÒR‘Âå;:àMvÚÂEkž»^RÁqhÞn씹S·–ëkTç_þ1j@9‰4±"wÃE1¦khÛW•çBÅMž5bñ¶£/‰Iÿ Qûâ'rä/€¼à‘@@d°Œüù¹áI›º¶3Óx÷צ >>³_Þ_O{fþì ‰¿yér  ìÖ9êùÕ¥DèþroGß¡WæÓÛoóµíº ìÇIGÚ±Jî%EN"ãÓ¤äg †RQQþ9k ÚóÂ[{GŠÿa… ŠOñ¸\BHÆ?úvëG(–øŧ„±µsx^XPQYa@ … —cw@ù‹ÓÝzÌ›–ØÙ\—ŸuóâOæ’ÁGåwFPCâM¬p“̘(ÜN?Ø5,â¤MúÃb{~VhÏ.Ã~î~h´›ü¢Ÿ3Y@¤ÿýÃGªj×ÒéköœzVÆnß;p릹֚ÆCD–Ò¸srçûMÓ·¾žcKÈzBÈ­¿·½O·»,åûXB– HñßN ûwk–ý1å›;φ r$„Ýs’ÒDÎ+’Ÿ1Bˆ¶¶ÎÀˆÝu¬¨™>æ|6›Íçó)Åçñª!¾]¿"ÅãqÅ7(Š/|‹Å"„¯­¥-R¸»Ž…;Fî_øþáÊ­mר-]ém3KûÝ ·É*,}žŸCq_­ IþýÜkbä7d–UÁFmW˜Ä–£ùåšMܹv.â̶¨ðÄ}÷ ÞÚ6ï¸dsÒ`7CB$Þ4îøÜ’•Ó‚¶ü™Y¥k58(rÏÊïwâÒ#éÿ ²áæCÔvé,‘v:yþéI'sš7Ö#¤åʃ“{n!£WÊ!L¹kðK ^Y5|å Ÿ©—\Ê^4jàÔ—’z):(PR’zÇx•¯On›bî5W|WÁ¹ã&SEÿ>.Ë/É×P‹þ¸âRáô»«šYîÊz£áýÕ·;v­v×Õ’_z0¾ýe¬¨3væráßù ÝÀåBèÿ3nP_ä(Æk‘»Ö^~¾ñ''I{Üu9˜vÉÁX—r&bèöÜ>]J¶¢òc'ï·ÀëLLG:[x¦õïW­HAÜÃ,öM[æ#^ÔŒ Æ»w5e§ïœùíð˜ÁW¢‰ 7 çæûµtàék»,HÁúáÒ |QðÿÊIü¯µ™AÞk®¥S‹!cgÄÏ«óñí±H;½çù»3ŽÕf '¾-ô#Ý ’Tkt@V X¼õ¿¸Ì½ÍŒµ 1³4i^ó Bª[v4Ð ‚q) :QSÏíÀÃd‘]¯îíïùõŸ?ݼôQ*Å ýáØÊÿ# ÈÝ·Üõw›œ¸[hÁzž4³o÷-Ÿžœ %¿”`!D¦Çg³ù”HwÅãq !×2Ó:té[ñî­øEQ"G±™~6cwÀýw¼–úËß²ú{‡÷{—ÌŠýwº³±6!Îs¶.ÛØ~9‰9BïŠÝL§;…%GolM–/jϺ`w BH×ññe ÛM¤Þ4TŸô@VÜ¿“µ q˜ž³²é·Ò ‡›eÀ¸XÅ«|rûüªiÞ9fÿmé/´[´Î«äÙjU5åhÙò*ëòöe BK ¦6´Æ‚‹oªÎ6ý0ŸKµê õŒÍ´”EQÜw/ÿJš4¶KÄË{kéç“ýúÇ-9“ÑßJO8î?“Ϻ,?h¡+H±Òâ\?Å^Wƒû)~ 5ö#d‚”üR‚!„˜¢;jVÄfIÐÁ¯¡(—+¾Á0:€éZ$Çîw]ÎÍ2nk =m…Òo–q»7ª¾ j7ê^U6Y°«› ݨKeYó‰tª‹bq (~%½]ãMÃ2®ß‡Â;ÕX ('Æ¿Ö,Ž–ƒG×5Õ3H¶äÒ™Úuö³Jž£6‡«|ÆÑ²©‡˜äAÒ#‡ÊÑá°Jy”!‡Eá–?¤{êkF]½ãm ©¸Ð@eHê-ÒÐ505éu˜!ÕÝ·÷/ì2!%á\F@ ‘Ì‹Çî =+œ2ÚRO¨`!,éù¥³c˦šê@Û²ù"Ý|Š^; ôU1"¾Añ)¾hw@ýŽ˜áiu8û@@Í ³µÔ×øçUEocmBHÅë4Mý/QL}Uѧ:=]K¿o%¨ñ¦¡¥¾Æ™W=ª ?[cøB9IýsaSWø³x;=ª±Þ–ǥ˚BJoѳ%—(ä¯Á´S£-õ§lOOß™WühëÂïéѓڌ ŠýeÅ-í î]Ù¶6jaRõXBLè"sg:Ž]?oR»¦Våϳ$ü`Ü´z€SkÆ Ž¾û뵌þN†"%<¿~@;è¥[#áĉ+{™¾ùèª ¬¢äÙC­»FKÏÏ !DWßè “ê\;P+Iñ‘ܪ*çà Ð(ªúÍ÷n^ööëýª¸H|ƒ¢>z³ÇÓÔÐÐÑ3)\ŽÝ’c¢}FD“¸ ;™ëð²nfþ´qEd2Ûq ™²ñ÷ ÁV$?.(Âe؇á[aÁ‰M7†X“‚øÉ®#×É~v)7 ´%_;…LMú#q’%U°.$¢Æ´9©yeݬõ)¸ùP"M¬Ïèqó&uhnSšs-~ú×â»Ûé åÝ:úÏ <ç@eÏõOê¶<£žâøÜTkí)æX5~b¸Ë¢\= ç‘!ÑäPuG­g辨„…“‡t{˜ÿÆÂÝë»™ÌSùˆØÊš‰ fô={󙎩]Ç>ÃO¢Ó{ÌÚIàl$È™WÁ³ÒbBâ¶Œþé¶H±.ßì ½èë8» RÇç«q§+ØÅ˜Ÿ1BÈ»²×u¬¨s «üÜÇÖvN‚>ŧ×hß¹½Ž€øŸâ ¯P÷Äܪâ]™†ÁG=rìÐ1ï™z3Kãë1_ψ‘±@Pg"ƒeÚ˜szÄñlŒ/'¦­¸SÌ”Ìþ6fÏ· %åg VÚùø¥Ÿüó‹n}­l86!„¼Ñ`QÁS:ø¡øŸGáñøù¹9çÓŽûvîÉæˆÞ*°”¹­·ŸßË_sñÙ™{oO=œ >¯Ý;6ŒnÔÈXÑ(XâÊy㧈§›ZØÕ¹Ìâ§5gP>¿îÜ8:hŽ’Ül\ñÍ·ÁŠŽTØÓœGÿ]¾PRüœÇçB**ª´µkXIG‡Ãf›6nѶ}ãÆÖÚ:ºÂ“ˆ\G(¿aK~Y:ܤ*7qÚbÇAkÔEƒY: àáz  T?È+U0 Šì\ŒM×ùp‹Åb³´´´Eúˆšw̰½;¸C«'o5;ô ü-ÆWÑá@] ‰ áz  TKi(U0 ¢ EW<ý,”º;@Þ3ü&F]š%×S€¼¡‰ áz ÀÑÐàóxŠŽ‚Bø<GC©ï·@©Ì²CŒ”§½P {òH[ï/jÎ  Ì-¬[·ó¹˜~ìuI1ŸÏ¯ù9`³ÙFƦžÞæÖ  FJý¢AYäçæÜ½yEí=€ÑM[zZÙ80fÀ‹A éê):„¼+{­è ;T›²µ÷ ÄøÈî`„É ÚÐÝPXJ@í ;@í ;@í ;@í ;@íàÍÐÀUT”+:ÓÖÖIAw4pÚÚ:Ü;öŸ‚¼\EÇP8l޹¥eÇN]]ÜšˆïEw4pOs§ž<Þ»ÿP{'7À .x<î“ìGÇÿLÑÒÒ¶spÙ‹«!4pçÒOõ2²E+OEPßLLÍ›üuø×ãEva)Ahàžä[ÛÚ+: Űst~^/žŽî€ÏìúÚ!ö*äÔf–*ÐÈ ‚T‰h a (>æ€Úâp4(Š/žŽËb Ì,í_<‘13¿ªèû„; WöÊ5$%Q«oF~°P0€€øŠÁ@c±ñ¨5ÆË Ü»înêuÙ{щ?'¸Ëû\äs<£Š”P«ÒòÒæ–yDö0Ö–½üºE¥ŸòÍÈ 5'}Å`µUífѿۿþ>îv~iQ~Ž,é XlKÑ!(ãePÎÝwÁêëóö…®þ6’ûýÏ ý:|vÕ¿_,‹Qtê €š“¾b0ÈOÜ„Õý’þ—îk+c:( Ý Þ/ƒò}|zq#ú¢þÈý¾Ssõ6.¹Q¼¬•)þäDò¤¨íWåëY¸ž¾tÉ8_Bˆ™¥ý®0ÿˆ-GóË5;š¸sí4#‹B¨ª]K§¯ÙsêY»}ïÀ­›æZkr!ÿíÖE3÷ÿóœg8bfÜÚ)]èéèôÿÅ0³´ß°pÛ‘¬ÂÒçù9¥¹W—„-8töÖk®FsŸþë\ÕÆPS¼ÁÏ ÷Õš°äßϽ&F~C&lY\ž_²JC›4|¯&cùÂQ1VVü(ñºÓg<³-*¾,_tEÃÎËç^[½ ’"„Š_>{ͽØEÞÒO*›$ŒÁÈøõšyÌ ÐûgFj!¤¢äTÈI£›J?, @$¯¬ä6î}½jô_ïÄw‰¼€FøÅ4é[£ºz{ZÛºµòóÿñbÑ•_W÷ìèecëÒº[ÀÙo‡Ù¶iS+G¯§&¼æ½꣪vE{5oféТÿ„åyU~íMUÏFµ[B¹­þ‡çÆ¢Ëûötqr1³´ol׆[ž%ýØ›eÜî‚ðu¯*»)žÇË@óâû¶MJ5¥D%©²"$ÕÝ]§º(Ç€âWŠìÕ1ën/üâsBHþÙyO¼–u6Ò’~RáØ$a Fö¯7lÓˆC!‹«(r8$¢Ýâõæšµû;‰Ö€¦Š×CŽ–ÝŽ½AÓ‡Ì˯Ŵ33 7ÿ‘ö4ûZâwæs†ö :¥•˜’ú$ûƺÑS‡Å ²ÕjÈ!ùx°ž0Æá’͉§×82QöJI ^Ò KI!É2àQ<ÔOf(¥úçæûµô‹Ó×îÜËØëpy¡àX)ÅÖ–5ÇxdÉi.Å}ÕѽýŠ«7»5Ò¢S*^¥»´]tóþ)ã+ R÷Ïíò Ø‘Ÿ}šÐ3Õï>èc¬M©(ùŸsûõ¹B¾rsºzÇÛ@tæy_7×é™·¾2ùhs+I ùŠLœëíæÚoýþ1~-Lôu(n¾…7½W¤ÁQ=\]Âÿ½Ý»:¼Níò9ž>žÇ—ßêÝXäË®¦¤òi’*+rcÝEŠbœ(øâft‡‰Ï͉ðnÑâ÷ÌÑÖúRN*R‚¤Èƒ‘ôõ Ž*œܶEÙœ§–üïÖíý†b+2H·i튩áËŒ×ê(€†gyDÈäsÅÓM-ìê\fqáÓOˆ¨‚† 5j@4gÞñùs3ADÒÏgg5ÑÕ „P¼7æ6Í3gѽáïMc{Ï¢ÜûDô¦â„sûDú¦b»ë”Ì[t:·ü¡]ó ü¬“tþ“²;Á{¸º„ý{»/]ÔËcNíéIò…Ó¥˯*¶qšŸ*{¥$ßËÕÅoqb@O_7Sé_µôI"µüÅŸnw>º»O‹E(~ù€f^ó.]íl¤U‡oU¸ú=]]æþ{»gõÖ)›¦ßÒÑJ*¶nv$­™8}¡ø ‹Å”PqQ¡ã'ÍI”×/ ÏNÏyé:GÐ@Ñnä·ÀõåŒÓ¹„ÞSbÿ}XÄåóØ,BȇKpXpbvIEEINüäבóèÄèIm¾ нžSÌãWåÞ¹¸tÒ:=2°Éì ±w ÞT•î^6†NtÒæ¤æ•Éa)—¯«o`¤§õ¦àÞú™‚tI%,â8{ÊÆì’Šò’DZA.Ãæ‰çù"¬Ý¹¨Ó‚ŒÕ”¡¤ÊŠÅXwY˜µœÛ¥dëÆ  &Ó}RN*BRäŒÁHúz™°®ïwdæò«ãkÛ@°P0À{ª{=ì:¯ëïÁÉ·JdÌO?6BX"22ŽW.ÈV«!‡Dò€8Y†J!ãÈDY*%)xG#ÖªFŒ¡~â0CIÕ¿QÆõûð‡ÕI_Æ!“2bcAPoŒ—Ayu¬Oû:n¨Hâð¸A©áI„Ý5çö²±k2$ìТm¿2¬l÷l°O+‡6_]0 8éC'z†î‹êðzòn¶vMûþ°Ê°oõšœÖ,ÛßÏ˱̀KfAtbBp¯‰=d™Q¶osèÞж6.í¾š\Ð:R.©„Î+SF›göñjáâ5øŠÍ˜#Ñ_ˆ—iÓu…þE'K*èŒÕ”¡¤ÊŠÅXwÙ°Ew\2l͘ÄÑ5žT„¤Èƒ‘ôõ2ÒÐ':¦=7®) Æ…‚i’¹sbG`ïötµ Íì{ž{óÍûù7yæPk##ëa³¶ðjÌ LW V ,Ž~ÜáëF?«ü09\‡Ã*}?§[þ Ŧ¾ªnŽ+^§ké·¦·=õ5=|DœQðDÒˆBa-õ5þùPTš¦~Ë:C 1×;xUæ[ÏóŸ>ͬír’‚7m3pãϮ޾wbC`ÜÔq⊴‰²ÔHR¨ëFü>s!dý¬¿ç¬é#=0Ël©¯qæCÞ¢g1Jz~¥‚§P]~£.MŒ’ë)Øøêñ2(ÇѲ¼í¯>Ëù¼$Eµi˜wßµ7ê9u&{ë.¸Q>µf\‡àÿýx-# åGÏöAË»%ùÏ»ýümYá­¹þIÝ–O”ž@©ài@ ކŸÇ«9@CÄçñ8 CTx²€rv|·mṎ́ࢪڽIê¬ ÷˜µóMQÆg#Ö{ù•|Bˆû˜”å_æww11uý²°GtÊ7éù”Šª¿Y@®LÍ,^å+: Å(Ìjjf!ž®Œ·2>ç+çÒƒÚÆÝcZ¼™uíM=à§>&œÎ˜¢(+-6!„°4~Xû[~iEEi~Êš Ž„?äP&˜, …G[ïÌôãÏrbŒ¨>÷,çaÚñCm½Å÷bí€Ï¯×"Ÿe‹2H÷¡ŠD-`é,®‡R˜[X·nçs1ýØë’b>£ü@]°Ùl#cSOos kñ½òí8;3bËÑürÍŽƒ&î\;͈ÃZÚÙ£pù‰õ]«C©,½Ø²íœS·OÚ¿Á=4€þ¿à÷ÿ3Û¢Â÷Ý/xkÛ¼ã’ÍIƒÝ é`±oÚ2Ÿà¤±mFF®¹‘¤Á"„³g5 Ý"è „¼(x"þü<ã‚ñîcç]MÙé;g~;6óösM¶È"¿Òg<Îr×Ñ „P¼7íÚå=ÎÖËÕÅoqb@O_7SI‘œÏÎj¢[]‚¹Mó ´÷,ʽÏx^úc7×i™7û›èˆ”É!„â•YØ·{ž{ç¿@EÊž­þc¦›š):EâóxÛ—5A|—©…]‹-.|ú A€R“ïŠhÝiÓÚF]*Ë®ÓÛa›F Y\E‘Ã!í¯é `D?uBXŠ_)²woJBþñíþ=|œ<û¬þã1c t_]‚h¼rég¿ö¦ªg#ñtIQU–þ«ià)½Lø\°P0‘¼b0€$òíH}UAoT¼N×ÒoMo7n¿xfÚ„=I¡ív¸ˆUÛÙ¦mnüùÀÕÛ÷NlŒ›:®ÎÑêpX¥¼êÅç¹åém 4O½¯ˆ,Jîî1rQç0 V°P0¨9é+H"ßµ‚›n ±&ñ“#\G®{ŸÌ^¸¾Ÿ‡ÿòÉg 9 OþNڜԼ²nÖú2ž¥÷”ؘYãÚ8³Y„ªÆü’Œ¶ÔŸ²==i|g^ñ£­ ¿¤G6ùnB¬óÆé®o÷¯ X°Kz9'¢.t˜»PðK Ê 5'}Å`IäÛ°²Ý³Á>­òË5;œx$ÒçÃYõ‰ŽiÏÍJî5®£Gñ;®ŒOÑ+ºk†öº–óÊÒ¥í¢m¿Ô9ÚùVŸî²(WÏÂydH494ŠNï°øà´…Óýý¼ŠùÆß„ÆH-¤¢$5â–ÁåÎVuj `±4—”bó¯ÿfIüÒ¦þO-oIüóÛþ÷ŒVŠ€,%Ôwÿú¹ý£Þd]Û¨7"Ⱥ€‘|' ˆ3³tÔ·l¶âàAô(J}w`Q=…“ï‹@ ¡;@í ;@íh|ʂàŠê{)Aqååå2æÔÑÑ‘k$jÝ x,6;yýª³M#¿Ì,íUâHª'(9t€â±X,BÈâ•IRòD†O¢³À§ÃR‚ xlÙžó¥d«(¹µ",Èdz•“CÓvýgì:uÿóÐР;OÆŸý%e«,ý·¿ïÈ"‡>?ÿùÏÓ§o]8ºp|çKÉ?|Öt€â±Ù2Ý“HÊv"8D/toìÔaî6Ælޱ¥oOÿ„_OÑ{Í,íÿNïкec+BHiîÕÐÀ®N.íšt6óZi• œ£±3Û6mjåèñõÔ„×n®Ó2oö7щ±‘jJ‰A–* rw’y‹þ6¸åíšåg”ò§*oÅc³d›,ÀbóCw€».çz×Ë úÆFÐ È ÜPtyÿôÅ›Ïÿ÷èÕ»*BKèÔÝiÓÚF]*Ë‚c ¤ !,Ž!„~¦?R¼rzûf·» ¨FÝ«Ê&U8?¿Rzþkoªz6ú¨/@J!"Õ”ƒ,U¸ø¦êlS7Á!x§@ÃÉ x,ÙÖ”-´ƒÅâ_îÊx®€s½ƒWeÞ¸õ<ÿIáÓLŠúпúª‚Þ¨x®¥ßZÆŵÔ×øçCQišú-ë–¿­æ©÷éòŽA„§¾æ±‡^<¡ÿ+ÊÏ©[ ´ÐŠÇfs>%ÛW›ã_®>3aÿÝÜbEU¾}u-í¤BJ¹|]}#=­7÷ÖÏ Þœ˜]RQQ’?9Âuä¼ZUAØâ!޳§lÌ.©(/yá2¬†¢$å l2{Bì‚7Ue…»—‘k "¢'µù.(özN1_•{çâÒIju8(?t€â±d›, )›¶q§gwÞÿã›^¬¬Ý={ÌM:ÿó ÆÌû6‡î akãÒî«É­#…w­l÷l°O+‡6_]0 8éSÛZt^™2Ú<³W ¯ÁWlƉþ¢nù;,>8­Y¶¿Ÿ—c›—̘'/|®Dx†î‹êðzòn¶vMûþ°Ê°ot­凥€Y}.%¨£g¸zixÙ®,[Zñ4xèfõÙ «o$cÎwe¯å €šÀ›@ñðPϰv€ÚAw€ÚAw€ÚAw€ÚAw€ÚAw€ÚAw€ÚAw€ÚAw€ÚAw€Úù?:+!ФØZ“IEND®B`‚nip2-8.7.0/doc/src/tutorial.tex0000644000175000017500000005552513224651032013252 00000000000000\chapter{Tutorial} \mylabel{sec:tutorial} This chapter runs very quickly through how to use \nip{}'s user-interface. See \cref{sec:reference} if you want more details on how the different bits work. \section{Quick interface tour} \mylabel{sec:quicktour} Start up \nip{}. You should see something like \fref{fg:introwin} (the exact look might be different on your system). The menus at the top of the window are very ordinary, except for the \ct{Toolkits} menu which contains all of the image processing operations. The main part of the window shows a workspace. Workspaces are split into tabs (across the top) and each tab is made of a set of columns. The current column, where new objects appear, has a dark green bar across the top. Click on \ctr{File}\ct{Open} to get a file dialog and load up an image. \nip{} can load most image formats, try it and see. Check the \ct{Pin up} box to have the dialog remain after you press OK. You can also drag files from the desktop or from your file manager. After you've loaded an image, \nip{} should look like \fref{fg:loadedimage}. Double click on the thumbnail to open an image view window. Alternatively, select \ct{Edit} from the right-button menu on the thumbnail. See \fref{fg:imageview}. \begin{figure} \figw{3in}{snap2.jpg} \caption{After loading an image} \mylabel{fg:loadedimage} \end{figure} \begin{figure} \figw{3in}{snap3.jpg} \caption{Image view window} \mylabel{fg:imageview} \end{figure} As well as the standard keymappings, \nip{} has extra shortcuts for navigating images, see \tref{tb:shortcuts}. Use the \ctr{View}\ct{Toolbar} menu to turn on other features. You can have a status bar (shows image properties, mouse position and pixel value), a display control bar (lets you change scale and offset for display pixels, click on the arrow on the left for a useful extra menu), a paint bar and some rulers. \begin{tab2} \begin{center} \begin{tabular}{||l|l||} \hline Keys in image display widget & Action \\ \hline \ct{i}, \ct{+} & Zoom in on mouse pointer \\ \ct{o}, \ct{-} & Zoom out \\ Cursor up/down/left/right & Scroll a small amount in direction \\ Shift and cursor up/down/left/right & Scroll a screenful in direction \\ Ctrl and cursor up/down/left/right & Scroll to edge of image \\ Middle mouse drag & Pan image \\ Mouse wheel & Scroll up/down \\ Shift and mouse wheel & Scroll left/right \\ Ctrl and mouse wheel & Zoom in/out \\ \ct{0} (zero key) & Zoom out to fit image to window \\ \ct{1}, \ct{2}, \ct{4}, \ct{8} & Set magnification to 1, 2, 4 or 8 \\ Ctrl and \ct{2}, \ct{4}, \ct{8} & Set zoom out factor to 2, 4 or 8 \\ \hline \end{tabular} \end{center} \caption{\nip{} shortcuts for the image view window} \mylabel{tb:shortcuts} \end{tab2} You can mark things on an image. Hold down Ctrl and drag down and right with the left mouse button to mark a region. Ctrl-left-click to mark a point. Drag up and left to mark an arrow (two points connected by a line). Drag from the rulers to mark guides. Right-click on a label to get a menu which you can use to remove or edit one of these things. Left drag on a label to move the things around, left-drag on the edges or corners to resize. \fref{fg:imageviewregion} shows the same image with stuff marked on it. \begin{figure} \figw{3in}{snap4.jpg} \caption{Image view window with marked regions} \mylabel{fg:imageviewregion} \end{figure} Clean up any messing about and leave two regions on your image. The main window should now look something like \fref{fg:main2regions}. \begin{figure} \figw{3in}{snap5.jpg} \caption{Main window, two regions marked} \mylabel{fg:main2regions} \end{figure} There are three rows visible here, \ct{A1}, \ct{A4} and \ct{A7}. Each row has (from left to right) a pair of up/down arrows (these indicate that the row contains sub-rows: click on the down arrow several times to open the row up and see inside), the name button (left-click to select, Shift-left-click to extend-select, Ctrl-left-click to toggle select, click on the workspace background to unselect everything, left-drag on the name button to reorder items within the column, right-click to get a context menu) and the thumbnail image. Left-click on the name button of one of these images to select it, and then click on \ctr{Toolkits}\ctr{Image}\ctr{Transform}\ctr{Rotate}\ct{Free} (alternatively, if nothing is selected when you click on one of the toolkit menus, \nip{} will apply the operation to the bottom object in the current column). A new row will appear representing the rotation operation. Drag the slider to rotate the image (or type an angle in degrees into the box to the left of the slider and press Return). Pick an interpolation type from the option menu and zoom in on some pixels to check the result. See \fref{fg:rotate}. \begin{figure} \figw{3in}{snap6.jpg} \caption{Using \ctr{Rotate}\ct{Free}} \mylabel{fg:rotate} \end{figure} The same thing works for image processing operations that take two arguments. Left-click on one of your original regions, Ctrl-left-click on the rotated image (the box at the left of the main window status bar says what's selected and in what order), and click on \ctr{Toolkits}\ctr{Image}\ctr{Join}\ct{Left to Right}. A new row appears representing the join operation. Click on \ct{Background Colour}, type in 128 and press Return. Drag the \ct{shim} slider to 50 (or type 50 into the box just to the left of the slider and press Return). See \fref{fg:join}. \begin{figure} \figw{3in}{snap7.jpg} \caption{Using \ctr{Join}\ct{Left to Right}} \mylabel{fg:join} \end{figure} The \ct{Toolkits} menu is large and can be slow and annoying to find things in, so \nip{} has several shortcuts. First, you can tear-off menus by clicking on the dotted line at the top. If you're going to be using one of the sub-menus repeatedly this can save a lot of clicking. Next, you can set keyboard shortcuts for menu items by moving the mouse pointer over the item and pressing the key combination you want to set. Some systems won't let you edit menu shortcuts by default. For example, on GNOME, you need to enable this in \ctr{System}\ctr{Preferences}\ct{Menus \& Toolbars}. Finally, there is a toolkit browser: this shows the same set of items, but in an easier-to-browse way. Click on \ctr{View}\ct{Toolkit Browser} and the browse side-panel will appear, see \fref{fg:browse}. It shows all of the items as a single long list. Type into the search box at the top to only show items which match. Double-click (or press Return) on an item to activate it. Scroll to the right to see what arguments the item needs and what menu it appears in. \begin{figure} \figw{3in}{snap7a.jpg} \caption{The toolkit browser} \mylabel{fg:browse} \end{figure} The box at the bottom of each column is for entering new expressions. You can type stuff here, and \nip{} will make a new row for each item you enter. Try typing \ct{2 + 2} and pressing Return. The syntax is (almost, with a few small differences) the same as the C programming language. See \pref{sec:operators} for a list of the differences. Try multiplying the joined images by a small amount (eg. type something like \ct{A9 * 1.2} and press Return). Normally \nip{} will pick names for new objects for you (like \ct{A1}), but you can set a name yourself if you like. Try entering \ct{fred = 12}. Click the down button once on your brightened image and left-click on the area just below the thumbnail. You should see the stuff you typed to make that row. You can edit it to be anything else, press Return and \nip{} will recalculate. Try going back to your original image (the one you loaded from a file), open an image view window, and try dragging one of the regions. You can change any of the sliders in the rotate or the join rows as well. Right-click on a thumbnail for a useful menu. Use \ct{Save As} to save an image to a file. Use \ct{Replace From File} to change the image in a row (and recalculate the rest of your workspace, very handy). Use \ct{Header} to view an image's metadata. You can also edit the insides of objects. Click the down button next to one of your regions until the \ct{width} and \ct{height} rows appear, click on \ct{width} and type \ct{height * 2}. Now open the image window the region is defined on and try to resize it: you'll find that the width of the region is fixed, but that if you change the height, the width changes with it. This is a very general property of classes in \nip{}: you can use it to join objects together in complex ways, and to modify the behaviour of interactive objects. Right click on a column title bar to get a useful menu. Click on \ctr{File}\ctr{New}\ct{Column} make another column (handy for organising a workspace). If you drag from an image thumbnail on to the workspace background, \nip{} will make a new column for you. You can drop thumbnails on to other thumbnails to make links. There's a useful right-click menu on the tab name. Duplicating tabs is a very easy way to try something out: make a copy of your tab, try changing something, if it doesn't work out, just delete your new tab and go back to where you were. You can drag tabs between workspaces, and you can drag a tab to the desktop to make a new workspace. You can make references between tabs with the tab name and a dot, for example {\ct{tab1.A1}}. You can save columns, tabs or workspaces to workspace files, then merge them back into a colum, as part of a tab, or as a new tab. If \nip{} falls over (I do hope it doesn't), you can usually get your work back by restarting \nip{} and clicking on \ctr{File}\ct{Search for Workspace Backups}. There are a lot of preferences (perhaps too many), see \aref{sec:config}. There is a lot of stuff in the \ct{Toolkits} menus, but they do almost all have tooltips. If you let your mouse hover over a menu item for a moment you should get some helpful text. The toolkit menu is organised by object type. If you want to do something to a matrix, look in the \ctr{Toolkits}\ct{Matrix} menu. The exception is \ctr{Toolkits}\ct{Tasks} which repeats many of the regular toolkit items, but groups them by typical tasks instead. Operations can work on groups as well as on single images, so you can batch things up. If you save a group of images, \nip{} will number each image sequentially for you. You can use \ctr{Edit}\ct{Duplicate} to make copies of objects. If you select lots of objects and duplicate them, \nip{} will (fairly intelligently) rename everything for you so it all still works. \section{\nip{} for reflectogram mosaics} \mylabel{sec:irtut} This section quickly builds an infrared reflectogram mosaic using the sample images that come with \nip{}. See \cref{sec:ir} for detailed coverage. Click on \ctr{File}\ct{Open Examples}. You should see a directory called \ct{1\_point\_mosaic}. Doubleclick and you'll see a file called \ct{1pt\_mosaic.ws}. Doubleclick that and you'll load the workspace for this example. If you'd rather make the workspace yourself, click on the file type filter and select \ct{All files}. A set of 8 images should appear. Click on the first file, shift-click on the last, and click \ct{Open}. This will create a group of all eight images. Right-click on the row and select \ct{Ungroup} to unpack to a set of rows. See \fref{fg:loadsamples}. \begin{figure} \figw{3in}{snap14.jpg} \caption{Loading the sample images} \mylabel{fg:loadsamples} \end{figure} The images have been named to match their positions in the mosaic, so for example \ct{cd2.1.jpg} is the first image in row two. Open up viewing windows for the first two images by double clicking on the thumbnails. Move the two opened images viewers so that they are side by side. Adjust the zoom (using the \ct{i} and \ct{o} keys) and the pan (by dragging with the middle mouse button) so that the overlap area is visible in both images. Mark a tie-point on each image by Ctrl-left-clicking on a feature you can see in both images, see \fref{fg:readyjoin}. Move a point after you've marked it by dragging on the label. You don't need to be exact: \nip{} just uses the point you select as the start point for a search. It can cope with misses of up to about 10 pixels. To mosaic the two images together, click on \ctr{Toolkits}\ctr{Tasks}\ctr{Mosaic}\ctr{One Point}\ct{Left to Right}. See \fref{fg:joined}. \begin{figure} \figw{3in}{snap15.jpg} \caption{Ready to join} \mylabel{fg:readyjoin} \end{figure} \begin{figure} \figw{3in}{snap16.jpg} \caption{Joined images} \mylabel{fg:joined} \end{figure} Picking items deep in the toolkit menu is fiddly, so \nip{} has several shortcuts. First, you can tear off any toolkit menu by clicking on the dotted line at the top. Secondly, you can assign any keyboard accelerator to any menu item. Navigate to the menu item and while it is selected, press the key combination you want to use as a shortcut (for example, Ctrl-L might be good for \ctr{Mosaic}\ctr{One Point}\ct{Left to Right}). Now whenever you press Ctrl-L with the keyboard focus in the main window, you will do a left-right mosaic join. Finally, you can use the toolkit browser to display a selection of the tools in a pane on the right-hand side of the main window. Click on \ctr{View}\ct{Browse Toolkits}, then type ``mosaic'' into the search box at the top. The toolkit browser will display all items related to mosaicing. Double-click an item to do that action. Some systems won't let you edit menu shortcuts by default. For example, on GNOME, you need to enable this in \ctr{System}\ctr{Preferences}\ct{Menus \& Toolbars}. Join the rest of the pairs of sample images together left-right. Once you have made all the rows, join the rows together in turn to make the complete image using \ctr{Mosaic}\ctr{One Point}\ct{Top to Bottom}. When you've built the whole thing you'll see that there are differences in brightness between the tiles that make up your composite image. You can fix most problems like this automatically by selecting your final mosaiced image and clicking on \ctr{Mosaic}\ct{Balance}. This operation takes your mosaic apart, examines the overlap areas for differences in brightness, calculates a set of adjustment factors to minimise these differences, and then rebuilds the mosaic. There can be some problems left even after mosaic balance. Use \ctr{Mosaic}\ct{Tilt Brightness} to remove any left-right or up-down graduations in brightness. Save your mosaic workspace for future reference by clicking on \ctr{File}\ct{Save Workspace}. To save just the mosaiced image, right click on the thumbnail and select \ct{Save As}. \section{\nip{} for nerds} \mylabel{sec:nerdtour} This section sprints through a bit of \nip{} programming, see \pref{sec:program} for full details and a more formal definition of the language. The insides of \nip{} are built with \nip{}'s own programming language. It's a pure lazy functional language with classes. It's C's expression syntax (more or less) plus approximately Miranda/Haskell function syntax, plus some basic class stuff. \nip{}'s main window is a class browser for this programming language. Click on \ctr{Toolkits}\ct{Edit Toolkits} in \nip{}'s main window to pop up the programming window (see \pref{sec:progwin} for details on all the bits in the window), then in the edit area there type: \begin{verbatim} // add two things Fred a b = class { sum = a + b; } \end{verbatim} This defines a class called \ct{Fred} whose constructor takes two arguments, \ct{a} and \ct{b}. There's one member, called \ct{sum}, which is \ct{a} and \ct{b} added together. In the program window, click \ctr{File}\ct{Process}. This makes \nip{} read what you typed, parse it, compile it and update itself. The program window should now look like \fref{fg:Fred}. \begin{figure} \figw{3in}{snap8.jpg} \caption{Programming \ct{Fred}} \mylabel{fg:Fred} \end{figure} If you look back at the main \nip{} window, a new menu will have appeared under \ct{Toolkits} called \ct{untitled}. If you click on that, there will be a menu item called \ct{Fred}. Let your mouse linger, and you'll see a tooltip too. In the main window, type \ct{Fred 2 3} into the box at the bottom of the current column. Press Return and \nip{} will make a \ct{Fred} for you. Click on the down arrow to the left of your new \ct{Fred} once to see the members of \ct{Fred} (just \ct{sum} in this case), click again to see the class parameters too. The main window should look like \fref{fg:mainFred}. \begin{figure} \figw{3in}{snap9.jpg} \caption{Main window \ct{Fred}} \mylabel{fg:mainFred} \end{figure} Click to the right of \ct{b}, type in a new value and press Return. The \ct{sum} member should update. \nip{} keeps track of dependencies between rows, but it also tracks dependencies inside rows, both ones that come from the class, and ones created by any edits you do to the class instance after creating it. You won't see it in a simple example, but \nip{} also discovers and tracks dependencies which can arise at run time. Click on the text just to the right of the \ct{b} button again, type \ct{a} and press Return. Now edit \ct{a}: press Return and both \ct{b} and \ct{sum} will update. You can use \ct{Fred} to add any two things together. Click on \ctr{Toolkits}\ctr{Widgets}\ct{Scale} to make a scale widget, press Ctrl-U (the keyboard shortcut for \ctr{Edit}\ct{Duplicate}) to duplicate it, and finally click on \ctr{Toolkits}\ctr{untitled}\ct{Fred}. Open up the new \ct{Fred} and try dragging some of the scales around. The main window will look like \fref{fg:slideFred}. \begin{figure} \figw{3in}{snap10.jpg} \caption{Scale \ct{Fred}} \mylabel{fg:slideFred} \end{figure} The scales are classes too (instances of \ct{Scale}). You can open them up and do strange things with them as well. Open up one of the scales you made (eg. \ct{A2} in \fref{fg:slideFred}) and change the \ct{from} parameter to be \ct{A3.value}. Now try dragging the sliders again. Try dragging the \ct{sum} slider. Now go back and drag one of the original sliders. You'll see that \ct{sum} no longer updates, it's stuck at the last position you dragged it to. This is because there are now two things affecting the value of \ct{sum}: the underlying code (the \ct{a + b} inside \ct{Fred}), and the position you dragged the slider representing \ct{sum} to. \nip{} has the rule that graphical edits (dragging the slider) override code. To make \ct{sum} update again, right click on the \ct{sum} button and select \ct{Reset} from the pop up menu. Now drag one of the input sliders again, and \ct{sum} will start updating once more. Classes can inherit from other classes. Go back to the program window, click on \ctr{File}\ctr{New}\ct{Tool} to clear the edit window, and type: \begin{verbatim} // multiply two things Jim a b = class Fred a b { product = a * b; } \end{verbatim} This defines a class called \ct{Jim} which inherits from \ct{Fred}. Click \ctr{File}\ct{Process}, then back in the main window, type \ct{Jim 4 5} into the bottom of the column. Click down once to expose the members (just \ct{product}), click again to expose the parameters as well (\ct{a} and \ct{b}), and click a third time to expose the superclass member (which should be an instance of \ct{Fred}). You can also open up the \ct{super} member and see inside the \ct{Fred} that this \ct{Jim} is using as its superclass. \ct{A5} will respond to both \ct{product} and \ct{sum}. See \fref{fg:Jim}. \begin{figure} \figw{3in}{snap11.jpg} \caption{Browsing \ct{Jim}} \mylabel{fg:Jim} \end{figure} \nip{} has about 20 different graphical classes like \ct{Scale}. Whenever a row takes a new value, \nip{} checks to see if that value is an instance of one of these special classes, and if it is, it will add a graphical element to the row display which represents that class's value. It builds the graphical part by looking inside the class for certain members (for example, the scale graphic looks for members called \ct{from}, \ct{to} and \ct{value}). When you change the graphic (maybe by dragging the scale), \nip{} rebuilds the class by looking inside for a edit member (eg. \ct{Scale\_edit}) or if that's not defined, a constructor member (eg. \ct{Scale}). You can make your own graphic widgets by subclassing \nip{}'s built-in ones. By selectively overriding default constructors and adding edit members, you can control how your new widget will behave in expressions, and how it will behave if it's edited graphically. Make a new column, load up an image (use \ctr{File}\ct{Open}), open an image viewer (double-click on the thumbnail), drag out two regions on it (hold down Ctrl and the left mouse button and drag down and right). Your main window should look like \fref{fg:twomoreregions}. \begin{figure} \figw{3in}{snap12.jpg} \caption{Two more regions} \mylabel{fg:twomoreregions} \end{figure} \ct{im\_insert} is a VIPS operation that puts one image inside another at an (x, y) position. VIPS operations work on VIPS images. The \ct{value} member of an \ct{Image} or \ct{Region} is the VIPS image that underlies the \nip{} row. You can use \ct{im\_insert} to make a thing to join two images together. Back in the program window, click on \ctr{File}\ctr{New}\ct{Tool} and enter: \begin{verbatim} // join two images left-right Join a b = class Image value { shim = Scale "Spacing" 0 1000 0; value = im_insert a.value b.value (a.width + shim.value) 0; } \end{verbatim} \noindent Click \ctr{File}\ct{Process}. This defines a class \ct{Join} which subclasses the \ct{Image} graphic. Now select your two regions (click on the first one, shift-click on the second) and click on \ctr{Toolkits}\ctr{untitled}\ct{Join}. Alternatively, just click \ct{Join} and it'll be given the borrom two items in the column. A new \ct{Join} row will appear. Open it up and drag the slider to set the spacing between the two joined images. Go back to the image viewer for the image file you loaded and try dragging one of the regions. \fref{fg:myjoin} shows this class in action. The thing in \ctr{Toolkits}\ctr{Image}\ctr{Join}\ct{Left to Right} is just a slightly fancier version of this. \begin{figure} \figw{3in}{snap13.jpg} \caption{Joining two images with \ct{Join}} \mylabel{fg:myjoin} \end{figure} You can change how the graphic widgets behave by subclassing them. Try: \begin{verbatim} Scale_int c f t v = class scope.Scale c f t ((int) v) { Scale = Scale_int; } \end{verbatim} \noindent This defines a new scale class called \ct{Scale\_int} which can only take integer values. The \ct{Scale = Scale\_int;} line is \ct{Scale\_int} overriding \ct{Scale}'s constructor, so that a \ct{Scale\_int} stays a \ct{Scale\_int} when you drag. Because there's a local called \ct{Scale}, \ct{Scale\_int} needs to use \ct{scope.Scale} to refer to the superclass. Here's a version of \ct{Mark} which can only be dragged in a circle. You pass it an image to display on, an xy centre position, a radius and a start angle. \begin{verbatim} Mark_circle image x y r a = class scope.Mark image _x' _y' { // get rect cods for our point _pos = (x, y) + rectangular (r, a); _x' = re _pos; _y' = im _pos; Mark i l t = this.Mark_circle i x y r a' { // vector from centre of // circle to new position u = (l, t) - (x, y); // angle of vector a' = im (polar u); } } \end{verbatim} nip2-8.7.0/doc/src/nipguide.tex0000644000175000017500000000274213273071606013213 00000000000000\documentclass[a4paper,twocolumn,dvips]{book} \usepackage[dvips=false,pdftex=false,vtex=false]{geometry} \usepackage{relsize} \usepackage{ifpdf} \ifpdf \usepackage[pdftex]{graphicx,color} \else \usepackage{graphicx,color} \fi \usepackage{times} \usepackage{fancyhdr} \usepackage{ifthen} \input{mydefs} \fancyhead{} % clear all fields \fancyhead[LE,RO]{\leftmark} % left-even, right-odd \fancyhead[RE,LO]{\nip{} Manual} % right-even, left-odd \fancyfoot[LE,RO]{\thepage} % left-even, right-odd \fancyfoot[RE,LO]{December 2017} \begin{document} \pagenumbering{roman} \begin{titlepage} \thispagestyle{empty} \begin{center} \huge \nip{} Manual\\[0.2em] \large Version 8.6\\ \vspace{0.5in} \large John Cupitt, Rachel Billinge, Joseph Padfield, Clare Richardson, David Saunders\\ \end{center} % hmm ... must be a better way to get the quote at the bottom of the page \vspace{3in} \begin{center} \noindent \emph{``It's quite simple really, and at the same time, rather complicated.''} \\ --- A.\ Haddock, Sea captain (rtd.) \end{center} \vspace{3in} \noindent \small{This document formatted \today} \setcounter{page}{1} \end{titlepage} %\blankpage \tableofcontents \thispagestyle{plain} %\blankpage \listoffigures \thispagestyle{plain} %\blankpage \listoftables \thispagestyle{plain} \blankpage \pagenumbering{arabic} \thispagestyle{plain} \cfoot{} \input{intro} \input{tutorial} \input{infrared} \input{reference} \input{menus} \input{program} \appendix \input{config} \end{document} nip2-8.7.0/doc/src/program.tex0000644000175000017500000014146313224651032013053 00000000000000\chapter{Programming} \mylabel{sec:program} \noindent \nip{} includes a tiny lazy functional programming language. You can use it to glue VIPS image processing functions together to perform more complicated tasks. All of the \nip{} toolkit menus are written in this language. These first sections just describe the programming language. See \pref{sec:progwin} for a description of the programming window. You use \nip{}'s programming language to control the user interface: the link between what happens inside a \nip{} function and what you see on the screen in covered in \pref{sec:bowser}. \section{Load and save} When \nip{} starts up it loads all of the definition files (files with a \ct{.def} extension) it can find in the directories listed in your start path. You can change the start path in Preferences. By default, the start path lists just two areas: a personal start directory that \nip{} makes in your home area, and the main system \nip{} start directory containing all the standard toolkits. If there are two files with the same name on the start path, then \nip{} will only load the first one. This means that if you modify one of \nip{}'s built-in menus and save it to your personal start directory, in future you'll just see your personalised version. You can load or reload a toolkit at any time with the \ctr{File}\ct{Open Toolkit} menu item in the program window. If you open a toolkit with the same name as an existing toolkit, \nip{} will remove the old toolkit before it loads the new one. \section{Using an external editor} If you're going to be doing any more than a little programming in \nip{} you probably won't want to use the built-in editor. I suggest you start your favorite editor in one window on the screen and then in the \nip{} program window click \ctr{File}\ct{Open Toolkit} and check the Pin-up box in the file selector. Now every time you want to try out your definition, save the file from your external editor and click OK in \nip{}'s file selector. \nip{}'s editor automatically adds some semicolon characters to separate definitions in a file. If you're using an external editor, you'll need to put these in yourself. Also check the syntax for adding separators and column items to menus. \section{Syntax} The most basic sort of definition looks like this: \begin{verbatim} // very simple! fred = 12 \end{verbatim} \noindent This defines a function called \ct{fred} whose value is the number 12. The \ct{//} marks a comment: everything to the end of the line is skipped. Case is distinguished, so \ct{Fred} and \ct{fred} are two different functions. You can use letters, numbers, underscores and single quotes in function names. You can have patterns on the left of the equals sign. For example: \begin{verbatim} [fred, petra] = [12, 13] \end{verbatim} \noindent defines \ct{fred} to have the value 12 and \ct{petra} to have the value 13. See \pref{sec:pattern} for details. Functions may take parameters: \begin{verbatim} /* A function with parameters. */ jim a b = a + b + 12 \end{verbatim} \noindent This defines a function called \ct{jim} which takes two parameters and whose value is the sum of the two parameters, plus 12. The \ct{/*} and \ct{*/} enclose a multi-line comment. Functions may have several right-hand-sides, each right-hand-side qualified by a guard expression. Guards are tested from top to bottom and the first guard which has the value \ct{true} causes the function to have the value of that right-hand-side. If no guard evaluates to \ct{true}, then the last right-hand-side is used. \begin{verbatim} jenny a b = 42, a + b >= 100 = 43, a + b >= 50 = 44 \end{verbatim} \noindent This defines a function called \ct{jenny} which takes two parameters and whose value is 42 if the sum of the parameters is 100 or greater; 43 if the sum is greater than or equal to 50 but less than 100; and 44 if the sum is less than 50. Any function may be followed by any number of local functions, enclosed in curly braces. So \ct{jenny} could be written as: \begin{verbatim} jenny a b = 42, sum >= 100 = 43, sum >= 50 = 44 { sum = a + b; } \end{verbatim} \noindent Note that you need a semi-colon after each local function. A local function may refer to anything in an enclosing scope, including itself. You can write \ct{if-then-else} expressions: \begin{verbatim} david a = if a < 12 then "my cat" else "likes lasagne" \end{verbatim} \noindent This is exactly equivalent to: \begin{verbatim} david a = "my cat", a < 12 = "likes lasagne" \end{verbatim} \noindent \ct{if-then-else} expressions are sometimes easier to read than guards. Functions application is with spaces (juxtaposition). For example: \begin{verbatim} harry = jim 2 3 \end{verbatim} \noindent defines \ct{harry} to have the value 17. All functions are curried, that is, they can accept their arguments in stages. For example: \begin{verbatim} sandro = jim 1 \end{verbatim} \noindent defines \ct{sandro}, a function which takes one parameter and will add 13 to it. This trick becomes very useful with list processing, see \pref{sec:lists}. \nip{} has some built-in functions, see \tref{tb:builtin}. They mostly take a single argument. All other functions are defined in the various standard toolkits and can be edited in the program window. \begin{tab2} \begin{center} \begin{tabular}{||l|l||} \hline Function & Description \\ \hline \ct{dir} \textit{any} & List names in scope \\ \ct{has\_member} \textit{[char]} \textit{any} & Does class have member \\ \hline \ct{name2gtype} \textit{[char]} & Search for a GType by name \\ \ct{gtype2name} \textit{real} & Return the name of a GType \\ \hline \ct{error} \textit{[char]} & Stop with error message \\ \ct{print} \textit{any} & Convert to string \\ \ct{expand} \textit{[char]} & Expand environment variables in string \\ \ct{search} \textit{[char]} & Search for a file \\ \ct{\_} \textit{[char]} & Translate string \\ \hline \ct{is\_image} \textit{any} & Test for image \\ \ct{is\_bool} \textit{any} & Test for boolean \\ \ct{is\_real} \textit{any} & Test for real \\ \ct{is\_class} \textit{any} & Test for class \\ \ct{is\_char} \textit{any} & Test for char \\ \ct{is\_list} \textit{any} & Test for list \\ \ct{is\_complex} \textit{any} & Test for complex \\ \ct{is\_instanceof} \textit{[char]} \textit{any} & Test for instance of class \\ \hline \ct{re} \textit{image}/\textit{complex}/\textit{class} & Extract real part of complex \\ \ct{im} \textit{image}/\textit{complex}/\textit{class} & Extract imaginary part of complex \\ \ct{hd} \textit{list} & Extract head of list \\ \ct{tl} \textit{list} & Extract tail of list \\ \ct{sin} \textit{image}/\textit{number}/\textit{class} & Sine \\ \ct{cos} \textit{image}/\textit{number}/\textit{class} & Cosine \\ \ct{tan} \textit{image}/\textit{number}/\textit{class} & Tangent \\ \ct{asin} \textit{image}/\textit{number}/\textit{class} & Arc sine \\ \ct{acos} \textit{image}/\textit{number}/\textit{class} & Arc cosine \\ \ct{atan} \textit{image}/\textit{number}/\textit{class} & Arc tangent \\ \ct{log} \textit{image}/\textit{number}/\textit{class} & Natural log \\ \ct{log10} \textit{image}/\textit{number}/\textit{class} & Base 10 log \\ \ct{exp} \textit{image}/\textit{number}/\textit{class} & e to the power \\ \ct{exp10} \textit{image}/\textit{number}/\textit{class} & 10 to the power \\ \ct{ceil} \textit{image}/\textit{number}/\textit{class} & Round up \\ \ct{floor} \textit{image}/\textit{number}/\textit{class} & Round down \\ \ct{gammq} \textit{real} \textit{real} & Normalised incomplete Gamma function \\ \hline \ct{vips\_image} \textit{[char]}& Load image from file \\ \ct{read} \textit{[char]} & Load file as a string \\ \hline \end{tabular} \end{center} \caption{\nip{} built in functions} \mylabel{tb:builtin} \end{tab2} \section{Naming conventions} You can name things in any way you like, but we've used the following conventions. \begin{itemize} \item Classes start with a capital letter, words are separated with underscores, subsequent words are not capitalised (eg. \ct{Image\_file}) \item Private names are prefixed with underscores (and are hidden by most of the user interface) \item Functions from the VIPS library are prefixed with \ct{im\_} \item Global utility functions (eg. \ct{map}), public members (eg. \ct{Colour.colour\_space}) are all lower case, words are separated with underscores, subsequent words are not capitalised \item Constants are capitalised (eg. \ct{Operator\_type.COMPOUND\_REWRAP}) \end{itemize} \section{Evaluation} \nip{} calculates the value of an expression by using the definitions you entered to successively reduce the expression until it becomes one of the base types. Sometimes there is a choice as to which part of the expression will be reduced next --- \nip{} will always choose to reduce the leftmost, outermost part of the expression first. For example, consider this definition: \begin{verbatim} factorial n = n * factorial (n - 1), n > 1 = 1 \end{verbatim} And here's how \nip{} will evaluate the expression \ct{factorial 3}: \begin{verbatim} factorial 3 --> 3 > 1 --> true 3 * factorial (3 - 1) --> (3 - 1) > 1 --> 2 > 1 --> true 3 * (2 * factorial (2 - 1)) --> (2 - 1) > 1 --> 1 > 1 --> false 3 * (2 * 1) --> 3 * 2 --> 6 \end{verbatim} \noindent Note how \nip{} delays evaluating parameters to functions until they are needed, but still shares the result. \ct{3 - 1} is only evaluated once, for example, even though the result is used three times. \nip{} has a trace window: click on \ctr{Debug}\ct{Trace} in the program window and check the \ctr{View}\ct{Operators} menu item. The advantage of this style of computation over conventional imperative programming languages is that you can reason about your program mathematically\footnote{Since programs are referentially transparent (that is, the value of an expression depends only upon its syntactic context, not upon computation history), you can easily do equational reasoning, proof by induction, and so on. Expressions are like theorems, definitions are like axioms, computation is like proof.}. This isn't the best way to write a factorial function. A function with lots of recursive calls can be hard to understand --- it's much better to use one of the higher order functions from the standard environment to encapsulate the type of recursion you want to use. The clearest definition for factorial is probably: \begin{verbatim} factorial n = product [1..n] \end{verbatim} \noindent See \pref{sec:listsyntax} for an explanation of the list syntax. \section{Operators} \mylabel{sec:operators} \nip{}'s expression syntax is almost exactly the same as C, with a few small changes. \tref{tb:precedence} lists all of \nip{}'s operators in order of increasing precedence. If you've used C, the differences are: \begin{itemize} \item C's \verb+?:+ operator becomes \ct{if-then-else}, see above \item Like almost every functional language, \nip{} uses square brackets for list constants (see \pref{sec:listsyntax}), so to index a list, \nip{} uses \ct{?} \item \nip{} adds \ct{@} for function composition, see \pref{sec:func} \item The \ct{:} operator is infix list cons, see \pref{sec:lists} \item The \ct{++} operator becomes an infix concatenation operator, \ct{--} becomes list difference. Again, see \pref{sec:listsyntax} \end{itemize} The only slightly tricky point is that function application binds very tightly (only list index and class project bind more tightly). So the expression: \begin{verbatim} jim = fred 2 + 3 \end{verbatim} \noindent binds as: \begin{verbatim} jim = (fred 2) + 3 \end{verbatim} \noindent This is almost always the behaviour you want. There are two special equality tests: \ct{===} and \ct{!==}. These test for pointer equality, that is, they return \ct{true} if their arguments refer to the same object. These are occasionally useful for writing interactive functions. \begin{tab2} \begin{center} \begin{tabular}{||l|l|l||} \hline Operator & Associativity & Description \\ \hline \ct{if then else} & Right & If-then-else construct \\ \ct{=>} & Left & Form name/value pair \\ \verb+||+ & Left & Logical or \\ \ct{\&\&} & Left & Logical and \\ \ct{@} & & Function composition (see \pref{sec:func}) \\ \verb+|+ & Left & Bitwise or \\ \rtp{} & Left & Bitwise exclusive or \\ \ct{\&} & Left & Bitwise and \\ \hline \ct{==} & Left & Equal to\\ \ct{!=} & & Not equal to\\ \ct{===} & & Pointer equal to\\ \ct{!==} & & Pointer not equal to\\ \hline \ct{<} & Left & Less than \\ \ct{<=} & & Less than or equal to\\ \ct{>} & & Greater than \\ \ct{>=} & & Greater than or equal to\\ \hline \ct{<<} & Left & Left shift \\ \ct{>>} & & Right shift \\ \hline \ct{+} & Left & Addition \\ \ct{-} & & Subtraction \\ \ct{*} & Left & Multiplication \\ $/$ & & Division \\ \ct{\%} & & Remainder after division \\ \ct{!} & Left & Logical negation \\ \verb+~+ & & One's complement \\ \ct{++} & & Join (see \pref{sec:listsyntax}) \\ \verb+--+ & & Difference (see \pref{sec:listsyntax}) \\ \ct{-} & & Unary minus \\ \ct{+} & & Unary plus \\ \ct{(}\emph{type}\ct{)} & & Type cast expression \\ \ct{**} & Right & Raise to power \\ \ct{:} & & List CONS (see \pref{sec:listsyntax}) \\ \emph{space} & Left & Function application \\ \ct{?} & Left & List index (see \pref{sec:listsyntax}) \\ \ct{.} & Left & Class project (see \pref{sec:class}) \\ \hline \end{tabular} \end{center} \caption{\nip{} operators in order of increasing precedence} \mylabel{tb:precedence} \end{tab2} \subsection{The real type} \nip{} has a single number type for integers and real numbers. All are represented internally as 64-bit floating point values. You can use the four standard arithmetic operators (\ct{+}, \ct{-}, \ct{*}, \ct{/}), remainder after integer division (\%), raise-to-power (\ct{**}), the relational operators (\ct{<}, \ct{<=}, \ct{>}, \ct{>=}, \ct{==}), the bitwise logical operators (\ct{\&}, \verb+|+, \rtp{}, \verb+~+), integer shift operators (\ct{<<}, \ct{>>}) and unary negation and positive (\ct{-}, \ct{+}). Other mathematical functions are pre-defined for you: \ct{sin}, \ct{cos}, \ct{tan}, \ct{asin}, \ct{acos}, \ct{atan}, \ct{log}, \ct{log10}, \ct{exp}, \ct{exp10}, \ct{ceil}, \ct{floor}. Each has the standard behaviour. You can use type-casts on reals. However, they remain 64-bit floating point, the range is simply clipped. Casting to \ct{unsigned short} produces a 64-bit float whose fractional part has been set to zero, and which has been clipped to the range 0 to 65535. This may or may not cause rounding problems. You can write hexadecimal number constants as \verb"0xff". \subsection{The complex type} Complex numbers are rather sketchily implemented. They are generally handy for representing vectors and coordinates rather than for doing arithmetic, so the range of operations is limited. Complex constants are written as two numbers enclosed in round brackets and separated by a comma. You can use the four standard arithmetic operators (\ct{+}, \ct{-}, \ct{*}, \ct{/}), raise-to-power (\ct{**}), and unary negation and positive (\ct{-}, \ct{+}). You can use \ct{==} only of the relational operators. You can mix complex and real numbers in expressions. You can cast reals to complex and back. Use the functions \ct{re} and \ct{im} to extract the real and imaginary parts. \begin{verbatim} (12, 13) + 4 == (16, 13) (12, 2 + 2) == (12, 4) re (12, 13) == 12 im (12, 13) == 13 \end{verbatim} \subsection{The character type} Character constants are written as single characters enclosed in single quotes. You can use the relational operators (\ct{<}, \ct{<=}, \ct{>}, \ct{>=}, \ct{==}) to sort characters by ASCII order. You can cast a character to a real to get its ASCII value. You can cast a real ASCII value to a character. You can use the standard C escapes to represent non-ASCII characters. \begin{verbatim} (int) 'A' == 65 (char) 65 == 'A' is_digit x = '0' <= x && x <= '9' newline == '\n' \end{verbatim} \subsection{The boolean type} The two boolean constants are written as \ct{true} and \ct{false}. Boolean values are generated by the relational operators. You can use the standard logical operators (\ct{\&\&}, \verb+||+, \ct{!}). You can use a boolean type as an argument in an \ct{if-then-else} expression. As with C, the logical operators do not evaluate their right-hand sides if their value can be determined just from evaluating their left-hand sides. \begin{verbatim} true && false == false true || error "boink!" == true if true then 12 else 13 == 12 \end{verbatim} \subsection{The list type} \mylabel{sec:listsyntax} Lists are created from two constructors. \ct{[]} denotes the empty list. The list construction operator (\ct{:}, pronounced CONS by LISP programmers) takes an item and a list, and returns a new list with the item added to the front. As a convenience, \nip{} has a syntax for list constants. A list constant is a list of items, separated by commas, and enclosed in square brackets: \begin{verbatim} 12:[] == [12] 12:13:14:[] == 12:(13:(14:[])) == [12,13,14] [a+2,3,4] == (a+2):3:4:[] [2]:[3,4] == [[2],3,4] \end{verbatim} Use the functions \ct{hd} and \ct{tl} to take the head and the tail of a list: \begin{verbatim} hd [12,13,14] == 12 tl [12,13,14] == [13,14] \end{verbatim} Use \ct{..} in a list constant to define a list generator. List generators build lists of numbers for you: \begin{verbatim} [1..10] == [1,2,3,4,5,6,7,8,9,10] [1,3..10] == [1,3,5,7,9] [10,9..1] == [10,9,8,7,6,5,4,3,2,1] \end{verbatim} \noindent List generators are useful for expressing iteration. Lists may be infinite: \begin{verbatim} [1..] == [1,2,3,4,5,6,7,8,9 ..] [5,4..] == [5,4,3,2,1,0,-1,-2,-3 ..] \end{verbatim} \noindent Infinite lists are useful for expressing unbounded iteration. See \pref{sec:lazy}. You can write list comprehensions like this: \begin{verbatim} [x :: x <- [1..]; x % 2 == 0] \end{verbatim} \noindent This could be read as {\em All x such that x is in \verb+[1..]+ and x is even}, that is, the list of even numbers. You can have any number of semicolon-separated qualifiers and each one can be either a generator (like \verb"x <- [1..]") introducing a new variable or pattern (see \pref{sec:pattern}), or a predicate (like \verb"x % 2 == 0") which filters the generators to the left of it. Later generators change more rapidly, so for example: \begin{verbatim} [(x, y) :: x <- [1..3]; y <- [x..3]] == [(1, 1), (1, 2), (1, 3), (2, 2), (2, 3), (3, 3)] \end{verbatim} You can nest list comprehensions to generate more complex data structures. For example: \begin{verbatim} [[x * y :: x <- [1..10]] :: y <- [1..10]] \end{verbatim} \noindent will generate a times-table. You can use pattern-matching (see \pref{sec:pattern}) to loop over several generators at the same time. For example: \begin{verbatim} [(x, y) :: [x, y] <- zip2 [1..3] [1..3]] == [(1, 1), (2, 2), (3, 3)] \end{verbatim} As a convenience, lists of characters may be written enclosed in double quotes: \begin{verbatim} "abc" == ['a','b','c'] \end{verbatim} You can define a string constant which has the same form as a variable name (that is, letters, numbers, underscore and apostrophy only) with a \verb+$+ prefix. For example: \begin{verbatim} $form7 == "form7" \end{verbatim} \noindent \nip{} often uses these in option lists. You can define a name, value pair with the \ct{=>} operator. \begin{verbatim} $fred => 12 == ["fred", 12] \end{verbatim} \noindent Again, these pairs are frequently used to pass options to objects. A list may contain any object: \begin{verbatim} [1,'a',true,[1,2,3]] \end{verbatim} \noindent Mixing types in a list tends to be confusing and should be avoided. If you want to group a set of diverse objects, define a class instead, see \pref{sec:class}. Lists of lists of reals are useful for representing arrays. You can use the list index operator (\ct{?}) to extract an element from a position in a list: \begin{verbatim} [1,2,3] ? 0 == 1 "abc" ? 1 == 'b' \end{verbatim} You can use the list join operator (\ct{++}) to join two lists together end-to-end. \begin{verbatim} [1,2,3] ++ [4,5,6] == [1,2,3,4,5,6] \end{verbatim} You can use the list difference operator (\verb+--+) to remove elements of one list from another. \begin{verbatim} [1..10] -- [4,5,6] == [1,2,3,7,8,9,10] \end{verbatim} \subsection{The function type} \mylabel{sec:func} Functions are objects just like any other. You can pass functions to other functions as parameters, store functions in lists, and so on. You can create anonymous functions with \verb"\" (lambda). For example: \begin{verbatim} map (\x x + 2) [1..3] == [3, 4, 5] \end{verbatim} You can nest lambdas to make multi-argument anonymous functions, for example: \begin{verbatim} map2 (\x\y x + y) [1..3] [2..5] == [3, 5, 7] \end{verbatim} You can compose functions with the \ct{@} operator. For example, for two functions of one argument \ct{f} and \ct{g}: \begin{verbatim} f (g 2) == (f @ g) 2 \end{verbatim} \subsection{The image type} These represent a low-level handle to a VIPS image structure. You can make them with the \ct{vips\_image} builtin, and you can pass them as parameters to VIPS functions. The \ct{Image} class is built on top of them, see \pref{sec:Image}. As an accident of history, \nip{} also lets you do arithmetic with them. This will probably be removed in the next version or two, so it's best to go through the higher-level \ct{Image} class. \section{Lists and recursion} \mylabel{sec:lists} Functional programming languages do not have variables, assignment or iteration. You can achieve the same effects using just lists and recursion. There are two main sorts of recursion over lists. The first is called \emph{mapping}: a function is applied to each element of a list, producing a new list in which each element has been transformed. \begin{verbatim} map fn [a,b,c] == [fn a, fn b, fn c] \end{verbatim} The second main sort of recursion is called \emph{folding}: a list is turned into a single value by joining pairs of elements together with a function and a start value. \begin{verbatim} foldr fn start [a,b .. c] == (fn a (fn b (.. (fn c start)))) \end{verbatim} \noindent (The function is called \ct{foldr} as it folds the list up right-to-left. There is an analogous function called \ct{foldl} which folds a list up left-to-right, but because of the way lists work, it is much slower and should be avoided if possible.) \ct{map} is defined in the standard list library for you: \begin{verbatim} /* map fn l: map function fn over list l */ map fn l = [], l == [] = fn (hd l) : map fn (tl l) \end{verbatim} \noindent So, for example, you could use \ct{map} like this: \begin{verbatim} map (add 2) [1..5] == [3,4,5,6,7,8] \end{verbatim} \ct{foldr} is defined in the standard list library for you: \begin{verbatim} /* foldr fn st l: fold up list l, * right to left with function fn and * start value st */ foldr fn st l = st, l == [] = fn (hd l) (foldr fn st (tl l)) \end{verbatim} \noindent So, for example, you could use \ct{foldr} like this: \begin{verbatim} foldr add 0 [1..5] == 15 \end{verbatim} \noindent (Mathematically, \ct{foldr} is the more basic operation. You can write \ct{map} in terms of \ct{foldr}, but you can't write \ct{foldr} in terms of \ct{map}.) Unconstrained recursion over lists can be very hard to understand, rather like \ct{goto} in an imperative language. It's much better to use a combination of \ct{map} and \ct{foldr} if you possibly can. The toolkit \ct{\_list} contains definitions of most of the standard list-processing functions. These are listed in \tref{tb:list}. Check the source for detailed comments. \begin{tab2} \begin{center} \begin{tabular}{||l|l||} \hline Name & Description \\ \hline \ct{all l} & and all the elements of list \ct{l} together \\ \ct{any l} & or all the elements of list \ct{l} together \\ \ct{concat l} & join a list of lists together \\ \ct{drop n l} & drop the first \ct{n} elements from list \ct{l} \\ \ct{dropwhile fn l} & drop while \ct{fn} is true \\ \ct{extract n l} & extract element \ct{n} from list \ct{l} \\ \ct{filter fn l} & all elements of \ct{l} for which \ct{fn} holds \\ \ct{foldl fn st l} & fold list \ct{l} left-to-right with \ct{fn} and \ct{st} \\ \ct{foldl1 fn l} & like \ct{foldl}, but use the first element of the list as the start value \\ \ct{foldr fn st l} & fold list \ct{l} right-to-left with \ct{fn} and \ct{st} \\ \ct{foldr1 fn l} & like \ct{foldr}, but use the first element of the list as the start value \\ \ct{index fn l} & search list \ct{l} for index of first element matching predicate \ct{fn} \\ \ct{init l} & remove last element of list \ct{l} \\ \ct{iterate f x} & repeatedly apply \ct{f} to \ct{x} \\ \ct{last l} & return the last element of list \ct{l} \\ \ct{len l} & find length of list \ct{l} \\ \ct{limit l} & find the first element of list \ct{l} equal to its predecessor \\ \ct{map fn l} & map function \ct{fn} over list \ct{l} \\ \ct{map2 fn l1 l2} & map 2-ary function \ct{fn} over lists \ct{l1} and \ct{l2} \\ \ct{map3 fn l1 l2 l3} & map 3-ary function \ct{fn} over lists \ct{l1}, \ct{l2} and \ct{l3} \\ \ct{member l x} & true if \ct{x} is a member of list \ct{l} \\ \ct{mkset l} & remove duplicates from list \ct{l} \\ \ct{postfix l r} & add element \ct{r} to the end of list \ct{l} \\ \ct{product l} & product of list l \\ \ct{repeat x} & make an infinite list of \ct{x}es \\ \ct{replicate n x} & make \ct{n} copies of \ct{x} in a list \\ \ct{reverse l} & reverse list \ct{l} \\ \ct{scan fn st l} & apply \ct{(foldr fn r)} to every initial segment of list \ct{l} \\ \ct{sort l} & sort list \ct{l} into ascending order \\ \ct{sortc fn l} & sort list \ct{l} into order by using a comparison function \\ \ct{sortpl pl l} & sort list \ct{l} by predicate list \ct{pl} \\ \ct{sortr l} & sort list \ct{l} into descending order \\ \ct{split fn l} & break list \ct{l} into sections separated by predicate \ct{fn} \\ \ct{splits fn l} & break list \ct{l} into single sections separated by predicate \ct{fn} \\ \ct{splitpl pl l} & break list \ct{l} up by predicate list \ct{pl} \\ \ct{split\_lines n l} & break list \ct{l} into lines of length \ct{n} \\ \ct{sum l} & sum list l \\ \ct{take n l} & take the first \ct{n} elements from list \ct{l} \\ \ct{takewhile fn l} & take from the front of \ct{l} while \ct{fn} holds \\ \ct{zip2 l1 l2} & zip two lists together \\ \ct{zip3 l1 l2 l3} & zip three lists together \\ \hline \end{tabular} \end{center} \caption{Functions in the standard list-processing toolkit} \mylabel{tb:list} \end{tab2} \section{Lazy programming} \mylabel{sec:lazy} \nip{}'s programming language is \emph{lazy}, that is, it delays evaluation as long as it possibly can. For example, \ct{error} is a function which immediately halts execution of your function and pops up an alert window. So: \begin{verbatim} 12 + error "wombat!" \end{verbatim} \noindent Has no value: this expression will halt with an error message. However: \begin{verbatim} false && error "lasagne!" \end{verbatim} \noindent Will evaluate to \ct{false}, since \nip{} knows after looking at the left-hand-side of \ct{\&\&} that the result must be \ct{false}, and so does not evaluate the right-hand-side. \begin{verbatim} [12, error "hot chilli!"] ? 0 == 12 \end{verbatim} \noindent This also evaluates completely, since the second element of the list is never used, and therefore never evaluates. Things become more confusing when you start calling functions, since the arguments to a function call are also not evaluated until the function needs that value. For example: \begin{verbatim} foldr (error "boink!") 2 [] == 2 \end{verbatim} \noindent Again, this evaluates successfully, since the function is never used by \ct{foldr}. \section{Pattern matching} \mylabel{sec:pattern} Any time you define a name, you can use a pattern instead. For example: \begin{verbatim} [fred, petra] = [12, 13] \end{verbatim} \noindent defines \ct{fred} to have the value 12 and \ct{petra} to have the value 13. A pattern describes the structure you are expecting for the value. When the value is computed it is matched against the pattern and, if the match is successful, the names in the pattern are bound to those parts of the value. Our example is exactly equivalent to: \begin{verbatim} temp = [12, 13]; fred = temp?0, is_list temp && is_list_len 2 temp = error "pattern match failed"; petra = temp?1, is_list temp && is_list_len 2 temp = error "pattern match failed"; \end{verbatim} \noindent where \ct{temp} is an invisible, anonymous symbol. You can pattern match on any of \nip{}'s data structures and types. You can use: \begin{description} \item[\ct{a:b}] Tests for the value being a non-empty list and then assigns \ct{a} to the head and \ct{b} to the tail. \item[\ct{(a,b)}] Tests for the value being a complex and then assigns \ct{a} to the real part and \ct{b} to the imaginary. \item[\ct{[a,b,c]}] Tests for the value being a list of length three and then assigns \ct{a}, \ct{b} and \ct{c} to the three elements. \item[\ct{($class-name$ b)}] Tests for the value being an instance of the named class, then assigns \ct{b} to that class instance. \item[\ct{$constant$}] Tests for the value being equal to that constant. Constants are things like \ct{"hello world"} or \ct{12}. \end{description} You can nest patterns in any way you like. Patterns are useful in conjunction with list comprehensions, see \pref{sec:listsyntax}. You can't use patterns in function arguments in the current version, hopefully this will added shortly. \section{The standard libraries} \nip{} comes with a lot of little utility functions. The functions for list processing are listed in \tref{tb:list}. There are a huge number more, too many to really list here. \tref{tb:toolkits} lists all the utility toolkits with some hints about the kinds of function they contain. Read the (heavily commented) toolkits for details. \begin{tab2} \begin{center} \begin{tabular}{||l|l|l||} \hline Toolkit & Contains & Description \\ \hline \ct{\_convert} & \ct{parse\_int l}, \ldots{} & convert ascii text to numbers \\ & \ct{to\_matrix x}, \ldots{} & convert anything into a matrix \\ & \ct{colour\_transform\_to to x}, \ldots{} & convert between colour spaces \\ \hline \ct{\_generate} & \ct{image\_new w h ...} & make a blank image \\ & \ct{image\_white i} & look at image \ct{i}, try to guess what white is \\ & \ct{make\_xy w h} & make an image of size \ct{w} by \ct{h} whose pixel value are \\ & & their coordinates \\ \hline \ct{\_types} & \ct{Image i} & all the standard classes and support functions, \\ & & see \pref{sec:object} \\ \hline \ct{\_predicate} & \ct{is\_colour\_space i} & test for objects are in various categories or have \\ & & various properties \\ \hline \ct{\_stdenv} & \ct{logical\_and x}, \ldots{} & function versions of all the operators \\ & \ct{bandsplit i}, \ldots{} & break up and recombine images by band \\ & \ct{mean x}, \ldots{} & statistical ops on objects \\ & \ct{transpose x}, \ct{flipud x}, \ct{rot90 x}, \ldots{} & flips, rotates, etc. on objects \\ & \ct{rad x}, \ct{pi}, \ldots{} & trigonometry stuff \\ & \ct{sign x}, \ct{conj x}, \ct{polar x}, \ldots{} & complex stuff \\ & \ct{rint x}, \ct{ceil x}, \ldots{} & various rounding things \\ & \ct{fwfft x}, \ldots{} & fourier stuff \\ & \ct{dilate m x}, \ct{rank w h n i}, \ldots{} & morphology stuff \\ & \ct{conv m x}, \ldots{} & convolution stuff \\ & \ct{image\_set\_type t i}, \ldots{} & set various image header field \\ & \ct{resize x y i}, \ldots{} & resampling images \\ & \ct{recomb m i}, \ldots{} & recombinations \\ & \ct{clip2fmt f i}, \ldots{} & format conversions \\ & \ct{hist\_find m x}, \ldots{} & histogram stuff \\ & \ct{id x}, \ct{const x y}, \ldots{} & various useful operations on functions \\ & \ct{map\_binary fn x y}, \ldots{} & mapping over groups \\ \hline \end{tabular} \end{center} \caption{Useful utility functions --- see the source for details} \mylabel{tb:toolkits} \end{tab2} \section{Classes} \mylabel{sec:class} You can define new types using \ct{class}. For example: \begin{verbatim} Pasta_plain = class { lasagne = "large sheets"; fusilli = "sort of twisty"; radiatori = "lots of ridges"; } \end{verbatim} \noindent This defines a new class called \ct{Pasta\_plain}. The class has three members (\ct{lasagne}, \ct{fusilli} and \ct{radiatori}), each of which has a list of \ct{char} as its value. By convention, we've named classes with an initial capital letter, but of course you can do what you like. You can refer to the members of a class using the class project (\ct{.}) operator. For example: \begin{verbatim} Pasta_plain.lasagne == "large sheets" \end{verbatim} \noindent You can use an expression to the right of \ct{.} if you enclose it in brackets. For example: \begin{verbatim} Pasta_plain.("las" ++ "agne") == "large sheets" \end{verbatim} Classes can contain any objects as members, including functions and sub-classes. Functions may define local classes, classes may define local functions, and all may refer to each other using the usual scope rules. For example: \begin{verbatim} Pasta_all = class { filled = class { tortelloni = "venus' navel"; ravioli = "square guys"; } plain = Pasta_plain; } \end{verbatim} When you define a class, \nip{} adds a few extra members for you. \ct{name} is a list of \ct{char} giving the name of the class. \ct{this} and \ct{super} are the most-enclosing class instance and the class instance this class is derived from (see \pref{sec:inheritance}). \nip{} also adds a default constructor: a member with the same name as the class, pointing back to the class constructor. For efficiency reasons \nip{} does not allow mutual recursion at the top level. If two functions depend on each other, neither will ever be calculated. For example: \begin{verbatim} a = 1 : b; b = 2 : a; \end{verbatim} \noindent Neither \ct{a} nor \ct{b} will have a value. You can have mutual recursion between class members. For example: \begin{verbatim} Fred = class { a = 1 : b; b = 2 : a; } \end{verbatim} \noindent Now \ct{Fred.a} will have the value \ct{[1, 2, 1, 2, 1, \ldots{}]}. \subsection{Parameterised classes} Classes can have parameters. Parameters behave like class members initialised from arguments to the class constructor. For example: \begin{verbatim} My_pasta pasta_name cooked = class { is_ready t = "your " ++ pasta_name ++ " is " ++ state { state = "underdone!", t < cooked = "perfect", t == cooked = "yuk!"; } } \end{verbatim} \noindent This defines a class called \ct{My\_pasta} which takes a pasta name and a cooking time as parameters. Once you have made an instance of \ct{My\_pasta}, you can test if it's been cooked at a certain time with the \ct{is\_ready} member. For example: \begin{verbatim} tele = My_pasta "telephoni" 10; tele.is_ready 5 == "your telephoni is underdone!" \end{verbatim} \subsection{Inheritance} \mylabel{sec:inheritance} Classes can inherit from a super-class. For example: \begin{verbatim} Pasta_more = class Pasta_plain { macaroni = "tubes"; spaghetti = "long and thin"; lasagne = "fairly large sheets"; } \end{verbatim} \noindent Here the new class \ct{Pasta\_more} inherits members from the previous class \ct{Pasta\_plain}. It also overrides the definition of \ct{lasagne} from \ct{Pasta\_plain} with a new value. For example: \begin{verbatim} Pasta_more.macaroni == "tubes" Pasta_more.fusilli == "sort of twisty" Pasta_more.lasagne == "fairly large sheets" \end{verbatim} You can use \ct{this} and \ct{super} to refer to other members up and down the class hierarchy. \ct{super} is the class instance that the current class inherits from (if there's no super-class, \ct{super} has the value \ct{[]}), and \ct{this} is the most-enclosing class instance. \begin{verbatim} Pasta_more.super == Pasta_plain Pasta_more.this == Pasta_more Pasta_more.super.this == Pasta_more \end{verbatim} \noindent therefore: \begin{verbatim} Pasta_more.lasagne == "fairly large sheets" Pasta_more.super.lasagne == "large sheets" Pasta_more.super.this.lasagne == "fairly large sheets" \end{verbatim} There's a special symbol \ct{root} which encloses all symbols. For example: \begin{verbatim} fred = 12; Freddage = class { fred = 42; mystery = root.fred; } \end{verbatim} \noindent Now \ct{Fred.mystery} will have the value 12. There's another special symbol called \ct{scope} which encloses all symbols in the file this definition was loaded from. If you want to refer to another definition in the same file which is being masked somehow, use \ct{scope}. You can use the built in function \ct{is\_instanceof} to test whether an instance is or inherits from a class. For example: \begin{verbatim} is_instanceof "Pasta_more" Pasta_more == true is_instanceof "Pasta_plain" Pasta_more == true is_instanceof "Pasta_more" Pasta_plain == false \end{verbatim} The super-class constructor can take arguments, and these arguments can refer to class members. For example: \begin{verbatim} Fresh_pasta pasta_name = class My_pasta pasta_name cooked { cooked = 2; } \end{verbatim} \noindent Defines a class for fresh pasta, which always cooks in 2 minutes. You need to be careful not to make loops: if \ct{cooked} did tried to refer to something in the super-class, this class would never construct properly. \nip{} unfortunately does not check for this error. Finally, the superclass can be a fully constructed class. In this case, the superclass is cloned and the new class members wrapped around it. You can use this to write a class which can wrap any other class and add members to it. Many of the toolkit menu items use this trick to enable them to work for any object type. \subsection{Minor class features} There are a couple of other things you can do with classes. You can define a special member called \ct{\_check}. If this member is defined, then when a class instance is created, the check member is returned instead of the class itself. You can use this to implement class argument type checks, for example: \begin{verbatim} Fred a b = class { _check = this, is_real a && is_real b = error "args to Fred must " ++ "both be real" } \end{verbatim} \noindent Defines a class called \ct{Fred} which has to have two real numbers as arguments. You can define members called \ct{oo\_binary}, \ct{oo\_binary'} and \ct{oo\_unary} and do operator overloading. When \nip{} sees one of the standard operators being used on an instance of your class, it will look up one of these members and pass in the name of the operator and the argument. The two forms of the binary operator member are called for the class-on-left and the class-on-rights cases. So: \begin{verbatim} x = Fred 1 2 x + 12 == x.oo_binary "add" 12 12 + x == x.oo_binary' "add" 12 !x == x.oo_unary "negate" \end{verbatim} These two features are very primitive. The \ct{\_Object} class in the \ct{\_types} toolkit builds on these to provide a fairly high-level system for checking class arguments and defining the meaning of operators. See \pref{sec:object}. \section{Controlling the interface} \mylabel{sec:bowser} \nip{} looks at the scraps of program you type in and execute and tries to show them on the screen in a graphical way. The sorts of display you get depend on where in \nip{} you define the expression, and what sort of value it has. \subsection{Tools and toolkits} \mylabel{sec:tools} Definitions in toolkits are turned into menus off the \ct{Toolkits} menu in the main window, and added to the toolkit browser. Toolkits are loaded from files at startup or can be made in the program window. Toolkit or a definition names which start with an underscore character are hidden and not displayed. The toolkits are always displayed in alphabetical order, but you can order the items within a toolkit in any way you like. There are two ways to write toolkit definitions. Function definitions and zero-argument classes simply appear as menu items, built from static analysis of their source code. However, if a definition evaluates to an instance of the class \ct{Menu}, a menu item is built from dynamic analysis of the value of the definition. \subsubsection{Static menu items} Zero-argument classes within toolkits are displayed as pull-right menus. You can nest classes to any depth. \nip{} uses the first line of the comment before a definition as help text for that function, so it's a good idea to put a simple one-line description of the function at the start of a comment. For example, if the following text is placed in a file called \ct{Fred.def} on \nip{}'s start path, you'll get a menu in the tookits called \ct{Fred} with a pull-right and a tooltip. See \fref{fg:toolkit}. \begin{verbatim} Banana a = a * 3; Subfred = class { // add two things Jim a b = a + b; Apple e = e * 12; Harry z = 12 + z; } \end{verbatim} \begin{figure} \figw{2.5in}{toolkit.jpg} \caption{How \ct{Fred.def} will look} \mylabel{fg:toolkit} \end{figure} \subsubsection{Dynamic menu items} Dynamic menus give you much more control over the way menus are drawn and make it easy to reuse menus. A dynamic menu item is a class instance that is a sub-class of \ct{Menuitem}. It needs to have three members: \ct{label}, the text that should appear in the menu (with an underscore character to indicate the mnenonic); \ct{tooltip}, a short hint that appears as a tooltip or in the toolkit browser; \ct{icon}, an optional image file to be displayed in the menu next to the text; and \ct{action}, the function that is called when the menu item is activated. \ct{label} and \ct{tooltip} are constructor arguments for \ct{Menu}. So for example: \begin{verbatim} Wombat_find_item = class Menuitem "_Find Wombat" "analyse image and locate wombat" { icon = "nip-slider-16.png"; action x = im_wombat_locate x; } \end{verbatim} \noindent will appear as shown in \fref{fg:toolkit2}. \begin{figure} \figw{2.5in}{toolkit2.jpg} \caption{How \ct{Wombat\_find\_item} will look} \mylabel{fg:toolkit2} \end{figure} A dynamic pullright menu is a subclass of \ct{Menupullright}. It's just like \ct{Menuitem}, but without the need for an \ct{action} member. Any members which are subclasses of \ct{Menu} are displayed as items in the submenu. So again: \begin{verbatim} Wombat_item = class Menupullright "_Wombat" "wombat-related operations" { icon = "nip-slider-16.png"; item1 = Wombat_find_item; sep = Menuseparator; boink = Wombat_find_item; } \end{verbatim} \noindent will appear as shown in \fref{fg:toolkit3}. \begin{figure} \figw{2.5in}{toolkit3.jpg} \caption{How \ct{Wombat\_item} will look} \mylabel{fg:toolkit3} \end{figure} \subsection{Workspaces} \mylabel{sec:workspaces} Definitions in workspaces are displayed with \nip{}'s class browser. Each row is displayed in four main parts: a button for the row name, a line of text, a set of sub-rows for the members of the row's class, and a graphic display representing the row's value. See \fref{fg:row2}. \begin{figure} \figw{2.5in}{ir8a.jpg} \caption{Components of a workspace row} \mylabel{fg:row2} \end{figure} The text part of the right-hand-side of each row is always displayed, but the sub-rows are only displayed if the row represents a class, and the graphic is only displayed if the class is an instance of one of the classes in \tref{tb:classes}. You can subclass these if you want to use the graphic display in your own widgets. There are three separate ways to set the value for a row. You can edit the line of program text, you can edit one of the members, or you can manipulate the graphic representation (dragging a slider, or moving a region). These can be contradictory, so \nip{} resolves conflicts by always applying changes in the order text, then graphic, then member. When it applies a graphic change, \nip{} rebuilds the class using a class member called \emph{class-name}\ct{\_edit}, or if that is not defined, the class's constructor member. For example, the \ct{Colour} class can be defined as: \begin{verbatim} Colour colour_space value = class {} A1 = Colour "sRGB" [255,0,0]; \end{verbatim} \noindent There are two ways to change \ct{A1}. You can open \ct{A1} and change \ct{colour\_space} to \ct{"Lab"}, or you can double-click on the swatch and drag the disc. When you click \ct{OK} on the colour edit dialog, \nip{} searches for a member called \ct{Colour\_edit}, fails to find it, and so picks the \ct{Colour} member instead (the default constructor generated by \nip{}). It then replaces the value of A1 with [needs finishing] \begin{tab2} \begin{center} \begin{tabular}{||l|l||} \hline Class & Description \\ \hline \ct{Clock \emph{interval} \emph{value}} & A clock widget, handy for animations \\ \ct{Expression \emph{caption} \emph{expr}} & Displays an editable expression \\ \ct{Group \emph{value}} & A group of objects for iteration \\ \ct{List \emph{value}} & A list of related objects \\ \ct{Pathname \emph{caption} \emph{value}} & Displays a file browser \\ \ct{Fontname \emph{caption} \emph{value}} & Displays a font browser \\ \ct{Toggle \emph{caption} \emph{value}} & A toggle switch \\ \ct{Scale \emph{caption} \emph{from} \emph{to} \emph{value}} & A slider \\ \ct{Option \emph{caption} \emph{labels} \emph{value}} & Select one item from a list \\ \ct{Colour \emph{colour\_space} \emph{value}} & A patch of colour \\ \ct{Matrix\_vips \emph{value} \emph{scale} \emph{offset} \emph{filename} \emph{display}} & A matrix \\ \ct{Arrow \emph{image} \emph{left} \emph{top} \emph{width} \emph{height}} & Two points joined by a line on an image \\ \ct{Region \emph{image} \emph{left} \emph{top} \emph{width} \emph{height}} & A sub-area of an image \\ \ct{Plot \emph{options} \emph{value}} & Displays a plot widget \\ \ct{Image \emph{value}} & An image \\ \ct{Number \emph{caption} \emph{value}} & Displays an editable number \\ \ct{Real \emph{value}} & Displays a real number \\ \ct{Vector \emph{value}} & Displays a list of reals \\ \ct{String \emph{caption} \emph{value}} & Displays an editable string \\ \ct{Mark \emph{image} \emph{left} \emph{top}} & A point on an image \\ \ct{HGuide \emph{image} \emph{top}} & A horizontal line on an image \\ \ct{VGuide \emph{image} \emph{left}} & A vertical line on an image \\ \ct{Area \emph{image} \emph{left} \emph{top} \emph{width} \emph{height}} & A sub-area of an image, fixed in size \\ \hline \end{tabular} \end{center} \caption{\nip{} built in graphic classes} \mylabel{tb:classes} \end{tab2} \subsection{The \ct{Image} class} \mylabel{sec:Image}. say supports mioxed ops with real, vector and complex constants \subsection{The \ct{Colour} class} \mylabel{sec:colour} This class displays a swatch of colour. If you double-click on the \begin{verbatim} Pathname caption value = class {} \end{verbatim} \section{The \ct{\_Object} class} \mylabel{sec:object} \section{Optimisation} \mylabel{sec:optimise} \nip{} performs three useful optimisations on expressions. First, it finds and removes common sub-expressions in functions. So for example: \begin{verbatim} if a + b < 12 then a + b else b \end{verbatim} \noindent will only evaluate \ct{a + b} once. This can save a lot of time if \ct{a} or \ct{b} is a large image. Second, \nip{} detects arithmetic operations on \ct{unsigned char} images, and replaces them with look-up tables. For example: \begin{verbatim} a = vips_image "campin.v" b = a * (a - 1) ** 0.5 \end{verbatim} \noindent Provided \ct{campin.v} is an 8 bit image image, this expression will evaluate with a single call to \ct{im\_maplut()}. Finally, \nip{} has a VIPS operation cache. It memorises the arguments to the last few hundred calls to VIPS, and the result each call gave. Before calling VIPS again, it checks to see if there is a previous call with the same arguments and if there is, uses the result it obtained last time. \section{Calling VIPS functions} \mylabel{sec:callvips} You can call any VIPS operation which has the following properties: \begin{itemize} \item There must be at least 1 output argument. If there's a single output argument, that becomes the value of the function. If there is more than one output, then the function returns a list with the outputs as members. \item The output arguments must all be one of: \begin{itemize} \item \verb+IM_TYPE_DOUBLE+, \item \verb+IM_TYPE_INT+, \item \verb+IM_TYPE_COMPLEX+, \item \verb+IM_TYPE_STRING+, \item \verb+IM_TYPE_IMAGE+, \item \verb+IM_TYPE_DOUBLEVEC+, \item \verb+IM_TYPE_DMASK+, \item \verb+IM_TYPE_IMASK+ \end{itemize} \item The input arguments must all be one of the types above, or \verb+IM_TYPE_DISPLAY+. If an argument is an input display, \nip{} passes in its current display structure, it does not take a display from your program. \end{itemize} When \nip{} starts up, it loads any VIPS plug ins it can find on its data search path. You can call functions from plug ins in just the same way. For information on writing plug ins, see the \emph{VIPS Manual}. nip2-8.7.0/doc/src/mydefs.tex0000644000175000017500000000505213224651032012664 00000000000000% My defs % Computer Text, Computer text=>, Computer Text Display \newcommand{\ct}[1]{\textsf{\smaller{}#1}} \newcommand{\ctr}[1]{\ct{#1} / } \newenvironment{ctd}{\begin{quote}\footnotesize\tt}{\end{quote}} \pagecolor{white} % abbreviations \newcommand{\nip}{\ct{nip2}} \newcommand{\bs}{$\backslash$} \newcommand{\rtp}{\^{ }} \newcommand{\cielab}{\emph{CIE~}$L^{*}a^{*}b^{*}$} \newcommand{\ciexyz}{\emph{CIE XYZ}} \newcommand{\cross}{$\times{}$} % make a label ... override this for HTML output and insert an anchor \newcommand{\mylabel}[1]{\label{#1}} % generate " on page xx" if a label is referring to something on another page % override this for HTML output \newcounter{boink} \newcommand{\onpage}[1]{% \addtocounter{boink}{1}% \label{atref\theboink{}}% \ifthenelse{\pageref{atref\theboink{}}=\pageref{#1}}% {}% { on page~\pageref{#1}}} % format a reference to a section .. "$3.11 on page 37" \newcommand{\pref}[1]{\S\ref{#1}\onpage{#1}} \newcommand{\tref}[1]{Table~\ref{#1}\onpage{#1}} \newcommand{\fref}[1]{Figure~\ref{#1}\onpage{#1}} \newcommand{\cref}[1]{Chapter~\ref{#1}\onpage{#1}} \newcommand{\aref}[1]{Appendix~\ref{#1}\onpage{#1}} % Insert a file ... height and name. \newcommand{\fig}[2]{ \begin{center} \includegraphics[height=#1]{figs/#2} \end{center} } % Insert a file ... width and name. \newcommand{\figw}[2]{ \begin{center} \includegraphics[width=#1]{figs/#2} \end{center} } % make a 2-column figure ... define our own so we can easily override in html % output \newenvironment{fig2}{\begin{figure*}}{\end{figure*}} % same for 2-col tables \newenvironment{tab2}{\begin{table*}}{\end{table*}} % causes problems for htlatex :-( % make this a noop for now % \newcommand{\dtxt}[1]{\multicolumn{25}{@{\hspace{0.2em}}l}{#1}} \newcommand{\dtxt}[1]{#1} % Insert a blank page \newcommand{\blankpage}{% \newpage ~~~~ \pagestyle{plain} \newpage % Another one necessary in twocolumn mode ~~~~ \newpage \pagestyle{fancy} } %\addtolength{\headheight}{3pt} % Make text a bit wider, since we are two column. \addtolength{\textwidth}{0.5in} \addtolength{\oddsidemargin}{-0.25in} \addtolength{\evensidemargin}{-0.25in} % twocolumn seems to remove the binding offset ... add it back %\addtolength{\oddsidemargin}{-0.2in} %\addtolength{\evensidemargin}{0.2in} % More space between headers and footers and the body \addtolength{\topmargin}{-0.5em} \addtolength{\headsep}{0.5em} \addtolength{\footskip}{0.5em} % Swap left and right binding offsets \newlength{\fred} \setlength{\fred}{\oddsidemargin} \setlength{\oddsidemargin}{\evensidemargin} \setlength{\evensidemargin}{\fred} nip2-8.7.0/doc/src/html.cfg0000644000175000017500000000070113224651032012274 00000000000000% configuration file for output of nipguide as html \Preamble{html} \begin{document} % stop the mono font shrinkage we do for paper output \renewenvironment{ctd}{\begin{quote}\tt}{\end{quote}} % make a label % in html, write an extra label which we can link to nip's help system \renewcommand{\mylabel}[1]{ \label{#1} \HCode{} } % supress " on page xx" if we're making HTML \renewcommand{\onpage}[1]{} \EndPreamble nip2-8.7.0/doc/src/intro.tex0000644000175000017500000000210713224651032012526 00000000000000\chapter{Getting started} \noindent \nip{} is a user interface for the VIPS image processing library. It is designed to be fast, even when working with very large images, and to be easy to extend. This guide is split into quite a few chapters: \begin{itemize} \item If you want to use \nip{} to assemble infrared mosaics, you should read \cref{sec:ir}. The middle section in the tutorial (see \pref{sec:irtut}) does IR mosaics very quickly. \item If you want to use \nip{} for general image processing, work through \cref{sec:tutorial}. \item If you have specific questions about some part of \nip{}'s user-interface, look at \cref{sec:reference}. \item If you're really hardcore, take a look at \cref{sec:program}, which covers programming. \item If you want to know more about VIPS, the image processing package underlying \nip{}, try the \emph{VIPS Manual}. \end{itemize} If \nip{} has installed correctly you should see something like \fref{fg:introwin} when it starts up. \begin{figure} \figw{3in}{snap1.jpg} \caption{\nip{} as it starts up} \label{fg:introwin} \end{figure} nip2-8.7.0/doc/src/Example.def0000644000175000017500000000036513224651032012730 00000000000000/* Gamma im gam: correct */ Gamma A1 B7 = error "arg 1 is not image", not is_image A1; = error "arg 2 is not number", not is_number B7; = Convert_to_unsigned_char B5 { B4 = A1 ^ (1/B7); B5 = B4 * (255 / 255 ^ (1/B7)); }; nip2-8.7.0/doc/Makefile0000644000175000017500000000021613224651032011521 00000000000000# .PHONY: all all: $(PS) cd src; $(MAKE) .PHONY: clean clean: cd src; $(MAKE) clean .PHONY: install install: cd src; $(MAKE) install nip2-8.7.0/doc/README0000644000175000017500000000074013224651032010743 00000000000000nip documentation Type "make install" to rebuild html/ and ps/ directories with formatted docuimentation. You'll need latex and tex4ht. The Makefile.am in nip2-x.x copies the contents of the html/ and ps/ to $prefix/share/doc/nip2 during the main nip2 install process. Once you have the docs installed, rebuild nip2's help index with: cd nip2-x.x/src make helpindex.h to index the HTML docs and link the HELP buttons in nip to the correct place in the formatted pages. nip2-8.7.0/doc/html/0000755000175000017500000000000013341773367011126 500000000000000nip2-8.7.0/doc/html/nipguidese23.html0000644000175000017500000000505713341773367014244 00000000000000 Using an external editor

6.2 Using an external editor

If you’re going to be doing any more than a little programming in nip2 you probably won’t want to use the built-in editor. I suggest you start your favorite editor in one window on the screen and then in the nip2 program window click File / Open Toolkit and check the Pin-up box in the file selector.

Now every time you want to try out your definition, save the file from your external editor and click OK in nip2’s file selector.

nip2’s editor automatically adds some semicolon characters to separate definitions in a file. If you’re using an external editor, you’ll need to put these in yourself. Also check the syntax for adding separators and column items to menus.

nip2-8.7.0/doc/html/nipguide37.html0000644000175000017500000000236113341773367013714 00000000000000

1Since programs are referentially transparent (that is, the value of an expression depends only upon its syntactic context, not upon computation history), you can easily do equational reasoning, proof by induction, and so on.

Expressions are like theorems, definitions are like axioms, computation is like proof.

nip2-8.7.0/doc/html/nipguidese24.html0000644000175000017500000006166713341773367014256 00000000000000 Syntax

6.3 Syntax

The most basic sort of definition looks like this:

// very simple!  
fred = 12

This defines a function called fred whose value is the number 12. The // marks a comment: everything to the end of the line is skipped. Case is distinguished, so Fred and fred are two different functions. You can use letters, numbers, underscores and single quotes in function names.

You can have patterns on the left of the equals sign. For example:

[fred, petra] = [12, 13]

defines fred to have the value 12 and petra to have the value 13. See §6.9 for details.

Functions may take parameters:

/⋆ A function with parameters.  
 ⋆/  
jim a b = a + b + 12

This defines a function called jim which takes two parameters and whose value is the sum of the two parameters, plus 12. The /* and */ enclose a multi-line comment.

Functions may have several right-hand-sides, each right-hand-side qualified by a guard expression. Guards are tested from top to bottom and the first guard which has the value true causes the function to have the value of that right-hand-side. If no guard evaluates to true, then the last right-hand-side is used.

jenny a b  
  = 42, a + b >= 100  
  = 43, a + b >= 50  
  = 44

This defines a function called jenny which takes two parameters and whose value is 42 if the sum of the parameters is 100 or greater; 43 if the sum is greater than or equal to 50 but less than 100; and 44 if the sum is less than 50.

Any function may be followed by any number of local functions, enclosed in curly braces. So jenny could be written as:

jenny a b  
  = 42, sum >= 100  
  = 43, sum >= 50  
  = 44  
{  
  sum = a + b;  
}

Note that you need a semi-colon after each local function. A local function may refer to anything in an enclosing scope, including itself.

You can write if-then-else expressions:

david a = if a < 12 then "my cat"  
  else "likes lasagne"

This is exactly equivalent to:

david a  
  = "my cat", a < 12  
  = "likes lasagne"

if-then-else expressions are sometimes easier to read than guards.

Functions application is with spaces (juxtaposition). For example:

harry = jim 2 3

defines harry to have the value 17.

All functions are curried, that is, they can accept their arguments in stages. For example:

sandro = jim 1

defines sandro, a function which takes one parameter and will add 13 to it. This trick becomes very useful with list processing, see §6.7.

nip2 has some built-in functions, see Table 6.1. They mostly take a single argument. All other functions are defined in the various standard toolkits and can be edited in the program window.




Function Description


dir any List names in scope
has_member [char] any Does class have member


name2gtype [char] Search for a GType by name
gtype2name real Return the name of a GType


error [char] Stop with error message
print any Convert to string
expand [char] Expand environment variables in string
search [char] Search for a file
_ [char] Translate string


is_image any Test for image
is_bool any Test for boolean
is_real any Test for real
is_class any Test for class
is_char any Test for char
is_list any Test for list
is_complex any Test for complex
is_instanceof [char] any Test for instance of class


re image/complex/class Extract real part of complex
im image/complex/class Extract imaginary part of complex
hd list Extract head of list
tl list Extract tail of list
sin image/number/class Sine
cos image/number/class Cosine
tan image/number/class Tangent
asin image/number/class Arc sine
acos image/number/class Arc cosine
atan image/number/class Arc tangent
log image/number/class Natural log
log10 image/number/class Base 10 log
exp image/number/class e to the power
exp10 image/number/class10 to the power
ceil image/number/class Round up
floor image/number/class Round down
gammq real real Normalised incomplete Gamma function


vips_image [char] Load image from file
read [char] Load file as a string



Table 6.1: nip2 built in functions


nip2-8.7.0/doc/html/nipguidese26.html0000644000175000017500000001253713341773367014250 00000000000000 Evaluation

6.5 Evaluation

nip2 calculates the value of an expression by using the definitions you entered to successively reduce the expression until it becomes one of the base types. Sometimes there is a choice as to which part of the expression will be reduced next — nip2 will always choose to reduce the leftmost, outermost part of the expression first.

For example, consider this definition:

factorial n  
  = n ⋆ factorial (n - 1), n > 1  
  = 1

And here’s how nip2 will evaluate the expression factorial 3:

factorial 3 -->  
  3 > 1 -->  
  true  
3 ⋆ factorial (3 - 1) -->  
  (3 - 1) > 1 -->  
  2 > 1 -->  
  true  
3 ⋆ (2 ⋆ factorial (2 - 1)) -->  
  (2 - 1) > 1 -->  
  1 > 1 -->  
  false  
3 ⋆ (2 ⋆ 1) -->  
3 ⋆ 2 -->  
6

Note how nip2 delays evaluating parameters to functions until they are needed, but still shares the result. 3 - 1 is only evaluated once, for example, even though the result is used three times. nip2 has a trace window: click on Debug / Trace in the program window and check the View / Operators menu item.

The advantage of this style of computation over conventional imperative programming languages is that you can reason about your program mathematically1 .

This isn’t the best way to write a factorial function. A function with lots of recursive calls can be hard to understand — it’s much better to use one of the higher order functions from the standard environment to encapsulate the type of recursion you want to use.

The clearest definition for factorial is probably:

factorial n = product [1..n]

See §6.6.5 for an explanation of the list syntax.

nip2-8.7.0/doc/html/nipguidese22.html0000644000175000017500000000514113341773367014235 00000000000000 Load and save

6.1 Load and save

When nip2 starts up it loads all of the definition files (files with a .def extension) it can find in the directories listed in your start path. You can change the start path in Preferences. By default, the start path lists just two areas: a personal start directory that nip2 makes in your home area, and the main system nip2 start directory containing all the standard toolkits.

If there are two files with the same name on the start path, then nip2 will only load the first one. This means that if you modify one of nip2’s built-in menus and save it to your personal start directory, in future you’ll just see your personalised version.

You can load or reload a toolkit at any time with the File / Open Toolkit menu item in the program window. If you open a toolkit with the same name as an existing toolkit, nip2 will remove the old toolkit before it loads the new one.

nip2-8.7.0/doc/html/nipguidese8.html0000644000175000017500000000712713341773367014167 00000000000000 Printing

3.5 Printing

Once you have assembled a good reflectogram, you will want to print it, or to use it in other computer programs. The best way to do this is to save the final image in TIFF or JPEG format, and then load it into the new application — see §4.2.

There are a couple of points to bear in mind: first, like any image, reflectograms look best on paper if you sharpen them up a little first. Click on Filter / Convolution / Custom Convolution, right click on the matrix button, select Replace from file. Double Click on the second or lower data directory listed in the left hand column to enter nip2’s main data directory. Change the Image type select / option to All FIles (*) and then select and load rachel.con. This will usually produce an approprioatly sharpened reflectogram.

Secondly, you will need to try several prints with different contrasts and brightnesses to get a good match between the paper and the screen, try Image / Levels / Linear. You may even want to fiddle with the gamma, try Image / Levels / Power.

Finally, you may not need a full resolution image. For almost all printers there’s no point going over about 300 dpi (dots per inch), or about 3000 by 2000 pixels for an A4 page. To reduce the size of an image, use one of the functions listed under Resize / Transform / Resize.

nip2-8.7.0/doc/html/nipguidese19.html0000644000175000017500000000673113341773367014251 00000000000000 Matrix

5.6 Matrix

This menu groups operations which operate on matricies. nip2 has four ways of displaying a matrix, but they all behave in the same way under the skin. Almost all the items in the Math menu will work on matricies. Most of the matrix operations will also work on images.

New
The first four items make matricies which display and edit in various ways useful for different applications. The final two make matricies which are pre-filled with useful numbers.
Convert to Matrix
Try to make anything into a matrix.
Extract
This group of items extracts various submatricies. You can also do this graphically: just drag-select an area in matrix.
Insert, Delete,
Also work on images, which can be handy. A 45 degree rotate will only work for square matricies with odd-length sides.
Invert
Simple matrix-only maths operations.
Plot Scatter
This takes a two-column matrix where the columns are the X and Y positions of points and draws a scatter graph.

nip2-8.7.0/doc/html/nipguidese36.html0000644000175000017500000000754713341773367014256 00000000000000 Calling VIPS functions

6.15 Calling VIPS functions

You can call any VIPS operation which has the following properties:

  • There must be at least 1 output argument. If there’s a single output argument, that becomes the value of the function. If there is more than one output, then the function returns a list with the outputs as members.
  • The output arguments must all be one of:
    • IM_TYPE_DOUBLE,
    • IM_TYPE_INT,
    • IM_TYPE_COMPLEX,
    • IM_TYPE_STRING,
    • IM_TYPE_IMAGE,
    • IM_TYPE_DOUBLEVEC,
    • IM_TYPE_DMASK,
    • IM_TYPE_IMASK
  • The input arguments must all be one of the types above, or IM_TYPE_DISPLAY. If an argument is an input display, nip2 passes in its current display structure, it does not take a display from your program.

When nip2 starts up, it loads any VIPS plug ins it can find on its data search path. You can call functions from plug ins in just the same way. For information on writing plug ins, see the VIPS Manual.

nip2-8.7.0/doc/html/nipguidese32.html0000644000175000017500000004231513341773367014242 00000000000000 Classes

6.11 Classes

You can define new types using class. For example:

Pasta_plain = class {  
  lasagne = "large sheets";  
  fusilli = "sort of twisty";  
  radiatori = "lots of ridges";  
}

This defines a new class called Pasta_plain. The class has three members (lasagne, fusilli and radiatori), each of which has a list of char as its value. By convention, we’ve named classes with an initial capital letter, but of course you can do what you like.

You can refer to the members of a class using the class project (.) operator. For example:

Pasta_plain.lasagne == "large sheets"

You can use an expression to the right of . if you enclose it in brackets. For example:

Pasta_plain.("las" ++ "agne") ==  
  "large sheets"

Classes can contain any objects as members, including functions and sub-classes. Functions may define local classes, classes may define local functions, and all may refer to each other using the usual scope rules. For example:

Pasta_all = class {  
  filled = class {  
    tortelloni = "venus' navel";  
    ravioli = "square guys";  
  }  
  plain = Pasta_plain;  
}

When you define a class, nip2 adds a few extra members for you. name is a list of char giving the name of the class. this and super are the most-enclosing class instance and the class instance this class is derived from (see §6.11.2). nip2 also adds a default constructor: a member with the same name as the class, pointing back to the class constructor.

For efficiency reasons nip2 does not allow mutual recursion at the top level. If two functions depend on each other, neither will ever be calculated. For example:

a = 1 : b;  
b = 2 : a;

Neither a nor b will have a value.

You can have mutual recursion between class members. For example:

Fred = class {  
  a = 1 : b;  
  b = 2 : a;  
}

Now Fred.a will have the value [1, 2, 1, 2, 1, …].

6.11.1 Parameterised classes

Classes can have parameters. Parameters behave like class members initialised from arguments to the class constructor. For example:

My_pasta pasta_name cooked = class {  
  is_ready t = "your " ++  
    pasta_name ++ " is " ++ state  
  {  
    state  
      = "underdone!", t < cooked  
      = "perfect", t == cooked  
      = "yuk!";  
  }  
}

This defines a class called My_pasta which takes a pasta name and a cooking time as parameters. Once you have made an instance of My_pasta, you can test if it’s been cooked at a certain time with the is_ready member. For example:

tele = My_pasta "telephoni" 10;  
tele.is_ready 5 ==  
  "your telephoni is underdone!"

6.11.2 Inheritance

Classes can inherit from a super-class. For example:

Pasta_more = class Pasta_plain {  
  macaroni = "tubes";  
  spaghetti = "long and thin";  
  lasagne = "fairly large sheets";  
}

Here the new class Pasta_more inherits members from the previous class Pasta_plain. It also overrides the definition of lasagne from Pasta_plain with a new value. For example:

Pasta_more.macaroni == "tubes"  
Pasta_more.fusilli == "sort of twisty"  
Pasta_more.lasagne == "fairly large sheets"

You can use this and super to refer to other members up and down the class hierarchy. super is the class instance that the current class inherits from (if there’s no super-class, super has the value []), and this is the most-enclosing class instance.

Pasta_more.super == Pasta_plain  
Pasta_more.this == Pasta_more  
Pasta_more.super.this == Pasta_more

therefore:

Pasta_more.lasagne == "fairly large sheets"  
Pasta_more.super.lasagne == "large sheets"  
Pasta_more.super.this.lasagne ==  
  "fairly large sheets"

There’s a special symbol root which encloses all symbols. For example:

fred = 12;  
 
Freddage = class {  
  fred = 42;  
  mystery = root.fred;  
}

Now Fred.mystery will have the value 12.

There’s another special symbol called scope which encloses all symbols in the file this definition was loaded from. If you want to refer to another definition in the same file which is being masked somehow, use scope.

You can use the built in function is_instanceof to test whether an instance is or inherits from a class. For example:

is_instanceof "Pasta_more" Pasta_more == true  
is_instanceof "Pasta_plain" Pasta_more == true  
is_instanceof "Pasta_more" Pasta_plain ==  
  false

The super-class constructor can take arguments, and these arguments can refer to class members. For example:

Fresh_pasta pasta_name = class  
  My_pasta pasta_name cooked {  
  cooked = 2;  
}

Defines a class for fresh pasta, which always cooks in 2 minutes. You need to be careful not to make loops: if cooked did tried to refer to something in the super-class, this class would never construct properly. nip2 unfortunately does not check for this error.

Finally, the superclass can be a fully constructed class. In this case, the superclass is cloned and the new class members wrapped around it. You can use this to write a class which can wrap any other class and add members to it. Many of the toolkit menu items use this trick to enable them to work for any object type.

6.11.3 Minor class features

There are a couple of other things you can do with classes. You can define a special member called _check. If this member is defined, then when a class instance is created, the check member is returned instead of the class itself. You can use this to implement class argument type checks, for example:

Fred a b = class {  
  _check  
    = this, is_real a && is_real b  
    = error "args to Fred must " ++  
      "both be real"  
}

Defines a class called Fred which has to have two real numbers as arguments.

You can define members called oo_binary, oo_binary’ and oo_unary and do operator overloading. When nip2 sees one of the standard operators being used on an instance of your class, it will look up one of these members and pass in the name of the operator and the argument. The two forms of the binary operator member are called for the class-on-left and the class-on-rights cases. So:

x = Fred 1 2  
x + 12 == x.oo_binary "add" 12  
12 + x == x.oo_binary' "add" 12  
!x == x.oo_unary "negate"

These two features are very primitive. The _Object class in the _types toolkit builds on these to provide a fairly high-level system for checking class arguments and defining the meaning of operators. See §6.13.

nip2-8.7.0/doc/html/nipguidese35.html0000644000175000017500000000705413341773367014246 00000000000000 Optimisation

6.14 Optimisation

nip2 performs three useful optimisations on expressions. First, it finds and removes common sub-expressions in functions. So for example:

if a + b < 12 then a + b else b

will only evaluate a + b once. This can save a lot of time if a or b is a large image.

Second, nip2 detects arithmetic operations on unsigned char images, and replaces them with look-up tables. For example:

a = vips_image "campin.v"  
b = a ⋆ (a - 1) ⋆⋆ 0.5

Provided campin.v is an 8 bit image image, this expression will evaluate with a single call to im_maplut().

Finally, nip2 has a VIPS operation cache. It memorises the arguments to the last few hundred calls to VIPS, and the result each call gave. Before calling VIPS again, it checks to see if there is a previous call with the same arguments and if there is, uses the result it obtained last time.

nip2-8.7.0/doc/html/nipguidech4.html0000644000175000017500000001003613341773367014137 00000000000000 4 Reference

Chapter 4
Reference

This chapter is supposed to be a user-interface reference. Chapter 5 describes the items in the Toolkits menu and Chapter 6 is the programming language reference. Chapter 2 has a tutorial-style introduction.

nip2-8.7.0/doc/html/nipguidese12.html0000644000175000017500000001300013341773367014225 00000000000000 The programming window

4.4 The programming window

To pop up the programming window, click on Toolkits / Edit Toolkits in nip2’s main image processing window. The window shown in Figure 2.11 should appear.

Each of the things down the left of the program window is a toolkit. Each toolkit is a text file containing a set of definitions in nip2’s programming language. See Chapter 6 for details on the language.

If you open a toolkit, nip2 shows all of the definitions in that file. If you click on one of these nip2 shows the source for that definition in the main part of the program window. After editing a definition, click on File / Process to make nip2 read what you typed, compile it, and update itself.

Click on File / New / Tool to add a new definition to a toolkit, click on File / New / Toolkit to make a completely new toolkit. You can also right-click on tools and toolkits to get a context menu, and you can left-drag tools to move them around within a toolkit or between toolkits.

Some toolkits are loaded from files when nip2 starts up, others are built from the VIPS operation database (for example, _arithmetic), and one (called _builtin) contains the functions that are built into nip2. If you select a tool and then click on Help / Help on Tool, nip2 will try to display the relevant section from the VIPS manual in your web browser. Currently, this works only for things in the VIPS operation database: try _arithmetic / im_add, for example. There’s a section in the Preferences workspace to control which web browser nip2 uses and how it asks for a page.

Toolkits and tools whose names begin with an underscore character are not displayed in the main Toolkits menu. The idea is that they represent little utility functions, rather than stuff a user might be interested in. See §6.12.1 for more information on how tools and toolkits are displayed.

You can have several programming windows open at the same time (often useful, if confusing). The Edit menu lets you search for patterns across all definitions. The Jump To Definition item jumps to the definition of a symbol.

The Debug menu has items which open a trace window (use this to track the actions taken by nip2’s reduction engine) and which report on unresolved symbols and list all current errors.

nip2-8.7.0/doc/html/nipguidese15.html0000644000175000017500000002052613341773367014243 00000000000000 Filter

5.2 Filter

This menu groups operations which filter images, or which are filters in the photoshop sense.

Convolution
This menu has several standard convolution operations (blur, sharpen, edge detect, etc.), plus the option to convolve with a custom kernel.

Two menu items are slightly more complicated. Unsharp Mask transforms to CIE LAB colour space, then sharpens just the L band with a cored unsharp filter. The Tasks / Print menu has a version of this filter tuned for typical inkjet printers.

Custom Blur builds and applies a square or gaussian convolution kernel for you based on a radius setting.

Rank
A preset median filter, and a custom rank filter that lets you specify window size and rank.

The Image Rank item does pixel-wise ranking of a set of images.

Morphology
These menu items implement basic morphological operations. Images are zero for background and non-zero (usually 255) for object. Matricies are shown as 0, 1 and * for background, object and don’t-care.

The Threshold item does a simple level threshold. Use the Math / Relational menu to construct more complex image binarisations. Use Math / Boolean to combine morphologies.

The first half of the menu lists simple erode and dilate operations, 4- and 8-way connected. The second half contains several useful compound filters.

See also Histogram / Find Profile for something that can search an image for object edges. And MathStatistics / Edges can count the number of edges across and down an image.

Fourier
A selection of ideal, Gaussian and Butterworth Fourier space filters.

You can make other mask shapes yourself using the Image / Make Patterns menus, then apply them using Math / Fourier. You can also use the image paintbox to directly paint out peaks in a fourier-space image before transforming back to real space.

Enhance
A selection of simple image enhancement filters. Statistical Difference passes a window over an image and tries to match the region statistics at each point to a target mean and deviation.
Spatial Correlation
Place a small image at every possible position in a big image and calculate the correlation at each position. Simple Difference is the much faster unnormalised version.
GREYCstoration
VIPS includes a copy of the CImg library and you can use two useful CImg operations from this menu: denoising and enlarging.
Tilt Brightness
A selection of tools for adjusting the brightness of an image across it’s surface. Useful for correcting lighting problems.
Blend
Blend two objects together using either a third object to control the blend at each point, or a slider to set all points together. You can blend almost anything with anything.

One useful version is to use a text image (see Image / Make Patterns / Text) to blend between two colours (see Colour / New).

Along Line does a left/right or top/bottom fade between two images.

Overlay
Make a colour overlay of two monochrome images. Useful with Image / Transform / for testing image superposition.
Colourize
Use a colour image to tint a monochrome image. Useful in conjunction with Image / Transform / .
Browse
Look at either the bits or the bands of an image.
Photographic Negative and friends
A small selection of simple, faintly photoshop-style filters.

nip2-8.7.0/doc/html/nipguidese21.html0000644000175000017500000002257113341773367014242 00000000000000 Tasks

5.8 Tasks

This menu repeats many items from other menus, but tries to group them by tasks they are useful for, rather than by function.

5.8.1 Capture

This menu groups operations which are useful in capturing images, or for the initial processing you might want to do to an image captured from another program.

CSV Import
Import an image from a CSV file, with a few controls.
Interpret Analyze 7 Header
Read the meta fields for volume layout and calibration from the Analyze header and reformat the image appropriately.
Capture Video Frame
This menu item will currently only work on Linux machines with a compatible video4linux capture card. See §3.1.1 for notes on how it works.
Smooth
Use this to remove texture from images. It’s handy in conjunction with Flatfield.
Flatfield
Use this to correct homogeneity. Select an image of a piece of white (or mid-grey) card, then select the image to correct, then click Flatfield. Use Smooth to renmove texture from the white card if necessary.

You can select a single white and a group of images to correct a large set in one step

White Balance
Use this to move the white point to make an area of the image you know to be white, white. Mark a region on an image, enclosing a patch you know to be white. Select the region and the image and click on White Balance.
Find Colour Calibration
Use this to colour calibrate an image. Drag a region enclosing an image of a Macbeth Color Checker Chart and click Find Colour Calibration.
Apply Colour Calibration
Use this to apply the transform calculated by the previous item to another image. Select the calibration object, select the RGB image you want calibrated, and click Apply Colour Calibration.

5.8.2 Mosaic

The items in this menu are discussed in appalling detail in Chapter 3.

One Point
Join two images left-right or top-bottom with a simple translation. Mark a point on each image to be joined (open image view window, Ctrl-left-click, drag to position), then click on the mosaic button. The operation performs elaborate tie-point adjustment, so your selection of a common feature does not have to be exact.

The Manual versions do not perform automatic tie-point correction and are useful when joing very difficult images.

Two Point
Do a join, but allow the right-hand (or bottom) image to rotate and scale if it will improve the match. You need to pick two points on each image.
Balance
Break a mosaic apart, examine average pixel value in the overlap regions, adjust brightness to match, and reassemble. This only works for images which have been produced just by mosaic joins! If you’ve done anything else to the image since loading it, the balance will fail with a mysterious message.
Manual Balance
Adjust the brightness in a set of masked areas to match. Useful for removing shadows.
Rebuild
Use this to mosaic up one set of files based on joins you made in another. Breaks a mosaic part to component files, performs a string substitution on the file names, and reassembles.
Clone Area
Select over- or under-exposed pixels in one image and replace them with the corresponding pixels from another image. Useful for removing lead numbers used to identify X-ray plates.

The function operates on two 8-bit mono images. Move and resize the region on the first image to define the area around the white number. Move the region on the second to overlapping area. A section of the area on the second image is cloned and blended into the first image. The amount of the defined area to be cloned in defined by a slider within the output image.

5.8.3 Picture Frame

Items useful for mocking up painting frames.

5.8.4 Print

Items useful while preparing an image for printing.

Sharpen
Sharpen an image for printing. This is a version of Filter / Convolution / Unsharp Mask tuned for typical inkjet printers.
Adjust Tone Curve
Adjust the reproduction tone curve in LAB. Most useful for offset work, especially from transparencies.

nip2-8.7.0/doc/html/nipguidese3.html0000644000175000017500000006054513341773367014165 00000000000000 nip2 for nerds

2.3 nip2 for nerds

This section sprints through a bit of nip2 programming, see §6 for full details and a more formal definition of the language.

The insides of nip2 are built with nip2’s own programming language. It’s a pure lazy functional language with classes. It’s C’s expression syntax (more or less) plus approximately Miranda/Haskell function syntax, plus some basic class stuff. nip2’s main window is a class browser for this programming language.

Click on Toolkits / Edit Toolkits in nip2’s main window to pop up the programming window (see §4.4 for details on all the bits in the window), then in the edit area there type:

// add two things  
 
Fred a b = class {  
  sum = a + b;  
}

This defines a class called Fred whose constructor takes two arguments, a and b. There’s one member, called sum, which is a and b added together.

In the program window, click File / Process. This makes nip2 read what you typed, parse it, compile it and update itself. The program window should now look like Figure 2.11.


PIC


Figure 2.11: Programming Fred


If you look back at the main nip2 window, a new menu will have appeared under Toolkits called untitled. If you click on that, there will be a menu item called Fred. Let your mouse linger, and you’ll see a tooltip too.

In the main window, type Fred 2 3 into the box at the bottom of the current column. Press Return and nip2 will make a Fred for you. Click on the down arrow to the left of your new Fred once to see the members of Fred (just sum in this case), click again to see the class parameters too. The main window should look like Figure 2.12.


PIC


Figure 2.12: Main window Fred


Click to the right of b, type in a new value and press Return. The sum member should update. nip2 keeps track of dependencies between rows, but it also tracks dependencies inside rows, both ones that come from the class, and ones created by any edits you do to the class instance after creating it. You won’t see it in a simple example, but nip2 also discovers and tracks dependencies which can arise at run time. Click on the text just to the right of the b button again, type a and press Return. Now edit a: press Return and both b and sum will update.

You can use Fred to add any two things together. Click on Toolkits / Widgets / Scale to make a scale widget, press Ctrl-U (the keyboard shortcut for Edit / Duplicate) to duplicate it, and finally click on Toolkits / untitled / Fred. Open up the new Fred and try dragging some of the scales around. The main window will look like Figure 2.13.


PIC


Figure 2.13: Scale Fred


The scales are classes too (instances of Scale). You can open them up and do strange things with them as well. Open up one of the scales you made (eg. A2 in Figure 2.13) and change the from parameter to be A3.value. Now try dragging the sliders again.

Try dragging the sum slider. Now go back and drag one of the original sliders. You’ll see that sum no longer updates, it’s stuck at the last position you dragged it to. This is because there are now two things affecting the value of sum: the underlying code (the a + b inside Fred), and the position you dragged the slider representing sum to. nip2 has the rule that graphical edits (dragging the slider) override code. To make sum update again, right click on the sum button and select Reset from the pop up menu. Now drag one of the input sliders again, and sum will start updating once more.

Classes can inherit from other classes. Go back to the program window, click on File / New / Tool to clear the edit window, and type:

// multiply two things  
 
Jim a b = class Fred a b {  
  product = a ⋆ b;  
}

This defines a class called Jim which inherits from Fred. Click File / Process, then back in the main window, type Jim 4 5 into the bottom of the column. Click down once to expose the members (just product), click again to expose the parameters as well (a and b), and click a third time to expose the superclass member (which should be an instance of Fred). You can also open up the super member and see inside the Fred that this Jim is using as its superclass. A5 will respond to both product and sum. See Figure 2.14.


PIC


Figure 2.14: Browsing Jim


nip2 has about 20 different graphical classes like Scale. Whenever a row takes a new value, nip2 checks to see if that value is an instance of one of these special classes, and if it is, it will add a graphical element to the row display which represents that class’s value. It builds the graphical part by looking inside the class for certain members (for example, the scale graphic looks for members called from, to and value). When you change the graphic (maybe by dragging the scale), nip2 rebuilds the class by looking inside for a edit member (eg. Scale_edit) or if that’s not defined, a constructor member (eg. Scale).

You can make your own graphic widgets by subclassing nip2’s built-in ones. By selectively overriding default constructors and adding edit members, you can control how your new widget will behave in expressions, and how it will behave if it’s edited graphically.

Make a new column, load up an image (use File / Open), open an image viewer (double-click on the thumbnail), drag out two regions on it (hold down Ctrl and the left mouse button and drag down and right). Your main window should look like Figure 2.15.


PIC


Figure 2.15: Two more regions


im_insert is a VIPS operation that puts one image inside another at an (x, y) position. VIPS operations work on VIPS images. The value member of an Image or Region is the VIPS image that underlies the nip2 row.

You can use im_insert to make a thing to join two images together. Back in the program window, click on File / New / Tool and enter:

// join two images left-right  
 
Join a b = class Image value {  
  shim = Scale "Spacing" 0 1000 0;  
  value = im_insert a.value b.value  
    (a.width + shim.value) 0;  
}

Click File / Process. This defines a class Join which subclasses the Image graphic.

Now select your two regions (click on the first one, shift-click on the second) and click on Toolkits / untitled / Join. Alternatively, just click Join and it’ll be given the borrom two items in the column. A new Join row will appear. Open it up and drag the slider to set the spacing between the two joined images. Go back to the image viewer for the image file you loaded and try dragging one of the regions. Figure 2.16 shows this class in action. The thing in Toolkits / Image / Join / Left to Right is just a slightly fancier version of this.


PIC


Figure 2.16: Joining two images with Join


You can change how the graphic widgets behave by subclassing them. Try:

Scale_int c f t v = class  
  scope.Scale c f t ((int) v) {  
  Scale = Scale_int;  
}

This defines a new scale class called Scale_int which can only take integer values. The Scale = Scale_int; line is Scale_int overriding Scale’s constructor, so that a Scale_int stays a Scale_int when you drag. Because there’s a local called Scale, Scale_int needs to use scope.Scale to refer to the superclass.

Here’s a version of Mark which can only be dragged in a circle. You pass it an image to display on, an xy centre position, a radius and a start angle.

Mark_circle image x y r a = class  
  scope.Mark image _x' _y' {  
  // get rect cods for our point  
  _pos = (x, y) + rectangular (r, a);  
  _x' = re _pos;  
  _y' = im _pos;  
 
  Mark i l t  
    = this.Mark_circle i x y r a'  
  {  
    // vector from centre of  
    // circle to new position  
    u = (l, t) - (x, y);  
 
    // angle of vector  
    a' = im (polar u);  
  }  
}

nip2-8.7.0/doc/html/nipguidese25.html0000644000175000017500000000544013341773367014242 00000000000000 Naming conventions

6.4 Naming conventions

You can name things in any way you like, but we’ve used the following conventions.

  • Classes start with a capital letter, words are separated with underscores, subsequent words are not capitalised (eg. Image_file)
  • Private names are prefixed with underscores (and are hidden by most of the user interface)
  • Functions from the VIPS library are prefixed with im_
  • Global utility functions (eg. map), public members (eg. Colour.colour_space) are all lower case, words are separated with underscores, subsequent words are not capitalised
  • Constants are capitalised (eg. Operator_type.COMPOUND_REWRAP)

nip2-8.7.0/doc/html/nipguideli3.html0000644000175000017500000000611713341773367014155 00000000000000 List of Tables

List of Tables

    

    

nip2-8.7.0/doc/html/nipguidech2.html0000644000175000017500000000450613341773367014142 00000000000000 2 Tutorial

Chapter 2
Tutorial

This chapter runs very quickly through how to use nip2’s user-interface. See Chapter 4 if you want more details on how the different bits work.

nip2-8.7.0/doc/html/nipguidese31.html0000644000175000017500000004442513341773367014245 00000000000000 The standard libraries

6.10 The standard libraries

nip2 comes with a lot of little utility functions. The functions for list processing are listed in Table 6.3. There are a huge number more, too many to really list here. Table 6.4 lists all the utility toolkits with some hints about the kinds of function they contain. Read the (heavily commented) toolkits for details.





Toolkit Contains Description



_convert parse_int l, … convert ascii text to numbers
to_matrix x, … convert anything into a matrix
colour_transform_to to x, … convert between colour spaces



_generate image_new w h ... make a blank image
image_white i look at image i, try to guess what white is
make_xy w h make an image of size w by h whose pixel value are
their coordinates



_types Image i all the standard classes and support functions,
see §6.13



_predicateis_colour_space i test for objects are in various categories or have
various properties



_stdenv logical_and x, … function versions of all the operators
bandsplit i, … break up and recombine images by band
mean x, … statistical ops on objects
transpose x, flipud x, rot90 x, …flips, rotates, etc. on objects
rad x, pi, … trigonometry stuff
sign x, conj x, polar x, … complex stuff
rint x, ceil x, … various rounding things
fwfft x, … fourier stuff
dilate m x, rank w h n i, … morphology stuff
conv m x, … convolution stuff
image_set_type t i, … set various image header field
resize x y i, … resampling images
recomb m i, … recombinations
clip2fmt f i, … format conversions
hist_find m x, … histogram stuff
id x, const x y, … various useful operations on functions
map_binary fn x y, … mapping over groups




Table 6.4: Useful utility functions — see the source for details


nip2-8.7.0/doc/html/nipguidese2.html0000644000175000017500000002526513341773367014164 00000000000000 nip2 for reflectogram mosaics

2.2 nip2 for reflectogram mosaics

This section quickly builds an infrared reflectogram mosaic using the sample images that come with nip2. See Chapter 3 for detailed coverage.

Click on File / Open Examples. You should see a directory called 1_point_mosaic. Doubleclick and you’ll see a file called 1pt_mosaic.ws. Doubleclick that and you’ll load the workspace for this example.

If you’d rather make the workspace yourself, click on the file type filter and select All files. A set of 8 images should appear. Click on the first file, shift-click on the last, and click Open. This will create a group of all eight images. Right-click on the row and select Ungroup to unpack to a set of rows. See Figure 2.8.


PIC


Figure 2.8: Loading the sample images


The images have been named to match their positions in the mosaic, so for example cd2.1.jpg is the first image in row two. Open up viewing windows for the first two images by double clicking on the thumbnails. Move the two opened images viewers so that they are side by side. Adjust the zoom (using the i and o keys) and the pan (by dragging with the middle mouse button) so that the overlap area is visible in both images.

Mark a tie-point on each image by Ctrl-left-clicking on a feature you can see in both images, see Figure 2.9. Move a point after you’ve marked it by dragging on the label. You don’t need to be exact: nip2 just uses the point you select as the start point for a search. It can cope with misses of up to about 10 pixels. To mosaic the two images together, click on Toolkits / Tasks / Mosaic / One Point / Left to Right. See Figure 2.10.


PIC


Figure 2.9: Ready to join



PIC


Figure 2.10: Joined images


Picking items deep in the toolkit menu is fiddly, so nip2 has several shortcuts. First, you can tear off any toolkit menu by clicking on the dotted line at the top. Secondly, you can assign any keyboard accelerator to any menu item. Navigate to the menu item and while it is selected, press the key combination you want to use as a shortcut (for example, Ctrl-L might be good for Mosaic / One Point / Left to Right). Now whenever you press Ctrl-L with the keyboard focus in the main window, you will do a left-right mosaic join. Finally, you can use the toolkit browser to display a selection of the tools in a pane on the right-hand side of the main window. Click on View / Browse Toolkits, then type “mosaic” into the search box at the top. The toolkit browser will display all items related to mosaicing. Double-click an item to do that action.

Some systems won’t let you edit menu shortcuts by default. For example, on GNOME, you need to enable this in System / Preferences / Menus & Toolbars.

Join the rest of the pairs of sample images together left-right. Once you have made all the rows, join the rows together in turn to make the complete image using Mosaic / One Point / Top to Bottom.

When you’ve built the whole thing you’ll see that there are differences in brightness between the tiles that make up your composite image. You can fix most problems like this automatically by selecting your final mosaiced image and clicking on Mosaic / Balance. This operation takes your mosaic apart, examines the overlap areas for differences in brightness, calculates a set of adjustment factors to minimise these differences, and then rebuilds the mosaic.

There can be some problems left even after mosaic balance. Use Mosaic / Tilt Brightness to remove any left-right or up-down graduations in brightness.

Save your mosaic workspace for future reference by clicking on File / Save Workspace. To save just the mosaiced image, right click on the thumbnail and select Save As.

nip2-8.7.0/doc/html/nipguidese14.html0000644000175000017500000003453713341773367014251 00000000000000 Colour

5.1 Colour

This menu groups operations on colorimetric images and patches of colour. A colour patch is three float numbers plus a tag saying how those number should be interpreted as colour (for example, as a colour in CIE LAB colourspace). You can drag and drop between colour patches, and into and from the inkwell in an image paint window. Double-left-click on a colour patch to open a colour select dialog.

nip2 has 9 main types of colorimetric image, see Table 5.1. All these types are D65 (that is, daylight) absolute colorimetric. When it displays an image, nip2 uses the Type field in the image header as a hint on how to transform the numbers in the image into RGB for the display. The current Type is displayed at the end of the caption line below an image thumbnail.

The Mono, GREY16 and RGB16 types are not really calibrated themselves: they are usually whatever you get by loading an image from a file. You’ll usually need an extra step, such as applying an embedded ICC profile, before you get accurate colour.





Name Format Notes



Mono One band 8 bit Not calibrated
sRGB Three band 8 bit Screen device space for the sRGB standard
GREY16One band 16 bit Not calibrated
RGB16 Three band 16 bitNot calibrated
Lab Three band float The 1976 version of the CIE perceptual colourspace
LabQ Four band 8 bit Like Lab, but represented as 10:11:11 bits
LabS Three band 16 bitLike Lab, but represented as 15:16:16 bits
LCh Three band float Lab, but with polar coordinates
XYZ Three band float The base CIE colourspace
Yxy Three band float Sometimes useful for colour meters
UCS Three band float Highly uniform space from the CMC(l:c) standard




Table 5.1: nip2 colourspaces


New
Make a patch of colour, or pick a colour from a slice through CIELAB colourspace.
Convert To Colour
Convert anything into a Colour object.
Colourspace
Change the colourspace. The stored numbers change, but the visual appearance should stay the same.
Tag As
Change the colourspace tag (the Type field in the image header). The stored numbers stay the same, but the visual appearance should change.
Colour Temperature
Change the colour temperature. Move Whitepoint just adjusts the ratios of X and Z using the CIE standard illuminants.

D65 to D50 and D50 to D65 transform using either a 3x3 matrix which is numerically minimal in XYZ space with respect to the colours on a Macbeth Color Checker, or via Bradford cone space. The Bradford transform omits the power term.

The final two items go from XYZ to LAB and back, but with D50 normalisation rather than the default D65.

ICC
Transform images (not patches of colour) device space to profile connection space (LAB float) and back.

You need to be careful about colour temperature issues: all printers work with D50, and nip2 is all D65. Use the D65 to D50 interchange items in the Colour Temperature menu to swap back and forth.

All printers also work with relative colorimetry, and nip2 is generally absolute. Use Absolute to Relative to scale an absolute colorimetric image by a media white point.

Radiance
nip2 can read and write images written by the Radiance family of programs (usually with the suffix .hdr), commonly used in HDR photrography.

Images in this format used a packed floating point layout for their pixels. Items in this menu pack and unpack pixels for you.

Difference
Calculate various colour difference metrics. You can mix patches of colour and colour images.
Adjust
Change colour in a colorimetric way. Recombination multiplies each pixel in an image through a matrix. Cast displaces the neutral axis in LAB space. HSB lets you adjust an image in LCh colourspace.
Similar Colour
find pixels in an image with a similar colour to a patch of colour.
Measure Colour Chart
This takes a trimmed image of a colour chart (a rectangular grid of coloured squares), measures the average pixel value in the centre 50% of each square, and returns a matrix of the measured values.

Use Make Synthetic Colour Chart to make a colour chart image from a matrix of measurements.

Plot ab Scatter
draws a 2 dimensional histogram of the distribution of pixel colours in LAB colourspace.

nip2-8.7.0/doc/html/nipguidese33.html0000644000175000017500000006636513341773367014256 00000000000000 Controlling the interface

6.12 Controlling the interface

nip2 looks at the scraps of program you type in and execute and tries to show them on the screen in a graphical way. The sorts of display you get depend on where in nip2 you define the expression, and what sort of value it has.

6.12.1 Tools and toolkits

Definitions in toolkits are turned into menus off the Toolkits menu in the main window, and added to the toolkit browser. Toolkits are loaded from files at startup or can be made in the program window. Toolkit or a definition names which start with an underscore character are hidden and not displayed. The toolkits are always displayed in alphabetical order, but you can order the items within a toolkit in any way you like.

There are two ways to write toolkit definitions. Function definitions and zero-argument classes simply appear as menu items, built from static analysis of their source code. However, if a definition evaluates to an instance of the class Menu, a menu item is built from dynamic analysis of the value of the definition.

Static menu items

Zero-argument classes within toolkits are displayed as pull-right menus. You can nest classes to any depth.

nip2 uses the first line of the comment before a definition as help text for that function, so it’s a good idea to put a simple one-line description of the function at the start of a comment.

For example, if the following text is placed in a file called Fred.def on nip2’s start path, you’ll get a menu in the tookits called Fred with a pull-right and a tooltip. See Figure 6.1.

Banana a = a ⋆ 3;  
 
Subfred = class {  
  // add two things  
  Jim a b = a + b;  
  Apple e = e ⋆ 12;  
  Harry z = 12 + z;  
}


PIC


Figure 6.1: How Fred.def will look


Dynamic menu items

Dynamic menus give you much more control over the way menus are drawn and make it easy to reuse menus. A dynamic menu item is a class instance that is a sub-class of Menuitem. It needs to have three members: label, the text that should appear in the menu (with an underscore character to indicate the mnenonic); tooltip, a short hint that appears as a tooltip or in the toolkit browser; icon, an optional image file to be displayed in the menu next to the text; and action, the function that is called when the menu item is activated. label and tooltip are constructor arguments for Menu.

So for example:

Wombat_find_item = class Menuitem  
  "_Find Wombat"  
  "analyse image and locate wombat" {  
  icon = "nip-slider-16.png";  
  action x = im_wombat_locate x;  
}

will appear as shown in Figure 6.2.


PIC


Figure 6.2: How Wombat_find_item will look


A dynamic pullright menu is a subclass of Menupullright. It’s just like Menuitem, but without the need for an action member. Any members which are subclasses of Menu are displayed as items in the submenu. So again:

Wombat_item = class Menupullright  
  "_Wombat"  
  "wombat-related operations" {  
  icon = "nip-slider-16.png";  
  item1 = Wombat_find_item;  
  sep = Menuseparator;  
  boink = Wombat_find_item;  
}

will appear as shown in Figure 6.3.


PIC


Figure 6.3: How Wombat_item will look


6.12.2 Workspaces

Definitions in workspaces are displayed with nip2’s class browser. Each row is displayed in four main parts: a button for the row name, a line of text, a set of sub-rows for the members of the row’s class, and a graphic display representing the row’s value. See Figure 6.4.


PIC


Figure 6.4: Components of a workspace row


The text part of the right-hand-side of each row is always displayed, but the sub-rows are only displayed if the row represents a class, and the graphic is only displayed if the class is an instance of one of the classes in Table 6.5. You can subclass these if you want to use the graphic display in your own widgets.

There are three separate ways to set the value for a row. You can edit the line of program text, you can edit one of the members, or you can manipulate the graphic representation (dragging a slider, or moving a region). These can be contradictory, so nip2 resolves conflicts by always applying changes in the order text, then graphic, then member.

When it applies a graphic change, nip2 rebuilds the class using a class member called class-name_edit, or if that is not defined, the class’s constructor member. For example, the Colour class can be defined as:

Colour colour_space value = class {}  
A1 = Colour "sRGB" [255,0,0];

There are two ways to change A1. You can open A1 and change colour_space to ”Lab”, or you can double-click on the swatch and drag the disc. When you click OK on the colour edit dialog, nip2 searches for a member called Colour_edit, fails to find it, and so picks the Colour member instead (the default constructor generated by nip2). It then replaces the value of A1 with

[needs finishing]




Class Description


Clock interval value A clock widget, handy for animations
Expression caption expr Displays an editable expression
Group value A group of objects for iteration
List value A list of related objects
Pathname caption value Displays a file browser
Fontname caption value Displays a font browser
Toggle caption value A toggle switch
Scale caption from to value A slider
Option caption labels value Select one item from a list
Colour colour_space value A patch of colour
Matrix_vips value scale offset filename displayA matrix
Arrow image left top width height Two points joined by a line on an image
Region image left top width height A sub-area of an image
Plot options value Displays a plot widget
Image value An image
Number caption value Displays an editable number
Real value Displays a real number
Vector value Displays a list of reals
String caption value Displays an editable string
Mark image left top A point on an image
HGuide image top A horizontal line on an image
VGuide image left A vertical line on an image
Area image left top width height A sub-area of an image, fixed in size



Table 6.5: nip2 built in graphic classes


6.12.3 The Image class

.

say supports mioxed ops with real, vector and complex constants

6.12.4 The Colour class

This class displays a swatch of colour. If you double-click on the

Pathname caption value = class {}

nip2-8.7.0/doc/html/nipguidese28.html0000644000175000017500000006250213341773367014247 00000000000000 Lists and recursion

6.7 Lists and recursion

Functional programming languages do not have variables, assignment or iteration. You can achieve the same effects using just lists and recursion.

There are two main sorts of recursion over lists. The first is called mapping: a function is applied to each element of a list, producing a new list in which each element has been transformed.

map fn [a,b,c] == [fn a, fn b, fn c]

The second main sort of recursion is called folding: a list is turned into a single value by joining pairs of elements together with a function and a start value.

foldr fn start [a,b .. c] ==  
  (fn a (fn b (.. (fn c start))))

(The function is called foldr as it folds the list up right-to-left. There is an analogous function called foldl which folds a list up left-to-right, but because of the way lists work, it is much slower and should be avoided if possible.)

map is defined in the standard list library for you:

/⋆ map fn l: map function fn over list l  
 ⋆/  
 
map fn l  
  = [], l == []  
  = fn (hd l) : map fn (tl l)

So, for example, you could use map like this:

map (add 2) [1..5] == [3,4,5,6,7,8]

foldr is defined in the standard list library for you:

/⋆ foldr fn st l: fold up list l,  
 ⋆ right to left with function fn and  
 ⋆ start value st  
 ⋆/  
 
foldr fn st l  
  = st, l == []  
  = fn (hd l) (foldr fn st (tl l))

So, for example, you could use foldr like this:

foldr add 0 [1..5] == 15

(Mathematically, foldr is the more basic operation. You can write map in terms of foldr, but you can’t write foldr in terms of map.)

Unconstrained recursion over lists can be very hard to understand, rather like goto in an imperative language. It’s much better to use a combination of map and foldr if you possibly can.

The toolkit _list contains definitions of most of the standard list-processing functions. These are listed in Table 6.3. Check the source for detailed comments.




Name Description


all l and all the elements of list l together
any l or all the elements of list l together
concat l join a list of lists together
drop n l drop the first n elements from list l
dropwhile fn l drop while fn is true
extract n l extract element n from list l
filter fn l all elements of l for which fn holds
foldl fn st l fold list l left-to-right with fn and st
foldl1 fn l like foldl, but use the first element of the list as the start value
foldr fn st l fold list l right-to-left with fn and st
foldr1 fn l like foldr, but use the first element of the list as the start value
index fn l search list l for index of first element matching predicate fn
init l remove last element of list l
iterate f x repeatedly apply f to x
last l return the last element of list l
len l find length of list l
limit l find the first element of list l equal to its predecessor
map fn l map function fn over list l
map2 fn l1 l2 map 2-ary function fn over lists l1 and l2
map3 fn l1 l2 l3map 3-ary function fn over lists l1, l2 and l3
member l x true if x is a member of list l
mkset l remove duplicates from list l
postfix l r add element r to the end of list l
product l product of list l
repeat x make an infinite list of xes
replicate n x make n copies of x in a list
reverse l reverse list l
scan fn st l apply (foldr fn r) to every initial segment of list l
sort l sort list l into ascending order
sortc fn l sort list l into order by using a comparison function
sortpl pl l sort list l by predicate list pl
sortr l sort list l into descending order
split fn l break list l into sections separated by predicate fn
splits fn l break list l into single sections separated by predicate fn
splitpl pl l break list l up by predicate list pl
split_lines n l break list l into lines of length n
sum l sum list l
take n l take the first n elements from list l
takewhile fn l take from the front of l while fn holds
zip2 l1 l2 zip two lists together
zip3 l1 l2 l3 zip three lists together



Table 6.3: Functions in the standard list-processing toolkit


nip2-8.7.0/doc/html/nipguidese11.html0000644000175000017500000005501413341773367014237 00000000000000 Image processing window

4.3 Image processing window

Figure 4.5 shows nip2’s main image processing window. The centre area is the workspace, the left-hand area is a pane you can reveal to write custom definitions for this workspace (see View / Workspace Definitions), and the right-hand pane is the toolkit browser (see View / Toolkit Browser).

Drag with the middle mouse button to scroll the workspace window. Drop a file on to the workspace background (from your file manager) to load that file. If you right-click on the workspace background, a useful menu will appear.


PIC


Figure 4.5: nip2’s main image processing window


Workspace
A workspace is split into a set of separate tabs. Right-click on a tab to get a useful menu. Press the add icon at the right to make a new tab. You can drag tabs between workspaces, or drag a tab to the desktop to make a new workspace. Use the syntax tab1.A1 to make references between tabs.
Tab
This area displays the current tab. Tabs are divided into columns of objects which each behave rather like windows: they can be moved around, folded away, loaded, saved and deleted.
Current column
One column is the current column. This is the column to which all new objects are added. Single-left-clicking on the title bar of a column makes that the current column. See §4.3.1.
File, Edit, View
Use the File menu to create or save workspaces, to open workspaces or load other objects into this workspace, to merge workspaces and to search for workspace backups. Use the Edit menu to select, group, delete and duplicate sets of objects. Use View to show and hide elements of the main window, and to set the object view mode.
Toolkits
This menu contains all of the image processing functions which are currently loaded into nip2. They are generally grouped by object type: all of the operations on matricies are under Toolkits / Matrix, for example.

If you select one of these image processing operations, nip2 will apply that operation to the bottom few items in the current column (however many are necessary — two items for Math / Arithmetic / Add, for example), or alternatively, if you have selected some objects explicitly, it will try to apply the operation to the selected objects. See §4.3.3. As you move the mouse pointer over menu items nip2 tries to display some helpful information about the operation, including the number and type of arguments the operation expects.

Toolkit Browser
This side panel shows all the image processing operations again, but this time as a large flat list you can easily browse. Type into the search box at the top to filter operations by keyword. Doubleclick on an item to activate it.
Tab Definitions
This side pane shows private definitions for this tab. Programs you write here are loaded and saved with this workspace. See the Programming chapter for details on nip2’s programming language.
Free space
This displays the amount of disc space you have left in your temporary file area. See §A if you want to change the directory nip2 uses to store temporary files.

If you left-click on the label, it changes to display the space nip2 has free internally for performing calculations. You can change this limit in the Preferences workspace. Click again to switch back to disc free.

If you have objects selected, this area changes to show the names of the selected objects.

Status bar
As you move the mouse pointer about the window, this bar tries to display useful information about the thing you are pointing at.

4.3.1 Columns

Columns are split into a number of areas:

Column name
Each column has a name. You can pick any name you like when you make a new column with File / New / Column. There’s no way to rename a column, unfortunately. Objects in the column are named using the column name, plus a number.
Column title bar
Drag with the left mouse button held down on the column title bar to move the column around the workspace. Double-left-click on the title bar to change the comment attached to the column. Hold down the right mouse button on the column title bar to pop up a useful menu.

The items in the menu let you edit the caption, select all the objects in the column, make a new column which is a copy of this column, save the column to a file, convert the column into a menu item (see §4.3.6) and remove the whole column.

Column fold button
Left-clicking on the fold button folds the column away. Use this to hide columns which you still need, but which you are not interested in just now.
Expression entry
You can perform calculations by typing expressions directly into this box. For example, try entering the following expressions, and pressing Return:
2 + 2  
A1 + 120  
"My cat likes\nlasagne"  
fred = 12

The last example shows custom button name creation. Normaly nip2 will pick a name for you, but you can chose your own.

4.3.2 Rows

A column holds a number of rows. Each row comes in four main parts, not all of which are visible for all row values. Rows which represent classes have a pair or up/down arrows to the left of the row name button which you can use to control which parts of the row are visible.


PIC


Figure 4.6: Components of a workspace row


Row name button
Each row has a name. The name is normally formed from the name of the current column, plus a number.

If you double-left-click on the row name button, nip2 will pop up a viewer or dialog box for the value of the row. If you left-click, nip2 will select that row and deselect all other rows. If you click on an empty space in the workspace, it will deselect all rows. If you Ctrl-left-click, nip2 will toggle selection of that row. If you select one row and then Shift-left-click on another row in the same column it will select the second row and all the rows in between. If you drag with the left button, you can change the order of rows in a column. Hold down the right mouse button for a useful menu. If you let the mouse linger over a button, a useful tooltip will appear.

Graphic
If the row’s value is a class, and if the class is an instance of one of nip2’s graphic classes, then nip2 will draw a graphic representation of the row’s value. See §6.12.2 for a more detailed explanation.
Members
If the row has a class for a value, then nip2 will draw a sub-column listing the class members. Subcolumn members are in turn rows themselves.
Text
Finally, the text part normally shows a text representation of the row’s value. If you left-click on the value, it changes to show the formula which generated that value. You can edit the formula and press Return to change it.

Alternatively, selecting View / Show Formula toggles between displaying values for objects and displaying the formula.

Object name colours

nip2 changes the background colour of the row name button to show the state of the row. If background colours are not visible (perhaps your theme turns them off), try turning on the Display LEDs in workspace option in Preferences.

Green means the row is selected (click on the background to unselect), red indicates an error (right-click on the row button ans select Recalculate to see the full text of the error), brown indicates that the row value is out of date and needs recalculating and the various blues indicate parent and child relationships.

4.3.3 Applying operations to objects

There are three ways you can apply image processing operations to objects in your workspace:

  1. Select the object you want to apply the operation to by single-left-clicking on the object name. When you single-click, the object name will change colour to show that it is selected, and nip2 will display the name of the selected object at the left end of the status bar (this is useful if the selected object is scrolled off the edge of the window).

    You can select additional objects with Ctrl-left-click and Shift-left-click. This is necessary if you want to use an image processing operation that takes more than one argument.

    Once you have selected the rows (sometimes you need to select them in a certain order), click on the processing operation you want from the Toolkits menu.

  2. If there are no objects selected when you click on an image processing operation, nip2 uses the bottom few items (as many as are needed by the operation) in the current column.
  3. You can also type your formula directly into the expresion entry line at the bottom of the selected column. Chapter 6 describes the syntax in detail, but it’s approximately C.

4.3.4 Batch processing

If you select a number of rows and then click Edit / Group, nip2 will group the rows together. Now if you select the group and click on an item in the Toolkits menu, nip2 will apply that operation to every item in the group. You can group groups, and you can mix grouped and non-grouped rows freely.

If you save a group, nip2 will write each item in the group to a separate file, incrementing the filename each time.

4.3.5 Error handling

If an object in your workspace has an error (for example, if you are trying to join two images of different types), then the object name button will turn red to show that this object contains an error and the tooltip for the button will show the error message.

4.3.6 Making menu items out of columns

If you make a column that does something useful, you can make it into a menu item by following these steps:

  1. Make your column look nice. Drag with the left mouse button on the object name buttons to re-order items in the column, and add comments to explain what are the input fields and what are the output. Double-click on the column title bar to add a helpful title to the column.

    Add a comment by typing your text (enclosed in double quotes) into the line at the bottom of the column. Left-drag the row to the right place.

  2. Select Make Column Into Menu Item from the column title-bar menu, see §4.3.1.

    This will open up a new dialog box which you can use to set a name for your new menu item and the name of the top level menu the item should be added to.

  3. That’s it. You’ll be prompted to save your new toolkit when you try to quit nip2. We recommend you just say OK to the suggested location for the file. Edit your menus with the programming window, see §4.4.

nip2-8.7.0/doc/html/figs/0000755000175000017500000000000013341773367012056 500000000000000nip2-8.7.0/doc/html/figs/snap7.jpg0000644000175000017500000015702113341773367013536 00000000000000ÿØÿàJFIFÿá°ExifII*JR(i‡Züÿÿ)( üÿÿ)( 0210‘ 0100 ÿÿ È -ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀ-È"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?÷úBÀPdzo¯RÞ6v`ª£$“ÐPÖW½DowãZ·Å;É.tËxE¸8Y&‹ûàÖ²ÏÄq»Yÿß—ÿâé\xûjxQöÔþð¯ÿ…®zYÿߦÿâèÿ…®zYÿß–ÿâè¸õöÔþð£í©ýá^ ÿ \ÿ§?ûòßü]ð±µÏútÿ¿-ÿÅÑp=ëí©ýáGÛSû¼þ6·ÿNŸ÷å¿øº?ábëôéÿ~[ÿ‹¢à{×ÛSû¶§÷…x7ü,]oþ?ïËñtÂÅÖÿéÓþü·ÿEÀ÷Ÿ¶§÷…mOï ðoøXºßý:ß–ÿâèÿ…‹­ÿÓ§ýùoþ.‹ï?mOï >ÚŸÞàßð±u¿útÿ¿-ÿÅÑÿ [ÿ§Oûòßü]Þ~ÚŸÞ}µ?¼+Á¿ábëôéÿ~[ÿ‹£þ.·ÿNŸ÷å¿øº.¼ýµ?¼(ûjxWƒÂÅÖ¿éÓþü·ÿGü,]kþ?ïËñt\yûjxQöÔþð¯ÿ…‹­Ó§ýùoþ.øXº×ý:ß–ÿâè¸óöÔþð£í©ýá^ ÿ Zÿ§Oûòßü]ð±u¯[Oûòßü]Þ~ÚŸÞ}µ?¼+Á¿ábë^¶¿÷å¿øº?ábë^¶¿÷á¿øº.¼ýµ?¼(ûjxWƒÿÂÅÖ½mïÃñtÂÅÖ½mïÃñt\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿâèÿ…‹¬úÚÿ߆ÿâè¸ñöÔþð£í©ýá^ÿ Yõµÿ¿ ÿÅÑÿ Yõµÿ¿ ÿÅÑp=ãí©ýáGÛSû¼þ.³ëkÿ~ÿŽQÿ Yõµÿ¿ ÿÇ(¸ñöÔþð£í©ýá^ÿ Yõµÿ¿ ÿÇ(ÿ…‹¬úÚÿ߆ÿã”\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿã”ÂÅÖ}mïÃñÊ.¼}µ?¼(ûjxWƒÿÂÅÖ}mïÃñÊ?ábë¶¿÷á¿øåÞ>ÚŸÞ}µ?¼+ÁÿábëÞµÿ¿ ÿÇ)ábëÞµÿ¿ ÿÇ(¸ïöÔþð£í©ýá^ÿ Xþõ·ýøoþ9Gü,]cûÖß÷á¿øåÝþÚŸÞ}µ?¼+Â?ábëÞ¶ÿ¿ ÿÇ(ÿ…‹¬zÛþü7ÿ¢à{¿ÛSû¶§÷…xGü,]cûÖß÷á¿øåð±uï[߆ÿã”\wûjxQöÔþð¯ÿ…‹¬z×þü7ÿ£þ.±ëkÿ~ÿŽQp=ãí©ýáGÛSû¼þ.³ëkÿ~ÿŽQÿ Yõµÿ¿ ÿÇ(¸ñöÔþð£í©ýá^ÿ Yõµÿ¿ ÿÇ(ÿ…‹¬úÚÿ߆ÿã”\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿã”ÂÅÖ}mïÃñÊ.¼}µ?¼(ûjxWƒÿÂÅÖ}mïÃñÊ?ábë>¶¿÷á¿øº.¼}µ?¼(ûjxWƒÿÂÅÖ}mïÃñtÂÅÖ}mïÃñt\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿâèÿ…‹­zÚÿ߆ÿâè¸ñöÔþð£í©ýá^ÿ Zõµÿ¿ ÿÅÒÂÅÖ½mïÃñt\yûjxQöÔþð¯ÿ…‹­zÚÿß–ÿâèÿ…‹­zÚß–ÿâè¸óöÔþð£í©ýá^ ÿ Zÿ§Oûòßü]ð±u¯útÿ¿-ÿÅÑp=çí©ýáGÛSû¼þ.µÿNŸ÷å¿øº?ábë_ôéÿ~[ÿ‹¢à{ÏÛSû¶§÷…x7ü,]kþ?ïËñtÂÅÖÿéÓþü·ÿEÀ÷Ÿ¶§÷…mOï ðoøXºßý:ß–ÿâèÿ…‹­ÿÓ§ýùoþ.‹ï?mOï >ÚŸÞàßð±u¿útÿ¿-ÿÅÑÿ [ÿ§Oûòßü]Þ~ÚŸÞ}µ?¼+Á¿ábëôéÿ~[ÿ‹£þ.·ÿNŸ÷å¿øº.¼ýµ?¼(ûjxWƒÂÅÖÿéÓþü·ÿIÿ [ÿ§Oûòßü]Þ¾ÚŸÞ}µ?¼+Áábëôéÿ~[ÿ‹£þ6¹ÿNŸ÷å¿øº.½}µ?¼(ûjxW‚ÿÂÆ×?éÓþü·ÿGü,msÒÏþü·ÿEÀ÷¯¶§÷…(¼CÜW‚ÂÆ×=,ÿïËñtáñ#]^Ö÷åÿøº.¿,êÝêPÀ׌xâ|ò_GoªCÇ! &ˆ }Á'|ñ^±it%PA¦…€äQ@Ìp¦¸/^еÛÈ?ñÓ]ÝÉÄf¼ËÇŽ²¯Gý1ähÇ7Qº¡ÝFê‘—¬-$Ôoc´…âY$$)•Â/Lã'¿aïZÚ§„õ ?RžÎÙ†&Š:+,kŒ³)n:ð2I¬ {©­.c¸·‘£š6ÜŽ½T×Cáÿ*j³¾µw3Cqbö^qÌJqƒÉ:/3:=S•ìR;Ff¿Rö :þ𧯎)ú†«ésÁ 턱IpvÄWÞ}RFyé],:þ‡c­ø`E¨´öšd2Ç5ÇÙÝ9e |¸Ï_­f.µf|?¦Ú-ûAuª×Ä,ÞTg8p1ƒÉÎÜÑ×úïoËPþ¿…φõ«;»[K‹Iî‰XSÍC¼Ž£†ÀëßùCï>€©<ûu®ši6~+ÒŸOW}ÅdƃºLî`‘ªú§ˆì­î4Óc}myioz.šÞ 8Ûm#ÜðÄ‚i­lÊòøJïN𾣩j–²ÛÏEöu2)3a²>½ñX1X]Ïa5ôP¶…Ö90ùYº g<ý+§Õõm û]Z¤·7:­Äsˆ^ÙÐņÉÿ­Yþ Öì4»»¨uR~ÃpŠÇ [÷ˆÁ“€½%»¿õ¢þ½Aí¡B] U¯K'V²(.õ% ýÑÁù³ŸáÍ;Qðö³¤Ú%ÕþŸ,99*@>ø'Ž+£¾ñŤÖzeÌqî¾{¨çÔ)ð£$`çƒÇLT¶·¢Ç¦k‹a=ìúÄÉ!ŠH¸ »’~ñíÇ £úü¿àB-#ÁºÖtøµ›`²¹v]ÂTÜHF`8$»éX“éðÇÆÕÄW2˜í¾aºR8\î?\bº'ñ”ß`ÖEÏú 7”ü~è¯ÝÆî¾Õ_Y×4ýfóKÕ£¿{+ødXæAºÆªr² Æ1þÎúïªFfÏárÚòÚÒm=–âëp†?5 | žÆ®*-GAÕô™aŽþÆHZfÛYX1ôÈ$gñ®ÏO¿Ñoüi¢Kc$W‰yMÕÌÍIû¶Á*ßÅïY7:¦a§Úéê]R©ýªäù DèP×ðëÍ upïýw0õ/ë:D÷öB²¶Ä!•ÁoO”ž}©×^Öì¾Íö6T7M²Ü¥ºãh$Ä éõh–ÖVÉc<-Q.Ö {n1Øä[Þ©¦¯ é¾0ÄVúœ·¾tîÒÛ›VW…]HÎãÃc `v¡9ýSEÕ4SÔlÞßÌÎÂYX{©#>ÕŸººOjöw6ÙéúµÍ¿žf1A§o,ã'ø‰ÉÎcìù:L–Ùšd›Ã´ÉmºuÏ£çŒvâ’/h~¹×ìõm3Ú)óKüD€0¨¬|9¬êMp¶v-1¶Ç( Úèå† ÔþÔ4ÔÓ5/RºkHïãŒ$â#(RŒN ŽyÍiøkRðæ™Ùn ŽêÝâêk”Ëè‚c=ý©ÛRz´ß Üê¾¹¸´¶šMNß Â]P*…²äúÕ-'×zž°úl²Ee$LSpÀ$à¹Ë@?>kmõT²Õm.µY,–mXÞÄâÙܲ`c¯JÌ»ñ÷Ä(u“º+5¹‰·2’Ûq'·J#«Wþ´C{;Z³þÜØê7Ve÷˜&x·ã¶’3ŽÝ*¾ê³ª^E?ˆ// Û,/tò¦õ;]K’28>”jš·ö£ÄßÙÚu—–Å¿”?Þ俥^Êã{²ðð¾ºÚ`Ô—MÙ˜üÑ t9Lg;s»ö§K'HšÆ+™®ïÞTJ;ðó‘Àç5¹eâm&WE™îÈŠÛHû,çÊs‰1÷qŽyî8©<#©ZO7„´øåÝuk-Ñ™6‘´2±ãð5VÕÿ]Ééëc™½Ð5=*æÞ-RÜÙ,ìM#AêIRzuÇZ³©höš2ê¶´z…·Ÿöy¢*øÏÌ=êö£{¡Ã¤[è1j’ÝDú—Ú..>ÎÈ N„rIêxÏzgН4k«(¢Òu”kKl }=,äN¿yË·ºòi_B­gc—ÝFê‡u©ˆ›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Uí/O„®Ò»$ðvõcè+/ujiWkr[±ÆöÜ9ÆxóøP¼º™$ebBøáÖçÜþµsðØË.¡ö"B¸bº€óë[>d|á¤wi˜ÈœVd7Àj¯txI̞ÌÒaÑ#‰•ãº}™ 6Ù8Ç^ƒmdjsYÞ,L«'1çœ`ûÖ‰’Sk4 BD›ðÆCŸ˜“Óo¿­V¼½ß}nè7}·ýNAÇéC½´muszËÃú5²$WÌgºe,G˜T uÀàzšËÖt«kh÷N•žÕÈXçnz{Š¿?“ªB›¦Í¿ÞÉlc©éŒœŒsÐñjëWØÓͫȯ3íÜTc€AÎ;tåQÄT•D¯«ÝGŠÁÐ >T’Z>æêúÃwfkX‰9%E|纽ïÂ,M¤?îŠõÑóGÊŠ)°ýÁE0uþ¬×˜xóþAwŸõÉÿ‘¯OºÿVkÌxD_ïà”êÖ{DWQùNQ\Àü¬)à÷Töú{\i——Ë*„µ1‚¸ÉmäŽá@wT]Ok2Ím4Ê¿vHœ«ÜȨ)8 úÒÐË’I$’y$÷¤ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(C+–„“KçAQQ@ ˜  zqJ³”èò¨¨  w"P”'®Ö#?‘¨ÚRÄ’zÔtR²½ÇÌÚµôº½ûÂñéû¢¾¯ 0ÿ GþLÃÿÅÒŠ·áø[ü†õüÿŸõr꿈`ñ=ßÛ-5;™9 "lË{ÇÏ9ã·ÐõËø‚ÞK]vînÍÜi›ï1 ›“ÈÎ=Emÿ±ñ‡ý?òfþ.øV>0ÿ GþLÃÿÅЕ­ä6ïs’®¢k»Ko hbçL‚ð³\m2K"mùÇMŒ?Z—þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.˜°Ñ¶¥©IiÿÚÒÈÁœÊ“,~PÜ#.¬»žøïÖ²¯ä{Û?°Ékp«lòÁ#!ÛÎpÉÈ'½Cÿ ÇÆôÿɘøº_øV>0ÿ GþLÃÿÅÐÕÝÁhqu>²ºš·ö"ÚŸ³y¸Ø%Ú»<¿Cž¸íœ×œWq¨øƺ¦¡-äú2,’X%Ä@tÇj©ÿ ÇÆôÿɘøºIK•Öÿ±ñ‡ý?òfþ.øV>0ÿ GþLÃÿÅÓ’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*÷ÿǤ?îŠòßøV>0ÿ GþLÃÿÅשxCþ=!ÿtSB=¸(¢¸(¦.¿ÕšóÈ.óþ¹?ò5é÷_êÍy‡ŽÆtÛ±ë#@•bØÓ-qÿ<“ù ŸÌ>Õ‡©Hñø.åãfG]=вœ|¾ Õ$Ô/ôß [My¨X¬òˆÖû,œ®q°9go¦>”€éžácÛ½•w£'>”ÿ0ûWu«ÞkZF—2, y²°hÝc,¡°ÛN ‡šßÓïõ+¹u-.åí¡Ô-B¸†2c*à•m„ç#ŒÓ¶Ÿ×—ù‡_ë»G@“Ú©GÿWc·š?ô¬¿ IrÚ}â]]Ku$WÓÇæÊrHVÀöAÅjEÿ7õÔè CKERQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEɦŽÞ '•¶Ç—vÆpÉ5ZÛSµºŸÈŒÌ$Ú\,nÿë ÿЭUSÊO3ư²ÈÁ†é#åû§Ò€%¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ¤2J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠÏÕô‹[Û+Æ[y/$…‚HÑ®íÛp¿1ü+FÑ.ŸS/ªéÈmÄNM²A¸•ÇžÀó]V.ÿç•¿ýþoþ"Œ]ÿÏ+ûüßüEa<<'57º%Å0EoÅIkÑBø ã|#Ŭ_îŠëä–x|ÑGå¼É!%G® Šä|'Äýn†wÐ}ÁE}ÁE0uþ¬×x¤n8õ8¯EºÿVkÏ|H3qõqü躲ÿ}¯ýqOýTõ—üƒíëŠè"§ ¯ü~Çÿ\ßù­X5]ãö?úæÿÍjÁ Ÿ¥UnµiúUVëH ëßøø—þ¹Eüå®N×CšßÂÓ[âsy%£Äb{†d AàÛGá]ÄH¯¨ÎC".ÏñIJÓiɋԈ]b*2Twÿ>‡Ð×l4êMÊ.Û~Ш¢µG«i·RMc< 3,P¼RG‹pÝ·‘æ§¡¡ªW:²F‰{%«Ù¥±XÞ éŒä1qŽã•î>•éÃ(‰A¤m ”pOòÿì迾ï„ÿâj#„ª•®‡í"rÖÓÉ3]Cå8Ž|Ï”ôõ8ü+šµÐoLAöw¶i,¤‚W’Pèò1È1€NÕÎN0½GéßÙÑ}¿ï„ÿâhþ΋ûíÿ|'ÿS HÞÍÛ.ÇšækK¡›¤l°¢]²º>æ?) d`dõïOmêâÆ{X­~ÃÅÈ’5 ¹µP£,œH<ŽkÒ?³¢þûß ÿÄÑý÷ÛþøOþ&«ê•{¯Çúè%R+¡æWšMõÌi»M"Ah°D ™UbpÇ–ùáH7~3[ÆÚyu«y¥Pa··;Xƒ+:ðþ=]öl_ßoûá?øšbAÊð¼q±P6À2ÀÒ–£êº÷ê ¬WCж[¹5¹'¼°¸Â³Go&øÌq§÷±»v[œp=j®½¥Ý^^É$v²MºÜG Ç* ÷|ÀHÜ¿wŒ7CÇ5ègƒþxÇÿ|Š>Ïüñþù– ¢’’kOQºÉ¦ŽTÒä{ š5Äîñ;DÓ’§k«ªÇjô>•U4Ûɵ¼6¿gG»Y %Ô”Q.ヌ’G=«ÐþÏüñþù}žùãýò(X*‰[™_ðÂö±ìqšW0i1YÜÚ´/b-Å•„˜ÈÁ<}qX£LÔžÉ-Å”ÛéÓÚ‡ó¬¬ÁBíç#;{^›öx?çŒ÷È£ìðÏÿï‘M`ª&ÝÖ¾£ö«CÏ®ô©âwû$¯[ÀÙÝüÄf9ˆxªWVz‡Ùf»Ô%Û;¼ÇDWÙ36ÖÁÀ%Jç¶MzwÙàÿž1ÿß" ºÛÀ]mãf,AP9'õ4Ö¢ê…í#ØóÍ9dÕnì6Û`þÑrÊFÑÜ‚ ŸBi²h×ñ´2$SlŽ[‘å@aÜß*G˜ ãCÏÖ½û:ìÿËK!íöröj?³nÿç­—þþ*ªT¾´]O>¸Ò.­­åŠÞÆK¤›O[TÝ${á 7ÞɘtôéZ×VsȺPDÏ‘0i9(òØ~<‘]_ömßüõ²ÿÀcÿÅQý›wÿ=l¿ðÿñU/QîÐý¬O>þüm6Ò ¤£MšÞC¸pìh8ëÈ5%õ¦¡xöWBÒæ/*7‰áà/ómù†ü©Ôï³nÿç­—þþ*‘mÞÞxÒå-¤YIUhãÛ‚8 ç°4þ©R÷mÃÿËÚÄó-UH†[o/ÎiôÕ¶…XüÔ#pÆ27g#îç‘Ò¯¶tÚ¬†Uºh&š)ƒBÐ…B¡xmÄô?Zô³Áÿ~÷]Às]ÏÙàÿž1ÿß"³ÁÿÏüñþùfÏùƒÛ®Æ¿öx?çŒ÷È£ìðÏÿï‘Gölÿ˜=ºì`Q[ÿgƒþxÇÿ|Š>ÏüñþùfÏùƒÛ®Æ¿öx?çŒ÷È£ìðÏÿï‘Gölÿ˜=ºì`Q[ÿgƒþxÇÿ|Š>ÏüñþùfÏùƒÛ®Æ¿öx?çŒ÷È£ìðÏÿï‘Gölÿ˜=ºì`Q[ÿgƒþxÇÿ|Š>ÏüñþùfÏùƒÛ®Æ¿öx?çŒ÷È£ìðÏÿï‘Gölÿ˜=ºì`Q[ÿgƒþxÇÿ|Š>ÏüñþùfÏùƒÛ®Æ¼`€LQ€;í[í|±³þzy'gýõŒ~´fËùƒÛ®ÆU¼ €Œˆ£#ýÑKöx?çŒ÷È£û6ÌÝv0(­ÿ³Áÿ࢈>ࢺLÆ]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@Õ—üƒíëŠè"§¨,¿äkÿ\SÿA=5ãö?úæÿÍjÁªëÿ±ÿ×7þkV Dý*«u«OÒª·Z@Goÿ!)ÿë„_ú•—?„m®5&ÔQ¿[ƒ 2´)ù:˜­Kù Oÿ\"ÿФªRø³F†w†K™Dˆþ[/Ù¥8lãv˜’\Z×Sÿ 5[&©Nß¿³>²Ÿýõ)“ž´€£©kÑéSªÜØÞ}˜•V»ES8ù·uÇj­âË[ ˸ÊúXì›™âY" 2 ù·tç€k[ðµî¥{(ŽÂqq$oÅø–Ø.ܪ€¤cƒÜu5©u£\ÎÔ1£xŽsâo²cþË2E¸çwÚîǦÜqõ-ÿŠ­¬/.à{+éRÌ)¹ž(Ô¤A†A?6zsÀ5š|ÃAXÖöãûQq8su'“öŒîݳ8Æïj»>…{<^!ÜðÔàTŒ8Ví9ã¦}3Å/OëüÇ»&ÔÎbLFä =I#S\þºÒhñjÚ}µå„²ßÛª½«³‰„žXOݨS¿ LV½Ç„î¯`Ôay X¯"·eÜ – z8õ£¿õêJ¾—þ¶5#ñ,N— Ún¢—0fµ0ƒ)W8 ±uÏ<`ÖÝszv‘}¦ÚÜ=¦—¡Y^¶ÅSýŒ¹ù·| ôè9æºJc ©©Dz×x¿ô1VꦥÿÉÿ]âÿÐÅ (x¯X¿Ñ-~Ùow¥C¡Äw‹Î㉆‘ì~”ÝwÄ·Zvˆ’ZÙ«j’ÚµÏÙå'l*«¹™ñØt÷$qg^¶Ö/c’ÖÎ×JšÖXб½wÊ“NФ0Ǹ¬ÛŸ[Ë¡ýn®Ž ºx³‹©bY6© ¹TàŒ“Á¯zNö×øVºþ»5„ïu§ZÜ8剂ô€x«KH±:n‘id]œÃ¡f‘œ“ŽynqéíWjångb#{+…S¾ÿ]cÿ]Ïþ‹z¹Tï¿×Xÿ×sÿ¢Þ¤¢†­­Ûh뜲;É© c'’qß½eÂmgÿ>W÷Ô_ü]mjMŽª¨·°y›T†e#ñR Pÿ„CCÿŸ7ÿÀ™øªæ¨±^ãV;(Ë¡ûÔïåÿTÿ„ÚÏþ|®ÿ憎øº?á6³ÿŸ+¿ûê/þ.­ÿÂ!¡ÿÏ›ÿàL¿üUðˆhóæÿø/ÿQˊ‘¯>ùeø™Sþk?ùò»ÿ¾¢ÿâèÿ„ÚÏþ|®ÿ憎øº·ÿ†‡ÿ>oÿ2ÿñTÂ!¡ÿÏ›ÿàL¿üU¸®ëúù>ùeø™Sþk?ùò»ÿ¾¢ÿâèÿ„ÚÏþ|®ÿ憎øº·ÿ†‡ÿ>oÿ2ÿñTÂ!¡ÿÏ›ÿàL¿üU¸®ëúù>ùeø™Sþk?ùò»ÿ¾¢ÿâèÿ„ÚÏþ|®ÿ憎øº·ÿ†‡ÿ>oÿ2ÿñTÂ!¡ÿÏ›ÿàL¿üU¸®ëúù>ùeø™Sþk?ùò»ÿ¾¢ÿâèÿ„ÚÏþ|®ÿ憎øº·ÿ†‡ÿ>oÿ2ÿñTÂ!¡ÿÏ›ÿàL¿üU¸®ëúù>ùeø™Sþk?ùò»ÿ¾¢ÿâèÿ„ÚÏþ|®ÿ憎øº·ÿ†‡ÿ>oÿ2ÿñTÂ!¡ÿÏ›ÿàL¿üU¸®ëúù>ùeø™Sþk?ùò»ÿ¾¢ÿâèÿ„ÚÏþ|®ÿ憎øº·ÿ†‡ÿ>oÿ2ÿñTÂ!¡ÿÏ›ÿàL¿üU¸®ëúù>ùeø™Sþk?ùò»ÿ¾¢ÿâèÿ„ÚÏþ|®ÿ憎øº·ÿ†‡ÿ>oÿ2ÿñTÂ!¡ÿÏ›ÿàL¿üU¸®ëúù>ùeø™Sþk?ùò»ÿ¾¢ÿâèÿ„ÚÏþ|®ÿ憎øº·ÿ†‡ÿ>oÿ2ÿñTÂ!¡ÿÏ›ÿàL¿üU¸®ëúù>ùeø™Sþk?ùò»ÿ¾¢ÿâèÿ„ÚÏþ|®ÿ憎øº·ÿ†‡ÿ>oÿ2ÿñTÂ!¡ÿÏ›ÿàL¿üU¸®ëúù>ùeø™Sþk?ùò»ÿ¾¢ÿâèÿ„ÚÏþ|®ÿ憎øº·ÿ†‡ÿ>oÿ2ÿñTÂ!¡ÿÏ›ÿàL¿üU¸®ëúù>ùeø™Sþk?ùò»ÿ¾¢ÿâèÿ„ÚÏþ|®ÿ憎øº·ÿ†‡ÿ>oÿ2ÿñTÂ!¡ÿÏ›ÿàL¿üU¸®ëúù>ùeø™Sþk?ùò»ÿ¾¢ÿâèÿ„ÚÏþ|®ÿ憎øº·ÿ†‡ÿ>oÿ2ÿñTÂ!¡ÿÏ›ÿàL¿üU¸®ëúù>ùeø™Sþk?ùò»ÿ¾¢ÿâèÿ„ÚÏþ|®ÿ憎øº·ÿ†‡ÿ>oÿ2ÿñTÂ!¡ÿÏ›ÿàL¿üU¸®ëúù>ùeø™Sþk?ùò»ÿ¾¢ÿâèÿ„ÚÏþ|®ÿ憎øº·ÿ†‡ÿ>oÿ2ÿñTÂ!¡ÿÏ›ÿàL¿üU¸®ëúù>ùeø™Sþk?ùò»ÿ¾¢ÿâèÿ„ÚÏþ|®ÿ憎øº·ÿ†‡ÿ>oÿ2ÿñTÂ!¡ÿÏ›ÿàL¿üU¸®ëúù>ùeø™Sþk?ùò»ÿ¾¢ÿâèÿ„ÚÏþ|®ÿ憎øº·ÿ†‡ÿ>oÿ2ÿñTÂ!¡ÿÏ›ÿàL¿üU¸®ëúù>ùeø™Lø¦ÛQxlÒÖá ÒÆ„¹Lm,2žFEtFí ÿg tÇÞ_OLçô¬i<-§[…žÆÙ–æ'WBgç0XŽ@Å?ûIvççÝ»w6sé·8Ïá[ÒUýæþG-wIË÷)ÛÌšÎù¢…¢òºÇ,‘©qµ\€9>€ ±ý¢ßóé7æ¿ãOÓíÚM³Fžc;ÈFÆæ-Œûf­mOùçýò+C—ö‹ϤߚÿÚ-ÿ>“~kþ5wjÏ8ÿï‘FÔÿžqÿß"˜¿´[þ}&ü×ühþÑoùô›ó_ñ«»SþyÇÿ|Š6§üóþùKûE¿çÒoÍÆíÿŸI¿5ÿ»µ?çœ÷È£jÏ8ÿï‘@¿´[þ}&ü×ühþÑoùô›ó_ñ«»SþyÇÿ|Š6§üóþùKûE¿çÒoÍÆíÿŸI¿5ÿ»µ?çœ÷È£jÏ8ÿï‘@¿´[þ}&ü×ühþÑoùô›ó_ñ«»SþyÇÿ|Š6§üóþùKûE¿çÒoÍÆíÿŸI¿5ÿ»µ?çœ÷È£jÏ8ÿï‘@—w¦[+„6ò&bo™Šàp} sžû£ë]n¢ª4Ûœ"å7!G¥r^û£ë@ÜpQDpQ@ ºÿVkÏ|Eÿ1×EþuèW_êÍyãæ/úè¿Î€;«/ùÚÿ×ÿÐEOPYÈ>×þ¸§þ‚*zjÿÇìõÍÿšÕƒU×þ?cÿ®oüÖ¬‰úUVëVŸ¥Un´€ŽßþBSÿ׿ô)*tµ¨õWŒý¡ÏÊOf#Ô‡üMoÿ!)ÿë„_ú•JYÁ®¦˜Àœü¯6~TsÑO×ôÈõá¥wŽ"’ Äû“Ü#?Bj4ÄÿÇ…ÏçÿV¥ž(É!]ðØ8ãÿJ—ì–ßóïýð(?Í›þ|.¿8ÿøº<Ù¿çÂëóÿ‹­²[ϼ?÷À£ì–ßóïýð)ŸæÍÿ>_œü]lßóáuùÇÿÅÖ‡Ù-¿çÞûàQöKoù÷‡þøŸæÌ?åÂëóÿ‹©mc”Ë-Äɱœ*ªdgÇËžÕoì–ßóïýð*%QÄ‘/Ü ¬¦r1úSJ+YÁ®¦˜Àœü¯6~TsÑO×ôÈõãVQ¹áŒ’GÃ`ã¤ÿJ–Š_²[ϼ_÷À£ì¶ßóíýð((¥û%·üûÅÿ| >Émÿ>ñ߀¢¸€\Eå’WÀŽÄƒùŠ›ì¶ßóíýð(û%·üûÅÿ| ƒ7ÿóñmÿ€íÿÅÑ›ÿùø¶ÿÀvÿâéUDW2D¿p*°™ÈÇÓŠ–€!Íÿüü[à;ñtfÿþ~-¿ð¿øºšŠ‡7ÿóñmÿ€íÿÅÒ¦’d’âT/%FPF2rNx'ó©è Š( Š( Š( Š( ЉQfºtnDE!OBI=*›ì–ßóïýð((¥û-·üûEÿ| >Émÿ>ñ߀Š_²[ϼ_÷À£ì–ßóïýð((¥û%·üûÅÿ| >Émÿ>ñ߀Š_²[ϼ_÷À£ì–ßóïýð((¥û%·üûÅÿ| >Émÿ>ñ߀Š_²[ϼ_÷À£ì–ßóïýð((¥û%·üûÅÿ| >Émÿ>ñ߀Š_²[ϼ_÷À£ì–ßóïýð((¥û%·üûÅÿ| >Émÿ>ñ߀Š_²[ϼ_÷À£ì–ßóïýð((¥û%·üûÅÿ| >Émÿ>ñ߀Š_²[ϼ_÷À£ì–ßóïýð((¥û%·üûÅÿ| >Émÿ>ñ߀ û¿ÚþÕå;Ýþ{ûÕ²[ϼ_÷À£ì–ßóïýð((¥û%·üûÅÿ| >Émÿ>ñ߀Š_²[ϼ_÷À£ì–ßóïýð((¥û%·üûÅÿ| >Émÿ>ñ߀Š_²[ϼ_÷À£ì–ßóïýð((¥û%·üûÅÿ| >Émÿ>ñ߀Š_²[ϼ_÷À£ì–ßóïýð((¥û%·üûÅÿ| >Émÿ>ñ߀Š_²[ϼ_÷À£ì–ßóïýð(®£ÿ ÛŸúäßʹ }Ñõ®»Q·4Û–HcV6PJä|1÷GÖ€;¸>࢈>ࢀuþ¬×žø‹þ>bÿ®‹üëЮ¿ÕšóßÇÌ_õÑwV_òµÿ®)ÿ Šž ²ÿ}¯ýqOýTôÕÿØÿë›ÿ5««¯ü~Çÿ\ßù­X4ôª­Ö­?JªÝi¿ü„§ÿ®èRS_CÒ$‘¤}*ʼnff·BIõ'ëù Oÿ\"ÿФ¬;Ÿ_Á­,hÈ×ÂÆ>ÔFõ=îtÆIôÁ¦Jü\Zÿ×Cÿ 5gxŽUŠMtË¿Q‰Füü‡ ó Ï×#Ú¯ÈOÚ-3×Ì?úRjt:‹Z™šEû4ëp›eÎÈéÍ uꃣ9Öñ&±\Þ”±m:ßQûÄÄ»w„Üv3–b›¥jZ…ž½©\OÖ·WL"(Æ_”ð–ÀÛkaü9fö6fIü»‹¿µ¹ 2x|:eGøÒGáËXîo\]kÂí5›2˜X¸Ãcw?\Réçoòÿ‚|¯þð [?jŒ“¼ö©" ).U’ÎxV'QŒÒ 6}F:t«RëìF;¾š×:…ÄQÆD.5u'‘¿,F=E^·ðâAg=›jzŒÖ²ÀЦ‘XF¤cå;s=Iªúî‰5ÖŸ¤YY4Ê–·Q•UÑHÜ ã=;~Z_îüõ m÷þZômRòâöÿNÔRwfP™-òDpJ $#&´þ?äÿ®IüÚ«iz<WÚfžââáƒM=ÃwÀÀ Uƒÿ! ë’7¤GÐô‰$iJ±gbY™­Ð’}IÅY”ââÓþºŸý«œ¹ñUüÑÒÆŒp\,cíDoSѾçLdŸLè. Ùg¯šô[Ð̱I¤n†9wj1¨ßŸá¾a‚9úä{VSx“W®oJX¶o¨}¢â]»Ân »Ë1[š…”ZƒZ™YÇÙ§YÓa,3€xéÍR}Ñìnm “ùw_krd>ðØtÊŠŸõ·ü——õ¿ü?JÔïìlõÝFââ)¬-n®˜DQŒ¿)à-€=¶Ó,ü]©²NóÚ¤ˆ,ä¹VKIáXFB3H0ÙõéÒ´£Ðm£¹»qqrm®Ë´ÖlÊbbà qŒóõ¦Ûè)œöm©j[K@"–Ea‘”íÎ@õ&—O—è>¿2 uv #NßNkBx£Œˆ\$jêO#~XŒzŠÒѵKË‹Ûý;QHÝ™Bd·ÈIÁ €rAà‚2k7[Ò&ºÓô›+7™RÚæ"Ò£ªº"©ÔzZ©mâ™f6w2é™{(ŠÞçΉ9ÚY1ò†Çž£4ÖñUÊO4¥ìèo~Æ÷ã.p]Û6ôÉéÖÞ–gm.¦Òé–R‰mí¼¡Ÿ?0\ñÀè3RÉá­úeåŸÚñö›ï¶oòþïί·çîã>ý)«_úòÿ‚m?­ÿàÖs\̳›O³••˜zÇLúv«5ZΘVaswö‚Ò³!òÂlCÑxë^õfBÓçôÊ?æõÇk:õäî¯Õ¯mc´Ž6‚+{:±*IÜvsêºÕljõÆ/æõ‰q£ê#W¾¾°Õb¶‚0èö¾a]£ƒ¸ýÁ¤ÆŒùµy¯l.ZWaq&€gs Æa sª8΋>Õn×VR#0žO#CK’¾ÈØÿg{½ŸÂ‹o Aj \Èam<ÙWæå‹Ï®XñŠTðäž[‰oûi¿Ùå„8ã' Þ‡§ëM½íý|_æ„–×þ¾òd°xºH‚¶«§ 8ä³kÈž9üÐÈ å\6zýiºG"Õ/…¡ŠÕ^Hx¼›Ô›Œ¬˜!çÜuçŠuχb»[(眴VörZ:…Ápê œç»ïÖ£B»}2ãN½ÔÖ{imÌ RØG"‚1’Ù98ö>¶þ·ÿ€ ú_úÛþû/%ÃjË ±–ÎØÜÿ¢^,èê3‘¸†ã¡ë_G¿¼Ô,–æîÎ+Q"«Æ©?›•#<ü£ÛšÀ‡ÃW®šçP…ÚkdžM§”Or7ŸÊ·ìãû%½¶ýþLkìc8Î(Òßןüþ¿/ø&†ê7U_0Ñæ@ZÝFê«æ<Ã@·Qºªù†0ЭÔnª¾a£Ì4kuª¯˜hó ZÝFê«æ<Ã@·Qºªù†0ЭÔnª¾a£Ì4kuª¯˜hó ZÝFê«æ<Ã@·Qºªù†0ЭÔnª¾a£Ì4kuª¯˜hó ZÝFê«æ<Ã@·Qºªù†0ЭÔnª¾a£Ì4kuª¯˜hó ZÝFê«æ<Ã@·Qºªù†0Щé—_õÉ¿•qþû£ë]MóçO¸ôÉ¿•rÞû£ë@ÜpQDpQL]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@Õ—üƒíëŠè"§¨,¿äkÿ\SÿA=5ãö?úæÿÍjÁªëÿ±ÿ×7þkV Dý*«u«OÒª·Z@Goÿ!)ÿë„_ú•dÁg1¡•T¨}¿0¨Ï§«[ÿÈJúáþ…%]¦2ÿÇͧýu?úU¢j¤ç6õÔÿè·©‹RLÑš‹u¨\Ñš‹u¨\ÕùˆËÿ\cþoR¨AÎ¥7ýqÿBzy‚#:ÎcC*©Pû~`QŸN2æ™Q£`²FÛÔ‘‘ЂàMOE0)}ÿ>ÖÿøßüE&/çÚßÿ[ÿˆ«ÔP^ÿϵ¿þ·ÿF/çÚßÿ[ÿˆ«ÔP^ÿϵ¿þ·ÿF/¿çÚßÿ[ÿˆ«ÔPkX$G’iÊù²`ay £8ïÔœûÕš( Š( Š( Š( Š( Š( Š(  ³C0¸3Á±‹ FG;AÁ$€qÔö¨ñ}ÿ>ÖÿøßüE^¢€(â÷þ}­ÿð%¿øŠ1{ÿ>ÖÿøßüE^¢€(â÷þ}­ÿð%¿øŠ1{ÿ>ÖÿøßüE^¢€(â÷þ}­ÿð%¿øŠ1{ÿ>ÖÿøßüE^¢€(â÷þ}­ÿð%¿øŠ1{ÿ>ÖÿøßüE^¢€(â÷þ}­ÿð%¿øŠ1{ÿ>ÖÿøßüE^¢€(â÷þ}­ÿð%¿øŠ1{ÿ>ÖÿøßüE^¢€(â÷þ}­ÿð%¿øŠ1{ÿ>ÖÿøßüE^¢€(â÷þ}­ÿð%¿øŠ1{ÿ>ÖÿøßüE^¢€(â÷þ}­ÿð%¿øŠ1{ÿ>ÖÿøßüE^¢€(â÷þ}­ÿð%¿øŠ1{ÿ>ÖÿøßüE^¢€(â÷þ}­ÿð%¿øŠ1{ÿ>ÖÿøßüE^¢€(â÷þ}­ÿð%¿øŠ1{ÿ>ÖÿøßüE^¢€(â÷þ}­ÿð%¿øŠ1{ÿ>ÖÿøßüE^¢€(â÷þ}­ÿð%¿øŠ1{ÿ>ÖÿøßüE^¢€(â÷þ}­ÿð%¿øŠ1{ÿ>ÖÿøßüE^¢€(â÷þ}­ÿð%¿øŠ1{ÿ>ÖÿøßüE^¢€(â÷þ}­ÿð%¿øŠ1{ÿ>ÖÿøßüE^¢€(â÷þ}­ÿð%¿øŠ1{ÿ>ÖÿøßüE^¢€(â÷þ}­ÿð%¿øŠ1{ÿ>ÖÿøßüE^¢€(â÷þ}­ÿð%¿øŠ1{ÿ>ÖÿøßüE^¢€(â÷þ}­ÿð%¿øŠ1{ÿ>ÖÿøßüE^¢€(â÷þ}­ÿð%¿øŠ1{ÿ>ÖÿøßüE^¢€2îÅר®<È!Tò›%f,zÛó®sÃt}k®Ôäsÿ\›ùW#áº>´ÝÁ÷A÷˯õf¼÷Ä_ñóýt_ç^…uþ¬×žø‹þ>bÿ®‹ü躲ÿ}¯ýqOýTõ—üƒíëŠè"§ ¯ü~Çÿ\ßù­X5]ãö?úæÿÍjÁ Ÿ¥UnµiúUVëHíÿä%?ýp‹ÿB’®Õ+ù Oÿ\"ÿФ«´À­rqqgÿ]þ‹z{75ßúû/úìô[Ò1æßK¾¡Í dÛèßPæŒÐᩱœêS×ÿô'¦K Î¥7ýp‹ÿB’€)x‚úæÄiŸf“g2| îF'#š¢Þ*¹Iæ‘ô±ý ïØÞà\eÃn »fÞ™#½kjÚ_ö ²w•ök¨î~îíÛsòõÎzÕ <5¿L¼³û^>Ó}öÍþ_ÝùÕöã<ýÜgߥ5çýmÿRÛOëø]+[¾Ž-^êþ8ÛO´¹¸ýÿ›ó…C„ێ÷TV~:‚å¥W‚ß"Õî£÷‰1!J¾ÈØ>ã¯òü&Öã ž9Ô:ö›v4ÍÒÉØËowó„;ÂR7•ôü{õ©¿áûE¥ø¾¾y¯/Y®#ŒGå˜ùM«“Œy'5NÚÛ¿ùº_úܯ­\˧jÚ}õ—دO’xöMæ+¦$68ÈÇz.¼DÚ…§Jc´‘ ¢; ¯D26pŠAÜV“ÓN÷sjz‡Ú®'µ6ŠñÂ"Xã=p¹<“ÎsÚ©Ëá ¦÷z¤"W²[)žK=á‘s‚£xÚpyäƒK§õçÿ­.¿®ßðIµõüQVG=œº|s”–_/fç?0œœcŽ* ¼wi¤ð·6ér-YÚ‰·giaR ÷Î{â¯ÿÂ?såÕŽ¢°I ªZKæAæ NA0Úzúõ¢ÛA¹°¿–K=B5²–s;ÛÉj',÷ }Ž3OKùkùÿ‘:Ûîü¿ÌÞ< æ,|Wqp–W7ZX‚Âö_&Òà9 I ¹vŒdŽÄÕõñ¬Ž#z¨,v‚Útà~$¯±<9áûù´/ûJí–ÚÚC:Yo-Æ;w19 g8ÀíIn>…¸5ï²Û]yp\\ÜÉ©Ék2O»suáˆùN9ǽWÖ5y4ýcC»Õ!ÌÈ0Ã)—{mP¡x$ôïWßÂù·G|ÑÜý½ï ˜F–Íü%Iù† ¦sÚ–ïÃM«=›kQ]ù *º­¿–8cæ;HÆsÏáBÛúíþcëýw+j0m:Hm§µ´†õ óåŠâýbTRH ™ŽcÞ¦·ñ<ÚÍ”Zfž³-ŪÝ3K?—± mÆœ‘øSWÃ7ÐË Ì:À7‰Ùä–{Q –0I]˸|Ã?x}+J %âÖWR’à;ým™D{A!·ëÇÓõ¦¼ÿ­ÿà ÿ_‡üJúæßÄZ-¬Rm‚äÍæ®ÐwmLŽzŽ}*ŽŸâ«›³c%Æ– ´¿vŽ –ãyÜvŒgièMk^ékÕ´ëï;gØüÏ“nwï]½sÆ?¥oá¯#NÒ->×»û:ãÎÝåãÌáÆ1ž>ÿ¿J@ö3´ŸÞÚø=um^Ú%Œ•gùæbÛ@ ¨ ÛœšXüsYß¹¶·–{DÂZÞ,ѸvÚ>p8 õüêÌ^”hÒéj^eˆæØ,d„‡Ü¤¶HlaSO ß^é767º”24¥ ɧ—·kän9Î=©îÀ.u½RÚKS¤@××fLD/>ETç~ÎùéŠoü%!´õu°ê tlþÆ\ J9 ¿M¸ç>©ºýž¡sâì$04b}Ó´TL¨Àa‘×ê)G…¶éê¢ýÆ ·f÷ížXæSÁù:mÇÏNô¿¯Çü€¡®k^x{T¶žØÙßZI’5“xÚΤ2¶Aç°éWõ¿ õ#š;F„” þ˜«7Ìq‘0ZI<,÷6’]êKÛò…î ª›(2xõç'š‚÷Âr^mÔ¡Hï^9.ZnbÊ|­¸mhàçÓ[ ,Yê:›ø£V¶òâ–ˆy¶˜Œ… wsêEUÓ¼uk¨j6°,vâ¹8Y.ÕåAx‡*=Olâµq¹qm|©ou³í6ïíÅFß•²6äc±ªúvs   ~&ÓmÕŠAö=Óç ¶;|¹4—ŸõýÃò4uÉåµÐ5ˆ¤±[Hèñ H5™i®_Ák¤JÊ$[ÇX|èî à”ʱR1zžMRÏX†]5­u8Öé"ÒXM€AæeÀük3S±½µðÛiwϨ\²ªÙ=µ™S¦  9äàphÚÿ Þß2Ãx¦ê[´¶²ÒÒi%¹žŒ—>Z°‹›;N9$cÛ­,Þ1‚ßIûLÖâ¡tlÚÞi•%œÈx ŽsúU9´=BÒçÃvÖ3ä·Ž:èÀeMì ’Ã#ï÷xøP9cûsý¼]›ßµ˜Á̧ƒòtÛŽ1žèþ¿þ¿¯À·áý~-v’«Ëo/—'“8š3À «Œd`úõÉßx—Q·mZeÕnVk[ÇŠcb Œ“`ÛÔä—®ÂM!…_S‹ÌYÃÊÑZG¹‚Çïg5™'†5º¼:ÊEe3Ë,bÐq†Ëc ë¶Ž¿×—ü­¿¯2ž©¯j0Gâ&†ä/ÙÕ ÚªÁ7ýìqÎ}ó[~(¾¹Ó¼5wwi'—è>µk^ÿ‘®úòýJ«áŽƒëXQzÏ×ôGV%%vþ_ÕÜpQDpQ[œ£.¿ÕšóßÇÌ_õÑz×ú³^{â/øù‹þº/ó êËþAö¿õÅ?ôSÔ_òµÿ®)ÿ Šž€¿ñûýsæµ`ÕuÿØÿë›ÿ5«€"~•UºÕ§éU[­ #·ÿ”ÿõÂ/ý J»T­ÿä%?ýp‹ÿB’®Ó½ÜR8‰â¼O¼)8ÝÁR3ôcP%?òásùÇÿÅÕú(?|¿óáuùÇÿÅѾ_ùð¹üãÿâëBŠÏß/üø\þqÿñto—þ|.¿8ÿøºÐ¢€3Ä’ùpºüãÿâêkHåóe¸™<¶p¨©HQœgg,z{Uª(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(’׿äkƒþ¼ŸÿA’ªøc úÕ­{þF¸?ëÉÿô*¯†z~5ÏCyúþˆëÅ|4ÿÃú³»ƒî (ƒî + äuþ¬×žø‹þ>bÿ®‹üëЮ¿ÕšóßÇÌ_õÑwV_òµÿ®)ÿ Šž ²ÿ}¯ýqOýTôÕÿØÿë›ÿ5««¯ü~§ýsæµ`ÐOÒª¿Z´ý*³Ži¿ü„§ÿ®èRTÞ¥6š4ó Æßh½ŠÝ÷‚p­œ‘ƒÖ§ƒþBsÿ׿ô)* oM›Rx…£_³ÞÅpûÉUÎ@ÀëMn½Pû”'ñ¬J§NÔ^(î ¯œ‘©F—8Ú>lòxÉUë=v;Û{·ŽÊñn-l¶Žª%ÉŒ|ÛNAãšÎoݵ…ÄdäÕ…ð;Ž6 ±Óï`ozMK×·o­4SŸmx5,À0Œ Èø±Ž3Á¡mýyÁ¿×™v?Y}Šöâæ+‹F²`³C2 àœmÀRAÎF0j4ñ]¢ý¨]ÙÞÙ=¼K)Iã]̬v®Ð¬rIÅb7†šÇIÖ%¹:v˜’¼D-Ë4Q4d[*¼xïUc´¸ñ•æ¬^K"†ÖÒkbÒÂ]dgÁ,ïp:G_ë°º]ÎÇMÖbÔn&¶k[›K˜U]¡¹Pkg 0H#ƒßµAâVãIM=­ iÌ÷k Æ€e*Ç ’xMSÓ¡³ðÔRÜêvº&’$+ÉjûCžN e_Ëš[û‹oEnt=FÆâêÆá.Br§b¹# žqGTËrx„G{Ó/ÞæX„ͬy‰KmËøëèMI6»¶§Å•ä+4žTW,«å;ã ‘œ Tvš}÷öøÕ.þÎ¥¬„‘;6yn2ÿõVð÷öÌ7/Ÿ'—ö£zÎÿhdÉ!1·d½Ž:P·Wþµÿ {;Z™¬|Yh.Þ&³½Xçì­vc_(Iœ`á·c$ ãÕ«r=FîX­ìîÌ1»ÆnЍˆ²œ>mÝxéYÒøvíô‹ûA$eÆ¥ö´%ŽyŠø)tøoKÔPO*Ee#ß)aGÏŒqÜŠ‰ÓšÞIãfQŒ•Á'¡ n·¨ê6úž™a§5ª=á—sÜFÎ"îà+-Ac ]ÚÿÂ;ºH Ómž)pOÌJxädwÅ%îs­O£Ë¬Ea0¶óMÌJ£]¡‡8ã­SK —˜–ž)1Û]B5’æÚìZ(²…à àóÈ'Œi5•Яn­-åŠöÒXÒKk„×s(èAàç~½²µK{m•,o>Ó§‡ÏÝ †ŽLöŽdôô§Ïá½BþËV–êkhõ ãEsEˆåA$rs“Žý)_—ü5äÕçŽÉ.¨³3`Qu¹ùñ¡&³n`1Á$Vψc¶hâþο–é¢óžÚ$Fx“8Ë|Ûzç€I8â³›Ã×ÆÍ¤¶šÕ§]Uµ73lu=ˆô™©øjîÿQ‹T–ÇH»¸kq Ö÷EŒjA$26Ò{àäsGEýtÿ0ëýwÿ"ìþ.³O$ÛZ^Þ¬–¢ïu¼jvÇœdî`“Si¾&µÔ®àmnàûLFky'Œ™F2Wž„*+} Xu/´"ZÃöhµE÷p1÷yúûTv:ݯü#»¤€6Ùâ—üÄ Q·ŽFG|Sþ¿?øý~_ðEñ.¹q¥^i¶ðÜØZ¥ÓH{ÐJ&ÕteëÓ­¾#>l„ RâTó|í1ÊX÷mÉ-!îpMHúV¡{¢Þ_›3%§œn-ÛNåÂí}3š´šd‰âfÔTÆ-͘·>öí峌cúз±ž(³Ží¢6÷mn³‹w¼XÇ’²¤ç=HïDž(³Ží¢6÷mn³‹w¼XÇ’²¤ç=HÆ3Þ²íü"muydþÎÒ.íåº3ù÷ Dñ†9 |¤6C‘I„¾É«M)Ó´{»i.MÇÚ.‰ã w>R¡È¤º_úÛþ>¶þ¿­Àô5ÈÁâKµMÊŽãQKÈçi6ÅJÛÁÆà£¯­k'Št dX£ÖlZG;UDë’Onµ—oáÝRÂÏE{W³’ïO£¤®Â7Wô`¤ä`v  ßÚØË25¥ä«lª÷REe·gæç®9;sÅE}âë; îPÙÞÍ ¨FžâÕ’0à Ÿ›'@k>ó“K¬\ßÿgè÷ßkØÒ-àlÄáB‡iÊœt8«Wž¹žÅ [ ÔaHà &ÔÛóqÀúfŽ€·4´Ýr-Fî[Ckuiq,ž]ÊY 0Á#Zv­¬dÇæ½…åÄ*…ä–VÔœ°?5ZM2ù5™5f·ÝýŸöxÄ…±æ$÷ZÊ×|5¨ê× <‘i×m-˜„¥Ãº­¼œåãù[9Ï|4?/ëp^ÖÆÍ׈màš-í®¯¦š!8ŽÕ+èıõÍW³×.æñ¡§µŒï-IP n@Ç~[9Éì Bš.©§][]éÍg,¢Ê;Iâ¸fE;:2°÷<SÁ§j–šõÕÜ_c{kß-§ ì6UÚv¸`xêE7åýHZ‘YøŽ(ôm:Wû]ýÕÞÿ)#…Y6“’T 9Ï¥Nþ)³]6+Ä·º•¤¸û/ÙÕ•eçå ãÖ¨ZøwRÓ¬ô™md´{ë–'I„r#œŸ˜ ‚0;zÓãðÝàŠÚIf®Ž¨5 ¹8#jq“ޏÏ4uþ»ÿú]¿ÌÙÒµhuXæ)ðKž\°Î¡]ó‚GBA¬±â9ω¾Èaû,Èmãßh »›qÇÔUÛ=:êÎÿYºS Éác óqÇ#¶x¬Sà– Æ··Ú‹‰Ã›©<Ÿ´gví™Æ7{Rëëúÿ€ ¾ ¿×4Ò¯e6žâyRky-œ»9õa êsŽ®…7ùkæm/»oLûV\ÚuÍÖ»§_Lbòm`“ä Ió›#Ž€n÷éZÔt¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(’׿äkƒþ¼ŸÿA’ªøg§ãVµïùàÿ¯'ÿÐdª¾éø×= çëú#¯ðÓÿêÎî¸(¢¸(®ƒe×ú³^{â/øù‹þº/ó¯BºÿVkÏ|Eÿ1×EþtÝYÈ>×þ¸§þ‚*z‚ËþAö¿õÅ?ôU Ö¬n5i´ÈåÍÌK’1Á=À=Èã?_®.3ys¤»Y”)S´dŒãœ~ã{¤ß÷åÿšÀÉ2E¸ª•,ÅzœcÖžl¡õ›þÿ?øÐm{'ÿÀy?øš®¡þíÇþIÿÄÔíegÿÀ‰?øª­aþõÇþÉÿÅR´W{™®•c@Ã…,sŽß{ô«•ÃøÝ4lÎΩq£1É–A‚{ò§ó®˜íExMîÔW„ןüMÿ˜_ýµÿÙ(ëj+àš(ïj+æOøkM²Ñ&“Ä1»7ê¤1d0!ÈçV9É+“Ó¡ZårIìÇsH yuëøü=Õ¤¿fº“fB0`­&ÑÛiߎœÓt-]®µ{۪ŪCQÊ—)³#q ©Ùòö§zÑ·ðèÒ§¾“H–8®QÁö}É‹œ¸‡QŽ:g4iºGö|—\5ÍåÁlÌ¡FEU2x÷§ý_˜_×äeø²Æ]BLŠÃÉl¹ c÷Ãú×!ÿÝçüôƒþú?á]·ˆµ=?J>¥r-áa  œ·ïŽ8ö³!»³½¶Y¬§óÔ¾Ó…Æß®y¿1I5µÆã;s[Nç;ÿÍî2$€ÿÀøT ¢Ë‘§¹¶#g•ÈP:uÅnëzÔZ‚\ÍÊeE!.A#$ô/¿Ò¸KÅš¥ï˜`†+D+À|ŠG¡éÏOþ½Q[„c)l8´é§¬r@ê­µfVUã<àçô¯4ø›ÿ0¿ûkÿ²W«ÛxcNÔ"‚òîæëP(erª9P0W8gë“^Qñ7þaö×ÿd¤¤›Ð©Ó”-sÏë¢ð¾ˆo¤{ûˆRK8Fc}ÃÍv…#Œ¨ù¹8éAÅcXXÜjW‘ÚZ iŸ8€’r}&½5ï4í;NµÓãi­`´ŒlŽéi™¹gܼÇ;º7µVHÕlt¯â _³ÈP´S€Di2ÇŽ1Ÿz ¶ƒO‰˜#$1î¢ò8ÉeÇ ž¼s\ž¡x’Ú……·äz ‡JYîoÒ;‰cŽo•ö>>\ûtÍwÒÇÆ’“©«f”ëæ^Ísrò¾žgO¨ü#mwöúÕÊ Fï7|ÅÑ÷r“È#Œžy-׊ñûë ­6äÛÞBÑJ8$ƒÜÁ¯¢à½–Û{ýžE*Ê‚xççšÇÖ4 ]FØÅsÏjÌ[œƒÛ8åOZù¸æWjñÓúØõ¾¥¦Œð:÷ïȳ¥ל?ú¯)ñ‚ï4€óÛn¹´PYŽèÆ{ŽãǾ@¯Vð÷ü‹:WýyÃÿ  ô©ÔEÍsŠp”¤iQEd…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Z'ü„ýs—ÿEµoxg§ãX:'ü„ýs—ÿEµoxg§ã\ô7Ÿ¯è޼WÃOü?«;¨>࢈>ࢺA—_êÍyãæ/úè¿Î½ ëýY¯=ñü|Åÿ]ùÐueÿ û_úâŸú¦G§YŨK·S(Wu ‘ùJ}—üƒíëŠè"§ ¯ü~Çÿ\ßù­X5]ãö?úæÿÍjÁ Ÿ¥UnµiúUVëH8ø¿t,ü4ò+ºÌe¶Xv¨ ±ó³œ‘·qs=Íy÷†da‘¹qÈh`;Ž+‚ø›ÿ0¿ûkÿ²W[yyö¶¿Ùûe3F²…>`O$žOÊOnÃð‡UD:Þ•¨k §˜ðÆîy~B§h²® ?‡c^Œ“qå©oy;ßñùØã©7íç.h«[úC¼ á&Ð4v½¾…×P»÷È»Zòp ŽCŽ;2§=Oön—ªZ¾Ÿ: |nUl ç¡×9Ï׿5ZÆòãV³3ù¦X\ÿ oUÁ9Ûƒþ÷?Z»mj‹l²6Â@;Açÿ.?È£EC——f·' U»ótgqðüÉesm{´B»ü¸“¼a±üKê{}«+O´]>U7³ÏæµÅQû­-V„©Ô³š´‹ZuüîÞEìJ²ì‘Nb}T÷ê?>ܳnAz®2ï‘é\ÿ’,l<Ç”Mb'p •>hú䃑ÎpqÐà㑚µ¤mK ‰UíKí†è6á·¨{0dœzŸSâÕ£(»£±èùCÄ7VZV‡6¡$‰±Ë ¸ Î~ê\‘Øp'€MM£Ü5Þ‰aráCËmŒ %Aâ¼›Ç>$:ÞªÖÖÎÂÆÝˆU Èã È1ÛOñ“^©áïùt¯úó‡ÿ@ëà¨{8sKvyXš¼ò²ÙTQEvœÁEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP–‰ÿ!ÿ\åÿÑm[Þþµƒ¢È@×9ô[V÷†­sÐÞ~¿¢:ñ_ ?ðþ¬î û‚Š û‚Šè9]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@Õ—üƒíëŠè"§¨,¿äkÿ\SÿA=5ãö?úæÿÍjÁªëÿ±ÿ×7þkV Dý*«u«OÒª·Z@qž=ÕŽ ´æ35¼“Á Ìm–&[ÊÀ‚ ã¨ÁéëÍyŽ‘ ø*ú-@øÅ¹ÃGo ¬·K)(áI ÔsÎjôÿcìy*óB0êr' y·öNŸ‰‡Ø >s«¹(3‘œ`ÿSÀÀ¡6›e;4‘ÑKñóRÓÑ´kA Nv‰ä!ÏLÀ”ƒÛ¾ ywB¾´°W¼iË9‚F—†ßÉüz¼çéZÖñ¥ª²À ¤ÔŸééW¦Õ/nl"±žo6Ö3X¤PÊv}Ðr>`1Ðç=ó]X\G±jm{Éÿ_yÏZ—?ºž‡¦­Âß,öðO(·l¾L{ÊÆ>óA‚y8¬ß‰2ɺD±HÑÈ+#¡ÁR6AìkÔ£ñ¥‰±íÒÌ«!·[H„e[9vã'?Zò¯‰¿ó ÿ¶¿û%V7õª¾ÑÆÚXT(*J׸ž ñôZcOk­‡–;‰LßkÛæ8‘°¾NHÀÎF[ ðIãÖƒ%Í¢O¦ÍDT²O‰"6ÒmÎCçWÌÕÐxWÅú…/ÖkR²Ûûëi0UÔã88;OÊ9ƒ9W¢ú1kf{³“NAme܉ä Üàv·¶>À¨ÛL¹IÚAmåÅ4Çx‡æ1ÜP:g·¥Yð—ŒtoÚ7“ ŽôF Ť¹Ýç¨oâ\ž£ýœ€HÒùkåÉAÔŽßZ<¼ï©—·’—*èyÞ¥ðIîíEÃGŒ¼r¦3Ãc¾yŽ}kˆñ׊ ¸¶X4ù™g¼mòp‘·ñ<÷Î2:^¡âÍvÏÃzD·³nfêâVÚ]Éù@ÏAœž9ÀcƒŠùÂêê{Û¹n®d2O+w=ɬé/u¦·ýÙâ/R÷ïȳ¥ל?ú¯¯~ð÷ü‹:WýyÃÿ  Øå4¨¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠÐÑüL×þ¹Kÿ¢Úº ZçôOù /ýr—ÿEµtþ´¬6ÛÜî û‚Š û‚Šbuþ¬×žø‹þ>bÿ®‹üëЮ¿ÕšóßÇÌ_õÑwV_òµÿ®)ÿ Šž ²ÿ}¯ýqOýTôÕÿØÿë›ÿ5««¯ü~Çÿ\ßù­X4ôª­Ö­?JªÝiÈøáí0£'tûZ¸O"Oîþµë¿ññ/ýr‹ùËXVº¸>ƒRº\4ˆ¤¤Kœ±8G¹"¸ëbÝ)r¨ßn½ÍcO™^ç äIýßÖ"Oîþµ×ßë3Km YÅs Ã]‹ycÛšŸ!n7œ€9É5oNÔng¾¹´–ÚR°2¯žvàV!°ß{$ýÑŠÏëÒJü¿ü½’½®p¾DŸÝýkñׇu]gì`µó¼¯3ïq¸êG¡¯iMa’óQKˆm­›…ÆÕˆ?6ây=¥X±Õ#½™¡6óŲ̂$ :€YOF'üE'’Wäüà±]Ï—¿áñ7ý?ò<üUð€ø›þŸù?þ*¾‰Ä7-~bó¬e?lk² "`¡±¿ïƒ“À«É­$k°%ÕÜí4ʱ¢ `°{´p2NOO%ö?øì—s渼â¨&I¡°xåƒ#¥Ìa”ŽA7½;AÕüWq V ±d˜µìSD7 Šsê2¾ÙMw‡Ä[o Ç“s%ƒYGqò*þèl³sž€tÏJгԦ¹Õ/-M³a*λvࢶ[9ç°Å)c¥fœ?øö)½Ïñ¶‹âoëŽ`³’[ [c$уƒÇ–Î g¶85ÍÂâoúäxÿøªú“S¸¸µÓæšÖ–TR@vÚ£9?áT¯uy­ô8nb$¼šéÎÜíÜÄ÷Ú?Àw©Ž=µ¤?ø{ msæø@|Mÿ@Ïüÿ^¿£[Ëi¡éöÓ®Éb¶Ž7\ƒ† õØ\ë7ªŽöÑÛ•¶´K©Ãƒ—Ý“µpxáO'=©Òëw>t³Ä›&Žæ1}¿09Àxã<ô«úì¿“ñÿ€O²V½ÎjŠë_^ˆý¦(-æ’WoLóü\cÍWÒõKÍR;…‚æÊB‹%Äq1ŒÉ(WvrÇ^”¾½+]Ãñÿ€?b¯kœÕÔY]ê·zcÜ ¬W÷­åÊÑ0SãvÝÝÈõéÍXµÔn&ð÷öƒ[ƒ?’Ò“8r3ŒwÁÆGÖ‡kìþ?ðQ¿S¢º]/ÄΓÉyybmÐ!1Ÿ-70'aÜO#¿~‚•5Ã¥|“Ç4–©4j“¢©Ž0ȸÉÎzž¸=iývwk“ñÿæ/d­{œÍÓG¬Î/á‚(f»Ià6×c…ã,Ñ“îx­Y/#Šö+VVó$ä0¸Ïþ„*^`רüà QO©ÂQ]Kø–ÙbIVÖíâ6ërŠ6Î |ÙìzfŸu­&Ëô†;¶±±’åBwœ“‚;cޟקüŸüö+¹ÉÑ]lšìËåù3*4qË2*íF|`‘ÏÌ:ŒÓ¢×`–ð@mî#F•áIÜ.ÆtÎ@ÁÈèzÒ—×åkò~?ðØ®ç!Eu±x†ÎEgxç†/%§Id@X׫. =ÇÍ6ÃSž÷Zš&‚{xVÙc™TK7ÍÁ=€ëùSúôµ¼?øìWs”¢º•ÖÖ°Cwy#Ë8Q`ÿîiÐkMs©,PÛ¼¶më*í7å²Àãtõ£ëÒß“ñÿ€Åw9J+­‡Ä6rwŽxbòZt–Tdz²à“ÜuóH¾ €,Æk[¸5G "®çJ®ÐòHÆ(úôÿ“ñÿ€Åw9:+®:ôB ~ÉtgóþÎmð»ÃíÝýí¸Ç9Íi#Á¹É äÁÇ|åRó·‡ãÿj‚}O?¢ºÝQ¸¾’ò+,´2ÄÑ‘žQ‰#ëÞ¡Óµ¶iž ¸§ù®å†;‚«å’¶¯=9SÇKUÉ·Ÿü{½ÎbŠëe×âƒÎYìîã–0¤FÁ3 fÚ á±×ÔŠ_íè<’MµÈ¸yfÚ¾fünÇ]¿wœç¾¿/äüà±]ÎFŠèôýyÜyrÛÜËq,óm‰BDWÇ9`8ÈèI­«»¨ì¬æº›>\H]°2p(–>Qvpü࢟S‚¢º;ívh¤²PÖúrN²÷à»·ÚàsŸ^Ôèu›ÛÈ,b·†»¹9yÕãxFG^µ_]•¯ÉøÿÀò²]ÎjŠèïõkË,àšûLå—žT"<®0.0yõ5§¤^¾£¥Áu"*4€ð¹ÁÁ##=Ž2>´¥j<ܺzÿÀ¢¯kœMètVÚÝüàêþgžQ^‡EÚÝüàÕüÏ<¢½Š?´ÿ»øÿÀ«ùžyEziÿwñÿ€Wó<òŠô:(þÓþïãÿ>¯æyåètQý§ýßÇþ}_ÌóÊ+Ðè£ûOû¿üú¿™ç”W¡ÑGöŸ÷øõ3Ï(¯C¢í?îþ?ðêþgžQ^‡EÚÝüàÕüÏ<¢½Š?´ÿ»øÿÀ«ùžyEziÿwñÿ€Wó<òŠô:(þÓþïãÿ>¯æyåètQý§ýßÇþ}_ÌóÊ+Ðè£ûOû¿üú¿™ç”W¡ÑGöŸ÷øõ3Ï(¯C¢í?îþ?ðêþg¢ÈQ딿ú-« ð×õ5¤ßê¥ÿ®Oÿ šÍð×õ5Û†¯í¢åkT‡#±ÝA÷A÷Ð@˯õf¼÷Ä_ñóýt_ç^…uþ¬×žø‹þ>bÿ®‹ü躲ÿ}¯ýqOýTõ—üƒíëŠè"§ ¯ü~Çÿ\ßù­X5]ãö?úæÿÍjÁ Ÿ¥UnµiúUVëH HÒ]J¨¥•g¼µÌ¯…¯ßI]2æâ9m‘W`DT‚ ËGŒs]¿ü„§ÿ®èRU)üMgºšcsò¼ÙùQÏE?_Ó#׎j˜^yó^ßð #RÊÖ0íü7, l<¨chn<óök?)_ä+ŒdóÏZ³‘{oª\\Æíä\òB`$î !³ÀàqŠê%žÉ!d|68ÚOô©¾Émÿ>ñß²x÷—äWµò8©¼=s4÷À»‹KÕýì^IÜh\«gŽƒŒ’ÇF½‚í®®å{‰¼¡ •€ÆAÏLœ’zŸn•Øý–Ûþ}áÿ¾e¶ÿŸxïGÔU­Íø öÞG<72…tg[„»{”—É<bYÏ ‚GëU.ô=NÉãŸO†â[ó’D*T,»3¯CŽAíÒ½ ì¶ßóïýð(û-·üûÃÿ| ko´×Èàm|/tºcA+:É.ž–mˆ‰ @l·¿ÞéíS>‹ªÚ›Ùl% Ιðr$ÙÀ‚ vÍohŠY T ’P ohê`”Œ‚Eww/Á«n‡75…Äör@É&^2…¶ãÅP¸ðÊÝXÅ ‹r%ŠÜÀ²ÆÒ'rŒŽÁ®×ì¶ßóïýð(û-¯üûÃÿ| •—¥´˜ý»ìpsxVá¢A<Ñ$–ëmqº"æDèIÊžHÏ=}ªI|5;ܾǑ,å–9¥ƒÉÉfLc žʹ=;We,I°˜” v(Ê£ü¤ç…KUõ/ï~Dû^–8Y<-ékNÛ|¢3æ°o^ØÇ¿µEiá»Ë'·1LÅÝ-æV·'ÌU'sòŸ˜ú×qE/¨ÿ{ðAí¼?ƒÁÿd²¹·û4RFð4Hb³ÎAõ|àŸÀ{ÔøwUÕÙÕatßQźÎQ‹e”3)>¼óÀ¯G¨/eh,g™>òFXgØU}S«½§‘È[ønXØyPÆÐÜyçìÖ~R¿ÈWÉçžµrÞÏTû«6ápÏ!FòòK¼ gѦ• "´“\³‘Éó™sø/öE·÷îð!ÿÆ¡à·ÕklŽ^ÇH¼·¹žêéÚ{‰‚©)B®pÉõ=ê¢øjð͉n­VáîR$·*ÁØ’2Ù9žÀv®Ïû"Ûû÷?øÿãGöE·÷îð!ÿÆŸÔu¿7àƒÛy ¿‚çƒ9tÎØ×tv…¶H.wÌqŒñWçðåËÜËu ’GpnxØÂX!„ ŒòϧZëÿ²-¿¿sÿþ5Öibhd›ýb#+ÈXÌ¿×?…7ƒmÝËòj»\¾½šËìï2Ò¼¯'ØÎåflæ3»ä#ך҂ÇSk cœ;3íf‹rª–;AãÖQIàSVrü*Öw±ÂYøRKyÒIxƒÍÌ)nR<8Q…\£åéÏSO_ ÞE ¯‘q*ÜZnXehK,ÿ ó€9+¸¢›Á_y~=¯‘Á'†5¤ŽxîWí ò»³Ù–Fó1œ.ñŒmõ5¥¦ié¶BÜ,’ììÞ^ÐKNè9é]]¥æVrü*¶ÖÆÙçÿž2ß&³Ïÿbÿ®‹üëЮ¿ÕšóßÇÌ_õÑwV_òµÿ®)ÿ Šž ²ÿ}¯ýqOýTôÕÿØÿë›ÿ5««¯ü~Çÿ\ßù­X4ôª­Ö­?JªÝi¿ü„§ÿ®èRS_CÒ$‘¤}*ʼnff·BIõ'ëù Oÿ\"ÿФ¬;Ÿ_Á­,hÈ×ÂÆ>ÔFõ=îtÆIôÁ¦G)Åŧýu?úU¢Â©\'²Ï_4ÿè·§³óH ;‡­‡­UßFúµ¸zÒ3á Q¸ÀõªÛé‰R2FGQÚ†3—\»Õ|=¬­ì֑ζR²H&€í<6ãóp¨cÕu=;F;+ˆ.4‰%‡ÊG\lA•|±ÎCA¨¾€½Ä—7×·RÍlÖ¾dΙHÛ¨]ªâsR\h6—1Û£É8ZÉh»XrŽ¡ID¬›õÏÌWŒö¬”º‹Y¹Ðô» ýJ £¸šfk‡[‚Ѱ_-œ’à Ç<ö«¨Ô4É5¡òõ;냭« ÝœuÜ­T cgom=ݬ¶ŽïÔR;sçy%vyȤ‹á»›*â©Þy,ï&µ?Þ‘QˆROsŒ}«~©éZ]¶§ÇgjËRX´¹‰Ë3ä’M\ª`SRÿEÿ®ðÿèÅ«uOR?è¨;™âÇýüZ@fx‹U›HÓEÄ1«á 8%P`òqôÇÔŠä¿á9¿ÿžö?÷äÿñÊô:\ŸZç«J¤åxÎÇ] ôiÆÓ§ÌûÜó¿øNoÿç½ýù?ürøNoÿç½ýù?ür½'ÖŒŸZÏêõ¿ççáÿÛëxùò¾ÿøÿÂsÿ=ìïÉÿã”Âsÿ=ìïÉÿã•è™>´dúÑõzßóóðÿ‚[ÃÿÏ•÷ÿÀ<ïþ›ÿùïcÿ~Oÿ£þ›ÿùïcÿ~Oÿ¯DÉõ£'Ö«ÖÿŸŸ‡üúÞþ|¯¿þçðœßÿÏ{ûòøåðœßÿÏ{ûòøåz&O­>´}^·üüü?à‡Öðÿóå}ÿð;ÿ„æÿþ{Øÿß“ÿÇ(ÿ„æÿþ{Øÿß“ÿÇ+Ñ2}hÉõ£êõ¿ççáÿ>·‡ÿŸ+ïÿ€yßü'7ÿóÞÇþüŸþ9Gü'7ÿóÞÇþüŸþ9^‰“ëFO­W­ÿ??ø!õ¼?üù_üÎÿá9¿ÿžö?÷äÿñÊ?á9¿ÿžö?÷äÿñÊôLŸZ2}hú½oùùøÁ­áÿçÊûÿàwÿ Íÿü÷±ÿ¿'ÿŽQÿ Íÿü÷±ÿ¿'ÿŽW¢dúÑ“ëGÕëÏÏÃþ}oÿ>Wßÿó¿øNoÿç½ýù?ürøNoÿç½ýù?ür½'ÖŒŸZ>¯[þ~~ðCëxùò¾ÿøÿÂsÿ=ìïÉÿã”Âsÿ=ìïÉÿã•è™>´dúÑõzßóóðÿ‚[ÃÿÏ•÷ÿÀ<ïþ›ÿùïcÿ~Oÿ£þ›óÇŸcÿ~Oÿ¯DÉõ¤9#4}^·üüü?à‡Öðÿóå}ÿð «K¶‹I°Úè3gvßîV_ëC½Ãk}˜¯ü{Ç»([øŸÐŠ­)ŸIÙ—0à$L™ÉÇE>ÿδtûY!/q1ÄÒ¨R ðª2@úòk¬óÆçRõOûðøª3©z§ýø?üUhdúÑ“ëLF~u/Tÿ¿ÿŠ£:—ª߃ÿÅV†O­>´ŸKÕ?ïÁÿâ¨Î¥êŸ÷àÿñU¡“ëFO­gçRõOûðøª3©z§ýø?üUhdúÑ“ë@ùÔ½Sþüþ*Œê^©ÿ~ÿZ>´dúÐ~u/Tÿ¿ÿŠ£:—ª߃ÿÅV†O­>´ŸKÕ?ïÁÿâ¨Î¥êŸ÷àÿñU¡“ëFO­dݛ߱ÜyÅ|¿)³ˆˆì{æ¹ï u?ïëu³nyÿ–Mü«’ð×Sþñ ê¸(¢¸( ]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@Õ—üƒíëŠè"§¨,¿äkÿ\SÿA=5ãö?úæÿÍjÁªëÿ±ÿ×7þkV Dý*«u«OÒª·Z@Goÿ!)ÿë„_ú•dÁg1¡•T¨}¿0¨Ï§«[ÿÈJúáþ…%aÝx‡S‹Ä!#Ó/MŒùo‹I sÝÁÇAéÜgÚ˜Ôk$@´†2¹\v=?¤~5[gþZÆíÊOþ*­ÉÌöñ“§üô§^ê0Xa9`n&X#Ú3óã?•QÅßüõÿ¤ÿâ¨Åßüõÿ¤ÿâ«_4f»ÿž±ÿàŸüU»ÿž±ÿàŸüUkæŒÐF.ÿç¬ø'ÿF.ÿç¬ø'ÿW/µ(4ö¶nÍÌë{F~cœgÛƒVóL Œ]ÿÏXÿð Oþ*Œ^ÏXÿð Oþ*µóFi™o=È’yƒ¼cäEˆÆ{à’IíWi·Xóm0®}¶±þ‚LŠ( ŠcKH‘´Šó±Iå±×½>€ (¢€ (¢€ (¦¤‰*ÕÐôe9€EÉ%Ž̒Ȩƒ«1À>Š( Š( €À‚2Pih  âÊ0­:Ð-Ä€  Åc‹þz\ÿàLŸüUX¢€+ýŽ/ùésÿ2ñT}Ž/ùésÿ2ñUbНö8¿ç¥ÏþÉÿÅS’Ò$pÿ¼f^žd®ø÷‰æ¦¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ fŠ( Š( Š( Š( Š( Š( Š( Š(  Úüƒnë“*ä¼5Ôÿ¼k­Ôäsÿ\›ùW%á®§ýã@ÔpQDpQ@ ºÿVkÏ|Eÿ1×EþuèW_êÍyãæ/úè¿Î€;«/ùÚÿ×ÿÐEOPYÈ>×þ¸§þ‚*zjÿÇìõÍÿšÕƒU×þ?cÿ®oüÖ¬‰úUVëVŸ¥Un´€ŽßþBSÿ׿ô)*íR·ÿ”ÿõÂ/ý Jçî¢ñGü$"ÒùEœ§ÌYÄ1;©ù~ðè=r­0:yN.m?ë©ÿаüf‰<:DO3­©D ‘¾Æ^¡í[7lö\ç÷§ŸûfôËËkkèL7vðÜEœì™®~†—T3ŸT»Óìµë{-Ji­m¥·Hîä“Íh7$Îs´óœfµtB¶¾+¼²ƒQ¹»¶QKûû–›Y ’qiIezcÙØ%½¢•Â1ŒõÊ XÖ¹Ó{‹+Û(næÚŒc° A“€Šã’NI$Ó[ÿ]„Ö†‡Š¯%†>º{K{›µ†ââ6ÚÈ„€ßÒϽQ¿Ù¡¤é+ªÝŧÍç3Ïö¶2Hë‚©æ“‘Ôœgµi[ÚÞɱj×6—Ð8Ç–¶›ã—lÔ¿ÙzoؾÅýŸiöLîò<•ÙŸ]¸Å 9q{$ÖºzÍt×[kâ.dl™#à–ï‚HÏ|Snõ ±jZ©Õ®cÕ-¯šlÄÄG€áV3Fܼçç"ºö´´{UµkXÝq¶#(1Ó¦µ‹Þ­ãÙÛµÒ𳘔¸ú63M?ëîÿ/ÄõøÿŸàsúŽ«4Åñµì‘KºÉl¦R Tç˜êÎŒ²_øŽú[‹ÛÂ-ßʉncù£Éʃ†Éõ­[½7O¿‘$¼°µ¹tVšr¿BEXŠ(b‘äŽÑäÆöU¶O| 4Mtß¼´ÿ®Çÿ@zæ¼Y,ãVÑmãþÐx¦i¼Èlgòð€Žw/N½k ³-Ÿýv?ú-ê¶«¢ÇªOiqö»«YíKä·*Ì0s¹HéHhæôÍnâËL¿Š{æ‚â+Á0ê1¼ó"2‚„9rpÄ`ž;œU›o^]é0yP@u ¯šÉ +¤yPIr§æhû§œÕïøDl¶owßló„ÿmóA›pR£’6ãi#ÅH¾³sZ=ÍÛ¹¹7b丬§øùcš~¾_§üz[ÿÀ1|CªO¢jzæ¦ašt >Φ4bB…1;G#$œ Ö¹Ôµx¥ÓtØÅ‘Ô®‘å’R­äÆ«Œàg,~`:_j³ÿõ¼¯l÷—W7­Ê Ü;Ä€Œ1ŠÎÔt&´²ÓⱋS¹–и†x."YbCü9|\``‚x^ßÄ:ÕÛÙÙÄ,î[‹˜d•¢r˜„ã!wÏÖ­]k:ËÜj"Â;#˜ MçÌϰ9 ƒòŒÉÏ4¾ðÛÙÁgs|òý²n% æÿZy qÉŒ æ­ßøfÖþêyþÕyn.T%ÌvòYÀù² éÆA;ÿ]ÁyŒ²×žÿTX£´šlw©wå‰<ã²ìüC®j¢Í,†Ÿ²iËy'°,X£ 08ês[7¾¶¹š  ¹¹±–|…{VQ˜ÿºC0>”í;ÃÖzd°ÉÌLV‚ÑC°#`9ÏN¼ÿõ¨~_Öÿðúü¿à™V¾"Ôµ³m—¤ ÖIu;\†p7(R;©çô§xvùtχv÷Ò©aolò2¯|p*ÒøNÒmÒòöÖ[h|<.¡Þ<ç •*yö­ MÒÏE]$+Kj#1)Ée9ÎqZÎßÖà·W1¥Õuëkk?9tæ¹Ô$HíãEp± çwÍ€;“T5ÍJîãCÖ4íA ûU¤–äÉ!$Gu €I ðA5°<)µ[y5-FHâ*Öûå]Öì½ ¹Î8ù³ÅIÿ½“i×¶“Mu3ÞÓ\ÈãÍb¸ÚrbŸ[‡©VóYÕžïSdV~F˜š.7n™¶ï!H /rAæ¬YkϪ,QÆ‚ÚM6;ÔÈ;òÄŒqŒKwá{k¹eÞßEçÆ±Ý,R… eøëŽ2¸©/|;ms4Assc,0ù ö¬£1ÿt†`}*z]Ÿüþ¿/ø&V™¯ë¼útP}†-Š]Î^'lå¶•\0ÇNù®’Ïí»fûoÙóæ·•äîÿWü;³ü^¸â©é¾´Òç‚[w˜˜mVÑC°#`läñ×5rÎÓìk0ûEÄþd­&f}Ûsü+裰ªÓóüÿÈ_×áþeš(¢Ì_­çü#·²Ùß=£E’3F¹vIáç¿_Lu¨5nþ´»¿Ôo­ãHT·Ù¦(Ò¹#æcž€Iï[7֑ߨ\YÊYcž6‰Š`ãߚϿðôW˧{wnlÕ4%9;vä†R3næ——êWÏô9ë™uX4ÝÛQ–úI%ó>Ó ¤…nX•$®Ê1»rGZÞðÌ×~†IçyŸ|‹™Ö @Wÿh ïN›Ãë:Û;êwâîÛpKµdmnªFͤp?‡µ]Ó4Ø4«?³ÀÒ8.Ò<’6æwc’Äú“UÜ]‹”QE!…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@µùÜÿ×&þUÉxo©ÿxÿ:ëuùÜÿ×&þUÉxo©ÿxÿ:î û‚Š û‚Še×ú³^{â/øù‹þº/ó¯BºÿVkÏ|Eÿ1×EþtÝYÈ>×þ¸§þ‚*z‚ËþAö¿õÅ?ôSÐWþ?cÿ®oüÖ¬®¿ñûýsæµ`ÐOÒª·Z´ý*«u¤vÿòŸþ¸Eÿ¡IWj•¿ü„§ÿ®èRV×lí¼B,KEöU>\³ådöÝ ÷öåÑ]BÒ¢28Y"mêXqЃŸÀš¨nfÏݲÿÀ³ÿÄUÙ@y-цQäÁ¸R˜s8é@¿h—û¶_øøŠ>Ñ/÷l¿ð,ÿñµš3H _´KýÛ/ü ?üEh—û¶_øøŠÚÍ  _´KýÛ/ü ?üEh—û¶_øøŠÙÝUmµK¸àx.¢apÂ7`È\ÉÅ0(}¢_îÙàYÿâ(ûDßݲÿÀ³ÿÄVÖhÍ 2 In'IdhBE’©›òÄc$àv'Œw«ÔË{w ÎPŸQ´Ÿè)ôÀ(¦4±¬‰H¡ß;Tž[p;Ó袊(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š( œ ž”TR€ÒÀŒ2­&=ð¤ÿ0(ûM¿ü÷‹þû}ªßþ{Åÿ}йœt£4OíVÿóÞ/ûìQö«ùïýö*æhÍSûU¿ü÷‹þû}ªßþ{Åÿ}йš3@þÕoÿ=âÿ¾Åj·ÿžñßb®fŒÐ?µ[ÿÏx¿ï±GÚ­ÿç¼_÷Ø«™£4OíVÿóÞ/ûìQö«ùïýö*æhÍSûU¿ü÷‹þû}ªßþ{Åÿ}йš3@þÕoÿ=âÿ¾Åj·ÿžñßb®fŒÐ?µ[ÿÏx¿ï±GÚ­ÿç¼_÷Ø«™£4OíVÿóÞ/ûìQö«ùïýö*æhÍSûU¿ü÷‹þû}ªßþ{Åÿ}йš3@þÕoÿ=âÿ¾Åj·ÿžñßb®fŒÐ?µ[ÿÏx¿ï±GÚ­ÿç¼_÷Ø«™£4OíVÿóÞ/ûìQö«ùïýö*æhÍSûU¿ü÷‹þû}ªßþ{Åÿ}йš3@þÕoÿ=âÿ¾Åj·ÿžñßb®fŒÐ?µ[ÿÏx¿ï±GÚ­ÿç¼_÷Ø«™£4OíVÿóÞ/ûìQö«ùïýö*æhÍSûU¿ü÷‹þû}ªßþ{Åÿ}йš3@þÕoÿ=âÿ¾Åj·ÿžñßb®fŒÐ?µ[ÿÏx¿ï±GÚ­ÿç¼_÷Ø«™£4OíVÿóÞ/ûìQö«ùïýö*æhÍSûU¿ü÷‹þû}ªßþ{Åÿ}йš3@wóÂú}ʤ±³›0'¥rÞêÞ?λ-PÿĪëþ¹7ò®7Ã}OûÇùÐuÜQÜP.¿ÕšóßÇÌ_õÑz×ú³^{â/øù‹þº/ó êËþAö¿õÅ?ôSÔ_òµÿ®)ÿ Šž€¿ñûýsæµ`ÕuÿØÿë›ÿ5«€"~•UºÕ§éU[­ #·ÿ”ÿõÂ/ý J»T­ÿä%?ýp‹ÿB’¹û­_Äqx€iqAd|ÆÝ†#ËîÄïíßߢ˜<§6ŸõÔÿè VKZ§pHžË=|Óÿ¢ÞžÎsH Ç­Ç­UÞhÞhÖñëHÒª#36FIô[y ¶Ad¢†3–Òõûéõû$^ͧ_Ç+F×PEùFT¦Ï›þðôªþ»x-|-„(ðÝ·Œ2?µ¹gáí*Âî;›kgI" #yP7]ª[hüIm¢éÖrC%½¶Æ¤h¾v! ýì ãÓ íO¥—õ¸Œ[=[X–=T“SÝ¥s±­ÙrlnÈÚ9Ï­N­¬yz%ýΤnaÔn -ÚQAR 6÷ÏZm·†&þÛ¶¼’ÞÎÖyš`¶÷¾ö ¸À*uÉÅoŤØEogAˆ¬äó`]íò7<õçï¾´+]§¯õ®¦Ó~òÓþ»ýëñv²Ñê+io«Ea-”?l!çù#’2 ‘î+©³-Ÿýw?ú-é–ºMµ­ÅåÆYnåódipqÀG†bÍ{£¯øfö˜§·¸‘~…Õ]'W»:F‹a¥ÛZAqw²f@æ(‘ž7n$’;úÖij¶k3 ×)ö9¤–0àHrÉÓîþ¾õCPÐE•†Ÿo¨M-™qöÓÄ’ n ïÂ}1ØSlH‚ëWoggÓÒî[‹˜d‘ârŸ¹8È]Àóõ§Eâ-^õ´ûKt²†òina¤GxÃBpJ€Ààûš³áï ½œw7Ï/Û!–âP¾`oõ§Ç1ÈÀÎjõ·‡m-oaºI'2E4ó(f&S–ÏoëO×úbþ¾Z˜ö#Öd}ÍäV?e¹¼k'Žpèà²îÜNÊôÇ~µñ…ôºŒŸfµó-c»û1…m&iCmg°`äãÐuÍn'‡mÚÚ$ûmï âÃ%Ë3`ñÓ,ƈü?¾ ÷V·×¶é$¾t–ѺùNýÉIï‚).—þ¶ÿ‚7åýoÿÈjñµÍéK&Ó­õ±´AK·xMÁ·c9aÆ*Mõ™WXxnm^5¼¹HRtrÁÃ|¹`ßwØ-i¿‡mÆæÐÉ?—qwö·!†CïÇL¨ÿjøv8®/$·Ô/àŽì»<1H¡UØ`ºü¹¿\gµ o—ùÁ¿Ïüÿà°y¾D~~Ï;hó<¼íÝŽqžq𒣂/"âÞòlP»ä9fÀêOsRS{‚ (¢Q@Q@C)Åͧýu?úTÕZäââÏþ»ýô•â ››cKÑ º’Ò+¿6I¦„íªò©í’zõÀ¨5;¿øDìb[i¼¸X£7o%Ç—Á$àeÈÀ<Ò´5m.ßVH„Í,RÂûážÛ$mÓ ý;*›ø~9í 7Z…ýÉXç’E…v¨©íÍ.ƒ(¯Šui,‘éïÒÕ'šÚXãue'xF!¸Æ1žÝj CWÕ®d¶²imáÔ-µxái"Wò¤VŒ°%wgò3Û­mc+Ãl—7×—-or.RIYw(çÒ¢ºðí¥Ü—2™®c–yã¸Fà4nŠãÐwÏZkúü?à‹úüÿà“QÖN»•¶–Ô\O+@ä7Ï´…þ_ÄšÌ>2¾—Q“ìÖ¢KXîþÌa[IÚFPÛYÄ€l98ôs[6º\v×ëz×7Ü qn^VS¹wÉÀäý=ªô8íõºµ½½·I%ó¤¶×ÊwîH*HÏ|BÝ]È[Z™Ðo´oµWy£y¤­ãÖãÖªï4o4kxõ£xõª»ÍÍZÞ=hÞ=j®óFó@·Z7Z«¼Ñ¼Ð­ãÖãÖªï4o4kxõ£xõª»ÍÍZÞ=hÞ=j®óFó@·Z7Z«¼Ñ¼Ð­ãÖãÖªï4o4kxõ£xõª»ÍÍZÞ=hÞ=j®óFó@·Z7Z«¼Ñ¼Ð­ãÖãÖªï4o4kxõ£xõª»ÍÍZÞ=hÞ=j®óFó@·Z7Z«¼Ñ¼Ð­ãÖãÖªï4o4kxõ£xõª»ÍÍZÞ=hÞ=j®óFó@¤Àé—#þ™7ò®GÃ}OûÇù×O|ÄØ\údßʹŸ ýãþñþtÜÁ÷A÷Àe×ú³^{â/øù‹þº/ó¯BºÿVkÏ|Eÿ1×EþtÝYÈ>×þ¸§þ‚*z‚ËþAö¿õÅ?ôSÐWþ?cÿ®oüÖ¬®¿ñûýsæµ`ÐOÒª·Z´ý*«u¤vÿòŸþ¸Eÿ¡IWqÎj•¿ü„§ÿ®èRUÚ`EqžŠ”tmÈñÿõ?ƒÈ½ÿŸ‹oüoþ.®Q@¾Ï{ÿ?¿øßü]g½ÿŸ‹_üoþ.®Ñ@¾Ï{ÿ?¿øßü]g½ÿŸ‹_üoþ.®Ñ@¾Ï{ÿ?¿øßü]g½ÿŸ‹_üoþ.®Ñ@¾Ï{ÿ?¿øßü]/‘{ÿ?¿øßü]\¢€*Åk/ž³\L²b¢mPOSÉ9=ºÕª( Š( Š( Š( Š( ŠkÈ‘íÞ껎ÕÉÆO¥:€ (¢€ (¢€ (¢€ Šâ=(èÛ‘‡cÿê$~5-OȽÿŸ‹oüoþ.“ì÷¿óñkÿ€íÿÅÕÚ(—Ùïçâ×ÿÛÿ‹£ì÷¿óñkÿ€íÿÅÕÚ(—Ùïçâ×ÿÛÿ‹£ì÷¿óñkÿ€íÿÅÕÚ(—Ùïçâ×ÿÛÿ‹£ì÷¿óñkÿ€íÿÅÕÚ(—Ùïçâ×ÿÛÿ‹£ì÷¿óñkÿ€íÿÅÕÚ(—Ùïçâ×ÿÛÿ‹£ì÷¿óñkÿ€íÿÅÕÚ(—Ùïçâ×ÿÛÿ‹£ì÷¿óñkÿ€íÿÅÕÚ(—Ùïçâ×ÿÛÿ‹£ì÷¿óñkÿ€íÿÅÕÚ(—Ùïçâ×ÿÛÿ‹£ì÷¿óñkÿ€íÿÅÕÚ(—Ùïçâ×ÿÛÿ‹£ì÷¿óñkÿ€íÿÅÕÚ(—Ùïçâ×ÿÛÿ‹£ì÷¿óñkÿ€íÿÅÕÚ(—Ùïçâ×ÿÛÿ‹£ì÷¿óñkÿ€íÿÅÕÚ(—Ùïçâ×ÿÛÿ‹£ì÷¿óñkÿ€íÿÅÕÚ(—Ùïçâ×ÿÛÿ‹£ì÷¿óñkÿ€íÿÅÕÚ(—Ùïçâ×ÿÛÿ‹£ì÷¿óñkÿ€íÿÅÕÚ(—Ùïçâ×ÿÛÿ‹£ì÷¿óñkÿ€íÿÅÕÚ(—Ùïçâ×ÿÛÿ‹£ì÷¿óñkÿ€íÿÅÕÚ(—Ùïçâ×ÿÛÿ‹£ì÷¿óñkÿ€íÿÅÕÚ(—Ùïçâ×ÿÛÿ‹£ì÷¿óñkÿ€íÿÅÕÚ(—Ùïçâ×ÿÛÿ‹£ì÷¿óñkÿ€íÿÅÕÚ(—Ùïçâ×ÿÛÿ‹£ì÷¿óñkÿ€íÿÅÕÚ(—Ùïçâ×ÿÛÿ‹£ì÷¿óñkÿ€íÿÅÕÚ(—Ùïçâ×ÿÛÿ‹£ì÷¿óñkÿ€íÿÅÕÚ(2ò¥²¸i&DÙ )è{—?Ê¹ß ýãþñþuÖj?ò ¹ÿ®Mü«“ðßÞ?ïç@ÌpQDpQ@ ºÿVkÏ|Eÿ1×EþuèW_êÍyãæ/úè¿Î€;«/ùÚÿ×ÿÐEOPYÈ>×þ¸§þ‚*zjÿÇìõÍÿšÕƒU×þ?cÿ®oüÖ¬‰úUWëVŸ¥VqÍ "·ÿ”ÿõÂ/ý JÏñ5ÄÐ.“äË${õ(Qö1”“qÔ{VŒòŸþ¸Eÿ¡IF¡¦Ã© a3H¿g¸K„Ø@Ë/@r:S[¯T>ç3qâu~ÑqéßeMGì ï`¡É ƒÉ`}jìZõÜ6ú¼Z”ÖP\Ø2(c)ƒ€WäÎìóŒÍ^>´ki`2O¶KÑzNááƒc§ÝÈþô—~³¼kç’IÕï)‘À1´xÚWŽç4-¿¯/ø!×úóÿ€cÛx¾çû;SyaŽk›YbŠ"±IÈdÀ\«üË‚yý(¼ñ6©¢É}¢–sË ¼RÅöhÝAi Ä€FxçÚ¯Oá¸bÓu í{©Íy°¿™*#’Ÿwi@#¯áT4Ï Ü^Üj2ë yä\A·S£Ì6±mÙ…Á#O4uþ»˜º]ÍëWÚÝ͵Ü9XÑ].Òh³Wlœä`r9©¼C*ÄúFèc—~£ùùæ#Ÿ®Gµ= »Ñ­Ù¢mKXw`6I,AyìÌÕ ¿íMfûMGѧ³‚Úén$šy¢nF''"ŸUòGóüˆgñ&¨–ך´PZ*Òá¡hÛwœê­µœàsœ vëL¼ÕäÓgñ%Õ­µ¿Ÿ [ìï,ËsÛ=±ZSxRÊk™\Ïv¶ÓMçËf²&GÎrF3É¥MuáË;Ïí2IÇÛÚ&—k<¼coÜç4–Úÿ[¨Í/QÔ±u¥êbÕæŠ%¶VUebF ±8 ¯­!•b}#t1Ë¿QFüü‡ ó Ï×#Ú¥¼·k-Eõ[k;›Ë™b[vŠ)#Pmß9ϯ§—.·$nÓo,E¤ëqyb`ì21ò³qϵ §õ×üƒ¿õÓüÌ/Q¿±³×u‰ã–ÆÖêé„EËòžrØÛm2ÓÅš›$ï=ªH‚ÎK…d´ž%‰Ôd#>£:VÜ~¶ŽæíÅÅɶ».ÓY³)…‹Œ1Æ3Ï×Û$sÙ¶¥¨Mm, ŠY„jF>S·9ÔšZÛä=/ó2 ÕüK5Ý¥¨m$=Ý™»ŽO&L(r„oäüÜúñ[Ú¤Ú¾‡k~ñˆÞdË 9ÁǶEhÖðÝÙÜ«Ê^ÖØÚ $`©ÛÉã¯Ê?ZeއŸ”p]]ˆ­Õc2 ²nççsŽÞ•NÚÿ]ÿà¯Ô«á+©fð¥µÅÌÒK'ï <ŒYˆÝϰ¬½'Å×ú•å›}”5¥Û±-& à•fŒ8Æ:÷­m3ÃCJò’ _QkhØ‘níC’IäÎ2}j]?Ãñisk}z¶ªX¥™‘LKžÃåÝŽx¥Öãgoiw‚§ÖKUººdýúDÂbLã;ßÌ=€è–kv¶à_K“äå Œ¢ã·˜þµDxzÈxwû´Ík·hbÀ8ù·:ƒíLó/ô•[h¬õ-Xcq¸y ?Ýä§O§zwèc.õ MüJš]‰´Ž5¶<ñ³’7íÀà }y¬Ë}^kX."±´·[»­b[h÷Ùž¥ß’Oð1øV啯Ú/ÿµç¶¸µºh>Î`•Ñ€PÛ³ò’3øÕ KAŠ-6U¶·¼¹•ïMâ˜fHäŠCÕ”¶Lõ¥¶ÿÖ¿ä]¿­?ÌÄÔïõk¹¡³¬¾Ùg¬Ar¤L#;£, RÄ÷õ©oõ]ZâK{&’ÞûmZ8ZHÕü©£. ]ÙÇ<Œö«š/†ço:ëT{••¯’î5’Ty>DÚ7•yç…öæ´®ü3gw%Ô¦{˜æžâ;‘$nE"(PWAß=M5¦ÿÖßðE¿õëÿÖ·­º —æçhÔª“ì $~f¸½vêDO‹eH'Žk0&BÛ›%~÷?‡â·ÍÞ¡§âÖ='PÔ0º3@ óË/Ó éHÚ ¶£o~÷QÜBúŒÍ:Âí+‘‘€zžiyumwQÒZÆÆG¶’öç{´ÑÙÌ舸ÿ–hY‰äw¡‹Ä:ÍêévðAokutÓ«µÌmÄxÃ*’¬žzV¤¾ŽxmüÍFý®­Ùš+Íê%PÃx]¤t"¬&¸°¸–êæy¬„VR_]ØðÆ(^`aXxYi÷7‘Xý–æñ¬ž8Uã‚Ë»q8#+ÓúÖæ¹¨6ÀH—0A+¸D3Bòî>†cô¨Óö‰mm’}¶÷†ñ a’å™°xé–?ãIqáè®c﯄©r×1N%âbÚ¹mÁ#:^_ðC¯õçÿɶñUåÞ“•Pšù¬²ºG•—*~`6ºyÍ;PmmuÝyh·N—%È…ü–.2›óŸÆ´ÂÖcNkG¹»w7&ì\—U”ÿ ?,sNŸÃ‹q±“TÔ>ÕlÌÑ݇A 0WîíÇáGõø˜“jí¥Þkó-¤/rk•,¾kº…²N'·oZµÍON–ö×QKI."±{Èd·VT`¼`I=qÎyÏj¿'‡,¦Kõ¦”_Ä¥˜ `ð}i‘xjÙïÏ»¼ºšênÓÎê]c9ùW×=:õÍúû¿ÌjÝJºV±ª¶£cm© 7KûSq Û#!B6’¬ŽxaÈÇJÏñv²Ñê+io«Ea-”?l!çù#’2 ‘î+¤G·ŽçOœ<»ì`h"Œ` çŽ¿(éŠu®“mkqyq†–[¹|Ù\pQÇ@7¾Ÿ×bc¶¦n£sa¨èVÚ¬ºåµ£F$Qk1¤,Ë󞯭[Ðí¿‡m›Vý¥#-+HFà2HÜ}@Æ}ê£xFÛÊ´Ž ûëu´šI¡´garxÃ!8î3WæÒ~Ӣͦ\_]̳)GŠ ž£!@éÇJOga®—9_øŒO⥓VŠâ=X>ËA8cjTåÐ~]ÉœûÔ3ê7‹¬K!º¿W]QaK•ýbÈÊ2ôÎ2¹#ïµØ^è–w¶°ÀTÃäH’Äð€ Œd§ÐÕ7ð¥›Ìùº¼¯?ÚÌH<¦}Û³Óv3Î3jkuåÿþ=Sþ»ÿÀ7h¢Š@QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEVÔäsÿ\›ùW'ῼÞ?κÍGþA·?õÉ¿•r~ûÇýãü蹃î (ƒî (—_êÍyãæ/úè¿Î½ ëýY¯=ñü|Åÿ]ùÐueÿ û_úâŸú©ê /ùÚÿ×ÿÐEO@ pâE’=»”†èAÆ ÍsÿæTiË,MÓ3ž„×1ῼÞ?΀;˜>࢈>ࢀuþ¬×žø‹þ>bÿ®‹üëЮ¿ÕšóßÇÌ_õÑwV_òµÿ®)ÿ Šž ²ÿ}¯ýqOýTôQEQEVëþ?tÿúîô­:̺ÿÍ?þ»Ÿý«N€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€)ê¿ò ºÿ®Mü«ðßÞ?ïç]–«ÿ «¯úäßʸß}æÿxÿ:î`û‚Š û‚Še×ú³^{â/øù‹þº/ó¯BºÿVkÏ|Eÿ1×EþtÜY±£þ˜§þ‚*mçÚ«ÚÇ·ýqOýTÔ†;yö£yö¦Ñ@Þ}¨Þ}©´PH«2íuuAõt¨¾Ë÷î?ð&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þ*¦¢€)^@‰cpÁæ$DßzwaÐö'Îxsï7ûÇù×Qÿ ûŸúäßʹ}öÿxÿ:î`û‚Š û‚Šbuþ¬×žø‹þ>bÿ®‹üëЮ¿ÕšóßÇÌ_õÑvÖŸñãmÿ\SÿA5Ciÿ6ßõÅ?ôSRQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE^ÿþA÷?õÉ¿•rþûíþñþuÔ_ÿÈ>çþ¹7ò®_ß}¿Þ?΀;˜>࢈>࢘†]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@ óëI  Óm!š³G¹œ€Cc‘÷‡µCö¯Ð2×þúü]i,j‰s…¸eâ—ì­ÿ<ßÿž°•&ÝùŸõò:aˆQŠ\‘ù™ŸjñWý-ï¡ÿÅÑö¯Ð2×þúü]iý•¿ç›ÿàSÑöVÿžoÿOKØ?ç‡ùõ¥ÿ>ã÷?ó3>Õâ¯úZÿßCÿ‹£í^*ÿ e¯ýô?øºÓû+Ï7ÿÀ§£ì­ÿ<ßÿž`ÿþäZ_óî?sÿ33í^*ÿ e¯ýô?øº>Õâ¯úZÿßCÿ‹­?²·üóü z>ÊßóÍÿð)èöùßáþAõ¥ÿ>ã÷?ó3>Õâ¯úZÿßCÿ‹£í^*ÿ e¯ýô?øºÓû+Ï7ÿÀ§£ì­ÿ<ßÿž`ÿþäZ_óî?sÿ33í^*ÿ e¯ýô?øº>Õâ¯úZÿßCÿ‹­?²·üóü zrÙ–8ØÃëu%Áÿ;ü?È>´¿çÜ~çþfWÚ¼Uÿ@Ë_ûèñt}«Å_ô µÿ¾‡ÿZñÚÃ$Hù˜nãÏñ§}ŠïMÿßühöùßáþAõ¥ÿ>ã÷?ó1¾Õâ¯úZÿßCÿ‹£í^*ÿ e¯ýô?øºÙû?Þ›þÿ¿øÑö(½7ýÿñ£Ø?ç‡ùÖ—üûÜÿÌÆûWŠ¿èkÿ}þ.µx«þ–¿÷ÐÿâëgìPÿzoûþÿãGØ¡þôß÷ýÿÆ`ÿþäZ_óî?sÿ3í^*ÿ e¯ýô?øº>Õâ¯úZÿßCÿ‹­Ÿ±Cýé¿ïûÿb‡ûÓß÷ÿ=ƒþwø}iϸýÏüÌoµx«þ–¿÷ÐÿâèûWŠ¿èkÿ}þ.¶~Å÷¦ÿ¿ïþ4}ŠïMÿßühöùßáþAõ¥ÿ>ã÷?ó1¾Õâ¯úZÿßCÿ‹£í^*ÿ e¯ýô?øºÙû?Þ›þÿ¿øÑö(½7ýÿñ£Ø?ç‡ùÖ—üûÜÿÌÆûWŠ¿èkÿ}þ.µx«þ–¿÷ÐÿâëgìPÿzoûþÿãGØ¡þôß÷ýÿÆ`ÿþäZ_óî?sÿ3í^*ÿ e¯ýô?øº>Õâ¯úZÿßCÿ‹­Ÿ±Cýé¿ïûÿb‡ûÓß÷ÿ=ƒþwø}iϸýÏüÌoµx«þ–¿÷ÐÿâèûWŠ¿èkÿ}þ.¶~Å÷¦ÿ¿ïþ4}ŠïMÿßühöùßáþAõ¥ÿ>ã÷?ó1¾Õâ¯úZÿßCÿ‹£í^*ÿ e¯ýô?øºÙû?Þ›þÿ¿øÑö(½7ýÿñ£Ø?ç‡ùÖ—üûÜÿÌϰŸÄ^Æ·¶6ñ[œïta‘ÁÇñøí[;O¥Vû?Þ›þÿ¿øÑö(½7ýÿñ­!UkßÔÆ¥Nwt’ô,í>”m>•[ìPÿzoûþÿãGØ¡þôß÷ýÿƬ̳´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ]@§Ü×6¥rÞûíþñþuÔ­œ!ýã`ç +0ü‰®[ß}¿Þ?΀;˜>࢈>࢘†]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@µ± i$MS]K{¶%Ðx<ÃdFbÌ;OáPjv×·šU¼‰ˆÌ¾zI)zw §ã¦kÃX}GÔ&¹‚™µ #‰|ï—y= aF:úv¤¿¯ÀoúüN¦Êþ×Q·óí%G’¤à‚ê<ƒìjí½?íâÈÎVrÛhØ)o@Äm'Û5GG¼Ó-,Á]F™nîH’X¾ei˜gÀÀã>•KX¾·¹Ö,VÚÿíSCt€éárÎFÐIäãŠ}RFΆçR³³¹··žuI®[dI‚KÃùÒÞßÚéÖþ}ÜËy êO ’}…rº¾©§ks=¥´’K¨¦ÉÉÎÀjcg'“ÎkO]ai¬iZʱ²€È²8RDLÀmbnÏlÒ[\}l^]Mk)îü÷X`ǘ^R¹éò‘“ùSìµ› Bv‚Þfó•w䉣lzá€$W9­ëIªéÜvÒÅ%¤ÂRhùÉ-ósÓŒ “M'ñU¼–Ú“jËöwI%*¸·‚€/ÌxÆ3Å5¸=æÕ“ûLØEmq3¦ß6HÕvE»¦âHúð hW;eckqâ­bâkx¤š‡Ë‘”O“±íYÙy^k»BÞNŸ*).éæ|ÙÇ'Œ÷¥Ðæ•~øú× )£jré7ö²ÆË’]Uï™±¼œ•ÎpAâ¶|'º]\Ëge4 ¨ 8™Ÿ›$uúS°®t6ÿñíûƒùU{ VÇT›+…˜A)†L6°ê9þ}*Ž·}-‡†Ë[ÇÜÊ[Y ¿–søV&›Þ®YGqcµ­Ý¸´ÄW]ò %IÊ® ‡|ñI_×õ¸ßõý[·ˆt«»ÑiÖ防§îØ+•êˆÚÄ{ZuçÃíÚ$+v. wÓ a¬²’zü½>n»¸í]>´úšßfÚÀ`ÿ8íY3Ïüõù³úPM‹ÛÛ}:ÎK»¹<¸#ÆæÚN2qÐsÔÕŠå¼Hf>¸7›±7}  “;ÇPŸ/åXúõ…­Ìž,¼– ×6‘DÐKÑ£"<ü§·4=jz Åypè:¶ 4û b:H¸kXó‰1Ç©ËÒd‘n5eÑf±g}(ȱé¨Ê‹.N2 ŸŸo¥×çþ@¿¯ÃüÏI¢¼ÍOVãÃEMùÓ.|Ò™óL»WóÎìç­ix>ÞØêQOk©Y[b.-màt‘‰Ç2îvùïŒòiÛ_ëÏü…}?¯/ó;ëè4ëF¹¹b±)U$ òHõ"¬ÖŒâó|+v eÐÙÔ ü¡Ô·@k"k]SÔô+[(m&ÓÜ“J<²ÁW°ã4–£;Z+ͼSsö•ÈDÓìîìä…-‹£}¦Q•9²^HÆCW5>ÖêëÅ—“BæÒÞÞnnOnE. {ífÛk1ÞjSZ[Ú]:Bæ9.B¨‰\ •É9'·Êyö–þ(¶¹v´Ônî^blý¦Ô”+Ôlîzu<š±a§©ÓüGekö°¹ºHg<Ìöѵ߯éþbZÛÎß©ÚÑ\.‹ý›ý³¥`îÝä¿ö–7tÛÇ›ŸãßëÏZ«ŸiÃg»Kt[›¢y@ù¤pê{Ó°'sÑ(¯?¾Ð4¸¯¼C vq¤vúz\@«!‰2Ëè~Uéé]®—+ͤYK#w‰îJŠKUë¯ù¯õåþdW:¼béîbž(­ÙÊÉò¹|·y Ю]‹Í_tZ3¨ù@RÜ}¨õ¶ÓdM+û:M>=t¢FhKÛ p6ï ËþÖ 8ÍzÀÛév·xzÊæx5;'7N˜CåíÀ I8^@äÔ:m…µ•¶}o˯íw¶3n%š-ò.Ò{ŒùS¶©]…}.wާi¤Û¬÷’2#¸vÆÎK€Òiú½Ž¨$ûûÚ"ˆÈÈéž™VʰYœçhíc9Ƕi­y¡Åá{8l-´Ã ÒF—’Mb…öº@1ÎF9#“GO»óaý~Gow}“[¬ìA¸”CrÄèjÍyœ"ÞO Zý­ ¸Ó-õ²•I„C‚“„ËzœUlXͩڃ>ˆl€³kˆYàݸîÛµ”Æ0*×ápëýw±è•Ÿs«Áf.žæ)âŠÝ‘L¬Ÿ+—Àq×’§hÑ<-œOuö²°¨óðG˜1ÁçÚ¹v/5|X eÐIhΠgåKqô‹YØKTw”WŸëm¦ÈšWötš|zéDŒÐ—¶àmÞ—ý¬qšu¾—kq7‡¬®gƒS²sté„>^Ü“…äM \.wÕOQÕ-4›tžòFDw®ØÙÉcРšáôÛ k+múÞ=—_ÚïlfÜK4[ä]¤÷ò­ÝéÚX-•Ó+G«ÅH©Ìn †>„RZÚÝÿËüÇÞÿÖÿät6•¶¥½·µ›Ä'5n¹KJYµÝËS¸}J'ûC‘pˆ ¸PNõ­Û$ž Ô-ïïlìFØÖÂK˜]™hæ!³ž ü)èôW›k6æmvúWR³µ“dbÎ{¨°FZ;³‘‚ ôh•–W}îlc'ÖŽ—ÊGW‚2‚x§€ÉuöXĉíÉcøN hWž]ÇlÖ=ìhöQø…ÚãzåU9ol‘I­‹µ;PgÓ Ñ mq <·Ûv²€ØÆåK¢þº\ov¿­ìz%Á"Ú÷QŠ×PuÔD:(hç`FNã‡äcž´h6ÐYÝxbêòå¾²Ý0'3ŠÙoSœóïNß×ßþBþ¿/ó;Ê+Œñ«§êPéÀ=¬.VG[ÍB&1©\  epÇ'©+:ÚX¥Ñ|6ÚÛ—Ò|©D­&Lf@qÿlgâÎì_@u&° ~б Šã¤~ Ó­®~Ò%>DÐùr4½\nÇñU=qÒ'Š,æ¹KO°5‚-‹º‚›ÖCÂ^EA.?³î~Ñ¿û;ûv_¶íÏú¾~ö?‡vÜûSþ¿ úü.wôW\ˆ…âÓsýŠÒ[‹}¹òË_3gû=:qœ×A¤ÙÛé^-¾²±‰`µk8¦0§ s‚@íåE¿¯•Âú7­®¡ma5Â¥ÕÖã d¶:ûÆ¢¿×,tÉ|»£pÝùŽÖYª©«‘»‹TÖ¿´õ[+(%_5~Ç;\t1ÆÕØs–ÝÜdØÕuÖ´}&Þ݈MbDWÁäD¼ƒò[¯ë®ÃÙÿ]7: ;¸/ìâ»¶rðL¡ÑŠ•È=ðy©é4TE ª0è- KÌ(¢ŠQEQEQEQEQEQEQEQEÇøsï·ûÇù×a\‡>û¼w0}ÁE}ÁE1 ¹ÿVkÏüD§íŸúh?zã(k×lËüÀdƒšèíU¾ËÊ~èíRíoîŸÊ¼þïÅ·öÌ@Ò,ßð"¨ê ÿÈÏþú?áHg§íoîŸÊ­ýÓùW˜Â}©ÐÏþú?áGü'Ú—ýlÿï£þéû[û§ò£ktþUæðŸj_ô³ÿ¾øQÿ ö¥ÿ@?ûèÿ…z~Öþéü¨ÚßÝ?•y‡ü'Ú—ýlÿï£þÂ}©ÐÏþú?á@Ÿµ¿º*6·÷Oå^aÿ ö¥ÿ@?ûèÿ…ðŸj_ô³ÿ¾øP§íoîŸÊ•U·_JòÿøOµ/úÙÿßGü(ÿ„ûRÿ  Ÿýô€=*ßþ=¢ÿp*’¼Ð|EÕÀhÖà€HßáKÿ Xÿ =¿ýüoð J¢¼×þ6±ÿ@{ûøßáGü,mcþ€öÿ÷ñ¿Â€=*Šó_øXÚÇýíÿïã…ð±µúÛÿ߯ÿ ôªl‰æDè“p#rõãÞ¼ßþ6±ÿ@{ûøßáGü,mcþ€öÿ÷ñ¿Â€;k-;Ká{5íåíÂÆcG¹u;HTp9ëÅ^»îmš$¹šÙ›–»—žÛ¥yßü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…w6Zdö“ù’j÷÷K‚<¹ü­¿_•ýkF¼×þ6±ÿ@{ûøßáGü,mcþ€öÿ÷ñ¿Â€=*Šó_øXÚÇýíÿïã…ð±µúÛÿ߯ÿ ôª+Íáckô·ÿ¿þÂÆÖ?èoÿü(Ò¨¯5ÿ…¬Ðßþþ7øQÿ Xÿ =¿ýüoð J¬Ë­*âæååMkQ·VÆ"‡ÊÚ¼vÝ?­qð±µúÛÿ߯ÿ ?áckô·ÿ¿þèÐDÐÀ‘´ÒLÊ0d“›Üàù ’¼×þ6±ÿ@{ûøßáGü,mcþ€öÿ÷ñ¿Â€=*Šó_øXÚÇýíÿïã…ð±µúÛÿ߯ÿ ôª+Íáckô·ÿ¿þÂÆÖ?èoÿü(Ò¨¯5ÿ…¬Ðßþþ7øQÿ Xÿ =¿ýüoð J¢¼×þ6±ÿ@{ûøßáGü,mcþ€öÿ÷ñ¿Â€;{­*âæååMkQ·VÆ"‡ÊÚ¼vÝ?­_‚&†¦’fQƒ$˜ÜÞçÈWœÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéU“.s,Ï"ëÚœa˜‰äí_a˜ÉÇÔ×ÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@’£j€X±=M-y¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð¥_ˆºÃcÛûhßá@“\‡WßïçUlücªÝ …ºgÝmhv†5ŽhÓÁ÷è†QLa‘T.¬Ä äV!Ð-q Ç!'`ª§ÃQ“÷å]ŽÀ{Q寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùR FÜ•v>ZúQ寥svÚDFV͵¨ˆ ¶Ôà  )h ÿÙnip2-8.7.0/doc/html/figs/snap3.jpg0000644000175000017500000024221113341773367013526 00000000000000ÿØÿàJFIFÿá°ExifII*JR(i‡Züÿÿ)( üÿÿ)( 0210‘ 0100 ÿÿ g 4ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀ4g"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?÷ú3AªÓÎ#æ€'.4Ì£½pº÷Ä-/GºkWy&¸_½ ¿RHöÎk¾+X“Åïåÿ@±ç¯­zú×’ÂÔ³ÿŸKßÊ?þ.øZ–óé{ùGÿÅÑp=oÏ_Z<õõ¯%ÿ…©gÿ>—Ÿ”ü]ð´ìÿçÒóòÿ‹¢àzמ¾´yëë^Kÿ NÏþ}/?òÿGü-;Oùô¼ÿÈü]Ö¼õõ£Ï_Zò_øZvŸóéyÿÿøº?áiÚÏ¥çþCÿâ踵篭zú×’ÿÂÓ´ÿŸKÏü‡ÿÅÑÿ NÓþ}/?òÿEÀõ¯=}hó×Ö¼—þ§üú^ä?þ.øZvŸóéyÿÿøº.­yëëGž¾µä¿ð´­?çÒóÿ!ÿñtÂÒ´ÿŸKÏü‡ÿÅÒ¸µç¯­zú×’ÿÂÒ´ÿŸKÏü‡ÿÅÑÿ JÓþ}/?òÿEÀõ¯=}hó×Ö¼›þ•§üú^ä?þ.øZVŸóéwÿÿøº.¬ùëëGž¾µäßð´­?çÒïÿ!ÿñtÂÒ´ÿŸK¿Î?þ.‹ë>zúÑ篭y7ü-Oùô»üãÿâèÿ…£iÿ>—œü]Ö|õõ£Ï_ZòoøZ6ŸóéwùÇÿÅÑÿ FÓþ}.ÿ8ÿøº.¬ùëëGž¾µäßð´m?çÒïóÿ‹£þ§üú]þqÿñt\Yó×Ö=}kÉ¿áhÚÏ¥ßçÿGü-_ùô»üãÿâ踳篭zúדÂѵÿŸK¿Î?þ.—þ…¯üú]þqñt\Xó×Ö=}kÉÿáhZÿÏ¥ßçÿGü- _ùô»üâÿâ踱篭zúדÿÂеÿŸK¯Î/þ.øZ¿óéuÿ}EÿÅÑp=cÏ_Z<õõ¯'ÿ…¡kÿ>·_÷Ô_ü]ð´-çÒëþú‹ÿ‹¢àzÇž¾´yëë^Oÿ B×þ}.¿8¿øº?áhZÿÏ¥ßçÿEÀõ=}hó×Ö¼Ÿþ…¯üú]þqñtÂеÿŸK¿Î/þ.‹ëzúÑ篭y7ü- _ùô»üãÿâèÿ…£kÿ>—œü]Ö|õõ£Ï_ZòoøZ6ŸóéwùÇÿÅÑÿ FÓþ}.ÿ8ÿøº.¬ùëëGž¾µäßð´m?çÒïóÿ‹£þ§üú]þqÿñt\Yó×Ö=}kÉ¿áhÚÏ¥ßçÿGü-Oùô»üãÿâ踳篭zúדÂÑ´ÿŸK¿Î?þ.øZVŸóéwùÇÿÅÑp=gÏ_Z<õõ¯&ÿ…¥iÿ>—œü]ð´­?çÒïÿ!ÿñt\Yó×Ö=}kÉ¿áiZÏ¥çþCÿâé?áiZÏ¥çþCÿâ踵篭zú×’ÿÂÒ´ÿŸKÏü‡ÿÅÑÿ JÓþ}/?òÿEÀõ¯=}hó×Ö¼—þ•§üú^ä?þ.øZVŸóéyÿÿøº.­yëëGž¾µä¿ð´í?çÒóÿ!ÿñtÂÓ´ÿŸKÏü‡ÿÅÓ¸µç¯­zú×’ÿÂÓ´ÿŸKÏü‡ÿÅÑÿ NÓþ}/?òÿEÀõ¯=}hó×Ö¼—þ§üú^ä?þ.øZvŸóéyÿÿøº.­yëëGž¾µä¿ð´ìÿçÒóÿ!ÿñtÂÓ³ÿŸKÏÊ?þ.‹ë^zúÑ篭y/ü-K?ùô¼ü£ÿâé?ájYÿÏ¥ïåÿEÀõ¿=}hó—Ö¼“þ¥Ÿüú^þQÿñtáñVÈu³½ü£ÿâ踶$½8kÌ,>)iSN±Ì—6àœo•Whÿ¾X× Z^¤è¬ŒXdr  )äQ@ç \î³yäÆÇ5ÐL~C\?‰å+ó@%ÃÜHóÊŤ‘‹±=ÉäÓwT*ß(úRî©.ê»6—¨[épjrÚºYNÛb˜‘†<öÎGCÔUm:ÎMOR¶±‡ïÏ ŒLžOà9¯N¹:V±.§áÛ]XJßgXml¾ÎÊ!’yx<ç>ÔžŠàµv<æÓL¿¾·¸¸µ´’X-¼Ò @O'>ßj§ººŸ ^ݶ™¯XÉ<¿f‹K–~UcŒœzõ®oNm;íCûSíŸeÚsöMžf{}î1O¨t#±  ’N$šÖ¾ðί§%›\Z0{Dxmf8Ù+{~µRÝÕ|GnÚ"M&Û„6©u·{0#±òõý+·Ôôæìµ›Ëk­.õµ(Uí%¹ó#˜–dàŽ}±šØOKœ\z6§.§6š–„Þ@ Iôù@ëÎpzކ¥èz®¶®ÚmŒ— œ3ª úeˆö¯A¶½Òäñö¯må_,2ï¼ûS¶ÿ”g÷d`gʹÛ[;ŸxLÓôgG¸´•ÍÕ¯š›$•~HÈç¥$î¯äŠk[y³œ}'QTM2K9õØ*ÂØ‰é‚N1ïœRǤjRêçIKG7ኘ2 ‚O9Æ1ß8®ê6Fñ„ôénæþÆR#nÁØHR{‘ƒùûÑeâM6Kë=Q?¶ï'ŠÂhÆ>Trø÷]£?áMtþ¼Ÿùu‡†u½PNl´ö›È”Ã/ïc]®:™‡éU¥ÒoàÖIš.õcòË‚ØÇ*Hî+Ð-tïµéÞ&µGö§üN…¯Ú<Œô9ÝíXZ>šÚ'ˆ5=RëMi–æxíLÂP®ã»²sži'ÕÿZ\mvþµ±Ê_ÀtíB{)¥…åÌlcbT‘×þ• ²éM¨ù°yK0„Ædýá8ÎBú{סøpëøgA’ÌFöÒÜÌÚ‘”&?0äÜúô¬Ø†•ý…r Oì¯øHÔuù|¬üw¥4µ³þµ_æ/5çúÿ‘Áyªsó:óSZD÷×pÛ[áåšExÉ8èwŸð’'ŠìåšÂÝ*;—6FЪ•ÚpTõÈ^yî*[»I,|E7ˆ/¯$¹eŠuŒI‘¶Ï”žO4®·ag²8[í}> ©e¹³qmsögXå%‹ã$€@$™ö¬¿9?¾¿v¾c?…mÚS½¤ñ%Éçq!sšè/5ýF(5IÖTóm5tµ‰ŒK•ˆ‘”éÓ߯½4žß×Oómÿ®¿äyY’@´ 2#Ú½a[_x®= [Ŭ)ŒÙ‡Ø0M›¸ŸåX?÷¯ˆ­Ì»|汈ÈF9o›'Š›èŸqÛVcéz6§­Hé¦Ù½ÁŒø*¡sÓ%ˆ-¿‡u›­BâÂ7vãt±3¢¹bü \ð‡Ÿ^¸¹‘ü×´µ òAÓ·;Pd€:OOÆ·?êÞ"ñN¡u¬ÚIÄ©+ÙÃ"–r#@sá<“ùgtŠ»¶¸°º’Öî†xΨ§êv¥^µ¬óÛÈêo‚Mèr3׊Ùñ.›®ÞÞjz¾¥i©‹Ëß™IUo•Á9é]¼ÃPþÛñCi h‹kAùr~÷=it¸í©ä¾`Ær1ëIæ¡Ü1ëšô¶[5ñÜ,×ZþÊÎß,^ÿ-Ø¤ÔÆ¿öÿ 4fÙµ¦µŸÍi¶=3’8ééþ4_Ÿù úü¿Ìó}Ôø’IæHaF’W`¨Š2Xž€SôöÓþÙÿ_µý›?cÙ¿wo½Æ)¯5¨í´ƒp#–eKsr@€ àséM-R¥Ëš‡‡u%!{í>HVf VAò“ƒõÅI{á}wO­9“ÍEÆåœôV&ºMkEÕ´k-*ÂÁ¥´Ží'–êi ‰É nʯnúæ?G&mˆ/tø4Ï‹ÀËOæ ×,WqÀúæ)]~?äþ¾óš“Ãú¼z„6bâêe-B äîo9çŠÌ'Ž8ペô;¤ºÓìmnÒ+ µ4•-ã¶á£€å˜‚Äá¤až1Ò¸ßi°i„P[´ÀIJñNA’9Ê6021žƒ­hǧC;uª-Ôn D»¨ÝQn£uKºÕê7P»¨ÝQn£uKºÕê7P»¨ÝQn£uKºÕê7P»¨ÝQn£uKºÕê7P»¨ÝQn£uKºÕê7P»¨ÝQn£uKºÕê7P»¨ÝQn£uKº•I¥H¢Rò9¨ïPDË º”!~¼LÐ’ønsZú%“û¡ ŸÿZ±®¢žÎv†pמ9zƒé]–rK-Ì@v"HÿÇ«3V¸ŽKÛBØ;_ýÝÃü Ki \Ï’k„·Ü2¦æüzb©ê:}Μëæ2¼mÂȽ ô>†µ%’ oç‡Í5 L&LrÙìqÔU[©Pi Ý ÊJ)]¸ùÉéیФh7z¬fc2[ÁœuÉcì*}SÃw:u»\Gp—P§/µv²\dñøÕÛy|ÝÞ8‹Ô.×ÛµÇRO±É=~†¦·™­ ˜ÞÇ“$…²®1ØvãÏ©óe‹š“í{Xúe”]4ží^ýKu{7ÃFI|ö(r *+3˜…B&Ÿîà¼Uþ©ë½Ÿîà¼Uþ©èÀp(ÝL¦ù‘ƒ‚ëùÔŒ”œŒhÈ#ô©RÂí÷bÚ_–<î]¿»þ÷=G=EW ä£¥©”„€2HÞ€$Ýš³w¨Ý_%ºÝLd[x„1 mAÛÏãÍR,d©©$†Xvy±<{Ô:ïR7)èFzƒë@ Æ1JRAêúÓ( äcô£w¦Rd½?å=T~U¡±q…6‘D¶óL&‘ÂìG@NqŽøÇZÌ$ dŽzRЕα=Þe¥È‘ylí wÇ''8ýPÈÎqÍ:æÚ{;‡·¹ŒÅ227QQQæ¾_îÊ´"Ö.!ЦÒ#H–Þi„Ò8S½ˆsŒwÆ:Ömü‚r@¤ãÐSh  ='WþÉyiú}àpÛØ<À¸î9«§Å—2ê7·š~™},ÁT-Õ¾õ‰W8û×?Ehjš’ê“G'ö}…žÅÛ²Î-[ÜŒžjŽû£ò¦Ñ@;OP _îÊ›EZ°»±] kkƒ$EqøÛŒr23Z—>,Ônÿµ|ñL"Ìv´'Ý ÏŽkŠ7ö™¨ÿf]yâÎÎèm+å]Åæ'=ñ‘ÍM¬ë—ZäÑ=ÊAp§—G²8×Рˢ€ºÙ4Ê(ØQü#ò¥€¥2Š~G<zЊeýÔn¦Q@ÝFêeýÔn¦Q@ÝFêeýÔn¦Q@ÝFêeýÔn¦Q@ÝFêeýÔn¦Q@ÝFêeýÔn¦Q@ÝFêeýÔn¦Q@ÝFêeýÔ¡È ‚Atj…Æñõ#šˆÌ’Å™R{Õz(äwÒÄ»Q²£ aœ~´Ö¹28i±aUh  5¶$ÂÌê¤dÖ‹R{¥ÚíòÿuFgÑYûn\öÔÙbk*~ÍIòöº½Oá¹ÎûíüëÊkÕ~È6?÷ÛùÖ¨Äö;/õCéE_ê‡ÒŠb'Ÿîà¼Uþ©ë½Ÿîà¼Uþ©èçÚíµ]NK]K‚=rúÔ¶™ú,Pæ7Îî­¼c=Êâj{›Éï>|›ü˜„1ðÔSRõVþºhïýt:¸íã·[ÿŸÃáÛ|ŒÜ’¹ÆIÀöS%Ò4++"¼žÙ&šÉgóŒ³ùÂF]ÊùesÉÏS‘\úkZ„s$«qó¥¿Ù†QH1cHÆÇ­8kš€Óʼn™Ü)EBŽÊ§¨V ²¡¤ÕïýuæÒ×þ´_ägU½2úM3S¶¾‹—‚@øõÁä~#Š©ERvwWÐëæ³A“YÔ¡¸•:{c¨˜nÈÿv<©¥‹E²¸»…î÷0hñÝ2Í4›Y¸$ne_›8QÛµsWíÝ­œó³ÛÚ†¡äÉÉúþ5$zÖ£ Ô1Ü²Ë B`£î¤cc×9©·õò«¸ïÕÿZ¯ò6¤Ó4[Çž-<Å%ÓX´¨–òJɨÙ!w€X‚ M¨xwN²Žk•žÞÞĤ‡{cí„g¿©ÝŽ˜1XÛwãS‡RIR;¨qå¼P¢Çû*î{Toª^Éa%‹Ü3[I7Ú9“Ýž´?ëúùþ?¯ëîüYN·|ƒâí?'sdÿÀ°ª{;Ë>î;«Y<¹£ÎÖÀ8ÈÇCÇCLLè¬-ôØô=wìZ„÷Teµ<äç;Û56·¤è:j_Y í–îÙ@‰ÖYšiêWËŒ‘´ñÇ&¹x.綆â(Ÿj\ ŽQ€w(!±íÈ*Õι¨ÞY‹[™’XÀ ¹¢BøünÇãC:M^ ªøŽþòÍnÚÝàXãy]æà“°ƒÛÖ¹ývÊÚÒ{Imã‚îÙ.'mÆ=ÙsÜqOb*å§Š®¡´Ô ²y—· $ l¥PŸ¼Á8#’ ¬kÛëFé®nå2ÌØp°¥n€W¢Š)€QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEWªü6ÿlï·ó¯*¯Uøkÿ ØÿßoçMìv_ê‡ÒŠ,¿Õ¥ÄO?Ü5Áx«ýS×{?Ü5Áx«ýSП…Š'ƒü?›S)–Ö%,Nß“«ÛŒ~"·¼˜çŒ_÷À®KJ†Y<-àÓnâ19U'hò\dú ?Ï´ðÌ ieæé$;éR4Ù„ƒç»IãïòØ=zÔßúù\}mýnw¾L?óÆ/ûàR¡&±þà®]LiÒÍ«ÙÜNÇIŒ[9…œC6y?ÜlíùŽ:u®ú#¶Ý3Ô ÈïÒ©«\IìP´Õô‹Ö™`(Z$ó=¹C³ûÃrÃÜdRE¬iSY=âÆâ w=Œ‰»wM  -ŸlÖ^pšŒ×·×ö×é<4k³•<¨s÷Cœõ8>Ã¥2Êö÷M°ÔÖßQ¹³…c[8îmÜI¸ä0Û·yAòœ‘ž¸Í!šßÛ:9±‹µ¢2ð¶¬_xê¥îc¦*Ìw6sé¿nµ….b(]Q©göãŸcXKw& –²Žök»›‚&ì&]†ZO/ní  : õ¢þ[[O\Ù[Åv"63‘$Ð2rÎýÀÌI#ŽyÅ`Z´tË, ùŒŒàÆ2)|˜çŒ_÷À®h}SQX,g}UnmþÏr¶"8ÉÌc9óž†Ão¯Ø››IWTþÑ¥¹hŽ-’N…q·åÏéLIés³»–ÎÆÙ®.#c\dˆwNIúU?íØ‹ÅÚÑ x[V/¼uRw1Ó·ÃÂ85[;IæicWŠ,³|ØÆBäàg'â²–îM;A-eì×w7M;ØL » ´ž^ÝÛ@ tëK¸ÍI5&;Hnö4¶ó)t’ '”`uÎÕ;S_]Ñ#[wvEK„WG6Í´+p¥ŽÜ.ÚÅRžÕ_ÃvZm„WFÞâe†V–G䙃Fì’Þ§kÓ‰.áÒå·»]?`’w‚ÒYD˜µÊ_éåµDǧܾ©%Ô kx `B fó1´#<ôÅ:;Q´ŸQÒ帷[‹Ðµ2ìf˜26Üáº{к;O&ùãýð(òaÿž1ß±5†{]jÆøÛÜKÛÍ ˜!iJ³l#* œ|§œW:4IfÒ§Óåk›}lÆ#¾9†ó„=Cgož”¿¯Ìgs8Š y%‹)E-²8Ô³c°ÏzzÅ (>Dc#81ŒŠáõ[I~ש{ n纵”I$–Näà—e$´s“LÔâŽ+÷7¶s=ëÞÚ KƒeHóT7D9ß‘Á9ïMoa_Kç“üñ‹þøy0ÿÏ¿ï\}¾“,v÷°Y¼W²jW"Y„d1ˆù›Kë÷1ž:U /IÔ–ÊïÊi`Ô¾Ã$r ²’,§1™œ«¶s‚={R[ªÜZ¶©%€·O5!Y‹yk· HÊjX<©Ñ˜Ùˆ°ì¸’5àã#Q\ï‡-m¢×.f±Ó'²·6‘# mÚ,ȳÔ|ÇdŒýj¬:(½¿‚+ý=¥·_¾%ˆ•¥R‡ž„Œ*‚þ¿«Y,ÞòKEHŒñ¢ÈËå‰çþùTÞL?óÆ/ûàW¥Ú:_XϨéóItúlÁ<–Ìæ)T¾í̓°ò98ªzf—©GcxÑ4°jBÆHåQe$&YN>c39Wlçzö gäÃÿò‰Hç–°­Ê¥Å½—”¯‘£¹9àòvœujú@ãþ4ú‚-G{¦M¨É§ÄÖïuo’5@JŒãž0>j;íSIÓ§HnÚ(äq»Nà£8ËQž2p*lbñc\%»M‘Õ8/¿8Ï­cj¦âvÔ¤N¼qªéé È9GùÁWþçß'Ž´º/ë¸úµýt7åÕt˜oÅ”†19eOõ¨fûªX  žÀœšžâçOµº¶¶ŸÉI®˜¬*c9$tô®NæÊñ5—Qáswlë ÂZÞuP Èux5©â2}OU³X‘ƒCo4‘M´íICFS'êášjK¨éPOu ’Ö>eò³±9äà{:Ól5M/R•¢¶UóUC˜å¶h›iè@uq\̺N¡êMlïy}¥Ü4þZ–RFØÁp¼\S´û‰¬oŸSœêWVÖú{ d»µòZ<BF ¦ìóž;h^ÖÿäËúÛüΪòâÎÂ5’kvec´y6)ü‘IZe¥ö›{§›øD_f‰y!Ù¤ƒÀŒfµ-ÈÐîÊ9 ̈0«–RÄ àzg?…TÕ¬öø~]ÆÞR^ÍÒ"ä@Kv'?4>£ZØš-oEšÒk¥xÄP•ºÜ« ßw W'=°9íVì®,u ÖÉ(b¬Œ¬:‚¬ØŠçZÕ./oçµÔ-­–ÞÝm» ¼Ôvlª`“‚@Î<öªgJÕ%ÓdtK©Ýß­§˜(kut›FÑ•R1âµGM¨êÚ^”OÛ"‘Wqt±‘ÐvT ~u=åÞŸ§Û-ÅÊÆˆÄ*æbz O°»]ZèV)c=½ª±–â9ü¦1Â±ï— ç¾3SêóH×ÖWKivñi÷gÍ bÁ¢a¹å€,:{úPô̺֋´ãhç£òíË’Þ%UIw$qÞ´c[i¢IcŽÀee@A¡ÇáÓVí!Ô¡Ôf’å­ã¶ŒGÜMÊUÝ<àŽjæ­gýà;[+…3~˪«»~$@ÀùçŠt7okeg=ÔÑD#…Fù@3Kl#žÖ)^Ö8ÙÐ1BŠJäté\|Py’¾›mk-®x†(%ŒÇˆÑCJBUIc©õ©5- .õ û™tã,§Q¶ !ˆ’aÛptûÙíÖëúûÿ;&ùãýð(òaÿž1ß¹£ïXI`Ía°äBñ‹Êb8Šg“üñ‹þøy0ÿÏ¿ïO¢€äÃÿ•M.¼!(›Sv‚H§ ò=Y|ãÈÜ[¿4Íÿû/á¼ØÉ‚ÑG©çóÅ6ãKƒMðæ%Æ£ͬÂàÜL»ÖI˜Û†A9ÜÝzSz6-Ò6?á"Ò¾À/~Õ˜LžW±}ÿÝÙÙöÆjÖŸ¨Új–¿h²˜Kâ¤à‚ê<ƒìk‘²Õ¦Ñt½KY¿ò÷êжÁÐÀò… CQNÒy9À÷­] ÷J²± ºœ7s^]âY¡ù•çqœ3´`qžÂ„‚çGXúž«¢%ÊYj{ƒ©u»4jÇî’ÛJƒÏ5±\wŒïíeìãÔÁ»ˆ©þÌ »í-BìcZ]Púõþ›¢§Ú.¤Šßí*î ÌŽpA’pà* áhrû˜m-¥¸q˜B7ÈÌzd šæ¼Wmªùw—ÓYÛIîc·crCB»Ð‘·a-Ôç œ§Šmµ&îúæÎÑãýÌp‘tÙ„oBÀ.ÎIn§#€8â…ÐG]e¨Gswyd"1KhÊ¥9B2¬=#ð5z¹ûRòxÚv*ªË¦Ä'Ul€åØœ ñ»µttP¢Š(¢Š(Ö«cgwmiqr‰qrÛb‹«1úÞý(ÔuK-&–úáaGqdY@äÖOˆ­á]GDbŒLúŒjÒ˜|k#ÅÖº ײZÚÍaŽÝÍÉ ïR~]„e›©Ï@=9ëþ@ÿOó:;ÿišd’¥Ü—ù\»‹IYü)­iâ[=œ,Aw–n\g'=+ UߨëF•2ª¡òæ5l‚W8Øœí­mRÖÝ&îÚâC2ÂÈî6©š×½Šö^ Òõ ·ºÆžkyˆÑüŸÞ€ÊûŽ)tý{MÕ'0Ú\&ð­&åé¹w¸{ŒŠä#7zÌ×Hõ[+2hCÛÛ´"v`>@wÇ É^MᙼÍwOUÔ—UØ2Xö›NWƒŽ¥ºsÏËõ¦–¿×Ÿù ú^_æwuGQÕìt¡¼•ÉŠ‘´ŒqÔáA8µz°üI¯&¼"h!¹»b‘ËpÛcŒ–võÇw$RcE‰¼E¥Agov×{Ḣ1Fҩ‚xïÇ%¬N ñjöÖö“I"å.„J\ŽŸ{ö¬ 5­7@ðþŸg¦_Ú¿Ú GÔÒ,ËÈÇ¿' êH¹áø¬`Ñ-âÓ®VæÙe`ÛÛ$±È÷&ŸqtQE!…Q@6HÒXÚ9]Êà B)ÔP{K =>3•¤Ñ“’°ÆëV(¢€UQvª…€b–Š(¢Š(¢Š(Uj¨Qè)h¢€ (¢€jïß´nÆ3ŽqKEQEQER2«©VPÊz‚2)h Š( Š( Š(  º†£i¥Úý¦öa ;•7HÉ8)šæŸiGQxÄRÌ‘ÆwŸ—œŒç¶3Y^.‚;È4»9¼ßÅw‘ÉªÝ¶Û [ÛYa3£}¦a•;‘²9#= IâVÓ¾Ñâí¢¿kXöh›8Ûåõ¶wç8掗¶=³îõxlb½šæˆâ´ L…8“=zóÇÖ¸»­>ÖîÞOk«K8^Þlñ0‡vTöäRê'í$2á¼Ï°–Ï|„ÍW.­ ;Ù÷;K]Mîd…M¾·2†9™ Œ}â¬qœñô5~¸½nÇû;RµƒE¶KyFŸxФ(çÂcw¨ïÃöž¸}*ÞÚâá£/PÅ€,i‡Þ8É'éSý~`vW×ÐiÖsrÅbRªHäêE:[Ÿ.î<‰ŸÍ ûÅ\¢`ížÕç¬rxÄp[½­Í”rÛÈ’RûT–ì9æ·‘´ÆÖ´ìO³}”-Öß ›¶®zS·õò°¢¼çMû.í#ìÞgü$ŸjoÎï3nO™æ³ŽºbŸ-•ºYêZºDP‡ZÚ—‡ æªíϦ ¡+ÿ^Ÿæ Ù^äwWú…¦—h÷W× 9w? õ>¦ŠDš$–3”u §AéY^(·†o ê/$Q»Åk+FÌ ”;#Ò£‡û?vŠfê?fo²[pnéǧ_Â’ëýwéýv4T²TLk…ûlˆdX€$íÏaø×'üz‡ýu_ýi¶–Ú­—Š4¶YÚ›‰ÃÍ:]2'00úwôÿ‘ªÿþºýSè#¹²ÿT>”Qeþ¨}(  çû†¸/ªzïgû†¸/ªzÕ²†;Ï [X\ZM,/l¨ÅõÔ1Z©;¤jŸe¹;@eÉ?Z¡f¸Ò,C|´µ‘ˆGdÉ= Ç#׌¯5ÿ L—?è:Íž—uÝÓ þÑý?º1-¥¸ísµûTŸóéqÿ|Qö©?çÒãþø®8øëN}Ù³¿ÎqpG]ßíq÷éýÑ…oiÍ»6wüç8¸#®ïö¸ûÇéÇ÷F<{ŽÇaö©?çÒãþø¨gXîe‚I¬.­ß̈•?+`ŒûðMrã9·fÎûœç :îôn>ñý?º0óã]=Á&ÒønÎqpîïö¸ûÇéÇ÷Fx÷ wÚ¤ÿŸKûâµIÿ>—÷ÅrŸð˜XÉŸôKß›=.XuÝïÇÞ?§÷F'%¶›8²½ù³œ\°ë»Ðÿ´OîŒñîgIö©?çÒãþø£íRÏ¥ÇýñX']…ó›K±»=.˜uÝèxûÇéýчjÏú5Ï9Î.œuÝïÇÞ?§÷Fx÷ 3NÖ$´žæhì2y’³)$œÐÀ«?j“þ}.?ïŠä¯üi§Yj1ØKovÓÍHDw-ò.H瑌îlcû£¦ÕÄw~9±‚=ÿÙÚ”»˜©Xg$Œîçï ˜ý>_îŒ qz&;µIÿ>—÷Åj“þ}.?ïŠóɾ)èé#Ç.™«£ófÁÝþßxþŸÝÅM÷gOÕ~lôŸw·ÇÞ?§÷FÐCûTŸóéqÿ|Qö©?çÒãþø¯=ŠZ1Gs§j¸Î'Ç]Ý>öÓîŒ]²ñþ›©—iú’óƒºàŽNî˜oöÓû£wv3µûTŸóéqÿ|Qö©?çÒãþø®NOÙ}¦h •ñe8b· H'ŽÛ?N?º0Ù¼ibªå¬5s·uÝÓæãïÈtb¬Åtußj“þ}.?ïŠ>Õ'üú\ßæ‡ã„ŃišÂ’H#ÎÆÍŸããï¦÷Fü^ПwüKu~sœMŽ»¿Ûãï§ÝždU™é_j“þ}.?ïŠ>Õ'üú\ßæÏñ{AÁ-§jÀ6s‰±×w£ñ÷ä?º1 ÏÆCúv°D€RluÝŸããïÓû£2VzÚ¤ÿŸKûâµIÿ>—÷ÅyS|oðáÝ3ZÏI@ë»§ÏÇÞ?§÷F7ÇO !!´ÍkæÎvÊ]ßôÓ¼~œtaܱëj“þ}.?ïŠ>Õ'üú\ßä«ñÛÃ3¹Q¦kYlç÷ c;¿é§xþŸÝ´~3øyÃìícœçc®ïöøûÇôþèÀ#Ô>Õ'üú\ß}ªOùô¸ÿ¾+Ìã?‡›9Óµ›=&Ç]ßíñ÷éýщbø¿ \³(°ÕA9Ïï±×w£ñ÷ÓîŒsÒ¾Õ'üú\ß}ªOùô¸ÿ¾+ÏÏÅ ÷fÇSÎq9wµþÑúqýшŸâ¾†dxΟªçœâ|uÏOŸý³ùîŒ)5X✢z/Ú¤ÿŸKûâµIÿ>—÷ÅyÅ·Å­úèÛ¦Ÿª†g “>X°ìü}ãôÀþèÆ³øçN,àÙßòK†wtù¿Ú?LîŒg*ô㤙jŒÞÈì~Õ'üú\ß}ªOùô¸ÿ¾+ÿ„ÛO‘\ýŽû¡$ †wtù¸ûÇéÇ÷F(ÝüLÑíîXê[¤ÝÊÎ@sü\}óÓÐtbV&“ÑH~§c½ûTŸóéqÿ|Qö©?çÒãþø®þ.• 'ìZˆ Ÿùx#®î˜n>ñúqýщO´ÆRÆÎüÎÒë»ý®>ñý?º0}f—ó°©Øí>Õ'üú\ß}ªOùô¸ÿ¾+ŠédÙê6z\×wû_í§Ýiø…¥¾ïô-CæÏK‚:îôn>ñý?º0}jó°©ØíþÕ'üú\ß}ªOùô¸ÿ¾+‰oˆ:[nÍ– 3œâàŽ»¿ÚãïÓû£|AÒÛvlµ»=.ë»§ÍþÑúqýÑ…õª?̧c¶ûTŸóéqÿ|Qö©?çÒãþø®(øÿL}Ù²Ôsœ\×wO›¼OîŒ<øïMpse~7g¥ÁwµÇÞ?N?º0}jó°©Øì¾Õ'üú\ß}ªOùô¸ÿ¾+>8ÓŸwú÷9Î.뻦ý£út`oiÌ6wÜç \0ë»ý®>ñúqýуët˜=…NÇaö©?çÒãþø£íRÏ¥Çýñ\køïMçuøÝœâàŽ»¿Úãï§Ý†ˆšZ/c¨óœ…œŽ»¿ÚãïÓû£Ö¨ÿ0{ ŽãíRÏ¥ÇýñGÚ¤ÿŸKûâ¸øüq§\À%—Ádÿ†œú7xý0?º1#øÊÀç6—¿6z\0ë»ß¼~œtaýjó°©Øë>Õ'üú\ß}ªOùô¸ÿ¾+’>4Óܰ6—£9Î.uÝïÇÞ?þèÓÆ6Íå›k´ÞH,×ETgvNwq÷ä1Ñp,UöƒØÔìuj“þ}.?ïŠ>Õ'üú\ßÈŸiÎ û%÷Íž— :î÷ãï§ÝSã;,>É{Îz\°ë»§ÍÇÞ?§÷FÖ¨ÿ0{ Ž·íRÏ¥ÇýñGÚ¤ÿŸKûâ¹#ã==·fÒ÷œç :î÷ÿhþŸÝSã+, ¥èÎs‹†wtÁÿhý8þèÁõª?̧c¬ûTŸóéqÿ|Qö©?çÒãþø®+þý.F}Žÿ‚AÅÁwtù¿Ú?þ跴›=Cœô¸#®îŸ7ûGòÝ>µGùƒØTìvŸj“þ}.?ïŠ>Õ'üú\߯·4Ö›;ñ»=.ë»Ñ¸ûÇòÝkxûLbÀÙjç8¸#®îŸ7xý8þèÁõª?̧c´ûTŸóéqÿ|Qö©?çÒãþø®,øûL|æÏP³Ÿô‚:îôn>ñúqýѼ{¦6ìÙßóœâàŽ»¿ÚãïÓû£ëT˜=NÇiö©?çÒãþø¬­GLmRGË«-´€,–±í¸îË»žø"°ÇÚcnÍ– 3œâàŽ»¿ÚãïÓû£Þ?Óvlµsœ\×wO›¼~œt`úÍæcS±Ú-Ã"…[9€t¥ûTŸóéqÿ|Wÿ´¢X-C'9ÄäuÝþ×xþCû£ ˆºIÝ›-Gœç‘×wû\}ãôãû£Öi0{ ŽçíRÏ¥ÇýñGÚ¤ÿŸKûâ¸SñI`Oص›=.ë»ý®>ñúqýѾ#é-»6Z9Î.ë»ý®>ñúqýчõŠ_ÌƧcºûTŸóéqÿ|Qö©?çÒãþø®þ$i8$Øê_6~ìäuÝþ×xþŸÝ§sñkB„°’ÃUç9Û6:îéóñ÷ÓîŒ5Z›Ù‹ÙMt=íRÏ¥ÇýñGÚ¤ÿŸKûâ¼Ñþ0èbÚv¯Îs‰±×wû|}ãùîŒQ—㯆U[MÖ»çl uÝÓ÷ŸíÈtcE$ö%Å­ÏYûTŸóéqÿ|Qö©?çÒãþø¯#o>mÙÓ5¾sœJ]ßôÓ¼OîŒ#|zðÃnΙ­óœâP:îÿ¦œ}ãùîŒ2O]7l£&Öp=Ò¹9ñ=áÁu8?îŠÙÓu(õX^âÝ."1Ì€ƒ36rÇ<`ŒaoNWh# ÈÑyþøþB€;{/õCéE_ê‡ÒŠb'Ÿîà¼Uþ©ë½Ÿîà¼Uþ©ènÝâUjÛzYJ3·§+ßÞ£§CŒ!Ód„â)@ô5ëÖëÿ«VÛÒÊQ½9^øöõ:dx’F-¬3ÇzƮȴtÿaŒ&àWzÕ¸ÓAdpWÌü«4˜<ÒårO~µ£ œh0¨3ô¬ 'C&|íŽûHÏçQ æGòͬÇ=þ\:´ƒ<ÇžqÍ MbîÑÆ,Aަl즉YÿÇqZ¦,ö¥Ú–ƒ2ôëK—¸šG–gûÒ;cõ'­t–ýšî)Gð°&©¢è*e=é§gpf׉­t›ÝZï- íöd D¥~]ÍÇê:¢šg†ˆÒO×í-ŸåSßÊ%·Óå+òíxݯöjªT dnÓ­vs¥m¶áF6·Iƒ¢~ø÷{OƒÃö@}žÞè`ç—SšÍòƒòªÖ¶pÈ>Ç­c±µ³G‘äÇtÛqû½zzûT¦ÓC–?žiT‘Ч#òV@B8äûÓ‹\œàSædò¢9>øVæi&[ÉÕ·mª2}™qà} CF²ßw+PJ$Sƒ¸ M–™ŽIëš[•vºžc¯øzm;R6Ð3I®õr1€I'¹íê+žñ£[ÁjBü«•'OàkÖüÓ$ä®yãӉ攨*¡­äËa±¢«î 3Z1òÅU‰oj¼£•fbù~üU‹ݰlóŸJj·š”{ÐÂ6TÕY¾[‡lgþ‚¥¶%¢ÔW$‹Œv+Yb>|/ñ Ú.?¶cãþ[Çÿ¡ ô (ÝJíØƒ^{£øœ'A‰Sø¯Abv Jñ±ß=*;)Ú¬q“Ž}¹®[ZÖ-ÈnªÇùWE~áÁ9'ŒÿÀþ•…w±üK§ÄË”yV23Ô@GëXaÕçcY4•ËP>Bœ1ÈïWDƒnÜ×Os éÉlî–ØeBxsØUtÐl-¢2ß\¤QîۼɅÏÔ€=«»êR¾èåúÕ6s2È p?*(ëÆkRîïÂV»ñ5ÕÓ«m+ þ r—šÌbwû5‹ˆGÝó%¿/ù÷©xb©›Yã9üéç85«cáÙ¯¬aº‚â/&xÖX÷)« ŒŒqÁ©ÃWaw,ÑpGÌ?˜¬²û&ª½7ÔÉP023OQÇ5ut-Aä1¤JØÿ¦«þ4’éw¶g@GІþUŒ°õVñeª{2ÆÏ_ZR1’{úPC eH縥9å«;êQ ƒ$޵›{»Ê8Èö­'Àã©ë6øí^„UCâCZÍOö|x!EZ| +.1ÀëO?yŽsØóMîB#'±§=Çn´Ö#0sÖ–& ‘Îyÿ?•$0aƒÏ¥àqù‰ýiynØéï@ Ïzv€äsL„·–ž`Ãí†zq#Ëc»¾”!3& ª„$óøÓò?ZŽ'ÄK’9òÛ‡¢_Kaý¸Ï½FÌG’­;¯%úÓNÜpr=iÐø'ƒùÓ·‚=½©ŒsÅ <àΩ ’1 g'Ûša9ËšBö3õ ¶GáLCOüM'—žqÆ: 2 î)TÀäz`>œqõ¨dE Œú‘V—héÄS$ ð0=ÅRb*²˜šæ¯ògÚ9ËWIrþ\dŽ+—”—»Èäµ×‡Z܉ìEpvFNêåç²0~½tZ«ì¶a‘ž•ÎLÅܱêNkÓ¢´¹Áˆz¤F})(Í-nsŸ\xIwi—#nïô˜Ž6ç£cü¿Ô7þf‹¿÷‡òï .í2ämÝþ“ÆÜôaì—â:†ÿÌÑwþðþBÎÚËýPúQE—ú¡ô¢˜‰çû†¸/ªzïgû†¸/ªzÛ·_ø•Z¶Þ–RŒíéÊ÷Ç·¨éÐã#Êo¬>̑Ȥúž¿ã^­n¿ñ*µm½,¥ÛÓ•ïoQÓ¡ÆG+¬ifçNd…x§r¯©‡ò¤ãÍ)JÍZA5e=¹ªÊCA⧉±Ö¸Í‰Â”õÁàÒ+ƒNÀϯ҆íÇZ03Rl-Î 4BÿÝ¢ã¨"¥[yci©—O¸=#cøQf@qÁ§‚}úUÔÒfc÷ãÅNºD™!qêi¨Ë°]äc&šñd.E™qÎïá#FÏáVíí÷ƬqŸ¥JÚL¼l•ª¿îB#Ú­Cgä¨P䯦?úõÓkY£7nä+ÈSøT¢Ø×"§h”ãädÕy/RÞcªùÆFõ¢rPWá7hŒ12žG¢‚„­)Ô­Ÿƒ½=Ù¢mBض<Ãÿ|š…^›ÚEº5èiààŠš#Š…î­÷ Ë=>aSÆê¬¤ð¤õìkE4ú™¸²SJž“udU34e¸ÈVÇÊßÁü+À'!á8錊ú^%Rq‘^i«ü/Ô.õËŵK{‰ÞD0Ú¥‰Çãð¥(ó;¢©Ë–éžJzQÿ,Ûð?çó¯Ná8ÛûÝXƒè¶ùú®?Å~ ê1[šx¦‹zKå•䂽O#ÿÀ…U´cÀÙ"¯Tarjòr3TfNœŠ=B€ñíVâ‹Îhí²€¿^ÔÛ‚>Ò£ý‘ÛëK•9ÉÒ’UW”>îƒZŠÑr‘¥ (Nì¡a„×úáC1]ñn¬NëŒHâŽS*¯ÏýãZqiº­ùܶ³¶CIò‚=‹`W,òꘆš:V20[’ßÚĸ2‚qœ!Ïò¬k«Å—S·¼ˆÐ8‘t$#<ú­l[ø:êBMÍÌQ‚2ç>ý?­_›Â–1X\˜Òi®<¢cù¹Üާ×5ÙC&Týç¿õØÂ¦:RÐÆ»ñ>¯¨1„NʲP.9ô|Üúf†µíJC+ZJ¥ßç’àì9õ;¹?‘®¿À$¾dDÌŒTüÒ† ß÷ÑÙkªÅuÓ¡ \ð±…HMÂ+c‚³øy!*×·ê0ܤ œ÷Ž0U<[á‹I·¸´3ó¼·ßó #cn:sº½²|OmöŸ ê1™„ÈJ®IØCãñÛÆµ•8ò´‘ËOUÕNRÒæ€æKÍ2Ò3ËlÍ ;î…tRZ³?ÈB Ĥs×¶=ëϾÝ3R±3Ê¥¡3ÆŠHh!¯ÌŸ•zyHÿz¼Ö}–ñÜA!`Ìà €¸ãžzŸÂ›t¡í™Œ[deÀ w瓹y5 ¸Õ„o$?½|GÌØíéQ®±©Äâ@^QÎw’Aü?úÔX.lÏätA·#©ïïÅ`ÈJ¾Ó…aÔzU»M^æêö™2¶Òxxìõªº¬kç 0Êü?¥yØè{—;°“÷š*JNN:zŠÎºÜÁT·Þâ®»áO\V|ÒuxUþb¼È/xï{&p‹ŸîŠ ~§?\R¸Ë(Çjk‚zÎj.$2A@‘N(Œp{zúê6ž¼â¤ 3ôi&6ƒxV9àqÏjvì©+éÁ4ÃÔ2øQ `Tƒ…ž}ÿZ‹€£‚O¨îRÂB£¢ð:TA\Aæ¡¿b–ï€$SŽâfzdF žžœÔ€å²zTQ¸ÈÍ+9'tâ…½Ê&ÀÇ=~´ÿ^Œ~t€3ÐÓDb:t¦•òi‡%²céFHçª@)Æzri¤`pZ^qœžMàó“ëWa ƒÏ<Ô í“Jh;oƒŒž:–±ÜxaŒT26ØÉ©ä€3‘j‚vÝÍ8êuìÄÆ}k.]½\½“ƒÒ©(ÙãŽkÐ¥DÎo[zÔœ"ärsXŒsš½ªÈZì¯QŠÏ5èÓVŠ<ÚÎóaEw­ ®<$»´Ë‘·wúLGsч±þ_ˆêÿ3EßûÃù w„—v™r6îÿIˆãnz0ö?ËñCæh»ÿx!Hgmeþ¨}(¢ËýPúQLDóýÃ\Š¿Õ=w³ýÃ\Š¿Õ=mÛ¯üJ­[oK)Fvôå{ãÛÔtèq‘‚&Ü̬7£ÉþU½n¿ñ*µm½,¥ÛÓ•ïoQÓ¡ÆGÖÒ6ð‚ªTèP—óµì¦DåYˆïì=êx¼0å¿y:þÈ'ü+ …ĨO§ ÅG²î?hч`O¿+·Ðb®Å£ÙÆs°·ûÇü*øZ\{STãØ\òîW[ eéÿ:Ù¡ùiÿ|Š”¯¥4‚>T.f7qÚšÀÔãŸZfÄÚ(À£4ÏZ,ÕzqˆTaˆïR+P|ªŠTdMÊHÇ\ÕhSZ;×ïù²N}iú}½”Û¢¸·WeäAÇáþy«,€CøVuÍÃÛN«l7]•%ƒ¦[БPà™¼j´hM¤i’–Ýÿ\ÕI|?bÃ÷Rʇý¢ü+>kK»Ó›ýjëä6ä[€8ùK½†H{Ñw¢iɶêÚi“y¯%}¾ãs0ªt¡ÔËÚÌ´úDñE¶ßQ“‡*?CIZ嬙[»9ãÛ€³†Èü@ÉüMr:–m¥Z‰´éìñ@¶Ô-ã>a礋†Ï ãÜâ­ÙøÖÖ=={9 •~_.6WQ×lÿœ÷¨öPZ ö’z3¦ŠçS0»ÓíÞ"p ´Ø züÝJçüw¡ZxŽÁb¶ŸÊÕ,K:C2Ì çf1¸„;õ“qã‹¶âÚ$‹®KÇðéÖ°|ûëéæ™LóË!Ý+ ’sÇ>ƒèÀâš§)iÉk#›¸Ðu+Ò›.F‚—\ïÏ[ƒOpƒ{öšèáðýüŸ|GÞlñøf´`ðÔs4òHAÈÚ6Œzµ× Yo¡Ïô•ÚIàÏø–ø›TÓ<µŽ7\¡‘¾r¾@=r®[ð®ò¼òøÿeøßMÔh±Ìʯ,Íò‚vçÛÀ×¢â¸R哉åfµE.èn(8æÞ³ïµ­3MÞ.ï¡Ó£Ý¹Æz|£'ô¡É-ÎÅÉÚ(òË¥Ðt@eGäRW‘鶬u› Jl¹µp|öï\~/Ô l< ÃÞ­§ŽHȖ͘žãŠÑáj®†J¬;LNNæq†Ü¹çŽ@« ôè8®Q´æû½k!|G¥Ìêî> ÕƒªXÊÈÂò0 Ýoʳ”eÕ Y—™¶¡lŽÂ¨êó„Š(ÏVlqô©F¥fÝ.">û…gjÇtѤLœƒD7‡B‘ô¥ÞU²=x¨í¢`,;c'5/’wrGàkH¥`{-òƒÖ““Ư4›Xgõ¤Ã€H÷¢Ä`zFqýh9#³Qþ"†HÌqǰ¨öp(gÁ'ëJÍ0AúúâšÜvÉ÷§’GåL㡵¨òªýÑœö'‘\[“¶H{‘Jè­L£‘M$âµ/VØXÊè±£ Ýœžƒ“ßÓ5’§&“;TŠ)ÓÇŠ:sHOµqÚ·Ä+[+élí-$¹xdh¥vmŠpqÁ'ž:k™¼ñÞµs÷fŽÝpA çñlœý1EÅcÐõ›¤±´7$¨`B¨fq=¹üþ™¬×´67-t..$äh¾}çИ†x¯?š{ëöW™ç‚á^W,qìM a)åäUúsPæ–ìÖ4§-‘ÓÞxÌße´Qæ=9 ÷¿jÈ:α¨ËäÛ´Ä’6Ån§#cžÞµsj°*²³žs޵ìZsA.o-¬ 2 ‘b@]Ã8ãŒóIÍZæ¡yYžomárý„¯À$‹Îø9÷¶ Ý´ø{½½‘ɤ .Ôç?®ÓVn«ètÆ„æþ,Э´)l.ì­ØÅ÷dY>d,¤»Ý¹ã¦µ£dxÕ¢`Ñ •èGlV·Œl>Ýá«’-ñp¤¶íûÇþø-\Ö…pn4˜ffˆ˜˜•ÇN€zü¥kÔËj^ñg‘šÒ³RFŽ(¥£½SÇ0¼Ole³†`¼¦*@è‡$þ!GãM‚_:—åù”· =Åkj6æïOžRÎèv(le‡+ÏÔ ç4yÄ–ÍA1·@:)äsßÕáæ´ìÔÎêôíØÑ¢Š ˜€RkÆ,ÏÕáZ* F'°<×ÛiWbÿI¶¹.]v+Œ¸á¸ÿxâï/mM¼±yŠìW‘žÔýZÔ`±k9.åW2ö'G=rsžõêà+ª)óè£âwµ÷Vöʦâx¡ p¦G Ÿ¦z×>º?‹õ@L³ $ûë™uíòe¿«¶¿íC3ÞßÍ31 ûµ Ï|“œþ”ëç¸zz'Ä-»9ÿêzf§mväÍ2; ÛHP¤|Þ¹!*Ö_x‡U@4ý1xØÒ¬lø~äò¨ö9Ç­mßxOJ]ö-9Lïh°Ä¹ ¨ Ä‘’8ã“T| wçhMlÅ[JÊ~öÖù²~¤·å^F';œ©Jµ%ªiÐÂÑÄÉFkbƒh^(ÕÇüLõ#OòI™ÔzìOþb­ÚxO‡c\Í5Ã)9"0íÀÉýkª£ó•³|]_µoOêç³OFš´bp>3Ñmtû )l ŠÕÚ&Á%œ‘•äòqµ¿:é¼|/ü' ^ríÙ |¦B€~U#¿ÈV“Å6ŸkðåâèÓÍ ÿ÷æ8÷Úük™ð%Îá§¼Ø ÐÊ‘úèªç#Û`¯{'®êáí'v™ÇŒ‚Œîºž„t{Û¢8n[<žþ¾ýê•Æ“m(Ù" Spw‘ôõ¨æ¾´´œ@áÁpŒÂg!Xƒ€Nî:Ê K»¨ck–(ß.ÖæË-““ÐP}A>µÎBí­˜²¹†HѼ°¬ä `/¿ò5ÍëÏ·_¼íÏû¢º¥7«ížtåh ,ØéÃ×+ÕŸÌÖ/ˆ?½`?é\÷û¿™Ùƒ^û*o®=óÒª]¢KÎ=ª×–¬…±€OëQI à×—g©è3™šÁr~SÖ kî¿¥tÀÈæ«4$ç®;WTk37Ì6Ó“Ð}*#¥#t_Ê·L Ü~´ñlG´Ußr]4sgG>ôÆÒHãœû×Sä6y­!°=>´þ°ÉöhåÓN”ÜcŠêô],Án3Ç’M$VÙ`JŸ¡­›e ƒ냊ʭg5b£Wt*ضKdú{ÓŒ½1øš´£ éïMgr~þ@õ®{"îÊMׯ4ÃÀ¡’GN)/o×½KC¹@Â3÷IÏjO' Œš¾]c´œŽÀSLˆF6=hÌÇàþèÔ÷вÏópÎ)Táx•À„'ÛŸ¥G$ Î÷â­cÕGJ†i/éÖ•ØÊí œíéY×yÁ>Õ~GfŸjͽá&·§¸ÙýëóYÚÌ @F$ãŸÖ´ÐmçjÀÖ%ÌÁa“^¥%y#޳´2ZCKI]‡ž´R¨,ÁGRq@ZøIwi—#nïô˜Ž6ç£cü¿Ô7þf{¯÷‡òï .í2ämÝþ“ÆÜôaì—â:†ÿÌÏuþðþBµ—ú¡ô¢‹/õCéE1Ï÷ p^*ÿTõÞÏ÷ p^*ÿTô·n¿ñ*µm½,¥ÛÓ•ïoQÓ¡ÆGÇww7QÜÛHÑËÊ²×Øöëÿ«VÛÒÊQ½9^øöõ:d|½á¯ Y×ÍpºdÀrj\”JQrvGqáŸÙëv›gd‚ò1óÆO î¾ÞÝ«{LñL:n¨¥ˆ[&ùd'Óû߇ùëW|ðšÚú¤D;!þ,{ÿwùý+g_øS¤jÉ›[‹› ùB6øóêTòï¡D•IZÎÀ•8üZe`XyƒA`;ÖáíDÓÅ”×_E Û¨H,t §lÆjYuìœ<-ŒâT)üëG+neÉ}‰µÝrÈJÀ<®qyûÇ×è?ÏZòwÇzÌílgÉ<4q’ˆ2;÷?‰®›Å1G{jÜ6ñ’é¿  ä;’}Àö®\irÌhÃã%kÏ«QûKI^>GÑåø8O ÍI¥Rú¶¯oOóOÔ.¥º’6/¬¶W>Ç<þuÞøcÄ srt«™¼ÉDeâv?1Æ2¾þ£ØlyõÞ½gllí•PtyOÀ` è>¤&}a¥W¹ÞÑ ù8äãÜ}3Eý§2VFØ÷N_gV\Óï¡éYçñI aANËÀϧoóíT–è 欤¶°8ìGùÿ<šíRLù†‹@Ò—¨P85e °È4Ьy'ì §‰`§Ëºe&ºF{ž?ïVt)FWƒÔþuÞ|HÓ–ãBŠõ@Ýi(É/Œ#áNr[gë^}§¸h wSÓù5•TùNœ3\Ö-ƒEèîk˜î#¸O6Ý×Û"»O_-Æ„m A%¬„mŒw~¤¸ü+£à›£eâY,É.å 0'ðÜ?ÖÅ£){³Rù‘KE&£^4–6ŽTWVF ×˜hJÖZ­þšïæ˜ùÂ’ŒTáO®sôéw7vÖhêâŽÐÒ¸PO§5æzþ§gÿ rêv2ý¦2“*@VÁB¦~Pzd×N§³ªŸC‡MT¥n§EI\áÖõÌ­žK`¶ÓõàÄQý—«_gí—[#n7g§O”q^´ñôã¶§—C(ÄÖÚ&ÅÆ¥gkŸ:æ5 à¨9#ð×"—‘Ùßܼ »3lUùT åzú?è-ü7g Ìóà«ùZÌñœvS[I…Œ®Ýª1ÈîO¾Jà­‰X†£-Qd•0ÔI2“êW²ýÀ#õÚ¸Ïçý*Id9’Bqб$⦤ë]Á҆Șъ#XrO¹®“ÀwkâF´Ì….£e Ÿwrá›è¡‡ü ¹üÓínÿ³µ[KìHVUÙc8f‚Gâ2?Ã2ê˜iE!U‚åÐö®ôR°!ˆ=¨÷¯ÎÏ_ìêzIÁ ™1FNX€wFÿ®lMwæ¸?£øÓLÕ‡— 3`K)䜲?ë›(®¬2öŠt¿™?½jŽœ$ù*¦vXæ’–«]_ÚYcíWPÂX¢G [™ë^4bäì•Ï£º[“:$ŠVDŒ0ÊGwäúmÜúˆ -¤I>Ï þ!ÇöÕy®ÒïÇL¥kn¶ìÌ%DÎàwÎrÀŸÄ×Óä˜|E''8µºžv2¥9$“Ôìm/¤{¯2ä ‚wýî€FxÜÙç}9éšêÆÒ @²Âf¦l»sNxëØöªxz+ô‚êÞèÎ’.åryŠpAß“ƒŒr8ö¨Æwme$ &è˜ÙÏËÏ'®^ßÐ׿èp–ôéTØ«Ç,²¨¼Œnl‚s$}3ÛæüÉ®jüí+à Ąö,MlÛiÚ•¬°|óy^tLñ’¬0®§=N:gŒ~5ƒ6ä¹”öÎEy¹‡Â‘Û‚Z±ªÌ ÉÈëÎ)$,@éKÔdšs®Œ~µå¯3½•ˆn¿Ò˜P’2‡`/r9§`y>ÆÅb¸…O sõ¤0ޤ ý*Ð$1Á¤Ž ÷Å.f*2c®i¸•\;Tgüi¸JçðéO˜,F›WƒUȤAŒ‡ü¨V?tæ¥ÀÆ1ÏçI͇)gÍN€Ÿ ¨üõ N W–ÆóëÀõ=Ï<œÒçaÊXYC­žüT- É©ÌW8þµ_Ÿ˜ž{G3 ¶6Ÿ×4æ%W·>ôŠ2BjÇ8úS»͸;‰{šwÈz5.ÜÆi¥“Ö„:…Rr?Ïœ;7\ÕùÆZΙ°ØÒˆî40ŽÍYú€ÛÁÉÆy­–n:ŠÌÕí$àr+¦›¼žÆ[aõëõ®ZþM÷rÙÇå]-Ä‚8I-÷r~µÉHK9'½zØu»81NÉ!†’”Ñ]'U‹$Ýr§²óUëSLˆÝÜž´ ŸQxIwi—#nïô˜Ž6ç£cü¿Ô7þf{¯÷‡òï .í2ämÝþ“ÆÜôaì—â:†ÿÌÏuþðþB‚ŽÚËýPúQE—ú¡ô¢˜‰çû†¸/ªzïgû†¸/ªzÛ·_ø•Z¶Þ–RŒíéÊ÷Ç·¨éÐã"Ÿ„¼¦øRÍçÝãç¸qÎÙ…\·_ø•Z¶Þ–RŒíéÊ÷Ç·¨éÐã"ä¯%©še•PÛŽ=ÏLúý)Ä$Ú/í¥ÛDN“D’¡Ê:†Sê"žØ@=©²Añ˜å$CÕXd¤œ v9Ûÿh×Řۘ\òLGü:~Uà<=ÿ–±f–¦QÄ%üлQÈ8*<¨Á?ï/ké¹dH!yeuHÑK31ÀP:“_'øëÅ·þ1Ö¦židKØ·¶'å‰LŒãw<Ÿ|g›Œo{F­E¤[9)b¹¸·-“ñ¹›?løG^þȸ”ÈÌct .~\ärG®*χ|%¹ÆK–ˆF@ás𫬸qô{£òëÔ61š¦´Û–¯SÑlµ{]V<+C#c;0ki×oe8dµ„Æx}Ÿ)#òæ¼VÊî{;”x\† 1ƒ^©jæ{H.T »žøöÈ#ð®*Üôí(³¦Ÿ,´hìÆ§~§Ûü+«µÑ#{$–Y¤ŠG]ÀQî r^ÐæŸv§r[ì°Ú­È‘²8Ç ®®_iÿh{8gY/#Ç™o‚$ädÞ#žœŽk¦‹Ÿ-æaUE>X”.üaÁýA«]ëÂ×ìd‡æ>[ž0݇äOã[µñSV“GéxZ¾ÖŒgÝeø‚ÜÜi2´dHüèIü+V™$i4Oƒ(êU‡¨4“³¹­Zj¤S†„î‰}GóŒTQ+E,Iá ޏ#ƒR⾂Œ¹©¦|’M+1:šŽa˜Ï·5#2¯Þ`>µL„=½*+T¦¢ÓdÉ«Xõ¿ Ý}³Âú|»v•‹Ê ¶ãò™>çnÔšhà…¦šDŽ5åØÜšòMó\†9ôÍ:S.^U«@RryÀéW×ÃW7R¬Ú–¡$Ò´œ—lznnJù%‘T«QÉ4¢Þ†°5ªë¡Ø_xÏD²Þ>Ôn$\|–ë¿9ôoº:â¼OâH¼C¤zqAnå–v|¶ÃÁc'osÐV­¾§[`‹q#â”îÏáÓô«Wv‹>5ªG TR0 ãÈàש‡ÈèÑ|÷»G¡O'’W”µ9ä¾ñ±LÚ‹¬Y;X7—»œ¸2z´‘xrbfÜ“‘´úç®Jw‡.|Û) .I…²£*7#žü†5±_I€Ë°‘¥ Sàó,ϫʓ•’eXtë;|yvè;ƒ¸ƒìO5•âH>X.B Á1³óyQú?ç[õŸ¬ÃçisáP´cxfþ9'ë·#ñ®ìMÊ„¡ÐàÁâeT'7}3¼ðÉ©xFÌ–š``œl p ûìÚé[L#ºâ¼³áljKŽöÁŠ™„ê3ƒœmb}F+ÑÄñÈÏ(~âká*baNn2?C…J<ȼºxί0¸{{›éå‡\’3§”“Šô n ËIa[¯$È¥7ªËžàö5Íÿ`Yˆn°÷ˆθ±U•T”¼=7 ¹&%sŽiÆ(ÈçZëáå'tW*ç¶×ùT áE\•¸]¾Ú¹%ÒÇKhÏÆÜLÒ8ÈïWÛEÔ!ÉÜ· ÅÙ—j>h‡=#?Η,ûÊJâç{Ômj§'= h;ŒebfÐ…Aöy×ïÄê\¥³ê˜®»•M¾XdøÑö\÷íëÖ­6Ý£vQšj¼nù'Ý©½·™_ì`uÜ(6ênX­\ C€i»œ³ RæC³*‹@07¹íA·ä·9«A²GB)­–a‚>¾”] R£!ü}=i¥$ÀåsÜÒ®l G·¾sHF?áEЂJqßß&¤”HϦâMLxÀnÔ œ¯õî+™ rųêؾÙúÿõêRŒGÞçÇ\Tx‘>brLsHvñÊ ‚;óULL>•mžGÕ¨[Ëm‘È‹z•Ü~™ÿ©qq v>c#œ$Œ{òO_J•ny4ÍeO‘&™'…üEm£™–vùX^sT-´„L-ÍÙû9vMëƒÓ##9 Æ…'f]ôºgÑwš…Ž¦›[O+ †4R2ƒŒóëÆN3Ï­yÔ^‡WÔ gÔî † >˪ACæ•Æ àq“Ðzaq¸ú—‡´ØX„—’¨k“¸qÓ ÷xç¶kRæ/m¤µ¸Œ<.0ÊN™iYß©“”z?ø£Å¾,þͽðö»sÈ·Zê-ªdØË àÎ0gœŠäbË©±%°rkÝ5› Í Þ[›³2n´”à4¡z ð©Á>£¥ráÑYšY'hb–6Ã2壌.YOÌç·@1ÏÂpåjJÌÊQ’i§¡—ák[+9íbiÒB¬_æ'¸8=:ãJéëŠð•ב©ËlÙQ:p Û—'ÓÕÚ×ÃfД12MèõGÔ`d¥A4¦¼i"4r(dpU•‡¢œÑ^j:Ï?°Sg¨ÜÙ»A+¸äd©#î2Z•‰c6ZìW¸}“(,ÜGÊÀ÷qùÕ‚6õê+öNÅýg÷GÀf´=Ž!¡)i3QË<0ÞH«ßò ö¥(Å^NÇœ“nÈ­§¿ØüFQ¸Iò77Ϩ¯7w÷"¬²½þ°Ík Ýñu 6ÖõSˬ»7·pöÎ+ÍÌóFœ}މÜðqXWJ¼¡Q߯mÎRÃá¶•mµ¯&šíÆw ùh߀çÿ®šÃHÓ´À•œ»w" Ä{·SøÕÚ+åëbëÖþ$Û"0ŒvG–k â$¿*EèóNKoŸbdSZõÄÛF‰4íV‘Ɇ#'ñ“÷“ÃkŸÆ–Râæ;$P둃‚2+ô,ƒí°q¾ëC¿/Š?¼uqE{g rv£ì>'»´/òK¸¤qŽ3÷Æ}0»…mšÇñ1z½ñvTÀÞ#1 rߘlV”÷vö¤‰æD`2TŸ›òë]¸ ‘Œ%;Yþgå¼M„”1ׂ¿1-#ª:‘C£ 2ž„w“?ˆm£ "G”ŽÿtǯéY>&¸b|’‘€r6®ãô$ñúUÕÌpðÒ÷ô<º9N.¦¼¶õþ®.$¶zòFìŠä´ÈÐÀ” ï Š£szf¼½._ÏJ È$ó>aÁ`sÏã^“lèÈݧœ¯B=«àsH¯h§™ú.¿gË-Ðç¸Á@ÏN[­H—.êOÝ4ƈ²ü¸c“×µä ;"±û æ¼{³¾È{O'˜2ÍôÛŠU¹tr (;‡C@U –'ƒÛÿÕKånä9àÕ„˨\t3>ÜpKŸåNþØþô°Ïð 8úÕp€¹²€l(8>ÿÒ‹¢5IÙpËû°§C©˜ÜâÁ<¼Í`ÛºŒà§¯×õ¦ÿz®Fzç'8úg?Ò©NK¨š¹´Ú¼¤¬¶àžá›u'üJœ€l‘?ÝŒåYENâä õúŠUf8fœ|¾ž½ðj½¬û‹•_fÑæ‡ ˆäõ-ž¸õªí ir©+w08ï(~bª¶í„¿’O qžžüqHŸ((q°¯=èö²¿@±,^fwÙ~Åù@!¿¥J<7r§ "õ'¢ûª?\µ »–ßö­ 1år;ð:ÿŸjnµþ( ×¹)Ñ/ ŠCÿתré÷P¶7Îz*æ´R¸Fȸlúš›ûjä ïíEé¾y/¦Ý ÜÖò(ÏWB?¥A$…åWþú­ñ­3ín;©ÍNu¤‘6Km<`¹Áü)rÓaÍ#‹H$ ‚ à UÉRÄp8®Ån´ÇR>ʈ¼#\þdTËF™²á›$n-ý(öq{1ó÷G*g&<~4¯¸•AäWJºFŸ†d»e+Ðexý)DŽL¨¼Nœ|¹çó©öO£”S<ÿp×â¯õO]ìÿp×â¯õO@vëÿ«VÛÒÊQ½9^øöõ:d[†êÐ42+UlÕKuÿ‰U«mée(ÎÞœ¯|{zŽ2<ÆÕ5K8MÞN~ta È?Lçô¨så/1éÚ…Ù²hîðÄBãx^ICÁý ¿¨ëV:M§Ún§UB7 —ßç½yeߌ/¥°6²yRH~V•z_±¯o%»%šw•Q s1éXÔĨ- …÷6õß^ëÒ…RÐYŽ‘) ·¹ÿ?— äE/—´mGEèTMÝ}jUã®s^s­&îÙÙQJȸ¬óHã%‰ÍQ×ôˈì#Ô]J…q`3Œç¯n£ë’*íûÛάŠ|ÈI2 ¡Ã¡çî±àÈäsïŸJ>Òu] eI¥¹7Våbº¸ËìÊü¬•ϦF1šíÃÓs\÷3ÄZ •­Ï}ñN¸8V`O§L`ñøÔˆ&ØêrT6íÞœŒʹËù.´»™!V’-š3œ˜Ê’6‘ÈÜ;ûæ‹-bü¨"ã’vòŠy?…uBWGƒ$ÖäcqmÃlßÓŽN?•Ø|5ðöŸ©oî$cslãËE8Fcêz‘Ð ¬sÆ+„ŽÞóR¿`ÆGu\³c8\ãõ?­zWÂÛv±¾¼ÿHù¤] `ŒØõÖÔÓ½Ç)%È ›J#l= [Xd’*ÈÙpGåT­‘d1ŽG–01œ VŒn¦Ù$ö;}j™Š25&–¦Òøí9ÌW ÁVÇ_fëÓ®HúóÚ¦­ö[as0Ê"¦@{Ø rNN+¥Ö–E@Ñ¡cÕ°:×1â "ßVЙ˜*Hœ¤ÆÆô'œ)é y¾ÅE®»Iq¨íñê£n ÛwœœœO¡äW£+,ˆ6 Œ2¬§ Zò»¨$µ»hfR®C××·Õé¾'µ´Ò-âŸÍ’t6¢Žû½ñŒ`zñÒ¼ãR²„©«µ¡ì`1¦å;-Ϊ–¸«¯ÞJ ÛCŸ¾Àÿ/Ò².oo/úMøÎìùAöcƒá|v#[Y_/ÄÒ¾s†¥³¹Ñø¦êÂêÊ%Žæ¹GÊíùŽÞ„dp9ÁçÒ± Ôfh㷂ܼ¡@e‰rp9¬áÇ,r{×EáK¦ÅÅ›‰Uvôè“ÿ|ξ¢NIAF2ßúì|î? RuyoÊ@šv³x¤¶ R¹Ûn}°9üêí¿… B ÄòJAF=Sùb·¾´My•quj;Éž±µ^‘ÑyŽ‘ir¶öñÆè…Õöoa‚€O<ãaØI¾Øîœu®Ì#­q1EöRâ̆ „ßËÕI>êsQ埩ô|)ŒpÅòIü_×çbï9¤&ƒHk#ôÒ9ÓÍÓ¹}kÐ~߭φ¾ÈJ´•—jŸ˜«ÁÔ–ðà{Ößû߱xžçO.;¨ÎÕ Î¿2óÛ ^¹3 ~× %ÕkþàgT¬áWåþGªQU/uK 5C^^AA*$p cÐu?…rÚÄ­"Ø0³ŽkÇÆTå¡>„·#þù¯š£…­[øqlñ£Ù­ã+!}á=E>UhâóƒÉ>crpþ»¡©‘ˆ3#;ž1ׯ Â¥¸ñ§‰õ@ÃN²Kh̬1+é¹þSø\P´µÉlíµ£b<ƒƒ_e‘áñ(IU[‘O©T玺­ÏˆtÛbAŸÍq–!»?OÖ²'ñtŽÛm-^ ‡$ éùšÍK(W©b:juP£  íÊ´ßQTÍ+KáЩw¨ÞǺíó…ÀgØZÇ–GV*¤;âºÌF^A×;r¸p}x¬eÝœR©)¾i;²ÌØÜIúÓM/ÖœjD>ÁZï|=uæèð`.c]˜^pñÆã^aÇÒxsQµ³Ãqu¶ò6‘Nã:t^¾µÅ§ÏJë¡Õ„§gÔ퇔\,T¾¾{}>y¡˜©U$Çü+Îf‘DeØ9Ï9®ÃÅ2tï,ûÇ }»ÿJá/É[`¹ûÄqíþq^– Ÿ»êÌêÏ•7ØÔ²Ö㸔$¨«!ÀÎx'ÛÓé[%•’ÈA8"¸0~jê¼1së-´Š»Ñr¬;{ÿ?Öº±4#󣚆&S—,·fG‹BâØ¯O›úW5îqù×Câå0j+³˜Â˜œgëX¶ËÃߥtPþ±†#Z¬y溟 í“LHØÄ„ÈW*N+WG’÷dÉiH 8ü¹«hÌúWÂK»L¹w¤Äq·={åøŽ¡§þF{¯÷‡ò§xIwi—#nïô˜Ž6ç£cü¿Ô4ÿÈÏuþðþUdµ—ú¡ô¢‹/õCéE1Ï÷ p^*ÿTõÞÏ÷ p^*ÿTô·n¿ñ*µm½,¥ÛÓ•ïoQÓ¡ÆGÏÏ©\\MËÉ3·<äæ¾·_ø•Z¶Þ–RŒíéÊ÷Ç·¨éÐã#Ï5k‹Xì¼ Š Ê?„cÓê+)ÅJ×-O”âí¡¸¸2gdxÎL²¬gÿ#5¡ca˜“}õ¼‡9eˆ–aúúÖl©,Àɳgcp¾üÖ|ò¢|0#»Ž3SS¥!G$ÏGÒôK+••äšb‹Âœ$ý9ÍK,ÞÓ/´ÁšhFdp7.qЂy=:ø`×1áOÉa2Z^¾ûVlï#,§úŽ+¨ˆxzܶvÍó4Ò¨rÇמ‡žÂ¾k,E ®5/nœ¶üÏFŒ©J<Ò#›ZÒ®´Ý@ÙZÉTs° `Ì‚}ªÏÃO¬Ñǧ\:ˆ§É‹æÇ—7ñGŽƒ?xëÓ“Yºö¶?ḂÞÖ+xÁFã1ÀÆã¯nµçÔÒÖf†VÄs>2…»Ö½Lª¤•)Mß~®æU# •9š~%¿ŒÚhž7šî(öÚêKö„Ú¸Q'I¹ÏÌßÇèŒ]äVS´`“Žùþ•ô«¥ÛüHð‘°»;u{¹dÛµ‰ÆPzê;q^Cuà[í ïuÔsüŒFãPöToª8%x7n‡èºÑ©is ¸|Á»i“ œ’§éÆG·Ö¼‚ÛÃWñí ¹‘Ńì0H¯Tðß„µ´Ä¹ÕƒÙÜÂÀy‡k™b?0çkz·SÎFI'XÅ¥©›iœ™Œàã'=?ýbµã ЫŒ|™`\ë:f™ŽâA¼² /&O|.OéïYïã]6k)¢±¼H®¤\B‚Žq¿î¡<ŽsŒŽ)6ê.f‚ r÷R¤H8ß#ÓšâüCâÝ7N‰ÐGæ+¯ß“*„DZü±ïÅyþ­â›Ôtšk„¹V*ÌìLƒžžƒð YV3:«YÞÀ.md81“†SýänvŸÌp2*V®Èm[VOuª[_-Ô^HÝ$E˜í‚`‚xܪ}:ôëX1f9‚8®•ü4¶­Ì}ªÅË ¡þëÇôààšÃÔ!û%ëÜPêHƒéÄ~èѦðõ!Z{_SžU#UJœF:qŠ>´RÿJû#È5>™uöMf …ðÙ}£ Á$ú çð¨*9F@ÏN+ËÎ({l,¼µ7õÍÊözKÞ«i×&÷M·¹fÜîƒ{Û–1Ó Õ“€ 8 “_œ5gcÍ”\dâúr~$ŒZê°](P%_˜);˜©Á'ð*? Ù¸×tëu?¿°…‹æÏãÓõ¬]Rþ}nÝã³±˜ÅnÞsÈ«¸„Œ°åç¯jÞ9ó^ÚŽ] ԫƪVHvsŒTrOD‰$Ps‚:ŸÊ®hžÔuëHî>×V„ì?1-þÈãó"º‹‡ºM¸ vó]¾Ü0-±3êä~f¶Žù™ún"ÒÔ¡÷ÿ_©Á ÿ2DŽd‘ÜíUÇ$ú3š[¨µm1à¿–;‹\0…—1¿Ë€ßí½ß®kØ­,m,Q’ÒÚ±‘Ï×kÇVFóòo/m"Ì%¿„çÐÅ¿à5º¡­ãb3,F'J’Ó±ÊCáH÷—»¹’G'$(Ç=òNsúV­®•ciƒ¬jAÈb70úÍG¢\}§F¶|Bl#v~ï>çük@u­RIhp6¸ßÅöo$ü••U‰# 6Ðø×gÚ¹ß[tø®YŒ2`àðªÃ’£ñ¤Â;™”ª8¥įê9Ç­;4†-bj ‰dèÙéëÏõ­¬Öf¥·zù$m+žŸç4˜âdfÕ!DI> qMyâ‹ïlQïÿפUU‰Èõô«ÖÖ­{y¼aw¹ nè8'úVDš¤dáwH~•cNº¼’íe¶Y7§Ì.â©â¦MZÌÖœeÍtuGÂòÅýÚ1<’¼óéÍf`rÖWø¶ÈÖŧ‰õP‹ˆ"ºÇrÿã½jÒøÆTvó4ä §…vŸNEy™nzê+dsln—1ÛÜ_y£¢©““Øzß–ÏÄšr¯ŸçFÄQ—,Ç$­X>'¶ºFK­?fòªUNíÊzóÛ?jZxƒL´Ž8ÒöHäªýž9U”`£>ƒ½rÕM­Y£!oµ¸¢24 ±FâdfF@ã¦zôþ”èüEp©—µ‰ýÔ‘]jvÊ-ί¹Aʵäè䜂$9ô늹k5¼¥ÖÊî)(âÜPp?å–3X8mx‰Í£“ŸÅ o'‘6Ÿs‹Ê¤eHà‚àÓ¢ñm‹æ%Ì_ïÇŸäÇùUûÝu)Ö¶´µhоa°ÁñbxÛëUŸÁ— `Mç *W?εTám‚2¾ì|~&Òä%Mà›¢uÇâF*äz®›7Ëõ³7§š¹ü«_ Þ£*2@®Ù¬¿{é*´ž¼fÉÎÝ?֥љWó:Õd|pG¨9þTðFp ü«ƒ}E%”¡‡q S|™Ð…[˘Øtf_ëPè-ïø©ß‚ǧ‡?ΘÊÂ6¥¹ôþ•Ä‹½Qªj2àñóª¶1NM{W¼¿:ÝÈÇ8ÿ€‘IPof„ÝŽÕ ðÙ'¾qMldàô=3\¤~(Ô?ye §ûÉ!_èjÌ^* ¤Mc$|g(á‡ôþTö ¤tE°­·!Æt`9ÀëYøŠÂDÉGž~dÏòÍXMcN“îÞ'¸—ùÖn2]4Ë»£™˜*’z±ÌÒvw<QQ¥Å´˜ò§‰þë‚jG2ùq~´]½ÂÉl ؆àŽp q¸üÇéQ³2® õ>ÿ•@òÉêsHv9¯O¾ê€lª–<ñÏOäk¾;¥ÐVþ¯peÔæ`ÙU;p{``þ¹®NîýD®¾Y'$gwÿZ½ì-qbÝ£nãÃbºF_Q¸™q±cØÃÉÏ_øë\ˆž{‡D¼ž0£šô/ Ù­†‘’Þs9i3Øç­qrµ6—S— ÔMô9ï.Ýb;À?™¬$]€jéšð’îÓ.FÝßé1mÏFÇù~#¨iÿ‘žëýáü©Þ]ÚeÈÛ»ý&#¹èÃØÿ/Äu ?ò3ݼ?•hfvÖ_ê‡ÒŠ,¿Õ¥ÄO?Ü5Áx«ýS×{?Ü5Áx«ýSÐݺÿĪնô²”goNW¾=½GN‡"Évó:ùÎê…‘c;\ã88úŒûW×Vëÿ«VÛÒÊQ½9^øöõ:d|Õâ-KJ½´ŽßOµ–O2Ou´I'•'ñ$çÚ¦ï ì­vÎVc"8>`9 §¨©må¸~—Ð*¹É­]/ÂÚŽºèðÃäÚ‘OâäôÄz×aoàÈô«g. LËòefÜÎáØc==ºÑ)(»HVÐäl­n£•fžæ`‚yÏã^·áx¼ë2ÒË·e¶ö,¡È ŽŸã\#Xý£SMS‡oš\ “Ÿr+Ðô«wN¾0& [”6Ý ðO¿«ÊÇT‹©ö»ü ©'ÊÙÊx©ÙtBççã ûð¯=±†imK ùCçpþï^âu'Caë"Œgxþµ“á- Mi4Þ\Ò¹ÌH‘àrIå?/¯–q§…æ—VSþ#6üâ ÛqÂ÷v+‡v ðç•ôÈç·¡Í{•Å®¡cå´¢kyWr9ÇOps^©i·zúN‘Knä>lü¾Ì8b3‚xìp8®oQñ=Õ­Œ–n²MËæ,RÊå¸9)ŒrË)¯G VêÝ Ä¨ÔŠ¨·ê{ö«ñÚdR˜.’õ£à´yA°H_»ÉÀÉé^Iâ‹Úžª$‚ÅÚÚܘÎ2ÌŸ|ôþœ\ÍÞ‘yªh0êR\K-Ø·óVÙcR?3` Aùx¶ãޏiÓNFìœÖ³Ÿ.ç4)óv™ã•¼ƒû7ZPð¾UfO›ËôÝ»;±êNzsÞ´î¼=6Ÿj·‘Ê/le9I¢ÈdëËqÇLÇë‚9[M.1]–‡}q£â8ÎësОTñƒ×óúûqX<\/foõyZè£ao ÍÓ%Ù‘ü©(mÁHöôÿ<ãhé¿c)€Ë•“<0ö?ç¥kI¥Ù]Û›­=J9<r>ƒüÿJ¯c<‰'Ù$Ù-«ç*ç>ð?Â}ý¹È¯k/£§µŸCÌÆTÿ—q¥Ø²Î¾j;ÚJ|·PÅCœ| ‘ÎÐÁIú}*·ÄMmP[ùq©Š2"·Â€É“Èà*¸Àõßõ'Ó4í#M²³K‹ Vè8*³£î¨$cÜd~tý{O·Ö¼#©X1R$ž2ϱV@K)b; ŸnݨÅbUDí±(ò5sçXÎPtàÔœúÔ0ƒ¹O#Šèt¿ø‹YU{-*o-€a,ƒËRpÍ€ ×¹C7£滕µþ¶9ªa&ê;lbãškaOµzž•ðjVe}gTP9ŠÕI$v÷Cÿ5Üi^ðæªaÓ"–PïnšÄŽüðÐ áÄgSšq„ROçÿÞž EݳÂôíËÄm;G·iŸ>ald§N2ÇjŽ;÷&ºÛO†ZÆ McTX‡ÞXÔ™J“Ôc…_Ã"¬…ÿ„_ã4ñ¿Ém©3myKy¿0 új6a^›^aï%©Óìã9%©ÊiŸü;¦Íh×r)?=ÓoëØ¨Â‘õÐ˧Zͦ˧•-%‰¡hã@F c§­QTßAžMà ¤²¸Õ4KŸ-n-å.Q9;Ù'ÍÜ~5Ûö®7[Œè_àš= D.ä‰0 “÷ùÔ9ú×eIl6ÔW6ñÞZMk1o*hÚ7Úpv°ÁÁú–Šb<·ÂÍ%´·Úm¤sÅ&æLäîû¯Ï *£ñ®’°uº/Ä ”†Þí„ ÎC }3"“Z-{<¶ÓÍe§Üܬ,د–¡‰a·-ƒœ©Ç\¤Ùtš£«Ä“é7Q¾0P‘¹¶Ã•çêF÷V¿fy5Á¦M­Å”v¦Y‘ƒ²íÉl„' q‘×#8ÆzŸjïo¦K©êUµ&G œqÜdgäúr›]A&PÓCÏëSöt3>é6¦@ÎXÕ€ÇRH­­CÃ÷úM°“VšÓMgIZ8e<ŽQ àmùFp“œ°à×+yâývî+t¶Ýg°eŒ[n@7Ç¡ÏUCŒà®IÃxï/dy®'’Gv,ìrKÉ'ÔÖni#UNRf„ú©bU¦ÉéµÀUSqq!Äp9÷aÅ: $†ÜÓk[ˆ”eÎ3‚1XJ²¾‡e,$¦ícqxÒÆ!\‘»oašY4‹¸ß2Ã&:îÁ ­t$Ú…ÈDFbÇÍz&™á¿éBñGÂ…@Úá3×*ãðõªŒœŽÇ‚T_½oCË,|7{u"ªÛ:« Ûœm\§'ÐsøÖKº›I ÛHïæHy@ú mÀ#¹®›]¸Ö‹=½å»ÛnÆô IÕø5™§I>›:¼`˜ÁË/_OÄtê9æ¡É^ÇbÂIÓçI|Š+eæ(HBÙö~'ö-óřʡFÚ»Ô‚Ç¿>ƒåãý¯zé­õK6*`Ò-щù8§ §ÔÜ*ÌÔæ¼l¬êP7Ë…|¸éòð3’p:õ5qQÔÆœdæ½Û °ð†¡pBJ­#¦‡¥d=µÈ!M€}GùÿõRº’H#ƒÁçµiéÓ\Ì’Ç12" "CÉLäö#Ôÿ ®~hKK¤ù­-™VÇK½»“ÊU1ã?4„¨Î=Iü?úãz Hª‚]UÙ:üÐr?õ{F6­ªÆ“ŒlPKg¦2{ðàFHÜñ¶uMm|R¬ 7¡8<SWF×±Ã^ê¯%Ï7¾·’ÊE-(…‘©'Ž0p3ßêj͵þ¯të­ÝôŒí6Õ''dŽO©™!»’9Ê2LžZ¼æ õÇÊyõâµ´‹+ZK8@V/–ÏÈOo›ó8ï‡Kµ•6íq;FŸ2ÔÈø–XÄEÃã¢Ï×v­Åzµ©ònmâ(ÿ–±°?^¢»µ]ÈQUqïëÁà×;­èïwqÂUbFÕobì\A^–/*§N“œe·sMó$Ñ^4>Pó´õfÀå&Ú?‘©ãñuƒ£ìçB…v¾2+ ¼;©"UBƒ¦ì©<ã¡QôD1 lp9$8ÿùþWÐëTÓ:3©ht‘Ç´ÐgÿA¢H´¦2)€}dòÿ™̵Ú3¶“åô\ÿ*®ìÊØ–_f:Iô¸{4v+¢éWªZ ˜Ú7?­M§è–֓ܳB×€¬lˆ'”`['vÓŽÞ+…]¬H'¿åW­5+½<¡\<_~ÐúŽÂ„J ­ÙÆ[T'M¸µ9ù™gYݸ>ê; Í:–"–M×ÖìsåµÜ°: n'œÕâ­aÜ4_(ÜÄB¹ rsnõ4³É5¹• 3¹,Åx-žÃñà J“z&k†Â{Vù’3ÚêËE×¥·r·1*¨.€€w.N2qøU7—í×76<ï ˜Ø ?—ͼqs<ŒÌ˜œx®ãCH¬ô»U…Œ Ã½ÃŒ|Ä’GøL{Šì©Ó…)ÓX¸Ald u†aÔ.÷“xýsIý©¬DŽ^äÈ;îz~•ÑKâ5Ç•sh3ÃE {ry¦6¡áI€€Æ‰¼íUH9úÇç\éEô¿Èå•ÖC™ži ÎYÏ,}IëWAÒ€G’ÛÌç’]‡õ®ŸUðî—•4Ö¨Èè7‚ÎÄŸ¨$Ö%«y‘mcÓk²3Òñg"í¢X4ûo´$qÁq7,j?ý|w®©WKÚ-Z1Ô £ò5§Æ£ â;ÕåI ä}ëžnïR©è´9Ÿi±ŠýO(vãØšàs×­zÇŒ7†eç$`œÿ½ŠòµQ–Ë@àüô®Ì$¯M®Æ8•i¦755“”¾€çxŸCOö:?÷Xèf'Ô¾]ÚeÈÛ»ý&#¹èÃØÿ/Äu ?ò3ݼ?•;ÂK»L¹w¤Äq·={åøŽ¡üŒ÷?ïåVAÚÙªJ(²ÿT>”S<ÿp×â¯õO]ìÿp×â¯õO@vëÿ«VÛÒÊQ½9^øöõ:dy„¼¡›6žX’ä†û³(!H9É÷Æ=±Û“ŸN·_ø•Z¶Þ–RŒíéÊ÷Ç·¨éÐã#Ëc×®¼3$ðZEÄ’¨*²±O¯~œg׊‡>F†ÕÕŽ¢ê×ìˆRÕ™ÈåÓŽŸ¥q:†¶×eàÑöÈÝ$¾õQÿºOSú}zV>·­j:ÔÇûVøIá‹h²ŽAú¶œŸzŽ/^ZÃäÛLñD£j,nEUzФmëÜ(S”Uª½;:fž–—‹ånvùšY›$¹ Ž¿uV· ¼ñ¶˜¤l# žÇê3šÈеÍK]Imf‰¦1aüÀ„°è0t66Ö1°{»Ûep7y>`.>ª9ü?ŸJù¼c«í¨ßK·‹VOCñROvA¡C.ö~é*W¯?¡©|/­Zi6¬Ò](e”“m{ä“Ðg¢Œðr2ÎxÓñµÅÕ…·˜I$lÈH…ÐBžsÿ\ÿë^¾[Fødª®ÿ™ÅZ^ûå":†¿â»I,­­R×OšL32—gÇ;Ks¸ãi*ƒør­‹ƒºtæµ7›å9tAs‘ÇÚ:ޤ„ñ^‘e§[XF€ÁBî=qéì98Q€3Àe™T¨oâ8w¯BñŽFj=YÁj>·ÒT-œ1%½º‹ˆc#åÙ;‰SžsÊóœäóúÿø­á}cHËÚJ<Ó rc“Ïp=ýòkÔ5û=¿ÚLp·˜@8çv?j††æÞì¢;ÖÚ_ аܥIêpO=ñíYÔ¦ªE©ÂNéžäaŠ•Á‚ [¶·2Ê@:šë> ÚèúL±Ék<_lq»ì ÷ÂxöD<¶Áà;®ø“í9†0ãÊ&ëÕ¸2ŸÀ/®|&©Ï[T¶]Í+âe(rÓÑ¿ÀߺñdZkyÖóÁ¾ú·ýÞ»ÏéêE]Ю‹¤a,`]8 ³6Ü€̬{`ñÜâ¸k ïçYî®ãgoYlgŽö«sx’ãGYì4[–ä–hŽ ŸºzŒdÞN8<ûÕœ§V£K²G•M(KÙÅ6ú³Ûncß;•úš–é§Jµ½º¼¶‰æ‰d1#î ž (ùŽ#§jÂÕõ¸/®×Ä>!Yí>Fm7L·Á–U#1‚rà 1‡*Iàq\„šŒúž—ŸØi·Ï,ŸkQ·~áC‡89³‚¼ç•̓Ք¢ÚÑ„þ)ób’K=>à±™ââ7Ž9UFͪÌÙfQÐuäŠËÕµy,vÿmxŽÞ ÄÇ%–޹•qÁ%Û&6¯#ŒóMO]×õë¿>ê_ßy;vÆ¡0™ÇÝP|téŽÂªÃ¢ÝÜí½þ§¥uÒÂT«ªG-\M:_7õØÙË ú4µÀ’)¦¹º ,**A9Û† rÍ»`TÄ^#Ö¡‚ÞØý–Út†ÅEn$rÙå‹““ÉΆ›áÁ(ò˜ígCÛœsŒŽ;þ5×ÛiÉk­ñú½ÁN ðèG?¥i‰Àû9KCžŽ`ª¾XFìà¬|#wu¶K§8?0SÛðí[‰¢izZƒpØŽh$þֺĄ‡ÚW§=j­íºù© ²xÉÀÛs^\´G¯wdQÒí4›•s¡@‡¾ÄÖ¼VP*íTVSü-ȧ[! ‰Sý‘Î*ýµÈ³&CõÆ98ïõý+ ½/kš¥Êír¬Z,G+„|œ€c ÛøN?‘¨.ü6Š®$ÓÙGq#`NÕÖ¨ÜÄ…¢!ò:ÿ³ÁÈüqÍV•Û{=Ã)ð@@vç'ç<ðkWm쎨óCXÉœ­žoa/™ 28ÁqëíùWSŠ¥‚0¢É¸$·ʱ|Cs} ÜoqÍÄ<ÅO½žr3ÏòÍdYjW’NÆxZ(†pP}Çzô(¹J)¥¹Í^¼œ¯RWõ;)u½#S‰WV²óA…`>‡vk‘Ô´«hom)‘âl’ müOéÔñZVóÄ„™c9}ÓøRÌl1˜–Ep~o0/ô§4ö‘¾*~ôu]ºêYÍÍå:©ûìœU8÷ýª_6#-£±räp‡O§céëïböý…Áû1Ø£ŒúÓ¡Ö%Þ©1%:Q“øT(£¦¦?ZQèwy‹ô¹þð~U©k¹TŠÆKE%÷ƒƒþ×dpqõ§Û-¸b,S>íÛ„j¬? *v¹D,#.k9ŵhؘb šrm•¤ÐØ\A"G&Jà©Áö#ùúé.µm^ÊCwp…NØÒ+§Úãœc˜½xÁ¾š‹>!“€Aý*¥ý¼——,«Œm ÐŒàƒžœôéúc:p¨™¥LMŸÏi_‰·¬±³Ë´JY©ldŸ­C-ÕÔŽóðÒ±ÉCÆ:ÿW¢ÚDû˜caÔg ÿ*“~±í‚,È­’ØqÏ~£üi¨OšöÔ×ÛaÜySVû‰bñ4pGûØP0]"¸”gŒ|Î\á¸ßM¶ñDM$Fæ-‚_cî>ÜsÛ$“ü«çKÔK{‰K̨…ˆbGeÁ'Ž8çÓ&‚ZÝyŽÚVdá·G£×¦k¹¥8òÉÜŠT©¯}?Äô¸õ+­ÌÁËÄ¿36â Øò={úŠÍŸ[ÓDÂ'•ŽÓÌË ^™ý+ 4Z$– i “í!YNÁ8ÇrsØqÔÖ4º]ËD³\FÁ8,ŒÛKsÓ‘éê+‹ê´ã{˜TÅMJÔÙèVÿa½OÜ\«€pówëP\Ù¤há¾e9PØÁ⸭/ÿµQ­ñ¶6ÄŒÀì ŽF;ägø~†zhÖÍ)>Išf9ù£ Ç ã§4£AÓÝ™žÕƒätfP?”·(Œ¿¾v:@OÀçõü{Ò-» ¬d ,¹À’ Æ9ãÆ´£‡tÝÜ®l í¶ƒÃ>dÎlš_^6,@Øpvôçœ`œàŸ­`ZÜ®‰w6Ÿ©ÂïÝaŒÁv<‡ô®¢-wÉ—"´¼b3¼u “ÇN¸9ÉÍyþ°—’\µÄîÎäæI=ýý:qô­({iÔ’šJ=K2÷u¹¸ðè—ŧû\FC’ÂxÈv=Iîâi°^¤ú”z}žXÌë 8œÀf¹%yŽÔPØã¥zw¤Ólár, ’á ßq(ùÃp¤FÇ8à¶WŽüóxˆN0n*ùU3:pZ+3gRðü{"7]”p¸ýó(ÜUTdÀ+ux=ùÝœ6Öô‘¥k6ld’Ær²G#¯§8< ž‡§qß"½“Q×­m­¤.§ý"&ç8ä+–ãÙIö¯(ñ ·ÓE”Qeþ¨}(¦"yþá® Å_êž»Ùþá® Å_Ꞁ6í×þ%V­·¥”£;zr½ñíê:t8Èð‹Ïµ¹·º¸]’9àlð:ô㧦½ÞÝâUjÛzYJ3·§+ßÞ£§CŒÔõW¿Õ*§\ð¥e>ˆ¥ÜƒU¾Ó㜴¶ñ’8Ý!Ëü[AÏó¬ÖÖ´ûgHу9߸ÜÕ°kJïG[Ì\Çl²1ù[!~Qž3¸€:Õ$²µŽIQ®-¡xÆJó¹ `ÿßU “·üs»Ô˜kwš’ªGau<û¸’ârÈGºàcþú­Ëx5t &tû(Ú`½ãÔgy£B´·ž/'Ëži'ÀWÛ䘱ƒ‘àúzuö5ÕÁáƒqg,vúsLËÞW‘²}†vŸûç¤h%­ˆ•N‡&‘¨\©.­4‘©ÝJ䢷_ºÇŸ¦+ÚüÅáë$u!„*=A à'ÞòÛÄr#ϳtVv¨‚AÎ9EG9$g®+”ñ/Ä ORµ[H¤û‹¦Þ?0Ævà·R1ÀéÇ­ùSKQ/yž½â/‰z6ŠÏojëx¼‰¾D òùëÀÏ#s¾1¶ñ=‡(©yÿH·ätÜž£Û¨éÏüí£ÚÿjM.n¡·Š%%äšUAú‘ëßß­]Óõ+7_»ms2Ù1h®Ù„jà³p>½r=kU½G ιÐQ¦¦ÞçÒš–¥g¥Y}®þæ8l ÓJß/<Þ¹ÈÔ×’kž2–θÒg¹EþÍÜ•T%d,…UÀ•ܹ##¨ÅyÞ·âÝOÄZƒl™µÍû’á“l0g¯“àvùØn8†k²ðW‡µ»[QzáYTO,aÕL£“ÏÞÀÜõ-]}?Sˆ³°ÖüWpcU™!•÷ùJ女ÃHç–oö˜ã$à â½:×àÄMáÇd- ùFN9=OÔ€q—;…õñ'…¼¥Û>—ÛoîaI$„0ã ¬|§ƒÀö8ÁÍsz‡Äÿ_I˜.#´à„FxÉ}Ç?LTJqZ"Ôt8ísD}Lq2K Ño(# |ýÇä qYí^‰âMgXñ6™$Zš‹™ Û6R:çhRÞAÆ 玬¯µÎJñ×50ºZ»Žm_a§'¯Ö“Œ’0jfy$TWvuA±9 2N É'ñ5QÎxö«$}¼ÞUÊHA*È=+ëëZðfrÒ™#ò&;÷éòäŸV7ü ¾E$œrN°ëýMzßÂßÃá}úÚúÚòx^ExVÞ pøÚä’G`Ÿ‘«OF„}QÍq ´/5Ä©H7;»U¤ž‚¼…¾.ê7ÓþêÅ4ø•ÇÌ/ÉÜ ‚1Î+Ë|M­jj2Ǫj3_Í ¤ÈYW?ÝÏ =…eΛ±¼°ó(Õ{3ßõоÒX¢]½ôª@+f»À÷ÞHR>„×…\ëÒÁq{>Ÿ,úmÜŒÞDsP„œ!Æ:W/ÍÅÓ·–¡T{dÔŒ2Eå‰ ,Fyô§}IT¤ãÍm ókµ 9öàTïâ R]2=?í“%˜ä[‡;2I9#¡9=zô®u$Zéü7¤lkZ¸>HýäØ?À:÷“…È鸙1F7g¢x@[}íÓ×d8;³„þO©=¾öJ‹WA¬ëLÓigò#!Û¿ê?Aë[^"ÕΑ£ºÀÊ.¥!!“žçÐwõ"¹½îEÒãÞ¦—%6囂0G=O#n0Aº2¼JÓöÍ6ºŽÄ”=šv ´Ðå’æK×¶`áˆòÁÚBcŸ±«ïád0]Äsü1¹9ÿ€ñDw·`—ýÓ8ã?^xëÚ–ÛÅ1­×Ù.m\ÜyžXÚU°N0yÇþ\÷¯¥‚Jrþ¿4x”©GxEýúÿ“54kY..&,Y†ÕFã#©8õ8žx«)JgŒÆ¨ÅQ Ïsǯ}½>Þ`°p¬wm ܱ=8úœÕ˜ Þ–™Îaò©%¶á¹<Ó§òõç)JÅœœ D‘üÇ9εâDÉϯZ¿âMÛMŠ×Q´ù`™¶´[³±Àì{ƒƒôük+Ížh|ËxS$àøTÊ[2Hš=.[B6‹÷q«Ü1Æ=n^Ooe<…ÇDÏ&¹©mu»…7*î¾X,NA©mï§Ö¯­¬ï#ù‡É¾1† p `N>¼ ~•j.(•%}F5íÓϹd;@ãŸA]$vîmÑgåð qšŽÛÃËky¹·Måàc õ÷5dN .é Dpé*`gÔŸóÚ¦-Çråil@Æháò‘ʪœ€—Ja›xÚèCdàñÜ~¼~£Š¸á2L Îù1À÷õééQ´AÓ$r:ÑJæn6ØÍ•)ÞÝEÁWÚ ˜5vöÓºBmÛk0 LÀÓî‚k@ £.ìr ÷>Ÿùõ¦^.§©ØKec V¨ÅY¶E¸í^Hnw“žIè>•2Г ’ÖÞÎco)š'…ö”>=Fy$g¶x¦^5­Ô&"í9è¸ä÷Î:ô­Xìâ‚5rïq#©,e…zò3É9ïÍcÏ6ž®D® ygåÀì1é\Ó¥ Êó:)שh•…¼±*ˆÙ. däcÓ$f©Üù!‡+”äã<~$´±Ã’Ö“`€3É_þ·àjœÑI¾I1·Í< ç$µµdî[ÅTJ̆ÖÕç+—‘†9ôô­ht¶¼™cH€lÒY,Qòç?…iÛ¹kØcVÉÏ9횥I^÷ÔÂUÝ­mvó@ŽÒâHæ@pÞP“ïƒMµÔÞ\÷üŒãׯò®“]c%Ôå¾Y¿ÚõãÖ¹}ZÖ/°M&pþ[AëÇ­i]êî‚o¶Œ»yf÷s4lvÂ#ßÄr£o®0Iÿ€Ö»oG $` nå#çÒºÔ†Ýt›y¯¤xÞ8—{.y'§99=‡J¥®hÖÒé¾|S:˜™µ¹ñÐ{ÖtÛJÌìæƒŽ›—í-d—LB£sy@íÕk¢‘bRâ ÉÜH»†G·áXɾ8Üô[[Gäï÷‹’r{{WÐvëÿ«VÛÒÊQ½9^øöõ:d|è÷ÔùŸÛ¥KCfî˜Ñ_¼–2dyˆJ°þò®;ìZÃf— ®~eERqîZêtÙ¥µBÞRyÄ`{ý}ªÚÙÉçG FòÈÀ’dç¯jƬ¥Þ%ÓQr´Ž»á¯ˆÑSLÕU<Ó÷'` ú×ÝxÎMb åÒeØ›Îx×2 Ç ½°;ãŸB:/Ô-Ä3K[‡•ä™WÔóÇã^ ê·Öv+ ç“8Q€É'*} #0ªu'8ÚjÌ'EÞ.èðëXžöëíwŠò”î’LŸÞg<õêOÿ^º9mô€ë«ë6R*© œçøv¨lçŽÝ‡N t¾"Ñc½ºŸì¿è1:†hÑwÜàÇËì}úqŒ}'BŠÖýõNí/æ…qn1†1çó뎽êU"µ›±¶±"»Ót‹í-[[¶²Ó¨¹²±%ÌÑ—Ææ*T(# 9?{ž8+RÕ5FÓŒg²ŠfXm­”Ø$n˜õù‰Çl^—c§iÖ×7:µÕü—ZÌÏ»í· æ2U\…à ä tÇ©¡kš“$’ 7’îiIiå#,I<¶g°éQN­=ÓÐ%Í7®ä^ øY¬I6£Dà‹uïþñïôéÀ®ßX?Ðô›F{pä»ÉÁD€ìI<öZŸ‰á9[2cû®ü+RñT ªÞ}–;™/d‰b†?/pèHé×'çšÚU`å²¹æoo¨' À0œ=pyãšèô/ Ú´)]uj¿`Æzöã¯5—§Á¢êPKs¢ÝÉÌ¥~GëŠÚÖ¼Všµ‘e¢-°,‘åÉÓh™¬UHAjõ4䓨äµ9mÛP6ÖÁ\Fpì9ôü+‚ñU›Yj³Lí‚VÞ .g’°9ØW¡ˆ’7i `n9b:çëPÞ[CynQ•XtädïùW<+KÚyÊ”U?3ÉRå{†n7°h½ÅÂÍÎÕX)ã¹Þ?•t:Ÿ„ã †ÞÒ`Í’|¢H?ψúe¼d€ò}23ü«±M3Ÿ¦÷¬iåZŸ3f¥}Ãwb ¡Ü*ÍŽ¡¬Iq#Ú»™¶’#\Np£S“Ðb¬Ûéi_.ÑÜú¶ýU×húîª%h£)ó".3‘ÐØtõ¦å¦…F ™sl6ÓAÑžíå¾p¦Y¦bT3ÿê­3º¡†x¢»Vvv2 éŸçïQÃ{e|QšS­ þ§›SÒ,˜]®¦' ä>½ãÓyŽS–¬ûêT¨R‚ŒV…´ ©Ò(Ï–m¹û›‡ž½ q¾$;õ‰”.0ª1óÎk¦µÔiÉgv yyá‰eÇA‘ʲõ¹$’öâÚW2,NÊ¥ŽqƒÁö®º^oSç³gìãËN>ëg9kù‡šõ¯hæËL7. Ëtwa³Â …ãñ'ß#Ò¸O èÏ©]¬K•V9fÆv¨êkÕµ+Øt=¥DPÄ%ÇÆ/ÀVUê´Ôc¹æR¦­vr~)Õ"“\2–ŠÑ6¾;™€`1íPj܉µU·¬rÝ}xDZ¬}ÒÚâ)o5wrTg-#w8îF~œšÕ²¿K[³´R4Üì>r¦Ttå-`E}†QRµ (ó/¸ùüÊ:µuvc“–ÇÈ%‡AÛŸ©ÿ>¶mDþ&tÃ@žR’˜(yÊä~÷C‚ ÁT ©Í{oäÀÊ$RAùUr0~~[aÎ'Üsή—c¿½1ƒ©ÀÏ$äþxÉì4ótêSäœyS#…TçÍv]3dUP¡P‚Øê3Ð~YüÅkÙÙ\|Ò¿îÓ8 z‘ëíÏòªz4p4¡dŠïí-óæBs‘Œ‚1ÀÎ{ ×Wy m˜ÙÕÛÆÊ>_Äñð¾ååÜìÄ^V‰—gR½ª•ørá~èìãüõ­¤…ciÇ\“Y—7P@®cg-ÈT ‘’pH=x®úµÛØâ©Ù-Ì錩l å‚´ž}±Y ¿<0íŸJÒ¸Ô‹íˆÄ¨¥·mœóßÓ˜æÚxöùÒFÀp]2 ü9ç­sâ¨TÄOššÑXz±¡OveÇlC©g'õ§ b2²=*6³tfó!`yÂ>Hü85EË 1ä`Ž:W‘V•ZNÒV=NEt͸¥6ÚtHŠQœ–lXdãùÕ{¼3+g–7Êr}*Øxãµ…[tca1©\’Î3MŠÞMNð%ª1Ü:1àzœö+]»‘µ+œ½ô,­¹¦}jM ,dÖ-â¾Ú#làÁ dg×é[ú„¾µÝ¡zä©ù Fòä#<åyǧ=»äUâŸ5·’Úm¼øä3[yªO§+ŸÇùV–»5rV/\ ¦˜•äO–òªç°¼~U‡}âM?BxÚWKÉÀ2 }ø'»zuéŸ_Ã¥¶×¾E™i ºIÙ ±xË~8 ŸÆ²ïÃw¢F³ðt¶òH$y¶aˆÀ%Uˆ÷©öK«5ÎhkŸ‰oRkˆÚ8—å†,óúwU,IL“ÿÖ¥ˆÃÝ]_Bè×[lpòéoÊ‘ÈÙ €õô©µ U®FNÕEäãדúš³u§Þi’3Í ª$»> ôÏ9ü+õ1-ËM7ÌÙ'=˜é\øxIE¹"ëI6¬kAaw"³À‘Çòe|Šǽ,SÉewÔ 'Ù?ÂíÏ®*н[Ër`bw‚«ØƒŽ˜öÍ@ûà…òØ'’€€á[Å™neê³ÝO5ÒHcäîF7øwª‚7ÖV+vp±1ûg'Ïlœ~´³…I<Åᇨ«ú /£.¾Z•ÝÆãÈz÷ü¨©&ö**Ûšzº´Z%÷—ÁHX‚yç_W”6“rÊN<£œý*î²¹Ðõ¤î?è P¾„Í Ð¢’ žý½=ê%OcZsµËš:¬ÚUºü»ž9ï+¤°sö87}ï-w'Ëéß¹´±“¦!Až¤œü믳+¬<. =¸W‘YYØôº¹n'ýÚïÈ9ëØW'âiwêbåU2 ÷ãúWYæEåè{œ×¯:bD\áÞ½¹#ùÒ¦µH])Ê¿ñ+ õhx ý5ãsqšö¹T¶Ÿî Žqþñ9‰MÀ?sÀí^¶ y/C“¬bÊÃ¥ AbÇ“AõÚ÷9#±õ?„—v™r6îÿIˆãnz0ö?ËñBùîÞÊ—ÂK»L¹w¤Äq·={åøŽ¡üŒ÷?Qüª„v¶_ê‡ÒŠ,¿Õ¥ÄO?Ü5Áx«ýS×{?Ü5Áx«ýSÐݺÿĪնô²”goNW¾=½GN‡c¢ªÑDÎç$Çóéõ5îVëÿ«VÛÒÊQ½9^øöõ:dqפdº÷H6¸GÍÀ§çñ9%Z⓱•¤x0EåÝêNX¾#Ž@TŒÉüMtS[Û[DŒ„RAÚ0¹>äŽj½î›5¥²ÜÙÅ:¨MÌÀ¯¦~îZ©¾5h-ã•qqVL.Èè@íSQƽŒÒ”žåõ‚âX§žÖÚÛÎvÿY°mù~ë`ó»’;qõ­5ŸOS籕É=±é’8ÉÅooDw¬ÑBq@¿ýzš’ꦩ¶Ó¹rïÄ-wä7Ø"•™›w˜8Èè=¯Z³¨KbmRêk˜Å˪ ‚FK·`’X÷vÚE#Kyq(E$´ArH®ãÐóŠÃ°ÓnnšP)h9y&Œ„‚w_¦k{õî_<ôg§¶¯!û±;& ‘Û¨΢¹Ðµ+W|k$g†(ÿtžs‚qÁ§ÇrÚÇÛÜÆÌÛ™7œØ O·'Ò’ïÅ7ÓÆD~L¨Ã‰ŒF<û¨$ŸÌ¥gÊ–¨äua&ìô)Gvñì%xRyüª{”Šîè©m»†W#©#§ùô«V×UÍ“,¶m ÑDç Àc€A?‰÷õ“K‹Cº¹RÚ˜%[jªŒ1CßàƒëÇ\q]<öјA§ª+-¤ .L;vð§ùÿ"žÑCc"ùl~sŽqÓ<~ þ5ÓE§ZÜ![T¾@Švo‰ ¾207Œ`àóÓ­`x¶ÞÓOÐÌÂáæFòÕFzäçÐÒœ&§~Rª7 e±ç÷Ò'Ûæ ¶i÷g…¶Lõª°{l¯›u¡l‡yØ »§ ¤qRHÕNdÞéÜ}®º]&êÇ—WPµŒ.6Û{ ޳6áŒö©ú»êzpÎ`¢”Zù§ÃGøR‚±¬÷‘<:rá$ùZé»>‡¨àêFs¥y®cº¼”ÎK³×'“ùš‚ssyxy¤žV!WqÏÐØ{ èe°[ijÒíÎc,¨ò/]«¸—S¿÷=iµÉN:Ø—Šw[~oô·c¨ðFž«¢ÅvcØÒ&2üŽçó¬ÏêO{ªÁ¤G™&*)Îç#ìqÿ¡ìmµh<1§ý½Wlvq·—Ê‚v•Uà‚Hæz~¨F§s¯ê ÒÍq4Œ7ÈÇ-×8?ê? 0ÔÕIó±V›‚åFûÀ-ž(’|¨„{‚ðy$ç¯v=i‚÷€‚رî}óÀÿÄÌó½ÎËXœôu$7§\õÀÆF iéúÜNñÚ˦¢Ï) ‘Ï1i >|nÉAúWØásxa¨òÊ=_*µ9”·&³žKk¹›iTl¤Œ3×!¶œ÷Î;¨­ë9wºF8Pw1ÏQüº‘Ǧkšš9£¸¸‚âI"”ŵHQ RÛ‘UÌÙ8GÉÏMá­.[éR$y§$~U®3ÏN WżeOkk_c¶/a[š#ç'k¼ÝÇãúþuÒézjÁ*L|ù@•¾Uïœ3îGÒ¹ÛxÏ–§n2:U¸Þ@»®Ð9¹iVQw–¥Õ¥)ÆÑv.¾£'™$W«¢ï:0Æ@õÎqXڽȎ?=críò Ý{ŸÀc·­j@–ÊUgqc*¤ž¾ƒüýzž'ŽÒKT‹L–G?yšAÐäp8³úWOÖ¥$´VLÊ8uõÔÄ·P„Hÿ3žHíôã:²·¦zšçÖþXØÇ.23Ü`úWM£Ëg,E^0äLˆOqJžÕëûu¤ç¥Î'I꣩`F^ Š 9UŽq#`0ý+PÉöfÜã¡t Ï<Žqüê±·H°Ò¬„p†üÇ?y¹•XK–1w±×‚„£ÌÚµÈÖE‘•T’¬~aÛQVT.ÝC®ÖÈܧv⦲‰p ¸SŸÏúRj%Ö$•pU[caº2?‘¯6rWØôc «ÜϺ‚ÜíwMì9Îì9ý*ªUG>•vÖf{…(J:ô#·8þµnïJÁæBQ¤', ãÝ0zúÑ [s:”›z*ØÀµ “ÍFÕà“÷G_ò*[mæ¶´‹óü;ŽyÕtéñCˆ#,¾ó~„Q?yhL‹³ k¸„JÒ‘’p¡qÀ÷?Ó5?ؾ͸FÌUÇ9#9ü*X$?gŸšD\ÛŽ9Çéþ5"–“‘Œšî£‡ŠŠvÔã­ZNN%Xâ}å[$¯O\Õ€®Ì HäÞTídÒœ.¢Çœþ”JQŠÐ˜sNv–Æì~*ÒŽ.CÐ~é9úZ–f Ù]âwG ò£ õÁÿ?…aiÞ¼Ô.t&$FÁv ÏnÿÒ»8ô+kaGŸ”‚Ýÿ Ë–M\ô&éCK˜r\$ñ=ÕÓ¤P£„•É9ÏÆ>¢˜²ÛÌnå1I+3ìrd$ëŽO¿n3RêšuœE™u ÃtQXŒÀö<ɶ´‰ÑÖ;ʼnݲÀûõ«žn ݺL¥5Ì–…a7’9šHÖFË0Dz-'ÃÏ"–ÌU–?”;pÇ‘ƒÉÑ®•¢›‘ Ø‘àåÉÝ‘œƒ^má«í½~v‚â[aiã’݈*}‰Ágä éµÝXÐ N—bãåòÊOã®w.ÖcÔPiÔJMPœ`Ÿ2;½.ßBµ’h粈…É"G<ŒŽ£8ǧӧ‘ü@Õ.'ÔíV[uŽÌ+IFR ÜÈœð⶯¾!Ë 6 ÷IJ2ªd.y Ý8=¹à×!âi¼G¥Ãæ3‹«9L¼WÊ“o £©Î=>QŸSDsO±uçA¥«em>â38ç§5è3ëZ|Þ¸µk¸U¥·x—qèJ?xÆâÌÕFOåO™ÕQ6M9f8Ä‘_Ïq®¾m,yj;Bß;+„ Œ<ÌŒ¯©Œœdêk±ðµ’[G6¡7–ˆä¢1~gæÁ=²F»žõÁØE%ƧŒ ²ÈWrÛ@ÎX‡‘éÅzeâ[Zh²Å*•¶Š"Fc=O{×&W´{ž¦6×C—ñ®¿ìpØZ³ø’\ñÏaüÏåXñMs¦XK (~ÍE(@KÜònaŽ›[®N6ãŒç\Ý,ÓÍzáS|‡dJIü=€Èäõ÷çj×HÇË`ŠççE_”ޏ"ºèÅRVG=Iº›ÂÎì¨0]Ø*©ûýk¢´´“í1Ir<¥ò¾S´’˜ü½H\œõä‚W0ÙøªõY¢¼óŸ“Ì]1ƒÆÖÈôÇÒ®Yoºýã†y¬Í¸…×¶1ojÝÔº2µx-Ì· ¬çÌ”í\•õ<÷øWufE¾ŸäBî†fùœ €`¡ÉãÛÐ×3£D#IfwO-WnüãäõGCëVî5Ø €-«,ÓÄëӟϽc&ï Yu:š+p¾l‘ '{“PI|²H±[Ê›!CœŠå¢i/%{©äbø`ãÒ¶´X”Ý—9 o¶sÒ¹äÕùz•¶ô.Ïq(”ÆX©vŽ År¾#ñAÑq ^òUÎÖgø¿Zê5»(g|¸ãj‘õô¯/×Ú CÄÒÌ›•`ÜÜžzúÞJ°œ[•îhxoN×|K5ÌöÆÿí'Ë=µÊÚ¨Ïð!ÜIéÈÍSÕŸUð¶§å[½ý´ø!žäN³w ¿"‚:õœƒ‚­¸·%î÷:§tc¦ŸŸk%û ˆ•‚(—kHûI Ï¡$ã…R{U+?Hë :…‘·çŽEpÍ#²ƒ÷>òãrdœ°j¦·â» îÒÎdx#+»‘üÁó:©Àc“Š£ø˜Tº$pEsm¬Ë;–œy|ÑÍæLÄulž¹3¾3°ë/w]ÌeYÞëc£PÞ&'¨‚FGýjs0Œ çð¨KíàŸ|[gvE@Ã~FG#‘Ú¤iâhC‚óÔä1íšÏ–qwèjå ÇÌ™%ŠÞÌ‡î± ’2@ÏäU‚6ÈÃ8 `Ö=ü±Ö8²ÿ6òpqÓÌþsO‘Ť{Ðìγ©Ž3ü¾˜¯C[[Ižn"–œÈ³4˜€ Üg¥P,3‘‘WÌJñízÔÎFø×¡ÓCƒ®¤pœ¶;f°µû±çÛÛä•}À?ˆ ÿ k^IþÌ®å7Èð þueôÛMGH)ìYÀ}Ã$‚ŸC^V!FU‰êá)Jp³9;DU˳`‚0;}kaJËŸ+,³Ís——K¤_5ž |¹æ¸ÙþGØú÷­Ë;ëhìÁT,ç¸ñmXÀßQ2BmÍÀÚCSòŒ‚O×ÔÖ¦‡¨^Z±Yã¸dp&@ ÷À`Ø Ôwå䚎ÏIŽIŒ×ˆ¢1ó*7 ŸjÚŠÖ ˜CGpUAãbü¼qŽ+*µ|¨Úo¶mÇâ+qníöÛSå ÈfhYý´ô${Ö%÷Нu(ó¦KÆŒRU$?QÁ<ž=*/ìÇ1ì ¹ȨaK2äÊÃiíSr\lU·2ÍtMÉnN gƒÉüqí]"YD¢*ž@ÛòƳ H–FšXŒ­»#¿¯¯ ݳlI0SÆg­ËÑ"¬“*ZÏ \ŽÙÍP+mEðp0¡~a1\*0a°í8ä)‘kºm*)ÕÔŸ-}+Öº"´3NÌ›Ia‡‰Ä‹¼Ÿö¿x»}šKVÙ”'õçýk€Ó‹¯‡%$ñ…9à¿uv^¸ó,›€6¸qÓbû×™ŒýOB—ÂmÌ«ö7(ƒ zôæ¼ïÍà»ýæ98ÍwšÉM"Yvá¼³Ôc±ÿëWTñ€síXÑÖfˆr†ßæçk~jóÝF(þ×q˜Q¿xÜãžµßÄp±3Œçpúo¹!€ýãuõÛ…~û2¬½ÄbMohx0²û†5ˆÙ[wÖóº%Æ}cyr¢*²·}ýz7Ðâ±õ„—v™r6îÿIˆãnz0ö?ËñBù®~¢—ÂK»L¹w¤Äq·={åøŽ¡üŒ×?QVfv¶_ê‡ÒŠ,¿Õ¥ÄO?Ü5Áx«ýS×{?Ü5Áx«ýSÐݺÿĪնô²”goNW¾=½GN‡vöÞb‰$ÈL|©Ó>æ³-×þ%V­·¥”£;zr½ñíê:t8ÈÞÎjA¡FB¨}Râïl¢Þ §dúû~4ûË‘ik$»K•RÁGSŠÃŽI"$3°‘Û,åÆ ÿë¬jTQv ’[ÄêáÃ9q†Üz§JçmZÞ9.ƒ êKsÊä7°άÝ^Ê¥-¢MܤˆÕy8ÏÞ<ôïïõ¬»½OGÒ,Þ9Ĉ„yhåË0ìÄtÉëŸÖ”j_Þ•’AìÛøUÙBÓÆ­Ì wo ˜ôÄeV Û¤*z¸22=úãšèõ›Óm@Ø•þè^Ý9?Ó×ð®×óÝhÄßyf”±‰xXðr8¾™íïVî°emìO5Ž3”9)½YÑ…ÃIÊõ•qöwa¸žìy¬Ÿ+t«°€KpOAï]HÒo/T†>ÆNâ:Ö>¥§$µ­¢¹h3/<ü¿L^*ÂÕrR’²¿SÔ–.8´ÙÔ¦©a ^e¼o0U Ò*€¸9b29ížµ–|_f-ˆº‚á÷1!¼ ®r;ž g¿QL¾¼‹ìfÂÕ]Ÿ1^‹Ž£Ó¶+–ÔGŠIgvmœx}+Ð¯Žœ]¢y¦¥«;ëxl®bK:Uò™ ¸úéï\D Ö$³¸º»U[·Ë$o&ýŒIÉÏpF1žqŒÖdžæ“LÐD;‚O+ ¼ û“Žã[úNª·=¬„™Ì¶së]PÄFv‹Ý¡JŒ’rè!ðµŽÝVæÎéÕºyË6AØ9aqÆ?ýTxÊþ CR‘m£ péåâ*¨9ÏLçhǧ9íίˆ´-Q|[4Ò»,wr²,.N6ÏB2GÞSÛ×sèWƒN°i.§S¹‘·2ÇÉèrkT”žä^ÈÃ²ÛøsQÓRÓuü×¹HGÜßóÏS·{5gÆÒ5ÅÂGjHœ2»ƒ–S¸ø ~9ª4ºÌ÷Ù‚Òyî­ Ê0‚% ‘Žx³.¯µ5˜ÙÖXæ‚Må\ðxÏ'°V®:Ý ý£Àúv«X3O íA-üX¯Ê¤Ã-ôÀ®WÇv1iÚ±ŽÒÜFÊwÎqŸNþ;]¯‡|m¡ÛÃsm+4Iq,$›BÍ•¦ÜuÇLW3âÁý±-ôŠÑI4¢(áH[v1IÛKô¬$Úšy©œ;–'¯^9©í킃pÂä"s»ì¢EüCV\ƒlΠ‚àŽ„zÕÍ2ÒKûØ­cá¥lgÚ;ŸÀdþ×{+“Ë®‡{à-%£óuy—u+ T˜Œp9c±SIñSòâ‹M\|àJçÛ ž¿•vpGk¥é¨‘ü–ð ]Ç’¨'·jñ­Fê]WS’Vûò¶p;и)þö«Ÿc¾º¤¢Cj[bª "˜Øôçq9>ß0« Q‰ÜC…2ñôþt°±•\ $ÛYA‘â¦ûtQ‘$hþf1–¸ÁùOå]ç vm#Å"‡ yjÛweñӈϠ9úöv;pcŒË´ ŠädõztÁ¬Ï isj÷Ïsu¼Á lqÎsìFmI\¶ü}ÒÇžœÿµÅgA:G ‰$ùXïeVãŽä~?­t'ð׈o-ázuÏ‘Èóƒû¬·ÜF{ñɬox?U}NfÔô˱ ~w‰‚n 3ót8½F~”·Z’Ò}M -d¹2tH”}òx?ášè,îbP©ƒƒ¹€êju¶´±‰Z8cÎ2ÇgÖ™ Š,;±“ëXJ׺5„TQ}3JO$±'ó®7[Óoö9,ã’IY‚*"嘓Àu'=+ÒæÒ~Ô¦dtNA={çž* Ê m~ îñ>ëx¢Œ‡sØã±ã=ø­©ûÍ$e6âœ4KÛˆ~K¨Ç!{ƒQ-忣*[AgfèŠIÇù=kè›íJ¾¶yu8­Þ%\¼—J‡Ë^üœãëõ®KFþ̹°ûNš©ä3²¦"(8>˜s§k#8Ö”ôD¾Óeð¾ƒ#ÊD—·CˆÎD8ÎAo^zŒ»×­uVŒ/®|Ø|ˆÉâUŒã¹ëœóŸ^µ€Ñÿ„€ØÎÓŒŒÿŸÊµôÛWµ»~så£n7b®Ôç ^ä§8Êû…YpÀ¬?^\Á¦ 0‰q{ˆžV ,0¶ì’[»ÜàáŽFsV´›Y^àê·:›\Y7ÊP’®®HùJŒö>˜â³5o k·7Ú]ÅŽªò²ùGÊ”©ÎõtbT©Ûõû«€9ÍpQ £7/¸ô*ɤ‘ÎØxjÃQ¸†ÝÉ‚$|—*6PÄœÄ8rH d‘½ü«Ø–š>Ò›x¥@ë ¯Ê·Ïsž y5r [`4¹ê16é®§',$ûØb8-Èf8, p‚¤¼½k ‚°Z[Û@ZEYwn.§æØxÆ1·×+ª¥Ô,ºõíæaN¤´{tî@. ‡\ûsXÅr³Ê\ŒHÌ9Nп1'ÃÔäU Ji¯ï–;h”[Dâ@x/×§ùéW&—ìÚD6ž\+s.q"Œ¾ÒA?1ä¯|tåü̹,t´´7W”‰IPO ç9?pާq-ýÍÍ»·iTÚ1œãŽøÁÅzŒöI}‘1C!°=‡>õæZž‰qa<‘KTd£.rG§Q]0nÚžT­} 6‹ÜCA¾LáL|´ƒ1ë‘]F‰erí'Ÿ¤!TF›pTóÇÓõ®'LŠx\¹ Ž3“ý+¨]WX´Ž0Tί„ùH;ºqÇ$ýi¸ö3ÔÕ¾– .5žxd(N Œ'©É¦{Óæ³·Ô †XÊȇæVSÁÈëÅA5ÀÖôÏ.IM½ÌbEBràqׯà})4}-6G¸K‹€äÆ…éŒ1ŸÇ4¬±çOò(@ÿxfªJ¨§ èËÇçTuMfÿKÔž);›F0†ÂÈŠHW¦~ð8äãÛ‘z;˜îÀYxÈÜ1‘N0wÚà·)j°Ë9 䎸¬­&T:]“¨çÈBFz¼*èn¥ó-Ü8ŽŠsÅs:|-oclêÀ³&F=ãó¢;õ¡Ì¯ \&âGÚ ‚OSòž1]ΉÇf‘òäü߈ãÓÃhV†}Pq»&áœgåé·Ôz ì¼=rM˜Wo0äÐcÐ×—ŒV¿©èÐwŠ.ë³I‘Aùq·ú^ÕÉ8çžãÒkî‚ÀÜï Ÿô¬ÈNW?FáeÕè: Ëx9ð*óMR¸µ×ï"B ÃÖ½96(à¼uúÿõëɼWâkÐHôÙ†_¼hƳµ;‘®¶ùýä(G·a5›f*7Aݽ+óüCó£g§é]ܨãægÔÞ]ÚeÈÛ»ý&#¹èÃØÿ/Äußò3\ýE/„—v™r6îÿIˆãnz0ö?ËñB7üŒ×?QZv¶_ê‡ÒŠ,¿Õ¥ÄO?Ü5Áx«ýS×{?Ü5Áx«ýSÐݺÿĪնô²”goNW¾=½GN‡V:­†¥’Ê­Ïâ:ŠÍ·_ø•Z¶Þ–RŒíéÊ÷Ç·¨éÐã#Çô› OM°y ·Yƒ³]Ä–ÆyÓƒšÊråW)+žÇ­êvöòGm#Æ 8sÆy#<·§|ÖDAît‰0Ì Hñªã¸\íÇ:úùþªÝê÷–^B̰¾7m8Y=·ëÐí!Ôš]Óã„)UP9ÏnõÏsËšC’²25Im4é‚Ûù“ÝoÅÅÖÞ@ÀÈàð1ØzT–öP;rªvô±©é2j–0Û¡Hãv #`ð:ñøâ£‡Â:|R$çK°`,’?*ή¥IùT«Ò§NÝJ~T,Å-°íœ88Î=¿Ò´Òš1æÊA˜}Üä…üI£9.À•#¹h€Â»z€Wßמ9«üî*?kK>g«1«‹“\±ÐåuI¦³Y$–óÜŸ•¼ äÇž>nNÞ¾µÎ{F‰¦5´“Äu) d`;¤¼{דÜË~¾(ŠÕçóÕœ»G1t.@#¦zêEtz†»öýPÛ³"(*…!À ·Îp}O5ÎiÚjjºÛBDÐÉ´„²ã<€OSŽ£Óæ»¿Cx×ráðú]Ou‘c”â8ÛPôôë“×ÞºÛoÚè:~¡«#¬énŽÖ¼ïPUÌ=IÈÇ•ÉÛÁª@Ò$n²ˆŸn÷Àüë¾èk-¼úœèÜ·• zwfÁöÔ}9ñ¦Ge½ª*<²üˆO“Ç?zõ¥¥¾“¤Eo Ž´@a·É$Rr~¹¨ÄVå‡*2¡KÞæg+ã}U­4¸ôðTM'Þ €wöÉü qm›´oprã>ÕkV¾:Ö½4ŒJÆùXùÀQü9ÉÀõ<÷&º&Æ)­ ‰c†7„*ÜËngj’6ðs’AŒ‘[P§É6eZ|Ò8÷ î‘Æà† ìú’qŠ·§ÚH·K, ,A””e,g‘µH-ߌƒùŠêãУ·žYdž)¥û¬¯@¹?{åÀbG"¯è6KqwƈüêTü®0F§^r;zÖ×±’6“û?H¶Žßl1É´–Š&,¹n¸ï·$àžÀWià‹K$°¼º‚-“I YÜ1 ´cœœzjáõ‚{шe¤PfX³…îsÇ8SŽG8æ»Í"çKÒ_"=Aãœ.ö•S䯇†ïØñŠ”í«‹–‰ó¼™#ÈwO™ƒÉÇOn½Z…͉×nQP1—'ñçüâ¯O’r¢02d$mÛëŸN3XÓ\Xßi·Z\05Û\AäÌìX$h냖àîÚs€sÈÎÚë­Üå’{= ˜tOëÈé"^ˆ)‰'ܱ7ÞÁäóÜãò««£i¶ÑyQØ€6aÉ—Ó’xà~U7‡<9c imŠ™ Jìw<êÍþZÙ9Óõ8õéþ~•E¡sçL¶¸àƒóÏvzîõé\¶¯ik¦Þ³È~D*Î0sŸ¨÷ú×quköXæ™æEŠ0Î^FÆÔ9$ñÀ¯ñ׋¤ñ^ª,t„±Ä{À ÊsÇÐrpÔóÀâkÚ;lu/u\šû]¾ñ®«ƒevðéjÀüƒŽŸ‡ 8ˆ‘q!e?{óÓøxÏ>Õ¨ý¿L¸[Æií•1ºhe cqœrK*Ý¿xäÛÎ|Åþãr?*»ö#ª[繎2vÇ#’"€@àt¬ã;{ÇT š³5tùEÿ˜×7\ls( D¬ ¿Ï’Œ0ËdôÀÙ)i‰£’õnS“ ùF Øòvú×µsZ’;&‘PE+ž<,˜#‘xô¬ôÖuXlg²GäÜ©I?tmè@ådyëÓ,BÕIŽ ÊÓIfâ[½_\“\ˤPŽí»8Û’~£#¯Ræ+ûmU$ÔP£NŒoF1ÓŽÜ{Œõ¦h•¶’òÉ,nÎÀÙØsœóô«Z浡 Ko]Ù’U—Ó'ü\©+óu=.K'´.Ú§¹\ ’¸<öãõ®²Xcº€Æ¡”•À#ŒQ^m«,3¤…ClP1“Zx¿QWSŠ(×’¬7>çÿÕZ§cΕ · —K,×OÄ‚v0‚p1ɽ鋪›_ ê‘4;ÒòXc*ÌLzá°yút¨ÛY[™D“À!sÒBr3Ç%O?©¬½~{8ü9©ÛÚLn|ø•KH›K6åcòöèqô¡^åUø,ÑÁÆ ÆŒî'šw—¾&s2)VPœsÏNØÁ縨t땺xí3R9.H {c®°ëS2M"X¤U 6c^yãÿ­]šúÎXõËgüýk»ð¦¤/m ´ºKvýÂ>PºßAŠâZÝa€ÜHàF~ãxÏ^çÛëÒþév—ZS^Ü%ÃHÍ·û 6qוcÿ5X©+ùtÜksy‚ÒY )Pä‚3÷x=êÝ“âÞ&‘<­ä†¢8?0Ï×<ûæ¶ ¼Q¿È€éYV¿f6­¸y†Ye;XqË·Oý)AXÙ)AI íÝÌk3$±8ßµŽ1è{uþ]kKOµ\ÍçLv¨!XŒòOüûVªî´¹‘×fÒ4rd³è9ã½QKÆåü²‘¹Ýõç8â–ǘs·Ñ´7 Œ:€ \ò8={ÔVðÍ+®æuPÜrsПéúÒ]Üy—¬Ì BOÖ•Ÿ”L{R¾¡m ÑåM¶…Ýü×ÞK†Úèñ†ëן|x¬ ëYç¸2‹¹|×àHòƒÓ»c×Òº ›ƒ*¬Ä‘"©^õ”Ö¨ñ8ýâð ÃcœÿõÍj!sI|5‹±j›c¼ Õp$íÎ8Ï_@sÐVžžÓËe2]9ó¢rœŸ¼09ýJǸ³Û«£ñÅÇb;ûsŽsÆjí«¸_+/œH’Uçœ`ôãù ºsëei#¬š5›”üÅ0_¾}ë"Ö1öË/PUÇlJv•­Å{f`–p ÛÓ#Øþ=)m¥C¤Ç½²vt?§ô¡¢nZÐï#žÞp€+ vç“Яã]“oi6¨ AóϯLq\Ž‚|FþÝpÁdS€ÙäŽz}+ªÒÐH®I9 ŒsÎOø×އvNÄ~"TŽÞ§%ŸwäþµŠÊ?Z×ñŠïj ícÀïÆ?­cÄÐ;âRWý¡\ÔSQ7¨õ/Ĥ‰#æaŒýkÇ|l»®ð’îÓ.FÝßé1mÏFÇù~#¨Fÿ‘šãê)|$»´Ë‘·wúLGsч±þ_ˆê¿äf¸úŠC;[/õCéE_ê‡ÒŠb'Ÿîà¼Uþ©ë½Ÿîà¼Uþ©ènÝâUjÛzYJ3·§+ßÞ£§CŒKKWÑ­,#0¯«°'pñéøö¯`·_ø•Z¶Þ–RŒíéÊ÷Ç·¨éÐã#ËnMž´ŠY&*9iC랿ҹ12QHÖš¹£ Ç˜¢&œŒmFÎA¸=ÿúõ×ÚkÑírãï× es Ö”›Ìã ž€ÕKƒyf›éð2EpƵHJÈÝÓŒ–§±$±ÜÀ R£)©ò¸äõ¯2ð¦½5£G¦Î¬KÚÄð'ºIüK5¢‡Ø’!'2ãùWzÆA/xæxi_C¨Tª<žÙ5…®^YD²Au¨Gl¬2A‘Tœvçê?J»¤ê°kIu!]AÁê3Yþ"ðõ¶²°M!džÕüÈÝÏÐät8­äÔãäcg yøfm&q+Ù_Gpf<,pËŒŽTàŽýk¢Ûòjàü5àÉ4íhß¾¢Ò:±%yl÷'<ž¼û×  €yÅZŒ€œ§)7"˜_ÞqÇ&­¦Š­ï cÁ'¥Xé‘Ò¦Åh‘ðÅyqM(¨§´ó èp==êµÔªˆ\œ'4¤ÒWŽ'â6 ÖÚ/‘ «Oqsû¤aÒ<÷'ðüÇ=«†Ñï¯,ôË¿Çd ă>vwlõôö=kªÕg}kV £6–Ä7 X±íÀCø{ÖÚeÕÆ¼n­-VâHT9VÈUÇ*­ŽIÏÍŽ:\ ´œÜVÌëŒWc-àe6hQ.¡R 70à*n…gs&°×Iþ¯g–qÉlœ’=z~u·§øv[¸å»ÔDðÈÎÄÂ͸¨ì7wçûW?‹lt˹m¬–IT! È0ŒH/»¡#ŽÝ¸ÓÞÙÊ¢–½KÆ[[he3f”Æü™IóÆO~x®'Zi$°–ëhe¹¨;HRÇ%°}‡ùæ½ÓóøŠ8ná– ·ƒÌ0R$ÎOVà‚OCéŽÆ·±_ø¦IEk];që$™ùŽN;àsèyÁ§J—³M°©WšÑ-x+L–½•OÊvEëžçòãñ5§ã{ÿ±ibÎ3™.>óÐø{zô5ÓØhÃFÐÓrÜ"Œ´1ÏÌÜôäçÚ¼ïZŽãVÔÌÖð¼°±Æê£$9<ö5„y§SÞØÕò¨Ùœd‘®]¤L‘ ˜ö â½ÎÚ!qs'"”þòFó.XÓ¨ÈÎÐ>îj¼:9‡MŠÞ%fHÐHØì½Ç|øššÞ+¸%T’ÜÈãi$À€Aɉɿ»ÕD™Ç(7ªÎ"·’ÞæXä‘%%À;ɃžIç×/CÖ·-¬â¶æpþd£v\s‘ÁÆ;g·ZÌM.ãW»†µZ‘¹ãAÄŠYG;†FìsžMhkRÍifÒÊ©,w;àª;˜ààµnWVF|¶!Ñô××5©™Iha@@Ú9' ÏR1Œg*Ê ;+Ù®u)/áŽÂÑÙ$>h;GÌ è=sÓ¦+Ê`ñ6³yhÚ‡c‘I“÷žYFÜA.Ê0ATàœåˆm•ØøKÁCNs&¥'Ú'™•¤ˆñ ¿/N2p1“޵²f´yšiµRêýÒÆÞÎK}•Ÿtˆ¤]ßÂ:®HÎIÏ àu=JÝ[@b´O*4Q€WÃëY%¼Š+Õ·©òcÆòpn¿¦íÉÎkAÅΡs¹ÉS8ˆœr2@úš‰U•´ÜžD÷Øô(B¬;AXƒx>ãð©È#y$eD@Y‹ÉÍrK«K¥"(—äÉ"'üÏ=EyŸÄo‰ ­¦é¡ÒÛîɇ$NsÜqò‚?¸Vu¤ Äø—ñ ]vàèºC:ؘ ÏbÙÎ0;õ=±sÀövÚ‘yà y(ùÙ²F==3È?P+šð¶„cþís+r€ö÷®»;E;+Y»›÷~LÎòÀÈ\ä`àO·¦=«žú)¬r³sŒãÿ¯ZVÈÂÙ¤Á € 㞟çÚ«^Ù,wqB?{<ûA#ƒ–8úÖo™= \­]CuxäYF²3•Œ2@çÓ¦?JÝo ÜEa/ÚDlè<ªÁ™I ŽÜ ¿¡h²Ãt·R6|³?/¿={ÿœVõ¥§úw˜Yœg’FIãéJ4×Ä÷ª=–ǜړirMŻʊí€Ê6È@õ#=ÁüEkØêöqÜÊ ±1 ‹=zŽ1ÔôÿëUx 5yÚÒ,llN3Ž Ç¥fGxÚm¼“]ƈ̻òX(ÀÈãðŸÖ²•$åvkí=Ý þ!1í„ÛN­„¹Œc(@g¸êk #v ôï\V·ã{½B팻‹ E$dg9,9ÏÐÇ¥sépu(ïgšI%W Ò3±cøîõZÚ4;²Ö7’<©\õpÀó‘I¼zîãö¯>‡Åß<‘†òYÏîYÙ”mÅ™O~Y¹5ÜZ\Ç{iÌG)"‚?¨¥(r—Nº©êY<çš|k“Èã§ê5Õ®‘®Gj"®*²ih#N¥f]®e ½“žÂ´zóÚ²5ÎáÓC•ÏÿžiËc(©Kc–×4de­ˆBÜ´dpµV²]~(|‹kÉ¡‰A`‚ðF£žˆ ×wm³P·ÃGÈAóBÄ,«žO~Fi&Ól—ätÉ(\$°b±ÏåùT³Z3Ó8›]2÷T¸óïgrw`³¾÷oǟλßjsh7i(ŽIU‘¶ÂsÁúçŠÅŸÊ¶ Š/-ÉÎ2Tþ ’qÇzì4Ù!ž1è|°»»ñÛüúSö’nïaÃÜwLÞºñ|“iækK9<²2Îy`=¯¾xô4iZÍ•ÜA£ö!ùã—Žã§Zçšù4}Dà y–ò @8\ž@ïžÿž”Ú°1K!IA;‡CMÍ-e±U+Tª”Iõ;Áq‰‘Øá†@RãñÔõ§~µN]AͨmÌÇnHaþ}©í43"½ÔLPcv2z~µ˜gß68ÀàñÅD«EìÉ)ßTRšÔO™m`Üä6ø‡PIã¾20=»d×µ¸( Ç'åÅtqÚØKwIÇîº0~ª³éг¼ŒñÍž’´Ÿ÷‡¯ÐúQÍutW-·#†çΈ£+o<Ö‡u`P6X ¶=h¹¸2‘"ÇqµÓ©êk64o´´±Ì›“¸sôÎT]½ŠVŽå¦,¡¾c“éÔW3vŠ—M*9ØrAëÈ'óÚ¶o'šdŠH\:¥vçŸÖ±§Yæ›ÌTÎð>ïÇòéUM;Ь¢Ö„Ödý²ÖdÜ7J ÔpJÞ¶“ÌÒbfžNzŸ¥fiÀA{ì‘‚£Øž3úÖŽ’ª4$P2:ƒ×8b+{œŒnŽßgñ¢î¤¡1îÁÁä5uúMÊ\LUBŒ¦ìnäGø×'¢ÄÓkúdh·F…›$áH<ôæº}Åíµ“ P#òÚ'ï/§«‹ýÓ³ Eâ6 ©$ÝŒ=ë°}É­ËækÙQBƒYfhóÎr{àâ¹h¯q5¼j["eݹd @í^mãH‡ü$×EUˆÊÿ!^k˜ð’îÓ.FÝßé1mÏFÇù~#¨Fÿ‘šãê)|$»´Ë‘·wúLGsч±þ_ˆê¿äf¸úŠE­—ú¡ô¢‹/õCéE1Ï÷ p^*ÿTõÞÏ÷ p^*ÿTô·n¿ñ*µm½,¥ÛÓ•ïoQÓ¡ÆG•øªÅ%‘R ÝK‚"d.:þ•ê–ëÿ«VÛÒÊQ½9^øöõ:dx¾”³Ü¼Ú‚ &”M¸Ëc°®gÙ}ŽŠ 펓A¸ŠÙc7NJ *€àS4íVä\®gž2ULŽON+e®.îäìo èÓ\Ö¢RßT?¼o0±gòÇ }3\P”¥+œªÚV‚¢ÿ\ó& HŸ1ÙÀ˜­ÍF$†ÞIæt\!Ï͸5çZ>¡q.¤ïjÌ›H Tí$sì•mjwšÌb‘•®ÖÜ_Œvüš'I¿vÄ9+ÞåÏ ø–ãJr‹¼$ä¦HÛÏAÛô®­üy§?–N$/ =O=?^+Ía[ø”ÿ H‘ãÎSж#¸1ª´-nãÍ`NÏr+²š©ÊÞ†STê;­ÍØ|j÷:´ÒÀŽÇ• “ƒ‚O§9ãÚºý Å ©Ú &UYù ˆyö?_Ö¼öGK±µkKGÀã¥?Þ8É>Ùý*µK¨-ËÛ¬–›° ÁÜÝûcßž+N~Eds¸©§ý§È 1±ÆxãÖ‹vÖšW˜„'’~ž¿…p:=õæ©d_R¹’+yÔeD9 <Ò±æ=>×l’H&V '–ÅCÆ>^¥K©% ýš¹ßGâû9%Q¤è²FT¯ãÐô=k›ñ­u’ÉËÃn&$d·û ~?óÉó&[uŸeµ¸ ²;ã‚ þ?äU½3J7Q¦£ae4ƒåÈdkg$.3“޽}ik'ÊRP¤]\­}pî°[,1 2I±_ VÛŸ~²|AℵµHgrQÙYÊù©œ¤½y$Ž3Û–Tª¹hJjÁ}ãK¯hWvzeÁŠ{¶]´ß¾@ì[ dÿw€s•­ð³EûN£.¨ñnŽß÷psæÉÿ€©éâ•ÃÜ\\j×åäù§”€ˆƒv §¥z}ÔÚ.g!PoîÎ 1å›=FONxàWEIÊPêQææ‘±ã«ãk¤ùaóö‰hU±·»ÓŒ`À…ch¦’bXZàZ‰pTy=qž{g§SÞ¡—L¼×õ+$y  ‘#Ê«ÆI>¿à¥zn‹ð»L³³ÍsŠ¥®dç$“ŒpyÇà îïTéI§~¥º°V±ËÛÛ®¤RH5þbÁV7Ü[=Oé“Þ´®l ©Kh‰’iGÊÃ%s¸è;gœ}®·]ð¾‚,§¼ÕD¢FæwdÜ8YÎ Úäçæ¼Nc¨¶¦¶šúâ+H¦q*D ó.Ìù@©†ØFÓ»‚JÖ1U.îv^'ñ ž€ñ¯Û¡žå")·8D8•ˆÇÍ÷~Q–ù—vÀCWžÜÿlxÒóOˆr«œr£ œpƒ8ÂŒ±wrÆ™Ó&·½/u<Ñ…|½¢.I Æ1Ï¿é]½—‰ ‡KKwÓT‘ÃY›Ó“š×Ñ®³5VLÁ$`nÏÆIcŽSÆ­bËaÔae‰.#'*¤é\7ˆµ›$tè–8+#ÄvùǺŒuò{ÒQNW°®í¹¡ãµÝÄÖÖ¬¾VâŒÑ¶|Ìq…?Ýã¯~ՃὮîÖîñNΣ#ƒÿÖª:N—q¬ß#‘ŽôÅzt)q ŠÀ‘X§PÉ‘ÿ}1ý?!Tív"½ÝØäTÆŒJc€g¸àTK%ͼ…ŽŸ$ƒ¦"H<÷-Œ~¿…,·«$Œ’Ú^Ûí†bg_˜dsíG1i\ÕKÒå,mßýHùIáØœdžÜñÏô¦\¶ûø® .ce`@üxöÍfÙÞØ´›Ôj†$€~˜ë[Gö• ¹TÇÒ¥^÷F”,Ž‚Ï^¶,¾j–FE‰-l4÷Xçc4«´KŒÔ\õÇåŽk•¨Fêàž JÂÔdŠ")eß· ñ’8ßW;nÆ isvKŸ"Í {XËÊ•`qÛ¯L~ÎøžÖoì ™$ÎçQŒœdLþuÐX-´Ï .>΃ ùqMñ ¡¿Óç†!´°Ê‚{Ž@5:§¨§=léÇ~ô•zöÕRñ‘›ÉpØ`À}ñUŤ¤dÈ?ôÐ,×AD=~•é>³»ŸCÂG•ó °½ë€··¤Q#nÿe©ÿν“Ã6Oi¤Ç²8P>ï··¥eVI+8hI¶×A?²¯V9 m§8ä@8Î*6&0c”*Hù†+¬ƒî°ûÌAù}*¦£oæ¼`D¬ÎN>^rN{qX)¸½NÎER.ýbYݪAõÅT‘7Æ}ëgUÓÒÖÖ9á*rûYr8Î@:~µ‡#†Âþ8¯+‘ΫB B±Än²Dž6Iƒê)‘¤÷W…üé³mžA»·BÕ`Häe‘¤#,s’OõÏZ½ …cæCŽ=>•\–ZÒªæîÌÛ{%ܪ§ÍÔ•>ü÷«©$±2ˆ•˜Ÿîç?¥:BÉ\éLÁgÛƒŽœt5ihgr]bâIVÉØuÉ·vHÇòýiÖ²…Œ¤ G¸ç×8¿ýu4ö¨Ï¸ÈT)éIÏëúP½Z6TÚùâ±n6±i=Êwº•Ò̪Ó¯*ç¾NGó?Î¥ˆ–äžsϽTšÁî^KPÛ@ƒÈÕ=ŒÌJÅp6\tö“e.•ÉZšŠ÷V‡m ¼ÏÞzš.ÅT`‘PyÒ2d·•3 ÜP²í\dq\÷}—n¡‘"ôÇ´É´ùíæË¦9eíõcNr%ܱ›±Ó¯¿Ó¥[²#•ꣂsüDãZ馧¡åU©y»la5Î8>õ · ååÏ Éö­ãeõ¬ì" ;gccŒŒãê3ýkÒ33¼w‡cc•ýûôä×\–†|ýGCÜ9¸—~3¸“Õÿ¯ãW4G‡!Œ˜O6 <ýó×ü÷«VéÓ» ?‰I 7>£éúU;(üŸƒ‚VâfŸ9 ÙÆ:zúçšk@ê17öŽ¡±™b1Çãž½Eu º‚øù“¢’?•‰þ-ÃñÆJâìf{¿^…ùvývžp6ž¿túe܆H¡2¤Ím¿68#v1ž&¹1)¸Èê£dѦÆ[ù‹ã9ç¼f¨¾äSvg?–jìÿ¼¸šBÝXœc§5 „‘Èô÷®(%®uIó6$?,LGMý~zå|hOöü›q‚£¶k¬@Õ›†Î:W#ãWZ ÿsÌ×FÞ¹uû“ðGò¤l‘‚I§ir?*õO4úWÂK»L¹w¤Äq·={åøŽ¡þFk¨¥ð’îÓ.FÝßé1mÏFÇù~#¨Fÿ‘šãê)v¶_ê‡ÒŠ,¿Õ¥ÄO?Ü5Áx«ýS×{?Ü5Áx«ýSÐݺÿĪնô²”goNW¾=½GN‡W¤Íw¦Y½¤vÑ@"Q$¾x/"“ŽŠ¼‘øgùŸT·_ø•Z¶Þ–RŒíéÊ÷Ç·¨éÐã#ÌX™<éËÇ ãæePÓÞ¥ÑutL¯l©+´A=õÍÍìÄ]JU‡Èm”„ 9äðw{uëÒ³.<ý[å‚Õm—Y Ùúœf¬M®^-ºý³`HVØ2ORç­g_=Ë4o!PìBî9ÀÉöü*>¨¡Ô>¶åЛO²{{ œ[޽Í^ŸX·ûKÎÍ`ÕDr°çúÕYaÿFd–bʨ†$¥QKRÖ¡O»$nIÆxïRáÊk*üý,mß_ÜÜǬñà ³ ˟γ%·Ôžw’E''’6ÿõª—ÚV;¤3Å(<ìy?Ð×im{£bÐK’ɵò+÷2r{Dæ|1¨E%ÕÇšpè呃‚p8ìrGå[ú—ï]aTÆâ{œÿú«×láÑoc’Ú\¤q“÷ÉÇŸ^õßß*šY¥gÆ@˜©Ûéíß­g:.mI2áQXêSPû6–±ÆòHEU–ä·à9ëØ çu{›P¢Î»äXJ²F¼dœp['¯^>˜–Å…Ýìàæ9"(ÃvЙï’@=ãš[[,î^˜^8˜nÜNNb1ùºc•Ë94¥m ¿ô™&ŠÞi¬(Â-ÇvÂqʃӠ¤`ŸË?•7O…l4‹kXc_8ãsçn¹ã Àã8·mtDÔb‡y'ËÊ‘ƒÓœuÏü+‚üósèRWÐÔøq`¯¯Á1»’TŠ'2ƒò$‚6#ïŒò¹ïŠô/øÇKð­”’]ʯq³rA»ƒœ8;W†ìIÚB†#ióëU|=áf±°ÀԦ̶ʭ—œ–P © ¦í¥²Ì…~Eei>òõ(uoM¥©œ¸†|¼6å”A?; nrs…Tõãevr¸JîÈrÛx›â}×ö…ýÃiš".øÃ ¯2mééøë]„í*Àæ×Í J' &±å‡EòïÜItãÊXá ó÷w`ýÑž}Ò¼¦êÅ©9\Ö/±Æj±³ÙC)—o ç÷-œç§Ï~zV[x÷r2^¢ݹY‰ vrIô±ÉÍz6›g,°}¢ñÃÍ#n´œÐ{~=k#_×­PÜØGpm „ùwz‚ɰDÌ XÔ€IrFÐJŒž£åÆš•ªû:ÓÌéæpWlñ}eVÖâh¤•0ag‘ ÉÈÏ–2ÍŽÓkŸ[ÝD%Ì–Ò1ˆU#!BOÊ»[ÃTÖcÔ!±’×áÕm­Ëã®OA»–är ñÇO´2…i£ $"'`vÆ1ÇN3œW§S )S§¯vgR©.yœF“w5„a„Ÿ2œû÷Öâk’Fë›r˜êÉ -Ÿn?­uöä¢>Ë\îÎ 3dqŒõ<qQKm¤^ÎÞY¬RÌ ªÇò9?Lö®¯»hîûÂ=cc ¸5E´ HY"Ûò«²a±×‚;Ø×·tXî’;­Øx¶´O®â@ÇçZ²jorÖ–÷YË2H.çŽHÝZÆñÕ_óŒg£kò:TУY|Èu‘—½HǾðj§êM檵¤êؾYB8ù·JÁ Ô gaÚ䩟¨8íéW‡‰„F/>ÚXĈH9ܧ8 `d_j¥Sûßx{Ñ}Å•¶Ô¬îãÓŒ£<ªI’NIÈQüû})nµ;·ýɲž&`rÁwclõ8¥ƒÄ¶.$?hh¶ŒéÔ;gÖ­A®ÚÊÈ>Ó )à‘F}9­.ÞúœòÃÆýO=Õtarïº0êzÛ9ªñxFRWlä !?†EzÊ<$±1£©ÎpAœtÎ1Y³[éñ6V#,Ù4ϯª”žÀà‘çz~—ýŸ|K$hþf²Gqœàr};×qäÒMqØÞ[À0™œuê3øàc½X’Â9[w™"žÌ¬nÙÈ4+-©}Ó‚Ì@Mè8>œb†“Üqœ£ªÐÚ„†'¶2:šK’\‰˜ÆóOL㟭fEuxªq‘Ž…e*O¶ÇëLþØxÑZKµSè¡ñø)'ô¬ù{›J½£hõ*k¯o­p¤L«óX\~uÍM“Æyöí]uÆ©oµCÉå´‡%\n>œãšçäµóß²°† +h;nqËS5 ±ç>ÇùV™Þ¯!YXž8ÿ8¨ŽŸ2/Í€9'üzw«Ég [4ó\!›!{•‰ÎzN€TÄ‘¦Üç®qÏ­oéϦÚé’<±½o—.Ë´/r§×·ã\«‚7à‘ÐŒã¯lÓ`¾wR²34YùÿóúPÐ&o]*,›G’}ɪã¨àb§…þ߸Ãcæ‰a0'™&UW«\’NæËTgÝÌöêìˆÆO,cÈÛžÃëŸóÖC=µåªÅ:Ü8`¹Ç¿çTîï!¸PÄ|€•\³gqéŒäÿÀŽIâ¨ý´‹'v[?)ÿgÒ´•d“3糺6­¬D­äÚê2¿—÷—v[¦xÝœåSÜØŠ/1å.‘ÓžƒŽ;W/< âbŒàéÁ>Õ³§<“]³_daTz€WœgŽäÿ‘\óÃ8É;èSÄI« F8Âúp §<Ò ”fùüO9ê+N-ʰè}{U[(~e,çœôéþqZGCÈí¦ãbÔõ=+œ¥¶žD*9rÎ ƒžsïÒ¶¤»6QI(oOÊÞ¤û:W6D×$%ÙÛs“è=O#ó­h¦›e;v÷FfdÚ0Š2ý ò 2Ýn%ðü±ZŒ?Ú%,[°Þ óïBÑþÏpzá¾ðµt쾓0°RY{qÇ«VÌý)š/ÜFUBy3¸à”ã?¥t¶oö[£rŒ$fQß¹ÈV”#D²× W¶ÒË&Ó²”“.W§PpA#޹ÅE§ÞÁm4òܤ“NNÐù*7c$:ãVî{öü¿¯ZΤ’êtQkf¬>12–âÌIØ6’ÿ€ëÓ¯ãO‚ܽз`Á°O®Aþ\}jÕ­¦¢¦4Š1±°•k[è2Ûî¸pß½ÉÃ!R¼úgõ³FÐý”c-‰gâ'ÖåÒl¥¹šåÉaò¼’z Ià2zWE¨øÝt‹X¡,®õ”%f¸Ž `ˆ´mÎ|ÆüßsÐ7!¹±ž{‚Öå­DØûFÕÿZ*¬x$·N2r7Z Õ¹`DoƒÑŸÖªHòØ™EÞæî•¯è®òÜë)©K{!æhÝd'Ü–çëëךî-õoßC½µú[°þó)Áå˜`óï^6ñ4GkåO½*£ƒJpSøŠŒ¹uG½ZYé6Q%»[ÜFr¦]ÊÙìySÓð«6Ë&‹dò%ý×—$+HÞZ(äásŒuëϹÍ|þ²2ãkzçÒµíüK­[³P€Æ’œð#¦ŽwVg»§‰u_²˜Ñ^B ¤S&0IÈ_lõÅsú注5Å®¡vûÂ\)|¡Â¾à0 ù~@p3’$àc‰Ó¾!ê6бºNF>f\1ü¸ý*{ß ë7¬@‘ÆÝÆ@@ã’8ëÇžüå* K™IGsº¹ñïö ·Ð¼?A©NŸ<ÒíXí" ó>Aì=†8èòØëzŒ1ÂÂ-O#ÈÞBµË1?¾r{±°v§s¬A¡xCì·RÏy­ä9–R<¨*0 1ò™U†@•>µ×hvzI­ˆ :*Ž3Óÿ­éZZMå¼hŸm;d*X( s‚{ÿŸjâžš”žÇLj{7y–¼ÂŠ¡°_ÈÏÖ™0i"$mŽEù’F&½#“ÚöLéÂBœê{Ý ×³¿ ?»Ž%bßf;€ì?Z給Ӯm`–ÖÞâ9Œ ïry2A€P>œõ²Ã µt1‹±f°ô9Œc¿N=*•õ¤î Fíæ•د``^Iî8­0Ø©ÆiÝ3Ô©JœâÓG==²Îæ]*â2~[yQÙÊî%ºzÅTM.ÒX’D¹–ÞåÀeŽò%NH ÇæïÊÿtûWKª^3M­‡—æÜÈTJ²çhLvÉžÇëX3ÚÊçí7m,žw+&þ­Ô“Iúpkè¡WEíÔó%…Œ©6U›G¸³Ü_[[i”Iä 8èðý Moi®¾EªËt€óüÄ=8ÝœgØUS–P­žu 9Á¨àuô­KoY^é‡R‚9­A¶\;ŠœepqßÅl§ _S àê§dÓõ*Úx–ús$hÊœÈx?\ý+AE{E?Þd“ÁþuÛjaFu[Ù•[…¹‘]p:|¬~8¨ïÁ‰Zg³µ™•Í2…\÷ÿU·{zr;¥Z ÙL©ex•iSû™¯ˆ´ÙßgúBÕçð$Õ˜o¬d-*]Bª~ñ“?ž+—´´²Y?Óìïí¢Á&kiEÇä¤gÛ¯ãZ±hÚeéì:ÛÛ‚H ©ÚIvp˸zww›ÛSÓ‚îØÒÜ x$M¯’7È9ëŒUK»[v6[XÜÉòîe8'ùÖφõ3óÄm.ó&Ð¶× #õÆB/ÏúVT×ñHQÞpéÕY‰?‘ëô£­Ð½™ÖMgj°¬î"@:‰#'<ç#½SŸG™æC¡*”·š‚MÃðÛüÍQ‚ãU–âH¢·a^éNÌàà€€» ©P@=qSÙë.sö¦·e·5Ž»~éëÓµZ‘‹¦Ñ[Vv´¹ØPäíl©üùÿ"³…Û îöòà¯G=3ŒÕÍUÑö‹„š9 †VVWŒŽsµÁäc#8*GQD§º7’Ì>P9ÈçÕJjÖ%Ó{Ø–×ÄSZ¬m¦DÀ?½‰”²û`ýNi—Ú·ÛXJ¯µmò„ ãžÎ*E·Š{y›@9 ½Ïn}9çéYב‹i~ÑsÉ`2Ùo˜äqœuÆO$ ÏjµfîCºÐt‹1Æè~CØ ãð¨’3$™”áÇÇÚ–Ö_9¤'l2 m’Û»Œõ?Z"7lº³1bd!ÉãùÇsþE]ɰ.Š9!ìþµ¡§]On†80¬ê ÔžßΨE é;d–Äðî˜=ë»úâš’¼ $Ÿ1~ðŽ\çè;{ÔÉ] ÇAcwpãË”È8#‡¿?ëK%ɹ…ÕhãÏq“îåøÖrkVë°˜îQˆò î0I­}NÞ7Rn-ƒ7Ì«4›XŒvÖrÓ ¬@ïö¸ä»eÜ ÷Èç#€ªRÏ­ãVe‘>Va‚¼ôÏu5¯ªÈa!R‡ÌnßÂ=zû~µÎ[á|ÆH$8ÆMU/…²]î’%Ӥ𠯒5 2‘½¹Æxéë‚Gãô­]5ÜiåR¯,€í=·iR=°ˆ ÙêÜÔvCoÚ´Èxê‘䜓Çâ•VåÚÅ{R¶úÿ˜¶¹È# _Ô5&kˆIÚwn(Ù€Ç9ç=+>[ÀAÃÄÑžq‘´ñVî4ˉ'¶¹,†1løqÐ 3úb²ºšÓr,ÆY²dϺº­ç€_$çšE‡Ë†O”ç UsÜ•M- Ó]Û9+öpQFvï›ë†­‰|kw.‘o§K6ŽÝvÆÎ¬Ì¿LœÝ»W1ŠF\ŒRnú1Ù#Nç_Õ®Š4—²nOºËò°üG5,’Ï+I,Žò1Ë3I?Z©#Éá¨[ÃüJÒ‹Ñm$qÑ¿ ·ÀÆA¬å¹…Ï$©÷aB·Ül®jeã#N·vsÎEiÛY@îJ9ô5Î ÊxíV…áFXXΛ{3hMu;{K%S¾ 28Êõ± vùÉGIPWm¬Ë #‰ÛØzWAiâÀ&Ù0 \W,¡V§Ng_ê2F#¶šÆì’±… þ¾Õíw3–¸ó²y'w× §‰-Oõ‹´à•>¹ëšÚ‡S´ºˆbEÏSYºÒzH¯d–¨Àºx‰2£ ¹ïXWiÅÉ$õ»É!²»VªäÇó¬;Ýþ©¤TÏcœÓUô!ÁØómJXã$zVOÊr+³¿Ñ¦2spA¬É4›…sº¸5× Ñµ®a*otaŸ1 ã<Š Ò!ä)ƵÏk„Tod|ÅÌ{wŒ…<9ûqúVŠQdZh¿á{«Ý3Íýž"7cøÛ²SëŽÞ•ÜkZ¾™¤iŠ÷öÐÝd¾èsŽ;vÏe¬]hñáYp@VéÈïëÏéÇCXZ„÷z•Û\ÝÊÒÊÜn>žƒÐV2£Ï;½•^XYn,š¬Ï%Ó¦w@K` Pz8œ*HYr»½1š«övS‡ÏÔÓBK²d^k¡Å=Œ#'©¹m­jVa×1¢°;V Ƕq[–~?×m˜ïž)ц RDŸ®Ügñ®-n&ÈÏÒ¥2Ô8³eQ3ÐÓâTÒe¯tÈ¥sòþîBª«èþ}ëWIñÖ›qq˜‚êØÈÛ£vsŒ .NsØÚ¼¤N¹ç9«v7íe}my )–Úd™t%X0϶Edé¦õ-NÈö«[ hd•­¬Ùw¹…”`ž€°©å³²ÔÅĨKb^H_#N}«”‹ãeóÿ®ÐìÛý×qÿ³V„ôɥŽû'Èüˆ«öÝHÇÚÇf}OJûzS Ƹ;J/8àôËcýãRǧIci*YÅÝEryÏïê8Ðc‚¿ñÓ\j·j§LFU+ij B£`E¶œcw|“œcÝ·Œµà!U‹M½ –“Èù›G]ÜŸŠÖÂÊQå’º7…h§tìκ [´CêǮHÝù“ŸÇ¬B-Bedp¡9ÀÁ˜Ç]ÝsžÞœæ>#[¡-¨i7Vð/ÈDƒ?ˆQùчǹŒ·ÚÄFFÿU,,­ø²†­qÇ/§ óÆ:[©%nk˜’Yý’O¶5ݤM !nÆÁÊò@ÜſݳPë×Ågkos–óÄ)N?Ú\u<èIã¡®¹/ôÉ¥0Esorò)>L3¤„ûçüö™ìᵈAmgµJà±mQëžÆµ%7-ÖÆÆ86ìÏ,$>ŽzZÛ·¶ŠßKµÅÉ–Rî²BNV3…uÇü\úe«¬:fžˆ Õ¼ry§UÎÕ|dŽ1ôàñPÍ h°»Z•%¹&VÉæ1àglœqëÏ|»'tûΧpAøíÏ #¹Pq±žêIYH$ä /nÞ˜­£-/!(6ìŠâ{8…WØ~îé ã×n:Õ¸'¬ [_H#1$…H8ÎpÈ#ŒôçR}š'*¬¡zϸ­dY¢m¥ž2?.ãÚ®2Mé¡S¦Ò/[ÝÝÚï"à”ä§–ªôÏN¼T±ß˜T„··ät FO©æ­‡GHî_äóÌŠã#±ÁúÔ_aK…†FmщÉ'pHúãŒbµÞ©œRq_dš×W…P4ñȲ©ÊˆpWÿ<~´w¥´²»yù”ä `äñÀúsY÷:vÈáXܮ܇fÎO¡þ!úߎcEp¨Ÿ,¹Ê©°pxê2üûŒVôÔä쌛‡]åÓ¥ˆ›rË!è„óŸO§'ÛM±Q‘29RÙÇáŽ+—òïdš=» :vïíV­§¸³Ÿr. PsÇu=h’”~((=¤lÅ^3"ZG»Ÿ™cõ…i¦‰k ¯˜d1Ì™#c³ŒŽØl÷ö¬;k›ë[mð,‘Æä¾ï+ œuÉJ™|Ct‘dÃo'«˜ÎHü¥dªÇÐÓØIífmE4˘¼d`§” ‡öÀíüªŒVW)9—¼%ÞF' ‚Àtqë×Ò¢Ä)*Èm¶Ã ÏßÜAú;ûÕäÕtéå¦0BÙó$t9éÀrzúñíU*±z¢U íb+PÒx³MM»·3ü»·qåœÿŸJ뤴XcXcËòï=ycŸêÇ¥r\–Sø«O[[**¼|¸2½:ަºÇI¼‹Æ*C[™mÇQž:û“×Ú¹ç+·èi8%êg=ÂM)bp@U ŒŽ´ÈåYFAVû½éYzXy KäÄ•ãüõÖ©Ú¼JûVXÛø\ ÷úVrÑ¢fÌ(²ZJÅw°9 œzW9㟒òÐÿ,Jß‹2ZºFFN[v:tÿë×;ã€ßj´Üyþµã#ZŸÂg$áIñÜSp ‘N3G>ôÒ˜<׬y§Ò^]ÚeÈÛ»ý&#¹èÃØÿ/ÄuÈÍqõxIwi—#nïô˜Ž6ç£cü¿Ô ÿ#5ÇÔT–v–_ê‡ÒŠ,¿Õ¥ÄO?Ü5Áx«ýS×{?Ü5Áx«ýSÐݺÿĪնô²”goNW¾=½GN‡$ŽG¯á_[[¯üJ­[oK)Fvôå{ãÛÔtèq‘òšÀsùTI7±jInKŒö¥+ŽÆ£Y—¹5&ì•…Eš-4Ä#˜§Iç?….Ñêi\v#ÇÖ“ê]žøúŠ6ïEÅb¤èrQaƒÓ®PžÕF検qZE‘%Ô¦G4GBA§ŠCVA*^OGÈ÷欦¡Çï#QTfIÅ1Ýš‹uo ኟqŠ™rT`}k”3!Ê’±©ä1¼³ËÈfÏÖ®ÛëG€d9ôÍsi}2õ`Ãý¡S­úŸ¿â¥Ãº-T}ÖÛø¢êGšÄÐóZö¾2gé ä|ÊpkKˆ`8^*@¹å\ÖÃÁô±´kËÔô¨ˆ’Üðz¨Áýk‰¶ñʺR}rs[Öž/?(c’cЇN¤KNêp­µ¾láPÏ&²¤ÒæQÌ,@=G#üó]ñ41mø9þ!Áüªí­ý¥Áh„ÓrœÓö’ŽäºIìp“[mb zàŠ,݉ùô¯IK :iU¨ÉÆ <~µZûE_:!QH®@˜`d€xç¹=þ‚´UmYœ©¾ˆã¡Ðæ—’€å‰è¯ëKu§ÃlªU÷ÎÃÏùÛjº\Ž-’ÒN|„y\¨Î⼌LưeÑîQÉd21êwdþ´ýªNצû›[î“ÐðªÍ ©ÉP~•Ô\ZÀ/!=7.3YòÚÝ8•J¢aÈÑ—DOšdËw ?˜¨…Õ¾ý¬äC²sޏã¯^õ«.ž’xúVlºiVÜ„PzVÑš0”ZS’+ —iϼ:ŽHš*’G¨Zø§Å_kH¢¹·Ô„KóFžTŠGO˜® üêͧŽïmg»º¹Ñ|›UÞÑ…À Hjò€²2•Bp9;Ͻ]‹ZÕb`[ÙŒ*6ˆ‹eq鎕.ŒYJ»êzíŸÄ]Ò7º´¹Žv8f‰U•}ÁÈ?¥lÇâ_ _bÔbóÍ— €¼³€=kēDzµŠxãB¨Û8=ºúTçÄVSÊw¤Ä¨£]£˜³îIÝSìU¬W¶G±yqêóùš}ÔW~VhH“ޏïü¸©ï4™˜…Ï\|¯òœÓŒþµãQßè³I!cyo¹aí–b+_Oñ«r]Ú$\$y²~@ ¿¬ž[£hâ#±é‡Ã†Ò¤ÃЃSÓžê…ïƒcGuˆXÕ¸ÆïÔñŒýsv¾1Õ£¸ûKjÚUÜB?”\¯•·èSž½súW§èQjúï…`Ô¼»Ie˜¹E!‰×eàÄôöëRáU Ô¦úœ–áKÍ>âk~ e!š"Às݃d‡88Ï5yô‹QrÐ*YÆ y-h¤öN 1ûáô溉cÔ¢ti4«‰PZXʸŒã§]Äò:-g_êvž`I§ûUî6)ç$cùTsÍ+46£RW¹çÚ÷‡õí‹-D |‘Ç!]¡x>  ëÀö®`M5ÍÁWiÊ º¸ùÀÆA=ñÇ^ƒŽƒ¯®Ã$7ö³4J»ÔgÎFßoT ôäý;ò9Í™Wuâ‘æ²(8qן˜`cüâš•ïqµ(Y#Ì ª¢294'¹q¶>¬Ç ÿ^+Ô"ð픳Bíe ´¼áÑXóÏ'×ü÷ªçÁöp²!¸…¡Q„R¥=N9ïÿê§^Œ%RV³G ©<[XÅ:ªàa*•z`᱌ƒÞ­ãe¼†ÝüÉÈܻЩì1ߎúö®‚÷Á“O/ÛÛRBìHe„Ï|“Œqè~•ÊË xƒJóF˜Í-²íDeÁFã×ôíž8+jjËVqÕ³~éŒ5KmÈÿi-å±$IÎr½ÆHÈoÏ>Õy¼ã-­¼,²Ku³ùlPùŒÆÐÅ”dœAôÆš6¡ý ßm´˜!}®mÑ\gÐm8­6Çû;P]BÝæX¬\M#\)]å ¸M¹%‚޼ɮ/d`˺}¨½-?•Ë1óþ® ÙÀ ÐðÝúp8#'FU½E3BüvÆÜôú q\Ýô²Xk¢ÚQí¤ÚÉ,‚$BOÌW<.½28ç5·£‹‚Úêia(»REû¬HàÐ Œ§85œÛG-E$î™'ÚakÓ ‹{[—ຮˆÚ@á~ }}DŠkv w¯îŒr8ã'89ÏܘÅTÖ¬™—í1GbÜÒÏG¸8µrÞÒù1ÊäñþšX¾o9²Ì“†b}3óë^œ°ôä¶<(fšr¿3ÐËÐ4ÿ±xÂ%²(ÉR¹Á ¡é“A-¾rŽE».A\¹8ãêzg½yÜÙúœÈÏæÁ3ÆŸ6@P€‹ž•ÚÛ¸¾ðâ¢\”3‡fêÙ,¨ÿëW‰^›…F}f§¶„eÜÄYV{ÈåŽmÑã­Ö¦™QœPHéíQ\*G±£DR%BàŒvþuM®Ü²g)ów>Øï\îïc¯E¹¯lî–¤F™ ô=1X>6ÿ›n qúVå´£Ëu˜¹ÈÏÓ·ãXþ6“3Ù0L~ï•üª)ÿ%ÏøLãˆã${ÐFŒ‚­I˜óœãQ¤p¤šõO8úCÂK»L¹w¤Äq·={åøŽ où®>¢ .í2ämÝþ“ÆÜôaì—â:¿äf¸úŠ’ÎÒËýPúQE—ú¡ô¢˜‰çû†¸/ªzïgû†¸/ªzÛ·_ø•Z¶Þ–RŒíéÊ÷Ç·¨éÐã#ãî0H¯°m×þ%V­·¥”£;zr½ñíê:t8Èøó€=i `ÏÜÑÏPM&i=iˆ™eeþ/Μ.Àá‡XšcsRâ™JM ¢—+CºftˆT‘M+”uïW.#¥”ƒôª€qZ#& éE/AKŠ`6— ûQ@ SF{KÞ’€œ®Ê~V#èh¤ÅXKé“‚CqVQR0èGÓšÏ#ÖŠN(jLÖY­åèê¿'–G*ÜV&iË,‰÷]—èjy{¤mn‘GΦŠþh_¯=È5üÊ9!¾¢¬.£pèG¸æ¥Âû¢ãQ­™ÒÛøŽxñûÇà÷æ¶ì|ZêÛ\†BA(G PrSù× ³[È>Y}ø©•Jt9±¬tÐÙW—]OS°ñ%²€†1Ý^€VÌ•Óc1žÞ¯YfŒåXôõ«°kP®K’éšÆXytfŠ´êDz{€:ô*Õ”|7É>\qñõ\þUÂZø®x°ˆ¨^lÙxËËÇÎHÝ““Ö²tåÑ¥ã-™«wà· ´%Ø îa‡Ž£‘\ýχ® ,vo^År ü tV^0ÚØ_/ýÐ+]¿ýzL³(_0àtéWVÔ£‡a”J„qæ(cb~•$š¥­ÎÕ“Sr6qŽ3ÏáÇVatQýãrqøý)B—f-ÊpÏ­^XôÉåq ãD áL£°äãëO¸ÒÞ›í–l§¦Ù?¦i^C´šCaƒ¥7‚w@à6yúUÿ°\„ ¨²+wFk8ùÞ·<àÿ꣙ö${”á…™âù‡$ž¼ñÉúVü¾­m~Ÿ-³€c“ÊTÏ^˜ 2}‡5œ¶³#nŒwqùsQŸ4aÉrú‚@éÏ¥ ¥ƒÙögq§|`ñv˜V9ݹŒ>qþÐÁ?kxŸâMÏŒ¼9œšX´àqƒŠìü-wá峚×ZÒ-ÑOÊ0PAê+:ÕŸ.ŠåÒ¤ùµ0¼¹±wî*ÐÕ5Pá¾ßvHpÒ³ } ÅwËájn§ê9PpV9À9ú8Éü*‡òÇ#ì¹ýÅxqŸø¥p}bÛœ†‡Žõ»9¦h.‚chš 6ñŽ6ãõÍiÁñq.4åg?.èå)ÇЃÎ8ëUgð~©`ˆbœ“‚"qÇýõŠ¡.w–Æ\ž…P°üÆE ´•KxëG¹TŒ¤ñr´±£ý’OaÚ´íuÝõ]bÔ G\ó#yj}1¿¥y´–±ê'ÇÞ ²óì–WkXnÕð KÆ~ë0yþUiÆHÎK—¡éWÐÚ\YÍ-¼–¡Hݾ2§œpzú)õè}+›µmy½´–qùbuxÈÉÀ#‚sŒzäÉYt ·Ú4«s<^h’+œôb?å¤|ôê ùÍ*kW±jR ëág÷byw‘ëŸá<ç·zÞQNæ<ïC¬“@Ñu«µ[e•¢vÜÒæFÇ®vº8<àVWü#¶Óy¦JSÊ ö˜ÒL ù›œ2sÊ‚99=3 —Š5[+«‹‚-ç’}»Œ±`dp WžqøJчÆ<Ç›I‡Î”#ÀþXn1ÈÁ$ûæ¡ÕìSÃ'¸Ë¿Ãsn¡]ͦѵSæ%{r:óƒÏ Åa}—P°¼g–hÄ-6|½¤ìôÚØ€3ÙyÊ‚6b×là‘<©ïáBÛŠ»Sœô$ç·o›¬_ŨJ=Gí€2ÒÄŽ=~]Ƶ¥QÅîe<4Z±•¨xvý.Mõ¼w±E öUy­»¶§<àgéÊýžPY/äÄ<eˆ† Ž™û¥¶óü9üksOŽç÷SÚê¦D(R7m8Ïjè£óf‚X¤ ²Q´²±ätéþzWLqÕSµ®pO*¡$¯t¾_žç’ÄÞ Dµ¡DhûÜŒ‘Ó×`+¬ÐQѦ´»¬Ò c%HƇõ­}WF·–Ð=µ¥³KŸšAÞÃG'¯J»e¥¬Ö±K&LÊÄ©'<ƒÆOoʹ«W[÷=4RŠÙíÄbå«y\üØê?NrHöÑ,c+§ŒœÒ²¾UÉ- sƒõ'Ó¼ÆXÜŽ[8þŸáX—Ô¹iý–@ëœ1>õÌx¾Vwµ$ôº›r #ƒ×§ÌxÑ·In¤c¦Ÿñ¢\¿„ÎSzþ´‡ žp}1O* žj&ùzs^©çIøIwi—#nïô˜Ž6ç£cü¿Ô ÿ#5ÇÔQá%ݦ\»¿Òb8ÛžŒ=òüGP7üŒ×QRYÚYªJ(²ÿT>”S<ÿp×â¯õO]ìÿp×â¯õO@vëÿ«VÛÒÊQ½9^øöõ:d|u_bÛ¯üJ­[oK)Fvôå{ãÛÔtèq‘ñÙsÍ$ CÖ”àuéMÎi=iˆ ãŠLÞ‚)Bñ@Æ‘ŠLfŠCë@㚥—Þ{Ruâ¤À>´˜ô ãšB)Æ“½%¸£ñINÆh=(¢Žô¦@ ‚{RíKۥ踣´{P ){QÀ §,²!ù—èi)  I¨N¼0÷:j1Ÿ¿_qÍgQÞ§•™›+so â@¿6ÏâVúV)VGŒü®ËŸCK®c}ZXùRG¸5:jWQ<Æ8õ¬$Ô'^¤0÷e58ÏúÈÈã·5š{¢ãQ­™ÑZxŠhX³ “Ü~~µ±oâ¡C»çÓ8ú×—6Òcëž)ì¸]Êr1šÆXh?#hâ&·Ôô«o’¬0të†~¿jÛøŠ€¨û¹Ã†+ôëÅy nØ–Jµô±¶NyëÚ“£$¬˜Õh½Z=—íºMù£Ž0O>pxïß½Isáý6ö9Z;”ä¨À·ù>•ä0ë7Qà–fŒç§âkZM‚²Hà#ïqõ¬\'Ѫtå³:íOáÊK6öéæ…Xœë€N?ýB¹[¿‡wÉ>ÈÁS´dUHÈ{ãýÓ×Ù/AÉdŽáÁqü~àà? ío< ía{r àûV]ï‚õ%U-$ŒÃÎöçµTkA’éI °³‡·Üc‘ù‡O`O¦:q@sŽƒ<àv«ë¢Íj‹ ÞŸ)F^‡üóP½µÜ*L–çrW‘þ?¥e'w¡Ó­fUV–2¥X©R[#µléÞ/×4Í‚éŒ`îçr·Ô¥dFb22:Ž„SYœŠM'º/ÑýÅvªjVÍݤ‡äoÀt®ŠËƾ¿Zåìä#q'Ê?àC¿á^7å<ƒëÍ/'¯ëaá.ƒRg½2ÇR€­¥ÄS£àpüz㨮W]ð,"{e1"7Ú¤z޼ƙíÉ’ ‡Œçï+ÒºOˆ!µùè\ è&ñì3ÍeõW`ÊçOsGNðD°/™¼§9^ƒÐg>‚´ÓÂwEZC:s®˜?‰ÿëU+âe¼°¼Ò]cŒîw€–UÇFlçtVž'ðæ¨ˆ Ô#‰Û€’ „sï‘ÿ묧÷»aU±ÆÜxkQ…3åE+çc“üqT&Ó/ m²YÍž¹T,?1Åz¯Ø|ÄDQÐüÙŒŒa²;†9#oëÅBœÖå»BQ|Â­ËØõ¾Z˜þ\t¯X}6)ÕƒFœÁ¬û iÎŒ>ÊwÚ1ƒUí_TN‡—ˆ‘BîA‘ú.® Ï“u2d`€ä “]]Ï…m¸&HÉl*ÆÙ'¯PAíþyÅAqàÙA&;¯Ýž“ŸÄçúVªµº‹•ðñf¥`P<±K]»$AÌ`þµvÓÇ·4vñÚÛ3³ž^áƒêrOÔÖn§á‹´tFòîÛçŽ çj“GÐMº–y™1±v¶à=H?çõ®˜8N7ÜÊw‹²6Üe¶Hÿ=iȸÉÇðút¨á_Þ»99, lëštŒÉ†\óp*ºYù²ac;X ±Œàb¹¿’^Û'$''Þ·Lïäð„œò1Ó¥sþ*pëlÁqÁQJ ûXÜ·ü&seºr9ÅFùü}*V®G~µŽœûצyçÒ~]ÚeÈÛ»ý&#¹èÃØÿ/ÄuÈÍ?ÔQá%ݦ\»¿Òb8ÛžŒ=òüGP7üŒÓýEIgieþ¨}(¢ËýPúQLDóýÃ\Š¿Õ=w³ýÃ\Š¿Õ=mÛ¯üJ­[oK)Fvôå{ãÛÔtèq‘ñ¾yë_d[¯üJ­[oK)Fvôå{ãÛÔtèq‘ñ ?•$ yÔŒJh ù§…ϰ£ÜdRÀ§sÚŒhSG àñN 柅 (2)¸©çÖN´Óì8¤éRwëIZi¤§cš ÐÁÔÜsNúR@ Ç4S±F(½èrE/µZNÔ”êLPQŠ1E'µ¥‚=è>””½¨üh)Êî‡*Ì¿CŠJ(Ìw÷Haè¬Gª)À’,z•çô¬ìQJÈwfÊ]ÚÉŒI±‰þ!ŒU¤bË”pà÷ë\Þ)Ê̇*ÅHî)r˜é‡| öÇó;ï,²ºŸòkžP¹Aþ´·ûÜÕ¤ÖŸ2%?îœT8§n¦ä7×0ÚÙã·_Ò´m¼Q} $|Ó9Ì®£k'RSÞ*YƒªÀ àⲕ=ѬkÍu;«?Ü&Ðå\“ëñ­»_£‘Î ŸyKÆq‘MóNFA†²ú²û,Õb™çoã cÚâ9ºØcþ4°ßé7s¼°©Œ‚$!üÏâ }*ždÈ[‹Y¸ˆ™†yàâ§ÙT˜ý¥7ä{Oö%Ê’„Ékå”ýj³xbWe…À`ØÇáœgð¯8³ñÌ8ñê»kã‡Áëϧ5””º£D¢öf½Ç‚„± 1'óýkž»ðl±–u¤žÇÿŠþ†º[?[”*]•F3‚z~×A‰lîÀ˜È'gü(S¶îÂö}$›E½·v ›‘s“´®=»nµA“hýâ²dîÇ¥{ƒ6rNè„dðvñÍW¸ð¶—¨±hî¹ànPxúõªRlZ£ÄÄ9¯CÜR4L3Ð×§ßü4@Åátÿi‘öçñ5Ï_x"úضÉAç…•{}E>p½Ï>yZ9 “,Spê,tÇç[ú³a4Í­²Áªîv#<0Çøqó‡®i/´[¸÷ m‰QŸ™áý dýšXÁ%uGä¡Êçð5Ò§+3šTäѵkâ%°¹O²_^Z“Ë4¹@ô vþetZwÅ ZØÿ¤/c8!¤iN¼óÏ?ýzÒ…>HÕ•ä‡<‘ìL‚@àâ‘6ºW®}Í1€$`ãw¯5"/”JžFyúÖÖÐÊá$kömÌÞäúW3âˆÖ8íÀ'¹Ï­tåöÄàƒ· Ú¹¯ÆV cßšˆ«UËo÷m#™ FOãL ç“ž†£'æ§0R£wéœÒ¾]ÚeÈÛ»ý&#¹èÃØÿ/ÄuÈË?ÔQá%ݦ\»¿Òb8ÛžŒ=òüGP?üŒ³ýEIgieþ¨}(¢ËýPúQLDóýÃ\Š¿Õ=w³}Ã\G‰¡/ñ@¶ëÿ«VÛÒÊQ½9^øöõ:d|‚4 gþÿø ÿá__Y”6Y1@ѸwÚ@f\ÿ ==Go¨…tÍ7åÝa`:g»Ÿá÷oÈtÉÂòXÐuŽúM÷þ?øSƃ¬ÿ «ïüð¯¬WLÓ~]Ö¦q18û¹þvü‡Lœ ¦i¿.ë Ó8˜œ}Üÿ»~C¦NXù?ûXÏUøÿ·wÿ _ì-[éwßø ÿá_W®™¦ü»¬,Lâbq÷sü>íù™8LÓ~]Ö¦q18û¹þvü‡Lœ 'ÿaë²o¿ðÿÂì-`žt«ïüð¯¬LÓ~]Ö¦q18û¹þvü‡Lœ ¦i¿.ë Ó8˜œ}Üÿ»~C¦N …“ÿ°µú_à;ÿ…BÕÿè}ÿ€ïþõ‚éšo˺ÂÀtÎ&'w?Ãîßé“tÍ7åÝa`:g»Ÿá÷oÈtÉÀ>OþÁÕÿè}ÿ€ïþ‡AÕóÆ•}úöð¯¬WLÓ~]Ö¦q18û¹þvü‡Lœ ¦i¿.ë Ó8˜œ}Üÿ»~C¦N …“Æ…«g&ûÿßü)¿Ø:ÇOì«ïü𯬗LÓ~]Ö¦q18û¹þvü‡Lœ ¦i¿.ë Ó8˜œ}Üÿ»~C¦N±òoö±ÿ@›ïüð¤´?æÿ€Ïþõšéšo˺ÂÀtÎ&'w?Ãîßé“tÍ7åÝa`:g»Ÿá÷oÈtÉÀ>NþÄÖ;éÇþÝŸü)ƒ¬Ž²¯¿ðÿ¾²]3MùwXX™ÄÄãîçø}Ûò2p.™¦ü»¬,Lâbq÷sü>íù™8ÇÉÇ@Õ›‘¥_ÿ^ïþßìcþWßøÿá_Y®™¦ü»¬,Lâbq÷sü>íù™8LÓ~]Ö¦q18û¹þvü‡Lœcä¿ì`Ì*ûÿßü)¬ÿ ›ïüð¯­WLÓ~]Ö¦q18û¹þvü‡Lœ ¦i¿.ë Ó8˜œ}Üÿ»~C¦N …’Žƒ¬q"ûÿßü(:±ÿ@›ÿüð¯­WLÓ~]Ö¦q18û¹þvü‡Lœ ¦i¿.ë Ó8˜œ}Üÿ»~C¦N±òOü#úÇýoÿðÿÂì cþÿø ÿá_[.™¦ü»¬,Lâbq÷sü>íù™8LÓ~]Ö¦q18û¹þvü‡Lœ $`k'þaÿø ÿáKý¬Ð"ÿÿŸü+ëeÓ4ß—u…€éœLN>î‡Ý¿!Ó'éšo˺ÂÀtÎ&'w?Ãîßé“‚ácäsáýgþ7ÿø ÿáGü#úÏý/ÿðÿ¾¸]3MùwXX™ÄÄãîçø}Ûò2p.™¦ü»¬,Lâbq÷sü>íù™8.3äøGõŸú_ÿà3ÿ…'ü#úÏý/ÿðÿ¾¹]3MùwXX™ÄÄãîçø}Ûò2p.™¦ü»¬,Lâbq÷sü>íù™8cäoøGõ¯ú_ÿà3ÿ…ðë?ô¿ÿÀgÿ úåtÍ7åÝa`:g»Ÿá÷oÈtÉÀºf›òî°°3‰‰ÇÝÏðû·ä:dà¸Ï‘áÖsÿ ‹ÿüð¥ÿ„Yÿ Eÿþ?øW×+¦i¿.ë Ó8˜œ}Üÿ»~C¦NÓ4ß—u…€éœLN>î‡Ý¿!Ó'Àùþýgþÿø ÿáGü#ú×ý/ÿðÿ¾º]3MùwXX™ÄÄãîçø}Ûò2p.™¦ü»¬,Lâbq÷sü>íù™8.È¿ðë?ô¿ÿÀgÿ ?áÖèÿ€ÏþõÒéšo˺ÂÀtÎ&'w?Ãîßé“tÍ7åÝa`:g»Ÿá÷oÈtÉÁp>Eÿ„Zÿ Eÿþ?øQÿþµÿ@‹ÿü𯮗LÓ~]Ö¦q18û¹þvü‡Lœ ¦i¿.ë Ó8˜œ}Üÿ»~C¦N ò/ü#ú×ý/ÿðÿ“þýhÌ#PÿÀgÿ úítÍ7åÝa`:g»Ÿá÷oÈtÉÀºf›òî°°3‰‰ÇÝÏðû·ä:dà¸%¦•âþãÁ¶sý*u²×‡ßÑo[ßìÎò¯«WLÓ~]Ö¦q18û¹þvü‡Lœ ¦i¿.ë Ó8˜œ}Üÿ»~C¦N »>X];S|ѵ?õìä*“ûSa¹tëÑõ·qý+ê5Ó4ß—u…€éœLN>î‡Ý¿!Ó'éšo˺ÂÀtÎ&'w?Ãîßé“…d;Ÿ.bêàq§^߆ÿ IÕ×®™x~7øWÔk¦i¿.ë Ó8˜œ}Üÿ»~C¦NÓ4ß—u…€éœLN>î‡Ý¿!Ó' •™Ÿ1%†±Êi÷Øé†·cý*ÔQk‘ð,/€ö…ÿ¾“]3MùwXX™ÄÄãîçø}Ûò2p.™¦ü»¬,Lâbq÷sü>íù™8—J/r•Y-Ÿ-¯üEscz{`ÀØþU«m®ëã~—y‘Ô¬.3úW·.™¦ü»¬,Lâbq÷sü>íù™8LÓ~]Ö¦q18û¹þvü‡Lœdð´Ù¢ÄÍWiâmPFCÚÝf…ÿ¶àñ,ιšÖQŸúds]Êéšo˺ÂÀtÎ&'w?Ãîßé“tÍ7åÝa`:g»Ÿá÷oÈtÉÁõkm!¼C{£ˆšãNÔ3ÙûªTÕ)¼7¢]tœÅž»×uz"éšo˺ÂÀtÎ&'w?Ãîßé“tÍ7åÝa`:g»Ÿá÷oÈtÉÃXxõ!Ö}&»ð=¦ßô{¸yÂøÇàx¬;¿^ÄsÃ(ì7€0M{ªéšo˺ÂÀtÎ&'w?Ãîßé“tÍ7åÝa`:g»Ÿá÷oÈtÉÁõuÑW’>v›CÔ"8k)º®ï嚀è×ýìn›ü+éÓ4ß—u…€éœLN>î‡Ý¿!Ó'éšo˺ÂÀtÎ&'w?Ãîß铆¨.ãúÃì|Ûý‘¨»csÿ~[ü*)4}MŽÑ§\’xÏ”ØþUôºéšo˺ÂÀtÎ&'w?Ãîßé“tÍ7åÝa`:g»Ÿá÷oÈtÉÅ*Iu%Öo¡âÚvžÖv©n-¥ ¸ÉÙÉ9ëÿÖþ•hy»– ãŸ-€üÿ:õõÓ4ß—u…€éœLN>î‡Ý¿!Ó'éšo˺ÂÀtÎ&'w?Ãîß铃Ù"9Ù䆆Qû‚¸‡"œ#›w1Iϱ¯Y]3MùwXX™ÄÄãîçø}Ûò2p.™¦ü»¬,Lâbq÷sü>íù™8^Åw´g–¼LQWcO#ÎxšÎêt…-í's²2qù ÷UÓ4ß—u…€éœLN>î‡Ý¿!Ó'éšo˺ÂÀtÎ&'w?Ãîßé“„°ëJûÚ¾Wæ#¤j‡?ñ.¼ÿ¿ þã£ê{0tëÃßýK…}6ºf›òî°°3‰‰ÇÝÏðû·ä:dà]3MùwXX™ÄÄãîçø}Ûò2qÑsS3ÂK»L¹w¤Äq·={åøŽ ùgúŠÙ‚ x"òá‚ÒgGp“nåJž…?Þô<„år‚oñ î9Ò(ì,¿Õ¥¶cŠ)ˆ°ã+X:­—œ„bºÍC$!Ç"€<·QÑn‹.i“ý×"±ŸCÔ³Ååßýþoñ¯_“OG<¨¨Ž•þ@Gý‡©ÿÏíßýþoñ£ûSÿŸÛ¿ûüßã^·ý“÷EÙ1ÿtP’aêóûwÿ›ühþÃÔÿçöïþÿ7ø×­ÿdÇýÑGöLÝäŸØzŸüþÝÿßæÿ?°õ?ùý»ÿ¿Íþ5ëÙ1ÿtQý“÷Ey'ö§ÿ?·÷ù¿Æì=OþnÿïózßöLÝdÇýÑ@Iý‡©ÿÏíßýþoñ£ûSÿŸÛ¿ûüßã^·ý“÷EÙ1ÿtP’aêóûwÿ›ühþÃÔÿçöïþÿ7ø×­ÿdÇýÑGöLÝäŸØzŸüþÝÿßæÿ?°õ?ùý»ÿ¿Íþ5ëÙ1ÿtQý“÷Ey'ö§ÿ?·÷ù¿Æì=OþnÿïózßöLÝdÇýÑ@Iý‡©ÿÏíßýþoñ£ûSÿŸÛ¿ûüßã^·ý“÷EÙ1ÿtP’aêóûwÿ›ühþÃÔÿçöïþÿ7ø×­ÿdÇýÑGöLÝäŸØzŸüþÝÿßæÿ?°õ?ùý»ÿ¿Íþ5ëÙ1ÿtQý“÷Ey'ö§ÿ?·÷ù¿Æì=OþnÿïózßöLÝdÇýÑ@Iý‡©ÿÏíßýþoñ£ûSÿŸÛ¿ûüßã^·ý“÷EÙ1ÿtP’aêóûwÿ›ühþÃÔÿçöïþÿ7ø×­ÿdÇýÑGöLÝäŸØzŸüþÝÿßæÿ?°õ?ùý»ÿ¿Íþ5ëÙ1ÿtQý“÷Ey'ö§ÿ?·÷ù¿Æì=OþnÿïózßöLÝdÇýÑ@Iý‡©ÿÏíßýþoñ£ûSÿŸÛ¿ûüßã^·ý“÷EÙ1ÿtP’aêóûwÿ›ühþÃÔÿçöïþÿ7ø×­ÿdÇýÑGöLÝäŸØzŸüþÝÿßæÿ?°õ?ùý»ÿ¿Íþ5ëÙ1ÿtQý“÷Ey'ö§ÿ?·÷ù¿Æì=OþnÿïózßöLÝdÇýÑ@Iý‡©ÿÏíßýþoñ£ûSÿŸÛ¿ûüßã^·ý“÷EÙ1ÿtP’aêóûwÿ›ühþÃÔÿçöïþÿ7ø×­ÿdÇýÑGöLÝäŸØzŸüþÝÿßæÿ?°õ?ùý»ÿ¿Íþ5ëÙ1ÿtQý“÷Ey'ö§ÿ?·÷ù¿Æì=OþnÿïózßöLÝdÇýÑ@Iý‡©ÿÏíßýþoñ£ûSÿŸÛ¿ûüßã^·ý“÷EÙ1ÿtP’aêóûwÿ›ühþÃÔÿçöïþÿ7ø×­ÿdÇýÑGöLÝäŸØzŸüþÝÿßæÿ?°õ?ùý»ÿ¿Íþ5ëÙ1ÿtQý“÷Ey'ö§ÿ?·÷ù¿Æì=OþnÿïózßöLÝdÇýÑ@Iý‡©ÿÏíßýþoñ£ûSÿŸÛ¿ûüßã^·ý“÷EÙ1ÿtP’aêóûwÿ›ühþÃÔÿçöïþÿ7ø×­ÿdÇýÑGöLÝäŸØzŸüþÝÿßæÿ?°õ?ùý»ÿ¿Íþ5ëÙ1ÿtQý“÷Ey'ö§ÿ?·÷ù¿Æì=OþnÿïózßöLÝdÇýÑ@Iý‡©ÿÏíßýþoñ£ûSÿŸÛ¿ûüßã^·ý“÷EÙ1ÿtP’aêóûwÿ›ühþÃÔÿçöïþÿ7ø×­ÿdÇýÑGöLÝäŸØzŸüþÝÿßæÿQ¡êyÿÛ¿ûüßã^µý“÷EÙ1ÿtPšÙh—¡Æû‹†íHÇú×g¤i¦}Mm¦›Ÿº*ÜVê>Ú¢Š” Q@ EPŠ1EbŒQE£Q@(ÅPŠ1EbŒQE£Q@(ÅPŠ1EbŒQE£Q@(ÅPŠ1EbŒQE£Q@(ÅPŠ1EbŒQE£Q@(ÅPŠ1EbŒQE£Q@(ÅPŠ1EbŒQE£Q@(ÅPŠ1EbŒQE£Q@(ÅPŠ1EbŒQE£Q@(ÅPŠ(¢€ (¢€?ÿÙnip2-8.7.0/doc/html/figs/snap14.jpg0000644000175000017500000015071713341773367013621 00000000000000ÿØÿàJFIFÿá°ExifII*JR(i‡Züÿÿ)( üÿÿ)( 0210‘ 0100 ÿÿ È -ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀ-È"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?÷úBÀPdzo¯RÞ6v`ª£$“ÐPÖW½DowãZ·Å;É.tËxE¸8Y&‹ûàÖ²ÏÄq»Yÿß—ÿâé\xûjxQöÔþð¯ÿ…®zYÿߦÿâèÿ…®zYÿß–ÿâè¸õöÔþð£í©ýá^ ÿ \ÿ§?ûòßü]ð±µÏútÿ¿-ÿÅÑp=ëí©ýáGÛSû¼þ6·ÿNŸ÷å¿øº?ábëôéÿ~[ÿ‹¢à{×ÛSû¶§÷…x7ü,]oþ?ïËñtÂÅÖÿéÓþü·ÿEÀ÷Ÿ¶§÷…mOï ðoøXºßý:ß–ÿâèÿ…‹­ÿÓ§ýùoþ.‹ï?mOï >ÚŸÞàßð±u¿útÿ¿-ÿÅÑÿ [ÿ§Oûòßü]Þ~ÚŸÞ}µ?¼+Á¿ábëôéÿ~[ÿ‹£þ.·ÿNŸ÷å¿øº.¼ýµ?¼(ûjxWƒÂÅÖ¿éÓþü·ÿGü,]kþ?ïËñt\yûjxQöÔþð¯ÿ…‹­Ó§ýùoþ.øXº×ý:ß–ÿâè¸óöÔþð£í©ýá^ ÿ Zÿ§Oûòßü]ð±u¯[Oûòßü]Þ~ÚŸÞ}µ?¼+Á¿ábë^¶¿÷å¿øº?ábë^¶¿÷á¿øº.¼ýµ?¼(ûjxWƒÿÂÅÖ½mïÃñtÂÅÖ½mïÃñt\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿâèÿ…‹¬úÚÿ߆ÿâè¸ñöÔþð£í©ýá^ÿ Yõµÿ¿ ÿÅÑÿ Yõµÿ¿ ÿÅÑp=ãí©ýáGÛSû¼þ.³ëkÿ~ÿŽQÿ Yõµÿ¿ ÿÇ(¸ñöÔþð£í©ýá^ÿ Yõµÿ¿ ÿÇ(ÿ…‹¬úÚÿ߆ÿã”\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿã”ÂÅÖ}mïÃñÊ.¼}µ?¼(ûjxWƒÿÂÅÖ}mïÃñÊ?ábë¶¿÷á¿øåÞ>ÚŸÞ}µ?¼+ÁÿábëÞµÿ¿ ÿÇ)ábëÞµÿ¿ ÿÇ(¸ïöÔþð£í©ýá^ÿ Xþõ·ýøoþ9Gü,]cûÖß÷á¿øåÝþÚŸÞ}µ?¼+Â?ábëÞ¶ÿ¿ ÿÇ(ÿ…‹¬zÛþü7ÿ¢à{¿ÛSû¶§÷…xGü,]cûÖß÷á¿øåð±uï[߆ÿã”\wûjxQöÔþð¯ÿ…‹¬z×þü7ÿ£þ.±ëkÿ~ÿŽQp=ãí©ýáGÛSû¼þ.³ëkÿ~ÿŽQÿ Yõµÿ¿ ÿÇ(¸ñöÔþð£í©ýá^ÿ Yõµÿ¿ ÿÇ(ÿ…‹¬úÚÿ߆ÿã”\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿã”ÂÅÖ}mïÃñÊ.¼}µ?¼(ûjxWƒÿÂÅÖ}mïÃñÊ?ábë>¶¿÷á¿øº.¼}µ?¼(ûjxWƒÿÂÅÖ}mïÃñtÂÅÖ}mïÃñt\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿâèÿ…‹­zÚÿ߆ÿâè¸ñöÔþð£í©ýá^ÿ Zõµÿ¿ ÿÅÒÂÅÖ½mïÃñt\yûjxQöÔþð¯ÿ…‹­zÚÿß–ÿâèÿ…‹­zÚß–ÿâè¸óöÔþð£í©ýá^ ÿ Zÿ§Oûòßü]ð±u¯útÿ¿-ÿÅÑp=çí©ýáGÛSû¼þ.µÿNŸ÷å¿øº?ábë_ôéÿ~[ÿ‹¢à{ÏÛSû¶§÷…x7ü,]kþ?ïËñtÂÅÖÿéÓþü·ÿEÀ÷Ÿ¶§÷…mOï ðoøXºßý:ß–ÿâèÿ…‹­ÿÓ§ýùoþ.‹ï?mOï >ÚŸÞàßð±u¿útÿ¿-ÿÅÑÿ [ÿ§Oûòßü]Þ~ÚŸÞ}µ?¼+Á¿ábëôéÿ~[ÿ‹£þ.·ÿNŸ÷å¿øº.¼ýµ?¼(ûjxWƒÂÅÖÿéÓþü·ÿIÿ [ÿ§Oûòßü]Þ¾ÚŸÞ}µ?¼+Áábëôéÿ~[ÿ‹£þ6¹ÿNŸ÷å¿øº.½}µ?¼(ûjxW‚ÿÂÆ×?éÓþü·ÿGü,msÒÏþü·ÿEÀ÷¯¶§÷…(¼CÜW‚ÂÆ×=,ÿïËñtáñ#]^Ö÷åÿøº.¿,êÝêPÀ׌xâ|ò_GoªCÇ! &ˆ }Á'|ñ^±it%PA¦…€äQ@Ìp¦¸/^еÛÈ?ñÓ]ÝÉÄf¼ËÇŽ²¯Gý1ähÇ7Qº¡ÝFê‘—¬-$Ôoc´…âY$$)•Â/Lã'¿aïZÚ§„õ ?RžÎÙ†&Š:+,kŒ³)n:ð2I¬ {©­.c¸·‘£š6ÜŽ½T×Cáÿ*j³¾µw3Cqbö^qÌJqƒÉ:/3:=S•ìR;Ff¿Rö :þ𧯎)ú†«ésÁ 턱IpvÄWÞ}RFyé],:þ‡c­ø`E¨´öšd2Ç5ÇÙÝ9e |¸Ï_­f.µf|?¦Ú-ûAuª×Ä,ÞTg8p1ƒÉÎÜÑ×úïoËPþ¿…φõ«;»[K‹Iî‰XSÍC¼Ž£†ÀëßùCï>€©<ûu®ši6~+ÒŸOW}ÅdƃºLî`‘ªú§ˆì­î4Óc}myioz.šÞ 8Ûm#ÜðÄ‚i­lÊòøJïN𾣩j–²ÛÏEöu2)3a²>½ñX1X]Ïa5ôP¶…Ö90ùYº g<ý+§Õõm û]Z¤·7:­Äsˆ^ÙÐņÉÿ­Yþ Öì4»»¨uR~ÃpŠÇ [÷ˆÁ“€½%»¿õ¢þ½Aí¡B] U¯K'V²(.õ% ýÑÁù³ŸáÍ;Qðö³¤Ú%ÕþŸ,99*@>ø'Ž+£¾ñŤÖzeÌqî¾{¨çÔ)ð£$`çƒÇLT¶·¢Ç¦k‹a=ìúÄÉ!ŠH¸ »’~ñíÇ £úü¿àB-#ÁºÖtøµ›`²¹v]ÂTÜHF`8$»éX“éðÇÆÕÄW2˜í¾aºR8\î?\bº'ñ”ß`ÖEÏú 7”ü~è¯ÝÆî¾Õ_Y×4ýfóKÕ£¿{+ødXæAºÆªr² Æ1þÎúïªFfÏárÚòÚÒm=–âëp†?5 | žÆ®*-GAÕô™aŽþÆHZfÛYX1ôÈ$gñ®ÏO¿Ñoüi¢Kc$W‰yMÕÌÍIû¶Á*ßÅïY7:¦a§Úéê]R©ýªäù DèP×ðëÍ upïýw0õ/ë:D÷öB²¶Ä!•ÁoO”ž}©×^Öì¾Íö6T7M²Ü¥ºãh$Ä éõh–ÖVÉc<-Q.Ö {n1Øä[Þ©¦¯ é¾0ÄVúœ·¾tîÒÛ›VW…]HÎãÃc `v¡9ýSEÕ4SÔlÞßÌÎÂYX{©#>ÕŸººOjöw6ÙéúµÍ¿žf1A§o,ã'ø‰ÉÎcìù:L–Ùšd›Ã´ÉmºuÏ£çŒvâ’/h~¹×ìõm3Ú)óKüD€0¨¬|9¬êMp¶v-1¶Ç( Úèå† ÔþÔ4ÔÓ5/RºkHïãŒ$â#(RŒN ŽyÍiøkRðæ™Ùn ŽêÝâêk”Ëè‚c=ý©ÛRz´ß Üê¾¹¸´¶šMNß Â]P*…²äúÕ-'×zž°úl²Ee$LSpÀ$à¹Ë@?>kmõT²Õm.µY,–mXÞÄâÙܲ`c¯JÌ»ñ÷Ä(u“º+5¹‰·2’Ûq'·J#«Wþ´C{;Z³þÜØê7Ve÷˜&x·ã¶’3ŽÝ*¾ê³ª^E?ˆ// Û,/tò¦õ;]K’28>”jš·ö£ÄßÙÚu—–Å¿”?Þ俥^Êã{²ðð¾ºÚ`Ô—MÙ˜üÑ t9Lg;s»ö§K'HšÆ+™®ïÞTJ;ðó‘Àç5¹eâm&WE™îÈŠÛHû,çÊs‰1÷qŽyî8©<#©ZO7„´øåÝuk-Ñ™6‘´2±ãð5VÕÿ]Ééëc™½Ð5=*æÞ-RÜÙ,ìM#AêIRzuÇZ³©höš2ê¶´z…·Ÿöy¢*øÏÌ=êö£{¡Ã¤[è1j’ÝDú—Ú..>ÎÈ N„rIêxÏzgН4k«(¢Òu”kKl }=,äN¿yË·ºòi_B­gc—ÝFê‡u©ˆ›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Uí/O„®Ò»$ðvõcè+/ujiWkr[±ÆöÜ9ÆxóøP¼º™$ebBøáÖçÜþµsðØË.¡ö"B¸bº€óë[>d|á¤wi˜ÈœVd7Àj¯txI̞ÌÒaÑ#‰•ãº}™ 6Ù8Ç^ƒmdjsYÞ,L«'1çœ`ûÖ‰’Sk4 BD›ðÆCŸ˜“Óo¿­V¼½ß}nè7}·ýNAÇéC½´muszËÃú5²$WÌgºe,G˜T uÀàzšËÖt«kh÷N•žÕÈXçnz{Š¿?“ªB›¦Í¿ÞÉlc©éŒœŒsÐñjëWØÓͫȯ3íÜTc€AÎ;tåQÄT•D¯«ÝGŠÁÐ >T’Z>æêúÃwfkX‰9%E|纽ïÂ,M¤?îŠõÑóGÊŠ)°ýÁE0uþ¬×˜xóþAwŸõÉÿ‘¯OºÿVkÌxD_ïà”êÖ{DWQùNQ\Àü¬)à÷Töú{\i——Ë*„µ1‚¸ÉmäŽá@wT]Ok2Ím4Ê¿vHœ«ÜȨ)8 úÒÐË’I$’y$÷¤ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(C+–„“KçAQQ@ ˜  zqJ³”èò¨¨  w"P”'®Ö#?‘¨ÚRÄ’zÔtR²½ÇÌÚµôº½ûÂñéû¢¾¯ 0ÿ GþLÃÿÅÒŠ·áø[ü†õüÿŸõr꿈`ñ=ßÛ-5;™9 "lË{ÇÏ9ã·ÐõËø‚ÞK]vînÍÜi›ï1 ›“ÈÎ=Emÿ±ñ‡ý?òfþ.øV>0ÿ GþLÃÿÅЕ­ä6ïs’®¢k»Ko hbçL‚ð³\m2K"mùÇMŒ?Z—þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.˜°Ñ¶¥©IiÿÚÒÈÁœÊ“,~PÜ#.¬»žøïÖ²¯ä{Û?°Ékp«lòÁ#!ÛÎpÉÈ'½Cÿ ÇÆôÿɘøº_øV>0ÿ GþLÃÿÅÐÕÝÁhqu>²ºš·ö"ÚŸ³y¸Ø%Ú»<¿Cž¸íœ×œWq¨øƺ¦¡-äú2,’X%Ä@tÇj©ÿ ÇÆôÿɘøºIK•Öÿ±ñ‡ý?òfþ.øV>0ÿ GþLÃÿÅÓ’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*÷ÿǤ?îŠòßøV>0ÿ GþLÃÿÅשxCþ=!ÿtSB=¸(¢¸(¦.¿ÕšóÈ.óþ¹?ò5é÷_êÍy‡ŽÆtÛ±ë#@•bØÓ-qÿ<“ù ŸÌ>Õ‡©Hñø.åãfG]=вœ|¾ Õ$Ô/ôß [My¨X¬òˆÖû,œ®q°9go¦>”€éžácÛ½•w£'>”ÿ0ûWu«ÞkZF—2, y²°hÝc,¡°ÛN ‡šßÓïõ+¹u-.åí¡Ô-B¸†2c*à•m„ç#ŒÓ¶Ÿ×—ù‡_ë»G@“Ú©GÿWc·š?ô¬¿ IrÚ}â]]Ku$WÓÇæÊrHVÀöAÅjEÿ7õÔè CKERQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEɦŽÞ '•¶Ç—vÆpÉ5ZÛSµºŸÈŒÌ$Ú\,nÿë ÿЭUSÊO3ư²ÈÁ†é#åû§Ò€%¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ¤2J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠÏÕô‹[Û+Æ[y/$…‚HÑ®íÛp¿1ü+FÑ.ŸS/ªéÈmÄNM²A¸•ÇžÀó]V.ÿç•¿ýþoþ"Œ]ÿÏ+ûüßüEa<<'57º%Å0EoÅIkÑBø ã|#Ŭ_îŠëä–x|ÑGå¼É!%G® Šä|'Äýn†wÐ}ÁE}ÁE0uþ¬×x¤n8õ8¯EºÿVkÏ|H3qõqü躲ÿ}¯ýqOýTõ—üƒíëŠè"§ ¯ü~Çÿ\ßù­X5]ãö?úæÿÍjÁ Ÿ¥UnµiúUVëH;Ç—[YšY#VxRN}é^c6³c<†4¹¸” œ|ýçø€¯Dø•l.´èïÈž öâqŸÖ¼eôˆb¼’Þ‡œ>Ó×?ðä)®ºÝŠÍÁ²Kü í\þy¥µ×nu5û5¡ŠÎ¥·¡ÞÇž{Â°Ž–¶–ò;`Q@gð:ŸéZ:-½¶ž‚Sù³µ|Ôd^œu  d¶TCšÑ—És(ì}O©úŠ¡*K·÷(oõhó<ð+Fá•c10„bI˜™ì>œVDÁ\³p§%Ò0Â4÷\p~”YndbÛáÉ\ˆ¤PQ²z–ÇÞtš^–Ö–&3ò™ ¼ø<·¢çYÚT÷w^yDãw Óù=½«¦L”Ræ-‘ÇW=8 v¤¬€v`wcÎ? S·Àä¹ä“ÜãùSçÙ£ ˧¾ÞíøÓ, û\ŒÑ/îþîïAКնWDbU–¹¾µ ÷!–Ü´eRNÞ åƵu»ôÓô×*²¯bqØŒt®ÂÉs­Ý\8tDà{° ÚŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š(  þB‹ÿ\¥ÿÑm[¾â$…¢ÈQ딿ú-«{Âü  ò¸(¢¸( ]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@Õ—üƒíëŠè"§¨,¿äkÿ\SÿA=5ãö?úæÿÍjÁªëÿ±ÿ×6ªÕ‚('éU_­[pqÒ«ºœô¤;â-5uU’ÝÜ"……²W=åÖ¹u𒻸”o|‚Ûy÷Ý]­ù>uÁLXâï?Qù×à:K¡p÷ÇËûpóX¼°ß„þ ôyØŠÕcQÆËNΈF.7h©sá=¡ž «øãŠA'™”PØ ¼–ö5rßÁÖpijA}ˆ¶ä0É]½s÷±ŠŽ CO°]Fx§Šæ7º-帟zï1ŽK±<sϵkY\iz~‹¹»†â ’L2º©Ëãc'¥aä/þ½ð‹ÿÓçþBÿëÖ`Õ¤“OŠ8ïd70is›…óô•Bà°ëœçûÕ‹2×ív«©É F&ßsrÜÌ|Âw(` qÓµ7[·—à»Ø9aØœxv3pÐ Óæ*‡#È8ÁÈçIÿ¿ý>ä/þ½fÿiÏ%¼¯—0À-áÜL­!Eó]ÕŽsò½éƒO†d¹›ìÖڅ̶m¨¬k"]9%|ÄÎq»ÞŸ¶Äkïmä…ËÅÿøEÿéóÿ!õê9ü;µ¼“Ë}¶8Ô»+8d÷¬û‹Ë´†ÚnÙmR[˜ŒÒÝ´*ø@Ò'8Ï®9¥Õ&±I«¨2ìà`h¦)òÛ¹Ü~ï×¥ ¶#O{ðCä…íbëh(„›ã‰ˆ ˆ ÉÆ}xàw§Éᤊ6’KõDQ–fRsW.¤’(ôeGd2«€q¸yNp?*ÁÿH:<`\\Î×Ú\ï"I+I—pTq÷¦8Šïí~ ÏËÈ!¦† ð¸#"÷ ÿÓ/þ½/ü"ÿôùÿ¿úõŸ{yÁ`¶Wßñ/u}ó>¡"'Ë€dÃÔü¼åMÔ¯&†ÕÆ¡©ôEw)Ô£îs¨›ÇImK«[g@6í!»žô{zû©þ9 ºZÿ‘kþú|ÿÈ_ýz?áÿ§Ïü…ÿ׬ëy¯­ì-f¶¸¹šâëN–R²HÒfEÚAPIÁùŠÓÑ'I5Îòk»?!YÞY ›eÏ@OCŽ«ÛŽ¯ˆI¾oÁ$; ÿ„_þŸ?òÿ^øEÿéóÿ!õë¡¢±úíæü~ÊŽ{þú|ÿÈ_ýz?áÿ§Ïü…ÿ×®†Š>»_ù¿ÊŽ{þú|ÿÈ_ýz?áÿ§Ïü…ÿ×®†Š>»_ù¿ÊŽ{þú|ÿÈ_ýz?áÿ§Ïü…ÿ×®†Š>»_ù¿ÊŽ{þú|ÿÈ_ýz?áÿ§Ïü…ÿ×®†Š>»_ù¿ÊŽ{þú|ÿÈ_ýz?áÿ§Ïü…ÿ×®†Š>»_ù¿ÊŽ{þú|ÿÈ_ýz?áÿ§Ïü…ÿ×®†Š>»_ù¿ÊŽ{þú|ÿÈ_ýz?áÿ§Ïü…ÿ×®†Š>»_ù¿ÊŽ{þú|ÿÈ_ýz?áÿ§Ïü…ÿ×®†Š>»_ù¿ÊŽ{þú|ÿÈ_ýz?áÿ§Ïü…ÿ×®†Š>»_ù¿ÊŽ{þú|ÿÈ_ýz?áÿ§Ïü…ÿ×®†Š>»_ù¿ÊŽ{þú|ÿÈ_ýz?áÿ§Ïü…ÿ×®†Š>»_ù¿ÊŽ{þú|ÿÈ_ýz?áÿ§Ïü…ÿ×®†Š>»_ù¿ÊŽ{þú|ÿÈ_ýz?áÿ§Ïü…ÿ×®†Š>»_ù¿ÊŽ{þú|ÿÈ_ýz?áÿ§Ïü…ÿ×®†Š>»_ù¿ÊŽ{þú|ÿÈ_ýz?áÿ§Ïü…ÿ×®†Š>»_ù¿ÊŽ{þú|ÿÈ_ýz?áÿ§Ïü…ÿ×®†Š>»_ù¿ÊŽ{þú|ÿÈ_ýz?áÿ§Ïü…ÿ×®†Š>»_ù¿ÊŽ{þú|ÿÈ_ýz?áÿ§Ïü…ÿ×®†Š>»_ù¿ÊŒ[=ìSµÇÚwìŠO—ËÆr„zûÔÞû£ëZmþª_úäÿú ¬Ï }Ñõ¯OVui¹MÝÜç«dwp}ÁE}ÁEv ºÿVkÏ|Eÿ1×EþuèW_êÍyãæ/úè¿Î€;«/ùÚÿ×ÿÐEOPYgû:Û|”ÿÐEs¶:_ˆàñj3ÏfÑÌvÍÎäy}‚Go^}h¤› µrr cóÚ£6·ÝÿÉÉ?§_øýOúæÿÍišž£•§M{q¸Çäª ³€Ü“€>´€®Ö—?ÜÿÉé¢kkîåBoð© Õìî´dÕVO.Õ£ó IÁAÜ7¡ƒôªöZ—ö€w[K¨#Øó O0àg#ñ€Åñ>°Ú6вAh¢ä,±“¸œ£Àäû¿^¾•ÉEã=BDýžÜFßtìcÇ¿Í[gŠÚÎÚy£g.m‹`ãoó\"ÚË$’ÿg•Äçt¹Ûžàb± sw’»)NKDΑüg|¸ÄV¤gÃcÿB¨“Æš¤Œa´úÄç“V麅º’Vp²ž}zÓìÄísµ‘@üoÆ~€ÔýVòÚO¹ÚræHÂãÄ·úœ‰æ[Z;l»ó%T`yåCí?CZ0ø²ú î–¶©æœ¬M̘ÆOÍÓ€+Œµ¸’ÝÒ9B,©û¶ÁãÐçמ•ÑYQPÜ[8\ãòíGÕ©ZÜ¡í%ÜЗƚ´GkCjNã’ rzðÜÖeçÄM~ÖäÂ,ìç?êÜ|½Ïßý* â”]«"2BøIãè*…íªÍqïˆÙ PªìÇsÖ—Õhÿ({I÷'Š~%†é–m.ÌC¸íÄ2n#é¿úV‡¾"ëz®¡$VVpªÆ\mF œ€3—=r³ZËsª€#@Ã(ϯçÒµô;y#»if6#Ä8ãŽÞ”}Vò‡´Ÿs¸ÿ„–÷þyAÿ|Ÿñ£þ[ßùåýòƱ¨£ê´”=¤û›?ð’ÞÿÏ(?ï“þ4ÂK{ÿ< ÿ¾OøÖ5}Vò‡´Ÿsgþ[ßùåýòÆøIoç”÷ÉÿÆ¢ªÑþPö“îlÿÂK{ÿ< ÿ¾OøÑÿ -ïüòƒþù?ãXÔQõZ?ÊÒ}ÍYõû«ˆZ)#ˆ+uØ]àC)–šÌ¶Q´pA Û˜±vf>¤–$þ5›E?«Rµ¹CÚK¹³ÿ -ïüòƒþù?ãGü$·¿óÊûäÿcQKê´”=¤û›?ð’ÞÿÏ(?ï“þ4ÂK{ÿ< ÿ¾OøÖ5}Vò‡´Ÿsgþ[ßùåýòƪ]êo|á®!Gc`’EFêñFŠk I;¨‡´—sgþ[Ïùåoÿ|Ÿñ¦>¿q$‘»ÛÛ3FK!*~SŒg¯¡5“E/ªÑþPö’îlÿÂK{ÿ< ÿ¾OøÑÿ -ïüòƒþù?ãXÔQõZ?ÊÒ}ÍŸøIoç”÷Éÿ?á%½ÿžPß'ükŠ>«GùCÚO¹°|IxÊAŠÜ‚0~VÿH¼Cs IP[$h¡UBœ:µ‘EU£ü¡í%ÜÙÿ„–÷þyAÿ|Ÿñ£þ[ßùåýòƱ¨£ê´”=¤û›?ð’ÞÿÏ(?ï“þ4ÂK{ÿ< ÿ¾OøÖ5}Vò‡´Ÿsgþ[ßùåýòÆøIoç”÷ÉÿÆ¢ªÑþPö“îlÿÂK{ÿ< ÿ¾OøÑÿ -ïüòƒþù?ãXÔQõZ?ÊÒ}ÍŸøIoç”÷Éÿ?á%½ÿžPß'ükŠ>«GùCÚO¹³ÿ -ïüòƒþù?ãGü$·¿óÊûäÿcQGÕhÿ({I÷6á%½ÿžPß'ühÿ„–÷þyAÿ|Ÿñ¬j(ú­åi>æÏü$·¿óÊûäÿð’ÞÿÏ(?ï“þ5EU£ü¡í'ÜÙÿ„–÷þyAÿ|Ÿñ£þ[ßùåýòƱ¨£ê´”=¤û›?ð’ÞÿÏ(?ï“þ4ÂK{ÿ< ÿ¾OøÖ5}Vò‡´Ÿsgþ[ßùåýòÆøIoç”÷ÉÿÆ¢ªÑþPö“îlÿÂK{ÿ< ÿ¾OøÑÿ -ïüòƒþù?ãXÔQõZ?ÊÒ}ÍŸøIoç”÷Éÿ?á%½ÿžPß'ükŠ>«GùCÚO¹³ÿ -ïüòƒþù?ãGü$·¿óÊûäÿcQGÕhÿ({I÷6á%½ÿžPß'ühÿ„–÷þyAÿ|Ÿñ¬j(ú­åi>æÏü$·¿óÊûäÿð’ÞÿÏ(?ï“þ5EU£ü¡í'ÜÙÿ„–÷þyAÿ|Ÿñ£þ[ßùåýòƱ¨£ê´”=¤û›?ð’ÞÿÏ(?ï“þ4ÂK{ÿ< ÿ¾OøÖ5}Vò‡´Ÿsgþ[ßùåýòÆøIoç”÷ÉÿÆ¢ªÑþPö“îlÿÂK{ÿ< ÿ¾OøÑÿ -ïüòƒþù?ãXÔQõZ?ÊÒ}ÍŸøIoç”÷Éÿ?á%½ÿžPß'ükŠ>«GùCÚO¹ÑéúåÍåÑ‚HáñI’ ç„cëíW<1÷GÖ°4Où /ýr—ÿEµoøcî­k q¦­b\›Üîàû‚Š û‚б ºÿVkÏ|Eÿ1×EþuèW_êÍyãæ/úè¿Î€;«/ùÚÿ×ÿÐEOUìÀm:Ø0 ÷ùEsV>¶´×Ú숚Î3æAߘ?¹ô¿N@:øÔCcæ @>ÇáX"ƒQÔuM6ÊÉU#‰Ü³O •º—b,¢íQŒc¦À  ÂÑ+2öOþ½=ÉBâ¡o~•½’ë ç!:ç?ãQM0dÎxëùÐ.ö2^j³5Ê&æ$Þ…{óÇò5,š-Ê([yFGÜ#¡üMk^: Už1Ò˜ŸC’?‘©æˆË‰!pŒž=ýs@"ßUŠ'D–Y°(ƒëx¬ùÍô+¶K¶@Ý‘Æ@ÿ¾xÕHê-©1Œ¤m#†Çø:Ï»/qn[¥¸vP8õË5Ýã’¦ë>èTSÜð¢´<',ÓêÒÉ$’²O3Œò¹ zvªwqȯ,eä'Ýc’}0y?ãZ~E}jîT9Hâ '•c𠮊( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š(  þB‹ÿ\¥ÿÑm[þû£ëX'ü…þ¹Kÿ¢Ú·ü1÷GÖ€;¸>࢈>ࢀuþ¬×žø‹þ>bÿ®‹üëЮ¿ÕšóßÇÌ_õÑwV_òµÿ®)ÿ Šž ²ÿ}¯ýqOýTôÕÿØÿë›ÿ5««¯ü~Çÿ\ßù­X4ôª­Ö­?JªÝiÀüQŽI47XÝ—æ„§¨Û?ʼïFÒÒÒ5ór€ç“ÜפüKÜ4Êãƒs陫‰SŃasŒçÿ­L ¼ß !FpG¯?áWÚÜi–ÏÍÏVl70™FWp$ŽÀÖê b2 »”Œ{Š«¬náq„ 3šŠ8Ìs˜J…¹ý¿Z|‘l™rØ^ƒ#Û¡«7¿cÆê&¸r~ö{P6ž­ç_>2êË˲çWa)¤Â<‡U+–~ws“ø~U¬ñ¶£~§Ï+(¹P§õŒ›ÙíÁe*Á[œãGùï@[Æai³°ÇÏî}…RŽØXI/šâFHò¬26Œž:úŠÖ½–8™æe1Îk3XhÒÎYŠ£H±°V8ÈÏÿ®€9IZKJÌ“ó|Àc¶G§~3ZžM—WyR ;öÀàŽÝkNv¸¹i›8@2I=N>™­? ³I©Îä¥dÇâãüþÖÑEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE¡¢ÈQ딿ú-«Ãt}kDÿ¢ÿ×)ô[Vÿ†>èúÐwÜQÜP.¿ÕšóßÇÌ_õÑz×ú³^{â/øù‹þº/ó êËþAö¿õÅ?ôSÔ_òµÿ®)ÿ Šž€¿ñûýsæµ`ÕuÿØÿë›ÿ5«€"~•UºÕ§éU[­ 8o‰y: ÈD<ÿ뫃ŠXÞÚØ†-•ä〸¯CøŸK–2»òxõâjó-«¤Éª@~-'êOéõü(žÖuÛ‹ï&8cž`“Îg•v–#8zsY×zíæ« VÐÚMåÊv’üßáVî¼7¨eà«}ÏœzzuÇéIþ£á¸`I>Ç!eÂJÀ† Ûžÿ•> Þ5¬hè¶Ù;K> ö®ŸNÓtý>-¶Ä4ã‰<Ÿþµr3êÚµãäÍÆ>P‰¼|ÿž•³áx&+5ÓÈìŒJòÙç®}¨¢¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(KDûDþ\¿ú-«wÃÖ°´Oùúç/þ‹jÝðÇAõ¬(¶ÜïßüެLRTì·êÎî¸(¢¸(­ÎQ—_êÍyãæ/úè¿Î½ ëýY¯=ñü|Åÿ]ùÐueÿ û_úâŸú©ê /ùÚÿ×ÿÐEO@ _øýþ¹¿óZ°j°!o",@A>¹^?CVH Ÿ¥U~µq”‘UÚ6ÏJ@`kvj.ñLX*¬,6ã9Ì£¿Ö°ÓÂzlm¹<Ålç+´úô®’ô™$¹hˆ;V8÷v7’? ¸¨­öBš}Êß,ßœÀ~‘ž‡¡¯3R¢ªÔee§âtSŒynÑ+éº<&ê'7auÂG¿q`€ªIüª{oè÷Éuo#˜›çWG¶~ïµCb––Ñê[,o ²žd¬òÆãä ( Aæ´4_2 6ÖÊâÚQ¹dÛº>|¡ñÀb¤}y¬'ZªZIôü‹QTW±Ò´«Ûw6W“I ¹F(ÃnG^ÜÓáðý¤Ñ~׫ØåyÁê:µ.žZÂ+æ{i¶µëlTŒ’Tíéïè+‹I.í…å«ÝÀf¾!/>hÁÀߟzZ²nÒÒ¸8Åt6O„´ÒA"BG¿áRÂ5g‚<ÛŒœná\åôA¥Èu{i¦a§âز<—Ë}ìgkcgÌ}:×cev—lJ®ܬnHࡸüÅ)Õ­u;‚ŒµŒ(4Íéå’'¼cmÒ ƒ†)ƒÈè éQ®…á½J)d—[õŸiŒ!ŽáÔ1Þ­é®ö×’‹hõ§¤,î“ÂÀ¬›²d9ùºdt©4kuk½A– ±ÊP¯Û·³Œîûÿ6ß»Œû✫ÔI¾f‘ìV±ðƃsiÅ&ÉFDUœ|´—ZN‰§Ü<·¼€ Œ•Æp70\ÄÓZÊíü9coo±_‰˜Å)R<Ÿ™‰fã€W#ò)/&Ðí­ ±Ô#ºD„o°HñŸºFFIn½GZj­NoÚöÿ‚1¶Ã®,´k[‘Ó_«—TÈr…A¸&Þþ´ôÓt‰/˜¸ºó…t*v’¸8ö5¥4R\ë¶ÂHÛȶˆË»)£ŸP7~uQ‡Ú+e³ºY­t¹à|ÂÀ!@ q†Î1š±q¥EÚíã‚[{I ÊÃlÒ!3g(£žÜ=*½¥Uöÿ«‡,{LJ¬ÍÃEþ–PÞa+´ç<:ñúÔŸðYÏYÿï¡þŠ`¼’ÞWþÏ{xþÏ ¼PÆP2 ŸpQÔ¼íëÎ(µ´µ½á·±?`šî… *ªåHànÇQÔÑí*ëïì+G±µÿÕ—üõŸþúáPÝhV–“\¼—%"Fv Ë’ÏVMŅȆÚ) sc·(#{Wœ/Ïû³±H8ÛœqOÔtöÍí½ÍþtõŽÖAnÌVP$¨ÉV9^O§ZJº{ãåö4ÿ°¬Š@ËöÆÊ•ùÉã§oÆq éÖ¶ò\M<ëj]Û àOAS^C+.Œ7&9Ô¾;G”ã'Ó’+ =X´¸RÚÉãšãL™.B»äÂíÝþ×-מ´£Z£ûÖ¿ä 1ÓChxnÉ”0–|‘óð¥ÿ„jËþzÏÿ}ð¬{ëDš³XtõWBús°¸c•>¸n­C«Û­½Œ£QŽ{µM5VÚf…ŽÉl’9Øßw“éÖš©UÛßbQc{þ«/ùë?ýô?ÂøF¬¿ç¬ÿ÷Ðÿ É’Âê]t¼ÅÑŒ±5¼ÂÍä!\¨6¸G~õ£¦$|Í$¶…nï/fŒIå€Ì»™$ó· ÇáS*µRº˜ÔcØŽãIÒ-&‚ï%Igp‘!a–>í-΋§ÛIlŽ÷$ÜKå. ðv–çöM^Ö-Ì­bñÂ]Öî2Ì«’œûT"‚9£°3Û=ź]•#'˱‡*$dŠQÄTv÷˜Ü"¯§Aá²ÿž³ÿßCü(ÿ„jËþzÏÿ}ð¬«kƒ¦}œé§ììÓ½·›hó<##b…S”'’ éÀ«N™„ײZHo’âÔÇ.ÿnØÃàõÇÞÏnµ~Ò¯ó’Ô{®t]>ÕíÕÞä™å. ðpOµ[ù‹öpìcÂ5eÿ=gÿ¾‡øQÿÕ—üõŸþúá[4QõªßÌÎŒoøF¬¿ç¬ÿ÷Ðÿ ?á²ÿž³ÿßCü+fŠ>µ[ùƒÙñÿÕ—üõŸþúáGü#V_óÖûè…lÑGÖ«0{8v1¿á²ÿž³ÿßCü(ÿ„jËþzÏÿ}ð­š(úÕoægÆ7ü#V_óÖûè…ðYÏYÿï¡þ³EZ­üÁìáØÆÿ„jËþzÏÿ}ð£þ«/ùë?ýô?¶h£ëU¿˜=œ;ßðYÏYÿï¡þÂ5eÿ=gÿ¾‡øVÍ}j·ó³‡cþ«/ùë?ýô?ÂøF¬¿ç¬ÿ÷Ðÿ Ù¢­Vþ`öpìcÂ5eÿ=gÿ¾‡øQÿÕ—üõŸþúá[4QõªßÌÎŒoøF¬¿ç¬ÿ÷Ðÿ ?á²ÿž³ÿßCü+fŠ>µ[ùƒÙñÿÕ—üõŸþúáGü#V_óÖûè…lÑGÖ«0{8v1¿á²ÿž³ÿßCü(ÿ„jËþzÏÿ}ð­š(úÕoægÆ7ü#V_óÖûè…ðYÏYÿï¡þ³EZ­üÁìáØÆÿ„jËþzÏÿ}ð£þ«/ùë?ýô?¶h£ëU¿˜=œ;ßðYÏYÿï¡þÂ5eÿ=gÿ¾‡øVÍ}j·ó³‡cþ«/ùë?ýô?ÂøF¬¿ç¬ÿ÷Ðÿ Ù¢­Vþ`öpìcÂ5eÿ=gÿ¾‡øQÿÕ—üõŸþúá[4QõªßÌÎŒoøF¬¿ç¬ÿ÷Ðÿ ?á²ÿž³ÿßCü+fŠ>µ[ùƒÙñÏGcŸ­ÇLì¦ÞFùÈ';J»áŽƒëLºÿ‘†/úõ“ÿAz†z~5ê`$åM·½ÿÈ1ªÜ‰/êÎî¸(¢¸(®ã„e×ú³^{â/øù‹þº/ó¯BºÿVkÏ|Eÿ1×EþtÝYÈ>×þ¸§þ‚*Q,fVˆ:™Ê à‘øÊ¢²Ïöu¶:ù)ÿ Šçì¼1i­ÿj6°’JìLÃìÄyЇïð:cÓ€:)råaTV. ùú;þ¢¢:gµŸãmÿÙU…ÿÔÿ®oüÖ Öu1¤é’ÝùFgX¡Gc…P}É€‰´±ýÛüÿìªÓWûšþöT¶Ú´Ú–ƒý•¢5ÃŒ5¼²ìØàá”¶ÓÈ öíTtbóQ¾½·¸°Šµ`$WUg#%yUä gëO­€ÈñÆ«¨iš +cåÁp—H­±WkFQÈ 7NWô5凯Þ/‚w]ù€çb¬Q=3ÅzwÄV°‚J¼ ¸õÄþâ¼µ­ekée’m§ªsÃ`qƒýk9R§'yE?‘JMlÇAã1ièºF2ê–ñóÿŽÕíž(œy·ºœi'÷ Ç¡kSŠ4°Øá ò”PY=yÏ~™© XmãÙ#:€70YHÉì6ž? ^—ò¯¹<»5ωµ‡·+ö€þw8ÙJ÷$éYcÅ:µ³ñ·Ìq´ˆŸáÀÓÓÚ©ÊÛØ™@Ù‘~½ þµBqÌeCÐ#6ÇûÀô4{_ʾàç—siuÝ_RÔm÷ÜÚÏ2ã÷­kïÁ+‘ð®š-PÚÍöŒÛ²#O»Ó=:“\v™·¶’}ÌZ|…v6Üòß^‚¶•ü¸W#,0Y@êß´{ʾàç—sZOjÑ—?jÎ:/–½OEéøÔ)â=a¤1ý°089'ð¬yžV¹TUftáTŒnsÕ¾‚´ìmÉ3'Ï ù™»ç¾(ö¿•}È9åÜÚ½×nlí7ÉvªprÅWü+’Ð|q­jzÝÌM}¾Ùc,‹ä Ç Þõ•ãMpDz†Ts/-ƒÈWÁ18¸šLa xúœþ½—ò¯¹<»ž‹ý»©ÏÏþ8¿áGöî¥ÿ??øâÿ…gQG°¥ü«îAÏ.æöî¥ÿ??øâÿ…Ûº—üüÿã‹þE—ò¯¹<»š?Ûº—üüÿã‹þnê_óóÿŽ/øVu{ _ʾäòîhÿnê_óóÿŽ/øQý»©ÏÏþ8¿áYÔQì)*ûs˹vmZòæ†yX›ï#ÄŒÔI©wkŠÝã†1Ñ#…À §EÆ•­Ê¾àç—sGûwRÿŸŸüqÂíÝKþ~ñÅÿ ΢aKùW܃ž]ÍíÝKþ~ñÅÿ ?·u/ùùÿÇü+:Š=…/å_ryw4·u/ùùÿÇü*¼×Ó\ΓΰK*}ÉÝ—èHâ«QB£Im÷<»š?Ûº—üüÿã‹þ‡[Ô Î –¼~•ŸE—ò¯¹<»š?Ûº—üüÿã‹þnê_óóÿŽ/øVu{ _ʾäòîhÿnê_óóÿŽ/øQý»©ÏÏþ8¿áYÔQì)*ûs˹ uÍDŒŽ?ëšÿ…[ÔT.€kþŸE—ò¯¹<»š?Ûº—üüÿã‹þnê_óóÿŽ/øVu{ _ʾäòîhÿnê_óóÿŽ/øQý»©ÏÏþ8¿áYÔQì)*ûs˹£ý»©ÏÏþ8¿áGöî¥ÿ??øâÿ…gQG°¥ü«îAÏ.æöî¥ÿ??øâÿ…Ûº—üüÿã‹þE—ò¯¹<»š?Ûº—üüÿã‹þnê_óóÿŽ/øVu{ _ʾäòîhÿnê_óóÿŽ/øQý»©ÏÏþ8¿áYÔQì)*ûs˹£ý»©ÏÏþ8¿áGöî¥ÿ??øâÿ…gQG°¥ü«îAÏ.æöî¥ÿ??øâÿ…Ûº—üüÿã‹þE—ò¯¹<»š?Ûº—üüÿã‹þnê_óóÿŽ/øVu{ _ʾäòîhÿnê_óóÿŽ/øQý»©ÏÏþ8¿áYÔQì)*ûs˹£ý»©ÏÏþ8¿áGöî¥ÿ??øâÿ…gQG°¥ü«îAÏ.æöî¥ÿ??øâÿ…Ûº—üüÿã‹þE—ò¯¹<»š?Ûº—üüÿã‹þnê_óóÿŽ/øVu{ _ʾäòîhÿnê_óóÿŽ/øQý»©ÏÏþ8¿áYÔQì)*ûs˹£ý»©ÏÏþ8¿áGöî¥ÿ??øâÿ…gQG°¥ü«îAÏ.æöî¥ÿ??øâÿ…Ûº—üüÿã‹þE—ò¯¹<»š?Ûº—üüÿã‹þnê_óóÿŽ/øVu{ _ʾäòîhÿnê_óóÿŽ/øQý»©ÏÏþ8¿áYÔQì)*ûs˹£ý»©ÏÏþ8¿áGöî¥ÿ??øâÿ…gQG°¥ü«îAÏ.æöî¥ÿ??øâÿ…Ûº—üüÿã‹þE—ò¯¹<»š?Ûº—üüÿã‹þnê_óóÿŽ/øVu{ _ʾäòîlé·sÞj‹$ï½ÄR¨8éõ­o ôük Dÿ€ÿ®rÿè¶­ß ôük<:IÍ.ÿ¢:qNêŸøVwp}ÁE}ÁEtœƒ.¿ÕšóßÇÌ_õÑz×ú³^{â/øù‹þº/ó æÌ…Ó­‰ Oo”T ®iH±ÇªØ»±Un’O`3V,¿äkÿ\SÿA“iák;MrMEX”ûÑ@GËŸ¼ÃúÙ>ØÛ_øýþ¹¿óZÈ×4Ëý[VÓãŠi-m-·\5Ä{™z"…`{9#Ó½k¯ü~Çÿ\ßù­X4Ìi:n££]ê±3Iwo6.a™ö)iH!Ô…À€s€95&a.¡ÛCp¸º`d¸äÈÇsr:òkyúUVëHâZ»i@!p|È>à$ž'ô5äs)Ýä¹eœo cñ5ì¾>î4æD Г¸gt÷¯ ¸…àÂc A‚™ÉþF˜ö𘮥3¢©@K‰íƒîkBÞ)¶Ç*òÈwVÎ3܃ӎý©,àI­çr˾yöÌWŒúæ­K <2B[Ìfg™€øu`à:Y`YÀ_c¯Ï,‘¥xèõü;}j›E%Ôehü×"2ˆ»BB§¡=r)ð¸13ÈpOÌŒƒÎ8'54¡q lËó¹ÎÜà¼÷  5h’Cº8€Pà…ÿRÂͽT2Eçž›R~Pˆ²Í媟¼uÇA]¢Ã~ Iõ?á@XÚ,‰iŸ«éUµ}RßL°’âY’3€„}ãíIy¨Ãi–œ² <2‚s\µÜ7#¾F™˜ÛFv¤}?@v6—^"ÕúpVÙ-Èú^‰e§­¤ "Dvìc¥O§é°ÚÛ¦FÀ«·,Íá ƒõÿ9  ”QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEihŸòõÎ_ýջសahŸòõÎ_ýջសsÐÞ~¿¢:ñ_ ?ðþ¬îàû‚Š û‚Šè9]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@Õ—üƒíëŠè"§¨,¿äkÿ\SÿA=5ãö?úæÿÍjÁªëÿ±ÿ×7þkV Dý*«u«OÒª·Z@r>:”æÌÀàâ?ò5y‡›PÝ’[É#pÆAëÔñÏ•z§ÄÉL: ä6ܘ«É­eT†iÚEW=vq×Ô☠²oÜÙC½S;¤'ÌÚqÏ^Þµ °<к©&I‡–§å`«‚sÆ givÍ$k)~a6‡ëíÓ·­j<7lÀ$¾ðG˜"àc@Aj·Sª:«$*®<’=xë[é¢Ú\Á°À3ü$pG½« ˜í%Ù7ÚmñŒAÁ'Ž{f·ôÑ!„ʳù‘?ìÝýé@qi/i«J²»1 òz©<Ÿ¯o¯\^ÇonË&õ 8e?*·ª‘EvØV‰ü¹7õÁ¬Y-[Vî¹6Ö*pÎÍ’øêô÷çé@vºéinÁÄjÀžçô­ûib†1äÙNüõpqïW´ûM*Â’) HóóHÄ~¤Öf¥â°Ò¥Žb’gêǃÜdöæ€4cÔR6t–) }»€cwãVMÌSDR6RU¹ÁÎ8ÿëÓt‹¸õ]->Ô©#ùcx#¯\þ¹ªIሴ}NKÛvýÌ©³iê§9Ǹã­[¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(KDÿ€ÿ®rÿè¶­ï ôükDÿ€ÿ®rÿè¶­ï ôükž†óõý׊øiÿ‡õguÜQÜWAÈ2ëýY¯=ñü|Åÿ]ùס]«5ç¾"ÿ˜¿ë¢ÿ:äkÿ\SÿA=Aeÿ û_úâŸú©è«ÿ±ÿ×7þkV W_øýþ¹¿óZ°h'éU[­Z~•UºÒ…ø“es¨iÑÛÛD$&h p…Ÿ“øâ¸#áèãhúçy*Œyú×wñ6ök)d‚c4Ð!`¹à‰ëÊÌ÷¹c,ó†X {céLßOm>hÖ;X" ¿(*£V¼‘AÂö?¬é‘AfîYwž00TúÚ¶îfT@8×§Fö4væ5lxgÏ€‰yf6󃪑ÁCÔ:¥q~Œ29低)ÕɦŸzÚzqÓ‚ImåK¦ËŒ <ãø€ë^V*rUZRkn§M4¹v!¥\›¶µ°kÈà‘QZÚ}Ûò¡‰É`8Î:Õ»k-"ëM[èm$hÙ Ënã¶3Ö¡Š Œj2O¢<±]ʧìÌÑ€€düÛz\Õ‹Ô4í*(Ÿ›"Ç#*ùÃs”'¯éÅsÊ¬í¤ŸN¾Zõ-Eu_¦•}$ÑgÏo4$oŠf €FAáˆÁç½'Ùô8£ßyö[|Èñ®ë¾iÇ\Ž}Gj~ž×6vsÏ=„âå™^y&’%Ø‘†8UŽ8÷¬›i[í–sCh׉+^²¢²Êd\7Ì@ÇøÕ)ÔmÚNÞ¾B´m·àlÜYh6 ËÛÂ$û†K‚»¾™<Õ¡é¤d[ñÿ]ük”½‰ôk9-®)®.tÿ"8ÖUßËü 1˜—'åé]…Ä’™âh F¬OßùA'ó8ü*jJ¬UÔÛù(·fŒ»Km:ñ$’="ébPÛdi$*q…ÉíÜ lèòÇtÒØÏnÖÄ RBK ŒŒmcœûsO±¶¹·Ô%¸ƒM–ÖÜBÛ­Úu>l™ˆ^üñœÔú5œ–÷W“ /°ÛË·e¶å?0ÎæÂ’xè{Q*²IûÏïÿ‚«±•®‹{iopÄäˆÒY ±#9Ï^ Cwh‰/ØešÙ° Ä2nEÉÇ?>O>€ÓdÒ/.<;m¦”ò¥2–iƒ À 0zž¦’òÒîëJ·³þÆ s`E:ÈmÜn;€à= 5R\ßµûôûÁÅ[oÀ}Ü:uÔp¾vË$‹J’)V'ÛÌÝÇ9ã±§­¶—ý¤¶2i·;îòävù_o\a‰ˆ}í¦—\‚i6öð‘ÌŒpxöQÿUCk<þ †í4ãkå–\Oߦ …$žp~lc*´ÚÖOnïüÁÅv ¿G°•£{ åòãÊѱ"$ÉŽXz™¸¢uf£¤Ýôê *û~?³´MŠÿ¹ÚèdSçœXsӑϽG¯‡¥·{ˆå¶x#ûò-ÎU~§vf 3R{$´kSo§OjÌB²³ ·œŒíî\»Ò¤k‰ßì’¼mogtWó˜än ddu⛜—ü¼˜Y)4vz<²9D·kuˆJ&[¢r #8Ï޹õô¤ò|6mÏÚ-<€ÛL¿jùséØÍfÝYêešïPX—lPîó_dÌÛ[•+žÙ5&œ²j·Föm°h‰9e#hƒnAƒÏ¡4ù§fùÞžbÓ±¥%–ƒº\Hð$÷dk‚¾‡85§‡¦Y¼ò¬!„lñ£Ü23Ï5FMþ6†DŠm‘Ër<¨ ;‚»åHó\cèyúÓî4‹«kyb·±’é&ÓÖÕ7IøH ÷²@#æ=:P§-?xþñÙ_cA´Ý8%£}’?ß°tì¸Ê“Ç?1ã§ãÚ¢xü<-nn"0Ü-²‘`Ÿ{¦ïj·ug<‹¥Lù“‘ò-‡ãÉ“ý‡xÚm¤IF›5¼‡páØ.Ðq×jcVOy¿¿ÔVšVEºó­„ v‰ ÏËŸLîÆjK‹-Ð!¹x!÷ —w}2yªWÖš…ãÙ] K˜¼¨Þ'†7€¿Í·æò¤pGPk;UDÒ!–ÛËóš}5m¡G–?5Ü1ŒÙÈû¹ätªŒ§&’›ûÅeÕiú\%»y+;Œ¤fr‡°ÎM$Z~‡<òA†I£ûñ¤ä²ýFr+=´k¦Õd2­ÓA4ÑL„* Ãnø+ü'¡úÖ…ŸN Û÷7³C• f qŸAǽL§4´›oÔi.Ä7–Ú-•͵¼–Ò4—B g¹9Àj6ºN›öfšX¦›Ëib¡Ö9$ŸöqøÕýRÚ[‘gå&ï.ê90£©¨µ˜'“ì2Ãj×>EÈ‘ãR ‘µ‡ˆHïSÓv¼ŸÞ7­—B -ßøûØZoüûãíþ5£Eaíêÿ3ûÙ|‘ìgai¿óíÿ·øÑý…¦ÿÏ·þ>ßãZ4Qíêÿ3ûØrG±ý…¦ÿÏ·þ>ßãGö›ÿ>ßøûhÑG·«üÏïaÉÆwö›ÿ>ßøûØZoüûãíþ5£EÞ¯ó?½‡${ߨZoüûãíþ4ai¿óíÿ·øÖ{z¿Ìþö‘ìgai¿óíÿ·øÑý…¦ÿÏ·þ>ßãZ4Qíêÿ3ûØrG±ý…¦ÿÏ·þ>ßãGö›ÿ>ßøûhÑG·«üÏïaÉÆwö›ÿ>ßøûØZoüûãíþ5£EÞ¯ó?½‡${ߨZoüûãíþ4ai¿óíÿ·øÖ{z¿Ìþö‘ìgai¿óíÿ·øÑý…¦ÿÏ·þ>ßãZ4Qíêÿ3ûØrG±ý…¦ÿÏ·þ>ßãGö›ÿ>ßøûhÑG·«üÏïaÉÆwö›ÿ>ßøûØZoüûãíþ5£EÞ¯ó?½‡${ߨZoüûãíþ4ai¿óíÿ·øÖ{z¿Ìþö‘ìgai¿óíÿ·øÑý…¦ÿÏ·þ>ßãZ4Qíêÿ3ûØrG±ý…¦ÿÏ·þ>ßãGö›ÿ>ßøûhÑG·«üÏïaÉÆwö›ÿ>ßøûØZoüûãíþ5£EÞ¯ó?½‡${ߨZoüûãíþ4ai¿óíÿ·øÖ{z¿Ìþö‘ìgai¿óíÿ·øÑý…¦ÿÏ·þ>ßãZ4Qíêÿ3ûØrG±ý…¦ÿÏ·þ>ßãGö›ÿ>ßøûhÑG·«üÏïaÉÅ(´«+c$°ÃµÖ'ÁÞÇøHîj ZÒoõRÿ×'ÿÐMføkú×­—ÉÊ›rw×üŽjû£ºƒî (ƒî +¼Äe×ú³^{â/øù‹þº/ó¯BºÿVkÏ|Eÿ1×EþtÝYÈ>×þ¸§þ‚)úÖ[él’tk˜”;Æ*Oóî=E-—:u·8ýÊsÿ‹kákMI/ÓP¿iÕË’ÍÎOPß' ÐëïyR$`¥bØÎÇOÌS«ÏÜÿ’ñ4¨Ä]*çå(Ä¡_ñ5S^Ô¥Ó4Ö’ÝK¹]a¶ú4Œp3ŽÝϰ43Z¸ñûqù'ÿQ42ù~¹ü£ÿâ+%¼G8ð„Ú¡¶Syo˜ç„gjH­µ³Ôí~•‹«Ý_Þ]ÛÏ%ÊB¨Ëug‘nÏËÉ<Œס(5û›ˆì„-).’£ å,¥_Ç|©ý+Í.5+øõÃöâ£DÇožØÈ=†kÒ¼K+˜<²ß"G¡>n¯,Ö·E}i&r<í¼œ2†î=EKŒ^­ìÓ·ÕnĬí{tÑÐÊ}1ÜúâŸ.³|#3%ÔÆ4ù›çnÅP–ED·³ŒÁ›ã5YÚæq"|Ë4nàlã§ý){8v ³ª·Ôe”Åþ•)V]ÙNZ¸oeIvù²àö.süë–Òï'+*vu~nµ~Ü%¼- ’(Ê‘ž½†3Ï{8v ³MîÝm¼Çº‘@wàæ³ç¿¸ùÒÞêáØÞ99ÏšÈÔ.–Úp×{ÚVòàçüÿZ–Þ[Lî·¼l§²OqŸoǽ΂ì˼OG$’Ûësˆ¹93>88À$Ÿä3Yð_x¶Îéî.µ)nbeÐÝ2…Qß¿Zè'y&G\+#¶ç`„’}˜ªÎÂKT…ä Ûv<„€Y@8÷ægÁvQ—ÇZ´ÐhÂðXÌ[çžµ6‡®ê×zŒ‹>£1UˆáfÆr9ëY1øvKKèä·¤Œ¶IXÓžµÒ[4&@±Pª@\屟ÇgÁvi}¾÷þ~çÿ¿‡ühû}ïüýÏÿøÕz(öpìe·ÞÿÏÜÿ÷ðÿo½ÿŸ¹ÿïáÿ¯E΂ì±öûßùûŸþþñ£í÷¿ó÷?ýü?ãUè£Ùð]–>ß{ÿ?sÿßÃþ4}¾÷þ~çÿ¿‡üj½{8v ²ÇÛïçîûøÆ·ÞÿÏÜÿ÷ðÿW¢gÁvXû}ïüýÏÿøÑöûßùûŸþþñªôQìáØ.Ëo½ÿŸ¹ÿïáÿ>ß{ÿ?sÿßÃþ5^Š=œ;Ùcí÷¿ó÷?ýü?ãGÛïçîûøÆ«ÑG³‡`»,}¾÷þ~çÿ¿‡ühû}ïüýÏÿøÕz(öpìe·ÞÿÏÜÿ÷ðÿo½ÿŸ¹ÿïáÿ¯E΂ì±öûßùûŸþþñ£í÷¿ó÷?ýü?ãUè£Ùð]–>ß{ÿ?sÿßÃþ4}¾÷þ~çÿ¿‡üj½{8v ²ÇÛïçîûøÆ·ÞÿÏÜÿ÷ðÿW¢gÁvXû}ïüýÏÿøÑöûßùûŸþþñªôQìáØ.Ëo½ÿŸ¹ÿïáÿ>ß{ÿ?sÿßÃþ5^Š=œ;Ùcí÷¿ó÷?ýü?ãGÛïçîûøÆ«ÑG³‡`»,}¾÷þ~çÿ¿‡ühû}ïüýÏÿøÕz(öpìe·ÞÿÏÜÿ÷ðÿo½ÿŸ¹ÿïáÿ¯E΂ì±öûßùûŸþþñ£í÷¿ó÷?ýü?ãUè£Ùð]–>ß{ÿ?sÿßÃþ4}¾÷þ~çÿ¿‡üj½{8v ²ÇÛïçîûøÆ·ÞÿÏÜÿ÷ðÿW¢gÁvXû}ïüýÏÿøÑöûßùûŸþþñªôQìáØ.Ëo½ÿŸ¹ÿïáÿ>ß{ÿ?sÿßÃþ5^Š=œ;Ùcí÷¿ó÷?ýü?ãGÛïçîûøÆ«ÑG³‡`»,}¾÷þ~çÿ¿‡ühû}ïüýÏÿøÕz(öpìe·ÞÿÏÜÿ÷ðÿo½ÿŸ¹ÿïáÿ¯E΂ì±öûßùûŸþþñ£í÷¿ó÷?ýü?ãUè£Ùð]–>ß{ÿ?sÿßÃþ4}¾÷þ~çÿ¿‡üj½{8v ²ÇÛïçîûøÆ·ÞÿÏÜÿ÷ðÿW¢gÁvXû}ïüýÏÿøÑöûßùûŸþþñªôQìáØ.Ëo½ÿŸ¹ÿïáÿ>ß{ÿ?sÿßÃþ5^Š=œ;Ùcí÷¿ó÷?ýü?ãGÛïçîûøÆ«ÑG³‡`»,}¾÷þ~çÿ¿‡ühû}ïüýÏÿøÕz(öpìf¶‘ys.¢K‰ RåYÉ÷m[^þ¦¹ýþB‹ÿ\¥ÿÑm]†¿©ªI-‚÷;¨>࢈>࢘†]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@Í™ÆlNx: ÿ¬Ø­Q˧Iwr­„P³dyŽÙ9x­M:ÀÈí.¤Ò"Ø2¶[õ«¹ŽK·ŽYcòËon2r:{TvšLÜn³µbû žýût®‚ÎÅ- D»:a@ÑEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE¡¢ÈQ딿ú-« ð×õ5ÏèŸò_úå/þ‹jè<5Ôÿ¼hºƒî (ƒî (—_êÍyãæ/úè¿Î½ ëýY¯=ñü|Åÿ]ùÐueÿ û_úâŸú©ê /ùÚÿ×ÿÐEO@ _øýþ¹¿óZ°jºÿÇìõÍÿšÕƒ@?JªÝjÓôª­Öï‰Y—îŒçÉÏÓ÷ÕÉÝä®AÅu~&.1´ã˜r}¿}\Ô‹˜ÊŸá¦¬XrËiÑÃ#!ÁüG¡éSif ËvUP’•êGQÓÿ­Z·‹ Êð; ž¯zæ®­î4E’ò/Þ¹ó#QÈÏ~¼Ð-CPŸN»kym–x”æ2¯µ±’8'éT^ù®eT‡M‘¥à!¸rÝqŽ3WÃ{|<µ{Ÿ“jÈ{1ú6þ(+û°³¿ÂÀþT5¿†]åXîüæšL´²6öÆÚÔ²ŽæþÈX³ul`~Õ¼²$ۤʈ£\dœf«¾©«µ‰ç>NühÐé‹ãÆ¶ÃæÜ#åÆ1õÇåYÒĦñþÈfÉ ¹ùS=O½i}žæõ‹ÜÉåÆF6%XUŠÚÝ–ÀêHš¥caäy yJšR ìÈÝÔ¯zÎÔO/æbyíùV^‘w¬½ÍâˆÑ o.3÷±¹y#ðýh ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(CDÿ¢ÿ×)ô[WAá®§ýã\þ‰ÿ!Eÿ®Rÿè¶®ƒÃ]OûÆ€;¨>࢈>ࢀuþ¬×žø‹þ>bÿ®‹üëЮ¿ÕšóßÇÌ_õÑwV_òµÿ®)ÿ Šž ²ÿ}¯ýqOýTôÕÿØÿë›ÿ5««¯ü~Çÿ\ßù­X4ôª­Ö­?JªýiÌø©€Øñ<#ôœÿJãç¾2#¬QÈü•à`tîk©ñ¬1Ψ_Ë’Uz‘‰ÁÇç\­´QDÄù™ Îô¦7­Ë¨Bë<¨‚ÞS‡ ˧­Gc})³dk[©c9ÃÁ#•Ú0ЫI_BF)<¸T¯ë¸yu­…Ô™1Á1·~ZH9ÉÛÇN+SK°Õ­î±Ú¢/ËùÏxœõëÍvÊ!GâiäÄ>bÃN aÁ¦\Ϋö¹Ô€wyhxúÖÔǬQñ´t”Ç!™¡æ\œ|ž+ PÕo0a†Êá¤RvÜ"GÒ€6®õX-­‹ùŠY>ôlp~Ÿýz宼A}9:TooÃ$:-Î¥0›RrX÷R>µ½ö K@$Ž=ΧªýæúÐZ5­¬Ÿi¹êæS•`A,Þ•½oeörf—æ¸|ÍØî§ëSÛZÇæ‰v‰sòŒð£ÐR»œàacêh¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(CDÿ¢ÿ×)ô[WAá®§ýã\þ‰ÿ!Eÿ®Rÿè¶®ƒÃ]OûÆ€;¨>࢈>ࢀuþ¬×žø‹þ>bÿ®‹üëЮ¿ÕšóßÇÌ_õÑwV_òµÿ®)ÿ Šž ²ÿ}¯ýqOýTôÕÿÔÿ®oüÖ¬ªÍåÎ’ífP¥NÑ’3ŽqøSì>“ß—ÿ {ôªÎ9§µìtŸÿäÿâjº‡û·ø 'ÿH íF¦žE–4‘Dq:‚:ËX+w¡¼3L#‡É‡ïHmˆSÎ>S· ÏfºÈÚdšVFD“lK»‚@ÞsŽß{ô®a4­DééîmGÙ|³o*³å½qÆqÎ ¯#ÿzîí±ÕM{£-ï´ùF£1²‹É·‘R5û6ÇbTa€9$àp*æœ-/´¨¯[M†2èXÄXŒvéÏJ¯‹us<×7sý–ffAháÀ!6s½9îzU"Æ÷N³¶µ’X弯'æ?(\1ׯ5Ï9+hõÓ¯‘ikª¥›MF´¸­Ìs4[·äã§^•Û4˜ý&+vf–UQ £7Ø9Ç=*Ô6×V^¼~S<—&`ãòg€3»àø¬{hu%»´¸µ´®ß;£ ¯"•Î ‘Îõ¡>fÝôõò¡¥q{ ÛGÈ2¼~h1Û™>Oï à{šÐ6L¡…¥¹d~ì…r·ºuî—k%¥¬fêK«?!ñ˜ –ä0R |ç†# æº‹&º-:O¢FÁ!#« £$þ9…*—Jñ“ûÁofŒí9ÓPŠY—KÓÄK¸&Ù1  €.qêiš}Ý¥äoý—læÝ‚ÿ¢í™d8ΰ9ý*[}:ù5/Ì0J hÕ!f"V$\í1èzš±§YÜÇ{w{v ŽIÂ/—Q·<’@É9ôì)ÊjÏ_Ä,W³¹Ón,-nn, ¶7,QQ0 à°ìj Ûûhíg‡O³šÞà€„’>N>D+óuÏQO} k &gŒD\™ÙI'nâÀ.G\㟭-Õ†«w¥®"Ø”hÂI6æÊàýå]¸Î0zŒjQæ½ú÷è ; zM¥ì®a$sÊ#B$Ãã'nÌp=i{c®f¾›e’¬Á£uvP1‚ë´mÎxäÕóg#k1Ý»)Š+sc<†', ?Z¬ï®ukk‹…µŽfvFÙÁr9<ž@©U4ÕôîÁ¢¦§yi§ÜIivÒˆaÊXª¤‘òŒÇŽœvçš±«‹M;M7kgoÃÆèAáœÀç8& Öt[BíämdŽ6™ˆkfé€yäwtsV/ôXä´”ÙÃn·’ß¡y_!p$ò¶ý÷ïÆìmÛ»§=*„Ú=üV²\\\ fHâ+€òÉ+8,0@Î3Á8©4ëKëëƒ}<+oþž'ØÛ†PC³€Ê_P*´³|Ïk¯y¡%¬W8 rçfËrÌq×å ‘ŽüqÞ Ôïô‹–8mä”Û™¢ n\Ž Ú8R{œT2øzëzM#È’Î|±s$ ¤¸|ÉÎF"Ÿq¢]Å ±éél{5µxå•ÿw€Ø*Ø%‡Ìx8éI8éï?¼zßbëÇh‰bÆÞÍ î†ƒ;²¤àc¡ã¿UWÔôF³¹žÚÚ)ZpncÞ£º–^G¸ÏZ¿sa,£N Éþ‹(wÉ<€Œ¼~$ViðýÃéö–Í,@Åa-«°$üÌ8äpiFQ{ÉÿWžšZóEŽÚ9å¶XÄ™ÚfÁÎIÛ·v®1EÍæ…hˆÒ¤^?4íÌŸ'÷ŽÐp=Ï^ëIÔnÚÒæE€\@Gܱ«)ÛÎõƒ•é‚*Ž©gsa¶Ö¾gÚ¬VØÄV‘¸ >Ò?ˆýâ;ÕFÍ¥Ìþñj–¨Ù{;µµhíĬT¨ÈºØÀ'°&¤¶:UÜòôlÑ®~ÌBä®>†³ÿ°%þÒyYVkydŽV u,{B¸¿+}ÐFqWm ¼°òáDÖkÉd•†NÈØ³Ns´w¨m[I;ú_ª~ö–W6)$ʱ™j3ê{ŸjMYìôß±±³€Ç,þ[âßyÆÖ<Î@ìjæ£i%صòÊ*á%mǨqïLÕmnn>É% …¤·ŸÍÛ+• 6²ã ïzRŒö»üFã½»ÞïCK4»0Æ`lëjÍ·wa~\wÎ(k½ nűŽ0²®~Ìve€*7íÛ’ïÞ¨\hZ›Û°Y£c9•æ‰n$…¾0APK0x9« ¡Ü­”ðù‘y­äS“Ò1=ºü‡…]ãüÏï%ߢæ÷L]BÖÎÚÚÝä{Ÿ&Söc´|¤rf´nâÓ,­šââÚp î9'€2y"³×J¿†hcgkH.Þé_s íÇnÜc«uÏáVæ·¼Ô´HeŽ+¦0É"òJº±ý K–Ö–ž£¶¯B/ô‰Òâ{¾ÀÑ”þé%@ØóR­Æˆ÷¦Ñc·3n)þ£å,J†Æ öÎi’i¼³8x°÷ñÝOÝP Ž~SQ&x%ŠÝž±Et×JàŸ0’K#·\ôíG4™ýágÛúÔ–ÚóB»Ýå$,fRd·( ¬ (È÷-”š> \[A 2Jµ¾ÃƒÐá€È>½*‰ðôòØYÚÉ,kåXÉm#)'æ`¸#ŽGÊ}*õïöƒ^ß}\@ D‰g%‰ ~]½MjÎÒx+ö.}‚Ëþ} ÿ¿cü(û—üúAÿ~ÇøUŠ+i>åÙþÁeÿ>ß±þ}‚Ëþ} ÿ¿cü*Å{I÷ "¿Ø,¿çÒûö?°YϤ÷ì…X¢i>ádWû—üúAÿ~ÇøQö /ùôƒþýð«Qí'Ü,Šÿ`²ÿŸH?ïØÿ >Áeÿ>ß±þbŠ=¤û…‘_ì_óéýûáGØ,¿çÒûö?¬QG´Ÿp²+ý‚Ëþ} ÿ¿cü(û—üúAÿ~ÇøUŠ(ö“îE°YϤ÷ì…`²ÿŸH?ïØÿ ±EÒ}Âȯö /ùôƒþýð£ì_óéýûáV(£ÚO¸YþÁeÿ>ß±þ}‚Ëþ} ÿ¿cü*Å{I÷ "¿Ø,¿çÒûö?°YϤ÷ì…X¢i>ádWû—üúAÿ~ÇøQö /ùôƒþýð«Qí'Ü,Šÿ`²ÿŸH?ïØÿ >Áeÿ>ß±þbŠ=¤û…‘_ì_óéýûáGØ,¿çÒûö?¬QG´Ÿp²+ý‚Ëþ} ÿ¿cü(û—üúAÿ~ÇøUŠ(ö“îE°YϤ÷ì…`²ÿŸH?ïØÿ ±EÒ}Âȯö /ùôƒþýð£ì_óéýûáV(£ÚO¸YþÁeÿ>ß±þ}‚Ëþ} ÿ¿cü*Å{I÷ "¿Ø,¿çÒûö?°YϤ÷ì…X¢i>ád@¶vÑ,¼(â'Ã*GÊjŸ†úŸ÷ó­&ÿU/ýrýÖo†úŸ÷ó¯c/mÓwïþG-uiÔpQDpQ]æ#.¿ÕšóßÇÌ_õÑz×ú³^{â/øù‹þº/ó êËþAö¿õÅ?ôU Ö¬n5i´ÈåÍÌK’1Á=À=Èã?_®,Ù éÖÃþ˜§þ‚+6 èö×1ÜCm*ËïVûL§ ëËP«$ÉâªT³êqŽ?Zy²‡ÖoûüÿãH¿ñúŸõÍÿšÕ_\Zi链»•míÉÚÍÕ±ßh¿ @[k(ë?þIÿÅT k÷®?ð&Oþ*°eׯãðt÷ TjV’ýšêM™Á‚´›Gm§~:sMеvºÕïl«© QG*\¦ÌÄ‚§gËØ釩‹5[M «Ÿ:=1$…e“Œ÷å?#\ Î¥ª]³3ÈØã#È®AÅw¾1ÓÓRµxœ¸Ûäºìÿ|9öæ¹{KƒÉ•ÓÍ,v–`Äa×ð  _éòý™®YÙ£~ŽqÉç>µÓ\N±Æ«¸ä2? æ4ËÕ´ºWŒ€…?xXm.ON;ž¼ûUmOÄ‹&;€l(É9Íi]_®3œäǹÀ¨ô;¦¹Ögp±F70ã$“ü«”¶›Q¾·’k{r0¹i¸ c¯ojÝðsKhú¤—[›0Œ©?¥tĽËÏÉSOrN©®uUÞØ"¸WÎ#9Ç·á[v2æ å8?¸ù‰É9ýxü+šº€NØŠâH¤Lmxþ­Û½eÞÏ«X[³ÜCosüÍjsŒçüõ«ú}Ì kiq j‘\¸€%¸n'×'ðɬ]h_M¥Ï4“Iá@=r1ßhðë›Ï ù*¬ŠåÞ›‡ äwÿ è®t+}VÙe`a¾O”J½ÈãÖ²Òò褖ŠRX™X>ðÆ2?ÏzßÓï<ØD»pæÛŒ`çtìÙ·OSíýòá7ÎÞ€1h¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠÐÑ?ä(¿õÊ_ýÕÐxo©ÿxÿ:çôOù /ýr—ÿEµtêÞ?΀;¨>࢈>ࢀuþ¬×žø‹þ>bÿ®‹üëЮ¿ÕšóßÇÌ_õÑw6gu±œ@œÿ(¬[_ZÝßÇeŸ~'y {YcùH럟 õ·eÿ û_úâŸú¦G§YŨK·S(Wu ‘ùJ°¿ñûýs浟ªx~ÛXÔí®/Äw¶ñº­¬‘îRìGÎI=€ÀîkAãö?úæÿÍjÁ¤=oáÑ¥O}&‘,6q\¢ƒìû’99p£tÎhÓtìù..&¸k›Ë‚<Ù™BŒŠª8dñï[Òª·Zåa‚AG8?ΫZ,’^(*pñHƒ<Îàz³S_m{$U8$óÇòGò4EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP†‰ÿ!Eÿ®Rÿè¶®ƒÃ}OûÇù×?¢ÈQ딿ú-«¡ðßÞ?ïç@ÌpQDpQ@ ºÿVkÏ|Eÿ1×EþuèW_êÍyãæ/úè¿Î€;«/ùÚÿ×ÿÐEOPYÈ>×þ¸§þ‚*zjÿÇìõÍÿšÕƒU×þ?cÿ®oüÖ¬‰úUVëVŸ¥Un´€ÄÖí£¹¬ƒ!D,¯2ÖuËG»Hä,h=:VüKóÏ*D<¸‚³ôÝûÜ*ó­GV¿ñ,Öêl¬”bI˜ä¾=ùëL bÿ®‹ü躲ÿ}¯ýqOýTõ—üƒíëŠè"§ ¯ü~Çÿ\ßù­X5]ãö?úæÿÍjÁ Ÿ¥UnµiúUWëHgÅvÝǶ}»PÂãwL;¯çX–‚ä ÞŽÿW÷Ï©úvüë¦ñ ·RMËí÷=‰Ï2ñÅaÝêvØ&êp>B0=zSýêB<÷£CˆÓ~OðËÁŽÓÜK!3Ý+—'ª  OçÐUûŸ2æø±LAÛÈÈŸ©æ«Em/Ê£•Ÿ}Ð1´~†€6 »X|3}!ùUC2©ÿk ýk[¦‡Ä–†3û¥HÝm¤ ¡º’Ý­IMüG*çØTsYLíÈ×Iyr1øƒ@ž-¹2y…ÙQÏ$ãã\Nšñ&¦öòp²áÃŒqŸÇ­t·ÐÞ\Ã[©ðMdˤjywð£OîUÜ0Gö=hWÑd‚ý¶Èf2+ŽA\ŽÕF4†Ú/2{vIŒlâXúN1í^€tëk£Ý@Ø”`¡ëÁéK©è–2ÀÑ•XjãvÜã¨ïœ¥`²}"k„a4q®ÙG·äMo鬺|¨ÊÊ®¸ìsüë:çIžÛÃÒØØî–]¤)$.àÝTöëVt{k›h‘gˆG˜P? üÀc·ã@”QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEhhŸò_úå/þ‹jè|7÷ûÇù×=¢ÈQ딿ú-«¡ðßÞ?ïç@ÌpQDpQ@ ºÿVkÏ|Eÿ1×EþuèW_êÍyãæ/úè¿Î€;«/ùÚÿ×ÿÐEOPYÈ>×þ¸§þ‚*zjÿÇìõÍÿšÕƒU›rJ’ªïÚ •Î:~T¦é¿çÒÍ?øª{Ž*³ŽiÍrçþ\®?4ÿâª&šCÿ.7?œü] (^.%$à¢þrÖë°µ›Þk¥·ù|§*?}¸àlÏ'@ë]ͬÒÇ,’Ds!TŽHP®;åsÉáËá§ ¹v†-Ÿfao‡Œ¡wá±ØW‘‹‚u]×oø'U7hèV·Ög-¨¼°J®“$P[I´6æ@@Ê’9$œäàUí2îæûDŠå–s"›¹\TqxfY$–mA¥žw”J’ „&Î6¶z{÷§ZèÖ:rYÛ\ÌŠ±ºîh™ÎæèÃ'Œzw®yA5¢×N±i»ê&—yw=Åå½ÑÍ»*‰`RªÄŒ•Á'‘õïP¦¶±b1 Ýä¯,À*"6ñsV-t}VÇN6é"˜)äÚ',ç9-ëÇ'5‡­ý¢Öx¢6¯ºéÜÉ™³Ìpʤ8î ST“mÛOøæÐµ7‰-40Ü\ ‡Ï)GîÓž[q‡Ž¼×V‡B2+˜¿ðÞ©mZép\8ž×ìóHñ©SË|Ç, Ÿ˜ô ×¥tVvzŒop'W1ïî¨P==rjjQV¼F¥®¦^•©]_›€×6‚U ‹q +Çó¥²ÜŒÀQ¦ê—·I|SMnÁP*4ò3ʾJ~ýªÔz&§ö¶»žã}ÂÂÑBRÔª $HÜwqRØé–÷3Ý];Oq0U% 1¨UÎ>§½9CGeøÀ ”­uÀº=­ö ¢1+‘ãÿWÉœœãŒgÔÔZ޳uomky*C1_ÝO n9 ràíN~j´|5$š\tÆG¶G-*ˆˆóFI¯$}qI6ªOb¶2^³[ü¹Iµ>c¯ûÛ°0 Áõ¦¡kÛ¯g·Ü »XeõÎ¥¥k Z2\I@Û•Ë1møý:‘H5¸üB–˜Z)˜b'B `Œ18sÏ!zVˆÒfþÔ¥d!`òQ<³òó’sïùT?ØÚ„ºŒ77S"Ùá‰-ÊH#ælœàÐ •5];fn·®O§^y1›tÄBDY&á·cb`Œž½G>­«Ç Œ¦Òâ7º†X„‘DÊΠȠ‚; Ôº—‡n¯§ã‘¢Kˆ+ÛïùA'å9O'×·jÿFšóO6Ñ«Äû‘–CnUƒ Ž3ÓÖš‚÷tõÝÞ¥¬¤ÒC[‹i…Ç•$.ŠNJ3 òFÈ=¾µ>¨Í¨éq]\Z¼,Ñ«ví|ŒåpÄãëƒLO Ý”º¸•ä¸óÄÎËU # P2p>lç&­izEîŸf-%vž(ÀH±Rª;““ïÅ)Árû«];üÁ=u*zÔZÃpR`’Ú½ÐùFB(ƒÏ_˜S?á!a•¦µº†Hü¿Ü¸]ͼáH!Šò}H¨—ÂwžI·{–hRÖ[XGÙˆdWÇ,w|ØÀì*äú Ô’Í"mÌ–ñÀRkc"¥‰ÈÈÎwSöpìÿÿäÌõ„·žW¸[˜öÁ}‘I ÎÊ*NX‘Œg=èþߌ!ÆðN'yMûŠïþöÜcÞ«?….­¬¤òÍÄÓ,qˆÄqU’FqÍŒ ØÁ=Z“NеIdû^ ßlXÈì€Ä^¦«ÙFÍÛó3'þß·h!x­îf–]ÿ¸D×aÃg$ƒÇ_¦j¾£â]:W°Žy¤6†á^4‰H;Y·èxäðx§\xAæØûcyRYœ}¢ÏÍLHÛˆÚHäqÈ5%׆nÝm$Âkam2‹\¡Qœ§æ>¢’§ 4ˆùÉå»1Ǧ––E3ÈíPwŒpsÐqÚ¨¿‰Qôùæ†Öx¤¯sž£lª£¨ÚÇÔppy­Yôy¦#/Ùdþ¬ØF\{}ìÕ/øE¤k;kgyJÃi%©""  7{coNzÒŒ#Õ~¿ð7 æÖ¼¨¡ó,.þÑ*³ u_hÆ[†Æ9óíLŸÄV±B%Š‹”òØT~î3ÐÄz:ñMºð½Ýê[=Ñ‚{ˆ ilwÆÊqÕ uã¨5WVÐuP2ÑÀ¸µÒ•D@ ãp+÷@ÕQ¥ÖŸ…ÌÑ¡&¹mוåNÈ#y•FÈݱµO9î:ŒŒÔözˆ½šdŽÚuŽ'dó_nÖe8 `篨SþB5Cx ÷²»‰¬„Ž €>GÈ+Ðv<Õ˜tBÐÃÌmu$Ó“2¸íïÜŽ}ª%I[ÝZüƤú‘êw×Vw6I ´3N±É#·#' ¿¿ó¦ë7³Ù5ƒB’Iæ\„xã YÆÆ8ÀêqÒ¯_isÞ q¶DògY¿Õ“½©š–“yx-ša– ¼Õg„¸?)\‘ýïZQ†×_˜ÛÞÏ¡Qµ¸þÂnÒÎîDBË2*®èJõÜ Ó4Óâ asåˆ. ñÆn¯–À*;¿ˆvïU®|=Ä@4‚IÌ2›‹O1Ÿ2®FÒ1€rx«KቖÖhÉûÉa“>IãË1×¾ÏÃ5~ΟÜÉr} ÷ÓËg ¬SˆZìÂó•_-ð*9ÏQ׺֥ýêiöq";€UBÆâX€É©êðåìw˜æckÃ\¤&Üî wdoÏL±íøÕ–Òoï4h-®Ëý¤žYy•ƒ=1Ré­,´ù›VU‡ÄKp±=•ä9›Èg‘W ! pǯŒŽzÔ‰®[½Ø‡ÉœFÒ˜Và¨òÚAœ¨9Ïb3Œdu§¿‡æy%|È7Þ%Ö<£ÆÐ£o_özûÔiụÍ!²Žv¸H<˜9$òÙäIÆ?=œ_Gø…ßõóÿ€Goâ;Y£2I Å´f¸G™Wƒ#i>£ƒƒÍZ±Õ#½™¡6óŲ̂$ :€YOF'üEWÿ„UÞÎÖÚV•’I-›X6ß›Û}êÍŽ{Û]]Ê÷yB+Œ*ƒž™9$õ>Ý(•8ÙÙ?Ä™vŠ“ìóÿÏ?ï“GÙçÿž2ß&±ösì]Ñ'Ùçÿž2ß&³ÏÿÁtGEIöyÿ猟÷É£ìóÿÏ?ï“G³Ÿ`º#¢¤û<ÿóÆOûäÑöyÿ猟÷É£Ùϰ]ÑR}žùã'ýòhû<ÿóÆOûäÑìçØ.ˆè©>Ï?üñ“þù4}žùã'ýòhösìDtTŸgŸþxÉÿ|š>Ï?üñ“þù4{9ö ¢:*O³ÏÿÁtGEIöyÿ猟÷É£ìóÿÏ?ï“G³Ÿ`º#¢¤û<ÿóÆOûäÑöyÿ猟÷É£Ùϰ]ÑR}žùã'ýòhû<ÿóÆOûäÑìçØ.ˆè©>Ï?üñ“þù4}žùã'ýòhösìDtTŸgŸþxÉÿ|š>Ï?üñ“þù4{9ö ¢:*O³ÏÿÁtDßê¥ÿ®Oÿ šÎðßÞ?ïçZ²C*A34n‰ù*ºk+Ãxÿ¼{zj›¿ò9k»Èî`û‚Š û‚Šï1uþ¬×žø‹þ>bÿ®‹üëЮ¿ÕšóßÇÌ_õÑwV_òµÿ®)ÿ Šž ²ÿ}¯ýqOýTôQEQEŸª\M´··q—SˆD…wlY‰Çs…ýjk ‹ØšXçþ¹7ò®_ß}¿Þ?κ‹ÿùÜÿ×&þUËøsï·ûÇùÐsÜQÜS˯õf¼÷Ä_ñóýt_ç^…uþ¬×žø‹þ>bÿ®‹ü衞}i!´m¤3Cöh÷3lr>ðö¨~Õâ¯úZÿßCÿ‹­%ƒÍQ"Â@np· £òRý•¿ç›ÿàSÖ¤Û¿3þ¾GL1 1K’/ïÿ33í^*ÿ e¯ýô?øº>Õâ¯úZÿßCÿ‹­?²·üóü z>ÊßóÍÿð)é{üïðÿ"¾´¿çÜ~çþfgÚ¼Uÿ@Ë_ûèñt}«Å_ô µÿ¾‡ÿZeoùæÿøô}•¿ç›ÿàSÑìó¿ÃüƒëKþ}Çîæf}«Å_ô µÿ¾‡ÿGÚ¼Uÿ@Ë_ûèñu§öVÿžoÿOGÙ[þy¿þ=Áÿ;ü?È>´¿çÜ~çþfgÚ¼Uÿ@Ë_ûèñt}«Å_ô µÿ¾‡ÿZeoùæÿøô}•¿ç›ÿàSÑìó¿ÃüƒëKþ}Çîæf}«Å_ô µÿ¾‡ÿGÚ¼Uÿ@Ë_ûèñu§öVÿžoÿON[2Ç}n¤£Ø?ç‡ùÖ—üûÜÿÌÊûWŠ¿èkÿ}þ.µx«þ–¿÷Ðÿâë^;Xd‰3 Àyïþ4ï±Cýé¿ïûÿÁÿ;ü?È>´¿çÜ~çþf7Ú¼Uÿ@Ë_ûèñt}«Å_ô µÿ¾‡ÿ[?b‡ûÓß÷ÿ>Å÷¦ÿ¿ïþ4{üïðÿ úÒÿŸqûŸù˜ßjñWý-ï¡ÿÅÑö¯Ð2×þúü]lýŠïMÿßühû?Þ›þÿ¿øÑìó¿ÃüƒëKþ}Çîæc}«Å_ô µÿ¾‡ÿGÚ¼Uÿ@Ë_ûèñu³ö(½7ýÿñ£ìPÿzoûþÿãG°Îÿò­/ù÷¹ÿ™ö¯Ð2×þúü]jñWý-ï¡ÿÅÖÏØ¡þôß÷ýÿƱCýé¿ïûÿÁÿ;ü?È>´¿çÜ~çþf7Ú¼Uÿ@Ë_ûèñt}«Å_ô µÿ¾‡ÿ[?b‡ûÓß÷ÿ>Å÷¦ÿ¿ïþ4{üïðÿ úÒÿŸqûŸù˜ßjñWý-ï¡ÿÅÑö¯Ð2×þúü]lýŠïMÿßühû?Þ›þÿ¿øÑìó¿ÃüƒëKþ}Çîæc}«Å_ô µÿ¾‡ÿGÚ¼Uÿ@Ë_ûèñu³ö(½7ýÿñ£ìPÿzoûþÿãG°Îÿò­/ù÷¹ÿ™ö¯Ð2×þúü]jñWý-ï¡ÿÅÖÏØ¡þôß÷ýÿƱCýé¿ïûÿÁÿ;ü?È>´¿çÜ~çþf7Ú¼Uÿ@Ë_ûèñt}«Å_ô µÿ¾‡ÿ[?b‡ûÓß÷ÿ>Å÷¦ÿ¿ïþ4{üïðÿ úÒÿŸqûŸù”ôÉu¹nYu8a‡a!‘%²8ûǶkWiôªßb‡ûÓß÷ÿ>Å÷¦ÿ¿ïþ5¬#Ê­{˜TŸ<¯d½ ;O¥O¥Vû?Þ›þÿ¿øÑö(½7ýÿñª ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ³´úQ´úUo±Cýé¿ïûÿb‡ûÓß÷ÿ]@§Ü×6¥rÞûíþñþuÔ­œ!ýã`ç +0ü‰®[ß}¿Þ?΀;˜>࢈>࢘†]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@µ± i$MS]K{¶%Ðx<ÃdFbÌ;OáPjv×·šU¼‰ˆÌ¾zI)zw §ã¦kÃX}GÔ&¹‚™µ #‰|ï—y= aF:úv¤¿¯ÀoúüN¦Êþ×Q·óí%G’¤à‚ê<ƒìjí½?íâÈÎVrÛhØ)o@Äm'Û5GG¼Ó-,Á]F™nîH’X¾ei˜gÀÀã>•KX¾·¹Ö,VÚÿíSCt€éárÎFÐIäãŠ}RFÍ¿í½?íâÈÎVrÛhØ)o@Äm'Û5=íý®oçÝ̱G ž¤ú9'ØW;¬_[Üë+mö©¡º@t𹃂ç#h$òqÅ[×XZk:V£p¬l 2,Ž‘0XÛ‚3Û4–Ãê^]Mk)îü÷X`ǘ^R¹éò‘“ùSìµ› Bv‚Þfó•w䉣lzá€$W9­ëIªéÜvÒÅ%¤ÂRhùÉ-ósÓŒ “M'ñU¼–Ú“jËöwI%*¸·‚€/ÌxÆ3Å5¸=æÕ“ûLØEmq3¦ß6HÕvE»¦âHúð hW;eckqâ­bâkx¤š‡Ë‘”O“±íYÙy^k»BÞNŸ*).éæ|ÙÇ'Œ÷¥Ðæ•~øú× )£jré7ö²ÆË’]Uï™±¼œ•ÎpAâ¶|'º]\Ëge4 ¨ 8™Ÿ›$uúS°®t6ÿñíûƒùU}?U±ÕæÊáfJa“®:ŽŸJ£­ßKaá²Ößñ÷2¤ãÖG¯åœþ‹¥Åw kÖ1ÜYAikw´ýÕÁ—t¨ V9EÁ#pïž)-¯ëúcz/ëúÿ†:ˆu[Fk.RK¨4±§;8äôÏ·Z¹\í¥¼6Þ9¹H"Ž$:r6ÔP£&WÉâ­>¦·ÀY¶°#Ø?ãÎ;VLóÿ=~lþ”tAÕ£zIšY]R4™˜à;“Y–>#Òõ+•‚Òáäw¡0HªÀz1Pàk?]¶½½ðL±ùwS\aHæTÈ¡Áe!>\•kÇæüüŽIÛštPÙÜË«Aᥠ§I¥ºÈ°çË3œíý¬g8öÍK‚;Ú+Îî5KMA-Ày-ô[•™W†‰¶' ;ƒùTþ:oö®ýƒ·q¶oíBã`ÆñÓvîúÓ¶¿×Ÿù ú_úéþgSqª\G¯Á¦Aiá3É+ÌSb† ÀÚryõrÊößQ´K«Y<È_;[iÁ ðyê e?üQÿØ5¿ô`®cJ²¶Ômü/ky Onßl-Œ©!Ž8¡-õÕÿÞïúèz%çzm…µ•¶}o˯íw¶3n%š-ò.Ò{ŒùTr^G?Šín#[ Kßí?%àDarÉÊ–sœ ÓŽhZÛÏþù‰éë¿ù‘Eyž¤Ú~/ü¯öøÔÐGæçx‹Í]»?ÙÙéïOŽÜÜx‚u¼Ô¬ìõA¨f#,ö‚¾@¼…xÀäçšK[]¿Ìµÿ®ÿäzMcÛø….âyíôëùmÄI–5ÄŸ6ÒTnÎ\8®~éúWž[iöpxÖîXRækˆ|ÉUgÿHOzàö;m3R]In™c)ä\½¹ÉÎJœf¯šó›ç”i×ÐT‰5·kÑ$lʱ6J—U ”'ë¤ð…¼PÙ]5µý­Õ´“eÑ ÅÀʨ,ÜwëÜе_wä¿ÌoGýy“Ùx§O¼‚YØMo P%üê Å€èO?)ý)öÞ'Ó®-EÃý¢Ý|Õ‹î„3/n‡×§<â­XéGE¹Žóe­«"«ËP•äÄçÒ°¬žoZjÚ,š„z•ªÂ¾F¡ùÎp§)e Šêî/­­g¶‚i6Ërå"P¤– ztàu5BOi1[[\‰;¢Â. œ¯ÞùB“Æ=+#÷3kú Ô®¢d:|eÚÃéýiL(üMcé«tÖþRCûï6´Ñ—QËg€AýiØØŸiOûwÛWÈó<®·ïþîÌnÝíŒÓã×´émâfq³‹tß ©2‹‚‡y¤Yi¶íw«ëÙ®ÅÂÞ"Õ$ ´§pÆÞ>læ³®õ½gM´F¹ #Ö!Š ø"Ú%Îð­‘N;Ž(Z»z~ÿõ;w½·Žú;&“FÒª`òª@'=;ŠÎOèp![õ%ŸËY67–[ÐI¤þ5©éš‡öé¶œ÷—é7KJ¨›I(8Ø£õ¤ºÖt»ŸØêj-ÓOòϘ’c+Ž<秤¶¿õ»ÿ ëoë¡×®¥fúœšjΦò8Ä­B“€} Fu‹¹¼·7#ͲŒKp¡IòÔ‚Aéè:kw±ë†£o\j:oÙ¢žf_+÷‰øîÏÔ HìdÓnµ¸Á»»Ñe¸¹oY7GÐnÀö‡§ãù\#­¾_äβÃÄv§*Gh× ]w+5¤¨¤zîeõ©­5¼¿¾¶Ž6ÛhëIžŠî }rþ×4ûM&—Ä¢èÅdÙŸ(lÚ€6¨n#“Q]XBž±—R¼µ¶š{ƒy*^äÌî l~Gÿ|Ž 9+7ýuÕmΤ–Ú¥•‰Œ³]‰`x]€ëWk„H¬uɼ0“é‘GjÉs‹b2ƒF@È8È㡪/< §Ã¦]¥ˆ³K»´ŽãQV’8‚>#œ2z OMæzMçÚm¼z­·„­õ[¨š+Ë'Ì­·…<õã¥C­Û$ž Ô-ïïlìFØÖÂK˜]™hæ!³ž ü)µga-®z=J=BÚ9$´’ã}Í´ ,ß!)ÏÍéÎ’=fÂU±dŸ"ümò7ÏÆïN8õÅ Ú­Šê‰¦›”7®…Ä#–Ú;œtüj[›Ÿ³˜G‘4¾l‚?Ý.vgø›Ñ}ëöÞ|i¤•VúößQð­íݬždZÊU¶‘Ÿ”އžÔOÝOÈ!ï[ÌÓ·ž;«h®!mÑJѰFAš’¸tÛ=RæÎ+Ød@Ð7ð6~ðô>ôíÞ+ ÝÛE¶{Û ÉRs9¬ zœ÷÷ª’I¿ë¿ù =¿®ßæw´Wœh7I?‰ì.-?³àžæ)ÍÅ­ª2¼g\žH=ð;ÔV-§ùú R¿ð›Â/L™ó·l|†ÏðçíŒb¤ÜôÊdÓGo“ÊÛcK³À šó¿ [ùº¥Œ“jVêÑÈæê!ÖæSƒ¹\— ŽàíÇÛkÿò.êõë/þ‚iKHܨë+ÙëŸlŠWLÔ)œ*;ƸÚA!μwç‘ÅO¤j+«iP_,f5˜œ‘‚Gô®diöv6ž6–±@f¹äòÐ.öò“ަ±7—Ðô§–Þ;ŒñÜýªx’`~Q"†\wÆN3VÕ›^d'{z‘yt–63ÝȬÉm#$“zÍ_iÿb¹ºM p:ÆC§Ììʬ€NN zÒxjÖ8ü??lŠúÝËìtS³a'å’vŽœ“Å7Ä6ºXÓÝÝ.œt’+”Âì””œŒ9íÅKÐ¥©b×ÄIjwM Ý9Ž8ç…Ñ·…ÜTä`~¶jÅΩegqäO6Ù|—œ¨Rqýæ8ÿrË-ö½áÛÖÇws§\‰l¯"M‹pPÈ9åN8§ZÊ5/]ñÆXî-Z `ÃDŠr-ù Íÿ[iø„ui[ÿ‘»qâm*ØÀ$žRg„OŽÞI ŒôcµNÖ–_iÚÛÜ›ÕxîsäùHÒ3ã®A{xdþÂsOcpè/5fëMÓt­ç]k-EZií•BÈ\åÁS‘ŒãŒç޵RVæÄµþ¼Ž’-bÆf³T˜î¼ÝäÛF[¨ãø©£h·7í:¬–ñ‰e pI< ü«7Wºí߆åyÚÎv’éVxczªà:«ƒ€Àwõ¨uM6ù®üAl.'Ôfû-¬„:ª´ˆ$bÈ€9öç5,}?®çWiâ}úæ;x/3$Ÿê÷Æè$ÿu˜ß5vÛR³¼ºº¶·^kV 2`‚„ŒŽ¿Ò¹}kXÓõû m;I“Ͼkˆ†·ÚÀ–n>LG5F}FõcH‡Î»’þâÖDõS€ŒÝaŸ¡4ÿ¯ËüÅý~äu¯â --¯nMØ0ØÉå\2£ÇzŽ™©,5‹=JGKo´nA“æÛIÇÕÔf¸[û(ôÅ|nBÄ–®\õf ncîHÍmÿÂAkm¤ßÉmâ«]‡“ò²¬NÕÀEY—­!›¨¦§òÇ,qÎð«÷öœÙÈü(’léžYÞ-ÅÆüñÛq\Ž»§Xé:f“ÍÍ‹›8}Ž÷;.[qèùÎÞ©šÂÃ]ñ&÷OŽŽÊ9ˆ—<{Gõø?òŸ×uþgkEy]íú^hQß}†9cÓ‘]^«4’¿#llà £œ“’8®ŠÒÒ WÄvQ…n4ˆ¥_4gkîå¾´í¯õçþB¾—þº™ÙU)õ‡U´ÓÄlòÜ#ÈH<"®9?‰¸8íÍLj'[ÍJÎÏT†b2Àÿh(äÛÀ(WŒŽNy­¹‰½Oê¹ùc·{8²).GÕÉð›ér­­Žªy|‹y%òÞMŠ[dc,Øõ¥†O6äØé½Clq†\ö#Ö¼ú{m.Ú×ì0¬óE¸7 œ ¢Hõäóï]VŸ«ØÚévÐM>Ù!ÓÒæA±ŽØÂãwÛ§Z¦­ë¿ùíývÿ3j¸ÿ}öÿxÿ:é Õ,®n’Ú·Lð-®Ò38$~k›ðçßo÷󠿏(¢¸( \ÿ«5çþ"SöˆÏý4νq”5Çë¶eþ`2AÍtvªße‹å?tv©v·÷Oå^wâÛûf ioøTuägÿ}ð¤3Óö·÷OåFÖþéü«Ì?á>Ô¿ègÿ}ð£þíKþ€6÷Ñÿ ôý­ýÓùQµ¿º*óøOµ/úÙÿßGü(ÿ„ûRÿ  Ÿýô€=?ktþTmoîŸÊ¼ÃþíKþ€6÷Ñÿ ?á>Ô¿ègÿ}ð OÚßÝ?•[û§ò¯0ÿ„ûRÿ  ŸýôÂøOµ/úÙÿßGü(Óö·÷OåJªÛ‡¯¥yü'Ú—ýlÿï£þÂ}©ÐÏþú?á@•oÿѸ?•I^h>"êà4kp@$oð¥ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þè—–É{e=¬…„sFѱ^ ƒŠ[hÖÖt$¤HKuÀæ¼ëþ6±ÿ@{ûøßáGü,mcþ€öÿ÷ñ¿Â€;«%fÖ!ÔÖêâ¢Ê)Í®›·a²¤õˆ­ ó_øXÚÇýíÿïã…ð±µúÛÿ߯ÿ <€ôª+Íáckô·ÿ¿þÂÆÖ?èoÿü(³¸ÐîðMs}4"Q(µg_(09qó‚k\ò=+Íáckô·ÿ¿þÂÆÖ?èoÿü(é`;4ÑnRUs¯êŽ«y8>Çô­zó_øXÚÇýíÿïã…ð±µúÛÿ߯ÿ ôª+Íáckô·ÿ¿þÂÆÖ?èoÿü(Òª KH,mÄɲ ÌÁrO$’zû“^yÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@þ§§EªØ=œí"Å!]û€ ã§CŒj¶y¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•T.ô˜¯u[¹§œ­³oŽÀG¿Œdž}qí\'ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…wöt:p¸³·Ÿ;ÎÛÈ8fêJ©¨èKªHâ}Bùm¤dµÔFã¸?.î{àŠâÿáckô·ÿ¿þÂÆÖ?èoÿü(Ò6(Ë ¸qQÚÚÃci­´b8bPˆ çWÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Yh·ñ]Ü_ß]˜¼1Îë²6 Œ€ª2pHç5ÆÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP£Í–dx‹)Ó—ÜdŸ¨¬ëm&âÞá%}oQTäÇ/•µ¾¸ŒÖ¸ŸøXÚÇýíÿïã…ð±µúÛÿ߯ÿ ôª+Íáckô·ÿ¿þÂÆÖ?èoÿü(Ò©²F²Äñ¸Ê8*ÃÔóøXÚÇýíÿïã…ð±µúÛÿ߯ÿ ,=ÞÞ+Kh­à]±DrNš’¼×þ6±ÿ@{ûøßáGü,mcþ€öÿ÷ñ¿Â˜•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã… =*Šó_øXÚÇýíÿïã…ð±µúÛÿ߯ÿ ôª+Íáckô·ÿ¿þÂÆÖ?èoÿü(Òª¥ö m¼æ}¶ó,êªF—8ÝÇ@N~ Wÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þé$d’=ÅUÓtøt­>+8 ²GŸ™ÎY‰9$ŸRI5ÀÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð¥_ˆºÃcÛûhßá@“\‡WßïçUlücªÝ …ºgÝmhv†5ŽhÓÁ÷è†QLa‘T.¬Ä äV!Ð-q Ç!'`ª§ÃQ“÷å]ŽÀ{Q寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùR FÜ•v>ZúQ寥svÚDFV͵¨ˆ ¶Ôà  )h ÿÙnip2-8.7.0/doc/html/figs/ir4.jpg0000644000175000017500000002555213341773367013207 00000000000000ÿØÿàJFIFÿá°ExifII*JR(i‡Züÿÿ)( üÿÿ)( 0210‘ 0100 ÿÿ p 4ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀ4p"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?öíGýSWaÿ#…¿×úŠíµõM\Ešïñl ’7ddu(²–9–s4²…ds€pI u=©»¯çÖßÿÿˆ¦I ¼L§¹ÜFp'ò™‹oùë{ÿ|·ÿHdÛ¯çÖßÿÿˆ¥Š)š>}ŠBìDF,r@É8»T¶ÿž·¿÷Ëñ5"[Á"o[‰Ê÷>gO¯4Iql-æc,[l‘ ““ÈaÞŸæ_ÿÏÅ·þ·ÿU…¼Dd=á¡ñÚ>Í÷¯¿ï–ÿâhÏ™ÿ?ßøßü]eÿüü[à;ñu[ìðä-Ú“Óq+ŸÌRµ´*Û|ë’Ýp­“ù@<Ëÿùø¶ÿÀvÿâé¯J›˜#¬Ã.•Wû4Þ¾ÿ¾[ÿ‰£ìÑÿzûþùoþ&€-F‹i *(U€Sª¢ÛBÊXO>\ÉŒ~”‚Þ"2ðƒÐ€H?øí\¢©ýš?ï_ß-ÿÄÑöxr–íIé¸•Ïæ(å[ìQ“5ÇýüÿëR HÈÈ’ìPOøPª*¯Ùû÷™ÿ >É@2ÜŒôËcúPª*©´Œy×$úÉþT}‘?¿wùŸð  TU_²'÷îÿ3þ HˆÏŸqúéÿÖ  TUQi]‘ê ÿ >ÈŸß»üÏøPª*¯Ù#È[‘ž™lJSg™§wó?úÔfЦ-â#!ï=ƒÿŽÑöhÿ½}ÿ|·ÿ@(ªg‡ nÔž›‰\þb•­¡VÛç\–ë…lŸÈ ·ESû4Þ¾ÿ¾[ÿ‰£ìÑÿzûþùoþ&€%ŽÒg’tŒ -´,¥„óàu̘ÇéH-â#!ï=ƒÿŽÐÊ*ŸÙ£þõ÷ýòßüMg‡p[µ'¦âW?˜  ”UF¶…[or[®² )>Í÷¯¿ï–ÿâhåOìÑÿzûþùoþ&•m¡e,'Ÿ®dÆ?J·ESñ÷„„AÿÇhû4Þ¾ÿ¾[ÿ‰  ”U?³Ã ·jOMÄ®1JÖЫmó®Ku¶Oä[¢©ýš?ï_ß-ÿÄÑöhÿ½}ÿ|·ÿ@(ª‹m )a<øs&1úR xˆÈ{ÂB ÿã´rЧöhÿ½}ÿ|·ÿGÙáÈ[µ'¦âW?˜  ”UF¶…[or[®² )>Í÷¯¿ï–ÿâhåOìÑÿzûþùoþ&œ¶±8ÊÏpGûÿýj²Ã8ö`#Q˜äKƒ<*;(VÞ›§qêj´ÑÚ[ãλ–<ôÝ(Ò¢ótßúŸûþ?€4<Ëÿùø¶ÿÀvÿâèó/ÿçâÛÿÛÿ‹¬ÿ7Mÿ ‰ÿ¿ãü(ótßúŸûþ?€4<Ëÿùø¶ÿÀvÿâèó/ÿçâÛÿÛÿ‹¬ÿ7Mÿ ‰ÿ¿ãü)Dºq8‰'þ»ð  þeÿüü[à;ñt‘FcY·;¶÷lc'§NÜ? ˆYÆFD×ÿ®Ÿýj>Åüö¸ÿ¿Ÿýj³EVûóÚãþþõ¨ûóÚãþþõ¨Í[ìQÿÏkûùÿÖ£ìQÿÏkûùÿÖ  4Uo±Gÿ=®?ïçÿZ±Gÿ=®?ïçÿZ€,ÑU¾Åüö¸ÿ¿Ÿýj>Åüö¸ÿ¿Ÿýj³EVûóÚãþþõ¨ûóÚãþþõ¨Í[ìQÿÏkûùÿÖ®wÆ^%Òü£Ã©êcR–nº­±VmÅY²w1…=ý(«¢¼sþσ¿çÓÄ÷Ä?ürø_>ÿŸOÿßÿñÊö:+/K–×VѬµH$»H.íÒáŽu 3ŒŒàúÕoxAè@$üv€.QTþÍ÷¯¿ï–ÿâhû4Þ½ÿ¾[ÿ‰  ”U?³Gýëßûå¿øš>Í÷¯ï–ÿâhåCqiÖÏ:0ûFÏOj‡ìÑÿz÷þùoþ&³Gýëïûå¿øš¹ES6ñ’÷€z@øíÙ/vi€þ”Ï7Mÿ ‰ÿ¿ãü(NŠÌótßúŸûþ?Â7Mÿ ‰ÿ¿ãü(NŠÌótßúŸûþ?Â7Mÿ ‰ÿ¿ãü(NŠÌótßúŸûþ?Â7Mÿ ‰ÿ¿ãü(NŠÌótßúŸûþ?Â7Mÿ ‰ÿ¿ãü(NŠÌótßúŸûþ?Â7Mÿ ‰ÿ¿ãü(NŠÌótßúŸûþ?Â7Mÿ ‰ÿ¿ãü(NŠÌótßúŸûþ?Â7Mÿ ‰ÿ¿ãü(NŠÌótßúŸûþ?Â7Mÿ ‰ÿ¿ãü(NŠÌótßúŸûþ?Â¥Š;k€|‹ÉŽ»eÌÌÑwþðþB»{/õcé\BŒxšèdœ0äývö_êÇÒ˜ˆµõM\M‡üŽÿ_ê+¶ÔÕ5q6ò8[ý¨ ¾ åÖyÃÏû«þ5oåÇÝý+:'Ååçýtú× ã©åþ×-­EÍÑ´S Ž Õ?k¾’ÃC’$¼§÷ƒ‚¹äCðã9 “ksjúðÑõ êBê"â+r¨XƒËC…È`FHnAèÄzö>ÁpHé0ú‘QÛH±‹¹€Éö§úšeÓ±Ò® ˜ßä6ìtÎÓU§—ÊÓ5wþèsÿ–mÑäA1ñš<ù¯a ¹$-‚xÈëúÞÞ÷V€ê‹æX!ÌqÈ#1y¸á¹û¤c¶j+ÖZ\pî˜Û `[a>Íëb¼uÏ^i­wxÃ7“‘ë—#ù ¹$î%òâEw3nm Ó±ô?•P»oôãÿnÿú4ÔWóÌn/¢¶`³ý• dã†>n:ñÔ´€Òó.ÿç¿ýþ?üMGq/›§Ýn]¯6áœà‘Ïäký0_›ÉËý9  ‰ˆò$öRJЏ€ô2 ?B¢‹ c2€níËSîN?úíþ†´£šÆñŠ4ÿ À’^w“%!‹nòSó’:Š·¨êPé¶­<¹=•«·`?Ï$ð+Îoü6þ?½ûSÏ%²«î.®Šr"ŒB[.{ž…YÚäß[k«Zk¾þÓ²bÖóBÎ…†##Ü*µf~{“ßÌÿ_ñ5J>ÓGðÛéö1ùvÐ[º¢ç=‰$û““øÕ«FÃÝÿ×oý‘*FIy¨Á`¨Ó¶7g€É5SLñ–¯+GhÌûFXã\®¿ªÚ½ü×®›Î¶·flÙ$ØW©%”¶{aj÷€4vÒ<>;³ÜÜaäf\¥DjÆRp[¡ÛK›÷xûc.8o'#×.GòKÄÞ$—ï§?ös\ÚÜÜy3Ì% ä d6ÜýšµvßéÇþÝÿôi®{ÆÒK6¯á›8^Pó)9$"1ÏNÜúrTö«ªž0±ó#ómo­íäF·Ãå¦âp2 Ü2xäVÍéÂàõÄlÃêEq~6º±‚T¤Ad ùZg[æýàÆ:… ]ƶtk›©üñXL-œÝXpÇÜŒJWmÆÅ™ùîO0üuÄÕAâM,Çæ ¥+´¿òg¶ôÛ×=ºãžœÕ‹FÃÝÿ×oý‘+{¸‰.fFãqcqæägßü\ñŸZ¡äZÝ„÷ik¬fvuQå8§^qŒsÁèyÆqM»À¼aŽÉÈõË‘ü…rº ÂoÛ DŠWÏÛ’#oñãŽ;uí]=Û§ûwÿѦîîE¥œ÷,¥„Q´…GSœU \‹\²yãP¨bpGÔƒÁéÞ©êÓùº´7Lb±’=Á»Lù?!=°8ï“é\† '¶ÔŒzlÒ¶£,í"­£• x2® õã<ÐÆ•Þ§¤_c쎑³¨Ë3óÜžþ`øêÿ‰¬k2ë>¹¹™‹:¬‰¸õ8^þüÖ°šXmµ‚1,ÈÄÇ8ÜÂ5 gÜÐÕÇ(¸¶™¥â8tÍfÏO–?øø*<ÍÄ`± qŒu^äus[[«…½K[Ý&+¹nb‘ÚQ%ÙvªeÇðã8Ço痡뺞¯c Kw%…ìÅ 7.X²ð8É'Œ‚©7`Œy´;Û¼ ÆἜ\¹ÈUGR´Òld½¾™a¶‹ä`p2p:{š©vßéÇþÝÿôi«w1AuŠxÖHÉk Œƒ‘úŠb9ßøY~ *j,Â3 òßäÿ/Ñ]H’é³H¤2ùEÔ¦A¯"ð”³übñ|3G°\. lW ŒwW¬ÝlJ¹D*ÀÀÛå4&ìÏÏr{ù€ã«þ&§–háŒÉ#„EêÌpU´l=ßývÿÙ¸OR[}fîëS·{·†Q¼QÂdhò~]‹êTäŸn£Qp= d ŽþµNL ù@ã1£®XAXÔþçR‘¥i.|¸[øv\ã×æÜ öö­×9Ôeÿ®1ÿèO@ ¦¢=Õó²©a(PHä  ãõ5=¥þ›~Ò­Ý¥ËDvÈ!‘\¡ô8éXz¯Ú?áñ/ÙwyþT›6õÏ”:{Ö]”ºU¿ˆ|=6™%´vé¥J×/P« ´¹íóg¯½5«·õ×ü„ÿ¯ÃüÎÂòûNÓ‚ë«[Q!Ú†y7Až¦‹Ëý7OXÚöîÒÙd8C4Š Éæ¹‹ÇÓfñ­Ôš›Û=£hêÖí1 o0©TŠâbpyc6^]ûCÿÈaÿaHÿôT´óEQLGÙÞÿ’{áz>È¡D®¢îúÖÂ:òæxÆù¤¹úšå¼ qð÷Ãõãcÿ ÇWµû»¿Ó®b½µ‚òØÈaŠé7¤€€Ër8ätϽ!›V·¶·ÐùÖ—0ÜEœo‰Ã®~¢§ÍpÇ^Ú\X=¢­ßÛ–×vŸrbŽW+»>`^ääÍQ—RÔ`Ñ|Mgö¹#’Í¡ò.Úwˆ¾2<Âúg÷ÛúÛüÅäz>hÍrKq§ë gg©N‚ëN™Ì—S´‹ªT+üÄíûÇ `{S¼=sömM¬.–ð^4—¿k¨A°ÉÊœž˜-¯_òëúûΖîþÓOˆK{u´dã|Òú“DÚ…½ ºšêíˆLòBC“Åfx“ìòxwP3$lVÚR…À8;L÷ªÖ÷Úm¯„´ûCÊx¢·‹hewíÞçÒèþCìoZÞÚßÂ&³¹†â"p¿˜ª‘q €pÜ`ŠÎðå£Gs©Kvò_º¿Ùc ˆ•Fìq¼õ?—jЄæ묿úSbDÚDiý“jÛsÆŽ:’2M]ØŸÜ_ʪéò³ÿ®+üªå7bq*6'÷ò§Q@ ØŸÜ_ʉýÅü©ÔPv'÷ò£bq*u݉ýÅü¨ØŸÜ_ÊE7bq*6'÷ò§Q@ ØŸÜ_ʉýÅü©ÔPv'÷ò£bq*u݉ýÅü¨ØŸÜ_ÊE7bq*¥}%ŤСY¤d$£c~`~U~©jël¿ë¹ÿÑo@WüÍïä+¶²ÿV>•ÄÿÌÑwþðþB»k/õcé@j?ꚸ›ù-þ¿ÔWm¨ÿªjâ,Ûo‹`lÆNSÒ€:Pؾ¾çÌSm‹Yú5ÝÖ¤omõ{›WòÄacŽç8ž¼õ­¹ãŽåƒÉeu¼ nMÈqéEEö8?çÓPÿ¿ÒÿñT†b&v÷¶“ÞëWwkk!–8äH•w+Ÿ•èǽlïi²6©¶ö“úißcƒþ}5ûý/ÿSÄ )a?–ÙÜ »=rO_Æ€.³ÕHl-mîæº†Ú8çœæWUÁsÓ'Ö¢ò—µ¾ ¢Ë ðÝG”?熣ÿåÿâ¨ÍóãMºÉëîHÀ0GÂj6Ò ¤µ×<•1¨ÿ‰cEusizåN@‘ÝÀ>¸$ŒÓåÄϽ¬îƒã“rzd@-¾±Û¡hÊ8 %›?R²OÐ •ôòÆo®à’$u“dífS‘’]¸Æ: ”?熣ÿåÿâ¨ò‡üðÔïü¿üU:ê@nälŒ'ÙƒOÞ’B -å¥ÃÝ}¦Òx┠ı”G”äd÷îic+-ØÏ±³¸2»=rO_Æ£ò—µ¾ ¢Ë ðÝ@ýŸXÿŸÍ;ÿ_ÿT†ÜÙé7¾d¾dÓ+³¾1¹ÊíÃ…{w£ÊóÃQÿ¿òÿñT«+«›K×*rŽîõÁ$f€.ÎpŠO:èB‡Pà« ƒÔTFáØlç õ*=ǵµèö ãúÐË ,^X_ö¦´i¤ªƒh(Ýú’*=çþ}ïï§ÿá6—mƒ‘»sùšpÍ:œŸ‘íµhHÖ5!FëÎj”¹Üm.Aé•OéI¼ÿϽïýôÿã@ÇÆ0ƒ™#4œð¾VO§ÎMG¼ÿϽïýôÿãNYJ¡Aeqƒ×(N~¾´4ˆ²)GSÔS<„õ“þþ·øÔ[kkÑìÇõ£yÿŸ{ßûéÿÆ€%uX­%Uàlldç“ÿ×4^°#DI=†õ¨ƒá6—mƒ‘»sùš{NÎ¥ZÎvR0AN¢€+êšL¬‡›d[¿vµ_8ëß·b;ÕÈ£H"H¡c`èSò—µ¾ ¢Ë ðÝG”?熣ÿåÿ⨸X³|øÓn²zÄÀ{’0çKnØšñsÏœ=¶'ø¬±¢º¹´½r§ Hîà\FiòâgÞÖwAñɹ=2  è¼/a­& êó;3:$‡rÄX–m£¶I$ÖâðU(Ï GþÿËÿÅQåùá¨ÿßùøªuÔƒír6FìÁ§ïI?¡©ëž]_RÓo–îkY¬¥f/ùj0FÖõŸÌÕèÊÇ D¶3ìlî „îÏ\“×ñ¨ü¥ío¨è²Èü7P_‹¼'‹l¬÷RÛ€hÔ†Æzÿº+bHŦ‡,³¶ÜÆ©ÛúÔ~Pÿžýÿ—ÿŠ¥XÑ]\Ú^¹S•;¸×‘š³nØšñsÏœ=¶'øO³A¿g‹Æ6™Î?>j)q3ïk; øÆä܇™T~Pÿžýÿ—ÿŠ  ‹jáÄHwÉê«u 7r6FìÁ§ïI?¡›åùá¨ÿßùøª’2±ÂÑ-Œû;ƒ!;³×$õüh[ëXoíÞÞá7Æã‘Óàö>õCHЭ´1£2M4—šc¹Ûêjo){[êz,²? ÔyCþxj?÷þ_þ*€(éZ0ðï†n¬EÁœ#+´’Ãc'ØVÅ»bkÅÏ>p8öØŸàj²ÆŠêæÒõÊœ#»€}pI§Ë‰Ÿ{YÝÆ7&ä8ôÈ"’VÐm¶îʆ¬u+Ô¹—Ì_˜4‘£a%#¦áßç §j: ßêZMÚÍä:FqL‡uã «>Pÿžýÿ—ÿŠ£ÊóÃQÿ¿òÿñTÚ¸&Ö¨uÔ€ÝÈÙO³>Ÿ½$þ„¼ÌsTã+-ØÏ±³¸2»=rO_Æ£ò—µ¾ ¢Ë ðÝ@Š–~Ðôý@_ÙéVÐ] âHã yëÓêkRùñ¦Ýdõ‰€÷$`ΫyCþxj?÷þ_þ*•cEusizåN@‘ÝÀ>¸$ŒÐ›vÄ׋ž|àqí±?ÀÖ,¾Ò.®æ¸½·7¯,†Aöœ8Œž»xã°ú:Z’âgÞÖwAñɹ=2¨ü¡ÿ<5ûÿ/ÿ@-- ±!¶…"T`NFݨώqj}Ž\ãò#óª¾Pÿžýÿ—ÿŠ©¡!6Gep9$©$ŸRO$Ж—Z\^ ™£‡Ì2yŒpÚ÷› ~·K„4¨’ã>z D¹ë»{¯zwÚ¤òëqÿ|Qö¹çÖçþø4\¯‡¯!†¥ÒçŠyI(–—÷Åj“þ}.?EVûTŸóéqÿ|Qö©?çÒãþø  4UoµIÿ>—÷Åj“þ}.?EVûTŸóéqÿ|Qö©?çÒãþø  5ä¿´?üˆöÿEK^£ö©?çÒãþø®wÆ^²ñÆ™©Å©E WáZØ*¶à¬¸;”ŒaoJøæŠú;þ…¿ç·ˆÿïä_üjøP^ÿžÞ#ÿ¿‘ñªb;ß ¿|2Ä€‰$öc­ÛÛ+Kô yior€ä,Ñ+øTôËXô½ÏJŠÖêK{[t¶C*e™UBØÏÿ){[êz,²? Ô†Kýcö/±ý†Ûì¿óÃÉ_/þùÆ)M°Ž…,-V)‹…`:dcœv¨ü¡ÿ<5ûÿ/ÿG”?熣ÿåÿâ¨Ô–ðÌûå‚)aM΀§ªóØàqíQZiöZxaeemm¿ïyªnúàsQyCþxj?÷þ_þ*(Ï GþÿËÿÅP÷vV·ñïm ¹Nà³Äë‚*ì](Zý—û*ÇìåüÏ'ìɳv1»n1œw£ÊóÃQÿ¿òÿñTyCþxj?÷þ_þ*€'±Óìtâßb±¶µßþD*›±Ó84ëC¾ÕØrYH> »`Õc C[ê Pfƒøn« pÈ¡VÎp `Pšuõ¥¾o ÷PÅ,q…ty@ô5gûSOÿŸëoûü¿ãU>×'üúÜßµËÿ>·?÷Á  Úšüÿ[ßåÿ?µ4ÿùþ¶ÿ¿Ëþ5SírÿÏ­Ïýðhû\¿óësÿ|·ý©§ÿÏõ·ýþ_ñ£ûSOÿŸëoûü¿ãU>×/üúÜÿßµËÿ>·?÷Á  Úšüÿ[ßåÿ?µ4ÿùþ¶ÿ¿Ëþ5SírÿÏ­Ïýðhû\¿óësÿ|·ý©§ÿÏõ·ýþ_ñ£ûSOÿŸëoûü¿ãU>×/üúÜÿßµËÿ>·?÷Á  Úšüÿ[ßåÿ?µ4ÿùþ¶ÿ¿Ëþ5SírÿÏ­Ïýðhû\¿óësÿ|·ý©§ÿÏõ·ýþ_ñ£ûSOÿŸëoûü¿ãU>×/üúÜÿßµËÿ>·?÷Á  Úšüÿ[ßåÿ?µ4ÿùþ¶ÿ¿Ëþ5SírÿÏ­Ïýðhû\¿óësÿ|·ý©§ÿÏõ·ýþ_ñ£ûSOÿŸëoûü¿ãU>×/üúÜÿßµËÿ>·?÷Á  Úšüÿ[ßåÿ¯quÜö«o4syrs 60çì)Ÿk—þ}nïƒH׎ZÚàu Sþf‹¿÷‡òÛY«JâçÄ×Ge‡è+·²ÿV>”ÄE¨ÿªjâl?äp·úÿQEÙ UÜY¥™˜±l™X ´3œîl‹iíÃMÆ1™ÜôÛïÏݯ÷ŽJ) Ò5Û†›Œc3¹é·ßŸº?_ï‹iíÃMÆ1™ÜôÛïÏݯ÷ŽJ([H×nn1ŒÎç¦ß~~èý¼r-¤k· 7ÆgsÓo¿?t~¿Þ9( m#]¸i¸Æ3;ž›}ùû£õþñȶ‘®Ü4ÜcÏM¾üýÑúÿx䢀´vá¦ãÌîzm÷çî×ûÇ"ÚF»pÓqŒfw=6ûó÷Gëýã’ŠÒ5Û†›Œc3¹é·ßŸº?_ï‹iíÃMÆ1™ÜôÛïÏݯ÷ŽJ([H×nn1ŒÎç¦ß~~èý¼r-¤k· 7ÆgsÓo¿?t~¿Þ9( m#]¸i¸Æ3;ž›}ùû£õþñȶ‘®Ü4ÜcÏM¾üýÑúÿx䢀´vá¦ãÌîzm÷çî×ûÇ"ÚF»pÓqŒfw=6ûó÷Gëýã’ŠÒ5Û†›Œc3¹é·ßŸº?_ï‹iíÃMÆ1™ÜôÛïÏݯ÷ŽJ([H×nn1ŒÎç¦ß~~èý¼r-¤k· 7ÆgsÓo¿?t~¿Þ9( m#]¸i¸Æ3;ž›}ùû£õþñȶ‘®Ü4ÜcÏM¾üýÑúÿx䢀´vá¦ãÌîzm÷çî×ûÇ"ÚF»pÓqŒfw=6ûó÷Gëýã’ŠÒ5Û†›Œc3¹é·ßŸº?_ï‹iíÃMÆ1™ÜôÛïÏݯ÷ŽJ([H×nn1ŒÎç¦ß~~èý¼r-¤k· 7ÆgsÓo¿?t~¿Þ9( m#]¸i¸Æ3;ž›}ùû£õþñȶ‘®Ü4ÜcÏM¾üýÑúÿx䢀´vá¦ãÌîzm÷çî×ûÇ"ÚF»pÓqŒfw=6ûó÷Gëýã’ŠÒ5Û†›Œc3¹é·ßŸº?_ï‹iíÃMÆ1™ÜôÛïÏݯ÷ŽJ([H×nn1ŒÎç¦ß~~èý¼r-¤k· 7ÆgsÓo¿?t~¿Þ9( m#]¸i¸Æ3;ž›}ùû£õþñȶ‘®Ü4ÜcÏM¾üýÑúÿx䢀´vá¦ãÌîzm÷çî×ûÇ"ÚF»pÓqŒfw=6ûó÷Gëýã’ŠÒ5Û†›Œc3¹é·ßŸº?_ï‹iíÃMÆ1™ÜôÛïÏݯ÷ŽJ([H×nn1ŒÎç¦ß~~èý¼r-¤k· 7ÆgsÓo¿?t~¿Þ9( m#]¸i¸Æ3;ž›}ùû£õþñȶ‘®Ü4ÜcÏM¾üýÑúÿx䢀´vá¦ãÌîzm÷çî×ûÇ"ÚF»pÓqŒfw=6ûó÷Gëýã’ŠÒ5Û†›Œc3¹é·ßŸº?_ï‹iíÃMÆ1™ÜôÛïÏݯ÷ŽJ([H×nn1ŒÎç¦ß~~èý¼r-¤k· 7ÆgsÓo¿?t~¿Þ9( m#]¸i¸Æ3;ž›}ùû£õþñȶ‘®Ü4ÜcÏM¾üýÑúÿx䢀´vá¦ãÌîzm÷çî×ûÇ"ÚF»pÓqŒfw=6ûó÷Gëýã’ŠÒ5Û†›Œc3¹é·ßŸº?_ï‹iíÃMÆ1™ÜôÛïÏݯ÷ŽJ([H×nn1ŒÎç¦ß~~èý¼r-¤k· 7ÆgsÓo¿?t~¿Þ9( m#]¸i¸Æ3;ž›}ùû£õþñȶ‘®Ü4ÜcÏM¾üýÑúÿx䢀´vá¦ãÌîzm÷çî×ûÇ"ÚF»pÓqŒfw=6ûó÷Gëýã’ŠÒ5Û†›Œc3¹é·ßŸº?_ï‹iíÃMÆ1™ÜôÛïÏݯ÷ŽJ([H×nn1ŒÎç¦ß~~èý¼r-¤k· 7ÆgsÓo¿?t~¿Þ9( m#]¸i¸Æ3;ž›}ùû£õþñȶ‘®Ü4ÜcÏM¾üýÑúÿx䢀´vá¦ãÌîzm÷çî×ûÇ"ÚF»pÓqŒfw=6ûó÷Gëýã’ŠÒ5Û†›Œc3¹é·ßŸº?_ï‹iíÃMÆ1™ÜôÛïÏݯ÷ŽJ([H×nn1ŒÎç¦ß~~èý¼r-¤k· 7ÆgsÓo¿?t~¿Þ9( m#]¸i¸Æ3;ž›}ùû£õþñȶ‘®Ü4ÜcÏM¾üýÑúÿx䢀´vá¦ãÌîzm÷çî×ûÇ"ÚF»pÓqŒfw=6ûó÷Gëýã’ŠÒ5Û†›Œc3¹é·ßŸº?_ï‹iíÃMÆ1™ÜôÛïÏݯ÷ŽJ([H×nn1ŒÎç¦ß~~èý¼r-¤k· 7ÆgsÓo¿?t~¿Þ9( m#]¸i¸Æ3;ž›}ùû£õþñȶ‘®Ü4ÜcÏM¾üýÑúÿx䢀´vá¦ãÌîzm÷çî×ûÇ"ÚF»pÓqŒfw=6ûó÷Gëýã’ŠÒ5Û†›Œc3¹é·ßŸº?_ï‹iíÃMÆ1™ÜôÛïÏݯ÷ŽJ([H×nn1ŒÎç¦ß~~èý¼r-¤k· 7ÆgsÓo¿?t~¿Þ9( m#]¸i¸Æ3;ž›}ùû£õþñȶ‘®Ü4ÜcÏM¾üýÑúÿx䢀´vá¦ãÌîzm÷çî×ûÇ"ÚF»pÓqŒfw=6ûó÷Gëýã’ŠÒ5Û†›Œc3¹é·ßŸº?_ï‹iíÃMÆ1™ÜôÛïÏݯ÷ŽJ([H×nn1ŒÎç¦ß~~èý¼r-¤k· 7ÆgsÓo¿?t~¿Þ9( m#]¸i¸Æ3;ž›}ùû£õþñȶ‘®Ü4ÜcÏM¾üýÑúÿx䢀´vá¦ãÌîzm÷çî×ûÇ5¯líã’3)>t1üó9á¤Oñzçœî9( oþf‹¿÷‡òÛY«J(¦#ÿÙnip2-8.7.0/doc/html/figs/snap6.jpg0000644000175000017500000015304613341773367013540 00000000000000ÿØÿàJFIFÿá°ExifII*JR(i‡Züÿÿ)( üÿÿ)( 0210‘ 0100 ÿÿ ã ÿÛ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ä Bàw¬ëÝJH^Y¥HãA–f8{šä'ø• £•[æou‚F˜\Pæ/­bú×›Ÿ‰z/üýÉÿ€òñ4ÂËÑçêOü“ÿ‰ HóÖ1}kÍÿáeè¿óõ'þÉÿÄÑÿ /FÿŸ©?ðOþ&€=#Ì_Z<Åõ¯7ÿ…•£ÏÔŸø'ÿGü,­þ~¤ÿÀy?øšô1}hóÖ¼ßþVÿ?Rà<ŸüMð²´oùú—ÿäÿâhÒ<Åõ£Ì_ZóøYZ7üýKÿ€òñ4ÂÊÑ¿çæ_ü“ÿ‰ HóÖ1}kÍÿáehßóó/þÉÿÄÑÿ +FÿŸ™ðOþ&€=#Ì_Z<Åõ¯7ÿ…•£ÏÌ¿ø'ÿGü,þ~eÿÀy?øšô1}hóÖ¼ãþNÿ?2ÿà<ŸüMð²tùù—ÿäÿâhÑüÅõ£Ì_ZóøY:?üüËÿ€òñ4ÂÉÑÿçæ_ü“ÿ‰ GóÖ1}kÎ?ádèÿóó/þÉÿÄÑÿ 'GÿŸ™ðOþ&€=Ì_Z<Åõ¯8ÿ…“£ÿÏÌ¿ø'ÿGü,þ~%ÿÀy?øšô1}hóÖ¼ãþFÿ?ÿà4ŸüMð²4ùø—ÿ¤ÿâhÑüÅõ£Ì_ZóøY?üüKÿ€Òÿñ4ÂÈÒ?çâoü—ÿ‰ GóÖ1}kÎ?ádióñ7þKÿÄÑÿ #HÿŸ‰¿ð_þ&€=Ì_Z<Åõ¯8ÿ…‘¤ÏÄßø /ÿGü,#þ~&ÿÀiøšô1}hóÖ¼çþ>‘ÿ?à4¿üMð±ôùø›ÿ¥ÿâhѼÅõ£Ì_ZóŸøXúGüüMÿ€Òÿñ4ÂÇÒ?ç¼ßø /ÿEÀôo1}hóÖ¼çþ>‘ÿ=æÿÀiøš?ácé?óÞoü—ÿ‰¢àz7˜¾´y‹ë^sÿ Iÿžóà4¿üMð±ôŸùï7þKÿÄÑp=Ì_Z<Åõ¯9ÿ…¤ÿÏy¿ð_þ&øXÚOü÷›ÿ¥ÿâh¸æ/­búלÿÂÆÒç¼ßø /ÿGü,m'þ{Íÿ€Òÿñ4\FóÖ1}kÎáci?óÞoü—ÿ‰£þ6“ÿ=æÿÀiøš.£y‹ëG˜¾µç?ð±´Ÿùï7þKÿÄÑÿ Iÿžóà4¿üMѼÅõ£Ì_ZóŸøXúOü÷›ÿ¥ÿâhÿ…¤ÿÏy¿ð_þ&‹èÞbúÑæ/­yÏü,}'þ{Íÿ€Òÿñ4ÂÇÒ?ç¼ßø /ÿEÀôo1}hóÖ¼çþ>‘ÿ=æÿÀiøš?ácéóñ7þKÿÄÑp=Ì_Z<Åõ¯9ÿ…¤ÏÄßø /ÿGü,}#þ~&ÿÀiøšôo1}hóÖ¼çþ>‘ÿ?à4¿üM'ü,#þ~&ÿÀiøšô1}hóÖ¼ãþF‘ÿ?à4¿üMð²4ùø›ÿ¥ÿâhÑüÅõ£Ì_ZóøYGüüMÿ€Òÿñ4ÂÈÒ?çâ_ü—ÿ‰ GóÖ1}kÎ?ádhÿóñ/þKÿÄÑÿ #GÿŸ‰ðOþ&€=Ì_Z<Åõ¯8ÿ…‘£ÿÏÄ¿ø 'ÿGü,þ~eÿÀy?øšô1}hóÖ¼ãþNÿ?2ÿà<ŸüMð²tùù—ÿäÿâhÑüÅõ£Ì_ZóøY:?üüËÿ€òñ4ÂÉÑÿçæ_ü“ÿ‰ GóÖ1}kÎ?ádèÿóó/þÉÿÄÑÿ 'GÿŸ™ðOþ&€=Ì_Z<Åõ¯8ÿ…“£ÿÏÌ¿ø'ÿIÿ +FÿŸ™ðOþ&€=#Ì_Z<Åõ¯7ÿ…•£ÏÌ¿ø'ÿGü,­þ~eÿÀy?øšô1}hóÖ¼ßþVÿ?2ÿà<ŸüMð²´oùú—ÿäÿâhÒ<Åõ£Ì_ZóøYZ7üýKÿ€òñ4ÂÊÑ¿çêOü“ÿ‰ HóÖ1}kÍÿáehßóõ'þÉÿÄÑÿ +FÿŸ©?ðOþ&€=#Ì_Z<Åõ¯7ÿ…•£ÏÔŸø'ÿGü,½þ~¤ÿÀy?øšô1}hóÖ¼ßþ^‹ÿ?Rà<ŸüMâ^‹ÿ?Rà<ŸüMzHp{Ò‚ yÜ_ô"ÀÇ[y?øšêôÍn×R·YígI¢nŒ‡?‡Ö€6¨¦#îú(¢Š*­Ô›šµYz›í‰¨ɾ(ê²²ÙÙ+‘Œîà»qŒÿßYüy¾êë~"J_P´ç “ÿe®3uK6ê|qË0Å’×|…¶Åõ8è=ÍVÝ]7†¼U‡esm=¡¸¶T…OÏ$œ…ë‘ÇJç÷Qº»­I‹S³ð½àÓaœIw?ÛmÔƒóy˜=3ÅGb¶:~“¨]¶“§Ý?öáµæá#8á}1Ú‹koë§ù‡Ÿõ×üŽ'u«¾²Ò´ë_ëšzéblc<œsÇZ¡ñœêúyxDtØwD«´!Ë| vÇLPö_×AÛs™ÝFêô[-GÔ´Û}A­íbþѲ[(QbPëçËØü£ž´ÇÓ´øgÕRÇH´¿¾Òm`…-Ì;–W?ë$e¹ŸÞ—þ¿®Ÿx–¿×õý#ÏwU¥Óî[I}P*ý•&ÝÎò3Óé]Âé:l$y_KµWþÅ7²ØÈ›£Šn8Úzj††»áÙ[P·´·ŽMPí¡O*D»Sà××ñ¥ý~6ëð¹ç[¨Ý]‡mãŸZÕ Ô4HVðºÇüKÌÖÖÍ“ò”^(k©|9¡Å›–ϧÀøÛ’Ñ6@ÛætQÓsO}ƒ©ÆÀÍ[Ôl.´›Ö³¼@“ª« ŒŽEwö‰ioáR9¬mòÅ!+qm`mÁ$€på™Ç^Ÿá¡â+T¾¼Ö’ûH·K[}ëV²ùbSn±ª ^¯É8êN&¹Ý.ÛO»’EÔu_ìäP 7Ù^mçÓ x§mZK•·SàŽK›ˆà… Ë+EÄÄà ×ð•¥¥ß,í&Tºµ2H?xŸ,€+JŸ 85·,VZ…¶ƒ©®›gi3kÖDµ‹dn¸Êúñüè]?¯!>¿×õ±ÇÜÁ5Ô¶×1˜ç‰Š:Ò>œQmmsy!ŽÖÚ{‰ÉHcg zà]ûÙÇ ÝÕ§‡í5+•ÖZ–¾nØð Àw“× ÍU%Ô>0Õ¬´kÛ«-.ßË–ëì¬Å‡ËŠ’r[ü1Ikk”Õ¯oë[3‡ŠFŽDdu8epAЃғuiøªþ}GÄwWsÙÍfdÛ¶)«í{œV6ê¨6ê7T;¨Ý@‰·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›u&ê‹u#1Øq×¥g¦^ß§™ "Eœ•°Ó¹¨ïlo4ò¾z.Æ8‡*O¥o‹‡F–Â2Š ÎW¶0 A};>™p—ÈH ņ{u½bZ[]_Jc·Œ1y‰À_©«Wz>¡g •Ö)FXÄÄíà⥲™bÑ@St ÈÁ¶Ÿ¾QÓŠ· ÌIz‚ ƒ"˜Ûpó‹Ž«Ž¤ûÐ qu:Ao’G8U^õ¶ÞÕÖ0}•ÛêÖ_›õýi<:ÑC}|É€GËû»Ž’ÖŒWwkÞ²o;¨ÜÇѽ®p?à\Uñ2„ÜcÐõð˜ u)*“o^Ç(Û‘ÙJ:œ2°ÁÒ»?‡œ¶ºÜ¶ÁÏ“,eŠçÀŒÈšæüDèÚ±uÆæKÿ½ÏôÅ\ðd…|B„pÿJë¥>x©w<Úô½•ISìÏ¢¬fó#5 +GrЭmŽ•©ˆ´QE¥djßê[éZç¥cêßê[é@ñÿÄÂÛþÿ²×ººÿˆñÿmÿÿÙkŒ¤ÆIºÕ8êiÌŽ˜ÞŒ»†á¸‘ê=©n×T¿²FKKû«tc–Xfd õóL×BºœDdóJy‡iïc?{ß­U¢€4YÔâšY£ÔïRYqæH·ñÓqÎOãM·Õu 3!µ¿»€Èræ)Ù7SƒÍQ œ д¾ºŽYeŽêt’`VWY¨cžA÷¢ÖþîÅËÙÝÜ[; †VBGÔªÁ‘ö8*ãøX`þT™  qê‘]¨îîå²LË+9ëóg4Û‹Ë‹É|Û«‰§—ß3—l}MV¢€-%õÔqÇ]N©ù‘ªÈÀ#ÿx ð}Ç4±ßÝÃt×Q]ÜGrÄ“2JÁÉ=rÀ皨N:œQ@Æ¡x³Ë:Þ\ ¥R²H%mÎPÇ9 ûÓVòá-þΗ,ÄžPrpþ,tϽV¢€4W[ÕRi&MRùe—d‹ráŸ2s“øÕë_]Ùx~m2Ù§Šin¾Ònã¸eº^99ÆsšÀ¢€.A¨ÞÚLó[^ÜÁ+ýù"••›êAÉ¥òÝ›µ¾ºG¬âfóü 9ªTPøõmF+™.cÔ.ÒâO¿*ÎáßêÙɪÒM$Ò´²ÈòHÇ,îÄ–>¤žµG(Ί.70ž™=¨txœ¤ˆÈ㪸 ÀзUí ϱýí—e'>GšÞ_¯ÝÎ:Õ Aèihüº¾£=·Ù¦Ôo$·ÀSÎì˜>RqI>«¨]@ ¸Ô.æ„tŽYÙ”~â¨Ñ@êxà’žU†\y‘«¯Ž™=ê=Õb ©­fY­æ’WîÉ•aÛ‚9ñv±¤kwp9<ÔQ+a_ûÀg†÷ëU™1½w Ãp##Ô{Sh¡ƒÅwÖÚ ú|RÜ¥Ä×_ikŹ`çå©îsŒç5™oªê#Zêp4§2§d.}N=OZ£EZ¹½¹½›Î»¹šâ\c|Òlzdš‡uGEIºÕ&ê7TtP›¨ÝQÑ@n£uGEIºÕ&ê7TtP›¨ÝQÑ@n£uGEIºÕ&ê7TtP›¨ÝQÑ@n£uGEIºÕ&ê7TtP›¨ÝQÑ@n£uGEIºÕ&ê7TtP›¨ÝQÑ@n£uGEIºÕ&ê7TtP›¨ÝQÑ@ Ô%pÊ:qŠI¯^ãØÎvŽõJŠ» Û[±1¿ªš–]RiWní™ï’MfÑ@ ¹ì¯›xéÛÐÕöñ›‘÷²OéëXTVU(S¨ï5s¦Ž2½¸Ó•“'–fšFwbYŽI=ësÁ§> O÷ô®rºÈŸîéZ¥mÌÛnìúDÿR¿Jß+DÿR¿Jß*„-Q@éXú·ú–úVÁéXú·ú–úPƒ|CÿûoøþËY~‚ ïïLéhÞ]Œ²#]Ä$c A§ÐÖ§Ä?øÿ¶ÿÿìµËØêéæäĨßhàmàœ+u#ž´ŸPìnD­q>£¶îÀyzlŒ[K·X‘Æáò°1®,ôæ­M¤.¯}f$r°ÛèðÌádD-€PÎv®Išæ,¯å°"%CöˆÜ H'üUèüGyÛ¿•lþU·ÙX:&‹²¸Ï8õ-xÄ“@tÛ ,äq(µur‘¾1¹Níà sóQö¯ýtÚß×SkÄQ¹ñT‹<ª‰,Æ6í|ç¸ÏÄVwŒ#Óá×·šL8.¾_A÷T(+ø“Tîõë«Ã©Rý èÒíR6í'yã¯|Ó5Maõm=¥ª\ y—«—78íØ ”´_×b¯©[:T_èú¡†3y ¨$Ú7Ÿ}3×Nì³XÕkN¿›LÔ!½·Úd‰²Œ«„Ü~µ^B:K 8­ï´KÏÙïZ nn."Uóô%S$ÇûF£Òü/iq§Ù\^Ü4fð±WPD°(b¡™\î~A8\qïY ®]uõr#k—f$vÀ®Ï@ö¶úãÇa•Å•äQ0›„bÑg“‚¬8Ï89¼ÀÔÓü-k}s§w"[O¾|¡”ì•X ã¡-^ÍÖ²5 5,4û¤WG’6ÆCm\qœ’­úQµyo£K¥ÆTA$¢RØùàC…'ýÑMÖ5{oPkÛ¡‘”.ØÆ;×êi¿ëúþ¶…tž¹FvòØiÓ¬6sÌ­5œnû•Ib¹<ö®n­ØjéÏ3¨Æh^Þ Â°ÁÇ=hèÅÕBÃM¸[ õ6–õ#˜ÖÆ(⊠°»~lN>¹¨N‹e§[M6¯%Ëm»{DKBªILnbX9çÔU{/ÜY[A µ´¸6Ì^ÚIã,ÐsòòçœFi¶ºôðE,7ö×ÑI/žRé 'v ä÷ìhôþ¿­GëýZ“éßÙZGˆ¬Ä¾j$–¬ŒnV%”‘ØàŠ—Æú\vwóÞ\<¾}ㆶXñ°"¨ XrsÆÑ‚:žÂ±^¼›ûGÏMý¡7zô*r¥qŒc·lv§Þx†òý/c¸HZ;§Y m8‰Ô¹9à0zä~—õø¿}me ñ!ÔEÍç•5°†D—‹að«èö‡Ã«¨@——R•c#E*m¶Ã` inœîàsLÿ„–å¯/§žÖÒt½ÛçA*6ÂWõïQA­µ­¤ÐÛXYE$±¼Mpªûö7QËmèqÓ8¢ÚÜÊ«zTi.±eˆ®q²°È °È"ªT¶Óµ­Ô7xdPÝ <ÕE٦ɒºilzŠxƒVÍÞ—aÈÀÈîzb±"Ö."Ôî¯Õ"2܉C‚Ñæÿ´qRI®=Å‚[\ÙYÜ £! G ƒZ:_ˆ‘ ­}³´Ö´ˆ4lDܪø>™ç­dj:¬ºˆ 0[Á•Š„Lœž¤’IêI4=ÿ®ïþ–ß×dQ¢Š)€QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEWCàÏùSýÃý+ž®ƒÁŸò0Çþáþ”ô&‰þ¥~•¾:V‰þ¥~•¾:UZ(¢€Ò±õoõ-ô­ƒÒ±õoõ-ô =Óôû=SÇÚ^ÛCq ÚÌv˸4g pxÆ}Ív¿ðƒøPuЬïÕrZü”‹cÿN³ÿ4®ÇW×ãÒuK i¢‘¢ºY xãyvŒ*‚NsHÿáðŸý¬ïÕðƒøOþ€V?÷ê­\ëúuÌv÷IÉ·k4ËtöíúY‡ÅVÖ:þ©g©\yPÀbòˆ…ˆPË’Y€ ÷8§`,ÿÂá?úXÿߪŠçÁž‚ÖYáÐìD¥ùX à‚ X×uñ£[Å*YMt$eÓˆÐ3É~ø$þµ¥|â[t?é‹ÿè&‹•ÿ¯‡è¥ÿàáGü"¾ÿ —ÿ€qÿ…kÑHfGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ©4ÑÛÁ$ò¶ØãRîØÎ&¹ûíBëÈR]¬)…ñæÀ ›yùsÆêƽxÑ‹”„Ùsþ_ÿÐKÿÀ8ÿ±Ýiÿ?PßÁGÛ­?çêûø(z*·ZÏÔ÷ðQöëOùúƒþþ žŠƒíÖŸóõýü}ºÓþ~ ÿ¿‚€'¢ ûu§üýAÿn´ÿŸ¨?ïà  è¨>Ýiÿ?PßÁGÛ­?çêûø(z*·ZÏÔ÷ðQöëOùúƒþþ žŠƒíÖŸóõýü}ºÓþ~ ÿ¿‚€'¢ ûu§üýAÿn´ÿŸ¨?ïà  è¨>Ýiÿ?PßÁGÛ­?çêûø(z*·ZÏÔ÷ðQöëOùúƒþþ žŠƒíÖŸóõýü}ºÓþ~ ÿ¿‚€'¢ ûu§üýAÿn´ÿŸ¨?ïà  è¨>Ýiÿ?PßÁGÛ­?çêûø(z*·ZÏÔ÷ðQöëOùúƒþþ žŠƒíÖŸóõýü}ºÓþ~ ÿ¿‚€'¢ ûu§üýAÿn´ÿŸ¨?ïà  è¨>Ýiÿ?PßÁGÛ­?çêûø(z*·ZÏÔ÷ðQöëOùúƒþþ žŠƒíÖŸóõýü}ºÓþ~ ÿ¿‚€'¢ ûu§üýAÿn´ÿŸ¨?ïà  è¨>Ýiÿ?PßÁGÛ­?çêûø(z*·ZÏÔ÷ðQöëOùúƒþþ žŠƒíÖŸóõýü}ºÓþ~ ÿ¿‚€'¢ ûu§üýAÿn´ÿŸ¨?ïà  è¨>Ýiÿ?PßÁGÛ­?çêûø(z*·ZÏÔ÷ðQöëOùúƒþþ žŠƒíÖŸóõýü}ºÓþ~ ÿ¿‚€'¢ ûu§üýAÿn´ÿŸ¨?ïà  è¨>Ýiÿ?PßÁGÛ­?çêûø(z*·ZÏÔ÷ðQöëOùúƒþþ žŠƒíÖŸóõýü}ºÓþ~ ÿ¿‚€'¢ ûu§üýAÿn´ÿŸ¨?ïà  è¨>Ýiÿ?PßÁGÛ­?çêûø(z*·ZÏÔ÷ðQöëOùúƒþþ žŠƒíÖŸóõýü}ºÓþ~ ÿ¿‚€ Ûo¶X\ZïÙçDÑîÆqFqø×!«ÛÏ¤Í ËqÂevb(AR¾¬s÷¿JëþÝiÿ?PßÁUîN“y·í_bŸnvù»ëŒ×.+ ñ³ß£F“¥Ï¨ÛÛߨÒ/?w–!$‘œ Û»íôïV|eÿ?õø¿úÖÄ3éöñ,PKkkÑ•@übø¶HæÓlš7W_µ¯*r>ãÖ”(FŒyb XÓÑ?Ô¯Ò·ÇJÀÑ?Ô¯Ò·ÇJÜ¢Š(=+VÿRßJØ=+VÿRßJã¼:?âµSéƒô¯@® Ãþ*ò}‡þ:k½ ˆ?{æë¹‡ÄéEŸñîë£ÿèF€T ‰Ø¯J˜ÔÒw,kÏ|cñUðìvBÖI%¹Pø•€6!=woÒ»äÿX>µó¿Å Êꌭ‘¤O…H­@‚ÝFÒœœïcÆ9MÙ —ÂûΣñ?_´ð¤Z¤Vö pÓe1IµW’7ç¨ê≵·ŽêÏNa_ßG ž œwê;{׊KPk !’âi`oùd“Žù‰dä‘íŠé5—mÁ°XÉ•º¹?:‡iêÀãïÀã¾ Ey=#+ §­Ž²ïãÖ¬“\­½¶šÈ’’´†sØpG½O§|l×oÙ-´åÜ¥”¤Rq’‡¿$þ™ñ¸n¦PàŠh Š@pÀòAÜ3Žv}ë¬Ò¢{ækˆãKdy$Püá28œœç95ºåå·R÷=“Hñþ±}i,·)c€6"Ç'Ìsƒü]€=ý=jÿü&šŠ¨gK`|7>¿Å^\ºæ![kQù~cò@Æ2½}ç×¥jX0Ki®n]¤]€)'sÓΰœìzØí?á;Õç¯ýòßüUðê¿óÆ×þùoþ*¹Š+Q?ü'z¯üñµÿ¾[ÿŠ£þ½WþxÚÿß-ÿÅW1Etÿðê¿óÆ×þùoþ*øNõ_ùãkÿ|·ÿ\ÅÓÿÂwªÿÏ_ûå¿øª?á;Õç¯ýòßüUsPOÿ Þ«ÿµÇjúŒšu†šÑÍmåDÒÜ ¢s÷‡§­sâ*r$í}KŒy®xƒ|7y.·ú…•Ä0Û‘ ó£)¹ÿ„sއžãŒµ?‰­5M[^ÒÆñmíÎØ± Hà•ÆG''?J÷=x½™’dn ›AòÜqœ¦ãŒuÎN8<ÔÿÛÐ4P´6÷3M.ü@Š®Ã†Ý’Áã¯Ó5Æñrçæpüà¨.NTÏŸ­´Qå†(ôfIIEÎŽUH?x‚ ãF0¿\úFáØå‘íüè"XP´ÝI†v9ÉÇ~¾½¢ëÖÄ›ó˜šÚ)R,d—b䱆©cäïîmçÿ=ŠîrÔWc§_]\ßß[ÜÁB›¶ã†òzgŽß­Is©‹[¸à–Úp’0DŸ c,F@ëžÞ˜¤ó¹?øögEvZ.¡6¥¦Cs=³ÀΊÙ;v¾GUî f6³v–—Mq1ÝÊïæO tŠ<£å+íÉ=ÍRÇJíríçÿ^ÅZ÷0(®«SºÔ­­à–ÒâÉÚR‘¢5»1ÏpCð¸ç¾=jµÏˆ%µÕ Õ&Ž!²%”6>uç -Ó¡æœqÒ–Ñüà ÒKvsÔW<†+ydQ–D,:àVN›«™4Éo.îí¥òÔŽY6ÇÝ ±$ô¥BÌWPüàè[©ËQ]ø‚æ=1¦¸·At×moQ«0çœN9Àçb FW¸Ó¤ûLsÃu¾&òã(ƒ,HáXO_J·Ž’Þü}’îr´Wu}Ÿjg•]†å@©Œ³1À:žæ©ÿiH.¥f»gXCkˆ\³ î-ŒñÏ8À¨YƒjüŸü u9+¬OÃ-­¼ÑÙÞ;ÎÒUÞQz·ÞÆ9県T·º˜]ßZÆT_$‘üN@\©þ¿+Û“ñÿ€/b»œuÕ]j“ÚßYYDoÞ$w3?mÀããqÆ}‡ÔRFî?¥„¦ŠEf‰Ð¨# NóÈ^”þ¿/åüà±]ÎRŠêômJ{ùe\ÛnBÙ¶HY$A¸€I,r0=XÖof±²Ya(¬eT/$eÕžIƒÀ÷¤ó¥ËËøÿÀc¥îq”WRúäŸd·²žÊy¦‰æ3ìo,ª1<–û¥Cqªêé–—ÖOj¦è"¤ÂÎÅÛ¨Üp9=:T±ÏùøöK¹ÎQ]•ÄßÚ7¶s¸sÉclcå`xü ·áŠÐ¬Þegðþ?ð T/ÔóÊ+Ðè¥ý§ýßÇþ}_ÌóÊ+Ðè£ûOû¿üú¿™ç”W¡ÑGöŸ÷øõ3Ï(¯C¢í?îþ?ðêþgžQ^‡EÚÝüàÕüÏ<¢½Š?´ÿ»øÿÀ«ùžyEziÿwñÿ€Wó<òŠô:(þÓþïãÿ>¯æyåètQý§ýßÇþ}_ÌóÊ+Ðè£ûOû¿üú¿™ç”W¡ÑGöŸ÷øõ3Ï(¯C¢í?îþ?ðêþgžQ^‡EÚÝüàÕüÏ<¢½Š?´ÿ»øÿÀ«ùžyEziÿwñÿ€Wó<òŠô:(þÓþïãÿ>¯æyåètQý§ýßÇþ}_ÌóÊ+Ðè£ûOû¿üú¿™ç”W¡ÑGöŸ÷øõ3Ï(¯C¢í?îþ?ðêþgžQ^‡EÚÝüàÕüÏ<¢½Š?´ÿ»øÿÀ«ùžyEziÿwñÿ€Wó<òŠô:(þÓþïãÿ>¯æyåjÃÿ [úüý+®¬¯ǵŸývoä+jßm>N[|É.U{‰þ¥~•¾:V‰þ¥~•¾:Wyˆ´QE¥cêßê[é[¥cêßê[é@Ÿ†ÿäko÷Oþ‚ÕÝ× á¿ùÛýÓÿ µv:Ž¡™c%ÝÁ;pV=€÷4j£ŽG€2y/"î, Ü眑ëTô}ZbÁncRŽÙ"'&6ôÿëúUÈmâI‘dbìñ$p? Stßóç9üSÿЍšáÏü¹\~qÿñU1±³ïiýûáPÉed?åÎßþý/øR&’áYʯü-+&Ð}ðÄþ•Ëk¯¥ÛÝÚ[\ê––íg">Ù¤P[ã'¼ tÍahüGP¿ðÉe> Šð¿¿Ú|_w3¾X f8îaJO õŸrö¶¿×ÞiM´Îù´[;Û°^[Kl. ŰhÖXÓ †\g ¹,{cð¨o"û¶qéÒZý¾8¤Ý¼q"ØŒŸ-¤R@äÏ֗÷ŸoðýÁ21v”å™—åbNNrA9ëÏ5WZt°ÕôÛ÷{xamöÓÈã †—Ÿ@ÉߦO©5òïQMÁ­Uôô uùª(ÉZåë} >à rßF“­´˜;^6,¯#'§µñØÍqëëvw›4¼l¡[dev¨Üq€Ù<šÊ¹ñF—š±K%ÛÅ‚RÚ3&sèGËúö=ø¬? ØÍ<·q[0ÿDœ‘oz„áX|„€6’pyߦ+³OˆŒ§V.+£¶ÿy½iÒ„”!$ßkêwf:2æÆçP€%ÓÌÙ2*Ÿ‰ döÜ*“ÛÚOºKÍzÒY±£®Ô ˆáún9'søV&¹gr-Ú{›T…Ïî¶FÒ¸õëòŽÃùç ¢b¿tû UÓ£>X³jTÕH]ž‰æ™o5ü©¬ÙºpË™Wä!ÿ{ž™íYÐXè–«bðk± ­\6÷»Þ­žå-»'¥q_fÀ©'Þ˜Ð(nA œt¬UI-™« ™é¶·ZhÔ.îcÕ-$3„ùUùvŒzûÕ ôË)µ·JÈ9fù4£Cîá}±\f˜›'#œl=G¸­ZïÂὤ9ù­Ðä¯.IrØë4£Ÿf¶²j–³E 0¥Tv'qÉ÷â©Ú™cÒÒÆ=NÎØB^-ÎO13ò‘ó zçžÕÏÑ[ýAjÜ·òF^Ùö:¨à°‰´Ðš„>UŠTgRXíÚ 9ì3ùÒÝ-½íìO>©nmau‘ B£.:lòçÝk”¢—ÔïÌÛKXì-¯?Ðåê6Âvy 6å!±ÛÀÆp1TÒÊÊg¸—QÔถo/&ò„$®0ÙÎI9ÍstP° m öϱ¾šm”³êѬËtnc’YLI`†lž ÉÈ&ˆ¢† «DH°¼·RLdU+ä` ð>fý+Н©w{_#«ó„ú4v÷…‹]4j&iBÈŒ{åAš4ˆÒH"ÖíÔÉÄÄ€FÐìÅ@ÞRn3ÀkŠ ÛKðAí»£~òÂÖùm¤žÿKyà ƒ}º´EN8Ø\àŒA«WÂÒM ¬íî¬ÖHÕLaQw) 03ÀÈ®ZŠ_QÛÞØ=¯‘ÑMc¥^K ßÛ ¼Æe¸•>ÖØ$ cðA‘éS“j\\êö²G³Ã(R |ÇqÎ=®ZŠ>£ýæÛÈè¤Y7Íxu‹9oVÝá·Ø«©lœ³däojи»WVÛT´ŠQŒ¼€8UŠ2ªRX•ÚœõÆ:娦ð7û_—õÔ=¯‘ÕÚ\Aý©}y-ÄdQƒ*ò‹“ž½ËÊ´>ßeÿ?pßÁþ5ÂQRòè¿´?nûßÛì¿çîûø?Æ·ÙÏÜ÷ðp”Rþ͇ó·}Žïíö_ó÷ýüãGÛì¿çîûø?ƸJ(þ͇ó·}Žïíö_ó÷ýüãGÛì¿çîûø?ƸJ(þ͇ó·}Žïíö_ó÷ýüãGÛì¿çîûø?ƸJ(þ͇ó·}Žïíö_ó÷ýüãGÛì¿çîûø?ƸJ(þ͇ó·}Žïíö_ó÷ýüãGÛì¿çîûø?ƸJ(þ͇ó·}Žïíö_ó÷ýüãGÛì¿çîûø?ƸJ(þ͇ó·}Žïíö_ó÷ýüãGÛì¿çîûø?ƸJ(þ͇ó·}Žïíö_ó÷ýüãGÛì¿çîûø?ƸJ(þ͇ó·}Žïíö_ó÷ýüãGÛì¿çîûø?ƸJ(þ͇ó·}Žïíö_ó÷ýüãGÛì¿çîûø?ƸJ(þ͇ó·}Žïíö_ó÷ýüãGÛì¿çîûø?ƸJ(þ͇ó·}Žïíö_ó÷ýüãGÛì¿çîûø?ƸJ(þ͇ó·}Žïíö_ó÷ýüãGÛì¿çîûø?ƸJ(þ͇ó·}Žïíö_ó÷ýüãGÛì¿çîûø?ƸJ(þ͇ó·}Žïíö_ó÷ýüãGÛì¿çîûø?ƸJ(þ͇ó·}Žïíö_ó÷ýüãGÛì¿çîûø?ƸJ(þ͇ó·}Žïíö_ó÷ýüãGÛì¿çîûø?ƸJ(þ͇ó·}Žïíö_ó÷ýüãGÛì¿çîûø?ƸJ(þ͇ó·}Žïíö_ó÷ýüãGÛì¿çîûø?ƸJ(þ͇ó·}Žïíö_ó÷ýüãGÛì¿çîûø?ƸJ(þ͇ó·}Žïíö_ó÷ýüãGÛì¿çîûø?ƸJ(þ͇ó·}Žïíö_ó÷ýüãGÛì¿çîûø?ƸJ(þ͇ó·}Žïíö_ó÷ýüãGÛì¿çîûø?ƸJ(þ͇ó·}Žïíö_ó÷ýüãYúÜÑMifÑH’(†QÀ®Rµ£t[qÿOoÿ ¥],(ÔO›V7)Î ÛDw:'ú•úVøéX'ú•úVøé]ç8´QE¥cêßê[é[¥cêßê[é@Ÿ†ÿäko÷Oþ‚ÕÚ]YZÞÆ#»¶†áä,±‡úà×á¿ùÛýÓÿ µu:æ¥>“§›¸lÅÊ¡ýà2lÚ¿ÞèrYµÓì¬wý’ÎÞß~7y1„ÝŽ™À«6ŸñîßýÖ>¬\kVÒ\Éd¶ð†Û‰‹ùž¸ùG¦~µ±iÿçý÷ÿÐpÞ ñ*Ûø†[„Õâ‚)ãG³3…7;¿Ö|¹ËmR1î ix¶$6KuÍຜ¥½ªAy$hÎÇ‚B°$ŸA[6º•®Ÿ-™S2ÌÒ<¯0œ¹%²@µXh6ñC¥Äg¸‘tÓ˜w°%¾R£wàØ¥ÒÏúîn¿®Äúu³YÚ[Û<òÎÑ S,¬Yœú’kÇõÿ êú¿ˆäšÒÓý¢·_:G ¿ê#Éõ#ÜÐúW´'úÁõ¬ÿ{úáþ€+ƒ2Ì*à©{ZV»v׿ÿCj1»±ævæ%Αq¨<0 # _?u˜eyVì9É÷¨µM6#a=Ã;ËsY\9”áNì|Üv=±É­ÿIkc­i÷ÎbWxd†f2|Á8eÂç¦C ÔàöÎÏâH"ÚÞiÈ«cbŸÄóúWnSV•l*¯$”Ýîí­ÏJ”0‘¤ÕK'ªó'ŽD’$xÎceN1ÇnJ]W›BñK˜ØùW°êñ‚×û­Ž\÷ïÏlq¯ßÚÄ–ªÈ _(}£8ǧ·¯^ËT¹]JÞiî¤Ûƒ–%¶©ûØëÔ~5ëfXØb0ΜæýOŒÊòÚ¸\Wµ“\»z£Ø5mn \Gèñ*àFÃælc$íê9àc¯~+$ÛY1n®Ž ìR?<ŠYGsÇ9§)@€mŸáWÁʬ¤ï-O¸ŒU‘*ÙÛ>Ó‚“Ó1’OåH4ÕfÝÄzeË/?•!À*õçÖ¤Y ÁÏoZ•? °­jöîrѲŽ3†ŸéE9°yî8¦×½—»Ñ<¼_ñŠ(®Ó˜(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+a?ä oÿ_oÿ ¥cÖÂÈßþ¾ßÿAJç©üh|ÿC®—û½OXþ§o¢©_¥oŽ•¢©_¥oŽ•Ðr EPzV>­þ¥¾•°zV>­þ¥¾”ÉøoþF¶ÿtÿè-]Ñ”«A ÷®Ãò5·û§ÿAjîè‘E$Q"ǪŠ0ôŸiÿçþº?þ„h¢Óþ=ÏýtýІ –§5´€‰?Ö­y6«=ìºÔÖÍ{¨A 1ÛIFþZ2´(8aÉ•ºgß5ë)þ°}kÉüO40ëÚd¨UÙ­Þá¼Ð«òÕãßž##'¥ª£ygE—ws¹€?C¶›©hšzévÏe-¸*™ä †cºO8ÇõéÍ\Òt˜¤Ðæj³A)ó^)<¯LqÛ®rzK/ö’äV½¯®†m+±-51u1·{i¡”.ÿœ cñô«µNÎÛT·yÍɸ³$ùnÇ$œðyädã5r»0qQ¥o3ÏÅÿ(¢Šê9‚Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¶þ@Öÿõöÿú V=l'ü­ÿëíÿô®zŸÆ‡Ïô:é»Ôõêvú'ú•úVøéX'ú•úVøé] ´QE¥cêßê[é[¥cêßê[é@Ÿ†ÿäko÷Oþ‚ÕÝ× á¿ùÛýÓÿ µwtQiÿçþº?þ„h¢Óþ=ÏýtýІ –§5´€‰?Ö­xˆ´íÏËö¹¦šÞh p³‘âÉgŒœžž¿·'úÁõ¯3¾ŽYufŒ9˜ *…ÀòS…9瑞}MoB§$¾ßCôý¤mÍkjbÅ£Gkf"X¸‘r˜R½ûŒŒñÇ¡«¶m’€SzÆ»OËžÝ@9Î:÷­‰lƒ[’"ÁÀ+žI÷êk õݱ X ÄŸóÚ–# Ô9Û ‹Ë‘"åÕեݳ%“Á,CåŸ~sÐ7SéÖ³ã½{DHø`1˜NÂÃÐ ñÆ=jå™2mó<ÛO·NqTõ-6i%f¶‚I??–»°}Hýë‚°‹ŠÔê““šÖÆ-ÍÓIpÂ;xÖ<†Ú듞¹ÍhiìÅþæïæ¹s‘èI?Ò¯ØérÛY‹¿ìJêMŠŽ­a#q’ÇÆãò’:óí,ÿµY®»XÛÊÀÇxãœdŒñÎ)rÊ~êF®¼£ï9õ{D¸† ‹‰6Qµóשç¥gOá{–…Œwb0À¥Á>‡¨é‘Ÿ­uðø~ÎÕÙƒÌFG—æaÄ@ñÇNOÿ®¥–1oHó‘ä–9'g?þª~ÎTìT1“’÷ds66iñA Ì$PŒX|à H œzðrÇŽæåHó4ë¼BÉNÒOù棭á±ÏRnræaEUQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE°Ÿò·ÿ¯·ÿÐR±ëa?ä oÿ_oÿ ¥sÔþ4>¡×KýÞ§¬S·Ñ?Ô¯Ò·ÇJÀÑ?Ô¯Ò·ÇJè9¢Š(=+VÿRßJØ=+VÿRßJäü7ÿ#[ºô®î¸O ÿÈÖßîŸý«» ‹Oø÷?ï¿þ„h¢Óþ=Ïûïÿ¡ÔÔæ¡”RÿX>µçw‘ÞEª%ͽ¼¬~Ï,[¸¯CƒŽsÏnkÑ~ð}k‹Öï%´°Òü«‰`´1»Ã‘öùDð»[¸« õeI'Û.0Rºfeܺլ}ŽáUºÓÐà óùŽ+> F%a¹ê6­hÑð'·“Ë‘÷¯@Àƒ‘‚; ÌÓõ{™õ¦²›¢ëi€81œ7=÷rGÒ‡©+Þ+@T!£1Þ×P*µ¬»T` Ÿòü)Ÿ`½ÿŸIÿïÙÿ é´Û‹Ù5=F ÉcaŒÆ±®‚ Æzšmæ¶,õX¬˜[‘+nš ÇŽžù¤±µåQE{»g7ö ßùôŸþýŸð£ì¿óé?ýû?á]Fƒuyw£ÛÜ^¤až%`èù/‘Ô )ö¬…½¿66·_hºŽ¥’w–|â„‘±1ƒ…ÛíÛ¨ÍW×j]«-앯s;ì¿óé?ýû?áGØ/çÒûö¶Υ¨Mc¢Þ#ÅW/™ve›wP3Ð~µæ«w¸Ð,ÃF"&Vv÷ÆUºàdvàæšÆTnÖBöQµîdý‚÷þ}'ÿ¿gü(ûïüúOÿ~ÏøWq*»DëìrVÆvŸ\w®yuKËK-BQ3_¤r¤6Ò²*—v!Hùp GrÙ"º™`½ÿŸIÿïÙÿ >Á{ÿ>“ÿß³þº——¯£Þù3¸¾·'Ìû\K˜þ\ðƒÆäõäš‘.gh× +0ºÊ•sÁb›Ãc ?)W×§ÙZ‹Ù#žûïüúOÿ~ÏøQö ßùôŸþýŸð®¿T¾:mƒÜˆ¼Í¥F m$ “ƒ€3’qYë©ÊgšDH ­¢Lsx|¥Ÿ$§°ÎqÏáS}F®¢ÑK©ö ßùôŸþýŸð£ì¿óé?ýû?á[Rø™ ´´yí`‚âåZEŽ{¡„çq^§#\U«ÍLÍá±}hJ5 Œž¨\…ðÏéUõڪ׊×@öQîs`½ÿŸIÿïÙÿ >Á{ÿ>“ÿß³þ¿uÜ:•­®§r<ù£e•b@7Jî$œ½Zˆ.çMnXï.n¢V‘¾Ï‰<©/fÛœõ8Ïj>½;]%ߨ{`}‚÷þ}'ÿ¿gü(ûïüúOÿ~ÏøVÏ}ruçÅö˜Œ¶ñ2 Œ #A,NÎq×¥[Ö¯§³‚µžââQ‘Á$€HওÇTRåå@¨Å«ÜåþÁ{ÿ>“ÿß³þ}‚÷þ}'ÿ¿gü+jïP¼ûU•ˉŠÌ÷¯˜lÂü çŒóøõ©µ‹«‹kØ™®n­¬DdÉ,#€Ùݹ[æšÆÔ½¬º÷èÉZç?ö ßùôŸþýŸð£ì¿óé?ýû?á]M”®š½ý«HΘIãÜs´6AL®Ò¨–c4þ5A>§ ö ßùôŸþýŸð£ì¿óé?ýû?á]Ý?ÚSþQûÜá>Á{ÿ>“ÿß³þ}‚÷þ}'ÿ¿gü+»¢í)ÿ({Üá>Á{ÿ>“ÿß³þ}‚÷þ}'ÿ¿gü+»¢í)ÿ({Üá>Á{ÿ>“ÿß³þ}‚÷þ}'ÿ¿gü+»¢í)ÿ({Üá>Á{ÿ>“ÿß³þ}‚÷þ}'ÿ¿gü+»¢í)ÿ({Üá>Á{ÿ>“ÿß³þ}‚÷þ}'ÿ¿gü+»¢í)ÿ({Üá>Á{ÿ>“ÿß³þ}‚÷þ}'ÿ¿gü+»¢í)ÿ({Üá>Á{ÿ>“ÿß³þ}‚÷þ}'ÿ¿gü+»¢í)ÿ({Üá>Á{ÿ>“ÿß³þ}‚÷þ}'ÿ¿gü+»¢í)ÿ({Üá>Á{ÿ>“ÿß³þ}‚÷þ}'ÿ¿gü+»¢í)ÿ({Üá>Á{ÿ>“ÿß³þ}‚÷þ}'ÿ¿gü+»¢í)ÿ({Üá>Á{ÿ>“ÿß³þ}‚÷þ}'ÿ¿gü+»¢í)ÿ({Üá>Á{ÿ>“ÿß³þ}‚÷þ}'ÿ¿gü+»¢í)ÿ({Üá>Á{ÿ>“ÿß³þ}‚÷þ}'ÿ¿gü+»¢í)ÿ({Üá>Á{ÿ>“ÿß³þ}‚÷þ}'ÿ¿gü+»¢í)ÿ({Üá>Á{ÿ>“ÿß³þ}‚÷þ}'ÿ¿gü+»¢í)ÿ({Üá>Á{ÿ>“ÿß³þ}‚÷þ}'ÿ¿gü+»¢í)ÿ({Üá>Á{ÿ>“ÿß³þ}‚÷þ}'ÿ¿gü+»¢í)ÿ({Üá>Á{ÿ>“ÿß³þ}‚÷þ}'ÿ¿gü+»¢í)ÿ({Üá>Á{ÿ>“ÿß³þ}‚÷þ}'ÿ¿gü+»¢í)ÿ({Üá>Á{ÿ>“ÿß³þ}‚÷þ}'ÿ¿gü+»¢í)ÿ({Üá>Á{ÿ>“ÿß³þ}‚÷þ}'ÿ¿gü+»¢í)ÿ({Üá>Á{ÿ>“ÿß³þ}‚÷þ}'ÿ¿gü+»¢í)ÿ({Üá>Á{ÿ>“ÿß³þ}‚÷þ}'ÿ¿gü+»¢í)ÿ({Üá>Á{ÿ>“ÿß³þ Ÿò·ÿ¯·ÿÐRººåþ@Öÿõöÿú V”1.½euk\ÙSPÃÏÕ~§o¢©_¥oŽ•¢©_¥oŽ•êx´QE¥cêßê[é[¥cêßê[é@Ÿ†ÿäko÷Oþ‚ÕÝ× á¿ùÛýÓÿ µuZÞ±‰¦½ÔÄû±¡8ÞÇ ÿ=¨F 3›L®èv±,<É6““ØçšÎðæ½»`dÌbæ#¶dFȱÇüGj×´UòÚL|ìì wáˆÊ€*LzËñºÿìj&ÔÁþ+ü ÿìkXš†G#½ 2Åã\7•Ö)#p.w‘ô]£?pÞ)ñŸƒômut­KV{{­9ã,A#`ùcnHBÊÀðkÑ%E¹C £r7žõò?Å©_‰Z”Žrï«1õ&Ú*Ê­Ur¶Tdâz³øûáû <¿Ïþд Ää`•Ì}9#“Pj_¼'*[5§ˆÙ®b ¦âH¥G*ØÈ @TŽaÐWÏu»áí ãPs}%´ÇOðóyyŒ¿!=;ŒO¨¬c§uy?¿ÈÑU“{Õ<”P\k³oû,Q³¯Ü%•×ä듟¥‹ÇþŽD•üE<³¬Âc,–Òîv TˆÀÀ ¨èÓ5ï ܶ©j²}¨”†PW|j¿Ä‡S»9ìvŒ‚:ùŸŠþj Íä¶+%îÅ ª“$K嬙pL7ÞqÎÜ\­ayÑçwOË_À•U¶â–ǰ'ćéeqhÚÓ<3´Œá­fçy$ŽÞª¯ŽüU¼ï]NçËImå,ªŒ(Ä`c#žçÖ¾w¢ºV i?Ãü†ë7ÐúQ>&x7¼t×äVºmÌE¬ß)Úåýß sW´¹¼ycc{¥Ê¡c`Ñ\Ç#¾ÒTî%rs‚­|»^Ùàù´ÿûiÿ£…‚ÚOúù¬ßCÓâÔt¨o..Vé‹Ï·p(ØF8ªOýŽ÷ÆçûFáU¦´!>Fp0)» éšÁ¢’ÀSNé¿Ãü‡í¤ú6y¥é°yêIáU$F=}sTá{Ó…„úŒ©m²ªÂy‘“¬vä`qÁ‹E?¨Â÷»ü?È^ÙL÷Ú<Ñ[Çö‚‰o"ÈŠˆÀ ½N•Vc£MtóBác’E–HNÇuÆ ùsü#¡ŠÀ¢…€‚ÚOðÿ u›èt±_ÙgÏm>¥+4Í&dUmÈœ$`Ò¡FÒ†žÖ2ê—3AµBŒ)‹iÈ+µ9®zV}FŸwø{gØé ¹Ò!¶¹‰¯¦•îre–E;Û#oe`ÐTmwcö›—cìöq›•·Û´Ç@3ù×?EQ§ÝþäÙö:Xµ 5ÒáµmZq2"†¸T%ØŽ§æS×Þ¨›M ìï j7(U]•yl;? ¦9,r1jÈ¢…‚‚Ù¿ÃüƒÚ¾ÇC$Út¢mbì\Ÿ- ´ã*Fͤp;v©oïôûÍ*KAz|£dgpÁàz€k™¢¨SÓW§§ù¶}Ž¢-KM7k}-É(V*¼äãåÏ_ä*!q¥µòÝM©ÜÏå³4QH¿$d‚8‚x$rMs”Rú…>ïðÿ öÒ6vipÁ"Úêw …á·.áºíƒØu$ñW¯/t«È"F½–7…ƒÇ*)Þ¬3Êx'¨=k˜¢›ÀÁêäÿòlû›¢ÿe>Ÿö¹LnK;•;Ù‹n$¸É>Ô·÷:f£•—S¹HvÉk…qïòçò"¹º(úŒ/{¿ÃüƒÛ>ÇKi¨ØÅ}yu-ÊFíGºä±üjïöî›ÿ??øã…q´T¼¾“Ý¿Ãü†«I—öî›ÿ??øã…ÛºoüüÿãþÆÑKû:—wø{y—öî›ÿ??øã…ÛºoüüÿãþÆÑGöu.ïðÿ öò;/íÝ7þ~ñÆÿ ?·tßùùÿÇü+¢ìê]ßáþAíäv_Ûºoüüÿãþné¿óóÿŽ7øWEÙÔ»¿ÃüƒÛÈì¿·tßùùÿÇü(þÝÓççÿoð®6Š?³©w‡ù·‘Ùné¿óóÿŽ7øQý»¦ÿÏÏþ8ßá\mgRîÿòo#²þÝÓççÿoð£ûwMÿŸŸüq¿Â¸Ú(þÎ¥ÝþäÞGeý»¦ÿÏÏþ8ßáGöî›ÿ??øã…q´QýK»ü?È=¼ŽËûwMÿŸŸüq¿ÂíÝ7þ~ñÆÿ ãh£û:—wø{y—öî›ÿ??øã…ÛºoüüÿãþÆÑGöu.ïðÿ öò;/íÝ7þ~ñÆÿ ?·tßùùÿÇü+¢ìê]ßáþAíäv_Ûºoüüÿãþné¿óóÿŽ7øWEÙÔ»¿ÃüƒÛÈì¿·tßùùÿÇü(þÝÓççÿoð®6Š?³©w‡ù·‘Ùné¿óóÿŽ7øQý»¦ÿÏÏþ8ßá\mgRîÿòo#²þÝÓççÿoð£ûwMÿŸŸüq¿Â¸Ú(þÎ¥ÝþäÞGeý»¦ÿÏÏþ8ßáGöî›ÿ??øã…q´QýK»ü?È=¼ŽËûwMÿŸŸüq¿ÂíÝ7þ~ñÆÿ ãh£û:—wø{y—öî›ÿ??øã…ÛºoüüÿãþÆÑGöu.ïðÿ öò;/íÝ7þ~ñÆÿ ?·tßùùÿÇü+¢ìê]ßáþAíäv_Ûºoüüÿãþné¿óóÿŽ7øWEÙÔ»¿ÃüƒÛÈì¿·tßùùÿÇü(þÝÓççÿoð®6Š?³©w‡ù·‘Ùné¿óóÿŽ7øQý»¦ÿÏÏþ8ßá\mgRîÿòo#²þÝÓççÿoð£ûwMÿŸŸüq¿Â¸Ú(þÎ¥ÝþäÞGeý»¦ÿÏÏþ8ßáGöî›ÿ??øã…q´QýK»ü?È=¼ŽËûwMÿŸŸüq¿Â±Sþ@Öÿõöÿú V=l'ü­ÿëíÿô¢hQ­^·:#QÏRýãú¾‰þ¥~•¾:V‰þ¥~•¾:W p‹EPzV>­þ¥¾•°zV>­þ¥¾”ÉøoþF¶ÿtÿè-]Ýpžÿ‘­¿Ý?ú WQ®Üj6šk\é© ’Fw:H…²ðŽ´§E§ü{Ÿ÷ßÿB5‹á»ýOS²kËô"þàG)eþñËoϽmZǹÿ}ÿô#@}¯êÉ&½sªF×FMEŽÙ#·‘’L¯Ë*2ÞOj/ö®´†ÚÉ5xÆœeï&ň±ùdRx,y£kµ¶Ó­,¬Í¥¼!`%‰RŲX’Ù'“’MdÜx_Gx`‹ì®«^Le'‘XGýÒÁ²G±&¦Ú[úØwÖáá¹VmMuçýëŒ3sŸzù_â·ü”[ÿúáiÿ¤ÑWÖÖ°EkPAÇ`*"Œµ|“ñ[þJ-ÿýp´ÿÒhª›»¸’²±ÉÙÚM{ ¥ºîšgƒÜÿJú_÷>ðÇ…—OÓ¤ŒÏoöŠD0Iw.ÞHÉ,F8Î8€xÿ‚cÒôµ‚òù™/dgr_!€§\Xî=ÏÈ ž{mcP†ïN·1xn’J`2®29ä•ÿ=y1¸⢡Qµmmþc§[•ÝjiùK§Û5Àšd–4ß,Ñ1V”¨ÎæÃ§æÏSêi,u}BÆÑ|Ô‚`CI vòØ;ÌK ®2O^9ã/o%³µ ΪXb2I^îàsƒSÛk—³ oµæm¥ãla?‹ƒß¯J¥º½9}j/Ë͘bq5*Óx¨ô–Þ_}¾ò¾§ðäj¶§Q¶é—WL&†ÞGÉùvŽ0¸'Ðu5æ×ÖZmÓÛ^BÑJ¤ŒAÁ# Žpy¾™Ô53«ébßìñµ8i1ɪ1÷¿Èç§ «è¶Ú«Cuȸ!dÆ3ÇCØð?.kÆXøFÊ+C¿ê’i¶õµóž­áI|Eñ~òY!f²·ŠÍÛ* ÊâÞ³ž£'ñ×Í}ŸëÖ¾iñoõO |KÔ<—Íoh¾Dÿ0OÜDw'÷¯<Žyœm}E+ÛCÐ.l8•$ åchRÛÛŸQù÷¬7ðrOis6™w-œìž\­†1*±û¬£ƒŽ˜ç­XÓèÚ@pAÉÆsׂxj¶àâÏ_N•F¥gØß´¹†î0ð°e=Çz²È—o‰4•€ÏFé÷¸úsùûb#Oo ›I`¶×nY/7ŒóÃr?½×€4,¯£½Š@#u’3¶Hœ|ÊÀÿxS§*om»ô)ÝY²3£.NwäRøtÙ¶‰ØVØI(@½8‘#Øœ‘ìkâ?‰ÎŸ§ †ææ?Ù2R#pzrr;㞇¯øþD­?þÚèÆ¯W/¤Ô]GÔóñu|‹¡ÒQEéAEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPZÐÈúûý+&µ ÿ$õöÿú Ps¢©_¥oŽ•¢©_¥oŽ”´QE¥cêßê[é[¥cêßê[é@Ÿ†ÿäko÷Oþ‚ÕÝ× á¿ùÛýÓÿ µwtQiÿçþº?þ„h¢Óþ=ÏýtýІ –§5´€‰?Ö­|‰ñ[þJ-ÿýp´ÿÒh«ë´ÿX>µò'Åoù(·ÿõÂÓÿI¢ g#os=¤ë=´ÒC2çl‘¹V8#Ú½GÂР±Öâ‹Íb+†Eœu9G7lf¼¦Šm]Yˆú*}9í#ºû<—hÌHŽæ`T|Á·*²ä䕹ÆÒâáYM±Vh­ÙØÆ× ‘´dã€~l ã¡æ¼kž:Õ|+.Ȉº²lµ›jüÙ%9ù¯<Žy½ßÞ,Ñ|Seæi÷!ePÞe¬¡VeŒ•ÉùNGÌ õÎEe*1i»U”Z±ÍÎâI ]D+ià„ˆ Œ6G#“ƒÎOaYþ!¾_[Ü^ÊÓ8a›;” ´™Æ#bO̽óÔœìµìåÝi+ù„®2¹Æz¦;ç€}+À¼Y®&±ªlµw:u¿Ël¬1Øl{•ϯLóšÇÙF¤yëý#¹â½ß?ÃþÉÔ/§Ôõ ïn_tÓ9v9'Ã=‡Aì+Øüÿ"VŸÿm?ôcW‰×¶xþD­?þÚèÆ®¤’VGwÕ%QLŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( µ ÿ$õöÿú VMkAÿ H?ëíÿô çDÿR¿Jß+DÿR¿Jß(h¢ŠJÇÕ¿Ô·Ò¶JÇÕ¿Ô·Ò€9? ÿÈÖßîŸý«»®Ãò5·û§ÿAjîè¢Óþ=ÏýtýÑE§ü{Ÿúèÿú  A-Nj i¬Zð|(½ñ/‰%Õá½òã¸‚ß å)ÆØQz—Ýô¯xOõƒë\F¾ò-ލ.XHð«%´¦7qå€wAßµaˆ«*qN=Y¤"¥{žCÿ /Rÿ —þ@_þ9Gü(½Kþ‚_ùøåzúÏw ÖVŠÐyÉ$öâÓ8 WŒ‡ï»ÔÔÚýÝÆ¡lÍkçI m.P&Fã&6•ÆLŽk‹ëµ·I_3_eÉÿáEê_ôÿÈ ÿÇ*k_‚úÝÊ\ÙëRÛΙÛ,1„eÈÁÁdpHükÕt]jóR¸Í·" ¡2«-¼¨#9RÌ6¾Aê=*î³ܱ@-ÖgŒK™ã‚QŒ˜<ÈÇ8î)¿ãGö¥ÿ>ßøúÿ]]sR— ð¦õ0ˆåkYbL»… ‡Á8Îr9í] "a ‰Ý\|Í•Sôœ~u3ÇVŽé~ ©Aìr?ØZ—üûãëþ4aê?óïÿ¯øÖ­‚Ïgâ)­¥’o&XKįpÓÃ`·ÍÊžGz«%ÝæŸ¨ê÷qù kÄ^ll§{e§8z`æ©c*·em¿àw¥TþÂÔ¿çÛÿ_ñ£û RÿŸoü}Æ®ÝxŠk{«…‰¡¸ˆE3!HZ1œ'kô ã©YÔ-DÐN¶ÒÜ€Â謉ûÆ+óIàŒõçÚ­â;/Ä=œ ïì=Gþ}ÿñõÿ?°µ/ùöÿÇ×üjuºÔ¬nu'>KÈncL–îËù@îØqì:ñÖºheómdd—r œ+qÛÚ”ñÕ£­—ãþcTbÎKû RÿŸoü}Æì-Kþ}¿ñõÿ}ΧyumkÁ—íé[[@ðJ £¤—†GP@8§Û]ÝMao¹¸†»ö…ZGÌÑF’…¹ÃR;‘žµZ­nŸù‹ÙÀ‡û RÿŸoü}Æì-Kþ}¿ñõÿ³©4vÞU•´ÚŒÄ^"Ì‹rÞa6 ,8­høzid‚î)špÐÜXît‘®›¿\ç'ƒÖ¥ãj¨óiý|ÃÙFö1°µ/ùöÿÇ×ühþÂÔ¿çÛÿ_ñ®ÊŠËûF¯eøÿ™~Â'ý…©Ï·þ>¿ãGö¥ÿ>ßøúÿvTQý£W²üÌ=„N7û RÿŸoü}Æì-Kþ}¿ñõÿ쨣ûF¯eøÿ˜{œoö¥ÿ>ßøúÿØZ—üûãëþ5ÙQGö^Ëñÿ0ö8ßì-Kþ}¿ñõÿ?°µ/ùöÿÇ×ük²¢í½—ãþaì"q¿ØZ—üûãëþ4aj_óíÿ¯ø×eEÚ5{/ÇüÃØDã°µ/ùöÿÇ×ühþÂÔ¿çÛÿ_ñ®ÊŠ?´jö_ù‡°‰Æÿaj_óíÿ¯øÑý…©Ï·þ>¿ã]•hÕì¿óaþÂÔ¿çÛÿ_ñ£û RÿŸoü}Æ»*(þÑ«Ù~?æÂ'ý…©Ï·þ>¿ãGö¥ÿ>ßøúÿvTQý£W²üÌ=„N7û RÿŸoü}Æì-Kþ}¿ñõÿ쨣ûF¯eøÿ˜{œoö¥ÿ>ßøúÿØZ—üûãëþ5ÙQGö^Ëñÿ0ö8ßì-Kþ}¿ñõÿ?°µ/ùöÿÇ×ük²¢í½—ãþaì"q¿ØZ—üûãëþ4aj_óíÿ¯ø×eEÚ5{/ÇüÃØDã°µ/ùöÿÇ×ühþÂÔ¿çÛÿ_ñ®ÊŠ?´jö_ù‡°‰Æÿaj_óíÿ¯øÑý…©Ï·þ>¿ã]•hÕì¿óaþÂÔ¿çÛÿ_ñ£û RÿŸoü}Æ»*(þÑ«Ù~?æÂ'ý…©Ï·þ>¿ãGö¥ÿ>ßøúÿvTQý£W²üÌ=„N7û RÿŸoü}Æì-Kþ}¿ñõÿ쨣ûF¯eøÿ˜{œoö¥ÿ>ßøúÿØZ—üûãëþ5ÙQGö^Ëñÿ0ö8ßì-Kþ}¿ñõÿ?°µ/ùöÿÇ×ük²¢í½—ãþaì"q¿ØZ—üûãëþ5m­'³Ò-ã69ºf ñµ=>•ÓÖ^½ÿ¶ŸõÕ¿’×FR­NY$EJJ1º: ýJý+|t¬ ýJý+|t¯HçŠ( ô¬}[ýK}+`ô¬}[ýK}(“ðßümþéÿÐZ»ºá<7ÿ#[ºô®î€ -?ãÜÿ×GÿÐZǹÿ®ÿ¡ÔÔæ –'úÁõ¬xôq}ga3„>\qÉXŒ0Lg©­„ÿX>µM.͆à¸X%¸d¶M±D…™ŽÑYÕ¥ªÒ*2qØ´2÷1Ü7–eYQ·c?ÈUUðì×ÍqË3’ÅI ’zƒŒûâ¥ðÖ­¨ß  Õ-'Še;ÒV·xÑ”Ÿ»Èê?QøÖõ©ýåÉî$ðÚ§úšÃê4—¼¿k#”o À-n`€M ÜFÑ<Òª]ªFÑø ·s¢-ݰ·™d1 |ª%\û‘íÒºŒÑšoM÷ûÃÚÈåÛD‰£·ÉÂ[°h•cp€@àCOŸI>_šŒÞ[‰äa‡CÒº\Ô7wqÙYÏu6|¸ci'dÔýJ–úýàªËcšoÀÒ -¼Ì'ݶLïçœc¦)±xzÚÝ&UBžI!—s{n~œ×Smr—V±\G’ uÏ\‘RJ°‚z§‚¦´×ï¶“Ôä¿áµû,¶åI™ZF3È]ˆ9>wqZµm 5¤Mr3+Ÿ6wþm“øV½«fÊcÖ5$Ÿ¥-½Ìp,öÓG4-÷dƒ)úCÁS{ßïµ’0m<+ŒÞmº"¸R«™]‚)9ƒ£Øb’óÂp_Ïç\¢»íq3¨e8`0rzæºJ†îæ;+9î¥Ï— m#`dà š>§M>k¿¼=¬ž†Þ‚àH$3$‹!+#© ÐA#Ž1R\xqní’Þ`­W÷ŒHèCA÷ÍmÛΗVÑ\G’ uÏ\‘RPð4×}<Ä«Hçmü/ ©ˆÂˆ A“#±ùÈ-’zäɨDŽm‡ü°§Ÿ&Á·§Ëœ=H®šŠ>§O»ûÃÚÈáõoG,QF.í¬í’/ òûÊznÜÌ®6™¥²Ê­shD®’?ïÏ,¸Ú £ò®ŠY5™÷¨m&ÜŒã%³È~U-®§¥^ÜIoi}gq<~8¥Weú€r)¼$—x{G¹ÌG¥éÞ5Ôw–é#Ìé‚z™ÛŸ|S-´m"Îä\AslŽibª]ªN>»žÑ.£µy`[‰²DX`::*m‰ýÅü©}JŸw÷Ú³:v˜n<óuiæù¢mÞyûávÿ|ñQ¾¤I³76À¤"²]2Ìr܃œÛ¥vÛû‹ùQå¡þü¨ú•5ßïjÎV B—&ò¡Ü–;f}ŒOS·îçß“iá84ûç’îþȃD°e‘±ü¬ÍéÛÚº¹Û[ê~VBÌPÀýÚ·ó$Ô1Ä‘ TÏsîj^Ñ\Ò É]˜±èºTVíÞ[˜‹+m{Æl9\dœGAÅMoaio5Ô£Q´f¹;faÆ(­z+7…ƒÜÒëúÿ†1m42ÆV– »_1—iy.šB ,N°¦I¢i2Þ›¹.mZRÊä¦ÚX W;IãµnÑOê±½îÿ]_ðÇ>|=£‘űÞûcmþö8Ï`*yt­.3͸±25‰³?URH'žµ³EUwøŽëúÿ†9õÐ4•‰ã[ØÀvÞÌ5 71Æ9mÙ#³Š–ËJ°°ë0³0;DÀB€?­º(xX½×õÿ `Å¡é0Ȳ-Õ³H®<—Œí±'1ã§4ù4}*XîIìYnI óú°ÇÌ=‘ŠÛ¢ªÇ{¿Äw_×ü1ÏÂ;£ye>Õ2 ý¹÷îîÝ»¡#­Z³ÓôûÚ;k»5 Û˜›ÌÇÔ“’OÖµè¡ábômþ"ºþ¿áŠ;`ÿŸû?ûü(ÛüÿÙÿßáW¨¨ú•1óvÁÿ?ö÷øQ¶ùÿ³ÿ¿Â¯QGÔ©‡1Glóÿgÿ…`ÿŸû?ûü*õ}J˜svÁÿ?ö÷øQ¶ùÿ³ÿ¿Â¯QGÔ©‡1Glóÿgÿ…`ÿŸû?ûü*õ}J˜svÁÿ?ö÷øQ¶ùÿ³ÿ¿Â¯QGÔ©‡1Glóÿgÿ…`ÿŸû?ûü*õ}J˜svÁÿ?ö÷øQ¶ùÿ³ÿ¿Â¯QGÔ©‡1Glóÿgÿ…`ÿŸû?ûü*õ}J˜svÁÿ?ö÷øQ¶ùÿ³ÿ¿Â¯QGÔ©‡1Glóÿgÿ…`ÿŸû?ûü*õ}J˜svÁÿ?ö÷øQ¶ùÿ³ÿ¿Â¯S^æèÀ’yjŠÛ<ä?#ùSX*lNi+•6Áÿ?ö÷øQ¶ùÿ³ÿ¿Â®\@öA$óÚhKo0 ÊOð|éÔ< 4¨žÅ°ÏýŸýþmƒþìÿïð«ÔRú•1óvÁÿ?ö÷øQ¶ùÿ³ÿ¿Â¯QGÔ©‡1Glóÿgÿ…`ÿŸû?ûü*õ}J˜svÁÿ?ö÷øQ¶ùÿ³ÿ¿Â¯QGÔ©‡1Glóÿgÿ…`ÿŸû?ûü*õ}J˜svÁÿ?ö÷øQ¶ùÿ³ÿ¿Â¯QGÔ©‡1Glóÿgÿ…`ÿŸû?ûü*õ}J˜svÁÿ?ö÷øQ¶ùÿ³ÿ¿Â¯QGÔ©‡1Glóÿgÿ…dø€ ¶´Ù4R4üѶáÛŠé+Åê¬ÿë¡þ•µ4)Ï™Õw‰³¢©_¥oŽ•¢©_¥oŽ•Ús EPzV>­þ¥¾•°zV>­þ¥¾”ÉøoþF¶ÿtÿè-]Ýpžÿ‘­¿Ý?ú Ww@Ÿñîë£ÿèFŠ-?ãÜÿ×GÿÐHj jsPKH“ý`úÓtÏùÙÿ×ÿÐE9?Ö­R]Íá˜Æãì÷_gC›C íAàô f­CjØ–ïþ»ý+ ÃÛ³ù·:µÄÂ1”Ž #E$ƒËª8ì=zúV¼-‰ïW<ùÀãÛËOð4Ä;VÔ"Óô›»ÉD13°Œáˆ·½qVš†¡k&­2DÚK]D­~×EdÀ}†GÛ0Þ¥YC) Ž RƒHÓ-D¢ßM³„J¥dÀ«¼zEOq®‡0÷wÚ$6³Z^Þ\½Ö“4íÌÍ0óQQƒ.ìãïä‚(£[}^îõnô‹©'ó.ŒŠÌpBç Ôô»GµŒª˜¢‰%Š2Éåƒå‚:nÕ¥øelµC¨Nö/–ѪÛY¬ w¸¶ ,xé½[þ»ÿ˜––þ»óÞß]ÝiÚ}¼û-Æ—±íÔ×{ž nUmØÀã§=ë·Ñšìi6‹,r݈”K$g*çÔµR]'NšÚ;itëI îDð)Uú0*ìF;xÀcŠ5à€ !TÝî$­c ^½– [[[,u|©oÅø+–#$ … zúVMÓé6úî› ÎÙòÊ9¶†L.nÖa€Ø=Šºë+hžÊÂIaFš—c2‚ÈJ€p{TóYÚܸyí¡•‚²è…o¼9ì{Žõ6Ñùÿ_™WÕyCÜ_hÚÏiyyr÷ZL× ÌÍ0óQQƒ.ìãïãb‰mõ{«Õ»Ò.¥›Ì¹2+0EÁ œ/SÐ ïΪbŠåŠ32y`ù@ŽƒÛǵbé^[TêZI(£U¶²[u;ˆÜ[–<þ´Þ­ÿ]ÿÌQÒß×c{«ë»­;O·Ÿe¸Òâ–=ºƒZïsÁ;•[v08éÏzéôx¥W¶kíOÎÔEš¬°G81°ÏúÀ¸'¦ê».¥Ïm´ºmœ–ñ«‰àR©ôÀ©ã´¶ŠQ,v𤋈:  è¹ôö¦Þ·þº‰++] ¨¢ŠC+ÛÈbçþ¸GüÞ¹{£·Ž´yÐØO¬ÑÚÃdH„¦I~NõùHþ k¥Yb¶Õ&’âDŠ9!EVs€H-‘“õœ^Óæy¬£Ò­¥~á£7ÔŽ´–áÐã¬^ù|o£]ê:=ôzÏÚ<çsP¸]ª˜sò ú’pI¯Iªy¤É¯æx}r¯ò/¹œöoˆçßþÿöÊ?³|CÿÛiÿ?PÿßÁGÕáüÏï®UþE÷3þÍñüñ»ÿÀßþÙGöoˆçßþÿöÊì>Ûiÿ?PÿßÁGÛm?çêûø(ú¼?™ýáõʿȾæqÿÙ¾!ÿž7øÿÛ(þÍñüñ»ÿÀßþÙ]‡Ûm?çêûø(ûm§üýCÿW‡ó?¼>¹WùÜÎ?û7Ä?óÆïÿûeÙ¾!ÿž7øÿÛ+°ûm§üýCÿm´ÿŸ¨ïà£êðþg÷‡×*ÿ"û™Çÿfø‡þxÝÿàoÿl£û7Ä?óÆïÿûevm´ÿŸ¨ïà£í¶Ÿóõýü}^Ìþðúå_ä_s8ÿìßÿÏ¿ü ÿí”fø‡þxÝÿàoÿl®Ãí¶Ÿóõýü}¶Óþ~¡ÿ¿‚«ÃùŸÞ\«ü‹îgý›âùãwÿ¿ý²ìßÿÏ¿ü ÿí•Ø}¶Óþ~¡ÿ¿‚¶ÚÏÔ?÷ðQõx3ûÃë•‘}Ìãÿ³|Cÿ¯æx}r¯ò/¹œöoˆçßþÿöÊ?³|CÿÛiÿ?PÿßÁGÕáüÏï®UþE÷3þÍñüñ»ÿÀßþÙGöoˆçßþÿöÊì>Ûiÿ?PÿßÁGÛm?çêûø(ú¼?™ýáõʿȾæqÿÙ¾!ÿž7øÿÛ(þÍñüñ»ÿÀßþÙ]‡Ûm?çêûø(ûm§üýCÿW‡ó?¼>¹WùÜÎ?û7Ä?óÆïÿûeÙ¾!ÿž7øÿÛ+°ûm§üýCÿm´ÿŸ¨ïà£êðþg÷‡×*ÿ"û™Çÿfø‡þxÝÿàoÿl£û7Ä?óÆïÿûevm´ÿŸ¨ïà£í¶Ÿóõýü}^Ìþðúå_ä_s8ÿìßÿÏ¿ü ÿí”fø‡þxÝÿàoÿl®Ãí¶Ÿóõýü}¶Óþ~¡ÿ¿‚«ÃùŸÞ\«ü‹îgý›âùãwÿ¿ý²ìßÿÏ¿ü ÿí•Ø}¶Óþ~¡ÿ¿‚¶ÚÏÔ?÷ðQõx3ûÃë•‘}Ìãÿ³|CÿÕ­*p§.noÄÃZ¥hr¸%良Ø1¢bw4±ulÿËEﹿ7û<ÿÏVÿ¿¯Um¥†FÝ\Â0~HüÀp}O=jÿÛm?çêûø+yN/©Ë sKb/ìóÿ=[þþ½Ùçþz·ýýz—í¶Ÿóõýü}¶Óþ~¡ÿ¿‚§š=Ëä—b/ìóÿ=[þþ½Ùçþz·ýýz—í¶Ÿóõýü}¶Óþ~¡ÿ¿‚Žh÷Iv"þÏ?óÕ¿ïëÑýžç«ßש~Ûiÿ?PÿßÁGÛm?çêûø(æpä—b/ìóÿ=[þþ½Ùçþz·ýýz—í¶Ÿóõýü}¶Óþ~¡ÿ¿‚Žh÷Iv"þÏ?óÕ¿ïëÑýžç«ßש~Ûiÿ?PÿßÁGÛm?çêûø(æpä—b/ìóÿ=[þþ½Ùçþz·ýýz—í¶Ÿóõýü}¶Óþ~¡ÿ¿‚Žh÷Iv"þÏ?óÕ¿ïëÑýžç«ßש~Ûiÿ?PÿßÁGÛm?çêûø(æpä—b/ìóÿ=[þþ½Ùçþz·ýýz—í¶Ÿóõýü}¶Óþ~¡ÿ¿‚Žh÷Iv"þÏ?óÕ¿ïëÖGˆaò-­qlÊNKéë[Ÿm´ÿŸ¨ïà¬_KÐZ4R+¯˜FTävªƒWÐάZލÛÑ?Ô¯Ò·ÇJÀÑ?Ô¯Ò·ÇJÜæŠ( ô¬}[ýK}+`ô¬}[ýK}(“ðßümþéÿÐZ»ºá<7ÿ#[ºô®î€ -?ãÜÿ×GÿÐZǹÿ®ÿ¡ÔÔæ –'úÁõ¦éŸò ³ÿ® ÿ Šr¬Z¦‚ñ¼7éæ!tmFÒ’NÑÏôúP3RªÍn·3±’ê0β´~øÊòk'ÃZf¯¥  ¾– m˜ïB³3º¹<õQÁëõúÖý¯ß¹ÿ®£ÿ@Zb)ÿf?ý4ÿÀé¨þÌI?ð:jj±¥Íú\µ¼ZlÌ­p½gæÁøõ¨/±¦ÚÛÇqq¨ÚE¿êä’eU¡'’MkK†á-äÔ¬Òw¤m:†lôÀÎNhV7©f‰ Ž»“ù`SÕ÷(e9d˜k)oí¬¬lMÌ›<ó1ü¤îv(C'ÖŒŸZJ­g}o~³5»ÊоF0ÊpEZÉõ£'Ö’Š(¢«ßÝ‹ :æñ¸‚&¨8ÎqúPݵ¯¡bІÒà]ÙArh–5“nsŒŒâ˜/­Î¤Úxcö…ˆLWm$€sõ›VvwW,ÑPZÜý¤J|‰¡òähÿz»wcø‡ªžÆ§¤0¢Š(¨Ñ¦•wÅì= ¾3ïÀ5%EÄvúDSÊÛbŽîÞ€.I í¹ÿžpÿßÃÿÄѶçþyÅÿÿYö>)Ò5ˆ ·¹6UÝË‘yƒùw¨ÝÇhÍA¶çþyÅÿÿFÛŸùçýü?üMOš3@m¹ÿžqßÃÿÄѶçþyÅÿÿSæŒÐnçœ_÷ðÿñ4m¹ÿžqßÃÿÄÔù£4ÛŸùçýü?üMnçœ_÷ðÿñ5>hÍA¶çþyÅÿÿFÛŸùçýü?üMOš3@m¹ÿžqßÃÿÄѶçþyÅÿÿSæŒÐnçœ_÷ðÿñ4m¹ÿžqßÃÿÄÔù£4ÛŸùçýü?üMnçœ_÷ðÿñ5>hÍA¶çþyÅÿÿFÛŸùçýü?üMOš3@m¹ÿžqßÃÿÄѶçþyÅÿÿSæŒÐnçœ_÷ðÿñ4m¹ÿžqßÃÿÄÔù£4ÛŸùçýü?üMnçœ_÷ðÿñ5>hÍA¶çþyÅÿÿFÛŸùçýü?üMOš3@m¹ÿžqßÃÿÄѶçþyÅÿÿSæŒÐnçœ_÷ðÿñ4m¹ÿžqßÃÿÄÔù£4ÛŸùçýü?üMnçœ_÷ðÿñ5>hÍA¶çþyÅÿÿFÛŸùçýü?üMOš3@m¹ÿžqßÃÿÄѶçþyÅÿÿSæŒÐnçœ_÷ðÿñ4m¹ÿžqßÃÿÄÔù£4ÛŸùçýü?üMnçœ_÷ðÿñ5>hÍA¶çþyÅÿÿ\¿Œ…³óAÞ~ëgÓØW_šäükÏØ¿Þ?Ò'ú•úVøéX'ú•úVøéL¢Š(=+VÿRßJØ=+VÿRßJäü7ÿ#[ºô®î¸O ÿÈÖßîŸý«» ‹Oø÷?õÑÿô#EŸñîë£ÿèF€$5µ9¨%¤Iþ°}iºgü‚lÿë‚è"œŸëÖ© >ßUðÌw+º9-Ð{ƒ´`q@ÍZm¯ßºÿ®£ÿ@Zç¼1á„ÐüÙçò^íòãM¡P1îzŸËµoÚŸÞ]×Qÿ -1†µaw7ü%-'q<¶ž^ØÉóÛ»sŽø¤ñ“r÷ú¹²°Ç%•³â(ð$t˜±±m£§^•ÜfŒÑ}ë¡Åk‚mFëIÔí­õ8,à2¤‹2ÆÌÊu93Í.Ÿ£¬ú“ äÖª×r;][ì1—ÁåB€¹9ÀÀ®Ó4f„ì¨IÖ|QdúUÅô“ÇD"¶.¡¼¬[¢óƒ“Šít˜g¶Òl ¹}÷À‰#g9` Ö–+k{»›¨£Û5ÉS+n'vÑÇAÇ¥Yš. §gÿ6ÿõÍ•OY²éöú®€–w+º9!Qî÷á &‡æÏ?’÷o”m €ñsÔþ]¨rÙ±-ßývúW­YÝMÿ 8KIœO%¡“æ·8õÇzê¡l]ÝÇŸœÈUØ£?˜5)Wô4-ÆqÞ!ÓnûV6V.c’ÎÙñx:LI±m£§^”ýq¦Ôn´­JÞ J 8 ¨ë2ÆÌÊu93ÍuÛ_û¦¯èiä´ý- ¿Ð|˜næµVº‘ÚêßaBø<¨P'8Zþx±â{7Ò®/d¸Ž$ˆEn]CyX·Eç'ÛmCPCaW1ÄVk‚¦VÉ;¶Œ;qéC×A­5%Òk}*Ê —ߘ$b¦³[H?á"ŽÖ8SĆk¦ƒäÄÅO*A뎘®þŠVÒÞVü¿È:ßÎÿŸùže¦An,/®lõ;/54ÉDöÖЙ§ÜÜiwVR™¤Žúòh#â5³žN n‚Ÿ¦Å­ká}EêŠãrK–VÚ0§ž¸+¼Úþ†¯èh¸X•cEDPª aNój ¯èhÚþ†ù´yµ×ô4mC@ù´yµ×ô4mC@ù´yµ×ô4mC@ù´yµ×ô4mC@ù´yµ×ô4mC@ù´yµ×ô4mC@ù´yµ×ô4mC@ù´yµ×ô4mC@ù´yµ×ô4mC@ù´yµ×ô4mC@ù´yµ×ô4mC@ù´yµ×ô4mC@ù´yµ×ô4mC@ù´yµ×ô4mC@ù´yµ×ô4mC@ù´yµ×ô4mC@ù´yµ×ô4mC@ù´yµ×ô4mC@ù´yµ×ô4mC@ùµËxÅ· 3þÑþ•ÑmC\ß‹A g‘ügúP3WDÿR¿Jß+DÿR¿Jß)ˆZ(¢€Ò±õoõ-ô­ƒÒ±õoõ-ô OÃò5·û§ÿAjîë„ðßümþéÿÐZ»º(´ÿsÿ]ÿB4Qiÿçþº?þ„hCPKSš‚Z@DŸëÖ›¦È&Ïþ¸'þ‚)Éþ°}iºgü‚lÿë‚è"–ªS‰nÿë°ÿЦªÖçÞ×aÿ¢Ò˜‹E¨ÝP–£u &ÝFê‡u¨mÔånj¾ê|mó †ÃþAÖßõÉ?«[Oÿm¯ýqOä)a¾¶žòâÒ97Om·Í]¤mÜ29èxô¦æ¶‚à<1Ê@êEý™§ÿÏ·ýù_𥿾ƒM´k«–+•R@Ï$€?R*ÍUþÌÓÿçÆÛþü¯øQý™§ÿÏ·ýù_ð«TP_ìÍ?þ|m¿ïÊÿ…ÙšüøÛß•ÿ µTnu%¶Õ¬l EšìHCç…Øýs@¦Ÿe‡ŽÎÝNC,Jý*Íàf«X_A©XÅylÅ¡”e ÈéÒ€,ÑEQP^\ý’Õ§M>Ò— îs“Žãšž€ *Ž™©.¤·eb1ýžåíÎNwïW¨¢Š¯k}m{çýžMþD­ Ÿ)\uõë@(ª×wÖöMn³±Sq(†< åˆ$ÐÕš(¢Š* l­'}óZÃ#yãþµ=Q’u´¿(îÂãÌÏ,Wü(OìÍ?þ|m¿ïÊÿ…ÙšüøÛß•ÿ –êæ+;I®§b±B†G g št3%ÄÍÊH¡”ŸB2(ìÍ?þ|m¿ïÊÿ…ÙšüøÛß•ÿ µU¥¾·‚úÚÍØ‰î´kŽ¡qž@ ý™§ÿÏ·ýù_ð£û3OÿŸoûò¿áV¨  ¿ÙšüøÛß•ÿ ?³4ÿùñ¶ÿ¿+þj«ß_[i–RÞ]ÉåÁË¶ÒØç&€ý™§ÿÏ·ýù_ð£û3OÿŸoûò¿áTíüI¤ÝÄw,¯FiX^7:°VPHú µoªÙ]\E3n–[qr‹±†c'¹ý:Ñ`ý™§ÿÏ·ýù_ð£û3OÿŸoûò¿áMŸU²¶¹’Þi¶Ë¹¹eÚN#¸§ZgöÖý“¨.•¬¤Û¶Uƒ¸…ž§Ýè_ìÍ?þ|m¿ïÊÿ…ÙšüøÛß•ÿ §uâ].Îö[9d®" dH­e“nFFJ©bóX°°KV»¸‹¹8w©˜ôÇŽ1@fiÿóãmÿ~Wü(þÌÓÿçÆÛþü¯øTZ–³c¤´ y$ŠÓ’#Xáy°2x@MK§êVz¥¹žÊq,aŠ·aÔyØÐý™§ÿÏ·ýù_ð£û3OÿŸoûò¿áV¨  ¿ÙšüøÛß•ÿ ?³4ÿùñ¶ÿ¿+þjŠ«ý™§ÿÏ·ýù_ð£û3OÿŸoûò¿áV¨  ¿ÙšüøÛß•ÿ ?³4ÿùñ¶ÿ¿+þjŠ«ý™§ÿÏ·ýù_ð£û3OÿŸoûò¿áV¨  ¿ÙšüøÛß•ÿ ?³4ÿùñ¶ÿ¿+þjŠ«ý™§ÿÏ·ýù_ð£û3OÿŸoûò¿áV¨  ¿ÙšüøÛß•ÿ ?³4ÿùñ¶ÿ¿+þjŠ«ý™§ÿÏ·ýù_ð£û3OÿŸoûò¿áV¨  ¿ÙšüøÛß•ÿ ?³4ÿùñ¶ÿ¿+þjŠ«ý™§ÿÏ·ýù_ð£û3OÿŸoûò¿áV¨  ¿ÙšüøÛß•ÿ ?³4ÿùñ¶ÿ¿+þjŠ«ý™§ÿÏ·ýù_ð£û3OÿŸoûò¿áV¨  ¿ÙšüøÛß•ÿ ?³4ÿùñ¶ÿ¿+þjŠ«ý™§ÿÏ·ýù_ð£û3OÿŸoûò¿áV¨  ¿ÙšüøÛß•ÿ ç_óìÇP³ÿ„¿gþÍËó³åùüù8ßÓý)l%¹· M~%ݲåËÇ#÷jÄÿP:×wE;ÿ_ùæÞºŠãÅZtößÙðKsÿjµ´FY#8ÈäòAïÎi–ki. ÒÒ(õ”U[åŠ3ça÷†Õ½}i%ä+w·6„6wÛìÜ}¾ea¨Â=æIÝjº…ב:ϘÄeÏ÷Pq͵ò ®r3›ì-|idMmölgËß¹wìÏðç8ÎkRVÒG‹oˆ|±0x¿³þÑ»6õ}·oÎ{ô®ÎŠó›ðë÷j MþÓ-ˆ?$W$ðdóÑO@~ Ô~·óu;&Ô¬áÕãwk¨<‡[™Nåv.AÁÛŽ+Ò¨¡h¿¯ëú@õ¹ÌxÂÒÛßGoÝ\+yÓó?Îzžõ‡$]$¶ó ’|LVDnŒ6ô>ÕètS¾·þ·Oô–þ¶kõ<ÞþÒÊÒ[›9bA£Ùë03Äãtq#CÏ—s}9§k‚ÆmRÕMƆl€³k˜í÷î;¶íe ØÆ§Jôj)tþ»X?¯Æça¥[ÝxŠÂÞýÓRúLoÒ/ ÞaÀsÎ1ÍcNÚa:±€øI¦âÐÇŸ8ü㎫Œç¶3^ŸTôý:9n,íçÎ÷ ¼ƒ†n `t§}®÷ŸwåcŒÖÿ³¿µ5¯íÍÿlؿٟ{8ÙÇ“âߜ㞪i/.´ýLO{žõ´˜Oü¶‘I.£ßÖ»š*z]šýGý~_äy–˜i5«}:K cŸHf0éѲ “̓íô©®ŸMo Ø ÚGj'‡ûL¤$ª‡ýj©ØÏ?Zôz)ÿ_Åý~9ÏÛÅÓZê·v²Mº5´Œ¤Q ª‚ÍÇ~½Iª¾,M8kš,ÚÄp¶ž¢tvs±UÛœð:WAa-ï—åjWv{sŸ³ù7×r·éŠu…œ–q²KuxXä5ÆÌ¯°Ú«@lqš”B=NmÝÙ5É!žƒå ¸ó‡ýòŠàU›3iŸñ6òÿ„jn-<¼ùÇçu\g=±šôt˜ãÕP–æââl2IJ²í…IÉ ƒ““ÇZ“OÓ¡Ó–àBÎÞ|ïpÛÈ8fêJŸ×§èÿ_‰ÁëÐý£Äz”Zý“0ŒYKu ³*íÂÁÔ œðOá[~,½‚o jÖksæ\Ú$Bà„#i%Nyã§=ë­¢…µƒ­Ï9žå.u+‰m5gÖ“û2á%™‘@¶r0PùˆÆ1ž*Ο©ØéZÖ‘-ýÜVѶƒ«JÛA;‡ÞÑM;^¿æ-ýtÿ#ŠÕ.a¼Öï.-¥Ia“Ãò²:†ûVN£g>•á[´Œ¶Ÿ~¶†hÇHe܇xöl`ûà÷5étP¿¯6ÿPzÿ^I~‡q{oiãMkÏñ Òw-¾~óä?ßSÓÛÖ~·>)ÔožÆÚÚöÆ+²E+Üù`;ìë„lŸ¹éÒ»ª)çoïµ[Ÿ Ë Å¨¡¹†c2U‘käcß½køC~uO¶¿üMÖo *œ…÷J€AëÖºj)ߨºX(¢Š@QEQEQEQEQEQEQEQEQEQEQEQEQEQEËxÇ¥ŸûÇúWS\·ŒzYÿ¼¥ihŸêWé[ã¥`hŸêWé[ã¥-Q@éXú·ú–úVÁéXú·ú–úP'á¿ùÛýÓÿ µwuÂxoþF¶ÿtÿè-]ÝZǹÿ®ÿ¡(´ÿsÿ]ÿB4!¨%©ÍA- "OõƒëMÓ?ägÿ\ÿAäÿX>´Ý3þA6õÁ?ô@ËU ÖÎûØ0|cr;!ǦA丆I¤…%¥‹b+Éž™³RSWû>ïÜÿàTŸüUÙðÿ~çÿ¤ÿâªÕWû>ïÜÿàTŸüUÙðÿ~çÿ¤ÿâªÕWû>ïÜÿàTŸüU'öu¹ûÞsŽ»dÙOÔƒSGs ³M r«K E”$dgð©h¢Š(¢«_êºe©¹»—ˈ¹ÚX’x’O°§ÚÜÅyl—ïòÜdoþ*ÀøŠšŠ( Š* ËÈ,-ZæåÊD¤ÁKu8zšžŠŠ;˜%šXc•ZHH(<¡##?…K@Q@GûkJûa³þÓ²ûPm¦=wçÓnsš½@Úa7FÔJ¾xO0ÇžBçǦjZ(¨ ¹†ä9‚UFæ6*s†GÔT´QP^^Aaj×7.R%  [©ÀàsÔÓ£¹‚Y¥†9U¤„"ƒÊ23øP´QEQYï¯hÑ\›i5kœ6Ã\ `Þ˜Îs@QEQP\ÞAha¹S4‚(ð¤åAÇNMOEEÌ7!̬‚71±Sœ0ê>¢¥ Š( Š)“K¼Òº¤q©gf8 RhôUiu XÝÞ_–åÖ8ˆRÁ‹ Ž>¦¬ÐE“@]/­$³7‰uZ…,g€§wL T6šÞ“?“g©Ù\KŒì†á]±ë€hõQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@rÞ1égþñþ•Ô×-ã–ïé@Z'ú•úVøéX'ú•úVøé@ EPzV>­þ¥¾•°zV>­þ¥¾”ÉøoþF¶ÿtÿè-]Ýpžÿ‘­¿Ý?ú Ww@ŸñîßýÑE§ü{Ÿ÷ßÿB4!¨%«¡RÿX>´Ý3þA6õÁ?ôOQ‡úÓ4Î4«?úàŸú g¬O5½×‹$‚i!“ý CÆÅXgƒ‚:ph½±žÞó]‚-_U ed—Vù¼rUÈ|ä“– àäu®ÒK 9L¦KHÍ·ÍÝ;öýÝ޸힔洶w•ÞÞ&iG!( uçå>£“ǹ¡í \âuÍVâòÕVØÎ—é«vò%û[¨Ü  Ì9SÁíÞ¬µÜš®¥mo¨ÏiÓ#ºQæ,İ 08Ïzé®t}2ñb[­:ÎqÛ–mƒÐdp*޵ Éª¬QÅ%ŒpF»BO`³í>©–xö4ß[[ÿ_!/ëðþ¾gk¨jÚ’iv­tøm5fVmA­ZG,AmÁX¾08éÏ9®ûHk¤Z ùc–èD²Fr®}AÀëPÃáý14«M:{Hn µ@‘‹ˆÕú¼Ž´Ùìµq)•µª€#…¬K”tÈÐS}D–ÆM…½»ø×[–[‰£™$€¤kpÈ® @r€á¿j•…À´ðPÕ®®u ™îñzê4›FÒN#9««M2ÞG‚æöÞÒâþ%\ýœýœä¯çS}ŠÐY›1kوǓå˜ôÛÒ—K àÚ÷R¶Ñ¼Cl÷3FÖòÛùEovŒ9\)ôÍ^º·Ô-¯µ-"ÃT¸ m ¸®®˜²“#Q!Ë.à¸ïƒÒºˆt}2ÞÝíáÓlâ‚B Æ*«Ð Iq§XÞ76VóïPæÄ­¹AÈ#40èqwÁ©izmª›èÌZÊA0–í¤‘i'l¡‰#‘‚åZ‘«x€iW:¥å”BXŠÝ²<¬X†frrÛ@ßšé#Ó¬a†(b²·H¢}ñ¢Ä¡Q½@ÇÞ‹½>ËPU[Û;{•C•D)õ_…ƒúünqÖ—7šÌ^†êöéån ­ Lî1+ƒÈÁüišÐºßâ[ˆµ+øŸMŠ&¶ܰQû¼œ®pÙ÷Üh ‘HaŒ¼@ˆÛhÊÁÁíM{+Iáíaap›t`ù€ Þ¼zÐü:JËcâ‰låÔöòØ¥ÆÛ™Œ¥_yòºU¯Ï5·†îe‚WŠ@Ñáãb¤fE‘íZVŒêÒÙ›x/ YÞ ø\ç=³U`°Ôdbš¥åí©Â,Jdç ä»>”ï·õÔ[ö0@|g®LóÌ“Æð´q-Ã"¿î‡T Èî fønmkPšÃQ7iûǵ#ê û‡9AÀ©ÇCÛœ×m.e5ÜwrÙÛÉsÜ™âRëôldSWKÓÒôÞ¥…ªÝœæq ‡9ÿk¤†Î ››oO&­ªgQšXî@¼|0 ì6óòò£îâº? ßyvW÷·¥Ì7òÚÂ÷|îùW'ï6?+e,m#XU-`U€–ˆ,`ÉÈ%}:žž´}‚ÏôH8—λIýþŸ{ß­ ëËþ=¯_ø_–Ó|A °µk)uI#–öG,Öàíömè89ÝZ—³.5³s­\Ú6› }‘cŸ`#Ë $#£å²9ÈãÙ‹;QÑ‹hDs’Ò¨A‰ êXwϽC&“§LÐ4º}«´KB§Ë ^8ü)t·õ°ÛÖç+nPñMÆ£,Ö³¾‘ ¥c¸hrûÉ àŒŒž† “U¹—_µ½³3Çlú—Ù$_³‡ê¤yÂŒŒƒœþuÚ]iÖWÍ]ÙÛÜ4G1™bW(}FGÒ4Ã{öÓ§Z¼îóü…ߟ]ØÍUõOúÞÿð ¶úéoø''§‘eaâ;ûi¦mB›²yìS#|¼ã=óбáeÕòÞé¯[9­‹J­¨µÉv8!ÕJ ÁŽ}«¨uŠÞ›Ñgn.ÈÁœD¾a›±š®ÚDË4šU½•äg çœœ€TŸÎ’Óî×ï*ø¶y­¼7s,¼R#2(·¤èºÌwIä2Bþ& tÑøgÞÉ•Nzc5ÝÇmo ¸·Š’ò•\£*m/O²ŽHí,-`IÖ,Pª‡ú€9  o C¨Ãwrg¸G³xÐÇÛÚ핹ÉÜÊcn*ψ§š 4q¯™¨Ä±ˆÜ¤6AõÕa´‘iM ,tÙ‘…˜`ÞÊËϾimloKçU¹³½Áâ gå˜ØK·?•>¨]ÌiäYXxŽþÚi›P†æì¤{Èä/8Ï|â ±}^=:âý/Õ­ÛM–F?ÚMpÌûr®  ÙƒœÇ>ÕÛ:ÅoMè³·d`Î"_0MØÍG¦@Ó4:uœm2•”¤ €õ ÈúÔÛKyX«ë;œ•®,º–™jÚ¶­äÝ馿AöÙ3æ œƒœóž:t­Ï êÞw‡4ù/nU®ä‰Ž†ùv ¹Àæ¶ÖÝ$ŽE‚ ñ§–ŒeW”Ãǰ¦Çag„ÇiŒ,»}3ßMïoërRîqZ>§w.½§\Áç­ž¡Î"—Pk‚Ø—*F#>Àž¸§ÚâÿÁ·º”Ú•ÍÅýÅ”þlàìFÚr¢<àméÓ5ÖÁ¤i–·FêßN´Šá³™cUÎzòié¦iñÞ=âXÛ-Ó‚a‡lõËc&¥««ÎZ=–ZO‡þÃ}pâ{Ëq.nÞL‚‡åäœ/·J§wqö-KU:­ÄzµóC ˜› €áU }róœgž+²‡HÓ-€iÖ‘ — ¯Î:7¯=ií¦Ø½êÞ½•»]/ 9‰K£c5WÖÿ×Oò%++]ÌäuoµMuâk¥Ô/ “N†9-Ò+†TSåî9N’;ŠÕñ£8ðÜ1@’=棲H±»ær¹ d(c×Ò·ÎÕüýÖзÚ&Êæ c ëÇÓ­»<.`ˆ¼9ò˜ Ìy;}8ãŠ^^Ÿð~ñõ¹Ëø^E±Õo´ca=•´Š.m`¸Û¼,€mfÝƒ×ø[Ð"ŽÿUÔu’ŠJÖ– 48b?Þ|þVó[ÂóÇ;ÃM!$* (=@=Fp(‚m¢AqF !#P£$äð=è¿_ëú°_×Ì’Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¹oô³ÿxÿ1]MrÞ1égþñþb€4´Oõ+ô­ñÒ°4Oõ+ô­ñÒ€Š( ô¬}[ýK}+`ô¬}[ýK}(“ðßümþéÿÐZ»ºá<7ÿ#[ºô®î€ ŒÄÁ‰Ži#ÝÉ ‚3øƒRQ@æ?òù7ýòŸüM4Á1ÿ—éÿï˜ÿøšžŠ¨ÖM"”–îyðÊv.GÔ(?­K-ŵª¨–XâÀ @©ªµ‚+Þ_;(f…Ž@ا™4ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ?µ,?çòûø+Kbq*6'÷ò  ßíKùüƒþþ ç|W<7Ú<2¤Š‚PägŠí6'÷ò®KÆ ±àÉéõ€¿¢©_¥oŽ•¢©_¥oŽ”ÀZ(¢€Ò±õoõ-ô­ƒÒ±õoõ-ô OÃò5·û§ÿAjîë„ðßümþéÿÐZ»º(¢Š(¢Š* 7þ>uúî?ô©ê¥µÄ—W‚æháó$žcÜ6Æ}Á  J*§ö¦Ÿÿ?Öß÷ùÆíM?þ­¿ïòÿ[¢ªjiÿóýmÿ—ühþÔÓÿçúÛþÿ/øÐº*§ö¦Ÿÿ?Öß÷ùÆíM?þ­¿ïòÿ[¢ªjiÿóýmÿ—ühþÔÓÿçúÛþÿ/øÐº*§ö¦Ÿÿ?Öß÷ùÆíM?þ­¿ïòÿ[¢ªjiÿóýmÿ—ühþÔÓÿçúÛþÿ/øÐº*§ö¦Ÿÿ?Öß÷ùÆíM?þ­¿ïòÿ[¢ªjiÿóýmÿ—ühþÔÓÿçúÛþÿ/øÐº*§ö¦Ÿÿ?Öß÷ùÆíM?þ­¿ïòÿ[¢ªjiÿóýmÿ—ühþÔÓÿçúÛþÿ/øÐº*§ö¦Ÿÿ?Öß÷ùÆíM?þ­¿ïòÿ[¢ªjiÿóýmÿ—ühþÔÓÿçúÛþÿ/øÐº*§ö¦Ÿÿ?Öß÷ùÆíM?þ­¿ïòÿ[¢ªjiÿóýmÿ—ühþÔÓÿçúÛþÿ/øÐº*§ö¦Ÿÿ?Öß÷ùÆíM?þ­¿ïòÿ[¢ªjiÿóýmÿ—ühþÔÓÿçúÛþÿ/øÐº*§ö¦Ÿÿ?Öß÷ùÆíM?þ­¿ïòÿ[¢ªjiÿóýmÿ—ühþÔÓÿçúÛþÿ/øÐº*§ö¦Ÿÿ?Öß÷ùÆíM?þ­¿ïòÿ[¢ªjiÿóýmÿ—ühþÔÓÿçúÛþÿ/øÐº*§ö¦Ÿÿ?Öß÷ùÆíM?þ­¿ïòÿ[¢ªjiÿóýmÿ—ühþÔÓÿçúÛþÿ/øÐº*§ö¦Ÿÿ?Öß÷ùÆíM?þ­¿ïòÿ[¢ªjiÿóýmÿ—ühþÔÓÿçúÛþÿ/øÐº*§ö¦Ÿÿ?Öß÷ùÆíM?þ­¿ïòÿ[¢ªjiÿóýmÿ—ühþÔÓÿçúÛþÿ/øÐº*§ö¦Ÿÿ?Öß÷ùÆíM?þ­¿ïòÿ[¢ªjiÿóýmÿ—ühþÔÓÿçúÛþÿ/øÐº*§ö¦Ÿÿ?Öß÷ùÆíM?þ­¿ïòÿ[¢ªjiÿóýmÿ—ühþÔÓÿçúÛþÿ/øÐº*§ö¦Ÿÿ?Öß÷ùÆíM?þ­¿ïòÿ[¢ªjiÿóýmÿ—ühþÔÓÿçúÛþÿ/øÐº*§ö¦Ÿÿ?Öß÷ùÆíM?þ­¿ïòÿ[¢ªjiÿóýmÿ—ühþÔÓÿçúÛþÿ/øÐº*§ö¦Ÿÿ?Öß÷ùÆíM?þ­¿ïòÿ[¢ªjiÿóýmÿ—ühþÔÓÿçúÛþÿ/øÐº*§ö¦Ÿÿ?Öß÷ùÆíM?þ­¿ïòÿ[¢ªjiÿóýmÿ—ühþÔÓÿçúÛþÿ/øÐº*§ö¦Ÿÿ?Öß÷ùÆíM?þ­¿ïòÿ[®GÆÝlþ§ùŠèÿµ4ÿùþ¶ÿ¿Ëþ5ÌxÂxnÑà–9T1£Èô  -ýJý+|t¬ ýJý+|t ¢Š(=+VÿRßJØ=+VÿRßJäü9ÿ#Sÿºô®ß'Ô×áÏù_ýÓÿ µvÔ†.O©£'ÔÒQ@ “êhÉõ4”Päúš7SIE.æþñüèÜßÞ?%»›ûÇó£sxþt”PîoïÎÍýãùÒQ@ ¹¿¼:77÷çIE.æþñüèÜßÞ?%»›ûÇó£sxþt”PîoïÎÍýãùÒQ@ ¹¿¼:77÷çIE.æþñüèÜßÞ?%»›ûÇó£sxþt”PîoïÎÍýãùÒQ@ ¹¿¼:77÷çIE.æþñüèÜßÞ?%»›ûÇó£sxþt”PîoïÎÍýãùÒQ@ ¹¿¼:77÷çIE.æþñüèÜßÞ?%»›ûÇó£sxþt”PîoïÎÍýãùÒQ@ ¹¿¼:77÷çIE.æþñüèÜßÞ?%»›ûÇó£sxþt”PîoïÎÍýãùÒQ@ ¹¿¼:77÷çIE.æþñüèÜßÞ?%»›ûÇó£sxþt”PîoïÎÍýãùÒQ@ ¹¿¼:77÷çIE.æþñüèÜßÞ?%»›ûÇó£sxþt”PîoïÎÍýãùÒQ@ ¹¿¼:77÷çIE.æþñüèÜßÞ?%»›ûÇó£sxþt”PîoïÎÍýãùÒQ@ ¹¿¼:77÷çIE.æþñüèÜßÞ?%»›ûÇó£sxþt”PîoïÎÍýãùÒQ@ ¹¿¼:æ|^IKLœüÇùŠékšñwÜ´ÿxÿ1@z'ú•úVøéX'ú•úVøéLBÑE•«©o¥l•«©o¥r~ÿ‘¥ÿÝ?ú Wm\O‡?äi÷Oþ‚ÕÛRQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW5âï¹iþñþbºZæ¼]÷-?Þ?ÌPž‰þ¥~•¾:V‰þ¥~•¾:S´QE¥cêßê[é[¥cêßê[é@‡ØGâY¥n,}gó"¯ÿeÉÿC\Ÿ÷Ñÿâê—‡‹\ª±]Ñ€HõØùRÏÃÿß+þ”鯵*Ó¥~N¾Iþg7ý—'ý rßGÿ‹£û.Oúäÿ¾ÿ]'•'üü?ýò¿áG•'üü?ýò¿áQõj}¿þf¿]­Ý}ËüŽoû.Oúäÿ¾ÿGö\Ÿô5Éÿ}þ.ºO*OùøûåÂ*Oùøûå«Síø¿ó®Öî¾åþG7ý—'ý rßGÿ‹£û.Oúäÿ¾ÿ]'•'üü?ýò¿áG•'üü?ýò¿áGÕ©öü_ù‡×kw_rÿ#›þË“þ†¹?ï£ÿÅÑý—'ý rßGÿ‹®“Ê“þ~þù_ð£Ê“þ~þù_ð£êÔû~/üÃëµ»¯¹‘ÍÿeÉÿC\Ÿ÷ÑÿâèþË“þ†¹?ï£ÿÅ×IåIÿ?ÿ|¯øQåIÿ?ÿ|¯øQõj}¿þaõÚÝ×Ü¿Èæÿ²äÿ¡®OûèÿñteÉÿC\Ÿ÷Ñÿâë¤*ÈÑþõÛ-‚èOaíRÑõj}¿þaõÚÝ×Ü¿È忲äÿ¡®OûèÿñteÉÿC\Ÿ÷Ñÿâë©¢«Síø¿ó®Öî¾åþG-ý—'ý rßGÿ‹£û.Oúäÿ¾ÿ]M}ZŸoÅÿ˜}v·u÷/ò9oì¹?èk“þú?ü]ÙrÐ×'ýôøºêh£êÔû~/üÃëµ»¯¹‘ËeÉÿC\Ÿ÷ÑÿâèþË“þ†¹?ï£ÿÅ×SEV§Ûñæ]­Ý}ËüŽ[û.Oúäÿ¾ÿGö\Ÿô5Éÿ}þ.ºš(úµ>ß‹ÿ0úínëî_ärßÙrÐ×'ýôøº?²äÿ¡®OûèÿñuÔÑGÕ©öü_ù‡×kw_rÿ#–þË“þ†¹?ï£ÿÅÑý—'ý rßGÿ‹®¦Š>­O·âÿÌ>»[ºû—ù·ö\Ÿô5Éÿ}þ.ì¹?èk“þú?ü]u4Qõj}¿þaõÚÝ×Ü¿È忲äÿ¡®OûèÿñteÉÿC\Ÿ÷Ñÿâë©¢«Síø¿ó®Öî¾åþG-ý—'ý rßGÿ‹£û.Oúäÿ¾ÿ]M}ZŸoÅÿ˜}v·u÷/ò9oì¹?èk“þú?ü]t_n²ÿŸ¸ï±SÑW Q‡ÂeV´êÛŸ§’_‘Û¬¿çîûìQöë/ùû‡þû=¡‘Û¬¿çîûìQöë/ùû‡þû=Û¬¿çîûìQöë/ùû‡þû=Û¬¿çîûìQöë/ùû‡þû=Û¬¿çîûìQöë/ùû‡þû=Û¬¿çîûìQöë/ùû‡þû=Û¬¿çîûìQöë/ùû‡þû=Û¬¿çîûìQöë/ùû‡þû=Û¬¿çîûìQöë/ùû‡þû=Û¬¿çîûìQöë/ùû‡þû=Û¬¿çîûìQöë/ùû‡þû=Û¬¿çîûìQöë/ùû‡þû=Û¬¿çîûìQöë/ùû‡þû=Û¬¿çîûìQöë/ùû‡þû=Û¬¿çîûìQöë/ùû‡þû=Û¬¿çîûìQöë/ùû‡þû=Û¬¿çîûìQöë/ùû‡þû=Û¬¿çîûìQöë/ùû‡þû=Û¬¿çîûìQöë/ùû‡þû=Û¬¿çîûìQöë/ùû‡þû=Û¬¿çîûìQöë/ùû‡þû=Û¬¿çîûìQöë/ùû‡þû=Û¬¿çîûìQöë/ùû‡þû=Û¬¿çîûìQöë/ùû‡þû=Û¬¿çîûìQöë/ùû‡þû=Û¬¿çîûìW?â™xmä…ÖDGÚYNFOoÒºzÂñ_ü‚âÿ¯…þF€-èŸêWé[ã¥`hŸêWé[ã¥1 EPzV>­þ¥¾•°zV>­þ¥¾”Éø{þFIÿÝÖº k]M!QV¸™Š–EllBÁwۓǯç\ÿ‡¿ädŸýÑýkG\ðõÕÌw“YÞÜn^2Ðâ=¸R:\€'ëõ¥Ô} º®±w¥ù“¶›¾Æ"»æóÀl ªcœg¹§q$©nÏ"i@ùc/·?jÁ½Q“VA>s{el¨bÙ$J%“»¸,:vÆyô­I.o6ÝìÆuM¢%&f|Ýx÷<ÑÐ:•ìõ{«¥¾‹ì ·¶ŒªbYÃ#ddað?*]/T’úk»{‹QÅ«*¸I<Å9lË›¥ÙÝéÿÚä˜-¥"ÓÖd$žw7]«GíSè|öwW’‹/°YË·Ë´óa†w63Çö¦"FÖnî.®"Ó4Ñu»ùrK$â%.:ªðs‹­^ö=F;m:9f6ßh2ç`^qºsU WI…µ­‹]Ãq$“C,S"4eù!ƒÐ÷ªséowa=ö‘ý©³OXd $d‰s’~r3ß‘I_sýGßúênZëIu ÉªYi!hËÊdàŒŽµKMñ:wÛu9‘Ù;I”‚Ã;Fì—ú¨Å-–—{…¯lÞ0²J²ùâMÂ%`v¦ãéùT—:}Ô–$K^Úx^a¸|¡TƒßŸÂŸ_»þº}ÿð SëÚu´QI,΢U.«ä¹m£©*@÷ S®uÍ6Ñ"ynA'˜žZ4„§÷° ñïÒ²µ*åõÏ·Çoss –âKk³©œýåúÕiô­®íç¶²»{o², {ã‘Iäî‡>½©_˜Î Kñ[Í«ÆìYNA[¨kÚÉѬ–X­ZîâGÙº6ÒüyÁ蠟¬ÙÛGgaeoFŒ€#-¸¯ÊÜg½eßiZ†¥â1r.¦²·µƒdF#s#9ùÎ60Žƒ½}m©f÷^Š .ÎòÖ/´›×Hí×~ÀÅÆF[°Ç±©tQõ!t“[}žâÖo&To\à†ÀÈÁ…s ê‘h§J{c{gm|$dDk˜Í´t†=8J¿¡Zê:Tr¬zcGkqx [=–¶Œ™ÉÉ-ÎÐOZjÚÿ]¿à‰ÿ_‰q+²Š}4ź{KÕ”‰a݆ÌqµTž§ž8Å[»ñ•c0†æëcíVaå¹Bä 'ü •ªé÷–×ÑØ&òñŒ *+ål«N;tÎy¦ÞèWO«_Í6{wm¨b–ú‡’ä Èë¼u¥ØGJÚæž5?ìï9Úèc*»ÈÈË´qêj?i÷IoovL’#ߢÈGP¬Àü G¥éÓYk´­Ëy¼‘ ,BÇ´÷Ïç\Þ…£ªèz%¨°0Û[\‹ƒvÒ© ˜áTÙ=9½;jª_i0ß›)/œ8ŒüŒQ\ôRøÚ±9¨mõg]W[K–?f²1l b&Oy¬kV:~¡¡Çb¯ ÝÓJ/¼Õ ˆÏ¸å~öáÐ`c§5=þ›­%æ´Ö°^CÇ,rª3º~ëOzKoëÈ}K×¾(³‹D¹ÔlÉŸìò$rFÈèÊY€åHÝÐç§5nOi±ZGs,²¢JÅ#V·HäuÂmÜ*æS@Ô¥ÓõÀ–—=ËÁ$Þ] ]Ìx$ÜÝq“W5{KT¸Óµ?ìÛ¸ÚßÌŽKHïDRíla•ѱۡ4ÄtÖw¶ú…¢]ZJ²Âÿu‡ä~‡Ú©êþ›¥Ü,sºÊSÌÚ¼˜\ã'h8ZMÞ ;MX„/hÎÍ#E<þc†'’['$õëY·—0xؽ•ƒ_–Ó@+¨˜ýáç,@Å'½¿­‡ÒÿÖæËj‰%þš–÷6ïÚ;Žš@ ¡¼çðª·~#³{-@X\.mà•ÃX eøñ´àöÍgéÚõ›hI"©Ésç²0ÄfN@ÈÇ”YÚjÖþ›A“K9ŽÖHc¹I“d§/îç¸üh–ÎÃŽèմ׬þĆêéDÑÚ¥ÅÁÚv aÔœ`Øuö¥Oé/iqsö¢±Û`Ê'FPz¤ç·×2¾Õ`ЧÑâ@ñL±Ü¬­ WY”©hÝÉ0Î:v<ÚÅÖ“~bÒïa¾”Bƒíwârê² çséÖ©Ù¿ëúþ®B½—õýHéN­š=Æ£n²`ÞGÕFÕ­=.ÛQÕdÑ'šÄÙ[Ù[Þ´ªÆRÑ…Bž~qÛŠ<ÿ®£×àn[ø‡Kº¾pݘ–Uù+•êˆÚÄ{LÕõk› Û ;K$¹žì¸Q$þR®ÕÉçkVƒáùìe²·½Ó¯$k6-Ïöh2ÃËðH8ÆÞ2j}jÆ÷U“F»ºÐÊÂe7^to·# Ë­·-Eâ¢ñ'™c²q¨%„¨& ªÌ3¹X˜`Ž0? ÓÒõ?í#z<Ÿ/ì·Oo÷³»n9éÇ^•ËÛøQAEb--µ ¸ŽÈL­ä"ƒ½³œryÂæ´t¿í].÷Q‰´[‰¢¸¾y’dš »8.oJ¿¯—ü×ãÿ[Ï K9îŸ$‚Gì%#|³´:ÿ³úÖöä2_é°[ªÍ üRJ“+ð…=1Îw~¬_ìMG-þ×^Ÿ}Õqóuý:ûTÑø~êÏÆ6×VÀ($ϳ y2>2ô$gއ4-•ÿ­êßOëWú´moTÕâ†ét›x¬äfa¼%ÀŒíòýºf¤"Œø—û'ìíåc`ºÝò™‚î1ãvóœûV‡ô¹´ˆa2xIšþ6rnÖH2rNwç¡Å8ø_W] 'ó6¢²ý»ì»bÙççq]ûsܯÞÇá@?#^ç^Ô«ge¥Gr–J#µ×–͸g »HíÜŠÕÓ¯âÔôÛ{è§Œ:† ƹ›Ï ]jÚ†µ<’\Ùý¦(D.V`§puVà ñÏ©ÅtšJÊšMªMf¶r$aZ ªÆcÒ€{è\¢Š)QEQEQEQEQEQEQEQEQEQEQEVŠÿäýw_äkv°¼Wÿ ¸¿ëºÿ#@ôOõ+ô­ñÒ°4Oõ+ô­ñÒ˜…¢Š(=+'T\ÄßJÖªW‘oB(‹ÐP§ˆ¦b6dàßÚ»9=_þý·øW!¨Ú]ÛÊòÚK$2‚Èpq\åÅω•ŽÍVè¨ÿ C=KÎOWÿ¿mþyÉêÿ÷í¿Â¼“íž+ÿ ½×éþ}³Åôºý?€=oÎOWÿ¿mþyÉêÿ÷í¿Â¼“íž+ÿ ½×éþ}³Åôºý?€=oÎOWÿ¿mþyÉêÿ÷í¿Â¼“íž+ÿ ½×éþ}³Åôºý?€=oÎOWÿ¿mþyÉêÿ÷í¿Â¼“íž+ÿ ½×éþ}³Åôºý?€=oÎOWÿ¿mþyÉêÿ÷í¿Â¼“íž+ÿ ½×éþ}³Åôºý?€=e]¢ ¸áòrŒ06ŸQïR×ý³Åôºý?¶x¯þ‚÷_§øP¯Q^CöÏÿÐ^ëôÿ >Ùâ¿ú Ý~Ÿá@½EyÛÙâ¿ú Ý~Ÿá@½EyÛÙâ¿ú Ý~Ÿá@¯•¤6†Ò+Xc¶ ¯’±€˜=FÞ•*"ÆŠˆ¡QFT`è+ÈþÙâ¿ú Ý~ŸáGÛ‘ÿ?à4¿üMð±ôùø›ÿ¥ÿâhѼÅõ£Ì_ZóŸøXúGüüMÿ€Òÿñ4ÂÇÒ?ç¼ßø /ÿEÀôo1}hóÖ¼çþ>‘ÿ=æÿÀiøš?ácé?óÞoü—ÿ‰¢àz7˜¾´y‹ë^sÿ Iÿžóà4¿üMð±ôŸùï7þKÿÄÑp=Ì_Z<Åõ¯9ÿ…¤ÿÏy¿ð_þ&øXÚOü÷›ÿ¥ÿâh¸æ/­búלÿÂÆÒç¼ßø /ÿGü,m'þ{Íÿ€Òÿñ4\FóÖ1}kÎáci?óÞoü—ÿ‰£þ6“ÿ=æÿÀiøš.£y‹ëG˜¾µç?ð±´Ÿùï7þKÿÄÑÿ Iÿžóà4¿üMѼÅõ£Ì_ZóŸøXúOü÷›ÿ¥ÿâhÿ…¤ÿÏy¿ð_þ&‹èÞbúÑæ/­yÏü,}'þ{Íÿ€Òÿñ4ÂÇÒ?ç¼ßø /ÿEÀôo1}hóÖ¼çþ>‘ÿ=æÿÀiøš?ácéóñ7þKÿÄÑp=Ì_Z<Åõ¯9ÿ…¤ÏÄßø /ÿGü,}#þ~&ÿÀiøšôo1}hóÖ¼çþ>‘ÿ?à4¿üM'ü,#þ~&ÿÀiøšô1}hóÖ¼ãþF‘ÿ?à4¿üMð²4ùø›ÿ¥ÿâhÑüÅõ£Ì_ZóøYGüüMÿ€Òÿñ4ÂÈÒ?çâ_ü—ÿ‰ GóÖ1}kÎ?ádhÿóñ/þKÿÄÑÿ #GÿŸ‰ðOþ&€=Ì_Z<Åõ¯8ÿ…‘£ÿÏÄ¿ø 'ÿGü,þ~eÿÀy?øšô1}hóÖ¼ãþNÿ?2ÿà<ŸüMð²tùù—ÿäÿâhÑüÅõ£Ì_ZóøY:?üüËÿ€òñ4ÂÉÑÿçæ_ü“ÿ‰ GóÖ1}kÎ?ádèÿóó/þÉÿÄÑÿ 'GÿŸ™ðOþ&€=Ì_Z<Åõ¯8ÿ…“£ÿÏÌ¿ø'ÿIÿ +FÿŸ™ðOþ&€=#Ì_Z<Åõ¯7ÿ…•£ÏÌ¿ø'ÿGü,­þ~eÿÀy?øšô1}hóÖ¼ßþVÿ?2ÿà<ŸüMð²´oùú—ÿäÿâhÒ<Åõ£Ì_ZóøYZ7üýKÿ€òñ4ÂÊÑ¿çêOü“ÿ‰ HóÖ1}kÍÿáehßóõ'þÉÿÄÑÿ +FÿŸ©?ðOþ&€=#Ì_Z<Åõ¯7ÿ…•£ÏÔŸø'ÿGü,½þ~¤ÿÀy?øšô1}hóÖ¼ßþ^‹ÿ?Rà<ŸüMâ^‹ÿ?Rà<ŸüMzHp{Ò‚ yÜ_ô"ÀÇ[y?øšêôÍn×R·YígI¢nŒ‡?‡Ö€6¨¦#îú(¢Š*­Ô›šµYz›í‰¨ɾ(ê²²ÙÙ+‘Œîà»qŒÿßYüy¾êë~"J_P´ç “ÿe®3uK6ê|qË0Å’×|…¶Åõ8è=ÍVÝ]7†¼U‡esm=¡¸¶T…OÏ$œ…ë‘ÇJç÷Qº»­I‹S³ð½àÓaœIw?ÛmÔƒóy˜=3ÅGb¶:~“¨]¶“§Ý?öáµæá#8á}1Ú‹koë§ù‡Ÿõ×üŽ'u«¾²Ò´ë_ëšzéblc<œsÇZ¡ñœêúyxDtØwD«´!Ë| vÇLPö_×AÛs™ÝFêô[-GÔ´Û}A­íbþѲ[(QbPëçËØü£ž´ÇÓ´øgÕRÇH´¿¾Òm`…-Ì;–W?ë$e¹ŸÞ—þ¿®Ÿx–¿×õý#ÏwU¥Óî[I}P*ý•&ÝÎò3Óé]Âé:l$y_KµWþÅ7²ØÈ›£Šn8Úzj††»áÙ[P·´·ŽMPí¡O*D»Sà××ñ¥ý~6ëð¹ç[¨Ý]‡mãŸZÕ Ô4HVðºÇüKÌÖÖÍ“ò”^(k©|9¡Å›–ϧÀøÛ’Ñ6@ÛætQÓsO}ƒ©ÆÀÍ[Ôl.´›Ö³¼@“ª« ŒŽEwö‰ioáR9¬mòÅ!+qm`mÁ$€på™Ç^Ÿá¡â+T¾¼Ö’ûH·K[}ëV²ùbSn±ª ^¯É8êN&¹Ý.ÛO»’EÔu_ìäP 7Ù^mçÓ x§mZK•·SàŽK›ˆà… Ë+EÄÄà ×ð•¥¥ß,í&Tºµ2H?xŸ,€+JŸ 85·,VZ…¶ƒ©®›gi3kÖDµ‹dn¸Êúñüè]?¯!>¿×õ±ÇÜÁ5Ô¶×1˜ç‰Š:Ò>œQmmsy!ŽÖÚ{‰ÉHcg zà]ûÙÇ ÝÕ§‡í5+•ÖZ–¾nØð Àw“× ÍU%Ô>0Õ¬´kÛ«-.ßË–ëì¬Å‡ËŠ’r[ü1Ikk”Õ¯oë[3‡ŠFŽDdu8epAЃғuiøªþ}GÄwWsÙÍfdÛ¶)«í{œV6ê¨6ê7T;¨Ý@‰·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›u&ê‹u#1Øq×¥g¦^ß§™ "Eœ•°Ó¹¨ïlo4ò¾z.Æ8‡*O¥o‹‡F–Â2Š ÎW¶0 A};>™p—ÈH ņ{u½bZ[]_Jc·Œ1y‰À_©«Wz>¡g •Ö)FXÄÄíà⥲™bÑ@St ÈÁ¶Ÿ¾QÓŠ· ÌIz‚ ƒ"˜Ûpó‹Ž«Ž¤ûÐ qu:Ao’G8U^õ¶ÞÕÖ0}•ÛêÖ_›õýi<:ÑC}|É€GËû»Ž’ÖŒWwkÞ²o;¨ÜÇѽ®p?à\Uñ2„ÜcÐõð˜ u)*“o^Ç(Û‘ÙJ:œ2°ÁÒ»?‡œ¶ºÜ¶ÁÏ“,eŠçÀŒÈšæüDèÚ±uÆæKÿ½ÏôÅ\ðd…|B„pÿJë¥>x©w<Úô½•ISìÏ¢¬fó#5 +GrЭmŽ•©ˆ´QE¥djßê[éZç¥cêßê[é@ñÿÄÂÛþÿ²×ººÿˆñÿmÿÿÙkŒ¤ÆIºÕ8êiÌŽ˜ÞŒ»†á¸‘ê=©n×T¿²FKKû«tc–Xfd õóL×BºœDdóJy‡iïc?{ß­U¢€4YÔâšY£ÔïRYqæH·ñÓqÎOãM·Õu 3!µ¿»€Èræ)Ù7SƒÍQ œ д¾ºŽYeŽêt’`VWY¨cžA÷¢ÖþîÅËÙÝÜ[; †VBGÔªÁ‘ö8*ãøX`þT™  qê‘]¨îîå²LË+9ëóg4Û‹Ë‹É|Û«‰§—ß3—l}MV¢€-%õÔqÇ]N©ù‘ªÈÀ#ÿx ð}Ç4±ßÝÃt×Q]ÜGrÄ“2JÁÉ=rÀ皨N:œQ@Æ¡x³Ë:Þ\ ¥R²H%mÎPÇ9 ûÓVòá-þΗ,ÄžPrpþ,tϽV¢€4W[ÕRi&MRùe—d‹ráŸ2s“øÕë_]Ùx~m2Ù§Šin¾Ònã¸eº^99ÆsšÀ¢€.A¨ÞÚLó[^ÜÁ+ýù"••›êAÉ¥òÝ›µ¾ºG¬âfóü 9ªTPøõmF+™.cÔ.ÒâO¿*ÎáßêÙɪÒM$Ò´²ÈòHÇ,îÄ–>¤žµG(Ί.70ž™=¨txœ¤ˆÈ㪸 ÀзUí ϱýí—e'>GšÞ_¯ÝÎ:Õ Aèihüº¾£=·Ù¦Ôo$·ÀSÎì˜>RqI>«¨]@ ¸Ô.æ„tŽYÙ”~â¨Ñ@êxà’žU†\y‘«¯Ž™=ê=Õb ©­fY­æ’WîÉ•aÛ‚9ñv±¤kwp9<ÔQ+a_ûÀg†÷ëU™1½w Ãp##Ô{Sh¡ƒÅwÖÚ ú|RÜ¥Ä×_ikŹ`çå©îsŒç5™oªê#Zêp4§2§d.}N=OZ£EZ¹½¹½›Î»¹šâ\c|Òlzdš‡uGEIºÕ&ê7TtP›¨ÝQÑ@n£uGEIºÕ&ê7TtP›¨ÝQÑ@n£uGEIºÕ&ê7TtP›¨ÝQÑ@n£uGEIºÕ&ê7TtP›¨ÝQÑ@n£uGEIºÕ&ê7TtP›¨ÝQÑ@n£uGEIºÕ&ê7TtP›¨ÝQÑ@ Ô%pÊ:qŠI¯^ãØÎvŽõJŠ» Û[±1¿ªš–]RiWní™ï’MfÑ@ ¹ì¯›xéÛÐÕöñ›‘÷²OéëXTVU(S¨ï5s¦Ž2½¸Ó•“'–fšFwbYŽI=ësÁ§> O÷ô®rºÈŸîéZ¥mÌÛnìúDÿR¿Jß+DÿR¿Jß*„-Q@éXú·ú–úVÁéXú·ú–úPƒ|CÿûoøþËY~‚ ïïLéhÞ]Œ²#]Ä$c A§ÐÖ§Ä?øÿ¶ÿÿìµËØêéæäĨßhàmàœ+u#ž´ŸPìnD­q>£¶îÀyzlŒ[K·X‘Æáò°1®,ôæ­M¤.¯}f$r°ÛèðÌádD-€PÎv®Išæ,¯å°"%CöˆÜ H'üUèüGyÛ¿•lþU·ÙX:&‹²¸Ï8õ-xÄ“@tÛ ,äq(µur‘¾1¹Níà sóQö¯ýtÚß×SkÄQ¹ñT‹<ª‰,Æ6í|ç¸ÏÄVwŒ#Óá×·šL8.¾_A÷T(+ø“Tîõë«Ã©Rý èÒíR6í'yã¯|Ó5Maõm=¥ª\ y—«—78íØ ”´_×b¯©[:T_èú¡†3y ¨$Ú7Ÿ}3×Nì³XÕkN¿›LÔ!½·Úd‰²Œ«„Ü~µ^B:K 8­ï´KÏÙïZ nn."Uóô%S$ÇûF£Òü/iq§Ù\^Ü4fð±WPD°(b¡™\î~A8\qïY ®]uõr#k—f$vÀ®Ï@ö¶úãÇa•Å•äQ0›„bÑg“‚¬8Ï89¼ÀÔÓü-k}s§w"[O¾|¡”ì•X ã¡-^ÍÖ²5 5,4û¤WG’6ÆCm\qœ’­úQµyo£K¥ÆTA$¢RØùàC…'ýÑMÖ5{oPkÛ¡‘”.ØÆ;×êi¿ëúþ¶…tž¹FvòØiÓ¬6sÌ­5œnû•Ib¹<ö®n­ØjéÏ3¨Æh^Þ Â°ÁÇ=hèÅÕBÃM¸[ õ6–õ#˜ÖÆ(⊠°»~lN>¹¨N‹e§[M6¯%Ëm»{DKBªILnbX9çÔU{/ÜY[A µ´¸6Ì^ÚIã,ÐsòòçœFi¶ºôðE,7ö×ÑI/žRé 'v ä÷ìhôþ¿­GëýZ“éßÙZGˆ¬Ä¾j$–¬ŒnV%”‘ØàŠ—Æú\vwóÞ\<¾}ㆶXñ°"¨ XrsÆÑ‚:žÂ±^¼›ûGÏMý¡7zô*r¥qŒc·lv§Þx†òý/c¸HZ;§Y m8‰Ô¹9à0zä~—õø¿}me ñ!ÔEÍç•5°†D—‹að«èö‡Ã«¨@——R•c#E*m¶Ã` inœîàsLÿ„–å¯/§žÖÒt½ÛçA*6ÂWõïQA­µ­¤ÐÛXYE$±¼Mpªûö7QËmèqÓ8¢ÚÜÊ«zTi.±eˆ®q²°È °È"ªT¶Óµ­Ô7xdPÝ <ÕE٦ɒºilzŠxƒVÍÞ—aÈÀÈîzb±"Ö."Ôî¯Õ"2܉C‚Ñæÿ´qRI®=Å‚[\ÙYÜ £! G ƒZ:_ˆ‘ ­}³´Ö´ˆ4lDܪø>™ç­dj:¬ºˆ 0[Á•Š„Lœž¤’IêI4=ÿ®ïþ–ß×dQ¢Š)€QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEWCàÏùSýÃý+ž®ƒÁŸò0Çþáþ”ô&‰þ¥~•¾:V‰þ¥~•¾:UZ(¢€Ò±õoõ-ô­ƒÒ±õoõ-ô =Óôû=SÇÚ^ÛCq ÚÌv˸4g pxÆ}Ív¿ðƒøPuЬïÕrZü”‹cÿN³ÿ4®ÇW×ãÒuK i¢‘¢ºY xãyvŒ*‚NsHÿáðŸý¬ïÕðƒøOþ€V?÷ê­\ëúuÌv÷IÉ·k4ËtöíúY‡ÅVÖ:þ©g©\yPÀbòˆ…ˆPË’Y€ ÷8§`,ÿÂá?úXÿߪŠçÁž‚ÖYáÐìD¥ùX à‚ X×uñ£[Å*YMt$eÓˆÐ3É~ø$þµ¥|â[t?é‹ÿè&‹•ÿ¯‡è¥ÿàáGü"¾ÿ —ÿ€qÿ…kÑHfGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ©4ÑÛÁ$ò¶ØãRîØÎ&¹ûíBëÈR]¬)…ñæÀ ›yùsÆêƽxÑ‹”„Ùsþ_ÿÐKÿÀ8ÿ±Ýiÿ?PßÁGÛ­?çêûø(z*·ZÏÔ÷ðQöëOùúƒþþ žŠƒíÖŸóõýü}ºÓþ~ ÿ¿‚€'¢ ûu§üýAÿn´ÿŸ¨?ïà  è¨>Ýiÿ?PßÁGÛ­?çêûø(z*·ZÏÔ÷ðQöëOùúƒþþ žŠƒíÖŸóõýü}ºÓþ~ ÿ¿‚€'¢ ûu§üýAÿn´ÿŸ¨?ïà  è¨>Ýiÿ?PßÁGÛ­?çêûø(z*·ZÏÔ÷ðQöëOùúƒþþ žŠƒíÖŸóõýü}ºÓþ~ ÿ¿‚€'¢ ûu§üýAÿn´ÿŸ¨?ïà  è¨>Ýiÿ?PßÁGÛ­?çêûø(z*·ZÏÔ÷ðQöëOùúƒþþ žŠƒíÖŸóõýü}ºÓþ~ ÿ¿‚€'¢ ûu§üýAÿn´ÿŸ¨?ïà  è¨>Ýiÿ?PßÁGÛ­?çêûø(z*·ZÏÔ÷ðQöëOùúƒþþ žŠƒíÖŸóõýü}ºÓþ~ ÿ¿‚€'¢ ûu§üýAÿn´ÿŸ¨?ïà  è¨>Ýiÿ?PßÁGÛ­?çêûø(z*·ZÏÔ÷ðQöëOùúƒþþ žŠƒíÖŸóõýü}ºÓþ~ ÿ¿‚€'¢ ûu§üýAÿn´ÿŸ¨?ïà  è¨>Ýiÿ?PßÁGÛ­?çêûø(z*·ZÏÔ÷ðQöëOùúƒþþ žŠƒíÖŸóõýü}ºÓþ~ ÿ¿‚€'¢ ûu§üýAÿn´ÿŸ¨?ïà  è¨>Ýiÿ?PßÁGÛ­?çêûø(z*·ZÏÔ÷ðQöëOùúƒþþ žŠƒíÖŸóõýü}ºÓþ~ ÿ¿‚€'¢ ûu§üýAÿn´ÿŸ¨?ïà  è¨>Ýiÿ?PßÁGÛ­?çêûø(z*·ZÏÔ÷ðQöëOùúƒþþ žŠƒíÖŸóõýü}ºÓþ~ ÿ¿‚€ Ûo¶X\ZïÙçDÑîÆqFqø×!«ÛÏ¤Í ËqÂevb(AR¾¬s÷¿JëþÝiÿ?PßÁUîN“y·í_bŸnvù»ëŒ×.+ ñ³ß£F“¥Ï¨ÛÛߨÒ/?w–!$‘œ Û»íôïV|eÿ?õø¿úÖÄ3éöñ,PKkkÑ•@übø¶HæÓlš7W_µ¯*r>ãÖ”(FŒyb XÓÑ?Ô¯Ò·ÇJÀÑ?Ô¯Ò·ÇJÜ¢Š(=+VÿRßJØ=+VÿRßJã¼Us¯Þ}¨Þ}«È謽¯‘—¶ò=syö£y¯#¢käÛÈõß5ýhó_Ö¼ŠŠ=¯{o#×|×õ£ÍZò*(ö¾Aí¼]ó_Ö5ýkȨ£Úù¶ò=wÍZ<×õ¯"¢käÛÈõß5ýhó_Ö¼ŠŠ=¯{o#×|×õ£ÍZò*(ö¾Aí¼]ó_Ö5ýkȨ£Úù¶ò=wÍZ<×õ¯"¢käÛÈõß5ýhó_Ö¼ŠŠ=¯{o#×|×õ£ÍZò*(ö¾Aí¼]ó_Ö5ýkȨ£Úù¶ò=wÍZ<×õ¯"¢käÛÈõß5ýhó_Ö¼ŠŠ=¯{o#×|×õ£ÍZò*(ö¾Aí¼]ó_Ö5ýkȨ£Úù¶ò=wÍZ<×õ¯"¢käÛÈõß5ýhó_Ö¼ŠŠ=¯{o#×|×õ£ÍZò*(ö¾Aí¼]ó_Ö5ýkȨ£Úù¶ò=wÍZ<×õ¯"¢käÛÈõß5ýhó_Ö¼ŠŠ=¯{o#×|×õ£ÍZò*(ö¾Aí¼]ó_Ö5ýkȨ£Úù¶ò=wÍZ<×õ®?Á?òýÿlÿöjëkXÊêæ±|Êãü×õ£ÍZeÊæ¿­kúÓ( ù¯ëGšþ´Ê(þkúÑæ¿­2Ššþ´y¯ëL¢€æ¿­kúÓ( ù¯ëGšþ´Ê(þkúÑæ¿­2Ššþ´y¯ëL¢€æ¿­kúÓ( ù¯ëGšþ´Ê(þkúÑæ¿­2Ššþ´y¯ëL¢€æ¿­kúÓ( ù¯ëGšþ´Ê(þkúÑæ¿­2Ššþµçº–§6«ckq2FŽnŠŸ,‚rO?1®þ¼Õäkÿ_ÿ -c95V+×ô:)Â.„ä֪ߩÜhŸêWé[ã¥`hŸêWé[ã¥ns EPzV>­þ¥¾•°zV>­þ¥¾”ÉøsþF—ÿtÿè-V|mÿ.?öÓÿeªÞÿ‘¥ÿÝ?ú UŸËý´ÿÙk:Ÿ "§Àr]*!s £$ô…KU’ÍàÊU{X+u9Õº–j½äíonZ0V!#SбéV*Õ›]\Ä]ÊÃ'är­¸ñÛÛ?%¾¢^d–wæÙ]ÀY*ê;0àÕŒÕ;K6´¸›k–†L0 Ř7C×ð©áµ‚ݘà F_ïÍ7`v,É n|õÀd“è*¢]þúWu‘Qv¢ÆG%ºô…OqŽñ<{KFÄáŽãµvÈ fQ+HA$‘ŠjÖ)ZÄÂñå[xB„ ‚j;«¬C2Å»ÌVTçÓð¤6“ ²†F›ÌÞÀä/Lcð¦ý–àm`bg™@<`v¡$šë| ‰¾9w¬xn£?ýj‘¯#Y6ív‚åÒ˜-$’V“ÌÞùàtÇJlM¿8W@Å.Ùçýž™§ hX*Ò˜ÑÀ8gm«Å;:¡ófm¼g徜~µ$Íh‰CX†îäç¥6+IÊWÄPm=ÏÊ–¡*],„•G1ŒþóoÇ›©,ïÌÝ—Ðÿm1*EQ’1Á>¼úR­äo"¨WÚÇj¾>RiVyùO.SÙ;‡¦Cm0òVR›!(LüÇÉ£@КK€’ùb7‘ñ¸…øšk^ƲmÚä\”Ú›4ËpŽj ݎ⣂ɣ—ç è°%Û<ÿ³Ó4$‚Êı\<—2¦ÂcVÚcãœóGÚí¦%BȪ2F8'ןJ[h¥‡z¾Â…‹ääçšjÅ:M;/–VCI9¥„féÀCé<ÉH ´´uÇ>Ôóq¶æGv+qŒ©õ?×üi«k,FÜÇåŸ- ÄŽ¸É•ÙÉ œ_Õ×’:cƒùSÐzÃp&f]ŽŒ cƒÓùTÕ´&%bÈ¡ØòCÏây©êúŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( «_I4V¬ð©$˜’£¹¹«5SQŠâk7KfûŽ›‡¦{S[ng¶«;ÇÆW~xeóOaŽÞõ´…Š)pcpkŸmò8â’)˜‘¹s€ž„jß@Â5Á˜’2j§ËЩòô:ÿÿË÷ý³ÿÙ«­®KÁ?òýÿlÿöjëkZ ½?…QVXQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEWš¯ü­¿ëíÿô¯J¯5Où[ÿ×Ûÿè)XOøÐùþ‡U/÷zž±ýNãDÿR¿Jß+DÿR¿Jß+ äŠ( ô¬}[ýK}+`ô¬}[ýK}(“ðçü/þéÿÐZ¬øÛþ\í§þËU¼9ÿ#Kÿºô®å;ÔÉ]XRWV<ŠŠõÖ–4dWuVs„à±Æp=x‰ËMØÉÈz’p+?cæeì|Ï"¢½sɺÆ|èWÛË'ŽáM0ÝÿÏÄ÷äÿñt{/0ö>g’Ñ^¬Ëx?åæßþüþ.©jWÖö7* “ìò¢c$¤ŸLþ){/0ö>g›QV?á,ñ+) |E8+$ØÁç (5v-Ä—<ÛÉã9ëoj¬=÷£~Ÿ•BI»Øy™TV¶£¯k/hí§ê×bæ(ËD‚c&9ÆÑ$œ``ŽOá^coñ;Çñ^¼º¬±Ê„nŠ[(Q‡é³<еM=˜ nÎ⊥¥xïű8“Q›qŸËF[8È'  d’Iï[I¯ø±®n#}CÈHU›ˆ¡^pt0ê¤uô¬š’Mò»zÁ/êñº‹š»)QOÿ„ÓÄ }䶤¬e¸Š2Ns·ÐÔ—7×LEã½FÑ c·<Žý¹ž.’Ñßîÿ‚oý7³DT 㿎š8ÿžÿñ5™«üGñ=›Hš¶Ö럳ÄxŸáôª†&œšJÿwü<¾kª6¨¬¿|AñF±¢ÏqªyÒ­Ë o³Ä¸]ªqÂS]?ü%šßüþÿä$ÿ íö>g7±ó3(­?øK5¿ùýÿÈIþÂY­ÿÏïþBOð£Øù‡±ó3(­?øK5¿ùýÿÈIþÂY­ÿÏïþBOð£Øù‡±ó3(­?øK5¿ùýÿÈIþÂY­ÿÏïþBOð£Øù‡±ó3(­?øK5¿ùýÿÈIþÂY­ÿÏïþBOð£Øù‡±ó3(­?øK5¿ùýÿÈIþÂY­ÿÏïþBOð£Øù‡±ó3(­?øK5¿ùýÿÈIþÂY­ÿÏïþBOð£Øù‡±ó3(­?øK5¿ùýÿÈIþÂY­ÿÏïþBOð£Øù‡±ó3(­?øK5¿ùýÿÈIþÂY­ÿÏïþBOð£Øù‡±ó3(­?øK5¿ùýÿÈIþÂY­ÿÏïþBOð£Øù‡±ó3(­?øK5¿ùýÿÈIþÂY­ÿÏïþBOð£Øù‡±ó3(­?øK5¿ùýÿÈIþÂY­ÿÏïþBOð£Øù‡±ó3(­?øK5¿ùýÿÈIþÂY­ÿÏïþBOð£Øù‡±ó3(­?øK5¿ùýÿÈIþÂY­ÿÏïþBOð£Øù‡±ó3(­?øK5¿ùýÿÈIþÂY­ÿÏïþBOð£Øù‡±ó3(­?øK5¿ùýÿÈIþÂY­ÿÏïþBOð£Øù‡±ó3(­?øK5¿ùýÿÈIþÂY­ÿÏïþBOð£Øù‡±ó6¼ÿ/ßöÏÿf®¶³´¹ï´;k›—ß+ïÜØ8b:aZ5¤U•b¬¬QE2‚Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¼Õ?ä oÿ_oÿ ¥zUyªÈßþ¾ßÿAJÂƇÏô:©»Ôõêw'ú•úVøéX'ú•úVøé] ´QE¥cêßê[é[¥cêßê[é@Ÿ‡?äi÷Oþ‚Õܧzá¼9ÿ#Kÿºô®å;ÒÎë>¼Õµ4¼¨€E!E¹&#× ïç¾; Ý"E·…epòŒ3*íî8ÉÅA6³¥ÛLÐÏ©YÅ*ðÈóª°ú‚jv–9 ŠXdÞ2®‡!†áÈ4Ä\w¥˜€ d“ØVƒâ5×~Ò>ÊöÍ »dË }ɃÇlUÛ^Þè²ÙX©ó.Yaw —;s蹬¨ô-CL×tûØo&¾ˆFmgY(ü¸±•#j®pÀzžx¡oý_Ó·õýH±k¯ÝrçNûð¬1 Y†Ó'ÌW…ëŽ:ž¾”ÏK<:$ÒÛ@÷ Í1‚ZFK…’x§ýŠàxºkãú3Y$Aò>ðv$c¯B*mNãì–ñÜìgòY䨽[Èp?*]u×C–k«/¯ªj:UêI&Fˆ(Ý€Ë,ƒÎqŒ1è*3X‹ZÓ–óKΕâ.–âebì3ÆGwéß=wÄçÅ:Α¦ÿ¡Y¶÷Í8—qÚ¡»ª“×®FAÈ8Ÿ ¡ˆ·ˆžñdXŽÏ1.JÆÈà±|ƒ* ŽÁ8ÅLjsÉò½ŠqŒaª×¹ —ˆ$Ôµ'zˆÓ­&F)å¼ñ€Y7s€s`)ê±[¼—Rö©`“gšòŒ@Üçœ+@ÏÌjÕî™ao=”0¼²Fì±ÜFËó “+ûÁ÷†íÎ1ÅX¼ŠæÑ’Ý$gIÛhQäôÚsœ–ÏOj¸JTéJUbÓm¤šÝwL¸Ç[OånmnŸ[lËÞIu[=B(%JŒæÁf;”Œ‚m '^JÓ‚þ-Fâʦk³nÈáÐn';”3 +‰ÈÉàæ³g:^Ÿ£iÒYéåî¡L\ÜH6|äu;ŽàÛÂÿ ަ¹§ñ-Õž­P!eæ’YÐóa¸ã–:qXA:׫)Ê)_–ìºù=üŒªS6¹,Ûv}⺴ͭvÒK›ù0ð4ÉQáò¨ çžg=ê½¼†B.®e’.ë±zçŽ@ÍkIn”M,wO¸ Ð;pFzàÊ5ý›@Uç´ÛŒä:FµàÊmÉÝ~¶¢’²3Þ3«ñêEr0CfW8ÎTõÓ5èøµžÔ·ˆ†PDÛ‘ë×¥p3K)µlÀ–[VuÚÿuÔ3tÇ¥k„wªˆ­¤á Ç†î8ëvßúWg\‡Ã‘̾—Mÿ ¥uõôŽQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEzW…¿äY³ÿÿèmZõ‘áoùlÿàúV½!…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@y²Èßþ¾ßÿAJôšódÿ5¿ý}¿þ‚•„ÿŸèuRÿw©ëÔíôOõ+ô­ñÒ°4Oõ+ô­ñÒºAh¢ŠJÇÕ¿Ô·Ò¶JÇÕ¿Ô·Ò€9?ÈÒÿîŸý«¹NõÃxsþF—ÿtÿè-]Êw¤3VðÅ®­¨AvîÑã‰ÑGúåôúúdzc^U j FÌ*ZŽoºŸõÑ?ô!LE£Ln”óLn”VNµ‡â˜’ÝC!ÄrC:±ÈÞPzñùñ[’u¬Ý^Ù/l…¬™Ù9’6ÁÇ €óƒŽ¾”€ð3G±†Âwû–úl³ÃM"™Pl;ÙŽÍÿ(fÂõÆŒîkŸÙz‚XÜhÚ¥þ®¶û-Ô_¿•k‚Âe@ÜÒp  Jí,zy¼<ºU Ò®-¡1\l"BêÛŠ¦wžp7 xÉgŒðKœmA™ì¡GxmþP‘ üìʼí»}}kÊ4äû½~ãH§%~‡?áø{ÄúÔëâ{8-lì´áä7žÈ  fgb¡}HÃpFô^.Ð$¶¹Ó4 :m?uŽÀI"ƒqù"ÜHÞÌcr‘ÉSŒŒ0åõ|=§è‹ªfÝÅ{qpŠòD£2Íó)Æ2vA9Éàsk©Üù‘Û óngÙ4²KÎÙ .ÜüÁ 9$d9ÈÈ×Ò©8©½?.®ßÖæn8Ón?á¶š¼–Ú¾¤e»º¸D޳­ã! ´mË‚?ƒ `rNj¯ü#z=”^p‰îIÍ1ÞѰlå{s‚2}1Þ¯7ˆö?3Ë!Wy#R22¦Gé’†';rAæ¯Ú¡Õ|1ö¹-¦ŽÞhÕž ràpÙR1Æ0Û²>\“€M*ü’÷ þB¡)ÁÛñÐʲТYKɧ±™£È‡`À2‚@ço±'¿9«‰¦ê pŠ8c!`šD"1¸±l3È$óÐäŠéôë[ 2Ĥ%1!BYÀÞç¯'©${úšÅ¿º¹3-Ì/{å:²›€«ÚÛŽrq׸ªÃÙÁr¯*¯–];áèÛ ÜK¦ÿÐRºÊæ< ‡G¹EH>ÔÄ0 çäOJéëÕGžÂŠ(¦ ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(Ò¼-ÿ"ÍŸüÿCj׬ ȳgÿÿÐÚµé (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+Í“þ@Öÿõöÿú W¤×›'ü­ÿëíÿô¬'üh|ÿCª—û½OXþ§o¢©_¥oŽ•¢©_¥oŽ•Ðr EPzV>­þ¥¾•°zV>­þ¥¾”ÉøsþF—ÿtÿè-]Êw®ßò4¿û§ÿAjîS½!ލæû©ÿ]ÿB%G7ÝOúèŸú¦"Ѧ7Jy¦7J«'ZÊ×&–ßMi¡•b–1+¤Ž@Â' Œê jÉÖ°¼W0·ðÝÜÅU„pNåXd[ÊpGzLg'§øºÊK]Nf–þ6Ü$˜‚žc#ò¨$/ùCcv;Õøõ/ ÇfæIíî®n"lÇ óI Õ Û¹l|Ã$zqâ÷~&ŽÖê&‚h¯"  #+dÁ »HÀãŒý+2}~=Eš”"Ë> ÈØÆIÏ\q\Ê·³ó±¦’zhvÏi ìÙ@Ç0¹ $ðFâC6¸äê3PK™$2ž¸é_L7…üngûV‘¤[Å„ì£$¨<çîžz~5$ðEÔ¦+}7Iš@»ŠÇµŽ=pJâúý=ù_õó5öRÚçÌK$±ãc‘Žƒ°­KOê–€(¸w@1µÉ þyÇá_DÅáOÏpöñišT“§ßB–_¨ê(»ðo…­b¾·¸bpŸÔ€ãI㨽_áþcT¦¶g„ÂYgvu &ÝŽ0^,ÆL^Õ,Qxfø³ÞÝYHGȲ§š«Îr6{ õé^Íÿ÷ƒžÚÒh<-æè°HÒ çvw0#­:óÃ^±Tyü'‹j´’ t+N>nyÇ}¹©úÍ4í×ÝþeZO{3ËtëKû;øµ #^µk€Fâ·™f9ÊJ«¸d}ÒJÚºÔ5/!ÓX¶¿BÏ<ïmÂ30 …VPsÐ6<k¼—þ´¼ŽÙü5FÎ#YÄËÜÝ\þ8ÆkN=GÓ.cŽÞÎÞÚ2ŽìÉ1Œ®Üv‘Ï'·ãYÏ[ëæktò«+]&úa4ZŽ”. bI¼ÝöÌ[vH9– N:2uäµ–Úù¡¸³0¬±0pÃiå3,p±ÎÕÆO,qß½Zi+¢É©ÃkæF 3 22îr;ñKëôí{?ÃüÇìe{\樮môY¬üûU¶Ÿ ŠÀ]`)b ÉçžúSìmô-AæŽS,.ÈñŽõÚÅr@nÇÞ> ì¿ëæ/dûœÍÖ3F;p±ÎQq1å†r=FÆ£†ÓÃ÷>g‘%´¾PÌ›.7løn*´)ö×Ì~Â]ÎZŠé¢´Ñ®fˆ[-¼ðº¹2%Ñ<®8zóéÇ­*[ørHå‘'µhâÿXÂç!>§wþ¿å×Ì=‹îsWT,´hnÃÛ›aÖapvßYÅÙh0ۥįBÿrF¸![èsƒGö…?åwüö2îr´WCom§\hÖ÷âÊ5ó¶¯pÊâÞü•a,ô.Þ7çLî‰n q޹ÍM_Gø˜•úœµÑZ/‡/4ÿ¶£B°…÷ÜcËÏfù¸5b[-e¹•àŽû²µÁ ßCœPñðNÎ/îÿ‚?bßS•¢º§²Ðc—{uª-pG™þï<þ¿ÙúÚþɘ~ÓŒù>yß]¹ÍÚÿ•ÿ_0ö/¹ÊQ]>¡e¦éðùÇMžd³˜ŸîÔÌ?Jeí®“i¦-øµ ùiYp€ÉçŒg4,}7k'¯§ù‡±’9º+¨6Þ¿j2Û}˜¾wÚ~Lúgv(’×ÃÑôs3 ɵÄiôû‰-!+äxön#—`X3€1êy⳵˖¹šá0’Áav†*§nÒqÓp»}šÇýtÿü ?ünšÇýtÿü ?ünˆášiöòc×Ëï_æp—¶·A.¡-¬vp¤0ŽiP ö¸c’ cŸ^qVômE¦¹¸ž+Fò¯/©Þ¤*¬C-•È#+Žzì6kôÓÿð(ÿñº6kôÓÿð(ÿñº§‡n-?Éù‘*-vû×ùœÖ¬·sßC°žâÁ‘„/ó<ÜÃŒûœzRL/&×§Óî$´„¯QãÙ¸Ž]`xÎÇ©çŠé¶kôÓÿð(ÿñº6kôÓÿð(ÿñº……’V¿àÊw}¾õþfÓjîîdùDi#•êÇÛ$ÿŸh·Ì—“Ýé35ìÑ‘‰$‹ËÛü1Œ98ç$‘Ï>º͚Çýtÿü ?ünšÇýtÿü ?ün……—Á†¾_zÿ3”Ó4»« "ûOu±Bcœ7úÒËŒœŒcöÅO=•̺6Ÿcåñ˜–än"€X{ä€8õ®“f±ÿ@]?ÿÿ£f±ÿ@]?ÿÿ¡á¦Ýïø0¶–Ó¯U׿rš­ó\ß}–ØL—Ö«n[xQ†NzŒ7lž*;P[È&‚â í1 ܈ŠG]ã#©Æ:µuû5úéÿøøÝ5úéÿøøÝ5‡šÙþ M_·Þ¿Ìåõë o'¶qk-Ì(’°J"3ÜHãÈϧ‘´yÛAxݤkæ²0ÖfnÙŽ;G×ÔìÖ?è §ÿàQÿãtlÖ?è §ÿàQÿãt–i$žÞL}o§Þ¿Ìâ¤Óo®Ý§[k„·ÊgM϶PÅŽÒFç­jé\ڵʹ֬©çÉ*M¹J¸g,3yî;WA³Xÿ .ŸÿGÿѳXÿ .ŸÿGÿÓ–RVoðbJݾõþg!ú^ÛÀmɆú[´]¥\>3»9|tíQÇ£L,ì#šÍœ&Ÿ$ ¨bNÌ.sìyé]žÍcþ€ºþþ7FÍcþ€ºþþ7Oêóïø??ó kÓï_æpÓiú¥Å¼†ç1"Û\Æ’LÈU‚mß°ã³r;jvmjK–³´UÑ0’#!Ù)fÃ)#Û¯µwû5úéÿøøÝ5úéÿøøÝR¡+À~¢q~_zÿ3Œ¾Ò/Zæy­ãuE¾[…HŒaœyAIÁ\ç×Ò™=‘²¸ŠÊ{•E˜<¼^b6áŒ'b0C]ŽÍcþ€ºþþ7FÍcþ€ºþþ7SõyÚ×ükÚßO½™Ê¦t<+geåbâ3 dÜ8Û"“ÎqÀ›—rÕŒ :j3LÍ‘‘y˜={åx®³f±ÿ@]?ÿÿ£f±ÿ@]?ÿÿ¥õië®þO¨[Óï_æq'NÔŸGÓ­þË4Réò.BõþgŸE¢ÞKgh^+¦†k ‘ 0†Ld|ÁÀä}Óœ¥n"ϦÏ?Ù̾}Ì+Ì2Àª!¯+YþL,ú[ï_æsZݽÓÍ Å„5Ú+*H­–#*áŽH8þxªèwQL·†9$‘oÞV·i³#1Ã'haÿµÚlÖ?è §ÿàQÿãtlÖ?è §ÿàQÿãt£†œU“ü5~ßzÿ3‘0jÖ6÷6–¬þeÁ–+”‘UgÜC ädŽªcH¾ûa+ir² öf{•0/œù{;IþsÞ»­šÇýtÿü ?ünšÇýtÿü ÿítÖkgø0jý¾õþeË?øò‹ñþu5W²¹0Üù2Dí‘pv0í‘ÁêãV+Ѥ­»#ši©;…QVHQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW›'ü­ÿëíÿô¯I¯6Où[ÿ×Ûÿè)XOøÐùþ‡U/÷zž±ýNßDÿR¿Jß+DÿR¿Jß+ äŠ( ô¬}[ýK}+`ô¬}[ýK}(“ðçü/þéÿÐZ»”ï\7‡?äi÷Oþ‚ÕܧzCESQEVwˆ?ä\ÔÿëÖOýÖgxƒþEÍOþ½dÿÐMLþiK㪧ÈÕ}ÿ`Ë/ýâ·k Nÿ‘ªûþÁ–_úÅnÓ[-ØQEÄQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEaißñù«ÿ×ñÿÑQÕú¡§Çæ¯ÿ_ÇÿEGWë: µoîü‚Š(«2 (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ áõm+û"ÆÖßÎówNÏ»nÞÊ1ÔúWq\Ç‹þí—ûçúT¸§%'º)NJ.+gúº'ú•úVøéX'ú•úVøéV@´QE¥cêßê[é[¥cêßê[é@Ÿ‡?äi÷Oþ‚ÕÜ)9®ßò4¿û§ÿAjí© “põ£põ¨è  7Z7ZŽŠ“põª÷¶é}aqhìUf£$uŒT”PõVìîŒèÛX÷%ž”ÒlXÌÞs«:®qŸñËdã&¥û^»ÿ>šgþÉÿÆêåžl×Ú/åE?µë¿óé¦àLŸünµë¿óé¦àLŸün®QG#îÃÚ/å_×̧ö½wþ}4Ïü “ÿÑö½wþ}4Ïü “ÿÕÊ(ä}Ø{Eü«úù”þ×®ÿϦ™ÿ2ñº>×®ÿϦ™ÿ2ñº¹E»h¿•_2ŸÚõßùôÓ?ð&Oþ7GÚõßùôÓ?ð&Oþ7W(£‘÷aíò¯ëæSû^»ÿ>šgþÉÿÆèû^»ÿ>šgþÉÿÆêår>ì=¢þUý|Êk×çÓLÿÀ™?øÝk×çÓLÿÀ™?øÝ\¢ŽG݇´_Ê¿¯™OízïüúiŸø'ÿ£ízïüúiŸø'ÿ«”QÈû°ö‹ùWõó)ý¯]ÿŸM3ÿdÿãt}¯]ÿŸM3ÿdÿãurŠ9vÑ*þ¾e?µë¿óé¦àLŸünµë¿óé¦àLŸün®QG#îÃÚ/å_×̧ö½wþ}4Ïü “ÿÑö½wþ}4Ïü “ÿÕÊ(ä}Ø{Eü«úù”þ×®ÿϦ™ÿ2ñº>×®ÿϦ™ÿ2ñº¹E»h¿•_2ŸÚõßùôÓ?ð&Oþ7GÚõßùôÓ?ð&Oþ7W(£‘÷aíò¯ëæSû^»ÿ>šgþÉÿÆèû^»ÿ>šgþÉÿÆêår>ì=¢þUý|Êk×çÓLÿÀ™?øÝk×çÓLÿÀ™?øÝ\¢ŽG݇´_Ê¿¯™OízïüúiŸø'ÿ£ízïüúiŸø'ÿ«”QÈû°ö‹ùWõó)ý¯]ÿŸM3ÿdÿãt}¯]ÿŸM3ÿdÿãurŠ9vÑ*þ¾e?µë¿óé¦àLŸünµë¿óé¦àLŸün®QG#îÃÚ/å_×̧ö½wþ}4Ïü “ÿÑö½wþ}4Ïü “ÿÕÊ(ä}Ø{Eü«úù”þ×®ÿϦ™ÿ2ñº>×®ÿϦ™ÿ2ñº¹E»h¿•_2ŸÚõßùôÓ?ð&Oþ7GÚõßùôÓ?ð&Oþ7W(£‘÷aíò¯ëæSû^»ÿ>šgþÉÿÆèû^»ÿ>šgþÉÿÆêår>ì=¢þUý|ʶ6²[¤Ï3#Oq1š]™Ú `g° 9«TQT’JÈÎRrwaESQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW1âÿ»eþùþ•Ó×1âÿ»eþùþ”«¢©_¥oŽ•¢©_¥oŽ”Ä-Q@éXú·ú–úVÁéXú·ú–úP'áÏù_ýÓÿ µvÕÄøsþF—ÿtÿè-]µ!…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@s/û¶_ïŸé]=s/û¶_ïŸé@º'ú•úVøéX'ú•úVøéLBÑE•«©o¥l•«©o¥r~ÿ‘¥ÿÝ?ú Wm\O‡?äi÷Oþ‚ÕÛRQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW3âÿ»eþùþ•ÓW3âÿ»gþùþ”©¢©_¥oŽ•¢©_¥oŽ”Ä-Q@éXú·ú–úVÁéXú·ú–úP'áÏù_ýÓÿ µvÕÄøsþF—ÿtÿè-]µ!…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@s>/û¶ïŸé]5s>/û¶ïŸé@š'ú•úVøéX'ú•úVøéLBÑE•«©o¥l•«©o¥r~ÿ‘¥ÿÝ?ú Wm\O‡?äi÷Oþ‚ÕÛRQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW3âÿ»gþùþ•ÓW3âÿ»gþùþ”©¢©_¥oŽ•¢©_¥oŽ”Ä-Q@éXú·ú–úVÁéXú·ú–úP'áÏù_ýÓÿ µvÕÄøsþF—ÿtÿè-]µ!…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@s>/û¶ïŸé]5s>/û¶ïŸé@š'ú•úVøéX'ú•úVøéLBÑE•«©o¥l•«©o¥r~ÿ‘¥ÿÝ?ú Wm\O‡?äi÷Oþ‚ÕÛRQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW3âÿ»gþùþ•ÓW3âÿ»gþùþ”©¢©_¥oŽ•¢©_¥oŽ”Ä-Q@éXú·ú–úVÁéXú·ú–úP'áÏù_ýÓÿ µvÕÄøsþF—ÿtÿè-]µ!…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@s>/û–ïŸé]5s>/û–ïŸé@š'ú•úVøéX'ú•úVøéLBÑE•«©o¥l•«©o¥r~ÿ‘¥ÿÝ?ú Wm\O‡?äi÷Oþ‚ÕÛRQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW3âÿ¹gþùþ•ÓW3âï¹gþùþ”©¢©_¥oŽ•¢©_¥oŽ”Ä-Q@éXú·ú–úVÁéXú·ú–úP'áÏù_ýÓÿ µvÕÄøsþF—ÿtÿè-]µ!…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@s>.û–ïŸé]5s>.û–ïé@š'ú•úVøéX'ú•úVøéLBÑE•«©o¥l•«©o¥r~ÿ‘¥ÿÝ?ú Wm\O‡?äi÷Oþ‚ÕÛRQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW3âï¹iþñþ•ÓW3âï¹iþñþ”©¢©_¥oŽ•¢©_¥oŽ”Ä-Q@éXú·ú–úVÁéXú·ú–úP'áÏù_ýÓÿ µvÕÄøsþF—ÿtÿè-]µ!…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@s>.û–Ÿïé]5s^.û–Ÿïé@z'ú•úVøéX'ú•úVøéLBÑE•«©o¥l•«©o¥r~ÿ‘¥ÿÝ?ú Wm\O‡?äi÷Oþ‚ÕÛRQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW5âï¹iþñþ•Ò×5âï¹iþñþb€4ôOõ+ô­ñÒ°4Oõ+ô­ñÒ˜…¢Š(=+VÿRßJØ=+VÿRßJäü9ÿ#Kÿºô®Ú¸ŸÈÒÿîŸý«¶¤0¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(®kÅßrÓýãüÅtµÍx»îZ¼˜  =ýJý+|t¬ ýJý+|t¦!h¢ŠJÇÕ¿Ô·Ò¶JÇÕ¿Ô·Ò€9?ÈÒÿîŸý«¶®'ßò4¿û§ÿAjí© (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+šñwÜ´ÿxÿ1]-s^.û–Ÿïæ(ODÿR¿Jß+DÿR¿Jß)ˆZ(¢€Ò±õoõ-ô­ƒÒ±õoõ-ô 7GRÚåÞ$1)”Ë<†Pß"´ÿ²äÿ¡®OûèÿñuKÃŇˆ®UX®èÀ$zì|©?çáÿï•ÿ Êt£7ï~¦ô«Ô¤­É?Ìæÿ²äÿ¡®OûèÿñteÉÿC\Ÿ÷Ñÿâë¤ò¤ÿŸ‡ÿ¾Wü(ò¤ÿŸ‡ÿ¾Wü*>­O·âÿÌÓëµ»¯¹‘ÍÿeÉÿC\Ÿ÷ÑÿâèþË“þ†¹?ï£ÿÅ×IåIÿ?ÿ|¯øQåIÿ?ÿ|¯øQõj}¿þaõÚÝ×Ü¿Èæÿ²äÿ¡®OûèÿñteÉÿC\Ÿ÷Ñÿâë¤ò¤ÿŸ‡ÿ¾Wü(ò¤ÿŸ‡ÿ¾Wü(úµ>ß‹ÿ0úínëî_äsÙrÐ×'ýôøº?²äÿ¡®OûèÿñuÒyRÏÃÿß+þyRÏÃÿß+þ}ZŸoÅÿ˜}v·u÷/ò9¿ì¹?èk“þú?ü]ÙrÐ×'ýôøºé<©?çáÿï•ÿ <©?çáÿï•ÿ >­O·âÿÌ>»[ºû—ùßö\Ÿô5Éÿ}þ.ì¹?èk“þú?ü]t…Y?Þ»e°A ì=ªZ>­O·âÿÌ>»[ºû—ù·ö\Ÿô5Éÿ}þ.ì¹?èk“þú?ü]u4Qõj}¿þaõÚÝ×Ü¿È忲äÿ¡®OûèÿñteÉÿC\Ÿ÷Ñÿâë©¢«Síø¿ó®Öî¾åþG-ý—'ý rßGÿ‹£û.Oúäÿ¾ÿ]M}ZŸoÅÿ˜}v·u÷/ò9oì¹?èk“þú?ü]ÙrÐ×'ýôøºêh£êÔû~/üÃëµ»¯¹‘ËeÉÿC\Ÿ÷ÑÿâèþË“þ†¹?ï£ÿÅ×SEV§Ûñæ]­Ý}ËüŽ[û.Oúäÿ¾ÿGö\Ÿô5Éÿ}þ.ºš(úµ>ß‹ÿ0úínëî_ärßÙrÐ×'ýôøº?²äÿ¡®OûèÿñuÔÑGÕ©öü_ù‡×kw_rÿ#–þË“þ†¹?ï£ÿÅÑý—'ý rßGÿ‹®¦Š>­O·âÿÌ>»[ºû—ù·ö\Ÿô5Éÿ}þ.ì¹?èk“þú?ü]u4Qõj}¿þaõÚÝ×Ü¿È忲äÿ¡®OûèÿñteÉÿC\Ÿ÷Ñÿâë©¢«Síø¿ó®Öî¾åþG-ý—'ý rßGÿ‹£û.Oúäÿ¾ÿ]M}ZŸoÅÿ˜}v·u÷/ò9oì¹?èk“þú?ü]ÙrÐ×'ýôøºêh£êÔû~/üÃëµ»¯¹‘ËeÉÿC\Ÿ÷ÑÿâèþË“þ†¹?ï£ÿÅ×SEV§Ûñæ]­Ý}ËüŽ[û.Oúäÿ¾ÿGö\Ÿô5Éÿ}þ.ºš(úµ>ß‹ÿ0úínëî_ärßÙrÐ×'ýôøºÞ·º´†Ú(žþ))rã,@ëÖ­ÑW Q†±ýLêשUZoðKò ûu—üýÃÿ}Š>Ýeÿ?pÿßb§¢´1 ûu—üýÃÿ}Š>Ýeÿ?pÿßb§¢€ ûu—üýÃÿ}Š>Ýeÿ?pÿßb§¢€ ûu—üýÃÿ}Š>Ýeÿ?pÿßb§¢€ ûu—üýÃÿ}Š>Ýeÿ?pÿßb§¢€ ûu—üýÃÿ}Š>Ýeÿ?pÿßb§¢€ ûu—üýÃÿ}Š>Ýeÿ?pÿßb§¢€ ûu—üýÃÿ}Š>Ýeÿ?pÿßb§¢€ ûu—üýÃÿ}Š>Ýeÿ?pÿßb§¢€ ûu—üýÃÿ}Š>Ýeÿ?pÿßb§¢€ ûu—üýÃÿ}Š>Ýeÿ?pÿßb§¢€ ûu—üýÃÿ}Š>Ýeÿ?pÿßb§¢€ ûu—üýÃÿ}Š>Ýeÿ?pÿßb§¢€ ûu—üýÃÿ}Š>Ýeÿ?pÿßb§¢€ ûu—üýÃÿ}Š>Ýeÿ?pÿßb§¢€ ûu—üýÃÿ}Š>Ýeÿ?pÿßb§¢€ ûu—üýÃÿ}Š>Ýeÿ?pÿßb§¢€ ûu—üýÃÿ}Š>Ýeÿ?pÿßb§¢€ ûu—üýÃÿ}Š>Ýeÿ?pÿßb§¢€ ûu—üýÃÿ}Š>Ýeÿ?pÿßb§¢€ ûu—üýÃÿ}Š>Ýeÿ?pÿßb§¢€ ûu—üýÃÿ}ŠçüS"O ¼ºÈˆûK)ÈÉíúWOX^+ÿ\_õð¿ÈнýJý+|t¬ ýJý+|t¦!h¢ŠJÇÕ¿Ô·Ò¶JÇÕ¿Ô·Ò€9?ÈÉ?û£ú×A­k©¤**À×1RÈ­ˆX.â{rxõüëŸð÷üŒ“ÿº?­h랺¹Žòk;Ûƒ-ËÆZG· GBËã=~´º¡wUÖ.ô¿2vÓwØÄW|Þx ƒ•LsŒ÷"´®e–+f’Þ<£îÆ.Ò°¯cÔdÕO§\ÞÙ[*¶I‰dîî †1ž}+BòëT·ßdÓó2*‹beSæ98ÈÆßsÎ(èJŸð‘¼0Þ‹»Õ«FžTr‡dá0ØúäqW4ýN[›Éì®íEµÔ*²Y<ÅelàƒÜÒ¨ZÙ“¤]ZÜè×RÃÉçM{‡õÊ¿`wã&ƒ¤Miwwr¯Ϊ‰Ü4̈¹êÌO$žƒLD¬ÝÜ]\E¦i¢ê;wòä–IÄJ\uUàç…Z½ìzŒv6ÚtrÌm¾ÐþeÎÀ¼ãtæª,®’5 k[»†âI&†X¦DhËòC#¡î3TçÒ.ÞîÂ{í#ûSfž°ÈHÉç$üäg¿"’þ¾çú¿õÔܵ֒ëA“T²ÒBÑ–”È Áj–›âtï¶ês"+²*,v“)†vÙ/õQŠ[-.ö ^Ù¼ad•eò-Ä›„JÀíMÇÓò©.tû©,4H–,½´ð¼ÃpùB©¿?…>¿wütûÿà§×´ëh¢’YDª]WÉrÛGRT î@§\ëšm¢DòÜ‚&O1<´i OïaAãߥekUËëŸoŽÞææ-Ä,–×fR 9ûÊ9õªÓè3[]ÛÏmevößdX ÷Æ)" “ÉÜ}{Rþ¿1@–9â·š'WØ2²œ‚ ¶ RÔ|A¦éW ¹Ýe)æmH^L.q¸íëSÙÛGgaeoFŒ€#-¸¯ÊÜg½Skƒâ¹/|¿ôf°‡Ü9}äãzP÷ÐÚÌ?Ú >ÕllźÈV-·'æÏÝÛŽÝiÚˆ4ÍRo&Òáš]ž`G‰ã,¾ª q\´=þŸ£Ì÷Pyk‚Öîw©Ã‚ÇNý*ö“£©O¡\ͧ›K{ r|Æ•XÌY€¡O¿8íÅ;/ëçþBþ¿þf”ZíâjÖÖZ†—öUºäºÜ Ê2C8ãКѷÔìî´Á¨Ã8kM…ü £98<ö5…£®¦Ú«Þêz5Ⱥ”²,¦hLpGœ…Pžp2q’}…l¦Õ´9`¾·6rÜÄñÉ9Läu9¤öS<],“·—¥Hð¨ÜÛYŒŠ¸ÝÈ °s´¾ïlñWõfòÞÔ^XiËyh óÚcr#qŸ”`’qÏ8õ‘imâKžÞXÊÎÅßiŒ9\ ¿pgiCéžõ.£§ßÅŸ¤Å§ÜÞið(›É–430à+naòñ“޹Ö@^e¹¼I,z^œ×’Éj·n¯(‹dg èrÇž=ºÒ^x®(4›=BÚÊâæ; ŒV0Ìæn€äô?Σ¸‡TµÕŽ©e¥™¾Óf°=¹™¡u$®NpGÌAÁ=;ÓfÐn¡ð=¾“\Æa-†$VlŽ:ÓVüWÿZÿ_#GZÔït¸â >;‹x£2Jïr#  N>”ºŽ´¶>:º@Ò/–’˜ì8b8<uª¾$·’þ²ê)·trùÈ‚7äg’cÔf™ªizÇÿ³‹}«PòcWmÀo`W''‡­ Ì}QnóÄúFŸu%µÕÑŽHöù‡Ér©»¦æhϹ©-|A¥ÞGrðÜœ['™(’'B«‚wa€$py©h××ø¡c·Üo¢mþuùȼsëŠ]fÆågÔ¯Zø,q޽*[·õä4¯o뱯§øƒLÕ'òm.KK³xI"xË/¨ G¸¢ßÄ:UÕð³†ì4IJ¯ÈÁ\¯P¬FÖ#ØšÃÒíµVMy¬M•½•±ýëJ¬e-P)àw縨´Oe-•µöŸxæÍ‰Žëû@´€Â2ùƒŒmã&©«;ÕÍiüOe6q>Ÿr™ˆ¯ïg·—ÊåÂðBüÞœf®Ýëš}ÚZÝLñÈå@c ìÉè ãhϹ¬OìmCþüzgÙÿÓ\ǽ{J®qÓÞªxƒHÖµ «èü‹Ëˆä’3jÑ]ªC ¤‡Œ°ÉÈ'8=¨ëaŸ}=Æ»«ÚÈÀÅlÑ€7&Oך®ÚííÍåÌ:N”/"¶s³Ip"R㪯8üI§ÙÝ[x“VžHÑ®„O¡‡U]¥Hëžþ•JÒ-[A¸½‚ -¯í'¸{ˆ¤ŠtFBç%X1yâ—ù£wâ-3O•`½¸ϰ<ˆœD÷™A =Î*Ž©¬][j7ñA"ùPéMuÊÏ–ÁÏqÀª×6z¼êâ 1nWUE!ŒÊ-å„*ùäŒü¹ïM—Ã÷ñKäD‚hŸF6bàmgƒÎ{f‡·õÙ_z5á!²²Óì¤Ô.žxR©9Æ[ =zT×^ ÒìÒ–ëp¸O2! 4¥×ûÀ 'õÍI¢jBâÎöK É3`–ÒÛÚßù2FÈO9”çÖ§ki<;z—V¶*öÇOX tíö’z¹å~nH=©É«·ëú“Ù]¹|K¤Coo;]æ;ˆüØü¸ÉOï =È­8fŠâæ…ÖH¤PÈêr„Wžéz-é±Òµµ»¹†M9!h­oM»¡°?yC) ë]f“2Z]G¢AdÐÃmf’’eÞc,H}zsEº]A>¿×Bͦ§ö­cP°òvýŒFwîÎýàž˜ã¦_x‡JÓn~ÏwtP¡˜fBÄ{œV`¦â]Vê-{È.„;)¢_º¤†`{ÔWVzµ½Æ°-´Átšª©Ó"ù-°!Wò3òç½'äWS^ÿÄ:^™2ÅupÁÚ?4áy0ŸÞ;AÀ÷4]ø‡K³HK ßhO2!4…—ûØPN=úU?F¹²Õá,<È"Ò’×ÍÈù[Ó¯JÍÒ4½_C[+‘§¦6 k4)2+ÄÊÌA¤ÝjõøÿÀûÉþ¿/ø&ž—âH†´ýCSœ,·@í fs“÷UA'ØUé-Q1[Ï%º¬²ëúXUÁ¦ÆzÓ8îiîÿ®ÿå¨tþ»Ÿ©Ùê°4Ösyˆ¬Q²¥YXv*@ ýE[¬.ÊâÛXÖg–=±\ÏÄrà#PNNAëZÔ†QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE…â¿ùÅÿ]×ùݬ/ÿÈ./úî¿ÈнýJý+|t¬ ýJý+|t¦!h¢ŠJÉÕ17Òµª•ä[Њâô)â)˜ƒ™8÷ö®ÃÎOWÿ¿mþÈj6—vò¼¶’É „`²W9qsâec³Uºê?ÂÏRó“ÕÿïÛ…rz¿ýûoð¯$ûgŠÿè/uú…lñ_ýî¿Oð [ó“ÕÿïÛ…rz¿ýûoð¯$ûgŠÿè/uú…lñ_ýî¿Oð [ó“ÕÿïÛ…rz¿ýûoð¯$ûgŠÿè/uú…lñ_ýî¿Oð [ó“ÕÿïÛ…rz¿ýûoð¯$ûgŠÿè/uú…lñ_ýî¿Oð [ó“ÕÿïÛ…rz¿ýûoð¯$ûgŠÿè/uú…lñ_ýî¿Oð YgWh‚î8|œ£ §Ô{Ôµä?lñ_ýî¿Oð£íž+ÿ ½×éþë’F’ÆÑÈŠñ¸*Êà ƒÔB"ÆŠˆ¡QFT`è+ÈþÙâ¿ú Ý~ŸáGÛÙâ¿ú Ý~ŸáE‚ç®",h¨ŠaUF‚^CöÏÿÐ^ëôÿ >Ùâ¿ú Ý~Ÿá@^¢¼‡íž+ÿ ½×éþ}³Åôºý?ž½EyÛëM ¹_¡#Šò϶x¯þ‚÷_§øQöÏÿÐ^ëôÿ õà€:EyÛÙâ¿ú Ý~Ÿá@½EyÛÙâ¿ú Ý~Ÿá@½EyÛÙâ¿ú Ý~Ÿá@½EyÛÙâ¿ú Ý~Ÿá@½EyÛÙâ¿ú Ý~Ÿá@½EyÛÙâ¿ú Ý~Ÿá@½EyÛÚŸÞàßð±u¿útÿ¿-ÿÅÑÿ [ÿ§Oûòßü]Þ~ÚŸÞ}µ?¼+Á¿ábëôéÿ~[ÿ‹£þ.·ÿNŸ÷å¿øº.¼ýµ?¼(ûjxWƒÂÅÖ¿éÓþü·ÿGü,]kþ?ïËñt\yûjxQöÔþð¯ÿ…‹­Ó§ýùoþ.øXº×ý:ß–ÿâè¸óöÔþð£í©ýá^ ÿ Zÿ§Oûòßü]ð±u¯[Oûòßü]Þ~ÚŸÞ}µ?¼+Á¿ábë^¶¿÷å¿øº?ábë^¶¿÷á¿øº.¼ýµ?¼(ûjxWƒÿÂÅÖ½mïÃñtÂÅÖ½mïÃñt\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿâèÿ…‹¬úÚÿ߆ÿâè¸ñöÔþð£í©ýá^ÿ Yõµÿ¿ ÿÅÑÿ Yõµÿ¿ ÿÅÑp=ãí©ýáGÛSû¼þ.³ëkÿ~ÿŽQÿ Yõµÿ¿ ÿÇ(¸ñöÔþð£í©ýá^ÿ Yõµÿ¿ ÿÇ(ÿ…‹¬úÚÿ߆ÿã”\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿã”ÂÅÖ}mïÃñÊ.¼}µ?¼(ûjxWƒÿÂÅÖ}mïÃñÊ?ábë¶¿÷á¿øåÞ>ÚŸÞ}µ?¼+ÁÿábëÞµÿ¿ ÿÇ)ábëÞµÿ¿ ÿÇ(¸ïöÔþð£í©ýá^ÿ Xþõ·ýøoþ9Gü,]cûÖß÷á¿øåÝþÚŸÞ}µ?¼+Â?ábëÞ¶ÿ¿ ÿÇ(ÿ…‹¬zÛþü7ÿ¢à{¿ÛSû¶§÷…xGü,]cûÖß÷á¿øåð±uï[߆ÿã”\wûjxQöÔþð¯ÿ…‹¬z×þü7ÿ£þ.±ëkÿ~ÿŽQp=ãí©ýáGÛSû¼þ.³ëkÿ~ÿŽQÿ Yõµÿ¿ ÿÇ(¸ñöÔþð£í©ýá^ÿ Yõµÿ¿ ÿÇ(ÿ…‹¬úÚÿ߆ÿã”\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿã”ÂÅÖ}mïÃñÊ.¼}µ?¼(ûjxWƒÿÂÅÖ}mïÃñÊ?ábë>¶¿÷á¿øº.¼}µ?¼(ûjxWƒÿÂÅÖ}mïÃñtÂÅÖ}mïÃñt\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿâèÿ…‹­zÚÿ߆ÿâè¸ñöÔþð£í©ýá^ÿ Zõµÿ¿ ÿÅÒÂÅÖ½mïÃñt\yûjxQöÔþð¯ÿ…‹­zÚÿß–ÿâèÿ…‹­zÚß–ÿâè¸óöÔþð£í©ýá^ ÿ Zÿ§Oûòßü]ð±u¯útÿ¿-ÿÅÑp=çí©ýáGÛSû¼þ.µÿNŸ÷å¿øº?ábë_ôéÿ~[ÿ‹¢à{ÏÛSû¶§÷…x7ü,]kþ?ïËñtÂÅÖÿéÓþü·ÿEÀ÷Ÿ¶§÷…mOï ðoøXºßý:ß–ÿâèÿ…‹­ÿÓ§ýùoþ.‹ï?mOï >ÚŸÞàßð±u¿útÿ¿-ÿÅÑÿ [ÿ§Oûòßü]Þ~ÚŸÞ}µ?¼+Á¿ábëôéÿ~[ÿ‹£þ.·ÿNŸ÷å¿øº.¼ýµ?¼(ûjxWƒÂÅÖÿéÓþü·ÿIÿ [ÿ§Oûòßü]Þ¾ÚŸÞ}µ?¼+Áábëôéÿ~[ÿ‹£þ6¹ÿNŸ÷å¿øº.½}µ?¼(ûjxW‚ÿÂÆ×?éÓþü·ÿGü,msÒÏþü·ÿEÀ÷¯¶§÷…(¼CÜW‚ÂÆ×=,ÿïËñtáñ#]^Ö÷åÿøº.¿,êÝêPÀ׌xâ|ò_GoªCÇ! &ˆ }Á'|ñ^±it%PA¦…€äQ@Ìp¦¸/^еÛÈ?ñÓ]ÝÉÄf¼ËÇŽ²¯Gý1ähÇ7Qº¡ÝFê‘—¬-$Ôoc´…âY$$)•Â/Lã'¿aïZÚ§„õ ?RžÎÙ†&Š:+,kŒ³)n:ð2I¬ {©­.c¸·‘£š6ÜŽ½T×Cáÿ*j³¾µw3Cqbö^qÌJqƒÉ:/3:=S•ìR;Ff¿Rö :þ𧯎)ú†«ésÁ 턱IpvÄWÞ}RFyé],:þ‡c­ø`E¨´öšd2Ç5ÇÙÝ9e |¸Ï_­f.µf|?¦Ú-ûAuª×Ä,ÞTg8p1ƒÉÎÜÑ×úïoËPþ¿…φõ«;»[K‹Iî‰XSÍC¼Ž£†ÀëßùCï>€©<ûu®ši6~+ÒŸOW}ÅdƃºLî`‘ªú§ˆì­î4Óc}myioz.šÞ 8Ûm#ÜðÄ‚i­lÊòøJïN𾣩j–²ÛÏEöu2)3a²>½ñX1X]Ïa5ôP¶…Ö90ùYº g<ý+§Õõm û]Z¤·7:­Äsˆ^ÙÐņÉÿ­Yþ Öì4»»¨uR~ÃpŠÇ [÷ˆÁ“€½%»¿õ¢þ½Aí¡B] U¯K'V²(.õ% ýÑÁù³ŸáÍ;Qðö³¤Ú%ÕþŸ,99*@>ø'Ž+£¾ñŤÖzeÌqî¾{¨çÔ)ð£$`çƒÇLT¶·¢Ç¦k‹a=ìúÄÉ!ŠH¸ »’~ñíÇ £úü¿àB-#ÁºÖtøµ›`²¹v]ÂTÜHF`8$»éX“éðÇÆÕÄW2˜í¾aºR8\î?\bº'ñ”ß`ÖEÏú 7”ü~è¯ÝÆî¾Õ_Y×4ýfóKÕ£¿{+ødXæAºÆªr² Æ1þÎúïªFfÏárÚòÚÒm=–âëp†?5 | žÆ®*-GAÕô™aŽþÆHZfÛYX1ôÈ$gñ®ÏO¿Ñoüi¢Kc$W‰yMÕÌÍIû¶Á*ßÅïY7:¦a§Úéê]R©ýªäù DèP×ðëÍ upïýw0õ/ë:D÷öB²¶Ä!•ÁoO”ž}©×^Öì¾Íö6T7M²Ü¥ºãh$Ä éõh–ÖVÉc<-Q.Ö {n1Øä[Þ©¦¯ é¾0ÄVúœ·¾tîÒÛ›VW…]HÎãÃc `v¡9ýSEÕ4SÔlÞßÌÎÂYX{©#>ÕŸººOjöw6ÙéúµÍ¿žf1A§o,ã'ø‰ÉÎcìù:L–Ùšd›Ã´ÉmºuÏ£çŒvâ’/h~¹×ìõm3Ú)óKüD€0¨¬|9¬êMp¶v-1¶Ç( Úèå† ÔþÔ4ÔÓ5/RºkHïãŒ$â#(RŒN ŽyÍiøkRðæ™Ùn ŽêÝâêk”Ëè‚c=ý©ÛRz´ß Üê¾¹¸´¶šMNß Â]P*…²äúÕ-'×zž°úl²Ee$LSpÀ$à¹Ë@?>kmõT²Õm.µY,–mXÞÄâÙܲ`c¯JÌ»ñ÷Ä(u“º+5¹‰·2’Ûq'·J#«Wþ´C{;Z³þÜØê7Ve÷˜&x·ã¶’3ŽÝ*¾ê³ª^E?ˆ// Û,/tò¦õ;]K’28>”jš·ö£ÄßÙÚu—–Å¿”?Þ俥^Êã{²ðð¾ºÚ`Ô—MÙ˜üÑ t9Lg;s»ö§K'HšÆ+™®ïÞTJ;ðó‘Àç5¹eâm&WE™îÈŠÛHû,çÊs‰1÷qŽyî8©<#©ZO7„´øåÝuk-Ñ™6‘´2±ãð5VÕÿ]Ééëc™½Ð5=*æÞ-RÜÙ,ìM#AêIRzuÇZ³©höš2ê¶´z…·Ÿöy¢*øÏÌ=êö£{¡Ã¤[è1j’ÝDú—Ú..>ÎÈ N„rIêxÏzgН4k«(¢Òu”kKl }=,äN¿yË·ºòi_B­gc—ÝFê‡u©ˆ›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Uí/O„®Ò»$ðvõcè+/ujiWkr[±ÆöÜ9ÆxóøP¼º™$ebBøáÖçÜþµsðØË.¡ö"B¸bº€óë[>d|á¤wi˜ÈœVd7Àj¯txI̞ÌÒaÑ#‰•ãº}™ 6Ù8Ç^ƒmdjsYÞ,L«'1çœ`ûÖ‰’Sk4 BD›ðÆCŸ˜“Óo¿­V¼½ß}nè7}·ýNAÇéC½´muszËÃú5²$WÌgºe,G˜T uÀàzšËÖt«kh÷N•žÕÈXçnz{Š¿?“ªB›¦Í¿ÞÉlc©éŒœŒsÐñjëWØÓͫȯ3íÜTc€AÎ;tåQÄT•D¯«ÝGŠÁÐ >T’Z>æêúÃwfkX‰9%E|纽ïÂ,M¤?îŠõÑóGÊŠ)°ýÁE0uþ¬×˜xóþAwŸõÉÿ‘¯OºÿVkÌxD_ïà”êÖ{DWQùNQ\Àü¬)à÷Töú{\i——Ë*„µ1‚¸ÉmäŽá@wT]Ok2Ím4Ê¿vHœ«ÜȨ)8 úÒÐË’I$’y$÷¤ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(C+–„“KçAQQ@ ˜  zqJ³”èò¨¨  w"P”'®Ö#?‘¨ÚRÄ’zÔtR²½ÇÌÚµôº½ûÂñéû¢¾¯ 0ÿ GþLÃÿÅÒŠ·áø[ü†õüÿŸõr꿈`ñ=ßÛ-5;™9 "lË{ÇÏ9ã·ÐõËø‚ÞK]vînÍÜi›ï1 ›“ÈÎ=Emÿ±ñ‡ý?òfþ.øV>0ÿ GþLÃÿÅЕ­ä6ïs’®¢k»Ko hbçL‚ð³\m2K"mùÇMŒ?Z—þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.˜°Ñ¶¥©IiÿÚÒÈÁœÊ“,~PÜ#.¬»žøïÖ²¯ä{Û?°Ékp«lòÁ#!ÛÎpÉÈ'½Cÿ ÇÆôÿɘøº_øV>0ÿ GþLÃÿÅÐÕÝÁhqu>²ºš·ö"ÚŸ³y¸Ø%Ú»<¿Cž¸íœ×œWq¨øƺ¦¡-äú2,’X%Ä@tÇj©ÿ ÇÆôÿɘøºIK•Öÿ±ñ‡ý?òfþ.øV>0ÿ GþLÃÿÅÓ’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*÷ÿǤ?îŠòßøV>0ÿ GþLÃÿÅשxCþ=!ÿtSB=¸(¢¸(¦.¿ÕšóÈ.óþ¹?ò5é÷_êÍy‡ŽÆtÛ±ë#@•bØÓ-qÿ<“ù ŸÌ>Õ‡©Hñø.åãfG]=вœ|¾ Õ$Ô/ôß [My¨X¬òˆÖû,œ®q°9go¦>”€éžácÛ½•w£'>”ÿ0ûWu«ÞkZF—2, y²°hÝc,¡°ÛN ‡šßÓïõ+¹u-.åí¡Ô-B¸†2c*à•m„ç#ŒÓ¶Ÿ×—ù‡_ë»G@“Ú©GÿWc·š?ô¬¿ IrÚ}â]]Ku$WÓÇæÊrHVÀöAÅjEÿ7õÔè CKERQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEɦŽÞ '•¶Ç—vÆpÉ5ZÛSµºŸÈŒÌ$Ú\,nÿë ÿЭUSÊO3ư²ÈÁ†é#åû§Ò€%¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ¤2J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠÏÕô‹[Û+Æ[y/$…‚HÑ®íÛp¿1ü+FÑ.ŸS/ªéÈmÄNM²A¸•ÇžÀó]V.ÿç•¿ýþoþ"Œ]ÿÏ+ûüßüEa<<'57º%Å0EoÅIkÑBø ã|#Ŭ_îŠëä–x|ÑGå¼É!%G® Šä|'Äýn†wÐ}ÁE}ÁE0uþ¬×x¤n8õ8¯EºÿVkÏ|H3qõqüèuüMe§¬6²ÅpÎÇ’Šåõ÷¦Âe§Ï¯ûåøªæ5¿ù ŸúãþŠZήwQ¦a*’M£¸ÿ„ËNÿž7_÷ÊÿñTÂe§Ï¯ûåøªáè¥í$/k#¸ÿ„ËNÿž7_÷ÊÿñTÂe§Ï¯ûåøªáè£ÚH=¬Žãþ-;þxÝß+ÿÅQÿ –ÿ•£\—‚åûþÙÿìÕÖÖÐwWfðwØQEEQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@®·ÿ#Lõæÿú •W¼D‚­kò4Áÿ^oÿ ÉU¼/ †óõýÕŠøiÿ…~lï û‚Š û‚Šè9]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@µ¿ù ŸúãþŠZË™Ú8™‘7‘ÎÜã5©­ÿÈLÿ×ôRÖurKâ9%ñ2µ­Ó\–ýÐTÄ<út«4Šª£ p)i;t·CT”Mtb 6ë½ #7ï;göþu¥КÅ.R6}ÊÅÆséÍI1Ä\¢àÈÛ˜ç94C p!H—j–-Œ÷'&Õ¬6бHeŒ;Fñ“ü/ŒÊ«Ï4†YËH“{°'ØgéVêma™÷H™$`òFG¿­ ××R¹—ÊX„¾PHÄ’>$¶Oz’ ©!¬Üc©?ýaVÒ Lêyþ´Ki͹Ó'à‘‘M´ÇuÔ¤<Ù¤…žb;Ùð8-ÿÖ-Ë·.LVûˆõ-ÿêýjãYÛ»îhòp,pqÓ#¡§´;32YvŸqO™2)-Ìñ«ÊåÝ2Çt{nÀw§Ü,ÉfþdÛÚ@(P$ãŽõe-¢Dd J°Á Äÿ:h´„FcÚJ’ Óñ¥tEw™£’_,/ÊRò:ÿë—¾dVÁ]Þbî8Ú“Œ}*Ù¶„£¡L«¶æäò}h[x¡ r„•%‰Æ~´s ºÝ™ ó^@Û¾a· ‚ªBÒCgç‡%§lª0 ­^H’4(‹…$œ}j1gÄcvpXñôô¢èI¡4¢êH^_0*ƒ’Á9㊉®d…æi]@YcÚ6²ö篥[ŽáR¨¸“ÎIüi‹iîù3¸m;˜·œÑt;¢ª\\*É#³2,eŽèö€Ý€Ï&¬ÚBÖöʯ!l(àÇ­9maXÚ0¤« ÌOó§ÇD›¾äŸçCk ›Eó#ÓÚ`çtÇ*„ ÇŽÕ,hZòY”H‚¦8=½ûTÉi(UC€Á€,NéNñ šP§{uäàþ(rCrEçtŠRÊÓn•™P±žÃñ«öÆCn¦lïç98Ïü)¦Îˆ» ÷pÄøæ¦PBŽ€`PÚbm1h¢Š‘Q@Q@Q@Q@Q@Q@Q@Q@SÕ ““fÒN3–ì1Þ®T7V±^@b”eO Ž úгìÎigY Äîz0ûÂ0zíçò®¦0j’  s‘õªrirA&23ÁS‚}r}êꪢ…P@À s’–ÅÎJ[w‚åûþÙÿìÕÖ×%àŸù~ÿ¶û5uµ­?„ޟ‚Š(«,(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šåu¿ù`ÿ¯7ÿÐdªþû£ëV5¿ù`ÿ¯7ÿÐdªþû£ëXPÞ~¿¢:±_ ?ð¯ÍÜpQDpQ] ˯õf¼÷Ä_ñóýt_ç^…uþ¬×žø‹þ>bÿ®‹üèíç…ïu’îmÖ9!‹Ùâ5‡µAÿV¥ÿ=í?ï¶ÿâk´²ÿ}¯ýqOýVe¯‰¬îµ¹4Ômùc˜Ÿ–GyGÓõÁôç?g©œ[¹Ï©Ï{Oûí¿øš?á Ô¿ç½§ýößüMvì‚[„‰ùB¬ÄzãŸÎžl­?çÖûö(öq²‰Âÿ©Ï{Oûí¿øš?á Ô¿ç½§ýößüMvÏceøó·ÿ¿Kþ]쬿çÊÛþý/øQìâÊ'#ÿV¥ÿ=í?ï¶ÿâhÿ„+RÿžöŸ÷Ûñ5ÔŘ%šÚ6+î™F~æö*@ü³øÖŸÙ-€ÿQ÷* üÍÎ!ì¢pð…j_óÞÓþûoþ&øBµ/ùïiÿ}·ÿ]çÙm¿çÞûàQöKoù÷‡þø{8‡²‰Áÿ©Ï{Oûí¿øš?á Ô¿ç½§ýößüMwŸe¶ÿŸxïQ\Á VÒKkÆ¥AŽœàûQìâÊ'ÿV¥ÿ=í?ï¶ÿâhÿ„+RÿžöŸ÷Ûñ5ÝÑG²ˆ{(œ'ü!Z—ü÷´ÿ¾Ûÿ‰£þ­Kþ{ÚßmÿÄ×wEÊ!ì¢pŸð…j_óÞÓþûoþ&øBµ/ùïiÿ}·ÿ]Ý{(‡²‰Â©Ï{Oûí¿øš?á Ô¿ç½§ýößüMwtQì¢Ê' ÿV¥ÿ=í?ï¶ÿâhÿ„+RÿžöŸ÷Ûñ5ÝÑG²ˆ{(œ'ü!Z—ü÷´ÿ¾Ûÿ‰£þ­Kþ{ÚßmÿÄ×wEÊ!ì¢pŸð…j_óÞÓþûoþ&øBµ/ùïiÿ}·ÿ]Ý{(‡²‰Â©Ï{Oûí¿øš?á Ô¿ç½§ýößüMwtQì¢Ê' ÿV¥ÿ=í?ï¶ÿâhÿ„+RÿžöŸ÷Ûñ5ÝÑG²ˆ{(œ'ü!Z—ü÷´ÿ¾Ûÿ‰£þ­Kþ{ÚßmÿÄ×wEÊ!ì¢pŸð…j_óÞÓþûoþ&øBµ/ùïiÿ}·ÿ]Ý{(‡²‰Â©Ï{Oûí¿øš?á Ô¿ç½§ýößüMwtQì¢Ê' ÿV¥ÿ=í?ï¶ÿâhÿ„+RÿžöŸ÷Ûñ5ÝÑG²ˆ{(œ'ü!Z—ü÷´ÿ¾Ûÿ‰£þ­Kþ{ÚßmÿÄ×wEÊ!ì¢pŸð…j_óÞÓþûoþ&øBµ/ùïiÿ}·ÿ]Ý{(‡²‰Â©Ï{Oûí¿øš?á Ô¿ç½§ýößüMwtQì¢Ê' ÿV¥ÿ=í?ï¶ÿâhÿ„+RÿžöŸ÷Ûñ5ÝÑG²ˆ{(œ'ü!Z—ü÷´ÿ¾Ûÿ‰£þ­Kþ{ÚßmÿÄ×wEÊ!ì¢sþÑ.t´ý¡âo7nß,“Ó=r­mÓßµ2©++#H«+ ¢Š)Œ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šåu¿ù`ÿ¯7ÿÐdªþû£ëV5¿ù`ÿ¯7ÿÐdªþû£ëXPÞ~¿¢:±_ ?ð¯ÍÜpQDpQ] ˯õf¼÷Ä_ñóýt_ç^…uþ¬×žø‹þ>bÿ®‹ü躲éÖÀŒƒ è"«Ç¡é1H²G¥Ù$ˆC+-ºèAÅOgŸìëlO˜ÿ²+ž²ñUõÞ²4ãªL®D£í$ùj:±ù:tÇ®Etëÿ©ÿ\ßù­cø»S[6+o¶¥”·Òˆᤠå)åß'¡ =È­…ÿØÿë›ÿ5¨gÒ­î5Xu K¼ÄÑG` ÜA-Œg<×¥ 1<;¨Ëªx~kxu¥»´v¶7c‡ÇÝ~Í• õëšg…ä¸k Ĺº–æH¯§Í”äØ}³•ok©Üê—G¸HÆ6¹ÃcÏ8ëPYiðéÉ:BÎÂiÞvÞAÃ1É¥;ë òóŽ/¤ÿvÛÿFµlX²œ^IôµÿÑÍZM'4€Ÿ4f«y”y†€9ÍÅsi:ƒ,ÚÍ-Ín-¥g]Ä™ìSƒ®–õ¿â]té‹#\ý÷†mo§¹¶ÞÃÓ¬“Á®Éq‚r¤º:Ò¶o_þ%·õÅÿôBØ:–«ž¾Ôõ;T³¥„–—WBÝ!Œ?œççÉ88$cZèk›‡NÖãñÆ¡,uÀwÙ rᡇûª¾Yž§žO| kpèt”QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE5ûS)ïÚ™HaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP+­ÿÈÓýy¿þƒ%WðÇÝZ±­ÿÈÓýy¿þƒ%WðÇÝZ†óõýÕŠøiÿ…~lîàû‚Š û‚Šè9]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@Õ—üƒíëŠè"ž°D³¼Ë \g ËÐøše—üƒíëŠè"§ ¯ü~Çÿ\ßù­X5]ãö?úæÿÍjÁ Ÿ¥UnµiúUVëH ’Æò]Oå®çX p¹ÆvÈíÒ¥7q甹¸û4‡ù.)¡ŠßO´à˜¡P}2î3úÖÙ"–”Ÿ_5‡ò4 ÎûT_ݹÿÀYøš>Õ÷nð_þ&´~ɬ¿÷õ¿Æ²Eë/ýýoñ FÚ¢þíÏþËÿÄÓ&—í6ò[ÃÅåR™h]‚0I,JÓû$>²ßÖÿŽâ‚š6pcRØg,¹4%QLŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¿je=ûS) (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šåu¿ù`ÿ¯7ÿÐdªþû£ëV5¿ù`ÿ¯7ÿÐdªþû£ëXPÞ~¿¢:±_ ?ð¯ÍÜpQDpQ] ˯õf¼÷Ä_ñóýt_ç^…uþ¬×žø‹þ>bÿ®‹ü躲ÿ}¯ýqOýTõ—üƒíëŠè"§ ¯ü~Çÿ\ßù­X5]ãö?úæÿÍjÁ Ÿ¥UnµiúUVëH ¬q}'û¶ßú5«`šÆ”âòO¥¯þŽjÓi9  sFj¿›G›@†Ÿ¯^éK«\O`fÓcÔåY.EÇÏ, Ž@ÈïøWazßñ.¹?ôÅ¿‘®aü3q)»¶}TfÝ]‰mÖßÙ •ß»§™®†õÿâ[wí ÿè&ŸEýt»,ÖÖ»{c¨AÖ“²Ê{‘mâáY˺JÐýsí[µË*ê’ø‘k©¢†R–e&‡Ë‰:/’ÇžÙÞ…¸=ަŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¿je=ûS) (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šåu¿ù`ÿ¯7ÿÐdªþè>µc[ÿ‘¦úóýJ¯áŽƒëXPÞ~¿¢:±_ ?ð¯ÍÜpQDpQ] ˯õf¼÷Ä_ñóýt_ç^…uþ¬×žø‹þ>bÿ®‹ü躲ÿ}¯ýqOýTõ—üƒíëŠè"§ ¯ü~Çÿ\ßù­X5]ãö?úæÿÍjÁ Ÿ¥UnµiúUVëH s73•RÅ#·rd²98üJÚ…™<Þ[ƒèÒ¨#ð&…r—󕱆õ.à:¿ögÇÍs&{à(Ê™ßo²ÿŸë_ûü¿ãGÛì¿çú×þÿ/øÖÙüüÍù/ÿGÙ›þ~fü—ÿ‰ FwÛì¿çú×þÿ/øÓ..àžÖ[{yâšYÆ«†9#8è\Ö§ÙüüÍù/ÿLš7·‰¦3„™\G|`h%QLAEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_µ2žý©”†QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQErºßü0×›ÿè2U tZ±­ÿÈÓýy¿þƒ%WðÏOư¡¼ýDub¾á_›;¸>࢈>ࢺA—_êÍyãæ/úè¿Î½ ëýY¯=ñü|Åÿ]ùÐueÿ û_úâŸú©ê /ùÚÿ×ÿÐEO@ _øýþ¹¿óZ°jºÿÇìõÍÿšÕƒ@?JªÝjÓôª­ÖIÅôŸîÛè֫𮩑`÷wF@Ê#ff =É"©Hq{'Ò×ÿFµO«Å%Þ,ÛZÜ—À1]#ažs€• cº‘Ef÷6WvÏur-’9BnV NŒpzP^x¦ÒÒIâû5ÔÒÃr–¾\J¤»²îrÀc¾+?êqéF.`V×ÂîÚ&‘äŠ5^â7cóŽ3Ò–= SšìÝÝ5šJú”WŽ‘HÌ¡=˜¨Éü5¿õåÿ_×çÿ¼ž4´bÆM;R†8æO,‘(X$$ žã‘‘È­ëÓÿûŸúäßÈ×3y ÝÜXëp$¿»Iâ%ލ;¸ëò™í]ëÿĶïþ¸¿þ‚h[RÅeßëÖz~¥g§Éæ=ÅÓ„Ur9ÁcØw8>•©\N£¢kP_ÚÍŵǪ,ìâÑˠø‡ÆÕtâ-Ò³;j(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ý©”÷íL¤0¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(Ö,.dÖÒõcͼv®¬û‡köëÜV†z~5Õ_ÿÈ>çþ¹7ò®WÃ=?˜AE»uÔÒ¥G5ú+ÜpQDpQVd2ëýY¯=ñü|Åÿ]ùס]«5ç¾"ÿ˜¿ë¢ÿ:äkÿ\SÿA=Aeÿ û_úâŸú©è«ÿ±ÿ×7þkV W_øýþ¹¿óZ°h'éU[­Z~•UºÒ•ÁÛq3žˆ–ÎÇÐ X“ùWÎ\n^AäPÁÿ!)ÿë„_ú”󦨳k+bORb_ð lîš6?÷OåMþÌÓÿçÆÛþü¯øQý™§ÿÏ·ýù_ð lîš‚ù¶ió¡ûÒ¡«0À¥þÌÓÿçÆÛþü¯øSâ±´÷Ãkn?‰#þ”=QLŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¿je=ûS) (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š¯ÿ ûŸúäßʹ_ ôükª¿ÿ}Ïýroå\¯†z~4ÝÁ÷A÷Ä2ëýY¯=ñü|Åÿ]ùס]«5ç¾"ÿ˜¿ë¢ÿ:äkÿ\SÿA=Aeÿ û_úâŸú©è«ÿ±ÿ×7þkV W_øýþ¹¿óZ°h'éU[­Z~•UúÒ;ù Oÿ\"ÿФ¥ÔµK=&Ý'½‘‘Äk¶6rXô(&’ù Oÿ\"ÿФ¬FòÛi1Ç3Bí©ÀE•<ò~bŸd>æÕ†§m©ÆïmçmCƒæÀñÀ8«uÉø‚ÁŦ•gw& “jq‡óÑrß)#JÊñ-½¾¹¥ËØYé)fØ]Àï ¾ã»n×P¯¸Ïn”_…Åý~6=œk?NÕà¿Ñ#ÕXy2yû g9?…qòÃaíŒ~%»[»ÓZÜΉäÉÜO<>ݸÏ5»áIâ±ð%•ÄĤ0Û´ŒHè “ü¨{7ýuºFޝiº¬ÒCgpZXÔ;#Æñ¶ÓЀÀd{Ž)/Ç´uAÜ쨤BJ)eÚHäzRÐEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_µ2žý©”†QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW¿ÿ}Ïýroå\·†z~5ÔßÿÈ>çþ¹7ò®[Ã=?î û‚Š û‚Šbuþ¬×žø‹þ>bÿ®‹üëЮ¿ÕšóßÇÌ_õÑwV_òµÿ®)ÿ Šž ²ÿ}¯ýqOýTôÕÿØÿë›ÕjÁRl1Hörr cóÚ˜m'=þÉþiÁÇJ®êsÒ˜l¥?ÞÿÀÉi§Oöü – ·çR¸ÁÎ!‰O±Ëœ~D~uv ¶Dˆ˜4šV¹«%Ì"ÞæÖæØ¨– ” Êd c\ݕΫáØ5˜¥³kÆVûU·Ù`pŽÒ™ùˆÃrFIÁ&´|3$X¹‘Öñï¦"K™î-$„9èîå€ãÖ˜Æ?éòÿ×$þoQ­õ£Ç ‹u$çlL$HyáOsÁééFwjúaózâ´øîÖéRiש>ŸvÆg6íåm H;‡~ôís°·ÕôÛ¹Ú mBÒyÑÅ2³ z€sY¶þ+²¿ÑõŒ–ÒJ¡KÛItˆÑå¶üÇ'oã×¥béúTñiqc"\ÃvÞiòˆtB²gwñ×Ú¡Ž+ƒàGÑÿ³oVúßb¸6͇ÄÃî¶0ÜsÇj¤µuQø‚Áõ‹­)çŽ+¸YUc’E .åÝòŒäÓ4½vÛjº„Öö‹(;‹ÈÉdŸj¥j^Çź¢ÏerËzÑ4¤Ða6œ°ápGzçcÓõôíI Ô!ŽÄÏ âU’Dr~WÊÛ—õúÒè{.¥c¢ÝÍ{m³clÏ*„9é†'WCÕ†±os:ù~\wRBnªp>õÍE¦.št{Õ´¿½Óâk†xä¶ýìO!7”qÃp«_°4zUñ{Y­ãšòy#‰â1¶Æ<|§Qßúì¿®æÅ¶¥ay4ÚÞÛO,_ë)U™> )‰¬i’,ìš•› q™ŠÎ§Ëÿ{ž?äl-¯Í†¡¤i±] ?°º[ÍwhmäŽCÀMÄ ã“Î8õ5oí²§†ŒVuku q$ˆö'å\€Û21!$œÐ¾©¯Co Ë©éÓ[ݪ:(d:X)åO½h\j66“ÇÍí¼3Kþ®9%Ugúy® X^Í¥x¢†þq,–òFg´òd—n a®O‡5&§¦Éq¬ê†ôj«i¨¬f#kd²å6µ‰FhÈ9=ºç­0;Ô¸†Y¥Š9£y"À‘)‘‘‘Ú¤¬ý?ÈK«¨c³–9#¬—2Dí/7ñ`p}+BS¶¸ŠÐj·3¸Ha“{±ì¢5$ÕÊËnM×’Öç¸`Â8¤û®ÞPÀ>ƦNÊèqWz³ñ\’ùCMÔb™íÍͼrÆŠncî|ØÏ#†*yë Ýkû*M'Q´¸òLÄÎ"Ú8(팞ž¸5ÎøRÆkmzÉ­¡ÕÚÞ; Ãj‘2ù, ±©ÎBä`A[þ¶˜KT»†H®¯nßå• ²Ä‡dc¶àUv×ïüɾ‡AERVuŸú‡ÿ®óèÆ­δ‚AÿM¦ÿÑ@K­éPHÑË©ZFêpU¦PGášoü$7ýl¿ïúÿsÿðƒÌ¤ˆµ}±º ¹$rdûâøB.¿è2?ðÿñÊãu1?ÉøžŠ£ƒ¶µ_ÜÿÈè?á Ñ¿è+eÿ×ühÿ„ƒFÿ ­—ýÿ_ñ®þ‹¯ú ü?ürøB.¿è2?ðÿñÊ=¦'ù?ö8/ùúþçþGAÿ ÿA[/ûþ¿ãIÿ ù ÙßõÿÀÿ„"ëþƒ#ÿÿ£þ› ?ä2ý»þ.i‰þOÄ=Ž þ~¿¹ÿ‘¿n–SYÁsz!y'A&fÁÆFp¹éŒö§%Ì6WrÚÉ0X¬‘ùÐŒsé·õªvsÿľÚ&‘£x¢Taód ᇥOjóR¸•·lX£MËÓp.HýGç]gž\þѲÿŸ¨ï±Gö—üýCÿ}Š“ì°úÉùð£ì°úÉùð¦"?í/ùú‡þûhÙÏÔ?÷Ø©>ˬŸ˜ÿ >ˬŸ˜ÿ ûFËþ~¡ÿ¾ÅÚ6_óõýö*O²Ãë'æ?²Ãë'æ?€#þѲÿŸ¨ï±Gö—üýCÿ}Š“ì°úÉùð£ì°úÉùð ÿ´l¿çêûìQý£eÿ?Pÿßb¤û,>²~cü(û,>²~cü(?í ?ùú‡þûaX2†R<‚*?²Ãë'æ?žˆ± Eû£¥Ú™O~ÔÊC (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€+ßÿÈ>çþ¹7ò®[Ã_Öº›ÿùÜÿ×&þUËxkúÐuÜQÜS˯õf¼÷Ä_ñóýt_ç^…uþ¬×žø‹þ>bÿ®‹üè¹³´ë`@ À€ƒßåÍXø"ÚÓ_k²"k8Ï™[~`þçÐvü=9鬿äkÿ\SÿA‰}k-ô¶I:5ÌJã•§ù÷¢€#ºq Ü3¿tf줕#>ƒå<ÔGP²ÿŸëoûü¿ãW\³J‘#m, Æp?ÄSþÌçæoÉøš@gý¾Ëþ­ïòÿP²ÿŸë_ûü¿ãZf?óó7ä¿üMeoùù›ò_þ&€*Z8¸ºšá9ˆ¢F­Ùˆ,I£æëìjåF…ÖW…Îâ 0lc çü ILŠ( Š( Š( Š( Š( Š( «De´¸¸anó,ÎÙF>P0wéVj k«™æŽÙ¢a`¬Î¥‰8Ï@Gb(ÇÛ¥ÿ }ÏýõÿGÛ¥ÿ }ÏýõÿQ}—RÿŸ«oûðøª>Ë©ÏÕ·ýø?üUKöéèsÿ}GÿÅÑöéèsÿ}GÿÅÔ_eÔ¿çêÛþüþ*²ê_óõmÿ~ÿ@ýº_úÜÿßQÿñtËhÚ(¾7–glt˜¶?ZoÙµ!ÿ/6ÇÛÉaÿ³Síå3B­’¬=$Ô–Š( Š( Š(  ûÝ-.¥YRCž¨ûÃü}êì0ÇKJ`O¢€ (¢€ (¢€ (¢€ *»ÞÁ”Ë»/ÞÆÏ·ë´T±KÈ7 §¸4ú(¢€ (¢€ý©”÷íL¤0¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(½ÿüƒîë“*å¼5ýMu7ÿò¹ÿ®Mü«–ð×õ4ÝA÷A÷Ä2ëýY¯=ñü|Åÿ]ùס]«5ç¾"ÿ˜¿ë¢ÿ:ӭ¹ÇîSŸø¬[_ÛZjI~š…ûN®\–hþrz†ù9¶lÎ4ëbsÄ ÐgøEfÁâ½âxáŠæF’G؃ìÒŒŸO»@ ÿÄÂ!ÿLŸù¥W×u)4Ý1¤·D’îWXm£~# ûw>ÀÔ®ØÔ¡ÿ®2èIY:¾“&¯ªÙ¼Óƒ ¦#iú|¾Ð¡ý^³añ¤özeÒÇ8MFO. TeNüÜð>SÓ5}NíFaÿL#ÿО¹›?êöí¥ÙÈöMa§\´±Êü×\0®ÜóuÏj@ö/Øø²Öúkdw°GtYmçš5ÊÃ<x=@éYöÞ&¼»ðö…Ä7Vr‡í)n¯™üŠ_ùâ¬Úøvî+Bµy /asçJCÃ—Ž¿0늮žÖ?á—Bv±0ÆTA0wÜÀHæxãОj–àÍ mnîOêZsYM,óM·ÓmníDˆöɸ@êäg  ü ço­hhuÞcr.Ìââæ[‚±1(»Žq’?•ÿ®ÁÛúî!‚þÎKß²Ý[Ù$fU¹T# î0Äôç)lõÃ{k-ÌzV¢±ªz"™é´nÿбXöÞ»‘õîÒÆÒòÕák{)]Ñ¿å¦Ö)€sžj{/_¿ÐäÓ®žÁ ˆÂI’bm¬ WCƒ‚zÐ55LJµ¶K«+ËYbI#”tÜëýÒF=hj&µÓî'ˆÛ]ζªæX# 3ódƒÓœx¬X¼#x4Íf‡O²{Ö…¡†Ý™£C'h<‘ØT—~š]bâüéÚ=ïÚÂ4‹x0¸P§cm;”ã¡Å0:kk庸¸‰`V¸•Ó (aœ¡ïŽõjªÚ¥Üw¤«l¶‹´[³¸ s»oÿ2ÿñTÂ!¡ÿÏ›ÿàL¿üU¸®ëúù>ùeø™Sþk?ùò»ÿ¾¢ÿâèÿ„ÚÏþ|®ÿ憎øº·ÿ†‡ÿ>oÿ2ÿñTÂ!¡ÿÏ›ÿàL¿üU¸®ëúù>ùeø™Sþk?ùò»ÿ¾¢ÿâèÿ„ÚÏþ|®ÿ憎øº·ÿ†‡ÿ>oÿ2ÿñTÂ!¡ÿÏ›ÿàL¿üU¸®ëúù>ùeø™Sþk?ùò»ÿ¾¢ÿâèÿ„ÚÏþ|®ÿ憎øº·ÿ†‡ÿ>oÿ2ÿñTÂ!¡ÿÏ›ÿàL¿üU¸®ëúù>ùeø™Sþk?ùò»ÿ¾¢ÿâèÿ„ÚÏþ|®ÿ憎øº·ÿ†‡ÿ>oÿ2ÿñTÂ!¡ÿÏ›ÿàL¿üU¸®ëúù>ùeø™Sþk?ùò»ÿ¾¢ÿâèÿ„ÚÏþ|®ÿ憎øº·ÿ†‡ÿ>oÿ2ÿñThxâÍóÿ_2ÿñTr⻯ëäøå—õó.Y^$U›0ù¤‰]Žõ\±“óÜÓ^ëìڬ軫ƒ„ 1, 䎡GåT¡¬¡ŽÒ}ÊðF«Ã²‚Æá‚28«ºr4ÓËxè<¹#DMÃ’cŸ¡ÝúWYç’h·üúMù¯øÑý¢ßóé7æ¿ãWv§üóþùmOùçýò)ˆ¥ý¢ßóé7æ¿ãW#q,jàèiv§üóþù¿Aí@ ~ÔÊ{ö¦RQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE^ÿþA÷?õÉ¿•rÞþ¦º›ÿùÜÿ×&þUËxk©ÿxÐuÜQÜS˯õf¼÷Ä_ñóýt_ç^…uþ¬×žø‹þ>bÿ®‹ü躲ÿ}¯ýqOýU84mbmR8ÈžQÓ?*“ÔØž3ÿ×5rËþAö¿õÅ?ôY–¾&³ºÖäÓP·åŽb~Y}åO×Ó ˜åE_œü]lÃþ\.¿8ÿøº´ö6Xÿ;ûô¿áUÞÊËþ|­¿ïÒÿ…!µŽS,·&Æpª©HQœgg,z{Uª¥f<›©íП("H«ýÜ–o—?]¦ ¢¢”nxc$…‘ðØ8ãi?Ò¦û%·üûÅÿ| J)~Ëmÿ>ðÿß²[ϼ?÷À ¢—ì¶¿óïýð*+ˆcVX‘c`ê§hÀ 9üèJ(¢€ (¢€ (¢€ ®!š)d’ÞdO4†q$eùÆ20ðbЇ7ÿóñmÿ€íÿÅÑ›ÿùø¶ÿÀvÿâêj(ßÿÏÅ·þ·ÿFoÿçâÛÿÛÿ‹©¨ sÿ?6ßøßü]:„Á'$ž¤“’2jJ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š( ‹8.öyñ‡Ør3þz{TôQ@Q@Q@ ~ÔÊ{ö¦RQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE^ÿþA÷?õÉ¿•rÞêÞ5ÔßÿÈ>çþ¹7ò®[Ã]OûÆ€;¨>࢈>࢘†]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@ÕN¶dSÿA^=IŠE’=.É$BYmÐGB*{<ÿg[`|„À'ý‘\õ—Н®õ‘¦Rer%i'ËQÕÉÓ¦=r(§_øýOúæÿÍkÅÚšØé±[}µ,¥¾”@· O)O.ù=PqîEl/ü~Çÿ\ßù­C>•oqªÃ¨J]ä†&Š8Ûâ lc9à½)ÍiÞ)‚ÛÂw‘]Ëa)µ3 A6p»8ùRO×Ò ð¶¢nµMZuxïä Šc”2  Ý°‚qüù®™4‹h5+›ø÷¹H¸Øvç Œuçj4Ø-/¯.âÝæ].06Œ qNýX ÿ”ÿõÂ/ý J»T­ÿä%?ýp‹ÿB’®Ð2œ\Ú×Sÿ 5[&©\\Yÿ×Sÿ¢Þ¥i9¤ù£5[Ì£Ì4ÎMâ¹añ±Ïksi-×ÙJÇm(h؃Ö\”bä éoOú0ÿ®±ÿèk\úøbÕ.ã•ooDÜý­-w¯”$$’~îìd“Œ÷­«·Í°ÿ®ÑèÅ¡mærèÌ$ àw®oÚΥ­mº’}1`ù¼ÛXÃùðp“Œúü¢ºFÝ´íÆìqž™®d躭þµg{}›mörÛå´gi&HØr£ Îzž”CFÃ^Sv6¶7­lº(¢9qýß›'=Ž5NïÄ~›ªÀ¶×–Ööo:¬ê¡±ƒ†R¬GQëPÚèÚݾ‰.†.-Õ`x`»ÜL0¹\cŽä5TÓü#s·Åí´ë%¸ÓÚӎϹ‰ûí•Ö‡­×—ùhÓþº‰â´²±„ÛÞ_]½¢O"[ fUÀù˜’'>çž*ÝÕÕÆ¥ ¥Ö‰0ó&òÞ' }ÒÃw þÎkŸŸÂWrËew-ž“{ÔÔðî©gqí£Ù½Ä7wRˆåvThæ9…$0À튒÷×·±ëDËn’_,B¼`}î:dvíBØ:“K©]Kâ LW6qÌ·dÉÚ«‚v±­Okâ‹;«¨#[{´‚å™-¦` œç 8ÈǺn«{}¥ß]-’KlÒ¤ÑÇ#²˜Ý@Ê’ îèF=ꆉá¥ORéÚD°Ã¸-ê©sŒ¸Ï©Ý@ yâv½ºÒE„±ÚÍ~±ý©,S. sœ;œV業G§\Áj¶·7W3«:EnªNÕÆIÜ@î;Ö%¿‡õˆWJ°y,^ÃN¹Yc˜3‰Y®Ügž¹íZ$Ò®uXcŽÞÒÊR¡ŠË<Ï·fBªOê(éóýuþ¼Éïuè­.bµK+Ë«¹#óL襣N™bXÏ{Q¨kɦHŸi°½ä kªcŒ±ÀÝónêFxª?ÙÅìÖSÚÝ\4¶¹LȦHpTrNF+7Xð–¡©^]ÊÑiÓµÃÆé<ò?™m·nUÒ1Áî:óO¯õýlœZÀ²Õ|C-ìò€Fƒ-È8QêIüÍ>MbëS¶¹´Ó¡¹±Ôâ1?—rˆË,2Ã’¤`0õªÚ§…®5µ”2À ¾É`IY#Ç ½ œzÕßé ¦™žM/J²‘€Pl3óùÊËšH*^]ézåîª|É-ÌÒáp3f(8ãîãúÕM7WÕ§gi«Eh>ÝM·Ü6Á(Ù'<0äc¡â¶5+$Ô´Ë«ª\DÑ’:ŒŒf±ôí#T:Þ­-¡û "ܱÞ[»d p£ž§šÿןü{^_ðE×õ-gIW½…lÍa`æi‹0¤“ÀÁ¨ïõ»´ñ)Òà¿Ó,À†7Qx…žVbÀ…ïL^´ëí;Z—Ä_oH4û›xT Hç¹tò›3`FÀ±èxSN×´ícY¶ŸNXôÕ³B™¤wi#õ!vàzŠA‘ßëwiâS¥A¥Ú n¢ížVbÀ…ïL^µ{Ä:¬ÚM„RÄ! $é š|ùp†þ6ÇnÝGQÍT×tÍ_U´›Ltÿ°Ê¡<ù™ÚTõ!và·¡Ü*Ö¹¥\ßÙÚ%³Âïm2Jb¹Ï—0­Œúç¡ä(ÿ1‹âÉm´‹›‹¨àžT»û,[ò®€r>ñÀç8Ý÷N3Zú¢ú•“Ë%ͼÒ,…XCÇåð>VWù³õéX‰ákõçìíîÅòÞÃmï!]¥s€~`I$§¥hXiº½¥ÍÅë5Ú/n‘îP(‘*íÂ[ÉS^ÖßðAÿ_ü„ž(¾´ ²ÛòÚ}ˆîûK©#÷ƒœcn˜À<Ó¥ñ.¢žv¤°ÚÿdCyöVS»Î#xC 9Ƙè:Ôsx_P–æDÿ@1½ð»ÇwÚPnhÇA·;ºv©eðÖ¢Âm5fµþÈšóíLÇwœðæ01ŒsÐô¥—þ¶ÿƒýX%ÖßÖÿðIâ‹áªÉ -‘ß-§ØŽï´º’?x9Æ1–éŒÍYƒ[»ºñ-Þž—ú\)o:¢ÛÈŒg•v+>qêGÝ=*¤ÞÔ%¹‘?Ð o|.ÅñÝö”Ú1ÐmÎîªö§¦jú½ÜNº|Vp]$ë23´ØVÈIÆ ÉïDz_úÛþ>¿×øÒj÷éâ«]5¬ãŠÎd”¬¬ûÊ9}ÑÏ~O·}Ê̻ӦŸÄmú²­c™\wáqŽ=iÑÐ:…Q@ ~ÔÊ{ö¦RQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE^ÿþA÷?õÉ¿•rÞêÞ5ÔßÿÈ>çþ¹7ò®[Ã]OûÆ€;¨>࢈>࢘†]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@Õ—üƒíëŠè"ž°D³¼Ë \g ËÐøše—üƒíëŠè"§ ¯ü~Çÿ\ßù­X5]ãö?úæÿÍjÁ Ÿ¥UnµiúUVëHíÿä%?ýp‹ÿB’®Õ+ù Oÿ\"ÿФ«´À­x¯û‰Q ùRn*:U—ûë?…@nâ'îÜÿà4ŸüM\”’ÑF¬WÌm¥‡P0Oô©>ɬ¿÷õ¿Æ€3¾Õ÷nð_þ&µEýÛŸü—ÿ‰­²Cë/ýýoñ£ì‘zËÿ[üiŸö¨¿»sÿ€²ÿñ4!º1ÃrãÌWwx™…`ßÄIÆ8­²Cë'ýýoñ¨æˆ[…’6|nUef,'þ´%QLŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¿je=ûS) (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š¯ÿ ûŸúäßʹo õ?ïç]Mÿüƒîë“*å¼7Ôÿ¼wP}ÁE}ÁE1 ºÿVkÏ|Eÿ1×EþuèW_êÍyãæ/úè¿Î€;«/ùÚÿ×ÿÐEOPYÈ>×þ¸§þ‚*zjÿÇìõÍÿšÕƒU×þ?cÿ®oüÖ¬‰úUVëVŸ¥Un´€ŽßþBSÿ׿ô)*íR·ÿ”ÿõÂ/ý J»L¤8¹´ÿ®§ÿ@j´MR¸8¸³ÿ®§ÿE½Ldæf‚~SôªþmLŒPÀä<1¯^ÚhÚR_XŸ±ÜJ`K±q½‹–m»“xÎMv§ý×Xÿô5®bÇÃ%•µÖ¨'±²—Ά·ØKJîmÇ8'°Ñ]¾m‡ýv‹ÿF-6IÙ‚#1èN+E×/µ•†ét´‹N˜IÐgÇl ^3铊ÜbB’N8µÈA¦ßÉ®[ÜZhÏ£¡f7Ž.¤À©؄峃¸€iCzÛ_Ónîe··åxƒnd…Ê|½@|m$zUgñ¥Æ•©É§Ìßjµ¶ivK ÆËò’ב‘ô¬ý>ß]±ðëè‘Xù7[¼p_,¨cfÚqÀŸqÖ©YèZœ×ƒÉiyŸ¥µ¨kÛÅœ´¤ž„3a/¥ª]¿Ìkuýv:øHl¬´ë5 ‚'žÝe*‘3œ`e° às×¥XÔ/n?±ÅÞ’±ÜÈæ3••˜dðºI®^MRWÒi÷’a¬¶ö·þD‘²ÎC…e9õâºí.Ò;.ÚÖZãŒ>òžÙïVívüÈW²*éú¤Œa·Ô•`½žIÄQ*0܈Ä·iëÎx¦Ïâm"ÝžåÎùd‰BA#±d8q…RxõéPëv·Ëªéš•©»6¾jIȨÅ\XÁ‚k3HÑõ(µ6êâЩq{4ªdRcœ¨8<Ÿ¦jQLйñe”3é†-ÓÚ^¬¬%†7‘—f8تOSÏb›¨x‘´ø5KäÌ–X•]D˜ÎìŽO9}5›“«i×–×ñéæãɼ¼cJŠÆ9[*À“ŽÝ3žj]CEÔ¯c×Ý-‚½Ñ¶–iç1…%rŒdж¸u4[[kkHŠÔÈ-n„þ`–‰@1ÀGZµoâ-*êøYCvbYWä`®W¨V#kè ¬ûˆu+ýSH¿m6Kq š)£i²+¨ø$Ç@sYš†ç´{;Ký>õ¡cØÔ Aœc/H=6ñ“@t4o¼Yjú†Ÿi§\ù-êÁ)ò[a\6à®FÒrBkcPÖ,t¶‰.åpòçbGÈÌSµA8×1k¦k[èšTšf"Ó®•ÚífMŽŠd.wdäqŠÔñ-ÅÃA-•Ü—‘«ˆ®mn38áƒNFJ6_?Ñ_ëÌн×tí<Â.g`ó.øãHܯ®ÕîE%ο§YÝGoq4‘¼›B³@û2Ý}»A>æ²E¶³aªÃª5Ô%šÆ;{…†DFI’HÜ@*Ký«7^ÒuÍJ{Äk[Ù’W‰­¼»ÅHbQ´²ºnŽCs†íO­„oÛë=S\[ÙÒ;;V`PS''¿4’ëëy§Ü>‰þ‘w Æau`€ÉRÆ2AéÅejþÔo§×cŠ ìÛÏžnÐÍ2‡2“޵¥áý?ȹ¸»›N¾µ¸dXËÝß} º‚NÞØŸn´ÙnÛRžæÿUˆ@`i™‚©»Fm§÷PãU´Ï\]_Ak}¦›&º„Ïl|á&õÈnÖƒŽ~µ¡«ØOF½± ÜBñ†=‰±´ûMVóXÓ®µ fš}»Çþµ_Í‘‚‚W ßž”-ÿ¯?øÿ¯À³¬ë—º?™pÚO™§ÂWÌŸí •Lã=ȧÜëÿÛRiÖ|(RWy®ŒXÜXFÏݪ:¢jwø3h÷7zm¶×!šY$ê]Ã8'oaŒgŸJĺuƨÒGoáõ7…TA©™cC 뜃¿å9àš@4®u{ñ­I§Xiöó˜¡IdynŒXÜX`Ÿ»Wï绂Ü5•º˜° ¢5Ô± &¹ßé—:Žø ÐVKݪ°ê¾lhc?ÞÎwŒð5­¯6ªšJÇ¥Äó\»*;ÆÈ¬‰üL»Èô÷4t¥$ñS6ž_û9¿´>ØlE¨”eýü}Üsœ~=¾»{uopé9Ôm§ÍlnUÈÜ~9Rè3íTMºþÌÓÞÇH–Ú]6èL¶ÓÍiÁRî F㸜“Ö£{m~+mJúÚÅã½Ô®c(匼ª…Ý’B—à÷ duÅ×åÿ?¯Ïþ»¢jÍ«[NÒ[iíçh&xpqчQÈì*u{û­bîÒÛO·kkY–)&{¢­Ê«aé»Ö›¦› k{] xLEšâ2ÁO-)*͸ç¨ÎNk;RÓ.oµ˜eµÐVÎâ;¥vÔüØÁhÔó÷NæÜ¼`ŒsGUýv†œ:½ýÖ±wim§Ûµµ¬Ë“=ÑVåU‰ °ôÝëMºÖï,uKk{5VÖæ")’à3’s‚S8õ8¬íKL¹¾Öa–×A[;ˆî•ÛSóc£SÏÝ;›rñ‚1Í;S°½Ôu»iàÑM¥Ì ´ŒéÌJyS¸î#к\RõÖ»{c¨AÖ“²Ê{‘mâáY˺JÐýsí[µË*ê’ø‘k©¢†R–e&‡Ë‰:/’ÇžÙÞºšÀ÷ (¢€ý©”÷íL¤0¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(½ÿüƒîë“*å¼7Ôÿ¼u7ÿò¹ÿ®Mü«–ðßSþñþtÝA÷A÷Ä2ëýY¯=ñü|Åÿ]ùס]«5ç¾"ÿ˜¿ë¢ÿ:äkÿ\SÿA=Aeÿ û_úâŸú©è«ÿ±ÿ×7þkV W_øýþ¹¿óZ°h'éU[­Z~•UºÒ;ù Oÿ\"ÿФ«µJßþBSÿ׿ô)*V¾µKøìZtR!uˆžJŽÿçÐú`6ô”6ó`”Š]Ïœ¬¹üȨMý–ãúÛþÿ/øÕÉYDBHÛA=¸'ù Ù›þ~eü—ü(;íö_óýkÿ—ühû}—üÿZÿßåÿÑû1ÿŸ™¿%ÿâhû1ÿŸ™¿%ÿâiöû/ùþµÿ¿Ëþ4s ×—¼©3™–Á‚…`Äœt鯴¾ÌçæoÉøšdˆöû_Íi°V FN¹ ’Š(¦ ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ ¹™ã1GS$¯±wt“øIömKþ~­¿ïÁÿâ¨Å_캗üý[߃ÿÅQö]Kþ~­¿ïÁÿâ¨Å_캗üý[߃ÿÅQö]Kþ~­¿ïÁÿâ¨Å^&¸Šãȹ1³2FŒ~¢¬PEPEPE·pÂû f|gdh]€úMOEG ñN¤ÆÙÇt ûŽ¢¤ Š( Š( ¿je=ûS) (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š¯ÿ ûŸúäßʹo õ?ïç]Mÿüƒîë“*åü7÷ûÇùÐsÜQÜS˯õf¼÷Ä_ñóýt_ç^…uþ¬×žø‹þ>bÿ®‹ü躲ÿ}¯ýqOýTõ—üƒíëŠè"§ ¯ü~Çÿ\ßù­X5]ãö?úæÿÍjÁ Ÿ¥UnµiúUVëHíÿä%?ýp‹ÿB’²çðµÆ¤Úƒj7ëpdVå# 'AÓ©oÿ!)ÿë„_ú•J_hÐÎðÉs(‘Ëeû4§ œcîÓRC‹‹Oúêô¨õ]^) ß óËq/• 0€YÛñ’à¦;~þÌúÊô[Õ zÖ]BÈA•Ø/–K·dЩU$Lh´ºÌj°µ–ÚâïÝ@¹M˜ÈlÏ=³Tdñm¨1,67×2Ë4ФQ*n&#†<°ôæ³SFÕí­´‰ãº‚âþÃÌVûøw`·9Åf…}k{auq%¶èfºšU˜ŒÊrä ãßú‹¡£cã ;é­TY_à Ԇ§š ¨dÊ› ðGLdu­›ÓþŒ?ë¬ú×1ƒv– Ýo©µãÇ »`q× ?ƺ·Í°ÿ®ÑèÅ¥Ð:‘NªÉ§m“ÎKqp[nÒHÇ^¼VWü&Ζím§j&kau¶ДŒœdå‡W÷Ô_ü][ÿ„CCÿŸ7ÿÀ™øª?áÐÿçÍÿð&_þ*¹ùq]×õò;9ðË/ÃüÊŸð›YÿÏ•ßýõÿGü&Öóåwÿ}EÿÅÕ¿øD4?ùóü —ÿŠ£þ þ|ßÿeÿâ¨åÅw_×È9ðË/ÃüÊŸð›YÿÏ•ßýõÿZz]ú6–·…Hóåv;™AûÄ ’qÀp{UøD4?ùóü —ÿЦB’‚Ä«,jXÄC°K9'ÁÍkIVO÷|Œ+¼;KئŸ™vâëÊÔmåH™üè\°R¼í+ƒœãÇó©?´[þ}&ü×üj½ŽëËÔºÚ 1#Æ s¸’½3×zûÖ®Ôÿžqÿß"¶9Š_Ú-ÿ>“~kþ4h·üúMù¯øÕÝ©ÿ<ãÿ¾ESþyÇÿ|Šb)h·üúMù¯øÕÈÜK¸:]©ÿ<ãÿ¾E/Ð`{P_µ2žý©”†QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW¿ÿ}Ïýroå\¿†þñÿxÿ:ê/ÿäsÿ\›ùW/ῼÞ?΀;˜>࢈>࢘†]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@Õ—üƒíëŠè"§¨,¿äkÿ\SÿA=5ãö?úæÿÍjÁªëÿ±ÿ×7þkV Dý*«u«OÒª·Z@Goÿ!)ÿë„_ú• º ŒÚÔz«Æ~ЋŒgå'³êCþ¦·ÿ”ÿõÂ/ý J»L ÷qHâ)"¼O¼)8ÝÁR3ô&¡3LOüx\þqÿñuzŠ¡æÍÿ>_œü]lßóáuùÇÿÅÕú(‡›7üø]~qÿñt=ËG·’ë»HW'ižàUú(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š()áóLl­²HÛz62Æ9ø&“7ÿóñmÿ€íÿÅÔÔP9¿ÿŸ‹oüoþ.ŒßÿÏÅ·þ·ÿSQ@æÿþ~-¿ð¿øº3ÿ?ßøßü]MEB‘Hgó§‘^@»bmg'ŒŸAßµMEQEQET76°ÝÅåN›—9ôÁúÔÔP*ª EPª€)h¢€ (¢€ (¢€ý©”÷íL¤0¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(½ÿüƒîë“*åü7÷ûÇù×Qÿ ûŸúäßʹ ýãþñþtÜÁ÷A÷Ä2ëýY¯=ñü|Åÿ]ùס]«5ç¾"ÿ˜¿ë¢ÿ:äkÿ\SÿA=Aeÿ û_úâŸú©è«ÿ±ÿ×7þkV W_øýOúæÿÍjÁ Ÿ¥U~µiúUgÒ+ù Oÿ\"ÿФª(ÕçѬ-¦·’Ö#5ÒBÒÝc[9c†1ëWàÿœÿõÂ/ý J¯®i’ê‹`±À·½ŽáÄ„ò«œÁçš}‡Ü£ˆ¾Í§­ÍÅÕ®ªe¸[xF”ƒ—#;NéÏâ*ÕLj£·1Gý-ËEç=´H¥âLã-óc®x“Š“VÒÞôéßgò£׉pàñ•çy¬ÍsÃ/}­.§ž›zL‚ü£ÊÁ[’Å×áþbþ¿ò.Kâ›2-ŽÝóÜ@.-£¬g£6â1ÏëÁâŸáK¹¯¼/ass#I4ˆK3õ<žµP躅…ìWºLZz3Z­¼Ö®Y#]¤Pª’9cÁ5¦“¨Xø1t¸&€_¬ É’XçœãÀÔ:v§u©hâ1o únŽe—>\r)Ãg8à‘ÏLSumM_U²y¦hì­•Üfxä2œr¸À »¿z¯g¢ßè×:‰ÓdŠh.vH‰y<ŒÂ^¹°Nžy*z_×À?¯ëúîKáÍbçU7©3Ú\%¼îÏ>T¹ džGCÉ»Xz.•yk©_j‚Ö).‚/‘i’ƒn~bHcŸAÐVå0 (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ý©”÷íL¤0¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(½ÿüƒîë“*åü7÷ûÇù×Qÿ ûŸúäßʹ ýãþñþtÜÁ÷A÷Ä2ëýY¯=ñü|Åÿ]ùס]«5ç¾"ÿ˜¿ë¢ÿ:äkÿ\SÿA=Aeÿ û_úâŸú©è6o.t—k2…*vŒ‘œsœoaô›þü¿øS¨ šö:Oÿ€òñ5]CýÛü“ÿ‰«”P;Ew¹šá‘‘YV4 0HRÇ8í÷¿J¹Tµ¹m…¼P*4÷2ˆ£Þp à’N=¨"‹[ Å©in¡™ Kw`I 3¿¨ ƒî*ìì•Í;«¶‘©Eg}“Äóý§à+ÿñt}“Äóý§à+ÿñts¾Ì~Í2þ¾FöOÏöÿ€¯ÿÅÑöOÏöÿ€¯ÿÅÑÎû0ökù—õò4h¬ï²xƒþ´ïüþ.²xƒþ´ïüþ.ŽwÙ‡³_Ì¿¯‘£Eg}“Äóý§à+ÿñt}“Äóý§à+ÿñts¾Ì=šþeý|+;ìž ÿŸí;ÿ_ÿ‹£ìž ÿŸí;ÿ_ÿ‹£öaì×ó/ëähÑYßdñüÿißø ÿü]dñüÿißø ÿü]ï³f¿™_#FŠÎû'ˆ?çûNÿÀWÿâèû'ˆ?çûNÿÀWÿâèç}˜{5üËúù4VwÙÉâùþÓ¿ðÿøº9ßfÍ2þ¾FöOÏöÿ€¯ÿÅÑöOÏöÿ€¯ÿÅÑÎû0ökù—õò4h¬ï²xƒþ´ïüþ.²xƒþ´ïüþ.ŽwÙ‡³_Ì¿¯‘£Eg}“Äóý§à+ÿñt}“Äóý§à+ÿñts¾Ì=šþeý|+;ìž ÿŸí;ÿ_ÿ‹£ìž ÿŸí;ÿ_ÿ‹£öaì×ó/ëähÑYßdñüÿißø ÿü]dñüÿißø ÿü]ï³f¿™_#FŠÎû'ˆ?çûNÿÀWÿâèû'ˆ?çûNÿÀWÿâèç}˜{5üËúù4VwÙÉâùþÓ¿ðÿøº9ßfÍ2þ¾FöOÏöÿ€¯ÿÅÑöOÏöÿ€¯ÿÅÑÎû0ökù—õò4h¬ï²xƒþ´ïüþ.²xƒþ´ïüþ.ŽwÙ‡³_Ì¿¯‘£Eg}“Äóý§à+ÿñtŸdñüÿißø ÿü]ï³d¿™_#AûS*µ•Ô—1Ê“ª¬öò˜eØ~R@#Ø‚ Y¦šjè‰EÅÙ…QLAEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP{ÿùÜÿ×&þUËøoï÷ó®¢ÿþA÷?õÉ¿•rþûÍþñþtÜÁ÷A÷Ä2ëýY¯=ñü|Åÿ]ùס]«5ç¾"ÿ˜¿ë¢ÿ:äkÿ\SÿA=Aeÿ û_úâŸú©è¢Š(¢Š(/Uÿ†‹ÿ_¿ûJJ—Ã?ò ŸþÂßúU-EªÿÈCEÿ¯ßý¥%KáŸùOÿa ïý*–¢?gðGúêlQEfAEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPÿš¿ýý_ªwü~jÿõüôTu~³§ð›VøþïÈ(¢Š³ ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(½ÿüƒîë“*åü9÷›ýãü먿ÿ}Ïýroå\¿‡>û¼w0}ÁE}ÁE1 ºÿVkÏ|Eÿ1×EþuèW_êÍyãæ/úè¿Î€;›6ÂÔÓÿÐEM¼{ÕkOøñ¶ÿ®)ÿ ŠšÇïôoôÊ(ûǽǽ2Š‚ú×ík$†) “ÍŠM»‚¶äw$~5Íoþ‚¶¿øøå^¢¥Á7rãRQVýüÊ;5¿ú Úÿà ÿã”lÖÿè+kÿ€'ÿŽUê){5ç÷²½¬»/¹‘Gf·ÿA[_ü?üršßýmðÿñʽEÍyýì=¬»/¹‘Gf·ÿA[_ü?üršßýmðÿñʽEÍyýì=¬»/¹‘Gf·ÿA[_ü?üršßýmðÿñʽEÍyýì=¬»/¹‘Gf·ÿA[_ü?üršßýmðÿñʽEÍyýì=¬»/¹‘Gf·ÿA[_ü?üršßýmðÿñʽEÍyýì=¬»/¹‘Gf·ÿA[_ü?üršßýmðÿñʽEÍyýì=¬»/¹‘Gf·ÿA[_ü?üršßýmðÿñʽEÍyýì=¬»/¹‘Gf·ÿA[_ü?üršßýmðÿñʽEÍyýì=¬»/¹‘Gf·ÿA[_ü?üršßýmðÿñʽEÍyýì=¬»/¹‘Gf·ÿA[_ü?üršßýmðÿñʽEÍyýì=¬»/¹‘Gf·ÿA[_ü?üršßýmðÿñʽEÍyýì=¬»/¹‘Gf·ÿA[_ü?üršßýmðÿñʽEÍyýì=¬»/¹‘Gf·ÿA[_ü?üršßýmðÿñʽEÍyýì=¬»/¹‘Gf·ÿA[_ü?üršßýmðÿñʽEÍyýì=¬»/¹‘Gf·ÿA[_ü?üršßýmðÿñʽEÍyýì=¬»/¹‘Gf·ÿA[_ü?üršßýmðÿñʽEÍyýì=¬»/¹‘Gf·ÿA[_ü?üršßýmðÿñʽEÍyýì=¬»/¹‘Gf·ÿA[_ü?üršßýmðÿñʽEÍyýì=¬»/¹‘Gf·ÿA[_ü?üršßýmðÿñʽEÍyýì=¬»/¹‘^Î×ì‘>é ³K!–Y6íÜÇØ`j±EI$¬Œå''vQE1Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ïÿäsÿ\›ùW/áϾßïç]Eÿüƒîë“*åü9÷Ûýãü蹃î (ƒî )ˆe×ú³^{â/øù‹þº/ó¯BºÿVkÏ|Eÿ1×EþtÓ\KªÇa`t»h§Ì+æy‡®?ˆ{ÕOµx«þ–¿÷ÐÿâëI`óTH°œ-Ã(ü‡¿eoùæÿøõ„©9;ó5ýz0®¡^DýoþfgÚ¼Uÿ@Ë_ûèñt}«Å_ô µÿ¾‡ÿZeoùæÿøô}•¿ç›ÿàSÒöùßáþE}iϸýÏüÌϵx«þ–¿÷ÐÿâèûWŠ¿èkÿ}þ.´þÊßóÍÿð)èû+Ï7ÿÀ§£Ø?ç‡ùÖ—üûÜÿÌÌûWŠ¿èkÿ}þ.µx«þ–¿÷ÐÿâëOì­ÿ<ßÿž²·üóü z=ƒþwø}iϸýÏüÌϵx«þ–¿÷ÐÿâèûWŠ¿èkÿ}þ.´þÊßóÍÿð)èû+Ï7ÿÀ§£Ø?ç‡ùÖ—üûÜÿÌÌûWŠ¿èkÿ}þ.µx«þ–¿÷ÐÿâëOì­ÿ<ßÿžœ¶eŽ60úÝIG°Îÿò­/ù÷¹ÿ™•ö¯Ð2×þúü]jñWý-ï¡ÿÅÖ¼v°É>f€8óßüißb‡ûÓß÷ÿ=ƒþwø}iϸýÏüÌoµx«þ–¿÷ÐÿâèûWŠ¿èkÿ}þ.¶~Å÷¦ÿ¿ïþ4}ŠïMÿßühöùßáþAõ¥ÿ>ã÷?ó1¾Õâ¯úZÿßCÿ‹£í^*ÿ e¯ýô?øºÙû?Þ›þÿ¿øÑö(½7ýÿñ£Ø?ç‡ùÖ—üûÜÿÌÆûWŠ¿èkÿ}þ.µx«þ–¿÷ÐÿâëgìPÿzoûþÿãGØ¡þôß÷ýÿÆ`ÿþäZ_óî?sÿ3í^*ÿ e¯ýô?øº>Õâ¯úZÿßCÿ‹­Ÿ±Cýé¿ïûÿb‡ûÓß÷ÿ=ƒþwø}iϸýÏüÌoµx«þ–¿÷ÐÿâèûWŠ¿èkÿ}þ.¶~Å÷¦ÿ¿ïþ4}ŠïMÿßühöùßáþAõ¥ÿ>ã÷?ó1¾Õâ¯úZÿßCÿ‹£í^*ÿ e¯ýô?øºÙû?Þ›þÿ¿øÑö(½7ýÿñ£Ø?ç‡ùÖ—üûÜÿÌÆûWŠ¿èkÿ}þ.µx«þ–¿÷ÐÿâëgìPÿzoûþÿãGØ¡þôß÷ýÿÆ`ÿþäZ_óî?sÿ3í^*ÿ e¯ýô?øº>Õâ¯úZÿßCÿ‹­Ÿ±Cýé¿ïûÿb‡ûÓß÷ÿ=ƒþwø}iϸýÏüÌoµx«þ–¿÷ÐÿâèûWŠ¿èkÿ}þ.¶~Å÷¦ÿ¿ïþ4}ŠïMÿßühöùßáþAõ¥ÿ>ã÷?ó1¾Õâ¯úZÿßCÿ‹£í^*ÿ e¯ýô?øºÙû?Þ›þÿ¿øÑö(½7ýÿñ£Ø?ç‡ùÖ—üûÜÿÌÆûWŠ¿èkÿ}þ.µx«þ–¿÷ÐÿâëgìPÿzoûþÿãGØ¡þôß÷ýÿÆ`ÿþäZ_óî?sÿ3í^*ÿ e¯ýô?øº>Õâ¯úZÿßCÿ‹­Ÿ±Cýé¿ïûÿb‡ûÓß÷ÿ=ƒþwø}iϸýÏüÌoµx«þ–¿÷ÐÿâèûWŠ¿èkÿ}þ.¶~Å÷¦ÿ¿ïþ4}ŠïMÿßühöùßáþAõ¥ÿ>ã÷?ó1¾Õâ¯úZÿßCÿ‹­*MZ_7ûNÖ(q/Ë ç®sój±ö(½7ýÿñ£ìPÿzoûþÿãUN.üÍÿ^„κœyyô¿ù–vŸJ6ŸJ­ö(½7ýÿñ£ìPÿzoûþÿãZœå§Ò§Ò«}ŠïMÿßühû?Þ›þÿ¿øÐ§Ò§Ò«}ŠïMÿßühû?Þ›þÿ¿øÐ§Ò§Ò«}ŠïMÿßühû?Þ›þÿ¿øÐ§Ò§Ò«}ŠïMÿßühû?Þ›þÿ¿øÐ§Ò§Ò«}ŠïMÿßühû?Þ›þÿ¿øÐ§Ò§Ò«}ŠïMÿßühû?Þ›þÿ¿øÐ§Ò§Ò«}ŠïMÿßühû?Þ›þÿ¿øÐ§Ò§Ò«}ŠïMÿßühû?Þ›þÿ¿øÐ§Ò§Ò«}ŠïMÿßühû?Þ›þÿ¿øÐ§Ò§Ò«}ŠïMÿßühû?Þ›þÿ¿øÐ§Ò§Ò«}ŠïMÿßühû?Þ›þÿ¿øÐ§Ò§Ò«}ŠïMÿßühû?Þ›þÿ¿øÐ§Ò§Ò«}ŠïMÿßühû?Þ›þÿ¿øÐ§Ò§Ò«}ŠïMÿßühû?Þ›þÿ¿øÐ§Ò§Ò«}ŠïMÿßühû?Þ›þÿ¿øÐ§Ò§Ò«}ŠïMÿßühû?Þ›þÿ¿øÐ§Ò§Ò«}ŠïMÿßühû?Þ›þÿ¿øÐ§Ò§Ò«}ŠïMÿßühû?Þ›þÿ¿øÐ§Ò§Ò«}ŠïMÿßühû?Þ›þÿ¿øÐ§Ò§Ò«}ŠïMÿßühû?Þ›þÿ¿øÐê>ãþ¹°ý+–ðçßo÷ó®¥lá ï8iY‡äMrÞûíþñþtÜÁ÷A÷Ä2ëýY¯=ñü|Åÿ]ùס]«5ç¾"ÿ˜¿ë¢ÿ:í­ˆ[HÉ €’jšëú[Øý±.ƒÁæƒ"3aØ2 ƒS¶½¼Ò­à´H¤FeóÒIL{Óû¹õ8Ï3XÖÃèÚ>¡5ÌDͨIKç|»ÉèI 1×Óµ%ý~×âu6Wöº¿Ÿi(’<•'GPAäcPméÿoFr³–ØFÁKz#i>Ùª:=æ™if ê0ÜËwrD’Åó+LÃ8ÎôªZÅõ½Î±b¶×ÿjš¤O 8.p26‚O'Sêº6m {M7âËí?¿.cF [û¡±·>Ù«·öºu¿Ÿw2ÅB‚z“èäŸa\üúµ†©®­¬÷¶ðÁep6ÆÒóL:qÙA?‰öëg]ai¬éZ±²€È²8RDLÀmbnÏlÒè‡Ô¼ºþšÖSÝùî°Á0¼.¥sÓå#'ò§Ùk6„í¼Íç*î1ÉFØõÃH®s[Ö“UÒ5¸í¥ŠKH#„¤Ñó’[æç§&›:Oâ«y-µ&Õ—ìî’JUqn8#_˜ñŒgŠkp{Í«'ö™°ŠÚâgM¾l‘ªì‹wMÄ‘õàЮvÊÆÖãÅZÅÄÖñI4-—#(,Ÿ'cÚ²!²ò¼×v0…¼œ>TR]ÓÌù³ŽOïK Í*ýñõ®@SFÔåÒoíe–!$6ºª ß3cy9+œàƒÅløN tº¹–ÎþÊhP4q2"7?6 Hëô§a\èmÿãÚ/÷òªú~«cª Í•ÂÌ ”Ã&\uÿ>•G[¾–ÃÃe­¿ãîeH-Ǭ…_Ë9ü+MŠ÷@ÖìãšÆÞÖÞîÜZ.äÈT¡c±pHÜ;æ’þ¿¯ëq¿ëúþ¶:—Õ,£Õ#Óá~Û" ;GsØ~5r¸[KmVËÅ?Û,íMÄÆáæ.‹ “ƒ};ŠÚÖŸS[à,ÛXìñç«&yÿž¿6J: 6/ï­´Ë)/.äòàˆí´¶9Ç@ ïPØjöš“º[}£(2|Ûi"u¬?ùÍðþçÏ7b‰¸Î¨$ÎñÔ'ËŸ¥'ˆìîm|)|·:•ÅèÄš‘®Ñ½Ab޹ïNÁÐêè®Äöú|šU´qÙÚhù”Ê&ž!nõV_ö°IÆj·Ùí-íteÔïc½ÐwNLЬ HòÕ²OÊ>`2qÒ¦›¨¦¤—,‘²yÉÎJœf”j¶'V:X¸_¶ˆ¼ãvgÏOíbx9í-ôKù`e[%½ã`~_,>˜¬uT²O¶Ÿçíí7Ú™ä·fÍ<¼Qš}¾Bïó;¿iV7Ÿd¹»òåU¿vÅTž˜ «œŽ¤V›º¢3»U$ô¹ w\Ó5 ã¢Üj¶¶aR[©%+HQ3ëÁ'ÐàuâÿЧ–M2 6È,“ê.!Uß´ñ¹Îpp6‚3ƒÖ—AésRËV±ÔtѨÚ\ m0ÇÌ GN¼žÔÍ?[ÓõI¤†Òvicš7‰ãl‡ #ÜV“s6®_[jÐY[ÝEö¸’)Lˆ¥Y9Ú½¶œcÖ›£]Euã絿þÔ†KRãhž*œäœc?/&ŸQt:ú(¢ÂŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¸ÿ}öÿxÿ:ì+ðçßo÷󠿏(¢¸(¦!—?êÍyÿˆ”ý¢3ÿMó¯Cœe qú환 s@ª·ÙbùOݪ]­ýÓùWŸÝø¶þÙˆE›þUãÝDùÙÿßGü) ôý­ýÓùQµ¿º*óøOµ/úÙÿßGü(ÿ„ûRÿ  Ÿýô€=?ktþTmoîŸÊ¼ÃþíKþ€6÷Ñÿ ?á>Ô¿ègÿ}ð OÚßÝ?•[û§ò¯0ÿ„ûRÿ  ŸýôÂøOµ/úÙÿßGü(Óö·÷OåFÖþéü«Ì?á>Ô¿ègÿ}ð£þíKþ€6÷Ñÿ ôý­ýÓùRª¶áÁëé^_ÿ ö¥ÿ@?ûèÿ…ðŸj_ô³ÿ¾øP¥[ÿÇ´_îåRWšˆº¸ ÜÐ ü)áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿Â•~"ë qýn?í£…zMr>\;¼U³ñŽ«t@6éŸv5µ¡ÚÔ9 GOÜS¢QE0†EPº³ƒ‘Z4„@µÆƒ„‚ªŸ FOÜ•v;íG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åJ<5?p~UØùkéG–¾”ÍÛhiQ[6Ö¢ 0*Ø@;S€€0(¥¢€?ÿÙnip2-8.7.0/doc/html/figs/ir8a.jpg0000644000175000017500000004501413341773367013347 00000000000000ÿØÿàJFIF``ÿÛC  !"$"$ÿÛCÿÀÕ"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?û)þé®7Æßñé'Ò»'û¦¸ßǤŸJä¾ ÿÈ{Vÿq¿ô(ëÔ«Ë~ ÿÈ{Vÿq¿ô(ëÔ© ]'&ÓÚëITÞk€f´€¤Nwo$„?ûAT¾½é¬ÀúUK„'µQ}>üÿË<ÿÜZàìµ^K áÖ/ü­\ý–ÄñÛ ê ൑=ÉRüIñ¯=ø%­§´ÍCX 4˜Zä$\Å ä®Ç~Ãå= ÷®ñ“ìRGs¨Yo'öŒ·#ž¬€3Ôr:Õé´[YfyZIƒ;8#þæf8jµÔ}š½¯ÖÛ«Щ_˜ñ¨Ý$¨ÊÊvþPeû§ÊÎÌŒuÇ^i¶^ÑlîÒæ½m¤BHê×§Lr®åOâ*'”ÖšŽ›z[§á§âÇ Lb÷<ÂæûJ]Ãû?Äw³i’^*ê—Ÿo‘ä„yl@g'1áAÆÜg¶k1õ I VsÏrëmªE¤Ï.]çQå´x'ïœ+c<°\ó^ïý…iÿ='ÿ¾‡øQý…iÿ='ÿ¾‡øSYv%}„ý_—§ô´·§¦¿á¯©4Q]I¡kZŽ¡¦A¤÷S½ÃÊbqp¾`Üyqd: Õ§Ô¶µ7Ž×W¹—N¹×Ò’ÒñÔÅžâªèAxÉõÍ{Gö§üôŸþúáGö§üôŸþúáGöv'ùý}<¼ƒÛC¿áåý3Ä﮵aãy,F« œÝÛ¥”wZ¤‘ùÐmMÀC°¬Å¾q¸¶AôÇ1}¦üI¦›ýR嵘õÉ|Û.,p…”#,YÆÝ»Nð9Éæ½Çû ÓþzOÿ}ð£û ÓþzOÿ}ð¡eؤ—¸¶¶ÿð?àëSw×ø'Œx³\=õÕ¦«q%ŽŸ"ÉÏT{¦WaŒ%x$`àUVÔð^(uËÖð¿ö”q¶£ö§fT0³2‰ó»g˜nÏ#5ë²x ÃÒKu,‘\É%Ô‘É3=Ã1&6Ü€÷T7!F^9«ZŸ„´ÍFÜ[ÜÍ~¨6`ºx[?ï!ðÍ\rÚÑJ*?Šòüt`ñm»žuðÿVµ›MŠÐêݼ×7†Ñä‘åg†9Šƒ¼ç £““Xþ%´oøIþÁ¥j6÷7ºµÝͰ¶ß5°f\Ê»S€ÊIÝÖ½gOð^…`!û$2FaFŽ6Ý– ̹#$’$òMM¨é–6v­;5ËòUYrÌNw$ Ëû/ ®¤ýÚïuÓÓüÇõˆ8ò³€…SQñÅÔ²…0hð,q‚8󥾡6þóz×=¥ê~Õ$Õ5¨õ[;(“O{x ±¸U¸Žl™HCűµ{q݈¯YþÂÕO"Æ=÷ŸÒ:?°µoùò¶ÿÀãÿƪc•â’øz%¿ßÓ©ONûžS¦$ú·„uˇ›T†?2kiÕÆY‰•A#’ÚÝè*]oSÓ­<%¡é×2éÖ÷:‚ÃÅë"Ç~Zù–ëÔa{œvרÿajßóåmÿÇÿQý…«Ï•·þþ5Uý›Šr»Šµïkù[·õ°•zi+=Uÿ~GxÆÊÖ-?ìú­kus¨épÙ[Ú~Ñ$Ñ®BHŒ¬6˜’äã=©÷·7zŒ¯fþÑíCsi­“ÂŒ.mˆ@åI]àe$«äW¯ajßóåmÿÇÿRÁ¥lÆíæÎ×(¬Šäž¨NåŽk¡ø{ýŸÞ­n.åþÓ[릞ÕîœìC3a;TAÈ9¯Sþ´ÿž“ÿßCü(þ´ÿž“ÿßCü*ªe¸©ÅÇ•kç龚‘ÔÕµíÐñ»=jOí]?H“S—ûA5Ë¿>ݦ>aƒlÌ™\äÇ‚˜íÓÒ¨ér^Ã¥i²^[¶©¡ÜMqqwtò¤R¯—‰âvcyû¸•{—ö§üôŸþúáGö§üôŸþúáGön%m÷úùyßä?oN÷¿õ{žo­ßµ¶4indš -@)[ù/bžTXJ¼nü¸ŽŠFÔ uÔ Ñ|E¨^Ûtàòý¾Gty.JɆ'(Jà¸Ç ¯tŸÃ¶3Bð¼—;]J¶Ù6œBGÔU-#ÁZ&”Ò½§Û<ɱæI5ËM#œÏ–ÀÉÀÎ95ªËëÚüšúï­õ%Ö…¬™ãúÕæ¥§%æýËiÖÚÂE,×7òFÑÂÖáöµÀ ê»ÈùºóŒR ¹RÏFMÄ&=&Hî[í¶šƒìw<”{€œ!nN7ç5íŸØVŸóÒûè…ØVŸóÒûè…gý‰²\Šýïåkí¿[•íéßê÷ÿ€yŸ4ö¿ ´i-æ–'Ýf»Õˆb­<`ò=A úƒPؽâj6—ãP¿’K­ròÊX¤¹wˆÄ<í !;W^Ëý…iÿ='ÿ¾‡øQý…iÿ='ÿ¾‡øT¼·ù½Õ«o~ý6^’¾ßðO³¼ŽÏÀš;÷µšàåpÑì9‘‡#aàî¬c¼2Å=ä–Ë¢ÌÎÉà ˜ùd¹b6œ(#>æ½Ûû ÓþzOÿ}ð£û ÓþzOÿ}ð¥O.ÅS‚*ÓÏþþczro_êÍ-o¬éº ¾­üVͯIª;ù7r­(²Ë(Œ®1Ón8¬v[Rû'ÛôÛ‡‡Ä¯*éÑD~Ú~~mÛŽgqùFTžkèì+Oùé?ýô?Âì+Oùé?ýô?ª~&:ò+úúyiùùŠU©É5Ã×üÇèÿò ·ÿèF­RE[[ÇeŠ®p[¯'4µïaàéÑ„%ºI~$Ú”›AEVÄš¯÷Mq¾6ÿI>•Ù?Ý5ÆøÛþ=$úUr_ÿä=«¸ßúuÔ|HÒ|C®i)¥è³YCÄý±¦ãgNÈ¥Q¸=úp1Ü×/ð_þCÚ·ûÿ¡G^¥Iàë}vÓB†ÓÄ2ÚÏyÈ&‚V1Ý,YTîìxçï[ZQÆ“gÿ\ÿA•¬ÂßÃðÎc’Aª¾ÈÔ³69'򠓨 _C'þ !¼p| <ÿ·ˆ<ß3`òK`ìÿ¬ÚCck;Å~4µÐnäKÝ#Z6p² õí·‹v0I,€ÈÉU WþñÔ~‹ÄäXµú_ÿo°—í¥ÛïA¿ÌÆ|£åíÙØ¼ÖŸufÕ¼FºN§¥ké [$SȰiýºC‡̈B¢q¸u-Áà´¶O~¿×Þ¾AÞÛ_ðÏÈìµÖÝ jx9ÊoýªýΩcmªÙésO²òõdkxö1Þüé­0oj,ØÊ@#ýYíÚ³ümc¬/ˆôiiÕöˆ§´I’9%U”¹ TpHàÒ[ê¢ÕïŽ|1grM¨JÞmÄÖȱYÍ+´œH¢ùO|cÞ³õ/ˆZE½æ‚öÆKÝ7VŽá…Í´ÌèbÛÇ–ˆ[© ä cšÆð†üA¹¡j7ÚaµH¯u[›„iãc Ü6ck“þÎqPYø{ÄÚ6©c­[èm~mu]QÚÒ;˜‘Ì7˜äR̰È$zS]/Ûú@ü»ÿž¿‡ânø‡Æ²iž ¾e¼‹M{0–é©2 ¶ƒæd`Ÿ› (Ï<Ôòx¡ïÖäÐ'±[Vº·ºî¡i!IQUeʱR'Úžß×—ùµ§øËÃZ†°4›MLItÌéîdÊÉ÷•$+±ÈÁÈRO°µ¿ˆZlšÖ¥è7ââ[]-.XZÈbdÃï !]„‚ùIÅbxÁ7š|šf—¬èš¼¦3˜u®4–`…`²$L©!±˜<⟥h^*‚ËžŸÃÛmô-J9dÔ£ºˆÃ4H®Ýæ;†FÞ¹æˆÛ™_ºû¯øz W´½äÿ«÷ˆ|I£è/o§s*Kq¸Ã6òO#…Æâ5fÀÈÉÆ9¨µ¯h:9µ[ûÉ[¤ó!†+ie•“Œ¶ÄRÀ ŽHV?Ľ6úñí.tTŸT‚9µöŸ{ n[+‰F 0ßw¥S[/é#¶ñé ®Ü]hðÙßGkr1ŒUïxC^Õnü_µ¸jFÊîÒ´„Wx6î…°w¡;x`03×"ŸKÿ]?àúô¿×õþ]Nª/xZM:îÿûIã†Í£[-¬±É˜@Bce†'ƒŒWK^á« CJMCZµðv³ý®é =G^ <{òv»HáBäžpO§5èßõý]„‚³"øÌøBÖÞTÐïõ#,±£ü×›øûÃZˆ5«]CRð5Ƶ¦¶m Óã¿‚ ´ùÙŽòÇÌ A]ƒ(ͧæ»ïÙjÚoƒ4‹ ván5+{TŽâE9€õã8éžøÍR³Mùþ¯ô·ôÈÖé[/ÖæÝeëŸñ÷¤ÿ×ãè‰kR²õÏøûÒëñ¿ôD´Š)kÚŚϕæ’#UFwlu¨$þUÿ Âÿóó{ÿ‚ëþ"®x»Âšw‰–ßí³]Á%¾à’[º†Ãc*w+Õ=; ç¿áThôÖÿïä?üj¸+Ϧý”bãæzØJyk¤ž"RRòµ¿#Wþ…ÿçæ÷ÿ×üEð°¼/ÿ?7¿ø.¸ÿâ++þF‡ÿAmoþþCÿƨÿ…Q¡ÿÐ[[ÿ¿ÿñªÃÚf_ËÇüΟe’ÿ<ÿò5áax_þ~oð]qÿÄQÿ Âÿóó{ÿ‚ëþ"²¿áThôÖÿïä?üjøUýµ¿ûùÿ£Úf_ËÇüÃÙd¿Ï?Ãü_øX^ÿŸ›ßü\ñÂÂð¿üüÞÿàºãÿˆ¬¯øUýµ¿ûùÿ£þF‡ÿAmoþþCÿƨö™—òÇñÿ0öY/óÏðÿ#Wþ…ÿçæ÷ÿ×üEð°¼/ÿ?7¿ø.¸ÿâ++þF‡ÿAmoþþCÿƨÿ…Q¡ÿÐ[[ÿ¿ÿñª=¦eü±üÌ=–Küóü?ÈÕÿ……áùù½ÿÁuÇÿAøƒá|qs{Ÿû\ñ•ÿ £Cÿ ¶·ÿ!ÿãT…: ¶´OoÞCÿƨçÌ¿–?ù‡²É¿ž‡ùW‡§‚-Òí¡‘æ½…g™ÒrÌÊ ÎÐxçê½µÒõ«» ’,w‘D̘º°ùGäêMeióE›k§ß!ÙBºBU‚€~ú·ÔV–„£PÕ.õ !ßnÐE nI™ZBØõ8õÍz‡„]þÛ²þíßþÉþmÙvïÿdÿ ½ö[Où÷÷Ûe´ÿŸqÿ}·øÓÔZ¶ì¿»wÿ€²…Ûv_Ý»ÿÀY?¯}–Óþ}ÇýößãGÙm?çÜßmþ4j¶ì¿»wÿ€²…Ûv_Ý»ÿÀY?¯}–Óþ}ÇýößãGÙm?çÜßmþ4j¶ì¿»wÿ€²…Ûv_Ý»ÿÀY?¯}–Óþ}ÇýößãGÙm?çÜßmþ4j¶ì¿»wÿ€²…Ûv_Ý»ÿÀY?¯}–Óþ}ÇýößãGÙm?çÜßmþ4j¿¶ì¿»wÿ€²…_†Dš%–3”ai¿e´ÿŸqÿ}·øÔˆªŠ*Ž€SÉ»Tu$ݪ:Lh(¢ŠC5_îšã|mÿ’}+²ºkñ·üzIôª$ä¾ ÿÈ{Vÿq¿ô(ë¥ø™àø|W¥Æb[uÔ­Iki&\¡ÏTnÊ}{ s_ÿä=«¸ßúuêTž ð埅ô´ÛERùß<¡ù²­Ðv°·4¯ùÙÿ×ÿÐE%.•ÿ ›?úàŸú¦­T®zÕÖªW=i“®ÿÈSÿ¯9¿ô[Víak¿òÔÿëÎoýÕ»BTS\A iã=7¸Î¥¦hʆ '*<Çš@ÍÜ…vP?1ý¾Çþ-ÿïêÿo±ÿŸËûú¿ãZ{¨Ý@Ÿo±ÿŸËûú¿ãGÛìçòßþþ¯øÖžêŠ[»h­å¸–âá„,Œà,`rKàc¾i\ ?o±ÿŸËûú¿ãGÛìçòßþþ¯øÖŒÅ<)4¤±H¡‘Ѳ¬§AE?u03ö͘*ÝÛ’z «iÂH…C+pA³4ïøö)’DrÉäöWe fŠ( ªê–¦òÓÊWêé"27+öÈjŠƒíºÇýôÿüþ5GÛuúéÿøÿüj§¢€ ûn±ÿ@ý?ÿŸÿQöÝcþúþ?ÿ©è >Û¬Ð?OÿÀçÿãU-õÝݼ·‘[@–Ì΋ Í!f*W$•\½zöÇ6è Š( Š( Š( Š( Š( Š(  Ý_E²ÔäŠIë¡Ád8.¿Ý>ßäV„H‘F±ÆŠˆ UzS¨ Š( Š( Š( Š( Š( Š( æíQÔ“v¨é1 ¢Š) Õºkñ·üzIô®Éþé®7Æßñé'Ò¨“’ø/ÿ!í[ýÆÿУ¯R¯-ø/ÿ!í[ýÆÿУ¯R¤€)t¯ùÙÿ×ÿÐE%.•ÿ ›?úàŸú¦­T®zÕÖªW=i“®ÿÈSÿ¯9¿ô[Víak¿òÔÿëÎoýÕ»BT:+ 7ý|Oÿ£ž¦¬ý&LX7?òõqÿ£Þ†#œð–¡­ë·ú†»s¯µž›g¨\Z®›´EJBÅ ‘ÙKî$nà€8¬_ x¿Y¹ñ®•Ýkz&³ Ä–òjvЩ£BbÃíÁÆ$ ƒ]3x_@þÝ}i,ž+ÙÌ‘¢¹‘FÆ7Í?ÏüÿÇSñ·¨éÚ›­®†h6×ÒͤNó<™P¡YJª.ÞB€yU,|OâOAàû{}`èójkz/'µ·ŠMíÚŠÀ+OÐ×I«xOú¤6q^X1pùÑÀ$8Íjig6òŸúzŸÿF½WÑllt¸å†Â%'¸’âA¼¶é$bÎܓԒqÒ¥ÑNm%?ô÷sÿ£ž•ïaÚ×þ½ M¯ãÆû'ú5o¼ï3®]“fܳœç¿Jåìþ êúšiãEð´WsÝi+ªKš—•å¡b»ùgsdwÚ+kÄžÔ/|A»¢ki¥ÞýÙÎ&³ûDrÅ»pùw© <ç¿J‡Â^ ]îÎuÔÀµÑ“KÚaÚ[k—ó3¸ã®6þ´•íýzßûhÞïåú_õ24¯kz׌ì_B´ŠçK¼Ð ¼k{«Ÿ Â^V Ãû˜Œd:Õ+ÿjðÛÄÚ!¸’wñ„–/åöå•B¹(a1Ç0 c©­mÀZ†ˆÚDÚ?ˆã‚âËO]>奰óâ%}à…Þ66Iç-×¥OuàI_Nš+mgȼþÜ}fÚàÚ†XÜdÝóŒ:޽ªôM_i?ËúØZ×Ùkóþ·)M¬K¦|B½Õ5´[Tµð¸¹¹†Œ¨›frv’qÀëPè¿tË©¦[ølatùuk-N;Æ ’E@<¹0FH<óÅl^ø.mKQ7š¶®·&çI“KÔ;_-gFbÁ“æ>YŸïf¥øGP]&ëE×5¸5M2k6´šx‚m¤mËHî8ôQÏ5òÛÉþrÿ€Vœ×ôü£ÿöֵýOâ/„äÔô_ì‹iío%‰øLdêaÇn½kZñeÕ¯Œáð͆™k=ÃÛ¥Ã=Õø¶Ü¬Åqìc# ¤‘Æ29æ Ñ|¬[kúV£ªø™5(t˜%‚Ö?°¤!ÕW28r€£¢Š—Ǿ¾ñZ‹95{;}4ì&6Ó„³£’ñJ\lnœí8«vº¶ßðÿÖ„«ÙßëúÔšOêW>'ºÑô= /¢ÓÞ8ï,là6Ô]Œ\… Ÿº95GPñâiþ5¶ðýÕ¾–ÑÝ] XÚ U$¹F*J—·Ú ©#ÜqÅ\“Âú¥§ˆîõm_K¯Ú7¾¶žÌN²:(]Èw©BT~ðã8¬˜>ÜÁª[¼zå¿ölÁÕ–Ó‡Ú …™Š™ƒŒ®Xõ\ãµLwöëøÁ·â7³¶ý?øü Ý/ÅÖþÐõ»»ÃÒÜx¢êÖÙg¹XcÜ[?4 œóì uŸü]oâË[æŽ;h籸ò&·ks eCITÀƒè ‚+2ëáûIà‡Zhdm\êÖ}™XÚÌÀ‡VâD9<|¼½ë§ðõž¥edÑê—ö·× å¼Ë{?³¨\ »›ßœ÷¢;kÙ~KþKâÓ»üßüJŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( æíQÔ“v¨é1 ¢Š) Õºkñ·üzIô®Éþé®7Æßñé'Ò¨“’ø/ÿ!í[ýÆÿУ¯R¯-ø/ÿ!í[ýÆÿУ¯R¤€)t¯ùÙÿ×ÿÐE%.•ÿ ›?úàŸú¦­T®zÕÖªW=i“®ÿÈSÿ¯9¿ô[Víak¿òÔÿëÎoýÕ»BV:­å‘–a5ÜM3ÉÀÈÅÈ`켂Ǧxô­ŠƒO¶·º‰î.bIœË"0n Ê€éÓõ FwŸuÿ@MGþúƒÿŽÒy÷_ôÔï¨?øímgéÿóákÿ~Wü(þÏÓÿçÂ×þý/øQaÜÅóî¿è ¨ÿßPñÚ<û¯úê?÷Ôüv¶¿³ôÿùðµÿ¿Kþgéÿóákÿ~—ü( ˜¾}×ýuûêþ;GŸuÿ@MGþúƒÿŽÖ×ö~Ÿÿ>¿÷éÂìý?þ|-ïÊÿ…sí7 š%þîÛ¤€ û‘!8ü ^Ò­äµ±X¦eiK<’齨³cÛ,qVÛNÓØ`Y[¯ºÆ¡Š­`ÌÖä;)#Ǹõ;\®O¿±ES¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(9»Tu$ݪ:Lh(¢ŠC5_îšã|mÿ’}+²ºkñ·üzIôª$ä¾ ÿÈ{Vÿq¿ô(ëÔ«Ë~ ÿÈ{Vÿq¿ô(ëÔ© ]+þA6õÁ?ôIK¥È&Ïþ¸'þ‚)+U+žµuª•ÏZ@dë¿òÔÿëÎoýÕ»XZïü€u?úó›ÿEµnІŠßè ÿ_ÿèשj†‘&,þ¾n?ôsÐ#Ww4nª&nhóyý¶•q¬üdÖõ †—q’ö‚!yjòË1o>K $’NÓš—Mñ·‰G€ŸÅ·ðé­Û$:}œI,¯7”¾dŒì ä‚p£½u~—mc¬êº¬RLÓêf#2±WËMƒouÉ5F i àµð”ž|úz¡PÎøûÃP0Á¹0(Ù[úóîå |Yâ-çVÓ5øt«‹Û}]RÒk$‘"q «3AÛÈ<ƒÐb³ì|KñëSÓtÁ'…„º––u(&6“í@»—ÍÉ?¼_›#¿­iàëâԾ٩꺕֡fld»»™ZXà ü‰… 9$ôÉ=sWí4 mKL¿I®LºvžÖ‚˵£b™-ÇÞýØä`uâëÿJÿíAù_ÿl_ðºþ#ð–›­KÛËué#S® Vúdµ¦Á)ÿ§™ÿôkÕ/ iv¾Ñ-t{)&’ pÁR œ±nHu>•kF9µ”ÿÓÝÇþŽzm¦Ý„•‘Îx]ñøžOøb3ϵ±·2ß«²ÌÊ‘¨B'kÇ qÁ­¯ëQø‹Âúv·FyÆNv7F\÷ÁV/ˆô/ÇâyêÀY\Å|Ϊ6³2H¥É˜8ŽEmx;EþÓ´Hå3 83!ÞÝY±Û$“D~­_éoêàþ/ë²ýoýXÖ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(9»Tu$ݪ:Lh(¢ŠC5_îšã|mÿ’}+²ºkñ·üzIôª$ä¾ ÿÈ{Vÿq¿ô(ëÔ«Ë~ ÿÈ{Vÿq¿ô(ëÔ© ]+þA6õÁ?ôIK¥È&Ïþ¸'þ‚)+U+žµuª•ÏZ@dë¿òÔÿëÎoýÕ»XZïü€u?úó›ÿEµnІ‰ÆÀKmsÎ<ùdâåWWvàS‚7cÒ¶ê(ñyä—c¢¢HP(V+ü$dœfÚßÜÔ?ð_qÿÄRh[rÿÿ÷üEmÿgÚúÜàLŸüUÙö¾·ø'ÿE‡sûBÛû—ÿø/¸ÿâ(þжþåÿþ î?øŠÛþϵõ¸ÿÀ™?øª?³í}n?ð&Oþ*€1?´-¿¹ÿ‚ûþ"·ÛsPÿÁ}Çÿ[Ùö¾·ø'ÿGö}¯­ÇþÉÿÅQ`¹Š5+uåaÔ»(°œí’€~dUí °Qp¡%y$•Ôí.ìûsß±øUÆÓ­Èùd¹CمÜ~‘PYHòA™.®ñ±©V+ŸÇ=QLAEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPsv¨êI»Tt˜ÐQE†j¿Ý5ÆøÛþ=$úWdÿt×ãoøô“éTIÉ|ÿö­þãèQשW–üÿö­þãèQשR@ºWü‚lÿë‚è"’—JÿMŸýpOýSVªW=jëU+ž´€É×ä©ÿלßú-«v°µßùêõç7þ‹jÝ¡ *=¿Ðý|Oÿ£^¤ªZD¸°oúù¸ÿÑÏC©»š7U#?=hóèîê7U/>>çÄí_YÒÓÃÿØ›âëXІI|´™ HJ3íb 9ô£Pñf·§‹§øníalÅåì#Qòá·RÅUD†<»1VÀÚ:rEMã=]~ÊÍm¯þÁycyå´æ!*«®F27Œd}k6óÚÛê0ë6>'ŠÓXkAiy?öxx®1e"2ÿ#)cƒ¸õäß?ÓüÆÖºvýÈê|%®Ûx@´Ö-#’(îÌr `ãÚªüD‡_Ôu{=:?ßj~y·‰isms&ï–'ó$Så€2@ûÙ¦AoŽ,¥Ötè!›á°Õd{_Ý4·¨ÖN‡q|®0èÉö¥wkÿ]¯øqÙ^ß×OëþÒÖüG­ÙêÚVc¡XÝj7¶’ÜÌ’êF(áòÌ`¨o)‹òü•ÒÚ4ïkÝDÎÈ ‘¤›Õ€Ø÷ÀúWžkš¡'…´½Uð\~,¿ƒNXŽ ×)Šl`ò"òÜ “õ®ÓÂvwú†4ËRëíWÖö±Çq6âw¸P ÉäóÜõª¶þ¿æMöþ»”QE!…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ÍÚ£©&íQÒcAERªÿt×ãoøô“é]“ýÓ\o¿ãÒO¥Q'%ð_þCÚ·ûÿ¡G^¥^[ð_þCÚ·ûÿ¡G^¥IRé_ò ³ÿ® ÿ ŠJ]+þA6õÁ?ôL Z©\õ«­T®zÒ']ÿ§ÿ^sè¶­ÚÂ×ä©ÿלßú-«v„0¬(/mlR[[ë˜m$[‰œyò¯#8*Iäa‡ÐÖíCm·åûKÃvDXÕsò’ $ƒÜdÿki9ÿÆÿIþ4ŸÚÚOý4ïü Oñ­Ï°¿üÿÝ~Qÿñ}…ÿçþëòÿˆ¢Ã¹‡ý­¤ÿÐcNÿÀ¤ÿ?µ´Ÿú ißøŸã[Ÿaú]~Qÿñ}…ÿè!uùGÿÄP0ÿµ´Ÿú ißøŸãGö¶“ÿA;ÿ“üksì/ÿA ¯Ê?þ"°¿üÿÝ~QÿñÌQ¬é ókX6;-Â1?@IöwCIN ,mK,³la†Pò3€}f®5Œ¸ù5 Ý·*øáGó¦ZJÒÂÔ+†d`:nRTãÛ"€%¢Š)ˆ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠŽnÕI7jŽ“ (¢ÍWû¦¸ßǤŸJìŸîšã|mÿ’}*‰9/‚ÿòÕ¿Üoý :õ*òß‚ÿòÕ¿Üoý :õ*H—JÿMŸýpOýRRé_ò ³ÿ® ÿ Š`JÕJç­]j¥sÖ:ïü€u?úó›ÿEµnÖ»ÿ Oþ¼æÿÑm[´!…G¢·ú ÿ¯‰ÿôkÔ•OG— ÿ_7ú9è§»š7US?=i<úćÇTº]¥òÛÞƒuª-mÊ'š³‰pÝ€ÒÄçîóíO³ñt3xt;½#VÓ.fI^ÕîãŒGp#Æí…¹Á Ås±x>í> ÜëBú%ÒÉwol ù‘ÞɉäéŒlŽz±¬x TÒ)ÒâþÞYZêýv‡2 ççn§–«^ß§ù¯¹ï§õý/ÅÃO¼9á{R[»­GV‚æE°Ã÷OÎâNz0ÆéÚ´ÇÚY†?²iú¥íÜ·—ÙÁ¤h¬Ž2áB:³£¹Årúg„¼K¤iÞ{ô™µ K˜¢Id‘b¸·›ûÌ”qÇ@ÃŽµFo‡Z”ö¶·–ÞÔu {ÛÙå²¼ö’%Ì›È Spe a¶úñU'y_§ü?Zßשê>×,üA¤¦£d&D.ñ¼S&É"‘«£ÄEiÌŸúyŸÿF½RðuŠé$cLÓ4×™íôà|…b‡*¤ñŒœ ·£œÚÊéêãÿG=q-Œ¿xÃFð²ÛIçy®V( {Îqìª ’G Éâ“Å^)O±ß¡ëz„qÂgšk+`ñƒ9%™—'‚p¹8íU~,Z]^ø&âÞÎÚk™Õ«âBì@¸Œ“Ï}…füKÔîäÔ-ü6lõ¤Òn`2j–t× éœ} jv–çsBôää-mçÓúý V¾»š—ôÛvµK OY’æÈ_„°…X¥¹é#oeö,px­íQ´Õô«]RÂO6Öê%–'ÁV•æ3°ŠëZ´¸w‰ì4Ÿì?³YK£Yʳ†f9Še ¹@P»UÀ\–ÉÍwÞ‹PƒÁZ<¥¤V—‘ÚF’Á…XÈÆŒp8©Y¦ÿ­ßù"z¥ýl¿à›”QE!…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ÍÚ£©&íQÒcAERªÿt×ãoøô“é]“ýÓ\o¿ãÒO¥Q'%ð_þCÚ·ûÿ¡G^¥^[ð_þCÚ·ûÿ¡G^¥IRé_ò ³ÿ® ÿ ŠJ]+þA6õÁ?ôL Z©\õ«­T®zÒ']ÿ§ÿ^sè¶­ÚÂ×ä©ÿלßú-«qˆPI É'µbÖN’Ù‚{p{ÔûÓ¨iY—óV´àš+ˆ#ž RX¤PÈèÁ•”ò#¨ªSiÐêÎÒËi`èŒQZâÜJăƒéGá@‡˜åÏÜ?•'—/÷åQÂ1cÿ>:7þ WÿФÿ„fÇþ|toü/ÿ@ɼ¹¸*<¹¸*‡þ›ùñÑ¿ð\¿üUðŒØÿÏŽÿ‚åÿâ¨o._îÊ._îÊ¡ÿ„fÇþ|toü/ÿKÿÅüøèßø._þ*€'ù¢S$Ÿ"(Ë3põ&£Ðý7ÍÁ 4ÓJ™Ê<¬ÊA¦Â5h„:XhŇ }€/?\œ~U~Ú_:&Ò§$2Ÿá àÌ’Š(¦ ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(9»Tu$ݪ:Lh(¢ŠC5_îšã|mÿ’}+²ºkñ·üzIôª$ä¾ ÿÈ{Vÿq¿ô(ëÔ«Ë~ ÿÈ{Vÿq¿ô(ëÔ© ]+þA6õÁ?ôIK¥È&Ïþ¸'þ‚)+U+žµuª•ÏZ@dë¿òÔÿëÎoýÔïh÷ºö‡&—gª.œ& Næ!xû§ ¸Ïsž™éºïü€u?úó›ÿEµhꚦ™¥Ä’êz¥ŒnÛUî&XÃ@XŒšÌøvûÃ:lºuÆ®—öÛ÷Û¢Û¼œýåvÈ'œvÉõã¡Ñ[ýÿ×Äÿú5êž—¬é©iz­ñAmp’lÏLí' K£I‹ÿ¯›ýô1[¹ªZÞ¯§èºlºŽ§r¶ö±`3[’@ $’I© Ã5‡ãˆ"Ô|9=¤ºDú°fFö÷ ¹ tve Ê@ ät¤ÛE¸“¬]Go&‰y»ÏÿXH’ÛùÉ<¼íŠžåü2>%j¯ã¯%n„¶çCûn|±ÅÿSÛ™»v9éÚˆëoŸõêÒç©Q^­gãZûGŸÿ û]¿³~ÿŸ³ÍO—ÛÉòúÿÞÏ57ŒÂ'Æ>5"hÆ®ÛeÝö…“Èà@WÛñÀüi_Ýæþº~:•ozßÖöûo¨on`²³žòæO.#i$|µTdœz ñ?Ç}6±£Çã[Ý*ÎÕ´BÉ«ÚÉ-¿Úùó°RD /ÝÁ98éŽk´{ëKo‡W^—ZþÔÔ¡ðãÜŒN¾t%VLœŽqÓ$÷¢~ìd×Kþÿ+ú ô¢Ÿ[~6ÿ3kBñdž5«Ø,ì5 <û„2[¥Å¤Öæe9O1ü¹âºJñ5´¸ð ñå‘ÒE¢>”ö–æ<^6ÇÌÌÝP¶ à3 `qY¿ mLšæ—ws®évþ&·’i5 !g*j7'koŽWiHeèAÙŽ«’Q“]¯ýŸË¹ ¶¯ý_ð{îN>••àým•Ù?Ý5ÆøÛþ=$úUr_ÿä=«¸ßúuêUå¿ÿä=«¸ßúuêT.•ÿ ›?úàŸú¤¥Ò¿ägÿ\ÿAÀ•ª•ÏZºÕJç­ 2ußùêõç7þ‹jµâmÏÄ4Úeà!$å$_½ºëîøwªºïü€u?úó›ÿEµnІaø+ÖÞÑ–Ê) ÷wÜÜ2á¦\v ‡âj})óe"‚ [»€Ã=?|çùÕªW:e¤ó4Ì'ŽFÆæ†âH‹cŒ3øÐ!¤¶z2Þ†›ýiÿ=µüÏÿÅÑýiÿ=µüÏÿÅÑaÜv[ÐÔ76Ö÷F#smæ±yˆcŽŒ¹èFO"¤þÇ´ÿžÚþ gÿâèþÇ´ÿžÚþ gÿâè°\v[ÐÑ–ô4ßì{Oùí¨ÿàÆþ.ì{Oùí¨ÿàÆþ.‹Écf 3Qè Oiå^æáÔú©™È?B4ÖÑl™J¼—î§‚­9z_V„h‘ƱƊˆ U€ uQLAYšn‹ka­jš´2LÓêmL®AUòÓ`ÚÈã®I­:(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(9»Tu$ݪ:Lh(¢ŠC5_îšã|mÿ’}+²ºkñ·üzIôª$ä¾ ÿÈ{Vÿq¿ô(ëÔ«Ë~ ÿÈ{Vÿq¿ô(ëÔ© ]+þA6õÁ?ôIK¥È&Ïþ¸'þ‚)+U+žµuª•Ïz@dë¿òÔÿëÎoýÕ»XZïü€u?úó›ÿ@5»B ²»´¾ƒíWP\ù—̆@ë•$0Èã ‚¡£ªéÚp¶^C¤pcÝ™ I÷Ø ù˜ Œà£Ö¼~úÒïP¿ÖþÙÜKk4ú¼Úšœ­Ye ûÌÊ¿YÒµ«¯ÇâO-µÖ“ᯰ1RU¡»!Þ`PTªsô¥w›Êÿ…ÿ=Ô}î_?Öß–§¯Z\ÃugÜ Z£#m#*FAÁäqëU¼=«Yëº5¶­`\Û\)hˮӀHéøWEq6³¯izN±âKNµ_ÛÝÀ-ïšÝ®æl‰œ_h òç6H5•á;‰%ð×€|?>±w¦iw–·RM=½Á‚Iä†È¼Ñ‚¹ ÍÁí­%6¼ÿÏüŒã+¤ü¿DÿSÚj¼×¶ÞÛÙKs\܆0Ä[æ. ;ã#?Zñ(õrhôßU¹¸±›TÔâÏ­IlóˆdÄQý¤+¿Ý$àrØëÇ:M§_K­x.ÏÅzÃîÚJ—Vš¬Šå>C×c3ÆvóSlûÿïÐö:Bp ô¦À`ŒFåÐ( Å·1ÁÉëõ¯8Юn´¿›Mvöþö}N{Ÿìûˆ5F’Ô „Oo#eQŒ€A#®M'½‡Òç]¢ø«GÕmô¹må•N¨²5¢KýBS¼eC8F|`£…õ#µIo}iqwsiÌrOjTO¶Z2Ã*í‘ÍsŸ®î¬¼}ses5´ë$d…Ê0ÌÈçHük Dµ³oŠž-»šöê+Èeµx-ÒúH’lÛ€7F,œ‚9Ž—Ößæ="Šñ¯†×>.Ö.´}yõH¿},‡QŽ]mäÞ¸`c[CX™Ãgå9'9ªú­ý퇂ï'ñ7‰7k·WߪꒀáRW]œþï1÷1Æh°w=¶Šâ¾ê¾F“{c«jæVµÖ®4ëIo'Y‚¶Q77.øãÔâ¹)õûûéÚ¾”×¶ö2ø€é³¬ÚÓÈ$²0û!c\‚=9¦µ’K­¿š¢mô¿áòg±MfO¯èðèC\kä}8íÄñ+H§,ch$òqÅqþ q¬ë:¦©ªë×ë©Zê—ɧ-óG Q¡+˜A÷.,sÅrš‹Kø53XÔ#ÔYaYu)XBEÐV ›±RÐ=(޶ó·âvn¢¼«Äׯu¬xÆmGÅ7ú,š$(Út0]˜P)„8•“¤»Ÿ+†ÈùqŒÓÕu?x–ÂÛSÕ51›Âñ^¼67²[l¸g!˜…#8ô9)Ý_úÙ¿Ðvþ¾i~§©Q\ïÃMJïWð‰©_ËæÝOf,˜ÆöÆ üqšèª¤¬Ú%;«…QHaEPEPEPEPEPEPEPEPEPEPsv¨êI»Tt˜ÐQE†j¿Ý5ÆøÛþ=$úWdÿt×ãoøô“éTIÉ|ÿö­þãèQשW–üÿö­þãèQשR@ºWü‚lÿë‚è"’«‹y‚òâÎB(BÓrœSû­S¸R{ŒÁvæ+v?àñYÝ·üÆ/ïÜ?ünuå#AÔ¸ëg0ÿÇ mÖsi~iQw}uw°o.A© ägb‚F{*k½KO´}—W¶ð1í$Oë@Ç­’ê¨-ºÞbGRzÔ_Ûº/ý¬¿ïúÿÛº/ý¬¿ïúÿjZ‰©ZCg¨èÚuå´a¸¶I< ªÀÇ¥fx§Ã'SÒ-´­7ûÒÎ͵ޒ—PØ÷(\sÓÖ´ÿ·t_ú Yßõÿ?·t_ú Yßõÿ ´2ü;àÍLðªx~òÖ×T·ó^yEŪÞGbĈñµFOt­ü;áùô¸´©ô-2]>˜­^Ò6‰ª¡OAÞŸý»¢ÿÐZËþÿ¯øÑý»¢ÿÐZËþÿ¯øÓnâJÆTÚ_ŒVg[h¶Öˆ‚¡³ÓøW"àÐV–›áýÂõõ ]LƒP”:ê DŽI ûİäóÉ4ÿíÝþ‚Ö_÷ýÆíÝþ‚Ö_÷ýÆ‹…‡ÛhúE´é=¾—c ¨ï"Šg•üóOûäQåEÿ<Óþùú(žT_óÍ?ï‘G•üóOûäSè yQÏ4ÿ¾ET_óÍ?ï‘O¢€åEÿ<ÓþùyQÏ4ÿ¾E>Šg•üóOûäQåEÿ<Óþùú(žT_óÍ?ï‘G•üóOûäSè yQÏ4ÿ¾ET_óÍ?ï‘O¢€åEÿ<ÓþùyQÏ4ÿ¾E>Šg•üóOûäQåEÿ<Óþùú(žT_óÍ?ï‘G•üóOûäSè yQÏ4ÿ¾ET_óÍ?ï‘O¢€åEÿ<ÓþùyQÏ4ÿ¾E>Šg•üóOûäQåEÿ<Óþùú(žT_óÍ?ï‘G•üóOûäSè yQÏ4ÿ¾ET_óÍ?ï‘O¢€åEÿ<ÓþùyQÏ4ÿ¾E>Šg•üóOûäQåEÿ<Óþùú(žT_óÍ?ï‘G•üóOûäSè yQÏ4ÿ¾ET_óÍ?ï‘O¢€åEÿ<ÓþùyQÏ4ÿ¾E>Šg•üóOûäPaˆŒ÷E>ŠÀ´EŠëQ‚5 WxDAŠ68ï1?Y¨!ÿ–«ÿ_cÿDCSÒQE†ÿÙnip2-8.7.0/doc/html/figs/ir7.jpg0000644000175000017500000016313013341773367013205 00000000000000ÿØÿàJFIFÿá°ExifII*JR(i‡Züÿÿ)( üÿÿ)( 0210‘ 0100 ÿÿ Ê ,ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀ,Ê"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?÷ú3EA4¡šÈ0Ü(ï\Oмuiáò±2´×.2±!Æ©=…qñZ副–ƒþÞÿEÀö´§­jOZñOøZW_ô Oü ?üEð´®¿èþŸþ"•Àö¿µ'­jOZñOøZW_ôÿOÿGü-+¯úGÿ'ÿˆ¢à{_Ú“Öµ'­x§ü-+¯úGÿ'ÿˆ£þ•×ý£ÿÀ“ÿÄQp=¯íIëGÚ“Ö¼Sþ•×ý£ÿÀ“ÿÄQÿ FëþÑÿàIÿâ(¸×ö¤õ£íIë^)ÿ FëþÑÿàIÿâ(ÿ…£uÿ@èÿð$ÿñ\kûRzÑö¤õ¯ÿ…£uÿ@èÿð$ÿñÂѺÿ |øøŠ.µý©=hûRz׊ÂѺÿ |øøŠ_øZ7_ôÿOÿEÀö¯µ'­jOZñ_øZ7_ôÿOÿGü-¯úÇÿ'ÿˆ¢à{WÚ“Öµ'­x¯ü-¯úÇÿ'ÿˆ£þ×ýãÿÀ“ÿÄQp=«íIëGÚ“Ö¼WþÏýãÿÀ“ÿÄQÿ FçþñàIÿâ(¸Õö¤õ£íIë^+ÿ FçþñàIÿâ(ÿ…£sÿ>àKñ\jûRzÑö¤õ¯ÿ…¡sÿ>àKñÂйÿŸ¿ð%¿øŠ.µ}©=hûRz׊ÿÂйÿŸ¿ð%¿øŠ?áh\ÿÏ„_øßüEÚ¾Ôž´}©=kÅáh\ÿÏ„_øßüEð´.çÂ/ü oþ"‹í_jOZ>Ôžµâ¿ð´.çÂ/ü oþ"—þ…ÏüøEÿ-ÿÄQp=§íIëGÚ“Ö¼[þ…ÏüøÅÿ-ÿÆèÿ…¡sÿ>1àKñº.´ý©=hûRz׋ÂйÿŸ¿ð%¿øÝð´.çÆ/ü oþ7EÀöŸµ'­jOZñoøZ?óãþ·ÿ£þ…ÏüøÅÿ-ÿÆè¸Óö¤õ£íIë^-ÿ >çþ|aÿÀ–ÿãtÂϹÿŸð%¿øÝÚ~Ôž´}©=kÅ¿ágÜÿÏŒ?øßünøY÷?óãþ7ÿ¢à{OÚ“Öµ'­x·ü,ûŸùò‡ÿÿÑÿ >çþ|¡ÿÀ†ÿãt\iûRzÑö¤õ¯ÿ…Ÿsÿ>0ÿàCñº?ágÜÿÏŒ?øßün‹í?jOZ>Ôžµâßð³îçÆü oþ7Gü- Ÿùñ‡ÿ[ÿÑp=§íIëGÚ“Ö¼[þ…ÏüøÅÿ-ÿÆèÿ…¡sÿ>1àKñº.´ý©=hûRz׋ÂйÿŸ¿ð%¿øÝð´.çÆ/ü oþ7EÀöŸµ'­jOZñoøZ?óãþ·ÿ£þ…ÏüøÅÿ-ÿÆè¸Óö¤õ£íIë^-ÿ Bçþ|"ÿÀ–ÿâ)?áh\ÿÏ„_øßüEÚ¾Ôž´}©=kÅáh\ÿÏ„_øßüEð´.çÂ/ü oþ"‹í_jOZ>Ôžµâ¿ð´.çÂ/ü oþ"øZ?óáþ·ÿEÀö¯µ'­jOZñ_øZ?óáþ·ÿGü- Ÿùð‹ÿ[ÿˆ¢à{WÚ“Öµ'­x¯ü-Ÿùð‹ÿ[ÿˆ£þÏýâÿÀ“ÿÄQp=«íIëGÚ“Ö¼WþÏýâÿÀ“ÿÄQÿ FëþñÿàIÿâ(¸Õö¤õ£íIë^+ÿ FëþñÿàIÿâ(ÿ…£uÿ@øÿð$ÿñ\jûRzÑö¤õ¯ÿ…£uÿ@øÿð$ÿñÂѺÿ |øøŠ.µ}©=hûRz׊ÿÂѺÿ |øøŠOøZ7_ôÿOÿEÀö¿µ'­jOZñOøZ7_ôÿOÿGü-¯úGÿ'ÿˆ¢à{_Ú“Öµ'­x§ü-¯úGÿ'ÿˆ£þ×ý£ÿÀ“ÿÄQp=¯íIëGÚ“Ö¼Sþ×ý£ÿÀ“ÿÄQÿ JëþÑÿàIÿâ(¸×ö¤õ£íIë^)ÿ JëþÑÿàIÿâ(ÿ…¥uÿ@èÿð$ÿñ\kûRzÑö¤õ¯ÿ…¥uÿ@èÿð$ÿñÂÒºÿ tøøŠ.µý©=hûJú׊ÂÒºÿ tøøŠÅ;¡ÿ0ÔÿÀ“ÿÄQp=¸N§½<05ãßd~™ˆû˜çÜT:ô­\¶Õ¬¢º¶“|R ƒý½07è¦#núCÒ²5K.&9­vé\Ö¼äBßJð¯\´þ+¾vlà¢a±©5‡º¯øóâÃþÒÿè"²÷T±’î­‡ðÖ¯Ž5F´al~l`î €wž1·wÏ·…º´äñ üš"é bû… äsŸ^pO¥BöW±¼ÈöWJЮùU¡`c_VùG¹§>üZý¬Ø]‹lnóü†Ù]ØÆ+»Õ/´¹£ñ«¯`ë¨iéVâaç ŒëE†½j—º%³ê°­ö7—q\,I·£ à7ny¤ô_ןù×úôÿ?Àࢳ½žÝî!³¹’ÎùRd\uËA²½[AvÖWBÔŒ‰Ì-åÿßXÅuºEÝ´Þû¥ªÚ[Ã2˜Eµó%ÆI?#Ä8p—ִ쯴‹O É :¥«[É¥²žý̾qtBNÕAD´¸-lpa¾û@¶û מWx‹Èmå}vã8÷¦¥¥Ü–­t–— l¿ze‰Š«c»üA`< º‘¸OíÈ쎘±nö’0øëÂ÷õâ´í¼Adº „¶ZZýžËÉšÖîöH›p0•óêGãMéë¿ü¼¶þ¿®¿qÃèºEÖ³Cp`yV9'Žë=Éè?P\ÙI¯q§Û¤·G;ij>ÒG}+²ðæ§núFƒå¶š,'v½·žãÉó”¶AŸŽÇÖ¹+H[x²}JÙÈïšxÙO 7’?(·¼—õÐ>Íÿ®¥Qkt@"Öàƒ/’‰¹“û>÷·Z‘4ûù Á,.ØÂq(XùgѸùô¯í¿ ÇxÐ «v‚:²H$_šbX˜Ç?{qÖ³4r;Ë &u×­´Ù-®äŸQ†YLfpÏ»ü|dcßÚ’þ¿¯¼õý}Ç me{z¬Ö–WW ¿xà 8\ŠÒÔt­WL‹qw-å’Ý2Gb™ê8µ«u¯@¾Õ›L¾6²Ï¬4±Ç¾\†"½p;J×—WÓ/<3m£Å©[ZÞÉ¥F>Õç(\¯X¿‡?Q×ð'Kÿ[ÚÛúÞÇäöïq Ì&wʳ"ã®X Sa~-~ÖlnŶ3ç˜ËÇ®ìbºÝ*îÚ_-KU´¶†(¥0‹kæIòIù!Ãü¾µ¹otº|>½»Ömíôèô•YI1Ý>PãônÜõâ›Òÿ×q/ëð<Ú;é­šæ++©-×;¦HYc®X Smí/.ÑÞÖÒâuN]¡‰œ/ÔÅwþ¿Òl,4ùWS¶ˆ)»ŠëPxÌyÎБgkœâ²âºKï YÙéšý¦•-³ÌnbšäÁçn9RûÜqŠOK‚9D´»’Õ®’Òá­—ïL±1Aõl`T«Ò­¼Adº „¶ZZýžËÉšÖîöH›p0•óêGã^u¦ÜÙÛ] /¬>ÝÒ<Ÿ=¢ç±Ü¼ñMîÐt¸¶I{{¤ED“ȱ)c€  ûsVµ QÓuc=¤æRå#+blwN>aô¦Ú_ÙÅâk[è­¥œwQÉäù†_-Aù'¡5Ô]9FÙvHÄ1ÎÞrx=«¡—VÓäñ%ÝÓ_ÚŸ;@1´žrá¦8ùsŸ½íÖ‡§õäÅ_õåþgö ñiö³av-±Ÿ8ÀÛ1ë»­=3ÃÚµ²Kmu§‰% b·’ä ¤Ûœí\C×Û[Ý.Ÿ‡ïnõ›{}:=%DÖRLwO” b>Ûž¼W=áËk+=µ+=WHƒYœ²F/.Õ>ÊœŒ…ä—#×±üÛê ¡Ç’A ‚8 ö¤ÝL”æt.®UˆÞ‡pl ÷ôÝÔ’î£uEºÔ.ê7T[¨Ý@î£uEºÔ.ê7T[¨Ý@î£uEºÔ.ê7T[¨Ý@î£uEºÔ.ê7T[¨Ý@î£uEºÔ.ê7T[¨Ý@î£uEºÔ.ê7T[¨Ý@î£uEºÔ.ê7T[¨Ý@î£uEºÔ.ê7T[¨Ý@î£uEºÔ.ê7T[¨Ý@î£uEºÔ.ê7T[¨Ý@î£uEºÔ.êUß#¬qÎä*SPî©ì§X/¡•¾ê““éGõ¦ô^€F>Ñy)”Ž|¬ñþ•‘©XI§LÉæDù(ãÀZÙi7±o´ÌŸì®ÜÍMfë7[xà YÁÝ“×#úÒöšTŸQ½û8e0ROò¨ïôÈà·7VWbæ8~A+øŽ ^[Ã$°Ï3¯–Ë… c%}Hô5ÍÖÛKÂêWÎ$*±œ¨^ÄúPZ.ˆu0Ó\\˜-ãpå˜úñ­[ß Û¬,tûÙZeÌAÝì“p¯£›`‘»&åd“F}¹ý*Åš›#I*È0 ™³¸:“òŽÜ÷çžO—WR3jût>‡ —Ѷ¯u«íýÜ®ãÜ{ƒ^ðÂñ’ÊxK|¢|õ¼ÆæQ-ÔÒ¨ÀyÀô滿‡@˜ÓAü…z±>~I&Ò=ÊÑ÷ «UŸ§œÄµ¡TH×ûµËøƒýCý+¨»\¿ˆ?Ô?Ò€>|ñ!Lj.ÿÞ_ýV^êÒñ/üŒ7UÿÐETµÓ5 äg³Óï.QN ·y>„¨5# ÝFê·‘~ïf‰žàZ/ÈD‡?0ë×Vx^Þy!“ãbƒ‘ph7Qº™E?uªÒhÚ´¶ââ=+Px î­¬…HõÎ1z†ÊÎ}Bí-mÕL®€ÇKÐuªeÓ¯-Ý-ÝÅÀsB°\îàr1ƒÖ«P÷Qº™O’aeŠHètÞ…w/b3Ô{кÕ/Ø.ÄÎÖÒ$qg2 „û¤‚AõªôýÔn¦Q@ÝV¯5;»ô¶K©¼Å¶ˆCÚÔŸÇš¥Z#@ÖÙC S Œ‚,äçÿ  ;¨ÝLé׊(û¨ÝW­ôKÛ£d#¦¬_&wgŽ:©kk=íÂÁn›å`H]Áz žI  n£u ±Å¯¬r‚cb0ƒ^i”ýÔn¦SãŠYwyQI&Å.Û¶ÕIÇAï@ê7P"”ÄÒˆ¤1+i œàÓ'juµ¼—wPÛE2gXÓ'$àQ`ºÔ³ÂöóÉ ˜ßlŒƒƒQеÔ…ÛÍNîý-’êo1m¢Â6µAÀçñæªî¦Q@ÝFêeýÔn¦Q@ÝFêeýÔn¦Q@ÝFêeýÔn¦Q@ÝFêeýÔn¦Q@ÝFêeýÔn¦Q@ÝFêeýÔn¦Q@ÝFêeýÔn¦Q@ÝFêeýÔn¦Q@ÝFêeýÔn¦Q@ÝFêeýÔn¦Q@ÝFêeýÔn¦Q@ÝFêe:]J‹µd`=)<îI ’z’j(u¸xÉòØ®zàÐ× ç.KÓ& ¢€--áG€£êاM¨O:í’FaèqÈTè©p‹|ÍjZ«8ÅÁIÙô¸ýÕè Î|ïúéýyåzÃ^“ÿ×Oè*Ѹéßê–´k;NÿTµ£LC_î×/âõô®¡þírþ ÿPÿJùëÄ¿ò0ÝýWÿA¥§Ëi‚$7‹vÈu Ù¦XÛ>_rU¸ü)šÆ‹ªêZÝìÖ:eíÔJáKÁ:ƒµN2^GçUáñ?‘äbêþNíþ_ÙeÛ»Î1Œã½KÙ¯ëpêŸõ±¡¤Ãlm´ë¸âÃmK&M˜R°?ËÚ®Åkcmk¨_ÜBí9!“~ž·[rÖeÛ’OÍ׎Ն<9â„hÚÀˆ>ðŸe—hn™Æ:ûÕˆ´¿As%ÌV:üsÉ÷åHf ßSŒš-¯õåþC_×ãþf>¦m[Tº61É©‘ŒQÈ0ʹèy=*¥l?†§ŠOøE|Eÿ@ Sÿäÿ ²«5uǵn’¯¢g:\{•b{R„Ÿ~GáZR‹ OJµµÓ­´úy•®Í¸iÌ,X‰:Œ6Wàb±þX–Þ?íØcA´D¾r…˜íPAŠ-­šÚµˆ lîŠ5•Tç®@â“W¿Ÿüóéo/øχàŠ M åKÍÄ Ì„ ÷½9®Röig¸2KP±äŠ…ï•UѦëê! e©ÌXŠOÝœçåãŽyâ‹­;ij®ìõ;‰HÁyb‘ÛR)õ*º­.Äx“F³¶fôéöÌßݵ˜·ü†ÿ¾…b W'J¾'þ½ßü*Ü>ñDO#GÖ#!GÙk(ܧ¨8j`[¸¸‡Y´ñ¥$1†ó`±PLI¸€íò€8ô­~=Lûm’Ùîò• ©r¯93M¼™†zŒö¬%ð߉Ò'‰4]]c“ÐZÊc¦F9ÅNÚ?Œ^ÈY>®µ¨é‚bƒþŒRJË@êmÍáë;„½†ÖÖ/´j¤\i˜P6F¹Uô;?¹\¦ºmN·t¶QÇ´oåÆ#P ç\dûšºš‹cx]4½m^Û yAŒsÂñÀäôõ¨?áñýuOü“ü(¶ºMLŠèašSà™³3ø˜Æ3¸ð<¶ª¿ðŠø‹þ€§þÉþñῈ EÕü’ÛÌe—in™Æ:óO§õÜ]MËÛµësiVðØÙÚ´–÷k ŒdêÛóÐ’9ã¥-­…±½Ó´Ã¥Û¾Ÿqd³KxaÌ™(YœKÕv¶F3Ž0G5&‹âùmÒM3\{dû°´”_¢ã…Ñ|^–mfºf¸¶¬rЈ%à8ÅM´þ¼ÿ¯×õø_3kDP_Â…‰˜ï¸ÇÞþ•^=6Ìx£MµK;itÆ·v·˜Æí#cîHå·º~î1îs"Ðü[iZ^·#UKy@RF pHâˆô/±¬ZV¶‹c[y@BÃŽ8ÈëC@O}<©àý5µ†XY&#[«²‘.p‚W·B(ñ 0ÜX¦¡a´6o$D-3DÅr›8À<äûPÅ¢ø¾ Wµ‡L×#·åâH%ßP -Þãð‚óM×nB}Ñ4>ߦGÚsõÐxLÂ.uCp®ÐÿfϼFÁXŒ„‚ü Vÿ„WÄ_ôÕ?ðOð§Åá¿Á¿ÊÑux÷©FÙk(ܧ¨ÐLBã!yŽ}0kÄ–vö »¶¶M‘)ËÎ|²T¹ö$¶Ò/Ŧ5´Z^¼“½Á™îV9ƒ8*iã'§­c·…üFÌY´-T±9$ÚIÏéP•¿¯$Swþ¼ÙEkÿÂ+â/újŸø'øQÿ¯ˆ¿èªàŸáT#"Š×ÿ„WÄ_ôÕ?ðOð£þ_ÐTÿÀ9?€2(­øE|Eÿ@ Sÿäÿ ?áñý5Oü“ü("Š×ÿ„WÄ_ôÕ?ðOð£þ_ÐTÿÀ9?€2(­øE|Eÿ@ Sÿäÿ ?áñý5Oü“ü("Š×ÿ„WÄ_ôÕ?ðOð£þ_ÐTÿÀ9?€2(­øE|Eÿ@ Sÿäÿ ?áñý5Oü“ü("Š×ÿ„WÄ_ôÕ?ðOð£þ_ÐTÿÀ9?€2(­øE|Eÿ@ Sÿäÿ ?áñý5Oü“ü("Š×ÿ„WÄ_ôÕ?ðOð£þ_ÐTÿÀ9?€2(­øE|Eÿ@ Sÿäÿ ?áñý5Oü“ü("Š×ÿ„WÄ_ôÕ?ðOð£þ_ÐTÿÀ9?€2(­øE|Eÿ@ Sÿäÿ ?áñý5Oü“ü("Š×ÿ„WÄ_ôÕ?ðOð£þ_ÐTÿÀ9?€2(­øE|Eÿ@ Sÿäÿ ?áñý5Oü“ü("Š×ÿ„WÄ_ôÕ?ðOð£þ_ÐTÿÀ9?€2(­øE|Eÿ@ Sÿäÿ ?áñý5Oü“ü("Š×ÿ„WÄ_ôÕ?ðOð£þ_ÐTÿÀ9?€2(­øE|Eÿ@ Sÿäÿ ?áñý5Oü“ü("Š×ÿ„WÄ_ôÕ?ðOð£þ_ÐTÿÀ9?€2(­øE|Eÿ@ Sÿäÿ ?áñý5Oü“ü("Š×ÿ„WÄ_ôÕ?ðOð£þ_ÐTÿÀ9?€2(­øE|Eÿ@ Sÿäÿ ?áñý5Oü“ü("Š×ÿ„WÄ_ôÕ?ðOð£þ_ÐTÿÀ9?€2(­øE|Eÿ@ Sÿäÿ ?áñý5Oü“ü("Š×ÿ„WÄ_ôÕ?ðOð£þ_ÐTÿÀ9?€2(­øE|Eÿ@ Sÿäÿ ?áñý5Oü“ü("½ á¯ü·ÿ®ƒù å?áñý5Oü“ü+³ðŸ{¦Í,7Ö—²³ Ÿ­q:ÝΣ{á­CL¶óMÌs·ÙäŸË^–ôç±­x/îu½2SçJ¹·¢¹Ê¬¦2½@'åîHéÚ›V Ü`ô5BÔbQÑduÐ ÈU ÞÞ^é²Ëw7ÚNéos°!ž x|9ç§\f¯Û«“þ»Kÿ¡µ 5QHaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPU&Õ4ûyŒSß[E(ê2©5«¨> ,¬­,žXûùY³œîúW;=Ì—0êÌq½Þï•\²®cT8ÝÏJãÅc#CN¢o±Ø×®ÈáýzGÿ¡½léÚÌ··ÂÚKh£Ìm hæ/÷JŒTz±µÏù#ÿ¯Hÿô7®šu#R<ÐwA{nþ©kF³´ïõKZ5  »\¿ˆ?Ô?Òº‡ûµËøƒýCý(Àçe¾«ïvþCZÚ7Ðj÷SÀÐk½…Ë1„.Þ0{w‹àèæ{kñ M!ûNNF>QêG¡®Ÿn¡ÿ>Ïÿ}Çþ4†aiž¹³Ôm'–;1ä+‡ž7c$å†2ÙO´Ñu••ËÚ­­¬¢]Ñ33ÈA$ äûÖÖÝCþ}ŸþûühÛ¨ϳÿßqÿ;Å”’ëWjÈ#$Vòwcü©×­›y ý©ûuùöûî?ñ¨¥¶½‘}•òÁ‡ßNêG÷½ésZÓWÒî,ZV‹ÌÁYd«8ïÈ—qáýFæ{KÉ5Kv¾·Y;Yf6VÇðoÈ Ôm$×îd†É!”+Cù›ƒ„à|½E!Øëh®=üQý§a¬Ù¶Kˆl^e{KÁ:ã}àØ«Z·v«¥Xê:ÙþÕn ¼Ë8“yU†N9ïõ¦—õ÷ÿŸõø™ÓQ\æ¡.¥uâÄÓmu9l &såÅ–mûyܧŒzU3âÙt˜ï-5C×¶×)n’oÇ(uܬÄä'Ï^œu£¥ÿ­ì{]ξŠá¯üM>³¥G †ÈîN£¬¿f¼Ê° ·É2Žé29«2jòèRÝy¶÷Mme Zý¥BZFQË.sêÇ·âëð¸_ŽÂŠäµ/\ BÚþÊ[;«u†LZÝýôy‚¯´È Œ:·e¨j’ø§VµX£–ʈny¶´@Æ Ú¡NìŸR(¢¢¹];_‘t}*+;I®ï/FD¸¹É ­ó3É·ÜÇz™üS'ö|rE§fõ¯~ÂöÒL$œŸ¾ÈÆqÞ :J+–›Åò[ÀÉ>žÞ¥Øµxä¹%%w†2mèG¶sÅtv²K-¬rOE+ ²$›Àú6*šŠ( Š( Šóx‡]ð犤’i’[yP˜"'ûdC߿ӫà+ÍcR[ËëÛŸ6ÎG!òÞ`ë´ ãŒ.rÙÓœõ§Ó­cÿÂQ¤Ïáÿ¿oþÂQ¤Ïáÿ¿oþçtW?µg?¶‘èŸð”ióøïÛÿ…ð”ióøïÛÿ…yÝ{VÚG¢ÂQ¤Ïáÿ¿oþÂQ¤Ïáÿ¿oþçtQíX{i‰ÿ F‘ÿ?‡þý¿øQÿ F‘ÿ?‡þý¿øWÐH$àQíXý¬Dÿ„£HÿŸÃÿ~ßü(ÿ„£HÿŸÃÿ~ßü+ÎÁÈÈ¢k!{i‰ÿ F‘ÿ?‡þý¿øQÿ F‘ÿ?‡þý¿øWdgô£ ’22:Š=¬‡ídz/ü%GüþûöÿáGü%Güþûöÿá^wHH^¤ÜÑídÖG¢ÿÂQ¤Ïáÿ¿oþÂQ¤Ïáÿ¿oþçt…€ ==èö²k#Ñá(Ò?çðÿß·ÿ ?á(Ò?çðÿß·ÿ óº(ö¬^ÚG¢ÂQ¤Ïáÿ¿oþÂQ¤Ïáÿ¿oþçtQíX{i‰ÿ F‘ÿ?‡þý¿øQÿ F‘ÿ?‡þý¿øWÑGµaí¤z'ü%GüþûöÿáGü%Güþûöÿá^wEÕÚÈôOøJ4ùü?÷íÿÂøJ4ùü?÷íÿ¼èÀA¡´{Yµ‘èŸð”ióøïÛÿ…ð”ióøïÛÿ…yÝ{V/m#Ñ?á(Ò?çðÿß·ÿ ?á(Ò?çðÿß·ÿ óº(ö¬=´Dÿ„£HÿŸÃÿ~ßü(ÿ„£HÿŸÃÿ~ßü+Îè£Ú°öÒ=þ#þýûð£þ#þýûð¯;¢jÃÛHôOøJ4ùü?÷íÿÂøJ4ùü?÷íÿ¼îŠ=«m#Ñ?á(Ò?çðÿß·ÿ ©¤êFÿÅwžMÌ’ZyE$íä€zsšá«£ðWü†fÿ¯vÿЖ³Fåçþgn|þÑ5ö_æŽòŠ­}o=Í¿—o{-›îÏ™#za¥rzN¯©Á¤Û_Ý_\jW7s½¬e"K‡` eP@ ¤ž¿Jì2ó;Z+ž>(û=¥ù¾±xolÙ­£Iæ8M­OŽj½þµs.«i÷Ö_b¼]>IãÙ7˜®˜ Ø ã#é7d4®ìu4W š¸Ó5»Uçžm‚ÝO2È[§·©=€­-[R¸·»Ô™aº‹FiÆÙ÷DŒ è¥FH#ïzvª’·ãø_ü…ÆßæuVn‡su¥Ã-üDí•1ÌdÞ ŽOʸ>Ü×aâ}E¢ÓîV¸–iîÄRÛÏd#€!r%Ú£8éóž1CVvw1èÔV>#™Î£q-ŠE¦Ø<©%ÇŸ—%:á6ÿZKo^5ż7šI¶kÈšKOô€ûÊÛå8ç¸ëKÌ~GAEs–¾.‚æçF‡È*u(ZRwäB@ÎÓÇ9!‡o»PZx¾{û«k{}:%yãó—Ï»ò÷F\¨(6Ç$qŒŽh·@:ª+•Öáë˜.ì§Ô5!v,c1ÛGR®FÒÇæ%Ž8ì=«oÎ_îMÿ~›ü(!`§z“ÓzÏæ)ßúþ½Ddj-ôúÚj–”V² o³²Émæ‚7nÈù†çUŸÂHÖ™ÒDÜ‹³zè¬L€måzmÛÆßJé*6™ŠüÌèU-Êëõ ÿ¯‘ú%ÕÌ6bòú)%¶¼[Ñ[ya‚‚6ãqÇ^¹?JVð×ö¥Íäßkò¾Ó0ãËÝ·d…óÔg9ÅmùËýÉ¿ïÓ…rÿroûôßáEÃúýLM_Ã_Ú·7s}¯ÊûE¼PãËÝ·d…óÔg9ÅN4{˜5Ùõ [õŽ­†âƒqb£+nxÇcÒµ<åþäß÷é¿Â9¹7ýúoð  ¼--¥–š¶š•{`såus–VLý;ö§Çá€[¼g/Åüó4c÷¯‚À?(è\b·<åþäß÷é¿Â9¹7ýúoð¢úÜ i´+¯?Q–Úöûtªî“Úù«´ M¤néœÕÝK]H‚Áe2ˆ³ó·©'ØsÀì*à ;Ôž›Ð®1RPEPEP{ðüjž)¸¿Ô/¤žÆQ¸E’7M¹Â;~^æç„|#qá«»Ù$Ôhe;bˆp6ŽŒßívã·×Ž®Š)ÖŸL~´äu ÅÊÛíÜŽCq•ÇøÔÔÙ#IP£Œ©ê+ZúœjÝFÁ0ž=ꬣl¡ÔÞÉ׊BMXH§‘í^B¤Bà шô¨~ÜË»I gm«ÕBžû²{U¡¬(Ù£¡SÏëQý‰6ýù7îßædnÎ1鎔] 4W{‰g·Ø îyB+¨ 0êOó«/$v/–B6‚£ž9턉2ɹC‚3ü©ÒÀ³B#fa‚`yÈïEÐ]6õkx%Øç%² :õëœTæþÏ–RÀ‰³°`än8残uÝ‚ËƘ,Aäù’É\tÇ]h¯%á…šLºB·,çÐüëF Áf2,’.ã–PF üªzM¡;t (¢‚Š( Š( Š( Š( º?Èfoú÷oý kœ®Á_ò›þ½ÛÿBZ‰|põÿ3¿ÿ/?Âÿ4w•Ï'…ü½ÖÎ;æK›K†¹‚äG÷X³Ï# Açò®†Šï ç…þÑi~/¯žkÛÆFkˆã å˜ùM«“€<“žiÉáɧ{¹µ=CíWÚ›Exá,qž¸\žIç9í[ôP9wðj\ˆšòóÌ–%¶ŠXâØÑº¶VE98#Ž?Çuü>×7Í{yæ´ÚØ¥ÙÍÙ$—œué[t›€êGçC×úþ»‚Óúþ»ú=îŸf-®ï’ì"ªFË–BŽ~c“ïÅbEáÏìØô›a_LY7˜£´Øî7ïÚ\±ïèu{—ûÃó£rÿx~tï­Ã¥Œ›}(ôýJÊy ÐßÍ,…ÚTIÛ©éëPXè1_Z\j™¼HÉl¢ÜŒc“¹±Ça׊ÝܿޗûÃó¤)7ã{}F8¯äŠK™„°H#æØ-µyç—O½íVµ_ ɨÚC§Çw:|Hˆ±›Pò&Þèû†Ó€9Á®‡rÿx~tn_ïÎ… Sh)ª\^éÚ‚[‹­¦xæ¶Ê1¹NჀ=jõž™öMSP½ó·}°ÆvmÆÍ«·®yÍ_ܿޗûÃ󠢓rÿx~tn_ï΀ŠMËýáùѹ¼?:Z)7/÷‡çFåþðüèh¤Ü¿Þ—ûÃó  hÓëºÖ6÷Mo+aþÇð·û'üç¥rW €±´û%ùKåaö™_%\ÉQØŽÞ½ëÑw/÷‡çFåþðüèD`·Š#+ÊQ™$9fÀê}ë‹Õ¿än“ýÕþUÛ‚B q·ü²º¿Ê€; ;ýRÖgißê–´h¯÷k—ñú‡úWPÿv¹¨¥PðüƒnAègˆ¡r+¥ÔõQdÂ4ɀİÈPs¯C\Ï„Ž4Éÿëæýk{WšÁc¹’Hå ¹^5$õÁºJ@_²¿K¸ýÆ µ”žøÏ¼O¾#ìÒ6aì@È®\_–0Ë‚r9bpã=}ÞÕ­ï&…y¿8U”)'9?Èä~ÀÓ¦ZÈ‘ÚI,Œª¡ä,Ìp y'è)õ•~ßñKjõÊçù½);+Ž*í"õž³¦j2ìuK—Q’°N®@ü ]Ípš>›‡îæ¶±´‚Ê$‘dŠBóJ xü (9É=*{›«oYu ÃwqµfšYÚE‰L»YÕI!p¹è;UIYØ”îzhÍp¯q¤Þjpiw×ñG¦5ÈÌg1ÊËóŸ˜díöâ’òäé¾›PÓµk›»™£ˆ¼ÒÝ€gœÐqéÅ/ëúû‡ý~_æwy£upq[k†Æþ8u(¢ŠEˆÄSyØ6ï˜ J‚¡—×¥;ÏŸPÐÖ->k¸^Öð¥ÔêI&%|“ÜÈéŽ(³¾#ìÒ6aì@È¥¬}:þ ï ´öÆãËò$_ô‡Þà®A²sÈ<äÖÅFפéMÍ %#,0HñRW1wcmmãÝ*æ(ñ5Ä7W,IlÀç ƒŽjOJÒkzVŸ5ìÖvS‰YÞLM#¨Sxäu'ƒÎ(ìÍ›+ø5 ,D3<¸cæSƒK¨Zé–¦æî_. BçibIàI>¸¹¹Óô‚Îáü¹µÉ`’w¸(Jdõ—®Hv;ûÕ‹›;ö´±¶Ô.KBúÄB*õå’5*r¦\+g<Žüеµ¼¿˜m{ùþÿ#³´Õ-/eò y<Ï(Kµât!I ˜àñÖ¥¼¼‚ÂÕ®n\¤J@,·SÀç©®/_šçO›Sµ¶½¼Hâ±¶ØMó)i˜¸œäŽ3Ö›«Éw£6­cm¨^´BÞÚxÚ[†wšm¬“œ:fšÖÂÛúôÿ3¸Žæ f–åV’Š(HÈÏáN~µÎèñÇÿ §ˆ$28—÷ Gæ¥LkómÎ ÈÆqê+¢~´†yßü"ÚÏüùÿäTÿ?áÖçÏÿ"§ø×¢»¬hÎìÌNµKJÕìõ›wšÍÉTrŒ`CB9—²‰—²‰ÃÿÂ-¬ÿÏŸþEOñ£þmgþ|ÿò*zEö‰$ÞÎhUb¹à’9ïN6PúÍÿßühöH=”O:ÿ„[YÿŸ?üŠŸãGü"ÚÏüùÿäTÿô³€wŸÿ$ÿ⪴ˆýÙ.Tö"áÎ?H£ÙD~Ê' ÿ¶³ÿ>ù?ÆøEµŸùóÿÈ©þ5ÌüMäñ£HA‘m<¶ u+,«ŸÒ¸èù»ö“ÈÿZjŒ{’é£ÕÿáÖçÏÿ"§øÑÿ¶³ÿ>ù?ƹvŒw߯r çëÏcåÖÐÂFJ÷2¢íaŸð‹k?óçÿ‘Sühÿ„[YÿŸ?üŠŸãRyt†:¿¨Çùˆç]¿ø?áÖçÏÿ"§øÑÿ¶³ÿ>ù?Ʊ..eíŸçQ×3£ìtªI«›ÿð‹k?óçÿ‘Sühÿ„[YÿŸ?üŠŸãXRöQeþmgþ|ÿò*ð‹k?óçÿ‘SükŠ=”CÙDßÿ„[YÿŸ?üŠŸãGü"ÚÏüùÿäTÿÀ¢eöQ7ÿáÖçÏÿ"§øÑÿ¶³ÿ>ù?ư(£ÙD=”MÿøEµŸùóÿÈ©þ4Â-¬ÿÏŸþEOñ¬ (öQeþmgþ|ÿò*ð‹k?óçÿ‘SükŠ=”CÙDßÿ„[YÿŸ?üŠŸãGü"ÚÏüùÿäTÿÀ¢eöQ7ÿáÖçÏÿ"§øÑÿ¶³ÿ>ù?ư(£ÙD=”MÿøEµŸùóÿÈ©þ4Â-¬ÿÏŸþEOñ¬ (öQeþmgþ|ÿò*ð‹k?óçÿ‘SükŠ=”CÙDßÿ„[YÿŸ?üŠŸãGü"ÚÏüùÿäTÿÀ¢eöQ7ÿáÖçÏÿ"§øÖ…-f²ñͽÂl•-ÎåÈ8ÉSÛë\}u>ÿ¼¿õîßúÖU`£(5ßôgn *£_Êÿ4wµÌø‡ÆÚ~ƒr-H3\ñ”áI€Xœs€qÅtÕåw6º'ÄýIõÂ#ÎÐK ù@fܧ>˜ÀÏû8¯BŒ®Ú½º²oCµÐ|_c®?’¸ŠrJ…Ü~ð*Celdá”dr3ƒŽŠ¼›UÖôëï‰:|ú}Ô~[<1Ë>p¬D€õïÆW>¯Žõë4ªÁFÚZý,FáOÒ°4½;FºÑ´ûÍRi.oO™rA2HÜíýô­öû‡é\¨¸’ßÃ~ìýåÕ¼m¾5n ·Lƒƒî9®iEJ¤SþµGD$ãJR‹³ÿ€ÍïøF4/úÚß¡Q¦áÉf–ôû–,yˆª¥“###¶Es·Zæ´4ÍKÄ1ê–öW éÆ*è°†lnzŒtàÓµ]búɼW-¤‰ °=¢Äâܻ‚O7S÷³Šj”øWõa{z·øŸÞÍ‹ÝB³»Ó þÅ´¶\7lf"’Lôçý^1ïíW?áпèiÿ~…sFçQ¶ñΕ£ß_µú$ësÒDˆëºÞéJ€÷sÓ½wt{(vAíêÿ3ûÌŸøF4/úÚß¡Gü#ým?ïЭj(öPìƒÛÕþg÷™?ðŒh_ô ´ÿ¿BøF4/úÚß¡ZÔQì¡Ù·«üÏï2áпèiÿ~…ðŒh_ô ´ÿ¿Bµ¨£ÙC²oWùŸÞdÿÂ1¡Ð&Óþý ?áпèiÿ~…kQG²‡dÞ¯ó?¼Éÿ„cBÿ M§ýúÂ1¡Ð&Óþý Ö¢eÈ=½_æy“ÿÆ…ÿ@›Oûô(ÿ„cBÿ M§ýú­EÊ{z¿Ìþó'þ þ6Ÿ÷èQÿÆ…ÿ@›Oûô+ZŠ=”; öõ™ýç?-…¦‘«i¿`-ÖæI"•#áXÙ‡2 Ž~µÏjßò6Éþêÿ*êµù è¿õñ'þ‰’¹][þF×ÿu•($›K¿è‡U¶¢ÞöýYØißê–´k;NÿTµ£Z»\¿ˆ?Ô?Òº‡ûµËøƒýCý(7ÂÇn‘tç¢O±ôBIü®ŠëOŠúA+—?.ÓÆ=k'ÀjÎ쑸6­±‹.¥-ˆµ¶{¸ãȾNp¬Hœc'ŒçŠ@C.—o4¾cÁóg,G¾¾½)n‘-´É¡E8Ô¬À€âjI-ôH¯á±{Ko´ÌŒéƒ9UÆI `G_Z¹eï†ÒÜ ô¦Õ p²Á5»ª¾%”I ðÌÄdÄZÞZúT3XZ\g¶ŠR:@ØüèªCåF±ÇDPUWÐéLŽÖ8 Gn‰yj€.QŽ”·vu¬A¤$ÿ:®È`RÜ3Î8Éö?öF›ÿ>ß÷é€*Zéöö(RÎÎdc’°Äë€)°éVvÏ+Á§ÛDÓ JcT¸ÿkŸÆ®ÿdi¿óámÿ~—ü(:FšM…·ýú_ð¤rhšlvò[¦•f°JA’5¶@®GLŒ`Ò¶§½¢Z>™hÖÈw,&ÝJ)õ Œ ±cm¢jv1^ZZ[Io(Üä‘ô#5cû#MÿŸ oûô¿áL WI¶—,Ʊ«FbŠ4P£$`+F’-:Êß ¤¸þ$@éQj×öÚ>œ÷·ÈÑ#*‘'æ`£©Í9 …æŽf‰XÁåAe®làSn­-¯ 0ÝÛÃq9)*Sø»å¯¥QÕµmËí3E,›¤H’8€.îÄQ’SÜŠbi¶1Ù$²¶[SÖ‰Bø1I—§ÛÂÁakQ¿˜ˆª…ïÞ®Z±¸¶Idµ–ÙØs¥K/×i#ò&¦ò×Ò€(KcipÎÓZÁ#:…rñ‚Xz€yMcipÎÓZÁ#:…bñ‚Xz€yúÕÿ-}(ò×Ò€)ýšßí_jò"ûFÏ/ÍØ7íÎvç®2:SŸ­O"…\Þ ~´í”…£ÚÜ«<2pÊ®Aªº~ƒ§iS¼Öp¼r:íbfwÈú1"¬j7˦ØKvðÍ2D2˱ÜòGJ¡£øŽßZ¸’+{K¤¨f’@›Fz †<šØ¶û×õÓÿeZç¼Mªêp]¬A]ö‘Ûµ*|`àF3жž¿-t6ßzãþºì«Xíá=6æþö÷T··¿šâ@Èf„)€g>„ç¾i ÄéðÌšŽ-º³´þl€¶nàTt'ëÇ×¥\±•æ±¶–C—x•˜ú’T@6þ¸ÑÖèÝ%Š'1ó6p1žvƒŽÙÅ]¶‡ìöÐÁ»w–Š›±Œàbžš‹]ø’¼Eoœÿ©~ÿôñ5rIF qÆHõ®¿â6?á%‡“þ¡øÿ·‰«•0É$lIÈéS̯aÛ©Ñh¬-š¡¾`X‚G8b¿NWùúܼÕï!¹1Å@’$ ÏR=+°µŽÏS²Ž)¦xÉÌ¥Ê,3Ž8ÿë×KªàÝ«GÕã ŸoóÞ½b©ác6µÿ‚q×jîÅ„ñÉÌöjÊF«mäuëŸj··ç©e³eP3½äz€yú‘ù×10 ʤ ƒƒõô¥ îÜÍÛ稥8}¥¡”Z5¥2g}¥w18=E2‘yEéÓ°Å-yҵݎõ°QE†QEQEQEQEQEQEQEQEQEQEÔøþBòÿ×»èK\µu>ÿ¼¿õîßú×=}áëú3¯ µOð¿ÍífêÚ•®Æ‰©YG>ϸÇ*Ëôa‚?:Ó Xd _-½?ZéM§trZç ­|/ѯì–=3þ%—)&ÌOUufù‡ãÇé]v™i%†“gg-ÃÜÉoDó¿Þ”ª€Xòy8Ï^õsËoOÖ-½?Zm݆Ãr¶VW†Ÿá´3ZEgbcžRÒ4Ȇ͸À<’sÇJë|¶ôýjœÚ&q+K6›g,÷àF'êH¬äŸ2’èi G•Â]àÿ™Z_ø~}Hê[Â×A+~ù‚3ŽŒS;KR3S\i:5×Û|ä¾ÚѵÇïˆÞSz1ÓÂ=¤ÿÐ"ÃÿÓü(ÿ„{Iÿ E‡þ§øQïùÔ»¿ëæA}¥Ú\kún­À·òþùÚS–ŒE2…¦wKžÜgž‚¶~Ñüöþú›ÿö“ÿ@‹üOð£þí'þøŸáG¿ä¥Ýÿ_3KíÏhÿï¡GÚ ÿžÑÿßB³áÒèaÿ€éþÂ=¤ÿÐ"ÃÿÓü(÷ü‚Ô»¿ëæi}¢ùíýô(ûDóÚ?ûèVoü#ÚOý,?ð?ÂøG´ŸúXà:…ÿZ—wý|Í/´Aÿ=£ÿ¾…hƒþ{Gÿ} Íÿ„{Iÿ E‡þ§øQÿö“ÿ@‹üOð£ßò Rîÿ¯™¥öˆ?ç´÷УíÏhÿï¡Y¿ði?ô°ÿÀtÿ ?áÒèaÿ€éþ{þAj]ßõó4¾Ñüöþú}¢ùíýô+7þí'þøŸáGü#ÚOý,?ð?ÂÈ-K»þ¾f—Ú ÿžÑÿßB´Aÿ=£ÿ¾…fÿÂ=¤ÿÐ"ÃÿÓü(ÿ„{Iÿ E‡þ§øQïù©w×ÌÒûDóÚ?ûèQöˆ?ç´÷Ð¬ßøG´ŸúXà:…ði?ô°ÿÀtÿ =ÿ µ.ïúù‘êr$ÚÆŽ‘:»,²;9ÂùL2ñ®cVÿ‘µÿÝ_å]•¶™kdXÚYÛÛ–ûÞTj™úâ¸í[H?Ù_åDSWo¨§$ì—Oó¹×éßê–´k;NÿTµ£Vf5þírþ ÿPÿJêî×/âõô  ^¼‡Oѵ+ˇ٠Ìvôq5µá›YaÓ¦Ôï—eî ææpßòÍqò'ü@\Ö7ƒ--ï´ËÛ{¨–XYÔ”n‡ Ägñ»)àŠæÞKyN| ’…Ô@¢Š(’ýÑõªÏÖ¬Ë÷GÖ«?ZyŒj­†i¦@`³aŒ±r«êjÕ–ßzãþºì«S†Ûï\×Oý•jc@ËU¿Š¬ËU¿Š#ñQg‹Ä–sª7—$2 aÏ+<¤üxVou§ß½½ÌoçÛ»G*¬g¡èk¤ø wø‚Ú7•a‘•[ žPHü‡å\dÒ™îyþy]÷’ÌNI'¹&©Bú‰ÎÚRH¶šÍ¨* e%¤n9¯9är1ƒÏEnë×–ö—–‘‹7ÆTnWàãzu¯=Õ.'•"iäUÊ€ÌN3Îâ3TÅüþarîÌÀ.wd×Ð A]u+ÎtÔÇ4©s_SѼûBÊm®Ë¼ñ°çÓ¯4ðNÞp{óÅyôwró0¼súœU¨®ïWåH¦ÜÊÇå$ôíéšÁ+!·=~èúRÕ{ ßÙÖÛó¿ÊMÙ99ÀïÞ¬VGHQEQEQEQEQEQEQEQEQEQEQEWSàù Ëÿ^íÿ¡-rÕÔøþBòÿ×»èK\õ÷‡¯èμ.Õ?Âÿ4z /ãU.5{]F×OžáRîè1†2[yè?±œ óÛÈõ]oûOU±±·•|ÕûÃÜ•t1ÆÕØs–ÝÜdÞúêrÛCÑóU`Ômînî­bbeµ*%Æ ÃëÅq7z†‘ªjÖ—ÚæÏì©ìKA>|¡)'x=··¯¾*{/ìh¼k¨=ÜvÂîSX<‰ó2ù`|„ûƒÒ™7;;¿¶ZG9‚h7ç÷s®×^qÈ«¯2´6¿Ø¾þ×ÿ6ÉüíùòüÝß&ÿo½ŒñšB—Z=•³£I¥K®µIs†ƒžvç8ÏlQmmýoaì¯ýmsÒsFk—ðÌQØê:兺촂å<˜â=Ñ«=I8®uKš3Qn£u %ͨ·Qº€%ͨ·Qº€%ͨ·Qº€%ͨ·Qº€%ͨ·Qº€%ͨ·Qº€%ͨ·Qº€%ÍpZ¿üÒ}w«†Õ¿äm÷WùPa§ªZѬí;ýRÖ0ÿv¹¨¥u÷k—ñú‡úP>`¶WŒÄ '·-W¼4§R¸¼ñ ÿ¦‘¨?Ãn¤íÿ¾Ž[ñ•‹á}?ûW@Ô¬Lï NB;§ÞÚY·é‘‘Ÿzí$¶ÿ‰{ZÛ?ÙÿuåÆÈ¿êøÀ {Rîÿ¯ëþüŒM3þ'>%»Õ››[-Öv~…³û׈ ÿ>µÑÕ]7OƒJÓmì-Á@=O©>äòjÕ?!yœmîq7Äklj÷±æÂY*Bv1Q˜Ïß'Ž´íGPÕ®µ xYêa‹H‰#£‰˜¦ò\°'oo—ù®¬-›QM@Çþ”‘VMÇ„$1Ó¨KQðÖ‘ªÜ›‹ËRò²r²º tW @qìÙ¥öRõüÇu{™7Ú¾§{…Í•À²mQ³?îÕð¦ø‡PG®zWIeo5µ¸Š{ÉnÜ|ÙUˆô;¥6]:Òy­&’^Í‹@A !*Tð8èHæ­U=݉[# Æ0I?„µO.êk}–²³yAðü§rž¶½bkv³Û|.ºß=Ñ{XŠyëÙ÷xxúäû×k4QÏ Ã*ŽE*êÃ!àƒY±øoKJ—Lò¦{)@ —R¸t Y‰QÀà`R]~EuO·ü†™q©[xž}&óPkÈÚÉnQÚ$Cn*@ÚGB3“îiþ{©k¶×Osö{¤E–HãW ÄólU¯§JÖ}2ÒK×¼1°¹x>ÎdYO—œà`ñÏqϽT°ðÞ¦Þ=Ý·ÛÎw9’þyœc,¬ä1Æ ô/ëïÿ"mý|Œ[ KTƒ_Hu««ÛfžâHà‡ìÑ›YW’dPX6ÑŸ˜ŽA⻠ɃÃzU½ú^¤4ÈÅÓ̸‘Õõ*ŒÅTòzZÔ-†÷8írÂæoh¥5kØÜ•¤'ÊÀL…Ýëßv}±Vµëë´Ô!Óì/5#ty²Ggo1Àgip ­lê:=–ªak¸ä/-‘Lñ:0pÈAõÞ§_MÓÅ/š‘ù[ÒâDfOî±V‡³f—KÆý¾ûÄÁwi—w pTE$„ ädãÜ ÷®£Ã7÷wqj׳ ‰loÛÏ Í+@à›qN heeiö2°Ù6Á&‘LEºCg?«COÓ­4«AkeŠ KcqbI9$“’Iõ'5]Xt_×rÕQHK÷GÖ«?Z³/ÝZ¬ýhôQE%·Þ¸ÿ®Ÿû*ÔÆ¡¶û×õÓÿeZ˜Ð2Õoâ«2Õo⤆üU‘—ÅʈÌ~ÎçÿOWŸiaÂúšô‰ˆïâ(vªŸÜ?'þ¾&®bÏI»ºÞÐA,Éî‘£Œ‘ÿy±Ðu櫚ÈÍîP³Ó–îâ(î™ ;…lŽŠNÏ¥tzå’3¼++ „•.G¾Ƕ?QURÊ¥¶ r²3ų̈OɆ#òÏãW¦€nnŸZôUxËìúÜÆ[• 0®ÜA q„,EU>UÇ\bž#R@ßÀçR€€®[îž õÿ?çšXjå­YY±³~Ïzíʤ¨àÿQ?º?•I\·3¶ÇbØ(¢Š‘…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@u>ÿ¼¿õîßú×-]Oÿä//ý{·þ„µÏ_xzþŒëÂíSü/óGkqs,„™Æ~X™‡æ¨¾Ý¤ÿø'ÿV$ûÃéYÚ>¤šÆ•üq´k0$+‘‚Gô®‹…Ÿ·Cé?þÉÿÄÑöè}'ÿÀy?øš–Š‹íÐúOÿ€òñ4}ºIÿðOþ&™v,4ë›ÆBâšB ã;FqúRÙÜ Ë{»DѬ›sœdgï·Cé?þÉÿÄÑöè}'ÿÀy?øšd7F[«ˆ>Ï:y%G˜ë„“#?)Ï8èjÅEöè}'ÿÀy?øš>ݤÿø'ÿRÑ@}ºIÿðOþ&·Cé?þÉÿÄÔµåѳµiżóí yp.ç9 p?оݤÿø'ÿGÛ¡ôŸÿäÿâjZ­ý½ÍåÕ¬LL¶¥VQŒ`°Ü>¼PŸn‡Òü“ÿ‰£íÐúOÿ€òñ5-Û¡ôŸÿäÿâhût>“ÿà<ŸüMgZë‹t®ÉgpÁoZÌùjiS‚íèµ­G˜}ºIÿðOþ&·Cé?þÉÿÄÓl®~ÙiÁ‚h7ç÷s®×^qȤ¹º6Æöyæóeþés³?ÄÜð¼u¢À?íÐúOÿ€òñ4}ºIÿðOþ&¥ªÖWöú‚ÌÖìXC3BùéÁ'Û¡ôŸÿäÿâhût>“ÿà<ŸüMKEdkÚ†ÝàÀ÷Ëòía¦>aßÎ3´š½³»v¶ˆ³’NÑÍtž&ÿ‘zëþÿ¡Šæ¿æ'iÿ^±è¹×ñÚòýYÔÒúªÞ’;½;ýRÖgißê–´k åÿv¹¨¥u÷k—ñú‡úP^ÿK¿÷‡ójëëðüz]ÿ¼?›W_@Q@Q@Q@Q@Q@Q@Q@Q@Q@ —î­V~µf_º>µYúÐ袊Ko½qÿ]?öU©Em÷®?ë§þʵ) eªßÅVd_5 <âs¨kÐM α:üăŸ>SØW>Ú>¡$í4³Äìä³e˜äž¹ãšõ^ôéö/:ÇæIç:F™Ææi™@Ïa“UÝå„fMJKidU[hÊY‚ó¹ŽFHç¥pTÅòÍ®_-ÿàª)«Üó[mæ+Ÿ9åL¶wícßÓZš]2ᘲN¹ôašôiµ«x^XÄSI*L XÑAi¨—œc©ÇCQ~Š#¥Ô“ÈÒ(·U]ãaÃóm~ô–a;iÇþ<4^ìóØô¹y2LìüqO],޲³}OÿZ½:Îê;ë(n¢ #™¨aƒƒëUWYÃù3‹[pûîH^WïÎãß¶8¡fsÕr~?ðõHïs‹vF«ýÐ:º[ÍqžÕ–(®-.³*‚Ñ´Š¹$zQV×\·k¡“8ŒÊa[‚£Ëgʃœö#8ÆGZ:V¿'ãÿµEw8ú+¯:õ¨µ†à¤Á%µ{¡òŒ„P ž¿0¡õµHâ&ÂóΔ3,!}£näwÏ=)}~_ÉøÿÀb»œ…Ój> EÓ¥{çšChnãAˆ”ƒµ›q‡ŽOŠ»-ÙŽ=4´²)ž@§jƒ¸ìcƒžƒŽÔþ¿$®áøÿÀb»œeÕÁâ;IcË Å´MMÌ£"òHÚOnǬØê«}<[›yLLnVÈ`ŸCדÇÉoÇþ{Üâ讯YÕ%°ž’[[u‘Œ÷@ìÈÆ`ŽN}{t5Æ©¨K¦YßX½ªý©cÁ,,ä»´p=:Mc¤Ò|»ùÿÀE.§7Eu·—š…¥ýªÿ¢¼ʱ‚·˜F9lçqŽêXu˜n.žÒ(f71ïó# ˜é¸ç€Ùõüé}}Úêüö+¹ÆÑ]mî£}etLvÐÝEpÑ(%™ uèIçÚ©vílIÒ2nÚÜݲ·’óã= ~÷^ôÖ:MÛ—ñÿ€Åw9ê+|ø˜µ³F#3ÌÒ)tåŒÎ €¹$1õëZWº‹[h_o…¢˜ìVó;0HËã9ÚÎ3ÐPñÒZ8~?ðQO©ÇQ]^›­Å,×—v`yæ(fGØ“àT{œu=*-?[c+ÁwãuܰÇpU|²C6Õàç8ä~4DŸÝýEDŸÝýEUÿ¯¿üÉkúû¿Èó­|dx½OF’ÍO¸;A¨ïü;¤Åâ8b²#·Ó£¸·UÈÈD™dÂ~Uéé^“äIýßÔQäIýßÔTµ§õؤÏ.ñ5ôWvpEzºt2®–“ÅuzŒd–F+m`@9ääŽ*åܶ_Ø¿‰Ø5›iQµ¿Ú3å4Çïç±|mÆ ô_"Oîþ¢³µ- ãQpWQ¿´]»Y-¤@{åIÜMëë¿ù‰-¿®ßäy„`Me£ NæÎ=´µòþ’/3qÝ‚@|mÁ<ã¥ušÜ/Ãt‰îþÖU hÁ`óœö®ºÏL[ (m-¢Ù(9À7‘'÷QNúüÄ–Çœë:u¥Ýߌ/&„5Õœ½´Ù!âaàTöäTúaÓ‹oeÔRÜj“­¼–O2 ͘€%Ôâ»ÿ"Oîþ¢"Oîþ¢Þ§—éŸdÝ£}—Ìÿ„Ÿíký¡ÞfÜŸ7Ìÿc3ÇLWAâÁiý«¥`gEľvüù^nÏ3Û±ž3]‡‘'÷QG‘'÷Q@g§-²éšØöýø‘Œ%yRŸ61íW4™,,üe$5ž¥=̳3]GŸ´[u%dê6ÿ hȆ»›'êO­Yò$þïê)ÞÎÿÖ÷ ×õÚÇ™Ícl–Zž²‘Ôa×6¥ÈáÂùÈ»sé‚F+[Âë¤A®ê‘KºkFúv LDäzíÅvÞDŸÝýEDŸÝýE%§õéþ@õþ½Ìä,´ûk¿ë·RÛÇ-Õ±ƒìò8ÉŒ˜ûzs\ç†-̺•”’jvPëQ¼sÖæSƒ¹dbäîÜp1^¥äIýßÔQäKýßÔPSÇfm,Øé$•>!7öÿ3>vvI¸6{gíÓÑÿÌNÓþ½bÿÐhøƒÃf :[ëBþìÀCB“È›#,B’¨$à‘ÎzÖwüÄí?ëÖ/ýW:ÿx~‹ógcÿt_â’;½;ýRÖgißê–´k ãÿv¹¨¥u÷k—ñú‡úP„õ+M'I¼º½”Ç•pFc–faA<’+¢ÓüQ£ê’´V—eÝcih]>U8o¼£x#¨ï\†‰eq¢I´~c­ý´¬2fÜÇŸ@ hZèZÕ¼ë-¼K Ë¥åÈΤ+Ë(h‰ž gÛ½J{üÿ!ö:;iš•×Ù­§“Î*]RX$ˆºŽ¥w¨Ü93Ie¬%î»yc€-¼JÆ)-¥Ž@K0-–YN8+èy®kMѵ_øI4[Ù¬µKx¥RÞ߉²ì€eT9gР­VÔÇŒnoßA¾KYí¢·ÒÛ¥]Éb¤íÙ>ÕvÕѳA¼U£%Ü–Ítþds‹y‘&ÄàgÛµs‘Œžkf¸»½R“Añ ²[f{½Oí.õùÓtg9ÏtõçŠí)t_×A½ÙŸ{¯hútþEö­ck6ysÜ¢6=pNjÍ¥í®¡n·W0ÜÀÄ$2S޼Ž+?RÑ®¯®¼èu‹›EÚ—8úåÑëWtûY,¬Ö n¤ºpI2Ȉ¤þý(@Å¿šê G’ÎÔ]N1¶&”Fü •gizåέáxuk};7‚VÔN:†+÷Èqž•¥{<Öö,’]È1ˆbeVn{ {õ®_ÿۺG‚ÚÓû_í U>TR\E¶fg'‚à óœ{Qѱ«¥k—7ZµÆ•¨iëgy +8Ïç#£3»jrV¬–×2MÅ+ÀÛ%T`J63ƒèkÂð^B÷¨iwq^ÎÜ^\I óXpB;P:Ÿ‰æÖ…yíæ®ÐéÑ[GوΘÍË(˜ð9åïÒŸ‘&ÕQHaEPEPEP%û£ëUŸ­Y—î­V~´ú(¢€#Wx$ˆšEs»å# àäzR›¦ÿŸIÏâŸüU>Š®\ÿË•ÇçÿQe?vÆ|öÜÑøüÇùUÊ(œÕ´w½²û,›÷0ó ‘¹&òùCXòxgPºye»º/3F‰ÇjSiWÞ ŽyÕØ7s|öÑÌaXãW, rHïô©?³fÿ •ÏýòŸüMqË Í'%-ý UM,ÑÃ\è:¤µÒ n/þÔ'S ¸U& »ŒŒµžj²èºå¥­µÄV³6¡ºs H‘”,»_n„ãžµè_Ù³ÐJçþùOþ&ìÙ¿è%sÿ|§ÿI`Õ­À=©ÇXE©éšu­‘ѯ®‘HŒaXàgœÒœ¾»ò.¬ÚG6aòLz$œ>qŒ“Ûñ®¿û6oú \ÿß)ÿÄÑý›7ý®ï”ÿâj^^éUhâäðÍõÊÈ÷7O%ÎÔH¤[mª8Êç’Hä~"xnégEidk8ç7 ‘ƒ¼’ylýÜ’qÆ»ìÙ¿è%sÿ|§ÿGölßô¹ÿ¾Sÿ‰§õ.œß‚käpëá;Ï$Û½Ë4)k-¬#ìÄ2+ã–;¾l`vgSðÓê k'•–Ý qkç#Œü¤Žxƒ]ölßô¹ÿ¾Sÿ‰£û6oú \ÿß)ÿÄÑõ'{ó~Aí|Ž2ëÃ7n޶’ a5°¶™E®P¨Î €FÓóQNŸJÔÚþÊ?&Ymá”J$( •Û×$’sœb»ìÙ¿è%sÿ|§ÿGölßô¹ÿ¾Sÿ‰¥õ.òü{_#€µð¶¡&‘ Z—˜þU«E¼Qd,¸9lǰè)öZgˆšyî¦â•Ä)h•[b¹.H ãHëø ï?³fÿ •ÏýòŸüMÙ³ÐJçþùOþ&©á/{¿À^Ðç5 6þò&d·Gd+ g ÿtç }ðiŸØn³iæ8äHl•‚E哜®Ðsì3ù×Mý›7ý®ï”ÿâhþÍ›þ‚W?÷Êñ5šÀ$¬¤W¶¿C“:.¤5™/’XʰT %«3"ª­¼“Îqé×[x~æÛQ7ÂIZiK}£1H¿ÂÏxñõ®³û6oú \ÿß)ÿÄÑý›7ý®ï”ÿâj¾£Ó›ðBöÞG'.xl/­á–Hžêc'™ä“´epìÎGZ‘4ÍZ=<[Ç,1:â²`ª˜è¹çß8ö®£û6oú \ÿß)ÿÄÑý›7ý®ï”ÿâi}AZÜß‚¶Öö8ÿøF®-ãµû’Ã5ººy’ÂdÞå‰äg54žè‘i±yÈ! ²Fw*AŽã#‘]Wölßô¹ÿ¾Sÿ‰£û6oú \ÿß)ÿÄÓú÷Ÿà/käs:~qhn$œ¦¸—Ìr°Pp “Žž¦ªGá»Áp<ÙÙíRåîR·*ÛÉ$e²r=€®Çû6oú \ÿß)ÿÄÑý›7ý®ï”ÿâhú^oÈ=·K}—‡otùmž ›ÀJ­nO˜’çå<ŸZ]SÃ×—ÒÎðLÐ}¢ßìó·/•çr0~cë]ölßô¹ÿ¾Sÿ‰£û6oú \ÿß)ÿÄÑõ-y¹µôAíºXä¤ðìÒ%ÒîyóÅ7ú£òìÙÇ^s³õªóxZêâò[‰$T.TâR›¶È® üÇqùqž:ší³fÿ •ÏýòŸüMÙ³ÐJçþùOþ&…‚¶Òü¿®ítµŽ W¼1­´É§As%À2F¹ËàÄ‘–<Z¶|*ïgkk+JÑÃi%«b" Û϶6û×eý›7ý®ï”ÿâhþÍ›þ‚W?÷Êñ4Þÿkúþ˜{]ocŠ‡Â’Ge,\ÈY&µ±Pä;¹úU¿ÅqŠ®ãºuyÅ¿ÌË@yL|¤œqï]Wölßô¹ÿ¾Sÿ‰¬ >6‡ÇZ„m#HE¸ùÛЪ6œüÊŒñ÷G&œºÖ”×ÿ`]NÌÞgg¯™ŸM¹Íq–Ú]êÚXȶÁ¾ q[ygtyepg'·Qq¤\6…ª8Ó¥7c^ÂD'~ß9>uã8ÛžGlÓJÿ×§ùþ-?¯_ò:½WÄZ~‹¨YZßͺ݉ Í,Šˆ»à’zœñW§§˜$œ_[cqÉæ®ÕcŒ)9àò8÷ƒâA%·ˆtMM¬®n­`Ç(·€ÌÊ]WiÚ2qòžk\ÐoµMfëM··ž=7UT½y¶•HˆWiô%„GÆ•ÿ¯ëÈê]BÊÜÌ&¼·ŒÀ¡å*-Np['€py>”ëKË[ûqqgs Ä-ÒH\:ŸÄq^zš~§{c½¨éW $šŒs]Xùy“É kò½†Ëã¾k¢ðÄ6¯­j1ÙMecvñy0͉™•pï°ò¹àsÉÅ;_p8µËe¶º¸Ô&´³†—€H×hTã¦OIþéäSâ×ôiå†(µ{ $ŸýR%Ê'û£<þÈf]ºÆ¯c9_øIÚr GW??O»ïÒ£¿Ðä]/ÄâßKq+j‘Mm²¸åÉÈÎîG½%­¿®ßçø èôþ·ÿ#¸—VÓ`¾Ku Hï-Þe6zas“I{«éšk¢_j6–®ÿqgP·Ó'šàü\š½õÞ¡lÐ_€³Bl£¶Óđʠ©,Òí%H;»®1ß4ï)Ó¿á.’ûL¹¯m³kw¹•[v–s “Î:æ•ýÛ-lww®i40Üê°Ë7ú¤’eV“ýÐO?…,š® òXËj—÷-Úe7Ñs“^ss£L÷×é¨k‹MBocb— È# T±Fd äõœõ­‡†}/Å)ý•õÃÜOÞ-Í‘1 ʳà@ŒœžÂªÚØ”î®ok!‡FÕôËk©-ය™'ž@6G'ŽsZêš|6+}-ý¬vmŒ\4Ê#9éógÏø|¯hWÒé÷7v¶þx“ȶiÊPíPOãYE«éú#=µ•Í¥¥æ«$Æ(íDÓ[[°àˆ°@%†qƒÝ)tþ»”vÏ«é±X-üš¢Y¿Ý¸i”F~œR¦«§=¿KûV³&àL¦1ÿÎ+Ó´»³¥XÆÖ—’Gÿ œyö¦6òˆ?;&Ñ´dúÍK¤\ŪßÌš\ÓiÐjðÝ=´qq2y3"ô|9ÜzÑý~_çø úüÿËñ:]3ÅzŽ£¨Ä·V†ÖÞX¢‚t˜™s€s‚sÀµÞþÊ%¸i.àAmƒ9iò²27sòñÏ5à 2mVÛÅ3ÙX\Zù²Áqd&¶hY¤‰VýåÇãTSIÕï/#’[”‹ÄR¬·ÊêÑ–)7*·÷I õ¦µvþ¿­Ã¥Îî rÛì·W7ÓZZAÃCæ5Ú2ž“ýÓÈ«jÚl6 .¡h–o· 2ˆÛ=0ÙÅqO§mÓï$º‡R‚hõ¹î-d·²iÈ$¦Ó¹'ŸÈŠP‡Y½ƒÃÚ¥í­Ý°fYÒÆÑdxÙˆþK«c € ]ßZ]>ïÈ:ýÿ™èPÍÄ)4¤±8ʺ0eaêëO¬_ ØC§èQÅ]˜ÞG” ¸„N 1$lmÉ­mS`Œ_ÿȱyÿÿÐÖ¸ßù‰Ú׬_ú®ËÅ¿ò,^À?ô5®7þbvŸõëþ€+™¼?Eù³­ÿº/ñ?ÉÞþ©kF³´ïõKZ5Ðr »\¿ˆ?Ô?Òº‡ûµËøƒýCý(/Ç¥ßûÃùµuõÈx þ=.ÿÞÍ«¯ Š( Š( Š( Š( Š( Š( Š( Š( Š( K÷GÖ«?Z³/ÝZ¬ýhôQEQEQEWµÿÍÏýpù½hÖu¯ü†në„ÍëF€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ å-¿ä j_õî¿Ê:êë”¶ÿ’©׺ÿ(ëž¾ðõý×…Ú§ø_æËÈ-ï,䳺YLR}ጇï)tìiö‚ÖÆÒ+[X|¨"P‘¢ŽÔÙx?…`[xŽÒ-ÒûP»„µÁ*†Ú)˜A<*`¹àzWAÈtÿiOF£í)èÕÎM®Á5¶ŸsawnÐÝ],;¤G;³œ¨î·ÅÀç4ÂS£hvDÂo#˜\'™ýÝûvçÛ4Ñý¥=´§£W5«ø‚=TÓífŠFŠée%ãäeÚ0¨ 9ÍNþ Ò㵸¹’ëdVÒ¬3G8À Œÿþt½ö”ôj>ÒžXWzö™b÷ st#kp†AµŽ7çh“ƒÀÉ©´íVËV…å²›ÌTmŽ ”doFVƒõ¯ö”ôj>Òž\ÂxŠÚÚÖæãPº‹b^½ªyÈÇ#¢•Á%½p1éIŒtåHÒõ²î#ËA"…rp‰\)Ïcƒ@=£í)èÕ‘¡èÚÙ¹¼¶šW8܆ymŽ™Œ6ӸІó^Ó¬/RÒêgŠG*¡šÙ–àøÚ3îj=GĺN“;AytVEMî©ɱ}[h;G×yÐ ˜ÀÀVü©~Òž\õ߉´{–+‹À¬U\‘0En…È ?íb¥:îý§ýœ&w¹)ÂìªHÈ ÀmSŽy4¹ö”ôj>Òž\íýýÄ$Ò,£` ¹YÌ£ªç·Zu¿‰4›«ñeØy‰e_ݰW+÷‚¹X@MtiOF£í)èÕç–þ6»}&ïV’(šÈÙn¶³+d ü®ps…ÖC©Úͧ½ðiÝ34мdÔí`éGK‡[ÿiOF£í)èÕËŸ[]Gg-…ˆæºHI¸¶•7†á2£“ŽJ–çÅ=¥ëZKv|åuöÄì¨Ç¢³TGÐGö”ôj>Òž\n•âËi/¯,µ .u¿’ÞÂÁ »ñ·>ÙÍ\ÑüE©ywhÑKð\KÄNPªg~ݹ>™¡jMΛí)èÔ}¥=ªQ@|U:¿†îÔ“³¯ûë\—üÄí?ëÖ/ýWKâoù®¿àú®kþbvŸõëþ€+¼?Eù³­ÿº/ñ?ÉÞþ©kF³´ïõKZ5Ðr »\¿ˆ?Ô?Òº‡ûµËøƒýCý(/Ç¥ßûÃùµuõÈx þ=.ÿÞÍ«¯ Š( Š( Š( Š( Š( Š( Š( Š( Š( K÷GÖ«?Z³/ÝZ¬ýhwûQ¿Ú™E!ßíFÿjeýþÔoö¦Q@ x·KæÇ$É¥“CE&Ëùÿ¹ü£ÿâ*J(=—óÿsùGÿÄQ²ãþî(ÿøŠ’ŠeÇüÿÜþQÿñl¸ÿŸûŸÊ?þ"¤¢€#Ùqÿ?÷?”üE.?çþçòÿˆ©( ö\ÏýÏåÿFËùÿ¹ü£ÿâ*J(=—óÿsùGÿÄQ²ãþî(ÿøŠ’ŠeÇüÿÜþQÿñl¸ÿŸûŸÊ?þ"¤¢€#Ùqÿ?÷?”üE.?çþçòÿˆ©( ö\ÏýÏåÿFËùÿ¹ü£ÿâ*J(=—óÿsùGÿÄQ²ãþî(ÿøŠ’ŠeÇüÿÜþQÿñl¸ÿŸûŸÊ?þ"¤¢€#Ùqÿ?÷?”üE.?çþçòÿˆ©( ö\ÏýÏåÿFËùÿ¹ü£ÿâ*J(=—óÿsùGÿÄQ²ãþî(ÿøŠ’ŠeÇüÿÜþQÿñl¸ÿŸûŸÊ?þ"¤¢€#Ùqÿ?÷?”üE>%”1ßs4£uÂcëŠZru ®]cFw`ª’ÇW¡Ùß&áÝ^ÎÓíŸg†hÞÜ:£‘²K3Çr85è:}¾£nÐÝEз ¨[¿ ñR%ŠGÇTEUUÀÐSÃE¡jf+iä·Tš]h_Ë È…0F3О„ã¹§M¡ê/¡jVëo™¦Õ…ÌK½yÍFÝœñÀ'k¹û/û¥eÿoô¦¿¯Oò®ÿÖÿærúåµòëV§efo¨•$…$Tl8 ±‚={ÖV­á‹Í[Z‘Z š]ôK5Ð.2“"2¨Ç¼§#û•Þý—ý¿Ò²ÿ·úR·õý}àyí¶ƒ­ }NêÚ95t¿[©m¼Á‡UO,(n™ÇÌ3ÜÖæ‡g{ý©©ê·¶ßdkÃ¥¹p쪀ÌW#'=‰à é¾ËþßéGÙÛý)ßúþ½Ç º¢<¼Ûôךðüëþ¤çæëïÓ¯µ-þ‡¨M¦øŠí²÷wñÍn7¨Ü E“׎UºúWsö_öÿJ>ËþßéIiýz=]ÿ®¿æy߈ô}sQ»¿‹ì÷·1K$FÑ¢¼XáÒCÆXdä1Ψ¨üHn´ˆ|PE´wjî­Â+D|½›YX‚zdc9ÍzGÙÛý*”ÞÓn/òk+I.—f{u.1Ó y¥m,4õ¹ÂIá˵¼ºy´ëÛëKø¢ÊÛj˜Œ#,‰½C:óéZSiº…·ˆ"“H±ºµC,bæf¹F‚hÀå -¿€:rk¶û/û¥eÿoôª¾·%++Ö¯aw>½£ÞA™ >tsà ç®1ÛšÂðÿ†ç±–ÆÖÿM½sdÄÇwý¢Z €@eˆ¾A ãxɯBû/û¥eÿoô¤7©Ã®…¨Ÿ‡I¥ù*·Ñ€â&q‚V]øÈã?Zµy¥Ï«é×·’[_ÚßIo$Ih÷¹Œ’…FUX§9þµ×}—ý¿Ò²ÿ·úPõ¸Ó³¹ÉÝéw’éž…!Ì–—<ãpùP†=yçÒ¹ÍSízm…Î’Ö©,w²KÔs§;§VÚS;·œ‚½?ì¿íþ•I|=¦¥ñ¾[+E»'&qn¢BÞëNþõüïù‘6÷mýuÿ3“›CÔ_BÔ­Öß3M« ˜—zóš»9ã€N:Õý CM¿¿³šÁ´×rÜ¥ÚÊ›pç Îì玘®«ì¿íþ”}—ý¿Ò’Óúôÿ!½¯_ó+QV~ËþßéGÙÛý(Äßò/]À?ô1\×üÄí?ëÖ/ýWWâ›}ž»mÙÆÎßí­rŸó´ÿ¯X¿ô\ëýáú/ÍoýщþHîôïõKZ5§ªZÑ®ƒkýÚåüAþ¡þ•Ô?Ý®_Äêé@x þ=.ÿÞÍ«¯®CÀ_ñéwþðþm]}QEQEQEQEQEQEQEQEQE2_º>µYúÕ™~èúÕgë@ ¢Š) (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š)ÉÖ›NN´b?õf¹»Å…¦JÿmÔ®ïwùQÇ,²m'$¨mªçÓÖ·.om´ë nï'H-ãåäs€;W èÚ—ö‡µ;ÞÚÁ*˜.÷"Éž §…#ƒOúüÄlKâ8.í´Û‹Yîm¼ÝEmeˆÀ¥Ãó˜Ü1ùzu=1œÒŸÙ­ëÂÖ7ëoߨÚðƾH—;pHmÀdœcš©…¯„6²K=»]¶®5+­»‚Úœdàc®3ÏJt¾½“DÔ¬„¶þeΩöÔ%›<Õ|:áOøÓ^ÖßðB^_Öÿð šæ»w¥ëºM¥½”·qÝ$ÆH  æ¡q‚Ì£œóE׌4ëû«¨î"7 o22®íÏ´‚0Ø# ^ÆŸ®išŒú¦›©éfÕ®,üÕ1\³"º¸üÊ `v¬ýGÂjž wÂ,g·òÝrK̨Ȭ8é‡=yùV—õý|€Ð½ñ]…ÕͳGs,Ð4Q„‰d¨œòØ9À½[Òu¨5´"CqmslÁ&·¸P²FHÈÎ ЂEs–žÕ-ô‹iòÚ]n ÑxemÞT„/–ñ6cœp}kkDÒ¯m¯õ SR{¶^˜ÔÇnIŽ4@B€HžI'ŸõùÁN?Çgis4ßm¾sª=”QG jû» ù€ `üÄ‚{ÓcñÕ›2iš¤E8·¸–XT-¼„€á‰î9ŽG5ø^ôlýí¿Ë®6¢~fÿVsÇO½ÏNžô·Þ½¹Óõût–Ü6£{Ä$±Âªˆó»ŽÈzgµ%ÒÿÖßð~á½ôþ·ÿ€jjž!H¸Uº°¾û)dV¼DC8ù·u#½ê¾«âëM.âê!e}yö8Ä—Om•HÏÌY‡8ç'‡¯ø+PÕ5+ù–=6ánd⹺‘Ķ¡våP#)=GÞ9ª>,¸}.oÙÙÞéòÉªÄ YÊÎ.CÏݪ©ß¦ .žc[MçŒ,m\Zß\EoÉs4Kua‘¿$œ *Ä>#†ëV’ÂÒÊòàDÊ’ÜÆ©åFYC ’ÀžèZç$ðL£Q’ñtÍP[¨â2. ¤<.¨í![ ã8ãšÑ½ðíüþ!¶¼´ƒO²Ž c&ê \M$J9(V§$àUu!6ÕËzæ»w¥ëºM¥½”·qÝ$ÆH  æ¡q‚Ì£œóKâÛK‰á6Wóý™K·‚ ËlÏÏórqοחü×ãÿд×ï%ñN©¦5„ÒÛÛ¼j“Äla£ wå<žÀÕ-Æ/‡m¯µ=:íe˜„ˆÄˆEÌ„5OAüXéWáÒµK^ÝÚýŽK ó›ÍvYc(»NÐ R+&ßÃí¾af²éÙÒgó¬¥ÞçÍûÃl‹·åùXò æ’ÿ/ø kŸئ—}y5µä2X²¤ö’FÊ[xÎ9 âªÉã›xZåeÑu„{E\©… …!Îp~îOŠ‚ëÂÚ¦¡a¬Ku-¢ê:‹ÁòFÍåD‘0 n#$Ÿ›œ¢¯ÞèW7úìé$!5 =-bœ‡L–ã§Î:g½'t¯ýl5b_J“øJæXØ4n±²°î ©¹ù‰Z׬_ú®£[¶{?}–B¥á†دBC(8®_þbVŸõëþ€+e‰víú³¥_êjÿÌÿ$wzwú¥­ÎÓ¿Õ-hÖç(×ûµËøƒýCý+¨»\¿ˆ?Ô?Ò€"ðüz]ÿ¼?›W_\‡€¿ãÒïýáüÚºú(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šd¿t}j³õ«2ýÑõªÏÖ€ERQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQES“­6œhÆf€¯4ŸiE¨æëøW!¦ø†UÑ´˜l­&¼½¼Y#¸ºÉUFù™ä+îã½1ŸÚ_ÑhûKú-rëâö =ž›{…ÕÒxR}»H:ãg#¥+x²å'šGÒ‡öt7¿b{s— ¸.í›zdŽô%ëÓüÁéýzÿ‘×}¥ý´¿¢Ö&»«¾j“"Ù̓ö»Án½;OµT¸ÕSWðÞ§´k5Œ®yS´ƒÈ÷i7dßa¥v—s¦ûKú-iE®*ÛW{£º]KähirQ%ʶ={½š]K_ÔeðtúœÛA!x|–·º+uÚ1× SVvþ·±)Ý]®vŸiE£í/èµ’u lô‰¯õH#¶0#I"C)”<«“øV}ˆ®¥½´·Ô4³d/QžÕÄâMØаmlsÜuæÎ›í/è´}¥ý¸ÏFòØêwÆWû@b®×®ê~sÀˆ¨TÆ;Ul¯ *w½ÁóÒþ‹\Œ07÷vPiöq¿Ú­’ç77"µ‰A´ï#=;V†½uögÒ36þ8ÿu6Ρ¾÷rñӌӶ¿‡è'ñDìþ»RÏý k•ÿ˜•§ý{Eÿ  ±ªë—Ú…–¡ih¶1\›f¹ûOÌìÛÐ^õ_þbVŸõíþ€+™ä¿S­ÿº¯ñ?ÉÞþ©kF³´ïõKZ5Ðr »\¿ˆ?Ô?Òº‡ûµËøƒýCý(/Ç¥ßûÃùµuõÈx þ=.ÿÞÍ«¯ Š( Š( Š( Š( Š( Š( Š( Š( Š( K÷GÖ«?Z–ì$€29.T~b«!5 ‚=C–}M:Š(¤0¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(§'Zm5ȱ$ê\¨ëê(-Fålíd¸hæ"ýÈc29ç(ä×)¤øróûE™.Ÿ©ÚFà‹Ì\ä£.G·q‚+·¶Ž9! pÞáËÎ¥ò#þïêiˆäcð°K{`×­%Âjþyš1ûçÁÊ1€:ãédðÇ™¥ÞÙ}³i¿ûfÿ+îþñ_n3ÏÝÆ}úW[äGýßÔÑäGýßÔп¯Oò@õßúßüÙÌkÚ†£i¨ZÝÇͲ^7üÝyûý8éY×~š^mu¢g°KŒÖžnUA_˜<žçµvþDÝýMDÝýM+_ù…ÿ¯»ü‘çú­œÚ=Í´š|×ÂäY-«˜´æ¹IU~îpFÆÎy'Ó´¯ ß[iÚdðÞ%ž¡’[Ü$° ‘€9†$ò wÞDÝýMDÝýM?ëóÿ1[úþ½CYðåÞµo¬Ú…ºÛ]ÿè@Èudmß!?CŠÑÔô¿í#`|ï/ì—Iq÷woÚÇ^:õ­ï"?îþ¦"?îþ¦œ^£¥fxwTw™çÝ›Ÿ»»œ|½yÇ­eÿÌJÓþ½¢ÿÐuþ+‰ÃWd.Éßýµ®CþbVŸõíþ€µÎ¿ŽýÖÿÝWøŸäŽïNÿTµ£YÚwú¥­è9¿Ý®_Äêé]CýÚåüAþ¡þ”€¿ãÒïýáüÚºúä<ÿ—ïæÕ×ÐEPEPEPEPEPEPEPEPEP%û£ëUŸïU™~èúÕgë@ ¢Š) (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š)É÷©´äë@ý[W£kW‡EÐtí"ÖÊÞæò9¥&@í(ƒ…ݸ’X­u÷3Moa,¶ö¯u2ýØQ•Kþ,@‰¬ 3ÂXðæ‘ow<öš’±Yí$£/’Ë’#œƒÒŸõùˆ§6·-ôZr_YÛËmqlåÁbÀ$:rB89ÆOZWñ>µ]_´v ¦[jax‚8›nð›ÃnÆrÀã³…l!µ´d¸&Þð^™YÁyeç%Éç=±Û¥9ü1e&Ÿwde¸òîo>Øä2ä>ðøtÊzkÏúÛþKËúßþ‰u™4¸íÒÚòÖ™KŽkYnÀá#;½2z ¨ú³kŸ .µ'ŒFóéóAœÆyÆEjjš ZݽâÞ]Ù]À¬‰5«(%[RXÀíÚg¡ZYx|hªe’×Êh˜ÈÃsÎr@¦¥«Å®£NÒLæ­/¥´»­4øînâðìrÇÛä ðqŒûgÞ ÔµËÝCÀ÷× ©Y½ÒMâÖ)!hI‘2²+1lþYÑÛxbÞЫÅ}}ç-±YK®å@ă÷~ðéŸn•ð}”–º„Www·rߪ,×:‰NSnÕ`óÒ®NîÿÖí’•’þº"ä÷×Z?‡î¯õG†â[hžVû4f5`@™Žֵ̲˜5-6ßWŠÄÇ©Ææj]W~ÖÜNî3ÈÇ#¥lÛéHšd–w7ñÊdk¢¥™HÁhöª:w…­tûÈnZòúí­ã1[-Ô¡„ x!p8däã½O_ëúì>†7ÃÝ6Q§bàY¼·Šå¦HXNÇyÎ÷,w:)‘k7vv— ¦ÛÙC=ο%žéÙ9Î\Ù'ŽÄjë42KƒO·i(A d ±É'œëTG…ì†ßÞÜ|º‰ÔGÌ¿ëxé÷yé×Þž—òÿ‚¿@{>ÿð€Þ'ñ¬W×7Qéo›x–·)r1O l/89èy«#ñ|Ú6¢ËoqiCØuªú³«i~ƒR¹–ÞóÌTŽÖ2Œ®dy61ËŒ‘Ð é ðÅ•½Ž—f²ÜôÙüøIeË6a¸ä|ç¦;Tx>Æ>çNk«Ùl&%´’ °|ÛB0 ôÉ8£¿õ uþ¿®Â隦¨šóhúºÚ<Ímö˜f´VU*k)V$ä9Ï9íY¾#ñ|Ú6¢Ëoqi­{¤XÁ5œi‡˜$ÓÉÊ–é‚w²¦ uÏ5Dß‹oÃ21±¼yâ¸auí£ >çÌF|æ·u /áHãÔ.ì™[;튵YúÕ™~èúÕgë@ ¢Š) (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š)ÉÖ›NN´’;)áˆìj.ÒêšÞáe‰¾ëÆû”ý©&ëøW ¥jz柠iö÷If÷‘O,·À™Qq´ŸNÔÄvòÞ$15ÂÇæ8DÞøÜÇ ê}ªO1ÿ¾ßqW½–+8.dŠi­õÁfóù+‰Tw`‚¹‘ŽAÅ2MWY/uQ©–‚ÛUû/ØÌ)±£ó>ö7gæÎsÚšWþ½?Ì›ÿ[ÿ‘Ýyýöüèóûíù×=â;ù¡’ÚÊÊ{ô½”4Š–PÅ#\O™ò€ óF“®4þ ‹XÔdò˜@Ï3ªt+NÞyã8¥}¶:1ÿ¾ßcÿ}¿:àí5í^5Xg{Æé­yn÷ÐDŽdt‚½:ŒÒ¶·«è°Áqs|u¹Òå» $(†9U° •;»óÇZšÿ]ɇõù™ÚÉWPÛ=ÆÙ¦ cBNX/_Ë"·ÇöÓgöô›åäçnqŸÎ¸ëxo×Å>žûT7¦{yÜ%P•Rví#žùéSê·—^\w¨¥Õ5mZò³ÔOVÒVûb—'¡Ü ÇÓ¯¥ÿ­›ýß×Ýþgkæ?÷Ûó£Ìï·ç\^‰ªêÆëC’îÿí0êÖ+DТ\*°ÚTdŽHç5«k1éú>­q©ý¦+û¥·’ÕáE Š‚…@9Ï9ã5VÖß×a_K›ÚíüW¾¿ò'óRŸáÕ×#ð®þbVõíþ€µVkæµÑïíÕ7 ½nâ&oî—þj*×üÄlÿëÚ/ýk™;×ÿ·Wù[ ¿ÄÿC»Ó¿Õ-hÖvþ©kFºA¯÷k—ñú‡úWPÿv¹¨¥Eà/øô»ÿx6®¾¹Ç¥ßûÃùµuôQEQEQEQEQEQEQEQEQEÉ~èúÕgëVeû£ëUŸ­6Š(¤0¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(§'Zm9:ÐmDÝ i>ĽÎß‘fr©œ÷ úV-—…íÃÖn ¢wµÆÍW9ÉVRu=úWWO½Gc}o¨ÙÇwjåà“%X©\àã¡ö¦#= LŠÖÖÚ;UXmeÄ¡ˆÃŒüÄç$òzç4­¡éÏk5³[æçûL‹½¾i7Ýœú€qÒ¶n¯­ìŒâB†yD1áIËœàp8èyl¯!$û±&·( ^ËÃFyÕ­³¤‘ƒ<Œ±†ëµK_ÀTÚŽ‡§j²Ç-Ü ÒÆI#•ãpQ¹8ö®ŠŠåï<1£ß̲ÜÙïp‚2DŽ¡ÔtÃ÷³W›hoïÉsAörÁˆýÞs·ÇZÑ•¹ÕÛL¾Ò° ‚1ÆÂÅzúäUº:ÏÅ£X@,|¨6ý†3·ÎÇby๬ø>ÏH¶´’æ’þ ÇÌ»¢±'•V8¨»z(¸t±Ækº]•¦¨Ï$žDšC’A}Ànð œc5ÿ1?úö‹ÿ@Zì|[ÿ"ÅçüÿCZã¿æ#gÿ^Ñè \ëøïÑ~lëî«üOòGu§ªZѬí;ýRÖtƒ_î×/âõô®¡þírþ ÿPÿJ‹À_ñéwþðþm]}rÿK¿÷‡ójë袊(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(’ýÑõªÏÖ¬Ë÷GÖ«?ZmQHaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPNN´Úru  ÿ«5çº}õÕþŸá‹;íRêÞÚî;‡šán I+£|©æg#‚O'mw7K<–2ÇiuµÃ}ÉdÌ ÿÈÏçU,t-6×ÃöÚ=ÂC{o €EÂ+‡=I ñÔšb9kmRõ­,c[ùç‚/ H®|úx@<3¾3‘žûje¼ŠÛQÖ×S¿ûE¶·öuˆÜ±„Åæªl1“·cÛ5Þ‹K ‹{a Ø»c#¡QØjCg§´RDm­LrIæº× ùÎâ;œ€s×"šÓúôÿ'÷ƒ×úõÿ?ÀæüQoosâßGuq5¼E.‡™ÃBÙÚ„ ÊAìxÍcë·º­µæ¥ é÷·êêHï,d2³BΠç8Ý?í§½w—¶z~¥†úÚÖê wž5uל-ì–hæÛ‰bCnw"| ö=©_¯çøçï®\êØÔcÔn-tBþ1*HWËc%ŠŸá-!Û»¯ÑxbyWÖ´èïf½±´x¼™¦”ÊÊ̹dÞylpyäf·–œ,Mˆµµ„`ò×Ë99?/N¼Ó­-ì¬-Žœ6öð¯HáUE€âŸõù_1%­Ô°a ã/â§ŽPŽFå9;[¿§Í5‡ŠÍ¾§ssq-ì³}’h¯KÀTdìhrQŒàò:×RltÓ3Lm- ­ ”¿–»‹€Ùõði–ú^“iv÷vÖ6PÜÉóG +¶zå€É¥ÒßÖÉ~ƒz»ÿ[·úœG‡ìþÅý—ªI ü¨¬·Îq'ÌŠ2DdŒŒÆk¦ð½ôW:EÂ@—bkYž)cº¹3°p$$îŒsW[DÐÜÎ[KÓ˜ÜÌMº7œüÜsÏ<Õ«[{+ u·³†ÞÞé*Gà8¡ë08 ϯjSéÚ›^ÇûÉíˆú“>ეl œt=¹ÎhÑå¾¶±ð欺•üóßÝ<OrÒF଄aIÂPtÅw)¦i1ß›ô±²[ÆÎn$õù±š‘lôôŠ’ÚÕc·ÂÛžTv<žG© ;žuk‹ë j³ê·W7óêiöˆà”°ùQEÛŒtÍt>(··¹ño‡£º¸šÞ"—CÌŠá¡líBå ö¸4ï§õÚÁÖç©\ù÷ž {vêÄé‘!²HîJ¾Xa#ùi–Èç=1Zšö¯©Ûü;MI‘}$0[îù[ʇ=ÜyÁÇ^Õ»>™¤ÜÉ—6R¼ZH‘Œ`tÚHãð«nb‘£# lE.–þ¿§Ô:ÿ_Ö‡]méþÕåþÐ)lé“åêu,ldˆªOOn*MbêûÃÓjöš•ë[ýšÚo6âc3Û”¤Œ¬Ù8 3ÏNµÚC£h¶ÐKnŸ2d EW äÁÁ«-›Ló4P]<·r£s'?)=Ç'z¡Éèv–ö~>¸Kkë‹ÈÛK¼ÉîLçýctbOñ]¥P²Ó41¬,l­þù‚$Œ·×š»æ'÷×ó§Ñ!uoúØuß1?¾¿b}:C1ü[ÿ"ÅçüÿCZã¿æ#gÿ^Ñè ]‹O†o`OÉßýµ®Cþb6õíþ€µÎ¿Þ¢üÙÖÿÝøŸäŽëNÿTµ£YÚwú¥­è9¿Ý®_Äêé]CýÚåüAþ¡þ”€¿ãÒïýáüÚºúä<ÿ—ïæÕ×ÐEPEPEPEPEPEPEPEPEP%û£ëUŸ­Y—î­V~´Ú(¢ÂŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( œi´äë@ —ï~VÊçí–‘Ü&ƒ~w:íuçг7¥y•§Ù±<5ý±ÿ ]“ùÛóåy»¾O3Û±ž3LG¡ÜÝcû<óy²ˆÿt¹ÙŸânx^:ÕŠóËmß`Ó<¿3ìÛãì>fsäàãçnwcÛÖ6Ée©ë)]Fsj\Ž/œ‹·>˜$bšWþ½?̟ׯùü×öð_ÛY;=ÈvqÔ.3Ïâ*Ír.Mî‡>³-§(®1«•]¹Ï¡Åcë6“˨^è:vR-SËÔ ‘Ê¡Ÿüy"ÿ¾©_úþ¼µÑè¯4iέgý¿w©¦ÞßEÒàŒ[Æ„|ØçošN}«¢ð—ÙþÝ«eÈ|fÛŸ/~ßÞlÏðç8ÎiÛúû€Ò´×EØ¥Ãl¾k3倨ÛümÓ Zäàf¼ñDënN&Äå™ Tý©ô—±´ñ”@lõ)îe˜µÌyûE·RVN£oðƒÇn)t_×DÿPz7ýuävz}ý¾§cí«‚Q”$c#8éVkÍ4«}¼-™º´Óµ ·Îé†dû²ô%IàóÐ×CácO‹HEû=µœoxma6ŠÍ îFw'=xàóOw luTWãÒÆ»¡.µäý€‰÷‰þæv®3Y?kH|2bx “HŸSxífÔž(`ÆUˆà•Ü\‘ÔsKúül3¿¹º6Æöyæóeþés³?ÄÜð¼u«æºSçGÓfŠXcñÈZù{>b6dŸ—“ŽMiiþ²Ö,¼Fïo½šîæ¸#.£°Ï 8£¥ÿ®Ÿæ.¿×ŸùÅW†èËuqÙçO$¨óp’dgå9ç y›jº”àëk¡ï þÇHñ÷fÚ0ß÷ðÈ? Ñ}:ÒÞ/iò_Gem²ŒK ù0¨¸Vä|§<Ž´_×ÊÏæ úþ¾ÿ¸ô:+Ínn~Óá(ÒÖÒÏO‹QòîžÝKi#ÇßÀÚLeŠçžÝÅt¾ ·† ¦µÔm.ídŸtkgH¡8U›Žýq’hïývÿ1-Q@Š(  ŸȽuÿÿÐÅsó³ÿ¯h¿ô®“Äßò/]À?ô1\ßüÄlÿëÚ/ýk¼?Eù³­ÿº/ñ?ÉÖþ©kF³´ïõKZ5Ðr »\¿ˆ?Ô?Òº‡ûµËøƒýCý(/Ç¥ßûÃùµuõÈx þ=.ÿÞÍ«¯ Š( Š( Š( Š( Š( Š( Š( Š( Š( K÷GÖ«?Z³/ÝZ¬ýh´QE!…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@9:ÓiÉÖ€!¾²–úÖHcžkrãl%C¯Óp#ô¨ôí%4½> hȆ»›'êO­iG­gÚëvÇE‹RÔ&´²ó–7Hу’8“€zS?‘'÷QG‘'÷QLºÕ8¬e¶6÷]N± >Ъ6œüÊŒñ÷G&œºÖ”×ÿ`]NÌÞgg¯™ŸM¹Í/‘'÷QG‘'÷QUµ_iú.¡ek4vëv$+4²*"ì‚IêsÅ\žž`’q}laÄo'š»UŽ0¤çƒÈãÜP<‰?»úŠ<‰?»úŠ’]BÊÜÌ&¼·ŒÀ¡å*-Np['€py>”ëKË[ûqqgs Ä-ÒH\:ŸÄq@ùwõywõšþËÛI«Ø%Äyß\ eÇ\ŒäT±jÚlö/}¡k%šguÂL¦5Ç\¶p(<‰?»úŠ‚ãKK©måšïo'™-÷[gç‚zÔwþ&Ó,ô)uˆ®b»´•YíåV\– ×8ã<ÔÍâ-íµ=mФÆå1@làš‚ãF[NÎýüÁ- q 6àŸÊ®ywõË]Mn.ï£>BÁl–U¸VÜwe”}ÏǨæ¡}~ÎU¶}:æÊõ%¹[wd¼@ ž:în>èäÑäeŸ"Oîþ¢"Oîþ¢œÚ¦ž—ë`÷ö«xÃ+nfQ!˜К®-ûXGj÷‹Ë[¬ÊdUÎh¾DŸÝýEDŸÝýEW¬‡Åo¤ùiå-¹ßÎì—+§!×´³ky<Ö÷"ÍçX%WdràñÞ‹ép¶¶$ò$þïê(ò$þïê+³ñí¬–^Þ (-縎hoÒ_+r–̧!tÉ®›ûBËì"ûí–ÿc+¸\yƒËÇ®ìã5`#ò$þïê(ò$þïê*õËk«Ë(ìf´»·¹ó3-ÿ‘bóþÿ¡­qßó³ÿ¯h¿ô®uþðýæÎ·þè¿Äÿ$wZwú¥­ÎÓ¿Õ-h×AÈ5þírþ ÿPÿJêî×/âõô ¼ÿ—ïæÕ××!à/øô»ÿx6®¾€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€/ÝZ¬ýjÌ¿t}j³õ ÑE†QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEäëM§'Z°ŸêÚ¼çG…âÒ<+©Íc=í…´w $pÄehÝ›å}ƒ“ÀaÀã5ÝÞAoyg%ÒÊb“ïäd8ÿyH#§cO´¶6‘ZÚÃåA„p v¦#жÒïVÒÆE°ž%ñ»ŠÛË; „ƒË(ûƒ98íº‹"á´-QÆ)»ðž!;öùÉó¯ÆÜò;f»¿´§£Qö”ôjiÛúôÿ zÿ^¿æs¾$[x‡DÔÚÊæêÖŸ4ÓIsö»Ç'rJ@Þ»sÁë]ÚSѨûJz5 K_ÖÀõ¹Éø‚ÃP¸ñ úÚC07š+ÛC:©Ø²†' ßÃF3X¶:A—M¹pšÐ¾·Òf·[yôô…åÆÀÉïä `šôo´§£Qö”ôjVÒß×_óõ¿õÓüŽOT²šxre°š_±Oo-Ä1BZ@¡ ŸrH'§ZgˆtûíCÃw—0\êÃq嘴é- cÍC÷BàÔô®¿í)èÔ}¥=©»»ùÜ”¬’0uKOŠt'¶·eŠ8îƒÈ‘ü±–E$p2k”²Í|+¥O¥Ý[jjí½¹ +l“,$èûºðkÒ~ÒžYše~·±[Ln;Yä—fzí Ä/áŠ]¯Q½UŽkMÑî Ñ|"ãO–;¨o[Î>I2ËÜdòõö­Ÿ³Úè°éWv×vŠVV–Ý•æ?uñ†õà×Gö”ôj>ÒžNûƒîeø·þE‹Ïøþ†µÇÌFÏþ½¢ÿкÏN¯á»µäìëþú×'ÿ1 ?úö‹ÿ@Zæÿ˜‡è¿6u¿÷Eþ'ù#ºÓ¿Õ-hÖvþ©kFºA¯÷k—ñú‡úWPÿv¹¨¥Eà/øô»ÿx6®¾¹Ç¥ßûÃùµuôQEQEQEQEQEQEQEQEQEÉ~èúÕgëVeû£ëUŸ­6Š(¤0¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(§'Zm9:Ðeàþmâ;H´KKíBîתh¤>að©‚çé[—.±£;°U Éc€+‚Ðìï“Gðî¯giöϳÃ4onQŠÈÙ ¥ˆã¹b:YµØ&¶Óîl.íÚ«¥‡tˆçvs•}Öãø¸æ£O[[ZÜÜjQlK×µO"ätR0Io\ zVLZ¦b¶žKuI¥Ö…ü°¬€ˆSc= èN;šUÐõåæß¦¼×‡ç_õ'?7_~}©¯ëÿ%ÿ‚úüà&ŸªÙj¶Ïqe7šˆÅ*Êè*À~¢²tXê:e½ÕÀ–ÚIYc Á&ÀÌÛT+ƒ“ÜqV´» ‹mc\žXöCu\q<…A8¶ƒ´|Vö&£ÿ ê=+ìÿé ®bÞ½¥ ×8éÏZ¹:ž“â FhtÖ½¶¿’9±ÌŠÑ¡H`Ädq‘Œõ§ÖÀËpë¶ñYÞ]_]Ûˆ »{pbGÏpFYÿÝÈ=©ßð“èÿbk&3/“´Bþg™Œíòñ»8çé\õ߆õ)¬ee…Ì‘k^¤)så4±œ•Ôü§#$tæ¥: cHº¨.žäKÿ!k„`»DÚB:qŒôíK§ÝúÁ¿ßúÿÀ:;½V8´ Vi8eWVBÛA8 ŒŽÅU¶ñ>.Œº”òIoÍ‚Dù˜2‚þÛsšd6:¥çƒf±ÔN¡5¼‘$nÈ]ÅxÎÎ8Îk5íu‹­+JvÒLWZTÑÉöy'Œ‹€©ÚA r7cð£«ùEó6“ÄzKé“ê"ïÐ6ÙKFÁñÁB7Èãê]7[Óõf•,ç-$Xó#xÚ7\ô%X|W!®Ú_.‹â ZîÓìÏvöË©‘Y€G,FFI=‰ÀµàÓoµ}rmBþÎm6±ý•Q.Gšä¾âÛ£<ŒsÉ£úü—Qñ,ZOŠ>Ç{+%¡²<¿y 0>•£s¯év–V÷’]©†çAZC'ùUA'AX²iú†‹¯­ÖŸ§ÜêVÿaò{µ.Ì-ó4’9÷¨-4OE‡EºŠÙ/f³IÒ{xä 5·e `|¤cœdQÓúîÁïývF¦¡â«;k >úØý¦Öêè@Z5feá³ò€XWÆiÅVÉ®EbÐÜySZ¬ñÈ-¥-–r¸e •ulVQÑ5XìRôZ+]ÿkÿhµ’J¹ FÝ¡Žv9ôÎjìÑꫯǪ¦“+¥Í¶–%ž0ð0rrrØ#±=(þ¿óý}ÿä3\ñ“y§ÜØÛ݇œ°UÄlʰÜñµˆÁÈôªó³ÿ¯h¿ô¨.lµk/ Ùéwb,{üׂe+ åTªýàNáœß­Oÿ1 ?úö‹ÿ@Zç_ïÑ~lëî‹üOòGu§ªZѬí;ýRÖtƒ_î×/âõô®¡þírþ ÿPÿJ‹À_ñéwþðþm]}rÿK¿÷‡ójë袊(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(’ýÑõªÏÖ¬Ë÷GÖ«?ZmQHaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPNN´Úru Üiöú…»ÃusBÜ4r unüƒÅH–)keQaUWASGþ¬×7c☢дÉ_íº•Ýîÿ*8àE–M¤ä• µ@ãœúzÓÐ}—ý¿Ò²ÿ·úV¾#‚îÛM¸µžæÛÍÔVÖXŒ \?9×§Q“ÓÍ)ñšÞ¼-c~¶ñÝý¯ kä‰s·†ÜHÆ9£úü¿ÌŸ×¯ùeÿoô£ì¿íþ•®k·z^»¤Ú[ÙKwÒLdоaÚ,Ê1ÉÏ4]xÃN±±¿ººŽâ!cp–ó#*îÜûH# ‚0ÀõìhZÿ_ 6>ËþßéGÙÛý+*÷Åv7W6Í̳@ÑF$ e’@J¢sË`dçõoIÖ ÕþЉ ŵͳšÞáBÉ##8$GB kì¿íþ”}—ý¿Ò°#ñžãäsB×úþ»ƒÐè~ËþßéGÙÛý+?Tñ zE­Յ÷ÙK"µâ"±ÀÏÍ»©íïUõ_ZiwQ +ëϱÆ$º{hÔ¬ F~bÌ9Ç88  ²ÿ·úQö_öÿJƼñ…£Ë‹[눭ãY.f‚ Én¬27äƒÓ’X‡ÄpÝjÒXZY^\™R[˜Õ<¨Ë(a’XÁëG¯ÔÑû/û¥eÿoô¬Rîx|]¡[¤ÌL—&T†Ú«Œý2i¶ž.²¼»·‰-¯ §d¶»’0!€' sž@8ÈÇ Øû/û¥eÿoô®ÛÅèðÝÞ» »m̾LRCƒ`˜B§y8ÏßÀÍv˪ªé3jv—‹ 4 Û Tdœ+ÛÖ•Øu°ùôØnb1\,rÆq”‘ƒ‘Á÷©>ËþßéXOâ6»·Ó. CNŽæö(“͆&3«) }óµO¯QéOºñ•µÄ¨¶WóÛÃp¶ÒÝÅùI!`»rX‚@8º]?ÌWëýZeÿoô£ì¿íþ•Éé>+{k«øu+{çƒûVKhï6)†<°„îÜ9ÀéŽzÖ—‡µëÍNòþÞâÂm^M ](AÔl÷·nÿ€â’×î¿åþcz~_Ÿù_eÿoô£ì¿íþ•‘{âý7O´Ôn.Vt[ ”¶•v®K6Üç•ÃÛ¡â£Ô¼EjðiðÍs‘ÞA®£¤žb± ’r8\’FF:е°wâ›}ž»mÙÆÎßí­r¿ó³ÿ¯h¿ô­”ñ.¡u¥x„5Ämh×i äacËhûÛ·ÀqX«<—7ÖSÊXÉ-´NÅú䢓ŸzÍCßöžKõfίº¿ÑÞþ©kF³´ïõKZ5¡ˆ×ûµËøƒýCý+¨»\¿ˆ?Ô?Ò€"ðüz]ÿ¼?›W_\‡€¿ãÒïýáüÚºú(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šd¿t}j³õ«2ýÑõªÏÖ€ERQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQES“­6œhnom´í>k»ÉÒ xÆ^G8·ó5Çh:6¥ýáíNÀ@·¶°J¦ ½È²G#g¨©áHà×dfhøzóIö—ôZb9ȼ-|!µ’YíÚíµq©]mÜpFÔã'qžzS¥ðÅìš&¥d%·ó.uO¶¡,Ø æ«àñ× ƺ´¿¢Ñö—ôZiÛoëoò@õßúßüÙ›®išŒú¦›©éfÕ®,üÕ1\³"º¸üÊ `v¬ýGÂjž wÂ,g·òÝrK̨Ȭ8é‡=yùVº/´¿¢Ñö—ôZV œ­§„5K}"ÚG¼¶—[‚ô^[w•! å…Y5Xk9YÅÂÈcÙûµU;òôÁ®ÿí/è´}¥ý•´°ï­Î:OÊ5/LÑuºŽ#"ê CÂêNÒ²3Ž9­ßßÏâkËH4û(à–2n •ÄÒD£˜Ù…`zrNtiE£í/èµWÖä¥eb†­¤\ÞëzMü ËS*L’ IT€yè:Äð÷ƒDº‚94½X­Ëywê…nHçi#n7v'uu_iE£í/è´†Î}|/v|š ž¼@d1îoàp⦹ðáÕ,.îoôí2=nX$†;ˆK8\¡Qó•¿¥m}¥ý´¿¢Ðõ½ÆŒ«­ ê};@·Y!§ÜA,¤“†¤¼ryïŠãµI%·’ØÞi÷‹>ª“Ußí1æevãäî$q^ö—ôZ>Òþ‹Nþõþ—ùeËoë¯ùœô¾½“DÔ¬„¶þeΩöÔ%›<Õ|:áO·½\ÑtÍSIÔ¯¢?c“M¸¹’ådÞÂe/ÎݸÆ3žsøV¯Ú_ÑhûKú-%§õéþCzÿ^¿æsú·„Tñ!»yclðâæÏ*«¢0í®Z¯aáF ;OWVó_Ç©%åÔ ¶UJ¼uÚ®;×Qö—ôZ>Òþ‹BÓoë[ƒ×ëKòh:Ä0kztmbö:ƒ\K­#‰¤t®Ò0 ëž«{g³Õííd*^R6+Ъ?*ï>Òþ‹\^¬wx¥‰ê@? £m?­úûλNÿTµ£YÚwú¥­kýÚåüAþ¡þ•Ô?Ý®_Äêé@x þ=.ÿÞÍ«¯®CÀ_ñéwþðþm]}QEQEQEQEQEQEQEQEQE2_º>µYúÕ™~èúÕgë@ ¢Š) (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š)ÉÖ›NN´ÉºþÈi¾!•tm&+I¯/oFHî.²UQ¾fy û€8ï]N£r¶v²\4sH~ä1™óŽrk”Ò|9yýƒ¢Ì—OÔí#p Åæ ®rQ—#Û¸Áÿ¯ÌDÒëâö =ž›{…ÕÒxR}»H:ãg#¥+x²å'šGÒ‡öt7¿b{s— ¸.í›zdŽõ<~ olõ¤¸M@_Ï3F?|ø €ùF0\c½,žó4»Û/¶cí7ÿlßå}ßÞ+íÆyû¸Ï¿JjÝ­¿àƒòþ·ÿ€7\Ô5;_èöÚ|qÌ'IÌÉ/–­´. m¬xÉíQj0ež¥-Í–&±¸ŽKêà6àvú=?„Ö†¯£Ïwe{gz-.í „w‡ÍVW ®G ç5^ëÂÑ^ë‘jWÀ·ò¦„&VÃ(sÏãþÔ¿¯ëò;ÏyÓÚ[Ø›™X ƒl¡D²º— œ|¡TO=zUí#W’þ{»K«O²^ÚóbyŠU†U•°2=‡J̶ðpµÑ`´MFC}ÏÚ’ôÆ ß£+žFß—ü«OHÒ$°žîîêïíw·e|ÙD~Z…Q…U\œÏsÖŸõùÁ"=~K;[†·µ–êiuw³'ºãw¨m§jñÂàâxÂú5ž[b‚Òåm®ÝnÃØ•ÁQ´n_™OPyéWG†1·ý3îê‡QÿU럓¯¿_Ò‹¯ }¦ÓWƒí›´nRãw•Ÿ/hA޼ýμu¤º_úÛþ=ôþ·ÿ€3\ñPÐï’)¢³x @ß骳áŽ2"#æëIªx¢âÒ]DXé‚î6=÷R½Ç”Û»j§qÇ=ºÔ:—ƒæ½¹¿hu¢·¿’9fGµ8+·î¾áòŽ=ë3Äöw‰q«[éFû~¥Ya{I¹]¹ä*q€sž”ºyn]Ô¼}mcq4k » xÑçÞ$R|Ê¡röô­oÉ}®É§ÚÚÂÑE°¼’Üì«(mËÓ¹yë‘Þ¢O ]Û]µÍ†£¹#Kl&RÊ¡w)Ü6œëRê¸Ôµkk™ï öÓ,Ñ"Z*íþ3wBzñíU¥ÉW°ÍsPÔí|C£ÛiñÇ0'2C$¾Z¶Ð¸%¶±ã'µž$»Šâò;M$ÝG`ªnÜ\ÚJî*€œÏj·«èóßÝÙ^ÙÞ‹K»BááóU•Æ+‘è9ÍS»ðÕä³Ý½¦®m’ýo[†ÞÁv–CŸ‘ÇzlWQgñ%Ì·°[éj_ lÖósÜù_#>S“õÅY³ñ>•wgi+ÞCm-ØýÜÈ«!lí+Œòw8¬™´mB/Å“qöxt´f{o5ás‘óƒ×ð­ý/G¶ÒôË{$o’ï$³1$–üI&›µ´þµbþ¿rþׯlô]%/ìØîe0%à¸ÞÅË6ÝÉŽ^oêÖò_E.™ažà-ð#Ë SäùÊÜtëV$ð¤—6‚]j>míûÄÒÜvª¬dULð8=ÏZ¹u ý¦ïUŸí;~ßf¶»|¼ùxßóuçïôã¥'¶ƒVêI¨ëIc¤A©$>m¼b[nÄrAÅbêŸò3Ÿ þB·¥Ò"ŸÃ§G™÷Fm…¹p0~î7cõ®jx$µÕííæœÏ,P¢<Ä`ÈB¨-ŽÙëMïe°–Êçm§ªZѬí;ýRÖ5þírþ ÿPÿJêî×/âõô ¼ÿ—ïæÕ××!à/øô»ÿx6®¾€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€/ÝZ¬ýjÌ¿t}j³õ ÑE†QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEäëM§'Z™"Ga“õ§yÿwõ4Gþ­«‰Ñµ«Ã¢è:v‘keosyÒ“ vŠFÁÂîÜI,?‹Ö˜ŽÛÈû¿©£Èû¿©®6mn[è´ä¾³¶7–ÚâÙ˂ŀHtä„psŒž´¯â}j6º¿hìL¶ÔþÂñq6Ýá7†ÝŒåÆ(Zÿ^ŸæMÿ­ÿÈë™m’T‰™GÎÅ-‚ØëÞŸäGýßÔ×=­8OøyÛ¢ÅvOý𵕢ø×QÕo¬_ìa¬¯]†Ä²ZÁ*Í+-‡cêh¶ò#þïêhò#þïêkÊí¬ï-üq­¬¶‹wv鋈áuœ“p3½÷üÃØÅv·^!“J´¹·¾aq©Ã“”É–±ÜOïPôW`•Ý‘¿äGýßÔÑäGýßÔ×!=æ£-†uªÇ§Ü5Ö¡nÑ¢‘A‘Žys–½=©·^(Ö|‹NÖ+Ó!¿b9QÚY?z#fÈ`’p0zS¶¶þº˜®­ë¯ùr%¼›¼²¯µŠ¶ÖΡ÷§ùÿwõ5ÀiÚž«£jÞ§ØäÓ?·)bda0ß"®àÙLJükcÂOªMuª¼·pÉbºÊ,mA ÇÏ»}¶ÒZýßåþcz}öüÿÈéüˆÿ»úš<ˆÿ»úš¯«]¾Ÿ£ÞÞFªÏoÊªÝ U'ò®Y®ÐišµÕ½Òµ)ÖâwrB31;[¶@êjî¡â»Qg)³ºû4é*Æ å„ä19áPg<»šC:"?îþ¦˜©nÎè¥K¦7(nW=3é\¯Œ/ï4ko"ÞÜêwƒX+::D ‚ÅÊœ £îžsÞ²®%º¶‡Åï©Ågu:ÜY‡TWX›„ãváë×­4¯ýz˜_×Üz7‘÷SG‘÷S\åçˆï-ãñK$p¤Ä¯TüÄÅ¿æçž}1ÅEoâ;ù|GÌ–V07—å$ð¾û Pc}Ár #n â’ÕØ6:"?îþ¦¸]`⦠Çò§á'Õ&ºÕ^[¸d±]Få6Œ †ãçݾÛk7Yÿ‘­ÿÏaGfZ:Í;ýRÖgißê–´h¯÷k—ñú‡úWPÿv¹¨¥Cà"¥ÞH0þm]~åþðüë‡ð Î–þY™dó[-ÞÏã[ØŸþ{^þQÿ…!›[—ûÃó£rÿx~u‹‰ÿçµïåøQ‰ÿçµïåøQp±µ¹¼?:7/÷‡çX¸Ÿþ{^þQÿ…Ÿþ{^þQÿ… [—ûÃó£rÿx~u‹‰ÿçµïåøQ‰ÿçµïåøQp±µ¹¼?:7/÷‡çX¸Ÿþ{^þQÿ…Ÿþ{^þQÿ… [—ûÃó£rÿx~u‹‰ÿçµïåøQ¶ùí{ùGþ\,mn_ïÎËýáùÖBÅ31Sur¤yòúújÙåÿŸÛüsÿ‰ F¦åþðüèÜ¿Þeýž_ùý¸ÿÇ?øš>Ï/üþÜãŸüMjn_ïÎËýáùÖ_ÙåÿŸÛüsÿ‰£ìòÿÏíÇþ9ÿÄЦåþðüèÜ¿Þeýž_ùý¸ÿÇ?øš>Ï/üþÜãŸüMhÈA^<Ö­ª]ØÝ,Vú\÷hP1xó€rxáO§ëW>Ï/üþÜãŸüMg—þn?ñÏþ&¦iµdìiNQŒ¯%tbÿÂC©нwÿñÂC©нwÿñµöyçöãÿÿâhû<¿óûqÿŽñ5—³©üÿ‚7öÔçÒûßù˜¿ðê_ô/]ÿãßüEðê_ô/]ÿãßüEm}ž_ùý¸ÿÇ?øš>Ï/üþÜãŸüMΧóþ=µùô¾÷þf/ü$:—ý ×ø÷ÿGü$:—ý ×ø÷ÿ[_g—þn?ñÏþ&³Ëÿ?·øçÿG³©üÿ‚mGþ}/½ÿ™‹ÿ ¥ÿBõßþ=ÿÄVŽ•¨\ßù¿hÓ¦´Ù¾f~lç¦@éÖ¬ýž_ùý¸ÿÇ?øš>Ï/üþÜãŸüMTa4îå’&uiJ6Œ}îË>†ŒCUþÏ/üþÜãŸüMg—þn?ñÏþ&µ9Ë>†ŒCUþÏ/üþÜãŸüMg—þn?ñÏþ&€,`ú0} Wû<¿óûqÿŽñ4}ž_ùý¸ÿÇ?øš±ƒèhÁô5_ìòÿÏíÇþ9ÿÄÑöyçöãÿÿâhÆ¡£ÐÕ³Ëÿ?·øçÿGÙåÿŸÛüsÿ‰  >†ŒCUþÏ/üþÜãŸüMg—þn?ñÏþ&€,`ú0} Wû<¿óûqÿŽñ4}ž_ùý¸ÿÇ?øš±ƒèhÁô5_ìòÿÏíÇþ9ÿÄÑöyçöãÿÿâhÆ¡£ÐÕ³Ëÿ?·øçÿGÙåÿŸÛüsÿ‰  >†ŒCUþÏ/üþÜãŸüMg—þn?ñÏþ&€,`ú0} Wû<¿óûqÿŽñ4}ž_ùý¸ÿÇ?øš±ƒèhÁô5_ìòÿÏíÇþ9ÿÄÑöyçöãÿÿâhÆ¡£ÐÕ³Ëÿ?·øçÿGÙåÿŸÛüsÿ‰  >†ŒCUþÏ/üþÜãŸüMg—þn?ñÏþ&€,`úU=*·ÙåÿŸÛüsÿ‰£ìòÿÏíÇþ9ÿÄÐmNrK…:eìÁ³ ²($¶O?töÅsÑxSY…,V+Ëhþûìå@ßxd.H>‡5Õ}ž_ùý¸ÿÇ?øš>Ï/üþÜãŸüMc**N÷yÑ KŒyyc÷#–ºÌQGÝÚâ;¯¶)fbLÜüä•É<÷ȧ7†5·´žÕ®í 3Ü}ªEÉù¤ÜvvärÇJéþÏ/üþÜãŸüMg—þn?ñÏþ&—°_Ìþ÷ýt+ëmýˆÿà(®šKÝ2ëR¹ê,ì$€€®‚¤È#ã­&™áø4™ÔÚj‚Ú)b–-"˜S9à|»±Ïv*ÏÙåÿŸÛüsÿ‰£ìòÿÏíÇþ9ÿÄÖÑVV9¤ù›eqáíÓD‹OÔ®o-//n¥kBëäùŒ9o»¸zõǵMöyçöãÿÿâhû<¿óûqÿŽñ4€†ÇL”xUtNê[‰¤·h®'Y‰`s‚Üñž3è(“@Ó§6^p–D´µ{EˆÚñ¸U;¸äáGLw©¾Ï/üþÜãŸüMg—þn?ñÏþ&›w¦›á»=:ò¦»¿¼{hÌvËu(qž\Ø““ŽôjÞµÕ.æ¹×ör\AöyþÌè©ÎVþñä`óVþÏ/üþÜãŸüMg—þn?ñÏþ&“×q­6)ÝxjÒsi%½íý”öÖâÕf¶u ñqò¶å ôÏJŽ? ØÛý„ÙÞê¯in-ƒÅ"æXÁÎ×ÊyôÁäÖ‡ÙåÿŸÛüsÿ‰£ìòÿÏíÇþ9ÿÄÓ¿QX¡ká=:ÖêÝÖâúKkiLÖöRJ 0¿<¨ÆxÉÀ$Ú¯êú]¾°–ûæ¹·šÚ_6íØFÁdr  Ñöyçöãÿÿâhû<¿óûqÿŽñ4†P_ éãL{7¹½’Fº7‚躉’cü@¨~Xæ©ßxQΕmky5ÍÍüм÷Ò €Œ½ L­mýž_ùý¸ÿÇ?øš>Ï/üþÜãŸüM;ŠÅ WÂÖz­ÍÔßm¿´ûdB+¤¶t :¸2žpq‘Š’ÛÜÝÁ,ú†¡%¼$±ÚO(2ciáwvÎ7b­ýž_ùý¸ÿÇ?øš>Ï/üþÜãŸüM% XŠËEƒOÕ./m¯/V;‰W´Þ¦íÕ±Ùï×ÕÍë>*sþz ê~Ï/üþÜãŸüMsZÌK¿l$˜rXõ'qæ€:;ýRÖgißê–´i€×ûµËøƒýCý+¨»\¿ˆ?Ô?Ò€*ø3þ<&ÿ®‡ù×DפéM™Á+a¹€ê@ï\߃‰]6r±Äßš¥j×CÄúmÅî›t—“ùÞc9Œ¨\ *áÊ£óÉ8æ’ÕØoc­‡P²¹à‚îÞY“ïÆ’eú€x¥º½´±@÷wPÛ«,?aXÅk¨ë^ÚE ½—™,€)™ @À9úŸ×JúH®ìCÚÜØ*Y€‘1ß#ùÐö¥ã<+¥A]ÆBÃn=sÓõeu ¤2‘AÈ"¸è­m/>¸x·-´3lùÉRë¸nÀ#<Ž8­Ù¾Ð<*ÆÓ?hûîöõݳŒ{Ðô¿-ZE¿í=<Ý}—íÖßiÎ<Ÿ5wçéœÓN­¦‹£lu Apo”f]ùôÆsšÃ±»Ò,t=-í ·›Ì’(¸+½]ˆÜZƼŠY4ßq`–âòRÉ4¼l`á_8ô)æ›V~Ÿð?Ì«úóÿ#¹¼½·ÓíÌ÷Ryq‚8$’z$û }½ÄwP$ÑoØüèPþD+\ {a¢dKÍw Àr®¹SÜr +Z™[Žjχÿ±A°k!fÌ#R¹Û¼ÉŽsßvsžôÞùÑÖX×ìŽÜy¿5é²/ü´ý8ë\µôâ×FÔ—U¸ŸP¼»Xî-Zl¦ ;ÔGÑvc¨ôç­"È‹åå”mñ+nÉéØÍ ]Ûúݘž×þ¶äwÔWo>µ¨ê·3Ct‘Í cÙ& È«¶66`å{ç'9ÏjK»¹¥µ¼ÔdÕn£¾‡S[t¶K‚ˆˆ%U °¯99ëIko?øæ Úÿ×ò;ú+·ŸZÔu[™¡ºHæƒP1ì“PdU[ 0r½ó“œçµwQ\CpÉ–961GØÀíaÔt>Ôt¸úØ ž˜D°J’ÆÙÃÆÁÇEI\߃g|)jŠèe\&á’|ƬkéÅ®©.«q>¡yv±ÜZ´ÙLw¨¢ìÇQéÏZvÖÀô;Ú­¨_Á¦Ù½ÕÁa•hÉÉ ÔŠã$’ê8/õuÔ/|û}_ÉXÌìb1ùŠ»JtÆöÍVÕÛô­RîëQ¹û\:€ˆZ Ê¢ •B/¡ÈÁÉ¡koë·ù‰»_úïþG¢Ñ\^§pÓßk¯s«ÜX¾žŠmcŽo-q³vò¿Ç–Èç#ŒS€»Öµkh®®ïmIÒRá’Úv‹l¥¹$ÏÐÒþ¿ÿAÿ_—ù••á«É¯ü5§Ý\6ù¤K·÷­jÓjÎÂNêáERQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW-¯ÈÃkÿ\öc]MrÚ÷üŒ6¿õÇÿf4Óißê–´k;NÿTµ£LC_î×1â˜_é]Ct¬b$L1@^ ±˜ÓCüë£hbyRVD+®zàöÍq6ÚÒèIYÍ).[tr•ãÒ£ˆöèpt»óôŸÿ¯Hg_‹¥[̳C¦YÅ*ò UaøN“JÓ¦†8eÓí^(ó±*¿AŽ+‹ÿ…—mÿ@­Cþÿÿõèÿ…—mÿ@­Cþÿÿõè¼0B`0ÂWahÛ·Ó1OUTPª¨ +€ÿ…—mÿ@­Cþÿÿõèÿ…—mÿ@­CþÿÿõèµþÊÓ¾Õö¯°Zý£;¼ß%wç×8Í#ic\›–Ó­ äî2˜v}sŒæ¸¿øYvßô Ô?ïÿÿ^øYvßô Ô?ïÿÿ^€;Ù!Šmžlhû:îPv°î= L^Ÿå§›·g™´nÛ×ô® þ]·ýµûÿÿ×£þ]·ýµûÿÿ× ÞM:Æ[¥º’ÎÝîeh”¸Ç¡Æh“N±–én¤³·{…ÆÙZ%.1èqšâ?áeÛÐ+Pÿ¿ÿýz?áeÛÐ+Pÿ¿ÿýzïåá¿ëšÿ6¨Í¡‰â6°ÝüÇSÃ>s¸Žç ׿-T’4‹ÒO´€ÿ3Nÿ…Ÿoÿ@{¿ûéh§Ôô ]F;x¼¸cŠ;±s*y ¬§ |õ9«cKÓʼn±¢ÐõƒÉ_,󟻌u®7þ}¿ýîÿ北þ}¿ýîÿ北Ⱥ-H‚9#‡K²$ÆõKt°r2ç¯2«)V© Ž®þ}¿ýîÿ北þ}¿ýîÿ怒ÎÓLÓìÚÎÆÚÙŸïbT-õÀæ¡mGk“rÚM‰œ¾ó)·MÛ³œçÎ{×%ÿ >ßþ€÷÷ÒÑÿ >ßþ€÷÷ÒÐhtû&½¦ÒÜÝ9ŒoÓv3R´¼É3D,`„r ²ƒ×¶p+†ÿ…Ÿoÿ@{¿ûéhÿ…Ÿoÿ@{¿ûéh²JÓ¢¼7‘ØZ¥ÓLË ‡$õù±šà†Ic•⤋>[²‚S<Ù®þ}¿ýîÿ北þ}¿ýîÿ怒Ù,m#XU-`U€–ˆÀ“Júu==j†§ Zê1ÛÇåÃQÝ‹™SÉf89 =óÔæ¹øYöÿô»ÿ¾–øYöÿô»ÿ¾–€;h,­-m¾Íok 0sû¨ã ¼õàqPÅ£éC$0éÖqÅ!Ñ P¬G 5ÇÿÂÏ·ÿ =ßýô´ÂÏ·ÿ =ßýô´Ü´¼ÑÌñ#Kv9PJç®lÕx46ÚèÝ[éö‘\æXáUsž¼šã¿ágÛÿÐïþúZ?ágÛÿÐïþúZî ¶‚ÙY`†8•˜»Ô(,z“Žõ\i`¼û`Ó­Ösç~}wc5ÇÿÂÏ·ÿ =ßýô´ÂÏ·ÿ =ßýô´ÚG§XÅx÷qÙÛ¥Ëýé–%ßVÆM§XËæù–vïç0i7D§y ã’+‹ÿ…Ÿoÿ@{¿ûéhÿ…Ÿoÿ@{¿ûéh²“KÓæ¼[Élmžé1¶f…K®:a±šÇ¾ð±ÔµUººžÐIJ¬€%’‰ˆRS.IÆ@ì+þ}¿ýîÿ北þ}¿ýîÿ怒ÊM3Ošño%±¶{¤ÆÙš.1Ó ŒÑa§Ã§C,p–>lÏ3³œ’ÌrÃð®7þ}¿ýîÿ北þ}¿ýîÿ怒¶ G·¸[ˆt«çS¹dKt ¨ f§N±Šñîã³·K—ûÓ,J¾­ŒšâÿágÛÿÐïþúZ?ágÛÿÐïþúZí¡‰â6°ÝüÇSÃ>s¸Žç ÔSé:mÕÊÜÜiö²Ü.6Ë$*Ì1ÓŒ×ÿ >ßþ€÷÷ÒÑÿ >ßþ€÷÷ÒÐiq§XÝÍ×6vóKÜy"Vdú8©|ˆ|ó?•œSa“hÝ·9Æ}=«†ÿ…Ÿoÿ@{¿ûéhÿ…Ÿoÿ@{¿ûéhº†­áH`‰"‰Bª`)õÁÂÏ·ÿ =ßýô´ÂÏ·ÿ =ßýô´ÞÑ\ü,ûúÝÿßKGü,ûúÝÿßK@íÁÂÏ·ÿ =ßýô´ÂÏ·ÿ =ßýô´ÞÑ\ü,ûúÝÿßKGü,ûúÝÿßK@íÁÂÏ·ÿ =ßýô´ÂÏ·ÿ =ßýô´ÞÑ\ü,ûúÝÿßKGü,ûúÝÿßK@íÁÂÏ·ÿ =ßýô´ÂÏ·ÿ =ßýô´ÞÑ\ü,ûúÝÿßKGü,ûúÝÿßK@íÁÂÏ·ÿ =ßýô´ÂÏ·ÿ =ßýô´ÞÑ\ü,ûúÝÿßKGü,ûúÝÿßK@íÁÂÏ·ÿ =ßýô´ÂÏ·ÿ =ßýô´ÞÑ\ü,ûúÝÿßKGü,ûúÝÿßK@íÁÂÏ·ÿ =ßýô´ÂÏ·ÿ =ßýô´ÞÑ\ü,ûúÝÿßKGü,ûúÝÿßK@íÁÂÏ·ÿ =ßýô´ÂÏ·ÿ =ßýô´ÞÑ\ü,ûúÝÿßKGü,ûúÝÿßK@íÁÂÏ·ÿ =ßýô´ÂÏ·ÿ =ßýô´ÞÑ\ü,ûúÝÿßKGü,ûúÝÿßK@íÁÂÏ·ÿ =ßýô´ÂÏ·ÿ =ßýô´ÞÑ\ü,ûúÝÿßKGü,ûúÝÿßK@írúèψ-¿ëþÌjŒ?bœ€ºMÈÏ«­Z[¦ÖuT ´¶{“ýh©Ó¿Õ-hÕ+$Ûv˜€ôª— ŒUºB(—½ÑVbrµ’þÜ•weö¦yké@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@'ü"±ÿp~TÂ+÷å]ß”ž”yIé@dD`vVí–š°ãµÄkéO $i´b¤¢ŠÿÙnip2-8.7.0/doc/html/figs/snap5.jpg0000644000175000017500000012205413341773367013532 00000000000000ÿØÿàJFIFÿá°ExifII*JR(i‡Züÿÿ)( üÿÿ)( 0210‘ 0100 ÿÿ ã ÿÛ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ä Bàw¬ëÝJH^Y¥HãA–f8{šä'ø• £•[æou‚F˜\Pæ/­bú×›Ÿ‰z/üýÉÿ€òñ4ÂËÑçêOü“ÿ‰ HóÖ1}kÍÿáeè¿óõ'þÉÿÄÑÿ /FÿŸ©?ðOþ&€=#Ì_Z<Åõ¯7ÿ…•£ÏÔŸø'ÿGü,­þ~¤ÿÀy?øšô1}hóÖ¼ßþVÿ?Rà<ŸüMð²´oùú—ÿäÿâhÒ<Åõ£Ì_ZóøYZ7üýKÿ€òñ4ÂÊÑ¿çæ_ü“ÿ‰ HóÖ1}kÍÿáehßóó/þÉÿÄÑÿ +FÿŸ™ðOþ&€=#Ì_Z<Åõ¯7ÿ…•£ÏÌ¿ø'ÿGü,þ~eÿÀy?øšô1}hóÖ¼ãþNÿ?2ÿà<ŸüMð²tùù—ÿäÿâhÑüÅõ£Ì_ZóøY:?üüËÿ€òñ4ÂÉÑÿçæ_ü“ÿ‰ GóÖ1}kÎ?ádèÿóó/þÉÿÄÑÿ 'GÿŸ™ðOþ&€=Ì_Z<Åõ¯8ÿ…“£ÿÏÌ¿ø'ÿGü,þ~%ÿÀy?øšô1}hóÖ¼ãþFÿ?ÿà4ŸüMð²4ùø—ÿ¤ÿâhÑüÅõ£Ì_ZóøY?üüKÿ€Òÿñ4ÂÈÒ?çâoü—ÿ‰ GóÖ1}kÎ?ádióñ7þKÿÄÑÿ #HÿŸ‰¿ð_þ&€=Ì_Z<Åõ¯8ÿ…‘¤ÏÄßø /ÿGü,#þ~&ÿÀiøšô1}hóÖ¼çþ>‘ÿ?à4¿üMð±ôùø›ÿ¥ÿâhѼÅõ£Ì_ZóŸøXúGüüMÿ€Òÿñ4ÂÇÒ?ç¼ßø /ÿEÀôo1}hóÖ¼çþ>‘ÿ=æÿÀiøš?ácé?óÞoü—ÿ‰¢àz7˜¾´y‹ë^sÿ Iÿžóà4¿üMð±ôŸùï7þKÿÄÑp=Ì_Z<Åõ¯9ÿ…¤ÿÏy¿ð_þ&øXÚOü÷›ÿ¥ÿâh¸æ/­búלÿÂÆÒç¼ßø /ÿGü,m'þ{Íÿ€Òÿñ4\FóÖ1}kÎáci?óÞoü—ÿ‰£þ6“ÿ=æÿÀiøš.£y‹ëG˜¾µç?ð±´Ÿùï7þKÿÄÑÿ Iÿžóà4¿üMѼÅõ£Ì_ZóŸøXúOü÷›ÿ¥ÿâhÿ…¤ÿÏy¿ð_þ&‹èÞbúÑæ/­yÏü,}'þ{Íÿ€Òÿñ4ÂÇÒ?ç¼ßø /ÿEÀôo1}hóÖ¼çþ>‘ÿ=æÿÀiøš?ácéóñ7þKÿÄÑp=Ì_Z<Åõ¯9ÿ…¤ÏÄßø /ÿGü,}#þ~&ÿÀiøšôo1}hóÖ¼çþ>‘ÿ?à4¿üM'ü,#þ~&ÿÀiøšô1}hóÖ¼ãþF‘ÿ?à4¿üMð²4ùø›ÿ¥ÿâhÑüÅõ£Ì_ZóøYGüüMÿ€Òÿñ4ÂÈÒ?çâ_ü—ÿ‰ GóÖ1}kÎ?ádhÿóñ/þKÿÄÑÿ #GÿŸ‰ðOþ&€=Ì_Z<Åõ¯8ÿ…‘£ÿÏÄ¿ø 'ÿGü,þ~eÿÀy?øšô1}hóÖ¼ãþNÿ?2ÿà<ŸüMð²tùù—ÿäÿâhÑüÅõ£Ì_ZóøY:?üüËÿ€òñ4ÂÉÑÿçæ_ü“ÿ‰ GóÖ1}kÎ?ádèÿóó/þÉÿÄÑÿ 'GÿŸ™ðOþ&€=Ì_Z<Åõ¯8ÿ…“£ÿÏÌ¿ø'ÿIÿ +FÿŸ™ðOþ&€=#Ì_Z<Åõ¯7ÿ…•£ÏÌ¿ø'ÿGü,­þ~eÿÀy?øšô1}hóÖ¼ßþVÿ?2ÿà<ŸüMð²´oùú—ÿäÿâhÒ<Åõ£Ì_ZóøYZ7üýKÿ€òñ4ÂÊÑ¿çêOü“ÿ‰ HóÖ1}kÍÿáehßóõ'þÉÿÄÑÿ +FÿŸ©?ðOþ&€=#Ì_Z<Åõ¯7ÿ…•£ÏÔŸø'ÿGü,½þ~¤ÿÀy?øšô1}hóÖ¼ßþ^‹ÿ?Rà<ŸüMâ^‹ÿ?Rà<ŸüMzHp{Ò‚ yÜ_ô"ÀÇ[y?øšêôÍn×R·YígI¢nŒ‡?‡Ö€6¨¦#îú(¢Š*­Ô›šµYz›í‰¨ɾ(ê²²ÙÙ+‘Œîà»qŒÿßYüy¾êë~"J_P´ç “ÿe®3uK6ê|qË0Å’×|…¶Åõ8è=ÍVÝ]7†¼U‡esm=¡¸¶T…OÏ$œ…ë‘ÇJç÷Qº»­I‹S³ð½àÓaœIw?ÛmÔƒóy˜=3ÅGb¶:~“¨]¶“§Ý?öáµæá#8á}1Ú‹koë§ù‡Ÿõ×üŽ'u«¾²Ò´ë_ëšzéblc<œsÇZ¡ñœêúyxDtØwD«´!Ë| vÇLPö_×AÛs™ÝFêô[-GÔ´Û}A­íbþѲ[(QbPëçËØü£ž´ÇÓ´øgÕRÇH´¿¾Òm`…-Ì;–W?ë$e¹ŸÞ—þ¿®Ÿx–¿×õý#ÏwU¥Óî[I}P*ý•&ÝÎò3Óé]Âé:l$y_KµWþÅ7²ØÈ›£Šn8Úzj††»áÙ[P·´·ŽMPí¡O*D»Sà××ñ¥ý~6ëð¹ç[¨Ý]‡mãŸZÕ Ô4HVðºÇüKÌÖÖÍ“ò”^(k©|9¡Å›–ϧÀøÛ’Ñ6@ÛætQÓsO}ƒ©ÆÀÍ[Ôl.´›Ö³¼@“ª« ŒŽEwö‰ioáR9¬mòÅ!+qm`mÁ$€på™Ç^Ÿá¡â+T¾¼Ö’ûH·K[}ëV²ùbSn±ª ^¯É8êN&¹Ý.ÛO»’EÔu_ìäP 7Ù^mçÓ x§mZK•·SàŽK›ˆà… Ë+EÄÄà ×ð•¥¥ß,í&Tºµ2H?xŸ,€+JŸ 85·,VZ…¶ƒ©®›gi3kÖDµ‹dn¸Êúñüè]?¯!>¿×õ±ÇÜÁ5Ô¶×1˜ç‰Š:Ò>œQmmsy!ŽÖÚ{‰ÉHcg zà]ûÙÇ ÝÕ§‡í5+•ÖZ–¾nØð Àw“× ÍU%Ô>0Õ¬´kÛ«-.ßË–ëì¬Å‡ËŠ’r[ü1Ikk”Õ¯oë[3‡ŠFŽDdu8epAЃғuiøªþ}GÄwWsÙÍfdÛ¶)«í{œV6ê¨6ê7T;¨Ý@‰·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›u&ê‹u#1Øq×¥g¦^ß§™ "Eœ•°Ó¹¨ïlo4ò¾z.Æ8‡*O¥o‹‡F–Â2Š ÎW¶0 A};>™p—ÈH ņ{u½bZ[]_Jc·Œ1y‰À_©«Wz>¡g •Ö)FXÄÄíà⥲™bÑ@St ÈÁ¶Ÿ¾QÓŠ· ÌIz‚ ƒ"˜Ûpó‹Ž«Ž¤ûÐ qu:Ao’G8U^õ¶ÞÕÖ0}•ÛêÖ_›õýi<:ÑC}|É€GËû»Ž’ÖŒWwkÞ²o;¨ÜÇѽ®p?à\Uñ2„ÜcÐõð˜ u)*“o^Ç(Û‘ÙJ:œ2°ÁÒ»?‡œ¶ºÜ¶ÁÏ“,eŠçÀŒÈšæüDèÚ±uÆæKÿ½ÏôÅ\ðd…|B„pÿJë¥>x©w<Úô½•ISìÏ¢¬fó#5 +GrЭmŽ•©ˆ´QE¥djßê[éZç¥cêßê[é@ñÿÄÂÛþÿ²×ººÿˆñÿmÿÿÙkŒ¤ÆIºÕ8êiÌŽ˜ÞŒ»†á¸‘ê=©n×T¿²FKKû«tc–Xfd õóL×BºœDdóJy‡iïc?{ß­U¢€4YÔâšY£ÔïRYqæH·ñÓqÎOãM·Õu 3!µ¿»€Èræ)Ù7SƒÍQ œ д¾ºŽYeŽêt’`VWY¨cžA÷¢ÖþîÅËÙÝÜ[; †VBGÔªÁ‘ö8*ãøX`þT™  qê‘]¨îîå²LË+9ëóg4Û‹Ë‹É|Û«‰§—ß3—l}MV¢€-%õÔqÇ]N©ù‘ªÈÀ#ÿx ð}Ç4±ßÝÃt×Q]ÜGrÄ“2JÁÉ=rÀ皨N:œQ@Æ¡x³Ë:Þ\ ¥R²H%mÎPÇ9 ûÓVòá-þΗ,ÄžPrpþ,tϽV¢€4W[ÕRi&MRùe—d‹ráŸ2s“øÕë_]Ùx~m2Ù§Šin¾Ònã¸eº^99ÆsšÀ¢€.A¨ÞÚLó[^ÜÁ+ýù"••›êAÉ¥òÝ›µ¾ºG¬âfóü 9ªTPøõmF+™.cÔ.ÒâO¿*ÎáßêÙɪÒM$Ò´²ÈòHÇ,îÄ–>¤žµG(Ί.70ž™=¨txœ¤ˆÈ㪸 ÀзUí ϱýí—e'>GšÞ_¯ÝÎ:Õ Aèihüº¾£=·Ù¦Ôo$·ÀSÎì˜>RqI>«¨]@ ¸Ô.æ„tŽYÙ”~â¨Ñ@êxà’žU†\y‘«¯Ž™=ê=Õb ©­fY­æ’WîÉ•aÛ‚9ñv±¤kwp9<ÔQ+a_ûÀg†÷ëU™1½w Ãp##Ô{Sh¡ƒÅwÖÚ ú|RÜ¥Ä×_ikŹ`çå©îsŒç5™oªê#Zêp4§2§d.}N=OZ£EZ¹½¹½›Î»¹šâ\c|Òlzdš‡uGEIºÕ&ê7TtP›¨ÝQÑ@n£uGEIºÕ&ê7TtP›¨ÝQÑ@n£uGEIºÕ&ê7TtP›¨ÝQÑ@n£uGEIºÕ&ê7TtP›¨ÝQÑ@n£uGEIºÕ&ê7TtP›¨ÝQÑ@n£uGEIºÕ&ê7TtP›¨ÝQÑ@ Ô%pÊ:qŠI¯^ãØÎvŽõJŠ» Û[±1¿ªš–]RiWní™ï’MfÑ@ ¹ì¯›xéÛÐÕöñ›‘÷²OéëXTVU(S¨ï5s¦Ž2½¸Ó•“'–fšFwbYŽI=ësÁ§> O÷ô®rºÈŸîéZ¥mÌÛnìúDÿR¿Jß+DÿR¿Jß*„-Q@éXú·ú–úVÁéXú·ú–úPƒ|CÿûoøþËY~‚ ïïLéhÞ]Œ²#]Ä$c A§ÐÖ§Ä?øÿ¶ÿÿìµËØêéæäĨßhàmàœ+u#ž´ŸPìnD­q>£¶îÀyzlŒ[K·X‘Æáò°1®,ôæ­M¤.¯}f$r°ÛèðÌádD-€PÎv®Išæ,¯å°"%CöˆÜ H'üUèüGyÛ¿•lþU·ÙX:&‹²¸Ï8õ-xÄ“@tÛ ,äq(µur‘¾1¹Níà sóQö¯ýtÚß×SkÄQ¹ñT‹<ª‰,Æ6í|ç¸ÏÄVwŒ#Óá×·šL8.¾_A÷T(+ø“Tîõë«Ã©Rý èÒíR6í'yã¯|Ó5Maõm=¥ª\ y—«—78íØ ”´_×b¯©[:T_èú¡†3y ¨$Ú7Ÿ}3×Nì³XÕkN¿›LÔ!½·Úd‰²Œ«„Ü~µ^B:K 8­ï´KÏÙïZ nn."Uóô%S$ÇûF£Òü/iq§Ù\^Ü4fð±WPD°(b¡™\î~A8\qïY ®]uõr#k—f$vÀ®Ï@ö¶úãÇa•Å•äQ0›„bÑg“‚¬8Ï89¼ÀÔÓü-k}s§w"[O¾|¡”ì•X ã¡-^ÍÖ²5 5,4û¤WG’6ÆCm\qœ’­úQµyo£K¥ÆTA$¢RØùàC…'ýÑMÖ5{oPkÛ¡‘”.ØÆ;×êi¿ëúþ¶…tž¹FvòØiÓ¬6sÌ­5œnû•Ib¹<ö®n­ØjéÏ3¨Æh^Þ Â°ÁÇ=hèÅÕBÃM¸[ õ6–õ#˜ÖÆ(⊠°»~lN>¹¨N‹e§[M6¯%Ëm»{DKBªILnbX9çÔU{/ÜY[A µ´¸6Ì^ÚIã,ÐsòòçœFi¶ºôðE,7ö×ÑI/žRé 'v ä÷ìhôþ¿­GëýZ“éßÙZGˆ¬Ä¾j$–¬ŒnV%”‘ØàŠ—Æú\vwóÞ\<¾}ㆶXñ°"¨ XrsÆÑ‚:žÂ±^¼›ûGÏMý¡7zô*r¥qŒc·lv§Þx†òý/c¸HZ;§Y m8‰Ô¹9à0zä~—õø¿}me ñ!ÔEÍç•5°†D—‹að«èö‡Ã«¨@——R•c#E*m¶Ã` inœîàsLÿ„–å¯/§žÖÒt½ÛçA*6ÂWõïQA­µ­¤ÐÛXYE$±¼Mpªûö7QËmèqÓ8¢ÚÜÊ«zTi.±eˆ®q²°È °È"ªT¶Óµ­Ô7xdPÝ <ÕE٦ɒºilzŠxƒVÍÞ—aÈÀÈîzb±"Ö."Ôî¯Õ"2܉C‚Ñæÿ´qRI®=Å‚[\ÙYÜ £! G ƒZ:_ˆ‘ ­}³´Ö´ˆ4lDܪø>™ç­dj:¬ºˆ 0[Á•Š„Lœž¤’IêI4=ÿ®ïþ–ß×dQ¢Š)€QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEWCàÏùSýÃý+ž®ƒÁŸò0Çþáþ”ô&‰þ¥~•¾:V‰þ¥~•¾:UZ(¢€Ò±õoõ-ô­ƒÒ±õoõ-ô =Óôû=SÇÚ^ÛCq ÚÌv˸4g pxÆ}Ív¿ðƒøPuЬïÕrZü”‹cÿN³ÿ4®ÇW×ãÒuK i¢‘¢ºY xãyvŒ*‚NsHÿáðŸý¬ïÕðƒøOþ€V?÷ê­\ëúuÌv÷IÉ·k4ËtöíúY‡ÅVÖ:þ©g©\yPÀbòˆ…ˆPË’Y€ ÷8§`,ÿÂá?úXÿߪŠçÁž‚ÖYáÐìD¥ùX à‚ X×uñ£[Å*YMt$eÓˆÐ3É~ø$þµ¥|â[t?é‹ÿè&‹•ÿ¯‡è¥ÿàáGü"¾ÿ —ÿ€qÿ…kÑHfGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ¯EdÂ+áßúiøøQÿ¯‡è¥ÿàáZôPGü"¾ÿ —ÿ€qÿ…ðŠøwþ€_þÇþ©4ÑÛÁ$ò¶ØãRîØÎ&¹ûíBëÈR]¬)…ñæÀ ›yùsÆêƽxÑ‹”„Ùsþ_ÿÐKÿÀ8ÿ±Ýiÿ?PßÁGÛ­?çêûø(z*·ZÏÔ÷ðQöëOùúƒþþ žŠƒíÖŸóõýü}ºÓþ~ ÿ¿‚€'¢ ûu§üýAÿn´ÿŸ¨?ïà  è¨>Ýiÿ?PßÁGÛ­?çêûø(z*·ZÏÔ÷ðQöëOùúƒþþ žŠƒíÖŸóõýü}ºÓþ~ ÿ¿‚€'¢ ûu§üýAÿn´ÿŸ¨?ïà  è¨>Ýiÿ?PßÁGÛ­?çêûø(z*·ZÏÔ÷ðQöëOùúƒþþ žŠƒíÖŸóõýü}ºÓþ~ ÿ¿‚€'¢ ûu§üýAÿn´ÿŸ¨?ïà  è¨>Ýiÿ?PßÁGÛ­?çêûø(z*·ZÏÔ÷ðQöëOùúƒþþ žŠƒíÖŸóõýü}ºÓþ~ ÿ¿‚€'¢ ûu§üýAÿn´ÿŸ¨?ïà  è¨>Ýiÿ?PßÁGÛ­?çêûø(z*·ZÏÔ÷ðQöëOùúƒþþ žŠƒíÖŸóõýü}ºÓþ~ ÿ¿‚€'¢ ûu§üýAÿn´ÿŸ¨?ïà  è¨>Ýiÿ?PßÁGÛ­?çêûø(z*·ZÏÔ÷ðQöëOùúƒþþ žŠƒíÖŸóõýü}ºÓþ~ ÿ¿‚€'¢ ûu§üýAÿn´ÿŸ¨?ïà  è¨>Ýiÿ?PßÁGÛ­?çêûø(z*·ZÏÔ÷ðQöëOùúƒþþ žŠƒíÖŸóõýü}ºÓþ~ ÿ¿‚€'¢ ûu§üýAÿn´ÿŸ¨?ïà  è¨>Ýiÿ?PßÁGÛ­?çêûø(z*·ZÏÔ÷ðQöëOùúƒþþ žŠƒíÖŸóõýü}ºÓþ~ ÿ¿‚€'¢ ûu§üýAÿn´ÿŸ¨?ïà  è¨>Ýiÿ?PßÁGÛ­?çêûø(z*·ZÏÔ÷ðQöëOùúƒþþ žŠƒíÖŸóõýü}ºÓþ~ ÿ¿‚€ Ûo¶X\ZïÙçDÑîÆqFqø×!«ÛÏ¤Í ËqÂevb(AR¾¬s÷¿JëþÝiÿ?PßÁUîN“y·í_bŸnvù»ëŒ×.+ ñ³ß£F“¥Ï¨ÛÛߨÒ/?w–!$‘œ Û»íôïV|eÿ?õø¿úÖÄ3éöñ,PKkkÑ•@übø¶HæÓlš7W_µ¯*r>ãÖ”(FŒyb XÓÑ?Ô¯Ò·ÇJÀÑ?Ô¯Ò·ÇJÜ¢Š(=+VÿRßJØ=+VÿRßJã¼Us¯Þ}¨Þ}«È謽¯‘—¶ò=syö£y¯#¢käÛÈõß5ýhó_Ö¼ŠŠ=¯{o#×|×õ£ÍZò*(ö¾Aí¼]ó_Ö5ýkȨ£Úù¶ò=wÍZ<×õ¯"¢käÛÈõß5ýhó_Ö¼ŠŠ=¯{o#×|×õ£ÍZò*(ö¾Aí¼]ó_Ö5ýkȨ£Úù¶ò=wÍZ<×õ¯"¢käÛÈõß5ýhó_Ö¼ŠŠ=¯{o#×|×õ£ÍZò*(ö¾Aí¼]ó_Ö5ýkȨ£Úù¶ò=wÍZ<×õ¯"¢käÛÈõß5ýhó_Ö¼ŠŠ=¯{o#×|×õ£ÍZò*(ö¾Aí¼]ó_Ö5ýkȨ£Úù¶ò=wÍZ<×õ¯"¢käÛÈõß5ýhó_Ö¼ŠŠ=¯{o#×|×õ£ÍZò*(ö¾Aí¼]ó_Ö5ýkȨ£Úù¶ò=wÍZ<×õ¯"¢käÛÈõß5ýhó_Ö¼ŠŠ=¯{o#×|×õ£ÍZò*(ö¾Aí¼]ó_Ö5ýkȨ£Úù¶ò=wÍZ<×õ®?Á?òýÿlÿöjëkXÊêæ±|Êãü×õ£ÍZeÊæ¿­kúÓ( ù¯ëGšþ´Ê(þkúÑæ¿­2Ššþ´y¯ëL¢€æ¿­kúÓ( ù¯ëGšþ´Ê(þkúÑæ¿­2Ššþ´y¯ëL¢€æ¿­kúÓ( ù¯ëGšþ´Ê(þkúÑæ¿­2Ššþ´y¯ëL¢€æ¿­kúÓ( ù¯ëGšþ´Ê(þkúÑæ¿­2Ššþµçº–§6«ckq2FŽnŠŸ,‚rO?1®þ¼Õäkÿ_ÿ -c95V+×ô:)Â.„ä֪ߩÜhŸêWé[ã¥`hŸêWé[ã¥ns EPzV>­þ¥¾•°zV>­þ¥¾”ÉøsþF—ÿtÿè-V|mÿ.?öÓÿeªÞÿ‘¥ÿÝ?ú UŸËý´ÿÙk:Ÿ "§Àr]*!s £$ô…KU’Î4¸2ƒÇU^ÀÖ ÝNun¥š¯y;[Û–Œ•ˆHÔô,zUЧuf×W1r°Æ ù«n”«yȪö±Ú¯”šE†Už~SË”çvNáÆ)ÛL<•”¦ÈGÊ?1Æ2hÐ4&’à$¾Xä|n!@à~&š×±¬›v¹‚åö¦Í²Ü#…`C‚wc¸¨à²håùº, vÏ?ìôÍ ²±,W%Ì©°˜Õ¶†À8ç<Ñö‡ûi‰P²*Œ‘Ž õçÒ–Ú)aÞ¯°¡bÁ999æš±N“NËå•äNAÆéF¡ºpǺO2Rííqϵ<Üm¹‘ÝŠÇc*}OõÿjÚË·1ùgËB„1#®2GåD¶rH'—çuu䎘àþTô„ðÜ ™—c£(‡àôþU5Am ‰X²(v<ųøžjz‡¾„0¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(ª×ÒM«<*Iæ d¨î@îjÍTÔb¸šÍÒÙ€~ã¦áéžÔÖã[™íªÎñƱ•ßžF|ÓØc·½m!bŠ\ØäœçÛF¼Ž8¤Š@f$n\à'¡Ú·Ð0C°fdŒš©òô*|½¿Á?òýÿlÿöjëk’ðOü¿Û?ýšºÚÖŸÂoOáAEU–QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEæ«ÿ koúûý+Ò«ÍSþ@Öÿõöÿú Vþ4>¡ÕKýÞ§¬S¸Ñ?Ô¯Ò·ÇJÀÑ?Ô¯Ò·ÇJè9¢Š(=+VÿRßJØ=+VÿRßJäü9ÿ#Kÿºô«>6ÿ—ûiÿ²ÕoÈÒÿîŸý«¹Nõ2WV•Õ"¢½u¥ÝUœá8,qœ^¢GòÓv2r¤œ ÏØù™{3Ȩ¯\òn±Ÿ:öòÉÇã¸SL7óñýù?ü]ËÌ=™ä´W«2Þùy·ÿ¿ÿ‹ªZ…Õõ½Ê£Fgh$û<¨˜Ä ©'Ó?‡J^ËÌ=™æÔUøKaì|ÌÊ+OþÍoþò…ð–kóûÿ“ü(ö>aì|ÌÊ+OþÍoþò…ð–kóûÿ“ü(ö>aì|ÌÊ+OþÍoþò…ð–kóûÿ“ü(ö>aì|ÌÊ+OþÍoþò…ð–kóûÿ“ü(ö>aì|ÌÊ+OþÍoþò…ð–kóûÿ“ü(ö>aì|ÌÊ+OþÍoþò…ð–kóûÿ“ü(ö>aì|ÌÊ+OþÍoþò…ð–kóûÿ“ü(ö>aì|ÌÊ+OþÍoþò…ð–kóûÿ“ü(ö>aì|ÌÊ+OþÍoþò…ð–kóûÿ“ü(ö>aì|ÌÊ+OþÍoþò…ð–kóûÿ“ü(ö>aì|ÌÊ+OþÍoþò…ð–kóûÿ“ü(ö>aì|ÌÊ+OþÍoþò…ð–kóûÿ“ü(ö>aì|ÌÊ+OþÍoþò…ð–kóûÿ“ü(ö>aì|ÌÊ+OþÍoþò…ð–kóûÿ“ü(ö>aì|ÌÊ+OþÍoþò…ð–kóûÿ“ü(ö>aì|ͯÿË÷ý³ÿÙ«­¬íî{íÚæå÷Êû÷6ÎŽƒØViecX«+QL ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¯5Où[ÿ×Ûÿè)^•^jŸò·ÿ¯·ÿÐR°Ÿñ¡óýª_îõ=cúƉþ¥~•¾:V‰þ¥~•¾:WAÈ-Q@éXú·ú–úVÁéXú·ú–úP'áÏù_ýÓÿ µw)Þ¸oÈÒÿîŸý«¹Nô†sºÏ†o5mM/ª cÈQnIˆõÈ;Ç9ïŽÂ·H‘máY\<ã Ê»A;†N2qPM¬évÓ43êVqJ¼2<ê¬> š¥Žh"–'Y#wŒ«¡Èa¸r 1Â)f ($ö… øuß´²½³DCF®Ù2ÂßrAÇàñÛcĶ׷º,¶V*|Ë–X]ÃåÆÇÜú.k*= PÓ5Ý>öɯ¢›YÖEŠ?.,eHÚ«œ0§ž([ÿ_×ôÁíý_Ò,ZëÆ÷\¹Ó¾Å<+ BE–a´Éóáz㎧¯¥3Ēω4¶Ð=ÅÂG3E `–‘„áFäž)ÿb¸.šøÇþŒÖI|¼‰ëЊ›S¸û%¼w;ü–y6/VÄ2Ê—D_õÐåšêçKð«êšŽ•z’E ‘¢ 7`rÅKàóœc z ‡LÖ"Ö´å¼Òãó¥x‹¥¸™X» ñ‘ÀúwÇAO]ñ9ñN…s¤i¿èVD-½ÄóN#eÜv¨nê¤õë‘F2'Âhb-â'¼Y#³ÌK’±²8,_ c`ʨ#€pAÎ1Sœò|¯bœcjµîCeâ 5-IÅÞ¢4ëI‘ŠyD/<``GMÜàãØ z¬Vï%Ô }ªX$Ç™æ¼c79ç Ä3ó§u{¦X[Ïe /,‘»,w²üè$Êþð}á€;sŒqV/"¹´d·IÒvÚD9=6œç%³ÓÚ®•:R•X´Ûi&·]Ó.1ÃÖÄÓù[›[§ÖÛ2÷‡]VÏPŠ E’£y°YŽå# †H ןҴ࿋Q¸²‚)šìßÛ²8t‰Îå ÈÊâA€r2x9¬ÙΗ§èÚt–zy{¨S7 Ÿ9]Nã¸6ð¿Â@ã©®iüKug«FTcYCù¤–tüØn8å‡NœVNµêÊrŠWå…».¾O#*”ãM®K6ÝŸx®­3k]´’æþEŒ< òTG¸|ª€yç…Ïz¯oá‹«™d‹ºì^¹ã3ZãR[¥KÓîƒ4Üž¸#ò§MfÐyí6ã9‘Ÿûèc­x2›rw_í¨¤¬ŒÇ·Œðªüz‘\‡Œ$Ù•Î3•ýGôÍz>-gµmâ!” väzõÇé\ŒÒÊm@Û0%–Õv¿Ýu Ý1éZáê¢+i_øh1Ỏ:Ý·þ€•Ù×!ðäcó/¥Óè)]}}ã…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@•áoùlÿàúV½dx[þE›?øþ†Õ¯HaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP^lŸò·ÿ¯·ÿÐR½&¼Ù?ä oÿ_oÿ ¥a?ãCçúT¿ÝêzÇõ;}ýJý+|t¬ ýJý+|t®ƒZ(¢€Ò±õoõ-ô­ƒÒ±õoõ-ô Oßò4¿û§ÿAjîS½pÞÿ‘¥ÿÝ?ú Wré ÅÕ¼1k«j]»´xâtQþ¹G@}>¾™˜×•BǨD‘€Aó –£›î§ýtOýShÓ¥<Ó¥U“­aø¦$ŸÃ·PÈqάr·”¼~|Väk7W¶KÛ!k&vNd°qÃC <à㯥 <'LÑìa°þÅ%¾›,ðÄÓH¦Tögc³Ê°½q€#;šçö^ –76©«­¾ËuïåZà€0™P7´œ@ûKžo.•h4«‹hLWº¶â©ƒçœ Ã2@Åc<ǧPf{(QÞ”$C?;2¯;Anß_Zçr9>ï_¸Ò)É_¡ÏøCÄ>ñ>µ:øžÎ [;-8y ç²C‚ٙب_R0ܽ‹´ -®tÍN…ÛOÝqopH Ü~H·7³܆$rTã# 9}Biú"êŸÙ·q^Ü\"¼‘(ÀŒ³|ÊqŒ‡NrxàZêw>dvÈ<Û™öM,’Çó¶B… ·?0BNIr2uÆ´ªN*oOË«·õ¹›§N4ÛÅøm¦§o%¶¯©nî®#Q#¬Â+xĈBírààÈ“š«ÿÞeœ"{’G3Lw´l9^ÜàŒŸLw«Íâý€ÌòÈUÞHÔŒŒ©‘úd€¡‰ÎÜy«ö¨u_ }®Ki£·š5gˆ¸6TŒqŒ6ì—$àJ¿$½è?¨Jpvüt2¬´(–Ròiìfhò!Ø0  yÛìIïÎjâiº‚E"ŽÈEX&‘Œn,[Œò <ô9 bº}:ÖÃL±) EŒHP–p7¹ëÉêIžþ¦±oî®LËs Ær˜‡¶Ò~ÿ=˜ƒØdôæ¹gE(ê÷:–2«m[c•»±¸hSì÷ ök|™¤”©!3ÏA–\“‘žAÇ5zÏÃLR^… $Ã(‘qÁbãÀV°ëÀ«PÛµõ¬7R¤§tÆGp©åqÜŸL``~•¢—ϧ^ùN¬¦à*ÆFv¶ãœœuÀ®*°öp\§D+Ê«å—CŽøz6è7Òé¿ô®²¹D!ÑîQdµ1 9ùÒºzõQç°¢Š)ˆ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šô¯ ȳgÿÿÐÚµë#Âßò,ÙÿÀÿô6­zC (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ódÿ5¿ý}¿þ‚•é5æÉÿ kúûý+ ÿ?Ðê¥þïSÖ?©ÛèŸêWé[ã¥`hŸêWé[ã¥t‚ÑE•«©o¥l•«©o¥r~ÿ‘¥ÿÝ?ú Wrë†ðçü/þéÿÐZ»”ïHcª9¾ê×DÿÐ…IQÍ÷Sþº'þ„)ˆ´iÒžiÒ€*ÉÖ²µÉ¥·ÓZheX¥ŒJé#0†B È#úƒZ²u¬/Ì-ü7w1Ua¹VòœÞ“Ééþ.²’Á—S™¥¿· & §˜ÈÄ|ª Æ>PØÝŽõ~=KÃqÙ¹’{{«›ˆ›1È<ÒCuBvçn[0Éžœx½ß‰£µº‰ š+ȈBˆÊÙpC.Ò08ã?JÌŸ_Qfge²Ï‚Br6q’s×W2§mìüìi¤žš³ÚC{öP1Ì.BI<¸Ï`6Wh¹uÛž .J‚3‹ú&‰¦h~ [UR]Q_uÜ4ž^ÿ˜°n^£ƒ“‚sò“Œ 3-†Ÿ=þ™=½Õô­.^QFF©SÈŒm탂ºö¿.l´´·Ôôà’Fãh6ÂFu%I^žÃB¨×ë4”:3wPñ—r`Ó´»X­Ì8Ë µ—dXî7Ó äî\Ïëï¢èÂó|Ñ€BF¹Xä$ýðÀބއ&£°ñG…n×Ë`öeT¿ïOÙ̬A$—ßqÁã¦* ÚËRkh´ÝFÚí%Ù–hY›¨$£á‹NžàÒX‰9Zqkúò.{ü2Wóÿ‚0jº…ï†ä›Ë’nPgŒî‚' žä 㟦á]CûM¸¶º 4…ËÇ2 Œ€œžÝý©5=¤öóZH¶èK¤&Û÷¹ùóÀÇ;€>˜°ÛP»·y,¼§X•¸9(ù±Ÿºp:ã°ãŠÑN-h¬jFNëÔÛ¿»™m<«RѪIæ(Sò«`ÇLŽ8ã¿5jÊG·&UV»ˆ²'bb¿S\ü:©’Ñí%Þ0æ1#+?CÎXdtéŒõ`æ´¬%YLF2Y¹rU³÷SN˜àóÍEX?fù·2¥5í4EoCäè— ’Ò˜óþê×SX>Aò€/d~ [ÕØÕÌ^áESQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEé^ÿ‘fÏþÿ¡µkÖG…¿äY³ÿÿèmZô†QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEæÉÿ kúûý+ÒkÍ“þ@Öÿõöÿú Vþ4>¡ÕKýÞ§¬S·Ñ?Ô¯Ò·ÇJÀÑ?Ô¯Ò·ÇJè9¢Š(=+VÿRßJØ=+VÿRßJäü9ÿ#Kÿºô®å;× áÏù_ýÓÿ µw)ÞÇTs}Ôÿ®‰ÿ¡ ’£›î§ýtOýShÓ¥<Ó€*ÉÖ¹¯œx3T?ôçuÿ¤Ò×K'ZÎÕm⺵K{ˆÖHeiDaÊa}±Rݕƕτî9 zŒÔæI …@'®:WÓ á[™þÕ¤iñDá»(É*9û§žŸI…|u)ŠßMÒf.â±íc\Ò¸¾¿O~Wý|Í}”¶¹óÉ,xØäc ì+RÓÄú¥  .Ð mrH?žqøWÑ1xSÁ3Ü=¼Zf•$é÷ãP¥—ê:Š.üákXƒ¯…í'õ øÒxê/Gø˜Õ)­™áð–YÝ…]CI·cŒ‹1ŸÓ#×µK^¾#ì÷·VRò,©æªóœ¤Ǩ=zW³Â=àç¶´š A9º,4¹ÝÌÆëN¼ðׄ¬U Ä"Ú­$‚Ý Å“›žqßnj~³M;E5÷™V“ÞÌòÝ:ÒþÎþ-CH×­ZอæYŽFr’ªîtƒÒ¶®µ KÈtÖ-¯À³Ï;ÛEpŒÌ!U”ô €šï%ðï…m/#¶ F‘³ˆÖqò÷7A×?Ž1šÓFÑô˘㷳·¶Œ£»2Lc+·äsÉíøÖsÄÆVßúùšÃÝ<ªÊ×I¾˜M£¥ ƒ’o7}³Ý’p¥ƒÓƒŽ„ y-e¶¾hn,Ì+,`L0ÏqÐqžryüpº„ïÒK•¶Óîy’PáÀúœÔ¶:†å‡vŸohñëo&TÀõ©x­mØŸg ó(«÷<÷à ºßP97Òr;ðµ¹[÷v:.Ž[þ%Iß,ÐŒ"’q–ù'×Ô“Á¥[^Ço.›r¨î±¬ù>^ãÐ}ìûg®¨ã¡e£ü?ÌÅÒwzœåИtåÔb²“G»F”°I ŠT…êx:vî) MIäŠ{¬Ù#ósrÛALãvw~8<Óúô;?ÃüÅì_sŸ¢ºkËmÆ e’-ÞP’7gnF@À=ê;ˆ4Ø,£¼]*âh^/5™$Q±qŸ›sŽÞ™¤±ôßGø˜ýŒ»œí¹,š,1Æí¦Ý`Â'” æ= üß^O¬ÝÛè–—V–Ïní-Óm@ŒÇçž?¯Cù_áþböO{œÕÒßZiVOcOšyd Ë,sµq“ËÜwïDÖšJè²jpÚù‘ˆ è Œ»†ÜŽüRúý;^Ïðÿ1û^×9ª+£[}k?>Õm§Ã"°X X‚ryç§~”û} Py£Ë ²ç3Eu£LÑŽÜ,Gs”\LyaœÏQƒÇ±¨á´ðýÏ™äIm/”3&ËÛ¾ŠŸí }Ÿõó°—s–¢ºh­4k™¢Ëo<.®L‰tO+Žž¼úqëJ–þ’9dIíZ8¿Ö0¹ÈO©ÝÅ?¯Ãù_õóbûœÅÕ -Ú°öæØu˜\Ÿ÷ÖqD¶Z 6éq+À¿Ü‘®VúàÑý¡Où_Ýÿ=Œ»œ­ÐÛÛi×5½ø²|í‡kÜ2¸÷¿Ç¥XK=K‡·àyÓ;¢[‚\c®FsCÇÓWÑþæ%E¾§-EtV‹áËÍ?í¨Ð¬!A}÷òóÙ¾n X–ËA†Ùnex#þì­pB·Ðç<|³‹û¿àØ·Ôåh®©ì´Ä%ÞÝDßê‹\æ»Ï?…/ö~‡ö¿²f´ã>Ožwã×nsGö…?å×Ì=‹îr”WO¨Yiº|>qÓg™,æ'û€u'sÒ™{k¤Úi‹~-CDÆ>ZV\`2yãÍ MÚÉëéþaìdŽnŠê ·‡…¯ÚŒ¶ßf'oöŸ“>™ÝŠ$µðôOI-²4 Õ®p\„|ÜÑõúÊþïø!ì_trôWE©Å¢i¨£…®,à«0f 3ž3ŸÂ­E§ès\Io“$ÑýøÖrY~£9}~¯Êÿ¯˜{{\ä讲ãOÐí6}§É‡yÂy“•Ü}O5A[G3”m2é!óͿڲ…÷mÇH猑Mcàö‹ü?ÌN‹[³ Šè|­)îÞ }.êác.I¢?"7q’ÀœwÀ8¨Õ´sqå¶™t‘yæÜ\3|…ÁÆ8rG½å‡ù‡²}ηÂßò,ÙÿÀÿô6­z«¦A¶™0®Ø×vIþ"{ժꌔ¢¤º™µg`¢Š*€(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+Í“þ@Öÿõöÿú W¤×›'ü­ÿëíÿô¬'üh|ÿCª—û½OXþ§o¢©_¥oŽ•¢©_¥oŽ•Ðr EPzV>­þ¥¾•°zV>­þ¥¾”ÉøsþF—ÿtÿè-]Êw®ßò4¿û§ÿAjîS½!ލæËv²¶  ÿJŽâúÖÖ{x'#–á¶D¬ycþ˜õ©er‰•±!FzdœZbomqÿ0«QµõŸüþ[ÿßÅÿwÙ_ÝKŸöUqúƒM6¯ÿ?—’ñ4ÞÙÏí·ýý_ñª³ÉËF u•cß#º¨qŸ\·Oj¶ÐH?åúçòÿ‰¬Ü\Ùh‘28{9ÂHp¯ˆ™@ô?L 9ß"ë _—SŸ“Mºm\Ïäæ#~“gpû‚ ¹Æ½ÅGi¤ÜBö$B#ò§¹,À¯ÊŽ[oó^+Êá Ö¿è/ÿ/þ5¿áí~þ[;…¹ÔnÉ…òd’c€­Ðg9ìzû~˜äXŒ%9I5¶—ìaý© 9(½?Ìé´këx¯,’O"(¬-$Ž{…™ e‹  ñ’ ù°kjûSûu¡Eš;¹ …”ÚÍâKHJù=›ˆåØŒà zžx¬írå®f¸FŒ$°X]‡@ኩ۴œtÜ@ª&þóû\ÿ÷ðÓ~ß{ÿ?sÿßÃþ4–QkU§¨Õtõ.^ÚÜMº„¶±ÙÂÀ9¥@'ÚáŽH$Ž}yÅ[ѵšæâx­ʼ¼ §zª± ¶W Œ®8=ë#í÷¿ó÷?ýü?ãGÛïçîûøÆ›ÁÉŦ×ãýt¨‘ÑjËw=ô1 î, Bñ1óÀmÌ8Ϲǥ$Âòmq}>âKHJù=›ˆåØŒà zžx®{í÷¿ó÷?ýü?ãGÛïçîûøÆ¡`f•®¿dή i޵ww2|¢4Š‘Êõcí’@ÿ€ŠÏ´[æKÉîô™šöhÈÄ’EåíþÆœs’HçŸaXŸo½ÿŸ¹ÿïáÿ>ß{ÿ?sÿßÃþ4, û¯Ä=²74Í.êÃH¾ÓÝD¬P˜ç þ´²ã'#Ç=±SÏes.§Øù|f%¹‡ ù =kœû}ïüýÏÿøÑöûßùûŸþþñ¦ðU¿2kZÝÿsU±¾k›ï²Û ’úÕmËo "#pÉÏQ†í“ÅGs¢ê yÐ\A"}¢&!á;‘Hë¼du8ÇV¬·ÞÿÏÜÿ÷ðÿo½ÿŸ¹ÿïáÿkQm$'V/¡¿¯XKy=³‹YnaD‚Q˜âGÎF}84£ÎÚ Æí#_5‘€Æ³0‹vÌp¹Ú>¸¬·ÞÿÏÜÿ÷ðÿo½ÿŸ¹ÿïáÿKQ$”–ƒöѽìiI¦ß]»N¶× o”ΛŸl¡‹¤Œ9ÏZÕÒ"¹µk›i­YSÏ’T›r•pÎX g óÜv®cí÷¿ó÷?ýü?ãGÛïçîûøƉ`ªIYµø‰UŠ6"±¿KÛx £y0ßKqö€ë´«‡ÀÆwg/Žª8ôi…„sY³„Óä‚á#u IÙ…Î}=+/í÷¿ó÷?ýü?ãGÛïçîûøÆŸÔêw_Ÿù‡µö/M§ê—òœÄ‹msI3 eV ·~ÃŽÍÈì9¨mÙµ©.ZÎÑV4KDÂHŒ‡d¥› ¤Žn¾Õ_í÷¿ó÷?ýü?ãGÛïçîûøÆ©a'm×õ¨Dj_i­s<Öñº¢ß-¤F0Î< ¤à®sëéN‹LžÈÙ\Ee=Ê¢Ì ^/1 ŒpƱ¡¬Ÿ·ÞÿÏÜÿ÷ðÿo½ÿŸ¹ÿïáÿŸ©Ôµ®¿¥aûXÞö7SNº³²ò±q„²nm‘Iç8àMK¹ jÆ5¦fÈȼ̽ò¼V'ÛïçîûøÆ·ÞÿÏÜÿ÷ðÿ/©T×U¯êÖ=§jO£éÖÿeš)tù!"eJîMÙ^àüÀTs¬zØ.fFd 8ònf…dVv ‘‚÷µKí÷¿ó÷?ýü?ãGÛïçîûøÆ«ê“êÐ{X“E¢ÞKgh^+¦†k ‘ 0†Ld|ÁÀä}Óœ¥n"ϦÏ?Ù̾}Ì+Ì2Àª!†«Zê¢K‹¨-d·K™Ô¼Œ¡BcpÜJdœg“ÀªöÚêéWPËm—};É@̙ߺBï/µRû}ïüýÏÿøÑöûßùûŸþþñ«ú¥KY5øôµ‰§u¦ßnºˆXùÿižEÀtùìÈlxÚqŒõ©a7Ú]ä¦)¾Äò`G+¡ùÞA’…rvà³ߥcý¾÷þ~çÿ¿‡ühû}ïüýÏÿøÒúœíf×âÑt:-nÞ鿆â ší•$VË‘•pÇ$­þ¥¾•°zV>­þ¥¾”ÉøsþF—ÿtÿè-]Êw®ßò4¿û§ÿAjîS½!˜Z§…-uk滸½½W *ª2€w*Hçžµ°PÇo B¯.øË|ÓŒ Ö}ç‰ô› ©m®n$IbÆñöyêÎK‹hf%£eÜ¥N Ç‘LE¹æKx$šV jY˜ö’kžðî½wªËq¡l–òí[›u\üÐ?Ý''ï `þ¡â:ãVÒ^ 4Õgfb•‘¼ ¤qøÖcx_ìšµ•í…Íà ÂÝ]É&èXtRÄà† {Rþ¿¯ë¸?ëúþºÏsâ[{;xcþÏJ¾{gtŽ˜ÎÞÛA8Ïrã?ˆí¦½Ñ&µ·MóÍÑÆ™s%dð95LxFMcL¸³šám­ƒÝÊØÈB‚HÇ#ŒûÖì¿ññeÿ]Ïþ‹z¨¾VšÝW½Ï$Ò¾k7hQº·ÓÔ©;TyÒ)Î0@!pzðÇ·á§sàMÃ^)ѼĒòÆô¼.oÙÀœ€-Ê…=yë^®Es>=²’çÂw6åVïOe¾Øà#FrN9åÝ€A?tVÅV¬ïRW2…(A{¨»om¤ ´à ýØâ@ª;ðÊxž?°x§GÕpW*Ú|ÎÜã?ìjyçç<½XíÉÉ-XÒoDt¤×%¬Æ.¼We&žEÔæ'µ¹T`ÞH(>á-‘óqÆ:×yâvi¥´û"K$€Çþ–|Õf Šgn%NNîH!Ec§ëzï“iªjsݶñ±Æ¨¡F`/‰ë]°Õ*Çš+Cž¶&Ë7©Ô[ê°ÝjÙ|‹*F$ &I ÅIù §' ãÕêËÒ4[=-YíáTb6îîG׿LÖ¥rKsªÆáER((¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šô¯ ȳgÿÿÐÚµë#Âßò,ÙÿÀÿô6­zC (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ æÖ~ ø×\»kw–êÍÞ!…L ã|Ì=IïE­•†‡o´¢8Ì™•¶¡}Ý@Î}0qõ§É¬@ÎV(ÙãQ,§i߉àûñž+×—;VÐ÷håTe†W-w²ëäyì—ÝiNÝÇå^+Ó<=xoÁ­zЧPÔV2ØÂƒœîÇÝÜG|°W-á½5]yP§ú2ò‚z.yëíø×_¬ÜÅ©ëÍ“6úyh‹ÉÇ¡ £9=½ëzU±¢Õ×SÆ›öt¥U;v%F‚¹-²è ŽGÊ äqÏ8äõïZús[M¸‚ á/–¾vw0çÛ×ß“ö«i#H­­Ý.‰$É,¡¿Â $dã¯5ÐéÖÊéÓ8Š ã¹‡ÌGltÉë^ög(Ç–;ÇÔñðqnó©fZ¸ŒG¦EˆÂ+ü¡Pg§¯^ÃŽ•B·5˜âŠð²˜Ì˜M˜Æ0}+¼ŠÊ*~îÇu&Üu (¢²5 (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€=+Âßò,ÙÿÀÿô6­zÈð·ü‹6ð?ý «^Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¹ýÛ/÷Ïô®ž¹ýÛ/÷Ïô  ]ýJý+|t¬ ýJý+|t¦!h¢ŠJÇÕ¿Ô·Ò¶JÇÕ¿Ô·Ò€9?ÈÒÿîŸý«¹NõÃxsþF—ÿtÿè-]Êw¤1Õßu?ë¢èB¤¨æû©ÿ]ÿBÄZ4ÆéO4Æé@dëYšÂ—± $ùƒþ¸ÉZru¬_¼±hsÉï5c™“hÉÜ —Æ;Ô½†­}O Õ£[ïMc¼í‰šÝONN@ ‘Œç¶yÍdø’Ìéºôúu»nPI9A¼†UbUã =3Î*ާªKˆ.n4Ù7$Ó4°® 2†9 ws¸t=FAÁ#“5½Þ¥¯øŠ.žc1Œ-Àh¼°¨â:Ž˜'¹¤ £ÍmJ†#Ú¥Íî6s†<;}©Í‰îXb,FNÒ‘œÏ9sŽ«ŸN9Øu»x †ÄÂ×’KÅŒ’’~îdg'ÐÔ^2Õwj©§ÂXÛZ…@T6:3œþäV=Œ¶r4‹>œæàÆD^K€ŠFI,„ÇoL <åIûTìØbRŸ¹Ðì­®£ºhgµXLŽpäNàH;HãiùAÉ'+Ø{«kw†;yá´jåT)Qœõ=zãÞ¸*4±e–éÒ$¶9ù‡ËÆ3ާðÏJÚþÛžâM¶ÃÊyÉ—Èã·_åô­1êT|Õßsž5h«#¨Ôn^æ8ÚD]x%A‡¾O8þµH0©ÈäÜ2ï`NIè 4µ R’¼TU’ (¢˜ÂŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Jð·ü‹6ð?ý «^²<-ÿ"ÍŸüÿCjפ0¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(®cÅÿvËýóý+§®cÅÿvËýóý(WDÿR¿Jß+DÿR¿Jß)ˆZ(¢€Ò±õoõ-ô­ƒÒ±õoõ-ô Oßò4¿û§ÿAjîS½pÞÿ‘¥ÿÝ?ú Wré uG7ÝOúèŸú©*9¾ê×DÿÐ…11ºSÍ1¨¬k+\tLg)E– pòdÎMkH9ªê8€e28 Œ‚<©*$í4|‘â›9ìµ%–h.KyÇ=p{÷=®¯ÃãDð•Þ³pÌu&59ùÆÞÜnm¤ö )¯Z¼¾†Òkâ4{Gµ²*%“xr ð»pzúÕé'Ñb¼[WŠ3\yž€¶0 ì ¯:x«ÁG•áÉ+Ÿ3Ç™.¾ÕvA3“aPÄçpyôôô®‡ÃZZêWO‹s¼*¦ifÃþŠ6‚yèHÚyçݾӢß²,P™‹˜Æ-‰]Àd®í»sÓ5_hÑZ[It-KË´VÇnßï‚U}Û¢Çvƒ!Ñ×Vp×¾Ö¯4iôÍ<‘pë Iä·®ÒAè:`õ<´í;Ã×:l6ãQY“Q7,@ ëÊìÈè Ïa]óÝhiyöFŠ.åLý˜ì à oÛ·'#Œ÷©o[IÓÂ}¢T¾vª[ïc޼('֓Ǧ­Êõ°w½ÑÇ  9ã™f1æ©óÆzÑ]L×Ú7¤fÕéíouq-µÆ™k ñ¢I„Û"•làçhçƒÚ“R6ÖRÚÅŸe$—TyÌ#Qž»Oò¥õõÍË˯È=Ž—¹ÊÑ]>©qg¥ÛBϦ[Ëq!‰ÂŒ€Íœt¹È¢[­8k ¦ÅibÓ yžc"žp«‚Xãœp=é¬uÕÔCØùœÅ×iÑ[]G:Oej'‚f‰öÄ8äõR :VÒ¢¼[Cm€;VذPz az¤Tÿh+Û•Ø>çEt±^é ohn ˆ½ÀM²Ebþ[郴ãèNjÊM¢É|lÒ+s6JãÈùK 60HôÎi¼}¾Ã±ó9+­’;oíx¬ã³µØ"3LÍàg Ôçòª¶×–—±ß<]°[b64¥QdR3¸§hïߊ=5~Pö:Úç9Eo®£húBÞ®™e¹® ¨Žq¸>ÞW߯oeÀ=¢HG+¿*3ùQ,zŽñüQ¿S‰¢º’о²ö0é¶ ±gwp­†ÏÝ]‡8Ǩ¨b¼µ–ñû&µ–g·Š—,ëœåqÀ;X“Ó¥?¯/åüP{3œ¢º’s=ͰѴåš<íÈþ`ÎxR6/'éZ¶¶ú}ݤ7ÚA²T¿»Ï¥)cÔUÜToÔ⨮ïì_óéýûáGØ,¿çÒûö?§ûJÊ?`ûœ%Ýý‚Ëþ} ÿ¿cü(û—üúAÿ~ÇøQý¥å`ûœ%Ýý‚Ëþ} ÿ¿cü(û—üúAÿ~ÇøQý¥å`ûœ%Ýý‚Ëþ} ÿ¿cü(û—üúAÿ~ÇøQý¥å`ûœ%Ýý‚Ëþ} ÿ¿cü(û—üúAÿ~ÇøQý¥å`ûœ%Ýý‚Ëþ} ÿ¿cü(û—üúAÿ~ÇøQý¥å`ûœ%Ýý‚Ëþ} ÿ¿cü(û—üúAÿ~ÇøQý¥å`û—ü-ÿ"ÍŸüÿCjתú|iŸ FŠˆ7aT`MX®øKž*]Ìš³°QEB (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ æ|_÷l¿ß?Òºjæ|_÷lÿß?Ò€54Oõ+ô­ñÒ°4Oõ+ô­ñÒ˜…¢Š(=+VÿRßJØ=+VÿRßJäü9ÿ#Kÿºô®å;× áÏù_ýÓÿ µw)ÞÇTs)1ü£$2¶=pAþ•NÿZ±Óo-­neÛ%ÃaxáG«z ñþM\™™cùN°P}2@ÏëLCÍìXäL=¼—?ҘװzOÿ~ü)ÿb‹´ÄúùÌ?‘¦5”³ÿß÷ÿîá?Ãqÿ€òñ5^lÜ•)‚8ƒHÎèSŒ @?ş¬½¤#ø®?ð"Oþ*±|Iº×ÃúˆŽY rÙÎ…]Ë>S° ž„þu.<Ë—¸Öæç‡ÕÝíè[µ´±Ëk+ •* a¸èH>½}h} VÕeÑ%‚yRgSw*le Ñå~TœW™xbXmüOe$ÅvÈå tÞK0ùqÁ îÛÈǹÆkÖ1ÅxXÿi‚¨©·}=?­‹©]EÙÇúûŒ˜!¼µ½Š@ZÖ Én æ9€Áø9]§–ÆA9ô©¢ÐõjÍ-šZÌdfÂmÝó/7Þ<}k;FØ[^Ù²GoÄG™œFx¬I\?6>•æOvÚÇ­4ÚªƒÇ=ø®WRMÝ>Áw=.ÓH¹´ƒS·7"hî²ñ¼˜ —   gSV¥ÊèB΄W+n#YE`¸Íy9·PG €{‚krÄbÎ1Ç~ŸS[P¦ëÏ–öë·m ªÇÙEKúÔé!еf7käyë:J±Éu$¡€FC—eÈûÙèzVž¬“,®|²Ïm:Jé[Œlw8 Oá\…Üð-´Ü¿ø'/µVµŽ¬é×SkP^I ¤)9DÄÉ( €åç©ä ±ie, $‚)f¸™œNÒ¸Tœzž~µÆQRòöÕ¹¿ø#öÞGIi¥ÜiBâêÞÚÑn®d‰ 6éˆãŒ7>™8,sÇn*þ­mqu“ ­•°!…Óܧ?¥q”SxÝÜ¿ø «[dt7^š[Ž-Fq8‚(Nvl`‡9åIÏÒ¤¸Ñn亙RHZÚâx§y‘*2mÎ9Ú9ÈÆOÍQOêSþÃþ½ªìu?lYÞxàÂ^^³?˜¤‰Sh>Ä•I§ÝϪCqj"‡iPó‰˜3(9(P ¬= 6œp:wõ§ÙhRZê[äU–æŽCu.T¶Oú¯¹üDgô®nŠo'ö¿ø"ö«±Õ_Y4Ú»£VÛCIT*I냌†?•%¦™}§O{47"äËåˆÒr¨0£%l 娥õks~ðGí•ïc©‡N½‚ÒãýÆi®g2¼ÄD €0Ó“Æz äÔš]µæœ¶¶EchJò:ƒ„bÀª/°Žé\•<jÎ_‡üöÞGW¨i×W×ð·“f‘E*H.70 A ¸éסéQÁ£ÝÇw nðýŠÞåîc Ÿ1‹n‘Œ sÎÌQBÀÉ+)~ðAÖO¡×fÓ­5;§_:y¤ic‰ ‹ÓÐÖ­é¶ÆËKµµc–†%B}ÀÅpÔT¼½µnoÃþ{#Ðè¯<¢§û3û߇üýcÈô:+Ï(£û3û߇üúÇ‘ètWžQGög÷¿ø!õ#Ðè¯<¢ìÏï~ðCëG¡Ñ^yEÙŸÞü?à‡Ö, xnðž‚ óÿ€òÕë=7ìWº…ÓKæÉy0“îãb… ¯8Áüé׿vßþº7þŠ’¢Sä7mF·<ß@ñƼ¶ÓnQ­ˆ”3ÆärVåºt×P𦵠›ÈmceݲÞ– eŸê%Q^Ñæ…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@•áoùlÿàúV½dx[þE›?øþ†Õ¯HaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP\Ï‹þíŸûçúWM\Ï‹þíŸûçúP¦‰þ¥~•¾:V‰þ¥~•¾:S´QE¥cêßê[é[¥cêßê[é@Ÿ‡?äi÷Oþ‚Õܧzá¼9ÿ#Kÿºô®å;Ò^çN³¼¸·¸¸$–Ù·DÇøOùý@©¦û©ÿ]ÿB%G7ÝOúèŸú¦"Ѧ7Jy¦7J«'ZÅñ-Ì–zÅÔLHbšDb3‚ ”ƒÏÒ¶¤ëT5ˆ¡ àïý%&“Vc<µïuMMiu‰„.Ë,ih¾@Æ:gïàç¡?­rú¥„Vš˜¢"9cÜŸqÜÍŒóÜ~–Õ­ÊXÙ]« ™"Ó§’Ýå °¹*8Ç\VN©¬h³ÝÃÜ“—‚^E[†+ƒ¸­³œ&O~˜ÁTèÒ£SŠ^†nR“ÔΔ "tã$qŸZæ™J¹wÀÍ^¸¸Ô.®Ù-mn-à$cxøßüŒÓ´¯ êZíãǹ1ª’ÍAëÓ#>˜ÎyÏ4:‘½ŽŠXj“WKAºL²¥êà äv²J ùŒR8è9®¢Ú]QAŠ Û+ÆÁÇïwèEe'‡-t›–µ)t“½4±”* ýÝÏÞÉãuÌ·–v–Ì»ãž_›,Uö†t=yÀà×&œfùR†t×+êt°ÿj¢‘öx.b?t]8òÇZŽ}^k[‡ŠëOuXÆYáHÉ{îžž¾•Ÿáí,ÞêQ*_Mlg] ¬›Œàdg=8õjêÓW‹P+íż*A-=ÁÀ¸üÖˆ¶ŽK2£å F0ätî? òTcó6zœ¹-±GRÔÖkdŽöYdhþx•†J“׿ê3õ5„’­Ì…eó W!˜Ær€@á³êyëV5Kß.{˜íÐ’I°Iö=½I½^vÑm!6n­=áB#0’ÌŒ‚Øá@ÈûØÈéD¥®†‘«8Ç–å‹c ’8E bßuœõ ~‡ô¬k­InäŒË“ÊnÇ®ëÓ†+£·Ñ®ä_0^½´£¨Šïí‚x&®[é f»ã™^P JÍ÷˜÷Æs׃õ>ÂIs4\qÒ½”¿#þÏñ ^Z‰/€FÌvÄ£€Áã ߚ؎I¥Ró†Y¸f @ÉÆHàñŠÕ¼xí@iq½È©‚ÄûtéŸóÅf– I ´ØÅm›½ŒëV”Ò‹èQEls…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@•áoùlÿàúV½dx[þE›?øþ†Õ¯HaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP\Ï‹þíŸûçúWM\Ï‹þíŸûçúP¦‰þ¥~•¾:V‰þ¥~•¾:S´QE¥cêßê[é[¥cêßê[é@Ÿ‡?äi÷Oþ‚Õܧzá¼9ÿ#Kÿºô®å;ÒêŽoºŸõÑ?ô!RTs}Ôÿ®‰ÿ¡ b-ct§šcPY:ÖV¶q¦’1œKÔgþXÉZÒ £{Òßþº7þŠ’¦NÊãJúya¨%•±„B¸Ž =²IãÓõÎ*-Jþk¹óŽ‘ãs·ñã¯rxíÔÖž¡â‹MBö$žÇýGjàùÓåAùHn¼ãîšÔ—[·†ìÀaœªºE$Ê£dnØÂ“œ÷ÆEsC4«­ üÿàXHIݳŽûñ“nà8* ûšµàX#ãVAÁæö'9ǵt£\ï‚à£ÊÐ-ÆÕò˨$΄óŒqUáñ1Ù@å.îÙÖy]c\¢â` “ÅgW1•WyS×úò.u ŒÔµv“C¨OÇ÷#U@£œö_æx튘j\\y××w’¶íøi ¢°P«øÔÖûköëtb\4Jé\(Sg¯|ó¸sŽõb÷RK)"ˆA=ÄòË Ú1“ÉŽýë'Žz.OÇþJŠß˜ÃU¶´¬xÉØqøÓ›Xµ â93Ž2£üjôž$´EGÌÑy"w’5\F„‘–ƒÆ@¥]Ôï¾Ã¦És‡“bSÑŽ~dUË1›÷\7óÿ€Dp±N霵ÕܼR‹:Ãp8ÏNüU&‘åbòcsrpk©V»—Ãïw¼Myd–2ûUrÔ㎞â´mnm6–L»Ä²NäŒàf£ëÜŸcËøžÆýNŠéçñ‚XcŠÆ;ímÜ&üfNí½½}jÞ§u4vöÑÂLSÝL‘@%3Ëã øÕý~WIÃ?øö+¹ÆÑ]·ˆ$“VŽÚWµlò@-ÆDÑí†nyo ê95b-Rô¶ª%´@Öˆ(‘·3åIÁ>§¿Z:Kì~?ðQMÚç+EuZ­.¦Ó†–ÚxÑQ„ÖêBå%$ò8üú ³«Ü^ZZ=Å´–±¤HÎæáXçÁϯéIãÚ—+ãÿ«¦q”WIy¯¼/oÕ¶‘ Yçyby{½9’@«³ßÝG­ZZˆcû,áÿz[,H\ð;­?¯I}Ç·È=’îqÔWi¥ÜK*ÜÁ;ï–ÚvŒ¾Ü0OÌ?*Y5$]Kì)ÒH;ºmÛ$€NH'¡è Oöƒ½¹?øögEuëž]®žZÚòà]„ 0XÆâ}T6F'¬Å­[Ëz¶ëáF‰'*<·uÎTç±íŽ5O%ö?øö+¹ÇQ]Œ÷2ëÎÚUŒGnerɸcµApÇ‚: ¢5=M-5I˜ÚÌ-NÈš8C8ûÙÎ@ÈÈ4,{gñÿ€™ÎQ]<šÛ[éqÎ'‚öY¦ò¢6ð¸Pq“•›€ 8­-:çív1ÍçG19ãBƒ ãI$Ó”±î*îüTSêpÔWS6·dÙ#¤QÄè’I$.Á™°B†U8#’zž•b+ë¦×¤²–ã€AæFÁ²Íóc'°Ôþ¿/äóßþ{Ü㨮ŽÓQ½Ô-¯^ZÇrŠå X É v–ÜÇ è:Ö͕Ƚ°·ºQ4jàzdf”³ãøÿÀFýNŠô:*?´ÿ»øÿÀÕüÏ<¢½Š?´ÿ»øÿÀ«ùžyEziÿwñÿ€Wó<òŠô:(þÓþïãÿ>¯æyåètQý§ýßÇþ}_ÌóÊ+Ðè£ûOû¿üú¿™ç”W¡ÑGöŸ÷øõ2 ȳgÿÿÐÚµê?øò‹ñþu5zP—­þ¥¾•°zV>­þ¥¾”ÉøsþF—ÿtÿè-]Êw®ßò4¿û§ÿAjîS½!ަJ¥Ó À†õ?ÒŸE1 7OŽmfϱOþ*˜nŸþ|î?4ÿâªZ(«O!ÿ—ŸÎ?þ* –)®c D‘†`‚ÌÅJŽ„Œ`šÑªÚרtÛ«°»¼˜šM¾¸©’\®åFí¤ŽNçÃr\çÌ‹-ĉ,N"9…Õ@zôö늼,çVkï"ÝÌŽ¯ šÈ;n‘³•è=k ‚Öêævµû…ºXcšH¢ª¹`¸Ü§º7rx«?Ø·ßô¼ÿ¿Pÿñç¬+[7øŸ‘ÒÜvm~?äqp躸Õám¦M: ™.’5ÎX7†$Œ±à¨úÔëá[Èm’k©#Ýl¶Ó±·Ý½FpWŸ”ò}~•ÖÿbßÐ~óþýCÿÄQý‹}ÿAûÏûõÿMá[ïø˜^7¿2üÈæO†d\C‘RY¡‘G”NÑA޼çg_z±}£ÞOs Õ«µ½ÄJÑîh ŠU±FGp9ÍobßÐ~óþýCÿÄQý‹}ÿAûÏûõÿSõ7{ëøzw(¯´¿ò9dð¬‘ÚÜ@.&³û.Z"H9b_ß%úU›ý]A,â”ΰ۾öXÃ+9 óÁæºì[ïúÞߨøŠ?±o¿è?yÿ~¡ÿâ)ýQÞ÷‡ù‡4™~?äsvÞ’Ñ5¢kƒ ØÎÙ9F+‚w“ž?*±&;è§NÌËû'ÍT Ž1šÜþžÿ ýçýú‡ÿˆ£ûûþƒ÷Ÿ÷êþ"“Á·«¿áþcRŠûKñÿ#ƒÂ7VÙ–ŠÄÉ*y6E#T¯)»œ†=Åhjzuô–Ö²ÇËqm2K€›wã†ÆzpN9®ƒûûþƒ÷Ÿ÷êþ"ì[ïúÞߨøŠoÛ»¿áþb¼R²’üÈÀþÆ»—SK˧yÞDK ULŒdòwqž'ŠI´gmKwœú5ŒíB aHÎ{õ®ƒûûþƒ÷Ÿ÷êþ"ì[ïúÞߨøŠ_S~‡ùš?Ì¿ò9dÐõ[w’á%u'“d·òÔF­“Á-“‚GòÅYÔôkûé­^¬ \Ç-³H¬Ý‰—§8ÿëWAý‹}ÿAûÏûõÿGö-÷ýï?ïÔ?üE?ª;ß[ü¿ÌWŽÜËñÿ#˜½ðõõÛ»‰Ú'žÜ[Üí·$:óÊäü§æn¹ëW$Ò%{»)•$Uµ ùdîÊã¯jÛþžÿ ýçýú‡ÿˆ£ûûþƒ÷Ÿ÷êþ"—ÔߟáþaÍæ_ùŦ›ª¤¾’ðý¢í¥ äˆÂmUúð§Š’ÿAº¾¾·œ•!e`E±óFHžèF+£þžÿ ýçýú‡ÿˆ£ûûþƒ÷Ÿ÷êþ"ŸÔõº¿áþaÍæ_ù¥¯†õ+9í+”e¶`U’ÑŽñ‡'^”ë? -M®’ÞC#H7Y9KdœIž™>8Íu?Ø·ßô¼ÿ¿PÿñbßÐ~óþýCÿÄSxY>¯ð Çù—ãþF é÷‘ë©u´°¤;~éS¹OÓ–•ÚEí–”¶¶îDã$Ìð É%r:ä÷­ïì[ïúÞߨøŠ?±o¿è?yÿ~¡ÿâ*~¥¥µü?Ì9•ïÌ¿ò9q᫱™ç?Û~ÓöŸ;ìçfí»q³=6ñ×>õ5Ž‘¨XÏïÉ;yxß+0 Ø›¿§Z迱o¿è?yÿ~¡ÿâ(þžÿ ýçýú‡ÿˆ¦ðèïø˜sGù—ãþG3qáË™îæe’D¶žXæš$’̘Æ<µsÁéÚ®*í_·m“ýG“³Ë?ÞÎs[?Ø·ßô¼ÿ¿PÿñbßÐ~óþýCÿÄRú›}ÿóhÿ2üÈååÒ5XÞkç&îé`h`Ž8<¡óÉÉ9äNüV•Ž›5–Ÿoj"ˆcTÎÓÎ+[ûûþƒ÷Ÿ÷êþ"ì[ïúÞߨøŠ êÎÿ‡ù‡2½ù—ãþE³ÏÿÏ?üñ“þù5ûûþƒ÷Ÿ÷êþ"ì[ïúÞߨøŠ?³×Ÿáþaο™~?äPû<ÿóÆOûäÑöyÿ猟÷É«ÿØ·ßô¼ÿ¿PÿñbßÐ~óþýCÿÄQýž¼ÿóuüËñÿ"‡Ùçÿž2ß&³Ïÿy¥KˆgpòÚÎд€c Àã· *ÝzTÒPIt9¦š“¸QEd…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@s>/û–ïŸé]5s>.û–ïŸé@š'ú•úVøéX'ú•úVøéLBÑE•«©o¥l•«©o¥r~ÿ‘¥ÿÝ?ú Wrë†ðçü/þéÿÐZ»”ïHc¨¢Šb (¢€ Îñü‹šŸýzÉÿ šÑ¬ïȹ©ÿ׬Ÿú ©ŸÂÍ)|qõC4ïù¯¿ìeÿ¡ÜVíbéðʾ#»˜Æâ'Ó­\©ÚÌr@>£rçê=kjšØ‰nŠ(¦ ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š( NÿÍ_þ¿þŠŽ¯Ö~ÿš¿ýýhVtþjßÝùQVdQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEÌø»îYÿ¾¥tÕÌø»îYÿ¼¥jhŸêWé[ã¥`hŸêWé[ã¥1 EPzV>­þ¥¾•°zV>­þ¥¾”ÉøsþF—ÿtÿè-]º¶+ˆðçü/þéÿÐZ»jC¿ÚþÔÊ(ûý¨ßíL¢€¿Ú™*Ç.û–Ÿïé]5s>.û–Ÿïé@š'ú•úVøéX'ú•úVøéLBÑE•«©o¥l•«©o¥r~ÿ‘¥ÿÝ?ú Wm\O‡?äi÷Oþ‚ÕÛRQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW3âï¹iþñþ•ÓW5âï¹iþñþ”§¢©_¥oŽ•¢©_¥oŽ”Ä-Q@éXú·ú–úVÁéXú·ú–úP'áÏù_ýÓÿ µvÕÄøsþF—ÿtÿè-]µ!…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@s^.û–Ÿïé]-s^.û–Ÿïæ(ODÿR¿Jß+DÿR¿Jß)ˆZ(¢€Ò±õoõ-ô­ƒÒ±õoõ-ô Oßò4¿û§ÿAjí«‰ðçü/þéÿÐZ»jC (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ æ¼]÷-?Þ?ÌWK\׋¾å§ûÇùŠÓÑ?Ô¯Ò·ÇJÀÑ?Ô¯Ò·ÇJbŠ( ô¬}[ýK}+`ô¬}[ýK}(“ðçü/þéÿÐZ»jâ|9ÿ#Kÿºô®ÚŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¹¯}ËO÷óÒ×5âï¹iþñþb€4ôOõ+ô­ñÒ°4Oõ+ô­ñÒ˜…¢Š(=+VÿRßJØ=+VÿRßJãtu-®]âCò˜Gü³Èe ø+Oû.Oúäÿ¾ÿT¼»[ºû—ùßö\Ÿô5Éÿ}þ.ì¹?èk“þú?ü]tžTŸóðÿ÷Êÿ…TŸóðÿ÷Êÿ…V§Ûñæ]­Ý}ËüŽoû.Oúäÿ¾ÿGö\Ÿô5Éÿ}þ.ºO*OùøûåÂ*Oùøûå«Síø¿ó®Öî¾åþG7ý—'ý rßGÿ‹£û.Oúäÿ¾ÿ]'•'üü?ýò¿áG•'üü?ýò¿áGÕ©öü_ù‡×kw_rÿ#›þË“þ†¹?ï£ÿÅÑý—'ý rßGÿ‹®“Ê“þ~þù_ð£Ê“þ~þù_ð£êÔû~/üÃëµ»¯¹‘ÍÿeÉÿC\Ÿ÷ÑÿâèþË“þ†¹?ï£ÿÅ×HU‘£ýë¶[1ОÃÚ¥£êÔû~/üÃëµ»¯¹‘ËeÉÿC\Ÿ÷ÑÿâèþË“þ†¹?ï£ÿÅ×SEV§Ûñæ]­Ý}ËüŽ[û.Oúäÿ¾ÿGö\Ÿô5Éÿ}þ.ºš(úµ>ß‹ÿ0úínëî_ärßÙrÐ×'ýôøº?²äÿ¡®OûèÿñuÔÑGÕ©öü_ù‡×kw_rÿ#–þË“þ†¹?ï£ÿÅÑý—'ý rßGÿ‹®¦Š>­O·âÿÌ>»[ºû—ù·ö\Ÿô5Éÿ}þ.ì¹?èk“þú?ü]u4Qõj}¿þaõÚÝ×Ü¿È忲äÿ¡®OûèÿñteÉÿC\Ÿ÷Ñÿâë©¢«Síø¿ó®Öî¾åþG-ý—'ý rßGÿ‹£û.Oúäÿ¾ÿ]M}ZŸoÅÿ˜}v·u÷/ò9oì¹?èk“þú?ü]ÙrÐ×'ýôøºêh£êÔû~/üÃëµ»¯¹‘ËeÉÿC\Ÿ÷ÑÿâèþË“þ†¹?ï£ÿÅ×SEV§Ûñæ]­Ý}ËüŽ[û.Oúäÿ¾ÿGö\Ÿô5Éÿ}þ.ºš(úµ>ß‹ÿ0úínëî_ärßÙrÐ×'ýôøº?²äÿ¡®OûèÿñuÔÑGÕ©öü_ù‡×kw_rÿ#–þË“þ†¹?ï£ÿÅÑý—'ý rßGÿ‹®¦Š>­O·âÿÌ>»[ºû—ù·ö\Ÿô5Éÿ}þ.ì¹?èk“þú?ü]u4Qõj}¿þaõÚÝ×Ü¿È忲äÿ¡®OûèÿñteÉÿC\Ÿ÷Ñÿâë©¢«Síø¿ó®Öî¾åþG-ý—'ý rßGÿ‹­ë{«Hm¢‰ïâ‘‘—.2ĽjÝp¥kÔέz•U¦ÿ¿"·YÏÜ?÷Ø£íÖ_ó÷ýö*z+C·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø®Å2$ðÛÉ ¬ˆ´²œŒžß¥tõ…â¿ùÅÿ_ ü[Ñ?Ô¯Ò·ÇJÀÑ?Ô¯Ò·ÇJbŠ( ô¬}[ýK}+`ô¬}[ýK}(“ð÷üŒ“ÿº?­tÖºšB¢¬ q3,ŠØØ…‚î'·'_ιÿÈÉ?û£úÖŽ¹á뫘ï&³½¸2ܼe¡Ä{p¤t,¹N3×ëK¨úu]bïKó'm7}ŒEwÍç€Ø8TÇ8Ïr+NâIRÝžDÒòÆ_nÕƒ{£&¬‚}:æöÊÙPŲH”K'wpXtì1ŒóéZ’\ÞmºÙŒê›DJ&LÌùºð1îy£ u(¯ˆÌv×íwfcžÍ‘8¤gÆÐ­ÎHê8«Zv©5ÍÜÖW–Ÿeº‰M‚O1Y p;‚†ºä–š€¶³[â–ÞͤyˆÛ‰;rvãÓ5­§[ÞO¬Ïª^Z›\À°GH®Ø±$®GSÇÒŸõý|Ä ¬ÝÜ]\E¦i¢ê;wòä–IÄJ\uUàç…Z½ìzŒv6ÚtrÌm¾ÐþeÎÀ¼ãtæª,®’5 k[»†âI&†X¦DhËòC#¡î3TçÒ.ÞîÂ{í#ûSfž°ÈHÉç$üäg¿"’þ¾çú¿õÔܵ֒ëA“T²ÒBÑ–”È Áj–›âtï¶ês"+²*,v“)†vÙ/õQŠ[-.ö ^Ù¼ad•eò-Ä›„JÀíMÇÓò©.tû©,4H–,½´ð¼ÃpùB©¿?…>¿wütûÿà§×´ëh¢’YDª]WÉrÛGRT î@§\ëšm¢DòÜ‚&O1<´i OïaAãߥekUËëŸoŽÞææ-Ä,–×fR 9ûÊ9õªÓè3[]ÛÏmevößdX ÷Æ)" “ÉÜ}{Rþ¿1@–9â·š'WØ2²œ‚ ¶ RÔ|A¦éW ¹Ýe)æmH^L.q¸íëSÙÛGgaeoFŒ€#-¸¯ÊÜg½Skƒâ¹/|¿ôf°‡Ü9}äãzP÷ÐÚÌ?Ú >ÕllźÈV-·'æÏÝÛŽÝiÚˆ4ÍRo&Òáš]ž`G‰ã,¾ª q\´=þŸ£Ì÷Pyk‚Öîw©Ã‚ÇNý*ö“£©O¡\ͧ›K{ r|Æ•XÌY€¡O¿8íÅ;/ëçþBþ¿þf”ZíâjÖÖZ†—öUºäºÜ Ê2C8ãКѷÔìî´Á¨Ã8kM…ü £98<ö5…£®¦Ú«Þêz5Ⱥ”²,¦hLpGœ…Pžp2q’}…l¦Õ´9`¾·6rÜÄñÉ9Läu9¤öS<],“·—¥Hð¨ÜÛYŒŠ¸ÝÈ °s´¾ïlñWõfòÞÔ^XiËyh óÚcr#qŸ”`’qÏ8õ‘imâKžÞXÊÎÅßiŒ9\ ¿pgiCéžõ.£§ßÅŸ¤Å§ÜÞið(›É–430à+naòñ“޹Ö@^e¹¼I,z^œ×’Éj·n¯(‹dg èrÇž=ºÒ^x®(4›=BÚÊâæ; ŒV0Ìæn€äô?Σ¸‡TµÕŽ©e¥™¾Óf°=¹™¡u$®NpGÌAÁ=;ÓfÐn¡ð=¾“\Æa-†$VlŽ:ÓVüWÿZÿ_#GZÔït¸â >;‹x£2Jïr#  N>”ºŽ´¶>:º@Ò/–’˜ì8b8<uª¾$·’þ²ê)·trùÈ‚7äg’cÔf™ªizÇÿ³‹}«PòcWmÀo`W''‡­ Ì}QnóÄúFŸu%µÕÑŽHöù‡Ér©»¦æhϹ©-|A¥ÞGrðÜœ['™(’'B«‚wa€$py©h××ø¡c·Üo¢mþuùȼsëŠ]fÆågÔ¯Zø,q޽*[·õä4¯o뱯§øƒLÕ'òm.KK³xI"xË/¨ G¸¢ßÄ:UÕð³†ì4IJ¯ÈÁ\¯P¬FÖ#ØšÃÒíµVMy¬M•½•±ýëJ¬e-P)àw縨´Oe-•µöŸxæÍ‰Žëû@´€Â2ùƒŒmã&©«;ÕÍiüOe6q>Ÿr™ˆ¯ïg·—ÊåÂðBüÞœf®Ýëš}ÚZÝLñÈå@c ìÉè ãhϹ¬OìmCþüzgÙÿÓ\ǽ{J®qÓÞªxƒHÖµ «èü‹Ëˆä’3jÑ]ªC ¤‡Œ°ÉÈ'8=¨ëaŸ}=Æ»«ÚÈÀÅlÑ€7&Oך®ÚííÍåÌ:N”/"¶s³Ip"R㪯8üI§ÙÝ[x“VžHÑ®„O¡‡U]¥Hëžþ•JÒ-[A¸½‚ -¯í'¸{ˆ¤ŠtFBç%X1yâ—ù£wâ-3O•`½¸ϰ<ˆœD÷™A =Î*Ž©¬][j7ñA"ùPéMuÊÏ–ÁÏqÀª×6z¼êâ 1nWUE!ŒÊ-å„*ùäŒü¹ïM—Ã÷ñKäD‚hŸF6bàmgƒÎ{f‡·õÙ_z5á!²²Óì¤Ô.žxR©9Æ[ =zT×^ ÒìÒ–ëp¸O2! 4¥×ûÀ 'õÍI¢jBâÎöK É3`–ÒÛÚßù2FÈO9”çÖ§ki<;z—V¶*öÇOX tíö’z¹å~nH=©É«·ëú“Ù]¹|K¤Coo;]æ;ˆüØü¸ÉOï =È­8fŠâæ…ÖH¤PÈêr„Wžéz-é±Òµµ»¹†M9!h­oM»¡°?yC) ë]f“2Z]G¢AdÐÃmf’’eÞc,H}zsEº]A>¿×Bͦ§ö­cP°òvýŒFwîÎýàž˜ã¦_x‡JÓn~ÏwtP¡˜fBÄ{œV`¦â]Vê-{È.„;)¢_º¤†`{ÔWVzµ½Æ°-´Átšª©Ó"ù-°!Wò3òç½'äWS^ÿÄ:^™2ÅupÁÚ?4áy0ŸÞ;AÀ÷4]ø‡K³HK ßhO2!4…—ûØPN=úU?F¹²Õá,<È"Ò’×ÍÈù[Ó¯JÍÒ4½_C[+‘§¦6 k4)2+ÄÊÌA¤ÝjõøÿÀûÉþ¿/ø&ž—âH†´ýCSœ,·@í fs“÷UA'ØUé-Q1[Ï%º¬²ëúXUÁ¦ÆzÓ8îiîÿ®ÿå¨tþ»Ÿ©Ùê°4Ösyˆ¬Q²¥YXv*@ ýE[¬.ÊâÛXÖg–=±\ÏÄrà#PNNAëZÔ†QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE…â¿ùÅÿ]×ùݬ/ÿÈ./úî¿ÈнýJý+|t¬ ýJý+|t¦!h¢ŠJÉÕ17Òµª•ä[Њâô)â)˜ƒ™8÷ö®ÃÎOWÿ¿mþÈj6—vò¼¶’É „`²W9qsâec³Uºê?ÂÏRó“ÕÿïÛ…rz¿ýûoð¯$ûgŠÿè/uú…lñ_ýî¿Oð [ó“ÕÿïÛ…rz¿ýûoð¯$ûgŠÿè/uú…lñ_ýî¿Oð [ó“ÕÿïÛ…rz¿ýûoð¯$ûgŠÿè/uú…lñ_ýî¿Oð [ó“ÕÿïÛ…rz¿ýûoð¯$ûgŠÿè/uú…lñ_ýî¿Oð [ó“ÕÿïÛ…rz¿ýûoð¯$ûgŠÿè/uú…lñ_ýî¿Oð YgWh‚î8|œ£ §Ô{Ôµä?lñ_ýî¿Oð£íž+ÿ ½×éþë’F’ÆÑÈŠñ¸*Êà ƒÔB"ÆŠˆ¡QFT`è+ÈþÙâ¿ú Ý~ŸáGÛÙâ¿ú Ý~ŸáE‚ç®",h¨ŠaUF‚^CöÏÿÐ^ëôÿ >Ùâ¿ú Ý~Ÿá@^¢¼‡íž+ÿ ½×éþ}³Åôºý?ž½EyÛëM ¹_¡#Šò϶x¯þ‚÷_§øQöÏÿÐ^ëôÿ õà€:EyÛÙâ¿ú Ý~Ÿá@½EyÛÙâ¿ú Ý~Ÿá@½EyÛÙâ¿ú Ý~Ÿá@½EyÛÙâ¿ú Ý~Ÿá@½EyÛÙâ¿ú Ý~Ÿá@½EyÛÙâ¿ú Ý~Ÿá@½EyÛ†þÑûÂíÿ¼+çŸøLuÿú Ëÿ~ãÿâhÿ„Ç^ÿ œ¿÷î?þ&‹ô7öŒÞhÇýá_<ÿÂc¯ÐN_û÷ÿGü&:÷ýåÿ¿qÿñ4\¡¿´cþð£ûF?ï ùçþ{þ‚rÿ߸ÿøš?á1׿è%/ýûÿˆ¢à} ý£÷…Ú1ÿxWÏ?ð˜ëßô—þýÇÿÄQÿ ޽ÿA)ïÜüEèoíÿ¼(þÑû¾yÿ„Ç^ÿ ”¿÷ÄüEð˜ëßô—þøÿˆ¢à} ý£÷…Ú1ÿxWÏ_ð™kßô—þøÿˆ£þ-{þ‚Rÿßÿñ\¡´cþð£ûF?ï ùëþ-wþ‚RÿßÿñÂe®ÿÐJ_ûâ?þ"‹ô/öŒÞhÇýá_=Âe®ÿÐJ_ûâ?þ"øLµßú Kÿ|GÿÄQp>…þÑûÂíÿ¼+ç¯øLµßú Kÿ|GÿÄQÿ –»ÿA)¿ïˆÿøŠ.пÚ1ÿxQý£÷…|õÿ –»ÿA)¿ïˆÿøŠ?á2×è%7ýñÿEÀúûF?ï ?´cþ𯞿á2×è%7ýñÿGü&Zïý¦ÿ¾#ÿâ(¸BÿhÇýáGöŒÞó×ü&Zïý¦ÿ¾#ÿâ(ÿ„Ë]ÿ ”ß÷ÄüEè_íÿ¼(þÑû¾zÿ„Ë\ÿ ”ß÷ÄüEð™kŸô›þøÿˆ¢à} ý£÷…Ú1ÿxWÏ_ð™kŸô›þøÿˆ£þ-sþ‚3ßÿñ\¡´cþð£ûF?ï ùïþ-sþ‚3ßñÂe®ÐFoûâ/þ"‹ô'öŒÞhÇýá_=ÿÂe®ÐFoûâ/þ"øLµÏúÍÿ|EÿÄQp>„þÑûÂíÿ¼+ç¿øLµÏúÍÿ|ÅÿÄQÿ –¹ÿA¿ï˜¿øŠ.ПÚ1ÿxQý£÷…|÷ÿ –¹ÿA¿ï˜¿øŠ?á2×?è#7ýóÿEÀúûF?ï ?´cþð¯žÿá2×?è#7ýóÿGü&Zßýgÿ¾bÿâ(¸BhÇýáGöŒÞóßü&Zßýgÿ¾bÿâ(ÿ„Ë[ÿ Œÿ÷Ì_üEèOíÿ¼(þÑû¾{ÿ„Ë[ÿ Œÿ÷Ì_üEð™kôŸþù‹ÿˆ¢à} ý£÷…Ú1ÿxWÏð™kôŸþù‹ÿˆ£þ-oþ‚3ÿß1ñ\¡?´cþð£ûF?ï ùïþ-oþ‚3ÿß1ñÂe­ÿÐFûæ/þ"‹ô'öŒÞhÇýá_=ÿÂe­ÿÐFûæ/þ"øLµ¿úÏÿ|ÅÿÄQp>„þÑûÂíÿ¼+ç¿øLµ¿úÏÿ|ÅÿÄQÿ –¹ÿA¿ï˜¿øŠ.ПÚ1ÿxQý£÷…|÷ÿ –¹ÿA¿ï˜¿øŠ?á2×?è#7ýóÿEÀúûF?ï ?´cþð¯žÿá2×?è#7ýóÿGü&Zçýfÿ¾bÿâ(¸BhÇýáGöŒÞóßü&Zçýfÿ¾"ÿâ(ÿ„Ë\ÿ Œß÷Ä_üEèOíÿ¼(þÑû¾{ÿ„Ë\ÿ Œß÷Ä_üEð™kŸô›þø‹ÿˆ¢à} ý£÷…Ú1ÿxWÏ_ð™kŸô›þøÿˆ£þ-sþ‚3ßÿñ\¡´cþð£ûF?ï ùëþ-sþ‚SßÿñÂe®ÐJoûâ?þ"‹ô/öŒÞhÇýá_=Âe®ÿÐJoûâ?þ"øLµßú Mÿ|GÿÄQp>…þÑûÂíÿ¼+ç¯øLµßú Mÿ|GÿÄQÿ –»ÿA)¿ïˆÿøŠ.пÚ1ÿxQý£÷…|õÿ –»ÿA)¿ïˆÿøŠ?á2×è%7ýñÿEÀúûF?ï ?´cþ𯞿á2×è%7ýñÿGü&Zïý¥ÿ¾#ÿâ(¸BÿhÇýáGöŒÞó×ü&Zïý¥ÿ¾#ÿâ(ÿ„Ë]ÿ ”¿÷ÄüEè_íÿ¼(þÑû¾zÿ„Ë]ÿ ”¿÷ÄüEð™kßô—þøÿˆ¢à} ý£÷…Ú1ÿxWÏ_ð™kßô—þøÿˆ£þ-{þ‚Rÿßÿñ\¡´cþð£ûF?ï ùçþ{þ‚RÿßÿñÂc¯ÐJ_ûâ?þ"‹ô7öŒÞhÇýá_<ÿÂc¯ÐJ_û÷ÿGü&:÷ý¥ÿ¿qÿñ\¡¿´cþð£ûF?ï ùçþ{þ‚Rÿ߸ÿøš?á1׿è'/ýûÿ‰¢à} ý£÷…Ú1ÿxWÏ?ð˜ëßô—þýÇÿÄÑÿ ޽ÿA9ïÜüMèoíÿ¼(þÑû¾yÿ„Ç^ÿ œ¿÷î?þ&“þ=wþ‚’ßÿñ4\¡ÿ´cþð£ûF?ï ùãþ=wþ‚’ßÿñ4Âg®ÿÐROûâ?þ&‹ô?öŒÞhÇýá_<Âg®ÿÐROû÷ÿGü&zïýþøÿ‰¢à}5Ïñ ™.•ºùÈxÏ_íªIÿ~ãÿâkKKø‹­Y]#]L.àÏÎ¬Š§Å@çëEÀú \5>±4N;ëh§‰·G"‡SêÈ­•9À£&ÈÍxÄ»ƒ-ýˆÏÝÿì•í:©ýË}+Â~ ·üL-¾ÿ²Ò`r›¨ÝQn£u!W†¼/¿ey;^šUQQŽ‚ ùNáß(犱£èþÔ4û餸Ö<Ë|ÙÚ/(#Ÿõ`Œöþ,W!ı#–Däír9ävúŸÎµ´MjßLÓµ›y£•žú×ÈŒ )ç–ÉsÛ4>¶ìø<-6¨>Õ¦K39KEÔ§Tšr!B‚ Î}*¶ŸáFü\3=­œvòùI{7–¾g÷ÁÉ«š_‰´”Ó´¸u[KÇŸJ•¤µkfP¯–݇ÏN@éD^(Óµ [ËMzÖèÃ5齌ٲîV<;ºŒwëEµþ¼¿à‡OëúìÚ'ÙtŸ¦£j¢öÁ!òÉ9ØYŽHúŒUOÃ&m?Lº³ŽÞÖÝt¸î.®&b¨\ú ,{*)¼ck}s¯›ÛI– N$HÄ, FSîç>½êwñžu£Úè×¶·/`–) •DÞ“¯GO›‘õ#üV¶þ¼Æ­ëÈMÖZ¿‡„Ѽ_o’áeš9‰f )^«2? ÜÜjòéö·ÚtþTFy.ã1F€àîlpGqŽõkLñu¶›máôóI&›,í6@ÖLýÞz€{â ²Õ´=7Ä {c6¹ooåœ2y>nòÙ ƒò”ÇcÎi½ÅÓúîcßAö+© ûEµÆÌ~öÚMñ¶Fx8®Ãijµ{-+I†Þ]JGEf7¬fl©$´DmUã9Ïá\¿ˆõKM_ZžòÊ×ìиa rÄ>Õ¯qâøGŽ“_µ·•¡UT1K…b6mn„¥ dr¥ï…µ6µÄ¶wQÜÎ-Ò[Y÷¢ÊN6±ÀÁªÚÎ6‡:Á=åŒòœ‡KY¼ÃáÆ?¡­Wñ.g–“kz¶qj };\”2¤|ªÆ0;šÁÖ¯ãÔµ»ëØUÖ;‰šEWÀ` ï‚i_ôþ¾ð |3}kv×;îÕ A?ïä@Ls×Ö©øWQÒ줺–K9Ò :ÛOæ4 zãõ¤½ñ$R]èV‘IæivñFâPvCž0O𫺗Š4£c©¦“iyΩ*Ér×,¥ » ŽO$õõ¦ÄŠ×>Õmle¹v´2Cš[DŸ3ÄŸÞdÇñ§ë^ƒMÑôëøoàÍŤsIo4£Îfn¥º3ëØÕÛ¯ér5þ¥ÚëÖ¿f—{©_â'Á¬½WYÒµ]Å$†ö=RÎÙ-©O!•OSüYÆzw¤ïý|ÿàþ¿ø&‘TòÀ}jþ™¦\jÏr¶Í›{w¸0‘•\gži4ÏêÚ=¼Ði÷†¦9‘DhÛŽ1ü@ö©¼5¬Á¢ê=Ô2KkqnöÒ¬D ØägŒñL  ðÖ¡q6•mn[TF’ ¹ 2wqÇášžO \Ú_é‘ÜÜ[Og{r°}¢Êo1AÜ ‘ÁëÛµ^OéÚÎ5­½ù²Ò¢’3æ„2¾å t8ýEgÇâX Ñôûhá•®-53{ó`#/P3œçð£¯õßü…Óúíþf‚xbÖ߯öúSOk}m,²¨….ˆt ¤!UÊ·ÓÐÕk¯ Û§…­uhï †YmðÜςေ ¿1ã¿­H¾#Эügm¯Zé`É$·1Ê#?3)fL“ÔÕIuÍ&ûÃQi×°ß-Õ£Ìö¯M¼’7çž¾•:òù•¥ÿ¯2Æ«¢ eðí¦™j>Ñ{aŒÆ÷9%‰>ÕFûÃwö_fd’Òö;™|ˆä³›Ì_3û„à`Ö„1¶¶¹Ð/c´˜ÝiÐ}še,6ÿäIgá-Bö1$w:z+ÊÑ[™.vý¥”àù\|Ã=ø¦iž½Ôi¤–ÒÎÞ ü‰òo,Ï(895§£xÒÚ×@¶Ó.äÕ-šØ¶Étæ÷€œáƒúgµR°ñ.›>­Å},Mxo#žÙ“ÌÞx;ƒpsýi­$.„.´·Ó¼U}iiŠÊAÐeÿ3X»ªÿ‰5hµ¯Ýê0FñÅ1R«&7 (ãéY{ª#{+”÷Зuª-Ônª.ê7T[¨Ý@î£uEºÔ.ê7T[¨Ý@î£uEºÔ.ê7T[¨Ý@î£uEºÔ.ê7T[¨Ý@î£uEºÔ.ê7T[¨Ý@î£uEºÔ.ê7T[¨Ý@î£uEºÔ.ê7T[¨Ý@î£uEºÔ.ê7T[¨Ý@î£uEºÔ.ê7T[¨Ý@î£uEºÔ.ê7T[¨Ý@î£uEºÔ.ê7T[¨Ý@î£uEºÔ.ê7T[¨Ý@î£uEºÔ.ê7T[¨Ý@î£uEºÔ.ê7T[¨Ý@Z]š_]1"À,ÁoAüë¡k-1£òÍŒ!}Bá¿>µÌi×¢ÖgÜp®'ÐŽŸÌÖŸ›dŠAn¤r"Œ~4€ÏŸN1ê¢Î7ʹõ {Ÿ¦å[qC§Á¾ô³q°…ia$àâ#×µaI|_QK¥ª|£ÔŽsüÍhEtI’HgkØhÉÇxzPMVÒ£†îÔ2A0Ï–Ç;3ü¿•t:~¥éV±5õ²O<„yWr!=½í“Ô×7w:Ë6ˆÛ–1Ë{ñ­¸¯aÔ¡T™Žïùkq¸úUïÅqã%(Å[n§«•S§9ÉJÎ]/ø‹«éú}Öž÷útŒ©"ޤÔÖ¹Õ¿¨_Çmc%ªJÒ3©L3dªž9?Ny®ouVR”–Ý ó8S…T¡½µ·sÝ< tN‰d¹éŠôHPW–x¿âUiþà¯P¶ÿV+´óLý[ýK}+Áþ!_ÛÀÿöZ÷[ýK}+Á¾!ÿÇý·üÿe¡Æî£u\Òô¹uYåŠ)­áBÓ<“³U^¿uIïéR6•<Ê5.p4¡¬â–Q@ÃeWhçïrKÐkS?u«GPÒZÚ{-„·Ý[G0E]͹†pëTg·žÖf†æ `•zÇ*aõšfê7RV–‰%æœ÷í}ckn³y9¸i-Œðµfî£uY]6î{‰ ²‰ïš.KÚFò.=~è }@«º®ŠšuÞ§šgû"®`$>ïï0á?´“ºÕ¡«è—ú%ÓCw¡CafòØG'ùXŽk:€uªÔztòésêј`‘c‘rw®ìàãÇuëÚ§¶Ñ¥–+9æ“Ë‚í¤ùq´²|ƒ“°™ã9ì}(;uªhlo.a’k{K‰¢‹ýd‘ÄÌ©õ `~4ÑkrÏ YËH»ãQeן˜ r8<Ž84ê7R˜¤X–VÄnHW*B±È¡ÆF~¢›@ ºÕ¥e¢I{§½ó^ÙZÀ³srî 63ÆÔnÞµÞ‘{g{£Be–U ‘ûÁ*ž…ê8?•@RÝFêÕÓô›Ë›ÛY`¹†æÞÙ¦Hv Œ.Ò3Îj„–7‘\ý–K;”¸Æ|–…ƒãÎÜg &€!ÝFêw“)dÉå»lWØv³qÀ=Ï#zšëO¾±ÙöË+«mÿwÏ…“wÓ f€+î£u%ZƒOžæÆîò3ŠÐ!1!ŽãŽy÷[uªËió®Ÿo{ò4W¼1ª’_r…Ïÿhcš¹§èwë0é÷ðÜÙ™ß÷‘l,0t⇠[¨ÝVbÓu íšæ ¹m×;¦Hc®X UZ]Ôn¤¢€u©( ÝFêJ(wQº’Š]Ôn¤¢€u©( ÝFêJ(wQº’Š]Ôn¤¢€u©( ÝFêJ(wQº’Š]Ôn¤¢€u©( ÝFêJ(wQº’Š]Ôn¤¢€u©( ÝFêJ(wQº’Š]Ôn¤¢€u©( ÝFêJ(wQº’Š]Ôn¤¢€u©( ÝFêJ(wQº’Š]Ôn¤¢€u©( ÝFêJ(Û¨ ƒœ ý)´PüÖõ¤/“’ü)´P‚f^‡ô Ìí÷°~ TtP‹“ôô¤ÝIE{WÃÿùÚ¸+Ô­¿ÕŠò߇ÿò ´ÿ®b½JÛýXªŸ«©o¥x7Ä?øÿ¶ÿÿìµï:·ú–úW‘k^¾ñwˆ¢°°–Þ9c†I‰˜.ÐÈ;ÏÌ(`qž¼ŽÆãQ–G€ìù•`¥]ˆ\7 ŸNõ&™©$ïªIp,íËéÒF‹I ±Ü¤ (ž¾õÕÂ’ñ/üÿi?÷öOþ7Gü)/ÿÏö“ÿdÿãu-_î·çþcZ}÷ü¿Èͳ¿±[«wiíÏ£-¬fIŠ” ¹R2ÈëéX"º–i­`’;$ðìO²\ÆÝÄà¹fÉä÷â»øR^%ÿŸí'þþÉÿÆèÿ…%â_ùþÒïìŸün†®ïýuÿ0NÊß×Oò<Öº½Vo ÍošQ¸ûps Ðãg—Œ/{Šßÿ…%â_ùþÒïìŸünøR^%ÿŸí'þþÉÿÆéô°ºÜç‘%—F›M‚þÂÖõ/ZâUK˜âŠEe]¥\Ÿ)åŒñSkW¶³·ŠLwPÉçˈ‡ÌÁ9+ëøVßü)/ÿÏö“ÿdÿãtÂ’ñ/üÿi?÷öOþ7JÚßúéþC¾–9_*Üj²ê0ÝÛÏmrÁ£Î×åy:¯§"¹úô¯øR^%ÿŸí'þþÉÿÆèÿ…%â_ùþÒïìŸün„¬8ßÜ·“XÝJ±ÚßÄmäw8T'”sô`Ó5­ý¢xÂÎî#=´r–[¶[=>g$þ"·?áIx—þ´Ÿûû'ÿ£þ—‰çûIÿ¿²ñº¿õýw¡™¥jQÇ¢éOd4ÓubÒ4‹wxðbŃUÁ ã*='\´µÓmõY^/·X3ÛÇoÝã‘Ãd@ £Û"µÿáIx—þ´Ÿûû'ÿ£þ—‰çûIÿ¿²ñº}@ä¼LöÍk¦X\¥Å­š6%CììXŸÈ¨ÿ€ÖzWü)/ÿÏö“ÿdÿãtÂ’ñ/üÿi?÷öOþ7I+g/an·þ’Î;»8§[ñ)K‹”‹åòñ‘¸Œóé[–›j`Ò¾Óm<éòÀ.]Ý"2¼›Êï0\ewq×Ò´?áIx—þ´Ÿûû'ÿ£þ—‰çûIÿ¿²ñº¿õå`Z^w3!¿‘領’]:ÑÓK’ÞÝá½Þ™,S+;s׿È/­l¯tkËøfšÝ'Iî#1#Y »‡P3“ŒšÖÿ…%â_ùþÒïìŸünøR^%ÿŸí'þþÉÿÆèµ÷þ·ÿ0¿õ÷‘—¦½¶‹™Õý—š·W.$†u•b-¢9+œ|Ã?…gêöóÛxJÍ.. ¹v¿™·Ãp&q?ˆÏƺ‹ƒ>)µ¸Iâ¾ÑĈr»Ø~F2 X¿øMãKËZ–É! F‹ž¸UˆŸ¥ \iÛúõÿ3ÊkBÔÃCÖÎmZgXDq\"Èçç ÙžœWWÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿÑbLÝ3]´1è“^(Z+‹ V–%tjÙcÁ÷ñíD€¶Õ´»[“¥Ál3,–÷­8Ré·æfvÚ Ç§sZ_ð¤¼Kÿ?ÚOýý“ÿÑÿ KÄ¿óý¤ÿßÙ?øÝ \iØÌ´‚â-3÷ ©ÚÙ¥´²™YîBœ y*?ŒôÎk’Ô¥†ãT»šÙ6A$ÎÑ®1…$?*ôi~ø²kh-¤Ôt–ŠÜ0‰|Çùwž|¾yõ¨áIx—þ´Ÿûû'ÿ¢Ày­è·?|Ekk5ÃÞée"Fv ,™ ñòUk„Úö¡eÔWzj£çäpx$sÚ•Õùz•Êùyºé_ð¤¼Kÿ?ÚOýý“ÿÑÿ KÄ¿óý¤ÿßÙ?øÝQ'šÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿКÑ^•ÿ KÄ¿óý¤ÿßÙ?øÝð¤¼Kÿ?ÚOýý“ÿÐAðÿþA6Ÿî õ+oõb¼ÛÁö2é‰ö ™[Wh\¡%K) ã=¸¯I¶ÿV)ˆÏÕ¿Ô·Ò¼òÛY‰îu#n×+_-[i;î-Ó‚ÞÏá^‡«©o¥p4÷Š®tû™$Ž,X³Dpß,ð8Áú­z‡â-3Ä6í-„ûš< aq¶H‰ìËÛëÐö4ýoY‹D±YÞ)'–Y ¥‘º(ÏëØRéšM†h-tûXàˆrBŽXú±<“îj‡‰ô»½BÚÎãOòÚòÂé.¢ŽFÚ²`TžÙóëŠ}¶¯7æ™m ~a˜^ G¸?(Áüê üQew¡ê·UÎë›Kg—d‘22¤©*àuÆ SÕSYñqhú+ØH†9£ûEÄn²²:¶ÏœŒdþU ÚV­®^ê7×N/¥Éc RL®Ò3î% GsžOJR½ŸõývmtjÂO§Øiš|šÑ[‹›u—dq4Œ~PY¶ $zô­õ>Yl¢Žé$kØÚKr€‘"¨GÇZæ,ìõ½.îÓSFk§“MŽÎkaq¼/89'iSžÇ<)–Ú­¢Úø~æU½žÇÏÑJ©1Ýò §’8«v»þ»ÿÀ"7²7§ñ^‹o;Ý9ß,ªÇo#³ìh‡KøH®5[‰ÿr°[ ê“«Ÿ«~ +£·õývûÎCJ4D‘‚Ä*€ 1$ãÔž¦±üCªË¦Ån°]ÚÁ,Î@[É;0'lqÍïé[U›©hÑê7V·kuqkum¸G4r±¸ÊÀƒÛµ ÏÛø¾öïG·0[À5õ§©’7Hà ’å £;O9ã5JßU¿Ñ®|Wwu¼×Ë=¬H"ÊÆìʪ§’Ì22{ó[ñxBÆ9íæós^Õ¸2,sâõàƒÔÒÇá+!§ÅÍÝÑÔ™y&uÜ@ Wj€¤`ŸõùÁ¿×Ÿü?JþÒnWSkW”iiµí‘‘HóøX’sÞºóœqÖ±ôÿÇc«KªI{ww$k†Lm#U@ë[º%ýnÅÕ¿ëdr:k²x£ZŠãTµ–&ˆ4ep0bæR߆ɿš¾8Ž Sv¨5H¡¹vù{âf\uÈÎܞƷDHµ¹u;{Û¨}¦x¡ŽR£ÊHãû¤t¬ûŸi7S]K!¸ÝswÛáÆ'ðŽ>éËdwÜhßOëúê=Š’ëÚô¯¨-¤Zz.Þ7¹Y‘Ï!M쩆ùÎîµÓiש¨é–·Ñ©T¸…eU=@`?ZËÔ|-k¨]ÜÜ ËÛ_µÆ#ºKiVu ÙRGR+fc¶·ŽP$Q¨DQÐ01v9ßË©[èm>õ-¶Ëså±s™ 0uÀää`äqÅVñZê1é:P–[[‹Ïí[}Œ‘4Q“»Œ‚ÌZèõ]2 cMšÆä¸ŠP2ѶH ‚¨ ­.†·6–°^_ÝܵµÊ\¤²ya‹)ÈjÃ>ô–ëÕ~ƒÿ'ù´GS»ŸVÓ®šÑo¬U'Š&òØ:nRP¶xç#w>¢ªè7ÒÅámJëɶYíç»$BŒ¨îŽß6ÒÄŒ‘’3Þµ†Œ‘Ýj7V÷w\_lß"l%6 ¡”Žž ÕM?Ã+aiwký«qot%ßÂ’Ì ÆrO|sÒ“½» ZêýÊ:Wˆ5W¹Ñ¿´–ÌŪZ4ê¶ñ²´Lª­‚KÀƒè1ïUmüM®M‹¨¬ŸªÝ¬IGóbŒ† –Ý‚H_Azè"Ð-!“Iu’btÈZA#æR¡Nî98¦+™‡Ã7gYÓ¢†ÛP·Ó¬oZáVââ&…W ¯ÏÉ?ÇÐgzsi·éò'^_?ø„Þ"¾Ä²XÏ5•…ºÎ‘·Vòn¹R%%È@rHäWWX·¾Pº/u©_ÉleY™tò·)ìdØ­ª•°ÞáEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPžéŸòÔ¿ëöýÕÝ[«ÂéŸòÔ¿ëöýÕÝ[«Ÿ«©o¥ržñ]L},dù:êõoõ-ô¯>MZãCÔu JÚ8äš+u@’gißq žžÄЬÑX^ñM¯Š,ä–&†X[dÈë•VöqÃ?P)ž.Öî4=:Ökim!i®ã¥»Ç¶rÇ ½1ë@ÉÇ®\=½Œ¯­Ø],Ú„vâM.ÈÙ”}Ò6;ŽGUñ£cnò*ËxÒx‚[O,`¿•󩸀:¦š_×Ýþ`ö¿õ×üŽîŠÃ»ñ³¤I~tϳy1­­ôw2ã* ƒŒ¼ŠÅ—Âúª$æÚ[6’=_ûJ×Ìf³ÈøoS‚3]•-6þ¶ÿ$_ë×üÙÅê¾½ÔµHuy´ýòå­„ÚÝ–hÔ†$4o°žä¯5«§hRÙkÑ_,v°[¦œ¶¾D\9c´cîóõö­ú(ZmýW¯õýv (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€)kò¿ÿ¯i?ôXþÿ‘v×þÿ¡µlkò¿ÿ¯i?ôXþÿ‘v×þÿ¡µs¿ã¯Gù£­º¿ñ/É“7Š7j–vº.§vm%K$"›Š†ãt€ô#µj]êš}†>Û}mjvoÄó*|¹<ž™ gÞ¹­3Ãÿiñ¿utÚ•¸kåh¼«©aIFœáH ÎFy銽w`gñövö¬ñAa0YJeQ˦9è3úÖëU?ò¹ÉßúêjϬévÖ‘]Ï©YÅm7ú¹¤UèÄàÓîu+;E»º½¶‚Ù±¶ieUCž˜bq\¦¿a<>+ŠýŽ£‰²ò#}>Õ. o¸– n@`G v梋MM1¼;r¶ºÆ›j.$Öû扜åXÆ‹ÀûÀaxt¦µ@tú&°šÔSGªCu%º•}áœnëBYc‚&–i8ÐeØ£Ô“\ç‚-ÞßK¾ e-šI¨Ï$PËB¶WƒÛ£âG¼Mé¬-Ö{Œ(có8Ü7¿Ä@ɹ=—¢üný_æ[²Ô¬58ÚK Ûk´S†h%Y>„ƒV«‰ðìCÆ×9Ôfµ}=SívbÜ3‡û N€÷ëÚ»jצ&…â{nÞ/ßÛCy&ÿôO=Z@Šçqž•·^g¤ÙÎúV‘¦Ç£^[ßê™'’Õ‘V1#ÛÈÇ+òã9ç¦+Ó(épz;Èj¾“PÕ'»¾q#guÖ˜ÒHxÇÌÂAŸÊºm:ÔÙiÖöÅ`SÛoÈÆ?º¹8Ù4-ƒ©%Íͽœ =ÔñA rÒJáU~¤ñY×ÚÐ]]SIû£JÎÄ]mBª 8eVÉã§ëT|Um+Üè÷¦ÒKË;;£%Ä&öÁBÂÿÒAÀç¿j·.Í[úŠYZMO¨«4v+Œ•`âGjNü­¢•¹’eë]B9ôˆ5ŠA¬Í½Æ$ã¦zÒÙjvœm%…õµÒ)Ã4«€} ¹´½¼“ÀB;->ãí¶ÐE ÁufÀ‚6†*¬“$c *ž‹mp|[{;NâÎM0!žæÌ[ï`ÿu@Däq‘ž}*¥ñ4¼ÈùSg]k«é—×[Új6—G÷ã†uv_¨"„ÕôÉ/Í‚j6x3›uLƒþœ×-áeº´Ôíì-b¼“J†Ù—̾ÓͼFÔ…ßžsØÔzb\XkðZé_If÷RÉqîžP@q.“`ùŽË Pú3¹¬­kV—L6Q[Ú­ÍÍåÇ‘<¾Zƒµ˜–l1 zZµËø‚&‡Å>»’áÞºhE»à"1‰ðà€î1É#ž¥ÕFt븨ÜlrÈ–Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(€±ãÄý}Ëÿ¡šíí¿ÕŠâlÿäaÔëêOý×mmþ¬P~­þ¥¾•çòjwZïœzQµþµðÿ_‡üÖ:¦¬þ.Öm|¨fÓ­äˆyö4 ÄíP‡vO<‘M´ñ„Ó›+©´¦‡J¿˜Cmuç†bNB(lqÉê3Џº ÔýÆ¡k¨ª[]ìûU´–ûË•]¿+îr1žJ§iàù 6V³j­6“a0šÚ×È ÀŒ” &~`¹ãÐdšKÿ]ÿà~ ÿ¯ëóü]xÆæ#5Ͷ&Ó »[G¹{ŒÎ\!*›N@cŒ’:½§k׺åøM6²´šX<÷ºÃ3§ûx×5Êêzmó^M¤im~mgÔ’áá—Na~ð;°œ»r Æ í]Røf3£kl·LÉ©M4Œè»LbNÓœ~´—ÃêúÁµoêÚÿÀ(XøÝ.N§°Z™¬m ßúòÜ#¨ÎA`£kdt#½2ëS\[Û/‡aóîm~×þÐZ1Œäùy ó/Ç=jH<tñîõ8$iôã`žE—”Oñ¼äþU¥o }ŸQÓnþÓ»ìV-g·ËÆüìù³ž>çNzõ§ý~ðúü¿à—4mR=kGµÔbF'MÛªž„¡Í^¬íJþÄÑm´ï;ÎòAfݹËÓ'Ö´i»_@AER¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(–±ÿ Kÿúö“ÿA5áùmàúVƱÿ Kÿúö“ÿA5áùmàúW;þ:ôš:×û«ÿü™ÒÑEÐrËø¦é/md‚g{X¢‘¦´†üÚJÇŒ8aŒ‚0HÔ)ªý¦çÁóÚÏt¶wbL‰œî“÷D¨~pÇ#=ýhZ×Q^sö»H¤#S¼I®]ž –Så¬NB†î‚¡àk›¹' q{sr'Ó-nÛÏ”¾$báˆÏ@p8qB×ðüUÁéýyØí¨ªº‰˜i×ßÏó¶ŸgdÏû!þ\ýx®oI—[mRtÞ"0äîûT6+Oâ1üß• {Úç]EæÚþ­wßk{ÜÄ–·ÂßÌ›S`¬Á²­¸R¤z{еv—=&Š+–ñöµioØ-aòMÕ°ó¾ØÑ¹&U „?)èNzÁé@MV¼¿¶°›™<±4Ë)9và)l¤»–ÕZúÞ+yÉ9Ž)Œª=>b«ü«œñîÃ¥é‚K†·Cª[†™[iA»¨=¾´uKÍ~`ºüÎ®Šæ|;$‘kÚÖ›Ü÷VVÞKFóÌehÝ”–Mä’z)ÁeÁ<õã¥Þ+Ö4)5uHìne‚Úaû,R -$… –$3Ç'Òëõ·¢¹¯ kº†§{uk{e‰Hîc³šÝ9vËÎF òjéh¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(–±ÿ Kÿúö“ÿA5áùmàúVƱÿ Kÿúö“ÿA5áùmàúW;þ:ôš:×û«ÿü™ÒÕkèµ wš%uUšXHpÝ~Sjç/þË£øöÂé )öûib›ìñi$ …YÕFH#qäŠÔðÏü‚§ÿ°…÷þ•K] kœl\¾ÒtÝL¡¿Óí.Ê}Ã<+&ߦGû:ÆöÙm®ìíç·\±+(ÇNÅY¢€*E¥éðª,V6Ñ„s"……FÖ#‡ ô© ²´µ ÛÚà ¬@Ç\"ç Ça“ïSÑ@Q@P›CÒn.^â}.ÊY߇•íÑ™¾¤Œš¿EŒŠã¡†AÁäRÑ@Csgm{ŽêÞã ,¨:õ5^ÒÂÓO·ò,­`µ‡$ùpFsë€1PéM¶‹§%•®ó–bîrÎÌI,O©&¯Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ŸüŒ:ý}Iÿ¡ím¿ÕŠâ¬ÿäaÔëêOý×kmþ¬P~­þ¥¾•ÎøDñ%ð äÏûº-[ýK}+ð‡üŒ·ßõÃÿfÝUKJƒU‚w‘~Ër—)°–^€ä9«ÔP+xbÉ­e·2Ül–ü_±Ü¹ó‡ÀãîäzKÏ Xß> òÉp¯|ñHÌŽâÆÆN8#óšÛ¢ëúûƒÌæ.<+:^ª$kýZ{ІA$±¤ŒSîí`T޹ö¬í'·7÷Z¤ºâ^ýžêÞ+t[ˈÞq±‹nÌCjà‘Ž§#&»pêY”0%zŒô¨lï-ïíRêÖU– 3µ×¡ÁÇô£Ì:X­¥é’i« “S¾¾ÝŒ¶BTMª?\Ö…PEPEPEPEPEPEPEPEPEPEP-cþ@—ÿõí'þ‚kÃò.ÚÿÀÿô6­cþ@—ÿõí'þ‚kÃò.ÚÿÀÿô6®wüuèÿ4u¯÷Wþ%ù2ØÓ¯fñbês‹xímížU$fwÞÊK0*ãn0 úÔ¾†X4Ù’XÞ67׎©«\ÈTý PkVŠèéc“­ÂŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š(  ÏþFGþ¾¤ÿÐv¶ßêÅqVŸò0ê?õõ'þ„kµ¶ÿV(?VÿRßJó›è..,õ˜­bšYŠÛíH.qqãô¯FÕ¿Ô·Ò¹ïÿÈË}ÿ\?öa@þ¶ñ¶˜WÄÈùJšT_Gqæ}ɪÞ?·ký&ÃOIž»Ô!ˆHW’ÙM¹®®«]ØZß=³ÜŽ­¥EóµÀ <ÖŽ«äÜó]sX½×t¸¼ÂжˆñK¨0äJ/ÓŸñZØñ/‰/¬¯®gÒç¿’;bŽæ1o ¶ŠåY›g >îqÅu÷š]•ýťͺ473*åKž9$`çùUß èº…Ü—WŽe”©“dò"ÈW,ªÀ1AéM=UÂÆV•mq/Žc¬n«ÜžµÚË i³j˪4 /PdIc¦åÆ{ƒKƒ¦Ãmem¶"±—Í·]íò7#9Ï?xõÏZK§ÈSFŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š(  ZÇü/ÿëÚOýÖ?†?ä]µÿÿèm[Çü/ÿëÚOýÖ?†?ä]µÿÿèm\ïøëÑþhë_î¯üKògKEWAÈQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEpVŸò0ê?õõ'þ„kµ¶ÿV+Š´ÿ‘‡Qÿ¯©?ô#]­·ú±@ú·ú–úW3ákˆm|A}-Ä©b]îÁFK€O© ~5Ójßê[é^{>u«A¬YYÀ'žD€¬d€ ãc’xÆ Z¨®.`´ŒIs™41ÊçQdRISo‚®lqíÒšÖÞ_3Ð"º‚iæ‚)‘å€*’„ŒŒþÓo¯­ôëGººr¡˜)ld€8ž¤W+¦Û[?uù¦ºš)ã’ÜÇܲ+ƒ  7 õ²¢k¨¾¾²5-E¯® ow»r÷à|£8^8ã-mòÑè®\¿¹·ñoØ¢Ôn“IžHMüªÍþˆç;_9A&tÎxÝ]õ%ª¸u°QEQEQEQEQEQEQEQEQEQEKXÿ%ÿý{Iÿ šÇðÇü‹¶¿ð?ý «cXÿ%ÿý{Iÿ šÇðÇü‹¶¿ð?ý «ÿz?ÍkýÕÿ‰~Léh¢Šè9Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š(  ÓþFCþ¾¤ÿÐv¶ßêÅqVŸò0êõõ'þ„kµ¶ÿV(?VÿRßJç¼ÿ#-÷ýpÿÙ…t:·ú–úW' j6šN±¨ÞßL°Û$*­#…Ý"¨Î=È D¨å·‚v¦†9 O¾2êÆÆ23Ðòy÷¥ŠXç‰%†D’7•Ñ =Aj;ÛÛm:ÒK»Éã‚Þ1—’C€(÷ðÝ@ð\CиÃG"†VúƒU.tM&öénn´»)îe–ÝÆ:`‘š¯§xŸHÕnMµ¥Ù3…Þ"–'‰™}T8â¬hº¢kZE¾£ML Ç$`‘ý(YtÍ>âö;Ù¬m¤º‹ˆçxTº}ŒŠ_ìû/± /±Ûý”tƒÊ]s÷q޼ÒÚ]›±16óÁåJÑþù6ïÇñ/<©ìjÅVm>Éâž'³·hîtÈbR%Ñ£YäHYZRv³£ãÙMwš·ú–úW=àÿùo¿ë‡þÌ(k¾‡Âö2CÔ×JÛä,vÆý„è¿©=ɨ&×t$Ñ&rÚ]‰î"RV¶0*ÍØ¶@ÇZæ¼:šRÛh ¤ÿ„€^¥ù9Þ!ÜÞ`—Ñvã÷Æ+Öé“Fe‚HÖGˆº•&7.{Œ‚3õ-sÌu´b^íuK/øH¦ûcÎeŽ&óvîÛ²d~Ÿðô];S²Õ­êÂæ;ˆ€èsƒè}±æ Ö5fÒ-ÄÿÙ×—ˆ3ý”!ØÎNæ_Ó5á­7ÖïŒMæKƒ4òÒJGBOôsUF“G½DRÎÖòU$í< ™6“h¨¤ÚL˱ñu…Í’^ÞG.•k*«C.£$Q¬Á†FÜ9í뎵§u«i¶6ñÜ]ê–ðËþ®IfTWúpk›ûR×Aðå£C{§ØBܽ½€¸™$ !B­´›'olqTa±žËÂÚæ J=ZÖ ’sN¤û’&>\ápr¸õ«–úµ±Ùp/ˆÞÅÚ³M<^ËcøÈëœmÀÎjÜÚÖ•mäyúœ_hþu_4…ryü+…Öô­kTÖm/ýÖ— —6%O•pÁË4‡qÔAÀÈÅ]×%•uu}&ÇQmFkh—ì³iÌðÈ›‰ÌGî˜dää} ¿®¬?¯Á݃$ ŒJZC (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ «7úÖ«UVoõ­@¨¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠàíäbÔ?ëæOý×imþ¬Wkÿ#¡ÿ_2èF»Koõb€3õoõ-ô®{Áÿò2ß×ý˜WC«©o¥qºf¡s¥^j÷Ö–_m’ mæ3ae 3ƒƒÈ8Ç8 J¢¹? xÂïÅW ý•½´ N—F@XôP /nOÚ.™L-¼Š°»Ÿ1—r¨I"½`¡³0N?ˆPc¥é6:-¡µÓíÒL!UþóŸðöÕŸâ‹ Ë»k ‹DóØÞGr .È €Oá»úV‡ÛŸþx¯ý÷ÿÖ£íÏÿ±y¨µüºkÛyºÌF'š6d‰"ØXíb:Ž€æŸ¨èZ°Õ¯u k/8&«oyBTS2,!œ’zã¥unùâ¿÷ßÿZ·?üñ_ûïÿ­BvÛúÛü‚ß×ßþg;y¤êZ¾£}pöfÑnôV´I¶JY¾S´žÄŽ*9mu»ÍGWѤ†ãL»Þ&¸ŒùªªUŠØïžpk¦ûsÿÏÿ¾ÿúÔ}¹ÿçŠÿßýj·õçÔ¿õåoÐãmü-q§qm{¦ßÞZÍ~×)q¦R÷‚ñ2ŸE9À¢÷F×"Ó5  ,ÜÅsö¨ïRxÕB´¢BX†ÈÁž+²ûsÿÏÿ¾ÿúÔ}¹ÿçŠÿßýj–òÿþ@Õÿ¯ë¹vŠ¥öçÿž+ÿ}ÿõ¨ûsÿÏÿ¾ÿúÔvŠ¥öçÿž+ÿ}ÿõ¨ûsÿÏÿ¾ÿúÔvŠ¥öçÿž+ÿ}ÿõ¨ûsÿÏÿ¾ÿúÔvŠ¥öçÿž+ÿ}ÿõ¨ûsÿÏÿ¾ÿúÔvŠ¥öçÿž+ÿ}ÿõ¨ûsÿÏÿ¾ÿúÔvŠ¥öçÿž+ÿ}ÿõ¨ûsÿÏÿ¾ÿúÔvŠ¥öçÿž+ÿ}ÿõ¨ûsÿÏÿ¾ÿúÔvŠ¥öçÿž+ÿ}ÿõ¨ûsÿÏÿ¾ÿúÔvŠ¥öçÿž+ÿ}ÿõ¨ûsÿÏÿ¾ÿúÔvŠ¥öçÿž+ÿ}ÿõ¨ûsÿÏÿ¾ÿúÔvªÍþµ©Ÿnùâ¿÷ßÿZ¹“ç {š@^¢Š)€QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEÁÚÿÈŨ×ËÿèF»Koõb¸»_ùµúùý×imþ¬P~­þ¥¾•Êxxã^¼ÿ®Cù×W«©o¥r: Æ»yÿ\Çó ³uªÔn¤2büWá¿ßkR[™µ} ZGpÖ1£} $w—®~íu¥¸¬o é/£èpYÎ!kˆË’ñò>f$r@= aÐKoZ\i³jOg}Œc)<¨¸˜îÚbI'Œ)ÃÅö)ãÞ[ÞYIhŠïÄc{+)P¤ƒ“Ç^µš|/,þMâhDé†x÷Þ22;†? <ºUÕ¹Óô2éŒo¶ XF 7åWŒÇ=èö—®]j>1ž -¯làKqotªã!†ÒGN:ö®£us:eެ|C.«ª $-h¶Ê–²;ç ['rŒuéÍt©ô_×Qu×DMºÕê7R6ê7T;¨Ý@n£uCºÔ6ê7T;¨Ý@n£uCºÔ6ê7T;¨Ý@n£uCºÔ6ê7T;¨Ý@n£uCºÔ6ê7T;¨Ý@n«1Æ*†ê»nsþ?΀4袊b (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€8;_ùµúùý×imþ¬Wkÿ#¡ÿ_/ÿ¡í-¿ÕŠÏÕ¿Ô·Ò¹ ۭψoQË!Ïï éõoõ-ô¯?“SºÑâÕﬥX§! î¡€ „øWO«©o¥sÞÿ‘–ûþ¸ì€;šÍ×ô®h·œ`y0c˜.ã© ­Ž3‚iQCW“¿ð-µî“¤Ø-ÛÅö’ɸCƒ"·;8'Ôã•äkˆÝÕ cœÊy9êkBM6]~h¯§‡RÑ/mƒG¤Ð³:6 Ԍמ*{ ÙiÿÙ~T· tÕ•b.Àîó>ñn9ü1Bóþ¿­ÉÕQȺþŽâ{WºÔ¯¥†Ýã•-K ˆ:´ýÝÝFq»GÏúî'åýv7¨¢ŠQEQEQEQEQEQEQEQEQEQEVoõ­Vª¬ßëZ€-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEÁÛÈŨ×Ëÿ:í-¿ÕŠâí¿äbÔ?ëåÿv–ßêÅgêßê[é\ï„?äe¾ÿ®û0®‹VÿRßJó›è..,õ˜­bšYŠÛíH.qqãô ^¢¹ß[xŠÛL+â ˆä|%Í*/£¸áÓ>ä×E@Îø›Qšmlln5¾˜<‹ŒHÌ‹€Ky¿(‘ÜÆ´Öõj×Ã¥ûXËíq,P£11ôÀ`ÀdеµvÍ$±‹ˆŒàJ¡ÆS=7Ù÷¤–òÞ¨-d•Vy÷õm£'JàŸ5¿ÙÑC‚àr€õÇ=)-Zóµÿ¯ëC¿¨ÞxcŠI^TX㻳¹=±\:J{‹ {·‚A­ü…Š Ƶ‹1o0>2xè0zÒé±]A¢øªù/äò’æûmᓸåw¡8ö¥}/åËüÇmmçoÏüŽö9XÖHÝ]VSAèA§Wk{ªj·ÖZ]®£ýœ‘ipÝI$PFÍ+>F`T(ÛØw+±PU3n `±ïTÕ™)ÜZ(¢ÂŠ( Š( Š( Š( Š( Š( Š( ªÍþµªÕU›ýkPª(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€8Koùõúùç]·ú±\e·üŒz‡ý|¿ó®ÎÛýX  ý[ýK}+žðüŒ·ßõÃÿfÐêßê[é\Ï…®!µñô·¤QˆUw».>¤øÐ}T55dòÿ²í¬¦Î|ϵ\¥om¨ÚXH[Ï»bqòNOnµn€3§Ð´Û‘~&µYøQr‰møÀôÅ6×Ãúm”–²C ›íK˜ZIä®ðrÌs^ªÝÕõ½‘€\HPÏ(†<)9sœ'Š«m®Ø\‡Ä¾^Û¶³N7ʽBú÷ü¨^_×õp~×õ`ƒAÓ-®¢¹ŠÛlÑI,¨Þc4§.qžÿ§lPº˜A Ûb8.MÜcÌo–RKëÏ,xéÍZûu¹ÔM‡˜~Ò"óŠm?s8Îq޽³š±G`2[ÃZKj‡RΗLâFhç‘Øt,ŠÁXýA¤o i wurmXIv¬³…žEGÜ6±(nHïŒÖ½“yá"ù-–{VÍ´~T/Ϫwr°b8èMjF‹kd*€£'< uQEQEQEQEQEQEQEQEUY¿ÖµZª³­jµEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP mÿ#¡ÿ_/üë³¶ÿV+Œ¶ÿ‘Pÿ¯—þuÙÛ«Ÿ«©o¥yìúuÖ­±egžy±’`'ŽIã½ VÿRßJç¼ÿ#-÷ýpÿÙ…køCAÔ40Ûê›] ¤#”€uXüÄ}p=®ŠŠ¡¨ÁªMåÿfßÛZã;üëS6ïLa×ýhŸñU´W~*ðì3ÝOm[’d†s}ÕãpÁ•¯u…“6¥4–VúÿÙ–í¥ÿ[Ûø†ã·'®u©£Û/Ä+§j¥[1æÄ* ú3?>üUö°³{/±=¤ i·oc}w£töÇZ—NÔìµkEº°¹Žâà:àúCìy«TON±–Æ'Iu»ÒÍ÷;2¾Ãb¨Å\¨.ïm4ø ÷·PÛB “HAúž* µ.ÚÚ™õ+8 ›ýT¯:ªÉþé'ð  ÕGRÓ¤Ô1¥{bP“ºÕÏc¹XU{ÍYà×ô›Ö7Šõ&f“<ŠÇ×5n=SOšùìb¿µ{´ûð,Êd_ªç"‹š^™o¤X%¥¶ò™ÙämÌìÄ–f=É$š¹UŽ¡d"yMå¸$ò™üÕ¾q´œðr@Ç\Ó#Õ´ÙoÚÂ=BÕï;­Öe2 uÊç4rŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( ªÍþµªÕU›ýkPª(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€8Kùõúøç]·ú±\e¿üŒz‡ý|?ó®ÎÛýX  ý[ýK}+ˆ³Ñ›_¸Õ4Õ¸û9–8›ÍÛ»nÉ‘úÀk·Õ¿Ô·Ò¹ïø©o¿ë‡þÌ(¢Ð<5¦ørÝ㱉¼ÉpfžCºIHèIþƒµèªŽiªùj7?»Îß&êXzúìažèļZö©Ma=õ…²Ì²G FVØ.ר9=p8ÍQºhâñ j×-íÖŸ>ž!‚4²gxX1,­2»‘Ûšê´í.ÛK‰ãµ3ívÜ|ë‰&9ö.Ä®Q`8 7JÔ´áá?>Öqå-ÌnKý›Ìæ0ØèÀÏAŠ­§i÷ÓAÒ“Fº·Ôì/V[«Æ€¬xïa/GÞ@Içž•éS¾·þ»‡CÎo"¼‚ÓPÑN™~óͬ­ÔRÇlÏFfGÎð00È8é]'…lžßû^IíZ)$Ôçtgid$`‚zƒë]–‹úòÿ zÿ^¿æQEQEQEQEQEQEQEQEQEQEVoõ­Vª¬ßëZ€-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEÂ[ÿÈǨ×Ãÿ:ìí¿ÕŠãmÇüTz‡ý|?ó®ÊÛýX  z’n‰«Ž·Ô¿á¾¼½ò<÷1ª,[ÂË®pO.O=qŽõÞ\E½H®cSÑÄùùhúxßí¼š”P±1È~eö8Èü/ü'ÿ Í·æ¸› «±;?J­ÿrÿÏ?Ò€;ÿøN<3ÿA›oÌÿ…ðœxgþƒ6ß™ÿ à?á_ùçúQÿrÿÏ?Ò€;ÿøN<3ÿA›oÌÿ…ðœxgþƒ6ß™ÿ à?á_ùçúQÿrÿÏ?Ò€;ÿøN<3ÿA›oÌÿ…ðœxgþƒ6ß™ÿ à?á_ùçúQÿrÿÏ?Ò€;»hf—ìÚÕÚ6/Í-·v8Î9ÆhƒÇû<hÖ¬¼í£ÌòÉÛ»ã<ã5¿óÏô£þåÿž¥wÿðœxgþƒ6ß™ÿ ?á8ðÏým¿3þÀ¿óÏô£þåÿž¥wÿðœxgþƒ6ß™ÿ ?á8ðÏým¿3þÀ¿óÏô£þåÿž¥wÿðœxgþƒ6ß™ÿ ?á8ðÏým¿3þÀ¿óÏô£þåÿž¥wÿðœxgþƒ6ß™ÿ ?á8ðÏým¿3þÀ¿óÏô£þåÿž¥wÿðœxgþƒ6ß™ÿ ?á8ðÏým¿3þÀ¿óÏô£þåÿž¥wÿðœxgþƒ6ß™ÿ ?á8ðÏým¿3þÀ¿óÏô£þåÿž¥wÿðœxgþƒ6ß™ÿ ?á8ðÏým¿3þÀ¿óÏô£þåÿž¥wÿðœxgþƒ6ß™ÿ ?á8ðÏým¿3þÀ¿óÏô£þåÿž¥wÿðœxgþƒ6ß™ÿ ?á8ðÏým¿3þÀ¿óÏô£þåÿž¥wÿðœxgþƒ6ß™ÿ ¯/Œü6Ò5‹l½\Gü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð£þ ÿÐfÛó?á\ü!Ëÿ<ÿJ?á_ùçúPÿ džè3mùŸð©SÆá58[ýÐÇúWž/ƒÔõ¥iØø`DÀìý(ZÅV}Zêâ3º9&fSŽ ž+®·AYu‡£ŠÛp(Äf¢h»QEDlÐöŸbOîŠ( ìIýÑGØ“û¢Š(ûtQö$þ袊>ÄŸÝ}‰?º(¢€±'÷EbOîŠ( ìIýÑGØ“û¢Š(ûtQö$þ袊>ÄŸÝ}‰?º(¢€±'÷EbOîŠ( ìIýÑGØ“û¢Š(ûtQö$þ袊>ÄŸÝ}‰?º(¢€±'÷EbOîŠ( ìIýÑGØ“û¢Š(ûtQö$þ袊>ÄŸÝ}‰?º(¢€±'÷EbOîŠ( ìIýÑGØ“û¢Š(ûtQö$þ袊>ÄŸÝ}‰?º(¢€±'÷EbOîŠ( ìIýÑGØ“û¢Š(ûtQö$þ袊>ÄŸÝ}‰?º(¢€±'÷EbOîŠ( ìIýÑGØ“û¢Š(ûtQö$þ袊>ÄŸÝ}‰?º(¢€±'÷EbOîŠ( ìIýÑGØ“û¢Š(ûtQö$þ袊>ÄŸÝ}‰?º(¢€±'÷EbOîŠ( ìIýÑGØ“û¢Š(ûtQö$þ袊>ÄŸÝ}‰?º(¢€±'÷EbOîŠ( ìIýÑGØ“û¢Š(ûtQö$þ袊>ÄŸÝ}‰?º(¢€±'÷EbOîŠ( ìIýÑGØ“û¢Š(ûtQö$þ袊>ÄŸÝ}‰?º(¢€±'÷EbOîŠ( ìIýÑGØ“û¢Š(ûtQö$þ袊>ÄŸÝ}‰?º(¢€±'÷E9mPv¢Š™c Ú¤¢ŠÿÙnip2-8.7.0/doc/html/figs/snap12.jpg0000644000175000017500000012313513341773367013611 00000000000000ÿØÿàJFIFÿá°ExifII*JR(i‡Züÿÿ)( üÿÿ)( 0210‘ 0100 ÿÿ È -ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀ-È"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?÷úBÀPdzo¯RÞ6v`ª£$“ÐPÖW½DowãZ·Å;É.tËxE¸8Y&‹ûàÖ²ÏÄq»Yÿß—ÿâé\xûjxQöÔþð¯ÿ…®zYÿߦÿâèÿ…®zYÿß–ÿâè¸õöÔþð£í©ýá^ ÿ \ÿ§?ûòßü]ð±µÏútÿ¿-ÿÅÑp=ëí©ýáGÛSû¼þ6·ÿNŸ÷å¿øº?ábëôéÿ~[ÿ‹¢à{×ÛSû¶§÷…x7ü,]oþ?ïËñtÂÅÖÿéÓþü·ÿEÀ÷Ÿ¶§÷…mOï ðoøXºßý:ß–ÿâèÿ…‹­ÿÓ§ýùoþ.‹ï?mOï >ÚŸÞàßð±u¿útÿ¿-ÿÅÑÿ [ÿ§Oûòßü]Þ~ÚŸÞ}µ?¼+Á¿ábëôéÿ~[ÿ‹£þ.·ÿNŸ÷å¿øº.¼ýµ?¼(ûjxWƒÂÅÖ¿éÓþü·ÿGü,]kþ?ïËñt\yûjxQöÔþð¯ÿ…‹­Ó§ýùoþ.øXº×ý:ß–ÿâè¸óöÔþð£í©ýá^ ÿ Zÿ§Oûòßü]ð±u¯[Oûòßü]Þ~ÚŸÞ}µ?¼+Á¿ábë^¶¿÷å¿øº?ábë^¶¿÷á¿øº.¼ýµ?¼(ûjxWƒÿÂÅÖ½mïÃñtÂÅÖ½mïÃñt\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿâèÿ…‹¬úÚÿ߆ÿâè¸ñöÔþð£í©ýá^ÿ Yõµÿ¿ ÿÅÑÿ Yõµÿ¿ ÿÅÑp=ãí©ýáGÛSû¼þ.³ëkÿ~ÿŽQÿ Yõµÿ¿ ÿÇ(¸ñöÔþð£í©ýá^ÿ Yõµÿ¿ ÿÇ(ÿ…‹¬úÚÿ߆ÿã”\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿã”ÂÅÖ}mïÃñÊ.¼}µ?¼(ûjxWƒÿÂÅÖ}mïÃñÊ?ábë¶¿÷á¿øåÞ>ÚŸÞ}µ?¼+ÁÿábëÞµÿ¿ ÿÇ)ábëÞµÿ¿ ÿÇ(¸ïöÔþð£í©ýá^ÿ Xþõ·ýøoþ9Gü,]cûÖß÷á¿øåÝþÚŸÞ}µ?¼+Â?ábëÞ¶ÿ¿ ÿÇ(ÿ…‹¬zÛþü7ÿ¢à{¿ÛSû¶§÷…xGü,]cûÖß÷á¿øåð±uï[߆ÿã”\wûjxQöÔþð¯ÿ…‹¬z×þü7ÿ£þ.±ëkÿ~ÿŽQp=ãí©ýáGÛSû¼þ.³ëkÿ~ÿŽQÿ Yõµÿ¿ ÿÇ(¸ñöÔþð£í©ýá^ÿ Yõµÿ¿ ÿÇ(ÿ…‹¬úÚÿ߆ÿã”\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿã”ÂÅÖ}mïÃñÊ.¼}µ?¼(ûjxWƒÿÂÅÖ}mïÃñÊ?ábë>¶¿÷á¿øº.¼}µ?¼(ûjxWƒÿÂÅÖ}mïÃñtÂÅÖ}mïÃñt\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿâèÿ…‹­zÚÿ߆ÿâè¸ñöÔþð£í©ýá^ÿ Zõµÿ¿ ÿÅÒÂÅÖ½mïÃñt\yûjxQöÔþð¯ÿ…‹­zÚÿß–ÿâèÿ…‹­zÚß–ÿâè¸óöÔþð£í©ýá^ ÿ Zÿ§Oûòßü]ð±u¯útÿ¿-ÿÅÑp=çí©ýáGÛSû¼þ.µÿNŸ÷å¿øº?ábë_ôéÿ~[ÿ‹¢à{ÏÛSû¶§÷…x7ü,]kþ?ïËñtÂÅÖÿéÓþü·ÿEÀ÷Ÿ¶§÷…mOï ðoøXºßý:ß–ÿâèÿ…‹­ÿÓ§ýùoþ.‹ï?mOï >ÚŸÞàßð±u¿útÿ¿-ÿÅÑÿ [ÿ§Oûòßü]Þ~ÚŸÞ}µ?¼+Á¿ábëôéÿ~[ÿ‹£þ.·ÿNŸ÷å¿øº.¼ýµ?¼(ûjxWƒÂÅÖÿéÓþü·ÿIÿ [ÿ§Oûòßü]Þ¾ÚŸÞ}µ?¼+Áábëôéÿ~[ÿ‹£þ6¹ÿNŸ÷å¿øº.½}µ?¼(ûjxW‚ÿÂÆ×?éÓþü·ÿGü,msÒÏþü·ÿEÀ÷¯¶§÷…(¼CÜW‚ÂÆ×=,ÿïËñtáñ#]^Ö÷åÿøº.¿,êÝêPÀ׌xâ|ò_GoªCÇ! &ˆ }Á'|ñ^±it%PA¦…€äQ@Ìp¦¸/^еÛÈ?ñÓ]ÝÉÄf¼ËÇŽ²¯Gý1ähÇ7Qº¡ÝFê‘—¬-$Ôoc´…âY$$)•Â/Lã'¿aïZÚ§„õ ?RžÎÙ†&Š:+,kŒ³)n:ð2I¬ {©­.c¸·‘£š6ÜŽ½T×Cáÿ*j³¾µw3Cqbö^qÌJqƒÉ:/3:=S•ìR;Ff¿Rö :þ𧯎)ú†«ésÁ 턱IpvÄWÞ}RFyé],:þ‡c­ø`E¨´öšd2Ç5ÇÙÝ9e |¸Ï_­f.µf|?¦Ú-ûAuª×Ä,ÞTg8p1ƒÉÎÜÑ×úïoËPþ¿…φõ«;»[K‹Iî‰XSÍC¼Ž£†ÀëßùCï>€©<ûu®ši6~+ÒŸOW}ÅdƃºLî`‘ªú§ˆì­î4Óc}myioz.šÞ 8Ûm#ÜðÄ‚i­lÊòøJïN𾣩j–²ÛÏEöu2)3a²>½ñX1X]Ïa5ôP¶…Ö90ùYº g<ý+§Õõm û]Z¤·7:­Äsˆ^ÙÐņÉÿ­Yþ Öì4»»¨uR~ÃpŠÇ [÷ˆÁ“€½%»¿õ¢þ½Aí¡B] U¯K'V²(.õ% ýÑÁù³ŸáÍ;Qðö³¤Ú%ÕþŸ,99*@>ø'Ž+£¾ñŤÖzeÌqî¾{¨çÔ)ð£$`çƒÇLT¶·¢Ç¦k‹a=ìúÄÉ!ŠH¸ »’~ñíÇ £úü¿àB-#ÁºÖtøµ›`²¹v]ÂTÜHF`8$»éX“éðÇÆÕÄW2˜í¾aºR8\î?\bº'ñ”ß`ÖEÏú 7”ü~è¯ÝÆî¾Õ_Y×4ýfóKÕ£¿{+ødXæAºÆªr² Æ1þÎúïªFfÏárÚòÚÒm=–âëp†?5 | žÆ®*-GAÕô™aŽþÆHZfÛYX1ôÈ$gñ®ÏO¿Ñoüi¢Kc$W‰yMÕÌÍIû¶Á*ßÅïY7:¦a§Úéê]R©ýªäù DèP×ðëÍ upïýw0õ/ë:D÷öB²¶Ä!•ÁoO”ž}©×^Öì¾Íö6T7M²Ü¥ºãh$Ä éõh–ÖVÉc<-Q.Ö {n1Øä[Þ©¦¯ é¾0ÄVúœ·¾tîÒÛ›VW…]HÎãÃc `v¡9ýSEÕ4SÔlÞßÌÎÂYX{©#>ÕŸººOjöw6ÙéúµÍ¿žf1A§o,ã'ø‰ÉÎcìù:L–Ùšd›Ã´ÉmºuÏ£çŒvâ’/h~¹×ìõm3Ú)óKüD€0¨¬|9¬êMp¶v-1¶Ç( Úèå† ÔþÔ4ÔÓ5/RºkHïãŒ$â#(RŒN ŽyÍiøkRðæ™Ùn ŽêÝâêk”Ëè‚c=ý©ÛRz´ß Üê¾¹¸´¶šMNß Â]P*…²äúÕ-'×zž°úl²Ee$LSpÀ$à¹Ë@?>kmõT²Õm.µY,–mXÞÄâÙܲ`c¯JÌ»ñ÷Ä(u“º+5¹‰·2’Ûq'·J#«Wþ´C{;Z³þÜØê7Ve÷˜&x·ã¶’3ŽÝ*¾ê³ª^E?ˆ// Û,/tò¦õ;]K’28>”jš·ö£ÄßÙÚu—–Å¿”?Þ俥^Êã{²ðð¾ºÚ`Ô—MÙ˜üÑ t9Lg;s»ö§K'HšÆ+™®ïÞTJ;ðó‘Àç5¹eâm&WE™îÈŠÛHû,çÊs‰1÷qŽyî8©<#©ZO7„´øåÝuk-Ñ™6‘´2±ãð5VÕÿ]Ééëc™½Ð5=*æÞ-RÜÙ,ìM#AêIRzuÇZ³©höš2ê¶´z…·Ÿöy¢*øÏÌ=êö£{¡Ã¤[è1j’ÝDú—Ú..>ÎÈ N„rIêxÏzgН4k«(¢Òu”kKl }=,äN¿yË·ºòi_B­gc—ÝFê‡u©ˆ›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Uí/O„®Ò»$ðvõcè+/ujiWkr[±ÆöÜ9ÆxóøP¼º™$ebBøáÖçÜþµsðØË.¡ö"B¸bº€óë[>d|á¤wi˜ÈœVd7Àj¯txI̞ÌÒaÑ#‰•ãº}™ 6Ù8Ç^ƒmdjsYÞ,L«'1çœ`ûÖ‰’Sk4 BD›ðÆCŸ˜“Óo¿­V¼½ß}nè7}·ýNAÇéC½´muszËÃú5²$WÌgºe,G˜T uÀàzšËÖt«kh÷N•žÕÈXçnz{Š¿?“ªB›¦Í¿ÞÉlc©éŒœŒsÐñjëWØÓͫȯ3íÜTc€AÎ;tåQÄT•D¯«ÝGŠÁÐ >T’Z>æêúÃwfkX‰9%E|纽ïÂ,M¤?îŠõÑóGÊŠ)°ýÁE0uþ¬×˜xóþAwŸõÉÿ‘¯OºÿVkÌxD_ïà”êÖ{DWQùNQ\Àü¬)à÷Töú{\i——Ë*„µ1‚¸ÉmäŽá@wT]Ok2Ím4Ê¿vHœ«ÜȨ)8 úÒÐË’I$’y$÷¤ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(C+–„“KçAQQ@ ˜  zqJ³”èò¨¨  w"P”'®Ö#?‘¨ÚRÄ’zÔtR²½ÇÌÚµôº½ûÂñéû¢¾¯ 0ÿ GþLÃÿÅÒŠ·áø[ü†õüÿŸõr꿈`ñ=ßÛ-5;™9 "lË{ÇÏ9ã·ÐõËø‚ÞK]vînÍÜi›ï1 ›“ÈÎ=Emÿ±ñ‡ý?òfþ.øV>0ÿ GþLÃÿÅЕ­ä6ïs’®¢k»Ko hbçL‚ð³\m2K"mùÇMŒ?Z—þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.˜°Ñ¶¥©IiÿÚÒÈÁœÊ“,~PÜ#.¬»žøïÖ²¯ä{Û?°Ékp«lòÁ#!ÛÎpÉÈ'½Cÿ ÇÆôÿɘøº_øV>0ÿ GþLÃÿÅÐÕÝÁhqu>²ºš·ö"ÚŸ³y¸Ø%Ú»<¿Cž¸íœ×œWq¨øƺ¦¡-äú2,’X%Ä@tÇj©ÿ ÇÆôÿɘøºIK•Öÿ±ñ‡ý?òfþ.øV>0ÿ GþLÃÿÅÓ’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*÷ÿǤ?îŠòßøV>0ÿ GþLÃÿÅשxCþ=!ÿtSB=¸(¢¸(¦.¿ÕšóÈ.óþ¹?ò5é÷_êÍy‡ŽÆtÛ±ë#@•bØÓ-qÿ<“ù ŸÌ>Õ‡©Hñø.åãfG]=вœ|¾ Õ$Ô/ôß [My¨X¬òˆÖû,œ®q°9go¦>”€éžácÛ½•w£'>”ÿ0ûWu«ÞkZF—2, y²°hÝc,¡°ÛN ‡šßÓïõ+¹u-.åí¡Ô-B¸†2c*à•m„ç#ŒÓ¶Ÿ×—ù‡_ë»G@“Ú©GÿWc·š?ô¬¿ IrÚ}â]]Ku$WÓÇæÊrHVÀöAÅjEÿ7õÔè CKERQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEɦŽÞ '•¶Ç—vÆpÉ5ZÛSµºŸÈŒÌ$Ú\,nÿë ÿЭUSÊO3ư²ÈÁ†é#åû§Ò€%¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ¤2J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠÏÕô‹[Û+Æ[y/$…‚HÑ®íÛp¿1ü+FÑ.ŸS/ªéÈmÄNM²A¸•ÇžÀó]V.ÿç•¿ýþoþ"Œ]ÿÏ+ûüßüEa<<'57º%Å0EoÅIkÑBø ã|#Ŭ_îŠëä–x|ÑGå¼É!%G® Šä|'Äýn†wÐ}ÁE}ÁE0uþ¬×x¤n8õ8¯EºÿVkÏ|H3qõqü謊þ(m­ãerD1ôû£ÞŸý©÷$ü‡øÖL’!òÀuÊŰÏC±N?QQâßxóJ— íœf¤‡&mÿjAýÉ?!þ4jAýÉ?!þ5‘EfkÿjAýÉ?!þ4jAýÉ?!þ5‘EfkÿjAýÉ?!þ4jAýÉ?!þ5‘EfkÿjAýÉ?!þ4jAýÉ?!þ5‘EfkÿjAýÉ?!þ4jAýÉ?!þ5‘EfkÿjAýÉ?!þ4jAýÉ?!þ5‘EfkÿjAýÉ?!þ4jAýÉ?!þ5‘EfkÿjAýÉ?!þ4jAýÉ?!þ5‘EfkÿjAýÉ?!þ4jAýÉ?!þ5‘EfkÿjAýÉ?!þ4jAýÉ?!þ5‘EfkÿjAýÉ?!þ4jAýÉ?!þ5‘EfkÿjAýÉ?!þ4jAýÉ?!þ5‘EfkÿjAýÉ?!þ4jAýÉ?!þ5‘LIcwtIž2¨9+žyô¢áÌͯíH?¹'ä?Æ•5(^E@²eˆ bE4SÆ$†D‘ 2Ž85bßþ>bÿ|:.Ì߬X[\ËÅrZ7(HUÆAÇ­oW˜j¿ò½ÿ¯‰?ô#S98ì$â´:ßøL´ïùãuÿ|¯ÿGü&Zwüñºÿ¾WÿŠ®ŠËÚHËÚÈî?á2Ó¿ç×ýò¿üUð™ißóÆëþù_þ*¸z(ö’k#¸ÿ„ËNÿž7_÷ÊÿñTÂe§Ï¯ûåøªáè£ÚH=¬Žãþ-;þxÝß+ÿÅQÿ –ÿbÿ|:©¿^aªÿÈb÷þ¾$ÿÐz}y†«ÿ!‹ßúø“ÿB5]…[df^\=¬T‹ÌüÃv0=zmÛÞFÒ4"4ΆÎï^­ÁäR*ª(UT ;V:XÃK \ܰ;¥üÉm);Ÿ?~ÇAŽßZé*›évnìí;Ûs í´Ÿ¦qN.ÅFV$k’°E$pË0pÉŒŽù"¬P`QI’fÎòÜÅŸ3lrIåª9䓸sO1ÏY¯˜#Ú>aœsúÕ‘gÉæùƒn1À?JUµ…%ó>l“Ôàè: ®dUÑ\ÜJafVÁyö'œCQo‘^[”“ææãüjà³€Iæùƒn1àý(ŽÒŸz'Ì3Œ’qôÏJ.‚è©ç²t᧘¨`¥°«Æp:ô§¬×V2Né$*Žë‚ ’EY62•)ÆíÜ0}½)ZÚ'‰ce%Tä|Ç ýzÑtEy¾ÓoÈdÚZBH Àéõ¦C,²¬HŒ¥ +0Q3ÇãÒ­›hˆ\©ùAPwàõ¤{X]QJpƒ † õ]ÑNâI#¼…ne\yŒ8RÇœ}*ÅÞä±dÜYØÉîO)¶…ƒ‚™nO t§I K–ã+ÇsüèºÐ.´+*c‘øõ§Ì‡tGw¹,Y7–vÂ8ÉÉÇo­4†Š[x —Q—%”pã·©« rEåºåxã'·½ o0!y ·$“ÅMÅuc<+9äó7…ÀÀ,>†Ÿ$ó$ŽÜ¸ò°ª«Crx­ 8#C°àãqãž”¦Ú#/›´‡ÎN€ ®d>dMETQEQEQEQEQEQEQEQEQEQEQEÙ´NŠ©0>´êFUu*À2‘‚B(•3¬e¢W ¹ÂãåÓpÿ?•o銔“~âYL1ê1ÛéMH³Ž b’²K‘éƒíV-mb³€EÂŽI=Iõ5¤æš²4œÓVF¦‘ÿ!%ÿ®Rÿè¶­¯ }Ñõ¬]#þBKÿ\¥ÿÑm[^û£ëS…û^¿¢=ÿÃ¥þù³»ƒî (ƒî +¨æuþ¬×žø‹þ>bÿ®‹üëЮ¿ÕšóßÇÌ_õÑtë§M<J¬Zñ’s÷µÙß‹ó?áZv_òµÿ®)ÿ Šž•…ÊŒ_ì‹ïÅùŸð£û"ãûñ~gü+jŠ,.Tbÿd\~/Ìÿ…Ùß‹ó?á[TQ`åF/öEÇ÷âüÏøQý‘qýø¿3þµETbÿd\~/Ìÿ…Ùß‹ó?á[TQ`åF/öEÇ÷âüÏøQý‘qýø¿3þµETbÿd\~/Ìÿ…Ùß‹ó?á[TQ`åF/öEÇ÷âüÏøQý‘qýø¿3þµETbÿd\~/Ìÿ…Ùß‹ó?á[TQ`åF/öEÇ÷âüÏøQý‘qýø¿3þµETbÿd\~/Ìÿ…Ùß‹ó?á[TQ`åF/öEÇ÷âüÏøQý‘qýø¿3þµETbÿd\~/Ìÿ…Ùß‹ó?á[TQ`åF/öEÇ÷âüÏøQý‘qýø¿3þµETbÿd\~/Ìÿ…>-.xåG/8'ü+^ô4X|¨Ž¸ûßê7פÖÁ%•C3g矖» y`©¹ˆ I='-ÂQRÜá¿á Ô¿ç½§ýößüMð…j_óÞÓþûoþ&º-#Ä–šÅÝżJÈÑœÄ[þZ§MÃñíèAïÆ¨'¹d”nDE!OBI=}zTû(‘ì¢qð…j_óÞÓþûoþ&øBµ/ùïiÿ}·ÿ]Ѳ´ÿŸX?ïØ¨žÆËþ|íÿïÒÿ…Î!ì¢q_ð…j_óÞÓþûoþ&©]è"Âa 毤ÛJWpI®v1ŒàŽœÊ»–±²<}’î±…#èG"¼â\Ž|Ch‹2Úù{RiW?^(öqN'Aýh[oü$:}>Ú?Â¥]7ûšÞŽßK ¥yU»4·$ð3Œúöô®«Cƒ{FÐ~îà@* àútî@ü)Q‹v!Á%s±ÿ„nOú éŸ÷ÿÿ­Gü#rÐOLÿ¿çü)|º_.º~§O¹‡?ßøFäÿ ž™ÿÿúÕÐ@$_IÓÏÿZ¥òý«àbæQèçùÖUpЂÐÒ•¦õF×öÿ Æ“ÿ?ýj?°‡ý4Ÿü ÿëV ²‰·²‰½ý„?è1¤ÿàOÿZì!ÿA'ÿúÕƒEÊ!ì¢oaú i?øÿÖ£ûÐcIÿÀŸþµ`ÑG²ˆ{(›ßØCþƒOþÿõ¨þÂôÒð'ÿ­X4Qì¢Ê&÷öÿ Æ“ÿ?ýj?°‡ý4Ÿü ÿëV {(‡²‰½ý„?è1¤ÿàOÿZì!ÿA'ÿúÕƒEÊ!ì¢oaú i?øÿÖ£ûÐcIÿÀŸþµ`ÑG²ˆ{(›ßØCþƒOþÿõ¨þÂôÒð'ÿ­X4Qì¢Ê&÷öÿ Æ“ÿ?ýj?°‡ý4Ÿü ÿëV {(‡²‰½ý„?è1¤ÿàOÿZì!ÿA'ÿúÕƒEÊ!ì¢oaú i?øÿÖ£ûÐcIÿÀŸþµ`ÑG²ˆ{(›ßØCþƒOþÿõ¨þÂôÒð'ÿ­X4Qì¢Ê&÷öÿ Æ“ÿ?ýj?°‡ý4Ÿü ÿëV {(‡²‰½ý„?è1¤ÿàOÿZì!ÿA'ÿúÕƒEÊ!ì¢oaú i?øÿÖ£ûÐcIÿÀŸþµ`ÑG²ˆ{(›ßØCþƒOþÿõ¨þÂôÒð'ÿ­X4Qì¢Ê&÷öÿ Æ“ÿ?ýj?°‡ý4Ÿü ÿëV {(‡²‰½ý„?è1¤ÿàOÿZì!ÿA'ÿúÕƒEÊ!ì¢oaú i?øÿÖ£ûÐcIÿÀŸþµ`ÑG²ˆ{(›ßØCþƒOþÿõ¨þÂôÒð'ÿ­X4Qì¢Ê&õ¥§Øõ„Œ\ÛÜf t½GÈÜg׊ÑðÇÝZÂÑ?ä ?뜿ú-«wÃt}k,:³šóý݉V5ýßÕÜpQDpQ]'(˯õf¼÷Ä_ñóýt_ç^…uþ¬×žø‹þ>bÿ®‹ü躲ÿ}¯ýqOýTõ—üƒíëŠè"§ Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ô4´‡¡ éÏsBÑJ‹$n¸dqÃЊm¼±Ú»Á–URR2ÛwLàâàÑôËY–k}:ÒWî¼p*°ú*Ü?ñõ7û‰üÚ¹ÍÅZΠm†–±,`™Ÿí˜L°sžÙìk£‡þ>æÿ®iüÚ˜Ÿˆd¸“ÅÑÚ…Õ¦„X<:çÊ!¼Ìn?:ƒÇþ•UnµK¿‡×3.«47V«8™ŠfeÛ»–8ÃŒ°öõ®›RÐûS]B=BöÎáaò ¶d“9çržþ”ÅÐ,íôK.6›Ê¹Wó¥gÝ#³ýæ$÷¥ömýnUýëÿ[ÓÝŸN´wbÌС$œ’p+Èþ$(oA‘ÿ,_ÿJ&¯a†·†(P’±¨@O\ŠñïˆÅG‰ ùŒßþž&¢m]²b’9%QÌO'Úº=áa¾RD ËI ä@éúqX"ÙæS˜t«vvÖ–šÅ‘‚%FSvçæ9’3ôé]™}?kYuZþLš–ŒβûR¾K’±Ü$k· mV“Üf«§ˆ/áœÁ(#aÓøÇ­.¬ZKÀø Byëø~U›&$l‹< ªƵ©%®(óÛ³7£×.*[B6ç,Nz÷z÷ÏЫ#™di±-€r9÷¬¥²£'o¥i)Ê‚I$ާ­g‰œ%’Ôê -Q\g@QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE¥¢È@×9ô[Vï†>èúÖ‰ÿ!ÿ\åÿÑm[¾û£ë\ô7Ÿ¯è޼WÃOü?«;¸>࢈>ࢺA—_êÍyãæ/úè¿Î½ ëýY¯=ñü|Åÿ]ùÐueÿ û_úâŸú©ê /ùÚÿ×ÿÐEO@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@!èiiC@Ôƒ ¨êAÐR‘ÁM#G#HÛœªãqÆ2}N§Cÿs×4þmN¦Ãÿs×4þmL ÍC/J˜Ô2ô¤s÷«Ä>+Å,ZýÈ+²XåŒ Ø9Yä'¯ûÃõ¯o?z¼SâscÄ ã÷ÿ¥SJì±Í7¤j³YÊèÓÛLйaY•нñÇ¥\ºœiº­¤’²Å^ƒÍ ôàóéÆÏzÄ2Ù<Œà¥©9 ŽYr àúzÿŸZé¡)R•Ṍýõfwúî«g ÄË ó›ÈVFGderÏ#Xêš\ò*C#+…ådpH#¯Aïú×å¹Ê–2G\‘V[²F7n=0Nj%w+½Ì½’N÷;è¦×ä•àkAyQô¯;Ž BL*À*Çœçäúžß_zïlǧZ£ Ä€Ó ¨™Ñ–ÅŠ(¢ °¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(KDÿ€ÿ®rÿè¶­ß }Ñõ¬-þBþ¹Ëÿ¢Ú·|1÷GÖ¹èo?_Ñx¯†ŸøVwp}ÁE}ÁEtƒ.¿ÕšóßÇÌ_õÑz×ú³^{â/øù‹þº/ó êËþAö¿õÅ?ôSÔ_òµÿ®)ÿ Šž€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ CÐÒÒ†€#©AQÔƒ ¤Óaÿ¹¿ëš6§Saÿ¹¿ëš6¦æ¡—¥LjzR¹ûÕáŸLßð”[ˆÓ?èïÎéâj÷3÷«Å¾&)Bйø=ÿÒ&¦…-?Hnrê¿NjöŸe\³¹hÚEÞ ñŒóǦ;Uû}Vy·Èʳʱ\ “ÁàsíVÚÏÏ·XKÈàfPÉ€¤1ü±ù×F¿³­v1–¨·­Åhìïmnª GhݸòN:÷è? …™°£Ûð«,bQ…#SQªG»n9Æs[VµZí§£1cQŽ“œz܃þ=ãÿp*ÆÌ`á ~ýzÚ‡˜#ÿt*1P¡%MÝõ6¢ÇÑEÂnQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEihŸòõÎ_ýջᎃëYÞ±û@¼»ó6ý–3òíÎíÊïlV†:­cJ..WêÿÈè¯8ÍC—¢·âÎî¸(¢¸(­Žq—_êÍyãæ/úè¿Î½ ëýY¯=ñü|Åÿ]ùÐueÿ û_úâŸú©ê /ùÚÿ×ÿÐEO@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@!èiiC@Ôƒ ¨êAÐRi°ÿÇÜßõÍ?›S© ÿ¹ÜOæÔÀ˜Ô2t©E% +½^[ã ÜkÄWv¢H˜HKŒùòž¿z‘5s:Ýä¶:{ËS3NÑG¿ f”ì3šÆ½GÝ+—©;3ÍWÁ÷ÂO0ý ¿¯ÙZ– ÝÃ8˜Å;7;Fs]ÃÜˤä\_½ô¬bSª!PÎpÚ½9ïéÖ6´Éq-´6¾eÀ¹ñ©“hcå‡$œpϯJâXÚ—¼b¿¯_SOa¬â¤ðÍÛ’ËÒ1ôˆÑ†nW>d.Oý2`v1ë·¬QCbxÍ(hÌøE¶ÒwmÉçâ´´û¿·éÖ÷{6yчۜã#¦iË0«\P¾­M³Ï×Ó¯K[ŸÆ6«©§^"*‹KŽ?Õµt«­9†îñ­@°·ó?{æ|îPp˜é{þOPÕnšo=¹´¸ß‹åͼ2Tœ Ä{õ4þ¿ZNÎ(=„#ªf?Ø/çÒûö°^ÿϤÿ÷ìÿ…tK®»L¬lñdóµºOæ|ÅÁ#•ÇFsøSOˆBÙ[Ü›n%²’ïh~›B½9Îî¾Õ?]«ü¥{ísŸûïüúOÿ~ÏøQö ßùôŸþýŸð­ÛÏÉaºÜÁkÄêΫ%àD 1üeG'=1øÔ7úô×zTçN·-›´<6Ã`qŒ–àútëMc*¿²¾ðöQîd}‚÷þ}'ÿ¿gü(ûïüúOÿ~ÏøWO=Ç••»Ìc,ª¹Y óå±çûÃŽŸáTâñ+-´w7¶^L@ÓÂÑËæ 2TŒ }G½ Uí*QÓSì¿óé?ýû?áGØ/çÒûöº› Fææò[[«4·‘"IFټ̆$`ü£å÷¨u«›¸&€E%Ä6ż°[ùÌch# לvê)}~§7+б¯sœûïüúOÿ~ÏøQö ßùôŸþýŸð­yîï®ô­:êÞúk{›ÕR$HÊn#,Çr“€2zö«w²^Á«Z$7Í!–Aº×Ë\€ùœœd}sŒ1Oë³½¬º÷è/e\ç~Á{ÿ>“ÿß³þ}‚÷þ}'ÿ¿gü+¦·Õå¹Ôg°K]—n2–•GðqÎî¾Ø5Ÿ-õÕ…òÜ^¤sÅréç$`QƒÀ?'4¾½Qo?b»œïØ/çÒûö°^ÿϤÿ÷ìÿ…k%î¦údR §xZé—íQ[†”õ‚#“½9ÅFšííŤP$ÒM+M¾X¢Pû#m»‚¹‘×§µ:k’Éw[1öInÝ&2üÅ”6NÜtÊ‘×ð§õÚ¶¿*ûÃÙG¹Îý‚÷þ}'ÿ¿gü(ûïüúOÿ~ÏøVä>%an./,Ä0½«ÝDÉ.òʸÈ#‘ëMƒÅ1Í ø†&Ë–÷+*¹íPXzú{ÑõÊßÉø‹ÙC¹‹ö ßùôŸþýŸð£ì¿óé?ýû?á]‘=Ô׺¨»Q¤¨k)uQåƒÁÀúôªPëóEaÃdeŠ+4º•¤¹%œôÊüÇå=H£ëµ/eÓ¯qû(÷2~Á{ÿ>“ÿß³þ}‚÷þ}'ÿ¿gü+y5{ˆgÕ§™Qì-NàÛðê<µlÛƒÉê[½Goâ˜æ†säÄóGåìK{••\¹Ú °=}=èúå^‘]?{(÷1~Á{ÿ>“ÿß³þ}‚÷þ}'ÿ¿gü+ro5¬r-ݼÜ-À€¹Äy(%ÊŒ {u§Ûëò_-˜³µŠGŸÌݺ㠾[pÁNî¼tÍ\­kò¯¼=”{˜`½ÿŸIÿïÙÿ >Á{ÿ>“ÿß³þÚÝ,k †ILpÑ…-ønã?Z¡¡Ý\ÜØÌ.ŒñLñ‘"…uoËœxã‘P³ ¸¹YhW°WÜæ~Á{ÿ>“ÿß³þ}‚÷þ}'ÿ¿gü+_EÕî—O±ŠökrñNÓîÞTdïÈùxç<Óâñ+Ü. ki®>а*ïtG([;Âÿ²F1Z•—សvѨêAIÿZ™I$ô;¸>࢈>ࢵ$e×ú³^{â/øù‹þº/ó¯BºÿVkÏ|Eÿ1×EþtÝYÈ>×þ¸§þ‚*z‚ËþAö¿õÅ?ôSÐEPEPEPEPEPEPEPEPEPEPEPEPEPHzZCÐÐu è*:YfŽÞÝæ™ÂE–fn€¦TR9ÌÊc€¬$m£¾9üMsÚ‹íõJkFÆX–¶Ã于 ú7|z}+£‰U¯°ÎÄ]¹í’sü…0 :Ÿ½ŸãsÿØÔM©ïXþ7ýj“Q»Þ?ÚÛjɧ†<ô¼þ›FkñF¥¢iÅ4Z臚0’Ùv;PpwdûW_#y€£€Êx Œƒ^+ñ$”ñŸ%¼»R‹žxY¥ô³«IU+)IÇTk¶«á†3}«\¼™Þ5@òÄÀ  ¸"1È#99¦\jº ¶fµÕ¥žìÎ'ͺ6V ·‚±ÓŒm¯>pÀ£;®âyZ–)ãG1dÉŒc·¬>§ÕþäR¬û¿Û좲¶úª›äiYçˡöHÿTÁ†qØtã£câìì­ì­d´ž8bD$’ÆÍÇR¾QÇ9ï^}»Ä±Žâyã×Ü ×ƒx™"Û»#~ïLÆ×ô¦ðt壸{Y#µGÑÀMüÿf¸ ¾Ô©òòß{.ïS×ð¨Œz3Å*Í©ÝM#ª(šAó VÜ¡p¸ëÏ ç¾kǵ ;Ü9ÎGèú ’œ²øFÞóü?ÈQ®ÞèßC¢¥ÒËöéÚ5”̶ä-d9Ëcn{“Œã'¥B°hŠÔ®š#–ñÆÃˆ‘ñ¿&{ d慌êPþgø‘^Õö:K«*á ‘5 íæ…J$°©Ý´ã åH#ÛµCxt›Ì“©ÝDï‘+F¼ÊœðÙB;ž@kŠKÕþäÙö7%¸´kûVKìÚÅ'š|ÍåP*¸œ“žµVÎßL‡MŽ+»÷º•-š÷ÓpÁÚBϩɛEWÔák]þäÕö4,ÎÆš[Y„¯ä !™ÈDbÄnrGO©5¯}¦j¤Ô'Žé•عÇЊæ(¥,½ßáþ@ª´u {£›‹Y…Á_²«,h¨BŒ€:c°}j?Nœ·Ñê÷Q´¥wÆ#R¤/Eå ¯CÜ×;EJÀSîÿòlûh¶÷kt—’ù᜻•9—wfùy˜¤šMk+»_·L‰u)•ÙWI*F8èA®zŠQ…ïÌÿòlû!¼²6†Ýµ»Ã–Ϙ#UlcîŒF†}ê9‰äÛGoy5©¶R‘¼*w?xÊsž¾¹æ¹ú(úŒ;¿ÃüƒÛ>ÇK%ƈúdzzܼpÆË(­¹JA޹éö7Ú]”‹éf–gß$²¡ÜÇŠà‚¹z)}B­wø{gØÞû;¡3j72 ™§H~Ev$“‚zž¤ÒÛ"Ò[g·Ônc0݉UI 6WÜôÇZÀ¢ŸÔ¡üÏðÿ ö¯±Ðj/¤j2;Fâ$^L¾Jÿ¬Nx9Sêy<Óž]E¸Sw(Ë­…<ÛŒ|½>Aú×;E §3ü?È=³} ÙWG¸¹3Üjw2¿7 pøA‘•sU#0 a&ûhŽÆ)Þu„3>Y coÞ'ïíY´SX(%k¿ÃüÕlßBû=¼s#ǻۅe?263œ/_”tÅ;ÍÒÞÊK[Vêá©Va£*r •AÈ899é\õ¾£æ‡ù¶}ŽšÆóK±3±ÔgžIØ3É2rpu@è=*¼k¡Çk%¸¼›d–‚Ð’§;î~ï_˜ÿ…`ÑGÔaüÏðÿ öϱÐÑš[†7ÓùW ²h6òíÏÝÈ8¡*;‰¬[LšØjSÝ1ÚcóÉB…NA ±ç޹ ô¬:(úŒ;¿ÃüƒÚ¾Æ­šÙùµö§'ÚÞãÏY¢ÉhÈP£`€‡ô­¼ÓD°NÚ„ÒÏnŠò!ù·`’p£û£¦+™¢œ°0}_áþ@ª´tÑjk¥Ehú¬âdE pŠK’:Ÿ™O_zu•ö“cŠ·’Jò¹y$•X³±ÉÀ Ú¹z*^›¾¯_Oòm#a-t!oäK¨ÝOÂÐÆ²õJzíÂŽ}Îjh²"¸[‰5+™åYV]Ò *¥@ùP a`ÑTðQiþäÕö7›ûåhu˜&Y$q,kó|í¹—• Œã¨íMÛ¤ˆ- É‚ÛiHŠ|¥”ävg9ô"°è£êPþgø{WØébÔ,×K†ÕµiÄÈŠáP—b:Ÿ™O_z‚Õ4U‘EÌ’,°˜d!!fbxQÉ,}½«Š_Q†º½}?È=³7˜é8·hõK¸§†!ÎéèÙBåQ$ZD>_Ùõ{Ø6B!&5užr‡œ“ÓE?©CùŸáþAí_c½Ñå±:嵃æ+xƒÀÁÇ^½*†z~5„¿ä¬ÿ×%þORøg§ã]éªqåFrww;¸>࢈>ࢴ˯õf¼÷Ä_ñóýt_ç^…uþ¬×žø‹þ>bÿ®‹ü躲ÿ}¯ýqOýTõ—üƒíëŠè"§ Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ô4´‡¡ êAÐTtOç}•þÌcí>Y»»gâÓaÿ©¿ÜOæÕÌhƽ©êRÃw´PÛ’·BÊCöPK}séQ]ð;[ŸËëTì—L E¯m%å̶ͭÉhÌ[2î?»^H`0Ç ãšì5/麥ÒÝ]E)SËÄ‘¹ÎÆõª—ÑÞ hE«D–»Œ>LÒFT·Þ9V“êi-­ýn7«¿õ°ÝÆãMÑ--.¤ß4k†;‹c’BäõqøW–|IÛÿ $õ¾?ïüÕëÖ¶‘XÀ°CælRHó%iýôÄŸÖ¼“â4aµøI$~åú×y©ß[ŠÚ`“ Ù©c ±pJòÇzhŒ[{PˆUv«¨Pwm Ï\óÏ®i0E¸7´ŠÈA^µ4ô–9UdLƒ¹‹ÿkå§åY–ºC˜òAÁõã5³nbC¶œ“Óõþ”£¬¬SZYÙ¯ÄfA·=03Æ{qWk*Íd“T‘— Í»©Ï~8?j׫šSTêB+¤WêcO`¢Š+Ì4 (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€:¯ È7Yÿ®Küž¥ðÏOÆ¢ð—üƒuŸúä¿Éê_ ôüh»ƒî (ƒî (—_êÍyãæ/úè¿Î½ ëýY¯=ñü|Åÿ]ùÐueÿ û_úâŸú©ê /ùÚÿ×ÿÐEO@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@!èiiC@Ôƒ ¨êAÐRqM‡þ>æÿ®iüÚM‡þ>æÿ®iüÚ˜š†^•1¨eéH çïW|E\ø‚Ÿùbýÿé¼µì'ïW|E`jqåß½|ÔS7“ó²nEç’âúÿ•LH8äûÔ3ìkr§oY°ö9ôÊœUÚB&‚ú&ü‰f*p¬:Ùíÿê­Ëk¯9e µÄm°•=Níõ®n/ê.c•­¼¹Sæ2óìO\{RÜé×°ÏòDb—gɆ\Œc‚Aõ檔_´VW7qƒœ¬tv3“{UÂL§×ëÇùïZõÌh1º€LH?1ÚNqòãú éëÑÍj{JÊV¶‹s– ×IÜ(¢Šó (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€:¯ È7Yÿ®Küž¦ðÏOÆ¡ð—üƒuŸúä¿Éêo ôühºƒî (ƒî (—_êÍyãæ/úè¿Î½ ëýY¯=ñü|Åÿ]ùÐueÿ û_úâŸú©ê·Û¾ÅmäÁGä¦ JTŸ”vÚj_ø™ÿÏ­·ýÿ?üMY¢«ÄÏþ}m¿ïùÿâhÿ‰ŸüúÛßóÿÄК*%wgŽhü¹S”Œ„ÀþU5QEQEQEQEQEQES%š(|²$kýçl "š)Ó|R$‹ýä`E>Š( Š( Š( Š( ô4´‡¡ êAÐTu è)´ØãîoúæŸÍ©ÔØãîoúæŸÍ©9¨eéS†^”€®~õx÷ÄQ~úã'oúo-{ ûÕå<²žç[‰ãŒ²ˆä >|¾´˜ÎÆ2pÝé†6ØØ8#­DÒ®s†„ã=w/øÓ¤Ñ§À(3ìH¦›Bh±¥–2no,YÏÍ»†‚¸¨õpª¾ç<09?Aý [Ñ–òÅZ³¢$¹Vóº œ¯R x{“Ö«êV—WE 6àÌX£ž1ß¾Oå^ ÁcS½£½újŒêEû+•t¿ùÀFqƒ×žÆº:ݰ¹‚ö9$‹jŒ‚A˜­º×7œ'Z. 5e·«#šŽ¡EW”nQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEu^ÿn³ÿ\—ù=MáŸëPøKþAºÏýr_äõ7†­wP}ÁE}ÁE2ëýY¯=ñü|Åÿ]ùס]«5ç¾"ÿ˜¿ë¢ÿ:é½w¦O¤ÚϦ©²»1[Åp—¹r€óÞ€äg'¦qSê~(ŽÃ\²Òáµ{‡žtŠyíX7WЛü½Û¶óÓ8©­&»¸ŽãíVfe•Ò1æ‡ót~:gÓµQðΙá]:Êò?.ⶺn'¸â…þ@Z?òŸþ¸Eÿ¡ITïuý:ÂàÁ<íæ€ Tœ®ÐqWü…gÿ®èRVF£áKJõîž{¨¤|n2à1žTó€áYÕuw¿™µIË÷­¥ä;þÍ#þzÏÿ€²ÿñ4ÂY¤ÏYÿð_þ&© §ÿÏíÿýõÿGü ºüþßÿßQÿñÏ͊쎾LóKðÿ"ïü%šGüõŸÿeÿâhÿ„³Hÿž³ÿà,¿üMRÿ„OÿŸÛÿûê?þ"øAtÿùý¿ÿ¾£ÿâ(æÅvAÉ€þi~ä]ÿ„³Hÿž³ÿà,¿üMð–ióÖü—ÿ‰ª_ð‚éÿóûÿ}GÿÄQÿ.Ÿÿ?·ÿ÷ÔüEØ®È90Í/Ãü‹¿ð–ióÖü—ÿ‰£þÍ#þzÏÿ€²ÿñ5Kþ]?þoÿï¨ÿøŠ?áÓÿçöÿþúÿˆ£›Ù&ù¥ø‘wþÍ#þzÏÿ€²ÿñ4ÂY¤ÏYÿð_þ&© §ÿÏíÿýõÿGü ºüþßÿßQÿñsb» äÀ4¿ò.ÿÂY¤ÏYÿð_þ&øK4ùë?þËÿÄÕ/øAtÿùý¿ÿ¾£ÿâ(ÿ„OÿŸÛÿûê?þ"ŽlWd˜æ—áþF®›{o~×èEY<¸É·Ú¤áHÈäŸÒŸw¿ãSÁªOco¨Ì‰såÇ,PEÛ™dIà“‚Ä¯Ì¤NqÇZµ³¨Ipy(·2Üù1Í-¼‘#.Íå¶6±Ï^õÄñuú%ý|Í}œ ïì-Kþ}¿ñõÿ?°µ/ùöÿÇ×üjÓkRŲêæ$š®òÈ¥s岎2NïÖ¦¸Õõ+/2 Å£\2Dñ:#l¤C Ù8Îs‘Ÿj>·_²þ¾aìàgÿaj_óíÿ¯øÑý…©Ï·þ>¿ã]Ÿ{q'Ûb»™mdØZ!\m œuõ5–uûøl£»š;cͬ—"Ê]À1ÏÍ‘Ücš•®Ý’_ùÙ@¥ý…©Ï·þ>¿ãGö¥ÿ>ßøúÿoi··’^Íiz`gXc™^*lŒIäõ¬º¹ŽðÜgPP5&çy‹Aåï+·fãŽÀ|£žô㌬ÛZ_1:pµÃû RÿŸoü}Æì-Kþ}¿ñõÿÛ‹í â™K©$‰íK¬GSç€:ŸsQëZÌštê!’7ØËîØ-ŒïSµ;ãpç–6³i$µõ£{ô2?°µ/ùöÿÇ×ühþÃÔçßÿ_ñ­½ ï%Žåç¸I!ûLÊŠPï\HÖ,r=*¢¬×n¯wËÁ;M*™Á#Ê…éÓ?‰£ëÕnÖŸù‚£gÿaj_óíÿ¯øÑý…©Ï·þ>¿ãZ—]]ønÚ[w•®VÝXtñd•êHûÇØñTnµ;›…ã2KgŠ]LVs’nÏ?(=ž2=j–2³Úß×Ì^Î6L‡û RÿŸoü}Æì-Kþ}¿ñõÿìÄ‘«¯FŠÃ·»“NºÖ¥½»’x­Õ$ù°¤áGAYÇYßE§¯ù•ìc¡—ý…©Ï·þ>¿ãGö£ÿ>ÿøúÿIc¯¬ê—j0\Iº"Š'4fÚp‚}‰¤³¹ß`—"ü^Om©‡ •v G†È8¯Ö«­ÒûŸù‘ìákŒþÂÔ¿çÛÿ_ñ£û RÿŸoü}ƺ»Ù'†Êy-¢ógT&8ó÷Ž8‡£%Íݱ2Ú ù™­Ý<’6pQ›#¯<út¬ãŽ­%{/ÇüÊtbŠØZ—üûãëþ4aj_óíÿ¯øÕßí½F=: ¥XYîç)ném!ýÞÒw˜Á,IÁÀ¡«É©\·†î/¥€Åqr¦6L•Î+rÀ8>´Þ2ºè¿óJ ØÄþÃÔçßÿ_ñ£û RÿŸoü}Æ®]ZyvÖWWBù‘|¥ŽR¨/#Áóœç8š[«ûŸí‰å•\ØÚO8Žà¡ ÁNâ |ã,8' RÆU{[úù‹ÙÆ×)aj_óíÿ¯øÑý…©Ï·þ>¿ãVí®.>Óiznfg¸¿–Ýá.JÀz6ž½k¡º„Ïk$`°,8Û!ŒçýáÈúЉcªÅ¤ÒüÌjŒYÉÿaj_óíÿ¯øÑý…©Ï·þ>¿ãZ]\é7v²<Íuop˰ݺ㡠昌rFj¤wš…Í–›e ¼’²Jn Oå3Ø)PàÔõœu\«åý+÷²‰ö£ÿ>ÿøúÿØZ—üûãëþ5©§\G.©i=¸uŠöÇ{+¶NP¨žç F{àVõg<}X½—õó£q¿ØZ—üûãëþ4aj_óíÿ¯ø×eEOö^Ëñÿ2½„N7û RÿŸoü}Æì-Kþ}¿ñõÿ쨣ûF¯eøÿ˜{œoö¥ÿ>ßøúÿØZ—üûãëþ5ÙQGö^Ëñÿ0ö8ßì-Kþ}¿ñõÿ?°µ/ùöÿÇ×ük²¢í½—ãþaì"q¿ØZ—üûãëþ4aj_óíÿ¯ø×eEÚ5{/ÇüÃØDã°µ/ùöÿÇ×ühþÂÔ¿çÛÿ_ñ®ÊŠ?´jö_ù‡°‰Æÿaj_óíÿ¯øÑý…©Ï·þ>¿ã]•hÕì¿óaþÂÔ¿çÛÿ_ñ£û RÿŸoü}Æ»*(þÑ«Ù~?æÂ&w‡,nl´Ý_íìßíùÎz}i¾þµ·üƒoÿë—ô5‰á¯ë^ž£«MN[³žqQ•‘ÝA÷A÷¹.¿ÕšóßÇÌ_õÑz×ú³^{â/øù‹þº/ó ÞÒk¤±¶XàB˜-1S÷Gm§ùÔßh¾ÿŸkoüoþ"™eÿ û_úâŸú©è?´_ϵ·þ7ÿGÚ/¿çÚÛÿÿˆ©( bI ÒO6Á#…]¨I qÉ=OjšŠ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(«Xîà1J8êê§ÔQkk¤(‡I=XúššŠ(¢Š(¢Š(¢Š(¢Š)CKHzޤGK,¢ w”«°E-µ³vu4€’¡•¼§$›\¸Ø[wà9®A×5KÍJhu >æ¥%àf¶uü HÁãœúçÚºH@ûd§¸qù·øS¹º¸þ÷þIÉþ5]\ÿÿ$eÿ±{¬išt‹ö£ijî2«<Ê„P ¨îõm>ÖÞ;‹‹ûX¡“îI$ʪßBN *½Ô ó„^íöWù'ñ¬oKcl°ÚO³BcYÃù9çšée•UãpèÃ*Êrõ¸O¯úLjIX£I@ã8ŽœùQì¡Wݞ•G̈n5mk‹±=”ìïˆf8m¼ŽŒŒðzÕ]GPÓF¬Kr»ä#ͺR§‘Ãyã±®}JäÜJìùg}ÄcŒÓÿ¶dqɃ¯©>¾æ¹þ¡ô¿Þs}n½ú­…þgd‰,7´bE- 7˜rÃŽAÇ|ôëDz·‡ £[+½®U‰f,~C•/:W%«lÑ·›Ë鵎;ûýiésm)]¬Ž„ÒúœnÛ¿ÞRÅÔ¶§woâ 1ZYâ‚à4íºC€wÿ{Ð ª—bP¶W•6‰[¨Q»åýœV ¾ß!v¸uìýKI`©-¯÷Š´šLé[Ó#¸3¥¼âSÆ[î‚H{ÜÕAs¡ “?Ù.Ëy†]­#ßœîØ_nsÏJÆ¢…‚¦¶¿ÞÖGKý»¦ý¯í^DþvÏ/vÝÎqØëU®ï´[Ùüéí®‹¶¹@À€ÁXÁõ¬:),%ª¿Þ?k&tú®“ks,ðÛÝ#ÊIq»*IêvîÀ>àS!Õlb{Õ+;[Ý6óÀ6’0Üîèzþu…E?©RóûÃÛHܸ¿Ñ®aŠ-îü¸—bªHÊ6ú8Èã¾h¸½ÐîŒ~m”ø<°å?º@` ûŠÃ¢©Óîþñ{Vt6ÚÍ…´÷Rª\¸;eWŒ(P>‚¤MwMŽâYÒ Ä“mÞØãüUÍQKê4¼Çí¤t±ëºlSÍ2A8’l8à`¥T—QÓžXvG:D·æDÚ˜ý¹ÝÀÏ?€¬Z)¬%®¡íe±½oªé°YËlRé–WwvRK1c‚#¯j„Í ÝÎ郫«3HŘ67e‹äçhïÚ±è£êt÷WûÅídmý³E6ßgh/ž=ÁÇ™3³) ±|¯àEX]kMK3käÝ4EJçy õÉ,I®rŠ “ÞÿxÕY-H§Òü¸MÇÛžâ(„>lR¼EŒ…qëVe¿Ñf¼[©-. À©Îxb½ ]Ø$v$qXTSx:mÞïï´fâßèÉx÷ik:ÎÙ;º€HÁ!w`Ü“K¥¥Ç¥E§˜îÌ1¢ *v1Ç|«? ¢—Ô©ùýáídmý³E¢Ùmï0åò’²±cÔ–¸þ&‰/49m¡·6w 9òü³°®zò{óÏzÄ¢©Óîþðö²7mõK/ÂÇ0D…`†5@G'ø»ñù »ÿ -—üòŸþùã\­ž“ÞãU¤Ž«þ[/ùå?ýò?ÆøIl¿ç”ÿ÷Èÿåh¥õ !í¦u_ð’ÙÏ)ÿï‘þ4ÂKeÿ<§ÿ¾Gø×+EP¢ÚgUÿ -—üòŸþùãGü$¶_óÊûär´Qõ !í¦u_ð’ÙÏ)ÿï‘þ4ÂKeÿ<§ÿ¾Gø×+EP¢ÚgUÿ -—üòŸþùãGü$¶_óÊûär´Qõ !í¦u_ð’ÙÏ)ÿï‘þ4ÂKeÿ<§ÿ¾Gø×+EP¢ÚgUÿ -—üòŸþùãGü$¶_óÊûär´Qõ !í¦u_ð’ÙÏ)ÿï‘þ4ÂKeÿ<§ÿ¾Gø×+EP¢Úg¦jpê:n§ä¬‹åÄ3¼Ô7¡öªþ¦¡ð—üƒuŸúä¿Éêo S]4éÆœTc±““»;¨>࢈>ࢴ$e×ú³^{â/øù‹þº/ó¯BºÿVkÏ|Eÿ1×EþtÐiúäÓji¥Ak[x¡ó^K¯†[rÇ´îã9æ¬Yk7Zü«i§«XE3B÷O>ÒYxm©´äÆr*¬š úœÚeÔ×­½·“4H¶ß½Rª8ó7t'¨Ç|TöÚÕ•Üâ×R §Ï+JöÏæ¹`¯¸`ÏC@2O xi2ÇhÕÊ5µâÌA^Π§ZÉÓ¦ÿq?›W1 /‰%ÔåþÔ»”[Û’Œ­`LÝŠ íÇ9úZéáÿ¹¿ëš6¦+¬¥ÃøéE¼ö0·öYË^DdR<ÎÀ2óU4á6¶‚M=.`¸ž4šuDÿ>Y¸SžÝ=ë°¾Ò4ÍFE’ûN´ºtVžr $T7zF™sPÜiÖ’ÅýÚI²§ÐÅ.–þ·¸Û»¿õµŒ_4gÃiác/Cn UÈ,§å'${WžøûUµÓ|Jâf¹Ý6Ÿ*IŠ!oµHS%y'ŸáÀë^¼‘¤J±ÆŠˆ£ ª0öàß[dãýÿô¢j´îÉkKÌW±[ìÛ:œÄ>÷9>äóù~0’id[œ Ü.å¾=MdÈÉ&”8ÍiÌdé£j2ñ´­ö­ÃøVI#aœ}Ïñ§Ægkp#’'›ŽV6qùŸÖ²ePA'éOFJ|Âöhô=!Y4¨Æç&¯V_‡X>…láÝÿ¡Ô¬^æË`¢Š) (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šê¼%ÿ Ýgþ¹/òz›Ã_ÔÔ>ÿn³ÿ\—ù=Má®§ýã@ÔpQDpQ@ ºÿVkÏ|Eÿ1×EþuèW_êÍyãæ/úè¿Î€;«/ùÚÿ×ÿÐEOPYÈ>×þ¸§þ‚*z(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š)CKHzޤGR‚ M‡þ>æÿ®iüÚM‡þ>æÿ®iüÚ˜š†^•1¨eéH çïW€ü_ø®Û?óêÿúQ5{ñûÕã_4”¿ñ-´Œ®qo*|¹Æï´I··ûÝë|5V©ÉÅ'dy1âœzV›ZÜ”UÔš’¿»B¤ü¼Úœ£ÊìÌ}¢3U9§\÷­Øô‡’ õûuõ4&á¾o—éR¹Eí—Ã@Úã§Ïÿ¡šÖªZD^F— ~›¿ô#Wk7¹¼uAERQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEÕxKþAºÏýr_äõ7†ºŸ÷Cá/ùë?õÉ“ÔÞêÞ4ÝA÷A÷˯õf¼÷Ä_ñóýt_ç^…uþ¬×žø‹þ>bÿ®‹üè¨Ñ5n®n¬ž#´ŽÜ$ŠOͺ%b¸þDVÍPÓ>Ò#PðÀ¶æŒnŽK¹Ø3¸mzO•~€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ CÐÒÒ†€#©AQÔƒ ¤Óaÿ¹¿ëš6§Saÿ¹¿ëš6¦æ¡—¥LjzR¹ûÕÂkÖ«s¬+ šyb(@„òœðyÝŸ½^⻉#¿·EU(Ù²;ùÒ9 óÅzbn½—fEO„àä·Š;©Ð{g¡ç>ßÒí\qøSäf‘p£ zTäH )<òvž˜?׆%Þ¬½N;jNˆdäƒÇâ*2Øo_|ѹ¹À•3'ßšÊ(£rÄæÎ3õþf¬Um?þ·Zí]}Áìà3þ«ßùëýôÂøF¯ç¬÷Ñÿ §l^ëKÑìbxâ·1Lì·1¾É …#*HÁ'®8ïŠ.&‚þÒâêxÖ‹KŽk4&;¹O|…•iõŠ×ßðó±<.Â5{ÿ=`ÿ¾øQÿÕïüõƒþú?á]%´ÂX—S*%PrUˆÓ­`iv–öº„š|ö–35Ä2Jn"PZE/ʸ#ý¡ß’ÆVw×o"½”-r/øF¯ç¬÷Ñÿ kxzådHÚâÔ;çj—9luÇØG¡¼bF6ˆâwõfÏ¿µJ¸‚ØÂ‘[¤¶zŒ*²[¡U¶ÐN ';XƒÉ­>³[¿áéþböqì/ü#W¿óÖûèÿ…0øzåeXŨ‘*…ÎHH÷ÑÝM$º}ÃXKNªÊŒX8ÁúÁ‡Ssp‘Ï{qŠ+´I4qy‘2ˆÏWnlñ×<ÖpÅ×—T7Joü#W¿óÖûèÿ…ð^ÿÏX?ï£þ¯{«Zé¶­$÷%íÎÕ;"EÒ@ä*n8ïëŽk@\j á{©®T­ÜqJT¹8ÎÒv’3ŒgéË]u@©Á»qøzædßų¦HÜ®Hààö§ÿÂ5{ÿ=`ÿ¾øSï4ë;ˆl,m¡Sx!Œ¤ùÿxÁ8=‰ä u>¬_é¶7ž"´ìyª>Õ4ÞXÞvà Ýׯ?ð[«}ûôíó³¯b§ü#W¿óÖûèÿ…ð^ÿÏX?ï£þ–SÉý²·wÞgšö[eR§Í€(l`çayÀ{9­½Fù£ÒšâÏ3—À¡C(8Ý…É uãÒ”±uÓJûù Rƒ¹‹ÿÕïüõƒþú?áGü#W¿óÖûèÿ…E`tÿì[˜§·šíVùÄqO•ÏL†'©9éÔãfëM†-ÏN¹….ï™Y V$ªÉlö Ç=xëTñU“µÿø"TâÈWÃ×/#Æ·¥Ó”9Êç¦x§Â5{ÿ=`ÿ¾øVŒ15®»g˜df±e•ÏWØË´Ÿûé¿:٬厬­gø R‹Üåá½ÿž°ßGü(ÿ„j÷þzÁÿ}𮪊¯Ö+ØÀåá½ÿž°ßGü(ÿ„j÷þzÁÿ}𮪊>¿X=ŒWþ«ßùëýôÂøF¯ç¬÷Ñÿ ꨣëõƒØÀåá½ÿž°ßGü(ÿ„j÷þzÁÿ}𮪊>¿X=ŒWþ«ßùëýôÂøF¯ç¬÷Ñÿ ꨣëõƒØÀåá½ÿž°ßGü(ÿ„j÷þzÁÿ}𮪊>¿X=ŒWþ«ßùëýôÂøF¯ç¬÷Ñÿ ꨣëõƒØÀåá½ÿž°ßGü(ÿ„j÷þzÁÿ}𮪊>¿X=Œ Z™6¦ê¾sFÞdC =zz‡Ã}OûÇùÖÜò ¿ÿ®_ÐÖ'†úŸ÷ó¯W RU))Kø'5H¨ÊÈî û‚Š û‚Šè e×ú³^{â/øù‹þº/ó¯BºÿVkÏ|Eÿ1×EþtÝYÈ>×þ¸§þ‚*z‚ËþAö¿õÅ?ôSÐEPEPEPEPEPEPEPEPEPEPEPEPEPHzZCÐÐu è*:t€Zcǹƒ+²8ãrã§ãO¢˜æ?òù7ýòŸüM4Á1ÿ—Ùÿï˜ÿøšžŠªm$nöàŽã?P¹ª×ºm£Â‹+D"€Epr>õ§U]VMbÙ]C(ŠFŒŒåFSùÔT§ŠÒdÓº2ÓI‘žòÍ™×c– K/¡ç‘Éâª\hš$Úy²ŠþÖÚÛŠCX'ÝXúWg±?¸¿•û‹ùV+ El¿þeûYw8û'EÓí¢†ëlD+6Ýß1Ëwã'°â¤‹MÐᣊ{ãfʨ€ ‘ž¹®³bq*6'÷ò¡á)7v¿þaí$s+˜Žî—öªÎrämŽ1“Ï<P®›¡£LË=‚™Áˆ<À½Ï?u›û‹ùQ±?¸¿•/©Ñíø¿ók.ç2°ik!‘oíC• XmÎAœôäÕuÒ´º7K.ž·äÊ#@äúç­uÛû‹ùQ±?¸¿•S¢º~/üÃÚÈæ|3Íó~ßkæmÛ¿åÎ:ã9éPϦèwR¤·ØM"}בŠý Ù§G·âÿÌ=¬»œ¸µÒVßìâöÐC·o–íǦ3ŒUs¤èÀÛ,WöÐÃnæD† ª…°@$Û&» ‰ýÅü¨ØŸÜ_ÊšÁÑ]?þaídrqiúDV¯möëg…Ù™ÕÈ`ʼn'9<òi£JÐ%dÓ„@Ø#M¸8ÈǾå]vÄþâþTlOî/åGÕ(öü_ù‡µ‘Ȧ“áøíÞÝ$Ó– ^5‰±÷ M®“ ¸·ŠöÒ8@À…Ó×Q±?¸¿•û‹ùRx:/uø¿óVHâ“@ð÷‘SÏctb]ˆ÷£°QÐdö|A¦ L¢þÔHT)q·8sÓšé¶'÷ò£bq*o Iî¿þ`ªI§Ø4o´=Àº²[‡]­0UGûÙÍ>Ú×L´µŠÞFŽ$£pè?ê6'÷ò£bq*_S£µ¿þaíeÜäæÓt;ˆÌsÏa*ó º# ßÞÁ=}ê7Ñ|;$1ÂçLh£ÎÄ0¡ ž¸³]†ÄþâþTlOî/åMa).Ÿ‹ÿ0ö²94Ý&Þé§R€f5‰m /eñÖ­í°ÿ œ˜ÿèö'÷ò£bq*OEî¿þaíeÜç6ØÐNÌl?è'æ?ƺ=‰ýÅü¨ØŸÜ_Ê—Ô¨/âÿÌ=¬ûœæÛú Áùñ£m‡ýàüÇø×G±?¸¿•û‹ùQõ*Ëø¿ók>ç9¶Ãþ‚p~cühÛaÿA8?1þ5ÑìOî/åFÄþâþT}J‡òþ/üÃÚϹÎm°ÿ œ˜ÿ6ØÐNÌt{û‹ùQ±?¸¿•R¡ü¿‹ÿ0ö³îs›l?è'æ?ƶôƒóã]ÄþâþTlOî/åGÔ¨/âÿÌ=¬ûœæÛú Áùñ£m‡ýàüÇø×G±?¸¿•û‹ùQõ*Ëø¿ók>ç9¶Ãþ‚p~cühÛaÿA8?1þ5ÑìOî/åFÄþâþT}J‡òþ/üÃÚϹÎm°ÿ œ˜ÿ6ØÐNÌt{û‹ùQ±?¸¿•R¡ü¿‹ÿ0ö³îa‰t»Æ†á&VŒò½° sþêÞ?κmY6—b…ó-%/Œà®3ÿ}ιŸ õ?ïç]áG–;Ûz³ºƒî (ƒî *Ä2ëýY¯=ñü|Åÿ]ùס]«5ç¾"ÿ˜¿ë¢ÿ:äkÿ\SÿA=Aeÿ û_úâŸú©è¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¤= -!èh:tH: @-QLŠ( «ÌjÛþ¸IüÒ¬ÕI] Ôíç•‚D#t.ÇTŒžÝ jQU?µ4ÿùþ¶ÿ¿Ëþ4jiÿóýmÿ—ühÝSûSOÿŸëoûü¿ãGö¦Ÿÿ?Öß÷ùÆ€-ÑU?µ4ÿùþ¶ÿ¿Ëþ4jiÿóýmÿ—ühÝSûSOÿŸëoûü¿ãGö¦Ÿÿ?Öß÷ùÆ€-ÑU?µ4ÿùþ¶ÿ¿Ëþ4jiÿóýmÿ—ühÝSûSOÿŸëoûü¿ãGö¦Ÿÿ?Öß÷ùÆ€-ÑU?µ4ÿùþ¶ÿ¿Ëþ4jiÿóýmÿ—ühÝSûSOÿŸëoûü¿ãGö¦Ÿÿ?Öß÷ùÆ€-ÑU?µ4ÿùþ¶ÿ¿Ëþ4jiÿóýmÿ—ühÝSûSOÿŸëoûü¿ãGö¦Ÿÿ?Öß÷ùÆ€-ÑU?µ4ÿùþ¶ÿ¿Ëþ4jiÿóýmÿ—ühÝSûSOÿŸëoûü¿ãGö¦Ÿÿ?Öß÷ùÆ€-ÑU?µ4ÿùþ¶ÿ¿Ëþ4jiÿóýmÿ—ühÝSûSOÿŸëoûü¿ãGö¦Ÿÿ?Öß÷ùÆ€-ÑU?µ4ÿùþ¶ÿ¿Ëþ4jiÿóýmÿ—ühÝSûSOÿŸëoûü¿ãGö¦Ÿÿ?Öß÷ùÆ€-ÑU?µ4ÿùþ¶ÿ¿Ëþ4jiÿóýmÿ—ühÝSûSOÿŸëoûü¿ãGö¦Ÿÿ?Öß÷ùÆ€-ÑU?µ4ÿùþ¶ÿ¿Ëþ4jiÿóýmÿ—ühÝSûSOÿŸëoûü¿ãGö¦Ÿÿ?Öß÷ùÆ€-ÑU?µ4ÿùþ¶ÿ¿Ëþ4jiÿóýmÿ—ühÝSûSOÿŸëoûü¿ãGö¦Ÿÿ?Öß÷ùÆ€-ÑU?µ4ÿùþ¶ÿ¿Ëþ4jiÿóýmÿ—ühž³ÔÿפÿÍ+—ðßSþñþuÒjSÅt²É‹,qÚʬèr2Åp3ëòšç<7÷ûÇùÒ¹ƒî (ƒî )€Ë¯õf¼÷Ä_ñóýt_ç^…uþ¬×žø‹þ>bÿ®‹üè«ÒuXî§}9 œ=¤—”°–@@爭U4è#ŠÎ'D¥Ž7r?ˆìUÏäåV袊(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¤= -!èh:\ŸZJ) \ŸSFO©¤¢€'ÔÑ“êi( Éõ4dúšJ(w7÷çFæþñüé( ÜßÞ?›ûÇ󤢀sxþtnoïÎ’Š]Íýãùѹ¿¼:J(w7÷çFæþñüé( ÜßÞ?›ûÇ󤢀sxþtnoïÎ’Š]Íýãùѹ¿¼:J(w7÷çFæþñüé( ÜßÞ?›ûÇ󤢀sxþtnoïÎ’Š]Íýãùѹ¿¼:J(w7÷çFæþñüé( ÜßÞ?›ûÇ󤢀sxþtnoïÎ’Š]Íýãùѹ¿¼:J(w7÷çFæþñüé( ÜßÞ?›ûÇ󤢀sxþtnoïÎ’Š]Íýãùѹ¿¼:J(w7÷çFæþñüé( ÜßÞ?›ûÇ󤢀sxþtnoïÎ’Š‚ü“§ÜäŸõMü«–ðßÞ?ïç]Eÿüƒîë“*åü7÷ûÇùÐsÜQÜS˯õf¼÷Ä_ñóýt_ç^…uþ¬×žø‹þ>bÿ®‹ü躲ÿ}¯ýqOýTõ—üƒíëŠè"§ Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ô4´‡¡ 袊C (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€+ßÿÈ>çþ¹7ò®_Ãxÿ¼uÿò¹ÿ®Mü«—ðßÞ?ïç@ÌpQDpQLC.¿ÕšóßÇÌ_õÑz×ú³^{â/øù‹þº/ó êËþAö¿õÅ?ôSמßivww:ܓþH´˜."bNc“Ëa¹}Ƚ=+¢mr8ô»MÖ šhºk}§2¾¸Ç'>ô¯¥ÿ®¿ä;koë§ùV¿¾ƒM´k«–+•R@Ï$€?R+Ït‰$:²è“X3É¥=5fÉ ±ùùëÇn*{¤ðü¾ ¼M%#’àG Þ(Ë…u-æÎ~ösUý_p¿¯ËüÎö[Ÿ.î<‰ŸÎ |Ä\¢`ížÕ=qÈÚ[kzöÙ¾ÊëgÙÀ »bç¥di¿eݤ}—Ìÿ„—ícíùÝæmÉó|ÏöqÓ·LQÕ ésÒ(¯:–ÊÙ,õ-a" ¨Ã­íKÃ…óQvçÓŒW¢Ò[_úÙ?Ô:´QEQEQEQEQEQEQEQEQEQE‡¡¥¤= GERQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE^ÿþA÷?õÉ¿•rþûÇýãü먿ÿ}Ïýroå\¿†þñÿxÿ:î`û‚Š û‚Šbuþ¬×žø‹þ>bÿ®‹üëЮ¿ÕšóßÇÌ_õÑwV_òµÿ®)ÿ Šž¨[O:YÛ*YO"ˆS¥p~Qêj_µ\ÿÐ6çóOþ*€-QU~Õsÿ@ÛŸÍ?øª>Õsÿ@ÛŸÍ?øªµEEâ`À£ÆêpÈãT´QEQEQEQEQEQEQEQEQEQEQER†–ô4QHaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP{ÿùÜÿ×&þUËøoï÷ó®¢ÿþA÷?õÉ¿•rþûÍþñþtÜÁ÷A÷Ä2ëýY¯=ñü|Åÿ]ùס]«5ç¾"ÿ˜¿ë¢ÿ:é`ñE¥›ZÙOkz±¨†¼ò‡²:)U'9çróŒdõ«Sx–]R++>þšo"+§|§sÐw=‰®Sk­KMþƒM¼ó'–ÕÖçÉ>HŒ,LÎ_ #k uÈ&·¿Qñ„¶Z¹¿µ»@L𸴃‡›äÎÒpWæéNÊëúì+»?ë¹ÛÑE†P?òŸþ¸Eÿ¡IQÝjvNêöÞ# I R:ÿÈVúáþ…%`j¾}CR–òDÀeÆå0ïä8;‡túÖue5Á]›P9JÕedjÂA£ÐVËþÿ¯øÑÿ ÿA[/ûþ¿ã\ÿü!_ôø øåð„]Ðdà1ÿã•Ïí1?Éø~Çÿ?_ÜÿÈè?á Ñ¿è+eÿ×ühÿ„ƒFÿ ­—ýÿ_ñ®þ‹¯ú ü?ürøB.¿è2?ðÿñÊ=¦'ù?ö8/ùúþçþGAÿ ÿA[/ûþ¿ãGü$7ýl¿ïúÿsÿð„]Ðdà1ÿã”ÂuÿA‘ÿ€ÇÿŽQí1?Éø‡±ÁÏ×÷?ò:øH4oú Ùßõÿ?á Ñ¿è+eÿ×ükŸÿ„"ëþƒ#ÿÿ£þ‹¯ú ü?üri‰þOÄ=Ž þ~¿¹ÿ‘ÐÂA£ÐVËþÿ¯øÑÿ ÿA[/ûþ¿ã\ÿü!_ôø øåð„]Ðdà1ÿã”{LOò~!ìp_óõýÏüŽƒþ þ‚¶_÷ýÆøH4oú Ùßõÿçÿáºÿ ÈÿÀcÿÇ(ÿ„"ëþƒ#ÿÿ£Úb“ñc‚ÿŸ¯îätðhßô²ÿ¿ëþ4ÂA£ÐVËþÿ¯ø×?ÿE×ýGþþ9Gü!_ôø øåÓüŸˆ{üýsÿ# ÿ„ƒFÿ ­—ýÿ_ñ£þ þ‚¶_÷ýƹÿøB.¿è2?ðÿñÊ?áºÿ ÈÿÀcÿÇ(ö˜ŸäüCØà¿çëûŸù«¨Yj—‘Û[^E4aI<™Aè@àðïÒp¶PÚMud!GL‡ÉÀÜ8luÎZÇÓô‰|?¨¬’Þ}¡&‰7”P+eHxõÁüªõäÿñ/¹‰diX™|Ù$‚cë]rq¼Õ™ÇV0ŒÚ¦î1¨Ùãþ>¡ÿ¾ÅÚ6_óõýö)âÖ£™:zð¥û,>²~cü+C"?í/ùú‡þûhÙÏÔ?÷Ø©>ˬŸ˜ÿ >ˬŸ˜ÿ X®!œ¨øë´çóÐÓâbÉ»$c“O= GERQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE^ÿþA÷?õÉ¿•rþûÍþñþuÔ_ÿÈ>çþ¹7ò®_ß}¿Þ?΀;˜>࢈>࢘†]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@½ÛÅal‚Îy…>e)ƒòV§ût¿ô¹ÿ¾£ÿâê;/ùÚÿ×ÿÐEO@ ût¿ô¹ÿ¾£ÿâèût¿ô¹ÿ¾£ÿâéôP $¹–âHÌ{ÕQQˆ$ÉÉÆGV=êz( Š( Š( Š( Š( Š( Š( Š( Š( M sÄÑJ¡‘†5JËKKYL¯!•ÇX}Ñþ>õ¡EQEQE‡¡¥¤= GERQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE^ÿþA÷?õÉ¿•rþûíþñþuÔ_ÿÈ>çþ¹7ò®_ß}¿Þ?΀;˜>࢈>࢘†]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@•´Ó¬:tq[ hG›/˜–BŒ|½ò*.nuìŸ>ÖÇý0íż®¼|ÀqÓ'­D°yª$XH Îá”~CŠ_²·üóü zW§PݼñÙÌöÑ gTcdà3cžÙ5Kì­ÿ<ßÿž²·üóü zài^Þ&™JPPsµ±È©+3ì­ÿ<ßÿž²·üóü zw:«<·‹¨ZÇ ö®Ï”°nyÉÍVû+Ï7ÿÀ§£ì­ÿ<ßÿž•ÆMªK¨El­¦ÁÓo–C€ž£¾+#í¾+ÿ e§ýô?øºÑû+Ï7ÿÀ§£ì­ÿ<ßÿž²7'~f¿¯Czu”#gýoþfwÛ|Wÿ@ËOûèñt}·Åô ´ÿ¾‡ÿZ?eoùæÿøôå³,q±‡ÖêJŸbÿþä_ÖWüûÜÿÌÌûoŠÿèiÿ}þ.¶ø¯þ–Ÿ÷ÐÿâëV;Xd‰3 Àyïþ4ï±Cýé¿ïûÿÅÿ;ü?È>³ù÷¹ÿ™‘ößÿÐ2Óþúü]mñ_ý-?ï¡ÿÅÖ¿Ø¡þôß÷ýÿƱCýé¿ïûÿÅÿ;ü?È>³ù÷¹ÿ™‘ößÿÐ2Óþúü]mñ_ý-?ï¡ÿÅÖ¿Ø¡þôß÷ýÿƱCýé¿ïûÿÅÿ;ü?È>³ù÷¹ÿ™‘ößÿÐ2Óþúü]mñ_ý-?ï¡ÿÅÖ¿Ø¡þôß÷ýÿƱCýé¿ïûÿÅÿ;ü?È>³ù÷¹ÿ™‘ößÿÐ2Óþúü]mñ_ý-?ï¡ÿÅÖ¿Ø¡þôß÷ýÿƱCýé¿ïûÿÅÿ;ü?È>³ù÷¹ÿ™‘ößÿÐ2Óþúü]mñ_ý-?ï¡ÿÅÖ¿Ø¡þôß÷ýÿƱCýé¿ïûÿÅÿ;ü?È>³ù÷¹ÿ™‘ößÿÐ2Óþúü]mñ_ý-?ï¡ÿÅÖ¿Ø¡þôß÷ýÿƱCýé¿ïûÿÅÿ;ü?È>³ù÷¹ÿ™‘ößÿÐ2Óþúü]mñ_ý-?ï¡ÿÅÖ¿Ø¡þôß÷ýÿƱCýé¿ïûÿÅÿ;ü?È>³ù÷¹ÿ™‘ößÿÐ2Óþúü]lñ_ý-?ï¡ÿÅÖ¿Ø¡þôß÷ýÿƱCýé¿ïûÿÅÿ;ü?È>²¿çÜ~çþf7Ú¼Uÿ@Ë_ûèñt}«Å_ô µÿ¾‡ÿ[?b‡ûÓß÷ÿ>Å÷¦ÿ¿ïþ4{üïðÿ úÒÿŸqûŸù˜ßjñWý-ï¡ÿÅÑö¯Ð2×þúü]lýŠïMÿßühû?Þ›þÿ¿øÑìó¿ÃüƒëKþ}Çîæc}«Å_ô µÿ¾‡ÿGÚ¼Uÿ@Ë_ûèñu³ö(½7ýÿñ£ìPÿzoûþÿãG°Îÿò­/ù÷¹ÿ™ö¯Ð2×þúü]jñWý-ï¡ÿÅÖÏØ¡þôß÷ýÿƱCýé¿ïûÿÁÿ;ü?È>´¿çÜ~çþf7Ú¼Uÿ@Ë_ûèñuµ`o$²¯bH®w¢'Ïlw¤û?Þ›þÿ¿øÑö(½7ýÿñ«…7~fýLêVSVQKÒÿæYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿhbYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿ. Óî?ë›Ò¹o}öÿxÿ:êVÎÀþñ°s†•˜~D×-áϾßïç@ÌpQDpQLC.¿ÕšóßÇÌ_õÑz×ú³^{â/øù‹þº/ó ÚØ…´Œ’ &©®¿¥½Ûè<aˆ2#1f€'ð¨5;kÛÍ*Þ DŠDf_=$”ǽ?»SŒñÓ5a¬>£ê\ÁLÚ„‘ľw˼ž„0£};R_×à7ý~'Sek¨Ûùö’‰#ÉRpAuAö5öÞŸöñdg+9m€4l· b6“횣£Þi––`®£ Ì·w$I,_2´Ì3Œà`qŸJ¥¬_[Üë+mö©¡º@t𹃂ç#h$òqÅ>© £fÐ×´Ó~,¾Óûòæ1”`¥¿ºsíš±{k§[ù÷s,Qä('©>€IöÏÏ«XjšêÚÏ{o Wlm 4ç”øŸn¶u֚Ε¨Ü+( ‹#…$DÌÖ vàŒöÍ.ˆ}K˯é­e=ßžë ó ÂêW=>R2*}–³a¨NÐ[ÌÞr®ã‘4m\0Šç5½i5]#[ŽÚX¤´‚8JM9%¾nzqRi³¤þ*·’ÛRmY~Îé$¥Wã‚0PùÆx¦·±¼Ú²i›­®&tÛæÉ®È·tÜI^­ çl¬mnæT‚ÜzÈøUü³ŸÂ±t¸®ô zÆ;‹(--nàŸº¸2î•*Ç(¸$nóÅ%¯õýLoEý_ðÇQ«cs¨ÍaÊIu†–4ç`'ž™öëW+µ‚ _\¬1Gg#E 2erNgxUÓõ(tàFžÖ+#­æ¡Ô®Ð2¸c“ÔŽ”tOúêZþ¶;:+›ðÜ·xÕÄ“<â Ñm.pHwðNÆx¥ÑßTmAEÓkF-§?kŠÕcϹæ¦Ö¶ô¹~ïÄZUçÙ.nü¹AUoݱU' fjç#©©\ˆu>óR}îþÚÒÖ0vóH¤þ!çדØqߎµJ²‚¤# JKkïah¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+ðçßo÷ó®Â¸ÿ}öÿxÿ:î`û‚Š û‚Šbsþ¬×Ÿø‰OÚ#?ôÐ:ô9ÆP×®Ù—ù€É4ÑÚ«}–/”ýÑÚ¥ÚßÝ?•yýß‹o혤Y¿àEP>=ÔAÿ ŸýôÂÏOÚßÝ?•[û§ò¯0ÿ„ûRÿ  ŸýôÂøOµ/úÙÿßGü(Óö·÷OåFÖþéü«Ì?á>Ô¿ègÿ}ð£þíKþ€6÷Ñÿ ôý­ýÓùQµ¿º*óøOµ/úÙÿßGü(ÿ„ûRÿ  Ÿýô€=?ktþTmoîŸÊ¼ÃþíKþ€6÷Ñÿ ?á>Ô¿ègÿ}ð OÚßÝ?•*«n¾•åÿðŸj_ô³ÿ¾øQÿ ö¥ÿ@?ûèÿ…zU¿ü{EþàþU%y ø‹«€Ñ­À‘¿Â—þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü)Wâ.°ÇØöãþÚ7øP¤×#áÕ÷ûÇùÕ[?ê·Dan™÷c[Z¡A#štð}ÁE:!…SXdU «1(9£H@4Ë\h1ÈIØ*©ðÔdýÁùWc°Ôyké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~TÂ5÷å]—–¾”yké@oü#Qÿp~T£ÃQƒ÷å]–¾”yké@ݶ†‘…³mj"­„µ8(ŠZ(ÿÙnip2-8.7.0/doc/html/figs/ir5.jpg0000644000175000017500000016066013341773367013210 00000000000000ÿØÿàJFIFÿá°ExifII*JR(i‡Züÿÿ)( üÿÿ)( 0210‘ 0100 ÿÿ — ,ÿÛ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`(cXºÆ¯›g5Ìî(”»@(U®{Ôfñq^'ñOSšv6vÖñCŸ”JØ|0éTOÄ}pö³ÿ¿/ÿÅÒ¸óöÔþð£í©ýá^ ÿ \ô³ÿ¿-ÿÅÑÿ \ô³ÿ¿-ÿÅÑp=ëí©ýáGÛSû¼þ6¹ÿNŸ÷å¿øº?áckôéÿ~[ÿ‹¢à{×ÛSû¶§÷…x/ü,]oþ?ïËñt¿ð±u¿útÿ¿-ÿÅÑp=çí©ýáGÛSû¼þ.·ÿNŸ÷å¿øº?ábëôéÿ~[ÿ‹¢à{ÏÛSû¶§÷…x7ü,]oþ?ïËñtÂÅÖÿéÓþü·ÿEÀ÷Ÿ¶§÷…mOï ðoøXºßý:ß–ÿâèÿ…‹­ÿÓ§ýùoþ.‹ï?mOï >ÚŸÞàßð±u¿útÿ¿-ÿÅÑÿ Zÿ§Oûòßü]Þ~ÚŸÞ}µ?¼+Á¿ábë_ôéÿ~[ÿ‹£þ.µÿNŸ÷å¿øº.¼ýµ?¼(ûjxWƒÂÅÖ¿éÓþü·ÿGü,]kÖÓþü·ÿEÀ÷Ÿ¶§÷…mOï ðoøXº×­§ýùoþ.øXº×­¯ýøoþ.‹ï?mOï >ÚŸÞàÿð±u¯[_ûðßü]ð±u¯[_ûðßü]Þ>ÚŸÞ}µ?¼+Áÿábë>¶¿÷á¿øº?ábë>¶¿÷á¿øº.¼}µ?¼(ûjxWƒÿÂÅÖ}mïÃñtÂÅÖ}mïÃñt\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿã”ÂÅÖ}mïÃñÊ.¼}µ?¼(ûjxWƒÿÂÅÖ}mïÃñÊ?ábë>¶¿÷á¿øåÞ>ÚŸÞ}µ?¼+Áÿábë>¶¿÷á¿øåð±uŸ[_ûðßür‹ïmOï >ÚŸÞàÿð±uŸ[_ûðßürøXºÇ÷­ïÃñÊ.¼}µ?¼(ûjxW„ÂÅÖ?½kÿ~ÿŽQÿ Xþõ·ýøoþ9EÀ÷¶§÷…mOï ðøXºÇ÷­¿ïÃñÊ?ábëÞ¶ÿ¿ ÿÇ(¸ïöÔþð£í©ýá^ÿ Xþõ·ýøoþ9Gü,]cûÖß÷á¿øåÝþÚŸÞ}µ?¼+Â?ábëÞµÿ¿ ÿÇ)?ábëÞµÿ¿ ÿÇ(¸ñöÔþð£í©ýá^ÿ Yõµÿ¿ ÿÇ(ÿ…‹¬úÚÿ߆ÿã”\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿã”ÂÅÖ}mïÃñÊ.¼}µ?¼(ûjxWƒÿÂÅÖ}mïÃñÊ?ábë>¶¿÷á¿øåÞ>ÚŸÞ}µ?¼+Áÿábë>¶¿÷á¿øåð±uŸ[_ûðßü]Þ>ÚŸÞ}µ?¼+Áÿábë>¶¿÷á¿øº?ábë>¶¿÷á¿øº.¼}µ?¼(ûjxWƒÿÂÅÖ}mïÃñtÂÅÖ½mïÃñt\xûjxQöÔþð¯ÿ…‹­zÚÿ߆ÿâé?ábë^¶¿÷á¿øº.¼ýµ?¼(ûjxWƒÂÅÖ½m?ïËñtÂÅÖ½m?ïËñt\yûjxQöÔþð¯ÿ…‹­Ó§ýùoþ.øXº×ý:ß–ÿâè¸óöÔþð£í©ýá^ ÿ Zÿ§Oûòßü]ð±u¯útÿ¿-ÿÅÑp=çí©ýáGÛSû¼þ.·ÿNŸ÷å¿øº?ábëôéÿ~[ÿ‹¢à{ÏÛSû¶§÷…x7ü,]oþ?ïËñtÂÅÖÿéÓþü·ÿEÀ÷Ÿ¶§÷…mOï ðoøXºßý:ß–ÿâèÿ…‹­ÿÓ§ýùoþ.‹ï?mOï >ÚŸÞàßð±u¿útÿ¿-ÿÅÑÿ [ÿ§Oûòßü]Þ~ÚŸÞ}µ?¼+Áábëôéÿ~[ÿ‹£þ6·ÿNŸ÷å¿øº.½}µ?¼(ûjxW‚ÿÂÆ×?éÓþü·ÿGü,msÒÏþü·ÿEÀ÷¯¶§÷…(¼CÜW‚ÂÆ×=,ÿïËñt£â>¸;Yÿß—ÿâè¸ü· ÝêPÀׇé_¯cºEÔmáh Ã4*T¨õÁ'?N+×tûôº…$Ã#€ÊAàƒL Z)äQ@Ü6Ô5æ.Ïü#×QƒÕ“ÿCZô»ÃˆÍyÄg?ÙSö“ÿBæ¨ÝPî£uHÍmI¸×5inȘS$’Hp± êÆ´n¼7öeÍþ“¬Á©Çiƒp‹ DÈ?¼'p÷ªžÖ­´JczŽÖwVïm7—÷•[Ê´…þƒ hÚœ^£6¥w [´KwÎî§žÔ=´þ˜-Ìåð¾ºújê)¦JÖŒž`‘YI+Œçh;º{Tz‡õZÕî¬4ùg ÁP ô#wášíMö—£Â9«Þê$ði*©g Æ`T¿ÐrzJÎѼO¥ÿ`Ø[OwŸyc#²<ºy¹s”#•<Ð÷×P[/ë¡Îi¾Öuˆ¤—O°y’7Øçz&Óæ#žk:â9mf’ãh匕ta‚í]zõ«x~hf¹ÿM“Y„,l2œe‡öÎk7ÅwöÚŸ‰¯ï,¤ó-æpQ¶•ÏÊà€zƒKªþ»Ÿà?ëó55iZ!hn¼J¢óÉ¥¸ÓßæÈȃ3ëV/|3ggˆú^û`x|æ\åúçoÚ›âÏ\ßÌöZf¢_K’ÝÓÉ-˜e—u\Ô¼I¢ß]øŠ/¶:Ãk Ã0…ˆ/û¤`“ÆzPïgo1G¥ü¿Cœ‡ÃºÍƘu(téžÌ)o0ÈH\î#Ü ÊÝ]ì^-Ó_J±š+è,u K1oå˦™™ˆÂÈ>è5硸¦÷h×&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÕgO³:…×–\¤j7;¸ôõCu_Ò®ÖÞiŽ€r}FÆ€7[DÒ™6•[þz ?¯¥sÓXË¡ö C;0Ý¿ùô­Ð.r9æg?ÌÖd×ÁµXîG)É‘Üs“úÒN=7H€¥K›‰W‡uY03ÆÑŽþõ—©ØGkåÍo#Ik0Êê;àþ£Ë«Êè!u‘ƒd#ø@ì§Ò¨_M¾Ò <‚Èâ: .?­miš™ ¶¨ZIæû±o*Ç“ЇWѬRÑï4©dD‰"-¸`¨ïV Âj¶€1e@>lŽqžÇ=ÿ/Z†öélô§¶i–ŒÅ í#è;Šòcˆ¨ê%}o±ôµ0tì¹m~oëúès»«Ü| vϡة9ÄJ?JðÕìÞrt«O÷{ù£Ô¡9AE2ÛýX¢˜ˆïÕšò/ˆ1I=ŒÃÉ,ŽŠˆƒ,ĸ:šõÛßõgé^m®ÿÈoLÿ°…·þŽJòŸøEüEÿ@Sÿäÿ ?áñýuOü“ü+éÚ)XgÌ_ð‹ø‹þ€:§þÉþÂ/â/úêŸø'øWÓ´Q`>g›@ñMÀŒO¤k2ˆ”$bKi[bŽ€dp=…Eÿ¿ˆ¿èªàŸá_NÑ@1Â/â/úêŸø'øQÿ¿ˆ¿èªàŸá_NÑE€ù‹þÐTÿÀ9?ÂøEüEÿ@Sÿäÿ úvŠ,Ì_ð‹ø‹þ€:§þÉþÂ/â/úêŸø'øWÓ´Q`>bÿ„_Ä_ôÕ?ðOð£þÐTÿÀ9?¾¢‹óü"þ"ÿ ©ÿ€r…ð‹ø‹þ€:§þÉþôíX˜¿áñýuOü“ü(ÿ„_Ä_ôÕ?ðOð¯§h¢À|Åÿ¿ˆ¿èªàŸáGü"þ"ÿ ©ÿ€r…};Eæ/øEüEÿ@Sÿäÿ ?áñýuOü“ü+éÚ(°1Â/â/úêŸø'øQÿ¿ˆ¿èªàŸá_NÑE€ù‹þÐTÿÀ9?ÂøEüEÿ@Sÿäÿ úvŠ,Ì_ð‹ø‹þ€:§þÉþÂ/â/úêŸø'øWÓ´Q`>bÿ„_Ä_ôÕ?ðOð£þÐTÿÀ9?¾¢‹óü"þ"ÿ ©ÿ€r…ð‹ø‹þ€:§þÉþôíX˜¿áñýuOü“ü(ÿ„_Ä_ôÕ?ðOð¯§h¢À|Åÿ¿ˆ¿èªàŸáGü"þ"ÿ ©ÿ€r…};Eæ/øEüEÿ@Sÿäÿ ?áñýuOü“ü+éÚ(°1Â/â/úêŸø'øQÿ¿ˆ¿èªàŸá_NÑE€ù‹þÐTÿÀ9?ÂøEüEÿ@Sÿäÿ úvŠ,Ì_ð‹ø‹þ€:§þÉþÂ/â/úêŸø'øWÓ´Q`>bÿ„_Ä_ôÕ?ðOð£þÐTÿÀ9?¾¢‹óü"þ"ÿ ©ÿ€r…ð‹ø‹þ€:§þÉþôíX˜¿áñýuOü“ü(ÿ„_Ä_ôÕ?ðOð¯§h¢À|Åÿ¿ˆ¿èªàŸáGü"þ"ÿ ©ÿ€r…};Eæ/øEüEÿ@Sÿäÿ ?áñýuOü“ü+éÚ(°1Â/â/úêŸø'øQÿ¿ˆ¿èªàŸá_NÑE€ù‹þÐTÿÀ9?ÂøEüEÿ@Sÿäÿ úvŠ,Ì_ð‹ø‹þ€:§þÉþÂ/â/úêŸø'øWÓ´Q`>bÿ„_Ä_ôÕ?ðOð£þÐTÿÀ9?¾¢‹óü"þ"ÿ ©ÿ€r…ð‹ø‹þ€:§þÉþôíX˜¿áñýuOü“ü(ÿ„_Ä_ôÕ?ðOð¯§h¢À|Åÿ¿ˆ¿èªàŸáGü"þ"ÿ ©ÿ€r…};Eæ/øEüEÿ@Sÿäÿ ?áñýuOü“ü+éÚ(°1Â/â/úêŸø'øQÿ¿ˆ¿èªàŸá_NÑE€ù“þ¯ƒ¡jÄzIqü¨ÿ„oÄôÔÿðOð¯¦è ™†üH8] UQè-%Ò•|7â59ÔÿðO蓱 ™Ç‡üJ­¹tQ[Õm%ôÇð߉$$¶…ª’z“i!'ô¯¦è¥Ê¯qó;Zú1Â/â/úêŸø'øWªx) °‚£xåvº:ᔎ ô5é5Åi?òÔ?ëòoýÔÐŽîÛýX¢‹oõbŠb#½ÿV~•æÚïü†ôÏû[èä¯I½ÿV~•æÚïü†ôÏû[èä G¦³ʈ»º ãñ§RFÓãÿ®OüÖÅò®¹ýü?üMMÏ÷!ÿ¿‡ÿ‰«Y®fïÆÿošÚÂX%Ͳy²»ÿ¸<Üòã“WÐ"›vFÑ/„•–û¥NAö§S%›Ï‚ÆmŒžcÚÃrŒp}éô€k1ܨ‹¹Û Î?w•sýÈïáÿâi±Ÿôøÿë“ÿ5«¹  †+3åÆ}„‡?Ê£ïØ#RÌý¦1×?J¾= gZôïûÿÿ£&ò®¹ýü?üMUÏ÷!ÿ¿‡ÿ‰ªïª²–'ìh0[­ŒB±\ão¨=éŸðÙ‚»ð °RÞ|G8ÏN)s.å(Éì‹~UÏ÷"ÿ¿‡ÿ‰£Ê¹þä_÷ðÿñ4éõ [u·i%n$Xâ* fŽÞý*Îi’Tò®¹ýü?üMUÏ÷!ÿ¿‡ÿ‰¢ßQ‚æúîÎ2Þm©Q&G0ÈÇáVóL MæÄWÍE Ç•²3ïÀ¨MÄŽì°Ä)Áfl ûpjÝñÿEÿ¶‘ÿèb©X¶_úë'þ†i w™uÿ>ñÿßÓÿÄÑæ]ÿϼ÷ôÿñ5g̨¡½·¸2'ŠSl#†ØÞ‡µGæ]ϼ÷ôÿñ4©;ù‚9£ØÍ÷H9Û æ¬y•Zá³=¯ýu?úPŠ(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ â´Ÿù êõù7þŒjík‰Òä3¨×äßú1¨¼¶ÿV(¢ÛýX¢˜ˆïÕŸ¥y¶»ÿ!½3þÂßú9+ÒoÕŸ¥y¶¶3®iŸö¶ÿÑÉ@Q©Æ£ýq“ÿBJ’ cJ/úá'þ„”†r|Cªé:?•§Å$PKòÏ|­ƒþê÷R½Øtääcü:ð9´1ëZÚùr0ÖÉþPƒ¨w¾‹Û©ç§r4xÈ™n.nn–IÚ`³°! 9 0ôÎHõ«im ˆÁ>­ÍLyµæX»lµ§ýv?úÓª½Ã~òÍé±ãþÙ½Xª58Ôcÿ®2èIUõá©M¥ÈšT«Æyϯp§±÷þ]jV8Ôbÿ®èIR9  ÿ ,°ørÞ9ÒDI.å—;‡ï[®jÍ£§ûxÿÑ¢¬+Õ+FÿLSØý§ÿF­rþ$ÖL3YDÛY€b@?½›Óé\‡‰uhçŽIoÄ©pX²9o“‡öâ½#QðÆ™©\ý¢á&2›ge’xú±?‰ª‡Á#ÝÓoÆðn¤ù±Ó<ן[ RsrM¾†§MFqmú/ó&º¼š=#Ã-Ï›qn²lb7)C}Gµd]êbÔµSªÜ¦©m|ÐÃf&"< ±˜ú6åç8Ï9Ð\éâëOÅÀŽÊÉ•ÒÝcÉ, …Ë“ÐÓºÕƱ³{ż{;vºQ…œÄ¥Çѱšô ¬•ÿ­¿Èòfù¤Úþ·ÿ3•Ô s¨x¯P†òîÚæÒ(¥‹É•w,Yù—£tÇ4^Íwyÿ øÔo –ÆÚ)­Ö†XÕ¼­ç)¤ê+­kkwó·[BÞxÄÙŒ0co^8æ²Úí•~ËÙ”,£Ëcn9ãžÔtT>IÌúL¶79…Ž=K-Tµ|G/ýv—ÿCj³tBÙª( ±~ñj¹ù%ôÞ_ý ¨—[ *É\á´Ïkém¥ê·ZŒw6÷׿ekCnªPdÊÓӽ"k—šrjÉd`†{­q­Vf‰@Œâ8Ÿ­jøoÁ¶ZË7üÿÜßñfŠ­öY¿çþãþø‹ÿˆ£ì³ÏýÇýñÿVh  ße›þî?øŠ>Ë7üÿÜßÿñfЬ¶Ÿ½W–yf(r¡ö€® þ5ºj<­$sÍs–íÁ>¸ ÕÚ(?û-¿çþëòÿˆ£û-¿çþëòÿˆ­ (?û-¿çþëòÿˆ©mì ¼Ö–Y¤ Òcåð­Ñ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@qZWü†µúû›ÿC5ÚצÈnÿþ¾¥ÿÐÍwVßêÅ[«Sïú³ô®ôgÄšpÿ§¨Ïþ<+¿½ÿV~•ÁÜ øŸOÿ¯…þtÝTqC דy±G&#LoPqËT”ØN.çÿ®iüÞɾÅgÿ>°ß±MŽßO—w—³íb­µàŽ û×i·w3X]ksêÍs‰|Ã+ÛlómÅþLmþï9­‹ Léº^«"]A¯«Îˆf…åÜwt„3zSþ¿/óÓúõÿ#¯ûŸüúÁÿ~Åb³ÿŸX?ïØ®VÛÅ··zLTFkæ²BÊé@$¹Só´}ÓÎx©umRÒMŒ­l÷×>c´ÑÚM$h‹ùf„±'#¾)ÒýŠÏþ}`ÿ¿b±YÿϬ÷ìW þ+Õ>Ãe4C`²4©=ÕÕ´¦%*@_—åe 9+¯†_2ßz>år}ÓÇQíL.b³ÿŸX?ïØ£ìVóëýû&ê7R?±YÿϬ÷ìQö+?ùõƒþýŠ“u¨?±YÿϬ÷ìQö+?ùõƒþýŠ“u¨?±YÿϬ÷ìUhÑ#žå#EE *Œò-]ÝT×›‹Ÿúè?ô cìí-¥€¼–ñ;$Ë2OÎj°ÙÿϬ÷ìSlN-?í¤Ÿú¯?±×µ;/\ÿh^K"Þ[\µ•ác¾9îËuÏSõ…+ž…ö?ùõƒþýŠ>Ãgÿ>°ß±\¶­â[+L´k{»g¸[%žH%¶–g~:–CòƒËµ5Ö¿«\ÞG”¶Q©ÓVø‹¤v-“÷AVúóM«_Ëþù ;¥ývÿ3£û ŸüúÁÿ~Åa³ÿŸX?ïØ®oIñ¥5ΖڂYý—SµyâòƒDUCmbI ÁêéU´_êwÖMö@ÖwŽFÄ´ZÁ*Í)p3ŒuïEµ°¯¥Î·ì6óëýû}†Ïþ}`ÿ¿b§È£"}†Ïþ}`ÿ¿b°ÙÿϬ÷ìTùdPa³ÿŸX?ïØ£ì6óëýû>EØlÿçÖûö(û ŸüúÁÿ~ÅO‘FEAö?ùõƒþýŠ>Ãgÿ>°ß±SäQ‘@}†Ïþ}`ÿ¿b°ÙÿϬ÷ìTùdPa³ÿŸX?ïØ£ì6óëýû>EØlÿçÖûö(û ŸüúÁÿ~ÅO‘A<`žÀœPa³ÿŸX?ïØ¨î,­ÚR-a! ˆÇ¥`Yx¶þïZYÑ’9ÕÈ”}¨Ÿ-GV?'N˜çœŠénHû,ßî7ò }ŠÏþ}`ÿ¿b“ìVóëýûŸâ$ÔfÑn#ÒÝ–è•ÆÆ Åw ÁIà2®fæòÆêQ§Ûæž6„ÍgªË#²eÀ|Ý\«Å P;o±YÿϬ÷ìQö+?ùõƒþýŠÀÔ5=fZéöRØJ³1ãkwß #ï30|džËÉúÎ>2¾—Q“ìÖ¢KXîþÌa[IÚFPÛYÄ€l98ôsIjC°ûŸüúÁÿ~Åb³ÿŸX?ïØ©7Qº€#ûŸüúÁÿ~Åb³ÿŸX?ïØ©7Qº€+Ïgh-å"ÚBô©~Ågÿ>°ß±IpßèÒÿ¸•dø¾êko j[ÊñLP"HŒC)f GCÍF·Ø¬ÿçÖûö(ûŸüúÁÿ~Åpšž»©ÍáÉ4ˆn=j•n¦BC"D»Œƒ7‚˜ÿxúVÈÖµ;Û‹{-(Z‰”wSMtߨ G<œþÄt_b³ÿŸX?ïØ¦¥µ„›¶AlÛISµàúW7‰ïµ8t¸tø-á¼¼YZSq¹Ò!ÚØ‚ÙcÇ"²´ù¤ŠÒu ¼Ó7ˆX€ÁU²ß2óùg4%woëtè¯ýlÙÝýŠÏþ}`ÿ¿b±YÿϬ÷ìWŸýšGƒÄúÌñX܈žê0&…Ì¥Upxq…Ç`Ö®]x¾ö ¦·ÓíQ–Ê8Á‹ì³ÊfbŠ« *œìÒ_åøƒÞÞ¿Ùµ­’)f¶·U$”P¡m,™C-µ¹R2pkÖõ}STÓõȬRÖKKb³}¡XÈìÑî `€¸uÏ5Óé ÿkú÷ÿAû…öþ»~Ågÿ>°ß±QÏgh-å"ÚBô«ª;†ÿF—ýÃü©VÓþ< ÿ®küªj†Óþ< ÿ®küªj…iâAª]ÚZÙI$pÁçE.ð<ÿ˜®Ùž~œÖ­õ¯Ûl'µódˆL… ‘œ2‚1‘ï\嶉©ézÜ—pÜOw:• 8…°'l*Œ‡<}hë¯õ tÓúÔÒÓõ›©õgÓoôáiqäyé²q*²ç'?þº~µ©Þép=Ä|wñFd•ÞäF@@œ}+7F²¼š;„Õ4ëènî×7ŸhŒr:"lrÊ£œcß<šv±¦`ºjh“ê‘*–Ži®Ô˜Üç’ÎÛ†=Fh{Ü·¨ëwvºrjÚjÍkä äinL£Àœ{Šdþ"æHtí5®¤û*ÝH$”E±;@àåŽ:Õ=FÆömÓN½Ñޝ2[®n|ôP²ãåˆaë3Qßè×ÒXÙEöInuAj!“PKÆAï¿kqžqË4>¶þ·éëbûxŽk–ÓWK²Žäß[µÀóî<­Š6ñ¶OÍúSïuËÈ.’Ê×LW‹oö‰ãV5Î0¯ÌI«>ûE[}"ÓJ_®ª ¶ÇpÏn„åŽåõÊæ’?ZÑç‚ê;í)¤Óã¶Ÿ*‘"d†Ëc*w÷ã¥Ëúßþ+ÿ_"åçŠâƒI³Ô-¬®.cºÀµc Á~fèOA“üêÞµ©Þép=Ä|wñFd•ÞäF@@œ}+:mêÛé05ÌfØ`"EfÁ8ã­Xñ%¼—ðýèQM»£—ÎD¿#<ã4K˸ãæ-ψ¦2Û¦½ÜÍj.äG”Eå¡è9,yãÛ­\]V;ŸVÙÕ­ÌÈÒ©!xÏÌoÇq¿›¨ß›«vfŠð: WwQÂí#ØŠÛþÍ·þõÇþÉÿÅQý›oýëü “ÿŠ©s¢½ÍœvÍ«ê*ª¬ŽÊñî”»²ŸË£iVVpÚÀ»a…h Î?öm¿÷®?ð&Oþ*ìÛï\àLŸüU&ê7Qý›oýëü “ÿЦÇcg4aâ–gCÑ–êBþ=Hn£u/öm¿÷®?ð&Oþ*ìÛï\àLŸüU&ê7RÿfÛÿzãÿdÿâ¨þÍ·þõÇþÉÿÅPn¨#æk÷Çþ€µcû6ßû×ø'ÿUâ‰ašæ4-´H1¹‹º½Ï4 –ÌâÛôÒOý ÖkøgN—ÃM ËæIhC|ÌFðKÈ8ÆAe*îã“ÛÝ;A‹JM­ýòÚ©b–fE1.{—v9àf²ùïsÿ ÿž÷?ø'øÑw¸yÛ¨ÝY; ÿž÷?ø'øÑ²ùïsÿkn£udìƒþ{ÜÿàDŸãFÈ?ç½ÏþIþ4­ºÕ“²ùïsÿ ÿž÷?ø'øÐ¶ê7VNÈ?ç½ÏþIþ4lƒþ{ÜÿàDŸã@Û¨ÝY; ÿž÷?ø'øÑ²ùïsÿkn£udìƒþ{ÜÿàDŸãFÈ?ç½ÏþIþ4­ºÕ“²ùïsÿ ÿž÷?ø'øÐ¶ê7VNÈ?ç½ÏþIþ4lƒþ{ÜÿàDŸã@KK;α •ÀVp£,@Oâh¸oôiÜ?ʳvAÿ=îð"Oñ¨çX¼„Oq‡¬òz}håý¹¼·xEÌö䜉 `®0{dúVAðµ¤Ý-ÍåíÌ×AIå‘K…Fܪ0¡@Ï·zÛû%Ÿüô¸ÿÀ‰øª>Égÿ=.?ð"_þ*?ð…Õ®5u[ød¸e2"˜Š£yB@öÏsNAŠßP{«[ëÛt’_:KhÝ|§~䂤Œ÷Á©öK?ùéqÿÿñT}’Ïþz\àD¿üU @$ÝFêì–óÒãÿ%ÿâ¨û%Ÿüô¸ÿÀ‰øª“uª?²YÿÏKü—ÿŠ£ì–óÒãÿ%ÿ⨙¿q'û§ùT­„:­“ÙÎᳫ„ò°aÔâŸ=­˜·”‰.2ÿËÄžŸZ“ì–óÒãÿ%ÿ⨬Ú]”Ò]Ê`Užê&YWï2àŒ~µJ_ Û2Ú˜//mf··Âh$Pïè*AõΫ_ì–óÒãÿ%ÿâª6ÓíMÂJ.ïH1 ‡ÚÄã“ß#ØÏ9¢Ã¹/‡,M¥”ï=£Y šî~÷$sß ÒAá»H- „Ü\Èb¼ûo˜ì»žNsœ1Ï`+[ì–óÒãÿ%ÿâ¨û%Ÿüô¸ÿÀ‰øªzÞâò3ÿ°í³u2o*ýäyNá¸ë·Ë9¨dðì?k76·×Ör:"Köy vŒÀ©çdb´£ÓíRIY®ï$ÙTk‡ÄcÀÆ;ó“ÍIöK?ùéqÿÿñT¨ønÚþ{™VòòÐÝ'—r¶î¡fÇÌO8ã#¶ m­â‚<ì.zà QöK?ùéqÿÿñT}’Ïþz\àD¿üUIº£™¿q'û§ùQöK?ùéqÿÿñT;"2\z´KÿÅR;Oøòƒþ¹¯ò©ªOøòƒþ¹¯òªºÆ±o¢Z%ÍÊJèòÀŒrA=Èô¤ÚJìv¹¡Es+ã1ºAwÿ|/ÿOÿ„×Mÿž7_÷ÊÿñUŸ·§Ü®Iv::+›ÿ„ÛLÿž7_÷ÂÿñT‡Ç`ÿ–7÷ÂÿñT{z}Ã’]Ž–Šæá9Ó?çßýð¿üU'ü'Z_üð»ÿ¾ÿŠ¥õŠ_Ì’ìtôW1ÿ Ö—ÿ<.ÿï…ÿâ¨ÿ„ëKÿž÷ÂÿñT}b—ó$»=ÌÂu¥ÿÏ¿ûáøª?á:Ó?ç…ßýð¿üUX¥üÁÉ.ÇOPÜÙÛ^¢¥Õ¼3¢°uYP0 :žõÏÂu¥ÿÏ ¿ûáøª_øNt¿ùáwÿ|/ÿGÖ)0rK±Ñy‰üÿ)<í»<Í£vÜçëŒö¨¯4ë-AUolíîUNTM¸Û"°¿á9Ó?ç…ßýð¿üUðœéŸóÂïþø_þ*Ÿ·§Ü9%Øé#Ž8cXâEHÔaUF€S«–oékÖÞóþø_þ*´4Ùës­¢!Þ(ØŸZ¨ÔŒÝ¢ÄâÖæÍqÖò¿ÿ¯™?ô#]qÖò¿ÿ¯™?ô#V#·¶ÿV(¢ÛýX¢˜ˆïÕŸ¥p“ÿÈϧÿ×q]Ýïú³ô®ùôÿúî(¹®ÅÍ:xcZk|îñÇüóÞwÿ㻫 ¢ÙC]Ü+A‰¿/N2å’`ÕÕ?ðu·†dð<Ò_}…æ‘[í†}¥·s×?§¶*Ï‹™g´Ô“{=¼M¦ãÎ~|gß˯]|*ðåÍá¸OµÛ©90à øeIØTôêžñ¤wšv¡ hd8š9¼ò¥[xÚÀ9 G#¹Îõ*BÏ–îÿ ;«ô4üKêëksvú·ö"Û.b™;™ÕHfÆ1œ`ñPj>/’ ›k T™’\ýªkYî¼ÐÙ 1È'i%äk Ôô7Ô§2.±©Ú+&ÆŠÚD Ãþ¤ƒîªÏá †ÂæóN–Öl’ÚÈ4c­¸0<óœgšæ[[úëÿ·¿õäcê¾2¼¶Òmná6ö×miö™´û‹I¥{ŸêÇe…h sTÔ5»;=;ìpÃ-„wÒ5ÄlìC66¬1Ç~jÅÿ„ ¿‘¥þÒÔmå–ØZÜ<2&gAœoܤg“ÈÇZ»i¡ZÙ_ÅyÊdŠÍl•Y]ŠrN¿çJ××úßþžß×—ü†—©êÚÅåÅÄ"Ê*‰-öº3M&ÂT¶C¿0à`ñ\ÿ„u=WMÒœdóÒªXêÚ½® éöR\°¿Ü£Z˜ç–8A#S) H '$cÖªÿ×_òÑÛúØôÊ+ˆƒRñÌšN‘u+i·—hy.LQ´dmÂå3õÆ)5S][MÆké^ %žIí ·i%vba!U òó´gžÔÜRn]û7 ØÎ3Î+‰[¿jZµŒ—í¤Ü®”·3G1H ÛÊœî Çüj¦‰q{âØên’ÊitXe”@ˆD‡ÍlNÓÞšWןù »/ëËüÎîÖöÚôJm¥ehdÇðºõ…O\…ýÖ–“^G.Û1ââ¼] ‚Žv†Éb½+¥ðÍõÖ§cs}q.ø¥»—ì£haVÚ½9ÚNO­%ª¿—è¿ÌoGýyÿ‘µEPYÿòõuÿ]þ€µ¡Yÿòõuÿ]þ€´ž-|å|„*d~ýãGölóÊûçÿ­QO Œ‚êî£Í;V$ʪ2WýãUŽ AýÓ´kýß´îýZ2ZÊu¡i3HRœÕâ³(0¡z)~Ìþ«PéwÏteŠB¬ÑàïVÎA-€~QÈ’ß]Óî盧·™äš2ÊÅa}€¯Q¿r=3W©.h“(¸;HŸìÏê´}™ýV±4-vêöÓC73Ûù—©3H­n}§¸ùF;çð¦ßxºÑõ:ÏM¹ó[å‚Sä¶Â¸mÁ\¤ä„ÕÛ[ÒæïÙŸÕhû3ú­U“ÄzLZØì üÁýÛz)|m ìNjKmsO¼¿{+yžI²±X_`+ÔoÆÜLÒo³?ªÑögõZ·ETû3ú­fU«tPO³?ªÑögõZ·ETû3ú­fU«tPO³?ªÑögõZ·ETû3ú­fU«tPO³?ªÑögõZ·ETû3ú­Gqlÿf—•û‡ùUúŽãþ=¥ÿpÿ*µögõZ>Ìþ«Vè  ŸfU£ìÏêµnŠ©ögõZ>Ìþ«Vè  ŸfU£ìÏêµnŠ¡slÿe—•û‡ùTŸfU©®ãÖo÷ùT•Åíµ°k y;0]0‰@õ,Aãè æ€ìÏêµ^M¯ ½‘® VX˜±ùCc¤Ö®Æÿž¯ùð£cÏWü‡øPXt›(.–æ8H™mŰrìv@äú÷ëT„ôB–j->Æž\9äFTÎv’ìsZûþz¿ä?Âÿ=_òá@þ±áÖšÊúÓK¶´5Bßm’yå$cz üW+fÓO·³ÒáÓ¢L[E…W?Â*}ÿ=_òáFÆÿž¯ù𣥃̡ƒ¦CvØM;þ=G˜ß»ão¯<ù«zu­„—/mƹ”Í1ÜNç y‡©Àt®-Lkb·QK ‘HÃ}Ö9çóê;M/YŠßCÒdÒñ›v®×‰2ynŠd.wdäqZì>ÕþÇëGÚ¿Øýkkës±ÆÁá©áÔ®-ï4ûÛ»ioÊO¢R ï¢.9SèqZ:•·‰CÙÙ\ÙiÏ$t“\FñHNpѨ%”–äôx®‹í_ì~´}«ýÖ’ÒÀõ,QUþÕþÇëGÚ¿ØýhÅ_í_ì~´}«ýÖ€,QUþÕþÇëGÚ¿ØýhÅ_í_ì~´}«ýÖ€,QUþÕþÇëGÚ¿ØýhÅ_í_ì~´}«ýÖ€,QUþÕþÇëGÚ¿ØýhÅGqÿÒÿ¸•Gö¯ö?ZŠâëý_“øjÞ¢«ý«ýÖµ±úЊ*¿Ú¿ØýhûWû­X¢«ý«ýÖµ±úЊ*¿Ú¿ØýhûWû­>çþ=fÿq¿•eø™õuÒvhÖòKq,ŠŽÑ²+Çû̻ȱÀç©Ïj¹suþ‹7Éü¿µKö¯ö?Zçá·ò¼6,¿ášXRL;™`v“¹’åIÏ\œçšÂþÍ»ƒOB–ØYŬj[£±YCýžÕ@iG;O¾»ßµ±úÔLÐ=Â\5´fxÔªH@Ü ã dùQÖáÒÆ.¥kªéþ#—UÓ4ñ~—6klÑ –3£1Vùˆ~cœsÇCYMà[Ëyvú¥È¾]5­L1¬F7',TRT¶Jln5µ}¿ÎP# ”©_½»91ß5×FÐC$²Em<ͺFPsŒdœrpü*_µ±úÕ_[ÿ[Ü›ioëk¦«¤ÝêäÙøu,®¢»IVÄ¥£SÏÝ;ÛrŒa†9®Î«ý«ýÖµ±úÒZ+­ËCVÒ`ÖmVÞáäTW dœÜZŸí_ì~´}«ýÖ”¢¤¬ö*”$¥©NÓþ< ÿ®kü«ŸñÏü!ÿ¯…ÿÐZº Oøòƒþ¹¯ò®{ÇG$?õò¿ú V8áH¨|HóãŠB³Iœ×„u‰ÅƒÅ&hÔ†“4›¹  “hÅB­OÅá78QÔœ ¹¥i¿ÙÞ%7OæªÈeI[ ŒcHÈë‘ÍÏ Ù}¯P»(HXc$d¿P1ôçò«ž#Xl®ÝâœÃ˜<ÓÜŽEw<ñ1îkzO—æL•ÇYØÛ>­wuÎË,ŠX¤˜†28ÁÇÝàñÉëÐÔñLḧ²ÆLLdpHfÚ…luw=xϰ2xvay#^’Â9æwˆ´€å zu g³ùYÖZ3*³¤“*ÛÆ@HéÓw_O^³9®sHEØäGÁ÷éqÞ¦¼VbP>1¹ÎÒ@ÏNpp=¸Ï& SÅCVfOG`=+­ð'ü…eÿ¯vÿЖ¹3ÒºÏÈV_ú÷oý k³üGéþFUv=¸ëùßÿ×ËÿèF»ã¬?ä;ÿ_/ÿ¡õLNÞÛýX¢‹oõbŠb#½ÿV~•ÂOÿ#>Ÿÿ]Åww¿êÏÒ¸IÿägÓÿ븠æª\*¹™C+5° Œ‚ ½*ÝW•Ú- ²ùµq’BN3ì) 导Ei¦Û$Ò­µ»²‚Ú&GlŒãåqŸÇŠ¿áï%ýü ov³Eqò”`ä© ÍüNpzgé\E×…¼Ew,RˤÎ^P¿,GyprÝ2=úÖσ|9¬Xx’›­9à·äwqà•#hÚÄ‘ÏÿXW™Nx‡5tísÚ©‡Âª-©.kwGi>­§ˆç†âñÒÞ?í/D¾Z€äßÙÀéŒS4ïÚê7pÛ;ë7¸ŒËl×Q¨ä•Á=ˆ888íY6öÞ$ñn±i ÛàþÉûòÇÈŽBíòçûÀsйe¢ë3êZmƯ-ˆLÄ?e,LÎ˳snhÆxäõ¯Qmýwðïýv_ðJ~ñ[O¦é–Ú•½òÏt]#¼™Ç3dž$Ô•£¦øÊÏQ¸´ŒXßÛÅxÌ–×Æ¢9YsbAàã tªÖž½·Ñü=fÒÛ™4Û³<Ä3a— /ŸœuÇz,ü1{o¤xvÑå·2i·~|Ä3a— /ŸœuÇz}~Óòþ·:Ê(¢ÂŠ( Š( ³ÿåêëþºýkB³ÿåêëþºýhvDÝ¡†]»ð&MÊ •8úTÞörÞ?hÑÐ~K ºÈ¹û,æÖ–BĘÏúäcÔú)®!´ï·ÞÓ®þ¿ã^~.u£%ìÓg¥ƒ£F¤©$µêÑÝé·^{Íš$XÀ`@ ŸåŽzV~—â gmDÞÛH–ö³Ì¿jDAô?6ìãÚ¢ð–¡j—olÐ6 À“ÙèO­*hWÞ^«§HÖÇN¾y¤†o5 ƒ¦Ü`à÷ÍtáÜÝ4罟ærâ¡ÕqƒººÛÐóÏ­7«kúéÿ6·õßþv×Qñ[m2ÜÛI¨Gd.îå» Fç'¨R1ÐŒöpi“x¾i×F{{­;OKûg™Þü À¨Ø0ëÎK~U§©iz¢k/©éiæMl-åK¢À UÁPrFãÇQPU°Ð­ôm>=:âÙmü©ñœÇ9;BG9ÆEëýuÿý\:ÿ^_ðKíÝÜZ}œ3ªßßO"XFzFPIÀÚ¹ê(“XÔ#ñe¦˜öQÅe4r•™ßsÈP)È'Û½ Çn¿ ©”Í…d–«!zg±ü/ýõ[7šl×"Ó5hÄV±ÌŽ ;‰p¸Çìš}~ÿëõùˆÍ¼ÖõÚX™téÒæmŸeˆ7Ú#ŒƒûÂsŒ sÀú×M\Ö¥¤êú½õºÏ› ­½ÒΗ³´ûU²@Rz“Ô×KIl7¸QEËOøòƒþ¹¯ò®sLJõò¿ú WGiÿP×5þUÎx÷þ@P×Êÿè-XWþ.<ðfMÏj]ÀWŠÑÖ!£ÆS<ášVlSHæ•dh$Qaæ‰dòSqŽWôXÓq'ôÉ džiCRïZkp°ÿí­FÖêÚÎÍ£0¸vþwÏQôª·âïŲéÐNRÊИon㸠9=Çn;ðyÏO{ÙšÄÈ¥QÄŽƒî‚T{dð*߇¾×&‚-n¦Ž8í¥"Dë¶=Œ y‡!O#q<óÈä tÆ ATêO5ß)èVó,lÖv©XÀI6žTô?^˜­[ÄFO*Hªã¯Vþ|ʳmî +±#w‘eâ0W Îy=03Ôò1œÕÁ(¹sò³(?) Cœ vž‹Çn¿AÏ'³Vl×›S Y·>Çܦ&dÎv‚àŽ{ã?ÓŒUë]¦£n!O9bi 6–%¾«×òüsÒ¸É[>[yÉù¿½ïT¾MK7qq]oä-/ý{·þ„µÇ,œòk°ð!Ϋ)ÿ§vÿЖ»0+÷ÓüŽz¿ èÇXÈvûþ¾_ÿB5Ø×aÿ!ëïúùýר`vößêÅ[«Sïú³ô®ùôÿúî+»½ÿV~•ÂOÿ#>Ÿÿ]Åw4Ë77Jꈱǖc€9nôµÎxÊæKO jw¹ŽHþÊU‡cçŽhI·dRWvGMý«§Ïý¯ýþ_ñ§Åg<‚8nà‘ÏEI?¯¼×µÅÕç·´Õ® FÃ5º«ò9AëžÂµ<9¨jóx·J‡P¾y£3>¢¯>L¼ð=ªýT®Ñ»ÂÔQçèz¥Ëêrê—~2J´Õ¥°€iæàùPÆåŸÌÛÎõ78ù­Kvó.è¥/L«*Äò[6'(àH»€ž0zûɸբ•üˉC¿MÏDþe+ž®&¤oK:ªñ:_³'«QödõjÉðõêܵÌQÈZ(°(ÚX±8ÚU ']¿Ž-bëPŽ6Ó¬înÒ<ßÞC„یc¾êÖHÔ2ØÎ¥9S—+Üé~Ìž­GÙ“Õ«”´ñô™„–б[Gº-/áˆQ’¬|ƒÓ‘מ)ú–¿¨Ëàéõ8#¶‚Bðù-ot&V ê-´c®:².ufOV£ìÉêÔÛ).å¶ {odå"˜È¸íó_åX÷򢯿‚𕞖nJyØŒáðc†ãïgð£`Z›_fOV£ìÉêÕ‡§ø’æk«8u-5lÖú#-´‰qæ«awo”8ç¸àóQ[x®ææm>_ì­šv¡?“op×9áˆcÞ е°¯¥Î‡ìÉêÔ}™=Z¦¢È~Ìž­GÙ“Õªj(³'«QödõjšŠ‡ìÉêÔ}™=Z¦¢€!û2zµfOV©¨ ~Ìž­GÙ“Õªj(³'«TWÉöiyo¸•[¨î?ãÚ_÷ò  ÿfOV£ìÉêÕ5Ù“Õ¨û2zµMECödõj>Ìž­SQ@ý™=Z³'«TÔPK›dû,Ü·Ü?Ê¥û2zµ-ÏüzÍþã*‡RûØŸû7ìâäðã;Tw8“íÇÖ“v_³'«QödõjãÄ:šü?Ò59.öMq$iuv°«4jÌAeL`œàc¯CSéž&™<1¬êSÝ‹øl¥‘-® y°(yÛÐgƒŠoKù_¨-mæuŸfOV£ìÉêÕÆYÇ­¬Ðhš¡´–ÏOK›‰ÌK+K4ŒÜÙÂä7Nyê*)|I{a¢j^^é–SÚI%Üö–buYAP%jýóš?¯Ïüƒúþ¾ó¸û2zµfOV®w^®´í#J¶¼ißRš57 @/ îù\@Ç5>{íbéöRËnšmÄS”Š5˶À¸,Äq÷ºÌö-­€ßû2zµfOV®WTÔõ 7Åz}²jÒH·w!ZÖkUHV"Ý—/Çq'Ò» ×½ˆ~Ìž­GÙ“Õªj(.Óþ< ÿ®kü«šø€q¡[Ÿúz_ý르ÿ(?ëšÿ*æ>!+6ƒndý©ô¬k —‰yž3M,M5N<⃀ppzZò”5²j,Ô eöŽ[Àëò)OËÃ)Zb’§ÏJ:‚@'i„€y8 .sJ$8⣑Ò4.쪊2K=iŸi„ÁçùÑù8Ýænq래¢ÁrΧ>£­^J± f# 8 9=sêN~ƒûÄŒû(.ôB["Zs¿ÉYU_xá”H7·<ÊqŽkSÃz¶—©jWRo‘£ÁXNÖÂã±ÌL8ÈgXÔó©]_JË šePl·¡;¶Žû¶³º®Ì~†œÇí 6{¢€,Q¿›‘(ùyê¸#æôç5»¦Y݈‰¹v‘Ê@A»’8#ÓxãóÖ¹¤Õl ÄÓ:Ý¥V»‚Ò À+nÝ‘ŽG ¸'pqÐ/Š,&† ¤‘Ãá‚ã€yã““Î=OzžTÓ¸îÅÕœEÛ}¸%²1»©ã ÷ê}+‡¹`“H€Œ+ÁÈ®¶ÿ^Óu=wXË¿Þv$–cõ$š¿E;è×èQE Ïÿ—«¯úè?ô­ Ïÿ—«¯úè?ô  -ZÊò÷Ot²™7°ùܯI•úàÿpƸÃà¯g­™úÌøšï…ËÆíùŒKÈB¤eÎ7sÐQHÚŠ£m’avQ°þG¹êáiÖiÌë¡«B.0±™á PÑã»:ƒB^b›DN[g®@õ©cðÔŠÚ•³_ÒïÚW’ØÃó†|Ø“=3ÏJÒK¦‘C$”ô+‚)|ù?½ú Ö8Ó$v1«VUfç-Ê~‘ªØÀ𶯠¡bòàsd”öf!¾oÈf©/ƒ‹Ùê±Ü_'Ÿ¨ؽµ°‰åX&㓞¤žq[ž|ŸÞý|ŸÞýY‘KûR]%VßR7w×nólôÙJc°ùwxõ¬K£>±}­^ÛØ^ÇöC['ŸnÑ´’Ç ¬2{vï]GŸ'÷¿AGŸ'÷¿AI«ÿ_!§oëæbh¾¼eÓ.õ[ï?ì–Û`·þW–Y;¹%ˆvïÅcXX_6«£Ø[5óéÚ}ËJëOh|¤ À0œ?ÞÀÀú×içÉýïÐQçÉýïÐU7y\›{¶.ÑT¼ù?½ú <ù?½ú C.ÑT¼ù?½ú <ù?½ú »ERóäþ÷è(óäþ÷è(íKÏ“ûß £Ï“ûß   ´U/>Oï~‚>Oï~‚€.ÑT¼ù?½ú <ù?½ú »QÜÇ´¿îåU¼ù?½ú Žây>Í/Íü°ô ŠŠ¥çÉýïÐQçÉýïÐPÚ*—Ÿ'÷¿AGŸ'÷¿A@hª^|ŸÞý|ŸÞý]¢©yò{ôyò{ôbçþ=fÿq¿•HFTQY÷3ÉöY~oà=‡¥IçÉýïÐP:øMâðö•§Ã¨l¹Ó$ÃpaÜ¥†áó&ycßñ¬é¼=vº­­´ò½Ù¾½×ó¤\AaQ±1“Œ°^¤“ƒ]OŸ'÷¿AGŸ'÷¿AEõ¿õýh€ÏÕt «­OûGMÔþÁröÿf˜˜¡Ó9`IÁç¯Jü?m¦[išF¬–vq[ˆ Éh%sêÁ· ÷V’]´‹º9U×$epE;Ï“ûß ¥m,nahz9µñ QËe¤ÙGchÒ©a8gp{ôA‘èkbëJûN»§ê~vß±Ç*y{3¿~Þsž1·Ó½=îÚ$/$ªˆ9,ØS¾Ñ'÷¿AUqX˽Ð5Nî1}¬#éñÜ­ÂÛÇhÉVܪ_qà:N+¡ª^|ŸÞý|ŸÞý.–™vŠ¥çÉýïÐQçÉýïÐPŸñåýs_åX>6ÿ4?õð¿ú Võ§üyAÿ\×ùV¿ä ý|/þ‚Ô†pTQE1Q@Q@Q@Q@Q@Q@tž ÿÌßõîßú×7]'‚ä37ý{·þ„´Þ×aÿ!ëïúøý×c\uü‡¯¿ëáÿô#Hgomþ¬QE·ú±E1Þÿ«?Já'ÿ‘ŸOÿ®â»»ßõgé\$ÿò3éÿõÜPsT5Ùg¨X£_͘Z¿YzͅêštÑCvñÂcyFP¶‚:´†VŠ&1«´Fi9SŸaÛùÒéÛâñ!ÊèÊsƒŒ‘ÿŽŠçí¼3ãø#ú–‘6bù@+GCð÷Šàñ µî¯{¦µ¤!ÉKq—bT¨ò׎s×µ1ˆäžOÃhY¸·þÎ2ymÙ„†ó1¸üèu¦jŒ‘I©[ gVwó.dgœ[äfÜAÇâsÞºïì¨?·F¯¾O´ o³mÈÙ·vìãÎ}ê+­ ÒóP¸¼˜ÈÍqfl¤MÀ)Œ’OlçŸZV÷mëúÿ™W÷¯éú‘ÊÍâ›»´í.Á#YMŠy$’Ò{€r0ªC#¡ùäkfúãXÖ|—t3Yê3ÆŽÐîòäQ‘½T°ù[Ÿn”óáu[FƒRÔmîm û0ºŠDó$Œ…|©SŽÜfµ.tö¸ÓVÌ_]ÂÀ(ûDN¹óŒsߊ©;Ýùþ¤EZÇ'³¥^Oe&¤óÚË ^ÚjÒI$Â[ Ë“é“Hùj}SÅZœ77ÿb†ßì6÷QÛ§†IDY{»* AÆ1““W%І—o{:A}®ÝÞÆ-åûDñ†1àñÎÕ Éè3Ïz4 ˧xbÏMݵÂ$ÓÛ:–wläêr9ÇN–ÿ×õ¥¿1ÿ_×Ì¡}{©Þk>m?S±y'‚åšTÞÞLä(p~Ÿ7Ôz¿Œµ+]NúÖÆÞ9Nž]>Åq)¸r¡Š« +»<ûs[ÁÖ)eaµÝí¬–,íÌ2/™—É|îRIÏO¦*I¼/ßµí¾§¨ÙÏ*¢ÎmäP'Ú0 R3Ž21@º§ŠuÈY¹²†ÄZiqE+Ãqù²@Än …#èk[HÕuF×fÒµQfïöTºŠ[TdK*CÈ súU‹¯ Yݦ°²KpªŠ“íaò…]£oqëšµ“zÀÔÃÉç‹ak´‘·hmÙéœçÞ…¿—üó°=¿¯/ø%úÏÿ—«¯úè?ô­ Ïÿ—«¯úè?ô  +™L2Jêì‡æ•Šœã‘õ¬—ñ /[™‰ö¹“ÿŠ­VÆkûi¢‚T™ØeÔ°âU~ÄwAù×+ÿ%ÿmR/ûòøªóñtëÊIÒ=,°êÛJÎý™Ñh—Éy=×–_j„'s³rKdòMeiš…õ•¦·¨\O¶6×7,"(Æ_”ðnÆ=±Z^Ð¥Ñ#¸ó®–w˜¯*›@>çÖ¤O[GsvââäÛÝ—i­ cŒgŸ­táã8ÓJ{Ùþg.)Óu_³Ö7_‘eâ}Zo3ýí$ڼѬV³DÀ!.0ÙÏc§JŠÿW»½ðäÂþÕ®VXWý7‰¢%×*êÍ»ùdVõž„l¡xcÕuˆÇ寝"Ÿ(v*vç#ß5ðÅ£ÛßGssws%èQ,Òº‡~î6€=+~¿×sœÔ³[µ·öHd›'- e¸,OëXw¨¿ÌV—1GØ£:LŒàþñ³´>üÕ¿2ûJU·ŠÏQÕF7‡–sýÞJÿ.ôÓ¦NæMþݦ]ª™HÉtÎpØÜ1ŸCži­ÓKíû=æœö°Ç"mu¡u*Ì’ “óÙ9 dvZm§Øtøm¶@žXÆØ#(ƒžÊIÇçTLJ­ßÞOÅñ¾ûÃýaíÓîóõ÷­jKk[!½]ÿ­ØQEQEQEQEQEQETsÿǼ¿îåRTsÿǼ¿îå@´QEQEQEQEGqÿÒÿ¸•C¨CsqfñÚ]ý–Sÿ-DaÈð÷9úT×ñí/û‡ùSÈÈ#Ö“ØÂ}¾øü?Ñ%ûUÔ’Ï,i7•!ûDêIÊ£uÝߨàEMa¬Íeá½r6éÚÞvŠÖ Æ-Ÿÿ]Åw5Î-¦žBŒÿ,Jq’K0HMIUfûò¿mÿ£i »öâ‡÷ÖwQƒÐìÿ 5$q\;¤~`d•xÙq÷€ô5æ­¬ÙD‘©HXùjÕƒœ¨>•{ú¤~#²Š(bRKœª~ãzW qñ”Ô-¹ß,¾qƒŸmOCéPZ^[ßÚÇuk*˃(ëÐö®Q¹ÔõI¤Yj'OŠÞÍnÒw”³2ó‚¼àgžµƒ¤êÁàÍÂÊçP[ùa’@–0E#2«`–ó~P2Gpy®þ—þºÿ‘çõ±è…”0RÀ1è3É¥¯:‚êûÄ7^º{É,®æ·»ß41¡9Aáƒ(Î=*ψüEaw<ºmÖ¡2XI W+öx~Ï’W!˜áòCòð2)Û[ ú\ï(¢ŠC (¢€ (¢€ Ïÿ—«¯úè?ô­ Ïÿ—«¯úè?ô  Q¶ËKfšGi[ · |¤zŠÈâ[9ѽ<‚ÿªä~µ™©H‘ÀZLl˃žœÜF+˜}vÈtŠÿ¶KþÉˆÅÆ‹I£®†U¢å½ˆÃ4{ÑF2G)‚8<zŠr¬M¡1Á®sÂw±ÞÍ|ÑÆˆcEûþ•›¥Ës¦iž#Õ’îY#·»¼qfU6œçnïÖ¶£UT‡?•ÌkRt§È÷ÓñW;o-?¸¿•#,H»˜"S\f}âÉ‘Ý!¸˜Mfîw‹6Mž[Täýïnj®§{5߃õ{›ëǾŠ[6;«xãx ‘pFѵÁ óÒ¶¶¶1¿S¾òÓû‹ùQå§÷ò¨l šÚØG=ä·rO›*¢±ö€?JçµÍvïDÔ¯–I7E-›b…Gúå;JŽ2rY>ô˜Ö§Oå§÷ò£ËOî/åQY%Ävéu/›p±¨–L¹±ÉÀã­OMè$î7ËOî/åG–ŸÜ_ÊE!òÓû‹ùQå§÷ò§Q@ òÓû‹ùQå§÷ò§Q@ òÓû‹ùQå§÷ò§Q@ òÓû‹ùQå§÷ò§Q@ òÓû‹ùQå§÷ò§Q@ òÓû‹ùTW§Ù¥ùîÞÕ=GqÿÒÿ¸•iùiýÅü¨òÓû‹ùS¨ ùiýÅü¨òÓû‹ùS¨ ùiýÅü¨òÓû‹ùS¨ ùiýÅü¨òÓû‹ùS¨ .cO²Íò/ÜnÞÕ/–ŸÜ_Ê™sÿ³¸ßʡԬ¿´,^ÜÜÜ[«}æ·}ŒG¦z€}°}é7epEŸ-?¸¿•Zq*ótV—ᯆ­c_=æž$ŒÅVèÄ£7a€I'?w¡©¬o¤Ñü9â €ÙÞ‹Ï"ßO ¹mÞUUŒ!s¿Œc'Ž)¾©tÿþ`º]ÿÈîí.-/­–âÕ£–$+¨àààþ ÔþZq*á°,.5ñ¡ß§›e§ixÙˆ‹0i?ÞùG=³TáÓ¯u¿hÍÞg«¥µ„‹$’íg$®eXµ;ã¯Z·þºÿ-]¿®Ÿæw÷sÚXZ½ÍÓG1Œ³°àv©ü´?À¿•q÷Vºì~Ó¬"òì®Bß<[@Ù@R;|åàj[Ë!oñH¹77´ð\ü’>R0`*ŽSî}iÛ[zþ¾‡Wå§÷ò£ËOî/å\?ˆ´Ø´ï隤z|vð›ØüýBI™™ÉPŒ§!$ÉúWuIj®7½†ùiýÅü¨òÓû‹ùS¨  »Oøòƒþ¹¯ò¬Èúø_ý«zÓþ< ÿ®kü«Æßò‡þ¾ÿAjC8*(¢˜‚Š( Š( Š( Š( Š( Š( ºOÿÈfoú÷oý k›®“Á?ò›þ½ÛÿBZïk±ÿõ÷ý|?ó5ØWcÿ!ëïúøæi í­¿ÕŠ(¶ÿV(¦";ßõgé\$ÿò3éÿõÜWw{þ¬ý+„ŸþF}?þ»Šîj5€\ÍqvO–& ¸È!˜Ž¾â¤¨¼ö·–y± RØgeëƒëHg0ÿ ,‚uKî:ü5Cð%–‡©¥üw·sÉ!VB»yì= jn8ÏïM£úcxŒG×vÚšÏX´½œÀŽ«(…2£ëÓkãÖ£A;¤®uK‰”\e'aºž¦ëE-í»4±©,r¼Nê7!ÙÅA/…4Ym--¾ÈÉš•·1O$o=@u`Ø?ZÙ'5SLÔmõm:ëRÆ †P°ÁÆqÓ𮃣/…titûK´a¡& “Hsœ8`Üäçži—>Ðîçi¦´rͳx[‰UdÛ¥”0 F$•­%Ô\Ãló"Ï0cdòÁzà{dTÔy€QEQEQEVü½]×Aÿ -hV[–W;I¼"/ü éÒ€3o´¥ÕlžžHs#Ñ€OúÀÝÁÿøVö_ô½÷ÇøW@Y¼çE0¨ÌŽÏ4›àuÁî£k¥¶´–ÏïÔdãÄÒ±©J”Ýæ‘ÑF½zjÔÛH]öþŽe†âyšb 4¤qŒãÔÔÉ i‘ê_%±OŸ4y±É$¦väŽø¨­î¢¹V1º’§ ¡#’;éSVŒb­ŒªNs“”Þ¤6¾Òl’T·‚XÒXÌl‚æM¡Oe°¿ðRÅá­&+K«Qj^;°þl¯#82ÌIã·ÞúKÈmà¸$B×#ßÎ8Éæ¬ÝêV_Û/m­üÄó¥TÞ}²y Ó´V´×ooÜB±bµ³Š/ùe ‘Œ e‰àv´e°¶šþÞöH·\[«¬O¸¡±»Œàç­fê…¾™b÷— |¥Ú>Q’I rI+\B“ÇÍÍ %#,0Hñ@ Ñÿ´Eû[<— !•|ÉätWþðBÅA÷¶+)®!IÒš5š@JFX`::œT”£EgQ@ ´ÿ(?ëšÿ*Áñ·ü¡ÿ¯…ÿÐZ·­?ãÊúæ¿Ê°|mÿ hëáô¤3‚¢Š)ˆ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+¤ðOü†fÿ¯vÿЖ¹ºé<ÿ!™¿ëÝ¿ô% ö¸ûù_×Ãÿ3]…qö?ò¾ÿ¯‡þfÎÚÛýX¢‹oõbŠb#½ÿV~•ÂOÿ#>Ÿÿ]Åww¿êÏÒ¸IÿägÓÿ븠æªÍ÷äÿ~ÛÿFÕªdp%Ä÷HÒ‘Ÿ•ˆ †b#ÜRçMâe…#Dwâ4Ç8þWü7®I¨x–ÊÄ®\àœÿË6­ÖøwáÆ96óžßñðÿãW4¯èš5êÞYÛȳ¨!YævÆFâ¼È`ë*ŠNJÉžµL^ÓqŒ]Úòÿ3;Vc}ã¦ÞjwV6‘؉ H. g,CÃíxéÍai×E¼%áÍ&p×3Á,¨é¨µšíVÁ˨%Ì8Áõ¯B¾Ó,58Ö;ûk´S•YâY>ÀŠŽ}Jº´ŠÒãL³–Ú/õpɲ'Ð^ŸK]O#­ÎÖC¬˪ÞN$jóÇrг2àH9!“ĺ½ÂÝÞ\iOr‡L–ÞVÔÙU³´ñpCrN3øWw.¥Ïe”Úmœ–‘œ¤”_¢‘LŸAÑîgŽyô«eŒI$·Fe Ž1U}n+hhQE†QEQEšÈ¯us»‘euo½ÆÐGr@S·Œ qÓ-¢Ú¾Ì¸Û”6 Œ.1ךۥ¿¯êƧͬµÕ¦›qs Ù} ïÔØ™‰o˜+ÛÀÛÐU»×Ô,ÒûV¼’{xm£‹+ÃWÏ2móãc]Þ—k¨"¥íŒ7*§*&„8Û"£}ÂY¢šM2ÙåˆÚÝI@:qÆ(Ð9ŽôS¼·þã~TyoýÆü¨´S¼·þã~TyoýÆü¨´S¼·þã~TyoýÆü¨´S¼·þã~TyoýÆü¨´S¼·þã~TyoýÆü¨´S¼·þã~TyoýÆü¨´S¼·þã~TyoýÆü¨µÿñï/û‡ùTÞ[ÿq¿*Žâ7û<¿#}ÃÛÚ€4è§yoýÆü¨òßûùPh§yoýÆü¨òßûùPh§yoýÆü¨òßûùPh§yoýÆü¨òßûùP7ñí/û‡ùW?âß/ÌÑ>Ó·ì_Ú)çïû¿u¶îöÝ·ñÅtW¿ÙeùîÞÔOh—P<ë4N0ÑÈ›•‡¸=hͯ|¦¾¿ŽÉ¡X[[ƒìÅñöq02nõñb¬Ãw-¶‘â TòWSº¿[`ÖÇ÷;åU§¡ ÉÏ9»¯ì‹?°ý‡û:±ôû?<¿ûçªMáÈEö-¼QÛZسȶ°ÀZFCqÀÀ-Û½ tÖßäïýuÿ3ítË/Ëi~°‹HttŽÜO¡0“﹬{HgÓü?g¬Ý­…ÄRiKnÐßJcePX®ß•·n c'½ïKµÔ ÛnBÈ&„>Óê28¥“Kµšæ+™layâŽV„Aè2(Ýkýoþ`´×—ùu„7Áá]è6ûxöé[¨E?ð"?ïš½wammñI¹Š,Oq É•Ë[09è ãšÛµÑÞßX¿Ô¤v’Kˆ‹³Z(û½yä“Û­\kDyãíÕ¥Œ’Ë(=p{gõ¿¯ãý![KÅÝ…µ·Ä &æ(±=Ä7&W,IlÀç ƒŽk©¦µ¢<ñÎöêÒÆI e”¸=³RyoýÆü©t°ÆÑNòßûùQå¿÷ò ­?ãÊúæ¿Ê°|mÿ hëáô­ëOøòƒþ¹¯ò¬Èúø_ý© ਢŠb (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ é<ÿ!™¿ëÝ¿ô%®nºOÿÈfoú÷oý h½®>ÇþC×ßõðÿÌ×a\}ü‡¯¿ëáÿ™¤3¶¶ÿV(¢ÛýX¢˜ˆïÕŸ¥p“ÿÈϧÿ×q]Ýïú³ô®ùôÿúî(¹¦DñGqpóH#EŽ<±m rÝéõVo¿'ûößú6ËÐÏgpÅ`ºIX “n#ò5?”¾¯ÿ}Ÿñ®&ma§Š?µÏæ|¡°ñÄ@$gŒ¡©t=N6Öà‚Þ\ ÉWEHÀ`ªÄ}Õæ¹cŒ¤ä£Õ/QE˱ØùKêÿ÷Ùÿ<¥õûìÿsZœº¥ßŒ£Ò­5il y¸>T1¹gó6ó½OôÅVƒÅw¶-w¥ÞÀ·Ú´ik“û¥¸Þ›ÕŽs³ zôâºÖ¿×¿3•éýy\ë¼¥õûìÿRú¿ýöƹÃâámg¨COx/¬Z4kXäy†N#ØØœr0jw×u5°Ž•^^-²¬w~fÐÊNâvF1Ö€7<¥õûìÿRú¿ýöƹ«ïËmusko¦¬óÅŒa®6gŒ>âv gê¨ñ¥ükq-Ö„±[ÙÝ-­ã­àf˜® ®Ñ¹pêzƒÏJ»[š§õýv:ÿ)}_þû?ãG”¾¯ÿ}Ÿñ®G[ñý®‘©]Ú¬VÒ ¦ãͽHd9ÄhF\€}½:Ô·Þ1¹‚}Eí4uc§Ç·}«cìdß•B¼à{Š:\:Øê|¥õûìÿRú¿ýöƹ7XÕ.|Q«Å1Üi±4$3MµâVˆ7Êì“ÜŠ¹á¯Oâvºû%¼6¤|….Ä’Ÿºêlolš,+›~Rú¿ýöƨ‹«‘ÿMþ€µ£Yÿòõuÿ]þ€´ ÏiÚ,/š‘&effˆÉÿ-€ õjiÔYIG÷¼™£ý67óªZ¼âÚÑ¥=·ës®%¼NÇîà}Mpâ±n„’HïÂ`ž".Hô«+Õ»VY$O¼¥Xq’ â­W#à›ö¿{÷c¢1ÿ¡ÖêÝÚÝϧ@²ô;§ÕFÑÃÄÄ2¨üQÿ®Œ=_k'¥Î|McQ÷ù‰5ý¼öÖNÄOr£\u ŒóøŠ³^fÐiíq£êúì1}†þk«‰å2‹¼/”=Å­0ú'ü%M®Ì'K3çg•´cËíÙÎ9é[¤s¶w4QE!…Q@Q@Q@Q@Q@Q@Q@GqÿÒÿ¸•IQÜÇ´¿îå@´QEQEQEQEEsÿ³¸ßÊ¢Ôu+=*ͮ理 ÄI'9$ú –çþ=fÿq¿•sÞ0anÚ-üÀýŽÏPYn „RŒ¡Ï°$sÚ€/éH}P]“h’˜ˆœº¹!v”ÆàrGÏ5nËTµÔ-æ2Ä„†3Àð‘“Àqï\J¾•~ºö£w¨½Ž“u¨@Ö·hB†’4S½K)ܽHÁÅ+ë7Ú—…îìEÓ]Ûá§Ù^ù^Yž&sàÕßÈ´jößüíú°õþ·:ñž’šeíìj.ÐËEGòÁûä(8\`äð3V¯üO¤i©Üݱ‰VHáyaèÅ”¹¬Ë› x²Yµ Ac.—½³•%IFlÆ=È+Þ³^h,~ØhÚ†¶ÚMëYî0läVÎ#ÁöÂhoF×õ¿ùÞÏúØíµ]b3JáM»"B‘‘™YØûäSÛYÓ—WJ7qý¾D2傎¤ã§ãŒ×3hÒjº‡†¬%µÂÊÍoî-À8öì9ç‚Xàÿv®_ÛA´7†ãyb»içòqÔÓ¶¶õü?àÜWÓî4¿á%ÒFªºk\²]3˜Ô<.ªÎ?„9]¤ûZÕÂx‡S´¼ñ˜–Z ½¸·¾[IB@ ‚NX•ã¥wt–ªã{Ø(¢ŠË´ÿ(?ëšÿ*Áñ·ü¡ÿ¯…ÿÐZ·­?ãÊúæ¿Ê°|mÿ hëáô¤3‚¢Š)ˆ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+¤ðOü†fÿ¯vÿЖ¹ºé<ÿ!™¿ëÝ¿ô% ö¸ûù_×Ãÿ3]…qö?ò¾ÿ¯‡þt†vÖßêÅ[«Sïú³ô®ùôÿúî+»½ÿV~•ÂOÿ#>Ÿÿ]Åw5Å$ÒN±.¢ŽÚ属}*zdsGoqq$„… áI9,À O&Ï9—Àž'v5Ÿ «ÌíØýßjÖð·„5½3^‚öý­â9K1%Hé´z×mý§h§÷’4#±ž6Œ¡`3SAuos»Èž)võòÜ6?*åŽ Œd¤–§tó*󃃵ž›ºž…¨\ké«éÚ¤V’‹SlË-¯œ îÝ‘ó®çUσPZoMFoí_µ Ã~è™@ÛÊp6í%vúw®žŠëþ¿_Ìàzÿ_#™>ûM–¢5 Aç¾¾hÝ®£ŒGå˜ùbäà3É9É©.¼?©êzE{¬Æ÷–÷ qks¦Á/÷—qÝœœò:×EEr°øFàÏö›ÍQ&¹mF;çd¶Ø§bl ãŽ;äý*{¿ ýªÏY·ûnßí+¤¹ÝågËÚc¯?s¯k£¦G4Snò¤GÚÅ[k‚:ƒïBþ¿òAý~æÌ ]¦±u¦jQÛ ²­qÖ¢`YFÝÊw §ãŠ}φ¾Ð<@>×·û^‹ýWúœG³=~o^Õ¿EÒÁ{;œõ¯‡o4ýYîìµDŽÒ%¸…í·—(»AVÜ6äcŒ”ºW‡.-5éu‹Ûè'¸’$‹{Aaw?ÌÛ›Žæ·¼Èüß+zù˜Ý³<ã×”êwÖâ¶– Ïÿ—«¯úè?ô­ Ïÿ—«¯úè?ô¤3:[{ÈÈc™DòºgøT>ðáë¥YŸûb?Ÿ#ªÎþc̱ƒ#]ÄùŠ£ïqüU\ߺyŠÿÓT‰æ$QúVS•4ýãX*¶÷ ÖVšn›%•´6êÇ,"nO¾5kÏûß¡¬›[“9tt!Ó’xÁœt')Eý™EqwV“ÊV Î6|ƒÅ\ZkÝØ‰©'ïnjùñÿ{ô4yñÿ{ô5J¹›/ B)¦‚#:ª«_ “öå—/¨$ð;Õu±=.v~|Þý |Þý sºv°·×ÓÝ´VñZÝIöm«µN2I«GTÓ…—ÛMý¯ÙIÇŸç.Ïûë8  >?ï~†>?ï~†³¡ž+˜Rh%Ibq•t`ÊÃØŠ’€.ùñÿ{ô4yñÿ{ô5JŠ»çÇýïÐÑçÇýïÐÕ*(ïŸ÷¿CGŸ÷¿CT¨  ¾|Þý |Þý R¢€.ùñÿ{ô4yñÿ{ô5JŠ»çÇýïÐÑçÇýïÐÕ*(ïŸ÷¿CQ\OÙ¥ù¿€ö>•^£Ÿþ=åÿpÿ*è¼øÿ½ú<øÿ½ú¥E]óãþ÷èhóãþ÷èj•wÏûß¡£Ïûß¡ªTPß>?ï~†>?ï~†©Q@.gì³|ßÀÝ¥KçÇýïÐÖuÇü{KþáþU¡}ö q(´ººf`«´{˜ŸÄ€¹ PÇŸ÷¿CTnl­.µK-BYd2Y‡ò}̰±Îq9îk xªÌèòê mvLWÙí¶(•e,. c«ø­ }DÉc-ÝÍÅŠÅ’Ës³;@É?+0ÇãÚµ#kÏûß¡£Ïûß¡®6/…°³’}>ê[»‹stÖöˆÅxfɱÇ\ç¯ßx“N±ÐÓWy[i?ï~†>?ï~†¹©¼E¶¥Å…ô),ÞDw/ùLç ÈlóØ‘ŠØ£Ì ¾|Þý |Þý R¢€iÿP×5þUƒãoùCÿ_ ÿ µoZÇ”õÍ•`øÛþ@Ðÿ×Âÿè-HgESQEQEQEQEQEQEWIàŸù Íÿ^íÿ¡-suÒx'þC3×»èK@íqö_ò¾ÿ¯‡þuØWeÿ!ëïúøçHgmmþ¬QE·ú±E1Þÿ«?Já'ÿ‘ŸOÿ®â»»ßõgé\$ÿò3éÿõÜPsUfûò¿mÿ£jÕCä5ij¢8G ©a‘•va‘Ç¥!œ‰×Dh‚K¹‹ROÚ’@?Þ«:°—~ µ$”´…ƒn™Û #O­g¿Ã+÷ f… ?ÑÏ@1ýïjÓðçnt]f+ûN9ÄA±BW$‚:–>µåS¥ŠU{_¹ìTžÙ¾YknÏü‹:³ê~<ŽÂKëø-—L3µºxFÿ3;HϵFjšmÝÞƒ«}x—ñÚÚ\Ýt ñùŸ¼ÛÅ@=0OÐê^MCUMJ=JþÊå`û96¬€2n݃¹¿¥F|#¦ 3ìHnÄÿiûP”™üïùé¼ç'·eÁ<ût­øD,ÂêÞk‹É¦º•&’ñävô ¡Ü 1íD~²û6£ åÕåñÔ6yÒ\:‡Ê”©E\Áϵ×õøˆ“ëv^,Ôî.£µ¼¾‹F VˆÈ‰…ÃsšÞðÆ­6¯g,—¶W#Ém ÄМr®®ÄƒùRZx]-n.n[VÔ纚Ü[‰æ‘ Æ€ämœž§5gIТҮn®ÝÕÝÕÖÑ,÷,¥ˆ\íUPÉíÞšíýnÄ÷¿õ²5k?þ^®¿ë ÿд+?þ^®¿ë ÿÐÎcZ»K+yævUÃ7ËÄÓ'ð®üPÇþZªþ5êB×ÎWÈB¦Gá¿Þ4fÇÿ<¡ÿ¾úÕljÂ{vŸ5Žü.2"ã(_çÿä¼|oÍô»÷å®sþõW‚ÎåÌþ«@ÑS}™ýV³?ªÐ4TßfU£ìÏê´ 7ÙŸÕhû3ú­CQÏÿòÿ¸•Zû3ú­Gqlÿf—•û‡ùPú*o³?ªÑögõZ†Š›ìÏê´}™ýV€!¢¦û3ú­fU h©¾Ìþ«GÙŸÕh­Çü{KþáþU›â-FïMÒüË+ig¸’E‰Lp´¾^z¹Uæp+bæÙþË/+÷ò©>Ìþ«@dQi#ÃmÖ:½ÄFà<ÌmfŽy%Îï3ê#ÀíYÌ×óh¥KöÕ‹S¿ö‚ðŸ<[à4…³Ï@øÏ<Œ×¢}™ýV«É£Ã5ô²"µÄ Ë?(lgއ4uþ¿¯/@9‹ã6‹âY¯—Oººµ¸±HZÄd(èÌB:¯N+ø_Z¶ðÌeg·iaÓjöí##0%Âqó…ÎJô³?ªÑögõZVÒß×_ó£¿õÓüŽ+OŽâóXѬ®Š“¥Ù‹‰‚¡P%q²0A$‚ãZz„?‹ôYÒ)(á¹ RUI ŒžÙÁ­¨4xm®nnbEY®X4ϸ’Ä ½8Xû3ú­SwwþµVV8}cuþ¿c%ž«öëk¤Í‹Q8vù¾Lí'~n•ÙTßfU£ìÏê´–Ö[ÑS}™ýV³?ªÐkOøòƒþ¹¯ò¬Èúø_ý«zÓþ< ÿ®kü«Æßò‡þ¾ÿAjC8*(¢˜‚Š( Š( Š( Š( Š( Š( ºOÿÈfoú÷oý k›®“Á?ò›þ½ÛÿBZïk²ÿõ÷ý|?ó®Â¸û/ù_×Ãÿ:C;koõbŠ-¿ÕŠ)ˆŽ÷ýYúW ?üŒúýwÝÞÿ«?Já'ÿ‘ŸOÿ®â€;š¥<¦§aæV5 ‚IbqÜÕÚλ?éÑöàÿÑ”†LÒÜG6ÞõèA/ÿ H—>c²¸VP WÞ‡8ëC\Ck6Q$jR>ZŸõ`ç*¥M¥j°]k6‘Å HK7*€¸Þ•Á|e5 nwË/œ`çÛÈíw·üô“þþñ¨Þî(玺Û,¹òãiˆgÇ\ óŠåõ)õ[ÏÿfYj¯aX‹Œ¤1¾çÞWÀñôÅQ°× ÜÌ‘o–;±.ÈÁÜÈ1•$eAÆx=û×Kÿ]ÈàëcºÞßóÒOûøÆíÿ=$ÿ¿‡ükÒnuíKÃí­E¨¬—6ï%½—”‚(ØýÑ»‰òqš¹áF[˜î »½¼šö¾t7p$OGm€Sƒƒ“Ó­è#¦ÞßóÒOûøÆíÿ=$ÿ¿‡üjÔn dÛÛþzIÿøÑ½¿ç¤Ÿ÷ðÿCºÔ6öÿž’ßÃþ4ooùé'ýü?ãPî£uM½¿ç¤Ÿ÷ðÿ§-9$ŸÞu'?µê’ÌçÏ?ôÓÿeZã=2”G%Êˉî8î#=øç^øiãtfÒ– …#79“È\>÷5q•Ýšâ”.ž¬ôÿx‡SÖõréwÃl¶æÜlU჆<å{ô­­GÄ‘Ùk6zlVÍpóL±M l,+ŸRpN=9ôÎ/€t=OLºÕ/5+&´k¤…&‘ü†BOÈÄ­K¨xRùn­$²Õ/¤.¦VXwÙ`Jäã€'ŽÜTÅj“¶mZwzõõ†£wZG—e=ȶŽà\«9c÷I@>éÇ®}«Rþk¸-÷YZ%ÔÛ€Øóy`RØ?ʹå]V_½Ýþ‹u4PÊc²)4>\IÐÈA|–<öÈõzçL]>ÒàAey«-ÑÛ5¼×{ÆÞz [hôý)t¢Yë÷ºŽ”÷šW™wÃ[É ¹PŠW«y˜å~ƒ>Ô¶~#k.ææM6à\Û\5´–Ð~ô—û­À#‘ÉÆ;ÖE½Ž¿¦xzæ>Áák‹¼ÃkèÍgvÒÄ.r ojßСò4¿³.™=‚ÆH <ˆìäòX•fÉ$œ’sšof"Ÿü$ÎÞµÖ£±S-ËF‰nÓm»„}§×=*áºÖþÄ$U™¹ó1å}¸íÙ½»ËëžØük2ÃO¸²ðU……抺„ˆ¡e´fŒÉ9ùŽÓŽ;ÔVn­aáb;[O³O;;XÙ •¼€T7ghç-€p3Cë`] "ñ]ãè“ê ¥ÄnÖÖ[¼¤Ä¸BÁö IìzV¯Úõ‘`d:U±»ß Þe6ÿx¹A¦ A>Ÿ‡m´èôuÔá‰R3lL|€>÷ÎBžGëYšnŸ{§è·°Ë¡™­®®ILYão&" –!y  àf‡×úì ¡§§øŽçP»‹ì¢ÖW†eæ Êqò°ûÙ8޼TÚ°úÕ”×Yµ£Ç;Âbw FÓŽqÐûsõ¬M7Â÷RéÆ)å›K‰/MÍ¥¬.’ù Œ;ƒ/ÞË`dx©ô+-_CŠäL’^ EÙšI"O."Ió~QÎxÊþ@S[ü¿Ëþžß?ó.§ˆ­­­nn5 ¨¶%ëÚ§‘ Œr:)$·®=*Õ¾¿¥ÜéóßÇx‚ÚDÌࡌŽÌÔW$Ò-’\[Cö–>&vÀó>÷Bx­ ÍR¿´Ö¯ç·ŠÎk©-Þ+Y¥R„ƒó°Ê‚Ý;ãŠKkú~KüÆ÷·õ»ÿ#¥Óuí7WšHlæv’5É$/Úz˜ Ž:ŠÒ®KC½›Qñ®£<¶fØÇc l†T“{žJÓ­u´tVQE (¢€ Žãþ=¥ÿpÿ*’£¸ÿiÜ?Ê€.ß^Á§YKwtû!‰rÇ>Àäô¨xwZ}vÂk‰,žÍ⸒¸fN9Çûsõ§ëZ7öÌvÊ/n-ZÞa2´*–ã!ÔƒŒç§\V?‡´ýkBŽå%Ž[ïµjnÌd’$òâ$Ÿ7å$ñ•ü€¡nïýleoësA¼DGŠ`ÑFŸpT‘¾Õ Ø„ …–ûÞײxÄðør]4OIÜþSº¶<•%ÈÇ qžœsO¿°¹›Åš=ìqn··†áe}Àm,oÉÎJ‡[ÑäÕuý)¤·ØG Ê\Ãè g'#wJ: êÇê~'ƒNñ—£ˆio˜ïpØ®Òxç%Hކ³.¼g{m§yýéÚuË[Ë(½C·*…0zôÝUãð–¡eoc#MöûäÔ ’Y²‹xÁEžÊI>¤šÌ»ð½Ü’ëh|*——w’Ëk©âO(66¶Co<à õøÁü×þé(ÁÑ\g 22)ÕœSCcoľlɬ’}€äþ&§¦÷%m©ÏüzÍþã*ƒR¸½¶¶ ab/'f ±¦(¥ˆ<}<Ô÷?ñë7ûü«/ÄÏ«®“³F·’[‰dTv‘^8ÏÞeÞ@-Ž=N{T²‘—‰šçIºº“K¹V· k-­¿ï‰cî°À#‘ÉÆ;Õ;Ä^xR=zx¾Í§t-»`Ï8éKáø~Ϥý•t«9c$*O";HO%Ë#6I$䓜×2l®`ð‡ü-s—sy"Çq`vÄ„¼œŽ9/ü ›]=»úšø¦÷Iðæy§Ïswråò×dp‡pf=Ü9'høÄG@†']>â転–A¶8Ã0\³ž'€2OëKâ½>çQðô––qy’™a`›‚𲫼t—Åv:—‡äµ´‹Ì™¦…‚î…•XòN:OKüÿj;Äz•ÆŸaYûmÝÄvðn±äãÙC£oâˆ4Q§Ü•$oµH6!(!GVûÞ×µwÿ‰§:Á¤[o?õÚ^ä€ÿßUjþÂæoh÷±ÅºÞÞ…•÷´°M¼g'8=)/??ëúî6Ayâý?S·ŠïF1Ø\] Xîʳ–oºÆ0>éÇ÷³í] r º¼Þ)’óPÐ®ç† Lv%'ƒÊ‰:H.±ç¶@àw®¾…°=Š(  »Oøòƒþ¹¯ò¬Èúø_ý«zÓþ< ÿ®kü«Æßò‡þ¾ÿAjC8*(¢˜‚Š( Š( Š( Š( Š( Š( ºOÿÈfoú÷oý k›®“Á?ò›þ½ÛÿBZïk²ÿõ÷ý|?ó®Â¸û/ù_×Ãÿ:C;koõbŠ-¿ÕŠ)ˆŽ÷ýYúW ?üŒúýwÝÞÿ«?Já'ÿ‘ŸOÿ®â€;šÌ¾®ˆQ‚£+ pC:ûŠÓ¥´ÿÙÿëš6¤3ÏÀ¶®A:×€ÀíW4Ÿ [i7éx·—3:_n9ì=ëÑ(¬V’wQW:e¯(¸¹;w¨øf [ÄŸo½í…˜€*Nñ¾íäœí##×ð­DÒì"’Éã¶D6HÉn#R ÇAÞ» +~–9zÜácðÖ‘³I»Åç‘ÜH©óu!Cmú€ XÓt› $Êlâeyˆ2<’¼ŽØé–bN¦k²¢•€ç7Ѿº:(°æú7×GEœßFúèè¢Às›êÕÊÌé§þÊ+f³ÿåêëþºýhÌ]xœé÷“Ú‹1&Éæóvç'=6ŸZ‹þ6ÿ zÿßÿþƹÿÈÑëw{ç¡¬È ÅÄéXã$p+Æ©‹¬ª8©uò=¨SÁÆ1SƒnË¿Uêvð™·ý×þÿÿö4Âfßô_ûÿÿØ× ŒÅƒGjÚ¶Ó#m6{‰äu˜Bf†5î¡€Ë{ñô©Ž++Ú[z1Â`¥>]›ÿ3_þ6ÿ zÿßÿþÆøLÛþëÿÿûÇ·µ°º±¸hÚåf‚1¤}» ãåÇQœñÍT²H¤¹Tš+‰wp©71üAþTþ³ˆº\Ûú‘k„iû›y¿ó:?øLÛþëÿÿû?á3oú¯ýÿÿìk&æÆÖÛVÛ.¦VE"ñæ«§ƒÈúTÒi6Ñ^Ü+<æ-ÄÏǘ ÇÊOLŒòqUíñ?Íù‘UÁiîÿ3Cþ6ÿ zÿßÿþÆøLÛþëÿÿûÏ‹I·šúÜGö‡·žÝ§Ty™ü¹Æ#Ó½B–6ÏupdŠêÚ h·Ë„ È3‘Ú‡_·—åþAõLò~/Ó¹­ÿ ›Ð=ïÿÿcGü&mÿ@õÿ¿ÿýcÏch“ZÈ.$ŽÎâ=àºîpA ¯‘׊I¬ííõÉìŠ\̈åb#{Ý¿¥/¬b?›òÿ!¬ íÏüÍŸøLÛþëÿÿûd¾/Y¢x¥Òã’7Yl†¨#o"¨Ë¤ÛC}8y&ð@&‘8óœ ‡¶rG5KQµŠÜ[ÍlÎ`¸z 1¹H$qבD±ˆ­eù0x94”wó~½ÍTñ%¤pC hvË $ÆGB£g“Ò¤ŸÅ‘Ý@ð\i1MŒ4rK¹X{‚¼Ökim4è‰ä[ªÚ¬îÌìWOÏ=DÚMÏÚ ‚6ŠQ8-¨ß!©ÉéŒ懈ÄíÁÖü¿‹ÿ3NÏÄ–º|F+-ÚÚ2rR3뀕gþ6ÿ zÿßÿþư.ôö´·ŽqqñHÅDIÁÈäQT·TKˆNÎ_‘qËð’WQü_ùgü&mÿ@õÿ¿ÿýð™·ý×þÿÿö5Éî£u/®×þoÁý›…þ_Åÿ™ÖÂfßô_ûÿÿØÑÿ ›Ð=ïÿÿc\žê7QõÚÿÍø þÍÂÿ/âÿÌë?á3oú¯ýÿÿìj9¼d̓û=yR?×û»\¾êlû§ÿtÓXÚÿÍø!<· o‡ñævßðŸ7ýÿ?û ?á>oú/þöÉZµ¯˜MßœPDOÔôüOªÚÅer‰ 9G‰dÛ&7&FpqÞŸÖëòós~_äOÔ0œÜ¼Ÿ‹ÿ3¦ÿ„ù¿è¿øÿØQÿ óÐ1ð#ÿ°¬h4ɬ..;´òc9Hi@ß©ëÐSt15(®ËHRHÕD^ŒäðתúÆ!´”·ôÿ"“r…­æÿÌè?á>oú/þöÂ|ßô _üÿì+×KYt{»É]–HÆaAüX 1>Ãp«ðè6ò%°0ß4 +] £$gž:­R­‰kòÿ"e†ÀÆ÷ŽÞoüÍøO›þ‹ÿý…ðŸ7ýÿ?û âÉÁ#9£ucõÚÿÍø#£û7 ü¿‹ÿ3°ŸÇŒÖò/öbŒ©ññíþíIÿ óÐ1ð#ÿ°®&FýÓÿºjÍ«Zù„ÝùÅàD@$ýOOÈÓXÊïí~_äK˰«ì~/üηþæÿ bÿàGÿaQ·b{„¸moú/þö‹ ®Ÿ¨êwAe1F7˜by`ªH$žãëU´«+ké$Iî#²F‹Ë¤äž€qGÖqÖ–þ‚úž &Ü6õÿ3~?Å ’É <ͺFY°\ã'g'¤ÿ„ù¿è¿øÿØW5¥Å=ÅÄêxYÊž… ?2?*p³¶:,·kpÏ::+ \*†Ï=OO­/¬â-~oÈo„Nܺ¾¿3£ÿ„ù¿è¿øÿØQÿ óÐ1ð#ÿ°®~ÞÖÂêÆá£k•š|Æ‘öì'—FsÇ5—º”±uão{òÿ"£€ÂJë“o7þgiÿ óÐ1ð#ÿ°£þæÿ bÿàGÿa\^ê7Týv¿ó~¿ìÜ/òþ/üÏT´ÿ(?ëšÿ*Áñ·ü¡ÿ¯…ÿÐZ·­?ãÊúæ¿Ê°|mÿ hëáô¯tùS‚¢Š)ˆ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+¤ðOü†fÿ¯vÿЖ¹ºé<ÿ!™¿ëÝ¿ô% ö¸û/ùß×Ãÿ:ì+²ÿý÷ý|?ó¤3¶¶ÿV(¢ÛýX¢˜ˆïÕŸ¥p“ÿÈϧÿ×q]Ýïú³ô®ùôÿúî(¹¥´ÿÙÿëš6¤¥´ÿÙÿëš6¤2íQLAEPEPEPEPEPYÿòõuÿ]þ€µ¡Yÿòõuÿ]þ€´åþ%W}vì!¿…eÛ ˆn£“x Œ…?{¡öïõ½ Ùj73]M-ÂÉ$Œ pHî=ª?øB´ïùïwÿ}¯ÿ^ELg7$–­žÔ17óÞö_‚±ÄHÛ®ç‘T,nÙUGÖ¶müC*Ãp—Âåíü¤an™ãÉÇ#ßµo§Ï{¿ûíøš?á Ó¿ç½ßýö¿üMLpxˆÞÇBÆà¹T5²òùœüךséqZÇ-Ü[s …H’ORwg‡ ®º¼‘F§wvÉ>YL9SÇbG¥uð…ißóÞïþû_þ&øB´ïùïwÿ}¯ÿMá+·{!¬Ã –ïî9ë«ûÛ¨¼Æ»Ha„F²­#zžG®:úSåÕ`–þ kØc‚ʘ2¾=y뎧¥o§Ï{¿ûíøš?á Ó¿ç½ßýö¿üM?ªâ<»‹ëØM®ÎvóSƒT¾W»k”‚8Äq•ÄÇv$Œ“ÍNúÕ«Íä²NÖ†Ô[3±Cƒ¸7§¶zw­¿øB´ïùïwÿ}¯ÿGü!Zwü÷»ÿ¾×ÿ‰£êØ-EõÜ’»²Øåµ ègû46Ë ·¶MŠdÆæ$’IÇNMIswe{¬]]J×1Ã#C‚Àû‚Gó®—þ­;þ{ÝÿßkÿÄÑÿVÿ=îÿïµÿâj~©]½R-fU³ðæ#ëV²Nbt­ZÔ[³±Sƒ¸7§¶zw¨'¹´½1ZEÑHaòí€sÈ[9aèrxÕѧÏ{¿ûíøš?á Ó¿ç½ßýö¿üMSÂâ%½ˆXì$~ʺ[»˜n ”‰(LR6ä}ERµÔ¢7–V–vóÍi$d6’oqà{jÙÿ„+Nÿž÷÷Úÿñ4§Ï{¿ûíøš§‡¯{¤¾ÿ;±˜[YÉ¿—•Œ]f¬t›;Uó•üÙ$):…pQ’8Vêíÿá Ó¿ç½ßýö¿üMð…ißóÞïþû_þ&³ž ´¥{~&Ô³,<#fÛùFê7WoÿVÿ=îÿïµÿâhÿ„+Nÿž÷÷Úÿñ5P¬iý«†îþãˆÝFêíÿá Ó¿ç½ßýö¿üMð…ißóÞïþû_þ&¨Ví\7w÷Fêdû§úî¿á Ó¿ç½ßýö¿üM2éËo# îòŸ¾¾ŸîÓú…a<× mßÜs:UÍ¥µÙšíd`¨|½ˆØHÎ(ž[fšFžòft,®èªL™ïÉãvŸð€é_óñ{ÿ}¯ÿGü :Wüü^ÿßkÿÄÕ}Nµ­dCÌpÜÜ×qÄÉ{Ò ³Œ0a+K)#‚pãè3ùÒÚß­¶s ïI$nŒ: ¹?ÔWkÿ•ÿ?¿÷Úÿñ4Â¥ÏÅïýö¿üMS¯{‡öŽÖ×{íçs–}x\Ïs$ñlY-ZH‡‰Î“SǬië5Ñ{Ñ5´HžR ÅÚÎp~•ÑÂ¥ÏÅïýö¿üMð€é_óñ{ÿ}¯ÿT°Ø‹ßOëþÍã0v²º8 eófy6…ÞŰ: Ó7W¡Â¥ÏÅïýö¿üMð€é_óñ{ÿ}¯ÿY}B±Ñý«†îþãΤoÝ?ÐÖŽ•simvf»Y*/bÃö$3Šì'ð–¶ò°¸¼ÈB~úú»RÂ¥ÏÅïýö¿üMTpU¢î’&YžI¦Þ¾G y,2]y±O<ÛŽçy+ŸbkX]¤·z¶³e\‡w{ñú ƺ?ø@t¯ùø½ÿ¾×ÿ‰£þ+þ~/ïµÿâj£„¬º"%˜ad’»ûºiþG¦^Ge{çH¯–ë…ë–Ró£L¼ŽÊ÷Î1_-× ×,¤ç]·ü :Wüü^ÿßkÿÄÑÿ•ÿ?¿÷Úÿñ5+][m –c…•îÞºlr2Ÿ²xzúIy!•¿Ü^õ-ùUxo#Jºµ!¼Éd”Ž€.ìçóÛÂ¥ÏÅïýö¿üMð€é_óñ{ÿ}¯ÿMàëÞé f8[Y·½ö9I¯4çÒⵎ[¸¶&çA ‘$ž¤îÎ;8‘º½ þ+þ~/ïµÿâhÿ„JÿŸ‹ßûíøšRÁV“½á™a¡¢oî<÷u«Ð¿áÒ¿çâ÷þû_þ&ø@t¯ùø½ÿ¾×ÿ‰©ú…bÿµpÝßÜkZÇ”õÍ•`øÛþ@Ðÿ×Âÿè-[ÖŸñåýs_åX>6ÿ4?õð¿ú W¶|ÁÁQEÄQEQEQEQEQEQEÒx'þC3×»èK\Ýtž ÿÌßõîßúÐ{\…—ü‡ï¿ëáÿuõÈYÈ~ûþ¾ùÒÚÛ«Qmþ¬QLDw¿êÏÒ¸IÿägÓÿ븮î÷ýYúW ?üŒúýwÜÒÚÇìÿõÍ?›RRÚÇìÿõÍ?›RvŠ(¦ ¢Š(¢Š(¢Š(¢Š(¢Š(¬ÿùzºÿ®ƒÿ@ZЬÿùzºÿ®ƒÿ@ZóoŠs½¿‡£–ßVÔtûÅyͿخZ/5÷•€?0ýGç^k©_j6Òjø€¬VÊÑí 8ŸæÌ{‘À¯hñ7…î|KºÛêZd›w›jfݹ†1‡\co¿ZæåøY«HŽŸð“Ú(uÚq¤çÆSB¢üMi­5 [SÔ/RxàxEäæCúÌ–8ÈØOONÕÑj:åüšÕŠØH±éË~¶“9@LîC žq‚G$ävæøëÁI|—ôº¢\Äjð˜Ä!7tË·]ÃÓ¥hj ѯnm§K 8dŽäO+ u&QÎTž:“žý(î¯ýj7³±£>­c¯X$Z¨¹7W86g@«ñ6ï¼6ñÉ8'ŒsWîõ;]BÊãû7ZD{cºg³U¸tñ· χ¥W·ÐµK]fîþ=VÕ¾Ó(fYqéo0`íÔ“ŠÔ½´¹x@Ón!³›vYÚßÌ =Êÿ:]Ôåm¼S~žöÛɯšÎÕ„`; œ3  ·åíÓ53êÚƒøvè[]j-¨Ãus†³C4 YKa0#i$›¯Z¹ÿ“5›—Ô\êMx/~Ö" @ 0™û»F1ŸÆ§·Ðõ H®¦‡UûFîa,×k” .С7pø³Oúü¿à‹úüÿà[\›¯Í=¯ˆnåòä&K±¡™09O, Áú©<ÖU§ˆ5K½Ò¯PÜÝêMiÛD¡Ö5·4}áOwµk¡j6· o«'Ûî®<ùî$µ ò…Ú0ÀÀóÅAÿ›GfÔœêmx/E؈$ ·3÷vñŒþ4uû¿@é÷þ¤6ÚõåˆÔ¬.ßí×ö× ³g2(e äÐgí"]gQÑ®ÖãWH.`¾–).RÝ8E=Ô犷má[&Šàêé§qq7,“@îÚ^pêj‹x"8t›› >æ U¹¼ûD¸µÊ¼yȈ€Ã*>½8Ç4—ùÁëóÿ€;LׯS@’{†ûtÒ]5¾žáfìgåbu$Œ Õß ]ßÝØ]ÿi\,÷ÞK t@ƒ p·×š™tE¼³úâØê!1g±Pct³~uNÇËáûyŸNmÑ®Úêe‚Ð1’.Hˆ“Çb9ôú»ÿ[ÁM?­ÿà£ñ–v· ok-ÔÒêïgOuÆïPÛNÕナ³ÿ X·³ÔþÂH/l™í’A'˜dâ=ÆAµµ\—†bÔ®4¬lÝ g ÷†hÑU¾ßý5ÿ¿/þ}¾úkÿ~_ü)ˆ³EVû|ô×þü¿øQöø?é¯ýùð  4Uo·ÁÿMïËÿ…oƒþšÿß—ÿ ³EVû|ô×þü¿øQöø?é¯ýùð  4Uo·ÁÿMïËÿ…oƒþšÿß—ÿ ³EVû|ô×þü¿øQöø?é¯ýùð  5Ÿÿ/W_õÐè Sý¾úkÿ~_ü*´l$šâE ¤nR¹ùTt?JC3ÅФO5W?ï_·ù­tŒeÝT{œS>ÓüöþúGíÃþ{§æ(ûpÿžéùнö˜?ç´÷Уí0Ïhÿï¡@~Ü?çº~b·ù«ßiƒþ{Gÿ} >ÓüöþúGíÃþ{§æ(ûpÿžéùнö˜?ç´÷Уí0Ïhÿï¡@~Ü?çº~b·ù«ßiƒþ{Gÿ} >ÓüöþúGíÃþ{§æ(ûpÿžéùнö˜?ç´÷Уí0Ïhÿï¡@~Ü?çº~b·ù«ßiƒþ{Gÿ} >ÓüöþúGíÃþ{§æ(ûpÿžéùнö˜?ç´÷Уí0Ïhÿï¡@~Ü?çº~b·ù«ßiƒþ{Gÿ} >ÓüöþúGíÃþ{§æ(ûpÿžéùнö˜?ç´÷Уí0Ïhÿï¡@~Ü?çº~b·ù«ßiƒþ{Gÿ} >ÓüöþúGíÃþ{§æ*9ïw[ÈÈIR0ô­/´Áÿ=£ÿ¾…iƒþ{Gÿ} _í(ÿçê/ûèQý¥üýEÿ} O´Áÿ=£ÿ¾…iƒþ{Gÿ} _í(ÿçê/ûèQý¥üýEÿ} O´Áÿ=£ÿ¾…iƒþ{Gÿ} _í(ÿçê/ûèQý¥üýEÿ} O´Áÿ=£ÿ¾…iƒþ{Gÿ} _í(ÿçê/ûèQý¥üýEÿ} O´Áÿ=£ÿ¾…iƒþ{Gÿ} dú‚5¼ \ÄIB =*Oí(ÿçê/ûèR}¦ùíýô(ûLóÚ?ûèPÿiGÿ?QßBí(ÿçê/ûèR}¦ùíýô(ûLóÚ?ûèPÿiGÿ?QßBí(ÿçê/ûèR}¦ùíýô(ûLóÚ?ûèPÿiGÿ?QßBí(ÿçê/ûèR}¦ùíýô(ûLóÚ?ûèPÿiGÿ?QßBí(ÿçê/ûèR}¦ùíýô(ûLóÚ?ûèPÿiGÿ?QßBí(ÿçê/ûèR}¦ùíýô(ûLóÚ?ûèPZÇ”õÍ•`øÛþ@Ðÿ×Âÿè-[ÿiƒþ{Gÿ} >ÓüöþúätW®}¦ùíýô(ûLóÚ?ûèP#Èè¯\ûLóÚ?ûèQö˜?ç´÷Р#¢½sí0Ïhÿï¡GÚ`ÿžÑÿßB€<ŽŠõÏ´Áÿ=£ÿ¾…iƒþ{Gÿ} ò:+×>Óüöþú}¦ùíýô(Èè¯\ûLóÚ?ûèQö˜?ç´÷Р#¢½sí0Ïhÿï¡GÚ`ÿžÑÿßB€<ŽºOÿÈfoú÷oý k¸ûLóÚ?ûèT€†‚=Ź /ùß×Ãÿ:ëë³ÿý÷ý|?ó ÖÛýX¢‹oõbŠb#½ÿV~•ÂOÿ#>Ÿÿ]Åww¿êÏÒ¸IÿägÓÿ븠æŠ(¤0¢‘›hÎ ú Š9 $s–ôé@QEQUÿc²ý’é°HÊÇ~•4yè[Ê’<bEÁ  h¢Š(¢Š(¢Š(¢Š[0¦YÜ€Y\(>ƒh?ÔÕ¼Õ+6ù®¿ë°ÿг5Û©aÕtŠi%¼e‘Uˆ<§8>£ .# Í¯0Ò/nî,,f°»ÖçÕšçù†W·ÙæÛ‹ü˜ÛýÞsZkK{­j^|zôá5'%·¾) jÀ+æ|)âš×úôÿ0z^¿äwù£5ÆZ#ëÍ©êÚ¥õ¼×2Á6³´B5‚Í·–'“Îjæ¿yn|ö˜‚Þ@Ë !ŸwïuÃsßµ _Ãñ§Oš3\f¯â=bÒãY’Í,M®–‘»G*>ù.ㆠ¡«–šåô÷vz´–+åÙ‹´¸‰YW$Á‰é޹¥p:|Ñšâ¬|g(}D^®#¶³7‰$ÒÁ¸A\IœöÃ)Òx—VÓ$ŠMV;&‚[)®ÄvÊáÓ`S´±bïuÀ§·õëþL?¯ëï;<Ñšätj:†¥½Õº´3Bdó"´ž! |¬dlƒÁéÒ« 9/üq©ÝH,åŽËÉ.!gt2|³¸äõÁ¡è S´ó£ó¼Ÿ1<Ý»¶nç¸ô§æ¼ãEÕ"²xõ3n‘LJÖ_&,àaØàd“ù“Z^+Ö&ós`.™­xÖIá ˆËH0ÙÏc§JŸ×¯ùõù™Ûæ›æ§™åî]øÎÜó\V‡uiuKY$žòÎy€ÉoÄÑr®®ÄƒùV]´—s¯ˆuKC›átmâ?0ùq¹z’ǯ|Ðôª;,ÑšÁðÀÕ"Ò„Z¼¥çŒùc*rBñ»qb[=rqô¬hõ‹›KY×O‚Ò)î5·µÜêì¼ç.Fì“Çbmýtÿ0éë¯ù¾hÍr2x¢öÆÛR‚öÞÞ]BÑâHü’V9|Ó„<ä¯=G=)ðê^!:•Þ˜í¥½ÔvñOˆäDÃ9 ÌIáNÐêóFk Ä£S—Hhô™v\H|¾“†ã;ƒ¸Îr3Ó¡«<—­¤Dú‰ÿIa–_/fßlnlýsÍ+î®hÍpºf¯~4­ÏKŠÆÙ¯b|ÄwDs€7ƒÎ{šž][éx’Þ%ÔEñ±}ˆòF ŨÜFÞp9÷ïMÿ_žhÍqpø«R’Õaû$fú[Ák²A,18+»~×ù¸Œg¨ëWtíO\º¼º´éÍ%ÚG3ª:ˆ c´düÜŽ§_—ùŠçOš3\×ŠŽ´Ð@4w;·îusòßx0ÆvíÇ9ÝŽ:Õ«ùe—ow²yE›´¢±ÚIC=8?&ôl¤®Ò6óFk‹UÕ¥žÇNÒ—O„ 6;“çÆì9ãhà sšŠM%––máXno†BðÉp±ygkacù›æèx¦Õ™+S³óSÌò÷.ügnyÇ®)Ù®#ûN{¦Ðu‰íÚÞïí­e(ØÈ$· €À6 U`Jì·Z: —4f¢Þ=hÞ=i.hÍE¼zѼzй£5ñëFñë@æŒÔ[Ç­Ç­Kš3Qo´o´.hÍE¼zѼzй£5ñëFñë@æŒÔ[Ç­Ç­Kš3Qo´o´.hÍE¼zѼzй£5ñëFñë@æŒÔ[Ç­Ç­Kš3Qo´o´.hÍE¼zÔ7bymdŽÖá`™†V~ß|df˜óTYU/eERŠø¤°?ÈStÈ.­,– ËÑw"ð%òö;g““ïJç:ŒŸõÅ?›ÒõÈYÿÈ~ûþ¾ù×_\…Ÿü‡ï¿ëáÿ;[oõbŠ-¿ÕŠ)ˆŽ÷ýYúW ?üŒúýwÝÞÿ«?Já'ÿ‘ŸOÿ®â€;š(¢Â‘T.qÜæ–Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š‚Ù±%çýwú-+2-4Ô¢½žþúí¡,ÐÇq )a‚@pHäšÒx%¼J¨_•в“Ó<ƒŒ~Tß.÷þ{Úÿà;ñt—a“§ÇenÒ4Q– ¹òI=õ¬åð醿ækmcR·4ïmÝÇ®2„öõ­_*÷þ{Úÿà;ñtyW¿óÞ×ÿÛÿ‹£­À˺ðÜÜ\Ííõ—Ú¿ãá-¤P²œ`’HÆ*ÌÚ=´ÚzAiVÙJ°Ý„ ŽHöªß•{ÿ=íð¿øº<«ßùïkÿ€íÿÅѰnt;[¤Õä˜ I&ÚÃåvü¼qÇ®in´;;Ùæ–1¼ëO±ºnÀ)œç¦søÕß*÷þ{Úÿà;ñtyW¿óÞ×ÿÛÿ‹  ¨¼= ¹¸šk‹ÍEäµ6Þ]˧1õÚ0£¯©¬/A»›T[md·_\G)!ð6®ÎØIÏJêü«ßùïkÿ€íÿÅÑå^ÿÏ{_üoþ.ëúûÀ©¦iGK8MBúxU6$3Ȭ¨;c ·$ÔÐXEííÒ´†K;`$`m]£zT¾Uïü÷µÿÀvÿâèò¯罯þ·ÿC×pØË·ðÅ…¸CN顳dvKìÜ{ž˜©lôV²…áUÔš#—¼Š|¡Ø©Ûœ|Õÿ*÷þ{Úÿà;ñtyW¿óÞ×ÿÛÿ‹  ºn•›=ÅÁ¹¹¹¹¸Ú$švRÄ.p>P=©šuœö¶¢T)³ºqp§<¬„aÆ=üM]ò¯罯þ·ÿG•{ÿ=íð¿øºŽþ'ž8äI.C@þhŽ y¤ò6x úW0ú¥s§@®’[Í.®o$J»àCžsÈ$qÓ={×Wå^ÿÏ{_üoþ.*÷þ{Úÿà;ñt-?¯ë°_×ÞcÏ [Ť_ÄRëPžè†•ä™D²ÆÜ7v㎂²­4=ji¯nZâòÚI’Qîn¦¯¹Îbßœ×[å^ÿÏ{_üoþ.*÷þ{Úÿà;ñt-ÄÕÕ‰÷𡍤Áã½€]M$ Áma•QeÝónÀ8ê9«Uïü÷µÿÀvÿâèò¯罯þ·ÿ@ÎVjBÓMnm#›ÏšÚE 0sÎGC[ðØÿf-–û€Ë7ÚÏ™ûï7ûû½ cµiyW¿óÞ×ÿÛÿ‹£Ê½ÿžö¿øßü]6ÀÇÔ´©?²R"ÚŽ£óXšõ­Ü¶×of·73\ÛQn&U‰3ŸÞqÏ<ã'«Sʽÿžö¿øßü]Uïü÷µÿÀvÿâèjãNÇ:Þ»“Y·oµÝZÁš–ækYK0nFŸÿ]Åw4QUïo`Óí$¹¸}± ç$žÀ䞤2ÅŒž"Žm.ÒúÛNÔ.åK,qD (we‚ί麄®Ÿí±c pAê"€-QY6úüRêqØÍc{k$ÁŒ-<`,»zããŽyÅ$ ŠMJ;ì¯m$”1…î#dÛÉÁãŽyÅkÑX¶^&´½¹‚%·ºŠ+’ÂÚâXÀŽr9ùNsÐ2qÅIc®h\´pé·¢‘â7,#å ø÷c#(ZŠÄ³ñE•íäP$7IìÉos$`E3.rç=Ž2qÅOe¯Øê­ÆŸjÒI$ ½äÛ„<‘€{àŽÜ{Ð¥‘o¯Å.¥ŒÖW¶’JÂ×€²í댎9矊,¯o"!ºHçfK{™#)™s§9ìq3Ž(nŠ©=ãC¨Z[Œ¬áÉf˜+.Ð yn½ºR[êÚuåÃ[Ûj³Ì¿z8¦Vaõæ€.QU&Õtë{¥µžþÖ+†ÆØžeW9é€NjÝVU޹ý¡tÑæވVGˆÜ°ŒG”$ãÝŒŒt¥²×ìu RãOµi$’ÞòlÂHÀ=ðGn=èRŠÇ¶ñ3ê1YKe}jó†0=ÄAV]¼œrH8ç e¯Š,î® AÔp\3,R JTps‘À=@Î(nŠ/­$ò<»¨_Ïö@|À9%} ¡o¯Å.§„ÖW¶²LÂÓÆË·®0N8çœPµ˜Úí˜×£Ñ×Ì{—FbÊ¿"`‚}pAÅ%–¿c¨j—}«I$&÷“fòFï‚;qï@”V=·ˆ¡ŸQŠÊ[+ëWœ1î" ²íäã’AÇ8 TšŽ¹Ÿt-VÖêî(ÌÑÛ %8ÜrG~Þ:P¥Ÿ6«ðüšµ®%Œ[ãφ܌úRiZÅž«kÁum,ÞZ¼±Å(b„Ž„‘øÑÜ + þ‹HO:ƒAköÕ‰ Ê4I³¶þÎ{VÃÜÁˆ¼ñ¨•‚ÆK¼ž@¦€%¢ªÏ©Ø[,­=í´KÉ*¨F# ž9¤:®œ,¾Úoí~ÉœyþrìÏûÙÅ[¢¨IêÉ-Ú  ºWa*νgåÇøt§WN7¿bö¦ë8ò<åߟ÷sš·ES·Õ´Ûˆ·¶Ô-g™~ôqL¬ÃêÍ>=FÆk·´ŠòÝîSﲩuú®r(Í‹¨xŠÖÚúÎÊÞâÖk‰®– b‚ñ‚ $¨9íÞ¯ÏxÐê–Á#+8rY¦ Ë´ž[¯n”y‡‘nЧo«i·s´Ú…¬ó %£Šefö5[Hñ¬Ù ‹{˜Cß$FU/Ïñxé@´UkmFÊòšÖòÞx“ïŸuºdâK‰š2#ÚŠÀmn»#§¾k¸¢’Ч1=×Û|Cáë"x7Çr|©Ók¯Ê#µ`è«ý¡¥è0Zi× umt%{¶€¢,a›v£dq]ÈÒìÆ¦Ú”MÓ&Íììv¯(' Ðt5-••¾Ÿi­¬~\1‚rN9ÏSÍ4ÆpZŠ›ÛK­>ãí“j©(ºò $ˆfR§Ìè8Âã9®ãOÔbÔRááIaà;À™N =3P7‡ô׿¯¼ÂO0o™Ùz„-´´"†(d1¤k’ÛQ@'$þ$æ’Úß×OòÞÿ×S“²B¾ µþǵÕm i$kÔ¹YN@sÛ±÷}ëU ”xÒ{ƒù'ODm;K ã>¸í[TP´°Þ·9=.õµ-gí·öz„w¼vÉe*Çÿyœ®70sÀà{åiwV÷Ú[‹MIn!–W»†X[ìІ ¸ÅÆ3œÚNA>¦½Šêqž±º°ÖÍäö¥µú9·Œ+d7(Ãøwõí‚1éR(’÷Åv·º}®§âE¹kØ\Eã`~‡p_¹Áç5×Ñ@w8Ë]XÓõý<ö÷'žòΖ® -‚ÅÎò77n:ÙH%4žàÄþIÓÑ›NÒÂF8Ï®;VÕï°¬ršMéÔµµ½Ô-5§ã´…ì¥XàNìX®70sÇAï‰m^msÌš-M-Í“EúllÎÎIʾÐN1ŒgŽMvRc95ÒõY<,<Û™¢“û=£:|QG³w–@w ôൕ]j:#Úé—6‚ÆÙ–êY­Ì;²€·ÍϧÙÑM½_Ÿüó´Há,mî4û? Ý\é÷oº\G4qÀÎè\ü¤ Ç•»â$šKM6ö i¥[[¸î$Lɳ/RFEê3„6÷†¢÷Kav —Y‚P&·e;-¥Š‘2:š}Þš‘^ênÐ^À©ökfePþH¶C.r¿q]ź[úéþBþ¿?ó9+eÔï/Ù?;…ŽWÅŸéÀÛ[Új’_ÂU­ü¸˜Û³ä_?» ¹äv«ž)ŠG´Ó$kY.VØ¥™!ˆÈv€rv€Ië] –ƒ8­ºŒpëzŽ›§Íöá{œÄ’|ë·¥Pû ÜÚ_ˆvC}:ÜKlÑ™ìü§“wW¦:ãµz%Ó°N½£ÜÍ©jkedÆm-™ÑjÎRRY3жÞ1î)Ë ¾¥ªêSeß[ØI¦$dhŽã£œÙ®ÒŠ]-ýj×åþG%¥jÓév²^[ܽ” [ÊÖžDÒî;pPã8$sœÖ‰ Šk[ií‹,3y½µ±œ£`™9$Q[2ÃÊXÒE P@ ä¨4ú ´8··Õõ9|9,‰5„ëö6H »p¤« ¸cƒëU“JÔ ¶2Ik=Ö¡c©­ÕÑÿ‰´€Éœ …#å ã½w´S¾·þ·¸t±Ê]jWÚ´×[YßGdtÙYí2ÓÃ$ã=8¬*ÊOµh-ei«‹«}¢å¯–O&4Ù‡ æt=†Ïå^ƒE Oë×üÁꂊ(¤EPEPEPEPEPEPEPEPEPEP\…Ÿü‡ï¿ë»:ëë³ÿý÷ýwoç@­·ú±EßêÅÄG{þ¬ý+„ŸþF}?þ»ŠîïÕŸ¥p“ÿÈϧÿ×q@ÍQHaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP\…Ÿü‡ï¿ë»:ëë³ÿý÷ýwoç@­·ú±EßêÅÄG{þ¬ý+„ŸþF}?þ»ŠîïÕŸ¥p“ÿÈϧÿ×q@ÍU[òâÝ©’hã%z€ÎÇàM!–¨¦bYzÝà\¿üUC"Öþ{hÚCŽ9;— ’àòI?Â(Í‘«ê÷6¶v–QÜÏx\(’)Wjä󵪬^"’fHdŠ+;¨ïRÖx¥&@w.á±—¹Á8sBÔ‡CEdÿÂM¤}¿ì_j"o7Éæ' æw~6çÛ5z[Ûxo ´’LO8f6Ÿ˜.3ÏAÔPŠ+&é6èŒ÷.wÈñ(H$v,‡ 0ªO½*õ•õ¶£j—V“,°¾pËíÔCí@(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šh$¾\{As3s€zqø“ìÓÿÏxÿïÑÿâ©–Çý6qÿLãþoVËP"¿Ù§ÿžñÿߣÿÅQöiÿç´÷èÿñUc5®j¿ØÚ=Æ¡äùÞH_ÝîÛœ°p}igìÓÿÏhÿïÑÿâ¨û4ÿóÚ?ûôøª­« +í6ÛÊó>Û1‹vülÂ3gçîã·ZŽiWW¿c‚ì4ä²§ÈÁ\¯P¬FÖ#ÐH ¿fŸþ{Gÿ~ÿGÙ§ÿžÑÿߣÿÅV—â˜#ðöu«Nßi»´E9m¤ç €ô­ÛB×R´K«9–h_8eöê¡ö§`ìÓÿÏxÿïÑÿâ¨û4ÿóÞ?ûôøª±š7P7C"¬…Y_…eç®1ùÑ#ìLã' êIÀ§^š×ÞSÿ 5E9ÂÇÿ]cÿÐÅ!“ iṉ̃ƒéå“úæ—ìÓÿÏxÿïÑÿâªÁ4›©ˆƒìÓÿÏhÿïÑÿâ¨û4ÿóÚ?ûôøªË»×®µ%Ó´­;í³Àª× óˆ£w*3‚KΩ®/ tù¢Úä,ÿä?}ÿ]Ûù×_\…Ÿü‡ï¿ë»:î<³µ¶ÿV(¢ÛýX¢˜ˆïÕŸ¥p“ÿÈϧÿ×q]Ýïú³ô®ùôÿúî(¹¨.Ô´q¥¶KN?ʧ¢É?´`þìÿø'ÿUƒ ¯eUÂ4h€º•$‚äðyþ!RÑ@î.©¬éËm”Í$3™r¸‚'Ò™yáøí£Ó¢Ó-¾Xõ¹šMÌ@,Ç,zzšè¨¦´©ÉM¢ê ¢j6ëo™¥ÕEÄk½yO5[vsÇñÖ´u«kѪiš•©»6¾bIº£p9ˆ;Ö忯ÂÁÕ³Ž=GLÔôw}5ä¹’âúo³,©¸+G9ÛœZé¼;csiow-Ük ×wOpaV 僀Gñ“Žæµ^hæx‘¥;¨,¹ëƒÛ5%1QHaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPP¶Ûûúåóz˜ËUdÅrÓ$fUt ʤ$‚2@þ#M7Ï×çÿ@<ßzÇñM¤ú§†ï,­£Ë(P¨X üÀžO«ž|ŸóãuùÇÿÅÑçÉÿ>7_œü]´1.|1eoªéW:^›moäÌæy!UBÆÃñ䎕KAÐf±’ÊÚúÂíÍ›×ö‰h2„Eò ÛÆMu|ŸóãuùÇÿÅÑçÉÿ>7_œü]±Ç@ºŽ?†íÛOi®mþÔžRLƒzñóN:‡º_ZÜÙÛÞKv‹ ×—OraV # €Gñ“Žæ¬±*JÚdÍ$yØäDYs×§ùòÏ×çÿNã.y¾ô jŸŸ'üøÝ~qÿñtyòÏ×çÿH ®Ÿ/iÿ]þ€ôÛ£ˆã?ôÚ/ý j5ó®."f…¡Š"[ç*Y›v'ŒÞ¥¹¥€ª¼2ºîé• ŒþTe¥æ›æÕCq/{Œÿ²ÑãÿB¤óäÿŸ¯Î?þ.€2Z=KI×o¯lì~ßm±ÝdI"u]¿Æ@ €;ñT5ÛmsS2–³¼0MfQ-í¯’1§v|Ï™C‚ ÷#¯ÒùòÏ×çÿGŸ'üøÝ~qÿñtZêÀ´w2tí:îßV·šXÀ‰4¨íY·ƒûÀÜŒg?JÎÑôý_BûÈÓÍÓ}-f…'Ex™YˆRîǵtþ|ŸóãuùÇÿÅÑçÉÿ>7_œü]6îïýuÿ1[úû¿ÈåïtK™5}Bi´ûËË]@#2[ê>HO++®õ 8ê3[:]ņ¿©¿“‹K„„Å pq±6•#9ÏÍ_óäÿŸ¯Î?þ.>OùñºüãÿâèNÁbç›OI2¨yòÏ×çÿA¸¹*DVS+ž#&ÑîpÄþ”†>ÀçN¶?ôÉ?®:éÿÒ§ÿ®òÿèÆ®Ö„ñÂDhßË_è·Ëy+Cž7‘J2‚7H!ˆîMrâ¡)Ar£»R¨ÜÝ´2üÊ_2¬ÿcjô›þû‹ÿ‹£ûRÿ |ß÷Ü_ü]p{¿ÊzÿY¡üÈÆ/l¦¸öËsÒ´¨DÉBÇ%X1g<ŒñTÌw6W¶,#ÝI,òȱ¸P°H°8éï]/ö6¥ÿ@ù¿ï¸¿øº?±uŒé’:10’>‡~Emj·õc–NƒÚ{må©ÏK§]MHT †¼ûQ…'ÙÆ í ƒœç©M‹”‰ãµxd+,¾mØ•ˆU#9,}†Íncj_ô›þû‹ÿ‹£ûRÿ |ß÷Ü_ü];ÖþP¶÷çþ¿¦fñ_^ÌàlÑî8EéÈïV<ʵý©Ð>oûî/þ.ìmKþóßqñuŒ©U“¿)¼+Ђ²’ëøêVß[þlÜ]{Eþ…%dÿcêô›þû‹ÿ‹­ýNžÊ9¥¹$—h䪹ÆqÆrǧµo†¥8Ô»G66½)Òå‹»6+´ÿý÷ýwoç]}rŸò¾ÿ®íüëÑ9խئ[¿ü …S?µ€äoÿü) ôª+Íáckô·ÿ¿þÂÆÖ?èoÿü(Ò¨¯5ÿ…¬Ðßþþ7øQÿ Xÿ =¿ýüoð J¢¼×þ6±ÿ@{ûøßáGü,mcþ€öÿ÷ñ¿Â€=*Šó_øXÚÇýíÿïã…ð±µúÛÿ߯ÿ ôª+Íáckô·ÿ¿þÂÆÖ?èoÿü(Ò¨¯5ÿ…¬Ðßþþ7øQÿ Xÿ =¿ýüoð J¢¼×þ6±ÿ@{ûøßáGü,mcþ€öÿ÷ñ¿Â€=*Šó_øXÚÇýíÿïã…ð±µúÛÿ߯ÿ ôª+Íáckô·ÿ¿þÂÆÖ?èoÿü(Ò¨¯5ÿ…¬Ðßþþ7øQÿ Xÿ =¿ýüoð J¢¼×þ6±ÿ@{ûøßáGü,mcþ€öÿ÷ñ¿Â€=*Šó_øXÚÇýíÿïã…ð±µúÛÿ߯ÿ ôª+Íáckô·ÿ¿þÂÆÖ?èoÿü(Ò¨¯5ÿ…¬Ðßþþ7øQÿ Xÿ =¿ýüoð J¢¼×þ6±ÿ@{ûøßáGü,mcþ€öÿ÷ñ¿Â€=*Šó_øXÚÇýíÿïã…ð±µúÛÿ߯ÿ ôª+Íáckô·ÿ¿þÂÆÖ?èoÿü(Ò¨¯5ÿ…¬Ðßþþ7øQÿ Xÿ =¿ýüoð J¢¼×þ6±ÿ@{ûøßáGü,mcþ€öÿ÷ñ¿Â€=*Šó_øXÚÇýíÿïã…ð±µúÛÿ߯ÿ ôª+Íáckô·ÿ¿þÂÆÖ?èoÿü(Ò¨¯5ÿ…¬Ðßþþ7øQÿ Xÿ =¿ýüoð J¢¼×þ6±ÿ@{ûøßáGü,mcþ€öÿ÷ñ¿Â€=*Šó_øXÚÇýíÿïã…ð±µúÛÿ߯ÿ ôª+Íáckô·ÿ¿þÂÆÖ?èoÿü(Ò¨¯5ÿ…¬Ðßþþ7øQÿ Xÿ =¿ýüoð J¢¼×þ6±ÿ@{ûøßáGü,mcþ€öÿ÷ñ¿Â€=*Šó_øXÚÇýíÿïã…ð±µúÛÿ߯ÿ ôª+Íáckô·ÿ¿þÂÆÖ?èoÿü(Ò¨¯5ÿ…¬Ðßþþ7øQÿ Xÿ =¿ýüoð J¢¼×þ6±ÿ@{ûøßáGü,mcþ€öÿ÷ñ¿Â€=*Šó_øXÚÇýíÿïã…ð±µúÛÿ߯ÿ ôª+Íáckô·ÿ¿þÂÆÖ?èoÿü(Ò¨¯5ÿ…¬Ðßþþ7øQÿ Xÿ =¿ýüoð J¢¼×þ6±ÿ@{ûøßáGü,mcþ€öÿ÷ñ¿Â€=*Šó_øXÚÇýíÿïã…ð±µúÛÿ߯ÿ ôª+Íáckô·ÿ¿þÂÆÖ?èoÿü(Ò¨¯5ÿ…¬Ðßþþ7øRˆºÁ?ò·ÿ¿þé5ÉY¯üO¯Oý7oçTm?ü ?üEÚ¾Ôž´}©=kÅáhÝÐ>?ü ?üEð´n¿èþŸþ"‹í_jOZ>Ôžµâ¿ð´nèþŸþ"øZ7?ô‹ÿOÿEÀö¯µ'­jOZñ_øZ7?óáþ·ÿGü- Ÿùð‹ÿ[ÿˆ¢à{WÚ“Öµ'­x¯ü- Ÿùð‹ÿ[ÿˆ£þ…ÏüøEÿ-ÿÄQp=«íIëGÚ“Ö¼Wþ…ÏüøEÿ-ÿÄQÿ Bçþ|"ÿÀ–ÿâ(¸Õö¤õ£íIë^-ÿ Bçþ|"ÿÀ–ÿâ(ÿ…¡sÿ>àKñº.´ý©=hûRz׋ÂйÿŸ¿ð%¿øÝð´.çÆ/ü oþ7EÀöŸµ'­jOZñoøZ?óãþ·ÿ£þ…ÏüøÅÿ-ÿÆè¸Óö¤õ£íIë^-ÿ Bçþ|aÿÀ–ÿãtÂϹÿŸð%¿øÝÚ~Ôž´}©=kÅ¿ágÜÿÏŒ?øßünøY÷?óåþ7ÿ¢à{OÚ“Öµ'­x·ü,ûŸùò‡ÿÿÑÿ >çþ|aÿÀ†ÿãt\iûRzÑö¤õ¯ÿ…Ÿsÿ>0ÿàKñº?ágÜÿÏŒ?øßün‹í?jOZ>Ôžµâßð´.çÆ/ü oþ7Gü- Ÿùñ‹ÿ[ÿÑp=§íIëGÚ“Ö¼[þ…ÏüøÅÿ-ÿÆèÿ…¡sÿ>1àKñº.´ý©=hûRz׋ÂйÿŸ¿ð%¿øÝð´.çÂ/ü oþ"‹í?jOZ>Ôžµâ¿ð´.çÂ/ü oþ"øZ?óáþ·ÿEÀö¯µ'­jOZñ_øZ?óáþ·ÿGü- Ÿùð‹ÿ[ÿˆ¢à{WÚ“Öµ'­x¯ü- Ÿùð‹ÿ[ÿˆ£þÏüøEÿ-ÿÄQp=«íIëGÚ“Ö¼WþÏýâÿÀ“ÿÄQÿ FçþñàIÿâ(¸Õö¤õ£íIë^+ÿ FëþñÿàIÿâ(ÿ…£uÿ@øÿð$ÿñ\jûRzÑö¤õ¯ÿ…£uÿ@øÿð$ÿñÂѺÿ |øøŠ.µ}©=hûRz׊ÂѺÿ |øøŠ?áhÝÐ>?ü ?üEÚþÔž´}©=kÅ?áhÝÐ>?ü ?üEð´n¿èþŸþ"‹íjOZ>ÔžµâŸð´n¿èþŸþ"øZW_ôÿOÿEÀö¿µ'­jOZñOøZW_ôÿOÿGü-+¯úGÿ'ÿˆ¢à{_Ú“Öµ'­x§ü-+¯úGÿ'ÿˆ£þ•×ý£ÿÀ“ÿÄQp=¬\¯­=fSÞ¼H|Sºó Oü ?üE^°ø°¾z­æžÑÆN Ç6ò=ðTQp=Œ04µ‘¦êq^ÛÇ42ŽE ¬:kUNE0Eexƒ^´ðî‘>£xO—áWï9<=ɯºøÓ®<Ìml,"‹?*ÈØr*÷\Ñšð?ø\¾$ÿŸm3þýIÿÅÑÿ —ÄŸóí¦ß©?øºWß3FkÀÿárø“þ}´Ïûõ'ÿGü._϶™ÿ~¤ÿâè¸ùš3^ÿ —ÄŸóí¦ß©?øº?árø“þ}´Ïûõ'ÿEÀ÷ÌÑšð?ø\¾$ÿŸm3þýIÿÅÑÿ —ÄŸóí¦ß™?øº.¾fŒ×ÿÂåñ'üûiŸ÷æOþ.ø\¾$ÿŸm3þüÉÿÅÑp=ó4f¼þ/‰?çÛLÿ¿2ñtÂåñ'üûiŸ÷æOþ.‹ï™£5àð¹|Iÿ>Úgýù“ÿ‹£þ/‰?çÛLÿ¿2ñt\|ͯÿ…Ëâ?ùöÓ?ïÌŸü]ð¹|Gÿ>Úgýù“ÿ‹¢à{æhÍxü._ÿ϶™ÿ~dÿâèÿ…Ëâ?ùöÓ?ïÌŸü]ß3FkÀÿárøþ}´Ïûó'ÿGü._ÿ϶™ÿ~dÿâè¸ùš3^ÿ —Äóí¦ß™?øº?árøþ}´Ïûó'ÿEÀ÷ÌÑšð?ø\¾#ÿŸm3þüÉÿÇ(ÿ…Ëâ?ùöÓ?ïÌŸür‹ï™£5àð¹|Gÿ>Úgýù“ÿŽQÿ —Äóí¦ß™?øåß3FkÀÿárøþ}´Ïûó'ÿ£þ/ˆÿçÛLÿ¿2ñÊ.¾fŒ×ÿÂåñüûiŸ÷æOþ9Gü._ÿ϶™ÿ~dÿã”\|ͯÿ…Ëâ?ùöÓ?ïÌŸürø\¾#ÿŸm7þüÉÿÇ(¸ùš3^ÿ —Äóí¦ÿß™?øåð¹|Gÿ>Úoýù“ÿŽQp=ó4f¼þ/ˆÿçÛMÿ¿2ñÊ?árøþ}´Ïûó'ÿ¢à{æhÍxü._ÿ϶™ÿ~dÿã”ÂåñüûiŸ÷æOþ9EÀ÷ÌÑšð?ø\¾#ÿŸm3þüÉÿÇ(ÿ…Ëâ?ùöÓ?ïÌŸür‹ï™£5àð¹|Gÿ>Úgýù“ÿŽQÿ —Äóí¦ß™?øåß3FkÀÿárøþ}´Ïûó'ÿ£þ/ˆÿçÛLÿ¿2ñt\|ͯÿ…Ëâ?ùöÓ?ïÌŸü]ð¹|Gÿ>Úgýù“ÿ‹¢à{æhÍxü._ÿ϶™ÿ~dÿâèÿ…Ëâ?ùöÓ?ïÌŸü]ß3FkÀÿárøþ}´Ïûó'ÿGü._ÿ϶™ÿ~dÿâè¸ùš3^ÿ —Äóí¦ß™?øº?árø“þ}´Ïûó'ÿEÀ÷ÌÑšð?ø\¾$ÿŸm3þüÉÿÅÑÿ —ÄŸóí¦ß™?øº.¾fŒ×ÿÂåñ'üûiŸ÷æOþ.ø\¾$ÿŸm3þüÉÿÅÑp=ó4f¼þ/‰?çÛLÿ¿2ñtÂåñ'üûiŸ÷æOþ.‹ï™£5àð¹|Iÿ>Úgýù“ÿ‹£þ/‰?çÛLÿ¿Rñt\|ͯÿ…ËâOùöÓ?ïÔŸü]ð¹|Iÿ>Úgýú“ÿ‹¢à{æhÍxü._϶™ÿ~¤ÿâèÿ…ËâOùöÓ?ïÔŸü]ß3FkÀÿárø“þ}´Ïûõ'ÿGü.oÏ®™ÿ~dÿâè¸ùEy‡ƒ>*ÿmêQéš­´v÷E,Dìfþé$NkÓ•· Óh¢Šl‡ \ιyåFÜ×I1ù pÞ(¬O@ æ3üìrÍÉ>¤õ£uB­ò¥.ê‘’î­{¯ê6z ¾³2ÇöYÈ êpXcqÏqYšt^jVÖÓÏÉ Y%‘‚ª.y$ž¯D—\ðΩ}ªé‚êæî`û:I;ƶ©åƒ°¡ÎG<Œõ¤öÐç'¦xbûV¶Im®´ñ$¡ŒVÒ\4›s«ƒèzâ± A{WaáËKKêÚ¶·1dCwv©ödä9cê{Ï–³žÒËQsfºŒ+¹Lipц9ûÁ×’?ži½ì¢I'š8bBòHÁW«pt7¾½³šÆwhd¹e‰ÃH‘+gØ,ON V,w &½ÚrǦ©™,ÅÖ1Év#<ò+«ñU¼ ¢¦¥~ºtì’«Ã&Ÿ.EÂwr?]Þ¢Ž‰°êуmáíBë^›F_%.`ßæ4ŒDj©Î3Ž˜ã¸¨Æ‰vÖ«$+ëƒoçp8Éãùý+ªÕµí,è7:Í­Ä_Û:­´v³B¬7EŒ‡b:€@ò¬Èoìdž|/ º€K¤d• ƒtk¿;˜v愵³òüÁíuýiþe{ïêv0ÜÈ.4û¶µ¸ŠÒã|‘VR£á‹Í*Ñæ»¼ÓRTPÏh.s:ƒÓäÇ¿­kx‹Åvpê:½¾an²^*mAn žj‘ÉQÑV5 ,®4Ç×uMPºHqeqfù¹/Ø>ã§_|Ôý›ŽÚØåîtk»_ìÏ1á?ÚH¯Ö< Üq×¶jÄ~ÔåÖî´˜Ä-5¯3Ëæb$%ˆsé]¾&´´´ð½¼vú=æØ#Y¤¸ŒHöç#<çä#¯>”³jº]Þ·â­6MF"Ôü¿"ð6è² pXqƒëõª{ýâ_åøœÞ«áëÝ&Ò;Ç–ÖêÍÛ`¸³›Ìw¡8ÒjžÔ´ƒb.Þ h|¢[$ãå9æä~}kNõìt?Ýhë©Új—· !û#ïŽ%\s»Ôãüâ·õ/éPj—qLñÞGh±Ï¦¼GzyÂ=¤dqŒ~ ÒÛúûÃúÿ#™> ÕW]:;Ëf—ßí%ÚV„Î:íÎƳuM3û/ÊÎ¥¦^y™ÿŸ7f1÷¸Îxúîlu«¼I§^Ï©Xï} G3Ï2íç;_ž<޵Žú?ö¿ˆ´¨O ™Ïšš+p~f.>ƒûÓ¶¶Ö¬:_úÙ÷þ¼³’ÎVk»©í–æH ·fhCtÏä)Öþ»ºðýÆ£ W2\CwövµŽÌÐK9Î:WC¤kÿÚ Öç–öÆ ¹Oxm¥ò×!Ll=Qß5 êöÚn‹y›¬±s­««´ø–H°2ÍÝ—=OCB×çþhŸ/ò9{;˹+[;™äO¼ÄÎËõqK •íÄÏ WRÍߎ8Y™~  ŠîïIoø†êßSµK‡xͱkö·‚A¸ïB7çŒõ¥ÕuË4¹ñlö:œ)4ÐÛ$‚pØ 6ÂN;â•ô¸í­ŽØßd˜ØÝc%dÀÛPŽ œ`­ZÑô£«Æko¥»O,¥7ð:.29?^ÕÝGâKi4[;«[Ý5¤ŠÌÇqíô‘»>>oÝý×$ç’3ÏZåÿd|þ”Ý[@¹²×îô»(®o¾Ü´P–8*H\ã­uÄ)®[jÚëPiWgQ,“LaÀUPÃéœSÍþ•?Š5ûÈ5Ku¸c¶2_½¼2£qÞ„nÆ:fÿ¯@Øãì4GR¶¿–Úg±ÛæA±Œ¬X‘…P:Œôª°éú…ÁAaw)ˆ•G¶Â:†Ààýk½ºÕ¬nµŸAg¬ÚZMy ¿ÙîÍÆÈË ù‡˜?*§á)ìl!‘äÕí~Ü·ÿ¿3ê/oêé‚„ó÷ºÒZƒþ¾ã•Ðô©5½Z+”C¸3<¬»„j£$‘‘ôëÞ«Kgsiû=ÏØËb;†…•gƒžœúfºégƒO´ñ>» #‹ë¶³µd<2³nr=ˆïíZ~!ñ¤úMôÚ}Þ—-­Å¨ˆ[É{ ™x ùAr1Ò‡µÿ®ãK[öï4Eö¯5£óBy ¸§÷€Ævûô Ù_- »6WBÔò'0·–àXÅvQßÚÂ4#¬[ HÙ—[ƒ"lT-Ÿ³ù™êGlûUÛ+í"ÓÃrC©jÖòilŒ“_¹—Î#îˆIÚÐQ-/ýwÖß×c‚M3R’4ëÖ…ñ¶E·r­ž˜8Á¦=äwBÕìîRåºBаsô\f»ëÁº\+«Åºè[È ³0ìØÎþœûRê+e¤iºö­c}%ßÛ6XÛÌò™HÌ€9å€}¨Ù\V»±Í·‡5ÐçÖJ*éñ°Øò|­*–Àe^xäu#Û5º·t»èSÁZý´·H&‘­Ä1<ƒsù;Aäí\Ù‘HÆáùÓ·½`ésB{ ûhD×pÂzI, ª1M[K·µk¤´¸keûÓ,LQ~­Œ ôÏ]¥…Þ´÷ú½»ÚO§ˆaÓ|âÒ Œ7—ü>¹µOMÖìU4‹á®[[é––>MÖ˜Òï&Ò#þ,’9ö÷¥Ñÿ]ÿ¯˜vþ»_#Š“I”iz}ä-$ò^<а%»äm8àôoÃ¥Dºe÷ö…µŒÖÓ[Oq"ǹ£É'ò3Ž}+°Ð5]:|'æ^ÛB ší¥W™G”6ÝÙäƒý+\¾ì·Úæ\ö8ÿÇh’³°–¨Ã¾µšÂäÃ#nã*ËчùíZPèö‘F¿Ú:‡“+ ùjê»~¤õªú¥Ú½å±ëäÍùƒÓõ­vÂååTiãP 2Ž…r=i ËÔtÿ²"Oop.-œà8<ƒèqüêþ‹áñ¹¼ºx!c„TûÍïÏAP^\cNh\a䔤‚GÏ»··ó­+y…Þ‹ (#%Qc;ÿ€Ž3Ç9GNÜŠæÅU•8¦º³Ð˰ð­Q©ëe{wªxj+kwŸOº’o,eâ—±êÇåŠçwfº¸em´­++¨%Œ¿Å'ûÞý½:c+ŽhÓŠœ%YTNúÛ©Y–EÁZýgøozÇA‚&lìfé¸×§ÀÛ£ÍxçÇ?Ù±öÛùׯZÂ>•Üy‡›üf˜ŸZÆñsÿ|=x–kÙ~2ø’Zÿ×Úÿè^3šLb榵®®c ¾ƒ¹¨3W´ë«{Hî$o•—bGÈÈ=y)Õ¯Ùn„/((@a(=ñR]Ø}–Þ9Ö1¶á£1ŸÈõ%ÍÍå­²ónÑ6¼¾×=þ”]ÝBtõ¶[§»“ÌÜ$t+´c§<Ðvjݢܳ¼²íâÈùäg¦8¨Rëe³Cö{vÎxÑåÆ}jÖ“æ‚݈$l¬›ƒýiˆ`±ÓÅp’l(á”÷Ï·Ò‘l‰¶‚f”)ž_-nxé»­Yûm¬É–Ù—d¸\ž¤ Šêî¿¶“ö[}¡I  “óÒ’4Õ3ÝÇ%Ð-±¹ü²søfœºC¼‰²áŒÈ% z¿/\óR.£oÎ¥(Úâ`<µt$?ÔWKç¹¹Gšëì¢5Äf(É íÚ„#´Š{è­à»,ŸòÓË#{íMŠÐÊ·dJÙ”“òçw'ߎ•}ïí?´ìæó7˜Áó§òÊï8㎴Ïíwš è®g,®„B6}}Ó­@šz#–æí-üÑ”R…‰§Ò–=.WÔ¾Äòm»·¸ëÚžóXßAoö‰Þ aAÄeƒ鎔ÿí(þi¾dŒ[¢È$“Û§ãLmt©®ng„°ŒÃ÷ŽÜäö6+( ŒwW¢‘Šä–ä} [ƒZC=¯š j¹3¾3¼íÀ„{P°»Žt…àa$Ÿqrâ¤:F¢ en~òÿ^¢\X9Ya.]’€dqŠ‚ è;ÒbþSœÐ;{»¥f‚p§ä NMI ¨6·¯*²Ë\Æ <æ®GäM¦\´—áep…»qÇZdº…µÄºˆfhÖtP·9+ëõ  IcvöÿhXÅŒîã§Ó­ es%¹¸HI„KäzžkEu8 ´.³$3ÅÍ­o¼œÍØT6³Z¾ž¶÷2 NŽ/$îF'Œ7J`A{å/‰e—d`° Ôšeõ¡²™#2¬›>åsüþµ.¬Ê“Gh‡)oO«u&›{ ¼’Ü[+ÊRÝU‚¡È#­ ‚Þk©<¸»ã8?t¶—0롃 ¬÷W®~˜«ºL%ÄþtrD†ÝÆæB=?:rjÖ²Ø$nÓGnt›JŸ›ÐJ¦ÖÏ w0¼bG  ç'±éšyÓ.dže¶…Ý#r™fPŸò©þÕioE;Ì¢äLò2´zc©¢{ëw†`’Íx%_”ýß^”À¯m§Mt·!r%‡Ë I>¤ñÒª0dvFe$ïZ¯yi5΢1H®ví“Ë'§·ZÍû4¬I†)e$+¬g =i4:}åÄ>t03ÇýàG?†sL¸³¹µ*'…“ÝèsùUë{Èm×NI‘ ’C((r çª?·B–ÐK&Såå[· Å.êe]MU’Ø\¦•¨<w‰VÖB…}sŒcÞ¤e]Ôn«i£Þ¸såªìµûYÜã˜øäc<óÐÕ~ê7S)ðÃ-Ä«I,­Â¤hYÐM©òÜÍ8ŒK4’×daܶÅôè=©‘Å,ϲ¤•ðNØÐ±À'Ði÷³Úù^zlócYSæ*zN´ÍÔn¦Q@ÝFêe>(¥žUФ–Fû©côš7Qº„ŠYÞ8¤uŒnvT$ Î2Oa’>´Ê~ê7T×ö3i·²Ú\mób8m§#¦zÕj~êµcª]é¯+ÙÍå4Ñ4.ÁA%QÈ8úŽj•íÔ»©”P÷Qº™E?uZ¼Ôîõ·K©¼Å¶ˆCÚ"ƒ€?3ÍR¢€º­XêwzkÌösyM4M ‡hmÈÝG ú}j•íÕnÇT»Ó^W³›Êi¢h]‚‚J£qõÕ*(Û©wS( î£u2Š»6§w>Ÿoa,Ùµ¶,ÑF¥¹' dþ9ª»©”P÷Qº™E?uX°Ôn´»Øï,¥ò®"ÎÇÚ#¡5RŠ‘¤.Řå˜äŸzMÔÊ(ûªÔÚÜú}½„³fÖØ³EP–䜓øæ©Q@Ý[òxçÄrÂо¢ n¥X}š!xþås´PÝCS»Õoîúo:vÚ ªî¦Q@ÝFêeLÖ/´k£s§Î!™¡mŠü0ÀŽÂ¦Õ|Gªëij7Buˆ’ƒÊDÁ=~êŠÊ¢€ºÔÊ(û¨ÝL¢€º­[êwv–wVM²  «:…8 gªTP÷Qº™E?u©”P÷T¢î`¸óZ¯EL%·ëJ—/ÄnÊ=3š‚ŠŸí¾æË7©5"^¼O¾"ÈÇ©VëúUJ)4š³dâù¢ìËSßMq2FltÉéø* ÔÊ(ŒTU’°ç9MóIÝž­ðÜçNýöþuì6ŸêGÒ¼wá·üƒcÿ}¿{Ÿú‘ô« òÿŒŸò¶ÿ¯µÿмb½Ÿã'ü-¿ëíô¯³²¹Ôo#´´‹ÍžS„MÁsÆz’jL(­4[»y¢K©,­ÖLâG¼‰Ô`gŒÄz:ÔW:{ZéÖW"²Ý‡!@û»[o&•ÆS¢Ý?JZ(ëS­ÃX½êÅ›dFÎ|¬A œóƒÎ1ÅI›<±A< ½´ìè“Ï T%FHî{œc'RŠBÀúѽpNáÁ怊L‚HÈÈëK@7Ù.>Åöß(ý›Íò|ÍÃïã8ÆsÓÛOk=¬PK<{tó"bÀî\•ÏŽAë@ÑVôûÔVí’UQmnÓœŒîùÕ=ËœnôÍ-Q@2;"£;_º¤ð>ƒµ6Š(¢Š(§$‡Ùte8#ñ¦Ñ@Q@29EBìQ~ê“Àú mPŒŽÈ¨ÎÅWî©< íM¢Š(¢ŠUfV ¬UÈ àŠ™˜³1f'$“’i( Š( Š( yåù{Ûfs·û³cÔæ›Eó4¥v™¯¦ãŠePÖYade€â™š(  º?ü†ì?ëâ?ýWÕZoü{¯Ò¾UÒ?ä5aÿ_ÿèB¾ªÓãÝ~”Ћ´QE0"Ÿîà¼Uþ©ë½Ÿîà¼Uþ©èçÚêµÙìSOÒRU¾ûIÓ"Øb¸Uø±•(I÷äV,z±4I,ZMóÆê]m܆AÇ"¦—Dñ Û<Ý/S“b„MÖòª:ÇÚ¥ê­ýuÞÿ×Cv+h¡­¼†O F€nc´–8ê}éóÁ£iÚe¬S[4‘O§‰w¦ž®Í#.w ÷ämnØÀïXk¥ø%IRÇWY<´q €ªãAÇ©Ñéþ*†Ñí"´ÖRÙóºŽPž¹\`Òj÷þ»ÿ˜GK]ùu=Ô¶7°]Âq,2,Š}ÁÍ[ÿ„w[ÿ 6¡ÿ€¯þÂ;­ÿÐPÿÀWÿ ¤ìî \è5xô{}SV·bÕGcì’|òß#äüjK=/O{ø™í£Ìz*\¬in$ß'cFó‚N çñX¢øŠXb†M3Tx¢Ï–…S''dÓ†“âUš)†Ÿ« bcq ›€pM¿¯“ÿ;‡›þµ_äk´½ZîK;5ûeÅ‹cf°n™x(€¹PTàòj}KKÓm¬îu- 6öÖ`~PC]×i/ž¹¬Y4ÿMx—’Ùë2]&6ÌÑJ]qÓ ŒŠˆè¾"0™ªKù†?"M¥ºnÆ:ûÑoëúõüƒúþ¾ïÌÈ­ßcþí?vq¹³÷ªÂ;­ÿÐPÿÀWÿ ’Ä6ò¬°izœR/Ýt·‘Hú)‰£NÁ´—ÐõÑc ôOöTÜפƒrt ‹Í\ñ:6ž—Ö jß»Eû+¦ž¨TäaÌûÉpÃ=G~1ŠÀMÄ$‰—©¢È»]VÞ@g8a¤ê’†‰PžÇ>¢²¥ÐüAq+K6•©É#œ³½¼„“îH¥`2¨­/øGu¿újø ÿáGü#ºßýµüð¦m¥ÿî·ÿ@mCÿ_ü(ÿ„w[ÿ 6¡ÿ€¯þ›EiÂ;­ÿÐPÿÀWÿ ?áÖÿè ¨à+ÿ…fÑZ_ðŽëôÔ?ðÿÂøGu¿újø ÿá@´V—ü#ºßýµüð£þÝoþ€Ú‡þ¿øPm¥ÿî·ÿ@mCÿ_ü(ÿ„w[ÿ 6¡ÿ€¯þ›EiÂ;­ÿÐPÿÀWÿ ?áÖÿè ¨à+ÿ…fÑZ_ðŽëôÔ?ðÿÂøGu¿újø ÿá@´V—ü#ºßýµüð£þÝoþ€Ú‡þ¿øPm¥ÿî·ÿ@mCÿ_ü(ÿ„w[ÿ 6¡ÿ€¯þ›EiÂ;­ÿÐPÿÀWÿ ?áÖÿè ¨à+ÿ…fÑZ_ðŽëôÔ?ðÿÂøGu¿újø ÿá@´V—ü#ºßýµüð£þÝoþ€Ú‡þ¿øPm¥ÿî·ÿ@mCÿ_ü(ÿ„w[ÿ 6¡ÿ€¯þ›EiÂ;­ÿÐPÿÀWÿ ?áÖÿè ¨à+ÿ…fÑZ_ðŽëôÔ?ðÿÂøGu¿újø ÿá@´V—ü#ºßýµüð£þÝoþ€Ú‡þ¿øPm¥ÿî·ÿ@mCÿ_ü(ÿ„w[ÿ 6¡ÿ€¯þ›EiÂ;­ÿÐPÿÀWÿ ?áÖÿè ¨à+ÿ…fÑZ_ðŽëôÔ?ðÿÂøGu¿újø ÿá@´V—ü#ºßýµüð£þÝoþ€Ú‡þ¿øPm¥ÿî·ÿ@mCÿ_ü(ÿ„w[ÿ 6¡ÿ€¯þ›EiÂ;­ÿÐPÿÀWÿ ?áÖÿè ¨à+ÿ…fÑZ_ðŽëôÔ?ðÿÂøGu¿újø ÿá@´V—ü#ºßýµüð£þÝoþ€Ú‡þ¿øPm¥ÿî·ÿ@mCÿ_ü(ÿ„w[ÿ 6¡ÿ€¯þè äûíüëØ¬ÿÔ¥yÃÛyí-0É Êçtr)VädjõÛ?õ#éT#Ëþ2ÈÛþ¾×ÿ@zó_<[§’27¿#Wª|SÓ®õk;L×2Þ‘†v#ry'¯8ÿ…mâÿúËÿ#ÿâ©0èEáë›[ŸY›m:<$»¼©$}ß»n»Ù¿JÑÒÙáðÄ·AÝ Ìyb‰rÅ$J‘‘Чÿ ÛÅÿô—þþGÿÅQÿ ÛÅÿô—þþGÿÅR°Æø®{—·´†ûOÔ!¸Fr·ò«ÈëÇÊ ¢åAéש®^º¯øVÞ/ÿ ,¿÷ò?þ*øVÞ/ÿ ,¿÷ò?þ*„†ÙGÃn.&ºÑä`Q‹ËLœ0;£?÷ÐÛÿ­›Y/éÚTL-: %z4ž[™ýôHúU?á[x¿þ€²ÿßÈÿøª?á[x¿þ€²ÿßÈÿøª¸–†®‡)·ðö.Ÿc{x Èo¢µ™]·&RŒJíÆ9ïQi–‹ag®ÎªSNdгdíò}p'ýñYÿð­¼_ÿ@YïäüUð­¼_ÿ@YïäüUWý_äo@4¿±hªêæÑ]äe䑳ÿ ®zº¯øVÞ/ÿ ,¿÷ò?þ*øVÞ/ÿ ,¿÷ò?þ*„€ŽÆâÞÛÀò5ÅŒWŠu Hî +®Q­Ë9-f¸Ó$ŽÔC1ÑßìpÃ.Iç7Üi7|ØÝŒçÛµcÿ¶ñýeÿ¿‘ÿñT¶ñýeÿ¿‘ÿñTûÿ], OëÎæŒ’Ow{o5…ݽñÒ$Oô·Všàî ®N3Vá]H.”³«Â:tÔ7BLy#ä9>Ïœc¾qXð­¼_ÿ@YïäüU[¾ð//͹—Caä@.ÙeT`gæëR֟ןù‚zÿ^_äqG¯WUÿ ÛÅÿô—þþGÿÅQÿ ÛÅÿô—þþGÿÅS•¢º¯øVÞ/ÿ ,¿÷ò?þ*øVÞ/ÿ ,¿÷ò?þ*€9Z+ªÿ…mâÿúËÿ#ÿâ¨ÿ…mâÿúËÿ#ÿ⨕¢º¯øVÞ/ÿ ,¿÷ò?þ*øVÞ/ÿ ,¿÷ò?þ*€9Z+ªÿ…mâÿúËÿ#ÿâ¨ÿ…mâÿúËÿ#ÿ⨕¢º¯øVÞ/ÿ ,¿÷ò?þ*øVÞ/ÿ ,¿÷ò?þ*€9Z+ªÿ…mâÿúËÿ#ÿâ¨ÿ…mâÿúËÿ#ÿ⨕¢º¯øVÞ/ÿ ,¿÷ò?þ*øVÞ/ÿ ,¿÷ò?þ*€9Z+ªÿ…mâÿúËÿ#ÿâ¨ÿ…mâÿúËÿ#ÿ⨕¢º¯øVÞ/ÿ ,¿÷ò?þ*øVÞ/ÿ ,¿÷ò?þ*€9Z+ªÿ…mâÿúËÿ#ÿâ¨ÿ…mâÿúËÿ#ÿ⨕¢º¯øVÞ/ÿ ,¿÷ò?þ*øVÞ/ÿ ,¿÷ò?þ*€9Z+ªÿ…mâÿúËÿ#ÿâ¨ÿ…mâÿúËÿ#ÿ⨕¢º¯øVÞ/ÿ ,¿÷ò?þ*øVÞ/ÿ ,¿÷ò?þ*€9Z+ªÿ…mâÿúËÿ#ÿâ¨ÿ…mâÿúËÿ#ÿ⨕¢º¯øVÞ/ÿ ,¿÷ò?þ*øVÞ/ÿ ,¿÷ò?þ*€9Z+ªÿ…mâÿúËÿ#ÿâ¨ÿ…mâÿúËÿ#ÿ⨕¢º¯øVÞ/ÿ ,¿÷ò?þ*øVÞ/ÿ ,¿÷ò?þ*€9Z+ªÿ…mâÿúËÿ#ÿâ¨ÿ…mâÿúËÿ#ÿ⨕¢º¯øVÞ/ÿ ,¿÷ò?þ*øVÞ/ÿ ,¿÷ò?þ*€9Z+ªÿ…mâÿúËÿ#ÿâ¨ÿ…mâÿúËÿ#ÿ⨕¢º¯øVÞ/ÿ ,¿÷ò?þ*øVÞ/ÿ ,¿÷ò?þ*€9Z+ªÿ…mâÿúËÿ#ÿâ¨ÿ…mâÿúËÿ#ÿ⨕¢º¯øVÞ/ÿ ,¿÷ò?þ*øVÞ/ÿ ,¿÷ò?þ*€9Z+ªÿ…mâÿúËÿ#ÿâ¨ÿ…mâÿúËÿ#ÿ⨕¢º¯øVÞ/ÿ ,¿÷ò?þ*øVÞ/ÿ ,¿÷ò?þ*€0tù Xÿ×Äú¯ªôßø÷_¥|ïià/Ø_ÛÜÝiO0ʲHÆTùTIûÕôF›ÿëô¦„]¢Š)ÿp×â¯õO]ìÿp×â¯õO@Þº†ÏÀš4×Á ÙE¹äpª8îM[ÔüCc¦éx׶͘šHΫç`g {çÛ5ƒ¦Ú\Màï ÜAmö¯²E¯o¸ãË+‘» y#¥?V°Ô'kéâÒo·Ø uO2 Öì7prØÁÜÊOJž…-ÍÅ×íÎ¥k§þøÜÜGæp§b|»°[¦qØSõmnßF·Y®L͹‚ªÄ…‰ä õ8ªòØÜ6¥¢Ê#Ê[$‚VÜ>RPõçÒ›«Ã{©ø~ê´1Ü3íHÌŠw(q†Îp2qTírc¶¦•åÛÚÛ‰Wa%Ñq$¾Xù˜§¿<çŠlZ­”÷oi ý¼—)ð¤Ê]q×*Ecx–é¶EbÑ2Ü[x&V©`¯ÊIéÍeXÚ]ê.±EdbK}Râc|]:opU@;²sŽF1Kúü‡ý~g]©esu%¬öòÜG÷âIƒ:ý@9ÝKRþÍ·IZ)çg‘bHá+¹™ŽÞ ~µÄi—‘-°·³I›JÓ¦I ¼Èë+å1‚¤X©?0“ÅuúÄBçOE—K’û,Ê¥N:‚̽>´?ëï-æµ%•‚ÝͦßmÚÍ")Œ´@woŸ‘4\x‚ÒÚ[‰Þõ”Dn…@?_jÈ{Óá¸tûí!õ99§CäòvÌA$á“Å]¸ÓïŸLÑ¡sçÜ[O Ï&î»GÌÜõçñ¦·ù¡tù3XßÛ‚WíqnyDyƒ;ñ½zûU5ã=ÍÅ·Ø/£¹Š/4Bû3"çiÈþ"+6].ûþ±¬¥¢´JÂ'xË.Ò<î¸Ü3·vçéRé–wÛójK:lRBVd.„Ï&àCa  òy;©!²Ý·ˆå¯#]3PY­v‰bÜ€r3ŽNHàŠµ¦ê±êv¯JIK0S!fa´×îþµ¡ø~î”Yínm#û+Es ºÿXåƒÖÌkÇoQÅMªiWiww¶›%ìW:zÚ¤²Î§c|—.ÛˆùÈñGoë¸wþ»÷^"¶Óç)},PÄn /ž¸Rcß—Î6zcžÞµ¤nâ"n Ž"ùÇÎqž=xñ\ŸöF¥gr.Vٮ̱ÊdPÒ¨·’73»<:V¾± Ü˦Þ[Ú´²ZÜ žÜ:† £)“·#w®8¦"ìúÎjŠ÷•¬JÌÈ­$ê °8 dõƒO—T´†x ’úža˜£i€i>ƒ9?…sºn‘yö›Yn¬ö&/LˆìŒWÍ”2ƒ‚Aã=3Uì´½VÈig³.VÞnݤ‰¡d\äÛ†N ñëK ÎuËH¬­§¾½´µ7 C])RÙn7}ELukz,Ž¡n.H<åÞxÏÝÎkÏïÒMMkK¨#–îëHKXâGæFãp )9`K»žEth×’%ó `d{ëY¢;—;PDõãZŸ_븙Ñ.£j÷f·µÒ ͔ԮsTÆ¿m.·™mq îÉ#Jc˜1ˆ®Þ¹ïéXV¼‹U"çí»c¹žx§FƒÊù÷uãÍÎäqשt]6úÞûJI´ß³¥…¬<áЬ¤íÁ\Üí':Ò^`Í×Ö ¶k“{umm2Är£$¨<çO==9¦Oâ:ÚæÒo"U»Fxf2¨°T`6y'pÆ=ë.M&ñõÃp`©,û‹/Üû3Œÿ{Œu¨-4ÝCM½µ¸M=¦Ž9nÐň $’†FäŒyéBéýtt«¨Ú½ãY­ä-t£sB%Àõ+œÓbÕl®.d¶†þÞIãÉ’$™K&:ä‘\½†y¨EÏÛvÇq<ñN•óîÆxós†Æ9uÆ+&Æ7ÕâH³Ž$’×KžÙî!™6v(Ê’FpOÌëÅêw‰¬iòZÉtš•³[Äq$¢u(‡ÐœàUˆ.£º'·e‰ÆVHßr°ö#­rhw’YNímz.^KUd¸{}¥#1+å0zòx®žÎéî'¼ˆÛ˜’Þ_-ŸõŸ($Ž98ïÒ˜ˆôínßT¸»†ØÍþŒÊ¬Î…CdgåÏ$qÖ£ƒ_¶“V»Óe¸†ˆeXã¦åÊ+d/_âÇ~”YZO¹ª\ºb)ü¯-²>mªAãµbßéW÷º¼zvRòêRôºUS'ÝTãŽýi-ÆÎ‘ukšxWP·2À ™˺0:–ãñ¤ƒV±¹¶’æßP·–þü±Ì¬«õ àW!¤ëÚ…ÍÃOo30‚î$; Xˆq„ Ÿž3»½^Ô´;É®nd‚Ù 6‡Ë,™¢‘™þ

kx`·hmìÞëÌf$‚q–(ƒå~¸¡yÿ[ÿÀßOëcoMÖQ{ˆ¼‹‹y­Ø,‘M·###•$=é$ÖíãÖ¢Ò³+\¼m!*2¨b}OaYzM­Ý„××6úAµ·â d%Aƒœ<Ÿ)*8#€yÛêj8tMV×_µºûM½Ä"Iå•ŹWùÀÀ$ÈsÀ8 @kqoo^Íío-fùª· ôÎ20O~Çž”ÉüEm×çŠeb@ Jì¡€^}$ã5SBK漞ëRÓna¼™~i]âhÑAùcM®N9ÎHäç=…S—D¿ƒÄ޹inDŠ"œm¸‹b_ö[+Áã§ÙÅ=?¯_òõøÕ®£Ö¡±º°X£¸ó<‰Vpìvs–\| sïŠ}Ö¯…ÝÀº¸E†(£r«³‚ìTtÎr@š«eeªÅ­\Þ]Ag/šÌ©7Ú_tq „òð;ór~€V6£©y%ìÂÌ›…[8Ž#qH“–m¹(6).ƒ}NŒx‡K6fëí'`“Ê*bq&ÿîìÆì÷Æ*Ýõ¾£j.m\¼D•Ë!R8 †‚ï\½îŸ¨ZMý·2Ä׿jY¼ ,±í”Á*…³‚Ní¾‚®øsûR( K‹EŠ)Úââlƒ”f—(£8ê <ŒñÚš.ZâMz]: {fHB4%ÉWÃdü¨çzŠdZÜâ#¤Éov³††ã{ Á‘6™ÏšRÒ¯5NÝü‹á†t•nƒ>¨p3ÈÎ=¬5½nÖêé,â†Ñ£h]šI ¨ 9Ét‡AÁùÁªºeÖ’·76DY4øà·· Ïó¡sŒœ¿0ç9ëÒQzš­ûišt·Kk-Ë"’#¿¦Çö&¸a6õ>Sì À]øÛ’ã=éÉ®iÒjÅ.3>â˜ØÛK’¡ñ´°ô5—ÿåÂZÝÁ±‘%Õ´±–';bƒž:ü‡ó‰¡êI­ÚÆÚíïÔ·šä–`…qËuÏ t£Oëä-lt3{w”C$ÅFDq ³{ ÆOÉ6—§\Eb>Ó!Ž8d›j©‰ÜàÊzZº{ÝK§[É{GtÑ©•¢±ɬ”ÑîbðÔ:kZé÷r«Ëu“Ëœm9##Ž>´=†]x ÑR[kp¡ž9R{¡¤‚ªväqÓ5´nãŽÃí“æÄ~c‡à ÆNk=÷MÐbÒ´ø¬n£‰šà”˜äª¤’~^;sSâ]6.[¢¶°EI¢#ÍgCÎàÀ®Þ×½À,õ»ÝGLk›M/÷Ëpñy3Nh_âcƒƒìëRÇ® |0úÈ·#d)„·uÎFïL޵˜t^ .âÖŹ7,¾t¾Qh%C$|ÆxõÆ+VâÆâïÃWki¤·xR8¤-d¼í;PöÓúÐúÿZ•Lj¼Û;ÛÛ{_6ÒÒݤi|Ì ”^9ÇBÝó‰4ífâçPû å”vó5¸¸Cþj•Î9Ê©ŸOÆ©Â;um§ÞiÖ2¶WVŽžK±Ä2•ÆSºs’;GZ­i¢jAšúÒÃOµ–;F-¬Ù™n$ãi•~O4ô¿õæ%{/ë·ü¡ÕoÛLÓ¥º[YnY‘xÉã<“Àõöå”v¶ó]J-ÌÖÿh#h·8Á#=:ûU›È$ºÓ'·D²ÂÉ“Ð1ùV&£áë­FÃN´i¡l¢WVq3¨z¸9ÏsK¿õÜ}¿®Å÷Ö±­ZX-œÞ]Ê3 ‡ùTaw`É>½1SêÅ––ñ%Ô’”1UŽ¸Éƒ€295¶77†—w!‰M²¿œªÄòÊËÇ#>¸ªš¼z—ü$tÚ}¼R”·Y§fT\˜ñ– yã§|`E›ÍSsé‰a*8¼“w˜>aå(ÜÄ~ƒþPè…w ™±·~~Ë/)ýáòò¿ít÷ªÚ“5¥ã¤ÁŠÙÛ-´NTª»1ß#.{d¨ÿ€š[_ÝCmeÉ0i’Y¾ ÁvÛ‚8éòŸð¡éýzÿÀûÁký_Ò4/ÕÈL¾Wƒ¼7pßê­g¶’Sè¹ÛŸÀk°mÅBÁ#84º\}LÖ×lƽ޾cܺ3Uùë‚),µûCU¸ÓíZI$7¼›p‡’0|ÛzÀµÑu?_ÑÃÏoqyï,éjà’Ø,\ï#svéÓ¡­”‚QãIî Oä=I´í,$cŒôÎ;S]>b{2[sûB飇M½¬¹a(H?Ç»éZµÇÙ©M~Ô麭´Iõ.VE‡ãvì—Þº]3P‹UÓa¾…$H¦”Hlg‰¥Ð}E¿½û AksrÌÁDv鹉üH{’+9|QdÖàAu曃j-<±çy£¸Î:sœãêojZv›æY[Ë4ò8Lp´¾^z¹UçÀ¬ai§ 6DÖh.|á:Ù¸¸iˆ9}¬¼ƒ’Ç f¼zúÜZ<ÖúuôÒÅ/“5²ª "lgæÜÀcäÔU8üT&ζÃl·‚Òá§Ú 1ൈ#qóÆ}ª®Ÿoªišµ©IÌ·÷LÒê´¼(TÜž3€8§k §ø.×I‹™¤’SÕ¤.¥›ëÃ1¦·û…Óï:º(¢ÂŠ( Š(  »Í~ÆËSµÓ¤{›‡5ÈL‚AcÐt>þÔ^kö6Z®œí#ÜÜ8@±®Bd ƒ¡÷ö¨uø&šãF1Dî#Ôܪ“µv?'Ðr9£_‚i®4cNâ=AÊ©;Wcò}#šk§¯ù õôÿ2MK_‹K˜‹‹ß³©P÷K1&xç=ûZÕÉx³ý8k{MRKøJµ¿—v|‚ ç÷d×<ŽÕÖ&í‹¿±Î:f’Øoqh¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+?ZÖmt?í·›üê‡`É8ÏÓ½hV‰-d¼T+ËÛãi@RÀ I>ƒ¥Pu]vÇH†ÖK‡fS$1À%‹wëÐw5fMNÂų–úÙ.ŸaiT;g¦9®2÷ú”:Ué™MÇØÑaÓR0]¼± |?‹Wè¾ôž']NöæöÝ¡½eˆÚ%½ˆt‘ARY¤ÚJww\bšÕ¡jvwz¦Ÿ`è——ÖÖÌÿtM2¡o¦O4Ùu}2 •¶—Q´ŽwÆØžu sÓ9®CÄØÿÂL÷š}ÄÆîßýå 2* K¹†Éçiï¥Éq§ø½‹ÈÒÙÅä%ØCüQß·ÍO˜qœc<úfºm~)&ðî¥HÒHö²*¢Œ–%Nê_Ãëb—ÅbÌw¶ò Þ¢=ÂoŠ7`†2p;ã<â©Ùkö:†«q§Ú´’Ioy6á$`ø#·ôÛcGIŠk ^ãÈÂÏä‚ ÂŒ†cÊç§¾*8à˜xÖyÌOä=I´í-æ1ÆzgªÚ÷­êBo–þ† ò5êõÕô®æÏýHúWŸò5_ÿ×Aÿ Šî,ÿÔ¥!œî®3âMú^gÿ!IWþ{Éc QmkyÉ,î~P=0'ê*¶¨3â ú]gÿz,ÿÑø­ P“QÒÖK…U¹ÚÂô!*qìqŸÆ°m<>¶m®Í”ºnŸbï*Å-á3FUE'×éZ~RÚd÷„··rÜÆ÷¾Sø€ãM_×Þ'ý_q»ERQEQEŒÁ±€3ÀÉü«#K×_T}EOš´eUIˆW“+¸dãøã¥lV-­Ýž©®ÝýœºÎñ¼ G™¶0ëÇ#ÐPøŠhîo-õ-?ìÒ[Zý¨ù3 Nxè0ÜtýiÚ^¿=íì×V oö›ss$âPP÷¸OÌ=G½fA¤êOua§ Mi"yQ¼éÉʹT$ sÏSž”x{E¸°Õ š)ôÈØÅrádóÛ#iŒÇ'ÏJkÏúßþŸ—õ·ü°¢Š) (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠÆ_Ãÿ SèO +D‰6îŽILcƒž¾¾”–>#‚û[Ôtô…‚Y c6r$9!€ìF>¹ªzííþ±pŒ-§i –ÆrAÃ"`’8åÏcQÿ`j|̺Y F”Ð%Ã0æ}û²G\’IÎ(þ¿ ÿÀrË\Óµ™`ƒÂ¡äYbx™T÷ÀqÇ^•)Ñ®]–+²vÆÒîh]U‘~ó+Ãíšç`Ð5 ™u<–‹>˜ÖÆ[ÛÁ9ó ÎA p¿—Ò¡žKÝOPµ°:x†x´«˜Â¤ñº±*Š1´ð28ÝŠõøÿ/ëðÿ3¥_é·v·FÊéDÑ[´àO ˆ6÷°@,¿îæ©^x’ê=GO²¡ke¸’o²Í0lœaU9QÔ彪-CEÔ'ƒOX­òÑiSÛÉó¨Ã² Uëê=*ÝÛëV×ö$Òã·fÜ$ ’:þ½*¬¯ýyÿÀ&ï—úòÿ‚Mˆm`³iﮡ9¹’ÄHKb6…ÁbÃàcð©®|C¦ÙÁ ÷Ì‘J›ÕþÍ!}[ òÿÀ±X6úF«§]Á¨¥Ú+›½ÖâU RWʺ’qžŽ õž·©´§ìWÍo5žÈííïR/*S»>gÌŽW¹*:"–ÿ×sbAo¯¦$r4r[¬É,Q¼™,Ä`íާŠ|ZäZ^]_][ˆ ºxFŽ1ƒ€¸#,ßîð{VlZž™©ØÝG`×Htèí%ÊŠbe9ÉÜFG'¦zT'EÔ£‰®#¶Y&ƒW’õ iy±G 89ôª²þ½ÈZÚÿÖßæn/ˆt·Óf¿X·¶ÊLl#p<Ž1Þ¥Óµ‹TÊ,æfxˆóãhÙsÓ*Àkœ»ÑõMBÓYºk?"{ç·Ú™°XØe˜ƒ·'žý­¨¬®Å—7¦<[=”qÈåñ#zGõø@mw#‡IS…‘¾Ñ Ú¤¨ :·^¼­LúÕ±³¸¸µIî̘8#%¼ÀpG8üú{ÔW¶Wø—J»HóN²>GÊX.8êz»k-ÌñÏö›O³•‘’1æÞƒ£qÓ>©=‡ÔÊ:ö¿ƒÅÿ“äùð–ò÷nÛ׌ñšßÓãÝ~•ÍYÙOaàhm.£ò犮¹'¸âº]7þ=×éT÷ÐKbíQH§û†¸/ªzïgû†¸/ªzÙÓ"’ ÚÚ½¢Mnöá3Œ0#‘ŠÑCu*-ª…PhàVm²Ft«’8ä g+AÓ>„އ‚FFpܬ¾5PHmÍ·ç9s»=¿ÛoûèúšC;ß2óþ}—þþŠ<ËÏùö_ûú+ˆÿ„¹d [H³;³œŒç;³Û¾öÿ¾©¡¼Z¬Ní"ÌîÎ쎠îÏoöÛþú>¦€;r÷l6¨Aàƒ"ÓbÄ‘Eeq  ¨® (ÄÉâõÚÅ´‹6Îs‘×;³Ûý¶ÿ¾©ªéã‘;º̃œ“Îs»=»ïoûèúšô2óþ}—þþŠ<ËÏùö_ûú+†0YU‹hög9ÎFsÙíþÛßGÔÒ¿‹'~‘fwgvG\îÏnûÛþú>¦€;2óþ}—þþŠŠXešxf’Æ6’Lld)#¸Ãâàá‰ÑìÛ9ÎG\îÏoöÛþú>¦ƒâõ`Ûô‹2[9ÈÎs»=¿Ûoûèúšî<ËÏùö_ûú(ó/?çÙïè®O©»G´lç9{;³Ûý¶ÿ¾©ª³xûk8} ͳœäõÎìöÿm¿ï£êhÑ|ËÏùö_ûú(ó/?çÙïè® ?%ÄeÛF´ù³¸œçv{¶ß÷Ñõ5/ü%ë!;´‹C¸åsœîÏoöÛþú>¦€;2óþ}—þþŠ<ËÏùö_ûú+‡>0W,H´%³œŽ¹Ýžßí·ýô}M<ø±6í*ÌîÎr¹Îwg·ûmÿ}S@¯™yÿ>ËÿEeçüû/ýýÃIã$ƒ£Ù¶ìç#®wg·ûmÿ}SO>-[v‘fsœäuÎìöÿm¿ï£êh¶ó/?çÙïè£Ì¼ÿŸeÿ¿¢¸‰¦¤OÃ8bt›2NrÎs»=¿Ûoûèúšï|ËÏùö_ûú(ó/?çÙïè¯8—â †‡ûÍÉ$O\îÏnûÛþú>¦´¿á,I/¥Y’ÙÜ ç9ÝŸý ¿ï£êhµó/?çÙïè£Ì¼ÿŸeÿ¿¢¸fñŠ1mÚE›g9ÈÎs»=¿ÛoûèúšükV-£Ú6AÎG\îÏoöÛþú>¦€;ß2óþ}—þþŠ<ËÏùö_ûú+Í¥øY è¶ÉÎ{çv{¶ß÷Ñõ5“'ÅøÌÍü#–oœä™:çv‡ý¶ÿ¾© _ó/?çÙïè£Ì¼ÿŸeÿ¿¢¼º/‰Ér¤ŸÚe³¸Îs»?ÃþÛßGÔÓ›âNòÃþëGÎs–ëÙþöÛþú>¦€=?̼ÿŸeÿ¿¢2óþ}—þþŠóeø„f8oÚÙÝ–Îs»?ÃþÛßGÔÕ±ãC*’Ú%™-œƒÎs»=¿Ûoûèúšï¼ËÏùö_ûú(ó/?çÙïè® øÑ¶ýÌî'9Îwg·ûmÿ}SWSıλ¿³,Ûvwe3œîÏþ†ß÷Ñõ4×ù—Ÿóì¿÷ôQæ^ϲÿßÑ\ÃkJÀîÓ¬Ûvs˜úçvô6ÿ¾©¥:ʾíÚu™È9Êg9ÝŸý ¿ï£êh¦ó/?çÙïè£Ì¼ÿŸeÿ¿¢¹¶ÕûO³%³œÇ×;³ùïoûèúš_íe“;¬,ÎìîÌyë»?úßGÔÐGæ^ϲÿßÑG™yÿ>ËÿEsçRG5•›'wîÏþ†ß÷Ñõ4I_vë3œç1uÎìÿèmÿ}S@™yÿ>ËÿEeçüû/ýý‚×á•‹XÙÙÎbëÙü÷·ýô}MFúª’Á¬,Élç1g9ÝŸý ¿ï£êh¢ó/?çÙïè£Ì¼ÿŸeÿ¿¢¹‰u  oÓ¬È9ÉÙœçv=íÿ}SJu¤pÛ¬,Ûvs˜óœîÏþ†ß÷Ñõ4Óy—Ÿóì¿÷ôQæ^ϲÿßÑ\ÈÖ’]Û¬,Îìç1ç9ÝŸý ¿ï£êjfÔÑÃcfÛ³œÅ×;³ùïoûèúš½y¡Ã¨\›‹­<ÊÇSvÛ2¶ŸÄV–û±ÿ.«ÿs²jƒÖl9Ì}s»?úßGÔÒ6¬¬¶Ÿfwg99Îìÿèmÿ}S@™yÿ>ËÿEeçüû/ýýζ¨¯»6mœç1õÎìþ{Ûþú>¦™ý®²-§Ùœç99Îìÿèmÿ}S@/™yÿ>ËÿEeçüû/ýýÌK­¦vŸfÛ³œÇ×;³ÿ¡·ýô}M#kˆû³§Y¶ìç1õÎìÿèmÿ}S@G™yÿ>ËÿEeçüû/ýý˶¹gvŸfwœÇœçvô6ÿ¾©¨¦ñcvtÛGÝœå:çvô6ÿ¾© ·Ì¼ÿŸeÿ¿¢2óþ}—þþŠãÛÄ›ƒ¤Ú6ìç)×;³ÿ¡·ýô}M)ñ}Û´›29Êç9ÝŸý ¿ï£êh¯ó/?çÙïè ËvM¨ü$¸çñ);³¤Y¶ìç+×;³Ûý¶ÿ¾©­-#QþÓÉ-µ´-ð”h×iË9ÎNáÏÌß]džΠ¹¤Ô_RãMÊ.KdPLÿÂOxHÁ.¹Ÿ(®âÏýHúWÿ3Eßûãù í¬ÿÔ¥Y™…©†:Þ³„ù\ôÎÖ­# Ó:¹6Å—;Xƒ‘ŸN*•ðιcí0þF¥Õ®æµò|©6nÎxÓÖË;o祿þ=þm½ÿž–ÿø÷øVZj-ÿ-Ïýò¿áH÷÷jØóÎ?Ý_ð  ]—¿óÒßÿÿ 6ÞÿÏKü{ü+ê—™#ÏÇÕøRNï#÷Çþù_ð  ·¿óÒßÿÿ 6ÞÿÏKü{ü+µKÕ?ë»ÿu†ÕoGI¿ñÕÿ ÚhïJ³Û#yý)V;ÅPªöÀ€<~•Ïfûv Àý…Û7ÙÿZ?ï‘þÐm½ÿž–ÿø÷øQ¶÷þz[ÿãßá\óë—j3çûä…W>$½â@à€:·¿óÒßÿÿ 6ÞÿÏKü{ü+“>$ÔqòºŸø ø—Rù×þøÖm½ÿž–ÿø÷øQ¶÷þz[ÿãßá\ˆñ.¨GÞOûàSÄÚ¸ècÿ¾v;o祿þ=þm½ÿž–ÿø÷øW|I¬õ ?ë?þ-\d‹ðŒP]¶÷þz[ÿãßáFÛßùéoÿ…r'Äš˜ëcÿ¾Äš¡þ4Ïû‚€:í·¿óÒßÿÿ 6ÞÿÏKü{ü+’>$Ô€æDðTçñ~­;#õŒPs¶÷þz[ÿãßáFÛßùéoÿ…p'ÆzÀvè3ÿ\ê¯ü'ºÏ›³u¿ýúÿëФm½ÿž–ÿø÷øQ¶÷þz[ÿãßá^ÿ ¦µ‚wAÿ~¿úõRãÇÚì?wìÇëÿ^€=/mïüô·ÿǿ·¿óÒßÿÿ ò9~'x†3÷m?ïÑÿ‰þ)øŒ±lŽé‘ÿö·¿óÒßÿÿ 6ÞÿÏKü{ü+Ǔ⧈N7¥Ÿáÿ™~(ëdà‹`?ë—ÿ^€=omïüô·ÿǿ·¿óÒßÿÿ ó8>!ë¦I·þ¹ÿõê«üJ×EÏ–ŸeÛܘøÐ«m½ÿž–ÿø÷øQ¶÷þz[ÿãßá^a/Ä.6‹Rïÿ^ˆþ x…ŽZ¤GühÓöÞÿÏKü{ü(Û{ÿ=-ÿñïð¯-ˆž I6â×õÈÿLÿuÅÚ@· õýßÿ^€=3mïüô·ÿǿ·¿óÒßÿÿ óˆü«7_'þýÔËã½Hÿ_÷î€=mïüô·ÿǿ·¿óÒßÿÿ óÙ?@ß|A´”‡ëÿõm·¿óÒßÿÿ 6ÞÿÏKü{ü+Ǜ⟈TE˜ÿ¶GüjH>)ëŒq/ÙÒ#þ4ë»o祿þ=þm½ÿž–ÿø÷øWœ[øÿTž=Ûàÿ¾)'øªÄ¤‰-Éôòÿúôèï܈ÈílÊÃH$ùUk=)týßbµÓ­·ýï&›¾¸ç6¿|Crø)l=|¯þ½h7ut,ðnôРm½ÿž–ÿø÷øQ¶÷þz[ÿãßá^u™:´ÿ®t÷ñž­W‡þýÐ{¶÷þz[ÿãßáFÛßùéoÿ…ymïÄíFÐqÛˬGøÃâ-ß»ŽËñÿ:öÝ·¿óÒßÿÿ 6ÞÿÏKü{ü+ÄGÅ?ë‰ÿâªÌ_|Häe,†}"?üU{.Ûßùéoÿ…o祿þ=þå)ñ#Ä, ?dÿ¿Güj9>&øZûdÆ€=kmïüô·ÿǿ·¿óÒßÿÿ òx¾&kÌß?ÙöˆÿiÛøëUº!±+ëÏëS9rÅÉô*œæ ºèw:˜ºþϘJb)·øsZÚoü{¯Ò²e•çðäRÈw<#1Æ2H­m7þ=×éUuqIr»2íQL’)þá® Å_êž»Ùþá® Å_Ꞁ6íÛþ%V«»­”§ºò½³ïèzõÁòy¾ú“Ú½bÝ¿âUj»ºÙJq»¯+Û>þ‡¯Qœ(¹R¸úÒCdË/!GSR»àóÅR·bϜ՗ÉR)ˆ¯s1Û´u4ÛXŠ®{Ô«n0Y¹4ÙŽÀhXÏP9©’¤ž*(c`„ûSØ14@å²§­9'­2$IêI§¯ÌÙÏ äZ§(ˆ«ò•PGz¦È7b¼â€È€¬2jøy76úBÇŽµ±ÆLСÚ@íVà+Ç^Ù~\œg¤±íƒÔ4’/–yíÚ© zqVãù¢ Ò©OÜÍgßK´•­Kj›àÁïT/݄ʧ­lØÇû€q@—VˆAÏZüìŽñ÷O#Ñß1ŠA…ïÖ²uQæZ’GNx  :z ‰ZVŠÙgùvŽ•™¢¯ÈÜu8Åk´'±@‚q×5Ÿu7–XÅ\‘„)“Ú°ïo–ï@ØŽž2k׿¯jòyß.RÎ"„`}èªÓ"Uƒ=XŽnZé¿&æϨ¬ýܲo~×A,ê! „P)jŠŠrÁÇéLŠvY6¿CW¾] ŠÌœì¹õ£¥¿Í´þU•¨¸I”w«zS™%êrô©#Ôq‚g§­J¤u(X`þµ9TŽýzÐ0Ã=MLvã¹ TàsÖ¤2:úu¥Ø>ñ"Œq‚~”üä{u¨Xa¸t©Ëm]ǵ]¤ðy …ßË‘ô¨e´;~R=*Êʃ9éC¶Tcïï@RÎLå[4²NÑ|¬æ®ÆÄ’*½ìlø _ZcMòx¢9X|Ýê£ÛIá¿Z|r0àŒ»» @5 É‚I94×{™…fy’M! p=¨Ô×£“NŽe\㤵µ C±šÐ …ÂtÍTK q“ïD¶è»WÕøãéšY¡Î(Ÿ” ô¦¼8«€ŒãšäF3@¡S[ž;ûæÛûèwcøÏGóüC.×bGLÖ—†jßÛ}ÎqÕϸþèyêÿ?Èë¡ü¾‹óCæh»ÿx!]­Ÿú‘ô®+þf{¿÷‡òÚÙÿ©Jè9 {ßù Ù×aü3Ä™VÝWý£ü©÷¿ò²ÿ®Ãù~®B¼ú7ô¤3 hW'ë@ºÜDZµxᓞEeMnÍ#2äS)›-õ©„ŠÈ¬äóŽàHõ« á”m'ñ  e•w.j)e¸Nêà¡ ÎM2šc–4 vg;©V]¹àw«°A0*B¥›¥R6@ ±ëMŠÊäV›ÄÛP X³ÆO¡4OÊSqU¥‹oAZ¥Ôä=ñUg`Ãs@c\šIWhþUb!†óå8#Ú€,ÛÃ"¯\ d ›‚3Îi†îHR?KIÖ9Iœ@Û@FI¤ [iâ•0¤Ó“ä›4^òÜ"îÏZt*$ˆ)4ýJQ¾Õ„„Œþ< -4ß§Õ¸‰0XqVVÞ5Œý(N,€Œñ\ž¶Îá˜d–äWoy€ø ÍsúÕºˆ1e <>Í-¸‘ÁÉ®Œcebép{5Žjô³œ§4jº³„(î+&ÝÄNçŸZv­o-áQÉ«š}“A§°aÉ ||—dþU¡k0Ëèj¬ñì¸5˜£74~ô…“r¨*zÖ=ÎØ¤\p§šÖ„±üÖ¤¬g!AÀ  iÔRx5«öXÞ"ë€G5ÆÇté ZÜ‹R}›3Áï@Ôå[“IÚ.TŒ°¦GŸ¼z‚ET@»Ec‘×ëYwHO¥hÇ ²œã ž¦¬µ¨› ŒãÚ€)i÷W0§ f¶-Í“t„âŸo¦*€O®"$hp(hþEÊ®=1S¥rÕŸ5ÜP ´œÖ5î¸~ê1ÛŠè來˜–é\¼ŠBLŠÂ¸Ôeœ²†Ý*æ…3>­ÉÁÝÿ š«<‹+ u5E¶1jp7o›ÿA5•áKÑ›áUùžÝÿ2µ¿ý{Gÿ ŠÙÓãÝ~•ÿ2µ¿ý{Gÿ ŠÙÓãÝ~•TþE_ú²íQVfE?Ü5Áx«ýS×{?Ü5Áx«ýSÐÝ»ĪÕwu²”ãw^W¶}ý^£8>Mvw6¯Y·oø•Z®î¶RœnëÊöÏ¿¡ëÔgÉq¹·~tØ–‡æ8*ÙÉâ¨Âå'ÛØÖ–ÒSLCp1ÜU_sÒ´œ*¼Ñè(hdFŒ`ô òªTŒnÜž*9]îÚ€,›µ yâ¬ZJ²dƒÅV6 BsŒâ£±-Æ<f€5ZÜd³r}*µâ…·<œ{Õ©$>Y=ê)›€2´Õù·qô­ èAÀöªðĨ‡Ó4ùfUP?”w0ç§Z’IAæªIàu'š&‚s@<­$¸?Z¿g§´Šé±B‰*åA5«Â"Ž™ ¤K (–NM2W/ íH‹ô4d-†'š“Ê$f¦H™Ü+B;UäãŠËKvÛ“ÓëP? Ž«Vâ@ˆTȬã 2(ö±ä®涘 c ªvð$qgÖ¬¼ƒÉ!IÍWiÖ$'uP g”°ôäVøô«ÑŒ cž•Z49uYSŽLP¾üc1%9 (SÐc€iÅGÍœPgÆì`⣓¦)X4šs´Ö€)íŒÖ—†NÏí›oïàÝã#Ô?Àô5vp@«~m­¨Øýü;±ÿ-¸þèyêÿ?Èë¡ü¾‹óC?æg»ÿx!]­Ÿú‘ô®+þf{¯÷‡òÚÙÿ©Jè9 {ßù Ù×aüß[øô¢÷þCv_õØ#OÕ—t–ÿFþ”†g¨Ú ÔG‚H»U‡<}*¹l£ ☊NÀz¦÷g­Z”sYwnZ`; ’(ÚæM瑚ÓHBà T6±ì‡#<ñV“s@D9çµNš…~QR‚G£Š~ã÷}y5]Ž‘ߊ°GSžµZ”äPlÄŽ‡ŽµU¾RzÕÝħ¦j„6qžhº‚XvŠpRüN $1Šs Žô—s‚àcžÕ$H¤ŒzÔs'qVdqÓ½C4Y\*¬ UŽGµ]–l)»U=èµÀù+\)bO>õ­w'ËŒà×?w/-Œæ€3d^g®kVÕ¶qY5š½ #ô­p²aÜŠà’ëä–ë]ˆ˜Úï­U–ÂdÜÍR´…Rì0ëíWoâÌC½Y†ÑcpBæ@*®(”½€yYÇ"¨ÂÞS.:µµv¹€’+"87) ûPå„\°¢ïNÈÂu5NÝä‚\H«¿oW˜p(¶qËm2ƒŸé[0°‘‰õªwÇååÝKlì¿J—Tb žh±BЬ€ôëUõY³oÓŒRiù‘ùdàém$TdúV’È3ÈÍs¡šÕ5VÒVI•_8ô5Úß$nï‘È®bîfÊ® ’Î(æ¶ Ôm¦),2k/JÔÍ´žSƒ´ž¦º5Ôí•w;)úÐpilß;aV®ù0Û¦@²µÙÄ›Tôì+˜¿ñT³åbbu—š”0ñ½zgÏÞëÇiµÏ©çù™‰õÍe¹  y<ç%Ž=ê Üî”rì Ø5 `•úQ ›Ø jè•9ÍB±†êè´{„–òŸäkœtmüƒZÚ2ê°þ×þ‚k*ÿ—£7Âÿ«ó=ÏþekúöÿA³¦ÿǺý+þekúöÿA³¦ÿǺý*©ü(Š¿õeÚ(¢¬ÌЏk‚ñWú§®ö¸k‚ñWú§  »vÿ‰Uªîëe)Æî¼¯lûú½Fp|©¶¨~ê¶íÿ«UÝÖÊSÝy^Ù÷ô=zŒàø³ÞøcÒ’.^.ÏÞ%[ŠC,*sÚª3¬¶Äö¨mn iƒÒ˜@øpsQMp"'¸@¹ÉÏj¡pÞtêwesÒ€,HÂuSн¶¹ª6êòI¤ÒµÔýÐ:¼æª}˜¤Û³ZÙAŠˆ‚ßË4á´ŠV%cqÁõíDÈæ3ë@yŸ!ÇåP2<‹Žù©à$næ´â¶PÇ8  Ø,™±qWű võx«‚ ƒ°Á©UÑxÇ'­cd•³É©#gîãð«odcŠ­#˜Ò€?½çšÐ·LäžÝj¤(^Q޵§°GÆ{ÐLŠ$^OJ‘' ¹G"©K‡ŸŽƒ­"n`Yþy8äT«8ÏÝÏZO”7Z'¯Jš06ŠÅÖ Ü1É5™ †Õ°NljOºp£¨¬ÛÈC!'¯ozÑ‚u’ ÄóTï óŠÊ¶¿ky¶¾qž•>¡9ò÷/B(i˜G±;ÒÇ– ¿áMÒâ3á˜t­9à¥s·Jd“<Ò2í‹gsÖ¬¼[d$‘Н8(¤ž¸  [°L›œfµtГYî¸V= ®–‘cŽ(ãªÎ,V‘ÆsŽÕ@JP“ºžš¢í%Î1ë@o"[ÄXà3\Ö£¬4òâû¾Ýê;ýFK̤ÙÞ™§Ú!pÎAÁâ€&ÓtÓ!J=+¢Š]ˆQà gÚ£µ ‘‚>•qp†Ðö  3H<°Àà÷­-*ãzàœœVF¤6©`qƒùÓôyNãŠëÕÿv1Öœ ùy959òÆÈ©7~}¨X¼ŽsJ„†çò¦ä°÷éNUÁºšxmØ9Ï׊„üÌ:S“sMœ`ãšp‰ñ»¨©ÑB©àf’0IëÇjqÀÇ4°=þ•“Ú!Á>´Ø—rƒƒ@Ù²ÿ…T¿6§ŽýkBB?/éM’4–2§¥di)—b{ ÚÚ¨,íVÙ䞘«€üŽ>”jX‚¬F…è1R8Î}è¢LGÎAëžµÆ:Ó™Êcë@ à x¦´2qœ b)3Þ±î—ý/€k{ N1ҫϧùÒ«©äPÖð…·QíJSÓô« °€zŠAÅF±³c.vðEH Žâ¢rKrhI'ô¦•Ü>”¬vç4Ä&Näõâ€åáxc‚1P² U»GÊÃ=*Ï+ùâ€#’E;xšìzbšHi@Å+"…?5gÜ€®QSE2ìTwJ¥)ö¨¡h÷IÀª³Ë°žX¹‘aýMd\\oSèh­Ä®ï€p½fÏ “Ù«êÛŽ[ ¤xÔ.O~”•µöã©§­ï–6?­y[[$uªZ…¸ ²Œ¹ ÂIÕ†*ÊÈ…€ŠäVâXóÅhÛj‰œâ€:uÈ<ÖEåÉ2<šoöŠºŒ2j“>é7õ »•|’;žÕ…‰Ÿø@¦Üáäàu§|±ÇÍÅ>ÚØI; g5«I9XÀë[̽¦ÑéUtØCLò7#4H[Is’:UûB[ƒÖ®<*sŽ• ²aØÐ}Qp¨Fj•Š˜ØÇ5sRpY¨cBT0õ  ÈÜHƒØR`àŒU¡aåõÅL‡¦[Š´—,˜Ï"«LÛ‰dÏzq]Áˆn*8(x @“sW‘sp9ô¨Tf]«ÈjìqZ±j˜Uç½7T”¦*X„¨<˜d'Šä/KrxïÖ¡‘Bžõ4ñ¸'ßš¿ýœ^×w¨â€"Ñ’IñšÛ² 2“RèºxŠG4é0³8‘@WMþÃ'­Q1n¼^:VƒÆd»Þ–ñ'ãÐf©¥­„Ñ›¯Ì\\J¤üÇŠô)&²ØG$W©èÒ$ÍÇÒ€9iÛæl‘H¸,¸V„Ö2¤2žj8!D“÷v-ÇÐÐL%'ÐÕi¢Ü lã5¤ü»œU®¥U‰°{q@Ö¢zùc…<Ö½þm—,xÉ Í¹rj5·+o¦€,¥ÓÈNÜŠ‰—Ηk=©"Œ¤Dç¿'  §Û {#©«:,nû˜Ž1Þ®GdLŒšp™ ŒGÁ>Ôø2·Õ°#$õ¬ëEJ¬Fµ_¸# P6­>ЩžI©4wÚù9Ågêr‰.À§Öµ4È]ôÒA0!FýUmdœƒXi8LŒþ54:‚3„Ü   RNA=1Jß'5\K¸ž*Lœ‚(eî3OU Û Ê’$ùI-Î)êWqôé@ ®•ÇoZz’zœæ¡;Xœu© †y=iÊBNÔŠC=é!²q¸t ¥Vf>”ø¸À#8ëOeb;cüûÔ{¶“ÔÐÂÑ…$ŒØ‘K|£ŸZ‹~Ï”°€HÈíé@ Ò¢½J¸p @ø.TÒ¦VÚ}(ÁWqÇ¥!^@ô4™þ/z–<’Ié@T/z<”ð3L,[#¥A(ù ᣰê?6ßßÀ3»òÐñÔ?Àô1ÊzúÔžm§Q;±ûøwc¬‡Ü>}CÏWøùþG]àÕô_šÿ3=×ûÃù ílÿÔ¥q_ó3ݼ?•v¶êGÒºC÷þCv_õØ#Rjßz÷[úTw¿ò²ÿ®Ãù~®pÐýúRž¨?:V\´¬ ¼S#‚iˆ‚4`Ù8«q”æ ÇrZ7‚p¼Š–F\ã4ÂÁ~´ÇœJ$VTõ*Üí`$PÐÚ3áßÞ‹hüÛœöSVí|‚S¿-¨Û±?ÅÎh® ìJÆ¥Z´‹e·¡êjš¤Ýûfµ#Ú#oNÔSy穱ä}iÌ¿+61LŒä·   ׈K «6‘«E´f¢ºnTMY²$?+@"eã¥#£Ê“[‰n²*îTï§ÄcÀ€9x®^5*ääQo0’è€ßJ·ªiÆß.§ŠÆ°}º‡ã@"&“Öµ-‰òù¬õpI©ùPSŠ¿æ ¬{VÙLçµYûO™ôªÀÇÔP Ú¯ŸŽ:Ö”RfÝS•(/qÈèkNY»m…ƒ§8ª¥<ÉÛœWcLF8"©†Åï<ÐRY¬R©Ï9ªzª"‘Î:Ö¥î|áYZ°;¨ÖŸóB¹=)/á %søT:1/òsÁ­Kø¶íjç¯4¡, ØúWÁpþ€ô¯W ^ÕÌkš*O™p{Я½sÓÛšµ.™<$§NHÛpÅN¿2‚Tª”TP³Jµæ&Ü(ù¨Ý¶É5ªÖ_&åŠÁ†GW£Ö·»”„§­ÞÞ*B>uÏ_¥Wƒ€¥ZÚx=ǽ È cJ€Ã½”ž ñV ã<Šj°Ï^”åŽGëR p?1IêzSL˜)çµ#ãq$ Ð zT[ؾ95:(ÈúPÔãÖ¦VåÅG»jð=éÊÁœ}(p@§68é¾lUyäÚüœ@ÏŒdžjdž[oöÝßÀ3»\ûçø‡Q¿fb±šÛð“oxY°L–àœã«ŸqüÿÐóÕþ$>‘×Cø5}æ…ÿ™žëýáü«µ³ÿR>•Åùî¿ÞÊ»[?õ#é]!{ÿ!»/úì?‘£[m¦þ÷ô¢÷þCv_õØ#M׎>Ïÿþ”†V\¸Ricvi±6à)êϽ1º“žhŽ ‹œ“š{ÏZÝŠqQ»ŽÔ“e‡¬Ê?‹“ך®ò0í@‚ÑéOÜ3ŸÊ›ÍÉéÚ§Rª§½ `MHÎqPùÜœŠ°¤Ð¥~㩪“òۉ㠧Í7˸ Íe^]í„ ß1ô  Œ¢&ûã¯z†æýO5†éu7;Î3Jö“”¶N({¡,ÄîâªÜ͹YsU.bš)03Š©ö³»šÕ±q³ëEÝ„_/Jçíg 1ðkb9ÿtA  Õuºó|µqLR[`ã =*KÈ’tÁ¨¡ÓþQ†ü3@ ²³Û6åéZ02â§¶€&S.Øq@°aŽ1œv®~Zä©þõnê’°WÅfZZ;6à>jémû6Ý£ïT5+TòË(¦Û]˜ ŽLã8çµZ¸‘Zß9Èö  K4bû[×¥kNâ(H˜³íò%.«É2 äw  ôô; #“ZË`EA ~^¨ÚcÌКuÀ*« žÕbS¸ñP}Ñ·½B\I)õ£ná|¹5—$Êy'š¿eºÚhj ¨'±õ­$ËGÞ³­OZ)&¥TÔaó ŽÕÆE•¨sÇÍ]˱–6È®Bù|»ÝÀt  wíM‹×ÛH$9¢Ö&¹;ˆâ·¬­Ö4ÀÐd²1¡féUgq±—­tÅTÒ°n¤acÆhÓ3zçµZ·`'APã2g¹ëRCOc@>1n1Ð £ ¶c5p¾ÛR=«6Ìïº$úÐÛãªÔaaP; µ9ÅÁ®?уx t åº“ŠÓÔÊ£­cèÌ žƒ5¹v€Â­CcI*¾£ÈÛpÉ5¥¦±…A«“f€0b´Žhpéœ×=©h9x†}…vpÂD@ööªw`‡f€<æKY-˜«øö¤çh©æ»kÝ&;¥ ´#µr·Zt¶³0ÁÀ Û¦dmC «Ú@îÇz°Žûƒq@Fa‡j.¼ÂX T ºY>oΤx±Ž>´ÙüÅ$šO³asŽ}ª^QIÅX·xÝ@n˜æ€*$®¸ð)òJ„sɧ\PÛJÍRÍ'^(Á,§ƒŠè<5.ûÈÃ}áŸäk[6Àqk[@Âê°/›§û¦²¯ü)z3|/ñáê¿3ÝæU·ÿ¯hÿô[:oü{¯Ò±¿æU·ÿ¯hÿô[:oü{¯ÒªŸÂˆ«ñ¿V]¢Š*Ìȧû†¸/ªzïgû†¸/ªzÛ·oø•Z®î¶RœnëÊöÏ¿¡ëÔgÇ™ä¹pq^Ãnßñ*µ]Ýl¥8ÝוíŸCרΔ§Èß"ÒCc>Ïå®çÆGjbÞ,nGj{Å,ÍÉ84äÒw»4ÄA6¡,çjƒŒzS!±žvŸÆ¶àÓaA’*䢀2Doâc½Hš\IœŠÖ•É|GJŒ+Iœæ€!ŠÞîV0p qҘѴjG¥Všcžô$Ž\äT†EÁã­g¼Ä¨#=)ñ©qŸé@¾§œb˜e x<Šžy¨0°Ò€&‰T•$u5uˆ ·<Õ`€HÅ,³ Ûƒ“Š«æpyïWbvOZ«k;623ZkQ’q@3qéR¹ê;Õyc- *zw§†%€Á'Ú€,C“À t©$ÝTI#àƒÁ÷ªóÈD8Ï&€(6én ïšÐŒÙ@ëUíÓqêkI™Çq‘ÈéP2É«2ĈÀН|â´›¨Üˆ¡<`Õ8ÉxAõVêèÞ\„ŒÖ‚ÆBú-eM £™­X´ÕÂIÅXTÜH#5JòÄ«_¯¨n‘—pn>•ÆÞA¬S,¶äçÕ!m«žƒ½8§#Ž~´áØÍR{¡‘ósÚª™.]^(m@Û–jgœˆkûI£;%Q›õqÁï@æåwÖ.§~ÊìŠy5·e xÅP‡ý.ïq&€-[Ã…Þüšê|*Ûc¾;¶þúÜgv:¹ã¨þèp0+Ô ßð£*õƒm[~wc«ŸqüÿÐóÕþ$>‘×Cø5}æ€ÿÈÏuþðþUÚÙÿ©JâüŒ÷_ïå]­Ÿú‘ô®ƒÇ½ÿÝ—ývÈÓµ [ƒþ×ô¦ÞÿÈnËþ»äj¿Š'ò!·|÷aü© ‰6ŽTñN.»H±-µhÛ‡8«Ive[šb-;2N{P[ Ã¥V`ì?=AÅšp_’?*R8ã£ÝƒÔ †K¡C0çÖ€'R@BNjí$eò°Fkž’¹¾!FÐmÏaW-#2L\ô©'€BGÞ&¥AäÃŒu  %”EÉô¬À^æéXt¯‹v—ç”qŽ$eTáT |©Ç¥TÏ Hç¥]gëÒ h†ÂOÖ€#Ó¢/7ãZRE²ížµ[M]³.{šÒ½ŒùA‡QÏ><µ±«QÌ6t¬Ëy÷ǃœŽ*ÜRB(àeòÏk•ÖmÆTu5чÌE»VÀóîÔ™  :r…{qZK&ÔÎj¢C±Æ: |® ;—}¿˜ª¬!-¹E_†2×ôªø…Ävƒ±=(¦=ÝñNŒæe>õ§ú“ž¸«Çœ:Ü<À[†ëžôéóöšUV6ËŽx§ÎÙž’ìæô  ÝXäqšßºCœÖ=ƒrWÔÖ­ñ>MXÓšVÁÓ4¦>o=1Kª1Ž:Ð CƒY·ÿë*õ³ƒk>ì8g¹  Šbë‚+"DI.`”œ—*¥k’zæ«Ée&ìtÇ¥Fèѯ=E[ÀqŠ–;rrS§j¥«‘޾•¥o0ˆ|ØÅUšAÎ8¨âˆ)ÉêkV[ˆLXɪB'Ì2>”±Î@+Î+WC„ÿkÁ(éógþù5’±•<Ž+[Bsý«ç‚[ø ¬«ÿ ^Œß üxz¯Ì÷3ÿ"¬õíþ‚+gMÿuúV1ÿ‘VúöÿA³¦ÿǺý*©ü(Š¿õeÚ(¢¬ÌЏk‚ñWú§®ö¸k‚ñWú§  »vÿ‰Uªîëe)Æî¼¯lûú½Fp|Чé\c¾MhÛÜ ˆËƒXÝøŠ6;U­éd±“ž(vÔïã5fXÆßº1Yú;‚XÎkjEMs·«†—šÎ¼€[¨ÆNêß–æ‚G5CP‡ÌžÝ1@ôbZÐcÒ¯–1ŽO^+?IÄ6‡'½K,ÙÉ'è(šn~^OsQ—fRªñ‡y z ¾ê"„`÷  [ÌÅ ©í + Sf3^°SÀⵡŒ¤\š¨ÖêÄ rjÊéêéÇR…²zûÕÍÊç=¹ jëNLXžõµe,pÛ€„gÚ²µ+¡4Šª3Vôø ¨3À  +±y;b«Z™$¸%Tã=j̬È×5cMˆs’( NàÃn×Ò¨XÚ™Á’N„ñZ:¤xøž*•„æÞ#àc 4%ü‰kîÏ$S4YÚBÊsT¯]®¦ùÛš×Òí„1F   7€-»ÇÄnÝxÞí]v³r°Ø·\û×lû®sês@J^‹{uPFXb¡†6»“|„‘U æ`HÈ®‹O´Ùb8 ·ƒËN¿­,ˆ«óTò¸ÿŸÊ«È7«s@¦ŒÉ’§*šÝËm&Ÿ¥il(€÷ªqùÙÀù‡µmiÚ’J:€kGíX=2+ˆ°œÇu´qÍuñ èÚ€.­Üc¯5Vîôʦ(=Íw á!ºÚäWÿÃ::}Û<ÛGÿóûx¥_™ŽE[ÞÛ†:Wqÿþ—Œ}—úèßãH<;¥Ÿ²ÿäFÿóû•!Ý×Ö²d·ùùs]¿‰ôëKl-¢ÙæoÝóœcÔû×+2nV#Š£=Ê´Dg“VtxüÀ[+:òÝ£PÙ5£ ¸BÀž(Õë:( yÏjèü"v[]üØýå¸Îì£ùþ¡æµwdtº_ 6-îÛvÜÉoÎqÕÏGóüCÏWøùþG]àÕô_šägºÿx*ílÿÔ¥qGþF{¯÷‡ò®ÖÏýHúWAÈcÞÿÈnËþ»äk?Ƙû%®¾•h^ÿÈnËþ»äj‡Œ“}­¨ÿlÿ*C89’HþtÎ*[-E‘ðÇð5$à¨Æ8¬›˜ü¶ó¦#´Žð< ®E*Þmê?ÆÑ¦ócÃW®ˆŠ2sš»%òùHçó¬ò¯<»Û'Ú ´C.]»t«Ûö(ÛÖ€ÅÚÐ:Óe® Î:Õw¸ù<´-¸Æy  püû£àÕe¹(¬ž+©Ðqý½lÞÿÐMwã–cͽæ¶®sgÔ ôš(ÈÁÄM3Œ‘ë\¦¥©†¹õ¯¡ëľ!Z<Þ2¾`¼~ïŸûf´ºLËrÝÍm˜¿vFy®sDC@{WHÙØÔÉë1à°àÖ%¼LîGnÕÐêã†McÚñ>ÜZ± ÍÊžjâ]ÿÏOJ`ùYˆw)q E ^\îN”ØD—U¾í]m7篵hXZ${Iôô  :]’@žcŽMY”)“Ž•mJ•4»|ÏÆ«Þp¿…U³ ]ò+fü–·\w¬+2MÑ'Ö¶nŸ|@(¶,€Q«8 $RÙ†j=O(+\ˆ‡=j¥ÁÌÃq«`D8æ©Ý!óAé@buö$Uùî¦iL¯ r3‘U ¹v1ŠÒko12dÏm"9Ö·adwªlèÒ‘@)çÚ©¨Y®ÞZßò¤ÈÝ–v©Ç¥¤€3ÅW’IPà“^…‘Å‚£8¬CCU“ £4ËÁ3–ùóÍjBûS¡¦Í§\|¸\ïU g­]iAçÚ®h fߟïè&±Ô±õ5µáø[ûR ànÿÐMe_øRôfø_ãÃÕ~g»ù`ÿ¯hÿô[:oü{¯Ò±üа×´ú­7þ=×éUOáDUøß«.ÑEfdSýÃ\Š¿Õ=w³ýÃ\Š¿Õ=mÛ·üJ­Ww[)N7uå{gßÐõê3ƒçMr¯E·oø•Z®î¶RœnëÊöÏ¿¡ëÔgÇg¼#¦i!³NKí§ÕYï¥aÉâ¨Ç3ÌySZ²SäÁ4ÄW’æPGÌj´¤¶9É5|XË; -_·ÐÇ àP6SN܃ZÖÚfR˜­´†(m^GµFN["€"[c\ã¯ZlQ(cÇCVH8ëÔTH0HîhèÀ?E+«·Vç>´ÔC¼ŽÕ0·o¼O¿ZP«rpOLUȇSÆqTdËK€zU¨ª’Xãë@oÔt^¦›§Eó’zÑrs(ä÷«Åc'zÐf€šÍžãtÛWµK<ä¨çŒtª°Gç\œŠ…Ä’¸pzUÕÌqÓҞѪ0ã¥G3y¤ é@«-À%{æ´Ü…ŒàqU£·T`W$çlgš¨ÇZ!”«õ#ª=Ê®Ãòö¥. ´ÍZàŠ«\Ë\‰r{f¯ß]ç8x®O\Ô<”*&€0µ‹÷ší°Ä€k§ð¬ÆXç®#O.Ny<×yáh„` ô  í6_.å‡Nk¢F.¦¹]ưIâ· ¹W@ö ¹qç uôªwD=ªÌªLÀÕ[⎴ rˆ ð)Ã-’xV"6œô«+"ïû¢€4m¢|ÃéÅgj·{c(­É÷«_€:V3ƒpüô tä&Flò{×Cn?u“ÍbÛ©ˆã­n@¤ÛçµDßÏ?Z¯¨LUDjy#šœýóŠ£&$¾\óøP¢Ó7ĺâ­Z¸…Ox:$`dp9…4¡îØ);GJ½,… ö­}5”Úê+;È&Äœv§ÚÊéÀhFa’p2*”¶)!$Œ.rpzÓÚE##·½VƒLDûÇ<ô©.%HT`ã©%½XÁÁÅs·ú‹JÄ+dÐíïžÞR‘Ч§ÚîqÅFÈÒL¬ã¿5¹h©#!EÀ€5ôÛUÛÓ§ZÔŽ_.=ê½²˜á${S.¦[ª§§\PÃ…ß5I/0\`g-ýÂÚA¹†Oó¬4ÔÒïtDG#=袬À¤1 ý diw8œ©9­À7J03šçnÀƒPA5ÑÙ^±äž‚±5Øü··Ÿ¥Wµ»e´*I  %• …æ•‚ÆŠY˜ö’kúåÖ©,ðßÛ¥¼»VâÝW?4÷IÏñ `þs^ÓçÕt¶±…ÑgU™™ˆ>V~p0:‘ÇãTWÃfËX±¿°¸¼­ÑN·W2Iº":.âpC=©/?ëúÿ1½¿¯ëúD¶zÅô¾!»±»´ŽÚ­ÄÑüû†â¹8àtéÏ×µR±ñ¥+i·—PZ®©Jc…Sw›A(X“ƒ;ŒŽµª4ÙˆæÔÁ%šÛíÉÝÌOlcÖ²¬|;¨ÄÚmÔöͧi²™!dÝæÉ€B``Äç¨]/ýjÿA>¿×Oó+øêašjÌÿÙkžŠ0ýzV×Ä'¸¹Ò"¶ŠIfc6ØãRÌxBpÒ± ŽhXÇqÅ(2:•#ê 0(ß[þíЃŠÊÒeÙpQ­Ë¦ùÛ¯Jæ$Öïqh¬eYc5¿áC²+ß›oïmÆwcøÈõÏð=)kz­ó]_…\yW¬h2Ûó»\ûçÏ¡èyêÿ?Èë¡ü¾‹óBŸùîÞÊ»K?õ#é\Yÿ‘žçýáü«´³ÿR>•Ðr÷¿ò²ÿ®Ãù¡ã„6öŒ{ÈGéWïä7eÿ]‡ò5‰ñ ¶iÖl;L•!œð@[±ªw°ƒnàŽqVlfk‚9§Okw$S—£\ùn8çšØ»ŸÍ+Ï&¹hå1]°ÞÍkÛNe»ROJèc·òbE^¤TNåWêÄ3©ÎÑXëq·R—ÎíÜPüïÝÏ5Æûi€ü¦´ ¶Ü›ÇJ£©í|ǰ  ß ¿›«Û7³è&·|W©-Ž¿ÛÎKÙD ;HÊSË6OB{‘Yz6‘q¢k–¶×3A$Ž®Øˆ±ÀÁõßò®–m2 õHoå.òCDˆpPn “ŒuഘѕáÍB]SAšÞB9ní]­ÐÄ¡±÷_ƒóeH=zæé´{øšþI.Ròx’âuÞFíà~µ`ÒííµK‹øK£ÜF‰$cÜᱎ¼ã­;OÓ¡Ó£!ga4ï;o á˜äÒŸù üÌÏ =Ãi÷iuu-Ì‘_O›)É 6°ú+œñ5ªKâ –eÉ;ô]¶Ÿ§C§G:BÎÂiÞvÞAÃ1É¥q¾$™S^¹ãôG`1Å"`TóN¸r‹Œö¦=êqœÕ9æiA$ñØP]ûïÏ­g¢ì5[¾põYÎè }hÌ{å$Ö®¶•¶11»­-„iÛ$k¢!Œb€9»y›˜¤'5¯ ±1Žpk6ò—¡”`[Vèv/^E@c8,Ä}h¸Ú«Á9õ5d¡c¯~+>ùÊ;ž(6Œ÷,y85nU&U‰jkX¼›c+}i‘|îò¶8äPá@Mžk&WÞ­×°©æ¼îHÁ$úUHíÜ˺N§Ö€')»-ëQ3äl*vÂä @iY@x<šmËmLˆý*¾¢BÀ84í+©9Åk:w¬=0œg k£gŒ´¼—¨ßÚ†€œôuÜ5 ™!+Ó΀9¹ea LÓ#˜(]ÝiúŒg^IÍg…geç4½öÖ1…SZ–ÈbcÔúV­¼—½oZØÈ¨wt Ût…˜ƒïXzœƒ%é]%ÉòÔ€0®^å¼×bzŠÙ—xÜyÑÚÆ>Èk’¶-öÂL×]Ùb=hÌ1/Ù¹¬Õ™°:w­(›6Ì¥P™Ú€Ã2Šn¡ ÉÈ©Hýè©5 ºãµbÚ/úAö5§qŸ%HV}©i`0k^쨅F;PÌp{þ Ù U»0]Q_Bw© í”íÉÆ*¥ã8ëI"?gÚjÊ»_߀zÐÔeƒ%A¬–³"ãr©À5ÑYG‹p=ª²ª­ÁÜ8ÍRD ÐÖt÷-„÷ö®±¬ãx …çÆêhñJØ\еk©ò ±-ú<ÊsŠÃµA*ÀQ4à9Ív6wñ ¸5%ÜðI2ž q¶Òn9f+õ«RK†]²ç>ô¯ H¸QúV[Z¢€3Qý¢Sü|zd†W䊙4èdÏ88éZ:Lk äh<óøÄO ¯\zÖžr%Õ"SÔîþF²¯ü)z3|/ñáê¿3Ûüа×´ú­7þ=×éXÇþEX?ëÚ?ýVΛÿëôª§ð¢*üoÕ—h¢Š³2)þá® Å_êž»Ùþá® Å_Ꞁ6íÛþ%V«»­”§ºò½³ïèzõÁò§³0ȯ_·oø•Z®î¶RœnëÊöÏ¿¡ëÔgƒ6¿8À¤†Ì›k u«éb™ŒÕå·Ú§Îð8¦"(âX×idlŒ•nHö§Aõªo×ü(/½ëŸJŒDí!ô«Q&欨ݳ@š'Òš!l’:Š·äñÇ¥œš‚(ög ç4²L~<ŠF•~`1š¥3å±ùЄBOz”’ˆpxÅAo’¬Fh}Äã¶h´G̹ç§z¹IÍA៎jݼ8 Ÿ^ô0ƒpËci!M“œqVLƒ ‘U…fbzŠmÄ…Uºf–Ö±ëïUØ™e ŒÖ¤hœf€!l$DŒÝꔲeBœÖ‘@bÆG§ST®‘cP}h 7oΫ\Ï€x­I#öàͼ`¤óÚ€(ßÜùQ>œäשÞ}®èã8­¿jLPÆ3šæcs@mX ù~õw~‡Íb@Îpq•I1Æ»ï ̈¬9ÅiÞÁ´îšŽÆä¤»I­¢vÆzšÊ¼¶{y8phaæR çšÏ»`A,{Õ(¯Šœ9'=3Nšq1P§­I<¦>•]æ&@£#ªiÇZ“M´óÈv(Š2빇¥$XÀ==+LD‰…+øU+ÙbÁP=ºPx ±cZö¬Ìb²ât õvÊE0 s†ÈœFÛÌãŠÓr½V¸„1Ýš¥w,‚R¨Çi¦Ã ùˆ85©mb³ŽG5¢Ö*–äªäZžÒ5’ÍSª«ÄmØçîÕÍ5† šµq•8ü¨¥@äÁèiÍ·ž=*;»7Œ=xâ©–˜ &€ ÔÝ£†k"Þn&T’kv->[É¿zN­iýšÞÇnP5Æö[@[ˆ©´¸rCJ±ªIæÅÇCÒ§ÒãU€m8  sN#·8㳬e˳uÕûè¿Ñ›œtÅsV÷mk!Sœnâ€5µ»µZ¼7lW)Ÿ-´†yX’jÝ›X ¤lÏáYm;ÜÀ?J—O$Ý(Ív6ÑíbI+Ól ²Êü[fs'­aø…؆ãòªBël²ïNÕî7¶Lö§Á1ûÖäv'µzâxÿJ|b Î}Qøª}ÇŽ´Ëd ö÷„D_þ*¼÷O‡Î‰NOóZ²[,Ö¥ v4ÖÃã½.uܰÝî‹ÿÅTéâûeX¡¶½šVû±Çf=ø×™­´ðÈcŒqšÙÒ}>ñ/‡œ‚îÆT¯õ ‹SÖuý#P¹°Ô--­|õw¸·*¼xP1žr+4Ãq©^ÜÞZ[\K ’± ±Žø8ïÍZh®|Gyogwpù™[ËoÊOAŒô§‹»d±³ŸÇ+eÌ`<ÁÏ-sÚŠIk#¬¨Ñ¸êޏ#ð5Æêw/$¸ðx®Z¼yç‘ä9v%›dšåæVyƒŽ€Ð‹k™aÚ¯‘Þ½;Á¯þ…rÛ±—¶çv:·Ô?Àô<,6Ésl ›Ýx4¬n¶keÎì=GóçÐô<õ‰ŸäuÐþ _Eù¢Sÿ#=ÏûÃùWigþ¤}+‹?ò3Üÿ¼?•v–êGÒºC÷þCv_õØ#X_óý™eï9ÿÐMnÞÿÈnËþ»äkÇñll”ÏbJC9= nˆ“VïRÌ…9=ê+dÑm“Tµ‚®iˆÄŠ3-ëZÖ‹²ä‚:VM£Ÿ´7\浬¤ó/pÔ§ãà’MgÛ¼`æ·mág¦zU[í<³ù‘.z&)ËqéV5¯^Åm5Ü·V»"* ’}‡ËÖ¨[iÒIƒ+qéZ­ðåË;1Ë3“ëÉ  zv¡yâ wí‘EAYŠí'àr~oj½«kZŽ”U$û».ì*¹ÀüqþEA«ÙÚé÷†ÞÖ m[ ÇwÌx9'û¢¹]NQgœûP÷ßµ[vÄVöGýäþ*¢OˆÚëEæK=£þ.¹9ÔÏ6÷­:%1ùoŽ8ÅtÐ|AÔ¥\˜,óìÿÅV]ýìúì·“„W“8Éö¬»=á2®:-@Û*àŠ•“÷ªÓ\ˆ8aøÓ彄ŒƒÍg\Möƒµ‘@’n¥ÝŽ3ZúmŽçÎåMÓôÖeRF>µÑÚÙˆÔ™ï@wöí¢AÒ®Ú^G, d+FêÅf‡iäÖ+é­ œ é@O±ç šÕ@F{`Vuµ“³ZÖ(sÏɨã©÷¬i‹Ox¨zgšÓ¸¬E½=jŒEšI›> Ð×oò$+ÁÆ VœU‰x$sŠš3Ü裎i§ zÃ9ÇJK[hÐä€M6ly¬F8íVD}v“š«*Ħ€*œóM…H|‘OÜ“RÆNN1Šš$êÇòªZÁÚ…=+ZÙâ²õS¾ãô  zkã*{ûÖä2*‘ú×>Šb•YFk¤™Œ5O3«±Àü4êxÎEØr9¦”p(X&YüRAi寻†MM,aæ©ÍY—å(Å]²ER1[M H{g“jvªñšuÕà‘ßÚ€+_Þ) €ô‰*DXõ4û©‰ جé'ªç4ëQæ^Œõ-]tÊ#·AÐb¹M-sz¤×I¨Kˆ”g€(d—bãZÝÄ“µF[–¥4hÓî‘•¸÷  ìŸSj@›0 2B>ÓøÔÚƒfÔé@J~ÒsÀÏjÙ¾_ô`GP+&Ìævç½l\dÅŒv ô™‰GZn§(ùqÚŸ§ »ÈÕkðXäó@-&W€zÖf¢™œ{Uy.^ÙFÓŠ‚mMX§˜:ž´±ktðÆ¡³Œu¨]׿<ž*Å»[ÜÛ®×*ÈÖFqÒ€:+ddë’EszŒ¦ea×Ú¯Øjl±ì`{ÔWò#È$\P!ÒA È9Ö<ðM§zÍvVŽ>e#4˘#‘C2ޏäP? °™@eíÖ«\ÙµÙÛ·üJ­Ww[)N7uå{gßÐõê3ƒÆÂ8$úÒCe ˜‹8éQùÀÀ§2.À: ¡$™$Æ)ˆ’â`W sôªÝW­1‰C–ª÷‰ ‚O4£æ¬QޝÃ\LvôúV<×u.Õo–¶,"Ùœâ€.Æ0qÅU¸—*ÀjYä(¸P•‘s@ E‚rMG!²A¿&vã“À¨dtärhXYBäp3Oc×iëT£”g¡õ«p:ÊØäÐÇóç5`ª£9íAUàb¢ˆ’Ã<ŽÔs'žµFrÉ!ÉÎ}*ÒÈy•^D2Î28ö €€÷«êø‹5H+nò‹ ±¸yc‘éÖ³5×$Å9¦‘PÏOZƺ¸ )\ÐÏÕjÂÕîÕ–nÕ§q0X·ZáõëÝ唃À  kËŸ´\ 4Ñ&ÔÀûßJ„°“Ô±ï–$Ð]Èn¦»Ì^VS1Þ¸yHÜk¤ð¥ëEz‹øs@—ÌÊ=êÅí¡1ŽzÕ8¦jÖó7('Ò€9½2D pFj„e |ئ»yÕX6áÆ0kîÁ&FÀäÐ,÷&i’5Î u:\"+e'Ó¥r+ C~ªÀ䵨Á X—o¥>fœŠÉ»£ØUéœþ>µVt$c™ ‹·'¯Z·dAÊöÍe«€ÅGjѱa»Îhóœu4ôMãži¤)eÉ*.  V F@¢@1gô¬¨œ =kF&Þ¸èŒyW…Nq[Yy¬‹ˆ|¹„§8Ñ‚]Ñ®Óòš ÙÏJìhàzÔáÏsÞ’YÒ€+H«n»€‘pZæààü¾Ôûˇ’Až3Wmí|¸w0ç‹p ÆÊJ»£ÿ«Çq֢إ^ÂV·¸Á8ó@—#|Dó\å݉uÜEt²äär¾k=€~lóÞ€0#Ò¥’2Ø­-;GÛóH:~µyÛÆ3éS­Ìqä–PID˜¬Ë‰Àn‚Ÿyæ) x®~òìç`9'­;ìæû„nsZpéûí `ЇíWÊ–FãŽjì ì?*JfŒ,pEtp.åÁ#«”ÔKk¥™ç£k«)ŒsÈë@íV,zÒF 8ôÍfh‚™Ï_z`Ô'iç¥o¥ãØÜ,ñm(l3Œ‚?­fj‡#¾]سRk5¯Y³¹º£w.ôå²(•ýÎrÄäž”ÛFCd“QEj÷W‘×Cø5}æ‰üŒ÷?Qü«´³ÿR>•ÅŸùî~£ùWigþ¤}+ ä1ïä7eÿ]‡ò5SÅŠ löf? «w¿ò²ÿ®ÃùÏñ¤â ;g=݇éHgu*§~kòQ,Š:ç­:òè·ÌN=*µ’½ÅÀ8ê{Ó~ÚÀ!`sëRËnmæ.1Z7 A`8¦J¦{n0p(RÑÖXÔƒÚ¯lR:×c¨Ifæ9åÏSZë«)È  RaÈ©7ª¦ ¬C¨g$Q=ó¶ cJÓ¸¼³“–bKÔŸS\¾¡yæ3ð*ÔÓ‰®zVKÀ×PHÏjm”ç*qWÁ9.£¿j¶šx‚ J㊱cl$²è; >Ñû¹(¼Ó!+¸ c­E7ú Ù=ªWïÛœPRØ $A"µí4HÐeºúb®ZYy`95¦ˆG6ŠŠ>_–¦ÙÁ4XÚzL—‚?n[îæ›ä©3O Î2¡‰õ ÙB/ ¨e'>•r\ãý+6îR€ž¤J£|åˆA’ I2yaq‚G˜k‰ËÉÈÒÞL²\…QÂöÍKgÈ7óT¦eÃoz´÷$ÃåD>lTÙ7˜O½Þ€-Hã'5M‡˜s“ÍYŸo#¦*V’OIÓXzô©á7µG(Üãh©bt  ‹„=úÖ4¿½½jÎ|»wbOJʇ$îühfˆù ޽éaŸldÈàU„Q'Êj„èÖòîÇu°ì(š}¶í€xô¨m§GM6â}±:c4Mdß(nzÔï(ó@&«+,k¹°3ÍVkÄsÇ­nyÇb…<Õy]qޤuªë6SŠt0I(fìh”ÊJ¿÷}j¥ˆŒÜ2àUí]ÖÚ×#ŠÄÑ.®¥,qÁÅhÚ’ºÇunjLHíXVŠõNsÎMijÁAà §s&-ˆ¦Y+÷™"£¹9‹=©†eXv÷  Ë[4Ýy­AÇÙÈö®gGm÷x žk¥¾Qö|wÅbéÉ›®}kvà(B=cic7dg¡­›¼?J‚Ê@ Œã5ëÁsEš–v šmðÀÍQ¾¶Þªë\Σm$#g¥vG ¨:Ö~±l$eùy KžhŠüíÚºËk›{ »Û‘Ç5mb©o½”täb²î®;¢±¿vi G…#8Ȫ­jUsÖ°­ubUÜŒqÖ¶#Ô”¡ƒ@‰L2§­+^.1ŠŠ{›«ÒY"¡u4¡ev¢Ø.à R»D’\ž}êŒI#÷©š …äç€6ì-àò: Ñx!6H¬eÔžÙ6ЍׯéÊ3r{PÞb:2ÅZÓmÄx“¹ÍP‚Ñ¢|“krÝDqßµe_øRôfø_ãÃÕ~g¤ù ÿ¯dÿÐEmi¿ñî¿JÅ?ò*Aÿ^Éÿ ŠÚÓãÝ~•TþE_ú²íQVfE?Ü5Áx«ýS×{?Ü5Áx«ýSÐÝ»ĪÕwu²”ãw^W¶}ý^£8ö}…†qÍGœJy&¡—&7à{Ñ+NQY—·&Ød’Egù„ÝàtÍkØ’z×;f^K¢{g­oÛîSïšÕÜ*E'9ªäcšž'ÎN&Rx­xzÚ²NFÒµm˜Á4·Qùûâ«YÊFèûŽ•y›'o¶k(þâìí'“@Ó{ÔWÓyQ7®1ÅMg$ð>•Ÿ©6çUò lâ2J‡¯;„¶bjµ¬B8PÔ~Tjm¶äýê«ašG'š‚úÀÄåÕxëW´…áhÍÊ›O"€0¬îK.FãµO,Løª÷ö N‚ª&¡4XÜ2=h[‹wF'‘Už6#“VMüNóóvç¥W{Ä–AÓoÓ­gÍæQçÖ‹ §œoϾkfd˜â8øõ­Ë==-ñ‘ŸZ­ogöH95†‹Ù äÒº}NDŠ «ÔŽkÎÄÊåÀë@í-’þÔù…I¬{ÍHŠ}ÓèkZ2l®B’BØhÖXppsÞ€8¸‘ƒ îBÕØÄ@rùâ¶.´a"åx‰6™4o€¦€ ¸•TqUA–ä„I­8tye ²’+zÃIKp Q»WIÓ–÷H£qö§ê‘aã²" “­Ü'•±ya@ ÌpÚŽrqŽ+wÂoû‹ÆÎÜËoüXê玣ùóèzÊGžo-›µw^Äq^€Ø[qØþ2=GóüCÏWøùþG]àÕô_šÿÈÍsõÊ»K?õ#é\Yÿ‘šçê+´³ÿR>•Ðr÷¿ò²ÿ®ÃùÇñø'N´Ú2|ÓÇá[¿ò²ÿ®ÃùÏñš³ZÚ>aþT†y™²’gË¥tZn”#Œ6ß›jËK/†“: V¾Å†< ñíLG1¬ä"®yéN°b¬ˆÃå÷©'ŒÝÝmì YšËÉ‹v9€RÒ#¸]ñ€b¹ç´’ÞLp+¯Ó§Fõù¬bœäý(”Ib ÒK4xÊæµ.ô@ )œÔè’Èy\zÄ_6Y0 òkIÒÚ/ÞL¹¥i¤$• (Æ0(…Úî¶l&8¬ëÅ‚ ÷³Ò´u¥ŽU ’0+”In°ààš›R•îvÞ+CHˆyG‘QßÌrjî•Ȉë@ЯÊ:Sœ§Šd-•ÍHíõÇJX•‚çøM2TÈ=EHŸwƒPLXçž(Ø!88¢?R9¦¬€“ð£xó“õ ÌÅy=ëSÝí­+—sX²1¸¹<@la³.Àç˜ìe•œüV•üž]ºÆ?*¤Š¢D¥Z·ƒÉ\°ëÍXÈ<ô¥pV<ŽM,Q–S‘š«*‚z†c¶,b­Î 0^˜ôª·Ê\¨5H‹‡f˜b5.6(4¡.È‚Ž¦«Â»aïPÝ9šçjœÒ®"%µId÷§\[,°¶@Å:<þ”“ò0[Ú€0ši&Tœwª··ª¤y­ÄNz×5ÍyfyÙAÏ¡ ÜÝI1ÀÎ*{9¥çUÛM)r7üÄv­Ë{UBøP6Ö?*îíÖ´|´‚ëÚ¬ÃÌ285[SusÐPâk¼·–¸ÍciìT³giéNÖçY.XƒÐÕK,çss@.”ß¿Ü{U»·Ý)À5Ÿ¥I¹ÉÇJµ<»¤8Jæ}¬_JdóAç‘Ö«Ýɾç`§ÚFâB89 ƒÃp;qç&ºMPˆ u¬Í˜è+KWoÜ~”“¦.n›ëZ7…£'­RÑ¢&áŽzµ¡~¹Ïá@tó™t¢ú1¸ äÓ¬S÷ÍŠuâm•H$úÐtº(íA2êBç–%ië¶ ! ‚öÌè+™Ô´´JòÆ~jë­p"~9ÅW·E’Rï@kq ͤ¤M»hïI¡2K•c´û׍߸~ÞîØ œb¸MGÃ’YÉò.FsŠuž©ƒ–àÖÜ hÇÍœú×%¼ñLr§”ø'ž9äàsŠï4û•Y‰<ƒ[‚xgx®ÛP1º†f¯%ù¯œžy  ÿì?=ØïÈì)!ÑÚr\tïQÁ¨²U¿ ÔÓj¥“ð lêàtíT,›óã$šÓ<‘YWþ½¾øðõ_™èGþEH?ëÙ?ô[Zoü{¯Ò±[þEH?ëÙ?ô[Zoü{¯ÒªŸÂˆ«ñ¿V]¢Š*Ìȧû†¸/ªzïgû†¸/ªzÛ·oø•Z®î¶RœnëÊöÏ¿¡ëÔgÈ/¯Ÿ%W'Šõûvÿ‰Uªîëe)Æî¼¯lûú½Fp|“ÈEž´ÙŸ‘Ó$žj`ªŠ3×®jâD¾_N*³ÂÓLª â˜†*yÍ…÷­ë(<¥äsïO°Ó$Ü®¨Dê ËÀϧ. n:Õ|ãö ä±§¼Ab$ ñÖ€0yéÎ 8ô  ×u,1CdFOSQœdqQÊ[g€'Ó!ó&f`0+d&3Ígé`¬LO>•¤Gî‰Ï4IÈÞI©L¡!>¤T8ó@ÈéLÿY"¨4vÒ< ÏÞžñ &ã ©b# @ÈQ€ëÒ€(Él „ƒŽ3Y× ‘œUÛ«€ŠGñ£gaÓ½„‚Ó!Fà2kÏ5­H«¸9Îk¨ñª‘ÀÁÏó¯3¿ºk‰I$óï@呤”±'ššÑñ"€qÍUÚœ3Æ ÎhÆ£1–}»²¥ULc½5·ËjDô4vÒ/1€9­«KGŒ†åÍRÒaJû×Y-·“àb€.æ¯<¯JHžKaßéÚTže£¡íWŒJ#®TŠH5l«p{f§‚D2k>âÈà˜²}«5n¦¶˜ƒ»ôÒ^01ñõª›°…ŽqM[¤š ÙíY·e”ÄŸ{4$·{¤eRMUkW˜’ÍÅ]³°,A í­ #XdP=¯—>ÜãŠÑ dsÒ©ÜîŠméVä$0úP±Á]ƬÂNàETŒåW½[ˆ‚À*¼ÁHëSZËóÍD±ñ»ÖšŸ$ùÇ|P¡ÉfÄKïÔÐ3è—óèôhî=}ëbL qïþE8F9&€im„«.(M ñÖœü‘Ò€1ub&ŒóïV´ø±àT:¬@"°\ Õ=€¶Ï¥fëu`9«º|¦XP“Y:µÐšå‚©>•§¥È=èW ç¥3Ë Ç*9§€XŽ8=sRíù¿Æ€5DùBƒŸJGe 8úÑ+ˆ€,BÖ=ÝëNÌ‘çÒ€{¨lŒäúŠ« “] ¾pzÔö¶Îé+b8•>UP#ya%¬ûâØxAˆµºbØ&K|œã«ŸqüÿÐÀÖ¢yNE\ðØ¶¢¶…žÎìËB=GóçÐô<õ‰ŸäuÐþ _Eù¡§þFkŸ¨®ÒÏýHúWßò3\ýEv–êGÒºC÷þCv_õØ#I® v¶gò¥½ÿÝ—ývÈÓõ¿Ñ¿¥!”<°#U+–Ú‘WÁyVâ1°šb1,TÂN:Öþß³6{ ϶ýÝñwÍI¬\²ÀyÍTÒå"ãhã'Šß\ޏ®sK‰¼ñœòk¤PBŒõ ¶‘R.zâå…JŠWTS’1ŠV-üë.îøà¢M%Íé‘¶F2¦ÛiæS¹óÉÏ4µ›ÜI¹òG½G©ék´ycŸQ] [P`öéLx°É ZÞÎW` o¬ ¼-ãAž3L§šŽô§cpÇjb±8íDr2{ö ®xüj¼„õ$j“·Í2e Œ†tÇ­ß’{zTŠP ÎxHqë@/¤Ú¸çb©ÛÂDFSÖŸ!‘ÕdšuÆbµ œ@Op7RKG³ÍA˹/W¢±‘À–\ã°  ‹ …ÎEL–™"ˆ6ôÛ¦Á ©;wµBéÙøíéWd9\šÎ•›wLšl X…>µ5ë…µb4°ŒØíY÷2¼Òy}…6Á ®­m ªv@œf¯H~ZU Ï¥U-ƒR³ñÒ«îù©  mNB°²çæ5FÊ×`ÜMYÕ2÷{š`Œ¬Jõ  ;%ÉÎ{Öä/ËÇ5“gØÔšÚ„áAê1Ò€&•Öòzâ¹^ë;Ú´µK¬(Ü×­Ý•µrNsÐP!){– pMjXÂ>ϸž@éXNwÊ+rÑɇoJÙÒfÆ*P7»Ï4ë Ó‘ÍKeJç¥]פ:ÖæŸ§ï”¶ß” Ï·‹ÍÔéÍtö8†2Á  * ²”qSk÷ºXË“MÖ²S§j§¡¦]Ž;ÕÍ@`gÍqlb“Y“ é@ Ói ÀÇz¿=°‘wÒ³´ÉBÆIïZ¦SöWb(~Ù˜Ô,áÏÔÔSKî9éLˆ6Å΀4í܈œãÚ£²ßß4¶ò³·^ ¹8ëšéU¶^¹ªZ”1Ë:¦ÑS@í¸ª—s—» P¾Ðâ~BŽkOùmŸvGý^â3D±+ÆÅp’Ù¬s(+ŸJ†}._õ‰ž+¦»²%ƒ*皪ñH€‚>”n“³ÇcVÃùGSVR€4}“ªâ€4´ÈØa¿:Ò•B”Çz¯aX·b¤•¿Ò#\úñøVUÿ…/Fo…þ<=Wæz+È©ý{'þ‚+kMÿuúV+È©ý{'þ‚+kMÿuúUSøQ~7êË´QEY™ÿp×â¯õO]ìÿp×â¯õO@víÿ«UÝÖÊSÝy^Ù÷ô=zŒàù4¬@-úW¬Û·üJ­Ww[)N7uå{gßÐõê3ƒåqÛ¼äc8Í$6Èf€prkFÊÕU²Wñ©­,„1?Z³€ÄJêDx R7òGJ·6?Ú¨/4H'·Zp晜?¯4.ìóÒ€8`IïM•Ç—Î 2wû w=i’œF>cÈ  éç¨÷3¸4É÷‡ŸÖ§±ŒÍ(±f BW#8«DxúUkxÜsÆ}jY”·ÔÐuÓm”NimÜ),z犊QæÊ@<޵ ‘¼|äàq@Ñî(®M<¸HTŽd¶^xª:Œæ61ƒ@&”Ë;x¢îq‰Ï½61ó‡o»Y~!»Xál7á@f½~M¤þÍ““šµ}7›;æªPNLç mOlA 1Žzç5.Ñi$V\5=¨I$HÜgž´¿áèŽÕnæºÃ›íÖ³´›†,ŸOjèc’}1@l!8<Ö´p†'>ÕDâ+V̉ ò  æ!ƒÖ²®ìüýçŽõ¼c9>˜ªÌª‘dŽ´əͳ2Š—H„\Ü4ÛÖ—WwÕ"q×ÜÐîÁÜ U[·p¢­|¡¾cœôªw.¥À€2.F.Ï S¤|í$ñŠ.ˆ2îÅUÝ‚GlФG$b¯ÁòàYÖÙÚ3éZ0öö  bq‘ŠI€ S¢!”’(˜¿Z»ežÕ&ý ŸQU-œ4}y銰åõï@n‹n#Š¿dy8¡ãÞ…@íŒÕ{IÂHb äP“¦X(ÃÂÒ£‚zÒ³àŽhEn æ þ^?Q&XûSdä =((çTÀLc?AQ¹Æ=3R+f>¼ýh„’Ü‚Nâ£nJíÎjd¯4£gšwR8=;Ñ·•§Ö¥ñÁÉúÐÈL°°ÆF8¬Ušku1€q]3#dƒŽ*ŒÖBG'§Ò€1aµaÎk µ¶X!µ €v«Å‚FNF(WÛ·Z†æå!sõR}E#B©Ë ¡}8<â€âin¤ t«–v>^ õ«6ÖKäŽEZ@÷ÈÔ÷F3Ò¥Îp(à(÷æ” jÞ“ÛÒŸáó²}SæÇúL#;±ÿ-õÏð= s·œS¼<Ø—S;¶ææØë!÷ÏŸCÐóÕþ$>‘×Cø5}æˆÛþFkŸ¨®ÒÏýHúWßò3\}Ev–êGÒºC÷þCv_õØ#OÕ¿Ö[ýúS/ä7eÿ]‡ò5.©2 ú7ô¤386Fhdã®sOLd“ŒVÀ ðqÅ1õý»¤¢TÎES $òaú{×O,+ ÁàZ®¶#…ŠGƒßÖ®¸#>ônXò tª7WêÉ4jiV8ˆ-Ö±gšIÛjçΚÆk¹Fs·=+ZÖÄD›˜s@,ìvüÌ:Ö€#hÀ©23ŒRýÕc‘õ y|“œâšcÜFM.2§æ  ?tæ€áj¼#x?•I"¹=~• !”· é@2aHÅD˜F<Z‘݉ÉàTNÀŒ-.Wå>• Ën'TI^iZ ëøPh”yY'U<ÀYŽ~QW …]‡®{U ¡·(€äš¯y·M)ä~•ZúàÉ1_áª[Ú1èH¬Éí±ç-@4ëv”ù˜zVÄåô㊩§CˆÔ³)`A ÛÊfïLfóf ô¨]Äd.iabvy&€tª?ˆb³_ïñW®Y[Ž¸â¨ª±$c½=œ¤ƒƒŠ£išä“ÍIrÇ_Ó­Œp†#“@îÃ*¶8ïVD«$`©íK©'ú3zö¬+y¥‚L1;s@L7cëQ2æ‹y|îsгnPK†s7H^ðäsS¤2*ÕÒ¡¾rpi®Þ€~tnUSW Áç’’0 ç¥ffù‰úÐZŒ»'Œθ}~U0`~µÑj—;Aù¸é\v¬áÀÀúæ€3`@Ó Ç=ù­û{m±ŒÿJµɒ9º­?lʉך׆¶ ‘ÐQn ˜1WoŠÅF9Æ*­ªâÑØã  zU·©;ÖåÕ¹†^œU?D>ÔìGCÅojh !±Ò€I;÷|¼ ~´aoQQhì1MjC€´&•-×gkmºéT~5­§.-ùÖ¦Áµã@‘½­²Ê ãóVãÔVK&ç³ík¸cÍÝ;Û«ÐÐóJdpƒMiIÛT'ŒŠÆÒŸt#ŠéuöZ¯| eš/Ùúu¨6¬WcT¶«[àœ7½Er Ü‚~´µýÙoöAÉ °VÀ€6lßrŠÐ‹ïŒÖM›ð6ç¥j#p i!íO“‚ ߟZ±ØÈë@ ‚M²€NGÒµ œã­dJ>Fx­8$  ð}hl(M£YÒGåÜ {µ}˜mu5FèCë@b—,9À=ªrr5—g6[æ?tÖ²Ä*Ž5;²E<œ/¥< þb¢f{t  gò©Ôa8g.>•6æh#çütÔè@^pjœüÝ=qÿ×§yÝÖ€$Þ7ôøäϦ*¨aÈEÎ sš¸œóGñuªò³†š÷‹y'é@f-rÌbÝj &R>™¦Oq-Ã`úTÖ–å¹9 ­lžBóïšÜ´‚8Ç ‚ ŒF‡ÖŸ ÆsÓÖ€% 䯗`Þ8§«‚`zioœb€DÂñëM ‘Á¥y21M^¼÷ s€:Røxì—Sù¶ÿ¤Â3»òÐQüùô=„(ðûb}PîÛ›˜Fwc¬‡Ü?Àô<õ‰ŸäuÐþ _Eù¢6ÿ‘šãê+´³ÿR>•Å·üŒ×Q]¥Ÿú‘ô®ƒÇ½ÿÝ—ývÈÓõv Ðç¸aü©—¿ò²ÿ®Ãù5ÆÚ`?ïJC3üà1|¦{ö¬é¸«"`"sŠb'.8çŸzFœ"“1TšäGËU ï^bQIÅ-åö]‘æ¡·´yß{ðsS[Yù¹Ål$b5 Gml‘ñ…úæ¬HéP–lðêu}ã¨À aWšFÚ±c®h•Æ”¨éŠfïj\ŽôÃvÁõ¥ÎÙÈâ€DTpyä‘Ò¬;¼‘Lb>ðë@]ˆÂÏJRŸ/J”_éÍ2SÉÁàÐ6 ä~ÖlàâžOîT·ZªX3íŠ@CeÈ$Õ(CKrÄô©/&xÐF˜õÍ>ÜZ’ØÝŠ«y(’éa^ƒ®).È(=@Ù}O9••W9'“@,ÑNsŠl²nË>”èãÙj«ê*áp1Ígd´í»<ÕȺqÚ«É0–ùh ѸÅ2Y#yj˜å›nµ:äùV¥qÉ  eÝ5à‰®‚3²08À¬kÏÚˆäúÖÂ.f€+^é€*‰¶V‹rkBåACíTZCåÒ€)«ý–|ŒÑy{µ¿vƨê—KIÀ¬cw#äý(sí;Écœã°¦¼¥€Æy¬Û}î¤å°*lHp4¤Œk1ç¦*[‰w¦ÄGj‚ÖÚGe,8õ5;¸‰› q@¶¶Jþìzu®Bi >Ö=+¤Öî„’IŽÿ¥rŽrN~÷­Y€`“ë]w‡á>da‡SšãP × xr#åÄ̽¨KT!`T5 ²n´aØÒêïóÖ‹93 \s@4Yà æ®jŽV ”Í1@ozv¬WËÞ€HPc5[Y,Ó(ÏwI\Ûät&¡¾ˆÉt(튱.zb¹ÍAÀÔ Ç~õÕFDøq\†¢CêGžé@%ÿr¼Ön«iæÛ4ˆ â¬Îà@0qŠ´‰æi¤uÈ >ÊY-gÜë]:ŸÛPÄ{tæ«¥Š¢ÈÅzVTrˆ¦&6èy ª+2Ð/8oj§?˜µ†qÞ®iS¼Ñ€àù«ÒÚG 9Ðg"É;â¨]ÇåÜdtõ¥xfµ”?/z†âQ!>=hMÆló»µGióE׊jóh@=©–=ÔúÐÉR#Ž´ûVÄ\猢EÆ:A•ù  š„ß.Ú§b¦I÷uû€ìOAOÓFSpãÚ€.ÌþZ“YìN«÷oäjýÜ„&MeØúªž gùÊ¿ð¥èÍð¿Ç‡ªüÏaoù ÿ¯dÿÐEmi¿ñî¿JÅoùàÿ¯dÿÐEmißñî¿Jª "¯ÆýYvŠ(«3"Ÿîà¼Uþ©ë½Ÿîà¼Uþ©ènÝ¿âUj»ºÙJq»¯+Û>þ‡¯QœjC¸7S]-»ĪÕwu²”ãw^W¶}ý^£8<›Ê@ÛÎzRCbðzTYlM<°ïŽ•ý¿Zb#8¥ >ñ¨ €¶jþ£´CÍ&£~îÔå³U`!cœÖz#<ÅÜžMkÛF \tþt! <æ›7Þ žµ-æ˜ÅV™€UsO„¼¾aç³!"³tÔo(°´KRJ‚R|€ÜTЄ±×¥hÈÔGÛ5ЄP¸ÿëP%„Џ?2b`iÙFâQ‹I.îÔ >nX’+F>ƒ8¤·‡b#éXšö¦?)N ëÍr'Õ7†P~‚¸ÆbNyÍ_Õ®þÓvprT(¼žÆ—ó¥ëJAÇzUéš`ó’)›H8ô«VV-µ­ür€¬ÀM¼p£#Iî.Ç,:Vy2Ü嘴ª­r~ím}”E@:zPT¶Ë¹´¶ìr}èÓ8=–3ò‚:Ô$ #=©èêˆwsžhËo T¾m²jGvßôˆFwc¬‡Ü?Àô5–lÌ@göMHîÛ›ˆFwc¬‡Ü?Àô<õ‰ŸäuÐþ _Eù¡ÿ#5ÇÔWigþ¤}+‹où®>¢»K?õ#é]!{ÿ!»/úì?‘¦ëøÄéóJuïü†ì¿ë°þF›¯0_³“Œ|Ý C1¤ ÀÅG$êˆ2y^êùyUäûUXã’|ž´Ä9Œ—3е²Å‡zš8ÒdÓ$G˜ã(Ì2+ŒUÅuü*„0íZ˜nQì(f•FqÚ£YT‚*ÜãµFÄu€,™A fœ_© bâ­y˜<úPÒAÓËëMóÂòŽj´o `Š— px71òiwÍ#)Ïã@¤<÷¨†G8ÅOÝ,{Õ[‡ÆHÍI•À”5²ùÏçTõ7ÝS8«w; Tìâ23ÌüûšHÝbœëWZP[ ÓµeÝ’‡<æ®Á tŽ,¤â±ï&òQ‰â¶OÎ@ç…­Á#¯  ^æðÍ)ç§zÒÐI-É5F.wFk¥³´àb€&¶²O/G5zÀä*kx•HœT“: Èë@¯eaTv¬Nï˶'8,:ÖÝÈi 7é\ž¿|•éŠÂ¹‘$”ïrj„Ê ’:{S\œn'­G¸ì&€,Úîˆzæ½;EVryž’¾eÔïW­iQ×›« U;I ’OJµ­gÇJŽ‘cïÖ€7t×8‹Öócõ"§»§z’î ¤ŽŽhÆ•…¶Ç šŽVÝ| õèj[l$#ŽÕJ&óu:í4©#~äñŒ ãn¶ Ol×etvÛ±Çjã‹nº'Þ€'¸QårqŠÝ±‰³qžÕÎÜ2¸'“]EŒ"+¼NWÖ€2íb´±‘Á®gSÒ層E%OZítØšì=jÆ¡j“ÂèÊ:q@{e«4s·šéìu´‘@b=ÍpÚÕ”¶W.%sš¥ü±ŒŠõñ$7I€Ã•¨iaNäl÷ÍiÌ¢UF$ƒÞº“vÉÉ÷  Õ–{a‚2¢§²¸ó%`8ÍZTŽHET’Õí›Ì‘׌ÐÔ(S©95$ Æ¥ˆíTmoÄ¥°¬ßN {Gã@W¯æ6Ñ÷ªí”{T{ ¨°™¦ó;V„8ŽØŠ£y&X©è**2nŒ¹¨®¤%Û5MP沯ü)z3|/ñáê¿3ÔÛþE8?ëÙ?ô[Zwü{¯Ò±[þE8ëÙ?ô[Zwü{¯ÒªŸÂˆ«ñ¿V]¢Š*Ìȧû†¸/ªzïgû†¸/ªzÛ·oø•Z®î¶RœnëÊöÏ¿¡ëÔgŠ$±ÆOJímÛþ%V«»­”§ºò½³ïèzõÁâãÇ9ëI ŠÈJ“ÐTeFOó«ŽêŠrxÅbß^­³)ˆ†úóa*„äÕE×ÌsÍF±´¤ÎsÖ¦™pQuë@F É´zVݼf(b* ;P£yúâ´$Aå7  i\´§ž*&äP;œRÊwÈNZ±gk”È  ‹eòm€#µ à)•M)Ú€Þ¨œ´…yÎxæ€-FúŠ­ypÙ8­Ûu®k.î?-‰ü¨‹ÈÓÈ µop¸áz© •]éÒsÐsNY b£HúSLN?*$}iQSŸÖ˜döõ©Ä¨ƒ¨ ‰àqÛ4Ö|7½1Ü+çQ@r\ƧïéL7±ã¦jìùÝ!ëÎjȵ‹fBÐ>Ú¡U;‹œ¶ÞýêÌè¡@ LŠ 1(y•!ëÉJk«œœm^ôýL€QóÒ¬À‹ok¸õÆMV¿”)XÔqÒ¦ÀŠÏž¤qQÛÂ.&2È8íž•¡rtâ€*Y.ûÝÀp mM˜*–Ÿn#»õ©®\mÇZÍǘFsQª'Àõ’ ,ÄvéN„•ùyÅ&3žµeCgÞ¡Œå˜äTZ„þM¡3@ï3Ý]žrl»möÚ±t”Þ °®‚6 ¹4‘¨/îsŽ”š]Îå(Ç¿J·rÆÐ8¬VW´¹Èàg4Òªí«Y™LЬ&¢­lÄžkñÚfÜOë@íÐî&·íT²G'ŠÈµdó¶±³çÆà(e}€óÏ­gÞÝö À¨&»ÜJ¡$çµU»…ŠovÚ¾”CPÔK†þ*äµ+“<ƒн¬Mó„þ5+=y l°nàT'pƒ'¥)bßZY\ù „q@Z{îSµêÚ@8$öç~³ó.ãÁšô‹%Ø$¨â€15SºïN{Ô‘Æb{棽ÿÞûÕ¹HЃ@ÚX³O¾ Ì¢'rzÓ/˜°j²V {U5ãž:Õ‰†}*¦šÛÓ4«zBÛOjâùkÒGL×]«>Ë^:×!7Mž0h…šKÑ0®ÎÝY,¹=«˜²ƒÍ½ßŒŒ×\Ê©ÆC¦3’zÕÉWëY¶¬v¾µl±ÙÖ€9}{O;G5Äͧ˜¦+Œ}{׫¼S‚øÖ³£¬ªÌ‹Èéí@Uƒ´S…=ZêRpcÉ<‘\ø¶h¦ee ŽžõrÖ|¸VíÖ€4ÅôÑ‚?J·©º"²dÔQAë¸7>”M`ÐG»­^‚™D±K$®ÜíYÖ× lHF=*õ–n.{š·j…ât6Ãõ«Ò DÂŽk:ù€ ½è&eÜÁ@­k4ÙÖb¦ùÆ=kQ_F:süe_øRôfø_ãÃÕ~g¦7üŠpÿײè"¶´ïø÷_¥b¿üŠpÿתè"¶´ïø÷_¥U?…Wã~¬»EU™‘O÷ p^*ÿTõÞÏ÷ p^*ÿTô·nßñ*µ]Ýl¥8ÝוíŸCרÎ+:6ww¶íÿ«UÝÖÊSÝy^Ù÷ô=zŒàùÍõÈ`pi!²µî¢ÁÝÏozÌ…ÚR]¹&Ÿ*nnjkUR¹#ŒSä—R1Žõ%º´òþtž^öw­;[uŽ0}¨Ä*B{u¢ðì¶ È©â\Ÿ_JmÌ"@  ÂŽ"]I>æ¯XÿÇÁ>8 D¡±Æ8¥±yë@—#1àVX eÜJ¹qq½Îj²£/óœÐ§¸;1ß•™s)vÛž*ìèJqTe#© AG ŠuõÒAmÀSÙÄ1íã5ÌëW™m¹ŸjÀÖîpŽsËWÊKqëë[××ÎÄôÐË¢Tvól}ºâ°'ñ…®Î¤ÖUÇ‹`Ý”È?Jï$¹SÇçY×— ]„šä£ñ,Sœ±8­Ë}FÊhAY>ôñ(ï˜Ù†ù<Œ±â¹/à[†Áç®jÜz„,6™>´Ò›—¹jð6$bNH÷¬Xu8­Ô*‘õ­ÛfÞHÆdï“@ílJœÖ¤P€¸³¡Ôíü´_άN $úТŸ8È |£óU¾ßa‡8¹®Tš—ƒÈÆ Dƒ,yïL’qÈT^vÁ»=hi$ Á;ÔO>'Š‹ÌœšI¤H×’ÏJÀPÄùSVþ0&¨Ëvdbˆ9úSí­Cä¹&€$û|…‰É#°©ÓL~QŒÔ‹l‹Œ/JœF†ÎhªÚK!ùš¬Å§ P_ž}jÓ`/{Ô˜À:Pq["0 +KÃmµõ#»oúD9Çü´>ãùþ¡¤‡-øUß6Ù5#»nn!ÝŽ²qüÿÐóÕþ$>‘×Cø5}憷üŒ×Q]Ÿú‘ô®1¿äf¸úŠììÿÔ¥t†=ïü†ì¿ë°þF¬Œ´ð/éM½ÿÝ—ývÈÕoÞGe´’6ÐY—?—øRT§»švr ì=k. jÞ@s ©R‡iÆ)ˆ³#)nÝi²²yªfî2AȦ›•n¸  ̇oZªîÅÎ1ÍO!$㊡-ÁÀAÁ  zROZ‰¦–WÊ«bŸ °R rjòÄ0(’G,„nൂƒ“È5)/^*cƒ?¥F¶Q"– ó}J°(ÛÏ”åP9暀¾9àPÅx÷¦<Ê©ÁäRÊv',*šnš@A@¼Ë”UúU‚›mf_¿5ûÆ€* ×W›ÇE«WR’«ïÅ$1 q»Ú \És¸Í]vX-V?â"¨Eùº““Í%Ìû®&¬Y€ïZ±8àÖdÒ1‘ÇnÕzWÁ9j‡š “@“prM[A„Î*«’Îvã5,~`Ž(Â[‡­]>Aȹ$-Ù±Î+žx ÌXò3šÑÒ†Ë@1[^Ym£b²´à<°:ó[fÅ 1º¨_Û,ªr:V}ÀœVv£?—nÒ€P1-ß“)ˆœ˜,³(#¦+ Iç\3žK6k¨··ó#P; Ã’ ]ª[q=jô7.ß18­„ÓÎŽJÕŽÜF½:PU–œ‘9gúóX¾"¸XÕ•N+¥º”E1â¼ÛÄz–B äÐ ÷mÙcÈV|™1\)õªò©Ý½h däŠpùŠ»…­iÉf-㈟½Ö€:  ÚžàW§èÄûšá<<ç$f»Ý1pŒI  k•ÍógŒÔóPzQܨkÇ#Ö’åJÛçž”»¤¦aÎjðosלTší 0|÷€ï@Ü ©žx_K_ô¢sš±pìäœôªÚbþüâ€'Ö˜ÏJäD€Îç×¥uâ‘i\”M5öÂsÎh«Ò!Ù±NI­™Û1ÛŽ+2&û;,dpZÑf@í@lTî~õbW5›6EÇzK¤*Œùâ€.ÂwFyô©d·YÈ<öªš{“±?•i!,:þ4ÆkZ_’Lˆ¼šçx°:žø¯J¿·ÂU€þ‡¯QœŒç®;ÒCcÜü U¨ÛŒ`b¨ÈÜ‚: ½jLŠÎsLDÖ±³K“Ðt­tQÐô^(•qýïj²€äzЈ€^sK#ddu¤VzÓKúP[€#‰ª o• :ší€‹j vÛô  "_2PǧJ‘—3Ú’Ô„\ž½©Ò:‘Ÿ¥%ØØªª*¬%Ž;Õ’ZFºTSH¨§8À  :”¾L Ù<õ®#WÔ8_Y…mk:€ I9Qúןêw‚òä•Î3À ZMÀ“ž{Ôx!zg5;[²D¤ô"¢’6Xà ÐcÖ”ÌюiA*{о“l7‰Á«7’á<·Uk+¼@W~*ÌGíZ„IŽï@‡áŠ®ýXsšêUã%Bð3Ö³m-ÓËÃc…©D›8ãÖ€5#¸ 3Œz çüMt‰lÃ<°À«âFD.GÌO¹½ZÞ[ùÀfÀ 6Ga8Ûœƒž+Z-Zí-ö‚Üm[ø~äPë¹»šµq¥¤?.Áœu 5î/.$ÞKñÖ®Ø\J§nÁ­Èlâ†6 9=8¦Eo¯# Šf?‘t 8×akpޣޙ®FâpàÓ๞Ԓ¤â€:K™Ï¨¸ˆg¯jÇWmV<Ö¼¬±îè(ÐJ0ã­U¸¹PH¦yÞ\²vÅcÍ#OpBŒÐ¯®„ § ëŠç®lÖ`r ðk«ŠÁ (?J©¨Z®Ì…â€8ßìÇgÆãZ–š°å›43,oœœf®Úݰèh'ðÒ3¤Þ§¥9¼ê2[óZ°É4Ç)óm«SÞL~W'Í`ÛøL0Û¹³ëVW±G÷¤ žÙ­Ky\}sNšá›<Ð=÷…ÖAGÊžõ‘†n.$ù "»=ä‡c>E]´¼†ÎØPd>¢€8¹¼!uoæ` íTN¨D þ»Rñîˆ#¯¥U™ÙÀï@±Ñu6Q&ÖÇ®ië¥^í?1ë]uåãF"S¶›’¶ 8ûùé@\ÝÂ̬_µ,Þ›ÉÔǺɑ9=qWím-ôþ]GÍÒ€9•“Spó)§R¿ï3qךéÖd21|ô¡ì­¦|€¸#$P9ˆ®ã$îj·Œî£ Em.‹`Ë‚ÏN*¥ç†­ÌfEQŒPIãF,O5b?}Òq¶±†]÷l$/­TŸÃòC®Os@’øÎ4f¢/G{/Í&¸1¤^·kµ‹~9E#é–š¡À ¤šÓ†öN~uä‹£lÌ\)ÃW¾‹—ìé2:ü¬½J…K+ɬ<[s mrHÏ9­ëoÆ-ŒÐ Àôªd]Ñ-rþ1´˜cx·iâ I”"œûÐÏ–7Þ§ðÓmmDîÛûøwc¬‡Ü?Àô9o©Æñ€Ž9éZ^|%ónÆfƒØêçÜ>}CÏWøùþG]àÕô_š¿äf¸úŠììÿÔ¥qÿ#5ÇÔWggþ¤}+ ä1ïä7eÿ]‡ò5ÊüZ2ÄÃßiíé´×U{ÿ!»/úì?‘¬y`³ópóO…!ž"×·ð.rãă9fâ»kk8Á²çÑàyJí\zŠb1‡Š.–üêuñlª¼¹ãÞ¤¹Ñ-ÀP[Ú³ÿáór Ðáâ©fuÞNßJÛ³ñ5º…~µ……™?†n ÁSh¸‹ÄV¯˜ Õ¶Õí¦Àμ’m6þ3ò†Àô¦Ç6¡hÙÃâ€=¡gCÈjœž>÷5äpø¢þä>E]¶ñÜêG˜‡Zõ8• iûTò®ÏÇÖÇ_—ךÕOZ]'É2äûМ®^_-NA=kFÖÜ"†îk*ÊXäœ*œ÷¶ã}ªG­Vºp»‰'ŠÎ¶Cut\•zTš„Á›Ë\n>õ5º‹klúŒš¥©6ɦ=(…|¸wzbwtXŽ«Wj©OP/3^Mi`D€k>ÉO$¹àš½#æ5É &›v@4ÈâRLÓ~Mädfž˜-9 Œ1eìxÍ<—\ŒúUÈSj’}©©LÝ@—÷e¿t£¯Z}•¾c;»ÔðçÍm$;p08“¿fº*x­”ÚëÝEdê(ÃŽ=jÝŒ»àÇ\P¬J‚;W9¯ÝµdS[×åÂÍéÍr7…¯î ¯AÖ€(XDò:œpk´³ùŒvÁ¬û+‰W€³m±  q®?Y' ½*f)|ò@ïX×—k’N  ­SÛ²ô8õ¯0¾ºóî™Íox‡UÈêO…sK"Îh>zÿZ•£Ýã¥*.ù?wڬΪ–ço4šmºK2‚¼Š½©€6©è8¨t%Ý+98«Z– ã¨Ímø^4òåcÔ+±Ó_005Åx}¾VŠí´åU´f<“@r|÷MƒÐÕ™¡ÐîÇ5[ Ý7;«Fñ´ü(}5ŽÑñ×L˜çø©Ú_oŒý*–ò Ï4±rA³ÏµSÓ×·1Ùàôã½UÓ3jn¸Ñæ¹½2Úatn@<èõ•܈§œš~Ÿ­©FMÊ·— 0§Ãpð1ŽN‡¡ÍbÆïiªs†5µ:,Ђ§æÇè#Û+ÉØžÕ%Úo¶!sÍfÁtГö­$˜KGN”–I²¬H'Òµ‹¯›î`3­[™¼˜6ç&€ žffÚ:Õ'ÌB¸ëQ³±Éõ©-¥Ã`Ð&¥¢"?œ§&ªA*ˆÞ=½8®žæmêc' ×={n!¸VQ×®([8Éž0Aä×aÉç¥sºN·Ål5Ð`ç¥fj³‡˜¨' ´Œ»U§f’à÷É­5S°$t}.é¶þrÒ-‘æ¨*ù×c#ŒÖÓ DïYWþ½¾øðõ_™ß¿üŠpÿתè"¶´ïø÷_¥b¿üŠpÿתè"¶´ïø÷_¥U?…Wã~¬»EU™‘O÷ p^*ÿTõÞÏ÷ p^*ÿTô·nßñ*µ]Ýl¥8ÝוíŸCרÎ6`+×íÛþ%V«»­”§ºò½³ïèzõÁñäa9é!±“‚äóZºdM·yª8 àZÙ·Œ­¸QéLDñ¹f'ùU¸ÀÆsÍS‚$ÞÀ‚€H‚:ŠlR+ÌÅ6\¨aÒ¥ÓÑDm#JžrŠ€ŽÂ¹­ZýQ^â¶5…X[çzíùPħ4“¬jRhÁ;M`¡Ì£4ë‰|Òwf¢FÁÏ4¬%WB­ÎÓŒ(óªë(XŠœóUó“ÍJpy§ ¬qȪù8¥RzäÐÛI68SÖ¶´Øß$˜;I®mde“qÖŽ§, y8íí@Ž%@AÁÆM8ÜAàG½p²kï€9¨ÿ´î¤$!ûÐq-ü/’¸8è+êù–e`8³â{©±ŒŒU“k$–šÒš¸œ6:QO©É*–=i!ÓŸä4«§1ë@’\LÌ»YZ„LåIëZiá$UÉ@X (‰‡q]Õa¬Ì¨\Òõe8âµm@dÀÀ fm6Hœœ𥵽’Ú]™ã5¿z…~ëžÔ-Z52GÓ-Ìù”x=jæ‘g摇zç#¸rà7CÖ»m l´CÅO<($w¬»õVLbµç“q5“¨Êc ú÷ >Ô]–íÔòŸÎ¥² î>gɰ?â`DZ«6c«Ž nYo¶Î ÁkMtÉopÙ8ïY0Êí³§_!NôµéÈ̇ڵ.žv„ v¬ÿ.`¤ÍfOjñÜ "®[ÚM€xÔÍä\oε‚0E!ºPTðHÈNÞ”–©½q"’3È«—˃Ðz}±ÝÊ(8á…X…ü)&Š9Ï#µ_DBÀ²u«c…£áyí@ûØ&@Ý‘Sý„.ÒŽ+TÁ ü¬8÷«)oo:Î1Ò€0Ò%ŒòÝ:fq08‘·ûV¬ºL'$1éÞ³NŽZsó|ŸZ¨dq ('5^ÌÇzzÖÓi ls»3PfÝCœ `O\P"´°­I!KxarG¢»;?õ#é\cÈÍqõÙÙÿ©JØæ1ïä7eÿ]‡ò5ãügÚdg÷§ùVÅïü†ì¿ë°þF©ø¹í­„ƒ#scëHgš5ʪ2yéP« mÜXÛHp§&›nbQÆqÍ1ß–Í>r&´#EF ·Ö‰ðøqº&Æ*´š=«–4n ‘Œö¨ʾ µU£½·$ ã½SšI”’ÈÜЪÚÅ#äâ. ‹‚«Y)v釱quWE œÐO¡@ÙÄc#Ú¨KáèN[Ë•kŬE¿cpMhE,ÌGÓ4ç·Þg˜ò£µRõ¸&7b}«Ô"cƒP‹tä”4çÖwºµ„ƒ%ð+oþ›¨0’?Zß{]( Å`]è‘ÜI‚ƒfÇÆPË>ùO>õ¸Þ)µžßÊIFãêk‡¸ðò#¿.+"M2ñ$Ìlxé@Í¥K ƒ~õË õ¨ï¦Y¥!Ï®+Êmu­JÇ Å°8­›:1iI$úÐo »a•qÅLacã¥`iÞ%…Ô–a’{×C¡ éò2œûÐ 3äƒN€0˜®;Õ¹ç<ŒS Œy»‡4ù@†2Í®^îäË#sÍoëWk¾Îäb¹ˆOÚn€ó@zRˆ»µrFõæŸ ,p¨íŠ…ˆ2cuT¼Œf-ÉÇZ«¥Ió°'гª·‘kíŠÅ‚ì[BÎ}(æ»|?->ñëŠÍÓÕU7¼Õ“<Ó^\äƒÚ¯Û‰}(sÍU^MIøæ9¬5Ï4‚ ‰s„lzХƭ¿<×;ªjLP¨ì2j̶Ï;Ïë›Õ¦¡üÍ@ÝôÆ[‚Ç5\1PJŒÓåëÙ>”©‡åë@ ŠSÏcSÌO‘j®‘Û¸«©™Æ3ÅE¥Ý5¼àtµç&PŠÅ[9 —æ«nÌ`@Ãó4»¡p[ÍwV9ûJâü<ƒcšï-£Ùd1È"€1J¥ÇÞ«ú“m´ãQT›ÑŸZ~®øUPJ±¥ŸôvëU.Wdǃ֬i£Àš’åCì8  ®nš¹ì*¶”ÃÍ'5-üª¶Ê¤Ž˜ÅG¥m,Æ€«¸Ü˜æ–ÉØÇŒqUõVkE®YDDGž(2öÙ¦œºœQÚß4/åÊÙÖµ ‹|Ïè+]¶÷–€4.@<ÈúJKK¼|‡µSÓ®²»XñO|™C àó@Jÿ2Ÿzžf2`Š¡i/˜Sõ­-™x  »wðCÍ0Õ4qn$sHÖd)mÜâ€*ÊÃ'?fO š|uÅ[¸ °äž•— n“ïw ‹K…sO½¾•–r”À&ë@öɾp<Õûé•bô5BÑÊÊOTwSf`Ó45ˆß>ÿzÑšPdDïUlb#hǹ¨®§ò¯±¹ã5X¹S’]S5¡% ±”¶M~g¨?üŠPÿתè"¶´ïø÷_¥cÜ'•á„9Ûn«Ÿ\(­;þ=×éUh¤É¨Ó“h»EUE?Ü5Áx«ýS×{?Ü5Áx«ýSÐÝ»ĪÕwu²”ãw^W¶}ý^£8>E*„cœW®Û·üJ­Ww[)N7uå{gßÐõê3ƒäkÄ¡i!±ñæ ÖºbÌ ãšÇ‚ß÷ÁL×Cú±LCÇô©r Ž”åA¸cÒœÀŒŒPR^œƒŠY°ª)Òvýi’“¥gÜH†:Õ‹CÜúU–òçã¦) ØT1š’á÷ÏÁà º’¬VDžáY©÷K­gꚉŠßb·&€S¿ü ð5çºÕàšFNÀûV½î¡åÆÙnOl×#w0’RF}h9•^òØKjW©´PñÁ°ŒhEã̃êú;xÜ8  n"p@éYr¢s´š¥q®™[jŒ.8ÍR7r¹%b€u ‹p_ŒUë[‚P+Ö²åiŽK†ö¨c2ï+@wv†b1žõ=™0ª«ªG,Š:w©>ÐÀ©ïßÚ€7c "«/5 fAÀÏ5•mvU¹5»g,Sýì}Pufl‘ùÓâLJÚûNx*´ö«  l®Û±ÈÏZ…–D `‘ëšÓ‚³‘ïRCî]¹  ´»d úUå¼ dP`\“°’(ò‘—n"€kyPƒÄUylíØŽ÷©šNÚ C³€­ ¡ÛÉó dûUtfÞv1âµCȇ~”•ÏÌ1@o¦Ê¸Ëfª­µÄs’k}Ýþ^§@»¤"€2⼺ˆô8©—X3øV×ötL§wR}6.Ùæ€*.±pz×wà»…›I¹‘Xö¨— ãø—¼=}yô=.”qò¥v¿á6š-â’W7±ulu*1Ô?Àô [þFiþ¢»;?õ#é\cÈË?ÔWggþ¤}(÷þCv_õØ#TüZ…ൠ×{!Woä7eÿ]‡ò5ˆÓÌ[aèXÿ*C8Ç´rÄŽ½ê2’#Mn4X<Ι-¨šb3a’dä •.Èn^œTÛv55’=¥ˆù¨)§‰ÊŒÔ)¸.* “2õ8©XéÖ€!¹Ó-ålmÀõN].ÝNV¯É,‘°ED×Èy  –Ò’)SÒ”ÙO¥‡ã[®eÉàV’¤nƒ¡ DËwŒ3cÞª]ÂpT°ë§šÚ7ª¾€¢€1GˆŽ×\»Õ»®F 5º.r£5ZM)¢ànÀïš–ù“a ŒššÎ· à#Ò²e¶œ°Ã6cVc»¸‰ í%Æ‹¹RŸjÌ»ðâʧ5¦5.åH4­|$PyÍr§Ož…Õ‹}BîÈàƒé[À,¼‘Jlb”Bš­kâ9Xù?ZÚ¶Ö‘—–ÚE`\é{˜“œñŠ£™âM¤Ù  ­SPûL¹ •óVt8WvüNrk*ÂÙ®» [šY û:PÓŒ&ª`b|ñÅ[—;~µ—)t”ž¤Ð-jë|â rZøÝ3ˆ×¡«ï‹¢3–=}ª{;LâVü(Övˆ2¹$óWš0ÀQVá„ø«vöãq$P M1Za•âµç‚(-° Š|#läqY:æ¦"„àž(š×urƒ\íÁ¸˜±ät«z¶¢÷+O5E• ž¾´žW/йNE6¹f ƒŽ+RÛlqk³& r{ÖµÇî!†9½«3ÄV¢[?9 Vµª$žzg5Vèùöï ^ â€8‹k’íô­¦“Í…Y°@®_P¬.sZ–7AÕTž kÁ0…”€q[v·a”ñÖ°HÂŒw©mnŒr={s@*æÎ3ײm=ù¨ ¹ÚIçÞ‘œA  ýM×Ê#88¬;Eă-ÆkWUFÇ¥dBŒ¥wph²´a±ztíT5IAmµfÁ‚Û)`zV}ü§nÔ¶k„f<ÔQÆàwç½KÛjÄTv$›¬õ  •AôÀ¬I›Ì»ÆzšÝœ•·f8àV¾÷Ô@Á{ÿ"ïý±ʵtïø÷_¥e^ÿÈ»ÿlGò­];þ=×éI »ESÿp×â¯õO]ìÿp× â•&'  ›vÿ‰Uªîëe)Æî¼¯lûú½Fp|±cý+Õ->›iŸ™ìåÂîÆNW¶ï~¸=zŒàò0x3V÷2Â~’RBÚ°“üêÜd*òz Óÿ„kRòöùIŸ÷ÅÃZ¦Üãξ)ˆÏÎ2*PK/AWWÚ\ÓðqJ¾ÔÃgbcÓx  §9=:T>Ô Ú>Õ #OûìTSøWS•TŒwÅ^Mó;ry¨íHG¿é]4¾Ö6úÉRXø#W¶lÈþÌ”‡<‹$tâ¸^ÿË.Aät¯X¼ð^§qTH#»×!}ðƒÄR1Y…>³ð '¸¹y›’y5]`’Bv£7Ò½n?‚úÒà³Z3cþzŸð­+_…ZűœzKÿÖ %²ðõÝË|ÈTzšß³ð¤qÒ±'Ú½=<¬ [ÂOþµMÿ§€1á%pöö1Dª>•i¬Œùb»ð.¨§;b?öÒ¥ÿ„3V €ÿßÊæm-•B†âº;kh,’:u&”x7Y…ƒþþU¸¼/«¤;b'ÚJûв­AŒ>•ÐÿÂ'©’KGÿŠhð†¦;"ÿ¾Åae ކ¯ÁpÊ@ç>•¥ÿ¦¤G)ýö)çÂú–83þø  ßj~oçM$àéV—à<¤gþ*äzòõ+ÿ}ŠÌ +ÖšÑü†¶±/qþ¤gýñLmP#Rÿßb€0OqÖ¥Œy5¨|?¨äâ$ÿ¾Å4øwS$~ê?ûìP;©B$Œž8®QQÀaœƒÎ+Õ._ÒºáàÍK¼qgýñLojÙùR×JåšÖ=¿tUi,T±ÆWØw®Èx/VîŸûiCx/UcÿßÊᤵxy4°Ü´;[&»Y|¬:`$÷“ÿ­U_áþ°Ê@[|ÿ×OþµA§j‚áó»ÔUË’¡3“Þ›iàmzÕË(¶ü%ÿëUÉ<'¯:‹|öýåV‚xÊXdjh>aUÇ‚<@ ;­òé¯ÿZ¦‡Áþ!…²¦ßñ“ÿ­@‘nT ¢Í— ã5°ž×vâDƒð“ÿ­H|-«—}|Êçšá …ý*5Øú:Ý> ÕŒ…Œpßu$^Ô•ÁtÅa‡Rp:ý)­m¸ôÏá]?ü"·ƒ……ÿ|Uˆ¼;y`¹ÿxP–¹†?Jž;Y”†×Z<7zŸ%yÿlRKáÝD®ØáÛ.(Ÿ¡/Î{Tr«ÃÒºðƪã‘þ)¯áç\“?ïŠÇ[”$aF>•ÒøZE:}Ó)Ú>ÓÎqüCÜ?Àô4¿á¿ …3ïŠØÑtÛ­&Êd¹Ú…爩WëóŽ£òÏ>Р(¿üŒ³ýEvvêGÒ¸Öñ,çÜWeiþ¤})‘{ÿ!»/úì?‘ªþ&mã¶v鹇ò«¿ò²ÿ®ÃùgˆtY5¨ Š9V?-‹ÀóÅ!œòê<¼·çWKÄê`F;U_øAîÁÊ߯>ªjX¼!¨ÄxÔbǦÃLE+Ÿ•ÈŠ£råJZé?á½ Ÿ¡¨dð…Ì„´Äö4Î’8ÏZ•w8ú×@ž™q™¢l}­Â=8üOøP7öF“8¨ÍƒùÄmÕÇ¡ÜGŸžŸsþëqo2}ÏøP.,02x#¥HcXâÂ7ÍÞº ¼?w*àOþáP¯…îTsqõëþÌÊfA‘OY¤d×OÿÔØÇ™üOøR?†%dÛæDÔÿ…s àÏóž*ÿ“ F~PsW›Á×÷-ÌKøR§…nÐcíQ~F€1Ò‚£'¶)óèÖÞYù{VÊxrõµBVN‹vWi–Ìÿ…p¢F*3Ò²f²x¤#iJôèô ”÷’}ÏøToá™$3Bþ夘W“ÏLS­åÁ[ ú×yqàžBâæ$öÁ5_þÍÈl®¡ÿ¶f€9Ù‡Ùí÷“ka™ËmûÝ+½ŸÀÓÆ±N£þ™Ÿñ§Åà ãÛºòÛÓä"€9«+C¡À‘ÞªÀÆ+à×xßÿ€ç$¹ò²YÆ>µÁx›X21Tn¿Zõ;‡wó‚?µb_ûdƹ뿂7wnYµø‡ý»þ*€<2ò?4“’q^½ÿ 2ëËÚ5臿ÙÿM_W ŒëñÓ±ÿâ¨ʬÓ/÷~Z³xÂ@„­zÄ_'ˆq¬Äíÿ⪭ßÀË›¦É×¢_o³ÿ³P˜ZvRÄëVï$òâ$Õèü»„¾!‹þOÿW%ø-u5¸‰µÈ²;ýœÿñTã627Û‰#ŠØŒù¬K W¡Ãðâ¼Ïíø·ÙÿWãø5q8Öbçþ˜ñ 3Jcå"ƒò滨¸²þíOkð®êÚ0ŸÚ°¶sä‘ýkq<t–â/µÄp1¦€8hGúQôÍ=ÆûÁè+«_\‰wýº/¦ÃJž¹I¼Ï·D}¶Ââ>ÜU[fÌäû×^þ ¹uÀ»„ÀMC.crßmˆçý“@…÷3žjåºì·^œŠè$ð̸ßÅÿ|·ƒn#@¿iˆàc¡ "(ËßäŒóZZ‘+ ƒøWC‚na”ÉöÈX“Ÿºi÷> ¹¹`MÔ öI  KF?fgéPHs9ãÕAák˜WoŸ CUäðeÌ’oû\CÛ€<»Å¶Êe«Û­sv¼Rí~€ñ^Ǩü6ºÔÚQ&?Õ“ýk!¾ ܳ†þÙˆéÿÁµ˜KÇÞöBØaÔ{WQoð²òÜ‚5xŽ;y'üjò|;¹LãPˆçþ™šäí®¸Úx"§ó·äÏ­tð®n¼ÍãQ„{ygüjÄ~ºCÿПø *ÿæNõ˜ÈUFG=«Ñäð ÌŸòûýðj»ü8¹|ÄÂÿlÏøÐ;§KºÔ5Fäî¸rzWmmðþêÜý¡À¦¿ÃË—$ý¾Ø4ÇÙlA=itÐZ~=k±‡· O·D=ö}§€n-N~ÛÀ wRvKb0zV=Š“qœW ]x"êå6ý¶%ÿ€“P[|?¸·}ßn‰û„PQ{ÿ"ïý±ʵtïø÷_¥fj(bО6ÆV §´ôïø÷_¥$2íQLDrŒ©®K_´2ÆØØ0Ȭû»A(™ÿ «?úàŸú¨[”r~Ó4;ÍOÖµm¤ÖÙÔÝ]Ê@™.·|Ñnê|¨N˜cÖõO8êÚ (ÖÆ™ý•åG·Ëóü¬ç÷íý÷ÞÆÞØæº¶Ð´‡ÔƦÚU‹j¥Ñ·C(ÿã?­?û#LþÔþÓþδþÐÛ·í^Bù¸Æ1¿Æ=ê–âg¦]^?Øô‹mE´Ô»Ôu‰^æ4Frc¼|F»Ã.Nön„â3Z½ ø†ö÷PÑbº»‰âžÛQWuUU¸x."Ž9¦äÞØcè1Ò\èÚU홳ºÓ,çµ24¦ `VBìÅ‹m#%‰'®I=è»Ñ´­BÎ+;Ý6ÎæÖ,ypMº&Œ ãì5]__Ô4Ûkmqí­î®ï5¼1;:Ax‘C´²²Œ+c89rpG}UmôÛC¶²¶„Äc1Ä«°;p08ÜÀê@&­PEPEPEPEP=Wì_ÙŸÚ[~Ãä¿Ú7g0wtç§§5•àÏíìø›y˜ó_ì~úÿ³ç÷~wý4Ç_Ã<æº("ßîËÿ]åÿÑST6ÿv_úï/þŒjš aEPEPEPEPEPEPEPEPEPEPEPEPEPSéŸò ³ÿ® ÿ Š‚§Ó?ägÿ\ÿAÖàQ´ñW‡õLZv³c0ÚLVS¬î`»Š¡$(,2ØÀÎIš±§k6zšþéöHe¸‰b€íäJb‘€Ï*Ú\àœW £vÓá·†g—Sµ6ŽšBEµ«Ã*«On¸i<Ö RŒç°â¢Ó-ôôñVyw5°k­jÛd…oí%1Ç€ÁX·ÏòwíhÅõ +Ë×SÕ›Æ ú…µµèÕ¼´‚]Zewµó0ÙˆŠ0h¹ß¸àœ– uµy#¾Ôî/o®'}BþY®£Ž5º‘UV<íà ÁÆ@àqG@êuQEQEQEQEQE2i¢¶…æžTŠ(Ô³»°UP:’OAO#"«ß¼qé×/5»Üı1x?1¤åB÷'¦+Áºf£¥h^F¡&7Lò[Úîßö8IÊC¿ø¶Ž3ø  Vÿv_úï/þŒjš¡·û²ÿ×yôcTÕ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ŸLÿUŸýpOýT>™ÿ «?úàŸú¦·Õ£x›M×ö<_4o™%›O¸†7CŒyU³F#ž•±T ¢Š(¢Š¯a{o©éö×ö’y–×1,оÒ7#Tàò2ë@(¢Š(¢Š(¢Š(¢Š(¨n³šêáŠÃ $`¥° dœM: ⹂9à•%†E’#eYO ‚:ŠÌ·û²ÿ×yôcTÕ ¿Ý—þ»Ëÿ£¦¨QEQEQEQEQEQEQEQEQEQEQEQEQETúgü‚¬ÿë‚è" ªCÄZV‘ac íÖÉZÝ"Fò09!AÇãU¹;$)4•Ù‡áí ]´ømoZ¾¥ý ÚÃÌpƶӘFÐ6Æ® ·3ùÉæ±®´¸¥ÑõÄðXÛ¿‡nโKG‰®.YWÊH̲%Æs¸rk²ÿ„ßÃÿóù7þMÿÄQÿ ¿‡ÿçòoü›ÿˆ­U*‰ß•ýÆn­?æ_yoàMø¿RYtv±:m C$9I%ó.7±'† ™c–óUô› /ê §Í«(AªÜ27œÁ¬å,&cÎ<М7C´ WAÿ ¿‡ÿçòoü›ÿˆ£þÿÏäßø 7ÿOÙTþW÷´§üËï8}O¸¸ñ&eÐc¶Žy&‡T‹û"u>[A/É=ÌŽVà ÎÒ Ç#8=‡ÃË+m;ÁZ}œ:kX\A qÞÆÖ†÷ ‡~ToÉ|du8«ð›øþ&ÿÀI¿øŠ?á7ðÿüþMÿ€“ñ½Oåp{Z}×Þt4W=ÿ ¿‡ÿçòoü›ÿˆ£þÿÏäßø 7ÿG±©ü¯îkOù—Þt4W=ÿ ¿‡ÿçòoü›ÿˆ£þÿÏäßø 7ÿG±©ü¯îkOù—Þt4W=ÿ ¿‡ÿçòoü›ÿˆ£þÿÏäßø 7ÿG±©ü¯îkOù—Þt4W=ÿ ¿‡ÿçòoü›ÿˆ£þÿÏäßø 7ÿG±©ü¯îkOù—ÞmÝÉ46sKonn&D-!ÂùŽ'ŸZÈðžƒ.¤Éó‰&žâK—Ž>!œäÇ=võäñœTð›øþ&ÿÀI¿øŠ–ßÅúÕÂAë $!WÌ‚Džƒ, PéT_eýÃö°}Q-¿Ý—þ»Ëÿ£¦ªö‘ÞÉl²¤6ûf&Q™˜–ÇÝ÷©ü‹ÿùãmÿÛÿˆ¬ ¢“È¿ÿž6ß÷ý¿øŠ<‹ÿùãmÿÛÿˆ¦ÑIä_ÿÏoûþßüEEÿüñ¶ÿ¿íÿÄPÑIä_ÿÏoûþßüEEÿüñ¶ÿ¿íÿÄPÑIä_ÿÏoûþßüEEÿüñ¶ÿ¿íÿÄPÑIä_ÿÏoûþßüEEÿüñ¶ÿ¿íÿÄPÑIä_ÿÏoûþßüEEÿüñ¶ÿ¿íÿÄPÑIä_ÿÏoûþßüEEÿüñ¶ÿ¿íÿÄPÑIä_ÿÏoûþßüEEÿüñ¶ÿ¿íÿÄPÑIä_ÿÏoûþßüEG7ÚíÐI,0lÞªvÌIå€é´zÒZ(¢€ (¢€ (¢€ (¢€ òí]±¬ÜsüèˆëÔkÊ5ÆÆ·qÿ\àÿÑ×~]üo—ùXÿá|Ë7zk[Nöés ÍÂ;#ÃÈXmÎãʃÐÔ"Æù¦xVÎàËÐDÛ”rF8«ÒëáõÛÉÖHVnL2Çn¨ä²8L°PÜ–~¦¡Ó5UÓ´ßgY4<þn yg9=G~ÝýE)¥ªþ¿Íqƒz2œ\\ïò –]ƒ-å¡m£ß*MF$´Ôîí£,Rž5-Ô€ÄsV ü‹0{Õ´¶=ÆñaÃc$ƒ€½Ö¨j·QÜë³ÂÛ¢’âGFÆ2 5qrrÔ™$£ ÝôoªÛèßZ–wѾ«o£}YßFú­¾ôg}ê¶ú7ÐôoªÛèß@âýì©õMÄ Îp¹ö¦jQKkÌ3)IQAúpúõOœžq+pß³Ç|g½?YÔŸPWb¡#Ž*$í@8ïõ¨w¿‘jÖó=NY¿³¬È’0žL)Œ“÷G|ÿJ· ”ãËt_]È[?¨¨4ÏùYÿ×ÿÐEZ¯š[B4‰<¼PøûÅr?,ÿZ#ýã«õUÛýM:Š`GÌ÷’FÃ2¿ÔÐVo3"HÂgî˜É?ž¥IE2A)Ç–è¾»¶QJDž^¨|}â¹–­:Šlb@¿¼ucžª»©¦Æ³ýä‘°ÇEŒ¯õ5%Y¼Ì‰# Ÿºc$þyþ”² N<·EõÜ…³úŠ}Ò$òðCãïÈü³ýhŒH÷ެsÕWoõ4ê(8Ö`ß¼’6豕þ¦‚³y™F?tÆIüóý*J(’ N<·EõÜ…³úŠR$òðCãïÈü³ýiÔPcýã«õUÛýMQÔaiûÉ#aæÅÂÆWþZ/¹­ §ªÇ—ýµ‹ÿF-'°"*(¢¤aEPEPEP\n©à›ÝRH5 íÇŸo˜“³."®Aö»*ŸLÿUŸýpOýV´ªÊœ¹¢gRœjG–G›ÿ»׿ç¶ÿŸÿˆ£þÞ½ÿ=´ïûüÿüEvð“Žÿ„«ìŸó þÒû7™ÿL¼Í›±øgø©§ñ…‹^›»ÀµµX¡µ‘¤bIaWq‘°Ûò£¡Æ2¤×W׫w9þ¥G±Ã»׿ç¶ÿŸÿˆ£þÞ½ÿ=´ïûüÿüEuçÆV']Ó4Ø ½•/íå™f[9ÈB’${XlùyvÜX›FìnpøŸG·ögÚÏÚ|ß'>Kù~f3åù˜Ù¿û>Ô}z·pú•Ç ÿ ï^ÿžÚwýþþ"øWz÷üöÓ¿ïóÿñÛ\x¿CµÔEŒ×n&7 k¹måhüç ,~`]›²ÃŒäu8ÒÇâíV» u![7xç“ìÒìYO,¦ý»KîÀ c@"¯VîR£Øâ?á]ëßóÛNÿ¿ÏÿÄQÿ ï^ÿžÚwýþþ"»cã tû›énä‚Y#Žqqm,O‘‚¦äu $`ãyàÔ?ðœèºîüèÆçƒû>ãÎUþùfàŸíco½^­Ü>§G±Çÿ»׿ç¶ÿŸÿˆ£þÞ½ÿ=´ïûüÿüEzu¼ñ][Eqo"Ë ¨9ä2‘Aô"¤£ëÕ»‡Ôèö<·þÞ½ÿ=´ïûüÿüEð®õïùí§ßçÿâ+Ô¨£ëÕ»‡Ô¨ö<·þÞ½ÿ=´ïûüÿüEð®õïùí§ßçÿâ+Ô¨£ëÕ»‡Ô¨ö<·þÞ½ÿ=´ïûüÿüEIoðãU’tKË›4·'÷†)›opP?Zô‹¹'ŠÎi- ΈZ8KìÞÀp»»gÖªèÚÕ¦»aö«FaµÌSC Äȼ28ìÀÿˆâ“ÆÖj×ÁÒObm3þAVõÁ?ôVª®™ÿ «?úàŸú«Uȶ:‚¹ê7zh©õõœwZ†y,-EÄżΡŽLüȹœz šéë/ZÑF°,™oî¬g³¸ûD3ÚˆËòÞ2‘HÛ#vô wEñÚÿnfæëP·±H7ÔáKƒ>íûÃ,xŒ§yAŸœ Äb›Ä5žÂþH-lo®ìæ´ËÓu%¸ŠAq0‰q&Õû*@è9ÁÍj¿ƒ­n-o£¾Ô/ï./"K¹š1"ˆ\¼AB"  ÄŸ»ÎNsIƒmüë‰îµ=Fò{‡³w–vŒôiŒÑ€@,p@C“Lø]ÂU÷mù®(ÙR8<æ¬êž²Õ¥¾–y'W¼†Þ(Àlò$yceÈ<îrNrrí#Ãë¥jwï¨ß_]]Å2ItÉÂÆ\®Ðˆ¡Ö7AŽòHÅQ@Q@Q@Q@SÕ?ãËþÚÅÿ£®U=Sþ<¿í¬_ú1i=QE# (¢€ (¢€ (¢€ ŸLÿUŸýpOýT>™ÿ «?úàŸú¦·Šÿ…a¤½þÈþÄÐÿ¶ÿ²¾Íöϲ'ü|y[|Íû7}þwc=úÖž¡á«¹ÿµÝmì®Ö¦—¤·ÀUVÚ(r%@Z7Ê7 ”ã¿eB9; \±¹ÐîäžÞö{X®m®|ë—ÊÅ4±¸*å ‘‘b ómÝÔ‘L>ÕüÏìÐö?ÙÚ¿ÚhÞþúÿ´y{6íÿYÆíßw¹®¾Š:Ü:Xó=Uî¬õ(¼5oq¦Î$×`¾yö½t·/û½¸Ú¹cænÆn3]0еH<)}§ÙÝÇô×·7)*;(Ù%ÓË´°RQ¶–•'#8ÓQG@êpž Õ„÷óNð ¹—Ltõ‹Â¢ÚèË 2J3Êžg°åW›,^*¿Õ£0ÜY[[¢‚wçfÏÆ%\sØþ:”P_†ôé´ i]Ã#Oge ¼%K"$dŒAZ”Q@Q@Q@ÝÇ<¶sGm8‚wB±ÌS~Æ#†Ûß•WFÑm4+²Ú+ÎešidšFåÏv'ü¡EUÓ?ägÿ\ÿAjªéŸò ³ÿ® ÿ ŠµBØŠ+ÅÚΟé¾sZæ('ò%–-­•I?„î(zŒ€FFhn£šxm<ò¤H]P3°PY˜*Ž{– Ü+Œ¶Õ—Hµ¸ŽÚ=V´»°Š[-^spbŽ{ô}휂øùÈ:AouKÆkí6Ý-ɵ“F¹€É‘™$¿+‡?ÝýÒtäõã­ÅÄ6–ò\\Í0Æ¥žI*¨I'€(‚xn­â¸·•&‚T‘°eu# ‚8 ŽõÀx–÷]žÎãF¹¸Ó~×o}¥Mö„´s‘ÍvTÆdÈ!ãÉùˆeãå'#Hkúݬž!º¼}=ôý5a·q-É‘ÌÛs!üÏÆwqÇQ¸€v5ž¸Kv•îŒéa¹•H @ê@, žÛ‡­q6>4Ô£ƒP¹Ôl¤šÞÛM–ü¼z]Õ¢ÆÑ€L[¦I 1÷NTqSÙkþý(ëéòÒ/?±Æé´™mw)ÜÍ»a†3Ï€;:(¢€ (¢€ (¢€ (¢€ §ªÇ—ýµ‹ÿF-axÆþóJ:uÞ—+Ë©Ä1i¾[Õb7‚?„ªÛú.x8­ÍO&Äd`ù±qÿm“ØQR0¢Š(¢Š(¢Š(©ôÏùYÿ×ÿÐEASéŸò ³ÿ® ÿ Škp9/Ç]éÚh:5ýî¡>“k©N–1§–‹0n…Üt(ß.I#Ï8¿¦øÂÓTŸOØêZê ýŠòhÕcœì/€7o*±”Á4ÿxgþÿ'ý/Ïòô«=7ý^ÜýŸÍùúŸ½æô펧<^û&™á{?µïþÂÙóùxóöÛILü¿ë7wéŽùª$’ÛÄ©6£mi>—¨Ù­Ùeµžæ4T™‚—Úbêv«:©ùOz­iã;[Ëý:Ý4ÝEmõ)^;;×<™¶Æòn>à ¡ÆTg €FHÊÒ~3[Ó5&»±‘ì%wó“N sr'÷Óï%ÏÎ@‘Ó¡4í7R‹Äš—·riš%Ä¥V]9¡Ä –(ó1b²ŸB쌖æ5‡Ší5 Ëh’Îö+{ÂËgy*(Šä¨,va‹ ª³ ʹ‘šÞ®7@🇵;yíbÒD»„,šTiu‚¥pÓç-€z…÷''=•QEQEQEQECwöŸ±Íö3¹Ø|¯8›±ÆìsŒúVw‡uø¼Aa,«Asm;ÚÝÀÇ>TÈpÊ£B:ƒÛ¥hÝÀn¬æ·Kš…<Ø[k¦F2§±÷¨ôí:ÓJ°†ÆÆ†Þ!„EýI=I'’O$œÐ¦È*Ïþ¸'þ‚*ÕyF½®^ÇrÑ}¶âÞÚÎÞ  Z?ùd®IÚFOÍúTÖÚ/-£¸ŠeŠ92¥Î·p²¼6ý ®«òÁJRJç?·¼œcØõ§©ivzµºÁy:+‡FI7FÁVRN ¹¯#º¼ñ—¨Gg©Þ\!›pŠ[]RyQ™z©,ƒŽGàÓÿ´oÿè)¨ÿàl¿üUk šæŒ•ŒçŒP|²‹=2? èÑØÝÚW–;½¾{Ï<’É&ÞW2;ùO#ž#ü!k{È%³–t½ò~ÒgºšV—ÊrñîfbNžüŽ@Åyá¾Ô„bC¨êa• öÉpHÆFw{ÌS´oÿè)¨ÿàl¿üU_ö|û¢>¿ÌôÛ éÖÒ@–ò:Éè>¿ÌöZ+Æ¿´oÿè)¨ÿàl¿üUI5Þ§„“RÔUŠ«öÙ ÷½£û>}Ð}~™ì4WhßÿÐSQÿÀÙøª?´oÿè)¨ÿàl¿üUÙóîƒëðìÏe¢¼kûFÿþ‚šþËÿÅQý£ÿAMGÿeÿâ¨þÏŸt_‡f{-ã_Ú7ÿôÔð6_þ*íÿú j?ø/ÿGö|û úü;3ØL4ë9‰ Ê¥B£pS‚@=pp?!UõOøòÿ¶±èů&þÑ¿ÿ ¦£ÿ²ÿñU·á½Vök¹lgºšxYQçH]•–hÇœàîý+:Ø)Óƒ“{RÆBsQHîh¢Šà;Š( Š( Š( §Ó?ägÿ\ÿAO¦È*Ïþ¸'þ‚)­ÀµEy®âÝjçÁö–WwB__Elm'ò”oKˆ÷‰v·6F9òÚ«ðøÚêÇÂ^½¼m-§¼Ó ¹–}GRŽÈJ쀰A´å³Î0«ó ¸¡ÝÈèž"Õ5¯¿‘¹ÐæÒì¯b/9 ›Î;¶ù$ R¥ð‚ ,@¡à}oP·ð׃ìït¨á³½²†ÞÚán·¹u·. Ç´VXØ‚ž™<; ç{ERQEQEQEQEQPÝÇ4ÖsEopmæt+ÁymŽƒJÈðž½.¿¤É<ðæ‚âKg’>aàÉ=PöôäsŒÐ•xĶuu_¼lÓ_³%z„ZÒ±O› qùWœøž-uS,鲈!hÙº0"ž~ ñYÚMõ¦ ñË%ÄêòïEó¢Ä»Tl'Œ‚{}êôªQ•Z0pÖÈóéÖ:³SîikÖØG\ÜyÒ\kOÉ>\fÝ”/#ÔÆG5gC¸òWQ“íÛíµ½€e×÷±Ž9NµªjVwéj#6‚o3t—ia±×nO#ïçÿ×Ež«ªÊ­¼âP‰$qÀ9ÇÈËž@<ç ®Œ=)B“Œ·¿—‘†"¤gUJ=¼ÎŠ$´»h®§yòLÅ]Äp+(?1Æ =Ïô¨ ‚ÒøYL-„[Þth¢v"O-À‰ ¶ìVºª³“ ‰o͈¢•¶®å ØËÈóÍD/ª*Üà#@$û¬q’=òºƒïýj`ä»Z¡*>‡a"Z‹`×üªXƒÄ\ÄŸn½\ÓL7 ýÁ#ˆÚMŸrOýðü×3\½Æ­-Þ>Ó|ó`’<ÉKc8ÏSì?*ˆ_*ÆÑ‹€ˆb¡ø$g‰üèä¼mpç´¯c«–(ìôöŠkq<–a ± “$±ÚAà*/^¦£ž +¯ek?5‘íü¸äv?26vS‚ Áõãëžv=ZX®Zæ;çIÛ%¥Yˆcž¹9ÍFÚ†àá®rƒ¸2}æÁ>§“ùšps]Ó˃]½¤vA7Yý¤Iæ1eo'ÍÀç{r ÷©®ã†y³*ßÙ±Ì.w6r°8û»Izg'­rÚ'~ÿµ|û6nó9Û·n>›xǧ#k=¿ÙÞþF‡Ý™‰^ÇÊ—³zj>uØé`Óíä³d’8ah×ç•¥á ÀòÀ8èyÁëš§¯\¤—p„¶Š[@r…ŽàbLIéÐ~¹¬uÖ®Ü[®£(„bc·`ñœr üê95&–(â’ì¼qdF&Bg®x§5+¶)I8Ù"22©ýª/ùêŸ÷УíQÏTÿ¾…ktef\ó(ó*ŸÚ¢ÿž©ÿ} >ÕüõOûèQteÏ2¶¼(ÛµÇÿ¯qÿ£á®gíQÏTÿ¾…tþ †Yoç¼T&Ý#HŒ·¢ g覹±{ Tý´OH¢Š+çÏp(¢Š(¢Š(¢Š*}3þAVõÁ?ôPTúgü‚¬ÿë‚è"šÜ Úf§ivzl[¤²iÖ«ios2+L±ª…Æì dœ`JÌÁV¶ÑØ­–§©Z[´âð¼{¦†<í Y-Êm<ý1ÓQT#„žÆãÃ:öƒc F× $ÛÈ—W‹ rÁlQy;àŸ—g|äqM¶±ñ¥Žƒi¦ôM¿f-­I—ÛÂ7ÿ¢sò¹™â 3X•¢²ÙÕd…âÞ‡ë½Fõÿir=è?wŠ¿è§àþçÿ‘èÝâ¯úißø?¹ÿäzÐÔµý;I”Eu$ÆMžc,ÒLQ9˜"«Áäàp}* ¿h¶w —RI+[¥Ð[{y'Ì,X+üŠ~_”óÐqž£ ·x«þZwþîùÞ*ÿ VÿƒûŸþG«—ž'Ò,RÝå»,·yñ˜"y¿uÇïÀv§#æ8õ•ý³ÿ ûsíñ2þÂûg±Öù÷mÆß½Î1j³»Å_ô Ó¿ðsÿÈônñWý´ïüÜÿò=]½ñ.“§_}Žê褣nò"vH·/˜àLöÜEI>½§[j‰§I3›¦Ú ¤.ꛎ{(*™=7šÎÝâ¯úißø?¹ÿäz7x«þZwþîù®ŸéCP[´Iæ´¾H“È“Ê2g<Ý»7d·vsÇZ«£øºÃTÒ¯u RâÎ9eIZæÞX×jHè.‹’Bd¨ÉRvžh›¼Uÿ@­;ÿ÷?üHOŠ7icCaµë‚2GßÖµtÍbÇWY~É$…¢ Iм2&FFQÀ`cŒtZ½„ÌŠ— ¹îÕURe@Å—Ð#BE?í~,ÿ .‹ÿƒyùµø³þ€º/þ åÿäjuÇ‹t[hÑÞíØ?˜G•o$„,lQØ…RU7/½-çŠôk‘m-Ì1.B[ÛÉ9ò˜°ò)ù~SÏn3ÔdŸkñgýt_üËÿÈÔ}¯ÅŸôÑðo/ÿ#T¶>)ѵ+¸­­.Ì8&ò\E6HI ìrI IàúVwƒ¼[i­èº:MvòjSÙG$Œð4k,™±¶„b 9 N=±E„\û_‹?è ¢ÿàÞ_þFªš¦·âm#H½Ô®4=!¡³î$Xõi E,@͸Àõ«Ñx¯GžSSÎçËi#"Ò]³ªŒŸ)¶âSŽp…‰íXÚŽ»‰>êú¤vóÁçèó;G,N›Y ,B–UÞ¿6ƒÚ€;:(¢Â§Ó?ägÿ\ÿAO¦È*Ïþ¸'þ‚)­ÀóOjú³xSKðä××rêzµ­´ö×ÒHÍ(‚h÷ÎûÏ;£"PmÐŽõ£câmN xqa¾‰îåÑ­®eó,.µ ¥fA’âP>ù-“»Ž9ï,,­ôÍ>ÚÂÒ?.ÚÚ%†ÜNÔPŒžNk)ü¡¼6‘}–Xãµ¶KHÖ+©cÝ p±¾ÖbŽx|õ>¦¨G¥kz׎>öYqiwá(ï-í†q›*$‚ÄŽXÈ 1òäèKà;Gðþ·Óô¿í«ïí*øÂ7=åÙºM»¸Iœg¸©{á{;ZÒ/ü9§éì¶ZdšcGuw$DEº# #¶Ýן›©«ñý´?üËÿÈÔžàQ¿ðõÕÖ“âûT’&³æ}œ±8]Ö±Â7ñÇÌ„ñžïÅSñ‡µ»«ZigOh5¸Žù.¤uh\±S¸Eî0I<ô­¬ø¿þ€Úþ åÿäj3âÿúhø7—ÿ‘©X z®Ÿ«¤ÝXHÅâ&zõBG =ÁÁâ¹;°êzeíåÅ»Vžý#ÉÜï‘ÓnGÜVžSÏ?*~yñý´?üËÿÈÔgÅÿôÐÿðo/ÿ#Qf ÊÒ|=ªÚ¾‰gtö_`Ñ 6òÄìeŸ4I½J€˜W$à¶H*{ÝZé´w€¾åý ©8m¶²BvqÏÌàóŽ3ߊ½ŸÿÐCÿÁ¼¿üF|_ÿ@mÿòÿò5`d_ø{V:›ßØ5‹H5¥Ô'v£BÜ©!N¶yäÏ'Š&Ð5É4ë©âïo5wsRBŒ‚%ˆD³*ï^°PI`Zùñý´?üËÿÈÔgÅÿôÐÿðo/ÿ#SÔvÃÂÚÖŸÚSì’ÝÇ«B8f¾žE(m>ÎQ¦ugÈÉ9Áè:g²Oµý¾mþGØü¤ò±Ÿ3ÌËïÝÛn<¼cœîÏjÏÏ‹ÿè ¡ÿàÞ_þF£>/ÿ 6‡ÿƒyù•˜ÎwÅž×uÖÕa·º »€Çn_Q¸móÒ¦(ÆÙlœ±þ,`ƒ©áë«­'Åö©$MgÌû9bp»­c„oã™ ã<ߊ½ŸÿÐCÿÁ¼¿üF|_ÿ@mÿòÿò5`s¾,ð®»®¶« ½ÔmÜ;rúÄ o˜ö•1F6È dåñc ñ©²SU¹„jÚ–§Ö¶dóR(#ÉÝ~21Éç²—Þ+1&ò»!ί/PH?òííNû_‹?è ¢ÿàÞ_þF  þ•4­:ÖÆ.fµWÝq5ܶ³or H$ˆ–l³.0IŒU{ï êrÜYÞ‹“{v¶YÝ©\X‰ 0sœ—l«LÎuþ×âÏúè¿ø7—ÿ‘¨û_‹?è ¢ÿàÞ_þF A}¡<¾¹ðý¨†)Lk(†æòИŠN[hã®N=j½ÿ‡®®´ŸÚ¤ 5Ÿ3ìå‰Â¿Ž>d'ŒðG~*ÇÚüYÿ@]ÿòÿò5kñgýt_üËÿÈÔ v­¤ÞÝê‘^Y\Çlñé·v©!hå•¡(Áq‚”sϧáÎÛø/S¹»¹mBUŠ *çOr5;‹ÇÝ)çhF¸P;uíÐ}¯ÅŸôÑðo/ÿ#Qö¿ÐEÿÁ¼¿ü@\åm^ãÆÜ–—éíè—vSK§HòyO3B>}Ê»„b#ä®Ó“Ínøs÷zv¦.ïb|víKý©utÌœ,ǃ°p7×âÏúè¿ø7—ÿ‘¨û_‹?è ¢ÿàÞ_þF¥`(EáýWEkwÑ•ÃfÃa(¼vL‹VÝ“#eN3Ç"®h>}ðbe–Þ=*ÊÂ6<90²Hè/~ÇñÚüYÿ@]ÿòÿò5kñgýt_üËÿÈÔÄW°ðõÝ®‘á G’&åý ©8m¶²BvqÏÌàóŽ3ߊ§áÿk––Þ³Õœ°h‘‚²ZÈìÓ8…¢«( vç'$…éZŸkñgýt_üËÿÈÔ}¯ÅŸôÑðo/ÿ#P0ôï ë±ëºEî¡ußbäžfÔn%7¡‘,,q¸8ã8=Œ—ÖÚW [L¾[pöZ4ÖѼ³‰ *åWi89^@õ5±ö¿ÐEÿÁ¼¿üT5¸‰ªë2éºm½•÷öÚZÙ¾Ÿ§Ànk\Ç ><üìKqË e³Wm5Ïê-ÔóÜ-Õ¦¯ö725¢Ýɲ\”ǦÕ<Ò„wo{o¡ ƒI‹™¢’hÓiå cžœóö5b¼¿Pñ%Ü:§jÒ\Éö F ®®âPmBÜÛ#É*GÃ*AÙÁÆr$jkÚŽ¯¤ùsfæ]2ÖÅgžêÑ-^BrÙ–XØ Ä@ò°NÚ€;Ê(¢€ (¢€ (¢€ (¢€ (¢€ *ž«ö/ì‹Ïí-¿aò_í³˜;ºsÓÓšÊðgö¿öüM¼Ìy¯ö??ýÙóû¿;þšc¯ážs@­þì¿õÞ_ýÕ5Co÷eÿ®òÿèÆ©ªQEQEQEQEQEQEQEQEQEQEQEQEQE>™ÿ «?úàŸú¢Škps¤i·°\Aw§ÚOÉ'ŽXU–V(fr@U=€ô¨áÑ~Á%‡ö>Ÿö);Ûý™<¶`‚W$QôÒŠ)ôaÕaÓì­¼Ÿ"ÎÞ/"6Š‘*ùhÄ«À%W qòJ¬þÑ$¡ôm=…§ü{†µCäóŸ“—ŸJ(«û_2WÂiQE# (¢€ (¢€ (¢€ (¢€ (¢€2-þì¿õÞ_ýÕ5T (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠÿÙnip2-8.7.0/doc/html/figs/snap13.jpg0000644000175000017500000014237113341773367013615 00000000000000ÿØÿàJFIFÿá°ExifII*JR(i‡Züÿÿ)( üÿÿ)( 0210‘ 0100 ÿÿ È -ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀ-È"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?÷úBÀPdzo¯RÞ6v`ª£$“ÐPÖW½DowãZ·Å;É.tËxE¸8Y&‹ûàÖ²ÏÄq»Yÿß—ÿâé\xûjxQöÔþð¯ÿ…®zYÿߦÿâèÿ…®zYÿß–ÿâè¸õöÔþð£í©ýá^ ÿ \ÿ§?ûòßü]ð±µÏútÿ¿-ÿÅÑp=ëí©ýáGÛSû¼þ6·ÿNŸ÷å¿øº?ábëôéÿ~[ÿ‹¢à{×ÛSû¶§÷…x7ü,]oþ?ïËñtÂÅÖÿéÓþü·ÿEÀ÷Ÿ¶§÷…mOï ðoøXºßý:ß–ÿâèÿ…‹­ÿÓ§ýùoþ.‹ï?mOï >ÚŸÞàßð±u¿útÿ¿-ÿÅÑÿ [ÿ§Oûòßü]Þ~ÚŸÞ}µ?¼+Á¿ábëôéÿ~[ÿ‹£þ.·ÿNŸ÷å¿øº.¼ýµ?¼(ûjxWƒÂÅÖ¿éÓþü·ÿGü,]kþ?ïËñt\yûjxQöÔþð¯ÿ…‹­Ó§ýùoþ.øXº×ý:ß–ÿâè¸óöÔþð£í©ýá^ ÿ Zÿ§Oûòßü]ð±u¯[Oûòßü]Þ~ÚŸÞ}µ?¼+Á¿ábë^¶¿÷å¿øº?ábë^¶¿÷á¿øº.¼ýµ?¼(ûjxWƒÿÂÅÖ½mïÃñtÂÅÖ½mïÃñt\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿâèÿ…‹¬úÚÿ߆ÿâè¸ñöÔþð£í©ýá^ÿ Yõµÿ¿ ÿÅÑÿ Yõµÿ¿ ÿÅÑp=ãí©ýáGÛSû¼þ.³ëkÿ~ÿŽQÿ Yõµÿ¿ ÿÇ(¸ñöÔþð£í©ýá^ÿ Yõµÿ¿ ÿÇ(ÿ…‹¬úÚÿ߆ÿã”\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿã”ÂÅÖ}mïÃñÊ.¼}µ?¼(ûjxWƒÿÂÅÖ}mïÃñÊ?ábë¶¿÷á¿øåÞ>ÚŸÞ}µ?¼+ÁÿábëÞµÿ¿ ÿÇ)ábëÞµÿ¿ ÿÇ(¸ïöÔþð£í©ýá^ÿ Xþõ·ýøoþ9Gü,]cûÖß÷á¿øåÝþÚŸÞ}µ?¼+Â?ábëÞ¶ÿ¿ ÿÇ(ÿ…‹¬zÛþü7ÿ¢à{¿ÛSû¶§÷…xGü,]cûÖß÷á¿øåð±uï[߆ÿã”\wûjxQöÔþð¯ÿ…‹¬z×þü7ÿ£þ.±ëkÿ~ÿŽQp=ãí©ýáGÛSû¼þ.³ëkÿ~ÿŽQÿ Yõµÿ¿ ÿÇ(¸ñöÔþð£í©ýá^ÿ Yõµÿ¿ ÿÇ(ÿ…‹¬úÚÿ߆ÿã”\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿã”ÂÅÖ}mïÃñÊ.¼}µ?¼(ûjxWƒÿÂÅÖ}mïÃñÊ?ábë>¶¿÷á¿øº.¼}µ?¼(ûjxWƒÿÂÅÖ}mïÃñtÂÅÖ}mïÃñt\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿâèÿ…‹­zÚÿ߆ÿâè¸ñöÔþð£í©ýá^ÿ Zõµÿ¿ ÿÅÒÂÅÖ½mïÃñt\yûjxQöÔþð¯ÿ…‹­zÚÿß–ÿâèÿ…‹­zÚß–ÿâè¸óöÔþð£í©ýá^ ÿ Zÿ§Oûòßü]ð±u¯útÿ¿-ÿÅÑp=çí©ýáGÛSû¼þ.µÿNŸ÷å¿øº?ábë_ôéÿ~[ÿ‹¢à{ÏÛSû¶§÷…x7ü,]kþ?ïËñtÂÅÖÿéÓþü·ÿEÀ÷Ÿ¶§÷…mOï ðoøXºßý:ß–ÿâèÿ…‹­ÿÓ§ýùoþ.‹ï?mOï >ÚŸÞàßð±u¿útÿ¿-ÿÅÑÿ [ÿ§Oûòßü]Þ~ÚŸÞ}µ?¼+Á¿ábëôéÿ~[ÿ‹£þ.·ÿNŸ÷å¿øº.¼ýµ?¼(ûjxWƒÂÅÖÿéÓþü·ÿIÿ [ÿ§Oûòßü]Þ¾ÚŸÞ}µ?¼+Áábëôéÿ~[ÿ‹£þ6¹ÿNŸ÷å¿øº.½}µ?¼(ûjxW‚ÿÂÆ×?éÓþü·ÿGü,msÒÏþü·ÿEÀ÷¯¶§÷…(¼CÜW‚ÂÆ×=,ÿïËñtáñ#]^Ö÷åÿøº.¿,êÝêPÀ׌xâ|ò_GoªCÇ! &ˆ }Á'|ñ^±it%PA¦…€äQ@Ìp¦¸/^еÛÈ?ñÓ]ÝÉÄf¼ËÇŽ²¯Gý1ähÇ7Qº¡ÝFê‘—¬-$Ôoc´…âY$$)•Â/Lã'¿aïZÚ§„õ ?RžÎÙ†&Š:+,kŒ³)n:ð2I¬ {©­.c¸·‘£š6ÜŽ½T×Cáÿ*j³¾µw3Cqbö^qÌJqƒÉ:/3:=S•ìR;Ff¿Rö :þ𧯎)ú†«ésÁ 턱IpvÄWÞ}RFyé],:þ‡c­ø`E¨´öšd2Ç5ÇÙÝ9e |¸Ï_­f.µf|?¦Ú-ûAuª×Ä,ÞTg8p1ƒÉÎÜÑ×úïoËPþ¿…φõ«;»[K‹Iî‰XSÍC¼Ž£†ÀëßùCï>€©<ûu®ši6~+ÒŸOW}ÅdƃºLî`‘ªú§ˆì­î4Óc}myioz.šÞ 8Ûm#ÜðÄ‚i­lÊòøJïN𾣩j–²ÛÏEöu2)3a²>½ñX1X]Ïa5ôP¶…Ö90ùYº g<ý+§Õõm û]Z¤·7:­Äsˆ^ÙÐņÉÿ­Yþ Öì4»»¨uR~ÃpŠÇ [÷ˆÁ“€½%»¿õ¢þ½Aí¡B] U¯K'V²(.õ% ýÑÁù³ŸáÍ;Qðö³¤Ú%ÕþŸ,99*@>ø'Ž+£¾ñŤÖzeÌqî¾{¨çÔ)ð£$`çƒÇLT¶·¢Ç¦k‹a=ìúÄÉ!ŠH¸ »’~ñíÇ £úü¿àB-#ÁºÖtøµ›`²¹v]ÂTÜHF`8$»éX“éðÇÆÕÄW2˜í¾aºR8\î?\bº'ñ”ß`ÖEÏú 7”ü~è¯ÝÆî¾Õ_Y×4ýfóKÕ£¿{+ødXæAºÆªr² Æ1þÎúïªFfÏárÚòÚÒm=–âëp†?5 | žÆ®*-GAÕô™aŽþÆHZfÛYX1ôÈ$gñ®ÏO¿Ñoüi¢Kc$W‰yMÕÌÍIû¶Á*ßÅïY7:¦a§Úéê]R©ýªäù DèP×ðëÍ upïýw0õ/ë:D÷öB²¶Ä!•ÁoO”ž}©×^Öì¾Íö6T7M²Ü¥ºãh$Ä éõh–ÖVÉc<-Q.Ö {n1Øä[Þ©¦¯ é¾0ÄVúœ·¾tîÒÛ›VW…]HÎãÃc `v¡9ýSEÕ4SÔlÞßÌÎÂYX{©#>ÕŸººOjöw6ÙéúµÍ¿žf1A§o,ã'ø‰ÉÎcìù:L–Ùšd›Ã´ÉmºuÏ£çŒvâ’/h~¹×ìõm3Ú)óKüD€0¨¬|9¬êMp¶v-1¶Ç( Úèå† ÔþÔ4ÔÓ5/RºkHïãŒ$â#(RŒN ŽyÍiøkRðæ™Ùn ŽêÝâêk”Ëè‚c=ý©ÛRz´ß Üê¾¹¸´¶šMNß Â]P*…²äúÕ-'×zž°úl²Ee$LSpÀ$à¹Ë@?>kmõT²Õm.µY,–mXÞÄâÙܲ`c¯JÌ»ñ÷Ä(u“º+5¹‰·2’Ûq'·J#«Wþ´C{;Z³þÜØê7Ve÷˜&x·ã¶’3ŽÝ*¾ê³ª^E?ˆ// Û,/tò¦õ;]K’28>”jš·ö£ÄßÙÚu—–Å¿”?Þ俥^Êã{²ðð¾ºÚ`Ô—MÙ˜üÑ t9Lg;s»ö§K'HšÆ+™®ïÞTJ;ðó‘Àç5¹eâm&WE™îÈŠÛHû,çÊs‰1÷qŽyî8©<#©ZO7„´øåÝuk-Ñ™6‘´2±ãð5VÕÿ]Ééëc™½Ð5=*æÞ-RÜÙ,ìM#AêIRzuÇZ³©höš2ê¶´z…·Ÿöy¢*øÏÌ=êö£{¡Ã¤[è1j’ÝDú—Ú..>ÎÈ N„rIêxÏzgН4k«(¢Òu”kKl }=,äN¿yË·ºòi_B­gc—ÝFê‡u©ˆ›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Uí/O„®Ò»$ðvõcè+/ujiWkr[±ÆöÜ9ÆxóøP¼º™$ebBøáÖçÜþµsðØË.¡ö"B¸bº€óë[>d|á¤wi˜ÈœVd7Àj¯txI̞ÌÒaÑ#‰•ãº}™ 6Ù8Ç^ƒmdjsYÞ,L«'1çœ`ûÖ‰’Sk4 BD›ðÆCŸ˜“Óo¿­V¼½ß}nè7}·ýNAÇéC½´muszËÃú5²$WÌgºe,G˜T uÀàzšËÖt«kh÷N•žÕÈXçnz{Š¿?“ªB›¦Í¿ÞÉlc©éŒœŒsÐñjëWØÓͫȯ3íÜTc€AÎ;tåQÄT•D¯«ÝGŠÁÐ >T’Z>æêúÃwfkX‰9%E|纽ïÂ,M¤?îŠõÑóGÊŠ)°ýÁE0uþ¬×˜xóþAwŸõÉÿ‘¯OºÿVkÌxD_ïà”êÖ{DWQùNQ\Àü¬)à÷Töú{\i——Ë*„µ1‚¸ÉmäŽá@wT]Ok2Ím4Ê¿vHœ«ÜȨ)8 úÒÐË’I$’y$÷¤ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(C+–„“KçAQQ@ ˜  zqJ³”èò¨¨  w"P”'®Ö#?‘¨ÚRÄ’zÔtR²½ÇÌÚµôº½ûÂñéû¢¾¯ 0ÿ GþLÃÿÅÒŠ·áø[ü†õüÿŸõr꿈`ñ=ßÛ-5;™9 "lË{ÇÏ9ã·ÐõËø‚ÞK]vînÍÜi›ï1 ›“ÈÎ=Emÿ±ñ‡ý?òfþ.øV>0ÿ GþLÃÿÅЕ­ä6ïs’®¢k»Ko hbçL‚ð³\m2K"mùÇMŒ?Z—þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.˜°Ñ¶¥©IiÿÚÒÈÁœÊ“,~PÜ#.¬»žøïÖ²¯ä{Û?°Ékp«lòÁ#!ÛÎpÉÈ'½Cÿ ÇÆôÿɘøº_øV>0ÿ GþLÃÿÅÐÕÝÁhqu>²ºš·ö"ÚŸ³y¸Ø%Ú»<¿Cž¸íœ×œWq¨øƺ¦¡-äú2,’X%Ä@tÇj©ÿ ÇÆôÿɘøºIK•Öÿ±ñ‡ý?òfþ.øV>0ÿ GþLÃÿÅÓ’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*÷ÿǤ?îŠòßøV>0ÿ GþLÃÿÅשxCþ=!ÿtSB=¸(¢¸(¦.¿ÕšóÈ.óþ¹?ò5é÷_êÍy‡ŽÆtÛ±ë#@•bØÓ-qÿ<“ù ŸÌ>Õ‡©Hñø.åãfG]=вœ|¾ Õ$Ô/ôß [My¨X¬òˆÖû,œ®q°9go¦>”€éžácÛ½•w£'>”ÿ0ûWu«ÞkZF—2, y²°hÝc,¡°ÛN ‡šßÓïõ+¹u-.åí¡Ô-B¸†2c*à•m„ç#ŒÓ¶Ÿ×—ù‡_ë»G@“Ú©GÿWc·š?ô¬¿ IrÚ}â]]Ku$WÓÇæÊrHVÀöAÅjEÿ7õÔè CKERQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEɦŽÞ '•¶Ç—vÆpÉ5ZÛSµºŸÈŒÌ$Ú\,nÿë ÿЭUSÊO3ư²ÈÁ†é#åû§Ò€%¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ¤2J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠÏÕô‹[Û+Æ[y/$…‚HÑ®íÛp¿1ü+FÑ.ŸS/ªéÈmÄNM²A¸•ÇžÀó]V.ÿç•¿ýþoþ"Œ]ÿÏ+ûüßüEa<<'57º%Å0EoÅIkÑBø ã|#Ŭ_îŠëä–x|ÑGå¼É!%G® Šä|'Äýn†wÐ}ÁE}ÁE0uþ¬×x¤n8õ8¯EºÿVkÏ|H3qõqü躲ÿ}¯ýqOýTõ—üƒíëŠè"§ Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ô4´‡¡ êAÐTt²Ê ·yJ»RÛQK1Ç`SH *[Êq"IµÈÛ…·~šçôsT¼Ô¦‡PÓîaŠR^kgQÀÄŒ9Ï®}«¤„¶J{ˆ×›…0+›«ï䜟ãQµÕÏ÷ÿòF_ñ«ºÆ™§H±ßj6–®ã*³Ì¨HõšeÖ«akl—ß[EŸrY%UVúpiQœ"÷o°Ê¸÷É8rÞ,ñ‘¢]C¥]ÛÜ\¤ÖÁþUWWVf$°äOã]¢L²ªÉ«£ «)È#Ôñ‰?'ˆ­BŒl¶e_`'”úTT¥‹–E)8ê‹£ÄÞ€MiÚ‰F¼Çó>\ä™9çŒS.d[‚†%±Æx?ׯlÏTB csÔŒ;ri¼-7£i$vI}£¬²ÏöKfH¹>[å7mÉõÅF— A,"Î䤡CrÍ…9P¶@¦‚¿ºeP­†ÜNO'?—ô©j§€§o¯˜£ZLÜKí;ßµ­À›q~¹PÄ`°]Øß¨Òm ›lî±$oS!*¾ðQ¿ ŸlV=ŸÔé÷y^ÖFýÖ§¤^,Bk{¬Åþ­‘Š2ýXÖ£º¼Ñ/B ín‰Xü­Ë!RSû¤†‡×5‰E Mm¼=¬w½°7ðÏž8£5£ ’Π9/Àô¢±}"ÆÈD°Ï,ÞA„É(Þ¸=p¥ðî+6ŠT§kjÑî[´[_:K™Fˆ¨B…·¤c×ßè+ZóVÒoÂ-ս̈§; Ÿª†Ã~9®zŠ%„§'wpU:F×4Ǹ†v·ŸÌ„2Æp>Pqž7c°ªæÿG7¯x"¿Yƒ1IÝUˆ ¨|ž•‡EJÁR[_ﵑ¿§£Ã$RGk:¼Lì­ß/÷²wsŸoJIukiíÞÖçËžO6@¬T–È9ÈlŽ@éX4Sú•=õûÃÚÈÜ7úCZ›gPx™·÷ÄöÆKçÝ)n5 æa{IÕ!ÊýÙAŒ``@Çj¢©SóûÃÚÈèeÕô™¬…›ÚMöp„ Ð:cŒ`t¥´Ö4»Ù-à¹Ûs3ìÇÔ³1'¥s´Rú+[_¼=¬¸ï4H®ÍÒÚ\ù»ÙÆç,ªÍÔ…-€NO P—º$R[¼v·HÖè#Œ«‘òŽ€á¾aõÍbQOêtû¿¼^ÖFåõö‹¨¸{›[¦m… G)¹Oð¬2==µ=Ä¡­g"YG÷eÆÓ÷»m•`QGÔ©í¯Þ?k#hÝèm+Hö×nìAÌ’3c Œ¿  tª‰-ˆÖEû´¡F•bŽ2£qdæB¹ç¨PMP¢šÂAuxVÍåÔtTŽÅœÅ!‰¡E<€ŒŽ[žƒ­2;Ý;Ym~ÍtðJd’Bã¦71ÇáŠÄ¢—Ô©÷x{Yž«¤Ø,‚Þ ¡æÎ]Ë–8ÇVbzTk}¢$ ÙÎ#x» õŒgï{žzÖ}JŸŸÞ?k#tßè¦áç6·Ý68Ýò¸Æ9]Øïﵑ£e&•œ°]-ÍÃK7œÏÊ•`IrÃ×vjújº\~S$7[áFHÝÛy±žKsÐu®~ŠrÁÓ–÷ûÁU’7bÔ´¸ô¨´óÙ†4TNÆ8ï•`GáRÚk:]Œ{{…BKüʼnêI-’}Ís´Rx*O{ýáídkÃ7‡áGE²¸exÌX‘Ë€‡ª®æ;GÓ$š%»¬‰mv]\HIÎà¥G,ç±#+ŠS¦ú¿¼=«6å¼Ñ%@­ir6ÈÒ+#•`ÌrØ`ÀŒúgß´èa mviæ1Aއnü=H¬j)}NŸw÷‡µ‘»¥¦G¥Ã§”¼ò¢EPÈÛã¾U¥·Ô4[\ù6sÑùmŸ›räžrÜòÄç¯5ƒER§ç÷‡µ‘µ%Þ‡$0Dm.€·]‘29WUôÜ8üj6—@"0-o$~P 3.W$àáùäž¾µ“E?©Ã»ûÃÚ³­±Õì¥Qem‘¨…Õh  !ãƒíG…x‰ahŸò_úå/þ‹jÞð¿+ZT£IZ$ÊN[äpQDpQZ’2ëýY¯=ñü|Åÿ]ùס]«5ç¾"ÿ˜¿ë¢ÿ:äkÿ\SÿA=Aeÿ û_úâŸú©è¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¤= -!èh:t¤’ÚºE1†FR@*{ %¦ÃÿS¸ŸÍ«˜ÐÄ’êrÿj]Ê-íÉFVŠ0&nÅHPvãœý­tðÿÇÜßõÍ?›S•ÖRáüt¢Þ{[û,å¯"2)g`y¬ÍòÎÓÃpÀ,íîï…ÔöößtÇ#n%N>XýqÓ滋í#LÔdY/´ëK§A…iàW zEAy£éwPÅÆ›g4pŒD’@¬{8ü)-­ýoq½]ÿ­¬RдåÒt{k%”Kå–^„’IÇ Éâ¼·âA_‹#þX?áûù«×­­-¬¢X-mâ‚IÄT~¼â2+kðîòÅûÿÓy©ß[ŠÚbŒ©lá‰ã,f6Œ6Ü™_^©k‘òñþñ¤Â®HG9 p_§?ý¥&·-*°}¤œŠÕ°†HePv2|Äúä¶Gá×ô¬Ë6‘˜üªØ#ñÇƶ TV-´¨Rp}sôþ´£¬’)«!RbÚ†ß1Êî?.xÈsøUú˳äÔ¤“~ÄUÎÑÎþ߇cøV¥zÙ¬*B+¤WêcO`¢Š+Ë4 (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€44Où /ýr—ÿEµoøcî­ahƒþ&þ¹Ëÿ¢Ú·|1÷GÖ³„ù›òv5©IÁE¾ªçwÜQÜV†C.¿ÕšóßÇÌ_õÑz×ú³^{â/øù‹þº/ó êËþAö¿õÅ?ôSÔ_òµÿ®)ÿ Šž€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ CÐÒÒ†€#©AQÔƒ ¤Óaÿ¹¿ëš6§Saÿ¹¿ëš6¦æ¡—¥LjzR¹ûÕãßTBO_%ûÓykØOÞ¯øŒÀx‚úâý¿é¼Ô ä5+ƒÊ¢Í¸ónÜcnq¸ûóš—#jŽbN0A+œ{ãÔuJ¨«´…°êPɺ%ÝÃ!çpãÓž¾µ¹k©E$’EçǼ"1ÁaÎ$d‘Y0xjêTFià-drB¸ÇQ޾´ÛÝæ¦xÌŒ¹]Œp„íÓ¥UKÚ.Usf©rÙ殌Ψo!|afSž\gðí[5Ëèi$w,—;‰Áã¡®¢½ Öre)+h´9¡mlîQEy……Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Z'ü„ýs—ÿEµnøcî­ahŸòõÎ_ýÕ»áº>µÏCyúþˆëÅ|4ÿÃú³»ƒî (ƒî + äuþ¬×žø‹þ>bÿ®‹üëЮ¿ÕšóßÇÌ_õÑwV_òµÿ®)ÿ Šž©ZÁzöVÍ Ä …0­$|£¾áRý—RÿŸ«oûðøª±EWû.¥ÿ?Vß÷àÿñT}—RÿŸ«oûðøª±EAÌ$’ †T·'Bp}ºž€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ *)®b€…v%DU,Çè4Csä„c¸uVR¬> ó@ÑEQEQEQER†–ô4H: ޤ ›ü}Íÿ\Óùµ:›ü}Íÿ\Óùµ0'5 ½*cPËÒÏÞ¯ø‰Î¿\y2èùkØÞ¯,ñΟ-Þµ¡9ÌH?ëåö¤Æpe“ŒþX¦þFˆèúÖ‰ÿ!ÿ\åÿÑm[¾û£ë\ô7Ÿ¯è޼WÃOü?«;¸>࢈>ࢺA—_êÍyãæ/úè¿Î½ ëýY¯=ñü|Åÿ]ùÐÑׯ¬5m#OŽm:â+¡}‘}¦4)“!;ˆÚ?Â8ïš³©øšæ zÊÆÂ¤¶7‰kw<™ùY”°DÇVd“ÀÈHnt}OYþËRš|66íëršãå•h “‘ÇŽÔš­¦¸³–Æ{¸‚_ ©‘¯¦ AÜXªç‰=F;óDz_¿ùÁÖÝ¿ÏþÑê3ÝÛY<–Vj¸à,f@ƒêIè¶OµUðÖ§>³á»Få#I®#Þë!AÉé’MZ³æ9ÅÿÙ·[Éò7cËþÙþ/\qU|5¦M£xrÇN¸hÚh#ÚÍ%IÉé(@Lä+?ýp‹ÿB’²uYé×jÐÏ4‰þ^БœeˆìGOZÖ?òŸþ¸Eÿ¡ITo|;¥j&âæ×t¬,²ºg»HÍgUTqýÞþfÔ%/Þ§o#3þk?ùò»ÿ¾¢ÿâèÿ„ÚÏþ|®ÿ憎øº·ÿ†‡ÿ>oÿ2ÿñTÂ!¡ÿÏ›ÿàL¿üUsò⻯ëäuóà?–_‡ù•?á6³ÿŸ+¿ûê/þ.øM¬ÿçÊïþú‹ÿ‹«ðˆhóæÿø/ÿGü"üù¿þËÿÅQˊsà?–_‡ù•?á6³ÿŸ+¿ûê/þ.øM¬ÿçÊïþú‹ÿ‹«ðˆhóæÿø/ÿGü"üù¿þËÿÅQˊsà?–_‡ù•?á6³ÿŸ+¿ûê/þ.øM¬ÿçÊïþú‹ÿ‹«ðˆhóæÿø/ÿGü"üù¿þËÿÅQˊsà?–_‡ù•?á6³ÿŸ+¿ûê/þ.øM¬ÿçÊïþú‹ÿ‹«ðˆhóæÿø/ÿGü"üù¿þËÿÅQˊsà?–_‡ù•?á6³ÿŸ+¿ûê/þ.øM¬ÿçÊïþú‹ÿ‹«ðˆhóæÿø/ÿGü"üù¿þËÿÅQˊsà?–_‡ù’é¤w]ê6Pe²‚*ñœã©'¯z–òì²¹ 3Hc!J’Wkg8ê õªQÛG¡³ÛÄŒ–²É¾2$cƒ´ g9ã={ÔÐ3_^@Qs¼…ݘ–ÚÃç'æÍuFö\Ûœ3åæ|»ÿ´[þ}&ü×ühþÑoùô›ó_ñ«»SþyÇÿ|Š6§üóþùD¿´[þ}&ü×ühþÑoùô›ó_ñ«»SþyÇÿ|Š6§üóþùKûE¿çÒoÍÆíÿŸI¿5ÿ»µ?çœ÷È£jÏ8ÿï‘@¿´[þ}&ü×ühþÑoùô›ó_ñ«»SþyÇÿ|Š6§üóþù½×žÅLO8lsùœô4 (調AŠCÐÐu è*:t€ZHãîo÷ùµ-$ñ÷/û‰üÚ˜†N•9¨d€¬~õqÚÞ‘q¨]¬±Æ°ÄNPŠqÞéA&õ2¿á½ÿž°ßGü(ÿ„j÷þzÁÿ}ðªñÜO¥Áª¼ñYȲõ„†XÃyƒvÕä7°ùyïWV÷UX¡·¸–K>ïÊK™DF@› r”Ý‘ü«…âkôh×’ŠçÃ×+*Än-DŒ T.r@ê@Ǹ§ÿÂ5{ÿ=`ÿ¾øS?µï`„Je/W¸fEËùn“€;uÆ3R\j7öÞeºj_h/'¦c/ R ’2Nô}cµ×ôÃ’Â5{ÿ=`ÿ¾øQÿÕïüõƒþú?áZÚeÅÈmBÞyÃZ˵$*˜VàžqÀ¬_í‹ø¬#º«;ÜÙM?–#\@ʹÀÎàîÏ5+ˆnɯëQû8Â5{ÿ=`ÿ¾øQÿÕïüõƒþú?áZzd×i¨Íiqt×*-ã™]ÑU†âÀ”—ҹѓwöÏ²ÛÆªÊ×I'ïØÛ·#:ž;UGY»]}ĸB×±þ«ßùëýôÂøF¯ç¬÷Ñÿ ЊÝañtŽF2Y–;Ü>qÀ…A®ê“ÚÜg%ÆûuG•#1ífÇÌ[æçîÔ¬]y4“ZùéA^ý ßð^ÏX?ï£þÅðõËJѭű‘,¡ÎFzdcÚ´¼<ŒíÍÔŒ ÔãÈ;v§ï‘»ó'­W[u»Ñµ‡‘äWk‰Ë”r¤…ʨ$vÀ}r²m7ø¥AÿÕïüõƒþú?áGü#W¿óÖûèÿ…X½±ŠûÂöÊÆÐJ–ªÈ×)¸(Ø2G#§<ãÒ³¯.¤¹Hæq ¶¶Ó£º×€¿˜NsÎ@ÈÀ òzsUMg×ð'’6NÅŸøF¯ç¬÷Ñÿ ?á½ÿž°ßGü+¥†xçS±—zãz’„Œàúõÿ‰mö¹$k=袂 RK»¶ÓÀÿY¬mw}vò+ÙCK¿á½ÿž°ßGü)­áë•‘#k‹Pïª\å±×Tz}ä–£Wh–îk·h‹;ZËÌ0[i\àuÇ ¤²1G¥æ<¼²ìi‘•Žç s¸’³Zýbº{öéÜžHZäÿð^ÿÏX?ï£þÃáë••b7¢Fª9 u cÜWGu4’é÷ a,M:«*1`T8ãèkMÍÂG=íÄf(®>Ñ$ÑÅæDÊ#<]¸³Ç\óYÃ^]QN”ßøF¯ç¬÷Ñÿ ?á½ÿž°ßGü)^÷VµÓmZIîKÛªvD$Š=¤ÈTÜqß×Ö€¸ÔÂ÷S\©[¸â”©;rq¤í$gÎ;Ó–*ºêSƒv2ãðõÌɾ+‹gL‘¹\‘ÁÁíOÿ„j÷þzÁÿ}ð§ÞiÖwØXÛB¦ðCIóÿñ‚>p{Èê}…Gy<£[¹º˜[Ì–·0á,mùÓœ–=Ýê*–*«z?ÃäO$m{ ÿÕïüõƒþú?áGü#W¿óÖûèÿ…Gh#ÖwJGö„ºŒñNsóÆÿ”û‡­t—ÚúÁh%‚UùKáѽ;ò3ïQ¿X=ŒWþ«ßùëýôÂøF¯ç¬÷Ñÿ ꨣëõƒØÀåá½ÿž°ßGü(ÿ„j÷þzÁÿ}𮪊>¿X=ŒWþ«ßùëýôÂøF¯ç¬÷Ñÿ ꨣëõƒØÀåá½ÿž°ßGü(ÿ„j÷þzÁÿ}𮪊>¿X=ŒWþ«ßùëýôÂøF¯ç¬÷Ñÿ ꨣëõƒØÀåá½ÿž°ßGü(ÿ„j÷þzÁÿ}𮪊>¿X=ŒbÊÆ]?VH¥df0Èß!$ccéZ~û£ëLºÿ‘†/úõ“ÿAz†>èúס›œžíÿñªÞÍ/åýYÝÁ÷A÷Úq ºÿVkÏ|Eÿ1×EþuèW_êÍyãæ/úè¿Î€;kCwöo*h<”ÀhKº;îÊ¥Íÿüü[à;ñt–_òµÿ®)ÿ Šž€!Íÿüü[à;ñtfÿþ~-¿ð¿øºš™±Í’'WCÑ”äÆ€L²I,®WÀ%Whg ŸSß½KEQEQEQEQEQEQEÉ¡ŽâŠU Œ0A¢c·‰b‰B¢Œ)ôPEPEPEPEPHzZCÐÐu è*:Y]ã·wŽ#+ª’±©±ôÉâT2ñ"ì2y¸àGŒãßÉ-0b,„bàŸ˜å¹ ÆHè=©±ø–ÆÌqhvé°vT Ãp®k‘‹V]Œf´Ïfã­Hš…´˜Ýˆøôâ§êTîÜ£ø¿ó.8ªÖßò;ˆ¹ÛšÈ¢©Ñ]?þcö²7ÿá$Íó³×ÌÛ·~þq×ÇJ†}bÊêT–ãG·šDû¯&Ö+ô%x¬j),²ü_ù‡µŸsn=vÚ+‰.#ÒâIäáäV›êväÓ"Öâ†k§d¥É ñ´€®q‚~ïp~•E?©Ñíø°ö³îlM¬Y\¬k>o(‹ˆÃímŸL¯ùµË[–§Ò¡•¢9Œ¹ Pûex¬J(úß‹ÿ0ö²7!×â‚IäK#ºwÞäËÔàO@)ëâHÖG‘tõøÜÁùltÉÇ5E/©Pþ_ҵŸs}|I;ºØ(wÆæËc¦xæ«Ë¬A,ÐÉö¢)LÛ@¹Ü~^O5‘E5ƒ¢º~,=¬û›1kVñZ½·ör¼.Ìί&àʼn'9^y4Ѫéë’º%°ˆ»]¸8ÈÆÞø•dQGÕ(öü_ù‡µ—sY5M:;w·MÕ`åãP¡Xû¸5<~ ‚qo›p8 ¦Ö<ºü_ù‚«%ÔÐK½7ÈŠ)ôx.ŒK±ãk°QÐd¯AVÛ\µ{„¸}*ž1„”YG±Û‘X”SxJOuø¿ó´‘µý¹l'{…ÒâYÝv´ªÀ9]¹¦®³j,Å´Ä’Ù ŽG 2 óXôRúß‹ÿ1ûYw6V°’ÕmŸE¶kt9XŽÒŠ}†ÜS¦Öí. X&Ò`’ÆØÜ‚«Ž˜kŠ>©G·âÿÌ=¬˜õÈã½’ëìŒ]ÑcÊ0Š3Àù}MYÿ„£þœÿò/ÿZ¹Ú)<¼Ö}΋þúsÿÈ¿ýj?á(ÿ§?ü‹ÿÖ®vŠ>¥CùÖ}΋þúsÿÈ¿ýj?á(ÿ§?ü‹ÿÖ®vŠ>¥CùÖ}΋þúsÿÈ¿ýj?á(ÿ§?ü‹ÿÖ®vŠ>¥CùÖ}΋þúsÿÈ¿ýj?á(ÿ§?ü‹ÿÖ®vŠ>¥CùÖ}΋þúsÿÈ¿ýj?á(ÿ§?ü‹ÿÖ®vŠ>¥CùÖ}΋þúsÿÈ¿ýj?á(ÿ§?ü‹ÿÖ®vŠ>¥CùÖ}΋þúsÿÈ¿ýj?á(ÿ§?ü‹ÿÖ®vŠ>¥CùÖ}΋þúsÿÈ¿ýj?á(ÿ§?ü‹ÿÖ®vŠ>¥CùÖ}Íûkÿíe&ò¼¼A"ãv§½hxc úÖ‰ÿ!ÿ\åÿÑm[¾è>´a ¡ÍíѶڦßòþ¬îàû‚Š û‚Šê8Æ]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@6ºÕÚë6út²ÚZÛˆá,ñ>ûc”|…È$Œ`ž*Þ›©jz¥Ü×}Ž2‡‡k«4¯°[9y0x¥] ;ÿ°ÜÜ^ÞgÝùÔ~9â«éz…½—„þÏsª7̸›ì÷ŒZáwgÌÃËgü1]ù¨eéK¥¿­î7«¿õµŽoÂ;‡†í¡òÂîU;JïPǃÈÜ9ükÍ>#j–úw‰ñ%”s¼ÖFÁ` ¹‚W8ãktÁ;úð+ÙÏÞ¯øºá|UmŸùö~ÿôñ5T^¤µ¥ŽV+Øm¼±’0§;R5QŸnãóϽ(¸‚I¤˜ÈÊŸË8ÀôÏ|ÖVðFIýiÂEÿ&µæ3äFÄfÚYàäð1$’pà¥>7ÜGÛùœ|ÿ"Ÿü{ëY+8^?­<\¨?vŸ8¹EÑÆ4¨ðønòyâ¯V_‡>ƒlþïýÖ¥b÷5[QHaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP–‰ÿ!ÿ\åÿÑm[¾è>µ…¢È@×9ô[Vï†z~5ÏCyúþˆëÅ|4ÿÃú³»ƒî (ƒî + äuþ¬×žø‹þ>bÿ®‹üëЮ¿ÕšóßÇÌ_õÑwV_òµÿ®)ÿ Šž ²ÿ}¯ýqOýTôQEQEQEQEQEQEQEQEQEQEQEQEQER†–ô4H: ޤ ›ü}Íÿ\Óùµ:›ü}Íÿ\Óùµ0'5 ½*cPËÒÏÞ¯ø¿øJí²3þŠÿúQ5{ñûÕä?4•Ôbÿ®‹üëЮ¿ÕšóßÇÌ_õÑtúÍì·WpÌ¿èÇn-ßnLJX{€H9÷#µmU9.–(ÞIãkv‚/*5ˆ†O”g-¸îÉö÷«ÔQEQEQEQEQEQEQEQEQEQEQEQEQER†–ô4H: ޤ ›ü}Íÿ\Óùµ:›ü}Íÿ\Óùµ0'5 ½*cPËÒÏÞ®_·ŠmOt¨"Ha•˜¨Y<ùÁAúWt~õyï‹'’=FYª»¹'ÏÄúõâ½ ±7^˳"§Âpò¬bâL~cÊò?¯Ö˜ÅA3éO—‰¤AŠÌ×j¶Üäž9?׆!Þ¬½N;jN­û§9È#üþ5$œz⌷<žj2ppp=k(¢Ë›(Ï×ùš³Utÿøññþf­T½Î¸ü((¢ŠEQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@'ü…þ¹Kÿ¢Ú·ü3Óñ¬ þB‹ÿ\¥ÿÑm[þéøÐwÜQÜP.¿ÕšóßÇÌ_õÑz×ú³^{â/øù‹þº/ó êËþAö¿õÅ?ôSÔ_òµÿ®)ÿ Šž€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ CÐÒÒ†€#©AQÔƒ ¤ÒCÿrÿ¸ŸÍ©i!ÿ¹}ãOæÔÀ˜Ô2TäTN¥ *Ÿ½\~»¦Ãpæî{Ô¶Š3"³HÑûçä’G­vENkñFæÐ¤1²å®F##›œƒî+ Då®WmQ¤oS2ÛA¶¼ÌµÕ"ž<ãtJgê¦ÿ„_þŸ?òÿ^³îöÐk΋~Zæ1¡ƒ8Þ>ñ<‘jr\ʶµþÎ’ókÍovÒ˜“fv™H øç¶qšàu«½T¿þF¼ê‹MáØÖt„ÞŸ1ÁeAÆ3Îp:Š“þú|ÿÈ_ýzΆúìÚ«XÜÍ9_y$È_~×P‡Ÿ¼@éšë1MŸ¨]OhË’S33$(ê RrOj=¶#noÁw·`å‡cGþú|ÿÈ_ýz?áÿ§Ïü…ÿ׫zQ–)u;Q,²­¼ÀEæ¹vÆ­Ç“É=kŸ[ùÅ“=½õÌ—fÊg½FŸ&@¹ ÀTGˆ“v—à½JöpìjÿÂ/ÿOŸù ÿ¯USH±’èÚ¦³l×b]¥ÁxÝšÑÒƒÛj³Ú‰ç–mÀM+HU‰`pX“ŽÏùù»ò~Ók+G«3‹DCçÿ¬<ç'œôµQ¯]¶¹¿þD¸Â×±­ÿä~w“ý žnÝÛ6 ØéœnéOÿ„_þŸ?òÿ^¬Em -wŠ0­-¡gaÕŽñÖ³¼I©5½òÇ ñ,nŒ×m|·EŒ$éÎ}jc‰¯)$¥¿’)Ó‚½ÖÄÑøn9T´wêबyÁuõ¦& “Í _åáÇ™ûž##œã¥Yð÷Ù’{ØÄÍöÁq1’™ŽÕ2Âp2äj²­Ì¶WPÅm,þf¡(º2ÙžÌèÚ:ô4}f½Úæü½œ; ý…mö_µjÃö|gÍÀÙ\îÅ#è¶qù;õxÏÿU¸æ»ósøUœfè¦ægÓí#Iˆ‘–6Q #o]æìwô§Ý\-®dÔ£ uy¦F¶êS¤ù²ª=rTãééZ{j÷ø¿þBå‡cSþú|ÿÈ_ýz¦º^œí*¦·jÍ-(I@:“óqzé-.Exwîš ©7†ÚãÁ¢]*ßµ­äW¶b7º/11oºÄps“ïÅeUvå·’ÿ"½œ,жº=éai¬[Üå¼­¯·ë†¡4‹9$#ÕcÈå¢n€É\ƒ€qÚ‰Õî<7y¨ÊofRîƒ%`m™?‰¡nk‘Î."‡P-'UUÞ2»±´q–µiõŠÏíytÿ/2\"º¿áÿ§Ïü…ÿרÛñ¬é ½>c‚Ê<ƒŒ gœàu­wsÖ“vö÷‚ ¡ãóØ#eÈ'ŸB:×;oªB6fœZÅ ÇœÉxò¬„y2>rz=ED18‰_ÞüNœCCþú|ÿÈ_ýzOøEÿéóÿ!õë7í/‹j>rMu›£öö"*HC(ÜÊ3·'×Ó5¯ ]\·Úâ_&_*H¥29Ûó7ÀÎ;S•|DUùºÛd( ¥c94Í=Ä'ûb3ÿªWP¥ùǶM,šfÏÙ¤×-R|…ò˜¨lžƒ³OÔntÇ‚ÏLi­-Ò[xÝæ•ÕHˆ}йêN=9>•©tó]´µ81AºqýæÎÔÿÙÔ oYo'×¢ÿ!(E­»í @— nÚœk;Œ¬e@fÃvMKÿ¿ý>ä/þ½SÓî%ƒZe%”\Û2.V!»kç±€¸ÉÇ8­»Û©®´o?KW˜Îc&‚“Ë Ärqš™âqisoä¿È¥Núï£YE M&±n‘+gl :‚wuö¢]Ê£–mbÞ8äûŽû@¡-ÍEe}o¥h÷ìÖ _»_ù¿ÊŽ{þú|ÿÈ_ýz?áÿ§Ïü…ÿ×®†Š>»_ù¿ÊŽ{þú|ÿÈ_ýz?áÿ§Ïü…ÿ×®†Š>»_ù¿ÊŽ{þú|ÿÈ_ýz?áÿ§Ïü…ÿ×®†Š>»_ù¿ÊŽ{þú|ÿÈ_ýz?áÿ§Ïü…ÿ×®†Š>»_ù¿ÊŽ{þú|ÿÈ_ýz?áÿ§Ïü…ÿ×®†Š>»_ù¿ÊŽ{þú|ÿÈ_ýz?áÿ§Ïü…ÿ×®†Š>»_ù¿ÊŒ[=ìSµÇÚwìŠO—ËÆr„zûÔþéøÖ“ª—þ¹?þ‚k7Ã=?ôðUgV›”ÝÝÎz±QvGuÜQÜWa˯õf¼÷Ä_ñóýt_ç^…uþ¬×žø‹þ>bÿ®‹ü躲ÿ}¯ýqOýTõ—üƒíëŠè"§ Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ô4´‡¡ êAÐTt²™E»˜4ÛNÀä…'¶HÏ€’¡•|É$e¤9WhúŽýUÏè:^½§jSK{qm4´Áff;û2‚ LzcÒºXãî_÷ùµ0+[ŸîÿääŸáQµ­Ï÷?òz_ð¨õ%ަº|z}íåÃCç‘l¨v¦q“¹‡JEñ„Ú)ÕCº[Œ«+¡¥6õÝž1ëK¥Çä#ÛLݘ;¯Ûå9öÁ?pÞ5ñ…Þ‘¬ÙÛiðÚýíOßFÙS½—0Æ6ô®çLÔ¢Õ´è/ I9—r¬€÷šòO‰H[ÄPð!|óÿOÒ8ÍrÉ\9šÕ>"êÅö¬'ÜÆã?øõ,þ3Ô¯cËmϽ˜žHÎGº¸5Ç’ÕŠ¨\íã¯ÿ^­®FI ‘žµÕ¨§¤FªO¹ÕXxÎöÚ×bÛØÅjÌkúç$–'Ü“ë[x²ñ¶†™¶‚ãñù¿©®.Ȇãr° †VêzVœìc¶>ùa·§®¯bkZ*Uª(¨Ý±N¤ãÎ[TøÝâ;MZòÚ,Å ïŠBÛC3‰1œzUOø^Þ'ÿŸ #þüËÿÇ+‚ñ ‚_ê² aï&n3Ýϯ5›YË E6¹QJ¤í¹éÿð½¼Oÿ>Gýù—ÿŽW¯¿ˆn£[œ¥¾a±ÇÞP{û×Ê5ïZÞ§b4È¿Ó`ýû¹›æ~F3ׯҴ†fœLkV©£:sâëÐŒÂ;S@ßãQ'ŒuIØÅi„˜¢€­’6#{Õp^lʬê̤ƒÀ>”èu„G 0dvÞA9òò¨ú.‘G"­]^ò;ù«GùCÚK¹³ÿ -ïüòƒþù?ãQK®O4ÐË$3ÂK' €HÆqŸLþu—E5…¢¾È{Iw5¢×î dVöȹ-€§©9'¯©§ÿÂK{ÿ< ÿ¾OøÖ5¾«GùCÚK¹³ÿ -ïüòƒþù?ãGü$·„`Åoÿ|Ÿñ¬j(ú­åi>楶»qinC p«†8zT¿ð’ÞÿÏ(?ï“þ5E7…¢õqi.æÁñ%ã)+rÁù[üi"ñ Ì1$QAl‘¢…U pè:ÖE¾«GùCÚK¹³ÿ -ïüòƒþù?ãGü$·¿óÊûäÿcQGÕhÿ({I÷5\ž;™nV<ÙB«1 xÀëÇSùÔ¿ð’ÞÿÏ(?ï“þ5E?ªÑd=¤»›?ð’ÞÿÏ(?ï“þ4ÂK{ÿ< ÿ¾OøÖ5¾«GùCÚO¹³ÿ -ïüòƒþù?ãGü$·¿óÊûäÿcQGÕhÿ({I÷6á%½ÿžPß'ühÿ„–÷þyAÿ|Ÿñ¬j(ú­åi>æÏü$·¿óÊûäÿð’ÞÿÏ(?ï“þ5EU£ü¡í'ÜÙÿ„–÷þyAÿ|Ÿñ£þ[ßùåýòƱ¨£ê´”=¤û›?ð’ÞÿÏ(?ï“þ4ÂK{ÿ< ÿ¾OøÖ5}Vò‡´Ÿsgþ[ßùåýòÆøIoç”÷ÉÿÆ¢ªÑþPö“îlÿÂK{ÿ< ÿ¾OøÑÿ -ïüòƒþù?ãXÔQõZ?ÊÒ}ÎO×.o.ŒGGŠL•<#_j»áŸë\þ‰ÿ!Eÿ®Rÿè¶®ƒÃ?Öµ…8ÓVб.MîwP}ÁE}ÁEX†]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@Õ—üƒíëŠè"§¨,¿äkÿ\SÿA=QEQEQEQEQEQEQEQEQEQEQEQEQE‡¡¥¤= GR‚£¢{x®­^ÞtŠUÔ÷Óaÿ¹¿ëš6®c@ð|ZF§-ܦ) ¶»Pª{·û]¿?^:xãîoúæŸÍ©ÉøŠÝá/Žâæ ]­MŒI§,ÙßægÇíØñUtÍ Wm6̤‘ZÃi<Ïmo{n]Š“ò3…eùÀ-××'šïMC/J],7«þ½kÂ]ÚøjÎ+Õ *ƒ„òÊ<O_ʼçâ:×áÁy/ÿ¥W±Ÿ½^;ñIñ8b’üúï56îÄqåNÌÀ1N2‰œ·p“ŸÖ“dŸßoÓü*/´Cî啃.IùNG?Nxô¤îضYƒ§æ/‚0IÛ¶¯_:’±•f# ^¤ŸOʨXÞ$²²,‘H…AR­É<ƒý?:±râ;øç9 ˜,¾3ôçüäש’Æø‡'Ñ2kh‘ãÞ's'‹5—8Ë_Nxéþ±«*´u÷Y࢈>ࢀuþ¬×žø‹þ>bÿ®‹üëЮ¿ÕšóßÇÌ_õÑu:>¥5ÕÌÖFÐ$¢ãÌÎöhÕŠíÇw=ElU{U°· Z$'Üíú ±@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@!èiiC@Ôƒ ¨êAÐRi°ÿÇÜßõÍ?›S©°ÿÇÜßõÍ?›SsPËÒ¦5 ½)\ýêñ߈»á!‡8Ï’ý¿éâZö#÷«Çþ"ÈÁ§’ýÿé¼´ ãX u:⢚ÖK¿š/,yc$¶¸±ãÓ­O°éŽi†1· -Œ ®NIè;äôã“Ó½kF<òQî+òê[´ðåóC2™a…ŸqÛ!'“èT?úÝ*¬Í iK¹@ÛÉž•Ö²2\%†Tb»Ñ™J‚?Ù?§â+—RXò6œœש”aãRnJúˆÄMG•õ<¯WÿÕ÷ý|Iÿ¡§Wuù _ÿ×ÄŸúªUåÕþ$½YQØ+± »øJã«Ø®ôÇK%HáT€9Bùò@Çáº0¸gZ’ Ž4){tÅKå²õR;r+q4ù\àFÊr@« ¦;d1 ;þ5ƒ²2ö¨ÁòÙN6vî*æ• VÌí ÓÿB».Ž„#NHc üêK+¢º€)ÏãB’h9Ý΢Š(¬Ž¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(CDÿ¢ÿ×)ô[WAá¯êkŸÑ?ä(¿õÊ_ýÕÐxkúšî û‚Š û‚Še×ú³^{â/øù‹þº/ó¯BºÿVkÏ|Eÿ1×EþtÝYÈ>×þ¸§þ‚*z‚ËþAö¿õÅ?ôSÐEPEPEPEPEPEPEPEPEPEPEPEPEPHzZCÐÐu è*:t€Zl?ñ÷7ýsOæÔêl?ñ÷7ýsOæÔÀœÔ2ô©C/J@W?z¾{øÉâ;ÍÅÖ¶öé#Z»Ÿ1I973ŽÄzWЇïWÍÿô­FûÆv’ÚX]\F,ÙKÅ 8í3ñ:ò(ħ޵4?ñïfG¡Fÿ⩲xßQôk%Ï\#G¦ YŸðkôÔ?ðÿÂøGµ¿úêø ÿáN/•Ýn'©»Äm^8¢ìÖL`–WËý~劦¡ÿ€ÏþÂ=­ÿÐPÿÀgÿ ÚŽ"­ºrµÅ(©üH¥s;]]Mpà•˰^€“ž**Òÿ„{[ÿ >¡ÿ€ÏþÂ=­ÿÐPÿÀgÿ É¶ÝØÌÚúKT†!¥äÃÜÄ Hpy#žçóÿü#Úßýõüð¯t¼2ºÜbI_Ì*Ý Ï^3íî+ÒÀ5ìêÝÛOó1ª®Œ p~î*(Žd—ßú«ÞrîŸ=² F–×Aœ´L6~P}þ•ç=ÌXù;N1òùR[–ûL\ÿþtm>?ÕIÿ|štL.c&)J9¦¶ÍÚ(¢ ì (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€44Où /ýr—ÿEµtþ¦¹ýþB‹ÿ\¥ÿÑm]†ºŸ÷wP}ÁE}ÁE2ëýY¯=ñü|Åÿ]ùס]«5ç¾"ÿ˜¿ë¢ÿ:ë¡Õ´Û[[Xn5 He1Æ»$™U³´`ž¸#ó­&eU,Ä$“ÀÅM¥ß\s`dèðo+;Ü#Œ)Ç'îôö­¶ßÅ¡ý–ÚÆáïãÓVTicýÛI· 'ïgµ+éë¯ùÚÛúéþfµž£c¨+5•í½Ê¡ÃeW }ðj÷‰t»;›¤»‚ä[2¬© ÊÅ70^yã“ßÒ¹K;FöïTh ÿ›>’aÝYý” rp£  õëÏ֮ݽð„¶6:-ݽÄÂZµ)»c©*§sÁèNi‹úüŽ‘5ˆ..¬ÒÊ[[˜.<ÏßGr§@á@ûÝyÇJž=JÆ[dzŽöÝî“ïB²©uú®r+ G}K\Ñn­lî¡…åXËnÑì%F q“Ó=k"ÂÆsk¢é©¤ÜA¨Ù]¬—Mì$èÛóÐzóÒŸTƒ¥ÎÈjúk^ý‰u CwœyeߟM¹Í\®}.vѵ'2¯í¡4GÊ;öùÉó/Æ3Ϧk¹¤¶¿õ²­Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@!èiiC@Ôƒ ¨êAÐRi°ÿÇÜßõÍ?›S©°ÿÇÜßõÍ?›SsPËÒ¦5 ½)\ýêæ5"ßPœK+ʬUùkŸOzéÏÞ¬르„ÊñÍ"ù²‚!Œ»­~ÚåÆNQ§x=Mi$å©‹o¡é·HÏ ó²«´dä 2œÊúŠQáë3pÑ¥€7˜Jí9Ï޼~µš¶²Þ]BÂâk'’æCˆ»+;å çîçèOjŒé÷¯jb¹·šBÖö¨Á”¶@œ’¤÷!HÍp{J¿ÎkËÆ×ü#V_óÖûè…Q¾±Ñôâ~Õ-ò¨]ÅÖuÝ•oO)¤ÞÜY­¼‘Á5ØKdUÂÝ$³Ý;Õ­N).¯,-¼¶6æS,ÌË„PO» …^ª’NNÅrFÛoa¢Çx–w8™°Çž€¸ö戴ýkÓf—W>Ì*@luÃÁDZ¤¼·¸77¶Km3=Õì3Ç2¡(lÉ-аðyéVc¸šÛ½ÜJ¶åã·ŒÚÉ´ñ†rÛvœŒ€3ÓÜÕ{j–¿3Ø\‘½¬KÿÕ—üõŸþúáYâÓBkSr——2EæK’è.OÔT6Z~¢ ¹`dyã_³™”Eo»˜w;[õÿf§¶›PÓ4»¥&)$¼dÉG˜F§ø¶…¨ÇsÇJ~Ö¯óÜ9cØImt(­b¹kË“ ªY¿©8S€;ç¥Y—EÒ ´7R]L Úx`A¦09Í2âU¶Òm,,ã½[yƒ,³ý’Vt_â%vä3pHÇSVµXžX­ —Ë-ª¨ÂDPçÀ ê:v©uê]{ÏV ìW´Ñô»èšKyîX+m`Ãk)ô ¨ ýh´ÑtûȤ’7º$xˆb¹%XƒÛÚ¤Ú]H·..¯!Cs¼K$*²N»Wï+/Æð+>ÚËn¤¦ ã¾òÉ-Á…•L%˜ãy`A4ýµMW;XÚö.ÛèúuÃù[îã˜F²4R`2†Èãz³ÿÕ—üõŸþúáYš=šÛÞiï{§ÈÏö(cŠF·-å8-N>CÈ늟]Y£ŸRŵĢîÀC†&œàà}áÉâ‰U«ÏʦÁF6Õ?á²ÿž³ÿßCü*9¼=g {ÇÚää ¨TžN3Èè:Õ+5Íåà´st—vÞL¡혌6÷~ö{uªòZH—Q[YÉ*É:H× jé >z¥ˆùÆ2A§µ]½ÿëOóQ¶ÆÏü#V_óÖûè…ðYÏYÿï¡þqÇ­Z ­¥‹_Ê^vŒáãÚû@~˜ÆÞ3Æ:R[éWVÚ}·Ø-žÞê}6U™•J“/Ë·wû_{óÖiWùÿ­È|±½¬lÿÂ5eÿ=gÿ¾‡øUxt]>{›¨î·[°VÉ\T7{Öl|ÃM»0G.Æ0ù¶±ÙÉo¹U²øÜÇsÈ8ëŠÖÐ Š)u&¶´’ÚÚITÄ EŸ… ¹¥*Õb›çnßðF-­YÍH~×a’ ¾Ç’- MšY£ŽyËÂÁ$ýßB+4™&ÓY¦±Ï“€˜Îä”8^á¾ïNzUÉ-eûF®RÍÆ¥<{­®|“ÓÊQ3SxȦêÔ»÷ÿ­F:hhÿÂ5eÿ=gÿ¾‡øQÿÕ—üõŸþúáX°ØJšeÛB’ˆØÂ&¶ŽÎK|¨oŸ˜îb¹qP˜ðÝ >Ô¥‚j d€Ú1|¡Ö T‘»Ž õu÷ßõoó£Øè?á²ÿž³ÿßCü*9ô>ÚšIn¶/]£qü‚’j¥®–­&–—1›h£¸qæÛ2,d²•[%p2Np+h_Ã>—¾UÏ“4a‚Æ„È{.NyíQ*õ“ÒM”¡º3-4}.ú5½Åà %N~Rê*?Z[-O¾²†ê7¹T™¨b¹úñV4^K‘åÌ4ìÐ Á rÙç®zóŒVŸk%­­»XéS,ñZH.ÖHZ5™°0§ o9ôÏZ¯mQÝ)½Ë47á²ÿž³ÿßCü(ÿ„jËþzÜßCü+ ÏNiçXd²Ýbב¹ˆY<1ãÊ|üœ íç¦jqeå‹t¾±ž}:.Qa4›ÿÝ£’6䃌Óu*§nv$£Ø½e¢é÷öPÝF÷*’®à®@üªÇü#V_óÖûè…bÙÚµ£i2›)%!‰)­XˆW',²c@<ƒ×¶õ‡Vðê͉Ò)‚Hª 2œd9£Ò”êÕRÒn×cµE »Æ"{‹± O0„œ*䌒¨@´·6-ªDÒ]Ü7œ»£1œz€ªN=êœv:Ñ‘íQôç!#„,nDòá+‘ƒŽÝW­HÓ¯ »bÒ[(áEXYÞ¤¬ nç#œvªuj/¶Ûþ¿®¢å]¿­&·Ð +æ\Þ|щx…›j2ØO—¡ëŠÐOØKÈ“ÌÈÀ`ÊA½+f¿¸œOrugžÄ#}–о[{ü§å;x#¸ë]>’’ǤYÇ<+ « «F½Ò¦¥j±ÔŸõòŒ[µ¿­ _ðYÏYÿï¡þÂ5eÿ=gÿ¾‡øV͇֫1~ÎŒoøF¬¿ç¬ÿ÷Ðÿ ?á²ÿž³ÿßCü+fŠ>µ[ùƒÙñÿÕ—üõŸþúáGü#V_óÖûè…lÑGÖ«0{8v1¿á²ÿž³ÿßCü(ÿ„jËþzÏÿ}ð­š(úÕoægÆ7ü#V_óÖûè…ðYÏYÿï¡þ³EZ­üÁìáØÌ¶Ðí¬äiã’bé˜ F9B==èð×Sþñ­&ÿU/ýrýÖo†ºŸ÷z¸’©M¹;êsVŠOCºƒî (ƒî +´Èe×ú³^{â/øù‹þº/ó¯BºÿVkÏ|Eÿ1×EþtÝYÈ>×þ¸§þ‚*z£möï±[y0@Ñù)‚Ò•'å¶š—þ&óëmÿÏÿ@hªßñ3ÿŸ[oûþøš?âgÿ>¶ß÷üÿñ4fІ ]Ùãš?.TÆå#¡ð?•M@Q@Q@Q@Q@Q@Q@Q@Q@„…’I¨¡º·¸$C™8©¬üO£ßÝ%µ½Ù2HH|N‹!B³ð&ŸÕé*ûs˹{ìßóËÿ4}‚ÛþyãÆ«wO]Mtæ™Òå›b‡…ÕY±œ#i8ô4néÇR:rNÏr§k*DìªØÎ€Ú;G°¥ü«îAÏ.å°[Ï/üxÑö oùåÿʃÄÖpéVW7÷HÒ]nÙö[yX>Óθ÷«Oâ=&=> ãx­ÁÛDfg=ÀP 0r1Å—ò¯¹<»–þÁmÿ<¿ñãGØ-¿ç—þL%/Îö^¥Êù\£'ŸÆºj^•¯Ê¾äò½®`M¤És C>™g,M÷‘çfê ÓìtÛ8#ke°ŽÔǃåDp¸=ÇÐþU¹Tü…gÿ®èRSöínU÷<»™­ä¹" 5‘2F用o¦â!P°€Àá¿øš¢šÍ•µ¼3JÞ`‰ TœŽ;àQÿ &™ÿ=&ÿÀy?øšäµ¶üCØÔéþòþÖÿŸð%¿øš6·üøÃÿ-ÿÄÕøI4Ïùé7þÉÿÄÑÿ &™ÿ=&ÿÀy?øš-CËðcWùâZ’h¡ Koj„ô vÃ?øíH e¸¹oþ&­é¯Zm¼¾[ž5’FXËHçÞ©Ï,6ZŒ°ª°‘e ˆH–§Oº?3[<<½—Ü¿ÈæDÝ­ø¿ó¡# ×Ãñ4*8\7ÿMû|>’ÿߦÿ >ߤ¿÷é¿Â§ØÃ²û—ùuÛñæ?kÏŒ?øßüM[þ|aÿÀ–ÿâiŸo‡Ò_ûôßáGÛáô—þý7øQìaÙ}Ëü‚ë·âÿÌ~ÖÿŸð%¿øš6·üøÃÿ-ÿÄÓ>ߤ¿÷é¿Â·Ãé/ýúoð£ØÃ²û—ù×oÅÿ˜ý­ÿ>0ÿàKñ4moùñ‡ÿ[ÿ‰¦}¾IïÓ…o‡Ò_ûôßáG±‡e÷/ò ®ß‹ÿ1û[þ|aÿÀ–ÿâhÚßóãþ·ÿLû|>’ÿߦÿ >ߤ¿÷é¿ÂcËî_ä]¿þcö·üøÃÿ-ÿÄѵ¿çÆü oþ&™öø}%ÿ¿Mþ}¾IïÓ…Æ—Ü¿È.»~/üÇíoùñ‡ÿ[ÿ‰£kÏŒ?øßüM3íðúKÿ~›ü(û|>’ÿߦÿ =Œ;/¹]vü_ùÚßóãþ·ÿFÖÿŸð%¿øšgÛáô—þý7øQöø}%ÿ¿Mþ{v_rÿ ºíø¿óu"ÚlÚEîŸæY™ˆùOb¢±|5Ôÿ¼kfk¸¥·™I“õŒ÷Oµcxk©ÿxÖô¢¢¬Œ*îwP}ÁE}ÁEjd2ëýY¯=ñü|Åÿ]ùס]«5ç¾"ÿ˜¿ë¢ÿ:è‰.tÔ·imý™‚ÞKß×÷n?ð_þ&’ÑÜoUcž¹ÒuÖæ¸H3 j°\†Þ¿qbÚÍŒúöëCé7çN¸ˆAûÆÖ–íFõÿWæ«nëèk¡û\_ݸÿÀYøš>×÷n?ð_þ&…§õéþBzÿ^¿æUÓm®-õýfêHöÃrИ›p;¶¦G>µ£¸ÿhN@ÜD3×—¨Ü_ݹÿÀYøš–Ó|“ÍpÈÈŒªˆ`¥ŽqÛïwô g7m§ßzÚê×Em!7³^0¸CêTñ± ÉÎâ¬ýßQÕt-Ôiæ‘poU!‚³*ƒ»'§ w®þ£†m¡X`‰"‰~êF¡T}¦´ÅI¤kwͳÝ[ÞJÑj^Ú>Ø¿g‚p[¸ >îzóZÚD:–“usbÚsMm5Ô“-är \–ù”ÙÇ×GE Eoë§ù×_ë¯ùœŽ¢ê§Ãžu¾ß±Çp'ùÔì-÷zsíU£Óu "þßQ6©)ŽêóýΈÆ9\2º’qÛHà×oU¯4ëE/¬íîUNTO¸Û"Ž·Sð…ÕÜ–A–Ç6÷7·RI/œ¸‹ç8þ,œŒŽ8®®›QÃÇ*F£ ª0ô@Vÿ˜Õ·ýp“ù¥Y¨%ŠAsÌ!ÑYv¹ qÜŽƒµU¿°¹›Åš=ìqn··†áe}Àm,oÉÎJæî<9ªy¥&›Gqª Øõ?1”†@ç#;÷Œ01ÏZì~Ñ}ÿ>ÖßøßüEh¾ÿŸkoüoþ"…£OúÞàõVþ»SO¹›Ærê7bÖÞÍaµbÀ噉ã9ÖÝRûE÷üû[àCñ}¢ûþ}­¿ð!¿øŠ:X<˵@ÿÈVúáþ…%;íßóímÿ ÿÄSbI ÒO6Á#…]¨I qÉ=OjåO†ìïâ†åæ¸Þ$Ü#eÁ;@Ï öò¦ÿÂeÿ?wŸ÷Òñ5Ð}Žæ²Æ>î÷*Tzphò/¿ç•¿ýþoþ"¸¾¯±Ôôþ·WìÏOSŸÿ„>Ëþ~ï?ï¤ÿâhÿ„>˵ÕçýôŸüMtE÷üò·ÿ¿ÍÿÄQä_Ï+ûüßüEW§ü¡õÊßÏø¢¬ÑýŽ yÇï ce*§?ˆJ|D]ÞËpWt~ZÆ­ž¤'˜§\éw7L¬ñ@pJÎÃpô?'J°¶×¨¡V ` `3qÿŽWC•ÖÇ`“½ÿ<˜¿çŸêhòbÿž©§yßóÊßþÿ7ÿG‘}ÿ<­ÿïóñ#M;þ#|˜¿çŸêhòbÿž©§yßóÊßþÿ7ÿG‘}ÿ<­ÿïóñ|ƒNÿˆß&/ùçúš<˜¿çŸêiÞE÷üò·ÿ¿ÍÿÄQä_Ï+ûüßüE Ó¿â7É‹þyþ¦&/ùçúšw‘}ÿ<­ÿïóñyßóÊßþÿ7ÿGÈ4ïøòbÿž©£É‹þyþ¦ä_Ï+ûüßüEE÷üò·ÿ¿ÍÿÄQò ;þ#|˜¿çŸêhòbÿž©§yßóÊßþÿ7ÿG‘}ÿ<­ÿïóñ|ƒNÿˆß&/ùçúš<˜¿çŸêiÞE÷üò·ÿ¿ÍÿÄQä_Ï+ûüßüE Ó¿â7É‹þyþ¦&/ùçúšw‘}ÿ<­ÿïóñyßóÊßþÿ7ÿGÈ4ïøÜÇÚNU0|¦ç'ÐÖ†úŸ÷ó­û˜®ÖÒs$p„ò›%e$ô=¶ŠÀðßSþñþu¬60«¹ÝA÷A÷fc.¿ÕšóßÇÌ_õÑz×ú³^{â/øù‹þº/ó ÞÒk¤±¶XàB˜-1S÷Gm§ùÔßh¾ÿŸkoüoþ"™eÿ û_úâŸú©è?´_ϵ·þ7ÿGÚ/¿çÚÛÿÿˆ©( bI ÒO6Á#…]¨I qÉ=OjšŠ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(UÔ«(e#ÁVÏN‚É£ Y¸ŽJAíVè Š( Š( ô4´‡¡ êAÐTu è)´ØãîoúæŸÍ©ÔØãîoúæŸÍ©9¨eéS†^”€®~õ&ŸÿÏÿ]æÿÑJ~õ&ŸÿÏÿ]æÿÑ@ËU_:å£,ʈ¡ˆSŒäžÿ…IQÂÓ§ôÊ?æôÄIöH}eÿ¿­þ4}’YïëeÞx†;íFÞæ‹if.Ñ÷ÿ­^C c‚¿QY×þ1}3ìwkiÌ‘4‘}¹|ô/Œâ2£põJ ô:_²Eë/ýýoñ£ìúËÿ[ük•m]´WÄ·†30ŽkD—Û÷•W®®kCVñTEÍìw–ÖÑÌHòîP/<@äžþÔµöH}eÿ¿­þ5òBX°U ¤õÁÏ¥dè(Z»¹´)l³À‹&mn–â6VÈûÀ G#•ªOüL%ôÉ?›Ð´RHrIíY«›ÈôAk¨màfGp§”à…ãæçŽ3“Å_¢°luëíKK’æÛGo´%ËÀmä¸UÛ·ø™±ÇÐKi®ÞßióIm¤î½‚å­¥€Ü(EaÔïÇ#§AžzP홢êͪÛNòÛiíçh&xpqœ0ê9«>ÃÅ2^\YÓü»+ù;i„᜕üÉ—îžçñ@ƒ­ë£GÖ4¸¥r¶·_3lM# mÀPOSØTòëMmascwnÐÜÝ,;¤G;ºå@«qü\ô¯Ebé!‹S»»´h¥Žh.$ˆb'(Bg~ݹ>™«²jö1 âóàX(kŸ‘¾A·w§wŠiVë÷˜\e‚ÇCÓu[ŸÄË~ÖZFŸöébd™ÞaFeFpIb9Æ(#SQÿmÏýroå\—†úŸ÷ó­mKXž(¬ìî,DS_G6ñçò¶!n |ÙãÓ­døo©ÿxÿ:¡ÝA÷A÷˯õf¼÷Ä_ñóýt_ç^…uþ¬×žø‹þ>bÿ®‹üè©PhgÒmHUf€îGGÞÛcSò‘Çç?…d?‹ÚóÂo¨Z#Áv¾Y`оÅÌxfP­Ç¦jñ³º¹Õ4”€ýžÚW“pþ(“Ï\²“KÖƒeЛM+5¸T¾rlŸl€äd⚣¾ñ•¦Üýžîëd€lFÌ…È(>øªšÿ‰ìt›[¸Öçý:;v‘biœ¥Š‚ëŠÆ½ÐnäÕ¯ç›M¾»µÔB1K}CÉòþ@¬’.ðqÔf¦¾Òõ;í»{4ÞA©D7I‘Z#åˆðÛÈÈàŒ÷©w°ÖçBºœ6Ú…ü¢41#;`õ`8rI' ¤:iÔ$™â¶ ³2Âèź`)‰öÅW¼°/áˆlæ±’íÒ8Ôárã•bF#={V8Óué4ëIç§žÊÿφÞâT2<[Jíg_—xÜH?Lš©|L˜ß•¯â :;ï®|—b ‹IKduÊíÈú‘PK¬µ,æI,¯c™ËÁTÁí֨ꫭjg7ö}üV H&´·¼H¥ÝÆÖ,:ð½UÓ4=JÎßÛíŽmVxîJ¥£tlçðiyŒßƒÄZUÕ÷Øà»9,©ò0W+Ô+µˆôÔ:ö±w!œp/ÙãpU~r\2òO@ó¬Oøv{¬m¯´ëÇ6LLw_Ú ÈÈ$co5ÚÐÖ»{c¨AÖ“²Ê{‘mâáY˺JÐýsíPIâ§K‰$s.+¡h÷žhÈ|…ÎÌr¡Ž3ŸÂ¢UÕ%ñ#Ý_h×SE ¥,ÊM—t2_%=²½U—EÕZÚãC[E6Sßý£í¾jác2 íûÛ³‘ÓôG¥ÿ­¿àƒëoëøµÖ»{c¨AÖ“²Ê{‘mâáY˺JÐýsíW5­Iô­;í1À³ÈeŽ$¤Ø v 2Ø8ëéX꺤¾${«íêh¡”¥™I¡òâN†B ä±ç¶@àw­Ù.n´ù’ëÃëv¢r‚٥Ĉ:Ió`~‘GEý_×`ê6óW¿Óôswu§Û‹“4qG ]VÞÁA.Pc¯¡éSý«WC¥Û›­ø­æSo÷‹”– béúeÍžwÆ‚·óÝo‹L2Æâð?¼výàNÀϺu…^E&‰ç[ÜÜšj̇Ɉ¨eˆ^H'h8£úü€¿g®Þj[Ïk¥oºŽá­ä„Ü(E+Õ·ã•ú ûU­VmZÚv’ØÛÏo;A,[ÀˎÆG#Ò° ²×tßÜÃabðµÅÞa¶Ždf´€»ib9œÞÕ¿¡Eö}8[2{ŒiÙÉä±*Í’NrIÎh¬:íêë¶7úWÙVì?ëp$9Q’òñèM?JÕïõIÝ—O·KšX¼ïµçcÎ͘äïU uFÕž÷TÑ®…Ô¥‘f3Bc·9  9<àdã$û Ž 2æ_Ú^Ûè+¤ˆ™Úêa,é‚6á ÝÉ-Œb…ÐSOJÕïõIÝ—O·KšX¼ïµçcÎ͘äïTšÎ§¨iÈòÚébê¢2Ë#\¬x9 0I8çÞ²-ôË™|Gi{o¡.’"gk©Ä‘ÿ¤Ûµ ÝÉ-Œb¬øŠ=Jîú UÓn.ô ›çX%L¯ž·°;{œuàzÒè‡Õ“ßk×piQêvšjÏfmÅô·"&U#8'⟪øŽ;EŽý-äžY¢óa¶û¬À.ãŸî€:ŸþµT×a›R±ŽÙü2÷@ǹ7Où`Ž»²õ\ÕkÏ ê3é-!Õ.[RþÎû+ªˆÊÊvœŒº’7§#b23zÏѵëÜ_Äl¦µû+ª7 Á—p%‡¯N¿N”í!oí!µ°¸ž8­TµÓH™2t)µGaުŤ\M{♤·†ü ŠhØnÇ”‘×9ê*¥»·õ©1Ù\[OGT»²²³Þ±AæÃ3˵g;ŠñÁÂäcwéL¶×5iµiôçÒ-–XmüÖhïK*“÷U–0N®éPéšöâu¸7³ÍeŠÂ¥Ò%†8L*‚9ý{UÿØÜ[Cyq{Ë»»©%pX.v Èÿd-/ëñüÈ‹OÖµvM2ëL‚/*,²Ãve “ò©“‚~‚·CY±¸¶†òâö=—wwRJà°8\íA‘þÈZ×= u#©AQÔƒ ¤Óaÿ¹¿ëš6§Saÿ¹¿ëš6¦æ¡—¥LjzR¹ûÔšü{?ýw›ÿF5)ûÔšü{?ýw›ÿF5-UtljõÊ?æõb¨Í*[_I$Ì#ŽH‘C±Â‚¥² í÷…15Ý-nâÎW¡ò\ùÑ’ ŒúU/z¡¨øZ[Ë›ó¡P_H’LjÁ]¿u÷ ”pAï[fþËþ­ïòÿ'Ûì¿çú×þÿ/øÒZ νðêÞͪ–»d‹PH÷(A˜äLmpsì8ÇãPIá‰ïäšž¦'šââI!·ò¼³VÆæÉÉ­·ÙÏõ¯ýþ_ñ£íö_óýkÿ—ühÒྵ}¶ö’pÅmäãëóþ•i[:”ßõÆ?ý ê°¿²ÿŸëoûü¿ãRZ8žêk„æ"‰·f ±$z›ö4ÄC®h–úõŠÚÜI**¸‘J`ŒŽ™RaìAV[mfÛ×ÖÑiî„L–†Þ?'9àìq[´R¶ú¦s·ú,ÖÚ^Žºl"Y4¹QÖÁ|Å U€'€pÄóÞ¨½¶¿¶¥}mbñÞêW1ƒrÆ^UBîÉ!Kð{2:â» )ï?ëôÐäæÓ./|:š,DÖ0K(I¤žXÝ‘>óI•fË“ÐõÉÍKi ]O¢Úi×SIfÚtÿ¹–ÜFDÊ¿qÊþpGÞô®žŠã!Ó¼C¥h÷ñ[}¢æææýÈmІH‰9‘~èÜGcÐ㊴ëªZølZé5Õ¬¾hBhZ@‡—äëÔç'5ÔÑ@u¹—¡Ä`Ó>ΚlÖ2B¬ò#³“ÉbU›$“ÎNk—Ó<9ý‹¶œö·QÉ!½¿[•+p¬íªA'iè1Šï(£­Ã¥ŽZóHºÓ5=2ïN¶¼Ôc€ÌdY.÷8Þª ÓŽ™¨"Ðõ/&Úi Uš]d_M H…0F3ÜôÎ;šì(¡;;ÿ[ÜÖ04H5 :þúÒk6Ó]Ëp—k*mÀW;³Û¦+;YÓµd›^ŽÓNk¸µXRD™Ê`›`ÄqÐñšì(£¥¾C¾·9'Ñ/ÍŸ‰#û8-ykp ëó°‡ixç׃OÕ Õí¤Óì®mX¼_k˜ÜF`™€ÙL“»€:u®ºŠwÖäÛKdÚMý´&ëȤ‡Y’ñ yU|ä`@Á'¹ÈÎ:UK(¯5Vêî+B‚=f $C*6ÅH@<ƒ‚FGžµÛÝYÚßCäÞ[Cqs²d¹úu½µ½œ ´AýØâ@ª>€RZ]­þCzÿ]ïþgªøwQ¹¾¾ºŠe„W1Æ—SL¢µÊ¶s×)ÿØW mõž›qÜ7Ërö÷—žkÎû嘃ÆOj쨡iýz_×Þ`è6÷ßÚzµõå“Ú ¹#1Æò#¶œí$u÷¬õÑuåæß¦º×gç_õG?7_Ó¯µuÔSNÎÿ×Oò–þº¯Ô㯴mLjw—Ööžh]J ¸ã*™QbØÉÀ9'®:Q©éz…α¬të×I­D2[[_ùDÁ‰!° úñ]¼¿­¬×ãsŒki<9z—V¶ öÇNX tŠöûI=\ò¿7$Õ—¥è—¦ÃIÔRÒòætØáh­oM¼ˆA,ÞPÊCz×yw¥i×ò$—–·Ÿu¦…\¯Ð‘ÅZ _Ÿù‡õù‘ÎéšKéÚÌSÇj`±‹LX@iC`劓œœý+KMÔ¦Ôtu³+,±ßÌ>ƒq¨ÇçZ4Qp9}MºÄRßÇ¥dÚÉ DeF3ÈXÛP1Ï=Nj+ÛM^-K][]+í1êH‰ÆdTLG´îîü®¶Š-¥†ÎUÐõ…¶KÒöòÑ4å·ˆZ݈BÊœ]ÀñÜô€žiˆ·ERkýš›Ú¸‰bK8ÈgPÜr@ÿk¥:ÏTÓõâÊúÖä§ÞL¯·ëƒÅ[¢°îüK®¡ui›¨]5¢«Löè…T0ÈêÀž=-ω­á´Šî +ûËi!m¼9UCÜ–#Ÿa“í@XÛ¢³¯u«K- êçÌ–×ËYÊ3Æ0 ¢ µñ Sݽ¤ÖÖ—"&™"ž5ÌŠ:í*ÄÈã=è3bŠÊÓõد爐{;»;”ŒJ#¹E“8Ü ’:þ5«@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@µùÜÿ×&þUÉøoï÷ó®³QÿmÏýroå\Ÿ†þñÿxÿ:î`û‚Š û‚Še×ú³^{â/øù‹þº/ó¯BºÿVkÏ|Eÿ1×EþtÖÃå2ÕV&Áó“2«!TS€[¯n•›'Œm'ðãêZ|I:lÝlÒñîp¿0#­+Å,Úׇ¤Ž LpÁ*É&ôcžœôúƒX±Ãr|.4Ëžµ ænÀI¶P~Fèü ñMyÛ\j66“ÇÍí¼3Kþ®9%UgúyªšÖ¹g£YO$·VÉr°¼‘C,¡ZB œŸÂ¹-OM’ãYÕ èÕVÓQXÌFÖÉeÊlkŒÑr{uÏZ›S´{'×á¸Ó.ï^ú[KˆíŒÙ=¡X€vÀžp9ÍK½†·;/c:\7×/(Ñ,ŽÌØUÈ©íDz„¶M{õ³Ú®s:Ê¥?ÚÎ++P³ŠoAmyØÛ9Ñ$G]¤¸9ÁŒÆjwºE¤÷š|“Ái¨‰%¶1½Ä!Hb=ÃqßnqU/‰¤LoʙԶ·¤¥ª]>©d¶ò©1¸@Œ}Î ¨®uS³¥ÙÄ#’Ô•Ì€ç…PF;sšÅÕ¯®.—Ùmoítçy¯›¾Pü`yl¤…9nvöªzE•õµ¿…ZK[•ò’â ˆæ"ÿp°þÇáKÌg`š•Œ·rZEyo%Ôc/ Ê¥×ê¹È¬ý]—X¬–ÛñÍ“&ï¼\c é³õ®gÃzD‘\é°_V;Ë)ðmC»çË»dçšô ÃÙ%û[˜nŒ+8¶k±òVSü$ç=HÆ3Þ¯jZ‘ÓÄ{l/o󅵌6îI Ï&¹)­/³î¼<,.ŒÓjFe¹Ÿ+Ê2‰7—èëšÞñ.¡wi½µ¤WCí,VK›{g˜À€r@P~cÐgŽý©}”ÿ®ÕŽoÚ:ÆòÚÚêè^ÈcŠ(•Cî‰31´çš–ë]û%­¤²i·Æk©LQÛ(Ìyùöã OZ˸‹G]O‹û;Wò!-äyN’ÆÀXíÃry<šP¿‡ì½i«M:I#Âöë!ž1’¹ˆä6ÓüóMõ¨ŠñžÀÝKkq XÂêAŽØRr~„Ö}¯‰mfžx.m®ì$†pVíæ1Õ† ééÖ›¢Mmá>¡Ì·¬Ž±¸Ý3 $  u}¸ük¥×4íPÜAzºÅõ›Æ<ë9bŠÇ«2Ôò{ŸaCëa®—7,¼Okzå>É}˜ ÄK4<Ïî€OQÁÁäqRéÚôW÷ïböw–w+š±ÝFºg'¿nµ‰ ÅÕæ¥§ßÿeßBš]”¾rI VyTyh?‹îžG*Mût—:¥õž¤ú›ÀXÇöQcyFXN}òÆž—þ¼ÿ¯é¯ckQÖFŸyoh–7wsÎ"¥¸NHÌ¿ÞËÍwì“Z@4Ûéî.biD1÷ ]¹Ý—ø‡Bk7_kK•‚w±Ö…ïÙÉ‚K8åîv±S´ÜUmA i¶ ªZjͬ¥˜}9dù\J½@Èn*vþ½J6õ téÐ$Òiz„‰åy²£FòG}ß7Qè3M¾ñ6pGqýÜ œËo*¨yÉ$ŽÜàdûVFªÒ\ørÚÃW¶Õ¤¾kei ŒnU¤#X¯ÊyêŠeýÞ ltÝ&úÚò8äµV¿šÎÑäÏ1.ÀB“ÎOaÓ­7Õ]Dº]޶Úâ+»h®`mÑJѽA¥¨,ÌFÊ"&Š€$mB£§‘ô5=7¾‚[QHaEPHzZCÐÐu è*:t€ZHãîo÷ùµ-6"ñÁ EÛžø-Ÿæ)9¨d©È¨ÝIíH ‡ïRiÿñìÿõÞoýÔ÷]€³p£’OS4îl÷ó‡’G\Ž¡ˆ?‘ Äñ]ä“é—ÚE¾5ÍÄ>\oÄKqËôïœVeí£Ú\kpÝéò_B‰k$PyŠ@Œ.ÂßÁ†Éçœ×qE œTÚn¡ÜG,RÍ ð÷ÙÚERÁåʃÜûu«vZ|–úχ¦ŽÑ£Û§IìxÁÄxV8ëœð}몢ªý®¿æM¿¯»üŽT³‰¼I­Û]m¢¸ŽˆØ,ÛdÂA)òŸø9§Ô£Ñô½P´½†&¶Íä¶–!Ûœ‡–¤)#©ì:u®êŠE\æüKÚü q ¬øhGÄÊáC/q@1šÍÓâ0ø’;û Ma­’ÚEº{ô‘™‡V?3çÎ{+¶¢Ž·Kž‹¿Š§¼´¶ÔRÒ[r'}B6S¿vUSÍŒÈû½+¬¢Š:X:Ü(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š­¨ÿÈ6çþ¹7ò®OÃxÿ¼ušüƒnë“*äü7÷ûÇùÐsÜQÜP.¿ÕšóßÇÌ_õÑz×ú³^{â/øù‹þº/ó êËþAö¿õÅ?ôSÔ_òµÿ®)ÿ Šž€ (¢€ (¦M*à Êç ŠXŸa@¢ª«j.¡’Ò¤d˜ƒøáM/üLÿçÖÛþÿŸþ&€,ÑU¿âgÿ>¶ß÷üÿñ4ÄÏþ}m¿ïùÿâhÍ[þ&óëmÿÏÿIæÝÄéö›xÒ6`»ã“v éž~(ÕQ@Q@Q@Q@Q@RHu&€І«{‚D3Å!B88üªj(¢Š)CKHzޤGR‚ MxÒEÚè¬=fE0 6v§­´?÷ìR 3ÖÒûö?¬Q@†Ÿd¬YÛ‚:ÿ…>{ DòHÿudœTÕ[þcVßõÂO攟j¹ÿ mÏæŸüUj¹ÿ mÏæŸüUiÑ@Ÿj¹ÿ mÏæŸüUj¹ÿ mÏæŸüUiÑ@Ÿj¹ÿ mÏæŸüUj¹ÿ mÏæŸüUiÑ@Ÿj¹ÿ mÏæŸüUj¹ÿ mÏæŸüUiÑ@Ÿj¹ÿ mÏæŸüUj¹ÿ mÏæŸüUiÑ@Ÿj¹ÿ mÏæŸüUj¹ÿ mÏæŸüUiÑ@Ÿj¹ÿ mÏæŸüUj¹ÿ mÏæŸüUiÑ@Ÿj¹ÿ mÏæŸüUj¹ÿ mÏæŸüUiÑ@Ÿj¹ÿ mÏæŸüUj¹ÿ mÏæŸüUiÑ@Ÿj¹ÿ mÏæŸüUj¹ÿ mÏæŸüUiÑ@Ÿj¹ÿ mÏæŸüUj¹ÿ mÏæŸüUiÑ@Ÿj¹ÿ mÏæŸüUj¹ÿ mÏæŸüUiÑ@Ÿj¹ÿ mÏæŸüUj¹ÿ mÏæŸüUiÑ@Ÿj¹ÿ mÏæŸüUj¹ÿ mÏæŸüUiÑ@Ÿj¹ÿ mÏæŸüUj¹ÿ mÏæŸüUiÑ@Ÿj¹ÿ mÏæŸüUj¹ÿ mÏæŸüUiÑ@Ÿj¹ÿ mÏæŸüUj¹ÿ mÏæŸüUiÑ@Ÿj¹ÿ mÏæŸüUj¹ÿ mÏæŸüUiÑ@Ÿj¹ÿ mÏæŸüUj¹ÿ mÏæŸüUiÑ@Ÿj¹ÿ mÏæŸüUj¹ÿ mÏæŸüUiÑ@Ÿj¹ÿ mÏæŸüUj¹ÿ mÏæŸüUiÑ@Ÿj¹ÿ mÏæŸüUj¹ÿ mÏæŸüUiÑ@Ÿj¹ÿ mÏæŸüUj¹ÿ mÏæŸüUiÑ@·³Îö7 öSƦ&˱\=s~ûÇýãüë²Õäuÿ\›ùWῼÞ?΀;˜>࢈>ࢀuþ¬×žø‹þ>bÿ®‹üëЮ¿ÕšóßÇÌ_õÑuRkVM…ŸÛd’0Ð#n;ªŒY”¿Ž)£T“þ‡´2§Ø—O9ãÞFséXzÖ«ÞÄ©7—6riÉ1Úݬ!%*r\]Àå}z*I¼?¨LÂ,,sè¿ayCÝH=GR{f’ÚÿÖÌo·õºÿ‚mAâá'xï>Xb3±hsêË‘óuÍjC4wG¦¬^!¾¿Ð­5m;Láš6’QuwäùX÷Á‡ž8Ç­^ðö©>µ¢Á¨\Y C6Y#oÊgålàuôïX?ØšÇü pèÎ¥§šUŽUòmÚL•Üq»l-v‹*"…U:Ußúþ¿áÉì:ªj_ñè¿õÞýµnªj_ñè¿õÞý´†C{}m§Ûù÷RˆãÎÁ$Ÿ@&³?á,Ò?ç¬ÿø /ÿWu]*ßWµX.E ÛÕã 2œÜБӽbÿ §ÿÏíÿýõÿ\õ]u/Ý¥c®„p®?½m?"ïü%šGüõŸÿeÿâhÿ„³Hÿž³ÿà,¿üMRÿ„OÿŸÛÿûê?þ"øAtÿùý¿ÿ¾£ÿâ+>lWdmÉ€þi~ä]ÿ„³Hÿž³ÿà,¿üMð–ióÖü—ÿ‰ª_ð‚éÿóûÿ}GÿÄQÿ.Ÿÿ?·ÿ÷ÔüEØ®È90Í/Ãü‹¿ð–ióÖü—ÿ‰£þÍ#þzÏÿ€²ÿñ5Kþ]?þoÿï¨ÿøŠ?áÓÿçöÿþúÿˆ£›Ù&ù¥ø‘wþÍ#þzÏÿ€²ÿñ4ÂY¤ÏYÿð_þ&© §ÿÏíÿýõÿGü ºüþßÿßQÿñsb» äÀ4¿ò.ÿÂY¤ÏYÿð_þ&mªÙkŒpÂ^Hã¤e’&@X ÷€ÏSúUøAtÿùý¿ÿ¾£ÿâ)Ðh°øzì\Á-Ä‘IÚR§iÊ‘Ð8?¥]7ˆæ÷Ò±Xá³nþfÆ£,oa4êŒ$·C"3FT‚qÈéÆ 8jVøé7ýùoð¬Ë‰í&¶·\ËqFªFI½ëlAb÷Ñ®ƒŒƒûJßÒoûòßáGö•¿¤ß÷å¿Â¬yÿÏ!ÿ}<ˆçÿ¾1 ‚ê+‚BnÈêJÿ:”ô4‹hrˆýiOC@Ôƒ ¨ê@F4€Z)2=E¢˜ E&G¨£#ÔPÕoù[× ?šUŒQUå—°Ý"#!E qÈɵiQT¾ß'üø\ßQÿñt}¾Oùð¸ÿ¾£ÿâèíKíòÏ…ÇýõÿGÛäÿŸ ûê?þ.€.ÑT¾ß'üø\ßQÿñt}¾Oùð¸ÿ¾£ÿâèíKíòÏ…ÇýõÿGÛäÿŸ ûê?þ.€.ÑT¾ß'üø\ßQÿñt}¾Oùð¸ÿ¾£ÿâèíKíòÏ…ÇýõÿGÛäÿŸ ûê?þ.€.ÑT¾ß'üø\ßQÿñt}¾Oùð¸ÿ¾£ÿâèíKíòÏ…ÇýõÿGÛäÿŸ ûê?þ.€.ÑT¾ß'üø\ßQÿñt}¾Oùð¸ÿ¾£ÿâèíKíòÏ…ÇýõÿGÛäÿŸ ûê?þ.€.ÑT¾ß'üø\ßQÿñt}¾Oùð¸ÿ¾£ÿâèíKíòÏ…ÇýõÿGÛäÿŸ ûê?þ.€.ÑT¾ß'üø\ßQÿñt}¾Oùð¸ÿ¾£ÿâèíKíòÏ…ÇýõÿGÛäÿŸ ûê?þ.€.ÑT¾ß'üø\ßQÿñt}¾Oùð¸ÿ¾£ÿâèíKíòÏ…ÇýõÿGÛäÿŸ ûê?þ.€.ÑT¾ß'üø\ßQÿñt}¾Oùð¸ÿ¾£ÿâèíKíòÏ…ÇýõÿGÛäÿŸ ûê?þ.€.ÑT¾ß'üø\ßQÿñt}¾Oùð¸ÿ¾£ÿâèíKíòÏ…ÇýõÿGÛäÿŸ ûê?þ.€.ÑT¾ß'üø\ßQÿñt}¾Oùð¸ÿ¾£ÿâèíKíòÏ…ÇýõÿGÛäÿŸ ûê?þ.€.ÑT¾ß'üø\ßQÿñt}¾Oùð¸ÿ¾£ÿâèu_ù]×&þUÆøoï÷ó®¦þñåÓ®PÚM17Ì̘{15Ëxsï7ûÇùÒ¹ƒî (ƒî )€Ë¯õf¼÷Ä_ñóýt_ç^…uþ¬×žø‹þ>bÿ®‹ü躲ÿ}¯ýqOýTõ—üƒíëŠè"§ Š( ¢¸„\[K $ ©#¶jZ(žùT/‘lØÝç°Ïá°ãó§}¢ûþ}­¿ð!¿øŠ’Šíßóímÿ ÿÄQö‹ïùö¶ÿÀ†ÿâ*J(?´_ϵ·þ7ÿQÉö«‰4pǺ¹Ù!rvœÊŒrX¢€ (¢€ (¢€ (¢€ (¢€ (¢€ FUu*ÊHÁpE-RÏN‚É£ Y¸ŽJAíV袀 (¢€ CÐÒÒ†€#¢Š) (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š¯ÿ ûŸúäßʹ}æÿxÿ:ê/ÿäsÿ\›ùW/áϾßïç@ÌpQDpQLC.¿ÕšóßÇÌ_õÑz×ú³^{â/øù‹þº/ó êËþAö¿õÅ?ôSÔ_òµÿ®)ÿ Šž€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ CÐÒÒ†€#¢Š) (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š¯ÿ ûŸúäßʹ}öÿxÿ:ê/ÿäsÿ\›ùW/áϾßïç@ÌpQDpQLC.¿ÕšóßÇÌ_õÑz×ú³^{â/øù‹þº/ó êă§Úãþx§þ‚*zËX<Õ,$ç pÊ?!Å/Ù[þy¿þ=!štVgÙ[þy¿þ=eoùæÿøô\ :+3ì­ÿ<ßÿž²·üóü z.™öVÿžoÿOGÙ[þy¿þ=mR]B+em6æ›x ²¸<õñYmñ_ý-?ï¡ÿÅÖÙ[þy¿þ=eoùæÿøõ”é¹;ó5ýzÓ¬¡8'ëó3¾Ûâ¿úZßCÿ‹£í¾+ÿ e§ýô?øºÑû+Ï7ÿÀ§§-™cŒ>·RTûüïðÿ"þ²¿çÜ~çþfgÛ|Wÿ@ËOûèñt}·Åô ´ÿ¾‡ÿZ±ÚÃ$Hù˜nãÏñ§}ŠïMÿßühö/ùßáþAõ˜ÿϸýÏü̶ø¯þ–Ÿ÷ÐÿâèûoŠÿèiÿ}þ.µþÅ÷¦ÿ¿ïþ4}ŠïMÿßühö/ùßáþAõ˜ÿϸýÏü̶ø¯þ–Ÿ÷ÐÿâèûoŠÿèiÿ}þ.µþÅ÷¦ÿ¿ïþ4}ŠïMÿßühö/ùßáþAõ˜ÿϸýÏü̶ø¯þ–Ÿ÷ÐÿâèûoŠÿèiÿ}þ.µþÅ÷¦ÿ¿ïþ4}ŠïMÿßühö/ùßáþAõ˜ÿϸýÏü̶ø¯þ–Ÿ÷ÐÿâèûoŠÿèiÿ}þ.µþÅ÷¦ÿ¿ïþ4}ŠïMÿßühö/ùßáþAõ˜ÿϸýÏü̶ø¯þ–Ÿ÷ÐÿâèûoŠÿèiÿ}þ.µþÅ÷¦ÿ¿ïþ4}ŠïMÿßühö/ùßáþAõ˜ÿϸýÏü̶ø¯þ–Ÿ÷ÐÿâèûoŠÿèiÿ}þ.µþÅ÷¦ÿ¿ïþ4}ŠïMÿßühö/ùßáþAõ˜ÿϸýÏü̶ø¯þ–Ÿ÷ÐÿâèûoŠÿèiÿ}þ.µþÅ÷¦ÿ¿ïþ4}ŠïMÿßühö/ùßáþAõ˜ÿϸýÏü̶ø¯þ–Ÿ÷ÐÿâèûgŠÿèiÿ}þ.µþÅ÷¦ÿ¿ïþ4}ŠïMÿßühö/ùßáþAõ•ÿ>ã÷?ó1¾Õâ¯úZÿßCÿ‹£í^*ÿ e¯ýô?øºÙû?Þ›þÿ¿øÑö(½7ýÿñ£Ø?ç‡ùÖ—üûÜÿÌÆûWŠ¿èkÿ}þ.µx«þ–¿÷ÐÿâëgìPÿzoûþÿãGØ¡þôß÷ýÿÆ`ÿþäZ_óî?sÿ3í^*ÿ e¯ýô?øº>Õâ¯úZÿßCÿ‹­Ÿ±Cýé¿ïûÿb‡ûÓß÷ÿ=ƒþwø}iϸýÏüÌoµx«þ–¿÷ÐÿâèûWŠ¿èkÿ}þ.¶~Å÷¦ÿ¿ïþ4}ŠïMÿßühöùßáþAõ¥ÿ>ã÷?ó2­î•[ìPÿzoûþÿãGØ¡þôß÷ýÿÆ´„9z·êcV¢›ºŠ^…§Ò§Ò«}ŠïMÿßühû?Þ›þÿ¿øÕ™–vŸJ6ŸJ­ö(½7ýÿñ£ìPÿzoûþÿã@vŸJ6ŸJ­ö(½7ýÿñ£ìPÿzoûþÿã@vŸJ6ŸJ­ö(½7ýÿñ£ìPÿzoûþÿã@vŸJ6ŸJ­ö(½7ýÿñ£ìPÿzoûþÿã@vŸJ6ŸJ­ö(½7ýÿñ£ìPÿzoûþÿã@vŸJ6ŸJ­ö(½7ýÿñ£ìPÿzoûþÿã@vŸJ6ŸJ­ö(½7ýÿñ£ìPÿzoûþÿã@vŸJ6ŸJ­ö(½7ýÿñ£ìPÿzoûþÿã@vŸJ6ŸJ­ö(½7ýÿñ£ìPÿzoûþÿã@vŸJ6ŸJ­ö(½7ýÿñ£ìPÿzoûþÿã@vŸJ6ŸJ­ö(½7ýÿñ£ìPÿzoûþÿã@vŸJ6ŸJ­ö(½7ýÿñ£ìPÿzoûþÿã@vŸJ6ŸJ­ö(½7ýÿñ£ìPÿzoûþÿã@vŸJ6ŸJ­ö(½7ýÿñ£ìPÿzoûþÿã@vŸJ6ŸJ­ö(½7ýÿñ£ìPÿzoûþÿã@vŸJ6ŸJ­ö(½7ýÿñ£ìPÿzoûþÿã@vŸJ6ŸJ­ö(½7ýÿñ£ìPÿzoûþÿã@vŸJ6ŸJ­ö(½7ýÿñ£ìPÿzoûþÿã@vŸJ6ŸJ­ö(½7ýÿñ£ìPÿzoûþÿã@vŸJ6ŸJ­ö(½7ýÿñ£ìPÿzoûþÿã@vŸJ6ŸJ­ö(½7ýÿñ£ìPÿzoûþÿã@ ¨4ûúæÃô®[ß}¿Þ?κ•³„0?¼lá¥f‘5Ëxsï·ûÇùÐsÜQÜS˯õf¼÷Ä_ñóýt_ç^…uþ¬×žø‹þ>bÿ®‹üè¶¶!m#$€Iªk¯éocöĺ˜b ˆÌY‡`Éü* NÚöóJ·‚Ñ"‘—ÏI%1ïOîäÔã\Œ ²|jȆËÊð]ØÂòp<ùQIwO3æÎ9×þd1 ÆÁKá¤ûg5_B}E®%ûiÕJíù~Û²®sÛÊç?^+2çZÓu-Íý¬ú}ÈÛÈ“Î:qÙA?‰öµºBèÙºÚöž5°;\#„`–Ò²«‚íކ״ñ¨½€yÚá#¶••X€@,hàŽõÏ]_Ác¯7öFªóÞ\Þ ¹ÓŠ+ƒÑY¸]Ë…É8â‹«ø,uæþÈÕ^{Ë›Ô:qEpz+7 ¹p£9'RZÛúì7¥ÎΊ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¸ÿ}öÿxÿ:ì+ðçßo÷󠿏(¢¸(¦!—?êÍyÿˆ”ý¢3ÿMó¯Cœe qú환 s@ª·ÙbùOݪ]­ýÓùWŸÝø¶þÙˆE›þUãÝDùÙÿßGü) ôý­ýÓùQµ¿º*óøOµ/úÙÿßGü(ÿ„ûRÿ  Ÿýô€=?ktþTmoîŸÊ¼ÃþíKþ€6÷Ñÿ ?á>Ô¿ègÿ}ð OÚßÝ?•[û§ò¯0ÿ„ûRÿ  ŸýôÂøOµ/úÙÿßGü(Óö·÷OåFÖþéü«Ì?á>Ô¿ègÿ}ð£þíKþ€6÷Ñÿ ôý­ýÓùRª¶áÁëé^_ÿ ö¥ÿ@?ûèÿ…ðŸj_ô³ÿ¾øP¥[ÿÇ´_îåRWšˆº¸ ÜÐ ü)áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿Â•~"ë qýn?í£…zMr>\;¼U³ñŽ«t@6éŸv5µ¡ÚÔ9 GOÜS¢QE0†EPº³ƒ‘Z4„@µÆƒ„‚ªŸ FOÜ•v;íG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åGü#Qÿp~UÙykéG–¾”ÆÿÂ5÷åJ<5?p~UØùkéG–¾”ÍÛhiQ[6Ö¢ 0*Ø@;S€€0(¥¢€?ÿÙnip2-8.7.0/doc/html/figs/toolkit.jpg0000644000175000017500000002771413341773367014200 00000000000000ÿØÿàJFIFÿáJExifMM*2:(&Áà† &Áà† ÿÛ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ÿUŸýpOýT>™ÿ «?úàŸú¨[”r~Ó4;ÍOÖµm¤ÖÙÔÝ]Ê@™.·|Ñnê|¨N˜cÖõO8êÚ (ÖÆ™ý•åG·Ëóü¬ç÷íý÷ÞÆÞØæº¶Ð´‡ÔƦÚU‹j¥Ñ·C(ÿã?­?û#LþÔþÓþδþÐÛ·í^Bù¸Æ1¿Æ=ê–âg¦]^?Øô‹mE´Ô»Ôu‰^æ4Frc¼|F»Ã.Nön„â3Z½ ø†ö÷PÑbº»‰âžÛQWuUU¸x."Ž9¦äÞØcè1Ò\èÚU홳ºÓ,çµ24¦ `VBìÅ‹m#%‰'®I=è»Ñ´­BÎ+;Ý6ÎæÖ,ypMº&Œ ãì5]__Ô4Ûkmqí­î®ï5¼1;:Ax‘C´²²Œ+c89rpG}UmôÛC¶²¶„Äc1Ä«°;p08ÜÀê@&­PEPEPEPEP=Wì_ÙŸÚ[~Ãä¿Ú7g0wtç§§5•àÏíìø›y˜ó_ì~úÿ³ç÷~wý4Ç_Ã<æº("ßîËÿ]åÿÑST6ÿv_úï/þŒjš aEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPSéŸò ³ÿ® ÿ Š‚§Ó?ägÿ\ÿAÖàQ´ñW‡õLZv³c0ÚLVS¬î`»Š¡$(,2ØÀÎIš±§k6zšþéöHe¸‰b€íäJb‘€Ï*Ú\àœW £vÓá·†g—Sµ6ŽšBEµ«Ã*«On¸i<Ö RŒç°â¢Ó-ôôñVyw5°k­jÛd…oí%1Ç€ÁX·ÏòwíhÅõ +Ë×SÕ›Æ ú…µµèÕ¼´‚]Zewµó0ÙˆŠ0h¹ß¸àœ– uµy#¾Ôî/o®'}BþY®£Ž5º‘UV<íà ÁÆ@àqG@êuQEQEQEQEQE2i¢¶…æžTŠ(Ô³»°UP:’OAO#"«ß¼qé×/5»Üı1x?1¤åB÷'¦+Áºf£¥h^F¡&7Lò[Úîßö8IÊC¿ø¶Ž3ø  Vÿv_úï/þŒjš¡·û²ÿ×yôcTÕ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ŸLÿUŸýpOýT>™ÿ «?úàŸú¦·Õ£x›M×ö<_4o™%›O¸†7CŒyU³F#ž•±T ¢Š(¢Š¯a{o©éö×ö’y–×1,оÒ7#Tàò2ë@(¢Š(¢Š(¢Š(¢Š(¨n³šêáŠÃ $`¥° dœM: ⹂9à•%†E’#eYO ‚:ŠÌ·û²ÿ×yôcTÕ ¿Ý—þ»Ëÿ£¦¨QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQETúgü‚¬ÿë‚è" ªCÄZV‘ac íÖÉZÝ"Fò09!AÇãU¹;$)4•Ù‡áí ]´ømoZ¾¥ý ÚÃÌpƶӘFÐ6Æ® ·3ùÉæ±®´¸¥ÑõÄðXÛ¿‡nโKG‰®.YWÊH̲%Æs¸rk²ÿ„ßÃÿóù7þMÿÄQÿ ¿‡ÿçòoü›ÿˆ­U*‰ß•ýÆn­?æ_yoàMø¿RYtv±:m C$9I%ó.7±'† ™c–óUô› /ê §Í«(AªÜ27œÁ¬å,&cÎ<М7C´ WAÿ ¿‡ÿçòoü›ÿˆ£þÿÏäßø 7ÿOÙTþW÷´§üËï8}O¸¸ñ&eÐc¶Žy&‡T‹û"u>[A/É=ÌŽVà ÎÒ Ç#8=‡ÃË+m;ÁZ}œ:kX\A qÞÆÖ†÷ ‡~ToÉ|du8«ð›øþ&ÿÀI¿øŠ?á7ðÿüþMÿ€“ñ½Oåp{Z}×Þt4W=ÿ ¿‡ÿçòoü›ÿˆ£þÿÏäßø 7ÿG±©ü¯îkOù—Þt4W=ÿ ¿‡ÿçòoü›ÿˆ£þÿÏäßø 7ÿG±©ü¯îkOù—Þt4W=ÿ ¿‡ÿçòoü›ÿˆ£þÿÏäßø 7ÿG±©ü¯îkOù—Þt4W=ÿ ¿‡ÿçòoü›ÿˆ£þÿÏäßø 7ÿG±©ü¯îkOù—ÞmÝÉ46sKonn&D-!ÂùŽ'ŸZÈðžƒ.¤Éó‰&žâK—Ž>!œäÇ=võäñœTð›øþ&ÿÀI¿øŠ–ßÅúÕÂAë $!WÌ‚Džƒ, PéT_eýÃö°}Q-¿Ý—þ»Ëÿ£¦ªö‘ÞÉl²¤6ûf&Q™˜–ÇÝ÷©ü‹ÿùãmÿÛÿˆ¬ ¢“È¿ÿž6ß÷ý¿øŠ<‹ÿùãmÿÛÿˆ¦ÑIä_ÿÏoûþßüEEÿüñ¶ÿ¿íÿÄPÑIä_ÿÏoûþßüEEÿüñ¶ÿ¿íÿÄPÑIä_ÿÏoûþßüEEÿüñ¶ÿ¿íÿÄPÑIä_ÿÏoûþßüEEÿüñ¶ÿ¿íÿÄPÑIä_ÿÏoûþßüEEÿüñ¶ÿ¿íÿÄPÑIä_ÿÏoûþßüEEÿüñ¶ÿ¿íÿÄPÑIä_ÿÏoûþßüE2 HÉu ÁÙ#*ÄuÀô¤”QEQEQEQEQEQEQEQEåÚ»cY¸çø ÿÑרהknãþ¹Áÿ¢#®ü»øß/ò8±ÿÂù–nôÖ¶íÒæ›„vG†°ÛÇ•¡¨EóLð­Á–0  ‰·(<äŒqW¥×Ãë·“¬¬ܘeŽÝQÉdp™`¡¹,:ýMC¦j6«§i¾Î²,þhyüÜòÎr0zŽý»úŠSKUý~šãôe8 ¸¹ßäA,»[ËBÛG¾:TšŒIi©ÝÛFX¤3 ®ÅBG>TH9Ú€p3ßëPï"Õ­æ{œ³gY‘$a<˜þS'îŽùþ•nA)Ç–è¾»¶QPiŸò ³ÿ® ÿ Šµ_4¶>„iyx¡ñ÷Šä~Yþ´F$ ûÇV9ê«·úšuÀŽ5˜7ï$†:,e© ¬ÞfD‘„ÏÝ1’<ÿJ’Šd‚S-Ñ}w!lþ¢”‰<¼PøûÅr?,ÿZuØÄxêÇ=UvÿSMf ûÉ#aŽ‹_êjJ(2³y™F?tÆIüóý)dœyn‹ë¹ gõú(¤Iåà:‡ÇÞ+‘ùgúÑ/ïX窮ßêiÔPq¬Á¿y$l1Ñc+ýMfó2$Œ&~錓ùçúT”P$œyn‹ë¹ gõ—o÷eÿ®òÿèÆ­zÈ·û²ÿ×yôcT±“QE€(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+Õ<{ªI¡a=¸óíâóveÃUÈ ÀWeSéŸò ³ÿ® ÿ ŠÖ•YS—4LêSHòÈóøWz÷üöÓ¿ïóÿñ»׿ç¶ÿŸÿˆ®Ïþoø·¿ð•}“þa_Ú_fó?é—™³v? ãß4þ"°±kÓwxCv¶«6²4ÌI Œ*î26~Tt8ÆTšêúõnç?Ô¨ö8oøWz÷üöÓ¿ïóÿñ»׿ç¶ÿŸÿˆ®¼øÊÄëºf›²¥ý¼³,Ëg9RDk Ÿ/.Û‹³hÝ®èãVþÌûYûO›äçÉ/ÌÆ|¿37ãøwgÚ¯VîR£Øá?á]ëßóÛNÿ¿ÏÿÄQÿ ï^ÿžÚwýþþ"»kèvºˆ±šíÄÆá-w-¼­œäÌ ³vXqœŽ§Xü]¢J×a.¤+fïò}š]‹"Éå”ß·i}ØA,rQõêÝÃêT{Gü+½{þ{iß÷ùÿøŠ?á]ëßóÛNÿ¿ÏÿÄWl|a¡®Ÿs}-ÜCk$qÎ.-¥‰ã20TÜŽ¡€$Œc¯<‡þC=ßÜðgÜyÊ¿ß1ìÜý¬m÷£ëÕ»‡Ôèö8ÿøWz÷üöÓ¿ïóÿñ»׿ç¶ÿŸÿˆ¯N·ž+«h®-äYa•Ç"†R2>„T”}z·púÇ–ÿ»׿ç¶ÿŸÿˆ£þÞ½ÿ=´ïûüÿüEz•}z·pú•Ç–ÿ»׿ç¶ÿŸÿˆ£þÞ½ÿ=´ïûüÿüEz•}z·pú•Ç–ÿ»׿ç¶ÿŸÿˆ©-þj²N‰ysf–äþðÅ#3mî*ë^‘w$ñYÍ%´yÑ G }›ØwlúÕ]Z´×l>ÕhÌ6¹Šhd’†G˜ñRxÚÍZãX:IìM¦È*Ïþ¸'þ‚+Í´?j2é¾»:Þµu{¨5¢ÜC}¥,6‡ÌÛæm—ÈŒp öâ Ù¯IÓ?ägÿ\ÿAƒaळ´Óìe×ukÍ>ÀÂ`´ŸÈTQ<”‰Xí*§–äœ×"èu2 ßǧø‚-6å4ÔYn’ÕcþÓCw¹Ü"·Ý$ƒ÷²ä‚¢ñv äÝI¢Ç–5FÓLÿlÌ…¾ÒmÕÄ{0T¾3–dð@ÉžOZ½Ã0Ôõ$µ7ë¨ý1œ%ä›È.3‚ÄsÆ01{þË?ì¿ìÿ2'ûCûCvá»ÌûOÚqÓîïã×o|ó@¾9OñZmÊi¨²Ý%ªÇý¦†ïs¸Eo ºIïd)ÉEâíAɺ“EŽ=,j¦™þÙ™ }¤Û«ˆö`©|g,Éà“<ž µ{†a©êIjo×Qû™ÿ «?úàŸú¨*}3þAVõÁ?ôMnÿ ÃHÿ…{ý‘ý‰¡ÿmÿe}›íŸdOøøò¶ù›önûüîÆ{õ­=CÃWsÿkºÛÙ]­M/!In%€ª­´PäJ€´o”n@?)Ç~:Ê*„rv¹cs¡ÝÉ=½ìö±\Û\ù×/•ŠicpUÊ#"ÄæÛ»©"˜|9«ùŸÙ¡ì²?µ´þѽüÿõÿhòömÛþ³Û¾ïs]}u¸t±æz«ÝYêQxjÞãMœI®Á|"óí{én_÷{qµrÇÌÝŒ.Üfºa¡jxRûO³»Ž é¯nnRTvQ²K§—i`2¤£m,*NFp+¦¢ŽÔà-<« ïæàAs.˜éê7…EµÑ–@d”g•<ÏaË® 6X¼Uª3Fa¸²¶·Eî ÎÍž1ŒJ¸ç±üu(  ¿ éÓhþÒ4»†FžÎÊy2J–D HÈ‚µ(¢€ (¢€ (¢€!»ŽylæŽÚqî…c˜¦ýŒG ·¾=*®¢ÚhVe´V;œË4ÒÉ4Ë;žìOø+BŠómSÄú¥½ÄvVW&Ö+h"RV4b䯭“¸ïÇ¥Qÿ„§_ÿ Äß÷æþ"¨ë-jãýÈ?ôDu¡4°ÜÅ2éæÅ¡³-»A¶dP2Nür@ýîqÓµ{4iST¢ÜVÇ‘V­GRIK¨ßøJuÿú Mÿ~aÿâ)Ïâ_FÛ_UI°ÐB8# ýÎàƒU>Ãö‡Ù÷>ϱ}£9Ýö3:g¥\½†ÒæeˆyâèiñË¿#g˶1Œò®zž•£…ü+¾Ä)Ökâx¯â/Çr¾§r±ÉŽmâ±×g5ü%:ÿý&ÿ¿0ÿñ5âiÓÜJïÒ%µ„àJ­»+Q÷F>ùÉçžqÚ£µÒ­'·‚Y%-ÉbŒ÷q'’¡Š‚Á°_¡Î1ý)(ѵÜWÜU¯e OøŠY8õYÝØ…UX!$“в›ÿ N¿ÿA‰¿ïÌ?üE?EŠÒCGyüöšâexÊ0 €I´dÎJžãk}Z¥I¶¹WÜK«U$ù™¹ÿ N¿ÿA‰¿ïÌ?üEð”ëÿô›þüÃÿÄVú7Õ}^—ò¢}½_æfçü%:ÿý&ÿ¿0ÿñÂS¯ÿÐboûóÿX{èßGÕé*oWù™¹ÿ N¿ÿA‰¿ïÌ?üEð”ëÿô›þüÃÿÄVú7Ñõz_ʃÛÕþfnÂS¯ÿÐboûóÿGü%:ÿý&ÿ¿0ÿñ‡¾¤‚V[ˆÊF$`ÃWpcž˜ïG°¥ü¨=½_æfÔ~1×-\K~×ÇóÇg:îMŽ™2îŽÖÑ×8ÊÆ¦’;]&fÛNØÎÔ_ð’h_ôÓ¿ð)?ÆøIt/ú éßøŸãG#ìë¹)µÒV_- ²gJ&*$³ÒáÇ›mf™é¹f¢ÿ„—Bÿ ÞÿIþ4ÂK¡ÐoNÿÀ¤ÿ9`ç]ÉþÁ¦ìöK]§>Zàç§j¥aÿ ûoúä¿ÈUÛ]_M¾”Åi¨Ú\IŒí†us 5JÃþAößõÉ©’³w,QE# (¢€ (¢€ (¢€ ŸLÿUŸýpOýT>™ÿ «?úàŸú¦·˜Òüq%Þ¦ƒ£_Þêé6º”écyh³è]ÇBòä’1Œó‹úoŒ-5IôñŽ¡®¢د&V9ÎÂøvñò«¹@ Oðç†áòÒüÿ/J³ÓÕíÏÙüߟ©ûÞoNØêsÁe៲iž³û^ÿì-Ÿ?—?m´tÏËþ³w~˜ïš¢I-¼J“j6Ö“ézšÝ–[YîcEI˜)} .§j±ÃªŸ”÷ªÖž3µ¼¿Ó­ÓMÔVßR•ã³½xÓÉ›lo&áóîªeFrdŒ­'áØÓ5½3Rk»ÂW94à—7!¢xÿ}>ò\üàä :SNÓu(¼I éqKw&™¢\JUeÓšB b3+)ùÔ.À8ÉnhÓXx®ÓP¼¶‰,ïb·¼,¶w’¢ˆ®J‚Çf°Ê«0Ü« ­êãtYø{S·žÖ-$Ak¸BÉ¥F—X*W >rبPOrrsÙPEPEPEPEP7iûßc1 ‡Êó)»nÇ8Ï¥gxw_‹Äʱ46Ó½­Ü såL‡ ¡º0ô#¨=ºVÜêÎkq4°ù¨SÍ…¶ºdc*{zNÓ­4«llaXmâD_Ô“Ô’y$òIÍyˆG­Ë¹H ¹î<”ˆ#ð¨ŸZ½’7F•>u*î"@ìP\ Ç?Zô“¥A{ ¥ÐIÖx£AíUb£ï!ì3þ­/þ|íð þ"»éãã(Ê7±ÃS)MÉJ×<é5»èàòVUÛ嘲bRÛ ®ìg=3ÅkwÒÛù0)刲#PÛ.ìgtÏ5è¿ðióçkÿ€PñÂ5¥ÿϯþAÿÄUÿhSþB>£?ç<͵ ‡ó7IŸ2$…þQÊ.Ý£ðØ¿•>ßUº¶‡ÊŠEØ +¾5r§ÕI©úb½'þ­/þ|íð þ"øF´¿ùóµÿÀ(?øŠÚ0µ¹õ ïÌyÍžµ}`¨¶ó*ìmèZ5b‡ØHü:ÕõêŸðióçkÿ€PñÂ5¥ÿϯþAÿÄP³-Tà$ôr<¯}ëÕ?áÒÿçÎ×ÿ ÿâ(ÿ„kKÿŸ;_üƒÿˆ§ý§åö|¿˜ò½ôo¯Tÿ„kKÿŸ;_üƒÿˆ£þ­/þ|íð þ"í8ÿ(gËù+ßFúõOøF´¿ùóµÿÀ(?øŠ?áÒÿçÎ×ÿ ÿâ(þÓò‡ö|¿˜ò½ôä™ãutvWSÊpA¯Rÿ„kKÿŸ;_üƒÿˆ£þ­/þ|íð þ"í8ÿ(gËù)“tÑ´H I Úª9,OVî±#6³6âNÈ EÏaä¡ÀüI?w¶ú•¤Ë5´PÃ*ý׎Öaô!+Ï5¶Æ·p?؃ÿDGUG«ÖVV²¡5°î­î×ê$ñ=´¥DÑÈѼ}J‘ïÓ®zÇÛ1o®Žâö;}Rå¼èÖHï5#†#‚br©½+5õÛÑ¥[:ß?Ú¼ùC¾ÿÞl ›A=vä·:úW\g'm?­NiB*úÿZÛèßOÕ¤‹ûbûÈ(aûDžYO»·qÆ1ÛOÌ­Sº¹“Vv,ï£}Vó(ó)ˆÒÓ%dÖôÖBU¾ÙÈë‚êüA#ñ¯K°ÿ}·ýr_ä+Ë4·Î·¦ú}ƒÿF-z‡üƒí¿ë’ÿ!^6eüHú¶_ð?RÅQ^qÞQEQEQE>™ÿ «?úàŸú¨*}3þAVõÁ?ôMnª+ÍtëW>´²»ºø’ú+ci?”£z\G¼K´ ¸Œ ²1Ï“þÕ_‡Æ×V>ðýíãim=æ™̳ê:”vBWd‚ §-žq…_˜`õÅîè®GDñ©­x¥üˆ-·6—e{yÈ•ÞqݰGÉ%•/€Ibëz…¿†¼g{¥G í”6ö× u½Ë­¹p^= *²ÆÄÄôÈáØW;Ú(¢ÂŠ( Š( Š( Š( Іî9¦³š+{ƒo3¡XæËlpØ<zVG„õéuý&Iç€G4[<‘ó ì‡H‰ê‡·§#œf€&·û²ÿ×yôcTÕ ¿Ý—þ»Ëÿ£¦¨QEQEQEQEQEQY>)½¸Ó¼#­_ZIåÜÛXO4O€vºÆÄ u¨?°5/úµ¯ûõgÿÈôÀÝ¢°¿°5/úµ¯ûõgÿÈô`j_ô7k_÷êÏÿ‘èv¸=[ÂúÌ×öúž›n·+40¾7 (ÊŠ¸!È| Öÿö¥ÿCvµÿ~¬ÿù‡ªCE‹õ ˆ¡Ty6|Óþ]ëZ5eJ\Ñ3«J5#Ë#Œ“Â^'–W’M.Fw%™ÄY$õ?~™ÿw‰?èÿ÷þ/þ.»ì_þ‡kþüÙò=Ù¿ý:×ýù²ÿäzêþÑ©ÙßQ§Ýœ?ü!Þ$ÿ Kÿßø¿øº?áñ'ý_þÿÅÿÅ×qý‘«ÿÐã­ß›/þG£û#Wÿ¡ÇZÿ¿6_üGö_!}BŸ™ÃÿÂâOú¿ýÿ‹ÿ‹£þïÐ%ÿïü_ü]wÙ¿ý:×ýù²ÿäz?²5úu¯ûóeÿÈôhÕò¨Só9}ÁºØÖ¬æ¼´û,L“3´¨ÙÚÁ€IêEw6ò¶ÿ®Kü…gdjÿô8ë_÷æËÿ‘êü;¨EÆž-Ö‚¨ •gÀöï\ÕëÊ´“‘ÓFŒi+Dߢ°¿°5/úµ¯ûõgÿÈô`j_ô7k_÷êÏÿ‘ëSvŠÂþÀÔ¿ènÖ¿ïÕŸÿ#Ñý©ÐÝ­ß«?þG  Ú+ ûRÿ¡»Zÿ¿VüT5k]WF·¶¼Oê—éö´3Ãk±ÒKˆã`v­÷\ô"€:Ê(¢O¦È*Ïþ¸'þ‚* ŸLÿUŸýpOýS[[LÐ4í.ÏM‚+t–M:Õm-îfEi–5P¸ÝŒ€3ŒéY‘ø*ÖÚ;²Ôõ+Ckaœ^tÐÇ¡‹!Áå¹M§Ÿ¦:j*„ai~·Ñç°’ÊöñÒÆŒ˜ÊÜEa™”ÎAv9R¹'œŽ*[oYÚXè6‘É9DÛöbÌ2û`xFþ9ù\ž1Î;q[PEPEPEPEPEP7v°ÞÙÍkp¥¡™ r(b¹R0FG"[AD‘C„HÑpª£€IEd[ýÙ뼿ú1ªj†ßîËÿ]åÿÑST (¢Š(¢Š(¢Š(¢Š(¢ŠÂñ·üˆ^"ÿ°]ÏþŠj©â­b].â@wÉhš&¡w,Èbi#ÜH>d8w3ž U¿È…â/ûÜÿ覨µMsYh§GNm"êÊI‘Àf3´y 9ÁUˆœ‘˜uç EmGÅ—öRk’Å¢¤Ö:+¤Ì×{×ÉIX¢l9 ?B@àsÎ…†³}&±¨é‰fó۽͹KŸ4•FE`ãhÚÃÌNaמ*[ŸZ]Yk–$â=gwÚ °Êî…!;8ãå@yÏ9úU¹4ø¥Õíµ&gó­à–Ý´¬1Ç-ˆŽîD*!¡eùT~@2I''$ñ„Áy”­/5;¯égRÓ#±?ÙWKŸ; Ëkß*á†@Èç‚jÄš®¼ž/Õlà³µ¸±¶Óàž$7%»yý–yfŒ)°¡C ’T[Ó|2š~«£&©¨ÞÍ ³ÚÄ.¤B©21*ŒœÆ>c’{“Æ.6’¿ÛÃVŽêâ) +ЦÃÊ¥ÊnÊ’6™¤uç#Š#¼sbñNm"iå[8. BÛDÏ)cyçÓÍZø¢ãí>wö`þÉûwöÚþÑûÏ7ÌòsåíûžgËÙïŒS­ü¤[ ?,Oþ‹v×hK˜œaŽQvÇÛÊNN9˜øVÔßùÿk½û/Ú~Ùö ëäyÛ·oû»¾÷ÍÛwsŠz_×õù-HüK¨ë:†ƒ“ ¬¢êñâ™n'1 \.Dn@ÊnÈç*!‰çZ¿Ñu/^Ŧ%Å…¥âÜ\Ê×;(³·,vÄœ£‘ƒ]N­¤®­·úUŤö³yðOo³z6ÖCë)Ê»AëPÜøzÒêË\´y'ë;¾ÐU†Wt) ÙÇ*ÎyÏÒ™—^#šÓQ¸µ²ÓZææMYlÉvUIûÏ¿v(Tz·$^°»e…Lº–žq8š2>Û\¸ àuè*=ÃÚ‚éÚƒ]^êVWW—æídó¢yÔyI c9ØNÐ Œ€: ~±¦A£øVÎÊݤt]ZÉËÈAfg¾‰Ù޳ÀžuTQE ŸLÿUŸýpOýT>™ÿ «?úàŸú¦·Í<9«êÍáM/Ó_]Ë©êÖ¶ÓÛ_I#4¢ £ß;ï<@=·B;Ö‰µ8<)áņú'»—F¶¹—̰ºÔ&•™Kˆy@Hûä¶Nî8ç¼°²·Ó4ûk Hü»kh–Sq;Q@ 2y8u¬§ðv†ðÚEöYcŽÖÙ-#X®¥t)ÂÆûXyŠ9áóÔúš¡ÞÕumsÅ&ü^A—s¢é÷‚É¡vdó|ó…3hmËËlù”(À۸ǥë:Þ£¦øSPÔ“H2jò+À±Ú¹6¥¬ç“xc'$áGaY×'9-§†ô»ìf´‚X^ÊÙ-!Ùq _)A ®»± Ž7ƒ‚r9枺š–u’@Éš¡mÊàÄMÃ’v; “ß=@402|?â‹{UžÅmá„éà¥ónÜ$“s òpyL£ÇÓn2oQT Ñ´ëg³x-R&²ˆÃŒ•Û+ÇQÀ89äÔUú(¢Š(¢Š(¢Š(¢Š¯~‘ɧ\¤×mDÁçI<¶Œc– ØŽ¹¬oêzŽ«¡yú„yÛ3Çou·gÛ! 6ÏáÜ9Çâ8"·¦†+˜^âIb‘Jº:†V¨ õð00("ßîËÿ]åÿÑST6ÿv_úï/þŒjš aEPEPEPEPEPMSO‹WÒ/tÛ†u†ò·‘£ 0WR¤Œ‚3ƒéY¿Ø—ý Ú×ýú³ÿäzÝ¢˜_Ø—ý Ú×ýú³ÿäz?°5/úµ¯ûõgÿÈõ»Ea`j_ô7k_÷êÏÿ‘êK?j7PLþ/ÖÃI¹+C‘Ï'“ÅO¦Å­sö{Oø„Êc2 –ÆÞ!"t/j¯Ì¼®G#Ö´5 ÝÝi3´ŽHºß™öbÌp»­#„oã™ñžïÅVñš%ýþ“¥é·ßf×L„Æa É ³«,®Ã²íi7?œüUÚMÿ>7?œüU2Š.Àö“ÏÏçÿU­¢³‚7eTBMEQE (¢€ (¢€ (¢€ ŸLÿUŸýpOýQE5¸ ¹Ò4ÛØ. »Óí'ŠáÄ“Ç,*Ë+39 *ŒžÀzT?ðh¿`’ÃûOûŒíþÌž[0A+Œ¨úéEú0ê‹0éöVÞO‘go‘EÈ•|´b UÀà«8ùG¥Vè’ Pú6žÂÓþ=ÃZ¡òyÏÉÇËÏ¥Uý¯™+á4¨¢Š‘…Q@Q@Q@Q@Q@ÿv_úï/þŒjšŠ*QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEÿÙnip2-8.7.0/doc/html/figs/snap1.jpg0000644000175000017500000006201013341773367013521 00000000000000ÿØÿàJFIFÿá°ExifII*JR(i‡Züÿÿ)( üÿÿ)( 0210‘ 0100 ÿÿ ã ÿÛ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ä Bàw¬ëÝJH^Y¥HãA–f8{šä'ø• £•[æou‚F˜\Pæ/­bú×›Ÿ‰z/üýÉÿ€òñ4ÂËÑçêOü“ÿ‰ HóÖ1}kÍÿáeè¿óõ'þÉÿÄÑÿ /FÿŸ©?ðOþ&€=#Ì_Z<Åõ¯7ÿ…•£ÏÔŸø'ÿGü,­þ~¤ÿÀy?øšô1}hóÖ¼ßþVÿ?Rà<ŸüMð²´oùú—ÿäÿâhÒ<Åõ£Ì_ZóøYZ7üýKÿ€òñ4ÂÊÑ¿çæ_ü“ÿ‰ HóÖ1}kÍÿáehßóó/þÉÿÄÑÿ +FÿŸ™ðOþ&€=#Ì_Z<Åõ¯7ÿ…•£ÏÌ¿ø'ÿGü,þ~eÿÀy?øšô1}hóÖ¼ãþNÿ?2ÿà<ŸüMð²tùù—ÿäÿâhÑüÅõ£Ì_ZóøY:?üüËÿ€òñ4ÂÉÑÿçæ_ü“ÿ‰ GóÖ1}kÎ?ádèÿóó/þÉÿÄÑÿ 'GÿŸ™ðOþ&€=Ì_Z<Åõ¯8ÿ…“£ÿÏÌ¿ø'ÿGü,þ~%ÿÀy?øšô1}hóÖ¼ãþFÿ?ÿà4ŸüMð²4ùø—ÿ¤ÿâhÑüÅõ£Ì_ZóøY?üüKÿ€Òÿñ4ÂÈÒ?çâoü—ÿ‰ GóÖ1}kÎ?ádióñ7þKÿÄÑÿ #HÿŸ‰¿ð_þ&€=Ì_Z<Åõ¯8ÿ…‘¤ÏÄßø /ÿGü,#þ~&ÿÀiøšô1}hóÖ¼çþ>‘ÿ?à4¿üMð±ôùø›ÿ¥ÿâhѼÅõ£Ì_ZóŸøXúGüüMÿ€Òÿñ4ÂÇÒ?ç¼ßø /ÿEÀôo1}hóÖ¼çþ>‘ÿ=æÿÀiøš?ácé?óÞoü—ÿ‰¢àz7˜¾´y‹ë^sÿ Iÿžóà4¿üMð±ôŸùï7þKÿÄÑp=Ì_Z<Åõ¯9ÿ…¤ÿÏy¿ð_þ&øXÚOü÷›ÿ¥ÿâh¸æ/­búלÿÂÆÒç¼ßø /ÿGü,m'þ{Íÿ€Òÿñ4\FóÖ1}kÎáci?óÞoü—ÿ‰£þ6“ÿ=æÿÀiøš.£y‹ëG˜¾µç?ð±´Ÿùï7þKÿÄÑÿ Iÿžóà4¿üMѼÅõ£Ì_ZóŸøXúOü÷›ÿ¥ÿâhÿ…¤ÿÏy¿ð_þ&‹èÞbúÑæ/­yÏü,}'þ{Íÿ€Òÿñ4ÂÇÒ?ç¼ßø /ÿEÀôo1}hóÖ¼çþ>‘ÿ=æÿÀiøš?ácéóñ7þKÿÄÑp=Ì_Z<Åõ¯9ÿ…¤ÏÄßø /ÿGü,}#þ~&ÿÀiøšôo1}hóÖ¼çþ>‘ÿ?à4¿üM'ü,#þ~&ÿÀiøšô1}hóÖ¼ãþF‘ÿ?à4¿üMð²4ùø›ÿ¥ÿâhÑüÅõ£Ì_ZóøYGüüMÿ€Òÿñ4ÂÈÒ?çâ_ü—ÿ‰ GóÖ1}kÎ?ádhÿóñ/þKÿÄÑÿ #GÿŸ‰ðOþ&€=Ì_Z<Åõ¯8ÿ…‘£ÿÏÄ¿ø 'ÿGü,þ~eÿÀy?øšô1}hóÖ¼ãþNÿ?2ÿà<ŸüMð²tùù—ÿäÿâhÑüÅõ£Ì_ZóøY:?üüËÿ€òñ4ÂÉÑÿçæ_ü“ÿ‰ GóÖ1}kÎ?ádèÿóó/þÉÿÄÑÿ 'GÿŸ™ðOþ&€=Ì_Z<Åõ¯8ÿ…“£ÿÏÌ¿ø'ÿIÿ +FÿŸ™ðOþ&€=#Ì_Z<Åõ¯7ÿ…•£ÏÌ¿ø'ÿGü,­þ~eÿÀy?øšô1}hóÖ¼ßþVÿ?2ÿà<ŸüMð²´oùú—ÿäÿâhÒ<Åõ£Ì_ZóøYZ7üýKÿ€òñ4ÂÊÑ¿çêOü“ÿ‰ HóÖ1}kÍÿáehßóõ'þÉÿÄÑÿ +FÿŸ©?ðOþ&€=#Ì_Z<Åõ¯7ÿ…•£ÏÔŸø'ÿGü,½þ~¤ÿÀy?øšô1}hóÖ¼ßþ^‹ÿ?Rà<ŸüMâ^‹ÿ?Rà<ŸüMzHp{Ò‚ yÜ_ô"ÀÇ[y?øšêôÍn×R·YígI¢nŒ‡?‡Ö€6¨¦#îú(¢Š*­Ô›šµYz›í‰¨ɾ(ê²²ÙÙ+‘Œîà»qŒÿßYüy¾êë~"J_P´ç “ÿe®3uK6ê7T;«®Ñt¤Ô| $‚ÁnnÓVŒHÉy[FAã;søP•ÄÝŽ_u«¼žÚÃNÔ|cršVŸ0±ò ¼3@4Ý× Æ? G±Ò­|f¤éeµÆœ“ˆbµ3ÇÆãê¼t÷¤µ·õÒãj×þ»™Ân£uwðh2Ùë:½ÍÝž•,P,_¸‡M3Œ7B‘näžô·Zw¯kÞ´µ·‚áãŠâÍÊc8RêPz}hÏ÷Qº½ËOÑo5­yí¬m¤rG‹O9[æ%#yÈ#9ª¶úv“sâëϳéd¼:qž; ‹s¼ã°Œó´Œ{Ð8ë‹›[+K¹,7aŒ$0%‚œ;sU·WYãI&} ÃqcŒ¦9÷[G‰cù—€§§¯ãZ>°Ñotm;V½¶µYy–×`Ä¿½ve–È œš}ñÁn£uz$z›g¨A¤=µÝõŽŸ-ÑB£72–ùVÀì}iiW:׆%½Ò-ì®/Dÿj±X¶! Ó垟J_×çþ@ô8‹m>æîÊòòS š«LK`€Ç¿J«º»ÿ Ïa¬Câ¿·³Ó¬±R 8¼¥À‘¹=y<jœ6ðCã»Û}GAˆEEa†ÚÏΊ1‘²FE¸ÇS×'·c¨Z×ò8ÍÔn¯@‹H{+¿I&¦^Þ[ÅÛ[ÅfZ,6AÄ}A dZFÐ-lj£š+Hq¦ »«mM£ž ¬YûgÆ€þ¿/ó8 Ôn¯F›BÒßđ˛1Ò äv>W”’ÌòóÇûµS@°Žþ}V÷RÐí­o-áɲ]9Šm$‚þFAcÆ:Ð ºÕ­âŲ‹Z"ÂÖ[U1+I püçyPx8ªº…¦—mk –:×Û¦cûÈ~Æñycw1ÁçŽ(ép+¼3Çs¼2,2’#‘”…|uÁïŠuv3Ër>iBßM†ò3ö•šW·2µ¸Ü~`GÜ>þÕ©k Ú¯†ä¶½²´’o춺Kˆl ²œdf}ß3{`ˆô¿-mæp—–6 j÷(]B'‹ Pô>ÕQM?™äÃ$¾Z—- lQÕŽ:s^›ojº„^²»Ñ­î4é4•3^¼'tBF$轸ëÍs~Ô§m_ÓGöXôéåŒfé’zž KüÿPZÛåøœžê7Tºt6w7B;ëÿ°Á´Ÿ;Èiyì6¯?Y³·´>(³´Šà^Ú5ÜIæŒbU,3•<ޤSJîÂoK”wU‹ë+½2í­o`h'P£x##¡"ºßÛØ\èÚóÅ¥ÙZK¦_,1IkŒºŒ6:šÖ½°·Wñ,öú5¥õŵ½©·‚Ko5rAÎ{Þ”¯¥ÿ­®Uµ·õ½7†)®e[Ã$Ò·D‰ 1úÍE5´­Ä2C*õIP«¨<×ku¢ÞZ[èe´™îôôšõ!b¢ß'æG `þ•‰ã;é®õKq%µäQ[À°E-äl’N«œŽrOùÍ Fê7T;¨Ý@n£uCºÔ6ê7T;¨Ý@n£uCºÔ6ê7T;¨Ý@n£uCºÔ6ê7T;¨Ý@n£uCºÔ6ê7T;¨Ý@n£uCºÔ6ê7T;¨Ý@n£uCºÔ6ê7T;¨Ý@n£uCºÔ6ê7T;¨Ý@n£uCºÔ6ê7T;¨Ý@n£uCºÔ6ê7T;¨Ý@n£uCºÔ6ê7T;¨Ý@n£uCºÔ6ê7T;¨Ý@n¤ÝQn¤f;:â€4¬ôËÛôó!DH³€ò¶úw5íæžWÏEØÇÐåIô­ñpâ(ÒØFQTÊàvƨ/§gÓ.à ù X°Ïn w  KKk«éLvñ†#ï18 õ5jïGÔ,á2ºÅ"(˘£ÜT¶S,Z(Ên”6Ó÷Àê:qVṉ/PApdSnqqÕqÔŸzÁn.§H-ã2Hç «Þ¶ÛÂzºÃæ²»cýZËó~£­'‡Z(o¯™0ùcÿwqÏòZÑŠîïíc{ÏöMçc˜ú7¢õÁÀÎü о&P›Œz¾N¥%RmëØår;#©GS†V úWgðãS–×[–Ø9òeŒ±\ñ¸ƒù\߈V.¸ÜÑ©÷¹þ˜«ž ¯ˆPîé]t§Ï.ç›^—²©*}™ôUŒÞd`æ´aèîZ­±Òµ1Š( ô¬[ýK}+\ô¬}[ýK}(Â> Ÿø˜[ÀÿöZã·W_ñþ?í¿àû-q”˜É7U‹]BòÅ™¬ï.-™†Á+!?\TÉÇSNdtÆôeÜ7 ÀŒQíH &þí„àÝÜq8[÷¸é»Ÿ›ñ©WÔ£œNšâÌF$YÜ0AÑsœãÛ¥P¢€/GªêÜÉsýÜsÉ÷åIØ;}XšhÔoEçÛíȺÿžþky1÷³žœU: ÀÍY‚òâÖ>Þâhfÿž‘9VüÇ4çÔ/$»owp×#‘3JÅÇü 9ª¬c‚®?…†åIš¹u¨^_2µååÅË(™åg#é’j5º xyV!ž0ä+ББUè  mv÷bíîîä|ó+È6sÒœu;漆úèÝ/s3yƒ·ÞÎ{Õ"qÔ⊲—wÅ4Iq*Ç6<ÔW IŽFáßñ©×XÔÒU•5+Õ•SËW'÷AÏOn•ŸEoé¾'»Ó¬µXÕ§{›ðƒí^{ #*IÎz’sŽ¢³Q½K³x··+tzÎ%a!ÿg5NŠ<À»&§}5Ò]K}u%Â}Ùžf.¿F'"œumDÝ‹³¨]›6‰Ìï¼MÙÎ*…fâî{¹Œ×3Ë<§«ÊåØþ'š‹u4#”gŘ@ÏLžÔ:PÊvJ¬PqЖ¯fëY†š–}ŒŽÒ «#Éc¡¶®8ÎIVý(ƒZ¼·Ñ¥Òã* ’Q)l|ÀŒp¡Â“þè¦ë½Î·¨5íÐŒHÊlc ‡ëõ4ßõý[BºO \£ »yl4éÖ9æVšÎ7}ʤŒ±\ž{W7Vì5 tç™áTc4/oáX`ãž´tbê¡a¦Ü-„ú›K ú‘ÌkcqE †Ø ]¿6H'\Ô'E²Ó­¦›W’å¶Ý½¢%¡U$¦71,Œ sê*½—ˆn,­ „ÚÚ\f/m$ñ–h 9ùyóÎ#4Û]zx"–‹{k褗Ï)t…€“» r{ö4z_Ö£õþ¿­ Iôïì­#ÄVb_5KVGÆ7+ÊHìpEKã}.;;ùï._>ñÃ[,xØT,H99ãhÁOaX¯^Mý£çˆ¦þÐÇ›½z9R¸Æ1Û¶;Sï0 }â ´ŽÂ3qrc¸’Óí"V»cRWr¡ŒŸ0ä`dw=1X‘kjwWê‘nD¡Áhó ŽÚ8©$×âÁ-®l¬î8¼˜îdFóQ;CqÛ ÔÙò¥Ößçÿ»«ÿ^FÝÍ…­õÕ³^4âm)È‚³`Œ@ëéXš®kogec$ÍktŸÑ€À#AÀ­/ÄH†V¾ŠÙŒZkZD6"nFÕ|LóÇÖ²5V]D@†-àJÅ B&NORI$õ$šÿ×wÿKoë²(ÑEÀ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+¡ðgüŒ)þáþ•ÏWAàÏùcÿpÿJúDÿR¿Jß+DÿR¿Jß*„-Q@éXú·ú–úVÁéXú·ú–úPžéú}ž©ãÈm/m¡¸…íf;e\38æ»_øAü(:èV?÷ê¹-þJE±ÿ§YÿšWc«ëñé:¥…´ÑHÑ],„¼q¼Œ»@ÆA'9¤ðƒøOþ€V?÷êøAü'ÿ@+ûõV®uý:Îæ;{‰¤‰äÛµš eºûv‚} ¬Ãâ«kT³Ô®<¨`1yDBÄ(eÉ,À{œS°áðŸý¬ïÕEsàÏ Ák,ðèv¢RüÀ¬pA¬kºøÑ­â•,¦º2éÄh‚ä¿Nü’ZÒ¾?ñ-ºôÅÿôE€Êÿ„WÿôÒÿð?ð£þ_ÿÐKÿÀ8ÿµè¤3#þ_ÿÐKÿÀ8ÿÂøE|;ÿ@ /ÿãÿ ×¢€2?áðïý4¿üü(ÿ„WÿôÒÿð?ð­z(#þ_ÿÐKÿÀ8ÿÂøE|;ÿ@ /ÿãÿ ×¢€2?áðïý4¿üü(ÿ„WÿôÒÿð?ð­z(#þ_ÿÐKÿÀ8ÿÂøE|;ÿ@ /ÿãÿ ×¢€2?áðïý4¿üü(ÿ„WÿôÒÿð?ð­z(#þ_ÿÐKÿÀ8ÿÂøE|;ÿ@ /ÿãÿ ×¢€2?áðïý4¿üü(ÿ„WÿôÒÿð?ð­z(#þ_ÿÐKÿÀ8ÿÂøE|;ÿ@ /ÿãÿ ×¢€2?áðïý4¿üü(ÿ„WÿôÒÿð?ð­z(#þ_ÿÐKÿÀ8ÿÂøE|;ÿ@ /ÿãÿ ×¢€2?áðïý4¿üü(ÿ„WÿôÒÿð?ð­z(#þ_ÿÐKÿÀ8ÿÂøE|;ÿ@ /ÿãÿ ×¢€2?áðïý4¿üü(ÿ„WÿôÒÿð?ð­z(#þ_ÿÐKÿÀ8ÿÂøE|;ÿ@ /ÿãÿ ×¢€2?áðïý4¿üü(ÿ„WÿôÒÿð?ð­z(#þ_ÿÐKÿÀ8ÿÂøE|;ÿ@ /ÿãÿ ×¢€2?áðïý4¿üü(ÿ„WÿôÒÿð?ð­z(#þ_ÿÐKÿÀ8ÿÂøE|;ÿ@ /ÿãÿ ×¢€2?áðïý4¿üü(ÿ„WÿôÒÿð?ð­z(#þ_ÿÐKÿÀ8ÿÂøE|;ÿ@ /ÿãÿ ×¢€2?áðïý4¿üü(ÿ„WÿôÒÿð?ð­z(#þ_ÿÐKÿÀ8ÿÂøE|;ÿ@ /ÿãÿ ×¢€2?áðïý4¿üü(ÿ„WÿôÒÿð?ð­z(#þ_ÿÐKÿÀ8ÿÂøE|;ÿ@ /ÿãÿ ×¢€2?áðïý4¿üü(ÿ„WÿôÒÿð?ð­z(#þ_ÿÐKÿÀ8ÿÂøE|;ÿ@ /ÿãÿ ×¢€2?áðïý4¿üü(ÿ„WÿôÒÿð?ð­z(#þ_ÿÐKÿÀ8ÿÂøE|;ÿ@ /ÿãÿ ×¢€2?áðïý4¿üü(ÿ„WÿôÒÿð?ð­z(#þ_ÿÐKÿÀ8ÿÂøE|;ÿ@ /ÿãÿ ×¢€2?áðïý4¿üü(ÿ„WÿôÒÿð?ð­z(#þ_ÿÐKÿÀ8ÿÂøE|;ÿ@ /ÿãÿ ×¢€2?áðïý4¿üü(ÿ„WÿôÒÿð?ð­z(#þ_ÿÐKÿÀ8ÿÂøE|;ÿ@ /ÿãÿ ×¢€2?áðïý4¿üü(ÿ„WÿôÒÿð?ð­z(#þ_ÿÐKÿÀ8ÿÂøE|;ÿ@ /ÿãÿ ×¢€2?áðïý4¿üü(ÿ„WÿôÒÿð?ð­z(#þ_ÿÐKÿÀ8ÿÂøE|;ÿ@ /ÿãÿ Ôšhíà’y[lq©wlg “\ýö¡ õä).ÖŠBøó`‰M¼ü¹ãuc^¼hÅÊBl¹ÿ¯‡è¥ÿàáXž&Ñt­6ÞÊk2ÊÖVº ^Žq:p?*ÖÓ5kx K[‰.|ß=ãS$r6A„ùÈ ðWœÕÿLJý~/þ‹zºu#R<ÑîihŸêWé[ã¥`hŸêWé[ã¥hÑE•«©o¥l•«©o¥púÿ‹…ô¶˜è5Õkv×Ë«éz™¼ÂT’‘Q°à`‚Äõï\χ×>;½ —úW¡Ð ¯iZæ¥5â5­ì«3ÄÖÞ]ê¤0¨ÚY]7 Ç!¹Ãv«·¶š¼Z–º¶ºWÚcÔ‘9ŒÈ¨˜iÜ Ýù]mt°Ó³¹Ïjš=Éð|]°óç„[¦ràŽ„ž}5µ}ÿ û¯úâÿú ©ê ïùÝ×ÿÐM6îJVEAöëOùúƒþþ >Ýiÿ?PßÁRQ=Û­?çêûø(ûu§üýAÿOEAöëOùúƒþþ >Ýiÿ?PßÁ@ÑP}ºÓþ~ ÿ¿‚·ZÏÔ÷ðPôTn´ÿŸ¨?ïà£íÖŸóõýü=Û­?çêûø(ûu§üýAÿOEAöëOùúƒþþ >Ýiÿ?PßÁ@ÑP}ºÓþ~ ÿ¿‚·ZÏÔ÷ðPôTn´ÿŸ¨?ïà£íÖŸóõýü=Û­?çêûø(ûu§üýAÿOEAöëOùúƒþþ >Ýiÿ?PßÁ@ÑP}ºÓþ~ ÿ¿‚·ZÏÔ÷ðPôTn´ÿŸ¨?ïà£íÖŸóõýü=Û­?çêûø(ûu§üýAÿOEAöëOùúƒþþ >Ýiÿ?PßÁ@ÑP}ºÓþ~ ÿ¿‚·ZÏÔ÷ðPôTn´ÿŸ¨?ïà£íÖŸóõýü=Û­?çêûø(ûu§üýAÿOEAöëOùúƒþþ >Ýiÿ?PßÁ@ÑP}ºÓþ~ ÿ¿‚·ZÏÔ÷ðPôTn´ÿŸ¨?ïà£íÖŸóõýü=Û­?çêûø(ûu§üýAÿOEAöëOùúƒþþ >Ýiÿ?PßÁ@ÑP}ºÓþ~ ÿ¿‚·ZÏÔ÷ðPôTn´ÿŸ¨?ïà£íÖŸóõýü=Û­?çêûø(ûu§üýAÿOEAöëOùúƒþþ >Ýiÿ?PßÁ@ÑP}ºÓþ~ ÿ¿‚·ZÏÔ÷ðPôTn´ÿŸ¨?ïà£íÖŸóõýü=Û­?çêûø(ûu§üýAÿOEAöëOùúƒþþ >Ýiÿ?PßÁ@ÑP}ºÓþ~ ÿ¿‚·ZÏÔ÷ðPôTn´ÿŸ¨?ïà£íÖŸóõýü=Û­?çêûø(ûu§üýAÿOEAöëOùúƒþþ >Ýiÿ?PßÁ@ÑP}ºÓþ~ ÿ¿‚·ZÏÔ÷ðPôTn´ÿŸ¨?ïà£íÖŸóõýü=Û­?çêûø(ûu§üýAÿOEAöëOùúƒþþ >Ýiÿ?PßÁ@í·Û,.-wìó¢h÷c8È#8ükÕíçÒf…e¸Ža2»± ©_V9ûߥuÿn´ÿŸ¨?ïàª÷'I¼Ûö¯±O·;|ÝŒõÆk—…xÙïщ£ IÒçÔmíïÔiŸ»Ë’HŽNíÝöúw«>2ÿ úü_ýëbôûx–(%µŠ5èˆÊ ~±|[$si¶M«¯Úו9qëJ#F<±¬ièŸêWé[ã¥`hŸêWé[ã¥nÑE•«©o¥l•«©o¥qÞñZôŠOå]îóí\/‡GüU¬}‡þ:jß¿åÇþÚìµ2vWŸ*¹×ï>Ôo>ÕätV^×ÈËÛy¹¼ûQ¼×‘ÑGµòmäzïšþ´y¯ë^EE×È=·‘ë¾kúÑæ¿­y{_ öÞG®ù¯ëGšþµäTQí|ƒÛy»æ¿­kúבQGµòmäzïšþ´y¯ë^EE×È=·‘ë¾kúÑæ¿­y{_ öÞG®ù¯ëGšþµäTQí|ƒÛy»æ¿­kúבQGµòmäzïšþ´y¯ë^EE×È=·‘ë¾kúÑæ¿­y{_ öÞG®ù¯ëGšþµäTQí|ƒÛy»æ¿­kúבQGµòmäzïšþ´y¯ë^sáŸùmàú¯C­#.esHK™\šþ´y¯ëL¢¨±þkúÑæ¿­2Ššþ´y¯ëL¢€æ¿­kúÓ( ù¯ëGšþ´Ê(þkúÑæ¿­2Ššþ´y¯ëL¢€æ¿­kúÓ( ù¯ëGšþ´Ê(þkúÑæ¿­2Ššþ´y¯ëL¢€æ¿­kúÓ( ù¯ëGšþ´Ê(þkúÑæ¿­2Ššþ´y¯ëL¢€æ¿­kúÓ( ù¯ëGšþ´Ê(þkúÑæ¿­2Ššþ´y¯ëL¢€æ¿­kúÓ( ù¯ëGšþ´Ê(þkúÑæ¿­2Ššþ´y¯ëL¢€æ¿­kúÓ( ù¯ëGšþ´Ê(þkúÑæ¿­2Ššþ´y¯ëL¢€æ¿­yͪØÚÜL‘£›¢§Ë…àœ“ÏÌk¿¯5_ùÚÿ×ãÿè XÎMUŠõýŠp‹¡95ª·êw'ú•úVøéX'ú•úVøé[œÂÑE•«©o¥l•«©o¥r~ÿ‘¥ÿÝ?ú UŸËý´ÿÙj·‡?äi÷Oþ‚ÕgÆßòãÿm?öZΧÂÈ©ð—Jˆ\ÀHhÉ=aRÕd³D¸2ƒÇU^ÀÖ ÝNun¥š¯y;[Û–Œ•ˆHÔô,zUЧuf×W1r°Æ ù«n”«yȪö±Ú¯”šE†Už~SË”çvNáÆ)ÛL<•”¦ÈGÊ?1Æ2hÐ4&’à$¾Xä|n!@à~&š×±¬›v¹‚åö¦Í²Ü#…`C‚wc¸¨à²håùº, vÏ?ìôÍ ²±,W%Ì©°˜Õ¶†À8ç<Ñö‡ûi‰P²*Œ‘Ž õçÒ–Ú)aÞ¯°¡bÁ999æš±N“NËå•äNAÆéF¡ºpǺO2Rííqϵ<Üm¹‘ÝŠÇc*}OõÿjÚË·1ùgËB„1#®2GåD¶rH'—çuu䎘àþTô„ðÜ ™—c£(‡àôþU#–Å3À'5´&%bÈ¡ØòCÏây©\1‚0V à‘œ—k÷1—U#‘\®ðyfLG¸ÇoÖ´¬dš[Uy”‚z0Xv$v5Žº5ä‘Ë$²0'jç!ýI>õ­§Eq ’%Ëý‡]£°Ïz¹òÛCIòÛC¢ðÏüŒ6¿ð?ýסמxgþF_øþ€kÐêéliGá (¢´5 (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ óUÿ5·ý}¿þ‚•éUæ©ÿ kúûý+ ÿ?Ðê¥þïSÖ?©ÜhŸêWé[ã¥`hŸêWé[ã¥t‚ÑE•«©o¥l•«©o¥r~ÿ‘¥ÿÝ?ú UŸËý´ÿÙj·‡?äi÷Oþ‚Õܧz™+« JêÇ‘Q^¿Egì|̽™äW¯ÑG±ócæyëôÉdHbyd`¨€³1è£Ùy‡±ó<ŽŠô±«Ï"‡‡FÔ%†U¢î¸fójÝÿÐ QÿÈ_ü]gh÷ü ~§?êßæy¥éÚ·ôÔòÿGö­ßýµü…ÿÅÑh÷üêsþ­þgšQ^—ý«wÿ@-Gÿ!ñtjÝÿÐ QÿÈ_ü]À>§?êßæy¥éÚ·ôÔòÿGö­ßýµü…ÿÅÑh÷üêsþ­þgšQ^—ý«wÿ@-Gÿ!ñtjÝÿÐ QÿÈ_ü]À>§?êßæy¥éÚ·ôÔòÿGö­ßýµü…ÿÅÑh÷üêsþ­þgšQ^—ý«wÿ@-Gÿ!ñtjÝÿÐ QÿÈ_ü]À>§?êßæy¥éÚ·ôÔòÿGö­ßýµü…ÿÅÑh÷üêsþ­þgšQ^—ý«wÿ@-Gÿ!ñtjÝÿÐ QÿÈ_ü]À>§?êßæy¥éÚ·ôÔòÿGö­ßýµü…ÿÅÑh÷üêsþ­þgšQ^—ý«wÿ@-Gÿ!ñtjÝÿÐ QÿÈ_ü]À>§?êßæq~ÿ‘†×þÿ ô:­k¨ §xd·žÚuPÆ)À®q‘‚Aô5f¶‚Ih5MÓ÷XQEc (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ óTÿ5¿ý}¿þ‚•éUæ©ÿ kúûý+ ÿ?Ðê¥þïSÖ?©ÜhŸêWé[ã¥`hŸêWé[ã¥t‚ÑE•«©o¥l•«©o¥r~ÿ‘¥ÿÝ?ú Wrë†ðçü/þéÿÐZ»”ïHc¨¢Šb (¢€ Îñü‹šŸýzÉÿ šÑ¬ïȹ©ÿ׬Ÿú ©ŸÂÍ)|qõA§Í+xŽî#˜“N´uBÇj±yÁ z«Ÿ ô­ªÂÓ¿äj¾ÿ°e—þ‡q[´ÖÄKvQE1Q@Q@Q@Q@Q@Q@Q@Q@Q@·ò4Û׌¿ú2:¹Tîÿäi¶ÿ¯¿ôdUr³†ïÔÖ¦Ñôÿ0¢Š*ÌŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¼Ù?ä oÿ_oÿ ¥zMy²Èßþ¾ßÿAJÂƇÏô:©»Ôõêvú'ú•úVøéX'ú•úVøé] ´QE¥cêßê[é[¥cêßê[é@Ÿ‡?äi÷Oþ‚ÕÜ!Æk‡ðçü/þéÿÐZ»jC$ÈõdzŠŽŠ“#ÔQ‘ê*:(LQUµo·i—VŠáLÑ4alŒf¥¢‡ª³ÚwFl7W6÷ qýƒpnZá’D¹ˆ†T,W¸ã.Ýçš±ý±}ÿ@+¯ûÿÿV¨¨äÌÿò5ö‘þUøÿ™Wûbûþ€W_÷þþ.í‹ïú]ßøøºµE¯ùŸáþBö‘þEøÿ™Wûbûþ€W_÷þþ.í‹ïú]ßøøºµE¯ùŸáþAí#ü‹ñÿ2¯öÅ÷ý®¿ïü?ü]Ûßôºÿ¿ðÿñujŠ9_ó?ÃüƒÚGùãþe_í‹ïú]ßøøº?¶/¿èuÿáÿâêÕr¿æ‡ù´ò/ÇüÊ¿Ûßôºÿ¿ðÿñtl_Ð ëþÿÃÿÅÕª(åÌÿòiä_ù•¶/¿èuÿáÿâèþؾÿ ×ýÿ‡ÿ‹«TQÊÿ™þäÒ?È¿ó*ÿl_Ð ëþÿÃÿÅÑý±}ÿ@+¯ûÿÿV¨£•ÿ3ü?È=¤‘~?æUþؾÿ ×ýÿ‡ÿ‹£ûbûþ€W_÷þþ.­QG+þgø{Hÿ"üÌ«ý±}ÿ@+¯ûÿÿGöÅ÷ý®¿ïü?ü]Z¢ŽWüÏðÿ ö‘þEøÿ™Wûbûþ€W_÷þþ.í‹ïú]ßøøºµE¯ùŸáþAí#ü‹ñÿ2„BæóUóÚµªÇB‘»«3eb~R@(ïëW袪1±3—3 (¢™!EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP^lŸò·ÿ¯·ÿÐR½&¼Ù?ä oÿ_oÿ ¥a?ãCçúT¿ÝêzÇõ;}ýJý+|t¬ ýJý+|t®ƒZ(¢€Ò±õoõ-ô­ƒÒ±õoõ-ô Oßò4¿û§ÿAjí«‰ðçü/þéÿÐZ»jC (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ódÿ5¿ý}¿þ‚•é5æÉÿ kúûý+ ÿ?Ðê¥þïSÖ?©ÛèŸêWé[ã¥`hŸêWé[ã¥t‚ÑE•«©o¥l•«©o¥r~ÿ‘¥ÿÝ?ú Wm\O‡?äi÷Oþ‚ÕÛRQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW›'ü­ÿëíÿô¯I¯6Où[ÿ×Ûÿè)XOøÐùþ‡U/÷zž±ýNßDÿR¿Jß+DÿR¿Jß+ äŠ( ô¬}[ýK}+`ô¬}[ýK}(“ðçü/þéÿÐZ»jâ|9ÿ#Kÿºô®ÚŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¼Ù?ä oÿ_oÿ ¥zMy²Èßþ¾ßÿAJÂƇÏô:©»Ôõêvú'ú•úVøéX'ú•úVøé] ´QE¥cêßê[é[¥cêßê[é@Ÿ‡?äi÷Oþ‚ÕÛWáÏù_ýÓÿ µvÔ†QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEæÉÿ kúûý+ÒkƒÔ4É´­:Ú Ú6f¸g #QÜJÆqn¬_¯ètSœU Ž]¿SªÑ?Ô¯Ò·ÇJÀÑ?Ô¯Ò·ÇJÜæŠ( ô¬}[ýK}+`ô¬}[ýK}(“ðçü/þéÿÐZ»jâ|9ÿ#Kÿºô®ÚŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¹ýÛ/÷Ïô®ž¹ýÛ/÷Ïô  ]ýJý+|t¬ ýJý+|t¦!h¢ŠJÇÕ¿Ô·Ò¶JÇÕ¿Ô·Ò€9?ÈÒÿîŸý«¶®'ßò4¿û§ÿAjí© (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+˜ñݲÿ|ÿJéë˜ñݲÿ|ÿJÕÑ?Ô¯Ò·ÇJÀÑ?Ô¯Ò·ÇJbŠ( ô¬}[ýK}+`ô¬}[ýK}(“ðçü/þéÿÐZ»jâ|9ÿ#Kÿºô®ÚŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¹ŸýÛ/÷Ïô®š¹ŸýÛ?÷Ïô  MýJý+|t¬ ýJý+|t¦!h¢ŠJÇÕ¿Ô·Ò¶JÇÕ¿Ô·Ò€9?ÈÒÿîŸý«¶®'ßò4¿û§ÿAjí© (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+™ñݳÿ|ÿJé«™ñݳÿ|ÿJÔÑ?Ô¯Ò·ÇJÀÑ?Ô¯Ò·ÇJbŠ( ô¬}[ýK}+`ô¬}[ýK}(“ðçü/þéÿÐZ»jâ|9ÿ#Kÿºô®ÚŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¹ŸýÛ?÷Ïô®š¹ŸýÛ?÷Ïô  MýJý+|t¬ ýJý+|t¦!h¢ŠJÇÕ¿Ô·Ò¶JÇÕ¿Ô·Ò€9?ÈÒÿîŸý«¶®'ßò4¿û§ÿAjí© (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+™ñݳÿ|ÿJé«™ñݳÿ|ÿJÔÑ?Ô¯Ò·ÇJÀÑ?Ô¯Ò·ÇJbŠ( ô¬}[ýK}+`ô¬}[ýK}(“ðçü/þéÿÐZ»jâ|9ÿ#Kÿºô®ÚŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¹ŸýÛ?÷Ïô®š¹ŸýÛ?÷Ïô  MýJý+|t¬ ýJý+|t¦!h¢ŠJÇÕ¿Ô·Ò¶JÇÕ¿Ô·Ò€9?ÈÒÿîŸý«¶®'ßò4¿û§ÿAjí© (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+™ñܳÿ|ÿJé«™ñܳÿ|ÿJÔÑ?Ô¯Ò·ÇJÀÑ?Ô¯Ò·ÇJbŠ( ô¬}[ýK}+`ô¬}[ýK}(“ðçü/þéÿÐZ»jâ|9ÿ#Kÿºô®ÚŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¹ŸýË?÷Ïô®š¹Ÿ}Ë?÷Ïô  MýJý+|t¬ ýJý+|t¦!h¢ŠJÇÕ¿Ô·Ò¶JÇÕ¿Ô·Ò€9?ÈÒÿîŸý«¶®'ßò4¿û§ÿAjí© (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+™ñwܳÿ|ÿJé«™ñwܳÿxÿJÔÑ?Ô¯Ò·ÇJÀÑ?Ô¯Ò·ÇJbŠ( ô¬}[ýK}+`ô¬}[ýK}(“ðçü/þéÿÐZ»jâ|9ÿ#Kÿºô®ÚŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¹Ÿ}ËO÷ô®š¹Ÿ}ËO÷ô  MýJý+|t¬ ýJý+|t¦!h¢ŠJÇÕ¿Ô·Ò¶JÇÕ¿Ô·Ò€9?ÈÒÿîŸý«¶®'ßò4¿û§ÿAjí© (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+™ñwÜ´ÿxÿJ髚ñwÜ´ÿxÿJÓÑ?Ô¯Ò·ÇJÀÑ?Ô¯Ò·ÇJbŠ( ô¬}[ýK}+`ô¬}[ýK}(“ðçü/þéÿÐZ»jâ|9ÿ#Kÿºô®ÚŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¹¯}ËO÷ô®–¹¯}ËO÷󧢩_¥oŽ•¢©_¥oŽ”Ä-Q@éXú·ú–úVÁéXú·ú–úP'áÏù_ýÓÿ µvÕÄøsþF—ÿtÿè-]µ!…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@s^.û–Ÿïæ+¥®kÅßrÓýãüÅièŸêWé[ã¥`hŸêWé[ã¥1 EPzV>­þ¥¾•°zV>­þ¥¾”ÉøsþF—ÿtÿè-]µq>ÿ‘¥ÿÝ?ú WmHaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP\׋¾å§ûÇùŠékšñwÜ´ÿxÿ1@z'ú•úVøéX'ú•úVøéLBÑE•«©o¥l•«©o¥qº:–×.ñ!ˆyL £þYä2†ü §ý—'ý rßGÿ‹ª^,ß‹ÿ0úínëî_ärßÙrÐ×'ýôøº?²äÿ¡®OûèÿñuÔÑGÕ©öü_ù‡×kw_rÿ#–þË“þ†¹?ï£ÿÅÑý—'ý rßGÿ‹®¦Š>­O·âÿÌ>»[ºû—ù·ö\Ÿô5Éÿ}þ.ì¹?èk“þú?ü]u4Qõj}¿þaõÚÝ×Ü¿È忲äÿ¡®OûèÿñteÉÿC\Ÿ÷Ñÿâë©¢«Síø¿ó®Öî¾åþG-ý—'ý rßGÿ‹£û.Oúäÿ¾ÿ]M}ZŸoÅÿ˜}v·u÷/ò9oì¹?èk“þú?ü]ÙrÐ×'ýôøºêh£êÔû~/üÃëµ»¯¹‘ËeÉÿC\Ÿ÷ÑÿâèþË“þ†¹?ï£ÿÅ×SEV§Ûñæ]­Ý}ËüŽ[û.Oúäÿ¾ÿGö\Ÿô5Éÿ}þ.ºš(úµ>ß‹ÿ0úínëî_ärßÙrÐ×'ýôøº?²äÿ¡®OûèÿñuÔÑGÕ©öü_ù‡×kw_rÿ#–þË“þ†¹?ï£ÿÅÑý—'ý rßGÿ‹®¦Š>­O·âÿÌ>»[ºû—ù·ö\Ÿô5Éÿ}þ.ì¹?èk“þú?ü]u4Qõj}¿þaõÚÝ×Ü¿È忲äÿ¡®OûèÿñteÉÿC\Ÿ÷Ñÿâë©¢«Síø¿ó®Öî¾åþG-ý—'ý rßGÿ‹­ë{«Hm¢‰ïâ‘‘—.2ĽjÝp¥kÔέz•U¦ÿ¿"·YÏÜ?÷Ø£íÖ_ó÷ýö*z+C·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø£íÖ_ó÷ýö*z(·YÏÜ?÷Ø®Å2$ðÛÉ ¬ˆ´²œŒžß¥tõ…â¿ùÅÿ_ ü[Ñ?Ô¯Ò·ÇJÀÑ?Ô¯Ò·ÇJbŠ( ô¬}[ýK}+`ô¬}[ýK}(“ð÷üŒ“ÿº?­tÖºšB¢¬ q3,ŠØØ…‚î'·'_ιÿÈÉ?û£úÖŽ¹á뫘ï&³½¸2ܼe¡Ä{p¤t,¹N3×ëK¨úu]bïKó'm7}ŒEwÍç€Ø8TÇ8Ïr+JæYb¶i-à3Ê>ìa‚çñ=+ ö=FMYúuÍ핲¡‹d‘(–Nîà°éØcçÒ´/.µAk}öM?3"¨¶&U>a#“ŒŒm÷<âŽÔ©ÿ Am¨5퉆âËfèÒPêÛþîñÈâ®iÚœ×W—wV‹oq £’ùŠU³Žp9àñŠÉûìºåœZ}ÄWᥒæXË\’Fñ•c‚@ tŒUNšÎþîT±k 9·yC’ã9n cíL] ÛY»¸º¸‹LÓEÔvïåÉ,“ˆ”¸ê«ÁÎ? .µ{Øõìm´èå˜Û}¡üËyÆ>éÍTX5]$jÖ¶-w Ä’M ±LˆÑ—ä† GCÜf©Ï¤]½Ý„÷ÚGö¦Í=a4‘’%ÎIùÈÏ~E%ý}Ïõ멹k­%Öƒ&¨!d¤…£,)@#‚2:Õ-7Ä éßmÔæDWdTXí&R í²_ꣶZ]ì½³xÂÉ*Ëä[‰7•Ú›§åR\é÷RXh‘,Y{iáy†áò…R~ }~ïø"é÷ÿÀ-O¯iÖÑE$³:‰Tº¯’å¶Ž¤¨ÜN¹×4ÛD‰å¹LžbyhÒŸÞƒǿJÊÖ4«—×>ß½ÍÌ2[ˆY-®Ì¤s÷”sëU§Ðf¶»·žÚÊíí¾È°-ïŒRDA'“¸úö¥ý~c:,sÅo4N¯°ee9l¥¨øƒMÒ®sºÊSÌÚ¼˜\ãqÚÖ§³¶ŽÎÂÊÞ(Œ)F[q_•¸Ïz¦Ö7År^ùèÍ`!¸rûÉÆ:ô¡ï -µ5˜´}ªØÙ‹!u¬[nOÍŸ»·ºÓ´ÿiš¤ÞM¥Ã4»<ÀÆY}T0â¹h4{ý?G™î òÖ-­ÜïS‡Ž8>úUí& GRŸB¹›O6–öäù*±˜²Bž~qÛŠv_×Ïü…ý~ üÍ(µÛÄÕ­¬µ /ì«tÉu¸”d†qÇ¡5£o©ÙÝiƒQ†pÖ› ù„Frpyìk G]MµW½Ôôk‘u)dYLИà9  9<àdã$û Ø1M«hrÁ}nl幉ã’! r™Èê8¦:xºY'o/J‘áQ¹¶³q»`8çi}ÞÙâ¯ê:Í彨¼°Ó–òÐAç´ÆäF6ã?(Á$ãžp=ë"ÒÛÄ–/=¼6±•‹;¾Ór¸,~à8ÎÒ‡Ó=ê]GO¿Š=?I‹O¹¼Ò-àQ7“,hfaÀVÜÃåã'r­€¼Ësx’Yô½9¯%’ÕnÝ^QÈÏAÐå<{u¤¼ñ\Pi6z…µ•ÅÌwA6¬a˜/ÌÝÉè2Gq©k«RËK3}¦Í`{s2#BêI\œà˜ƒ‚zw¦Í ÝCà{}&&¹ŒÂ[ $H¬Ø'u¦­øþ¯þµþ¾F޵©Þép=Ä|wñFd•ÞäF@@œ})uil|:ut¤_-$1ØpÄpx8ëU|Io%ü?d:ÔSnèåó‘oÈÏ$0ǨÍ3TÒõÿgûV¡äƮۀÞÀ®NN=Z˜ú¢Ýç‰ô>êKk«£‘íó’åSwMÌÑŸsRZøƒK¼Žåá¹8¶O2Q$N…WîÃHàò+Rѯ®!ñBÇo¸ßEÛüëó‘=xç׺ÍÊÏ©^´xƒûá/¸}ðXãzT·oëÈi^ß×c_Oñ™ªOäÚ\–—fð’Dñ–_P qE¿ˆt««ág Øi‰e_‘‚¹^¡X¬G±5‡¥Ûj:¬š$óX›+{+cûÖ•XÊZ0 (SÀïÎ;qQh>žÊ[+kí>ñÍ›×öh2„eò ÛÆMSVv%;«šÓøžÊm:â}>å3_ÞÏo/•Ë…à…ù½8Í]»×4û´µº™ã‘Ê€ÆÙ“ÐÆÑŸsXŸØÚ‡ü+øôϳÿ¦¹zö”7\ã§½Tñ‘­jWÑù—É$fÕ¢»T†4Ia“Np{QÖÃ:->ú{wWµ‘ŠÙ¢:nLŸ¯5]µÛۛ˘t(^Elæ)f’àD¥ÇU^qø “O³º¶ñ&­<ÿ£]ž9Cª»J‘×=ý*•¤Z¶ƒq{[_ÚOp÷I茅ÎJ°b:ò3Å/òFïÄZfŸ*Á{p!Ÿ`y+8ˆï2‚{œUSXº¶Ôoâ‚Eò¡Òšê?”Ÿ-ƒžãU®lõx'ÕÄbÜ®ªŠC”[ËUóÉùsÞ›/‡ïâ—ȉÑ>Œl ÅÀÛ Î œöÍoë³þ¾ôjÿÂCee§ÙI¨\<ð,¥R&sŒ ¶zô©®¼A¥Ù¤-ÖápždBiK¯÷€@N=ëš“DÔ…Åì–’fÁ-¥·µ¿òdžr+)Ï­NÖÒxvõ.­lU펞°éÛí$õsÊüÜ{S“Wo×õ&7²þ»rø—H†ÞÞv»Ìwù±ùq;’ŸÞ!A {‘ZpÍÄÍ ¬‘H¡‘Ôä0=¯=Òô[Óc¥j)kws šrBÑZÞ›wB `~ò†RÖºÍ&d´ºD‚É¡†ÚÍ%$˼ÆXúô<æ‹tþº‚}®…›MOíZÆ¡aäíûŒïÝûÁ=1Æ1L¾ñ•¦Üýžîè$¡C0Ì…ˆ(÷8¬À5M;ĺ­ÔZ<÷]vÙâ¿ú Ý~Ÿá@·ç'«ÿß¶ÿ <äõûößá^IöÏÿÐ^ëôÿ >Ùâ¿ú Ý~Ÿá@·ç'«ÿß¶ÿ <äõûößá^IöÏÿÐ^ëôÿ >Ùâ¿ú Ý~Ÿá@·ç'«ÿß¶ÿ <äõûößá^IöÏÿÐ^ëôÿ >Ùâ¿ú Ý~Ÿá@·ç'«ÿß¶ÿ <äõûößá^IöÏÿÐ^ëôÿ >Ùâ¿ú Ý~Ÿá@²Î®ÑÜpù9FO¨÷©kÈ~Ùâ¿ú Ý~ŸáGÛÙâ¿ú Ý~Ÿá@½EyÛBë`¼¹š`p푚éôeÄ+ô­ÑÒ³¬!òã¤:SQESC (  3Ù£õ¨¾• ‚Š(ŸØðz ?±àôQ@ö<‚ìx=Pý £ûAEcÁè(þǃÐQEØðz ?±àôQ@ö<‚ìx=Pý £ûAEcÁè(þǃÐQEØðz ?±àôQ@ö<‚ìx=Pý £ûAEcÁè(þǃÐQEØðz ?±àôQ@ö<‚ìx=Pý £ûAEcÁè(þǃÐQEØðz ?±àôQ@ö<‚ìx=Pý £ûAEcÁè(þǃÐQEØðz ?±àôQ@ö<‚ìx=Pý £ûAEcÁè(þǃÐQEØðz ?±àôQ@ö<‚ìx=Pý £ûAEcÁè(þǃÐQEØðz ?±àôQ@ö<‚ìx=Pý £ûAEcÁè(þǃÐQEØðz ?±àôQ@ö<‚ìx=Pý £ûAEcÁè(þǃÐQEØðz ?±àôQ@ö<‚ìx=Pý £ûAEcÁè(þǃÐQEØðz ?±àôQ@ö<‚ìx=P×I„‚®AetŠ(ühqRQEQEÿÙnip2-8.7.0/doc/html/figs/snap16.jpg0000644000175000017500000033140113341773367013612 00000000000000ÿØÿàJFIFÿá°ExifII*JR(i‡Züÿÿ)( üÿÿ)( 0210‘ 0100 ÿÿ q ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀq"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?÷ú(¤cšZ+ÎüOñcNе,-m^úâ#¶R$ŠßÝÎHïÅsÿð¼$ÿ ÿÀÏþ×EÀöJ+ÆÿáxIÿ@ÿŸý®ø^Ðàgÿk¢à{%ãð¼$ÿ ÿÀÏþ×Gü/ ?è?ð3ÿµÑp=’Šñ¿ø^Ðàgÿk£þ„ŸôøÿÚè¸ÉExßü/ ?è?ð3ÿµÑÿ ÂOúü ÿít\d¢¼oþ„ŸôøÿÚèÿ…á'ýþöº.²Q^7ÿ ÂOúü ÿítÂð“þ€ÿ?û]Ù(¯ÿ…á'ýþöº?áxIÿ@ÿŸý®‹ì”WÿÂð“þ€ ÿŸý®ø^Ðð3ÿµÑp=’Šñ¿ø^Ðð3ÿµÑÿ ÂOú/þöº.²Q^7ÿ ÂOú/þöº?áxIÿ@ÿÀÏþ×EÀöJ+ÆÿáxIÿ@ÿÀÏþ×Gü/ ?è¿øÿÚè¸ÉExßü/ ?è¿øÿÚèÿ…á'ýWÿ?û]Ù(¯ÿ…á'ýWÿ?û]ð¼$ÿ  ÿàgÿk¢à{%ãð¼$ÿ  ÿàgÿk£þ„Ÿô_ü ÿít\d¢¼oþ„Ÿô_ü ÿítÂð“þ€+ÿŸý®‹ì”WÿÂð“þ€+ÿ‡ÿÑÿ ÂOú¯þþ7EÀöJ+ÆÿáxIÿ@ÿÀÃÿÆèÿ…á'ýWÿÿ¢à{%ãð¼$ÿ  ÿàaÿãtÂð“þ€+ÿŸý®‹ì”WÿÂð“þ€+ÿŸý®ø^Ðð3ÿµÑp=’Šñ¿ø^Ðð3ÿµÑÿ ÂOú¯þöº.²Q^7ÿ ÂOú¯þöº?áxIÿ@ÿÀÏþ×EÀöJ+ÆÿáxIÿ@ÿÀÏþ×Gü/ ?è¿øÿÚè¸ÉExßü/ ?è¿øÿÚèÿ…á'ýÿ?û]Ù(¯ÿ…á'ýÿ?û]ð¼$ÿ ÿàgÿk¢à{%ãð¼$ÿ ÿàgÿk£þ„Ÿô_ü ÿít\d¢¼oþ„ŸôøÿÚèÿ…á'ýþöº.²Q^7ÿ ÂOúü ÿítÂð“þ€ÿ?û]Ù(¯ÿ…á'ýþöº?áxIÿ@ÿŸý®‹ì”WÿÂð“þ€ÿ?û]ð¼$ÿ ÿÀÏþ×EÀöJ+ÆÿáxIÿ@ÿŸý®ø^Ðàgÿk¢à{%ãð¼$ÿ ÿÀÏþ×Gü/ ?è?ð3ÿµÑp=’Šñ¿ø^Ðàgÿk£þ„ŸôøÿÚè¸ÉExßü/ ?è?ð3ÿµÕ«¶²Ü¢_i[ÂN ‘Ïæ÷ÆÑEÀõª* KÈ/­b¹·‘d†Uާ†¡©è¢²¼A¯ZxwHŸQ¼'ˈp«÷œžä×Ý|i×f6¶EŸ•dì¹ ?•{®hÍxü._϶™ÿ~¤ÿâèÿ…ËâOùöÓ?ïÔŸü]+5àð¹|Iÿ>Úgýú“ÿ‹£þ/‰?çÛLÿ¿Rñt\|ͯÿ…ËâOùöÓ?ïÔŸü]ð¹|Iÿ>Úgýú“ÿ‹¢à{æhÍxü._϶™ÿ~¤ÿâèÿ…ËâOùöÓ?ïÌŸü]ß3FkÀÿárø“þ}´Ïûó'ÿGü._϶™ÿ~dÿâè¸ùš3^ÿ —ÄŸóí¦ß™?øº?árø“þ}´Ïûó'ÿEÀ÷ÌÑšð?ø\¾$ÿŸm3þüÉÿÅÑÿ —ÄŸóí¦ß™?øº.¾fŒ×ÿÂåñüûiŸ÷æOþ.ø\¾#ÿŸm3þüÉÿÅÑp=ó4f¼þ/ˆÿçÛLÿ¿2ñtÂåñüûiŸ÷æOþ.‹ï™£5àð¹|Gÿ>Úgýù“ÿ‹£þ/ˆÿçÛLÿ¿2ñt\|ͯÿ…Ëâ?ùöÓ?ïÌŸü]ð¹|Gÿ>Úgýù“ÿ‹¢à{æhÍxü._ÿ϶™ÿ~dÿã”ÂåñüûiŸ÷æOþ9EÀ÷ÌÑšð?ø\¾#ÿŸm3þüÉÿÇ(ÿ…Ëâ?ùöÓ?ïÌŸür‹ï™£5àð¹|Gÿ>Úgýù“ÿŽQÿ —Äóí¦ß™?øåß3FkÀÿárøþ}´Ïûó'ÿ£þ/ˆÿçÛLÿ¿2ñÊ.¾fŒ×ÿÂåñüûiŸ÷æOþ9Gü._ÿ϶›ÿ~dÿã”\|ͯÿ…Ëâ?ùöÓïÌŸürø\¾#ÿŸm7þüÉÿÇ(¸ùš3^ÿ —Äóí¦ÿß™?øåð¹|Gÿ>Úgýù“ÿŽQp=ó4f¼þ/ˆÿçÛLÿ¿2ñÊ?árøþ}´Ïûó'ÿ¢à{æhÍxü._ÿ϶™ÿ~dÿã”ÂåñüûiŸ÷æOþ9EÀ÷ÌÑšð?ø\¾#ÿŸm3þüÉÿÇ(ÿ…Ëâ?ùöÓ?ïÌŸür‹ï™£5àð¹|Gÿ>Úgýù“ÿŽQÿ —Äóí¦ß™?øº.¾fŒ×ÿÂåñüûiŸ÷æOþ.ø\¾#ÿŸm3þüÉÿÅÑp=ó4f¼þ/ˆÿçÛLÿ¿2ñtÂåñüûiŸ÷æOþ.‹ï™£5àð¹|Gÿ>Úgýù“ÿ‹£þ/ˆÿçÛLÿ¿2ñt\|ͯÿ…Ëâ?ùöÓ?ïÌŸü]ð¹|Iÿ>Úgýù“ÿ‹¢à{æhÍxü._϶™ÿ~dÿâèÿ…ËâOùöÓ?ïÌŸü]ß3FkÀÿárø“þ}´Ïûó'ÿGü._϶™ÿ~dÿâè¸ùš3^ÿ —ÄŸóí¦ß™?øº?árø“þ}´Ïûó'ÿEÀ÷ÌÑšð?ø\¾$ÿŸm3þüÉÿÅÑÿ —ÄŸóí¦ß©?øº.¾fŒ×ÿÂåñ'üûiŸ÷êOþ.ø\¾$ÿŸm3þýIÿÅÑp=ó4f¼þ/‰?çÛLÿ¿RñtÂåñ'üûiŸ÷êOþ.‹ï™£5àð¹|Iÿ>Úgýú“ÿ‹£þ7‰?ç×Lÿ¿2ñt\|¢¼ÃÁŸ¶õ(ôÍVÚ;{‰Ž"–"v3tƒ’§5éÊÛ†i€´QERú_*5n²õs‹fúPÊ#Ë#Hä³¹,Ä÷'­74”TŒ\Õ©,gŠÊ;¶ å?LG¡"«Â‹,ñÆî¨¬À31À½n5æŸs5Í¿™",‰å†r¢1·¡t6ßNšê0ÑÉæÎØÚL;cÐU:Ô°Ž(m ñÝZ­ãä6P<±Ó zÖ|MSŸ:!: ¢B Ÿ\Š:€Å ìFYŽÍ^›Kš'… ±… °ùö8ÏçUUÃ^+ÀÜo7>B}I­J4‚yź^³gxþñÖ˜£±žK×´‰Å‰Ú1ß8¤’˜`”+3ùiÉÎsŽxéZW7¶ÆÊK¨ä_µÜƱºÊÿxãüöªË4COÓ“ÌMÉpY†á•ê}(“iW¤¾ L}b|²ýF6}>[h‹Ë-¸`1yŸ8ϵY¾Ô¢Yî’Ö /Êó‰ nÝ…>v†K)MåÍœò„ýÓÄxOlûRèLé-eìûФɂxϯ"é× y%²„/ßmß*\ÕÖÔ"Š-9;YpŠCùóÅ+ÜÛËw©@Ó¢-ÆÝ’ç+;ŸJ¡sc5¬K+4RDN‘>åÏ¥%Åů“æ(>pÊm9ü>¼Õ‰Œ6šL¶¢â)å™Ã(îUßð«·¥²\ʬVUˆ+Û•äoÛŒdPyÒ®EïÙKB$ù™,vã늂âßìûÒ-åÝŸõ2nÇ׊؆îÔ-æ{ˆrlö¹wÝž†ª_µ_Û!m?io˜YžÃ“š«5Œ±4H¡å‘ã2"S=¸¥ŽÂY,^tYÒ_,ƨIg>µzÖ÷Ͼ»vš†Vï”ÆÛGB¤SEÔvö’­½ÙÏÛ_ Ë’}Ee¤RÊÅcŠGaÔ*’GåJ°Í#”HdfUP’>¢µÄ–ÇQ¾•.#Jùyœ¢7ò4·7‘ 5G†á:DZ‘ðXޏ=èɘ#9†MªpͰàsRZÛŸ4—òÒ(˳mÏá[ ¨Fm"’9­Ë,[]&™”“Ž~^‡>µšÑ´ :=Ûçþ¿ýzªÐÏ’ QOñ2?:’KGO$G¾V–1&ÕŒäÖµn¯c’]A>Ò[,oÇozu¤‰,Ј¦@˧•,î:úP*[ÊÓˆJùn{Kòcëš}Õœ–ŠŽÏÇ&v¼M¹N:óW®<›–°¶žö't æÎ  n=M:[qu}ms[5ª68¤ÜBõ$ýq@¥°š6‰<Žè•#'f}i.l¤†ö[hVIŒxåP“ÈÏAZ?n‘αݥ´¦ãxg} ŸéJf¶}Fúd¹ŒHvùe¦1£ ò:Ð\6sÜG;F„˜q¹0wú Tkï»d¶Ó†Ú„àûúVÔ—0Éw¨¤WqDÒ¬{%ó0¹~j‹LxaVfºÎüûî ©_QýïÆ€3líšòéa 9%ˆÎÐ;ÔmŠžg—'”OË!BükM ‹Q¼B)Š";‚rqøU›ëèžÚf‚[vŽHÂìi›xú'@h¦'“6à¾L›ŠîaÎ=~žôy3¼Ó ž_÷ö¿ŸJÕYâþÊûÚ£ûAˆû†Î|½Õ,3ZÅ`È·1”kb ¼ä¶ütØx0F0·8‚R‡£ÎãM1J²yf)‡¢;¿*Ú†ù­]* ²Ã3?øþ´–³‰ït‚eJćvXpqšaÐÉ[y>Ó2£Äd`¿:y8Ï4³[²^Ko¼…¨Ú¹'´¦¸Ha·Ž{´¸•n„›‘÷ìAê¥>‹hïµóáÝ1 žaU#®7”€ÆÈdòÄndþàS»ò©­­$¸¼[fÌMÉbê~PrEh-ãYŸÌ³¹ØÍç¬=Ÿ®‰Ä6°^ÜÃ3KæârÛ»|Ü÷ãùPap,Þïh)-Á`Nªæ®[̃I½¤˜Ç±Krp{  Ypyú;Ã4há•ôfBçH#”Æd9Œup§hük ¿”C-ášé OÔ·ß–ÝŽÞßZŠÞî-fûdio;$·-Ë6?»Þ lßg‚T,í)`!ãýé¢Þo>8^6ä`ª$R½N+RÆæM3t±¦Ç”°,ÐsŒúTfñZÒÑæŸ|‘Ýî9l°OçŠ}@¡qm5¬¦9P©€H 6;Œõ¨ÑFÛ3·¢©'ô«z©ÍÛIö¸çØ” &íƒÐŽÔi3¤3ÎÆUCöw Kcž1zH ío:«3A*…ûÄÆ@_JjE,€˜âw Ôª’×· ­%˜–íJf†“Þþõ…Â}ŽÌ%ìvþC–™¶—ÏãÅ02cŠYsåE$˜ë±Kcò¥XfhÌ‹ Œƒ«$Ƶí.a“í*ÓÅ ³ÌÎ11ŽE÷¸ö§é“Z[Å [¨ÀËy‚YŠ‘é„èiŽðlµ†}ùóIvŒ^ôÇŠXÙU⑾èe#?LÖ­­Õ´1i¦GLFònÉL“‚E%¼,užâò;¨áV”²K¿túsÛÚ˜®,ä†ííãÝ; ¶!àþ§YXKw8B’$|æM‡ŽÕfÞäÜX΋v–×/7˜Ìï³p#¦jì7QùÖòhB°ÅI#2cssÈþ´ºÅÅ´—€DŠX³g‡­A<²*F¥ŽêÖ›*GÚÉ PÖÌ3c$öõYãC‹:38$ªŸ™1ëLòdûAƒ1R=1Ö® 9vó#nõ* 'Qxr~ð zÐ1±$ùÎ=°¼~”žàdO Á&Æ9ô#½Y[8Ô>pŒFvîûé\Â;[ô«D²Ì]QYF ‘ïê}è2âÜÄ¢D}ñž¤¶³2 wrªzzšžèì±eqµŽÿ{4å~žªIÀ^OÝ#¿õ f±òдn[o%OZ§šÕ… ´2H89/ݾ¾ý«&€>ƒøSròx.͉ØÒ(Ϧó]÷jó„§þ);úé'þ„kÒݪ埦'Ö±ƒÁ¼\ÿß^%šö_Œ‡þ$–¿õö¿ú׌擹©­`k«˜àC‚ǯ îj Õí:êÞÒ;‰$åeØ‘ò2^GJ@Gukö[¡ Ê JO|T—ve·ŽuŸÌGm¸hÌgò=EIssgykl¼Û´M°¯/„õÏ¥wP=m–éîäó7  íéÏ4š·ch·,ï,‚;x€2>yéŽ*ºÙlÐýžÝ³ŸÞ4yqŸCšµ¤ù†à¤7b +&àÿZb,CÅtñ\$† 8e=óíô¤["m ™¥ g—ËEÛž:nëV~Ûk²e…@¶eÙ.ç©¢º»ïí„$ý–ßhRAè$ãüô¤†ÅM5L÷qÉt#Kln,œþ§.ï"l¸Fã2 Bžƒ¯Ë×<Ô‹¨ÛÇs©J6¸˜-] õãUÒùînQæºû(qŠ2Bû`v¡Èí"žú+x.Ä‹'ü´òÈÇ^ÄûSb´2­Ùöe$ü¹ÝÉ÷ã¥_{ûOí;9¼Íæ0|éü²»Î8ã­3û]æ‚ú+™Ë+¡Ÿ_Aôë@&ž‚å¹»K4e¡bG©ô¥K•õ/±<níànzö§¼Ö7Ð[ý¢w‚XPFq`Àzc¥?ûJ¿šo™#Æ(² $öéøÓ]*k›™á,#0ýã·9=‡ãMŠÊcÕÅèdb y%¹CVàÖÏk惮LïŒï;pZßÅ› ¨YØŸÜÈ$ãµ (ÙÚ¥Õé‹Í& Í ùG|©¯gr¶ÆçÉaåYˆÎ;q×ô«Cm¶™u2Éæ5ÌžR>Ý»—«vÍÜZI¦å”O: X±VObݦj:\¶ŽÏnm€9 þu[ì7fûH…Œ8ݸÓ×Í^ŸP¶{‹öY Y Ÿ)å±ô§Å{a£ÙšÜ¡O$î.{–¤§^4+0·ccisžœg4Ë‹K›M¿hˆÇ»¦H þUu5"»Óæu†˜ ãúÑpézðYÛψòäª[˜öûûñš`Cý#Ámä«Éq2™ d±çüi±XJ5­nc‘ äáHÉ=NÕi¯¡¥Û3mˆ@ÐG€OL8üi-ï­Ò]-žBÂC´ü¹vçð¤HôëÉâ2Ãæa[ˆ]G  õ?\gëKýŸq-ÔðÛE$‚&*r@ÇÔôÍ^šúÈGE*[¥— @ª?ME-ÝÜw6òNЫ\VO,°aèGZ©kj²ý¥æ,©ÛHÎî€P4ëß)$û;írž2síÖ¦œ-¦‘Hw‰ „ãAÓ~µdßYi.£ç¾ü`1œ¯áº{Ðk6Kkä™ NólÁaŒb¢¼±k(àf•$2ƒÂr=ûÔ—RÚ.š–Ö÷f󌄘ÊàcÞ™$ÖóZéð4…D{„¤)ùA?­@±ÆmÞFUÁÂÅ´’Þùè*[[A:—rBgô£ì)gs‰ Î[nC÷r9ôÔÖ.’[yY!—°88Îh—O‰”ùyVíÏJÞÙ§˜¡ùBýãZ»R\³;œŸçT¬§Ss.xóF—ë@û=£(H3€kwü1UÙÖçÉêIàûVšÇ7–‘•L.ÜDZÞÕR[„Š89TùIøÐ¢ÒÕl²Œ±-ŒZ­soäe9ºgµ]žÛí²(Ê`gŸQPê2©Aläãµ.†æ?i®§n¢ ÿÀ…}Sg&øT×Êz9ÿ‰Ý‡ý|Çÿ¡ ú£NÿuúSB.ÑEÀ+/XÿfúV¥eëñìßJù>ŒÑWSGÕd¶)¥j]âUµ¡_\ã÷©K4f¯&záÏ–«²×ígsŽc㑌óÏCThÍ¢Ÿ 2ÜJ±A’ÊÜ*F…˜ýäÐ3Ngv ™¶Œ œàz Xâ–gÙ RJø'lhXà “è4û‹Yí|¯=6y±¬©ó•=§Z‡4fŠ(Í¢ŸRÏ*Å RK#}Ô 1úÍ34fž‘K";ÇޱÎÊ„„ÆIì2@çÖ™@hÍY¿±›M½–Òão›Ãm93Ö«Pš’倱‰ö–R¤àt5Qš( 4fŠ(©%žY„bGÜ#]ª0áQÑ@jH§–Æ'ÚYJ7ä£šŽŠ*Hg–Æ'ÚYJ“ÐÔtPFh¢€ Ñš(  y^ágÌq’Up8ÏZ4Q@hÍPš’ä·™e‰¶È½ÇçQÑ@ I$“ÔÒfŠ(ÍHÓÊðÇ >cŒ’«ÆzÔtPW[W¿d*n2¤`-z~UJŠ’yå¹”Ë3ïs€NþUh¢€ Ñš(  mîfµÉìr1œÇãO¸¾¹» '—x^GÊ?!Uè 4fŠ(Í¢Š3R$òÇ‘£á$8ÀçfŒÑE£4Q@jqyph”ãè3ùÔPI'$äžõ4wSD»QÈ„üê(ÒHò¶çbÇÞ–9¤„æ6+L¢€$–âY±æ9 vè*<ÑE{×ÂOùàÿ®’èF½$ýÚóo„Ÿò)Áÿ]$ÿÐzIûµB<ã'ü-¿ëíô¯¯gøÉÿ Koúû_ýëÇìì®uÈí-"óg”áp\ñž¤Ú“ +FMîÞh’êK+u“8‘ï"uçc1ƒŽµΞֺu•ãH¬·aÈP>îÖÛÉ¥q”è¤7BÒ–€ :ÔëgpÖ/z±fÙ$³†+Hg<àóŒqRC¦Ï,PO#Com;:$óÈ Q’;žàgÉÅT¢°€~´o\¸`py ¢“ ’22:ÒÐEMöK±}·Ê?fó|Ÿ3pûøÎ1œôöÅÚÏkÏÄ<Ș°;—%sÁãzÐ4U½>Áµ»d•T[[´ç#;€ `~uOrç†}3@ EPŒŽÈ¨ÎÅWî©< íM¢Š(¢Š)É#ÆáãvFNüi´PEPŒŽQP»_º¤ð>‚›Eã#²*3±UûªOè;Sh¢€ (¢€Y•ƒ+`r8"†ff,ÌY‰É$äšJ(¢Š(¢Š(Þcù~^öÙœíÏõÅ6Š(¥Ve`ÊÅX‚¤¢€™™‹3brI9&²DÛ¢‘ãlc(Ä~Ê(f»ºo½s9ãÈÇΡ¢Š(¢Š*Tº¹‰Gq2(è«!~¬ììY˜³I'$ÒQEQEQE9¤wÆ÷fÚ07àz mPEPJ  GqIE9ä’O¾ìØõ9¦ÑE<Í)]¦G+é¸â™Eõ–DYG 8¦fŠ(îÿ!»úøÿBõV›ÿëô¯•tù X×Äú¯ª´ßø÷_¥4"íQL²õøöo¥jV^±ÿÍô “ëª×g±M?IIVûí'L‹aŠáV?âÆT¡'ß‘X±è:ÄÑ$±i7Ϩeu·rAŠš]Ä3lót½NMŠ7[Èv¨èj—ª·õÔk{ÿ] Ø­¢„N¶ð"<<$a¹ŽÒXã©÷§Ï§i–±MlÒE>ž%Þšz»4Œ¹Ü'ß‘µ»c c½a®—ât•%K]dDòÑÄ2«Œm v§G§øªG´ŠÓYKgÎèV9B6zåqƒI«ßúïþa-ýt_äaÔöwRØÞÁw İȲ)÷5oþÝoþ€Ú‡þ¿øQÿî·ÿ@mCÿ_ü*“³¸5s ÔmãÑíõMZÜm‹TQ²IóÉÿ|“ñ©,ô½=ïâg¶1è©r±¥¸“|œeŒyÎ 8'œwÅ`>‹â)aŠ4ÍQâ‹>Z4Lœœ q“NO‰Vh¦~¬%ˆÄ2n@:qÀ6þ¾OüîoúÕ‘¬"Òõk¹,lì×í—,šÁºdmà¢våASƒÉ©õ-/M¶³¹Ô`¶€ÛÛZ5ùA tMÿ]¤¾zæ±dÓüU5â^Kg¬Ét˜Û3E)uÇL62*#¢øˆÀ`:f¨a/æü‰6–é»ëïE¿¯ë×òëúû¿3"·|øK´ýÙÆæÎ?Üj©ÿî·ÿ@mCÿ_ü*HtOÛʲÁ¥êqH¿uÒÞE#è@¦&;Ò_C×EŒ7Ñ?ÙSs\N’ yÉÐ*/5sÄPèÚz_X-«~í쮚z¡S‘‡3ï%à õøÆ+4?D’$z^¦‹"íu[yaœàñÈÈð©›OñSÙ '´ÖZÔt€Ç)AÿÆ(cGA©Gåj>&¼0\Ï [ù~}ºÌ[© ÀŽxæ¹ßÚÃowhñÛ­¬—‘Í5º Üç áÈã¶kBÏþ«;+¸SNÖ|ù„J“ªJ%BxgúŠÊ—CñÄ­,ÚV§$ŽrÎöòO¹"•€Ê¢´¿áÖÿè ¨à+ÿ…ðŽëôÔ?ðÿ˜´V—ü#ºßýµüð£þÝoþ€Ú‡þ¿øPm¥ÿî·ÿ@mCÿ_ü(ÿ„w[ÿ 6¡ÿ€¯þ›EiÂ;­ÿÐPÿÀWÿ ?áÖÿè ¨à+ÿ…fÑZ_ðŽëôÔ?ðÿÂøGu¿újø ÿá@´V—ü#ºßýµüð£þÝoþ€Ú‡þ¿øPm¥ÿî·ÿ@mCÿ_ü(ÿ„w[ÿ 6¡ÿ€¯þ›EiÂ;­ÿÐPÿÀWÿ ?áÖÿè ¨à+ÿ…fÑZ_ðŽëôÔ?ðÿÂøGu¿újø ÿá@´V—ü#ºßýµüð£þÝoþ€Ú‡þ¿øPm¥ÿî·ÿ@mCÿ_ü(ÿ„w[ÿ 6¡ÿ€¯þ›EiÂ;­ÿÐPÿÀWÿ ?áÖÿè ¨à+ÿ…fÑZ_ðŽëôÔ?ðÿÂøGu¿újø ÿá@´V—ü#ºßýµüð£þÝoþ€Ú‡þ¿øPm¥ÿî·ÿ@mCÿ_ü(ÿ„w[ÿ 6¡ÿ€¯þ›EiÂ;­ÿÐPÿÀWÿ ?áÖÿè ¨à+ÿ…fÑZ_ðŽëôÔ?ðÿÂøGu¿újø ÿá@´V—ü#ºßýµüð£þÝoþ€Ú‡þ¿øPm¥ÿî·ÿ@mCÿ_ü(ÿ„w[ÿ 6¡ÿ€¯þ›EiÂ;­ÿÐPÿÀWÿ ?áÖÿè ¨à+ÿ…fÑZ_ðŽëôÔ?ðÿÂøGu¿újø ÿá@´V—ü#ºßýµüð£þÝoþ€Ú‡þ¿øPm¥ÿî·ÿ@mCÿ_ü(ÿ„w[ÿ 6¡ÿ€¯þ›EiÂ;­ÿÐPÿÀWÿ ?áÖÿè ¨à+ÿ…fÑZ_ðŽëôÔ?ðÿÂøGu¿újø ÿá@´V—ü#ºßýµüð£þÝoþ€Ú‡þ¿øP´|#ÿ‘Núé'þ„kÒOݯ:øWo=§†£‚æ!™d}ÑÈ¥Xdç}«ÑOݪä?ä mÿ_kÿ =y¯ƒH-ÓÉ›_‘«Õ>)é×zµŒ&k™oHû¹<“Ž€×œ¶ñýeÿ¿‘ÿñT˜t"ðõͭω¬Í¶ ž]ÞT’>ïÝ·]ìߥhé lðøb[ n†æ<±D¹b€’%HÈÅSÿ…mâÿúËÿ#ÿâ¨ÿ…mâÿúËÿ#ÿâ©Xc|W=ËÛÚC}§êÜ#9[‹ùUäuãåQr ôëÔ×/]Wü+oÿÐ_ûùÿGü+oÿÐ_ûùÿBCl£á·]hò0 ¨Åå¦N˜ÑŸûèmÿVͬ‹‹ôí*& ½O-̇þú$}ªŸð­¼_ÿ@YïäüUð­¼_ÿ@YïäüU \KCWC”Ûø{N—O±½¼Pd7ÑZÌŠ®Û)F%vãŒ÷¨´‹ËE°³×gU)§²hY²Hvù>¸G“þø¬ÿøVÞ/ÿ ,¿÷ò?þ*øVÞ/ÿ ,¿÷ò?þ*‡«þ¿¯ò·Š _Ø´Uush®ò2ò ÈÙÿÐW=]Wü+oÿÐ_ûùÿGü+oÿÐ_ûùÿB@GcqomàyâÆ+Å:$wP•×(ÀÖ圖³\i’Gj!˜èïö8a— $ó›î4›¾lnÆsíÚ±ÿá[x¿þ€²ÿßÈÿøª?á[x¿þ€²ÿßÈÿøª}ÿ®–§õçsFI'»¿½·šÂîÞøé'ú[«MpwáW'Ž™À«p®¤JYÕ¿á:j¡&<‘òŸgÎ1ß8¬?øVÞ/ÿ ,¿÷ò?þ*­ßxÆ—æÜË¡°ò Hlˆ2ª03óu©kOëÏüÁ=¯/ò8£×Š+ªÿ…mâÿúËÿ#ÿâ¨ÿ…mâÿúËÿ#ÿâ©ÊÑ]Wü+oÿÐ_ûùÿGü+oÿÐ_ûùÿ@­Õ¶ñýeÿ¿‘ÿñT¶ñýeÿ¿‘ÿñTÊÑ]Wü+oÿÐ_ûùÿGü+oÿÐ_ûùÿ@­Õ¶ñýeÿ¿‘ÿñT¶ñýeÿ¿‘ÿñTÊÑ]Wü+oÿÐ_ûùÿGü+oÿÐ_ûùÿ@­Õ¶ñýeÿ¿‘ÿñT¶ñýeÿ¿‘ÿñTÊÑ]Wü+oÿÐ_ûùÿGü+oÿÐ_ûùÿ@­Õ¶ñýeÿ¿‘ÿñT¶ñýeÿ¿‘ÿñTÊÑ]Wü+oÿÐ_ûùÿGü+oÿÐ_ûùÿ@­Õ¶ñýeÿ¿‘ÿñT¶ñýeÿ¿‘ÿñTÊÑ]Wü+oÿÐ_ûùÿGü+oÿÐ_ûùÿ@­Õ¶ñýeÿ¿‘ÿñT¶ñýeÿ¿‘ÿñTÊÑ]Wü+oÿÐ_ûùÿGü+oÿÐ_ûùÿ@­Õ¶ñýeÿ¿‘ÿñT¶ñýeÿ¿‘ÿñTÊÑ]Wü+oÿÐ_ûùÿGü+oÿÐ_ûùÿ@­Õ¶ñýeÿ¿‘ÿñT¶ñýeÿ¿‘ÿñTÊÑ]Wü+oÿÐ_ûùÿGü+oÿÐ_ûùÿ@­Õ¶ñýeÿ¿‘ÿñT¶ñýeÿ¿‘ÿñTÊÑ]Wü+oÿÐ_ûùÿGü+oÿÐ_ûùÿ@­Õ¶ñýeÿ¿‘ÿñT¶ñýeÿ¿‘ÿñTÊÑ]Wü+oÿÐ_ûùÿGü+oÿÐ_ûùÿ@­Õ¶ñýeÿ¿‘ÿñT¶ñýeÿ¿‘ÿñTÊÑ]Wü+oÿÐ_ûùÿGü+oÿÐ_ûùÿ@­Õ¶ñýeÿ¿‘ÿñT¶ñýeÿ¿‘ÿñTÊÑ]Wü+oÿÐ_ûùÿGü+oÿÐ_ûùÿ@:Gü†¬ëâ?ýWÕzoü{¯Ò¾w´ð‰ì/íîn´§ŠeY$c*|ª$ýêú#MÿuúSB.ÑEÀ+/XÿfúV¥eëñìßJÇð½Ô6~Ѧ¸¸ŽVÊ-Ï#…QÇrjÞ§â7L{ƽ¶lÄÒ@¦u_;8Sß>Ù¬6ÒâoxVâ oµ}’(å{}ÀY\؃É)úµ†¡;_OÓ}¾À[ªy‘·a»ƒ–Æà~RzTô)nn.¿nu+]?÷Ææâ?3…;åÝ‚Ý3ŽÂŸ«kvú5ºÍrfmÌV$,O }ç©ÅW–Æáµ-QRÙ$¶áò’€¯>”Ý^ÝOÃ÷P-¡ŽáŸjFdS¹CŒ6s3Чk“µ4¯.ÞÖÜJ» .‹‰%òÇÌÀu=ùàwñõ®#HÔ¼‰m…½šLÚV2HmæGY_)Œ$‚ÅIù€<ž+¯Ö":z,º\—Ù`ÆäU*qÔeéõ¡ÿ_x!o5©,¬îm6ûnÖiLe¢»|øü‰¢ãÄ–ÒØÄLî÷¬¢ ˆpt,zúûVCØÞŸ çßi©ÈÁÈ :'“°b 7 ž*íÆŸ|úf Ÿ>âÚx^y7uÚ>fç¯?5¿Í §ÉšÆþÜ¿k‹p“Ê#Ìߌíë×Ú¨Á¯în-¾Á}ÌQy¢Ù™8H|GñY²éwßð•e-¢Vù;ÆYv‘çuÆá¸ë·?J—L³¸þß›PYÓb’³!t&y7Hàg“ÉÝI –í¼@÷-yéš‚Ík·|DÄKäC‘œrrGU­7USµyãY¢òähäIpzƒ‚Aü ¬û k›-ÍŹ»¸w–âÜ2e‹·#,vœ.^‚áû‹+ ”kqh’LÏojX0H/uÉÀ8£¸iÞ!‡R¸HR¨¼ØŒÐ< ™²à“ÜuóK.¿mm­¶uq ¹òRHÚY‚™ 3  ¿wõ¬ Ã÷pÜ¢ÏksiÙZ+™×úÇ,v¶c\î8zŽ*mSJ»K»¸í´Ù/b¹ÓÖÕ%–u;3ä¹vÜGÌ@'Š;]ÿõØ×ºñ¶Ÿ9Kéb†#p Y|õ“ü¾q³Óöõ­#wp€LqÎ>sŒñëÀ'Šäÿ²5+;‘r¶Ív`½ŽP«"†•E¸Œ‘¸Ùà‘Òµõˆnæ]6òÞÕ¥’ÖàLöáÔ1H¹½qÅ1gÖtëTW¸Ô­bVfEi'UÁ'¨<|º¥¤3Å—Ð$ó ÅLIôÉü+Ót‹Ï´ÚËug±1zdGdb¾l¡”隯e¥ê¶CKû=œér¶ðÃví$M "ç ŒîÜ2pWZ]tk®ZEem=õí¥©¸PÊéJ“þËq»ê*c«X‹Ñdu qtzAç.óÆ~îs^~’hºkZ]A·wZBZÇš?27IËX}Üò+ ›F¼‘/˜[#ßZÍܹڂ ǯÚÔúÿ]ÄΉuW¼k5¼…®nhD ¸¥sš¦5ûiu¸tËkˆgvISÁŒEvð@õÏJ°ðýäZ©?mÛÌóÅ:4WÏ»¯npØÇ#ޏÅK¢é·Ö÷ÚRM¦ý,-dç…e'n àîçi<Ö’ón¾±³\›Û«kh¡F${•%Aç8ÚyééÍ2éÖ×6Ëy­Ú3Ã1•Dm‚£³É;†1ïYri7®ƒ0IgÜY~à·ÙœgûÜc­Ai¦êmí­Âií4qËv†(ä@Q$”27$ `tëÏJOë 3¥]FÕïÍo!k¥š(.©\曫eqs%´7öòOL‘$ÊY1× Šåì4 ȵB.~Û¶;‰çŠth<¯Ÿv3Ç›œ61Èã®1Y61¾¯zEœq$–º\öÏq Èñ³±@T’3‚~`^(S¼McO’ÖK¤Ô­šÞ#‰%©D>„ç¬AuÔ =¼ë,N2²Fû•‡±k‹C¼’ÊwkkÑròZ«%ÃÛí)‰_(€3דÅtöwOq=äFÜÄ–òùhäÿ¬ùA$ qÉÇ~”ÄG§kvú¥ÅÜ6ÆoôfUft*#?.y#޵ý´šµÞ›-Ä0ÜC*Çm0ß.Q[!zÿ;ô¢ÊÒxuÍRåÓOåym‘ómR«ÿJ¿¸½ÔíãÓ²——PÊ—¥Ð,jª™8Îì‚§wëIn6t‹«X´Óº…¹–LÈ&]ÑÔ°Ï$µÍ´—6ú…¼°G÷åŽee_©¹ ý'^Ô.n{y™„q!ÝÄCŒ L|üñÝêö¥¡ÞMss$ÈÈa´>Y`͌̇ðÀÉâ€fÖ—­Å«Oz¶ÒG$6ò*,ÑJdʆÎGñøU‹ZÆÎt‚ëP·‚WXå™U˜{y¬M6KËMNy$Òä€j7c΄ƫ,vW{Òkš=ÕôºÁŽÜH'ÓÒrËÌœã“ÇUäÑý~¿¯¼Ý‡T³¹¶{˜/ –Ý3¾T˜2®:äƒQkN[5¼mNÔZ³m™×a>›³ŒÖþ‰w,º›CnŒ’=¬©`o,å”úd9ã¥6-&ú}V;÷±ûí|ôLµn->úÛS½ò…´–7²y’3HË$g`R C}ÑÜb“xšÞëY·µ²-4- Ò;\nÙ·€rzf®èú£jÖóÊö¯lÑNИä`[ŒrqÀ<ôæ³t­Rµ½Ó…É´6Ú}»ÁÄí¾@v€J•Â𾦮ÚXßXÅyä›v’{Ö™w–ÀF#9ÀûØÛ8§§õëþBþ¿µÔzÔ67V wg‘*ÎŽÎrË”î}ñOºÕà°»¸W°ÅnUbvp]ŠŽ™ÎH3Ul¬µXµ«›Ë¨,åóY•&ûKîŽ/áPž^b~nOÐ ÆÔaÕ/$½˜Y“p«gÄn#irÍ·#%#æÅ%Ðo©ÑéfÌÝ}¤ìyELN$ßýݘݞøÅ[±¾·ÔmEÍ«—ˆ’¹d*AÀAë—½Óõ I¿¶æXš÷íK ·%–=¢2˜%P¶pIÝ·ÐUßjE qh±E;\\MrŒÒågA'‘ž;SBeÓ«\I¯K§AolÉF‘ä¹*ølŸ•àQL‹[‘¼Dt™-áÎÖpÐÜot2&ѳ9ã“QêZU棩ۿ‘c0Î’­ÐbgÂà•nyÝÐô§µ†£w­ÚÝ]%œPÚ3´m ³I `T•G9#')!±ÖºúK&¥ö‹Y­b±ÚY¤fR ݵr@ãëô§^k‘Gi<öok0€¨•çœÃ‚2>}¤wQHÚ}ìWz½Í»Aæ]$b0œ)U#-ǽTÓtGA°{=lîmÃîŒ\Hc8#æjâä{qŠ’]zïû^<“ –U¸¹hÊúcÛ³Û§oZKï]iÐØÉ=„ ×!Bnÿz ¢íùÈÏ<ŠH´„Ѭ4ö–±Ý îÈ]»ËìQèhì*}vÇQÕ-ä°…,ŬÊM+·™Ï%T. ôäsO¯ÌE[Rm:;q+,×cW“ËMÄó6:ÇœS´½GûKL[¿+Ê$²”ݸ¬Tà÷â«ëºdÚ½²D–ó¬2‡’Þä‘Ãaˆ¡ ô<Š‹Jðô¶–æîÞÚK¸ ùN«»ÈRÄ„F<àSѱ[OñU½î…ç´ñÃz¶†áÄH`rG2ƒ×i5~Ã[ŽóRº°1H$‚‡Xœ£‚ŠÙÝ«÷ºšÃ_ ê³éqYܽ”bÖÆ[h R3yŒë·seFÑŽÃ?¥léöÖ¥ÓbÝìîYdfÞÂDa¦íÁ(9ÈúUiqU²Îß6<™’ >Söݣ§}ËÏNj¼A¦MzÖ‰pÂPΟ4NªY~ð FÒFCÚ³¯t]FKë‘nmM¥ÕÜ.Ò;+¡Œ¦@Hl„ÇZzhWJ– ´ aÔ'º`IÁGó0:uùÆ]?¯/ø#-¦»mvÖ†Ò|G4Þ^f·‘|ÀQ˜l$~îsÈÀúQ‰t™ZP—MˆãyK˜\!EûÅ[`=‰¬›oj 4>cA¤S‰Ö;‡”F<·S°²‚2Y~^ƒ›i§êzŒcNû8Hmtɬã¸x¥ˆ9m¡r8^vîô_€_‰ÕÅâ.kiîË"@KÆËŸ»ò°ç¶=¨ÿ„ƒLûÚþÐÞ_™äíòŸÌßýݘݞøÇJÍÕ<7q¨K;¬Ñ¦è-Ö?”ï‰Ù¹+‚È"’=î ¹‚+x¯âº3”’îYÒ\¦Îdq¸CŒ ©jË[{½ûR/Bœ#¼O´*eûÝ#­Xÿ„ƒNKų’à‰÷*ä¾Íì~6‚r0 Ï5R-ðøgQ±˜À·W†á†Ç%ÈI$qž¸¦K Ý<7¨$‡3ÝÛΙ'…ŒGœñ×ä8ü)­þàÿƒÿ³iâKIíîæ¸Y-ÖÖY#vxßaÚånœt<â¦ÿ„ƒLû»ûCÄžVÓù›ÿ»³·{c5•7‡õ ´ë½<½ºÂnÕ¼«+«–2ù›X6÷VÏz‚ãL¸Òí-ïÒØ È®üæf¸»æ2œ¶ÒãŽûH–Ú©´Þ$Ò’Ò+“pþ\¥•@‚BùS†ù6îï‘ÅL5«»‚Ù&i%ž5‘<¨×cg X8=H®b×@Ôní-/Ú!Îû’öíu5¿Ë$›‡Îƒpè8#¿8"µWLºÒVææÂ‹&Ÿöá™þt.q“‚Wæç=zQê/CSU¿m3N–éme¹dRDqã'ŒòO{Ô7šœ‘xbmR$Q"Ú…Fä³p¦jÕä]i“Û‚¢YadÉè üª¤úl³x^M,: šÌÁ»'ní›sëŒÑÑÿ]Ê[¯ë°–ž °ºµ’T’RТ´‘ýž@à„&ÝÄÄMi)S‰eß´%¼ŒÃaÃnP¹\dg VlÚ.µtdºi­­îD1À‘Á;€È­¹³&ÐÊOLÅ;Gðõå•äw´ ´–A;ÊG˜P¹€-÷NI¦É["Þ±âk-?M’hgÎÖÍ<*‘¼€Œ|¬ÛG OsŠ×‚C%´R¶d qô®PxoUµÓÚÕ¬äk9,§ódeT0 ¤)Èùk¡ÓþÙ¶æ˜Ñ#‰„p0.¡$óýìút¤úØ;]¿à”‡‹ôB»…ÌØÛ¿?e—”þðùy_öº{Õ»Í{L°hÖâä鿍ÎyŠƒµ}ÎfZø~êk(ÞH ƒL’ÍðN ¶ÜÇO”ÿ…Fú§ &;W´cqaœæfo¨#rà|ßxðqÐsGõùÿÀûÇý~_ðMg×ôØïþÄ× &Þ±çÊ}˜«¿rAg½95Í:M@Ø¥ÆgÜSi`2T>6–€æ²ÿá¸K[¸#–2$º¶–2ÄçlB0sÇ_þb‘4=B)"€µ»XÛ]½â:–ó\’Ì®09n¹ä”iý|…­Ž‚æconòˆd˜¨ÈŽ!–oaXÉâ9&Òô눬GÚoä1Ç “mU#q;œÙO@kWO{©tëy/cHîš52¢tV#95’š=Ì^‡Mk]>îUc¹n²bbs§$dqÇÖ‡ Ð˯´"jKmn3Ç*Ot#!ÔUNÓ¼’:f¶ÜqØ}²|ÃÌpüÉÍcG£^éº ZVŸÂq3\ƒs’T‚2OËÇnjc¢ÜK¦Ã¥ËtVÖ¡ 4Dy¬èyÜÛÂú÷£¸ž·{¨ési¥þùn/&iÂm üLpp}€=jXõÁ/†Yälå0–î¹ÈÝé‘Ö³ƒ«Á¥ÜZÃx·&âñ¥—ΗÊ-ä¨d‚xϸÅjÜXÜ]øjâÀÃmm4–ï G…£L‚ ã§jÚZß_ëR¸ñ›g{{okæÚZ[´/™€ò’‹Ç8è[±ãžq&¬Ü\êa¼²ŽÞf·bŸÍR¹Ç9U óéøÕ/øGn­´ûÍ:ÆXVÊêÑÓÉv8†R¸Êq÷NrGcÈëU­4MCH3_ZXiö²ÇhÑ¥µ›3-Äœm/ò àƒïÉæž—þ¼Ä¯eývÿ‚t:­ûišt·Kk-Ë"’#^Wý®žõ[AÒf´¼t˜1[;e¶‰Ê•Wf;äeÏl•ðKkáû¨m¬£y & 2K7Á8.ÛpG>Sþ=?¯_øx-¯ëúF…爴½>@—,¹eܱ;ª¡8 YAw5bÃS´ÔÖCk#1‰¶º¼m)ÆFU€=+O^=Ôd¥Òâ³RXãzîÉ™®›_ŠI¼;©E4’=¬Š¨£%‰S€z—ðßúØ¥ñX³í¼‚ß÷¨p›âØaŒœøÏ8ªvZýŽ¡ªÜiö­$’@›ÞM¸Cɾíǽ6ØÇÒbšÂW¸ò0³ù ˆ0£!˜ò¹é8&5žsù'ODm;KyŒqž™Çj¶½ëz›å¿¡6‘ÿ!ïúíÿ²­t'î×?¤ÿÈBóþ»A]û´†r:¸Ï‰4CéyŸü…%\KùîSøÒê>†­õߨ­qo=à  ¹˜Ÿåõ< É&/áý?RK<Í|ëP@Û8ËãÁç¼Ã*Gµr ¢jð†éZ|–bc«]ÙùŠ ˆ ;Cgvž£8Æhÿ€½¦¾g}5ü?d{ Sª¿˜¹À#inÎáÆÏ©´=Yõ‹9g’Ñ­^9Þ¸b6œsŽþÕ‡§xjæ[iQÞãK·[Áskn®’´/;²OÍ–œTšRßø{÷^mÔš†¨êÙw1“å^àdŽ? kúüöþ¼Î®²5wì­•ˆ²žAs*Äg#liHäýãÇAø‘Zõ“­Ù\]Ϥ´ï_,²rÔ Ã<õ䎔–èofG¯x†=cT·k™Ø©hÕ¶„BÁw1ì2p=:[Öµ= 4©¥ÛÜ@]cˆý°¬’3` åžr}}ê—ˆ<3wuôö7÷&k©"fƒm²ã— ÆzýkJæÂêç^ÒÚ@ÒZYÄò4¬Wæ›W wÁcÀÅ  1ú~¡rúÅîx:*OßùæÜ`úÀŒ÷È­jÁ´ÿKñýÌ|Åkj–¬ÝŒ…‹‘ø ¿oQÑP¢Š(¢Š(‚!b g“ùVF—¯®¢ú›i-šY2‚g8b¥wn+ü«§\\éÉ`,mZ dFóØímþ·<àóÒµ4Ë+‹}oY¸–=±\ËDÙp€~œŽõZ^¢»5¨¢ŠC (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€1—Ä0ÿÂTúÂÊÂ"M»†c’Sààg¯¯¥%ˆà¾Öõ=!`–HÍœ‰H`;®j…Þ{{¬\# iÚh%±œpȘ$Î9`sØÔ؆Ÿ3.–B‘¥4 pÌ9Ÿ~ì‘×$’sŠ?¯Âÿðܲ×4íA¦X'`ð¨yXž&U=ðàq×¥AŠtk—eŠì±´»šUd_¼ÊÅpÀ{f¹Ø4 Bæ]DÏå¢Ï¦5±–öðN|ÂsC/åô¨g’÷SÔ-lž!ž-*æ0©µllî.-R{³¦ŽÉo0Î?>žõ핾%Ò®Ò<ÁS¬‘ò– Ž:ž†®ÚËs|%¼½Û¶õãeçüû/ýýy—Ÿóì¿÷ôW¾>¹e'ì1ø§\‚3cýöh°ó/?çÙï訥†Y§†i,ci $ÆÆAò’0Hü+”ÿ„òè‚EŒ_÷Ù¤ÿ„öçÙDûæ€;2óþ}—þþŠ<ËÏùö_ûú+‹oˆ*úGÓç<ÕY>&]ÆÄ..?é©ÿ ï¼ËÏùö_ûú(ó/?çÙïè®&ˆwG¿ìmæ¦<¸'þ<¢éýã@‡™yÿ>ËÿEeçüû/ýýÇÜgb‹?ïxñÍÆ?ãÎ/ûèÐ]æ^ϲÿßÑG™yÿ>ËÿEq­ãë•81ø§\’Тÿ¾uþeçüû/ýýy—Ÿóì¿÷ôW Þ;¹PØ¢çý³@ñÝÇ{8GüÐ_æ^ϲÿßÑG™yÿ>ËÿEqwgr,¢£šm·Ä Û“…Ó"öÐÿ…vÞeçüû/ýýy—Ÿóì¿÷ôW>ž'»* [B¹÷&¡ŸÆœ h˜ýH ›Ì¼ÿŸeÿ¿¢2óþ}—þþŠå¿á3¹ïiæiéã ™k|šé¼ËÏùö_ûú(ó/?çÙïè¬&ñ%Ò©c]3ÆÆ¢ONÀþâ sÓšè¼ËÏùö_ûú(ó/?çÙïè®RoÜDOú$Gíoü&÷&2âÎ#í¸Ð[æ^ϲÿßÑG™yÿ>ËÿEp²üGº‰€:l_÷ðÿ…IÄIdpçÓy Û̼ÿŸeÿ¿¢2óþ}—þþŠó÷øŸp·Jé±1Î3æŸð­%ñÕÁ@M¤@žÛuÞeçüû/ýýy—Ÿóì¿÷ôW|}p ÿB‹þû4Æø‡8R~ÃOïší|ËÏùö_ûú(ó/?çÙïè¯=“⤑«§ÅÁÿž‡ü+)¾6N&1®‹÷ûAÿâhÕüËÏùö_ûú(ó/?çÙïè¯5ƒâÝÄêÒbÓÍ?áO?î²Béûl€=̼ÿŸeÿ¿¢2óþ}—þþŠóÔø¡xä숆é©ÿ ¸¿¯sý>žaÿ í¼ËÏùö_ûú(ó/?çÙïè®+þÆy±‹¯÷Í]ÆsÊ¡–Ú.}Íueçüû/ýýy—Ÿóì¿÷ôW?ÿ EÎ?ãÞ/Ö”xžäç0B8÷  ÿ2óþ}—þþŠ<ËÏùö_ûú+ þKœÜE“õÿQâ;“ÝCï×Ö€7<ËÏùö_ûú(ó/?çÙïè¬qâ ‚îâÉ>‡üi¿sÏîáüøÐÏ™yÿ>ËÿEeçüû/ýý‘ý»u·>T_‘ÿŒøŠàyQgèÆ€6üËÏùö_ûú(ó/?çÙïè®}üOt„æÞ,zŒÒNGú¨_ñ  ÿ2óþ}—þþŠ<ËÏùö_ûú+LCóÿÝó/?çÙïè£Ì¼ÿŸeÿ¿¢°Å ÿSüÿÆ›ÿ UÇüð‹õ ‡Ì¼ÿŸeÿ¿¢2óþ}—þþŠç¿á*ŸÜÃÓÞ¢“ƧKxç@7™yÿ>ËÿEeçüû/ýýËŸÝã"Ê3øš?á0¼ÿŸ(±þñ £Ì¼ÿŸeÿ¿¢ƒ-Ø6£ðå[ÆWƒþ\¢?ð#ZþÖn5vºóãEv„¾zäûT¹¤Ô_RãMÊ.KdYÒsöë¢F “‘éÀ®€ýÚÁÓ?ãþçþºA[ÇîÕ™œ¶¦ëzvÌnåsÓ;Z´Œ7LêäÛ\íbF}8ªWÃ:å´Ãù—V»š×Éò¤Ù»9àOZC,í½ÿž–ÿø÷øQ¶÷þz[ÿãßáYi¨\·ü·?÷Êÿ…#ßÝ«cÏ8ÿu€5vÞÿÏKü{ü(Ù{ÿ=-ÿñïð¬Sª^d?TáJu;¼ßûå€6vÞÿÏKü{ü(Û{ÿ=-ÿñïð¬FÕ/Tÿ®ïýÕÿ U½&ÿÇWü(omïüô·ÿǿ·¿óÒßÿÿ çÆ³}»`~ˆ?Âí›ìÿ­÷Èÿ ßXn“; ²î98dúô¥Û{ÿ=-ÿñïð®yõ˵óÇýò?«Ÿ^€q ?ð@NÛßùéoÿ…o祿þ=þÉŸj8ù]OüP|K© üëÿ| ë6ÞÿÏKü{ü(Û{ÿ=-ÿñïð®Dx—T#ï'ýð)âm\t1ÿ߀;·¿óÒßÿÿ 6ÞÿÏKü{ü+Ž>$Öz†‹õΟÿ ®2EøF(®Û{ÿ=-ÿñïð£mïüô·ÿǿ¹âMLõ±ÿßâMPÿgýÁ@vÛßùéoÿ…o祿þ=þÉj@s"øªsø¿VŒúÆ(¹Û{ÿ=-ÿñïð£mïüô·ÿǿ¸ã=`G»tÿ®uWþÝgÍÙºßþýõèÒ6ÞÿÏKü{ü(Û{ÿ=-ÿñïð¯?ÿ„ÓZÁ; ÿ¿_ýz©qãív»öcõÿ¯@—¶÷þz[ÿãßáFÛßùéoÿ…y¿¼Cû¶Ÿ÷èÿDÿüFضG?ôÈÿ{Ûßùéoÿ…o祿þ=þãÉñSÄ'ÒÏðˆÿL¿u²pE°õËÿ¯@·¶÷þz[ÿãßáFÛßùéoÿ…yœõ‰S$Ûƒÿ\ÿúõUþ%k¢çËO²íîLGühÕ¶ÞÿÏKü{ü(Û{ÿ=-ÿñïð¯0—âˆE©w‹ÿ¯D®b%¼ý±Πo‰> ÚJ Cõˆÿz¶Ûßùéoÿ…o祿þ=þãÍñOÄ*H"ÌÛ#þ5$õÆ8—ìƒéÿõÝ·¿óÒßÿÿ 6ÞÿÏKü{ü+Î-üªOíðß“ü@ÕbRD–äúyýzôwŠîDdv¶ea‚¤üªµž”º~ï±ZéÖÛþ÷“Íß\ ó›_ˆ>!¹|¶ ž¾Wÿ^´ƺºG–x7zèÐ6ÞÿÏKü{ü(Û{ÿ=-ÿñïð¯?‡ÆºÌZ ×:{øÏV«Ãÿ~è½Û{ÿ=-ÿñïð£mïüô·ÿǿ¼¶÷âv£h 8íåÖ#üañïÝÇexŽ{nÛßùéoÿ…o祿þ=þâ#â÷‰ˆÈŽÃõÄÿñUf/о$r2–C>‘þ*€=—mïüô·ÿǿ·¿óÒßÿÿ ò”ø‘⟲ߣþ5Ÿ|@€-ý²?ã@µ¶÷þz[ÿãßáFÛßùéoÿ…y<_5æoŸì€{DÆ´íüuªÝ‚X•uŒgõ©œ¹bäúNsP]t;L]gÌ%1Ûü9­m7þ=×éY2Êóør)d;žH˜ã$ Ö¶›ÿëôª‹º¸¤¹]™vŠ(¦HV^±ÿÍô­JËÖ?ãÙ¾”NÓþE¸ÿëÝ¿­yß}Ií^¿iÿ"ÜõîßÖ¼†åJãëI “,¼…MJï€ÏJÝ‹>sV_%H¦"½ÌÇnÑÔÓmb*¹ïR­¸ÁfäÓf;U  c=@æ¤rJ’x¨¡‚íO`Ä Ð–Êž´æž´È!'©&ž¿3g¢³ôKrɽø ]³¨„*@¥ª( )È¥2)ÙdÚý ^ùv‚(2s²ä{ÖŽ–ÿ6ÓùVV¢á&QÞ­éNd”h¨UÈÒ¤`ŒQÆAžžµ*‘Ôt a€?úÔåR;õë@à õ50UÛŽæ€!SÏZ@ÈëéÖ—`ûÄŠ1Æ úPó‘íÖ¡a†àqÒ§-µwzÕvoÁæ€~w.GÒ¡–Ð`íùHô«+* ä¥ÙQŒg¿½QK93•lÒÉ;Eò°#š»Hª÷±³à(}h7Ê@9âˆåaówªm$g†ýiñÈÂ0hîì)Ô+& $äÓ\É ÓØ0äÐ>>K²*е˜eƒt5Vxö\€LQ›š¿zBɹT=kçlR.8SÍk@ÂXŽþk RV3 àP…´ê ©<Õû,ouÀ#šãcºt­nE©>Í™à÷  jr­É¤‚í*FXS#ÏÞ= A"ªHH?€ ]¢±Èëõ¬»ƒ$G§Ò´c†YNq…ÏSVZÔM…Æqí@´û«S3[‰æÉºBqO·Ó@'W484"åW˜©‰R¹jÏšî(ZNk÷\?uíÅtr_CLKt®wR×ÞE! ¦Ea\j2ÎYC*]Àdó@5ÃLŘ’iÈ»šD WbEÈÍ$0ão5?—å~bÝ_vi—i ÛÅMÐtÙÒ¬yE&±˜¼ošÐ´½Ú¸sÍn•sB™ŸV€dàîÿÐMUžE•†:š¿¢Ûµ8·Íÿ šÊ¿ð¥èÍð¿Ç‡ªüÏnÿ™Zßþ½£ÿÐElé¿ñî¿JÆÿ™Zßþ½£ÿÐElé¿ñî¿Jª "¯ÆýYvŠ(«3 ËÖ?ãÙ¾•©YzÇü{7Ò€)ÚÈ·ý{·õ¯»;›×°ZÈ·ý{·õ¯ÆæÝùÒCbZ˜àt«g'Š£ ”ŸocZ[HP}M1 ÀÇqTe|MÏJÒpªóD   ¡‘1ƒÐT3ʨ R2=»rx¨åw¸j²nÔ)犱i*É’XØ Î3ŠŽÄ´SðqšÕkq’ÍÉôª×ŠÜð:qïV¤ùd÷¨¤lÊÓWæÜAÇÒ¶ƒ¡Ú«Ã¢LÓå™U@ü:PÜÞjI$Uš¨e'ÔžhHšB ÍDò´’â<ýjýžžÒ(w¦Å $«•Ö¬wŠ:f€‘,(¢Y:4É\¼ƒµ V/ÐжžjO(qš™"gp­íTG“Ž(--ÛnOO­@ü‚:v­[‰!P"³Œ,@È ÚÇ’¸•‡­©)€&´l®í”ÉÅ>õCö¬ËÔnëIÛ ƒœš£tFÌh¾k´`ý~µ¬ìyÀªRmÎýU íîãåÄr}hž¥xªvÉïŽÕÊÞK#Jv“ŠÖ¸÷1|äÕD²ýásœPL¶ÀÀXŸš›kk˜ÐdœÖ•ÈNÓ€?Z—A°i.¼ÆÇç@УGFœqÍY+vÁhº"Ú"Ê9è+*#4’19æ€4|Ï1ò;V¤[ŒyôNÖÑ›nEiJ˸æ€9}ZBn6îäV·‡Tà±5ÎÝËçÝ1íÚº-.9bJ€:•ˆÀëRFÙþU•æHqWà“sü½3@Ò<ùÔ‡!@3M¸õ¤'ç#P8Æ3œþÕûÇ’FÎqþE1 $f€+µAã>•Ù”5JÑîu4Öã>´RçvÃäŽÕa³·ž´«¤ cµ0+;zPán}:Óß’1ND ˜$f˜H®zw gáŽIãéTæ!£Ü:Š·9RHgÞ¨Üï@fžK‚¨‘Ö­ÚÚì^x&¨Y®ù³éÍlGœ‘ŒûБXwãÒ¯F01ŽzUhÐäÕeN8=1@ûñŒPÄ”ä(¡OAާ6q@Ÿ±ƒŠŽN˜¥`|ÐiÎÐZ§´r3[> âmH´Ÿû5glàZ^ÿOýôþm\õ‰ŸäuÐþ _Eù£gLÿëŸúè­ã÷kLÿëŸúè­ã÷k ä9»ßù Ù×aüß[øô¢÷þCv_õØ#OÕ—t–ÿFþ”†g¨Ú ÔG‚H»U‡<}*¹l£ ☊NÀz¦÷g­Z”sYwnZ`; ’(ÚæM瑚ÓHBà T6±ì‡#<ñV“s@D9çµNš…~QR‚G£Š~ã÷}y5]Ž‘ߊ°GSžµZ”äPlÄŽ‡ŽµU¾RzÕÝħ¦j„6qžhº‚XvŠpRüN $1Šs Žô—s‚àcžÕ$H¤ŒzÔs'qVdqÓ½C4Y\*¬ UŽGµ]–l)»U=èµÀù+\)bO>õ­w'ËŒà×?w/-Œæ€3d^g®kVÕ¶qY5š½ #ô­p²aÜŠà’ëä–ë]ˆ˜Úï­U–ÂdÜÍR´…Rì0ëíWoâÌC½Y†ÑcpBæ@*®(”½€yYÇ"¨ÂÞS.:µµv¹€’+"87) ûPå„\°¢ïNÈÂu5NÝä‚\H«¿oW˜p(¶qËm2ƒŸé[0°‘‰õªwÇååÝKlì¿J—Tb žh±BЬ€ôëUõY³oÓŒRiù‘ùdàém$TdúV’È3ÈÍs¡šÕ5VÒVI•_8ô5Úß$nï‘È®bîfÊ® ’Î(æ¶ Ôm¦),2k/JÔÍ´žSƒ´ž¦º5Ôí•w;)úÐpilß;aV®ù0Û¦@²µÙÄ›Tôì+˜¿ñT³åbbu—š”0ñ½zgÏÞëÇiµÏ©çù™‰õÍe¹  y<ç%Ž=ê Üî”rì Ø5 `•úQ ›Ø jè•9ÍB±†êè´{„–òŸäkœtmüƒZÚ2ê°þ×þ‚k*ÿ—£7Âÿ«ó=ÏþekúöÿA³¦ÿǺý+þekúöÿA³¦ÿǺý*©ü(Š¿õeÚ(¢¬Ì+/XÿfúV¥eëñìßJ§iÿ"ÜõîßÖ¼¶¨~ë–Ÿò-Çÿ^íýkÃÞðïÔÙrñv~ñ*ÜRaSžÕQe¶'µCkpcL”ÄjÀ ƒšŠkÉ8¨ÅÂÎN{U †ó§S»+ž”bFªœUè-° õÍQ·W’Lí •®§î€x Ðíç5SìÅ&ÝšÐvÊ TDþY ÷ ¤R±+¤ ޝj&G1ŸZ‹Ìù?*‘ä\wÍOy#w5§²€9ÅfÁdÍŒƒŠ¾-ˆS·¨ëÅ\† J®‹Æ9=h£$­žMIƒ?w…[x³#Ui,À”™ýèÇ<Ö…ºg$öëU!BòŒu­=‚8€Î3Þ€dQ"ðzzT‰8mÊ9J\<ütip“ÐÏóÉÇ"¥XÆ~îzÒ|¡¸©â Œ™ ™W€?*­3„MMtWÍggÍœ¯oJ#ˆ´›˜w«Ñ.Ö‘áòÑ=zTÑ´P.±੎I¬Èd6­‚p+cR}Ó…EfÞB ={{ÐŒ¬‘'š§xAœVUµû[͵óŒô©õ Ï—¹z@LÂ=‰Þ–8<°]ÿ n—Ÿ Ã¥iÏœ}(ºS$˜Éæ‘—l[;žµeâÛ!$ŒUyÁE$õÅbÝ‚dØ„ã5« €°$šÏpE±èMt°Ä‹”p1@Vp¨@©b´Ž3œvªR„ÔôÕi.qZÓyÞ"Çšæµa§ÇÝöïQßê2^e ÎÎôÍ>Ñ †r6›¦™’Pqé]RìBˆ§c>Õ¨LŒô«‹€¬6€µQšA冽iiW×äâ²5!µKŒΟ£ÊwP^¯û±Ž´àOËÉɨ!Ï–3þEI»óí@ ÀäsšT$7?•7%‡¿Jr®ÝÔ ÐÃnÁÎ~¼T'æcùÒœœ€sšhãЄOÝENŠO4‘‚O^;SŽ9 Ý€ïô¨ø<žÔé õ¦Ä»”®Í—ü*¥üyµý) Í‘±•-úTýÌR±çÖ†N3LE" ¦{Ö=Òÿ¥àp oaIÆ:Uyôÿ:Uu<ŠšÞ¶ê=©Jz~•`DQB¨#8 Ö6lb¥ÎÞ©QÜTNInM)$à”Ò»‡Ò•ŽÜ昄ÉÀ<ž¼P¼¼/ pF*@£Ô ³·hùXg¥@ÙåÕ Í#¾é8Vyv“À«2,#ß©¬‹‹ê} U¸•Ýð÷¬Ùárs»5}[qËt…ÉïÒ€2¶¾Üu4õ½òÆÇàÕ¯+kd޵KP·Qƒ@!¸I:°ÅYY°ñ\ŠÜKx­mQ1óœPN²¹šÈ¼¹&B§“MþÑWB†MRgÝ&ãž´·r¯’GsÚ ‚0±3ÿÛœ<œ´âO–"ù¸ Û[ #gaÁ¬æµi'+ky€·´Ú=*®›ižFäf€) i#nrGJ¿hKpzÕÇ…NqÒ¡¶L;¯ª/îÍR±S8æ®jN ! hJ†´¹‰{ BŒ‚*´,<¾¸©ôËq@’å“äUi›q,ƒ9ïN+¸1 ÅGÅÈn`*ò.bÎ>• ŒËµy­]Ž"#Àë@-S ¼÷¦ê’ôÅK€b±µ“ „ñ@…ã nOúÔ2(@p3Þ¦ž"·ûóWÿ³‹ÚîõPZ2I"¾3[vA¢fRj]OCÈæ&gr(*é¿Òdõª&-׃+ÇJÐxÌ—`ûÒÞ"¤ü`ÌÕ4¡°š1óu⹋‹‰TŸ˜ñ^‘å$Ö[äŠãu=D™¸úP-#;|Í’)—ŠÐšÆXT†SÍG(’~ó  …òÔduæ•0Ïè=êË4KèI¬ÝÀ³cð  ¯åFÀšh“ qÏ¥WPI]ÝjÈL·#'±õˆÉàžþè4T±–\(ôNÑ·§¥»¸ h·]ç'½]ŽÑJå‡JÉ*XŒ ™#R‡»U›˜_êúÚ³ÙXá±@s´:Ó¢¸—* Tq7˜Ø<{ÕÈ­vÇš¹‹'^µ¥¢°:œ`õù±ùÇ,#<Ê´4'/¬Àq½ÿ šÊ¿ð¥èÍð¿Ç‡ªüÏuÿ™Zßþ½£ÿÐElé¿ñî¿JÆÿ™Vßþ½£ÿÐElé¿ñî¿Jª "¯ÆýYvŠ(«3 ËÖ?ãÙ¾•©YzÇü{7Ò€)ÚÈ·ý{·õ¯»²`Kæ½²ÓþE¸ÿëÝ¿­yÜÊÀI ˜¢y=œâ§„nNGñndcаˆQqŽ£ž)ˆªÊüût©¡L`ŸÊ¦ÚÜqšQ·8ÚF(hçAÀ«QȸÆ:ÕDHØÍÛÖ¥ò°Âhú¦P“ÓëB¤­V\Î*xb¶I4𱃒j“»„íÞ¬‹\¶ it í¡Ë.kR Ã𪮅T’eÉÏ,û·1Ò‘@IG­0Ì ÅWw&`Aâ€'¸—hã®*Œ`¼¥ˆ<ô©Èóõ§ÛÀL„v(Ŭ,dU¹{mì½iÌdqD,I9ž´^HBüÊ:õ¦£``š­Ë° qù¦Sæ%hhÇsN,UsÆ})‘)$“KpÄFNF}¨­ää|½ÍKc~}§ëTÖ7žrXzÒ‚EA´·,¸ßƒØR)ýÙ¨eŸ÷ªœŽjI—lMcLÛï¥2ìvŽ1E»ù·yÇz³uTœsë@Æ¥в¯ÞšˆÈ×6ê™9õ«wndFc™e²úP時Ni×;úSZR°ªJ®>v-ÇÐÐL%'ÐÕi¢Ü lã5¤ü»œU®¥U‰°{q@Ö¢zùc…<Ö½þm—,xÉ Í¹rj5·+o¦€,¥ÓÈNÜŠ‰—Ηk=©"Œ¤Dç¿'  §Û {#©«:,nû˜Ž1Þ®GdLŒšp™ ŒGÁ>Ôø2·Õ°#$õ¬ëEJ¬Fµ_¸# P6­>ЩžI©4wÚù9Ågêr‰.À§Öµ4È]ôÒA0!FýUmdœƒXi8LŒþ54:‚3„Ü   RNA=1Jß'5\K¸ž*Lœ‚(eî3OU Û Ê’$ùI-Î)êWqôé@ ®•ÇoZz’zœæ¡;Xœu© †y=iÊBNÔŠC=é!²q¸t ¥Vf>”ø¸À#8ëOeb;cüûÔ{¶“ÔÐÂÑ…$ŒØ‘K|£ŸZ‹~Ï”°€HÈíé@ Ò¢½J¸p @ø.TÒ¦VÚ}(ÁWqÇ¥!^@ô4™þ/z–<’Ié@T/z<”ð3L,[#¥A(ù ¬ø?‹OýäþmU%=}j߃ÿ×êï'ójç«üH|ÿ#®‡ðjú/Í:güÜÿ×Cü…o»X:güÜÿ×Oè+xýÚè9n÷þCv_õØ#Rjßz÷[úTw¿ò²ÿ®Ãù~®pÐýúRž¨?:V\´¬ ¼S#‚iˆ‚4`Ù8«q”æ ÇrZ7‚p¼Š–F\ã4ÂÁ~´ÇœJ$VTõ*Üí`$PÐÚ3áßÞ‹hüÛœöSVí|‚S¿-¨Û±?ÅÎh® ìJÆ¥Z´‹e·¡êjš¤Ýûfµ#Ú#oNÔSy穱ä}iÌ¿+61LŒä·   ׈K «6‘«E´f¢ºnTMY²$?+@"eã¥#£Ê“[‰n²*îTï§ÄcÀ€9x®^5*ääQo0’è€ßJ·ªiÆß.§ŠÆ°}º‡ã@"&“Öµ-‰òù¬õpI©ùPSŠ¿æ ¬{VÙLçµYûO™ôªÀÇÔP Ú¯ŸŽ:Ö”RfÝS•(/qÈèkNY»m…ƒ§8ª¥<ÉÛœWcLF8"©†Åï<ÐRY¬R©Ï9ªzª"‘Î:Ö¥î|áYZ°;¨ÖŸóB¹=)/á %søT:1/òsÁ­Kø¶íjç¯4¡, ØúWÁpþ€ô¯W ^ÕÌkš*O™p{Я½sÓÛšµ.™<$§NHÛpÅN¿2‚Tª”TP³Jµæ&Ü(ù¨Ý¶É5ªÖ_&åŠÁ†GW£Ö·»”„§­ÔëžsZîZ欥òï˜ÁFž9r¤gš“ÌQ‚F)`A^:TLwg¦²í#®(ð¾ðvñRó®zý*¼ý*ÖÓÁî=ènAúTì¤õаWäSU†zô ,|r?Z‘ üéŠOSÒšdÀùO=¨‰ f€AÒ¢ÞÅðAÉ©ÑFGÒ€ °Çµ2°.*=ÛWïNV ãé@‚=8¨™±ÀïHíób«Ï&×äà Ž|c$óZÿ]©¼ŸÍ«™ÔoÙ˜¬Dfº/ä­öî¿»Ïþ=\õ‰ŸäuÐþ _Eù£wLÿûŸúéýo»X:güÜÿ×Oè+xýÚè9n÷þCv_õØ#F¶ÛLýïéEïü†ì¿ë°þF›¯}Ÿþý) ¬¹p¤Ò(ÆìÓbmÀSÔŸzb!u'<ÑA9'4÷ ž´ºâ£w©&Ë)Y”'¯5]ä`3Ú€£Òž3¸g?•6?›“ÓµN¥UOzÀš9œâ¡ó¹93aI JýÇSU'å·ÇAOšo—p#šÊ¼»Û¾cé@DM÷Ç^õ Íú*žk Òênwœf•í'( lœP÷BY‰ÝÅU¹›r²æª\Å4R`gSígv$4«bãf;Ö‹»¾^•ÏÚÎb àÖÄsþèƒ@7ªëuæ8ùj☤¶ÁÆzT—‘$éƒQC§ü£ øf€eg¶mËÒ´.`dÅOmL8¦]°$â€0/`Ãc8í\üµÉSýêÝÕ%` ®3ŠÌ´´vmÀ|ÔÒÚöm»F1Þ¨jV©å–P3M¶»0™ÆqÏjµq"µ¾s‘í@–hÅö·¯JÖÄP=0gÛäJ\3V. ’eAÈï@éèvG&´/–ÀŠ‚ü¼Q´Æ9™¡4ë€UV>=ªÄ§qâ û£oz„¸’Sê+FÝÂ8ùrk.I”òO5~"Ëu´ÐÔPOcëZI–½gZž´RL'J©¨Ãæ@A«ŒŠ+Pçš»—c,m‘\…òùw»€é@î'Ú›®)¶I;sE¬MrwÅoY[¬i€9  ÉdcBÍÒªÎãc.+Z銩¥`ÝHÂ2ÇŒÐ;¦f$õÏjµnÀN‚¡ÆdÏsÖ¤†2.žÆ€:|bÜc FlÆjá}¶¤{Vm™ßtIõ  · 5Æ3T5¨Â vjs‹‚* \£<ñ@è;AËu'§©•GZÇј=krí„Z†Æ’<z¯<„CŒòhƒn–àžù­À”µ^Ý0w¦´‘Ù‘@ wŽ•!\‘г,HŒª÷Î!P@ë@ºÈŠÆ SŒ—„QUn®åÈ@xÍh,a/¢ÐTк9‘zÕ‹MPŒ$œU…MÄ‚3T¯,J±eúñ@†éwãéP\`äÅ2ËnNsÇLÕ¶ù°sÁ  _j)ò&r?J‘b–r 'še°” ©­¸¢DÀí@"´®â9¦;|à9ëV®¥Ú;Õ68<ZÎÔ6žíX¾H2ÇÖåÖ8ÍSoŒ¶>aÒ€+4 «/Nõz<²îçZF8ØG5$s4K‚¼{P‰|Â]”ÉõÀ,qXó\¸™•äÖœ—’À‘ë@ý¶wœ’£µh$ æXqй–±IŒsJÑo˜(<(Õ„@Êo'Ú¶3wtFÞ!‚Iuªwº’¬Ê$çšÚ™ÕmwÅV´a+½©¬Ù®å»ÚBcš»gµWä?X¹1°$õÊLjï˜gjê%”,dñҸט}¹Û?Å@¥¼ì!ë“RÛÝv'š¥dÊbRMAut‘IÁÁ ’Y26ÓßqÐv¬M>èã%ŽÚ¸÷`ù  èªQÓµL)s}î”~p’HqÍf_iáÓåàâ®À~s“‘SL›â€8†•íæ ç ×Aav“B2ÜãšÈÕáU—uS´¸h›ƒÅuNÁþå;,Nk> ddÊ‘VDŽHüè[~Åù±š¥4€ä“š«=á ßžC@/¶ÇsVô»\¡cÞª[Â÷W#9µL’OJ± S×ð  ®Ù¸{q\ö¯|Y6¯ZÕ¼!#=qÜ×-978À9 Û³î•Æ;äÖ½À¸Œ¸5­ßˆ¡#cµZÑ.–K0Iâ€7mNñž3VeŒmû£Ÿ£¸%<涤PTÐ;q¸hÙy¬ëȺŒdî­ùah$sT5|ÈùíÓoF%­=*ùcäõâ³ôœChr{Բ͜’~‚€ ¦çåä÷5ve Нw±É «î¢(AÆzŹÜÌPšžÚ°Õ6c5ë<+ZÊEÉ  n¬@Ç&¬®ž®œqÅ(Q»'¯½\Ü©sÛšæ®´áʼnï[VRÇ ¸F}«+RºHª£5oO€Êƒ< л“¶*µ©’K‚UN3Ö¬ÊÁ,ˆsV4Ø€€79"€ Ôî 6á}}*…©œ$èO£ª@gÈâ©XNmâ1¾:@_È–±~ìòE3E¤,§5JõÚêo¹­}.ØC$`š³xÛ±§4ԥ跷Ue†*ck¹7ÈIZfŒŠè´ûM‘–#Š[x<´ëúÒÈŠ¿5O) €ùüª¼ƒz·4JhÌ™*y©­Ü¶Òa‰úV–ˆz¡wœ˜{PÖ©$£¨´~ÕƒÓ"¸‹ Ìw[G×_Þ½¨êÝÆ0úóUnïLªbˆóÜ×pÞÒ­§þEñ¡<3£§Ý³Çý´ñ ?·ŠUù˜äU½í¸a€ã¥wðéxÇÙxÿ®þ4ƒÃºP9û/þDoñ ?¹Q"Ý}k!ÖK˜—5ÛøŸN´°ÂÚ-žfýß19Æ=O½r³&åb8  3Ü«DFy5gG̱ҳ¯-Ú5 ‘ƒZ: „, â€-^³¢€§œö®«À£ z=û5rz;²:]oŽVôúˆÿöjç«üH|ÿ#®‡ðjú/ͺ_üÝ×Oè+xýÚÁÒÿãþëþºA[Çî×AÈsw¿ò²ÿ®ÃùÏñ¦>ÉkŸïŸåZ¿ò²ÿ®Ãù¡ã$ßkj?Û?ÊÎd’?3Š–ËQd|1ü I8*1Ž+&æ?-¼À)ˆí#¼+‘J·›zƱ´i¼ØðÄÕë¢"Œœæ€.É|~R9üë<«Ï.öÉö¨-Ë—nÝ*öýŠ6õ ±v´´ÙA+‚s޵]î~O­ p®1žh…Ü?>èø5YnJ+#çŠêto[÷¿ô]Åxå˜óoG¹­«œÅõ½&Šò0qLã$z×)©ja®FÁÀ=kèzñ/ˆV7Œ¯˜/»çþÙ­.“2Ü€7s[f/Ý‘žkœÑÄPÕÒ6v5rzÌx,85‰o;‘Ûµt:¸á‡SXö¼O·Ö€,B³D2§§Z¸—óÓÒ˜>VbÅFJ\HF(——;†¥6%ÆÕo»W[MÄyëíZ‰Ò}=(Ηd'˜ã“Ve dã¥[R<{T2àþ4›zÆ([žqT¬ãë!ïRßÉæL#úÔ¢1ŽOX§ŸsÎ0´øáó.öðTU›{p#f"’Óh‘òpE>ïb[•ÀÍgÅÉcÎjÍÉ '\H¿ê˜ôô  †0Òdp=*Iã4äŒÄ s¡Üt€ 7>•´Ð³Ç‚3Åeé ûÞ™­±’§( ·ÛNN8«I:{ƒéšS+œŒäUh.GŒb€4šÛÌLY3ÛHŽ@õ­ØgAê›:4¤`PJE¹ðÀfªjk·Ö·ü…i2GweªEqéi ŒñUä’T8$סA¤Fñ`¨Î+'PÐÕd¨ÍrðLå¾|óZ¾ÔÀèi³iÆ.W;ÕHë@ZPcÆ9ö«šgY·çûßú ¬u,G=Mmx~þÔ‚B8¿ôYWþ½¾øðõ_™îÇþEX?ëÚ?ýVΛÿëô¬cÿ"¬õíþ‚+gMÿuúUSøQ~7êË´QEY˜V^±ÿÍô­JËÖ?ãÙ¾”NÓþE¸ÿëÝ¿­y›\€kÓ-?ä[þ½Ûú׋OxGLÒCfœ—ÛNª³ßJÓÅQŽg˜ò§µd§É‚2iˆ¯%Ì ˜ÕiIls’jø±–vZ¿o¡ŽAÀ  (l¦¹µ­´Ì¥1[i Q Ú¼jŒœ¶ED¶0ƹÇ^´Ø¢PÇŽ†¬qר¨`‘ÜÐÑ€~:ŠWWn­Î}i¨‡yªanßxŸ~´¡Väàž˜«‘§Œâ¨É–—ô«P)U$±ÇÖ€*ߨè½M7N‹ç$õ¢äæPÉïV-ŠÇOô Ì5›=Æé¶¯j–yÉQÏéU`ι9 ‰%pàô««˜ $ã§¥=£TaÇJŽfóHAÒ€!…V[€J÷Íi¹ Àâ«Gn¨À®*IÎØÏ4QŽ´C)WêF;T{•]‡åíJ\*=hšµÀV&¹–¸äöÍ_¾º29Îp:ñ\ž¹¨y(TMakï5Ûa‰×OáYŒ°Î1\8Fž\œòy®óÂÑÁAé@Úl¾]Ëœ×DŒ]Mr»Œ7`“ÅoAr®€)í@ rãÎëéTîˆ({U™T™ª·Ä(#hä àS†[$ð*¬Dm9éVVEÞ3÷EhÛDù‡ÓŠÎÕnöÆQ[“ïV&¿,'t¬gáùé@éÈLŒÙä÷®†Ü~ë'šÅ·SÇZÜI·Ïjˆ¿ž~µ_P˜ªˆÔòG59ûçFLI|¹çð E¦oˆ;uÅZµq 2ž20*ðtHÀÈàr+ iCݰRvŽ”zY AíZúk)µÔVwM‰8íOµ•Ò-€ÐŒÃ$àdU)lRBI5:\äàõ§´ŠFGoz­˜‰÷ŽyéR\J¨ÁÆ;RKz±ƒ‚3Šçoõ•ˆVÉ 5Ûß=¼¥#OOµÜ㊑¤™YÇ~krÑRFB‹€ké¶«·§Nµ©¾\$0{Õ{e1ÂHö¦]L·;UON¸ ./‡ #¾j’_:`¸ÀÎ*[û…´ƒs ŸçXi©¥Þèˆ ŽF{ÐD'Y€ HbúÈÒîq9Rr3[€n”`g4ÎÝ  ‚k£²½cÉ=bk±ùno?J¯kvËhT“@@K*A Í+³1ì$Ö‡uË­RYá¿·Kyv­Åº®~hâÁü*潧Ϫémc ¢,Ϋ33|¬üà`u#ƨ¯†Í–±caq;y[¢n®d“tDt]Äà† {R^×õþc{_×ô‰lõ‹é|Cwcwi´[‰£ù÷; ÅrqÀéÓŸ¯j¥câ-JVÓo. µ];R”Ç ¦ï6<‚P±' vkTi²ͨ3!‚K5·Û“»!˜žØÆ­eXøwQ‰´Û;©í›NÓe2Bɻ͓„ ÀÀ=‰Î;Pº_úÕþ‚}®ŸæWñÔÂ94Ôþÿ™ÿ²×=aúô­¯ˆ0Oqs¤Em’ÌÆm±Æ¥˜ð„à¥cAбŽâ'ŠP>du*GÔ`Q¾·ýÛ =•¤Ë²à£3[—Mó·^•ÌH ­ÞâÐXʲÆk¦ðHÁ¿ž_þÍ\m­ê´KÍv^ `Æý‡CåŸý ¹êÿ?Èë¡ü¾‹óFæ—ÿ÷_õÓú Þ?v°t¿øÿºÿ®ŸÐVñûµÐrÝïü†ì¿ë°þF¨xÆa ½£òúUûßù Ù×aüb|Cmšu›ÓåHg<ìjì Û¸#œU›ƒÚàŽiÓÆÝÉÄeè×>[€N9æ¶.çóJÆ3É®Z9LWl÷³ZöÓ™nÔ“Ò€:íü˜‘W©Ó„ùUÀz± êdó´V:ÜE-Ô¥ó»w°ï;÷sÍEq¾ÚA ?)­(-·&ñÒ¨ê{D_1Áì(wÃ/æêöÍìßú ­ßêKc§Eoöij’öQÎÒò”ò͓ЅäV^¤\hšå­µÌÐI#«¶",p0}@÷ü«¥›L‚}RùK¼ÄÑ"ˆ$ãx­&4exsP—TÐf·‡PŽ[»Wkct1(l}×àüÙR^¹£Ã†úmþ&¿’K”¼ž$¸w‘†À;x€À­X4»{mRâþè÷¢IÆÃ·8lc¯8ëNÓôètèçHYØM;ÎÛÈ8f9 `t§þBÿ33ÂpÚ}Ú]]Ks$WÓÇæÊrH ì>ƒŠç•R;w2î“©õ  ÊnËzÔLùJ°¹ PA@P^&›rÛ`cS"?J¯¨°à ;JêNqZÅëL'ÇCZèÙã­/%Àª7ö¡ '=]wCp¦HJôãó nYXBS4Èæ wZ~£Ù×’sYáYÙyÍo}µŒaTÖ¥„ò˜õ>•‡ko#ãåï[Ö¶2*Ý(6Ý!f ûÖ§ É@:WIr|µ +—¹o5ØÞ€"¶eÞ7Etv±²ä­‹}°ƒÓ5×DvXZ³ Könk5F&lëJ&ͳéT#æv 0Ì¢›¨F‚2r*R?z*MHn¸í@¶‹þ}iÜgÉRŸjGÚX ×»*!QŽÔ³ÿ…A¨6HnÌFTWÐêh;e;rqŠ©xàNzÒHÙöÚ²®×÷à´u Y`ÉPk%¬È¸Üªp tVQâÜj¬ª«pw3@‘ô5=ËE!=ý«¬k8ÞáyÅqºšâqÛ4Z#æ\óÓ½\È$Œæ pÏÇ5nÞϯz˜A¸e±Ž´¦ÉÎ8«&AŒȪ‚B³1=E6âBªÝ3KkÈXõ÷ªìL²FkR4 Î3@¶"FnõJY2¡NkH 1c#Ó©ªWH±¨>´@·çU®gÀÀ<Ö¤‘ûp fÞ0Ryí@oî|¨‹ŸNrk€Ôï>×tqœV߈5&(cÍs ±È9  ¶¬|¿z»¿ Cæ± g¸8ʤ˜Çã]÷„æDV œâ€4ï`ÚwÍGcrR]¤ÖˆQ;c=Me^[=¼œ 84°ó)PsÍgݰ –=ê”WÅN“ž™§M8˜¨SÖ€$SJ®ó Q‘ŽÕ4Œc‡­I¦Úyä;”EuÜÃRˆ’,`ž•¦"D•ü*•ì±`¨Ý(<X±­{V f1Yq:z»e"˜ йÃd Î#mæqÅi¹Þ«\BîÀÍR»–A)Tc´Óa…üÀÄÔ¶±YÇ#šÑkKrUrG­OiÉf©ŽÕUâ6ìs÷jæšÃMZ¸€J„~TˆÒ ràô4æÛŽO•Ý›ÆH¼qTËL“@jnÑ‚Ã5‘o ·ªI5»Ÿ-äß½'Ö´þÍoc· (ãNû- -‚ÄTÚ\9!¥XÕ$óbã¡éSéqªÀ6ŒœP¹§ÛœqYÖ2åÙº‚jýô_èÍÎ:b¹«{¶µ©Î7q@ÚݿڭH^¶+”‹O–ÚC<¬IµnͬR6gð¬¶î `¥K§’n”æ»hö±$Ž•Îé¶Ye~­³9ŒÇÖ€0üBìCqùU!u¶Ù÷§j÷Û¦{Sà˜ý‡kr;Ú€=q<¥>1ç>¨¿üU>ãÇZe²{{¢/ÿ^{§ÃçD§'Žù­Y-–kRŽ;ëañÞ—:îXnÀ÷Eÿâªtñ}Œ²¬PÛ^Í+}ØãŒ3ükÌÖÚxd1Æ8Ílé >Ÿx—ˆÃÎ@Áw ã*WúÐE©ë ºþ‘¨\Øj–Ö¾z»Ü[• ^<(Ï9ša¸Ô¯no--®%†IX†X‰Ç|wæ­4W>#¼·³»¸|̭僷å' ÆzSÅÝÆŒ²XÙψ㕲æ0 àç–€9íE$µ‘ÖThÜuG\øãu;—’\x‘×Cø5}掃Kÿû¯úéýo»X:_üÝ×Oè+xýÚè9n÷þCv_õØ#X_óý™eï9ÿÐMnÞÿÈnËþ»äkÇñll”ÏbJC9= nˆ“VïRÌ…9=ê+dÑm“Tµ‚®iˆÄŠ3-ëZÖ‹²ä‚:VM£Ÿ´7\浬¤ó/pÔ§ãà’MgÛ¼`æ·mág¦zU[í<³ù‘.z&)ËqéV5¯^Åm5Ü·V»"* ’}‡ËÖ¨[iÒIƒ+qéZ­ðåË;1Ë3“ëÉ  zv¡yâ wí‘EAYŠí'àr~oj½«kZŽ”U$û».ì*¹ÀüqþEA«ÙÚé÷†ÞÖ m[ ÇwÌx9'û¢¹]NQgœûP÷ßµ[vÄVöGýäþ*¢OˆÚëEæK=£þ.¹9ÔÏ6÷­:%1ùoŽ8ÅtÐ|AÔ¥\˜,óìÿÅV]ýìúì·“„W“8Éö¬»=á2®:-@Û*àŠ•“÷ªÓ\ˆ8aøÓ彄ŒƒÍg\Möƒµ‘@’n¥ÝŽ3ZúmŽçÎåMÓôÖeRF>µÑÚÙˆÔ™ï@wöí¢AÒ®Ú^G, d+FêÅf‡iäÖ+é­ œ é@O±ç šÕ@F{`Vuµ“³ZÖ(sÏɨã©÷¬i‹Ox¨zgšÓ¸¬E½=jŒEšI›> Ð×oò$+ÁÆ VœU‰x$sŠš3Ü裎i§ zÃ9ÇJK[hÐä€M6ly¬F8íVD}v“š«*Ħ€*œóM…H|‘OÜ“RÆNN1Šš$êÇòªZÁÚ…=+ZÙâ²õS¾ãô  zkã*{ûÖä2*‘ú×>Šb•YFk¤™Œ5O3«±Àü4êxÎEØr9¦”p(X&YüRAi寻†MM,aæ©ÍY—å(Å]²ER1[M H{g“jvªñšuÕà‘ßÚ€+_Þ) €ô‰*DXõ4û©‰ جé'ªç4ëQæ^Œõ-]tÊ#·AÐb¹M-sz¤×I¨Kˆ”g€(d—bãZÝÄ“µF[–¥4hÓî‘•¸÷  ìŸSj@›0 2B>ÓøÔÚƒfÔé@J~ÒsÀÏjÙ¾_ô`GP+&Ìævç½l\dÅŒv ô™‰GZn§(ùqÚŸ§ »ÈÕkðXäó@-&W€zÖf¢™œ{Uy.^ÙFÓŠ‚mMX§˜:ž´±ktðÆ¡³Œu¨]׿<ž*Å»[ÜÛ®×*ÈÖFqÒ€:+ddë’EszŒ¦ea×Ú¯Øjl±ì`{ÔWò#È$\P!ÒA È9Ö<ðM§zÍvVŽ>e#4˘#‘C2ޏäP? °™@eíÖ«\ÙµÝZÈ·ý{·õ®Á'Ö’-ÄYÇJˆ·Î59‘vÐU $É 1LD—¸SŸ¥Vê¸=iŒJµW¸¼HTy  5bŒsøÕx®âc·§Ò±æ¼{©v«|µ±aÈ”àçp¦1ƒŽ*­Ä¹VóRÏ!EÀª„¬‹šb.’j9-’=ø©3·žC# '#“@ÂÊ#š{»OZ¥£=­[ÖVÇ&€$†?Ÿ9«íUÏj ¨D–äv  ™< õª3–INséV–CÈôªò!–q‘ǵ,½_WÄYª@Ø©[w”XPÃËNµ™¨Î¹ )Í4Š€>zzÖ5ÕÀiJæ€~¬{V¯v¨„³v­;‰‚Ä}º×¯^ï, äc^\ý¢àI¦‰6¦ÞúT „œî¥ˆ|±&€îCu5Ûø.bò²œŽõÃÊFã]'…/Z+Ô_Úô¸FfQïV/m éŒsÖ©Å0óTƒøÖ·™¹A>”ÈÝé’ c‚3T#-äîÀõ5ÛΪÁ·1ƒX—v 26&€1g¹3L‘®pk©Òá[)>+‘XZõV õ®Æ Ä»}(ó6äVM؎¯HÌçñõª³ (Ù#  Èd]¹=zÕ»"W¶k-\*;V‹ Üs@œã©§¢oóM!K.H©QpàpZµ2­‹?¥eDàHAëZ16õÀï@`“ʼ*sŠÚÈxð3Íd\CåÌ%9ÀàÖŒîvŸ”ÐÐnÎzTc@GÖ§{žô’È0>”ZE[uܬ‹‚×7åö§Þ\<’Ôñš»okåù‡8  [€^6P:UÝý^;޵Àí(ªöµ½Æ À'šÜ¹â'šç.ìK®äê+¥'#ÝóYìkógžô•,‘–ÅiiÚ>ßšAÓõ«ÈèÞ1ŸJnc$°â€H’$Åf\Nl tûËÿ1HSÅs÷—g;É=hßg7Ü#sšÓ‡OßhcäSü?j¾T²0çsW``'aùPzS4lac‚+£w. í\¦ ²[],È8Ï8­]YLcžGZßh±cÖ’5Ǧk3ûDÎzûÓ A;O=(}/Æág‹h‘C`‘œdýk3PÔ8yòîŘú“Y­zÍÍÐÕ¹w§-‘@¯îs–'$ô¦Ú20Ã$šŠ+Wº¹ãœt­7Óü˜†G4Èäh#8ô¯Dð#nŽñ½DGÿB®94ó-®}k±ð"ìŽñ}CÿB®z¿Ä‡Ïò:询üÑ¿¥ÿÇý×ýtþ‚·Ý¬/þ?î¿ë¯ô¼~ít‡7{ÿ!»/úì?‘ªž,PÐ[g³1ý[½ÿÝ—ývÈÖ'YÛ9îì?JC8û©U;óX—’‰dQ×=i×—E¾bqéU¬•î.ÇSÞ˜‹öÖ“ŸZ–[so0™qŠÑ½#Å2U3Ûqƒ@–Ž²Æ¤Õ{b‘Ö¸ëBK71È¿.zš×]YHÎEj@ÅI½U0MbC9 Љï°KzPÅàœœ³Xž¤úšåõ Ï1˜çV¦œH¥sÒ²^¸˜*‚F{Pl¤o8¹Sо ÉuûU´ÓÄWU‹a$m”ï@ØIöÝÉEæ™ ]Àcj)¿ÐnÉíR¼ïxFÜâ€2–ÀI ¯i¢Fƒ-×ÓrÒËˑɭ4B8 ¡´TQòüµ6ÎÀ©¢ÆÓКd¸øÐ{rßw4ß%H$šxVqEŒO­FÊxýC)8ô«’çÏéY·r”õ zPç,B jI“ȳ Œ8¨ìÃ\N^N@æ–òe’ä*޶h[8vA¿š¥3(¾{Õ§¹&*!ób †É¼Àò}îôhºG9ªl<ÜžjÌûy1P*°Œ’x  N˜rÃ×¥Où½ª9FçEK8¥\\$yïÖ±¥ýìì}ëVsåÛ»zVT9'wã@ 4GÉuïK ûc ŽG¬"‰>ST'F·—v8  ¨å€ÏaDÓí·lÇ¥Cm:8Èêi·í‰Ó  k&ùCsÖ§yGš5YYc]Ížj³^#ž=hsÎ;)æ«ÊëŒu#­WY²œS¡‚IC7c@¦RUÿ»ëU,Dfá—â¯jî¶Ö¸V&‰p­u)cŽ(FÔ•Ô†8«sR`"@j´P÷ªsžrkKP”n P;™1lE2Èù_¼ÉÉÌYíL3*÷½nZÜ ¦ëÍhê>ÎGµs:;o»Àló]-ò³ã¾(NLÝsë[·Bè+K»#= lÝà©úPR\g¨/X š,Ô³±Óo€hõ¶õPZæui#ù8+²8eAÖ³õ‹a#/ËÍsú\óDWçlÕÖ[\ÛÝÞÜŽ9¬ëkK}죧#—up‘ÝŒíüh´{HZ<)ÆEUkR«žµ…k«ê®äc޵±¤¥,ŒJap}=iZðÈ¡qŒTPÈ“Ü|ØÅ^’É ©  +µÁwj•Ú$’äóïTbI‡½LÐ\/'8·ao‘Ðf‹Á²@Åc.¤öÉ´UF¾7NQ›“Ú€&óÑ*Ö›n#ÄÎj„䜃[–ê#ˆý«*ÿ—£7Âÿ«ó= ÿÈ©ý{'þ‚+kMÿuúV)ÿ‘RúöOýVÖ›ÿëôª§ð¢*üoÕ—h¢Š³0¬½cþ=›éZ•—¬dz}(§ü‹qÿ×»ZàíäÊ çž+¼´ÿ‘n?ú÷oë^{æ¤qžqÛ“I –&›ЦfD'^ãRDˆ95ÎÜ^O<ÅFvšb4u=]GËIúÖ3Mq;¡$ãÞ›,,¸ÜO5¡ehÎWƒÇc@¬b-(\r+¦‹åñTlí# ÕÐç¥ArÄœUHØÀt«“¯ÈyɪB&ÚÜäаq­E:äc’*HÈB §Ns“Æq@®ê˜ µ­¥ån+ÏÒ²oW¨®ŽÕDvàÈö §9tëtÊL˜ƒ;Õ‹r@â€+Ü)½>ÓnÜóLŸ÷Ò sŽÔÒY`ym)拉U`õª%™e g§zŠâlFH'ÅÉeÚ£Ÿ­d\e~cWÆd9þ‚²µIÕÌÐ&³¨4Qà63Ö¸Çv¸¸#qëÞ´u«¿2VL’+6ÕI“+ÉÏzuÄ[»TQRO5oP‰£ [‚Ý«=yÏZWÁnüÖ¦….ËøÏ½f2ü ŒÕý"6q¹nhÓlæýà šè¢pÈ>•Èar)ú×CgpÃrE]—yÏZ¤WqÞ¥y·P¤€±‹«Á¶áqÍhÆäF€zSï`GØXgÔyÁÀô ’jrcqž½±àõ™{r`†I$P˜MÞLÖ½‰ ç¡Ís¶eäº'¶zÖý¾å>ù  ]¤Rs* nF9©â|àPàbe'Š×‡ «$äa½+VÙŒ@ u™¾*µœ¤n¸éW™²vûf²î.ÎÒy4}7±ÍE}7•zãTÐ6rOéYú“nuP*†Î#$¡ØqZó¸Kf&«ZÄ#…GåF¡&ÛnOÞ  ¶ ¤ry¨/¬ N]W޵{H^ÖŒÑ,©´ò( Îä°òän;TòÄÏ€1Н`ð±dè*¢jEÃ#Ö€%¸·ta‚yYãb95dßÄàï?7nzUw¼Id6ý:Ð|ÞiN}h°ÑÚyÆüûæ¶`†IŽ#ZܳÓÒßõ  Ööd€àc“Xaˆ½®H+§ÔäH Ú½Hæ±ììL®\´nÒÙ/íO˜TšÇ¼Ñ䨧Ý>†µ£&Êä)$!­†e‡=苉0Þä-]ŒD/ž+bëF.WX“i“Fø h ‰UGTnHHÔšÓ‡G–R )"·¬4”·•±@t9`tŠ7j~©1["  qY:ÝÂy[–±\Ç ¨ç'âºOßno_,ÿèUçöR<óylØ«Ð|›õ–?ô*ç«üH|ÿ#®‡ðjú/Íš_üÝ×_è+xýÚÀÒÿãþëþºÿA[çî×AÈsw¿ò²ÿ®ÃùÇñø'N´Ú2|ÓÇá[¿ò²ÿ®ÃùÏñš³ZÚ>aþT†y™²’gË¥tZn”#Œ6ß›jËK/†“: V¾Å†< ñíLG1¬ä"®yéN°b¬ˆÃå÷©'ŒÝÝmì YšËÉ‹v9€RÒ#¸]ñ€b¹ç´’ÞLp+¯Ó§Fõù¬bœäý(”Ib ÒK4xÊæµ.ô@ )œÔè’Èy\zÄ_6Y0 òkIÒÚ/ÞL¹¥i¤$• (Æ0(…Úî¶l&8¬ëÅ‚ ÷³Ò´u¥ŽU ’0+”In°ààš›R•îvÞ+CHˆyG‘QßÌrjî•Ȉë@ЯÊ:Sœ§Šd-•ÍHíõÇJX•‚çøM2TÈ=EHŸwƒPLXçž(Ø!88¢?R9¦¬€“ð£xó“õ ÌÅy=ëSÝí­+—sX²1¸¹<@la³.Àç˜ìe•œüV•üž]ºÆ?*¤Š¢D¥Z·ƒÉ\°ëÍXÈ<ô¥pV<ŽM,Q–S‘š«*‚z†c¶,b­Î 0^˜ôª·Ê\¨5H‹‡f˜b5.6(4¡.È‚Ž¦«Â»aïPÝ9šçjœÒ®"%µId÷§\[,°¶@Å:<þ”“ò0[Ú€0ši&Tœwª··ª¤y­ÄNz×5ÍyfyÙAÏ¡ ÜÝI1ÀÎ*{9¥çUÛM)r7üÄv­Ë{UBøP6Ö?*îíÖ´|´‚ëÚ¬ÃÌ285[SusÐPâk¼·–¸ÍciìT³giéNÖçY.XƒÐÕK,çss@.”ß¿Ü{U»·Ý)À5Ÿ¥I¹ÉÇJµ<»¤8Jæ}¬_JdóAç‘Ö«Ýɾç`§ÚFâB89 ƒÃp;qç&ºMPˆ u¬Í˜è+KWoÜ~”“¦.n›ëZ7…£'­RÑ¢&áŽzµ¡~¹Ïá@tó™t¢ú1¸ äÓ¬S÷ÍŠuâm•H$úÐtº(íA2êBç–%ië¶ ! ‚öÌè+™Ô´´JòÆ~jë­p"~9ÅW·E’Rï@kq ͤ¤M»hïI¡2K•c´û׍߸~ÞîØ œb¸MGÃ’YÉò.FsŠuž©ƒ–àÖÜ hÇÍœú×%¼ñLr§”ø'ž9äàsŠï4û•Y‰<ƒ[‚xgx®ÛP1º†f¯%ù¯œžy  ÿì?=ØïÈì)!ÑÚr\tïQÁ¨²U¿ ÔÓj¥“ð lêàtíT,›óã$šÓ<‘YWþ½¾øðõ_™èGþEH?ëÙ?ô[Zoü{¯Ò±[þEH?ëÙ?ô[Zoü{¯ÒªŸÂˆ«ñ¿V]¢Š*̲õøöo¥jV^±ÿÍô  vŸò-Çÿ^íýkÆo¯Ÿ%W'ŠökOùãÿ¯vþµã¾B($õ¤†ÌøÄŽ™$óSTQž½sW%òúqUžšeUÄ1SÎl(ϽoYAå/#Ÿz}†˜±&æp( @'Phv^xÍ9pKqÖ«àïçµ%=â  gŽ´ƒÈ§NqÇ¥f»©aŠ"2zšŒã#ŠŽRÛ84>™™33[ á1žk?KbbxÉô­"?tNy  NFòMJe õ" ™ÇšGJgúÉA  ¶‘àn~ô÷ˆI7K R@âˆÀØÌ^”FK`d$qšÎ¸°EŒâ®Ý\R?ˆÕˆÃ;èœ$™ 7“^y­jE]ÁÎs]GˆuTŽFyýÓ\JI'Ÿz¯,$¥‰<ÔÖ‰Žj¨>Ôáž0Ns@5Œ³íݽ*ªcé­¸¶XóR ç¡  ¶‘yŒÍmZZ”ûÝ@ãdg'ÔUXlšèeóƒÖ§µ°.wI[Ä©ò¨€9Ë -gß®ßÀ¤˜ï ëˆóÿUµÊr+OÁè#¸ÔÐtWAù®z¿Ä‡Ïò:询üѱ¥ÿÇý×ýuþ‚·Ïݬ /þ?î¿ë¯ô¾~ít‡7{ÿ!»/úì?‘¤×;[3‚ÇùRÞÿÈnËþ»äiú¿ßƒèßÒÊX€*•Ëm H«à‚¼Š«qØ@Í1–* á'kFÿoÙ›=…gÛ~îø‚;æ¤Ö.Y`¼æ€*ir‘q´q“Åo®G\W9¥ÄÞxÎy5Ò(!FzÐ[H© =qNòÂ¥E+ª)ÉÅ+Hþu—w|pQ &’æôÈÛ#ŒÓm´ó)Üùäçš‚ÚÍî$Üù#Þ£ÔôµÚ<±Ï¨®…-„(0{t¦<ØdÐ-og+°·Ö ^ñ Ï¦HSÍG €úS±¸cµ1XÆœv¢9 =ûP× ¼~5^Bz’µIÛŽæ™2€FC:cÖŒoÉ=½*E(g< ¤8õ  —Òm\s€1Tíá"#)ëO¿ÈêŠ2M:ã1Z„Î  '¸Ž@©%#ÙŒf åÆÜ—«ÑXÈàK.qØPňPBç"¦ËL‘DH z mÓ`T‰;Z¡tìüvô«²®MgJÍ»¦M6,BŸZšõÂÚ±šXFlv¬û™^i<¾Â€`†WŒÖ¶Î„Õ; N3W¤?-*…gÒªÈ Á©YøéU÷|‡ÔÐ6§!XYsó£ek°n&¬ê™{½Í0FV%ŒúÐ’äç=ër—åãšÉ³ƒljMmBp õé@Jëy=q\Ưuˆ‰íZZ¥ÖnkÖîÊÚ¹'9è(¿”½Ë8&µ,agÜO t¬';å¹hä÷¥léH3c(݉çšu iÈæ¥2ŒG¥sÒ®ëÒksOÓ÷Ê[oÊgÛÅæêtæº{CFàÐŽ•YÊ8©µŒŽ{Š],eɦëY)ÓµSÐÓ.Çêæ 03Šfˆ¸ˆ¶1I¬É†t éÀ´„àc½_žØH»€éYÚd¡c$÷­S)û+±‹¿lÌjpçêj)¥Æ÷œô¦Db¿ç@vîDNqíQÙ?ïˆïš[yÙÛŒŠ¯„\œuÍtªÛ¯\Õ-JåSh© vÜ ŒUK¹ËÝŒ†€(_hq?!G5'‡ü¶ÎÏÆ»#þ¯q¢X•ãŒb€8IlÖ9”Ï¥C>—/úÄÏÓ]ÙÁ•sÍUx¤@AJÇ·I‚Ù㱫a‹|£©«) H@š ¾ÉÕq@Zdl0ßiJ¡Jc½W°Œ¬[±RJßé®}xü+*ÿ—£7Âÿ«ó=¿äTƒþ½“ÿAµ¦ÿǺý+¿äTƒþ½“ÿAµ¦ÿǺý*©ü(Š¿õeÚ(¢¬Ì+/XÿfúV¥eëñìßJ§iÿ"ÜõîßÖ¼~V ý+Ø-?ä[þ½Ûú×’Gnó‘Œã4Ø[!šÁÉ­+UVÉ_Ʀ´²ÄxýjÌ nS+©àHßÉ*ÜØXÿj \¾@ÐI žÝiÀcšfpþ¼Ð»³ÏJá'½6W_84ÉßîÜõ¦Jqù"€3¤ož£ÜÎàdÓ$oÞZžÆ34£¾:ÐÅš \Œâ­6uãéU­à#qÏõ©fPßS@×M¶PA9¥·p¤±ëž*)G›)ò:Ô2Fñó“ÅoG¸¢¹4òá |PZ9’Ùyâ¨ê3˜ØÆ PšS,ìI⋹Ä'<ôØÇξíeø†íc…°ß…qšõøy6“øW6NNjÕôÞlìsš©@93œ€iµlX#·ZÎÒlV²?jè#LBIôÅR°„@HàóZÑÂ<œûUV+ZÍ–Hü¨¹ˆ`õ¬«»??yÇ#½n”äúb«0T‹$u PÎm™äTºD"æá¤nÞ´º¼+»x?‡YDN:ûšÞØ#ÛŠ«váÎU¬¨o˜ç=*ÌŠ\("äbèò:GÎÒO¤º`eÎ*¶ü;f€5"9#~— ζû£>•£ {PŠ18ÈÅ$À )b`ÊI³`¯Ö€.ÄÙEçµI¿h'ÔUKiGמ˜«|½Aï@n‹n#Š¿dy8¤t…G¦3PZNCÎEi:e€Œ0<-*H¤õ¡¤ÁЪÜÍA;ü¼~4¢PXûSd`@ÇOJF@Ê9Ç0SÏÐTNÀcÓ5*¸1õçë@ $–ä*p¸ÇJí'5:`¯'õ <Óº‘ÁéÞ“*O­Jcƒ“õ  W™aaŒŒqX«4ÖêcâºVSœ}*”ÖbG'§Ò€1aµaÎk µ¶X! µ¨€v«ÅÂFyúЗ۷Z†æå!sõR}I#M©Ë ÏŒË}8<â€q4·R:UË;/úÕ›k5rG"­€{Šdjû£éRŒg8™P£ßšQZE½'·¥[ð˜Åî¬?é¢ÿ7ª›‚óV|$ÀÞj§þš/ózç«üH|ÿ#®‡ðjú/Íú_üÝ×_è+|ýÚçô²>ßuÿ] ­òFÚè9r÷þCv_õØ#OÕ¿Ö[ýúTw¤mÙ×aüKª0ó!ÉìßÒÌðÙ¡“޹Í=É$Œ”x8☎~þÝÒQ*g"©…’y0ý=릖$`ð­W[‘Ê€#°±Hð{úÕÒ·gÞ“zG[¥QºÔäš·4«DëX³Í$íµsçLf–îQ’vç¥kZÙ“su  ¶v;~fk@G‘´`T›†qFB«­7ËäœçÓâ2hÈ*~j ƒ÷Nh¸@Z¯ÞåO|¹=~•;”¶z”3&ŒTI„cÀõ©BNO¡wahÙ_”úT7-¸œqR•äÒ´a×ð  Ñ(ò²Oªy€³ü¢­ª» ç=ª…Ö(™É4 æÝ4§9úUkëƒ$Å„V¨ Bx EeÏoˆÄ‡9j³§[´§ÌÀëÒ¶$o.§UM: SRÌ7 6ÞP7zc7›1¥BòÈ\Ñ Û³É4—J£ø†+5þÿzåÕ¸ëŽ*Š©$z{9H FÒ#5É'š’åø(*þoåÂŽMSºC ªØã½Y¬‘‚§µ.¤¿èÍŽ½« Þi “ NÜÐÓ ØÀúÔGŒ€¹¤·—Îç8«Vå¸aùÐ3t…ïG5:AÓ b­]7Î@c· \„…UAÔÕÃ0A€yÅd$¥H9Á©YË|Äýh=F]À“Æç\>¿*˜0?ZèµK¬óqÒ¸íYÀ õÍfÀ¦AŽ{ó[ööÛcþ.•ƒj“$r uvfTN¼õ  xa+b à˜Ù€ãvð,V*1ÛVÔbÑØã  zU·©;ÖåÕ¹†^œU/F>ÔìGCÅojj¦Øé@ÒNýß/Ÿ­X@ÛÔTZ;€ŒGZMfS€´&•-×gkmºéT~5­§.-ùÖ¦Áµã@‘½­²Ê ãóVãÔVK&ç³ík¸cÍÝ;Û«ÐÐóJdpƒMiIÛT'ŒŠÆÒŸt#ŠéuöZ¯| eš/Ùúu¨6¬WcT¶«[àœ7½Er Ü‚~´µýÙ£#¿µRž¦§‰°yÎ hÝ,sÄp£Ñáó/ÀcòƒÍBÇlGnrzVž™lmÂÈã ÔÙÛ0„.|]¢ÂA5Æ´Í1Üç ôSÈéMÂq?ï‘Jàtú•Ò­®AúÔÚN¦†×ºW%„þâß"“û‰ÿ|Š.k.¦2~qŠ«6¤…'§Jå>Oî'ýò(ù?¸Ÿ÷È¢àm]]$é´š‡H¹K"gY'÷þù|ŸÜOûàQp:è&ìîéÒ¨Í|’HÍ`üŸÜOûàQòÿq?ïEÀ½u¨Fƒžj²^«­Eòÿq?ïGËýÄÿ¾fÒùH5z+Ô É®cåþâß—û‰ÿ| .jš‚tÍ9ïÓoÞ®#+ýÈÿïK•þä÷À¢àvÐêj²`·¢ºŒey#­yÆWþyÇÿ| 2¿óÎ?ûàQp=$j1„ÚŠÏ’õàK»ƒ×šá²¿óÎ?ûàQ•ÿžqÿß‹èq꫸|صLu$#ïW›eçœ÷À£+ÿ<ãÿ¾øQp=5ÎIýiçSM½@¯5ÊÿÏ8ÿïþeçœ÷Àÿ .¤ÿiF@Éü*eÔP/W˜eçœ÷Àÿ 7/üóþýð¢àzqÔ“vr?*uHÂò¼«rÿÏ8ÿïØÿ 7/üóþýð¢ã=SûZ<ðÔøõtß÷†+Ê7/üóþýð£rÿÏ8ÿïØÿ .#Ö¦ ç?Z_í8÷}êòmËÿ<ãÿ¿cü(Ü¿óÎ?ûö¿áEÆzĺ²"äÈ?:ɹ׼̤mÅyîåÿžqÿßµÿ ]Ëÿ<âÿ¿kþ\öÚPä;·×5³k}CŒyNåÿžqßµÿ 7/üó‹þý¯øQp=tꉜîàÒÿhǸr+Èw¯üó‹þý¯øQ¼Ï8¿ïÚÿ…×ßR@¼0ëH54#‡ä;Çüó‹þý¯øQ¼Ï8¿ïÚÿ…×Fª‡Ã?†5XãºÔ²Ã—_æÕã{Çüó‹þý¯øQ¼Ï8¿ïÚÿ…g(óIK±¤*rÂQïþw=ßMÕã[Û“¸s'ô¶u¸¶ýñ_6ïóÎ/ûö¿áFñÿ<âÿ¿kþw3=ÎïWŒëgpâQü?TÖcÝÌ:0þUá;Çüó‹þý/øQ¼Ï8¿ïÒÿ…Ù¶£ Õ)Ö#)÷†{WŠùƒþyÅÿ~—ü(óüó‹þý/øS¸ÒuˆøùÆ}é·‚wŠñ}ãþyÅÿ~—ü(Þ?çœ_÷é‹êWzú–eGªð܉Ÿ{°çÖ¼×xÿžqߥÿ 7ùçýû_ð¢à{ ½ìñ•üêÉÕP¼?:ñ]ãþyÅÿ~×ü(Þ?çœ_÷í‹ícUˆH¤mZ¯Þ?çœ_÷íÂãþyÅÿ~×ü(¸Çý¯¨üéF«r­xÞñÿ<âÿ¿kþo_ùçýû_ð¢à{+êqpÃ󨦀òÃ$Wï_ùçýû_ð£rÿÏ8¿ïÚÿ…ÖÛVN#Òƒ©&޵䛗þyÅÿ~×ü(Ü¿óÎ?ûö¿áEÀõÆÕc2Ô¬G³‡¼rÿÏ8ÿïÚÿ…—þyÇÿ~×ü(¸¨5HÛ,O5R-Ed¸bÄb¼ÛrÿÏ8ÿïØÿ 7/üóþýð¢àz=Þª’\,JÃÐÓnµ(Ùî ó­Ëÿ<ãÿ¿cü(Ü¿óÎ?ûö?‹ˆõ=V4¶>i²êÈÙ`Ãé^a¹çœ÷ì…_ùçýð?‹Œï¢­3nµn=E1ÔWœeçœ÷Àÿ 2¿óÎ?ûà…ÞÍ|0›ØDw,+„ÊÿÏ8ÿïþeçœ÷À¢àu‚øKwÜ[‘êhˆá^o•ÿžqÿߌ¯üóþø\þóRGL*‘¸‰£ÁÆkÊÿÏ8ÿïFWþyÇÿ| .Vš‚ÛÍØÍZÈ û·®S+ýÈÿïI•þä÷À¢àt_Úªä±<ãµ5õÀ Ø®åþä÷À£åþâߋҥú. 7>•,ú’ºìB9Êü¿ÜOûàQòÿq?ïEÀ›W»÷`öë\¬×Ÿi< é>_î'ýð(ù?¸Ÿ÷À¢às°H“ë]F‡ W@Þ¹¨r¥‚ˆÔ±èM,¨Ðcεh³Ó̇n1EÀèµäò3PÁt¦Õ—=k¼`dÆŸ÷À©)/5­cþù‡ ùâ‹Ôé7 àŽµsQÔ—ÉÀ#Âù‘ÿÏ5ÿ¾M ´÷™!±–TY ,â'+ E½Ž×I¼M‡š5KŸ6UŒW òdŠ8  â­YÜ´Wù ¯jwIÓÆl—'ŒW=¨88ïÞ·lfBŽØ®wQ`ú^éL ÿ¹^k7U´ómšDPqVgp 8ÅZDó4Ò:äPe,–³î õ®ŠOí¨b=ºsUÒÅQdb½+*9DSt<ÐU™hœ7µSŸÌGÚÃ8ïW4©ÞhÀp|Õém#Žh³‘d‹ñT.ãòî2:zÒ¼3ZÈJ—½Cq(Ÿ´¦ã6yÝÚ£´ù¢ëÅ5y´ ÔËê}h䈩ÇZ}«b.sŠFQ"ã Êü€PMBo—mS±S$û:ýÀv' §é£)¸qí@f-I¬‹v'Uˆ{·ò5~îB&²ì }UOP3üe_øRôfø_ãÃÕ~g°·üŠײè"¶´ßø÷_¥b·üŠpײè"¶´ïø÷_¥U?…Wã~¬»EU™…eëñìßJÔ¬½cþ=›é@í?ä[þ½Ûú×'!Ü©®²ÓþE¸ÿëÝ¿­q)o9éI ˆxSÁéQe²A4òþ:T[öýiˆ\Œâ”(ûÆ 2rÙªwúŽÐQ4šø»S–ÍU€†ŽsYèŒóry5¯m%qÓùЄ$óšlßx6zÔ·˜cZfTPÍ>òù‡œV̆< ŠÍÓQ¼¢ÀÑ,H=( IòrSBÇ^•£ WQlÔSBBãÿ­@–*àþtɈQ€y§d!ˆUF-$»»P€ù¸bvH­ú â’Þˆ\¥bkÚ˜Hü¥8'¯4ÈxŸTÞAú ã‰9ç5V»ûMÙÁÈ^P ò{_Δ­)èW¦jAƒÎH¦m tãÒ­YX´ò`Ø4©¡ØEzû¤=Fk^ùÞA…éSéZRÙB[vxâ™~!$þ´˜­ò/Òº¡ À£uHÉ×s°T™ŽçÒ½WðÄxjâÆ1£¾Ó`Žáï|œ ‚rdPøù€¦{{WŸX_>Ÿ¨[ÞGrI‰e©#¦@#ùÖµ¿5¸5I/ÍÛMæÝo3»C†í³wv¡íoëÈ÷4|1•u¢ë1˧ o¢°šaq+TÇÝØ¸àóׯ7„ÞÒ[)QÑ´Ó¥[«}ªþxÉ•˜çj£g†ä Ó5ÌiÚÅÆ–/EºBEå»[ȵ®ÞzýsZ6~/¹´ÑàÒÛLÒn­¡bÊ.­ÙÎâIÉù€Ï>”?ÓüÀ¡§iךÅïÙ4ëvšb *oU;G¹ SnmfÓu´¿…£’'hÕÁ ppÈνR–A4®åC1mŠ0«“КBw·ºv“¨ÿÂ$¶V go},‰(2:‡Qó?Rzý3Å^JÒüB× 6ÖÃìš[+Û&Ã,E¶Þ­ï\4šõä–še¸1Æ4ÒÍo$`†É`Ù$’#ÐUíCÆz¦¡i¶Ö×lÂášÖ†IGGs““OOÇõ_ ¿¯Ìé¥C»‚þæëI¶³ƒHÔ’m£*e‹vÒx÷õ§Ç§iwÛ5;+;+É!G…`··òฉ(6°åNXôéé\–¯âÍCY´û,ÑZAIæÊ-¡Øfï?'&£‡Ä÷ößÙë À‘Ø«¬q„;_~CòH>ÞØ©¶Ÿ×b¯ý|Êú…Þ™sä^ÃåJÊ$*ÊzW‚>•WuO©j³j“Å$©KK QB¤" èI=ÏRj–êMºÕê7SmÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€&ÝFê‡u¨mÔn¨wQº€:] Çidnv“,„å•K0ã{f´ò;¸Þ £‘£aÈ’&Qù‘Ö¹{-@Û/–Ù)œŒv«rêÛ—‚ÍÛ#Rtkx—Q¤þÎv¦{œ‘ŸÒµ“Q½6ðÜ<°•“fäÃ;½ý+›·¸{YLƒ-»ï_z²/-•)Û‚{àc§â˜½¼ž"Š A/ï à’?¿­t·:ä–/‘íu V çaÙyŒúuÆxÕ¸•®¾Ò$R ŽÃ¿Ï­k¦¯lÈæX¶3²)MÛ‡¡#¨äןŒ„Ü“JëÈörÊ´£ EÉFWÝö$ñDqȰÞáDå¼¹ ÿ‚~˜®z7Ĩ}ÅXÔõ/¶EbOº¾þµF6ýâýEtá£8ÓJ{œXùÓyJžÇ£iÓméÅdN¥¯óÛ5£§¶Û<ãµgÝrIõ®“ˆ³p£Êäã»cÿfã=«¸epO&º‹DVxœ¯­eÚÄ'ic#ƒ\Χ¥Ëc;HŠJžµÚé°5ØzÕBÕ'…Ñ”tâ€<öËVhço5ÓØëi"€Ä{šáµ«)l®\Jç5J+ùbëâHn“†++PÒÂÈÙî+šÒ5™DªŒI½u&í3““ï@«,öÃeEOeqæJÀqš´©Š©%«Û7™#¯  ¨P§RrjIAKÚ¨Ú߉J+`5Y¾œöÆ€0¯_Ìm£ïUÛ(ö¨öQa3Mæv­q±FòL±SÐT:TdÝ;sQ]HK¶jþš  =Íe_øRôfø_ãÃÕ~g©·üŠpײè"¶´ïø÷_¥b·üŠpÿײè"¶´ïø÷_¥U?…Wã~¬»EU™…eëñìßJÔ¬½cþ=›é@í?ä[þ½Ûú×IcŒž•ÞZÈ·ý{·õ®´¿sh¶ /8"¹ÝLÉ®—S¹igP£kœÔ l’(4f’º{ŸZÚé6·CN×.|ë5¸{ˆ ù1±ÎAýÑÀÏ&¥è®5½Žg4fºK}.[Ÿ:Ò?ØßiLHÒ|Ä®æ7=µPÃ×R[«‰íï¸KFùÍÜ1ÐŒç¨nßׯù×úôÿ3+4f’­i±ZÏ©[C{$‘ÛI Y2('äÇÒšWÐMÛR¶hÍlC¡½Õa¿y#MÌgjz±†h—D–[‹h¢ŽÞÙMŠ\Ë+NÅq˹#‚r8òF*o×úëþC¶¶þº™š3Z“x~î(e'µž·+$R1Æ_a+•ò1K/‡5%Ê!Bl¾Ý’Ç,g>÷lz÷§ý_p_×ÞefŒÒV–¦Ç«ë–¶´Š“ ‹¸RxÈ>ž”š3[Pøjõ4ÍJïP²¿´°«Æe£Wbê¸;—ž “¤^_Å}|ïo Hªì˜$ Œü½)ÌÍNj’H<ç>½Y ‹T,bi¯Bg<明³H‡djÅ9&¶glÄWn8¬È›ì챑ÀkE˜9­¤¿Ãä°9#¹”vYÕp}kMMÁÕp=hI—8•ÓhvÃË2°®~(¼ç‡9®ÒÂ’…$Pw%TX’qƒšÙÔä)­aľlÙô ÛÀR]í÷ia}ú‚ûgùU«’±E€yÅW±MÒZÊ¿ð¥èÍð¿Ç‡ªüÏRùáÿ¯TÿÐEmißñî¿JÅùáÿ¯TÿÐEmißñî¿Jª "¯ÆýYvŠ(«3 ËÖ?ãÙ¾•©YzÇü{7Ò€)ÚÈ·ý{·õ¯’ç{Œ öOùãÿ¯vþµâñ€õÇzHl{Ÿ” µ;qŒ UGAW­I‘@ÎiˆšÖ6irz•®Š:‚«Å®?½íVPZ± ÎidlŒŽ´ŠÃaã¯ZiJ«pq5Amò¡oçS]°c­DÛ~”$KæJôéR2æ`{RZ‹“×µ:GP23ô »@5EUƒä±Çz²KHÀ·JŠiçGR—É›#'žµÄjú‚Ç ò 0­­gP‰'*?ZóýNð^\’¹Æx I¸sÏz/Læ§kvH”ž„TRFËaš¬zÒ€Xqš1Í(%Oz×Òm†ñ#€85fòCü'–à ­ewˆ àïÅYˆý«P‰1À=è£ðü"ÑUß«s]J¼d¨^zÖm¥ºyxlpµ(“gœzЗž@eÆ=q-l;‘Åt¯#,EÈùjâuøäº—æn{¼PnøUar“ÜÃ5¾–$ ¸x¾mö‘žêÍö¨ÞX¢´¸iÀòÞxgIî$ðówô ÁÅ]ðõ´>Ó-®”w°D ÛÏ#¥\ºÐ´Ëù…ÄÑ;1URRwEuS•Ü€l{æ’Ülæõféì¯#¿ Ás¥¢[¸¢Î€0bq #t Š¼Þ Ô~ËcxÆÒ +Ò=Ç’ó$C#j1V8ÎXðÆ+Tø{LišW†Iˆ9’âGÛ†åŽÑ¸Å$ÞÓ&Þ»³¼kq"£ë” Ž˜Ç_SBÑ,ê·a£Þ^DªÏ*†èHŒ×;6¹®Z5Ñ™´éÒ8f“d.¦DrF\í#žsí[?`Ô®Qíõ ËìåFIbŽÍãfR1€ÞiÇåV&Ò,g‰`Ü'"“ça¹T’£¯É  ‹Ívþïn"ŽÛì63¤£†ódÈRJœàcxÀÁÎ;S¿uÞÇ{qme21Á%¤ŒØßµXß½Ï.0N+^}N¸¾²Ûî›*Çç`¬Wî–Pv±‰ žÒæyXe‘ßøžæF)óù o“ËŽ”€¾&“å½¹´‰æ¶‚ð¼L|²˜Â·(FAÉ®«OÿgΡ%³ÈܳÆÊc§,sõãéU­ô=*ȇe®$•¤$IÛ·Nv޾”‹¤ÏaÅ£ÜÇn„åÅÒËsô ™Ð=:S‘â ©âÔncµ1Á8K,Nn;§#k`Œ¯·O4íOÄ¥…ãYà \ÏoÍ/•e3‰‹…]…¼¾«ÏãZçF†î´Ö+‰æEŽY"Vˆ2«\ Ä©õ9¡ô :C 4sï‰v,‹s(r¹Îƒe†{i!™7ºÞ®·w?fûÁÔ6¡&‰ËæEC¸Àp_¦;u­mþâîÚä]ˆ¼ûiÞh ØÁIÆMNúU”+492Ì“¿ÌܺciëÛhã§ŸÙ6^fÿ$†óÆC·ú»IëéÛ¥?¯/ø!ý~ð&ÛXÕßٟj”êqùð\w, 1Ϫà¨ú­mnj/l ¶"ÛOŠîcp™wv©c…?1Ï^•¿iom¼P(Ž(¼”îU?»“ÏaÞªÍáÍ*â8KRV„*®3è­ƒófÍÿ®ÿðúüŒÕñâòV»’ V‡Ì·ÀäÈ6ݼ6Þr˜ÏR~k«È#»†š Т_³I ÚavÈG9‚9È ÖôþÓ.¦yn yK6<Îȹ;PªqÆ@[èm´‹"C#H² CË<’6à¥G,Äô$c¥‚Cº¿Ô,£¾º6ˆÖHb‰rΉÃc _ÅjMç¶½–ÛÊe-å`ù€Æzô©×FߨòGhî~a0’hÀäáSÌP¼ú~U0±šêÆKmZX.•ÈÿSB00@ûìzZc3µ]WS·Ô.ã²û'•if·N³#“%òxN¸=j³ø’öHî5"·}´‘G$ró_xBH9ÀÆñÆqÚ´/<7g¨êÒ^Þ‘‡ÉÈ0¬ÄîÚÀ0;ºŽ*ĺ›=êÝÉl  ©áØ+û¤¨;XŽÄƒŠKÌOÈ÷ԯÚT´Óc±·i&¼v2Dì—( »$þ•.‘¨ßêºÔwÍVÒiöóI£?,_;Nàñ×8·“eë4pm‘L¤ìÖ0gïÜôíPÊ/!í#òg¶ˆEù’`÷CÃx±4.Ÿ×øú‡ˆ%éjí r´@»dŽeQžäg#Þ±!Õõ;E¼½’T¹S}$Fbvt&rƒq KÙBƒÆ+mtûëŸÝê—V—6ùW ³Äw«S»Ìn„tÅ8èc¬Û’·D™PÊû Îr8S‘œ€hþ¿!™ëš¼ÐÁŠ(®%½û:Ï=œ±£§–_pŠ·luíOÒu½R{»%½[CÓÏ£+#ÄH'%ŽAÚ{ qÖ¶"Ò,áH$¯äKçFeä!°W9bIàž©¤ØÆa)<—‘ãùÛ†|î={äÓ…ª^ϧëÚ„öÂ?8ÛZF¾`%Fùr@ œgÖºkq:À‚åãy€ùÚ4*¤ûI™ªð韺ÿF?º#_Þ¿ÝF  óÎgŸSO¹‡W{†k[û(¡8Ú’Y³°ú°”gò¥ÒÃësk:Ü÷q$/§¤WsÚǾ-—»“‡²úc54楨G§Ãh–°ÝÏ ²Êò«2/–ÁP<“ëÀõ­ˆô«8ŒL°á¢™çC¹¸‘ó¸õï¸ñïPËáý2khmÚÝ‚BXÆRWF]Ç-óyÅeZxŽòêæÁåHm-.~w…äHI Á9Îk_\Šöm-ÒÀ¿š] Ü#²n‚±èHÎQM“@Ó¤1¨…TD‹+ˆ×oÝ>^v’=H©`Ò­áÑ¡Ò÷H`Ž%+##=Ô‚? u9«VÔµ.öÞÙovÛjr^m›Ë ¥“ÍV9ä‘÷½³SÞÉouá˜gµmB9Ë›h¯¦V—Ù‡*ÿ6=Iàq[¢Øì’†Þ3¹V ^"®T‚zžüÓÓI±Ž XÜ,V¯æB ‘µ°yëÏS×=sG÷zæ‹}§hèñÏö”Xâžv%•”üæNrÙ1Žx¥–;›/Úî–álîĈ?Òž@ï·pàÁ\þ¯q¤ØÝ¼ï<ÚeEv,Ùœ®~\xÇ4È4[ {ãz‘H×6IÂg®Ðąϰz‹ÐËÒìDšÎ¢a»¿û$ öP¯{,›¤ 30ÜÇe@ǽ?ÿi·Ô5;·—tm‘Æ÷ 8T`@"FùŽJž­tÓ­c¶žÝ#+ìï À–c–9ÎGáÒ›a¥Úi¢O²ÆÁ¥ »É#H펙f$ŸÎ„3–´¾¼ôs;Þa$9㨨ˆµom,«om’X®®L,jèû@À`P¸ä•³m¡iÖ» p¹d›Ï $Îí¿nÜ’Ä“òñÍ6oi³§–ðËå—whÖâEW,Û›r†Ã{ŠHoúþ¾ãÓT¼’Ac§Ego+Íw#I"3&Ô—oÝ bH':ÔGĺ´¶_k…,•!Óc¾š7‰}Û²ªC|¼/pzÖ–©á˜ï!Š;7Š×d’H\¬ŒÙs–ÚË"‘“ž9ÕjßÃú|d1´ŠmÍÙ˜‚ñ¨8¼y´-¿¯ë°uþ»™Rxšõõ‡‚ÖѤ·†xát[Y]˜0R[ÌQ±vîèzàôâ¡–úûR¿Ò®ŸìÉeý¦ñGFó2‹"ä¶qÎô溢؛å¼È“¹1Ìè Ê piƒ@ÓWPË,âC(Ä®y-³;sÉ禺 ÞÌÌÕµ)¬5[Ãk ¸œAj«,ŠOß™“œ:ã­V¸ÔuiîílþÑo ä:—ò$oåH¦q”ÞqÆî£5Ñ\iVWS<ÓCºG†;ˆÈFÞ½f9¨îtM>ïÍó`mÒʳ3$®¼(PÀ‚ œ qŠHo¯õÐÆ—Äz€Ödµ†ÛΊÞxíåT´™‹î YÃŒ¢»898zS“_ÔæÞà­°°žî[eŒ#@@ÿ1mØä¡ãúÖ¿ö%€¼KµŽU™vå’y>ѸÃ÷³YÑx\.¾5'¸O-%y’‘Ôn`F[.TœÈPI  ûOê3XÜ^5˜0ý†K¨ÏÙfceÎÜ>Aê¸è~µÓéæìÙ£^É“79†2‹ƒÛ›ùÕh¼?¦ÃÄ1à †á7‹Ï¦ÓÔ*îÂÿÀ@©áÓã‡RšõX—’„/eU,Gþ„iˆÎƒíQøÊhå½–X^ÏÌHNGóã€:ŸsÍRÔçÔ-|I¨]Xµ® Ó£’Dï¤8·¿'?Jé>ÉÛ~Ù³ý#Ëò·äýÜçéÖ©ßh:v¥sö‹¨Ü ±3ªº‚H  €Ã$ðAëK¢þ»«ù~†Lž'“ûNÍ`x¥¶Ò7‹ìÒnˆ²næ\ìÏO—Á¨!ñF£„w—ÑÚÊ“ØIyÀŒ…JíùX–9ûÞ:t­ÖÐ4Ö¾ûaĻĘYœ!p0 ;IÇ|T‰£ié‹e)-o³mŒ©Éç;GZ?¯ëæ%¹“¥}¿þ«£¨Ilò›Hû:2¨ߎIÏ×ô«ZÅþ£ýµ¦žmU¤‚i™®#gf܆Îî¼ý(ÿ„_MDÛ Ê™x™‹LòecmÊ£q8ì+N[+y®RâHó*#F­’0­ÃñÚ({iæ5¾§7‰¯¡³’æö+y´ï·Ä°+!ì6IÏQÏø§]k𵇛mp,ží’"’8ßb‡FC)lœg9ÈϵmÇ£ØF¨«l¥Rß쪬K+û¤ÏNüÔ0øwK‚'-˜«²1/+±ùå$”ô¿õývOëËþ š5ÍLJtⶇPûgÙ„ÛE+ÌÝ·vsŽ1»¯zÕѯ濵—í Ïï†<íb§¨Ï8\nÎPÝ:WO¤\½Êá¦YšHšE p2qÛš«'†t¹|½ÑN<¸„eÔ«”œ7Ì9=sVm4«{;Ù.!A Œ*"nÀ÷Õ?ëóõùñ}²?ÏÞÉ$rYù‘Äà ßÀëõ<ý*-W¾×Vú$6¯mû‡’!¼™A9u‘³Œçœús¶öVò]5Ë!óš# pÄ™Î8>½úÔvÚ]•œ±Éo£„@»XýÀrç§žO­.–þºïuýlSð̲Éá«Y&šI¥ÃæI,Øb95Ÿ§x†ûeŒúŸÙ>Ï{ló¡… [T1 –9=xéÒºk8,íÚÝ<¸—;W$ã'=þµƒƒlàÒÍ%8İÉ;l¦AuU,Bn~´u`Uµ¹Õ-m¬Ò×ìÉs÷óˆÙ¹Ê¼0Ç yéÒŸˆõ%°šâå-X¶˜uhÊî6Xç¨äc¿ÒIeo-Äs¼y’8Ú49# ØÈÇü~U\èšq€Bmÿv-M ÛýQþ¾ÝzûÑý~ðyÿ[Á0f×5ËFº36"ZG Òl…ÔÈŽHÀˤ`óÎ}«®ªSi3‰Ä°nÆ‘Ió°ÜªIQ׌dÕÚbAERQEQEQEQEV/‹äRÕëÖOýÖÕcx³þE=Sþ½¤ÿÐMx¹?èö¨´»i…ɹðjP7[ÆzètØmÚ2iˆXå[ÀËSá¸xÇ'CÐæ±cw´ÕH9ÃÚhASócŠtí•äìOj’í7Û¹æ³`ºhIûV’L%‹#§JK$ÙV$éZŠE׊͉w0ÇÖ­ÌÞLs“@O33mj¿“æ!\õ¨ÙØäúÔ–Òá°hRÑÎ Ó“U •DoÞœ ×Os6õ1“kž½·Ü+(ë×-œdÏ òk°‡äsÒ¹Ý' Ûˆâ¶è°sÒ€35YÃÌTPZF@ÝŽ ªÓ³Ip{äÖš©ŽØ: ξ—tÛ ¹iÈóT|뱑Æki" w¬«ÿ ^Œß üxz¯ÌïßþE8ëÕ?ô[Zwü{¯Ò±_þE8ëÕ?ô[Zwü{¯ÒªŸÂˆ«ñ¿V]¢Š*̲õøöo¥jV^±ÿÍô  vŸò-Çÿ^íýkÆ[°ìÖŸò-Çÿ^íýkÅÐy„äw¤†ÆNg“Íjé‘6Ýä`b¨à3ýkfÞ2¶áG¥1Æå˜ŸåVãÏ5Nñ…€\ÚXI}à:;vE»‚8§ƒqÀÞ‡ cÓñ®tj\b9\çÒ—A½Î&ËÄi©x¯MuxEµÀ™Í'\Ø\÷Øä€zp:æ­é®ÖÀ]cûR™§™ ’K²öιb(r ØÒº ´ÛYµ[âvËl \wxöªh0¥ü7wíã@I….$R±’1FN æŽÂ9û/¦¥â½6uÕá×dK4papßc’éÀëšîj„úm´×ö×ÃåšÙ\FNàÏíFo=–“moyrn.Q?y+9mÍÔòy"Ÿ@ê_®kPŽ}Wijéÿnºµ‚ÚÍe_³Jc-#3 ’:·§Nk¤Ü¿Þejz¶¥r·?k¹µœFai-¤ ] ÎÓxýG­K…¢_M>¡ ßÈ}©YIÉÚ<lß_vu‰k¤ˆu¨%UŽ; _"Ñd’ØÜOÐ(mn_ïΩ¾ßÖ¢BÑI¹¼?:7/÷‡çHbÑI¹¼?:7/÷‡ç@ E&åþðüèÜ¿ÞsÚñ¾‡XÑåKùÚKÄˆÛÆ»CeX’ÍÔôp>µ_Ķ>mݬ·º„7·óS쪑¢Œ»… ŽôêEo^ØÁ%£Ë#k86‘ËF·&‘ì “V‡QiË- .FЂN1œü£½ õ¿Èã¼Aywo¨jj—:‘±Eöym¤o*ܑɘ¿Þ9 òúWwn‰pl¨;—¡÷{á»[Û‹©íä v¹†$Øç ‘ÇVÌkQ¬iµQUôŽ‚ê>ŠMËýáùѹ¼?:-›—ûÃó£rÿx~t´Rn_ïÎËýáùÐÑI¹¼?:7/÷‡ç@ E&åþðüèÜ¿Þ-›—ûÃó£rÿx~t´Rn_ïÎËýáùÐÑI¹¼?:7/÷‡ç@ E&åþðüèÜ¿Þ-›—ûÃó£rÿx~t´Rn_ïÎËýáùÐÑI¹¼?:7/÷‡ç@ E&åþðüèÜ¿Þ-›—ûÃó£rÿx~t´Rn_ïÎËýáùÐÑI¹¼?:7/÷‡ç@ E&åþðüèÜ¿Þ-›—ûÃó£rÿx~t´Rn_ïÎËýáùÐÑI¹¼?:7/÷‡ç@ E&åþðüèÜ¿Þ-›—ûÃó£rÿx~t´Rn_ïÎËýáùÐÑI¹¼?:7/÷‡ç@ E&åþðüèÜ¿Þ-›—ûÃó£rÿx~t´Rn_ïÎËýáùÐÑI¹¼?:7/÷‡ç@ E&åþðüèÜ¿Þ-qóê×v^5ºš[†þÊŒCm*3|±³‚Uý8Sþðô®¿rÿx~ušÚ-„’j&uó“P+çG!~U ü¿:Àѵ‹¹u½Fòîë˲žÌ\Û$¤ìŠ5fPÄ{Œ1úÓì¼_(}@]ùWÛYý­$‚ÞX7Wg=°G³w é÷“;Ë»kÚ3° 哟®¯‡míÍÌÓ]]ê/%©¶òî]9®ÐB¯_SGOëÏþuþ¼¿à”$×µ»ŒßG`Ë5”×H‘+ƒE)bß7Þê¨æÖµ5²hµ8¬fŽóM–æ/%Ú ”`XäÝAŸáë»­A~Ø/ಎÎ[e[«˜¤q¿ ³<:±'¥oÜhW1Û£Í0ZÉj»XrŽ¡I„‚©µ¿óŸåù5í~÷G…n¬Zî8 ³@-f“~;‚¤ì–Í2;½BûÅpÉeÏ<‰"ftçïeHÏÌyu©dðý±žÖx/n­¥·m÷BëûÈÇ![ þ˜<Ò[ëýoÿom?­¿à™Vú´¶°\Eckn·W:¼¶Ñîݳ=K·9<ÀÇáR\ø‹Q±±Õbž+VÔ,L[]¤Yã9ç#=«FOØÉk4>têdº7k*¸‡ºœ<õ¦Â5dÖVÒÜÜÊ÷n=ÄŽ¦G*A^q€1€(^~_§ü½ÿ®ìv—¨jWºÓ5!lÒÅ N’Û+*²±#XœWÖ«Üè|k§‡¿‘í§Šr¶ê»Qv…Ƽy<ŸÀ Ö[V“R7$ \»T’=óóôMcú­ûHÂ[eu@ÚCã9ü…  ˆd‡UžÊâ7º‚Öc+yRÀ…È‹· Æüwä{VÍ-ÏÂÆ–y^Y^ÅËI#nf8=I®žÒÕmReûTóy²4™šMÅsü+裰¬}VÂ3À×vîÏ6®ª\‚Ä`õÆ)-¾áõ<†6\u¿§»€ÇÍFÃÌqÚº>2!<ñLFuí³M9u8"£µ¾h_Ë•²­kAùŸÐV»l-î7-h\:y‘õ”–—xùj§§]ev±âŸ:ù2†Áæ€6•þe>õ<ÌdÁBÒ_0§ëZ[2ñ@vïà‡ša!ªhâÜH摬ÈRÛ¹ÅU•†N:ÌžA4øëŠ·paÉ=+.Ý'Þï@— ,>æŸz #}*;,ä?5)€LÖ€3í“|ày«÷Ó*Ä#èj…£•”ž8¨î¦2ÌÀ¦hk¾}þõ£4 È‰ÞªØÄFÑsQ]Oå^+c;sÆk:±r§$º¦kBJc)lšüÏPù¡ÿ¯TÿÐEmißñî¿JǸO+à s¶ÝW>¸Q[wü{¯Òª ÑI“Q§&ÑvŠ(ª +/XÿfúV¥eëñìßJ§iÿ"ÜõîßÖ¼nUÇ8¯d´ÿ‘n?ú÷oë^8¼J’`Èk¡†,Â9¬x-ÿ|ôÍt0ÿ«Ä1 qÏJ‘×*éNT†=)ÌÈÅU …éÈ8¥›  â'aßÖ™(ù0zP}Ęc­X´=Ï¥Q¹o.~:bÝ…@  .|ü«©*ÅdIàþšŸt±úÖ~©¨˜­ö+rh5;ñ/Ês^{­^ ¤dìµkÞê\m–äöÍr7s %$gÖ€ c“Å Á¤ëÒ•œ€:б»ŒÓHÁ­m*Y0H?…HtyÁ$'õ  ¡ÈÍO´Œr±–ãµuZ7…\=É?L×_i¡ÛAÈ£_L‘@ey?+ bµ­<#w)Á õÅw«fˆÄ(Áž*äví··µrxF8ÀiM\_Çʦs]j@ŒMhÃe@BŒÐ‡ð™Ú*ÄÕ-<¤+·šõ9mÕbÀ®#Ä6¸,ÀP®éñĺM‚‹xžV·.L“(Çlž¥yÆÉë€l7Ùþm±Y¸ÍÛ ýìvö_ÌõÀÌví*Õwc6R»ºò½³ïèzõÁòy¹uñ¤3×ìÿ6ج\fí†~ö;{/æzàdo³üÛb²=q›¶ûØíì¿™ëŸ.BòiÄÎz:,==¾ÏómŠÈõÆnØgïc·²þg®Fû?Ͷ+#×»aŸ½ŽÞËùž¸ò©ä ÍR´\¹sÞ‹Ïbo³üÛb²=q›¶ûØí쿙둾ÏómŠÈõÆnØgïc·²þg®|ª/ºE=ð9¨°\õ&û?Ͷ+#×»aŸ½ŽÞËùž¸ìÿ6ج\fí†~ö;{/æzàgËSk©ïIÓÒ‹ÏSo³üÛb²=q›¶ûØí쿙둾ÏómŠÈõÆnØgïc·²þg®|ùÈÉç­gOÜÄqE‚ç´·Ùþm±Y¸ÍÛ ýìvö_ÌõÀÈßgù¶Ådzã7l3÷±ÛÙ3×>AdäÂWž*êœs“Ò‹ÏRo³üÛb²=q›¶ûØí쿙둾ÏómŠÈõÆnØgïc·²þg®|¨?=ñS+’8úÑ`¹éíö›lVG®3vÃ?{½—ó=p27Ùþm±Y¸ÍÛ ýìvö_ÌõÀÏ”ÈFỊ0ÄÑ`¹éíö›lVG®3vÃ?{½—ó=p27Ùþm±Y¸ÍÛ ýìvö_ÌõÀÏ—Ë€£Ú¡k‘ ž¬ßgù¶Ådzã7l3÷±ÛÙ3×#}ŸæÛ‘ëŒÝ°ÏÞÇoeüÏ\ ù4Â[´ÂÊ­éÚPS™(°\ôæû?Ͷ+#×»aŸ½ŽÞËùž¸ìÿ6ج\fí†~ö;{/æzàgŽO-åÀÛY÷r°\ôû?Ͷ+#×»aŸ½ŽÞËùž¸ìÿ6ج\fí†~ö;{/æzàgÎË(ƒÖ§€eÕ&‹Îõ¾ÏómŠÈõÆnØgïc·²þg®Fû?Ͷ+#×»aŸ½ŽÞËùž¸ådÊ8ôÇF7uvëE‚çpßgù¶Ådzã7l3÷±ÛÙ3×#}ŸæÛ‘ëŒÝ°ÏÞÇoeüÏ\ ùÅáÆâN)±¯™n{Ñ`¹é-ö›lVG®3vÃ?{½—ó=p27Ùþm±Y¸ÍÛ ýìvö_ÌõÀÏ‘]Z8;”*¼w¯)'Ò‹Ïeo³üÛb²=q›¶ûØí쿙둾ÏómŠÈõÆnØgïc·²þg®|AU®o‹W9®€9H€ÏN1E‚ç§·Ùþm±Y¸ÍÛ ýìvö_ÌõÀÈßgù¶Ådzã7l3÷±ÛÙ3×>V`[8ªÒ¹U ·8¢Ás×[ìÿ6ج\fí†~ö;{/æzàdo³üÛb²=q›¶ûØí쿙럼»x¢s¿©®a¥gº$œÑ`¹õ}ŸæÛ‘ëŒÝ°ÏÞÇoeüÏ\ ö›lVG®3vÃ?{½—ó=p3óîš$]N«‘شēҋÏvo³üÛb²=q›¶ûØí쿙둾ÏómŠÈõÆnØgïc·²þg®|Z7'·jÐŽ ŒQ`¹ë-ö›lVG®3vÃ?{½—ó=p27Ùþm±Y¸ÍÛ ýìvö_ÌõÀÏ’1).Üû浬f3(RyX.z+}ŸæÛ‘ëŒÝ°ÏÞÇoeüÏ\ ö›lVG®3vÃ?{½—ó=p3ÈmÈ=c8$cÒ‹α¾ÏómŠÈõÆnØgïc·²þg®Fû?Ͷ+#×»aŸ½ŽÞËùž¸åŠaGæE*žÝ8¢Ás¨o³üÛb²=q›¶ûØí쿙둾ÏómŠÈõÆnØgïc·²þg®yÅb@ç€{R¨äÑ`¹Ñ7Ùþm±Y¸ÍÛ ýìvö_ÌõÀÈßgù¶Ådzã7l3÷±ÛÙ3×8$ ¸ïÒ e;±œwÅ +}ŸæÛ‘ëŒÝ°ÏÞÇoeüÏ\ ö›lVG®3vÃ?{½—ó=p3ɼ;É1‘Ÿj‰šHÇÌ¿• ‹}ŸæÛ‘ëŒÝ°ÏÞÇoeüÏ\ ö›lVG®3vÃ?{½—ó=p3ÅÅpC`ƒW|á·“E‚çNßgù¶Ådzã7l3÷±ÛÙ3×#}ŸæÛ‘ëŒÝ°ÏÞÇoeüÏ\ òîêFzÍ5Y[Œ€=h°\ê›ìÿ6ج\fí†~ö;{/æzàdo³üÛb²=q›¶ûØíì¿™ëžc#i$ÔHG Æ‹α¾ÏómŠÈõÆnØgïc·²þg®Fû?Ͷ+#×»aŸ½ŽÞËùž¸ä œõÍZI—×ðõ¢Ás¥o³üÛb²=q›¶ûØí쿙둾ÏómŠÈõÆnØgïc·²þg®yŸ8(È$ÔRË#ãjÑ`¹Õ·Ùþm±Y¸ÍÛ ýìvö_ÌõÀÈßgù¶Ådzã7l3÷±ÛÙ3×<Šá°{S $ŸJ,;&û?Ͷ+#×»aŸ½ŽÞËùž¸ìÿ6ج\fí†~ö;{/æzàgˆhÉà·J_#pûÇX.vÍö›lVG®3vÃ?{½—ó=p27Ùþm±Y¸ÍÛ ýìvö_ÌõÀÏ ¶ É‚zñNû$jç#"‹Îá¾ÏómŠÈõÆnØgïc·²þg®Fû?Ͷ+#×»aŸ½ŽÞËùž¸â|•^ƒÚ˜W-ÈÅ Ë}ŸæÛ‘ëŒÝ°ÏÞÇoeüÏ\ ö›lVG®3vÃ?{½—ó=p3ÅÇv A;6Óü¨°\ïìÿ6ج\fí†~ö;{/æzàdo³üÛb²=q›¶ûØíì¿™ëŸ0xó &ªÞ•N;â‹ÏYo³üÛb²=q›¶ûØí쿙둾ÏómŠÈõÆnØgïc·²þg®|ŽÒu,q\T“UúQ`¹ë ö›lVG®3vÃ?{½—ó=p27Ùþm±Y¸ÍÛ ýìvö_ÌõÀφÝF gÚ³^7GçœÑ`¹ô#}ŸæÛ‘ëŒÝ°ÏÞÇoeüÏ\ ö›lVG®3vÃ?{½—ó=p3ó—•’HÎsÒ§S*gŠ,>†o³üÛb²=q›¶ûØí쿙둾ÏómŠÈõÆnØgïc·²þg®~†åÑðÄñÞ´g¼ß‚Kv¢ÁsÛÛìÿ6ج\fí†~ö;{/æzàdo³üÛb²=q›¶ûØíì¿™ëŸ Ó““žõ9³VlþX.{k}ŸæÛ‘ëŒÝ°ÏÞÇoeüÏ\ ö›lVG®3vÃ?{½—ó=p3âæ×7´F9qÓ4X.{k}ŸæÛ‘ëŒÝ°ÏÞÇoeüÏ\ ö›lVG®3vÃ?{½—ó=p3âþ\‘HpN XK‰TOãE‚ç°7Ùþm±Y¸ÍÛ ýìvö_ÌõÀÈßgù¶Ådzã7l3÷±ÛÙ3×>MËHv·J«¨ ýºÑ`¹ìR=¬jÌRÄ(Î ^0ÅŒñÇð~g®ik‘Ät-E’$Uû+2:;0`wc’1ÐÁ=~„øÎƒ:R$à3îãð&½Šõ⓸m½tÈÆvõù[¾=ýO^ƒ99óþó“ÊæÞÍ{SÎß‚<†ß縈z ìm6ÇÒ¸Ý//r3]„¿¹}Åj`I 9½«3ÄV¢[?9 Vµª$žzg5Vèùöï ^ â€8‹k’íô­¦“Í…Y°@®_P¬.sZ–7AÕTž kÁ0…”€q[v·a”ñÖ°HÂŒw©mnŒr={s@*æÎ3ײm=ù¨ ¹ÚIçÞ‘œA  ýM×Ê#88¬;Eă-ÆkWUFÇ¥dBŒ¥wph²´a±ztíT5IAmµfÁ‚Û)`zV}ü§nÔ¶k„f<ÔQÆàwç½KÛjÄTv$›¬õ  •AôÀ¬I›Ì»ÆzšÝœ•·f8àV¾÷Ô@Á{ÿ"ïý±ʵtïø÷_¥e^ÿÈ»ÿlGò­];þ=×éI »ESV^±ÿÍô­JËÖ?ãÙ¾”NÓþE¸ÿëÝ¿­y*ÆúW®X£IáèQFY  ~k‰ƒÁš´o¹–ô’ÊЄŸçVã!W“ÐVŸü#Z——·ÊLÿ¾(Õ6àÇsýñLF|nq‘R‚Yz º¾Ô‚àÆŸƒŠUðö¦;›Åe9ÉéÒ ™ö¡ÖÑðÞ¨X‘ßb¢ŸÂºœ¨B¤`û¸ *òo™Û“ÍGhB=ÿJé¥ð&°á° çÖJ’ÇÁ½³fD€öd  9äX¡#§Äê÷þYr#¥zÅç‚õ;ˆÊ¢D Þ¹ ï„ º‘ˆ’Ì)õ˜ÿ…y=ÅËÌܓɪë’µ¾•ëqüÖ—šÑ›óÔÿ…iZü*Ö-ˆÀ´ãÒ_þµy-—‡®î[æB£ÔÖýŸ…#Œ†•‰>Õééà ``²Ûþõªoø@õ<ˆ¿ (‡·±Š%P‘ô«M`gËØ/uE9Ûÿ¶•/ü!š°\‡þþP3ilª7ÑÛ[@±d‘Ó©4£ÁºÈ<,÷ò­Åá}]!ØË>ÒPÜP¬…ýj¤`0yô®‡þ=L’Z8ü SG„50ÙÙýö(«)t5~ †R9ô­/øE5"9Hÿï±O>Ô±ÄiŸ÷ÅR’èygwó®S\}èǮѼ1ª(;’?ûìW7®éPÄÛ£þ(Ò-Ûþ%V«»­”§ºò½³ïèzõÁòyø þëíÿ«UÝÖÊSÝy^Ù÷ô=zŒàùEáRCbÆû¤œ žGùIÍTµëÍZlLEGV˜àJ BœŠœ .1ùUY›thX›vI©€\ |Q÷ÖGN”¾w7T§àS€?\Sá;‰õ ä^æ©0f,Ý€õ«Ò+»^• ñ°zZ«dù^•¦˜dÖ>ž¥—=kqce^NqÍ0GÆ*\aGj„¹Èuô©˜úÐYFeÅL?v3ÚªÈê’dš@$¸ .q@ ¹œ³|¼ÒÚXËq"–5~ÛOƒIùVˆÛàqž(°Á´}2}qN.'5]J™ˆ=hfœúàUyW“Í(ˇŠdƒ'¯Z–ßÉæ¯ÅÔßÜsŠ¥lÜÛ׊Ø)ˆ‡¥!Üñd0éTÙ¼¡ëVãeT Ö|Ó¯Q@·ò ç­hYG˜Ee_.nTÅnبò@Çn´Fäpp­aë/’:ô8­ÝF°aëYz„$ڰ£.åZÔ`sÏj£¢ÄvcOé[…Æyõ  ‰fúS>Á!bøÔ–.N:VÌûó@ñé’¦7µGá¯n½\xNá¶õÓ#Û×ånø÷õ=z äùŒ6jºÄ3€r7"+Ô.£Ýáy¸Æí6%Ý·ý–ïS× ÎO?ü¿~‹óg_ü¯ñ?ÉC£!k•#§zë/ÉX™áï Nq ¹Œ“Ø©®ž_ÜÜí&êm¤×AÈcZ1û0ã?J‚C™Ï®ª \»|øHú¯'ƒ.d“ÚâØ4åÞ-¶S(u^Ýk›°â—kôŠö=GáµÖ þÒ‰01þ¬ŸëY ðnåœ7öÌ@HøÐ ¬ÂX>ð§²Ã£Úº‹…—–ä«ÄqÛÉ?ãW“áÝÊg„G?ôÌÐ'muÆÓÁ?¿ }k£ÿ…suæoŒ#ÛË?ãV#ðÒøþ„ÿÀ qWÿ2w¬ÆBª29í^'€ndÿ—ØïƒUßáÅËãþ&ûfÆ€9Ý:]Ö 1ª7'uÓһko‡÷Vàí›þE5þ\¹'íðóþÁ 8¶Ëb ëK¦‚Óñë]‹ü=¸hÂ}º!ï°Óí<qjsöØ›þEsº“²[ƒÒ±ìT›Œâ½ëÁW)·í±/üš‚ÛáýÅ»îûtLÜ"€:‹ßùíˆþU«§Ǻý+3QC„ñ¶2±8ö§§Ǻý)!—h¢Šb ÎÕ#/éZ4É#0h‹MfïO‚;o²†®ÐAëGü$÷óçú×M&—œ•Ïìxº(°çü$÷óçúÑÿ =ßüùþµÑÿcÃýÑGö­ð“ÝÿÏŸë]ö­ð“ÝÿÏŸë]ö­ð“ÝÿÏŸë]ö­ð“ÝÿÏŸë]ö­ð“ÝÿÏŸë]ö9Ï–§Ëý¨J|H ô¬ë¡˜H保¼ ÅP¼%AäÐ銱çOsr!RÄÕ¦FXŸ ª¬ïw&[§\P}õÛÏ!ÇÝ0+HšyÎTýkníUX…˜"UˆÉŽ{PDðùpì=Ç¥G¦Aö‹Õ;A«O·!‡Ì}«KÃi1m˜#Ú€6<€áTT?Ú»*öàUËèšH@SŒóU-´¶ÝÍ>g9<æ¶cˆ$še½²Æ `TŽ !PÜ〠sÚœ»îØ}«oBuŠ0OzæâI.î PNO5ÖÙÚǸÝÔÖ€6’Uuбs‚{Ö™­È`x­[)„ß?^ô°˜ céA<ã¿^´Ä8Lö£#vyæ€Ço^qüéŠùo\Ò9$zþ4‘¸ Ð)c"ŒÓ]‚JŸ‚F9¨\òGá@à I–Ç=Æhf p`xëOŽKq@K„?ç§™*“;F1Pœù‡ZŠàXãJB|‡Ïj·&Kÿõªöå¶'P¿{0 Ïo¶!UUùG²ôÕß!úVÂņÉïÍIRØÇéZÑ`(ÅfÀ@nƒŠÐ ~t`zä9¨Îvc¹æœœzôÀ  ß{€y*9W ×ß´öSæuâ‰1“œÐA7B0x§ù$ ¹ã<ÔÂ2Ì@-J£Î(´«²3ëëT£¤'<Ž•~á›g'FC°  J>_^õVxÕÇ{U¿'zÔªò{ÐQÏŸy·$ñŸ¥]–u@rN+öíNH<öâ€(ݸu+T­ÜõÆzzÓžpòrsI Ä„ ó@²99ÀªÚä&ò  jíþ.jE‘ºÀ²·’2ÊËž+rÂT!–¦DBÜŽjÂ퉓øP%ôy—ŠÀ¿M²ƒÉ®Šé¼É?ZÆÔc&Eï@!”BNîí[†BGST%· 'ð¦šÚ®y  æÊ+‡$E> m\üÄÕ KöˆÂ¬ Œóo>”·¢±îd ¨Læ®ÃƒÅbê–ðuÀ ••”vÏJÕ´¸¾+O™e‡iŽõiKBÙíõ …X²ã={Uk© Æj¥½îOÍœS®˜Q]!ÉlëóÍ?*?¶uù柕vÙ°ÿtQý›÷EqÿÛ:ÇüóOÊícþy§å]‡öl?ÝfÃýÑ@öαÿ<Óò£ûgXÿžiùWaý›÷EÙ°ÿtPý³¬Ï4ü¨þÙÖ?çš~UØfÃýÑGöl?ÝÇÿlëóÍ?*?¶uù柕vÙ°ÿtQý›÷EqÿÛ:ÇüóOÊícþy§å]‡öl?ÝfÃýÑ@öαÿ<Óò£ûgXÿžiùWaý›÷EÙ°ÿtPý³¬Ï4ü¨þÙÖ?çš~UØfÃýÑGöl?ÝʥΧ¨FÐM±QÆËšël¤*¥ c…aT(À QEQEQEQEQEQEQEQEQEQEQEQEQEQEÿp×â¯õO]ìÿp×â¯õO@víÿ«UÝÖÊSÝy^Ù÷ô=zŒàù#Ü© žkÖíÛþ%V«»­”§ºò½³ïèzõÁñ ’Hä<ñI š—Ċ8æg0h€=j’]©µ!8¨â$/ËÖ˜€sÏ8ª7w%\FO»`1Ÿ­1CK $ó@§ÌU Éîk^4UU­P·¶T;‰Î}êúF}(W@T‹ÃÒ¦9eÆ(T$žzÐq’?J%`±ÔÂ"[ùSnQ0Wƒ@2 £œÔñØ–ê8úQnŸ0V¼H¸§j« š qmƒ)ÏNÔ²0N9æ‘™Àè(Œ–ÿ½lSÜ Ç5~@ªKÏf2OÇjx]ÒŒžõ§ lŒ±ü*¥´½éZ±P uë@¥•’`9'´±Ü|ÇqëQ14³§4¨bç@d.ùj±pûÙ¨W.Õ*6Îã­>åÈ_þ½PžbͰub§ºŸœÕ[hÚY‹”"DÇ^jÜk…–eûª1Í*&}(/UE.ƒV5Ê4'rV¥ãù—›j½Ò€„3Ö€e||¼óL½˜ 9úÖ,ûífV…'ƒSÞ\ -•†I44Y¹*Jºð˜Ð…õ5‹#ÉSZ,N?çdMòò:S$Æ?Ùu×s sU.W ªjÅ™D·8>µ»§Ù›gö#Ò±nˆ‚HÉëšèa»Cj¸êGZ»˸g «‹*Áö¬F¹^yÅTkÙbÊÆK@:–¨–ЕxŒ\Ú‰¯çËs×Úœñ³)’å‰=«š[o$(ЦŸd(P9õ­·8bÏϦj­Éì V’ýÒGNô›væ N} [Ò.9 ÕR@">æ²ø Â6Ý©s€=Z­ ƒ`úêaÉàûP˜ü¾Ýh^£ƒÅ3 uïOYN1@ ¿äçµlžüR†Üy¨¤çŽEH¡`Ž{š“ Å$`ŽHæÃƒÓÚ€!œž*5É´é9')Ñ&9ë@š"œJ†îöÄÏZ±7©É§Æ¥Ç^´—¥[²—âµ¶’vŒT‰jS8#Ü P„6sÇ­%¼D603Z T'8÷ÍTˆ‘'j¸IÙÐcÚ€N7qFpçÖ‘9È#zSdÞ1Ž{Ðò2Sô¤|Ò•pŠ .XûR9V‚ò:P-•aƒP‰XãƒÇZ–FÚ§žæ¢ˆþï,zžô×n1ŠÍ.cŸZRÈ ÀÇë=˜‘@rå ¨_äC“ÍY2¨$Ž+æì¼…T眚ŽîRHLü¿ZÎdrFrjYÉ-׊DäÛ½gËn¹È@Å7®r:U÷tyvÍ4 ç¥c›æ…°ý*ü‚²àYº„JÙ`k-$to“`@Î+*Ò0.\{ÐÔ%`¶ôª²;;Í=²È=½i±Äćë@li8^j9¡ ãkJ8r˜_Ï5™|®§ÊÜI>ôƒwž†R:t°´©oÇŠÒ–ÜÂö¦µ¨[SíÏZ©nÜlÓ£y¥±Ò…u ±G&›å²ºœ¹  ²YKs‘O°kM´[8‹ÈFM <‚¡vŒc4ÝÒLʼãÒ€.EóÆÞséZ’f4ǵV°·e`OZšìˆòÎxèWrfzúU­-Y[#?ZÉžo´Ü³gŒñ[Úv#‡'®(fȓҮ$á‡QÍsrê+ ‘œŸjŠ×W-pCÐzÐZX`c­*¶ÓŒÖl7ÑÉŒ6jê8p1ÍYC»¯Z 3 œþ4›Žõ,13Ϧ(€¸“;«N%,¹85šª|âs‘õ«ÈÄ.ÅKŒ6çJTŒ*<³ ƒRF¤òO^9 .Àz”Ù6ìãŽÙ© åzŒMCÐ’ÇŠ­3 ïëP‚¡'½:WO˜•êh}  s:©$p*¼q£1bzT÷Šˆ3À«5.Bdû怨Î!€í'qàVu¯+½ºç©¨µ ¼ÙÔvÍZxp(Sæ$ŸÆ²î¯š c%zÛ»xâÞ8®rÜ gfÇã¥2ÖrnAòk^`²Eœçµdjvì$F@~µOðÇ¥fÝÆŸ¥dÈ2dt®‚îf%F­a]Fw7­HïÄ29Å$èë÷±ìi¶‰ä :zæµgÒÚ%2NEAod7òsVn£Há˜É9ª w%«ílâ­E)¹[’´r8…½·=qž*•´~eÉr:Õbúoݪ }¬f8zrOé@\ƒåUlqڮάÁT‚*œçhÏLP€ÈÅRT"f#ïf®+îÀsUcC$Œs@qÃçFz>Ç&p&¬X¡dá{óZ°mÜFswvnJj„·‘O8滉!ò¤‘\~¹mä*¸ñ@ôVó[ŠõWþ)Çm½tøFvõá»ãßÔõè3“äþc÷Oùâ½bUÿŠu›o]>½xnø÷õ=z äóÿË÷è¿6uÿÌ*ÿü‘†¿Ô§Ò»(¾è®7Ã_êSé]”_tWAÈ>Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( §û†¸/ªzïgû†¸/ªzÛ·oø•Z®î¶RœnëÊöÏ¿¡ëÔgÈÌ Àë^¹nßñ*µ]Ýl¥8ÝוíŸCרΓÜ](o—“I ™—&xÛrç5µÄ€ ù-R²´Äg¥Y‚(ÃsŒÓøÌÒrAÇaS• eÎ1Í,×pÀ¸\g•%ëÊØæ€4Ä1¡9æªK«¬l Õ6ŠiF"šš\Îy€-M¬Ë(Ú§BKÛ’xf5©†HÝÆkA4x‘G±  Ko´Ï÷™­«KVSûÆ$ýju†(Ø(P=ê}¤dç§½IÒ¸=*´Œ¡ˆšcHÁ¶óÍ l6Oó Û­9PÈÞ”*3¿¯5}cL@ Š%HòzŠX31íUÍÇï;’¼@<òÇ ŠtC““íL_’lzŠ˜¨@PÊ þB¦H†ÂÝñQÇ‚s€}jgm°(¤²í™ªaZiuË‹‚Ólv¬Û.ÖRßZ¢Du»šM¡¤9©_è*²±F'§4Ù‡ï}1Mšà4 ¹=*+·Û3~Õ@NLLz¯§M‹×ý+p¸+Ö¹TÁv_·S[°Ý$јP\®W¿<Ö`È”‘ß½kHAÇ5Ÿu_Š‘ñšº…NHªpÈ‘ 'Œu¢[Üüª   3L!œp+= yd3I’OJ•!’wV|àU– qþ4rJ¶ÝØ«\϶ßn쟭ZÔa<•<šÃt‘Ž $Э½ÇµoE·^ÜÖ%´- à°äô­˜¥Úzf€51´!1Î=)c³U9¥VŽéAê3NmB$ã9=(Z0džœÖ6µx¸dCÉ⢓YRDjpƳ^)'º9$ûÐ6Ñß­ko•ÀŽ!€3O´± Q€;ŸZÜKDÚ£Ÿ_JÄyÚK““SE¤® ƒózÖÃÚ…‹9¤ˆäm"€0eI,È#8Íl麇š 3|ÔÛèXXcœqXs´7`zï#sý*t å³ùVd цö©á¸ :ñ@Šô'Šav “ÀÅær}3K ù6÷ Û·<Õ‚>e<â«Ä¤׊´0xÅ!ç9¤U”çpxüª%s““ŠJô”0žŸJƒÎUš2ÍÔ}hE`Òt«q¯Ê3Û¾*‚E‰ç¦œ(Æ =“ZwEíŠcãÓA á¨mç8:ÕyäõàŠRI`T€>µ{p±a˜çšK«¨ Èb1YßÚñ+§ñôªò±¾“Ÿ»H–1y9ë@]ê,ãŽ*˜¼B¥æ´îtøöœuÅ`ÜX8aï@²d†ô5§m8eZçg‹).jí…Ðp4±{‘ ç‚+Ÿ­n¶€J÷â·ØÎ{ÕWUiA`3é@É ·ô­;[uŠ3Å6£' Õ¶aD­fܪòÍs¶Ð›Fw]%Ó|¬pkš¸„¼Ùj4¦Ìqïé].àÊ\ŠÈ$[o\îÇAtð6Ù9Q@j°&ïJ–Àˆ·µE{p³°U<|$DŒAí@„Ír8¦˜XÏJ§aw9ïWh…²}…Hî;f¨\Î1ÐñE¬­!e©Î¸ëÖ€+ÎþT8Š[WÝÎy­$üÇ–jÅ´áb=(Ý«3¨ÃøÖÔ ÄŽZۉ¶ý mC‘^´shëž•…®[‰!=ëbDfQÍTÔ¢&Ôý(žÑmúÿ*õyWþ)Öm½tøFvõá»ãßÔõè3“äÚj•ÔÐgŽsùõ™þ)Öm½tøFvõá»ãßÔõè3“Ïÿ/ߢüÙ×ÿ0«üOòD~ÿRŸJì¢û¢¸ß ©O¥vQ}Ñ] ú(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€"Ÿîà¼Uþ©ë½Ÿîà¼Uþ©ènÝ¿âUj»ºÙJq»¯+Û>þ‡¯Qœ#†ØoF÷¯\·oø•Z®î¶RœnëÊöÏ¿¡ëÔgËL89cI Í4h¥#_j¥™Ùò óZÉl *êZª‘òÓ‰<­–ÝZvšR \ýkAvªàbˆÜc§z ¼qQ”UÎÑúT„ù“õ©a€@•±• «g¯Ö¬JÄ sMH˜°'¡  #R»}ªË¹ãÐÔ2ŒfªÍpÅ€'Ú€=ËëZ1Ç¥A§E¸—ný+E”¢ñ@¦}³)=*v`ÇÚ¢yq,9¤•›¿…\ˆ"‚Aý)’Ì'ÛÖ›•E'ô5Vi7"¨éÖ€ †?2ROLÖˆ‰‹)J­ìUøÜSØPN$ ;S& ³rÛp­fj×J‘žžô—ªÎ?Õ£rh……Aô¬ÛrÓÝsÀ=ëcx9Ç@1@¤·YAª–ÒN Àâ¶â@ǯ\Ù‰NÅg¦¤XmbAîMM4êaÈoÖ¨\Ù…þ_t‘DTç~{™8ÎÞÕ­obÔ@f Z‹(ôÇ4Ùaæ©7$1éRÜI¼å@ämÊŸÃBô:n®šå™a'Ú¸·•ãóüTÚÛñØÒ‰š ž*­ÀKpÌ@ÀÏ5Bæñ¦›l\ó@M•àqïVZeÚw¥sö2:.yÏ­X{™I Ž(a.÷1—æk“–îHŸ*HïSÛë˜<ŠèÝÎ{~DTQ¾âxϵW‚a.I#Ò¬!U'š•zœ^jlñÍB‹òïL¹¸H!Üzö  !Óp㊟íq Áa’1Ö°!¼iß ÁïW–ÿ²h\\FTmaœT]ŸJƤ„“ÞµQuçG½k¾¡ž@ÔV5Üíuså‚HúÑu;$Ôš`ÅØgÒ€.¤^\`¾´ÙfKt$°ãš.d)–ÝAYwåFy Ça@Pó"Ý·Ôh¡†qÅd[Þ‚L/ØñZÖÉÕí¢%GÍÖ¹Èg{yÁì v—è<¢qÉ®.õvNxÀÍtpêH†Z“r7;¹úW7k6Â3µ³ DàØ"€4í˜/séK=Ð~•D’¼©öªO9óÀ-ï@n&7¬È"’æà¼Ož_´H3·¹õ­Í.ÈCšËÛŽhH­ÆÅB+7QÓ%Ö¶7Iíõª:ŒäFTHàP4–ìÎqдbÛ„MiÚÀ‚ °ù5 !yÙÎp(h”C®3T¦ifcnzÕÈà7/‚sÙÔ(cœúÐ6vþB’zšK„ùr)è[fìMVøïš©0c´Ù°ˆ}œñÍgΣp‡ZÕÓHò¹uÛ]°ÎÈÝÍ[¶N¥R¼B’yŠü*X¥Þ³Ò€4·75Ü™‰²xÅCæÊ§<Ó/¤XÐ=ŒGûLÉØgùW©H¿ñN³më§Â3·¯ ßþ§¯AœŸ9° tɯF‘âfÛ×O„go^¾=ýO^ƒ9<ÿòýú/Íó ¿Äÿ$Gá¯õ)ô®Ê/º+ð×ú”úWeÝÐr¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š()þá® Å_êž»Ùþá® Å_Ꞁ6íÛþ%V«»­”§ºò½³ïèzõÁó}¹Á¯H·oø•Z®î¶RœnëÊöÏ¿¡ëÔg€ÂŽ;RCbÛÄ¡”zÕ÷Š1ÏOjÎ „ô¦Üêª:iˆµ,cnEW;ˆük:M_#šÍŸQýÞ”¼×ñDya‘Uß_T%sRNò·š– 9“ÔГêòLØäf¤…š^µZcðv‘Ž•jÞÝ•<ó@ím0êHý*äøQŽqô¨ãl0À¢iU»f€TïéJc<Ò+dޏYTNzPY\lª»C¾Þ Mx dž”˾lã@‘(‰ŠYŸýu7–ÕIÊ«Š­2áò*œåGÒ™s>ï•~•=®$t –L§ŒSàŒ\â«0y'ÀèN:Ö˜M‘b€*–<Õ˜É ÇéTó´1ïššÞQ¤žhK»‡òùãú×-©NÒÈ“Î+ Ôd lœ×.ZrÌs@ »‘,mwƒ†"¬és™m‰ÉÈëÚ¸i¼°sƒZþ¹i-KH ›M4ŒsZRÅòûÖ.‘&ÙYIÀÍo“¹O4…,-æ:¡©Å”R¹8ëŠÝÊjä`¡Í?DæÓ‘ÓŠ¹, /nMP´“ɶ :š\äPÓy²ä‘S~MÇ€i–öÛ›¿©5-ìéøé@Óºý¤¦=êýº¯”p1Y²ù÷Nì¼g5½ Ê1@lËŽ8~4<‘ÚªŒîÀéïN¸ºò`ç®8  íP$n ’j[k‰ éYÒ¤·.‚Ek鱪FIš±³e³HÝOÝ>Ð92¶}i.$ÿE+êkKNOôPyàPv²¬"z{S4¥ìù ÔÖ•Ô "•oLVI·–Û"1•4¯rÇçÛŠ—D…×,sƒÚ K9.$ÜÀ“[PÆ-cUüè5Ú3tã½pѶû²{n®‡Ä7ÛmŒ`ò}뙲ViCb€7 øTNýkONµ,3Þ °²Þ#šèm-Ñ!8#uFF cô5 Ï…8íRܾѓÐ{UU$ã#š‡ÔïÍ»ˆÂÁüµ±"¨@­TxK’phš^ êûÖø%¹ÉõÍqˆ µþÖõ®ÂÖU{pÞԲݴdý*%v¹%œñéT¤2\Þí€yæµv€àw  -Ò4ÎÜdU´œÿeÉ*Â8o˜š“ÎdpéÖ€.KÎq×½dÜÁÃ0Îjô7"QÔgÒ‡Œ¸$ –ႄ9Æ+kFPÐ0Ï'¥fj*DNùjÞ‰r¥6ŒäЗ«™TŒÊ×$’(‹Óš×¼‰¤ŒŒɼ‚iÈ9 NÒyRó“’kºÓœ=¾Xr+þÆhäŒó]œ¥c*x  ¯ö˜Eq:”cÍ®Òõ—Ëǵr7ÊZRsÍ2Å늲 ÆÖ™gŸ$‚jGgTY$ž´†æETò]æžkFÓfq0 ûÕñ •”~ išifR@ǽt ”MƒN„cŒûUÓ*È£úgh«.ÏNµs™®‚þ•­y.ȉéY–i¾BÇÖ€/ÉÐ:Ð#òíˆ+Éjr†I¶ŸZ–ò,Ä VmÚ´ زÿ`¢€æÝ¬™cµF£ í@1Þ•? œïN‰718ÅX*ЏÀÏA@]Õ`}jÌå>*©\É»¨«(ʨxÁúP[ÆÞÀv©,#Ø vªÒ?8•ZV(˜SÏ­\š`©€y¬¶-%ÁïVÀûRZÁ¶á‹z„Zà‘õ©§ÂEµzšš\ ¶zT©™·ƒÖ€l޲†`:»+~çw­q¸À¨g—t@튭’ÄöÇZ$ƒÅDY·“Ò›4û#ÛÜÐ}RëÌùwf¹‹ë±mݱZWRr[qöÍq:ýéy|µ4y;\\³rrx®ÏÂ(¸œâ¹ XÌp+ºðÒü ñ@–¯å]ã=Mtq8 “ßšæî#hçÜ8­ +¿3µX‹Lù÷tnÅ0:Õ„\£ï©B)MÇ–ÃûÆ€6Ã,ryÇ5¨Ü4çhéÓ3Jò©äúÔQ[± µWÓÔ);±šÞƒˆ:V8P$;zf¶­ñö\㚇8sToÍp±Œb®·ßæ³÷“|3ÛÞ€5áµE„.qYí?‘)ŒuïRͪB9Y‚V–ä±ÎMi²kº´´ùÂ[Œž”‘Ûï°éÉ^ñòœñÚ€4˜¬œ“Md·Z¨¬ÈÇ“Çjq™°F2hØ(ƒ°k+PÔ¸¨o/š<ƒÒ¹ùny99ôíup;‚x­ ;#¦îsUVЄãsÍjiÀ» òqÖ€7ôô„žŸÊ¥¹³Fá‹R.Øàù»Õ(n Ì„1àt å¶³3pÝ2+9ÈŽ=ѶH9«ùxm Nñ\­•܆å”d#’h«±ºûCí'‘WÈýçÿ^¹½>R·=zšê O6@OašçuXÌWAóúÕë;üYšƒÄ%@8'zË·sä3Šêô•$<¤ò}MiÉ›{O0òǧ5‡e+GŒžzÕÍRåÍœAIÊÐ:¼Øf9ÏZ¿CfLsYšt’LÁ¥'½ a ½ZÄ ä^mä5»6‚y$q\Üóù—Y¡ë[öŒL*z`PKõS¸ç¥\®Ù@Ç5µx@r[¡ËÜÍ»<÷ Í\:ôëQT6{ŠÇ¶Õ¢QßlßoZ¹µ9$íLù'Tä¼m¼Uf¸wÇ¥rîÊ©ük a¾^zÖ´çjì+·¼„¯®hCÉPZÜÓìw°f}MT³±>S;O5©¥Ü6ï+Ó Í3PÓ‚©‘Gj‹O1‚¿jÚ¹ã#Ú²ôûb—gÐТ¤mÐT€lR§¢äójlB’xïŒPN ÅÆÑŒ“ÅK "+lÿ*8£ûMîÈ=áÜëtÇ"€#¶M¡¤={R^\GD 4Û©6D±/Þöªëc$ëæHOW¶v`IéíSHp¿-H‘ùqœjŠRq@ K“Ž•eAcÓŠŠBç¿j¹%ß΀2¯[ý!G8­{Y1ÀéÞ°oOúO>µ¯lv¡IäPî þtÐ^G$ñNå ëPn;°N=è3UU»G5‰#(9®žâ%d®0+”º9»ÛÔv  &àɨ"öçùõ©þ)Öm½tøFvõá»ãßÔõè3“äºD/Qˆ#¯ò5ëR/üSÌÛzéðŒíëÃwÇ¿©ëÐg'Ÿþ_¿Eù³¯þaWøŸäˆü5þ¥>•ÙE÷Eq¾ÿRŸJì¢û¢ºAôQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEE?Ü5Áx«ýS×{?Ü5Áx«ýSÐÝ»ĪÕwu²”ãw^W¶}ý^£8>gö ÚôËvÿ‰Uªîëe)Æî¼¯lûú½Fpx°ªÏÓI ”¡´ÚµYTж"sÍ'–ƒÅ1˜Š®xÅBýy«³²ªt樱ÈÈý(¨™8ç*EµòjHTÐó©¨"€ñ/AÖ‘aRH=éàmëßšlÎI Œ 8àuëUf˜ë@•Ÿ'±¨%^;Pˆ9Í:IR1ÏO¥Gnp¤7zVO -ÐùÌäô«QçÔÔPœÞ®Å…U8÷æ€-‚§Î1UЯž}*BA&©³…‘ðh.q*z¹[!Î*ŒQïmíÞµSV;c©hz{ôFXØwâµ?åŸAëÐUöÚ wší·ž+>êcβï–ã¥ej72Gµ%Ž„ÂEiºzݶÓR Øüj;ë²N£Ò€*j±Ç°DŽ8£I€ùa±Ž*;Ö/<‘Ö®éG| @^Kvçµei÷*IÉ!³ÍnÞŒÀÊ:b¹ˆž 7@'4½xÑÍ V`GÖ¹Ù– ±.¨¨ÚI\™ãRYÙIpqÉ€¦ÆÍt‡×Å"¦O޵Ÿmf-£á~oZ&˜$u  }vE|€y'±¨áŽ3b>ðàæªj.ÒŒõ«1E"؆ÁÍlÛdB3¥]¿µy­¡åG"«é£B29­ÈÔ4xžô…§Ïå ²pA­o:K… œ¼R *3q¸ôúV½¼1F˜UµbO¦”u`9#šÓŽ3+ô«Ò ôÎ{U{™EÎ0(SŸjœu=ë”d] ò Åmj3—‘Žì/ÖªAgº/4q@Ú½¾$@JŽÕnÚe¸Àèjä ıU®´ÆR$„óí@ x¸¨$ gÖªµÅÌCkqëPIqq)àP2Ê_ËÝÆzúU›;Mçîæ¥²ÒåšPÏ]-¦ž#ÇËøÐ6öаÇ'Ú²n"’Òç(§­u«A¾õZâÑ&+׊Å]C|2œôæ¦ÓòÒEL4£»€1WàµX=2hŒò0*•óªÂÇ&®É×éY7¾œF¹ç­-ˆòbiÑžVíÈ©.ˆŽ…r HP%“$w  Q¦âÒ7<Õ§p!+ÇÒ¢µlÅŒr*yc?š€3寍š=ã©dÀRG=ê(Ø•>”7—æ-ÇZ°‘”äŠU}äëO—ä¹ô¨áLá¿:²89éT®FeJœŒsøRCšRÀtã4Øòª¬ù›b#õ¨ü¶ó1RIó@ ûJùc÷éY×EØÔó²F™V$ò“.ìñ@Hûc'¹®S]Ô hÁO8­{ûä†&ÉúW©ß©ˆç¯4E™ärí’)Cï;FH¤`R<~”AÝ 2Q†®ÃÁs$w;K}áŽkŽ’Ç­lør_.ý9ã4êð&SÚ´¤c¬iÌ’žkqrPsÚ€3nô¸Ø6уŒ×?sc$™Fq]|¹ÚJþŸ"\œÐ$ŒÒÝÇ»8Î+µ³+p½8®VòÜZß«Á=+¡ŠoÝ.}(iäŸJι£~çd°ÏJ†gÌl@çé@ñ;Æ}ªý‘mÜ÷¬3•'­iØŸ›“ÆhA÷db¥ƒƒ×ëLç ŽÞÕ*œ8í@ o›ŽÕ¢1YÄMŽÆµ ^N}¨<†Žôžy­¨Û(7ŸJ£y ½zõ¤´—|C'‘Ö€-§8¤pÒ¡ŒàzÒO&Ä,OAš©{xˆ›GÞ&©Ã™ŒQm77>Ù­¿)b·8ì(ž’=Þ`#8©t‰ÕXÆxô©!ŒË,€ æ©ÞÖã!qƒ@ò®alçŠÉ{u–2ãéZ p· }áÖ«Î6¨Úph´6¬D úÕû[x¢(÷ª tÑ· úÓ_QŽô~òu:þu{„lwâ‹‹¢P³µd0–ò`ª§…ji6íw¿zeWž•­o |Ñ‘‘OÑ­ µ«îÈô¨#ŸmÛ©ZdR­öÂ>V•gÊ*§hàÓ Bjr~PxéÚ€ qƒLùqŒ“Jy“hç½9‘p8æ€c¯ÍÔcÚ¬*ª¡oJ¯6Ï•R™Â©$Œ{ÕK(L“¼¬IQÞ¢¾mÓòsè*öÚǃ‚G­T#μè§böd‚=£¸ÅPŠb™aÇõ«+jf!å9nÔ_OÝóT³ÈK€pz²#FqÆj³¡w G€!•~OsÚª® ñô«³œ/Jª±Œ϶(Ô$)ÇÓ5 ?tzÔ¶ø?þª§¨¶éUsÇzŠç'±¦\FCoPjtB zÔæ!$%Hç4E$2`çÚ¬Œìãñ¬Û„’Î\…8Ï¥YK2Oáé@jéÜOlQ =ê9¥ß(,Ý+>çQäO^´³a!7AO|ŸÒ½=×þ)æm½tøFvõá»ãßÔõè3“äZ<Í& ™éƒü«×]âžfÛ×O„go^¾=ýO^ƒ9<ÿòýú/Íó ¿Äÿ$Eá¯õ)ô®Ê/º+ð×ú”úWeÝÐr¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š()þá® Å_êž»Ùþá® Å_Ꞁ6íÛþ%V«»­”§ºò½³ïèzõÁáàÊF2O×qnßñ*µ]Ýl¥8ÝוíŸCרΚÜê+ ‘ëÍ$6hÍ ÚIlëX×:ºBYTäÕ)57š2 U!o½üÆÏ¥1Þ^KtrÄãÒ‹{pìœç½K, ão­}:ÍHŽ=è]>ÐïÞÃÒ¶Ôíz dQª©Ê:s@§ù»U$`f´%;òµ‘òG ïéDé‡ÎxÅ!%‡}ÊxÀ  ç˰Py­í:¸%ºÖ=¬&k‘ŽÕÐFÅŒœPp¦¶LF*¼„³â¬EòB}…Ay÷ÀSÉ¥†O) ‚9¥‰ Ã’y’ÂV@"Ý!ϧzeÍÎbÁ⢑ Ìr V¸/å㜚¯)ÜqœÆ³¯ˆ8ëZ‹ $^ctú×/¬_€ìAàP»{ÆÕ=+ƒçŸ,xÏz›P¹7 ri¶Š»†ãÔЯ0;õꢱëWõGŒDì9¬ôõ ³Á9«ú3}3œÕt„Êæ´ôÛAªÄüÀÐw ÞC£dà×Io.èö®X®ëß®?JѱÔŒ#Ÿþ½mÊãmU\ÏãMY©!©‘d<Ð-RÙ¥xÊŽõ2ª ž‚¬^ ${U]ù9 3ªç=…U–år;RÍ:äçµcßNgʨ t  qL$¼'Þ·,Ø/Ó5…i—9f=kn28#4¤$TÈAúÕ0Ù#½X‡ïMZà:‘ÅkAʃYl¤/OƯZËò4nU ÓY–ïåÜ:6@­ß9ô™q‘p±4¡©ôªzœ˜] õô« .AäÖmûAé@°‡j#®^I²Õ°~•»«*€uªúŒã˯^ôºRî,MX¾±Yr›Ý) Ǹ÷­" c?Ò€9T‘ì¤ä}jò\Á6E]Ô,VU$(ÏZÄ:LäåÏ­Zž4åF@ëU%Tíi†èÎЭ¡¦ÇivòdçÜ‘@5‚9Ë·•¥¥é`8mœv¯Yi!¤5²°lP@ÅR¸ˆ[À[n8®i!i.]zèu‚ás×€)šuš” Ã$Ðz\Â50¸ý*KÍ.)ÐÈgéP_£[]+/ù­h%§Žhš6RZ¾Bóô©êU#Ÿ¥uKr `f¡“HŽVê€9y[ƒ€5¡§èŒçt£Šè¡Ò ‰AÇOZ¶"XÔv  ‘ÛùJ#ŒíQYZÈìr܃šÖººŽ#95|²ßd€vö ûL·ˆIéëYÍŠë’I©¬ek9ÊHNjÄq››½Ý³@6Êqœc"´@`}*¢¡]ŠJ´ …>üPY@qR qÀÈ_j{ýÌäs@’­ É¥u éìj"ðGN”íÌNë@q´uÅR–M¬ÜñSù„žžÂ²¯¦Â;š­}¢û ŽZ±©JÌ*~¸¤±ÄA¸$UrÍ5Ã8\ލÖ°«ÈKt¯«Ù ;9«Mi2}(¬€1Ö Á2c¸­@±äúU$|9'OZ¡!Ý6; jðqI39úõô§Ã–8#§4$d $šÌ-çÞdúիɼ¥+݆* rK‘ÍO´ù˜ô«Š1ØÔì¦*rp¹#ðõ  ·~Sœœ{VÄÂØ¶2mÍ"㟭sº¼Èª ’h6[©$sÉÁ¢ÞÆK‰3ƒŽ™«¶pFÈÆq[Ö°©Q´~§­¼Šã¨ýjôç_ø§™¶õÓáÛ׆ïS× ÎO‘Fb1]ïüSŶõÓáÛ׆ïS× ÎO?ü¿~‹óg_ü¯ñ?ÉxkýJ}+²‹îŠã|5þ¥>•ÙE÷Etƒè¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠŠ¸k‚ñWú§®ö¸k‚ñWú§  »vÿ‰Uªîëe)Æî¼¯lûú½Fp|nhd¸bI W²[·üJ­Ww[)N7uå{gßÐõê3ƒåBåAâ’)Åkµ4ÙX¡ =*ú Ã3N¶°3ʺ b!±±’vÜ·"€GòеI\ hå¿Zz©öýj#!,;w©'¿j`MÍ“õ …É©fÀ„’;S8 ô¥˜î‹€2ر#4’Ê¢<Mv بäu .?J¿¤¢ïÅiÿ9â©ié² ­_'÷x  2pøÏ^i$”í;ñQÎäJ3ÓéKß&OA@VÑíˆëNE,ìät¤I^„Sâ-õ>ôVWUÜØ VSfy7™ÏZuåÎ\ƽGŸ&Ù¤Î3Ò€"Õn–ÞÔ©#Àæ¼·Y½ß+„'®‡Äz³º”Ýœû× ,…ß&€Ô椆_)Ãuæ¡üéë󆉼ًúÒ =9¡£ñüªAEÜsŠÐÓ¢,ナé#²X¢Wa†<Ö^…™ v'ÖÜE¾*: šÇiåzãµ8Ú™^\TZB²ÆèÙäúV¯–YÈï@"Y­˜äŸpj{mMLœ’½]–"êM`ÞY¤.„‘šÞüÈÿ £-ÂÅ 9ç§Z­áòŠ1ä §ûË“û¹  SÍžLœóÚ¯-ˆUÉ'Ú®ÛY¬8$sëN»ùŠÁ¬W¡1Ö®1 Ý*¥Êƒ|ŒjyXnô  ªrŽ*ÌC‘ßéT£oº ]ƒ%ù  E]ÀœJ¯<‡‘ÍOùAÎsíOÄš­m!+ƒÁE2h<ÙsŠŠG1Hvsš»mó $ž(¤îÖñ|‰øŠÉD’{œ0''¿jéåˆd #·8 Ö*!þhœÒÈȦIò)ç­2à,â™n˜ˆ3éI.JüªxÀŽ™ÐO‚ /CG”ùWô©$äßéR¨#ñ …6õ>Qžâ…?ýjq"€155`w¯­]ÓÀ0©Å7S‡|9ÊÔwI± ph¦¶ÄLîG¥[Ò°Ð)cžØ¬‹˜ä¹¸f H'Ö·tÛVH7  ûØ{UÔ^9^¶°'¯½[vFqÍ1‹eGJ¥{x#ƒÏJŽî÷XðO¨íPÁfóÎh²Ç%Ì™`*Ö†Ú8¢µbb‡^zô©Ó’`\ibâbË×5rÊÃÈ`Z´£Û¸ü¼ŠI&Æ(¬ƒJ™Ž‚8¤|¶¨ÀN¸õ  [CÆiŽsÆ Ï8õ¥ÚÅGf…\–ö  ø@84Œ›rqC8YAü:RË1Ù×­5Îޏ¬Y{vž­e"6~ÀdÕ+(üÇi˜ñ@ të½H¢ÝÑcË~5ò‡¸'®*Õ¯Ú\$¥¤½Á~Õv8˜NN1RM A€£T¨1=3@&lœgT%8'œ ¶êYÎjÆH#ñ  .›"¬Â<´ÉÀ'¥@‘ùÏ^‚ŸxB[àP~¡'r»yã5§mXGò¬è!ó·\{Ö¬›þZ˜ ¯Æ™4Ÿ»#µ+}슂LœPWyyô®fr&»²GJé.²"f=…sð¦f,FNhÄl „·l¹ ŒV=´ Üî+Àï[Ð ­Å[lç××\ëÿùm½l!Û׆ïS× ÎO+~ën ìâŸ-·­„#;zðÝñïêzôÉçÿ—ïÑ~lëÿ˜Uþ'ù"/ ©O¥vQ}Ñ\o†¿Ô§Ò»(¾è®ƒ}Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@O÷ p^*ÿTõÞÏ÷ p^*ÿTô·nßñ*µ]Ýl¥8ÝוíŸCרÎ’È7 £<ñ^µnßñ*µ]Ýl¥8ÝוíŸCרÎZØ|»œRCd¬aÀæ´í¡G­N‘*G€4Ø 2ã°¦"Ä‹òsUCž‚­Îß&ÐUP@aÆM'^;ôÍ80< i¹=‡zP]ÔÉ[`£•óáéQK0wd•4“ˈǰ  ùçïIó%úT !g'¥¥@YË0éÒ€4-\€WmXweNœþF’&‹ƒ„ÈÅe]±2TisåñƒÏ&ž„É3dqž)ÓÛåIž´« +[‚:ÔWB(œdÒXœ[ Ý»Öf¡/›;mè(¨ËÍדPj÷E©@qVÂÐ?C×5Ëø–ÿ²†öâ€8Ý^饜€ÜVW5$Ò™$,{Ôtu§¢Œç4ÏήÚB“u8  åp:œTñÆòF9ÍIwhaŽV8/W®h¨Ðm#:×UÇŸlÕ=> # F8­”÷J)†áÁ9àÐJ95^õò¨ïVØ€¾jµ¤b{‘žƒ­^´¶ l3Þ³å—ì7<ž ®€Ç…â°uK:l{b€,$ë(Þ§õ¥8*Hêk)Kc´ýÞµ©‡„€{ÐW6²=«·aÚ²-­Í‘[r]©µxwe½f£Z|AcaW ” ±#waY¥×~3È÷©áúb€.,ûä ]ó¯üSå¶õ°„go^¾=ýO^ƒ9>rŒî8ûœçò5èοñO–ÛÖ½xnø÷õ=z äóÿË÷è¿6uÿÌ*ÿü‘†¿Ô§Ò»(¾è®7Ã_êSé]”_tWAÈ>Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( §û†¸/ªzïgû†¸/ªzÛ·oø•Z®î¶RœnëÊöÏ¿¡ëÔg–ò¶ÇÀ溛vÿ‰Uªîëe)Æî¼¯lûú½Fpy¹8\.x¤†Êl¤*F;S|ÁƒLDre› qZL ƒJÃqö¤ïã8 lã5¨]#Ú§$ôrîàEsX…>Ñ)v$Ðí™ÉÜÇž´ë¦8Àô¤Œì~œ lï™y  j›œ{šèm#0BêEdÛGæÝ tÍn¼Nàô9ÂÁÉü*¥Ä8ãšdŽDC“š¦ŒÏ&[·=hq\qÏÖ‰G`:ŠL S$”…äw 2­ïT`PîK:ô©æ;ÿúÔñ—nNy4CX¹ö¤‚FynµxÒÈFîjìè…Àäw«läž‚«J›×Š[iw•Á« ÀêkÝÚÊ2x5µƒ©é@X‚çò¦·ñ§;pqô5«õ ¯LŠœ 2jÆF0.9ŒP² ÈoÔT›ˆÝ3QŒyúÓÏ+ß(Þs’}éÐHY‰J®äç8=) ¤‡$ý(ëJ«Ô{Ó·¼MT•ÆÜ‘T&½b¥Sñ4vóPDPsô¬•InŸ'$f¤†#3eÅkZŠë 4‡·âkn ÐçÖ¨GÉ v«@õã­YÛ–ë“I»Ñ(Àüj=ù|ç¥:\±ÎF=E†‘·voÖžÇ̓@Œd>”É#ã9¦‰ž‚0–ã·$àæ£HÎY‰éS;|ÄwÅ&ì'׊`Ì=}©²3+vÅ"àÉÉàšŽâl1œÐdbÄc½V½lªÆ,jl…ˆ³G5Ÿ ¬·Lì:sš´Ñ,ÉïZ£hûQº“Vn_ÏuzcŸ#ùnU2H  ‘·]®$kRyHÀëTl-˜8•ùç5rSžG¯­SºRë´ ­Ê0j̤O¥TÎsõ  rcbç­ShäÆ;Õ—?ºž)ÐDq¹J¡©â(•G§4šZy±â›x|ùO=*Õ”cÊÔh±è+>UÌã=kAœr=j…ÑÉ 8Á g ÊÀžEe®¡äoûU««‘±é‘Šå®g2¾w  /mÛý©ërwø¬¸­åy¨­E³*ŒsŠts&ó¸þµr\–*0>µ¾™#H20½]hRJŽ´ËxÏÚFëÏò5é,¿ñO–ÛÖ½xnø÷õ=z äù|WÔ­¡-ËnãþkÔâŸ-·­„#;zðÝñïêzôÉçÿ—ïÑ~lëÿ˜Uþ'ù"/ ©O¥vQ}Ñ\o†¿Ô§Ò»(¾è®ƒ}Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@O÷ p^*ÿTõÞÏ÷ p^*ÿTô·nßñ*µ]Ýl¥8ÝוíŸCרÎ0î6’IçšéíÛþ%V«»­”§ºò½³ïèzõÁã]Á´Ë¶@zôâ€*®~PNO½C<Ù“e\ÏÊFi‰âs×Ú€n…=4𥨶³`OQW ¬Äûd× â [ïü©Ú€9oÞ&ò÷g<šÀÆj[‰šy™Û<š‹?ZëKŒzÒ ûÓ²QÓéñ—s…RM(@Wž+gD²K‰Läu£áˆ¤L–O®k¤d:”§Alb‹nÌzTöåb˜n\ýhô#)Uµ«•·±c‘*Ú2ãxõÇøŠøÏ8I<ã6€|䕨u殬!ÕÆ9©´‹Qo§)Ç$g59¸ç­Q¶¸žÒgÉã?¥j¥úÊ£8V÷¨^Í$ÎæÎj”öíù 8æ€7¢`W æ«\¶ÖúúÖUµô°8ˆ©î¯Hw/~ÔÛË–'ÊN§Ò¥‡OÛvûÇšJ‡Ï›Ìq»»"  cô  ‹¬-¾1Ã¥d3|Ãߊݼ å7øW9$ƒ£œâ€5t÷Ãã𭘾c·ð®ZÆ|Í‚MtöCpœÐŒ5[é´ñPFÁÅLÙ8Áüh·pã ¼»àÔî—Žj”±²¶áÛšÖÎG\ÓD™>˜íU œ¸žœT  4RõJ?˜ ^²›Ì@Ù¤žÑa«>Òo*à¡$ Ðñ@§)%3žzTjá›§èiò0EÉ ¨'žÞµXʱ9Ý‚j)õŠQy>ÕEVk©3ÏÖ€,M4“¶Õ •4Ÿ géÖ¯“ËŸ¥JÛ˜c ë@ ¤rlEÏj»Ü䊪*Äw«XR  QN:ÏLÔæFÀªK…àš˜>;õ  šãåÏqK›óÓÖ *XŽ:÷§ÆëÖ€'!CúÔŠ¬æïUƒñ÷±L‘‡ŽÔaï3Ð ŠM¸àv¨ –ëõ©AÉ÷í@çæŽ9¤}Û3À‘Áb=;Ó¥l&  ¦M‡·>õå,IíÓëHß<…Aê)ì5äv  ë‹¶rQ{žjÊİZ=qš­&k¢àp KtæICèh8ŽÈd™¿ †Æ6]ì½Ny©µ1Ú*Ré$ùdžÆ€4HÄ{*Ì’â@Åwdz»u&Õ#=+‹)È8Ͻ,Ò±^zSC  S$bÃ' §ªg¹  1¡# Ššk˜ííX S"ÃòvŒzÖ;ÏöÉð:t Ä„Æò7äSí's¹=EZ•BDˆæ²¦;¢ À4®#'§J­:î ÍXÉ*6ž¡ ÝSÞ€8jì®Q{VmŠ™äyQÖ¶õ{XÖb¥sšfŸj¨xéé@­!ÅlEnÎ*(#XÔ Ÿ¥]Y&8ŒBFN0@ÍaLì\¶xÎqëWonÁÈÏ5ƒ{xQg9ÎÿÚ¡9Éý×´2ÿÅ>[o[Fvõá»ãßÔõè3“óþƒ;OãBN@/ÿ 5}Ëÿùm½l!Û׆ïS× ÎO?ü¿~‹óg_ü¯ñ?ÉxkýJ}+²‹îŠã|5þ¥>•ÙE÷Etƒè¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠŠ¸k‚ñWú§®ö¸k‚ñWú§  »vÿ‰Uªîëe)Æî¼¯lûú½Fpx¥Ž{Wknßñ*µ]Ýl¥8ÝוíŸCרÎ'XÛõ¤†Ë;ÓëTn¤XÔçôû›ô2jÁšìܳ(éÓ4Ä2êv¸|ŒíÍ?TAqÉéKj9§8Ìe ÖÙ¤“qûµ³åùpAM¶ˆ,cÉ©æ; f=që@s²žô¡–tù¤Æù1Ï&¯ØÆ¦ä{u  _,GŽÕYä9 gÞ­Ü `Vw˜¢|™  áH€1êk:è–ÎkYåO$1×­e^Ê¥ ¨Á>”BšMíÐV…¬1r*œKòŽüÕ÷q ¹'Ž3@šÝúÃnêå:Ýášo,1Àë]^»xXHXð3Šà&rò3òh<}hÆ}iHÅ%Õ$c‚j0I8æ­AfÆ  °!T`â»Û#L­r’®&T9Åw^Š;(Õ¹Áõ “Q¥Jqœbª*z÷¤¸iwã†éÅM »FÁ™x ¿¸¶ŒÇÓŠáí3ª‚znë[ž,½Ù‰Õ/ ÚæRìsžh®x¼›Ž1X K1lžµ¹ª\ùpù!rHãŠÁC´¨n2x  (ÑÕw‡ŽiñB$s¸g¿Z·l‰%ºƒéÖ†Œ/ â€2¯ma à|þµÎÜnŠ’z×Xñ`ÚçµHñ8!N3Ö€: 0-ƒâ¯Ü7̓ŸNÕ‡´Ø¡8)oi¥e^JbFs\äò3#šßœ†F$dgšÁº &éÖ€>ðë×9­‹+÷€€Ä‘T-ö¥…jµ‚Ë*pØÍoÚ^Ç2qÛÞ®ÆûÿqjóYJ3ŸozétÛ¥¸Œ׸  ePzõªó¯¦ˆ’XÔÉþá+Ö€3UŒSàôïZž„éY.ŒrÄsVíeùvž½1@%“å$V,»„Ň­jHr™É¬ë²#Áæ€4moVH€cózTÛ˜?ÎEpc”œšÝI löõ  fBFãÒ¤I ëÏãTf#„`äúU#}4Ÿ*dPÓ^G5JkçŸåLU¡¶–cóG©­[kA¸ŒŸz©mfd;œþu­+€ƒµ=¬ÔªÃ s@ íËŸÆŒ)ǽ<ŽNO™¨”çž =”Œuö¦ä“Ž)1ÁÝC0¨  ânNãÓ½XOŸ$tÍgC/ÎÅëW£-ÔfA¶<þ œçúÔ'PGÈç^(&€-|ÝùúTÊʪAa“Ó5˜n'~Uzý)¦‰±¸í:Є—ÊŠUH r@¨ÔÎ~TÇó¢ÚÍU¾aŸZº‘…¨zÐM÷ ÃØæ£’YrC~ZÒ—œôª%K¾áÒ€ %ówœU{©šI }úV£°… ö¬»0'»iN0 \ÖÔã®*¥œm-Á‘‡ÉëV.ÜË*DZuÄ‚ÒÛ`ûÞ´GU”–Ø:ö«zt~T=êŒQ™¦ÞÜ÷­"â8Aô^ö@ € e‡$œŒÀâ­ÜÌ'±öªÁw€G¦:PˆÆ;sOAÀ8¦”e‹ zch'ŒP-^àÇvwStØpâ³uüëåŒFkvÕ6ª/µXš3°7¾+QFIwŽ‚ºrAªŒöÂTaë@ §Ü¤±mb8µjæU‰3œw®wsÙÍ·ž½j[CÏÚ¹à{Ð×ûEÁ5fÊÌ }*Œò¢e†j{=Q"]¤s@¬ÁW“œqUæ»MQ—SFB/4°ÚË(ó_…ÇJ¡sv Î+”Ô5ÞÀ±Æk ÕçŠ È£f¸¹¥ó7ÈrFhSÂLÅvg9'~?¢ÙâŸ-·­„#;zðÝñïêzôÉù¿ÁͻŶGþºè _H2ÿÄ€¶Þ¶ŒíëÃwÇ¿©ëÐg'Ÿþ_¿Eù³¯þaWøŸäˆ¼5þ¥>•ÙE÷Eq¾ÿRŸJì¢û¢ºAôQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEE?Ü5Áx«ýS×{?Ü5Áx«ýSÐÝ»ĪÕwu²”ãw^W¶}ý^£8<Û,Y#õ®þÝ¿âUj»ºÙJq»¯+Û>þ‡¯Qœ/¹œ¹Án´ÙFêW½ZKXÜu§>6Tö˵<☆m(ă֮ØÛnaïÍEP?:׉v  Ö€$‰AÛô¦_+ÂÖ¬Â2y§JƒŸÆ€0ã„«ãtTö9óKsÖ¦d،ǩ¨ìøÍi]:ˆk5 žO®;T¬Í$3‘Ö”¨Y6Š%b©ÜJÍ•‹IÈëZ“à Ü:ÕQ¥É^{q@B#Üp+/XÔ qìR:Uë©¶#€q\Ž­u¼<…€ 8  =bvP}ëš)É$t«ó]»–9Ȫ'æÐLFi™úÒž´|@³ Û¶·Û>¢³ôës4ëÁÛÔÖÍÄ‹•ì(£^jÈÎMz%¶ž< œ(ÁÅsžµf½Ðší¡Ý ãûÜP(–Ývg#Ú™s~VÖ¯À°Û€'9¬-xù6ÎGašãu‹ï´^Ôg×MḶۇ#õ® ÌÈ/ÎZ»+ vÖÞÍ@ê4½¨mgUàž•‘©®ÈÕÓªÖEߊÜ‚£# §Å¬}°0eäŠét»Ÿ6¹è9«ê¸“ô®_FºÛ9N@Ï­u0óϵS`L™=*•բά€Uû‡ÃŽzÓS•Ü3Ö€$Ò•¢µTn¨¯œ–Æj{vùâ«\I$ó@÷ ¾I®~é—xö­ÍFP°aHé\]ð¸Ée'ϨjÓÛ­tvw²¯Ì?:òó4ã€ïWìîoÔ‚¦BJôkÔ‚XÌ7 ÈÓuT´º(\c¸ÏZ奻ԙÛpåYå.÷–Ãç4ìÖúŒL»ƒŽjµ#wa^=Φ#L¸víWbLP§\MNVi½Ž 2Xc§Zàî5 TG—gÕ—.¥|íƒ#ШI«îᦹ–d çŠóHuȹ%½k[xºâ(ö²–ÅtÆfì _ŽöE‡jšà$ñ1}§š±‰¤_›Ë4ßÚÜ#ŒIÔúÖ½¬•Ü9Íywü%NW<0­?´Hç¥z„*çq6¨çò¯6‹ÇAO"¬¯ŽÐãÖ€;òWx¥Ûž„\<^3…Û“Æ´£ñ]«™~4Ò— 9 *$9¬?øH­¥ÏÌ8÷§ fÝÀQ"ƒõ  Yq%MFá¶à•J=BÖ ŠçUŽÈÈ'Ú€-´ž^FüŸ­K Ï*ðp+>ÍY·¹ãÓ5¿nqž(²'øÒ­AnªÛqœÔØžsž”¨0ääP¬gn=ûSË)`sÒ™¸nãŠ|„¶0¹èÙr@_Ò‰$Fe#\²þ•Ny·¾Ô³@yWÀúu§º•qR[CˆË½i“8PN}è2úw+åýqKn‚7Œç½$æiHãéI<Ÿ/–>”ëFS3ÊÇ…¨§¸2±$3Å8§“jNy"©[‘‡±  ;xÂE¸õ4Ë¢YöÅz deAŸJ{–ÙÓŠŽ8ÕÎO€-9 Œ=*µô†ÞßvzÔáû§¥gjr‡uLçŒÐ<*^ø?5ÕZ¯Ì þ‡¯QœRÎÿ6ƽ†Ý¿âUj»ºÙJq»¯+Û>þ‡¯QœkÞ’Îr mÈÍgJq×®x­=wN´Ä\¶ƒcnÇ^õ ‡ž;ÔIØéV#\ý(tÈRsÿפc‘‚iŒóÖ£cøƒ@Ýó #ŒÔ gðæŸtw.3Þ£'lAyЋEÜw~9§°Ã†=j(ØÆƒÐõ ³I…¯½-Ì‚R~•\¦ÞGZ²`ò“Íg_\y(Ä‘ž´«ÝžRã'ŠóývùÃAÏ©­}kS\?χô®1äi¦Ë194¼ìÏ9÷¤b´hW`äj a_$gƒ@ç“NLt9¥+ƒJc#hsM F@yÇZ[…3M@çqæ³ì˜íÛ¸…=«FÀnÔÓvN=h®Ó­Z“Ëì+b9˜XóïPB|¤éÔb?SŒö=¨ÚOó“ޙɮ_Ä×ìàENzâ·¤P‰å‚1ߚø0ý¡w`äÐ'‘us `„)éW¿±%Hˆ.qŠêÁ…%cv¦ÞKl[(F1@•¾‡½‰ Šš×Mx°ÊHÁ­6¿Š?•rëIë¯Bhk8aØç5¿c«¡ùdù@â³&]ä`Sdµ*»—© çŽBXÔªÌƹ$¸ž7ÆI·,5%tØçùи¤ÚΤÖeÝë JŽt×"9_úU;[v»¸bG §¹sŒóúU+«&„üÙæº¶´òUBqÚ¨j6ß»ç“@ŠÃ™ÊÖ½Ÿ8¬[»Ÿ*]¹9ÏZ’Ö틽t˜·fL€qW&ŠÁTl@N=+/OxæÝç)ÅKppøIã@í–×9)ÅM)†06*íúU( ¿xÀ*WÌLZ¼×6à…‡µ3Nðý´©çLÙ¨“ÌÛÌmŸ¥<\ÎbØ‚Ž¢€UµÓíÔG*GsY ¥ØÉ°ýïÒ¬Ï/˜û*H"]êwG"€ “@Óa€o\=FºE¨Œ¶Ð×rò'%É©35‰·^I=hŸŸEÝÌ'#¶)tÿ 5Ã’îTÕÐ[X<|5YœH›D#oûÐ(Ð-É(’;Õ9´V*½{VÆé‘² äÕ¥–Léž1@°Ð/v’¹5Zm2þÜänã޻Ȯ$l>´û¥ŒÅµÔÇZóƒq}<¸#ë@Ôï ïw®ÜYÚˆÚFLŸ¥QšÊ ŽU<(›þß»Ûò³ ³g¯ÜBᘒka<9n[%kJ? ÚˆÃ8ôÍS³ñl›†G¶mük´óYŸð‹B²¾ÀBô¥>ÊüŒ}:PceâÛiÔm½ù­x5›W?ëWžÙï^ZúÜ „cøS$²ÔÐe]ì)w§!ÁZ¼¯Q‚+Äc¿Õ­íÏïV`ñåì ²@Äuæ€=vît µ@¨ìb ÛÛžž•ÀÙøæ œ}¡q‘¥uÚOˆ¬'Œ"ŽüšéˆãéX—²³0‰O^µjmRÛÊ%dýj›,Óù¬Aç𾍶ÖxïŠÉ·ˆËpÍŽ[Ô¦À)ëSÚÃåÀ ïÍfê2m¸Àiš|cËO'ÚIüר£ŒÓâÂ*(ë‡u$g+UpXä¯jšv#vEWYw&Hühf!£éŒñO€ÄczX“xäç54’¬1–8 Ë»³£u Ú³m¡k‰²Ç=êK©|é‰õ­K;UŽÇŠŠhwZ¶ªØNb—Ël`Ö³áSÐÖÙ‚ë8À&€7]²€sT.¥òÐAVâ>lA‡¥`kwÄ<ôÅs·Ê÷š€ÆMmiVf˜ŒSl,bGqæ¶¢U\ b€-ÚÆ{ô5mƒF€ûÓ-™7dcµW¼½R<Ð×%#c¿§½yŸˆµ'–R«Îk¤×õ22+`wæ¼îæíæ“'œŒÆÜüéÑ!2Í49#çlçÞ­[: Ç\ž”­áT âË/_Ÿÿ@jú-—þ$¶õ°„go^¾=ýO^ƒ9?:øeÃxÂÃÿ–ŸúWÑL¿ñ -·­„#;zðÝñïêzôÉçÿ—ïÑ~lëÿ˜Uþ'ù" ©O¥vQ}Ñ\o†¿Ô§Ò»(¾è®ƒ}Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@O÷ p^*ÿTõÞÏ÷ p^*ÿTô·nßñ*µ]Ýl¥8ÝוíŸCרγlžkØ-Ûþ%V«»­”§ºò½³ïèzõÁò,~´Ø’Ç¿š×±b·ÝŽqY±¡iJ݆/Ý8¦!°’FHäšÐ@Bõý*¢*A:Ôî ®(7 Éèi›IôSÎO$õ¡Ô€(…Ù#Þœ m i.q;f¥¶P[9í@ wÂ{RY«Ë)|ð)— öõnÑLv¥³ïžh/%)'°®#ZÔ±Xàuæº=VçldnÎkÎuùŽ ’zõ  MJäÍ!aŸÎ©Fpù¤rsÔÓFGLÐøæo-›ôªÒN\` S ¼Q÷ ùœS’L7z‹§*ž”<.n¿¥Ïmæ‡$†^MsE0xÍX€K»äV'Ú€=µˆ×iÜ1Œš†_&yp1\ªX^ÎFâ®Å¢\;×q@í­îgÎê¡pæYÜŸzµk£°¡5 šHÆOÒ€3b{‚›rp)¤;)^k¢‹L@¹ M'Ølý(œŽÁçq¸ž;Öši‹ aËdŠÒ[`¼…¢XKF@äÐO,P*üVªé–ª¦"IëZVG#¨õ  ë»AÎ0qÅaKºÚmÇŽõÖßG•ÈëXwñ$¶Ä–  öº>sÏjé4X@ŒµqÛº–S]¾“ k$Ú;P뀡@“zBÜV”»‹ŠÉÕÔ¢ô ?ÕFÝBA×5fÄ2•,ÇoJ­ªÈ¯zXgÞ¬Ú8x4½henMtÙÝåöæ¹H']œÖ­„¿#4ÓŸ!F b¼ H**¼dȘ`G½N¶bBf€äÛÇ(¬ñ:í$Z³Ø/íTÑ?)ÅfJ‘Í>qŠ¿¢(ÛÁö¬ÙGwÇjÙŠD–!ÍWžÎ!$Œž•­¨N7éUïHåë•=*íˆ(-÷JË¼àæ•­g#q_­[XJíÁ÷«I‚¸'Ú€2 ¬ÎÑŸJí$«ÉèjÄŒCü§ó©­çu<ó@éÒ3޼Õ)e•äÚÑ’Ã¥u/8 ñš¨/3yO˜úŠÂhÛníLµEŒ±Èük©X “ Ø xéN}ÕÀ#<ñ@PÍó‘šÒžTxU‘€Pú ²©ɥOpÇ€&ŠéF#žµ­k=»€?:æ’ÆìJܨéÍYUž6 ÆzvÑK,¼c& ’Åzʱ¾Ñp9ÃÜÓí5i¹ó;M\—IYT€¼+& ÂT“­ôÕãe98;í–òõƒ¯­r7B¡—*zqUŽwb Ịֻ̈Ž$SøÔq,ˆÐ5æ« ¹Èð­ O^Ú&+¥m)B É¬{Ý&'"=ƒ&€&±ñ”W7JÓðG½uéâ[9mþG\ãÖ¼æ ²Ç½TƒëU>Á}jÜ"€=9%ŽHÚFpKʯ$ʬ:ŠòÈõ[Ø £nÀõ­û:º«Ö€;;›aŒ¯PÂ<¢¹Ïze¾µoqÌÀÆ3S¬ÑòEOaW“ÁªÌÌ BëZi:E;°Er:¥ûK;{àPí£iî‚úWI.0;YZ4PHG&µ'}«· %›žy¬U‡˜ }+b \æ¤þeéÚr«Ö€4Öð[Øîfè+––ïíWža$Œô¥¾¹’lB¤•h¶Óp}hVТž÷Xþ!øUO³º m9õ©àÓ¦¹àf€ 56 ´1ÅQ¸¾r¤äç­kË£o9 t¬Iã€ì94ÌëWf7a›­sŸ6x5£sæÊÎrFx¬õùÜc"€HÙ@lŸ¥MlÛˆÏj.™å@¬ÈÍmxUâ¯ÓÛž|ÏýÕôq_ønÛÖ½xnø÷õ=z äüÕk†Å$Ê™ÚèÅXvê+雤 ¥M„}Ž \tÝÆvþ™?Aœœ¹?yÏåcj½Š§çÁ|5þ¥>•ÙE÷Eq¾ÿRŸJì¢û¢µ0EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPSýÃ\Š¿Õ=w³ýÃ\Š¿Õ=mÛ·üJ­Ww[)N7uå{gßÐõê3ƒäq€Üu¯\·oø•Z®î¶RœnëÊöÏ¿¡ëÔgɼ¢%tô¤†ÇB¤ÎõÒÁò€¬»h27ãV´'äšbW‘ǽ=‡ËƒÔR£riÌâ€+:€¾Äæ›1Ì|jIH¨å#fzP\Ì|ͬjÄ2ˆSq=½j…ä£Î$v⫬æ^3Ò€.–2ÈÌ~”û‹å·²#5<¸Ix2:â°Šåöúš×ŠU0õê*‹79í@ú¥˜’×pŠÕÐYE’©Ž)óÄ4ºd àw4y°$àv¬½h·`1Z¬Ê²ŒÒ±õ»„ØGzó‹øÏÚŽäÔ¶Ùû¼ñVµDÛ0oZ§áÎhsLµó_.x®—N…Ø=»W7§Ý(3ƒZö·f'Ô‹uY>^*ð )8õ¬Èî—ÊV$qT¯õghʧ€6.ï!AÔg+"MA ;³X¨ÓO/ Iïš½˜Ì2îs@îe…ܲ¯>´^ˆØ.ÓV%Ò°p¬yêi‰£AÜI  üØæ\:óÚHÈ ØßìçQÅDðÈ„1@6× à+ûÕå¶2ð§'Ú¹¸¤dnâµì5"„К¸Ú{‚>ZoÑžŸlÃ*H›ó}*”ÈÝŒ  ‰$rM#؆Ë¢´ …BqéOŽNIë@Ÿc“<7㊜E"(ašÐ{b¹ÉàûÔ8ÚNEWŽY‘NãùÔOyÈàf­HÙã8õª+dÉö  °N‡Š°Jœm5J8FüñøSü—!½è%…I?(Å$ztR¡Ú¸4äÈ%³ÏrÝŒxsÍfÉ¢·EÕ t©#c¯¥u’HóÆ{T C#ሠ:K{¸FQßéšm½íÜmûёӥv2ÚÛ´d’9ª£NŽA”LÐBê Œ>EW†â9¯C0=kV}@8ïTÿ°æ2)æ€4L°È˜ùXvÅWð°ù€ëTe±º·=ÅFÍrŒ2Ih/tØfÎ:ô¬§Ò?ºOçZžs“ó¼b§Y‘@ëZÞ[ýÒÛE\·Ô&…°îA÷­±åH íÁªWÚjæg§A@}eÌ[22G85R!$³ü9äÕUµs*žäô­çµÛ¡¨oOâÐñšuÁP¤ûT:Tžlxî*[„ÈlÐ9.VG`1‘\ËÊIbs–­›ÆXáb{tµe\MϯJ’ÂÓ{—a[IÎÞô¶ða€P0+@D VKMã$u­[+u†<à cmŠ!œsQÍx”àPv½|£ŒŠó [Qiܨ`I=«kÄÚ¹veW$ƒ\‚1;¥~sÒ€!™HƒëZŽ=vœÕ‰X¸ùªÕ¼c 6äÍ5"Ü70à ®ªÌÌrsž+NY"òÚ 1Ú¢²´%˜‘Çj’%x¢\ž¦¾–»_ø–NÛzÚD3·¯ÞïS× ÎOÍ„žTÚ¾—»_ø–NÛzÚD3·¯ÞïS× ÎJcEO ©O¥vQ}Ñ\o†¿Ô§Ò»(¾è¦!ôQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEE?Ü5Áx«ýS×{7Ü5Äxšñ?©…ÒmpØ¥$ÇB9Æï×ê3ƒæPÄÍ'̤q^›nUô›TÝ©·xäŠIY3»§#>˜éœƒØÖmKù¶Ù[¸Í܃?{½—ó=p3”ÝO±o™½5E¯Þ7ò±ÈÆQ!Æå$ûÓÖU @uÇNµÕ¶‹¥üÛl­\fîAŸ½ŽÞËùž¸EÒþm¶VÇ®3w ÏÞÇoeüÏ\ Åëö_{ÿ#Ka{Ëî_ærÉ*å×?Z‘'ˆq¹:é[EÒþm¶VÇ®3w ÏÞÇoeüÏ\ ¢é6Û+c×»gïc·²þg®K×ì¾÷þAl/y}ËüÎU¥MÄnW¸“å8 ž¼WdÚ.—óm²¶=q›¹~ö;{/æzàdmKù¶Ù[¸Í܃?{½—ó=p2^¿e÷¿ò a{Ëî_æyÌRÈ !ÿ€š}…³äF\xb½-´]/æÛelzã7r ýìvö_ÌõÀÈÚ.—óm²¶=q›¹~ö;{/æzàd½~ËïäÂ÷—Ü¿ÌóËÄ”DÞ^Xã·5Áêöš¤ÅÖ; ¦Ñ1þ•ïí¢é6Û+c×»gïc·²þg®FÑt¿›m•±ëŒÝÈ3÷±ÛÙ3×%ëö_{ÿ ¶¼¾åþg̣ú´Œ?â_t;å¢oð«Öž»> Ó?ôÌ×Ñ¢é6Û+c×»gïc·²þg®FÑt¿›m•±ëŒÝÈ3÷±ÛÙ3×%ëö_{ÿ ¶¼¾åþg‰ÙøRfÈv>¥MkG§”l…‡ÑkÕ›EÒþm¶VÇ®3w ÏÞÇoeüÏ\ ¢é6Û+c×»gïc·²þg®K×ì¾÷þAl/y}ËüÏ/K93‚Œ? ²-ÞPçé^ŽÚ.—óm²¶=q›¹~ö;{/æzàdmKù¶Ù[¸Í܃?{½—ó=p2^¿e÷¿ò a{Ëî_æyô(b#F=«b à°ô±Þº–Ñt¿›m•±ëŒÝÈ3÷±ÛÙ3×#hº_Í¶ÊØõÆnäûØíì¿™ë’õû/½ÿ[ Þ_rÿ3‹žW™ ~5Y†®õ´]/æÛelzã7r ýìvö_ÌõÀÈÚ.—óm²¶=q›¹~ö;{/æzàd½~ËïäÂ÷—Ü¿ÌâÓ"¦V ü\zf»Ñt¿›m•±ëŒÝÈ3÷±ÛÙ3×#hº_Í¶ÊØõÆnäûØíì¿™ë’õû/½ÿ[ Þ_rÿ3“=§ã#ç•?ï¡]+hº_Í¶ÊØõÆnäûØí쿙둴]/æÛelzã7r ýìvö_ÌõÀÉzý—ÞÿÈ-…ï/¹™‚$„fŒ÷…#Ëßõ©ÿ} ßmKù¶Ù[¸Í܃?{½—ó=p26‹¥üÛl­\fîAŸ½ŽÞËùž¸/_²ûßù°½å÷/ó9rÑäæUüéÞz.ô?tÍ¢é6Û+c×»gïc·²þg®FÑt¿›m•±ëŒÝÈ3÷±ÛÙ3×%ëö_{ÿ ¶¼¾åþgvUâl'Ú¸íNÊæGfŽ ˆ6¡5ìM¢é6Û+c×»gïc·²þg®FÑt¿›m•±ëŒÝÈ3÷±ÛÙ3×%ëö_{ÿ ¶¼¾åþgÚ}³fÉ,îÜÄÜþ•¤–òd*AŸöMz“hº_Í¶ÊØõÆnäûØí쿙둴]/æÛelzã7r ýìvö_ÌõÀÉzý—ÞÿÈ-…ï/¹™æ¢ ‚ùRÙÄñ³FQ^’Ú.—óm²¶=q›¹~ö;{/æzàdmKù¶Ù[¸Í܃?{½—ó=p2^¿e÷¿ò a{Ëî_æyÍÖð2±»qÙI®vâÎòêë›i¶õÜc5í ¢é6Û+c×»gïc·²þg®FÑt¿›m•±ëŒÝÈ3÷±ÛÙ3×%ëö_{ÿ ¶¼¾åþgƒëZãÄ 6ò»²„×;ý…ªí,tëÜçþx·øWÓM¢é6Û+c×»gïc·²þg®FÑt¿›m•±ëŒÝÈ3÷±ÛÙ3×%ëö_{ÿ ¶¼¾åþgͶúF¨Œ?â_z¯’ßá[¶vº‚ü²Y\ãÞ&ÿ ÷VÑt¿›m•±ëŒÝÈ3÷±ÛÙ3×#hº_Í¶ÊØõÆnäûØíì¿™ë’õû/½ÿ[ Þ_rÿ3Çâ·»7A6Þ˰ԟÙÓLÀÉ…=¶×®6‹¥üÛl­\fîAŸ½ŽÞËùž¸EÒþm¶VÇ®3w ÏÞÇoeüÏ\ —¯Ù}ïü‚Ø^òû—ùžgœ±àª`ãÒ§ì0kÑ[EÒþm¶VÇ®3w ÏÞÇoeüÏ\ ¢é6Û+c×»gïc·²þg®K×ì¾÷þAl/y}ËüÏ96ÎN{R¬.½å^ŠÚ.—óm²¶=q›¹~ö;{/æzàdmKù¶Ù[¸Í܃?{½—ó=p2^¿e÷¿ò a{Ëî_æyÙˆÀCùSݲp§ø¯GmKù¶Ù[¸Í܃?{½—ó=p26‹¥üÛl­\fîAŸ½ŽÞËùž¸/_²ûßù°½å÷/ó<ÊâÇpÊ£gØU3gp«òÆü²kÖ[EÒþm¶VÇ®3w ÏÞÇoeüÏ\ ¢é6Û+c×»gïc·²þg®K×ì¾÷þAl/y}ËüÏ8Ò¤¸‰±2ÈõSZ³ÝoN7Þ»&Ñt¿›m•±ëŒÝÈ3÷±ÛÙ3×#hº_Í¶ÊØõÆnäûØíì¿™ë’õû/½ÿ[ Þ_rÿ3„‹Q• _&Lt)«Vډ݇—ßi®Å´]/æÛelzã7r ýìvö_ÌõÀÈÚ.—óm²¶=q›¹~ö;{/æzàd½~ËïäÂ÷—Ü¿ÌæZê7CóÆ©1Ãä´×fÚ.—óm²¶=q›¹~ö;{/æzàdmKù¶Ù[¸Í܃?{½—ó=p2^¿e÷¿ò a{Ëî_æpKç ÛJ¡Ëúg¹®ù´]/æÛelzã7r ýìvö_ÌõÀÈÚ.—óm²¶=q›¹~ö;{/æzàd½~ËïäÂ÷—Ü¿Ìã Œ‡ËʸôÍkí <ÏqÓx­ÖÑt¿›m•±ëŒÝÈ3÷±ÛÙ3×#hº_Í¶ÊØõÆnäûØíì¿™ë’õû/½ÿ[ Þ_rÿ38­óŸ§ßèVM×§n~ö3òû/æzàd¸w£ÍµÊqÍiJNÖÏJëÿ²t´,cÓ´ðyÁóHÏÞÇðû/æzàeï§éä0VM×§n~ö?‡Ù3×%Àò«ÙÄŽb_Z’ÆÜF èMzchº8feÒôÒÜà™'ïcø}—ó=p2ã¥iƒvÝ;O=q™ˆÏÞÇðû/æzàd¸,8S×8÷«àê1]™ÒôÁ»nŸ`zã3Ÿ½áö_ÌõÀÈú^˜wcO°n¸ÌÇŸ½áö_ÌõÀÉp8k‹´Æ ýkžÖ5q³*7ãž•ë¤iGwüKtæëÒž~ö?‡Ù3×1Káí @ChÚTƒœon¿{Ãì¿™ë’à|Íwp×7'ŸZð¨uí_L7…<5’WÃú)<ã8ûØþeüÏ\ £øSÃD’a–éEÑ; 浬®’A·w'Ö¾ƒo x`–#ú#uÆ@çïcø=—ó=p2áá_ FI‹Ãú(ÆvôÞÇðqÑ3×%Àù¯V'qRzzWÔwkÿÉ›o[H†võûÝñïêzôÉ£'…ü8å‰Ð4g<ãv9ûØþeüÏ\ ß¾Ùö+¢<  !#†8RØþzÜõ?ROÃ_êSé]”_tW%áØÊ¼W[ÝÄ>Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( 8ÊÖ«eç!®„óPÉqÈ -Ôt[¢ÇËšdÿuȬgÐõ,ñywÿ›ük×äÓÑÏ**#¥F„P‘ÿaêóûwÿ›ühþÃÔÿçöïþÿ7ø×­ÿdÇýÑGöLÝäŸØzŸüþÝÿßæÿ?°õ?ùý»ÿ¿Íþ5ëÙ1ÿtQý“÷Ey'ö§ÿ?·÷ù¿Æì=OþnÿïózßöLÝdÇýÑ@Iý‡©ÿÏíßýþoñ£ûSÿŸÛ¿ûüßã^·ý“÷EÙ1ÿtP’aêóûwÿ›ühþÃÔÿçöïþÿ7ø×­ÿdÇýÑGöLÝäŸØzŸüþÝÿßæÿ?°õ?ùý»ÿ¿Íþ5ëÙ1ÿtQý“÷Ey'ö§ÿ?·÷ù¿Æì=OþnÿïózßöLÝdÇýÑ@Iý‡©ÿÏíßýþoñ£ûSÿŸÛ¿ûüßã^·ý“÷EÙ1ÿtP’aêóûwÿ›ühþÃÔÿçöïþÿ7ø×­ÿdÇýÑGöLÝäŸØzŸüþÝÿßæÿ?°õ?ùý»ÿ¿Íþ5ëÙ1ÿtQý“÷Ey'ö§ÿ?·÷ù¿Æì=OþnÿïózßöLÝdÇýÑ@Iý‡©ÿÏíßýþoñ£ûSÿŸÛ¿ûüßã^·ý“÷EÙ1ÿtP’aêóûwÿ›ühþÃÔÿçöïþÿ7ø×­ÿdÇýÑGöLÝäŸØzŸüþÝÿßæÿ?°õ?ùý»ÿ¿Íþ5ëÙ1ÿtQý“÷Ey'ö§ÿ?·÷ù¿Æì=OþnÿïózßöLÝdÇýÑ@Iý‡©ÿÏíßýþoñ£ûSÿŸÛ¿ûüßã^·ý“÷EÙ1ÿtP’aêóûwÿ›ühþÃÔÿçöïþÿ7ø×­ÿdÇýÑGöLÝäŸØzŸüþÝÿßæÿ?°õ?ùý»ÿ¿Íþ5ëÙ1ÿtQý“÷Ey'ö§ÿ?·÷ù¿Æì=OþnÿïózßöLÝdÇýÑ@Iý‡©ÿÏíßýþoñ£ûSÿŸÛ¿ûüßã^·ý“÷EÙ1ÿtP’aêóûwÿ›ühþÃÔÿçöïþÿ7ø×­ÿdÇýÑGöLÝäŸØzŸüþÝÿßæÿ?°õ?ùý»ÿ¿Íþ5ëÙ1ÿtQý“÷Ey'ö§ÿ?·÷ù¿Æì=OþnÿïózßöLÝdÇýÑ@Iý‡©ÿÏíßýþoñ£ûSÿŸÛ¿ûüßã^·ý“÷EÙ1ÿtP’aêóûwÿ›ühþÃÔÿçöïþÿ7ø×­ÿdÇýÑGöLÝäŸØzŸüþÝÿßæÿ?°õ?ùý»ÿ¿Íþ5ëÙ1ÿtQý“÷Ey'ö§ÿ?·÷ù¿Æì=OþnÿïózßöLÝdÇýÑ@Iý‡©ÿÏíßýþoñ£ûSÿŸÛ¿ûüßã^·ý“÷EÙ1ÿtP’aêóûwÿ›ühþÃÔÿçöïþÿ7ø×­ÿdÇýÑGöLÝäŸØzŸüþÝÿßæÿ?°õ?ùý»ÿ¿Íþ5ëÙ1ÿtQý“÷Ey'ö§ÿ?·÷ù¿Æì=OþnÿïózßöLÝdÇýÑ@Iý‡©ÿÏíßýþoñ£ûSÿŸÛ¿ûüßã^·ý“÷EÙ1ÿtP’aêóûwÿ›ühþÃÔÿçöïþÿ7ø×­ÿdÇýÑGöLÝäŸØzŸüþÝÿßæÿ?°õ?ùý»ÿ¿Íþ5ëÙ1ÿtQý“÷Ey'ö§ÿ?·÷ù¿Æì=OþnÿïózßöLÝdÇýÑ@Iý‡©ÿÏíßýþoñ£ûSÿŸÛ¿ûüßã^·ý“÷EÙ1ÿtP’aêóûwÿ›ühþÃÔÿçöïþÿ7ø×­ÿdÇýÑGöLÝäŸØzŸüþÝÿßæÿ?°õ?ùý»ÿ¿Íþ5ëÙ1ÿtQý“÷Ey'ö§ÿ?·÷ù¿Æì=OþnÿïózßöLÝdÇýÑ@Iý‡©ÿÏíßýþoñ£ûSÿŸÛ¿ûüßã^·ý“÷EÙ1ÿtP’aêóûwÿ›ühþÃÔÿçöïþÿ7ø×­ÿdÇýÑGöLÝäŸØzŸüþÝÿßæÿ?°õ?ùý»ÿ¿Íþ5ëÙ1ÿtQý“÷Ey'ö§ÿ?·÷ù¿Æì=OþnÿïózßöLÝdÇýÑ@Iý‡©ÿÏíßýþoñ£ûSÿŸÛ¿ûüßã^·ý“÷EÙ1ÿtP’aêóûwÿ›ühþÃÔÿçöïþÿ7ø×­ÿdÇýÑGöLÝäñèz–îo.ÏÖfÿÞÓ4k€ÃÍ’Wÿy‰®ìiQá—¿”ü]Öüõõ£Ï_ZòOøZ–óé{ùGÿÅÑÿ RÏþ}/(ÿøº.­ùëëGž¾µäŸðµ,ÿçÒóòÿ‹¥ÿ…©gÿ>—Ÿ”ü]Ö¼õõ£Ï_Zò_øZvóéyùGÿÅÑÿ NÏþ}/?òÿEÀõ¯=}hó×Ö¼—þŸüú^ä?þ.øZvŸóéyÿÿøº.­yëëGž¾µä¿ð´í?çÒóÿ!ÿñtÂÓ´ÿŸKÏü‡ÿÅÑp=kÏ_Z<õõ¯%ÿ…§iÿ>—Ÿùÿ‹£þ§üú^ä?þ.‹ë^zúÑ篭y/ü-;Oùô¼ÿÈü]ð´í?çÒóÿ!ÿñt®­yëëGž¾µä¿ð´í?çÒóÿ!ÿñtÂÓ´ÿŸKÏü‡ÿÅÓ¸µç¯­zú×’ÿÂÓ´ÿŸKÏü‡ÿÅÑÿ JÓþ}/?òÿJàzמ¾´yëë^Kÿ JÓþ}/?òÿGü-+Oùô¼ÿÈü]Ö¼õõ£Ï_Zò_øZVŸóéyÿÿøº?áiZÏ¥çþCÿâ踵篭zú×’ÿÂÒ´ÿŸKÏü‡ÿÅÒÿÂÒ´ÿŸKÏü‡ÿÅÑp=gÏ_Z<õõ¯&ÿ…¥iÿ>—Ÿùÿ‹£þ•§üú]ÿä?þ.‹ë>zúÑ篭y7ü-+Oùô»ÿÈü]ð´­?çÒïóÿ‹¢àzÏž¾´yëë^Mÿ JÓþ}.ÿ8ÿøº?áhÚÏ¥ßçÿEÀõŸ=}hó×Ö¼›þ§üú]þqÿñtÂÑ´ÿŸK¿Î?þ.‹ë>zúÑ篭y7ü-Oùô»üãÿâèÿ…£iÿ>—œü]Ö|õõ£Ï_ZòoøZ6ŸóéwùÇÿÅÑÿ FÓþ}.ÿ8ÿøº.¬ùëëGž¾µäßð´m?çÒïóÿ‹£þ§üú]þqÿñt\Yó×Ö=}kÉ¿áhÚÏ¥ßçÿGü-_ùô»üãÿâ踳篭zúדÂѵÿŸK¿Î?þ.øZ¿óéwùÅÿÅÑp=gÏ_Z<õõ¯'ÿ…¡kÿ>—œ_ü]ð´-çÒïó‹ÿ‹¢àzÇž¾´yëë^Oÿ B×þ}.ÿ8¿øº?áhZÿÏ¥ßçÿEÀõ=}hó×Ö¼Ÿþ…¯üú]~qñtÂеÿŸK¯Î/þ.‹ëzúÑ篭y?ü- _ùôºÿ¾¢ÿâèÿ…¡kÿ>·_÷Ô_ü]Ö<õõ£Ï_ZòøZ¿óëuÿ}EÿÅÑÿ B×þ}.¿ï¨¿øº.¬yëëGž¾µäÿð´-çÒëó‹ÿ‹£þ…¯üú]~qñt\Xó×Ö=}kÉÿáhZÿÏ¥ßçÿGü- _ùô»üâÿâ踱篭zúדÿÂеÿŸK¿Î/þ.øZ¿óéwùÅÿÅÑp=cÏ_Z<õõ¯&ÿ…¡kÿ>—œü]ð´mçÒïóÿ‹¢àzÏž¾´yëë^Mÿ F×þ}.ÿ8ÿøº?áhÚÏ¥ßçÿEÀõŸ=}hó×Ö¼›þ§üú]þqÿñtÂÑ´ÿŸK¿Î?þ.‹ë>zúÑ篭y7ü-Oùô»üãÿâèÿ…£iÿ>—œü]Ö|õõ£Ï_ZòoøZ6ŸóéwùÇÿÅÑÿ FÓþ}.ÿ8ÿøº.¬ùëëGž¾µäßð´m?çÒïóÿ‹£þ§üú]þqÿñt\Yó×Ö=}kÉ¿áhÚÏ¥ßçÿGü-+Oùô»üãÿâ踳篭zúדÂÒ´ÿŸK¿Î?þ.øZVŸóéwÿÿøº.¬ùëëGž¾µäßð´­?çÒïÿ!ÿñtÂÒ´ÿŸKÏü‡ÿÅÑp=gÏ_Z<õõ¯&ÿ…¥iÿ>—Ÿùÿ‹¤ÿ…¥iÿ>—Ÿùÿ‹¢àzמ¾´yëë^Kÿ JÓþ}/?òÿGü-+Oùô¼ÿÈü]Ö¼õõ£Ï_Zò_øZVŸóéyÿÿøº?áiZÏ¥çþCÿâ踵篭zú×’ÿÂÒ´ÿŸKÏü‡ÿÅÑÿ NÓþ}/?òÿEÀõ¯=}hó×Ö¼—þ§üú^ä?þ.øZvŸóéyÿÿøºwÖ¼õõ£Ï_Zò_øZvŸóéyÿÿøº?áiÚÏ¥çþCÿâé\Zó×Ö=}kÉáiÚÏ¥çþCÿâèÿ…§iÿ>—Ÿùÿ‹§p=kÏ_Z<õõ¯%ÿ…§iÿ>—Ÿùÿ‹£þ§üú^ä?þ.‹ë^zúÑ篭y/ü-;Oùô¼ÿÈü]ð´ìÿçÒóÿ!ÿñt\Zó×Ö=}kÉáiÙÿÏ¥çþCÿâèÿ…§gÿ>—Ÿ”ü]Ö¼õõ£Ï_Zò_øZ–óéyùGÿÅÒÂÔ³ÿŸKÏÊ?þ.‹ë~zúÑ篭y'ü-K?ùô½ü£ÿâèÿ…©gÿ>—¿”ü]Öüõõ£Î_ZòOøZ–óé{ùGÿÅÓ—â­ëg{ùGÿÅÑp=lH 8×›é?4«ë¤·>ÙÜáLàO¦A8ük½¶¹ƒ@(¤"ŠZ§y&Ä&®••ª6"jòŠ7òK-…¸cåæG+î6ÿ¡óÝÕÖ|C¶¡kì$ÿÙkŽÝRÆKº¬ØXÝê—‰icOpà•@@à žIUÕÚxZ+}7Ãz†¯w¨9îØYÛ\ZB¿ÄÄ(çœc=±G›ÊÉ ÐÝ=¬‘8ÆÑã,cŽ¼Ô·úuî•2ClöòÉ‘QÈÎÓœšè¼fßgÕ,vüÊês{«KHеq§0ï¡vf/Âæ=…C+hÙ äOûS~ÿ/ÈÎyÆ>n+¥ðz_Þèϧ¾“qu¥Íu“qmp"’0=yc¯ZvÜ›ìsO¦_Çg=Ü–®[ËäJÌ@)'÷J“ŸÒ’m:öÞ;7–Ù‚Þ.ë}¤1p8“Üpy®Ì&Ÿ£x_^†ê«ÛEª*ópÑ—;W’ëÎAëêjÄšŽm«ø.õá[K³Iµˈr\±ë‚G&’Öß×Kéøþv9 Ï ëÚ}™¼»Ó&ŽÜ —ʶÑê@$ÄU1¦ß(ê‚Ùˆ“Ê3d`7¦3ŸÇ®ßJÓ5jºž¯­ÝEý$Ræpÿk-÷@çñ¨ô›ËKOhúv¢Ë†¨ncšFÿ–d7ÊÙö QÐ}N?û#Qû%¥ßÙì÷’yVîYG˜ùÆ1œŽN\¿ð¦½¦YIy{§46ñã{™£ldàpž¤WYw©£X›EÎÇ]‚ÚßóÍTsøÕoèr´Ú…ü^òðáÛRÛ·2|¬ñž(×áþ`—õ÷ÿ‘Ç6ãûõvx’ÕgÌC;ã?(Æ0¸ª¶Ëö»˜ ŽHÃHá;aA''°¯AÓÀ°ñG…¼=€M¬O=ÂÿÓgFn~ŸÖ¨‹Íº+kâ«avo0nvqŒÿJ}¯Bz^§Ÿ^Dlo&¶–H™¢r…ã}ÈHô=ÅCæ¨ n>õé`_yšùðà„ëŸÚŒ%ÎÏ0Cá߯3ýj=: N][NLÚ'inÔÂñ\’Çr¸ûÀç õô©éršÖÞgk£]]éË~²ÛÅ\­ª™œ©g?†0;œÕ+ȾÃ{5¬²ÂÏ”-îRGp{Šëo¿â[ªøSÃêpÖ’C5ÀóÚGƒôηýƘºœÖ¬¨òøˆA!(ä`¹^EU®ôþ¶Béë«ý0)8 ö¤óW8Ü3éšô_ÜÝÄÜ„h´ëø’Ûlj¦$8 BkGP ¥kË[76+ BÛÉãæÎsÖ¦ú_úÚã¶¶þ·±å{«V÷ÃzÞ›aöëÍ6Xm¸Ë±SŒôÈ#ñ±sžÉ=«Ð5_jÚ…®m-íd¹kÅYuÖ•v¨^B(''Î?úÔö¸–ö9«Ÿ ëvzÛî, ZíVó<ØÏ Œ|¡³Üv¢÷ÃZÞb/nôÙ¢·8ùÉSŒôÈ‘øŠé5Ý6Kîÿ_Ò­ôýBŽ;9¢¹ çã»CÓ½.«áý[AðµÍ­½¤—-v«.£xÒ.Õ ÈEäã¹ÇÿX}Akc™½ðÞ·§X‹ÛÍ6Xm¸Ë±SŒôÈ#ñª[ÙIsewt’Û¢Zª³¬’mwÉÇÊ;×e©xwWÐü3=µ«Ü½àI5 וB¨„PNxîßäP²Ón4Åö7{<袷ݱ·Xž¿Át9*“€ÀŸ@iLª }3^µâ» ¬.¦° lGÙwlÊϸù³œõö¦hf‡LM9­Îˆtãö”R›Æ9Ü>ösýi7dßoø?ä [yÿÀÿ3Ê‚HdRî­=HêcÃÚ/ÚþÏö=’}—ËÆüdnÝóš‚VÐÿ²É:Ÿö¦ýþ_‘œóŒ|Ý:S`O¦øXÖ yôûž$m¬ÁÑyÆqó“ô§XxoZÔÒg³Ó¥•as™eB¬:®ƒ‘éZÞ°ÔÅìZ•¾•ewiç*É=Ã.è<²å®JÐÐì/WÅ—z–cg¨éÆùƒ^\º–ˆÉu%ž¸9À¢ÚØ].r¶ú­uóÁa+G2I’†Q–I‘Üj´¶w0YÛÝËK{ÞK–>Þs|bºÍ7RšO]i¶FÞ{Xî§/¦Ë4Ã8 àñÓ9çýVÃN×4—Õâ–æ(a¶[me±© gsuëß½Mô¹VÖǺÕê7U—uª-Ôn¤»¨ÝQn£uKºÕê7P»¨ÝQn£uKºÕê7P»¨ÝQn£uKºÕê7P»¨ÝQn£uKºÕê7P»¨ÝQn£uKºÕê7P»¨ÝQn£uKºÕê7P»¨ÝQn£uKºÕê7P»¨ÝQn£uKºÕê7P»¨ÝQn£uKºÕê7P»¨ÝQn£uKºÕê7P»¨ÝQn£uKºÕê7P»¨ÝQn£uKºÕê7P»¨ÝQn£uKºÕê7P»¨ÝQn£uKºÕê7P»¨ÝQn£uKº¤·†k»…‚ íÏ<=OµVÝZz$ëÓäüÌ« '?Ò€.7†çåo¢2t¡óÿëV$‹4S4.Œ%VÚS9®K8!šæ";ÿãÕ™qqñ2œa@ ÚÁÇób\§#úÖeõ¥ÎŸ7•6FU×ÃÚµ·[5Äï=¿˜Ìà†6åøÚ\àÕ-FMÚUœ$bEŽFõÅ[Ò¼5u¨Û­Ä×)mò›“s0õÇ~5­¡\é(&2¥Å¹82 ÁSî+fæV¸‚#fvž9aPc¸î1Æ?—QľV‡qიÙIgݹÏB¹Á>‚¼Øâæä»^Ö>‚yeM®©^ýcu{ß‚õ.t[&‘‹9…wÔœu¯Ÿ÷W³ø Bt›AÿLÅzˆùãÔ"9QE2Üæ1E0'=+VÿRßJØ=+VÿRßJðˆ'…·üÿe®7uvÿãþÛþÿ²×̪2Ä©¤ÆIºŒŒçúÒDq¿ÉF—ËRïå©mª;œtôùí§¶1‰âhüÄ&‰OCHäg8æ€@éÅ2Š~ê³g¨Ýiï+ÚLbibh\€än£‘ÿתY‘‘‘ÔSâç.!äòÔ»ìRÛTu'½.G £ ti”P†È4¹Ïzeü‚sRZÎ-.á¸X£v‰Ã…q•$àãUpÀ’E†íMh›‘xšú/½áv}®¤§*WÎpãžÕï¾Gr\’qïJ–ÓËo-ÂDÍ %DŽ:.z~x¨©îÁ-¬âÖ7h\,ƒ*H9ÁÆ8¨(¦´O«j7×ELÓ¶æÚ8Ã=€âªqè=)´RJÁ¸î=o\x²îm2kltÛ(çP³=¥·–òÙŽMsôPE'ŠVH/øG¼>›”®ô³!‡AÝÖ¹ðü©´P†ÑÐFü©´P°£øGåZ±ø‚æM-b‚R Ò¤X–\€Íž@>Õ‘Eik:Äúæ¦ú…ÒD³2ª‘¸©'õ«ÖÞ,»²Ó­¥Ž›†/$ÝÇm‰Êô9|õ÷ÅsôQÒÀ<: 7S( ’ í' 6Šy õ£#9ÀÏ­2Š~ê7S( î£u2Š~ê7S( î£u2Š~ê7S( î£u2Š~ê7S( î£u2Š~ê7S( î£u2Š~ê7S( î£u2Š~ê7S( î£u2Š~ê7S( î£u2Š~ê7S( î£u2Š~ê7S( î£u2Š~ê7S( î£u2Š~ê7S( î£u2Š~ê7S( î£u2Š~ê7S( î£u2Š~ê7S( î£u2Š~ê7S( î§,ŒŒIt"¢¢€.Br¸Þ¸^j1H9ÉÏR{ÔPÕÔ&EÚ#Õ†Oó¦}£t›ä,ÍUh  (5I-†Ø˜ìþë ô梺Ô&ºÇ˜Ù ~JŠÏØÁKžÚ›^Ã÷W´xþAVŸî ñJö¯‡ÿò ´ÿ®bµF©[«Qmþ¬QL ¥cêßê[é[¥cêßê[é@ ñþ?í¿àû-Pðd¾F¡¨Kö‰-öió:%ÜÉÓ22Wþ!ÿÇý·üÿe®NÚò{37‘&Ï:&…ø(ÝG4ŸPìtI?ö¬ú‹Íªßj":FI' )Ü8ÀvÈö'Ò®6›k¨^Û=ã †×DŠr²3*±1@X/Í“ž+‘¶¼žÐL “gŠNÊœdsôj-wR†Ki#º*öј¢m«‡øO0ö9©·õ÷ÿ˜×õø‘&¹™¶í¦Ë o3GHÑ£äýÓ A<ûÖUY½¾ŸPœMpcÞhòâXÆ>ŠªÔÐ3 ²GÖ<15„hd»±˜OŽKFä+¨ú6ÃøšÐ¹X&¾Ô4ôf0éZ[CŽFPÎ¥w±Áä-Áàñ\Ω^i7‹wc9†uÁàñL‚öâÔÎa“iž3œ¹N ý×úëkÓúé{DºF…ec 7“Û$ÓX‰üã,þp‘—r…@¾Y\àrsÔäS­ü9§\«Ü¬L\Ø!³PìÒŠœŒ““óFã?xW>5ÍDiâÄÌn¢‰"GeSÔ+YGÐÓ#Ö5­í K—X­&3À¸#ðsúœÐõ¸-,K­ÙÁ§ÜÛÚÄ…eKhÍÆXœÊÃqëÓéY•-ÕÌ×—RÜÜ9’i\»±îOSQQêQ4|ÞÐþÛ}=± q´El%ÝóŒçç\~µ©¥éÓÞß_\É ÃkmeBé¤tCæo,/@q“Ö¸©o'šÒÞÖI3 ¾ï)p>]Ç'ž§‘ޭůêpÝ5Â\þñâX\4jÊÈ HÁÀ¨£ ‘µqŸ¯ 2e’Ø›FK¬KnPX@9Á#8§ßizCßêº]½‡Ùå²¶iã¹YÝ‹mPHubFqÆ9ÅsÇW½-v|ÕíBΫ`:| `cc¥¯x¦ïT¸ºH%hì¦Ú6‘]”Ã0##¡&•™]N~Š(¦ ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¯jøÿ ›Oúæ+ÅkÚ¾ÿÈ&Óþ¹ŠhG©[«Qmþ¬QL ¥cêßê[é[¥cêßê[é@6‚ªß‘YCe?d}è뻃ʘ‹ˉ#PN21ØõÃxþJúrŸÿBŽ­®Šon£Ž÷Oy` ¨>$ˆ¥ô$dƒùRnÃ;?&ùãýð(òaÿž1߸‹m*òÓOaak-µÅÆ‹ûҦ뼿ÉäóW|0,W^¿]>ÎKHVÒñÉ ˆïÌ™$ÉÆ9ïëNÚÿ^ä+éýy™¹¨ê:f”ªoP0$m·/€:“µNõŸf·;w»öíÎ;g4Cªi7±Ëû@Ý…kr¡¶ýí¬W Žø&³îîMçˆbµ»‚í-m$Ge¤®³JG \)P«Ÿ^½x¥½×Û¼FÒÝÛÞÇöVx­#6r…Æ;m,‘© Á9on1øŠÃñŸs&pf–æò9%¢Ä¬DŠX(UÜÜԚζ°—íн•ŒöúiÔC Bɰy¶‘”RÄuŸ­?¯!m«ÙÞÚÅuoO ªÊ ô8"¦òaÿž1ß°<'m¶‚–Ñéígr‘ª\î¶1o œ ÿQšÂÞK¥Åh¶7«=¦qm&ëwÈB±†ÎÓŒCßA£¼òaÿž1ߢQºx~ÆT æ×aÉ<ùôî+’ºÑa·ûm¬VÓ[XÉom&Ø-TiC¶AGÍpºÕSm}-¬ÒeÉm ¶¶I ‚&Œß)®LiS·Ú5 ,¥:Š]Ù˜æòÏ™·lAðzíûùí×4ѧÿÄÖØÍ§]i.¡,“]ˆ†„‡ÚD˜Æ0Tϵ7£þ¼…{«Ç“üñ‹þøa>L_÷Àÿ äü7ê;ˆ]a¹cnÆ2€¸ ¼œ¹ç¥ FµŽ·£j3Ç ±Rò)hÄ–­¥K( øf´fû-¼/4Ëoh2Îê îk†Ð`¼ŽmxÔdû"8š+«O*+pP‚U¶®ãÐ[‚~µÚÚ\Cªé°\ˆ“qÈ©*Œàò29ßu+ÿjhÿÙ#U2Û-‰RÂf@ ÄgµYY,ÚÐ]í„@có7²6ã99qX¶RÂÖó[7œ!›loÌ-ŒÎyýiobž ®•¼ÿi›N „(` mcØœô>ôŸ_ë¸û]‹ëZ,ö“]#Ä"‡fûr¬3÷~R œöÀçµY±º°Ôaim’6TbŽŒ¬;`<Ž¢¹kø®u1}{ …äQm¡ÃBÉ(+!ft^¤¨Šg“üñ‹þøy0ÿÏ¿ïO¢€äÃÿŠg“üñ‹þøy0ÿÏ¿ïO¢€äÃÿŠg“üñ‹þøy0ÿÏ¿ïO¢€äÃÿŠg“üñ‹þøy0ÿÏ¿ïO¢€äÃÿŠg“üñ‹þøy0ÿÏ¿ïO¢€äÃÿ–ÒÕk{Ã_,ÚÒ?úÑ©H[=pB•ÿÇqIoýy¡¡.£§> 4™g‰îe˜Û‘¸•ï¸tžýk$Ká#p4²Xó6FÏGnÂÝG\Ó¯má‡ÆšCÅhÒErÎU@,pœŸST®u­7WñÙÜßÚÁo§Ü±<€I<ã§”øŸaȺ]AìÍKMKÃÚuãi–_g¶v—aX`)“t°w{g5cûLˆ°k†[†s†‰ÕY¿º¤ûf¹KÛiðèšf¡ÒI¨‹‰a[r^ÛçÛ¤ ´ Žçs\Ô-®µÍ=m5µÏâÓä ç0* 9$Ž:SZÚÿÖÂz_úîvUOPÕlt¨Ñï®R#„@ÝY‰ÀMIi}o|&6òoÊпÊFzŽzÖ/Œ­ám ç1FfYaU¨Ü•2ëŠ]PßRΡy¡iëw Q˜M![V`H<;•Rê})u{ýË··Ô£K¤œbì­p |ØUoï}Ɤo¬…„¶2ë_ÙóöÀ­ŽûI­Šà´è%›UÑôÛBë 2V‘¥ŽÜ©B²…i7fù±€Lšïiù‹­‚Š(¤0¢Š(¬úm…ÕÄwVÓOÜ’H•™~„ŒŠµE…T°b •èHéKEQEQE…T°b •èHéKEQE ŒƒÚª@píKEQEQEQE U X( zœrih¢€ (¢€ (¢€ (¢€°Ä#,H­)Ì„(Î1“ëÀˆ¢Ž’(cXãAµQ@J}QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEVïR³°–Ú;©Ö'¹“Ê„~fÆqíøÑs©ZZ]ÚÚÏ8I)‚K2ztãÖ¹ÿØ&­­i|„¨t¸uaÕ( ÃÜ eÉ¡-Þ™¬êðy7‹¬qÿu*Ì?ÞbOÐ kV—õØÚõæò^G?Šín#[ Kßí?%àDarÉÊ–sœ ÓŽj=I´ü^5ù_íñ© ÍÎñš»v³³ÓÞ’ÖÞð?ÌRv¿õßüL¬»­r+KWšk[°EÇÙã‹Ëælñ°gRGJä%²·K=KWH‚êë[Ràpá|Õ]¹ôÁ#ùmẀAqKø‘ÕÑÆCx"šW·Ëôÿ1½/åÿüŽÒÒý®eòÞÆîÜùbBfUÀÉ#nA#wǸ«•ÁëvæÏPÔàÓâh¡K `Él¸+œÛöþÎzT—÷^‡DŽ" 1즹T¸’T- 'i!œ sÀ‘Éæ—Kÿ[‹­¿­Ž¾îú &·Y؃q(†< åˆ$ÐÓ¾Óþœm|‰°#ó<í¿»ë¹þ÷|zWB-äðÕ¯ÚÚ 2ß[!™T˜D8  8L·©ÅkÎÊÚ•ÙÐvcû ý“ÈÞØÛøÓéëk¯õÞÇkEpº/öoöΕýƒ»w’ÿÚXÝÓon¯=j¾eogeáFÞ!ÝÍÛE<«Á•H“!½z¾”[Q_K¶¡ªØéQ£ß\¤"Gº³€šµ$‹O#œ"Ì}®ÆVð¶†ó˜£3,°ªÈTnÊ™õÅ^–m&ß[ši-üv›¤c»ˆCî}étQö:ÞŸª<°ÚNÍ,k¹£xž6ÁèpÀ=Årúü„n¿ëâOý Õ"ê+¯ÜOký© –„5ÆÑ‹|6D`¨ s’qŒü¼š¯¡ÿÈJëþ¾$ÿÐ>ˆ]NúÛýX¢‹oõbаzV>­þ¥¾•°zV>­þ¥¾”Çh SÅ’ÈœˆmQ’rEu1‘j3_%ÒÍ2*I…8m¹Áǯ8ÍsžñTÌ}"#ù×f‹$ÎëUTà³ óŒã!}ªOùô¸ÿ¾(ûTŸóéqÿ|U¿³Oÿ=ãÿ¿GÿŠ£ìÓÿÏxÿïÑÿ⨧ڤÿŸKûâµIÿ>—÷ÅM¹•Þ9Þ€:{þ†¡/¯ Kˆæ‚(ä•Z2Dzr(UŽÊ&ŽÞÂá¤a´œ³IçÜÔßj“þ}.?ìzüýÛÿ߃ÿÅQö=Gþ~íÿïÁÿâ¨?µIÿ>—÷Åj“þ}.?ìzüýÛÿ߃ÿÅQö=Gþ~íÿïÁÿâ¨?µIÿ>—÷ÅVŽ$QšüY݉Qc,ÊNgzrsV¦ŽúÖ&žY ’(ÆçUŒ©ÀêG&¬ VûTŸóéqÿ|Qö©?çÒãþø«4PoµIÿ>—÷Åj“þ}.?EVûTŸóéqÿ|Qö©?çÒãþø«4PoµIÿ>—÷Åj“þ}.?EVûTŸóéqÿ|Qö©?çÒãþø«4PoµIÿ>—÷Åj“þ}.?EVûTŸóéqÿ|Qö©?çÒãþø«4PoµIÿ>—÷Åj“þ}.?EVûTŸóéqÿ|Qö©?çÒãþø«4PoµIÿ>—÷Åj“þ}.?EVûTŸóéqÿ|Qö©?çÒãþø©¤•!Mò0Ué“Q¥ÜNá>tc÷D‘²núd Ð~Õ'üú\ß}ªOùô¸ÿ¾*Í[íRÏ¥ÇýñGÚ¤ÿŸKûâ¬Ñ@¾Õ'üú\ß}ªOùô¸ÿ¾*Í[íRÏ¥ÇýñGÚ¤ÿŸKûâ¬Ñ@¾Õ'üú\ß}ªOùô¸ÿ¾*Í[íRÏ¥ÇýñGÚ¤ÿŸKûâ¬Ñ@¾Õ'üú\ß}ªOùô¸ÿ¾*Í[íRÏ¥ÇýñGÚ¤ÿŸKûâ¬Ñ@¾Õ'üú\ß}ªOùô¸ÿ¾*Í[íRÏ¥ÇýñGÚ¤ÿŸKûâ¬Ñ@¾Õ'üú\ß}ªOùô¸ÿ¾*Í!'rRsù¯ö©?çÒãþø£íRÏ¥ÇýñJ¿jºšd·x£X˜)gRÄœg¦Gb)ÿcÔçîßþüþ*€#ûTŸóéqÿ|Qö©?çÒãþø©>ǨÿÏÝ¿ýø?üUcÔçîßþüþ*€#ûTŸóéqÿ|Qö©?çÒãþø©>ǨÿÏÝ¿ýø?üUcÔGK«cíä‘ÿ³Pj“þ}.?ïŠ>Õ'üú\ß,a F%XzH?¨5%VûTŸóéqÿ|Qö©?çÒãþø«4PoµIÿ>—÷Åj“þ}.?EVûTŸóéqÿ|Qö©?çÒãþø«4PoµIÿ>—÷Åj“þ}.?EVûTŸóéqÿ|Qö©?çÒãþø«4PoµIÿ>—÷Åj“þ}.?EVûTŸóéqÿ|Qö©?çÒãþø«4PoµIÿ>—÷Åj“þ}.?EVûTŸóéqÿ|Qö©?çÒãþø«4PoµIÿ>—÷Åj“þ}.?EVûTŸóéqÿ|Qö©?çÒãþø¥7°p]€à²FÌ£ê@À©ÑÕÔ20e<‚A  ÿj“þ}.?ïŠ>Õ'üú\ßfŠ­ö©?çÒãþø£íRÏ¥ÇýñVh  ßj“þ}.?ïŠ>Õ'üú\ßfŠ­ö©?çÒãþø£íRÏ¥ÇýñVh  ßj“þ}.?ïŠÉ¸Ò¾×x&¹“Uš(”Z¶ß(09qó‚k~Š­ö©?çÒãþø£íRÏ¥ÇýñVh  ßj“þ}.?ïŠ>Õ'üú\ßfŠ­ö©?çÒãþø£íRÏ¥ÇýñVh  ßj“þ}.?ïŠ>Õ'üú\ßfŠ­ö©?çÒãþø£íRÏ¥ÇýñVh  ­vÀ|ÖÓŒú¥rZ/ü„î¿ë»ÿèF»fû§é\VƧuÿ]Ÿùšï-¿ÕŠ(¶ÿV(¦"ÁéXú·ú–úVÁéXú·ú–úP+á¯ù§ÿ®gùì`2yw¾Nß49Ù»¦v.3\w†¿äfŸþ¹Ÿäk«Yš(µB7+’223å¥!™×sèä³oÞªF[÷cÛ8ý8­ëmR—2ŽpxÏQ߯Õ…ö›ÍA2èËÇȃ<ò}‡æh±†I.!+ªŠà³•ÛŒ®rxÏ®M1“ôé‡ý1Oæõ SÝÛxjÚK+?µ\yH3 AÓ©' Ù>ÔçlßÏÿ\#þoV4¡Ðz¿ʥí ÊþÔçÖ|9c¨Ü¤i4ñïuŒ äôÉ&°¥ñV¨ž~¨¶öŸØ_}ÔîóÈÞ#2¸ ~î:µ§£iš®áí'N‰¬šH-Ó9b |çgæé׎µ™/…uGék=§ö,÷ßlv;¼ð7‰ `cn ½ž‡¥^œÞ_ðWéruåþ¼ÿ[¾*ÕÏÕÞÓû ﱺÞyÄf@s·ÝÇAÖ‰|Uª'Ÿª-½§ö$ßcu;¼ò7ˆÌ€çn»Žƒ­øWSq>–³ÚbÏ}öÇc»ÏxÆ6à°ûÙèzQ/…u7ék=§ö,÷ßlv;¼ð7‰ `cn ½ž‡¥(ô¿õ·üêÀï­¿­ÿàW:}SþA7ŸõÁÿôUoïaÓíd¹œŸ-=I$àõ&­jŸò ¼ÿ®ÿ š¯wk ä[ÜF$‰øe=êe{i¹pµ×6Ç?ÿ §üù]ßQñtÂgiÿ>W_÷Ô_ü][ÿ„KDÿŸ7ÿÀ™øª?áÑ?çÍÿð&_þ*¹9q]×õò=|òËðÿ2§ü&vŸóåuÿ}EÿÅÑÿ §üù]ßQñuoþ-þ|ßÿeÿâ¨ÿ„KDÿŸ7ÿÀ™øª9q]×õò|òËðÿ2§ü&vŸóåuÿ}EÿÅÑÿ §üù]ßQñuoþ-þ|ßÿeÿâ¨ÿ„KDÿŸ7ÿÀ™øª9q]×õò|òËðÿ2§ü&vŸóåuÿ}EÿÅÑÿ §üù]ßQñuoþ-þ|ßÿeÿâ¨ÿ„KDÿŸ7ÿÀ™øª9q]×õò|òËðÿ2§ü&vŸóåuÿ}EÿÅÑÿ §üù]ßQñuoþ-þ|ßÿeÿâ¨ÿ„KDÿŸ7ÿÀ™øª9q]×õò|òËðÿ2§ü&vŸóåuÿ}EÿÅÑÿ §üù]ßQñuoþ-þ|ßÿeÿâ¨ÿ„KDÿŸ7ÿÀ™øª9q]×õò|òËðÿ2§ü&vŸóåuÿ}EÿÅÑÿ §üù]ßQñuoþ-þ|ßÿeÿâ¨ÿ„KDÿŸ7ÿÀ™øª9q]×õò|òËðÿ2§ü&vŸóåuÿ}EÿÅÑÿ §üù]ßQñuoþ-þ|ßÿeÿâ¨ÿ„KDÿŸ7ÿÀ™øª9q]×õò|òËðÿ2§ü&vŸóåuÿ}EÿÅÑÿ §üù]ßQñuoþ-þ|ßÿeÿâ¨ÿ„KDÿŸ7ÿÀ™øª9q]×õò|òËðÿ2§ü&vŸóåuÿ}EÿÅÑÿ §üù]ßQñuoþ-þ|ßÿeÿâ¨ÿ„KDÿŸ7ÿÀ™øª9q]×õò|òËðÿ14½n_U@Kþ$*~l¨m'±?_¾»K.íÔ ÑFdS¹[  ðOqYÿÙ6º,âîÆHö2KûÆsɘžOZt÷ò- ÜÏÜÿóé/ýô¿ãW~_ùçýò(ùçœ÷È  _nùô—þú_ñ£íÏÿ>’ÿßKþ5wåÿžqÿß"—þyÇÿ|Š¥öçÿŸIï¥ÿ>Üÿóé/ýô¿ãW~_ùçýò(ùçœ÷È  _nùô—þú_ñ£íÏÿ>’ÿßKþ5wåÿžqÿß"—þyÇÿ|Š¥öçÿŸIï¥ÿ>Üÿóé/ýô¿ãW~_ùçýò(ùçœ÷È  _nùô—þú_ñ£íÏÿ>’ÿßKþ5wåÿžqÿß"—þyÇÿ|Š¥öçÿŸIï¥ÿ>Üÿóé/ýô¿ãW~_ùçýò(ùçœ÷È  _nùô—þú_ñ£íÏÿ>’ÿßKþ5wåÿžqÿß"—þyÇÿ|Š¥öçÿŸIï¥ÿ>Üÿóé/ýô¿ãW~_ùçýò(ùçœ÷È  _nnö²õ_ñ«YËDGBsÿŽšËÿ<ãÿ¾E1¾üSüS7ñéVÖ¡*–Kbe*:œF§SKÖõq«YYk0Ù¨Ô-Ú{slÊà”mÄäá‡#hØGªØkZ|¬U.Iˆ°ê3ŒÕ ]ÄîÞöö]8ÜéörAd#.VI¾Nå õ<з×úßþõq?/ëoø%­SVÕŸ[}+EŽÏÍ‚Ô\Í%ØbI €)'iç·¡­-TMkD³Ô‘ bâ0å ÎÓÜ~5“y¤ë‰©®«§I§ý²{5¶ºŽbâ0À’œn21È­mKMD³ÓQÌ‚Þ0…ÈÆãÜþ'4ÖÚÿ[ÿÀþ®ëËþ ¡EPU±ÄRúm7þŒjÃX†";k™³®ÀzŒ°?¥nZóŸõÚoýÕšÞÑ]Ë" 9ÂÏ"ÀÀ¬jª®Þͯ™Ó‡t~Ù7èSÿ„ÎÓþ|®¿ï¨¿øº?á3´ÿŸ+¯ûê/þ.­ÿÂ%¢Ï›ÿàL¿üUð‰hŸóæÿø/ÿXr⻯ëätóà?–_‡ù•?á3´ÿŸ+¯ûê/þ.øLí?çÊëþú‹ÿ‹«ð‰hŸóæÿø/ÿGü"Z'üù¿þËÿÅQˊsà?–_‡ù•?á3´ÿŸ+¯ûê/þ.øLí?çÊëþú‹ÿ‹«ð‰hŸóæÿø/ÿGü"Z'üù¿þËÿÅQˊsà?–_‡ù•?á3´ÿŸ+¯ûê/þ.øLí?çÊëþú‹ÿ‹«ð‰hŸóæÿø/ÿGü"Z'üù¿þËÿÅQˊsà?–_‡ù•?á3´ÿŸ+¯ûê/þ.øLí?çÊëþú‹ÿ‹«ð‰hŸóæÿø/ÿGü"Z'üù¿þËÿÅQˊsà?–_‡ù•?á3´ÿŸ+¯ûê/þ.øLí?çÊëþú‹ÿ‹«ð‰hŸóæÿø/ÿGü"Z'üù¿þËÿÅQˊsà?–_‡ù•?á3´ÿŸ+¯ûê/þ.øLí?çÊëþú‹ÿ‹«ð‰hŸóæÿø/ÿGü"Z'üù¿þËÿÅQˊsà?–_‡ù•?á3´ÿŸ+¯ûê/þ.øLí?çÊëþú‹ÿ‹«ð‰hŸóæÿø/ÿGü"Z'üù¿þËÿÅQˊsà?–_‡ù•?á3´ÿŸ+¯ûê/þ.øLí?çÊëþú‹ÿ‹«ð‰hŸóæÿø/ÿGü"Z'üù¿þËÿÅQˊsà?–_‡ù•?á3´ÿŸ+¯ûê/þ.£¸ñ„ÛKV·)#! ţœpxlÕÿøD´Oùóü —ÿЍçð–’`AlÉ1S±Œò±Ájj8›ê×õòžÚFWþ¼ÍÏ´ÅlÑÛª…@u:ŸÒ¨Gr`º¼… wD—åÚT•V#“êIüj¨…ßæ†ÐüÊ]†ßÀëVôøÜ æ–5y…eÉj¯?–ë<ðûsÿϤ¿÷Òÿnùô—þú_ñ«¿/üóþù|¿óÎ?ûäP/·?üúKÿ}/øÑöçÿŸIï¥ÿ»òÿÏ8ÿï‘GËÿ<ãÿ¾ERûsÿϤ¿÷Òÿnùô—þú_ñ«¿/üóþù|¿óÎ?ûäP/·?üúKÿ}/øÑöçÿŸIï¥ÿ»òÿÏ8ÿï‘GËÿ<ãÿ¾ERûsÿϤ¿÷Òÿnùô—þú_ñ«¿/üóþù|¿óÎ?ûäP/·?üúKÿ}/øÑöçÿŸIï¥ÿ»òÿÏ8ÿï‘GËÿ<ãÿ¾ERûsÿϤ¿÷Òÿnùô—þú_ñ«¿/üóþù|¿óÎ?ûäP/·?üúKÿ}/øÑöçÿŸIï¥ÿ»òÿÏ8ÿï‘GËÿ<ãÿ¾ERûsÿϤ¿÷Òÿnùô—þú_ñ«¿/üóþù|¿óÎ?ûäP/·?üúKÿ}/øÑöçÿŸIï¥ÿ»òÿÏ8ÿï‘GËÿ<ãÿ¾EC¾l%¶•ê=EqÚ?ü….¿ë³:í[îœ:\Vÿ!K¯úìß΀;ËoõbŠ-¿ÕŠ)ˆ°zV>­þ¥¾•°zV>­þ¥¾”ÊøkþFiÿë™þFº¶Žx¦‘àȲÌŽÅppAöŠä¼=—ÄwY”ú©Áï]CÇm•3Ü–B±l~BÉ7^ÿÏ­¿þ7ÿFëßùõ·ÿÀ†ÿâ*[Ï[ßûå¿øš1mÿ=o?&ÿâhÄÈIg+æHÂòFp3ß©9÷§B·VЬ0ω<%ˆ™ ?•Eöx ~gÚ'Ù×w˜1ü©>Í÷¯&ÿâhÏ™ÿ?ßøßü]eÿüü[à;ñu[ìÑÿzûþùoþ&”[D[o›t¬zb¹üÅXó/ÿçâÛÿÛÿ‹£Ì¿ÿŸ‹oüoþ.«›hCÝ3¡X¶?!Iöhÿ½}ÿ|·ÿ@J·W´Sω¸p•$zd±þU5Sû4c«^þMÿÄÒýš/ÌûDû=|ÁþnЧöhÿ½{ù7ÿGÙ£þõ÷ýòßüM\¢ª h‹món•@ÌW?˜§8ÔdÍpýtÿëPš*¯Ùû÷™ÿ >ÈŸß»üÏøPª*¯Ù#Î<Û} cúQöHó-É#°lÿJµEUû"~ïó?áGÙû÷™ÿ µEUû$[wyóã×ÌÿëQöDþýßæ€-QU~ÈŸß»üÏøQöHó6äBØþ”jŠªÖ‘"–içw2õ©¿fû׿“ñ4rЧöhÿ½}ÿ|·ÿJ-¢-·ÍºV=1\þb€-ÑU ´!Љn™‡P¬[¤û4Þ¾ÿ¾[ÿ‰  • ½¤»ü˜Âo98ÿ==ª³F:µïäßüM/Ù òüÏ´O³×Ìá@èªfû׿“ñ4}š?ï_ß-ÿÄÐÊ* ¶„¶ß6éXô ÅsùŠ ´!Љn™‡P¬[  tU?³Gýëïûå¿øš>Íê׿“ñ4rŠ©öh<¿3íìõóøR}š?ï^þMÿÄÐÊ*ŸÙ£þõ÷ýòßüM(¶ˆ¶ß6éXô ÅsùŠ·ET6І*%ºfB±l~B“ìÑÿzûþùoþ&€.QTþÍê׿“ñ4¿fƒËó>Ñ>Ï_0…[¢©ýš?ï^þMÿÄÑöhÿ½}ÿ|·ÿ@(ª‚Ú"Û|Û¥cÐ3Ïæ(6І*%ºfB±l~B€-ÑTþÍ÷¯¿ï–ÿâhû4c«^þMÿÄÐÊB2Ê}ô"«-¤N¡–yÈ=ÄŸýjŠU³¶Ë{"F˜é@V9¡–G·•Í!œInqŒŒ0ì?Ì¿ÿŸ‹oüoþ.³üÝ7þ‚'þÿð£ÍÓè"ïøÿ Ðó/ÿçâÛÿÛÿ‹£Ì¿ÿŸ‹oüoþ.³üÝ7þ‚'þÿð£ÍÓè"ïøÿ Ðó/ÿçâÛÿÛÿ‹£Ì¿ÿŸ‹oüoþ.¨«éîÁSPfcÐ Ç?¥XûóÚãþþõ¨h¢Äq’IêI9'ó&ŸU¾Åüö¸ÿ¿Ÿýj>Åüö¸ÿ¿Ÿýj³EVûóÚãþþõ¨ûóÚãþþõ¨Í[ìQÿÏkûùÿÖ£ìQÿÏkûùÿÖ  4Uo±Gÿ=®?ïçÿZ±Gÿ=®?ïçÿZ€,ÑU¾Åüö¸ÿ¿Ÿýj>Åüö¸ÿ¿Ÿýj³EVûóÚãþþõ¨ûóÚãþþõ¨ÍÏ뺵‡‡þÏö³~þ~í¾S)ÆÜg9Ǩ¬øN´OîjßøçÿYJ½8¾Y=NyâèÓ—,åfwWÿ Ö‰ýÍ[ÿÿâ«®kH‘K4ó€;™?úÔáV>réW§VþÍÞŪ*ŸÙ£þõïäßüMfû×ß÷Ëñ5¡©rЧöhÿ½{ÿ|·ÿGÙ£þõïýòßüM\¢©ýš?ï^ÿß-ÿÄÑöhÿ½{ÿ|·ÿ@ÉiÓÇ;ÆDû¦§ªfû×ß÷Ëñ4xGÞ’íG«dÌŠ¹EVûóÚãþþõª»>žŒUõVAœ…hÑYžn›ÿAÿÇøQæé¿ô?÷ü…iÑYžn›ÿAÿÇøQæé¿ô?÷ü…iÑYžn›ÿAÿÇøQæé¿ô?÷ü…iÑYžn›ÿAÿÇøQæé¿ô?÷ü…iÑYžn›ÿAÿÇøQæé¿ô?÷ü…iÑYžn›ÿAÿÇøQæé¿ô?÷ü…iÑYžn›ÿAÿÇøQæé¿ô?÷ü…iÑYžn›ÿAÿÇøQæé¿ô?÷ü…iÑYžn›ÿAÿÇøQæé¿ô?÷ü…i7Ý?Jâ´ù \ÿ×fþuÔ$0Ox.åp;‰Ëèÿò¹ÿ®Íüè¼¶ÿV(¢ÛýX¢˜‹¥cêßê[é[¥cêßê[é@¯†¿äfŸþ¹Ÿäkª² ¬¤ŒŸ5ÿô"+•ð×üŒÓÿ×3ütv„—þ»Iÿ¡µ!š_/÷JcK ʱQ#ʧ‚@ÆHÙ˜¯+ñt³¿ˆ¯bµ³73æäÄï¶3û¸à6rkODÓÓKÖ¼<«G4š|í6æ$–Ýsšwcí¥ù~ÓÓþÙnþ|Ö±`$à Ŷoôóÿ_gÿDT>$:Û%£hÓ[FlÜùé¸ÇÔdzŒ¯ zn³§êñÊú}ÜW ˜ßËlíaØÿ1ê5-ö>Î9&¦Xë^gá‡Öeýæ}¤Iê³Å·‡Æ^N§yà‚ B9 s鯛AëæÇÿ¡­-´¢+&‚I‘†Rwò'™wÿ<`ÿ¿Çÿ‰¬÷˜E¦+ÓØœø¬«û+ë‹§ÖQå‹ìò-¨""¨ Ç»fyngð ™gH©4h»Î£îÆpxüª§QÙ—í?ížïçÍTµšxÍŒWNí)¹q—Û»e+¼gh*}ßñ4ÿ·Ÿý¡@Úy ŒÆ°á‹¾ÑœgƒØÎ“Ì»ÿž0ßãÿÄÖMÔÓÉöèí’E¸A¹6îÛ¶"ØÝÆv“Ö¢ŒÝ¥Ì,·Íf2­Á·ÚWkcs»mkÜʲ٬€`‰T`õS¼)ÌSOúÈÿÞ?ÈÕT˜K¥³Óá”ø«.q$_ïýÐÍ" Ë Ã(#k:òIN~ïðš„\Ï #s°ô4ƤßêóÜ2ÿ0(„þïêÍüÍCæ¬ÖÂEèÌ¿ú¥Yvå@Íÿ¡°\*’z ÕÆTñYÍ4®ŒrJÎ1Nµ‘Ú^>ïñfxûF;yŸû&Ožj®Òí§þÓ¨î1-ÔQIþ«°z1¿­/f£›ý^{†_ædqöÏ/ʇÉóq¿É÷ÏOÃ5~#ÿèÝùŠ”ÿÇŰ= ‡ÿAcý*ök=Î.­?ë©ÿУÖ5ˆô«mä™ò#8ÉîI죹þ¤ jïD'¡KÄ^5Ò¼2ëá–IJ‡d„)(§¡9#®SƒÅiÉu î—oynÁá—Ê’'ª±?ˆ?­yÇü!1øÏRMZîyⳑÃÜp»`0 ÿqwÈð#è³G¶™¼#Š&…¢¨u‡ -K'ýžæGÏýôGô¨oõ{M7þ>n¹öÇó4ëÅ©ÿ®²èm^wâMFï8y6ßê)Ö²nËó’W°P@÷Ü}ë:•U5y +³Ð4½j×WG{R̈p[¶i8ŽÌ|¿héÿl÷>j—…t¥Ñt+{mÅäÆçb0I=jÎïøšÛÏþЭŠZߊ›C×ì,§Ó¤{+¨Üo¸£®0‚0 19*k_Z\^Am-µå¡¸%ak˜Â Àäq“ȬÉ-ÏĽx(-'™ãnY2UsÓ©ãô ëYž2¼µ‹R•ogŠ ¾Ah†æàìdûÞi#ìƒS)r«+ž}³ƒŽD‰ƒé–úÓ-æH,%žC„F‘±žOaUy§Ðí¤¹ËŒ&DÎpÛ×"œÒlÐî›vÜ Îï7ËÇÌßÅü?^ÝiˆTñšå6Í'Ͱ Àãåx÷ÏÝÏY±¿˜Co#´†?7kDéòçä öëÐô5Á}¢&n$RIÃîÎîG=óÛÖ¶<+pªÊU`m÷õ±ûݺw¦EÀÔvcåûGOûg»ùóSjš€Ó4énÙ7ˆñò“É“ƒÏ¡ª»¿âiÿo?ûB¨ÝÎ.uÙm¯ŸÊ†[#}ÙxåýÈ y„rN;ãÍkiâÒÚðÝÆöá^IeÜ|ÆfÆÖ 9 1Ž{ ¢ÿ5›ÀÔvcåûGOûg»ùó\w…5­N=nßL¿{–Yá2§ÚNX¯8=I‚Ïå]nïøšÛÏþЩNåÊ<¬ŸUÖ´ýÙnu•‚&q±å@Ò±m¾#xNîUŠ ff•aGÆòp8À9­ëˆ­î6ãGò›z–Úq×ò&¼á­­ÅωíîbŽT7þhW÷ üpA§vIë·¤`Þ’&Õ€þF–Äÿ£ÜÈùÿ¾ˆþ•ë²?ç¬úÒØ¾-Oýu“ÿCjY–â84Ž´g¹ôôðàô¯7‹TŽÞÿí”/>¡4Æ/5",`Ç 3ü¯¯¾yÉ®‹Â²_iBêYÞId;›ºo!1í·ñÍ…À¸¹€$éõU?Ö"4kY$(¥Úi2ÄrpÄÐ jÝ]ÿ×Qÿ -6ÆÚ+Íkiä–U`®T‘¼÷@c¸³–)%Žh8Ë+º°!Jõö#½6ÊòÃQ„Ícsmu;KÀêê¦EyëÁ¯€5‹x£ÙE¬ºJˆ0p¡‡Ónsí[–W:uŸŽ59­¦µ‚ÀX@.]V1)v “Ó;qúSZÿ^W%»_úëc£ŸPÓ-nâ´¸¼´†æ_õpÉ*«¿ÑIɤ—SÒ ½K)¯¬ã»|låPíŸE'&¸_ZO§¦ºÂ-:ïû\"À%˜­ÂI´*ª(S»‘¸r1ÏÖ®øÞ žó$›N"ÞÆÀ ‰J• #çåcŽ>RyàŠõýy ïc·’ÞcdxÑ•†"³¬Ý¤°¶v$³D„“ÜàVš6øÕ°F@8=EbƳ¾ƒÛ2¬æÕDlÝlã?' ã©z¡¸•ÓËŽwa¡¼ˆo³ç=ó¶µá†(áEHÑT(À±e9ðãúuÿÙku?Õ¯ÐRC ‰ýÅü¨ØŸÜ_ÊE1 ØŸÜ_ʉýÅü©ÔPv'÷ò£bq*u݉ýÅü¨ØŸÜ_ÊE7bq*6'÷ò§Q@ ØŸÜ_ʉýÅü©ÔPv'÷ò£bq*u݉ýÅü¨ØŸÜ_ÊE7bq*6'÷ò§Q@·H±ê ±Bù9l g1ÿ¡θÝþB—?õÙ¿v—¿òƒþ¸Kÿ¡G\^ÿ!KŸúìßÎå·ú±EßêÅÀ°zV>­þ¥¾•°zV>­þ¥¾”ÊøkþFiÿë™þF·-Ûå˜g‘<¹ÿ¾Ú°|<æ?Ü0Fr#ûª2OZé&†)ä2=•ØsÔÆY3õÚFi ÁŸC¾kû‹»}rîÜÎAeH <€2c'qɧÙèwj±_Þj·7²CG•cP¡Š“÷Uº:Ö¿ØàÿŸMCþÿKÿÅQö8?çÓPÿ¿ÒÿñT[8ûVü¦ô€íŽ?Ÿ¨Äæ©‹n-ÆŸ0ˆËâ£òÇüðÔïô¿üUMgakaæ}’Ú8DŽ]ö.2Ç’i÷þŽ«žZh°=~p5[ÊóÃQÿ¿òÿñTèÕcH-/ÇC!wÇÓq8 òóM’åOœä2ã(ÂRÊ~ àÔB-iFúÃõäÿÒZ’EY¹´¼V=LeÓ?]¤f›åùá¨ÿßùøª ³»k¸§½¹†S-C Œ Ç,Äœ:ަ¼ýù~׌ÿÛ >)¾RÿÏ GþÿKÿÅT™O³ˆ>Á7”?‡eGqet.åžÊæüâDž"– Œ2pêz ìúÇüþéãÜY?ÿ©<±ÿ<5ûý/ÿG”?熣ÿåÿâ¨þBÙé±[«³“:ÍÕØÈþ„jܧBÛ?ú ªqªÇ Z^3ކBï¦âqS4ìêU¬ç ÿ±@È‹"•qi­ 4^Q_“ÅC¼ÿϽïýôÿãFóÿ>÷¿÷ÓÿJʱ@± ÀÞ ø?ãJd…•¹Û#þj%r¬ì—E‡BÛ› !f-öK OR¡—?•L#Q–åô¥DX×jŒ ¯¼ÿϽïýôÿãFãÿ>÷¿÷ÓÿI¸yùÏv3ÿlñüéòF²Œ8È#œ`Ô^oîü¿±O³Óe7yÿŸ{ßûéÿÆ€%òÖOûúßãJáREàn@£èÃú ‡yÿŸ{ßûéÿÆ•\«û%ÑaжæÇç@\6Û‹2HÎ#Ÿ÷©_è–ºú]]y’@žIoݶ 9#¿_\àÕ©%3FRK)ÙOPR òÇüðÔïô¿üU°X¼2 0AQ^?ú:®yi¢ÀõùÁþ@Õo(Ï GþÿËÿÅS£UŽA ´¼g …ßMÄâ€'³ôfò&”o«'Lð¶Ÿ¥Ü4è4˜ )ÜcAÑG ~EY¹´¼V=Le“?]¤f›åùá¨ÿßùøªÐREQÞ þü¦ïÿ¶þ|S|¥ÿžýþ—ÿŠ©2‚ÜAö ¼¡ü;(…ׇ–oZë±ÝÍ ÆÑ¼ ÷&Î9o~ä*—‰|‰/­n¥¼–ÄûUA å¹q×ÜÖÇ–?熣ÿ¥ÿâ¨ò‡üðÔïü¿üUXºm¶±¦y2Äõéþ@š[RÑÐà6Pïñ·_Àﻂ Z^3ކBï¦âqDв9six¬z˜Ë¦~»HÍXð‚‚1¸Â1ÓòíNŠ(¢`c‰´mP8Îqôª~Pÿžýÿ—ÿŠ£Ê_ùá¨ÿßéøªvðo÷ämû^3ÿl1üø§jz|:¥±†mÀƒ”‘±ÖŒ§ÙÄ`›Êò£òÇüðÔïô¿üUVƒÃÖ¶º%Λ eûDn’LÜ»'¹æ¤±°þÈðýž›çy¦'‰íÛ¿÷€ž>™üª_(Ï GþÿËÿÅS£UŽA ´¼g …ßMÄ╺ŽîÖ'³oôfò&”éóµeKá‹ uU¾a&·ù¿w¿ûû}jôв9six¬z˜Ë¦~»HÍ7ÊóÃQÿ¿òÿñTÄA&ˆ$ñM¶´'*a·0y;8<“œçަ¬ïÿ~Fßµã?öÃÏŠo”¿óÃQÿ¿ÒÿñU&Sìâ°MåáÙJÃm½Ë3Æ—I ¨²E"”taÀŒk/Kð֢ܽƛ§Ak+¬Ñ RG¡ÇÐTþXÿžýþ—ÿŠ£ÊóÃQÿ¿òÿñTÄY¼ôu\òÓEëóƒü¢Í¿Ñ˜ÈšPG§ÎÕj±È$—Œã¡»ã鸜Q"¬Ž\Ú^+¦2韮Ò3@1x'D76Ÿm”‰n±#×ǯ>ä’rI®‚’T(à*Ÿ”?熣ÿåÿâ¨ò—þxj?÷ú_þ*€-[¶ùïr ÀôEõ—O»¶´·xn."†A,‡lŽà± óìj8¥òcXã²Qz”ÿµÉÿ>·÷Á  RçFŠ)"ŽkŽVf‘U-÷‰ÉïëPG†á³k8£Ò’Õ›sB¢0„ç9+Ó9ö¹çÖçþø4}®_ùõ¹ÿ¾ 8>„/ðm;ídm7O0MÝj9!ðÜ×ÂúXô—¼pËc§ÍÖö¹çÖçþø4}®_ùõ¹ÿ¾ ZmVÀ)+yœp© $û:Õ{HÚ++xÜa’%Và oÚåÿŸ[ŸûàÒ}ªOùô¸ÿ¾(ÍEqn—1ß>¡‡U>¢£ûTŸóéqÿ|Qö©?çÒãþø  X]I9Žá± õu82{Oz×UTPªP0íUþÕ'üú\ß}ªOùô¸ÿ¾(Í[íRÏ¥ÇýñGÚ¤ÿŸKûâ€,ÑU¾Õ'üú\ß}ªOùô¸ÿ¾(Í[íRÏ¥ÇýñGÚ¤ÿŸKûâ€,ÑU¾Õ'üú\ß}ªOùô¸ÿ¾(‰ø›ÿ0¿ûkÿ²WŸ×¯ëº-¿ˆ>Ïö¸/ÓÈÝ·Êgv3œƒè+þ-/ûº·þ;ÿÄ×—ˆÂT©UÊ;7/­Z¼§ ¿#Î+Ýî-Å™$çÏû\ü Z_÷uoüwÿ‰®¶ILÑ”’ÊvSÔ­ðt'K››­Ž¬· SÍí:Ûõ÷N°ÔMí…­É_ºg…_LŠI´û+‹xíç±¶–þäRB¬«ô`T^Xÿžýþ—ÿŠ£ÊóÃQÿ¿òÿñUÚz„ÉciK;uA ”*Ä §_~´³YÚÜyž}¤ùªMñÞ Ž@Éüê(Ï GþÿËÿÅQåùá¨ÿßùøª±kimc•gk´yÎÈc3ëQÞiÖ:C{aktS;|øUöç®2*?(Ï GþÿËÿÅQåùá¨ÿßùøªEÒ¤·ŠÞM*Åá‹>\ml…S=p1Ÿj³gkg¦ÄÉkmokK²Ã¢ç¹ j­åùá¨ÿßùøª (x{[çÝ’IOÔƒ@òÝü<" L†Ø(^ùÛZI©ØÔÛu8 }AéU>Õ'üú\ß¿k—þ}nïƒ@ÿµ4ÿùþ¶ÿ¿Ëþ4jiÿóýmÿ—üj§ÚåÿŸ[ŸûàÑö¹çÖçþø4oûSOÿŸëoûü¿ãGö¦Ÿÿ?Öß÷ùƪ}®_ùõ¹ÿ¾ k—þ}nïƒ@ÿµ4ÿùþ¶ÿ¿Ëþ4jiÿóýmÿ—üj§ÚåÿŸ[ŸûàÑö¹çÖçþø4oûSOÿŸëoûü¿ãGö¦Ÿÿ?Öß÷ùƪ}®_ùõ¹ÿ¾ k—þ}nïƒ@ÿµ4ÿùþ¶ÿ¿Ëþ4jiÿóýmÿ—üj§ÚåÿŸ[ŸûàÑö¹çÖçþø4oûSOÿŸëoûü¿ãGö¦Ÿÿ?Öß÷ùƪ}®_ùõ¹ÿ¾ k—þ}nïƒ@ÿµ4ÿùþ¶ÿ¿Ëþ4jiÿóýmÿ—üj§ÚåÿŸ[ŸûàÑö¹çÖçþø4oûSOÿŸëoûü¿ãGö¦Ÿÿ?Öß÷ùƪ}®_ùõ¹ÿ¾ k—þ}nïƒ@ÿµ4ÿùþ¶ÿ¿Ëþ4jiÿóýmÿ—üj§ÚåÿŸ[ŸûàÑö¹çÖçþø4égŠêõ Xã…ÕFX®}~S\~‘ÿ!KŸúìßκǻ||ÖÓŒú­ršGü….ë³:wvßêÅ[«SÁéXú·ú–úVÁéXú·ú–úP+á¯ù§ÿ®gùéííVKHšW¸Þñ‚ÄÌà䃟îãïÃp6€9 ÈÍ?ýs?È×[d»l-—nÜD£qŽl.?!ô) Ò6Ý–›œç¸ë»ß¼OîŒEv–¶¶—WÌÄ$Œ&“åP“€sÑOAº1r²¼Mÿ"¦±ÿ^3è€-S '(lðndÞ>ñúqýÑ…kBÛ³žsœ]H:îü¾ñý?º1Ëê²^]Ïâ+ÄÔnmΖ¶Ž) ¦DaÉuèÙ'ö®®Êsscop˴˹™¡mpÖ…·g<ç8ºuÝù}ãút`kBÛ³žsœ]H:îü¾ñý?º1jŠªÖ…·g<ç8ºuÝù}ãút`kBÛ³žsœ]H:îü¾ñý?º0ëÈõ >Úö ËÄK* 0gßš±@ZжìçœçR»¿/¼OîŒ h[vsÎs‹©]ß—Þ?§÷F-Q@ZжìçœçR»¿/¼OîŒ h[vsÎs‹©]ß—Þ?§÷FoyÌ÷q `Ö²ˆŸ#‚J+ñ퇎jÅUkBÛ³žsœ]H:îü¾ñý?º05¡mÙÏ9Î.¤w~_xþŸÝµEUkBÛ³žsœ]H:îü¾ñý?º05¡mÙÏ9Î.¤w~_xþŸÝr^Fú„Ö@7™QÊÄŽràcßä?¥X  ­h[vsÎs‹©]ß—Þ?§÷F´-»9ç9ÅÔƒ®ïËïÓû£¨  ­h[vsÎs‹©]ß—Þ?§÷F´-»9ç9ÅÔƒ®ïËïÓû£{ÈÓP†È†ó%ŠITÀPûüãõ«U­ nÎyÎqu ë»òûÇôþèÀÖ…·g<ç8ºuÝù}ãútbÕŸt±ÛÇæNåÝcȹ—ï;Ç2cÛŽ›F&kBÛ³žsœ]H:îü¾ñý?º1SÄò ‡þ¿­?ô¢:ǘ½Ÿˆæ¸ÕFª–Ó]"ÚÍÛ}~UYøËgªãš:Ø:\èÚжìçœçR»¿/¼OîŒ h[vsÎs‹©]ß—Þ?§÷F8ù®¯~Áuât%‡Q0­°ù^P”G°§BHÉÏ\Ñ5ÝïØ.¼@/î„°ê>JÛ •å D{ t$ŒœõÍ []¿ÌMÛúõÿ#°kBÛ³žsœ]H:îü¾ñý?º05¡mÙÏ9Î.¤w~_xþŸÝuõäz~Ÿs{(c¼M+„$($ãߊ±@Ê­h[vsÎs‹©]ß—Þ?§÷F´-»9ç9ÅÔƒ®ïËïÓû£¨  ­h[vsÎs‹©]ß—Þ?§÷F´-»9ç9ÅÔƒ®ïËïÓû£ª½äz†Ÿm{eŽâ%•Œ3ïÍ5­ nÎyÎqu ë»òûÇôþèÀÖ…·g<ç8ºuÝù}ãútbÕU­ nÎyÎqu ë»òûÇôþèÀÖ…·g<ç8ºuÝù}ãútbÕW·¼Žæ{¸0kYDO‘Á%øöÃÇ4Ö´-»9ç9ÅÔƒ®ïËïÓû£ZÝœóœâêA×wå÷éýÑ‹TPV´-»9ç9ÅÔƒ®ïËïÓû£ZÝœóœâêA×wå÷éýÑ‹U]/#}Bk ÌŠ(åbG9p1ïòÒ€Ö…·g<ç8ºuÝù}ãút`kBÛ³žsœ]H:îü¾ñý?º1jŠªÖ…·g<ç8ºuÝù}ãútb?µ¥«9L"¨¹”eAÃ(ý1÷F4+&è1ñM€R}‚ëŒàï‚€.5¡mÙÏ9Î.¤w~_xþŸÝжìçœçR»¿/¼OîŒsÞêe¿Š¤šöKÉìÕ^6q…SåáGg·çš­yw{᥆X¯î®ÍÎ<Î.$2*(`럺9<:Qý~ v h[vsÎs‹©]ß—Þ?§÷F´-»9ç9ÅÔƒ®ïËïÓû£}åÝb¿º»7:tó8¸È¨¡ƒ®~èäð8éV#º—ú®³_^^E¨ÆU–O3–EW\ýÑ—ä1Úµ·õ×ü…}/ýtÿ3¨kBÛ³žsœ]H:îü¾ñý?º05¡mÙÏ9Î.¤w~_xþŸÝµE!•ZжìçœçR»¿/¼OîŒ h[vsÎs‹©]ß—Þ?§÷F-U{ëÈôý>æöPͼM+„$($ãߊkZÝœóœâêA×wå÷éýÑ­ nÎyÎqu ë»òûÇôþèŪ(«ZÝœóœâêA×wå÷éýÑ­ nÎyÎqu ë»òûÇôþèŪç¯üqáí2ö[;Ûö†â#‡F·—üw‘î(]­ nÎyÎqu ë»òûÇôþèÀÖ…·g<ç8ºuÝù}ãútatëèµ=6Úú‘b¸dQ"í`Ï#üJ³@ZжìçœçR»¿/¼OîŒ h[vsÎs‹©]ß—Þ?§÷F-Q@ZжìçœçR»¿/¼OîŒ h[vsÎs‹©]ß—Þ?§÷FoyÌ÷q `Ö²ˆŸ#‚J+ñ퇎jÅUkBÛ³žsœ]H:îü¾ñý?º05¡mÙÏ9Î.¤w~_xþŸÝµEgíŽK¹­CŸ9du2Œ+™9Æ:ïéÓ¦5¡mÙÏ9Î.¤w~_xþŸÝ RiüÐZжìçœçR»¿/¼OîŒ h[vsÎs‹©]ß—Þ?§÷F-Q@ZжìçœçR»¿/¼OîŒCÇs%Ìhä¼/åÊÌ£kÝŽž’ÇN?º1¡\áŠ_k›éìíã¾W’HeòÎÑmºôÁ  –´-»9ç9ÅÔƒ®ïËïÓû£ZÝœóœâêA×wå÷éýÑŽJ)u/ì» 7»¼ŽCQ)²9­¶ÒÀê ÛרÖ˜÷w±_Éáõ¿ºòŽ£"äÈL«Dd)¿®r1ž¸4íý}ßæ+ÿ_ùƒZÝœóœâêA×wå÷éýÑ­ nÎyÎqu ë»òûÇôþèÇ÷w±_Éáõ¿ºòŽ£"äÈL«Dd)¿®r1ž¸5³áë™UÖty.&¸[#h¤™·6É;KN={Kúü¿Ìf»ZÝœóœâêA×wå÷éýÑ­ nÎyÎqu ë»òûÇôþèŪ(«ZÝœóœâêA×wå÷éýÑ­ nÎyÎqu ë»òûÇôþèŪ®÷‘¦¡ ‘ æK’©€ 9÷ùÇë@ kBÛ³žsœ]H:îü¾ñý?º05¡mÙÏ9Î.¤w~_xþŸÝµEUkBÛ³žsœ]H:îü¾ñý?º05¡mÙÏ9Î.¤w~_xþŸÝµUï/#±e”1V–8†ÑÎ]Õá–ö µ¡mÙÏ9Î.¤w~_xþŸÝжìçœçR»¿/¼OîŒZ¢€*µ¡mÙÏ9Î.¤w~_xþŸÝжìçœçR»¿/¼OîŒZª÷בéú}Í졚;xšW2HPIǿִ-»9ç9ÅÔƒ®ïËïÓû£ö¤†$1ÎrêA×wOO¼OîŒ[¢€(6Å’V•••å'®ØÁo~Àð¯3¤ÈRçþ»7ó®Û¨ÝŒÜØÏîϸÏä~Ç1¤ÈRçþ»7ó îÛýX¢‹oõbŠb,•«©o¥l•«©o¥r¾ÿ‘šúæ‘®¶ÉvØ[.ݸ‰F6ãØ\~Cè:W%á¯ù§ÿ®gù»¯ùIá˜Ä–vóº¬ÁÌ!‘$s°1R£¦zmAÒΞ«ßYǨi÷6R–Xî"hœ¡Áü×+¦hz|åÎ}§é·˜·Kˆ§:|1°•*v¨FGÖ´ô¸cµƒ]´Dvð\•Š%XÔÁ pYÔ“Þ€3¯|©ß\K+ëpF· «sVn©8^›¿{žœpG²¶ºò¨UÔôÐÀN~?ò5y½æ£2î÷\usY[@u¼ºÿ¿­þ5Ÿµ+”õ /\Óôûk(µk¼KÓÜ’3ûî¼Tÿfñý4ïü¿ÿ¯+ûV¡øû¸ÿ¿­þ4†ö÷þ~î?ïëÕ Ç§Xéz柧ÛYE«X­âX¶žä Ÿßuâ§û7ˆ?è)§à½ÿøõyGÛ¯³ÅåÇýýoñ¬ïxWÑt­BÆúE¹‡fÆ Te€?+‚§‚zŠK°±ì6z^¹eE­`U¥’S»O|åÝœÿËn™cSý›ÄôÓ¿ð^ÿüz¸#FÖ5‹g¸‚ÿb+”"IœàÀúÖ¢øK[þ-F?ûüÿáO¾cnßK×-§»•5k×2‰_:{àŠœ~û¦~µ?Ù¼AÿAM;ÿïÿÇ«<)ª½~§þÚ¿øTáëØ yäŠXâVÏéG3ì4-ô½rÚ{¹SV°-s(•󧾩ÇïºaëSý›ÄôÓ¿ð^ÿüz¹ om-×ê1EÛ÷“üÍS—Å,—Ö-ß|©<Ãù.j=² ¢izâj^ZÃÍ–(âaýžøÂ#¾ëóŸÒ§û7ˆ?è)§à½ÿøõyµâ·Õ/­-ô{›„·÷Ë2–Œ¿Pw9ö­8ïnÊô©ºÏCG¶ò)该ë¨Czuk6(¤‰Gö{ãPœþû¯È?ZŸìÞ ÿ ¦ÿ‚÷ÿãÕçžÔõƒ,ðøŽö[ý_˜äüz¸ëÉuû;ë‹WÕ/Ù •â,·‚T‘‘ÏN+mmrzØ÷ÒõÇÔ!½:µ‡›RD£û=ñ‡(N}×ä­OöoÐSNÿÁ{ÿñêðUº×Ï?Ú:‡ýÿñ§ý¯\,ªuð ëç¿øÑivÜ.4½ræ{I_V° m)•1§¾ (ÉÏïºaÏéSý›ÄôÓ¿ð^ÿüz¼íºÙ¹—RÔJnGžøè3ß×5ØhqjOK5åÔŒß1/+ÄÑ·kÑ\ôKÍ/\½b—V° ²Ç(Û§¾rŽ®?å·L¨¬ùü-­Ý^,×>#Žx–Q2Û=›yAÈàJ ôâ¹;¸ï›V”¥ÕÂǨÚ% g“Ó4¦;æ[«§šßãWÈ÷#,þ Ôç»3nÃMr·Ml–Må4ŠAÉ\òG#8üy§¿ƒõ'¾iεn"iÅËZ‹'òZQÎâ<Üõã8ÏjóŸ.±œò[ê±¼?É;ŒÔp}3\rëñòÔð%ÿÆ¡Þ,¸®cè«í/\Ô4û›)ukÄM•ÓÜqûî¼Ôÿfñý4ïü¿ÿ¯œÆ©®õþ×Ô1ÿ_/þ4‹­ë'?ñ8¿àãþ>_üj9Ëä>û7ˆ?è)§à½ÿøõAc¥ëš~Ÿme­`b·‰bBÚ{’B€}׊ù͵íqf ºÍùÉà}¡ÿƨj^!ס¿‘[Ô‚ð@oÆî‡Ô_fñý4ïü¿ÿ¨,t½sOÓí¬¢Õ¬ Vñ,H[OrHPÏïºñ_,ÿÂO¯gwSünäÿFñ>¿å65ÝOpçþ>äÿ«‰ÆÇÕßfñý4ïü¿ÿ¨,ô½rÊŠ-ZÀ«K$§vžùË»9ÿ–Ý2ƾMoø—9þ«ÿ’Kkâ>}sT?[É?ƙ֟fñý4ïü¿ÿ¨-ô½rÚ{¹SV°-s(•󧾩Çïºaë_2¯‰5ÎúÖ£ÿOþ4ïøHõÌcûgRÿÀ§ÿçÓÿfñý4ïü¿ÿ¨-ô½rÚ{¹SV°-s(•󧾩Çïºaë_3k¿ôÔð)ÿƯÙx‹Ybê×Äg©¹ñ§`¹ô‡Ù¼AÿAM;ÿïÿǪÒõÄÔ&½µ‡›,QÄÃû=ñ„.F?}×ç?¥xJëZ¯ý/?ð!¿Æ£¹Öµa+ªÞƒžÓ¿¡÷¥/u\p÷¤¢}öoÐSNÿÁ{ÿñêô½qõoN­aæÅ‘(þÏ|aÊŸßuùë_<\ëúÊÙåukð}EËç§Ö­ø_]Õ.5 t¸Õ/<Ì6û‡lŒ}k](óXèú³½®}öoÐSNÿÁ{ÿñêô½qõoN­aæÅ‘(þÏ|aÊŸßuùë^]%ýèa'Ûn0p%8þtáy|¯ÿ×sÁ•«“ûJÊiõ9w=!4 YfÔ$mNÂA9Or¸ ·÷Þ•™u¸·š}r¯³£GOfÌ©#!Oõ£Œ7~x×5íî w…$#®=ë”—ZÕF¦QuKÝ»Ëç¶;óŒÕCÝr‡ÔåÜö;OêVÌÆ]jÞìyÙæÉØG꫉G^99¦ûžÅöoÐSNÿÁ{ÿñê‚ûK×5 >æÊ]ZÀEqDåt÷~û¯5ä#RÔ[þ_î³ÿ]›üiÿÚ:†söû£íæ·øÒþÑò‡ÔßsؾÍâú ißø/þ=GÙ¼AÿAM;ÿïÿÇ«Ç~ß©>Ýsÿ›ühþÐÔæúèÿÛfÿ_ÚQþQýJ]Ï[±ÒõÍ?O¶²‹V°1[ı!m=É!@?¾ëÅPÕ<#u¬_ÚÞß]i’Ílr„é<îFyÇÿ^¼×íú†?ãúäÿÛfÿz_êþ_nsß÷­þ4iGùEõ9w=ZÇK×4ý>ÚÊ-ZÀÅoÄ…´÷$… þû¯?Ù¼AÿAM;ÿïÿÇ«ÉF£|Oü}ÜßÖÿ”_Þÿ—÷ôÿ/í8(}N]ÏN³ÒõË((µk­,’Ú{ç.ìçþ[tËŸìÞ ÿ ¦ÿ‚÷ÿãÕå#P½ÿŸ»Œ{ÈÔÓ¨^ÿËŸOõþ4iÇùCêrîz¾—®[Ow*jÖ®e¾t÷À!8ý÷L ýj³xƒþ‚šwþ ßÿW¶¥ÿ?wDg´Íþ5FïVÔº•Ð>‚fùÕ,Æ-Û”>¥.ç²Ûézå´÷r¦­`ZæQ+çO|SßtÂÖ§û7ˆ?è)§à½ÿøõyM•ýçØcw¼¸rQrZFë´{Õ˜ïî™7}ªûøhyŒS·(¾§.ç£&—®&¡5èÕ¬<ÙbŽ&ÙïŒ!r1ûî¿9ý*¬^Öíìîm ×m¢ûDÏ9‘,[z³6ãÞãPk‚×x?éSäpxzþtÄ¿½ÜÙº˜Ü~ðôÀþ¹¥ý¥åÔåÜìáÔ$žyîµÈnçž’MfÙ*YXc€ ”cOZ™<©{¸®u«{·»UI&žÉËá~èJÁçÖ¸“}vOw„y„cõ©nu[©ÝJ»ÂˆŽFç’rI<žzý)ÿiBÏA}NWÜìôÿ jö¡Ô޽ ÍáˆÂÒÜY3„©‰@ãoõ9Íl}›ÄôÓ¿ð^ÿüz¼¿íטÿ©óÿ] *ÞÝ€I»Ÿ·ü´?ãSý§åÔßsÒ.4½ræ{I_V° m)•1§¾ (ÉÏïºaÏéSý›ÄôÓ¿ð^ÿüz¼ÁoîØö©ñœ¬4­}wÇúTüñþ°ÓþÒò‡ÔåÜô{Í/\½b—V° ²Ç(Û§¾rŽ®?å·L¨©þÍâú ißø/þ=^U{©ÝÃjì·SîǼõíÏýýoñ¥ý¥åÔåÜõ{í/\Ô4û›)ukÄM•ÓÜqûî¼Ôÿfñý4ïü¿ÿ¯!}Jû<_ÜßÖÿoöþÞ5 ¯šßãGö”?”>§.ç°}›ÄôÓ¿ð^ÿüz ±ÒõÍ?O¶²‹V°1[ı!m=É!@?¾ëÅy/ö•öp/î¾¾k¿¾oñ êšñÿtG¯žßãOëÑì/ª>ç¨ÿ©µ«v•ç&èÙ?æŽgÍÇŒcíSi^Õ´‹›«˜µ«i§» çÉ=‹1r¥°x”sócŽ0ägYÔÃo®ÿïó#êÚ—Q©]þ·øÓúô{ÕsÜ~Íâú ißø/þ=P>—®>¡ éÕ¬<Ø¢’%ÙïŒ9Bsûî¿ ýkçûí{WŒº­òàv¸qýj„Zþ·åäë?õôÿã[G¤¯b^§kŸK}›ÄôÓ¿ð^ÿüz }/\}BÓ«Xy±E$J?³ßr„ç÷Ý~Aú×Ì÷Þ%×"‰Šë:€=±tÿãXâÏàã^Õ?ð2Oñ­£.cÕØúëìÞ ÿ ¦ÿ‚÷ÿãÕÆ—®\Ïi+êÖ­¥2¦4÷Á%9ý÷L9ý+äŸøJüEùê¿ø'øÒxþƒú¯þIþ5D_}›ÄôÓ¿ð^ÿüz ¼ÒõËØ)uk«,rº{ç(êãþ[tÊŠù×áÞ¿¬Þø‚xîõ{ûˆÅ«0Yn]À;“œד^™ö»Ÿùø—þû4è¿fñý4ïü¿ÿ¨/4½röŠ]ZÀ*Ë£nžùÊ:¸ÿ–Ý2¢¸µÜÿÏÄ¿÷Ù£íw?óñ/ýöhÑ~Íâú ißø/þ=P_izæ¡§ÜÙK«X®"hœ®žà€Àƒßu渵ÜÿÏÄ¿÷Ù£íw?óñ/ýöhÑ~Íâú ißø/þ=GÙ¼AÿAM;ÿïÿǫξ×sÿ?ÿßfµÜÿÏÄ¿÷Ù g¢iö/¤ize„— +Cû¯1WËÞ6åß×{¦p:®‘ÿ!KŸúìßδ<9+6h^BY®[–ùý¡žžÓ§úGü….ë³:îí¿ÕŠ(¶ÿV(¦"ÁéXú·ú–úVÁéXú·ú–úP+á¯ù§ÿ®gùÝ›LTÑ Œ…¡Ý;Y6\• m`}JÂð×üŒÓÿ×3üuV ¶Ú5Û·D1·á»aqù éHe=3HšÒú{ûëÑwy2,[Ö/-U$¹=É$桳ÿYâOúûÿÛhkfXÖhž&,Ô©(ÅN¡ƒî9¬*Ý-SÄPÆÒ2-ÑÁ–V‘¿ãÞ#Ë1$þ&€<†ÊäÀáÝï] [Oõ‘6޼ô®b%ùpÝj´úlS>âk•–u2ß鑱þÔ‘Á_5sùfª6µ§6THÌòÆÇ?Ž1XÐi‘ áEhGnª8QR;‹¡>|¸G«àgõ¤ÿ„f_HºÚVÍnúÜy~fÍŸ?ÝÈÎvã¨ëR ÅièÚÖáÍV[V¸û=”¼Év3íÜ¥G <° ¨î„λáÄ“Ká놙U[íL_M‰]Æ«ck¨[XMp©uu¸Ã-޾Ãñ¬/.ÍqÿO-ÿ ­dÝŪk_Úz­•”¯š¿c® ºãjì9Ënî2 tAè®KG[¨ëún“(ŽöàÆåw±;í_VÚÑîqM×¼»¿ j{^9leÁ!CXz·Šlï,ìì’ö 1¨Ûy²Ï;åDx g«ž@ôÁ5³r¶£Â3¥“+Ú­‹,L­T!½SVNâ¾Çƒ.‹\TƒHN¡kwËç¥< ãÞ¹.ks2ËOXd Ùp)‹ T«Å : ÝnŒl~W•-þ«wg©\EÇÿt€F#¯±•a7‘wö¬j±ªksdŒN‰*ûq·ÿe5ÕNW‰Œ—½rêxŽó©›ð(¿áRÿÂMp:ˆ[ë5ˆÊ@¨aê)»c9dûU\V7ÄÄžÞÝùíÚ´I5³N´û¬›Vçœæ(©ð1ÒÒhÏ»'ìåÙëV<.ûoà$ÿËn¨o·p¸{ã §x{‹¸ô¯ô¯6_Ãgªþ4wà‚ 0>_éK¯ŒŒÒg=j2x9ìx¬éD“6æe'û Ÿø?Ö¹)Æuf<ã~fº©FHlöôÇô¬M®ü[¼é¾)¹#8V#§¸®œ4y¤Ñ2j1¹4-•^OÕ´“Žz×^úœÑám‚:†oñ¬ñá°ò©/–NoPnü×kÁO£9þµM˜m7r~•Uœ³tüë¶O ØÌ>qÑXéYwvÞ±,·ŒªëÁD;˜p¨H©x)÷BúÕ4`ÀÉå‘N«iqÎE¨¹™8g‰Wòç? úV†‰o>µhg¶ Èc*î ä{ŸB+àê­R4Ž"›êIùçÒ’8"´›Ãz¢‚L1ñé"ÿDt}F&ÚÐ9ϧ?ʲú½UöKö}Ja€§ý㜜úæ¥m>ñÒà}PЉ£el20>†²tª-Ó-4H@©¦5ëȧd“íü«+ qÉ8¦?Lúf’‹§4Çí’3ïN |õ¬ÛÕÜ¿ZÓqù}+.õ€ô÷⮟Ä7±½d¥lbVþèò§A„#4؆-£Ç¿ó§òc¦‰nB~é>¼RnÛÏAš{uüÿž*3·œ¯@ùü©2ð½>”¬¸Ä}É‘×"¤o”c¶8Å=Ä0Œp)„¨ô£•z†éÀêi Äxëɧ‘QÀÛà‰ˆ ²ƒÏj—¾qÜP€©©©ù¹ãüúÕdb?ïVuµg†5T*¥ð‰n²àc­9ƒžžÔÆ8üº TÁÎIü BZÅ<»P¶Cc§µK°g©4ÓŒûÐgvyþTå“ÔPÇóÜx”ÐÄ’=hbü£B ÷Í4ç=K’@¦’Öš |ØÏ|S¶¨ žÇ4¹뎽éÀ9Æ;P!B“ÎF=6MÀ𛿑BÔsŽ3´{š¤õ$¨Ë–†:f˜ê6žØö©ˆ$“ÒªÝ>ÈÈÎ*Ö¬f¢ß3wíP*í@;ÑvŤçžy§7žÃ¥z1VŠF2ÖFN †a±Hùô¬6ô­;ùH¸`?»¶³­vÓV‰ÁYÞbJ3EhdvŸ ¿äd¸ÿ¯FÿÐÒ½Z¼§á—üŒ—õæßúW«PEPEPEPuá–Æ‰h7c71»ùÜgò?N⎑ÿ!KŸúìßίxe±¢Z ØÍÃŒnÆ~F÷üÓ¸£¤ÈRçþ»7ó¤3»¶ÿV(¢ÛýX¢˜‹¥cêßê[é[¥cêßê[é@¯†¿äfŸþ¹Ÿäkª°]¶Ñ®Ý¸‚!¸Ç Û È}Jå|5ÿ#4ÿõÌÿ#]U‚í¶víÄ mÆ8nØ\~Cè:Rj°ìÿÖx“þ¾ÿöÚÒ¼Óá¿Ùç=ÊìÎ<‹©!ë뱆zw¬*Ý-SÄPÆÒ2-ÑÁ–V‘¿ãÞ#Ë1$þ&€<ž[3nªÃ¡8éMP=+¥Ô,q§JïÁùÿ‘\êŒV5£fwD‘¨©Up*$8«àŽkA@ÏxçþDÍCþÙÿèÅ®”-ox8ÅYdßÿМ~$'±ÑøcE›þ¾[ÿAZ髯—,0i*ãVÊÖfªZÇü/ÿëÚOý×’ç4}áéšn·r†ÚLr})ݰ:ȵ@¦”Œæ™øSÀ$cš.ŠpA«´†A§Ý î(Ñ;ƒiüyª²+œ®û)¢$æ".}2þ:XÖÔ¥­‰’$L²çwçR¤#¯Ƥ²ux†éW6©A>•¹A g8Í?ËõU¨ðr1‚8©v«  @àR•jÌŽ¿Ê™³ç>ôN[xä?2Ð# ¡Tp*Ó.sëP!¸âÀtK–ÅIåœÓS Õ°™=)ˆò߈¶ok«[^#ìŽæ2¬Rè@$ÿÀYá\ á,œ±8=ÎkÚ>#Xyþ’ä ¬ÑËÀääìÇþ>á^18ÌdsÒ°’´á¬ Dgš@pGµ;RcÖ¬B·0÷«0õª®rÊÙ© È5hÉ——ÉüjEÆ*!ž*T´ÄJ ž•&Üõ¨×§^*tâ€.Z‚£ÀÔÓÜ7=Ç?ˆ¨ p3Šžg+o!Z'ð°‡ÆŒ÷AöIŽyÚqïQè <øí2ŸÔT¯–”rH¨tTe›' +¡Ïn yÖnÇ«&”‘èôSüÀûT¥Õ­cÀ ò}R—ZbwŒ{šóá‚­=moR剧¦ÃgkáÁ¬"u±ñeµåÏÉ#–sîŽ?¨üꄚ…ÄÇ 3cÑxþU[s°'ÔúW£…ËåÌÝýZ¸Å%dD»ñÅ„9[h¦¸ldlSí“ÏéXWž7Ô§ù`X­}Ý£sAäž>ÕKFð¾£®BÓÀÐǾÝÒ?R1‘€ ïßÓÚ|<´ŒæîöiO\F¡1øœçô¯RfõÆš—6‘1g÷mÇùñK@¹›qo™ˆÝ·#pF;óê*µÕœI²¡qÐñŠ×¸7Üž3!•pã¡áÕ‡$ÜOR/š)‘4›OOl¡sûÙ‚cŽ3W$rÎzÕqöÈ9ó}EM5©RØé<”÷§ÿŠce#Aíž´.p¹üªz’¶œŸcІ@Dm“œ(Éõ¥RF{þ”Ö~o'Ò“e$,#±j™›¥E´ãŒ1ãôâœùéLVœž)3„s»Ð~[ÍÇF?¿ýjqq÷OR3JáaAËLRƒ—œ…23¹Û<€qô§&LhÀ`÷œóB(êo‡…ϵWÈή*]C-|:«üê.OÒœöA;ÈÉ÷§ŽIàzTt óRÈ短6ç†À™¤*>ƒÞ—'84ÝÄäz~”І0I{Ó~ñàéJIâ“~´ì†|ŒSH$uéÚ»’QÉÍ&G®GZ¤…q¿7ãM'ž÷© ÎGæi6ãf€AîGÒ¤^JhNXãÒ—v~µ 9þEƒ¥r¾ÿ‘šúæ‘®ªÁvÛF»vâ†6ã7l.?!ô) µXvë•kʆ:¥¶“{• p@àÖy¿¹‰È{p8<VÏ—PÌ6á»t5ZN{;Rœbí%s,êíøöÏü ÿ­L:œX9Áô?Ö®L­Ô3~uZ‰r­2‰?0nâ°öUVÓüŽj/ìþ$Kª@ùÎåíóð _ÀÏ4`w ç[§KÒÝr-”du ßãU¤ÐtÖÏ3 ú0Çò­#–ÜÊ^Í;ÔYÀ•ýÖÖ”N›ò>¢©?†mÉÊ]:ûúÕWðÜÈùŠæ<{äåO÷‹¡ƒêm^YÛê:uŤÙ1MFØêÈ÷Erü/Еr³Þ8õYÿìµ Ö:Äl<»‡Àé‰xüõëmCÄ6­‹‹®øŠ‘ŸÐãô§K¬A«lÌTøq ÆÙ1O'³ÉþU?øH½}>ËʼŠ#,n®ìI_˜¨Á,R+©íËÜ“Ã׫?~<¹ü¶çZñ‹Y”2Ïå>7l”laÏpy _3¶º~Üù€ÀBEXŒ…¿âÿÍáDùf),n%Û›vÅ­îïƒX »9ôª[·<ÔȽ3RAc9_™ c®ãЏ–(±©2³>Nà郟éNÂ+¤`0jÚ!' 3ô©bA‚}O4¦M½øï@(ÏÌ1R»!B‡F)Úî\”…ñî6ÿ:µ#ÞÊ«ÏaŸð¨•H­Ù.q]J;•~èΖ?2iFŒîÝA$ÖŒú\PÙÊчg_˜nƒ¿áŒÖ÷‚®ØÝ[d–ŠPù=6°ÀñV?m…Œ*Ë”N«’¹‡máÍVä©û9‰OñJvãðëúVµ·ƒ2TÝÝñÝ"_äÇü+­¤æ½XáéGddç&e[xwKµ ­¸‘‡¥;³øtý*MbÉnt+»hÔ¨ò·* ÆJÀ©P+K… ‚:ŠÕ¥kaü9»Ì7ö$¨–tå‰\ýØÿ:îkÌ<4ÃFñ¿Ù>äLÒ[n~¥)ÿ}2ÇùרW=»F>µ¯ÜCIKŠ1ZBg#¨éŠñMvÈéúÍõ¢ŽVê¨yOÇiS^Ù^eñËÉ×cºTÂÜ >~ó¯Ê%òëêñ= ¶v«ËÜôé5íîÕ ­`ŸÝÝ´ãð«×g²ÑTšáþßKp²ZÈr-¢dSÎp\7¯ûxüw1ï¶•Týä#óçžùÅ_É)fÏÊA ¨íÎ8¬Ó®Ù@¡ñH­§Ê.w³†#÷`N㞤v¦?’!fKw‘±ò‡ŸŸL*ŽƘŒeûm¶æIèN>ŸçÖ¦±–éµ+&ÕgRÀ(å€ ÿß]}©ú¨k{«y7££‚Û#Ý„ù@ÏcÛ“ÜÕ ¼Ô£u*†WQÐÑ‘ýI¤4G­G¶éÊã#Øÿõë0± §¶k{ÅPymGc¿¯ü¹Ã#Ø^kÂÅéY£ØÃëM #0ãô5R3»P‰~§aVdfwO¥P´mÚÜ[þ‚k*{šÉhu’¸£¨ã¡§9 àö¤?sw~x¬º’¶" r3éüê0¡³Ž3ÞœÎU¡Ü8c´ýyÿ Ž lIÁÇ_|T½ËDÀä®8•ŽI˜æ¹déÍ n3Œ ôëTN]‡qÖ‘× ؃ø‘A·dœw¢EÜäŽAÈö ÿJ[`gדRSo?7\v¤ô4‚@œç?§¤™n~Úùêüþ4$ž¸ç¥U’O2òç8|cÓVbP#Ü•i%¨ÖÀK·zz/ËÝi„•'#9©–äg4ìðqÔ{ŒÓdaïÒ°ãò¦“ǯj,"2¯JðsïNaÓŒƒM{¨€NIö>”6p8çëNÈ ŽÂšÌpyÈëT„&pxÇãN-ž7sQ‘ñ¥U9Çë@ìM€êi„Žçð¤Á?ʘH\ð½HX{ëšnpqÎG­0‘·=½4’ãñªHE[¢2MbÝ>3Î~•©pÙäò‘tÌÛN=+²Œu&nÑí=úâ³uI Û·?xâµ[N8ÀàÖ¯!܉íœW]5yµ Ì£Hii+´à ;P)h³øgÿ#%Çýz7þ†•êµå_ ÿäd¸ÿ¯FÿÐÒ½V€ (¢€ (¢€ (¢€;¯ ¶4KA»¸qØÏÈÞã?‘úwtù \ÿ×fþu{Ã-ÐnÆncv3ò7¸Ïä~Å#þB—?õÙ¿!Ý·ú±EßêÅÄX=+VÿRßJØ=+VÿRßJå|5ÿ#4ÿõÌÿ#]U‚í¶víÄ mÆ8nØ\~Cè:W+á¯ù§ÿ®gùê¬m´k·n ˆcn1ÃvÂãòAÒËU‡gþ³ÄŸõ÷ÿ¶ÐÖ•äwï³ì76Ðc;üûv—>˜Ã®;úÖF”³ªxˆ]K³ £¹âŒ¢Ÿôxº)f#s@ 𛳭Ðr 2GOâ¬íR Ïk’[YAsmm ²V–àDzF—Ù#䱊±à—./²rwÏýõ]m9nL>”ÄOá‹·êÃK¼`ÐÉ/Ë‘"®àG_Çž*ÿ„7 Z+Cå…Ü«ò•Þ¡Ž‘¸|ßnQE÷ŽG­­éÞS«j×f±·ÿY.Æ}»¾Q‚O,Jx\WñUâÚêÇþ¸ÿèä«hÉnuø#¥/"·Ö´XWši>Ôò1L>”Xc ɤæ”ÒgêJ Ñ‘š1IŠ^”àÔÊ;Ðá¾”µ Ÿa‘R?:`8ŠÔ:#ƒRv¦50(y`‚Uia«×»`ü`ð~µ›¨ß p‘žmļFƒùŸj›¥mGÍ®Úé:xûlr»µJK? šÎ“_Ö¯X 7Cx#l~÷P!_ªHúUˆ,ͼ‹pò .‰¤=Ï!GaŒz›Í™Y£ ÷wtÈlò=Àüê£Ê¼ÉäîU â¹2¢÷BeÈüÍdÞÏã[72K™n2Z²ÁzšÕ›VµŠ×,JØÆæ9PÜzõÅe\ø¶ÂÜ©·ye#8Ø €}óëG:ìG(ÝÅ?Úl°f¹' ›-œã`œöšêÞr W•뺜:ì¢k‹8üÑÇšOÎG¦@Ç8çZMRñàH ÝÃD«´!•ˆÇ¦3Í&ÓØ¥zmÆ¿gf[í©^«œ·ä9®cÄ~-‹P´†ÊÎ4ÙÞsÊñ çŒRy¹éÐzšãظU8á²=ñŒÿ1ùÖ•žƒwuJ^8â`Keˆ>€õª¡Fu}Ô)Î4õ“,ÿÂQ¨ÇŽ„`tm¡›õÏò¬‹‹¹n¦3O4’Èz³±?äuâº(<5mi^V‡ÊõýkJÞÂÖÔæ#B:62Gây®ªyr[»ÓÇG¦§…íʃ ¼Œ§Ä`ÄñS^iv¶ž|»vä¨rW=Ïôv]Nj¾¡lnôùíÕw3¡Ø¹ÆXr¹ü@®‡ƒ¦¢í¹‚ÆMÉv9m:ÆÞxLŽˆ%H'×úŠÒŽ¡?»ãQ‚k3E“2Hƒ•dxãüsúVÁóµ¹”šlé¨ß0{Òõ¤¥>•˜ÖEu(ã*ÃzŠ«á9ZÓÄ?g“$Êð|ÙÿÇHüjÝbÝ9°Ö£ºUݱ’p‹ÆìŸ‰Sù×f §%DkOª=.—¥žA ;Îh¯¦~4”¸ jâîÓ…÷ÆÏθf¹jµÜâÌ!xF}Ú)“Ï ´F[‰£†1Õä`ª?Xwž4Ь÷t×.¿Án»³ônþt¥8­ÙæB”çð«›õÇüD³èÖ÷a =¼ÛIì¨ã“ÿ},cñª7¿e;……‚/£ÎŲ?ÝÇækïRñˆ-$çËe˲Å#ÂüØÈã <Šç«‰§êÏG €®¦§m‹ßgë—QÙ’Ûxô2ƒøü½2ëæ³›`%¶7O¥xφ®þÇâk%¶É(…€ï¿åöÜTþì>Qó+åƒFà.99¹ç´q÷‡}Óàåw±'§søV^­x`™cU¼²3—ë·€ïêsètW¬JË5­ÊäÏòä6zõϾkµŠó­Ñ–Fù@#>•к‚>íaj¶‹"6çšÎ¯©¬›±¥oâ;)1—ÀúÕÁ¬YK…®7nçŒv¯7—N9ãõ)$’0O½0‚Ä ^ièo9ç­‡o»»ïŽÔy®sÇúÖ¡á¿j:®“qö{è<¯*]ŠûwHªx`GBGNô˜ÓÔÊÙñ<ÿ…?+šô+Oÿžw¿’ÒÆ¨£ Ý)Íäã1@\âuÅñ§öÄÿØ#BþÌù|Ÿ·‰¼ïº7nÙòýíØÇlw«ÞMpý«þµ°?sìßÙAý÷oó?à8ǽt$ ë·ó?áHYd*çê€35Å?Øóÿ`ãûOåò~ßþ§ï Û¶|ßwv1ßÇø‘éáOü˜¯D3Æ8*Ä~©#{YýJgè-©T®Ž?çÿÿ®7[>/þØŸûûû3åò~ßæùßtnݳåûÙÆ;b»ó«¡×$×;“’U‡¡I2—†F¯þ•ÿ Y²þ³eo÷Ý¿Ìÿ€ãþÕ£­ÿÈ"ì ÿiü¾OÛÿÔýá»vÏ›îçïŠ@)àP3âGoøE?òb½ 'þŸñÚÎSTÖ,4{o>þábCÓ‚IúÉ¢ö3[>2þØŸûûû3åò~ßçyßtnݳåûÛ±ŽØ«ÞþÙÿJÿ„¯ìÁöoì­þû·ùŸðcÞ¹{‰6Ç?c°™Ç#tÌñg#ëŠçï|q¬Ý ˆíЂ…1ŸÄäÀŠWÓ¼S40xrò]!±~Ц#|s÷†wmù³Œãñ^Oÿ Š-^K£?‡ežE.ÙÙ€ôà~u—=ô÷2ožifp1¾W,qõ4ÅŠy:FßʋإöG©Ÿx7Å®ÿß0ÿñUçž$ñ­q¬\ÿ`Ýô¢T·#dßtnÜcàüÙÇ=1U“O”ŸÞH£éÍ6XþÉpŒ˜la†ñO½J”[±n”’»4<%ok}5Úø’JiÖ·:«ûËùŸðcß=«ªÔ|¦]hÓ=ZßQ!LUx„'æ·òÃåÝ|WYjÐIg –ÊÝÑd‰Bã FG¸56*^‰1ÃG©äÃÀ/S“6‚yè^oþ&½b×þ³ÿSar[ûÎÎ}Fìã𥥩ö²4Tb¶8ˆöZìæ{›¥ÿcÚ² þgÚpÁUÇËǘë¯?—¹Á˜Ó´9·;}oû/ûì¶j|¾OÛöù?xnݳæû»±Žø®<Ôÿ#WFy£½{^ÏÍž´òFçüRõÿÈUÈkÛŸÚóÿ`gÿf|¾OÛ÷ùßtnݳåûÛ±ŽØ­,Rô£Ùù°öžHå¼?c¬Þ/‹<ñ tû8Ò6ùk¼ÛüÎp&1èsšèu¿ììyÿ°?´¿´þ_'íþ_“÷†íÛ>o»œc¾+žñL][ÏÉFP€8NrO©ÝÿŽÕ›y|ûxåÜ eˆïúæ¾gPôù ¤dÅUÿPoü‹^ÿWýLù¹º+‡›È\ÞE=sûKûbì²f|¾OÛ÷yßtnݳåûÛ±ŽØ§iqÙysIã!>”[cmÏ9Ýæy¿EÆ=N{U¬ÕMA¢6’Äòª1]ÀÉ#‘üª¡6¤¬Š„µØížçL¹ðˆ>7?n(¥·ËHÌòùÎÀHÇr+ÿŠ÷ó-ÿäzÇÐßqì,$rZ†…«ØêóÂ3c .š ˜Q½ÀùFì‘>lã±]†¦ ÉñgØÉ ·ö^ï}ÛüÏø1ïW(ÅrK)»Ê)ü•$•“gšøš×ÂÚ}•嶆Úêë8HðÅäå\e‰_›î‚AõÅoYß|A¿³µ¼ˆxWd±¬Ñï—#>ø5ƒã›O#_3®H¸‰œpp?ñ®‡Â%÷…í¡—û5ÛDÁ‰ùŽÖu@*û<-omB;£Ç­I´zGüJY—íÄã®S?¯ç\Nµ‹Æ«pº"hri‡Ú’Ègû«’v|¿{v1Û­]•­4á*&FÈU"Y Æ\YÒjGr$[¹¼—?#«™npsÇ_ËéîÌ˾·¿“íð–Ggœ'ÙÆ˜$Ç}ÛÄœw\cýª¿©Ù%žq/†ã‘µFEHûh·z–ÈL›±ŽæªÇq,·ÞDW¬Ìab[nÞœmÁéÁ楒îúÒÍ¥xmç È2ŽPìpAîGzc<ç]»ñ¤š´‘Ý®ç@«ò„Ûq÷Ç^Šºñ'‚ÀÆuóÿ~k?_R_'íßë¾èÝ»gË÷·c±Z­ÈëÍFaf8´Uü½—˜ß Yé n¿á+§î}›û+gû[·ùŸðcÞ¯ëÚwƒÎ‘pt$Öÿµ>_'íþO“÷†íÛ>o»œc¾*¯W´¾[6ÀÓúÃì/d»œ·ön¬‚Ãózï[NøkŸ¹â¿ü—¬ï$ŽÌÖšÈO?ýj>²Åì—s[ÓPêóÿ`¡þÌù|Ÿ·ÿ®û£víŸ/ÞÎ1Ûë ðF™¦#Ý?‰–ë?'Ù¿³Jÿµ¿~ÿø1ïíMX=¶kJڸϿ53Ä»ZÈ$º›ÚÅ®‡ý‹?ü#ãPþÓ˜MþÏ'ï Û¶|ßw8Ç|W&-_6r»Ö|XeÏÉöoì¢=÷ïó?à8Ç¿µXñðØÑî„uOí?—É7Æ?'ï Û¶|ßw8Ç|V{;79ª’ƒŒ“ZF§’³óg3tu¾ŽtïøúíSþ·P|YϯÙ똾={T»@ã_'íû|ïº7nÙòýìã±T¨ ÷ágØ?´5O´ý§ûCìëö_/o•·xó7çœýÌcß=«Ò«Êþ|Gr{}‘¿ô4¯T¦EPEPEPuá–Æ‰h7c71»ùÜgò?N⎑ÿ!KŸúìßίxe±¢Z ØÍÃŒnÆ~F÷üÓ¸£¤ÈRçþ»7ó¤3»¶ÿV(¢ÛýX¢˜‹¥cêßê[é[¥cêßê[é@¯†¿äfŸþ¹Ÿäkª°]¶Ñ®Ý¸‚!¸Ç Û È}Jå|5ÿ#4ÿõÌÿ#]U‚í¶víÄ mÆ8nØ\~Cè:Rj°ìÿÖx“þ¾ÿöÚÒ¼’ý6}†ÚÚ|çŸpÑcÓFÏJÈÒšvO¨£Šctw$RQþF*¤ñì(äM7R¸Ó/æÚBއð>ƽsúõ·ˆm²„%ÒÞCžžãÔ/Ë>4¨IàV†ž÷öq\Úù±Ê‡*Ê?Îj“±.7=Åm·ué]?†õhg §3$C(Oñãðÿ=+„¶¾Õõ=)$6/»7L"€=}¬Fñè·ðËŸ¿ƒØ{ÊUåΣ¡¬0þësv=àõ•â_ Âcáû­íŸcû^Ïßù^fÝ®îäg;q×½?IÖíu. èl•rW9(ÝÔýø÷«7 Ó|=jš­ÏÙì Ç™.Æ}»ŽÑ‚O$•»g5še­ÕÅÔVд³È‘F½YΨÚpkÏ|]®›í@ÙDX[Û¶Œo_ éùûVë*Q¿S³ƒ–*ª¦¶ëèmê~=²·Vûfr?å£üˆ?>Oåø×0~"Ý´‡V¼ÿ ¯θ­b+û‰Ç–¥¡ÇAëLM*im#ˆÛ,Oœ´¥òHôt®h¾xóÎvô=‰aÕ ¾Æ•o7×ô=jÐÉFN[ A#ØçʺûKø¯m–æÖMÑ·àTúØÿž•å1Ç%,R0æ­Ï‡—÷ºŠ²âÙ‘X1èø‚OáF¤å'ª5Í04aGÚE(Év= n¥üä}*¡B·.I>Ç¿øþ4òãµ K¦@Ë)¿…v£æ¬H¨E< A"6ô<Švrhb¸¯‰pŸI´¾ I´”«sÀGÀÉÿ*Æ»qéTõ}9uM"îŶæhŠ©nŠÝU¿Áü(`xt1™¥Ù¼.y«©§Æ9vf?¬øœÅ:I‚0yÈÁµµŠÆ¬¤¶;(F2Z­F$1G÷AñÏçR`ôÆ)1J{VîuZÁŠ«¨G˜CŽªJ·Í6Dó"dõ§grgh´vÞ¾û_‡–&oÞ[HѶIx§Íø tµæßï~ϬÍdĹŽK§#ðÚ^½&´¨¬ÅFW‚ QŠ)j ¯,ñÁK±t›…[GI$FÜ8ßž:kêš®¤$Š5Ê2•tŠ>0x䜟ֲÄ.³4MòÈ Rb:ו‹qÄI(ž-HS´Ö†ìÚ¥¬]È{„ýzU)5©ú¸•G«çü*šÛyb~œT‹/E¥O-KâfñÃ%¸×¼ºœ`É!ʨÖÝÏp¿­Xï@®Èa)Ç¡´iE<2–§ÄöpÞÇ;˜Èdd‚Žùm£ñ¯]†Þ+h„VñG c¢F¡T~¼DÉ5­Ò\À@š6FÇ e9ó½¾ âº¶ŠæÝ‹C2 #'º°È?‘ò9í7 ©ô9++1ô;Ñ^ ˆ•æÞ<‚K[ê.Ö–5‘d'9–3ÐëÒk’øƒd&Ðâ» ZÌ2ÄýÔ~æÞ]và'Ë]_g§Þ]7i&tOÕ¼W’b™HÉî¤d~”úÂðuà»ð̱gšÈéŽT¢²VõyéºUeÑŸQ sE1) -!æ±(ä|j$Óm.²wE)LÙÆI?÷Àcx.ÿìÓÍlÎUZHæûª:¹ÿÇWgâ+oµøvú,‘ˆŒƒ'(w€>»qø×–iÒˆµHPË#yEXeIo”gØ1SøW×duyðî™åãai©w;¶Ôm®ïç—),lÂ91™“+Á=‡Èÿë$‚âqnVÛ´§—“Ü’ßÂ9gÓ’s\ùµHcÚX0,¯‰?¥hYßZOk¦B—+q?œ‹( w«ís–SÈ9æ“hg7«OçëŒì7,ÍOî£ùUA G‘ÜT—n&½¸€KÈÍÈã’MDPtã>¾v¤Ÿ´rO©íÁZ)4ŠÄ’HÉôâ¢i@ÏZwaƤuîF~µ)7¨Ýˆ üÜTeTœç56:ð9ö¥1drsNöЦ O^´¾KØj² ÇL~$Ô†, ~ÑÌž‡ô§mb9늶ÈWɨÌlO8ü©ó1Èlp:tÍI8Çw«SûÜ{bbNr{u£…!8àúâ­G#wÍõæ¡ ³;rsè*HÃrÇò¥Î/ n1´cÚžX°Àê UYYzdþX6 àÒçRbØ$g\Ò©äàUPÙn½*—Åô£œ9K süþ8ü)B’äTgìÏnE.aØ”ÉÁ 1=ñøÔHX·ARƒ—hü¨æ@Ãqê?j¡<`ÿ*0Û²TOZx`z.OÖ†À6íÿëœÒvÎ1øÐ]—±Í(‘P?C`BÄÿ?J¥4ß1éÏéW%rÄà zUd Ô‘ŸjqÜh‹q u¨e$ÇOCV!*)Ê~ž•°wc2íÏSŠ„“†9Á'¦¸`.9íž*´ß*müMwCddõlçµY ]‘ýÑŒVq«oæNíêÕ^½«E]Gy6%*ˆŒQJ'’h¸øh˜Õ®»[·þ„µéÕç_£òõiGalGþ<µè´ÁQ@Q@Q@׆[% ÝŒÜ8ÆìgäoqŸÈý;Š:Gü…në³:½á–Ɖh7c71»ùÜgò?N⎑ÿ![ŸúìßÎÎîÛýX¢‹oõbŠb,•«©o¥l•«©o¥r¾ÿ‘šúæ‘®ªÁvÛF»vâ†6ã7l.?!ô+•ð×üŒÓÿ×3üuV ¶Ú5Û·D1·á»aqù éHeªÃ³ÿYâOúûÿÛhkfWhâwXÚFU$"c,}H>ä ÁÒ¥yÓÄRIo%»›£˜¥*YÑâë´‘ùù«ÃZ,w2!r}³^»áÿ†ÐÝÏÔ±<ª£LúØ}úãðoÛ [¤·En¯p $|‰ìzíñG³JWnå:¼ªÑ*YiöÚ}¸‚ÖŽ1éÔŸR{Öv­á- [ÉÔ4»y\õ.×ÿ¾—õ­Ð(ÛWsw8?áì,“e_NËÉ·ŸæPÝŠ‘‚?\þÊ|WÓïìþê¾tÅûœÊŒ Þ§ãúW±Å>1óŠOR®Ï4}Vb²3«e‡¨®vûÀZeÊ·ÙÚKrxÀ;—CÏëXU§)+nua«û Фnš<u„SŸ+õ©nXY€'#ñð¯ŸÎå短w~ ׯÂežs—pB  óì+ª4Ô#dxøœmLK÷ö=~;ø›f‡N¹ Ù#ƒŠâíõ5ºPch]qØóü©æPï²FÿP+'Z1vlÅRmhvà…@À§ùþ”ä—‹¦jñO“4fŒ|¥ñ‚;ŒôªìWq;`:ŸÇ5ª©j™“ƒ‹³F¬n¬*N*k ÝÚyÍ+FXü˜ã×üúRËáûÕÿSuû8+þ5©™â>2Óÿ³üUx “·Ú“ÉÉ?MÛÀúT’ -Ô÷iü+±ø‘ êZÛjS[ü‘1†I†åI9àú½pº|˜/â+*‘÷NŒ<­+ûÑŸzANí\§ 'zQIFhR –ÒõÈ.Óv#‘d!N .~aøò?öPÊà22²žŒ§ Q^/¨®H9Úk·Ñ¼c¦ZørÑ.¦?i†//ÉHÉ$/ ƒÓî…êzæ·~ô9àÔ&âÎË¥¸+C-…ˆª¼íŸÍGÿXW^$×u2@º™SvBÛ€{ds©ª§‡«QÚ1¸ON VzÞ¡gb»º† ýÑ#…-ôëñ?ŠôCHžÂšf”)Y6ªÀó»·a\’i—21iYP’Kî9õ÷üêÌZT)þ°³žã8§?­zT²\Dµ–‡ \Ò²*YêWvvíml@ÞûÁÛ“œÇä*ÇØu}DþøK°œŸ5°üÿ­MÓ$:ÒEÎÒþ^[©€Oèk±â¸ëNp|¡êe¹} L=¬Žv /âàŸUŒSþ¥a@®Øêÿ6Å_¥®w93Þ¥ƒ¡OáˆÐF€ ãµè¾Í¬3€0àHüê ük²¬[´†qÖ6Ú~‡¿éúÑNV’fY.|;·MLlþ´”ØHh‡·Ÿ¥} _4S>u;«ˆh õ¢˜N2€÷½KÁ7ßnðµ¸f,öÌÖîHÇÝå@ú#%y‹ ÊG¨®³áµé[»û,wÆ'Aü+´íoÄîOûæ¾w?£ÍKt9qÒç¡þQHkã0ª:͉Դ[Ë5@ï,L#Rxߌ¡üøU‹›»{8Ä—W@„à4®gêkóÇz5¡ÄRMrãܧý[}3[Q¥VrNšli7±Ïü<½[Ë-ćE`ÚÇêw'å]Þy¯µÕ$Óµy/tôXC3ùq}à¨ÙÂûàcñ«³]x‹UÏ›5ÉB6O”„zíàÈ×­ˆÈñÜG´§³µýOV9…,=$ª»y«éÚy"êöœrP¶_îŽJÁ½ñæ e¶‚k†„FüO?¥rÐøjS>xÐ÷c²>§ühC¡ØÂè̬?ŠSŸÌ?Jõ0¼Ö³þ¾_æyxŽ'£!¯§ü—>7Õ®¤1ÙÇ9åBG½ñøäʹFó"bP–3Àa÷Xzb+½Ž(âŒ$h¨ƒøTá\¶½—«;þµðøqÿŽçñ¯^¦KGGš—ÌãÂçRÆ×örVìzšiš~­§As 3$Uš=²cåa@$ãƒÈ¨îtÚT“Λp\eVoAÈÆO>ý)>\µ÷… L³½³´qÀÁÊÁ+¬û·;:ú×v{ \úiˉd€å†9¹§YiYjpÜGm–kgh*Ý2?½Ö»`ãªþ´ä²ÜqŽ´®Ê²<–älº”‚޽56ûýkFùbmFä®Ò†g*}F㊌D½Wú×ÏT·;G³‘P'Í ´²#c¹öéVV4 ŽyçiÞO<ãð:GobyÏAK‚GOÒ¯y“ÈýiÝ@öúÑdÀ¢ÙÏ-î1N'ÛÚ®}™;s޹éH`\c#ëšVAr£€jF:µöeÇ'n;æ£òB©ù˜Œ÷äÑdŽîí;æOáÀ÷5 ·Î>c‘íÍ/ÙNq¸Š,!Ïñ ­9YBýáùÿõªAi“‚ÄüŠp¶Ãí Ùú Rå ‘2îýsšEAÀ {qÖ¥û)9c~])E©$a±Žœb—(î{6…LJ´Ïúô‹ÿ@¡YúC¬>°yKHË1ì å´ õø¥“UŠâ=T>ËQ8cjTåÜü»“9÷¯¨§ð¥äx“Ѷw5ÈüEÇü#öù8j_ý꼚½äº„úÔsÿe[^ý™|‹¿/f&æ@>p[®[§jŸâ0sáè6OÚ—§ûYb¿&]â¤y 18'½;r’F0Z€‰Aç ýqýiÛ\žzûŸþ½|òG¬M”>¿‘¥BœsÇãšç}Ži†6'©Ó$ZÆ7€iG õâ Ù'÷¹õÉ⤘ÆIõ9?ãC Åx#=ýë=ùœqô«S+‚*B¯ãN: fw2j9“lgƒúTª®€ S»g ž09'qÕØ {‚áØôŸÖ©Þ˲aÎõ©Üžy''Þ³56eµb>élW©ê‘„¢Ù‚çæ¦Ò“Í%z’v¢Š3V,×uÀ=€ÍWïZ6¤lü|ÇŠíü Õæÿ¯vÿЖ»úà|ÿ!‰ëÝ¿ô%®ú˜QE (¢Š(¢Šî¼2ØÑ-ìfáÆ7c?#{ŒþGéÜQÒ?ä+sÿ]›ùÕï ¶4KA»¸qØÏÈÞã?‘úwtŸù Üÿ×Vþt†wvßêÅ[«S`ô¬}[ýK}+`ô¬}[ýK}(•ð×üŒÓÿ×3üuV ¶Ú5Û·D1·á»aqù é\¯†¿äfŸþ¹Ÿäkª°]¶Ñ®Ý¸‚!¸Ç Û È}JC-VŸúÏ×ßþÛCZW—sZìòtû›ÍÙÏÑ¿]î½}³Ò²4©^tñ’[Énæèæ)J–_ôxºí$~F€5Ü‘LRh¾@2]BôëúœûUØÙd@èÀ©èEWeù÷ަªh1“PYdkqûµ>èÎ>½~¤Õ™#[¸ RÒ(1\ÄýkQðçýWVÒn>Ï{oäùrìWÛºTSà G"ºêÂñ§†á2ð•öƒöϲ}«Ëýÿ•ælÛ"¿ÝÈÎvã¯zC7±F)k/ÄÚ”š7…µMJ¦[kY$Œ7BáNß×=ž7ñŸÆzn¡)ðä6±Ý}•™¥¸Ï1K‚B= ù»c×-lg†`ð±ÛšÑ¹;Îö“{¿,Ää“ܓܚuö ãÇL^¥Æ]\éZÅÑk©ín\’ûôQRHøÏÖ½Óí1Æc§¨Îy_ˆ-àµÔg€qùfªZ]ÙŸ§ê÷6s+£° õEz6™ª6£d“£|Çÿýzò–` Æ9®ßÀ³ÆææÑ y…<ÁÎÛÉ?‚ïüëšµ583zråg`—R/8éÅnø~ÒMZýHÙ`B »·§N¦³tí.}Fò;kt.îÎ}+ԡЗLÑÚЕ÷= ‡ÿ>>žæ°ÃaÓ÷äiZ³Š²/ïŽðF AY7Éœ÷Úw–r0ÆRRTqŒìl¯é\F½âý_J_¶ÆŽv’*¼OÀÊž7¤gžƒ]7…LJõ¸!½[Ûkù& $|¶W†ÃÏÜè+½z:|ÌoI©jºÞ—ý­¤ßC*Žg) ) ¸Æ;€öé^3m(Kˆä=ýz¯Ä?Úiš‚èz*ÚÃ5¿Ïu"Û¡ãˆÆAòxô¢¼¡æ7<Í´3±b…“Øö V¿ âìÓ7)¬èƒ.Ê£ÜÕ;x5+åU·ŠWRq¹W?ïõëFßÂ7Óa®%ŽzŒî`ç\jУüI¤zPöµ>”ÞþŒn9¢˜ÓF:1cíMG–i8£ÜìpªI?J©â©Ç©iã'ŽõcCÔ—Eñ µã‡h‘ˆ!ê¬ þ8Îqê*ý‚üC¨o²4·V¸>XUûߥ3ÄžŸÃÙ¼× 3\o å© ㌞¹Ýè:ññŽþ¯Ì®È©%¶†õ÷ÄuÁ[ $•î>ê¿üUbÍâOkX¤–8Ûµ²lèßx~u©¥iºx²‚á-ÑãV%¾ls×§>•¬8úVÔ2|5=msºŽPšNlãâðÖ¡w!šòuWcó3±w?_ÿ]iÛø^Æ Í$Ç¿;GéÏë[žÔv¯JiÃáG£OB/êq^(Ó㵞³ªÅ‘¼'òa]r‹ˆcWjÌ‹"©ìd:¯â›q.‘æñ˜dSžø?.?2?*­áù|Í%T“˜¤dÉêyÝù|Øü+¯.Zò‡t|_áTmR+úf¡¤Í™Í{'ÇZÄñ,y··˜¸å6×pÎOÓoþ=[dÕ-Z/7Iº\ã—Èû¿6×n?ÃOÚR”|Žœ_eˆ„üÍ„ºÀ‚MGL|6ð·1®qÈù\ôÿ®uêK~„œÄÏøWÎ:-ѳÖm˜Ÿ•ÛÊaýàÜÿ}mü«Ò¡¼•ÚÌŸî±ùæ.½J5,¶?K¡J…Ùè†îÎU×ýáþŸªjOg¦Ï-”M=Љ6œzì:ãÚ¹%ÖnÈÚ'“ŽÇ'õ©\¹ipHã•á\ÿ^ŸSu†‰€4{˜#Pa”c“M’ÚíW償®ô®œküq£{•ÿM:´=e…'r§õ®;S¿S¯œ»%ÂÆ_Ê$Ž¡jï2ÅZ&R+¯kë)clK{b•fÒIÉ„ç¾èÿúôíK»3ìr©>ÿà}§¹SŠ~ôsÓB+§òô™FQÇ#?ÀS›dçaÉõcþ4¹"öswG<8é·è½éùv®tH% by¿Ê¡“C\änÏàiªMí$.eØÁ-Í’: p]ÀîÀã®4˜á¤™\"i­¡ÎË"3ÉÁÒ©ÑŸK}âæ‰“ŒœnÀìæ˜7=²{ÕÛ+RýT1ÉŸVQQGg©Üö2þÈÈ©tª­l;ǹ d0݃éÆ)œ ?N*äɓ$Ÿï.*»]Æ‹¹±ø ÔZktRHr Ú=;Ö¥¦‡qu¤\j‰qA `å·<1ü@Tºyâ»´–Ù"ILX”°9Êxù…2}lè–WÞ³ÈâRe‘d=HN@éóÖ·§I¯zª²1œ¯îÁêwöö)©xNÞÊY$Ž9ìÑ¢ 6 Œã Ô÷š-å´00ù$‘< R‡#§ÐÖT­â HÜ落m" ÿ-K£°ä×?ÿ ö¦zAf©Fçÿ¯UâáI%4Óô8UqÔê¤ð½”—’LfºI8¸’Ð8ò^Aƒ¸Œg¨Á#¥gü@RÚ Æ~Ô½ÝjÆÿ„óTÏú«#ì#|Ÿüz¨k%¼ÖmVÖá-Ð,‚@cV ÜŸZ¶:Œé¸£ZxZ‘š“9í¸ gÚšT‚v’ÓÊ¥u'† \Š_+åÚÁÒ®éÙÎ=¹ÇJÇ×|G¯ÌAg†×øUr¤éÇ~¿JÉXÂ(U\c€®¸›»Gc¦.¯#Çî`k+§Ž`èÊvº·XuÜS¢ºD%×µt^,Ñ.®5YnaE‘ŸÉ“Ç'ß¡÷'=s\ˆ†H˜Ç"³ovJ#'*O ƒùÒű¢LaòÊ}í燧>Æ¢Pœ¨ÆOÔlË[UxnÓLÑ4˜®¾Ð-ÄjæCÁÚà {f£×uûilå·‘šXm“µˆ#Œþë”ð ¥Î»á{FPñ[ƒ™“ ñƒØm#®rsÅwz‡4»YcƒÍ˜tšs½‡Ó<À ·DC”SîÎ×ÃÿiÔ#¿µÑ™´ÔU2«Ç´HŠ ùA;·gŽ2<çÿ޼%k©i®xVcÞ2¸¶¶Œ¯”Ê(W€N2ŽA#ÛÝ ‚J‚Aõ®?X±“A¹mJÔÓ¥?é0“Ÿ(ÿxg¨õ¹çž3ÂC÷ô‘ó¬òÏ5ìÍr®nB$fpls»<çŽüæ¬ ‹Ö½GÅ:N‘ªß¤áÚÖk…§ FXŽAŒ úö àÁà B8µw$Nܵ§ÙÛ>t˜ÊaÆøÍnªÂtšµŒ9Æi²] Í¡#*ÂEäƒÁüó®¤WžxzïìºÕ¹””ùGopÜÃ8?…z|6qGÙâ\–ÒÔúœ¾§=»h/SF8Á ;×’v…qþ2´ÅÌA~YÆøF}È'þù®Â²|Iiö­|^ß.NÇSÿ|–®ìº·±ÄÆ_Ö§>*Ÿ´£(˜v’™í"•‰,W ORGþb¦éYz<£l°ðwžOcø?:Ôé_µájûZ1™ùÝxrTh)i¢—¨®ƒ!VDd|ìpU±èx5ŸáÙ^ßVkirÃ#(¡zO›$¬ ç'ò¯˜å¶úmý¡»Q‹“òGW>¯co÷Hã óÒ²îˆðþÛÿ¯3¨>”iy¨'»·µÈžxã }Òß7åÖ½ùN1W“±ùDa)»E\›ÞŒ€Aààô=ëãÄÑ‚!G”úýÕ?Ÿ?¥f\øŽé¾áŠ9Óž?J⫘ááÖþ‡£G)ÅT×–Þ¿Õ̹Qí.$2@åCz²œùŠôkIc–Þ9#bèêIêAäW›Épn$iY‹;Iï]§‡'I´˜Cm/1œv ÿ¾q_šÅKßsô ½¸®IoccÍ9cÍH5HÌÙH~ƒåS}ô ×­2XØ`•'5àÊ÷=D’[,}HéKÎÊÝrFîZd?ò̯ÔéOnåc¸â¡‰â•Cªlã2§ùU{I­˜¬»µ“§”¯¶0Km\ € é×ùUˆ¼=¤Í ÜÝËw3™¶¬¬Í•û 22O5Î6 Aú‚Gò§4’íDËå‚NÀÃo#“À~B·¥‹œ½ª3%/‡FkM£4îÌo.K7,ZLäŸ_óÞ«Â8«’²Ç¸P?­g£Î Ë'Þ8ÆFoƧ[Ë”8ÉÏ¡5¼¤ýår”RØt¾˜gcœrI>ª£è×HGî ‚w`ί¦©r2a×¹©¿¶§_¼úŠ9à÷ˆÓk©—ýp~ì,HÿžxoåQI¦\F74r¯³ÆEmh3aâB{ÅJš´*r!Ùþé¥jO sHå%µnpÀ°ëƪO+´óÞ»ßí;W8gŒô-‘üé¬t×Á+ “ÿL†Oéš9)½˜ý£8P¤u8üêMÇøpàX®¾M+N“$¿é¡ÖªÿÂ9mÉI¤õaÔRt;2”ÓÝài$0Ç9¦2·PHöõ®‰|8È7JÞ£ÊãHú år’FG¡?ÈÔ{:99üÄC“\¾¥!iXdg Zïït{刈ž:’9¯;½WYðãi$zsßò®Ì56Ú"M=ŠrÍß1\íÒIç¶ô`sÜbºhTË{``—ÏåÏô­Ð„®ÓìEwª¾Ï¡ÏV—´Òçš‘I^‡q¦ZÈ kh‰ÿtVEÖ‹d`‘–ŽªH!\VÑÄFG,°²[3“íHiÄ`šozè9‹0/«FÌŸœ}xª ò.?:ÛðÕ…¾§©½­Æ¡–èY£’~œ…'¢äÉôÇzž¥=Ž“Á:Ä¿õîßú×{\'ƒ#1ë· H8†AÈ?2×wVHQEQEQEÝxe±¢Z ØÍÃŒnÆ~F÷üÓ¸£¤ÿÈVçþº·ó«Þlh–ƒv3p㱟‘½Æ#ôî(é?ò¹ÿ®­üé îí¿ÕŠ(¶ÿV(¦"ÁéXú·ú–úVÁéXú·ú–úP+á¯ù§ÿ®gùê¬m´k·n ˆcn1ÃvÂãòAÒ¹_ ÈÍ?ýs?È×Eíž›cÞÜÁi•3ˆÆpÜrž: C4«Ïýg‰?ëïÿm¡©ÿá&Ð?è9¦ÿà\ãTô«˜/ÄSÚÏð½ÑÛ$NN-âÇZÚŠŽR ÷ÅrV4†d>|EJýâ¿Òº5 mBÖÓ+7\g}GéM4Ö„4ÖåÝ&äMo$Lyì#Û¨ý hŽk‹œ:WˆÄ’I¶)âÄ«Ü`ð :Çñ'$ºf²Ò>Tû¯!ÿ?Ž?:ÎU£vRƒ{‰µÒž†æV±q¶Ïdd•yUààóÛ¯áXpÆóαF ;ªä’x«ÚåÌ.mRQ†ÈS3Œ#Pi—`Õ-/GX'Ixÿdƒý)E'-M£¤Ooøe¥j¾·¼‚õ‚ Èf‹«#Ž?Î;©z!Ô p¡‹’@¡õ¬}5 ò¢‘óŒ;1Ë £k{í^zô«ñÉûÓã~3+¡ÙœÍ»Ü½ö™™C ûàñþT BI·¸@¥ÆÜ?*ùíÿÖ?­Ihñˆž9HÁèqÓñª·ÖˆèÀíeúÔ=Ì+`<;©%“,¥LO’Àn0·'i<œAžÄ˜g¼3Nòò¥ŽG=*ÍÄ’´-nϼ÷¿‹•ÄøÃR»Ó¢ŽÞÞ5š=þxþîH!döܾ¢³’KR✚G¬Á–·wQÊ|¿/…U<…@qõè6_m°‚çą̊ mèø€ú¼¾y<ÉsøWeàÛ³-„¶¬I0¾åÉþì?Oü ¼Lê=QoÔõréòUtï¹Ò×Càïù Ëÿ\þ„µÏþ5Ðx?þBòÿ×ÿ¡-x9wûÔ=OKü z½Ëø»QU6šRꩦIsºG¹3Ê"Ž$ŽKLÓG‹b>²¾óí£ººanIe ÄçF ÷ãÖ¾ã¡óGU^â;˜añ¨$‘Aû\¼wûçµz§ƒ/EÕ…ìgSû{Ãy"ù­(rW?)ã <ãzW”ë>k¯jÓÉuï¦`#Ž7œ‚N0{wé]X|kÂ^Kª8ñ~Ï•:ŽÉ3]Z0q÷cŠ­öÛë¶)± d¬(XëÜŠé­ô :܃åX²Ùúއò­D"ªªðFü+ ùÅjš_ô<׋£áÂþ§#‡µ–->ع2>I£ýqNÕ4!§i«2ÊÓH+»T)ž§¾^õ×f«_Û}·O¸¶ÚäB1ÀÞ9\ÿÀ€5Áõ™¹]‘«šmèr¶>[@"†ãšµÞ³4¹ƒPAV…iÔVV›?[ÊꪸX5é÷sÅ%%dzÃp*zµ­ðÞôÙø–k'rê"¡@ûΟ0?@¾gçYê´W¤ëַꈤIJ§VËøŽ?U)ûj3¥Ý~'‡Ò½8Õ_eþ ÷EAv#h¯ˆãl%xR”£7e¹ÔžM5Ý"Fw`¨£%˜à ânôà`@Zbð£æ?!Áo˜¶1ŸóþqNâ±/À?Jkü¹bON?Ï4Çî¨|³ŠSÀ'#èhé±² CCmA’xëœR( `GÓša@iqþñÅ€7{6<½®>´ð§ ç“HI_©ÇJ>RpAþ”€qUêAÏcHH#‘œ÷Æi•¸ôö¦!`I‹SéEÂÃãeazúñNÜsÓ­ éÔRƒÇ¯®)\,! Tªçž¹æ¢Ž/)JnùzŒ“RF­å(fÜqËc¡“‘ÉW†4ª¸=q÷¿ÆÃ‡òÍ5@n ÷<ÒÇ[ÄR5èé °¹)ààz hrÄaTŸB0iû‰ÿ1‚ò$ÚCq‚*“ìû@%Içœi«0n=?ºE*A…jFË©ppîӌò±Í ˆšå°AÀõÅâC×ràõ=ê2F>lçé‘Ld9ÈsôÎ)ÜV.}¶uJØÿxàPº¥Âò&lûÕ ¿rÞÜ Mï’p0(» GY»ÙµŠ8ÿhsúW›øŠè^kWlP¤¨Âôà ×bÒ°FÜnƒœ×Í7u$§åÜÄý2k³›m±KMÙI 7dË*¡)„Üp 8ïÛÿ¯ZÑ” 㯯È_LLûAì>”ý?QkI“sß™}µzƒ”y–ç4±IK‘­Ù* „1#5VæÜyn8åH¢;”º&·˜‰ê@Ïä ¦ÜÜ¢+3¹UÝ€]Jçé‘\ªR:H4yËðÇëIËïN˜~õ†{Óà!Ÿð¯^ú=µ&j»£áµ8Q”0lŒ~© ±§¹‡Q·uê$õ¨{zG†íßT‘•æ8>ë]Us^™¤ÔåúŠéj ÛZŠV¾EUQEQEw^lh–ƒv3p㱟‘½Æ#ôî(é?ò¹ÿ®­üê÷†[% ÝŒÜ8ÆìgäoqŸÈý;Š:Oü…në«:C;»oõbŠ-¿ÕŠ)ˆ°zV>­þ¥¾•°zV>­þ¥¾”ÊøkþFiÿë™þF¶îá» ÜÃ`¬·fɇË!¶°8]§ð\z Äð×üŒÓÿ×3üm]Ë §‡ä’ââ{Hã·‡/Ôó€ ¨äœ mz•/b‘‡e·ÝZíÔ¢¼ˆ!šû†”€s†RY†=juŸúÏ×ßþÛCU|?-„3êM%üwÈŠ÷/ªWX€%OËò…ûÝ=óRéW0^'ˆ§µž9á{£¶Hœ2œ[Ä8#޵L”yž“%ª¬·‘DJçË9,G¸ôüjªÝ6à›{¢ èè}}«˜›Q•›2ÊÎO'&“í›ÂŒ žùü«6öGMº³¢:•Ä׆âê2N½}ÿ*€²§Ê¸èg%–¡wËkm4ª¢Š×ƒJ»Â™Œ1€¼–”ÐJµ9¢é¸¢÷ÍO†Œ[ûícû_ü·1y›vüÿw#9ÛŽ½ë_MÐb¼“oÚòWæ;#8ÇÔà÷ô­ËS¡ø:â=sU½k{{rCHs Ë ¼*®î¬:gÇ ”ãV1rWºÐÒr¼]Ž7æxÈP7g!ˆÎ Mow¿Ê¼d--¨Û"3˜²8Èç°ž³]LsxnÝ¥Õ™P>e.®xô-ùSoç°Ô|?0³—Ì…ÙcÆJœî7#ŒýjpøØF¤TSß¶†²rŒ%Ì´;íæÆëI·ŸN!¶‘rª€qÇpr+Â~1hé§ø´ÎH¯â3#— ¸ 1ÿ®ŸŸSðûÅIm$qÍ&,¯›'="›?@zýéŽt>5è'VðC_Cë2A8 s埕ÇÓcþå}Hª‘º<¶9j|á+áÀïZ ë£ñŸJÅy0}ëwGe–½Jžý¨HnD c4×°ÛÆ»šW ¸’Mt1èfÆæ?¶Ø´—Ú^ds“è}ÿ £ç »{À¿êeYàkÙ´}FÓW·Y#(áW,‡‡FçߌäúçÒµ…‘œ¤ÍŸ´bÊÜG—‚8ÂÁ¸t\Ž_O¥tv€1fà·VDS&6µW»ÓÔ{gùÖˆ…ˆ 1Ç=xô«næeÅ’3 §vIž˜ôúzS˜f2@ÉÅ>07¡äÿ"}ú :?_ÿW¥AG+­n®¤‚¬ø út¦ødÈÀêÖÁ@7›Ôó‘Ó¶ç^j£S¤_Ütsǹ¥§é°i©:ÀX‰¦yÛv8f9 `t¯ ûA“]×­ÉɃRœŒ­#=Îàçñ¯Oÿ„ÛÂÿô¶ÿ¿ŸýjäRÃÀM­Ýê âšâòF-¸M»÷|£fsž^µ•z3ä³V9±tÕzN1zîb­šêÿ³|#ÿA;ŸûèñføGþ‚—_÷Øÿâ+ƒØËÈñ~£SºûÎRŠêÿ³|#ÿA;ŸûèñføGþ‚—_÷Øÿâ(ö2ò¨Ôî¾óÆïã6:ôã ó7Öù°=†qøUúô [Ã>º•.ou»Èp¢ |åPy'ÇדL@ðŒmñË `=òm:nQLû̃¨Qtêëé©Àçg×¥zü#þÿ õ×ýþOþ7Ht*îm~äS:ñºËØÈú›PZµ/¹ž~j–¢™‰dî§ñ¯JþÆøwÿCßøÿM“ÃÿçŒÄ|Epwà \&síûºÒf¤™Å‹Íp•¨JÞ«±«àËñ{á%wA໳å÷*þ4ëÿèZzŸ3PŽWá ýá'Ó#€~¤V4ð Ñ›X( 2éºÆ´àá³X#ÄÖË·}£ƒê§?Š´ä8y&ŒõÀ<~÷¤©Ï°œ—siU@,šyPË’¹?dÅâ=&AÍü@›Ë&?:·§i6<»ËWúJ 7 -Â÷,`z}i£!€çŸOñ©Wäc‘Gð“ù ŽQÜà´sÞ—8è¤ãÚšU{~§(%y#ð4¬HåÂíÛÙB•#×ëùR§Ï“åȤt,x5!Ü!‡Ó§e‡Ls@Ìã…$¤ôý*P×}!à n>‚¡‰äÞC–À鹨¢À<–WÀ#ž@Ú!9š28ëO“lœ¤çŒŒàûR`aCÄt#ùQ`"çøˆ>¼ŠX°>O`.òÙî=sLF-¸Ic·­<àŽž´¹þ´ÆÀ©_OZj—¡èNåT¬½Iwæ.ò t4N1Å'›†a‚¾ç¡¦ùŸ:‚ ã¨è(‡Žù¤dè2i;}ãJÇ¿½$V»2Û鳱݄ zžêk€ Àé]wŠ®Ù’ NY¹ Ÿ×ÆÊûarzòGµz¸HþïÔÎnÎæ\¤ËpøÀœsŽ*5ã·î”ɯ]++<ÛfφïLšÂOîæùqèÝô­ÿ(þú}¸Û·§ÔW+£Â'Ö­•AùÌb;çùà~5ÙëÈ÷£žcÏ>Äó1I*ñhôpºMRÕr!¶0¤UT]ÒV†G•é3ψӑÚ1 <ÔµçƒHlô_XÜÚêÒ¼·&X͹'r×o\§„¥óv6Ün >üWWNèRVaEUQEQEw^lh–ƒv3p㱟‘½Æ#ôî(é?ò¹ÿ®­üê÷†[% ÝŒÜ8ÆìgäoqŸÈý;Š:Oü…në«:C;»oõbŠ-¿ÕŠ)ˆ°zV>­þ¥¾•°zV>­þ¥¾”ÊøkþFiÿë™þF´u‹)î|5åÛB^XRÚQKlmÅ@ÂààtÀú Îð×üŒÓÿ×3ühë3ØøkýÌ:[@. {Ûi m î éH}5¥™µ]jße¹¶¶©n‚â#;n,NÓÎ@ÏÖ¥³ÿYâOúûÿÛhj(M§x–ëIû]ÍͱµK”7™qR7pp>µ5ŸúÏ×ßþÛCO º³Í›ÁÚDVÿ,nÏÊò9'#¨ãô®vò(-¤J„+È*#ñª“|L‚äm“Çì7øVcx›O¸™Þçí1¡2#cwëÁãð¯¾^¨â¡Z–Í«ùjwR¯zn-kfF¾µ;žúV‡FéýﯵUñ+iú'‡ÖÞÆEn®‰Ç'žŸ(©.âœ[C4ò™<Á” ù8ÉÎ{W5â‰h²Žå[÷ÉÿëWž" ¬¼Íëb%84ÙÍøNø}¢[9Éò%mÜmnÇÛÿ¬=+Ýü5ª&µ¦M£jJ$™a(áÇB~SŸÏüs_4XÈȲȤåXqùצxo]’{x¯múÏ/鿌cß#ƒÓëɯ¨Säž»38ÓUèòý¥±çž0ðeç…µ¹íš9%µÞ|™ñËØtoZ¥¥ÅtŒcØ#LX®xÇ?ç½}Dö_tho1´ºòPå£nêúã§5ÇÝü"™åf·Ô"ÚOã#ˆ5Ò¡Ðó¹šÑž?,RÛ´R “#!׃ÓÒº?­Ì× dïäê(¶gn%PsåžÛ¿ºNx$u Žú„—ª6¥n£w?º-Ç|r+¥Ó>èšt‹<þmäÈw)”áAúëšÒ1ŠÕ²[lÎÐRî{‰ã¹·’/-‚³:mgŽzžºón±ñ«!¸=¿ÎkUñvk¬-€Ô!–çiß Gqo$±…üH?Zç5ÿêF7ò”»l1îÌ1øŸjNZh="ÖO(²Ëò  y$ôéþ{W%¨øÙ’å­íàX]ÞeÁùÏÒ1ÈúœWŸÛüCÕÔ<°M°¨Ée· þñ<ä{cŒô²5MM/n[Q…¼ò’dGÊI‘ׯ$ƒëPÚ)Eõ4µÏêov²owÁùd”åO®|£¨ªRÄž)„‹yÌzŠ–?,ÇýƒØöÚzñƒØæ 79ç6žÞõjßNd?!¡õª¥9r!NÐ32¢³¹®cd•Nßœ`ñëS_Ú<"'lFÜötçÒ»u¹µÖcjXŽíGÉyÀàž¼½zuéYWú5ãøzK¹ e€?î¤p~fžS:šôç„„i5ö‘ÃL¥Q>‡)Hîóÿ&½àÿüw¿õàÿú2:ó•ù%ÁïÅz/Â%Yv‘å7Âåq»$©ùöê@ÿv¯\ê–V„¬÷Q£‚ î#êH¯Î%¤âŽ”dª8E^ůj3\õÇŠ[[fcÙ¤ `ýr?PÚkí‹.ð`MЦþß‹V°ÃT—Czy}io§©¥â†M&Xä’$”$^c`’:àw$d~5ÊZ^,²”-ódcŠíôß…:¥Ïï5+Èm7rUzùÏ ô©¬];LƒLñïö^£Ë w¯œˆÎ?Ú;8ÿjº¡‡Q,Ïw.u0:Ó–¦DS_ßJa´¤ ì†2í^õµgà]rýÃÝì·\™dÜÄ{ŸÈâ½B"¶‰b†(âz$jÀT‚·8GdtVÅÖ¬ïRMœ}‡Ã½2Üy,×oЀ|´?€çÿ®–ÇK°ÓT}ŽÒ1¹?SÔþ5oŠ*îsžD° ÆÒÙ…)œÄ¨§?#ÿ«ðd?…uýsXìüVÒõÏ´DT•àïB2Äý@ÿvµ­n>ÕgÀ]¢TWÛŸ»‘œ~*a½IG¥8 LÒÓ$ê/?äŸØ×Sÿ¡½yŠ!6úÏž™ýò+䎗ðPõÛÄðØIónóûÇÞýº~8Íy¿‹­|Ûn’ÐÈAô Óù…Orú£(0e :‘Kš­fåí—9%~R϶*|Ð!sFi¬ÁT–8¹¨òÎ_'Ñy¢áb¾¢¿:?<‚¶?ýuë‡ zñZwË4{Bàœ“TZm üÛjKHO%Ï ÿ½Å ¬O®*´—ð.y¸îóUSbO•=Ú‹”¢Ù­”…4É.U>ùö汚{™O.@î5¬³J©³3gŒtÇ'òÔ¹v5=Ï]ð¼9£ørÒÆãÃââíw´óyì\‘Éäü»FO¦;Weá&~4ÕÚß÷Ȳ[ƒåªJCæ!N¹Âœ Ç¥xŠ[YÙÄJd˜1-µöO×?…vëãx"ø{k¡Yµå½í¹$Ý[Ì#*ZGl)ݸ|­ÉúŠç’R•ÞÈêP”#hnΟU×|/¨YmítkvfÊžP8ÏLàXo¤è÷ã÷~[ŸökË4éޒ™à8‰±éØã>߇ëDyD†±ÍrÕRæÕ4iÅÇDzao¢jo5ªZ©ò°ë4 Á²N1Á#Ô†I¦óYítÙbc÷Q¥^@Æÿ®¼îÛU¼µ$Åtè[¨PûqÓ¿¥h§‰õØ»i˜ ‚U6óÛ„õ®J´yÞæœt:÷µ´û!- ®9*Ñ\.s×#ä8Çûݪ´š6Œ×0µÔmâbDŒá\}ËÜÕ‚¾*¸—i¹ŽØ…Î6DÊ=çùV”>3‰ÎÙlãEH™‰?†ÏëYû–†rŒ‘a´Ÿ–8uo0´`a lŽs×cÓ¨>£=k–¿Ò„Z¥ÔVáæDs"3Aþè=ItëâË)Làà¬}p{ç5>)Ò£”¬ñÌŽÎØ>XÁ㿦+XFH”ìÎ>KH……oö†ÜþtƒL…†ßCšôA¯ø~`?Ò¢V<á¢oþ&–FÐn°æ[&=·:çò<Õ^]§7tyÈÓŒL|±$~êJÔ±›ø2b¾º\ÿÓBwpèºuÑÃÛ"œýès´¨¤›ÂöEÏ—$¨þ'¤ùº…ãØãRÖc騟éS/ˆu¡ƒþ‹ ÷Œäk¨“Â1|»§ôÞ ÿ*¨þä¹Wñ™¨åOt‡x™+â«Ô˧#T“oô52øÄ(ýîŸ:û¡Vþx©¦ðÝúr©¯b¬¨ªrh×èÄ}ÛýÒ O³ƒû?ˆþeøüa¦ž|~¡¢?Ó5mc¯rk¤Ñü|C¦½çÙ&¼ù¤œÅæl+óýÜŒýÜuk“U'÷kó.œ[»:½YV H‡b,¡pxùyïŽIôòç‚ñ¦åÓ£ç‚è5Ýk2«ýŽ%“ÌEŒŒ“è};qÔž#ÅéæZÇ=ÿQþåÑ×’éþF²þÃiv²\«,-™3þ¯»}=ëcI–}PŠæ!‘œ2ž„wSSxOE·DÈåcˆ’ÛA'Ž{VýÞ›ÀšXVàÛïÚ'–<$¸##=zàôï=Jµ“Š.œ•>Y\ë¼1­C¡ê1K(Žm*ø!<˜d'ùüAîpO'Šõk‹›[F¹º¹† xÆZi\*¨õ,x¯šMõŵ›Z™¤XÕ‰ò”à1¬ÝOÅ -­–p÷·0®ØÍÓ´©ÆD'hÇPyíÅtЫÍ>‚ÆSMûHõ=ËTø«£Û$‡MŠKØÓ†»aå[©Èo¼yÎÁëÊ|OñBÿVg…n^h\ Á ê#%˜8'éX‘é:‰ô¥Ô®/TM#:Ú[¾I”®2胠ç5É –P6ŒW)YØåŒSܹuª]\Db–}°Çò©ú÷ºwÍoè>4¸¶Qe¨§Úì[ |ϼ£ØŽ­sðé¬üI­KmðH¬e]GVÍÕ&úôÞ´»´:¯‡§frwy€*ÝAùtèy®yâY~AnÌ‘€þuþ~Õ{F¸ŸJ–7·Â»YFHnzœŸþ·»$]?Ä‚ÀCx8ïôõÝ™J²©¤^ érjö1,¢³Ô¡D¸U†é8Ž{7øÇÖ¦–Ö[yŒ å²Àj[½:KI¼£… |¤w«ZeÙºuÓï£2ÇÒ2ÎŒOO¡'§NkèðT=”9Þ­îxتÞÒ|‹b+K’`æ:1ÕAÀ<×ð'ÓŽxÍvsé—7úd‹å–¸y’Xà Qæ\g®O?OlV•—…­´ØËJÆRz¶NÓoò{Ö„%žéH;BƒµNFNKsì?,{ÖU±joÝè:x~U©óÏŠ4ßì^Ø¢$b)$jI¬ªäõ ÍvùñUážÄßÈêoŒz:CcªA *4Œ•?V¿ªß¿äg¼óöãþÚGYaq*4jÒ—U§©ÑRç .‡«øœß×ÄŸúªIíVµR[Z¾UBI¹ùùliüO«)§Éo8ó.O”¾ÌG¸½§œR…4 ›v^Hâúœ¥&äìse€$~Ö;цÒAMzî“ðnÚ2²jÚ“Èx&+eÚ3þód‘ø ît¯ hZ) a¦Aƒ¤¬7¸ÿ6HüëÌÄfÕê'Ùy™ÓO »î|夨Þê—ɦØdÉsÆÁ&ÐûA<äààn?wúgÂIÖÕ5AÞ;UÉ#·ÌÃûäÖg‹Q¼'ñEï£VXšt½P‡ætsûÁí–óé^Ê0X0=ƒ^\mkØé{œö›ài„¸<ôº À”´U6Ù!ŠñïŠO¦ø¦×T·"7¹Œ:¿SæÆ@Î=‡—^Ã\_Äí3íÞk”\Ëg*ËÂä•?+§Ìÿ»RÆ·.ZÜÇ{gÔ@ˆæe@ÝB°gð55rÞ½ûW‡݈ßk+GÉÉ*~`Oýô@ÿvºš`âŠ:ñŠ)ˆæ|ycöÏ I*‚^ÚE”$giL6ãþís^¸ót$‘º @vŸ˜ø–…z5Õ´w–sÚM‘ñ´Rc®ÖÐ×’øZIm5‰ì§_.GR­9ó·à7Ôu+¡ØÑš¥u«XY’'ºpTŸÈt¨ìu õy–;()$o$w›–7@m»AÝŒóŽ˜9ÅQ6;›¿ù'ÖõÔÿèo\·-©Òî ¸•ž2Q€,Õý@®ÛS³h~Z[ëz‚Y‘šâ{BNÀÛbç1&=OCßÏîü]á=! 6zdW.¾P.É‘6ßœïv˜y»„dF:Äé­Ë},sšMµÍÍÌpCúù<µwÊ #““Ï@A8Éö½Î”ãª81~äù.pWÚ.Œ±íŽÜÇßtS±oü{#Ë\BÖŽ<¹HÎpÊ0ÚºGMšÞyS •BAd$0úƒT¬t÷ž)ReFȇ 9†çÿÿ9©¨“ZŽœ,Ò¾æ)5Üé1y’9¨çóô§µlÛxf\ƒqu3ˆ”ÈWØô‘5³¥évö“É!<郷<(Îzž™Ûǰô­øìãL¡QßúúÿŸZô2ü¾•hsÉÜÊ´ä§Ë†¹ðõÂ3 Yá‡+â’ëƒÆ?ÏMKR¶sÚî e8d2}Åz$ñ4°µ´®<œ†(G+ƒÕO¯ÊëÚdóÉ ¡—+æ6~qÔ Oý›ØV˜ü®麔úN¤¹­-Jqø“WŒ —¬qÝÕ_?˜«Iã QÍöyrL‘ãÿAÅe6›È=U‡õªí È;M´Àû!5óÎ 3©F,écñŒ§ý}Œ.霅ê 9g‘f tçylrGã\°ñv¨eV‘ât,J¤þ8«ÃU—S'–Þ4DRй-žä“ǵB¤‘t0ò«>RÝÊè’>é`žÝPå`sÆ=ûšã4ϧËç ¶IçÖ­x‚òH-%íf;û×ß ×%;Û'Þ»°ÔbÛ:*Æ8zŠ4µºÔéb¹—WžâàØ•ö‚CÔÿ1I=š¢n‘6¯«¡_çZš±ÑìdI¡i& 'ÈÙ9ÏFSÓ¨øÈ­í›H[dªÈòÉÏä+:­s^äÕ£U/hÕÓ8g²ŠEÊùlLÍE%‹[C½ÜœñßÚ½ íú-Ò=íB‘Ò\ÐÒ.‘¢^ÀJÃŒa³Ú=¹Z˜Ô³ZœU±çŒÄãòÁ©¦[uS’ÄnÈ>¼×Y/„4É#"$’<ŽecŸûèšãàÞá¢þãü«¦-5¡ËˆnÈÑI˜–F$÷Ö¥±Cöä”bŒqÇ5”X†bµ-n_Lf¢mA?Ú¤Œµ¼e½‰~TÇ/ÑÝ“`#»=êšîãp<{ÕëÍnß1ŽŸÞÎ쎨¶yˆl–ËYž(ÀTÝ=+5îϱ®“Æ‘…×ä uPJçÑÆ~6äÍzÔé¦pUVªÑµäÐzÒƒÍQ'iðé³tž‘gõá^‰^mðí±­Ý'÷­Éü™ƽ&ª;-Š(ª$(¢Š(¢Šî¼2ØÑ-ìfáÆ7c?#{ŒþGéÜRÒä+sÿ][ùÕß ¶4KA»¸qØÏÈÞã?‘úw´Ÿù Üÿ×Vþt†wVßêÅ[«S`ô¬}[ýK}+`ô¬}[ýK}(•ð×üŒÓÿ×3üuV ¶Ú5Û·D1·á»aqù é\¯†¿äfŸþ¹Ÿäkª°]¶Ñ®Ý¸‚!¸Ç Û È}JC'–5š'‰‹u*J1SƒèG ûŽkJ·KTñ1´Œ‹tpe•¤oø÷ˆòÌI?‰®†°ìÿÖx“þ¾ÿöÚùïBðN«¬Ç-›K,(#¢78/ë×ß#<‚1]¶ðæËE $„OqÞyåý•þ¦·<z$ó-¹:{އõçñ5ÐêžE½£Ïwu¼ >gv ÔšÖ…MLk>D¥Îl4vêÑ@»†˜œã¸ü{ã¥aëwözl^uã´“¶|¸¾ó9ôWTñ|SÌÖ~„ÌùÃ]J Æ¿@y? éŒÕ[Ú;µ_êP]^¹æIK€>ƒoN~ŸJÃ0~æçE*ñ¼•Œxìn¯oþ¡…cÄPމž‚½I×4ïj‘júµÀ¶²„±’]Œûw£…õ tª_Ø &ËŽ·™"}ì" ŽO>¸®wÇc Ô?íŸþŒZðñ/‰¤¼×æu8¨Á¤w:üŽ÷q¤ªÁÕ9 ÷#¡'Ó®y®ÄÒ¹ž(Ü*;Ž:‘Ó?Óÿ­Ù¤7:¤þlŸt›ÏEàsדëßÒ¹OéñZëp´[Æ HØ0êFæÎzgçvã®k< XÔÆ¶Œê¦©ê7Áò[Ù­ÓJÀÉhãBìF=n٤׺òú3—<–§#ªÖ†>¹ªjÂ=ÒãìûV8ÕÔ³ÈÞ£Õà kTÔZíd HņØú1äg•ûÃÒ½ßEðu¦X…X`¤nK°ôy8${(Qê t±E1,qF‘Æ£ ª0öÓhGmBó{³Ç`ðSèvÑØ ^k«[všTÚ§æ.Ê9ù²:7ǬOø40ëšU¯™ip~"÷nqƒ·®z^@ê}«QT•#»Œ7™i0b¸ä©á¸÷þUŸ£lÒõ+ý*P>ÏþºÔlnÀzGÑj%4ÑQn,ð˜´å‚¿7Bj` Ð~•ê~.ðJ0’þÅvŒe”»õõ_~«î>ïžIlñJc•v¸ê?ÏZñ«Ñœ%®Ç£J¬f¼ÊÉæAçÚ¯6l¨œ:àç¾¥2[›m*Õ®.]OÝ/ßü~ñùòºç‰]‹¶r#ëÜüäF=ÎOB{ùnž*¾#w²<¬v&u_±£ógs7‰låŒÚßE¾TPÛ£u ÿxOåÅS†ÞkèÄö—QO <àí1ß.{ç¡þYÈÏ–­ÕÕìË·1DpŠ2y>¬z±÷9ü«Õ|).Ÿ¥éRÕo­á…[2B[çFVÈÂõlŒŒò1Öºå*“‹šÒ'4c´¤ï#Ñü;¨™4h#iä˜"3Ê3½¸È9ç=óëšÜt‚^ÿÌÄ‹¹Ë<°={W…kÿ¤ÜÖÞ´û$Ÿô‹…#s¼¨ï×w^ÕÀjš¶©©Ê%Ô¯çºrw2RÁ}€Èå|Ëaögøv`/_ö6ƺé'\ð¶£§ªî–XIˆg‘~dü7šò¦ÛËí1˜”–1q<¤+c܆_ûæªQ2GªÑA¢¨€¨/m"¿°¹²˜‘ÄM ã®ÖÐÔôÙ$Hãg‘•FK1ÀÏðòéÞ$ºÓ.–ò¡ãëûØÉ8ϰó+ÒëË|Qwi§üA}KN¹†x Ñܳ¾A'Ô·L±N3÷¿ è¤×uÛùÖ+h,ìbد+´É4±‚>\Œ1 ÏLç4Ga³¯'<`sšÄ¿ñv‰§ƒæ_$®?‚œŸlŽú‘\Æ –zmÁ“ÄzëjWHåE¤{Z(¤+1@Ä0VºvgË~£ƒ–~ éÚ1Qa¦ÙK2 F¸x rÌà*Œ…f`ç…@?ˆáˆëÛ\×uŒéš/Ù¡’CÚ5Ø„óS9/9äW{§kQl5ĺ—Ú£–ùU@„G" L1`Xd‚7J篜©ÿëzÕŽ[È@X.S¾É ÿ*|šŽ¢ÑyRËæÆxÁÃqøÒv{£«©JÑRӱƴ0K!P%Hnþÿ–àjKTŠÙ•Ö‹÷ ý:V¼–0ŸœÀÁÁê¼ÿCP40»æ'a“üëz_]¡-nfIx·WsÛÎ8à¦Oþ·LþJ%ðŸÛ¦·ŠK?í;q*HðBÇs¨`Jå2˸qœ‚xq´Hî ´—Asæ(Ëdû:ŽKMXÌ˶¸@~òHþ çùÓP[µ±ËRªwTå£ÜÐñ¥Óõ§kytÛ‘çÛ3†BªOCãæ^˜Îq‚pN*·²·Ö&ÀQºI?¼z/õôëíT|A¯kšO‡mV[h?³í.üÉOß™QÆÜ)ÎîÁ*9-Ž@Ít6Zd•¦Þ Wàà‚1ÁN+ª1WŠÜºj9{òÛñó0.m+ˆ‹±CŸ”m=°G¸ÅléúÊF,0à‰€ÇL)ó­mŽS…8û¤ŽG\çóª·vúq+%ܼiË#ÇËG ïÖ±…V´5­ÕÕîfÞjö±n슌Üò<®3Ðà™Ï¶ gZ둥ђo2B«µFÐF{Æ=†*­Üd\Í’yŽ·3î'©'¹>½ê¯”½óõ­ªK›ÝègB„cï=Y£sª©ºymÃy-´œ6ÖÈ=8>‡ž§èvôÿ¤è†{ÈN«p·Ôª²‘ïòœŽ•ÊG >ì tõ¥hgÓE»@@'Ê[qP1»n9æ_~8êkl%iÓ÷`ÉÄQ¿¼ž¬î/µ/°Â<–qFH$4ÎÄŽÄ  cêqÒ™ ÍxîÈD€!Ã?QÇà3øœ“çW¨”w.sÏriÐÝ\G6øüÈÈé$mÈü««ç^<²‘¨Jów=I`7DHÁÁÆF3Ï^9ªÒZ‚6:üÛs¹@üH°´fIìd–ì˜Ä$nÆðrwÈǧÌ*…÷ˆïá_Éî‚ÒÛ3•p;®—^þ¸Æ¶IóÞáO »5b«h–r†'£ü«*}¼Á#‚+’\Iƒ·±ç5ÙO"H¥”åðã‘Y»•cÝ#”ùºãïñÓ§=¾™+ŠPœ_îîßc¦Q‹6Ç>Þf|%ÞÅôx÷~ åH|3x# ²DrqÉÇò¾·;(ÍÙqØÂ3ùnö54sÛ³4h첻˓‚åÏàk§ ÊþÕ_"SMnr £ÝÁ,fáV8<Å u`<œžžÕX^=¶±uòùq<ÌÊ€î Èúc5ÞÅNdG,ïÁX‚òï\qšÂñÕ½„BÑö²ÀŽr|¼ùõÿëwÉ]7WØ$õêkEºrç{ê:LšŽ–%òüûV\+ŽDXçîò~œŸ¨åχ™[ pDd÷LŸçUí5[‹FÍµÓÆÄcär2=+\x¶üÂRe†RŒ`2þ#üs]¶œU“=$¨U÷šL¿lФ9â1€OSïZ¶ºž©h÷÷ÓÜD¾c"ˆeE  ÅNNw¾•ÊÙØk¾&¹2YÙÍ2ƒ€àmAí¸ñŸlײi´ÓôëxLQµÔ1*¼  ÌÀÌ;ŒòkÇÌq_WIEûÏÐçÆb"áìâÏ-Ô°¤šÙ%UËc¹.«´í'ÕÂÝFSR¹ÁÎ%oç^‚Ámãç“’8®TdMNä±y­ßÞºèIêF).]6àdÖÕ³â!ž+Ö&œ‚AH‡r9jÜiQŒ= 9½L žå¨œ§UÂÃ5¥j±»mU „½¾jÊU;CdpFy«ö+ˆ‰ÞT ç¾9ô¬¥{XÞ;Üó¯G·XSÿL—ŸÎ¹^†»/ˆªk1€Á¿uÊx8cÍq§Åz¸á#‡üV!¤¥"’¬“®ø{ÿ#ÿõêßúW¥×šü<ÇöüøÿŸVÿÐ’½*®;-Š(¦ ¢Š(¢Š(ºðËcD´±›‡ÝŒüî3ù§qKIÿ­ÏýuoçW|2ØÑ-ìfáÆ7c?#{ŒþGéÜRÒä+sÿ][ùÒÝ[«Qmþ¬QLEƒÒ±õoõ-ô­ƒÒ±õoõ-ô WÃ_ò3Oÿ\Ïò5ÕX.Ûh×nÜAÆÜc†í…Çä>ƒ¥r¾ÿ‘šúæ‘®ªÁvÛF»vâ†6ã7l.?!ô) /4øoöyÏr»3"êHzúìažë#J·KTñ1´Œ‹tpe•¤oø÷ˆòÌI?‰®†°ìÿÖx“þ¾ÿöÚò}Jê]&ê9,æû<å¬ŠÛÆÁ÷®kPi®ÈŸT¾¸½Ÿ9c|«ŸAØ{ šîY¯ì~Þc)Ž>~¥GðÐýjÇÚtåÒ£K›g–V'œ0õ?r»À¸Yï¹·‹:ÆåTpžõÛeòð²1ÜxöyÍŸ’iȉž&šFçêrGý­¬ƒÖ¶ÌÞ·Psø 9§ÏÍÉ÷5¼45Yo£Žä[º°i„`ðOJôG~'¶W»¶ûbY•¾Fì§5ãïâ;ù¥kÛ§Ï*Ø@Þá‰cÿŽÑ/‹5="ÊM[A³k9 ÆË¹Îh·§’r ©ëÇ85Ï•Ãê?4‹MF;kXd»‹~%NÐO”[ô„×aýµõ´SÂé5¤ëòH§#è}==ˆõ¬Ó¾¨¶š'–‘[åù™H<ã?S\•ÕÙ·{]EÆú|ÿfœw16ßЫê¤f Î`ÞÞõÇøžöiõx–XÄòér™£S–WTbŽ}Ôæìî+ßC¯]Ð30ù¡bXžéßñëüº×ŒøëYÑ./šOJ²².®‰ÿB‡¾Cs÷S äž9æk‡ÎXg?(öèy<”vz¯ˆeŠK²Él™[¡BƒÔ"Ôý3IÅ6͆£â–ášËÍ»¼éöéÆÒ½?ÕÆ8ŒqÇ¥PÓl ¸œ½íÉ [/rG|yúþµëúÂ5»ÒÆt"brÀôËuSèqc\•ïƒåÓ5Imn]÷!ã+µ‡±3ô$ š©VT¥ÏSPTœ½ØèÌø×KÒ¬ŒæevQÐ}æ>€æoo濟ÌàtUz µâû> Ö™„@g>¤üˆ¬œ×EltñIiÇ=<$iMÉêÇ1Áâšw94ÖÉê:ÑŒzg=r—K"9#”—Î$ŒŽG¸=ý}«Ô~È‹µóÿ0çoü‹y08œ~êò“$³K &9¥hÊ£.r gž nÝÅ$ìî#Ù§¸†ÖšâXá‰9g‘‚ªýI®WUø“áÝ7)ò^Ê6Û®TÀŽLׇÞê·—Î$¼¼žá”`4ò— }I¬¹õ83qô^Z˜(žî5ÏëÚp¼Ò ±°³!I]Œ®r̤Œdˆs×Þ¤ºM¼“'Šuùu;˜ßpŽ Ž ;ãnÀ.UA"?ºÄ:ùñ¡.›˜¹™mîÁæŸx·ÝéÕ‰ú“V|3¤?ˆuØ ›/n‡ÌŸ= Žß‰Àúdö©•EJ''c¼—]žóNŸOðæ‡*éΦ4ixÌl¬$œW|î<„8Áæ¼Kuâ2ÖÒÚãP¼£ÅËÚ«‡*ü„QÎxAÍzŸ–±4®Ä")fnÀ§úןy_ÚúΩr’§ä¶ÇàüÍFSÄÔ²Û©­jp£M·¹ÃGgq$öñM) )+Œ)ÁÇú Õ˜4wªH˜lýAúbºÓRþîiˆÂ ,CoO¨üsøšÞ…ìã\7` K+gê'ó5ô)BšM«¦xUªÎm¤ì×s˜¶ÐYIØ>讃MÒÔ±(™XÕ·ÇŒ=zŸÿ]Kþ•É^‰Õ|ÈÀ~9ˆŒgñõúñMµñd±¨Y.¥ŒãºïNA5ÉW '+ÄÖ5l­#¤0”s½¿ÇáÁu´rImÌdaȹÿ Rù>L‚EE${œV±åZ¢~µYnîyÝׇ5hÛdî‹€<²“é€súb«.›¨0ÃZ<8^|ѰŸÏï^”ÓÎŽråÔÿ{ŸÖ•š9cU–@:nàœõ?†F8íéμìÛûBv³Gi²Ž+{…_"úÑÈ[ŽÓð «`œ O³ÛH¹yæC*²ÆòÙÈÎê§9ëǹë]´¯Œ¤ð«à‡NŸ¨¤[YU€'Ü8g°#aYJMô9åWó6p×:wÙÚ6 ƒ³N¼gw«þÓ®!Ô’þUÛ hørÅ‘cÛæ<óÓòìBZ»)y¥ëÌfâ^Þ¸ïN¶ÆXÊO‚¼„ãû9÷<ñÖ°©+EÛsJi6Š…äevù”(äã¿ãøÕXÜÍÏ»“•Sèû¿—?ð![w ¥HvŒó×7çøÖ0²’ÝÛÈ’"ŽrÏò}sÏçåa©NœÜ¤zn¬w¹7LsÎ}¿ ŠXâ‘ ™YT¶[Üò8{gíYÜÌú,‹ƒÕOõôüê”òI4­´tàqÆ»Úh©b!Ë 6µ,,°£»>HRÌFI' ò‘ƒÉïÞ²uØ./e³îeŒ/~Ï­]ŠÉc¸Y naÐÕ­ QºÀ†=yíëQËsSQ8œ§4ÕÏ-¹³xRT*IÈôaê=G¸¦GÓÊ"Œ¾3ƒŒð+ÔŽ“vÑŠÕ0ùÎÎ?Ï}-‹3 ßÝfüÖňPT`m85„a¦£nç)‘ ’»gæ*?úÔ .Ö6ÈÃèò.µÔ^Û¥½Ë˜ìš—sE.öÁüü+*=bHcuŽ[b'§˜¿M¸j×–û²njh:»‘|»G‰;f{v žß1~Yük~j~.‰´n¢°‚à|Òù‰3.Ó¸|Š}WxJw…¼1wâKT›íkyo –`8Îá¸÷öü«¾¶°³ðE©×µËèá²³ÆùŠîùUAÏ,: ÓÙÆ+b\›gžÝ[Gd„Ýß;ʧmíIýd`kgMÓNµ,ojò4 ¸$÷äœwÀÛ5ÓkVþðÜk.§9{°2‘ÀÊãéÓu8æÏŠ/õ«—µÓÑ´ë9ÎÖ†ØÒvùØ`‘ÉàqÏ Õh¶#VÏBÔñê¾$ø«uiYصxúž•£’G-çg±ËÍ<³929<ôíMœWš’÷J¿;œ¶Ô·”.xé^¿à=iš$w‚·X•ÿÜþéÓ-ëócµy׆ô«ëPÁ"ƒþò`z¿ÇLçµ{1™’Ï Ù,Ä禹ê'(Ù½×sÆȉãÑâÇ™0O1‰Æ8Û±ú¯k=¥ºÛÙÄAo)¤T IexœŽsùåf…µûé.î›i¸bì£øW¦è{ ÜRRÑm“1BÊ)ô[»w95õynS8QšWÕ½Ï ˜AÔiën†„wñ)w\¢““æ)Q×<äcéV`–ÓP`bX¦åÕUÀÏæ+v§%OÕ-NÀO ·6Ñ•¸ˆ)Ú bP[ûŒç>ƒñCƒötÜ髵òûŽ,6%TŸ%Gdûêv/mm.±Ï*2Ö®Ä[pUTÝŸJä|/¦ÝG¯rÒ/šÀ$lNŽãëœÀ}ë§ftÛU¸bžôýGë_%Vµi®Y¶ì{Ñ¡Fœ¹©¤®>É;'ÌÃ, wÇ—OÃñ­+k½TX­œ-¶ì€·iϯ\{{ÕXCÈÝZP­÷°j视N r½ÙÏR»RqBÖ¤’',Œ8˜Žûo\Â$„gi¹àþUÛêO†ìw Ëæž£ýúå§lL@9ãµ] $*§ÌôNÄÕÄʲÝ\Ë•ˆS·qjXæs€@ö¦+DÇ®Y¶±8Ö}Ã$Re3ÇNk Ôž8É]teÓ’¬Ô¢ìú¡òL9Ýž¤žµFkH.I„’OlT\& ëREt¾rÉóÞ¸»ª"É2árA¸õ­ˆÇ"à]¸˜Æ*¼jŒ»ƒg’yížÕ=º<÷#,äg¨“M§k¶+¤6x–dt`G¡¬›á5¼19”î¡zqÖ·žÊUr¢XI¬ßüMRš2b×k(éÆˆÕÒÉ™òBR¹‰ssØe a½¾•[ëÐU›˜Dn Œn늨Ê[*?:‡«7µgt.sÕ€ øëP¢€NOÞµ-4{½IQm£Äjp]›Œõ$þ=¾µ¬ºu¦:¥¼áäŒâ[‚¿q½ÐóÉýje+]Ñi ^ΊÅjÙæSŠÐ¾ðí­ˆº„¬û@Þˆ§pÏCŽõ~MOýÏËòªy,yNŸŽk Óï×M·ó¯™!UŒùŒÍÉäŸO¯åY§ïj7¶‡žiè\°ëž*ËK;L ™ïYÒ:Þ]ÈmTÇ ÈÍcî.Nà1Z¢Ê)QQÐ62Fj%}X);hRд¶·»ñ Þ“zŽ‚¿k)8g ÂWVÜ€¥I’N1ŠÔ³ñ=­Ý³%éû<ƒ+¸‡ú`qøšÒð储ê+{jˆ³C÷I\õø‚EsSXC¯øŸ^·Ñ­¦µWaÞå6d0 0û@ÏÊïZò¦Eì4ÚÝË™¶y ó½AúUÍ+M’[¤–TÛó†Mt~ÑeÓ,äŠrdglàµ~Ÿãô« ,“,« b~R¾˜è/Ö±tÒw5UV*K2Æ˜ØÆŒ!x¥`‘ƒ#·cä*1Ö{–'f›;æŸû‰¢F’á¶ì{qìh¼•†ËÉ 8”àŠ‚[}Ž<…ÏCVlX“×9éRlܸô­!«”­ʈØe×…=Iö§Cg`ZîãhÎ<¨T—$ž[ ùKQé[bÛÿꎡˆ?áYÏ/!Áõâ­›‚£!usWmŒäÛÕ&“v­a,.HE“8Î;ëùW5¤™ ¬Ž œƒ[zQC¤M3°k8òNHÆ?ÔV—14RÄXd6W×5«ŠqԘɧ£1î¬Ôº}@ïSøvâ{¸® ßî%Øep^ØúÕ<×-÷Œ_jÂD2ß]µ.'%8ì ûs\“ãc¦3JÒ/µëΠpÁÀsŸo¹­~Êê!• “nXÛ +Æ@Åv2ÞºêQAæ#+AæaÊøëéÓõúUOJfÓe\(\‚~Aÿ>¦¦7O•n¯ãÎ1ò¯·±¯> «4 º•ê7uÍ9-1Ë|Ýù§F`'ŒçéS†8À#§‚Ü–aø•R;\}â:úƒŸéX:xˆÚ:ȼ™Iç#øV¶K r_½#ÊafQŒ)àÕfFräg²Š[YšYòÑoN鵄µ5¼Af5Ï ÛÊêñ8!»9®N °o˜Ší$¹k¨ÒÒ5ƒ–9ü‡ùô¨Š*Ü2út®lDå boAFN̹àýRãÂ×ÈUƒDØ ŸOCíþ~×ÅBßSø1­\@Üo¹sÊŸ>:á"²šuc8v©8ü«ºø|5;}V(d†_²²±Þxm8ñxzò—»4:ÔÒÕ¿Ä?ÞéR,²oº„¹1\±%ˆ<•cëßó#©ÎÚZ=™…™C} WÚ—õç®kÞ®õm:÷Ox®íÝ‘”åÊýG#ÔW˜êzóË8µž%·ÎQä$í(ö÷­~e±–’ר‘L¶ö"òúKqi>lÈ88Ú0N}»úRYj¾ ‚çVº˜èþ³Bä²ÊùÈ ŽsQ‘žj¯„žûUŠëY¸óì­Ïü{À›ý|rqžž˜­={Bÿ„‹S¶K­ASH¶âßO¶CF?Þ9Éõb?*R©Nœž¯b5Ø¥â Ý?ÄZ}Ì~‘í"{PY䑆 ž…ŽHÈÊàžsÉ5Ãè –âébû9žè61òÆGf>¾Ãô¯Q¼Óí,ôñgo5­Ž’Ê¢H"bÒJÁ‰q×ñí]…©øwK·† H°î>T@ õª©Îz°qob |>·°òîo€–à•~‚»y^ >ÊYÜmŠ.Ø€ÍP‹ÄV.ÛJÍ»(þ„Õ-w[Ó¦Ó¼Ÿ5Z9+ù€¨Üœt8?…\§t(®ˆå|O¿ðˆ>¡pÅnÚàLTä,HdõÀÜïšã-“í#iQ"0Ã!íô?âøt¾7× ½³ŠÂÊtšÚ"Y‘÷ p28ÇR}ñé\ÿ‡57MÕ"’õd‡pÀúg?¥dµ‘¢‹KS£Ñ4ëK1²þ3\bm¼.½×_êqY>1½³Òçû=¼‹,òÑ„äé¸ûpÈ5Òê~9Ð$´–;-2æá±…,j?Hü«ÏÙRèïhTrè>•j«Z#…6ß¼QŠÙ®m¤Š\ì‘J·â+Ïu‹6ä«‚8 ØÿŸJõe Ž˜#µS¿²Žé VÜ0Êà ãÛò®l=I)4tV‚åMH·¦KµÈÝ?‰®£PðÍGp¯ c )ãò5‡ýŒ¼•”ãÝúõÛ‰œ® Œê*#S•ºH§"C½â¬ÅOâ+Ô>_ÜÝøçPId/ìÇajóbä*€÷Åy—ötJpò’}†+Ô~[Ã/ÌjAþÍpI9ÿ–±Uó\\¶<Ë^²¸¸ñN°ñÆÅôÀ·A÷Ïzê<5¡E¦ØÿiÜ¢½ËŒE»€÷ø«³i—·:þ¢« ÇÝIûÉ2 žÿ*¾žM£É¦NÃ÷,~œðë\Ø™IGCÙÉ)Sž!óî–‚%­¤’4²y»˜’QX~YÅJ·²,m(AÓ «ÚtrEìJ½AfQüØRËs¥é£ *]]c€¬6ôîz~Yú× ›G×^1 »¢J :ͼG@}ð3ÿ>•ƒâ³,šr,qÈÁœ´ŒÜôéÍ0êÞj1O¹ƒ–Á' ÏqéÁ©uMBseku¬«(dp§2ã?˜ ×ed”5«8ÆR¥mµôٴί5jÊ’øö©ï—Ìa)3}ãëZþÑäÔn!¶O—#tŒGÝ^çõñ­g.U©ó”×=š;icÒ~Ñ"%ÙÇ÷Bÿ2r?½V¼a¨ÿghÛ±5ÖPûqó×n¢%­¼PÆ€FŠvp?Jó]nýµŸ0ç†6ò¡\àõ?Ò¸èsU©äuNЈº4Ä^5¼èSu¼hÄ2qÇ}­Èã?ŽÛªn\žLnª­Þ•i§ClÆaç— HÃ3rqž:N¿^R·Œ %pqó‡µÚ[=rË"³~&¾û ‰¯JšJ.KîÔùLNY·Íf0[Hê\«P7;tQêI8©¯+[9&*±œá™OÞb?¹Ž„õ$œړXWžÒ+8½[¥SØ‚û™ONTþ9ª:u¥ÅÅÌ—M¸´‚´ƒ,Ìz±Ïãïɬ±•YÅÝr¥÷ŽŽ0’wæ·cpL>Z¯ÍŒ|ݽêű72¤ççßòÄçonž¤œwý(šÝmÑT£3Hàõê0xǵhXÃb0ÔŒ‚ªöÇÏu|ä×4õg¬¤ÔK–š^íÒ\¤ôQÁ_Óò©ØûW ­Ù­#{vt¸EÈ!^EeÁ̆OZô=¢·,vG+¿4ºšW` XŒsæ7÷ÝrWø?. uú‘)áë2:‰OþÏX/%”´ÈFû€ƒ¸~šÓÒR”¶¹8”ÛŠ[ØÌxvÙË -”‘ŒŒœçY²$…1´{µ_¹Ô–X8ãÆÇs1'#8Çáêi-Ú ¼ÁAþvúÖxÈN¼”i«Ø× Õ¹TÐÇx¿Î¿¥IJ­ÇëWî4ùQöYáOPŒ¹O¯5Z[y }’¡SŒç±ükÊ«‡­OâG¡N½9ìÉ ]¹m­Œg VŽ–íö©%P HÎÔÿõ«2˜ž{s[zd‹æK.Í…›n§nÜWÛIßcI¤Ö‚†v”§š­q±®]£Fä ß_óŠÑÅnDsJ2@Pr*¤0¼óìŒ4…Û çÛôª†º˜Â-;˜—¶Í°¾1zÍ©'·µz hút—is~±²¨óßÝ Èé×¥`<7¥\yWÛœæ,¥¾€Ÿ¯o©«³~m Ý_ÓŸÃof×pÁy)´¸VûÙéô=iñ[K$£exñèsíÇ·­f| {vÅ´ÝãÆC4«nôìzgò­G?´¨É#L¶Wçb0]ÇÙAëC¦¥Ô•#Îu/išZ…¶›í÷ÀüÆ2±Ÿösõ>¾â¹‹o\ñ$»'>L²È½XSøt¯H¼½økrò}ŸL¸g݆{x%@?éYQYZÉw$öí«¹1£òÀ{ž¿…Š:Ü.Ù…¦4§’B ˜Ž3Ø:é#‚+v!W=e‚›d»X2ù\7Ç>Ÿ‡ãVç ¸(±“ž˜ÿ? ®Êtâ’{œµ*I·Éâycwîúb±µ ^j^,Ò5>æ8o£qopg•–9mNâË…, Êôëœ nF D£±AäVÎÍ\Á]=Hço"àÅ)(ѶÓÔóÓµJ— $,²8g_¹ôÿ?Ê™¬xƒL“UÓ¬eãÕ.‘€ŒÂÛfØ ,.Ì€A9/ŒªB†eÊ÷俦IJ6)7 \‚áTãŸÊˆÖ2ƒ$nêjWA‚{v'ƒQ0R1“Þ¼æw¡¾^æãŸJå®õgÔ.Ú–ÕrS3Üž¸öÿ#£¸´Å ÎÆÆ:Ž+Ÿ²ÑåšÀIÖubä)íÇõÍTUÅ)X®–à/ËÇÒ¯é×qØ]F—ÜÛÌâ?0·ú²z1çîäó霎˜6,â¶kÞ8`*ž£sZÏ&Ü“ì9þ”ì¶"ïsª“@¹¼Áiü·V´„œüº~T˽#T‚Ý¡Á–ÑRBÏ㎇º×VÖðÙÁuù‘²‚FóÇNç§SQjGj‹›w78ÂŒô-íÚµöåѯ$í-O66o…$ŒƒÏdš¯-¤7(NAàc‘]^±m6­Úm¡r¤î ;IÁ# dãk‘¹±ž-¢d(Àr¹ ƒëÏÿ«Ò¼¬M%KmŽºsçW¸i¶âÞygU ¨¸<ôÎ@϶yüQyT»ÈË»©=jIoä´´u1f,Ovà3T ¼„Éæ¶qœ2…uQ©£ ŽòfÄZ\·,’L@^1Ú’[h-nZټѶc!÷rלgŸëW–å%Uu}è@ÚGéT›,Çw6àq‚=9«‹îI]õ SI¶’ Á¢$†‰³•_óÎx¬K‰Qà"¾âØlžŸã[w²ýÜ™~8$æ±°"”¨#ýåÅ[–a¶ê×ѬR1 ÈcžÝÿJël­ÒÛOcUUe € `F}ñŠæ,S̸XW€çi tæ»B€:qÀÅag)]%c"óëÖÒ]šÖ@F:|ÉŒþFªë?5„ìIã“Ó5røn×`@ß(´þ;ã¬ýMKXLW9Á >´åÍsZs´lhiEdÒl£Ë¯Ï8®ŠÒFYdŒ|ÛB㯽sº2±¶ ð \±NkkE渘|À„¯/^UedÑÝx¦kE»¨\vàâ­y˜~'ì)¡Ôñ·v&žím¡¶Gó¬#·g-â™ÝÃÎß›>ämÿͳS–™ç {U¯H£PXó¹ÃgÇôªö/û»ŽSù®šKݸ¦ìÎWÇD6™c¯êøWž>v ô_¡þljO;]yüëÎ¥.ƒ¹¯[ü?™Ã‹ø×¡Xgš_áíJ]›‚I€qÒºda¬øyÿ#Çýz·þ†•长ŸYʼ™ ž h¬M ·‰‹ž6–5Ô ÚºÇ=ÊG8²ýíƒßÈ}+r L.E£Èç‘0äôþHÀäöéÖ—-õ#›¡ øfödó®· >UaótëŠÜ‡@±¶I™%’býxúsZvpêK 3©•yeÏÌ®:Ôz˜Ù2ÆÜFpW‚:r;÷¢qŒu“3ŒäÞq4÷¨ÂIâ´0ÀBÔäÀ~œf¹x‹Qðÿ†µSEºž;¸ {nd!öuR6¸ äçxÀ®ªÆÖ;’ËrÙ$†`8È8è:öÍ&¿àøgXc/"÷Kcû€çQI>™¢Ê$†o·ê8䓺8ß×?ÄGnßÊ©YÇ.£w4ó31U3HäõçüH­©Ç¯Dyxì\štúËK.‹ÏÍþ2&ëˆ!$.â'Þ½;ÂúrÙYI;(Ý'!`žž¹úWœ×ž+·±Œ6#u2ŸîíÁ~~ øW´i?kš+8J#màp g°¹ë·& ·g E9>‡=â­atÍc,ÿ¹‘‘Éü³ø‘\Vƒl`IoX|ÑÇò?‰±‚>€†üE?Æ·_lñtö•x¬äh–rÃøŒ~²Ö‹¦iqÀ@’Bç$Ëyǧo˧»²úQ§%)msŸUÎ6E<ª…̹•Î79äúœ“þsL #‘ä™™FC’:tíÏò-U`Y¤Ic @Áãü``wxä ’×nb‰Z{ŒœùÎqŽxPsÓù~ RÄa.¦šõGËNnk8²«Dº”R†! ªdD9o,0Ïè{ÖüRm™J#¨äÿU`º©˜ùêXÆ»„C²ó€Ò°È\‚pIÉjÖì2®èݤ-‘Ï_aîzWÍæØªuª(Ò~êû›=\)S…ç¹ÓC,—ÝØŸ"ç<ž¤ûõëõ«6WsX—tØdc‘!L•0;~™ª¹Žˆ.ò-Ó'©8÷$š¹ `êÀ.G@FExУދ©Úâ¤mi·z¥Üò3•–¼—0FpÎÉ{ûB“Ét‘%?ÀËŒãÁèzýj½¶§ÂI`„/=‡oʪj·6÷>ʲFà®dÆ;089È?wõ®øÎŠr•Î *’”ltZ”…¼-g!P?xÇñŸ½q„̆i.$%|ÒžDl‘À?Sù×]w½¼§†wß¼©mÇ'—}ë…דBŠÅ“»ç¦?ϽE:Ðråé{üŽ—NIsu²Eq$·n 1‘âÿ'5h`cæ’öªqÌ»ÎÒ¥‰šYvF¬íèp+ÙMKàÑyt“_¬³!ÁŽG5râI<;3îõ9Áõ¨#†Do™qõv8<Â7°@2K€£©?•hõº{íª3P&rF;gÖ´Òå¡Ï”ÊÊß— ÿž•‡x¨ÛÇÝ=ªÎ\*ôëƒßÚ¾Y(¹´ö=ýyQe±-ÓŸº:/Ó½hYê—Z|s-´‰ßNÍʯ°Æ3œTVöR¬j­…Ç^huX™°'Ž}*Kb¬Ú2µ;¨ÂVà ’[%‰õ98äÖAð¶œÌŽã¡fbr+¤™˜¦ÑßùUy-Þ ‡óTÊŽúÿŸÆœêgR-ìcÇáÝ.&ùm#9îG5z:Æ6ZFŸî¨>ÓÔdÓÄ2ÀªœàŸQñ£I˜&Ñr+x‚îP¼Ž8íVV4cŒâ«ÚnÁ¹ñÇAZú\rƒ,lÇ‚APIÏaž#ŸÎ¹Ô¥ÊŽ—5ó2¤V³ÈCÄž¡Ûù¿f€,ß|­žÇÿÕƒZ%ðÙeçëQƲ«.GkNÊ÷9ßh2kÚ8ŽÒU‚þÞdº³™Á+Èr¤Žàò9Î+GG—P¹ÑôëRÁìî®-’Y"`ÒG¦Nä€yÁâ´L ½:}jÅÍõ¤,¯©]Ãl–£rO<Á@ÚIã®1ïY:ŠÚ*nú™w Cñõªø-ÀëíWͬ„”¬j:–=¿Ï®+'QÔm´÷ ù²}®~I-Y¿2zã•Uw7\f±b¼}.îKuoÝ1ãž0zgùsÖ¡:œ÷%rØÂü£ÿä×+½:LLÛK“‰#qߨõ† .šû…ô¶VF4‚Ee1îÜT‚Ç_Ç?•g[Þ‡¾‰ÝÑ£pí‘Ę?w¡ãŽxéYrê°M´}”ù˜À%°8©¡F¸ƒÍÜ7÷ö¡YÈV=ûan’Xä†U,Ò–áÑ€xäœö…RÔu> iÝ­dy£_—÷ÁL‰»Ž UÆkŒI%+¹‚AÛ“Á#Bk^òÿÚH_)"¡dUèËò¶2'nwuà ç5Óec7ÝÂ?lSÉ$E†Õ ʾ¿xŒêGf?}®Ø&¶ÚßÃwRGaÁÅr—+ p3Ф(Tù@®‘Þ°/o¥Œy3˜‘‹ÁG|€ èfïrì¬mkÉzZUP©œ…E¨àtôô¬m¹$ó­ûVYiïR6Ñ"& '\c¯áY9wYž~ͦI.@go”Ž£hÉúgS5üÉb&gÜÌG`t>•:é2- I‰ŒgŸsŒg'?B? »íÛ–¤בïÞ§rô"“PyˆÜ£ó¨¸gõ¿á«ìí-m$• ©$zJ»¥¹†ëC‰ñ­ÞŒÂãb¦ÖÌrÆGO¥Y¶Õ¤Õ_Îq¶R t­jöw6FÊhÇÉr¬®£0Aëßµpö±ÝËzb°2ûÅà õ=€®j‰Mr£H&µganÑ­Ú#Ë厹kI|]¥hs ýJg¶±‡&ILLásòŽê@àwô¬[0¤ÆY¦ó%lï~F}€ÇŠËø¡/ýM•ò@„§õ©Ô*éÓpÉ\ê^âòáŽØ%‰É 0ÇëéPÜ[K}q¾5Ü£71õöÍ>‚"y.gU…q÷ÎqÓßÓð«Ë¨Ú@¤K<(ÝÃ8JŠŠìÒ’º¹•o¤Ío"ý ðù#dÐS¯th£çUT`_¥]Kû{›Ÿ–òƒ¾oË×­A-ó³›i# :Ƥc%fÒiÝÚm²Í!G |ÊI ‘þ>Ôš„¦{x#gÙþ¹ñò§±÷öþU¨è Šin$òL€¬H$Çès×§N”È~Á Œqo–A+]²å½Ëp+?_a´¤ÎJêá-®"¸P¯:ÝÆÝ7?ª=ÒÜ“tQdvËôÀîx&´¦ÒÖ+Óp“`—ß´¨ÁÁã5¹iá‰."óZXߘÑzzg¹üÏZÆJ­K8ìkNTé§ÌE¦ÚG.ŸóZ¿œ0^fpçŒg' `tíZ6Ñi`f†ÉLãîG,xAÛüæ°ï5ý/O”ÚÏ©!d$ã ûqì â™©o*ã2)@H8ÎÓÓ¦ã] Otgí´{´Ý*þKÖ¶µµ ëûÁ,ŽFßħj}Õ†•g,–ª÷]‡&YˆTŒä€: É<jùº¼ƒ/#ŽÝNà‘ ?í7_Ã¥S··Žê;ˆÅÔ¥ YNݪw¹9=O^Ôü¬Mj³–ÎÈÅ}E-Ù#Ž ñoÊ›Ëiä®>NäŽIÇÔמîñ˜«Þ¸4«Çb²¨ÓzšvÔåºr*eÀç §=Ôiû¯9c“ŒBEEö©üó¬YRhÎA=Ï5w±¦‡wö˜-ü7¦O,eâYäÚ?8àzáüM'öÅÃÊËM˰³Àçù>¾…tÒ³|6±rıóÿzòíwűè¦Kh%º ­ úœ}=ºûWUŸ+1æ\Éy’C#bFʹ|V¶™¨,Rü’K…†pAHêG§=qß®k€²½½Ô¯# }z. ’‘ØD¶O*_ çðjµ{§Ïoj³^Ç®Y–DY¥J RFݤ!'œŸ[\Š)5èÌ=½wùÄ/[j ‹ep£ïFqùþ5Žgß4Äù•˜tsÓùôéœùãSI¸T»‘®íúä<ÇFê?•zíͦ§¥Ç¨YHZ 9BÌ2yÆ1Ø‚8'¦8¬e¬ãÈÞåÇ IK™"XÒ,Rfa¼.=óžÔÒªÏò†ÇaßôÇô¡[€qùÓÖ&˜ dÿŸÄW‘Üê³/çq8$䟯½ejQ˜ÌWr&7QÈÿëcò4·1ê¦Ó+˜ñœqSÛñ5´¼ºP–d;8 }yëMÆzFRmFH®“æEV Œ€y®ŠÂÚ4¹ÎF>½ê•žˆe¹Šáfvaó1#ŸSì=*½ÇŠmìõ;¨VÊò[8¶íºD-¼€øéµB Ϭá7¼Kœa´‰.le7¬é)q€êÇåŒÖŸö=”Py³n“p8PÄ)ç¯cùþTÈîí®î%·‚hä–&EW”©ç©Æjhö”ÚzqÍ£ZÈ^Æ2ø Š˜Â6— A-%2¨Á+´àõ˜•8â59๥8nA õ­éN-©Õ!$œI›æun¸>”àdŽp:SãÚöÙD‘€G]½›ü©pþ„äõ#55tyrƒ‹³ÞU˜´w4ÁvG=°iìÅ`8íɪ0'ßÚ©Å5f.fž…Óz rj¦­mkªéwuÔQÜ[]²+ £ž;ƒœsÛô‹=²jXŽãƒØWz œyàvR¬æùdrž¶Ÿ¤ÞiÚÌ šD‚ÞÒòHJÅq?wµ²F@ÐmÏ9ªù·3ÊÛ·œ’+»þÓµŽÓ/åHí/ˆ‹Íbq‡î7·mÏAÓ'¹;½>{-BkI@Ybb§9ã¦3ØöõÍqÊíBÅœ@ÄSªúUMC@·»Èᣘôtî}ÇzÒ·T†C½H=sV–-Ÿ˜Þ•›ƒD©¦r %·Í5ËípI\œR”Ø#®ØÓ¡®³WÊ]«•Œ.0+›˜Ä…Í *å6Æ4€í«ÔŠ©ý®à4@±¿„ŒóIô?(ü±VwªC+±à)<ŸÊ²ç·hس c‚ã5µì(ê>áþÙ ìw ghe>½}}«6ãN–êÙÉ@û,`mÎ2ÇãZvå>Ìy?)<ôª7Zƒ€ãäa¶1»9 Ç'9?à8£šMèVô ÔxXù±¯ž¸ì߈ýr+ºÒÖÝ”,È’>VÇ+ô=«ËK:O 4sÆ0¬£¨ëϯ¥tÚ·mIŸìR3°¼/ôÆJ~<ŽI¬æ­°#ÓM•¤Ñ“’ ¨p ÀôÁçñ‘qbá°–M"Ÿ*ƒùâˆ/®>Ƴˆã–ÈžÖe‘?Ýd’?Ï­P—Å6Ñ«8©RUê¿Ò³z”Š×¶1FøžÕ¡sÈ óqYÒ}š(ÙÉO•?ˆu¸¶\ì’«"°†x?—j]>!& ¬Jg!0N~¦¦MDµ›ÜÀ±«4È£À¿•Oý¾ ÇæHì ªsŸlâ’Þß{á£Uû€dÒ´pÚ¸hÂäðGÖ¡8ÞÝFâÒ¸ïÜ›fÚsºWP1É?ª¾ëFŒ»®AΦ)u#çjzz‚pd|c‘Äl¢óE"®ï4(ËzƒÇø×CÕ\"µBxsäÓ­H?p>Túî?Òº}(ªÏ#3\²Œ÷Oô®SÃA¥Ó˜îÚVGB1ì t:=Ù7¶ê mÞëÓƒÁÿ óñKFÎÚ/K 0\a¹$u\ΦwV´b­»#†Ï^{R©WÚ ÙäàqI~¡mÎÉnrx¯== –çŸ\†kÉÏReb=ù5fÉHf‡µP9}Ò6c“øÕ»?˜Hz¼]±V‚FOã1üLŒÞ¸Ü0CÝ÷ýkÌr dý+Ö5|ŸJIãyÀǸ®U‡hW>¸®Ü¬šó0ÅFíĀ硦Ž3[Ò[Y±?+/Ñ«*ò†m±*FA=k±»œª6:?‡Ÿò0\׫èI^—^ið÷?ðOŸùõoý +Òê–ĽŠ(¦ ¢Š(¢Š(ºðËcD´±›‡ÝŒüî3ù§qKJÿ­Ïýu5wÃ-ÐnÆncv3ò7¸Ïä~Å-+þB·?õÔÒÝ[«Qmþ¬QLEƒÒ±õoõ-ô­ƒÒ±õoõ-ô WÃ_ò3Oÿ\Ïò5ÕX.Ûh×nÜAÆÜc†í…Çä>ƒ¥r¾ÿ‘šúæ‘®ªÁvÛF»vâ†6ã7l.?!ô) žWhâwXÚFU$"c,}H>ä ÁÒ¥yÓÄRIo%»›£˜¥*YÑâë´‘ùèkÏýg‰?ëïÿm¡  IãI-ä…ÆQÁSÛŠ£c§GjF$ã/ŽGáM;X­½Üü«†Y3†> ÿž•£R:mOï?øR”båÌÖ¨Í6•“1¯4 :ûým.2D…y篾k—ŸÃ+£^3Û<‡ÍÈTzsœ…z?ØÐžFcíÅG.™g:…–øîIÏçNâåg!™£hUˆ 3…m§ñ£Ão,^+±ƒ{mÄ›“Шüv8#÷ëù×`èŠ2p1ÏÒ°¯õ¦´.ˆ«'\ž‡ÐŒzc¿zŠÞΒ擱0«R¬¬•Î>óÍ{‰fbÈò€®ëÒLzƒÆp;RGuqmaÄC2$óÇýzžûQººÏ/`ªëÖ’ÛX•HIcGÏCŠáxú2|ŒëúD¹‘R{•3ïšDG‚ïϧ¥RÕ~ÒÞœió$2ÜÊËf"_-0~P£ï@8ìO®k·“FƒQxRkM©´I½$#'Žÿ?…]ƒÃºm´±:[¯™; HÈž}€éÇø|‰dõŸ3géž¿¾²/sv!y~lʤ°äçÜç5<Íg ÛßÇ-Ú]MRÚ&¿¡=v€yí]÷ˆ4ÝV)žM5cÚä0AUÇ,æÏlÕÉÛü8‚î9VãQt¹DÚUSN>Rs˦3YÛ™k E[Tsšì—úœ’ÎÈ`>X€;w‡øÏ_Zë®!†)mÞ%%™×bâç¦jæ“J²Ó·Çk-Ä÷q’œ¡E.:œu >½ë/_šf»g¸i0sòþƒÈTT…ä¬Î˜b#d®ÏB¼m&Òéží4§?0xä» ËÓà}±ùVN³­C{ƒI†(c2óZÈ]œ€PÕqR·ïãÕFüOƺÈ @< aXË¥´×“¨I@À$`{ç#ðXxŠîi„qª[+¸Uá°3Ôõúô¬åvÁY-Ϋkc•yH?åšòOøV/Ûï¯$óšFH˨¬@üqÖ³%žíÙ¤1bK¨À?LÖœ1 \c-“Ðdž=søV3—$o%''bŲ´·!ä îÏ~§Ÿå]¶é$<‚¸¬Í.Ù‰YλïW5-Kìh€Ò°ùsÐ`qŸÐúªbÛßsXFÑÔê.â)ðîÅAĬHÿ¹¯šÝ%»¾šYK<®ä±nNs_@ë7s¿Áû[Ÿ0¬ÆRw'ýëŽ? ðhgK{æÉ T㞇œVí»•ÏAð´úo…ì~Ñ䥯§ åÜ|°@;Ÿ^•CÄ~&ÔõÛck$Ñ-¦Ð b7s¸ä’$’F3šÈgu cŒg*==©dRW#Žù¬yäžæœ©œÕÕ¹ ±—æíï^ðÿPŠßÃïm<ØÌd@Ùá6¨ã·''qWˆÒï!Jð¹=«Ô¼á=:÷HMBàΦ)€DÈØØ!°F2GÍë[E9#)IEšöW6÷sF#mñ³Nè3Òº„‚Ë*(îË~³Îm;YF‘ÛC9a± [>§ü[6ê`^È'¨ãüõ®*ú3®‹\·°ß'háò}j"±1çæîHÏSŸ~üÕ‚ 3ŸCPÞ\ZéVW÷«›k07&9w<,cêzûuÇZ懴œ”Q£qJìƒU¹^•%°gónT4Š “åƸþ9€‹“EpòÝMoݳn£ŸÌUŽ/¿0PX•9"8Tm:`Ö]毭ÝÜÇ­Ê¢E–i®#uPÂ6Q‰äwSž‹À¥îb–úù [+(RÚfØ®àT>ÙØ÷÷Z1Q\¨á“mÜÛÐ4¯ììó×{%¼=LcŽ3ïÎO¹ëWÑÐÄãøN?JŽÂÒêûN¹¼YVy\ù’£I·Ì|’ ãŒÀúr>%’}kYì:z¤"$,#d$g8Î8ÎÓî*gNöÕjiJm^Éè\‘¢ãæ#$‚:§çÞ™LŽŒ„ëš«-ߨ­.f¹Ý*²¢·$Ÿ™<~5^Û—ÑÄñ»¬¿yAe “ÉÎ:€:wü³qöRå4”½¤y‰Ñ‹Vk•lm;g“¡÷ÆG¿5±Æ…dF%\SÓ ò+"-%®J”•V<ãç$63ÔõükhYÄ‘‘»BgåÇøû×^º†çz\ûí’8ªL…[ùÖ‚wmÚp@9 ú_%\ä(÷¯MII\óœ\Y–@ÎZ‘#RÒH¨9-ž?!Wn¢‰-Øœ3è{Ö°õ?ÜÛíR䤒k“Z1\vuaéI¾~„óxz=B„¾+,g!69äŒÿúymŠ·„ÕãX#tL7R>½0N3Ѝ5ÈÌIæ-Äg bcÈæw¾§*Hî®t[­^3$ àí;Éõì­f?5GbMŘôÛÿ‰­¿]‹ÝiC»bå—.¤º¾¿ZÛ¸Õlmu k ®.®·c å±×Ø~5¼bšB±ÄÅà]R+¨›Ì±hƒeòÌN>…0O¨<ˆuÝ6kÏ6Ö9"C$‰æ1L’A c¿óôîu fÇL–(®žQ$Á™($”1“„SŽ¢›ªJfðåìЗ´‘:cø2¬?B)ò­Æ´ÐðkôžÍM¼±lnäu¡÷ãŠÍ¸…KSÔ°o^+³¸Ô!‹F—J¼Ž$¸’O1d J-–lºùr2ǚư°‚ä3#-ÁS‚Tô?JNJ*áËv2ÂÆF³î6B?v¾RƒƒîýsVþÏ""F¶ÊˆzóÛÔñþpjyšøÈ‹!%¾g~ˆ;“íӜֵ·Ú$Œ#œzœÖ§‡Ž÷pÛ´×·jóñ*üÇ¡KdwêC.îO Õ}Uü:v8BzrGOê*-ÌåY²NsßýzƒÄùz[ ˜l-õ#ü+Í‹ÔÝ-N$ýÞÜõjÈœ:‚Úz}Gz„ n¤·%K($qôî+·•˜¦®E« $ÈñëÜWäwýEwz¤di3’HwÇù⸷WÛÃ)õÓ…Ù‘ˆèdÝ8@Nßʱd¸—x®¢H ƒ¹ý+:MC"1<ŒŠîRV9M?‡£þ'óÿ׫èI^•\‚,×[Ù”ƒnÃ9ûË]õ\v3–áEUQEQEw^lh–ƒv3p㱟‘½Æ#ôî)i_ò¹ÿ®¦®øe±¢Z ØÍÃŒnÆ~F÷üÓ¸¥¥ÈVçþºšC;«oõbŠ-¿ÕŠ)ˆ°zV>­þ¥¾•°zV>­þ¥¾”ÊøkþFiÿë™þFº(æ–ÒÆ#Œ÷-åD¾T;¨Ãs‡(íŒÏAÛð×üŒÓÿ×3üt°ZÇq§}šdaÛÄŒªJ`ñÀR?!ô) «»=³C¢_ÊŠ1I­› :ƒ‰ºŠ¯¥J󧈤’ÞKw7G1JT²ÿ£Å×i#ò4x>íôëè!EH£Ô.F€ü –Ïýg‰?ëïÿm¡¦ض¶ÎÙ¦_›øPöúûÕ¢hÎhö©%+ œuÇãYf坿Û~È A ¿ÿ[<{ÿ$Õ®ƒ²XF_|¼¾Õ胯ôü3U™ËRÑŽ‹¸ñÓÞ°[JÅXÖʨ€ôÆxÛCÅÈ|./¤º„aÚo/ÌØ#`àíÈÎpGZÞyZ(ËI+£,傸àñY‹ªéº$SxŸZíí£Âù®Œæ8ÉÚ£ å›=8ÝíJ%RV[ åKVgø³Y¾Ò4X¡Ó[¹Ü,r`1T³`ŒtãŸZÄ…à9lØÜß^y÷…J– < ã®æIï^}âíé:ÎË–gŽFR²žI<Còþ¿Zö-3Só. ¤ff]Ç¿§ùô®gâU•íôm½²+Ã$¿'°\ªƒƒ‚FþO{ŠëHÔŠš2”%fgiº•–“¤ÜÝ –^•Ü[î¨P€í\¥u>µup¶‘Ÿ$æyÙ9 'Ø ŸÄžÃìtƒªiÑÜKrín@!@$ç¸Ï·?‘­9õ(4M¦é–,$ºFI®¦ÎòÁUãŽÿþº¸Á7p”º¦šßOÒôË]>ÑþÚñ‹=Çf$)x?ÞœŽÂæíîô`š¤h—O*2.víFzà—VšæKo´É#C¡qƒëVõ}v[íÂæ9â}¢5Ý8PýãÇ'V²Ž–H•¡Œmnö;‰Ê±ÜÆ’ºÊ}qùWµ|8ÍÄ3Þä˜ÞŽ÷PAÏ=É8ÿ€Šò=TéÚ –]‘˜¼õr¹c*à§×?>3gðnµ¦jp¼:,«8†Ün,­çrƒÕsØöïIo¨'øƒ#Oáò™‰Ç¸=GûÊ? ó™Y'hÜò§Ÿ­zÞ· ^kcíH#µ%ÐÝ€BÄûaýõí^;|ެ’2•Ýž çüóYaÞèrÔx`ão^¡ñüêÌVùÖ;wªÍtƒ?L2šÊ¯éö’jpÚE÷å` ž‹î}‡Sì+¥»£ÑÏôbjÍA$ÌQªò€rÇžO8ÉèGÓ¬Ö/“NÒ®n¥#1)ÂŽ2IÀLš·§ÙÛéöÚ¿º õl§IÀxóT_- Ú¡@ivó’F@϶k̾ªzK÷TÎ.îg¸™žF,ìrÌz“Þ¯ymߞ͔¸ýã:‚pO$vÎESŽ##ìxzÒãìn¤€Tá0èF+ÓJÈànìr›h.\ü“D¤…Ïñ`ðúÞôÛ{k‹Æ1CwüÄvÀÉ'ØžzqÍhFÑ9HeP $²¿€qù=+:kén[ÀÎé#bŒmB{p:ŸÖ„#OG´2ÊÈ¡$HÉPËÈÉÁb3ÙG§'k§òåAµY¥eŒŽ¼véþzf¬h:XiðÈ͉6;}O&´¡µ] …Z(A?¼9gØgö‡¥УªÛªé\òÃ;’Áþ|šç#šлɴŽ•Ðx”]Å¥fÌË21ƒ¹ÆÀÇ9Î?*ó÷Šæ4.±–)¹”€Hê¹ÇQ‘ǽz ÆçP·ÃeÉÎÒ98®ƒKµf·2ÝœìÛ“Æý>•†4K4›iʤŽÈ¬\ cœ~UÓ \m,ä(êr1ôúÔMÆÖHp§­Ùȹ!a•G$‚*S8‘G }+AÐ(%pä䯣’×í*¢Î;“ÉüEg¦³ÕhlêKŸƒ–kë!ÿѯ^#y Ý_êk „^dòÈbȘ㡜³wóôÆ1Žùü+šðÖ™Ÿ|º† R&ec þïPÄŽÝGÓ#ÖºiÇžVG=YòG™žNÖ׺DÂÖê)àFLr©Sù¯-õ×›”šUÏ+ü«éŸ²E,þK„c¸wSØÿœ×1ªØØÛkq[+[Eq2oªì rBõ?tþF´t¬õ1U®´ZžWá ÜêWa®ÏØ­žEù²¯sÓ¯ùÅ{ Hš~og§¢-”gníÛ·uÎG©<ç¿ÔÔòÕ[bÆ¥GcMtçmÉär@÷¥NPoF9ú£nÖéoÝc’æBWWE9ÁÈÁÆx­I h‡ÌA¡ÏZ[K â!áÔþuc[³Õ5æ‚ÂXØÙí—d›™A,sߟæk,U8NøW>~U±¯¼Ž>dÏ××>Øêk†ñ¤ÿÛ7ö¶p]F4kFy%%²Lp빩Èã ×i¦é÷¯¢µ”wÅ©ªViIBÙeÜ2A+•ÈäpGZáï4Ý_B¾¯¥²FÃ,È»­K#§å‰~FÃe‰ƒšÃG’7{›Õ݈í, ýòXEl™ C°*3óCnIôä8è1׃«ªÏú5¥»›&Ö6ËD1ºVpYÉÀêä21Ž™8½§C™¥ˆíîD—7æÈy’2~y™G9rv/\/psV&Žíæ“é:7͸r£o'NxÁôã¥ÏÙÅÊ×1öN«ä]J:<úe¥„BXîžæã>oœ Ál”à‘ïÐK)ï´û¦O>?4 ²L€7—€s‚8,Hû(¸½šûLŽ …•-·6Ĉȣ%AönIϯj¹®^vñ[ÇØU"5$g9õÆ?®k(B4é:²Õ¿;ÛÈÚõUOcª^›ù˜š™ŸU»áˆ…>fûÍØ~õÏ¥lé–’&‡w 8$ç‘…ÁÇæ Q²„CCò„õþu4Ì“[4*O˼ƒ¼þ¾=+–3”åvo(¨ÆÈÒ²ºb ²œ’ ­î–bÑ1`ƒtùFÑŸÇ5‘k,6²,“²æDÌkœ³Ü tó1×͸û‚ĺràAZ%ÔÁö)j-‘r—y’î$yi/–@Ç'×=¹¬é¼eÈX­§dæäúŸAô­‹ëUºµd™w’Ç^Ÿ™®òÖ[[™"Æì£ ý*Ôä¶e¨ÆKUvu:o‰"Ô.D7pcò¤)l’xŽ?>N=ªKÛ˕ܰØìÇü@ÍqúzNnã“É !<̧CÇooÒ®_x¯M´“Ëgk‰;–,¤z“ÇåšM9½u"üÝÐêÒçÌ·T€~cÏÌN1éÅW-#ɶ!þÈÉ#ÜþUÆÿÂ|ÀÈ,’}.3ÿ²Õ;âžò·Ú­e¶ü¨Pùˆ£Ôðä \aʬˆ”œÙkÅ÷𖑍izÏÛg}&ö{Ûf˜˜ãVl 0y¹Ç' :fº ŠXãÍŽX$PêÀ‚¬ÎAéŒU,®mõ4*)àœul2°=AÏñƒø×m¤èz5í­™¶³ÊÖØZ˜0È›çvOËõéÏ5-_m˧·ïlZð§Ù†™(µB¨'!³Ý¶®Ms·qjš×öž«ee«æ¯Øçk‚®‚8Ú»rÛ»Œƒ[þ*të­¨~ÔøQœ…àgšè*éß•2«F1›Œv8íSUÒî`±Õ×[}:õ­ @ +o‚T©S»•ŠÙûlíá¾¾€Ç?ØŒ³D;2FJتz´Bmú&û¯o"ŸÅH«ÓSçMRàßê7D*|ìßœÞNÅ6ÆYa›ÌŠB„Xvaè:³{a%̰L¼ ”`1‘šÎhÙ&aìç±÷¬¯vhÖ‡We õúŽxÉ˹;IÏdöûWU¢éa²‘K³ù’—Üý¸vè8®6Â[˜/%Õ$ òÊ£ž­Ž?•kEâkíˆhØŒ¸C’z™G©:³zøMic$ÈÑîAÒ}Õ˜öj¦‹®[k ååèuˆ¶KÝ}Gò«Qݾ³¤L‚6·” Üw/¡íÇøW='…êE3\–$ƒ¸HëÞ’µƒKjt­b¡™Š€3ÓßúÔ3Z¢ŒäŒzSÖÍìt©mḕ¥ B<¸«cƒÏaÇ;t®^?\ÇtmuH“ËVg‹ ) ãp÷ÁéŽüQËÔJæ¼¥à,§’§š?23nÓ“€q@¹†åBÆûˆ÷È#ÿÕKæù;bÁËs¸ôÞ‘±W¹Í]Ç%¶£n·)vÎzŸ‘¿®*À”\å8ýÑ1œpOz“Y*'·br<ݼzGóÅS ¼w6“½‡ä3úU!'f3²(µ¾pVMø<¥kèìL{×iV<`gÿž+#ÃJóTF 2z¤ŸéZúe.bNÇ wVóñ¯?µ‘ßEÞ(í"ùTg8 ãëY~"ÿ0ŒF \c¿'ü+Y$FÈ9ÜyàŽk Ä.¥"ÛÀÞG^8ýzó)îuAå{ûS¡LÈCHïßšXò85,$4˜>ž•轎h•uD'L¿<¢~¼xÊÊçk‘Í{-é ¦_Œ»1ô5âî>c]O´F'dL/nSþ[?âÙa5«…ûÊïŒVy }i úƒ]–G%ÙÞø/Rûf³,^^Ü[–Îìçæ_ozî«Í>ø¨'ÿ¯VÿÐÒ½.®*ȉ;°¢Š)ˆ(¢Š(¢Šî¼2ØÑ-ìfáÆ7c?#{ŒþGéÜRÒ¿ä+sÿ]M]ðËcD´±›‡ÝŒüî3ù§qKJÿ­Ïýu4†wVßêÅ[«S`ô¬}[ýK}+`ô¬}[ýK}(•ð×üŒÓÿ×3ülÞj £è?hŽòˆ Ž(ˆÚ ±* ü£'û£è:V7†¿äfŸþ¹ŸäkbûNþÐðû[ ÙÒ$GeÂÆÈK Œ.G< éIéw÷w÷ºv¡oj³G¼ßc "±;¾NIlŽÙ'"“J¸K¤ñѬŠtp%‰£oø÷ˆr¬ˆ£AŽKíFçYžîÂy%¶E±—ÌI'-ÆI'ÓŽ*[?õž$ÿ¯¿ý¶†›ØKs¡¤$KÔçæ¾øŸ& ¾MÕyóÆÆÛNxÇojߺñ|olé¡ÞF0ïúXÎj(®VO>ÁpÄ ´±‚ U rIÀ\íwüê”óyP¥ÒÝI[Šm•0Áø8ÀävÇZ˱ÔRÔ$k;”Øì$p™b§Ð’#¯úÖô6ñE*ΣtŠ9•ùb~µË R›æ–-Œ[­>êêy¨LöÐ)±1Áb1÷‡Ðt®Câ•ÕÆ¡àMBí§!„["BUóPr;žü×q®Ùßê(Î×M²©cäž¹?ýj¥àN5Ë[3#F𙕠O?…LæÕXÁh®ŽÊ4“£)nÕþE8¼3m'ÌPôëN8M¬Q¢ýÔsMµÕ¾Ó ¼P‰ºIpDh{ŽMj R).e7#ˆA`sÓ$žü äŽsøÓ:ü¯ßeŽ[ÉN}æÚN?*Ó¶¸ÓíÇ­#FÊÄwíZpEK² Ú³5§ÔX4ëXØs4ÇåOßʻéáÝÝjÏ>®!Õ|«DQÖ¼Cg,qÜ©S’áAÉô_Ç¿·Ö¹#~ÆYeŽ gyFÆq×ÓéL¸´šÒáÞêv¹p@Ã.ÀÄöŒŒ“z¹§%•Ω$‘9™ Û÷lzãšã«9ÎZ™¨¤iÙé“J«5ØV›ã?\ Õ{˜P3Hà <ö­õtH™T*™-Ž:ô¹ª6Úνq Ý)†Åò‡ïH{ŸZ‡GÚI(¥Ë¹SAÒŸW½’ø©"âÂsÁþµÔËáàà2\È’\õ}kV(#´c‰ TæEØ_8 ×5èSÁÓ„9^¤)º†ÊÌï]Í(Úª #çù×%ákx¦ÑôÛ]<®Kcˆb þèü”R„,˜Û¹³áOÚMxúÃZ¢:ƒj\ÿ3\÷µ5»6í§ùñÑ$Š»@cÓ§'¡öâ» gS}ÿ³d¶}Ï»kú¹íƒÎ_ÀWŸøªþ9H#I<ÒbN$ŸÄZÖRÙ!ÂÕ˜¶–Öº­ƒ´DDc9žNsÇoîú÷⻄oâ»é¼ƒFÅÔ+>æ?¼Œ‚Zäü?qm™¼Ù‰ÌÎë& N;w×½w¯©Ëw ‰<èü–fáSæ8çîã¯~´›å‘Ý=9Qr¿½ØÂþÀÔu^ÛJÄÃ#6$bçddýÕÉã8ç{W5ñ3NÒâ¶³“O(Eµx €¶g¨ažœ ö/ÆÓ\´–Ò‹{G‹„M¤«/A˜c>˜®6ÿãv£c©I iʹ(XÎÊF àc¾,SQKTΞÇÏëÒ»¿hòH—¡r¡ò3Ûq¨àŸv÷®êºµÎ –Pxz–Iiþ”Ã$œáâ»ÏøMõ"ð’8ÝϯzUªE+7kšR„›ºW8«‹È-tyn ’ª„¶=»}xí^3¨ÝK¨jÌçt“ÈXþ'¥{¾¿ñ’óDºKuÓ¡¸b»›÷¥vóëïúzÖ}ŸÇMRóyÐ….³³OLñÅF”cï'{—Z¤¤¹Z±ä±ÇåBˆ¨:æ¡”£q°«W»KñOÄif—qøoÍ…Ûj”‘˜ŸÀïùUdøÁ¯­/‡vÚ¦I]r{•ê=+¦ç1â(ÙAç=À\ÿJí<-áxn/£ºóíî"‰b" „fÎÔ`Ê9' ‘Àæ½þö©& Ägs…në-§Årš|,ò| ì1‘žI#š/ Xå®-æ>É" ¨Y·pqßœ5ÖxSÂ6öDR_Â’\JL» ¨AÇ õ9ã•Rˆº³Ì#›O†"A#÷…º~>⺭+TÔu=-o‹Efe c-3þ Ž泂8ó¼ 8T ?Çñ¬Ù´Í>SSYC.ÐÃÀÁ›9ê=ºÖË\ê+ÿ-á<ÿÏ&ÿâêªj·îHEÆ9òœ~_5l“µ’1|½Y«èñ<ý‚ ç~ÕÛ‘Ç8œú«š—ºΫ(‘§]>$IwëÎ;{d§sÐøËÇ7þ¶µ’[_´IrHDl ãÉçœôè=Ôѵ½gQÒ-®ï-ⱸ™K5»bƒ'9‘ƒÓŒâ—-Þˆ[}£š‹ÂÓˆB]Þ‡ÀÁhø/õ⦵ðͽ¤N©q+=d ãðWY5ƪðº‡Q¹HÊÆÁ†xÈùºÔRjú‚>ÖxCuÇ–ßüUc(%«5Nû3'Tµ™¼go4Mæ‰IdR Èg=«‡‚ÆHµ&½$‡ÝÑÔ1W žžØÕèÓÞ\^ùbgŒ„mÃjs‚:’}kÊüY­Å Kr7ï¸2¸ž¿1ˆÿa76׳v5¾ÒÐØ×þ!/‡¬^&‰$Ô]~@­ò©þñÏÓ~•Ëø;OºÔu |M«\¸°€LpX‘´·åòø˜®/KŠ}\YîÙL€³­{L¯Ùc_"8åU%vûϵJ’µ›1PŠ~êGû<Â9T†##Ðý)ñlžî(€Ùþët>•PJò§’ã(H#åä} I¤ÛÌúƒ,edTç#$öÀÇ9Á<öÆk:P¼Ó ¶ Íë—Hµ)$€œ"Ž„Ÿ×?‘¥1(ñl7QËHÁY•ºíÙ´¯ð3øŠ[Ë£c§Ë¨â!"6H›'®xÆXœcêk—:¬m#ÈÏ—%‹2õ?‡N¿…o^I%ÃFM¹ô:s&YbbHUgÆ>ŸfXøËSÒex&+sk’cór’"ãý¬†ƒ9>¾‰&¯¤Ü¤fúÚi$„’su÷<÷=«Ôî,Væ/ìS!ŽFS+º·’=69ÇqŽÜžØÂ|¯]ŽªæWF̗ɨëÌ’Yê2ÈŒ«,e¸ÁUE`2 «sòœ9­xubY Q+NåÔ`Åö8o]¦žmҹʧpFæ{ߌ°þÖyg¹‘üå ²1TÀ$zdqÔ‘Ï¡ãÄ©Iò\õ0´×/´*]êæêímbe»™Ç^‡ ?¯ãŠ»nUQB©lŽÇ4ýsÃö°[}«NFWVR˼•ÇÐóœó×׊£ÂKŽ0çZˆ¦•‹ÄF )Ez>Œ“Þ‹é²18Lñ‘Ðþ¤~5¯{jЙ.‘s"DTQœãô¤NVÝT«·ÐäçŸóë] °’I,¸9­"Ï>[êpšž¨úŠ$I¾÷¡JƒF¹OÕžÞä+Ã3lV#£àsʬj¯£)d ¾åçŒqþ•¨)YàDa¹¶àOãS}NÛEÓ²Øgõ1§ZÁokµ^ëvJ™T`t÷'¯û&¼õB”NB¸éµqÜõõê}{WEñD›[³`rÿeÚæ3cñ?*ç™IU™0†>SÓŽGëþq]4õ‰æ²6ôÎ}úÓk#†ÛƒÎæõúÕ˜nI2¡c$[7:‚S•mËèp¥sèÆ¢yG,ìK±ÜKw>µm 3¯ø{ªhúV¯u>¶Ò _³amÒîL}ÜvÜyíß׿Ôîî5KT‹ÁE­…ÐIfÝ›Ì@Ã;•·6±ÆÒ§v9âÑ@w`''«cŽ?¯§¿½oá•ïöl0 ˜æ>m¼Š„!%ØÎHÇ`6©9µrFgÚñ•$äŒÅÛEo«‰°ø¹¼À½ ~bO|1úäúTÊ £¾¼³ræzënž„ä±\ÄúS%–xgŠ$÷Ì%G'¨Ç¿¯áLiͪ˜¤öGšyð?ýGÿ­U¬¤º¹³] ‚F3ƒÔþ•$’Üò^¨ÄÔng¾œEöpì$Æg=†+!ìÂ,¡FÜÖºQlF¥#䤋ÎîÍŸåYÚÓ£ÚÇ3…ŽVl– Ô`þ>Ÿ­Z'ÈÅK¹a¡o9é“þEY“V¼¸1ˆ•Dn^¸Î^†¨ˆÖRïo\-jZ[¯î·d Ã×§êsJã{té#[Io£V¶p|²G)#zã€03€1Œõ¨o'xºdG¾jܯKÑ‘­© ²–&U ƒ‚>aÏNF3HÑŽI2¬çåÇ8þt¾!_’Üãí1cƒýñÿשnd@©À#²¶Áqú”6òNaTPáÈ8êßËÛÖ®"´:„— Çká_>¤ÿ“ù×;á©u-A2ܤÏ¥uay­áUÉr~eëÀÏrâ#»:ðòèn[£Æ$¶9ÁwÓé\þºÎj¥¸³õãšêS9Ú§ò<~þ•Éø…™õM½Aú“þäÒ^õŽöôedÉ ä3ý*DÜ[€¹äU0­ÉqéW,æF‘²P0k¶ç:ZŒº‹:}ñã˜ñž¼÷¯ ‘Ø9äõ¯y•Ùnâaƒ³ c¶ÿZ¼Uo1€ë¯¼Œ±_ f`)¢õÇi§9Æ*2¹í]Ö8®w î<ßÜ.1þˆÇÿJõ ò¯†i·Ä—õèßúWªÐEPEPEPuá–Æ‰h7c71»ùÜgò?Nâ–•ÿ![Ÿúêjï†[% ÝŒÜ8ÆìgäoqŸÈý;ŠZWü…n멤3º¶ÿV(¢ÛýX¢˜‹¥cêßê[é[¥cêßê[é@¯†¿äfŸþ¹Ÿäj߈×o„YYJÂÔN6ãïù²0¸Îxv*§†¿äfŸþ¹Ÿäkbþûû+ÃÍ(·Y_É‚$…†ÕfbT6Œ ž~Qô)1™êzF›ã[¼^ØÚÛIeüʈ­ fÆ9Á;Hü1W´«˜/ÄSÚÏð½ÑÛ$NN-âÇZ4$²Ô.tk‹K y5¹F±‹ËÕ‰+Ø‚=y⥳ÿYâOúûÿÛhiôÜòm;ÃòGc-ÔWogýË RιÀÎAûU/´jö÷óØyë+',Ç/×°9ã®? ¹m¯ÞÚ+[0ϳ#{QïÁ¨´]êÉÍÅìß5ÁùŽ; óêM+¶tFŸÂz]ãYÊœŸ˜Éük¬°Ñ‘•ÚRòÊ0Ì;~5›ipl•llg9­Ë]R)ñ¸…9ÅiJ¤Læ¥Ð’æÁ¯4ãr‚@1ã¸ú×3ã©î<ð÷QÕ49µõ·•åÎcW ´¨­ÃŽ•Û+)ZÃñ7…›Åþ¼ðûßfº*MÁÌÛ¶@ÿw#?wk­B7æêcí%ðô,ë -4;Ù"Žè$dãñ5 T0ÁzA‚>^ƒ€jíby´±[€ì9Ï  ÷Ö¶ûRiÐ7qœâ‹ÍÊÄ+²yŠWrõRGQ\éÐb–f¶[´WSœ½·Žßˆç¥a9ÎéE\Òœ þ'bþµ¡C©Ê»¤ ̸Ø@!±íøÖ ^¾ÓË}•â(ÝP ×vªT•˯GÇ4ŒdàãÔŒTÏ ùº’¦Öˆå­4T–þ@윈Ô|«þ5ÓÛ®J„Œ3qÞ¬Å×è*©EGD);„‹Óå&«Ëµ#òï,>PsŽ*î:S (Ùb0Oq×üñW%tEŠê~ÐHÉü*g‚IÀÕ ;@VåÖ8¤geT$“€½d×*.*Ç™üGÕ’ÖòÞ8¤ÜL-žxRsŽýjŸ„4€t%»ºib†Î,#+²1f$œ‚0 è} aøËV[ñ Çh%½¡;Ë!#‚0FxÇqZ³xšÛQð¢iöV¯°¸‘w°ÁÂí$úpúþ³¥}Í£Ú*ßê0%ôW) ¿”è±4Œ~d½É<œœõ®\Ë3¡µXÑøVg,°ãó­+XÅúÆí$›¶•Æ>îVÖÝçóÂ"ÉÆ*S]N¹Á'h–SE°—ÃÝ}ŸãY°;`þ5N-T·ŽEœ \©q“ë[0Ú=¿‡a³¹Êm q¸rıã¨ûظ«.ÛÛ‹‰[6±gbÿ6:ŸZç©VJV‰T œnÎFÎâXí¯b˜ ]ß1çÓòæ¹{’¯©ÎÅrz2“Àn™öº ¢óÉstĆðAØ3Çà2?Jæ-VIî0±ò>?BO 3õÅtݨݑ-ZGQà3¬KªÈ¬|¥1Ä÷ØOà¼À½«º¼-¬¤º‘¶F€±Çùü×_KÓc°µŽذE›¶{ŸlŸÊ¹ßêIªXÄN\–~ßAèzçðÅ/ÞÔÑ›/r;«{6§«Ku#fI['òÀ€~Ðèöry·$HŒFé%0‡pݵsžpqž«Ó¨ç#D³K­M%KA ênFzg¶yæ»Í:ËÍÓ"Q÷w²;yÎW»mçwÞ^˜ú°VVG=ÉEÓÞÑn¥ŠYnÊŒK$Œ<ÂÜ“Ÿ¾9äúUd³´XL–Ë%›c,8aõ9$v98#ƒïµ¨M¶ñJ±C[ ƒïchÆïöróÜóÉfûLV¦gýݯ–L‚7oÁîyfÏ9äzÕZäºUœ—7±Ú_6 r9GÈ1ÔvÉ9ïÓŒõ7÷³‚I:ÔÓìì¢7&êvȕߌ½y»‰$çœõªË3Æ`ˆ2™~EÛÉgw=v€Xû)¨’Öþ…¿ Ë×wRi‚öI¿vŠÎU#$AÉ,r{0®É|A4IqiÖñ[« ÑÆùm¤óµv€~kÂÚI¶¶k«…h¡(aŠ%\d|¤í‘ô5±¦xz{™>×u˜¡ éó?ÐvúŸþ½MÛ•‘¼!i›ÁVhÿw"¼Rd«)ÿ'ŽkmwO³˜Aoo¤q.ðG<ŽØàõÇQØäóúߌ¼óé~†7/–Óc1£d†'ûÝ=É=mx^8¬ôd’A˜ê«,ž¤pô0:Ø­ý¥•ŽWM7tKr—ƒ%樨^&ß ÊByÉêÜž/}cX•“©b3ùT‘r›/îš¶‹º%PÀÚ©TRºgÈÓÔ‰^Flxf’kQ:£È¸eÉÂñœÕ„B1\÷Œ¼]gá=0Í0ÝH¶·Ï.GR}w?…sÕI«Â÷2|iâkOØ,…–k¹Tùÿ6;gó<Qà’ OÅZœ—“&y¤ËHéÿ#íI¨j+×džêVžY_,Ý=¢^Åá¥Ót;’Ñ2λ& Œ’G_`ãSò/2þ#›Ò4híŒP¯ €ƒÉ=ÏçÚºøîmö…‘^6#ç!r õã'ÿ×Rß Yç&Ù<½›UÏ8,z>˜üÇ~¹l°²LÆHç8=øëÿÖ¥))=ASh½<–ªK½ñÛƒXÍeuYÚDg•}¤ΫIp­œ’1Ðç“ü…NšŒòÄ!Vwº‰’}1øʳ«-¹ ¨ÆËÞTÕ¯nì#µ–f’$˜HKüÌ :õ#æýV·d, ®sÍt:‡ïe‹÷ÖÒ,rƒ†##§µs÷H,æVB³rO {‘éRÛi6\ySj%•»0Hä!u#rOäõéZ©§‹›3=®ß, üÝÀëóÚ¢°½ÓÔGyh’¸ÝºC°l“ŽÙ^1ÓÒ´ôÝVÂHÄ6ù€ á$I'ŸR;úÿJÏÚJöå~¥8+^æG“ ´žHÙPK(l\r}Nÿþ¾]íV2…`w+‚=Á®Ç\±"Ì˶‘²©‚{7aÒ¹1øþ4]½Nì7"‹ÐŽ8Îöw%˜œ—c–?SÞ¶ôý~çM·ò!Š£$³+d“ÜàŽÜ~”8¥/Õi=ÊœãkW¾!ºº·1Çûänd''ŒŸCéY>|¨Œ©#¨nXëŒÿC»'ÚsíWc)I5k"Ôn툮vôàæ*³;µÇžÒ¹—víùä­&çóøÔ0Ëôô$Ìœ£Kiª_ªóµÂƒ’² Äûg®?õ=9P²[½¿ýuN]ÙVpTž¦ÔÓ¨äò07¨é‘Y˜[)›ÊžQ8vç1ÔôþU}/Rfp‹æð¥ˆÀQêO¯5Î_ʬÑ:H޹œäçqê9íÁ5-w<«’Ã%Ë^¼²žxgߦqéÉü+Yº/ FÀ 8Åk}ªF¶@_%¹~P?¿þ¼Ö5ضÔdc…YQá\täö c“ǯ©‹”»”íe 2'Ԛ؀³Æ?6}r s³M4- ±%.HÏ9È {ñÒ¬Eq".ÐÜŽ^ÿýz[k›Ë'™)—Ò¨bÒ’£$àg¶;Sí.D¨I;XsÅ96€Ì[ ?¯j™Jèq™Zx— Çh+Œpl*­sf$G}¤€0ƒ„=zŒun½[’rª6$FWxg¸ÍDdÓÐÕÁ5©‰2Ûý˜!_*xq¼çÿÈe<d}0I[MVêÂî6™pCð} UÔ#_´‚§ä$‚G±÷>ôÄ`)œ•ÈÜ:Ç¿oÌWTgÌŽIFÚ&­x/¬¬äˆü’]C÷°1—нsr!¹##Œþ•ËÛ¹û0†O¸·p`}_ùWKpQ‚€|à ô£Èަn˜L^&ºx,cÈ+œ1ãÔê+«~c-’(ˆo^süëµßŠ%vË$¶8é¹xÿ>•Õ¨%cO!wÚrp=F{ÿõÿçÄÆèéÃ;6t‘3FsÇÏk7(ú”“•FONsýk¤²%íã•”È>«¿"]RvÏ%ºõÍy4¾3¾_s˜äç?ÔUÑO8+UÇ#µR q¸þG¯µO`7]F¯Â’z} t»ÚÆJ×¹:¾lç‚ Ÿåí^'25¹=kÜ¥‰|›ŒH¥väŸóë^+q‰˜q“ÈÑ‚ošHÏð¦P1©=)RÙ9À`ÆàœQMudùqÒ½€é¾&•éÕæ¿KoN 8û3À’½*…Q@Q@Q@׆[% ÝŒÜ8ÆìgäoqŸÈý;ŠZWü…®ë©«¾lh–ƒv3p㱟‘½Æ#ôî)i_ò¹ÿ®¦ÎêÛýX¢‹oõbŠb,•«©o¥l•«©o¥r¾ÿ‘šúæ‘­›Í-µ=ìq¸‚Qá eÈÂñ‘Óè:V7†¿äfŸþ¹Ÿäkª°]¶Ñ®Ý¸‚!¸Ç Û È}JC3l,®íõ ½kY–Ò)<…ˆ\ùqƹbؤç§TZỦâ)ígŽx^èí’' §ñã­t5‡gþ³ÄŸõ÷ÿ¶ÐЕémÄVH.áx˜p¸?(þõ~þÓt`2U'#ð;T%¾&+ç°h!:ãã\þªï&yeØŠ¿)?ùükÈæö—:Òhé¯{S–^0 Î=½ê)5’Öí–ØØëš¯m¯YÝÏäI&3t?ÖšöPßÝ…n~gçükJIšßMN˾$7¶¢9ą̊H õëÇé]ï‰ô¯Z¶£«]}žÎ,o“ËgÆN êGjòy`{+´Ž&pÛ”€‡Þ®|L˜ÉðïR$äáÇüä&»iâ%u3ž¥ncÖ ¿´¹Ç•¢˜ZãŠEl_¶þdâDåÆ?ÏÒªßÛµì­&[ä9.I`yÇ_çžÿZÕӬѴ湚uŽ><µ#’Ý3î9¦³4z4²”°2¿OêAük9¤Ù¤/cÖŽÞc ]§¨°#¸ç?‡ÐV÷…4èþÙæ‹såUC7-’G—õúWðÝ¢Nnd™òÅ—QÆ3Ÿé]­´p­¾ô „ ¨Øã>ý3N0³¹Õˆšî鯃Ê °žÿ"±¼_¦Á¸º‡bíÀA^Oè?1]$(²Ê!·¿Ö¹¯N/®Å¬rŽ!ö60Ø#ñ5RZXQvÔã$¸Ž$+1QµŽx$úúçW´Ð±Ú‡f žmÝô¢m2Ö0e¸Æ3’@çØ{óÞ¹ïêKa¦Hð† £bs¹‰à‘ž+%†²’±?ˆµ£§xš©VÞè'< 0(ßFŠóÀÄgŒŒUr€’¹Î==Å7Â5§½Ï]¥ÆqX¾¿ký( d„ì'Ôv5µŒcŸÂ¹Ú³±ßs+’ ÜÁs×ô©ØàtŠ‚, ‘žjwã<ý*àa[r3Ö¢¸m±©Ôgüj•Ã[Ð mؘG™™Öwf’)`¼ãý“Ðþ?z°Úûÿ¢\nèÃùsÿÖª³DÞbº1IåYzƒW¢¾ŠxÖ+«DŽLÿÇÄ<)ä²ÿAù×<“½Ñ¤ámVÅuðÖ£hÊë"‡Æq6åý?•@Ú=ÂL.§ºGc“¿,ÎO¾E^šæÆ˜ï§3ò#¿š¥}yFsrÍüN<µüA«÷ö9­XÓv›‘‘©AÁI$}OÿXWH4K{”f…‡_º~¾½¿*äôµ–]öî?ݺ:ùa µ¶g®G§­’Jèõ§lÓ.ÚÂänÎ$ÆÇàkE´M>P·hvž œ±¼@×`¼ù6#È<’yä~›©=²É'ìòPu(zàUkndF—±Ò‰b”rÀŽ˜µaï¢Fh·±Ü»æÿëV2Ä»òµ©¼pÉ®dôÌ#TE勦½ÉgûÄ𠉪&}ò[åíWí®Êg¿…O¶W5T´þÎæ(Z™1•g^vývëÇNsÖ³mì]YŒeJgŒŸóþ}ø®‚=a‘YwpF=Ç¡ª³\ZZ8ýƒùvü+G8µ£3ä’èDm­íÕ²þk°ÇÊ ¯o\ù­g_]d ® öÏ~{þt–ƒ›h$ ûÕÙ´Å °‘p¹#ëÒœ Žq´¯,~Sݹ=»þŸJÚ*ÊÆwÔ´ÖR[éÒ8ÃKq¼Ÿá$c€Íl])6ÃéžkU‘^'ŠNœgzõý+§¸]>`ÊÊ0ª21Kîñ)U?gd8=÷…nÉja‘dˆ˜£NvçŒóü«¶6ëâµ/°ÛúÇ5ÔË{k$n¯"8 ¤Œðý?^pÄ;8}.tºS«ivn\œ[Çß;Áô®*âAöéŸ8ü볉•t¤òÜ ±*…#‚@úW +ì@±ÉÅy4´›g|¾B=úô­Ml|£ŽsŸÈÕìA&L`g§E,‚x÷c©ç§jêz­ VSoæ6òäî]¸=Ïùâ¼zäq Ú¼1í^³jà ‚–BybsùýMyuøoµL1Œ1ì=k\Ç"qŸ( è>‚”çxfäÿ´3Nƒ4ñÆs·=«Ó<ã¡ð!ν>@èÍдµèuçÞç^œñÿÍÓýå¯A  ¢Š(¢Š(¢Š(ºðËcD´±›‡ÝŒüî3ù§qKJÿµÏýu5wÃ-ÐnÆncv3ò7¸Ïä~Å-+þB×?õÔÒÝ[«Qmþ¬QLEƒÒ±õoõ-ô­ƒÒ±õoõ-ô WÃ_ò3Oÿ\Ïò5ÕX.Ûh×nÜAÆÜc†í…Çä>ƒ¥r¾ÿ‘šúæ‘®ªÁvÛF»vâ†6ã7l.?!ô) µXvëòê¸Bl•≕rÁO Pƶ§MiÕÕiÇsSÅ71 ŽÙyv ¶GE?Ì ¯¢êº…’†‚y6ƒ‘6TLv¬KÛ™^qq+6Ó±ý=? -õ@Ñ|‘Ëå·¶ñSF•HûÑœ-ÊÎìøúaÿD #v Ðzž+žñŒ®nåŠÑ"ŽD-('?‡Ó¯Ö³EÔ[0œúòMiØYiör KRÙqu6 I³xŒqƒÓŒg“øs]‘MüF‚Jé 5FÊÖkw%ºà{× iºó]Y‰#ÄŸ(ãœçПZ௵‹8 ±B2ù¿ÔzU9uÉâXÞÛtPï”1]Ê9ãŸoÇðªsqVFN<ÌôÉõlI…'¨&”ëP"ˆÜàãžGõ®EÖ¯µ‰Kp°@ï…S“œc‘Ÿ~ÜsPê¶¢=hD×›£’!ûÀv/9Êñí´õþ!QÎã¸ýšØêõo}ãŽÞÍ®sÿ¼ ·§·ùÅeÚø²I',!óa\ù„ŸÀ×5=Ȳu·e©cô>”ù$¾hžt´KxaË3,;‹ u9Î@öÿ ŽfÕÆ”&¹ãK›Ë³jÊb·SûÅÆI_éÓŸË*-F_HšUœÃiy²0b]Ç@¶yü½*å­¹¿š9o´ƒ-³`ï¾2Húu­ù×KÒ!ó!¶–ËÍ‘AE@C’@^ŸËôéUßVcÞ×ЊÚ`’hàeŽÞóË‹ @<“Éõýz¹«qm9Š[+‰út`çÿ[Ð×=¨x– 2+C§_ÄI×íŽL†5 íO›Ž˜ü¹ÓHñÅã[Äóùrɳ÷ƒË­ÓJTãÍhìtp™uIç¼ÙbˆìHI(÷Çó÷úS/`¶ž"’¦åñoˆòÂËFI ·µs+(ÈFÉ9e†â9Çvnëþ%6ò\-°ýü€eYUö¡Î\•'Œ;ŸBxµMøP ãdšëÃR”äDµ;o†zD·z÷öžÐRÓæŒ0OÝàŒqÉö;k×®#ÄB6fŽX uïÀ®EwÐ4xí Û Ý4€^C×Ðpôš·×÷Å•îf1HJîJ¨Á'¯N¬e)V“IèoB +js—ºÎï½ëþú5˜ù?0`'icŒõ>µÓé¾*°`Vc4D£z3¾Ûzu5OÃÏÆY-QòYq½²3žÆ9< Ž z®ðþÊ 5 ajf$î‘Ó¶}N[§aßШÒn) Ub™ÆGsáëÈÒK‹ØÈa„ˆ8F/ž¤g ÷Á?­mÃkoiʤÂnýÈRP…úäãŽ{ý+µ¾ðÔwñªL]ÙpÂC)ʰèA漣ƾMñ ®ˆÓ®§6é&µŠb|¸ð|Ò6!<Ç’xéŠÚܪֹΧÌû%´6ÉruRe¶²…G™ö¡T`.Knã{óÚ¸ŸøÆÙ.$¶Ò¦š×hÛ .gÉ  Ç”¸,rØv¢ä1äßUÔo¥6þd× ü·SJÆ(Xޱ©çpÉÓ» }Ð0XÙ‹Ywùj䟙»‘Ó°<ð‚³,¦ô&²Ò.õ‰PL¤Bì¶RÛq’OvÀ\žädœ×]¥øy´ì˜.#‚`“È8ëÉÇNzV†â‹ K?*m=Д˜˜1n1Ðàc^õ'öŽ‘vêÑ\²;ž"–&Î=7r)*©½Ãصº5,üWâ}:ÝŒÃN¼;IÚ VoBN@Ï0=ºÕ ¯j×ö?eÔô¹aŒÌÐís' Â“Ó9çû£ñ˜ÏoxÂ8ä…ä',ŽzsÇùêzóQ=«”*¨ðCóéüªÝG-Ìý›‰B-wMY'g†N¢)Ñ”Ÿ¯|U£-¥ÒH–³Ûß7–’Ï>¹8ÏQߥ4BFìgZËÕF±²y®­¢ÜFÐ6 ÎsœOóøÃ}Ðã~Œé5A¤x`ÇvâTfãŒç8Àþî'?^à×5›‹û¢Ò× òã?,kÙ@íÿ×úæ-CP++ü¸™‰+$ˆ9ã=ùü)tM*{ÛÅpŠøå·‚Aüˆ5­”uêMÛÓ¡Ã~–âUžHÎÁ–ï€OòßÄÑ**/¢Ö{«K1ØZ£$Ç;qÎ*@?S§Z§5⣨’ÂñIp˜üéšÍI½ÊÑlhàdž˜ïQî]ä‘ògê5kZm¢$wSNŽÝ<ØŒcèsÏùê(w¼†îä’woNN:w-+šSÞGq<(yH P1ÛúŸÊ­]lq)d‘Ø 29ØåO¿Lý+1-¤ þ­™ÈôúþU¡ÕÖ*Åñ÷y$ñÇÚ£©nÊ Œ±¸{›j¦Æ9Á­Ë³Öÿ&rJ·?…bKFxc€}*ÚFI†’L&Hõ¨ääknëGؼè£lK–T;@àãŽÜóøV‘6ävýkK9jŽxÔ§¤+Kã>™ªîdê@üÏ󭛈–â"zÈ"±¦µšþÝ–%ÚÊ3æg¿oÄT4šÐ¸JÏSFTÕèc­eé÷"å J6ÜÇÄ‹ýG·ò­EÆÏZàjÎÌôâÓWD3|¸‘L#jñS::ñLe$rj5)Øe /pôšºÚBÌ@BÈ}ºÕKiÍ…ÎÞ*3ø_µ%ºXÝ™XURzð9ükxFi{»žV"¥êXÄž ­ÙSðØàÕ´6îÄr0~k {±5±.£•Éç8µ îŸnt饃P›³Ðuüë¦v÷÷1çè`nÀê0}é°¬· …QŒýìŒu"–ÒW™ÚÙ·hÊíëqÓúãœÖ´è¥U@ ÀJèvZ±ÝìŒýB1o`bùBåK1pGå] Ãzà =ÇšÊ×cŽ=Fd&TÚDÏMÃŒ‡øÕÍPµ¼qK•;s‚8÷¨¡ë°–æSD£ÄÐ+ª1[$žÿ‡é[ãI‚lª “`îÁ{c;W3ç5׌-¡U@eV=ÁV#?nZKui;b`bsäÇi\Œúò8=ýXT¿6Œè§kjtV¡£Ðdûè¤e[®3ÏlW4HÈ+a&#Et`bÄ`rrÝ¥fù_.r­yp‡¿+Ò•£d‰Š^@ëì)`;¦E|c¿z±!#€AÅB¼øÙÎáÚµM%blïrý±Xe›¨Hç®xéþ{W—ê~ßqÎNóüëÔ6äÍÎ\'9¯1ÔüL.9ÿ–ÉúÖøz’3ůq€8éF8Œi0IãéžqÓxq®Mÿ^Íÿ¡-z pÿÌßõîßú×@ÐQE (¢Š(¢Šî¼2ØÑ-ìfáÆ7c?#{ŒþGéÜRÒÿä-sÿ]M]ðËcD´±›‡ÝŒüî3ù§qKKÿµÏýu4†wVßêÅ[«S`ô¬}[ýK}+`ô¬}[ýK}(•ð×üŒÓÿ×3üuV ¶Ú5Û·D1·á»aqù é\¯†¿äfŸþ¹Ÿäkª°]¶Ñ®Ý¸‚!¸Ç Û È}JC-VŸúÏ×ßþÛC[2ƳDñ1`®¥IF*p}äqÍ`éVéjž"†6‘‘nŽ ²´ÿñY‰'ñ4åÞŠÆÎÙßQ•"iÕî|†^¿Nߨõ¡¨i±Øÿ£Û™¥fÚ‹xÉïÏaQÁ¤ÛZêQ"–Ö8ÂîšMÌ:ç$/oÎ’k+»¥K#5«ÂX?Úœ&äÁèŸÝï\3¢å¥ŽÏh–¬ Ù¼qjÐ%¢2ívfÃŽƒÓ<×)©ZÚE#$e—õn^éQIh±Çz.^?»#Éô9ǽRCgÞ]ÄM!é½sÉöÁéU ;ަn¼[Ôɱ²û5Îr»³ÈÆzöíÍv á»éÐhƒRŽÚâûï2Äe0ìùúduÛŽ½ë`‚6óI!Aû ~jÿ‡¼]¥hž&¶¿Ô?дøf`ÎFä*>UõaV î®]YÒåµ2Í‚YE–œŒðxq'Ò©Þj6Âg«H§ŸÞ`œ~~µ’·Wr^ ˜yJUNý3VMÜ’\yVÖþJgivåœzg'齌.·¸ïí×—÷)j‘¡áp8ü«>KÂ×qÅ+0–O”lzvü+©OÇ%¹RÃ,3Ò¸=bÎêÎô4‹ òŸ*ŽÖr¿¥fÞä{FÝšÐï,4»E´G1«ÈÙù8#óôªz­œ@€ïÚ¸ã±ïPi^"´hUî$1¨@¹= <~t£Q²•¤—Ï ™,¸Éâ¹$§Ît+X½¡¶Ñdù2¶àGBÈ §y©Y$¬ñ}¦à–ð\Ž }28Î,é/¤ŠÙàˆŸ6I Æ?º¼ÇÛšÌt‘õ9lìí%–b2Ò:“&O;øázýOÝ\Ú³/2·Ûn,.C”C.ó¼€ ŽŸ®sßÒ­ê!¹Ôgóã‰C$B6Tï‚NyϯOaÍD¶PDe§2€>f-ÁàgŽ ¯h‹Ìq‚µ¥£µŠ”“:/ øÜXi—z}Ü~~rÖîP|’ÜÈÜsø~Xúlj^è%™žâ(íÑTr?y/$»·^28öúc.+u–y»eûz`T·7Ói[RÈEdeg1)wÉé»Î=ÇJÒ2ÖÌÍ»"¶¥ig¨=Ì Ÿ%Ùwª??6Ž:ç‘Z¾¿?hk4Xðà•b0T““Ï ãÞª¼×z¾^Y¼ÅŽ"åe$…ÀþØñƶ´í>c©Gu”±Ãšed ƒ#,@#'?ŽOÓ“OF(­nhk3G¥=¸³•e¹ÎåÚ€tç¿ëí\¶³­¬öÓyrÃ$—™y Q•yÚOMØçŸ§]Éšz\Ù\@ñÜMåϦ¬;=­«]®Ñ$£b<‚AìýGï é×3Êúm»4MzàI'?*€AÇn±©ÂÅ'b'vç®|=ÓÒ? i÷&#ûhÊ¡9‘¸‘ìI'Û8ì+®‘Ö8ÙÝ•A,Ìpõ®b {LðÖ™­Ûcˆl#RÌø  rN9ú{ò½wÆš÷ÄMQ´OZ áÈ-ÐÂ?¿+ýÙSõcy‡zV9nt~7ø½o§ÄöÚ,œ°ùn‚‚ÒŽŸ¹R1·?òÑ^Ðý¸{o kº†—u¬k—Øéo4r-«“ç\¹ nrIbpÌw6N c¸ðÏ€ôßÞ SZjzÁ!Úâà’¨Ã©Œ–#ûÇžæ¶o-޵¨Gö½ÞLs™ÒÜà…r:·¿¢ó€NzÖ5ªÆœžÃJìˆhš zRÙŤA»Qb„o±/ׯ$“žüÖe߀téÑ6­ .Nä‹0>»çòííìàĉµOðÉÇbO¯ùÍXvéËa#Ï ü+©Œ«Qû±ÐÚ/—fy”~·È:ƒDHýØxÏ,=Çl׿lU¯ê1Ƕo7ÍÃE'\õä€?#Þ½5íáº|,[ix`«`0ý?֨ܺ£bèŽÌcR2Ý€ÀíE:±šj~ëFʤ獵‘\èwð\˜e‰Ѱ 8Î;Ž?ˆt=ÅBŸm²qÜÜ@Ĉå îȯXMÞhI†ÿ–‡ ‘ÇMÀŒvýRít‰&¼– uHÀóÊ+í„ùçH<?Þç°ãë^Ôj*ùêÈäŸïeh+Å­›Ë8yIŽK W¢h¯¤YÀ±ùÈ3Œ—B>½xõïUm|#$³”Šlãæ\çðõêqíZ¶Þ¸”…K˜È ÎTçéÍdñwvJæÊ„-«±~ ‹{û©–B:ùo»ùUåHZÌÀœ‚;“\å߇o­Õ•í™—pPæÉÇ¥S÷ѪˆZu9áˆÆ:ñíR±p“³Zᬮ™Ùí³/¸3&_½ïL}/K¸rÒÚÃ!= -ü¸®B=kRËV‘¶ô ,K“ùMZOÜÄØ–zd,yï»=E]âú‘®—6Û¶M¼Ú¼ÐÈ/™eŽGéPTµ;íõFhWŸÞĈϯj©Š—bî†t'®Ì?#“ùUÄñ¤¬£íôÊ…?V®.wÒW"P‹ZÅ¡· ¯ˆl–“+®Ka•½ÇJ¬%ÔÈ1Ϧ:Æ]K~Yúò3Z¶º‚ÌÌðL²òKpî{UŸ¶™‡ÁçŒúVŽSÙ£%J TÌ5œ±´S»Û»&ÜÝÂbyûØÍG”Ò©´xåXFÀÛÃ(’ýo§ÌY¡ èÆ?*‚[ >tÃÀ­–ù‹(aß×ê:¨Ôå{ Tœ–ã4û¤2É".NUIÆ®)·÷¶é uw…¼7a÷¢r„žÎÀ}3ÒªŸ ÊŠ^;æOW!ÿ.ó¤å;¶cõf=ñ˜ã4`¬Òüå1ÁÏ9ÇúÖ*ZÝFÿê¤ô¯SŸÃ×lÅU¡™˜åÝ”¡ÏèO¾jì;‹id±f'?2È1¡Á­’+’Ç›µ­Ã® rdÿµô=¦¹{"ùdnF?–k°þÍ·–ÜEwo#ªä26äã¯Ë‚ ÊC³*\Â’®?zËó@rxü»(m²’HêÅÔV‚n-ÎÜ $Êß­i$—Þid¶Ö_u ~½Ï5ÌéÞ—ÎóEóºH|(a±k˹UVAÔôÉÏ~æ}Es‰$I)gldå@éùÖŒºœÍ$¾dJÀ¢$œãŒŒ~~ØÑÉÈS“ǹrßYÓî¡ U »1¸c×#ŽÙúõ¤kˆï.ÕpX±·pÁmÃ!±è@ìAÍcOžÍYe#NVD·… h©±Æ@éîk–ñhgÐ5 º5(Ø`ÿ¬^ƒüõ­¹ªª K³"1æ7Pw{z×4©{YݽoEæz†cÇkG?»W\²ñרsÛÓé[V++_¤EŸ&K‰²Ñ©<à(ùþ\í^}pk—¸×WEÓ„¾)µ³þÐ(¢-2ÝH”2f$ù\cóƒ…ë\„þ+ÿ„PˆëWrCn?vÁØ`O¸Žø'¨ÙRP—5ö;’å:MY"ñÖ¿ɺ6ú`AÑyÕ%™”gમâ>DÊår~lÕX ;E·[+µ²ýäŒc– å¿'ŽkNÿ„>~F¬žXÀ #ù ß@gðÇã]%Æ—g Wóí‡ËØ­ ¤Æ1Àêj'Z¢wŽ£…m= EÔlbÎ.áËíùN 63Á>ÄsœsÍkèÖI$Ïy‹¹£g‚õ=3òŽ™××µÒmà‹ËŠ#!Y€,ÃϠéÓÒ³¤ÐdmAní®E€ó7Ý9Ýü=Æ>½k›Q×#Ð>¯ªg©ªãG\ žž¿Ê ¾ïl®mK²oCtŒŽHéë\Së7:aUlÛˆHÖ\»3z “Ÿ¯æ{Õ›Ÿj6cÌâpÌoLõ9ëŽÞ•Ï;X‰Q’Ôׂ;OéDË;É'˜À³üÒÊä€ާ„ZÎÒ´ç¹Õ..fuhË F܇r© {nÉϦszî³™g$‡p߇ä^„¢àmÈç''r+KÂ~(Ó Òb‚îdµ™+y‚íEÀ%±Œ…Q\¸šp“I½WÜU;Å…ÍÍ­¼·w2¤0B»ØãüöîkÏ5/¤ÖöÚ®²»,g‘¿³ìÌi#¾Ë3)c?.3Мæ½z\Ýê’<Ò¾gtÝÉŸ•p½Ó‡\gŽ^Ñfñwˆe×5P#¶Sˆ!å £€‰éÇåß“Zap±ÂÓúÅu¯D ¹¾X‹¬i÷>3ÔnüE© €@ *“òç`ÿeI#wr§Ôãy —M  ""€‘ð=€é¥hk7vÿeò•AL1§  ™°W Ü{UhX[DYƒ¼í–'ñÏ_}Çò•IÔ­kWNËÈÞšIòı\o$ËFA¿·9þ¹õÍ]ß|T4‡ØÈjTŒÀcSŒúcš›~Ì‚A?­qûi¯…j ©Eõ+›=«r’æ|œN1ïUW:pÙ_ÕþÁ/#Äîã‚ÉÊ_ÙÞé§'ÓÌ'§rTÝ1E®Ûø|ÎTDÁƒgêT/ãšöSJØfFtIÀÇB;ã¡'#ýpG5«é¶7’^ÛF"C”@‹òç¶ëÓ¿è+·˜ÑÄÅ·4R§RéFGt—ž2#O>`r ²äsœ”'㯩銂KJÊq³ÜFÀ&@CÀúWMcjl[m…°Ÿ@ùÀ#89o@HÀÀ<ñÍ:X®n.%A"ÊG8a¸ƒÆxõõöëÅL³ q›PÛÔôc‚©(ûí_ÐÈ›UÕ4øm¥¸D+p›ãÞ£æ\ü8#¨ëëIŠdTeª;g¢±_ñ©fšM0y×–É<`1ÃàLøã–îsƒÛŒ÷ÅB”Í,—zEÕ´$Œ=´`¨FÉVä1€ÞÇÓ"»°ø‡R<ÜÈ寅ävPû‹ÿð“Ø€ $ÃŽ¤ddŒãгi®ÙÍ.>Ô€u‚1ùŠæöDsÔ"Œ¡KÛà`‚Iàçc;GoZWÒc†Y’=NÆR„ †]¤w亨ÏN•Õïv¹ÆáÝÌÐÈÁ¢»†@cÚ5Ê>K8ÈäI{ñ\,º¢°-ŵ¼—®Y­ðàrxIÏ9ã’}2`c¨ÙLŠÏ:°çfâ@i]'ª'•Ii#µŽâ9_rŽ¡˜cÿ®?q†)c $qºã2†¸vÖ®àeS ,1ÃÛðô­KOÌ9š(\w矯5^Ò$:õ:±·†G‘-п*ÿ/óüé«Såäd€À¾Ïá×µPOÚýå¤êz)•¿ž*Ôzö—*ô¶GþãÆßÏýi©'³!Óšè[fÔ¢ŒªÏî~{÷ÛøÔF÷U‡ì#ç“ ãþú REqm/ú‹˜dcÆÕpMI³FÄ*ˆ×–e$ƒ‘ÿgŽIü͉i½Êí©‡sÚÈpQFæ€íÏ¥e]ÜYÜHTO•q÷²»{óé[¢Õ.2ÛŽ8úŸzcĤ4dn-É\d·oÆ„Ñ<¬ç͇œ>I˜Ç4ǰhóQ29$óǵhÉa¦Üž@P ´JTŒû®)M¶{‚V{˜:±Iò·æ8ªS%¡–Öö«Iq26Aqµ[µ¥É:ë)%™™&fcÁo#ðúU·²u]áÑÉ8â¹[¬,MÊ8‚Ãñ?iÝkFâ«öó2Û²íøž¾˜÷¬eI¶i$Kw~¶ ˆÏúGa×o½fOxp¾c³á o›jŽ‹Îx+;í!‰9Þàcæç ÀþUJK„•J8 :ŠÖ4ÔUˆ”®Éâ»X u6¿8¿ô¨ÑDˆTžAâ¢%IÚNYW?6:tïúÔØhBœŒö4ìMÇD̓®0TŒŒsÔb·ôX­ähòά§“€#­a7Ì#Ã#366r?Ï«§5½±D 6ìϽMeRØMDR #Þ3ÛÒŸ++J*ˆf¹‹ùXíg ¸‚kNæiE´»ï—Tsšg`°oß„ÁÂí>§5Bú쥊(“æolÿžµWM¿ŠÞRf™œ’ÍÈÎøSÞ0<“œDÀ:;cÛóÍ­KPZQÛœn ’O8ëL|¹qp Ö©’—/à€N1ëê+í‚ÊÁ NÕâºlÅÌ¥±=˳è÷PýßÝ——¿sí]è·kHà©1r‚1À®zâáßA“pˆÈ¶sþ?®…„"Üñß/rŽvæI#Ö4× ˜üÕ cцuz½¼æÆÝ¡b#'‘ïò+“¿O/QÓB•gPp;n^ßu2jO¸_s ¼ôúVU"mJM= _y¶jÒ"€$l¨¨$Aö׃ œÿúª•EÕ‘Ë7<8ü§Ø©PÒLÇæP{\²‡%ÙÒŸ5‹€2cg<楳¸Q{'oÎ2Äp)¢o;‚Ic8äÔÐBž|DËw¬/Ñš[±¯æžmÊ àÿ‘^]¯®ÝfìÖôø‰7E†C*•<õý{t¯6×” jè6>ÿsÍkƒþ#+øf$tïNÔÒ"ãëQ©ÛÉûf½3Î:O ksqôfÿЖ»úà¼ÙÖ§ÇìíÇü k½ h(¢ŠQEQEw^lh–ƒv3p㱟‘½Æ#ôî)iò¹ÿ®¦®øe±¢Z ØÍÃŒnÆ~F÷üÓ¸§¥ÿÈZçþºšC;›oõbŠ-¿ÕŠ)ˆ°zV>­þ¥¾•°zV>­þ¥¾”ÊøkþFiÿë™þFº«ÛmíÛˆ"ÛŒpݰ¸ü‡Ðt®WÃ_ò3Oÿ\Ïò5ÕX.Ûh×nÜAÆÜc†í…Çä>ƒ¥!‰©Úi‚ÜÞL°¬òˆQ›¸‚@'·Ý5gþ³ÄŸõ÷ÿ¶ÐÕxvé¶vʱ(»Y%óµ8$ç$qïMÐ,WL²×l–y§Xn6¬“°g#ìñc$Ó§á@a}"O"+2¸çüñSÇ´‡,ÍÃõª¶ªªZ_˜ù˜Ë9É8š¹`à^‚çäd=yëS&$®Ä¹³@&2ÃÆýj¼—— §JÛ”F"gP¾ÙãëÆ?úÝw5Íføž-£†,9aƒ× ãß­fA¥‰-•.ÕÞvàvÀç4”Ê«Ës•Ò#“PÔ£Kò(!zòÀZÛÖnï¼­ ýí-®ãPñEqpT¨ 0p22G¾sÍRÔ´ù4)ÖòÒàÆ®¥ÆÛYr0@ú‚Z¿¦éQ|BñF™áø/n­–Häæà,¥S&€§rǨéŒÞÆIßTIsjëdVþQ$¸Õ[&7þî}yõàðyÎ)è·6‘]}‹Rm ýä’”÷ã·NÕœŽèáIfa÷”¯ Uõ=×W Fx!6äœz§J™®aÇCt=¬:ÄËY£ó¶3gË OÞ>Øè}EBóùÚ‰–WILc÷I[cÚyÆ=6óÎOzë¡ðÓ[øBÖ裛‰”oFLlã$ð:§½dÛiÐÚ:úHáŒäËàŸø+ø~µÏJ>í¶4²zÜ[H„€Èó•ØŒw'PÞ^F¡C»aù˜sϧóý}MY¼Õ<;®c  .áßp üGõ¬øIôë6"ÇNsÒ¢ç>ùÝ‘ô"­¯ W/YÚê:Ìò=³»ù˜µ2{žÕÕ?ƒÒ v¹ÕõŒ{‹’»7zg!Zà›Åú“îònË·¼¡l•ü¬Û™®µ L×72Ï)’BÌ@éɤ¬–§D*N*Ñzº½Æ…i¸[w1fÜUJ ô ù¸ö¬iµ‰çû³¼kÎØð&zíP_À ŒÚ0ç­8Z2GãÖŽtŒÜ[w#Œ$’—žëq-ÔI÷9m-¥€ÀÇU$`Ôkg`¼ƒëWí¬&L4eXg£){X­ÃÙÉìW·,fT ¹› '¿¦M\ÃFË)‡hÜT«É¯z؇FK±ÎR9ÉÝ“ëŽÕa<-zÄl‚9—³+/¯½g7wtéK‘ûÆ3Ì›ULQl´à‘éÁ•=Ù–tIcÎr±¼ô9éùz×K‚ Bâ8ãQÈ H-ôÇÓÚ´-´:ÊøÿR •ò6–äsßù¨×x8?vÚ…«Êå $gqQ“ø×?we y1©ONI­oœÆM$f#‘Ú­[_\[9x&’91Ã#1T¤”ÆÄc#Ö•gFö«³è5%Üé-|e¯[&ÄÔæns™q!ü dÖåŸÄíR‰s  êNUã’?JàÄŠz0©{qíY¸§º-Iž“´Û‹Åº»ÓæªíX:¯r@8ä÷úÇ¥·ñ6‡}±¹°oÞ¸=:°Çå^%ò“*ÔR\KZÅ–%¾U$žÂ§’;³Ú'kk»Ky?f*\øù:î,zàüÙJá’ÂûW½K{ 4¾Óå"{Ürî×GžzЍ|ª}Y.Ɉ7 úÓùzµ¦j7¾ ·¼¸ºa¹•Hµ·%YäŸWèxŒ6sêp:’®‹ƒm&gYJÛž,û3˧xCB)%½Œ’Ç%¸Ý‰n]Ò¹<”RνÎPŒã‘¹†ãÓô˜£‘¤Þ$T–=¸è3ø!æ:-þ£áÛ¨õY¬GvÂO0'· úžk²µøŸ™îÎeV\f6Wç×_çÅ:±U7&š”v4µK+­0ªÉ’P°U3Óhäú“מ)SV¦73AÔLaÕ_Ï?OÊªÛøÇD–mÏy$aøÄ°œŽøÈçüó]ªé#%­Å«»ýÑŠY~£9ïþsXJ”g¤âtYÃX“¦ o¶Y˜Œ`U8éÉÉ4ø£n*…ˆÎí¼‘Ž?žjì!2ÑF¹ Hv\ü„çyÉ?^k$ÀË4Ó6çß.O3æ‘3xÜG9ü+’®_E+§`§ˆ¨Ýš$º»·³âF )å"lg'ÙFXð0~•SF•5™ã•eÁ ²F3 ÆN:íèFz ÔAhe™Ä®ñÂË´£ÙP8sžsÜÖm¼“èW2[ØJ¥pʰÆY˜õaNúÇT°QöR§MûÏ«ªË™JKC¼XäòË'É&àGý~™æ½g^4¦©ug4hû_y™s8o¶0œž­*†`Ï ÷—ð#=ø§Û6¾ëçXkS\Âú©Épœp¬­•õç<û€×ˆ•aëOðÿ™º!Tg[ˆØ0Î>àó7ö°„î}k¦äôLʶžíhIw©k¶ö¦ÏRÒmoOÒ¤ÞY_ö¿0~° °¹D'@º¶W$a.ÑH#ŽDƒwæÕÐßµ½ÅË‹e+†-–“Éã€3éU¾É çËRÞ¤dÖSÆÙò´™ÑG!Œâ¥ÌãsæÏL‹ÌòâÝ”D‘†XóŒn1³ã9úñTþżÆ-õ >pÙɈÏூ*Þ–Æ79DòÙrŽ=«=.Æk‰m®mR)V¶_aìOOðª…zU4jƬ¦¶<ÐÑoþ­zQq&“pÐã>fÌ€1Ôã·éÁôªísslB• f6eéŠÓ´]JĘ´ýròÊ%ù¿×mUõè2x§'Õ«Œ5RæeÕ6ÊI{m8ôÁ ÙÏpõ¬iÅëcËr•ìÕÎ`ëwÊRòB™Èf!ÉüNMNž(¾Q‚–Ç#È þ§¥_’ÿI»Ü·^¶IÎû97x‹ÛµfÞiÖw<ÖeÒÕT‡ùœrîÛïÆpLüÇ—Ë5Öâ|¯xØ’/ж1Á æõÁn’a潉ei8þáʧ<ŒæãMM­ÌåN/dl&£lÛ\Åó f O¶Ò¡ÔÕ¤¶*ã=0NÿÖ³¤Õu3—>¡,±‘M†‘òž1Ud¸´¹b³Ä–·,FÛ«a±È<`ch6c¹ùºPªEü,ÏÙ4Vû‘]¤FÛ³‚›»ûŸJ³-›Gç„›˜–ñœ~9?Ò¨\=Õ¥ÜË)ó`çæÊ‘A=ˆ ƒÜ‘5‹˜›ýb1ÄG?ÍW´Oq{t-<ñ@K ($8ŒAõ=N:Õ?#ýZ(ü™Ÿ\‚GçŒ~n=p©Üñ¹\ä‚ÀŒúò)âòÂ}Ñɺ%8Ëù`í{‹‘#cûY—q†Ñ›ø€ÁéŽØ¨Ž©3Æë039é#Èä§8üÅRÀ=¨Å+• ®jQÙ‹Hïîc·äùI!U?P PbX’X’{曎1Ö pËÈ?•ŽäåiÏcUËyÁúÔ«x‡ï)J,ÅtH½y©‘Êw?D²Å!áÇÐÔ‚0FG,¤Ëiv@ù†}\†é “n:ã¥em?Zr±SÈ5 š)4e|®{+ZÖ8Н*£Ôq\qœ†]ŒqŽ*åµôÊC)éГҹ§E½ŽˆU‰ÜÅk’WëW¢µ Ô•=Àî?ž+Óµ©mÇ–_œgœVæŸâTœ•Ÿ cŽkžPœ —,È4øîMÒnç!çó§¾—-¸ÛX¿!¢ßU¶w6\zgúV´°Hü¤žy=8¨ö·Ð=™Œ‘΄²GÈãÚ©\H ³°ÃõéϵuŽùä8QœŒŒ~Ï5^}>+¸ÉgBN0Ïù5¢¨’3pw8i€Á8ö5‹zÈã¥v·z`â7`=A®~ÿH¹MÀ8p}Gùçðª„ÕÉ”YÅOO—=êo´“[ÒØÊŽ FÛsÕMUû:åÿ‡Ž‡ÖºãQ3žPfYŒà.?o”v’$ÚÀô=ëTÛN¼SÙFT‘íÖ­M¢Ì¿6d=sõ®ïÂ:d±À—ó óå$@6¦XžÜ½‡©#´vËæ Ùàõ«r/ÜZ+f!$›\|ª1ÐaÉÇ©úS”mZO•ÞLí5 jصÌϹú"ôi ôÿëwé^W¬k7íÌ—7@oÀUUPB ÉÀ'‘Ïó4ÍFîëS»k‹¹LŽF` …Sò[t¥FŒa¯QV¬æì¶%‚]‘î]ûà ?(\‚1Ôœwìx9âÂÀƒUÝœeNô¦©G#Þµ’¹—.æ†O §‡ “œzÕºâ•J· ö¨qhÙM=km[P³M–·÷0'÷b•ÀÖ·ñ¾·nSuÂ䱩ÈôÈ¿ZåÄÈHÏàêFAüKWܵ&wVßîãf3éѺœªÇÏâÏ5ÜéÓÞjº}®¥….Ù1°h³Éë’Àã¿LóÒ¼AXqÍz6…ñ}´}ÏL¸Ñá”Zı$ˆì¥•F#'žjU-´ê4ŽÚüÛ{¤?Â?^vãõ©Yâp²;`í]¬G¹Á®zŒÚK²™´IƒÕn3ÍkZ×â¿„n0'†ò<ö`¬(xGѱª-„3É!¸~:”!p1Ќ祋M·h”ÆÅPp£ÐW­x™ï5««Í[k8%Â¥­ÈU‡!§?{…$îÍ!ñgŠ´ôQqckr¼Ÿ4¡]Þ¡@+“ô^õ›¡5³5U`÷:Ë<ÜjŸ:lÀQABW¨œ cõèj_ì»´M‰rÀ‘Ç™†ýHÉ®b?ˆÉ ‹þ“sk»’ûòÇè¤/ó­{x~u&k¹ í‰á$ž¼ü›½k ˜e?Š)›B¤£ð¶E.—s0 …·±d–B在ç¿EÁ#åàã½VƒI¹0¢ù™$>O–ÅXm9#$uǵt±êºeÔê¶×Ú}ÃIÊ"™§Èy4êxfIâuŽqÛëþ4£f¬•=´ŸS†™õ[D†ÆáH-ÎèŽä]¸q— ?ˆ’zç¿`jž¿5ÄΓìáB¬†"zðÄdúŒú×-­ÛÇöˆÐˆÎäÝ•=sƒú†j;¨ ’Ýd…uç{oJn”'5QÞæ°ÆÎ ÖV<¬JŒÏŸ§Q[z ¤‹qöˆœÅw00Ù烼®IöùsÏ¸Ï ë¡Ò¬R .Ñ.œ ±ùñ+•î@î;÷÷¢çÂzeÔ‘Íq±½³\HÅx9'#’Nxç$žµªµ9j:˜ÇVJÇ'-I•z㎠~ò*ˆË)@ÉÁêk~÷Ã×,ÒÙ_¶åPlžç‚\ôü8¬¯øGuLüñË Û•ð@ÈÍoµ÷oXÙbBåHÏ äìV’Tº†XÙ¢“lr.†#¦à÷c‘ÔŽ :ñi®Ç%9]²‘ <ØçëþƬЇÉvÈaÛŸåV•O@2zôÖUÇV8ëòcž+í±¥ˆ-íÚkY7I“lëóɽ€À«ßF³&–Ú=ʪ²¸ FFOqëÛ¾=n”û=¤±¨-= ”QÆÐˆá[ÔJèèk S’v‚z“]*VWdFÞ…y.Ëͼ*«ËŒcÛ2]BÓ<)Rw#]¥sþÏN:àcëV~Ï©M ¹=jµÅˆÇ_QÅñz2Ý6¶$¸³IºâT=xÈçŸÎ¢élÇäÁ Œõýi4™fŠé­$Ȇpqœý1ùzVÔ1FÍßPòçÁúûV–[Ò“Z´f ¥NDÒÛ8ýM:Úòk}ͼHHþ0p? ÕÖ³3 ¶ò¤™w¹ 0…€á›UãŒ÷'Ö “O¶Id±UQþµðpxÇSß§áV£%ÔÅÕ‹û%˜u÷Hн¤2FN8ÀaƒŽàòyÏsOMvŒÆ,B6‘‚}½úõ®rxnmSÍ ùy gÛØÿ…5Òà4E‚ïu$‘ùÿžÕ´!RWåÖÄ9SêuëÐ\FVTØø(p8 ûçž§ü8æçÄLžbÏÞ1üH®bWºGÊ©>˜­:Ý”>aÁè—)¥ªŒÌß7O¶@îªTóñžqúž} ]±µ’ð•YPƒÏqÇ^ÙÇáXQÞ³[‹V`Ñ“’Ï×ÓگǪÞDŠUƒ€Ts|gõ¨u’Ñš*z¦uv‘Åo—$í!S·çê}qžßJÌ’+&ž@ö‹óÇ!Q•îqéŸcYðxŽdÞÛÀè:…Xþ<ҦťávkY#a’n'ß {UÆ´u×r%‡žšlO.Ÿ°%¼HëWê:äþ&ššcÛ–¸Šë i ¹   ãçü*[=ZÅ× þV8;ÐçóP}=jÜf §d[Ëu…“+!uS¿Óäþ#ùÒ”ãÜ^ÊOt`ëRº$r¬ŠåNT¯lW¤öÛÎ%Peò6ƒ‘=^1^{â[†Ú;ðP*àü¤Ïã]Ë©[è‘[jÝ— ó:u¬%4çkn1h§0{[G2a¸y}?úÕž’¨ˆü‡xÏÍŸéWu=ÐÛXÁ"I¹UÃ*@\¾Z¾ÝÀ©á†#‘T·%ìSÆ(#Ú¤#"“®; À¤‘2¼~(+Nâ±"`â¡Çj½4}j› Ñ36¬0ÓÒWOºÄSqILE¤¿‘~ð *Äwñ‡k6“½O*cRhÛG†Oºàçµ;i8ö5Š8©âXþë·Ò—'b¹Íq$ŠÀƒÒž.3Ä ý+2=BE?:†•XKØï§ÜqRâû¥ÙšÑj“Ç´îã±5§kâ)ýóL×668Ê:Ÿ¡¥ÚÊr féAîi®§w‹'T°~œZ0x¹Üà©Îúךù®ÏéNK‡AH¬g…ƒØÖ8—Ôõ¨µÛ[° LŠs€õü鳺J„HªU¸Ü?N{ôý+ËcÔ^3p}E]ƒ[’ 69 #ŠÉáä¶4U ÷= ìvŒ™Š@¹ìÝj¼ºRIÚã?ýjæmüK*°,êN:‘þ«‰a80ÉþÒ²tå…Ý>¡6‡ À;?–*¡ÑØB09ÚJ†õ‘‘þžÕÐ[x‚ßÌ'ÌCŸÂ¬ØKmšDÇ,¹è1œ’­R›DºiœSé·6èT¯ 3ŒåTf·!ðË´úŠô‰-m¦,Aâ©Ka ¡c„좵Vg:gž›@Go~i† «]„¾L7ÈNzlãŸq¢º’wЌ֊²3ölæNÔ‹Aü«ûæLŽ7wOæ)«¦e¦òŠ’ϯҴR!¤b2G N=ªUÓÛ`o,ëý+®](ãf`®Š‘òŒ}Î*§‚Ý6ÄÛ`~Ts‹”åžÈ*99B¤ œÿž?:ªÐí]Û”Ö¶ä·y›{}»}*»Ú€0s"¬Ñ‘¸ŽŠ•C±VÁnqÅY’ØHÏõªÍnØùr1T˜¥ª³&™Y"Ê¡'¾:Ó%òL¯ä,Ë ˜†qÇ9 ×Ú© .mË*¼ˆ1Ô1¨Öæì‰I'ûØ~~†µF nîgi¢—θ@÷€ 3ì8ÀÔ¶š¥íŒže¼òFÙËØ¡o©R è;Õ9n%*ðO$ PnXî-{Œ~\SWzj ÉJÊ %·(ù‰îq‚N}I©Ó^Òç\\é¡$-œÂÛT÷@É?Vü«›y %ˆWŒg€ß7ê1ü©@F?+«sëþ4¬žèi³ª¤Nì-ïf‹åÜ ©ž™ãj篻w«¶‰¬Û+.—y8G"ÖW\õë·ŽÇ¿cèkˆòHàã±Å8K2)U‘±éš—Mt-U’= ÛÅ~'±ùL²Êá„‘¬§èX‚ZÒ´ø™2ÈÿkÓ,äçÉfÿ2[ùW›A®j6Ðù+píéÈ=öž?JÑ‹ÅsK4?n³¶¹JïˆF±îQØmß­C¢Z­ÜôÈ~"hò…ûEÔ, WêÄåWæñ‹}lm4íiUänMÆô só0Æ3ÛùW“®µ¥³îŸKu ¦5üþmSÅ.…s÷/¦Àé2aO°+¸þx©t<‹U¢{=“iÛØ^E7?)‚a!²qŸåÆqWb°ŸrŸ1ʧ2¸ç±'Ö¼EìaVÙ©k)ÆâXù`qž¤ÿJе—ÅVÑ$–wW¦þeòæ}˜ÆrÀý+?cbý¤{ž¶4ç̬¡IÈÚ0qÇlzÕ Bk ³“·OSõÿ?ZámüqâØî_µ*ðWìà…ú”ùÔËñ*åÃ%æ› Œq‘”ßvM)RKáeBmîÍØm¡¸iùyCNs“ÏP?J¥s¡Y‰r°Égæù’:쎜tæ­éÞ>ðùXá–+Ø ùŠ+ '¨àç…i.·áËé?ÑõK@«“ºpbõþö+7Îìn¥o…˜ÂP¼Ù·½-˜ób yã Æ=Iö¨ãЮìåYÖ#+'(¤ç°Á8ô99Ï~0y®Ý 7+o-›G6f|xaÜddw«Ïo ‘\ÂŽ…˜uþ´½¥¾È¥*–·1ãsiº”—MzÑHn„…ä*ß6r[#ä‡ÿ×[vm éOÔm%˜~íŒLgø‡tÆXàerßpu®üØZ‘™&731éžÃüö«BÇu؆$~VPGu¦«k®Ä8®K[^çž^xb1$†Þè˜Ux,${’S¾{wªwz^™<Œ³Îç@r¡ºwP:gûÿæ½íî­ŠÈ­û¸÷0˜Ç=°FsÎyɪ·Öë,˜žÞÞîB¤þúœã cŸj¦é§¡’…N»G=ÜÓë\N?×!C’FäÈ,3Ôä׿'=ê0þY!Aäc5Ûê¾·¿R±yv³†hÉ)é÷O××Ò±?á¾*ûæ·a@hѰ1‘Ûr3œwç-®e©¢š‹Ñå¸ÛÇ¡¦ÈIUÝÈèE_“DÔã%~ÎòçåVBw¿lsíPµÙ” ‡X·d~ñÁ ú`ASìä_¶‡s?L¶Ý¬ÛȪ ÇœÈä:}AühjvîÚ‚Ao)V•NY¸Ú%³ë€ ÷éW´ËE˜1¶rDrîÊ2NögÖ©—3ëw,Å-äXÒ!óHøÂ(¬p=³íWïÛ±ÏQ^.E»Hü¨îU-·îêÄó{gò›çù— a-®pp¬2 ½åW,5›]F&È "2Æ23IÈè{c¶k ÄRMgx’ÚnŠ6±8ç rzÖºc{ÙœLµ ‘Ȳ;ŽÒES“Éã$qšŽh-œlG àJˆvª‚@ܹ铀GbA3"ñÑ\¬‘»¢csÚNý¤ddqÛ®N23ÍZ‡RPÕîÚE4«o U$ˆäù³êéïíZ§(½ k¹=œ3µÝÄ]y¶èïÚ\œ8=À=Ï\`ûã9«bÆŒ(g‘AÃîl=@¦OãM¶–ÎÁ’Õœù)7Ì™ýç¿$Žç ŠÔ}KN35¬Ïöi‚‚ „yÇõ¿ž&u¦ôw9ªJQ—ºŠÖÖÚoA:I¿>bºÈwHþ-R5¤qÀÞrÃ:í–ð?`NÙÆzsSEio%¾mH™\‘d¸fèrsƒŒÿ“XëwuazDð*D+$LU•€<Ž3íŒà‚À"³Œ¹™Të6˦ÎÍÑ–ÂK`–÷ÀO±íM‚ÂÒݦ>mĤŒ/–BÏRH9vÀÇ©«q¢iÈ#$*]ólÇåó" @NA#?ÝzØ *ž`]Ì@gž?óŠì¡ƒ§(ÞG&74­F|1ÎÐFâI'G݀ᕕzW“qÖ›s¦J!imäYá^I ¼õeê>¼‘Ï5¾Q3mèÃséù{Õi~ÕdØqʲç =ëIà Ö†4sʪK›TqR c¸30žŸJ÷1%Å©›k¥¸}¹ ŒrzõÇç^]ª$7â" 0è  ’}Aí×¥zÙt…\Ü\÷:¨$dg©=?_­yu¢ãQ#Þ^xs.¦~²Èת[iL†$qŽ:÷¬o4ß]y1¬U˜ôç·¡­}~ææòkt€Ã½)X"ªñž§ùõ¬hù™‘r9 úV{&ѲNÉ1ÓY(ŽG\ÿzF#ò'%²ì»!˜py4’H g wɧD¾dŠÁº°ü9¬Ü®µ.Ý[yNH)ùEy÷‰€:¼ÍКï-bÚ BØÁ%¸Åpþ%þ'r¨ãǽ,/ñ¾Eâ?„̧=NôàíÀeÈïŠB¶ ;v8#é^©æ‚ÀäØbGÙ›¨Çñ-w•Áx$ç[›ùwoý k½¤4QE (¢€ (¢€;¯ ¶4KA»¸qØÏÈÞã?‘úwô¿ù \ÿ×CW<2ØÑ-ìfáÆ7c?#{ŒþGéÜSÒÿä-sÿ] !Í·ú±EßêÅÄX=+VÿRßJØ=+VÿRßJå|5ÿ#4ÿõÌÿ#]U‚í¶víÄ mÆ8nØ\~Cè:W+á¯ù§ÿ®gùè—6Útmk»2C帔Àª 6ND|cŽ6¯áÒÍJóÿYâOúûÿÛhiš~µ©ê¶æâÆÓKžå7®¡& qûŽ~½)ºSNÉâ#uqLnŽäŠBê?ÑâèÅTž=…|¸ÉÉ¥‘ɤr@¤Ü@#44˜“h˜L§¨Å?ån†©ä­7­K‚èR›ê]UÁ϶|1áøL|Ek ý¯ìjßûÿ+ÌÙµþîFs·{×<²2ô9Õü9ñŸáïiºž­qök(<ß2]ŒûwDê8PI䎂—+¹\ÊÇ=ž”l_¥1gFî3O‹4]Ðl›b 8 h9¤26Œà‚9¬ùâ*y­æn\0籪“®ñÒ®,ÎHÌ"“·½=—i"‘-ŠÐÌe(cæÁíKL’—´b€ NsKÖŒPAÈ52]LŸ¯5ÒOZ_”{еÔñ >â¦[È›©ÇÖ³OÍÍ%O*)I›!£“¡PcÁàãéXàr 2]LŸ­.^Ãæ]M޼JEã'Q5>ú}EXKÈ_«m>⥧Ԥ×FYŠù“Ýy­+}iá΃õ¬œ$ƒ*Tý) #¨â¢PŒ·F‘©8ìu°ø–@œ°`F9að5äÉ|èyÎ{Ö•¾³"`‰YHÿk¥c*[ª°‘ê‹fM»€aÈÝŸ¥f\i…µ?¶‹-Háã m?9?Rk”·ñ ƒ9‘Xçø‡_ʶl¼H„¨•UÑIù[æ±ãüþu7¨·$^ÆÕý„ð[Ao8‘de<3m Øv$ÿUeËáã žr3ÅhÙkv›JÆ…n‡üâ¶£¼‚eûÊÇ#2¨Ü·³²Øâ[Jº‰²¨¯ƒþx5BâÖXó!e^›Šñùצ`”è¼ŽÕ Úu³BÁçšåÐ\ˆòÉ-²x>ƘmqèxçÚ»Éth®dm‘DÌFI\:­?…ÆÇÇŽgp¼õêý«[¢8g¶i ¤œ`a‡ZÏ—ORÅ”•8ÆTâ» ÏaZ&=Á%Iü?úõ™.Ÿ,G‹ëÑü«XWO©œ©y³é‡hÛ»wCTÚ6Cµ”‚=Eu¦%É9'Û ¶‹ Ó‘Ó"·U{˜º]Žh/9àŠr[Á+¿cAùÖœºC¦L_7±â³^&FÛ"#Z)'±›‹[‹%­Õ© »ˆ†ßµHQÕpyP üzÔÐÍ4-˜¤Ç¨#ÄTæöÞáJÝ[)`0…8çÞ˜Š‚áOÞO ŠxhJ¨C½¹pâ3üªÑÓ ¸Œ=”¤áˆ!Ùsí…ëëП«:è; ˆ¹—’´\z TWà:ôÏ-çHÐ2(b¤+t$pj<`FLSÓrÊÅH<hæ(]zùÕˆg–Ør‡ 9#ñíÓ¨¨·J;³Û‘š1ÎåRO¶1ùQ̬ÒÄÚÄ(íÓº¯!aB ÁØ«cÆlO¼ØÇ–#ëåí¬"à©Ìg#¸=)1:œöÊÓ¸µ:8õûu’m.;ÇòÉ=ÎX>:³ý¥¡8ËÙÜÛ—ü’ Húe”~b¹b©°~sŒr)å¶’ç¹Òj/ Ôš:°úÌ ýÌl§+æ¨Ê÷ÏÈóÿô‡âmKÄ‚|Iq,[¼ÞD³0SÊÆîŸ>z â¼Mã’"UÔ†˜`Ö´3Kk¦˜‘Œ2—ÙÁvÁê{ãœg¦xëRá¡J¤»ŸNÉá½PJío©DèÍò™­Ácý‚¤úrj›iþ"µ@ZÞÖìqÄR˜Xçý– ;âóö™âéq™ì/¯#Š223lÎíÎ_C]†—ñÇÄ»þ kä^î›[ó_ð©xjofR¯$z%æ¥5˜êz^¡oKºWh„¨€u$Æ[¯P+ßÄ:Tr´ÖÚ¥¥Å¼‡2Ç3ù,‡».üdžã¹ú7RøÅ§ëž¾´]6òÞââ„u* )z÷ô¯#e9Ï5ÏRŒ`õ:èÖ“Z£ÚÇ“_Fcv}øˆ)ÐwîGOjÊܧLo$âT}Ì£#«2{õ¯(Ã+n\«â®Ç¬j¨8Ônˆ?ÂÒ³=‰"¦)%kƒÖW=mm’’¾Ö, à®6“×üþnâÆM—‹ Q±”°8ëþ5æ–~>×-¡Jö÷*1´M6ý6•ýkj/‰ŽWihÌ@ÜÑÌPgÝÁþu1RZ¦)F,èî´K+iR½U@>˜éêk6÷ÂZ pÅ=´O Ãg,³1ÝÛbG<ôÇ£­|}£LÊ®×ÜóæGò;m$þê̺ö‹wnž]ý¡E>cy|ñŒÁ==3Z)Kª3•>ÇwàVºÔ¶w+„î*ñôäcϾ}ºœSŽ"W3t4¸êiJ¢i_B'I½ xBÚR0è¡È/÷‡óü'ƒœ=ë+X°U7:”Sï—ˆŒe@PFçžxöë]M·‡äk—IšRêC‰H^=v¥IÆyÜzÇwáEž³J<µæ\¥¹ÉÀÏoÒ³Œ”ek˜F„Ó½Œ²Iwá›HÖHRîу#ºïXyƒ±Á*Ãþ™y-n,šæC¹ˆ@äaY›þG4:µµõÍÔf ÝÈà…\ü¸ÁÊíÀÇÐ{ÕËûf¼Ò7^À:YD9Pùˆe탊¬Àn85h†5¹£RžN(昄Å(f­è´½(´†“¸Í £RE6ŠwzJm´v 1SOáS¥ìÉÑò=ê½% š ©ÏDçÔ°—8ûØö5KRàŠRfæÔ~T‚)<¼t5Š”åX¥N—³§ñîíRåcæFÞQÅO Ì ç =O³“Rìñþ"§[Ëy?o±â¥Çº)K³4cÕgWÉqü«NÛÄ N?OÒ°ÇRö£ËÁÈ猩B[£hÖœNâÛÅ«µfeg9ü+ZßÄêÈœu<~uæ_6r?*‘.%Œýâ+…]ªÄÿ2=nÏ_„˜ ÿŸÂ´—[¦Š_´0XÆ@\éÒ¼iu9”Œê{â®Å®ÊŒ9n8È<â¡Ñ¨¶eª´ä{/ÛtëåÈŸ àþMAu£éÓr’(Éû¤õÍyœ" _æã¯øÖ¿ˆ· Ë©Ï7JÉÅý¨–’ :+ß ÄºL¯»Ì:ž½H5—'†•W”u=ISýjk?Ÿ5c9ÛÛ¦ºÜ-.Q’91€Tc¶)]. àÎ~}0y FªW£##ÜŽÖ³.t'xÈ’1qœ¡Ïå޻Ȯ¬î´®¤·~¹©'Ó¬æCdut?B9íÞµR›Õ8GcÉ'ðúÇ(Èr:˜Øíl{?k.óMkyjHbþ‘@$~Šö%ÒwN"8ΫŒLþ=j Ÿ¹{PáxÀèkU^Kte*1{0ÖÒ#n]Ê{­X‡R½µ!Y¼ÄãÐdqøWw¨xF,3ì’^I#‘ùV-ç…o#/”TayH;àgõ­ã^2ÜÆT¥15].íJßZ´N{Â2¿‘9ýimì4˽æ)™BüÛ^UF#× ~&«O£\ÀÁfã%öü뀮î•MôéÄ"e†O(œ ’¹ôÏà*Ñ8½ˆÕ ¡Ýˆü؇™ ådì~„pj«[ÜFøX\dT1Ëy ŠfÜÏ {ß…\ƒ[½¶d‚)‡s0,Oãœþ½¨q“E]À6:c½+öõyõÁ4g̳·FÀÃ*g?'ó¦Ç¨X2áí£LÎ2Oä?­Œ¯iÝ|µõÀ§,@ƒ÷xòqüêÂ>›'gR:ØüM^‚ÇN¹È†íjäæ@§'° Acì3RâÑ\ñ} ¦€© è˾†§–}ãk(ÆsÔÖ¥Þ™Q> .¤¸‚F{ƒü½ª™µY74RE(öà¯Ð ›p¼„>q1lH™]¸øëP˃ì?íLÖíÁ\úŒ -ã8Ö—;êÎ/c®ð¯†çÖí¦Ž6¬% ›ˆá½ÇROåZw>ÕcbmÜ€¹V?Ö¸í>þïLq%¬òBÝr†ºÍ?â^±ç˺\cOÔõ®±¨äÜY×M(ÆÅ)<9ªB¥åÓ§›r&¨IiäÉåÌ7=EÁü«¾°ø…¢ÜíK›Y-Ù¸% ?¡è?Þ´¼Ñõ ½ž¡ ¹ 2³#·SÁüÍ`åV;£M"û2‘ÐÒýIê¡õ¯]¸ðµ”Êï%„Xó$kŒÿÀ‡'ó¬y¼bì:.ùWÉÿdzKÛÛt©žtlr>õE%£"–ÏÊI®æëÁÒDKEu…CÇ’ŠÍŸÃÚ‚Fì<©œb¡ãˆWÜGOž½Ušé­c :©m­Û s]”1ë7f™âØ.˜Œl{Á»ðVÎ+œhÈ·Ú!–Ç’#Ü1Ç\õë:ÚâÊ µu˜ù±âÀ¤A$òÜWžžõÙsësKš;ÓÛxÎÀË5íÔ#hÝ\º@­ŒýÂ8Èã­P°ñŸ®Éôh›p#10Pé·'¿ñ`ZÛ¿Ø" …WL’XŒššÒÎDRd`rxµÙÅ=EJM]N›­iPë‰2\Ü[[0Ý/Ÿàì»IàŒŽ•³|Þ×fKƒ«ˆÚ1„GF½Ûô®Û‘McŒV^ÚîýM½”lz5ìrÛ-ý¬Ë$¨Ù- àc¾G_ð¨-õ;·‰„ÚLŽÃæ,§h<{×T©$ÐúTɨj1È;ÙÁ¼„Œz`Õ)ÆÚ‰Áô:=b{?)ÃYOk>9ÁúýÇU;Q»°‰áKI$‹±ØÃ¨ÎÏëU_\Ôn­Ë,ã¶ñ€?Æi-5Ù-%(öâEÆ úƒZ©ÅÇ”ÉÁó&t×Zv¦†KÝ:4`àîxƒí=úT÷œúl¢PHÀav\‘ƒƒƒƒÁî;ûV]·‰-?šÞHÉ'  ÀÉÏéZVúþ–ÛäY#I…ÞbõÇ·sJ7½Ó°¥+œþ¥à>+G¸Žêâ€àJŒúp¿z·¦Û­ÜQÙy0¹ˆmWÀèã§ã]sÛê¶ l—`ÉHßv?*m‚ÙÞ¹HðÇÞ1ŽŸÐR«U¨´÷)ÙÝï¶°¦Ú讫Ý÷Wiã׃þA6Ã;c= ÁÇ®;Ž+©Ö‘ ‚1‰?&®v]§”1ïS 9-G5`yÇ’J‚2 ¢ØHÕú†>ÄÔe]åQØ’HÍHIIAãàÓk¡7êhmg˜1€xõö¯?ñ8U`½1ÅwÉ?˜è¬  õÏS\ˆ—þ&Ž G­NøÆ•ÿ„cá° Í1Æüéìäð4ŒÇÖ½SÍ:?ÿÈjaÆ~Ìßú×}^àp?·&=þÌßú× R (¢…Q@Q@׆[% ÝŒÜ8ÆìgäoqŸÈý;Šz_ü…®ë¡«žlh–ƒv3p㱟‘½Æ#ôî)éò¹ÿ®†ÎæÛýX¢‹oõbŠb,•«©o¥l•«©o¥r¾ÿ‘šúæ‘­éÛh ºŽÇʶˆ™¤+ÎW ôÆè:V†¿äfŸþ¹Ÿäjî¿áRaÚÉ$Jœ”WË »G`xÚ:t)1¢O {»ËÝCûOí׎9?ÑÍ¿–£%FÆçœ““Ö§³ÿYâOúûÿÛhk2×T~+¹Ôt«;BÏìqÀòÛ™3uv\àÙÆjö•+Ξ"’Ky-ÜÝÅ)RËþ]¤ÈÓè%¹ò4§Ž(.sžÔ™æÁã4¥¶äšfqH~j7gµ[ÒµÍCÚ”Z®“qö{è7yrìWÛ¸<0#¡#‘U1[~ðÇü&>)³Ð~×ö?µoýÿ—ælÚŒÿw#9ÛŽ½è‰€E'½;Rb€Ži­Õ!æ£<“@) ;µ òE!ëR`ô›q@ ½¥Ðh1Hi{Òb€(´c½4ðiqK×4@ ¥£(1Gz1Îh=hvšn)M%%/Q@ ŠQE¨¤¥Å€’”Ñ@fSH>Õ:^N˜ò=5(µŸÕÒÖ&‹}=2/—€X–ëµò˜­xsܵ=)£`bxÚÃù× žðü™ G+Ð}sv^>×l@ŒÝ¼±ã•­tÚ_ÄërÀjjH%£l~<ñù Áá§„®d÷- Z¬‚1™dñ‚©©ŸÂvF5Tyb#© œÿßU»câïêghX䔂VQù~…jù]bKYUcÕ0&±tê.¥)#…ŸÂm’a»àg†L“øäV|ÞÔbÎß&@:m|ùŒ~µème'Þ+‚OðñŠiµ A8= gühRš±æé·ð©2YËìÝü³U^6„4m×þuë-jvîeÉõæ¡}>'UÊŽyJ«[¢O-]¥zãÚ«´e%fã¥z\ž³–6ñò[`Éükû¶ …Š)T¥%É_Á»UÆ®¢ÐãAϦ2ñœbºoøEåt·»l¨ä:dþ˜ª³x_QVqû’ƒ¡ A?§õ­D…dr·Må(|ãEâ;È÷Z…Ô~Ë+ ÕíKD½‚ÓZ>ÑÐääk)ü?xÆ0m¤ŒHp®ßw® ϵuÑœZÜÊ­âtº.¡¨êˆòÝÜ´–ëò aÔ÷?çÞ´ÀbÄpFzÔÖéedħj&OøÿMh›`Œž_o>¹4üÌ[orH×kƒÐž¦ž2*žÌ?JŠF(¡÷Î *O™T¹éRÓzM‰ü¸ƒ«cæßúf¸¯ÿÈRC]bܯœsü#?ZäüLËý¨ÅGÊÀ(/ß+—WøLÅÁ݃ŒŸNi®0y"œG晑޽3Î:/Èr|>Ìßú× ×àsÿÙÆÿGoý k¿¤4QE (¢€ (¢€;¯ ¶4KA»¸qØÏÈÞã?‘úwô¿ù \ÿ×CW<2ØÑ-ìfáÆ7c?#{ŒþGéÜSÒÿä-sÿ] !Í·ú±EßêÅÄX=+VÿRßJØ=+VÿRßJå|5ÿ#4ÿõÌÿ#Zº•ôú_‡¼ËeU¸1ÛÃõÀVvÚ ^™éÓ éY^ÿ‘šúæ‘­Ù´ÈõMØÈZÐCµ‘pceÉRÑÐÆÐt¤2 .æúÛ]¹Ò/¯>Ù‹t¹ŠfQ°IR¤.Q‘ÇzuŸúÏ×ßþÛCRXé’é÷Zž¡x×—OBÑÛ• äáP$’IîIè*¶•p—Iâ)£YèàKFßñïåX?O –çȰhJn}èæ€ɤž)@ô Bãšë>ëzw‡> iš®­qö{<ß2]ŒûwDê8PIäÒ¹1À¦Oþ¡óíüè'N¼ÒÅ.&—Ž”aÇãMf”ƒƒM"ŽÅ'SKŠv 7n &9§ŒŽÔ£àSjFN21QŽ4w¢•—Ò—PbÔf{PF)9ϵ8®(ǽ7ÐE.=hï@ Æ ìbPá鸧ž@鸠ïF){ÑŠAíGzQFÞ3øPO&”®8ü(â—Ö€ŒSM8Ò@ JE'4´˜"—·½)%.(£­¤¥4P ‚jd½ž>’=ù¨(  ÃQbG™8ô8«)c%“ê+"Š\¨wfúysrޝìM<+º:çF{/'‹dn;‘úÒå1¸ ó(?¥8:纟jÊV•pÇr85f=NÝÈÞ ëÆEK‰JFŠ9âlPƬ›Ë˜àPܶzJÏŽ{y~äŠÄôóS åX¯C„z£ERKf^‡X–&.§ÙiÁâiF3.NsóõÎèSøS;©â±–5X‰-Ï@´ñ«!L±Ï?6søݳñ´yù¥ÙÏ~?úÕ䱌1?OþµL—2Ç­ŸSY<+_ 4Xˆ½Ñî+â˜&a!”îé¹úÝ*ßö¬3®a`R9x\Z¤¨Ùç>¾µzßÄrÆÿëX{?:‡Nªó/šœhŽÓM¹R$b®Ç†R8ð¨ntñnŒê'€0ÆñŒ ÷?^;}kÌ ñd©ÆíÁ»‚GéW£ñLŽ¿;1‡ŸÇŠIµñ p¾Ìëo|93îuŽûáCqüñYRèA]qªÈF$g§~ÄûÔºw‹SËHÃðÓ†ÿ>•Ð[ëðN›]ƒ¯÷$ÒŽhÉ#þÀvc¶HËg,JíQšÉºðÊ™òmXvÜ™ä÷8â½%n­¤#xÛŠhKYAÁ剥5³É&Ðç€%Ãpv:ôçžm.¢´$ŽåE{{èöwMåE(-´u÷¬Û¯ FÌ"7'„;Iü±Zs˪'U³<|/· 7\7”Å“Åz ï„K«+$¬3Ô¨p=¿É¬+¿ ÍŽÐÈ öDù%ÆáG— |ñoǶçÍS%Tþò7ŒûŒÿ*¤ï°]ŠŒää†gthÄGƒ»°Æ>µ¡„q•!‡·5JêÌHÁÁ W +êLâùt&MPyÉÞŸÈùY…¿Sõ*kªÓm/^Ð^i——Q" ¶]TŽ£rÿ ×žÊ’ÇÁbBôç¥ii×Óéß¾‚ÿ`ÈBDŠ2G¿9ëÚ¶•8ÉÊs‹=ËÇ&´aòµ_”*‘#cè§wænÙ|PÓ§p—¶r[º¶§Ì ôÇQ^*÷R\òÒ¤l½2Ïâ?­\ûmõÒˆ®nd‘#ÆÐÒoŽÇ&¹ç…Žæð®Û³GÐvZÖ…©06ÚŒè¾Fÿ?JÔX\ŒÎg8¯šD“# ­ÈéëZÚе3EìÈ=3‘ú×;¡m¹“=í¢*¹ ޹ÿ&¨Myû]>RºF+ÏôÿŠ×¨BßA Êç–ÆÖ?uºÄ]ô¨œ5»¥†T~5“¤×AÜе°Ž-ÛnI.~ñõ'Þ¤¸´g‹åÚ7ŒóZ·úf¡0\ÂÇý™1V^ ªp2 ~?ýzŸfº ™§©çºý·Ù­ä‘²w6Ž£ÐÖ\»öîO <:P?¥{ô§0 :ŒÓrE HaJI=Mc¡ Ú1ïG4­'s@r{ÒÇzq9 •íMÇ­I@Ûƒœçb€#®i§dQÐF0h0qÒ€¾Ô{ѹ½h1ÏJ\sNßÎH‘¹ŠLSM?šoS@ Š0E9ºcE&8¤ïKÞŒPcš:ÒâŒÐRbŠ\vÍGJ)ÄR~‡¥´¸ ŠN);ÒÑßœQÁ¥Çµ”QKŠAF-%˜¥¢€RâŠÅIÌÑð’2@j*(új³¦3µ¾¢¬.­g|l¿CšÈ¥Å.T>fo «iq¶UÏ¿Ο³<Žý s½)é+ÆrŽÊ}Ž*yGÌn²°Ï?‰¦ýÿf¦£p˜Ëö"§]L¿⦗+ÑkpÈê?J‘.$ûUu»·“ûIìF*]ªã(Á‡±ÍKŠêŠRkfZKù—‚G¯Z½µ4`μúÖ.Ögð£ç”Y¬kMm¿‰]8ä{âµíü]"‘ó§Ôg¯ÿZ¼íd ò*UpUÊ·¡ïY<4YªÄ÷=nÛÅñ«ÕÆîrkfÛų Ê ““»Œ~uâ {&Ð dŸþº³«2ŒyŒ>†³• ¯…—Ð{žòž#‰þ÷(w©þÛ¥^*™¢»àŠðÛÝFÀï~«‹œ¬SÇBj¨·Wä{3ןDÑ®•Œca=B·_²¯<jì6:2ƒ‘¼qýkˆ·ñz–]¯ÏükfÈUCI¸g8ÎsSxý¥aò>ŒQð%¸fo'a9ù£<¥s—žž"D3¶ÞË"çz·ŠÒP2vñßš´úÅ¥Ôb7Xäã<ãüý*“]$K‹]ºÒ®b8–Ü7¼mþ5@Ùª±ÈÛÎ0ËŠöÖÒ´›ÅÜTÄXs·îÕ)|Áañ7 oòkU)£6“ÜñãaŽFA"FcZô{¿KHŒnëû¶ÿ9¬+¿ßÀ¤ªîÇ΄~¢‡QõcÑÌm=ºS“Æ Ò—Lº‡>e¬¼£ ÕbŠr ‚GQÞ’‘v¹Tªž ƒíK‡\`ELc 4ÇŽ˜üj¹…ËbHu ›r$e õSŠÝ°ø­XÜŒ«ü/ó ç[Ì ‚2Oj‰€.c6HSɧÉn.fŽÉüOyâGv”/–ƒ ã>÷­^²A岨¯9ôæ¨évñYZ%²ñÝÛËw8>õ|8ˆ±VTŒùsÇ¿ÔÒŒTU¢e)¹;²Û1hàÿžj&¾ÓÇÐtÍD’Gµ\Äô§HÎü…Æz¶yÅ=„K³kõ¬ ”+œä* Ø äç5a00zÀ{sEÀŠBÏ)^›pyéœ×%â”Pî⻕˖ÎîØ®3ÄϺü¯ â³¤Û®*$©3Ÿ`sßò§¡ã?˜¦ž½sJ€ç¯JôÏ<é¼ ÃûrqßìíÏü kÐ+€ð9ι7<›f?øò×Hh(¢ŠQEQEw^lh–ƒv3p㱟‘½Æ#ôî)éŸò¹ÿ®†®xe±¢Z ØÍÃŒnÆ~F÷üÓ¸§¦ÈZçþºC;›oõbŠ-¿ÕŠ)ˆ°zVFª3 }+^³ïãßÇøqHñ4ÞñŸäk~ÚæÞ+HnmЬ*¬Žá@Úl ckÿû§‚7p÷:MëÝ[ g#ÖlÞ8ÖbbŠ7üÒÎñ¯ÑwnžÐmÎs7LnÏnÛþù>†ªÃ½²ê…ïíÙîå2œ°Q„ óÛÊcŸcèk†ÿ…­Ð9?ïïÿcGü, kþÉÿûVøk¢&íÃD]¹Î`AŒnÏoöþù>†•¾艻wö Ûœæã³ÿ 7ýò} 7þµÿ@äÿ¿¿ýð°5¯ú'ýýÿìhÍðÛELîþÅ]¹Î`AŒnÏþ€ß÷Éô47Ã}s¸è£ns˜ŒnÏþ€ß÷Éô4ßøX×ý“þþÿö4ÂÀÖ¿èŸ÷÷ÿ± 7Ã}7n:*íÎs cv-ÿ|ŸCCü6Ñ@`ÿØ  î㳟¦Æÿ¾O¡¦ÿÂÀÖ¿èŸ÷÷ÿ±£þµÿ@äÿ¿¿ý=¾èÈIc¢©\ç0 Æ7gòØß÷Éô47Ã}wn:(Ûœæã³ÿ 7ýò} 3þµÿ@äÿ¿¿ýð°5¯ú'ýýÿìhÍðÛE]Û¿±FÜç0'ÝŸý¿ï“èi[ᾌ›·mÎsqÙÿÐþù>†™ÿ Zÿ rßßþÆøX×ý“þþÿö4æøo£.íÇEsœÀœcvôÿ¾O¡¥o†ú2îÜtQ·;³qÙÿÐþù>†™ÿ Zÿ rßßþÆøX×ý“þþÿö4æøo£.íÇEsœÀœcv-ÿ|ŸCC|7ÑW;ŽŠ6ç98Æìþ[þù>†›ÿ Zÿ rßßþÆøX×ý“þþÿö4æøm¢®íߨ£ns˜ŒnÏ屿ï“èho†ú2nÜtUÛœæÆìþ[þù>†›ÿ Zÿ rßßþÆøX×ý“þþÿö4æøo¢®wmÎsqÙÿÐþù>††øo¢®íÇEsœÀœcvôÿ¾O¡¦ÿÂÀÖ¿èŸ÷÷ÿ±£þµÿ@äÿ¿¿ý9¾h«»wö(Ûœæã³ÿ 7ýò} ðÛEMÛ¿±FÜç0'ÝŸý¿ï“èi¿ð°5¯ú'ýýÿìhÿ…­Ð9?ïïÿc@o†Ú*îÝýŠ6ç98Æìÿè ÿ|ŸCC|6ÑWvïìQ·9Ì Æ7gÿ@oûäúoü, kþÉÿû?á`k_ôOûûÿØÐ›á¶Š¹ÝýŠ6ç98Æìþ[þù>†•¾èÉ»qÑWns˜c³ùloûäúgü, kþÉÿû?á`k_ôOûûÿØÐ›á¶Š»·mÎsqÙü¶7ýò} ðßE\î:(Ûœæã³ÿ 7ýò} 7þµÿ@äÿ¿¿ýð°5¯ú'ýýÿìhÍðÛE]Û¿±FÜç0'ÝŸËcß'ÐÐß ´UÝ»ûmÎsqÙÿÐþù>†›ÿ Zÿ rßßþÆøX×ý“þþÿö4æøm¢®íߨ£ns˜ŒnÏþ€ß÷Éô47Ã]7nþÅsœÀœcv-ÿ|ŸCMÿ…­Ð9?ïïÿcGü, kþÉÿûs|5ÑvïìA·9Ì Æ7gÿ@oûäúᮈ»·b¹Î`N1»?úß'ÐÓá`k_ôOûûÿØÑÿ Zÿ rßßþÆ€ß tEÝ»ûmÎsqÙÿÐþù>††øk¢.íߨƒns˜ŒnÏ屿ï“èi¿ð°5¯ú'ýýÿìhÿ…­Ð9?ïïÿc@o†º"nÝýŠ6ç98Æìÿè ÿ|ŸCC|5ÑvïìQ·9Ì Æ7gÿ@oûäúoü, kþÉÿû?á`k_ôOûûÿØÐ›á®ˆ»·b ¹Î`N1»?úß'ÐÒ7Ã]wn Ûœæã³ùloûäúOøX×ý“þþÿö4ÂÀÖ¿èŸ÷÷ÿ± 7Ã]7nþÄsœÀœcvôÿ¾O¡¡¾è‹ÃDsœÀœcvôÿ¾O¡¦ÿÂÀÖ¿èŸ÷÷ÿ±£þµÿ@äÿ¿¿ý+|5Ñvᢠ¹Î`N1»=¿Øoûäúᮈ»· mÎsqÙíþÃß'ÐÒÂÀÖ¿èŸ÷÷ÿ±£þµÿ@äÿ¿¿ý9¾艻wö Ûœæã³ÿ 7ýò} #|5Ñ;†ˆ6ç98Æìöÿa¿ï“èi?á`k_ôOûûÿØÑÿ Zÿ rßßþÆ€¾h‰»pÑÜç0'Ýžßì7ýò} ð×D]Û†ˆ6ç98Æìöÿa¿ï“èi?á`k_ôOûûÿØÑÿ Zÿ rßßþÆ€¾è‹»pÑÜç0'Ýžßì7ýò} ð×D]Û†ˆ6ç98Æìöí±¿ï“èi?á`k_ôOûûÿØÑÿ Zÿ rßßþÆ€¾hk»pÑÜç0'Ýžßì7ýò} ðÓC]Û†ˆ6ç98Æìöÿa¿ï“èi?á`k_ôOûûÿØÑÿ Zÿ rßßþÆ€¾h‰»pÑÜç0'ݞݶ7ýò} ðÓC]Û†ˆ6ç98Æìöí±¿ï“èi?á`k_ôOûûÿØÑÿ Zÿ rßßþÆ€¾h‰»pÑÜç0'Ýžßì7ýò} ðÓD]Û†ˆ6ç98Æìöÿa¿ï“èi?á`k_ôOûûÿØÑÿ Zÿ rßßþÆ€¾h‹»pÑÜç0'Ýžßì7ýò} ðÓC]Û†ˆ6ç98Æìöí±¿ï“èi?á`k_ôOûûÿØÑÿ Zÿ rßßþÆ€¾hk»pÑÜç0'Ýžßì7ýò} ðÓC]Û†ˆ6ç98Æìöÿa¿ï“èi?á`k_ôOûûÿØÑÿ Zÿ rßßþÆ€¾hk»pÑÜç0'ݞݶ7ýò} ðÓC]Û†ˆ6ç98Æìöÿa¿ï“èi?á`k_ôOûûÿØÑÿ Zÿ rßßþÆ€¾hk»pÑÜç0'Ýžßì7ýò} )øk¢FI?تW9ý cv-ÿ|ŸCMÿ…­Ð9?ïïÿcGü, kþÉÿû•¾iKòins˜—ŒnÏþ€ÿ÷Éô47ý%wn“GsœÄœcvôÿ¾O¡¨¿á`k_ôOûûÿØÑÿ Zÿ rßßþÆ€$o‡ZBîÜú8Ûœæã³ùloûäúáÖ»·>Ž6ç9…8Æìÿè ÿ|ŸCQÿÂÀÖ¿èŸ÷÷ÿ±£þµÿ@äÿ¿¿ýHß´„ݹôuÛœæÆìþ[þù>††øu¤.w>Ž6ç9…8Æìÿè ÿ|ŸCQÿÂÀÖ¿èŸ÷÷ÿ±£þµÿ@äÿ¿¿ýJßô”ݺMmÎsqÙÿÐþù>††øy¤®wI£¹ÎbN1»?–Æÿ¾O¡¨¿á`k_ôOûûÿØÑÿ Zÿ rßßþƋɛáÝ.6ç9‰xÆìþ[þù>†œ|¦¦ìÜiK·9Ìj1Ùü¶7ýò} Wÿ…­Ð9?ïïÿcGü, kþÉÿûVÙpø"Î0A½ÓT.r6ŒnÏ屿ï“èiÇÁ–ñ–'PÓ×nsÀÆìÿè ÿ|ŸCTá`k_ôOûûÿØÑÿ Zÿ rßßþÆŽUØ9ŸsKþ4Œ“ý«f¥sžqŒnÏ~Ûþù>†œ|.Pu‹U œ‚øÆ7g¿mÿ|ŸCYð°5¯ú'ýýÿìhÿ…­Ð9?ïïÿcG*ìϹ®|;,a×-×nsûÂ1ÙïÛcß'ÐÒŸΛ³¯@»sœÊF1»=ÿØoûäúÇÿ…­Ð9?ïïÿcGü, kþÉÿûvÍ9<,ï7W´ùsÍÓ³ßý‡ÿ¾O¡ªóxÎLù÷škmÎw¨8ÆìõôØß÷Éô5Sþµÿ@äÿ¿¿ýð°5¯ú'ýýÿìir®Ãæ}Ë à9wo¸Ò†Üç1¯ÝŸý¿ï“èiáþš»·O¤¹Îc^1»?–Æÿ¾O¡¨?á`k_ôOûûÿØÑÿ Zÿ rßßþÆŽUØ9Ÿrvø¦¦íÓé#ns˜×ŒnÏþ€ß÷Éô4‡údlXϤ«&N|µq»?–Æÿ¾O¡¨?á`k_ôOûûÿØÑÿ Zÿ rßßþÆ‹Ùu¼l›·_éë·9ÈÝŸý¿ï“èi²øÍ^é¤.s½GÝž¾›þù>†ªÂÀÖ¿èŸ÷÷ÿ±£þµÿ@äÿ¿¿ýË£ÁV°†ÿNŒ.rÝŸýÿï“èiÍàè;µ+·9Î8Æìÿèÿ|ŸCT?á`k_ôOûûÿØÑÿ Zÿ rßßþÆ‚åæðmº‚Q°sœãŒnÏ屿ï“èiÇÁð¡$êV+´’sŒnÏ屿ï“èk?þµÿ@äÿ¿¿ýð°5¯ú'ýýÿìiX.h7ƒá·êV#ÝœqÙÏÓcß'ÐÔxO‘™§¹ÒÙ†wE$cvsŸ÷þù>†«ÂÀÖ¿èŸ÷÷ÿ±£þµÿ@äÿ¿¿ý]‡vJß4¤Ýº] c;³ñÙÏÓcß'ÐÒŸ‡ºRnÝ.¸Îìģݜÿß ÿ|ŸCPÿÂÀÖ¿èŸ÷÷ÿ±£þµÿ@äÿ¿¿ý=Iеlläi!»Ó pfDU8È$¸ß÷Éô« áE]Ûµk1·9ËtÆì÷ÿa¿ï“èk7þµÿ@äÿ¿¿ýð°5¯ú'ýýÿìh¤ÞUÝ»V³sœ·LnÏöþù>††ð¢®íÚµ˜Ûœåºcv{ÿ°ß÷Éô5›ÿ Zÿ rßßþÆøX×ý“þþÿö4¤ÞUÝ»V³sœ·LnÏöþù>††ð¢®íÚµ˜Ûœåºcv{ÿ°ß÷Éô5›ÿ Zÿ rßßþÆøX×ý“þþÿö4¤ÞUÝ»V³sœ·LnÏöþù>††ð¢®íÚµ˜Ûœåºcv{ÿ°ß÷Éô5›ÿ Zÿ rßßþÆ”xÿZ'þAÉÿ?ûì´«eÓ­-ì¾Õ®³¹>[ÿ²ãnÕ»7Ý™ÿ «?úàŸú¨[”r~Ó4;ÍOÖµm¤ÖÙÔÝ]Ê@™.·|Ñnê|¨N˜cÖõO8êÚ (ÖÆ™ý•åG·Ëóü¬ç÷íý÷ÞÆÞØæº¶Ð´‡ÔƦÚU‹j¥Ñ·C(ÿã?­?û#LþÔþÓþδþÐÛ·í^Bù¸Æ1¿Æ=ê–âg¦]^?Øô‹mE´Ô»Ôu‰^æ4Frc¼|F»Ã.Nön„â3Z½ ø†ö÷PÑbº»‰âžÛQWuUU¸x."Ž9¦äÞØcè1Ò\èÚU홳ºÓ,çµ24¦ `VBìÅ‹m#%‰'®I=è»Ñ´­BÎ+;Ý6ÎæÖ,ypMº&Œ ãì5]__Ô4Ûkmqí­î®ï5¼1;:Ax‘C´²²Œ+c89rpG}UmôÛC¶²¶„Äc1Ä«°;p08ÜÀê@&­PEPEPEPEP=Wì_ÙŸÚ[~Ãä¿Ú7g0wtç§§5•àÏíìø›y˜ó_ì~úÿ³ç÷~wý4Ç_Ã<æº("ßîËÿ]åÿÑST6ÿv_úï/þŒjš aEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPSéŸò ³ÿ® ÿ Š‚§Ó?ägÿ\ÿAÖàQ´ñW‡õLZv³c0ÚLVS¬î`»Š¡$(,2ØÀÎIš±§k6zšþéöHe¸‰b€íäJb‘€Ï*Ú\àœW £vÓá·†g—Sµ6ŽšBEµ«Ã*«On¸i<Ö RŒç°â¢Ó-ôôñVyw5°k­jÛd…oí%1Ç€ÁX·ÏòwíhÅõ +Ë×SÕ›Æ ú…µµèÕ¼´‚]Zewµó0ÙˆŠ0h¹ß¸àœ– uµy#¾Ôî/o®'}BþY®£Ž5º‘UV<íà ÁÆ@àqG@êuQEQEQEQEQE2i¢¶…æžTŠ(Ô³»°UP:’OAO#"«ß¼qé×/5»Üı1x?1¤åB÷'¦+Áºf£¥h^F¡&7Lò[Úîßö8IÊC¿ø¶Ž3ø  Vÿv_úï/þŒjš¡·û²ÿ×yôcTÕ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ŸLÿUŸýpOýT>™ÿ «?úàŸú¦·Õ£x›M×ö<_4o™%›O¸†7CŒyU³F#ž•±T ¢Š(¢Š¯a{o©éö×ö’y–×1,оÒ7#Tàò2ë@(¢Š(¢Š(¢Š(¢Š(¨n³šêáŠÃ $`¥° dœM: ⹂9à•%†E’#eYO ‚:ŠÌ·û²ÿ×yôcTÕ ¿Ý—þ»Ëÿ£¦¨QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQETúgü‚¬ÿë‚è" ªCÄZV‘ac íÖÉZÝ"Fò09!AÇãU¹;$)4•Ù‡áí ]´ømoZ¾¥ý ÚÃÌpƶӘFÐ6Æ® ·3ùÉæ±®´¸¥ÑõÄðXÛ¿‡nโKG‰®.YWÊH̲%Æs¸rk²ÿ„ßÃÿóù7þMÿÄQÿ ¿‡ÿçòoü›ÿˆ­U*‰ß•ýÆn­?æ_yoàMø¿RYtv±:m C$9I%ó.7±'† ™c–óUô› /ê §Í«(AªÜ27œÁ¬å,&cÎ<М7C´ WAÿ ¿‡ÿçòoü›ÿˆ£þÿÏäßø 7ÿOÙTþW÷´§üËï8}O¸¸ñ&eÐc¶Žy&‡T‹û"u>[A/É=ÌŽVà ÎÒ Ç#8=‡ÃË+m;ÁZ}œ:kX\A qÞÆÖ†÷ ‡~ToÉ|du8«ð›øþ&ÿÀI¿øŠ?á7ðÿüþMÿ€“ñ½Oåp{Z}×Þt4W=ÿ ¿‡ÿçòoü›ÿˆ£þÿÏäßø 7ÿG±©ü¯îkOù—Þt4W=ÿ ¿‡ÿçòoü›ÿˆ£þÿÏäßø 7ÿG±©ü¯îkOù—Þt4W=ÿ ¿‡ÿçòoü›ÿˆ£þÿÏäßø 7ÿG±©ü¯îkOù—Þt4W=ÿ ¿‡ÿçòoü›ÿˆ£þÿÏäßø 7ÿG±©ü¯îkOù—ÞmÝÉ46sKonn&D-!ÂùŽ'ŸZÈðžƒ.¤Éó‰&žâK—Ž>!œäÇ=võäñœTð›øþ&ÿÀI¿øŠ–ßÅúÕÂAë $!WÌ‚Džƒ, PéT_eýÃö°}Q-¿Ý—þ»Ëÿ£¦ªö‘ÞÉl²¤6ûf&Q™˜–ÇÝ÷©ü‹ÿùãmÿÛÿˆ¬ ¢“È¿ÿž6ß÷ý¿øŠ<‹ÿùãmÿÛÿˆ¦ÑIä_ÿÏoûþßüEEÿüñ¶ÿ¿íÿÄPÑIä_ÿÏoûþßüEEÿüñ¶ÿ¿íÿÄPÑIä_ÿÏoûþßüEEÿüñ¶ÿ¿íÿÄPÑIä_ÿÏoûþßüEEÿüñ¶ÿ¿íÿÄPÑIä_ÿÏoûþßüEEÿüñ¶ÿ¿íÿÄPÑIä_ÿÏoûþßüEEÿüñ¶ÿ¿íÿÄPÑIä_ÿÏoûþßüEEÿüñ¶ÿ¿íÿÄPÑIä_ÿÏoûþßüEG7ÚíÐI,0lÞªvÌIå€é´zÒZ(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ òí]±¬ÜsüèˆëÔkÊ5ÆÆ·qÿ\àÿÑ×~]üo—ùXÿá|Ë7zk[Nöés ÍÂ;#ÃÈXmÎãʃÐÔ"Æù¦xVÎàËÐDÛ”rF8«ÒëáõÛÉÖHVnL2Çn¨ä²8L°PÜ–~¦¡Ó5UÓ´ßgY4<þn yg9=G~ÝýE)¥ªþ¿Íqƒz2œ\\ïò –]ƒ-å¡m£ß*MF$´Ôîí£,Rž5-Ô€ÄsV ü‹0{Õ´¶=ÆñaÃc$ƒ€½Ö¨j·QÜë³ÂÛ¢’âGFÆ2 5qrrÔ™$£ ÝôoªÛèßZ–wѾ«o£}YßFú­¾ôg}ê¶ú7ÐôoªÛèß@âýì©õMÄ Îp¹ö¦jQKkÌ3)IQAúpúõOœžq+pß³Ç|g½?YÔŸPWb¡#Ž*$í@8ïõ¨w¿‘jÖó=NY¿³¬È’0žL)Œ“÷G|ÿJ· ”ãËt_]È[?¨¨4ÏùYÿ×ÿÐEZ¯š[B4‰<¼PøûÅr?,ÿZ#ýã«õUÛýM:Š`GÌ÷’FÃ2¿ÔÐVo3"HÂgî˜É?ž¥IE2A)Ç–è¾»¶QJDž^¨|}â¹–­:Šlb@¿¼ucžª»©¦Æ³ýä‘°ÇEŒ¯õ5%Y¼Ì‰# Ÿºc$þyþ”² N<·EõÜ…³úŠ}Ò$òðCãïÈü³ýhŒH÷ެsÕWoõ4ê(8Ö`ß¼’6豕þ¦‚³y™F?tÆIüóý*J(’ N<·EõÜ…³úŠR$òðCãïÈü³ýiÔPcýã«õUÛýMQÔaiûÉ#aæÅÂÆWþZ/¹­ §ªÇ—ýµ‹ÿF-'°"*(¢¤aEPEPEPEPEPEPEPEPEPEPEPEPEP\n©à›ÝRH5 íÇŸo˜“³."®Aö»*ŸLÿUŸýpOýV´ªÊœ¹¢gRœjG–G›ÿ»׿ç¶ÿŸÿˆ£þÞ½ÿ=´ïûüÿüEvð“Žÿ„«ìŸó þÒû7™ÿL¼Í›±øgø©§ñ…‹^›»ÀµµX¡µ‘¤bIaWq‘°Ûò£¡Æ2¤×W׫w9þ¥G±Ã»׿ç¶ÿŸÿˆ£þÞ½ÿ=´ïûüÿüEuçÆV']Ó4Ø ½•/íå™f[9ÈB’${XlùyvÜX›FìnpøŸG·ögÚÏÚ|ß'>Kù~f3åù˜Ù¿û>Ô}z·pú•Ç ÿ ï^ÿžÚwýþþ"øWz÷üöÓ¿ïóÿñÛ\x¿CµÔEŒ×n&7 k¹måhüç ,~`]›²ÃŒäu8ÒÇâíV» u![7xç“ìÒìYO,¦ý»KîÀ c@"¯VîR£Øâ?á]ëßóÛNÿ¿ÏÿÄQÿ ï^ÿžÚwýþþ"»cã tû›énä‚Y#Žqqm,O‘‚¦äu $`ãyàÔ?ðœèºîüèÆçƒû>ãÎUþùfàŸíco½^­Ü>§G±Çÿ»׿ç¶ÿŸÿˆ£þÞ½ÿ=´ïûüÿüEzu¼ñ][Eqo"Ë ¨9ä2‘Aô"¤£ëÕ»‡Ôèö<·þÞ½ÿ=´ïûüÿüEð®õïùí§ßçÿâ+Ô¨£ëÕ»‡Ô¨ö<·þÞ½ÿ=´ïûüÿüEð®õïùí§ßçÿâ+Ô¨£ëÕ»‡Ô¨ö<·þÞ½ÿ=´ïûüÿüEIoðãU’tKË›4·'÷†)›opP?Zô‹¹'ŠÎi- ΈZ8KìÞÀp»»gÖªèÚÕ¦»aö«FaµÌSC Äȼ28ìÀÿˆâ“ÆÖj×ÁÒObm3þAVõÁ?ôVª®™ÿ «?úàŸú«Uȶ:‚¹ê7zh©õõœwZ†y,-EÄżΡŽLüȹœz šéë/ZÑF°,™oî¬g³¸ûD3ÚˆËòÞ2‘HÛ#vô wEñÚÿnfæëP·±H7ÔáKƒ>íûÃ,xŒ§yAŸœ Äb›Ä5žÂþH-lo®ìæ´ËÓu%¸ŠAq0‰q&Õû*@è9ÁÍj¿ƒ­n-o£¾Ô/ï./"K¹š1"ˆ\¼AB"  ÄŸ»ÎNsIƒmüë‰îµ=Fò{‡³w–vŒôiŒÑ€@,p@C“Lø]ÂU÷mù®(ÙR8<æ¬êž²Õ¥¾–y'W¼†Þ(Àlò$yceÈ<îrNrrí#Ãë¥jwï¨ß_]]Å2ItÉÂÆ\®Ðˆ¡Ö7AŽòHÅQ@Q@Q@Q@SÕ?ãËþÚÅÿ£®U=Sþ<¿í¬_ú1i=QE# (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ŸLÿUŸýpOýT>™ÿ «?úàŸú¦·Šÿ…a¤½þÈþÄÐÿ¶ÿ²¾Íöϲ'ü|y[|Íû7}þwc=úÖž¡á«¹ÿµÝmì®Ö¦—¤·ÀUVÚ(r%@Z7Ê7 ”ã¿eB9; \±¹ÐîäžÞö{X®m®|ë—ÊÅ4±¸*å ‘‘b ómÝÔ‘L>ÕüÏìÐö?ÙÚ¿ÚhÞþúÿ´y{6íÿYÆíßw¹®¾Š:Ü:Xó=Uî¬õ(¼5oq¦Î$×`¾yö½t·/û½¸Ú¹cænÆn3]0еH<)}§ÙÝÇô×·7)*;(Ù%ÓË´°RQ¶–•'#8ÓQG@êpž Õ„÷óNð ¹—Ltõ‹Â¢ÚèË 2J3Êžg°åW›,^*¿Õ£0ÜY[[¢‚wçfÏÆ%\sØþ:”P_†ôé´ i]Ã#Oge ¼%K"$dŒAZ”Q@Q@Q@ÝÇ<¶sGm8‚wB±ÌS~Æ#†Ûß•WFÑm4+²Ú+ÎešidšFåÏv'ü¡EUÓ?ägÿ\ÿAjªéŸò ³ÿ® ÿ ŠµBØŠ+ÅÚΟé¾sZæ('ò%–-­•I?„î(zŒ€FFhn£šxm<ò¤H]P3°PY˜*Ž{– Ü+Œ¶Õ—Hµ¸ŽÚ=V´»°Š[-^spbŽ{ô}휂øùÈ:AouKÆkí6Ý-ɵ“F¹€É‘™$¿+‡?ÝýÒtäõã­ÅÄ6–ò\\Í0Æ¥žI*¨I'€(‚xn­â¸·•&‚T‘°eu# ‚8 ŽõÀx–÷]žÎãF¹¸Ó~×o}¥Mö„´s‘ÍvTÆdÈ!ãÉùˆeãå'#Hkúݬž!º¼}=ôý5a·q-É‘ÌÛs!üÏÆwqÇQ¸€v5ž¸Kv•îŒéa¹•H @ê@, žÛ‡­q6>4Ô£ƒP¹Ôl¤šÞÛM–ü¼z]Õ¢ÆÑ€L[¦I 1÷NTqSÙkþý(ëéòÒ/?±Æé´™mw)ÜÍ»a†3Ï€;:(¢€ (¢€ (¢€ (¢€ §ªÇ—ýµ‹ÿF-axÆþóJ:uÞ—+Ë©Ä1i¾[Õb7‚?„ªÛú.x8­ÍO&Äd`ù±qÿm“ØQR0¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(©ôÏùYÿ×ÿÐEASéŸò ³ÿ® ÿ Škp9/Ç]éÚh:5ýî¡>“k©N–1§–‹0n…Üt(ß.I#Ï8¿¦øÂÓTŸOØêZê ýŠòhÕcœì/€7o*±”Á4ÿxgþÿ'ý/Ïòô«=7ý^ÜýŸÍùúŸ½æô펧<^û&™á{?µïþÂÙóùxóöÛILü¿ë7wéŽùª$’ÛÄ©6£mi>—¨Ù­Ùeµžæ4T™‚—Úbêv«:©ùOz­iã;[Ëý:Ý4ÝEmõ)^;;×<™¶Æòn>à ¡ÆTg €FHÊÒ~3[Ó5&»±‘ì%wó“N sr'÷Óï%ÏÎ@‘Ó¡4í7R‹Äš—·riš%Ä¥V]9¡Ä –(ó1b²ŸB쌖æ5‡Ší5 Ëh’Îö+{ÂËgy*(Šä¨,va‹ ª³ ʹ‘šÞ®7@🇵;yíbÒD»„,šTiu‚¥pÓç-€z…÷''=•QEQEQEQECwöŸ±Íö3¹Ø|¯8›±ÆìsŒúVw‡uø¼Aa,«Asm;ÚÝÀÇ>TÈpÊ£B:ƒÛ¥hÝÀn¬æ·Kš…<Ø[k¦F2§±÷¨ôí:ÓJ°†ÆÆ†Þ!„EýI=I'’O$œÐ¦È*Ïþ¸'þ‚*ÕQµž;]‰[lQZ«¹ôrk95Ü¢Ím é«€È.µGŽ\cø•`pÑ `fýSÔ´»=ZÝ`¼ã$£`Œ«) §ŒƒÜÖ>™â[¹µ„Ó5]>ÞÖYwˆ$µºiãvQ’¤´hAÆHàä)ô®’€1£ð®Ý¡µyc»Ûç¼óÉ,’mås#±”ò9àò1PÂáö·¼‚[9gKß'í&{©¥i|§/æf$á‰ïÈàä Vàž¸{u• èŠïa¹U‰ Hê*ÀûO¥I@öþÒ-­¤-äu’x®渒YH™^2]˜± ʸãŒcÕè´ëH^õÒÍìžmÀbXHÛ>Aã8÷4ä½·“PšÁdÍÌ1G4‰´ðŽ\)ÏNLoù{б@6Ò´Öso¤ÒÊîèKâKè­¤þRéqñ.Ð6â0&ÈÇ>OûU~]XøKÃ÷·¥´÷šd2ϨêQÙ ]6œ¶yÆ~aƒ×#»¢¹ÄZ¦µâ—ò ·:Ú]•ìEç"TyÇvÁ$” T¾PA%ˆ<­êþð}î•6w¶PÛÛ\-Ö÷.¶åÁxö€ªËCÓ g‡a\ïh¢ŠC (¢€ (¢€ (¢€ (¢€ *¸æšÎh­î ¼Î…c˜ o-±Ã`ðqéY×¥×ô™'žÐ\IlòGÌ3²"'ªÞœŽqšXW‡Wë&C¤È_(â…ÖAuøÈç=«[N´‹E`0 ÷ùEséà[Hî¯$Kˤ†iD‘@“HتU~n›•›Œ»â…°3IÓç±ñ&œ×sÜkÏÉ>\fÑÔ/#ÕIî9±ãË?·Éá»oìÛK~ªßè·í¶1ip~c±úc#å<Ó¨½máH­u ¸îåck+>$Ë–7Ldœ¿ŸÃÞ®êú<š«Ú¼z¥Õ‹Û;:5¼P9ÜWn{à…,2¸á˜Ð!u{«hñÝiVXhÆ$Ò„6öH²Á\_K…r‰»r…ÈÀÁÎ9äÚ¿Õµ} µ«ÕZìà Œ±^]ChÄòDìÁTªßÈõÉ5ÔÛiG[Æþиù7Ý]C™&Ç/v"¯ÈÄ•À<õÉ«Ogk#Ìïm <ñˆ¥f@Lˆ7a[Ô ÍÁãæ>¦€9_G4<ñêÏ©ž×¬ÊÆàÛ!• ©ÝŒäô U›}:ÆÒêæêÚÊÞ‹¢ ıĪò‘œ e±“×ÔÒfŠ( Š( ©êŸñåÿmbÿÑ‹W*ެámpÅšhöª©bpÁÙIü)= ¢¡ûBÿÏ+Ÿü“ÿ‰£í ÿ<®ðOþ&¤dÔT?h_ùåsÿ€òñ4}¡ç•ÏþÉÿÄÐÔT?h_ùåsÿ€òñ4}¡ç•ÏþÉÿÄÐÔT?h_ùåsÿ€òñ4}¡ç•ÏþÉÿÄÐÔT?h_ùåsÿ€òñ4}¡ç•ÏþÉÿÄÐÔT?h_ùåsÿ€òñ4}¡ç•ÏþÉÿÄÐÔT?h_ùåsÿ€òñ4}¡ç•ÏþÉÿÄÐÔT?h_ùåsÿ€òñ4w!wŽáUFI6î•OEPEPEPEPEPEPSéŸò ³ÿ® ÿ Š‚§Ó?ägÿ\ÿAÖàVÓ4 ;K³Ó`ŠÝ%“Nµ[K{™‘ZeT.7`c ãúVd~ µ¶ŽÅlµ=JÐÚØE§…ãÝ41çhbÈpynSiçéŽšŠ¡Z_…­ôyì$²½¼E´±†Á£&2·DGæe3]ŽT®Iç#Š–ÛÖv–: ¤rNcÑ6ý˜³ ¾Ø¿Ž~W'ŒsŽÜVÅQEQEQEQEQE ݬ7¶sZÜ)hfCŠ®TŒ‘ȧAVÐG$PÆ¡4\*¨àARQ@9âk°×s¿ÞÃgo–Œ2|”së’y­o†z¥Í´sË©é6ŽêÁýšÓlÈé¿Í\ÿß"¹ÿ«Hú¬H2ïi¨÷6É^m®¤éÉ hÜ § ½ µ%N•548iSŒêMË]O6¾ÓGÔa·¹{Ø'w&‚×ÉÚê7`©wê9ÏjYÀc2 HÊ)·–0 ÎùU¯XA¥¥º,ÆYnõg¼9þ Öì€NGÈyã©ô§iOçÍ%üý&ÄÏüô§æFßø®¬-IJ—4º¸˜(ÕåR °ˆ¾Ád…¶îÛå ãÏN˜çéLû5¯üûÃÿ| êf–ÈÈ—Lê!‘ÖÃp8;°Íÿ~‚ø¦E5åÔ,`ÛQ†8‘b $ˆ“»÷—îòsש­}ªÝ£?dïkœÏÙ­çÞûàT˧@Ö’\ˆ Ù‰rÁˆíþÉý+I5úMÅÏØìÄ‘Oq!pªÊäŒcæûƒïf´&û-ù±²ŠY[ìRù^Pp BÌÅPäIã})ÊvéýiþbŒ/×ú×üŽ_ìÖ¿óïýð)ÂÎZFQHRÞXÀ'8üäk¡†Õ[Q¼ò"tkxâ¶ ®Wç „íÀl‚{qŠ’üIokªZÙÀŒ[Ìê-ЕV…‹·} :—<y=ª½’þ´ÿ0ön×læ>Íkÿ>ðÿß³Zÿϼ?÷À¦ù”y•µ‘Øï³Zÿϼ?÷À£ìÖ¿óïýð)¾eeAv;ìÖ¿óïýð(û5¯üûÃÿ| o™G™E]Žû5¯üûÃÿ| >Íkÿ>ðÿß›æQæQdd‚Î…Ť{·–0§èkÁ“¼>$‚Ö,ˆ$”ļʸ€ágépÚ‹‰n]ZܦƶÏ3¶;»~5kÁM»ÆV¿õÆ_ä+—­)+Xm*ÅÜõXÝŸ;¡xñýâ§?‘4‚G2m0H?|•ÇóÏéRQ^ì‘É#£a`’AŽªWú‘N‘Ù+HsÑHþ¤S¨ ‡cãÇÜ$gùãõ¤ÙóºÞ*sùO¢€#9“i‚@¹ûä®?žJ$‘Ѱ°I ÇU+ýH©( Èì‹•¤9è¤R(Æ=Æ6 ¸HÏóÇëN¢€³çt/?¼Tçò&HæM¦ çï’¸þyý*J(9$tl,H1ÕJÿR)Ò;"åciz)ÔŠuÐìcÜc`Øû„Œÿ<~µRýÙô«ÝмxþñSŸ”úWj®§ÿ «Ïúàÿú ¤À‚Š(©QEQEQEQEQETúgü‚¬ÿë‚è" ©ôÏùYÿ×ÿÐE5¸iáÍ_Vo i~šúî]OVµ¶žÚúI¥MùßyçtdJíºÞ´l|M©ÁáO,7Ñ=ܺ5µÌ¾e…Ö¡4¬È2\CÊGß%²wqÇ=å…•¾™§ÛXZGåÛ[D°Â›‰ÚŠQ“ÉÀ­e?ƒ´7†Ò/²Ëv¶ÉiÅu,{¡N7ÚÃÌQÏž§ÔÕÆðÞ««kž)7âòô»O¼M ³'›çœ+ù›Cn^[gÌ¡FÝÆ=/YÖõ7š†¤šA“W‘^ŽÕɵ-g<›Ã9' 8 ι9Èém<7¥ØÏc5¤ÂöVÉiˉùJUu݉Üq¼‘Ï4õÐ4Ô°Ó¬’H4Õ hW "h†“±Ødžùê¡“áÿ\ëÚ¬ö+o 'O/›vá$›™“ƒÊe–>›qÛzŠ¡§[=›Áj‘5”F d®ØÈ^:ŽÁÏ ¢¯ÐEPEPEPEP{ôŽM:å&¸{hš&:Iå´c°nÄuÍcx7SÔu] ÏÔ#ÎÙž;{­»>Ù8I¶áÎ?Á½41\ÂðÏKŠUÑÔ2°=A¨§@Iâ SþÐ[¸l®. ¹‚V‚&“‰Tƒ€q÷ZËÓ´›Í4\ðÄÒ™æó˜Í§ÈH;Up0.~¤×¨ÁehVLÚÂq4€f1Ð;Rý‚Ïþ} ÿ¿bºV1ò(J)¤s<*çsŒš¹å÷¶z¥ìPFÙäÿÙZ·ý5ü“ÿ‰£û+Vÿ F£ÿ€rñ5ë`³ÿŸH?ïØ£ìóéýûiOùPgû<Ÿû+Vÿ F£ÿ€rñ4ejßôÔðOþ&½cìóéýû}‚Ïþ} ÿ¿bí)ÿ*ìøwg“ÿejßôÔðOþ&ì­[þþÉÿÄ׬}‚Ïþ} ÿ¿b°YÿϤ÷ìQý¥?åAýŸìòì­[þþÉÿÄÑý•«Ð#QÿÀ9?øšõ°YÿϤ÷ìQö ?ùôƒþýŠ?´§ü¨?³áÝžOý•«Ð#QÿÀ9?øšé<£êþ ‚úêÒkx@x@™ 31Rxœ ¿­vŸ`³ÿŸH?ïØ¤Kh!¿³h ÊÃ*€yoYÕÇN¤Z—K rROb v;[ígNÓ/ÐKg$É }ÉJÔ~ððx¬hþ Ñ|7u¨/„ôb!·—§Å»ß-lxÉ%³·]~(ZuÓ­§ó£Fü£±Ø®H(q‘Xæêæâ3Ö‘s,Fåuú‚Ø#Ú¹N£oÁždš•ƒ11Xß40ƒücŽM£Ø zjšgW¼×¯ìí4»²±ºKi®&¿tæ(åfXÄD @¸Éª´ý¶ò‚²>  /§ú<5“kmáÿøLu[½CE’çPŸRínŸB¸sÈ¡Œ~øÃµ@xÙƒÛ‚=i ÖÆº4VÖb{縸šÆÜÚØNÛâJCRU¸$íã'‘›·¾)ѬÙæ¼.·1yñ˜!y¿uÇïÀv§#æ8õŸáO ÝèFßíR@þ^‹a§Ÿ)‰ýävóÈ)óø9©éž×t+M7ìMžá4{m6è\HêˆÐ†ÄˆB’Ã.ùR8^E]Ó¼AsÃ}/Ä‹ö©NŸmuvÙ ò²¡–LŽfÀ8ÇnãÅ66š¶§epv&Ÿ`·ÒKœ‚¤¾áU §þ*oé/¦øGKѯ|©^ÚÂ+Y¶ä£•Œ+c d¢¹k^¤v+=ìR2Ý»bX™mD:rÌ- Ýž>i1ž2_×ç÷ÐXx»N¹–ÚÒéš×P—bKÇh✨c´!qœmÎ}©’xçñK*I~è±NöòLÖÒˆ’Tb¥M»d<ñŒäf‘ðæ¯æf‡±þÈþÕþÓûF÷óÿ×ý£ËÙ·oúÎ7nû¼mÍOÿÝßü#§Nó-üÓ­h“·ËþÐûN:}íœzgŒãšb"Ö¼cfš×¶7r@Ö—¶Iuö‹g‰ãŠKˆÕ‰I¬…ÀlzàäV´'Ò.,®nÖåãŽÙ•fIà’)¶6ƒ¨|¶FÞ>lñšÉñ†µ-NóQ¹±šÑxôÑŸ¸€Ö×O3nt!€<œçh›Dñäz½ë\ZXêw±[ÁZÌì‹NÌAª°gówùFÉR]CÇZež˜o!ŠòvKË{Y-Íœé,~lCÌ{ÀÁ$|¸bƒ’+¤‚e¹·ŠtD¢HÙ3ʰO±ŽõÁ[ø3ZCª\3[,³>KxeÔ®.Àkk†˜«K*–²Ê02~^íÞÀfkxšâ4Žr€È‘¹uVÇ 1‘žøô†IUu?ù^×ÿÐMZªºŸü‚¯?ëƒÿè&†QE@Š( Š( Š( Š( Š( §Ó?ägÿ\ÿA>Òn´(-î"I –ÙRHäPÊêWx Ž1Mnê+ËÆ—£èš®³.›¦ÛÙ_m¥­›éú|à±…Ìp³á#ÏÎÄ·°Æ[5vÓ\ñ¡¢ÝAo=ÂÝZjÿcs#Z-Ü‘y !UÁ0A|zmSÀ=(Gv÷¶ñêØ4˜¹š)&6žQ 9éÁ‘??cV+Ëõ]Ás êv­%ÌŸ`Ô`šêî%Ô-Ͳ<’¤|0B¤œg!rF¦½¨êúO—8ÖneÓ-lVyî­Õä'-™e€ÌD+Ὠ¼¢Š(¢Š(¢Š(¢Š(¢Š(¢©ê¿bþȼþÒÛö%þÑ»8Ùƒ»§==9¬¯kÿ`ÿÄÛÌÇšÿcóÿ×ýŸ?»ó¿é¦:þç4jßîËÿ]åÿÑST6ÿv_úï/þŒjš aEPEPEPEPEPEPEPEPQŸøý²ÿ®§ÿE½IQŸøý²ÿ®§ÿE½jÑL’¦Ç›>:oPqùÔcµÿŸX?ïØÿ ±ÑP}Ž×þ}`ÿ¿cü(û¯üúÁÿ~ÇøPôTcµÿŸX?ïØÿ >Çkÿ>°ß±þ=ØíçÖûö?±ÚÿϬ÷ì…OEAö;_ùõƒþýð£ìv¿óëýûá@ÑP}Ž×þ}`ÿ¿cü(û¯üúÁÿ~ÇøPôTcµÿŸX?ïØÿ >Çkÿ>°ß±þ=UÔÿäyÿ\ÿA4ÿ±ÚÿϬ÷ì…3SÿUçýpýÒ (¢¤aEPEPEPEPEPSéŸò ³ÿ® ÿ Š‚ŸgŸö);Ûý™<¶`‚W$QôÒ¯ME¼^Dm;"Uòш%W€J®@ãå•Yü;¢H-CèÚ{ Oø÷ j‡Éç?'/>•¥Tu gKÒLCRԬ쌧ý¦uyöÜFhõ€†‚<‚)h¢Š(¢Š(¢Š(¢Š(¢™4Ñ[BóO*EjYÝØ*¨I' §ƒ‘‘@ÿv_úï/þŒjš¡·û²ÿ×yôcTÕ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ Í×.$´Ód¹…¶Ë SHèÂ5¥Y%ÿ×ý{Üè‰*£ñ!KfyÕž•.·«Ã§Ú‹as2¼¯qr…öªã,GŽYxÈëÖµõ‡Wº}›ÜI®é/:; þ>}gxvôYø¶Þf`ªösÄ2q–-õŸʺÍzñ.…u¤É;B.Ôdì23ù×£‹­8Uq‹²80´¡*jRWgm¸‚æÒÝn-¦0ɶ1´‘‚{AükA4Y$¶7)¥³@o5mò¸NqŽ0j ûˆ¦ñ³,8Ø÷JA þæ:Ó»šÑt­4Mï1µ}Ž“QûÙ1•ÚIçÜW}97N.Ú³Š¤Rœ—Df=¼r25¼© íUaøÁü)¿fµÿŸxï]©ðÿߺ'VšÝ¥{xšÅí ­tPn3”'ïõÏ™òíÏNÝéâ!~–†ÊÑ¡x™ˆeœ[y™-רìFhöžCö~f%¾̦4‚Do'̃¢©cÛЇìÖ¿óïýð+¤Ò¤ûSÙ\}žßζDB¢Æ®@ `æ¢6òKq§­Õ´÷®Òî¡ ” ƒ“¸Æp3š=¢NÍZÿ{7Ëtÿ­?ÌÂK8$b©i ac€2Oà4ß³Zÿϼ?÷À®¼FÖ³ÚHbæxîâÛ-”q" Pyc#$¶;œt<òS¼‚âA2l”9Þ›6m9ämíôª„”ú8¸õök_ù÷‡þø© ÊmuA¾#Žâ’TQ€ÀDì2>ª+'Ì«Ú+nÖíÇûÿè‰*q^Ê^…aÛö±õ=ZŠ(¯œ=ࢊ(¢Š(¢Š(¢Š(¢Š(©,¡ŽãD·†dY"’ÙQцC¸ ŠŽ§Ó?ägÿ\ÿAÐm¹šñí|p]͌ۮä~|Û8ö´9=Ëæ5o]“zVTºœ-©éQëzõ핃ϭ‰o^sê¬jò)B®Bò1ÂŽ¨Õ94ØeÖmµFgóííæ·Em+#FÌOÎb\sÜþ~äØóëëûŸøFôk«ÝgÊ€=ÐD¼¿–ÀÞD$ÄgAþXS´ýýäö¦jz›Ekz5=¯4—]‡Í3乕ċ¸—ûÙÞ¿!Åz…˜ÌŸ F"ðŽ‹‚kp–(†s™#Äkò±ÀˇÍkQE6îî$QE!…Q@Q@Q@ïÞ8ôë—šÝîbX˜¼ ˜Ò r¡{“ÓàÝ3QÒ´/#P“¦y-íwoû$å!ßü[GüWCEd[ýÙ뼿ú1ªj†ßîËÿ]åÿÑST (¢Š(¢Š(¬__jÒé6ºl¶±M}xmÚ[˜UEË&B«¡'1×¹¦}“ÅŸôÑðQ/ÿ$ÓvŠÂû'‹?è5¢ÿà¢_þI£ìž,ÿ Ö‹ÿ‚‰ù&€7h¬/²x³þƒZ/þ %ÿäš>ÉâÏú h¿ø(—ÿ’hvŠÂû'‹?è5¢ÿà¢_þI£ìž,ÿ Ö‹ÿ‚‰ù&€7h¬/²x³þƒZ/þ %ÿäš>ÉâÏú h¿ø(—ÿ’hvŠÂû'‹?è5¢ÿà¢_þI£ìž,ÿ Ö‹ÿ‚‰ù&€7k?Xµ{ë&³ˆ$é,JOL´2üê—Ù†µ‚j‚<$ÿ³e®¯ûÄôð÷þ $ÿäš?±¼AÿAà’OþI®Ùãyõ”9!„äødÑÃM¦j³^\\ÿcê Ó¸vU³—h!xãÑEZÛ®ýŸÈþÅŸfÍ™þȱŒ}ï/9÷Îk¯þÆñý<=ÿ‚I?ù&ìoÐCÃßø$“ÿ’j–>I%Ê´%à“wæg ý•«Ð#QÿÀ9?øš?²µoúj?ø'ÿ]ßö7ˆ?è!áïüIÿÉ4cxƒþ‚ÿÁ$Ÿü“Uý¥?åBþχvpŸÙZ·ý5ü“ÿ‰£û+Vÿ F£ÿ€rñ5Ýÿcxƒþ‚ÿÁ$Ÿü“Gö7ˆ?è!áïüIÿÉ4iOùPgû8Oì­[þþÉÿÄÑý•«Ð#QÿÀ9?øšîÿ±¼AÿAà’OþI£ûÄôð÷þ $ÿäš?´§ü¨?³áÝœ'öV­ÿ@GÿäÿâhþÊÕ¿è¨ÿàŸüMwØÞ ÿ ‡‡¿ðI'ÿ$Ñýâúx{ÿ’òMÚSþTÙðîÎû+Vÿ F£ÿ€rñ4ejßôÔðOþ&»¿ìoÐCÃßø$“ÿ’hþÆñý<=ÿ‚I?ù&í)ÿ*ìøwg ý•«Ð#QÿÀ9?øšÖðþ‰©ÿh5ÜÖWð[A33OGœÄÊÈûߥt¿ØÞ ÿ ‡‡¿ðI'ÿ$Ñýâúx{ÿ’òMEL|ç-J§‚„$¥w¡ÒÑX_dñgý´_üKÿÉ4}“ÅŸôÑðQ/ÿ$× ÚnÑX_dñgý´_üKÿÉ4}“ÅŸôÑðQ/ÿ$Ðí…öOÐkEÿÁD¿ü“GÙˆF™§‚„‰bHªþè–…Û±…ý+Jÿ@¹°¥ŽŸmu%¬ZN—o”Èkˆ£¸œÎŠÜeÌdç9qê*º\ž¶þ¿¯ë©ØÃ©ù¾!¼Ò¼œ}šÖ Ÿ7wÞó^eÛŒq'9Ï;»c òôÓ#i|JÚ…}e§Ík§´{_´"O1¸H‘‚Ld®-ŸâÃöž[øWLŸNW±Óˆ­ ê&œË¶"Q€(q”ÉÎÎêWé×—¶ú| 5Ôž\m,pƒ´œ¼Ž± ãÕ™G¶yâ¬W“Åq¡jôÔº²KÝ>àXÅ Kiysƒ;G ŒìÌb$6ÐvMhx³N·iì¯4ý"K­–Çea6‘#Â,UQ—i´“Ì_î‘L:‘EPEPEPEP7wPÙYÍupÅa… ’0RØP2N&ñ\ÁðJ’Ã"‡I²¬§AE6îI¡³š[{sq2!háÌlp¹< úÖG„ôt &H'œI4÷\¼qñ ç&8胷¯'Œâ€&·û²ÿ×yôcTÕ ¿Ý—þ»Ëÿ£¦¨QEQE…¯ÿÈgÂßöý#¹¬ÏøI¥o^érkúŠ[ÞEo•ÄDÜÜ+EåOœ¼“#(ÂúVž¿ÿ!Ÿ ØQÿôŽæ¯Xi¿a½Õ.<Ýÿoº[»q³Ç:óþ¯9ã®;f˜–ž0Š[{(­4ícR–M6ÞüºÇc¡°_æUßòªúü ó‹’ø²Ð¥«ØÙÞê"âÕoqk“ ÷]·2õç 2ÇŠ_øsû ÉÿKóü½.ÓOÿW·>G™óõ?{ÌéÛNj¯…/tË[Ó5„‚h4ètéä’×̤@íuÆÆœŒ–7 â€LÔï­þiZ²“us™ms1—.ò¨Ei9ÎK•Ý‚‹ÍIsã {]WT…Ô=­žž·i$|™Xdº_•àÇýt­}MF§iF_8YÚÇmæmÛ¿bÎ2qœtÉ®~ÛÀ6ÖñØGö×eµ¼3·Éþ¶!³ËˆóÑ|›~{ù]9áuþ¿¯1¬|W‘m õÀc*ZO{ cì¢ë…d\±|où3ŒgŒæ›'ícYfm+UûWod×K óVSÞÙp!Häƒ|/qöŸ'ûLdý»ûCì¿gýç›æyØó7}Ï3æÆÜöÎ*Çü#Ÿñ&þÏû_üÅ?´<Ï/þŸ>Ó³ÿ€çñÇjz•®ø¡¿².´Ôl.ìï4÷– æ¼R] ù|¶`Á‚ȸÎN#šÙ·ñsÅxNÔ »µØ^ÍãV”‡$!]ŒÊA ŒîÀÚsŒ­­ø^MZâöxµk%ÂY*2ÂÄm§yƒ œïǶ3ÏJŠ ]_ZjoÕVKëä†3,6æ8Ö8˜²¦Íä•%Ÿv[ÄqF€E©øÆâÖÉÌ-êßÅwi¶“ù[„sJ8"M§8e\1Ãcp:ïYî-a{+¨žxf,ªV¥Çe$;øv7ö¦—o-“ „Ba¾±J˜$ïŒ\îÁ$6p¼qV¼?áÏì/'ý/ÏòôËM?ý^ÜùgÏÔýï3§lu9 ÉâDkKk« 3QÔ`¸·K•{hÔ ©Ë²äãøW-ÓŽFs#ñ%ºx†{³4Òé—sBÊ~Hüén‚FÄ`3÷sÀâ´ßĶz]³ÝY\¥–Ÿ‰[í<\/È1æF¥ðŽ{“»¢úr³èè–ÞHî5_;H¶ÑÖÞ fÌ­Ê ØÌêp{‘@‡Šìì.¥¶÷W$ÑÛ*Â3£?– 0„]Ç$ 2òIÅI?ˆV-?âY%åÖÿ.ÅUÀ!ÖÈçváŒäU8¼/,^ƒJûU´×¼Û©omEÄw2—.„‚Ac‘‚1€: U9üm6“¦[;Ù\O§™¼³{b³Á¶VÜÊ",6¨Â…ÃeB’3‘¡#¦Óu5[ï-ÄrÊVEÚÈÊÅYXv!ÜV§Œ"–ÞÊ+M;XÔ¥“M·¿,±ÂÇ lù•Cü‡*¾¿(<ãoFÓSHÒ`±An=Çöë`–,v¢ð£ŸrO5GÃþþÂòÒüÿ/K´ÓÿÕíÏ‘æ|ýOÞó:vÇSš3Nñm¦¥5€ŽÊþ+]@±Ýͬs…ðíãåV#r€@8&¦·ñM¨[Úͦj‹tYm§¹U&`¥±€ÅÔíV8u^†™gáϲi¾³û^ïìMŸ?—;m»ÁÓ?/ßÝߦ=ëJø~4ÝkMÔêÊG±•ßÍM<%ÍÀhÝ?{6òXüùÈ:t ÐF¥¯‹í®ï¬ M;PX5 ;KÆ<™¶£¾áón„8ÊŒäÆHšÇÅ6·÷vñ-¥äP]–wr"ˆ®J‚ß&°Ê«0Ü@$f¹Í?NÔbñ‡¦E-Ôšn<¥V]=¡Ä!’$ÌÄ•”üêÀ8ÉnkGBð%¦ƒ©[Ïm”!¶Ü!dÒÑ.°T®|äà¡A=ÉÉÈ3 Ôu°¬:uíô²dˆí•x%•GQÁ9<àe·‹í›ì k§j7sÞ¤ìEC ªH¯¹”) ØäãƒÏL¿Ä¾> {7óm·Þ ¶Ÿi‚MØäǹ~a·ƒž2ÜsPøÂK ¶œVí$[8¯b –â%"ât—€.͸=±ŠŸþ»i,ìåµ±¾¹¸ºiQ,ãD©‰¶Ë»sXm'wR1œŠ<{.£áöº•§,÷׸çz¨º”*zmP;cªá‹›o"}?RŽØ./$Y%¶ó£¸˜ÊÈÈÌÃîûâ´t *MIs]›¹|ùæyŒa7%yœ}ü~ºP‡âv·ð®‚k¨ê—Ϥ[Ý\»ª”;—a’HnXàðkZoZ†¶[[ÍHÏn·舧d-÷\îe냀2ÇŠ¡máKí6ÒÂ=/XKyàÓaÓ§–KO0J‘±Õw¬ 9ä°ù¹:øbm=­‰¨‹?&Ê+AçoŠ<ì#æ\8ÜÜò>nA  :§ˆ“Jyš]3P’ÒÜn¸¼Ž5ò¡\d“¹ƒ0ä”VÇ=Á_Oñ$Òê^ ŠÿO–ÒËK™”]¹fÅŠ7;°å²w³” ¸ ‘Y~&ø~I…ZÏKKid»©;Ê8G·LM¬xN×ZÕÖòæVòM³Á,¬%]U³ž6¬³ ¶jlCçñM´sµµ½•íåÈžH3'–ª]Áf K…$‘óqé˜ÛÅö­ýž¶š~¡y5ôs£öqk¶@æs:§™¸ü¡ð~îIÐ54&ñ[ß$3iš„vÏ:Û ×D^c6Å-¿ˆ¶í9àæ™ámró]²¹šóLžÉ¢ºž.cÚá&‘]ŽågœíȬkŸ‡âçYíudÅuï–i4ð÷Cl¢O/Î/Âq´£‘z-K¸Ò¾Ù]G5¬·2ÜB‚¯’G‘Ã6ân~0w¤2·‚äBðïý‚í¿ôRÖíax'þD/ÿØ.ÛÿE-nÐMÓõ $ÓmQï-Õ–Tp=éÔPÿÚvóûmÿWühþÓ°ÿŸÛoûú¿ãPQEÀ|÷šeͼ°MwjñJ…L£•#uªz]¾ƒ£ ¾ÇsyØ4²ÍxÓHä »±bè3Ú¬ÑEØXŸûNÃþm¿ïêÿÚvóûmÿWüj (¸ÿiØÏí·ýý_ñ£ûNÃþm¿ïêÿAEí;ùý¶ÿ¿«þ4iØÏí·ýý_ñ¨(¢àOý§aÿ?¶ß÷õÆí;ùý¶ÿ¿«þ5\ ÿ´ì?çöÛþþ¯øÑý§aÿ?¶ß÷õÆ ¢‹?ö‡üþÛßÕÿ?´ì?çöÛþþ¯øÔQp ´exу+M)‚7µOE€(¢Š(¢ŠÉ×4»½E´é¬o µ¹±º7ÓÛ™‘³‘T:’œö¨>ÉâÏú h¿ø(—ÿ’kvŠ`a}“ÅŸôÑðQ/ÿ$ÑöOÐkEÿÁD¿ü“[´PÙÚŸÞàßð±u¿útÿ¿-ÿÅÑÿ [ÿ§Oûòßü]Þ~ÚŸÞ}µ?¼+Á¿ábëôéÿ~[ÿ‹£þ.·ÿNŸ÷å¿øº.¼ýµ?¼(ûjxWƒÂÅÖ¿éÓþü·ÿGü,]kþ?ïËñt\yûjxQöÔþð¯ÿ…‹­Ó§ýùoþ.øXº×ý:ß–ÿâè¸óöÔþð£í©ýá^ ÿ Zÿ§Oûòßü]ð±u¯[Oûòßü]Þ~ÚŸÞ}µ?¼+Á¿ábë^¶¿÷å¿øº?ábë^¶¿÷á¿øº.¼ýµ?¼(ûjxWƒÿÂÅÖ½mïÃñtÂÅÖ½mïÃñt\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿâèÿ…‹¬úÚÿ߆ÿâè¸ñöÔþð£í©ýá^ÿ Yõµÿ¿ ÿÅÑÿ Yõµÿ¿ ÿÅÑp=ãí©ýáGÛSû¼þ.³ëkÿ~ÿŽQÿ Yõµÿ¿ ÿÇ(¸ñöÔþð£í©ýá^ÿ Yõµÿ¿ ÿÇ(ÿ…‹¬úÚÿ߆ÿã”\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿã”ÂÅÖ}mïÃñÊ.¼}µ?¼(ûjxWƒÿÂÅÖ}mïÃñÊ?ábë¶¿÷á¿øåÞ>ÚŸÞ}µ?¼+ÁÿábëÞµÿ¿ ÿÇ)ábëÞµÿ¿ ÿÇ(¸ïöÔþð£í©ýá^ÿ Xþõ·ýøoþ9Gü,]cûÖß÷á¿øåÝþÚŸÞ}µ?¼+Â?ábëÞ¶ÿ¿ ÿÇ(ÿ…‹¬zÛþü7ÿ¢à{¿ÛSû¶§÷…xGü,]cûÖß÷á¿øåð±uï[߆ÿã”\wûjxQöÔþð¯ÿ…‹¬z×þü7ÿ£þ.±ëkÿ~ÿŽQp=ãí©ýáGÛSû¼þ.³ëkÿ~ÿŽQÿ Yõµÿ¿ ÿÇ(¸ñöÔþð£í©ýá^ÿ Yõµÿ¿ ÿÇ(ÿ…‹¬úÚÿ߆ÿã”\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿã”ÂÅÖ}mïÃñÊ.¼}µ?¼(ûjxWƒÿÂÅÖ}mïÃñÊ?ábë>¶¿÷á¿øº.¼}µ?¼(ûjxWƒÿÂÅÖ}mïÃñtÂÅÖ}mïÃñt\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿâèÿ…‹­zÚÿ߆ÿâè¸ñöÔþð£í©ýá^ÿ Zõµÿ¿ ÿÅÒÂÅÖ½mïÃñt\yûjxQöÔþð¯ÿ…‹­zÚÿß–ÿâèÿ…‹­zÚß–ÿâè¸óöÔþð£í©ýá^ ÿ Zÿ§Oûòßü]ð±u¯útÿ¿-ÿÅÑp=çí©ýáGÛSû¼þ.µÿNŸ÷å¿øº?ábë_ôéÿ~[ÿ‹¢à{ÏÛSû¶§÷…x7ü,]kþ?ïËñtÂÅÖÿéÓþü·ÿEÀ÷Ÿ¶§÷…mOï ðoøXºßý:ß–ÿâèÿ…‹­ÿÓ§ýùoþ.‹ï?mOï >ÚŸÞàßð±u¿útÿ¿-ÿÅÑÿ [ÿ§Oûòßü]Þ~ÚŸÞ}µ?¼+Á¿ábëôéÿ~[ÿ‹£þ.·ÿNŸ÷å¿øº.¼ýµ?¼(ûjxWƒÂÅÖÿéÓþü·ÿIÿ [ÿ§Oûòßü]Þ¾ÚŸÞ}µ?¼+Áábëôéÿ~[ÿ‹£þ6¹ÿNŸ÷å¿øº.½}µ?¼(ûjxW‚ÿÂÆ×?éÓþü·ÿGü,msÒÏþü·ÿEÀ÷¯¶§÷…(¼CÜW‚ÂÆ×=,ÿïËñtáñ#]^Ö÷åÿøº.¿,êÝêPÀ׌xâ|ò_GoªCÇ! &ˆ }Á'|ñ^±it%PA¦…€äQ@Ìp¦¸/^еÛÈ?ñÓ]ÝÉÄf¼ËÇŽ²¯Gý1ähÇ7Qº¡ÝFê‘—¬-$Ôoc´…âY$$)•Â/Lã'¿aïZÚ§„õ ?RžÎÙ†&Š:+,kŒ³)n:ð2I¬ {©­.c¸·‘£š6ÜŽ½T×Cáÿ*j³¾µw3Cqbö^qÌJqƒÉ:/3:=S•ìR;Ff¿Rö :þ𧯎)ú†«ésÁ 턱IpvÄWÞ}RFyé],:þ‡c­ø`E¨´öšd2Ç5ÇÙÝ9e |¸Ï_­f.µf|?¦Ú-ûAuª×Ä,ÞTg8p1ƒÉÎÜÑ×úïoËPþ¿…φõ«;»[K‹Iî‰XSÍC¼Ž£†ÀëßùCï>€©<ûu®ši6~+ÒŸOW}ÅdƃºLî`‘ªú§ˆì­î4Óc}myioz.šÞ 8Ûm#ÜðÄ‚i­lÊòøJïN𾣩j–²ÛÏEöu2)3a²>½ñX1X]Ïa5ôP¶…Ö90ùYº g<ý+§Õõm û]Z¤·7:­Äsˆ^ÙÐņÉÿ­Yþ Öì4»»¨uR~ÃpŠÇ [÷ˆÁ“€½%»¿õ¢þ½Aí¡B] U¯K'V²(.õ% ýÑÁù³ŸáÍ;Qðö³¤Ú%ÕþŸ,99*@>ø'Ž+£¾ñŤÖzeÌqî¾{¨çÔ)ð£$`çƒÇLT¶·¢Ç¦k‹a=ìúÄÉ!ŠH¸ »’~ñíÇ £úü¿àB-#ÁºÖtøµ›`²¹v]ÂTÜHF`8$»éX“éðÇÆÕÄW2˜í¾aºR8\î?\bº'ñ”ß`ÖEÏú 7”ü~è¯ÝÆî¾Õ_Y×4ýfóKÕ£¿{+ødXæAºÆªr² Æ1þÎúïªFfÏárÚòÚÒm=–âëp†?5 | žÆ®*-GAÕô™aŽþÆHZfÛYX1ôÈ$gñ®ÏO¿Ñoüi¢Kc$W‰yMÕÌÍIû¶Á*ßÅïY7:¦a§Úéê]R©ýªäù DèP×ðëÍ upïýw0õ/ë:D÷öB²¶Ä!•ÁoO”ž}©×^Öì¾Íö6T7M²Ü¥ºãh$Ä éõh–ÖVÉc<-Q.Ö {n1Øä[Þ©¦¯ é¾0ÄVúœ·¾tîÒÛ›VW…]HÎãÃc `v¡9ýSEÕ4SÔlÞßÌÎÂYX{©#>ÕŸººOjöw6ÙéúµÍ¿žf1A§o,ã'ø‰ÉÎcìù:L–Ùšd›Ã´ÉmºuÏ£çŒvâ’/h~¹×ìõm3Ú)óKüD€0¨¬|9¬êMp¶v-1¶Ç( Úèå† ÔþÔ4ÔÓ5/RºkHïãŒ$â#(RŒN ŽyÍiøkRðæ™Ùn ŽêÝâêk”Ëè‚c=ý©ÛRz´ß Üê¾¹¸´¶šMNß Â]P*…²äúÕ-'×zž°úl²Ee$LSpÀ$à¹Ë@?>kmõT²Õm.µY,–mXÞÄâÙܲ`c¯JÌ»ñ÷Ä(u“º+5¹‰·2’Ûq'·J#«Wþ´C{;Z³þÜØê7Ve÷˜&x·ã¶’3ŽÝ*¾ê³ª^E?ˆ// Û,/tò¦õ;]K’28>”jš·ö£ÄßÙÚu—–Å¿”?Þ俥^Êã{²ðð¾ºÚ`Ô—MÙ˜üÑ t9Lg;s»ö§K'HšÆ+™®ïÞTJ;ðó‘Àç5¹eâm&WE™îÈŠÛHû,çÊs‰1÷qŽyî8©<#©ZO7„´øåÝuk-Ñ™6‘´2±ãð5VÕÿ]Ééëc™½Ð5=*æÞ-RÜÙ,ìM#AêIRzuÇZ³©höš2ê¶´z…·Ÿöy¢*øÏÌ=êö£{¡Ã¤[è1j’ÝDú—Ú..>ÎÈ N„rIêxÏzgН4k«(¢Òu”kKl }=,äN¿yË·ºòi_B­gc—ÝFê‡u©ˆ›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Uí/O„®Ò»$ðvõcè+/ujiWkr[±ÆöÜ9ÆxóøP¼º™$ebBøáÖçÜþµsðØË.¡ö"B¸bº€óë[>d|á¤wi˜ÈœVd7Àj¯txI̞ÌÒaÑ#‰•ãº}™ 6Ù8Ç^ƒmdjsYÞ,L«'1çœ`ûÖ‰’Sk4 BD›ðÆCŸ˜“Óo¿­V¼½ß}nè7}·ýNAÇéC½´muszËÃú5²$WÌgºe,G˜T uÀàzšËÖt«kh÷N•žÕÈXçnz{Š¿?“ªB›¦Í¿ÞÉlc©éŒœŒsÐñjëWØÓͫȯ3íÜTc€AÎ;tåQÄT•D¯«ÝGŠÁÐ >T’Z>æêúÃwfkX‰9%E|纽ïÂ,M¤?îŠõÑóGÊŠ)°ýÁE0uþ¬×˜xóþAwŸõÉÿ‘¯OºÿVkÌxD_ïà”êÖ{DWQùNQ\Àü¬)à÷Töú{\i——Ë*„µ1‚¸ÉmäŽá@wT]Ok2Ím4Ê¿vHœ«ÜȨ)8 úÒÐË’I$’y$÷¤ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(C+–„“KçAQQ@ ˜  zqJ³”èò¨¨  w"P”'®Ö#?‘¨ÚRÄ’zÔtR²½ÇÌÚµôº½ûÂñéû¢¾¯ 0ÿ GþLÃÿÅЕ­ä6ïs’®¢k»Ko hbçL‚ð³\m2K"mùÇMŒ?Z—þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.˜°Ñ¶¥©IiÿÚÒÈÁœÊ“,~PÜ#.¬»žøïÖ²¯ä{Û?°Ékp«lòÁ#!ÛÎpÉÈ'½Cÿ ÇÆôÿɘøº_øV>0ÿ GþLÃÿÅÐÕÝÁhqu>²ºš·ö"ÚŸ³y¸Ø%Ú»<¿Cž¸íœ×œWq¨øƺ¦¡-äú2,’X%Ä@tÇj©ÿ ÇÆôÿɘøºIK•Öÿ±ñ‡ý?òfþ.øV>0ÿ GþLÃÿÅÓ’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*÷ÿǤ?îŠòßøV>0ÿ GþLÃÿÅשxCþ=!ÿtSB=¸(¢¸(¦.¿ÕšóÈ.óþ¹?ò5é÷_êÍy‡ŽÆtÛ±ë#@•bØÓ-qÿ<“ù ŸÌ>Õ‡©Hñø.åãfG]=вœ|¾ Õ$Ô/ôß [My¨X¬òˆÖû,œ®q°9go¦>”€éžácÛ½•w£'>”ÿ0ûWu«ÞkZF—2, y²°hÝc,¡°ÛN ‡šßÓïõ+¹u-.åí¡Ô-B¸†2c*à•m„ç#ŒÓ¶Ÿ×—ù‡_ë»G@“Ú©GÿWc·š?ô¬¿ IrÚ}â]]Ku$WÓÇæÊrHVÀöAÅjEÿ7õÔè CKERQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEɦŽÞ '•¶Ç—vÆpÉ5ZÛSµºŸÈŒÌ$Ú\,nÿë ÿЭUSÊO3ư²ÈÁ†é#åû§Ò€%¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ¤2J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠÏÕô‹[Û+Æ[y/$…‚HÑ®íÛp¿1ü+FÑ.ŸS/ªéÈmÄNM²A¸•ÇžÀó]V.ÿç•¿ýþoþ"Œ]ÿÏ+ûüßüEa<<'57º%Å0EoÅIkÑBø ã|#Ŭ_îŠëä–x|ÑGå¼É!%G® Šä|'Äýn†wÐ}ÁE}ÁE0uþ¬×x¤n8õ8¯EºÿVkÏ|H3qõqüèuüMe§¬6²ÅpÎÇ’Šåõ÷¦Âe§Ï¯ûåøªæ5¿ù ŸúãþŠZήwQ¦a*’M£¸ÿ„ËNÿž7_÷ÊÿñTÂe§Ï¯ûåøªáè¥í$/k#¸ÿ„ËNÿž7_÷ÊÿñTÂe§Ï¯ûåøªáè£ÚH=¬Žãþ-;þxÝß+ÿÅQÿ –ÿœÔ‘ÃEÊ. ¹Žs“D0ljv©bØÏrriÝZÃm †Xôo?ÂøÈüª¼óHe‘ü´‰7»’}†~•n¡–ÖŸt‰’F$d{úЭpMu)Û™|¥ˆKåŒI#àKd÷© º‘ðò*ÀÆ:“ÿÖaí ‘dɧ‘ïëD¶LÛ2qŽ ÛLw]JCÍšHYæ(ÑýŸ‚ßýaBܱÛq"äÅo¸Rßþ¯Ö®5»¾æ'rÇ2:{A³3 %—i÷ùs"’Üϼ®]Ñc,wG°ìz}ÂÌ–oæM½¤…N8ïVRÚ$F@¤« ÌOó¦‹HDf=¤© à±=?WAtWyš9%òÂü¥!#¡?þ±I{æElÝæ.ã p98ÇÒ­›hJ:Ê»nnO'Ö…·‰ §(IRXœgëG2 ¡-Ùš5ä »æzè*¤-$6~xrZvÊ¡±àúÕä‰#Bˆ¸RIÇÖ£p,F0‡aÇOJ.„šJ.¤…åó¨9 ž8¨šæH^f•Ø–=£k/nzúU¸áŽ*‹€y<äŸÆ˜¶.ï“;†Ó¹‹qéÍCº*¥Å¬’;3"ÆXîh Ø òjͤ-olªòÂŽzÓ–Ö£ J°Á Äÿ:|q$I±AÛîIþt6º ´PO2==¦wLr¨@À,xíRÆ…¯%9Dˆ*`ƒ“ÛßµL–"…T8 ÄàŽ”áo™¥ w·^NáÒ‡$7$PŽwH¡E,­6éY•  ì?¿ld6êfÎþs‘ƒŒñŸÂšlà(‹°€Ÿw AŽjeT(è ¦&Ó*jІɋɳi §ËvïX :ÈV'p«Ñ‡Þƒ×hÿ?•t·V±^@b”eO Ž úН&‘g$Bc!c<8'×'ÞªIY— ¤¬Ë‘€#P¤•`“œ­uþ ÿ—ïûgÿ³W"ª¨¡TP0èuÞ ÿ—ïûgÿ³R§ñ ŸÄ޶Š(®ƒ¨(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šåu¿ù`ÿ¯7ÿÐdªþû£ëV5¿ù`ÿ¯7ÿÐdªþû£ëXPÞ~¿¢:±_ ?ð¯ÍÜpQDpQ] ˯õf¼÷Ä_ñóýt_ç^…uþ¬×žø‹þ>bÿ®‹üèíç…ïu’îmÖ9!‹Ùâ5‡µAÿV¥ÿ=í?ï¶ÿâk´²ÿ}¯ýqOýVe¯‰¬îµ¹4Ômùc˜Ÿ–GyGÓõÁôç?g©œ[¹Ï©Ï{Oûí¿øš?á Ô¿ç½§ýößüMvì‚[„‰ùB¬ÄzãŸÎžl­?çÖûö(öq²‰Âÿ©Ï{Oûí¿øš?á Ô¿ç½§ýößüMvÏceøó·ÿ¿Kþ]쬿çÊÛþý/øQìâÊ'#ÿV¥ÿ=í?ï¶ÿâhÿ„+RÿžöŸ÷Ûñ5ÔŘ%šÚ6+î™F~æö*@ü³øÖŸÙ-€ÿQ÷* üÍÎ!ì¢pð…j_óÞÓþûoþ&øBµ/ùïiÿ}·ÿ]çÙm¿çÞûàQöKoù÷‡þø{8‡²‰Áÿ©Ï{Oûí¿øš?á Ô¿ç½§ýößüMwŸe¶ÿŸxïQ\Á VÒKkÆ¥AŽœàûQìâÊ'ÿV¥ÿ=í?ï¶ÿâhÿ„+RÿžöŸ÷Ûñ5ÝÑG²ˆ{(œ'ü!Z—ü÷´ÿ¾Ûÿ‰£þ­Kþ{ÚßmÿÄ×wEÊ!ì¢pŸð…j_óÞÓþûoþ&øBµ/ùïiÿ}·ÿ]Ý{(‡²‰Â©Ï{Oûí¿øš?á Ô¿ç½§ýößüMwtQì¢Ê' ÿV¥ÿ=í?ï¶ÿâhÿ„+RÿžöŸ÷Ûñ5ÝÑG²ˆ{(œ'ü!Z—ü÷´ÿ¾Ûÿ‰£þ­Kþ{ÚßmÿÄ×wEÊ!ì¢pŸð…j_óÞÓþûoþ&øBµ/ùïiÿ}·ÿ]Ý{(‡²‰Â©Ï{Oûí¿øš?á Ô¿ç½§ýößüMwtQì¢Ê' ÿV¥ÿ=í?ï¶ÿâkoÃÚ%ÎöŸ´•oqªÃ¨J]ä†&Š8Ûâ lc9à½)‰áÝF]SÃó[èÅ-Ý£µ±»”>>ëð~l©¯\ÓIÁÀ#z×C\Ü:v·ˆ.5 `Ó®¾Èd{— ?ÝUòÈõ<ò{àS[‡C¤¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¦¿ju5ûP(¢ŠC (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€9]oþF˜?ëÍÿô*¿†>èúÕoþF˜?ëÍÿô*¿†>èúÖ7Ÿ¯èެWÃOü+ógwÜQÜWAÈ2ëýY¯=ñü|Åÿ]ùס]«5ç¾"ÿ˜¿ë¢ÿ:äkÿ\SÿAõ‚%æXÐJà+8^X€ŸÄÓ,¿äkÿ\SÿA=5ãö?úæÿÍjÁªëÿ±ÿ×7þkV Dý*«u«OÒª·Z@T–7’ê-w:Å…Î3¶Gl~•)»<¥È=ÇÙ¤?ÉqM Vú}§Å ƒé—qŸÖ´~É´¤úù¬?‘ fwÚ¢þíÏþËÿÄÑö¨¿»sÿ€²ÿñ5£öH}eÿ¿­þ4}’/Yïë3þÕ÷nð_þ&™4¿i·’Þæ/*”ËBè‚I`:VŸÙ!õ“þþ·øÔw¬<ѳƒ–Ã9`@íÉ  (¢Š`QEQEQEQEQEQEQE×íN¦¿jeQHaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP+­ÿÈÓýy¿þƒ%WðÇÝZ±­ÿÈÓýy¿þƒ%WðÇÝZ†óõýÕŠøiÿ…~lîàû‚Š û‚Šè9]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@Õ—üƒíëŠè"§¨,¿äkÿ\SÿA=5ãö?úæÿÍjÁªëÿ±ÿ×7þkV Dý*«u«OÒª·Z@Uc‹é?ݶÿÑ­[Ö4§’}-ôsV›IÍKš3UüÚ<Úä4ýz÷J]Zâ{6›§*Ér.>xÁ`8LrG» Öÿ‰uÉÿ¦-üsᛉMݳê£û6êèÜKn¶øvÉ®ýÝ8ôÍt7¯ÿÛ¿h_ÿA4ú/ë =Ùf°îµ»ËRÚÞçMUµ¹ŸÈŠd¸ äœà”ÇN=N+r¹MNÂ÷QÖí§ƒE6—0\)þÒ3§1)äaNã¸d`ŒsBÝFutQEQEQEQEQEQEQE×íN¦¿jeQHaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP+­ÿÈÓýy¿þƒ%WðÇAõ«ßü0×›ÿè2U tZ†óõýÕŠøiÿ…~lîàû‚Š û‚Šè9]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@Õ—üƒíëŠè"§¨,¿äkÿ\SÿA=5ãö?úæÿÍjÁªëÿ±ÿ×7þkV Dý*«u«OÒª·Z@S˜1¹œª–)»£$…‘ÉÇà*VÔ,ÉæòÜF•A4+”¿œ¨Œ0¨Ï©wùÕÿ³>>k™3ß@þT Îû}—üÿZÿßåÿ>ßeÿ?Ö¿÷ùÆ´~ÌçæoÉøš>Ìßóó7ä¿üM3¾ßeÿ?Ö¿÷ùÆ™qwö²ÛÛÏÒ̆5XÜ1ÉÉÇ@:æµ>ÌçæoÉøšdѽ¼M0™œ ÜÊàr;ãs@É(¢Šb (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ kö§S_µ2Š(¤0¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(•Öÿäiƒþ¼ßÿA’«øc úÕoþF˜?ëÍÿô*¿†z~5… çëú#«ðÓÿ üÙÝÁ÷A÷Ðr ºÿVkÏ|Eÿ1×EþuèW_êÍyãæ/úè¿Î€;«/ùÚÿ×ÿÐEOPYÈ>×þ¸§þ‚*zjÿÇìõÍÿšÕƒU×þ?cÿ®oüÖ¬‰úUVëVŸ¥Un´€ªN/¤ÿvÛÿFµ\ÕuH4‹»¸2T Ë31îIJC‹Ù>–¿ú5ª}^).ôé`ŽÚÖä¾Šè‘ óœü¨cuÔŠ+7¹²»¶{«‘l‘Êr±‚pÄcƒÐš‚óÅ6–’OÙ®¦–”µòâU%Ý—pÛ–=ñXñøSHŠ1sº¶¾vÑ4$Q¨ò÷»'œqž”±èZœ×fîé¬ÒWÔ¢¼tŠFe‘ìÀ%FOà)­ÿ¯/ø"þ¿?øäñ¥£2iÚ”1Ç0‚yd‰BÁ! Øl÷ŒŽEo^Ÿø—Üÿ×&þF¹›ÍîâÇ[$€5ýÚO,pDyÝÇ_ôÏjè/_þ%·õÅÿôBØ:–+%uß3TšÆ 6úa«³ ËR@nî‡jÖ®:ù×ô{MZ÷¼Cpåd[i¶ã°ü£‚9éBÜÇcEPEPEPEPEPEPEPM~Ôêkö QE†QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQErºßü0×›ÿè2U ôüjÆ·ÿ#Lõæÿú •_Ã=?†óõýÕŠøiÿ…~lîàû‚Š û‚Šè9]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@Õ—üƒíëŠè"§¨,¿äkÿ\SÿA=5ãö?úæÿÍjÁªëÿ±ÿ×7þkV Dý*«u«OÒª·Z@R¸;n&sÑÙØú+ jùËËÈ<‚*?ä%?ýp‹ÿB’žtÛbÍelIêLKþíýÓFÇþéü©¿ÙšüøÛß•ÿ ?³4ÿùñ¶ÿ¿+þíýÓP_6Í>t?zT1 õfT¿ÙšüøÛß•ÿ |V6>øm`Çñ$`Ò€'¢Š)€QEQEQEQEQEQEQES_µ:šý¨”QE!…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@®·ÿ#Lõæÿú •_Ã=?éµ xZÚyÚÌË ¨Üþ'ó®gÃ=?Μ9\¼ÝÍ«USQK¢·æwp}ÁE}ÁEj`2ëýY¯=ñü|Åÿ]ùס]«5ç¾"ÿ˜¿ë¢ÿ:äkÿ\SÿA=Aeÿ û_úâŸú©è«ÿ±ÿ×7þkV W_øýþ¹¿óZ°h'éU[­Z~•UúÒ;ù Oÿ\"ÿФ¥ÔµK=&Ý'½‘‘Äk¶6rXô(&’ù Oÿ\"ÿФ¬FòÛi1Ç3Bí©ÀE•<ò~bŸd>æÕ†§m©ÆïmçmCƒæÀñÀ8«uÉø‚ÁŦ•gw& “jq‡óÑrß)#JÊñ-½¾¹¥ËØYé)fØ]Àï ¾ã»n×P¯¸Ïn”_…Åý~6=œk?NÕà¿Ñ#ÕXy2yû g9?…qòÃaíŒ~%»[»ÓZÜΉäÉÜO<>ݸÏ5»áIâ±ð%•ÄĤ0Û´ŒHè “ü¨{7ýuºFޝiº¬ÒCgpZXÔ;#Æñ¶ÓЀÀd{Ž)/Ç´uAÜ쨤BJ)eÚHäzRÐEPEPEPEPEPEPM~Ôêkö QE†QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW¿ÿ}Ïýroå\·†z~5ÔßÿÈ>çþ¹7ò®[Ã=?î û‚Š û‚Šbuþ¬×žø‹þ>bÿ®‹üëЮ¿ÕšóßÇÌ_õÑwV_òµÿ®)ÿ Šž ²ÿ}¯ýqOýTôÕÿØÿë›ÕjÁ]ãY :‚üj3n‡øçÿ¿ïþ4aÁÇJ®êsÒÚFå¥Çþ?øÓMŒGþZ\ÿàLŸüU #·çR¸ÁÎ!‰O±Ëœ~D~uv«I%®™lÒ;,Qç$“’Äþ¤ŸÎ©ÿÂCcýÛÏü›ÿ‰¤çèÙq§9kÙ«EeÂCcýËÏü›ÿ‰£þî^àßüM/kè¯aWù_ÜjÑY_ðØÿróÿ¦ÿâhÿ„†Çû—Ÿø7ÿGµ‡t¯ò¿¸Õ¢²¿á!±þåçþMÿÄÑÿ ÷/?ð oþ&kè=…_åq«EeÂCcýËÏü›ÿ‰£þî^àßüMÖÐ{ ¿ÊþãVŠÊÿ„†Çû—Ÿø7ÿGü$6?ܼÿÀ)¿øš=¬; ö•ýÆ­•ÿ ÷/?ð oþ&øHl¹yÿ€Sñ4{XwAì*ÿ+ûZ++þî^àßüMðØÿróÿ¦ÿâhö°îƒØUþW÷´VWü$6?ܼÿÀ)¿øš?á!±þåçþMÿÄÑíaݰ«ü¯î5h¬¯øHl¹yÿ€Sñ4ÂCcýËÏü›ÿ‰£ÚúaWù_ÜjÑY_ðØÿróÿ¦ÿâhÿ„†Çû—Ÿø7ÿGµ‡t¯ò¿¸Õ¦¿jÌÿ„†ÃºÞàßüM]†æ»tžg ?#MN2Ù“*s޲M¢Š)’QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW¿ÿ}Ïýroå\·†­u7ÿò¹ÿ®Mü«–ðÏõ ê¸(¢¸(¦!—_êÍyãæ/úè¿Î½ ëýY¯=ñü|Åÿ]ùÐueÿ û_úâŸú©ê /ùÚÿ×ÿÐEO@Q@Q@z¯üè÷Ûöœ•oBºšóO–[‡Þëyu8åIäEz*øUMWþB/ý~ÿí)*_ ÿÈ*û_éTµø¤k?‚?×SbŠ(«2 (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ÂÓ¿ãïV…ñÀÿ¶qŸæMnÖÿš¿ýýg/‰Ãà—õÔ¿EU™…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ïÿäsÿ\›ùW-á¯ë]Mÿüƒîë“*å¼5ýhºƒî (ƒî )ˆe×ú³^{â/øù‹þº/ó¯BºÿVkÏ|Eÿ1×EþtÝYÈ>×þ¸§þ‚*z©iÿ6ßõÅ?ôSR-ÄKEEERÕ£“̰¹HÞEµ¹ódXÆæÛ±—ßï*+NËO·xbµÕYZif%ìe't’4ü=2ÇÕ¥EfâïtÍTãd¤¯b¿ü$6ßóç©ÿà¿üMðÛÏž§ÿ€ÿñ5bŠ->ÿ€sSþ_Çþ_þoùóÔÿð_þ&øHm¿çÏSÿÀ øš±EŸÀ9©ÿ/ãÿ¯ÿ ·üùêø/ÿGü$6ßóç©ÿà¿üMX¢‹O¿àÔÿ—ñÿ€Wÿ„†Ûþ|õ?ü—ÿ‰£þoùóÔÿð_þ&¬QE§ßðjËøÿÀ+ÿÂCmÿ>zŸþKÿÄÑÿ ·üùêø/ÿV(¢Óïø5?åüàÿá!¶ÿŸ=Oÿ%ÿâhÿ„†Ûþ|õ?ü—ÿ‰«Qi÷üšŸòþ?ð ÿðÛÏž§ÿ€ÿñ4ÂCmÿ>zŸþKÿÄÕŠ(´ûþÍOùøøHm¿çÏSÿÀ øš?á!¶ÿŸ=Oÿ%ÿâjÅZ}ÿæ§ü¿ü¿ü$6ßóç©ÿà¿üMðÛÏž§ÿ€ÿñ5bŠ->ÿ€sSþ_Çþ_þoùóÔÿð_þ&øHm¿çÏSÿÀ øš±EŸÀ9©ÿ/ãÿ¯ÿ ·üùêø/ÿPé±Éþ™s$oº¹i‘a‚íU‰Ûœ{Õê(Qw»`ç5k…QVfQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW¿ÿ}Ïýroå\·†¿©®¦ÿþA÷?õÉ¿•rÞþ¦€;¨>࢈>࢘†]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@µ§üxÛ×ÿÐEMPÚÇ·ýqOýTÔ†QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW¿ÿ}Ïýroå\·†¿©®¦ÿþA÷?õÉ¿•rÞêÞ4ÝA÷A÷Ä2ëýY¯=ñü|Åÿ]ùס]«5ç¾"ÿ˜¿ë¢ÿ:í­?ãÆÛþ¸§þ‚*j†Óþçþ¹7ò®[Ã}OûÇù×Sÿ ûŸúäßʹo õ?ïç@ÔpQDpQLC.¿ÕšóßÇÌ_õÑz×ú³^{â/øù‹þº/ó ÚÓþçþ¹7ò®[Ã}OûÇù×Sÿ ûŸúäßʹo õ?ïç@ÔpQDpQLC.¿ÕšóßÇÌ_õÑz×ú³^{â/øù‹þº/ó ÚÓþçþ¹7ò®[Ã}OûÇù×Sÿ ûŸúäßʹ ýãþñþtÜÁ÷A÷Ä2ëýY¯=ñü|Åÿ]ùס]«5ç¾"ÿ˜¿ë¢ÿ:í­?ãÆÛþ¸§þ‚*j†Óþbÿ®‹üëЮ¿ÕšóßÇÌ_õÑvÖŸñãmÿ\SÿA5Ciÿ6ßõÅ?ôSRQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE^ÿþA÷?õÉ¿•rþûÍþñþuÔ_ÿÈ>çþ¹7ò®_ß}¿Þ?΀;˜>࢈>࢘†]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@µ§üxÛ×ÿÐEMPÚÇ·ýqOýTÔ†QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW¿ÿ}Ïýroå\¿‡>û¼uÿò¹ÿ®Mü«—ðçßo÷󠿏(¢¸(¦!—_êÍyãæ/úè¿Î½ ëýY¯=ñü|Åÿ]ùÐMq.«…Òí¢Ÿ0¯™æc ¸þ!ïU>Õâ¯úZÿßCÿ‹­%ƒÍQ"Â@np· £òRý•¿ç›ÿàSÖ¤äïÌ×õètº„yyõ¿ù™ŸjñWý-ï¡ÿÅÑö¯Ð2×þúü]iý•¿ç›ÿàSÑöVÿžoÿOKØ?ç‡ùõ¥ÿ>ã÷?ó3>Õâ¯úZÿßCÿ‹£í^*ÿ e¯ýô?øºÓû+Ï7ÿÀ§£ì­ÿ<ßÿž`ÿþäZ_óî?sÿ33í^*ÿ e¯ýô?øº>Õâ¯úZÿßCÿ‹­?²·üóü z>ÊßóÍÿð)èöùßáþAõ¥ÿ>ã÷?ó3>Õâ¯úZÿßCÿ‹£í^*ÿ e¯ýô?øºÓû+Ï7ÿÀ§£ì­ÿ<ßÿž`ÿþäZ_óî?sÿ33í^*ÿ e¯ýô?øº>Õâ¯úZÿßCÿ‹­?²·üóü zrÙ–8ØÃëu%Áÿ;ü?È>´¿çÜ~çþfWÚ¼Uÿ@Ë_ûèñt}«Å_ô µÿ¾‡ÿZñÚÃ$Hù˜nãÏñ§}ŠïMÿßühöùßáþAõ¥ÿ>ã÷?ó1¾Õâ¯úZÿßCÿ‹£í^*ÿ e¯ýô?øºÙû?Þ›þÿ¿øÑö(½7ýÿñ£Ø?ç‡ùÖ—üûÜÿÌÆûWŠ¿èkÿ}þ.µx«þ–¿÷ÐÿâëgìPÿzoûþÿãGØ¡þôß÷ýÿÆ`ÿþäZ_óî?sÿ3í^*ÿ e¯ýô?øº>Õâ¯úZÿßCÿ‹­Ÿ±Cýé¿ïûÿb‡ûÓß÷ÿ=ƒþwø}iϸýÏüÌoµx«þ–¿÷ÐÿâèûWŠ¿èkÿ}þ.¶~Å÷¦ÿ¿ïþ4}ŠïMÿßühöùßáþAõ¥ÿ>ã÷?ó1¾Õâ¯úZÿßCÿ‹£í^*ÿ e¯ýô?øºÙû?Þ›þÿ¿øÑö(½7ýÿñ£Ø?ç‡ùÖ—üûÜÿÌÆûWŠ¿èkÿ}þ.µx«þ–¿÷ÐÿâëgìPÿzoûþÿãGØ¡þôß÷ýÿÆ`ÿþäZ_óî?sÿ3í^*ÿ e¯ýô?øº>Õâ¯úZÿßCÿ‹­Ÿ±Cýé¿ïûÿb‡ûÓß÷ÿ=ƒþwø}iϸýÏüÌoµx«þ–¿÷ÐÿâèûWŠ¿èkÿ}þ.¶~Å÷¦ÿ¿ïþ4}ŠïMÿßühöùßáþAõ¥ÿ>ã÷?ó1¾Õâ¯úZÿßCÿ‹£í^*ÿ e¯ýô?øºÙû?Þ›þÿ¿øÑö(½7ýÿñ£Ø?ç‡ùÖ—üûÜÿÌÆûWŠ¿èkÿ}þ.µx«þ–¿÷ÐÿâëgìPÿzoûþÿãGØ¡þôß÷ýÿÆ`ÿþäZ_óî?sÿ3í^*ÿ e¯ýô?øº>Õâ¯úZÿßCÿ‹­Ÿ±Cýé¿ïûÿb‡ûÓß÷ÿ=ƒþwø}iϸýÏüÌoµx«þ–¿÷ÐÿâèûWŠ¿èkÿ}þ.¶~Å÷¦ÿ¿ïþ4}ŠïMÿßühöùßáþAõ¥ÿ>ã÷?ó1¾Õâ¯úZÿßCÿ‹£í^*ÿ e¯ýô?øºÙû?Þ›þÿ¿øÑö(½7ýÿñ£Ø?ç‡ùÖ—üûÜÿÌÆûWŠ¿èkÿ}þ.µx«þ–¿÷ÐÿâëgìPÿzoûþÿãGØ¡þôß÷ýÿÆ`ÿþäZ_óî?sÿ3í^*ÿ e¯ýô?øº>Õâ¯úZÿßCÿ‹­Ÿ±Cýé¿ïûÿb‡ûÓß÷ÿ=ƒþwø}iϸýÏüÌoµx«þ–¿÷ÐÿâèûWŠ¿èkÿ}þ.¶~Å÷¦ÿ¿ïþ4}ŠïMÿßühöùßáþAõ¥ÿ>ã÷?ó+éRjÒù¿Úv±CŒy~Y=sŸ˜ûVŽÓéU¾Å÷¦ÿ¿ïþ4}ŠïMÿßükXÇ•Z÷9ç.ysZÞ…§Ò§Ò«}ŠïMÿßühû?Þ›þÿ¿øÕYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿ. Óî?ë›Ò¹o}öÿxÿ:êVÎÀþñ°s†•˜~D×-áϾßïç@ÌpQDpQLC.¿ÕšóßÇÌ_õÑz×ú³^{â/øù‹þº/ó ÚØ…´Œ’ &©®¿¥½Ûè<aˆ2#1f€'ð¨5;kÛÍ*Þ DŠDf_=$”ǽ?»SŒñÓ5a¬>£ê\ÁLÚ„‘ľw˼ž„0£};R_×à7ý~'Sek¨Ûùö’‰#ÉRpAuAö5\kÚi¿_iýùsÊ0RßÝ ¹öÍRÑï4ËK0WQ†æ[»’$–/™ZfÀÆp08Ï¥TŸV°Õ5ÕµžöÞ,®ØÚ@i‡N;('ñ>Ý_Qt¹³ý¹¦ý»ìivÿ/î6ÝÿÝÝ»½³šžöþ×N·óîæX£ÈPOR}“ì+“¼·‘®ÿ²4ëØ®ï„òÄ %íþpíº@ØŽç«®°´Öt­FáXÙ@dY)"&`6±·g¶i-ú²òëúkYOwçºÃ<Âðº•ÏO”ŒŸÊŸe¬Øj´ó7œ«¸Ç$Mc× "¹ÍoZMWHÖã¶–)- Ž“GÎIo›žœ`Tšlé?Š­ä¶Ô›V_³ºI)UŸàŒ~cÆ1ž)­Áìo6¬ŸÚfÂ+k‰6ù²F«²-Ý7G×€kB¹Û+[k[Å$д>\Œ ²|jȆËÊð]ØÂòp<ùQIwO3æÎ9,çð¬].+½^±ŽâÊ K[¸§î® »¥@J±Ê. ‡|ñIký_ÓÑ_×ü1ÔCªØÜê3XAr’]@¡¥9Ø Ç'¦}ºÕÊçm`‚×Ç+ QÄŸÙÈÅQBŒ™\“YÞ#ÕtýJ8§µ…ÊÈëy¨DÆ5+´ ®äõ#¥þº‡V¿­ŽÎŠæü7-Äžµq$Ï8‚´[KœÝü€1ž)twÕPQtÚÑ‹iÏÚâµXóîcù©µ­…}._»ñ•cyöK›¿.PU[÷lUIè€Ú¹ÈêEjW#âcO¼ÔŸA»¿¶´µŒ#ݼÒi?ˆF¹õÀ$öwã­R¬ ©HÈ#Ò’Úã{ØZ(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ãü9÷Ûýãüë°®?ß}¿Þ?΀;˜>࢈>࢘†\ÿ«5çþ"SöˆÏý4νq”5Çë¶eþ`2AÍtvªße‹å?tv©v·÷Oå^wâÛûf ioøTuägÿ}ð¤3Óö·÷OåFÖþéü«Ì?á>Ô¿ègÿ}ð£þíKþ€6÷Ñÿ ôý­ýÓùQµ¿º*óøOµ/úÙÿßGü(ÿ„ûRÿ  Ÿýô€=?ktþTmoîŸÊ¼ÃþíKþ€6÷Ñÿ ?á>Ô¿ègÿ}ð OÚßÝ?•[û§ò¯0ÿ„ûRÿ  ŸýôÂøOµ/úÙÿßGü(Óö·÷OåJªÛ‡¯¥yü'Ú—ýlÿï£þÂ}©ÐÏþú?á@•oÿѸ?•I^h>"êà4kp@$oð¥ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ Uø‹¬1Çö=¸ÿ¶þé5ÈøupíþñþuVÏÆ:­ÑØ[¦}ØÖÖ‡hcPHæ<pQNˆaEÀVBêÌJEhÒ r× rv ª|5?p~UØìµZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•ðGýÁùWe寥ZúPÿÔÜ•(ðÔ`ýÁùWc寥ZúP7m¡¤DaElÛZˆ€À«aíN À¢–ŠÿÙnip2-8.7.0/doc/html/figs/ir3.jpg0000644000175000017500000002567013341773367013207 00000000000000ÿØÿàJFIF``ÿÛC  !"$"$ÿÛCÿÀÌû"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?úÃÄ_ñìÿJñý8ñcEcÑnÿã^Áâ/øö¥y—Mñ?N×r`ÃÔƒüé0G™sgãéõ‹S Xê6kà/†Ib'Ë`;‚¬ÀúmÐ3!R ¯#j…ͦnÍ·P[î¨g$ý95Ýþ|æÿ¿3ÒébºÜ©oá‹{? Øèn·ªXEeÄÇç0ç†Ü…Hçû¾”Ë? ZÙi6ZÞ­o=ÕÇÚ.¯Ötk™ßÌÈ@| `ŒUíº'üùÍÿ~g©­¬ô{…&e;NpGÔ‘Eïp1φ…¾c Þ=•­¾£öË÷7.eº[!Û«–r¹ÜqìuÓûëùÖ<ÿØqLÑ}ŽY]B’É´ú¹Å3~‹ÿ@Ëïü¸ÿ wŠ7þŽÞkÖ¾'Ö´û›¸ãŽE·krp«æDÄ ’qž¤ÓµïÛërÊ·þ"ÖžÆ`¢{¸`” ¼Ž@`M\ߢÿÐ2ûÿn?Âú/ý/¿ðãü) ©â ZërÈ—zö°š|ÁV]:„KwPÚ~Màr Ôš•<^+ÕõËï&?5"³±;-ãÉÉô,ÌÇ€>ýþ—ßø qþ4%æK˜—»Éè£êO„ì+{Óûëùѽ?¾¿UþËÓ¿çÑï·ÿ?²ôßùô_ûíÿÆ–·§÷×ó£z}:«ý—¦ÿÏ¢ÿßoþ4eé¿óè¿÷ÛÿZÞŸß_Ϋj––Zž›s§^ªËmsE*nÆåa‚2='ö^›ÿ>‹ÿ}¿øÑý—¦ÿÏ¢ÿßoþ45};þŸà. …›PÕ5=g˵{8Rþde†':€ª¹$ lœµ'‡<¦è·ð^ KQ¿{[smf·“«­¬GTÂŽ»Te²pÍneé¿óè¿÷ÛÿÙzoüú/ýöÿãNïëúÕýìVV±kz}:Æñ6e®Igp÷·V7¶.Ïmwi"¬±îaóRê5û/MÿŸEÿ¾ßühþËÓçÑï·ÿC0“Â6ÖÚM¾¦kúÆš"y$–kyã2\<‡.òF‰ÉÈâµ¼9¤éú‘™`ÎbŒ³–Mï#³gf=X’IúÔÿÙzoüú/ýöÿãGö^›ÿ>‹ÿ}¿øÓkz}:͵Òl­üE{®¬ò=Õä@ÊÌ "FX€£.IÉ=ªÇö^›ÿ>‹ÿ}¿øÑý—¦ÿÏ¢ÿßoþ4†TÖ´=3U–Â[‘¬nÖî?/hÜêÙ#æ>ŸZÕÞŸß_Ϊÿeé¿óè¿÷ÛÿÙzoüú/ýöÿãGK™kz}:7§÷×óª¿Ùzoüú/ýöÿãGö^›ÿ>‹ÿ}¿øÐ­éýõüèÞŸß_Ϊÿeé¿óè¿÷ÛÿÙzoüú/ýöÿã@ø‹þ=Ÿé^Q ÿÉP±úŸæ+ÕüEÿÏô¯)Ðä¨XýOóÙ(ô¬ƒâ rÚ23Û-&üª½~ÎÞóìëÚì9£6;ôüO“¾ßOÿ^ÿèr×=¬­‹ÜK-µü+&æ €ÎŸ˜©ÎWÕ¸=ÈÁæ’;xå‚X–Hö28 ¬:z¦åF·Àûiwc¾<~[ç\œw³A#Å ÞXŠ3µ·tWã:vþ÷¾z +´jÖ2ídße+íaÈËEÁ¦ÀÔð¬±A¡Ï<Ò$q¥ÍÃ;»·$Ÿj³á¯hÞ%ÓßPЯ㾴Yž4`í.‡ ‚G#ÜdÆ©ørÒÖûóÚ^ÛCuo-ÍÂÉÈy­Á‚+•øs«i^ð§‰5 Ne´±‡Ä·Ñ–XÙ‚î¸Ø *‚z:SŽ­¯/Õ/ÔRÑ'çoÁ¿ÐéµÿøWAÕ“JÕµt·ºeFeò¤uˆ1™T¬`ž…ÈÍÿŽ|)¡jɥ꺺[Ý2£0òÖ%s…2:©XÁ= ‘šóOj6:=ÇÄÍVGþÒñHt˜|¶f¾ l±"GóŽÙÍQÔ®aðæ‘ãÏ ø„;kZÕ„ §Eå–{òlÒ±à|ÅdVÈíœÒOKù}þKÍußÐv÷’þ—Ÿ£=g_ñÏ…4-Y4½WWK{¦TfSºÄ®p¦GU+'¡r3]t*À2°Á¢¼R¹‡ÃšG<7âí­kV&–YïɳHBÇó‘[#¶s^Ýáë{‹MNµ»m×Úŧ9Ë…þµvV×õn¤)7m7ÿùô2ô"[CÓÙŽIµˆ“ÿkz}:Ê·¶šóÁ°Z[Ü5´ÓiÉL½cc‡Ó­y£|0ñ 1%<8Ä÷grOÔ˜IüÍpbkÕ¥ogO›æz˜,% 麵T-Ý^ç°oOï¯çFôþúþuãßð«üAÿ<¼5ù·ÿ£þˆ?ç—†¿6ÿã5ËõìOüøü»û/ÿAKîÿ‚{ôþúþtoOï¯ç^=ÿ ¿ÄóËÃ_›ñš?áWøƒþyxkóoþ3G×±?óáýÿðû/ÿAKîÿ‚{ôþúþtoOï¯ç^=ÿ ¿ÄóËÃ_›ñš?áWøƒþyxkóoþ3G×±?óáýÿðû/ÿAKîÿ‚{ôþúþtoOï¯ç^=ÿ ¿ÄóËÃ_›ñš?áWøƒþyxkóoþ3G×±?óáýÿðû/ÿAKîÿ‚{ôþúþtoOï¯ç^=ÿ ¿ÄóËÃ_›ñš?áWøƒþyxkóoþ3G×±?óáýÿðû/ÿAKîÿ‚{ôþúþtoOï¯ç^=ÿ ¿ÄóËÃ_›ñš?áWøƒþyxkóoþ3G×±?óáýÿðû/ÿAKîÿ‚{ôþúþtoOï¯ç^=ÿ ¿ÄóËÃ_›ñš?áWøƒþyxkóoþ3G×±?óáýÿðû/ÿAKîÿ‚{ôþúþtoOï¯ç^=ÿ ¿ÄóËÃ_›ñš?áWøƒþyxkóoþ3G×±?óáýÿðû/ÿAKîÿ‚{ôþúþtoOï¯ç^=ÿ ¿ÄóËÃ_›ñš?áWøƒþyxkóoþ3G×±?óáýÿðû/ÿAKîÿ‚z÷ˆ¿ãÙþ•å:ü• ©þb½[Ä_ñìÿJòmºüK´hÔ;€ÅW8ÉÈÀ¯YŸ>Ž÷Z•lµ·º¹a¼¶È‹+ eg$Û‡Ï^k6ŒoâMjÁóO9pAcï´yÿë×M£F×éu-ð•e[†M©pÀ(`|§{û6×þž?ð"Oþ*‘G³šüOnF<£z¸çç9#ƒÇ¹öÆö‡2_k ujÂ[h-Þ3*œ£3²Ðà!Î:dV¯öm¯ý<àDŸüUÙ¶¿ôñÿñTº%äze¤–·q]‡ûD²¬’++9`rŠG|cÚ¯ÿnXÿÏ;ÿüÏÿÄVöm¯ý<àDŸüUÙ¶¿ôñÿñT\V4?·,çÿþ çÿâ(þܱÿžwÿø/Ÿÿˆ¬ÿìÛ_úxÿÀ‰?øª?³méãÿ$ÿâ©Ý…íËùçÿ‚ùÿøŠlšå®Æò ¿’L|«ö—qì2Êú’Qþ͵ÿ§ü“ÿŠ£û6×þž?ð"Oþ*‹°±&™Zé¶¶ÎAx`HØŽ™Uÿ*±Tÿ³méãÿ$ÿâ¨þ͵ÿ§ü“ÿФ2åOû6×þž?ð"Oþ*ìÛ_úxÿÀ‰?øª¹ESþ͵ÿ§ü“ÿŠ£û6×þž?ð"Oþ*€.QTÿ³méãÿ$ÿâ¨þ͵ÿ§ü“ÿŠ  ”U?ìÛ_úxÿÀ‰?øª?³méãÿ$ÿâ¨åOû6×þž?ð"Oþ*ìÛ_úxÿÀ‰?øª¹ESþ͵ÿ§ü“ÿŠ£û6×þž?ð"Oþ*€.QTÿ³méãÿ$ÿâ¨þ͵ÿ§ü“ÿŠ  ”U?ìÛ_úxÿÀ‰?øª£¬ÆÖ k-ˆ•¥k…M¯pÄ0 ä|ǵEQóµOúGÿ þ4yÚ§ý£ÿÀ…ÿ³â/øö¥yNƒÿ%BÇ꘯Vñü{?Ò¼§Aÿ’¡cõ?ÌSd£Ñü=÷/ëíÿ’Ö¥eø{î^ÿ×Ûÿ%­JEp—>&ñߎ5é·Ÿö3—¢²4÷ŠÊ¼{Y@Q’¹¹8®î¼§âMæ§®µþ„t˜ÓÌ) ëèÚŒ“[Áxö[”f¬®ãµ pèv·~*·‹_}ÏKÔõ;ˆ6 ¹-"C¶þW{3/8ç “ŽÔ]øª-~ßJ¾Ò5[Xîgû=½óÇ·–B rÃ88Ê‘YZ^“â-7X¹Õ4'°¼°ÕÄÜ.¥æÛϬj…€ØI%T¬ƒ‘XkðóWÿ„¢ÛPš 'YþÐ:£Í'Û^-ÌD%J€qN6æIí×ðÿƒb[|­õÿ€ÿ¯êæ·‡üSýŸ¦k:¤——ÒŸ\YYÁï–C»ä p<“]/†uû]v+¯*ÚîÎæÒo&æÖéËà0ÎÒAAƒšâõ‡š…õô6“r«®¶­eÒ3Å0pCÅ2ãÉÁ\ö8®¯Àú/ö.4o¢hšD²Ë¹¢Ò²c`’QI={Qµì¿%ÿúÝËâÓ»üßü ¢Š) (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+7]%û o»i»LኞÜsZUç_´Už£¨|/º±Ò,ZúúâêÞ8`‡ÞLª:0:äð1“Ò3Ñ5Híl康yU¡C! +8`H “ØV«®½ü–Â`˜äŸPõªþѵo ü ¶ÑuËß¶j6š|«4¡‹ÌÔ(!AôZÃñt»|Ct¹é³ÿ@Z#¼ñü{?Ò¼§Aÿ’¡cõ?ÌW«x‹þ=Ÿé^Q¡>'ÙÓ'ùŠlHô}Ëßúû䵩Y~ ¥é?éoü–µ)Q^_­ø‡Pÿ…ƒ­éSx£ZÒímÛìÑiú:Ý‚] bÍäHG8ÆHïG[´¹êWs㑦ø¶ÏÃ×±éÓ-ÅÂÚ¤±jh÷AÊä4–áPHÆA8Èâ±´¯ÉáÝ/T”Û¥Ô·~)º´ˆÜÝyÆI$†Ú>\Iš×úóKõÓúòoô=BŠãéÛ‚3žzô®EŸS¸±jÖXÜ– à É@ìw_åBÕ\/­¿®åÚ(¢ÂŠ( Š( Š( Š( Š( ²üBv¥‘ÿ§´þMZ•â£"ÛZR7µ¦ä(§ƒÔ€qùPíj_øê_õé/þ€kÎ|s.ßÞ.zlÿл«„Ô/!kYã³¶‚A¶fŽå¤bÔŠGÏéUu_ iZ–¡-íÄÒ‰$Æà¬¸àéíCmø‹þ=Ÿé^O£"Ëñ.Ò'G ¬=A õdzý+Êtù*?SüÅ6J=ÃG ‘Ä›nß$ãëZÕ—áï¹{ÿ_oü–µ)ÄÙÿji~0×õXü/®Þ&¢Ð¢ùmdªJT0-r†ÎyU#¸®ÚŠ`yý·Ã먵iZtèucª­»éàÜy…™Š4ÁðFXÿ 8ÀÏ <%ªZÛêÖÚn·f¶úûÝ´Wš`¸Uóp'1Óšì(¤´Vþº’·þºÿ›8H>µ–•¢E¥ëFßQÒË̶‹$N’¶çŒÅ¸a3 0ÛÍuúcËá÷Òµ™`¿3Dñ\´py)"¶A2qÁÇSZtSz¦˜-5G# økÄZJÛX-Öm„H'Ó”ÎÑ”8Ž3³5WMðͳi¶ { J¹6V&Ô,”“¼»¾uRxAàdœWqEw¸¬­c‰›À’¼6úÛÁ1ÕŽ­a/ÙƒY˜êÜâD9#/¯zsøíšN·¯¬Iw©kYšò(B/+ ‘äà)䜒y®ÒŠ]-ýtÿ$>·þ»œ ç€uMMu9uŸÃsu}omn%‡Nò•|Á•óI$Ž£é]õS¾–‚Š(¤0¢Š(¢Š(¢Š(¢Š(¢Š(¬,-kh·|£v›·6CÞ¶+ñõíÖ¤Û]YYÛ‘{ EG½™¶Œ±æÉ8<N×v/ýŸBô¶ÿ¿çÿŠ£ìú¥·ýÿ?üUWð—ˆçÖ…ýµå›éúŽqä]ÛyÞj©*Y\¹JAÀ=x­Ýïýöüè°\ƒÄ_ñìÿJòþJ…Ôÿ1^­â/øö¥yNƒÿ%BÇ꘡‰áï¹{ÿ_oü–³µ/øgK×o´mWQK ›;5¼sqò#Äs’‡øˆÇ sÏ­}Ëßúû䵉<+áßKg.»£Úêe'™nf\ì?Ô ©È8Š3¼y¬x†å¼Mx.4ý.XÊiš{|¬ñ’Ÿ0þó`m_á^¹'Ž[ñ&«¢ë:»¶—íÈiËk˳CmbŒç'Î+Ò뉸ðŒú®­âíKhíìµc3[j&IOÃËýÛ@¡29oðx´Õ¯¨#žñÆ¿âxt}sBÔ§°MFÞ;«k»’$d’ä!VRä‚ œá¹µlø¯ÅZJÒ'–Â}RûΑî¡Ó.e†(£Ûÿ,#g‘˜–;€ê}mëþÒu»«û‹Ù.·_YGg Ž@¡9 ŠëÆC†lç$p8¨n¼Õµ—Ÿ¯ko¨YHïo©yÑ‹”dá6  ž”tµþ»ÌOx§SMÊÒÊÇNÔ5 .Òg¾´ŸËÄäd£€à‚7r=ê}OÄ^1¶¿˜šhPÅ$±M¡îKEæ0W„îU»fºH<7ßi׎¡yu¥¬Ë³º—Í1|(ã®n]êÞ0ñ5Õþ£«Xiº‡ÙÑc´¹Rí-®`°ç#‚§‡åý?ë ãæX‡ÄúÞµâ-6Ë@þͶ³¹ÒbÕ${ÈG*ÔŽç?JÇ?u‰õɾÁ§ ‹u3bm“M»yö<¢u_%prvœð:ƒÅw6~ÓìõÄÕ­„‘I‚Ø$*G”±+nÎ{uéÚ¨ÛxBÞÏZ—QÓµ^Æ)î~Õ=Œ3'ÙåòĆBÃwp¬3ONeÛ_ÏOÃúêMŸ}?-+᜚õÅî¹-Æ¡k.ššÍäiÂí:‘&Û´woã]Õ`i>·ÒõÛ½NËSÔ£Šîgž["s+¹ÀÛ¸Œãv3Ú·ét^ˆ}_« (¢ÂŠ( Š( Š( Š( Š( Š( ¸ŸŒò\Áá{«K BkmZÆà[[F^Iwä(’p¦»jã¾/ë²xgÁç\ŠÝn^Öê"fÚsmëÿ F'ü@‘j:hÞ"²¸Õ®QÒ×ûòCqÆw2Å·qÁ'‘Ínè~6Š]Æ][J×­õ¶®âÃ÷¥#”¨Þ«û³ÀlÉúšòñûAjþe«_ü oþ&—þPÿ¡j×ÿ›ÿ‰§pH÷Ÿdzý+Êtù*?SüÅz·ˆ¿ãÙþ•å:ü• ©þb†$z?‡¾åïý}¿òZÔ¬¿}Ëßúû䵩H ¢ŠñøÖûVð•Ö¸-íí \Â}“1˜¹`è3ƒ¹AÆ =(nÃJç·Q^FÚ¿Œ —Kðµ¥Þ£suk¢Csqw§Gm;Ï# “pê ¼•ä“Ôw¿¨ë~/³m.ÿÄ“^è:oØ¢7’ØÚÃp‘Üî"A6C²&6à¯'&ªÚÛÎߟù¥§Ëü¿ÌôÚjº3²+©eûÀGÖ¼»Ä~#ñï‰õË/ A¨°ÒLQÁ´¯ÎчýóJáœàlg$ñZ¶Ô.¾$xžôêWV*’Ù´ö(‘2HM²ðÌÊX`ñò°éJ*ú»‡ERQEQEQEQEQEQEQEQEW›þÒ?òJoëæßÿF­zEyÇíÿ$®óþ¾mÿôbÐÀùyE;´Ts÷ˆ¿ãÙþ•å:ü• ©þb½[Ä_ñìÿJòþJ…Ôÿ1Z2Qèþû—¿õöÿÉkR²ü=÷/ëíÿ’Ö¥"‚¹9<;®¦±ªêz–ö‘U˜M¤Ï)xÔEoô ¤…8$*çÒºÊÍÔµýM¼ŽÏQÖôÛ;™) ÅÒFíŸEb £}Ä´ðˆÚ6e©ÛG,ú|m3ÙÉqlQ ±H•¤ Œ ¥ÈãŒÍKÁžÔ^{iq2ÃD±Ùü¦Dû¡Ð>×ÿžõÐÕ{{ÛK‹«›X.#’{R¢xÕ²c,2ôÈæ˜Œ_ÂÕu!©]ÙH.öi`¹–ê:òÙwèÙ©n<1¢MâךÒEÔT(2Çq$aöçnõV øÏ­BöÏOµk»û»{Kt 4³ÈNIã’@«‘‘BÓ` *Û«[+Y.ïna¶·ˆn’Yœ" õ$ðJ AE!‹ECowkq,ñ[ÜÃ4–ïą̊áŒm€v°8=ˆ©¨¢³¯u‹K=kOÒ%}£P˜v®W€['·QZ4À(¢Š@QET÷––’^_]AkmÌ“M DAêXð*¶‘­èÚ»i½† ï›[””/×i8  (¬ĺ6³}qg¦\Ëpö僸¶DJ¤,…B1”š×¢ŠÏñ¯i¡i2êwÞg‘"·–¹l³}XP…^ÞöÒâêâÖ ˆäžØ¨ž5l˜Ë €}29«+Î?hÿù%w¿õóoÿ£½¼ãöÿ’U{ÿ_6ÿú1i=†|ÀM&h#4›}ë ŽÇÜ~"ÿgúW”è?òT,~§ùŠõodzý+Êtù*?SüÅt²èþû—¿õöÿÉkR²ü=÷/ëíÿ’Ö¥"‚¼ÇűÁámS_ñT2èz­´Å%Ôl/6‹„(qœõ/^„f½:²î|9áë­HjW:—=ð!…Ì–‘´ Ž‡qýhëpèy†¿âmwÅší¾›¨ ²Ž§‰u§²+ÆHЈØL ãŽ1ÇZÜ𭼟¼Iq¨ßO¡–l!†úHâ›u˜Ãd2JíµM DÕgŠ}SFÓ¯¥‡ýSÜÛ$Œø,? }Τ\êPêwUŒ×Ð Cs%º4±ÿºÄd~œ]‰jûœ7ÄÙWZñ%†E¿Öl-àkÝFÞÏËÎX2BÌtÎö뜪ñYö7zþ³ðúÂÍ.§¶Ô´‹ãi©Ú½÷Øî.V58Q*“µŠ˜ßƒƒÈÎ9¯PŠÒÖ+©®â¶†;‰Â‰¥XÀy6Œ.ãÔã'éTïü= joÛô=2ïÎI/Ÿh½ÀÚ²9 q“Ú’Ñ[ú½ÿËBž®ÿÖßç©…¦ |-šÚÈÞù¶s[¶Je™XnC¹òwÀó“œWŸØkº†«o¤øÍ%™m|+ooo}Î$yÛ¼Žûaúƒ^×ko­¼vÖ°E®ÔŽ4 ª=PŦi°ÚOgŸiµÃ;O ¡%/÷‹.0Ä÷ÏZw´œ—õ¿á«´Iÿ_Õ‘åv—w+á;@_Ï¦Úø£ÄrMwyìxíܸˆþ Â8×wmÜQ«êz…†‡ã=3L×oî¬ì&³K[Öºi&‰¥eÄ&ÎN’H݌ת¾§¾š4ǰµkìÆ1lf1lTPèº<:gö\:M„vì«n‚,ç9ÙŒuôëB²Ó§é¦Ÿ‡ã÷šÞÿÖíþ§™üI‡SðÞ©á¡áß·jQÅ|Áîg{©‘J&÷_1²åFHLŒ‘йâ!#xwBÔ´sPÔô8-$šå#ÖÚîè”IX¯Í˜ÉQÎ;^“-¥¬·PÝKm Ïa ¬€¼{†iê3ŽqÖ³®|/ᛨãŽçúDɳƲYFÁŽY€#‚O$÷4íýyÿ_Ò³_×õý~wá¯.ìµÿXÅ'ˆõm7J“ñÞÛyz‹Û1fsó¾n`¸Î슥ˆ5 oÂÞÓî ìú­ô7%Äz³é«$q>Á#:X°*ÁB‘É=+·Ô¼¤ê~+Ö§ic}X-¤v—‹"¡X8-:ãük_SÑtmRÚ;]OI°¾‚/õq\[$ˆœc€ÀMê¾ÿÍÿÀþ¶KG÷~Kþõ¿˜húΣ­i>°Öµ»»mBÞå®® ¹0Éq,L#óFÈÜÇ-¶¥ñdÚ´¾/¶ðÞ©LlaÒVkg}~K7šBì¬æUGiJ€¿)8ç'9¯I›CÑgÒ“J›HÓäÓÓ-^Ù +Ž˜B0?*Žïþ»°‚ÂëBÒç³·ÿQo-¤m_î©…ÕßÏüÿ Z/ëúÔã~ .¤Ÿ']jâ ›õµ€\M nIÌL°8Ï^‚›ã6ÓÆ~o­£k¢íŒÂ×nógå·˜$Ûü9ÛŒ÷Æ+±×ô(5mi pö6ƒ ÑÁo£ RXÝ6ô<²¼;àˆt…“LÖïmâÞX!±°…&ýÖòí”àû}¦ÝÝüî HØâ~Üx³X¹Ò5ÇÔâ>t²hÇ.¶òo\01­©Œ,L‡Ãgå9'9©<&l¼?ðvfIuy¤½ßÊMRXÑZIÊ)B[l#$e” צšhqj­«E£iɨ¶w]­ª Žx9|gõ©†™¦0éƒO´J›o%|¢ É1Œ~›ÒËúò§¶«¯ØxgƳ_]Ãý™uc,Lº¤—onÈÒ<…b¸zGJµñCS77~"†-@Íc™§J¨³n‰XÞ°À$“èzv›¡hše¬Öºn§Y[Ïþº+{d$ã0PãÖ£²ðׇ,mî-¬´ *Ú •Ûàñü{?Ò¼§Aÿ’¡cõ?ÌW«x‹þ=Ÿé^S ÿÉP±úŸæ+©˜£Ñü?Ÿ.ûíoÎ3ÙkGl¿óÙ?ïÑÿâ«;Ãßr÷þ¾ßù-jR(fÙç²ߣÿÅQ¶_ùìŸ÷èÿñTú(›eÿžÉÿ~ÿFÙç²ߣÿÅSè m—þ{'ýú?üUeÿžÉÿ~ÿO¢€¶_ùìŸ÷èÿñTm—þ{'ýú?üU>ŠfÙç²ߣÿÅQ¶_ùìŸ÷èÿñTú(›eÿžÉÿ~ÿFÙç²ߣÿÅSè m—þ{'ýú?üUeÿžÉÿ~ÿO¢€¶_ùìŸ÷èÿñTm—þ{'ýú?üU>ŠfÙç²ߣÿÅQ¶_ùìŸ÷èÿñTú(›eÿžÉÿ~ÿFÙç²ߣÿÅSè m—þ{'ýú?üUeÿžÉÿ~ÿO¢€¶_ùìŸ÷èÿñTm—þ{'ýú?üU>ŠfÙç²ߣÿÅWþѹÿ…Uy’ ûE¾qÿ]½¼ãöãá]çý|ÛÿèŤö|ÇEdfŒVV.çÛÞ"ÿgúW”è?òT,~§ùŠõodzý+Êtù*?SüÅnÌ‘èþû—¿õöÿÉkR²ü=÷/ëíÿ’Ö¥"‚¸‰ïè¯Äó.Ü’’Fl|»¸óÅA࿈¶Þ!×aÒ^ßOŠK›f¹·6š¤wd#)(@<·ÃŽGž)öÞ{OS¿×õ;k×Ô4÷°™lì tc’Ïó±wçŠÕ𖇬èåb¿×mµ+X¡Bž!”c.áÈcŽsÖ…këýoÿú[Á::(¢ÂŠ( Š( Š( Š( Š( Š( Š( Š( ¼ãö8øWxéæßÿF-z=ywíKÿ$oRÿ¯‹oý´=€ùµ[#¥}ë‘GÁw©¼ßöZÎÁsôÄ_ñìÿJòþJ…Ôÿ1^­â/øö¥yNƒÿ%BÇ꘭Y(ìÛR¿Ònn­ãÑ.¯w»Î­¨ÈùF9ïÒ³ô_j:¤òD¾ñ §–¹w»ˆD¡³÷A?xû®G½vgþ?Sþ¸¿þ„•Ã|sñ¦©à_ ZêúE½œóÍ~–Ì·HÌ¡Lr1 +)ÎPwõ¤Š4"ñÔº½Î–¾¾óíàŠwÌ‹²4Џ÷ÌMúW}û@è–w³ÚMáoÌ‚Fñåc*p‹Ú¦ýŸƒÿ†Šðÿý :çþBÿâéíáðqÿλÿ¿øºùøQÜP>‚ÿ†ŠÐ?èY×?òÿAý¢¼?ÿBιÿ¿øºðHÔÏ´V€æY×?òÿKÿ  г®ä/þ.¾OëJýhb¹ïÿðÑý :çþBÿâèÿ†ˆÐ?èY×?òÿ^(¤‚ç¿ÿÃDèô,ëŸù ÿ‹£þ'@Á?ðŒëŸù ÿ‹¯ŸÚžŸñí'Ðÿ*»s¸ý¥ü5«øg^ÜÃ#/þ.¦öðì´«áwjç?ê¿øºù§Sÿ\?Üþ¦µ|=ÿ k÷ÛÿA4;ü¿´Ÿ†Ê×°:ñÿ\Åš¼u Yhšµ¤óI¬“ˆö|Žƒ†' =«Ì#ÿwü•%¯ú–úÔ0±’’r>^þµ.ÿjм)*DÿÙnip2-8.7.0/doc/html/figs/snap7a.jpg0000644000175000017500000023006413341773367013676 00000000000000ÿØÿàJFIFÿá°ExifII*JR(i‡Züÿÿ)( üÿÿ)( 0210‘ 0100 ÿÿ È -ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀ-È"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?÷úBÀPdzo¯RÞ6v`ª£$“ÐPÖW½DowãZ·Å;É.tËxE¸8Y&‹ûàÖ²ÏÄq»Yÿß—ÿâé\xûjxQöÔþð¯ÿ…®zYÿߦÿâèÿ…®zYÿß–ÿâè¸õöÔþð£í©ýá^ ÿ \ÿ§?ûòßü]ð±µÏútÿ¿-ÿÅÑp=ëí©ýáGÛSû¼þ6·ÿNŸ÷å¿øº?ábëôéÿ~[ÿ‹¢à{×ÛSû¶§÷…x7ü,]oþ?ïËñtÂÅÖÿéÓþü·ÿEÀ÷Ÿ¶§÷…mOï ðoøXºßý:ß–ÿâèÿ…‹­ÿÓ§ýùoþ.‹ï?mOï >ÚŸÞàßð±u¿útÿ¿-ÿÅÑÿ [ÿ§Oûòßü]Þ~ÚŸÞ}µ?¼+Á¿ábëôéÿ~[ÿ‹£þ.·ÿNŸ÷å¿øº.¼ýµ?¼(ûjxWƒÂÅÖ¿éÓþü·ÿGü,]kþ?ïËñt\yûjxQöÔþð¯ÿ…‹­Ó§ýùoþ.øXº×ý:ß–ÿâè¸óöÔþð£í©ýá^ ÿ Zÿ§Oûòßü]ð±u¯[Oûòßü]Þ~ÚŸÞ}µ?¼+Á¿ábë^¶¿÷å¿øº?ábë^¶¿÷á¿øº.¼ýµ?¼(ûjxWƒÿÂÅÖ½mïÃñtÂÅÖ½mïÃñt\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿâèÿ…‹¬úÚÿ߆ÿâè¸ñöÔþð£í©ýá^ÿ Yõµÿ¿ ÿÅÑÿ Yõµÿ¿ ÿÅÑp=ãí©ýáGÛSû¼þ.³ëkÿ~ÿŽQÿ Yõµÿ¿ ÿÇ(¸ñöÔþð£í©ýá^ÿ Yõµÿ¿ ÿÇ(ÿ…‹¬úÚÿ߆ÿã”\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿã”ÂÅÖ}mïÃñÊ.¼}µ?¼(ûjxWƒÿÂÅÖ}mïÃñÊ?ábë¶¿÷á¿øåÞ>ÚŸÞ}µ?¼+ÁÿábëÞµÿ¿ ÿÇ)ábëÞµÿ¿ ÿÇ(¸ïöÔþð£í©ýá^ÿ Xþõ·ýøoþ9Gü,]cûÖß÷á¿øåÝþÚŸÞ}µ?¼+Â?ábëÞ¶ÿ¿ ÿÇ(ÿ…‹¬zÛþü7ÿ¢à{¿ÛSû¶§÷…xGü,]cûÖß÷á¿øåð±uï[߆ÿã”\wûjxQöÔþð¯ÿ…‹¬z×þü7ÿ£þ.±ëkÿ~ÿŽQp=ãí©ýáGÛSû¼þ.³ëkÿ~ÿŽQÿ Yõµÿ¿ ÿÇ(¸ñöÔþð£í©ýá^ÿ Yõµÿ¿ ÿÇ(ÿ…‹¬úÚÿ߆ÿã”\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿã”ÂÅÖ}mïÃñÊ.¼}µ?¼(ûjxWƒÿÂÅÖ}mïÃñÊ?ábë>¶¿÷á¿øº.¼}µ?¼(ûjxWƒÿÂÅÖ}mïÃñtÂÅÖ}mïÃñt\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿâèÿ…‹­zÚÿ߆ÿâè¸ñöÔþð£í©ýá^ÿ Zõµÿ¿ ÿÅÒÂÅÖ½mïÃñt\yûjxQöÔþð¯ÿ…‹­zÚÿß–ÿâèÿ…‹­zÚß–ÿâè¸óöÔþð£í©ýá^ ÿ Zÿ§Oûòßü]ð±u¯útÿ¿-ÿÅÑp=çí©ýáGÛSû¼þ.µÿNŸ÷å¿øº?ábë_ôéÿ~[ÿ‹¢à{ÏÛSû¶§÷…x7ü,]kþ?ïËñtÂÅÖÿéÓþü·ÿEÀ÷Ÿ¶§÷…mOï ðoøXºßý:ß–ÿâèÿ…‹­ÿÓ§ýùoþ.‹ï?mOï >ÚŸÞàßð±u¿útÿ¿-ÿÅÑÿ [ÿ§Oûòßü]Þ~ÚŸÞ}µ?¼+Á¿ábëôéÿ~[ÿ‹£þ.·ÿNŸ÷å¿øº.¼ýµ?¼(ûjxWƒÂÅÖÿéÓþü·ÿIÿ [ÿ§Oûòßü]Þ¾ÚŸÞ}µ?¼+Áábëôéÿ~[ÿ‹£þ6¹ÿNŸ÷å¿øº.½}µ?¼(ûjxW‚ÿÂÆ×?éÓþü·ÿGü,msÒÏþü·ÿEÀ÷¯¶§÷…(¼CÜW‚ÂÆ×=,ÿïËñtáñ#]^Ö÷åÿøº.¿,êÝêPÀ׌xâ|ò_GoªCÇ! &ˆ }Á'|ñ^±it%PA¦…€äQ@Ìp¦¸/^еÛÈ?ñÓ]ÝÉÄf¼ËÇŽ²¯Gý1ähÇ7Qº¡ÝFê‘—¬-$Ôoc´…âY$$)•Â/Lã'¿aïZÚ§„õ ?RžÎÙ†&Š:+,kŒ³)n:ð2I¬ {©­.c¸·‘£š6ÜŽ½T×Cáÿ*j³¾µw3Cqbö^qÌJqƒÉ:/3:=S•ìR;Ff¿Rö :þ𧯎)ú†«ésÁ 턱IpvÄWÞ}RFyé],:þ‡c­ø`E¨´öšd2Ç5ÇÙÝ9e |¸Ï_­f.µf|?¦Ú-ûAuª×Ä,ÞTg8p1ƒÉÎÜÑ×úïoËPþ¿…φõ«;»[K‹Iî‰XSÍC¼Ž£†ÀëßùCï>€©<ûu®ši6~+ÒŸOW}ÅdƃºLî`‘ªú§ˆì­î4Óc}myioz.šÞ 8Ûm#ÜðÄ‚i­lÊòøJïN𾣩j–²ÛÏEöu2)3a²>½ñX1X]Ïa5ôP¶…Ö90ùYº g<ý+§Õõm û]Z¤·7:­Äsˆ^ÙÐņÉÿ­Yþ Öì4»»¨uR~ÃpŠÇ [÷ˆÁ“€½%»¿õ¢þ½Aí¡B] U¯K'V²(.õ% ýÑÁù³ŸáÍ;Qðö³¤Ú%ÕþŸ,99*@>ø'Ž+£¾ñŤÖzeÌqî¾{¨çÔ)ð£$`çƒÇLT¶·¢Ç¦k‹a=ìúÄÉ!ŠH¸ »’~ñíÇ £úü¿àB-#ÁºÖtøµ›`²¹v]ÂTÜHF`8$»éX“éðÇÆÕÄW2˜í¾aºR8\î?\bº'ñ”ß`ÖEÏú 7”ü~è¯ÝÆî¾Õ_Y×4ýfóKÕ£¿{+ødXæAºÆªr² Æ1þÎúïªFfÏárÚòÚÒm=–âëp†?5 | žÆ®*-GAÕô™aŽþÆHZfÛYX1ôÈ$gñ®ÏO¿Ñoüi¢Kc$W‰yMÕÌÍIû¶Á*ßÅïY7:¦a§Úéê]R©ýªäù DèP×ðëÍ upïýw0õ/ë:D÷öB²¶Ä!•ÁoO”ž}©×^Öì¾Íö6T7M²Ü¥ºãh$Ä éõh–ÖVÉc<-Q.Ö {n1Øä[Þ©¦¯ é¾0ÄVúœ·¾tîÒÛ›VW…]HÎãÃc `v¡9ýSEÕ4SÔlÞßÌÎÂYX{©#>ÕŸººOjöw6ÙéúµÍ¿žf1A§o,ã'ø‰ÉÎcìù:L–Ùšd›Ã´ÉmºuÏ£çŒvâ’/h~¹×ìõm3Ú)óKüD€0¨¬|9¬êMp¶v-1¶Ç( Úèå† ÔþÔ4ÔÓ5/RºkHïãŒ$â#(RŒN ŽyÍiøkRðæ™Ùn ŽêÝâêk”Ëè‚c=ý©ÛRz´ß Üê¾¹¸´¶šMNß Â]P*…²äúÕ-'×zž°úl²Ee$LSpÀ$à¹Ë@?>kmõT²Õm.µY,–mXÞÄâÙܲ`c¯JÌ»ñ÷Ä(u“º+5¹‰·2’Ûq'·J#«Wþ´C{;Z³þÜØê7Ve÷˜&x·ã¶’3ŽÝ*¾ê³ª^E?ˆ// Û,/tò¦õ;]K’28>”jš·ö£ÄßÙÚu—–Å¿”?Þ俥^Êã{²ðð¾ºÚ`Ô—MÙ˜üÑ t9Lg;s»ö§K'HšÆ+™®ïÞTJ;ðó‘Àç5¹eâm&WE™îÈŠÛHû,çÊs‰1÷qŽyî8©<#©ZO7„´øåÝuk-Ñ™6‘´2±ãð5VÕÿ]Ééëc™½Ð5=*æÞ-RÜÙ,ìM#AêIRzuÇZ³©höš2ê¶´z…·Ÿöy¢*øÏÌ=êö£{¡Ã¤[è1j’ÝDú—Ú..>ÎÈ N„rIêxÏzgН4k«(¢Òu”kKl }=,äN¿yË·ºòi_B­gc—ÝFê‡u©ˆ›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Uí/O„®Ò»$ðvõcè+/ujiWkr[±ÆöÜ9ÆxóøP¼º™$ebBøáÖçÜþµsðØË.¡ö"B¸bº€óë[>d|á¤wi˜ÈœVd7Àj¯txI̞ÌÒaÑ#‰•ãº}™ 6Ù8Ç^ƒmdjsYÞ,L«'1çœ`ûÖ‰’Sk4 BD›ðÆCŸ˜“Óo¿­V¼½ß}nè7}·ýNAÇéC½´muszËÃú5²$WÌgºe,G˜T uÀàzšËÖt«kh÷N•žÕÈXçnz{Š¿?“ªB›¦Í¿ÞÉlc©éŒœŒsÐñjëWØÓͫȯ3íÜTc€AÎ;tåQÄT•D¯«ÝGŠÁÐ >T’Z>æêúÃwfkX‰9%E|纽ïÂ,M¤?îŠõÑóGÊŠ)°ýÁE0uþ¬×˜xóþAwŸõÉÿ‘¯OºÿVkÌï)÷»iÁã9'½GºÔû«Yìe]Gå9Ep ò° §ƒÜSÛéíq¦^_,ªÔÆ ã%·’8?…UÝRAu=¬Ë5´ÒC*ýÙ"r¬;pG"  ¤à0'ëK@.I$’Iä“Þ“u6Švê7Sh n£u6Švê7Sh n£u6Švê7Sh n£u6Švê7Sh n£u6Švê7Sh n£u6Švê7Sh n£u6Švê7Sh n£u6Švê7Sh n£u6Švê7Sh n£u6Švê7Sh n£u6Švê7Sh n£u6Švê7Sh  ¬xbXzM/œ}EEH&`0è Å*ÎS _Ê¢¢€,-܈IBPž»XŒþF£iKIëQÑJÊ÷3j×Ðvê÷ïǤ?îŠùþ¾€ð‡üzCþèªDüpQDpQL]«5æ<ÿ]çýräkÓî¿ÕšóÈ.óþ¹?ò4â]«¨ñ•Õ©Öîàlp±¥ dÞ~EþÛ}ºQÿ ëÅ™!ti¤ˆÃó Gü+¯Ðãó_ñ©£¬!–OÆ ³¶ªõØ>ñü2*Ïåiױç^M¤º µ›ÎF¶ˆdmd±³ÉÍcÿºñwýî?5ÿ?á]x»þ€wšÿ+i`O[œ½ox,gÅúx »,ÜzüV¿á]x¸Ìãó_ñ©ᯋ¤@é¤åO´ÅÿÅÓÕ²Óž×\±š÷ÃË¥E™7›Í1¼Û—»Ìf0žõzFÖ~É£ sÏ?Û*SÏûÅ0œQœÖü+Ð#ÿ&aÿâèÿ…cãúäÌ?ü]×ãq½¯+Kê¢j±iqæ.©3\%»|² e€þ q5Öÿ±ñ‡ý?òfþ.øV>0ÿ GþLÃÿÅÒQ°Û¹ËA4–×Ï’6Œ;r uÚÇ‘c§^jöÌ€ë¡D(§˜ÓïL?ï°éš‹þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.›ÕXKGsFÈCý­hYY®†‰ÙB:£™0>á`@m»±ÇëL’iµY´{›+›K«ÛëÙÉ,·ÆÎB¯9]¹ÆqTáXøÃþù3ÿGü+Ð#ÿ&aÿâèë÷þ7ÿ0Z/»ð·ùõ9mMºÕmZ0°[¶YÀÆ,×]oü+Ð#ÿ&aÿâèÿ…cãúäÌ?ü]ïýLJ»©ÿ„·Pû>Ïí§Åö-ØÿYåÇ÷sü[wcÞ©±ñ‡ý?òfþ.øV>0ÿ GþLÃÿÅÐ.·.SD:Ћû_Ë›ÌûF3»Èó}÷zöÆi²=ê.“'ˆIMEu41´ø8ÝŸöwc÷ÅTÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹¡_}Á«šÖ‰ µµìW{a½þטYÉ0ÌqÌPfž‡ ³,L¶–VGP,“E¯ƒ9”òUÜIüéŸð¬|aÿ@ü™‡ÿ‹£þŒ?èÿ“0ÿñt¢­ø~ÿ!½Æÿçý\º¯âñ®©¨Ky>Œ‹$¤ q1Æ_Úª±ñ‡ý?òfþ.’AÒÇ%Eu¿ð¬|aÿ@ü™‡ÿ‹£þŒ?èÿ“0ÿñtÀ䨮·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ J½ÿÂñéû¢¼·þŒ?èÿ“0ÿñuê^ÿHÝÐ@ƒî (ƒî )€Ë¯õf¼ÃÇŸò ¼ÿ®Oüz}×ú³^aã±6ìzÄßÈÐ¥X¶4Ë\Ï$þB§óµaêR<~ ¹xÙ‘×Ob¬§/¨5I5 ý7ÃVÓ^j+<¢5…¾Ë#ç+œlYÛé¥ :g¸Xöïe]ÇhÉÆO¥?Ì>ÕÀ]j÷šÖ‘¥Ì‹^E¬¬š7XË(l6Ó†¡æ·ôûýJî]KK¹{hu P…n!Œ˜Ê¸%[a9ÈÁã4í§õåþa×úîÑÐ$öªQÿÇÕØíæýk/ÂR\¶Ÿx—WRÝIôñù²œ’°=‡ÐqZ‘ÇÍßýuúÐÁÑE†QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE2i£·‚Iåm±Æ¥Ý±œ2MV¶Ôín§ò#3 6— $@ 7ž£ó¬][P»šmCOW… Ç’rY°Ñ©';€þ#ÛµWûtËv—0:+ªºbH‹‚©ìß”WW0„*¨têMÙ×Wàÿøó‡ýÑü«ªÒnå½Ó’y¶y…äC°×+œ}=k•ð‡üzCþè¯B2RJK¨Ï@ƒî (ƒî *€e×ú³^gãQºÎqêŒ?Jô˯õf¼ÛÅãtRPEwÛÇu£Eo2îŠ[eG_PW³G…b@u=EšÙÃÛÌdMðáJá~\‚G Ö½—üƒíëŠè"§  øE-¾À-¾Ý{æ ¿¶}§ryžo¯ÝÛøb¯izD_žé,ÓÏpÁ¦žv î@ÀÎÐhQ@4ý:69ÒvNó¶òÎH)bÿ›¿úè?ô«UTÅr“Ìñ¬,²0aºBù@þéô  h¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ) ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€3õ}"ÖöÊñ–ÆÞKÉ!`’4k»vÜ/Ì ÅÑ´K§ÔËêºrq…ln%qÀ'°<×U‹¿ùåoÿ›ÿˆ£óÊßþÿ7ÿXO ÍMî‰qA [ıAEôDP ~¸ßñkû¢ºù%žß4Qùcï2HIQë‚¢¹ ñA[¡ôpQDpQL]«5ç^)Ž=N+Ñn¿Õšóß ÜF=\:äkÿ\SÿA=Aeÿ û_úâŸú©è«ÿ±ÿ×7þkV W_øýþ¹¿óZ°h'éU[­Z~•UºÒ:÷þ>%ÿ®Q9k“µÐæ·ð´ÖøœÞIhñžá™x¶ÑøWq+ê3‡PÃÈ‹‚3üRR´Úr_ÇbÆu"XŠŒ•ÿÏ¡ô5Å[ :“r‹¶ß´*(­QÄêÚmÔ“XÏLË/‘ÀbÜ7mäy€©èAèj•Îp¬‘¢^ÉjöilV7ƒzc9 \c¸å{¥zD°Æ "Eih%ü…?û:/ïŸûá?øšˆá*¥k¡ûHœµ´òL×PùED#GcŸ3å==N? æ­tÓÐ}íšK) •ä”:<Œr `µs“Œ/QÅzwöt_ßoûá?øš?³¢þûß ÿÄÔÇR7³Cö˱æ‡D¹šÒèE¦Çi,è…—l®¹ÊH={ÓÛEº¸±žÖ+_°Åqr$C.mT(˧’ãšôì迾ß÷Âñ4gEýöÿ¾ÿ‰ªú¥^ëñþº TŠèy•æ“}snÓHZ,&UXœ1å†~d8RÍߌÖñ¶ž]jÞiTmíÎÖ`ÊÇ޼ÿW_ý›÷ÛþøOþ&˜F²¼/lT ° ƒŸð4¥ƒ¨ú®½ú‚«Ðâ­–îMnIï,.0¬ÑÛɾ3iýìnݖǧZ«¯iwW—²I¬“n·Âñʨ#}ÄŸ07/Ýã ÐñÍzÙàÿž1ÿß"³ÁÿÏüñþùÞ¤·kñóÿ0ö±[g£é¶÷ikK˜^Ø0šIîDˆT‚0‹¹¶äã ^+­­ÿ³ÁÿàNW$q¸ò;VíΡ¬Áqc¥«X>¡r$‘¦18‰#Lì“–ïPCErðø’ó6Âæ¦ Ö…rT6Ü£!Ï’½sÖ«Ùøºîú$X­âûLº‘~h6ïש@yéžÔ_—ù‡õùÿ‘ØQ\¦â‹†Ó¯ïuµY-`id°Ž'ŽhˆÏ ¸ò;d*½§‹56IÞ{T‘œ— Éi£:PgEfè“j7:|w:ƒÚ³L‹" xÙ‚3ƒ–9>üV•6¬ì$î®QE!…Q@Q@Q@Q@Q@Q@Q@æþ<ž÷Hñž§¢rW÷Pîæu;znùç·¦ÀSÞjþ ½Ô§Ô>`¿½‡<Íž‡¯lsÛ× ö£ÿ ÛŸúäßʸÿ ñ ì5ùÜÿ×&þUÈx_„ÞA÷A÷˯õf¼÷Ä_ñóýt_ç^…uþ¬×žø‹þ>bÿ®‹ü躲ÿ}¯ýqOýTõ—üƒíëŠè"§ ¯ü~Çÿ\ßù­X5]ãö?úæÿÍjÁ Ÿ¥UnµiúUVëHíÿä%?ýp‹ÿB’²çðµÆ¤Úƒj7ëpÒ +Gò‘Г éŠÔ·ÿ”ÿõÂ/ý J¥/‹4hgxd¹”Hå²ýšS†Î1÷i«!Åŧýu?úU¢j”íûû3ë)ÿÑoR™9ëH :–½•:­ÍçÙ‰Uk´U1!cŸ›w\vª×þ,µ°¼»ì¯¥ŽÌ)¹ž(Õ’ à Ÿ›wNx°5¿ ^êW÷²ˆì'Fñ\\;‰m‚íʨ F8=ÇSZ—Z5ÌãÄAd„i±Ò~R#ÛóqÇ>™£¥ÇÖÅÍCÅ––\*ZÞ^-´b[‡¶E+ ‘‘’Ì9Ç88ª¶ºòA¨k×WsÈlàû9‰0IÐ(õ$Ž=Ms:ܲiêÖ×–2ÉnªöÎÎ&ya>@ݦ+ZãÃ7°j0¼°¯"·eÜ – z8õ§ßúõ%_Kÿ[.›­Å¨ÜOlÖ·V—0ª»Cr 1VÎm$ÁïVIÿ‰„£þ™'ózÅðþ˜tÓ3É¥éVR8 › üþr£ò浤7—>VÓ'ÙÓf㜾3íC1Ljç>&û!†?ì³!´[Žw} .ìzmÇQRßøªÚÂòî²¾•,›™âJDdóg§<Y§Á,4on?µ‡7Ry?hÎíÛ3Œnö«³èW³ÅâÏ}NHÀc…aÓž:gÓoÿ2ÿñU¸®ëúùóà?–_‡ù•?á6³ÿŸ+¿ûê/þ.øM¬ÿçÊïþú‹ÿ‹«ðˆhóæÿø/ÿGü"üù¿þËÿÅQˊsà?–_‡ù•?á6³ÿŸ+¿ûê/þ.øM¬ÿçÊïþú‹ÿ‹«ðˆhóæÿø/ÿGü"üù¿þËÿÅQˊsà?–_‡ù•?á6³ÿŸ+¿ûê/þ.øM¬ÿçÊïþú‹ÿ‹«ðˆhóæÿø/ÿGü"üù¿þËÿÅQˊsà?–_‡ù•?á6³ÿŸ+¿ûê/þ.øM¬ÿçÊïþú‹ÿ‹«ðˆhóæÿø/ÿGü"üù¿þËÿÅQˊsà?–_‡ù•?á6³ÿŸ+¿ûê/þ.øM¬ÿçÊïþú‹ÿ‹«ðˆhóæÿø/ÿGü"üù¿þËÿÅQˊsà?–_‡ù•?á6³ÿŸ+¿ûê/þ.øM¬ÿçÊïþú‹ÿ‹«ðˆhóæÿø/ÿGü"üù¿þËÿÅQˊsà?–_‡ù•?á6³ÿŸ+¿ûê/þ.øM¬ÿçÊïþú‹ÿ‹«ðˆhóæÿø/ÿGü"üù¿þËÿÅQˊsà?–_‡ù•?á6³ÿŸ+¿ûê/þ.øM¬ÿçÊïþú‹ÿ‹«ðˆhóæÿø/ÿGü"üù¿þËÿÅQˊsà?–_‡ùšZuòj61ÝÆŽ‹&p¯ŒŒ;;zÓu6N8f‘D3¤ë°–CGJ–ÎÎ T¶¶B¦v©bØÉÉä’zšžº£{.mÎ òó>]¿CÿÃ6·÷SÏö«Ëqr¡.c·*ÎÇÍON28§ÞxvÚâXf·¸º°–(|€öŽ˜û)È#·qëZôUd¯‡lboṴ̀gîòv7Pà  ç=ûûÔv^²°{)-ä$´FŒ>á™Q‰;_Ž@'#¦+jŠÂ>µ[+ x.ï-ÞÇ“Émÿ>ðÿß²[ϼ?÷À¤›7üø]~qÿñty³Ï…×çÿZd¶ÿŸxïGÙ-¿çÞûàP›0ÿ— ¯Î?þ.¥µŽS,·&Æpª©HQœgg,z{U¿²[ϼ?÷À¨•DWD¿p*°™ÈÇéL (¬YüMgºšcsò¼ÙùQÏE?_Ó#×YFç†2HY ƒŽ6“ý(Z)~Émÿ>ñß²ÛÏ´?÷À ¢—ì–ßóïýð(û%·üûÅÿ| JŠâq–I^C;ræ*o²ÛÏ´?÷À£ì–ßóïýð( ßÿÏÅ·þ·ÿFoÿçâÛÿÛÿ‹¥U\ÉýÀªÀzg#N*Z‡7ÿóñmÿ€íÿÅÑ›ÿùø¶ÿÀvÿâêj(ßÿÏÅ·þ·ÿH"šI’K‰Qü¼” @ ÉÉ9àŸÎ§¢€ (¢€ (¢€ (¢€ (¢€ *%EšéÒA¹…= $õüªo²[ϼ?÷À ¢—ì¶ßóíýð(û%·üûÅÿ| J)~Émÿ>ñß²[ϼ_÷À ¢—ì–ßóïýð(û%·üûÅÿ| J)~Émÿ>ñß²[ϼ_÷À ¢—ì–ßóïýð(û%·üûÅÿ| J(Ø©ò¢…QÐEQEQEQEQEAyw …œ×w²P»·°®~ ê7rK=–‘;ØÂO™"[B×$:ž;íVǽu,Óî5O ßZZ Ü2«¢çаm¿ŽÜ~5ÂxgÇN‹ác¦ÞC:]Û†£ýóÏ_CëœWM(^ Å]ÜÎO[6z‡­Ûë¶?h€®F7lŽFAŒ‚AÀ÷‚+N¼ËáEý¼’j™•f”+GfPÎX¯® ˜ü¨¯M¬ªÅFm"¢ÛZ™Z¬—ZL.¡£’ðB2r2> ´`–Â{»›H‘ ÖÅD«åcná‘ÉU»½Õa’Þ¶—K eS’¦¤çß. V‡Ùàÿž1ÿß"¹/‡WÓêZMõåÓïž[˜ŒŒn?eƒšìi¸¤ì%6ÕîGöx?çŒ÷È£ìðÏÿï‘RQJÈ9Ÿr?³ÁÿèúÖâ©ñý}?þ‰Ž°ü1÷GÖ¢ŸÂi[ãû¿#»ƒî (ƒî +C!—_êÍyãæ/úè¿Î½ ëýY¯=ñü|Åÿ]ùÐueÿ û_úâŸú©ê /ùÚÿ×ÿÐEO@ _øýþ¹¿óZ°jºÿÇìõÍÿšÕƒ@?JªÝjÓôª­ÖÛÿÈJúáþ…%5ô="IGÒ¬YØ–fkt$ŸRqN·ÿ”ÿõÂ/ý JùñUý¾´t±£#\ÛûQÔôo¹Ó'Ó˜+ñqkÿ]þ€Õâ9V)4}ÐG.ýF%óò7Ì0G?\j¿!?h´Ï_0ÿè I¨iÐê-jfiìÓ­Âl e—8#§4-תŒç[ÄšÄmszRÅ´ë}GìoGíÞpmØÎXqŠn•©j6zö¥qS·9Ôš]>_ úüÈ%ÖuØ4:w}9®u âŽ2!p‘«©<ùb1ê+KFÕ/./oôíE ve ’ß!$G‚É‚ɬÝoHšëOÒl¬ÞeKk˜‹JŽªèŠ¤nñž¿ ÑÒôÈt³;¬ÓÜOpÁ¥žv ï€8@VšÛúØtþ»š$ÿÄÂoúãózåtßêO¥i -RúúøÏËÊ!P#cè§¶;WL‡v£7ýpÿBzÈÓ¼3ýžt“ö¿3û¼cñÍ$QžÞ#Ôou #ìªCsŤÓlPñγƒœqÎjM[Æðiw·æ+f6ЦàIx±¾HÉ©rÓÒ§>ž"¸³Ô„7Q\ÜN®öû×l§%Jî8ç=ºTÏáûÈõ¯,µ(ák†å%µ+:€7/Ì6’¸£°‰-õË›ÝfkKKÞÖ–áçÚpë¸a6œñî*Šî.ÊæëKX^ËäÃ:\!‰!w.ÑŒ‘Øš×´Ó>É©ê7¾nÿ¶Î͸ٵvõÏ9®sÞ¿›IÒÿ´®Ùm­¤3¥‘¶òÜ8c·s’sŒÔÖáн?Ф‹ík¦³éVÓ˜%ºó€`AŲ́=óž–·oo­xše1·”`*&—ËOõ}Ûh÷Å: É/Ú-RdÒ®g3Ëkä‚Ä“¹”>xR{c<žiÚ…~Ý> ë{å¥á…öC’"6ž¼©ÀÊŸÎ’ÛúòS6ïÅ“^øwR–ÏÉŠòÒhSu½ÂÍuèàwƒÇ«%õÊë:DwЛyeYÉH.ËE…PrÃhÝíÓõü"’ÍiªGw¨#M~c>dþZÆcû¤)cž@ïWSFº–öÂîþþ;‰mD ì·òÇcŽ1|ûQéýh"¥·Še˜ÙÜ˦4Zeì¢+{Ÿ8$çidÇÊrzŒÓ[ÅW)<Ò>–?³¡½ûÜ Œ¸mÁwlÛÓ$w§[xZXM´º›K¦YJ%·¶ò@`Fv†|üÁsÇ ÍK'†·é—–kÇÚo¾Ù¿Ëû¿:¾ÜgŸ»Œûô¦­ëËþ=´þ·ÿ€kYÍs2Ìnm>ÌVVT`}è:?3éÚ¬Õk8naY…ÍßÚ JÌ‡Ë ±Eã®={Õš@E ÿOœÓ(ÿ›×¬ë×kº¼#V½µŽÒ8Ú­ìêÄ©'qØqÏ« ëU±¨\׿›Ö%ƨ^úúÃUŠØ^ãÚù…vŒà;÷“3æÕæ½°¹i]…ÄšÌ7„1Îv¨ã9þ,ûU»]XYHŒÂy< .Jùÿ#cýœ}î>ö -¼)ª4)s!…´ódA_›–,_>¹cÆ)SÃ’yn%¿í¦ÿg–㌜67zŸ­6÷·õñš[_úøÉ’Áâé" Ú®œ,ã’ͯ"xçóC"€X•pØaëõ¦é4‹T¾†+Uy iâòoRn2²`|‡Ÿqמ)×>Šíl£žrÑ[ÙÉhêê‚sž>ï¿ZŽ= íôË:÷SYí¥·0)KaŠÆKdäãØPúÛúßþ+éëoø#ì¼d— ¨G,6Æ[;csþ‰x³£¨ÎFàŽ„w­}þóP²[›»8­DН¤þnTŒóòŒnk \nºkBi¬M’y6žPU=ÈÜr*ß³ì–6öÛ÷ù1¬{±Œàc8£K^ðúü¿àš¨ÝU|ÃG˜ikuª¯˜hó X<šJj 5/–}E0E?Ë>¢,úŠeÿ,úŠ<³ê(”Sü³ê(òϨ QOòϨ£Ë>¢€T®4}.îä\Üé¶sN:K$ Ì?3ZYõygÔP€åaðk⨼Akö‹yãf³Äà@ÎÊÊX®3œ1è@Ï8®žŸåŸQG–}Ecë$E.›rÿ,6÷[å|p‹±×'Û$V~“y£YK¨\^ëö7—7îR6ªí '·©ç5ÔygÔRìoïγå’m§¹ªœ\R’ÛÏþ0­õÙÛKmm6“¼¹ó"ˆ"«çƒ852k~ŠQ$wºrH±ˆƒ)PB‹ŸOn•¯±¿¼?:67÷‡çNÓî¾ïø!z]Ÿßÿç´½GÚL—ßgÕl™ÖTŠ2¨±qíúgžÝ}«Cþ} þ‚ÖŸ÷ôVŽÆþðüèØßÞŸu÷Á Òìþÿøwü$úý­?ïè£þ} þ‚ÖŸ÷ôVŽÆþðüèØßÞŸu÷Á Òìþÿøwü$úý­?ïè£þ} þ‚ÖŸ÷ôVŽÆþðüèØßÞŸu÷Á Òìþÿøwü$úý­?ïè£þ} þ‚ÖŸ÷ôVŽÆþðüèØßÞŸu÷Á Òìþÿøwü$úý­?ïè£þ} þ‚ÖŸ÷ôVŽÆþðüèØßÞŸu÷Á Òìþÿøwü$úý­?ïè£þ} þ‚ÖŸ÷ôVŽÆþðüèØßÞŸu÷Á Òìþÿøwü$úý­?ïè£þ} þ‚ÖŸ÷ôVŽÆþðüèØßÞŸu÷Á Òìþÿøwü$úý­?ïè£þ} þ‚ÖŸ÷ôVŽÆþðüèØßÞŸu÷Á Òìþÿø?ótíféy†æg’&þòùj¹Ä©¬O }Ñõ®‡XÔá‚gÓd3MnάÚ¯9þÚ¹ï }Ñõ¢µ“Ø*ó_™«_oC»ƒî (ƒî *̆]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@Õ—üƒíëŠè"§¨,¿äkÿ\SÿA=5ãö?úæÿÍjÁªëÿ±ÿ×7þkV Dý*«u«OÒª·Z@Goÿ!)ÿë„_ú•dÁg1¡™T¨}¿0¨Ï§«[ÿÈJúáþ…%]¦2ÿÇͧýu?úU¢j¤ç6õÔÿè·©‹RLÑš‹u¨\Ñš‹u¨\ÕùˆËÿ\cþoR¨AÎ¥7ýqÿBzy‚#:ÎcC*©Pû~`QŸN2æ™Q£`²FÛÔ‘‘ЂàMOE0)}ÿ>ÖÿøßüE&/çÚßÿ[ÿˆ«ÔP^ÿϵ¿þ·ÿF/çÚßÿ[ÿˆ«ÔP^ÿϵ¿þ·ÿF/¿çÚßÿ[ÿˆ«ÔPkX$G’iÊù²`ay £8ïÔœûÕš( Š( Š( Š( Š( Š( Š(  ³C0¸3Á±‹ FG;AÁ$€qÔö¨ñ}ÿ>ÖÿøßüE^¢€(â÷þ}­ÿð%¿øŠ1{ÿ>ÖÿøßüE^¢€(â÷þ}­ÿð%¿øŠ1{ÿ>ÖÿøßüE^¢€(â÷þ}­ÿð%¿øŠ1{ÿ>ÖÿøßüE^¢€(â÷þ}­ÿð%¿øŠ1{ÿ>ÖÿøßüE^¢€(â÷þ}­ÿð%¿øŠ1{ÿ>ÖÿøßüE^¢€ÿ)|ÅU~á[püð?•X-ŒÔU“âYnÿ±g‚Á®nH·FE'ËÞp\ã '>ÔŸÑ>â-t\›O0}žO-¼ÅÆáÙ—žTö4ë½NµŽïpK=¬M,–ñʦ@dü¹È®rÛNÕ´}rÆBmå·šßì/ö;gAPLlÙfàŒñ÷ª6_ \hm¥ÜÅ©ý–hÞV·;$rÍæãq9ëCÙØú^#´»¶³žÂk[•ždŠ@.· ã¾Xw­^mRÅ/VÉïm–í¹X ªý9®KÌ’ûMÐR:öµ½ƒÎYm™6á'‘Ƚ*Ý•ÇØµ-(éWjw7Æho9L ¯æt]«Æ3ž8ªk[yÿ—ù’¯eës¹›YÓ-®ÖÒ}FÒ+–À¼ê®sÓå'5supú–™%Èñy{'•¦<‚b$»¿ƒŽN};×YfÏö3!üµÝ»®qÎi ¹ºÕê7R]Ôn¨·Qº€%ÝFê‹u¨]Ôn¨·Qº€%ÝFê‹u¨]Ôn¨·Qº€%ÝFê‹u¨]Ôn¨·Qº€%ÝFê‹u¨]Ôn¨·Qº€%ÝFê‹u¨]Ôn¨·Qº€%ÝFê‹u¨”ñÏ‹-ÿëÉÿô*Ÿ†>èúÕ­xçÅPדÿè2U_ }Ñõ¬(o?_Ñx¯†ŸøVwp}ÁE}ÁEtƒ.¿ÕšóßÇÌ_õÑz×ú³^{â/øù‹þº/ó êËþAö¿õÅ?ôSÔ_òµÿ®)ÿ Šž€¿ñûýsæµ`ÕuÿØÿë›ÿ5«€"~•UºÕ§éU[­ #·ÿ”ÿõÂ/ý J»T­ÿä%?ýp‹ÿB’®ÓµÉÅÅŸýv?ú-éìÜÔwëì¿ë±ÿÑoHÇš@;}.ú‡4f“o£}Cš3@†¦Æs©Mÿ\#ÿО˜ ,':”ßõÂ/ý J¥â 뛦}šMžuüPÉòƒ¹œŽj‹xªå'šGÒÇöt7¿c{q— ¸.í›zdŽõ­«iÚ‚ÈyÞWÙ®£¹û»·mÏËÔc9ëT$ðÖý2òÏíxûM÷Û7ùwçWÛŒó÷qŸ~”ןõ·üKm?­ÿàt­nú8µ{«øãm>Òæã÷þoÎ n:wÝQYøê –•^ |‹WºŒ[Þ$Ä„*ø#`û޼ñWÓÃ’+j6í|L¾iKcÎÇ8|ôÏ=(ƒA¿]:âÂçTŠxd¶kxØZuÈÀf!¾cašZÛåøKüÿ7ñ£—iu&“–öhâ·ˆ^dàY¶qÓ¦ ;þ‘ù¾±xolÙ­’@ûËð›[Œ‚xä sPëÚmØÓ4;K'c-½Ü#ÎïHÞWÓñïÖ¦ÿ„[í—âúùæ¼½df¸Ž1–cå6®N0yäœÕ;knÿäJéër½þµs.«i÷Ö_b¼]>IãÙ7˜®˜ Ø ã#èºñhZ)ŽÒD6ˆì&½ÈØQÂ)qüEZOM;ÝÍ©êj¸žÔÚ+ljcŒõÂäòO9Ïj§/„.š?Ýê‰^Él¦y,÷†EÎ ãiÁç’ .Ÿ×Ÿü´ºþ»Á%þ×ÔgñDQXEöréñÎRY|½›œüà rqŽ8¨&ñݤZ“ÀÜۥȵf7j&Ý¥„]Jƒß9ÿýÌ–wV:ŠÁ$6©i/™˜$E9|ÃiëëÖ‹mæÂþY,õÖÊYÌïo%¨vœ°WÜ0 ö8Í=/å¯çþDëo»òÿ3xð+˜±ñ]ÅÂY\Ýib Ù|˜gK€ä1$.åÚ1’;W×ÄV²8ŒYê ±Ú iÓø’¼ Äðç‡ïæÒt¿í+¶[ki édm¼·íÜÄäœãµ%¸úà×¾ËmuåÁqss&§%¬É>íÍ׆#ä@8çõ_XÕäÓõïT„[0 à ¦]íµB…àd“Ðc½_ æÞAóGsö÷¾‚a>[7ð•'æ$™Ïj[¿ 6¬öm¬]Ewä,ªê¶þXpà˜í#Ï?… oë·ù¯õÜ­¨xÁ´é!¶žÖÒփϖ+‹õ‰QI (b>f8<zšßÄój76QišzÌ·«tÍ,þ^Ä-· rGáM_ ßC,70ëÞ$?g’YíD‚XÁ%w.áó ýàyô­(4—‹Y]JK€ïö5¶eí†Ü[¯OÖšóþ·ÿ€'ý~ðHu+ë›h¶±I¶ “7š»Aݵ29ê9ôª:Š®nÍŒ—X‚ÒýÚ8&[çp @eÚ1§¡5­{¥ý¯VÓ¯¼íŸcó>M¹ß½võÏüj•¿†¼;H´û^ïìë;w—3‡Æxûþý)ØÎÒ|K{kàõÕµxch–0RUŸç™‹m‚ 'nricñÌmg~æÚÞYí7 kx³FáÛhùÀàƒÔcó«1xRQ£K¤M©y–#›`°’r’Ù!°}…M>ƒ}{¤ÜØÞêPÈÒ”+$Vž^ݬ‘¸ç8ö§»¹ÖõKi,mN‘_]™1¼ùPû;ç¦)¿ð”†ÓÕÖÂC¨5ѳûp1(ä‚ý6ãœúv¦ëöz…ψtW°Àщ÷NÐQ2£†G_¨¥Û§ª‹÷‚ݛ߶yc™Oäé·c=;Òþ¿ò†¹¬MyáíRÚ{cg}i$HÖMãk:ÊØžÃ¥_ÖüP4KÔŽhíP7úb¬ß1ÆDD|À}i$ð³ÜØjIw¨/oʸX‚ªl  TÉàcלžj ß\]Éy·R…#½xä¸ i¹‹(Qò¶á´£ƒœsMn€±g¨êoâZÛËŠ[ ]æÚb0N)ÝÏ©WNñÕ®¡¨ÚÀ±Ûˆnähád»W” â¨8õ=³ŠÔ5ÄZåÅýµò¥½ÖÏ´Û¼·~VÈÛ‘ŽÆ«éÚ5΂€-ø›M·V)Ø÷Lœ(prØíòäÒ^×õÿÈÑ×'–×@Ôn r’Åm#£Ä) Öe¦¹®’u+(‘oaó£¸/‚S*ÄlHÆ=êy5K=btÖµÔã[¤h‹Ia4j™—ñ¬ÍNÆö×Ãm¥ÜO>¡rÊ«döÖeLn˜(X‚@ä“Á£küƒ{|Ë â›©nÒÚËKI¤–æxb2\ùjÂ,nlí8ä‘n´³xÆ }'í3[ˆn…ѳky¦TT”rs!à.9ÏéTæÐõ KŸ ÛXÌc’Þ9ü룕7²‚K ¼sÜUãá@tåíÏöñvo~Öc2žÉÓn8Æzw£úüCúþ¿߇õøµØnJ¬K-¼¾\žLâhÏ‚®1‘ƒè;×'}â]Fݵi—U¹Y­o(mˆh ‚0MƒoS’\b»lu4†}N/1g+EhI>æ ½œÖdžÔ ê6ðë)•üÏ,±‹@dÆ-Žƒ®Ú:ÿ^_ðF¶þ¼Êz¦½¨Áˆš¿dKVƒj«ß÷±Ç9÷Ínø–êkOÜMo!ŽQ±C/P €qøY÷>Im5Kho<¤½Š“1nò„C¸Ýœ{Sõ-;T“B¿ŽÿS·DbEò­ d!¹ùÎsŒTÖø%ÊiBÞÒî¿B÷†æ’}ÚI¤y$mùgbIùsW —“ö ûê?þ.¨x[þEËOøþ†Õ©¨_5“ZŽ'óîæN±í<ŒýãÇÝšŠÓ¢+¥iÛ»üÈ·ÜÏ…ÇýõÿFûùð¸ÿ¾£ÿâêwÕ4øïÖÁïíVñ†VݦQ!ú.sP®­]j tÖÖöö{33\¯Fù‡ð~=zÖ¦o¸ÿŸ ûê?þ.÷óáqÿ}GÿÅÕ‹-JÇSˆËa{owœ‚Uék6Ëź=Ü—‘I}mm5¤ÒE$SΊÀ!Álg…Ïz,­÷óáqÿ}GÿÅѾãþ|.?ï¨ÿøº¸ní„Í ¸ˆJ±ù¬›ÆàŸÞ#ÓƒÍW}kJˆÛ‰5;$7 4§QæƒÐ¯?7á@ï¸ÿŸ ûê?þ.÷óáqÿ}GÿÅÔº­óiÚt—IR2ebS–ï_Ç¥%Æ·¥Z]‹KNÊ“ŒC%«œôùIÍG¾ãþ|.?ï¨ÿøº7ÜÏ…ÇýõÿSÚjºuürÉgkp‘q#C2¸O©Š,uM?SWk û[µC†0L²>ø÷Ôü]î?çÂãþúÿ‹©mµ.öåí­u+9î;¢Šuf\uÈ"–ÛVÓoeµÔ-'0­L­åÿ½ƒÇã@ï¸ÿŸ ûê?þ.÷óáqÿ}GÿÅÕ‹-NÃSG{ ëkµCµš V@§ÐàñYZGŠ,ïï/,î.­ »Šò[xíÌÀHê§í'<Ñml.]ßqÿ>÷Ôü]î?çÂãþúÿ‹©¥Õ´Ø/’Æ]BÒ;ÇÆËw™Dž˜\äÓgÖ´«[ų¸Ôìáºl†IÕ\禜Ð{î?çÂãþúÿ‹£}Çüø\ßQÿñu½â ÂâI®íRé`ya‚i•R NO#µOg«ZÜX,òÜÛÆén“Ü/˜?rwe¹àuäúPwÜÏ…ÇýõÿFûùð¸ÿ¾£ÿâé5=f ?6)-e™•^8¤ºH·¡eƒß0çÜõbMWN†ù,e¿µKÇû–í2‰è¹É¢Ár ÷óáqÿ}GÿÅѾãþ|.?ï¨ÿøºµM=/ÖÁïíVñ†VÜÌ¢B=—9«t›¾ãþ|.?ï¨ÿøº7ÜÏ…ÇýõÿZTPnûùð¸ÿ¾£ÿâèßqÿ>÷Ôü]iQ@»î?çÂãþúÿ‹£}Çüø\ßQÿñu¥Efï¸ÿŸ ûê?þ.÷óáqÿ}GÿÅÖ•›¾ãþ|.?ï¨ÿøº7ÜÏ…ÇýõÿZTP ¬>(ƒÌ…â?c•ÊçîÉèMCᎃëW|Gÿ#m¿ýy?ò’©xc ú×= çëú#¯ðÓÿêÎî¸(¢¸(®ƒe×ú³^{â/øù‹þº/ó¯BºÿVkÏ|Eÿ1×EþtÝYÈ>×þ¸§þ‚*z‚ËþAö¿õÅ?ôSÐWþ?cÿ®oüÖ¬®¿ñûýsæµ`ÐOÒª·Z´ý*«u¤vÿòŸþ¸Eÿ¡IWj•¿ü„§ÿ®èRUÚ`W»ŠG<@‰÷…'¸*F~Œj$§þ\.8ÿøº¿Egï—þ|.¿8ÿøº7Ëÿ>?œü]hQ@ûåÿŸ ŸÎ?þ.òÿÏ…×çÿZPx’Qÿ._œü]Mi¾l·'–Î2 3ŒãŒåOjµEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEOVÿ5÷ý{Éÿ š¹Tõoù_×¼Ÿú ©ŸÂÍ)|qõE? ȹiÿÿÐÚ™âßõºý…¡ÿÐZŸáoù-?àúUÙìtëNßQž’æÜb"ÎÛS¯!s·<žqšŒ?ðàý ŧ«ýN*óN¹û«£êMZëPià¾X @É!—¢í^1œñ€9«Zæ›{2ø°%œòyòÙy[b'Í ·vÞ9ÆqÒ»Ÿ´§£Qö”ôjÕh¿¯/ò0ësÊÅ­|u4V¦+i´ørëÔy¿~…€Ç¾1Yzuš=Ã÷¶q½íÍË­ÇÙØÄc“D˜ÆyéœäWaö”ôj>ÒžJÚ[ɯÆáÖþîV<½¬Ic#,ÁÇ$NõÜý¥=´§£Q'{ù„}Ûy•Ý¥ýŽ»u¥iùè€F<¬Fó+)è ÁéXÖZ~©y«µ¹ÔL·1„Kwb-16NaTg¯8ÏZôo´§£S%–¢x\£©Vãƒî 'þÿÌŸ‡áoò<âá£w§éº^™s¦Ý®wI­Ì8r¨ Fžã#š±¥h¶·VÏöèõðÐéÏm$ §¤@#’1挌]v›£éUÃ\Z[Ëç²l2Ë3ÊÁzíØ=…j}¥=›×úõÿ1%oëÓüŽ{Â_¶[Ï ÆÎ‹ms=™µ–AƒÈ@Î8ù°3𿮬¦šÏZÒcÑo¥uª<¶÷&Ô¬h7‚²y¤``x9¯FûJz5iOF§}oýtÿ!ô±çž-M^úêþÕá¿ù&„Ù%¶ž$ŽUIf—i*AÝÝqŽù«ú®‘-×ü&Åô÷•¦·ìÄÂI‘„?ÁÇ$6:w®Óí)èÔ}¥=§ìØiÙÜóÛëYía×ÒûG¼»¸Ô­ZÏ«MÜ…òÛ”!òyÀç5>«¢ê &›³4:¥ŒZ}ùPr†,ÞŸ)‘~¤Wwö”ôj>ÒžMëýzÿ™)Y[úéþGšVŸBÔÍÁžÊ84ÛUòÉicŽPÍ"Žà¼ÿ²knåg°ñ“Jµ¼™îîcûdsؓݠl¤Ó'$t®Ãí)èÔ}¥=õC<ê c«ÝYêm¬#ɪ¨ÞÞÉÃ#yÛ .†1Ž•éuÚSѨûJz5%¢H:ÜšŠ‡í)èÔ}¥=€&¢¡ûJz5iOF  ¨¨~ÒžGÚSѨj*´§£Qö”ôjšŠ‡í)èÔ}¥=€9/ÿÈÛoÿ^Oü¤ª^è>µo_Iâ»r3ÿN9ÿvJ©ážŸsÐÞ~¿¢:ñ_ ?ðþ¬îàû‚Š û‚Šè9]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@Õ—üƒíëŠè"§¨,¿äkÿ\SÿA=5ãö?úæÿÍjÁªëÿ©ÿ\ßù­X4ôª¯Ö­?J¬ãš@Eoÿ!)ÿë„_ú•·©M¦<±·Ú/b·}àœ+g$`õ©àÿœÿõÂ/ý Jƒ[ÓfÔ†ž!h×ì÷±\>òFUs0:Ó[¯T>å ückÒ©ÓµŠ;ƒkç$jQ¥Î6›<ž2@zÏ]ŽöÞíã²¼[‹FÛ-£ª‰r@#6Óx泛÷maq™ù5a|ã‚EltûØÛÞ“RðåíÛëMð§Û^K0 #r>@lcŒðh[^_ðC¯õæ]ÄÖ_b½¸¹ŠâѬ˜,Ð̃x'ps‘Œn¹­ˆÇÒõÊ‘AH÷ÊXdóãw"¢OZ1c&¨Ãs'’H”,H6=Ç##‘SÜè×Xh+ÄÆxd”’pB)oýñUo<;wqc­À’@þí'ˆ–8 yÝÇ_ôÏjzsyÃÁ'[/ë¿ü¦®NãÄ7VÑ+Áç^ÕÚÑ£1"¶Ð ÚŸ0à’+V_h6ó<3kI,lUѦPTŽ óYáëãfÒ[MjÓ®ªÚ„™¶:žŠÄ ƒ‚zIo~ŸðWéq½¼ÿà?Ôѹñ vÍ_Ù×òÝ4^sÛDˆÏgo›o\ð 'TøºÍ<“mi{z²Z‹½Öñ©Ûq“¹üMRÔü5w¨ÅªKc¤]Ü5¸†k{¢Æ5 ’i=ðr9«Öú°ê_hDµ†ìÑj"‹ +î$àcîóõö¥­¾ÿ×þÿ¯Ëþ .›âk]JîÖî´Äf·’xÀY”c%pIèAÁ›­ê:¾§¦XiÍjxeÜ÷³…»¸ ËPXèv¿ðŽî’tÛgŠ\óFÞ9ñI{ \ëSèòëXL-¼Ós†(ņhaÎ8ëTÒè%æ%§ŠLv×cPd¹¶»Š,apäx<ò ãšMGÅ%t+Û«Kyb½´–4’ÚáuÜÊ:ƒx9ÅA…¯l­RÞÆ[eKÏ´éáó÷H!£“ý£†==)óøoP¿²Õ¥ºšÚ=BøÄQcÜÑF"9PIœœäã¿J_×åÿ y5yã²Kƒ£j,ÌÄD]@î~|cèI¬Û»]hÒiö³]ÚßG+˜ãU|¡q÷˜‚Ny¨µMVÕžÎâòÛKœÂ$W²’i -œaó³–=W½2×Ú¦c¢5£Y=Þž²£Ç#²ÆË'£'Ž;P¼ÀÒ½ñ=­Œ³#Z^J¶Ê¯u$Q†[pF~nzã“·ÓšÞIãfQŒ•Á'¡ ŠßB–Kí–°Ãýš-DQd}Äœ }Þ~¾ÕŽwkÿîé 'M¶x¥Á?1(mã‘‘ßÿ¯Ïþ_—ü|K®\iWšm¼76©tÒžô‰µAzôëE¯ˆÏ›¡T¸•<ß;LEò–=ÛrKH{ƒœR>•¨^ßè·—æÌÉiç…‹vÓ¹p»ALæ­&™"x™µ1‹sf-½»ylãÇ>´-ÁìA'Š,ã»h½Û[¬âÝï1䬄ãi9ÏR@Æ{Ñ'Š,ã»h½Û[¬âÝï1䬄ãi9ÏRqŒ÷¬»›]^Y?³´‹»ynŒþ}‘™£ -Í-7\‹Q»–ÐÚÝZ\F‹'—r€BH 0HÆGÖ«kÙ1ù¯ayq ¡y%U„`u',ä V“L¾MfMFÙ­÷gýž1!ly‰à}ßÖ²µß j:µÃO$ZuÛKf!)pî«o'9xþVÎsßÍËúÜŸõ±³uâx&‚ {k«é¦ˆN#µ@JÆz1,@ýsYwZåÜ÷ZöžÖ3¼ÂÊt[Žü¶s“Ø™4]SNº¶»ÓšÎYE”v“ÅpÌŠvte` îx"£¾ÓõK9µ{ȾÆö·¶á§ ì6XÊ£`p:‘J¥¹_Ïúû‹¥~xü ȹiÿÿÐÚ©ø—X}>pá"–õ"˜ì.vs€9Ï¥\ð·ü‹–Ÿð?ý ªŸ‰­o.!Ó¥²µk—µ½Žv‰]T²€s‚Ä óëYÐþ>_¡®+øÕ=eú“§‰4™4Ùõ»Åµ»m˜´l¬‡Ž ¸GïCø“KŽÊ+·šUŽW)µ¼‚GaÔöî?•sך.­¨Ùkwod ¸¿{q§š¥‚ÆÃ,ÌÜžz€Uÿè÷wšŽ›¨[Cqp¶Ë$rAovmä!ñó+:mä3šÕœæ›ø‹KM>ñ<’[LHG† $é×!T‘Œs*¥Îº¿Úº)¶ºˆé×qM+ÉÆ ª‚ON¦²fÒ5 {{²°Ô’È™^æÒD,þkC4…þa× 7SÞ¨·ƒu íÃö3«Û›Xçó›z¿–Ä‚†~pHär(³“TŠ] ]NÒUy ,rM…À‚W±Çn£¥T›Åe„6ÂþëKn³Ÿ& vŸâáNÕÏ®)eMGPð•Ô6k¡%´‘‘Ô©m¤§8Áê3Ó<Õ=ö=F9dƒ-IÞ§÷€ò½^”=/ýtðtþº¯ø&žŸâ='Tºû5×™)O1AÔ:ú©`zŒÓíuí:òý¬b™Åȼ¹ax÷pJ–6=³X–6¥ø\´!ÆÎH§%ÔùlcP^y³Ò¨é:.´ÚÞ›q¨[ß `Že¹¹šõeٗƾQžÛGjo{ ltqx£Gšý,¢»/3ÈbR"}Œã9PøÚO¿j}·ˆô›»ñeØiز¯îØ+•ûÁ\¬G &¸è>×ðÎ…5ª/Ù®È[˜gGYBÇ ÜîN@Á«ÞðäöXÚßé×®lœ˜îÿ´KA ±È$co43¤›T[mbky§-â³ûK®Çó ¶~îÜj£x»LšÂökLÓ[ZµÈŠHž"êr7(È÷ëPkMíÖ­©O £›HkhÛzŒÈYˆ^O¸ç¥V¿Ð/ï"Ó"X‚ìÒ§µ•Ë #º Pyçzg¥/³ýyÿ’ûÊÓ›úòÿ‚jÛxŸN—F]Jy$·ˆæÁ"|Ì Am¹Í^Óµ[-Z–Êo1Q¶8*Q‘½XÔW8öºÅÖ•¥;i&+­*häû<“ÆEÀTí 9±øV–‡g{ý©©ê·¶ßdkÃ¥¹p쪀ÌW#'=‰à §k²Uì®Tñ‹­4ûyಹݱÆ@…—PAlmðNkAµÈ-nµO¶Ý[¥½™ˆaQ÷®áѸÃOsךN³}£C¦ˆ®/¾ÓâLB´¡ÈpÄ6G#€sÅ_ºÒ'{½~IôÙ.àº{v…"™cvØ£,¤°ÚTŒòGJ_gúòSJmr9!±šÒUHî.Öö˜%Flç!A†ã‚F)Òø—H‡Q62^8qù¢¹è¥ñ´bs\Ü‹©G¨ïçeÞ9¤G˜D±¼¯Žy±Í>çEÕΨè1Ø+ÁyvÓ ÿ9B¢;ï%—ïn:sM_‡ùƒþ¿}õÈm.5V½ºm¬ŒyÙïMÃø¸ÁÉØÞ7òܲ2²¿÷J»w#Œf«Ú] sauÝx–Ò­Ä«e;@ Ä`‚x¬itymímµ }:hnaÔâK{ëá#Ï„)÷Ë0 ƒÆOðÕ[¯5­Zîî+2‚=j $C*6ÅH@<ƒ‚FGž´Ö¯îý?ÌOo¿õ:¹|K¤C¨›/œ8ŒüŒQ\ôRøÚ±9¦Þø£GÓïd´º»håo˜|—).ÕüM`\躹ӵ;x/.Úaç(TG}ä²ýíàÀÇNjíæ}*x±R ßo·T¶Ë¯ïˆ¯¯úâ§¥ÊëcdëºwöŸöp™Þ䬱ÂìªHÈ ÀmSŽy5£\pÓµ[}bÖM>ÆæÕ‹ÅöÉÄf ( Jd¶ì éÖ»¢S (¢ÂŠ( _Yÿ‘¢úóýJƒÃ=?ŸYÿ‘¢úóýJƒÃ=?硼ýDuâ¾áýYÝÁ÷A÷Ðr ºÿVkÏ|Eÿ1×EþuèW_êÍyãæ/úè¿Î€;«/ùÚÿ×ÿÐEOPYÈ>×þ¸§þ‚*´ÕÆ­6™¹¹‰rF8'¸¹gëõÀÆo.t—k2…*vŒ‘œsœoaô›þü¿øSX&H·R¥˜¯SŒqúÓÍ”>³ßçÿ¯`#¤ÿø'ÿP5Ô?ݸÿÀi?øš¬ ¬ÿø'ÿP5¬?Þ¸ÿÀ™?øª@Šïs5Ã#"²¬h`¥ŽqÛï~•r¸³¦-™ÙÕ.#tf9 2È0O~TþuÀÓݨ¯ ¢€=ÚŠðšóÿ‰¿ó ÿ¶¿û%}mE|E}íE|Éà_ i¶Z$ÒxƒF7fýT†1¬†9|êÇ9%rzt+\§ˆüöow{¡³Þipd¾÷_> 0ÝÛ€¤'VäŸ%Dâº7³ù–éÔNÎ,ûŠø&ŠØƒïj+àš÷ïȳ¥ל?ú x¢¼fŠöj+Æh f¢¼fŠöj+Æh f¢¼fŠöj+Æh f¢¼fŠöj+Æh f¢¼fŠöj+Æh f¢¼fŠöj+Æh f¢¼fŠöj+Æh fªz·ü¯¿ëÞOý×’Ò¼>µ3øY¥/Ž>¨ôß ȹiÿÿÐÚ¶~ËþßéXÞÿ‘rÓþÿ¡µ[ÖïšÉôÀ·ÃçÞÇ òâWÞ?)Ü~PqÔsQCøp^H¼WñçêËßeÿoô£ì¿íþ•?Œl º• µëZC0·šùbäÈ'9à €{ÓgñZmλ5Ì×3Ãb`JBƒfõs–É#ïc¯™‡‘·ö_öÿJ>ËþßéTt­zRêâÑ­.ì®íÕ]àºE µ³†IpG^ÕgâùÒÛX¸¾Ó.ÞÞÂâuûD Í‘¶1‚û‹cÛÓ}—ý¿Ò²ÿ·úVtž'ÓbÔ®,YÛÍ‚ËíÎØ|¿cž½ÿTŸÆÖ+˜–”É =ËEo³+.á¿æëŽH]Ä ?¯ëîëúûÍï²ÿ·úR}—ý¿Ò³õíMm¼6ú…½ÛćËdžÖC†eˆ þµSSñ•ž—wy –„ÑÙ77Ƭ‘ùƒ= »í¼=¦Ù\<ö–VLÿzH­ÕY¾¤rjïÙÛý+;Mñ:ÕÅ©±½µº†!7‘pŠÐä\1‘Ž¢›kâ{Y¥»†îÖïN–Ö´H—j£÷\üà«0 `÷Íiý—ý¿Ò²ÿ·úV%·Œì¦{+û(¤·{˜çºU4³ 1aÁ(Æv${«[ë$[f»®bΉq’¸$ç‘ÁÁç¥mý—ý¿Ò²ÿ·úTV¤Úœ +i÷–c¢ä .ÎFÖoÖ¹3Å­g6¦º½ûÛG©Ë½òÔà îTœäëŒ õ¢ÚØ:\ë~ËþßéGÙÛý+?Tñ zE­ՅïÙK"µâ"±ÀÏÍ»©íïUuZi×·–ïa¨MCuq jÑÂdó#œ@m¤Z½âÞ40›¤]‹1ˆUô ×?ÙÛý+œñŠÒÚÇT·Ó­¯®n-íYÞâÚ5)nY RÄ‘Î0xŠžßÅ6¶ºdÆðOæÙiÑ^LÄÞ+)åyäåHçâŽÿ]È;]¿ÌÜû/û¥eÿoô®wXñeªiéöY®by­c¼Yâ…$ÙHª @ÉÝÀúVšx‚9µ™tÛ{É̱ÏpŠžTLT6 ,B:Ö‚åÿ²ÿ·úQö_öÿJÈ—ÅÖ1^4_f¼kd¸¯z±!%'IÎz23Þ·ét¸y.ô‹[ø<‹Èa¸ˆœùsDsô4¶Ú]½œ ¬qA ýØâŒ* zНö_öÿJ>ËþßéV(  ÿeÿoô£ì¿íþ•bНö_öÿJ>ËþßéV(  ÿeÿoô£ì¿íþ•bŠâuèü¿À3Ÿô'?øì•WÃ=?»â?ùmÿëÉÿ”•KÃ=?硼ýDuâ¾áýYÝÁ÷A÷Ðr ºÿVkÏ|Eÿ1×EþuèW_êÍyãæ/úè¿Î€;«!:ØÓÿÐEfÁá]Úæ;ˆm¥Yc}êßi”á½yjѳ8Ó­ˆâàwùEbÚøÂÖîþ;(ôûñ;ÈcÚËÊG\üùw ãõ?ë›ÿ5ª>"¾¸´ÓÒ+& }w*ÛÛ’3µ›«c¾Ð ~yãö?úæÿÍk?Tðý¶±©Û\_ˆî-mãu[Y#ܥ؜’{€1ÜÒ]zþ?OpÅF¥i/Ù®¤ÙŒ+I´vÚwã§4Ý Wk­^öÀj±jÅr¥ÊlÈÜH*v|½éÞ´mü:4©ï¤Ò%†Î+”@°}ŸrG"ç.aÔ`cŽ™Ín‘ýŸ%ÅÄ× sypG›3(QÑUG ž=éÿ_׿×õù~,±—P„Å"°ò[.HýðþµÈÂ7yÿ= ÿ¾øWmâ-OO҃ϩ\‹xXBˆ'-ûãŽ=¬Ènìïm–k)üõ/´áq·ëžGoÌRMmq¸ÎÜÖÓ¹ÎÿÂ3{Œ‰ ?ð#þh²Æ$iîm HÆYårq[ºÞµ`—3Dò™dFˆ@ËHÉ=Ëïô®#Rñf©{æ!ŠÑ ðß"‘èzsÓÿ¯C”VáÊ[#N-:iä+:«mgY••xÏ89ý+Í>&ÿÌ/þÚÿì•êöÞÓµ ¼»¹ºÔÄ \ª€ÁNT Îúä×”|Mÿ˜_ýµÿÙ))&ô*tå \óúè¼/¢éþâ’Θßpó]áHã*>nN:dqXÖ7•äv–¨gÎ`$œŸ@ ¯M{Í;NÓ­tøÚkX-##ºBfnYÆ7/±ÎîÀíU§R5[+ø‚×ìò-àL‡±Ç#ŒgÞ H- ÓâfÉ {„¨¼Ž2YqÈ'¯×'¨^$¶¡amÁ¹$‚¡Ò–{›Ä´ŽâXã›å}—>Ý3]ô±ñ¤¤êFêÆ¥:ù—³\ܼ¯§™Óê?Û]ðí¾µcrƒQ»ÍÄŸ1t}Ü…$òã'žKuâ¼~úÂëM¹6÷´R€  ÷pkè¸/e‚¶Þÿg‘J²£`ž9Çùæ±õ×Q¶1\ijڳVç öÎ9SÖ¾n9•Ú¼tþ¶=o©i£<½ûÃßò,é_õçþ€+Ê|Aà»Í <öÛ®mcº1žã¸Çqï+Õ¼=ÿ"Εÿ^pÿè½*u#QsEÜâœ%iTQEY!EPEPEPEPEPEPEPEPEPEPEPEPEPJ>ðúÒR¼>µ3øY¥/Ž>¨ôß ȹiÿÿÐÚ ñMÄ3júï?´#¸0¯,#Pùr;zŸÂßò.ZÀÿô6­o´¿¢ÔPþ’/üj‹Íœ½Ç…µgµ¾Ñ¢žÈh÷—-;ÊÛ¼ôW}îq´óœ6FéSj~½¼øŠ[p5¶hw3|¢=»·qíÆ3]Ú_ÑhûKú-j´0*E¥Îž,¸ÕKGäIe¸PNíÊìÄãÆwª:n‹¨ÙÜêVs-”ÚEìóL[{ ‡™ÕJíÛŒçœþ³ö—ôZ>Òþ‹E´°_¡Ã‡ú“iE&¡]™¼›‰FïžÏj¦ÁÇÞÚŠ}3žkbó@Ö ºÕF‘-ˆµÕyŸhÜØ•Ãh9ï]Ú_ÑhûKú-]Ái±—ªxyçðrhvR 1¤1£ÌH#)çöZ©¨øjòò/,rÀ­$˜ü¥cÚwqÇ>™­ÿ´¿¢Ñö—ôZ·¿PZlbj^½¼Ô.ç‚í-üí+ìI"“½$ÜNî9õÍcÚx.H§%í¾™§[O¦5£›wÉÎL¹G8úýk³ûKú-iE£úüÿ̟קùyj'ñn­o§Ëuaso™qo%Öžîáw„P[ cŒíô5»¢ø^ãMŠPú'‡Vu·1$ð«1<|ãgʤuµtßiE£í/è´_Ÿù‰+_×c#Âú%î%ë\}žÞÞb†+ižH¡À;Š–Èà+.o ksÁ©iFKÓ/ï^âIƒ¹˜#0%BíÛž1ß…uiE£í/è´u¸Î7^ðUþ§¨ßJ‘i· s$O ÍÔŽ&µUÛ•@Œ|¤õxæµîü;wp£á+‹Ë㸉c·‰-ï”ç÷Ñ)WqýäïÙt_iE£í/è´ï­Åm-ýZ„~¾GÕm Í»Ë<‘GhI`#¶ŽMê§Ž¼·OjÐÔ4 Fïİ_ÛÅah±LŒ÷‘M žXÇXÝ…`zrNoý¥ý´¿¢Òì>ç)mà£g­M/ö^‰{m5Û\‹‹”"â ͸¨ùHlàäWmU>Òþ‹GÚ_Ñhé`ërÝSí/è´}¥ý€-ÑU>Òþ‹GÚ_ÑhÝSí/è´}¥ý€-ÑU>Òþ‹GÚ_ÑhÝSí/è´}¥ý€9ÿÈÛoÿ^Oü¤ª~éøÕvC'Š 'ñæã÷dªþéø×= çëú#¯ðÓÿêÎê¸(¢¸(®ƒe×ú³^{â/øù‹þº/ó¯BºÿVkÏ|Eÿ1×EþtÝYÈ>×þ¸§þ‚)‘éÖqjßÇ-ÔÊäHä~CÒŸeÿ û_úâŸú©è«ÿ±ÿ×7þkV W_øýþ¹¿óZ°h'éU[­Z~•UºÒÎ>/Ý ? <Šî³m–ª,|ìç$`mÜAäs^}ájšmäÜE.м²2•“Î<¹Ýö{çµzOÅ]MgÃwØZyNc<ª¯œ üs׌ׇèkü$úD–Ïv÷q¹’BÄ!9$m$w'#¡äT¸Ýé£5Ueʠߺºt=»ÄqE/„îíïnVÒìZµÛÄòªºle1®÷˜¨Îr Œž<ÚÒ‹ØÕíí¥pFsŒ/¿'óï^Ó¬èúf¯£ˆï-ZD ýc39 O,Ø9ÈÉ‚såÚN«cl·3ý–(ffŠ)¾VXÏ `òHçÔô®LÂu(Ñ禮ÿ®ÆØ.YTqnÉŽ¶×5k9tÔX¡’1ù™dn\rÚãŠà¾&ÿÌ/þÚÿì•ÖÞ^A}­¯ö~ÙLÑ…l¡O˜É'“ò“Û°ü!ÕF‘·¥jÄ Ciæ<1†;ž_©Ú,«‚OáØ×£†¤Üyj[ÞN÷ü~v8êMûyÅKš*ÖþïøI´ ¯o¡uÔ.ãýä2.Ö†<œ(#dž#ŽÀŒ©ÏSý›¥ê–¯§Î¨•[9èAõÎsõïÍV±¼¸Õ¬Ìþi–?ÂÛÕpNvàÿ½ÏÖ®ÛZ¢Û,°ÐyÀ?Ëò(ÇQPååÙ­ÉÂÕnüÝÅ\|?2Y\ßÛ^í®ÿ.$çolúžÃŸjÊÓíO•MìóùRXW Æ äñ¸^µÙ@Z‰aÈ“r± Wq éú籪 a=ô -eòÓ).J)îJ€wuë­qT~ëKcÕ¡*u,æ­"Ö;·‘{¬‡;$S˜§_U=úÏ· lÇ#FÛd«Œ‚;äzW?ä‹1åX‰Ü%Oš>¹ äsœt88äf­A©RÂâU{Rûaº ¸mêžÌ'§ÔøµhÊ.èìz>Pñ Õ–•¡Í¨I"lAòÂî3Ÿº£×$vIàSh÷ w¢X\¸PòÛG#è Px¯&ñω·ªµµ³°±·bC‚²8È2 vǓǴ”£ï­LþiKãª=7Âßò.ZÀÿô6ªúõж}(fqæßÇî¦ÙÔ7Þàî^:qš±áoù-?àúVwˆ[½SF³‚ÚwhïæIDGËDPÙËôÏN:óQ‡þ>Eâ¿SÖ_©þ,–/´Ý¦˜Ï¤ÛN`šïÎ µ˜GŽTùƒÅ2ë^eLj.ç6­noqò1pÚ1òuç®ióøNY~Óhš›&“s9žkO$$¶æQ&xR{`žO5-÷…þÛý­‹½ŸÚªÏ—åãßœãÛªÛ_ëc¥/X¹»Ôntëû³»†4”›ÍGF$¸#¬{-{X†Ë[¼’Î;»k;›ö®B.Ì`ù®4Íž ›Uó³æ[%¿•·¦ÖfÎsþ×Lvª¶:ÅõæÛä}:êY&{Wƒæ ý~}Ý3Î1øÑþOóó_‘^_ÚG©\ÚùdÇŸöï;w :•é×OãPÂW{$RÉm¢4«i Ix>ÐÆÌÊ +óû5]|Ó-ìÛP•š;Ÿ1å)Ìà/”yéµTgÛ8­ ï ÜÍu}%†¨lá¿P.£ò’Bíʤ¯J—õýmòçý[üÉ5ÝN#áC¨ÂÓ˜d:4ùNC2ã ƒŽ¾žÕSTñ]ÖŸs©ˆt‘qk¦ª5Ä¿iØøeÏÊ»yÀ÷¥¨èQ^xxhðIäD«#mÝ´!q‘ýÜU{Ï }®=u~׳ûV5Lùyò°›s׿õíCë`KŽÓõÛ™ï®,otô´¹ŽÜ\ÆàHŽ„‘Ëm9ñTì ŒÖÍ%Å‹Z·Ï´ó³`u+£ÓôVÆ…µxe —› ¬§³1 ó~C4?ëñÿ€%çýmÿ³¢jSê¶_j– hѰc6÷^xaŽçhÁöæ¹ËOE¡éºŒó•w—Xš„³×9þ'<*€5¹¡èO¥]_]Ís³^. ·òcAçnO'<œóÅT—ÂEÒãËÔ noõ³ù ˜d# ?:œž8ëG_ëºOë³2u\kZLpéû#¹:Œv’‹kÜ«©¾I”pL‘Í[‚÷WÓõøìq¼ië4éq~Ì"Ì–ó ~|t­GÐîîa²—ðÉ-µâÜîŠ×Ë ·Ž:õÉúSï´[™µ¨õ;+õ¶“Éû<É$jÈ›· |ÓÏ=zS_×Ýþ`ÿ¯¿üŠ÷^)ŽK‹;}-uI.Z@.¢lœ° Îã kɧ]k“Ï˵¹·Q›z³º€nIúõâµ'ÑÒ]cO¿Ö!h%Z§ßÞëž1JÍÕôš jæY®^dQm i"hñ´¨ÝȥР¯kÚŒºN§cs§­Ô1A:ùW^``Ò…ÆvŒ­O¬ø—R‹LÔ-ÚÐXêvâ dâDtyðÛF:xª¶š>¥â­RKÛ‰’9`‚ç–ÄÛ’RBç³g98ëÇJÞÕ¼0ºµÕìÍvÑ}¢Ö8*d£#— מHãÛ­>Âïývÿ‚kÙIw-°kÛx ›')ÆEÇo˜ªÿ*±Ul"¼†Ø%õÔw3dþò8|¡M¹?έR (¢€ (¢€ (¢€ (¢€ (¢€9}gþFˆ?ëÍÿô* ÿZ›Yÿ‘¢úóýJ‡Ã?Ö¹èo?_Ñx¯†ŸøVwP}ÁE}ÁEtƒ.¿ÕšóßÇÌ_õÑz×ú³^{â/øù‹þº/ó êËþAö¿õÅ?ôSÔ_òµÿ®)ÿ Šž€¿ñûýsæµ`ÕuÿØÿë›ÿ5«€"~•UºÕ§éU[­ 8ÏêÇG†ÚsšÞIà†æ6Ë-Æå`AqÔ`ôõæ¼ÎÇHÐ|} |b‚Ü᣷…V[‚¥””p¤…ê 9çµzޱö<•Fù¡u 9ކ¼Ûû'OÄÃìP9ÕÜ”ÈÎ0‡©à`P›M²šHè¥øy©ièÚ5 †';Dòç¦H`GÊAíßƒŽ¼Ž»¡_ZXG«Þ4ŽeœÁ#KÃoäþ=^sô­kxÒÕY`@†Òê?Ïôô«Ój—·6XÏ7›kŒ¬R(e;>è90èsžù®¬.#ص6½äÿ¯¼ç­KŸÝOCˆÓVáo–{x'”[6_&=åcy Á<œVoÄ™d‚]"X¤häF•‘Ðà© ö5êQøRŠÄØÆöéfUÛ­¤B2­œ»qƒ“Ÿ­yWÄßù…ÿÛ_ý’«ŠúÕ_hãm,*%kÜOxú-1§µÖÃËĦoµíóHØ _'$`g#-x$ñëA’æÑ'Óf‰¢*Y'ŠD‘i¶ç!€ÈŒs‚+æjè<+âýG—ë5©Ym‰ýõ´˜*êqœ§åAœŽ+ŠQ}˜µ³=ÙƒI§ ¶²‰îD‡rnp;[Û`Ôm¦\¤í ¶òâšc¼Cón¨3ÛÒ¬øKÆ:7ŒmÉGz#âÒ\îsÔ7ñ.OQþÎ@$ é|µòŒŠä êGo­^wÔËÛÉK•t<ïRŽø$÷v¢á£Æ^9SÀá±ß<ŽG>µÄxëÅP\[,|̳ÞG¶ù8HÛøž{ç¯Pñf»gá½"[Ù·3õq+m.äü g ÎOà1ÁÅ|áuu=íÜ·W2'•‹»žäÖt—ºÓ[þ‡lñ Ç—© {÷‡¿äYÒ¿ëÎýW€×¿x{þE+þ¼áÿÐlršTQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEzo…?äZ´ÿÿèm[ÞDÝýM`øOþE›Oøþ†ÔÿL±I¢n‚)wêq ó7|„†ù†çë‘íB[ n÷lÛò#þïêhò#þïêk¸ñN¬–·ÚÌVöGG³¹h&Ý纣ìw £œáprZeöµ&—qâ›»;[aqÚ…w |Âê£/óvÏlPµ²ò#þïêhò#þïêkHÔõ6ÖîôXZ<ÑAÄsZ£"²1eÁV$‚ ú÷¬=6÷_ƒLñõ´ö³Çowva‚hœ•níàmÀÀ£ü®çc¶ò#þïêhò#þïêk—Çjš…ÈX£kôϵÇ/9yB‡Ù×û®‡ñ¥_xŽæ+×¶·Ó•´ÈPݤ¡ó,¦0쩃ò;¹¡é¸-mn§_äGýßÔÑäGýßÔ×7â-N¿ÿi-²Mé«ÙÆÐŒí ñŸ^ÕOZñ.¹gs®Iežm4„Þ9‘÷Êw0l } MÁk±Øyÿwõ4yÿwõ5ÎY뺅¾£ye¬É`¾]½ŽædE\C†cÓäÎÓüo0}L^ù71ÚX›Ô–ÞÖ[}ê vÉœöÃŽhþ¿¯¸7þ¿®çiäGýßÔÑäGýßÔ×/Š5­"XeÖ"°ky¬'¼Z£‡Ë v–,Cgv3QØx¿[ŸÍΚ.Ù¬Þâ%†Êâ’(FZA‡Îx+Ž9=?¯_òïý]Î×Èû¿©£Èû¿©¬o jÓjörÉq{eq"0 –мM Ç*êìH?•bèúž£aeâRæâ)´ëK˶òLlfùO9lÛhzoÚàµÛ½ŽÏÈû¿©£Èû¿©®nËZÖ`Ô´Û}b+§˜~Ê]W~ÖÜNî3ÈÇ#¥QÓ¼Q­5¦—ª_Ç`Ú~¡p-Â@޲ÂYŠ©$± 29àu§ml.uî–ñíÞUw«¹±“è=éþDÝýMq~'ÕÓT\z^õº‡V„wk,h‡ÇP7CV$ñV¡§[j¶÷ööÓjVOD`Ü‘Mç! ’W9äô¤µWþº˜=¿®§YäGýßÔÑäGýßÔשk½µ¦±¥êfÛí?ÙRÝÛÜYA€ CA‚yöª÷²kÉ¢xouý¯Ú&½€Fé ªí11ăÌËþb…¯áø»ÓñüÎãÈû¿©£Èû¿©®R]sÄ-&¤¶‰¦È4•äÈŽ¿h}›ÈA¸ì#“»šKj××p¦Š¶Iék¨ÿ¥Æì['„ùXcëÍëýwýß×õêužDÝýMDÝýMrº'ˆõk«Ý#íñÙm^Õ§ƒìêáâ*¶±$†àõt®º›Vw#ò#þïêhò#þïêjJ) Èû¿©£Èû¿©©( üˆÿ»úš<ˆÿ»úš’ŠÈû¿©£Èû¿©©( +Ä©âËp£ìOÿ ÉU|5ýjçˆÿäm·ÿ¯'þRU? Z硼ýDuâ¾áýYÝA÷A÷Ðr ºÿVkÏ|Eÿ1×EþuèW_êÍyãæ/úè¿Î€;«/ùÚÿ×ÿÐEOPYÈ>×þ¸§þ‚*zjÿÇìõÍÿšÕƒU×þ?cÿ®oüÖ¬‰úUVëVŸ¥Un´€ä|pŒö˜Q“ºý­\'‘'÷Zõ‹ßøø—þ¹Eüå¬+]\Á©].DRR%ÎXœ£Ü‘\u±n”¹To·^汧̯s„ò$þïëG‘'÷Zëïõ™¥¶…,⹆á®Å¼±íÍO·ŽÎ@䌷§j73ß\ÚKm)XWÏ;ð+Øo½’~èÅgõé%~_Çþ^É^×8_"OîþµÇøëú®³ö°ZùÞW™¿÷ЏÎÜu#Ð×´¦°Éy¨¥Ä ¶ÖÍÂãjŠÄ›q<žƒÒ¬Xê‘ÞÌЛyíæT@,§£ þ"“ÇÉ+ò~?ðØ®çËßð€ø›þŸù?þ*ø@|Mÿ@Ïüÿ_DÇâ–¿1yÖ2Ÿ¶5¿Ù0PØß÷AÉàUäÖ’5ØêîvšeXÑ0Ø=ÀÚ8''Ч’ûüöK¹ó\^ñT$ÐØ&ÿ gþGÿН_Ñ­å´Ðôûi×d±[G®AÃŒzì.u›ÕG{híÊÛZ%ÔáÁËîÉÚ¸0HçæÆiÑk°Kx 6÷£Jð¤îc:g `ät=@éKëòµù?øìWs¢ºØ¼Cg"³¼sÃ’Ó¤² ,kÕ—žã‚æ›a©Ï{­MA=¼+lŽ±Ìª %›æàžÀuü©ýzZÞüö+¹ÊQ]JëkØ!»¼‘圈€¨°ˆ Œw4è5¦¹Ô–(mÞ[G¶Žu•v›‹rÙ`q€:zÑõéoÉøÿÀb»œ¥ÖÃâ9;Ç<1y-:K*²F½YpIî:€y¤_@c5­Ü £„‘Ws‡%Wh y$c}zÉøÿÀb»œ×z!?dº3ùÿg6ø]áöîþöÜcœæ´‰‘à܃d…rŒàã¾ò©y‹[Ãñÿ€5A>§ŸÑ]n¨Ü_IyÇ–Z bh‰ÈÏ(Ä‘õïPéÚÛ4ÏÜSü×rÃÁUòÉ ÛWƒžƒƩ㥪äÛÏþ½ŠÞç1Eu²ëñAç,öwqËR#`™3mpØëêE/öôI&Úä\ ¼³m_3~7c®ß»ÎsŠ__—ò~?ðØ®ç#Etz~¼î<¹mîe¸–y¶Ä¡"+㜰dt$ÖÕÝÔvVs]MŸ.$.Ø8K(»8~?ðQO©ÁQ]ö»4RY(k}9'Y {ðÝÛŒmp9ϯjt:Ííä1[à ]܉¼Œjˆq¼ ##¯Z¯®Ê×äüày Ù.ç5EtwúµåŒ–pM}¦@ò‰KÏ*W<úšÓÒ/_QÒຑ@x\àà‘‘žÇZRǵn]=à QWµÍ ÿȳiÿÿÐÚŸ®Ú_j:®‘‡ìÖ×Kw-ÓH¡FÐÃ`\î$ävǽOh Ã*¤ú˜K¼‹µK-â@c\,~c„MïÌzž§Ú»©Ïš1Ÿ£1’µÑFXOu+››Õ´šaq5ŠÊIrF3Éö©¯³£C­[×íË™5ð„KŽÂMSS‘`‘$¶™åO2Ü Âí!qÓ˜ÓóûíùÑæ?÷Ûó  ©¼k9¶§©©¸ŒGw²e_µÇÏ…ëŽ2»x­Ðlã¿7qïŒýŒYÔ€‹9ëøÔžcÿ}¿:<Çþû~tZ×ÖvŸÙ\“Ÿì¨Z70ù”¨S»ŽNlVÅf%âI4Çp­,Xó_%222;dSÚb‹¹¤*=Kb†î…CÌï·çG˜ÿßo΀/ÑT<Çþû~tyýöüèý˜—‰$ÒC´±cÌE|”ÈÈÈí‘Ryýöüèý“w¨Eal×7S˜áRbO8©?˜ÿßo΀9¿ÿÈÛoÿ^Oü¤ª~þ¦¦Ö‰oÀI'ý úÿ»%Cá¯êkž†óõý׊øiÿ…~lî û‚Š û‚Šè9]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@Õ—üƒíëŠè"§¨,¿äkÿ\SÿA=5ãö?úæÿÍjÁªëÿ±ÿ×7þkV Dý*«u«OÒª·Z@PºF’êUE,|¨¸=å®e|-~úJé—7ËlŠ»² ‚¤NX‚8äcšìmÿä%?ýp‹ÿB’©Oâk85ÔÓŸ•æÏÊŽz)úþ™¼sTÂóÏšöÿ€i–V±‡oá¹`KaåCCq石YùJÿ!\c'žzÕ˜t‹Û}Râæ7o"à‡’'pP¹ žŒWQ(ÜðÆI #á°qÆÒ¥MöKoù÷‹þø“À§¼¿"½¯‘ÅMáë™§¾ÜZ^¯ïbòNàÛBå[¢­noÁ¶ò8á¹”+£:Ü%Ûܤ¾Ià3ÈFy?Z©w¡êvOú|7Üoœ’!R¡dmØ!zrn•è_e¶ÿŸxïGÙm¿çÞûàSX+} ö¾Gká{¥Ó YÖItô³lDHRe½þ÷Oj™ô]VÔÞËa)tÈGƒ‘ @ †Îàk¶k{DRÍ  d’€([{GPË ¤d€‚(x+»¹~[t9¹¬.'³’I2ñ”-°÷Î*…džVêÆ(d[‘,Væ–6‘8 ¤dp v¿e¶ÿŸxïGÙmçÞûàT¬½-¤Çíßcƒ›Â· Š æ‰$·[kÑ2 ÏBNTòFyëíRKá©Þåö<‰g,±Í,NK2clð>UÈÁéÚ»)bH%„Ä¡±FUå'8ü*Z¯©{ò'Úô±ÂÉáiä{‰iÄ—i$w,#?:‘…g½º÷õ©`Ð/“írK17À WŠØ¢ àíÉÉç×ò®ÖŠ_Qº·7à‡íµ½Ž2ó@ºŸJ¶°·>Tpì ë"¨û¤8Î;ö«éwwZT¶w[‹KFÒC @ã€IþuÕÑKê ý U­Ðã¬4;«{™nnOŸ,‘¤»·1¨UÎ8ÉÉç­Aqá»Ë‹«Ÿß2Ú]H’K·;ŽÐ£³À;Gjî(§õoÍø öºZǾ½†xç¶™’T–f%í˲6â¸Èä`sŸÂ¬ßè÷—7\Û;Ab©8#Ÿ”üÇÖ»Š)}Gûß‚mäyüû%•Ϳ٢’7¢C˜Žr«çþÞ ‡Ãº®¨.Ϋ ¦øâŽ-Ð.rŒ[,¡™HÉõçžz=A{+Ac<É÷’2Ã>«ê\…í<ŽBßÃrÀ–Ãʆ6†ãÏ?f³ò•þB¸ÆO<õ«–öz§ØåY· †y 7—ŠXíàc8®4¨Y¤šåœŽOœËŸÀ)²-¿¿sÿþ5¥¼†«[drö:Eå½Ì÷WNÓÜLIH js€O©ïUÃW†lKpíj·r‘%¹VÄ‘–ÉÈöµvÙßß¹ÿÀ‡ÿ?²-¿¿sÿþ4þ£­ù¿ÛÈàmü<˦vÆ»£´(Ͳ@ùs¸îcŒgŠ¿?‡.^æ[¨d’;ƒp³ÆÆÁŒ!gF}:×_ý‘mýûŸüñ¨æ³K“C$ßë^BÀ†`½þ¹ü)¼nî_{UØâåð­ìÖ_gy–•åy>Æw+3g1ß!¼Ö”:›XKà™ÙŸk4[•T±ÚÏ®²ŠOš³—àV³½ŽÏÂ’[Î’KûÄnaKr‘áÂŒ*äí/Nzšzønò(m|‹‰VâÓrÃ+BXygøgœ9Èé]ÅÞ ûËðAí|Ž <1¨Å$sÇr¿hW•ݞ̲7™ŒáwŒco©­-3H—M²ádïgfòö‚X’pAÏJêè¥,2³—àU¶¶+Ù+%¢+Ï{šÃñÄI£„ÙûÍF$mÈ­Á Ó#ƒî9®’¹ý[M¼Ôµ=7i,mg[—bÇÌgPÀ(Æ9çð®ÚqäQk~Rw»õ0.u­`iÚŽ½ú$wm°òT«¢>¾öãÔ`ã§íOV½´oËk"E,/j±8‰2»Âƒž>n½óŠß—ÃZDÚ¾’ÌˉÎÁÇF)¤û‘šš}N¹û_o»í…†ò˜ÛÐñŒ•Km­…ÔÏÒn5 Þi7·Íz‰mÄSzù×rœ펵¥­]ß>³§i6W_cûJK,—5vÂcåPÀŒÝÁàU«éW/lïkµ­PG ŠGj |¿)>£¤ØêÑÆ—°ïòÛtl®ÈÈ}C)~‡þdœf¡syªéö¶7W9šß][CskûÀ ÛH+žFF1‘[>+­¼4/3LÈñ#*©oÞ¯8Pä+Z= LŠÖÖÚ;UXmeÄ¡ˆÃŒüÄç$òzç5föÊÛQ³–Òî!,Œ:FGÔr)ÞËúò_ë»9››­Y¯¼I–¨n!{o/li¿iP[à3c8ÜqT¯î[SÓ´dS»k„ÕÖ7šh9¡}ò”Û·##·zê[@Ó.Å ûFÏ5–y›`ÂüÁ²0cÏzþ­#û5¬ ¦mÚ_8æWÞdþöüîÝïœÒ[ýß t2uk­SJ¿€Ýj7‘iQÄ»ï"·‰÷I¸çÍ~UÆ9P^kGÄW÷VɧÛYL°K}t°}¡”7–6–$Á?.}iÒø[HœF³A4‰…÷R•`Fá» Ï÷³WïôëMNÐÚÞB²ÂH;I ‚:G Q@V¹w|Ú'ˆt‹Ë¿´µ©·Ûs媳,Œ>VmÈÁíÈ#Šéo-åÒü+¨r×2%¼®X£Âp ª…#ð©£ðæ•-‚Úÿ£ÌâIA‘‹;,Äî'Ôö«÷ñ]ÛKm:îŠT(ë’2¤`ŒŠOTÒz¦ÎA®õk»‹k[=LÙ*héwˆàƒ>qÈ+Àö¥Ñµ}P\è“^êh·Õmg¡D²ª·ÊTdŽHç5ÓG¤XÅ0™ ËqjöÿT:/_×­6-O„Xˆíð,c1[ìv)Éç€:橽[_Öÿð Kkÿ[Á93ÄòkÖ`K}>›}ÒD×PE!Få1ìù±ïJe®¯¬¼­.¥¾JãkY¤)±£°±¸‘´sŸZ謼1¤i×qÝZÛ:Ia3ÈÉn»T±UübÚøJq¯ZÞÉmei´í8[k‰_{GÜ`:äã4»XofVÐuŸêrØßˆ.^Ö豕8Ѓ´£ó îóÀ­? _ßIy%¦±wr5//{ZË,`g£e2ò$ŸZÒ·ðæ•ix×VöïŒX•Iœ&[© »h'>”ý?AӴˆ¸µ†O9“g™,ï+Îp “ì(@ÎwUÕolßÄòZÈ‘KÚ¬N"L®à “ÇÍ×¾qT|G>£ ž«¤]ê v«­ÄW #¦é‚v€§îäq]”úsö¿:ßwÛ 4ÿ; å1·¡ã)nô]:úK‰.m–V¸„A.æ8d1ž9$äsGoëúÔ‘{&©¡¦èêÒ‰.VY¤½’Ì›SEBçæëŽ‚­ø{R¸¹´¾KéVY,n¤·iÕv‰€w`p;Š•ü3¤Ée£ÛÈÑÄæHÙ®$2# »püêí–Ÿi§Y­¥¤  Ÿsœõ$žI>¦€9M'^¿ŸÄV(&¾›MÔW‰®àŠ1ò€ÊcÙócÞ•s^¿Ôl5xåšêæÏFX×3ÛÀ’€ûŽD»*¸Ç w95£eá#N¼ŽêÖÙÒHƒÁžFXÃuÚ¥Š¯à*Kÿ麥Àšò%lWÏ#r7 m­øŠ;sÕ5kË6ñ<–²¤rBö«‚$ÈÞxùº÷Í%þµ«èSj62_ ÙVïoq§;¸R³Gq,À*’r]ðÙÉíŒbµî|5¤ÝΓËnâeEÌŽy™G@ÅXnüsGaw2µFwñ«H›رeÎpvÉ‘Lð×õ5.³ÿ#Dõæÿú •†ºŸ÷aG⟯èŽÌOÃOü+óguÜQÜVç ˯õf¼÷Ä_ñóýt_ç^…uþ¬×žø‹þ>bÿ®‹ü躲ÿ}¯ýqOýTõ—üƒíëŠè"§ ¯ü~Çÿ\ßù­X5]ãö?úæÿÍjÁ Ÿ¥UnµiúUVëHíÿä%?ýp‹ÿB’šú‘$#éV,ìK35ºO©8§[ÿÈJúáþ…%aÜøªþ hécFF¸.1ö¢7©èßs¦2O¦ 0:9N.-?ë©ÿЭJà‘=–zù§ÿE½=Ÿš@YÜ=hÜ=j®ú7ЭÃÖ‘ŸJÄ­VßHÌJ‘’2:ŽÔ1œ¼zåÞ«áíeof´Žu²µ’Dé4iá·˜{€C«¨ÙèÑØê1Ù\Aq¤I,>R:ãb «åŽrr­Eðäî$¹¾½º–kfµó&tÊFÝBíP?š’ãA´¹ŽÝIÀ‚ÖKEÚÔu Iã®Pö×ø·_×b—öƬ ­–––*iivDèìm‹†u9©têw7šWÛ’Ïìú¥»M¬"m¬I!¸=@*ä:=´7 :¼Å–ÌY€HÆÀsžÎ)-´K[S¥ì’cý›Eæ0*æã“ÛM«·ýuÿ€JZ%ýtÿ‚k]7ï-?ë±ÿй=TOm­ÝÝj÷¬ZvPÛOg9Xa\ ùмç9ä‚0{WO;f[?úìô[Ö~£áÕÔÞa>©¨‹i¸’Õ%Qãîîû•¹E½gY7ú¨ÓÖÁ­´äG)*¾ùMÇ ò5±â··±·»°žØ3Ú £m-´²¹R22PáQ’1N>’ïZÕžk›Ë[,vò¨Y&<=;¿{á{[¹¡º»²n-¤[fP¯Î §¦O#i¿/ëúПõ·ü­j:ôšRZÄM¢]Ë%Ò³€;T#ž9ªWz´ÚdÞ#¹‚ÞÛí05²ï!±!e,7vÏÅkOá»wki-îï,ç‚n&·u ñŽŠÛ”ƒëÒ‰ü7ir—Ë$×í¦#+n\æû¤±¹ò%dØÀw®~b¼gµd¥ÔZÍ·¥Ø_êPXMÄÓ3\:Ü‚ùlä–f9ç°í]F¡¦I¨Å—©ßX”mYìã®åj Þ°[;{iîíe´wx®¢”yÛŸ;É,;³ÎE$ _ÝÜÜéWÝNóÉgy5¨™þôŠŒB’{œ`í[õOJÒí´}>;;PþZ’ŤmÌìNY˜÷$’jåSªš—üz/ýw‡ÿF-[ªz‘ÿEAÜÏ?ïâÒ3ÄZ¬ÚFš.!X—YÁ*ƒ“¦>¤W%ÿ Íÿü÷±ÿ¿'ÿŽW¡Òäú×=ZU'+Æv:èW£N6>gÞçÿÂsÿ=ìïÉÿã”Âsÿ=ìïÉÿã•è™>´dúÖW­ÿ??ø&ß[ÃÿÏ•÷ÿÀ<ïþ›ÿùïcÿ~Oÿ£þ›ÿùïcÿ~Oÿ¯DÉõ£'Ö«ÖÿŸŸ‡üúÞþ|¯¿þ›¡_I©hÖ÷r´lònÉp¼1 ŸOZÒº¾·²0 ‰ åÇ…'.sÀã¡äñIY>'¸žÞMC4‘ùšœQ¾Æ#rÙSŽ£ÚºàšJ-ßdpM¦å$¬µfýW†úÞâîæÖ) MlTJ»HÛ¸drF•ç×šÏØ5]`ëQêÖºƒAŠÎDxHÌ]róœgœƒÅZ×5 èÓÅ¢;ˈŒOf±l”ƒ`»¶ÿw9=)­Uÿ®ŸæO[ýÌhÉ6›âÛý%o.î->ÇÊ ©šVF,êpÍ“ƒ´qšÀ“Xº›Ävwö-s¬š¯Ø¥ê,áÀ,¬>ÎFÔ ûsBÕ¥ßüì—ù\î®5;{mJÎÂMþuØs@ ÏçRXß[ê6qÝÚ¹x$ÉV*W88è@=«Z`ž6ðáf)tOS±x®r9u+Ÿ èÚ„—·SÛÅÏu wío<Ÿ7 ¶ÐÊHŠ:_úê= ]@o  ™>Ð#³óÎ3LÔÕÂGö Sƶ—Mwu 2hÐÍûSÂÒ0Ÿ›nê2zÖŸ‰&yuíLšú{+ •™¤’LM#¨SxäucÁçÚÛçúŠÿ×ÈÝÔu+M*ÐÝ^ÍåD.v–$“€’O k6)¥ NI$KC™áua–Ú2„nûW ,’êze¤÷—Ñxˆ[Av%+$‘€Ø;×I‡¥t¾*ó4¯N,înQâh•e3³Iƒ"ƒ—''‚GZªÿÖËüÆ÷·õ»_¡ÒÑ^uây$þ-¼TÔ “LŠ'¶XnYc_Ýî9Lí9>¢®‹Æðæ©©$·š…ÕŠé"õ’iÚWW AØÌr2?Sëåp·õ÷™ÜQ^meªjúlÚ¸ˆÈÊ4ƒ{ošƒ^áÁ Ìê28¦Í{q¥=¥Î—¬^j3O¤\ܸ–èʯ"ª`™ÂòOJoM®¿ämýtÿ3Òè¯:Ñ¢×®-šâßW†8®4÷&YuFºýélJrôâ·|!t»¯tù¾Ø/­¼³8žôÝ)Üž‡Œ zS¶¶î®t—Ö÷Âco!q ­ åJáרäsõS§º‚ÔÄ'™#3H#Œ1Ææ=÷à×5ÕåÕ©·kûÄY|JöÌÑÎÈâ.~@Àä: ©¨« ±¤ÝßÝÉig¯@‘Ï-à QØó3»«psži-mòý?ÌoKüÿ ÿ‘éÔWv"ŸÄK¤Ï¬ÞZiÐiâh;ÖF™·ÌÒg-´Á=ù«šF¹*ü=Ƥe˜Åo#³ Úò¢– ÃЕçÞ•ô¿õýh {MÃxNêýƒS·¶»Kûˆå‹Î͸†å£]£*Òó’3Î ]®Ÿæ+ÿ_ùž#ÿ‘¶ßþ¼ŸùITü5Ôÿ¼jçˆÿäm·ÿ¯'þRU? u?ï硼ýDvb¾á_›;¨>࢈>ࢺA—_êÍyãæ/úè¿Î½ ëýY¯=ñü|Åÿ]ùÐueÿ û_úâŸú©ê /ùÚÿ×ÿÐEO@ _øýþ¹¿óZ°jºÿÇìõÍÿšÕƒ@?JªÝjÓôª­ÖÛÿÈJúáþ…%Y0DgYÌheU*oÌê3éÀªÖÿòŸþ¸Eÿ¡IXw^!ÔâñHôËÆÓc>[âÒB\÷pqÐzwö¦EuÉ-!Œ£nWOÇ©VÅÙÿ–±Ÿûr“ÿŠ«rs=°ìdéÿcý)׺ŒØNX‰–öŒüÇ8Ïå@qwÿ=cÿÀ)?øª1wÿ=cÿÀ)?øª×ͤF.ÿç¬ø'ÿF.ÿç¬ø'ÿZù£4‘‹¿ùëþIÿÅQ‹¿ùëþIÿÅUËíJ =­„Û³s:ÁÑŸ˜çöàÕ¼Ó#óÖ?ü“ÿŠ£ŸóÖ?ü“ÿŠ­|Ñš@f[ÄÏr$ž`ïùb1žø$’{UÚmÖ<ÛcßÌ+Ÿm¬ §S¢Š(¢˜ÒÆ’$m"‡|ìRyluÀïO Š( Š( Š)©"Jãut=NA QE2Ic†3$²* êÌpã@¢Š(¢Š(¤ 0 ŒƒÔZ(¸²„ +N t q èqGØâÿž—?ø'ÿV(  ÿc‹þz\ÿàLŸüUc‹þz\ÿàLŸüUX¢€+ýŽ/ùésÿ2ñTä´‰?ï—§™+¾=Àby©¨ Š( Š( Š( ³õ--µ=SOžKô[;9DâÝcùž@¾zsÓºÖ…gÜÝcû<óy²ˆÿt¹ÙŸânx^:ÑÔ:OÒä¿[÷³³kÅ[†‰LƒèØÍ:K=>o;Ͷµ<©—tj|¿ww®1ÆzT5^£-ÕÄg<’£ÌuÂI‘Ÿ”çœt4¤#µ-r; C(qPrzã$ñïUN‘£ÿ·:ÀÞgwÚ<”ó3ë»ÍP™¡³¹hšx •¢mñ™1Fõè}ê¬Ú.‰q1O¦iòÇ|¤x„yäíqøRÑ@]iÚ]ñ„ÝÙÙÜNb2įåÿ»‘ÇáR^ZØê/`·¹„œ˜æEuÏÐñUꆙ©¦§Ó¤l‚ÞæKs“œ”8&€5…¥€†E½°Š l]±‘ШìGµ>xín¡0Ü$3DØÊH)ÁÈàûÖ>©&±¥AmÌ Ç$`‘ý*Y¯íà¿¶²v"{íã¨\gŸÄSAí4ùEÀ’ÞÙÅÈpȧÍ`þ÷sN0Y™ŒÆ( ¦?(¹Q’ŸÝϧµV¢ o¤izzÌtË;¤R¦H`EúgÏ=«#Fð¬Zv³ý©qqbó¬m-’Û/ÌAfl1,Üþ¼VÅy€‘hÚ$-;E¦éñ›…+1Xy€õ Ç#ëSYXéÚdF+ [[XØä¤¬`Ÿ\ Ëš|é^QÜ-…Ç™ž1»n1Wèo±iãèÖ¼MçݯúÏïÿ½ïÖ’k 6á'Ií-%K‚ Êñ« H³×¾•K¤hÓÚÃk6a%¼?ê¢xP¤î‚0? »ûŸ+Êýß—»xÆ=1éT¨ YiZF™#Éaachî0Í)aî@æì½'ûCûCì6_mÿŸŸ%<ÏO½ŒÓh  ¾Å§Œ£Zñ7ž?v¿ë?¿þ÷¿Z©ªi‘ÞÙÏ«XÁ-Ã+LÓÚ¬Ë.0ë‘»€9'µUÖu5Ñô¹oš#(FQ°gsþµ~Ž€ghžÓô»›{itnfJ¢Ù#ˆP±ò SžsZréšL÷É}5”—i³¼Hd\tÑM¢€-];KžÞKy¬ìä‚W2IÄ¥]ÏV ŒïU/4kvÑÛNÓN²‰›-Y¬‘0î `¨9â¬Q@ú†lt› »i¾ËsöÉ<ÉÑmÒ8OXÆ@ëZöV–tE½µ¬9ÝåÀŠ‹Ÿ\ ‚Šç×þ¸§þ‚*zjÿÇìõÍÿšÕƒU×þ?cÿ®oüÖ¬‰úUVëVŸ¥Un´€ŽßþBSÿ׿ô)*íR·ÿ”ÿõÂ/ý Jçî¢ñGü$"ÒùEœ§ÌYÄ1;©ù~ðè=r­0:yN.m?ë©ÿаüf‰<:DO3­©D ‘¾Æ^¡í[7lö\ç÷§ŸûfôËËkkèL7vðÜEœì™®~†—T3ŸT»Óìµë{-Ji­m¥·Hîä“Íh7$Îs´óœfµtB¶¾+¼²ƒQ¹»¶QKûû–›Y ’qiIezcÙØ%½¢•Â1ŒõÊ XÖ¹Ó{‹+Û(næÚŒc° A“€Šã’NI$Ó[ÿ]„Ö†‡Š¯%†>º{K{›µ†ââ6ÚÈ„€ßÒϽQ¿Ù¡¤é+ªÝŧÍç3Ïö¶2Hë‚©æ“‘Ôœgµi[ÚÞɱj×6—Ð8Ç–¶›ã—lÔ¿ÙzoؾÅýŸiöLîò<•ÙŸ]¸Å 9q{$ÖºzÍt×[kâ.dl™#à–ï‚HÏ|Snõ ±jZ©Õ®cÕ-¯šlÄÄG€áV3Fܼçç"ºö´´{UµkXÝq¶#(1Ó¦µ‹Þ­ãÙÛµÒ𳘔¸ú63M?ëîÿ/ÄõøÿŸàsúŽ«4Åñµì‘KºÉl¦R Tç˜êÎŒ²_øŽú[‹ÛÂ-ßʉncù£Éʃ†Éõ­[½7O¿‘$¼°µ¹tVšr¿BEXŠ(b‘äŽÑäÆöU¶O| 4Mtß¼´ÿ®Çÿ@zæ¼Y,ãVÑmãþÐx¦i¼Èlgòð€Žw/N½k ³-Ÿýv?ú-ê¶«¢ÇªOiqö»«YíKä·*Ì0s¹HéHhæôÍnâËL¿Š{æ‚â+Á0ê1¼ó"2‚„9rpÄ`ž;œU›o^]é0yP@u ¯šÉ +¤yPIr§æhû§œÕïøDl¶owßló„ÿmóA›pR£’6ãi#ÅH¾³sZ=ÍÛ¹¹7b丬§øùcš~¾_§üz[ÿÀ1|CªO¢jzæ¦ašt >Φ4bB…1;G#$œ Ö¹Ôµx¥ÓtØÅ‘Ô®‘å’R­äÆ«Œàg,~`:_j³ÿõ¼¯l÷—W7­Ê Ü;Ä€Œ1ŠÎÔt&´²ÓⱋS¹–и†x."YbCü9|\``‚x^ßÄ:ÕÛÙÙÄ,î[‹˜d•¢r˜„ã!wÏÖ­]k:ËÜj"Â;#˜ MçÌϰ9 ƒòŒÉÏ4¾ðÛÙÁgs|òý²n% æÿZy qÉŒ æ­ßøfÖþêyþÕyn.T%ÌvòYÀù² éÆA;ÿ]ÁyŒ²×žÿTX£´šlw©wå‰<ã²ìüC®j¢Í,†Ÿ²iËy'°,X£ 08ês[7¾¶¹š  ¹¹±–|…{VQ˜ÿºC0>”í;ÃÖzd°ÉÌLV‚ÑC°#`9ÏN¼ÿõ¨~_Öÿðúü¿à™V¾"Ôµ³m—¤ ÖIu;\†p7(R;©çô§xvùtχv÷Ò©aolò2¯|p*ÒøNÒmÒòöÖ[h|<.¡Þ<ç •*yö­ MÒÏE]$+Kj#1)Ée9ÎqZÎßÖà·W1¥Õuëkk?9tæ¹Ô$HíãEp± çwÍ€;“T5ÍJîãCÖ4íA ûU¤–äÉ!$Gu €I ðA5°<)µ[y5-FHâ*Öûå]Öì½ ¹Î8ù³ÅIÿ½“i×¶“Mu3ÞÓ\ÈãÍb¸ÚrbŸ[‡©VóYÕžïSdV~F˜š.7n™¶ï!H /rAæ¬YkϪ,QÆ‚ÚM6;ÔÈ;òÄŒqŒKwá{k¹eÞßEçÆ±Ý,R… eøëŽ2¸©/|;ms4Assc,0ù ö¬£1ÿt†`}*z]Ÿüþ¿/ø&V™¯ë¼útP}†-Š]Î^'lå¶•\0ÇNù®’Ïí»fûoÙóæ·•äîÿWü;³ü^¸â©é¾´Òç‚[w˜˜mVÑC°#`läñ×5rÎÓìk0ûEÄþd­&f}Ûsü+裰ªÓóüÿÈ_×áþeš(¢Ì_­çü#·²Ùß=£E’3F¹vIáç¿_Lu¨5nþ´»¿Ôo­ãHT·Ù¦(Ò¹#æcž€Iï[7֑ߨ\YÊYcž6‰Š`ãߚϿðôW˧{wnlÕ4%9;vä†R3næ——êWÏô9ë™uX4ÝÛQ–úI%ó>Ó ¤…nX•$®Ê1»rGZÞðÌ×~†IçyŸ|‹™Ö @Wÿh ïN›Ãë:Û;êwâîÛpKµdmnªFͤp?‡µ]Ó4Ø4«?³ÀÒ8.Ò<’6æwc’Äú“UÜ]‹”QE!…Q@Q@Q@rþ)ÿY¡ÿØR/äÕÔV]æ€/µ+KÉ圭«oŽÜ:ˆ÷ò‘Œ’2{ãÚ…ºaÑž}}ölj>o™ÿ gÛÙ>÷›·xòöÓ={uÍ[×FSÅÊßÅ%’¶;ƒ´ôo"Oîþ¢"Oîþ¢…¢·õÐ:Üäô{+m'Æ7ö-½£ÙC9…8@ûÝI¶@•sR^Ç?‹­.c]>ÒûûWÉ’Ñ…ÓGÊ–vÎ ÆÜr9¯Qò$þïê(ò$þïê(Z4ûŸôì×ò·üŒñ¥Å·Ÿce{œ–ò‰íZŒlñ#  >c“É#¥cé¶Ñjö¾·Ô‘náhnw,¿2¶Ðžzàcé~DŸÝýEDŸÝýE @<¾!j‹c°Y´ kËÈ”“²¾"ìà3ÇJé< ¶ÃF¾ûß²›ùÌ%yR›¸ÇµužDŸÝýEDŸÝýE oŸùžQ &˜¶úÒ‚ÿo ¿ô¯+;Ä[›™è¸Ç^øÅtž.Mî‡>³-§(®1«•]¹Ï¡Åv~DŸÝýEDŸÝýEÖç›jÇHký`êÛ¼ó#³³Ë|œüçôí[>"'áÖÛìý¥¢g÷bÈú×aäIýßÔQäIýßÔQý_¨máÝ&+ÿÔi¾ź®@†B$Ë þò¯OJ¯âkè®ìàŠõtèe]-'ŠêõÉ,ŒV"ÚÀ€sÉÉW¨ùwõywõ­¥¿®¿çø­ÿ®Ÿåøž_«ûJÎP$šìh_PŽ3‰e‹~\)õõHÈT’Ú_ê÷bmGO²¶’(¿²æž%bØ0`eu Cg#ü8¯Wò$þïê(ò$þïê*›×úþ¿§Ü•ý_×NÇ)âÛ…¶Ñ¬à»ŠÒh¦™cš{ÈËCì ÷#‘ÉëQøØèiÑKw“$ |½¼³$ü¼ñÉ®¿È“û¿¨£È“û¿¨¥ßÌ}¼8ÒÇû ëì¥á06³yÞf~Ñæàç¯lãºb¤Ðÿ²ÿ¶ôŸøG·nò$þÓÆî›xósü{ýyëڽȓû¿¨£È“û¿¨£úüÀòÍ3CÓf³ð¼òYÆÏ{q*]ÿ-ÆÙoþö ޾”ûŸ±ÛèQÚ^þÌ·ñ BRL•X†ã´ÿ²3^¡äIýßÔU;ýu´3y‹ök…¸MŒYs€sÛšÿ×uþ@õþ¼Ÿùž{qäÄGI Ú"Inöû2c2™v²0g5¸‘ßx‡Pû~¥ch²¬GOžæfT|аuîÎx'§jõ/"Oîþ¢"Oîþ¢€<ßVU]yæËÉ£Äð®²Ë€’LÊØô!lzô0AޱRùwõywõt°ÑRywõywõ'‘'÷QG‘'÷Q@ÑRywõywõÉë?ò4Aÿ^oÿ ÉPøo©ÿxÿ:Ÿ[FO@`ýÿô* õ?ïç\ô7Ÿ¯è޼WÃOü+óguÜQÜWAÈ2ëýY¯=ñü|Åÿ]ùס]«5ç¾"ÿ˜¿ë¢ÿ:äkÿ\SÿA=Aeÿ û_úâŸú©è«ÿ±ÿ×7þkV W_øýþ¹¿óZ°h'éU[­Z~•UºÒ;ù Oÿ\"ÿФ«µJßþBSÿ׿ô)+ëÆ¶vÞ!%¢û*Ÿ.Y‹ò²{ûûrÀ计iQ,‘6õ,8èAÏàMT73gîÙàYÿâ*ì <–èÃ(ò`\)?Ì ¹œt  _´KýÛ/ü ?üEh—û¶_øøŠÚͤ/Ú%þí—þŸþ"´KýÛ/ü ?üEmfŒÐ/Ú%þí—þŸþ"´KýÛ/ü ?üElڥÜp<Q0¸ a°d®äâ˜>Ñ/÷l¿ð,ÿñ}¢oîÙàYÿâ+k4fP$·¤²4!"ÉTŠMùb1’p;Æ;ÕêeÈ =»†g(O¨ÚOôú`SXÖD¤PïªO-ޏéôQEQEQEQEQEQEQEPNOJ*)@i`FV“øR˜}¦ßþ{Åÿ}Š>Õoÿ=âÿ¾Å\Î:Qš§ö«ùïýö(ûU¿ü÷‹þûs4f€)ýªßþ{Åÿ}Š>Õoÿ=âÿ¾Å\Í  j·ÿžñßbµ[ÿÏx¿ï±W3FhŸÚ­ÿç¼_÷Ø£íVÿóÞ/ûìUÌÑš§ö«ùïýö(ûU¿ü÷‹þûs4f€+«+¨d`Êzr)š…óY5 Xâ>áa>dëÐsÈÏÞ<}ÑÉ©ŸïÂñoúÝþÂÐÿè-BÝ/5ù‡GèÍ—Õ4øïÖÁïíVñ†VݦQ!ú.sP®­]j tÖÖöö{33\¯Fù‡ð~=z×y§\ýƒUÑÎu&­u¨4ð_,ǃ dËÑv¯ÎxÀÕ­sM½™|XÎy<ùl¼­±æ…Û»oã8éBÕ^AÔílµ+N#-…í½Üjp^ V@¦A¬Û/è÷r^E%õµ´Ö“I‘O:+‡±ž=ê+µñÕüÑZ˜­¦Óáˬ{QäýúøÅeéÖBhõÿÞØ]Æ÷·7.·gcŽNAcç¦s‘GŸ“üÃü×ävîØLЛˆ„«šÉ¼n ýâ=8<ÕwÖ´¨¸“S²CrAºuh= óó~æíaâIà£XÜ­ýäØòÆTæ8öªùÄv]áÛ>Œ+NóM].mvÊ]æü^ÁV/ ¿˜» ‚2ßòÏ ÉÀç4=?¯ë¥k¿õýjuÞ#Õ$Ñt9¯¡$xÙ+ç3…íõ©UEºÔäÛÁžÂfk•<2ä–ÁøõëXºîÿ ílŠIu{ 0y‹ÌÎÈÈ[§ƒõªv {?‰$¼µÔRÖáìä…à¶f“* ‚iÝ‚F|Óz_úì Tûïi6Vv—Ÿl·šÎæä[‹ˆæC Ë6qжúî‘Û´š­Š-ÈÌ® Gû<üß…qò¶«u¢Ø]Ýé³Ê¶:ºÉû»3³@0ÃÔ·#Û8©5¹d]F-[G±ÔN¡, Ù¦ÓY¡•+1Êa’s‘Û Ñþ ¿Ëõ;‹‹ˆ- yîfŽPe¤‘‚ªrzUS­iK`/Χf,ÉÀ¸3¯–O¦ìâ°üqcy{§iò[¥Ã%µâM:[ƲI°2¨À† qƒÒ±£ÑÃCe=´zÈŸZŠ{yf!#Am铎´–®ß×Oóüôþ½Ná5]9ì ú_Úµ˜7e1øqT4]~-kRÕ!¶x&¶´xÖ9¡8“rn<Ž8 +··¼>$ÑÊîû©®¤·¹òDÊã+ûÜ`uÆ3š]*ÜÝkz Ùh·ZjéðH—o5¿”0P(Œãù¹ÈÈã9æ…­½Þ—õ×Ìëïu+ 5Q¯¯m­UÎÔ3ʨú žj;ÍkJÓÚ5½ÔìíšA”N¨XzŒžk’ñ>Ÿuÿ `¾—ûGì2؈ìlÒä£n%••‘Èȹ©tÍ8u¸ k[‰ìcÑ{¸yÎóò·ÝŽÔº_úëþ_ˆ?ëðÿ3ª¼Õtý>$’òþÖÙ$ÿVÓL¨ûdóUü;ª¾·áû=JHÖ6 C9#úW¢ÚÜiCL¼Õô{Û˜[IKT jÓ=»«1ed°È+Î;bºÏÛMgàí2Þâ‚Tˆî×k/$àŽÕVßúî+›ÔQE!…Q@Q@Q@Q@Q@gˆÿäm·ÿ¯'þRU? õ?ïçW࢈>ࢺA—_êÍyãæ/úè¿Î½ ëýY¯=ñü|Åÿ]ùÐueÿ û_úâŸú©ê /ùÚÿ×ÿÐEO@ _øýþ¹¿óZ°jºÿÇìõÍÿšÕƒ@?JªÝjÓôª­ÖÛÿÈJúáþ…%]ªVÿòŸþ¸Eÿ¡I\ýÖ¯â8¼@4¸ ²>cnŠC‘å÷bwöïïQLžS‹›Oúêô«%‡­S¸$Oež¾iÿÑoOg9¤ãÖãÖªï4o4kxõ¤iU™› £$ú ­¼Ð[ ‚2QCËizýôúý’ ¯fӯ㕣k¨"Œ|£*SgÍŒxzU]¼¾Bxn‹Š[ŽF ‡Zܳðö•aw͵³¤‘ƒ<Œ¨®Õ-´~¤¶Ñtë9!’ÞÛc@Ò4_;…þöqƒéÐv§ÒËúÜF-ž­¬K‡ªI©î‹R¹ØÖ‹ l ¹67dmçÖ'VÖ<½þçR70ê7 –í (‡ ©P{ç­6ÛÃmÛ^Iogk ¼Í0[{‰_{GÜ`:äâ·âÒl"·³ ÄVry°.öùžzó÷_Z¿®ÀÓ×ú×SFé¿yiÿ]þ€õÈx»Yhõ´·Õ¢°–ʶóˆü÷ÏÉÉÈ÷ÔÎÙ–Ïþ»ŸýôË]&ÚÖâòã ,·rù²4¸8࣎€ C1f½‹Q×ü3{ÌSÛÜH¿BŠj®“«Ý#E°Òí­ ¸»ŽY3 sHÏ·Iýkb YÛ5™†k”ûÒKp$9dé÷_z¡¨h"ÊÃN‡O·Ô&–̸Š{iâIP7PwáH>˜ì)¶$Aˆu«·³³ˆiéw-ÅÌ2Hñ9OÜœd.àyúÓ¢ñ¯zÚ}¥ºYCy4·0ÎÒ#¼a¡8%@`p}ÍYð÷†ÞÎ ;›ç—íËq(_07úÓÈcŽHä`g5zÛö–·°Ý$“™"šy”3 )ËgŽƒ·õ§ëý1_-L{ë2 >æò+²ÜÞ5“Ç ¸tpYwn'ezc¿ZŒøÂú]FO³Zù–±Ýý˜Â¶“4Œ¡¶³‰Ø0rqè:æ·ö‰mm’}¶÷†ñ a’å™°xé–?ãD~ŠßP{«[ëÛt’_:KhÝ|§~䂤Œ÷Á—Kÿ[Áòþ·ÿ€d?ˆµxÚæô¥“iÖú‡ØÚ Ž%Û¼&àÛ±œ°ã&‚úÌ«¬<76¯Þ\¤):9`á¾\°o»ì´ßöcshdŸË¸»û[Ã!÷‡Àã¦T5|;W’[êðGv]ž¤Pªì0]~\ƒß®3Ú…·Ëü¿àƒßçþð X<ß"??g´yž^vîÇ8Ï8ÍIQÁ‘qoy6(]ò³`u'¹©)½ÁQHŠ( Š( ¡”âæÓþºŸýªj­rqqgÿ]þ‹zÊñÍÍÆ±¥èÐ]Iiß›$ÓBvÈUùTöÉ=zàTßü"v1-´÷WRÞ\,Q›·’ãËà’p2ä`éZ¶—o«$Bf–)a}ðÏ í’6é~Mü?ö†­BþáÄ‹,sÉ"‡‰‡B»TÔöæ—A”WÅ:´–H‹ t÷éj“Ím,qº²“¼#ÜcÏnµ¡«ê×2[Y4¶ðêÚ¼p´‘+ùR+FX»³ŽyíÖ¶¿±•á¶K›ëË–·¹)$¬»‹€ séQ]xvÒîK™L×1Ë<ñÜ #p7E ñè;ç­5ý~ðEý~ðɨë']ƒJŠ[Ëj.'• rçÚBÿ/âMf_K¨ÉökQ%¬wf0­¤í#(m¬â@6 œz¹­›].;kõ½k›‰î¸·/+)Ü»‹dàr~žÕ zvúƒÝZÞÞÛ¤’ùÒ[Fëå;÷$$g¾¡n¿®¿ä­¿­?Ìè7Z7Z«¼Ñ¼ÒÖñëFñëUwš7šµ¼zѼzÕ]ææ€,““š§=Žs©Ûê3Àò\ÛŒDYÛjuä.vç“Î3VPå¬RùìšÄ$°GçÝ$'ÍV;…ÛѸêx¦º·ö”ôj>Òž\ô¾%Ò!ÔMŒ—€NF~F(®z)|mØœÓ_\†ÒãUkÛ¨ÚÈÇ‘¾ôÜ?‹Œ“ÆßÆ0ò:?´§£Qö”ôjÅÓu­?W2­œÌÏ DxÚ7\ôʰ×—iâû'‰¼YmŔң°‚GMˆq»p\gÛ9 »í)èÔ}¥=±ÛV±KÉ-áDñÁö—\#ɳӵR—ź#%ö±,ÀùNB£}Ö|ö±@/ÚSѨûJz5sž%ÔgÓ¼=5í£¨‘Z0­€Ã êèhmr [­Sí·VéofbT}ë¸tn0Ä“À_ç@ÚSѨûJz5rº‡Šm­,ì¯"Ši ¸»íº ׂIWqéÓfOiqKM,ÞlÈcÒ– N`(3ýìPCö”ôj>ÒžU+þ_›&¼+0—È%¡pžg÷w‘·>Ù í)èÔ}¥=°¯5í:Âõ-.¦x¤rª¡}™n/£>æ¡mrKU¯n [k#vFûÓpþ.0rOh£ûJz5iOF¬+M{N½™!†YJ«,FJ©Ÿ™GBGçP\x“NþÉŽòÚò,\Ç#[;ÆåX¢–$€2ÁÏøÐôW«±Ò}¥=´§£W8bÿ®‹ü躲ÿ}¯ýqOýTõ—üƒíëŠè"§ ¯ü~Çÿ\ßù­X5]ãö?úæÿÍjÁ Ÿ¥UnµiúUVëHíÿä%?ýp‹ÿB’®ãœÕ+ù Oÿ\"ÿФ«´ÀŠâ=(èÛ‘‡cÿê$~5‘{ÿ?ßøßü]\¢€)}ž÷þ~-ð¿øº>Ï{ÿ?¿øßü]]¢€)}ž÷þ~-ð¿øº>Ï{ÿ?¿øßü]]¢€)}ž÷þ~-ð¿øº>Ï{ÿ?¿øßü]]¢€)}ž÷þ~-ð¿øº_"÷þ~-ð¿øº¹EUŠÖ_=f¸™d(ÅDÚ ž§’r{u«TQ@Q@Q@Q@Q@ב#Û½Õw«“ŒŸJuQEQEQEÄz(QÑ·#ÇÿÔHüjZ(Ÿ‘{ÿ?ßøßü]'Ùïçâ×ÿÛÿ‹«´P/³ÞÿÏůþ·ÿGÙïçâ×ÿÛÿ‹«´P/³ÞÿÏůþ·ÿGÙïçâ×ÿÛÿ‹«´P/³ÞÿÏůþ·ÿGÙïçâ×ÿÛÿ‹«´P/³ÞÿÏůþ·ÿGÙïçâ×ÿÛÿ‹«´P/³ÞÿÏůþ·ÿGÙïçâ×ÿÛÿ‹«´P"WX‚ÈÊÎ:”R£ò$ÿ:æáˇrF:ô"³ôý6ò6Õ´‹Í=šÆöyåk*+'b¹ÝžHéŠì~ËþßéGÙÛý(¶–þ»‡ŸõØòÿøE¼A%”sȈ5 ÿÐ.qiµS~sÉÊîÇ_šµîtÍSNŸX·°ÓîßREÉç*HŒG‡’£sÞ»Ÿ²ÿ·úQö_öÿJ»‚Óc“Õt[¦ð:é6¸žæaUËmó =OLíïU¦Ò®&›\šëIšx¯Ùâ†9Ñ*£$6á‚§Ütâ»_²ÿ·úQö_öÿJmÞà´ÐàŽŸâ 4›Ig‚K‰ìõ%¸† ¦Îh@#k8ùKrO_Æ¥Ö-µk«˜¯´Ý*òÓShÕ|ñu–còJ»Žà9<yà×qö_öÿJ>ËþßéKúýưԞ÷QÔmLRÍÒ?46DŒP1ãc#¹®285-VÃ\Ñí´âa¸Õ% zÒ HÆðIÛÄŒqø×¥ý—ý¿Ò£‹M†Ü8…c{—}ˆæ=IÇR}h[ßúè-ýu<ÿÄZ6¹¨]_Eä^ÜÅ$‘GŠñc†4Ia“Ç8n¢­êÚ£sÿ “o»í’Z´:á6îêxÆZî¾ËþßéGÙÛý(ZÉx³JÔ/£´¸Ò•MäEál°\E"ícÏ¡Úßðȋ—Öïª[$*lmí'‹LPãæi†Xuãcœu¯Dû/û¥eÿoô¥mÇ}¼Ž ûKÕbŽÅ´Ë ˜µ8íaˆÝÇs‹Ž©*óÏ@O<f£á룭êRËa{i¨l$Zê¸P¬®›Ô0ã¯=q^ö_öÿJ>ËþßéTÝÝÉJÊÅ8£XaHaQB€Np>¬ý—ý¿Ò²ÿ·úRЭEYû/û¥eÿoô  ÔUŸ²ÿ·úQö_öÿJ­EYû/û¥eÿoô  ÔUŸ²ÿ·úQö_öÿJ­EYû/û¥eÿoô  ÔUŸ²ÿ·úQö_öÿJ㵟ù ÿ¯7ÿÐd¨¼7÷ûÇùÕz?/Åp çý Ïþ;%WðßÞ?ïç\ô7Ÿ¯è޼WÃOü+ógsÜQÜWAÈ2ëýY¯=ñü|Åÿ]ùס]«5ç¾"ÿ˜¿ë¢ÿ:äkÿ\SÿA=Aeÿ û_úâŸú©è«ÿ±ÿ×7þkV W_øýþ¹¿óZ°h'éU_­Z~•YÇ4€ŠßþBSÿ׿ô)+?Ä×@ºO“,‘ïÔ¡GØÄnRNAÇQíZ0ÈNúáþ…%†›¤-„Í"ýžá.a,½ÈéMn½PûœÍLjuÕûEÄ §}•5°*Ù/Eé;†w† ŽŸw {ûÒ]ørÎñ¯žI'W¼x¤fGÆÑãi^8Œu•5ׇ,ï?´<É'ohš]¬8òñ¼{sœÒ[kýl>£4½GP:ÅÖ—©‹Wš(Rt–ÙYU•‰*Äà‚¾´x†U‰ôÐÇ.ýF5óò7Ì0G?\j–òݬµÕm¬îo.e‰mÚ(¤@PY·|äw>¾œT~\ºÜ}»M¼±“­Äe剃°ÈÇÊÍÇ>Ô.Ÿ×_òÿ×Oó24½FþÆÏ]Ôn'Ž[[«¦c/ÊxË`m´ËOjl“¼ö©" 9.’Òx–'QŒdlúŒté[qørÚ;›·&Úì»Mf̦.0ÇÏ?\Smü8YÏfÚ–¡5´°4)dV©ùNÜäRikoô¿ÌʃWñ,×v–¡´÷vfî9<™0 mÊ¿“ósëÅohz“jú­ûÆ#y“,€äÙE£[Ãwgr¯){[cj€‘‚§o'Ž¿(ýi–::|vQÁuv"´WUŒÈ6É»ŸœÎ;zU;kýwÿ€J¿R¯„®¥›Â–×3I,Ÿ¼,ò1f ;w>²ôŸ_êW–möPÖ—lFÄ´˜4+‚UšB60àgëÞµ´Ï +ÊH5}E­£bE»´eI$“8Éõ©tÿÅ¥Ì ­õêÚ©b–fE1.{—v9àf—[œU½¥Ü ŸXY-Vêé“÷é ‰3Œï}ÿ0öW¢Y­ÚÛ},O“–‚2‹ŽÜcúÕáë!áßìBÓ5®Ý¡‹ãæÜ@êµ3Ì¿ÒUm¢³ÔµaÆáæ€ÿw’>éß yŒ»Ô57ñ*iv&Ò8ÖØ\HóÆÎHß· 1õæ³-õy­`¸ŠÆÒÝnm£Ü[fz—~I<ÀÇá[–V¿h¿þמÚâÖé û9‚WFCnÏÊHÏãT5-(´ÙVÚÞòæW½7Ša™#’)VRØ0sÖ–ÛÿZÿ=vþ´ÿ3S¿Õ®æ†Îv²ûež±qÊ‘0ŒîŒ°%KßÖ¥¿Õuk‰-ìšKxoíµhái#Wò¤VŒ¸%wgò3Ú®h¾¼ë­QîVV¾K¸ÖIQäùhÞTmçžÛšÒ»ðÍÜ—R™îcš{ˆîD‘¸ ˆ¡A^=|õ4Ö›ÿ[ÁÿׯüZÜN¶è.^7˜£RªO°$‘ùšâõÛ©éç4íAµµ×t8å¢Ý:\—"òX¸ÊoÎÐ_ Y9­æíÜÜ›±r\ VSü@€ü±Í:-ÄvÆMSPûU³3Gv€0Á_»·…×áþ`fM«¶—y¯Ì¶½Ê=¬JT²ù®ênÉ8žÝ½jv×5=:[Û]E-$¸ŠÅï!’ÝYQ‚ðU$õÇ9ç=ªüž²™/ÖvšQ|#–`(VƒÀ9õ¦Eá«dK¿>îòêk¨ »O;©uŒçå\\ôë×4?ëîÿ1«u*éZƪڶ¤,Ý/íMÄ/lŒ…ÚJ°f9á‡#+?ÅÚËG¨­¥¾­„¶Pý°‡œGç¾~HŽHÈ 6G¸®’=Þ;>pòï± ˆ0U‚ƒž:ü£¦)ÖºMµ­ÅåÆYnåódipqÀGÞú]‰ŽÚ™ºÍ†£¡[j²ê7–Ö‘E¬Æ6°/ÌNx¾µoB7¶þ¶mZCö”Œ´­!€É#qõ÷ªáo*Ò8/ï­ÖÒi&„FÑ…Éã „`dã¸Í_›IûN‹6™q}w2Ì¥v($*zŒ…§)=†º\å|?â1?ˆ"–MZ+ˆõ`û-á©S”Aùw&sïPϨÞ.±,†êý]uE….VCö5‹#(ËÓ8Êä¼z×a{¢YÞÚÃS‘"KÂd(r1~ŸCTß–o3æêðZ¼ÿh{1 ò™÷nÏMØÏ8Î=©­×—üø õOúïÿÝ¢Š)QEU-nù¬ŸL q,>}ìpŸ.%}àƒòÇåG5v°\ŽÃÞ…ºõAÑú2yücaÔ¨m¯ZÒ…¼×Ë0G&@Á9Ï€HÞ›?ˆ¢ÓnuÙ®f¹žòR7¨ÀCœ¶I{¬û jÏk}£E=Ñï.Zw•·yè®ûÝãiç8lŒÒ¦Ôü-{x5ñ¶àjlÐîfùD{wnãÛŒf…¶¿ÖßðC©¯¥kÐê—WiwewnªïÒ(m­œ0ÚH#‚:ö¬{?ΖÚÅÅö™vöö¯Ú Xöl±ŒÜ[Ø­ˆ´¹ÓÅ—©hü‰,£· ݹ]˜œcÃõGMÑu;JÎe²›H½ži‹oa0ó:©]»qœóŸÂò}Ãü×Ýoó-Éâ}6-JâżØ,¾Üí·Ëö9ëßñIümb±ù‰a©L‘À“Ü´P†û2²îþn¸ä…Ü@¬!ðÿRm2¤Ô k³7“q(ÝóÙíTØ8ûÛQO¦sÍl^hÄZ¨Ò%±º¢3íƒ@Û m‚G=è~_×õúó6µjÓMÑV}ó[V_$.€¸Ér+OÛÂ×+.‹¬#Ú(’åL(L(ypø#ƒ÷rxvË\žÙõÅ2 ê-^±i!óu ®dˆ†;TH0»¸üñš4=cM¼µ¾ÓÆY¾ÁÌ7.è§fHeeR{ž¤¿Ëò­†ü¼ÿ5ú\²Ù$Ë0†Äf!‚›e;Ï\ç§J×ïäñö—=•ÌÑ[˜T\Œ÷FùŸ0ç'øA¶~šÞûD¹K]>É,ÅǦBf@ÛòŒôç8¢]ðëÚ‹˜l.´­LÄnc¸f»iBÀàH§°¯|A¦±—åÝÃÄ&o³ªD-·,Y‡LÕ(Òþ‹\ž£â‹»+ÍIaÒEÅ®š¨÷2ý¤+í+¸•]¼à{Š—Äz•å´DºfÖ{›ØÓc>Á"•c‚pp8¨§ûKú-iE®^ëÄòéÿoŽöÁR{[5ºTŽrâRI] íÄÎ?ˆqQMã8"Š)RÑåG²Žëä˜4Œ8ñޤ“ÎF1Gõùÿ_—ùoÚ_ÑhûKú-`iºÕÄú›éº€²»‰Ð$ÂTtÎq‘ŽõCUñ]ÖŸs©ˆt‘qk¦ª5Ä¿iØØaŸ•vóî(®ûKú-iE®wO×ng¾¸±½ÓÒÒæ;qs[":G-´`äsÅe½å޳bÖ+Ë[¸ŽKKµ¹N8"‡ -Nßí/è´}¥ý¹%×õKMOšçM‚K«¹"‚[³‡,¹ÜͳåéÐO}`Ùë3I¨G, /í3F—H”9Âín>÷áŠmYÿ]®$î¯ýocªûKú-iE®?QÖ5ðÝÅíæ›%”'Êh¼‹ÜJC:ŽH_”ò29î)šÏŽm´BêÙc·Y…3ù·‰‡#8Ë>ž”¶×c³ûKú-iE®jÛÄr_k²iö¶°´Ql/$·;$*ÊrÇ´î^zäw¦kš†§kâÛOŽ9„é9’%òÕ¶…Á-µ=¨¨ûKú-iE®^óÄ—q\^Gi¤›¨ìMÛ‹€›I]ÅPó9íDþ$¹–ö }#MKá-šÞn{Ÿ+äc€Êr~¸ £í/è´}¥ý°,üO¥]ÙÚJ÷ÛKv?wò*È[;Jã<ÀŽ+Âúõíž‹¤¥ýû̦¼عfÛ¹1À'ŒäÑ`;ï´¿¢Ñö—ôZäçñd±}¦í4Æ}&Ús×~p m¬ÂÒþ‹\dÞ+խ侊]?2Â!=À[àG–A §Éó•¸8éÖº›yÒæÚ+ˆó²T¹ô#"€-}¥ý´¿¢Ô4PßiE£í/èµ 7Ú_ÑhûKú-CE3PŸN¹R Mü«•ðßÞ?ïç]5÷üx\×&þUÌøoï÷󠿏(¢¸( ]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@Õ—üƒíëŠè"§¨,¿äkÿ\SÿA=QEQEUºÿÝ?þ»Ÿý«N³.¿ãóOÿ®çÿ@jÓ Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( $ûæ¹O,·z¦g´îÑÞ%Ì’ˆ–ˆ¡³—éžœu溹>ù§ùÿwõ4uL:Xã'ðœ²ý¦Ñ56M&æs<ÖžH,ImÌ¢Lð¤öÁ<žj[ï ý·û[{?´ÿUŸ/ËÇ¿9Ƕ+®ò#þïêhò#þïêhZË\xwÏèûVßíX„êóåa6g¯ÍëÚ¤Ô´G¾Ól †ïȸ²’9a˜Ç¼nQŽW# ‚xÍt¾DÝýMDÝýM×Ü'{á§Ô®´»«»ÝÓÚßâÚ· ¸0R2p*žý=ê´ ·ŠÃRµk¹XÝÌ$Š@ p­º5^¹ Ù?v¾DÝýMDÝýMs:n‹s¦ú–£~/nÌ")‰3“…ÉäœdçµE{῵¦º¿kÙý«§ú¼ùXM¹ëózö®¯Èû¿©£Èû¿©£Èšœ®¡á¤Ônnd’é•.4óbÊ«È'vsïÓZ×Â’‰®^þþÖkbÞ×ÉÂ×ïŸÊ»?"?îþ¦"?îþ¦ëóÿ6×åþHä"ðíëZéð^j©8±¸Žh™mv¨¤m?1ä篷Jµ{áøu JææâRa¸±6O\$¶ìûúWKäGýßÔÑäGýßÔÐõßúè OëæqÒxwQºÑ¥Ó/5”š#XŸì›]v°?1 †8è=jYü?tšµÍö¨Çl.Š™âšÔL (Æå;†Ó€zë<ˆÿ»úšdkm6ï)‘ö±VÚÙÁA÷¢àrÚ‡‡®5-ZÚæ{è½´Ë4H– J»‡ÌÝО¼{U_GžþîÊöÎôZ]Ú®0A\AÎk¤ò#þïêhò#þïêh»ðÕä³Ý½¦®m’ýo[†ÞÁv–CŸ‘Çz§6¨E☣Òn>Ão–,Ïmæ¡Ãœ.r>`0zþÞyÿwõ4yÿwõ4Oëúèaiz=¶—¦[Ù ó|y ™‰$·âI5aá+›t±¶ºÕEÅ…Œ¾t0%·–KJïmÇ Ð]œ‰o ”ª êÌØŸäEýßÔÑÖáÒÇ?„å—í6‰©²i73™æ´òAbKneg…'¶ äóWWE¹ƒ^ŸP´¿XàºØn-Þ ÅŠ£knxÇcÒºo"?îþ¦"?îþ¦€8ˆ¼#w œ©¬œ¾m‹ aºÉáŽì8ÃŒ –O Isa¨%Ö£æÞß¼M-À‡jªÆAUTσÜõ®ËÈû¿©¦2[¬‰ùÚ¥¹luÀ rëAûMÞ«?Úvý¾Ímvùyòñ¿æëÏßéÇJÒ²¶û…½®ýþLKìc8Î+SÈû¿©£Èû¿©¡h×õ÷¨«¾DÝýMDÝýMR¢®ùÿwõ4ÉÚ-žc"o`«¹±¸žÃÔÐZ*ï‘÷SG‘÷S@wßñáqÿ\›ùW3ῼÞ?κýN$].è…Áò›¿µrûÍþñþtÜÁ÷A÷˯õf¼÷Ä_ñóýt_ç^…uþ¬×žø‹þ>bÿ®‹ü踳b,-Gý1OýTÛϵW´ÿoúâŸú©© vóíFóíM¢€¼ûQ¼ûSh ‘VeÚêê9 ƒêéQ}–?ïÜàLŸüUMECöXÿ¿qÿ2ñT}–?ïÜàLŸüUMECöXÿ¿qÿ2ñT}–?ïÜàLŸüUMECöXÿ¿qÿ2ñT}–?ïÜàLŸüUMECöXÿ¿qÿ2ñT}–?ïÜàLŸüUMECöXÿ¿qÿ2ñT}–?ïÜàLŸüUMECöXÿ¿qÿ2ñT}–?ïÜàLŸüUMECöXÿ¿qÿ2ñT}–?ïÜàLŸüUMECöXÿ¿qÿ2ñT}–?ïÜàLŸüUMECöXÿ¿qÿ2ñT}–?ïÜàLŸüUMECöXÿ¿qÿ2ñT}–?ïÜàLŸüUMECöXÿ¿qÿ2ñT}–?ïÜàLŸüUMECöXÿ¿qÿ2ñT}–?ïÜàLŸüUMECöXÿ¿qÿ2ñT}–?ïÜàLŸüUMECöXÿ¿qÿ2ñT}–?ïÜàLŸüUMECöXÿ¿qÿ2ñT}–?ïÜàLŸüUMECöXÿ¿qÿ2ñT}–?ïÜàLŸüUMECöXÿ¿qÿ2ñT}–?ïÜàLŸüUMECöXÿ¿qÿ2ñT}–?ïÜàLŸüUMECöXÿ¿qÿ2ñT}–?ïÜàLŸüUMECöXÿ¿qÿ2ñT}–?ïÜàLŸüUMECöXÿ¿qÿ2ñT}–?ïÜàLŸüUME:% PXݘ±üÏ5™âi–)4MÐE.ýN$fïß0Áýr=«U~謭zÎûQÕtx ´?f·º[¹®šE 6†çq'#¶=é­×ªÙú3.ãÅ:²Zßk1[ÙÎå x›wžê±Ü6vŽs…ÁÈi—ÚÔš]ÇŠnìím…ÄjÜ1ó ªŒ¿ÍÛ=±Z³ø:Â{©\ÜÞ­¤Ó ‰¬VP ’Lƒ’1žH€@'µMyá{+ßí?2[ý¢Ñ4»Y~S6í㎃9Í m­ƒ¨Í#SÔÛ[»Ò5ahóEwÍjŒŠÈÅ—X’+ëÞ°ôÛÝ~ 3ÄWÖÓÚϽÝÙ† ¢vrU¸··bºÔÒàMj]T4ž|–ënT‘·j±`qŒç,{Õ[?Ãa©ÜÝÛÞ^,W4²ZS v¶6îç¯\{Q¯àÿ0ÿ5ù™…/ŽÕ5 ±FÖ1éŸkŽ^rò…³¯÷]ãJ¾ ñÌW¯mo§+i¡»ICæYLaÙSäwsVÓÀ:*iÖÖ#í/>Ö¤¸Én› Ç)Œ.=æ­j>´Ônî.Ýõ¨»P—Q[J.² q• â‡åý[|yÿ_×êUñ§ ߀ÿ´–Ù&Št‚UŠlã èFvxϯj§­x—\³¹×$²O6šBFïÈûå »Ž6>†º=CE´Ôtc¥>ømp€HB@ÐU{¯ Yݦ°²K8²*Oµ‡Êíxã\Ñ.¶ô¹FÏ]Ô-õË-fKòì…ìw0«"*ä‚3˜ ÖvŸãyƒêb÷ɹŽÒÄÞ¤¶ö²ÛïPH+¶Lç¶s] ç†ì/î'–àÊâ{/°ºnLyÎzg<õÍT‡Â°[©çº¾Õ$–ÌÚywNœÇ×h*«×ÔÐÿÏõ·è ü¿Kþ¦d¾(Ö´‰a—XŠÁ­æ°žðEjŽ?,)ÚX± ØÎGaâýn7:h»f³{ˆ–+ˆBH i9à®:täS4 ÞϬE&£úi°YËl!Ô.b˜°}£jùÂêÇ'Šèl|8l ’µUá1yQ$’£y#±S³9‹Cþ¿øWëýmÿo†5iµ{9d¸½²¸‘Kh^&„ã•uv$ʹ¨5é4-6üÁ{‹­zx#-È©É%Š ,Øð?Jët -*æêèÝÝ]Ý]mÏrÊX…ÎÑ…U žÝê¬ÞÓåŽé<û´óîþØŒ’`›»FqÆ{ƒ‘G[ÿ[¡ô·õ³9}STÔµýÞÊâ$ŸVŠÜÉ%¬ÑCsRÜÆå_#=ºÕÛxu-/ÅIeg=Œ[ii$Ñ%¬†,y¯Ÿ.0ÿ)ÿ¾«¡ÿ„z9 ´ŽëP¾»kk¥ºI&dÜXœ(yèúÓ¯ô¯µXu(ïo,î£Êf¶uDÎí¬OôÁç­5§õåoÌ«úïÈË»ñ=Õõö›g¡yhnšPò_ÚJ»v*· vÝzUiµ·Ò/|G:ÙÁ%ÜrZD¥ /#¨UÝ’p=‡OS]=ΗÖ«e¨;È&³ÕHÚw€xö¬ÍWÃÖ²ÛkýžâòM@FÏJ¨w J1ÆÒ1œ“ÔRè3â}KYm7WÒu&°y#·¶¸ŽKh-8\Ìs÷zñSx‡XÖ¢Óµ].òKU¼…-g†æÑ]«Ì‚¥‰êCÈ=ª]3—šÆ¥.²ú„pÜC (.gŠIÿvåó˜ÆÐ3ŽOZèµ/ Xj³ÝÍrÓKgàm ÅÕ—Œ†þƒŠ{[úôëµÿQogÖ4ÿ Þ\–´¹Ô`‰äA,‘¶@Ú\žžõ‡/ŽÕ5 ±FÖ1éŸkŽ^rò…³¯÷]ã]M…‹YZ}ž[˛ÒL·%Köù@ü+ <¢¦mb>Ða‚óíjKŒ–é°œr˜ÂãÐiuþ¿¯?×õý[œî£}|t¯»G¦¤­§ù²Á¼nvÙ~nƒ$`c޵©¬G­øqEΞu ]~ðÛ¸‹nÕþ ùÎ?Ú­Ë¿ X^TLÓ‘©ù~n … SŽóžiÖþŽ+«©ïïnç³ó<¹'d%·€;TtÇÇãNúÿ]„G¤k’^x~âöûìöÓZ¼ÑNÀŸ)Z6 ·<íã5Ÿá¯ÜêšÕÆrðNÝn"žYmÁ°FÙ2ObV²xvÅt›í1üÙ-¯d–IC·9’Àó¼tSéX[ê׉,ÒMuù†B(›A¨ë\ï‡>û¼C¡ÜÁ÷A÷˯õf¼÷Ä_ñóýt_ç^…uþ¬×žø‹þ>bÿ®‹üè¶´ÿoúâŸú©ªOøñ¶ÿ®)ÿ ŠšÂŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š(  -â@c\,~c„MïÌzž§Ú¬¯ÝÎxŽâH$ÑÂlýæ£6äVà†é‘Á÷Ó[¤.æ÷˜ÿßoΣKÄ’i!ŽáZX±æ"¾JdddvÈ®*çZÖ¨ëÑߢAgvЋ%Jº#ì!›ïn=F:qNÔõkÛFñ<¶²$RÂö«ˆ“+¼(9ãæëß8¡joæ?÷Ûó¤Y‹gl„ààáºç´›BßÄ7šMíó^¢[GqÏ£ÌÊTí»ž•¦[êcMñÖŸ©M«ywäÛùq²o yRÜýqÍ~W/3ºóûíùÑæ?÷Ûó®_Oö©îãe:siÿ¸ÝlWÛœz8ö5`^ëÓÇ©ÿÄÙmäÒa@ê`B'“ËÌù)'n;Ðôßúþ¿T [[©ÙÏx–°™n.(†2ò>Ð2p9>õ'˜ÿßoι}oS–o&¤‘¢I4pI±Ð8]Ì™`AëYÚÞ§­G?ˆn,õCzTq¼py²¾Ssn$nüˆ¡«n ]ŽçÌï·çG˜ÿßoιu[½'Q¾·Ôõ7¸µM<^‰ÚW‹’@t#"¨Úø“T±“TBòxàÓì"ö£rA#»ãi㮣úüÿȿקùç˜ÿßoÎ1ÿ¾ßp—:¾³¢<:—ÛÖm:{¶‡ÉDEtU )Qœ|Ýɧé×Þ,™Ò‰„Önè÷qÀˆ³`Ùå±%NOÞö懧õëþBNÿ×§ùǘÿßoΑf-²ƒƒ†èkÃ7ÒÜ¥Äw—’ÞÂWΆî‰âÈí°TààäôëXºT·:f›â=Y.¥’;{»ÇeSa`IÎvîýhz_ÒãZýçuæ?÷Ûó£Ìï·ç\•¥î­cªi^jK§–_%SÊeMùB½W·9=9ª:v¯¬Å§èúµÆ¦n¢¿º[y-^P¡˜¨(T‘Œóž3NÚØ/¥ÎÖâþ;SžãËó¤G’~f=üªo1ÿ¾ßq^#»»Ô†› Ú^i².© ¤ó,mž•›=;Žâ’ã]Õ4¸5›).’îâÒKt†êHÂàL@ùÂà|½xÆx¤µ_×—ùƒÑÿ^gjee™©&Î@ReáºÝk‰Õ.u8õòøß£éܤ­£¡R¤(ƒœŽ3ÁëQ_Y].‹á¨ÛU¹w–ö¦8³òÛ…pà@еü?oПås½óûíùÑæ?÷Ûó®.[­jY5³ä®Š™lnfòÒp0qò㡤—TÕµkÈÏP}=[I[í‹ >\ž‡p'LR¾—þ¶oô _wù¯˜ÿßoÎ1ÿ¾ßqš©ªµæ…%Ýù¹‡VµyZ# …«|¥FHäŽsRëÚÖ¡¦jW¶±L7]Y¡ÓÁUùfß°ŽœòèyÏzo@ZêuSÞ%¬&[‹…Š!Œ¼´ œO½£¦iž“ûA¦³½íÚÕâ@#Îò °º¯rzÖŸŠµ‹»if‹L¸¾6¶ÆâHíà‰ã¦Bø8;O sCÐö:ÿ1ÿ¾ßG-â@c\,~c„MïÌzž§Ú±¯®õKŸ Çw¥ ûl±E&Õ m Á8'ã5Ú«Me¤”¼–êOíd‚cyl‰,g•+´#Ž@ïÖ½îQ_K§˜ÿßoÎ1ÿ¾ßp²jºÌi{ªL´Ú¯Ù~ÆaM˜©÷±»?6sžÔ—Z¾±-Ö¯¥äC¢-ÍaB¥D¢2Yˆ-“’x#µ%­¿®ßæ6íë¿ùd·ñ^é×¾Dþ`‹Ì‰ñžG#ð®ß}¿Þ?Ϋi·Íkíº¦áw«ÞDÍýÐ#wþj*χ>û¼$ÿOÊãjßæw0}ÁE}ÁE1 ºÿVkÏ|Eÿ1×EþuèW_êÍyãæ/úè¿Î€:çÖ’A¦ÚC4?fs9†Ç#ïj‡í^*ÿ e¯ýô?øºÒX<Õ,$ç pÊ?!Å/Ù[þy¿þ=a*M»ó?ëätã¹"þÿó3>Õâ¯úZÿßCÿ‹£í^*ÿ e¯ýô?øºÓû+Ï7ÿÀ§£ì­ÿ<ßÿž—°Îÿò+ëKþ}Çîæf}«Å_ô µÿ¾‡ÿGÚ¼Uÿ@Ë_ûèñu§öVÿžoÿOGÙ[þy¿þ=Áÿ;ü?È>´¿çÜ~çþfgÚ¼Uÿ@Ë_ûèñt}«Å_ô µÿ¾‡ÿZeoùæÿøô}•¿ç›ÿàSÑìó¿ÃüƒëKþ}Çîæf}«Å_ô µÿ¾‡ÿGÚ¼Uÿ@Ë_ûèñu§öVÿžoÿOGÙ[þy¿þ=Áÿ;ü?È>´¿çÜ~çþfgÚ¼Uÿ@Ë_ûèñufÂI{ÞØÛÅns½Ñ†GÄ{ãµZû+Ï7ÿÀ§§-™cŒ>·RSTZwæ×ÈRÄ&šäŠûÿÌ»´úQ´úUHía’$|Ì7qç¿øÓ¾Å÷¦ÿ¿ïþ5±ÌYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿYÚ}(Ú}*·Ø¡þôß÷ýÿƱCýé¿ïûÿ\Q\¼¾ºœÆfÖæ“Ëpé½ Úán½n}ŠïMÿßühû?Þ›þÿ¿øÔNœgncZU§Jü|“üÎm¼ÙßQ Ï •˜Á’Î:1ùºûÔ’x*I|ï3UwóŠ™wDO˜W¦ï›œvÍtb‡ûÓß÷ÿ>Å÷¦ÿ¿ïþ5ŸÕ©öü_ùšýv·u÷/ò0Ç„®…Á¸ÜÂvP†M‡qPrwg'zd^ š ^XµwŽI»ºDAf=I;¹5¿ö(½7ýÿñ£ìPÿzoûþÿãGÕ©öü_ù‡×kw_rÿ#šE…!ê"ŽO9[üªÿÞw ïÖ¬Çà‹YnžmJ᯷¨ 2—ÇMÄ7Ì?)Èæ·>Å÷¦ÿ¿ïþ4}ŠïMÿßüiÆ„"î—âÉž*¬âã&¬ü—ùæ—kdÖw1‡·m¹@Jô Ž„w¡›@Óîýe‡p¿P·?30ߎ=1S}ŠïMÿßühû?Þ›þÿ¿øÖÇ9Ú…ÄÒM4 #ÉoögÜI s´ŒãúÕk? iz{Jö°·™$^I3K$Ãg÷pìxö«¿b‡ûÓß÷ÿ>Å÷¦ÿ¿ïþ4‰cà›;b+ØD1Û¼?gòØÏßvp1´9«¶¾Òl’T·†XÒXÌl‚âM¡Oe°¿ðUï±Cýé¿ïûÿb‡ûÓß÷ÿb;B±ÒŒ¦Ò6W˜ƒ#É#È펙f$àzf™‡4ص ¯’³ÍŸ4 c’0ILíÉñV~Å÷¦ÿ¿ïþ4}ŠïMÿßühOO𾕥Îg³¶òåØQYŸbÿuC´{ ¥¡ø'MÑ’ÙÈ7Pn+3³í“Ê¡bªpq‘[?b‡ûÓß÷ÿ>Å÷¦ÿ¿ïþ4î+ Ô´k=^Ý`½F‘Ä‹µÙ °èAR<Ô6þÒí´ùì#µCm9&e—2Ý™‰$û“V~Å÷¦ÿ¿ïþ4}ŠïMÿßüi ­cá½3NIÖÞßýzì”Êí#:ôÚKqÏN•øCFM=¬E»›vep­<„¡_ºT–Êãý’+CìPÿzoûþÿãGØ¡þôß÷ýÿÆÒø7DŸa–Ñœª9šOAÈó|ãýìÕó¤ZÆ»ò‡œÐ}œ°$~ï9ÛŒã­;ìPÿzoûþÿãGØ¡þôß÷ýÿÆ‘C Ø[ý‡Ê‡oØ#1Û|Ìv)מëš}Þe}siss É5£™ cŸ‘ˆÆzóøÓ¾Å÷¦ÿ¿ïþ4}ŠïMÿßüiÜV*ÿÂ3¥ [»aj¢+ɼùÔ3 ïsœärŠt¾Ó¥ÕRh˜]€t•Ô6:nP@l{ƒV>Å÷¦ÿ¿ïþ4}ŠïMÿßüi ‚?éÐÛYÛ¤ŠÊO6Ýw·ÈÜóן¼zç­G©xcKÕ§óîáv”Çå3G3ÆY?ºÛdrx5oìPÿzoûþÿãGØ¡þôß÷ýÿÆ€>kq§­ƒ«‹u ª±ÈÈ@^˜e öõªðøgK·‚(c·ÂÅp.T™˜ËÓqbrÇêMZû?Þ›þÿ¿øÑö(½7ýÿñ§}n+t oéÏk5³A˜gŸí2.öù¤ÜvsêÇJÊÔüi¨Ý}¡] ‘®y jø}¬+¿nãŒn*ksìPÿzoûþÿãGØ¡þôß÷ýÿÆ•ÂÅIô{++{ûˆ! $û¥~IÊ‘¸p ¶3X^ûíþñþuÔ­œ!ýã`ç +0ü‰®[ß}¿Þ?ÎÌpQDpQLC.¿ÕšóßÇÌ_õÑz×ú³^{â/øù‹þº/ó ÚØ…´Œ’ &©®¿¥½Ûè<aˆ2#1f€'ð¨5;kÛÍ*Þ DŠDf_=$”ǽ?»SŒñÓ5a¬>£ê\ÁLÚ„‘ľw˼ž„0£};R_×à7ý~'Sek¨Ûùö’‰#ÉRpAuAö5öÞŸöñdg+9m€4l· b6“횣£Þi––`®£ Ì·w$I,_2´Ì3Œà`qŸJ¥¬_[Üë+mö©¡º@t𹃂ç#h$òqÅ>© £fÐ×´Ó~,¾Óûòæ1”`¥¿ºsíš±{k§[ù÷s,Qä('©>€IöÏÏ«XjšêÚÏ{o Wlm 4ç”øŸn¶u֚Ε¨Ü+( ‹#…$DÌÖ vàŒöÍ.ˆ}K˯é­e=ßžë ó ÂêW=>R2*}–³a¨NÐ[ÌÞr®ã‘4m\0Šç5½i5]#[ŽÚX¤´‚8JM9%¾nzqRi³¤þ*·’ÛRmY~Îé$¥Wã‚0PùÆx¦·±¼Ú²i›­®&tÛæÉ®È·tÜI^­ çl¬mni—jã~yÝœõ­/ÛÛJ)íu+"ëlEÅ­¼’18æ]Îß0=ñžM;kýyÿ¯§õåþgc}}h×7,V%*¤žI~¤UšÁñœ^o…nÁŒº:Ÿ”:–ãè dMk êzž…ke ¤Úc’b‰G–X*öf’ÔgkEy·ŠnaþÒ¹š}Ýœ¥±to´Ê2§1¶@ ÉÁèjæ±§ÚÝ]x²òhC\ÚAÛÍÑ¢"-À©íÈ£¥Áoc½¬Ûmf;ÍJkK{K§H\Ç%ÈU+’¹'$öàb¹O>ÒßÅ×.ÖšÝË MŸ´Ú’€ezÏN§“V,4õ:ˆïì­cþÖ7I ᙞÀ6»õý?ÌK[yÛõ;Z+…ѳ¶t¯ìÛ¼—þÒÆî›xósü{ýyëUcÓí#øl÷in‹ss´O(4ƒÎOzvîz%ç÷Ú—÷ˆaŽÎ4ŽßOKˆr2&Y}ʽ=+µÒåy´‹)dbÎð#1=ÉQIj¯ýuÿ!õþ¼¿ÌŠçW‚Ì]=ÌSÅ»"™Y>W/€6ã¯$ZÁë±y«âÀc.‚KFu?( [ 5¶Úl‰¥gI§Ç î”HÍ {a.ÝáYÚÁ' @¢¸}.ÖâoY\ϧdæéÓ|½¸ ' Èš‡M°¶²¶Ñï­ãÙuý®öÆmijE¾EÚOq€?*vÕ/ë°¯¥ÎãQÔí4›užòFDw®ØÙÉcРšM?W±ÕŸcŸ{D@‘3Ó*ÀùV‰oSPµÓΟ:bÕâ‡t‘±U‘IÈ#‚@ö?dÞ@I®ý¶F:žØC T(Ì?ÌÑŒ–Î ƒÎE%ý~ç÷ éýyÿ_3½º¹ŠÎÒk™˜¬P¡‘ÈÀ& ©<ÍÊH¡”ŸB3\"Eg;êñxmwiÏ¥ºÈ°çË3œíý¬g8öÍ5¯48¼/g …¶˜ašHÒòI¢ÌP¾ÂwH9ÈÇ$rhé÷~l?¯Èíîï ²kuˆ7ˆcÀÎX‚@ý Y¯3„[Éá«_µ´e¾¶C2©0ˆp@ p™oSб­‹µ;PgÓ Ñ mq <·Ûv²€ØÆåOúü.®ö=³îux,ÅÓÜÅ€Ñk; jŽòŠóým´ÙJþΓOAÝ(‘šöÂ\ »Â²ÿµ‚N3N·Òín&ðõ•ÌðjvNn0‡ËÛ€@’p¼É¡+…Îú©ê:¥¦“n“ÞHÈŽâ5Û9,z\>›amem£ß[Dzëû]íŒÛ‰f‹|‹´žã~U±â[¸u;K²ºehõx i9Á à0ÁÇЊK[[¿ù˜ûßúßüކÃR¶Ô£w¶ó¶¡Áó`xäàf­×#©iK6»¢Yjw©Dÿhr.áW ãéÞ±µ»d“Ä…½ýíˆÛØIs ³"mÂÁÀ6sÁ?…0=ŠómfÜÍ®ßCªêVv²lŒYÏu–hËBÁÀvr0Oá^²ÂŠï½Â€ÍŒdúÑÒâ¹HêðFPOð.¾Ë‘1½¹ Œ ÁÁ­ ó˸íšÂG½Ê?»\o\ª§#-í’)5±c6§j út!²Í®!gƒvã»nÖPÁü©t_×Kî×õ½D¢¸1¤[^ê1Z꺈‡E ìÉÜp㜃ŒsÖÚ ;¯ ]@ž\·ÖR¦æb[-êsž}éÛúûÿÈ_×åþgyEqž#ÕtýJ8§µ…ÊÈëy¨DÆ5+´ ®äõ#¥g[Kº/†Û[rúO•(•¤ÉŒÈ#ßíŒãYbËælÿg§N3šè4›;}+Å·ÖV1,­gÆáCîpH²ü¨·õò¸_CfãU±µÔ-¬&¸TººÜaŒƒ–Ç_aøÔWú厙/—tnÛ¿1ÚË"õU#µr7qjš×öž«ee«æ¯Øçk‚®‚8Ú»rÛ»Œƒ[® šÖ¤ÛÛ± ¬HŠø<ˆ‚—~CoãKuýuØ{?ë¦çAgwýœWvÎ^ ”:1R¹¾5=""ÆŠˆ¡UF¥¡‰y…Q@Š( Š( Š( Š( Š( Š( Š( Š( ¸ÿ}öÿxÿ:ì+ðçßo÷󠿏(¢¸(¦!—?êÍyÿˆ”ý¢3ÿMó¯Cœe qú환 s@ª·ÙbùOݪ]­ýÓùWŸÝø¶þÙˆE›þUãÝDùÙÿßGü) ôý­ýÓùQµ¿º*óøOµ/úÙÿßGü(ÿ„ûRÿ  Ÿýô€=?ktþTmoîŸÊ¼ÃþíKþ€6÷Ñÿ ?á>Ô¿ègÿ}ð OÚßÝ?•[û§ò¯0ÿ„ûRÿ  ŸýôÂøOµ/úÙÿßGü(Óö·÷OåFÖþéü«Ì?á>Ô¿ègÿ}ð£þíKþ€6÷Ñÿ ôý­ýÓùRª¶áÁëé^_ÿ ö¥ÿ@?ûèÿ…ðŸj_ô³ÿ¾øP¥[ÿÇ´_îåRWšˆº¸ ÜÐ ü)áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•M‘<Ȳnn^£Ü{×›ÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øPme¡Çi|/f½¼½¸XÌh÷.§b’ *Î=x«×p=ͳD—3[3c÷róÛp#ô¯;ÿ…¬Ðßþþ7øQÿ Xÿ =¿ýüoð æËLžÒ2M^þépG—?•·ëò ?­hךÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéU™u¥\\ܼ©­j6êØÄPù[WŽÛ£'õ®#þ6±ÿ@{ûøßáGü,mcþ€öÿ÷ñ¿Â€=š6šI™F ’cs{œ?!RWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øPou¥\\ܼ©­j6êØÄPù[WŽÛ£'õ«ðDÐÀ‘´ÒLÊ0d“›Üàù óŸøXÚÇýíÿïã…ð±µúÛÿ߯ÿ ôª+Íáckô·ÿ¿þÂÆÖ?èoÿü(Ò¨¯5ÿ…¬Ðßþþ7øQÿ Xÿ =¿ýüoð J¢¼×þ6±ÿ@{ûøßáGü,mcþ€öÿ÷ñ¿Â€=*²eÑ®e™ä]{SŒ3<«ì38úšâÿáckô·ÿ¿þÂÆÖ?èoÿü(ÒTmP  c'©¥¯5ÿ…¬Ðßþþ7øQÿ Xÿ =¿ýüoð J¢¼×þ6±ÿ@{ûøßáGü,mcþ€öÿ÷ñ¿Â€=*Šó_øXÚÇýíÿïã…ð±µúÛÿ߯ÿ ôª+Íáckô·ÿ¿þÂÆÖ?èoÿü(Ò¨¯5ÿ…¬Ðßþþ7øQÿ Xÿ =¿ýüoð J¢¼×þ6±ÿ@{ûøßáGü,mcþ€öÿ÷ñ¿Â€=*Šó_øXÚÇýíÿïã…ð±µúÛÿ߯ÿ ôª+Íáckô·ÿ¿þÂÆÖ?èoÿü(Ò¨¯5ÿ…¬Ðßþþ7øQÿ Xÿ =¿ýüoð J¢¼×þ6±ÿ@{ûøßáGü,mcþ€öÿ÷ñ¿Â€=*Šó_øXÚÇýíÿïã…ð±µúÛÿ߯ÿ ôª+Íáckô·ÿ¿þÂÆÖ?èoÿü(Ò¨¯5ÿ…¬Ðßþþ7øQÿ Xÿ =¿ýüoð J¢¼×þ6±ÿ@{ûøßáGü,mcþ€öÿ÷ñ¿Â€=*Šó_øXÚÇýíÿïã…ð±µúÛÿ߯ÿ ôª+Íáckô·ÿ¿þ«ñXcì{qÿmü(Òk‘ðêáÛýãüê­ŸŒu[¢°·Lû±­­ÐÆ ‘Í:x>ࢊ)€¬2*…Õ˜”ŠÑ¤ å®4ä$ìTøj2~àü«±Øj<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*?áûƒò®ËË_J<µô 7þ¨ÿ¸?*Qá¨Áûƒò®ÇË_J<µô nÛCHˆÂŠÙ¶µVÂÚœE-ÿÙnip2-8.7.0/doc/html/figs/snap11.jpg0000644000175000017500000010253213341773367013606 00000000000000ÿØÿàJFIFÿá°ExifII*JR(i‡Züÿÿ)( üÿÿ)( 0210‘ 0100 ÿÿ È -ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀ-È"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?÷úBÀPdzo¯RÞ6v`ª£$“ÐPÖW½DowãZ·Å;É.tËxE¸8Y&‹ûàÖ²ÏÄq»Yÿß—ÿâé\xûjxQöÔþð¯ÿ…®zYÿߦÿâèÿ…®zYÿß–ÿâè¸õöÔþð£í©ýá^ ÿ \ÿ§?ûòßü]ð±µÏútÿ¿-ÿÅÑp=ëí©ýáGÛSû¼þ6·ÿNŸ÷å¿øº?ábëôéÿ~[ÿ‹¢à{×ÛSû¶§÷…x7ü,]oþ?ïËñtÂÅÖÿéÓþü·ÿEÀ÷Ÿ¶§÷…mOï ðoøXºßý:ß–ÿâèÿ…‹­ÿÓ§ýùoþ.‹ï?mOï >ÚŸÞàßð±u¿útÿ¿-ÿÅÑÿ [ÿ§Oûòßü]Þ~ÚŸÞ}µ?¼+Á¿ábëôéÿ~[ÿ‹£þ.·ÿNŸ÷å¿øº.¼ýµ?¼(ûjxWƒÂÅÖ¿éÓþü·ÿGü,]kþ?ïËñt\yûjxQöÔþð¯ÿ…‹­Ó§ýùoþ.øXº×ý:ß–ÿâè¸óöÔþð£í©ýá^ ÿ Zÿ§Oûòßü]ð±u¯[Oûòßü]Þ~ÚŸÞ}µ?¼+Á¿ábë^¶¿÷å¿øº?ábë^¶¿÷á¿øº.¼ýµ?¼(ûjxWƒÿÂÅÖ½mïÃñtÂÅÖ½mïÃñt\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿâèÿ…‹¬úÚÿ߆ÿâè¸ñöÔþð£í©ýá^ÿ Yõµÿ¿ ÿÅÑÿ Yõµÿ¿ ÿÅÑp=ãí©ýáGÛSû¼þ.³ëkÿ~ÿŽQÿ Yõµÿ¿ ÿÇ(¸ñöÔþð£í©ýá^ÿ Yõµÿ¿ ÿÇ(ÿ…‹¬úÚÿ߆ÿã”\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿã”ÂÅÖ}mïÃñÊ.¼}µ?¼(ûjxWƒÿÂÅÖ}mïÃñÊ?ábë¶¿÷á¿øåÞ>ÚŸÞ}µ?¼+ÁÿábëÞµÿ¿ ÿÇ)ábëÞµÿ¿ ÿÇ(¸ïöÔþð£í©ýá^ÿ Xþõ·ýøoþ9Gü,]cûÖß÷á¿øåÝþÚŸÞ}µ?¼+Â?ábëÞ¶ÿ¿ ÿÇ(ÿ…‹¬zÛþü7ÿ¢à{¿ÛSû¶§÷…xGü,]cûÖß÷á¿øåð±uï[߆ÿã”\wûjxQöÔþð¯ÿ…‹¬z×þü7ÿ£þ.±ëkÿ~ÿŽQp=ãí©ýáGÛSû¼þ.³ëkÿ~ÿŽQÿ Yõµÿ¿ ÿÇ(¸ñöÔþð£í©ýá^ÿ Yõµÿ¿ ÿÇ(ÿ…‹¬úÚÿ߆ÿã”\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿã”ÂÅÖ}mïÃñÊ.¼}µ?¼(ûjxWƒÿÂÅÖ}mïÃñÊ?ábë>¶¿÷á¿øº.¼}µ?¼(ûjxWƒÿÂÅÖ}mïÃñtÂÅÖ}mïÃñt\xûjxQöÔþð¯ÿ…‹¬úÚÿ߆ÿâèÿ…‹­zÚÿ߆ÿâè¸ñöÔþð£í©ýá^ÿ Zõµÿ¿ ÿÅÒÂÅÖ½mïÃñt\yûjxQöÔþð¯ÿ…‹­zÚÿß–ÿâèÿ…‹­zÚß–ÿâè¸óöÔþð£í©ýá^ ÿ Zÿ§Oûòßü]ð±u¯útÿ¿-ÿÅÑp=çí©ýáGÛSû¼þ.µÿNŸ÷å¿øº?ábë_ôéÿ~[ÿ‹¢à{ÏÛSû¶§÷…x7ü,]kþ?ïËñtÂÅÖÿéÓþü·ÿEÀ÷Ÿ¶§÷…mOï ðoøXºßý:ß–ÿâèÿ…‹­ÿÓ§ýùoþ.‹ï?mOï >ÚŸÞàßð±u¿útÿ¿-ÿÅÑÿ [ÿ§Oûòßü]Þ~ÚŸÞ}µ?¼+Á¿ábëôéÿ~[ÿ‹£þ.·ÿNŸ÷å¿øº.¼ýµ?¼(ûjxWƒÂÅÖÿéÓþü·ÿIÿ [ÿ§Oûòßü]Þ¾ÚŸÞ}µ?¼+Áábëôéÿ~[ÿ‹£þ6¹ÿNŸ÷å¿øº.½}µ?¼(ûjxW‚ÿÂÆ×?éÓþü·ÿGü,msÒÏþü·ÿEÀ÷¯¶§÷…(¼CÜW‚ÂÆ×=,ÿïËñtáñ#]^Ö÷åÿøº.¿,êÝêPÀ׌xâ|ò_GoªCÇ! &ˆ }Á'|ñ^±it%PA¦…€äQ@Ìp¦¸/^еÛÈ?ñÓ]ÝÉÄf¼ËÇŽ²¯Gý1ähÇ7Qº¡ÝFê‘—¬-$Ôoc´…âY$$)•Â/Lã'¿aïZÚ§„õ ?RžÎÙ†&Š:+,kŒ³)n:ð2I¬ {©­.c¸·‘£š6ÜŽ½T×Cáÿ*j³¾µw3Cqbö^qÌJqƒÉ:/3:=S•ìR;Ff¿Rö :þ𧯎)ú†«ésÁ 턱IpvÄWÞ}RFyé],:þ‡c­ø`E¨´öšd2Ç5ÇÙÝ9e |¸Ï_­f.µf|?¦Ú-ûAuª×Ä,ÞTg8p1ƒÉÎÜÑ×úïoËPþ¿…φõ«;»[K‹Iî‰XSÍC¼Ž£†ÀëßùCï>€©<ûu®ši6~+ÒŸOW}ÅdƃºLî`‘ªú§ˆì­î4Óc}myioz.šÞ 8Ûm#ÜðÄ‚i­lÊòøJïN𾣩j–²ÛÏEöu2)3a²>½ñX1X]Ïa5ôP¶…Ö90ùYº g<ý+§Õõm û]Z¤·7:­Äsˆ^ÙÐņÉÿ­Yþ Öì4»»¨uR~ÃpŠÇ [÷ˆÁ“€½%»¿õ¢þ½Aí¡B] U¯K'V²(.õ% ýÑÁù³ŸáÍ;Qðö³¤Ú%ÕþŸ,99*@>ø'Ž+£¾ñŤÖzeÌqî¾{¨çÔ)ð£$`çƒÇLT¶·¢Ç¦k‹a=ìúÄÉ!ŠH¸ »’~ñíÇ £úü¿àB-#ÁºÖtøµ›`²¹v]ÂTÜHF`8$»éX“éðÇÆÕÄW2˜í¾aºR8\î?\bº'ñ”ß`ÖEÏú 7”ü~è¯ÝÆî¾Õ_Y×4ýfóKÕ£¿{+ødXæAºÆªr² Æ1þÎúïªFfÏárÚòÚÒm=–âëp†?5 | žÆ®*-GAÕô™aŽþÆHZfÛYX1ôÈ$gñ®ÏO¿Ñoüi¢Kc$W‰yMÕÌÍIû¶Á*ßÅïY7:¦a§Úéê]R©ýªäù DèP×ðëÍ upïýw0õ/ë:D÷öB²¶Ä!•ÁoO”ž}©×^Öì¾Íö6T7M²Ü¥ºãh$Ä éõh–ÖVÉc<-Q.Ö {n1Øä[Þ©¦¯ é¾0ÄVúœ·¾tîÒÛ›VW…]HÎãÃc `v¡9ýSEÕ4SÔlÞßÌÎÂYX{©#>ÕŸººOjöw6ÙéúµÍ¿žf1A§o,ã'ø‰ÉÎcìù:L–Ùšd›Ã´ÉmºuÏ£çŒvâ’/h~¹×ìõm3Ú)óKüD€0¨¬|9¬êMp¶v-1¶Ç( Úèå† ÔþÔ4ÔÓ5/RºkHïãŒ$â#(RŒN ŽyÍiøkRðæ™Ùn ŽêÝâêk”Ëè‚c=ý©ÛRz´ß Üê¾¹¸´¶šMNß Â]P*…²äúÕ-'×zž°úl²Ee$LSpÀ$à¹Ë@?>kmõT²Õm.µY,–mXÞÄâÙܲ`c¯JÌ»ñ÷Ä(u“º+5¹‰·2’Ûq'·J#«Wþ´C{;Z³þÜØê7Ve÷˜&x·ã¶’3ŽÝ*¾ê³ª^E?ˆ// Û,/tò¦õ;]K’28>”jš·ö£ÄßÙÚu—–Å¿”?Þ俥^Êã{²ðð¾ºÚ`Ô—MÙ˜üÑ t9Lg;s»ö§K'HšÆ+™®ïÞTJ;ðó‘Àç5¹eâm&WE™îÈŠÛHû,çÊs‰1÷qŽyî8©<#©ZO7„´øåÝuk-Ñ™6‘´2±ãð5VÕÿ]Ééëc™½Ð5=*æÞ-RÜÙ,ìM#AêIRzuÇZ³©höš2ê¶´z…·Ÿöy¢*øÏÌ=êö£{¡Ã¤[è1j’ÝDú—Ú..>ÎÈ N„rIêxÏzgН4k«(¢Òu”kKl }=,äN¿yË·ºòi_B­gc—ÝFê‡u©ˆ›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Qº¡ÝFê›uªÔn  ·Uí/O„®Ò»$ðvõcè+/ujiWkr[±ÆöÜ9ÆxóøP¼º™$ebBøáÖçÜþµsðØË.¡ö"B¸bº€óë[>d|á¤wi˜ÈœVd7Àj¯txI̞ÌÒaÑ#‰•ãº}™ 6Ù8Ç^ƒmdjsYÞ,L«'1çœ`ûÖ‰’Sk4 BD›ðÆCŸ˜“Óo¿­V¼½ß}nè7}·ýNAÇéC½´muszËÃú5²$WÌgºe,G˜T uÀàzšËÖt«kh÷N•žÕÈXçnz{Š¿?“ªB›¦Í¿ÞÉlc©éŒœŒsÐñjëWØÓͫȯ3íÜTc€AÎ;tåQÄT•D¯«ÝGŠÁÐ >T’Z>æêúÃwfkX‰9%E|纽ïÂ,M¤?îŠõÑóGÊŠ)°ýÁE0uþ¬×˜xóþAwŸõÉÿ‘¯OºÿVkÌxD_ïà”êÖ{DWQùNQ\Àü¬)à÷Töú{\i——Ë*„µ1‚¸ÉmäŽá@wT]Ok2Ím4Ê¿vHœ«ÜȨ)8 úÒÐË’I$’y$÷¤ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(Û¨ÝM¢€ºÔÚ(C+–„“KçAQQ@ ˜  zqJ³”èò¨¨  w"P”'®Ö#?‘¨ÚRÄ’zÔtR²½ÇÌÚµôº½ûÂñéû¢¾¯ 0ÿ GþLÃÿÅÒŠ·áø[ü†õüÿŸõr꿈`ñ=ßÛ-5;™9 "lË{ÇÏ9ã·ÐõËø‚ÞK]vînÍÜi›ï1 ›“ÈÎ=Emÿ±ñ‡ý?òfþ.øV>0ÿ GþLÃÿÅЕ­ä6ïs’®¢k»Ko hbçL‚ð³\m2K"mùÇMŒ?Z—þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.˜°Ñ¶¥©IiÿÚÒÈÁœÊ“,~PÜ#.¬»žøïÖ²¯ä{Û?°Ékp«lòÁ#!ÛÎpÉÈ'½Cÿ ÇÆôÿɘøº_øV>0ÿ GþLÃÿÅÐÕÝÁhqu>²ºš·ö"ÚŸ³y¸Ø%Ú»<¿Cž¸íœ×œWq¨øƺ¦¡-äú2,’X%Ä@tÇj©ÿ ÇÆôÿɘøºIK•Öÿ±ñ‡ý?òfþ.øV>0ÿ GþLÃÿÅÓ’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*+­ÿ…cãúäÌ?ü]ð¬|aÿ@ü™‡ÿ‹ JŠëáXøÃþù3ÿGü+Ð#ÿ&aÿâè’¢ºßøV>0ÿ GþLÃÿÅÑÿ ÇÆôÿɘøºä¨®·þŒ?èÿ“0ÿñt±ñ‡ý?òfþ.€9*÷ÿǤ?îŠòßøV>0ÿ GþLÃÿÅשxCþ=!ÿtSB=¸(¢¸(¦.¿ÕšóÈ.óþ¹?ò5é÷_êÍy‡ŽÆtÛ±ë#@•bØÓ-qÿ<“ù ŸÌ>Õ‡©Hñø.åãfG]=вœ|¾ Õ$Ô/ôß [My¨X¬òˆÖû,œ®q°9go¦>”€éžácÛ½•w£'>”ÿ0ûWu«ÞkZF—2, y²°hÝc,¡°ÛN ‡šßÓïõ+¹u-.åí¡Ô-B¸†2c*à•m„ç#ŒÓ¶Ÿ×—ù‡_ë»G@“Ú©GÿWc·š?ô¬¿ IrÚ}â]]Ku$WÓÇæÊrHVÀöAÅjEÿ7õÔè CKERQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEɦŽÞ '•¶Ç—vÆpÉ5ZÛSµºŸÈŒÌ$Ú\,nÿë ÿЭUSÊO3ư²ÈÁ†é#åû§Ò€%¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ¤2J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠ’ŠóÊßþÿ7ÿF.ÿç•¿ýþoþ"€$¢£Åßüò·ÿ¿ÍÿÄQ‹¿ùåoÿ›ÿˆ  (¨ñwÿ<­ÿïóñbïþy[ÿßæÿâ(J*<]ÿÏ+ûüßüE»ÿžVÿ÷ù¿øŠÏÕô‹[Û+Æ[y/$…‚HÑ®íÛp¿1ü+FÑ.ŸS/ªéÈmÄNM²A¸•ÇžÀó]V.ÿç•¿ýþoþ"Œ]ÿÏ+ûüßüEa<<'57º%Å0EoÅIkÑBø ã|#Ŭ_îŠëä–x|ÑGå¼É!%G® Šä|'Äýn†wÐ}ÁE}ÁE0uþ¬×x¤n8õ8¯EºÿVkÏ|H3qõqü躲ÿ}¯ýqOýTõ—üƒíëŠè"§ ¯ü~Çÿ\ßù­X5]ãö?úæÿÍjÁ Ÿ¥UnµiúUVëHíÿä%?ýp‹ÿB’®Õ+ù Oÿ\"ÿФ©ZúÕ/ã±iÐ]H…Ö"y*;ÿŸCèi€ÛÒPÛÍ‚R)w>p ²çó"¡7öYÿëoûü¿ãW%f #möàŸä)ÿfoùù—ò_ð  ï·ÙÏõ¯ýþ_ñ£íö_óýkÿ—ükGìÇþ~fü—ÿ‰£ìÇþ~fü—ÿ‰¤wÛì¿çú×þÿ/øÒ=Ì7^\ò¤ÎdF>[ ƒqÓ¦?Òû1ÿŸ™¿%ÿâi’#Ûí5¤BÁX08`äP2J(¢˜‚Š( Š( Š( Š( Š( Š( Š‚ægŒÅAL’¾ÅÝÐpNOà 'Ùµ/ùú¶ÿ¿ÿŠ  U²ê_óõmÿ~ÿGÙu/ùú¶ÿ¿ÿŠ  U²ê_óõmÿ~ÿGÙu/ùú¶ÿ¿ÿŠ  Uxšâ+"äÆÌÈ]0@ Aúб@Q@Q@Q@Q@Q@×1@B»Ç¢*–côš!¹ŠrB1Ü:«)VPy  h¢Š(¢Škô¦Sߥ2Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š(  ÷ÿò¹ÿ®Mü«“博²ÿþA÷?õÉ¿•ržáw}ÁE}ÁE1 ºÿVkÏ|Eÿ1×EþuèW_êÍyãæ/úè¿Î€;«/ùÚÿ×ÿÐEOPYÈ>×þ¸§þ‚*zjÿÇìõÍÿšÕƒU×þ?cÿ®oüÖ¬‰úUVëVŸ¥Un´€ŽßþBSÿ׿ô)+.Û\jM¨6£~·A ehþR:òt1Z–ÿòŸþ¸Eÿ¡IT¥ñf ï —2‰ü¶_³JpÙÆ>í05$8¸´ÿ®§ÿ@jUÕáÒ’ ðÏ<·ùPðO êiÓ·ïìϬ§ÿE½P×­eÔ,„ÙÙ]‚ùd»v@= •RA¤Æ‹K¬Çö« Ym®!žñÑ$ ”ÙŒ†Á<óÛ5FOÚƒÃc}s,³M E¦âb8cËNk54m^ÚÛHž;¨./ì<Åapï±Ñÿ‡v q€#œQ¦hWÖ·¶W[n†k©¥Xو̧ .@Î=ñO¨º6>0³¾šÕE•ü0ÝHaŠy¢ †Aœ¡ù²tÆGZÙ½?èÃþºÇÿ¡­sh7iaa’ Öú›^1 pP»¶pÃük¡»|ÛúíþŒZ]©ÔᬚvÙ<ä·°6í$ŒuëÅeÂalénÖÚv¡rf¶[a HÉÆNXsÇAš—RÓu!­ OL6ŽÏlm¥ŠåÙ7n ƒÏ'ŒU}÷Z]Å«Í,.±i«hÛ ÉpÄç‘ÓŸþµ?¯?ø×úòÿ‚,~&’ã]‚;Y¯,g²ŽáP˹ÈËnaÆA“Uî¿wä¿à’Åâ µéEk}kk4S9ûBY€ ´Œ<kZë\ŽßTtVwwS„Y$òq± Y‡¡éž•Ÿg¥kM«é·‹XyVIx÷K¸’¥p½=M"ÑoõK˜ÞÎ+(d@wÆWIáç'WæÄMÛK ^ÎåùµØ“Tm> ;»¹cÛç4¥!ÝÓq$vç'M®Çm©Ågqey Í'•Ë*ùNøÈ†$g¨YtíVÃY»¹ÓÍœÖ×®’J·ÈѰP¤®Ö@ð÷öÌ7/Ÿ'—ö£zÎÿhdÉ!1·d½Ž:R[«ìËÚv¹öK=BkÆžáÿµ%·‚$¹ùQGÓ>Õ¡mân€ c|&"ÚhL@´ Fw> qŽA=kóÂ7WV÷1±²” E¯­Ò`Y$ äcާf´ôÝ6÷M¶mtý"Éžà„·Ý´ÇŽ í\¿Ôb…çåúÁ¾ž¯üvŠ(  ·_ñû§ÿ×sÿ 5eø£Ä×:HòtØ"žxŒorÒçd1»…:±ÉÀö$ûê]ÇîŸÿ]Ïþ€Õâ/AªÛÞ=¤×Þ]K’fòU‰Š•ä¨8ÎÕÀãÒ…¸tâMwRÑ.á0ͦH’º$V.í3ä€ÛlqŸî‘êE/‰uied°ŸLqq2Akm-¬#»v,$’N8“_Ñu^ÒM&(ôÑ`꨷SÉ$“Æ2ÀÁn8;«FãIžãÄzmëÈicU‰Þem 61º¿zÑïò×Ì*_vÑÆ{âEJãþBvÿõÂ_ý :ÌÕ|Ck¤Î°I²ÊWyXñÀè ,@ì*Ó¸ÿ¿ýp—ÿBŽ©êªJ²^[y’(ÚHÈqéò‘šÎ§?/¹¹­MO÷··‘‘ÿ µŸüù]ÿßQñtÂmgÿ>W÷Ô_ü][ÿ„CCÿŸ7ÿÀ™øª?áÐÿçÍÿð&_þ*¹ùq]×õò;9ðË/ÃüÊŸð›YÿÏ•ßýõÿGü&Öóåwÿ}EÿÅÕ¿øD4?ùóü —ÿŠ£þ þ|ßÿeÿâ¨åÅw_×È9ðË/ÃüÊŸð›YÿÏ•ßýõÿGü&Öóåwÿ}EÿÅÕ¿øD4?ùóü —ÿŠ£þ þ|ßÿeÿâ¨åÅw_×È9ðË/ÃüÊŸð›YÿÏ•ßýõÿGü&Öóåwÿ}EÿÅÕ¿øD4?ùóü —ÿŠ£þ þ|ßÿeÿâ¨åÅw_×È9ðË/ÃüÊŸð›YÿÏ•ßýõÿGü&Öóåwÿ}EÿÅÕ¿øD4?ùóü —ÿŠ£þ þ|ßÿeÿâ¨åÅw_×È9ðË/ÃüÉtR;È.õ(2„ÙA xÎqÔ“×½KyvÙ\Æ…™¤1¥I+µŽ3œuPzÕ(í£ÐÙíâFKYdß1ÁÚ³œñž½êh¯¯ (¹ŠÞBîÌK íaŽs“ófº£{.mÎòó>]‹Ú-ÿ>“~kþ4h·üúMù¯øÕÝ©ÿ<ãÿ¾ESþyÇÿ|Š¢ _Ú-ÿ>“~kþ5j DÑï WœÝE?jÏ8ÿï‘K€8è5úS)ïÒ™HaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP{ÿùÜÿ×&þUÊøcî­uWÿò¹ÿ®Mü«•ðÇÝZîàû‚Š û‚Šbuþ¬×žø‹þ>bÿ®‹üëЮ¿ÕšóßÇÌ_õÑwV_òµÿ®)ÿ Šž ²ÿ}¯ýqOýTôÕÿØÿë›ÿ5««¯ü~Çÿ\ßù­X4ôª­Ö­?JªÝi¿ü„§ÿ®èRT2è63kQê¯ûB.1Ÿ”žÌG¨ø šßþBSÿ׿ô)*í0+ÝÅ#ˆ¤ˆñ>ð¤ãwHÏК„Í1?ñásùÇÿÅÕê(‡›7üø]~qÿñty³Ï…×çÿWè  lßóáuùÇÿÅÐD÷-fÞHc®í!\¤R{Wè Š( Š( Š( Š( Š( Š( Š( §‡Í1²¶É#mèØÈäwàšLßÿÏÅ·þ·ÿSQ@æÿþ~-¿ð¿øº3ÿ?ßøßü]MEC›ÿùø¶ÿÀvÿâèÍÿüü[à;ñu5 E!ŸÎžEyì]‰´œž2}~Õ5PEPEPEPEPEP&†;ˆZ)T20ÁˆaŽÞ%Š% Š0§Ñ@Q@Q@ ~”Ê{ô¦RQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE^ÿþA÷?õÉ¿•r¾û£ë]Uÿüƒîë“*å|1÷GÖ€;¸>࢈>࢘†]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@Õ—üƒíëŠè"§¨,¿äkÿ\SÿA=5ãö?úæÿÍjÁªëÿ©ÿ\ßù­X4ôª¯Ö­?J¬ãš@Eoÿ!)ÿë„_ú•Cżú5…´ÖòZÄfºHZ[ Lq«g,pæ=jüòŸþ¸Eÿ¡IUõÍ2]Ql#÷±Ü8žUs8<óO°û”bñÙ´õ¹¸ºµÕL· oÒrägiÝ!üEZ¸ñvæ(ÿ³¯å¹h¼ç¶‰¼Iœe¾luÏ’qRjÚ[Þ;ìþTbÚñ.2 ã¯5™®xeïµ¥Ôâ³ÓoI€Bð_ƒ´`’X+`òA£úü?Ì_×ãþEÉ|SfE¸³·»¾{ˆÂ¥´`•ŒôfÜF9ãxèú×Uÿ ûŸúäßʹ_ }Ñõ î¸(¢¸(¦!—_êÍyãæ/úè¿Î½ ëýY¯=ñü|Åÿ]ùÐueÿ û_úâŸú©ê /ùÚÿ×ÿÐEVƒZ±¸Õ¦Ó#—71.HÇ÷÷#Œý~¸¸ÍåÎ’ífP¥NÑ’3ŽqøSì>“ß—ÿ k$ÉâªT³êqŽ?Zy²‡Öoûüÿã@µìtŸÿäÿâjº‡û·ø 'ÿSµ”uŸÿ$ÿ⪵‡û×ø'ÿHÑ]îf¸ddVU ±Î;}ïÒ®U;Ft¸šÙQUјä€Û† ïʟήS¢£”’ÑF¬WÌm¥‡P0Oô©>ɬ¿÷õ¿Æ€ (û$>²ÿßÖÿ>ɬ¿÷õ¿Æ€ (û$^²ÿßÖÿ>ɬ¿÷õ¿Æ€ (û$^²ÿßÖÿ>ɬ¿÷õ¿Æ€ )ÑvŸ-äWìK±‘4Ødó`ŽLcz†ÇÔP袊(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Škô¦Sߥ2Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š(  ÷ÿò¹ÿ®Mü«•ðÇÝZê¯ÿäsÿ\›ùW+áº>´ÝÁ÷A÷Ä2ëýY¯=ñü|Åÿ]ùס]«5ç¾"ÿ˜¿ë¢ÿ:tëaÿLSÿA›…t{k˜î!¶•e÷«}¦S†õå«FÌãN¶ ˆßå‹kã [»øì£ÓïÄï!k,)sóäÞ€:ÿÔÿ®oüÖ¨øŠúâÓOH¬˜-õÜ«onHÎÖn­Žû@-øUåÿØÿë›ÿ5¬ýSÃöÚÆ§mq~#¸µ·Õmdr—b>rIìÇsH èõ]Fß:îmbÍ$Äqî&eà0\wá€Çz4±r³ƒªÜÞÊ›D‘ÜÀ°¼'ݧŸJžeÏ|ú<ñXÅr‰ˆVÜ2FëÕ€Èê8#Ž™Í7NÒf´¾º¾¼¼Ww ¨YbòÑUs€'ÔòI¦”òŸþ¸Eÿ¡IW*•¿ü„§ÿ®èRUÚŠC‹›Oúêô«DÕ+ƒ‹‹?úêô[ÔÆNi6hÍWóhóhÆhÍWóhóhÆk Ä^#mO*ÎDØ]–kÕ…Î;"wÄV¯›\ö¯áùµ û‹«kè k›o³J²Ûy¿/<©Ü Ÿ˜úö¤ïÐjÝN–Öá.­¡¸;%@ëŸB2* #› sÿL—ù M>!igmjp†5v1œ f“O9ÓmOý1Oä*ݯ¡*öÔÍ×üEˆ±ª[µÔìT´jÛB!`»Øó“ëùãn¹?øbòê+ùìoîŒ×RDÍ"ÚB²ã— ÆzýkªY"DgiTì,}N8ü©-†÷EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_¥2žý)”†QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW¿ÿ}Ïýroå\¯†:­uWÿò¹ÿ®Mü«•ðÇAõ î¸(¢¸(¦!—_êÍyãæ/úè¿Î½ ëýY¯=ñü|Åÿ]ùÐueÿ û_úâŸú¦G§YŨK·S(Wu ‘ùJ}—üƒíëŠè"§ ¯ü~Çÿ\ßù­X5]ãö?úæÿÍjÁ Ÿ¥UnµiúUVëHíÿä%?ýp‹ÿB’®Õ+ù Oÿ\"ÿФ«´À«zJy°JE.çÀÎV\þdT&þË?ñýmÿ—üjäŒÀ¢!¤m ‘œpOòÿ³7üüËù/øPwÛì¿çú×þÿ/øÑöû/ùþµÿ¿Ëþ5£öfÿŸ™¿%ÿâhû3ÏÌß’ÿñ4€Îû}—üÿZÿßåÿ>ßeÿ?Ö¿÷ùÆ´~Ìßóó7ä¿üMfoùù›ò_þ&€3¾ßeÿ?Ö¿÷ùÆ·ÙÏõ¯ýþ_ñ­³7üüÍù/ÿGÙüüÍù/ÿ@ÿÚV‰Ê\Å+öHä Ì}nÎ&‚ÆÞ'ûɩǨ©ÚP¤Ç;³Âàþ@Q‰bI”0üi€ê(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ý)”÷éL¤0¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(UÕ|«Ó¦y9ó­ÝüÍÝ8n1ö}{Ö7†:­XÖÿäiƒþ¼ßÿA’«øg§ãYR““•ú?ò7ÄB0Påê¯ø³»ƒî (ƒî +cœe×ú³^{â/øù‹þº/ó¯BºÿVkÏ|Eÿ1×EþtÝYÈ>×þ¸§þ‚*z‚ËþAö¿õÅ?ôSÐWþ?cÿ®oüÖ¬®¿ñûýsæµ`ÐOÒª·Z´ý*«u¤vÿòŸþ¸Eÿ¡IWj•¿ü„§ÿ®èRUÚ`E!Åͯýu?úU¢jœç6õÔÿè·©Œ”6hÍAæÑæÒ|ÑšƒÍ£Í  ó\“x’];Ä:Ú\[_ÜÚ[ù-º .̱<ƒïÀ5ÓyµÌ^iz×öެö/b Ô•¤™ß|XM¤… †üÅô·S¬‚hî!ŽhœÏ©µ„:míÜ©ÊæÕ HÜëýÓZÕÈx•»žM:ÓW]kb$3Û,‚'Ç*çË*2sŸzëSw–»ñ¿v:f…°Þ㨢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Škô¦Sߥ2Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( W[ÿ‘¦úóýJ¯ážŸXÖÿäiƒþ¼ßÿA’«øg§ãXPÞ~¿¢:±_ ?ð¯ÍÜpQDpQ] ˯õf¼÷Ä_ñóýt_ç^…uþ¬×žø‹þ>bÿ®‹ü躲ÿ}¯ýqOýTõ—üƒíëŠè"§ ¯ü~Çÿ\ßù­X5]ãö?úæÿÍjÁ Ÿ¥UnµiúUVëHíÿä%?ýp‹ÿB’®Õ+ù Oÿ\"ÿФ«fXÄ¢"ê$`X&y u8ôä~tÀ­zÂ9-dc„Y¾f=Q€ýH© ±ìiòŸ” PÌçh Óñüªÿضýíìð $ØÿÝ4lîŸÊ£þÅ·ÿŸ{üãGö-¿üûØÿà(ÿI±ÿº*6?÷OåQÿbÛÿϽþñ£ûßþ}ìðI±ÿº*6?÷MGý‹oÿ>ö?ø ?Æì[ù÷±ÿÀQþ4#J-Ñ¥”íE$ÑbŸmŒ:Ä¡‡¡S• %ŽÚ̺ò6Àþ=je‘¦eXvò¡Ë0èN? b%¢“ɸÿžÑߣÿÅRy7óÚ/ûôøªuß&ãþ{Eÿ~ÿKä\Ïh¿ïÑÿâ¨h¨Át—Ê—i$nVQ€G~?RPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_¥2žý)”†QEQEQEQEQEQEQEQEQEQEQEQEQEQEQErºßü0×›ÿè2U ôüjÆ·ÿ#Lõæÿú •_Ã=?†óõýÕŠøiÿ…~lîàû‚Š û‚Šè9]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@Õ—üƒíëŠè"§¨,¿äkÿ\SÿA=5ãö?úæÿÍjÁªëÿ±ÿ×7þkV Dý*«u«OÒª·Z@Goÿ!)ÿë„_ú•‹sá‹ùõÏíUÖ&W1öbv þ¿ÓÏ®Mm[ÿÈJúáþ…%1õÝ"7d}VÅ]NM§Z`\oøø¶ÿ®‡ÿ@j¹T؃=© Èô«tµOQÕ,ô¨R[ÉJ+¸D ŒìíèA$ðz ·XÞ#´7vp„°ºº’9wÆÖ³¬RBØ#pf`;ãý)0.G«ÙK%¤k+ .Õžx™KÆì‚8ÆG\UYüQ£Û¢;ܹß,ªÇŽÅáÆIà÷éXâÏÄ&‡©\[}¶öÐL“²"¹Gû§' X¹è:â²âRÒµMßL’K©noæû*Íà®A6väëO¨—öþ—ý”º˜¼ChÇj¸’ÙÆÐ¸ÎìñŒf¢>(ÑŇÛ~Ö|Ÿ7ÈÇ’ûÄŸÝ)·p>Ø®n j“éi0º:£j gÉ‚•Û´H¤a±ÎsŒæ¬&…1ŽÊk}6îÞ_í8î.Õà™Êª‘¸±vöü–øù^AÑõÈùзÿ”ÿõÂ/ý J»Lßþ>-¿ë¡ÿЭUI?ãâ×þºýªÞh¢“4¹ £x!’hæx‘¥>[•“=p{f¤Í Š3Fhkͱ.3ɵ„ø¿øŠØk*8RâÖÕe¤X”†P¨#ûÑš˜“FMGý˜þ’àtÔf?¤Ÿø5!’dÐ ¨ÿ³ÒOüšìÇô“ÿ¦ Ý»R„« ™öË&?‘üªåV¶…-äxü²’7ÌX¹rãýãÉÅY¦ ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¯Ò™O~”ÊC (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€9]oþF˜?ëÍÿô* ÿZŸ[ÿ‘¦úóýJƒÃ?Ö°¡¼ýDub¾á_›;¨>࢈>ࢺA—_êÍyãæ/úè¿Î½ ëýY¯=ñü|Åÿ]ùÐueÿ û_úâŸú©ê /ùÚÿ×ÿÐEO@ _øýþ¹¿óZ°jºÿÇìõÍÿšÕƒ@?JªÝjÓôª­ÖÛÿÈJúáþ…%]ªVÿòŸþ¸Eÿ¡IWiŸñókÿ]Oþ€ÕhÕIãæÓþºŸýªÙ ŠJ)´RQ@ E%áÖ³ôÃÂÿ×´?û5_k7Mlcþ½aÿÙèLš3Q'˜(—ˆ5VÑ´YïÑÌeàrÀZµg¨ÙjÏeyorªpÆUÀ>‡±¼a—~»†^w%–‹¸°¤àw૤µx¦]JÖÂ{+1f o: ™÷d§ 22Gzh×:9úlõÍÿšQ,±ÁË4‹h 3¹ÀP:’OAL•³oÿ\¤þiUõ«T¾Ño,ä¸[už#•†BîãÔzúÒ{ ²ÔôýKØo­®¶c‘2¾ÜôÎn°4BgÔo´¹ÍœÍh‘°¸´RªÁ³ò²äá†={Öý1Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ ~”Ê{ô¦RQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEÊëò4Áÿ^oÿ ÉPxkúÕýbÂæMm/V<ÛÇjêϸpv¿n½ÅPð×õ¬h¦œ¯ßüŽœL“TìöêÎê¸(¢¸(­ÎQ—_êÍyãæ/úè¿Î½ ëýY¯=ñü|Åÿ]ùÐueÿ û_úâŸú©ê /ùÚÿ×ÿÐEO@ _øýþ¹¿óZ°jºÿÇìõÍÿšÕƒ@?JªÝjÓôª­ÖÛÿÈJúáþ…%]ªVÿòŸþ¸Eÿ¡IWi ¿ñóiÿ]Oþ€ÕhÕY¿ãæÏþºŸýêÉ4€(¤Í ¢“4f€ŠLÑšrõ¬›‚?ëÒýžµ”óY0²ZY²V!@h±œ`uÏúТƓq¨~Ëwÿ=¯(?²ÝÏkßÊð dÛ(cP}–ëþ{^þP…eºÿž×¿”á@Σn?錟Í*yíẠ¸†9¢q†ŽE §ê Ck Ç,…šVœ¸ËŒã¶1Æ:ô«TÄAicia•gk´yÎÈc3ô=PEPEPEPEPEPEPEPEPEPEPEPEPEP_¥2žý)”†QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW¿ÿ}Ïýroå\·†¿©®¦ÿþA÷?õÉ¿•rÞþ¦€;¨>࢈>࢘†]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@Õ—üƒíëŠè"§¨,¿äkÿ\SÿA=5ãö?úæÿÍjÁªëÿ±ÿ×7þkV Dý*«u«OÒª·Z@Goÿ!)ÿë„_ú•v©[ÿÈJúáþ…%]¦ÿÇÍŸýu?ú-êrj½Çü|Yÿ×Sÿ¢Þ¦cHͦfŒÐóFi™£4üÑšfhÍJ§æªzIýÚ׬?û5ZCó ¥¥6?ëÒýš€5 £5Áø¶[Mz;éÚÎúd‰tëŒùŸxá¡Æ~céŽp9¹¨[XIâÛ{¹Dß[+[+ñæþënÔäc_KŽÚØô<Ñšó NÂÖæÛÄ×sB Õ¥¬ o/GˆˆùOnk¡Ñí-´¿ËmcÁo6œ“×þ¸§þ‚*z‚ËþAö¿õÅ?ôSÐWþ?cÿ®oüÖ¬®¿ñûýsæµ`ÐOÒª·Z´ý*«u¤vÿòŸþ¸Eÿ¡IWj•¿ü„§ÿ®èRUÚ`W¹ÿ‹?úìô[ÓØóQÜÿÇÅŸýv?ú-éXóHͦfŒÐ1ù£4ÌÑš~hÍ34f€'Œü³ôÖ§ýyÁÿ³ÕèÎ*•¥³½¤ÐÊ#“ìè§rîVã##¦O~ô´\Òo¦y¿óñkÿ€íÿÅÒ}ž÷þ~-ð¿øºI¾”=Eö{ßùøµÿÀvÿâé|‹ßùøµÿÀvÿâèų¨Ûÿלu-Í´wvÏo.ÿ-Æc²À©~£‚ÙÒVšiD’‘´m]ª£ØdõïÏaViˆ«a§Yé–þE” d–!z±=I'’}ÍZ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Škô¦Sߥ2Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š(  ÷ÿò¹ÿ®Mü«–ð×Sþñ®¦ÿþA÷?õÉ¿•rÞêÞ4ÝA÷A÷Ä2ëýY¯=ñü|Åÿ]ùס]«5ç¾"ÿ˜¿ë¢ÿ:äkÿ\SÿA=Aeÿ û_úâŸú©è«ÿ±ÿ×7þkV W_øýþ¹¿óZ°h'éU[­Z~•UºÒ;ù Oÿ\"ÿФ«µJßþBSÿ׿ô)*í0*ÝÇÅ—ýv?ú-ècÍëì¿ë±ÿÑoLsÍ!†hÍ34f€š3LÍ æŒÓ3@4bóŠn›ÿ »OúâŸú¢óŠ4ßùYÿ×ÿÐE-Q\=ÛMsâíZ‹\¹Š%ƒbØ^’<¯9bõükfßPÔeׯm"kd±°‰<Äw•Ã&îvúƒO¥Àߦ¼‰Ýí\œdú ã´¯__ÝÚJmwYÝ3|‰i0hW«4„laÇ8Ç^õ÷ú®¬<=¨Ü 8ìn5Þ‘XÊ£kmÜÙÁãÐ »HSº¤fTRÌB¨$œ+Ä´šj@–÷Vñ\JNÔ–ÚIË€9ÂÆsé“UަÚÏÃûA£¼ÖR–QœÆ{dRoFû +´»²º†R ‘AàŠZå4]KS³mËP’[ÞÛâ·VVŒªÃdœäwçµuuMYØ”î®QE!…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ ~”Ê{ô¦RQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE^ÿþA÷?õÉ¿•rÞêÞ5ÔßÿÈ>çþ¹7ò®[Ã]OûÆ€;¨>࢈>࢘†]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@Õ—üƒíëŠè"§¨,¿äkÿ\SÿA=5ãö?úæÿÍjÁªëÿ±ÿ×7þkV Dý*«u«OÒª·Z@Goÿ!)ÿë„_ú•v©[ÿÈJúáþ…%]¦KÏõö_õØÿè·¦?Zžê•‘¼M½K:søTÌòçîYàYÿâ) \0i¾|¿Ý²ÿÀ³ÿÄQçËýÛ/ü ?üE;ŒoŸ/÷l¿ð,ÿñyòÿvËÿÏÿ@Á¥æ™çËýÛ/ü ?üE|¿Ü²ÿÀ³ÿÄP˜Ö ]3þAVõÁ?ôU„—þî3i7Öà¹_p»F:І%‚âN*ýÅ+[é°ÛjW·èÒnöyˆÚ68÷¢ßM†ÚþöñÌ—… ˆÚ6®ÑŽ=*åÀÈÓü?™06××¢ÕK³gSç°ùwcž™ªðøNÒ ‹vŽòø[[MçÃhdS7=>]ØäñœVý™©h±ê7P]-ÕÕ¥Ì*Ȳ۲‚U±•!p;v§[h¶Öºö:¼­nbh‹3 ä6sÈÏ'µhÑGKõ¹§xnÞÂꇼ¼¼’Þ?*´º‘žЪpÉÉ­š(¢àQEQEQEQEQEQEQEQEQEQEQEQEQE5úS)ïÒ™HaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP{ÿùÜÿ×&þUËxo©ÿxÿ:êoÿäsÿ\›ùW-á¾§ýãü躃î (ƒî )ˆe×ú³^{â/øù‹þº/ó¯BºÿVkÏ|Eÿ1×EþtÝYÈ>×þ¸§þ‚*z‚ËþAö¿õÅ?ôSÐWþ?cÿ®oüÖ¬®¿ñûýsæµ`ÐOÒª·Z´ý*«u¤vÿòŸþ¸Eÿ¡IWj•¿ü„§ÿ®èRUÚ`E( ,Ã*Ò`ƒß Oó®g*”§6ŸõÔÿè Y¾&¼¼·‡OŠÊèÛ=Õê@Òª+Rpž=(êþhÍp÷šÞ­§Øk–z³\Ø´Uß”¡¶È@Ã(r9íÜqW®åÕ!¿ÓtXõy— ,²^¼1ïÚ›pŠ»vçæëŽ‚€:¬Ô1^A5ÄðG*´°%QÕIü+Žö¨ö±éâê5»:£iæøD1´)mÁznÇ隦×7ú7ü$ó-ûMsÅ ûCÆ€•!ÈoBGJ¿×§ùƒÓOëúÐô<Òq¹€ÉÀÉêk×|A§jwñ[È›ÚßÊ ¬o$¬…ÏrÇíL׬¯¢‡G†mby¦}N=·(•£ù  ·ó…­¿® úÿ].vR"L…eMU¶s%¬.Ç%‘I?…KlÇ$ï;¨Á•‚ÇÔ…~B ±9Óíý2_ä(z+™ñ$Ú­[«=P DŽÛOêDÇ# “ótÉÈ#U}KRÕä›[¹²¼[xt…€Ä¬'`Ûq<ƒŒQqÛ¡×QPÚÎ.¬à¸Q,jàzdf¦¦Õ´%;«…QHaEPEPEPEPEPEPEPEPEPEPEPEPEPEP_¥2žý)”†QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW¿ÿ}Ïýroå\·†úŸ÷ó®¦ÿþA÷?õÉ¿•rÞêÞ?΀;¨>࢈>࢘†]«5ç¾"ÿ˜¿ë¢ÿ:ô+¯õf¼÷Ä_ñóýt_ç@Õ—üƒíëŠè"§¨,¿äkÿ\SÿA=5ãö?úæÿÍjÁªëÿ±ÿ×7þkV Dý*«u«OÒª·Z@Goÿ!)ÿë„_ú•v©[ÿÈJúáþ…%]¦{ƒ‹‹?úìô[Ö_ˆ´£­Åe +åEv“J ²’ €G9çÚµ.â‘ÄRDxŸxRq»‚¤gèMBf˜ÿË…ÏçÿHe8ô-.->[µýÄÎ$”³° ‚XÇ ïSêuž«iyÿ-·#+²2PÊA©<Ù¿çÂëóÿ‹£Í›þ|.¿8ÿøº®t]0écM6iö@wòxlçvsÙç9Í2ßBÓ-­n­’Ø´W_ëIJ<†N1ÉbOJ·æÍÿ>_œü]lßóáuùÇÿÅÐé6ÑÜF–¥Öâ1¢i^]Ê:œœ{P<;¥}…¬Ú ^u|=ÄŒU‡B¬[+b*÷›7üø]~qÿñty³Ï…×çÿ@‰ì¡ŠÒíá #A… åâI$þ4šyΙjéŠ!P™nˆÄVR«ž#&ÑîpÄþ•nÞom äF=ð1L KR}z]RÛS¶BшâIì̾R÷ D‹Ôòxôô¦jšî{æmíõU½ˆB¾ÒP“ò¼ tTPcb‰#A„E £Ð uPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_¥2žý)”†QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW¿ÿ}Ïýroå\·†úŸ÷ó®¦ÿþA÷?õÉ¿•rþûÇýãü蹃î (ƒî )ˆe×ú³^{â/øù‹þº/ó¯BºÿVkÏ|Eÿ1×EþtÝYÈ>×þ¸§þ‚*z‚ËþAö¿õÅ?ôSÐWþ?cÿ®oüÖ¬®¿ñûýsæµ`ÐOÒª·Z´ý*«õ¤vÿòŸþ¸Eÿ¡IWj•¿ü„§ÿ®èRUÚ`W1§kÓß^جҘŒ³ÝÇåE(â&À,IÈ sÇSéK-¥ò<½+TarX[bb½Büüt'æÇJ騪Z^§­gö˜HðíÇ*ítu8*G­eGâî|Mmeo gN”L¾{gt3·¶ÐN3܃éÉÖÀtTW=¯kséúµ•”WºušÏŽÓ_)#*TuääþU½™äGæ²<›FæA…'¹'ñ4-UÀ}Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ ~”Ê{ô¦RQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE^ÿþA÷?õÉ¿•rþûÇýãü먿ÿ}Ïýroå\¿†þñÿxÿ:î`û‚Š û‚Šbuþ¬×žø‹þ>bÿ®‹üëЮ¿ÕšóßÇÌ_õÑwV_òµÿ®)ÿ Šž ²ÿ}¯ýqOýTôÕÿÔÿ®oüÖ¬ªÍåÎ’ífP¥NÑ’3ŽqøSì>“ß—ÿ {ôªÎ9§µìtŸÿäÿâjº‡û·ø 'ÿHƒþBsÿ׿ô)(ÔN¨©Ó#³vÉÞ·.È1ÛAþT¶Šïs5Ã#"²¬h`¥ŽqÛï~•r˜Æá»»;*i'…ÚÝ®d¸+‘—”çå€úÒØøvîÚÏ@‰ä€¶3É)V8`Êàmãý¡×ÓQ@ZF—-ŒZ„s²0¹»–eòÉá[ =0k:?Ai¬iw6s\­µš¸1½ä­Œ´($Œpr8Þºj(Z“¬Ã«\ÆööPiÒ[ËGû[¸ ŸöBò*Ö•btÍ&ÒÄÊe6ð¬{ÈÆì f®Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ ~”Ê{ô¦RQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE^ÿþA÷?õÉ¿•rþûÇýãü먿ÿ}Ïýroå\¿†þñÿxÿ:î`û‚Š û‚Šbuþ¬×žø‹þ>bÿ®‹üëЮ¿ÕšóßÇÌ_õÑwV_òµÿ®)ÿ Šž ²ÿ}¯ýqOýTôQEQEKQ»–Ø[Å£Os(Š=ç  $ãØ‚(µ¹Ð¼Z––ê”·v”Ã;ú‚>âWþB/ý~ÿí)*_ ÿÈ*û_éTµ•¹¤îÍïÉÒÜoÙû¼w0}ÁE}ÁE1 ºÿVkÏ|Eÿ1×EþuèW_êÍyãæ/úè¿Î€;kOøñ¶ÿ®)ÿ Šš¡´ÿoúâŸú©© (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š¯ÿ ûŸúäßʹ}öÿxÿ:ê/ÿäsÿ\›ùW/áϾßïç@ÌpQDpQLC.¿ÕšóßÇÌ_õÑz×ú³^{â/øù‹þº/ó šâ]V; ¥ÛE>a_3Ì8ÆqüCÞª}«Å_ô µÿ¾‡ÿZKš¢E„€ÜánGä8¥û+Ï7ÿÀ§¬%IÉß™¯ëÐé…uòò'ëó3>Õâ¯úZÿßCÿ‹£í^*ÿ e¯ýô?øºÓû+Ï7ÿÀ§£ì­ÿ<ßÿž—°Îÿò+ëKþ}Çîæf}«Å_ô µÿ¾‡ÿGÚ¼Uÿ@Ë_ûèñu§öVÿžoÿOGÙ[þy¿þ=Áÿ;ü?È>´¿çÜ~çþfgÚ¼Uÿ@Ë_ûèñt}«Å_ô µÿ¾‡ÿZeoùæÿøô}•¿ç›ÿàSÑìó¿ÃüƒëKþ}Çîæf}«Å_ô µÿ¾‡ÿGÚ¼Uÿ@Ë_ûèñu§öVÿžoÿOGÙ[þy¿þ=Áÿ;ü?È>´¿çÜ~çþfgÚ¼Uÿ@Ë_ûèñt}«Å_ô µÿ¾‡ÿZeoùæÿøôå³,q±‡ÖêJ=ƒþwø}iϸýÏü̯µx«þ–¿÷ÐÿâèûWŠ¿èkÿ}þ.µãµ†H‘ó0ÜÇžÿãNû?Þ›þÿ¿øÑìó¿ÃüƒëKþ}Çîæc}«Å_ô µÿ¾‡ÿGÚ¼Uÿ@Ë_ûèñu³ö(½7ýÿñ£ìPÿzoûþÿãG°Îÿò­/ù÷¹ÿ™ö¯Ð2×þúü]jñWý-ï¡ÿÅÖÏØ¡þôß÷ýÿƱCýé¿ïûÿÁÿ;ü?È>´¿çÜ~çþf7Ú¼Uÿ@Ë_ûèñt}«Å_ô µÿ¾‡ÿ[?b‡ûÓß÷ÿ>Å÷¦ÿ¿ïþ4{üïðÿ úÒÿŸqûŸù˜ßjñWý-ï¡ÿÅÑö¯Ð2×þúü]lýŠïMÿßühû?Þ›þÿ¿øÑìó¿ÃüƒëKþ}Çîæc}«Å_ô µÿ¾‡ÿGÚ¼Uÿ@Ë_ûèñu³ö(½7ýÿñ£ìPÿzoûþÿãG°Îÿò­/ù÷¹ÿ™ö¯Ð2×þúü]jñWý-ï¡ÿÅÖÏØ¡þôß÷ýÿƱCýé¿ïûÿÁÿ;ü?È>´¿çÜ~çþf7Ú¼Uÿ@Ë_ûèñt}«Å_ô µÿ¾‡ÿ[?b‡ûÓß÷ÿ>Å÷¦ÿ¿ïþ4{üïðÿ úÒÿŸqûŸù˜ßjñWý-ï¡ÿÅÑö¯Ð2×þúü]lýŠïMÿßühû?Þ›þÿ¿øÑìó¿ÃüƒëKþ}Çîæc}«Å_ô µÿ¾‡ÿGÚ¼Uÿ@Ë_ûèñu³ö(½7ýÿñ£ìPÿzoûþÿãG°Îÿò­/ù÷¹ÿ™ö¯Ð2×þúü]jñWý-ï¡ÿÅÖÏØ¡þôß÷ýÿƱCýé¿ïûÿÁÿ;ü?È>´¿çÜ~çþf7Ú¼Uÿ@Ë_ûèñt}«Å_ô µÿ¾‡ÿ[?b‡ûÓß÷ÿ>Å÷¦ÿ¿ïþ4{üïðÿ úÒÿŸqûŸù˜ßjñWý-ï¡ÿÅÑö¯Ð2×þúü]lýŠïMÿßühû?Þ›þÿ¿øÑìó¿ÃüƒëKþ}Çîæc}«Å_ô µÿ¾‡ÿGÚ¼Uÿ@Ë_ûèñu³ö(½7ýÿñ£ìPÿzoûþÿãG°Îÿò­/ù÷¹ÿ™_J“V—ÍþÓµŠcËòÈ9ëœüÇÚ´vŸJ­ö(½7ýÿñ£ìPÿzoûþÿãZÆ<ª×¹Ï9sËšÖô,í>”m>•[ìPÿzoûþÿãGØ¡þôß÷ýÿƨ’ÎÓéFÓéU¾Å÷¦ÿ¿ïþ4}ŠïMÿßühÎÓéFÓéU¾Å÷¦ÿ¿ïþ4}ŠïMÿßühÎÓéFÓéU¾Å÷¦ÿ¿ïþ4}ŠïMÿßühÎÓéFÓéU¾Å÷¦ÿ¿ïþ4}ŠïMÿßühÎÓéFÓéU¾Å÷¦ÿ¿ïþ4}ŠïMÿßühÎÓéFÓéU¾Å÷¦ÿ¿ïþ4}ŠïMÿßühÎÓéFÓéU¾Å÷¦ÿ¿ïþ4}ŠïMÿßühÎÓéFÓéU¾Å÷¦ÿ¿ïþ4}ŠïMÿßühÎÓéFÓéU¾Å÷¦ÿ¿ïþ4}ŠïMÿßühÎÓéFÓéU¾Å÷¦ÿ¿ïþ4}ŠïMÿßühÎÓéFÓéU¾Å÷¦ÿ¿ïþ4}ŠïMÿßühÎÓéFÓéU¾Å÷¦ÿ¿ïþ4}ŠïMÿßühÎÓéFÓéU¾Å÷¦ÿ¿ïþ4}ŠïMÿßühÎÓéFÓéU¾Å÷¦ÿ¿ïþ4}ŠïMÿßühÎÓéFÓéU¾Å÷¦ÿ¿ïþ4}ŠïMÿßühÎÓéFÓéU¾Å÷¦ÿ¿ïþ4}ŠïMÿßühÎÓéFÓéU¾Å÷¦ÿ¿ïþ4}ŠïMÿßühÎÓéFÓéU¾Å÷¦ÿ¿ïþ4}ŠïMÿßühÎÓéFÓéU¾Å÷¦ÿ¿ïþ4}ŠïMÿßühÎÓéFÓéU¾Å÷¦ÿ¿ïþ4}ŠïMÿßühuFŸqÿ\Ø~•Ëxsï·ûÇù×R¶p†÷ƒœ4¬Ãò&¹o}öÿxÿ:î`û‚Š û‚Šbuþ¬×žø‹þ>bÿ®‹üëЮ¿ÕšóßÇÌ_õÑvÖÄ-¤d@I5Muý-ì~Ø—Aàó A‘‹0ì?…A©Û^ÞiVðZ$R#2ùé$¦=éýÜ€zœgŽ™¬k aômPšæ"fÔ$Ž%ó¾]äô$…ëéÚ’þ¿¿ëñ:›+û]FßÏ´”IJ“‚#¨ ò±¨?¶ôÿ·‹#9YËl£`¥½´ŸlÕóL´³une»¹"Ibù•¦aœ gŒúU-búÞçX±[kÿµM Ò§…È8A'“Ž)õH]6†½¦›ñeöŸß—1Œ£-ýÐØÛŸlÕ‹Ûû]:ßÏ»™b!A=IôrO°®~}ZÃT×VÖ{Ûx`²¸ciy¦8ì ŸÄûu³®°´Öt­FáXÙ@dY)"&`6±·g¶itCê^]Mk)îü÷X`ǘ^R¹éò‘“ùSìµ› Bv‚Þfó•w䉣lzá€$W9­ëIªéÜvÒÅ%¤ÂRhùÉ-ósÓŒ “M'ñU¼–Ú“jËöwI%*¸·‚€/ÌxÆ3Å5¸=æÕ“ûLØEmq3¦ß6HÕvE»¦âHúð hW;eckqâ­bâkx¤š‡Ë‘”O“±íYÙy^k»BÞNŸ*).éæ|ÙÇ'Œ÷¥Ðæ•~øú× )£jré7ö²ÆË’]Uï™±¼œ•ÎpAâ¶|'º]\Ëge4 ¨ 8™Ÿ›$uúS°®t6ÿñíûƒùU}?U±ÕæÊáfJa“®:ŽŸJ£­ßKaá²Ößñ÷2¤ãÖG¯åœþ‹¥Åw kÖ1ÜYAikw´ýÕÁ—t¨ V9EÁ#pïž)/ëúþ·Ñ_×ü1Ñ[kÚ}åëZ[¼ï"»FOÙ¥rÞWocÞ´«ŒÓ¯àµ×-­4mUïíg–Wº·dVû8;˜¶à ¯ÍÆ=iž'»Òµ { Oí–SB©#Eizc¸è;‡ÀàõéGDlvÔWÚ­Ž¹ýðûµÞ’‰ÀW IB}@"°¬NŠIMÉ  blðÛÏOCÆ¿¯¿ü…ëîÿ3Óè¯7»ûchþþÔ‘#±+/˜×ñ<‘ç?ºó@eço©ëךµm¦ZÜMáë+‹ˆ5;'7N˜Cåã‚ O È&‹ÎúŠå0˜ÿh§Í§5‹­5)–êåm­§±‚ÊMŠ÷ 9Röì!ˆ^#©õ¤ôWÕØê¢•'…%ŒîGPÊqŒƒÈ§Õ ¥mÄÍÇ'™U}çàvö«õRVmt˜QE†QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEÇøsï·ûÇù×a\‡>û¼w0}ÁE}ÁE1 ¹ÿVkÏüD§íŸúh?zã(k×lËüÀdƒšèíU¾ËÊ~èíRíoîŸÊ¼þïÅ·öÌ@Ò,ßð"¨ê ÿÈÏþú?áHg§íoîŸÊ­ýÓùW˜Â}©ÐÏþú?áGü'Ú—ýlÿï£þéû[û§ò£ktþUæðŸj_ô³ÿ¾øQÿ ö¥ÿ@?ûèÿ…z~Öþéü¨ÚßÝ?•y‡ü'Ú—ýlÿï£þÂ}©ÐÏþú?á@Ÿµ¿º*6·÷Oå^aÿ ö¥ÿ@?ûèÿ…ðŸj_ô³ÿ¾øP§íoîŸÊ•U·_JòÿøOµ/úÙÿßGü(ÿ„ûRÿ  Ÿýô€=*ßþ=¢ÿp*’¼Ð|EÕÀhÖà€HßáKÿ Xÿ =¿ýüoð J¢¼×þ6±ÿ@{ûøßáGü,mcþ€öÿ÷ñ¿Â€=*ª :«KsùÆÜ»wnÏLç>õÀÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð£þ6±ÿ@{ûøßá@•Ey¯ü,mcþ€öÿ÷ñ¿ÂøXÚÇýíÿïã…zUæ¿ð±µúÛÿ߯ÿ ?áckô·ÿ¿þéTWšÿÂÆÖ?èoÿü(ÿ…¬Ðßþþ7øP¥Q^kÿ Xÿ =¿ýüoð¥_ˆºÃcÛûhßá@“\‡WßïçUlücªÝ …ºgÝmhv†5ŽhÓÁ÷è†QLa‘T.¬Ä äV!Ð-q Ç!'`ª§ÃQ“÷å]ŽÀ{Q寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùQÿÔÜ•v^ZúQ寥q¿ðGýÁùR FÜ•v>ZúQ寥svÚDFV͵¨ˆ ¶Ôà  )h ÿÙnip2-8.7.0/doc/html/figs/ir2.jpg0000644000175000017500000002240413341773367013176 00000000000000ÿØÿàJFIFÿá°ExifII*JR(i‡Züÿÿ)( üÿÿ)( 0210‘ 0100 ÿÿ   4ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀ4 "ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?÷©þá® Å_êž»Ùþá® Å_Ꞁ4-â´¾ð®Ÿq#ÆMºaÔrŒ9VààÖÂ_À±¨iK0ÛŒŸZfþNƒgÉÀˆ ç5 ìŒíAìd9þT†eÇý“ ÛÝÅm\¿ß™aÛêØÉ¤Š= ¶»†ÎÞ;—Îé’³êÀfµ¶]úEÿOÿLv¸…wÊ£`êQÉÇ¿A@¨4¨®%¹ŠÞ®ey’¾§4iÆÃKÓ ²·wò¡@ªXdŸsïW¦¸•eHaS$® ¶©'ñcUÿžÿ÷üÿñ4ö…·÷Ïýòj1sb. áWÎ+°É³æ+œã=qžÕg¯üð·ÿ¿çÿ‰£¯üð·ÿ¿çÿ‰  ’\Y³É*mK†Ëó„y`; ÷œâ¢Ó>Å¥éÐÙÃ#²Æ9f»’ÇÜ’OãZÕç…¿ýÿ?üMÕç…¿ýÿ?üMEý¡mýóÿ|š?´-¿¾ï“SC4ÌÏÊc•1• ‘ƒÐƒøÊ¥ÜßÞ?Tþжþùÿ¾MÚßß?÷É«{›ûÇó£sxþtSûBÛûçþù4h[|ÿß&­îoïÎÍýãùÐ .lf1™U\ÆÛвgkzCÉæ–k«ˆŒSªË •tÜGÞ¯noïÎÍýãùÐ .lf1™U\ÆÛвgkzCÉæ¤þжþùÿ¾M[ÜßÞ?›ûÇó  s`’K""+ÊA‘„x/“ߎ*DÑìÞÎÒÞÝŸï´0-õÀæµw7÷çFæþñüèÚl|ó>ÕóŠì2lù¶ç8Ï\gµAxš>£³íÖ–÷[3³Ï€>ÜõÆG«¹¿¼:77÷ç@‘* 3g ¼1Ú° €„£hæ’o웑žÚ D?êƒÂgû¹~©¹¿¼:77÷ç@?´-¿¾ï“Gö…·÷ÏýòjÞæþñüèÜßÞ?Tþжþùÿ¾MÚßß?÷É«{›ûÇó¨^ö¤És¹è¬àÊ€"þжþùÿ¾MÚßß?÷É«{›ûÇó£sxþtSûBÛûçþù4h[|ÿß&­îoïÎÍýãùÐOí oïŸûäÑý¡mýóÿ|š·¹¿¼:77÷ç@?´-¿¾ï“Gö…·÷ÏýòjÞæþñüèÜßÞ?Tþжþùÿ¾MÚßß?÷É«{›ûÇó£sxþtSûBÛûçþù4h[|ÿß&­îoïÎÍýãùÐOí oïŸûäÑý¡mýóÿ|š·¹¿¼:77÷ç@?´-¿¾ï“Gö…·÷ÏýòjÞæþñüèÜßÞ?Tþжþùÿ¾MÚßß?÷É«{›ûÇó£sxþtSûBÛûçþù4h[|ÿß&­3°ÇÌy`:úš…î'iÌÉæHsn} ÓùÊ€#þжþùÿ¾MÚßß?÷É©qªÿÏ ûþøš1ªÿÏ ûþøš‹ûBÛûçþù4h[|ÿß&¥Æ«ÿ<-ÿïùÿâhÆ«ÿ<-ÿïùÿâh/í oïŸûäÑý¡mýóÿ|š“¯üð·ÿ¿çÿ‰§Ã3È­¼‘k®sƒÿê þ4ö…·÷Ïýòhþжþùÿ¾M[ÜßÞ?›ûÇó  ŸÚßß?÷É£ûBÛûçþù5osxþtnoï΀*h[|ÿß&í oïŸûäÕ½Íýãùѹ¿¼:©ý¡mýóÿ|š?´-¿¾ï“V÷7÷çFæþñüè§ö…·÷Ïýòhþжþùÿ¾M[ÜßÞ?›ûÇó  ŸÚßß?÷É£ûBÛûçþù5osxþtnoï΀*h[|ÿß&í oïŸûäÕ½Íýãùѹ¿¼:©ý¡mýóÿ|š?´-¿¾ï“V÷7÷çFæþñüè§ö…·÷Ïýòhþжþùÿ¾M[ÜßÞ?›ûÇó  ŸÚßß?÷É£ûBÛûçþù5/Û`ó¼Ÿ´ÇæôÙ¼gò©·7÷ç@?´-¿¾ï“Gö…·÷ÏýòjÞæþñüèÜßÞ?Tþжþùÿ¾MF—61É$‘ª¤’deÈ=øâ¯îoïÎÍýãùÐ{O§¼ÞsÆ.Ãó[iê¹ôöªðC¤X¬§Oµµ´–E#ÌŠØ/ç€3ô­Íýãùѹ¿¼:ätíÊ×Q{Û¹-&sEåÛØƒcqa“¸œcŸ~+qÛK x!`ˆcPѵÁQÇ€8ö­-Íýãùѹ¿¼:ÏI´è¤Gi" Œ2Ç‚t\ã§µE"é[µ¼¶–ï9v K’HÆ3žõ«¹¿¼:77÷ç@ÒÚh3ÇsiÖr$#ljöÊB@â¤4{¡¸´·›ÉÿUæ@Ëÿw#µw7÷çFæþñüè4¶–ÐË ‚ÌZD1 ®ORF9&šƒHŽÏì‰kÛg>JÂuÏÝÆ:Ö¦æþñüèÜßÞ?P6"s8Udòþb£3מ(k›™&eV–0B9L²ƒ×¶p*þæþñüèÜßÞ?PŠâÂÜ8…0ì]ÂGÌz“ޤúÕ Z[EðõÕµª$h°°XÑ6¨=àVöæþñüë3Äèw„õò›ŸÂ€2¼5þ¥>•ÙG÷q¾ÿRŸJì£û‚˜†Ï÷ p^*ÿTõÞÏ÷ p^*ÿTôÑØh¶Xÿô`§ëW—0ºEUd08,}3Û}ÿQYœhvý¨¿ô`§jÚˆ†Ao%¤w²n!Ï~{`úR&Óõt{aç¸,­ÃºñóA“Œûf®]J’i—#Sà¡®bc²m’’XFã‘Ê€9'ÐzŠÕ·g ã98d•”‚ó9?1“þCVÿõÂOæµxˆÁ¢>à,©#}ªA± @ -÷‡<¯iÓþCVÿõÂOæµý…ÌÞ,Ñïc‹u½¼7 +îi`›xÎNpzP·M®kH·€Çl×7W3,ðÛ½ÎO-Ø 'Ú²Œ-¤ŠM1†®—kgö!0!¤eÜ“wo9ÇcÅ;W·ÕµíocÓB\麖+s:Ÿ´D\†è¤†$ÓÖ[èZÌ·RxƒìJ·ßÚ1Ý%™rbXÌ[K}ÝÄzã Í ÏúÛþ?/ëø‘ñƒ¥´‘I¦0ÕÒílþÄ&4Œ»cîíç8ìx­MYmP]Ãqjm/låò§ƒÌ 0!°2 ô̾…¬Ëu'ˆ>Ä«}ý£ÒX—&%ŒÅ´·ÝÜA'®: Öï‡loc¼ÕuKûqm6¡2²ÛïcD@«¸Ž2pOõ¡yÿ[Áþ¿øÙ?ä+?ýp‹ÿB’¨Þkºu„æ æo4 •HÙÈúízOù Ïÿ\"ÿФ¬}CÂÖZãÝ<×1HøÜ"eÁ c<©ç~U•W4¿w¿™½IË÷­¥ä;þ­'þzÏÿ€²ñ4ÂU¤ÿÏYÿðOþ&©ÿ§ÿÏå÷ýõÿGü!üþ_ßQÿñÏÍŠìŽÎLóKðÿ"çü%ZOüõŸÿdÿâhÿ„«Iÿž³ÿà,ŸüMSÿ„#OÿŸËïûê?þ"øB4ÿùü¾ÿ¾£ÿâ(æÅvAÉ€þi~ä\ÿ„«Iÿž³ÿà,ŸüMð•i?óÖü“ÿ‰ªð„iÿóù}ÿ}GÿÄQÿFŸÿ?—ß÷ÔüEØ®È90Í/Ãü‹Ÿð•i?óÖü“ÿ‰£þ­'þzÏÿ€²ñ5Oþ?þ/¿ï¨ÿøŠ?áÓÿçòûþúÿˆ£›Ù&ù¥ø‘sþ­'þzÏÿ€²ñ4ÂU¤ÿÏYÿðOþ&©ÿ§ÿÏå÷ýõÿGü!üþ_ßQÿñsb» äÀ4¿ò.ÂU¤ÿÏYÿðOþ&øJ´Ÿùë?þÉÿÄÕ?øB4ÿùü¾ÿ¾£ÿâ(ÿ„#OÿŸËïûê?þ"ŽlWd˜æ—áþEÏøJ´Ÿùë?þÉÿÄÑÿ V“ÿ=gÿÀY?øš§ÿFŸÿ?—ß÷ÔüEð„iÿóù}ÿ}GÿÄQ͊샓üÒü?ȹÿ V“ÿ=gÿÀY?øš?á*Òç¬ÿø 'ÿTÿáÓÿçòûþúÿˆ£þ?þ/¿ï¨ÿøŠ9±]r`?š_‡ùÜx§N6ÒùÍçl;3m ±Ç%q[±ˆ-£Ë<Ý–Üœc?ZåçðUªA#Auxó%Ù0O`~N•¨o!•¼ÖûËê«•Ç®FGç[Òuýâ_#–º¢šö-µæK ÔV³\ÛbM‘I„Ú…° †ÇSøTßÚÿvoûòßáQéÊ%77G•š@ÈI#*W?˜5wˇþyûèÖ¦oí»7ýùoð£ûBîÍÿ~[ü*Ï—üò÷ѣˇþyûèÐoí»7ýùoð£ûBîÍÿ~[ü*Ï—üò÷ѣˇþyûèÐoí»7ýùoð£ûBîÍÿ~[ü*Ï—üò÷ѣˇþyûèÐoí»7ýùoð£ûBîÍÿ~[ü*Ï—üò÷ѣˇþyûèÐoí»7ýùoð£ûBîÍÿ~[ü*Ï—üò÷ѣˇþyûèÐoí»7ýùoð£ûBîÍÿ~[ü*Ï—üò÷ѣˇþyûèÐoí»7ýùoð£ûBîÍÿ~[ü*Ï—üò÷ѣˇþyûèÐoí»7ýùoð£ûBîÍÿ~[ü*Ï—üò÷ѣˇþyûèÐw‡Du9”ÌS-]Zè“€ ŒŸÍêF 0/ˆ¨­ÐI©Þ!èÖèæôí š‹ä¼¹±yt¶ƒMÔdh¬îŒÁ‹°É”0SŽO¾+CYÖ¦Óî¬ìl¬¾Ùw¼ÇKå¨U³3`àrCÉ®wOÑu¯+CÒn¬V+]4݉”‰Â…Qów ä c½h^E¬É{¤kɤfêå†âÁn°WÆ ¹Â’ ŽãƒTíý~ˆµ6tMY5­4]Z GŠh\‚c‘IV\޼޵£X¾Óntí2Szª—WW2ÝK6ávÎÜ÷ÀÀÍmSbAY‰ÿw¿õØè´­:ÌOøû½ÿ®ÃÿE¥!™÷"Ó-§xdË¡Ãyp»€}2 Šþ­'þzÏÿ€²ñ5׃ì.ndŸíq™¹TuÚ 98Ê“×'­EÿFŸÿ?—ß÷ÔüErJX›è‘èF.UÍ)\¹ÿ V“ÿ=gÿÀY?øš?á*Òç¬ÿø 'ÿTÿáÓÿçòûþúÿˆ£þ?þ/¿ï¨ÿøŠžlWdW&ù¥ø‘sþ­'þzÏÿ€²ñ4ÂU¤ÿÏYÿðOþ&©ÿ§ÿÏå÷ýõÿGü!üþ_ßQÿñsb» äÀ4¿ò.ÂU¤ÿÏYÿðOþ&øJ´Ÿùë?þÉÿÄÕ?øB4ÿùü¾ÿ¾£ÿâ(ÿ„#OÿŸËïûê?þ"ŽlWd˜æ—áþEÏøJ´Ÿùë?þÉÿÄÑÿ V“ÿ=gÿÀY?øš§ÿFŸÿ?—ß÷ÔüEð„iÿóù}ÿ}GÿÄQ͊샓üÒü?ȹÿ V“ÿ=gÿÀY?øš?á*Òç¬ÿø 'ÿTÿáÓÿçòûþúÿˆ£þ?þ/¿ï¨ÿøŠ9±]r`?š_‡ù?á*Òç¬ÿø 'ÿGü%ZOüõŸÿdÿâjŸü!üþ_ßQÿñ§ÿÏå÷ýõÿG6+²LóKðÿ"çü%ZOüõŸÿdÿâhÿ„«Iÿž³ÿà,ŸüMSÿ„#OÿŸËïûê?þ"øB4ÿùü¾ÿ¾£ÿâ(æÅvAÉ€þi~ä\ÿ„«Iÿž³ÿà,ŸüM1üCayåÛ[Ë7™4‰0:pXÉf«Â§ÿÏå÷ýõÿH|)o`ñÝÛOw,°È±Ù 0'¢ƒÓ5Q–&ë™+8à¹_,¥~ŸÕŽ”‹sÙ<Ýc|£³óÆ+>Öú4„Äþk¤xò#c¬@ç‚£ûdññ‘œgvùã?­YÓ¡Ô™¡Ã¼’IÉ áœ‘ŸÀ×QÀ;ûBîÍÿ~[ü(þЇû³ß–ÿ ³åÃÿ<‡ýôhòáÿžCþú4[ûBîÍÿ~[ü(þЇû³ß–ÿ ³åÃÿ<‡ýôhòáÿžCþú4[ûBîÍÿ~[ü(þЇû³ß–ÿ ³åÃÿ<‡ýôhòáÿžCþú4[ûBîÍÿ~[ü(þЇû³ß–ÿ ³åÃÿ<‡ýôhòáÿžCþú4[ûBîÍÿ~[ü(þЇû³ß–ÿ ³åÃÿ<‡ýôhòáÿžCþú4[ûBîÍÿ~[ü(þЇû³ß–ÿ ³åÃÿ<‡ýôhòáÿžCþú4[ûBîÍÿ~[ü(þЇû³ß–ÿ ³åÃÿ<‡ýôhòáÿžCþú4[ûBîÍÿ~[ü(þЇû³ß–ÿ ³åÃÿ<‡ýôhòáÿžCþú4[ûBIGÖ&ÿ ¯®œèwdt1åZ>\?óÈßF³õÞ4;°–•døkýJ}+²î ã|5þ¥>•ÙG÷1 Ÿîà¼Uþ©ë½Ÿîà¼Uþ©è¢²¥ÐmDdo ®»ºe[#?•K#y™4Ù]±‚v›tª–Oåi¶™»t/e".p½N?ýrR*Ã;.ìÝ\ñœâÑMߟÝ?§÷†PÉ Îq>äã§1ñÿÒLÓÜÂÖëk,B@UžB˜ zôbsŠc;.ìÝ\ñœâÑMߟÝ?§÷†Fv]Ùº¹ã9Å£›¿?ºOï €Zt‘n£¹ˆ#:+.×$;€qÐv©~×{ÿ>ÖßøßüEPgeÝ›«ž3œZ1é»óû§ôþðÈÎË»7W•ÙG÷q¾ÿRŸJì£û‚˜†Ï÷ p^*ÿTôQ@ºl¬—𵤬y=C éœíŸNù×¢ŠC ÏK™&×îlmbœÈbÌò)úaëEwÉOGÿ¿þ4y)èÿ÷ñ¿ÆŠ(òSÑÿïãJz?ýüoñ¢Š<”ôûøßãG’žÿüh¢€%=þþ7øÑä§£ÿ߯ÿ( ÉOGÿ¿þ4y)èÿ÷ñ¿ÆŠ(òSÑÿïãRÖ&þÏÑ/ïb]Ò[ÛI*‘È%T‘žzqE»ä§£ÿ߯ÿ<”ôûøßãE <”ôûøßãG’žÿüh¢€%=þþ7øÑä§£ÿ߯ÿ( ÉOGÿ¿þ4y)èÿ÷ñ¿ÆŠ(òSÑÿïãJz?ýüoñ¢Š<”ôûøßãG’žÿüh¢€)E6ýnêȯîⶆU"GÉ.Òƒžz|ƒõ«¾Jz?ýüoñ¢ŠJz?ýüoñ£ÉOGÿ¿þ4Q@ÃÉOGÿ¿þ4y)èÿ÷ñ¿ÆŠ(òSÑÿïãJz?ýüoñ¢Š<”ôûøßãG’žÿüh¢€%=þþ7øÑä§£ÿ߯ÿ(  ZÄßÙú%ýìKºK{i%@ò9ª’3ÏN*ï’žÿüh¢’žÿühòSÑÿïãP0òSÑÿïãJz?ýüoñ¢Š<”ôûøßãG’žÿüh¢€%=þþ7øÑä§£ÿ߯ÿ( ÉOGÿ¿þ4y)èÿ÷ñ¿ÆŠ(òSÑÿïãRŠmúÝÕ‘_ÝÅm ªD’]¥<ôùëE»ä§£ÿ߯ÿ<”ôûøßãE <”ôûøßãG’žÿüh¢€%=þþ7øÑä§£ÿ߯ÿ( ÉOGÿ¿þ4y)èÿ÷ñ¿ÆŠ(òSÑÿïãJz?ýüoñ¢Š<”ôûøßãTµ‰¿³ôKûØ—t–öÒJär U$gžœQE.ù)èÿ÷ñ¿Æ%=þþ7øÑE%=þþ7øÑä§£ÿ߯ÿ( ÉOGÿ¿þ4y)èÿ÷ñ¿ÆŠ(òSÑÿïãJz?ýüoñ¢Š<”ôûøßãG’žÿüh¢€%=þþ7øÑä§£ÿ߯ÿ(  QM¿[º²+û¸­¡•H‘òK´ çžŸ ýjï’žÿüh¢’žÿühòSÑÿïãP0òSÑÿïãJz?ýüoñ¢Š<”ôûøßãG’žÿüh¢€%=þþ7øÑä§£ÿ߯ÿ( ÉOGÿ¿þ4y)èÿ÷ñ¿ÆŠ(–±7ö~‰{î’ÞÚIP<ŽA*¤ŒóÓŠ»ä§£ÿ߯ÿ( DS Ž"è\2Œýò™ª:Ôcû&öâxžmÇ®3üG©úwÉE3¼5þ¥>•ÙG÷SÿÙnip2-8.7.0/doc/html/figs/scr21a.png0000644000175000017500000007440013341773367013604 00000000000000‰PNG  IHDRZ0É…]Ÿ IDATxœìÝw\çð'²‡do·€{cÝ[qýŠ–jÄ-â®8PA÷ÂU«¶jëhµX­Ö…[hÝÖ… (2dƒ’Üýþ! ¥Â%ðy¿îåëòÜsO¾‡x&ß{‹¦i  'ó5Ó!@ua3Ô4¤ê¤ê¤ê¤ê¤ê¤ê¤ê¤à3³àÛ[ðí«v´j’N¬éèÝÔÊÚá¿·,^u„  !€OA•twµàÛo|U([\ðj›ß¾ûðRŠ &ÌÚþ$-ÿÇ¿ÿÉÎHeàí´Òð)ØzÑó½ !{æ]’->?o!¤åüH=6ÉÎH­á¯å÷ŠE„ž >o³5!5éø4n_m°Õå¾½2ÿy©HR"*}z%«Û`ÛW.D¡ýÛwöinÝÀ¹IÇAQ‡*6FÅn ëÚÚÛº³»÷³7þþ¡o-:¶n^ïæVÖNnÞÝfFÿ"¢•ÇcÁ·§iºÂûª>WR'n×’v͛ԷqV¥Šn\Ó£·uç&‡î¹ùN±šìËÃÓ»Yðí¿ùþ±¤üþî@ ¾}ûéGÔ¿)@Í@:> G×nû—N”¨`æÁdIIâsóE”Ë—ìu9r•Ÿìë¿toQ‹À[ÿ}j›îÙi²Glýõòï…Ýæ?K~º'ÈzoÄÄa[Ë¿<ß[?*(ê þðU¯RÿÙ8ÂàÀšéƒ×ÝWô¾ôa~¥ç†%zÆÞºŸõ6éS¯=ô®ÝO—⯞’þ"!ìëi9‹¥ä3Õ¨u'Fºý¶ÐoÏ£¼œ‡ß÷[|ÖÄuÄ™uÃ?õMªK’M““ùZÕ!AÁugÏÿ±Lz¤>ùŽM(ÿ†žgóé_Ÿ>îd¬K‘<—|3æév)OpìY¢¯‰.!D¥‡¿ôè ×kùe'ž'v2Ö Ó­ìZóL:¦=;Làîz£ ìüË$/®°ø¾µKžq›´çÇ”Æ#ûŽêϕԼ–œÔPŸ[iSŠûqIIMêqiªÄÒÆƒÅâ¼KO–b±uÞ½}©Ø‚ ÷z'¯Ñ¯¹‘'ÅÇîþÑÑ”÷ Õ½à“ñŒ;¬mÏ/Í=ñ,/÷éš?rK­ÛGJrr®”B:ü{ˆgÜVöèíB!!d°»«ßÞÊ®5!¤¬à¦äPB‘Ò´—¢S¯1!¤¬èÎG†W鹪r•jRKa±õ !4-–9¢ü3Ϭöײ¢÷Š„n_E#š騊›&BÎ>sjöÏ„›ú*­ÖÞX—ü› „ nÉmg¤K¹˜”$é矑*yÞNñ2Ð!„<|/"„ß?&„èzdlÿåÜ*`³X„–Ñ„"|ÿì¡â7¿}¹÷¹AƒÞý<ýnìñÔ¢ê à“ Uah7nº‹qfBؼ¿²L\&Ú*­1»#!$dæŽÔ| àÍö¹ކv „ûCz‘°ì}ÞÝ+¿Íòï.9´lŒ!döÆs¥ÂÒs›¾%„´\ü‘±ý—s«À×D—¦©è+É¢²¼#+fJË)ỉýçóí§6í8µÞ‚U4cÀôL!+1(@:ªhÒÆÁ´¸´TLûm TU§aྗŒ5¸»³UÆ-z¾ï±Yöhã‰ûDN6NØîãáæÔÌwÞ¶s-c$‡Ú,><(ï`¨½½ç´Ã…þ³ÖœÓâ#û/çVÁ¶}amÜøÿ×­IÇÿ%6^!-?4ÝïôÛâÑ[íß ^½}Ooõ>ý\¿iXY4¦åÔL%Ú½ê¤ê¤ê¤ê¤ê.& ¨ÅÌ­ì˜4zÔ9HÔ9HÔ9HÔ9HÔ9HÔ9HÔ9HÔ9Úš°àÛ[ðí?ã)Uh@KqÕ ^ï\½îçÓWž§f‰hÓú6›žüq[²$ÙŠìŒT¦­§2 *yþ¿ãÞ-Ü´éëÞ­ê‘âGñ—ر©&ƒû¼ðE L‡ x<žìK•逸9ã/¦÷ØrfæP'B!¦>]ût,S…ŠÝ²d;اoòŒøÎƒÇÎ^=£Ÿdìä9öéõÓn:ø0%ÏÂÙkÖÚ]ãÛY~ÌY¿¬øfîæ£‰Yï³Þ&B^Ù6ä‹Å14³nÛÓ/jM¨£*fQéËÆn_äˆ9ç^<õ6àB„ï9¹örÌo¼HhãèLd’l_¼bׯÏÓ -œ›L]\±%•AZtlý·kœ~ñ¶ÀØÆyÀèéÑ¡C¹,?Ãk¢öürïEš®…Û¸¹‘a£[KÊU]TùÏmCHØ–C÷’ÞY» Z°*¸»ô©ØG@®¿€â¡Š?LÕP{¥½N‰¿y%3ã-Ó0ƒÃæXÔ·jÝ®³³«»l¹ÊtÀê3o!ßö³SUáÁæÑ_¯¸êùuô³Cïî;téÄDî¿Li,­z×î×Kñù·7´±1ìëñO|ÌYa‰ž±·î[ê—ç{Ü!öê–VΦÿüÕí›Íƒ³=îý8DUH\=—M½mGǦ,<œtz¼;!$ùèâRŠvíªWáJŸìë¿ô¼C¿¹·.L°&ÙÛBF|ä¥Ý[?*(ê¶×ô¯æv»°fDÀšéÏY®§B›+óÏ®o†.:×à‹é—M¶ãdïžKÈṨ‰gu~=gÍÊÞ2rù’±):ŽwÏÎHU:X€ÅR÷^ö‡YéO öyó:åÚ¥sýý¾tpñàp¸,¢â1@í%¦DÏß;sò¨.gkç -g©êBßÀÆA@ÑioSyÿ~ß”> –œ2ÈÃõZ~ى牌uÅÂt+»Ö<“ŽiÏKkÆ%%5©Ç¥©K‹ó.=ùcκ–œÔP_i’BlÁwâê9e¼ºBT¤ŸyÔ¡ù,}K¿Ô‡!S›yÎ*Ùþàéˆúú²§ ót»”'8ö,Ñ×D—"È¿ÒÀÃÿc.m€»ë‚²ó/“¼ ¸ÂâûÖ.ýyÆmÒžS wˆ‡Û•|Áá§/zšòª¹(¹¨x¦]Òžþ¨ô’-øö,¶Î»·/eÿ‚d{Èþ0Õ\ÔbæV*3û•ÊÉ|ý#`ÄñŸ÷wï=ØÑÅ“¦)𦙀1ïÆ'ÜŠó -QÙ; I=îßEÂ;ÅÂvF:’éj‰Û…BBÈ`wWiIYÁM¹!,¶>!„¦Åy–l. óæÁ•{o=JÊ{_&¹}‹¯Ô_a=«á¡nK£ŸÛŸ1œuòPæ{3Ðõõåª]/(#„t0Ö•¼ä·•=ª&È„"!!¤i=.!D§^cBHYÑ¥‘Ü*,#„t1‘ÏTzQrQÉý|¨ë ûìô'PûdgfØ:ºP”¹¨ãlì³Ë-Q™ø¶¿ý°Ÿ^.ÝûèÌt/¥Úé^É\LJj^OÝòÿå¬Qþ‹î £~¹ÐΕKå×·mö1÷ññëDüq[Ô7ÖBˆß†1ŠuÚë^Î\/(+_pë#ƒô2Љ/,{ø^äeÀ¾LÑ5ôVu¥qù‚¸|\ï€J/J.*]ãvª®”ÍbÑ´°Œ&º,"|ÿÊŸHeP[Ñ4ÍasÅb!Ó0ŒËáÊ}÷Tùl¹óš}}]Œ"GÌØxäEz¾˜¦rÓžÈVˆí@ þö‡ô"aÙû¼»W~›åß½Ò>é,MBŒ8âÂ_V¯´q «ÖË;šè¾úuñ‚_^ñL;¯ô±TÆìŽ„™;Ró‚‚7ÛCæ~dËÆxBfoD5k!ÄwÎI¹K‰Ïþ05®¯‰.MSÑW’EeyGVÌTÿc©Ú߀Vc±X„Ð4EaÆ 6«Âü)*sxNûã®ü¸eã¡¿X7ï½®gdâÖÄ»Ióò‡á'î?¢¹zïv%D߬Y›.A1•Þ‘?é¬#û¾Y°uZ6óù._N_IȨ»ë묞ݼcXÂCB:¬ ×Q6_LÃÀ}? ÃVìÚÙªá:3‡F36“SC?&È6‹EÑsb†Úo*6æ;ûÏZ·nN ¥Q4œðÝqÝÕQ»ul²Y×ÒuÜܨ¼¨=KÇönÿðUŽ¡µë„¥{£&xHÊ·…ô·åtŸÆnäß ¶í ݼñÝöÙzŽ™±‚?5?•ªý}h5›EÓ4MSLÀ0š¦Xì _UN%5OÕüˆU†©¡ŽÛ³}mÈÂU²R¦`XaAþ¾ëÇO •–`áy¨µØ,¬,Ì«ghÊt„(Ü‘í&»ò€ÒPƒðµ4ÜÇÎ5àî|‡g±Øºõ 8¸µ÷í=iæ„Æ¦ºUh ÿ‚,‹Ð4Á*ƒP#ÞæªüeÃ/!0ŽF:4ƒäk¼°´èuâ?¿ÿ¼§W«~nÇv3×c:.¨UØl6M¾‡ãðKŒ£ a³+ŒÀ``’Žž¡s“ÖS–Åü:ÍhÚøßËKiáðÉ>ò÷Ÿ°ò­P,*}ÙÈÙ'I –ž(*}ÙȹM’@,,@Sïw-šØÂ³a·Ö3·Æ©jJÚFÔ,Ÿ¨ä… ß3±T\±¤Ib©ØÀÈLRB‹ VMlkeeåØbbÔé'Óeß/ßÄÉΤ¾cϯ–¤••7B‹òVOîlcmnã9tÚ†1²P-X˜;4Póñaïîn•ìßY="ê¡ýÁK ¯ŸÆ 7»4pÚ®žËæÞS÷'Jë?ß;ËdØzgGZrkÙ°um]JHºs¢yÆvUMÕäEãÊ?ûJÆ `Ãö96®žkL?Ãà½Ï¤%ÏvM6µÍ•Ç–þ²]›ß÷»Œ¶Wž¼Jþû¸íÙÒò¿VXyßþèÇï^Å2ÿ³Ïij’ò¸Ù}w½öúóáË×N5KÚÑ}îUÆ/[­ÜäÒXh 6ÓØ…-øöòBh‘e÷wo“!ƒÜ]§Ä?îmÊ#„ˆJí¥'/Í>åÖ~ß˧?ë²M•hè³ án'c]iS½Ý\§Ç?êoVa¸Ò¦ªïº@ÓÜ»ubÈ¡ „é@ V)ywÒÁ{÷›”“’ÛQ/džažv1æ›äB|mmæ=LîkÆ#„”æþaáø¥¤¼ÍŒå墒–Îyé× !X/xôªŸ¤~N¬MÓõ¹i¸SÁgVXPpä‡ÿqS¤%˜;4BYñ=®ž‹dÿv‘ðš§›ôäi†žEÿyößλµ¾mýôk R}Vt2®0õà½"aù©”6u›Í"¶ Ÿ›žå …޳gÝÌÜÜÞ*-nVJ«Õy’_3ÉŸw‹Êº™–—ðL|¥å7‹Ê®8ÚHÛa±X’òÅÂ/¤õM{ ‹Çã—>;úß[¢Ò îïYnéUþÈÂÛ@'üî“Ö†:ruü7l¸wýõ¹›gý1÷ä ¹£^†:ò’ÇnRªš‚:+ @5ùj»‹¯wlþkцi¿/8³úÃïMB¼ u/æ–ö‘<íÏ»$-÷1Ðx’ÜÖP&•IÓ„f:2õ/è4Å/-|~ ƒ0w0ITVœô8~Û²à! 6îî')ŒnñMPôý”1%L{r{yðI¹E“ù]òvo»µñ¨á¤16rM-í1{Bô“Œ"aqæÁ_©oŠ`*ÁºýA šX4 óÍ‹Ù|#ú'Ãi_7¿-ÿÒufÐÆäþ€DÍ¥JKK?²¦žž^µFPÇÕ\:€ÅfïܼºÒjAÓæÖ@0Ÿ…ß>;#•é(>Y ¦X,BÈ’¨ÅC999‡š2eʲyÁ’j_û –©¹ÕVØ*¾ç'''·oß~êÔ©—.]RSR”àç鿯·÷lÝËó‰ûժ䠖©éÞr úöíûüùó¨¨(__ß˧«êPš}Ñ·û¬ÁË¢ã¶t²Ô§’ÝÞ¿u>ü{5G ÚM 0€Fàñx²/k.Àf—÷D(**244”ìÏž=ûÉ“'‘‘‘sçΕ«&'6hžã²#acÜ$/ݼº†ïê*Ù·àÛ\è¶'6)³0+=…察3uçÉëĸó »VO6æ°$Õ̾p×ïé¥:íîÛ0]R.!*}Ù¬ÑðߟÄ;ó82%ÿûýÉVN’´¸píÌÀí'o•é[ ÿ-<°|ÆúCÞ³[õ½{û|!DU$jJÚë”ø›W23Þ238lŽE}«Öí:;»ºË–×t˜˜¨¨¨‹/:99]¹re÷îݽzõš?¾\5EþÎÚ¶ßIU㋞º‹Kp0Õ'„\]è÷]ZïÓ ;­éôèÀýù\l/©6/ÞæäÍ»Ö$cíÄ–´‹[ÑVÚWÏesoƒ©ûOzHJžïe2l½4;@¹±Äo_Vï?ï}oM§¯Ÿ4RZ~gõˆ¨‡m^Jp5.ýañ—§µIˆé©>¨o^§\»t®¿ß—.—E4nš*€ê&¦ÄÏß=sò¨.gkç -gÕØ3j›½iM8ßÙkòäÉ/^>|ø?ÿüóðáCIeó‚§ÏYLS”âé|k‡´ôŽâB,øöç_&y”§6º»ºÌùëŸ>¦}Ñ[RžwιՖ´'dÛ)Í>åÖ~ß˧?ë²M•hè³ án'c]é“ü^n®¡ ÿmáÏžã$åƒÜ]§Ä——‹Jí¥'W @1·²«ò¹9™¯?c$Œ8þóþî½;ºxÒ4EÓ4Óá0æáÝø„[q~#¤%58X€Å&„B&Ož,IHwd«‰‰’t€»>çQ±¨¹ò€½dÊ‹º™”ˆà™tO’ò•–w)+’kDÏ¢ÿ<ûoçÝÎZß¶~úµ©>+:ëÊV¸_$”i¡³´üv‘ðš§›ô¥´ƒƒšH dgfØ:ºP”¹¨ãlì³Ë-©ÁÁÿN ÉLš4‰¢¤šXÉé3½-ÃO$õwSr¬¢&ÜËù‚^’gòq:M¤‡.å ÊŸí\Ñ5h®x®ÿ¦‘m÷®¿>wó¬?æž\!w´¹¡ŽLËW¥åÞ:áwŸ´6ÔùøH Ð4ÍasÅb!Ó|÷n]hÝe@™àý§žÈåpå£59•à‡žþ’ŒÀ¡C‡ÜÜä¿ÞËV“5`gdDÛ‘dí„-õÄIâ÷o[µl§’•– qœ:eÛÉ­“­IúÚ ….Ã6HÍ™¼ÅsÛT’±nÒB×Q›ϵh2¿K^Ãm·xG '=³1oy¤Ë¤)Û~Û:Ùšdl˜²PZÜ" (úÇU›Øe<»³gCxXL¬úH0• @ `±X„ÐJÇ¢h¯*ÜÖhŠ’›ª¯&§¬°d@ppð!C*­&¥gÙãÒÙµaK7u›#`;xú|5u•Òš¢Ž ÒÛ§q!1ê0è›ØˆÒCQ-ß nÛ,½T§ýÀÀØem•Í^Ѿí°õÓþ¸£x¬Cø±13}›oÕ³¼‚üù¤Ü;ôçða“†ø&¦Y¹û|Qi$PXlMÓ4tÔ*U¸­Ñ4ÅbWHÔÜT‚zõŒÖ,ŸWiµ9aQ¥ï «#<€:S B·gûÚ…«„e¥Lðy<üëJë.JŠó?õÄ‚ü};ן*-©Ñ…ç.^]coZ‡©Ü=žÔbl‹XÔ2¹¹¹„3335uØL ().¨±÷ 2K>i‘z†¦ï‹ò˜Ž´InnnÿC!§~ûUMF@î–¨| ~­„¬?€†(JŽ ðótsãÛ{¶îå¿ùÄ}¦#‚Z‹ÅbšVÜ _žŸ2²£ ߨ¢AóÎC×ý[i5F¶÷…¹’z†¦U8½ž¡©dcüB°aÃV-›„LInNNÿCòróòróú’›“£âÜ:œMPš}Ñ·û ó^Sâþ~”öòî¡Õ³bç3ÔZl6›&Dn{ÿîÏ‚-ú†Ü|ò*'íÅÑõS2N„(Vc|#U:«¸0·¸0·jçbÆMó7Rñæ“›ÛÐÐæÍšÝ»›pïnBófÍúš“›«ô\6»Bé¨Q±Aó— ÓoÌãèè»yu ßõaåà«{Â;z7µjàâÝ}ô‰å³ ¦Ý =ÀÕÉ¥¾G—a!÷ Ë×·àÛ+­¯ªœÐÂá“}5ä;4î?aå[¡X1< ¾}õ];Ô<¥ƒ~;Ã12vÙØ^ÖÆ<Ž®¾{Ëî‘û/IÑ¢¼ÕS†;ÛX›Ûx¶¡@\þÙÛÀÈìrÌ¢vM=Ì̬=Z÷ßs3ó¯Wvñò47ã{¶úkR¡´Úo‘“9ØšZ9÷Ÿ¸FzºªfSþØÒ³u3 3K»F¿Ý}Mڈ쟒B¡Ë¾_4¾‰“I}Çž_-I+Sò u §7j䈭[6r¹\.—»uËÆQ#GðxzJ+£w0iÃßYK†:©::ó–éÞ37Þ¾z°þKƒé#"%…>#Öt™¾îþóço_ÜšÞ2uô×'Ô×WU~gõˆ¨‡ö/%¼~7ÜìÒÀiªå A“”ö­ØcvM|ÖòáNJ;ÓÆÍî»ëµ×Ÿ_¾~pªYÒŽîs¯J{çN½f¸÷lü»Œ;-Cúwùæ¬ÎŽS·²2^nkÜ?BZ-ô¦mìçiÿüÙúíÞžó¯«ovÐWáW~™þðÜ.Ë+?ô¦éâ‚BHqANqAy¿ß¿VXyßþèÇï^Å2ÿ³Ïij•t'f¼K36lتc“ø÷e=}½éS'³ÿÅf±¦O\O_Oé¹r通[hjž.4È·vHKOá(;dÁ·¿ù*É]K¡ÅEõíZ¼{›(W‡æ4p÷KO¾¤¦¾ªòAî®Sâ÷6åBD¥‰v‚ғά,P«Ü»ubÈ¡ D¶ÐÄÄ"'?[é/açÖ ½êgÆ#„”æÄÚ4]Ÿ›vžb`lþwF¦§~ù/•¡™ÃŒLò—…F–žE¹i’jG_½í+9=÷tƒ¦ësÞœUÓl×Ö]Vì èÝÁÝÖBƒ±¹$ Ý‘ècg3ãA²¤qQÉ K瀼ôëª.\î\¨5ݹֺˀ÷…¹ŸzbaAÁ‘büÇM‘– wÔ(w}Σb‘Ê£zå˱8†4U&Ù÷÷‘Ñ{¸8¹XðíëÛµ•&©¯¯ªüv‘ÐßÓÍ‚ooÁ·ç;úŠJž¾Ë Åf³ˆÂèY}îƒb¡ÒµŠ…_˜ò$û<ÓžÂâ‡ÒÁºúÜò}Ž!!ÄýÃK#Z\*­ÖMzºÉeÅ÷Ô7{ü÷íégv êÔ̺Q—ˆ_“¤ÈíH¶›EeÃm ŒÍ ŒÍMømD%OÕ.f|„36lتc#ÿ—”lÚ²MLQ’—bŠÚ´e[qI‰Òs%·ÄwÈj¾T0ÓÛ2üDò'Þ¢A IDATâ?r~ëÉ«ã>ÎJOÍ|OÓTÕÞÚÛ@çLâËìŒTÉö.=¥jí€Qº²Àì––‹&)íIÛÌ@çbn©d¿4AÓ½så:ë*}IÈ…§_Ô5h¡¾YóCvþôÛã—¯/ï X=ñK¹Öä‚÷1Ð=ÿæmQ~¶d+Ì{WIwbÆ»4cÆ­:6‰_ JJ~úéç©Ófˆ„B‘P8uÚŒŸ~úYPR¢ô\ÌL°3òeØÈˆƒ3 Ë(aIâݸ%AýÔŸR(¢ô ëée<Ûâ_å·ŽnñMPôý”1%L{r{yðÅ:˜J°–Q:•àÀ½k Z~àÏŒB%,yqçâ·c¿ æ43hcRž $7iõ¸Ù®#—|ê;†®OÊ”æ&GO˜íæ¿X}³Ý‚"ã_d‰(›E‘Ïs9ëq.¤K_®žê0vÕÝWÙbªìÍãKÇ÷øÔØ ö133ûíÄñû÷xù´ñòisÿþƒßN733SZé`’žeKg×fœÞÔÙ«ß¹ùÈЭf}W©?åç¡?…Ž´màҲ奈æËªüÖÞ¡?‡·)˜4Ä×ÖγÏÄÕF}"ªÜh 6KÉBƒzõ{_»¼ùí©µm:›Ú¸ ™¶Á|À:É¡ÎëNÔ¿Õ­±³]“>ÙŽûcM'iï\¹ÎºJ_B¢[§öóvµnôŠˀ?":¨ovMwÙ#:YX:ô9¶ìÀ1¹Ö¶Në3ÖÇÕÐÄBòÒgÞ‰•íòûµ³´tì>>¨_´ÒÎÀ†&†&ä߯;6cÆíónDádjfvòÄqSSSS““'Ž›š™©:—ͪÀT‚µ™N%P“ŽÜõõ¤ùe¥ïkæíŒL- óÞÕÌ{@ÝôϽ­» (ÊÏ–+ÏÍÍ%„¨ê@),(ˆ=öý0ÿ@i ·šB`œÒÁµšD€ @]t€”Ü-½ Öb³X„¦iªŠ«Q|ª‚œÌ{/¨Ëªp«¡iŠtÔ,‹¦)Š3ÀçT…ÛE‰Ñ;j ”é4§Çt‡ÅfÑ4tÔn¼s³ÞTáDš¢Xl¤ áñô^¾xvãÚ匷iLÇÀ›cÉç·ïØÕÅ̓éX4—Í¡ÄbJŒtÔu"‘ËæÈ– ÚíuÊ«KçÏöêïgïäÂáà÷ê±X”šüòì©ãºº<;G¦ÃÐ8¦æõÓR^˜˜Y0à órLÍëË–àëh·ëW.ô2ªq3o¦`Œ™¹¥‰©Ùé‡GŽÇt,Ç£©÷ƒ¿®7öjcjQŸƒEµ N*/;+ñéý¦-;È–#Ú-+#ÝÆÖžé(fç蜕‘ÎtšÈ’ߨE›OæçR4æü€ºˆÍb™˜5jÑÆÂ’/[Žth7š¦0F€ÃáÒøž ‚£k#G×FLGÀ¼’âÙ—øÚÅF¯?Bp?PMîã/HhýG ~%Åßýõ]g¯&–Ö5Ô0vÅ•3ê,Üà“h}: Rk'¬ésö]z Ó@µ`áã/!÷CøDÕ›(JŽ ðótsãÛ{¶îå¿ùÄýj};¥Žf•ÌhÓ@²_iWÐ:,¶üÇ_Ö¿‰€)Š÷C5ª1Pš}Ñ·û ó^Sâþ~”öòî¡Õ³bçWßÛ©’#×Ã'¤ÚK±s,MÓ4M3 ƒ0X>I5¦bƒæ9.;6¦;ߘÇÑÑwóê¾ëwÉ! ¾ýçµiÞ¤¾µ!„å¯ ùª¡«kWïQ¡[ Ä´´ÚïÑ!^žžÖŽM‡NÛ(-WŽŸìÓ¨!ß¡qÿ +ß Åäßî|{É&Ý—ž„þÚSgHà~ %”jÔÆôÏ@¹j\Y`ÃßYÛö;©:ºè©Ë±¸S}BÈÕ…~ߥõ>°ÓšNÑo‘ÏÕÈö’jóâmNÞ¼kM2ÖN1`I»¸mU5xgõˆ¨‡m^Jp5.ýañ—§µIˆé™‘jÁ·ÏÎH•ԑ݇ÚOÃ$p?âñô^¾xvãÚ匷iLÅÀas,ùüö»º¸y0€zÕ˜x^"nb ²ý]kÆ;ü{t鱤è¿f8›òqž»{ŶV+Id¬äPôI¹ÓœÛZE'T5¸d÷ƒµñ?54åbøÕò˜‚éYiÈh;Ì û!€Ôë”W—ΟíÕßÏÞÉ…Ãaf]m±X”šüòì©ãºº<;GFbP¯ïîúœGÅ¢æ*2^2åŠEÝLx’}žI7añ$é!_i¹q—²â 5ow»HxÍÓMúŸŠê6&† „à~ ãú• ý†ŒjÜÌ›Ù0ÌÌ-MLÍNŸ8”_Ñ5h®¦o3‰/³3R%›Ò•‘#¨}ðw û!€TVFº­FÌeç蜕‘ÎtÊUc:`ÀÎÈ—a##^Ì,,£„%‰wã–õSZsÉÇÙS¶%ç Jó^E-t¶@zhÎä-ÉyA^ʺI ]G-PzºDDp‹o‚¢ï§äˆ)aÚ“Û˃(Öqâq.½-–-ÁT‚Úce$p?¢iŠ©1r8.MSLG \5¦ô,{\:»6ãô¦Î^øÎÍG†n5ë»JiÍNQÇÇXÆ÷öiìâ3øNƒ¯b#:HEµ|3¸m3‡}oYøÇ.S9 !Ä;ôçð6“†øÚÚyö™¸Ú¨O„b“{¶oŠ@m¢8“6‹Å’<"“îÔXY@J£þ9hT0²ª7ojìÚmãnŠårø±¹fs7œ»QI }C×õ ]§æ->4Åâ9tf¤š÷ê8oçóyê"­£ø…Ÿ¦Õ.H PKÕÍ(Ö ¥4ª³ŒFÀˆÄçOo^»œ^¥•>8lN}>¿]Ç®®îžŸ=0ЈnTU†©³$jåýßö¡j4*;¦QÁÔ¼Ô”WqÎ îïäæÉåèBž<¾ïѰ‰ú³ž=yÔ°qsBˆX,JJ|zòèº<={,Òñ¹¡óh7ü ¡E÷C ¾½d³´v°u÷î0ïZF‰ÒšUÎ```Ǫ˜{rnïè^­Lôu,ì{™ÿ¨H()x*Ưs3CžŽ¡¹í#gÞÎ)ŸÁšÐ¢!~6ÆzzÆ6ÃfíKúÔreÁÔ5×ãÎàâÑ˜ÍæP4EÑMSb±HýFÓ”¤2‹Ívqo4ôc¯Ç/*,dújjî€P)tÀЮûá¿ÿÅSEÙi¿¿È¿Ï¢WwÖ2Ô"rÿü¢¯~;{ë–_|ôE™‡#Gûv Ϻ»œ2|Ýùób¶wmiÁ-9½=¨wÛÙ¹Ï7B^¶ð|ƒ+‰9öTRh.Ã~èöë·*”+ †"”V÷O@sdefØÚ;ÒÔ‡95iŠ‹D„›—OµóíGh–âMѲ§ØÚ9defÊ:®¡áñôd_²ð•´ÚñC»‡5ÍÔÜ‚é@˜D‰ÅßmYî÷åÅCæVvUn6'óõJ%¹!´(¿¾C«wiÏ%‡.ôÛ›”Y˜•ž"­I‰ò¢¦í:/Ô·´ìPÔxI¹ßþDDà¼-??ÏxoÛ¨ýÒ1ƒÝŒd»¨©F!´ðÀòë]xSÌnÕkôîíómt8„Ôs;ƒÃ¿»ó2½ž•û˜Ë—Žm§ªPñr@ìÞ¶68d‰±‰©â!J”££ç É•Óâ|.ÏVR>×ÞX÷|Ê SBHÞ³EŽ=„ù)QU(—X½4dÂäP¹·¸ðàg¼^MÖÛ2iþ² “Á=ûç¡“‹+!„ÃáBÄb±âNòËDFMeÏZµdVii™u…Ó@¡ –Ê•htï€J™[Xe¿KG:ê¸Ìô׿VLGQtqNÚûÃLœ¤E‹žº‹Kp0Õ—­wýÛa‡ ^¼wÀŠdlž:BöÐÌ[¦ÏÜp5g_ÙòõˆÈÁw"²3R¿¢+V#„ÜY="êaÛ£—\KXüåÀimbzB†F|úX'÷ÒÌû×/$䘪BÐLj:Ëd\4õ˜&W(.+8¿gŠ¥Ï|ÉËCY%W$ûFŽï3;U…rõÁ´ë7º — uØñ+eŸóBhš’ôü©t‡¦)¹³Ø,Vÿõõ+üïïØ‘#Š…H€vkêÕ:þÊY===['6‡Ãt85‹ß¾I¾v>Ö«u‡Êkk Ùø\ží¶››¥/w­ï` ÿùdéѤµMr4åâ0cKd”ç×ÒC‡6Mv×ãBºŽ[WÖ‚%+ «ª¶d÷ƒµñ?54åbøÕò˜‚éI1æ°²S^¾Î´rkà9}Mù×~¥…c5’ªç‡ùÏŽôzjÿ£ÅÊ:õÜŽ&î””¼-Ûê–¨àèÚŠËÒªV®>˜úƼO¼,­D±Ù-— Åb!ä^|\›.}%ïwhš–;‹Ífs9\.ƒ>'¤@»YZÙ4oÙöö•3y9TÅ "@]Àf³MÍ›z·¶´²a:–O ý -(|wáÐâi£¶ »R¾°—B.€ò°XÔÙ¤ü»ϸ£ì!É—|B‹cHSeªÞQiµÛEÂkžÆxK¿¶ýt|ã¢5ß œ‘§ç2%|眎ª A3)]h#ãÆÎÎý×.½z³¿u=Ùrš¦E%¹§c‚º,Ì}¶b­Ë~S&väq!â²7Ý’šŸZ®&Bˆ¥ÒP'¼c³TõhÓ¹7¡i±H¤¸£¤w›Åáê ðy!ÚMßÀØÙ½©³{ÓÊ«Ôv%ÅL‡ðÉxF–}ÆGå-õ!džšjM ¸WóÝMy„AÁµJ›ýÈÁ¥Þ:áwŸ´6”ÿpiÞbà¶B?¿~ ³ÿØ9/ª*ͤø ðÏ‘°.Žo¼~Ó¿±™b}®¾Ù€i1sìÙ@ù²~½]¯ %s¾ÚUÏêKIµO-WŒÄÞ]ÛÿË5h‹Á¶l¹‡v4E‹ÅBBHa~ޤDq‡¦hJ>À>~ôgÌðy!ÚM?û€” èÝŃ‹ëÕï§¾ÚÒ¡NS§Åü¶%˜Oglšº°ÒfxœKo‹}m ÔW‹ný㪉MìŒ2žÝÙ³!<,&–ÒkJt䬱-œMÙ,B-©¬´`*A$7\ÿÂú±ƒ#ž¾w³¿“‘lyû€Åë·ô´.ÍJ:ºq¢©gùœA+}Û_0úüZ:yþðß•7«V®4Bˆ¾ñŸƒ?ãõh²˜uËDB!GfT/M—¯,ðìÑß­;÷ÊÏy§¸CÓV‹Å:\îÌyKŒM¸†ZDîÛÒPÓ¤sèè7jýŞؕêëwŒ<:rjP—fÄõ¬Mø–u>D}ý“{Žmß4§D¤þ‹ºwèÏáÃ& ñML/²r÷ù&¤|ÞUÝtæîy/%ŸïâµxÏj A3±ØlÙ—Ýgí#„ p6––¼ˆ­uÙ[ÎÕîÚ£7zæví{¸p#\rÔý«ã+ÿÑÍÅ,—˜õŸqü+·ª•+ †àaÔ1–VÖéi¯l윤%MIæhÕ©§dÅЦdçÈx›jie-()ærÐ;àsÂBƒµ™.4ø•æžqi»/íÙ!¦ÍupïÖ€àyJ¬y[¢ø›ÂtŒIO{}íÒ™¾}¬8p8lBHâó'ææ•üóÌÉÉsuoH‹©ô´”qgÛuêafa©¯_Oý‰ðIÐ;´À°¥?n a&LÛ2}‰ã õL‡MÕì}ŒÐ¨`jžu»¶¾¸{ûJ^N–˜¢!Ç«dF@@xí‚!„Ãf›š×oÙ®³©™¹®.&àüÌ-0Óöéà6ÍRßë´é=ú—ÈvL‡M£&Ó¨`açàbjV¿Ê§³X,›¥«Ëã`YñÏ éÐÃÙŽ´ƒâì} Ò¨`˜bhdTy%¨qòS›h5—K‰ÅLGA!”XÌáâñh(¤ V1·°Ê~—Ît„’™þÚÜŠé(”C:j•¦^­ã¯œ}“’È`J,~“’wöצ^­™Š@=t^í&”2€¦àñô˜@#XZÙ4oÙöö•3y9EU~B5`³ÙƦæM½[[ZÙ0@¥XÙ©LÇðŸ¼|ñìÆµËoÓ˜€6Ç’Ïoß±«‹›‡Ò æVvUn<'óu•Ï`¾1Ó!TPR\ÀtJ wh·×)¯.?Û«¿Ÿ½“ ‡ƒßg¨sÄbQjò˳§Žëêòì™@#àë7ÀÇÀ×'Ðnׯ\è7dTãfÞLÀ3sKS³Ó'=ŽéX@k`*AÐnYé6¶öLGÀ0;Gç¬ ˜G´Ò ÝhšÂ‡KÓÌÌ—Z éÐn,6~‡Áý>«‚vc³XL‡ p?Ò´uˆ±(h&¤@»±ðñ€‚û!€ Oñuˆ+]€qÕ›(JŽ [¼á÷ë÷ó‡F-¦ÌŸ6¸ùç} ¾}vFêçm´‹-ÿñ7÷þñÉ!+N_@›7š¶bÇŠqí  †)Þê,MX‡‹€€æ«ÆûciöEßî³/‹ŽÛÒÉRŸJzt{ÿÖùdðïÕ÷ŽPÉuŽ}Ÿþ«W×Es¾ßÛ’•÷,fY0ÇTl5 ƒ¤4db, ®§Š šç¸ìHؘî|cGGßÍ«kø®ò\€ßþóÚ4oRßÚB‹ò×…|ÕÐÕµ«÷¨Ð­bZZí÷è/OOkǦC§m”–KYðí%JvªÖ”ô\ÐFrSgÿßÔ6ûNOÜÖDŸklÓxn rPW`*A)ÍY‡‹€€&«ÆþÎZ2ÔIÕÑEO]ŽÆ%d¥§B®.ôû.­Ù鄇‰ñÇ›&ïí·è¦´Ú¼x›_nÞMºÛ2ã‡KnË5"&‘*/På¦@KÉ= [•Ùëéê†|cžy§á!ÏKDLPÃÐ;@JsÖ!Æ"  Éª1ð¼DÜÄ@åxךñ¦ú’ý¥Ç’¢wÌp6Ó×7wž»{EâÏ+¥ÕÊËÍœæìŒxq8¢Ò7­BS˜z@«ÉMõô½hóSsO3 Òî0>ÛmÀ÷ ÅPÓ0• €”Fu–Ѩ`dUcÞÔ]Ÿó¨XÔ\EFÀK¦üQ±¨› O²Ï3é&,ž$=ä+-7îRVTé›~Ʀ@+°+Ne­Ë9¶yн>—û)[ 5íLȦb¨IìZ=• f†O¢Qe4*ÐF‰ÏŸÞ¼v9½JK¥pØœú|~»Ž]]Ý=Vc:`¦·eø‰ä£þn•ÖlbÀ½œ/èeÊ#„ ât šH]Êô./¿¢k dU¹‡!ÿ¥)ÐFr¿cøõd X„à?`¨+Ð;@J£þ9hT0 uRS^Å]87h¸¿“›'—£Cyòø¾GÃ&êÏzöäQÃÆÍ !b±()ñéÉ£?êòôìV9©ÆÎKvF¾ qðbfa%,I¼·$¨ŸÒšK†8Ξ²-9OPš÷*:h¡Ë°ÒCs&oIÎòRÖMZè:jâ¹N<Î¥·Åÿ¥)L%¨Õä2îQ½üfìx/(+x3ÃϦkåLjízY”àç鿯·÷lÝËó‰ûLGµŠÜº›OÅøunfÈÓ14·ýbäÌÛ9Iù“s{G÷je¢¯kdaßkÌüGEÂòÓ+ÒÑs6•{ÿø—Ý}LõuLl›/Ú{£ÒúŠÁ|’ëq燌 pñhÌfs(š¢hЦ)±X¤~£iJR™Åf»¸7ú¿±×ãÎÊ5^½ô,{\:»6lé¦ÎarlOŸ¯¦®RZ³SÔñ1¡Szû4.$F}ÑAz(ªå›Ám›¥—ê´»¬­â¹'÷Û¾iN‰HÒ‡ð¿4ÚHn<žËÿ~ ½7ºãìŒ2½¶}Ç^<ÀT`5L‹Æ'c)b¨nrÙ±áënÌŸ³½kK nÉéíA½ÛÎÎ}¾™â}õÛÙ[·üâ£/Ê<9Ú·SxÖÝ儚þ°Õ³½}üî|+ÙWµž±ªúJƒ!„¥Ÿój VËḚ̂µw¤©“’Ò-‰!7/ŸjçÛÐ,Åš¢eO±µsÈÊÌ” ‰‘lã,M‰÷ bÌamupïÖ€àyÆ&¦LÀ°-Q üÇMQ,7·²«r›9™¯ÿCD*ÖæÐÐƒÇÆ(NH‹ò×Ï™ºóäõbÜyÈ„]«'sXDæÿñJ+HH_Zðí.ôÛ›”Y(YÏ ê‚ÝÛÖ‡,Qúñ€çsy¶bQ‘\9%ÊÑÑs+§©÷Ý­#’Þ´3Ò%„üàkwbÖµ#ƒä{Ûªª/±ziȄɡr5.<ø©uSoˤùËÖÉ–<ûç¡“‹+!„ÃáBÄb±âNòËDFMeÏZµdÖØÀé†FÒ± @•Õ>žÝ7üµm¿“ÒCWú}—ÖûtÂNk:=:pD¿E>W#ÛRE‹žº‹K®guª±3Ⲃó{¦XúÌW<”q=ÒÔcš\á«“c“:ÇH¿Û¯JÈœñtuCþ¤"në¾_ï=°Æ]Ÿ«¦¾ú`Úõý‘—u;~¥ìs~BMS’Þ’?•îÐ4%w–Ò{Ò Ý0=€„ÝÕ,E¼ôXRô_3œMy„8Ïݽb[«•$2ö“*(Úµf¼ƒÌÛ¡k@] ôŸƒ¤P§žÛÑÄr‡òŸé1ôÔþG JiQèÄ3QöI ¤ë[±²bBútÐäõù jê« †Rߘ÷ñWuÅfS´\:€‹E„{ñqmºô”¼WÜ¡iZî,¶²A…øŒÿaãÿþÚJ»¦Î¨>Zt?T³±šƒ?²‚"/©¨Å”v–¡iZT’{:&8 ËÂÜg¤å7vvî¿véÕ›ý­ëÉÖO»<éšËÊcVú•¨_ÏX±¾š`!–FH@åÞ±Yªz´éܛдX$RÜQÒ;@Ù½ÿA‚vãp¹”XÌt £ÄbWkþOW³±šƒÕWÐã° Å´‡E•¾¨Þ §ê˜½»¶Wvd°-›’KP´X,$„æçHJwhЦäÓÚÖ; RæVÙïÒMÍ-˜€I™é¯Í-¬˜Žâc ØÑvdY;a`GK=qÒ£øýÛV-Ûù;!dÉÇ©S¶Ü:Ùš¤¯ Zè2lƒÜ¹ª*ŒáLùîJ̸N✗»Ã¾Qóî˜J°.ë,Ó>`ñºÁ-=­K³’ŽnœhêY>GÀ…õcG<=|ïf'#¹²þžw””ëf"[ÕkÈŒ¿¯ž`Åz·sv…õŒ•ÖW !DßÀøÏÁU¾:¨SbÖ- …’9%hº|egþnݹW~Î;Åš®°²€X,ÖárõêÊ5Žth·¦^­ã¯œÕÓÓ³±ubËü#¨#(±øí›äkçc½Zw¨¼¶fP³±šƒÕWøöèêqó\§Õ³r55‚üúe^h¹u7· 0œ=ªÝµGoôÌíÚ÷qáF¸¤¼û¬}„ÎÆÒšobk]6!d­ÿ®1ûÿ‘kVÍzÆJë+ †RR\PÅ €ºÇÒÊ:=í•“´„¢)ÉÜ­:õ”Ì# ¸CÑ”ìÜoS-­¬%Å\à ^hàc¤§¥<}t§ /G®? @]Àf³MÍ=›x[7pPZA¨nµ±ªE@>FzÚëk—ÎtðícÝÀÃaBŸ?17¯äþ–““çêÞ"Séi)7âζëÔÃÌÂR_¿Â$)èÚMßÀØÙ½©³{ÓÊ«Ôvxä ¡QënjT0 u¬صíôÅÝÛWòr²ÄE„<žŽú³áµ :„›mj^¿e»Î¦f溺ò3˜"Ú Ÿ}@ŽF­»©QÁ€6²sp15«_åÓY,‹ÍÒÕåqÆV#µŠF­»©QÁ€–24’Ÿñô³P²Ø€öÒœuˆµkP¨k€ZE²1ÓQ¢m‹€@]ƒtÔ*’uˆß¤$2ØG€‹ß¤$Æýµ©Wk¦bP— V±´²iÞ²íí+g\‡X²hSïÖ–V6ŒP)VvF*Ó1@u1·²«ò¹9™¯?c$5FßÀ˜é*ÀBH ™Ð;j|ýø˜; ÎAïÐnA)Ó!h Oé@k ÚÇÓ{ùâÙk—3Þ¦1 8lŽ%Ÿß¾cW7¦cm‚th·×)¯.?Û«¿Ÿ½“yYª IDAT ‡ƒßg¨sÄbQjò˳§Žëêòì™´¾>v»~åB¿!£7óf:Ƙ™[š˜š>qxäèqLÇ 4m,!ò€fB:´[VFº­=ÓQ0ÌÎÑ9+#é(4…&Œ%Ä@Ð|H€v£i c8.MSLG )4a,!ò€æÃ÷(Ðn,6Ë ÷C2–y@ÃÕÅ|å}ËU•ƒ&c³XL‡ p?Òœ±„Èš¬6§ðõ¾.`áã/!÷Cš3–y@“Uo: (9.$ÀÏÓÍoïÙº—ÿæ÷«õíädg¤ª¯€|A-ÀbWøøËªHGÏAö¨èý?¦Ž²Ÿ˜Õ×Ð"r÷C€ºL£ÆÎhT0²ª1oZš}Ñ·û¬ÁË¢ã¶t²Ô§’ÝÞ¿u>ü{õ½#ÔArciš–î?ÛÛÇïη²GÏÍj9çøóE­>²>€Á`)úç QÁÔY‰ÏŸÞ¼v9½J«pØœú|~»Ž]]Ý=?{`̪Æt@lÐ<ÇeGÂÆ¸I^ºyu ßÕU²oÁ·?¸Ð?lOlRfaVz -Ê_?gêÎ“× ˆqç!v­žlÌaIª˜3|á®ßÓKuÚ Ü·aº¤\êžîï?n¡G9¸ì¶ÿ’6„’ì_Ý:üúæé÷|{IZ\¸vfàö“·Êô­…Kcþ)íGpuOø¼-??ÏxoÛ¨ýÒ1ƒÝŒ¤•+íkŒP•q§©÷ÁsþÚÔVZR’ù«ÿQ‹ç™Þõ}T}í‚'R5vF£‚¨›RS^Å]87h¸¿“›'—£Cyòø¾GÃ&êÏzöäQÃÆÍ !b±()ñéÉ£?êòôìk×B!ÕøÑaÃßYK†:©:ºè©ËѸ„¬ôBÈÕ…~ߥ5;ð01þxÓä½ýÝ”V›oóËÍ»Iwc[fü0`Ém¹F¦úò¸žI)+¸ºgê;!EɸzÈÆ7H¶Ú%~û²ZýyïŸg75¸]þøWòõ>;#Uö{þÌ[¦{ÏÜxûêÁú/ ¦ˆüo?¨ ª2î¯NŽMêÓÎHWZ²ÍoRß=?Zê(ÿW¬ ]´ë äçNøÇýaam"7væÉ¹½£{µ2Ñ×5²°ï5fþ£"ay5UciÑÎ?c==c›a³v‰¥ }j¹²` æ];?dT€‹Gc6›CÑES4M‰Å"õMS’Ê,6ÛŽÑÐÿ½w¾¨°é«ùœª±wÀóq•íïZ3ÞáߣK%Eÿ5ÃÙ”GˆóÜÝ+¶µZI"c%‡¢wH澓ίÖ*‚¬8!ÛH£žÍ¹G:¼<¡çX4;.ýûî þŽyÞemCÙjK¿ŒN˜&i'4&b­§Êµ^mšì®Ç%„t·®8¬!’rt ÐXÊ3î´(t♨û¤ïî._–Ò'GU~J¡>€ÖÑ¢'NÕM.;æ}õÛÙ[·üâ£/Ê<9Ú·SxÖÝåDõ˜Á†-<ßàJbŽ=•ڣ˰ºý:Æ­ åJƒ!„¥ÕsÝ \Vf†­½#M}˜×“¦h±HD¹yùT;ß~„f)îÐ-{Š­CVf† L #Ðaà>OOöe5¦Üõ9ŠEÍUd¼dÊ‹º™ðÊã3é&,ž$=ä+-7îRV\á™?!ÄÌ}–ðù7„ ܸùÙæ+¦9DºÏÚüBø“»©lµûEB™v:«‹Y¯<*ǦÊ*½F`[YÆ=íò¤k.+YéKKf Z3çdWÅGeÅúZGéýP3©N¨füà‰ˆ@¹}ŠãþäF#¦Ý]:gѯ׈¸ÚößüýêF:„Ôs;ƒÃ¿»ó2½ž•û˜Ë—Žm§t!† j/¹±3ÿØóï®mÀŠãã£Y.[AnÌàÎo/ŸOiT¿!M¢ŽMr챋Œ‰ªB¹Ò`!<žÞÀ…?ï%€½-)6›MQ2}zhJ,BÚuíKhZ,)îÐ4%{ ‹Å"„Ú»c³åßå„.X*WR這ޖá'’ú»UZ³‰÷r¾ —)"(ˆÓ1ø0ŠãR¾ wyù]ƒær'²u¬&›%}và4oÌv×áß7ŠMtze1Ѫb‡ðæ†:2í_•–kï_$H)ýK\ðSè…hÙ’©…ÄÛr±ÌY²ëh-úOmÃßYÛö;)=tu¡ßwi½O'ì´¦Ó£Gô[äs5²½äÐÌ[¦ÏÜp5g_ÙòõˆÈÁw"²3R¿±/zêr,.ÁÁTŸâ3bMôºuáß»òÄ¿® ýõ‰‡Ç‡B†F|úX'÷ÒÌû×/$ä˜Ò¦@{©;“q=ÒÔcš\¡Ü˜ÁCY%WË'2r |ŸÙ™¨*”«¦]¿ÑU¸4¨vüJÙçüD’‰!’?•îÐ4%w›Åê?p ¾¾V>D&tJoŸÆ…Ĩàob#:HEµ|3¸m³ôRöc—)™õÝqˆöâ°ˆþv„'¿¥…sûµÛN®N‡ðccfú6ß$ªg=$xùóIùÆÉ=ǶošS"Âÿ÷ÚK±ÞZÿ]cöÿóñ-ü¿½ûŽkâüãþ$a/Y²÷pâE°Š£Îº«¨Ôj«T'"ŠTpŠ¢"®Z[­‹jk­ÕŸJÁb]u/•%"Š(#Éýþ8Œ1¹„€†$äó~õÕ×å¹çžû>Qï¹{ò<ÏÕ6?€rR¡7 H™N(eþ Œú„g#]Þ?}ñæóÿ=zõ®ŠÂbUE{S¬Þî3½DÇeJTrØÀµL4 sg Î'ûõ[r&£¿•žpºøœA+-ö³Jž£6‡«|ÆÑ²©[º”`!æ†è¨'El–¤ÑüúŠâq¹â £Ø,ކ&ºdeäÚ=aWwñt‘Ço¶†Éœ„ÝsJø*4þ«Ðx)§ÐmüMQÞ7ô¶¦~«Ü¼ñ³°4ŒælØ;gCuúúÕé“ï‡KŒJø#ú ”–xûŠ;ÅÒ K~• B“¤L'”2‘ôZŒ˜Ûoýþu~-Lôu(n¾…7nÚfàÆŸBÝ?·Ë/`\ØÀÓ5ªEüOóöþ…]&¤$œËha"²K|Îà¨Æz[—.kbL)}¼EÏbTÝÒ%CÛ±eSÝjµ5Ø–ÍéàSôÚ¥¯ªŸÄ7(>Åí`§Ø×Ú ùvÈ› - W*t=”2PÊüAFÒçý•rùºúFzZo îm_6IÞ{Jl̬qmœÙ,B%©(LT]"sgN­78úî¯×2ú;Šädœ3´¼[Gÿy'ã¨ì¹þIÝ–gÔ-1Bˆ®¾Ñÿ&¨/Iñ‘ܪ*‡#H¡¨ê7 Ü»yÙÛ¯÷«â"ñ ŠúèÍ<OSCcFøC#žeü®ìµðGt€jkHsŸB…®‡R¦J™?ÈHú¼¿}›C¿ ±ðII#kWÿÉ‘d¾¢»fx`¯k9¯,]Ú.Úö‹,Ej™;ÓcÖNBÈg#AJ^ÏJ‹M$Ìt“²üòðî.&/‰Iÿ Ñ)cÜê–Î »y3·°ÊÏ}lmç$HáS|zí€ö{Ñëˆoð)¾ðÚyOÌ-¬*Þ•ipT¦Á­ m¨´ý»’FM˜mÔÈ¸æ¬ Úæ¸ÃÇ0üÞhj!º¤ŽìŠ Ÿ~BD ³{dž±“•äö qå¼€ñS€ZËÏ}z6õØÝúZÙ8p8lBÈÃûwLMk¸D—¸º7#„ðxüüÜœóiÇ};÷413×ÕÕ“~  ÁèPm >Ws>€Ïãq4ЦTSª¹3J €z²²±óéüåÕ‹é%ÅÏy|>!¤¢¢J[»†+*ªÎžÒ$„pØlcÓÆí|ýŒMLµ´Ô" ¸uÕfjfñ¢(ߨÔLÑ(RaþSS3 EG ,”jîŒR ¶ì\ŒM×ùp‹Åb³´´´… hЪͣ­wfúqk['vÃúÇ >—÷,ûìÉ#m½k˜f >ÄWïS ¥ @Š.& èÕfnaݺÏÅôc¯KŠE^ Øl¶‘±©‡§·¹…µ¢cPÊ3—y@™áòªMWßÈÙÝÃÙÝCÑ(–+ )Ï\BLäe†îPm¸÷Ê0—y@ù¡;e˜Kˆ‰< üX/ ž(:S »:[\øô3FPotõÂG0˜”F@ƒ‚ÇoY°Ô7t¨t¨t¨,% JEE¹¢Cøˆ¶¶Ž¢C`€îPmÊÖÞ(9hÚÚ:Ü;öŸ‚¼\EÅÀasÌ--;vêêâÖDQ1H‡îPmÊÐÞ(9Ä=ÍyœzòxïþCí\8ÅÜîòxÜ'ÙŽÿ™¢¥¥mçਤCw¨6ehïâÎ¥Ÿê7dd‹VžŠ ÃÄÔ¼‘±É_‡8^±‘0Âã¨6%iï"žä[ÛÚ+: B±st~^¯è(˜áÍ Ú”§½P Pª`@=¼7ãì?ùuZ:Ãæ4¶´ôíÔÕÕ½©ø^•ï0³´QðD™ ¹B @Ãõ@€¥Lÿ”*P9Or§:1È?ÀÉ­©G“rçÖõ&ÍZJ?êÞ›ÍZ´&„ðxܬ‡w?ð‹–¶Ž½Ø’Ãj÷K‚™%æ™7(hbh*t=dl‹Ñ@ÃgÄbôÏáÆŸICýZhk˜Ú~9bÆÅâ :ýΉ½Û7ÒÕ24³ï=zîÍ7UÕ‡LSÇAPÔËë)£zxëj6²m½`Çùó‹P+çÒN9Ö¥I 6›Ã§ø|ŠOQ|+ý?ŠâÓ™Yl¶‹{ó¯¿w.íä›ÒR‘Âå;:àMvÚÂEkž»^RÁqhÞn씹S·–ëkTç_þ1j@9‰4±"wÃE1¦khÛW•çBÅMž5bñ¶£/‰Iÿ Qûâ'rä/€¼à‘@@d°Œüù¹áI›º¶3Óx÷צ >>³_Þ_O{fþì ‰¿yér  ìÖ9êùÕ¥DèþroGß¡WæÓÛoóµíº ìÇIGÚ±Jî%EN"ãÓ¤äg †RQQþ9k ÚóÂ[{GŠÿa… ŠOñ¸\BHÆ?úvëG(–øŧ„±µsx^XPQYa@ … —cw@ù‹ÓÝzÌ›–ØÙ\—ŸuóâOæ’ÁGåwFPCâM¬p“̘(ÜN?Ø5,â¤MúÃb{~VhÏ.Ã~î~h´›ü¢Ÿ3Y@¤ÿýÃGªj×ÒéköœzVÆnß;p릹֚ÆCD–Ò¸srçûMÓ·¾žcKÈzBÈ­¿·½O·»,åûXB– HñßN ûwk–ý1å›;φ r$„Ýs’ÒDÎ+’Ÿ1Bˆ¶¶ÎÀˆÝu¬¨™>æ|6›Íçó)Åçñª!¾]¿"ÅãqÅ7(Š/|‹Å"„¯­¥-R¸»Ž…;Fî_øþáÊ­mר-]ém3KûÝ ·É*,}žŸCq_­ IþýÜkbä7d–UÁFmW˜Ä–£ùåšMܹv.â̶¨ðÄ}÷ ÞÚ6ï¸dsÒ`7CB$Þ4îøÜ’•Ó‚¶ü™Y¥k58(rÏÊïwâÒ#éÿ ²áæCÔvé,‘v:yþéI'sš7Ö#¤åʃ“{n!£WÊ!L¹kðK ^Y5|å Ÿ©—\Ê^4jàÔ—’z):(PR’zÇx•¯On›bî5W|WÁ¹ã&SEÿ>.Ë/É×P‹þ¸âRáô»«šYîÊz£áýÕ·;v­v×Õ’_z0¾ýe¬¨3væráßù ÝÀåBèÿ3nP_ä(Æk‘»Ö^~¾ñ''I{Üu9˜vÉÁX—r&bèöÜ>]J¶¢òc'ï·ÀëLLG:[x¦õïW­HAÜÃ,öM[æ#^ÔŒ Æ»w5e§ïœùíð˜ÁW¢‰ 7 çæûµtàék»,HÁúáÒ |QðÿÊIü¯µ™AÞk®¥S‹!cgÄÏ«óñí±H;½çù»3ŽÕf '¾-ô#Ý ’Tkt@V X¼õ¿¸Ì½ÍŒµ 1³4i^ó Bª[v4Ð ‚q) :QSÏíÀÃd‘]¯îíïùõŸ?ݼôQ*Å ýáØÊÿ# ÈÝ·Üõw›œ¸[hÁzž4³o÷-Ÿžœ %¿”`!D¦Çg³ù”HwÅãq !×2Ó:té[ñî­øEQ"G±™~6cwÀýw¼–úËß²ú{‡÷{—ÌŠýwº³±6!Îs¶.ÛØ~9‰9BïŠÝL§;…%GolM–/jϺ`w BH×ññe ÛM¤Þ4TŸô@VÜ¿“µ q˜ž³²é·Ò ‡›eÀ¸XÅ«|rûüªiÞ9fÿmé/´[´Î«äÙjU5åhÙò*ëòöe BK ¦6´Æ‚‹oªÎ6ý0ŸKµê õŒÍ´”EQÜw/ÿJš4¶KÄË{kéç“ýúÇ-9“ÑßJO8î?“Ϻ,?h¡+H±Òâ\?Å^Wƒû)~ 5ö#d‚”üR‚!„˜¢;jVÄfIÐÁ¯¡(—+¾Á0:€éZ$Çîw]ÎÍ2nk =m…Òo–q»7ª¾ j7ê^U6Y°«› ݨKeYó‰tª‹bq (~%½]ãMÃ2®ß‡Â;ÕX ('Æ¿Ö,Ž–ƒG×5Õ3H¶äÒ™Úuö³Jž£6‡«|ÆÑ²©‡˜äAÒ#‡ÊÑá°Jy”!‡Eá–?¤{êkF]½ãm ©¸Ð@eHê-ÒÐ505éu˜!ÕÝ·÷/ì2!%á\F@ ‘Ì‹Çî =+œ2ÚRO¨`!,éù¥³c˦šê@Û²ù"Ý|Š^; ôU1"¾Añ)¾hw@ýŽ˜áiu8û@@Í ³µÔ×øçUEocmBHÅë4Mý/QL}Uѧ:=]K¿o%¨ñ¦¡¥¾Æ™W=ª ?[cøB9IýsaSWø³x;=ª±Þ–ǥ˚BJoѳ%—(ä¯Á´S£-õ§lOOß™WühëÂïéѓڌ ŠýeÅ-í î]Ù¶6jaRõXBLè"sg:Ž]?oR»¦Våϳ$ü`Ü´z€SkÆ Ž¾û뵌þN†"%<¿~@;è¥[#áĉ+{™¾ùèª ¬¢äÙC­»FKÏÏ !DWßè “ê\;P+Iñ‘ܪ*çà Ð(ªúÍ÷n^ööëýª¸H|ƒ¢>z³ÇÓÔÐÐÑ3)\ŽÝ’c¢}FD“¸ ;™ëð²nfþ´qEd2Ûq ™²ñ÷ ÁV$?.(Âe؇á[aÁ‰M7†X“‚øÉ®#×É~v)7 ´%_;…LMú#q’%U°.$¢Æ´9©yeݬõ)¸ùP"M¬Ïèqó&uhnSšs-~ú×â»Ûé åÝ:úÏ <ç@eÏõOê¶<£žâøÜTkí)æX5~b¸Ë¢\= ç‘!ÑäPuG­g辨„…“‡t{˜ÿÆÂÝë»™ÌSùˆØÊš‰ fô={󙎩]Ç>ÃO¢Ó{ÌÚIàl$È™WÁ³ÒbBâ¶Œþé¶H±.ßì ½èë8» RÇç«q§+ØÅ˜Ÿ1BÈ»²×u¬¨s «üÜÇÖvN‚>ŧ×hß¹½Ž€øŸâ ¯P÷Äܪâ]™†ÁG=rìÐ1ï™z3Kãë1_ψ‘±@Pg"ƒeÚ˜szÄñlŒ/'¦­¸SÌ”Ìþ6fÏ· %åg VÚùø¥Ÿüó‹n}­l86!„¼Ñ`QÁS:ø¡øŸGáñøù¹9çÓŽûvîÉæˆÞ*°”¹­·ŸßË_sñÙ™{oO=œ >¯Ý;6ŒnÔÈXÑ(XâÊy㧈§›ZØÕ¹Ìâ§5gP>¿îÜ8:hŽ’Ül\ñÍ·ÁŠŽTØÓœGÿ]¾PRüœÇçB**ª´µkXIG‡Ãf›6nѶ}ãÆÖÚ:ºÂ“ˆ\G(¿aK~Y:ܤ*7qÚbÇAkÔEƒY: àáz  T?È+U0 Šì\ŒM×ùp‹Åb³´´´Eúˆšw̰½;¸C«'o5;ô ü-ÆWÑá@] ‰ áz  TKi(U0 ¢ EW<ý,”º;@Þ3ü&F]š%×S€¼¡‰ áz ÀÑÐàóxŠŽ‚Bø<GC©ï·@©Ì²CŒ”§½P {òH[ï/jÎ  Ì-¬[·ó¹˜~ìuI1ŸÏ¯ù9`³ÙFƦžÞæÖ  FJý¢AYäçæÜ½yEí=€ÑM[zZÙ80fÀ‹A éê):„¼+{­è ;T›²µ÷ ÄøÈî`„É ÚÐÝPXJ@í ;@í ;@í ;@í ;@íàÍÐÀUT”+:ÓÖÖIAw4pÚÚ:Ü;öŸ‚¼\EÇP8l޹¥eÇN]]ÜšˆïEw4pOs§ž<Þ»ÿP{'7À .x<î“ìGÇÿLÑÒÒ¶spÙ‹«!4pçÒOõ2²E+OEPßLLÍ›üuø×ãEva)Ahàžä[ÛÚ+: Űst~^/žŽî€ÏìúÚ!ö*äÔf–*ÐÈ ‚T‰h a (>æ€Úâp4(Š/žŽËb Ì,í_<‘13¿ªèû„; WöÊ5$%Q«oF~°P0€€øŠÁ@c±ñ¨5ÆË Ü»înêuÙ{щ?'¸Ëû\äs<£Š”P«ÒòÒæ–yDö0Ö–½üºE¥ŸòÍÈ 5'}Å`µUífѿۿþ>îv~iQ~Ž,é XlKÑ!(ãePÎÝwÁêëóö…®þ6’ûýÏ ý:|vÕ¿_,‹Qtê €š“¾b0ÈOÜ„Õý’þ—îk+c:( Ý Þ/ƒò}|zq#ú¢þÈý¾Ssõ6.¹Q¼¬•)þäDò¤¨íWåëY¸ž¾tÉ8_Bˆ™¥ý®0ÿˆ-GóË5;š¸sí4#‹B¨ª]K§¯ÙsêY»}ïÀ­›æZkr!ÿíÖE3÷ÿóœg8bfÜÚ)]èéèôÿÅ0³´ß°pÛ‘¬ÂÒçù9¥¹W—„-8töÖk®FsŸþë\ÕÆPS¼ÁÏ ÷Õš°äßϽ&F~C&lY\ž_²JC›4|¯&cùÂQ1VVü(ñºÓg<³-*¾,_tEÃÎËç^[½ ’"„Š_>{ͽØEÞÒO*›$ŒÁÈøõšyÌ ÐûgFj!¤¢äTÈI£›J?, @$¯¬ä6î}½jô_ïÄw‰¼€FøÅ4é[£ºz{ZÛºµòóÿñbÑ•_W÷ìèecëÒº[ÀÙo‡Ù¶iS+G¯§&¼æ½꣪vE{5oféТÿ„åyU~íMUÏFµ[B¹­þ‡çÆ¢Ëûötqr1³´ol׆[ž%ýØ›eÜî‚ðu¯*»)žÇË@óâû¶MJ5¥D%©²"$ÕÝ]§º(Ç€âWŠìÕ1ën/üâsBHþÙyO¼–u6Ò’~RáØ$a Fö¯7lÓˆC!‹«(r8$¢Ýâõæšµû;‰Ö€¦Š×CŽ–ÝŽ½AÓ‡Ì˯Ŵ33 7ÿ‘ö4ûZâwæs†ö :¥•˜’ú$ûƺÑS‡Å ²ÕjÈ!ùx°ž0Æá’͉§×82QöJI ^Ò KI!É2àQ<ÔOf(¥úçæûµô‹Ó×îÜËØëpy¡àX)ÅÖ–5ÇxdÉi.Å}ÕѽýŠ«7»5Ò¢S*^¥»´]tóþ)ã+ R÷Ïíò Ø‘Ÿ}šÐ3Õï>èc¬M©(ùŸsûõ¹B¾rsºzÇÛ@tæy_7×é™·¾2ùhs+I ùŠLœëíæÚoýþ1~-Lôu(n¾…7½W¤ÁQ=\]Âÿ½Ý»:¼Níò9ž>žÇ—ßêÝXäË®¦¤òi’*+rcÝEŠbœ(øâft‡‰Ï͉ðnÑâ÷ÌÑÖúRN*R‚¤Èƒ‘ôõ Ž*œܶEÙœ§–üïÖíý†b+2H·i튩áËŒ×ê(€†gyDÈäsÅÓM-ìê\fqáÓOˆ¨‚† 5j@4gÞñùs3ADÒÏgg5ÑÕ „P¼7æ6Í3gѽáïMc{Ï¢ÜûDô¦â„sûDú¦b»ë”Ì[t:·ü¡]ó ü¬“tþ“²;Á{¸º„ý{»/]ÔËcNíéIò…Ó¥˯*¶qšŸ*{¥$ßËÕÅoqb@O_7Sé_µôI"µüÅŸnw>º»O‹E(~ù€f^ó.]íl¤U‡oU¸ú=]]æþ{»gõÖ)›¦ßÒÑJ*¶nv$­™8}¡ø ‹Å”PqQ¡ã'ÍI”×/ ÏNÏyé:GÐ@Ñnä·ÀõåŒÓ¹„ÞSbÿ}XÄåóØ,BȇKpXpbvIEEINüäבóèÄèIm¾ нžSÌãWåÞ¹¸tÒ:=2°Éì ±w ÞT•î^6†NtÒæ¤æ•Éa)—¯«o`¤§õ¦àÞú™‚tI%,â8{ÊÆì’Šò’DZA.Ãæ‰çù"¬Ý¹¨Ó‚ŒÕ”¡¤ÊŠÅXwY˜µœÛ¥dëÆ  &Ó}RN*BRäŒÁHúz™°®ïwdæò«ãkÛ@°P0À{ª{=ì:¯ëïÁÉ·JdÌO?6BX"22ŽW.ÈV«!‡Dò€8Y†J!ãÈDY*%)xG#ÖªFŒ¡~â0CIÕ¿QÆõûð‡ÕI_Æ!“2bcAPoŒ—Ayu¬Oû:n¨Hâð¸A©áI„Ý5çö²±k2$ìТm¿2¬l÷l°O+‡6_]0 8éC'z†î‹êðzòn¶vMûþ°Ê°oõšœÖ,ÛßÏ˱̀KfAtbBp¯‰=d™Q¶osèÞж6.í¾š\Ð:R.©„Î+SF›göñjáâ5øŠÍ˜#Ñ_ˆ—iÓu…þE'K*èŒÕ”¡¤ÊŠÅXwÙ°Ew\2l͘ÄÑ5žT„¤Èƒ‘ôõ2ÒÐ':¦=7®) Æ…‚i’¹sbG`ïötµ Íì{ž{óÍûù7yæPk##ëa³¶ðjÌ LW V ,Ž~ÜáëF?«ü09\‡Ã*}?§[þ Ŧ¾ªnŽ+^§ké·¦·=õ5=|DœQðDÒˆBa-õ5þùPTš¦~Ë:C 1×;xUæ[ÏóŸ>ͬír’‚7m3pãϮ޾wbC`ÜÔq⊴‰²ÔHR¨ëFü>s!dý¬¿ç¬é#=0Ël©¯qæCÞ¢g1Jz~¥‚§P]~£.MŒ’ë)Øøêñ2(ÇѲ¼í¯>Ëù¼$Eµi˜wßµ7ê9u&{ë.¸Q>µf\‡àÿýx-# åGÏöAË»%ùÏ»ýümYá­¹þIÝ–O”ž@©ài@ ކŸÇ«9@CÄçñ8 CTx²€rv|·mṎ́ࢪڽIê¬ ÷˜µóMQÆg#Ö{ù•|Bˆû˜”å_æww11uý²°GtÊ7éù”Šª¿Y@®LÍ,^å+: Å(Ìjjf!ž®Œ·2>ç+çÒƒÚÆÝcZ¼™uíM=à§>&œÎ˜¢(+-6!„°4~Xû[~iEEi~Êš Ž„?äP&˜, …G[ïÌôãÏrbŒ¨>÷,çaÚñCm½Å÷bí€Ï¯×"Ÿe‹2H÷¡ŠD-`é,®‡R˜[X·nçs1ýØë’b>£ü@]°Ùl#cSOos kñ½òí8;3bËÑürÍŽƒ&î\;͈ÃZÚÙ£pù‰õ]«C©,½Ø²íœS·OÚ¿Á=4€þ¿à÷ÿ3Û¢Â÷Ý/xkÛ¼ã’ÍIƒÝ é`±oÚ2Ÿà¤±mFF®¹‘¤Á"„³g5 Ý"è „¼(x"þü<ã‚ñîcç]MÙé;g~;6óösM¶È"¿Òg<Îr×Ñ „P¼7íÚå=ÎÖËÕÅoqb@O_7SI‘œÏÎj¢[]‚¹Mó ´÷,ʽÏx^úc7×i™7û›èˆ”É!„â•YØ·{ž{ç¿@EÊž­þc¦›š):EâóxÛ—5A|—©…]‹-.|ú A€R“ïŠhÝiÓÚF]*Ë®ÓÛa›F Y\E‘Ã!í¯é `D?uBXŠ_)²woJBþñíþ=|œ<û¬þã1c t_]‚h¼rég¿ö¦ªg#ñtIQU–þ«ià)½Lø\°P0‘¼b0€$òíH}UAoT¼N×ÒoMo7n¿xfÚ„=I¡ív¸ˆUÛÙ¦mnüùÀÕÛ÷NlŒ›:®ÎÑêpX¥¼êÅç¹åém 4O½¯ˆ,Jîî1rQç0 V°P0¨9é+H"ßµ‚›n ±&ñ“#\G®{ŸÌ^¸¾Ÿ‡ÿòÉg 9 OþNڜԼ²nÖú2ž¥÷”ؘYãÚ8³Y„ªÆü’Œ¶ÔŸ²==i|g^ñ£­ ¿¤G6ùnB¬óÆé®o÷¯ X°Kz9'¢.t˜»PðK Ê 5'}Å`IäÛ°²Ý³Á>­òË5;œx$ÒçÃYõ‰ŽiÏÍJî5®£Gñ;®ŒOÑ+ºk†öº–óÊÒ¥í¢m¿Ô9ÚùVŸî²(WÏÂydH494ŠNï°øà´…Óýý¼ŠùÆß„ÆH-¤¢$5â–ÁåÎVuj `±4—”bó¯ÿfIüÒ¦þO-oIüóÛþ÷ŒVŠ€,%Ôwÿú¹ý£Þd]Û¨7"Ⱥ€‘|' ˆ3³tÔ·l¶âàAô(J}w`Q=…“ï‹@ ¡;@í ;@íh|ʂàŠê{)Aqååå2æÔÑÑ‘k$jÝ x,6;yýª³M#¿Ì,íUâHª'(9t€â±X,BÈâ•IRòD†O¢³À§ÃR‚ xlÙžó¥d«(¹µ",Èdz•“CÓvýgì:uÿóÐР;OÆŸý%e«,ý·¿ïÈ"‡>?ÿùÏÓ§o]8ºp|çKÉ?|Öt€â±Ù2Ý“HÊv"8D/toìÔaî6Ælޱ¥oOÿ„_OÑ{Í,íÿNïкec+BHiîÕÐÀ®N.íšt6óZi• œ£±3Û6mjåèñõÔ„×n®Ó2oö7щ±‘jJ‰A–* rw’y‹þ6¸åíšåg”ò§*oÅc³d›,ÀbóCw€».çz×Ë úÆFÐ È ÜPtyÿôÅ›Ïÿ÷èÕ»*BKèÔÝiÓÚF]*Ë‚c ¤ !,Ž!„~¦?R¼rzûf·» ¨FÝ«Ê&U8?¿Rzþkoªz6ú¨/@J!"Õ”ƒ,U¸ø¦êlS7Á!x§@ÃÉ x,ÙÖ”-´ƒÅâ_îÊx®€s½ƒWeÞ¸õ<ÿIáÓLŠúпúª‚Þ¨x®¥ßZÆŵÔ×øçCQišú-ë–¿­æ©÷éòŽA„§¾æ±‡^<¡ÿ+ÊÏ©[ ´ÐŠÇfs>%ÛW›ã_®>3aÿÝÜbEU¾}u-í¤BJ¹|]}#=­7÷ÖÏ Þœ˜]RQQ’?9Âuä¼ZUAØâ!޳§lÌ.©(/yá2¬†¢$å l2{Bì‚7Ue…»—‘k "¢'µù.(özN1_•{çâÒIju8(?t€â±d›, )›¶q§gwÞÿã›^¬¬Ý={ÌM:ÿó ÆÌû6‡î akãÒî«É­#…w­l÷l°O+‡6_]0 8éSÛZt^™2Ú<³W ¯ÁWlƉþ¢nù;,>8­Y¶¿Ÿ—c›—̘'/|®Dx†î‹êðzòn¶vMûþ°Ê°ot­凥€Y}.%¨£g¸zixÙ®,[Zñ4xèfõÙ «o$cÎwe¯å €šÀ›@ñðPϰv€ÚAw€ÚAw€ÚAw€ÚAw€ÚAw€ÚAw€ÚAw€ÚAw€ÚAw€Úù?:+!ФØZ“IEND®B`‚nip2-8.7.0/doc/html/nipguidese29.html0000644000175000017500000000763013341773367014251 00000000000000 Lazy programming

6.8 Lazy programming

nip2’s programming language is lazy, that is, it delays evaluation as long as it possibly can. For example, error is a function which immediately halts execution of your function and pops up an alert window. So:

12 + error "wombat!"

Has no value: this expression will halt with an error message. However:

false && error "lasagne!"

Will evaluate to false, since nip2 knows after looking at the left-hand-side of && that the result must be false, and so does not evaluate the right-hand-side.

[12, error "hot chilli!"] ? 0 == 12

This also evaluates completely, since the second element of the list is never used, and therefore never evaluates.

Things become more confusing when you start calling functions, since the arguments to a function call are also not evaluated until the function needs that value. For example:

foldr (error "boink!") 2 [] == 2

Again, this evaluates successfully, since the function is never used by foldr.

nip2-8.7.0/doc/html/nipguidech3.html0000644000175000017500000000700213341773367014135 00000000000000 3 Assembling infrared mosaics

Chapter 3
Assembling infrared mosaics

VIPS has a package of functions designed to help join many small images together to make a single large image. They were originally designed to assemble infrared reflectograms but are general enough to be useful for other sorts of image as well, such as X-rays.

This chapter first introduces the mechanics of infrared imaging then explains how to use nip2 to assemble the images you grab. Finally, it suggests some printing techniques.

nip2-8.7.0/doc/html/nipguidese13.html0000644000175000017500000003026113341773367014236 00000000000000 Command-line interface

4.5 Command-line interface

You can use nip2 from the command-line as well as from the GUI. This can be handy for automation: you can build a workspace and then run it over a whole set of images, or use nip2 as part of a larger system. We’ve make websites which use nip2 as the back-end.

In command-line mode nip2 runs without a GUI of any sort, it doesn’t even need a window system to be installed on the machine. This makes it possible to use it in a server or batch context.

These notes are for the Unix command-line, but they should work for Windows as well.

nip2 has three main modes of operation from the command-line:

nip2 filename1
Start nip2 in GUI mode, loading the command-line arguments as files. Filenames can be images, workspaces, matricies, toolkits, and so on.
nip2 -e expression arg1
Start in no-GUI mode, print the value of expression. The list argv is set to be ["filename","arg1",..].
nip2 -s filename arg1
Start in no-GUI mode, read in filename as a set of definitions, print the value of symbol main. The list argv is set to be ["filename","arg1",..].

You can use the -o option to send output somewhere other than the screen. If these modes don’t do quite what you need, you can get finer control of how nip2 behaves with a set of other options: see the man page for details.

4.5.1 Using expression mode

The -e option is very easy to use. For example:

nip2 -e "2 + 2"

Prints 4 to stdout.

nip2 -e "99 + Image_file argv?1" -o result.png fred.jpg

Loads argv1 (fred.jpg), adds 99, writes the result to result.png.

nip2 -e "Matrix [[1,2],[4,5]] ⋆⋆ -1" -o poop.mat

Invert the 2x2 matrix and write the result to poop.mat.

If the result of the expression is a list, each item is printed on a new line. For example:

nip2 -e "[1..5]"

Will print the numbers 1 to 5, each on a new line.

If you have a list result and you are using -o to direct the output to a file, the filename will be incremented each time you write. For example:

nip2 -e "map (add (Image_file argv?1)) [10, 20 .. 50]" -o result1.png fred.jpg

Will load fred.jpg, add 10, 20, 30, 40 and 50, then save those images to result1.png to result5.png.

4.5.2 Using script mode

With the -s option you can use nip2 as a Unix script interpreter.

Create a file in your favourite text editor called brighten containing:

#!/usr/bin/nip2 -s  
 
main  
  = clip2fmt infile.format (infile ⋆ scale), argc == 3  
  = error "usage: infile scale -o outfile"  
{  
  infile = Image_file argv?1;  
  scale = parse_float argv?2;  
}

The first line needs to be the path to nip2 on your system. Use which nip2 to find the path if you don’t know it. Mark the file as executable with chmod +x brighten, then use it on one of your image files with:

brighten fred.jpg 1.5 -o bright_fred.png

See Chapter 6 for details on the programming language. This program multiplies each input pixel by the constant, producing a floating point image, then then clips the result back to the same format as the original image (usually 8-bit unsigned).

nip2 takes a while (a few seconds) to start up, so this isn’t going to be appropriate for small images or simple calculations. But for complex operations, or operations on large images, this mode can be very useful.

4.5.3 Using –set

The –set option (which can be abbreviated to -=) lets you make changes to a workspace after loading it. Suppose the workspace test.ws has a row called A1 with the value 12. Then entering:

nip2 test.ws --set Workspaces.test.A1=45

Will, as normal, start nip2 and load test.ws. But before the first recalculation, nip2 will change the value of A1 to be 45. You can use –set to create new symbols as well.

4.5.4 Other modes

A set of sub-options let you mix up other modes yourself. For example, it’s common to want to run a workspace on many files.

Suppose the workspace process.ws loads an image in A1, performs some processing and produces a result image A10. If you run nip2 with:

nip2 -bp \  
  -= 'Workspaces.process.A1=Image_file "fred.jpg"' \  
  -= main=Workspaces.process.A10 \  
  -o fred.jpg process.ws

This will start nip2 in batch (ie. no GUI) mode (the -b switch), load process.ws, change A1 to load another file, set main to be the value of A10 and save the value of A10 to fred.jpg (the -p switch).

nip2-8.7.0/doc/html/nipguidech1.html0000644000175000017500000001105613341773367014137 00000000000000 1 Getting started

Chapter 1
Getting started

nip2 is a user interface for the VIPS image processing library. It is designed to be fast, even when working with very large images, and to be easy to extend.

This guide is split into quite a few chapters:

  • If you want to use nip2 to assemble infrared mosaics, you should read Chapter 3. The middle section in the tutorial (see §2.2) does IR mosaics very quickly.
  • If you want to use nip2 for general image processing, work through Chapter 2.
  • If you have specific questions about some part of nip2’s user-interface, look at Chapter 4.
  • If you’re really hardcore, take a look at Chapter 6, which covers programming.
  • If you want to know more about VIPS, the image processing package underlying nip2, try the VIPS Manual.

If nip2 has installed correctly you should see something like Figure 1.1 when it starts up.


PIC


Figure 1.1: nip2 as it starts up


nip2-8.7.0/doc/html/nipguidese9.html0000644000175000017500000003245413341773367014171 00000000000000 Image view window

4.1 Image view window

Figure 2.2 shows nip2’s image view window with all the toolbars turned on.

If you press i (or +) with the keyboard focus on the image you will zoom in on the pixel your mouse pointer is over. Press o (or -) to zoom out again, or press the number keys 1, 2, 4 and 8 to jump straight to a particular magnification. If you hold down the Ctrl key while pressing these numbers, nip2 will zoom out by that amount. If you press 0 (the number zero), then nip2 will pick a magnification or reduction which fits the image to the size of the window.

When the image is too large for the window, you can use the scroll bars to move about the image. With the keyboard focus on the image the cursor keys left, right, up and down move a few pixels in each direction; hold down Shift as well to move a screenful at a time; hold down Ctrl as well to jump to the extreme edges of the image.

You can also drag with the middle mouse button to pan around the image. Use the mousewheel to pan up and down, hold down Shift and the mousewheel to pan left and right. Use Ctrl and the mousewheel to zoom in and out.

Use the View menu to add extra elements to the window. You can turn the status bar on and off, and you can add a display control bar, a paintbox and a set of rulers to the window.


PIC


Figure 4.1: The display control bar


If you select View / Toolbar / Display Control, nip2 will add a bar to the top of the window which you can use to change the contrast and brightness of the image you are viewing. The left-hand slider and text box set the gain for the image: each pixel is multiplied by this amount before display. The right-hand slider and text box set the offset: each pixel has this value added to it before display. This is useful for boosting the brightness in dark areas of images.


PIC


Figure 4.2: The display control bar menu


If you click the left mouse button on the arrow to the left of the display control bar, nip2 pops up a menu of useful display functions — see Figure 4.2.

Scale searches the area of the image you are viewing for the darkest and brightest points and chooses settings for the gain and offset sliders which will stretch the image to use the full range of your screen. False colour tries to make small differences in brightness more visible by colour-coding them.

If Interpret is turned on (it is by default), then nip2 will look at the Type field in the image header, and use that as a hint when transforming the image to a viewable form for you. This is usually the behaviour you want. Reset moves the sliders back to the default positions of 1.0 and 0.0. Set As Workspace Default makes the current display bar settings the default for all new image windows in this workspace. Finally, Hide removes this display control bar.

If you select View / Toolbar / Rulers, nip2 will add rulers to the edges of the window which you can use to measure numbers of pixels. If you left-drag from the ruler, you can create a guide. Guides are useful for lining up other things in the view window, and also affect paint box actions. A right-button menu on the rulers lets you use a mm scale rather than a pixel scale, and controls whether the Xoffset and Yoffset header fields are used.

If you select View / Toolbar / Paint, nip2 adds a paint bar to the top of the window. You can use the paint bar to do simple edits to the image being displayed. See Figure 4.3.

While the paint bar is very limited, it does have two useful features. First, it can paint with any pixel value, even complex numbers. For example you can take the fourier transform of an image and paint out the peaks. Secondly, it doesn’t operate on a memory copy of an image, it operates directly on the file on disc. This means that you can paint very quickly on images of any size, but it does make the paint bar a bit dangerous.

Normally paint actions are live, that is, every time you paint something all the objects which depend on the thing you painted will recalculate. This can sometimes cause annoying delays: there’s a preferences option to turn off automatic recalculations for the paint bar.


PIC


Figure 4.3: The paint bar


The Undo and Redo buttons move forward and back though paint actions. The Clear button wipes the undo/redo history (useful if memory is getting low). There’s an option in the preferences workspace which controls the number of undo steps nip2 tracks.

The slider sets the nib diameter for drawing operations, the black square is the current ink colour (you can drag and drop colour, or pixel values, from other parts of nip22), and the text box at the far right is the text that will be drawn by the text tool. The paint tools will ‘snap’ to guides, points and regions, so you can line things up easily.

You can mark regions on images by holding down Ctrl and dragging down and right with the left mouse button. You can move the region about by dragging on the label with the left mouse button; you can resize it by dragging with the left mouse button in the border; you can get a useful context menu by right-clicking on the label; and you can pop up a box which will let you edit the region numerically by double-left-clicking on the label.

If you drag up and left, you will make an arrow. If you hold down Ctrl and just click the left mouse button, you will make a point. If you drag from a horizontal or vertical ruler, you’ll make a guide. Guides are useful for lining up other things in the view window.

View / Image Header shows the image metadata and history. Use the search box to filter large metadata sets.

The File menu contains two useful items: select Replace Image to change the image which is being displayed in the window (you can also drag and drop new images in). Select Save Image to save the image you are viewing to a file. See §4.2 for details on nip2’s load and save dialogs. Use File / New to make regions, points, arrows and guides without the mouse.

nip2-8.7.0/doc/html/nipguide.css0000644000175000017500000003345613341773367013377 00000000000000 /* start css.sty */ .cmmi-10{font-style: italic;} .ptmr7t-{font-family: monospace;} .ptmr7t-{font-family: monospace;} .ptmr7t-{font-family: monospace;} .ptmr7t-{font-family: monospace;} .ptmr7t-{font-family: monospace;} .ptmr7t-x-x-207{font-size:207%;font-family: monospace;} .ptmr7t-x-x-207{font-family: monospace;} .ptmr7t-x-x-207{font-family: monospace;} .ptmr7t-x-x-207{font-family: monospace;} .ptmr7t-x-x-207{font-family: monospace;} .phvr7t-x-x-172{font-size:172%; font-family: sans-serif;} .phvr7t-x-x-172{ font-family: sans-serif;} .ptmr7t-x-x-120{font-size:120%;font-family: monospace;} .ptmr7t-x-x-120{font-family: monospace;} .ptmr7t-x-x-120{font-family: monospace;} .ptmr7t-x-x-120{font-family: monospace;} .ptmr7t-x-x-120{font-family: monospace;} .ptmri7t-{font-style: italic;} .ptmr7t-x-x-90{font-size:90%;font-family: monospace;} .ptmr7t-x-x-90{font-family: monospace;} .ptmr7t-x-x-90{font-family: monospace;} .ptmr7t-x-x-90{font-family: monospace;} .ptmr7t-x-x-90{font-family: monospace;} .phvr7t-x-x-80{font-size:80%; font-family: sans-serif;} .phvr7t-x-x-80{ font-family: sans-serif;} .pcrr7t-{font-family: monospace;} .ptmb7t-{ font-weight: bold;} .phvb7t-x-x-80{font-size:80%;font-family: sans-serif; font-weight: bold;} .ptmbi7t-{ font-style: italic; font-weight: bold;} .ptmr7t-x-x-80{font-size:80%;font-family: monospace;} .ptmr7t-x-x-80{font-family: monospace;} .ptmr7t-x-x-80{font-family: monospace;} .ptmr7t-x-x-80{font-family: monospace;} .ptmr7t-x-x-80{font-family: monospace;} .cmmi-8{font-size:80%;font-style: italic;} .cmsy-8{font-size:80%;} .phvro7t-x-x-80{font-size:80%;font-family:sans-serif; font-style:oblique;} p.noindent { text-indent: 0em } td p.noindent { text-indent: 0em; margin-top:0em; } p.nopar { text-indent: 0em; } p.indent{ text-indent: 1.5em } @media print {div.crosslinks {visibility:hidden;}} a img { border-top: 0; border-left: 0; border-right: 0; } center { margin-top:1em; margin-bottom:1em; } td center { margin-top:0em; margin-bottom:0em; } .Canvas { position:relative; } img.math{vertical-align:middle;} li p.indent { text-indent: 0em } li p:first-child{ margin-top:0em; } li p:last-child, li div:last-child { margin-bottom:0.5em; } li p~ul:last-child, li p~ol:last-child{ margin-bottom:0.5em; } .enumerate1 {list-style-type:decimal;} .enumerate2 {list-style-type:lower-alpha;} .enumerate3 {list-style-type:lower-roman;} .enumerate4 {list-style-type:upper-alpha;} div.newtheorem { margin-bottom: 2em; margin-top: 2em;} .obeylines-h,.obeylines-v {white-space: nowrap; } div.obeylines-v p { margin-top:0; margin-bottom:0; } .overline{ text-decoration:overline; } .overline img{ border-top: 1px solid black; } td.displaylines {text-align:center; white-space:nowrap;} .centerline {text-align:center;} .rightline {text-align:right;} div.verbatim {font-family: monospace; white-space: nowrap; text-align:left; clear:both; } .fbox {padding-left:3.0pt; padding-right:3.0pt; text-indent:0pt; border:solid black 0.4pt; } div.fbox {display:table} div.center div.fbox {text-align:center; clear:both; padding-left:3.0pt; padding-right:3.0pt; text-indent:0pt; border:solid black 0.4pt; } div.minipage{width:100%;} div.center, div.center div.center {text-align: center; margin-left:1em; margin-right:1em;} div.center div {text-align: left;} div.flushright, div.flushright div.flushright {text-align: right;} div.flushright div {text-align: left;} div.flushleft {text-align: left;} .underline{ text-decoration:underline; } .underline img{ border-bottom: 1px solid black; margin-bottom:1pt; } .framebox-c, .framebox-l, .framebox-r { padding-left:3.0pt; padding-right:3.0pt; text-indent:0pt; border:solid black 0.4pt; } .framebox-c {text-align:center;} .framebox-l {text-align:left;} .framebox-r {text-align:right;} span.thank-mark{ vertical-align: super } span.footnote-mark sup.textsuperscript, span.footnote-mark a sup.textsuperscript{ font-size:80%; } div.tabular, div.center div.tabular {text-align: center; margin-top:0.5em; margin-bottom:0.5em; } table.tabular td p{margin-top:0em;} table.tabular {margin-left: auto; margin-right: auto;} td p:first-child{ margin-top:0em; } td p:last-child{ margin-bottom:0em; } div.td00{ margin-left:0pt; margin-right:0pt; } div.td01{ margin-left:0pt; margin-right:5pt; } div.td10{ margin-left:5pt; margin-right:0pt; } div.td11{ margin-left:5pt; margin-right:5pt; } table[rules] {border-left:solid black 0.4pt; border-right:solid black 0.4pt; } td.td00{ padding-left:0pt; padding-right:0pt; } td.td01{ padding-left:0pt; padding-right:5pt; } td.td10{ padding-left:5pt; padding-right:0pt; } td.td11{ padding-left:5pt; padding-right:5pt; } table[rules] {border-left:solid black 0.4pt; border-right:solid black 0.4pt; } .hline hr, .cline hr{ height : 1px; margin:0px; } .tabbing-right {text-align:right;} span.TEX {letter-spacing: -0.125em; } span.TEX span.E{ position:relative;top:0.5ex;left:-0.0417em;} a span.TEX span.E {text-decoration: none; } span.LATEX span.A{ position:relative; top:-0.5ex; left:-0.4em; font-size:85%;} span.LATEX span.TEX{ position:relative; left: -0.4em; } div.float, div.figure {margin-left: auto; margin-right: auto;} div.float img {text-align:center;} div.figure img {text-align:center;} .marginpar {width:20%; float:right; text-align:left; margin-left:auto; margin-top:0.5em; font-size:85%; text-decoration:underline;} .marginpar p{margin-top:0.4em; margin-bottom:0.4em;} table.equation {width:100%;} .equation td{text-align:center; } td.equation { margin-top:1em; margin-bottom:1em; } td.equation-label { width:5%; text-align:center; } td.eqnarray4 { width:5%; white-space: normal; } td.eqnarray2 { width:5%; } table.eqnarray-star, table.eqnarray {width:100%;} div.eqnarray{text-align:center;} div.array {text-align:center;} div.pmatrix {text-align:center;} table.pmatrix {width:100%;} span.pmatrix img{vertical-align:middle;} div.pmatrix {text-align:center;} table.pmatrix {width:100%;} span.bar-css {text-decoration:overline;} img.cdots{vertical-align:middle;} .partToc a, .partToc, .likepartToc a, .likepartToc {line-height: 200%; font-weight:bold; font-size:110%;} .chapterToc a, .chapterToc, .likechapterToc a, .likechapterToc, .appendixToc a, .appendixToc {line-height: 200%; font-weight:bold;} .index-item, .index-subitem, .index-subsubitem {display:block} div.caption {text-indent:-2em; margin-left:3em; margin-right:1em; text-align:left;} div.caption span.id{font-weight: bold; white-space: nowrap; } h1.partHead{text-align: center} p.bibitem { text-indent: -2em; margin-left: 2em; margin-top:0.6em; margin-bottom:0.6em; } p.bibitem-p { text-indent: 0em; margin-left: 2em; margin-top:0.6em; margin-bottom:0.6em; } .paragraphHead, .likeparagraphHead { margin-top:2em; font-weight: bold;} .subparagraphHead, .likesubparagraphHead { font-weight: bold;} .quote {margin-bottom:0.25em; margin-top:0.25em; margin-left:1em; margin-right:1em; text-align:justify;} .verse{white-space:nowrap; margin-left:2em} div.maketitle {text-align:center;} h2.titleHead{text-align:center;} div.maketitle{ margin-bottom: 2em; } div.author, div.date {text-align:center;} div.thanks{text-align:left; margin-left:10%; font-size:85%; font-style:italic; } div.author{white-space: nowrap;} .quotation {margin-bottom:0.25em; margin-top:0.25em; margin-left:1em; } h1.partHead{text-align: center} .chapterToc, .likechapterToc {margin-left:0em;} .chapterToc ~ .likesectionToc, .chapterToc ~ .sectionToc, .likechapterToc ~ .likesectionToc, .likechapterToc ~ .sectionToc {margin-left:2em;} .chapterToc ~ .likesectionToc ~ .likesubsectionToc, .chapterToc ~ .likesectionToc ~ .subsectionToc, .chapterToc ~ .sectionToc ~ .likesubsectionToc, .chapterToc ~ .sectionToc ~ .subsectionToc, .likechapterToc ~ .likesectionToc ~ .likesubsectionToc, .likechapterToc ~ .likesectionToc ~ .subsectionToc, .likechapterToc ~ .sectionToc ~ .likesubsectionToc, .likechapterToc ~ .sectionToc ~ .subsectionToc {margin-left:4em;} .chapterToc ~ .likesectionToc ~ .likesubsectionToc ~ .likesubsubsectionToc, .chapterToc ~ .likesectionToc ~ .likesubsectionToc ~ .subsubsectionToc, .chapterToc ~ .likesectionToc ~ .subsectionToc ~ .likesubsubsectionToc, .chapterToc ~ .likesectionToc ~ .subsectionToc ~ .subsubsectionToc, .chapterToc ~ .sectionToc ~ .likesubsectionToc ~ .likesubsubsectionToc, .chapterToc ~ .sectionToc ~ .likesubsectionToc ~ .subsubsectionToc, .chapterToc ~ .sectionToc ~ .subsectionToc ~ .likesubsubsectionToc, .chapterToc ~ .sectionToc ~ .subsectionToc ~ .subsubsectionToc, .likechapterToc ~ .likesectionToc ~ .likesubsectionToc ~ .likesubsubsectionToc, .likechapterToc ~ .likesectionToc ~ .likesubsectionToc ~ .subsubsectionToc, .likechapterToc ~ .likesectionToc ~ .subsectionToc ~ .likesubsubsectionToc, .likechapterToc ~ .likesectionToc ~ .subsectionToc ~ .subsubsectionToc, .likechapterToc ~ .sectionToc ~ .likesubsectionToc ~ .likesubsubsectionToc, .likechapterToc ~ .sectionToc ~ .likesubsectionToc ~ .subsubsectionToc, .likechapterToc ~ .sectionToc ~ .subsectionToc ~ .likesubsubsectionToc .likechapterToc ~ .sectionToc ~ .subsectionToc ~ .subsubsectionToc {margin-left:6em;} .likesectionToc , .sectionToc {margin-left:0em;} .likesectionToc ~ .likesubsectionToc, .likesectionToc ~ .subsectionToc, .sectionToc ~ .likesubsectionToc, .sectionToc ~ .subsectionToc {margin-left:2em;} .likesectionToc ~ .likesubsectionToc ~ .likesubsubsectionToc, .likesectionToc ~ .likesubsectionToc ~ .subsubsectionToc, .likesectionToc ~ .subsectionToc ~ .likesubsubsectionToc, .likesectionToc ~ .subsectionToc ~ .subsubsectionToc, .sectionToc ~ .likesubsectionToc ~ .likesubsubsectionToc, .sectionToc ~ .likesubsectionToc ~ .subsubsectionToc, .sectionToc ~ .subsectionToc ~ .likesubsubsectionToc, .sectionToc ~ .subsectionToc ~ .subsubsectionToc {margin-left:4em;} .likesubsectionToc, .subsectionToc {margin-left:0em;} .likesubsectionToc ~ .subsubsectionToc, .subsectionToc ~ .subsubsectionToc {margin-left:2em;} .figure img.graphics {margin-left:10%;} #TBL-1 colgroup{border-left: 1px solid black;border-right:1px solid black;} #TBL-1{border-collapse:collapse;} #TBL-1 colgroup{border-left: 1px solid black;border-right:1px solid black;} #TBL-1{border-collapse:collapse;} #TBL-1 colgroup{border-left: 1px solid black;border-right:1px solid black;} #TBL-1{border-collapse:collapse;} #TBL-1 colgroup{border-left: 1px solid black;border-right:1px solid black;} #TBL-1{border-collapse:collapse;} #TBL-1 colgroup{border-left: 1px solid black;border-right:1px solid black;} #TBL-1{border-collapse:collapse;} #TBL-2 colgroup{border-left: 1px solid black;border-right:1px solid black;} #TBL-2{border-collapse:collapse;} #TBL-2 colgroup{border-left: 1px solid black;border-right:1px solid black;} #TBL-2{border-collapse:collapse;} #TBL-2 colgroup{border-left: 1px solid black;border-right:1px solid black;} #TBL-2{border-collapse:collapse;} #TBL-2 colgroup{border-left: 1px solid black;border-right:1px solid black;} #TBL-2{border-collapse:collapse;} #TBL-2 colgroup{border-left: 1px solid black;border-right:1px solid black;} #TBL-2{border-collapse:collapse;} #TBL-2 colgroup{border-left: 1px solid black;border-right:1px solid black;} #TBL-2{border-collapse:collapse;} #TBL-3 colgroup{border-left: 1px solid black;border-right:1px solid black;} #TBL-3{border-collapse:collapse;} #TBL-3 colgroup{border-left: 1px solid black;border-right:1px solid black;} #TBL-3{border-collapse:collapse;} #TBL-3 colgroup{border-left: 1px solid black;border-right:1px solid black;} #TBL-3{border-collapse:collapse;} #TBL-3 colgroup{border-left: 1px solid black;border-right:1px solid black;} #TBL-3{border-collapse:collapse;} #TBL-3 colgroup{border-left: 1px solid black;border-right:1px solid black;} #TBL-3{border-collapse:collapse;} #TBL-4 colgroup{border-left: 1px solid black;border-right:1px solid black;} #TBL-4{border-collapse:collapse;} #TBL-4 colgroup{border-left: 1px solid black;border-right:1px solid black;} #TBL-4{border-collapse:collapse;} #TBL-4 colgroup{border-left: 1px solid black;border-right:1px solid black;} #TBL-4{border-collapse:collapse;} #TBL-4 colgroup{border-left: 1px solid black;border-right:1px solid black;} #TBL-4{border-collapse:collapse;} #TBL-4 colgroup{border-left: 1px solid black;border-right:1px solid black;} #TBL-4{border-collapse:collapse;} #TBL-4 colgroup{border-left: 1px solid black;border-right:1px solid black;} #TBL-4{border-collapse:collapse;} #TBL-5 colgroup{border-left: 1px solid black;border-right:1px solid black;} #TBL-5{border-collapse:collapse;} #TBL-5 colgroup{border-left: 1px solid black;border-right:1px solid black;} #TBL-5{border-collapse:collapse;} #TBL-5 colgroup{border-left: 1px solid black;border-right:1px solid black;} #TBL-5{border-collapse:collapse;} #TBL-5 colgroup{border-left: 1px solid black;border-right:1px solid black;} #TBL-5{border-collapse:collapse;} #TBL-5 colgroup{border-left: 1px solid black;border-right:1px solid black;} #TBL-5{border-collapse:collapse;} #TBL-6 colgroup{border-left: 1px solid black;border-right:1px solid black;} #TBL-6{border-collapse:collapse;} #TBL-6 colgroup{border-left: 1px solid black;border-right:1px solid black;} #TBL-6{border-collapse:collapse;} #TBL-6 colgroup{border-left: 1px solid black;border-right:1px solid black;} #TBL-6{border-collapse:collapse;} #TBL-6 colgroup{border-left: 1px solid black;border-right:1px solid black;} #TBL-6{border-collapse:collapse;} #TBL-6 colgroup{border-left: 1px solid black;border-right:1px solid black;} #TBL-6{border-collapse:collapse;} #TBL-6 colgroup{border-left: 1px solid black;border-right:1px solid black;} #TBL-6{border-collapse:collapse;} #TBL-7 colgroup{border-left: 1px solid black;border-right:1px solid black;} #TBL-7{border-collapse:collapse;} #TBL-7 colgroup{border-left: 1px solid black;border-right:1px solid black;} #TBL-7{border-collapse:collapse;} #TBL-7 colgroup{border-left: 1px solid black;border-right:1px solid black;} #TBL-7{border-collapse:collapse;} #TBL-7 colgroup{border-left: 1px solid black;border-right:1px solid black;} #TBL-7{border-collapse:collapse;} #TBL-7 colgroup{border-left: 1px solid black;border-right:1px solid black;} #TBL-7{border-collapse:collapse;} /* end css.sty */ nip2-8.7.0/doc/html/nipguidese6.html0000644000175000017500000001127513341773367014164 00000000000000 Balancing the mosaic

3.3 Balancing the mosaic

Like assembly, mosaic balancing is normally automatic and painless. You may sometimes have problems if the image is very large, or needs dramatic corrections:

  • Each VIPS image file has an associated history, recording the operations on that image since it was loaded from a file. You can view an image’s history by clicking on View / Image header in an image view window.

    The automatic balancer uses the history to work out how you built your mosaic. The balancer knows about left-right and top-bottom joins, but nothing else! If the history has other stuff recorded in there, you’ll see unhelpful error messages like unable to open tmp/xxx.v, or more than one root.

    If you need to perform corrections to any of your sub-images, do them, save the image, load it again, and then build the mosaic. This will make sure the history of the image you are trying to balance only contains mosaic operations.

  • On some systems the balancer can run out of memory or out of file descriptors on very large mosaics. If your mosaic is made up of more than a few hundred images, and you are having balancing problems you may have hit one of these limits.

    The solution (as with mosaic assembly) is to assemble and balance your mosaic in smaller pieces.

  • If your grey-card correction is not accurate, you will find that the balancer will magnify any problems you have.

    Suppose your lighting and camera set-up always produces images which are brighter on the right than the left, and suppose, due to some problem with your grey-card correction, this effect is not completely removed. You will find that when you balance a mosaic, the small differences between left and right edges of your sub-images will have been smoothed out, but they will have caused a large difference in brightness between the extreme left edge of your final image and the extreme right.

    nip2 includes several functions which can help to fix this problem, the most commonly used being: Tasks / Mosaic / Tilt Brightness / Left to Right and Tasks / Mosaic / Tilt Brightness / Top to Bottom.

nip2-8.7.0/doc/html/nipguidese20.html0000644000175000017500000000560713341773367014242 00000000000000 Object

5.7 Object

This groups a few items which had no obvious home and which change the format of objects.

Duplicate
Copy an object, stripping off any derived classes. For images, this really takes a copy of the underlying object (using im_copy()).
List to Group
Changes lists (see Math / List) into Groups (see Edit / Group) and back. A list os an ordered collection of objects. A group is a list that nip2 will automatically iterate over.
Break Up Object
This tries to take an object apart. So a multi-band image becomes a list of 1-band images. A matrix becomes a list of vectors, and so on. Assemble Object is the inverse.

nip2-8.7.0/doc/html/nipguideli1.html0000644000175000017500000002756413341773367014164 00000000000000 Contents

Contents

1 Getting started
2 Tutorial
 2.1 Quick interface tour
 2.2 nip2 for reflectogram mosaics
 2.3 nip2 for nerds
3 Assembling infrared mosaics
 3.1 Infrared imaging
  3.1.1 Setting up your system
  3.1.2 Capturing the data
  3.1.3 Correcting illumination
  3.1.4 Correcting with the command-line tool
  3.1.5 Correcting within nip2
 3.2 Assembling the mosaic
 3.3 Balancing the mosaic
 3.4 Other nip2 features useful for reflectograms
 3.5 Printing
4 Reference
 4.1 Image view window
 4.2 File select dialogs
 4.3 Image processing window
  4.3.1 Columns
  4.3.2 Rows
  4.3.3 Applying operations to objects
  4.3.4 Batch processing
  4.3.5 Error handling
  4.3.6 Making menu items out of columns
 4.4 The programming window
 4.5 Command-line interface
  4.5.1 Using expression mode
  4.5.2 Using script mode
  4.5.3 Using –set
  4.5.4 Other modes
5 Image processing menus
 5.1 Colour
 5.2 Filter
 5.3 Histogram
 5.4 Image
 5.5 Math
 5.6 Matrix
 5.7 Object
 5.8 Tasks
  5.8.1 Capture
  5.8.2 Mosaic
  5.8.3 Picture Frame
  5.8.4 Print
6 Programming
 6.1 Load and save
 6.2 Using an external editor
 6.3 Syntax
 6.4 Naming conventions
 6.5 Evaluation
 6.6 Operators
  6.6.1 The real type
  6.6.2 The complex type
  6.6.3 The character type
  6.6.4 The boolean type
  6.6.5 The list type
  6.6.6 The function type
  6.6.7 The image type
 6.7 Lists and recursion
 6.8 Lazy programming
 6.9 Pattern matching
 6.10 The standard libraries
 6.11 Classes
  6.11.1 Parameterised classes
  6.11.2 Inheritance
  6.11.3 Minor class features
 6.12 Controlling the interface
  6.12.1 Tools and toolkits
  6.12.2 Workspaces
  6.12.3 The Image class
  6.12.4 The Colour class
 6.13 The _Object class
 6.14 Optimisation
 6.15 Calling VIPS functions
A Configuration
  A.0.1 Calculation
  A.0.2 Image display
  A.0.3 Other options

nip2-8.7.0/doc/html/nipguideap1.html0000644000175000017500000002454213341773367014151 00000000000000 A Configuration

Appendix A
Configuration

Click on the Edit / Preferences to see all the preference options. There are a lot of things you can change (probably too many). This section will list the most important.

  A.0.1 Calculation
  A.0.2 Image display
  A.0.3 Other options

A.0.1 Calculation

This column has the options which control how nip2 starts and how and when it calculates.

Data path

This is a list of directories where nip2 searches for data files. These are any files that nip2 can use but which aren’t loaded at startup. I usually append the main areas on my machine where I store image files, for example.

The default value is [”$HOME/.$PACKAGE-$VERSION/data”, ”$VIPSHOME/share/nip/data”, ”.”].

Temporary files

This is where any intermediate files will be stored. It defaults to a directory called tmp under your home area’s .nip2-xx directory. If nip crashes, it may leave old files here.

Start path

This lists directories which are searched when nip2 starts for any loadable files. Anything that nip2 comes across will be loaded up.

The default value is [”$HOME/.$PACKAGE-$VERSION/start”, ”$VIPSHOME/share/nip/start”].

Auto-recalc

With this on (the default) nip2 will recalculate whenever anything changes. Turn this off if recalculations are taking a long time and you want to make a series of small changes.

Update sliders during drag

This sets whether recalculation happens as sliders are dragged, or whether the recalculation waits until the drag finishes. There’s a similar setting for regions.

Auto workspace save

With this tured on (the default) nip2 will save the current workspace to the temporary files area a second after the last recalculation. If nip2 crashes, you can restart it and click File / Search for Workspace Backups and nip2 will reload the last workspace where you made a change.

Auto-reload on file change

With this turned on nip2 will automatically reload any image files that change while it has them open. Handy if you’re using nip2 to watch a file that another program is updating.

Maximum text display

This sets the number of characters nip2 shows for string values. Turn it up if you want to see inside long strings.

Maximum heap

This sets the limit on the heap size. Turn it up if you start getting Heap full error messages. If you left-click on the space free label in the bottom right of the main window, it will change to display the current heap statistics. There’s a useful tooltip as well.

Number of CPUs to use

If you have a machine with more than one CPU, you can make nip2 faster by upping this number.

A.0.2 Image display

This set of options control the default image display window settings. Useful if you’re always having to turn the status bar on (for example). The maximum size option is handy if you’re using nip2 on a machine with a small display.

The Auto popup option makes nip2 pop up an image display window automatically whenever you make a new image object.

A.0.3 Other options

Other areas of preferences are less useful.

Display LEDs

If you’re using a theme which uses bitmaps for widgets, you won’t be able to see the button colour changes nip2 usually uses to indicate state. This option adds three small LEDs to each row which indicate select, busy and error.

Default image format

By default nip2 file browsers show only VIPS images. If you find you mostly use (for example) JPEG images, you’ll save yourself a few clicks on every file operation by switching this option to JPEG format.

Image format options

You can set the save options for the various image formats.

Video for linux

If you running Linux and have a capture card that supports the V4L interface, you can capture straight from the card into nip2. Set the capture options here.

Paintbox

The paintbox normally tracks all undo operations. This can chew up a lot of memory, especially for flood fills. Reduce the number of undo steps to free up some RAM.

nip2-8.7.0/doc/html/nipguidese7.html0000644000175000017500000000607113341773367014163 00000000000000 Other nip2 features useful for reflectograms

3.4 Other nip2 features useful for reflectograms

You can use nip2’s general image processing facilities to play around with reflectogram mosaics. You can make false-colour images of your reflectograms, blend them with visible images or X-rays, search them for edges, and so on see the registering and overlays_and_blending examples for ideas.

There are also some first order mosaic functions: Tasks / Mosaic / Two Points / Left to Right and Tasks / Mosaic / Two Points / Top to Bottom. These functions automatically rotate and scale the right-hand image in a join. They are useful for assembling X-ray mosaics, and for fixing very difficult joins in reflectogram images. These functions work the same way as the One Point functions except that you will need to define two tie-points on each image.

You can mosaic images of any numeric type: 16-bit integer images are handy for mosaicing X-ray images, for example.

nip2-8.7.0/doc/html/nipguidech6.html0000644000175000017500000001423313341773367014144 00000000000000 6 Programming

Chapter 6
Programming

nip2 includes a tiny lazy functional programming language. You can use it to glue VIPS image processing functions together to perform more complicated tasks. All of the nip2 toolkit menus are written in this language.

These first sections just describe the programming language. See §4.4 for a description of the programming window. You use nip2’s programming language to control the user interface: the link between what happens inside a nip2 function and what you see on the screen in covered in §6.12.

nip2-8.7.0/doc/html/nipguidese16.html0000644000175000017500000001164513341773367014246 00000000000000 Histogram

5.3 Histogram

This menu groups operations for finding and transforming image histograms. nip2 represents histograms and lookup tables as images with Type set to Histogram. Histograms may have pixels in any format and any number of bands. You can only find histograms of unsigned 8- and 16-bit images.

New
This makes a new ramp histogram. A set of sliders let you adjust the shape. Use Map Histogram to apply your ramp to an image.

Build LUT from Scatter makes a histogram from a matrix of (x,y) values.

Tag Image as Histogram marks an image as actually being a histogram after all.

Tone Curve builds a tone curve which you can later apply to an image.

Find
A one dimensional histogram treats each band as an independent variable. An n-dimensional histogram treats each pixel as a vector of n elements, where n is the number of bands in the image.
Map
Looks up each pixel in the input in the histogram and sends the found value to the output.
Equalise
Find the global or locally histogram equalised image.
Cumulative
Use this and friends to calculate a cumulative histogram (integrate), normalise a histogram and match two histograms.
Find Profile
Searches from the edges of an image for the first non-zero pixel and returns a profile histogram.
Find Projections
Sum columns and rows in an image.
Plot Slice
Mark a guide on an image (drag from the image rulers, or click File / New / Guide) and click Plot Slice to make a histogram which is a horizontal or vertical slice through an image. Use Extract Arrow to extract the area around an arrow or guide. Use Plot Object to make a plot of any object.

nip2-8.7.0/doc/html/nipguideli2.html0000644000175000017500000001276713341773367014164 00000000000000 List of Figures

List of Figures

nip2-8.7.0/doc/html/nipguidese34.html0000644000175000017500000000322713341773367014243 00000000000000 The _Object class

6.13 The _Object class

nip2-8.7.0/doc/html/nipguidese10.html0000644000175000017500000001203213341773367014227 00000000000000 File select dialogs

4.2 File select dialogs

On most platforms you can drag files from your file manager directly to nip2’s main window. Alternatively, if you select File / Open in the main window, nip2 will pop up a file dialog, see Figure 4.4. The open dialog has the following extra features:


PIC


Figure 4.4: Open dialog


Pin up button
Normally the file dialog closes after you have opened something. If this item is checked, the dialog will stay up instead — this is useful if you want to load or save a series of objects.
Image type select
Use this menu to select the type of file you want nip2 to display. There’s a preference option to set the default image format. The VIPS file format is fast and accurate, but sadly not very widely supported (joke). You can also load and save images in TIFF, JPEG, PNG, HDR, CSV and PBM/PGM/PPM formats. You can usually load in many more formats, it depends how your nip2 has been configured.
Image info
This displays a one-line summary of the selected image, plus a large thumbnail.

The save dialog adds one extra feature: Increment filename.

If pin up and increment are both selected, then after a save nip2 will attempt to add one to the selected file name. For example, if you save a file called fred001.v, after the save nip2 will put the name fred002.v into the selected file name box. Again, this is useful if you want to save a series of images.

nip2-8.7.0/doc/html/nipguidese5.html0000644000175000017500000001210413341773367014153 00000000000000 Assembling the mosaic

3.2 Assembling the mosaic

The tutorial has a section on mosaic assembly with nip2: see §2.2.

Mosaic assembly is normally painless. There are a few factors you should bear in mind when you are deciding how to assemble an image (particularly a large image):

  • You can open up a mosaic join and change a few options, such as the blend width. If you want to change the defaults for a whole workspace, change the Mosaic defaults options in your Preferences.
  • If two images just won’t join correctly, try using Tasks / Mosaic / One Point / Manual Left to Right instead. These functions operate in the same way as the usual mosaic functions, but do not do a search. This is useful when the overlap is too small for the search to work correctly, or when the overlap area is very smooth and contains too few features for the search to find the exact overlap for you.
  • nip2 does not do sub-pixel interpolation. As a result, each join will on average cause a positioning error of about 0.5 pixels, even if your input images contain no geometric distortion. If there are distortions in your input images (there usually are distortions in infrared images), then errors can be as much as 1–2 pixels per join. These errors accumulate as the number of images you join becomes larger.

    If you join a strip of 10 images together with Tasks / Mosaic / One Point / Left to Right, on average you can expect a total error of about 5 pixels. If you join two strips like this together top-bottom, you can therefore expect a mismatch of about 2.5 pixels at each end of the join.

    You can minimise the effect of these errors if you assemble your images differently. Suppose you have a 10 by 10 mosaic to build. Instead of making and joining 10 strips of 10 images each, make four 5 by 5 sub-mosaics (one for each quadrant) and then join these four quadrants together. The errors will now be more evenly spread over the image and therefore will be less visible.

  • Some operating systems limit the number of files a program can have open at once: this in turn limits the size of the mosaics you can assemble in one go. If you are having problems putting together very large mosaics, try building your image in sections (top, middle and bottom, perhaps), and later load up and join these larger pieces.

nip2-8.7.0/doc/html/nipguidech5.html0000644000175000017500000001003413341773367014136 00000000000000 5 Image processing menus

Chapter 5
Image processing menus

This chapter is runs quickly through the Toolkits menu. See Chapter 6 if you want to understand how the menus are written (or want to add more of your own). Use the Toolkit Browser to find stuff.

Some things are common to almost all menu items:

Tooltips
If you rest your mouse pointer over an item, you’ll see a quick description of what the item does.
Grouping
You can select several objects, click Edit / Group, and then when you click the item, it will operate on all the objects in the group.
Any type
Almost all items will work on any object. You can add an image and a number, for example, find the colour difference between a number and an image, or transform a matrix from LAB to XYZ.
 5.1 Colour
 5.2 Filter
 5.3 Histogram
 5.4 Image
 5.5 Math
 5.6 Matrix
 5.7 Object
 5.8 Tasks
  5.8.1 Capture
  5.8.2 Mosaic
  5.8.3 Picture Frame
  5.8.4 Print

nip2-8.7.0/doc/html/nipguidese30.html0000644000175000017500000001265713341773367014246 00000000000000 Pattern matching

6.9 Pattern matching

Any time you define a name, you can use a pattern instead. For example:

[fred, petra] = [12, 13]

defines fred to have the value 12 and petra to have the value 13.

A pattern describes the structure you are expecting for the value. When the value is computed it is matched against the pattern and, if the match is successful, the names in the pattern are bound to those parts of the value. Our example is exactly equivalent to:

temp = [12, 13];  
fred  
  = temp?0, is_list temp &&  
      is_list_len 2 temp  
  = error "pattern match failed";  
petra  
  = temp?1, is_list temp &&  
    is_list_len 2 temp  
  = error "pattern match failed";

where temp is an invisible, anonymous symbol.

You can pattern match on any of nip2’s data structures and types. You can use:

a:b
Tests for the value being a non-empty list and then assigns a to the head and b to the tail.
(a,b)
Tests for the value being a complex and then assigns a to the real part and b to the imaginary.
[a,b,c]
Tests for the value being a list of length three and then assigns a, b and c to the three elements.
(class - name b)
Tests for the value being an instance of the named class, then assigns b to that class instance.
constant
Tests for the value being equal to that constant. Constants are things like ”hello world” or 12.

You can nest patterns in any way you like. Patterns are useful in conjunction with list comprehensions, see §6.6.5.

You can’t use patterns in function arguments in the current version, hopefully this will added shortly.

nip2-8.7.0/doc/html/nipguidese1.html0000644000175000017500000006753313341773367014167 00000000000000 Quick interface tour

2.1 Quick interface tour

Start up nip2. You should see something like Figure 1.1 (the exact look might be different on your system).

The menus at the top of the window are very ordinary, except for the Toolkits menu which contains all of the image processing operations. The main part of the window shows a workspace. Workspaces are split into tabs (across the top) and each tab is made of a set of columns. The current column, where new objects appear, has a dark green bar across the top.

Click on File / Open to get a file dialog and load up an image. nip2 can load most image formats, try it and see. Check the Pin up box to have the dialog remain after you press OK. You can also drag files from the desktop or from your file manager.

After you’ve loaded an image, nip2 should look like Figure 2.1. Double click on the thumbnail to open an image view window. Alternatively, select Edit from the right-button menu on the thumbnail. See Figure 2.2.


PIC


Figure 2.1: After loading an image



PIC


Figure 2.2: Image view window


As well as the standard keymappings, nip2 has extra shortcuts for navigating images, see Table 2.1. Use the View / Toolbar menu to turn on other features. You can have a status bar (shows image properties, mouse position and pixel value), a display control bar (lets you change scale and offset for display pixels, click on the arrow on the left for a useful extra menu), a paint bar and some rulers.




Keys in image display widget Action


i, + Zoom in on mouse pointer
o, - Zoom out
Cursor up/down/left/right Scroll a small amount in direction
Shift and cursor up/down/left/rightScroll a screenful in direction
Ctrl and cursor up/down/left/right Scroll to edge of image
Middle mouse drag Pan image
Mouse wheel Scroll up/down
Shift and mouse wheel Scroll left/right
Ctrl and mouse wheel Zoom in/out
0 (zero key) Zoom out to fit image to window
1, 2, 4, 8 Set magnification to 1, 2, 4 or 8
Ctrl and 2, 4, 8 Set zoom out factor to 2, 4 or 8



Table 2.1: nip2 shortcuts for the image view window


You can mark things on an image. Hold down Ctrl and drag down and right with the left mouse button to mark a region. Ctrl-left-click to mark a point. Drag up and left to mark an arrow (two points connected by a line). Drag from the rulers to mark guides. Right-click on a label to get a menu which you can use to remove or edit one of these things. Left drag on a label to move the things around, left-drag on the edges or corners to resize. Figure 2.3 shows the same image with stuff marked on it.


PIC


Figure 2.3: Image view window with marked regions


Clean up any messing about and leave two regions on your image. The main window should now look something like Figure 2.4.


PIC


Figure 2.4: Main window, two regions marked


There are three rows visible here, A1, A4 and A7. Each row has (from left to right) a pair of up/down arrows (these indicate that the row contains sub-rows: click on the down arrow several times to open the row up and see inside), the name button (left-click to select, Shift-left-click to extend-select, Ctrl-left-click to toggle select, click on the workspace background to unselect everything, left-drag on the name button to reorder items within the column, right-click to get a context menu) and the thumbnail image.

Left-click on the name button of one of these images to select it, and then click on Toolkits / Image / Transform / Rotate / Free (alternatively, if nothing is selected when you click on one of the toolkit menus, nip2 will apply the operation to the bottom object in the current column). A new row will appear representing the rotation operation. Drag the slider to rotate the image (or type an angle in degrees into the box to the left of the slider and press Return). Pick an interpolation type from the option menu and zoom in on some pixels to check the result. See Figure 2.5.


PIC


Figure 2.5: Using Rotate / Free


The same thing works for image processing operations that take two arguments. Left-click on one of your original regions, Ctrl-left-click on the rotated image (the box at the left of the main window status bar says what’s selected and in what order), and click on Toolkits / Image / Join / Left to Right. A new row appears representing the join operation.

Click on Background Colour, type in 128 and press Return. Drag the shim slider to 50 (or type 50 into the box just to the left of the slider and press Return). See Figure 2.6.


PIC


Figure 2.6: Using Join / Left to Right


The Toolkits menu is large and can be slow and annoying to find things in, so nip2 has several shortcuts. First, you can tear-off menus by clicking on the dotted line at the top. If you’re going to be using one of the sub-menus repeatedly this can save a lot of clicking. Next, you can set keyboard shortcuts for menu items by moving the mouse pointer over the item and pressing the key combination you want to set.

Some systems won’t let you edit menu shortcuts by default. For example, on GNOME, you need to enable this in System / Preferences / Menus & Toolbars.

Finally, there is a toolkit browser: this shows the same set of items, but in an easier-to-browse way. Click on View / Toolkit Browser and the browse side-panel will appear, see Figure 2.7. It shows all of the items as a single long list. Type into the search box at the top to only show items which match. Double-click (or press Return) on an item to activate it. Scroll to the right to see what arguments the item needs and what menu it appears in.


PIC


Figure 2.7: The toolkit browser


The box at the bottom of each column is for entering new expressions. You can type stuff here, and nip2 will make a new row for each item you enter. Try typing 2 + 2 and pressing Return. The syntax is (almost, with a few small differences) the same as the C programming language. See §6.6 for a list of the differences. Try multiplying the joined images by a small amount (eg. type something like A9 * 1.2 and press Return). Normally nip2 will pick names for new objects for you (like A1), but you can set a name yourself if you like. Try entering fred = 12.

Click the down button once on your brightened image and left-click on the area just below the thumbnail. You should see the stuff you typed to make that row. You can edit it to be anything else, press Return and nip2 will recalculate. Try going back to your original image (the one you loaded from a file), open an image view window, and try dragging one of the regions. You can change any of the sliders in the rotate or the join rows as well.

Right-click on a thumbnail for a useful menu. Use Save As to save an image to a file. Use Replace From File to change the image in a row (and recalculate the rest of your workspace, very handy). Use Header to view an image’s metadata.

You can also edit the insides of objects. Click the down button next to one of your regions until the width and height rows appear, click on width and type height * 2. Now open the image window the region is defined on and try to resize it: you’ll find that the width of the region is fixed, but that if you change the height, the width changes with it. This is a very general property of classes in nip2: you can use it to join objects together in complex ways, and to modify the behaviour of interactive objects.

Right click on a column title bar to get a useful menu. Click on File / New / Column make another column (handy for organising a workspace). If you drag from an image thumbnail on to the workspace background, nip2 will make a new column for you. You can drop thumbnails on to other thumbnails to make links.

There’s a useful right-click menu on the tab name. Duplicating tabs is a very easy way to try something out: make a copy of your tab, try changing something, if it doesn’t work out, just delete your new tab and go back to where you were. You can drag tabs between workspaces, and you can drag a tab to the desktop to make a new workspace. You can make references between tabs with thetab name and a dot, for example tab1.A1. You can save columns, tabs or workspaces to workspace files, then merge them back into a colum, as part of a tab, or as a new tab.

If nip2 falls over (I do hope it doesn’t), you can usually get your work back by restarting nip2 and clicking on File / Search for Workspace Backups. There are a lot of preferences (perhaps too many), see Appendix A.

There is a lot of stuff in the Toolkits menus, but they do almost all have tooltips. If you let your mouse hover over a menu item for a moment you should get some helpful text. The toolkit menu is organised by object type. If you want to do something to a matrix, look in the Toolkits / Matrix menu. The exception is Toolkits / Tasks which repeats many of the regular toolkit items, but groups them by typical tasks instead.

Operations can work on groups as well as on single images, so you can batch things up. If you save a group of images, nip2 will number each image sequentially for you. You can use Edit / Duplicate to make copies of objects. If you select lots of objects and duplicate them, nip2 will (fairly intelligently) rename everything for you so it all still works.

nip2-8.7.0/doc/html/nipguidese4.html0000644000175000017500000005415413341773367014165 00000000000000 Infrared imaging

3.1 Infrared imaging

Most museums use tube cameras (usually called Vidicons) for infrared imaging. Although they are relatively cheap they are not very stable and they suffer from (sometimes quite severe) geometric distortions. More modern solid-state cameras are still expensive but are becoming more widely used because of their greater stability. This guide assumes you are using a tube camera but almost all of it applies to solid-state cameras as well.

Whatever your camera there are three main sources of error which have to be addressed in order to be able to make successful mosaics:

  1. Tube cameras suffer very badly from distortions in the image, usually either ‘pin-cushioning’ or ‘barrelling’. These distortions result in alignment errors when sub-images are joined together.
  2. The sensitivity of the tube varies across its surface, causing some parts of each sub-image to be brighter than others. This is made worse by unavoidable variations in illumination. When a lot of such images are joined together the result is a ‘brick wall’ effect.
  3. The sensitivity of the tube also varies between sub-images, partly as the overall lightness in the field of view changes, and also because the electronics in the camera change as the camera heats up. This leads to a patchy, unbalanced mosaic.

The first two problems will be different in each Vidicon and will change each time a tube is replaced. All three problems need to be addressed to create successful infrared reflectogram mosaics.

3.1.1 Setting up your system

Mechanical set-up

It is vital that the optical axis of the Vidicon is at right-angles to the picture plane and that, whether it is the Vidicon or the painting that moves during image capture, it remains perpendicular. Obviously, with a seriously warped panel, this may not be possible. The lighting should be carefully adjusted so that the area of interest is lit as evenly as possible. If you can, arrange for the lights to remain stationary with respect to the camera.

An easy way to test camera alignment is to image a piece of graph paper, move the camera (either left-right or up-down) by 90% of the field of view, and see how features in the overlap area move. First rotate the centre around the optical axis to get the centre line of the images lined up. Next check the corners and adjust camera pitch and yaw.

Video set-up

On Linux, you can capture video directly into nip2 provided that your capture card is compatible with v4l. You may need to adjust the nip2 video settings. These settings can be found under the headings Video for linux and General video capture in the Preferences window, which can be accessed by selecting Edit / Preferences from the main nip2 window. The default settings, see Figure 3.1, are for the Hauppauge PCI capture card and should be changed as required.


PIC


Figure 3.1: Recommended video preference settings


Once you have set up your card, select Tasks / Capture / Capture Video Frame to create a new video object, which will appear as a still image in your current selected column. The captured image can be updated by opening the image in a viewing window and then pressing Ctrl-C (a shortcut for File / Recalculate Image).

You can create more than one video object: this can help you to get the overlaps right if you have two open at once (one showing the previous grab) when you are moving the camera around.

Setting the crop and aspect

While it is possible to correct geometric distortions after the image is captured, it is difficult to do the necessary modelling accurately and reliably. Instead, we suggest the grabbed images should simply be cropped, since the most severe distortion affects the perimeter of each video image.

To determine the area to crop, set up the Vidicon as it would be set to image a painting and capture an image of a rectangular grid — a piece of graph paper works well as a target. Before capturing the grid, check the current video crop settings in the Preferences window and ensure that the crop is set at maximum: left 0, top 0, width 768, height 576 (these are the dimensions for a PAL signal, they may be different on your system). Also set the Aspect ratio line to 1.

Create a new video object and look for the largest rectangle with little distortion (no more than a few pixels). If you create a region on the video image (by holding down the Ctrl key and dragging down and right with the left mouse button, see §??) you can compare the straight edges of the region against the distorted lines of the grid. You can then expand and contract the region until you decide on the optimum area. The settings you need for the crop box can be taken from the values contained within the region object, which can be viewed by left-clicking several times on the down arrow to the left of the region object name.

Finally, you can set an aspect ratio: nip2 will automatically stretch video frames vertically by this factor. You can measure the aspect ratio of your capture card by taking a picture of something you know to be square and dividing the width in pixels by the height in pixels.

Move back to the Preferences window and enter the crop values in the General video capture section. Next time you create a new video object, you should find that it is cropped to the appropriate area. The settings you enter in the Preferences / window will be saved and automatically loaded again next time you start nip2. See appendix A.

Choosing the usable area of the image is a matter of compromise — the smaller the area, the more images are required to build a mosaic of a particular painting. If the area chosen is too large then the amount of distortion can cause serious errors in the final mosaic.

It’s possible to use the VIPS rubber sheet plug in to detect and correct geometric distortion in your images automatically. This lets you use the full area of the sensor. It is a bit fiddly, but see the rubber sheet documentation if you are determined.

3.1.2 Capturing the data

Setting the gain and offset

Once everything is correctly set up, position the painting in front of the camera and experiment with the gain and offset settings on the Vidicon to achieve the optimum infrared image on the computer screen. Note that the appearance of the image on the computer will normally be different to its appearance on the video monitor connected directly to the camera.

Repeat this process at different points across the whole area to be captured. Although it is not always possible, the aim is to find a setting that does not need altering much during the capture of the data. This seems to lead to more successful mosaics.

Grey card correction

To counteract the problem of uneven sensitivity across the target area of the tube, it is necessary to capture an image of a piece of grey card. This grey card image is then used to correct all subsequent images. The card should be a flat, even grey, of around 50% reflectance. The Vidicon and lighting positions with respect to the painting should not be changed between the imaging of the grey card and the capturing of the mosaic. A grey card can be captured at any time, but it is good practice to start with one — you may forget later.

If your mosaic will take several hours to capture, you may wish to grab extra grey cards, since the sensitivity of the tube can change as it warms up. Be sure to note which data images correspond to which grey cards!

In association with the first grey card, it is a good idea to grab an image of your grid to record the scale at which the data images are being made.

Image capture

Open a video window, Tasks / Capture / Capture Video Frame, and when it shows the desired area, save the file. The choice of file name is a question of personal preference. We find it helpful to use a format that indicates where in the mosaic the data comes from — for example, dat3.5.v for the fifth image in row three.

It is helpful to be able to see the previous image to ensure that there is sufficient overlap. To achieve this, a second video window can be opened and placed alongside and the images grabbed into alternate windows.

Capture tips
  • Make a new directory for each painting, and keep all of the image files for that painting (including a grey card and a grid) in that directory.
  • VIPS can join up images in any layout, but you will get much less confused when you assemble your images if you stick to a regular grid. This can be difficult — a good compromise is to keep one axis fixed and grab in rows (or columns).
  • You can help to reduce mosaicing errors later if you keep your rows (or columns) as short as possible. So if the painting is in landscape format, grab in columns (or turn the painting on its side and grab in rows); if the painting is portrait, grab in rows (or turn the painting on its side and grab in columns).
  • The semi-automatic mosaic functions (see §3.2) need a minimum overlap between the sub-images they join of around 20 pixels. For safety, you should aim for a larger overlap than this: we recommend an overlap of 60 pixels (around 20mm, usually).
  • If the overlap area is featureless, it is worth identifying a good tie-point and ensuring it is visible in both images, even if this means increasing the overlap for one of the joins.

3.1.3 Correcting illumination

Before the mosaic can be assembled, the data images need to be corrected for non-uniformity of illumination using the grey card image. This function can be performed within nip2 or directly using a predefined VIPS command-line tool.

3.1.4 Correcting with the command-line tool

First, close nip2 and open a command line window, (xterm, mingw, etc). Move to the directory containing your image files with cd. For example, if you have made a directory called raphael inside your home directory, type:

prompt% cd raphael

The program you need to use is called light_correct. You need to give it the name of the grey-card image and the names of all of the image files you want it to correct with that gray card. Suppose you have saved your gray card image as grey.v, and your painting image files are called dat1.1.v and dat1.2.v. You would then enter:

prompt% light_correct grey.v dat1.1.v dat1.2.v

The program will run and print messages explaining its progress. It creates a new set of corrected image files, with the same names as before, but prefixed with ic_. In this example, it would create two new images files called ic_dat1.1.v and ic_dat1.2.v.

If there are a lot of image files to correct this could mean a lot of typing. Fortunately, you can use wildcard characters to abbreviate lists of file names. The example above can be abbreviated to:

prompt% light_correct grey.v dat⋆.v

The dat*.v means ‘any filename which starts dat and ends with .v’.

You can use this technique to correct different parts of your mosaic with different grey cards. If you have a file called grey1.v for the first row in your mosaic, and a file called grey2.v for the second, you could do the correction in two parts:

prompt% light_correct grey1.v dat1.⋆.v \\  
prompt% light_correct grey2.v dat2.⋆.v

3.1.5 Correcting within nip2

The function within nip2 used to preform this correction is Tasks / Capture / Flatfield. A set of images can be corrected at the same time by joining them together in a Group. A group can be produced by selecting all of the required images and then using the Edit / Group command.

Load all of your images into nip2, and group all the image except the grey image. Select your grey image and then your new group and then run the Tasks / Capture / Flatfield function. This will produce you a group of corrected images. Right-click on this new group and select Save As from the menu. In the save window type in a name, for example fred_01.v and then hit the save button. All of the images in your group will then be saved as fred_01.v, fred_02.v, fred_03.v fred_n.v.

If you want to keep row numbers in your file names, (see §3.1.2), you will need to correct your images one row at a time, saving each row as fred01_01.v, fred02_01.v, etc.

nip2-8.7.0/doc/html/nipguidese17.html0000644000175000017500000001665313341773367014253 00000000000000 Image

5.4 Image

This menu groups operations which apply only to images.

New
Makes a new image. Region on Image makes a new region, arrow, guide or mark on an image. It’s usually easier to open a viewer on an image and Ctrl-drag.
Convert to Image
Try to make an image out of anything.
Format
Switch between the various precisions.
Header
Try to change or examine the image header in various ways.
Cache
This caches an image in RAM. Use this to save the results of a long computation.
Levels
Various tools that change the levels in an image. Tone Curve is the only complex one: it lets you adjust the image levels with a set of sliders.
Transform
Various tools that change the geometry of an image.

To use Rotate / Straighten, mark an arrow on an image (Ctrl-drag up and left in an image view window) along a near-horizontal or near-vertical edge. When you click on Rotate / Straighten, nip2 will rotate the image by the smallest amount that makes that edge exactly horizontal or vertical.

Linear Match takes two images and rotates and scales the second so that the images can be superimposed. Drag the tie-=points to mark common features. Use Filter / Overlay or Filter / Colourize to actually superimpose them.

Rubber Sheet is useful for fixing things like lens distortion. You give Find two images, a reference and a distorted version of that reference, and it automatically finds a transform which will map the distorted image back on to the reference image. Use Apply to apply the discovered transform to another image.

Band
Extract/insert/delete image bands. Use To Dimension to change image bands into a horizontal or vertical dimension. Use To Bands to compress the horizontal or vertical dimension into bands (small images only!).
Crop
Crops an image. It’s often easier to drag out a region. This menu item is only really useful for cropping large groups of images.
Insert
This takes two images and pastes the smaller into the centre of the larger. The two images have to have the same number of bands. If you open an image viewer on the large image, you’ll see an area which you can drag around to set the exact insert point.
Select
Draw elipses and polygons on an image. Useful for selecting defined areas.
Join
Use to join two images together bandwise, left/right or up/down. Array joins a list of lists of images together into a single large image.
Tile
Repeat an image horizontally and vertically to make a larger image, or chop an image into a set of tiles.
Patterns
These items all make useful images for you, from checkerboards to gaussian masks. XY Image is the most useful: you can use it to build other patterns.
Test Images
These items make a variety of useful testcharts for evaluating spatial response and colour.

nip2-8.7.0/doc/html/nipguidese27.html0000644000175000017500000012146713341773367014254 00000000000000 Operators

6.6 Operators

nip2’s expression syntax is almost exactly the same as C, with a few small changes. Table 6.2 lists all of nip2’s operators in order of increasing precedence. If you’ve used C, the differences are:

  • C’s ?: operator becomes if-then-else, see above
  • Like almost every functional language, nip2 uses square brackets for list constants (see §6.6.5), so to index a list, nip2 uses ?
  • nip2 adds @ for function composition, see §6.6.6
  • The : operator is infix list cons, see §6.7
  • The ++ operator becomes an infix concatenation operator, becomes list difference. Again, see §6.6.5

The only slightly tricky point is that function application binds very tightly (only list index and class project bind more tightly). So the expression:

jim = fred 2 + 3

binds as:

jim = (fred 2) + 3

This is almost always the behaviour you want.

There are two special equality tests: === and !==. These test for pointer equality, that is, they return true if their arguments refer to the same object. These are occasionally useful for writing interactive functions.





OperatorAssociativityDescription



if then elseRight If-then-else construct
=¿ Left Form name/value pair
|| Left Logical or
&& Left Logical and
@ Function composition (see §6.6.6)
| Left Bitwise or
^  Left Bitwise exclusive or
& Left Bitwise and



== Left Equal to
!= Not equal to
=== Pointer equal to
!== Pointer not equal to



¡ Left Less than
¡= Less than or equal to
¿ Greater than
¿= Greater than or equal to



¡¡ Left Left shift
¿¿ Right shift



+ Left Addition
- Subtraction
* Left Multiplication
Division
% Remainder after division
! Left Logical negation
~ One’s complement
++ Join (see §6.6.5)
-- Difference (see §6.6.5)
- Unary minus
+ Unary plus
(type) Type cast expression
** Right Raise to power
: List CONS (see §6.6.5)
space Left Function application
? Left List index (see §6.6.5)
. Left Class project (see §6.11)




Table 6.2: nip2 operators in order of increasing precedence


6.6.1 The real type

nip2 has a single number type for integers and real numbers. All are represented internally as 64-bit floating point values. You can use the four standard arithmetic operators (+, -, *, /), remainder after integer division (%), raise-to-power (**), the relational operators (¡, ¡=, ¿, ¿=, ==), the bitwise logical operators (&, |, ^  , ~), integer shift operators (¡¡, ¿¿) and unary negation and positive (-, +).

Other mathematical functions are pre-defined for you: sin, cos, tan, asin, acos, atan, log, log10, exp, exp10, ceil, floor. Each has the standard behaviour.

You can use type-casts on reals. However, they remain 64-bit floating point, the range is simply clipped. Casting to unsigned short produces a 64-bit float whose fractional part has been set to zero, and which has been clipped to the range 0 to 65535. This may or may not cause rounding problems.

You can write hexadecimal number constants as 0xff.

6.6.2 The complex type

Complex numbers are rather sketchily implemented. They are generally handy for representing vectors and coordinates rather than for doing arithmetic, so the range of operations is limited.

Complex constants are written as two numbers enclosed in round brackets and separated by a comma. You can use the four standard arithmetic operators (+, -, *, /), raise-to-power (**), and unary negation and positive (-, +). You can use == only of the relational operators. You can mix complex and real numbers in expressions. You can cast reals to complex and back. Use the functions re and im to extract the real and imaginary parts.

(12, 13) + 4 == (16, 13)  
(12, 2 + 2) ==  (12, 4)  
re (12, 13) == 12  
im (12, 13) == 13

6.6.3 The character type

Character constants are written as single characters enclosed in single quotes. You can use the relational operators (¡, ¡=, ¿, ¿=, ==) to sort characters by ASCII order. You can cast a character to a real to get its ASCII value. You can cast a real ASCII value to a character. You can use the standard C escapes to represent non-ASCII characters.

(int) 'A' == 65  
(char) 65 == 'A'  
is_digit x = '0' <= x && x <= '9'  
newline == '\n'

6.6.4 The boolean type

The two boolean constants are written as true and false. Boolean values are generated by the relational operators. You can use the standard logical operators (&&, ||, !). You can use a boolean type as an argument in an if-then-else expression.

As with C, the logical operators do not evaluate their right-hand sides if their value can be determined just from evaluating their left-hand sides.

true && false == false  
true || error "boink!" == true  
if true then 12 else 13 == 12

6.6.5 The list type

Lists are created from two constructors. [] denotes the empty list. The list construction operator (:, pronounced CONS by LISP programmers) takes an item and a list, and returns a new list with the item added to the front. As a convenience, nip2 has a syntax for list constants. A list constant is a list of items, separated by commas, and enclosed in square brackets:

12:[] == [12]  
12:13:14:[] == 12:(13:(14:[])) ==  
  [12,13,14]  
[a+2,3,4] == (a+2):3:4:[]  
[2]:[3,4] == [[2],3,4]

Use the functions hd and tl to take the head and the tail of a list:

hd [12,13,14] == 12  
tl [12,13,14] == [13,14]

Use .. in a list constant to define a list generator. List generators build lists of numbers for you:

[1..10] == [1,2,3,4,5,6,7,8,9,10]  
[1,3..10] == [1,3,5,7,9]  
[10,9..1] == [10,9,8,7,6,5,4,3,2,1]

List generators are useful for expressing iteration.

Lists may be infinite:

[1..] == [1,2,3,4,5,6,7,8,9 ..]  
[5,4..] == [5,4,3,2,1,0,-1,-2,-3 ..]

Infinite lists are useful for expressing unbounded iteration. See §6.8.

You can write list comprehensions like this:

[x :: x <- [1..]; x % 2 == 0]

This could be read as All x such that x is in [1..] and x is even, that is, the list of even numbers.

You can have any number of semicolon-separated qualifiers and each one can be either a generator (like x <- [1..]) introducing a new variable or pattern (see §6.9), or a predicate (like x % 2 == 0) which filters the generators to the left of it.

Later generators change more rapidly, so for example:

[(x, y) ::  
  x <- [1..3]; y <- [x..3]] ==  
    [(1, 1), (1, 2), (1, 3),  
      (2, 2), (2, 3), (3, 3)]

You can nest list comprehensions to generate more complex data structures. For example:

[[x ⋆ y :: x <- [1..10]] ::  
  y <- [1..10]]

will generate a times-table.

You can use pattern-matching (see §6.9) to loop over several generators at the same time. For example:

[(x, y) :: [x, y] <-  
  zip2 [1..3] [1..3]] ==  
    [(1, 1), (2, 2), (3, 3)]

As a convenience, lists of characters may be written enclosed in double quotes:

"abc" == ['a','b','c']

You can define a string constant which has the same form as a variable name (that is, letters, numbers, underscore and apostrophy only) with a $ prefix. For example:

$form7 == "form7"

nip2 often uses these in option lists.

You can define a name, value pair with the =¿ operator.

$fred => 12 == ["fred", 12]

Again, these pairs are frequently used to pass options to objects.

A list may contain any object:

[1,'a',true,[1,2,3]]

Mixing types in a list tends to be confusing and should be avoided. If you want to group a set of diverse objects, define a class instead, see §6.11.

Lists of lists of reals are useful for representing arrays.

You can use the list index operator (?) to extract an element from a position in a list:

[1,2,3] ? 0 == 1  
"abc" ? 1 == 'b'

You can use the list join operator (++) to join two lists together end-to-end.

[1,2,3] ++ [4,5,6] == [1,2,3,4,5,6]

You can use the list difference operator (--) to remove elements of one list from another.

[1..10] -- [4,5,6] == [1,2,3,7,8,9,10]

6.6.6 The function type

Functions are objects just like any other. You can pass functions to other functions as parameters, store functions in lists, and so on.

You can create anonymous functions with \ (lambda). For example:

map (\x x + 2) [1..3] == [3, 4, 5]

You can nest lambdas to make multi-argument anonymous functions, for example:

map2 (\x\y x + y) [1..3] [2..5] ==  
  [3, 5, 7]

You can compose functions with the @ operator. For example, for two functions of one argument f and g:

f (g 2) == (f @ g) 2

6.6.7 The image type

These represent a low-level handle to a VIPS image structure. You can make them with the vips_image builtin, and you can pass them as parameters to VIPS functions. The Image class is built on top of them, see §6.12.3.

As an accident of history, nip2 also lets you do arithmetic with them. This will probably be removed in the next version or two, so it’s best to go through the higher-level Image class.

nip2-8.7.0/doc/html/nipguide.html0000644000175000017500000002672713341773367013556 00000000000000

nip2 Manual
Version 8.6
John Cupitt, Rachel Billinge, Joseph Padfield, Clare Richardson, David Saunders

“It’s quite simple really, and at the same time, rather complicated.”
— A. Haddock, Sea captain (rtd.)

This document formatted August 30, 2018

nip2-8.7.0/doc/html/nipguidese18.html0000644000175000017500000000467413341773367014254 00000000000000 Math

5.5 Math

Basic maths operations on any combination of any objects. You can add a slider to a matrix, for example, then divide by an image. Hopefully most of these are obvious.

Arithmetic / Absolute Value Vector
The absolute value item normally calculates mod of each band of an image separately. By contrast, Absolute Value Vector treats each pixel as a vector and calculates the modulus of that.
List
These aren’t really maths operations, but they’re in here too.

nip2-8.7.0/ylwrap0000755000175000017500000001531213224651044010566 00000000000000#! /bin/sh # ylwrap - wrapper for lex/yacc invocations. scriptversion=2013-01-12.17; # UTC # Copyright (C) 1996-2014 Free Software Foundation, Inc. # # Written by Tom Tromey . # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . get_dirname () { case $1 in */*|*\\*) printf '%s\n' "$1" | sed -e 's|\([\\/]\)[^\\/]*$|\1|';; # Otherwise, we want the empty string (not "."). esac } # guard FILE # ---------- # The CPP macro used to guard inclusion of FILE. guard () { printf '%s\n' "$1" \ | sed \ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' \ -e 's/[^ABCDEFGHIJKLMNOPQRSTUVWXYZ]/_/g' \ -e 's/__*/_/g' } # quote_for_sed [STRING] # ---------------------- # Return STRING (or stdin) quoted to be used as a sed pattern. quote_for_sed () { case $# in 0) cat;; 1) printf '%s\n' "$1";; esac \ | sed -e 's|[][\\.*]|\\&|g' } case "$1" in '') echo "$0: No files given. Try '$0 --help' for more information." 1>&2 exit 1 ;; --basedir) basedir=$2 shift 2 ;; -h|--h*) cat <<\EOF Usage: ylwrap [--help|--version] INPUT [OUTPUT DESIRED]... -- PROGRAM [ARGS]... Wrapper for lex/yacc invocations, renaming files as desired. INPUT is the input file OUTPUT is one file PROG generates DESIRED is the file we actually want instead of OUTPUT PROGRAM is program to run ARGS are passed to PROG Any number of OUTPUT,DESIRED pairs may be used. Report bugs to . EOF exit $? ;; -v|--v*) echo "ylwrap $scriptversion" exit $? ;; esac # The input. input=$1 shift # We'll later need for a correct munging of "#line" directives. input_sub_rx=`get_dirname "$input" | quote_for_sed` case $input in [\\/]* | ?:[\\/]*) # Absolute path; do nothing. ;; *) # Relative path. Make it absolute. input=`pwd`/$input ;; esac input_rx=`get_dirname "$input" | quote_for_sed` # Since DOS filename conventions don't allow two dots, # the DOS version of Bison writes out y_tab.c instead of y.tab.c # and y_tab.h instead of y.tab.h. Test to see if this is the case. y_tab_nodot=false if test -f y_tab.c || test -f y_tab.h; then y_tab_nodot=true fi # The parser itself, the first file, is the destination of the .y.c # rule in the Makefile. parser=$1 # A sed program to s/FROM/TO/g for all the FROM/TO so that, for # instance, we rename #include "y.tab.h" into #include "parse.h" # during the conversion from y.tab.c to parse.c. sed_fix_filenames= # Also rename header guards, as Bison 2.7 for instance uses its header # guard in its implementation file. sed_fix_header_guards= while test $# -ne 0; do if test x"$1" = x"--"; then shift break fi from=$1 # Handle y_tab.c and y_tab.h output by DOS if $y_tab_nodot; then case $from in "y.tab.c") from=y_tab.c;; "y.tab.h") from=y_tab.h;; esac fi shift to=$1 shift sed_fix_filenames="${sed_fix_filenames}s|"`quote_for_sed "$from"`"|$to|g;" sed_fix_header_guards="${sed_fix_header_guards}s|"`guard "$from"`"|"`guard "$to"`"|g;" done # The program to run. prog=$1 shift # Make any relative path in $prog absolute. case $prog in [\\/]* | ?:[\\/]*) ;; *[\\/]*) prog=`pwd`/$prog ;; esac dirname=ylwrap$$ do_exit="cd '`pwd`' && rm -rf $dirname > /dev/null 2>&1;"' (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 mkdir $dirname || exit 1 cd $dirname case $# in 0) "$prog" "$input" ;; *) "$prog" "$@" "$input" ;; esac ret=$? if test $ret -eq 0; then for from in * do to=`printf '%s\n' "$from" | sed "$sed_fix_filenames"` if test -f "$from"; then # If $2 is an absolute path name, then just use that, # otherwise prepend '../'. case $to in [\\/]* | ?:[\\/]*) target=$to;; *) target=../$to;; esac # Do not overwrite unchanged header files to avoid useless # recompilations. Always update the parser itself: it is the # destination of the .y.c rule in the Makefile. Divert the # output of all other files to a temporary file so we can # compare them to existing versions. if test $from != $parser; then realtarget=$target target=tmp-`printf '%s\n' "$target" | sed 's|.*[\\/]||g'` fi # Munge "#line" or "#" directives. Don't let the resulting # debug information point at an absolute srcdir. Use the real # output file name, not yy.lex.c for instance. Adjust the # include guards too. sed -e "/^#/!b" \ -e "s|$input_rx|$input_sub_rx|" \ -e "$sed_fix_filenames" \ -e "$sed_fix_header_guards" \ "$from" >"$target" || ret=$? # Check whether files must be updated. if test "$from" != "$parser"; then if test -f "$realtarget" && cmp -s "$realtarget" "$target"; then echo "$to is unchanged" rm -f "$target" else echo "updating $to" mv -f "$target" "$realtarget" fi fi else # A missing file is only an error for the parser. This is a # blatant hack to let us support using "yacc -d". If -d is not # specified, don't fail when the header file is "missing". if test "$from" = "$parser"; then ret=1 fi fi done fi # Remove the directory. cd .. rm -rf $dirname exit $ret # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: nip2-8.7.0/nip2.desktop.in0000644000175000017500000000043313273071606012174 00000000000000[Desktop Entry] Name=@PACKAGE@ Comment=Image manipulation program based on VIPS Comment[it]=Programma per la manipolazione di immagini basato su VIPS Exec=nip2 %F Icon=nip2 Terminal=false Type=Application Categories=Graphics;RasterGraphics; StartupNotify=true MimeType=image/x-vips; nip2-8.7.0/autogen.sh0000755000175000017500000000244413224651032011322 00000000000000#!/bin/sh # set -x # remove /everything/ ready to remake rm -f Makefile Makefile.in aclocal.m4 config.* configure depcomp rm -rf autom4te.cache rm -f install-sh intltool-* ltmain.sh missing mkinstalldirs rm -f src/*.o src/nip2 src/Makefile src/Makefile.in # glib-gettextize asks us to copy these files to m4 if they aren't there # I don't have $ACDIR/isc-posix.m4, how mysterious ACDIR=`aclocal --print-ac-dir` # OS X with brew sets ACDIR to # /usr/local/Cellar/automake/x.y.z/share/aclocal, the staging area, which is # totally wrong argh if [ ! -d $ACDIR ]; then ACDIR=/usr/local/share/aclocal fi mkdir -p m4 cp $ACDIR/codeset.m4 m4 cp $ACDIR/gettext.m4 m4 cp $ACDIR/glibc21.m4 m4 cp $ACDIR/iconv.m4 m4 cp $ACDIR/lcmessage.m4 m4 cp $ACDIR/progtest.m4 m4 # some systems need libtoolize, some glibtoolize ... how annoying echo -n "testing for glibtoolize ... " if glibtoolize --version >/dev/null 2>&1; then LIBTOOLIZE=glibtoolize echo using glibtoolize else LIBTOOLIZE=libtoolize echo using libtoolize fi aclocal # this produces a lot of benign but misleading output ... hide it and hope for # the best glib-gettextize --force --copy > /dev/null test -r aclocal.m4 && chmod u+w aclocal.m4 autoconf autoheader $LIBTOOLIZE --copy --force --automake automake --add-missing --copy ./configure $* nip2-8.7.0/config.sub0000755000175000017500000010645013350464075011317 00000000000000#! /bin/sh # Configuration validation subroutine script. # Copyright 1992-2018 Free Software Foundation, Inc. timestamp='2018-02-22' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # Please send patches to . # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub # 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 or ALIAS Canonicalize a configuration name. Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright 1992-2018 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo "$1" exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo "$1" | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \ kopensolaris*-gnu* | cloudabi*-eabi* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo "$1" | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; android-linux) os=-linux-android basic_machine=`echo "$1" | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown ;; *) basic_machine=`echo "$1" | sed 's/-[^-]*$//'` if [ "$basic_machine" != "$1" ] then os=`echo "$1" | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray | -microblaze*) os= basic_machine=$1 ;; -bluegene*) os=-cnk ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` ;; -lynx*178) os=-lynxos178 ;; -lynx*5) os=-lynxos5 ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo "$1" | sed -e 's/86-.*/86-sequent/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | aarch64 | aarch64_be \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arceb \ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ | avr | avr32 \ | ba \ | be32 | be64 \ | bfin \ | c4x | c8051 | clipper \ | d10v | d30v | dlx | dsp16xx \ | e2k | epiphany \ | fido | fr30 | frv | ft32 \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia16 | ia64 \ | ip2k | iq2000 \ | k1om \ | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ | mips64r5900 | mips64r5900el \ | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa32r6 | mipsisa32r6el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64r6 | mipsisa64r6el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipsr5900 | mipsr5900el \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nds32 | nds32le | nds32be \ | nios | nios2 | nios2eb | nios2el \ | ns16k | ns32k \ | open8 | or1k | or1knd | or32 \ | pdp10 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pru \ | pyramid \ | riscv32 | riscv64 \ | rl78 | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu \ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ | visium \ | wasm32 \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; c54x) basic_machine=tic54x-unknown ;; c55x) basic_machine=tic55x-unknown ;; c6x) basic_machine=tic6x-unknown ;; leon|leon[3-9]) basic_machine=sparc-$basic_machine ;; m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65) ;; ms1) basic_machine=mt-unknown ;; strongarm | thumb | xscale) basic_machine=arm-unknown ;; xgate) basic_machine=$basic_machine-unknown os=-none ;; xscaleeb) basic_machine=armeb-unknown ;; xscaleel) basic_machine=armel-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`"$1"\': machine \`"$basic_machine"\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | aarch64-* | aarch64_be-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | ba-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | c8051-* | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | e2k-* | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | hexagon-* \ | i*86-* | i860-* | i960-* | ia16-* | ia64-* \ | ip2k-* | iq2000-* \ | k1om-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ | microblaze-* | microblazeel-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64octeon-* | mips64octeonel-* \ | mips64orion-* | mips64orionel-* \ | mips64r5900-* | mips64r5900el-* \ | mips64vr-* | mips64vrel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa32r6-* | mipsisa32r6el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64r6-* | mipsisa64r6el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipsr5900-* | mipsr5900el-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nds32-* | nds32le-* | nds32be-* \ | nios-* | nios2-* | nios2eb-* | nios2el-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ | or1k*-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ | pru-* \ | pyramid-* \ | riscv32-* | riscv64-* \ | rl78-* | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ | tron-* \ | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ | visium-* \ | wasm32-* \ | 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-pc 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 ;; asmjs) basic_machine=asmjs-unknown ;; 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*) basic_machine=m68k-bull os=-sysv3 ;; e500v[12]) basic_machine=powerpc-unknown os=$os"spe" ;; e500v[12]-*) basic_machine=powerpc-`echo "$basic_machine" | sed 's/^[^-]*-//'` os=$os"spe" ;; 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 ;; 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 ;; vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; leon-*|leon[3-9]-*) basic_machine=sparc-`echo "$basic_machine" | sed 's/-.*//'` ;; m68knommu) basic_machine=m68k-unknown os=-linux ;; m68knommu-*) basic_machine=m68k-`echo "$basic_machine" | sed 's/^[^-]*-//'` os=-linux ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; microblaze*) basic_machine=microblaze-xilinx ;; mingw64) basic_machine=x86_64-pc os=-mingw64 ;; mingw32) basic_machine=i686-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo "$basic_machine" | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo "$basic_machine" | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; moxiebox) basic_machine=moxie-unknown os=-moxiebox ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo "$basic_machine" | sed -e 's/ms1-/mt-/'` ;; msys) basic_machine=i686-pc os=-msys ;; mvs) basic_machine=i370-ibm os=-mvs ;; nacl) basic_machine=le32-unknown os=-nacl ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; neo-tandem) basic_machine=neo-tandem ;; nse-tandem) basic_machine=nse-tandem ;; nsr-tandem) basic_machine=nsr-tandem ;; nsv-tandem) basic_machine=nsv-tandem ;; nsx-tandem) basic_machine=nsx-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) 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) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos | rdos64) basic_machine=x86_64-pc os=-rdos ;; rdos32) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh5el) basic_machine=sh5le-unknown ;; 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 ;; x64) basic_machine=x86_64-pc ;; 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 ;; 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 ;; 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 ;; 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 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # es1800 is here to avoid being matched by es* (a different OS) -es1800*) os=-ose ;; # Now accept the basic system types. # The portable systems comes first. # Each alternative MUST end in a * to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* | -plan9* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* | -cloudabi* | -sortix* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -knetbsd* | -mirbsd* | -netbsd* \ | -bitrig* | -openbsd* | -solidbsd* | -libertybsd* \ | -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* | -glidix* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -midipix* | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-musl* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* \ | -onefs* | -tirtos* | -phoenix* | -fuchsia* | -redox* | -bme* \ | -midnightbsd*) # 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 | -xray | -os68k* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* \ | -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 ;; -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 ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; -pikeos*) # Until real need of OS specific support for # particular features comes up, bare metal # configurations are quite functional. case $basic_machine in arm*) os=-eabi ;; *) os=-elf ;; esac ;; -nacl*) ;; -ios) ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`"$1"\': system \`"$os"\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; c8051-*) os=-elf ;; hexagon-*) os=-elf ;; tic54x-*) os=-coff ;; tic55x-*) os=-coff ;; tic6x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; pru-*) os=-elf ;; *-be) os=-beos ;; *-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 ;; *-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-functions 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: nip2-8.7.0/nip2.spec.in0000644000175000017500000001100513330327245011447 00000000000000Name: @PACKAGE@ Version: @VERSION@ Release: 1%{?dist} Summary: Interactive tool for working with large images Group: Applications/Multimedia License: GPLv2+ URL: https://github.com/jcupitt/nip2 Source0: https://github.com/jcupitt/nip2/releases BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) BuildRequires: vips-devel = %{version} BuildRequires: gtk2-devel shared-mime-info gnome-icon-theme BuildRequires: flex bison intltool fftw-devel libxml2-devel gettext BuildRequires: desktop-file-utils #Requires: # description taken from Debian package %description nip2 is a graphical front end to the VIPS package. With nip2, rather than directly editing images, you build relationships between objects in a spreadsheet-like fashion. When you make a change somewhere, nip2 recalculates the objects affected by that change. Since it is demand-driven this update is very fast, even for very, very large images. nip2 is very good at creating pipelines of image manipulation operations. It is not very good for image editing tasks like touching up photographs. For that, a tool like the GIMP should be used instead. %prep %setup -q %build %configure make %{?_smp_mflags} %install rm -rf $RPM_BUILD_ROOT make install DESTDIR=$RPM_BUILD_ROOT # delete doc (we will get it later with %doc) rm -rf $RPM_BUILD_ROOT%{_datadir}/doc/nip2 # malkovich?? rm -rf $RPM_BUILD_ROOT%{_datadir}/locale/malkovich # the nip2 post install hook seems to run update-mime-database, but we # need to run it in post rm -rf $RPM_BUILD_ROOT%{_datadir}/mime mkdir -p $RPM_BUILD_ROOT%{_datadir}/mime/packages cp -a nip2.xml $RPM_BUILD_ROOT%{_datadir}/mime/packages # same with desktop file rm -rf $RPM_BUILD_ROOT%{_datadir}/applications # locale stuff %find_lang nip2 # icon install -d $RPM_BUILD_ROOT%{_datadir}/icons/hicolor/128x128/apps cp -a share/nip2/data/vips-128.png \ $RPM_BUILD_ROOT%{_datadir}/icons/hicolor/128x128/apps/nip2.png # desktop file desktop-file-install --vendor fedora \ --dir $RPM_BUILD_ROOT%{_datadir}/applications \ nip2.desktop %post # scriptlet for icons touch --no-create %{_datadir}/icons/hicolor || : if [ -x %{_bindir}/gtk-update-icon-cache ]; then %{_bindir}/gtk-update-icon-cache --quiet %{_datadir}/icons/hicolor || : fi # scriptlet for desktop database update-desktop-database &> /dev/null || : # MIME update-mime-database %{_datadir}/mime &> /dev/null || : %postun # scriptlet for icons touch --no-create %{_datadir}/icons/hicolor || : if [ -x %{_bindir}/gtk-update-icon-cache ]; then %{_bindir}/gtk-update-icon-cache --quiet %{_datadir}/icons/hicolor || : fi # scriptlet for desktop database update-desktop-database &> /dev/null || : # MIME update-mime-database %{_datadir}/mime &> /dev/null || : %clean rm -rf $RPM_BUILD_ROOT %files -f nip2.lang %defattr(-,root,root,-) %doc doc/html doc/pdf AUTHORS ChangeLog COPYING NEWS THANKS TODO %{_bindir}/nip2 %{_bindir}/run-nip2.sh %{_datadir}/nip2 %{_mandir}/man1/nip2.1.gz %{_datadir}/icons/hicolor/*/apps/* %{_datadir}/applications/* %{_datadir}/mime/packages/nip2.xml %changelog * Sat Jun 10 2008 John Cupitt - 8.7.0 - Update URLs * Sat Jul 19 2008 Jesper Friis - 7.15.0-1 - Added this spec file from the Fedora source rpm * Sat Mar 15 2008 Adam Goode - 7.14.1-1 - New release * Mon Mar 10 2008 Adam Goode - 7.14.0-1 - New release * Sat Feb 9 2008 Adam Goode - 7.12.5-4 - GCC 4.3 mass rebuild * Wed Dec 5 2007 Adam Goode - 7.12.5-3 - Fix desktop file validation * Tue Oct 16 2007 Adam Goode - 7.12.5-2 - Rebuild for OpenEXR soname change * Fri Sep 21 2007 Adam Goode - 7.12.5-1 - New upstream release * Thu Aug 16 2007 Adam Goode - 7.12.4-1 - New upstream release - Update License tag * Wed Jul 25 2007 Adam Goode - 7.12.2-1 - New stable release 7.12 * Sat May 5 2007 Adam Goode - 7.12.0-1 - New upstream release - Update desktop file - Remove X-Fedora category * Thu Aug 31 2006 Adam Goode - 7.10.21-1 - New upstream release * Sun Aug 13 2006 Adam Goode - 7.10.20-2 - Fix location of documentation in program so help works - Semicolon-terminate Category entry in desktop file * Sat Jul 22 2006 Adam Goode - 7.10.20-1 - New upstream release - Updated for FC5 * Thu Jan 30 2003 John Cupitt 7.8.6-1 - first stab at an rpm package for nip nip2-8.7.0/test/0000755000175000017500000000000013350464160010360 500000000000000nip2-8.7.0/test/images/0000755000175000017500000000000013224651032011621 500000000000000nip2-8.7.0/test/images/slanted_oval_vase2.jpg0000644000175000017500000005646313224651032016034 00000000000000ÿØÿà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‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?È'Ö”px¤ëJ PÅ=3GçGQJ:Ò2iFzç4ŠçŠ,O·çJ§Ö“¹Å=0ÆsIžô¼÷þtœž”ñNíõ£9<ô£¿µcŽ´à8ëHzô¥ëÖ€ m8¤`Iâ”gÓ­Ò§“GjZZ`.0h#“Í'_Ζ€°RãŠQA 9 1Å-&~j1F)qHr!¥Î¹Í“øÐ?Ð@ÅsKÜÒõô„Z"“ésÖ€qHxõ¥È¤ÝÆ(xçšEäQ׌Rô ½'ZZC@ ÁÁÍЦ’3@ëKøñIŸj;ñ@ zS@¥Ï¨ýi>´ 1KÁ™¥àÄÆ&9ç¥)jN½¿Z§Jâ—q4ŠÉƒ¥(ä})9Î=(:\Z=èïÐPÆ;¾”½Gµ&OÒŽ´¬ `3IÅë@Ӹà AПJSõíHG8¤7ZLsš8í@¢ÀH ƒKŽOáIŸçLC¿ Nç4R‘Í\Òíü)æ—½Ž9?JSýi0Aæ—Ò€ SE>´€ó@ÎîzRƒÏcœR…ü(AÏÖ—ñ4ò}(ϸ¤#Š àóKÆ):Š_­4uü){;Ñ@ Ï¥…-!$}(3Å'ZpéIs@C‘H =iǵ's@hÍûPZAÅ tæ—ëIŽzÐü'´{ÒŒv ž(½OÖŠ=¨'&€ d`Ri;Òš`7·4Ràɤ3FIŠ] Ò`ŒÒ EZ1L½.H”„`ƒJ9ëHå©p}(èhÏZCH:ûS¸"“o=x .)1‘AQŽ” i9£ÞÖ›@uëK´g9‡­/#ŠG^ihè´†&ßCKF==(Ï8¦4 Ï9Í)E4œÐGJ\gÖ—ÒxïBœKÓŠ\CùPׯJ3ÏOÊ“£Š;ŠSך®)(°1HãŠiô§”‡“šbPhäPh ‰ŽhÇ4ìp !ë@Ä¥ ÑÆ)ÑÖ”ÑJyÀJ"—œQÚ€™Í/Ò“š ŒÐE (ŒzÒJLRc"Š^”ŸJMÙÆ)sÍQš1î):sGó£”ãoQI@…f’ŒsÅ­%"–ŒPtíKÖ”t¤Å ”uúS© H{R‘Ó”ô Cp2hŠSý) b‘ÞƒÖŒfŒP´¾ô”cš%w¥ ¤ëNÀ&ƒŽÔÀoSAÎ)qGj@4Rœâ—Rw¦J1ƒKŠ!£RúÒ´Ä%ôêNœÐQŽip:ÒP¥ÏjLãÐÀÐON(ïÆis‘@àñG=è£?@8¥ãõ£ü)(qÜ B>”½iè4§Ò“ůJ ŒÒã1È õ§8é0)€c$RšpâŒòi @1ÖŠZ:u£Q Œõ£ô¥=¸¢¨ÅïÚ”Òfx£µ8õõ¥ t4­È¥#4‡¦h dQ€ êiqš}é¥ïGjh§¯JíŽ)r)€‡Ú“ìòi?L¥4ƒØõõ§QŽ v¸£€)Å)æŒ c”™Í-&9¡‰zÐzÒž;Òg?JÃbb—ÚŠ^ÿZ7 ¤äÓ±ùR{Òè) ÏcNÇ4qŠ`7ÒàQŒŠQ×Ú€ÒiÔt€AÖ’—½QÞ—µ'¸¦QŽii1ÅŽiÅ.9£§jyíJ:ÐGNMŠÏ— ÷¤4à=i˜æŒsJr:SN}(zŠ1ÚŠ(£ùÒ“Ö“<æ…/¯ÓO=)ÝXÓ$;Ž)ؤÍ(ÔRw¦O\Ñõ¥íIƒHŽ”G8¢•€(ê;PG4v ·LÒÒvô£š`.3Iõ¥š;ôë@ E.3IŠLzÒö¢ŒsH=(#¥.Ü÷ S1Ï?¥â‚( ýÜQŽiiE >´½È4¿…)Æ~´†&~ZMÔ¤â‚;âyö¤¥íF)p)ÒŒÒcš'LfŠP3×41ʼnҗèhçÖ—äàÐAô c4¼S° íHÌrÌ{šw°ï\v­-ÏÛåYdl)àv¨›qؤ®u hƒ›…$v4¢þ]ÀJTô!8®*)Þ ¯Èö©¤Õ®Ê”°°8¬}¤Êä;¼…ÉÔ¼@«´ru¸=ÚAŠó––F$³OrsIæ‘Ò§ÚÔè‡ÈzsÁ &ïí &Ïð‰9ª²I|³«öXó帕OÊäUŸ·O™ Ùæ«ÚÔì‡aý§hP¿QSG<3ó ¨ÿC\,ÓÉ#d¶ šÞGVISØŽ´*“]Ù¾8æ—8³;ZÄdûåFjJè½Ìì!4€Í8çŽhùÕ@ ;)ÁÉé@#õ¥`ͯãKF)ÀpE&¸E‚ÃHâƒÀSŽi;PzÑj^†– Á£¥-&G=h„=(ïÅ‘Aö¦„&zñK‘šNhÆ)ØŽhéÒ”)1Í š^)z­% ~4¾´˜æ†󎔘斖„1:ô¢Ö”ñ@„üi1Kži1@'µéyϵë@ ŠJqàÒc=é ŒÑ··J]ØàsG8÷Í!;ÑÚ—¨äPG bu§°â” €°£ƒÞ”äw cšhúPq×éÀu4Ÿã@?*^)Ç¥:ªÀ´:ÑÞ€9â\P=©Gb˜3\׉mñ,sâ­t¸ªÅ·ÚtÙ@ûÈ7 ™«¢àõ8~M!àWu ùvñF:*úVô–·2©¢j_¦(ìx¤ä ÜÄ'µ4zq¤Çµ0E.3IÈ4£Ž´‡Š0ipNi½ø©ãñ  špõ”À?‹Ú‚iO™¦!§⎜ûÒ‘Í.8  {ýiCKùÒ÷éÅŒb”‘J=èéÒ€ 8tÇëEÇjJ2sAç4¹ Aœâ”ÅÆy§dtï@ 8Ç`ҌРê(˜ãŠ^žôpr;Òã1ùPvŒgœÐ£ iNccOíh­4 Å(b”úQRÀì9  }(Æ;ÒƒïHhn8”ìwÅ;8©b­&zqN=h#"ÄÞ“'ÒzNàS@7nÐ@ÿw­!Dü)çOŒ@|¤ÿ:\ôgZB &;‹íIŠNÞÔI¦ã>Ôì ñK¥0Ü@9éKŽx4ëKŒv sNíõ¢”ÓÒ‰œÒŒÔ/^˜§ï@A£µ('“Þ“>ôƒšIdDó1á4ð1Þ±|Mw䨬üÒž~•3|ªãZœ¥Ä­ss,­Õ›5bͤÀêj¦0k_JMÌr¹æ±‚Ô¹hŽ÷ÂÖêª7†8ëŠZ鱘˜É¤Ç•Î[!y1Ž zOƒtðò,’tQéÒª’Öì&ô;$‚Km0(ÚËŒ·Šó?Èâ}§ä?wÞ½CW¸h¬Œ`tä~ ”o‘S¦NÓíž(û7!nr“ý㞪ý:f§—q?6O©¨†°7zûT¿­GÔ½;Ó×§^ 9¸ü¨ òƒJ9æš3ÒÉSƒW-'6÷qL¿ÂÃ5I3RòGÒ3ÑU–@®œ©u¬Ý äÜéˆüñü‡éÚ´Àç½uÅÝ\ŇšLzRðI)j„ÈéÅ!Í/%ixÁ 8v¥Çsõ¤#œf€úf“8à šR}M {Ñ`“Î(äôéA94¿•)Æ)„zSºÐ'Ù¤Î)ÁyéIŽN8 >´.ÜñšqP"2E0ç?Jò;ÑNâ#ÎiyÅ.9¥#Š`È(÷¸´7mXŽ_Å›§KU<'ÞõÎñž†§º˜Ü]<¤’Xç4ǹ±ŽI®M[5KCGJÁÁ?7Jö Y46Ê[£sÏ­q~ÓÒI”(éþ õ›+dŠÝ\ É/·µtKÜ…ŒÞ¬ÃñÊ¥”‘/,ÝêkȵfV$g'Ïã^µâ‘æªw ¿çé^I¬®Þ˜8È&§ìÜç$%Xç§­BÝ? š`ËÓ<ÔcŒâ°6B㌃NQøÓ=êHÉÐÀ¿JLsš”-F:f¯¦N{ÔXÚxç5"ôԽữ*ñ còÈ¿­u#9ç¥p6“.£”uV»ôa"‰£("·¢ô±”Ö 1¸ä}(==©ÛzEGjÔþ„ŽiäRwÀ¤€hÁZCŒu§ã­!@7¸Í*ŒQŠ\gë@ ÇOZP¾´ážzPs@ì7ŒqFíN*iphÿ AüéÜÓ¶Šf9íFqÏ¥;¦i6Ð+ <ŒÒÒƒŽœRm¨ V´óÈÅ!Å?cÖ€°Ì L*¤Ï=i @>j;âš“èc0ÔÜpæ—ð©žÔ`R‘žqKŒuî!¸â—ÒšhéÞ‹€ÓÆ) Û¿:p¥Ï=) \ŽÔ¥È /=)qÖ™#Bò8üéÛxÅ*ç¯ó§gŠ,PÀ£µóNèxPÊh刊AÁúÔ€t£æ€ŒšN£ÞœsGsï@ÀexëAàŽ8§¸ZZ„ÆFàW;â‹ï.$´FäÏý+¢,¨ 1¨É'Ò¼ëR»k»ù&=¸úv¬ê½,TV¥aÉ•©¦[ù’ެÈÔ³…Öø~Ô=ÄqrrsQI^EMÙ\ïü)¦‹ÍÛƒÇQøâ»e+ås÷G\㙦Z´qªï.2=MiÜ ‘Ú6ž(ªï#8ís•ñ Ñ$ÆìÀ9þ•äú´‹’Ov'è^!¹\2Ä>\ò}kÎ5L±%SéZKHuf ƒ““PqÉÇz•òXŒ»†x®cq«óTñ®O5ñÒ§‡–àã=ieÚŸ" ¹T± ݹ#3Û©ö£4ùGÍLïV"PJíôKŸ´é‰žZ3´×§"º_ O‰å€nÜUSv‘3Z Ð3ÏÓºZ^s]&hg>Ôœv§´héƒÆ(éô§‘Å&8"€; ŒRŒzRŒŽÔÕ"—=x££ \}i Á×¥ÏáFÜPG)ŒaRý){R÷Â3FÞ:ÓÊü¼i1ž´Ãõ£#úSñÚ˜Xh¸ È9î0sMÒžâŽNqÅ"÷âŽ94‚ÅÇÍÁ£Ç f“£°GÎ8Žzfuã„asH;fžOZm E v(?OZaüMçëJG8(ÀB%)pqš\ý)çAÅa£'¶(èzñKŽ}¨Çzw §ùzÒqŒÓÀÇ4ÂÃqß8£¸ëøRà~i n8cŠq8 9æ€=é^”üdsFÞ@01¼Ewöm0¢œ<­´};×N[>µ·âkÃu©˜•¾H¾Uú÷¬`<Šæ›».*ȵkùõæ»ß Á‰Ñˆ9?LWc‘Ç­zWƒâ>vvq×§­.äTìwv,í’ b£9éÒ¤»v´mÇÎx©í!H"ؤ–ðOW™Ñ䪧áY¯zA²8 håÜÿU‚¸=NS´ôÉýk­Ö®0ää‘Ú¸›çSÏbµªô° µ2Xœ~´Â1œóRI÷ˆZˆsŠç7FGoJµóÖª¨íZª3Í&ø“ztˆvž*XTš’D !sáHcÅD­Ý»#¯z©Ó&˜Ç¡àVŽ‘9¶Ô¡~Û°ÎC‘V¶üèØOcÑp;š^Ýóš†Ö_>Ê 3ÉAšŸÖŸS #½lö§àcéIƒNà& !ãž½©Ãž¤< &Àh w8äÒëKŒŽ1ŠCתØÓoÌaþÅpAèDDІ&T–6` †l×j—2*ö‰¶ãŒHqùVs›[]ÎHi—ÏÂØ\“ÿ\J4=Q€ÆŸ?ýó]lWR‚ÅgolœÑ%ÝÁdu±ü«?m.ˆvG$t W¶Ÿ>ݦ6©ŽºuÏìWZ.î;ÜÏi[ühÒ $ÏpàúÈOõ¥í¥Õ•öN¤Ã‹ ûâ”hÚ™ñã0àWeö©]~Q ?ïb˜«/-$²þ.MÞ]ƒ”á%ŠHdd‘ :ðTõ¨Êœð:Ö¶¼èú‘TÉ*cïYd}k¡;«²ݼãµ#/Ú”zÒã³L VFƒ”|Üf´¬×8Ï­gÇ×Þ´­qǽ 5"Ú¥aòâ„GJstÔÈ»^~•@õ9­;µ99ïÞ³[©ô¡ ÅN‡5XœTÑœŠLç@—ÍÒQOTb+Pp:W=áYr·ô<0ÿ?t@qï]0wŠ2kQ;ô¥8ô¥íš0EP ޤš6㎴¸=ŵ4 ^Ø4£8É `õíJÀ&ÐG©®‡M”Ï`?µ!ôÎ F±’‡íN“Ž@ç¥r½Z;ሠôÍF%èÁî)ò)'Õu¶zý*-$_…ÉëÏaRM0ŠžKTVÄçÒ«ëŽbÓ˜F nõpÕ‰œ¼®ÒÊÒ±Ë1ɦJçÖœAÎ(àsÒ»R±™sIÇ&žN3‘ÖšF9ö§`ŒqA´¿´¬84áÆ(┌qE€iÁ4uÎ)qúÑìcÖƒÛŽ´¸ãœR ž´XCq¥ì{ÐZr1Ï$PzÓ°sÒœ{S^Gv ⎸¤9вP˜ÁéNÛÍ;¦(9ü)…Ã<âŽôy?¥;¦(ëíHF{Òó͆'u¤ã¶2iØ¤Ú 4!sÖ¸^}«U“¢|£ð®êêamg4ǪOã^aq!’vr~ñÍcUô.ŒŽÕf5VP2 85nÛ³Ï5’-&”2£#ÿ¯^‰¡F¦M§€¾¼ óý7 ªO×[§Ì¨ª Œá®È¯tç“Ôè/¤ò¡À”FGZáu‹…Ëí}Ùäúæ¶5+Íèõ8>¦¸ýFm¤÷â“÷b³"úMÛÉÉÉâ²™»Žµjä’ÌyëÅSsI®FÍѵ’ãæ•õ,ˆýjD9â£#&ž™æ€: ÊSTUãçŸÊ»!þuÁh²yz»¶z/?κ(íc9î0Þ´ž”ý£Ƹ<µl‘ƒšR2){Ò•Éô§`øÒãÖ—hÅ!©ëE€aVtÙ<«øž­´ýy©#lI¨aüè{Ù¢tÁ§:8Ç¥F“+$0©P£Œöô®92‘ „}ÑQ¤ O *Þ0qŠš5UY²“)lËÀã=+Äwä·ˆÔƒšq^rhǵ Ò“àS½qI´“Íaxªçìúg– ƒô®‡zê|es›Ô€rF~¦¹a’ØÏ5Í7y3H-A8$ô5zßï | ¤£±5rÛïsÇ­J)6Ÿ€T7JÚI„iYGp;×?i(qÚ®™ÉLnü+®Ðæ{“ÝN6ðMs×ò+ ƒÅ_¹›ƒµ¹ïXw3’ÄÛ­eRwи-nSžMÙÇnõX°Á{Ï9÷ÅEŒž1ëXŒ8¥9¶þÒ>niAä)!“D¸pkVÐqê+2.Zµ-98˜™©?äÓØ|½Fj4˜ ŽœP€”ã4¡y>”â3@ëœÕ’gR‘€I¥œzt¤6¨õæ” Q¸žsNèh˜µ4à0N)HǦhƒ©ô FGzSÐzŠŠò_&Æyˆû¨OéEÀó}zãí:œòu«/ŽÕ5Ö“Pö®[›-ªH=ªí¯O¶*àûUˆ_nzCfý±œwõ9$!5— ÃÈ Óšì÷µSÐÉÇRK‡e=¶â²e$äžô©§ŸœU9ˆž+7+²Ò±  Ó ü9ØdÓŽ˜ïRPcæÐ94ŠIÆ:S†ë‘@Ëýài[ðA¬ØŽVœ§j–Œg奧ô¨P`/5/¦{f¨Ì«v_¥dK×µ®¿“0ÃqÞ¥–ˆjÇ¢—<ô¦ˆH}kÑt“æi6ÄáÇäkÍâû½@9ÑaÁoçZÑø™œö/àãÒŒ}ªLc¤q[Ü„D3ŽzRòN)ÅphÆ8ÀÍzP:Ó±Ï4mÁâ˜çŽjþ‘ýB3»–5H þµ ÀwK6=TMû oÄ ÀZ·4X@xÍGl„°ô«w,?q²Œ·f¤Œ´’7ÍŒR'ÓŠ’Š×ôÍckq–·Ž\ã[wɪwÑù¶¨ê@õªƒ´®'±Ê° ?f:ÿ:˜ò:Tg¨Åw\§¯ŠLñô©1Û¥4Ž´\ù4`皌.H¦ Œç­)\ p^)IÁÇ bŽ´óÖ›íÇ4˜ ÅçŠyëH}© n=i1R½1IÉíŠ8 –œx£øi 1OÀÇjn=©ÀuÅQ˜mÈëN¯4Ðy4ê,;†ÐhÆF(Í8dŠãæŒddӱ׎iqÆ;Ð1¸ö¬¯Ê"Ñ%õr¶íŒñ\ÏŒ¥ÙaoêÌÇò¦ Üà$9v'®iŸ­+$úÒ~5Ìl8›$}J§‘Æ*5`àïRFü¨¸ãir‹•rzR±ÀàõéP‡ m Ôc4›Ž9=(¹#]Žr*ª["¦vùy5c ö¤PÆÇ ¦žp3JÙÇZ8LjO8åàð)½1ƒN©ÍY‡–?JÑ‹†³¢5hCØv5 hFxëÖ¤-ÁôéP£cÓØ|¤tæ‚:•çåN fK‚Z´n3·Ú³f<õö¡nPÅ"”u rH¥ÇOZ–/¾+Ñ|9“¢ÇìíÍyÔ_xôo Ÿø“×ç?ÈVÔ¾"'±©ƒÁóKŒÔŠëÅ.еt܈Œ}h¥Ú=8íLÚsÀ¤;ˆ8ëÍ.iÛxúQŒz4`sÍuzTE”cž[ë\õ¤{¨ãê3“ô®ºÚ€c ¬*»Y ín'§=Î<¼i-Ól}9Å%ÑùEsõ/¡žã™¦§qOsšŒ6qHdW•Ï¡¨îàô«r€PÕ^A'­sp˜n$ñô¨íŠÚÖ Ý²U㱬‚yãÓÛMÞ&oB"?:B8©1Ï4~5hñÔv¤U§ži À=±M#švÜQêh§Ÿ­y§(àçó¥#,`Ö‚0iøÈÅF@Ï4 ©1È£µ!‘ãhëM#š{çšNAçðªBŽy4íªGZ8¥Ú@ö>•Dè)Ài qK‚yÈ v†Ni@—ÓÒ•h #€;Ó»úÓ‚‚9¢à0/^kŒñ»þúþìgõ®Ü+Ïük&uWLðˆ£ôÍgQû¥Ãs‘'š8=:Ð}h÷Í`j)ç’)êBž3Ó£$úÓ·ƒŠ@J8éÍ5€9ïI»€Aæšç?ŸZFbÁG¥F[åéN'Ž:ÔlI9í@çŒÐ¤4cƒÍZrŒò;Ó2Iõ§ÇÁúÐ2ÔG?…^€ãóÅP‹å>Õn"F=êX מiå²?Z¬„çš‘Ÿ#Ò¬C3¢ÿ3µ3?S$îsÈ©XóQ÷&ˆFF1ЬÉóu«]j@Sš@U¸f…õ"¹¦B¬TðGÖ ÍaêpywÔpãšÞŒµ±2FcqLç¯j†¦•ãÚº‘`2i6Z—`ÓJóƒÍ„ {úSq“ŒSÊç`òp}©\cJãŠÅ?ÒƒŒä @GŠ]¼dSˆã ¦ç@ Šnß|Ô±MÀã"€M#šŽxâŽAªãÎ)A<)vþtî;šd çÿ×G¸âœpiqJåqŒqJA ü¨ ‘Nêy`§Ï4wkZ_3¨\ÇïAO^µ \`‘HsœÖìÈa^¹ g ýiÀcñ4¤dd”€@;µ§Â&º Ã…þu]zúÖΙØA#œÖu‘KSV%ãÅY…9˜«©žµÌY!û†ªHI”â2HìE4ìîTr¤|Ý Œu«wˆn[ƒÈªÅF¡®è»£-ˆv§¥.ÜRê‿6DqíA=)øÁ=©qÆz@F'ŠB=)åHéMÁ†0ŒÿZB¸)ÇÒ¹ëÒ˜žÿZ'ÛÖ¤ã=)NqNÀ0ƒM ñƒR‘þÜ çÓ ’@úÐ8Ž˜¥ ûÓ gOjzŽ€ÐF\Ó†ô¤qŠp_~hä·_ÒŸ·ñÅ4®F)BŒvôâœGZ6Ÿ¥&ìQAlr+Èu¦ß}3zÈÇõ¯`EÚG~kÇ5C›—oö‰¬ª3Jff8ÏQ@ëÓô½é1ÇZÌÔ3ɨ ÏÖ‚pqÞ€œt¦gu<ŸAMû«ŸS@ É QÚŒàb›ž8€w˜úQÉçHi¿…(=ñŠjœŒÒƒLdèûp1V‘°jˆ“¦íãH ÉéNgªÊýGz~}NisŽ EÚœiÒ˜ Hâ£H©Cšbýê hX&dJöXL6pD‚5¥y^‡oçßÛÇÙäUüȯ]e‰8­¨­Ìª½FcÚŒlSöòhÛØ Ñ™ Îrj@¤QÎH¤Ç`?4±D$‘T ä×Al› VE„Y“waÒ·a\ Èæ¹ê½li®Lƒ$`ÕØÆ5Z%ùºqVÔ|¸¬††¹ÂÕ7#'5n^Ú©‘’G µ0qŠv9¤ÛƒœÔ‚½0i¬àÒ‚)x Ð2“ƒœZüÔé~Wö¦ƒ“î(Ÿ©A”Œã­e•È®†DŒ¾µ‰,{©ìkª„®¬Ì¦ˆ=‡Ö˜W5+ t4Ü+fMÈÎyõ¥ÇJvÑ»ì{w¤,9úR“‘ÅHF ÷ ¨ZC"ïIާ5.ÜŸJL`š`BÞ)üªV\z`\w«$nÐ)ëëO=i4!\ F8§‘Ó9¥Ç9!„.{þ4q÷iÛrrN¥;JCÇlÓ±žüÒã©Àp 7§^hî#SÇ$ö  sÞ¥€ ù†¯Ô¿ãáëÚ”r àf¼cSÿ^Ùã5•CJfYéIù©Ýù¤'šƒPöýir;S}¨=qMcÇ4âH8¤>´†Ež”t4ãÛò¦€zqG8Å8Àé)qÏ<Ð8$)>ñàSð0Ö¥5‚jEãŽ(l~”êŒ óR Líë@ÿ<ÐO¥&yë@Ï>”ØÎXb‰)`_ÞJì|mæëù\…ËÀW¦`œâ¸@>Õ,¸ÿWRGÿ^» +¢’´L'¸Á‘ÁÉ¥#c¯zv)æ­’'@iÀݑӥ<¨ÆGZM»¥T§&¡»!¤hØÆ=OZÓN•VÙÑ‘VÀéŒ×+wÔ²ÔŒö«{ñQB6¥L™H‚rBÕ7nsг9檱àã!!…¹¦òÔãÏ?Ö™Þ‘Dˆr2=)ÇžÔÑœ{ÓÈyæ€+ËÂæ ¯5fEÊâ«?´ _â$ŠÌ½R²îÇÚ´”äUî£ßõtß+¹2Õ$OÒ“h"¦ÚxÍ5”öë]¬ÆÄ[FF!w^µ!ÒF9©2çùÒã‘O=}éXgÚ¢w4€dT»3Æx…qÒšc"eÇA‘LÛÏZ›iè7A¦™$XÅ)\`úÓÂóHW ûQp±.?;R•¤ KzS$6ç·ãNÔ q‚x¥ÇqÚ“Ð9Å8.FNô§`žÙ4Ãó¤16c$P¥8¼Òƒ“Jà pÍxƪ \8ô8ýkÚÔe”f¼cXP/fûǟƲŸCJf3qM#ò©1Éæ“â¤Öã`àÒŠq^zÒúæ 'æÇ­4÷柎i„sš4½h=8¤ñMͺQV”:Aõ ŠUÉ€yàRô äzz¯š9 ëÅ8}8©N”Ð{SÏ l @'cH1KÁ&“#ò C$9=˜Ì£©ÅWf>•wNLʽði1ž¥à{mš\ó‘þ±ÕÑGÿe]>ÞN+;Ã0ˆ|;j1÷òçêOÿªµ6œd ëŠÐæ–âmÉÉ=i6óÖ¤Æ4࣮i1êIüi,Á’Fçæ9JK¶òíÈ_¼çhrÊ?ÝŒc•Gи—c$/$U˜›*5ÛŒqøÔ±*–Î9éX"™v>VžpZD\”9ÈÆ()ÎųÓ¨ ê*IU ×Ö£!y¤Á <Òw¥8#­7R0SŽ” {Ócáq¸š“9Å#q×?¥Ta×Ç­^j©1ËS_~”ŽÂ;Òõï‚)XNh•*•v¨NA Ž*õÌ|ƒUJòOoZ섯˜5fFzgã­?íAŠb# Œ“Œf½E;iÏZS‘Œu¤27SqÚ¦ úÒ*BPãŽy¦•Ç51ã4Üc­4À‰Tœœ FÕ54‚TsEÀ1ž)qÆ<r(ÅSd¨ÀëNçð§mÍ`ð8©dc½}iØÇ¥*©êG˜`dÒìÏ=)qŠQÇ4Xv€nSÓšñ]pbþqÿMùšö¤?0ȯ×ÔNäÒWþuœË¦aô4ÜŽyæœÃž¦ŠÌÑ šaÔ˜9šËƒ@Æ‚E3>Ø©O©ëQ7|zÐ16ñïHW4£=)F}(Ò1Œô`gSŽ” :tëKõëJ3šP1@éOþb“®)à õ¥p£š~ éÖš½)Iô ·#š0¥&xäR18éÅ#lšÖÒãÌ€ÖOÕxVÌÝê–‘c!åPxíßô§k±7dzõœf±·„û¸ÕJ›ÿõªFä’:IŒWMÌÚ1@t§P~Efb“RÂÆ|ù’øFDcŸ©­‹qµA´†0Žj&ã8©˜pj&ÆF2qKƒŽ¸¥Æ3š1òô n”¹9æ—ÐbOZrô旜ҴêQÍIÛ4À9©ëH÷§HØý( bšäãàAïQ99æ.\W¤ü=´ó5a)CoÄñ^qo“ì_-ÙÝÜžûc©ª‚÷‰›ÐìëÅ/j~Òm­î`GQUu'òí6AìãÞ¯íÍeßæ[ø¢b1“õ?þª‰= E‹vÆ==+QsÞª[Æ1Ïj´2è+–‰@©b%éÍUA´¨cŸÂ­Gœu¤6Y?w¥VŸš{9ÅU¤rNãLDLxÉü©£‚qÎiÄ‚´ß~‚¥i3íI¸s@ädR*ã¦^W§J=‡çS/AQH3øTÙ8ÅFÜúP&Sœž(çâŸ.íÜt4ΟրUi ÏCV9ÅE"àdõqvb{m SBŒc<ÔÛT­&=0k®æ6"ÛÎp)¥sS`ž¢¯>†š<6בOÛéÉ ¯=*FEÂ›Š—Šk zQq‘•÷¤#/éHFJB§Ò¤Ù×¥NhFOO—oniêqN Ï9¢ã‚qéNóNÛ­(^qÓݸÇ÷§Ú” œvðƒµ]Æk&l7ÓO^)Äô™çÛ'=)ëN>ÔÒ =¨ݽûRcŽ)IõŸ‡ƒ“Û Ú€i?^ÜS±è)¾”áHŽÔð0)™çÚלÒÇ隌œŽ´öÏ©¦çŠh1àÔ@jy#QæQõ¦kàkµk–Qã#xfúšöâ;ú×›|1±ÝyqtÃýL;WêÇü¯KÇqÑÍÝÛÅxéNè(DZªd™zË~ê±÷ŸqÇ ÿõÓ­ 1‘Pj,S ÉXÕTãÔòB*ì+òã¥DŠDËÁÍ?#h4ÏjvpzÔ xn”ðÜdPîÏ4ïJS'8¦ðyý3Mæ“ÜÒ§÷¦ôôÒIn:S°O_Τb{ÒéHÇn©Å “@QÍN•YXäÔàþ”7O¥!ïô¦‚OJ P")8ÍW>œU–Æ5YÁ ×·J #ÒŸJhÏ¥.:zÐg‰ñSç¨\sžâ§ 5k\tâ‚1Æ:Ó±“ê)H­I##àS$ÔÄeG®i»zŸZh¶ñŠi\Z—3MíŠ`EŽqF?:~i;ûšäQõéä :œb“ܧ~_•qÚŸŽE Ó×Üô¤QÎqíOQÆäP ÀǧžÙ¥Á u m÷®3â4y²Ó¤£È¿¢Ÿé]·LW)ñ Ð`aü3ÿ0j$Tw<ŠaÎ=ê»õªÍÈÃä­Tc–<Ô3d&8ëMn¸4§¶h<ž*JG¥4ðsO'Û¾)šö¦õ4æÇQMã4À)1Jh¨u© Šf)Ãêi0õ§`b˜8§‚iFëLnÞ¾Ô¬zÓIõ¦†1Î2j{H˾=EWnÙ­-.=Ò ljø{iähMŽf—¯¨QŠë@Éê+;Ãvdðõ„$a„AØ{·?Öµ€•kCîFŠU8§…¤ì‰Ûšb9àÆmBi:‚Ü!Zp‚¹çÞ³¬ÐîÉúÖ’¼*e¹hxÀÈädÐËÆzÓ²éôÍ4€zŒûT wJSÂõ”\äóéJ„sÖ”}âJ@!À¦œƒš ç~4½Á$R£æ=*p1Žj?1ÅJ 4 AÐp)ÙÍFyªòçp Œw«/ŽqP?LP3KÎsH08­!ê:PÝñRGÊ ‰š– a‡½i ÉüdñHTbŸ·'ŠB omHjMµ&8Å3hÓß=i¬9Ö¤ÁëÖñŽ)…ˆŠó‘F #©¦•Æic8=èÇ=)ÀRíç­MÆ ëOiBóNÛšiˆhZpÒ…æ·‹…†OJ\qÅ.Þ9ëHVÐt®oÇqoð¬òJ‡úZéÆkÆ1ïð¥öO +~L)2–ç‡ÝT[¯½iÝ'$Ö{E¨fÑØˆ÷¤Ô¹Í8¥ÇLRwã¥(<й¥'bš8ô€kr)¸õ ƒëHN(@3l{×IáËSw{|ÒȪ1îq\ÖIn+Ò>X™õûVÆDyýãõ§mE-ìê¡ÄUà}.)ÀR…äV†íP_¶‘×n?Z·ŒgŠ£ª±û˜ë@ŒÛ1„úÕåîHNÙHQš´§ž•2Ü´HyÇåIÔÑŸÖ”­@lÓ[>½:S²ZBG‘C3ë×Ö“¿zvi ö¥aÜnr:fƒ¸´Óü¨° ìhn¤7¥qÍ8µ 8޵ TŠ P€àr($öƒ4¹¤+sšŠ@1ÍK“L|h È^):fœyïIØPyëoõ¥qÔSOéD÷ÃòªŽâ‘s‘MnONiøçéF9­ÌˆÊŒõâ‘—š{)1ÒÂÄD{ LqœT˜¦óÍ;ŒŒŒ} 5‡9©ü©§„<Ö€¤v8¯Öœ¼ÔŒn *‚ANÇ|æ´õÀ Œ~4ð¸>´šxCŒš.3Ôc¸ ~4ý´¸ü¨¸ JÌñFo ê)Á>CŸnk[ªºœ^n“yzøé¤ùþï•'Ö³›?JÓ¹Q·=«,àŒdñS&k"yäñHiä òqõ¦µ%``SYE;¯ZCÍddsÒ˜F!êOz˜zÑKÆÜ´c' v¥Ç”`VèÊã[ŽÔiÅqša9= zt¦LŒôÿëMÁ ààÓN1On9&˜zP€  óZxö¥ÅH P×?…;ñN¢à0Jw>Ô¸>Ôà:Qq ÛhÎ:Ó°sÖ€HÉæFÑ÷u+ùŠ~;RªêsÎjn3çkÐFW œÖ;ñšé5È„zÚYÜcÓæ5ÎJ1‘D·5‰i;R~¾ôúÔ²ÄêiJqLcÚ„ëH)OLÓrqÖ˜ 0ædsFGéIÔ}(p (äR¯4¼Ô€½(<‚1Úƒœp) „ÔǧŸLSæ˜ZJ˜qÇjúKA´ûƒc+${ž­x…,Mî«gl|ÙUO³_G€Òš3¨ú¥Å ëNäS¹˜˜¬mT¤€#·ü5‡©Ÿô¿Æ© dC"¬'Ö£ˆ•2 üj[(:}sHNîÝéÜÒÅH„'½7§éNÇ„) @) ôþt¸"ƒž´ i^)¸æŸœänyâ€=(éŒàÓŽÜMÈ&’§=é@9ëJO·^”™éLnÀíJ§pçÀF¹Èã¥!Žäš^2)úS»T€œ úÓGéN#¹ qLã4…x©1ƒMl9¦¸ÎaR{ 3ÐúÔp7îA§ÏºØÊÉɨÏ¥‡zc?<`)ëÏZa#¥4ÉëL/ÏŽ'饱ңf4›÷`rh©ÛšP8Wˆõ$Æœž=ù®NeùŽEw~=‡ËñMÿ# ÊßL¨®ãïÆÑ*œÈü¨'šÁéMÅ"Å'ŽôÖ9R’1“Å3vÜ ž¾”´™Ë Õ™<ûRý(8'Ò“µ Ðg´€æœ:vü*D(Ó[Öž)@ síMˆý)['­>ÝwK×ÞŸA£Ò~Ùù¾$ŽR2!‰¤ý0?{?jóŸ„ö{-¯¯þì#ùŸé^Œ~œSFRÜPiÔƒ>ƒìPHcò¬-Hxq’s[°¯yº$w&©‘ŒÕ„Î c ÁµN¹Æ:ReÎ);)Ç8$r{ iÝ‘œZ‘2zÒqÎsJzŠCÁ'4 NsŒŠR@ÈÆx¤>¹¤lc EÆ'¦“š\dsGñ/óI€Ð¹äƒJg=Å/ëÞŽzâ’„wô  ‚GåJFæ“¥ üwÐRzsKÚ|RƒŒô¤ É¥àP1x4«I÷©@<šRr)ŒOÞž)þ4ÀHÛ {S‹ñÇ5ùIÏJ3ÇJÝldÇÎ)…ŽsHOjaíLcMÉÏ šaâŠOµ7¹4¹ËSCJb:<ŒÒãÚ—¸æ±BÀ4»{ÑÞÚªà4 \sÖŠQÖ“1F)phæÄÅ74þ”ÓÖžKñ" ¾%búÈý{JóËCŸL×¥üM\k°6:Û¯ó5æ÷+’iµ¡qܤÛA÷¨óŠ‘óž•dÔµ0õéÅ O­4·š“Å&ÑJ 7'Ö˜ øPéMާŠqÇZPp├SqÇZQŒÒ`83Q“Í;ÛcœP€Œ“Žy«6KºQîj±éïZ:deäç­ g¾xÈYø>Ù±ƒpí/áÐ*ꪚu¸²Òí-Tq(‡ð5o¥3œx#Ò—‚)€úÒä ;¥a^\‘îkl¶Eb^ŒÝõ5HkQÉÈTê0­WŒç`üÔ²…Î"švž9§d~#µ4úâ„#ž„qïAÁç4œúf‘@iõÍ;¹È zhçéGsÅÆ)Bäƒ@ 9Ç­ŠCŠfAnOJ1Œ“K·šqÀÏÖ“žzÑ€M#{Rí ÀÉÍ;´Ð œã¥8`çšCÒ¤Qò⌴ c¥À¦ÍJGÇwí@"»ôïN`wv4‡]ØÍŒ9È£SŠîQÒ‘‡lS<|Þ´cך^r(ç¯a@ êzRm¿*“.*”˜ŸjnàsÍ7pìE¹íHhQƒéKŒ(¦géO8ɤ±ŠxÀõ#4ÌdR‚IãŸZzŠQÞŒqÖ×­0bÓ[•§Q“Žô„ˆÈÉ9âšWéOZ n¶!Œàu¦‘žiÒ) €y¤Pv€O4\mÜhۜԇ‘Lçž”ÀL;ÓH…I޼Ò o€qŠ -!µMˆ¸Ç4i)s@ÿ½.y¦–£Ú‹ ã œS {Ó Š(°\“>´gŠ„ÌB×Iž¼ÑÊ;œwÅtý8ÿÓWþCü+Èîzšö?Àu“Ý%¼‚PR>é® ñiä`H+‚z64йUù5uÅ=9¨Y°Ç¤Ñ zS™ô õÍŒ” cžô`†8ÍqÁ¦€^8£‘ŒÓyÈÅÈ ê ( t u¤Žã&–šg€‡ Ö½ áð¯ndXÇâr•yÀ›­z„å6zIÏ +î4&®L•Ñ߉”ô`OÖ¤óºdW<—äŽzTË}Î3[s#StMÆõ“íX©wž§5QG²ŠêCªÞÈóëjct{¹«ñxfçî®+¸îâž°Ž¸üê½Òy™ÉÅá²£æsùUØôP2k¢®zS‚dbŽksŸm*8×OãM´)k+.0§½o´â©Í¦‡ú ®†˜«"°ÈéG˜V[iú…±&Ö]Ãû’ Àõ­B5+ëbEæ™8ÇWˆo§?¥a&Öæ‰v6ÿh'œšÇ‡Äºcä•B8;ò1õ«QêVróÄMž˜|Òºèh¶ì3ê{RcŒžõ˜„äiL ŒB@<“Þ™žNzQ¿ Ï5È''9è=)Xdå°34ÍÙ<Ò'œ{Ól¨i›céLÏÎi›°zÐûÀ v¡œ~ìÆiI3I€âÃJ¹ÆhÆW€hŸo¥ $ 3ŒÒ† ¿1`WŸS°·’êú¸¤2þðSL€f¹ëŸiVÃåœJ{lÍf¿‹'¹blìܯA¼cõ©æCQg^óžç¬]G\ŠÝBD“¸èµ†S^ÔÈóÒ6ãdcó­ L¼º7½4äöC²[šv7ÎêôïZK!až*µ¶“2vÀ­ôö Ïó­îdF=úö£hÕ¿°t$þTñfzs?< –Äp¼Vˆ¶Qõ§ˆ W3Dš_³’Gµ<¥îÐÜÕ\.8ô ôëKÞ›ŒÐ@‡=©iÔ…M1²–é‘HTçš›óMÙ@$qMÚv‘Ö¬líI³is…ˆR"OéOT=*uM½©v様vŠpSöñÁ¥ÛéRà”åR=)pG4Š·Š]œSÅ.) ‹Ë¦ù*{Ƨ¢‹ˆ£>Ÿmr6Ïo tó7ó¬Ù¼)¢\˧DXt ‘Öº R¤ì÷låÛÁZFíËö¸¿ëÃùTOà»b1£¨D=¥Vþjk¬Ùê) qSÉÃæ—s’‘1å뺂ãûÁOòÅ5¼)~2#ñ Àö-kŸýœW_³›=¨äõófqáMld¯‰×ñ±ÿì酵ܸ©TŸO±ÿöuÙ”ã¦hØ}9¡Â,|ò8£ánãÄ0‘ïlÆÿLj2 ñø ÿÙWeåóK°zsKÙÄ9ßcÿ„c^ çı¥–özxð¾°q¿Ä‡ìÙÿ³×_²ƒÐÓäˆs¾Ç+ÿ¥ãŸÄW|wHU©¦¦ÜK¬ê²ÿMU®³gμr)òD9™Êé[‰•ïfÿ~rjx¼¡A÷l'»;ë](¥Çµ ì.yðø{K€~îÂÝO¨AWb±Ë츫x£˜›o©áqô§ˆÀè*LRPÔ˜¥æŠ&?JJRpy£¨¦c”ÒQ@:ÑIÛšB?ÿÙnip2-8.7.0/test/extras/0000755000175000017500000000000013224651032011662 500000000000000nip2-8.7.0/test/extras/test_magick2.ws0000644000175000017500000041260613224651032014542 00000000000000 nip2-8.7.0/test/extras/test_transform.ws0000644000175000017500000007737713224651032015254 00000000000000 nip2-8.7.0/test/extras/test_recomp_order.ws0000644000175000017500000001214513224651032015677 00000000000000 nip2-8.7.0/test/extras/test-5x5.v0000644000175000017500000000246113224651032013372 00000000000000¶¦ò€?€?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ

im_black /home/john/.nip2-7.11.10/tmp/untitled-nip2-22-XCCNIRa.v 5 5 3 # Fri Jul 7 16:08:51 2006 im_identity /home/john/.nip2-7.11.10/tmp/untitled-nip2-25-XV4JasU.v 3 # Fri Jul 7 16:08:51 2006 im_lintra 1 /home/john/.nip2-7.11.10/tmp/untitled-nip2-25-XV4JasU.v 0 /home/john/.nip2-7.11.10/tmp/untitled-nip2-24-XnmRZfF.v # Fri Jul 7 16:08:51 2006 im_maplut /home/john/.nip2-7.11.10/tmp/untitled-nip2-22-XCCNIRa.v /home/john/.nip2-7.11.10/tmp/untitled-nip2-28-XTqLP2D.v /home/john/.nip2-7.11.10/tmp/untitled-nip2-24-XnmRZfF.v # Fri Jul 7 16:08:51 2006 im_clip2fmt /home/john/.nip2-7.11.10/tmp/untitled-nip2-28-XTqLP2D.v /home/john/.nip2-7.11.10/tmp/untitled-nip2-27-X4AUAQo.v 0 # Fri Jul 7 16:08:51 2006 im_copy_set /home/john/.nip2-7.11.10/tmp/untitled-nip2-27-X4AUAQo.v /home/john/.nip2-7.11.10/tmp/untitled-nip2-30-XSKPvr8.v 17 1 1 0 0 # Fri Jul 7 16:08:51 2006 im_copy_set /home/john/.nip2-7.11.10/tmp/untitled-nip2-30-XSKPvr8.v /home/john/.nip2-7.11.10/tmp/untitled-nip2-32-XUyimQC.v 17 1 1 0 0 # Fri Jul 7 16:08:51 2006
nip2-8.7.0/test/Makefile.in0000644000175000017500000006516413350464104012357 00000000000000# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = test ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = test_all.sh CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } 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__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # 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 # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # 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. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(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='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/test_all.sh.in \ $(top_srcdir)/test-driver DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BISON = @BISON@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DLLWRAP = @DLLWRAP@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FFTW3_CFLAGS = @FFTW3_CFLAGS@ FFTW3_LIBS = @FFTW3_LIBS@ FGREP = @FGREP@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ GSL_CFLAGS = @GSL_CFLAGS@ GSL_LIBS = @GSL_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ IP_CFLAGS = @IP_CFLAGS@ IP_LIBS = @IP_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBGOFFICE_CFLAGS = @LIBGOFFICE_CFLAGS@ LIBGOFFICE_LIBS = @LIBGOFFICE_LIBS@ LIBGSF_CFLAGS = @LIBGSF_CFLAGS@ LIBGSF_LIBS = @LIBGSF_LIBS@ LIBGVC_CFLAGS = @LIBGVC_CFLAGS@ LIBGVC_LIBS = @LIBGVC_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ 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@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ REQUIRED_PACKAGES_CFLAGS = @REQUIRED_PACKAGES_CFLAGS@ REQUIRED_PACKAGES_LIBS = @REQUIRED_PACKAGES_LIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TOP_SRCDIR = @TOP_SRCDIR@ UPDATE_DESKTOP_DATABASE = @UPDATE_DESKTOP_DATABASE@ UPDATE_MIME_DATABASE = @UPDATE_MIME_DATABASE@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XDG_OPEN = @XDG_OPEN@ XGETTEXT = @XGETTEXT@ 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@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = \ workspaces \ extras \ images TESTS = \ test_all.sh all: all-am .SUFFIXES: .SUFFIXES: .log .test .test$(EXEEXT) .trs $(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) --foreign test/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign test/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): test_all.sh: $(top_builddir)/config.status $(srcdir)/test_all.sh.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags TAGS: ctags CTAGS: cscope cscopelist: # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? test_all.sh.log: test_all.sh @p='test_all.sh'; \ b='test_all.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) 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-TESTS check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -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-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: check-am install-am install-strip .PHONY: all all-am check check-TESTS check-am clean clean-generic \ clean-libtool cscopelist-am ctags-am distclean \ distclean-generic distclean-libtool distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am recheck tags-am \ uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: nip2-8.7.0/test/test_all.sh.in0000644000175000017500000000264413224651032013052 00000000000000#!/bin/sh # set -x main_result=0 test_result() { if [ $1 = 0 ]; then echo ok else echo failed main_result=1 fi } test_result_fail() { if [ $1 = 0 ]; then echo error: did not fail main_result=1 else echo fail expected fi } # run the test workspaces test_workspaces() { for i in @TOP_SRCDIR@/test/workspaces/*.ws; do base=$(basename $i) echo -n "testing $base ... " @TOP_SRCDIR@/src/nip2 --prefix=@TOP_SRCDIR@ --test "$i" result=$? # test_fail.ws is supposed to fail if [ x"$base" = x"test_fail.ws" ]; then test_result_fail $result else test_result $result fi done } # run the test defs test_defs() { for i in @TOP_SRCDIR@/test/workspaces/*.def; do base=$(basename $i) echo -n "testing $base ... " @TOP_SRCDIR@/src/nip2 --prefix=@TOP_SRCDIR@ --test $i test_result $? done } # load all the example workspaces too test_examples() { for i in @TOP_SRCDIR@/share/nip2/data/examples/*/*.ws; do base=$(basename $i) # have to skip these two, they use a non-free plugin if test x"$base" = x"framing.ws" ; then continue fi if test x"$base" = x"registering.ws" ; then continue fi echo -n "testing $base ... " @TOP_SRCDIR@/src/nip2 --prefix=@TOP_SRCDIR@ --test $i test_result $? done } test_workspaces test_defs test_examples echo "repeating tests with the vectorising system disabled" export IM_NOVECTOR=1 test_workspaces test_defs test_examples exit $main_result nip2-8.7.0/test/Makefile.am0000644000175000017500000000011313224651032012323 00000000000000 EXTRA_DIST = \ workspaces \ extras \ images TESTS = \ test_all.sh nip2-8.7.0/test/workspaces/0000755000175000017500000000000013224651032012535 500000000000000nip2-8.7.0/test/workspaces/test_stats.ws0000644000175000017500000002342213224651032015230 00000000000000 nip2-8.7.0/test/workspaces/test_colour.ws0000644000175000017500000014665613224651032015414 00000000000000 nip2-8.7.0/test/workspaces/test_conv.ws0000644000175000017500000005667213224651032015054 00000000000000 nip2-8.7.0/test/workspaces/test_fourier.ws0000644000175000017500000002767113224651032015557 00000000000000 nip2-8.7.0/test/workspaces/test_filter.ws0000644000175000017500000022012413224651032015355 00000000000000 nip2-8.7.0/test/workspaces/test_histogram.ws0000644000175000017500000005134613224651032016075 00000000000000 nip2-8.7.0/test/workspaces/test_fail.ws0000644000175000017500000000211213224651032014776 00000000000000 nip2-8.7.0/test/workspaces/test_image.ws0000644000175000017500000027205513224651032015164 00000000000000 nip2-8.7.0/test/workspaces/test_snip.def0000644000175000017500000000522713224651032015153 00000000000000// all the image formats we test, and their matching number format // we can't use uchar as a number format directly since it'll become 'a' or // whatever and arithmetic ops will start failing fmts = [ ["uchar", cast_unsigned_char, cast_unsigned_int @ cast_unsigned_char], ["char", cast_signed_char, cast_signed_int @ cast_signed_char], ["ushort", cast_unsigned_short, cast_unsigned_short], ["short", cast_signed_short, cast_signed_short], ["uint", cast_unsigned_int, cast_unsigned_int], ["int", cast_signed_int, cast_signed_int], ["float", cast_float, cast_float], ["double", cast_double, cast_double], ["complex", cast_complex, cast_complex], ["dcomplex", cast_double_complex, cast_double_complex] ]; // we need a to_real that does images as well to_real x = abs x, is_complex x = mean x, is_Image x = x; // numbers we test numbers = [-10, 0, 1, 10, 3.1415927]; test_unary op_name fn = foldr1 logical_and [test fname ifmt nfmt x :: [fname, ifmt, nfmt] <- fmts; x <- numbers] { // image == number can fail due to rounding differences test fname ifmt nfmt x = true, abs (image - number) < 0.001 = error (join_sep " " (map print ["unary", fname, op_name, x, "==", image, number])) { image = (to_real @ fn @ ifmt @ to_image) x; number = (to_real @ fn @ nfmt) x; } } test_binary op_name fn = foldr1 logical_and [test fname ifmt nfmt x y :: [fname, ifmt, nfmt] <- fmts; x <- numbers; y <- numbers] { // image == number can fail due to rounding differences test fname ifmt nfmt x y = true, abs (image - number) < 0.001 = error (join_sep " " (map print ["binary", fname, x, op_name, y, "==", image, number])) { image = to_real (fn ((ifmt @ to_image) x) ((ifmt @ to_image) y)); number = to_real (fn (nfmt x) (nfmt y)); } } tests = [ test_binary "add" add, test_binary "subtract" subtract, test_binary "multiply" multiply, test_binary "divide" test_div, test_unary "square" square, test_unary "constant plus" (add 12), test_unary "plus constant" (converse add 12), test_unary "divided by constant" (converse test_div 3), test_unary "multiply constant" (multiply 7), test_unary "constant multiplied by" (converse multiply 7), test_unary "constant subtracted from" (subtract 4), test_unary "subtract constant" (converse subtract 4), "" ++ "a" == "a", hd [1, error "nope"] == 1 ] { // libvips divide returns 0 for divide by zero test_div a b = 0, is_real b && b == 0 = 0, is_complex b && re b == 0 && im b == 0 = divide a b; } main = "all tests pass", fail == [] = "failed: " ++ join_sep ", " (map print fail_numbers) { numbered = zip2 tests [1..]; fail = filter (not @ extract 0) numbered; fail_numbers = map (extract 1) failed; } nip2-8.7.0/test/workspaces/gold_sample.v0000644000175000017500000031167213224651032015144 00000000000000¶¦òT.q8lAq8lA¿³º¾¾ÆÌ»½Ä¸Å»±¹¸¬¬¶³º¸Æ¾¾½ÊÁÈÈÈÅľÂÎÀ;µÉÁ˽¹ÄÊÉÃÆÑ¿¾ÅÂÇËÏÏÉľǼ¹²­¦¬¯ª§§ª­­¨§ª²¹¿¹ÀÁËÑÓÑÑÒÉÑÑÏÏÙÉÆÍÔËÆÐÔÊØÓÃÎÕÔÅËȹ³³¦¨§§ª­¢£§£œœ›Ÿ£Ÿ© Ÿœ ›˜£Ÿ ”œ•™’—˜˜‰”ˆ’‹†…€|‚zqoijgba^_a`__[[[^ahda[]`^gab]`XXT\WYXV[YRVRTYXQNVU\XV]TVZZTQ[UWRHKPORRLOVUYOVVPX[YZYa]T]YWWVSS\X[`ac^ZZZXZTYY[]NWSSSUTSQVMOTORXZUVRRQT]OSTYRQZVXUUTXVRUUUUUX`Sb][U_YXWY[^SU^bZfYZº¸ºµ½ÃÁ¼Å·»¸¸µ½´´¹¹Áǽ¼ÁÍÅÊÀÁÅǼÈÇÀù¿½½È¿ÁÉÆÃËÉÊɯŽÉÈɾ϶¹¼µ¯³­´¬¥¦®¨²­¯°±±´¶Ã¼ÃÆÇØÉÖÊÍÑÌËÍÐÑÆÒÀÍÅÇÔËÌÖÒÊÍÍȺ¶¹¸°¥²¢¦¤«®§­¡ž–•Ÿ¡˜ž™¡¡žššœ¡›š›˜˜›•–“‹‹w}ysqtupogg_W^cX_YUa_`a^b\]^fa`aedXXV[ZW]SZ^W]X^SWPOVSV[T\WXU[UVNQSQVYSUQWPNOPSUMMNPU\YVW[][\\[]ZV]V_Y_\^_[_ZQLNYX[T^PUPPRRWQQXZYWYOWVSYYXVVVWXZa^WPSOQUTKQU\Wa^Zf[\]TWU[[XW]TXZZV[cU^º·°¼»ºÁ¾Ãº¼º¶·¶¼¶³»¶¼ÀÅÌʽÆÍÂÆÇÄÇÊÍǾ»¿À¿ÆÈɹÃÇÍÍÉÆÉÃÁÈ×ÌÀ½º¾­´¥ª²§Ÿ©¦¬ª¬§¯´¯º¸±·µÅÃÈÍËÅÆÁÎÒÐØ×ØÓÎÏÊÊÎËÕÔÌÑËÄɽ³°´°­£¦¡©¨¬¬§©§«©¥§£¡Ÿ¨žšŸš˜™—‰š–‘““’‹…‚}€ymwtmmhi`a\c^^[aX_cf^fbbZ`e[a`eb[^]YTYTZ^TZYWWVSVKURZY_RSSW[XZ_WWTT]SXRMTIPNSTIQRYWNP\ZY^]^XS[^Wd\WWSY][`_]U^YV\`YU[MQQSNSUN]ZXWY\V[ZXYUNSVPT]WMTQOTUWSRUV\Y]UWYXZ_^\ZXWYW[Z[^]`Z\\aº¼·»»½·ÁÀ·Á¯µº»¾»¿¿¿·Æ¾¼ÀÅÄÌÍÌËÈ¾ÂÆÒËÅÃÇÀÁÇÃÊÇÆÄÈÌ¿ÒÉÕÊÈÂÊÂÃÁº¸¸´¬¯ª«£¡ª²¦³«°ª²·´¿ÀÅÇÆÂÆÏÄÃÑÑÒÌ×ËÎÂÇÅÁÇÉÎÚÔÇÅÉÁ½¹¬ª¬®›Ÿœž›¡¨§­¦©œ›Ÿ˜˜¡¡œž’›š™™™•™—‘••–“Œ‡|wsrrrirfeg_`\d_`bX``b[cb\dba]_Y[^[`[ZeXU\SWQZMSWX[VVLQRQZ[U[WVX[STWKR]SNKNLPGLNSSQVPZNMWW[_Z^YWVVZ[SQPWZ^ZQ^UVUSXQU[LNPENVWWQVU[[[YXTZSUZYZYTP[W\PQWPNT[XQQ`UWYX^`Y\aW\SXZ^]Y[ZY^^a`\Z¯·¼º»¸²ºÃ²¸´»¶ÀÃÌÄ»ÄÇÈÃÀËÊÎÎÍÎÂÇÄÐÃл¼ÀÀ½ÈÐÇÉÉȼÆËÈÐ̾ÁÇľƺĵ²¯¬¢¦©¬œ©¨©¹¨»¸·¿ºÀ¾Ä»ÆÅÇÌÄÍÂÊÌÒÖÒÈÕÆÖÎËÒÎÏÕÓÇȼ¹³­¡¦¢¡Ÿžž¦®³­§©Ÿ ¢¤¢¥¤™¢§¡˜œš¡•˜Œ—’‘š—š•“‹ˆ}xudjvjj`ldac`Yb][a]`UeaZd[]`\c[_Z^T]UYWUUSURSMQOMQZWUXW_UZURWRWPTPRSVU\TTSLWMKMRNMLT\V\ZTWV]`]_\\VYYVU][]_\[dXWY\[XRVRTSRRWKRUReVYYWRYVTT[[RTU\UPOUOUQZQZW_VZZ]]\c`]`^X^X_`_Vhb^Y[aW]_²¯³¸µ®µ·¿¶µ¶º»¾¼¹ÈËÄÊÃÃÁÃÂÇÇÐÀÂÅÄÉÂÍÕÌÇÁÄÅÀÇÅÅÇÃÂÉÇÉÍÏÔÆÅ²Æ¼Î½¿±©ª¥¤¡¢¨¢¨ª¨³³·´®½»½ÄÀÁ¿ÈÃÃÅÌÈËÌÏÌÓÎÈËÀÆÌÌÎÏǼÁÁ®»±ª¦ž£ ¡š¥£¦¥ª¦£¦¥ªš¤žŸ¨¡¤¥š•¡£•‘–”š’–¦œ’’‚ymnjiofggepcebepfceXaXaZZcf`_e]\^^]W^\dWd^VRPTSQSSYMRPKMTT`V\^YTQYIUSHRROXTVTMPWNHPVPSQQWRQX^YSTZY^_`_^cVZ\Z[\]\XVVWQUOOSTOVQ^WYYQSXW[TU\^VTYUVR[QYWPSNUQ[]WUTWWTS[TY\]Z_^V__WX[`\Z_[[]]¼¹»µº¯¯¯¯´¸¼¿¸·¿ÂÈÀÆÄÍ»ÃÆÁÊÈÁÆÈÅÆÍÈÃÉÉÆÀÁÁ¼ËÉÉËÀÄÐÏÆÍÑÈÃÊÅÀÄÂÀ½³§¬±¨¡¢ ¨«²¯¬®µ¸¾´Á½ÂÁÄ¿ÄÇÃÁÉþÓÈÆÑËÉÀÀÈÐÏÌÇÃÂÁº²®¤§ ž¡¢£¢œ¥¤¡©¢£šžœŸ¥£¤ œ›šœ¢œ˜—™•™—¡¢•ކƒvqrmeqjhfeeecdgfjkgiX^a^Xf`^Z[RY__^X\][[QWYXTMPPSSTUROJLRTYWYVJPLUUQMRTSNNRTXHKH@OQMO^YZWPUVV\bYXaX\[\YUWTa]W_YW_`ZV]WQXWWTVRRWTXb\WXVYXRYZZVYRYWRRZUPOUVWc_P^Y\Q^Z]]]ac`_^]b[Z\_^^`]ba·´ÂµÃ»º¸¶¼¿¸·»Á¾ÆÊºÐÇÊÆÈļ¼ÁÂÄ¿¾ÌÎÅÈÆÂ½¹·ÁÅÊÌÓÊÆÉ¾ÊÑÕÄÌÇÓËÂÉÉÅÀ¶«¨¥¥£§£§­··¹±´®·¸¾¼Å¹¼¸¶¶Â¼ÁÉ»ËÂÊÈ˼ÁÈÁÅÈÐÄ»º§²¯­¤²££¡£¨ š¡¢¢žš–¥¦£ ¤¥ª¥£›Ÿ£¡¤ž›™£“›œ•’‰xwrnsrtfrdchf`bf_elcg_[d^^Z\X_Y\]^^dY_[`bY^XSQTXTNSQQURRSS[VTVWNNMLKQPNHQPNYSPMNMJSQT[PUQNQTY\Y]^YU]YYZYQRY[^RWVTUXVY\TTX]X[POY\X`X][VWeXY]UXXUTUQRTPSSSUNSUVRO[TO^ZUT`a_]]haaZ^`Zfbaa`iª°³¾½¾´®·¯²²·½Ê¸¼¿ÃÉÁÆÇÁÈľÃž¯Ç¿¼ÂÍÈÀż¾ËÇÅÎÇÎÒÀ½¶ÃÄÊÆÌÅÄÊÐÏż¶«­¨Ÿ¢¡¢®­·±µ°©²´µ¾Á¾Á½À¹»É¾ÅÊÄÌÇÂýÄÂÃÆÍÄÎź®¬¨­±ž¨®ªŸŸ¦£ §š¤¡œ¨¢œ ž™š¤šœœ™Ÿ£¡ Ÿ•‘ŸšœŸŽ‡‡wsh`epend_gcajdabe]bcab\ZXU`U\^^d]_VUaX_]`UUSTZWZTWRQPUUOQRU\QOHMJJVONVQPKQTELKHESPQSY]YZRNORX[`[X^\XVW\MWYY[]X[[TNXZVQSWZXVQPWYT\^dhY[VP]]WWZJVUVZ[ZQU]QUOVZUZROUXUTX\WWU]\^[Y`Ye^b]Z\]¸ÄÄľ¿º¶µ­¼¾¾ÃÊÆÄÅÃÀÌÑÉÈÇÅ¿¹Â½µ¿ºÆÐÇÆÄÃÉÄ¿ÅÍÉËÆÏÎÌÆ¿ÎÐÏË¿É×ÕÊÈŦ¤¥§ ›£ª¬«­²½¹´¸¸¾¾Â½¸²¹ÅÉÀÀÄÇÄËÀ¾Å¸ÇÊ¿ÆÂ¹±¨¦¨±­©¦¯¥ Ÿ ¡¡žª¡¡›˜œ££žž¢‘™ –•¬©›š¡•œ¨Ÿ›‹‰‡rslsgfjoqjdalhc]eh`k]g_S_^ZVYVT[_WYX\Y[_SOXSUZRKNPQVSYWPQMRJITULFFHHRNOPQJHSQHLFOKPORU^WRSV^XUPVV\[S[UTWSUX\a_ZVR]Y^X`VTSWRQYPXZ_aXc[`_Y`\[X^WSR\SQMPTTQVYLUZXUV\\UPNW]Y\]_]^U^^\dcY[b[Z±ÁÀÌÄû»»³¶¸»·ÀÃŶÅÄÈÈÉÆº»¸Â¿¿½¸·ÉÁÃÇÄÂÁ½¸ÆÉÄÎÊÊËÇÎÅÇÑÃÁÃÌÍÆÊÒÉ𪨧¦Ÿ¬«°«¶³³¬§²º¹Áº¹¯¸¾Á¹½Ç¿¿ÀĹǺżû»¯¾ª¥££¦£¢®¬¤¡™ŸŸ¤ž¦˜£™–š¢¡Ÿž˜–›–—•£ž¢¥œ•–¡¢£›„{nqjhpmpegnhcbba^a]^\dc_V^[X^X_ZfXbc_bb[\RYTTUWTPXTUUSPKPKDMOMQMMOKPFLUTPPOPKNQMGJHLMSWUSZSZZ^U[SRV\_Y^ZRTSU]VTSKLWTLWb`]^^_XTT\YU\Z^Z_]aY`WQY\VXUTYVWTQSVNJR^\YSWYV`VT[[WWV]ZYXXeajge][aºÂſʻ¿·¹¶¹¬²¾ÆÎÆÃÉÊÍÈÍͷĺµÁÀ«¶½¾½Ä¾ÂÂÂÆ¼ÉÅÎÕÎÎÏÌÎÄÌÇÆÊÇÉÈÏÎÕÆ¿¸«¯¨¡ ¤¢©¨ªª°­·¬µ»Á¾¾¿¸¼ºÇ¼ÅÆÅ¾¿½²·¶½¸¸»²³¬¤¢¡Ÿ¨¥¡ªª¥Ÿ¢¡Ÿ£§¡›«¦“¤§šš–™¡™™™˜’‘¡”šœ¦££œ›Š‚ujdmjurldogk\fgeeba^b]]][^cYXXZ[[YX[`d]XZWQTPTQYPSVVKPOOQMDKEIPMNKGOMLNNMMFKINMHIJEJHKQQTSRRUW[MX]KaQYSP[NNU[VX\[WZ[V\VZN[WYQWU][[_`b[]Y_ZXWXVXNUYY]UUTWZWY[\UVTSZVXWYSZYUZV_Xd_e]afagZd[¸³½ºÈÁ¹¿µÃº²»ºÅÃÁĽ¾ÀÉ¿Á»Ã¸ºÄµ¼¶·¾º¿ÁÄÁ¾¿ÁÍÁÌÌÎËÎÊÎÐ×ÍÅÂÂÃÃÈÑÖż¶¸ª¯©ª¥¨¯¯§¦³´­²·¾¾¾¼´À·¼ÆÎÈÆ¼²Âº´¹³¼À»¯´¯« ¡ª £¨ª£Ÿ©¦¥™ž¤–©›¡Ÿž¡œ“Ÿž•–•›¢˜ž ¦¤²§£›“{odlmknolyccehibjd^a\c\ZZ[`b`_`[Xc^^`dceXTSVYUTSQMMKSMJNMINFFMEFNLLPMJMFEKKKNDOFJKHTJOWKQRQOVTW]WMOSXOPSTYPPXTWPQL[TROQWZX[T\RW\\Q[`aZX^^U\URXVbR[[S[VX`SOXUY]ZPZV[YXTe^^aZX\W`a`ad]eeYb\¾ÄÅ»¶¾½µºÄ³¸Á»ÄÇɾÈÄÍÌÄÊÆ¸¼¾¼»¹½·¿¿ÀÃÆÆÇƶſÉÇÆËËÌÈÇÎÈÆÄÅÆÅÇËÃÀ¸®¬®­´¯°«²µ¨¤®³ª¹¿¾ÃÀÃÁøſ¾¿¾´¿¯·¯«³·²·®«©Ÿ¢¡¥›§¤¤¢£¦«« › ªŸ§§¦¦š¢ ¡ž•”žš¡¢¢š  Ÿªž¦«¬£œž–‰shhilflkgsf_gqjfca]^a`][ZXZYW\\eZ\]_]eidZUVVYRSUNMGMOOIKNNGRIDHFICFNHGNQPMIHBIRNTSMLORLOWNWQSXONRRQRWVUUSPOUXORX\NT]QX]]WZZ]W_bX\YZXZY^UW\RW[T^WTVXXYUS\`V[TZTWTW`aV_UV^]U`R^R`]d]a_lYY][½Ä¼´²±²¶ÀÁ®½µº¶¾Ã»º¼ÀÎÅ¿½¾ÄÀÇÃĹ¼»À¶½Â¿Êºº¼ÉÅÐËÊÎÇÊÊÑÐÄǾÉËÃÁ½¾®²·²¯²«®©­§©¬µ´·½Ã¾È½·»»´¹»¾º¼º°¨«¬±±±°µ²««¦¦¨¤§¨¤§œ­¤¨§Ÿœ¨ž¢§¨¤š£§£¤Ÿ¢˜¤•˜¤ ¨Ÿ¤ ©œ¨©£‚uqdgalkhqldhld`efahY[X]^XT[_\X_d\`\hZb`_Y_TSSRORMJKMPCKEFOJGHQGHKSMGTOOMFJLGKEJEGGMMLRJLPIUXLQUVSVHPPSOINRPUSKNMLQPMQQUQZZQXa\V\ZT`[^Z^_[YSW\\Sa[UVTSXOXUWU_W\TUY^`[aY]`Z]ZZUWYZXUZ]Z`b_c·Å¹»µ²µ»­¼¼®®¹¾¾½¿»¼Áú±À¼ÂÌÃÏÈÁǽÊÍÊ¿ÇÇÄÂýÃÈÐÃÐÅÆÂÅÇÂÀƾÀÌÅÀ´¹°­§¨°´­°­«°¯®¨¬³»´¼´»¹Ã¶µ¾º¹¿»¼¶·¬²¯³´¸³®¦««§µ§£¥¦¦¤«¦¤¢Ÿ›¥­§ ¢žž ¥ §¦ªœ”—˜—›§¦©­¨«¦™Ž‡€vpnrsppjnllilmf^__W^[\Y[YXYYRYW`fccl\cc`f\WRTNOQTMGIKHJFKINGKRPKJHIIFHFJKJHCCERMOHQPKJLQMIOXSUSHSRTLPPXOOOYSUSQXRPXNWXU[[\dXab^`[\YfXWYVUZ\UVVX]ZV[OWS_VUZXVYSS[]_]VXURZ]V]V_U^_]\e_]\\X\¾¸´±²­¯«±»¶º­¶µ¸º¶Â½»¼Ã»½»½ÁÂ˾ÆÀÇÅÇÒÆËÍËÎÈÂÊÍÁÈÎÇÇȾÄÎÊÆÅÎËÁÁµ·µ¹±¿³´¬°¶¨ª¯­¬­µ¼½¾¹»ÂÈ»µ¸¬¸Á¯·¹¼°º¯³¸³¹­¹·®´©§¢«¥¨¦¥®©£š£›¦›š™¤™¡¡ž¥£¨ª£Ÿ–𢥩¤©®± …„†zsnwqmsororhhmm`_b[Z\W\bYWZSWRZX^c^]]b```b^WMRSHJJGEHO@AJDKIHLMHNLIHJGBLNF@FFG@FDKHOGEOHNVWTNQKMKNRKQOQTVULVRQ[USOOOYS[TTQYZ^ZcZ^YXY^Z_X^SWXXQVSZSSSYPSTXOZaTSXTWXX^]ZZbZ[Y[YR]Z][\WY\be\Yº³¯¸¶±²«¬º·¸¶¼ÁÉÀÁÄ»»¾¾¿ºÈ½ÌÃÕÇÂÇÆÁÄÍËÐÅÊÀÄÁÅÅËÈÇÂÂÃÅÍ»Á¹À½½À·À³³·²¶°±²µ»ª«®ª¬¬©®µ¼µÄ¼¾µ¼¸Á³º»ÃÀÀ±¹¿º´½´´µ¨­ª©ª«¥ ­¤¦ šœ™–§¤¤œ£™ ¢¥©«¤Ÿ˜¦Ÿ¤œŸ›¥§¯«¨©¤“Œ€wrmywtsvwuyeggmlaa__X_Z_ZWXPZUR^TX^[\f^hfZcTOSNHIHIINGNOLNHHMNED@LGHMFHJFJIFJEJLLILUSOXNOPLSNJOPUQNJRNKQNPOORY]]\XORPVP[U\YbbZ]Y]UY]]e]d[_X\\^XVYTYZZRVSU_Y\^ZY[YT`YXba\SU]TY_ZY]YV]eZZ]Ugµ³¸±²©®³¶µº´¹½¶»¹¿½ÂÆÀÁ¹ÃÆÇÇÆÃÃμ¼Å¾¿ºÏÉÄȿ¿Á¹½¾ÄÂÆÂ¿Á¿ÄÃÇźºº¶³¸µ¿¸²·¯»¶µ²¯«­²¯°²ºµ½¾´¿°²·¹¸¿¹¶½¶±¶¸¾¶®±ª¬ª­²«¢¯«²¨¦œ™¢›ž£¢¡žž¤£›—ž¢£¨¤ž“œ›–ª­©º¥˜}tpxqpx`u|ntxnulffgaZ__]`]VZPX[S[]X_bc^[cei]_aaRMOMIEGJAGKJKHLCRLDIDCEMQJSJQMHHKJOGIADQTSINILROXPMNJHKHINLOVUQYXRPSOSTSWUVZWWUVVYS^^UVWU_^XZ[WZ]WVUWXWWUUQX]QUY_\VX[\XVT\Y[WV\ZY^_T]UUYc\ec`bµ²¶®­º±²¶²´¬®Ä¸ÀÆÇÎÁÀºÌ½½ÃÂÒÆÈ¾Å»È¹º¾ÃÏÅÌʼÀ¸¿ÀÀǽÅÈÀÂļÁÉĽ½Á½´¹¸¯½­©³®¶¶µµ® ¦ž¢¨®¶¸¸Â¼³³´·´¶³»µ¶´´¥±µ½¯°²¬²ª£«££¦¦¢Ÿ›žš¥¦¤¨¥Ÿ˜¦ž¨¥Ÿ£Ÿ¢Ÿ•œ–žœ²¨£Ÿ“‚|xquvunpm|ovptohnde]c\\Zb^ZYZZYZWX]Y[`^]`[a_`VWOSQETOJKLSLNNPQLIHDGBOFJIIRHIOGTKKNKMMJNPNQIJRRIKVNOLNKLLJONIMMOWY`TSSTNU[XSTVZZV]]ZY\XUW^]`[\bc\\`V\TSSSUXQROYSYXW^[T[X^d\YeZZ]`XXba[__e`X[b`²±­¶¶®«±®²­°«´ºº·º»Äƽº½³ÃÂÉ̻ûȺ½ºÁ¿ÉËÓÉÉÁ¿¿ÇÄÂÎËɹÁ·À¾¼¯µ»··½¹·¿¹¯·¹«®®´µ³¯¯­°³±¾·À´º¶¹¸»®´²µ½¯¾¬¹·­½¬ª®ª¨ªŸ©«³¥Ÿ›¦—–šžŸœ§—¡›£Ÿ›¨£¯££¢¢•“™š­››¢Žqnniyvrvsp{vpinicfdf_`_^Y\c^[WZUV_^SX\eb_U]VX]_OHVKVJQJKIINOGLHDGJLQKLHKLJLSJNPLHJNGOMJJUSJIMJMQNHRFHLLQOLVRKFPPQSVONQ\USYSNUOUN\W]X^^WYZT`Z]XV\]R\WVX]UPWXU_RQW[^UZYV\[cY`_]WYZVa\c\Z[b^b`]b«®¬­¸­²­¶°¶³µ²»¹»¿Àº½Â¶´¾³¼ºÇÁ¹»¾¿ÀÆÁÉÄÉÆÒÅÊźÃÊÑÅÉ¿Á¿ÅÀýÁÆÅ·¸º¼¹º´µ±¯µ¬­¹¹¹²¨®±±­º¹º¶½¼Â¶°²±±¶±·¸³±°µ»µ»µ³¦¨££¤®ª¥¢¡§Ÿ¢˜ŸŸ¢ŸœœœŸ£˜Ÿ¢§§Ÿ¤ž˜˜¢ ›—‰}xnpvrvrrxttx{wlmi]Za`de^Y_e`d__]\Z]Z^aaYWb\ZORUWURKPHFLOLKJTIJ?KHILRIJHDNPNNQOMNMOHLQKHMPPLMNLFDKMNNIKLFELQNONQOEOJQOMNQYORRZTZ[\a^\_\UVSXUZZ`^_Y[Z\SSXWYW[\\]WVTRTRYYX]Z_hS`\Z\Z]c_ahb]a[bda«®²³¶¶¶³­µ¸¸¸·³»³®»¹³­¿¯¸²¸À¹¶¶µ½¶¹¾ÆÌÆÒÌÑÈÉÅÁËÌÁǼϾÀ¿¼Çʽ¾¿¼¾º´¶»¬°«´´°µ»¶½¼¯¨°­²·¶¾½ÂÀÂÅ´¹­±¸¼¾¶°±´´²¯­°¢³££²°¬¬©›š•–›¢›¨ ¦Ÿ ¡¨¨¤¦¬¤¢£ ¤™£¡˜““‰wqpfp|uzvvq{uqkke]^a`hca]W\^c^dl`\ZW^fW_d[XS\LRPMTTNIPIFGJOGXOMKDEJKSMJPAHITPJFOMIICEGLMLNOMEPRKKLJKQNHHRDRNNPHKDROOHQUQMVUWW[XRU^T`Y_VQ\[SZ[ZYXT``T^[YX[TaWM[TY[^aXWVZWV__Y[ZX_``a]da^b_f`^^fŸ©®­¯ª­³µ·­²¯¼­¶¾´¯±­¸°µ°¯²º¶²À˻ùÀÎÃÎÀÑÉÍÈÂÏÇÇÔÐÌ¿À¾¹ÆÅÏʾºÄ¿µ¶±µÂ°»¼¶°»·»ÆÃ¸²¯­ª²±°²¼ÀÁ¿¸¸¼»²³º»½»¹»»·²»ª¤µ®³¶²­¥Ÿ•˜—‘Ÿœ¡¡¢™¢›£©¥¥¨¥ª¤ŸŸ§˜—“„wvjury|y~w|wxxyekccba`^\Z]f\]bejncpi^`WUXZ_Z_UTSXUUTRSSLLMHIOIYKPHKJPSMKKPLPLGONOOUONOOTKOMPJNMGKELKKPRFNEEIOIKFISHCUYTRSSRWSYRTOPUU`Z[[]V^VPY[_ddXPSYX[Z]\XX[PSSXbSYNTWZ_TZb^`_^[_XW\U_^[`\bdb£§«¨©¤ª°¶°§³¨´¬³±¼»µ²µ®³®©¬²»µ¿ÀÀ¼ÃËÊÑÏÓÏÐÑÓ×ÎËÍÁÇÂÇÃÄÂÉ¿½Ã¼¹¶Ã¼²¦­²¹¹³©´¶³¸ÇÂÁ¹µ´­³µ²½ÁÀº»¸®¨µ¸º»¸º¶±±¹¶¸«´²´±ª±ªœž’Ž”’œž˜››Ÿ¢£  ¢Ÿª¢¨©¬¬®¦©¨”‡…yvtiut~x~vy|~€ttqmchW_d[__^aekcegidgc`W\`adXV\UW][SNWZNEHTPQSTSTKOKKNLISOXJFQNILOKNNNHOMKRLJNNJGSKEGDFMNHMHQOOFHKUYVONSOVMYWWWSUW[YOYYZVSUWT[W_Y^VZW[Z`SXUVWT\VUX\T\YZTVSU\[[hZba_`X__cg^heaic\©©¨°««¢±¥´³´«´©³³µª°²§²²¶ª«¬²¬»¶´Àº½ÆÇÅËÐÏÐÒÍÇÒ¾ÄÉþɾÃɯļ½Ã·¶¾¼²¶¸¿»¬·¶··Áľ¼¹¸­µ¶ª¯¸µ´¹¼´¸½·»´º¾¹¾³³´Ã±µ¶²±³´³³¨§ž˜œ—““Ž˜”˜—™›¡¢¥£¥¦±­«¬£§¡—‘Š€w|y}xqs}y|{wxuoqk_^cbaaab_d_ebneldae]Z][ZXX`YZYZ\YYRUSMSMWUSWTWLLOOIQVVSTLNPROLVKILPNJLVUOMRTGLSMGJNGHIMJLJGHRNJOQRKKROJUTQOWRTXP]WYZWX[\]Y[]XU[[ZV\Z_^XUWXUUU^aOVYUXW]VXWZZa^[_aVd][]]ea_dafX§¬±±«¤Ÿ¬¯´¦±­«±¬ª¯¸ª¯»­·­¦¤¢¬²·³¶·¼ÃÂÄÌÐÍÌ×ÓÔËÉÌÂÃÅË¿´ÅÈËÍÆÀ¼»½º»»´·¼»¼¹²¿»¿ºÀ¸È¾Á·«µ®¾µ¯¸¶»´¸¸³»¸··¼¹¼¿»Âº¼¶³¼Á·³³«¢Ÿ–‘’‘Ž™˜‘–𗤥Ÿ£™œ£¬±©¨ž–Š~zzu~vtuxxz}sut{vptrfghe^`a[ba\dadlckc^[ZUXZU[[^Y`YUWV[YKTVSPQVU\YGTQJHLHJUNRKFMFJHMGITPFSGQLNXQPIQGNGMFLCGMGKAPHMELOUOOMSPLPRVOULTUQPUOQUVYYYY^[WWXTUWXXdTZ[W[XSPTYXV_\WZ^LWY[W^VcdbcYZ]][]``YZ]b¯³³ª¥¦­®¯©©²««´ª¸¬®ª®¬¹»¬±¨¨©§®°³¯¶ºÍÄÆÇÍÓÔÉÄÁÁ¸¿ÄÈÃÇÅÅÀÇÆ¹»»»º­´«·µÀº¿´´®²Á»Ã¾À³µ´·ª·¶³º³»µ´¹§²°·¾·Á¸ºº»²²¸³´¸¸¶«¤¤«Ÿ£™•‘–“˜’‰–˜–ž—¤ž›££¦¤Ÿ¥™“‹‚ƒ}{xwwt~zyxtw|€yxyvzdci]j]gcd[]efjjhjma^YTWUSS\[\ZU\[[Y\WVUXUXYQQRXTQKMLROOKQPNDNQHFOQMNXPOWQUNTMSSUOHCDOFIJFGCGNNLJLIQLRRVNTTRWM^ZR[VVSTRVYXRX^VTRZ]XROWXUXXUTRQXTWST_[ZY[\W\]_cbaec\^SY^caeZ[\X^°­­®ª««ª°¶«ª§§¬¯¬®­±±­¶¸¶¸¶«ªª­­±¶¾»ÆÆÅËÍÐÐÊʼÄýÁ¿À»·À·½½²Àº¶¯¼¹Åº¸¿»¶¹½»º¶¾½Ä´¯²º±²´±­µ¹¶¹µ¬ª¶®´´»»®®³¼±¶¶µ²´±¦¬¡žž™–––ŽŽš˜“¢–žŸ£¨¤¡—›—Žˆ‚wpvsxv~vxuzqx€wrskolotnfbeceebea``eb_ad\aTX[SV[\W]]WRYT^[VTU]VX\YURRUSILSIIOPQNNHNIGOSUOSTULNSSNLRNNMUPIJJIICMKLFLEFHPJSNVLGMLORPQRMOUURRUYUV[SVY[XZS^WWS]Y\X_UZSTZSN]U]]Y]^S[Y\b`[\V`^[b\P__b^aade¨®²º·«´¦¬°°­©«´¶·´°®¯¶´¶Â«²µ«¬¬±®¹¿ÀÂÉÏÖÖÓÏÂÃÈÆÄ¿ÆÈÈͺƺÀÀ¾½Á¹´¶º´®´¬¯°Á³·¶»±º¹Â¼º¶²±­µ¯¯­²¸À¸º·°´¯³¸®¯¸²Æ²´¶²¯·­¤±§®§°¨¥••ŒŠ…Œ’™š š¡©˜¢›™Šy€rwyxv|x‚|vyyxvyxmuwtveaicjgjjceZ`]ee__b`[^RUYW`SV^V`T[`\^Z_PZYUZ^UNLLKNJNGNKMRMPJUSPPIRQVV[XVNP]XLSNRQLKOHIMIBEHGCEGMILKQOTGMLRPY]SQQZYSVX[V\YWWT[TWUSQSBSWb]QQV\WTYZR]XYXX[]^\ZYQX^[Vb\[Va[Zcc]]`c¬¬³¯±­²±¨®¬©¬¢­³°¯­¬µ·­¹¼²°·©¨ª§±²ºÀÁÆÇÌÆËѽÀÁÀÀÄÉÉÖÃÔÈÂÇ»¿¾É»¹¸¼·´²±¸³¸»¿¹»¸»°²¸¾¿»¬±¬±²µ²»·Ä³²²®¥µ«²®·¬®­¼ª·¸©±««³ª´²®£˜‘‹”—”˜Ÿ¢© ¡¦—•’‹{z~q{vtt}wtnv{wy~usjpoqqoioflddih]\bae\cad_bVYXSU^ZLT]VV^]X_[U^]UaWTLTPROKLHQQKNJQONOPNS[Y][XSWUVRQY[OXNPSMINNLEAGCGGKMLFHJMYQMLLMPFDPKMOR^QVYOVXTYXVRZ]TQMXXZW\b]VTNORYZX_`Z`\Zb_^YW]]W^YXSZYZ]Z^Za^b­´­°´°¹¯¦°°­¯®²±±°¶®±°´³»º³´´®«¦±¸ÂËÌÏÒ×ÈÐɽÅÇÅÑÍÃÏÍÈËÆÅ»Ä¼Ã¶À¹¹¸²²¦«²®¼Â̾¸·¾»¸¶¸¼¹¶µ³®±°°¹³¿¼¯°²°¯³±´®·¯«¸·°§¬©¨°­³µ®Ÿ”•Ž–ŽŒ“Œ—£¥¢ ™ ™•Š{tzu|zx…zw}}wzz~|~wsnsrupkkiqqljgia`^ig]^\c]aYZWUX\UVURR[a`a^\XZ\^bXUUSJKRMPNMIMWRONUN]XSS\][`ZYUTTXPVPLOSJUIFOMKHBDFIEPJMELGNQQKNFPJGOPMUWY^USWWZYZWTPXUTNV[YY]YRZQRXXPVZX]Z\WZTT_`QV_]^U\]\\_d\`__][`¦µ®µª²¶¬®«²«©·­¯´µ¸´·¬¯´¶´µ°±°®¯»Á¶ÃÈÈÒÆÆÄÁ¿ÇÅÁÂÒÅÐØÉÐÌÅ»ÁÁ¼º¸»½¹µ°¹°ª¼³ÃÅÀÿ¹»¼º¾½Ãµ¬²¶²°°¸µÁ¿µ³¯¬³µ°³ª­ª¦±¸º°°­ª£¤«±·¬£š™“‘–Œ–™¦§¢¡ž™‹‡€}xrrytxwvzstxyty}xqlsjpsoohflsffhh^\a[_f`_Waa_YVVZQ[PSTP[\[Z\]Z[Z^_`TU^TTTMNHEFPNNNTNPPVZa[[WcX\T][YTQUTPHPKPPKBGFJHRLIONLQNNOQLNQMIMLLLYVZZW]QWVQQNU[V^SZUTSYVWZYY]YVSYQV[Z\ZZYV^Z^X]W^a\WV]SXXgZ\c]_\©²«ª´­¯³§´´º¯±¸­´µ¹¶»²®®Á¿Å¸Ä²¶²·¿½ÇÄÃÆÇÇÊÂÅÐʺÒÓÔÌÕÊÌÉÆÅ¼Æ»Ä¶À½º½¶°ª³«©¶¾Á¼¸·»´¹Â´¶»³¾¸¶½²²º²²³·²²¶²²³¶¢­ ª®¶¼¦©§¨¨­®±²¢›‹“‘ŽŒ’•ššžž™‹…sxsnvzn||xwxtsxzxy{wjtruqnosqpnpuoffbX[^fegh\`a[a[[XT\VVOWSY`b]WaXa`Z[[ZWTPJLQFJLMPIRWSTYR]Z\YS^]X\]XW[VQULRGJKQGDFJFFNFNRFQDIHLNIHNPRURVSQMYZUUWVYWUUXOLTUYUUTZ[\ZZU\NSMHYS\R]\cYQTYSWYWT[WZ`]VYZb\[YZUf¨®§ªµ®©ª¨µµ®®¸²´·¸®¶¼¶¶º¯¸®µ¸·´µ·½ÈÆÁľĹ¿ÂÁÈËÈËÏØÊÎÉËËÃÇÀÀµ¿¼¯µµºÁ·º±°»½ÉÈÀÀ¼¸º¸¿·¿¯´¯¶­°µ¾¬´ª®­´®³±¨·´°©¦¤®°«±§«¬§«°ª§¢ž–•—¢’–’“––’”š‡z}qqwquxqzysqmxxy{zyopffqmpsshmfinmk`b]b[]eaZ\[[]W[bYW`][TPWcYTZ]cb`dY[b^`SMNQIIRRRPQXSZ]TYY[^^ZX[YVQaWSTPOKEKEOIMGOKJKLLOKIHMIQSKIKLTKNPHQDKRGU[V\TUbPTWLZTWSSVPTXUW]ZWXR[UZV[XW]PVd\[Z`^\X]^XWWaabQbc_^^œœ¨µ¬¦±§«¯ª¯¦´´¸·´»²µµÀ´¹Â¿¹²´»´·ÀÃÊÈÃû»º¹½Å¿ÅÉÉÉÍÇÉÄ·¾¿ÀÀÆÄÁ²®¶»¸µº²°±·ÂÁ͵µ¿¶³¾¶º¹¶ººµ¸°¶¸³µ´·«°¸½µ¬¥¦²¡¦«®©œ¬¦¬§¦¥›œ––”“š–•™˜‘‹ˆ€xtnfrwuvyw}yxplwqrywsvktlpvqtvzqlmmqb]\^_\baY\c^`_f]\XV[U[\X`Ye^\Xbc`Z^bbVWTTROMQIMOJOVTYXYTWVTOV\X[ZWVUWIPIHIDGFGELMHOKQPOORGBCMILKONNQTMRQTSQV`XUVWYPWSXXUOQYUTSUWY[XXWMQW[_\[Z\Ta_Z_X]][]\\UXS][X]cVc`\§§°¬¨©ª®¥®§­²¼­¸½»¼Á»»¬®²¾¾¹¹¼Á·¹½Ä¾Ã¾Å¶Ç¼ÀÅÃÎÆÃ¹ÆÄÂɼÁº¾¾½È¸¸±¶±¼Á´·²´¦º½Â¼¿¾À¶½»½¸ºµ·¬º½Á¼·±³µ±ºº±»»¬´©£¤¦®¯·¯¬§¢®›©¤§ª¢£š“—• “—ŒŒ†xxqkqqihlp|ytzrorxkvvwvntlpronvvuoome_c^[Xe`Y[c^c^cf_`WZ[XYbc_U^\YdZ^^[\[]X_[XSUOPWQNQQWS]R]^XZYURYVTO]XPSNKFABB@CIILKFILMIRJHLJKMUNKBLJNJNKLQJLQSQUT[XRRPWYSTXUVOY\[PS\XYSWXM[VX\W^d\XZRV_ZY^a_ZNbV[X^aba^`§¸¯®¦¦§Ÿ­¨«°°µª··¶³´·ÄÂÅ»ºÂÄÀ»·¸²»µ¸½»¸µ´ÂÂÆÃÁ½¸º¿¼¿Ìȼþ¾ÃÅÀÀ±¾³³ÁÁ¶­¯¹´Á¼º´º½»¸¿´·´¹¸È¼½¼¶·¬ª¯±µ´¼¸¼²¯«£¡¨©­°²¥§ ¤¡ ¢ ¢¡¡•—œ•—˜—”ƒˆ~othnmgqvvuv|€}zywvw|rsvlldqulonvpsph_jdb[Ycga__dc^Zff^\]a\\[`[X\Y`_^bc`]cea_]aSVWPIOIKKLZ[Q^W]YPTSZUTQUWSMMIQLQFEGHDGJKDFJQWWNILDGLJKHOLOHHSQLMOPRWSTQTRUKLTSOWXXWaZWTPRSX\MY^]SYTTX]YX[QV\_Wace`RT]VVY\_\``£¡ªª©¯±¨¡®¬¯©µ²²¼½·ÈÀ¹¶¶±½ÂÈÄÁ··µ»ÃÄÀ³¸¶·¹ÁÎÒÁ¿·¸»½µ¾¾¸»º¾ºÂ»¾º»·Ç¿º¸½º¹º¿¿ºµµµº´µ´··®»±¶Áü¹³³µ®®´¶°¸¿²®«µ¯¨±¥ª¬¥™©Ÿ¢–£¤™¢¦˜ž›ž—Šƒxtj\jhfkoqxuwszxwzvzrvnmirylqkvpqjpoqhhddiSb`cbbb\ecfbZb][Z\_]\UYRUS]ad_ac^i[`i\YXSJKTUWVNYWYY[WW_X\aYbUXZRGQBKOEGJMGFKIGKBPUPWGHHINNKRNMPPLMQMPPPPKMQTRUQOPNVSPWPOZRUYXPU^[`UJRSWW\\V_XZWX^[_a`_^[[XX[^]`b_``«­©¤®¬ª©§³¨«°­®³²´¼ºÂËÉú»¾¹¹¿»¾·²¼Âʏ¸¸À½¾Ì»¸¸¾¼½¿Ç¿¼·¿Ã½Á½½ºÀ¾Á¾Êµ³¼Æ»¸»±¼¾µ¼¹µ´·¾Â¼¼¸¶³¹¶¯­§´­º»´­­®§©§®¬­§¬©¯« Ÿ£ ŸŸ—™š—•‘†‰ljU^aberqrpuwyu~{xzvreqmpoqjknnkmqjga`bc^e`]\hbl`b_a]]^][VW\ZZU_TVed\[`[dc`^cdVYOPSHLUU[V\XVTZ^[T[[YXSZUQPLFHKNGGDHHGGMNCDMSSTVKIRSSLCMHJOKJQKMMVWSLSNNIUKTTNPKWUUZW[]YXRVUabXXOT^SW[ZbS]PYa]^^cd^V[`\a^Xb\]§¢¤²®¦«©¯­¥«·µ´¯¶º¿¿ÄÇú°µ²¶ºº¶¿ºÀ¾½¸²¼¹·Ä¹ÅÁ»¾»¾»Ä¾¼½²¶¼´±½Á¸¸·Àµ·Àº»ÁÂÂÁ²¸´±¼½ºµ±«·¸¼ÂÀ·º¯«´ª·¯¯¨¸°Á¬¦¦©¢­¨¶¨¬¥§¥£šŸ§¥žœ¢ž¤‘†tg_WQNYXhstvpprxyxqvvpknvsrqsqrhomighgjajd_affhgne_f\cbb\VVd]WZ^aZW[^YZ]WXX`^V_ZYSPVPSOSN`Z\`W]a]U]`ZfWVVNCINQPOGHH>IOACLDHSWQURMWPPNQMIIRIEJONKRRMOPXQTRUIUWXYUSP`[YXVW]TR^VYZXWQWYWX]WO]V[_cbY[YX^`^YZXZaaZ¯¥¦¯ªµ´¯µ®¢¦«ªª¹³¼¾¶ÇÉÁ¼Å¶®²·¯¶¾³»Êļ¹½Á¸¸ºÀ½·¹­¸Å»ºÉÈÀÄ»¸»¶À޾½¼¿Ã¼¶¼¸É²½¾Ä¿¾±²±¯¹»¸ÀÁÁ¾µ¯´­´±¯­²ºµ¦©§¨©¦¨­²¥¦§ž¥¥ œš–¢ŸŸ¢”•–ypcONJMQ[bklmxtyzz}u}trrpnffqoonwfi`enncbbhefgbkacdc_fh]]YYRUPY`\Za]^b`hc_[]Z`VZY^\UTSP[YJN\\YQ[cZSVWVS[a\X[UWRNNJMOCHGJJEEFBEHSSKSJHSMOQKLGQOHNNRQSMRLTPLPUWURRMJLRMQQTYW]VOY[WRTPNTSWVXY[VRPW\X]VXXV][T[YYWWc`Y®«®¬³º±³ª¬¬°®¬²±´±³·¾¿Æ¹¸¸·±¬®®¸ÅÄÁÇÄ»¿Àºº¹Å½º»³¶º¾¶¼¹¹µ¹¶´¹ººº´¼À»½´´»ÅÁÁ¿Ä¾½ºÃ¿µ¶²¬À´»½´·³·®±«´­°®ªº®µ³§§­§¯¯­§¨¨¡¡¥›£žŸ™«˜˜–›‹“„uo\RKFDIU]ebkpsmtv{sxtrknkmnhrnkmojmmejnfchbdkf`_ef`aafaa[WSTT`aZZZ_^]daaVXUYZY\Z[XW\PVURRRX\W]^``b\^VXX[\[TTQHLGGILKGHFFJG?CBPQUTQQLRPQNSPOSMNIGPVYNQKINPUPOOPPLTWXQQMWT_\TQURSSU[SVRTY\_UUXPVYXaYWX[\VZWZXY^e\]´²º³³®²©®´ª´¹¼¿¾´­µ·ÂÁº¹»­³´½¼±¸­Ä¼ÇÃϻƾ¹Â¿É¾«²¶¼±¶¿ÀÀÁÀº¿½½¸¾¿Á¾¶´·»¾ÄžºÅº·À¾¾°»½·°³±±»¼»¸µ·®«±·¯ª¶²²­««§¢ª¥®¤¬£™Ÿ£©œ››™–’ŒŽ‹ˆ†zrZTLHNNUalkolsoovrmqk`hgdgkimlnivpnkei`kfjeedglcbc_\f^]a[]ZSW\W[gdWX`\`YUVTZYYZ]WUU[TVPRRNVXY^`aZ[_ZVU`]XXRSOQHFEGNPIJFBHMBHHFMNKUMKNNSIKHKGGSPKPWVLNPIOSNXPWPRKQSRXPWSVVVXWZWVXQRMSTZZcYUOROS[V\[^WXYXZc_\YeagY±²´À¸´·´®¸­´´·´¼°¶º¸µ±½Ã¼²³¬»µ½ºÁ¸Æ¾É½·¿¶ÀºÅ»¿¾³»¸¯²¶»»·¹·»°À½½Æ¼º®ººÀ¹¿Ã¹ºÅ¸¹·Â±³¼´³²²¶µ¶½»¹¶°®²¾­³°³µ°ª¨¥¨¥§«¥©¦©¢•š¡—šš“–‹‹Œ†}ƒ~}jc[QTMPS\irnljpmrvpmjd_gblbnljotvkkieadbcajf`dcecVY[bfbZ\YTV[]W^Ze^aV]a^^T[RSNUVUXV^\YSSMVWSUW[U[_\ZVSU[bWWZOONMKLTMLJGLGPDIOQPSXHFTQPHPLQSKGFJMNPPSKIOKLXVUXSWOYVZWVVW`]YZTZUW[YY[NOSYX]ZTWVZY[[[_X\VY[\cc^]cbb¹¿À»³½º´µ±¶³¼ºÆ¶½­±®´¹·½½µ¶À´½³±°·³È¿Ä¼µÊºÁÂÁø¿À´²±º¹¸¼½¸½¹½¹¾À¸º·º³µµ¿ÃÆÈÊÊ¿²¼¹¼Ã¶°¹µ¶µ»´°³±«ª­²²­¬°µ©£®§£«§«¤ž˜¢›¡šŒŽ‹„y|{|€|kkcV^XW[dgdkmqgopqjiehic\iloimqireof`^\Vc[_dcdgdcdcaab^Y\UQVTVW[Z_W[`]WXORWYQRR\S\QU\[TUUWTRSY\YW[]ZUV][]^U]RDOPELKGLIE?NDLJOWVTRKPQROPQIGILKONMMGOTSPLJNOXWWPQNRLTVRXQVSZ[RV[[SPSPTR^XX_QQYT_WZWaUWWYX[c[d[^]VQ»¹Åº´¼¸¹µª¶³¾Á³Àµ¶»½¸¼ÁĶ­¾­·º¾¯¹±±´Â³½Ã¹»Æ¾¿¶´µ¹²±¶º¸½¼²¹²Ã¹½¼³À¹»³»»¼ÆÅùº¿¸¼¼¹¶²·®ª­³´´º¬º¦°®­®§°©°¯­¥¡Ÿª«ª£¤¥œ›–™˜‡‚‹|xtxoohe`[\elrkmhkinhfad`ddeqjnpee[ephe_aW\[^adk]ee_d]Uih`\aZTTZVT[`[_XT[\^U\VTZRY[UU]Y]RYVU^`TY_XV]SYQYN[WTRVXPKLLOLOLJGIDIJKJIOPORKOWUJOGRHQJIORJMLUMJKPMPMOUV\WXRKVSVVWZT^ZXVT\_b^\XXSYZ\XPOR\]cYZXYYV]`b`\_\][W¿¾ºµº·´°²´±´´¾ÅÄÁº¸¨·­½¼¶¹®º²´³¼´··²®¸µµ¾½¸¿¿º²½¹¿°¤·°¹·¿¸¶·½¸È¸»¿·³±ÂżÁÅÄÆ»À¿»½¼¾½¶´´º¶µ½·¸Ã´±¹®®¦²¦§«¤ °¸±²¦¨ž™–ˆŒ…†…{ww}{ƒ€yzkkccohnjkhhnkkhggdoddaYkeip`f]_d`X`X^`\fe`mfem]bc_]^dc^XP\]ZbZZUZWZUYTQYUPQT^T[[[XYPUYWYY]Xa`XX[SWV^XTWOJPKQFMMKLDEKELOHTHSSTNHPPOPEPMKHKMQSMHOFQTNQQWSWWZKW\TNQTZUZ]Y\ZaWX\\UY]UYSXV[TZX\WUXYZY^X_V_TWX[[X[½¹Ä½¸­¶®®³®´·´»Äü¹¶¸¾¾¾¶¼³¯°¸»¼·³¨¯°´³¶»¾Ä¿¹¼¾»·®³±µ·º¼º´¸¼º»¯ºÁ²¶¼¸ÂÃÁÁÀÉÁ¸Á̺¾±°¶·´®¿¹±®¹º¾µ¾­´±§ª©©«®«µ´·±¬£›•’ƒ‡‰„€~€||xux‡€‚†ˆxuuholpqlfgfi`d``kfcgjphbc`Z]ijc[cc_Z^_eeUbagfZ\_`Y[]`]Z[`]XZ^Z[PXUUYXUYW[PTXSZ\VWT\]VWW[Z\VZVRXURO[\U[TQRJINJMJHMMIFKQPSYRZUSUSTSMIMLNUMLNWJMOQMOPMUXOT]UNSSRTOQR]ZZX`XV\__\U[UMVXVVTJXTWUY`Y^]VWZYWXQYRS^Y¶¾À»ºº®º««¬¯°´·½Ä¶µ²¸±¹¿¸²°¸´½»¶µ¶µ­²´²®¹½³ººÁÄÁ½¶¹³¯¶¯°±±µ³±»¾Á½¸ÂÀ¿ÁÀÅÂÅÂÀº¿Ã¸½º½¼¹»­­²®µ´±Á¿À³½·§¬ª¯©®¯º¯·¥¤›’Š|~„~„‚|||}yxr{€ˆ€€|~tppksbjfgkhihjjhkmgggcf`][`]e]dacebcccaa_ffgf[^ga`ZZ\ZXM\R\_a]WTKPVQZ^^[TXVPX]V]ZY\O\X[X^\U^WT[XXW[X\VYNRMMKLHIMMLKJJQSSJQTTOSWNUTSUTMHMOOJOMROTWSSRRVWWOZVRXHLTYUYXYTXWf[^[VTTXY\TQRXXUX]Y^VX\Va]YaU_X^_b[Ŷ±«¯ºµ®¹«²±±»¹¼±¸¯©¶´±¿·¯°¶À¸¶º¾´°¹´µ·ª´¶²²ÂÇÍÁÈ»³·¬¬©¨­­¯«²½¹ÅÃŹ»»¸ÀÄÄ»»¾½¾Â¿Ä³½¶­¹¹¯®¹¾¶µ·¶º®´­¨«¦¥­²·±°®›’‹‡‚{tz„‚~ƒ…}~oxyl€~~x†vrttlrmpfhtnddljgcafehbeigg_`d\af`gdaefia^^[la]a_U``YZUWXYTS][]ZSUQVOP`U_XXQSZNSWXYXVOWVLR[SURROWSU^Xc]Y]WXSIOHINGMK@ANOOUVZPSNP[TRTRTONJXRPRLPOQSNPQQMKRXGNOQNOTNSVRZZSSOWX]\YTX_Y[\Z][[Q[WZheaV\^^[\[UYaVU[¶º¹¹¸»»»·¯µ¯·³Àº»°°±­µº»µÀµ¸·º¾¿¸µ¸À´»©·µ·¹»»¾¶Á¼¼´±»·µ·°¶¯²½¹¹ÆÂÍŽ¼¹¿³À´¶º²·°¯²¬²±­µº²³µ¶¸º»¶±¬®¬«¢§¯·¹¸¬¬¦•‹…uvwxv€v|ƒ||wz}yytsv{}swzwslgiedinfbeehkkh`akd]eW`Ydkecagmc^mcd^h]bage^`a]XZYQQZUQ^`YYRRTTWSY_ZYROUNTYYUU]SQUXT_cW^U]NUYYScXYVVMORMLIOHLKBSKRNVXWSUW[X]QNSRRN\RNWQQGISUVXNPPPGPTNZMMUHPTZYSUNP\SUWVTY^ZWXWYYcXeaRYZ\[]\ZZYUQY[Z`\b½®·¹¶¾µÀ»À¸·¶³·¿¼º¶«¯´¼¯²¸º½¹¹ÄǸÀ½¶·¹º·¸¶¸·À¿Àº¼µ¼¹´¶ª³«³³®²±¿»ÅÁÉÅÁ»Àµ¹¶µ²¯¹´´­ª¶¯µ°¼²·°´¸¶°²«²¯ª©£­¡°°µ­®¥Ÿ—‚ˆ€xx{~wx~y†~ƒ~txx{x„{q}usjuwtilklnmmhfkcfjhc[dehd\bb]]`ordjlemhec`dhfVheXX^]QVVXTVTSa`ZSWPPSU[[babWWUUZYZYTYUSSYWVSNV^XVWQZZWZ[]SUPTLUJRTPLLHNXRRQWSTUVTRNS[O[WQ]XR[XGSYVMUUPYQTOLZUTJNOPOOXWWUTOW\NW\TQY]]^R\[XZY\c`[a]`^[UWXY]b_`Zǽ¼½¶¹¸¶´´¸¹¿¶½ÁÀ½·°±°·¶·±¸´ºÀ»¼Á»¼¸¼½½·¸¿½¼Á´À»¶±¶ºÀ±»¯·¯¸¹¯»º¼½ÒÏÌÃÄÁ¸¿¾¹¼»²º´¶¸¨²°¼³±º´³­ª®«²®²¨ªžž¥¦¸²µŸ”~}tuzyuw~{†vw{yq|wt~znricjrmmkpjnefchadebci`eghb`babamccgkdhdhff^Y`aeaZeaZc\WNZUXZWXW][RTW\[X_XUPOKQW^YPTZRXVW`_WWTX[TT^^XeZT^SYWLOHLLKLIMLJSNMUNYWURUN\Y[PTQQSRTTMWOSYTRLOJEHKTOSTKQHNZNTTOOQQ_[ZYR]XZPRYW\]\XW\`ca_^aV[TY[Z]Yaa½¸¹º°·¹¸¾¾¼ººÄ»¼¶»²ª¸³¶²·µ¶¼±À»ÀĺÁ¼ÅüÄŽý³·µ¾¨¨·³Á¶°·±¯²»³·À»ÏÊËÆ¿ÁÄÇ·¿»¼·¯³º»¸±¬¥°³±³¸®®¦©±£·¬œ¦¦¬¬³²¬Ÿš’†}|u{wy~||z|||t€}qxuvpxutlrqnokohilfd`e]l^dc_djhelcfg[gde^bdehbeffZdd]acq^]YVVUXPSVXZVVXV[WXR[\Xe]^TXTZUcTSOZ\OSTVYOUSXTX]W[cZWXRVUUVQKNRWLUPVQMRXRTKSYYS[U\UXTXeUUSWPSUOVUNZXTSKQQNRSNJKMIOVOUTQTRVWUUO\\]WZ^[bZWYZ^a``_V]WU[Zd^U_]¼½½¶¸­¸¯²¼·¿¼À¾µ¶´¶¹³ºÄÁ½½·ºµ°ºÀÆÅ·¿ÂƼ¼¼¿ÃÀ¿Ä»´¨²»µ´»Á±µ½¹¸¯¸¶Á½ÅËÇø¼³¹Á¾²¸¼½­¯®¶°§©¬¶®­«´«³¬¬ª¦¯«±²««¯­¦¡Ž‡}vwx|€}~y{|qv~€|{szpxpywulvifojtsgkfifea^becgdcihgj`^][\c_njcgcmhb_Z[\abZ[]_OPQZYTU[YZaXXU\UPWQP[WTVVZOUWVTROVNPYQWXRSX[[XV_WXP^`[SWNQUUQSLROQPOPYTV^[\Z[`]XVYPRVYRUSXTXRURX[bWSQHNOKVMPPGNQPRPQKWTVSTOUZWZS\X\[[X^[XYWZ^UXZV\[`e``UÇ¿¿¹½±«¶±®¶½¹¶¶»Ã»µ¾¶¼¸»¹²®·´´¶½·¶ÀÂÂÃÀ½¿¶¼¿Å»¼¾±©¶·¾»¿¼·¹¸¼·³³½ÀÁÄÁÁ¼¼¹Åü±´µ³µ²¯µ´¨§°§¡¬±§ ¦ª§¥²¯µ­ª³¯¬¢‹Šzw~qzwˆƒ{yurtoz}qlsqoqowx~uqkinqjsiypgi`ef_cd\]_ekchebZ`]]_k_jehgj`c]`[^[bV_bd\\\[XZ]TYaV^VSYVUVXaVV][QTUWXMQNUQRUZORZXXUVXX[^YS[Z]]W]WWVQZJRXPLQRUUTNYUXR\UbR\SWQVSRNS^TV[QSSVWPMIONSTMMHEHJ[SUO\QPPWSUS]^Y^\P`][^c_Z\\^^^XZVW`[\ea\]Áûº«´®´°«´·¸º¬¨´º¸¶º¸½Â½·½·´¹µ¹¸¹¶½È¿º¾¹¾ÌÎÇÂź²¹»¸¾ºÂÁ³²´µ¸Á¼½ÈÁ¾¶Ä½¿¸º¹³´¶¶´¸±´¤¬¨­¨±­¨›Ÿ¦­««³¸²¶®²¬Ÿ˜ˆywmzur‚{}vzvqptusltqslxutsoloilqqvtqrrkcimmlmdbcbhmfece[X[^lkqiodcc_[]VZ\a\_`cXYVYXW]^YZZXYUVWTXYX^XXSW[UTSSQVVPM_[WUUSRKR[[V[_NO[Y\XTTSWOPRTTTVQURRTJSR]X\cW`[[VPWNSUK[ZTWUTXSYWNQVSOQJLNHQLNKOWXWQYQOQLYV[Z\V\[_f\Xa`dV[^^Sb^^Z\^_[X¾Á»¸­®²µ¸±¸²°³²·¶·±¿µ½ÆÄ¿º½´º¼»½¾­»¾Â¾¾²Á¸µÂ¹»·¼·¶µÀ¸¼Â¾·½¼³±¹°ÅÁ¿Âȶ°³¸¶¿ºº¸·½Àµ¸³³«°¨¡ª«ª´¡¦ª¨«§®°´¸±¬¥’’usxko{vz‚{sossotsrllmovrsotnwtskgorupgec`ioligc``dfce`beda_^fbilgg_``c[\^\`]bZ`]SYZVT`VVLYY`S[PXXbRYWWjWdZZSWHZMWTRSUZVRTYXZTX\USVX\^ZWXUYUXTSPUOSTYQWOSR[V[]VXUTRMRLUGIUP[[X[\ZVTPWRMNNLQMHOKOQIRLQT[MOQPTUZUXWSYZaaXYUY_]^YX`[_VT_^d`È¿¿Á»´±«¸»°µ·¿´®³±²¯¼Ã»¹º¹ÃÀ»ÁÂÀ½»±ÀÀ¸½¿¾¹¸Ã¸²ºÄÅÄ·»¼·¾º½º¹º¸¹³ÀÅû·¹µ¸µ¹µ°¶¿»´ºµ¯²±¬°°ª©¬©¬ª§££®°²¶µ³° —Œywurtqqqxtt†ytoqnmossrnmrnqnsotriqjlsrrjfdadimlni`_^^bcebhbdZ\Y^afooqhkad][[_WZb_c_a^]a[Z[[WZTPVQPZOYNPZPXSWUVRQWLNVVTRVYSSTNQQOYWRPUY\\ZTWUUVTSQSVWSSWRQWMHTWW[XeVWQWPVVVMPUSZUVZZVTQVNNTRSUTRULOOPSOSJXSVQPVTWYV\[_Y[aYWVXWWVUcWc\^YUUZZÄ»¼º¹¸½¸¹·³¼³²´²¹·¬»µµÃÀ¼¶Á½¼¼½¹¼½³´¸·½¿µµ¶²º´Äº½»»¹¼¹ººÈÂÀÃÇľÀÄ¿¿¿Á··µ°¹²³¼³¼¶¼·¹ª¯°œ¥­´´°«¥ ª°º­¹¸©¨¥‹‰wyxotnnowsvvxnmsjmpqnmkgrrqzkmvovonmrdmpseY[gumggge[Zf]ada]dbb[_eeql_im_b]\\`daX^eXUbZXVRMVQVMUVQXTNXSWYZ[VSYPYVSVUYSTXOQKVQVVX\PVWT\[S]TVWQPRTQRUSUJQZXXQTSWST^]QWLINROMJHVWUSTWWQ]XSQQWNUNKOFRQLRNOULHKPMOTVSPZ]WZZ\Y]YYUX\b\bWVYWZWV`_¹ÃÁ¼Á»»±º½µ²´±°¸²Áú¼¶ÇÌÃÀ²¯¼ÀüÁ´·¶°¯½µ°¸«¸µµ½¿¾¶Ã¹±ººË¸Â½²º½º¼¼ËÎÃÁ½º½´¶¶¸³¹»¾·±µµ¯ª¯¬°¬®®«ª³±±Ã·²³¢ž’ƒ†uyvnlegvnnvymmmlmtnnisjpknwolphirinmvsif]_abgnffcag_cifc_ce^Y\a`amonmgd^ab\\_]`kgadX[]WY]ZYXTXPTXUOUTQS`S]TTTX_SJOXYPRPPTPXWNROQPNW\\`Yb\UVZVVXTXUXTRWQXZVP[Y[[a_RYRL[XNRLOTHTVWTWSTSZTNUNTROKRLIOLTRMVOJKSPQXX[[Y_[a_^YTVU^MaadV^\WXSYedÅ¿ÂÁ¾»¸´´¶¹«±¶­¹³¹µ»ÌÂÆÄÁ·¹¶·±É¼Æ»¼µÁ¬µ³¹®´««¶µ¸¶²¶¿®½½ÄÊÂǵ½¹¸ÀÀ¾Ä¿¾ºº¸µ¬Á®·µ¹½½¸®°²©±«·´¸º°§°©·³³´ª¤œ“ƒwsqpknblfsyt}wlohwxyspkonpksuhpeflmuipjpaeofahkhcb\\^e`^ia`ab`Wdce_kj`hj_baZ`\T`bcj]_\]cY^]YYTYZWQYRR\UYVYZYUQ[XYOPQUOPPHW_YQXOPOQVUYRVZX\WXWWSVPRPSROTPWVSRQV^UcYVVRTSRUXVSKKNOTRPSTRUQLOJTIOMMLKOUMSKKIKMNPQSIVXWYVY\]XTVZYQcU_Z[YX^W_aj·¾´¼º¹µ·µ©­©­°±±°º¼¿ÀÌÄÈ·»¸¾´½¶²Â¼½±¸°µÀ¯±§¦±¿Æ½»½»·À¸¾½¿ÆÊ¼·´µ´½¼Â¼¼µ¼¶«±´ª®¬µµ±°¸®µ²³´·¾»¦«¢©§©¨¤©¡“‚|tlurmqjljlomitwvsnqsvoiokpppqsvqivhjpmoqmbdciemikiaa_^``\\Ze\f\U]\cjhqlgcb][Z``\\^^`c\b\e`_^__XYXUVZOXUPXW[YTUTR]YWTXLKOIPVZWNSRRUWURWQZ_VS[XWWYYXQXZVTXNRY[QX\\ZWXXYVTXXYXRILIQPRUWVU\SX\[VSSQMROLMQNFFLROFVJOSORWTTYS[\XYTX_]V^][b]W\S[g`Ž·»¹³·¿°µ­¯¯­¬¹¶½¶½ÅÅÉÄÁ´Á²½¾»»Åꏴ¹´¹º©®ª¯­ºº¶»²¸Àö³¿ÊÁÿ¾¶¨±´·º¿º²½½®³µ¬¤¬³®°¸¨§­¨±°®°¨§§ª¥ª¯¬²¡˜Žƒˆ}{uoslhleaorimsqhqozrolsmpqrmnlnedlgktkmila`bfhqmd`[g]^aV]]\^_[`[^^i`b`cbZie_\d[]^feib`]Zd_WXZ[UXRPMYTVYXQVOSYTPLU[PNORNRPZ\ZYWWKPKLXXWVW\`ZYYYYVUQRSTZX[WW^\UZSSVQaXXTYKQPUSKVRFWOVPLTURSSNNTIJNJMSMNOBJLMOJEIRSMOZYYMZ]\RWZY[\[WXX^YXXZYUÈÂÀ¿¶¯°º±¶©©¹´¸®²²¹¿·ÁÂý®·¿¹ÇÁÁ·Ä½¿½¼³Á»³«³°ºÁ»»³­²³´¶¸»ºÅ¸Æ¹µ§®»¸ÁºÄ¶¹¹±´©«£ª£¬©®­©µ³µ©«ª¯¡§š«¡§›ž¦“‡…ysyqpjnpqrnicjkuqpysqmowimnvpmnmobghiggd^mdaYXb]^a`[Zaab\a^^_^d^YXb[g`cb_eYcbgff\^Z^ab_cee^__ccWbUUXRRVVXTWTPXVMXOXVNRRPRQKQV]STRNPRUNVWXXW[WQ\[[]VPLSYZRPIPQ\V\RO[[a]\WZSMMQSPIKMITQWUXVRYRMTLPROSIMINFHMNJRNRBIIIOFQOWX[Z]\^X_[Xb_^Y[X\V[[½È¶º»½¾¼¶¸²°µ¹²´»¿ÊÁÄÀ¾¶·¶»¿µÉ¿À»·¶ºÀ·¾½³«°¹²µºÁ±·¯¸¶°¹¹¾Á¿Á¶±«¶µ²²·¾º¾··¬°§¡©¦©¡¬¥©·´³¬¨±®©«¥˜—’œ™š”‘ƒ}ztwnqqhghiqlornoketrnuvzmqmiibi_fb^lbmidmf_e`dcgaYX_bbb`e^b`bcd`XWYccacffhakkc]YdX\\``fZba_V]_YZZVSUVXNS[[VW\V`NSXNSYRMOQTVYWUVURPOYYVUYZRXZZZ[W][TYTUT\XQUVY][ZVX\]^Z[TMXPWUNMKIOUPNQTUVZZSUTLRNMMLQJFKECDSLJHDPKJSNVY^]cZ]][\V]Zb\_d\[`\ZÇþû¸¶¹¹µ¸µ·¹µ©µ¿ºµ¶½¼Æ¼º²¹ÂÃÀ¹¸»µµ´µµ»¹¹ª¦²·¶¼·¶·µº»²´¹®¸¸Ë²²µº°¸½¸º¼¸©ª¦© ¦¬¦©²©ª°®­°¦¤¥¤œ™‘˜ ”••ˆzmprkntlqmpnrwrtllpjosmputdbba\^\^`hcdcbg\g^][W\]V_]^]Z\\\Z][[^^[\W]Ze[[ielhhldaY\^a_ZZcZcc^Z]\WVU[LRQRaZ^]WUWYSPQLPVNPOLILVPSNTQSYTSUTTRXU\X_aYT]WTVQ^[O^RT[YZU\XZU\W[TRSOLMKHHLNRPQW\SVSZXRPOPOOHSNHDNOHJQLEOQOOJGQMVSXX[\YWZ\XZd[W][^X_bÄÁúÀƾ»¾¹¹»·¹¹³¯»ÀÁ¿½·¹°Ã·É¿º¹¶´´°±¶Ã³³¬­©»±¶¶¸¹´®¾·°¸±´³¼Ë¿·´µ¼¹º½··­¯¨­¦¤¡¥¡¢š—™¤¥ ¦¥°¤©œŽ’‹ŽƒŽ‰ƒz„snmkindodlpinikjrqijmrnidka[Z\dYW]dlq__^bc^]ZY\MNVXa[a_`_^abh\[\TTS[\^_egkcgf`_]ZX]b\`ZZXY[Y]USXa]PUZX]d_TW\UKNHORRTNSPFRUSXSZXTRVSZUYSVUSWd_YYTOZZYWSYRVRSNSRSYYUU[PXUQONSWGTQTQCQNUTWTTWQRUQPROPKJEOADOJHOPQIPMUPSPUQU^VS[YZ]WZ]\a\Z_^b^˶½½ºÃ¾Æ¼½ÁÅÊÀÀ³¹¹½¼½½¸»²±¸½ÅÂÀ¾½¹µ­²¯¼°®¶®®¶¸»»²·ª¯»°®®¨¬²±º·²´³µ²¸µ¶¸µ°¥¢©¢¥œ¢¦¡™žœ «¤¥¥¨––˜’’Œ•ŠŒŒ†~s|qgfikjbkoursxvmlkpermosjbbXMSRTTWb]beca_b`aYMUSKLS]\h[W`[XZX^RYWTaZ^Yc[d`ige`g`W`V]XZa^\YZ`SV^WS`XY[_WaZbU[SVSLNNQNJKOOILTSTVSRUSQSXUST[WZWT`Qd^aWRZW]XL[KSNMWZ^SYKRMSUXQRONQHQFHMMPW]MWSOPJMOMONMOGK?JCLMJNNOMQLMPOQWWYXV[`SWZ_V^Z\]e\_c·´ÄÃÈÀ½ÁºÃ¾ÀƻȰ¸»¹º¾·µ´®¯³¿Àž»Á³··¹Á½±¼³¬µ¸¹¿³µ«³«­³¬­¨¯¨°¹¹µ¼­®·°²®µ«¤¥šœ ˜¢§œŸ¢ž¡¦Ÿ¢™ š›—”Š˜”ŠŠŠƒ„†…{}tqmnfejlenomunonqmptopljggZXPLHLW[[jci`beeZ`OUOGIGOW[WZ`XTPUTOXVV[[[_[f]b`cckdg__]_ZX]V\YYYYSRUMUUX\[^V[YYTVPIIGINPUTRSRPQORWSYQRTQ^[]WOYTQZWR_RZ_YSUPTSUKPSOPUURZROPVSRKTUTVOIUPKMKSUXT_SUMLNGKGFLCIILFJQNIGKUFIQOTQTUUUZUXW\`Z[\UURTfVdd¶³¿ÂÁ̸ÂÀÁº¶¿ÁÁÀ¾Á·²´º¬±²¨Á¶Çľ¾·¶´·®¸¶±µ²µº»¹µ¨¦²¨´¸¯«¦ ¬¢±³®±°³³®®ª­  ¢ ˜£¡ ›“—”œ–š™Ÿ¡˜–“š‘”“„ƒ~‚{|msrnmi^kerppqomttuqpkokrfe]QHDE@GOX]gi]b_fX[_PLABPJMS[bccaWVUUTXWYRX[]\\Z[[b[j_bacaa^c`]b]UXVTSXTVSa[b\X^VWQLMKEEILONNIMOLOLRKVVVWZRS^W]YUXTVSRV[YY[WXLQWSX\SZYSWUUWWXNNSWTRMUPMPELPVNQRQOPMMPOJIQIFMHIGHHOGIIEKONQMOQXUMSVRSVR^^]_YV\_d_faµ·»´ÄÇǺ¿¼Á¸»¯³µÀ¼²»®®±­¹¯²¶³ÇÃÀƸ¿ººÄ¿¹²º±²²À¶±³±¤±¼°¬¯«®®¾´®´©¬®§§«£ Ÿœ‘—•œ•’™ŸœœšŸ”¡™“’‘ˆŒ†ˆ|ƒv}u{zokutegedkqoqkpxxxsuspgoj\YOI@ABKJW_df]c^cTSIJECGBRVX[c\X[UUWWTUV\We_^d_^]Z[^__`e]gY^W^Y[WX_^^TUW]V]b\UYLPPNNHIDBFQHGGOKQHKNJRTP^ZS^YZUWXZWRLRU`[Y]ZRRIWTUUWQZSVVY]\WXVSURPLNNOIGIPQPZYTQHSVRLJMGLVIPCLHLILOLTNLKPNNLSVTQJ^UMS^d\YY\WVca^]·³½ÍÀÂÀ¾¶¿±¯°´´·»²º¬¬¯®±«±²·½»Ã¼Ã¾À½¿¶¸¹±°«·´ºµ·¯«ª­·²º·³¬§©»Á»¶¬±¬® œ¥–›’™”˜žš¡”¡–š™•œ›™œ“‘މˆ‰‡‚yx|{y{€ntioihlmjmnnqsqntohhkuwh[SSHFJPNVY^afiicaWOIDGDAGIZZ`]cV[`[YVYX]^`Ya^_bcZ_\Zdebi\ache`YS[T_WW^]a[ZXXVVSOKECHAAABFHKROJTOKOPRLOXUZZXYX[YRTP\MVP_][SWZWU]U^SPTRXUaTYYXXPRS[ROFEGNQKMVQ\RZMRVKOKLLGMDHHMKHIFHMMOXKMKQMOKSRRTQJUUYY`]WR`[^aZc³ª²º·ÂµÃ»·©±®³ª³¹®µ©§§ªµ«´°¶ÀÅÆ¿ÃÀÍ¿³º¸³µ¯«©¶³·®²§§ª´³·ª·³¸°µ¶³³ª­¬®¡ŸŸ™“Ž”›Ÿ¡¨––—‘š—Š“’–‹ŠŒ„…€€q{yw{lyvxqqfjgnmkpssqemqpfpuqmb`RNPJINLR`de^dd]VWPIECIKPSUZ^^]TTTYU`WU`_\b`d]`[[UZ^][_Zde\][Xe\aX\U\XSUYOSLIPKJDEIBHH@FHIQHMHNGOQURLSXNZTY[WVTU]KYQX[WVXS_STVW\ZW]XZVW`ZaWQRWSVNWNLLLOPLPNQTYSPOVMOKMLIKFKHDMJOISUMTSPNPNNJKTLVZPY^[]]ZZVXW\\_[±µ±ÄÉÀÁ¾¯¬¦¦°¯®³¸««­®³³°·°´µ¸¸ÂÄÅ¿»»·¸À»¶¶¸³¶«·º¯®°­³¸»°ª³²®ª±²±³¦ž£¦”˜œ™›”˜“–šš—’Œ—–˜›’”ŽŒ‹‡†‰ƒ†svut~~rsytlimhhnmhiglqpqrpoovsuoe\ZSOTSZRU^dilefaYXUNKEMSRRZXY[[WY]OYXY[Sba\`_bfY\ZVWb^Zed^bi_^]Z^]^b[TPYZNPHAJICBB?C?<:AFFEIIMLPYUVZRZXXaaTPVSPUOQXVZYVVZYZRUX\U]U\]]_\W\YYWVMPXPPSRMKTNONO[LQQOTSVKJAMMHHEHKKHKPGHUITOESLTUYSUQTVNQSY_YRT`W^][Z°°µµ¿Å¼¸µ«©°µ°«·³³±¸·°¸²²«º±¬·ÅÇǺÊÁ±¼®²´ª±³¹«´±µ­µª··²¶­°µ´²²°¥¯¥£Ÿšš™’•œ‘˜˜˜•–•™››“‘ˆˆ‡‰ƒ}~xw€u|€urllmojlmioeoqjjpdinlqmoflf\\\XWZ\^a\hfdbcUQMTNNOYQUYY\[Z`a_\f[\X^X]bb_aaf[YV[aY\S_`^_cab]aZ`]ZWPQMKHGJG??=BCD@;>D?IDKGEANPSTZTQNWW]YTRWWVX[VSZX^^WXVVTRZUWWTXV\V^Z`\UTNXNYUSTTGMNQRJMOPRRNGIKOPMNNFGFJEHMKNPIHDOMLTQTVSVTTVSTXU[TWY[`ZZ^[®¨¶¿²Äźµ±±»¿®¯­¸³µ¬°²®¹µ½¯³¹·½·À»¶¶¾¾²¼³¯©±·®´º³·²°¯¬ºººº¬¬°±©¯©£˜¢ š”’——™›ž –›˜˜”š•–’‘“‘…‹‰„„}wzvyx|wsuqpmnohljqimpgqljgilfodliee`W]fdXbbehgdadZ[ROQONXZ]\S[ce]Y\\XU^YV[\a[[bcd]_\^^dd]a`ac^Z\SW^XWPSNNIAF@EB;<9D?CCIIGIMHMKTWSUOTWYUVVW[\USTZYZ[ZZVZZTTPOWXTRYYWU^_YVVQOTQOXV]TOKUPRNSTSYYSNOPMIMRFHGDCNOMSVNVOQMNNMSUS\OONQVZZWKXWNVYZYXZ«©³²°»»¹­°®µ²¶³¸´¿°³µ´·´²¸¶µµ³°¼±´½¼»°¸°°¿­±¾¹·¼º¾¼±¶¯®¶³»§¨£¯¤¥§§¡–—‘“”–“–™™’˜Œ—”‘’‹‘‡‰…ƒ‚y~v{w|~wnnrlqlrlhsrnpjihehbegoojjsl`g`]_c\eYdcdfe^YMS[[Wcb^ZZZU[baa``heWWRQRQVZ__[Y\^Y[]WZU[^dc`YX`YXVQOEB>C>=?D?<8<72=59>?:;?JHLIKPVVUZQNRQTRP\`^^\TXTKU^Z[UUY\TSSYSQPXSZXZRQX]UVUWQ\\UOQSLGLRLRPIQLTQIRORFHOWLRKINNJQSMKTPPKRQVVQUUUVW]U\_T\\XSZTa°­¸º¼²¯¶¹²¶±µ±¶µ¿½º´²ª²·¹¶¸¹¯·´·¸»¸¶ºº¯³º¸²²·¾Á¹¶²¸°«ª®´¸·­§¥§ž ž¦¤ž¡›”““˜™Œ‰–’™–——‘”—‹’†~ˆv~{|vy|y{srnulpokkgjnkkfogfbdgdicgginopg_]f[d\fgagd\fcZ[`_YZ__Za__dcc^bd[RWWZWcZ\YZ_X\^\^XYZ_e_eZ[[Z[WNLA@@?G=DDEMRRNPVPNYX\[XW\^]Z`b_VRV[[ZTU\WRSQOVSRQV]YYOXR^YVbWSSU_]RUSJKPRQVINLRSQNPKKKQMFIWMEOSQVLMLTQMSYYYXU[VVZYYSS[YSTO[\Y´·µÀ´³¸³·±¼­½°²µ²µ³´¯°³·¸µ¹·¨«°«¶®´©¯¸³µ²¬¨«´¶¼²¯¸º³¯²°¬°¬³§©¦¢¢ª¤£› žŸœ‘›š’•—‘Œ•“—˜š—“’•“~ytys}svk|{wnwpqhk]nvloigncc`dahcnkdjgfj\`b`dec^cddak_]\[ab[ca`]X_bjid_b_Z[VZ[ZY\U^XZ\a_hWadfZeda[]W[U[ZXLGC9BE@=<7521-**+,-/,57>EEIJRPOBZUXTRaYZ\TT[]`UYYS\U]VZ[XQZYSSQPXXVNWY]P\^XZTYWVRZMSMQHIMETQQUKVOLNQTNTPRMHTTTRPLJMNQSWNY`T[TVYXZcXZaX]X[Y``µ¶·¯ºª¬¶°°­²·º¸¶¸¼¼µ¬±´²ººµ¿­´¯µ´¯²ª¸¶§¨«´­³º­´¯²¯®¨©©´±¥«£©ªŸœ”›£ ¡£Ÿ˜–•™–‘Ž•ˆ’‹š“™‹‰ˆ€}‚|rvxrnzu}usnxqdpggfphhbdhihkfifijobilkhd`bZfcfjeo`bc`d[aa_]X`[e]bbhdZ\[`[X]W[Ta^]]VUY\Z^\YYW___`Y\[XTWRHC>CGDA<;660-&+1+%%*/3@E@IONOOSSRU[XXZZVTY[QY]UYP_YSXRZX]VXWVUVRT[V\ZTYWa\]ZXZZ[OPWSKKQJHKOINRPRLLPONMNPOQOSQRMVOZPWWXSMUTV\\Sg_]]Uc]YW]Z]S£­¸´²²¶³¶°«­¨¹º´¶´¯¸«©¯®µ¶½»³²¯¯µ«®³±³¬¯²³±¶¸±º°²ªª¯±²²±­¨¨¥«¦¨ž­­±¢¦¢žš”Ÿš”‹†“Œ‘•Œ”‹’‹‡ˆwz}{|xyzx{s{vottvoljrnk`ejfhnbnnnrlhff_^g^V]^aijdgde_cgfbbgac\_cbe`c`]_ZWYTZ[[YZ]Y[WZaZ[][[f\d[V\aa^\a\\ULSDG??D>;=21*%&( # "&".5333,) %5=GGILLPQKKLS^XXXX\TP[\SWZYWVXSPVZ[UU^ZZZ\\WZOVZVY\_Y_W]TYNFKOMVVOVYZ\NPJMQOQUUQ^QNIGKHOIVbYY^[aZc^W\Y``Z]eeX[bcd±¹£®¦®§´±®¯²¸¬»¶¹¹³·°³«©³¬­ºº´²§§§£¢¦­¨´²±®­ª¤§¶´´¯¬´¯®­·¬«¡§­ž¤œ‘•™•œ™–œ–•–ŠŒˆ‹—˜‹’ƒˆ‚Š„‰ƒ}‚{}}yywvz€~s~}zwvtxrsvtnqnvrvqrptxwoopffqogo_jhjlcbfeogYa`jeaigbccgdghfbggbhe`abegbefbd^``_g_f[_^aYb_MOKPHGH?74*,#    "+14?ENQTPNPVSUTOUQTT[VSYa^]UVRXNW[RTWVSMY\U\a]MZV_S]VZUZ\[`WXTVHQ[RQUSQYWXUUXSLRYTXRUOONSRP[`[ZaW^_\`Z`_d^h]``beblc²¶«±­²·³º¯·°­­«°»¹Ã±µ«¨£®°²¬¸¯µª¯ ©±­¥©®ª£³ªÀ¹­°®§¯°¯¬©±«¬¢£¤¨£˜’••š–š™š–›–Ž’•Š•ˆŠ‹‚І†…‡{vu~x~sz{€x}z€zm‚ru{}s„{t€w{swttxsvokdhfhmkghgi_khgb_bdifefigfdedblnegbgdbbhhceedho`aabf]chbhcdb][WSCIEAE;=-/&%#  !%/7>CLLKRNYMKOYYSXY]Y]\^V\_SXTSSTYSYSYXUUYV]ZTZXZY[YRW[YTXXVYPGGQXUKUQXXTWURRNUTTRWWVSOPQOW]Y[b]]dfa[[b_a_kddYU^lbp´®¦­­²°¸¯Á¶µ°±°°³¬°±¶°««¨«¶ª»°¶²³§¯²¤¯¨­¨¥©§³©®­©®¯²´¬¨ªª¦¤¢¢¢£Ÿž”˜––Ÿ¤š—šš”…‡Ž—Œ‚~…ˆ…|‚…‚‚z}vyozz‚~y{wxyƒ|u‚|uuvsy|}tvqv}vsroumeiojleinqliechddXhbmirchhcggkoolgbdecf`^ebdhedfcejhh\db]cg\b_UKI@H@JHA?1+# '+4:CIMHMUYRVRXLTV\]UYT]]T[Y[UQX[ZR^]ZQ\TVRZ[WVQXXWUUSVQWXYZUUUOOOUQWZ]W^YWYZSPNWPUWNOVRTNVY\Yh\_]]c_[ZZaXcia_`c_e]^µ²¤±¬®´´¹·¹«¸¶²µ²´·¹«¬²°ªµ¯°¬³´²°³§ª«­¥¤¦£©«ª­­±·³§¬©ª§¥¦¦¡œ¥§šŸ šœ—œ— ž¡—Ÿ•—•’Ž‹ƒ‡–„ˆŒ~……‡„ˆ††|ƒz}v{v}‚~~…„uyys|€qszyxz{yƒ€{}xsqppnrmhijkkgsjpioehfjppljkhnuoikkieaaba_\eig^ha_kgfaf_Y_`af^_YYYOOBAGA@46*)# "' 1;DFELPVPWTWVY_N\XX\_^^Z[WXUPHUQYXXQVTXWYXYYYOOMSRT]U[XVQ\ZUSQSSZ]S[V\XUTVZWOQ[STXTMZVZXQXb_d\`]^\]_][`cdhl`jje]_b¶´¨£«¸»¾³·¬¹³®²®¯­³¶°²³«¨³§«­¬²±­´®¬±­¡˜¨­£©¨°°ª«®¤¨¬®¤©›£œ›š¦¢Ÿ““—˜Ÿ•šŸ Œ—–”’ˆŽŒŠ†„…‚Љ‡‹||~ts{€}€u~}†‡xwƒw|€‚yys~zyx}}{tvuy{clgjdnrdpqqxogjlg_fmopmokjjapqjdfc`dXhbdbaejeagdaldc]Z\WUabbaZ]QPMPKEF;55)&&-8>HHLFTQWU[ZW]]_YZUVUW]YWMXSTTWYTYV]]\WUWW[UUOWQ[]^[RXV[\S\TSRXZPZ[XWWQWZPTVTUSVXRV]\ZURV[Wdd]Ya^ZXZZgfekkf]kiab\]«µ®¯¦¬ª½»µ«­®«©©±¸¶¹¶±««µ±´··¶¬µ²¶¯«­¬­¦ž¡ªª¨¬­¨««²«¨¨Ÿ•›™¦ªª¢Ÿ¨˜š››–™“––‘”›‹Ž•Œ‰†…ŒŒˆ‡…‡€z}z}y‡€„}€wu|qvv}~zrzsxzto}w€|wt||wvkpmupfhcugnqyusjiiiokvnhgfcklogkjhgaieaghfdffj\m_a`cb`ZXX^fd`YWUIICHGJB?3/! !-3@EGHFNNUWTZY\VZ_\`SX[VT`PVZQPVWWY\WRUYVWSYUVOSOPT[YV[RXWR]OPLPT\S\U]_^`SZRU`ZVTUTZW[\\TXXVca[b^\Z^WYZ\Y`hjgbmg`aZa¸¯¥¬§«¸··¶µ´²º³²¬²³±®´®«§¯­¶°®ª³´³°±¦¨©¤®£¤¤°¯­ª­ª§¦®Ÿ ™Ÿœž— ˜™šœ’œ¢›‰™‹™“‹‘—•’–”ŠˆŒˆƒŽ‡‹ƒŽ†Š„€sw{vzz|{}x}x„~uw}…rƒyyyxtw|yzrmlnjmstknjhimkmjsughmjnphnkipnlgnjjcrmjkebffi`bffogc_ahmdb`^V_acic_UQNIJNMACC82-#"..=7FLHOJUVTU\Y_Va_^WU^]aX]WZ^[]XUTUTX]X_\TXcVURKRPXWZ`dWRVRRQQWQTWTSR\[UURUTNSWbQVTXX^YUWWZ`W\]Ua]Y\_^Z_a[]okg^_baZ^²º³°°³¬²º²³¤­´µ·¯·­²¾±µ§¦­¥­«±®²µ±°°®¦£¤§´®©¨²¥´¯««¦­®ª˜¢œ˜¡ š¤¤¡£—˜›‘•–’˜™‰“‡…Œ–†‡ˆ„‚}{w{t‡ƒ|{y~}}„‚zxx‚€†|~xvttuqppwwuomuvrrokpjagfoqhpjrlggnjnginfjinjknnhjb]ibce^hlljjja`ikhY`VZabe^\cW\OOFHFHAA3/%"##$'3/5AGDIJJHVPR_VZWXd_VW`WX^^c[eY[UXZSV\^SZ[YUTYUQTOVRU\Z[Yc`SNZKROVQQTSTX\Q\URUUU\S\YP[YVYZ]VX\\_a_`cbWYVSZ`Y\hrjfei_b`¹±°­¨ª²¶«²©¶´·¨¯¯­µ²¬­©²«¯¡ž¬³³¨¬¨°©©¯¥¤±¯¤¨¨°´®­¨ ª§Ÿ£¢š¡›Ÿ¡š£ ¡˜Ÿ”Ÿ–ŽŽ•—™Ž‘•‘‘Š‘Œ‰…‰Š~‰|vus†€}}~{€yuz|}vrr~z€€ƒp}yuu|vomnpkjlrquomhojjplnqkkrkjmhigdlihggjnnnjjeljfdhkgokjhghkah`fWWb]cigcc\VNOPLE;C=I56..#$&(%4669;DKHOLTSWVZV^XY\RRTUYTgadXYa[WWVTVZXV]QYTWVQWQPNRZWWV[WNVYWWSPRQXUUWOYTTZVTTWWZ][TW\U]Za^UYYXX[_ZWY`Za\dh\idgdhmjgc±®±«°»³°µ²­­²¨«®¨­±®°·««§¢¨«©¤±®²°´¨«­¨ž« ¤«°ª³¯«ª¢œ­¤£™£¢Ÿ£œœŸ›¥¤£¡ž”Š‘’’’¢—’Œ•‘………ˆ‰‹ŠŠ…Œ{~|zƒx|ˆŠ€x€ƒszsszuywtx~}€wwzuwptpvmtjn|yxrthiljbkkekpnzixnkjliinaekkimloioec`ag`fjofm[jlff``a``e`albaYYSPPCMH?A=8@0-11*&0.+79>EGFLQURWTK[]YY\]WZ^ZVZVWS[[_\`Y^\TW[WPTWYSPWRSNFNQVWRYXUSPQVYOKZUSY\S[WWVWYZS^X^[X^WUUX_a`bd[^d\gh\]]^_\^[\blhi_k]`e°®«³¦²±´¸«²¬©©¯¯«º°¶®««¤©¦µ­¯ª¯²ª®«£©«±¶ª¬š¨¥¯²±³«¯¬©¤¤¯š¨Ÿ¢£¤¦™š£¢¢š––“‰‘–Ž™“››Ž—•’‘ˆ‘…Ž‹†…ˆ„‚}……}}…|‚}u€ywyyvr{u|}wsxzqtwzxxporxuu~wzrqpqorleonnjkdlkdcjiijigknpmskghlhffgloknbjqmkghbZ]aa_hafa[\OSLOLHL?HDB599?5.559=FBHJHMNSQSSPW[]TWZQUYKYRQV[PS[fWVTVPSO^Y][XYZXV[^VSP[TSYRVQMQMIOGURPTWU\[SWYW^YX`[_WYYSWY]]Yb]^Y\TbY]bbdd^\`eha^ha]`da§©°­´°¶¹·º¬±§§¥®¯²«²¬µ¢§«¡¨°´³®©¯¡¡«­­¯ª³¯¡ª¯«©ªª©™£¦¥¦£¡¦››§™™£••›˜Ž‡Ž‘Ž•––‹Ž˜Š‘ŠˆˆŽ~†Ž‚†ƒ„…Š‹ˆz~‚…~‡wvuxwu}{|xv€|wszwzwryrjru}qrilkgik`nklmigsnpdclllfkmtfipoiliegdpkrpselklegf[]ce[deca^[Z]RHULLFFDJLCL;@=;868>?>?LLHRYT\]VcXTYU_ZXPTVSTRW[]^X[ZaTX][TXWZYT[X\YSVQRXSQTVR[SPMNQRPQUXYPV[aWW\ZY\T[_]STM[YXWVZYU[_^b]Z`bl_a\a^adcih^cbd´³«¦®©«»²®±§¢©¤±¤­­¬¨¬§£œ¤¨«¬¨³®¡¦¥¥¨­­¹°«ª­¬©µ§¤¦›¦¤¨¬¥«¦Ÿ¦¥£¢™›¡Ÿ š˜”Ž—Š’—‹˜™›–˜”ŠˆŠ………†Œ‡ˆƒ}„ˆ‹‚~y†‡‚yyz|}{z€ˆ}{yx~€~xusxu}uphnsmphtgipqmqnvqnskhksigdlghouomflqjgglmliicgigdgdgbigggfckdhYTT]PTTNFJKMKILEDC<9?EQJMQLRPVYYX[YYZR[[a[ZRRSTRYSVOXXdWWVWWTPZU]Z]c]_SVSSSUTNOTZQNOOQXPNLXV`YYX\WXb[Ya_[^RURMU]\R[\[^[aec_cdcfdbf]Zcif_^db_c±°«¿®¬³¯³¯µ®˜œ¨§ ¯¦§«««¦£ ž£¦«ª­§¡­£¨¯ª±¸µ²¦©¬ª ¡¡š ™¦©«©£ ›Ÿš££™“”“’“–’Š•ŽŒ•˜’˜Š‰‰‡Š‹‚Œˆ‡‹‹Š‹‡‚‹…€ƒ‡††…‰„‡ƒ{}s|~z€~~…v|v~wxvzqtxtkomqtnsmmkhqjjrtkipdigvmkgfkfpntrm``onflgjmfgcgefhneofhdcejd`[aX]RNPRQLKNWMMUNMFEO@EHKDIPJY\W^_Z]X\`YY\Y\RZTSQNVZRWPUT`_]__XVTUY_XV^[[UWVZZWURQUUNM\NLOSPQQVVWX_YXV]W\XX`]YWUTT]Z[\d\^\XeXae_aakbaejdg`bfjc°´²³¨¬§´³³²®©§¥­­´«ª±§¦¨£­©§¥£©§¤±¨®¬­¶¾±®®¶®¨¦±§¥Ÿ¦££ ¥«¨¤¤¦¥•–£––˜‘‘“—’•˜’–™‘ŠŠ‹Œ•ƒ†„ŠŠ‡…†‹‡‡‡Šƒ…‹“Š~}~…‹ƒ‡„€~{xxxx„xwrttlktvv_gngukyvnqhofmljheijmeprrhemf`hidgbgicgd^bncd__jbc]bacc]_TUOXLWQNXRTJTOOOGJOMJUVTQ\`_Yb]^[[\ZWXWX`ZVPZVXNS[RM\]d__]_SVRV^SZ]WVYYZZZGTXRUYLMMSKMSPQZLWPT]]_`hSW`[[\YXWS[Q[`c[Xa]`fa_ad`b_a`_`bccceY`±²°­²¬­Á¾¸¼«¦ªŸ¬ª«¦¥¯²¤žŸœ©§Ÿ¨³¤§®°ª¥§¹ª©­¤§ª®®¡§¨¢°¬š¦›¤œ£š˜Ÿ—𣣕Œ—’— ”˜˜˜‹”œœ””•‹‡†Ž…ˆŒ……“Љ‡ˆ†Œ…‰ŽŠ‘€€„ˆŽ€ˆ‡€ƒ€}zqw~zv‚yyqwsksrnkmimpjmklmopppnlmjhjkojisohfffjole^iihfdeklhcmbcblce_edbh[]SVNSYPKWQWNLIHOKQPUTKPTRXT]`c`\SY\_R[S[[YZ[LSSPMMRXWWm`b_XN\USUV]ZYYQZURSZV[ZXXUTSVOSUUZPSOY\dTWU[X[[WZa^W\\WSYeae\dcXfjbbU[dc^nga`aedl`g°¯¯°§®°µ¼³¯²¬§©¤£±­«¦ª¨¯­°¦®¨©ª±§«°§¬­©°µ®ªª¨¨ªŸ¨œŸ¥™¡§¡¥¦š£ ˜¡©¢£š—Ž—š››š’˜™¡›‹™Ž”‡‡•Œ’ŠŒ”‹‡ƒ‰‰Š†‹ˆ…Œ‡‰ˆ€v…††…Œ‰‚†„€y||xƒ}~uxvpnkjhmonulidsqejigckkhdhktmimfpngpjiagi]fekfkoakka`hedahcW\_cd`VX^YXURQURVRLOOKR\RWQTW^VXe]]a\YZQWYTTba`U`[]RUUXSSWcU^caZVbYQYX\R_QWY_bZUSUNTRRHOQLRKFLRTTSPSbXYNQ[[YYU^XXV`[\\aZ\_d_ea^bd\Z[[]cc\ae_dac¶±°°³¶µÀ¼¿µ¶°§¢¦­³¬­¬®¯¯­«®œ°«µ©¬¬¥©®¦±¨¤§°ª¡§¦ «ª¤¡¢šš”›¦£ž ¨¢—¦œ¨››œ—“—’’””•’œš” ‹‰‹‰”˜’”Œ‘‘’“ŽˆŠ†‰Šˆ‡Š‰}†|‹…‹ŒŠŽ…~…~{usy|{zuwkojnrqorndjppupmukjnigkltfgmmoijpipjigehsbpnjjbffbj__bdaa\^bae^Z]W[W[ULQUUQRMNSPTTY`\UWY`WZ[ZXW\_TXTXUWWZXUSYS[V[TP[b\Z_a_WTY^]S]\WVZXY[XURTXRVPQRQSTQSROTWT\XSYVTW[[Y^`XVO[ZX_ebWcdecdfcbZ[Wgaeceahbibg³±­®¶±µÆ³¸®±®­¨¤£®«ª®³®±­­­«¬§¬±°¶ª¬¨¤µ®¬°¦ ž¤£¤£¥¢ –žœ¦¢ŸšŸ¡Ÿ°¬£ Ÿœ“œ ž¥™  ›˜”‹Ž‚Œ’‘˜”†ˆ‹ˆ”ˆˆ‡ŒˆˆŒŒ”††Œ…ŒŠ…„‡Ž‹ŠŠ‡w€yvxpyzwn{twtledibnmlontnmkokksokjjgportllrlnonkngmbgkolmjphgacfcdfage`]aa`_]f_ZXYRXRNTSSSKTS^_W[]]TVU[W]_`eZ\Z[WQTXTY^[_YXTN\TY]Z\]\WYZXTYZ^Z_YXP\S[YTOSPJNSROKNPVTQX[OSTS^XWY_SUSTQTZ[\W[SURV_ababb`d__^c`chddealdf¯¬²¨¯ª²·¹·¿«¬ª©®®­³®ª¯ºº¬¯¯¥¦ª­­­¯°­¬­´³µ²§¨§¨¦¥­©­¥œ¡£¡¡• ™—§¥¢žŸŸ¢ª¢›¦£ °™¥ ›žš¡œ“ŽŠŒ—–”’š‘Ž•”’•‘‹•’‘‹Š’Œ”~ŠŽ„ŠŠŒŽŒ‹|xzqosnrmms|qwzqhhdjgpkoqopulflinoknnhgdpmoqvlnutprqkdgklklamhc_\hh^\^[\__b_eh^W_]\TZVPQTNORMTXR]Y[X[Q\YZQ]ZZRXZZSRMN^SY]bYUS_\XTT_]`ae`U[\RTUZV\YVXTQ[ZS\SLVNOGQP[XONOTTRVRZWXSS`TUZPYXXb]b[OVY][[Xc_`b_dc\c[[d`gdafff±©§¬°³§¯´»´ª­ª´µ«®°«´­¯º°°ª¦¤¨¦­¬¤²¼­®¯³­ª¥±ª£­ ¢¨¨«§§¨ª¦¦£¢ ž¥©ª¢¥¢ª©ª¤©¡£Ÿœ§¨šš•“Ž‘”š“•‘ŽŠ“™‘˜‘‹Œ…‡€‚’–“Œqqcb_d`acfikuutgj`g[cgproohjpqqjgkvgodgdoqrzvmivhmtglkkpksnsi`fibc`g_gha]aXkdb_eac[ZVUSUSURSRXXX[XZZQXZTVX`U^`^Y[][SX\Z]]_^XTTVXWYVbX_aaTV^TV\[TVYUVLRXSSUJIPNOVPNQJIKLWRUVTZUYOWWX\ZU[^_Y^ZWWQ[X`]YWaZ]gdda`c[bcdkf`hlŸœ ¥®¤±·¯«ª©±«§¶¯›±«£ª§¬¨®®¡¤¥³®¸µ¶±±±¸¸¸¬·¹­§ª¤¨ª¬¥­­¬  ¨¦š›©¡­¤§ª™§££›ª¡ž©¦£‘–“”Œœ–‹“ŽŽ—Ž–’Ž‹‘“”•’–’ˆ‘‘‘Œ„†ˆ‰Š‡‰€{lg`bRRNUJQZZennnjkccbhmgtoooqplilonkbbdkpxmmsornmhsmlqppinpih_hcd_\a_bZ_d][_ece\fbXZUV^UXOSS[PaW\XZZW\YU[ZWV^Z\Y`WZZO[QY`[]]SdXTR^Y]Z_a^^VUUU[SWYUUNOSUTPMQLNOLPVPQTWSNVZRZXWS]TZYR^UZSZYSTWa\XcWR`Y]]ZSWY^c\^[`b]ijdec¤¤§¤¨®¤¬²¯¯««©®¨¬¦ª¤«©«­·®ª¯¡©«¯³³¸­¦±¹º²°¹½ª³¦¯¬¢¦¨«®¡¤Ÿ¤œ˜Ÿ œš§££¤ª¦©ª«¡ª¤¥£ Ÿ““Ÿ”•™œŸ—”‘‹Ž—‘”‹‡ŽŽ”ŒŽšŠŽŽŠ„€mt^]XNNDJ=DDKR[fkluugfhdnmmwqkmmknqkvnifbgmputrooimuqwrhssglifklhgb^cb`aZ\agaemeadg``UXWWY^_ZUVX[VYSY\YU`UXZ]`^[YX[V[WURWY]\]ZdX^ZV^VT\_bWYXVUUSV`VU[ROPQROQEQMJIKWXYTRPPLMZQTV\SPUP\UTTPW[b^Wdc\]\ZZ]XZY^]aXba`[[[fgghih¢ž¥©§ª§©¯¶°®µ³°¨¶¤­¡¤ž°°®·¦±®Ÿ¨ª¨«°­¬³«¬µ®¯­·­±¬¤¦§«©¢¢¥¥¢¡˜¡ ©ª·¥¦Ÿ £¢¢«©¨š¢£ —’––——’‘“‘“‘˜Ž‘šŽ†’„Ž‘‰ˆˆ‰ŒˆŠƒƒŠŒŠŒ}‚wqdSOIE@786::=CGV_eemjdliplhiqkifehjsnmorihfjtlmyfjgnmjjirkllcllcbef_lcd]Y]]`Yagbegc\e[`ZYa\Y^W^a\WUUZTVWWaa_WVa^[[UWZTXSUXO^SZc]c\[`Z[X\ZSMWVZX]VWQSRQQSVRWTLKFRNSGVRLXQHOUPOU\ZVZaT[[[OVQ^V[_\]a]]``ZbfVccY\W\^ZY[a`ehde©¢©¥®®ª§´®·±²±¯µ¥¡©œžŸ¦¥±©®§¢¥ Ÿ£¯®­«¯°¬¶±°©°­®¬®ª«« ¦ ˜¨Ÿ›¢œ£¢Ÿ®·°«­¨¤¤±ªª›—ž¡¬ž•™˜šŸ  œ——˜“’™•…†‹Œ„’“‰‚‹‹‰ŠŠ‹‰†Žƒvl]VMFA8=330+56?BKV`bnidfcjehgkfdfbfnktjfdiegmpttqhemrwjmvqtsfmfqjhcag^\h^_adlkqoa_ggedb_^cUf\dWRb`[QUYYUYV]X^[X[Y[[\`ZV[SQX[]`b^Y\]\TVXZ]aQUVX]YZ]\SWQURXRNTHMPLKNMKKJKJRONPRZ[[a]XZUROUUYb_TUZZg_bWebV][a_`_^[c_cdbaeflb^¡¡¢©¨¦§±¬±°»­­°«­®§©¡¡©«¯²¨§ªžª©§¯­²¯«¦°¨´¸¥µ¦¬¢­§›­£œœ˜§›ž¢£¨±¬³­«¤ª¯ª±©§¡Ÿ«ž ˜¢•’’š”œ›˜•˜š™–™•”’}‰Š‚ˆˆ‡‰Ž‡“ˆ†Œ‰t]OFFG120-,+-,,24BEQXlhfngfdidgdh]`dlmpnmjgmiprnhlfpmnruvpvrsnmrlmilf_hgd_aa^jdbje`_aeceb\]]^W`Z`XcYSRSUVVY]\W[ZZcYUaVUV[SZWU_Waec^[][_Q[UT[OSTTWUYZZ[XXQRYRVPLLLEDJHNNHLITRNMNTY\NU]WPWYZXYYaXY\fe[b_[Ybe^ibc`b`gbhcbijd[d²©­ª±­­¬©¬©«¯«¹­¦¤¡¬¨œ¡«¥¯´®®ª§ª­¨®¬¦¯¨¯¥ª³¨¦°­©§¦¬ «•ž¡Ÿ¡¨¥ž£¼³³£°°¬¹²¨§¥¢œœ ¥•“š”›™—™ž•’—Œ“•‹’Œˆ”–’†„‰ˆ„•™””ŠŒzhZEC:;6983'('(*.,7FP^[lmljgdhkdh_Zafemovwpndkoqnsinmkjgmkqnupjcfjndifdgifcdidakli`[`^b`^[]aa]ZR\VWW\Y\WTU\]_V^__^[XUZ\W\Z\YZ^cbf\__Y_Y`[c\ZWZUYVUVOVXUZRRJSRLRGILUIQNJJRQUSKIQPVYbXX`YVYRSRc[][YW`cdWXe\Y\d\`]]V\XY]]cafeha­ª®¬¨©²µ­®¥§›¦¢¬§°¯²§§¢¢µ«°¤¯©ž©«®²¦¥ž¤¦©¬®¥¥¨¨¢¥­¤® š™œŸ¢¦¡¡¡¨§±·¦°°¡¶¤®¯±¥§¢ž•«ž¤™š‘š” ™› ž˜“Œ•‹’’„Љ‹Œ‹–‘މwjUK==091*(!"( ",25CP]elmejohae[adc]kmnqklqknoqtungjhusotstslqsijjfllgcehcfgfkg`k\XZ[bgad^facZYZcY]ZZYU\\]Z]ZZYT]XRX\a^]Y^\_P]Zcgg^_T]`X[Z]ZMOUSPQUZ[VOX[UHOMPOIJNJJPPIMLKNNIJMQZ\Z[_UOONR]]_\_dac][]a_\bbp`ma]c[]gX^`fqakc©­¶¼±°­¨«¢¨§§¦³°²´µ°ª£«©¥«¥©«¢®®Ÿ­ª¨«««§£¥¨¦¤™ª©¬­¥¤™žž£ª¬¦¦±­·©Ÿ¥­«¬®¯«¥¦Ÿ¨Ÿ¢£œ˜–”˜£Ÿ—Ž•–“’”“šœ˜–’“‡Š‰‡’‘•„teKF9:4/#0'&#%($-=GN]nmoldghkgh`a^`akkjtnkkpgjokilikmnulrnpuijmegfeig`baccefcjh`a^ce\gjgbZ_^]Yab_d\cVU]]VUV\]TVYS]\[b^]`\Z^Ya`aV]aaXYXY_UXUQRNRX_W[^XPVTRFGHJOMOMSNKRQOTWNQKIOURZVW\VVXXNab]aXXaZ^\UY[acgcfhc]][a_d`]hcl[e³»­µ°¯³¬¯§— §Ÿ¤¬®©®°¢¥š£®¨³­¶£ª§«¢©§¨¨¥¨¥§ª§¤Ÿ¢§¡¡£¤˜™Ÿ¡¤¦«¨´¶´¬©¤¡¦¡®¡­¥ª¢Ÿ–™  œ—ž”‘–Ÿž–“˜›—“‘”•™•”މІ†‹Š†Œ–ŒƒucJ?53/+)*!# !!(4:CRkprmaifiggin_ahfnqwhpsgljbjxtknmmkoqurjnrfhhcijgg_edjhhljjj[gah^deai_a[^[[_[]\YU__Ta]]XYV^ZPZ[X]W^g^^__^T\_Z]]P\Xca[OQPUQTX\YVRYURTNIGNIHJLGKHGKM\SKEPKOGPV_Z_[RMRP^Zc]_]`^gU\c^]Y^caaf_g\Y`Z^eYbiecn¶Ã¼Á¶¸­¢¥ ¤©¦¡Ÿ §¤¯³¬¦¤žŸ§¤­®­®¢´¸­©­ ž›£¨¢¥Ÿ˜ ¡Ÿ¢£¦Ÿ¦¥¦¡¤¦ª³«¯±´·³©²«°¯²¯¯«¦š¦–™™‘Ÿ—™¢ššš›”˜›™”‘“Žšœ–˜™•”Œ‹„Šˆ“†‚gQL<443,#'" !$&/#"=B[ksqzmjiqhichj_cgrmtmmmlhblitvlottpnmqmjnbedeicb_b[cbheggj^ed`]bce_b^aW^SW_\ae^V]Xc`\\\Yd`SW[X`[dddgbZX`\[_WZYVVVYZWV[QUUZZZZSUYYUPUMQJOJGHKOMJHMOSPUYXMUNMOV^aXYZV^UZXZY\WS^[`]ZeW`_aggfe`_ad`c^`_e`kÀ¸¼·±§š¢©­¡¤©§¦®®·¬°¬§§š£ ¯§°¦´«¯«´­¥šžŸ¦¬ž¢œ£˜¡œ¤ ¨¥¥¥¨¯°®¸³¯©°­§£©¨¢¢ ¢¦—–– ”š œ ž’™œ’šš–Œ˜‹‘™‘˜”’‡“އ„‡ˆ™ŠylRK33652&(%% &'$+-5ETcmjheahkf^_gji\hiligmzihjpupkplqrrrugllqphihjglk]ceb^lbikafXa\Y^cc[f`YdZ]\[]Z\[X^VXa\bY`][bSXYZYacd]^\][ZZ]^Y]WWUZY\[PXXQWWVRTTUPSJWMULGDFMDOEHKNNLVMTOUSQTSX[UX]UUVYT\`a]bcYa\``]adaacd[_`eba`]fedc`ºÄ¸Ä»¯ªœ¯¨¦§£¦¨§©ª´£­¥§¡¡œ¤¨®©ª©°ª±Ÿ¡š¨¢¢šž œ–›œ£œ¢¤ž¦¡¥£¦¢Ÿ¨©´­°±´¶©¢¬®¬¨¡¢ŸŸ›œ•›Ÿ–š–”–™œŸ•‘“‰““–’—ˆŠ†…x}†ˆŒznRK;5/++"!'"%(/7I\nifhjg]nnqcefbfjfnpsptrnkikqpjlurosuhllmqf^_acb`_a`_kcegfab`h^bYbXQZ_^^\Z`d[bXU\\]^a^e__XS]Zb[a[_W]\Ybe\\Y]_Za^cXY\VYXYVYUWW\_QUYSDNFKNPQNKJQGKSHJPURTTQXQRQ^UQQUU^[[ZZVU\[X_``e_][^[[\bdac_YYc`e_dd]¿¿ÅÀ¹¶¨ §ž¢«¢¥­ž¥¨­²¨Ÿª¥¡Ÿª¨Ÿ©³²¦ªª­ª§­¥ ¥£ž¤›¢£ž™––œœ©ž§®¤¨¨­°­³¯­¯ª­­¤®¦¥œ–•˜Ÿ–”šžžœ“–“šš—“‹š˜—š•’ŒŠ{‡‡††ŽŒwgbN>710/..(!"!#'$(-7AWbioeddljgegikhbokamolqlofpqsqjvhrqrheahki`abfdc]f_`^ffehhc\`Z[_ai]^`[\^W\ZZY^^Z[WU^aZ`b_b^Z_UU]V]__WZW]_U\ZddZXQW_\XT``QXUSZ][W]USRPGQQNIMOTNKKMSTROOUYXNTWOT[XWVWVSV\UT[cTW]_`]_Z^Z^abW_b^_[^][Ubg[`¼¿Ä¼±¯©§©¨±­ª¨©œ£Ÿ¬¨ ¤£Ÿ¦œ© ¤©§«¤§«¤°¡¡¥ž ©¢œ›Ÿžœ˜¡œ¡¨¥¦£©©©ª®°ª©­®°¨¥Ÿ˜ •™•—›¥¤¥ž  š“‘Ž’‘˜™›ˆ‘˜™”‘“‘–’”“‹~~‡Š†‚kZH;:--),'!&""!#)36@YRZlmehbc`cjbjbeadlfnpxporyuutliowrqqhljjicc[ekjcffecgfhfi^abdi^^aZ`d^^Z[e[^Xc_]]g]b`Zf_c^_cZWY_^`__XYZ^Y`[\fig`c[^Z\UTPVWWSSWaVWV[QQOOOPNLQEFKQLKSMYTQYVVTSW[ZYWWOVWUU_ZV_QZY^bYZ\^[^^_e^ce_b]UX]Y`^ac··À»º¸¨¡¨§£¦­¤¬¤žŸ©¬©¥¡¨©š¥¡¨§¤§«¯ª®¨¨¡¥¢¤œž›Ÿ˜ §¢›¢Ÿ¤¦¯³³´¢ª«¦­­ª­¯§ª¨¥¦ ˜‘“™–—’˜¡ž‘—”–’ŠŽ‹™•’—–—œ˜—““Œ‹‰‡|ˆ‹‰ƒoeYC:30+/) "*"(#*2=JKZaoaehba_eccjcdmjmnmlmkkmntstporqonhltlkhcgidk^l\dcehdbkn]]`ka`_`e^\X\XVO[X\W]_ab\`h\cZadVZY_[\_bZZY[[_Ub\[][[[baXXWXbYZ\UTWRYS_SQVRSLGSMNRGLQLIZPUVUQSXZ]VZZQOW[UVWW\_Z^b_WZZX\d\aYZ[]fgidf]b[\aZa^\\½½¿À°°³©§®«ž¬§¢™›˜ž¤ž§¥ª£¥¨ž¦®¥¡°ª§²­¡£ ¢ ›˜ ›› ¦Ÿ  Ÿ¬ª§©¯¡¦«¯¡¦ª£™¨“ž—š˜’›œœ¥œ™’Œ™””‘“Ž—ž–—Ÿš•š”‘”Žˆ‡‚ŒƒŠƒueXJA5,*,%&1(##$%,4BPX^fgd`eji]^[fihfdieinibdmjq}tungnjglhhmrijgbfd]f`da^^bfafecc`h_aiaed[bVaaa__\i`^a_d_hVV`^eX\\[[Z`^_Y[_XZ`^]^]^[_dX\[YR\^YZ\XX]Z[VSOVTJRNVUNPLONKWS]RUTVS\ZWWT^\VXUYT[X]aXcc_dcYZYY\ab_f[a`g^]W^fR_\V^Te²±¼¶±µ±±§¦¤£§©§£ žš¦­©Ÿ¯¦ª©¬§©Ÿ¤žŸ©¥ ©¨š¨¡¡¡žŸžž¢¬ª¥¦ª¥«¦±¹µ«¨¯§¶©œ­«¥¤œ ™œ›—™› ž¤™——˜“”‹””“‘Œ“”™—Ÿ•›ˆŠŽˆ‡‹†€ˆˆ‹‚ˆ{hVP<5/+(#&!1,!-/7;I[d]`didrdd``iccdfliieig`gooqogdrnpmmroqhllggopgfehid]ccd_cdccgbb_]`b]_Y^Z\b_UWV\dY_[dY]d^_^^_WXYUT]WX^Z[VZZZ_\Z`^ge[\a[R\[[YXYW^XXVYRRKMQUSQXHPWTTU^UTQOS\[]YX\UY\U\P[Va\]d^`T\WZ^]V_^_[XZcdee_e[QYW[\[`®·º¹²®­±³®±ª¨¨¦Ÿžœ›£¦¤¤ª©¥ª¦¤¤¢¤¦ª©œ§§ž¢¡£©››™¥›¦¦Ÿ¤¥›¬ž¨¯¦§§ª¨¥°¤¥ª«¦­Ÿ£—››¡ž˜›žœ”“•‹“˜•Ž’•’šœ¡ž›“‘†‹Ž’‹’‹ƒ‰‰‹Šƒ‡uk^OD97-+).,)#/267EVYc^deanmhgb\adgkgjnjmkabaixxmkimflnusnjrotmkpfhi``a_dehhaa]`cf\Z]XY_`cWd\_bTZd``^`bc]_\YZ\Z]Z^[SZVXSZ`W`YYa]]Weh`bf_^V^X^ZX[\^\WZ[US\T\UXVITVOMSSW\]\PX[XQ\\R[^Y_[XU\abbX^_``cb`\UXZ]b^c^ead]bcbXZYZ][]e½²¬¯±¾²¯¯¨¤šž££¤¡›•™¦¥ Ÿ¢­¥¢¥£ Ÿ¢ ¡œ›Ÿžž£ ž–¤¡®ž§§¢£¤©¯ª¥¯¦ª­©¥ž¢¨¨¡ ¦™ž˜Ÿ˜›š¡——–”‘™ž’‹Š“Š‘žžš•˜‹‘”‹‡‰ˆˆ‹Š‰|…|qhZLB@3%//,3739@IKV^keh`igj`drhidjilbkph`ddgenhmppninmnsqfeukhlonnmkllqeehb^\Vc`dee_^aaib\]Yh\`[^[ae`^[d]e]ic_eb]WYQTU][\[YWbXU\bYa_b[WW]VUXbU_\W]aTYXUTPP\RaRUUV`ZVX^a`RPU\VVYW\WSXXRUWW\ca\\kca\a\_WZebS`]adbab`X]dY[Y^a]«­©³·¶½µ«©§£¤¦¡ŸžŸ¤•™ ª¨«¤Ÿ¡ ª¢¥¥Ÿ¡Ÿœ§Ÿ Ÿ ¢œ ”Ÿ¨œœ¨ £¡Ÿ¨««¥ª¦¨©­§««®«¨«©ª¨©žž£¤ž›¡ Ÿ’¥—˜ž™›™›ˆŒŒ‹‘““›”“‡Œ‘މ‹Œ‹Š†…€wrccS??>56<2:=EHSY^ff^aibejflcaehijitkggnmbikemgoljehiqmooiukmolkfchjhgbbf^eeb`ffk_\`_cdcbd\aYa[ae[ddX[][_^^aZYYUPWY\V[ZXXX[Y\Yc_^Z\YdbUUXYYTXVaf]`[SROOXVSQTUNRRS\WW[]X[YWU[\]WSZWTVUW`Xdd`_]``_^_[Y_[^_[^dedb\\XbYXe[`dbc­©®³µµ¼¼ª§¢¡¥¯¬§¢¡¥¥ž ¡Ÿ¨œžŸ¥š£ž¦ ˜Ÿ›Ÿ¦¢ ž¤©žŸ§š¨˜¥§­¦£¥«¯ª§©¡¡´«µ¦¨¥­¨£ ¦¢šŸ””˜–™š™˜œš•—˜•’Ž‹˜™ “Œ†‡‡„†„‚…Š{z…ˆtlc\RKHC8:FCPNYR_]`fie``hejjj^bjkmnmslbhidfjgmvskiiijtkrlglfgh_hekdghcbbmahhdaad`bZfc^Z[_][`c]aYYb^bXXY`[_d]_]\_VWUWU[[XVb]`[_e^Y\[_b_^SXZUPXZa]\bdXWUTWTZXZV[W_ZZRZX`Xa_[\WYUVWU\Y[ZY]X`beW_bYXZYa\^Y\^_]]\]^Z`\X^YYZ_b`jª®±©­½¶¯³¥Ÿž¢¡Ÿ¤¦¡¢¨£¥¦¬œžœ§ž ª«§š ™œ›¢¡ §£¦œž§œ˜©¤£«ª¯¡«¨«©«­«¨«¬ª©³­£¥¢¤Ÿš” œ”žž™—–’™—”™›œŽ‘‹•šŸ•’ŠŒ‡ƒ€†}‡€{|tv†updg[UJZOQS\baffc^gbiifhadgfaijbohlplpijalhqjooejkmnmojjkgqkgmhjo`Zbglelhheda`YU\`^V\Z`^b_d`dZa[PaU_\SV]b[\WZZT_VW]YV[[ZXZ^^[`_ajd__W^V[^YYX]UZ`]][XLSVSUUSUUVQOS^VXRZTVXaXXVZOSVRXUTT`]g^^][[a]W\]Y[`^[cbc_h\_W^^YZd_dkc³±¬²´¾¿»ª¡ª˜Ÿ™ª£¥Ÿ¢¨ž¤¦¤œ›—¢œ £¥ª¤¡¢±§¥©§£ œ£š›¦¥©¯¬¯¦ª¬²§­­­¦¤¤£¥±«¬®Ÿ˜ š™œ™š‘‘𤦗™š”—Œ””—•“–šŽŒ‹”‘Ї}†„yt{w{}|zxxpka\__a\gk`igbf^eiddcmgfdlntlqhtrqjekhhojnnkkirn_lfmbmegakiicehdlijbs`ggXZcY`VTYYYWYWY[`bY_[Y\YW_]abaoc_`\_X`VYY[]O[][Y^aa\^be[\_^\`_VYZTac`UZ\[WSQVXTXTQQOUQZ[[[YZZZX^[QST]Z\^\TXO]`d\a^_]^YY\VaZU[W_\`da]`XZZV^[`^d¹±°³²²­¨¥¦ ¡œœ§Ÿ¡›¡Ÿ¡¨«¢ž¢¢Ÿ©žª¥¡©§£¥œ¢§£œŸ›¦”žª§©®¬¶±­³ª¦¨ª¦²¶ª§£«¯ª§®©¦››–œš¤£Ÿ–‘™•™š•‘ŒŠŽšœ¡”—”‡‡…„‚~~~ƒ~~}€uyspqmhmupsyoedcae_idjfgejpogphpklfjsehidklqujgtkigekimmemjidkhcijfnjki_`^bee__^`\b^[U\a`]`bUcWZZh\b]_d^ad]_`_X[TYSZ\[]Z__j_bc]]]\P]]fYX\Z[a`\X\UZYW\MVVVVNPTSX[TRTRVXSVYWV\\ZWWRQTWYf\ci]^YX^W`[U__`\_\W[YZXTVS]e`[a\½»·®¶­´«ª­›—¢—¡˜œ£ ¬œ§¨« ¡¢ ¨«¤Ÿ£¬§©›©«¦¡¨¦££˜¤—Ÿ—–¡§«¨±¬­¦«ª²°¯°¦³«¬§±°°©¥¨ Ÿ˜¡§ž¡›–š”˜•Ÿ£¡“˜Œ’“Œ“›““•’”•’‰ˆˆŠ‚‚z~}z}{ƒˆ}yyxosozljcdgfjpfidgeeoonpoqjoljetnnmsqpoojjfklkiaoioehme`fd^Z^cbbhlhZf^a\ac^c\[eWX[ZXa][^\X_VZWea`jcda]^a\\TQWSU^^Zb^\\`a[aaa^_`_ZdbXcac_^_^^]SP\ZTS\YYTLNQ[Y\ZW[TWYXZ^Y[]X`dY]W^`^ideZb^bZa]\b^XhY[c`Y_`WWWZe_ghf²°¯«°«¶µ©¡Ÿ¤ž›™›—•œ¡œ ¥¥ª£¢¥¢ž ¡«¤­­¦§¦ ž›™œ ¥¤ ›  ¦¢¯¹µ±²²¥´²³«¶´²¢¬¯®°¯®¤ ¨Ÿ•§¥Ÿšš˜‹¤˜—›—™‹”‰‘•”™•›‰“’‹ˆˆ†ˆ…x}ƒ|‡‰Š†z}r|rxhncg`^gnkjjdigirjclopqiloinjjebmijcmqtnmikgkegeojp_cYegibe_djg_^agc`Wc[ZZTX\XY]aa[\_Y]_[b\ZcaW]`]ef`W_\W[Z`]Y]Ubc]da]`[S[[cX^\dZ][_\]VSZ`XRJXS[_[RNUSPYYQRSVTYROSS[Q]V\[^\e^cda_^^dec``^_gZa`a`]\`]Y]\c^]dg^½Â²¸¹¼®ª¬§œ¤›”–™™”š™™Ÿ›¥ž¢ž¤£¬¨§¦¬£¥£¡›˜ ¡ž¨§¡ž¢¢£ ¤·¥°¤©§¬¬¼°°«¥§¯¯¬­²­«¢¨§¤­ž¨ª¨—Ÿœ˜ž™›™š‘’Œ—š˜•˜”ŒŽ†‘‰Š–†Œ…€€„|„‚Š„‰ˆ„vwmopcf`cciqik`e_`hnlmnioefmyrinkghijlrikkvsqoiejglidfgcakhjid_`mc`gehZb_]ScTZQV\_YS^ZX[`UY]]g\`b\`h\b\\YYYVd^`Z^^`\]Vea`eXb_a``[`b_\a[UT[d]UPTTPOUYWTQUSQR\UWYVUPYZ\Wa`dc\[ZV^e]d^b\[d]]fbeU_`]\\ZZd_R]ZW`faec_µ¾¿¼±®¨©§¡¥œ–šŒŽ˜–œ›ž£§¦¢¥› ¢› ¤Ÿ¨Ÿ¦œ£ž¡¥¥­¥¤¤©¦¥«³­²¦­¯¨¬­¯³°²«¬­ª²¦³­¥¬«£¢£¯¦˜ž˜“”™›˜˜—™˜“›š›–ޔޖ“ŒŠŠ‘‚†ˆŠ‚‚’‡Š‹Œ{{wssqmgnba`ghh_c^X\beinpjdmpqjmjnkkhjelkkgilnonhjjkjkfjhifecfeginnf`h]\`b^]a_^^]WT\_`[_Y_\_X\Y^a_`]Zb^\d_Y_XYZV[]]Yd]Z\[`]bb[[aZ^YZZ]\[b[ZR^T]^UUUYZV]Y`[WRSQWTYZ\XU[^UXcad_^]\[YYZ\YZ[e^abg_c_b\cbaUce_]m]_Wcbhfb´¹´³°¦¦¬¤ ¢š™˜•—’–¢››¤œª¥ ¤¦¢§¢ §Ÿ¥¡§ š˜™˜ ¬«§ ­¦«¬§­±©®®¯§¯°¬²¬±§¤±™­°°­«±¥©¨±ªµ¥§ž›‘•“”™–Ž™–••”“ • š˜Ž”“Š„‹Œ‚ˆ‘‰†„€|ƒ…‹…„‚yvpnqrsj_]ifrmiaib_[`fgqhqjdntltlmnjokmolphokqhijeegchafkhhcnggnief_]b\g[Yb[XYXYTS]WZVb]W][`\[b[Wb]X``[ffc^ZY[_^gZ`\WT]Y^W__\_]^_aV]^WZT^\Y^YYVSSRYSZ\^YX\URTZTTZQVS]YX\\^aZ^X_W^a\eic[Xgbfajbia`fXaYf[ee]``hg_aad²¹»²¬¬§¦°©Ÿœ¤Ÿ——£˜—“–™ž¢™£ŸŸž£œ—£¥¦¢¤¢£•’𙍦®¨¯°©ª¬¨¬§¬®´«¬º®¯¸°²ª¦ž§«±¯¨¨¬¯®¥¥²¬¥¡£ž˜’’ˆŽ”“˜™œŠ™š¢š‘˜‹ŽŠ„‹‹‹„‹ƒ…‹€€‡ˆƒƒƒ}|w|urnqjjnf]^kmdeX]]cacmlkglilltqpketltqhnofnplognnbhffdcgfffcbcfqhmcg`e_a[aZfcfdYXZ]\^\[^SVX[X^X_hca^][X`aZRXZZ`b`\__`aUaY^XU_`ZXdeZZX[]XY]WZVUVW[VWaWWZXY`Z\[U\]LYYZ\\VZ]_b]Y]a``eb_]e___ahckioh]ac`_cci^^]]jfkbh«¶®³­²ª°¢¦¡§¤© ž›¡¡œŸ˜•› Ÿ£¡›˜ž˜¡¦§¥¢œ–—šž «©«¤¬«®®«ª°¶±¨­«³¯­³²ª¨£«¨«­¬¯«®£¬®¨¡«¤¢š”Ÿ’“ŠŠˆ’•œ‘ž—›˜Ž‘’‡’Œ†’ƒ…{‚…‡}„…†„{y|…|wrmmgcffcgkjcd_fba`_ca`ggelspledkplrqvqliimlplkqgaflrfdjfqfbgikdbg_edY[c^^bdb\bWTVcf[__\c^\bYa`[U^dc]e_g^ZX`d`c^ZccV]]]ZV\^\]`UWTYX[]^]]V_^XZUVSXYZ^XYY\ZZW_S``QRa[Z][`_Y\YZ_c]ebpecjh`gkcdi`ffba_Yd[[_bZ`bahbh¬³·ª¦ª¥§££ª££œ¤Ÿšž–˜• –•™›ž£™›¢ž¢¡ªŸ¬••˜¤ª¤¤¬««¯°­¯¯ª©±®½¹·´´ª¬­®¯«¤¥®«´¬¨¦§«¤ŸŸŸ¡š¡˜š“—˜˜”’‘›¡ ¢–›”ŠŽ†ˆˆ‹ˆŠ‘‚…‰…‹Ž‰€~y…{Šy€utkypr|jpqjfmhhei]bfbiihgrpslosjlgowutqnunscnokjadafgvjmk^d`gehlg`_a_hgac`]Y^V^[W^YZ^_^[U_Y]\W_Y^^\cb]Z_^V\\U^b`^X]bfa^][Y__ZZWWQZ]^_Xd\TVP[`QZ[UW\ZTYXW`\\\]Z_`V\SYXZbd^\`Zclhih]Z]`hjljdelg`kgeW^bWZ\_``abad_¬µ©²±¯¬§¨¨¬£¢Ÿž¤žž™¤œ›–››šœ˜œ™—¦¨ª¥œŸ˜œ’“˜›—ž§ª°²¬­µ¯°²¨°¹²¬£¯¨¯£©¨£¬¨¨¨©¡§©£¦¨£ š˜¡£”—Ž‹”–š˜•š˜œ‹——‹Œ‡Œ†…‹Š‰Œ‚„€„ƒƒ„…ƒ|…y{z~}zvrlqjuninhomling\gcfkf_ghjnmelhstsptuwqjverjfebhcp^nedbbfcigcc_c\bSa^ea[d\_[dY]_d`d__Zeaa^d^b[Z`a\[[Z]Y`^\c_hdabadWZ]`[fa^^`]V[]fa\^XOXX^^W[WT]W\]QWZP]Xba_]]VVdU]ba\YW\\[\cje[^]Ycgiidgrifb_a`]aae\`^]``Y[\´¯¬¯©¬®¨¡­¨ŸŸ››£–¡¡¢™Ÿ›˜˜¡£žž¢œ— –ž ¢šœŠ”š› ’©£¥±«®®¯©±ž¬²¬¬¬¯³­¬§¦ ¤¦¦«©¨£§£š žŸ£¡ œœ”•’Œ’‘—•›”‘—ž›—•‹Ž‰„Ž…‰Š‚…ˆ‚ƒƒ~}…oy{yrvxx}urvp}z{vpsnhhnpin\hfjkefeiqblabhqpxuslijiokgb`bf\dcijij`^abgg_Z]ececf^a^gZ^aY__ad]`^]_`YWZV^Z`_l\UV^Z\XXYaab^`^ddY^ZW]\_^\[b[XWZb^e`_[VZWaU\[aaTWW[Y[YQRWTV_aZX_YQ[[[]\WW]Y]]hdgd]Zeedlmcd_bddc^^cdc_bY\V][XY²»¯¶·´°®¦›Ÿ¢£™—Ÿšœ¢Ÿ©œ–““œ™ ¡¡¡£¤£¡¨£œ™••—““ž¥£ §­©®¬°­ª§§½©©«§­§©¡²©¨ž§¥›£ž¦ž™—””•ž§£“–’’„””””‘”šš’”Ž‚‹‚††ŠŠˆ‡„ˆ†vy}y}ztxywvy}wxy{w€zyximmimvulb`f_j`ediimfmekmrrtnekhlmopkihhfbiijjmebgefbW^]_]_fXV[WbdXcY\Y`ib\acX_\\_]g`\ebY\X`YYXZ__V]\]`bac`^`XY`e\XU]OZV[]V\[VXY[X[[]XTS\Z[TWTUNTUVX]_[TZXZR[\`[XW^Xcb_YXW\ee`cbdag_adZh_^bhe\_[]b_V^®Ã¼Ã´°¬© Ÿ¤žž“™œ›—£¥¤©š¡–œ•›¦¡¡¢žž›œž¢˜™•˜–– ”¦¥¥©¸³»«®§«ª¤·¯¬¥¦£ ¦¨¤š¥¥£˜™¤–¡”–•˜”Ž“Ž‹ŽŽŽ“Ž˜“‹’Š…‹Œ‡Œ…„~y„…|yƒxzptywƒ~~{‚xtzrnojorli`cbdbknfhlholkooptlkbkikiisgcfe^cbekmlhjigh[_af\c\ga_Z]ba`b`cZg``Z`b`]`ZedZc^b[^WWV\ZUVTbc^_Z_\cd^\]`U\WYUUTVZ[Xdb^[ZPWU`Y[^eYYYYV[WK[RLQVYZZVUOUVYY^ZTaa^_^k]Web]_cee_bcacdad`_\iegZYUVX``^´«¯¾ÀÀ¾±«ª£—¡’š’Ÿ™•¡¢ ¢ ›–œœ™¥¦ ¤¢¢Ÿ¦ž ’œ¡šž—ššš ž¥ª®¬©­³§¨²¥¢¬¢¨¬¬¯©¢¢¢šŸž˜žœ—މ‘”™Ÿ‘ŽŽ’ŒŽ‘—‰‹‹ŽŒ†‡ƒ…‰€†Š†|‡†||‚z|wz…v~~}†|}s‚tqwrnmgjrk_kihoseoimlkiegkokhdgbofoeh^cadgegc_^ffilh_gcebiahh\`[YZ``geed^ZX`YVRWW^bchba\Z\[X^VZ\Y][Y[aa^eZ__b^^][aaVWXNU^^Za^ZXU[_UXT[\PRXRXXSWXTLOXW\WZ]RPTO]TbYYVVYdZ^\Zbb``c_fiZ`bYY]`_cekbbW]b\cY®±¾»º³¶³®©¢š™•’“——›Ÿ¢§£›˜•›š©Ÿ—š¡¡–›§Ÿ›Ž•–¡‘š’œ˜£«¨¬­¬¬®®ª±¨±­«§²ª¨«¨¥¡¦››¢˜œ‘Œ…Š’–•“’‘‹Ž’‰ŒŠ‡Š†Š‰‹ˆŠ‰„‰€‹„€Œ‹‚€‚ƒ€}~}yxƒz}~ƒ{~†€y…wwwsvkfilhligffpmspmmnwilohnplbihmaog`ba_]e`gae`fbg`deZ`afegcaca^T_Ze^__a__TZ\QY]\^\acXaYUXXa[\_^XZZ[\`a_ec_ZaSO\`be_XZTSZ]Z]_ZY[YVY]\SWVVRU[XSQUJPLRPUWY_[USOXU^Z\a\VOT\ZZX_bdY`dajd\Z^ecgdkbgce\a^daf§´»º¹¯»´¯¨–¢’‹”œ œ ¤žž•œ˜¢—ž¥¢ž¡—˜—™”’˜™—œ›•˜š¬¢°°ª¥¬¬¤ ª¥¥¦¢ª©¦¤©¡—š—™—“–‰‡Š’Œ†‰•”’‹Œ–…ДЋ‹‚‘Œ‹‰„‡Š„…„‡ˆ€€†‚‚yw‡…‡ˆ‡‚„||omliflmohhtpjonimfpmlfkdib_jhagjmhee]`ac_aedodb]c_\a`bUb_]bf[bf_`_ih]^e\\^W]X[c[cZZZZ[\]]^d`]Y\`^[\\g__WbVYY_]_\RWU\ZX_X^]``]_eb`ZUY]XRUW]XSOJSSVQ]VYS[TSOKSS^a]TWY]eUU]W]V]^`X_h[]b`d^c_d`cYa\W`]a³­®«­¬°®ª®«š”›•‰ ššš—¤–œ™‘–œž™œ –˜œ“›šž›–˜œ–ž‘–™’Ÿ–œ¦£©¦¨¦®©ª§¥­¯®£¯®¤Ÿ ›Ÿ› ˜¦—”‰Œ‹‡’‹‹‹‘‹Ž“•Žˆ„‡ŽŠƒˆ†‚‡ŠŒŠŠŠ…‰‹…Š„ŽŠ“‹‹ˆ†‡|…ˆ‹†‡…†„~zykqofggdeefifjjnosreidcjdgic``ahhe`fZZZ\a[b]d_^[h\`b_`]dafce`bigea^a\\aVd[[Z\\URb`aWWY__`aZ]^`UY_k^``Z`]S[^RX\c^][aPU`[gYYX\a`aaX_ZQTZYZY]Z[OSVQQNQTNVQZUOTPPYUYZY\WLPQW\TRS]ZW_^^\c_Z^[Ya^]Zcc_VY[©°ª±²²«®§¡•™–—¢›”¢—˜•—–— ™›—™¡•“™œ£š–’‘Ÿ–•œ‘’š˜›Ÿ¡§ž¤¤¥Ÿ¡¥žœ¨¥ª¡¢ªªžœ—œ¡š œŸšŒŒ†‰Šƒ‡ˆŽ’ŒŠ‰Œ†Š…€Œ‰Š‡‹†††ˆŒ‹†ŒŠ‰‹•“Œ‘Љ‡Š‰‘…Œ‹‚Ž€†}uothjbcbbcjjqkwqiliekghkiee``bca[bZWXYW`ea^ec_i_W^bbgZacf]hccfafdc^aYZ[[]]TUSXY^^YRXY]]^T`^Y]d^aaV[ZYVWP[YU\\\eb\Y]WYUX_Y\[c^_ZWXX\ZSUX^]Z\ZMVZWVUUNWXSSNQNSVQ[_WTPQT[TTW_WZZ]X]`ecYaa\dQagbbb_`aa­£­¤¢¦ª©¬Ÿ¬›¢—œœŸ £–””˜–‘›Ÿœ™›¦ž–™”‘š“˜˜œ˜“¢—‘”•”£œœ¤ªž£›¨¤£§Ÿ ¢£¢š›Ÿ•”–¡š ‹‰›ˆ‹‰‹Š„‹‰žŠŒŠ‰†„…ˆˆ‰ŠˆŽ‹…‹†Š‡‹‰Œ‚‰—’”މ‘‹…ŠŠ‰Œ‡‹…ƒ…ywxpf^`^cghkqmospjlcicaheiif^U_\XWYTT\`dfd`e`d\Z]\^`\e_`]ead\^]`cca^Z]_YSX[ZX^U[_XaWUY\YYe[[_^Y`]TT^WS]TSW[[W[`STWSYa^\XY_Zi]aZXUUQXXUX[`bZTTSOSY]V]XTWTSOM\USSOSVXSZOXSPX]Xf``\cZbW^^`]`\```c`]bWµ¨ª°¦«Ÿ©¤£¥¡–—¡žžœ—›—š’“’ › –•Ÿ›››•’‘˜“‘“–’”˜—™š¢­ – ›˜¢žž™¡¡¡“™Ž–’œ¢¢•‹‹‹Š„ˆ”—‘Ž‘‹…Œ„‡ˆ‹†Š‹‡…ŽŠ‰—“”—™šš–˜–…‹‘„–Œ•Œ•—–Ž”†~uqrjbfeb_knfnkl`nrhieefo``bQUYVSGPLGOTWZg``k[b_\^gcd_a_]bgbcWX][ZbYf^ae^^XXXXa]^]]U`b]^^Z[U^`Z[X_W^QU_USZUW]VUVVUSSR\^YWd_]\a]\YT^TWOTVbZXSP]XWSWORPMRTWLOWXLVPSOURRSSZZVV_VX_\Zfb^_aTaZ]af_^_b\Z°¥¢ªš¥¦ œœ™ –—šžŸŸ£•ŠŽ—–š˜¥§ž—šŸ›™•…‰Š‘–žš™˜–“‘–—”£—£” œ¢–—›•˜—›‘“—™“–“‰ˆˆŠŽŽŒ’‹š‘’ŒŠ…‘ŒˆŒŠ“‰Œ†Š†ˆ–‘ŒŠ•’‹•™™•‘ЇŒŠ“Ž—–Љ|w€xske[haifklpojrmofhhbcefVNNIJD@?9/-'*"*% )-..8WU[_jjh`]fcgebghfdcc[[›™˜¨§›–™—‘”œ•”’Ž—’ž“™Ž—‹–’”•’ˆŠ–—“ŠŒŒ€…|‚rvy|uƒ†‡ƒ•Š’ˆŽ‹‹ˆ‡†…‚‰ƒ…‚|y~‚ˆ‡‡…„‹Œ††‹‰„ˆŠ‹’‹“~Œ‡|…y€…€ˆ…‰ŠŽˆˆ’‹Œ”ŽƒŠ‰ŽŒ€ˆŠ}}}ux~w|msojnrtvyrsmkmqleciieoimogbSND91'&#*2AGSZY]VWfdYa]b]d^bTc]\fi^ccc`d^VS[X`^bdf\ba`\[X`d\fXc`^Y[XSMMULWPNORPSVW[X^[[Z\\[WRTWeU_]`c]cc\XTSPUQQMPNLRJNSPQQRVRTMSJMLKNIKQP[`ejdg]b`Zc]acZg]chbž¡ ­¥š—™—ŠŽˆ‹Ž”••›˜—‘Ї‘ˆ‘ŒŒŒ‰ƒŠŽuz{€v‚}ywƒ……~Œ…|}ƒŠ…›‹†‰„‡Ž~ˆy}ˆ‚ƒ‘ŽˆŠ‘}‹€Œ†‚‡‚‹†ŠƒŒ€€z}‡ˆˆŒ‰“Œ~އ•Šˆ†‹ŠŽˆ}}z}{qxgsqeegeYejgqvkvrqplslhpfkffkghb\QM>7,'&59LSUYbb`Xb][^^[gehad``fdbhj_dY[TdZVhd_f_ea\f^_Xg^]^``[YYQ\VQTMXJWQQSRUUPS\\]\^XVYZUZYWTQUTeec]fZ^\QPOTWUOOKUNYSMSJNXZYRNNNQSORLXXamocm`ibbehgfjd_]ba —žœž›˜”–’‹‘‘“Ž”••Ž‹‘‹ŒŽ…w€y‚~wyvz~‰„‚‚Љ„‰…ˆ||…„~…|~|ƒ€€…‰‹‚‰€‡‚‰~~€~………ŠŒ‰€~‚y…y~‡„ˆƒ”Œ‘‰ŠŒ‘ŒŽ‘ŒˆŒŠ‹ƒ}}yq|vjlj\^]ZWUWQY^drpyvkvqikjfi\igigfg^ZF;/+!#!" %//>JMWSWb_V^\aW[ebdb]\]Zic`eiY[X^cdYa`^bZh_c`_abdc[c[]d]^YWSTSPPZSNPILTUQTSJZTaZ`[a]V_W[]]`PZba^`bVZU]W][V\TUUNRUSXPXQVUOQOKNXRRTTX^bkeeb[fg_d`Y_ZZegb—¡ž¦¡£¢š’ŒŒ“Š‘ƒ’‰Žƒ‹‹ŽŒŽŠŠ‰€ƒ{w||w{~}}†ƒ|„}}‡{ƒ~ˆ€…x€…€ˆ†€…ˆ‰‘Š…‚„}|…y‹~‚„‰Ž‹Œ‹†xw||‡‰‰…“Š€„Œ‡“Œ“Œ‹„Œƒ|‡|uwnrjcd]PUSNOGIDEOZanlntqsiijfpcf\gd_cXVN@1%("/0>KTXVZY^_^]_aa_iicdcabgeaoe\Y\WZ_Y_e_likc`[YcW^ecbaYV[Zb[ZWYS]VXKSSUYTRQZY[Y[`]eY]^aUY\RVWZcaciaf]XRWVWZ_YRMRVPUWQSSVZSYZU]UTMYZ_chma`]]`kcnk`aX_a`a¡¢¢¥¡ ¡ £“”ŒŽ“““Œ‹’–‰ŠŠŽ‹ŽŠ‘‡ƒ‹‹Œ…†‰ƒ‚|uus~zƒ|{}€~~~‚„}†€y€|‚{yƒ€‚މŒ…‹„Š„„€€~…{|€‚ƒ‚ƒˆŽŠ{{yyw~‰‚„‰‘‘ŠƒŽ‡„Ž’•Ž€ƒ€€~utrtb`VKLFD?@<:=>?QTa\gmmqehnfkg]hfjmg^ZXF910#'27BPVU]Uae^_YeeXYW\e`dcfhfbgle`WW]]W]]]ebjbm^`^e^`cia^aWY]M`\ZVZYW^TNVS[WMNWVafdcb`\da]WYZS[W^dh`a][[X]R^YY_TZXXYUZ__YZWTZUWbVRY`Xdd_`kdebgfdb[b\UX^[m¢”˜ž ŸŸŸ¡—Ž“”Œ†‰ˆ†…ˆ…††…‹Š‡{ˆ…Іy}wz†€x}~wz~|v}zy‚€„‚w€‡†‡‰€|}‚Š€wv||~{x}{‰‡ƒŠ„z{y|}~‚‚Œ‰Šˆ…Œ€‚††…ˆ‰ŠŒˆ‹ˆ|}}y}oobYTEC>;8730446BBR[dkjrknkfgfa]e[_]b`VPB-+$&,@JPYVZUW_YbX]VbS^`ddcejhkplda_[[V``Ye`l`hhgZ]d][^hf\h^`ccU\^^\aZZZ[UVOUUZT[[Ybh^Y_[XaZ^Y^`Z^Ubclae_]^YU^Xa\a[\[RXYZXUURVXW\`X][_Wbbeleaeahidgd^^[X\bY•¡›ž—šŸš‘—‰…†„…„‡~†€}ƒˆ‡‰Šˆ‰ƒ~‚ƒ…|y‚€zx}‚z€{y|‚{€‚}~}w€~€ƒƒ†‚ƒŒˆŠ€{†qƒƒ}zƒ€~€…‚uz|€„Š~}yy}‚‡Œ„‹Ž‰Š„‡…ƒˆ‡„‘…†ytu{|plcRRGG=;41640422:@NW[ertrioejhb\^gaZb]WP@A7+* %+,?BJTT^YS_[[`kcZb^P`^^jf`giojj`_]VXbV`b_c^g_gac_]c]d]a_d\\Z\\Z_a\^_QZZ]WacZZZ\ceX^]^YS`]]ZXVXUUb`efbbc^`_[[]T__^[ZWX_YUY^^VYZZS^bWW_aahbeielecdcc^kXZbZ‘š‘—ž”ˆ’ŒŠ…‚‚‚Š~}}s}|€„€†ƒ~†‚{Œ}…x~vuzy~}ut„€…€}mtx€€†xyƒzzx{…vxyz‰~‰{ylsmyx~||y„xvz{{{…~z~ƒ~{ˆ…‚‰Š•—‘ˆŒˆ„€~{~vt|tvtvfTFG?;-24,10(*217ARXlopmronei^\b]bX\b\QQC68.!"$'""('.7@AFUUQTSa\_aahgb]h`\dgje`flsfb[[a`Zeb^^`eib^X]_\bichaZca\_caeab`hc_[YWXWe]^a^bgZZV[_TZ_XY\__[`YcagZaZ\VUV\__aa[_]WYYY][WUUUNVXX\]Y[_aif_fcajc]ef^`T]\^œ‘‰Š†ŠŒ‰‡‹{{xˆŠ‚~…{vxzy‚v†€…ˆv~wswwzxy{{{~s{|u{wy|zyv|s‚{‹‰ƒ‰‚||…ƒ‰~y|tyy{}}||{twzsv|yyz|€€|uƒ~€ƒ‚’‹‘‹„‰}€„ƒƒ~†svywtsyrumaSG><4.0.-,*)-,/7?P[ghjnphhn`aehhbb^Y\ZXIF76,($+*)%065;CHOW\XZZb][Uab^dd]ecdddljbhfhk`e\b]`jfirbib\ZaZ^[[e_ibc]aZ_^^\i`abc``be^^e][_fbccd\[V`\f\_dbc_\Z[e_gb\d^_`S\`_]ae]TWY\^W[][\TWX]abbdabnfcg_akaeichY[dd_ƒ}}ƒ~‰‰z{z|}}ytvz~{€yw{{vy€~†ztu€}}‚‚x{{x|}rrv‚y~||‚}|{ƒ~vu{~}xvvt}ryu{vquukv{tmwwnw{xy€yw€…‡„ƒ„Žˆ‰Š‘Œ}…‡‚†ƒzw~wzwtq{tibXI=8-.()*,)+%+/,47GRYjllqmiegagll`_[b\X]aUNE?E=:@@CA>IIPOYO^YTVZ[XXZ]ibimeigngbglfdejfd\`effdf``^d^\[_[^Z\i\dYda\^becZ][cafb\c\h_cjdaXg`_bX_Y]X^cfdd`]gafa_becXXZUaZa_`_VZ[`[ZXYSVXZ^aX_cab`kgdhgafcejilg__`bez…xxuyx€|}yvtyv‚z~z€||}qu|zwzy}tzxry{ƒ{†}~wqusxu}x~}€zyx}vxrzxxsvuoorzzt‚nptionkmpiqlnkhlmplƒ‚~t|t}}„Œˆ€ƒ‹‰€…„‡‡~{„„}v|{|xswo_\K@<8-)#.%++'&).57DXbempn]hfb_`nnjea`Vb`^RLJFFD@GFDLHLK]UXY^[[\]_\Y\ahighcfh\`^eflh^e^e`d[jlfehijc^\]`^Y[Zib\]]^]]e^daU`a`]Zg\Tacf`]]_lbf]^]cg^^`^b\d]b_dcb[[cc[eWWd^b``e]Z]a_Y`\YXY[f``eb^iebeggi__``cX`eeag^~stuorstvxsqtuvy|}{z…€ouvy|~{~t}x}ƒ~ƒ|z{x{}pusv{‚v~wvzu}|}}|wsqsz~€ƒ~pwwnszxhel^hdd`fkiehhmqrwwyt~}‡‰Œ…†…ƒŒ‚€€‚u„ƒzz}z{z{yldSB802(&&&(/)"$()12CO`dfnjlfhisjokde]bOT`^ZWWKNXLKMOPRXZ\X]_]]W\^gegf_eh_bifmiefahffgee_iebipeed\c`^_]]_`_`Zcd^^Z[`_ja`\\c^b^ge]^aibZjaca^_]_i]`did_blh]bd^dd__Y[Y]\dbZi`VY_[^\`]_eZ^biic\fbhdj_jfighc]hdehcbZ`tsusnutwolmqstvzq|rt|ƒ|uwvnkz†}x|y~|yƒ{~‚zxssyzƒw{|~|ywrsqtlyyvuxtvvvrwvtmqd\ff]daYX[R^^`_Zmhljllutqy~zƒ€{€|zƒ‚‚…€{w…{|ux}~vgdLI<,(*( " +()&-2/5DSZiirfnjdotrvim`^_`^]XY^[XYQJNPVVXXZT\_^[c`bZb[Zce]]fbgedibajdl_[bhgiggmmgfhjged_\_\_ZY]_fb\WX_ad^_dfVUgbc[ab`^^dcabak`XaZY\`^ba[YZ`]aa\b`\_`b^baeh_`[^`_lg\e[Wafbma^\cbjb``dhfhcfcgki`mlk]ppfmx{qqrqjmqmwrtputwyztkxvsr~~||}wt|…Š}ƒ{|ƒtƒyy~€‹„{{|{zwxt|spysmrtsnrzx|ticee\SVSOHMHORTVd`gejirtquwvs|ƒˆ~€w}ˆƒˆ†…‚{vv€zxm[MB;,'+$##. !"+(,0@PUcgkkjinhpmlpq`h^\ZY\WSXWR[UXS[WQZU][\^_cWb\ae]_edb_]ccedf^Z_beggahbahkih]`f^f^]bU\Xd_^^j`a]WZVWXa^^b]_X^_[]^dgd`\[^f_d`e_`ca_fbed`a^^bdj\a^[`aXf_]e`^Zcd`je`[]c]`_da`a`khfhegilkhehd`afld\owtwmtwmipqslkqrxzwu}v~rrwlvƒ~r{|€†‡†z{}{~…|uzxussxvqowpnrutnow}|pnvvyohXWHMQHIBB;@HGFISV^mkpirklqlkl‚†„„ƒ€z|~„†y|wx€r}}yz€wqeTL=40%$'!"&+)(+3ANYhlgeflqpxrsqobcgeZ_a\\`Xc[`YXW`\^aZ[SXW_]ca^X[__]WVdd`hfd^`^Yfgfcefgfiimnmmbgbg]Y\_Yij^af`Z_]`_a``a_deg_b\_^W[_fcaffjkfdd__df_ci]]]Y_^e]Ykb_Zfa`b`Zi\cWjb_\ga\g`YdWZ]d^jn`ikonmgkklibh]fcatlqupopxjogkwooxirrqwtst}}{w}v}y~yz€ˆ‰ƒ‚xz€€€~}‚ƒsqjvpwourmvwkromyvxyvpe^QKGE=8=8>5296AGIOP^erupoupkrpxvz„†…~…€{|zy{t|w‚u{sm]JD@2( !$"-*3-21?GVdmjpihmsokulwfhk`^`^[[\cY`[\\^T]fe`[^\_`ZVW\[_[W^Z^c]dfbfbbecf]ccecgcleppcjhgcfeYba[_fackmgja_dh][`^b^^a`[]`_]Yagaad`efbee````Xbdg`ma_c^XeaZb_b]cc_bb[fa_db]b`ea^cd^gcahkbdfefmnjklc_h_d\bhnqpmzylrpysszyrsvrpuxwzwyzvyr{}‚w}€|~‡€‚€zy{…‹…€ƒ~‡{wrslkkkopppsinkkzxwoleUPC;>9791/+05379CHZ]fklrkmopwkwzz|†€‚…‚€ƒ…‡~{ut|{|tzlf\TE@.1,(&"-)+/1:>Paeojnrlsqpmxv|lgg\We_`\_ZYc^ZX\Vd\^gccW_d^aa]eac\^^h_Yda_^cb^cfea`bgjbaphhcjdl`ddZ]__chefhdegfebg_c[eaee]Za]ib\\Xaebgeaj]a\_^_T[[]ab`hm_Y^d]`aZbcd`^`Ua_b`Zcgbedd[c_`]^^cabclj`fikg_khi`cWb`pgqtsnwzspnxjqhihlfrmor{|{yx|}|xtzzy~‚†‡„ƒ‚€}~}Ž‚‡‡|‚}yyyzsnwuz|z{uskvzxytdWSE98./750$+*#-(:@AOY_inhokpmjvhsq}}…‡x‚ˆ„Žz€z|{}wtyxutzm^TNA61,,6.<9=FQ]kilmpurrsw{zz|‚w€ƒƒ‡…ˆƒ}||vq{wuuupieXRLC=91:8>SW]cpmpeinnlfppturgbe]`[YUY]__cc[[\ddabfmhd`^`[]]\T[bhiflb^aea]gaebihebjbhbnkgmhafl_f]^`hfknlkgejfefe][edj`ac^b_e`dcbcdkekecfZ\ZX\Zb^[jgiagbaY[X\a^b]_a^YY_``eigZ]e]^gbTaeadhc]egda`]kgel\`jeajqiorklmfnprxjptimqtkpus|y€~~}r~€yxsuz|†}tt~{vy„{~}z}qtpqprwnrwwtrssuyyodcUE:-/++*)0'$#"!)->?S\Wdejgqlusp}u€}І„~{„І„vyntustxvrrnlb]XRQCFEEGRTQUjinssouggkhoqmrxgnhg^]__Xgd_f_dZcc_eafgibfaaba`[[W\e\`bdbgghc^h^\ggiajbhflchfkcdagjcYX\^aficknijkhhfk^gfncc]`b`d\]hd^bi]bgcc\W]_TZ[baecj]b`bbaXcb\`_^d]c`^`fZXaWX`jgcnb__``]eekg][^eepic^_cZ[epqjjltygmnqrvthikhioiwrqwsz‚z~z|ywu|zyz}~}zty€y{€…{z|stoosptwvrrysrrnp€€wncZK79+))(!%#!'2=JT[bdjlorrvzz€~|€€{zƒ€Ž†Š‚z|w{qxxoy{xiichg`XLPPTVS\hfjqumrpuprphqjptquohihd^_Wagb[P\ffd^ggfe`ea\^W\aaZ^[Y^`_clbgf]`a]cjhiaaff_ifojfhflagidelemjdnlnhalZd_j]cnfbd^[`^gece`fjcpf`f_gc`]_c_`b\bX]_^_dacaef`afegdb_aacbaf`ilfe[Zf`\]_lbcX^[Zchfecfc[g[gcolpjjgkglspmhtpmvfgoornxr{{xsvzkrt~xrxwp{zy€sv|vzps}}ouoqqu{vuwvvvtrvyrngaQ>61*,,)%")8=LS^]glmqtxˆ‡}…z}|€†„‡€|{trtpsuwvnmomijaf]fbalelcomlknwxmqjhnnvuwmfjmecdbba]^`T\Z`\[a^`gbaaV[db`[\aY][a\`^ac\aaabfash`c`^ifnfeemhbhdie`sdeibibggmeffghei`fg]T`c`^accccaX`\_\bZiV^h^e[aca\ecacea]d^V``^hd`b\bVefe[b^bejfdcbcffbgedfbahcjma`c_ag`hipfphkdjqlgqspjkiilolorqztyrrrprps~w{rzzuw{yzvz~{wtlqplkknpswsoyvutwsgf^C;71%&" % !$)=DTZ^^jitz|‚‡|‰ˆƒ‚{ƒ~ƒ„lqjywrqyqwpnpusuzsoqldukptskttxuosoolnfntpdnnegfke^`heX[_Z^bddf^abe]a[`e_^^Z[\\^`[`S]_]]^]fejck`_c^dg^bfnogcmimbnnbm`da[iik]dedgisoeZfYVafdf\_accbdd_bde^gb\ejdde`ci]__heXbbcgcdd_d_`eaedf^gdigefed\ehbidaXdgajg]f`b^dY]mpoolijioiekqfjkkgiphqhpmsuxxyzkjpw~sw{xvv{ts{wvxz}qqqios~pysrstusvvrursvj`P@4+$"$#$.;JQ[`flgpx{‰ƒ‚‰€„~€‡‚‚ƒ‚‚€wtplnwnlpxtqtwyttqyslspotpswrwuwhhliiifnpnkbmncgjf\ib`a\Y`_\dc^de]]\Z`^`ce_\XWZaWe``^c]c_d]lgfdhddaacdajhldfbiabljn`_dacfihmc`bkh^[_^Z[^`_^b_ce^gbg`edq\^_bkg`ecdd`_bdfi`b_^[akj_iYb[e]fb[hhcjku\aa_fhoeogffcijeq[hcfc`mtjhqeioklikoekeicoifjkpmnwytonlyikurxyyymxvsyxzwƒutstsottclmstdunrusvqol`[C6/'*#$ %$@BWY`imqvv}€v{|~{„‡ƒ‚ƒ€~}zwlnoqsqyypzskmvpy}}mtiuspnssnqqmwurehfloomijmmhbindec\]^[Y[[adgcaZZX\Z_`b`\cZaWb\[]YXc`]bca^aajej`c`begdcecdhijjhegbkebeidhkg\b]mdcifZZ^[ZZ[ada\ac^]fc_`b_koil^e`bc^fb[edc`f^acadce]YWfckhieigjcbnpfcgcdcd_ejenec`ccV_ednsisokmkiqjptvrdfojlroiocqwutwomppqtt~w}wx}tu}|q~wwuvrsryupvvotntvyxƒuvnk[QB1+-#'### $,>BS``eetmivr}ju}otu~|‡}|}yy|xru|qmptwvpspwywz{suspvzqu€}wtmrinlkglsnmgjehhaccdb`b`c^bfhf_`a[\^d_`dc]][_\_^g[k^_f``aZc^`\fhima`fbde]m`dfc`kifhfef`ffhkeebca[__cbe[Y``b]\\]\cfZbb^a]cfd\bied^gg[jj_llj`eafahfgea[^accnhd`fhfgj`acchpkemjmgj^__`]efenquooolbcdfkdisjnncwmokndnnrzr{n|szoxsx‚yxuw‚€w~{|{zzutwxw~qpommroqx|txxytqcY?8-,&!#" #1;EMVaeheiffdjacb]lt|yˆs~x}yu}xorsvtvxwz~qsmq{vrsssqqmrvoluxttdhfiimesnhlmjf`ce]Zgb`\^]^_]ccY`\Tb^^_Y]\YXW\^cgjfbXb`ccgfd^blhodcjk``go`jiih`dge`baaccfhhhebjlaf_b`]dY_h[[c``_Y\YYXY_f]`eae]dfdfcghddle`jajcdikbba_bdghcfgci]kl[hlcca`cbdbcejgccYajj\civvuuqrngnnpyjpeclojcmtkcjroyspq{lwzy~{{~…zyw‚z|{r{qxzxvtuqrujsswwst~x{g]X>7,-(%"$1;GKZ\g^ZVRUVMSPRXcjk|y{y|x{{}stwq~nnw|qt€x€xznwqtsp~vssyx|t{rtmlgilcixjnfieai]_]`h]ZY^Sd^f_ccUYZ^VR\YNQOZP\Z\`[^Z[\_b^`Z]bhelpokkgcb`bddhilkk`nhkgdheeacaa`\abc^_\Z[_d^aa`[XX[ZZYXa]b__ncocdohbekmijffdeinadid`^]`\hnlmpkfZagheijgifchpjilf[^a\^^ecdpmrqjqjqdeorhiiklhqqrlkhjnrwutxmpwmuyrvy€€{us}v~rtvx{s|yy‚~qssnomjstw||uxndOB:-'($&"!$,4COSRPVOWSRNHD>9EBQVbqww|‚€€y…€{qltuy|}~{zsquptlpsqqrvs}~~~~xxrqsoftnkoflhih]ie``Xb^_[XXYd_^Zc`[YRQPHJNOJKPX[_bc^Zbg`affkhnlkhcdeia``dgmfhkgghjedgcf_jmjgbi`h_Z[m]WZ_c]b]_]`YZW^_^cg[f]bh]e\d_dbnibbgbfch^hmcf`]a\^\dlljihddjfjirjhe^fefofcbhldk]b[baqppmqvlonpmoppmoqjjqwhopsqtrowlosr|{zzz„~zwzrxy}z}rrssyz~}pxrmjwkvvrwxvupdUE32.'#%"#)2:GRMTOSILE:8:?8;8@DH@?LX^]dhg^]aZgbb`kndljdjpjecY]ilfngkcifffgib`dcaad\YZ][\\Y[Z^lda]jd]``\_ea\]]`b_g_``b_hjelecfdjgoho`ae\b[chbdggfhtigbfefkkf\eZbghaaeag\d_c_^furjowttjhnipmvftrijjbhplqopuvtiqpqrvmosxx|p{ry}xxuqnsrvtywvnlnoqttvqpuvydVEG2-+!$(" $'19HSQRQPEAK>:44/.0):;Q\cvz†„ŒˆŠ‡ˆ€w€{u{}y|vwqoqprpyqqyzt€€yvp{tlkjhjnfd`hi]ld`gbZ\YZ]YP_df_[XMNE>E8:;<;8=DBETZbbaVa\aj]leeienb`d]iejcediiomhhidcbha`eadcee]YXabZ[aWc`_^b[a__gdaa``bacfg_`]\_[`dgbdfduikccbfij^g`ca^^dgdbccainnoncfei`d`i^e^`_`]V\abdenpfsm{qgdfsnqplhljlbfgjlprqvlurtltns{swyrzry}}ws|nhquyzxtoqoorqdwoywx€se`IC50++)#  ),;HMTVRI@?@4021/,),.16>P[gy‚…ŠŠ}€}y€x„z~x|yunnnwopy{myuxquwxojiinmplaahi``^d_U_^YXV_`[__XSJA<883,1)1*04ARMabdac[T]^]d__^ff`agcha_icijjmgeeb^_]TZfb^gfic]^[TZ]c__ddk`bgd`bbccah_ffica^`[_a_d^_djhjlqiafchhiniacaachZc__jdkelljcfnkkb_aj`bil_abcd^gonlpkoogoiiinnmlijiifhnqcsgotnmieqoptqt…wwrjz{}{vtsuuhphqroqwtnnmpiorpynp^LD<80(,&)"'"'-4@DOOOTKA=81/.*)''!)/)>JXgu}‡‡‹‡†’„„„€u}{~‚~zz}vxpmrrwrz|tzoyspz{ntjtwolmjinbhc_ab]c]a\]WZO^Zck_[SC;4.20.$)'$(-09FVZb]Y]LYTbbca^\^a_hkgffjmirpwnddc`a_[bdchia\ac\WW[a]_\`eel\^caeahffmafd`be^]a[ZbXjcefedjfff_beeh___gne_fdefb]l_eefjdkkh`kcbdd^ead^]`g`fdjffhvrqvridjjeigdvldfhclesvsgikimlpvwsusr|nttwu|vuntuszpsronmqptpigmtyrtof]NC131+-)''*(-+79CPOaXOI<5//-.(& )(,/>P^n†‚…ˆ‡Ž„|}ƒ}v†{ƒxwzuvpururpp}}}xnqqmpvutsuqjkpbqkjclg_a\_`YZYZY[bXY^O>982))*-!$&!%'/=DPW]a[\NXYWUY]ZXUbcjahkpgidpfhhpdchS_b_dhbZcda]^Y``a_]aecc`bggbefghlnii]^cgba\fa^fbeadpkijgddgdeedsofefcgibd]ddchh_ejpmhdic\ab^_cikbacejlljgppsspiqkehfqkeqfmglldssobuglj_lkkgoospmsrtqtwpxwsprrjwqsvqsomrlpgsjtrod^SL;<28,5(+3119=@OTZeZRBG334(#&!"!%+0=L_qy„‡‡ˆ†Ž‡‰z{~v{|zyy{€|sqqjoprxu{yrolriuqrphjonljhkgifghj_e`Z]YYSZUYSOG@/)&%$$!#"#")(8FPIYXVXXSZ_`]\`e^dj__fsmgljmntcdac`Wheg_c`[[ca_ab[[aY`\^aej[acccefgjeciqgfhheaV____cfiehljee^idkja]niihc_e`ldiibhidhmefigd[Yb_[_`bfgjhehegcbljrkmjbcdichkqrojkhvtniliidqmomkrsssrmoaimlpmvruyrmsksrqrqvqhlh]dkopmi`RNLE6972518A9?=KMX^iYSA;761.(# # '3@GYf~ŠŒy~~‡|x|zz~}~zzy|€|u}zw}suv}u||{pnxznmtpmklujibffgdi_f]^\c^[VVQPSND95.(#$"" )0BGNUcUVWPTZX\TTXa`iafillkgpomkee_a]bigdfaafbmZ\``_`^]a[\_ecfga]^cha`_fcga_jdblcd^]\fcg\cefa_hgifemgjpkiijceefgddchfcaiaQZecY^b`edYd`acepnnjfioohmfmfqlkijbgpijoorloqblfkkonqllhljbeZe]fakslmxqrijmqvpoppuspiflflllh^VXSK=@9=@@>AEGMW]ag\XH<9..5+*"$'(6FWlp}{x€w}tƒ{u|zzyw|€ƒv{wtnt}vyu|{zrovwrplnnnphmcgjhh^kgfbg_[VXYTIFIA9-%''"%))5==NUUQTPSSSGUSU[`i_edokblciciocajm]be^ajdmeXfck^adaaaZQ\bhdfgee]adc_]gfe^pcccgd^adb_hghg`deeehdeg^qhthghhfiibabfccefc`gc`\]]gccecgbgfggnehjmofgoobfnpihj`eootpughjmikifknktpg][]UZNRT_\elionruoqjrpupqhhhgo\belpmbc\YVRNGJJJOLLGRWXZgh]^L<540,+( (+9AXnlu|}uqutqw{w€wptxnm~ƒ~~uw{tvv{{z~{vvtxstrxvmrhjmoddahn`b\a`ib[ZQQHJF823,)%&"01>KQTQPQQOUQLRL\_^fcfciofglegfhla``\d``djdhfbaddbaZdaXc]ecmdfkb`^e`edda`bj`cffdbd^^cfc_bcc^hmelqffcbimmfeohd]dbigi`^bcf__cbcVb_ae\`\dcjlkfbnkkiquplnhsflgmyntttljkdfmgpoiqjorh_YKMHEGOJRZabddmqnejplsurmkklhd`hqkmflb]`Z\VVSXURNW_[`if^^RC<6--/*'"$'17AWfmtzuwpyx}svsjuyuz|qwsmvvwyuwywxyz‚„{}ryvxrmwkderlfinkhge__fc^VVVXFC80/+&'!&.3AJYQPSXQSNNRHTWVbcdngggfbdfhi]aaZh`fd^^dg`\WY_a^][h^a`]^cnhla\c`ncccff_^]`c]caefihcf_bbbi_mpnek`\fmklrmfhjehjcfa_^\\cUa_a_diae_faeaecceljjegqktunmpmllfggegtstuokefodqmtvqdf`TCG>6==>>KSUWoqomjfqknujogeffeb`ekheldagigc]aY\`[[X\[aggf]VD@9,-&'#%!-0APT_fpxmxuminytoqwxqxsspvjq€}zwu‚y~~z~ƒv|yxyttqnqotornhk`hjeaU[TO\ZSSG;9-'"""$%3>ILQLYXVQOHHMWWU^_fgedmahpidjac__^_`jfc[b__e\bb`gfdbbe^^ennljcbd[h`da]f]abbccefdkdcl\g_jlhfmknlibd\dfmgbhilgmkejh`b`j_bdffc^kba`bee_g\ajjidpqplqsrnnhfsrmktqwlpljgihmnqik`fY[PHA68+0/6;@KPcgskhreconkkheg_`ecfkejikfplkdlb_gae[\abcdo`cVJE50+'&&%(&#'/Tblqprlkfikn`ad_b`elhhggffgjafZc^eggdede_[hqlh`UOFA9:.83B?DIQckooppuknxpsyq}|vz~zzzzu|rnvq€tv€qpsyq{|yxnwvuypyrupvirtwzrfcTFLPOYTUKS?8,)$"*3KHV_WS_`\adYU][X[U[Za^a^]cgigfmj`]Z[VYcZg__k]b\aa_e^hcibf_bddfgb``kfg_feigebghmih^^\XdZga_gdedh_ikkhhgiiidbeeedjmjb_b`epinlibbidgb^grgiqqktooqvxnpksktktmpmilfhjoedfjlsoe]OD>6*1%!" '18BN^lvzvjpm_je^if`f`dabendb[^eX^idlmh`_jh^\hmglbcZMEAE>ABGKLXZimcoqprxwltzvyrxx{z€{wytnptsw‚€|{|||v~yzwxq}{zp{okt€zrkwwpucbWXKQSRRTNPE96,')07?FXZ`[Ye^c]c_V\ab\Q\cc^[__eahekied[^[Uc`aa`c`afmb^hd[d]acl^_efhdYkcfbkjoilhmlgpeh`\]Ybbbbhf`g^accei_cdaikdgicdjhl]ja^]i`jggcejcghhffnjjglqomqilplkjnhnfjhiknglglnichfknd\F?B1,)#&$#"%(+=SZlitnoglpkkbad_a_Ya_`fcX^f`g^bjsitpc_f][akpunk^_PLRQOURYchfirqpxtrwqrvv}{x{|€|{r|u|trv|vq~wo}}vp}~y€ryr{rlvo{zuqvxvtulc[TTOPVUSRID?>82,,$  (..EGLTZ]fX`cbfdbe_^bXZ]][`ceedendmeaj]YehZigeceel]fadecg`^eki_bb_ed_[fekghcgifmkodabdd]fb``ccabfff\^jjojfkggck\dalfgdc`afbmdlghcjji]jkgznpomkvztrzmtqfjkemelysgefbekigmtpjk]PFA4;3&$$.6HVhnvoohcifg__b^]aa[hgfe^c\]]\^efeglghcb\Z[poplh\^be]Y^]hddoiuxuonwvuuovq}xwzuzt|‚y|vw|y{|}}vu{}x~‚}px}|~wysvt}rvvwrozssnd]]UOSPZXQMJCA>:.-(  "03CBRYUZ_f\aa^dbd`^]]b_]a]_^aef`X`c[aW]`\X_da_]`jad`dfb`h`_b`fjg`^cc[_`hacieijijndjja^]a^cgd]`f_keb^bgbmeeb^depgdj`ci`fd_ghjducfghjbeZdlxpyqmpprvqwjtdlikgjkponrjplbhfjeircaTH?4+('* *17K^`okrkjiknhkc]ae_edcgagZ^`WZYfdhnjeefbXd]eiry{s_kgjisobstipsnhpuxotvt~w~uxz{u„‚xrs}rw{t{}sv{{…{…~wp~~|zsytqotrszxuur|smidYcXSXSTOTRJMKC334&#(&##*08AKRZ\[`^`bZb]^_]`]gf`[[X[Xcbfge[_ah\\T\ee\abccb^m`elhrj`^`bdgrcbc^gbbacbdccifibnhbi_Y```a_[[Ybb`c_efelelgfpgndpf[ff_gglkacdja^cqjiddheqvtskvusrmrpltujnckibmwke^agf_ddgicaOO@;4,,&"! )+4GXcnooskosnkihhbcccklfbfaXV]Z^^`cff`diiYd[eepinimqo|yjurvrnqmvquutrmpswxwuv}xuxuxwt~s{w}vztqux{z‡~zzu{}~}|„„usuxsvozt{~somd^XPUQWYTMPPOIH>B:4--,/.14?@HRT_]Y_\Xaf_Ze_`fabdc_ZY][W[_cd_WYZ[\aaXb\Z_bX^]_fckkj\aa\`bbgje^aajhc^hedcikkgdgjddc[`ccc\Z^Z`^`ffiecfmblfbppeghi^hfncnhhhkpmckfiXfdgtoxmhoohosjwqufdec[gbovlpeeca\gkif_YKE8.+$)++" !0>HVhmoqgikgmnmge]a`dllhecYZZYYYih`aX_fk`\f`fjkpsqtklztsrxtwwptvrotnuwussxntrxvw~…}zxtxz~vrqppyuyz{€w~~{€|xtwsnrotquv~voqmj[`YWQPOKLOSKI<@@=:9<<6;>CIFOU[Ye`]cX[b`[\Zaaj`c\_YW\[`[Z\WTZaYbdeX_dYY\\`]\`\gii`aebh_]fhg\c_fbc\a^clfaldfmgainca`eacVdeca\dkhaigihqt_iffcf^fjkgegimke_hlijngchcwssrpmvqdormoqgk`\`_giilikbc]bahgabORNC8-,%!!" !$,6@Qdtppnqgihlffi_bdbi]eeh\[Z^_`ahgda\_aibc^dliiplrpmxv{zlioprrrqzpijnqpt{mwuv|~w‚{~z|~x}zrjsnpvov|wqw{~{|zy}{xswrps|svwyqoc]d^YYSVONLOPRRNLGHF?=C@GSaig`jlhqkjmjlrc\bhchkjn_V[XY\]a_b__adibccdkoildihlkjgktrstnsknrpnokpwolswqzruw„w{wqrktrxwzorqoqursyx~uuw|tyusktmuvtxnppupsoid\[WWVYVMTZTTRUPRMVSZ[YS[USZVVV[]]]_^c`aa`lgfa``^bYebb\^^TRVWVWbXZT`^cU_`_^`fele`bicdh^hcec[`kdZadaaae__XY\W`a`a_h`ebc`ifcc_`_a^f_`bbfhdkeidimkmjjbe`hfdb_edneets{y|wqmej^\ffokh]]eccqhntdh]ZU_^_^`[SJ?=25()#!)&,+29FQX__fknjfhjeu`hme`hacYfg`dZZZSXX\a[[Y`edcceplkpkstnhsqpiuoujriltuookjgojkounm}zpmwzpr|sxtrsrzvq|wptwuysv{uzxwwpoqmsvrzyqtwthkaac[_ZXWaTVU[ZWYRUPRR^Yc`\\X^ZW[^_X\]Veegbe[``[^V]`abfea]caURT]Xa_[]USYUXdfY_hdac`]]baahcjc__^c_^]^c_^ZX[]Z[XRUWX`aeYje_\]``ddafice[Xgmgbhiqciklmlifhgcd_ibffekaqu~qyrqrhke`jgmi`be_ldbjlajmhdc_bbgdVVOED9020)*.)//@;?8426;A?IQT]dedb_UV_c`glfmpfhjlhindgjemnjiirdpjhjdiigrzrvwq``a\`f\^c`ff^`dc_addbe^WY`Z\e]g`\c^_ddfigcceb__`dkcahbifeihsfnjikmsqotrqr~vwupjqe_`]`_a]adeadd`bfdaddfciifeeggjfife_`a^U`lif`hbfnjmlkqosl~~{ysxy|~uxwo{rmqnuozxzrmwiqzkuwmtylgffiidjecfd^[`d^_^bW\S]\`__Y_[YXZYb_g[[]XY]]```b`^\^da`ghcf_Yc_U\W\[^cm\_c\id`^_ac_^XbYdV\\S\W[W``[ZUJ@:44=:.2050829FMOT]aYc[__^acgiajZf]aej^fjfbeikidnemkhhqksimwvwtwW]_c^f__`ebecdfbb]^\][_V_^acmecl^gf^]`ackhgdgdb_egfggmlldjfpghklhkiqjsouxsvxrtqsnqhaa\ffnhac]dehcc\^liddcbid_`\bfd`aZXSaYc_gcca_epphhgnu|q}~|u{||r‚}qqlrtvsurgrrxrsnnruuvx{wrkilefhijlfjckb\cZ`_[Y[W\[`e]\TSN[`k_cZ]_c\]Y]h^`^Z\ddc`d[``]c_`ZUYa^cac^a_cbmhjdZX^W_c`^WOYW_eY\Tc^WOJH86074+33),1/49BLRV\aZ[^Xcgc`mlfddjmfkghhkifemioulmshsljrlrt{‚yn`]ZZahccc_gfdali`^ce][X_]^[dbcff^c^hbfcbhcfabgn_difitmnfobejkklspijz|tnsxxwlrsttmac`ce`ce_mf_WhfceafmecbbebcfeljccZZYW[Xe`bdd\]af_flnkkuzvv‚t}{y|wxvvrrroqqy{uyqpirnqrrtwvpvtpolkejkibdklfdc\eah[W_\]a[c_dYSQQO[W`^b`c]]a^^bZdf__\[_b\`\[U_W^\ZY^[aafc\_\c\fdZZ_[^`fd^QV\YXe^c^[STCB9/8,20-.)-+)(',:AHWYZ]__^_aYcff`baifcgifdhiftkmfntkjjnjfpnorrryr`a_d`b_`_^`ckbhlb^`[YX^[`^_[bfb^b`_\^bjipmbiabjgebjgjmqlljeicbefplnnslssooroqqjlllf``cehededaf^faeda^ggjhcbdlcgdgcbe[^\aX^WXVY]W_db`apjtp}wy{„zw|ˆy}ywroqnnnsynwqrtxxsrwwvpuxvsoolnnieijgafdf`]YW^\cZ[W^][\WR\MYZ]^a^`_ZUWZ[cafi_dbaa\`[]U`bg]cWZ_[[faXagchfe]\\]\``__bYPTXYg[^VUL@8=00),).-),'*)-//AGPSS]Z[Y^_cf`bc\[edgfeeegbitfhminnlotjgfgmqiqtrWa`bbffcejcg\ea]]Y]\Y_[UZd[ab\c^e[aedd\c]fbbahiikkijmmjoechgknfskppkquynyupokmtlkqdjb^gmatikikd^_`cahljfa^gglf_gce_d]Y[X_Y\b^\YZcd^_adklsmqsz~v{vv~xu{zhu|topxwgpnuqpzzopxutrtppsjhggfhtbeg\``[U[V`W]aa`R_^XSU[VXX_`[_e][W[baX[`cdbY^^]]ad]_]_h`ZYY[ZX_fegmfa_[Vca]dgk^T^Y_Tb_]VJIB0+212((&)'#"&"."2HJTT\[^VafheXZbaaacbc_^iacjnjlkqkfnmwnttiilprr{dVXZdcffXXjf`dai`_\[]VYUV\W__c`cced`dgd^dehbdgcc`fhiemjfgeefdjkjlkmirnrmimjpmltmprnijkcefhbehjcfcccfidmgeaiXhi``lmcaf_g]Y[XV^XZXcZXZ^fbbdppk||yz€„{z~qsiqtqzvooqtvwum|xmutp{}uonmfmcbfhf`eiWdhc`YYf^]a\_c[cUXTYUSUagf[_\\V[_dbg_]bg`b_a\\bhcjZX]\\Pe\bhfkdjhf][]Y^]_fdTXXVTa`Z[PG:.-('++*(%"$"*1=MT[ZW[Ya[b[ZY]T__Wa^f^^gkpbeggigdk_nrkoslkushWWZb]\epf]fbcb[`chabb_[\]^V[a]V\]ZZ]`aa^]e[[f]b_bfgokcfkg`jei_lhgqpnppjklkpojlkojrgge^^Z`bdhdeel```dijkpgefhegtngY``hh_aaVX]Y^]b[V\^^\YW__b_oioxyz|tkpifhottqmnmuqyquxqpsxutjusmkigbg[\cbjfkeiiea_^[U]`e][_edX[YZ^^][]`^Z][VWaYYfad_\``eZ]^c]aYaWa]^lccbc^beX\\]Z^WZd_^b]RZbcecXSL:0$)-%   #180&*' "#",9ELUW\`Z]`]aclmfgfb`ba`bcbk]d_dillkpdhojjllm{sz`Z[YVXi^i_ba[a[_gngjb`_\id`\dX`T]][_fkfXdZ`_``\blmigm`doff]dfca`ilifohbhhdkigie^_dfbijaZTbYkg\dngbankkmoifbegbcih_g``XZ^Y\Z[WZ__^]WY^VVST\W`ceginjltsuomtbelllsmhmrlmmunjjqnkqmkiedhl[_`bhnpefdh\^\_Z_\^cc]`a`X^_V_XXa[W]V]Y^[X[Y_d\df^`cfe`b^e`cb]ggkjc^^__ZY_[`b\]UU^[a^`]faf\XK:2)*("" %#(*6ILU_\^a^bfconpbbf`^fgghejihj__bc]kqmgmZfbkolsu]T^YQaifegj^\^_`Zdgae_e^[a_e]`bb]TY`Y_caf\UXf_d]iggbkkn`c]ame\bdj^ehhc`cb`bjgedcgYd^bfYb_bed`dgbljgl]khldafdiaadl_i]g]Zc[cZZU[X^Z]ZX[SSPTOYXX`e`jnvqxjhphffiqmgmhlknmmhpdjlulflee_bkicgeiabfX`[]^`a_]Z\cWb`\\_[OXU^VZ\`__YaZa`eXZ]agfddg\[ace_ghddeanlji\`_Y^ZWd\V`aV][[XZb`]gebWUE;3+$ % $!&).4@AIWZR]Y\Zefediijdcg_adikkfdjcihjdicfjdeqnjjnsoZaX[[d[cga^dgWWY]e`_Zbc\gac^Zb]aQW^\Va^a\d\\\d`ehgijedifca_`^c^bbeacel^adfe`d_Ye^[b`eh`][_e]edfhlkh_adiwmfciha\c```h^`^\X^PUWXTZeVV[VSUOV[TRYZ\bbkywqpjpfdjpefqiekicikjkccqnih`W_cYb\[bbdab`fg[e_]]\VY]c[cf_``^YY\a[d]ZQZW[`VW`WYd[^ahjbbe]f`ae_fbedYfcaX[UV^[^ad]^[Zd^^Z]^g_fb^ZXO?5//" # %)%%&35?=VRV\`W]T_dfffg``]]dahcjopqhglhhhqifhka_^bfgpraWSS`^agc`^^Xa]_^_[b_ade^`^`c]cY[ZV\^gYV\YXbW^_d`hofgel`dfbdmflidmiimrmcg[a`b[a__]`h]^af___`]^acndd`ahkekagddhha``e^_khc]`VWUOTZ[XY[WNLNKUSWPY`Ubnpvwkhpkjbhqggniixloogglbgghc^TZ^\[XWU_elf][dafX[f]e_^aV_]`[YUTZYS^YRZU\[V]TV`]`a^be`d]ZVbd`dcbeh_eec]ccbb]WU`hedbd`aci`^^^\\ee]\VPC8,&#$ "%!#*-/9;CQLW\X[S[Wgdbdaadiadd\feeif^edhhdckccgd`d`acgqph^kaa_gce^ccab]\ZXkcbZ`ca]^aef`^^UW[\[\`T\^^a`\chcgjk_`a`e_Tbeahbcihejecdadd^bQ[^Z_]dWXaa`bgf`enhie`e]\\ejahfab[ceifc^_^[_[Z^]ZZXXYXXSYRQQQY\X_^cfoumpiseijeiaijljmlinfhgdidgbWPOEGRRY\a``adgaf_aV^YYa`V_V_^[TSVVYXWOSXYRSZZ`]bZY]_[bdfa`a`ca_hemgd]aafd_^eadVe]`g\hc`_a^bX^X]gb][ZPH97/++')'&-,37ACDHUUXc_XbX_[fc^[b`_^]`ggkgbchcaejakfedqk]bc^e]cebZY`]\_b`dbZ`ib[d\_WZ\]Z`d_abd_`c]_b`aZ`YYdg\]__fihhhf^]b_c_cjdafhqkovl_^d_bZe][gY^_fV^Z^bb^ddecch\_bc]_Zajfhf`fcdkpae[__]Z^WYY]Wb]VZSZPPPMP[VXY^cejhhfjgilqndhmnhoojkpdfc]UTYMAJFE@FFNOY\\__eb]b`c[VZ[]]U\XX`[URMZ`QX[ZVSUX`TVQY__W[^]Z[]Y^a`gedeaa_`[Zc`caa`[^`ck`d[b^d`[]\]cZ`_a]L@;572+20/5<<>HDILWUY_aXXZ\Ya`g]f_abcdgda`kigjbjkcgefhhhdb\cce_l]Y[[XZ^\cdcc`ddd_`a[c[a\cab\`][b\`]_YX__Zb`b`_bfkjkih]Xe`fad[^aY^d\hdnhcjadaed^[_dW[^_g_gcbbbdcageccbhb_e_\eedjehgfahfcXZ]\^]ia^]aW_QX]VYW[WV`dYbabjf^cmjfbodhdmonghsoekifcUPJD;;7118>>>KNW_`hhdfa^\^bZ`Yja]a^YZUZYXTYZXVPXZ[VPUTU[[]V[^`a``\bdgg_jch^ecged]ZXYbb\]beYY\a`gcfX`aefhTXHKB<87B?9?DHVQMWQUZ`Y\V][\^cdab[keoekjhbfgkgblceejecedfabf]\abcZb\YZW]Xa_bd^bhmbT]R\U^_^\`^_XV[X][f\`\effgbpabihjiideZemib\]_Za\gbbjijc`d^\[b^fWZW\^__`dakdjcibmcc]XSW^Y]]_gijghljdhkokjghg[_^^`]ZYYSU[UR[XZcc[b_egcf`dhedhkimjbiggmpkZ_\ZOFB>98-4210008CHVbbkfa`[]X]\ZVUUX^^[VZXWY[TTZTSW^cYYXSY\[Z[_[\\e__dbgfdnaY^efab[a\Z``df`c\Y`a]cdY_bcagebcZ[VRKCQCGIIQSXWSZXX]ZX\X]UQ\heabc_efcdcmdececgmkcceklejgcjcg]fhc][YZ_bY`ff`dfdc_ZYch^\\^d[c[[_\`a\WYa\j`W]djccjdcoifilndcgb\_aefWb\cghen`^gdjk]_`ZYRdY_X\d]d_a]^f_h\YZ[[\\a^jnbhcfjdcliealg\jl]__^][YRVXV\X`Z^[g_dgd_\^Z_ijigikdqhlefhlhj_RH=6>0-+'-(),/6=BIM]cfnfcVVaZ\YX]YX\]dXZX]PZTRXRUQR^VWQRY\SZ_aYSa^X][cjbgeeeaW]\^Xb]^X`[fac[YY]`\]^^hdhg`jh`VXWWX\TQIJZT_Uba\gYa`Y[ZX_\]ehXgcfbddfnilegjdjgedihjhhdhfgaa^_X`\\_a_]^\i_fbl]`Z\]^\bi]Wed`a[_a[][c_`Zhjdfecdaccifdfi_jeeb]bbcadchbgc`^\edbXc]XT\[Tb[d_adc\fabaad[`YdZY``[Zfklflniifelmmgdgb\_g^baSY[_a_[`^f`e`fc_a_d_b\chkggmfjhnhnmhZYJI>:)(++')',*'&0;HMXei[`_XXXY[\R[]][\WTVPUPUM\QVV\W`WeYZZUY_]bfXWad`dbaddb^^`X\ccZ^`Y]_c_^\ahd`[_e``f]`bkkb[`ba_c\UU\Z\bd`ag^YZVY\b__Za_ilgnjjofffkmeegciklefffhkcekfdgdabbZW`V[eYe]eja\a`e_V\_bdhZ^X_`\dYZc[YYb^bb[^]aicbgkoejcfhjheeb\a\b]]cc\jjfadgdf][aZ_Xdg`aagkbb\U]e_b^_X[\_gb\ld_`_hbghpefiakbd_a\]^^d^d__ZX_`a`kijlbaflaZ]cniakrnonmkkiieWXI54-+%'#), $%)..9?MVjadZ]USTRQJSMUWVW]`]`\_XUY[\VY[c\Z`]XW\V^d`Xdea[k^h``dagZ^gf\_dbf_ka`b\a\b\_dZacaf]biaZb[g]hYX]b\Vb]`]^``__caYY_cccadg_ehciehehiagci`kdi_eb_mae_gdabd\aX`_a`][_\bigc_bZ]Y_^`bcYjZWcfbabY^V\]\c[abc_fie`mbpnmgbicg^a`Y_hackkegbfcni[eabcaWhee_Xe_cojd[XW\`b\`^[\_cc`odlcsokfmhj[cceb__b^Tc`_adbY_bkichkefjplktiffcgrnknwlhphed_VH=.%-)%%$ %&'9?IV[ga\]`WXR]WSURUURZQ]]hTY\^]\WZWY^c`V^]gda`b[bjjejb`lebedeeaae_^`[a^]Z`cb\`_U`_edba`gk_fb^dcgge[^c^`]W`]^bYW_a\`bc`g]fjdgegllkaillojhjcbgcbeg^gf^bbih^[\dZa^^^Y\c^\]UV[\W]RbXV]c[d`\^b[XY^\^ghb_d^``cgcqrqnlmbaebf`ca`ghd`ab_eb]_e\^__]decihhef]ck\ggb_[^\ca`ea^^^ebdb`fddhofdggaa_b_ZVgde`^ab`_U`^aghklp^plpoenkjcmojksnnnlm_[SC77)("*&! # #!(6MX[f[^]\VXW\Y^[\SVWW[V[_\_[\[dYWZ\\]bdW\dhme__abde`eefjfbdakhacc`hbfacdfcbe^]\gYYh``bbeaWe^dfga[gWWS\^_[]\`_cdV[feedmdigojigjffl]gekbieef`cdYWa_b`il`ab``bec`ca_d_Z[[\Xc[[\_\ZY[\b[_a^W`Z\T\[c``^]c]_efmqnhidocqjhhgh^kg]jdfgc_a`^daeZg^ccbjegb]``eegfg_`\[Z]`X`b`\UW\\`^jjihbla`geaXV`[_Z\fa`fgbd]ebfcjqdhqjonjrbkljjnqhebedjgZO?7+*$#"##,-BST_d^]Z]T]^`eVZQ[\VTYY]VZga^WXYWg[[`_a[ac\Yeabec_cik^kfailhbn^mmchd`]_ccb]W^bkc]ahef^mgbaY^aebf]fYZ_]ZYab\_ZXdaa_fceihijemfuprkqkmpliklbg`^[aY_``]bc`j`djf`[[ZZWa[VTSSS[ZV]YU\Wa]WZ\_`Tdaa__cbbW_\_l]lkuswssttpmigkdef_cdidklic]_c`b[acgieajehe`_g`a``_YY\[XY]`^ZZ[f\]e[fjblhad`b_YWZ_b^Z\ac\afbhichegnkjmmslmultppnmfklnhkmodTJ832+$&"23KX_dagcaZ_`]bZZVXQ\dZ`Z`dc^_`UURZY`_d\echbi[YXh``d`hd`fbd_hkdmdlkac[Zd[`gi_b]_\bbicemXYZ`bY`YZ[dZ_a_cW^b_bb]ddjjdfejfthciiinphhllgggebb\_ZcgYZb]`f]kZc[`ca^ee[_b^ZQTZY\[ZQZXd]`aZ`[bfegaebbgbce_]b]fietrpmssimpjppdbbjmlbciinkafdcfd`habf_aiffa`c_bge^ae_Z[``a`a\W]^eb`iehamch^_d`ZX]`YZa__cfdghgfhhgjophqwknmoujliojjmeloqjknYP@2*)##$&# %/=CQZ_ca\_^Z[a_b_[UVYZ]Y^a\`RZZWUOS\^^__bf_d^Y\h`_e_mleea[gbhjlpfecefc_i]g`cc]`a\h`bhcf`^aa\dg`ac]c`_[ae^hedaW^bjjb`egleohmqhqjquqhkppkgebb^^a[ec`]ba^c[^`[\d^]`VWXZXUZ\VXTRYXZ^_ZXe_[c_a_cdifdfYc]fahhqnqosrnupplqoophglnldkiilfkfhYfbci]`koke]hcac]^a\hbhe_e[`[X^\\Ydg`dgccd^db_j^ccY]\`_[cccfephmjlckhmooqnkoqspksplgjnflskoh\M=/-"  *4HS^c^V]hXZ]_a\_U[\Zbdd\`ZXZWVVOUVZ`Wafd\c]__`Y`blgdecdedc`fijjajhgcba][c`^_ed_^\X^gcib]ac`]__Ybee[dld^`adXcd\afiedeijjfnokhfhlnjiqekggejf[_egc^^dbf]Yf[]cgga_c_Z\X^X]^\YVWX_^Z`acaaad^^_ghmecce_Zefedqhkyoqwlhqnpkoohidcn_jfhfhjeiddf^eabdhhdjfa]`led^ddecccdd_dbbX]b^R][cbejhei^_]f_aa`T]]aiknmttisookrrrgyxrwlsjqgqffkqmnlogbHC7,+"  #,:DW][aTVZXec_c\afYYYZZc`__b^ZZROVY]^Y\\ac[^\^]a_^]d]\_ab`Zc_`ihifd[d]\deZYX`U_^\baf_h\ae`a]\j`\`bca]_\f^aaaZdXfce]dafmddbjidhqioohfifkhjke^bbb^_d``c^]g[[^\]VZabRW^^[VbY[]YU_]gaddXb\focgitgi_nkelbicmfjijjmunknhflkkghok_dgeboeglonfnbj^bgafh^^bbj[e\b`ebbY_eV^]^]f`^cedfh]ajfe\^XYWa^\dca\dhdiompqjnprltrprttfknostoebepsojd]SL?3(#  /3KMRXZ^a`^_e]hgnemleckkikiejmoj`\\__\^aa]^^`Y`^ekd]ec^fkegeaeb[ddh^]`fZa_edkggdaa^Zc`begegbde`dceae^c_`ab`befb]c\_hfebheefhmfhjjcdb]eledY[ZR][Z_[][_\`cgbQWXR[Ye\b_d]b`YZ_e]ad`fb]]__a`]`^c^bmpmoprjtjphnfhhhifskgjhnoodjjjtcnbdfcelfdkh]`f_]c_e``hf_gg[eicccef`ke_`becheaadbdhg\]bZZeaofkfg\]binejlignprpirxymt‚z…xogxkqpvxrnikbie_fSJ732+("(+''(,7BKS\]a`d_g^cfjluondjdohidkepttckgc`^[Y_V]cZX_\Xfd_`bihkoegkiaokga_b__`_]bafgdkd`cbcYg_jhie_gg]ddcaebddacfbgj`hd`pddaZ^danfmghjijcaedd^ah`_U[\a[VZ^`b]`Zb^\[[]]^d^dYV\W\W[W]bfdiccacWabc_haedblkmsjkpopuokse_gmfnwkvmhpkpinjmgmphigjisnhji\W\_^afgg`ef`acef`kgfah`b_aZbefa`]\na]^c[[__degedgbgk_^cdkmpmoprtrsrzzxx~t{vthjpkqrtpknjcogh_TB<74/**().67>ISWY_^kcdeebfhikdnpoenocjmeuqtnnijb^[[b\cbaceanXaefaZbeekojfffcdeggebbce_a`agncaa]Zellnkebd_c`bgeab[gicg]a_i_eebfdde]bfc^hjigfgifjfam_bfaa[V[T^[[_ZYe_^[gWVL^PWVkbc`a`WW[^gich[nf`_edgbbgabflbglilniomopkccejljkprooqqongeinieleca]cgphgfg_eaci`ec_]`caj\bgbq^aaad]_ji]gdjfga\X]bXc\]`chdeb_g``eehhjngqofirz|wy||oumggmrt{rhph`plfe]YHE9:=588>AHHPUY^gb_ebddhecojomkjmcjenmjkwkiml`g`c`]b_fe[gfc]`gfkcchghlkjggdflojelcbc^]_]hbh[cc^_ggilgkgid[\]cjjlfgc]gkglgmigkgd_Xd[Ybegigdhbldgfggf[c^YV[VUVXU^^Yb\]^XST\VYijc^[W[\\Z^f^dcbb`bb_ad^ccih_d^ikcnronpqplmkbhngpnlnmjpnclkgkshfe\llidnjjhjb^`h_fdlab\^bbZgb`ahdadacf_a`gi^idd\Xa\a^^hkmfmihg`^bfploosihfohpwu{}|xwtrwkmrnpnsnljkemirnkcSQI@?BCFJKVQVWZbecihjolhekngldllpjslgrkjxkvqig`cbZb^h_b`d]chigc__gsinhegjgkedb_gie`[hgfmmfqeb_`dbik`jcaeadc[^jejhah\fhfgjdpadcif`_a_d^gejkbeei^gobfdc^YX_UTYVVZX[VWdjUTSV[WV`a^^^V[abgccijj_d^Xgd_^gfdcdhidenrumujokp}xniinnfjirmrmiiqhosnhahchgfmokcdbdgbh`ddf\\f]a^]fe]^beea`^g]ci]`bfbcba_bZ^]\^bcfgbb^`ehigjsahkthijs€q{yxul{rlskvqmvhka[f_rvimm_[aRSQSRXX_T]Xcb`dfhqkknttsorqtpqtzqibrkhouuwntnjc\emc`h^bcf_djljedgegcitjeemdkjdkhiZfghnlba^acbgjhhjigdbbghjmqggl]kdjjkrgacjfeecd`eafkiobkjhdhccpc`_f[WaY\VTY]\[a[a`UQGSRVhca]fbWVT_adcmfjfe]Xe^\`dd_`aae\nlqnkbrmnjntmsgedpgkljslngcnmsrfoahj`hjfkkhcehdgl`agic[^^Zc`c`g`]c`ej]aYcYl`f^`ba]_Zbba`ecapg`dbdgijch`qnepmpqrxttujutlqtwhuluskjeokknmrhdef`]ZQ^Zbd^f_caalkjmmmqvrssqvvhsoutpmqftrmqxqhhbad`bcdbgioekg_aifjolb`hlljacfehc_a`cj`ghjkoeiddogmiibdcdkeknndaijq^ghjjkehgkghjm_l^cjegmijdlaihqghgbZ\[^^abYVb_Zc\`aP\RWV^`__`d\c`_ddfhdfqjfg]chdfc`idgjjmmlkqjodqkjqnlogmfmchfehkknhhoojmjbfbajii`bbjjidhffedh]eed^Xaafi^^_bcjcdb`bcfbbZb`b`W[Y_aabhiddhchdi_decmhjhmhhqpnpsyrzyr}wsvnonhshkibesnhiqcefbacbjj`^fZajirgeotqxyx€yvuqqtuqlcgsgmfnywghfabacba`igekdfiihg\`chmifhgiffddehdmmibknqgmjgdfiafhfhjbcfcfbcha`cf`[d`gebhnfhfdilnd_dbkgimjshkjmehgbai\ZX[c^c]^accamRU^Z[\`^]eacdY\dbdgclkmbab]^dabcdjmihfieolokhejnrquyukkqjhgiihiidnimlkborsgedhojndcbbgbbkflfgc[^hffjgbdf]ba]bcbeb]jfafgei_ef_`ddgdldfanhidc_d^f`egelptisqhtqszxxrrohvnlohdcffmtpjsjaajjdpmggijljonupxxp~{„zu{~yvzvmlmtppstuvhhgad`Yadkb^mmqbe`eihjjlakfleilcfgjbbhqkfljiekqkjfe`cd_fhbnomhdcdjij^g^plfgdjidmigcceiglihcjlikjjbjeiaa^c``]``\_b[`c`bVWU\ZT_b_ga]e^`d^_ceacgoleg`gh^iegqknluufkgkhejkvrlqwpmd_baglrjpilekgitfnpmlikcaageicdggfpieYc]^ad^faafcdibabb\]o`[_ceme^]haZ\\h_^mdkocgihab_cdghfohqlktoln{yxrx|tqjpuoioochhqqnmkiroutppkhfsulp|ktnnuw†}‚}~y|‚vs{|ywnihlloxunojjgbe_Yobg`klgmaj`\e`f`\`h`bhljeokpkkimcipnukqe^i`Z]ccbekkgglkifgdd\^aijljfhckkkmmnjjowesifgjplcelhaecfjm_Yed`e^adj_cRVNW]cb\fd^c_`\^b`abc`jkihfbbaegenngosnhic`]cjrnwno{oplkc`ddfnklffpjoruphojekjokahdeecdiadhackf\d_f_h`jgldfcbce_`ej`flhldd`^_clbimdceje_d[Zkamcjbjqqnvrqqhrsxvswxzyitfqsislmealeunsmjjrtnoqnuvlx}|{y~ƒƒŠ†|y}€x}€‚x{p|~pvsrwpkel[d`^_iccghfbhgjcc`bYfdcejfhhilbemgbfgbokingkiee]Zfhcesmhfgfefc`ajbdh_gfcb`hfhgnlfoelglghohknhaa_befgid_bc`gcdeffmVWY^_^`eeX\c]cYgf\\acU_focchc[]aglijmljkkqi_dlhblmmjtljfnh`dckoqmjdojzgahrkhgpmbfjdhajggacckmebbf^khs^jiphjifd[fdcafhuprnd_[g^ebf`ejnhqaihg\beghlieinfqurqtmux~v~yntnominkmklfhpjolxp|onwups~ux€~{€zx‚‚„~ƒ…yyyyrupvxwuysqsrgfc`g]a[`mjcfhdmcj`bZ]cdfcf\aimkkljhieklijfce[ccg]^flnnjlne^idi`ibfjoujinakfbnckkqolfjiipojfghfag_cdhicdalamiionkfYUV_Y_^`b`WWb_]`b]V^[`caceh]bZe[jennihllifff`jginyslmngkimgcdeklollqqqjjomplijjiokfmkkla^enihfgdhhegnpjjhdffjdhcfd]cmgptpegc`cfjhnjqhrzoiimej`^ceilkiimszrqzvyrqsp{vpvtkqmlppnmnnqmpujtvpv}vxv~†~z€~~}‚‰€Š‡||uƒy}†xuy|wnsvoyuxpnhgafcbcc`d`iberdefb]d``eehlfhgekgknadjbegfgkef_bg`ddiljpje_eaW_kcd_nkjhffeljoic]grphjhnnggjhgfef^a`ie^j\klrkkjohmY\Y`W^heagcgg_fad^`S[aYWehbbZd`_cfimigfllj]ahkdgkhnqqjkkfkgcecliromrtkmnlsumpggkgvoturicgjofll_bfolorlogninlabff^baclusqgioef`cgoiikmr|lkgighgaddbdjkncnpnvvqvtsssnizerpvhmnkkpphmrlyxz|z~rxs|u‚…†ˆ}„}{}|„xx{…}|uƒ}xu{{{ruuxyx€qmqkb_^gZZ`Zcjqkogedb_Ykjhlihcdgpkihhbbi\fdflahb]dd`rsqokjjce`kehdcehgfjcdceipngllfnkjkgkijhbicfegahhlfojiulomlkfl`bYc[e_`c``__iYb`[g^Z^^^^\^YX]`d_`ffhlgagjgd\`^fpgqkkomsvoldidkromggooilkrurpj_heloennmkhhkpm^eihjihksjomkpibkcd^_ecohongciacahgdqifjiiiijhjkgjkpimjmmpiql}rrronynsltyy|qljhskonlwntyrzknp|x}w}‚…†‹„~}~ƒ~„‚ƒ‚~‚€„zx|tyzx{s|}z}zxklokebda`bbhipgnhd]e`ffehh`ljafkpbjje__d_abbcopnfgojkc`fgc_diifdlhiclhcf\l`dfhmkjhjipmoccohajhkagfinmklinjriklfj\heffb\fh\haa_a`cb_]_][dbZd]gbkkbmdfnplgbkccgj`adkjkojokrqkhefcnjiokimjfoonokfnhlmkqslqgnkgkfecgc]niknhilg`mjaa[_W_dmmijkkafcbjjtlngialnnfegfmnmldjedjgejoxusrmprll`ihlqmplllkolrqlgpuv{|yszouu€x}x|w~}zvy|w{rƒ~}u}u~rwys~zq|xvrrflibaWcbciegedgfcigmhdfbkdd`obbkdjc`ce`geebkghnbbpmhgdh`ebahdkimfijoddfggfgrighhgdgdkhedh`heqigcdhmhjinuuprfl\^f_hdhehdai`a_X]m_co^\ddbic]_ddfloumfsknmhlcifgltmpmnjloonhiikkqhfnilgooivxhamhjielyospoefhfflfgqlmphodqhn^lcc^Z`]^ehiqknhchdhhonlledmjjdikjbjkkgjqdiijpppssurmqmnmmjrlmpmokktmormoukpr€txtxyuy}‚…ƒz~ƒ…€€z||y{{‚„w€sw{w~‡„~uu{yllnk_d]lenkjhhdd[`gdmlel_bfclfejghcbb]b^efkmrkpklhpgpffbefjhc`aghimhvfbfokldm`drlhhlcebcckipihjjqhilhfnpnjil_^f\geijc_kfda[V\_eZ`^^VYfb]aifliontoxsuqvhgdmpuhpotoiijpnrlpqksihkohlijghmmenihjqstqtoqrkpkjgjbromkfelcnmkhkakR\aY[_efokeiljabelgigeegqgjgimrhd_kikffhdmmppopqlhgimjkqrrlqrjqlrjmijnkws|{{~syu|s}y‚~w~€}†„yvƒ~z€~vz‚x}€|‰†‚~†{u|}s~tvth]bchhmjpckbhddmfcga]eeffhjfhia^]a^]ajkigfqknoikbhb`bagbflgflinkggbfmc`lijhbjclgmfbdbgkbhqikhidjlolijmohhZ[f_fa`gc_``haa[aedeYZ`Wed]bohXknrxljpptplhrnoljqunofkompqemflhacgkmhpilhrrinliifillmvmkiqnplrkortsqeeeikjhihhceg`cZbadtjdllccgenhrg`jeemjrknbebhhpke^ghepokpurmi_kgojortmnslshkghtotlrswsz{~yxmswzryw~†ƒy}†…‡‚‡}|ƒƒŽ„€Š}ƒ‚ƒ~‚ƒ}xvowjj_ilchecfdhiaijidpi\mfhhealjghc^agcZbfokkdsjmogdibdkkemeiidcjeedgnhhkbmachghbfcihhjkisllicokjjef`ehek^[\[^\]ag`hbbWWY^ea_[[[Z`bhmghjhnrx{rxpynmtjqmqnmpspg_iggdookihsfjlhsjodjggfpjlmcfhlorjjenpmkpukfelpmlbelmnggeadcg]\`b_iknje]ckgqjchhtg`gbeffceccjhemjgppsjhgiliohihlnlvsswryosjjhrpqvup€s|z{{syyx{zyz}†}ŠŒƒ{zu‚}{~‚€~€†…ˆƒ€€~z}yozrqnnkdcbkdjaea[bghbecjidmfcimed`ekhcbkfgkpgnhnhbkpggndthjsiomlibgaijjidkfgijfjpelfmclomjlounkfonpnfihWW^ea_^gcf`dace\diXl`a_deejlchlmiprunlloxpusqnowsljjibefhlrdmflljltvkqjlnfreijkimlfkjqokrhnqorwphvqjidYmhdhlccc[\c`gccfckddebdldlmnjojkskpkajhbkujomiknldongknkloolhlquqryuotrwqimsrvpq~{u{xz{{{wy}u‚}}z{y†ˆxv{|€€~€‚„‚ƒ}„zvƒ|ƒŠzzƒ‰}‚„yspje_caagbgfgcmhngnjlejjeglhjpnsibejjjiqosnigbgge`ifbhghhillpegchqlfhejei^hhmosmckmmlsihkkrmroegjnlkj]W^YS^[cfacjb[bcb^ac_fXbbelmlgbidbwrljpvt{romptimnlkhicedihhihjpulzjiuilljelicjhknijjhjfpjuqnvuqqpm__[ffdngglcfadafj_g_bfkebfcihngfllnnklcqkgtbijmfjhjhaljskngkxyv€ojifwussjsxtqpu|uwz|uswu|s{xtyz{vzuw„€‡~…€…}€…‡ƒ‚yx€~„ˆ‡‰†„|‚~…}†…ƒŒ‡z}qlcc[cffjhabb`^fgdlgdcjdffhfnmlnkqigckjkrphb`bgkkbhiahimpdf`gieihoniedgb_eifliuofidkjmlhmusutpt{qrhnV[\_]a[]`^a`gahea_gbbfbeafgjb`_bejgmlnrwsuloinxswjkmja_aehimkiodulsxmtmoifqholigkiegchmhsljntnygppgfg^ec`mfh[dd``cdeh^acichl`_heerjupknqofogkl_fljlmmbncdgmcmprpyzpsmppppxwsvt|wsqvxwvs|zy{vzy{s|xt„|vƒ‚}{zƒ~|Ž~w}{|}wyw}€†…‚€€ƒƒƒ‹{vvyrdgcaheibg^celebe`fb^cjfdilnljwebZifnlkhjg__gogg[jcgkbccjekagfefhmfhieb^jomkmpekoipnpqquqttxvsooclZY_\_`]_^bi^delcabfadfhh^dg_oe_^`lhiqgnknxosrqqrosvpmhoifkkcdfiinoqekinmqfijefkrgfnip_f`pkspswnonpgfacikirqna_gfabfadcadgica`Yhbmlnlmqnrdfhiqlihojfmllki`llppxmqzwzzvtpmtqtyuuyu{zvus}zy~xqmosrpsyr{ƒ€€{{…~}~z„…‡€}{yxv|ƒ}……uŠ…€€x|„~€Šˆ€qyhd`f^gdgpeg^gke`ch]chfklhifohgkegg`gtmhfifjc\hdfhbf`b_bfj]ace_aiihaimee`mdqgrhgnfloohohnivxwqqprkk[T]]^Zaa[Z_]ab`\ec]]_ggea`fggdb\aZ\iookrpomtorpvsqmfkkelfjqahkpnrzjtovmhhi_nkjojkhifkb^jjpuokpqpjqecnmfkgceiabca__d_c^eham_j``jbimkiniigfc`bfejmgoqillfhelqusgqwqvzruqovuyy}vxquwƒy|~x}yyzu{zwwv~uotx‚ƒ}y|‚‚‚{~‡ˆƒ~€‚utux‚|€†‚‡„{„„x||}…‚}†wxqxgcfhclfbffZlgie`bb_`ioedgdcefhgje\eolmmlafgigdckfggfcbb^cd]acefgamegghpkikfpgkmkfekjiknjojojqpigjZZb_aaif_`bb`_feda`_fhcbgd_i`d]^abgeigjollwpuqssopiqfdge^iblijmpumisnzjfiljmfjiiiikomqgmopiltqqrlkqmipchfila]]jb\_aZidmgd^^\ab^lcibifldkchcilfrqvlfheohijdlpknq}wpswtthsr{ƒ{utyu|xw~vz|†z|{|uz{}rw{q|{{ux~{‚„…ƒ€‚vrwm{yvuxxmw{‚}wz{}~|~zzzvkjlijgjmgc\f`dbc^_[[e`feeafjggsjcbdmjmimeidcfchbhljh^^j^\_`fehdbcbgefeilgnpmogjhjhdkvjmhhrorllj\k[^Y]_fcg]aYc_e`ddcf^`_]ghdei^Zb_ZcadiptkmfjitnohlsmijnhgidibpdknwqnsmnmdjlgiopqgrtoposhhtqillmjnigbkgkehlkjfjjhgZ_`bdejeelcgfa`cljhge`gbZ_bgbcokimpkohipkj`pqttoympqupssrtttwy{€zy~xxt|z‚€|ƒwyysqnw~v|u{‡€†}t‚‚„~€r|wzwy|‚€v}r}…„zy~|ˆy‚{y{xuxloigidilhg_ab[^W_adbel`b\cgmenhcfagjijgkl_lfdmshqhcbhh`dbab\ac`aaa`glmplpogrjgmikoeklpwsmfsmgf^dbaa_c[cfhc`Y`aba`]]ba_c`de`el[\\`hhanjrprnwulpnnunolpjefekfcglojnjnkkjkssjmoii_slfkjqjqrqsmrljhpjinnedjjdg`e``eb\Z]bd_jehdh`eg]^b_]aa^Y]\icfkjdmpnrghfjhiknmqllsruuurtmsuwvzpxxmytx{t~uvywxw{z}|rurzzxu€‚v|ƒƒƒ‚}x|x{rtt{uy|sx~ys{|tƒ‚€{{{ywsurnfdoeldiigc]mZ]^Yab^`aecioihskrcekhnlcec[cebclgddj]`fkai`ilpggd__flkgljqmdgkfdhmovlorkhmgohcfd`c`]\`ckf`_`V_\abg`]c^[^dhgk_]cdW\a^_frwtmellqsrqmjeqqklhfdcaejrnomorqrkorqjffnnrkoxhqnptmtkjsqrimqeljgiolamebfe_eaW_`ebeca^cge_f_d]`b\jdZ]hff`ojilmefme`digjmnumivxotsqisqvrrurwx{}wuzwwt}x}u|€ƒ‚|vz|yvuwv€{ˆ€ˆu}~ssy|‚{ƒw‚|vp{{|uy€{‚{}{ƒu{nqlibbb^lje_feg``X_^h`kke`deimjqijf\febcf`h`hgnhmikjglh`eicigqcfgedbijmhqharmpmgkwstmjmqnjicff[c`e``ce`cgde\adbbcT^[^[d^ca`YWbf]Z]^igsszsro{stvkwxssxnjgibgdejihvwpwvtm|ligudlhhnlvcqgltqwmvzztoqmlgli]^bfnojill\dY_[Zeelc\`a`afdde`\aZ_afemfhdql`djieohknpklomltlpownonnosovvz}{ˆwwkjts~x}y{zzxyqxyxo€~€‹{}‚}zƒyz|ttt{…xy~s{uyxvvyrvytzzzƒxvnpolhnjhflgfbbceedabeeebbc]dfjjhkhglmnqs_dbbdachbficcc_fifjkkkmf^ba_lliniccgkkgfglrnnphqjimjjk_Zcgkccf`jddc`a`aa``_d^[hd\__h]]`cX\Zkoq|yustnqwx{|uus}uvpheomginumpnmrusttmrwnrjlkmmqrlpgqyx}}yqslpsnqmejlbhhjjpih`_[]Xdhla`_\d_e`bdffaX^`]`eheg_abifcagdikkrrnmhooun{qtmqsuzr{yty|rttt|u~|vsupusy|yvvuyy{vtwv‚{|uu{|{ƒ‚}}‚‚xyvy|yxovw~~sw|ulnkbdebdfjg]dfcm`bbhhdkife_klqefogfojjllehicfcbejbaiiagbehfgblxke_`Zh`bmhoieeiclkimlfrnhnejc^gfedoiqgejpgh_deef`he\_\X_a\]aaaafd``bguorwwtvu|yxx{~‚xz{{pqkmmrpnorpqqp{yuqwvmxqvqomuttklgm~zsyxwtwpnnjdgjcgsesologda_\\che_fYj\^af`cba`gd_diddgdaa`gaehippmqfkjqorrsvppnuxptqx|wvu~ƒ~}y|vzz{}yw€s{uvp{xywwy€}†x}zur{{~{}ty}vzz~}t}…‚~|tjkjecbghgpbkcbhhh_cib^_gfbkjeffkdpflljo_mdb__bebg\cf__Xfajfdhokhi`[_gaokjddahjlinjtrqjjijgihfjhe}puecnml_ccgefichdeipkghdklhjmgginns|{€yˆ~wvƒ„‡ƒ„}€qowxxqouukqnquysysstpxzuqrzomofvrzzu}€uwusutlmfcfgektvlmgbcbfdhmda`c]bcab`dada\aibfebfac_`ihiijfeommgijfnp{}z|wosxwxsr||x|€wstx}ywwt}rutrvrsnsuvs~uzwzy{zwrpp~jz}x|ƒx~}wƒvˆƒ‡€w|~ˆ†{|}yrhvkpijhgltcf]jfheiilhpiaaab_ee`ffegedfjgege]a]cfidcccdheb`bc]c`_`aadegnhhjcingmqlootoilmefdhkh^d|opkipnnohplrkgjeinslmdknmrwlsz{|€‚}|‰‚z‚„‡‰„‡‹‚„}x}{vrrmsnup{y}{vtyvwyolulkkkstrqvsrlxwwssnrnhhgghorjpghd^fdXaf\`_W[de`Z`bdieciqoakcfcaZjdddmmoqpjolnu{€uuxqqqvu}wuky||}|||puux€utzqnrtpyv|wtupu|€{„x~ywrvt|{~ztv|zzx}€{}ƒ|z~{„‡ƒ{ulwtsmiibmikvkcgfgkq`cbfhfhfeh_ciZdlkkmfjgjdicfhkkeegd_e_^]^g^ibab]cdffcmijfdaffuhonkhlrrhiecd_cncX
im_copy /home/john/Desktop/5-14413.tif /home/john/.nip2-7.23.0/tmp/untitled-nip2-1-XBLOEMV.v # Mon Nov 22 11:12:02 2010 im_extract_area "/home/john/.nip2-7.23.0/tmp/untitled-nip2-1-XBLOEMV.v" "/home/john/.nip2-7.23.0/tmp/untitled-nip2-66-X754IMV.v" 630 710 340 302 # Mon Nov 22 11:12:20 2010
in/home/john/Desktop/5-14413.tif
nip2-8.7.0/test/workspaces/test_matrix.ws0000644000175000017500000003107213224651032015376 00000000000000 nip2-8.7.0/test/workspaces/big_and_small_disks.ws0000644000175000017500000041254013224651032017006 00000000000000 nip2-8.7.0/test/workspaces/test_tasks.ws0000644000175000017500000010654713224651032015231 00000000000000 nip2-8.7.0/test/workspaces/test_math.ws0000644000175000017500000013735113224651032015032 00000000000000 nip2-8.7.0/test/workspaces/test_widgets.ws0000644000175000017500000000523213224651032015537 00000000000000 nip2-8.7.0/Makefile.am0000644000175000017500000000236113273071606011362 00000000000000SUBDIRS = \ src \ test \ man \ share \ po EXTRA_DIST = \ autogen.sh \ doc \ proj \ m4 \ nip2.desktop.in \ nip2.xml \ nip2.appdata.xml nip2appdir = $(datadir)/applications nip2mimedir = $(datadir)/mime/packages nip2appdatadir = $(datadir)/appdata nip2app_DATA = nip2.desktop nip2mime_DATA = nip2.xml nip2appdata_DATA = nip2.appdata.xml install-exec-hook: -rm -rf ${DESTDIR}$(datadir)/doc/nip2 $(mkinstalldirs) ${DESTDIR}$(datadir)/doc/nip2 -cp -r ${top_srcdir}/doc/html ${top_srcdir}/doc/pdf ${DESTDIR}$(datadir)/doc/nip2 -rm -rf ${DESTDIR}$(datadir)/doc/nip2/html/CVS -rm -rf ${DESTDIR}$(datadir)/doc/nip2/pdf/CVS if UPDATE_DESKTOP install-data-hook: -$(UPDATE_MIME_DATABASE) ${DESTDIR}$(datadir)/mime -$(UPDATE_DESKTOP_DATABASE) ${DESTDIR}$(datadir)/applications endif dist-hook: # make sure we don't get any .svn dirs from EXTRA_DIST # also "fred" gets left around occasionally -find $(distdir) -name .svn -exec rm -rf {} \; -find $(distdir) -name fred -exec rm {} \; uninstall-hook: # make sure we have write permission for 'rm' -chmod -R u+w ${DESTDIR}$(datadir)/doc/nip2 -rm -rf ${DESTDIR}$(datadir)/doc/nip2 -$(UPDATE_MIME_DATABASE) ${DESTDIR}$(datadir)/mime -$(UPDATE_DESKTOP_DATABASE) ${DESTDIR}$(datadir)/applications nip2-8.7.0/TODO0000644000175000017500000007527113224651032010021 00000000000000- add tests for new stuff - seeing occasional "rewind image with active regions" message - should parse_float / _int etc. allow leading and trailing spaces? (split is_space x)?0 - how about adding zip2 10 [1..5] == [[10, 1], [10, 2], [10, 3], .. should be harmless, and quite useful same for zip3 etc. as well check zip use, we probably have this code there already, in various places - sharpen should use new interface? - can we call affine from nip2 vips_call? do we need a double array? - hough_circle etc. don't get cached ... they use the vips8 API and the vips cache only works for vips8 we can't turn on the vips8 cache since it does not know about invalidate - columns can move about on load in large workspaces - hide tabs if only one tab in window, though we'd need to allow tab drop anywhere in window for that - Matrix / New / Laplacian edit a cell, turns into a plain matrix need to override edit method same for gaussian rather tricky, compared to square / circle etc. - breadcrumb trail for prog window, so you can get back to where you were? - lambdas don't pattern match? (\[a, b] a + b) - load jpg, ^Q, no leaks load jpg, paint bar, paint one dot, ^Q, no leaks load jpg, extract area, paint bar, paint one dot, ^Q, leaks load jpg, extract area, paint bar, paint one dot, ^Z, ^Q, leaks load jpg, extract area, paint bar, paint one dot, close window, ^Q, leaks seems to leak: original image, one large regions on that image (full width) extract area operation extracted image region a bit bigger than paint action on that image 0) VipsRegion (0x8b052a0) VipsRegion (object), base class VipsRegion: 0x8b052a0, im = 0x887aad0, left = 192, top = 128, width = 45, height = 2 VipsRegion (0x8b052a0) 1) VipsImage (0x887aad0) VipsImage (image), image class 237x202 uchar, 3 bands, srgb, partial VipsImage (0x887aad0) 2) VipsImage (0x8016b30) VipsImage (image), image class 972x1296 uchar, 3 bands, srgb, openin VipsImage (0x8016b30) 3) VipsRegion (0x8b05340) VipsRegion (object), base class VipsRegion: 0x8b05340, im = 0x8016b30, left = 0, top = 30, width = 972, height = 283 VipsRegion (0x8b05340) 4) VipsExtractArea (0x882a910) VipsExtractArea (extract_area), extract an area from an image - extract_area ((VipsImage*) 0x8016b30) 142 158 237 202 VipsExtractArea (0x882a910) something to do with vips_image_wio_input() and the way it rewinds a PARTIAL image? called from im_rwcheck() - os x build reports missing jasper dylib? - draw_circle could extract, draw and insert for huge memuse reduction - section on compat mode for the docs see mail to MvGulick for some notes - expose more of the tone funcs in nip2 - quite a few hist operations have no GUI ... histspec, for example? - nip2 should use zooming support, if possible - the windows setup .exe install a bazillion .png icons we will never use, then installs them all again as .svg, which we will certainly never use - add extract_volume, cf. "grid" record tile_size in meta somewhere? grid could set it, save a parameter off extract_volume also extract_sequence to get volume over time - image + complex constant would be nice - ban parameters which are built-ins, eg. "im", "re" etc., you get nasty crashes see also notes below: a new parser could fix this can only ban for new code? do we have duff code in compat? argh yes there are at least 15 like this, fix them or fix the parser? also need to disable this check for compat defs better to fix the parser, it can't be that hard need to fix up the list comp compiler too, sigh - we can't define local superclasses at the moment eg. consider: Fred = class { Jim a = class { value = a + 12; } Jennie x = class Jim x { value = 99; } } you can't do (Fred.Jennie 12) since Jim will have a secret 'this' param (because it is a class member) and superclass constructors can't have secrets don't automatically give all members 'this' as a secret, check that they make references to other class members that do need secrets first - turn on GM in prefs, have to restart before _stdenv.def:magick sees the change - try this: Workspaces.untitled has_member "A1" A1 doesn't seem to work? - matrix_gaussian_blur could have an 'accuracy' or 'max error' param? expose in custom blur etc. - oo_binary etc. needs revising, we don't search down branches as we should for example, Matrix does: // compound ... don't do iteration [this.Matrix_base (op.fn this.value x.value), (is_Matrix x || is_Real x || is_Vector x) && op.type == Operator_type.COMPOUND_REWRAP], which is stupid, we should not wire Real and Vector in there, it ought to be something like: [this.Matrix_base (op.fn this.value x), op.type == Operator_type.COMPOUND_REWRAP], ie. don't strip the .value off x and rely on op.fn to do that, but this breaks in various ways remove all of _Object and redo it, thinking about what we want operators to look like and what we want types to look like. Have a base class for operators that does most of the standard stuff get rid of the operator types rewrap / arithmetic / relational etc. etc. - try point re = x { (x, y) = re; } it's the 're' param, it stops x being bound to the get-real-part-of-complex builtin expands to point re = x { $$x = re; x = re $$x, is_complex $$x = error "bad match"; } add secrets point point.re = x point.re { $$1 $$1.re = point.re; x x.re = x.re ($$x point.re), is_complex ($$x point.re) = error "bad match"; } x compiles to if_then_else ( ( )) ( ) abstracting point.re after var abstract ((S ((Sr (if_then_else )) ((Sl ((Sr (&& )) ((Sr ) ))) true))) ((Sl ((Sr SHARE0[(: )]) ((Sr ) ))) ((REF0 ( )) [ ]))) reduce and get reduce_spine: ( ( (I (1,2)))) reduce_spine: ( ( (I (1,2)))) sym-param found, argh: point.re maybe fix this when we revise the parser would be a good time to add multiple definitions as well - redo name resolution in parser ... scrap the patch thing, instead have a separate 'resolve' step that runs after parsing a top-level don't create ZOMBIE symbols, instead make REF nodes in the tree this binds local references, but leaves external refs dangling we do a final link at load time when we copy into the heap do we need zombies at all now? make a fork for this - we have ws->window_width, can we use the one on Model now instead? - new inplace stuff needs a test suite - 'don't show this dialog again' on delete row dialog, also in prefs box_yesno() could take a string which is the name of a pref to check for ask-or-not - how about something that does: im' = operation_list [a, b, c, d] im it does a fold: im' = d (c (b (a im))) but the intermediate images are reused, so you can do in-place stuff with it we could get rid of lineset! - mac binary has a broken im_text() argh - do we allow [r, g, b] = Image_file "babe.jpg" since ? is band index and list index, it seems to make sense we have image ++ image image ++ [] == image for bandjoin, so that lines up too, I guess hmm reverse image to swap the bands over? heh need to be able to override hd and tl - Ackermann http://shootout.alioth.debian.org/great/benchmark.php?test=ackermann&lang=all&sort=cpu A x y = y + 1, x == 0 = A (x - 1) 1, y == 0 = A (x - 1) (A x (y - 1)); correct test result: A 3 4 == 125 A 3 10 is benchmark test ... we fail with a "C stack overflow" error A 3 9 == 4093 works OK we could make this a lot quicker with some arithmetic streamlining could we do tail-recursion elimination? strictness analysis would help too - Fib http://shootout.alioth.debian.org/great/benchmark.php?test=fibo&lang=all&sort=cpu F x = 1, x == 0 = 1, x == 1 = F (x - 2) + F (x - 1); correct output F 32 == 3524578 cima is ~370s for this (!!) work machine is about 50s dell vostro laptop is 45s without optimiser - turn on DEBUG in heap.c, run the fibonacci benchmark we heap_copy F every time it recurses! because when we heap_copy we don't link recursive references try fixing this ... but remember the problems we had with shared classes when we did link-to-value rather than link-to-copy we also have a huge amount of stuff in the heap, could we trim this down? how does it all get pulled in? is it preferences? in nip1, F is about 4x faster WONTFIX for 7.20 ================ - look at: http://www.eggheadcafe.com/software/aspnet/35467981/programmatic-console-appl.aspx possibly better than nip2-cli.exe - turning a column from Many Stats into a vector for doing arithmetic is very tricky argh add a matrix->vector converter? or maybe a one column or 1 row matrix should also be a vector - try: nip2 Workspaces.uniformshapes2.A1.start_line=21 uniformshapes2.ws --set does not work for non-toplevels - try: A1 = [1] A2 = [x :: x <- A1] change A1, A2 does not update, argh we get: link_expr_new: expr A2.$$lcomp0 references link->child = A1 so perhaps we are updating the local of A2, but not A2? A2 is certainly being marked dirty ... on change of A1 we get: row_dirty_set_single: A1 clear_error = true symbol_dirty_set: A1 (0x1a59480) symbol_dirty_set: A2 (0x1a595a0) symbol_recalculate_check: untitled.A1 row_dirty_clear: A1 row_recomp_all: done row A1 - 0.000143873s row_dirty_set_single: A1 clear_error = false row_dirty_clear: A1 symbol_dirty_clear: A1 (0x1a59480) success: [2] symbol_recalculate_check: untitled.A2 symbol_dirty_clear: A2 (0x1a595a0) success: [1] so maybe A2.something is being updated, but the row is not we now mark a row dirty if a sub-expr is dirty. but in row_renerate(), we don't build subexprs should we mark the subexpr dirty? (or maybe we do?) or should we always copy all subexprs when we copy an expr or only subexprs with no row? do we calc rows outside-in or inside-out? does this affect copying subrows? when do we copy now, the first time a row is made? - we destroy and rebuild all links during recomp (eg. turn on DEBUG in link.c), why is this? can't we only rebuild on a change of source text? - fix the FIXME in itext_clear_edited() or wherever it is - try: start nip2 dir untitled create A2, A3, etc. A1 does not update when we add/remove a def to workspace, should we mark the ws dirty? - lambdas should allow patterns? eg.: map (\[x, y] x + y) [[1, 2], [3, 4]] == [3, 7] - OS X bundler: http://sourceforge.net/apps/trac/gtk-osx/wiki/Bundle test? - imageinfo_make_paintable() no longer copies to a file, since this used to cause problems with dangling pointers because of the im_close()s we had to do however, this means we now do all painting in memory :-( do we need to add API to change a memory image (eg. a "p") into a file? - test Joe's layout thing, compare to the thing we do in study2 to make the diagnostic image - im_blend(), im_ifthenelse(), im_add() etc. now do bandalike/formatalike where do we use our bandalike/formatalike stuff? remove our stuff, though make sure we have equivalents in vips now - outline text example - needs a custom convol menu item which can loop over a group of matricies with a single image actually, we need to nail this down, otherwise when we pass in a list of sample texts the loops don't nest - right-click menu on row button should have items for "Jump to referrer / WC1 / JC1 ..." and "Jump to referred / ..." - why didn't im_copy_file() work? mysterious - line colours are wrong, argh, very mysterious, see plot_new_gplot() - gtk3.0 tests: build with #define G_DISABLE_DEPRECATED #define G_DISABLE_SINGLE_INCLUDES #define GDK_DISABLE_DEPRECATED #define GTK_DISABLE_DEPRECATED #define GDK_DISABLE_SINGLE_INCLUDES #define GTK_DISABLE_SINGLE_INCLUDES paste into config.h, somehow need to remove: GtkType gtk_type_new gtk_signal_connect GTK_SIGNAL_FUNC gtk_signal_handler_block_by_data ` gtk_signal_connect_object GTK_CHECK_CAST GTK_CHECK_TYPE GtkSignalFunc - add Set menu to Math with mkset/union/intersection/difference ? could do bit operations on images? - lcomps like: argh = [x :: x <- poop] the 'x' gets copied inside the lcomp, leaving a zombie 'x' attached to argh, which Program / View / Errors then reports fix: don't resolve names as we parse and junk the ugly patch list thing instead, have a separate resolve stage that runs after we've moved scraps of graph to their final home - if we want full VipsObject introspection we will need a lot more vips_object_arguments (name2gtype "VipsInterpolateYafrsmooth") -> ["sharpness"] need some equivalent for GParamSpec / VipsArgument VipsArgument name type .... = class {} return a list of these from vips_object_arguments()? - heap_map_dict() should be reduce_map_dict(), since it does reduction, argh redo heap_map_dict() in terms of reduce_map_dict() actually, remove all the reduce_ stuff, it's daft to have a distinction something to do when we break Snip out into libsnip - Plot window should have image header menu item? not trivial, image header needs a conversion to watch we'd need to make a conversion in plotmodel - filesel guess-file-type-from-suffix needs fixing copy the vips model of having a user_name which is just "Workspace" or somesuch, and making "Workspace file (*.ws)" string at runtime use this to identity file types in util.c as well: get_image_info() needs it - for rows made by typing stuff, always show the formula as well as the value by default anyway? we'd need to always show the up/down arrows, not just for classes - drag from an image thumbnail to the ws background and you get a new column with "A2" or whgatever in does not work for plot thumbnails! how annoying - right-click on image background to get a context menu with save/replace/header? same as row thumbnail context? - look at using goffice instead of gtkplot for graphs http://ftp.gnome.org/pub/gnome/sources/goffice/ also in synaptic there's also a new cairo-based gtkplot in SVN, apparently - try last [1..] then CTRL-W ... we can quit the app, but it's still evaling and the prompt never comes back - Math / Cluster is a bit useless, will it work for complex numbers? vectors? colours? groups? what would we have to do to get it to work for these other types? - toolkit load is where compiled code would go in need to make load / parse / compile self-contained ... the only output is a list of symbols, each with code and sub-symbols; there are no toolkits or whatever made after load / parse / compile, we need to walk the symbol list building tools and all that stuff we do: load toolkit: get filesize, date last modified, md5sum look in ~/.nip2-7.x.x/cache for a file named with that md5sum if present, open and check first two fields: filesize and date if match, load compiled code if no match, load / parse / compile toolkit, then save compiled code to ~/.nip2-7.x.x./cache walk symbol list building tools and all that stuff how much time will this really save? can we easily get an estimate? steps to follow: 1. make load / parse / compile self-contained, with separate pass to build tools etc. this is a useful cleanup whatever else we do 2. now we know exactly what the output of load / parse / compile is, we should be able to write to a file make our own binary format, don't use XML ... we want speed 3. try loading and benchmarking 4. if the benchmarks look promising, harden and polish - numbering of group of group save seems to skip one at end of line? - Math / Cluster is a bit useless, will it work for complex numbers? vectors? colours? groups? what would we have to do to get it to work for these other types? - segv in test_toolkits on laptop (inside fftw3) ???!? valgrinds cleanly on work machine - try last [1..] then CTRL-W ... we can quit the app, but it's still evaling and the prompt never comes back - configure no longers sets GMSGFMT, is this OK? test on OS X - for rows made by typing stuff, always show the formula as well as the value by default anyway? we'd need to always show the up/down arrows, not just for classes - drag from an image thumbnail to the ws background and you get a new column with "A2" or whgatever in does not work for plot thumbnails! how annoying - right-click on image background to get a context menu with save/replace/header? same as row thumbnail context? - look at using goffice instead of gtkplot for graphs http://ftp.gnome.org/pub/gnome/sources/goffice/ also in synaptic WONTFIX for 7.14 ================ - quit while a thumbnail is painting: IMAGEs are leaked? seems esp. bad with greyc, perhaps just because it's so slow - do we enforce no-args-to-LHS-pattern anywhere? try [a,b] a b = 12; - use destroy_if_destroyed() in more places? grep destroy_ *.h - after pressing "Process" in the edit window, we always select last_sym, which is often not what we want make it jump less after a process ... eg. try editing something in the middle of Image/Transform, very annoying - use compile->last_sym to spot chains of defs multiple definitions of the same function are allowed, provided they all multiple definitions of the same function are allowed, provided they all have the same number of arguments, and provided only one of them has no argument pattern matching example: fred [a, b, 1] = a * b; fred (Image x) = rot90 x; fred z = error "what"; any of these can have locals, those locals just apply to that one definition this compiles to: fred $$a4 = $$fred1, is_list $$a4 && len $$a4 == 2 && $$a4?2 == 1 = $$fred2, is_instance_of "Image" $$a4 = $$fred3 { $$fred1 = a * b { a = $$a4?0; b = $$a4?1; } $$fred2 = rot90 x { x = $$a4; } $$fred3 = error "what"; { z = $$a4; } } so each pattern-matching definition generates a condition and an action constants in patterns become part of the condition test the action goes into a private function, the conditions are joined together in the function wrapper the no-pattern case (if present) becomes the action for the "otherwise" clause in the wrapper if not present, we generate (error "pattern match failed") or somesuch for the default case we will need to regenerate the wrapper function every time a definition of fred is added or removed ... can we do this easily? when are two definitions considered equal? should we warn about this? "fred x" could occur in two files, for example process: * we see a "fred arg-list" incoming * does the arg list contain any patterns? yes: * do we already have a fred in this scope? yes: * the existing fred must be the wrapper, this must be a new possible RHS * check that the number of args matches no: * generate a fred to act as the wrapper * add args called $$arg1 etc. to the main fred * add this new fred as a $$fredn local to the current fred * expand the patterns as local references to the main fred's arguments * parse the rest of the def in that context * keep the pattern list around, we'll need it to generate the ifs for the wrapper later no: * do we have a fred in this scope? yes: * check the previous fred was a pattern matcher * check the number of args matches * check there isn't already a default case * add as above no: * add as a regular non-pattern definition issues: * where do we store the pattern lists? we can't expand them at parse-time, since we need them to make the wrapper (which we can't make until we've seen all the candidate RHS) * when one of the RHS is changed, we need to regenerate the wrapper, how do we do this? (could nuke the generated code in the compile when we see a new RHS, then rebuild the wrapper in compile on the next heap_copy?) * our current condition generator won't work ... we need to test consts as well, and it'll be rather inefficient as we'll repeatedly test the trunk as we loop over the leaves --- instead, walk the pattern recursively top-down testing each node process: * see "fred" (as opposed to simple_pattern) * is there already a fred in scope? yes: * was current_compile->last_sym also a "fred"? yes: * another definition yes: * this must be an alternative definition - we put the 2nd fred in as a local of the first, but then the 2nd can see all the stuff the first has as locals z = 42; fred 1 = 12 { z = 99; } fred 2 = z; "fred 2" will return 99 :( we need to make "fred 2 = z" into another fred at the same level, eg $$alternate42$fred 2 = z; Nope, then how do we link the freds together for remove etc.? Better: see a new sym (fred), create it parse args with simple names becoming params, patterns becoming $$arg42 plus a local $$patt42 holding the pattern source expand the pattern to an access def as well, so our children can bind to it at the = sign, test for any pattern args present .. if there are none, carry on as before otherwise, make a new local called $$alternate42 or whatever and parse the RHS into that at the end of parse, need to resolve outwards twice, since we nest in twice now if we see another fred, check that the number of args matches and then parse in as $$alternate99 what abut fred 2 a = 12; fred 1 b = 32; the first fred will make a top-level with fred $$arg12 a = { $$alernate42 = 12; $$patt12 = 2; } then when we parse the 2nd fred the name of the 2nd param is wrong :( Even betterer: use GLR to split off the four cases for us ident = pattern = ident ident_list = ident pattern_list = change pattern syntax so that ident is not part of simple_pattern need to change lcomp as well so we need to check why PARSE_PARAMS gets used: can we do without the params part? yes, it's used so we can edit functions, but we no longer do this these days all we need is expr I think, but we'd need a small action wrapper around it to wipe out any existing tree and locals Find_item = class Menuaction "_Find" ("find a transform which will map sample image onto " ++ "reference") { action reference sample = class Transform b reference.width reference.height { _vislevel = 3; // controls order = rubber_order; interp = rubber_interp; wrap = rubber_wrap; max_err = Expression "Maximum error" 0.3; max_iter = Expression "Maximum iterations" 10; // transform [a,b,c] = transform_search max_err max_iter order interp wrap sample reference; transformed_image = Image a; final_error = c; } } fails with Bad superclass. Superclass constructor "Image_transform_item.Image_rubber_item.Transform" should have no secret arguments. but this: Find_item = class Menuaction "_Find" ("find a transform which will map sample image onto " ++ "reference") { action reference sample = class _t { _vislevel = 3; // controls order = rubber_order; interp = rubber_interp; wrap = rubber_wrap; max_err = Expression "Maximum error" 0.3; max_iter = Expression "Maximum iterations" 10; // transform [a,b,c] = transform_search max_err max_iter order interp wrap sample reference; transformed_image = Image a; _t = Transform b reference.width reference.height; final_error = c; } } (ie. make the superclass constructor into a member) works fine - try using bison's location system http://www.gnu.org/software/bison/manual/html_mono/bison.html#Locations - add something to Symbol: Symbol *access_for; links generated access def to the $$thing4 which holds the RHS handy for the program window, also maybe for lcomp code gen? also for row edits - don't offer to clear temps if there's been a crash need to be able to test for process-still-running by PID try http://msdn2.microsoft.com/en-us/library/ms886766.aspx gboolean process_running( int pid ) { HANDLE handle; if( (handle = OpenProcess( 0, FALSE, pid )) ) { CloseHandle( handle ); return( TRUE ); } return( FALSE ); } - autoarrange after every column resize or move animate movement, so columns slither out of the way and in to place when you drop duplicate column placement would be odd: maybe place duplicate below? also new column? what about dropping an image on to the ws background? - there's some left-recursion in the parser, eg. comma_list, is this easily fixable? - add (*) (operator sections) ... need a binup / uop production? can't do this without losing precedence stuff, it'll need a separate production for sections - magic definition maker could make a workspace-local def, rather cool - test classmodel_dict_new() ... part of classmodel member automation need to implement member edit for OPTION groups classmodel_done_member() ... read widget set -> model classmodel_buildedit_member( ... model -> build widget set part of the [["key",value]] arg type - can we get VIPS errors reported in Error too? we'd need to add logging to vips I think - toolkits / find doesn't find builtins on their name ... eg. search for "im_add" too hard to fix with the way searching is done now - turn on update regions during drag, fix the x pos, try dragging, horrible flickering as we update twice, once after the drag motion and once after the recomp if you comment out the explicit vobject_refresh() in regionview_model_update() the flickering goes, but region dragging is then very unresponsive fix this when we get fast recomp back again - have a test_types.ws ... test arithmetic on all combinations of _types? - panner would be cool - tooltips on Expression rows always show unedited formula could special-case formula for things with expression RHS? - what about iimage, iregion, iarrow ... can we member automate these? why are they different? - can't see error indications in noedit mode should set a red background for display area as well as for rowview button? - need to be able to override cons to be able to make a List class :-( see reduce.c:1710 this will change the strictness of cons ... how much breakage will this cause? very unclear try this as a quick hack need to do this before we can finish List need List to make gamma easy - unselected column headers are too like the bg colour on windows? - python uses z.real and z.imag to extract real/image, should we add this too? we don't really have complex as a true class, so it would be rather odd need to add "[a].head" etc as well - python blocks complex->real with casts ... insists you use .imag/.real or abs() - if nip sees a IM_RW_IMAGE argument, it could automatically do this: int im_flood_blob_copy( IMAGE *in, IMAGE *out, int x, int y, PEL *ink ) { IMAGE *t; if( !(t = im_open_local( out, "im_flood_blob_copy", "t" )) || im_copy( in, t ) || im_flood_blob( t, x, y, ink, NULL ) || im_copy( t, out ) ) return( -1 ); return( 0 ); } so it would turn a single IM_RW_IMAGE arg into a paired input and output arg could make im_lineset() into a regular inplace func and rely on nip to wrap and unwrap junk flood_blob_copy nip could do this lazilly ... if we see the user doing im_line (im_line ...) ... then we could make one memory image and call im_line twice on it destructively ... cool! we'd need to check refcounts to make sure the intermediate wasn't being used anywhere else hmm! might actually be very hard, we don't have true refcounts for things in the heap need to do it on read instead: - for image i - use as an IM_RW_IMAGE arg ... copy to a memory area and pass in memory handle - return memory area IMAGE j, and set a flag saying "can operate on destructively" - if we use j as an IM_RW_IMAGE arg, skip the copy and just pass memory area in destructively ... we now have two ImageInfo sharing a single IMAGE - !!!! - does ImageInfo allow IMAGE sharing? not sure it does - maybe this needs to be a vips8 feature when we'll have refcounts on IMAGE - tooltip on column says which other columns items in this column refer to, and which columns refer to items in this column - how about a nip start folder common to all versions so nip2-7.11.14 tries .nip2-7.11.14/start .nip2-7.11/start .nip2-7/start .nip2/start or maybe .nip2/7.11.14/start .nip2/7.11/start .nip2/7/start .nip2/start bit less cluttered also, we could have .nip2/tmp and not have multiple nip2 tmp areas workspace recover after crash could break though ... maybe keep ws saves in .nip2/7.11.4/tmp? - think again about class arg checks is there some way we can avoid the _check overhead? or at least check less often - plotpresent/imagepresent could have a common base class with the focus stuff in? also kb nav, zoom, drag-scroll a bit difficult, because we want two different policies on window resize: plot should change the object to match the window - photographic negative should also be in image/levels ? no, it does ->sRGB, (255-) etc., so it's better as a filter - gtk+ 2.12 has a treeview widget with rectangular select and grid lines use instead of gtksheet? - stop image flickering on clock recomp? want background pattern to be a property of the image display widget, not the image? so we fade in tiles when that section of the image has never been displayed before (eg. on scroll or zoom) we don't fade when that section has been painted and we are just changing the image (eg. on recalc) if fadesteps == 1, only paint the sections of the tile for which mask == 255 this way we will never paint the bg pattern need some hack for scroll/zoom ; test for mask == 255 would be slow :(